<?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>237340</bug_id>
          
          <creation_ts>2022-03-01 13:19:11 -0800</creation_ts>
          <short_desc>Start using Speedometer 2.1 in browserbench.org</short_desc>
          <delta_ts>2024-03-15 04:01:01 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</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="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>annevk</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1847158</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-03-01 13:19:11 -0800</bug_when>
    <thetext>Start using Speedometer 2.1 in browserbench.org</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847161</commentid>
    <comment_count>1</comment_count>
      <attachid>453533</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-03-01 13:25:44 -0800</bug_when>
    <thetext>Created attachment 453533
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847534</commentid>
    <comment_count>2</comment_count>
      <attachid>453533</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-03-02 11:23:18 -0800</bug_when>
    <thetext>Comment on attachment 453533
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849388</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-03-08 13:20:20 -0800</bug_when>
    <thetext>&lt;rdar://problem/89985927&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2021280</commentid>
    <comment_count>4</comment_count>
    <who name="Anne van Kesteren">annevk</who>
    <bug_when>2024-03-15 04:01:01 -0700</bug_when>
    <thetext>No longer relevant now we have 3.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453533</attachid>
            <date>2022-03-01 13:25:44 -0800</date>
            <delta_ts>2022-03-02 11:23:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237340-20220301132543.patch</filename>
            <type>text/plain</type>
            <size>10100051</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwNjY3CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2Vy
YmVuY2gub3JnL0NoYW5nZUxvZyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvQ2hhbmdlTG9n
CmluZGV4IDZkODlhYjNhOTYxYjFhMTYyNWM4ZjlkZWUzNGM0NDEzOTlkMGJiODMuLjU4YTE3NWY5
NTQ3N2E3NWI2NmY0ZmFkNDQwODZjNDAzZWRlNDYzNTkgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL2Jy
b3dzZXJiZW5jaC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjItMDMtMDEgIFl1c3VrZSBTdXp1a2kgIDx5
c3V6dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBTdGFydCB1c2luZyBTcGVlZG9tZXRlciAyLjEg
aW4gYnJvd3NlcmJlbmNoLm9yZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjM3MzQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVXBkYXRlIFNwZWVkb21ldGVyIG9uIGJyb3dzZXJiZW5jaC5vcmcgdG8gMi4x
LgorCiAyMDIxLTA2LTA3ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+
CiAKICAgICAgICAgUmVsZWFzZSBNb3Rpb25NYXJrIDEuMiEhISDwn46JCmRpZmYgLS1naXQgYS9X
ZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL0ludGVyYWN0aXZlUnVubmVy
Lmh0bWwgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL0ludGVyYWN0
aXZlUnVubmVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWNiZmFhMjg4OTkzZTkzYzNjNmJhNjhjZTkzOWE2
YWI2NWRiZGRiOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcv
U3BlZWRvbWV0ZXIyLjEvSW50ZXJhY3RpdmVSdW5uZXIuaHRtbApAQCAtMCwwICsxLDE3MyBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPlNwZWVkb21ldGVyIDIuMSBJ
bnRlcmFjdGl2ZSBSdW5uZXI8L3RpdGxlPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9iZW5jaG1h
cmstcnVubmVyLmpzIiBkZWZlcj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdGVz
dHMuanMiIGRlZmVyPjwvc2NyaXB0PgorPHN0eWxlPgoraWZyYW1lIHsgYm9yZGVyOiAxcHggc29s
aWQgYmxhY2s7IH0KK29sIHsgbGlzdC1zdHlsZTogbm9uZTsgbWFyZ2luOiAwOyBwYWRkaW5nOiAw
OyB9CitvbCBvbCB7IG1hcmdpbi1sZWZ0OiAyZW07IGxpc3QtcG9zaXRpb246IG91dHNpZGU7IH0K
Ky5ydW5uaW5nIHsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH0KKy5yYW4geyBjb2xvcjog
Z3JleTsgfQorbmF2IHsgcG9zaXRpb246IGFic29sdXRlOyByaWdodDogMTBweDsgaGVpZ2h0OiA2
MDBweDsgfQorbmF2ID4gb2wgeyBoZWlnaHQ6IDEwMCU7IG92ZXJmbG93LXk6IHNjcm9sbDsgfQor
PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KKworZnVuY3Rpb24gZm9ybWF0VGVz
dE5hbWUoc3VpdGVOYW1lLCB0ZXN0TmFtZSkgeworICAgIHJldHVybiBzdWl0ZU5hbWUgKyAodGVz
dE5hbWUgPyAnLycgKyB0ZXN0TmFtZSA6ICcnKTsKK30KKworZnVuY3Rpb24gY3JlYXRlVUlGb3JT
dWl0ZXMoc3VpdGVzLCBvbnN0ZXAsIG9ucnVuKSB7CisgICAgdmFyIGNvbnRyb2wgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCduYXYnKTsKKyAgICB2YXIgb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdvbCcpOworICAgIHZhciBjaGVja2JveGVzID0gW107CisgICAgZm9yICh2YXIgc3VpdGVJ
bmRleCA9IDA7IHN1aXRlSW5kZXggPCBzdWl0ZXMubGVuZ3RoOyBzdWl0ZUluZGV4KyspIHsKKyAg
ICAgICAgdmFyIHN1aXRlID0gc3VpdGVzW3N1aXRlSW5kZXhdOworICAgICAgICB2YXIgbGkgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpOworICAgICAgICB2YXIgY2hlY2tib3ggPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOworICAgICAgICBjaGVja2JveC5pZCA9IHN1aXRl
Lm5hbWU7CisgICAgICAgIGNoZWNrYm94LnR5cGUgPSAnY2hlY2tib3gnOworICAgICAgICBjaGVj
a2JveC5jaGVja2VkID0gIXN1aXRlLmRpc2FibGVkOworICAgICAgICBjaGVja2JveC5vbmNoYW5n
ZSA9IChmdW5jdGlvbiAoc3VpdGUsIGNoZWNrYm94KSB7IHJldHVybiBmdW5jdGlvbiAoKSB7IHN1
aXRlLmRpc2FibGVkID0gIWNoZWNrYm94LmNoZWNrZWQ7IH0gfSkoc3VpdGUsIGNoZWNrYm94KTsK
KyAgICAgICAgY2hlY2tib3gub25jaGFuZ2UoKTsKKyAgICAgICAgY2hlY2tib3hlcy5wdXNoKGNo
ZWNrYm94KTsKKworICAgICAgICBsaS5hcHBlbmRDaGlsZChjaGVja2JveCk7CisgICAgICAgIHZh
ciBsYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJyk7CisgICAgICAgIGxhYmVs
LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGZvcm1hdFRlc3ROYW1lKHN1aXRl
Lm5hbWUpKSk7CisgICAgICAgIGxpLmFwcGVuZENoaWxkKGxhYmVsKTsKKyAgICAgICAgbGFiZWwu
aHRtbEZvciA9IGNoZWNrYm94LmlkOworCisgICAgICAgIHZhciB0ZXN0TGlzdCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ29sJyk7CisgICAgICAgIGZvciAodmFyIHRlc3RJbmRleCA9IDA7IHRl
c3RJbmRleCA8IHN1aXRlLnRlc3RzLmxlbmd0aDsgdGVzdEluZGV4KyspIHsKKyAgICAgICAgICAg
IHZhciB0ZXN0SXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpJyk7CisgICAgICAgICAg
ICB2YXIgdGVzdCA9IHN1aXRlLnRlc3RzW3Rlc3RJbmRleF07CisgICAgICAgICAgICB2YXIgYW5j
aG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOworICAgICAgICAgICAgYW5jaG9yLmlk
ID0gc3VpdGUubmFtZSArICctJyArIHRlc3QubmFtZTsKKyAgICAgICAgICAgIHRlc3QuYW5jaG9y
ID0gYW5jaG9yOworICAgICAgICAgICAgYW5jaG9yLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKGZvcm1hdFRlc3ROYW1lKHN1aXRlLm5hbWUsIHRlc3QubmFtZSkpKTsKKyAgICAg
ICAgICAgIHRlc3RJdGVtLmFwcGVuZENoaWxkKGFuY2hvcik7CisgICAgICAgICAgICB0ZXN0TGlz
dC5hcHBlbmRDaGlsZCh0ZXN0SXRlbSk7CisgICAgICAgIH0KKyAgICAgICAgbGkuYXBwZW5kQ2hp
bGQodGVzdExpc3QpOworCisgICAgICAgIG9sLmFwcGVuZENoaWxkKGxpKTsKKyAgICB9CisKKyAg
ICBjb250cm9sLmFwcGVuZENoaWxkKG9sKTsKKworICAgIHZhciBidXR0b24gPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdidXR0b24nKTsKKyAgICBidXR0b24udGV4dENvbnRlbnQgPSAnU3RlcCc7
CisgICAgYnV0dG9uLm9uY2xpY2sgPSBvbnN0ZXA7CisgICAgY29udHJvbC5hcHBlbmRDaGlsZChi
dXR0b24pOworCisgICAgdmFyIGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRv
bicpOworICAgIGJ1dHRvbi50ZXh0Q29udGVudCA9ICdSdW4nOworICAgIGJ1dHRvbi5pZCA9ICdy
dW5TdWl0ZXMnOworICAgIGJ1dHRvbi5vbmNsaWNrID0gb25ydW47CisgICAgY29udHJvbC5hcHBl
bmRDaGlsZChidXR0b24pOworCisgICAgdmFyIGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ2J1dHRvbicpOworICAgIGJ1dHRvbi50ZXh0Q29udGVudCA9ICdTZWxlY3QgYWxsJzsKKyAg
ICBidXR0b24ub25jbGljayA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZm9yICh2YXIgc3VpdGVJ
bmRleCA9IDA7IHN1aXRlSW5kZXggPCBzdWl0ZXMubGVuZ3RoOyBzdWl0ZUluZGV4KyspIHsKKyAg
ICAgICAgICAgIHN1aXRlc1tzdWl0ZUluZGV4XS5kaXNhYmxlZCA9IGZhbHNlOworICAgICAgICAg
ICAgY2hlY2tib3hlc1tzdWl0ZUluZGV4XS5jaGVja2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAg
IH07CisgICAgY29udHJvbC5hcHBlbmRDaGlsZChidXR0b24pOworCisgICAgdmFyIGJ1dHRvbiA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOworICAgIGJ1dHRvbi50ZXh0Q29udGVu
dCA9ICdVbnNlbGVjdCBhbGwnOworICAgIGJ1dHRvbi5vbmNsaWNrID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICBmb3IgKHZhciBzdWl0ZUluZGV4ID0gMDsgc3VpdGVJbmRleCA8IHN1aXRlcy5sZW5n
dGg7IHN1aXRlSW5kZXgrKykgeworICAgICAgICAgICAgc3VpdGVzW3N1aXRlSW5kZXhdLmRpc2Fi
bGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGNoZWNrYm94ZXNbc3VpdGVJbmRleF0uY2hlY2tlZCA9
IGZhbHNlOworICAgICAgICB9CisKKyAgICB9OworICAgIGNvbnRyb2wuYXBwZW5kQ2hpbGQoYnV0
dG9uKTsKKworICAgIHJldHVybiBjb250cm9sOworfQorCit2YXIgcGFyc2VRdWVyeVN0cmluZyA9
IChmdW5jdGlvbiAocGFpckxpc3QpIHsKKyAgICB2YXIgcGFpcnMgPSB7fTsKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHBhaXJMaXN0Lmxlbmd0aDsgKytpKSB7CisgICAgICAgIHZhciBrZXlWYWx1
ZSA9IHBhaXJMaXN0W2ldLnNwbGl0KCc9JywgMik7CisgICAgICAgIGlmIChrZXlWYWx1ZS5sZW5n
dGggPT0gMSkKKyAgICAgICAgICAgIHBhaXJzW2tleVZhbHVlWzBdXSA9ICcnOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBwYWlyc1trZXlWYWx1ZVswXV0gPSBkZWNvZGVVUklDb21wb25lbnQo
a2V5VmFsdWVbMV0ucmVwbGFjZSgvXCsvZywgJyAnKSk7CisgICAgfQorICAgIHJldHVybiBwYWly
czsKK30pKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2guc3Vic3RyKDEpLnNwbGl0KCcmJykpOworCitm
dW5jdGlvbiBkaXNhYmxlQWxsU3VpdGVzRXhjZXB0KHN1aXRlTmFtZSkgeworICAgIFN1aXRlcy5m
b3JFYWNoKGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICAgICAgaWYgKGVsZW1lbnQubmFtZSAhPT0g
c3VpdGVOYW1lKQorICAgICAgICAgICAgZWxlbWVudC5kaXNhYmxlZCA9IHRydWU7CisgICAgfSk7
Cit9CisKK2Z1bmN0aW9uIHN0YXJ0VGVzdCgpIHsKKyAgICB2YXIgcXVlcnlQYXJhbSA9IHBhcnNl
UXVlcnlTdHJpbmdbJ3N1aXRlJ107CisgICAgaWYgKHF1ZXJ5UGFyYW0gIT09IHVuZGVmaW5lZCkK
KyAgICAgICAgZGlzYWJsZUFsbFN1aXRlc0V4Y2VwdChxdWVyeVBhcmFtKTsKKworICAgIHZhciBy
dW5uZXIgPSBuZXcgQmVuY2htYXJrUnVubmVyKFN1aXRlcywgeworICAgICAgICB3aWxsUnVuVGVz
dDogZnVuY3Rpb24gKHN1aXRlLCB0ZXN0KSB7CisgICAgICAgICAgICB0ZXN0LmFuY2hvci5jbGFz
c0xpc3QuYWRkKCdydW5uaW5nJyk7CisgICAgICAgIH0sCisgICAgICAgIGRpZFJ1blRlc3Q6IGZ1
bmN0aW9uIChzdWl0ZSwgdGVzdCkgeworICAgICAgICAgICAgdmFyIGNsYXNzTGlzdCA9IHRlc3Qu
YW5jaG9yLmNsYXNzTGlzdDsKKyAgICAgICAgICAgIGNsYXNzTGlzdC5yZW1vdmUoJ3J1bm5pbmcn
KTsKKyAgICAgICAgICAgIGNsYXNzTGlzdC5hZGQoJ3JhbicpOworICAgICAgICB9LAorICAgICAg
ICBkaWRSdW5TdWl0ZXM6IGZ1bmN0aW9uIChtZWFzdXJlZFZhbHVlcykgeworICAgICAgICAgICAg
dmFyIHJlc3VsdHMgPSAnJzsKKyAgICAgICAgICAgIGZvciAodmFyIHN1aXRlTmFtZSBpbiBtZWFz
dXJlZFZhbHVlcy50ZXN0cykgeworICAgICAgICAgICAgICAgIHZhciBzdWl0ZVJlc3VsdHMgPSBt
ZWFzdXJlZFZhbHVlcy50ZXN0c1tzdWl0ZU5hbWVdOworICAgICAgICAgICAgICAgIGZvciAodmFy
IHRlc3ROYW1lIGluIHN1aXRlUmVzdWx0cy50ZXN0cykgeworICAgICAgICAgICAgICAgICAgICB2
YXIgdGVzdFJlc3VsdHMgPSBzdWl0ZVJlc3VsdHMudGVzdHNbdGVzdE5hbWVdOworICAgICAgICAg
ICAgICAgICAgICBmb3IgKHZhciBzdWJ0ZXN0TmFtZSBpbiB0ZXN0UmVzdWx0cy50ZXN0cykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyArPSBzdWl0ZU5hbWUgKyAnIDogJyArIHRl
c3ROYW1lICsgJyA6ICcgKyBzdWJ0ZXN0TmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICsgJzogJyArIHRlc3RSZXN1bHRzLnRlc3RzW3N1YnRlc3ROYW1lXSArICcgbXNcbic7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmVz
dWx0cyArPSBzdWl0ZU5hbWUgKyAnIDogJyArIHN1aXRlUmVzdWx0cy50b3RhbCArICcgbXNcbic7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXN1bHRzICs9ICdBcml0aG1ldGljIE1lYW4g
OiAnICsgbWVhc3VyZWRWYWx1ZXMubWVhbiAgKyAnIG1zXG4nOworICAgICAgICAgICAgcmVzdWx0
cyArPSAnR2VvbWV0cmljIE1lYW4gOiAnICsgbWVhc3VyZWRWYWx1ZXMuZ2VvbWVhbiAgKyAnIG1z
XG4nOworICAgICAgICAgICAgcmVzdWx0cyArPSAnVG90YWwgOiAnICsgbWVhc3VyZWRWYWx1ZXMu
dG90YWwgKyAnIG1zXG4nOworICAgICAgICAgICAgcmVzdWx0cyArPSAnU2NvcmUgOiAnICsgbWVh
c3VyZWRWYWx1ZXMuc2NvcmUgKyAnIHJwbVxuJzsKKworICAgICAgICAgICAgaWYgKCFyZXN1bHRz
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgdmFyIHByZSA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ3ByZScpOworICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBl
bmRDaGlsZChwcmUpOworICAgICAgICAgICAgcHJlLnRleHRDb250ZW50ID0gcmVzdWx0czsKKyAg
ICAgICAgfQorICAgIH0pOworCisgICAgdmFyIGN1cnJlbnRTdGF0ZSA9IG51bGw7CisKKyAgICAv
LyBEb24ndCBjYWxsIHN0ZXAgd2hpbGUgc3RlcCBpcyBhbHJlYWR5IGV4ZWN1dGluZy4KKyAgICBk
b2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNyZWF0ZVVJRm9yU3VpdGVzKFN1aXRlcywKKyAgICAg
ICAgZnVuY3Rpb24gKCkgeyBydW5uZXIuc3RlcChjdXJyZW50U3RhdGUpLnRoZW4oZnVuY3Rpb24g
KHN0YXRlKSB7IGN1cnJlbnRTdGF0ZSA9IHN0YXRlOyB9KTsgfSwKKyAgICAgICAgZnVuY3Rpb24g
KCkgeyBydW5uZXIucnVuQWxsU3RlcHMoY3VycmVudFN0YXRlKTsgY3VycmVudFN0YXRlID0gbnVs
bDsgfSkpOworCisgICAgaWYgKHBhcnNlUXVlcnlTdHJpbmdbJ3N0YXJ0QXV0b21hdGljYWxseSdd
ICE9PSB1bmRlZmluZWQpCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdydW5TdWl0
ZXMnKS5jbGljaygpOworfQorCit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHN0YXJ0
VGVzdCk7CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvV2Vic2l0
ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9pbmRleC5odG1sIGIvV2Vic2l0ZXMv
YnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9pbmRleC5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIz
OTY3MWVjM2I3ZGI1N2VhNDE2MmNiMWJmYTI3NGY0YWZhMDVhNjQKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL2luZGV4Lmh0bWwKQEAg
LTAsMCArMSwxMDcgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8bWV0
YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11
dGYtOCI+CisgICAgPHRpdGxlPlNwZWVkb21ldGVyIDIuMTwvdGl0bGU+CisgICAgPGxpbmsgcmVs
PSJzdHlsZXNoZWV0IiBocmVmPSJyZXNvdXJjZXMvbWFpbi5jc3MiPgorICAgIDxzY3JpcHQgc3Jj
PSJyZXNvdXJjZXMvbWFpbi5qcyIgZGVmZXI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InJl
c291cmNlcy9iZW5jaG1hcmstcnVubmVyLmpzIiBkZWZlcj48L3NjcmlwdD4KKyAgICA8c2NyaXB0
IHNyYz0icmVzb3VyY2VzL2JlbmNobWFyay1yZXBvcnQuanMiIGRlZmVyPjwvc2NyaXB0PgorICAg
IDxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvc3RhdGlzdGljcy5qcyIgZGVmZXI+PC9zY3JpcHQ+
CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy90ZXN0cy5qcyIgZGVmZXI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxtYWluPgorICAgIDxhIGlkPSJsb2dvLWxpbmsiIGhyZWY9ImphdmFz
Y3JpcHQ6c2hvd0hvbWUoKSI+PGltZyBpZD0ibG9nbyIgc3JjPSJyZXNvdXJjZXMvbG9nby5wbmci
PjwvYT4KKworICAgIDxzZWN0aW9uIGlkPSJob21lIiBjbGFzcz0ic2VsZWN0ZWQiPgorICAgICAg
ICA8cD4KKyAgICAgICAgICAgIFNwZWVkb21ldGVyIGlzIGEgYnJvd3NlciBiZW5jaG1hcmsgdGhh
dCBtZWFzdXJlcyB0aGUgcmVzcG9uc2l2ZW5lc3Mgb2YgV2ViIGFwcGxpY2F0aW9ucy4KKyAgICAg
ICAgICAgIEl0IHVzZXMgZGVtbyB3ZWIgYXBwbGljYXRpb25zIHRvIHNpbXVsYXRlIHVzZXIgYWN0
aW9ucyBzdWNoIGFzIGFkZGluZyB0by1kbyBpdGVtcy4KKyAgICAgICAgPC9wPgorICAgICAgICA8
cCBpZD0ic2NyZWVuLXNpemUtd2FybmluZyI+PHN0cm9uZz4KKyAgICAgICAgICAgIFlvdXIgYnJv
d3NlciB3aW5kb3cgaXMgdG9vIHNtYWxsLiBGb3IgbW9zdCBhY2N1cmF0ZSByZXN1bHRzLCBwbGVh
c2UgbWFrZSB0aGUgdmlldyBwb3J0IHNpemUgYXQgbGVhc3QgODUwcHggYnkgNjUwcHguPGJyPgor
ICAgICAgICAgICAgSXQncyBjdXJyZW50bHkgPHNwYW4gaWQ9InNjcmVlbi1zaXplIj48L3NwYW4+
LgorICAgICAgICA8L3N0cm9uZz48L3A+CisgICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbnMiPgor
ICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJzdGFydFRlc3QoKSI+U3RhcnQgVGVzdDwvYnV0
dG9uPgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPHAgY2xhc3M9InNob3ctYWJvdXQiPjxhIGhy
ZWY9ImphdmFzY3JpcHQ6c2hvd0Fib3V0KCkiPkFib3V0IFNwZWVkb21ldGVyPC9hPjwvcD4KKyAg
ICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0icnVubmluZyI+CisgICAgICAgIDxkaXYg
aWQ9InRlc3RDb250YWluZXIiPjwvZGl2PgorICAgICAgICA8ZGl2IGlkPSJwcm9ncmVzcyI+PGRp
diBpZD0icHJvZ3Jlc3MtY29tcGxldGVkIj48L2Rpdj48L2Rpdj4KKyAgICAgICAgPGRpdiBpZD0i
aW5mbyI+PC9kaXY+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9InN1bW1hcml6
ZWQtcmVzdWx0cyI+CisgICAgICAgIDxoMT5SdW5zIC8gTWludXRlPC9oMT4KKyAgICAgICAgPGRp
diBjbGFzcz0iZ2F1Z2UiPjxkaXYgY2xhc3M9IndpbmRvdyI+PGRpdiBjbGFzcz0ibmVlZGxlIj48
L2Rpdj48L2Rpdj48L2Rpdj4KKyAgICAgICAgPGhyPgorICAgICAgICA8ZGl2IGlkPSJyZXN1bHQt
bnVtYmVyIj48L2Rpdj4KKyAgICAgICAgPGRpdiBpZD0iY29uZmlkZW5jZS1udW1iZXIiPjwvZGl2
PgorICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b25zIj4KKyAgICAgICAgICAgIDxidXR0b24gb25j
bGljaz0ic3RhcnRUZXN0KCkiPlRlc3QgQWdhaW48L2J1dHRvbj4KKyAgICAgICAgICAgIDxidXR0
b24gY2xhc3M9InNob3ctZGV0YWlscyIgb25jbGljaz0ic2hvd1Jlc3VsdERldGFpbHMoKSI+RGV0
YWlsczwvYnV0dG9uPgorICAgICAgICA8L2Rpdj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2Vj
dGlvbiBpZD0iZGV0YWlsZWQtcmVzdWx0cyI+CisgICAgICAgIDxoMT5EZXRhaWxlZCBSZXN1bHRz
PC9oMT4KKyAgICAgICAgPHRhYmxlIGNsYXNzPSJyZXN1bHRzLXRhYmxlIj48L3RhYmxlPgorICAg
ICAgICA8dGFibGUgY2xhc3M9InJlc3VsdHMtdGFibGUiPjwvdGFibGU+CisgICAgICAgIDxkaXYg
Y2xhc3M9ImFyaXRobWV0aWMtbWVhbiI+PGxhYmVsPkFyaXRobWV0aWMgTWVhbjo8L2xhYmVsPjxz
cGFuIGlkPSJyZXN1bHRzLXdpdGgtc3RhdGlzdGljcyI+PC9zcGFuPjwvZGl2PgorICAgICAgICA8
ZGl2IGNsYXNzPSJidXR0b25zIj4KKyAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0ic3RhcnRU
ZXN0KCkiPlRlc3QgQWdhaW48L2J1dHRvbj4KKyAgICAgICAgICAgIDxidXR0b24gaWQ9InNob3ct
c3VtbWFyeSIgb25jbGljaz0ic2hvd1Jlc3VsdHNTdW1tYXJ5KCkiPlN1bW1hcnk8L2J1dHRvbj4K
KyAgICAgICAgPC9kaXY+CisgICAgICAgIDxwIGNsYXNzPSJzaG93LWFib3V0Ij48YSBocmVmPSJq
YXZhc2NyaXB0OnNob3dBYm91dCgpIj5BYm91dCBTcGVlZG9tZXRlcjwvYT48L3A+CisgICAgPC9z
ZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImFib3V0Ij4KKyAgICAgICAgPGgxPkFib3V0IFNw
ZWVkb21ldGVyIDIuMTwvaDE+CisKKyAgICAgICAgPHA+U3BlZWRvbWV0ZXIgdGVzdHMgYSBicm93
c2VyJ3MgV2ViIGFwcCByZXNwb25zaXZlbmVzcyBieSB0aW1pbmcgc2ltdWxhdGVkIHVzZXIgaW50
ZXJhY3Rpb25zLjwvcD4KKworICAgICAgICA8cD4KKyAgICAgICAgICAgIFRoaXMgYmVuY2htYXJr
IHNpbXVsYXRlcyB1c2VyIGFjdGlvbnMgZm9yIGFkZGluZywgY29tcGxldGluZywgYW5kIHJlbW92
aW5nIHRvLWRvIGl0ZW1zIHVzaW5nIG11bHRpcGxlIGV4YW1wbGVzIGluIFRvZG9NVkMuCisgICAg
ICAgICAgICBFYWNoIGV4YW1wbGUgaW4gVG9kb01WQyBpbXBsZW1lbnRzIHRoZSBzYW1lIHRvZG8g
YXBwbGljYXRpb24gdXNpbmcgRE9NIEFQSXMgaW4gZGlmZmVyZW50IHdheXMuCisgICAgICAgICAg
ICBTb21lIGNhbGwgRE9NIEFQSXMgZGlyZWN0bHkgZnJvbSBFQ01BU2NyaXB0IDUgKEVTNSksIEVD
TUFTQ3JpcHQgMjAxNSAoRVM2KSwgRVM2IHRyYW5zcGlsZWQgdG8gRVM1LCBhbmQgRWxtIHRyYW5z
cGlsZWQgdG8gRVM1LgorICAgICAgICAgICAgT3RoZXJzIHVzZSBvbmUgb2YgZWxldmVuIHBvcHVs
YXIgSmF2YVNjcmlwdCBmcmFtZXdvcmtzOiBSZWFjdCwgUmVhY3Qgd2l0aCBSZWR1eCwgRW1iZXIu
anMsIEJhY2tib25lLmpzLAorICAgICAgICAgICAgQW5ndWxhckpTLCAobmV3KSBBbmd1bGFyLCBW
dWUuanMsIGpRdWVyeSwgUHJlYWN0LCBJbmZlcm5vLCBhbmQgRmxpZ2h0LgorCisgICAgICAgICAg
ICBNYW55IG9mIHRoZXNlIGZyYW1ld29ya3MgYXJlIHVzZWQgb24gdGhlIG1vc3QgcG9wdWxhciB3
ZWJzaXRlcyBpbiB0aGUgd29ybGQsIHN1Y2ggYXMgRmFjZWJvb2sgYW5kIFR3aXR0ZXIuCisgICAg
ICAgICAgICBUaGUgcGVyZm9ybWFuY2Ugb2YgdGhlc2UgdHlwZXMgb2Ygb3BlcmF0aW9ucyBkZXBl
bmRzIG9uIHRoZSBzcGVlZCBvZiB0aGUgRE9NIEFQSXMsIHRoZSBKYXZhU2NyaXB0IGVuZ2luZSwK
KyAgICAgICAgICAgIENTUyBzdHlsZSByZXNvbHV0aW9uLCBsYXlvdXQsIGFuZCBvdGhlciB0ZWNo
bm9sb2dpZXMuCisgICAgICAgIDwvcD4KKworICAgICAgICA8cD4KKyAgICAgICAgICAgIEFsdGhv
dWdoIHVzZXItZHJpdmVuIGFjdGlvbnMgbGlrZSBtb3VzZSBtb3ZlbWVudHMgYW5kIGtleWJvYXJk
IGlucHV0IGNhbm5vdCBiZSBhY2N1cmF0ZWx5IGVtdWxhdGVkIGluIEphdmFTY3JpcHQsCisgICAg
ICAgICAgICBTcGVlZG9tZXRlciBkb2VzIGl0cyBiZXN0IHRvIGZhaXRoZnVsbHkgcmVwbGF5IGEg
dHlwaWNhbCB3b3JrbG9hZCB3aXRoaW4gdGhlIGRlbW8gYXBwbGljYXRpb25zLgorICAgICAgICAg
ICAgVG8gbWFrZSB0aGUgcnVuIHRpbWUgbG9uZyBlbm91Z2ggdG8gbWVhc3VyZSB3aXRoIHRoZSBs
aW1pdGVkIHByZWNpc2lvbiwKKyAgICAgICAgICAgIHdlIHN5bmNocm9ub3VzbHkgZXhlY3V0ZSBh
IGxhcmdlIG51bWJlciBvZiB0aGUgb3BlcmF0aW9ucywgc3VjaCBhcyBhZGRpbmcgb25lIGh1bmRy
ZWQgdG8tZG8gaXRlbXMuCisgICAgICAgIDwvcD4KKworICAgICAgICA8cD4KKyAgICAgICAgICAg
IE1vZGVybiBicm93c2VyIGVuZ2luZXMgZXhlY3V0ZSBzb21lIHdvcmsgYXN5bmNocm9ub3VzbHkg
YXMgYW4gb3B0aW1pemF0aW9uIHN0cmF0ZWd5IHRvIHJlZHVjZSB0aGUgcnVuIHRpbWUgb2Ygc3lu
Y2hyb25vdXMgb3BlcmF0aW9ucy4KKyAgICAgICAgICAgIFdoaWxlIHJldHVybmluZyBjb250cm9s
IGJhY2sgdG8gSmF2YVNjcmlwdCBleGVjdXRpb24gYXMgc29vbiBhcyBwb3NzaWJsZSBpcyB3b3J0
aCBwdXJzdWluZywKKyAgICAgICAgICAgIHRoZSBydW4gdGltZSBjb3N0IG9mIHN1Y2ggYW4gYXN5
bmNocm9ub3VzIHdvcmsgc2hvdWxkIHN0aWxsIGJlIHRha2VuIGludG8gYSBob2xpc3RpYyBtZWFz
dXJlbWVudCBvZiB3ZWIgYXBwbGljYXRpb24gcGVyZm9ybWFuY2UuCisgICAgICAgICAgICBJbiBh
ZGRpdGlvbiwgc29tZSBtb2Rlcm4gSmF2YVNjcmlwdCBmcmFtZXdvcmtzIHN1Y2ggYXMgVnVlLmpz
IGFuZCBQcmVhY3QgY2FsbCBpbnRvIERPTSBBUElzIGFzeW5jaHJvbm91c2x5IGFzIGFuIG9wdGlt
aXphdGlvbiB0ZWNobmlxdWUuCisgICAgICAgICAgICBTcGVlZG9tZXRlciBhcHByb3hpbWF0ZXMg
dGhlIHJ1biB0aW1lIG9mIHRoaXMgYXN5bmNocm9ub3VzIHdvcmsgaW4gdGhlIFVJIHRocmVhZCB3
aXRoIGEgemVyby1zZWNvbmQgdGltZXIKKyAgICAgICAgICAgIHRoYXQgaXMgc2NoZWR1bGVkIGlt
bWVkaWF0ZWx5IGFmdGVyIGVhY2ggZXhlY3V0aW9uIG9mIHN5bmNocm9ub3VzIG9wZXJhdGlvbnMu
CisgICAgICAgIDwvcD4KKworICAgICAgICA8cD4KKyAgICAgICAgICAgIFNwZWVkb21ldGVyIGRv
ZXMgbm90IGF0dGVtcHQgdG8gbWVhc3VyZSBjb25jdXJyZW50IGFzeW5jaHJvbm91cyB3b3JrIHRo
YXQgZG9lcyBub3QgZGlyZWN0bHkgaW1wYWN0IHRoZSBVSSB0aHJlYWQsCisgICAgICAgICAgICB3
aGljaCB0ZW5kcyBub3QgdG8gYWZmZWN0IGFwcCByZXNwb25zaXZlbmVzcy4KKyAgICAgICAgPC9w
PgorCisgICAgICAgIDxwIGNsYXNzPSJub3RlIj4KKyAgICAgICAgICAgIDxzdHJvbmc+Tm90ZTo8
L3N0cm9uZz4gU3BlZWRvbWV0ZXIgc2hvdWxkIG5vdCBiZSB1c2VkIGFzIGEgd2F5IHRvIGNvbXBh
cmUgdGhlIHBlcmZvcm1hbmNlIG9mIGRpZmZlcmVudCBKYXZhU2NyaXB0IGZyYW1ld29ya3MKKyAg
ICAgICAgICAgIGFzIHdvcmsgbG9hZCBkaWZmZXJzIGdyZWF0bHkgaW4gZWFjaCBmcmFtZXdvcmsu
CisgICAgICAgIDwvcD4KKyAgICA8L3NlY3Rpb24+Cis8L21haW4+Cis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jl
c291cmNlcy9iZW5jaG1hcmstcmVwb3J0LmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9T
cGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvYmVuY2htYXJrLXJlcG9ydC5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5i
MzMwMjFkOWQ5Y2UyNjY2NzA2NTA2ZWUyOWYwZWYxNzNmMDdlM2MyCi0tLSAvZGV2L251bGwKKysr
IGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvYmVu
Y2htYXJrLXJlcG9ydC5qcwpAQCAtMCwwICsxLDgzIEBACisvLyBUaGlzIGZpbGUgY2FuIGJlIGN1
c3RvbWl6ZWQgdG8gcmVwb3J0IHJlc3VsdHMgYXMgbmVlZGVkLgorCisoZnVuY3Rpb24gKCkgewor
ICAgIGlmICghd2luZG93LnRlc3RSdW5uZXIgJiYgbG9jYXRpb24uc2VhcmNoICE9ICc/d2Via2l0
JyAmJiBsb2NhdGlvbi5oYXNoICE9ICcjd2Via2l0JykKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUo
KTsKKworICAgIHZhciBzY3JpcHRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2Ny
aXB0Jyk7CisgICAgc2NyaXB0RWxlbWVudC5zcmMgPSAnLi4vcmVzb3VyY2VzL3J1bm5lci5qcyc7
CisgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHRFbGVtZW50KTsKKworICAgIHZh
ciBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpOworICAgIHN0
eWxlRWxlbWVudC50ZXh0Q29udGVudCA9ICdwcmUgeyBwYWRkaW5nLXRvcDogNjAwcHg7IH0nOwor
ICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KTsKKworICAgIHZhciBj
cmVhdGVUZXN0OworICAgIHZhciB2YWx1ZXNCeUl0ZXJhdGlvbiA9IG5ldyBBcnJheTsKKworICAg
IHdpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGRvY3VtZW50LmJvZHkucmVt
b3ZlQ2hpbGQoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbWFpbicpKTsKKyAgICAgICAgc3RhcnRC
ZW5jaG1hcmsoKTsKKyAgICB9CisKKyAgICB3aW5kb3cuYmVuY2htYXJrQ2xpZW50ID0geworICAg
ICAgICBpdGVyYXRpb25Db3VudDogNSwgLy8gVXNlIDQgZGlmZmVyZW50IGluc3RhbmNlcyBvZiBE
UlQvV1RSIHRvIHJ1biA1IGl0ZXJhdGlvbnMuCisgICAgICAgIHdpbGxTdGFydEZpcnN0SXRlcmF0
aW9uOiBmdW5jdGlvbiAoaXRlcmF0aW9uQ291bnQpIHsKKyAgICAgICAgICAgIGNyZWF0ZVRlc3Qg
PSBmdW5jdGlvbiAobmFtZSwgYWdncmVnYXRvciwgaXNMYXN0VGVzdCwgdW5pdCA9ICdtcycpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICBjdXN0b21JdGVy
YXRpb25Db3VudDogaXRlcmF0aW9uQ291bnQsCisgICAgICAgICAgICAgICAgICAgIGRvTm90SWdu
b3JlSW5pdGlhbFJ1bjogdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgZG9Ob3RNZWFzdXJlTWVt
b3J5VXNhZ2U6IHRydWUsCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlVGVzdGluZzogIWlz
TGFzdFRlc3QsCisgICAgICAgICAgICAgICAgICAgIHVuaXQ6IHVuaXQsCisgICAgICAgICAgICAg
ICAgICAgIG5hbWU6IG5hbWUsCisgICAgICAgICAgICAgICAgICAgIGFnZ3JlZ2F0b3I6IGFnZ3Jl
Z2F0b3J9OworICAgICAgICAgICAgfQorICAgICAgICAgICAgUGVyZlRlc3RSdW5uZXIucHJlcGFy
ZVRvTWVhc3VyZVZhbHVlc0FzeW5jKGNyZWF0ZVRlc3QobnVsbCwgJ0dlb21ldHJpYycpKTsKKyAg
ICAgICAgfSwKKyAgICAgICAgZGlkUnVuU3VpdGVzOiBmdW5jdGlvbiAobWVhc3VyZWRWYWx1ZXMp
IHsKKyAgICAgICAgICAgIFBlcmZUZXN0UnVubmVyLm1lYXN1cmVWYWx1ZUFzeW5jKG1lYXN1cmVk
VmFsdWVzLmdlb21lYW4pOworICAgICAgICAgICAgdmFsdWVzQnlJdGVyYXRpb24ucHVzaChtZWFz
dXJlZFZhbHVlcyk7CisgICAgICAgIH0sCisgICAgICAgIGRpZEZpbmlzaExhc3RJdGVyYXRpb246
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmhlYWQucmVtb3ZlQ2hpbGQoZG9j
dW1lbnQucXVlcnlTZWxlY3Rvcignc3R5bGUnKSk7CisKKyAgICAgICAgICAgIHZhciBtZWFzdXJl
ZFZhbHVlc0J5RnVsbE5hbWUgPSB7fTsKKyAgICAgICAgICAgIGZ1bmN0aW9uIGFkZFRvTWVhc3Vy
ZWRWYWx1ZSh2YWx1ZSwgZnVsbE5hbWUsIGFnZ3JlZ2F0b3IpIHsKKyAgICAgICAgICAgICAgICB2
YXIgdmFsdWVzID0gbWVhc3VyZWRWYWx1ZXNCeUZ1bGxOYW1lW2Z1bGxOYW1lXSB8fCBuZXcgQXJy
YXk7CisgICAgICAgICAgICAgICAgbWVhc3VyZWRWYWx1ZXNCeUZ1bGxOYW1lW2Z1bGxOYW1lXSA9
IHZhbHVlczsKKyAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7CisgICAgICAgICAg
ICAgICAgdmFsdWVzLmFnZ3JlZ2F0b3IgPSBhZ2dyZWdhdG9yOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICB2YXIgc2NvcmVzID0gW107CisgICAgICAgICAgICB2YWx1ZXNCeUl0ZXJhdGlv
bi5mb3JFYWNoKGZ1bmN0aW9uIChtZWFzdXJlZFZhbHVlcykgeworICAgICAgICAgICAgICAgIHNj
b3Jlcy5wdXNoKG1lYXN1cmVkVmFsdWVzLnNjb3JlKTsKKyAgICAgICAgICAgICAgICBmb3IgKHZh
ciBzdWl0ZU5hbWUgaW4gbWVhc3VyZWRWYWx1ZXMudGVzdHMpIHsKKyAgICAgICAgICAgICAgICAg
ICAgdmFyIHN1aXRlID0gbWVhc3VyZWRWYWx1ZXMudGVzdHNbc3VpdGVOYW1lXTsKKyAgICAgICAg
ICAgICAgICAgICAgZm9yICh2YXIgdGVzdE5hbWUgaW4gc3VpdGUudGVzdHMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciB0ZXN0ID0gc3VpdGUudGVzdHNbdGVzdE5hbWVdOworICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yICh2YXIgc3VidGVzdE5hbWUgaW4gdGVzdC50ZXN0cykKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb01lYXN1cmVkVmFsdWUodGVzdC50ZXN0c1tz
dWJ0ZXN0TmFtZV0sIHN1aXRlTmFtZSArICcvJyArIHRlc3ROYW1lICsgJy8nICsgc3VidGVzdE5h
bWUpOworICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9NZWFzdXJlZFZhbHVlKHRlc3QudG90
YWwsIHN1aXRlTmFtZSArICcvJyArIHRlc3ROYW1lLCAnVG90YWwnKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBhZGRUb01lYXN1cmVkVmFsdWUoc3VpdGUudG90
YWwsIHN1aXRlTmFtZSwgJ1RvdGFsJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fSk7CisKKyAgICAgICAgICAgIFBlcmZUZXN0UnVubmVyLnJlcG9ydFZhbHVlcyhjcmVhdGVUZXN0
KG51bGwsIG51bGwsIGZhbHNlLCAncHQnKSwgc2NvcmVzKTsKKworICAgICAgICAgICAgdmFyIGZ1
bGxOYW1lcyA9IG5ldyBBcnJheTsKKyAgICAgICAgICAgIGZvciAodmFyIGZ1bGxOYW1lIGluIG1l
YXN1cmVkVmFsdWVzQnlGdWxsTmFtZSkKKyAgICAgICAgICAgICAgICBmdWxsTmFtZXMucHVzaChm
dWxsTmFtZSk7CisKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZnVsbE5hbWVzLmxl
bmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IG1lYXN1cmVkVmFsdWVz
QnlGdWxsTmFtZVtmdWxsTmFtZXNbaV1dOworICAgICAgICAgICAgICAgIFBlcmZUZXN0UnVubmVy
LnJlcG9ydFZhbHVlcyhjcmVhdGVUZXN0KGZ1bGxOYW1lc1tpXSwgdmFsdWVzLmFnZ3JlZ2F0b3Is
IGkgKyAxID09IGZ1bGxOYW1lcy5sZW5ndGgpLCB2YWx1ZXMpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfTsKK30pKCk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gu
b3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9iZW5jaG1hcmstcnVubmVyLmpzIGIvV2Vic2l0
ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvYmVuY2htYXJrLXJ1
bm5lci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43NTE5OTJiNGYxOTBiYmZkNjllNTRlNWQ1ZTc0OTg5ODM2NWE3
NjEyCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9t
ZXRlcjIuMS9yZXNvdXJjZXMvYmVuY2htYXJrLXJ1bm5lci5qcwpAQCAtMCwwICsxLDMwNSBAQAor
Ly8gRklYTUU6IFVzZSB0aGUgcmVhbCBwcm9taXNlIGlmIGF2YWlsYWJsZS4KKy8vIEZJWE1FOiBN
YWtlIHN1cmUgdGhpcyBpbnRlcmZhY2UgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSByZWFsIFByb21p
c2UuCitmdW5jdGlvbiBTaW1wbGVQcm9taXNlKCkgeworICAgIHRoaXMuX2NoYWluZWRQcm9taXNl
ID0gbnVsbDsKKyAgICB0aGlzLl9jYWxsYmFjayA9IG51bGw7Cit9CisKK1NpbXBsZVByb21pc2Uu
cHJvdG90eXBlLnRoZW4gPSBmdW5jdGlvbiAoY2FsbGJhY2spIHsKKyAgICBpZiAodGhpcy5fY2Fs
bGJhY2spCisgICAgICAgIHRocm93ICJTaW1wbGVQcm9taXNlIGRvZXNuJ3Qgc3VwcG9ydCBtdWx0
aXBsZSBjYWxscyB0byB0aGVuIjsKKyAgICB0aGlzLl9jYWxsYmFjayA9IGNhbGxiYWNrOworICAg
IHRoaXMuX2NoYWluZWRQcm9taXNlID0gbmV3IFNpbXBsZVByb21pc2U7CisgICAgCisgICAgaWYg
KHRoaXMuX3Jlc29sdmVkKQorICAgICAgICB0aGlzLnJlc29sdmUodGhpcy5fcmVzb2x2ZWRWYWx1
ZSk7CisKKyAgICByZXR1cm4gdGhpcy5fY2hhaW5lZFByb21pc2U7Cit9CisKK1NpbXBsZVByb21p
c2UucHJvdG90eXBlLnJlc29sdmUgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICBpZiAoIXRoaXMu
X2NhbGxiYWNrKSB7CisgICAgICAgIHRoaXMuX3Jlc29sdmVkID0gdHJ1ZTsKKyAgICAgICAgdGhp
cy5fcmVzb2x2ZWRWYWx1ZSA9IHZhbHVlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
dmFyIHJlc3VsdCA9IHRoaXMuX2NhbGxiYWNrKHZhbHVlKTsKKyAgICBpZiAocmVzdWx0IGluc3Rh
bmNlb2YgU2ltcGxlUHJvbWlzZSkgeworICAgICAgICB2YXIgY2hhaW5lZFByb21pc2UgPSB0aGlz
Ll9jaGFpbmVkUHJvbWlzZTsKKyAgICAgICAgcmVzdWx0LnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkg
eyBjaGFpbmVkUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCk7IH0pOworICAgIH0gZWxzZQorICAgICAg
ICB0aGlzLl9jaGFpbmVkUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCk7Cit9CisKK2Z1bmN0aW9uIEJl
bmNobWFya1Rlc3RTdGVwKHRlc3ROYW1lLCB0ZXN0RnVuY3Rpb24pIHsKKyAgICB0aGlzLm5hbWUg
PSB0ZXN0TmFtZTsKKyAgICB0aGlzLnJ1biA9IHRlc3RGdW5jdGlvbjsKK30KKworZnVuY3Rpb24g
QmVuY2htYXJrUnVubmVyKHN1aXRlcywgY2xpZW50KSB7CisgICAgdGhpcy5fc3VpdGVzID0gc3Vp
dGVzOworICAgIHRoaXMuX3ByZXBhcmVSZXR1cm5WYWx1ZSA9IG51bGw7CisgICAgdGhpcy5fY2xp
ZW50ID0gY2xpZW50OworfQorCitCZW5jaG1hcmtSdW5uZXIucHJvdG90eXBlLndhaXRGb3JFbGVt
ZW50ID0gZnVuY3Rpb24gKHNlbGVjdG9yKSB7CisgICAgdmFyIHByb21pc2UgPSBuZXcgU2ltcGxl
UHJvbWlzZTsKKyAgICB2YXIgY29udGVudERvY3VtZW50ID0gdGhpcy5fZnJhbWUuY29udGVudERv
Y3VtZW50OworCisgICAgZnVuY3Rpb24gcmVzb2x2ZUlmUmVhZHkoKSB7CisgICAgICAgIHZhciBl
bGVtZW50ID0gY29udGVudERvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpOworICAgICAg
ICBpZiAoZWxlbWVudCkgeworICAgICAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFt
ZShmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2UucmVzb2x2ZShl
bGVtZW50KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIHNldFRpbWVvdXQocmVzb2x2ZUlmUmVhZHksIDUwKTsKKyAgICB9CisKKyAgICBy
ZXNvbHZlSWZSZWFkeSgpOworICAgIHJldHVybiBwcm9taXNlOworfQorCitCZW5jaG1hcmtSdW5u
ZXIucHJvdG90eXBlLl9yZW1vdmVGcmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICBpZiAodGhpcy5f
ZnJhbWUpIHsKKyAgICAgICAgdGhpcy5fZnJhbWUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlz
Ll9mcmFtZSk7CisgICAgICAgIHRoaXMuX2ZyYW1lID0gbnVsbDsKKyAgICB9Cit9CisKK0JlbmNo
bWFya1J1bm5lci5wcm90b3R5cGUuX2FwcGVuZEZyYW1lID0gZnVuY3Rpb24gKHNyYykgeworICAg
IHZhciBmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpOworICAgIGZyYW1l
LnN0eWxlLndpZHRoID0gJzgwMHB4JzsKKyAgICBmcmFtZS5zdHlsZS5oZWlnaHQgPSAnNjAwcHgn
OworICAgIGZyYW1lLnN0eWxlLmJvcmRlciA9ICcwcHggbm9uZSc7CisgICAgZnJhbWUuc3R5bGUu
cG9zaXRpb24gPSAnYWJzb2x1dGUnOworICAgIGZyYW1lLnNldEF0dHJpYnV0ZSgnc2Nyb2xsaW5n
JywgJ25vJyk7CisKKyAgICB2YXIgbWFyZ2luTGVmdCA9IHBhcnNlSW50KGdldENvbXB1dGVkU3R5
bGUoZG9jdW1lbnQuYm9keSkubWFyZ2luTGVmdCk7CisgICAgdmFyIG1hcmdpblRvcCA9IHBhcnNl
SW50KGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkubWFyZ2luVG9wKTsKKyAgICBpZiAo
d2luZG93LmlubmVyV2lkdGggPiA4MDAgKyBtYXJnaW5MZWZ0ICYmIHdpbmRvdy5pbm5lckhlaWdo
dCA+IDYwMCArIG1hcmdpblRvcCkgeworICAgICAgICBmcmFtZS5zdHlsZS5sZWZ0ID0gbWFyZ2lu
TGVmdCArICdweCc7CisgICAgICAgIGZyYW1lLnN0eWxlLnRvcCA9IG1hcmdpblRvcCArICdweCc7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZnJhbWUuc3R5bGUubGVmdCA9ICcwcHgnOworICAgICAg
ICBmcmFtZS5zdHlsZS50b3AgPSAnMHB4JzsKKyAgICB9CisKKyAgICBpZiAodGhpcy5fY2xpZW50
ICYmIHRoaXMuX2NsaWVudC53aWxsQWRkVGVzdEZyYW1lKQorICAgICAgICB0aGlzLl9jbGllbnQu
d2lsbEFkZFRlc3RGcmFtZShmcmFtZSk7CisKKyAgICBkb2N1bWVudC5ib2R5Lmluc2VydEJlZm9y
ZShmcmFtZSwgZG9jdW1lbnQuYm9keS5maXJzdENoaWxkKTsKKyAgICB0aGlzLl9mcmFtZSA9IGZy
YW1lOworICAgIHJldHVybiBmcmFtZTsKK30KKworQmVuY2htYXJrUnVubmVyLnByb3RvdHlwZS5f
d2FpdEFuZFdhcm1VcCA9IGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgc3RhcnRUaW1lID0gRGF0ZS5u
b3coKTsKKworICAgIGZ1bmN0aW9uIEZpYm9uYWNjaShuKSB7CisgICAgICAgIGlmIChEYXRlLm5v
dygpIC0gc3RhcnRUaW1lID4gMTAwKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAo
biA8PSAwKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGVsc2UgaWYgKG4gPT0gMSkK
KyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICByZXR1cm4gRmlib25hY2NpKG4gLSAyKSAr
IEZpYm9uYWNjaShuIC0gMSk7CisgICAgfQorCisgICAgdmFyIHByb21pc2UgPSBuZXcgU2ltcGxl
UHJvbWlzZTsKKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgRmlib25hY2Np
KDEwMCk7CisgICAgICAgIHByb21pc2UucmVzb2x2ZSgpOworICAgIH0sIDIwMCk7CisgICAgcmV0
dXJuIHByb21pc2U7Cit9CisKK0JlbmNobWFya1J1bm5lci5wcm90b3R5cGUuX3dyaXRlTWFyayA9
IGZ1bmN0aW9uKG5hbWUpIHsKKyAgICBpZiAod2luZG93LnBlcmZvcm1hbmNlICYmIHdpbmRvdy5w
ZXJmb3JtYW5jZS5tYXJrKQorICAgICAgICB3aW5kb3cucGVyZm9ybWFuY2UubWFyayhuYW1lKTsK
K30KKworLy8gVGhpcyBmdW5jdGlvbiBvdWdodCBiZSBhcyBzaW1wbGUgYXMgcG9zc2libGUuIERv
bid0IGV2ZW4gdXNlIFNpbXBsZVByb21pc2UuCitCZW5jaG1hcmtSdW5uZXIucHJvdG90eXBlLl9y
dW5UZXN0ID0gZnVuY3Rpb24oc3VpdGUsIHRlc3QsIHByZXBhcmVSZXR1cm5WYWx1ZSwgY2FsbGJh
Y2spCit7CisgICAgdmFyIHNlbGYgPSB0aGlzOworICAgIHZhciBub3cgPSB3aW5kb3cucGVyZm9y
bWFuY2UgJiYgd2luZG93LnBlcmZvcm1hbmNlLm5vdyA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHdp
bmRvdy5wZXJmb3JtYW5jZS5ub3coKTsgfSA6IERhdGUubm93OworCisgICAgdmFyIGNvbnRlbnRX
aW5kb3cgPSBzZWxmLl9mcmFtZS5jb250ZW50V2luZG93OworICAgIHZhciBjb250ZW50RG9jdW1l
bnQgPSBzZWxmLl9mcmFtZS5jb250ZW50RG9jdW1lbnQ7CisKKyAgICBzZWxmLl93cml0ZU1hcmso
c3VpdGUubmFtZSArICcuJyArIHRlc3QubmFtZSArICctc3RhcnQnKTsKKyAgICB2YXIgc3RhcnRU
aW1lID0gbm93KCk7CisgICAgdGVzdC5ydW4ocHJlcGFyZVJldHVyblZhbHVlLCBjb250ZW50V2lu
ZG93LCBjb250ZW50RG9jdW1lbnQpOworICAgIHZhciBlbmRUaW1lID0gbm93KCk7CisgICAgc2Vs
Zi5fd3JpdGVNYXJrKHN1aXRlLm5hbWUgKyAnLicgKyB0ZXN0Lm5hbWUgKyAnLXN5bmMtZW5kJyk7
CisKKyAgICB2YXIgc3luY1RpbWUgPSBlbmRUaW1lIC0gc3RhcnRUaW1lOworCisgICAgdmFyIHN0
YXJ0VGltZSA9IG5vdygpOworICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgICAv
LyBTb21lIGJyb3dzZXJzIGRvbid0IGltbWVkaWF0ZWx5IHVwZGF0ZSB0aGUgbGF5b3V0IGZvciBw
YWludC4KKyAgICAgICAgLy8gRm9yY2UgdGhlIGxheW91dCBoZXJlIHRvIGVuc3VyZSB3ZSdyZSBt
ZWFzdXJpbmcgdGhlIGxheW91dCB0aW1lLgorICAgICAgICB2YXIgaGVpZ2h0ID0gc2VsZi5fZnJh
bWUuY29udGVudERvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0Owor
ICAgICAgICB2YXIgZW5kVGltZSA9IG5vdygpOworICAgICAgICBzZWxmLl9mcmFtZS5jb250ZW50
V2luZG93Ll91bnVzZWRIZWlnaHRWYWx1ZSA9IGhlaWdodDsgLy8gUHJldmVudCBkZWFkIGNvZGUg
ZWxpbWluYXRpb24uCisgICAgICAgIHNlbGYuX3dyaXRlTWFyayhzdWl0ZS5uYW1lICsgJy4nICsg
dGVzdC5uYW1lICsgJy1hc3luYy1lbmQnKTsKKyAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRp
b25GcmFtZShmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBjYWxsYmFjayhzeW5jVGltZSwgZW5k
VGltZSAtIHN0YXJ0VGltZSwgaGVpZ2h0KTsKKyAgICAgICAgfSk7CisgICAgfSwgMCk7Cit9CisK
K2Z1bmN0aW9uIEJlbmNobWFya1N0YXRlKHN1aXRlcykgeworICAgIHRoaXMuX3N1aXRlcyA9IHN1
aXRlczsKKyAgICB0aGlzLl9zdWl0ZUluZGV4ID0gLTE7CisgICAgdGhpcy5fdGVzdEluZGV4ID0g
MDsKKyAgICB0aGlzLm5leHQoKTsKK30KKworQmVuY2htYXJrU3RhdGUucHJvdG90eXBlLmN1cnJl
bnRTdWl0ZSA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLl9zdWl0ZXNbdGhpcy5fc3Vp
dGVJbmRleF07Cit9CisKK0JlbmNobWFya1N0YXRlLnByb3RvdHlwZS5jdXJyZW50VGVzdCA9IGZ1
bmN0aW9uICgpIHsKKyAgICB2YXIgc3VpdGUgPSB0aGlzLmN1cnJlbnRTdWl0ZSgpOworICAgIHJl
dHVybiBzdWl0ZSA/IHN1aXRlLnRlc3RzW3RoaXMuX3Rlc3RJbmRleF0gOiBudWxsOworfQorCitC
ZW5jaG1hcmtTdGF0ZS5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICgpIHsKKyAgICB0aGlzLl90
ZXN0SW5kZXgrKzsKKworICAgIHZhciBzdWl0ZSA9IHRoaXMuX3N1aXRlc1t0aGlzLl9zdWl0ZUlu
ZGV4XTsKKyAgICBpZiAoc3VpdGUgJiYgdGhpcy5fdGVzdEluZGV4IDwgc3VpdGUudGVzdHMubGVu
Z3RoKQorICAgICAgICByZXR1cm4gdGhpczsKKworICAgIHRoaXMuX3Rlc3RJbmRleCA9IDA7Cisg
ICAgZG8geworICAgICAgICB0aGlzLl9zdWl0ZUluZGV4Kys7CisgICAgfSB3aGlsZSAodGhpcy5f
c3VpdGVJbmRleCA8IHRoaXMuX3N1aXRlcy5sZW5ndGggJiYgdGhpcy5fc3VpdGVzW3RoaXMuX3N1
aXRlSW5kZXhdLmRpc2FibGVkKTsKKworICAgIHJldHVybiB0aGlzOworfQorCitCZW5jaG1hcmtT
dGF0ZS5wcm90b3R5cGUuaXNGaXJzdFRlc3QgPSBmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuICF0
aGlzLl90ZXN0SW5kZXg7Cit9CisKK0JlbmNobWFya1N0YXRlLnByb3RvdHlwZS5wcmVwYXJlQ3Vy
cmVudFN1aXRlID0gZnVuY3Rpb24gKHJ1bm5lciwgZnJhbWUpIHsKKyAgICB2YXIgc3VpdGUgPSB0
aGlzLmN1cnJlbnRTdWl0ZSgpOworICAgIHZhciBwcm9taXNlID0gbmV3IFNpbXBsZVByb21pc2U7
CisgICAgZnJhbWUub25sb2FkID0gZnVuY3Rpb24gKCkgeworICAgICAgICBzdWl0ZS5wcmVwYXJl
KHJ1bm5lciwgZnJhbWUuY29udGVudFdpbmRvdywgZnJhbWUuY29udGVudERvY3VtZW50KS50aGVu
KGZ1bmN0aW9uIChyZXN1bHQpIHsgcHJvbWlzZS5yZXNvbHZlKHJlc3VsdCk7IH0pOworICAgIH0K
KyAgICBmcmFtZS5zcmMgPSAncmVzb3VyY2VzLycgKyBzdWl0ZS51cmw7CisgICAgcmV0dXJuIHBy
b21pc2U7Cit9CisKK0JlbmNobWFya1J1bm5lci5wcm90b3R5cGUuc3RlcCA9IGZ1bmN0aW9uIChz
dGF0ZSkgeworICAgIGlmICghc3RhdGUpIHsKKyAgICAgICAgc3RhdGUgPSBuZXcgQmVuY2htYXJr
U3RhdGUodGhpcy5fc3VpdGVzKTsKKyAgICAgICAgdGhpcy5fbWVhc3VyZWRWYWx1ZXMgPSB7dGVz
dHM6IHt9LCB0b3RhbDogMCwgbWVhbjogTmFOLCBnZW9tZWFuOiBOYU4sIHNjb3JlOiBOYU59Owor
ICAgIH0KKworICAgIHZhciBzdWl0ZSA9IHN0YXRlLmN1cnJlbnRTdWl0ZSgpOworICAgIGlmICgh
c3VpdGUpIHsKKyAgICAgICAgdGhpcy5fZmluYWxpemUoKTsKKyAgICAgICAgdmFyIHByb21pc2Ug
PSBuZXcgU2ltcGxlUHJvbWlzZTsKKyAgICAgICAgcHJvbWlzZS5yZXNvbHZlKCk7CisgICAgICAg
IHJldHVybiBwcm9taXNlOworICAgIH0KKworICAgIGlmIChzdGF0ZS5pc0ZpcnN0VGVzdCgpKSB7
CisgICAgICAgIHRoaXMuX3JlbW92ZUZyYW1lKCk7CisgICAgICAgIHZhciBzZWxmID0gdGhpczsK
KyAgICAgICAgcmV0dXJuIHN0YXRlLnByZXBhcmVDdXJyZW50U3VpdGUodGhpcywgdGhpcy5fYXBw
ZW5kRnJhbWUoKSkudGhlbihmdW5jdGlvbiAocHJlcGFyZVJldHVyblZhbHVlKSB7CisgICAgICAg
ICAgICBzZWxmLl9wcmVwYXJlUmV0dXJuVmFsdWUgPSBwcmVwYXJlUmV0dXJuVmFsdWU7CisgICAg
ICAgICAgICByZXR1cm4gc2VsZi5fcnVuVGVzdEFuZFJlY29yZFJlc3VsdHMoc3RhdGUpOworICAg
ICAgICB9KTsKKyAgICB9CisKKyAgICByZXR1cm4gdGhpcy5fcnVuVGVzdEFuZFJlY29yZFJlc3Vs
dHMoc3RhdGUpOworfQorCitCZW5jaG1hcmtSdW5uZXIucHJvdG90eXBlLnJ1bkFsbFN0ZXBzID0g
ZnVuY3Rpb24gKHN0YXJ0aW5nU3RhdGUpIHsKKyAgICB2YXIgbmV4dENhbGxlZSA9IHRoaXMucnVu
QWxsU3RlcHMuYmluZCh0aGlzKTsKKyAgICB0aGlzLnN0ZXAoc3RhcnRpbmdTdGF0ZSkudGhlbihm
dW5jdGlvbiAobmV4dFN0YXRlKSB7CisgICAgICAgIGlmIChuZXh0U3RhdGUpCisgICAgICAgICAg
ICBuZXh0Q2FsbGVlKG5leHRTdGF0ZSk7CisgICAgfSk7Cit9CisKK0JlbmNobWFya1J1bm5lci5w
cm90b3R5cGUucnVuTXVsdGlwbGVJdGVyYXRpb25zID0gZnVuY3Rpb24gKGl0ZXJhdGlvbkNvdW50
KSB7CisgICAgdmFyIHNlbGYgPSB0aGlzOworICAgIHZhciBjdXJyZW50SXRlcmF0aW9uID0gMDsK
KworICAgIHRoaXMuX3J1bk5leHRJdGVyYXRpb24gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGN1
cnJlbnRJdGVyYXRpb24rKzsKKyAgICAgICAgaWYgKGN1cnJlbnRJdGVyYXRpb24gPCBpdGVyYXRp
b25Db3VudCkKKyAgICAgICAgICAgIHNlbGYucnVuQWxsU3RlcHMoKTsKKyAgICAgICAgZWxzZSBp
ZiAodGhpcy5fY2xpZW50ICYmIHRoaXMuX2NsaWVudC5kaWRGaW5pc2hMYXN0SXRlcmF0aW9uKQor
ICAgICAgICAgICAgdGhpcy5fY2xpZW50LmRpZEZpbmlzaExhc3RJdGVyYXRpb24oKTsKKyAgICB9
CisKKyAgICBpZiAodGhpcy5fY2xpZW50ICYmIHRoaXMuX2NsaWVudC53aWxsU3RhcnRGaXJzdEl0
ZXJhdGlvbikKKyAgICAgICAgdGhpcy5fY2xpZW50LndpbGxTdGFydEZpcnN0SXRlcmF0aW9uKGl0
ZXJhdGlvbkNvdW50KTsKKworICAgIHNlbGYucnVuQWxsU3RlcHMoKTsKK30KKworQmVuY2htYXJr
UnVubmVyLnByb3RvdHlwZS5fcnVuVGVzdEFuZFJlY29yZFJlc3VsdHMgPSBmdW5jdGlvbiAoc3Rh
dGUpIHsKKyAgICB2YXIgcHJvbWlzZSA9IG5ldyBTaW1wbGVQcm9taXNlOworICAgIHZhciBzdWl0
ZSA9IHN0YXRlLmN1cnJlbnRTdWl0ZSgpOworICAgIHZhciB0ZXN0ID0gc3RhdGUuY3VycmVudFRl
c3QoKTsKKworICAgIGlmICh0aGlzLl9jbGllbnQgJiYgdGhpcy5fY2xpZW50LndpbGxSdW5UZXN0
KQorICAgICAgICB0aGlzLl9jbGllbnQud2lsbFJ1blRlc3Qoc3VpdGUsIHRlc3QpOworCisgICAg
dmFyIHNlbGYgPSB0aGlzOworICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgICBz
ZWxmLl9ydW5UZXN0KHN1aXRlLCB0ZXN0LCBzZWxmLl9wcmVwYXJlUmV0dXJuVmFsdWUsIGZ1bmN0
aW9uIChzeW5jVGltZSwgYXN5bmNUaW1lKSB7CisgICAgICAgICAgICB2YXIgc3VpdGVSZXN1bHRz
ID0gc2VsZi5fbWVhc3VyZWRWYWx1ZXMudGVzdHNbc3VpdGUubmFtZV0gfHwge3Rlc3RzOnt9LCB0
b3RhbDogMH07CisgICAgICAgICAgICB2YXIgdG90YWwgPSBzeW5jVGltZSArIGFzeW5jVGltZTsK
KyAgICAgICAgICAgIHNlbGYuX21lYXN1cmVkVmFsdWVzLnRlc3RzW3N1aXRlLm5hbWVdID0gc3Vp
dGVSZXN1bHRzOworICAgICAgICAgICAgc3VpdGVSZXN1bHRzLnRlc3RzW3Rlc3QubmFtZV0gPSB7
dGVzdHM6IHsnU3luYyc6IHN5bmNUaW1lLCAnQXN5bmMnOiBhc3luY1RpbWV9LCB0b3RhbDogdG90
YWx9OworICAgICAgICAgICAgc3VpdGVSZXN1bHRzLnRvdGFsICs9IHRvdGFsOworCisgICAgICAg
ICAgICBpZiAoc2VsZi5fY2xpZW50ICYmIHNlbGYuX2NsaWVudC5kaWRSdW5UZXN0KQorICAgICAg
ICAgICAgICAgIHNlbGYuX2NsaWVudC5kaWRSdW5UZXN0KHN1aXRlLCB0ZXN0KTsKKworICAgICAg
ICAgICAgc3RhdGUubmV4dCgpOworICAgICAgICAgICAgcHJvbWlzZS5yZXNvbHZlKHN0YXRlKTsK
KyAgICAgICAgfSk7CisgICAgfSwgMCk7CisgICAgcmV0dXJuIHByb21pc2U7Cit9CisKK0JlbmNo
bWFya1J1bm5lci5wcm90b3R5cGUuX2ZpbmFsaXplID0gZnVuY3Rpb24gKCkgeworICAgIHRoaXMu
X3JlbW92ZUZyYW1lKCk7CisKKyAgICBpZiAodGhpcy5fY2xpZW50ICYmIHRoaXMuX2NsaWVudC5k
aWRSdW5TdWl0ZXMpIHsKKyAgICAgICAgdmFyIHByb2R1Y3QgPSAxOworICAgICAgICB2YXIgdmFs
dWVzID0gW107CisgICAgICAgIGZvciAodmFyIHN1aXRlTmFtZSBpbiB0aGlzLl9tZWFzdXJlZFZh
bHVlcy50ZXN0cykgeworICAgICAgICAgICAgdmFyIHN1aXRlVG90YWwgPSB0aGlzLl9tZWFzdXJl
ZFZhbHVlcy50ZXN0c1tzdWl0ZU5hbWVdLnRvdGFsOworICAgICAgICAgICAgcHJvZHVjdCAqPSBz
dWl0ZVRvdGFsOworICAgICAgICAgICAgdmFsdWVzLnB1c2goc3VpdGVUb3RhbCk7CisgICAgICAg
IH0KKworICAgICAgICB2YWx1ZXMuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYSAtIGIg
fSk7IC8vIEF2b2lkIHRoZSBsb3NzIG9mIHNpZ25pZmljYW5jZSBmb3IgdGhlIHN1bS4KKyAgICAg
ICAgdmFyIHRvdGFsID0gdmFsdWVzLnJlZHVjZShmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYSAr
IGIgfSk7CisgICAgICAgIHZhciBnZW9tZWFuID0gTWF0aC5wb3cocHJvZHVjdCwgMSAvIHZhbHVl
cy5sZW5ndGgpOworCisgICAgICAgIHZhciBjb3JyZWN0aW9uRmFjdG9yID0gMzsgLy8gVGhpcyBm
YWN0b3IgbWFrZXMgdGhlIHRlc3Qgc2NvcmUgbG9vayByZWFzb25hYmx5IGZpdCB3aXRoaW4gMCB0
byAxNDAuCisgICAgICAgIHRoaXMuX21lYXN1cmVkVmFsdWVzLnRvdGFsID0gdG90YWw7CisgICAg
ICAgIHRoaXMuX21lYXN1cmVkVmFsdWVzLm1lYW4gPSB0b3RhbCAvIHZhbHVlcy5sZW5ndGg7Cisg
ICAgICAgIHRoaXMuX21lYXN1cmVkVmFsdWVzLmdlb21lYW4gPSBnZW9tZWFuOworICAgICAgICB0
aGlzLl9tZWFzdXJlZFZhbHVlcy5zY29yZSA9IDYwICogMTAwMCAvIGdlb21lYW4gLyBjb3JyZWN0
aW9uRmFjdG9yOworICAgICAgICB0aGlzLl9jbGllbnQuZGlkUnVuU3VpdGVzKHRoaXMuX21lYXN1
cmVkVmFsdWVzKTsKKyAgICB9CisKKyAgICBpZiAodGhpcy5fcnVuTmV4dEl0ZXJhdGlvbikKKyAg
ICAgICAgdGhpcy5fcnVuTmV4dEl0ZXJhdGlvbigpOworfQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMv
YnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvZmxpZ2h0anMtZXhhbXBs
ZS1hcHAvTElDRU5TRS5tZCBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIy
LjEvcmVzb3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL0xJQ0VOU0UubWQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NjMxYTgxZWQ4Y2YzMTEwOWNlNDBiZDk3NjhlNDcxMTY2ZDQ4NjczZQotLS0gL2Rldi9udWxsCisr
KyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2Zs
aWdodGpzLWV4YW1wbGUtYXBwL0xJQ0VOU0UubWQKQEAgLTAsMCArMSwxOSBAQAorQ29weXJpZ2h0
IChjKSBUd2l0dGVyIEluYworCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9m
IGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0aGlzIHNvZnR3YXJl
IGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8g
ZGVhbAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRo
b3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBw
dWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorY29waWVzIG9mIHRo
ZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlz
CitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
OgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGlj
ZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9u
cyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBX
SVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJ
TkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwK
K0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFC
TEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElO
IEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwK
K09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1Ig
T1RIRVIgREVBTElOR1MgSU4KK1RIRSBTT0ZUV0FSRS4KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jy
b3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUt
YXBwL1JFQURNRS5tZCBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEv
cmVzb3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MDFi
ZTNkZjM5NGM3YzkwMmE3ZWJkNjc5NTU5NTY2NDYzNjJmOTEwCi0tLSAvZGV2L251bGwKKysrIGIv
V2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvZmxpZ2h0
anMtZXhhbXBsZS1hcHAvUkVBRE1FLm1kCkBAIC0wLDAgKzEsNSBAQAorIyBGbGlnaHQgZXhhbXBs
ZSBhcHAKKworWyFbQnVpbGQgU3RhdHVzXShodHRwczovL3RyYXZpcy1jaS5vcmcvZmxpZ2h0anMv
ZXhhbXBsZS1hcHAucG5nP2JyYW5jaD1tYXN0ZXIpXShodHRwOi8vdHJhdmlzLWNpLm9yZy9mbGln
aHRqcy9leGFtcGxlLWFwcCkKKworQW4gZXhhbXBsZSBGbGlnaHQgYXBwbGljYXRpb24uCmRpZmYg
LS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNl
cy9mbGlnaHRqcy1leGFtcGxlLWFwcC9hcHAvYm9vdC9wYWdlLmpzIGIvV2Vic2l0ZXMvYnJvd3Nl
cmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvZmxpZ2h0anMtZXhhbXBsZS1hcHAv
YXBwL2Jvb3QvcGFnZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNTYxZjhlMmM2NjdmZmQ1YWQyYWYzNWRmZDkz
MjE5MzM2ZjVmMWUzCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9y
Zy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvZmxpZ2h0anMtZXhhbXBsZS1hcHAvYXBwL2Jvb3Qv
cGFnZS5qcwpAQCAtMCwwICsxLDQ3IEBACisndXNlIHN0cmljdCc7CisKK2RlZmluZSgKKworICBb
CisgICAgJ2FwcC9jb21wb25lbnRfZGF0YS9tYWlsX2l0ZW1zJywKKyAgICAnYXBwL2NvbXBvbmVu
dF9kYXRhL2NvbXBvc2VfYm94JywKKyAgICAnYXBwL2NvbXBvbmVudF9kYXRhL21vdmVfdG8nLAor
ICAgICdhcHAvY29tcG9uZW50X3VpL21haWxfaXRlbXMnLAorICAgICdhcHAvY29tcG9uZW50X3Vp
L21haWxfY29udHJvbHMnLAorICAgICdhcHAvY29tcG9uZW50X3VpL2NvbXBvc2VfYm94JywKKyAg
ICAnYXBwL2NvbXBvbmVudF91aS9mb2xkZXJzJywKKyAgICAnYXBwL2NvbXBvbmVudF91aS9tb3Zl
X3RvX3NlbGVjdG9yJworICBdLAorCisgIGZ1bmN0aW9uKAorICAgIE1haWxJdGVtc0RhdGEsCisg
ICAgQ29tcG9zZUJveERhdGEsCisgICAgTW92ZVRvRGF0YSwKKyAgICBNYWlsSXRlbXNVSSwKKyAg
ICBNYWlsQ29udHJvbHNVSSwKKyAgICBDb21wb3NlQm94VUksCisgICAgRm9sZGVyc1VJLAorICAg
IE1vdmVUb1NlbGVjdG9yVUkpIHsKKworICAgIGZ1bmN0aW9uIGluaXRpYWxpemUoKSB7CisgICAg
ICBNYWlsSXRlbXNEYXRhLmF0dGFjaFRvKGRvY3VtZW50KTsKKyAgICAgIENvbXBvc2VCb3hEYXRh
LmF0dGFjaFRvKGRvY3VtZW50LCB7CisgICAgICAgIHNlbGVjdGVkRm9sZGVyczogWydpbmJveCdd
CisgICAgICB9KTsKKyAgICAgIE1vdmVUb0RhdGEuYXR0YWNoVG8oZG9jdW1lbnQpOworICAgICAg
TWFpbEl0ZW1zVUkuYXR0YWNoVG8oJyNtYWlsX2l0ZW1zJywgeworICAgICAgICBpdGVtQ29udGFp
bmVyU2VsZWN0b3I6ICcjbWFpbF9pdGVtc19UQicsCisgICAgICAgIHNlbGVjdGVkRm9sZGVyczog
WydpbmJveCddCisgICAgICB9KTsKKyAgICAgIE1haWxDb250cm9sc1VJLmF0dGFjaFRvKCcjbWFp
bF9jb250cm9scycpOworICAgICAgQ29tcG9zZUJveFVJLmF0dGFjaFRvKCcjY29tcG9zZV9ib3gn
KTsKKyAgICAgIEZvbGRlcnNVSS5hdHRhY2hUbygnI2ZvbGRlcnMnKTsKKyAgICAgIE1vdmVUb1Nl
bGVjdG9yVUkuYXR0YWNoVG8oJyNtb3ZlX3RvX3NlbGVjdG9yJywgeworICAgICAgICBtb3ZlQWN0
aW9uU2VsZWN0b3I6ICcjbW92ZV9tYWlsJywKKyAgICAgICAgc2VsZWN0ZWRGb2xkZXJzOiBbJ2lu
Ym94J10KKyAgICAgIH0pOworICAgIH0KKworICAgIHJldHVybiBpbml0aWFsaXplOworICB9Cisp
OwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9y
ZXNvdXJjZXMvZmxpZ2h0anMtZXhhbXBsZS1hcHAvYXBwL2NvbXBvbmVudF9kYXRhL2NvbXBvc2Vf
Ym94LmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJj
ZXMvZmxpZ2h0anMtZXhhbXBsZS1hcHAvYXBwL2NvbXBvbmVudF9kYXRhL2NvbXBvc2VfYm94Lmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmU3MjgwODZmMDJiYTM4YjcxN2I0OGIxNDhlN2M0ODE0M2YwZDM5ZDEKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4x
L3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFwcC9hcHAvY29tcG9uZW50X2RhdGEvY29tcG9z
ZV9ib3guanMKQEAgLTAsMCArMSw5MyBAQAorJ3VzZSBzdHJpY3QnOworCitkZWZpbmUoCisKKyAg
WworICAgICdmbGlnaHQvbGliL2NvbXBvbmVudCcsCisgICAgJ2NvbXBvbmVudHMvbXVzdGFjaGUv
bXVzdGFjaGUnLAorICAgICdhcHAvZGF0YScsCisgICAgJ2FwcC90ZW1wbGF0ZXMnCisgIF0sCisK
KyAgZnVuY3Rpb24oZGVmaW5lQ29tcG9uZW50LCBNdXN0YWNoZSwgZGF0YVN0b3JlLCB0ZW1wbGF0
ZXMpIHsKKyAgICByZXR1cm4gZGVmaW5lQ29tcG9uZW50KGNvbXBvc2VCb3gpOworCisgICAgZnVu
Y3Rpb24gY29tcG9zZUJveCgpIHsKKworICAgICAgdGhpcy5kZWZhdWx0QXR0cnMoeworICAgICAg
ICBkYXRhU3RvcmU6IGRhdGFTdG9yZSwKKyAgICAgICAgcmVjaXBpZW50SGludElkOiAncmVjaXBp
ZW50X2hpbnQnLAorICAgICAgICBzdWJqZWN0SGludDogJ1N1YmplY3QnLAorICAgICAgICBtZXNz
YWdlSGludDogJ01lc3NhZ2UnLAorICAgICAgICB0b0hpbnQ6ICdUbycsCisgICAgICAgIGZvcndh
cmRQcmVmaXg6ICdGdycsCisgICAgICAgIHJlcGx5UHJlZml4OiAnUmUnCisgICAgICB9KTsKKwor
ICAgICAgdGhpcy5zZXJ2ZUNvbXBvc2VCb3ggPSBmdW5jdGlvbihldiwgZGF0YSkgeworICAgICAg
ICB0aGlzLnRyaWdnZXIoImRhdGFDb21wb3NlQm94U2VydmVkIiwgeworICAgICAgICAgIG1hcmt1
cDogdGhpcy5yZW5kZXJDb21wb3NlQm94KGRhdGEudHlwZSwgZGF0YS5yZWxhdGVkTWFpbElkKSwK
KyAgICAgICAgICB0eXBlOiBkYXRhLnR5cGV9KTsKKyAgICAgIH07CisKKyAgICAgIHRoaXMuZ2V0
U3ViamVjdCA9IGZ1bmN0aW9uKHR5cGUsIHJlbGF0ZWRNYWlsSWQpIHsKKyAgICAgICAgdmFyIHJl
bGF0ZWRNYWlsID0gdGhpcy5hdHRyLmRhdGFTdG9yZS5tYWlsLmZpbHRlcihmdW5jdGlvbihlYWNo
KSB7CisgICAgICAgICAgcmV0dXJuIGVhY2guaWQgPT0gIHJlbGF0ZWRNYWlsSWQ7CisgICAgICAg
IH0pWzBdOworCisgICAgICAgIHZhciBzdWJqZWN0ID0gcmVsYXRlZE1haWwgJiYgcmVsYXRlZE1h
aWwuc3ViamVjdDsKKworICAgICAgICB2YXIgc3ViamVjdExvb2t1cCA9IHsKKyAgICAgICAgICBu
ZXdNYWlsOiB0aGlzLmF0dHIuc3ViamVjdEhpbnQsCisgICAgICAgICAgZm9yd2FyZDogdGhpcy5h
dHRyLmZvcndhcmRQcmVmaXggKyAiOiAiICsgc3ViamVjdCwKKyAgICAgICAgICByZXBseTogdGhp
cy5hdHRyLnJlcGx5UHJlZml4ICsgIjogIiArIHN1YmplY3QKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBzdWJqZWN0TG9va3VwW3R5cGVdOworICAgICAgfTsKKworICAgICAgdGhpcy5yZW5k
ZXJDb21wb3NlQm94ID0gZnVuY3Rpb24odHlwZSwgcmVsYXRlZE1haWxJZCkgeworICAgICAgICB2
YXIgcmVjaXBpZW50SWQgPSB0aGlzLmdldFJlY2lwaWVudElkKHR5cGUsIHJlbGF0ZWRNYWlsSWQp
OworICAgICAgICB2YXIgY29udGFjdHMgPSB0aGlzLmF0dHIuZGF0YVN0b3JlLmNvbnRhY3RzLm1h
cChmdW5jdGlvbihjb250YWN0KSB7CisgICAgICAgICAgY29udGFjdC5yZWNpcGllbnQgPSAoY29u
dGFjdC5pZCA9PSByZWNpcGllbnRJZCk7CisgICAgICAgICAgcmV0dXJuIGNvbnRhY3Q7CisgICAg
ICAgIH0pOworCisgICAgICAgIHJldHVybiBNdXN0YWNoZS5yZW5kZXIodGVtcGxhdGVzLmNvbXBv
c2VCb3gsIHsKKyAgICAgICAgICBuZXdNYWlsOiB0eXBlID09ICduZXdNYWlsJywKKyAgICAgICAg
ICByZXBseTogdHlwZSA9PSAncmVwbHknLAorICAgICAgICAgIHN1YmplY3Q6IHRoaXMuZ2V0U3Vi
amVjdCh0eXBlLCByZWxhdGVkTWFpbElkKSwKKyAgICAgICAgICBtZXNzYWdlOiB0aGlzLmF0dHIu
bWVzc2FnZUhpbnQsCisgICAgICAgICAgY29udGFjdHM6IGNvbnRhY3RzCisgICAgICAgIH0pOwor
ICAgICAgfTsKKworICAgICAgdGhpcy5nZXRSZWNpcGllbnRJZCA9IGZ1bmN0aW9uKHR5cGUsIHJl
bGF0ZWRNYWlsSWQpIHsKKyAgICAgICAgdmFyIHJlbGF0ZWRNYWlsID0gKHR5cGUgPT0gJ3JlcGx5
JykgJiYgdGhpcy5hdHRyLmRhdGFTdG9yZS5tYWlsLmZpbHRlcihmdW5jdGlvbihlYWNoKSB7Cisg
ICAgICAgICAgcmV0dXJuIGVhY2guaWQgPT0gIHJlbGF0ZWRNYWlsSWQ7CisgICAgICAgIH0pWzBd
OworCisgICAgICAgIHJldHVybiByZWxhdGVkTWFpbCAmJiByZWxhdGVkTWFpbC5jb250YWN0X2lk
IHx8IHRoaXMuYXR0ci5yZWNpcGllbnRIaW50SWQ7CisgICAgICB9OworCisKKyAgICAgIHRoaXMu
c2VuZCA9IGZ1bmN0aW9uKGV2LCBkYXRhKSB7CisgICAgICAgIHRoaXMuYXR0ci5kYXRhU3RvcmUu
bWFpbC5wdXNoKHsKKyAgICAgICAgICBpZDogU3RyaW5nKERhdGUubm93KCkpLAorICAgICAgICAg
IGNvbnRhY3RfaWQ6IGRhdGEudG9faWQsCisgICAgICAgICAgZm9sZGVyczogWyJzZW50Il0sCisg
ICAgICAgICAgdGltZTogRGF0ZS5ub3coKSwKKyAgICAgICAgICBzdWJqZWN0OiBkYXRhLnN1Ympl
Y3QsCisgICAgICAgICAgbWVzc2FnZTogZGF0YS5tZXNzYWdlCisgICAgICAgIH0pOworICAgICAg
ICB0aGlzLnRyaWdnZXIoJ2RhdGFNYWlsSXRlbXNSZWZyZXNoUmVxdWVzdGVkJywge2ZvbGRlcjog
ZGF0YS5jdXJyZW50Rm9sZGVyfSk7CisgICAgICB9OworCisgICAgICB0aGlzLmFmdGVyKCJpbml0
aWFsaXplIiwgZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMub24oInVpQ29tcG9zZUJveFJlcXVl
c3RlZCIsIHRoaXMuc2VydmVDb21wb3NlQm94KTsKKyAgICAgICAgdGhpcy5vbigidWlTZW5kUmVx
dWVzdGVkIiwgdGhpcy5zZW5kKTsKKyAgICAgIH0pOworICAgIH0KKworICB9CispOwpkaWZmIC0t
Z2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMv
ZmxpZ2h0anMtZXhhbXBsZS1hcHAvYXBwL2NvbXBvbmVudF9kYXRhL21haWxfaXRlbXMuanMgYi9X
ZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9mbGlnaHRq
cy1leGFtcGxlLWFwcC9hcHAvY29tcG9uZW50X2RhdGEvbWFpbF9pdGVtcy5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4zODBmZjlhMGU4YmI2NzQ2ZmI5Y2JhMWJhZTRhZGRlYjRhYzAyMjg5Ci0tLSAvZGV2L251bGwK
KysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMv
ZmxpZ2h0anMtZXhhbXBsZS1hcHAvYXBwL2NvbXBvbmVudF9kYXRhL21haWxfaXRlbXMuanMKQEAg
LTAsMCArMSw2OCBAQAorJ3VzZSBzdHJpY3QnOworCitkZWZpbmUoCisKKyAgWworICAgICdmbGln
aHQvbGliL2NvbXBvbmVudCcsCisgICAgJ2NvbXBvbmVudHMvbXVzdGFjaGUvbXVzdGFjaGUnLAor
ICAgICdhcHAvZGF0YScsCisgICAgJ2FwcC90ZW1wbGF0ZXMnCisgIF0sCisKKyAgZnVuY3Rpb24o
ZGVmaW5lQ29tcG9uZW50LCBNdXN0YWNoZSwgZGF0YVN0b3JlLCB0ZW1wbGF0ZXMpIHsKKyAgICBy
ZXR1cm4gZGVmaW5lQ29tcG9uZW50KG1haWxJdGVtcyk7CisKKyAgICBmdW5jdGlvbiBtYWlsSXRl
bXMoKSB7CisKKyAgICAgIHRoaXMuZGVmYXVsdEF0dHJzKHsKKyAgICAgICAgZm9sZGVyOiAnaW5i
b3gnLAorICAgICAgICBkYXRhU3RvcmU6IGRhdGFTdG9yZQorICAgICAgfSk7CisKKyAgICAgIHRo
aXMuc2VydmVNYWlsSXRlbXMgPSBmdW5jdGlvbihldiwgZGF0YSkgeworICAgICAgICB2YXIgZm9s
ZGVyID0gKGRhdGEgJiYgZGF0YS5mb2xkZXIpIHx8IHRoaXMuYXR0ci5mb2xkZXI7CisgICAgICAg
IHRoaXMudHJpZ2dlcigiZGF0YU1haWxJdGVtc1NlcnZlZCIsIHttYXJrdXA6IHRoaXMucmVuZGVy
SXRlbXModGhpcy5hc3NlbWJsZUl0ZW1zKGZvbGRlcikpfSkKKyAgICAgIH07CisKKyAgICAgIHRo
aXMucmVuZGVySXRlbXMgPSBmdW5jdGlvbihpdGVtcykgeworICAgICAgICByZXR1cm4gTXVzdGFj
aGUucmVuZGVyKHRlbXBsYXRlcy5tYWlsSXRlbSwge21haWxJdGVtczogaXRlbXN9KTsKKyAgICAg
IH07CisKKyAgICAgIHRoaXMuYXNzZW1ibGVJdGVtcyA9IGZ1bmN0aW9uKGZvbGRlcikgeworICAg
ICAgICB2YXIgaXRlbXMgPSBbXTsKKworICAgICAgICB0aGlzLmF0dHIuZGF0YVN0b3JlLm1haWwu
Zm9yRWFjaChmdW5jdGlvbihlYWNoKSB7CisgICAgICAgICAgaWYgKGVhY2guZm9sZGVycyAmJiBl
YWNoLmZvbGRlcnMuaW5kZXhPZihmb2xkZXIpID4gLTEpIHsKKyAgICAgICAgICAgIGl0ZW1zLnB1
c2godGhpcy5nZXRJdGVtRm9yVmlldyhlYWNoKSk7CisgICAgICAgICAgfQorICAgICAgICB9LCB0
aGlzKTsKKworICAgICAgICByZXR1cm4gaXRlbXM7CisgICAgICB9OworCisgICAgICB0aGlzLmdl
dEl0ZW1Gb3JWaWV3ID0gZnVuY3Rpb24oaXRlbURhdGEpIHsKKyAgICAgICAgdmFyIHRoaXNJdGVt
LCB0aGlzQ29udGFjdCwgbXNnCisKKyAgICAgICAgdGhpc0l0ZW0gPSB7aWQ6IGl0ZW1EYXRhLmlk
LCBpbXBvcnRhbnQ6IGl0ZW1EYXRhLmltcG9ydGFudH07CisKKyAgICAgICAgdGhpc0NvbnRhY3Qg
PSB0aGlzLmF0dHIuZGF0YVN0b3JlLmNvbnRhY3RzLmZpbHRlcihmdW5jdGlvbihjb250YWN0KSB7
CisgICAgICAgICAgcmV0dXJuIGNvbnRhY3QuaWQgPT0gaXRlbURhdGEuY29udGFjdF9pZAorICAg
ICAgICB9KVswXTsKKyAgICAgICAgdGhpc0l0ZW0ubmFtZSA9IFt0aGlzQ29udGFjdC5maXJzdE5h
bWUsIHRoaXNDb250YWN0Lmxhc3ROYW1lXS5qb2luKCcgJyk7CisKKyAgICAgICAgdmFyIHN1Ymog
PSBpdGVtRGF0YS5zdWJqZWN0OworICAgICAgICB0aGlzSXRlbS5mb3JtYXR0ZWRTdWJqZWN0ID0g
c3Viai5sZW5ndGggPiA3MCA/IHN1Ymouc2xpY2UoMCwgNzApICsgIi4uLiIgOiBzdWJqOworCisg
ICAgICAgIHZhciBtc2cgPSBpdGVtRGF0YS5tZXNzYWdlOworICAgICAgICB0aGlzSXRlbS5mb3Jt
YXR0ZWRNZXNzYWdlID0gbXNnLmxlbmd0aCA+IDcwID8gbXNnLnNsaWNlKDAsIDcwKSArICIuLi4i
IDogbXNnOworCisgICAgICAgIHJldHVybiB0aGlzSXRlbTsKKyAgICAgIH07CisKKyAgICAgIHRo
aXMuYWZ0ZXIoImluaXRpYWxpemUiLCBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5vbigidWlN
YWlsSXRlbXNSZXF1ZXN0ZWQiLCB0aGlzLnNlcnZlTWFpbEl0ZW1zKTsKKyAgICAgICAgdGhpcy5v
bigiZGF0YU1haWxJdGVtc1JlZnJlc2hSZXF1ZXN0ZWQiLCB0aGlzLnNlcnZlTWFpbEl0ZW1zKTsK
KyAgICAgIH0pOworICAgIH0KKyAgfQorKTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJi
ZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2Fw
cC9jb21wb25lbnRfZGF0YS9tb3ZlX3RvLmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9T
cGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvZmxpZ2h0anMtZXhhbXBsZS1hcHAvYXBwL2NvbXBvbmVu
dF9kYXRhL21vdmVfdG8uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDZmMjQ4NTQwYjU4NGEwZjkwZGYyN2FlNDYy
OGNmYTUzZDRjYzczZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5v
cmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2FwcC9jb21w
b25lbnRfZGF0YS9tb3ZlX3RvLmpzCkBAIC0wLDAgKzEsNTIgQEAKKyd1c2Ugc3RyaWN0JzsKKwor
ZGVmaW5lKAorCisgIFsKKyAgICAnZmxpZ2h0L2xpYi9jb21wb25lbnQnLAorICAgICdjb21wb25l
bnRzL211c3RhY2hlL211c3RhY2hlJywKKyAgICAnYXBwL2RhdGEnLAorICAgICdhcHAvdGVtcGxh
dGVzJworICBdLAorCisgIGZ1bmN0aW9uKGRlZmluZUNvbXBvbmVudCwgTXVzdGFjaGUsIGRhdGFT
dG9yZSwgdGVtcGxhdGVzKSB7CisgICAgcmV0dXJuIGRlZmluZUNvbXBvbmVudChtb3ZlVG8pOwor
CisgICAgZnVuY3Rpb24gbW92ZVRvKCkgeworCisgICAgICB0aGlzLmRlZmF1bHRBdHRycyh7Cisg
ICAgICAgIGRhdGFTdG9yZTogZGF0YVN0b3JlCisgICAgICB9KTsKKworICAgICAgdGhpcy5zZXJ2
ZUF2YWlsYWJsZUZvbGRlcnMgPSBmdW5jdGlvbihldiwgZGF0YSkgeworICAgICAgICB0aGlzLnRy
aWdnZXIoImRhdGFNb3ZlVG9JdGVtc1NlcnZlZCIsIHsKKyAgICAgICAgICBtYXJrdXA6IHRoaXMu
cmVuZGVyRm9sZGVyU2VsZWN0b3IodGhpcy5nZXRPdGhlckZvbGRlcnMoZGF0YS5mb2xkZXIpKQor
ICAgICAgICB9KQorICAgICAgfTsKKworICAgICAgdGhpcy5yZW5kZXJGb2xkZXJTZWxlY3RvciA9
IGZ1bmN0aW9uKGl0ZW1zKSB7CisgICAgICAgIHJldHVybiBNdXN0YWNoZS5yZW5kZXIodGVtcGxh
dGVzLm1vdmVUb1NlbGVjdG9yLCB7bW92ZVRvSXRlbXM6IGl0ZW1zfSk7CisgICAgICB9OworCisg
ICAgICB0aGlzLm1vdmVJdGVtcyA9IGZ1bmN0aW9uKGV2LCBkYXRhKSB7CisgICAgICAgIHZhciBp
dGVtc1RvTW92ZUlkcyA9IGRhdGEuaXRlbUlkcworICAgICAgICB0aGlzLmF0dHIuZGF0YVN0b3Jl
Lm1haWwuZm9yRWFjaChmdW5jdGlvbihpdGVtKSB7CisgICAgICAgICAgaWYgKGl0ZW1zVG9Nb3Zl
SWRzLmluZGV4T2YoaXRlbS5pZCkgPiAtMSkgeworICAgICAgICAgICAgaXRlbS5mb2xkZXJzID0g
W2RhdGEudG9Gb2xkZXJdOworICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMu
dHJpZ2dlcignZGF0YU1haWxJdGVtc1JlZnJlc2hSZXF1ZXN0ZWQnLCB7Zm9sZGVyOiBkYXRhLmZy
b21Gb2xkZXJ9KTsKKyAgICAgIH07CisKKyAgICAgIHRoaXMuZ2V0T3RoZXJGb2xkZXJzID0gZnVu
Y3Rpb24oZm9sZGVyKSB7CisgICAgICAgIHJldHVybiB0aGlzLmF0dHIuZGF0YVN0b3JlLmZvbGRl
cnMuZmlsdGVyKGZ1bmN0aW9uKGUpIHtyZXR1cm4gZSAhPSBmb2xkZXJ9KTsKKyAgICAgIH07CisK
KyAgICAgIHRoaXMuYWZ0ZXIoImluaXRpYWxpemUiLCBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhp
cy5vbigidWlBdmFpbGFibGVGb2xkZXJzUmVxdWVzdGVkIiwgdGhpcy5zZXJ2ZUF2YWlsYWJsZUZv
bGRlcnMpOworICAgICAgICB0aGlzLm9uKCJ1aU1vdmVJdGVtc1JlcXVlc3RlZCIsIHRoaXMubW92
ZUl0ZW1zKTsKKyAgICAgIH0pOworICAgIH0KKworICB9CispOwpkaWZmIC0tZ2l0IGEvV2Vic2l0
ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvZmxpZ2h0anMtZXhh
bXBsZS1hcHAvYXBwL2NvbXBvbmVudF91aS9jb21wb3NlX2JveC5qcyBiL1dlYnNpdGVzL2Jyb3dz
ZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBw
L2FwcC9jb21wb25lbnRfdWkvY29tcG9zZV9ib3guanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmViMTQwNDBiZWEw
NTdkZDgyYmI2ZDkzOWY1NGZlZDU2NDEyOWE5YQotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVz
L2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdodGpzLWV4YW1w
bGUtYXBwL2FwcC9jb21wb25lbnRfdWkvY29tcG9zZV9ib3guanMKQEAgLTAsMCArMSwxMTMgQEAK
Kyd1c2Ugc3RyaWN0JzsKKworZGVmaW5lKAorCisgIFsKKyAgICAnZmxpZ2h0L2xpYi9jb21wb25l
bnQnCisgIF0sCisKKyAgZnVuY3Rpb24oZGVmaW5lQ29tcG9uZW50KSB7CisKKyAgICByZXR1cm4g
ZGVmaW5lQ29tcG9uZW50KGNvbXBvc2VCb3gpOworCisgICAgZnVuY3Rpb24gY29tcG9zZUJveCgp
IHsKKworICAgICAgdGhpcy5kZWZhdWx0QXR0cnMoeworICAgICAgICBuZXdNYWlsVHlwZTogJ25l
d01haWwnLAorICAgICAgICBmb3J3YXJkTWFpbFR5cGU6ICdmb3J3YXJkJywKKyAgICAgICAgcmVw
bHlNYWlsVHlwZTogJ3JlcGx5JywKKyAgICAgICAgaGludENsYXNzOiAnaGludCcsCisgICAgICAg
IHNlbGVjdGVkRm9sZGVyczogW10sCisgICAgICAgIHNlbGVjdGVkTWFpbEl0ZW1zOiBbXSwKKwor
ICAgICAgICAvL3NlbGVjdG9ycworICAgICAgICBjb21wb3NlQ29udHJvbDogJy5jb21wb3NlJywK
KyAgICAgICAgbmV3Q29udHJvbFNlbGVjdG9yOiAnI25ld19tYWlsJywKKyAgICAgICAgY2FuY2Vs
U2VsZWN0b3I6ICcjY2FuY2VsX2NvbXBvc2VkJywKKyAgICAgICAgc2VuZFNlbGVjdG9yOiAnI3Nl
bmRfY29tcG9zZWQnLAorICAgICAgICB0b1NlbGVjdG9yOiAnI2NvbXBvc2VfdG8nLAorICAgICAg
ICBzdWJqZWN0U2VsZWN0b3I6ICcjY29tcG9zZV9zdWJqZWN0JywKKyAgICAgICAgbWVzc2FnZVNl
bGVjdG9yOiAnI2NvbXBvc2VfbWVzc2FnZScsCisgICAgICAgIHJlY2lwaWVudFNlbGVjdG9yOiAn
I3JlY2lwaWVudF9zZWxlY3QnLAorICAgICAgICByZWNpcGllbnRIaW50U2VsZWN0b3I6ICcjcmVj
aXBpZW50X2hpbnQnLAorICAgICAgICBzZWxlY3RlZFJlY2lwaWVudFNlbGVjdG9yOiAnI3JlY2lw
aWVudF9zZWxlY3QgOnNlbGVjdGVkJywKKyAgICAgICAgaGludFNlbGVjdG9yOiAnZGl2LmhpbnQn
CisgICAgICB9KTsKKworICAgICAgdGhpcy5uZXdNYWlsID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHRoaXMucmVxdWVzdENvbXBvc2VCb3godGhpcy5hdHRyLm5ld01haWxUeXBlKTsKKyAgICAgIH07
CisKKyAgICAgIHRoaXMuZm9yd2FyZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLnJlcXVl
c3RDb21wb3NlQm94KHRoaXMuYXR0ci5mb3J3YXJkTWFpbFR5cGUsIHRoaXMuYXR0ci5zZWxlY3Rl
ZE1haWxJdGVtcyk7CisgICAgICB9OworCisgICAgICB0aGlzLnJlcGx5ID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHRoaXMucmVxdWVzdENvbXBvc2VCb3godGhpcy5hdHRyLnJlcGx5TWFpbFR5cGUs
IHRoaXMuYXR0ci5zZWxlY3RlZE1haWxJdGVtcyk7CisgICAgICB9OworCisgICAgICB0aGlzLnJl
cXVlc3RDb21wb3NlQm94ID0gZnVuY3Rpb24odHlwZSwgcmVsYXRlZE1haWxJZCkgeworICAgICAg
ICB0aGlzLnRyaWdnZXIoJ3VpQ29tcG9zZUJveFJlcXVlc3RlZCcsIHt0eXBlOiB0eXBlLCByZWxh
dGVkTWFpbElkOiByZWxhdGVkTWFpbElkfSk7CisgICAgICB9OworCisgICAgICB0aGlzLmxhdW5j
aENvbXBvc2VCb3ggPSBmdW5jdGlvbihldiwgZGF0YSkgeworICAgICAgICB2YXIgZm9jdXNTZWxl
Y3RvciA9IChkYXRhLnR5cGUgPT0gdGhpcy5hdHRyLnJlcGx5TWFpbFR5cGUpID8gJ21lc3NhZ2VT
ZWxlY3RvcicgOiAndG9TZWxlY3Rvcic7CisgICAgICAgIHRoaXMuJG5vZGUuaHRtbChkYXRhLm1h
cmt1cCkuc2hvdygpOworICAgICAgICB0aGlzLnNlbGVjdChmb2N1c1NlbGVjdG9yKS5mb2N1cygp
OworICAgICAgfTsKKworICAgICAgdGhpcy5jYW5jZWwgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
dGhpcy4kbm9kZS5odG1sKCcnKS5oaWRlKCk7CisgICAgICB9OworCisgICAgICB0aGlzLnJlcXVl
c3RTZW5kID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBkYXRhID0geworICAgICAgICAgIHRv
X2lkOiB0aGlzLnNlbGVjdCgnc2VsZWN0ZWRSZWNpcGllbnRTZWxlY3RvcicpLmF0dHIoJ2lkJyks
CisgICAgICAgICAgc3ViamVjdDogdGhpcy5zZWxlY3QoJ3N1YmplY3RTZWxlY3RvcicpLnRleHQo
KSwKKyAgICAgICAgICBtZXNzYWdlOiB0aGlzLnNlbGVjdCgnbWVzc2FnZVNlbGVjdG9yJykudGV4
dCgpLAorICAgICAgICAgIGN1cnJlbnRGb2xkZXI6IHRoaXMuYXR0ci5zZWxlY3RlZEZvbGRlcnNb
MF0KKyAgICAgICAgfTsKKyAgICAgICAgdGhpcy50cmlnZ2VyKCd1aVNlbmRSZXF1ZXN0ZWQnLCBk
YXRhKTsKKyAgICAgICAgdGhpcy4kbm9kZS5oaWRlKCk7CisgICAgICB9OworCisgICAgICB0aGlz
LmVuYWJsZVNlbmQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5zZWxlY3QoJ3JlY2lwaWVu
dEhpbnRTZWxlY3RvcicpLmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7CisgICAgICAgIHRo
aXMuc2VsZWN0KCdzZW5kU2VsZWN0b3InKS5yZW1vdmVBdHRyKCdkaXNhYmxlZCcpOworICAgICAg
fTsKKworICAgICAgdGhpcy5yZW1vdmVIaW50ID0gZnVuY3Rpb24oZXYsIGRhdGEpIHsKKyAgICAg
ICAgJChldi50YXJnZXQpLmh0bWwoJycpLnJlbW92ZUNsYXNzKHRoaXMuYXR0ci5oaW50Q2xhc3Mp
OworICAgICAgfTsKKworICAgICAgdGhpcy51cGRhdGVNYWlsSXRlbVNlbGVjdGlvbnMgPSBmdW5j
dGlvbihldiwgZGF0YSkgeworICAgICAgICB0aGlzLmF0dHIuc2VsZWN0ZWRNYWlsSXRlbXMgPSBk
YXRhLnNlbGVjdGVkSWRzOworICAgICAgfQorCisgICAgICB0aGlzLnVwZGF0ZUZvbGRlclNlbGVj
dGlvbnMgPSBmdW5jdGlvbihldiwgZGF0YSkgeworICAgICAgICB0aGlzLmF0dHIuc2VsZWN0ZWRG
b2xkZXJzID0gZGF0YS5zZWxlY3RlZElkczsKKyAgICAgIH0KKworICAgICAgdGhpcy5hZnRlcign
aW5pdGlhbGl6ZScsIGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAnZGF0
YUNvbXBvc2VCb3hTZXJ2ZWQnLCB0aGlzLmxhdW5jaENvbXBvc2VCb3gpOworICAgICAgICB0aGlz
Lm9uKGRvY3VtZW50LCAndWlGb3J3YXJkTWFpbCcsIHRoaXMuZm9yd2FyZCk7CisgICAgICAgIHRo
aXMub24oZG9jdW1lbnQsICd1aVJlcGx5VG9NYWlsJywgdGhpcy5yZXBseSk7CisgICAgICAgIHRo
aXMub24oZG9jdW1lbnQsICd1aU1haWxJdGVtU2VsZWN0aW9uQ2hhbmdlZCcsIHRoaXMudXBkYXRl
TWFpbEl0ZW1TZWxlY3Rpb25zKTsKKyAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ3VpRm9sZGVy
U2VsZWN0aW9uQ2hhbmdlZCcsIHRoaXMudXBkYXRlRm9sZGVyU2VsZWN0aW9ucyk7CisKKyAgICAg
ICAgLy90aGUgZm9sbG93aW5nIGJpbmRpbmdzIHVzZSBkZWxlZ2F0aW9uIHNvIHRoYXQgdGhlIGV2
ZW50IHRhcmdldCBpcyByZWFkIGF0IGV2ZW50IHRpbWUKKyAgICAgICAgdGhpcy5vbihkb2N1bWVu
dCwgImNsaWNrIiwgeworICAgICAgICAgICdjYW5jZWxTZWxlY3Rvcic6IHRoaXMuY2FuY2VsLAor
ICAgICAgICAgICdzZW5kU2VsZWN0b3InOiB0aGlzLnJlcXVlc3RTZW5kLAorICAgICAgICAgICdu
ZXdDb250cm9sU2VsZWN0b3InOiB0aGlzLm5ld01haWwKKyAgICAgICAgfSk7CisgICAgICAgIHRo
aXMub24oJ2NoYW5nZScsIHsKKyAgICAgICAgICAncmVjaXBpZW50U2VsZWN0b3InOiB0aGlzLmVu
YWJsZVNlbmQKKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMub24oJ2tleWRvd24nLCB7CisgICAg
ICAgICAgJ2hpbnRTZWxlY3Rvcic6IHRoaXMucmVtb3ZlSGludAorICAgICAgICB9KTsKKyAgICAg
IH0pOworICAgIH0KKyAgfQorKTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5v
cmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2FwcC9jb21w
b25lbnRfdWkvZm9sZGVycy5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0
ZXIyLjEvcmVzb3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2FwcC9jb21wb25lbnRfdWkvZm9s
ZGVycy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5mODUwNDkzOWViNDcxN2FlY2Y5ODI3ZDMyNTBlNTBjYTM5YjI1
N2NmCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9t
ZXRlcjIuMS9yZXNvdXJjZXMvZmxpZ2h0anMtZXhhbXBsZS1hcHAvYXBwL2NvbXBvbmVudF91aS9m
b2xkZXJzLmpzCkBAIC0wLDAgKzEsMzQgQEAKKyd1c2Ugc3RyaWN0JzsKKworZGVmaW5lKAorCisg
IFsKKyAgICAnZmxpZ2h0L2xpYi9jb21wb25lbnQnLAorICAgICcuL3dpdGhfc2VsZWN0JworICBd
LAorCisgIGZ1bmN0aW9uKGRlZmluZUNvbXBvbmVudCwgd2l0aFNlbGVjdCkgeworCisgICAgcmV0
dXJuIGRlZmluZUNvbXBvbmVudChmb2xkZXJzLCB3aXRoU2VsZWN0KTsKKworICAgIGZ1bmN0aW9u
IGZvbGRlcnMoKSB7CisKKyAgICAgIHRoaXMuZGVmYXVsdEF0dHJzKHsKKyAgICAgICAgc2VsZWN0
ZWRDbGFzczogJ3NlbGVjdGVkJywKKyAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50OiAndWlG
b2xkZXJTZWxlY3Rpb25DaGFuZ2VkJywKKworICAgICAgICAvL3NlbGVjdG9ycworICAgICAgICBp
dGVtU2VsZWN0b3I6ICdsaS5mb2xkZXItaXRlbScsCisgICAgICAgIHNlbGVjdGVkSXRlbVNlbGVj
dG9yOiAnbGkuZm9sZGVyLWl0ZW0uc2VsZWN0ZWQnCisgICAgICB9KTsKKworICAgICAgdGhpcy5m
ZXRjaE1haWxJdGVtcyA9IGZ1bmN0aW9uKGV2LCBkYXRhKSB7CisgICAgICAgICAgdGhpcy50cmln
Z2VyKCd1aU1haWxJdGVtc1JlcXVlc3RlZCcsIHtmb2xkZXI6IGRhdGEuc2VsZWN0ZWRJZHNbMF19
KTsKKyAgICAgIH0KKworICAgICAgdGhpcy5hZnRlcignaW5pdGlhbGl6ZScsIGZ1bmN0aW9uKCkg
eworICAgICAgICB0aGlzLm9uKCd1aUZvbGRlclNlbGVjdGlvbkNoYW5nZWQnLCB0aGlzLmZldGNo
TWFpbEl0ZW1zKTsKKyAgICAgIH0pOworICAgIH0KKyAgfQorKTsKZGlmZiAtLWdpdCBhL1dlYnNp
dGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdodGpzLWV4
YW1wbGUtYXBwL2FwcC9jb21wb25lbnRfdWkvbWFpbF9jb250cm9scy5qcyBiL1dlYnNpdGVzL2Jy
b3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUt
YXBwL2FwcC9jb21wb25lbnRfdWkvbWFpbF9jb250cm9scy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NTlmNTU0
NTAyYTRhOTYyNGRjNjAwMzRmNGJhYTg0Y2VhOTNlMzkwCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
c2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvZmxpZ2h0anMt
ZXhhbXBsZS1hcHAvYXBwL2NvbXBvbmVudF91aS9tYWlsX2NvbnRyb2xzLmpzCkBAIC0wLDAgKzEs
NjcgQEAKKyd1c2Ugc3RyaWN0JzsKKworZGVmaW5lKAorICBbCisgICAgJ2ZsaWdodC9saWIvY29t
cG9uZW50JworICBdLAorCisgIGZ1bmN0aW9uKGRlZmluZUNvbXBvbmVudCkgeworCisgICAgcmV0
dXJuIGRlZmluZUNvbXBvbmVudChtYWlsQ29udHJvbHMpOworCisgICAgZnVuY3Rpb24gbWFpbENv
bnRyb2xzKCkgeworICAgICAgdGhpcy5kZWZhdWx0QXR0cnMoeworICAgICAgICAvL3NlbGVjdG9y
cworICAgICAgICBhY3Rpb25Db250cm9sc1NlbGVjdG9yOiAnYnV0dG9uLm1haWwtYWN0aW9uJywK
KyAgICAgICAgZGVsZXRlQ29udHJvbFNlbGVjdG9yOiAnI2RlbGV0ZV9tYWlsJywKKyAgICAgICAg
bW92ZUNvbnRyb2xTZWxlY3RvcjogJyNtb3ZlX21haWwnLAorICAgICAgICBmb3J3YXJkQ29udHJv
bFNlbGVjdG9yOiAnI2ZvcndhcmQnLAorICAgICAgICByZXBseUNvbnRyb2xTZWxlY3RvcjogJyNy
ZXBseScsCisgICAgICAgIHNpbmdsZUl0ZW1BY3Rpb25TZWxlY3RvcjogJ2J1dHRvbi5zaW5nbGUt
aXRlbScKKyAgICAgIH0pOworCisgICAgICB0aGlzLmRpc2FibGVBbGwgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgdGhpcy5zZWxlY3QoJ2FjdGlvbkNvbnRyb2xzU2VsZWN0b3InKS5hdHRyKCdkaXNh
YmxlZCcsICdkaXNhYmxlZCcpOworICAgICAgfTsKKworICAgICAgdGhpcy5yZXN0eWxlT25TZWxl
Y3Rpb25DaGFuZ2UgPSBmdW5jdGlvbihldiwgZGF0YSkgeworICAgICAgICBpZiAoZGF0YS5zZWxl
Y3RlZElkcy5sZW5ndGggPiAxKSB7CisgICAgICAgICAgdGhpcy5zZWxlY3QoJ2FjdGlvbkNvbnRy
b2xzU2VsZWN0b3InKS5ub3QoJ2J1dHRvbi5zaW5nbGUtaXRlbScpLnJlbW92ZUF0dHIoJ2Rpc2Fi
bGVkJyk7CisgICAgICAgICAgdGhpcy5zZWxlY3QoJ3NpbmdsZUl0ZW1BY3Rpb25TZWxlY3Rvcicp
LmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7CisgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5z
ZWxlY3RlZElkcy5sZW5ndGggPT0gMSkgeworICAgICAgICAgIHRoaXMuc2VsZWN0KCdhY3Rpb25D
b250cm9sc1NlbGVjdG9yJykucmVtb3ZlQXR0cignZGlzYWJsZWQnKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICB0aGlzLmRpc2FibGVBbGwoKTsKKyAgICAgICAgfQorICAgICAgfTsKKwor
ICAgICAgdGhpcy5kZWxldGVNYWlsID0gZnVuY3Rpb24oZXYsIGRhdGEpIHsKKyAgICAgICAgdGhp
cy50cmlnZ2VyKCd1aURlbGV0ZU1haWwnKTsKKyAgICAgIH07CisKKyAgICAgIHRoaXMubW92ZU1h
aWwgPSBmdW5jdGlvbihldiwgZGF0YSkgeworICAgICAgICB0aGlzLnRyaWdnZXIoJ3VpTW92ZU1h
aWwnKTsKKyAgICAgIH07CisKKyAgICAgIHRoaXMuZm9yd2FyZE1haWwgPSBmdW5jdGlvbihldiwg
ZGF0YSkgeworICAgICAgICB0aGlzLnRyaWdnZXIoJ3VpRm9yd2FyZE1haWwnKTsKKyAgICAgIH07
CisKKyAgICAgIHRoaXMucmVwbHlUb01haWwgPSBmdW5jdGlvbihldiwgZGF0YSkgeworICAgICAg
ICB0aGlzLnRyaWdnZXIoJ3VpUmVwbHlUb01haWwnKTsKKyAgICAgIH07CisKKyAgICAgIHRoaXMu
YWZ0ZXIoJ2luaXRpYWxpemUnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5vbignLm1haWwt
YWN0aW9uJywgJ2NsaWNrJywgeworICAgICAgICAgICdkZWxldGVDb250cm9sU2VsZWN0b3InOiB0
aGlzLmRlbGV0ZU1haWwsCisgICAgICAgICAgJ21vdmVDb250cm9sU2VsZWN0b3InOiB0aGlzLm1v
dmVNYWlsLAorICAgICAgICAgICdmb3J3YXJkQ29udHJvbFNlbGVjdG9yJzogdGhpcy5mb3J3YXJk
TWFpbCwKKyAgICAgICAgICAncmVwbHlDb250cm9sU2VsZWN0b3InOiB0aGlzLnJlcGx5VG9NYWls
CisgICAgICAgIH0pOworICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAndWlNYWlsSXRlbVNlbGVj
dGlvbkNoYW5nZWQnLCB0aGlzLnJlc3R5bGVPblNlbGVjdGlvbkNoYW5nZSk7CisgICAgICAgIHRo
aXMub24oZG9jdW1lbnQsICd1aUZvbGRlclNlbGVjdGlvbkNoYW5nZWQnLCB0aGlzLmRpc2FibGVB
bGwpOworICAgICAgfSk7CisgICAgfQorICB9CispOworCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9i
cm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxl
LWFwcC9hcHAvY29tcG9uZW50X3VpL21haWxfaXRlbXMuanMgYi9XZWJzaXRlcy9icm93c2VyYmVu
Y2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFwcC9hcHAv
Y29tcG9uZW50X3VpL21haWxfaXRlbXMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjliNWNmZDY2NWJhNjJkZDM0
OTFmNWJhOWEzNjk2YTlkZTFlZTAzZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dz
ZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBw
L2FwcC9jb21wb25lbnRfdWkvbWFpbF9pdGVtcy5qcwpAQCAtMCwwICsxLDYxIEBACisndXNlIHN0
cmljdCc7CisKK2RlZmluZSgKKworICBbCisgICAgJ2ZsaWdodC9saWIvY29tcG9uZW50JywKKyAg
ICAnLi93aXRoX3NlbGVjdCcKKyAgXSwKKworICBmdW5jdGlvbihkZWZpbmVDb21wb25lbnQsIHdp
dGhTZWxlY3QpIHsKKworICAgIHJldHVybiBkZWZpbmVDb21wb25lbnQobWFpbEl0ZW1zLCB3aXRo
U2VsZWN0KTsKKworICAgIGZ1bmN0aW9uIG1haWxJdGVtcygpIHsKKworICAgICAgdGhpcy5kZWZh
dWx0QXR0cnMoeworICAgICAgICBkZWxldGVGb2xkZXI6ICd0cmFzaCcsCisgICAgICAgIHNlbGVj
dGVkQ2xhc3M6ICdzZWxlY3RlZCcsCisgICAgICAgIGFsbG93TXVsdGlTZWxlY3Q6IHRydWUsCisg
ICAgICAgIHNlbGVjdGlvbkNoYW5nZWRFdmVudDogJ3VpTWFpbEl0ZW1TZWxlY3Rpb25DaGFuZ2Vk
JywKKyAgICAgICAgc2VsZWN0ZWRNYWlsSXRlbXM6IFtdLAorICAgICAgICBzZWxlY3RlZEZvbGRl
cnM6IFtdLAorICAgICAgICAvL3NlbGVjdG9ycworICAgICAgICBpdGVtU2VsZWN0b3I6ICd0ci5t
YWlsLWl0ZW0nLAorICAgICAgICBzZWxlY3RlZEl0ZW1TZWxlY3RvcjogJ3RyLm1haWwtaXRlbS5z
ZWxlY3RlZCcKKyAgICAgIH0pOworCisgICAgICB0aGlzLnJlbmRlckl0ZW1zID0gZnVuY3Rpb24o
ZXYsIGRhdGEpIHsKKyAgICAgICAgdGhpcy5zZWxlY3QoJ2l0ZW1Db250YWluZXJTZWxlY3Rvcicp
Lmh0bWwoZGF0YS5tYXJrdXApOworICAgICAgICAvL25ldyBpdGVtcywgc28gbm8gc2VsZWN0aW9u
cworICAgICAgICB0aGlzLnRyaWdnZXIoJ3VpTWFpbEl0ZW1TZWxlY3Rpb25DaGFuZ2VkJywge3Nl
bGVjdGVkSWRzOiBbXX0pOworICAgICAgfQorCisgICAgICB0aGlzLnVwZGF0ZU1haWxJdGVtU2Vs
ZWN0aW9ucyA9IGZ1bmN0aW9uKGV2LCBkYXRhKSB7CisgICAgICAgIHRoaXMuYXR0ci5zZWxlY3Rl
ZE1haWxJdGVtcyA9IGRhdGEuc2VsZWN0ZWRJZHM7CisgICAgICB9CisKKyAgICAgIHRoaXMudXBk
YXRlRm9sZGVyU2VsZWN0aW9ucyA9IGZ1bmN0aW9uKGV2LCBkYXRhKSB7CisgICAgICAgIHRoaXMu
YXR0ci5zZWxlY3RlZEZvbGRlcnMgPSBkYXRhLnNlbGVjdGVkSWRzOworICAgICAgfQorCisgICAg
ICB0aGlzLnJlcXVlc3REZWxldGlvbiA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLnRyaWdn
ZXIoJ3VpTW92ZUl0ZW1zUmVxdWVzdGVkJywgeworICAgICAgICAgIGl0ZW1JZHM6IHRoaXMuYXR0
ci5zZWxlY3RlZE1haWxJdGVtcywKKyAgICAgICAgICBmcm9tRm9sZGVyOiB0aGlzLmF0dHIuc2Vs
ZWN0ZWRGb2xkZXJzWzBdLAorICAgICAgICAgIHRvRm9sZGVyOiB0aGlzLmF0dHIuZGVsZXRlRm9s
ZGVyCisgICAgICAgIH0pOworICAgICAgfTsKKworICAgICAgdGhpcy5hZnRlcignaW5pdGlhbGl6
ZScsIGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAnZGF0YU1haWxJdGVt
c1NlcnZlZCcsIHRoaXMucmVuZGVySXRlbXMpOworICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAn
dWlEZWxldGVNYWlsJywgdGhpcy5yZXF1ZXN0RGVsZXRpb24pOworCisgICAgICAgIHRoaXMub24o
J3VpTWFpbEl0ZW1TZWxlY3Rpb25DaGFuZ2VkJywgdGhpcy51cGRhdGVNYWlsSXRlbVNlbGVjdGlv
bnMpOworICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAndWlGb2xkZXJTZWxlY3Rpb25DaGFuZ2Vk
JywgdGhpcy51cGRhdGVGb2xkZXJTZWxlY3Rpb25zKTsKKworICAgICAgICB0aGlzLnRyaWdnZXIo
J3VpTWFpbEl0ZW1zUmVxdWVzdGVkJyk7CisgICAgICB9KTsKKyAgICB9CisgIH0KKyk7CmRpZmYg
LS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNl
cy9mbGlnaHRqcy1leGFtcGxlLWFwcC9hcHAvY29tcG9uZW50X3VpL21vdmVfdG9fc2VsZWN0b3Iu
anMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9m
bGlnaHRqcy1leGFtcGxlLWFwcC9hcHAvY29tcG9uZW50X3VpL21vdmVfdG9fc2VsZWN0b3IuanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZTA3N2U2YWZmMzhiMzUyZjk4Y2NlY2MwODkxMzkwMTNmM2FlYzYzMwotLS0g
L2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEv
cmVzb3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2FwcC9jb21wb25lbnRfdWkvbW92ZV90b19z
ZWxlY3Rvci5qcwpAQCAtMCwwICsxLDc5IEBACisndXNlIHN0cmljdCc7CisKK2RlZmluZSgKKwor
ICBbCisgICAgJ2ZsaWdodC9saWIvY29tcG9uZW50JywKKyAgICAnLi93aXRoX3NlbGVjdCcKKyAg
XSwKKworICBmdW5jdGlvbihkZWZpbmVDb21wb25lbnQsIHdpdGhTZWxlY3QpIHsKKworICAgIHJl
dHVybiBkZWZpbmVDb21wb25lbnQobW92ZVRvU2VsZWN0b3IsIHdpdGhTZWxlY3QpOworCisgICAg
ZnVuY3Rpb24gbW92ZVRvU2VsZWN0b3IoKSB7CisKKyAgICAgIHRoaXMuZGVmYXVsdEF0dHJzKHsK
KyAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50OiAndWlNb3ZlVG9TZWxlY3Rpb25DaGFuZ2Vk
JywKKyAgICAgICAgc2VsZWN0ZWRNYWlsSXRlbXM6IFtdLAorICAgICAgICBzZWxlY3RlZEZvbGRl
cnM6IFtdLAorICAgICAgICAvL3NlbGVjdG9ycworICAgICAgICBpdGVtU2VsZWN0b3I6ICdsaS5t
b3ZlLXRvLWl0ZW0nLAorICAgICAgICBzZWxlY3RlZEl0ZW1TZWxlY3RvcjogJ2xpLm1vdmUtdG8t
aXRlbS5zZWxlY3RlZCcKKyAgICAgIH0pOworCisgICAgICB0aGlzLnJlcXVlc3RTZWxlY3Rvcldp
ZGdldCA9IGZ1bmN0aW9uKGV2LCBkYXRhKSB7CisgICAgICAgIHRoaXMudHJpZ2dlcigndWlBdmFp
bGFibGVGb2xkZXJzUmVxdWVzdGVkJywgeworICAgICAgICAgIGZvbGRlcjogdGhpcy5hdHRyLnNl
bGVjdGVkRm9sZGVyc1swXQorICAgICAgICB9KQorICAgICAgfTsKKworICAgICAgdGhpcy5sYXVu
Y2hTZWxlY3RvciA9IGZ1bmN0aW9uKGV2LCBkYXRhKSB7CisgICAgICAgIHZhciBjb250cm9sUG9z
aXRpb24gPSAkKHRoaXMuYXR0ci5tb3ZlQWN0aW9uU2VsZWN0b3IpLm9mZnNldCgpOworICAgICAg
ICB0aGlzLiRub2RlLmh0bWwoZGF0YS5tYXJrdXApLnNob3coKS5jc3MoeworICAgICAgICAgIGxl
ZnQ6IGNvbnRyb2xQb3NpdGlvbi5sZWZ0LAorICAgICAgICAgIHRvcDogY29udHJvbFBvc2l0aW9u
LnRvcCArICQodGhpcy5hdHRyLm1vdmVBY3Rpb25TZWxlY3Rvcikub3V0ZXJIZWlnaHQoKSwKKyAg
ICAgICAgICB3aWR0aDogJCh0aGlzLmF0dHIubW92ZUFjdGlvblNlbGVjdG9yKS5vdXRlcldpZHRo
KCkKKyAgICAgICAgfSk7CisgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KAorICAgICAgICAgIChm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgIHRoaXMub24oZG9jdW1lbnQsICdjbGljaycsIHRoaXMu
aGlkZVNlbGVjdG9yKQorICAgICAgICAgIH0pLmJpbmQodGhpcyksIDApOworICAgICAgfTsKKwor
ICAgICAgdGhpcy5oaWRlU2VsZWN0b3IgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5vZmYo
ZG9jdW1lbnQsICdjbGljaycsIHRoaXMuaGlkZVNlbGVjdG9yKTsKKyAgICAgICAgdGhpcy4kbm9k
ZS5oaWRlKCk7CisgICAgICB9CisKKyAgICAgIHRoaXMudXBkYXRlTWFpbEl0ZW1TZWxlY3Rpb25z
ID0gZnVuY3Rpb24oZXYsIGRhdGEpIHsKKyAgICAgICAgdGhpcy5hdHRyLnNlbGVjdGVkTWFpbEl0
ZW1zID0gZGF0YS5zZWxlY3RlZElkczsKKyAgICAgIH0KKworICAgICAgdGhpcy51cGRhdGVGb2xk
ZXJTZWxlY3Rpb25zID0gZnVuY3Rpb24oZXYsIGRhdGEpIHsKKyAgICAgICAgdGhpcy5hdHRyLnNl
bGVjdGVkRm9sZGVycyA9IGRhdGEuc2VsZWN0ZWRJZHM7CisgICAgICB9CisKKyAgICAgIHRoaXMu
cmVxdWVzdE1vdmVUbyA9IGZ1bmN0aW9uKGV2LCBkYXRhKSB7CisgICAgICAgIHRoaXMudHJpZ2dl
cigndWlNb3ZlSXRlbXNSZXF1ZXN0ZWQnLCB7CisgICAgICAgICAgaXRlbUlkczogdGhpcy5hdHRy
LnNlbGVjdGVkTWFpbEl0ZW1zLAorICAgICAgICAgIGZyb21Gb2xkZXI6IHRoaXMuYXR0ci5zZWxl
Y3RlZEZvbGRlcnNbMF0sCisgICAgICAgICAgdG9Gb2xkZXI6IGRhdGEuc2VsZWN0ZWRJZHNbMF0K
KyAgICAgICAgfSk7CisgICAgICAgIHRoaXMuJG5vZGUuaGlkZSgpOworICAgICAgfTsKKworICAg
ICAgdGhpcy5hZnRlcignaW5pdGlhbGl6ZScsIGZ1bmN0aW9uKCkgeworICAgICAgICAvL3Nob3cg
c2VsZWN0b3Igd2lkZ2V0CisgICAgICAgIHRoaXMub24oZG9jdW1lbnQsICd1aU1vdmVNYWlsJywg
dGhpcy5yZXF1ZXN0U2VsZWN0b3JXaWRnZXQpOworICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAn
ZGF0YU1vdmVUb0l0ZW1zU2VydmVkJywgdGhpcy5sYXVuY2hTZWxlY3Rvcik7CisgICAgICAgIC8v
bGlzdGVuIGZvciBvdGhlciBzZWxlY3Rpb25zCisgICAgICAgIHRoaXMub24oZG9jdW1lbnQsICd1
aU1haWxJdGVtU2VsZWN0aW9uQ2hhbmdlZCcsIHRoaXMudXBkYXRlTWFpbEl0ZW1TZWxlY3Rpb25z
KTsKKyAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ3VpRm9sZGVyU2VsZWN0aW9uQ2hhbmdlZCcs
IHRoaXMudXBkYXRlRm9sZGVyU2VsZWN0aW9ucyk7CisgICAgICAgIC8vbW92ZSBpdGVtcworICAg
ICAgICB0aGlzLm9uKCd1aU1vdmVUb1NlbGVjdGlvbkNoYW5nZWQnLCB0aGlzLnJlcXVlc3RNb3Zl
VG8pOworCisgICAgICB9KTsKKyAgICB9CisgIH0KKyk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9i
cm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxl
LWFwcC9hcHAvY29tcG9uZW50X3VpL3dpdGhfc2VsZWN0LmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJl
bmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvZmxpZ2h0anMtZXhhbXBsZS1hcHAvYXBw
L2NvbXBvbmVudF91aS93aXRoX3NlbGVjdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYTk5ZmVhYWRmNDM1NGJm
MWM2N2IxMTllYWY3YmIyNzcyZGVmMDA5Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJv
d3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvZmxpZ2h0anMtZXhhbXBsZS1h
cHAvYXBwL2NvbXBvbmVudF91aS93aXRoX3NlbGVjdC5qcwpAQCAtMCwwICsxLDY0IEBACisndXNl
IHN0cmljdCc7CisKK2RlZmluZSgKKworICBmdW5jdGlvbigpIHsKKworICAgIHJldHVybiB3aXRo
U2VsZWN0OworCisgICAgZnVuY3Rpb24gd2l0aFNlbGVjdCgpIHsKKworICAgICAgdGhpcy5kZWZh
dWx0QXR0cnMoeworICAgICAgICBzZWxlY3RlZElkczogW10KKyAgICAgIH0pOworCisgICAgICB0
aGlzLmluaXRpYWxpemVTZWxlY3Rpb25zID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuc2Vs
ZWN0KCdzZWxlY3RlZEl0ZW1TZWxlY3RvcicpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uKGVs
KSB7CisgICAgICAgICAgdGhpcy5hdHRyLnNlbGVjdGVkSWRzLnB1c2goZWwuZ2V0QXR0cmlidXRl
KCdpZCcpKTsKKyAgICAgICAgfSwgdGhpcyk7CisgICAgICB9OworCisgICAgICB0aGlzLmdldFNl
bGVjdGVkSWRzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLmF0dHIuc2VsZWN0
ZWRJZHM7CisgICAgICB9OworCisgICAgICB0aGlzLnRvZ2dsZUl0ZW1TZWxlY3QgPSBmdW5jdGlv
bihldiwgZGF0YSkgeworICAgICAgICB2YXIgJGl0ZW0gPSAkKGRhdGEuZWwpLCBhcHBlbmQ7CisK
KyAgICAgICAgaWYgKCRpdGVtLmhhc0NsYXNzKHRoaXMuYXR0ci5zZWxlY3RlZENsYXNzKSkgewor
ICAgICAgICAgIHRoaXMudW5zZWxlY3RJdGVtKCRpdGVtKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICBhcHBlbmQgPSB0aGlzLmF0dHIuYWxsb3dNdWx0aVNlbGVjdCAmJiAoZXYubWV0YUtl
eSB8fCBldi5jdHJsS2V5IHx8IGV2LnNoaWZ0S2V5KTsKKyAgICAgICAgICB0aGlzLnNlbGVjdEl0
ZW0oJGl0ZW0sIGFwcGVuZCk7CisgICAgICAgIH0KKyAgICAgIH07CisKKyAgICAgIHRoaXMuc2Vs
ZWN0SXRlbSA9IGZ1bmN0aW9uKCRpdGVtLCBhcHBlbmQpIHsKKyAgICAgICAgaWYgKCFhcHBlbmQp
IHsKKyAgICAgICAgICB0aGlzLnNlbGVjdCgnc2VsZWN0ZWRJdGVtU2VsZWN0b3InKS5yZW1vdmVD
bGFzcyh0aGlzLmF0dHIuc2VsZWN0ZWRDbGFzcyk7CisgICAgICAgICAgdGhpcy5hdHRyLnNlbGVj
dGVkSWRzID0gW107CisgICAgICAgIH0KKyAgICAgICAgJGl0ZW0uYWRkQ2xhc3ModGhpcy5hdHRy
LnNlbGVjdGVkQ2xhc3MpOworCisgICAgICAgIHRoaXMuYXR0ci5zZWxlY3RlZElkcy5wdXNoKCRp
dGVtLmF0dHIoJ2lkJykpOworICAgICAgICB0aGlzLnRyaWdnZXIodGhpcy5hdHRyLnNlbGVjdGlv
bkNoYW5nZWRFdmVudCwge3NlbGVjdGVkSWRzOiB0aGlzLmF0dHIuc2VsZWN0ZWRJZHN9KTsKKyAg
ICAgIH07CisKKyAgICAgIHRoaXMudW5zZWxlY3RJdGVtID0gZnVuY3Rpb24oJGl0ZW0pIHsKKyAg
ICAgICAgJGl0ZW0ucmVtb3ZlQ2xhc3ModGhpcy5hdHRyLnNlbGVjdGVkQ2xhc3MpOworCisgICAg
ICAgIHZhciB0aGlzSWRJbmRleCA9IHRoaXMuYXR0ci5zZWxlY3RlZElkcy5pbmRleE9mKCRpdGVt
LmF0dHIoJ2lkJykpOworICAgICAgICB0aGlzLmF0dHIuc2VsZWN0ZWRJZHMuc3BsaWNlKHRoaXNJ
ZEluZGV4LCAxKTsKKyAgICAgICAgdGhpcy50cmlnZ2VyKHRoaXMuYXR0ci5zZWxlY3Rpb25DaGFu
Z2VkRXZlbnQsIHtzZWxlY3RlZElkczogdGhpcy5hdHRyLnNlbGVjdGVkSWRzfSk7CisgICAgICB9
OworCisgICAgICB0aGlzLmFmdGVyKCJpbml0aWFsaXplIiwgZnVuY3Rpb24oKSB7CisgICAgICAg
IHRoaXMub24oJ2NsaWNrJywgeworICAgICAgICAgICdpdGVtU2VsZWN0b3InOiB0aGlzLnRvZ2ds
ZUl0ZW1TZWxlY3QKKyAgICAgICAgfSk7CisKKyAgICAgICAgdGhpcy5pbml0aWFsaXplU2VsZWN0
aW9ucygpOworICAgICAgfSk7CisgICAgfQorICB9CispOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMv
YnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvZmxpZ2h0anMtZXhhbXBs
ZS1hcHAvYXBwL2Nzcy9jdXN0b20uY3NzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVl
ZG9tZXRlcjIuMS9yZXNvdXJjZXMvZmxpZ2h0anMtZXhhbXBsZS1hcHAvYXBwL2Nzcy9jdXN0b20u
Y3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjY5NzE5N2EwNzU3YWExZjdhNjgxYjI4NDEwMmQyMGQ2NGUyNTJlYWMK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVy
Mi4xL3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFwcC9hcHAvY3NzL2N1c3RvbS5jc3MKQEAg
LTAsMCArMSwxMDIgQEAKKy5tb2RhbC5mYWRlLmluIHsKKyAgbGVmdDogNSU7CisgIHRvcDogMTAl
OworICBtYXJnaW46IGF1dG8gYXV0byBhdXRvIGF1dG87Cit9CisKK3RhYmxlIHsKKyAgLXdlYmtp
dC10b3VjaC1jYWxsb3V0OiBub25lOworICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOworICAt
bW96LXVzZXItc2VsZWN0OiBub25lOworICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CisgIHVzZXIt
c2VsZWN0OiBub25lOworfQorCit0ZC5tYWlsQ29udGFjdCwKK3NwYW4ubWFpbFN1YmplY3QsCitz
cGFuLm1haWxNZXNzYWdlIHsKKyAgZm9udC1zaXplOiAxNXB4OworfQorCit0ZC5tYWlsQ29udGFj
dCwKK3NwYW4ubWFpbFN1YmplY3QgeworICBmb250LXdlaWdodDogYm9sZDsKK30KKwordHIubWFp
bC1pdGVtLnNlbGVjdGVkIHRkLAorbGkuZm9sZGVyLWl0ZW0uc2VsZWN0ZWQsCitsaS5tb3ZlLXRv
LWl0ZW0uc2VsZWN0ZWQgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjRDlFREY3OworfQorCit0ci5t
YWlsLWl0ZW0uc2VsZWN0ZWQ6aG92ZXIgdGQsCitsaS5mb2xkZXItaXRlbS5zZWxlY3RlZDpob3Zl
ciwKK2xpLm1vdmUtdG8taXRlbS5zZWxlY3RlZDpob3ZlciB7CisgIGJhY2tncm91bmQtY29sb3I6
ICNDMUUxRkY7Cit9CisKK2xpLmZvbGRlci1pdGVtOmhvdmVyLAorbGkubW92ZS10by1pdGVtOmhv
dmVyIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI0VERURFRDsKK30KKworbGkuZm9sZGVyLWl0ZW0s
CitsaS5tb3ZlLXRvLWl0ZW0geworICBwYWRkaW5nOiAzcHggMDsKKyAgbWFyZ2luLWxlZnQ6IC0x
NXB4OworICBmb250LXNpemU6IDE1cHg7CisgIGN1cnNvcjpwb2ludGVyOworfQorCitsaS5tb3Zl
LXRvLWl0ZW0geworICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgIG1hcmdpbi1yaWdodDogLTE1cHg7
Cit9CisKKyNuZXdfbWFpbCB7CisgIHdpZHRoOiAxMDBweDsKK30KKworZGl2LmNvbXBvc2UtYm94
IHsKKyAgcG9zaXRpb246IGFic29sdXRlOworICB6LWluZGV4OiAxMDsKKyAgYmFja2dyb3VuZC1j
b2xvcjogI0ZGRkZGRjsKKyAgd2lkdGg6IDM1MHB4OworICBib3JkZXI6IDFweCBzb2xpZDsKK30K
KworZGl2LmNvbXBvc2UtYm9keSB7CisgIHBhZGRpbmc6IDA7Cit9CisKK2Rpdi5jb21wb3NlLWhl
YWRlciB7CisgIGZvbnQtc2l6ZTogMTVweDsKK30KKworI3JlY2lwaWVudF9zZWxlY3QgeworICB3
aWR0aDogOTAlOworICBtYXJnaW4tYm90dG9tOiAwOworICBmb250LXdlaWdodDogYm9sZDsKK30K
KworZGl2LmhpbnQgeworICBib3JkZXI6IDFweCBzb2xpZCAjRUFFQUVBOworICBjb2xvcjojQ0FD
QUNBOworfQorCisjY29tcG9zZV9tZXNzYWdlIHsKKyAgaGVpZ2h0OiAxODBweDsKK30KKworI2Nv
bXBvc2Vfc3ViamVjdCwKKyNjb21wb3NlX21lc3NhZ2UgeworICBmb250LXNpemU6IDE1cHg7Cisg
IHBhZGRpbmc6IDE1cHg7Cit9CisKKyNtb3ZlX3RvX3NlbGVjdG9yIHsKKyAgcG9zaXRpb246IGFi
c29sdXRlOworICB6LWluZGV4OiAxMDsKKyAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjsKKyAg
Ym9yZGVyOiAxcHggc29saWQ7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0t
Z2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMv
ZmxpZ2h0anMtZXhhbXBsZS1hcHAvYXBwL2RhdGEuanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gu
b3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFwcC9hcHAvZGF0
YS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4zYTU2N2MyMjY0NTU1NDc1YmM2OWY0NzRmOTQ1NThlZDk4NWQwZDUw
Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRl
cjIuMS9yZXNvdXJjZXMvZmxpZ2h0anMtZXhhbXBsZS1hcHAvYXBwL2RhdGEuanMKQEAgLTAsMCAr
MSwxMTAgQEAKKyd1c2Ugc3RyaWN0JzsKKworZGVmaW5lKAorICBmdW5jdGlvbigpIHsKKyAgICBy
ZXR1cm4geworICAgICAgZm9sZGVyczogWyJpbmJveCIsICJsYXRlciIsICJzZW50IiwgInRyYXNo
Il0sCisgICAgICBjb250YWN0czogWworICAgICAgICB7CisgICAgICAgICAgImlkIjogImNvbnRh
Y3RfMzQyIiwKKyAgICAgICAgICAiZmlyc3ROYW1lIjogIk1pY2hhZWwiLAorICAgICAgICAgICJs
YXN0TmFtZSI6ICJTbWl0aCIsCisgICAgICAgICAgImVtYWlsIjogIm1zQHByb3h5d2ViLmNvbSIK
KyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICJpZCI6ICJjb250YWN0XzM3NyIsCisg
ICAgICAgICAgImZpcnN0TmFtZSI6ICJNYXJ5IiwKKyAgICAgICAgICAibGFzdE5hbWUiOiAiSm9u
ZXMiLAorICAgICAgICAgICJlbWFpbCI6ICJtYXJ5QGpvbmVzLm5ldCIKKyAgICAgICAgfSwKKyAg
ICAgICAgeworICAgICAgICAgICJpZCI6ICJjb250YWN0XzM5OCIsCisgICAgICAgICAgImZpcnN0
TmFtZSI6ICJCaWxseSIsCisgICAgICAgICAgImxhc3ROYW1lIjogIklkaW90IiwKKyAgICAgICAg
ICAiZW1haWwiOiAid2lsbGlhbV9pZGlvdEBnbWFpbC5jb20iCisgICAgICAgIH0KKyAgICAgIF0s
CisgICAgICBtYWlsOiBbCisgICAgICAgIHsKKyAgICAgICAgICAiaWQiOiAibWFpbF8yMTM5IiwK
KyAgICAgICAgICAiY29udGFjdF9pZCI6ICJjb250YWN0XzM0MiIsCisgICAgICAgICAgImZvbGRl
cnMiOiBbImluYm94Il0sCisgICAgICAgICAgInRpbWUiOiAxMzM0ODkxOTc2MTA0LAorICAgICAg
ICAgICJzdWJqZWN0IjogIkNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdCIsCisgICAgICAgICAg
Im1lc3NhZ2UiOiAiVmVzdGlidWx1bSB2ZXN0aWJ1bHVtIHZhcml1cyBkaWFtIGluIGlhY3VsaXMu
IFByYWVzZW50IHVsdHJpY2VzIGR1aSB2aXRhZSBuaWJoIG1hbGVzdWFkYSBub24gaWFjdWxpcyBh
bnRlIHZ1bHB1dGF0ZS4gU3VzcGVuZGlzc2UgZmV1Z2lhdCB1bHRyaWNpZXMgZWdlc3Rhcy4gQWVu
ZWFuIGEgb2RpbyBsaWJlcm8uIFF1aXNxdWUgbW9sbGlzIGxlbyBldCBlc3QgZXVpc21vZCBzaXQg
YW1ldCBkaWduaXNzaW0gc2FwaWVuIHZlbmVuYXRpcy4gTW9yYmkgaW50ZXJkdW0gYWRpcGlzY2lu
ZyBtYXNzYSIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICJpZCI6ICJtYWlsXzIx
NDMiLAorICAgICAgICAgICJjb250YWN0X2lkIjogImNvbnRhY3RfMzc3IiwKKyAgICAgICAgICAi
Zm9sZGVycyI6IFsiaW5ib3giLCAibGF0ZXIiXSwKKyAgICAgICAgICAiaW1wb3J0YW50IjogInRy
dWUiLAorICAgICAgICAgICJ0aW1lIjogMTMzNDg4NDk3NjEwNCwKKyAgICAgICAgICAic3ViamVj
dCI6ICJOZXF1ZSBwb3JybyBxdWlzcXVhbSB2ZWxpdCEhIiwKKyAgICAgICAgICAibWVzc2FnZSI6
ICJDdXJhYml0dXIgc29sbGljaXR1ZGluIG1pIGVnZXQgc2FwaWVuIHBvc3VlcmUgc2VtcGVyLiBG
dXNjZSBhdCBuZXF1ZSBldCBsYWN1cyBsdWN0dXMgdnVscHV0YXRlIHZlaGljdWxhIGFjIGVuaW0i
CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAiaWQiOiAibWFpbF8yMTU0IiwKKyAg
ICAgICAgICAiY29udGFjdF9pZCI6ICJjb250YWN0XzM5OCIsCisgICAgICAgICAgImZvbGRlcnMi
OiBbImluYm94Il0sCisgICAgICAgICAgImltcG9ydGFudCI6ICJ0cnVlIiwKKyAgICAgICAgICAi
dW5yZWFkIjogInRydWUiLAorICAgICAgICAgICJ0aW1lIjogMTMzNDg3NDk3NjE5OSwKKyAgICAg
ICAgICAic3ViamVjdCI6ICJQcm9pbiBlZ2VzdGFzIGFsaXF1YW0gOikiLAorICAgICAgICAgICJt
ZXNzYWdlIjogIkFlbmVhbiBuZWMgZXJhdCBpZCBpcHN1bSBmYXVjaWJ1cyB0cmlzdGlxdWUuIE5h
bSBibGFuZGl0IGVzdCBsYWNpbmlhIHR1cnBpcyBjb25zZWN0ZXR1ciBlbGVtZW50dW0uIE51bGxh
IGluIHJpc3VzIHV0IHNhcGllbiBkaWduaXNzaW0gZmV1Z2lhdC4gUHJvaW4gdWx0cmljZXMgc29k
YWxlcyBpbXBlcmRpZXQuIFZlc3RpYnVsdW0gdmVoaWN1bGEgYmxhbmRpdCB0aW5jaWR1bnQuIFZp
dmFtdXMgcG9zdWVyZSByaG9uY3VzIG9yY2ksIHBvcnRhIGNvbW1vZG8gbWF1cmlzIGFsaXF1YW0g
bmVjIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgImlkIjogIm1haWxfMjE3NiIs
CisgICAgICAgICAgImNvbnRhY3RfaWQiOiAiY29udGFjdF8zNzciLAorICAgICAgICAgICJmb2xk
ZXJzIjogWyJpbmJveCJdLAorICAgICAgICAgICJ0aW1lIjogMTMzNDg4NDk3NjEwNCwKKyAgICAg
ICAgICAic3ViamVjdCI6ICJTZWQgdXQgcGVyc3BpY2lhdGlzIHVuZGUgb21uaXM/IiwKKyAgICAg
ICAgICAibWVzc2FnZSI6ICJsYXVkYW50aXVtLCB0b3RhbSByZW0gYXBlcmlhbSwgZWFxdWUgaXBz
YSBxdWFlIGFiIGlsbG8gaW52ZW50b3JlIHZlcml0YXRpcyBldCBxdWFzaSBhcmNoaXRlY3RvIGJl
YXRhZSB2aXRhZSBkaWN0YSBzdW50IGV4cGxpY2Fiby4gTmVtbyBlbmltIGlwc2FtIHZvbHVwdGF0
ZW0gcXVpYSB2b2x1cHRhcyBzaXQgYXNwZXJuYXR1ciBhdXQgb2RpdCBhdXQgZnVnaXQsIHNlZCBx
dWlhIGNvbnNlcXV1bnR1ciBtYWduaSBkb2xvcmVzIGVvcyBxdWkgcmF0aW9uZSB2b2x1cHRhdGVt
IHNlcXVpIG5lc2NpdW50LiBOZXF1ZSBwb3JybyBxdWlzcXVhbSBlc3QsIHF1aSBkb2xvcmVtIGlw
c3VtIHF1aWEgZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyLCBhZGlwaXNjaSB2ZWxpdCwgc2Vk
IHF1aWEgbm9uIG51bXF1YW0gZWl1cyBtb2RpIHRlbXBvcmEgaW5jaWR1bnQgdXQgbGFib3JlIGV0
IGRvbG9yZSBtYWduYW0gYWxpcXVhbSBxdWFlcmF0IHZvbHVwdGF0ZW0uIgorICAgICAgICB9LAor
ICAgICAgICB7CisgICAgICAgICAgImlkIjogIm1haWxfMjE5MSIsCisgICAgICAgICAgImNvbnRh
Y3RfaWQiOiAiY29udGFjdF8zOTgiLAorICAgICAgICAgICJmb2xkZXJzIjogWyJpbmJveCJdLAor
ICAgICAgICAgICJ1bnJlYWQiOiAidHJ1ZSIsCisgICAgICAgICAgInRpbWUiOiAxMzM0ODc0OTc2
MTk5LAorICAgICAgICAgICJzdWJqZWN0IjogIkF0IHZlcm8gZW9zIGV0IGFjY3VzYW11cyEiLAor
ICAgICAgICAgICJtZXNzYWdlIjogIk5hbSBsaWJlcm8gdGVtcG9yZSwgY3VtIHNvbHV0YSBub2Jp
cyBlc3QgZWxpZ2VuZGkgb3B0aW8gY3VtcXVlIG5paGlsIGltcGVkaXQgcXVvIG1pbnVzIGlkIHF1
b2QgbWF4aW1lIHBsYWNlYXQgZmFjZXJlIHBvc3NpbXVzLCBvbW5pcyB2b2x1cHRhcyBhc3N1bWVu
ZGEgZXN0LCBvbW5pcyBkb2xvciByZXBlbGxlbmR1cy4gVGVtcG9yaWJ1cyBhdXRlbSBxdWlidXNk
YW0gZXQgYXV0IG9mZmljaWlzIGRlYml0aXMgYXV0IHJlcnVtIG5lY2Vzc2l0YXRpYnVzIHNhZXBl
IGV2ZW5pZXQgdXQgZXQgdm9sdXB0YXRlcyByZXB1ZGlhbmRhZSBzaW50IGV0IG1vbGVzdGlhZSBu
b24gcmVjdXNhbmRhZS4gSXRhcXVlIGVhcnVtIHJlcnVtIGhpYyB0ZW5ldHVyIGEgc2FwaWVudGUg
ZGVsZWN0dXMsIHV0IGF1dCByZWljaWVuZGlzIHZvbHVwdGF0aWJ1cyBtYWlvcmVzIGFsaWFzIGNv
bnNlcXVhdHVyIGF1dCBwZXJmZXJlbmRpcyBkb2xvcmlidXMgYXNwZXJpb3JlcyByZXBlbGxhdCIK
KyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICJpZCI6ICJtYWlsXzIyMDMiLAorICAg
ICAgICAgICJjb250YWN0X2lkIjogImNvbnRhY3RfMzc3IiwKKyAgICAgICAgICAiZm9sZGVycyI6
IFsibGF0ZXIiXSwKKyAgICAgICAgICAiaW1wb3J0YW50IjogInRydWUiLAorICAgICAgICAgICJ0
aW1lIjogMTMzNDg3NDU3NjE5OSwKKyAgICAgICAgICAic3ViamVjdCI6ICJNaSBuZXR1cyBjb252
YWxsaXMiLAorICAgICAgICAgICJtZXNzYWdlIjogIkVnZXN0YXMgbW9yYmkgYXQuIEN1cmFiaXR1
ciBhbGlxdWV0IGV0IGNvbW1vZG8gbm9udW1teSwgYWxpcXVhbSBxdWlzIGFyY3UsIHNlZCBwZWxs
ZW50ZXNxdWUgdml0YWUgbW9sZXN0aWUgbWF0dGlzIG1hZ25hLCBpbiBlZ2V0LCByaXN1cyBudWxs
YSB2aXZhbXVzIHZ1bHB1dGF0ZSIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICJp
ZCI6ICJtYWlsXzIyMTIiLAorICAgICAgICAgICJjb250YWN0X2lkIjogImNvbnRhY3RfMzk4IiwK
KyAgICAgICAgICAiZm9sZGVycyI6IFsic2VudCJdLAorICAgICAgICAgICJ0aW1lIjogMTMzNDg3
NDU3OTg2NywKKyAgICAgICAgICAic3ViamVjdCI6ICJGdXNjZSB0cmlzdGlxdWUgcHJldGl1bSBl
cm9zIGEgZ3JhdmlkYSIsCisgICAgICAgICAgIm1lc3NhZ2UiOiAiUHJvaW4gbWFsZXN1YWRhIgor
ICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgImlkIjogIm1haWxfMjAyMSIsCisgICAg
ICAgICAgImNvbnRhY3RfaWQiOiAiY29udGFjdF8zNDIiLAorICAgICAgICAgICJmb2xkZXJzIjog
WyJ0cmFzaCJdLAorICAgICAgICAgICJ0aW1lIjogMTEzNDg3NDU3OTgyNCwKKyAgICAgICAgICAi
c3ViamVjdCI6ICJQaGFzZWxsdXMgdml0YWUgaW50ZXJkdW0gbnVsbGEuIiwKKyAgICAgICAgICAi
bWVzc2FnZSI6ICJQZWxsZW50ZXNxdWUgcXVhbSBlcm9zLCBtb2xsaXMgcXVpcyB2dWxwdXRhdGUg
ZWdldCwgcGVsbGVudGVzcXVlIG5lYyBpcHN1bS4gQ3JhcyBkaWduaXNzaW0gZnJpbmdpbGxhIGxp
Z3VsYSwgYWMgdWxsYW1jb3JwZXIgZHVpIGNvbnZhbGxpcyBibGFuZGl0LiBQZWxsZW50ZXNxdWUg
aGFiaXRhbnQgbW9yYmkgdHJpc3RpcXVlIHNlbmVjdHVzIGV0IG5ldHVzIGV0IG1hbGVzdWFkYSBm
YW1lcyBhYyB0dXJwaXMgZWdlc3Rhcy4gRXRpYW0gaWQgbnVuYyBhYyBvcmNpIGhlbmRyZXJpdCBm
YXVjaWJ1cyB2ZWwgaW4gYW50ZS4gTWF1cmlzIG5lYyBlc3QgdHVycGlzLCB1dCBmcmluZ2lsbGEg
bWkuIFN1c3BlbmRpc3NlIHZlbCB0b3J0b3IgYXQgbnVsbGEgZmFjaWxpc2lzIHZlbmVuYXRpcyBp
biBzaXQgYW1ldCBsaWd1bGEuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgImlk
IjogIm1haWxfMTk3NiIsCisgICAgICAgICAgImNvbnRhY3RfaWQiOiAiY29udGFjdF8zNzciLAor
ICAgICAgICAgICJmb2xkZXJzIjogWyJ0cmFzaCJdLAorICAgICAgICAgICJ0aW1lIjogMTAzNDg3
NDU3OTgxMywKKyAgICAgICAgICAic3ViamVjdCI6ICJGdXNjZSB0cmlzdGlxdWUgcHJldGl1bSA6
KCIsCisgICAgICAgICAgIm1lc3NhZ2UiOiAiYWxpcXVhbSBxdWlzIGFyY3UuIgorICAgICAgICB9
CisgICAgICBdCisgICAgfTsKKyAgICByZXR1cm4gZGF0YTsKKyAgfQorKTsKKwpkaWZmIC0tZ2l0
IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvZmxp
Z2h0anMtZXhhbXBsZS1hcHAvYXBwL3RlbXBsYXRlcy5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5j
aC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2FwcC90
ZW1wbGF0ZXMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTk2MjViZDgzMDQ5Yjc4NzMyN2QwZTc2ZGMwNWZjYjQ0
YzkyM2E2YwotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3Bl
ZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2FwcC90ZW1wbGF0ZXMu
anMKQEAgLTAsMCArMSw2MiBAQAorJ3VzZSBzdHJpY3QnOworCitkZWZpbmUoCisgIGZ1bmN0aW9u
KCkgeworICAgIHZhciBtYWlsSXRlbSA9CisgICAgICAne3sjbWFpbEl0ZW1zfX1cCisgICAgICAg
IDx0ciBpZD0ie3tpZH19IiBjbGFzcz0ibWFpbC1pdGVtIj5cCisgICAgICAgIHt7I2ltcG9ydGFu
dH19XAorICAgICAgICAgIDx0ZCBjbGFzcz0ic3BhbjEiPjxzcGFuIGNsYXNzPSJsYWJlbCBsYWJl
bC1pbXBvcnRhbnQiPkltcG9ydGFudDwvc3Bhbj48L3RkPlwKKyAgICAgICAge3svaW1wb3J0YW50
fX1cCisgICAgICAgIHt7XmltcG9ydGFudH19XAorICAgICAgICAgIDx0ZCBjbGFzcz0ic3BhbjEi
PjxzcGFuPiZuYnNwOzwvc3Bhbj48L3RkPlwKKyAgICAgICAge3svaW1wb3J0YW50fX1cCisgICAg
ICAgICAgPHRkIGNsYXNzPSJzcGFuMiBtYWlsQ29udGFjdCI+e3tuYW1lfX08L3RkPlwKKyAgICAg
ICAgICA8dGQgY2xhc3M9InNwYW44Ij5cCisgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWFpbFN1
YmplY3QiPlwKKyAgICAgICAgICAgICAge3tmb3JtYXR0ZWRTdWJqZWN0fX1cCisgICAgICAgICAg
ICA8L3NwYW4+XAorICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im1haWxNZXNzYWdlIj5cCisgICAg
ICAgICAgICAgIC0gPGEgaHJlZj0iIyI+e3tmb3JtYXR0ZWRNZXNzYWdlfX08L2E+XAorICAgICAg
ICAgICAgPC9zcGFuPlwKKyAgICAgICAgICA8L3RkPlwKKyAgICAgICAgPC90cj5cCisgICAgICB7
ey9tYWlsSXRlbXN9fSc7CisKKyAgICB2YXIgY29tcG9zZUJveCA9CisgICAgICAnPGRpdiBpZD0i
Y29tcG9zZV90byIgY2xhc3M9Im1vZGFsLWhlYWRlciBjb21wb3NlLWhlYWRlciI+XAorICAgICAg
ICBUbzogPHNlbGVjdCBpZD0icmVjaXBpZW50X3NlbGVjdCI+XAorICAgICAgICAgIHt7XnJlcGx5
fX08b3B0aW9uIGlkPSJyZWNpcGllbnRfaGludCIgY2xhc3M9ImhpbnQiIHN0eWxlPSJjb2xvcjoj
Q0FDQUNBIiA+W1NlbGVjdCBSZWNpcGllbnRdPC9vcHRpb24+e3svcmVwbHl9fVwKKyAgICAgICAg
ICB7eyNjb250YWN0c319XAorICAgICAgICAgICA8b3B0aW9uIGlkPSJ7e2lkfX0ie3sjcmVjaXBp
ZW50fX0gc2VsZWN0ZWR7ey9yZWNpcGllbnR9fT57e2ZpcnN0TmFtZX19IHt7bGFzdE5hbWV9fTwv
b3B0aW9uPlwKKyAgICAgICAgICB7ey9jb250YWN0c319XAorICAgICAgICA8L3NlbGVjdD5cCisg
ICAgICA8L2Rpdj5cCisgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5IGNvbXBvc2UtYm9keSI+
XAorICAgICAgICA8ZGl2IGlkPSJjb21wb3NlX3N1YmplY3QiIGNsYXNzPSJ7eyNuZXdNYWlsfX1o
aW50e3svbmV3TWFpbH19e3tebmV3TWFpbH19Y29tcG9zZS1oZWFkZXJ7ey9uZXdNYWlsfX0iIGNv
bnRlbnRFZGl0YWJsZT0idHJ1ZSI+XAorICAgICAgICAgIHt7c3ViamVjdH19XAorICAgICAgICA8
L2Rpdj5cCisgICAgICAgIDxkaXYgaWQ9ImNvbXBvc2VfbWVzc2FnZSIgY2xhc3M9ImhpbnQiIGNv
bnRlbnRFZGl0YWJsZT0idHJ1ZSI+XAorICAgICAgICAgIHt7bWVzc2FnZX19XAorICAgICAgICA8
L2Rpdj5cCisgICAgICA8L2Rpdj5cCisgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPlwK
KyAgICAgICAgPGJ1dHRvbiBpZD0ic2VuZF9jb21wb3NlZCIge3tecmVwbHl9fWRpc2FibGVkPSJk
aXNhYmxlZCJ7ey9yZXBseX19IGNsYXNzPSJidG4gYnRuLXByaW1hcnkiPlNlbmQ8L2J1dHRvbj5c
CisgICAgICAgIDxidXR0b24gaWQ9ImNhbmNlbF9jb21wb3NlZCIgY2xhc3M9ImJ0biI+Q2FuY2Vs
PC9idXR0b24+XAorICAgICAgPC9kaXY+JzsKKworICAgIHZhciBtb3ZlVG9TZWxlY3RvciA9Cisg
ICAgICAnPHVsIGNsYXNzPSJuYXYgbmF2LWxpc3QiPlwKKyAgICAgIHt7I21vdmVUb0l0ZW1zfX1c
CisgICAgICAgIDxsaSBpZD0ie3sufX0iIGNsYXNzPSJtb3ZlLXRvLWl0ZW0iPnt7Ln19PC9saT5c
CisgICAgICB7ey9tb3ZlVG9JdGVtc319XAorICAgICAgPC91bD4nOworCisgICAgcmV0dXJuIHsK
KyAgICAgIG1haWxJdGVtOiBtYWlsSXRlbSwKKyAgICAgIGNvbXBvc2VCb3g6IGNvbXBvc2VCb3gs
CisgICAgICBtb3ZlVG9TZWxlY3RvcjogbW92ZVRvU2VsZWN0b3IKKyAgICB9CisgIH0KKworKTsK
ZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVz
b3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvYm9vdHN0cmFwL2Nzcy9ib290
c3RyYXAtcmVzcG9uc2l2ZS5jc3MgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21l
dGVyMi4xL3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2Jvb3RzdHJh
cC9jc3MvYm9vdHN0cmFwLXJlc3BvbnNpdmUuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEzMzUyZDc3NGNlODI0
ZWRkODBlZjZjYzY0YTM5ZTAxNzI2M2UyMWQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9i
cm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxl
LWFwcC9jb21wb25lbnRzL2Jvb3RzdHJhcC9jc3MvYm9vdHN0cmFwLXJlc3BvbnNpdmUuY3NzCkBA
IC0wLDAgKzEsMTA5MiBAQAorLyohCisgKiBCb290c3RyYXAgUmVzcG9uc2l2ZSB2Mi4yLjIKKyAq
CisgKiBDb3B5cmlnaHQgMjAxMiBUd2l0dGVyLCBJbmMKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBB
cGFjaGUgTGljZW5zZSB2Mi4wCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElD
RU5TRS0yLjAKKyAqCisgKiBEZXNpZ25lZCBhbmQgYnVpbHQgd2l0aCBhbGwgdGhlIGxvdmUgaW4g
dGhlIHdvcmxkIEB0d2l0dGVyIGJ5IEBtZG8gYW5kIEBmYXQuCisgKi8KKworQC1tcy12aWV3cG9y
dCB7CisgIHdpZHRoOiBkZXZpY2Utd2lkdGg7Cit9CisKKy5jbGVhcmZpeCB7CisgICp6b29tOiAx
OworfQorCisuY2xlYXJmaXg6YmVmb3JlLAorLmNsZWFyZml4OmFmdGVyIHsKKyAgZGlzcGxheTog
dGFibGU7CisgIGxpbmUtaGVpZ2h0OiAwOworICBjb250ZW50OiAiIjsKK30KKworLmNsZWFyZml4
OmFmdGVyIHsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy5oaWRlLXRleHQgeworICBmb250OiAwLzAg
YTsKKyAgY29sb3I6IHRyYW5zcGFyZW50OworICB0ZXh0LXNoYWRvdzogbm9uZTsKKyAgYmFja2dy
b3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGJvcmRlcjogMDsKK30KKworLmlucHV0LWJsb2Nr
LWxldmVsIHsKKyAgZGlzcGxheTogYmxvY2s7CisgIHdpZHRoOiAxMDAlOworICBtaW4taGVpZ2h0
OiAzMHB4OworICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CisgICAgIC1tb3otYm94
LXNpemluZzogYm9yZGVyLWJveDsKKyAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94Owor
fQorCisuaGlkZGVuIHsKKyAgZGlzcGxheTogbm9uZTsKKyAgdmlzaWJpbGl0eTogaGlkZGVuOwor
fQorCisudmlzaWJsZS1waG9uZSB7CisgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKK30KKwor
LnZpc2libGUtdGFibGV0IHsKKyAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OworfQorCisuaGlk
ZGVuLWRlc2t0b3AgeworICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Cit9CisKKy52aXNpYmxl
LWRlc2t0b3AgeworICBkaXNwbGF5OiBpbmhlcml0ICFpbXBvcnRhbnQ7Cit9CisKK0BtZWRpYSAo
bWluLXdpZHRoOiA3NjhweCkgYW5kIChtYXgtd2lkdGg6IDk3OXB4KSB7CisgIC5oaWRkZW4tZGVz
a3RvcCB7CisgICAgZGlzcGxheTogaW5oZXJpdCAhaW1wb3J0YW50OworICB9CisgIC52aXNpYmxl
LWRlc2t0b3AgeworICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudCA7CisgIH0KKyAgLnZpc2li
bGUtdGFibGV0IHsKKyAgICBkaXNwbGF5OiBpbmhlcml0ICFpbXBvcnRhbnQ7CisgIH0KKyAgLmhp
ZGRlbi10YWJsZXQgeworICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKKyAgfQorfQorCitA
bWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHsKKyAgLmhpZGRlbi1kZXNrdG9wIHsKKyAgICBkaXNw
bGF5OiBpbmhlcml0ICFpbXBvcnRhbnQ7CisgIH0KKyAgLnZpc2libGUtZGVza3RvcCB7CisgICAg
ZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OworICB9CisgIC52aXNpYmxlLXBob25lIHsKKyAgICBk
aXNwbGF5OiBpbmhlcml0ICFpbXBvcnRhbnQ7CisgIH0KKyAgLmhpZGRlbi1waG9uZSB7CisgICAg
ZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OworICB9Cit9CisKK0BtZWRpYSAobWluLXdpZHRoOiAx
MjAwcHgpIHsKKyAgLnJvdyB7CisgICAgbWFyZ2luLWxlZnQ6IC0zMHB4OworICAgICp6b29tOiAx
OworICB9CisgIC5yb3c6YmVmb3JlLAorICAucm93OmFmdGVyIHsKKyAgICBkaXNwbGF5OiB0YWJs
ZTsKKyAgICBsaW5lLWhlaWdodDogMDsKKyAgICBjb250ZW50OiAiIjsKKyAgfQorICAucm93OmFm
dGVyIHsKKyAgICBjbGVhcjogYm90aDsKKyAgfQorICBbY2xhc3MqPSJzcGFuIl0geworICAgIGZs
b2F0OiBsZWZ0OworICAgIG1pbi1oZWlnaHQ6IDFweDsKKyAgICBtYXJnaW4tbGVmdDogMzBweDsK
KyAgfQorICAuY29udGFpbmVyLAorICAubmF2YmFyLXN0YXRpYy10b3AgLmNvbnRhaW5lciwKKyAg
Lm5hdmJhci1maXhlZC10b3AgLmNvbnRhaW5lciwKKyAgLm5hdmJhci1maXhlZC1ib3R0b20gLmNv
bnRhaW5lciB7CisgICAgd2lkdGg6IDExNzBweDsKKyAgfQorICAuc3BhbjEyIHsKKyAgICB3aWR0
aDogMTE3MHB4OworICB9CisgIC5zcGFuMTEgeworICAgIHdpZHRoOiAxMDcwcHg7CisgIH0KKyAg
LnNwYW4xMCB7CisgICAgd2lkdGg6IDk3MHB4OworICB9CisgIC5zcGFuOSB7CisgICAgd2lkdGg6
IDg3MHB4OworICB9CisgIC5zcGFuOCB7CisgICAgd2lkdGg6IDc3MHB4OworICB9CisgIC5zcGFu
NyB7CisgICAgd2lkdGg6IDY3MHB4OworICB9CisgIC5zcGFuNiB7CisgICAgd2lkdGg6IDU3MHB4
OworICB9CisgIC5zcGFuNSB7CisgICAgd2lkdGg6IDQ3MHB4OworICB9CisgIC5zcGFuNCB7Cisg
ICAgd2lkdGg6IDM3MHB4OworICB9CisgIC5zcGFuMyB7CisgICAgd2lkdGg6IDI3MHB4OworICB9
CisgIC5zcGFuMiB7CisgICAgd2lkdGg6IDE3MHB4OworICB9CisgIC5zcGFuMSB7CisgICAgd2lk
dGg6IDcwcHg7CisgIH0KKyAgLm9mZnNldDEyIHsKKyAgICBtYXJnaW4tbGVmdDogMTIzMHB4Owor
ICB9CisgIC5vZmZzZXQxMSB7CisgICAgbWFyZ2luLWxlZnQ6IDExMzBweDsKKyAgfQorICAub2Zm
c2V0MTAgeworICAgIG1hcmdpbi1sZWZ0OiAxMDMwcHg7CisgIH0KKyAgLm9mZnNldDkgeworICAg
IG1hcmdpbi1sZWZ0OiA5MzBweDsKKyAgfQorICAub2Zmc2V0OCB7CisgICAgbWFyZ2luLWxlZnQ6
IDgzMHB4OworICB9CisgIC5vZmZzZXQ3IHsKKyAgICBtYXJnaW4tbGVmdDogNzMwcHg7CisgIH0K
KyAgLm9mZnNldDYgeworICAgIG1hcmdpbi1sZWZ0OiA2MzBweDsKKyAgfQorICAub2Zmc2V0NSB7
CisgICAgbWFyZ2luLWxlZnQ6IDUzMHB4OworICB9CisgIC5vZmZzZXQ0IHsKKyAgICBtYXJnaW4t
bGVmdDogNDMwcHg7CisgIH0KKyAgLm9mZnNldDMgeworICAgIG1hcmdpbi1sZWZ0OiAzMzBweDsK
KyAgfQorICAub2Zmc2V0MiB7CisgICAgbWFyZ2luLWxlZnQ6IDIzMHB4OworICB9CisgIC5vZmZz
ZXQxIHsKKyAgICBtYXJnaW4tbGVmdDogMTMwcHg7CisgIH0KKyAgLnJvdy1mbHVpZCB7CisgICAg
d2lkdGg6IDEwMCU7CisgICAgKnpvb206IDE7CisgIH0KKyAgLnJvdy1mbHVpZDpiZWZvcmUsCisg
IC5yb3ctZmx1aWQ6YWZ0ZXIgeworICAgIGRpc3BsYXk6IHRhYmxlOworICAgIGxpbmUtaGVpZ2h0
OiAwOworICAgIGNvbnRlbnQ6ICIiOworICB9CisgIC5yb3ctZmx1aWQ6YWZ0ZXIgeworICAgIGNs
ZWFyOiBib3RoOworICB9CisgIC5yb3ctZmx1aWQgW2NsYXNzKj0ic3BhbiJdIHsKKyAgICBkaXNw
bGF5OiBibG9jazsKKyAgICBmbG9hdDogbGVmdDsKKyAgICB3aWR0aDogMTAwJTsKKyAgICBtaW4t
aGVpZ2h0OiAzMHB4OworICAgIG1hcmdpbi1sZWZ0OiAyLjU2NDEwMjU2NDEwMjU2NCU7CisgICAg
Km1hcmdpbi1sZWZ0OiAyLjUxMDkxMTA3NDc0MDg2MTYlOworICAgIC13ZWJraXQtYm94LXNpemlu
ZzogYm9yZGVyLWJveDsKKyAgICAgICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CisgICAg
ICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OworICB9CisgIC5yb3ctZmx1aWQgW2NsYXNz
Kj0ic3BhbiJdOmZpcnN0LWNoaWxkIHsKKyAgICBtYXJnaW4tbGVmdDogMDsKKyAgfQorICAucm93
LWZsdWlkIC5jb250cm9scy1yb3cgW2NsYXNzKj0ic3BhbiJdICsgW2NsYXNzKj0ic3BhbiJdIHsK
KyAgICBtYXJnaW4tbGVmdDogMi41NjQxMDI1NjQxMDI1NjQlOworICB9CisgIC5yb3ctZmx1aWQg
LnNwYW4xMiB7CisgICAgd2lkdGg6IDEwMCU7CisgICAgKndpZHRoOiA5OS45NDY4MDg1MTA2Mzgy
OSU7CisgIH0KKyAgLnJvdy1mbHVpZCAuc3BhbjExIHsKKyAgICB3aWR0aDogOTEuNDUyOTkxNDUy
OTkxNDUlOworICAgICp3aWR0aDogOTEuMzk5Nzk5OTYzNjI5NzUlOworICB9CisgIC5yb3ctZmx1
aWQgLnNwYW4xMCB7CisgICAgd2lkdGg6IDgyLjkwNTk4MjkwNTk4MjkxJTsKKyAgICAqd2lkdGg6
IDgyLjg1Mjc5MTQxNjYyMTIlOworICB9CisgIC5yb3ctZmx1aWQgLnNwYW45IHsKKyAgICB3aWR0
aDogNzQuMzU4OTc0MzU4OTc0MzYlOworICAgICp3aWR0aDogNzQuMzA1NzgyODY5NjEyNjYlOwor
ICB9CisgIC5yb3ctZmx1aWQgLnNwYW44IHsKKyAgICB3aWR0aDogNjUuODExOTY1ODExOTY1ODIl
OworICAgICp3aWR0aDogNjUuNzU4Nzc0MzIyNjA0MTElOworICB9CisgIC5yb3ctZmx1aWQgLnNw
YW43IHsKKyAgICB3aWR0aDogNTcuMjY0OTU3MjY0OTU3MjYlOworICAgICp3aWR0aDogNTcuMjEx
NzY1Nzc1NTk1NTYlOworICB9CisgIC5yb3ctZmx1aWQgLnNwYW42IHsKKyAgICB3aWR0aDogNDgu
NzE3OTQ4NzE3OTQ4NzE1JTsKKyAgICAqd2lkdGg6IDQ4LjY2NDc1NzIyODU4NzAxNCU7CisgIH0K
KyAgLnJvdy1mbHVpZCAuc3BhbjUgeworICAgIHdpZHRoOiA0MC4xNzA5NDAxNzA5NDAxNyU7Cisg
ICAgKndpZHRoOiA0MC4xMTc3NDg2ODE1Nzg0NyU7CisgIH0KKyAgLnJvdy1mbHVpZCAuc3BhbjQg
eworICAgIHdpZHRoOiAzMS42MjM5MzE2MjM5MzE2MjUlOworICAgICp3aWR0aDogMzEuNTcwNzQw
MTM0NTY5OTI0JTsKKyAgfQorICAucm93LWZsdWlkIC5zcGFuMyB7CisgICAgd2lkdGg6IDIzLjA3
NjkyMzA3NjkyMzA3NyU7CisgICAgKndpZHRoOiAyMy4wMjM3MzE1ODc1NjEzNzUlOworICB9Cisg
IC5yb3ctZmx1aWQgLnNwYW4yIHsKKyAgICB3aWR0aDogMTQuNTI5OTE0NTI5OTE0NTMlOworICAg
ICp3aWR0aDogMTQuNDc2NzIzMDQwNTUyODI4JTsKKyAgfQorICAucm93LWZsdWlkIC5zcGFuMSB7
CisgICAgd2lkdGg6IDUuOTgyOTA1OTgyOTA1OTgzJTsKKyAgICAqd2lkdGg6IDUuOTI5NzE0NDkz
NTQ0MjgxJTsKKyAgfQorICAucm93LWZsdWlkIC5vZmZzZXQxMiB7CisgICAgbWFyZ2luLWxlZnQ6
IDEwNS4xMjgyMDUxMjgyMDUxMiU7CisgICAgKm1hcmdpbi1sZWZ0OiAxMDUuMDIxODIyMTQ5NDgx
NzElOworICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDEyOmZpcnN0LWNoaWxkIHsKKyAgICBtYXJn
aW4tbGVmdDogMTAyLjU2NDEwMjU2NDEwMjU3JTsKKyAgICAqbWFyZ2luLWxlZnQ6IDEwMi40NTc3
MTk1ODUzNzkxNSU7CisgIH0KKyAgLnJvdy1mbHVpZCAub2Zmc2V0MTEgeworICAgIG1hcmdpbi1s
ZWZ0OiA5Ni41ODExOTY1ODExOTY1OCU7CisgICAgKm1hcmdpbi1sZWZ0OiA5Ni40NzQ4MTM2MDI0
NzMxNiU7CisgIH0KKyAgLnJvdy1mbHVpZCAub2Zmc2V0MTE6Zmlyc3QtY2hpbGQgeworICAgIG1h
cmdpbi1sZWZ0OiA5NC4wMTcwOTQwMTcwOTQwMiU7CisgICAgKm1hcmdpbi1sZWZ0OiA5My45MTA3
MTEwMzgzNzA2MSU7CisgIH0KKyAgLnJvdy1mbHVpZCAub2Zmc2V0MTAgeworICAgIG1hcmdpbi1s
ZWZ0OiA4OC4wMzQxODgwMzQxODgwMyU7CisgICAgKm1hcmdpbi1sZWZ0OiA4Ny45Mjc4MDUwNTU0
NjQ2MiU7CisgIH0KKyAgLnJvdy1mbHVpZCAub2Zmc2V0MTA6Zmlyc3QtY2hpbGQgeworICAgIG1h
cmdpbi1sZWZ0OiA4NS40NzAwODU0NzAwODU0OCU7CisgICAgKm1hcmdpbi1sZWZ0OiA4NS4zNjM3
MDI0OTEzNjIwNiU7CisgIH0KKyAgLnJvdy1mbHVpZCAub2Zmc2V0OSB7CisgICAgbWFyZ2luLWxl
ZnQ6IDc5LjQ4NzE3OTQ4NzE3OTQ5JTsKKyAgICAqbWFyZ2luLWxlZnQ6IDc5LjM4MDc5NjUwODQ1
NjA3JTsKKyAgfQorICAucm93LWZsdWlkIC5vZmZzZXQ5OmZpcnN0LWNoaWxkIHsKKyAgICBtYXJn
aW4tbGVmdDogNzYuOTIzMDc2OTIzMDc2OTMlOworICAgICptYXJnaW4tbGVmdDogNzYuODE2Njkz
OTQ0MzUzNTIlOworICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDggeworICAgIG1hcmdpbi1sZWZ0
OiA3MC45NDAxNzA5NDAxNzA5NCU7CisgICAgKm1hcmdpbi1sZWZ0OiA3MC44MzM3ODc5NjE0NDc1
MyU7CisgIH0KKyAgLnJvdy1mbHVpZCAub2Zmc2V0ODpmaXJzdC1jaGlsZCB7CisgICAgbWFyZ2lu
LWxlZnQ6IDY4LjM3NjA2ODM3NjA2ODM5JTsKKyAgICAqbWFyZ2luLWxlZnQ6IDY4LjI2OTY4NTM5
NzM0NDk3JTsKKyAgfQorICAucm93LWZsdWlkIC5vZmZzZXQ3IHsKKyAgICBtYXJnaW4tbGVmdDog
NjIuMzkzMTYyMzkzMTYyMzg1JTsKKyAgICAqbWFyZ2luLWxlZnQ6IDYyLjI4Njc3OTQxNDQzODk5
JTsKKyAgfQorICAucm93LWZsdWlkIC5vZmZzZXQ3OmZpcnN0LWNoaWxkIHsKKyAgICBtYXJnaW4t
bGVmdDogNTkuODI5MDU5ODI5MDU5ODIlOworICAgICptYXJnaW4tbGVmdDogNTkuNzIyNjc2ODUw
MzM2NDIlOworICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDYgeworICAgIG1hcmdpbi1sZWZ0OiA1
My44NDYxNTM4NDYxNTM4NCU7CisgICAgKm1hcmdpbi1sZWZ0OiA1My43Mzk3NzA4Njc0MzA0NDQl
OworICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDY6Zmlyc3QtY2hpbGQgeworICAgIG1hcmdpbi1s
ZWZ0OiA1MS4yODIwNTEyODIwNTEyOCU7CisgICAgKm1hcmdpbi1sZWZ0OiA1MS4xNzU2NjgzMDMz
Mjc4NzUlOworICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDUgeworICAgIG1hcmdpbi1sZWZ0OiA0
NS4yOTkxNDUyOTkxNDUyOTUlOworICAgICptYXJnaW4tbGVmdDogNDUuMTkyNzYyMzIwNDIxOSU7
CisgIH0KKyAgLnJvdy1mbHVpZCAub2Zmc2V0NTpmaXJzdC1jaGlsZCB7CisgICAgbWFyZ2luLWxl
ZnQ6IDQyLjczNTA0MjczNTA0MjczJTsKKyAgICAqbWFyZ2luLWxlZnQ6IDQyLjYyODY1OTc1NjMx
OTMzJTsKKyAgfQorICAucm93LWZsdWlkIC5vZmZzZXQ0IHsKKyAgICBtYXJnaW4tbGVmdDogMzYu
NzUyMTM2NzUyMTM2NzUlOworICAgICptYXJnaW4tbGVmdDogMzYuNjQ1NzUzNzczNDEzMzU0JTsK
KyAgfQorICAucm93LWZsdWlkIC5vZmZzZXQ0OmZpcnN0LWNoaWxkIHsKKyAgICBtYXJnaW4tbGVm
dDogMzQuMTg4MDM0MTg4MDM0MTklOworICAgICptYXJnaW4tbGVmdDogMzQuMDgxNjUxMjA5MzEw
Nzg1JTsKKyAgfQorICAucm93LWZsdWlkIC5vZmZzZXQzIHsKKyAgICBtYXJnaW4tbGVmdDogMjgu
MjA1MTI4MjA1MTI4MjA0JTsKKyAgICAqbWFyZ2luLWxlZnQ6IDI4LjA5ODc0NTIyNjQwNDglOwor
ICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDM6Zmlyc3QtY2hpbGQgeworICAgIG1hcmdpbi1sZWZ0
OiAyNS42NDEwMjU2NDEwMjU2NDIlOworICAgICptYXJnaW4tbGVmdDogMjUuNTM0NjQyNjYyMzAy
MjQlOworICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDIgeworICAgIG1hcmdpbi1sZWZ0OiAxOS42
NTgxMTk2NTgxMTk2NiU7CisgICAgKm1hcmdpbi1sZWZ0OiAxOS41NTE3MzY2NzkzOTYyNTclOwor
ICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDI6Zmlyc3QtY2hpbGQgeworICAgIG1hcmdpbi1sZWZ0
OiAxNy4wOTQwMTcwOTQwMTcwOTQlOworICAgICptYXJnaW4tbGVmdDogMTYuOTg3NjM0MTE1Mjkz
NjklOworICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDEgeworICAgIG1hcmdpbi1sZWZ0OiAxMS4x
MTExMTExMTExMTExMSU7CisgICAgKm1hcmdpbi1sZWZ0OiAxMS4wMDQ3MjgxMzIzODc3MDglOwor
ICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDE6Zmlyc3QtY2hpbGQgeworICAgIG1hcmdpbi1sZWZ0
OiA4LjU0NzAwODU0NzAwODU0NyU7CisgICAgKm1hcmdpbi1sZWZ0OiA4LjQ0MDYyNTU2ODI4NTE0
MiU7CisgIH0KKyAgaW5wdXQsCisgIHRleHRhcmVhLAorICAudW5lZGl0YWJsZS1pbnB1dCB7Cisg
ICAgbWFyZ2luLWxlZnQ6IDA7CisgIH0KKyAgLmNvbnRyb2xzLXJvdyBbY2xhc3MqPSJzcGFuIl0g
KyBbY2xhc3MqPSJzcGFuIl0geworICAgIG1hcmdpbi1sZWZ0OiAzMHB4OworICB9CisgIGlucHV0
LnNwYW4xMiwKKyAgdGV4dGFyZWEuc3BhbjEyLAorICAudW5lZGl0YWJsZS1pbnB1dC5zcGFuMTIg
eworICAgIHdpZHRoOiAxMTU2cHg7CisgIH0KKyAgaW5wdXQuc3BhbjExLAorICB0ZXh0YXJlYS5z
cGFuMTEsCisgIC51bmVkaXRhYmxlLWlucHV0LnNwYW4xMSB7CisgICAgd2lkdGg6IDEwNTZweDsK
KyAgfQorICBpbnB1dC5zcGFuMTAsCisgIHRleHRhcmVhLnNwYW4xMCwKKyAgLnVuZWRpdGFibGUt
aW5wdXQuc3BhbjEwIHsKKyAgICB3aWR0aDogOTU2cHg7CisgIH0KKyAgaW5wdXQuc3BhbjksCisg
IHRleHRhcmVhLnNwYW45LAorICAudW5lZGl0YWJsZS1pbnB1dC5zcGFuOSB7CisgICAgd2lkdGg6
IDg1NnB4OworICB9CisgIGlucHV0LnNwYW44LAorICB0ZXh0YXJlYS5zcGFuOCwKKyAgLnVuZWRp
dGFibGUtaW5wdXQuc3BhbjggeworICAgIHdpZHRoOiA3NTZweDsKKyAgfQorICBpbnB1dC5zcGFu
NywKKyAgdGV4dGFyZWEuc3BhbjcsCisgIC51bmVkaXRhYmxlLWlucHV0LnNwYW43IHsKKyAgICB3
aWR0aDogNjU2cHg7CisgIH0KKyAgaW5wdXQuc3BhbjYsCisgIHRleHRhcmVhLnNwYW42LAorICAu
dW5lZGl0YWJsZS1pbnB1dC5zcGFuNiB7CisgICAgd2lkdGg6IDU1NnB4OworICB9CisgIGlucHV0
LnNwYW41LAorICB0ZXh0YXJlYS5zcGFuNSwKKyAgLnVuZWRpdGFibGUtaW5wdXQuc3BhbjUgewor
ICAgIHdpZHRoOiA0NTZweDsKKyAgfQorICBpbnB1dC5zcGFuNCwKKyAgdGV4dGFyZWEuc3BhbjQs
CisgIC51bmVkaXRhYmxlLWlucHV0LnNwYW40IHsKKyAgICB3aWR0aDogMzU2cHg7CisgIH0KKyAg
aW5wdXQuc3BhbjMsCisgIHRleHRhcmVhLnNwYW4zLAorICAudW5lZGl0YWJsZS1pbnB1dC5zcGFu
MyB7CisgICAgd2lkdGg6IDI1NnB4OworICB9CisgIGlucHV0LnNwYW4yLAorICB0ZXh0YXJlYS5z
cGFuMiwKKyAgLnVuZWRpdGFibGUtaW5wdXQuc3BhbjIgeworICAgIHdpZHRoOiAxNTZweDsKKyAg
fQorICBpbnB1dC5zcGFuMSwKKyAgdGV4dGFyZWEuc3BhbjEsCisgIC51bmVkaXRhYmxlLWlucHV0
LnNwYW4xIHsKKyAgICB3aWR0aDogNTZweDsKKyAgfQorICAudGh1bWJuYWlscyB7CisgICAgbWFy
Z2luLWxlZnQ6IC0zMHB4OworICB9CisgIC50aHVtYm5haWxzID4gbGkgeworICAgIG1hcmdpbi1s
ZWZ0OiAzMHB4OworICB9CisgIC5yb3ctZmx1aWQgLnRodW1ibmFpbHMgeworICAgIG1hcmdpbi1s
ZWZ0OiAwOworICB9Cit9CisKK0BtZWRpYSAobWluLXdpZHRoOiA3NjhweCkgYW5kIChtYXgtd2lk
dGg6IDk3OXB4KSB7CisgIC5yb3cgeworICAgIG1hcmdpbi1sZWZ0OiAtMjBweDsKKyAgICAqem9v
bTogMTsKKyAgfQorICAucm93OmJlZm9yZSwKKyAgLnJvdzphZnRlciB7CisgICAgZGlzcGxheTog
dGFibGU7CisgICAgbGluZS1oZWlnaHQ6IDA7CisgICAgY29udGVudDogIiI7CisgIH0KKyAgLnJv
dzphZnRlciB7CisgICAgY2xlYXI6IGJvdGg7CisgIH0KKyAgW2NsYXNzKj0ic3BhbiJdIHsKKyAg
ICBmbG9hdDogbGVmdDsKKyAgICBtaW4taGVpZ2h0OiAxcHg7CisgICAgbWFyZ2luLWxlZnQ6IDIw
cHg7CisgIH0KKyAgLmNvbnRhaW5lciwKKyAgLm5hdmJhci1zdGF0aWMtdG9wIC5jb250YWluZXIs
CisgIC5uYXZiYXItZml4ZWQtdG9wIC5jb250YWluZXIsCisgIC5uYXZiYXItZml4ZWQtYm90dG9t
IC5jb250YWluZXIgeworICAgIHdpZHRoOiA3MjRweDsKKyAgfQorICAuc3BhbjEyIHsKKyAgICB3
aWR0aDogNzI0cHg7CisgIH0KKyAgLnNwYW4xMSB7CisgICAgd2lkdGg6IDY2MnB4OworICB9Cisg
IC5zcGFuMTAgeworICAgIHdpZHRoOiA2MDBweDsKKyAgfQorICAuc3BhbjkgeworICAgIHdpZHRo
OiA1MzhweDsKKyAgfQorICAuc3BhbjggeworICAgIHdpZHRoOiA0NzZweDsKKyAgfQorICAuc3Bh
bjcgeworICAgIHdpZHRoOiA0MTRweDsKKyAgfQorICAuc3BhbjYgeworICAgIHdpZHRoOiAzNTJw
eDsKKyAgfQorICAuc3BhbjUgeworICAgIHdpZHRoOiAyOTBweDsKKyAgfQorICAuc3BhbjQgewor
ICAgIHdpZHRoOiAyMjhweDsKKyAgfQorICAuc3BhbjMgeworICAgIHdpZHRoOiAxNjZweDsKKyAg
fQorICAuc3BhbjIgeworICAgIHdpZHRoOiAxMDRweDsKKyAgfQorICAuc3BhbjEgeworICAgIHdp
ZHRoOiA0MnB4OworICB9CisgIC5vZmZzZXQxMiB7CisgICAgbWFyZ2luLWxlZnQ6IDc2NHB4Owor
ICB9CisgIC5vZmZzZXQxMSB7CisgICAgbWFyZ2luLWxlZnQ6IDcwMnB4OworICB9CisgIC5vZmZz
ZXQxMCB7CisgICAgbWFyZ2luLWxlZnQ6IDY0MHB4OworICB9CisgIC5vZmZzZXQ5IHsKKyAgICBt
YXJnaW4tbGVmdDogNTc4cHg7CisgIH0KKyAgLm9mZnNldDggeworICAgIG1hcmdpbi1sZWZ0OiA1
MTZweDsKKyAgfQorICAub2Zmc2V0NyB7CisgICAgbWFyZ2luLWxlZnQ6IDQ1NHB4OworICB9Cisg
IC5vZmZzZXQ2IHsKKyAgICBtYXJnaW4tbGVmdDogMzkycHg7CisgIH0KKyAgLm9mZnNldDUgewor
ICAgIG1hcmdpbi1sZWZ0OiAzMzBweDsKKyAgfQorICAub2Zmc2V0NCB7CisgICAgbWFyZ2luLWxl
ZnQ6IDI2OHB4OworICB9CisgIC5vZmZzZXQzIHsKKyAgICBtYXJnaW4tbGVmdDogMjA2cHg7Cisg
IH0KKyAgLm9mZnNldDIgeworICAgIG1hcmdpbi1sZWZ0OiAxNDRweDsKKyAgfQorICAub2Zmc2V0
MSB7CisgICAgbWFyZ2luLWxlZnQ6IDgycHg7CisgIH0KKyAgLnJvdy1mbHVpZCB7CisgICAgd2lk
dGg6IDEwMCU7CisgICAgKnpvb206IDE7CisgIH0KKyAgLnJvdy1mbHVpZDpiZWZvcmUsCisgIC5y
b3ctZmx1aWQ6YWZ0ZXIgeworICAgIGRpc3BsYXk6IHRhYmxlOworICAgIGxpbmUtaGVpZ2h0OiAw
OworICAgIGNvbnRlbnQ6ICIiOworICB9CisgIC5yb3ctZmx1aWQ6YWZ0ZXIgeworICAgIGNsZWFy
OiBib3RoOworICB9CisgIC5yb3ctZmx1aWQgW2NsYXNzKj0ic3BhbiJdIHsKKyAgICBkaXNwbGF5
OiBibG9jazsKKyAgICBmbG9hdDogbGVmdDsKKyAgICB3aWR0aDogMTAwJTsKKyAgICBtaW4taGVp
Z2h0OiAzMHB4OworICAgIG1hcmdpbi1sZWZ0OiAyLjc2MjQzMDkzOTIyNjUxOTQlOworICAgICpt
YXJnaW4tbGVmdDogMi43MDkyMzk0NDk4NjQ4MTclOworICAgIC13ZWJraXQtYm94LXNpemluZzog
Ym9yZGVyLWJveDsKKyAgICAgICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CisgICAgICAg
ICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OworICB9CisgIC5yb3ctZmx1aWQgW2NsYXNzKj0i
c3BhbiJdOmZpcnN0LWNoaWxkIHsKKyAgICBtYXJnaW4tbGVmdDogMDsKKyAgfQorICAucm93LWZs
dWlkIC5jb250cm9scy1yb3cgW2NsYXNzKj0ic3BhbiJdICsgW2NsYXNzKj0ic3BhbiJdIHsKKyAg
ICBtYXJnaW4tbGVmdDogMi43NjI0MzA5MzkyMjY1MTk0JTsKKyAgfQorICAucm93LWZsdWlkIC5z
cGFuMTIgeworICAgIHdpZHRoOiAxMDAlOworICAgICp3aWR0aDogOTkuOTQ2ODA4NTEwNjM4Mjkl
OworICB9CisgIC5yb3ctZmx1aWQgLnNwYW4xMSB7CisgICAgd2lkdGg6IDkxLjQzNjQ2NDA4ODM5
Nzc4JTsKKyAgICAqd2lkdGg6IDkxLjM4MzI3MjU5OTAzNjA4JTsKKyAgfQorICAucm93LWZsdWlk
IC5zcGFuMTAgeworICAgIHdpZHRoOiA4Mi44NzI5MjgxNzY3OTU1OCU7CisgICAgKndpZHRoOiA4
Mi44MTk3MzY2ODc0MzM4NyU7CisgIH0KKyAgLnJvdy1mbHVpZCAuc3BhbjkgeworICAgIHdpZHRo
OiA3NC4zMDkzOTIyNjUxOTMzNyU7CisgICAgKndpZHRoOiA3NC4yNTYyMDA3NzU4MzE2NiU7Cisg
IH0KKyAgLnJvdy1mbHVpZCAuc3BhbjggeworICAgIHdpZHRoOiA2NS43NDU4NTYzNTM1OTExNyU7
CisgICAgKndpZHRoOiA2NS42OTI2NjQ4NjQyMjk0NiU7CisgIH0KKyAgLnJvdy1mbHVpZCAuc3Bh
bjcgeworICAgIHdpZHRoOiA1Ny4xODIzMjA0NDE5ODg5NSU7CisgICAgKndpZHRoOiA1Ny4xMjkx
Mjg5NTI2MjcyNSU7CisgIH0KKyAgLnJvdy1mbHVpZCAuc3BhbjYgeworICAgIHdpZHRoOiA0OC42
MTg3ODQ1MzAzODY3NCU7CisgICAgKndpZHRoOiA0OC41NjU1OTMwNDEwMjUwNCU7CisgIH0KKyAg
LnJvdy1mbHVpZCAuc3BhbjUgeworICAgIHdpZHRoOiA0MC4wNTUyNDg2MTg3ODQ1MyU7CisgICAg
KndpZHRoOiA0MC4wMDIwNTcxMjk0MjI4MyU7CisgIH0KKyAgLnJvdy1mbHVpZCAuc3BhbjQgewor
ICAgIHdpZHRoOiAzMS40OTE3MTI3MDcxODIzMjMlOworICAgICp3aWR0aDogMzEuNDM4NTIxMjE3
ODIwNjIlOworICB9CisgIC5yb3ctZmx1aWQgLnNwYW4zIHsKKyAgICB3aWR0aDogMjIuOTI4MTc2
Nzk1NTgwMTElOworICAgICp3aWR0aDogMjIuODc0OTg1MzA2MjE4NDElOworICB9CisgIC5yb3ct
Zmx1aWQgLnNwYW4yIHsKKyAgICB3aWR0aDogMTQuMzY0NjQwODgzOTc3OSU7CisgICAgKndpZHRo
OiAxNC4zMTE0NDkzOTQ2MTYxOTklOworICB9CisgIC5yb3ctZmx1aWQgLnNwYW4xIHsKKyAgICB3
aWR0aDogNS44MDExMDQ5NzIzNzU2OTElOworICAgICp3aWR0aDogNS43NDc5MTM0ODMwMTM5ODgl
OworICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDEyIHsKKyAgICBtYXJnaW4tbGVmdDogMTA1LjUy
NDg2MTg3ODQ1MzA0JTsKKyAgICAqbWFyZ2luLWxlZnQ6IDEwNS40MTg0Nzg4OTk3Mjk2MiU7Cisg
IH0KKyAgLnJvdy1mbHVpZCAub2Zmc2V0MTI6Zmlyc3QtY2hpbGQgeworICAgIG1hcmdpbi1sZWZ0
OiAxMDIuNzYyNDMwOTM5MjI2NTIlOworICAgICptYXJnaW4tbGVmdDogMTAyLjY1NjA0Nzk2MDUw
MzElOworICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDExIHsKKyAgICBtYXJnaW4tbGVmdDogOTYu
OTYxMzI1OTY2ODUwODIlOworICAgICptYXJnaW4tbGVmdDogOTYuODU0OTQyOTg4MTI3NCU7Cisg
IH0KKyAgLnJvdy1mbHVpZCAub2Zmc2V0MTE6Zmlyc3QtY2hpbGQgeworICAgIG1hcmdpbi1sZWZ0
OiA5NC4xOTg4OTUwMjc2MjQzJTsKKyAgICAqbWFyZ2luLWxlZnQ6IDk0LjA5MjUxMjA0ODkwMDg5
JTsKKyAgfQorICAucm93LWZsdWlkIC5vZmZzZXQxMCB7CisgICAgbWFyZ2luLWxlZnQ6IDg4LjM5
Nzc5MDA1NTI0ODYyJTsKKyAgICAqbWFyZ2luLWxlZnQ6IDg4LjI5MTQwNzA3NjUyNTIlOworICB9
CisgIC5yb3ctZmx1aWQgLm9mZnNldDEwOmZpcnN0LWNoaWxkIHsKKyAgICBtYXJnaW4tbGVmdDog
ODUuNjM1MzU5MTE2MDIyMSU7CisgICAgKm1hcmdpbi1sZWZ0OiA4NS41Mjg5NzYxMzcyOTg2OCU7
CisgIH0KKyAgLnJvdy1mbHVpZCAub2Zmc2V0OSB7CisgICAgbWFyZ2luLWxlZnQ6IDc5LjgzNDI1
NDE0MzY0NjQlOworICAgICptYXJnaW4tbGVmdDogNzkuNzI3ODcxMTY0OTIyOTklOworICB9Cisg
IC5yb3ctZmx1aWQgLm9mZnNldDk6Zmlyc3QtY2hpbGQgeworICAgIG1hcmdpbi1sZWZ0OiA3Ny4w
NzE4MjMyMDQ0MTk4OSU7CisgICAgKm1hcmdpbi1sZWZ0OiA3Ni45NjU0NDAyMjU2OTY0NyU7Cisg
IH0KKyAgLnJvdy1mbHVpZCAub2Zmc2V0OCB7CisgICAgbWFyZ2luLWxlZnQ6IDcxLjI3MDcxODIz
MjA0NDIlOworICAgICptYXJnaW4tbGVmdDogNzEuMTY0MzM1MjUzMzIwNzklOworICB9CisgIC5y
b3ctZmx1aWQgLm9mZnNldDg6Zmlyc3QtY2hpbGQgeworICAgIG1hcmdpbi1sZWZ0OiA2OC41MDgy
ODcyOTI4MTc2OCU7CisgICAgKm1hcmdpbi1sZWZ0OiA2OC40MDE5MDQzMTQwOTQyNyU7CisgIH0K
KyAgLnJvdy1mbHVpZCAub2Zmc2V0NyB7CisgICAgbWFyZ2luLWxlZnQ6IDYyLjcwNzE4MjMyMDQ0
MTk5JTsKKyAgICAqbWFyZ2luLWxlZnQ6IDYyLjYwMDc5OTM0MTcxODU4NCU7CisgIH0KKyAgLnJv
dy1mbHVpZCAub2Zmc2V0NzpmaXJzdC1jaGlsZCB7CisgICAgbWFyZ2luLWxlZnQ6IDU5Ljk0NDc1
MTM4MTIxNTQ3JTsKKyAgICAqbWFyZ2luLWxlZnQ6IDU5LjgzODM2ODQwMjQ5MjA2NSU7CisgIH0K
KyAgLnJvdy1mbHVpZCAub2Zmc2V0NiB7CisgICAgbWFyZ2luLWxlZnQ6IDU0LjE0MzY0NjQwODgz
OTc4JTsKKyAgICAqbWFyZ2luLWxlZnQ6IDU0LjAzNzI2MzQzMDExNjM3NiU7CisgIH0KKyAgLnJv
dy1mbHVpZCAub2Zmc2V0NjpmaXJzdC1jaGlsZCB7CisgICAgbWFyZ2luLWxlZnQ6IDUxLjM4MTIx
NTQ2OTYxMzI2JTsKKyAgICAqbWFyZ2luLWxlZnQ6IDUxLjI3NDgzMjQ5MDg4OTg2JTsKKyAgfQor
ICAucm93LWZsdWlkIC5vZmZzZXQ1IHsKKyAgICBtYXJnaW4tbGVmdDogNDUuNTgwMTEwNDk3MjM3
NTclOworICAgICptYXJnaW4tbGVmdDogNDUuNDczNzI3NTE4NTE0MTclOworICB9CisgIC5yb3ct
Zmx1aWQgLm9mZnNldDU6Zmlyc3QtY2hpbGQgeworICAgIG1hcmdpbi1sZWZ0OiA0Mi44MTc2Nzk1
NTgwMTEwNSU7CisgICAgKm1hcmdpbi1sZWZ0OiA0Mi43MTEyOTY1NzkyODc2NSU7CisgIH0KKyAg
LnJvdy1mbHVpZCAub2Zmc2V0NCB7CisgICAgbWFyZ2luLWxlZnQ6IDM3LjAxNjU3NDU4NTYzNTM2
JTsKKyAgICAqbWFyZ2luLWxlZnQ6IDM2LjkxMDE5MTYwNjkxMTk2JTsKKyAgfQorICAucm93LWZs
dWlkIC5vZmZzZXQ0OmZpcnN0LWNoaWxkIHsKKyAgICBtYXJnaW4tbGVmdDogMzQuMjU0MTQzNjQ2
NDA4ODQlOworICAgICptYXJnaW4tbGVmdDogMzQuMTQ3NzYwNjY3Njg1NDQlOworICB9CisgIC5y
b3ctZmx1aWQgLm9mZnNldDMgeworICAgIG1hcmdpbi1sZWZ0OiAyOC40NTMwMzg2NzQwMzMxNSU7
CisgICAgKm1hcmdpbi1sZWZ0OiAyOC4zNDY2NTU2OTUzMDk3NDYlOworICB9CisgIC5yb3ctZmx1
aWQgLm9mZnNldDM6Zmlyc3QtY2hpbGQgeworICAgIG1hcmdpbi1sZWZ0OiAyNS42OTA2MDc3MzQ4
MDY2MyU7CisgICAgKm1hcmdpbi1sZWZ0OiAyNS41ODQyMjQ3NTYwODMyMjclOworICB9CisgIC5y
b3ctZmx1aWQgLm9mZnNldDIgeworICAgIG1hcmdpbi1sZWZ0OiAxOS44ODk1MDI3NjI0MzA5NCU7
CisgICAgKm1hcmdpbi1sZWZ0OiAxOS43ODMxMTk3ODM3MDc1MzclOworICB9CisgIC5yb3ctZmx1
aWQgLm9mZnNldDI6Zmlyc3QtY2hpbGQgeworICAgIG1hcmdpbi1sZWZ0OiAxNy4xMjcwNzE4MjMy
MDQ0MiU7CisgICAgKm1hcmdpbi1sZWZ0OiAxNy4wMjA2ODg4NDQ0ODEwMiU7CisgIH0KKyAgLnJv
dy1mbHVpZCAub2Zmc2V0MSB7CisgICAgbWFyZ2luLWxlZnQ6IDExLjMyNTk2Njg1MDgyODczJTsK
KyAgICAqbWFyZ2luLWxlZnQ6IDExLjIxOTU4Mzg3MjEwNTMyNSU7CisgIH0KKyAgLnJvdy1mbHVp
ZCAub2Zmc2V0MTpmaXJzdC1jaGlsZCB7CisgICAgbWFyZ2luLWxlZnQ6IDguNTYzNTM1OTExNjAy
MjElOworICAgICptYXJnaW4tbGVmdDogOC40NTcxNTI5MzI4Nzg4MDYlOworICB9CisgIGlucHV0
LAorICB0ZXh0YXJlYSwKKyAgLnVuZWRpdGFibGUtaW5wdXQgeworICAgIG1hcmdpbi1sZWZ0OiAw
OworICB9CisgIC5jb250cm9scy1yb3cgW2NsYXNzKj0ic3BhbiJdICsgW2NsYXNzKj0ic3BhbiJd
IHsKKyAgICBtYXJnaW4tbGVmdDogMjBweDsKKyAgfQorICBpbnB1dC5zcGFuMTIsCisgIHRleHRh
cmVhLnNwYW4xMiwKKyAgLnVuZWRpdGFibGUtaW5wdXQuc3BhbjEyIHsKKyAgICB3aWR0aDogNzEw
cHg7CisgIH0KKyAgaW5wdXQuc3BhbjExLAorICB0ZXh0YXJlYS5zcGFuMTEsCisgIC51bmVkaXRh
YmxlLWlucHV0LnNwYW4xMSB7CisgICAgd2lkdGg6IDY0OHB4OworICB9CisgIGlucHV0LnNwYW4x
MCwKKyAgdGV4dGFyZWEuc3BhbjEwLAorICAudW5lZGl0YWJsZS1pbnB1dC5zcGFuMTAgeworICAg
IHdpZHRoOiA1ODZweDsKKyAgfQorICBpbnB1dC5zcGFuOSwKKyAgdGV4dGFyZWEuc3BhbjksCisg
IC51bmVkaXRhYmxlLWlucHV0LnNwYW45IHsKKyAgICB3aWR0aDogNTI0cHg7CisgIH0KKyAgaW5w
dXQuc3BhbjgsCisgIHRleHRhcmVhLnNwYW44LAorICAudW5lZGl0YWJsZS1pbnB1dC5zcGFuOCB7
CisgICAgd2lkdGg6IDQ2MnB4OworICB9CisgIGlucHV0LnNwYW43LAorICB0ZXh0YXJlYS5zcGFu
NywKKyAgLnVuZWRpdGFibGUtaW5wdXQuc3BhbjcgeworICAgIHdpZHRoOiA0MDBweDsKKyAgfQor
ICBpbnB1dC5zcGFuNiwKKyAgdGV4dGFyZWEuc3BhbjYsCisgIC51bmVkaXRhYmxlLWlucHV0LnNw
YW42IHsKKyAgICB3aWR0aDogMzM4cHg7CisgIH0KKyAgaW5wdXQuc3BhbjUsCisgIHRleHRhcmVh
LnNwYW41LAorICAudW5lZGl0YWJsZS1pbnB1dC5zcGFuNSB7CisgICAgd2lkdGg6IDI3NnB4Owor
ICB9CisgIGlucHV0LnNwYW40LAorICB0ZXh0YXJlYS5zcGFuNCwKKyAgLnVuZWRpdGFibGUtaW5w
dXQuc3BhbjQgeworICAgIHdpZHRoOiAyMTRweDsKKyAgfQorICBpbnB1dC5zcGFuMywKKyAgdGV4
dGFyZWEuc3BhbjMsCisgIC51bmVkaXRhYmxlLWlucHV0LnNwYW4zIHsKKyAgICB3aWR0aDogMTUy
cHg7CisgIH0KKyAgaW5wdXQuc3BhbjIsCisgIHRleHRhcmVhLnNwYW4yLAorICAudW5lZGl0YWJs
ZS1pbnB1dC5zcGFuMiB7CisgICAgd2lkdGg6IDkwcHg7CisgIH0KKyAgaW5wdXQuc3BhbjEsCisg
IHRleHRhcmVhLnNwYW4xLAorICAudW5lZGl0YWJsZS1pbnB1dC5zcGFuMSB7CisgICAgd2lkdGg6
IDI4cHg7CisgIH0KK30KKworQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7CisgIGJvZHkgewor
ICAgIHBhZGRpbmctcmlnaHQ6IDIwcHg7CisgICAgcGFkZGluZy1sZWZ0OiAyMHB4OworICB9Cisg
IC5uYXZiYXItZml4ZWQtdG9wLAorICAubmF2YmFyLWZpeGVkLWJvdHRvbSwKKyAgLm5hdmJhci1z
dGF0aWMtdG9wIHsKKyAgICBtYXJnaW4tcmlnaHQ6IC0yMHB4OworICAgIG1hcmdpbi1sZWZ0OiAt
MjBweDsKKyAgfQorICAuY29udGFpbmVyLWZsdWlkIHsKKyAgICBwYWRkaW5nOiAwOworICB9Cisg
IC5kbC1ob3Jpem9udGFsIGR0IHsKKyAgICBmbG9hdDogbm9uZTsKKyAgICB3aWR0aDogYXV0bzsK
KyAgICBjbGVhcjogbm9uZTsKKyAgICB0ZXh0LWFsaWduOiBsZWZ0OworICB9CisgIC5kbC1ob3Jp
em9udGFsIGRkIHsKKyAgICBtYXJnaW4tbGVmdDogMDsKKyAgfQorICAuY29udGFpbmVyIHsKKyAg
ICB3aWR0aDogYXV0bzsKKyAgfQorICAucm93LWZsdWlkIHsKKyAgICB3aWR0aDogMTAwJTsKKyAg
fQorICAucm93LAorICAudGh1bWJuYWlscyB7CisgICAgbWFyZ2luLWxlZnQ6IDA7CisgIH0KKyAg
LnRodW1ibmFpbHMgPiBsaSB7CisgICAgZmxvYXQ6IG5vbmU7CisgICAgbWFyZ2luLWxlZnQ6IDA7
CisgIH0KKyAgW2NsYXNzKj0ic3BhbiJdLAorICAudW5lZGl0YWJsZS1pbnB1dFtjbGFzcyo9InNw
YW4iXSwKKyAgLnJvdy1mbHVpZCBbY2xhc3MqPSJzcGFuIl0geworICAgIGRpc3BsYXk6IGJsb2Nr
OworICAgIGZsb2F0OiBub25lOworICAgIHdpZHRoOiAxMDAlOworICAgIG1hcmdpbi1sZWZ0OiAw
OworICAgIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDsKKyAgICAgICAtbW96LWJveC1z
aXppbmc6IGJvcmRlci1ib3g7CisgICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94Owor
ICB9CisgIC5zcGFuMTIsCisgIC5yb3ctZmx1aWQgLnNwYW4xMiB7CisgICAgd2lkdGg6IDEwMCU7
CisgICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94OworICAgICAgIC1tb3otYm94LXNp
emluZzogYm9yZGVyLWJveDsKKyAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7Cisg
IH0KKyAgLnJvdy1mbHVpZCBbY2xhc3MqPSJvZmZzZXQiXTpmaXJzdC1jaGlsZCB7CisgICAgbWFy
Z2luLWxlZnQ6IDA7CisgIH0KKyAgLmlucHV0LWxhcmdlLAorICAuaW5wdXQteGxhcmdlLAorICAu
aW5wdXQteHhsYXJnZSwKKyAgaW5wdXRbY2xhc3MqPSJzcGFuIl0sCisgIHNlbGVjdFtjbGFzcyo9
InNwYW4iXSwKKyAgdGV4dGFyZWFbY2xhc3MqPSJzcGFuIl0sCisgIC51bmVkaXRhYmxlLWlucHV0
IHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICB3aWR0aDogMTAwJTsKKyAgICBtaW4taGVpZ2h0
OiAzMHB4OworICAgIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDsKKyAgICAgICAtbW96
LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CisgICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXIt
Ym94OworICB9CisgIC5pbnB1dC1wcmVwZW5kIGlucHV0LAorICAuaW5wdXQtYXBwZW5kIGlucHV0
LAorICAuaW5wdXQtcHJlcGVuZCBpbnB1dFtjbGFzcyo9InNwYW4iXSwKKyAgLmlucHV0LWFwcGVu
ZCBpbnB1dFtjbGFzcyo9InNwYW4iXSB7CisgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICAg
IHdpZHRoOiBhdXRvOworICB9CisgIC5jb250cm9scy1yb3cgW2NsYXNzKj0ic3BhbiJdICsgW2Ns
YXNzKj0ic3BhbiJdIHsKKyAgICBtYXJnaW4tbGVmdDogMDsKKyAgfQorICAubW9kYWwgeworICAg
IHBvc2l0aW9uOiBmaXhlZDsKKyAgICB0b3A6IDIwcHg7CisgICAgcmlnaHQ6IDIwcHg7CisgICAg
bGVmdDogMjBweDsKKyAgICB3aWR0aDogYXV0bzsKKyAgICBtYXJnaW46IDA7CisgIH0KKyAgLm1v
ZGFsLmZhZGUgeworICAgIHRvcDogLTEwMHB4OworICB9CisgIC5tb2RhbC5mYWRlLmluIHsKKyAg
ICB0b3A6IDIwcHg7CisgIH0KK30KKworQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7CisgIC5u
YXYtY29sbGFwc2UgeworICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAw
KTsKKyAgfQorICAucGFnZS1oZWFkZXIgaDEgc21hbGwgeworICAgIGRpc3BsYXk6IGJsb2NrOwor
ICAgIGxpbmUtaGVpZ2h0OiAyMHB4OworICB9CisgIGlucHV0W3R5cGU9ImNoZWNrYm94Il0sCisg
IGlucHV0W3R5cGU9InJhZGlvIl0geworICAgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7CisgIH0K
KyAgLmZvcm0taG9yaXpvbnRhbCAuY29udHJvbC1sYWJlbCB7CisgICAgZmxvYXQ6IG5vbmU7Cisg
ICAgd2lkdGg6IGF1dG87CisgICAgcGFkZGluZy10b3A6IDA7CisgICAgdGV4dC1hbGlnbjogbGVm
dDsKKyAgfQorICAuZm9ybS1ob3Jpem9udGFsIC5jb250cm9scyB7CisgICAgbWFyZ2luLWxlZnQ6
IDA7CisgIH0KKyAgLmZvcm0taG9yaXpvbnRhbCAuY29udHJvbC1saXN0IHsKKyAgICBwYWRkaW5n
LXRvcDogMDsKKyAgfQorICAuZm9ybS1ob3Jpem9udGFsIC5mb3JtLWFjdGlvbnMgeworICAgIHBh
ZGRpbmctcmlnaHQ6IDEwcHg7CisgICAgcGFkZGluZy1sZWZ0OiAxMHB4OworICB9CisgIC5tZWRp
YSAucHVsbC1sZWZ0LAorICAubWVkaWEgLnB1bGwtcmlnaHQgeworICAgIGRpc3BsYXk6IGJsb2Nr
OworICAgIGZsb2F0OiBub25lOworICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CisgIH0KKyAgLm1l
ZGlhLW9iamVjdCB7CisgICAgbWFyZ2luLXJpZ2h0OiAwOworICAgIG1hcmdpbi1sZWZ0OiAwOwor
ICB9CisgIC5tb2RhbCB7CisgICAgdG9wOiAxMHB4OworICAgIHJpZ2h0OiAxMHB4OworICAgIGxl
ZnQ6IDEwcHg7CisgIH0KKyAgLm1vZGFsLWhlYWRlciAuY2xvc2UgeworICAgIHBhZGRpbmc6IDEw
cHg7CisgICAgbWFyZ2luOiAtMTBweDsKKyAgfQorICAuY2Fyb3VzZWwtY2FwdGlvbiB7CisgICAg
cG9zaXRpb246IHN0YXRpYzsKKyAgfQorfQorCitAbWVkaWEgKG1heC13aWR0aDogOTc5cHgpIHsK
KyAgYm9keSB7CisgICAgcGFkZGluZy10b3A6IDA7CisgIH0KKyAgLm5hdmJhci1maXhlZC10b3As
CisgIC5uYXZiYXItZml4ZWQtYm90dG9tIHsKKyAgICBwb3NpdGlvbjogc3RhdGljOworICB9Cisg
IC5uYXZiYXItZml4ZWQtdG9wIHsKKyAgICBtYXJnaW4tYm90dG9tOiAyMHB4OworICB9CisgIC5u
YXZiYXItZml4ZWQtYm90dG9tIHsKKyAgICBtYXJnaW4tdG9wOiAyMHB4OworICB9CisgIC5uYXZi
YXItZml4ZWQtdG9wIC5uYXZiYXItaW5uZXIsCisgIC5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXZi
YXItaW5uZXIgeworICAgIHBhZGRpbmc6IDVweDsKKyAgfQorICAubmF2YmFyIC5jb250YWluZXIg
eworICAgIHdpZHRoOiBhdXRvOworICAgIHBhZGRpbmc6IDA7CisgIH0KKyAgLm5hdmJhciAuYnJh
bmQgeworICAgIHBhZGRpbmctcmlnaHQ6IDEwcHg7CisgICAgcGFkZGluZy1sZWZ0OiAxMHB4Owor
ICAgIG1hcmdpbjogMCAwIDAgLTVweDsKKyAgfQorICAubmF2LWNvbGxhcHNlIHsKKyAgICBjbGVh
cjogYm90aDsKKyAgfQorICAubmF2LWNvbGxhcHNlIC5uYXYgeworICAgIGZsb2F0OiBub25lOwor
ICAgIG1hcmdpbjogMCAwIDEwcHg7CisgIH0KKyAgLm5hdi1jb2xsYXBzZSAubmF2ID4gbGkgewor
ICAgIGZsb2F0OiBub25lOworICB9CisgIC5uYXYtY29sbGFwc2UgLm5hdiA+IGxpID4gYSB7Cisg
ICAgbWFyZ2luLWJvdHRvbTogMnB4OworICB9CisgIC5uYXYtY29sbGFwc2UgLm5hdiA+IC5kaXZp
ZGVyLXZlcnRpY2FsIHsKKyAgICBkaXNwbGF5OiBub25lOworICB9CisgIC5uYXYtY29sbGFwc2Ug
Lm5hdiAubmF2LWhlYWRlciB7CisgICAgY29sb3I6ICM3Nzc3Nzc7CisgICAgdGV4dC1zaGFkb3c6
IG5vbmU7CisgIH0KKyAgLm5hdi1jb2xsYXBzZSAubmF2ID4gbGkgPiBhLAorICAubmF2LWNvbGxh
cHNlIC5kcm9wZG93bi1tZW51IGEgeworICAgIHBhZGRpbmc6IDlweCAxNXB4OworICAgIGZvbnQt
d2VpZ2h0OiBib2xkOworICAgIGNvbG9yOiAjNzc3Nzc3OworICAgIC13ZWJraXQtYm9yZGVyLXJh
ZGl1czogM3B4OworICAgICAgIC1tb3otYm9yZGVyLXJhZGl1czogM3B4OworICAgICAgICAgICAg
Ym9yZGVyLXJhZGl1czogM3B4OworICB9CisgIC5uYXYtY29sbGFwc2UgLmJ0biB7CisgICAgcGFk
ZGluZzogNHB4IDEwcHggNHB4OworICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgICAgLXdlYmtp
dC1ib3JkZXItcmFkaXVzOiA0cHg7CisgICAgICAgLW1vei1ib3JkZXItcmFkaXVzOiA0cHg7Cisg
ICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CisgIH0KKyAgLm5hdi1jb2xsYXBzZSAuZHJv
cGRvd24tbWVudSBsaSArIGxpIGEgeworICAgIG1hcmdpbi1ib3R0b206IDJweDsKKyAgfQorICAu
bmF2LWNvbGxhcHNlIC5uYXYgPiBsaSA+IGE6aG92ZXIsCisgIC5uYXYtY29sbGFwc2UgLmRyb3Bk
b3duLW1lbnUgYTpob3ZlciB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI2YyZjJmMjsKKyAgfQor
ICAubmF2YmFyLWludmVyc2UgLm5hdi1jb2xsYXBzZSAubmF2ID4gbGkgPiBhLAorICAubmF2YmFy
LWludmVyc2UgLm5hdi1jb2xsYXBzZSAuZHJvcGRvd24tbWVudSBhIHsKKyAgICBjb2xvcjogIzk5
OTk5OTsKKyAgfQorICAubmF2YmFyLWludmVyc2UgLm5hdi1jb2xsYXBzZSAubmF2ID4gbGkgPiBh
OmhvdmVyLAorICAubmF2YmFyLWludmVyc2UgLm5hdi1jb2xsYXBzZSAuZHJvcGRvd24tbWVudSBh
OmhvdmVyIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTExMTExOworICB9CisgIC5uYXYtY29s
bGFwc2UuaW4gLmJ0bi1ncm91cCB7CisgICAgcGFkZGluZzogMDsKKyAgICBtYXJnaW4tdG9wOiA1
cHg7CisgIH0KKyAgLm5hdi1jb2xsYXBzZSAuZHJvcGRvd24tbWVudSB7CisgICAgcG9zaXRpb246
IHN0YXRpYzsKKyAgICB0b3A6IGF1dG87CisgICAgbGVmdDogYXV0bzsKKyAgICBkaXNwbGF5OiBu
b25lOworICAgIGZsb2F0OiBub25lOworICAgIG1heC13aWR0aDogbm9uZTsKKyAgICBwYWRkaW5n
OiAwOworICAgIG1hcmdpbjogMCAxNXB4OworICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFy
ZW50OworICAgIGJvcmRlcjogbm9uZTsKKyAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDA7Cisg
ICAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAwOworICAgICAgICAgICAgYm9yZGVyLXJhZGl1czog
MDsKKyAgICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7CisgICAgICAgLW1vei1ib3gtc2hhZG93
OiBub25lOworICAgICAgICAgICAgYm94LXNoYWRvdzogbm9uZTsKKyAgfQorICAubmF2LWNvbGxh
cHNlIC5vcGVuID4gLmRyb3Bkb3duLW1lbnUgeworICAgIGRpc3BsYXk6IGJsb2NrOworICB9Cisg
IC5uYXYtY29sbGFwc2UgLmRyb3Bkb3duLW1lbnU6YmVmb3JlLAorICAubmF2LWNvbGxhcHNlIC5k
cm9wZG93bi1tZW51OmFmdGVyIHsKKyAgICBkaXNwbGF5OiBub25lOworICB9CisgIC5uYXYtY29s
bGFwc2UgLmRyb3Bkb3duLW1lbnUgLmRpdmlkZXIgeworICAgIGRpc3BsYXk6IG5vbmU7CisgIH0K
KyAgLm5hdi1jb2xsYXBzZSAubmF2ID4gbGkgPiAuZHJvcGRvd24tbWVudTpiZWZvcmUsCisgIC5u
YXYtY29sbGFwc2UgLm5hdiA+IGxpID4gLmRyb3Bkb3duLW1lbnU6YWZ0ZXIgeworICAgIGRpc3Bs
YXk6IG5vbmU7CisgIH0KKyAgLm5hdi1jb2xsYXBzZSAubmF2YmFyLWZvcm0sCisgIC5uYXYtY29s
bGFwc2UgLm5hdmJhci1zZWFyY2ggeworICAgIGZsb2F0OiBub25lOworICAgIHBhZGRpbmc6IDEw
cHggMTVweDsKKyAgICBtYXJnaW46IDEwcHggMDsKKyAgICBib3JkZXItdG9wOiAxcHggc29saWQg
I2YyZjJmMjsKKyAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YyZjJmMjsKKyAgICAtd2Vi
a2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpLCAw
IDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKKyAgICAgICAtbW96LWJveC1zaGFkb3c6
IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpLCAwIDFweCAwIHJnYmEoMjU1
LCAyNTUsIDI1NSwgMC4xKTsKKyAgICAgICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAg
cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpLCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4x
KTsKKyAgfQorICAubmF2YmFyLWludmVyc2UgLm5hdi1jb2xsYXBzZSAubmF2YmFyLWZvcm0sCisg
IC5uYXZiYXItaW52ZXJzZSAubmF2LWNvbGxhcHNlIC5uYXZiYXItc2VhcmNoIHsKKyAgICBib3Jk
ZXItdG9wLWNvbG9yOiAjMTExMTExOworICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICMxMTExMTE7
CisgIH0KKyAgLm5hdmJhciAubmF2LWNvbGxhcHNlIC5uYXYucHVsbC1yaWdodCB7CisgICAgZmxv
YXQ6IG5vbmU7CisgICAgbWFyZ2luLWxlZnQ6IDA7CisgIH0KKyAgLm5hdi1jb2xsYXBzZSwKKyAg
Lm5hdi1jb2xsYXBzZS5jb2xsYXBzZSB7CisgICAgaGVpZ2h0OiAwOworICAgIG92ZXJmbG93OiBo
aWRkZW47CisgIH0KKyAgLm5hdmJhciAuYnRuLW5hdmJhciB7CisgICAgZGlzcGxheTogYmxvY2s7
CisgIH0KKyAgLm5hdmJhci1zdGF0aWMgLm5hdmJhci1pbm5lciB7CisgICAgcGFkZGluZy1yaWdo
dDogMTBweDsKKyAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7CisgIH0KK30KKworQG1lZGlhIChtaW4t
d2lkdGg6IDk4MHB4KSB7CisgIC5uYXYtY29sbGFwc2UuY29sbGFwc2UgeworICAgIGhlaWdodDog
YXV0byAhaW1wb3J0YW50OworICAgIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7CisgIH0K
K30KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEv
cmVzb3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvYm9vdHN0cmFwL2Nzcy9i
b290c3RyYXAtcmVzcG9uc2l2ZS5taW4uY3NzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9T
cGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9i
b290c3RyYXAvY3NzL2Jvb3RzdHJhcC1yZXNwb25zaXZlLm1pbi5jc3MKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWNi
ODMzZmYwODJmZWM3MjZkODJhMzdlN2YwYmRhYWYxMzZiMGYzYgotLS0gL2Rldi9udWxsCisrKyBi
L1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdo
dGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvYm9vdHN0cmFwL2Nzcy9ib290c3RyYXAtcmVzcG9u
c2l2ZS5taW4uY3NzCkBAIC0wLDAgKzEsOSBAQAorLyohCisgKiBCb290c3RyYXAgUmVzcG9uc2l2
ZSB2Mi4yLjIKKyAqCisgKiBDb3B5cmlnaHQgMjAxMiBUd2l0dGVyLCBJbmMKKyAqIExpY2Vuc2Vk
IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSB2Mi4wCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcv
bGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBEZXNpZ25lZCBhbmQgYnVpbHQgd2l0aCBhbGwg
dGhlIGxvdmUgaW4gdGhlIHdvcmxkIEB0d2l0dGVyIGJ5IEBtZG8gYW5kIEBmYXQuCisgKi9ALW1z
LXZpZXdwb3J0e3dpZHRoOmRldmljZS13aWR0aH0uY2xlYXJmaXh7Knpvb206MX0uY2xlYXJmaXg6
YmVmb3JlLC5jbGVhcmZpeDphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVu
dDoiIn0uY2xlYXJmaXg6YWZ0ZXJ7Y2xlYXI6Ym90aH0uaGlkZS10ZXh0e2ZvbnQ6MC8wIGE7Y29s
b3I6dHJhbnNwYXJlbnQ7dGV4dC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFy
ZW50O2JvcmRlcjowfS5pbnB1dC1ibG9jay1sZXZlbHtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7
bWluLWhlaWdodDozMHB4Oy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNp
emluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH0uaGlkZGVue2Rpc3BsYXk6bm9u
ZTt2aXNpYmlsaXR5OmhpZGRlbn0udmlzaWJsZS1waG9uZXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50
fS52aXNpYmxlLXRhYmxldHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS5oaWRkZW4tZGVza3RvcHtk
aXNwbGF5Om5vbmUhaW1wb3J0YW50fS52aXNpYmxlLWRlc2t0b3B7ZGlzcGxheTppbmhlcml0IWlt
cG9ydGFudH1AbWVkaWEobWluLXdpZHRoOjc2OHB4KSBhbmQgKG1heC13aWR0aDo5NzlweCl7Lmhp
ZGRlbi1kZXNrdG9we2Rpc3BsYXk6aW5oZXJpdCFpbXBvcnRhbnR9LnZpc2libGUtZGVza3RvcHtk
aXNwbGF5Om5vbmUhaW1wb3J0YW50fS52aXNpYmxlLXRhYmxldHtkaXNwbGF5OmluaGVyaXQhaW1w
b3J0YW50fS5oaWRkZW4tdGFibGV0e2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYShtYXgt
d2lkdGg6NzY3cHgpey5oaWRkZW4tZGVza3RvcHtkaXNwbGF5OmluaGVyaXQhaW1wb3J0YW50fS52
aXNpYmxlLWRlc2t0b3B7ZGlzcGxheTpub25lIWltcG9ydGFudH0udmlzaWJsZS1waG9uZXtkaXNw
bGF5OmluaGVyaXQhaW1wb3J0YW50fS5oaWRkZW4tcGhvbmV7ZGlzcGxheTpub25lIWltcG9ydGFu
dH19QG1lZGlhKG1pbi13aWR0aDoxMjAwcHgpey5yb3d7bWFyZ2luLWxlZnQ6LTMwcHg7Knpvb206
MX0ucm93OmJlZm9yZSwucm93OmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250
ZW50OiIifS5yb3c6YWZ0ZXJ7Y2xlYXI6Ym90aH1bY2xhc3MqPSJzcGFuIl17ZmxvYXQ6bGVmdDtt
aW4taGVpZ2h0OjFweDttYXJnaW4tbGVmdDozMHB4fS5jb250YWluZXIsLm5hdmJhci1zdGF0aWMt
dG9wIC5jb250YWluZXIsLm5hdmJhci1maXhlZC10b3AgLmNvbnRhaW5lciwubmF2YmFyLWZpeGVk
LWJvdHRvbSAuY29udGFpbmVye3dpZHRoOjExNzBweH0uc3BhbjEye3dpZHRoOjExNzBweH0uc3Bh
bjExe3dpZHRoOjEwNzBweH0uc3BhbjEwe3dpZHRoOjk3MHB4fS5zcGFuOXt3aWR0aDo4NzBweH0u
c3Bhbjh7d2lkdGg6NzcwcHh9LnNwYW43e3dpZHRoOjY3MHB4fS5zcGFuNnt3aWR0aDo1NzBweH0u
c3BhbjV7d2lkdGg6NDcwcHh9LnNwYW40e3dpZHRoOjM3MHB4fS5zcGFuM3t3aWR0aDoyNzBweH0u
c3BhbjJ7d2lkdGg6MTcwcHh9LnNwYW4xe3dpZHRoOjcwcHh9Lm9mZnNldDEye21hcmdpbi1sZWZ0
OjEyMzBweH0ub2Zmc2V0MTF7bWFyZ2luLWxlZnQ6MTEzMHB4fS5vZmZzZXQxMHttYXJnaW4tbGVm
dDoxMDMwcHh9Lm9mZnNldDl7bWFyZ2luLWxlZnQ6OTMwcHh9Lm9mZnNldDh7bWFyZ2luLWxlZnQ6
ODMwcHh9Lm9mZnNldDd7bWFyZ2luLWxlZnQ6NzMwcHh9Lm9mZnNldDZ7bWFyZ2luLWxlZnQ6NjMw
cHh9Lm9mZnNldDV7bWFyZ2luLWxlZnQ6NTMwcHh9Lm9mZnNldDR7bWFyZ2luLWxlZnQ6NDMwcHh9
Lm9mZnNldDN7bWFyZ2luLWxlZnQ6MzMwcHh9Lm9mZnNldDJ7bWFyZ2luLWxlZnQ6MjMwcHh9Lm9m
ZnNldDF7bWFyZ2luLWxlZnQ6MTMwcHh9LnJvdy1mbHVpZHt3aWR0aDoxMDAlOyp6b29tOjF9LnJv
dy1mbHVpZDpiZWZvcmUsLnJvdy1mbHVpZDphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0
OjA7Y29udGVudDoiIn0ucm93LWZsdWlkOmFmdGVye2NsZWFyOmJvdGh9LnJvdy1mbHVpZCBbY2xh
c3MqPSJzcGFuIl17ZGlzcGxheTpibG9jaztmbG9hdDpsZWZ0O3dpZHRoOjEwMCU7bWluLWhlaWdo
dDozMHB4O21hcmdpbi1sZWZ0OjIuNTY0MTAyNTY0MTAyNTY0JTsqbWFyZ2luLWxlZnQ6Mi41MTA5
MTEwNzQ3NDA4NjE2JTstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXpp
bmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LnJvdy1mbHVpZCBbY2xhc3MqPSJz
cGFuIl06Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MH0ucm93LWZsdWlkIC5jb250cm9scy1yb3cg
W2NsYXNzKj0ic3BhbiJdK1tjbGFzcyo9InNwYW4iXXttYXJnaW4tbGVmdDoyLjU2NDEwMjU2NDEw
MjU2NCV9LnJvdy1mbHVpZCAuc3BhbjEye3dpZHRoOjEwMCU7KndpZHRoOjk5Ljk0NjgwODUxMDYz
ODI5JX0ucm93LWZsdWlkIC5zcGFuMTF7d2lkdGg6OTEuNDUyOTkxNDUyOTkxNDUlOyp3aWR0aDo5
MS4zOTk3OTk5NjM2Mjk3NSV9LnJvdy1mbHVpZCAuc3BhbjEwe3dpZHRoOjgyLjkwNTk4MjkwNTk4
MjkxJTsqd2lkdGg6ODIuODUyNzkxNDE2NjIxMiV9LnJvdy1mbHVpZCAuc3Bhbjl7d2lkdGg6NzQu
MzU4OTc0MzU4OTc0MzYlOyp3aWR0aDo3NC4zMDU3ODI4Njk2MTI2NiV9LnJvdy1mbHVpZCAuc3Bh
bjh7d2lkdGg6NjUuODExOTY1ODExOTY1ODIlOyp3aWR0aDo2NS43NTg3NzQzMjI2MDQxMSV9LnJv
dy1mbHVpZCAuc3Bhbjd7d2lkdGg6NTcuMjY0OTU3MjY0OTU3MjYlOyp3aWR0aDo1Ny4yMTE3NjU3
NzU1OTU1NiV9LnJvdy1mbHVpZCAuc3BhbjZ7d2lkdGg6NDguNzE3OTQ4NzE3OTQ4NzE1JTsqd2lk
dGg6NDguNjY0NzU3MjI4NTg3MDE0JX0ucm93LWZsdWlkIC5zcGFuNXt3aWR0aDo0MC4xNzA5NDAx
NzA5NDAxNyU7KndpZHRoOjQwLjExNzc0ODY4MTU3ODQ3JX0ucm93LWZsdWlkIC5zcGFuNHt3aWR0
aDozMS42MjM5MzE2MjM5MzE2MjUlOyp3aWR0aDozMS41NzA3NDAxMzQ1Njk5MjQlfS5yb3ctZmx1
aWQgLnNwYW4ze3dpZHRoOjIzLjA3NjkyMzA3NjkyMzA3NyU7KndpZHRoOjIzLjAyMzczMTU4NzU2
MTM3NSV9LnJvdy1mbHVpZCAuc3BhbjJ7d2lkdGg6MTQuNTI5OTE0NTI5OTE0NTMlOyp3aWR0aDox
NC40NzY3MjMwNDA1NTI4MjglfS5yb3ctZmx1aWQgLnNwYW4xe3dpZHRoOjUuOTgyOTA1OTgyOTA1
OTgzJTsqd2lkdGg6NS45Mjk3MTQ0OTM1NDQyODElfS5yb3ctZmx1aWQgLm9mZnNldDEye21hcmdp
bi1sZWZ0OjEwNS4xMjgyMDUxMjgyMDUxMiU7Km1hcmdpbi1sZWZ0OjEwNS4wMjE4MjIxNDk0ODE3
MSV9LnJvdy1mbHVpZCAub2Zmc2V0MTI6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MTAyLjU2NDEw
MjU2NDEwMjU3JTsqbWFyZ2luLWxlZnQ6MTAyLjQ1NzcxOTU4NTM3OTE1JX0ucm93LWZsdWlkIC5v
ZmZzZXQxMXttYXJnaW4tbGVmdDo5Ni41ODExOTY1ODExOTY1OCU7Km1hcmdpbi1sZWZ0Ojk2LjQ3
NDgxMzYwMjQ3MzE2JX0ucm93LWZsdWlkIC5vZmZzZXQxMTpmaXJzdC1jaGlsZHttYXJnaW4tbGVm
dDo5NC4wMTcwOTQwMTcwOTQwMiU7Km1hcmdpbi1sZWZ0OjkzLjkxMDcxMTAzODM3MDYxJX0ucm93
LWZsdWlkIC5vZmZzZXQxMHttYXJnaW4tbGVmdDo4OC4wMzQxODgwMzQxODgwMyU7Km1hcmdpbi1s
ZWZ0Ojg3LjkyNzgwNTA1NTQ2NDYyJX0ucm93LWZsdWlkIC5vZmZzZXQxMDpmaXJzdC1jaGlsZHtt
YXJnaW4tbGVmdDo4NS40NzAwODU0NzAwODU0OCU7Km1hcmdpbi1sZWZ0Ojg1LjM2MzcwMjQ5MTM2
MjA2JX0ucm93LWZsdWlkIC5vZmZzZXQ5e21hcmdpbi1sZWZ0Ojc5LjQ4NzE3OTQ4NzE3OTQ5JTsq
bWFyZ2luLWxlZnQ6NzkuMzgwNzk2NTA4NDU2MDclfS5yb3ctZmx1aWQgLm9mZnNldDk6Zmlyc3Qt
Y2hpbGR7bWFyZ2luLWxlZnQ6NzYuOTIzMDc2OTIzMDc2OTMlOyptYXJnaW4tbGVmdDo3Ni44MTY2
OTM5NDQzNTM1MiV9LnJvdy1mbHVpZCAub2Zmc2V0OHttYXJnaW4tbGVmdDo3MC45NDAxNzA5NDAx
NzA5NCU7Km1hcmdpbi1sZWZ0OjcwLjgzMzc4Nzk2MTQ0NzUzJX0ucm93LWZsdWlkIC5vZmZzZXQ4
OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjY4LjM3NjA2ODM3NjA2ODM5JTsqbWFyZ2luLWxlZnQ6
NjguMjY5Njg1Mzk3MzQ0OTclfS5yb3ctZmx1aWQgLm9mZnNldDd7bWFyZ2luLWxlZnQ6NjIuMzkz
MTYyMzkzMTYyMzg1JTsqbWFyZ2luLWxlZnQ6NjIuMjg2Nzc5NDE0NDM4OTklfS5yb3ctZmx1aWQg
Lm9mZnNldDc6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NTkuODI5MDU5ODI5MDU5ODIlOyptYXJn
aW4tbGVmdDo1OS43MjI2NzY4NTAzMzY0MiV9LnJvdy1mbHVpZCAub2Zmc2V0NnttYXJnaW4tbGVm
dDo1My44NDYxNTM4NDYxNTM4NCU7Km1hcmdpbi1sZWZ0OjUzLjczOTc3MDg2NzQzMDQ0NCV9LnJv
dy1mbHVpZCAub2Zmc2V0NjpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo1MS4yODIwNTEyODIwNTEy
OCU7Km1hcmdpbi1sZWZ0OjUxLjE3NTY2ODMwMzMyNzg3NSV9LnJvdy1mbHVpZCAub2Zmc2V0NXtt
YXJnaW4tbGVmdDo0NS4yOTkxNDUyOTkxNDUyOTUlOyptYXJnaW4tbGVmdDo0NS4xOTI3NjIzMjA0
MjE5JX0ucm93LWZsdWlkIC5vZmZzZXQ1OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjQyLjczNTA0
MjczNTA0MjczJTsqbWFyZ2luLWxlZnQ6NDIuNjI4NjU5NzU2MzE5MzMlfS5yb3ctZmx1aWQgLm9m
ZnNldDR7bWFyZ2luLWxlZnQ6MzYuNzUyMTM2NzUyMTM2NzUlOyptYXJnaW4tbGVmdDozNi42NDU3
NTM3NzM0MTMzNTQlfS5yb3ctZmx1aWQgLm9mZnNldDQ6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6
MzQuMTg4MDM0MTg4MDM0MTklOyptYXJnaW4tbGVmdDozNC4wODE2NTEyMDkzMTA3ODUlfS5yb3ct
Zmx1aWQgLm9mZnNldDN7bWFyZ2luLWxlZnQ6MjguMjA1MTI4MjA1MTI4MjA0JTsqbWFyZ2luLWxl
ZnQ6MjguMDk4NzQ1MjI2NDA0OCV9LnJvdy1mbHVpZCAub2Zmc2V0MzpmaXJzdC1jaGlsZHttYXJn
aW4tbGVmdDoyNS42NDEwMjU2NDEwMjU2NDIlOyptYXJnaW4tbGVmdDoyNS41MzQ2NDI2NjIzMDIy
NCV9LnJvdy1mbHVpZCAub2Zmc2V0MnttYXJnaW4tbGVmdDoxOS42NTgxMTk2NTgxMTk2NiU7Km1h
cmdpbi1sZWZ0OjE5LjU1MTczNjY3OTM5NjI1NyV9LnJvdy1mbHVpZCAub2Zmc2V0MjpmaXJzdC1j
aGlsZHttYXJnaW4tbGVmdDoxNy4wOTQwMTcwOTQwMTcwOTQlOyptYXJnaW4tbGVmdDoxNi45ODc2
MzQxMTUyOTM2OSV9LnJvdy1mbHVpZCAub2Zmc2V0MXttYXJnaW4tbGVmdDoxMS4xMTExMTExMTEx
MTExMSU7Km1hcmdpbi1sZWZ0OjExLjAwNDcyODEzMjM4NzcwOCV9LnJvdy1mbHVpZCAub2Zmc2V0
MTpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo4LjU0NzAwODU0NzAwODU0NyU7Km1hcmdpbi1sZWZ0
OjguNDQwNjI1NTY4Mjg1MTQyJX1pbnB1dCx0ZXh0YXJlYSwudW5lZGl0YWJsZS1pbnB1dHttYXJn
aW4tbGVmdDowfS5jb250cm9scy1yb3cgW2NsYXNzKj0ic3BhbiJdK1tjbGFzcyo9InNwYW4iXXtt
YXJnaW4tbGVmdDozMHB4fWlucHV0LnNwYW4xMix0ZXh0YXJlYS5zcGFuMTIsLnVuZWRpdGFibGUt
aW5wdXQuc3BhbjEye3dpZHRoOjExNTZweH1pbnB1dC5zcGFuMTEsdGV4dGFyZWEuc3BhbjExLC51
bmVkaXRhYmxlLWlucHV0LnNwYW4xMXt3aWR0aDoxMDU2cHh9aW5wdXQuc3BhbjEwLHRleHRhcmVh
LnNwYW4xMCwudW5lZGl0YWJsZS1pbnB1dC5zcGFuMTB7d2lkdGg6OTU2cHh9aW5wdXQuc3Bhbjks
dGV4dGFyZWEuc3BhbjksLnVuZWRpdGFibGUtaW5wdXQuc3Bhbjl7d2lkdGg6ODU2cHh9aW5wdXQu
c3BhbjgsdGV4dGFyZWEuc3BhbjgsLnVuZWRpdGFibGUtaW5wdXQuc3Bhbjh7d2lkdGg6NzU2cHh9
aW5wdXQuc3BhbjcsdGV4dGFyZWEuc3BhbjcsLnVuZWRpdGFibGUtaW5wdXQuc3Bhbjd7d2lkdGg6
NjU2cHh9aW5wdXQuc3BhbjYsdGV4dGFyZWEuc3BhbjYsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjZ7
d2lkdGg6NTU2cHh9aW5wdXQuc3BhbjUsdGV4dGFyZWEuc3BhbjUsLnVuZWRpdGFibGUtaW5wdXQu
c3BhbjV7d2lkdGg6NDU2cHh9aW5wdXQuc3BhbjQsdGV4dGFyZWEuc3BhbjQsLnVuZWRpdGFibGUt
aW5wdXQuc3BhbjR7d2lkdGg6MzU2cHh9aW5wdXQuc3BhbjMsdGV4dGFyZWEuc3BhbjMsLnVuZWRp
dGFibGUtaW5wdXQuc3BhbjN7d2lkdGg6MjU2cHh9aW5wdXQuc3BhbjIsdGV4dGFyZWEuc3BhbjIs
LnVuZWRpdGFibGUtaW5wdXQuc3BhbjJ7d2lkdGg6MTU2cHh9aW5wdXQuc3BhbjEsdGV4dGFyZWEu
c3BhbjEsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjF7d2lkdGg6NTZweH0udGh1bWJuYWlsc3ttYXJn
aW4tbGVmdDotMzBweH0udGh1bWJuYWlscz5saXttYXJnaW4tbGVmdDozMHB4fS5yb3ctZmx1aWQg
LnRodW1ibmFpbHN7bWFyZ2luLWxlZnQ6MH19QG1lZGlhKG1pbi13aWR0aDo3NjhweCkgYW5kICht
YXgtd2lkdGg6OTc5cHgpey5yb3d7bWFyZ2luLWxlZnQ6LTIwcHg7Knpvb206MX0ucm93OmJlZm9y
ZSwucm93OmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5yb3c6
YWZ0ZXJ7Y2xlYXI6Ym90aH1bY2xhc3MqPSJzcGFuIl17ZmxvYXQ6bGVmdDttaW4taGVpZ2h0OjFw
eDttYXJnaW4tbGVmdDoyMHB4fS5jb250YWluZXIsLm5hdmJhci1zdGF0aWMtdG9wIC5jb250YWlu
ZXIsLm5hdmJhci1maXhlZC10b3AgLmNvbnRhaW5lciwubmF2YmFyLWZpeGVkLWJvdHRvbSAuY29u
dGFpbmVye3dpZHRoOjcyNHB4fS5zcGFuMTJ7d2lkdGg6NzI0cHh9LnNwYW4xMXt3aWR0aDo2NjJw
eH0uc3BhbjEwe3dpZHRoOjYwMHB4fS5zcGFuOXt3aWR0aDo1MzhweH0uc3Bhbjh7d2lkdGg6NDc2
cHh9LnNwYW43e3dpZHRoOjQxNHB4fS5zcGFuNnt3aWR0aDozNTJweH0uc3BhbjV7d2lkdGg6Mjkw
cHh9LnNwYW40e3dpZHRoOjIyOHB4fS5zcGFuM3t3aWR0aDoxNjZweH0uc3BhbjJ7d2lkdGg6MTA0
cHh9LnNwYW4xe3dpZHRoOjQycHh9Lm9mZnNldDEye21hcmdpbi1sZWZ0Ojc2NHB4fS5vZmZzZXQx
MXttYXJnaW4tbGVmdDo3MDJweH0ub2Zmc2V0MTB7bWFyZ2luLWxlZnQ6NjQwcHh9Lm9mZnNldDl7
bWFyZ2luLWxlZnQ6NTc4cHh9Lm9mZnNldDh7bWFyZ2luLWxlZnQ6NTE2cHh9Lm9mZnNldDd7bWFy
Z2luLWxlZnQ6NDU0cHh9Lm9mZnNldDZ7bWFyZ2luLWxlZnQ6MzkycHh9Lm9mZnNldDV7bWFyZ2lu
LWxlZnQ6MzMwcHh9Lm9mZnNldDR7bWFyZ2luLWxlZnQ6MjY4cHh9Lm9mZnNldDN7bWFyZ2luLWxl
ZnQ6MjA2cHh9Lm9mZnNldDJ7bWFyZ2luLWxlZnQ6MTQ0cHh9Lm9mZnNldDF7bWFyZ2luLWxlZnQ6
ODJweH0ucm93LWZsdWlke3dpZHRoOjEwMCU7Knpvb206MX0ucm93LWZsdWlkOmJlZm9yZSwucm93
LWZsdWlkOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5yb3ct
Zmx1aWQ6YWZ0ZXJ7Y2xlYXI6Ym90aH0ucm93LWZsdWlkIFtjbGFzcyo9InNwYW4iXXtkaXNwbGF5
OmJsb2NrO2Zsb2F0OmxlZnQ7d2lkdGg6MTAwJTttaW4taGVpZ2h0OjMwcHg7bWFyZ2luLWxlZnQ6
Mi43NjI0MzA5MzkyMjY1MTk0JTsqbWFyZ2luLWxlZnQ6Mi43MDkyMzk0NDk4NjQ4MTclOy13ZWJr
aXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1z
aXppbmc6Ym9yZGVyLWJveH0ucm93LWZsdWlkIFtjbGFzcyo9InNwYW4iXTpmaXJzdC1jaGlsZHtt
YXJnaW4tbGVmdDowfS5yb3ctZmx1aWQgLmNvbnRyb2xzLXJvdyBbY2xhc3MqPSJzcGFuIl0rW2Ns
YXNzKj0ic3BhbiJde21hcmdpbi1sZWZ0OjIuNzYyNDMwOTM5MjI2NTE5NCV9LnJvdy1mbHVpZCAu
c3BhbjEye3dpZHRoOjEwMCU7KndpZHRoOjk5Ljk0NjgwODUxMDYzODI5JX0ucm93LWZsdWlkIC5z
cGFuMTF7d2lkdGg6OTEuNDM2NDY0MDg4Mzk3NzglOyp3aWR0aDo5MS4zODMyNzI1OTkwMzYwOCV9
LnJvdy1mbHVpZCAuc3BhbjEwe3dpZHRoOjgyLjg3MjkyODE3Njc5NTU4JTsqd2lkdGg6ODIuODE5
NzM2Njg3NDMzODclfS5yb3ctZmx1aWQgLnNwYW45e3dpZHRoOjc0LjMwOTM5MjI2NTE5MzM3JTsq
d2lkdGg6NzQuMjU2MjAwNzc1ODMxNjYlfS5yb3ctZmx1aWQgLnNwYW44e3dpZHRoOjY1Ljc0NTg1
NjM1MzU5MTE3JTsqd2lkdGg6NjUuNjkyNjY0ODY0MjI5NDYlfS5yb3ctZmx1aWQgLnNwYW43e3dp
ZHRoOjU3LjE4MjMyMDQ0MTk4ODk1JTsqd2lkdGg6NTcuMTI5MTI4OTUyNjI3MjUlfS5yb3ctZmx1
aWQgLnNwYW42e3dpZHRoOjQ4LjYxODc4NDUzMDM4Njc0JTsqd2lkdGg6NDguNTY1NTkzMDQxMDI1
MDQlfS5yb3ctZmx1aWQgLnNwYW41e3dpZHRoOjQwLjA1NTI0ODYxODc4NDUzJTsqd2lkdGg6NDAu
MDAyMDU3MTI5NDIyODMlfS5yb3ctZmx1aWQgLnNwYW40e3dpZHRoOjMxLjQ5MTcxMjcwNzE4MjMy
MyU7KndpZHRoOjMxLjQzODUyMTIxNzgyMDYyJX0ucm93LWZsdWlkIC5zcGFuM3t3aWR0aDoyMi45
MjgxNzY3OTU1ODAxMSU7KndpZHRoOjIyLjg3NDk4NTMwNjIxODQxJX0ucm93LWZsdWlkIC5zcGFu
Mnt3aWR0aDoxNC4zNjQ2NDA4ODM5Nzc5JTsqd2lkdGg6MTQuMzExNDQ5Mzk0NjE2MTk5JX0ucm93
LWZsdWlkIC5zcGFuMXt3aWR0aDo1LjgwMTEwNDk3MjM3NTY5MSU7KndpZHRoOjUuNzQ3OTEzNDgz
MDEzOTg4JX0ucm93LWZsdWlkIC5vZmZzZXQxMnttYXJnaW4tbGVmdDoxMDUuNTI0ODYxODc4NDUz
MDQlOyptYXJnaW4tbGVmdDoxMDUuNDE4NDc4ODk5NzI5NjIlfS5yb3ctZmx1aWQgLm9mZnNldDEy
OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjEwMi43NjI0MzA5MzkyMjY1MiU7Km1hcmdpbi1sZWZ0
OjEwMi42NTYwNDc5NjA1MDMxJX0ucm93LWZsdWlkIC5vZmZzZXQxMXttYXJnaW4tbGVmdDo5Ni45
NjEzMjU5NjY4NTA4MiU7Km1hcmdpbi1sZWZ0Ojk2Ljg1NDk0Mjk4ODEyNzQlfS5yb3ctZmx1aWQg
Lm9mZnNldDExOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0Ojk0LjE5ODg5NTAyNzYyNDMlOyptYXJn
aW4tbGVmdDo5NC4wOTI1MTIwNDg5MDA4OSV9LnJvdy1mbHVpZCAub2Zmc2V0MTB7bWFyZ2luLWxl
ZnQ6ODguMzk3NzkwMDU1MjQ4NjIlOyptYXJnaW4tbGVmdDo4OC4yOTE0MDcwNzY1MjUyJX0ucm93
LWZsdWlkIC5vZmZzZXQxMDpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo4NS42MzUzNTkxMTYwMjIx
JTsqbWFyZ2luLWxlZnQ6ODUuNTI4OTc2MTM3Mjk4NjglfS5yb3ctZmx1aWQgLm9mZnNldDl7bWFy
Z2luLWxlZnQ6NzkuODM0MjU0MTQzNjQ2NCU7Km1hcmdpbi1sZWZ0Ojc5LjcyNzg3MTE2NDkyMjk5
JX0ucm93LWZsdWlkIC5vZmZzZXQ5OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0Ojc3LjA3MTgyMzIw
NDQxOTg5JTsqbWFyZ2luLWxlZnQ6NzYuOTY1NDQwMjI1Njk2NDclfS5yb3ctZmx1aWQgLm9mZnNl
dDh7bWFyZ2luLWxlZnQ6NzEuMjcwNzE4MjMyMDQ0MiU7Km1hcmdpbi1sZWZ0OjcxLjE2NDMzNTI1
MzMyMDc5JX0ucm93LWZsdWlkIC5vZmZzZXQ4OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjY4LjUw
ODI4NzI5MjgxNzY4JTsqbWFyZ2luLWxlZnQ6NjguNDAxOTA0MzE0MDk0MjclfS5yb3ctZmx1aWQg
Lm9mZnNldDd7bWFyZ2luLWxlZnQ6NjIuNzA3MTgyMzIwNDQxOTklOyptYXJnaW4tbGVmdDo2Mi42
MDA3OTkzNDE3MTg1ODQlfS5yb3ctZmx1aWQgLm9mZnNldDc6Zmlyc3QtY2hpbGR7bWFyZ2luLWxl
ZnQ6NTkuOTQ0NzUxMzgxMjE1NDclOyptYXJnaW4tbGVmdDo1OS44MzgzNjg0MDI0OTIwNjUlfS5y
b3ctZmx1aWQgLm9mZnNldDZ7bWFyZ2luLWxlZnQ6NTQuMTQzNjQ2NDA4ODM5NzglOyptYXJnaW4t
bGVmdDo1NC4wMzcyNjM0MzAxMTYzNzYlfS5yb3ctZmx1aWQgLm9mZnNldDY6Zmlyc3QtY2hpbGR7
bWFyZ2luLWxlZnQ6NTEuMzgxMjE1NDY5NjEzMjYlOyptYXJnaW4tbGVmdDo1MS4yNzQ4MzI0OTA4
ODk4NiV9LnJvdy1mbHVpZCAub2Zmc2V0NXttYXJnaW4tbGVmdDo0NS41ODAxMTA0OTcyMzc1NyU7
Km1hcmdpbi1sZWZ0OjQ1LjQ3MzcyNzUxODUxNDE3JX0ucm93LWZsdWlkIC5vZmZzZXQ1OmZpcnN0
LWNoaWxke21hcmdpbi1sZWZ0OjQyLjgxNzY3OTU1ODAxMTA1JTsqbWFyZ2luLWxlZnQ6NDIuNzEx
Mjk2NTc5Mjg3NjUlfS5yb3ctZmx1aWQgLm9mZnNldDR7bWFyZ2luLWxlZnQ6MzcuMDE2NTc0NTg1
NjM1MzYlOyptYXJnaW4tbGVmdDozNi45MTAxOTE2MDY5MTE5NiV9LnJvdy1mbHVpZCAub2Zmc2V0
NDpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDozNC4yNTQxNDM2NDY0MDg4NCU7Km1hcmdpbi1sZWZ0
OjM0LjE0Nzc2MDY2NzY4NTQ0JX0ucm93LWZsdWlkIC5vZmZzZXQze21hcmdpbi1sZWZ0OjI4LjQ1
MzAzODY3NDAzMzE1JTsqbWFyZ2luLWxlZnQ6MjguMzQ2NjU1Njk1MzA5NzQ2JX0ucm93LWZsdWlk
IC5vZmZzZXQzOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjI1LjY5MDYwNzczNDgwNjYzJTsqbWFy
Z2luLWxlZnQ6MjUuNTg0MjI0NzU2MDgzMjI3JX0ucm93LWZsdWlkIC5vZmZzZXQye21hcmdpbi1s
ZWZ0OjE5Ljg4OTUwMjc2MjQzMDk0JTsqbWFyZ2luLWxlZnQ6MTkuNzgzMTE5NzgzNzA3NTM3JX0u
cm93LWZsdWlkIC5vZmZzZXQyOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjE3LjEyNzA3MTgyMzIw
NDQyJTsqbWFyZ2luLWxlZnQ6MTcuMDIwNjg4ODQ0NDgxMDIlfS5yb3ctZmx1aWQgLm9mZnNldDF7
bWFyZ2luLWxlZnQ6MTEuMzI1OTY2ODUwODI4NzMlOyptYXJnaW4tbGVmdDoxMS4yMTk1ODM4NzIx
MDUzMjUlfS5yb3ctZmx1aWQgLm9mZnNldDE6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6OC41NjM1
MzU5MTE2MDIyMSU7Km1hcmdpbi1sZWZ0OjguNDU3MTUyOTMyODc4ODA2JX1pbnB1dCx0ZXh0YXJl
YSwudW5lZGl0YWJsZS1pbnB1dHttYXJnaW4tbGVmdDowfS5jb250cm9scy1yb3cgW2NsYXNzKj0i
c3BhbiJdK1tjbGFzcyo9InNwYW4iXXttYXJnaW4tbGVmdDoyMHB4fWlucHV0LnNwYW4xMix0ZXh0
YXJlYS5zcGFuMTIsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjEye3dpZHRoOjcxMHB4fWlucHV0LnNw
YW4xMSx0ZXh0YXJlYS5zcGFuMTEsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjExe3dpZHRoOjY0OHB4
fWlucHV0LnNwYW4xMCx0ZXh0YXJlYS5zcGFuMTAsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjEwe3dp
ZHRoOjU4NnB4fWlucHV0LnNwYW45LHRleHRhcmVhLnNwYW45LC51bmVkaXRhYmxlLWlucHV0LnNw
YW45e3dpZHRoOjUyNHB4fWlucHV0LnNwYW44LHRleHRhcmVhLnNwYW44LC51bmVkaXRhYmxlLWlu
cHV0LnNwYW44e3dpZHRoOjQ2MnB4fWlucHV0LnNwYW43LHRleHRhcmVhLnNwYW43LC51bmVkaXRh
YmxlLWlucHV0LnNwYW43e3dpZHRoOjQwMHB4fWlucHV0LnNwYW42LHRleHRhcmVhLnNwYW42LC51
bmVkaXRhYmxlLWlucHV0LnNwYW42e3dpZHRoOjMzOHB4fWlucHV0LnNwYW41LHRleHRhcmVhLnNw
YW41LC51bmVkaXRhYmxlLWlucHV0LnNwYW41e3dpZHRoOjI3NnB4fWlucHV0LnNwYW40LHRleHRh
cmVhLnNwYW40LC51bmVkaXRhYmxlLWlucHV0LnNwYW40e3dpZHRoOjIxNHB4fWlucHV0LnNwYW4z
LHRleHRhcmVhLnNwYW4zLC51bmVkaXRhYmxlLWlucHV0LnNwYW4ze3dpZHRoOjE1MnB4fWlucHV0
LnNwYW4yLHRleHRhcmVhLnNwYW4yLC51bmVkaXRhYmxlLWlucHV0LnNwYW4ye3dpZHRoOjkwcHh9
aW5wdXQuc3BhbjEsdGV4dGFyZWEuc3BhbjEsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjF7d2lkdGg6
MjhweH19QG1lZGlhKG1heC13aWR0aDo3NjdweCl7Ym9keXtwYWRkaW5nLXJpZ2h0OjIwcHg7cGFk
ZGluZy1sZWZ0OjIwcHh9Lm5hdmJhci1maXhlZC10b3AsLm5hdmJhci1maXhlZC1ib3R0b20sLm5h
dmJhci1zdGF0aWMtdG9we21hcmdpbi1yaWdodDotMjBweDttYXJnaW4tbGVmdDotMjBweH0uY29u
dGFpbmVyLWZsdWlke3BhZGRpbmc6MH0uZGwtaG9yaXpvbnRhbCBkdHtmbG9hdDpub25lO3dpZHRo
OmF1dG87Y2xlYXI6bm9uZTt0ZXh0LWFsaWduOmxlZnR9LmRsLWhvcml6b250YWwgZGR7bWFyZ2lu
LWxlZnQ6MH0uY29udGFpbmVye3dpZHRoOmF1dG99LnJvdy1mbHVpZHt3aWR0aDoxMDAlfS5yb3cs
LnRodW1ibmFpbHN7bWFyZ2luLWxlZnQ6MH0udGh1bWJuYWlscz5saXtmbG9hdDpub25lO21hcmdp
bi1sZWZ0OjB9W2NsYXNzKj0ic3BhbiJdLC51bmVkaXRhYmxlLWlucHV0W2NsYXNzKj0ic3BhbiJd
LC5yb3ctZmx1aWQgW2NsYXNzKj0ic3BhbiJde2Rpc3BsYXk6YmxvY2s7ZmxvYXQ6bm9uZTt3aWR0
aDoxMDAlO21hcmdpbi1sZWZ0OjA7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1i
b3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94fS5zcGFuMTIsLnJvdy1m
bHVpZCAuc3BhbjEye3dpZHRoOjEwMCU7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1v
ei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94fS5yb3ctZmx1aWQg
W2NsYXNzKj0ib2Zmc2V0Il06Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MH0uaW5wdXQtbGFyZ2Us
LmlucHV0LXhsYXJnZSwuaW5wdXQteHhsYXJnZSxpbnB1dFtjbGFzcyo9InNwYW4iXSxzZWxlY3Rb
Y2xhc3MqPSJzcGFuIl0sdGV4dGFyZWFbY2xhc3MqPSJzcGFuIl0sLnVuZWRpdGFibGUtaW5wdXR7
ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO21pbi1oZWlnaHQ6MzBweDstd2Via2l0LWJveC1zaXpp
bmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRl
ci1ib3h9LmlucHV0LXByZXBlbmQgaW5wdXQsLmlucHV0LWFwcGVuZCBpbnB1dCwuaW5wdXQtcHJl
cGVuZCBpbnB1dFtjbGFzcyo9InNwYW4iXSwuaW5wdXQtYXBwZW5kIGlucHV0W2NsYXNzKj0ic3Bh
biJde2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOmF1dG99LmNvbnRyb2xzLXJvdyBbY2xhc3Mq
PSJzcGFuIl0rW2NsYXNzKj0ic3BhbiJde21hcmdpbi1sZWZ0OjB9Lm1vZGFse3Bvc2l0aW9uOmZp
eGVkO3RvcDoyMHB4O3JpZ2h0OjIwcHg7bGVmdDoyMHB4O3dpZHRoOmF1dG87bWFyZ2luOjB9Lm1v
ZGFsLmZhZGV7dG9wOi0xMDBweH0ubW9kYWwuZmFkZS5pbnt0b3A6MjBweH19QG1lZGlhKG1heC13
aWR0aDo0ODBweCl7Lm5hdi1jb2xsYXBzZXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgw
LDAsMCl9LnBhZ2UtaGVhZGVyIGgxIHNtYWxse2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6MjBw
eH1pbnB1dFt0eXBlPSJjaGVja2JveCJdLGlucHV0W3R5cGU9InJhZGlvIl17Ym9yZGVyOjFweCBz
b2xpZCAjY2NjfS5mb3JtLWhvcml6b250YWwgLmNvbnRyb2wtbGFiZWx7ZmxvYXQ6bm9uZTt3aWR0
aDphdXRvO3BhZGRpbmctdG9wOjA7dGV4dC1hbGlnbjpsZWZ0fS5mb3JtLWhvcml6b250YWwgLmNv
bnRyb2xze21hcmdpbi1sZWZ0OjB9LmZvcm0taG9yaXpvbnRhbCAuY29udHJvbC1saXN0e3BhZGRp
bmctdG9wOjB9LmZvcm0taG9yaXpvbnRhbCAuZm9ybS1hY3Rpb25ze3BhZGRpbmctcmlnaHQ6MTBw
eDtwYWRkaW5nLWxlZnQ6MTBweH0ubWVkaWEgLnB1bGwtbGVmdCwubWVkaWEgLnB1bGwtcmlnaHR7
ZGlzcGxheTpibG9jaztmbG9hdDpub25lO21hcmdpbi1ib3R0b206MTBweH0ubWVkaWEtb2JqZWN0
e21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjB9Lm1vZGFse3RvcDoxMHB4O3JpZ2h0OjEwcHg7
bGVmdDoxMHB4fS5tb2RhbC1oZWFkZXIgLmNsb3Nle3BhZGRpbmc6MTBweDttYXJnaW46LTEwcHh9
LmNhcm91c2VsLWNhcHRpb257cG9zaXRpb246c3RhdGljfX1AbWVkaWEobWF4LXdpZHRoOjk3OXB4
KXtib2R5e3BhZGRpbmctdG9wOjB9Lm5hdmJhci1maXhlZC10b3AsLm5hdmJhci1maXhlZC1ib3R0
b217cG9zaXRpb246c3RhdGljfS5uYXZiYXItZml4ZWQtdG9we21hcmdpbi1ib3R0b206MjBweH0u
bmF2YmFyLWZpeGVkLWJvdHRvbXttYXJnaW4tdG9wOjIwcHh9Lm5hdmJhci1maXhlZC10b3AgLm5h
dmJhci1pbm5lciwubmF2YmFyLWZpeGVkLWJvdHRvbSAubmF2YmFyLWlubmVye3BhZGRpbmc6NXB4
fS5uYXZiYXIgLmNvbnRhaW5lcnt3aWR0aDphdXRvO3BhZGRpbmc6MH0ubmF2YmFyIC5icmFuZHtw
YWRkaW5nLXJpZ2h0OjEwcHg7cGFkZGluZy1sZWZ0OjEwcHg7bWFyZ2luOjAgMCAwIC01cHh9Lm5h
di1jb2xsYXBzZXtjbGVhcjpib3RofS5uYXYtY29sbGFwc2UgLm5hdntmbG9hdDpub25lO21hcmdp
bjowIDAgMTBweH0ubmF2LWNvbGxhcHNlIC5uYXY+bGl7ZmxvYXQ6bm9uZX0ubmF2LWNvbGxhcHNl
IC5uYXY+bGk+YXttYXJnaW4tYm90dG9tOjJweH0ubmF2LWNvbGxhcHNlIC5uYXY+LmRpdmlkZXIt
dmVydGljYWx7ZGlzcGxheTpub25lfS5uYXYtY29sbGFwc2UgLm5hdiAubmF2LWhlYWRlcntjb2xv
cjojNzc3O3RleHQtc2hhZG93Om5vbmV9Lm5hdi1jb2xsYXBzZSAubmF2PmxpPmEsLm5hdi1jb2xs
YXBzZSAuZHJvcGRvd24tbWVudSBhe3BhZGRpbmc6OXB4IDE1cHg7Zm9udC13ZWlnaHQ6Ym9sZDtj
b2xvcjojNzc3Oy13ZWJraXQtYm9yZGVyLXJhZGl1czozcHg7LW1vei1ib3JkZXItcmFkaXVzOjNw
eDtib3JkZXItcmFkaXVzOjNweH0ubmF2LWNvbGxhcHNlIC5idG57cGFkZGluZzo0cHggMTBweCA0
cHg7Zm9udC13ZWlnaHQ6bm9ybWFsOy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3Jk
ZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweH0ubmF2LWNvbGxhcHNlIC5kcm9wZG93bi1t
ZW51IGxpK2xpIGF7bWFyZ2luLWJvdHRvbToycHh9Lm5hdi1jb2xsYXBzZSAubmF2PmxpPmE6aG92
ZXIsLm5hdi1jb2xsYXBzZSAuZHJvcGRvd24tbWVudSBhOmhvdmVye2JhY2tncm91bmQtY29sb3I6
I2YyZjJmMn0ubmF2YmFyLWludmVyc2UgLm5hdi1jb2xsYXBzZSAubmF2PmxpPmEsLm5hdmJhci1p
bnZlcnNlIC5uYXYtY29sbGFwc2UgLmRyb3Bkb3duLW1lbnUgYXtjb2xvcjojOTk5fS5uYXZiYXIt
aW52ZXJzZSAubmF2LWNvbGxhcHNlIC5uYXY+bGk+YTpob3ZlciwubmF2YmFyLWludmVyc2UgLm5h
di1jb2xsYXBzZSAuZHJvcGRvd24tbWVudSBhOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzExMX0u
bmF2LWNvbGxhcHNlLmluIC5idG4tZ3JvdXB7cGFkZGluZzowO21hcmdpbi10b3A6NXB4fS5uYXYt
Y29sbGFwc2UgLmRyb3Bkb3duLW1lbnV7cG9zaXRpb246c3RhdGljO3RvcDphdXRvO2xlZnQ6YXV0
bztkaXNwbGF5Om5vbmU7ZmxvYXQ6bm9uZTttYXgtd2lkdGg6bm9uZTtwYWRkaW5nOjA7bWFyZ2lu
OjAgMTVweDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlcjowOy13ZWJraXQtYm9y
ZGVyLXJhZGl1czowOy1tb3otYm9yZGVyLXJhZGl1czowO2JvcmRlci1yYWRpdXM6MDstd2Via2l0
LWJveC1zaGFkb3c6bm9uZTstbW96LWJveC1zaGFkb3c6bm9uZTtib3gtc2hhZG93Om5vbmV9Lm5h
di1jb2xsYXBzZSAub3Blbj4uZHJvcGRvd24tbWVudXtkaXNwbGF5OmJsb2NrfS5uYXYtY29sbGFw
c2UgLmRyb3Bkb3duLW1lbnU6YmVmb3JlLC5uYXYtY29sbGFwc2UgLmRyb3Bkb3duLW1lbnU6YWZ0
ZXJ7ZGlzcGxheTpub25lfS5uYXYtY29sbGFwc2UgLmRyb3Bkb3duLW1lbnUgLmRpdmlkZXJ7ZGlz
cGxheTpub25lfS5uYXYtY29sbGFwc2UgLm5hdj5saT4uZHJvcGRvd24tbWVudTpiZWZvcmUsLm5h
di1jb2xsYXBzZSAubmF2PmxpPi5kcm9wZG93bi1tZW51OmFmdGVye2Rpc3BsYXk6bm9uZX0ubmF2
LWNvbGxhcHNlIC5uYXZiYXItZm9ybSwubmF2LWNvbGxhcHNlIC5uYXZiYXItc2VhcmNoe2Zsb2F0
Om5vbmU7cGFkZGluZzoxMHB4IDE1cHg7bWFyZ2luOjEwcHggMDtib3JkZXItdG9wOjFweCBzb2xp
ZCAjZjJmMmYyO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNmMmYyZjI7LXdlYmtpdC1ib3gtc2hh
ZG93Omluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjEpLDAgMXB4IDAgcmdiYSgyNTUs
MjU1LDI1NSwwLjEpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwy
NTUsMC4xKSwwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xKTtib3gtc2hhZG93Omluc2V0IDAg
MXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjEpLDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjEp
fS5uYXZiYXItaW52ZXJzZSAubmF2LWNvbGxhcHNlIC5uYXZiYXItZm9ybSwubmF2YmFyLWludmVy
c2UgLm5hdi1jb2xsYXBzZSAubmF2YmFyLXNlYXJjaHtib3JkZXItdG9wLWNvbG9yOiMxMTE7Ym9y
ZGVyLWJvdHRvbS1jb2xvcjojMTExfS5uYXZiYXIgLm5hdi1jb2xsYXBzZSAubmF2LnB1bGwtcmln
aHR7ZmxvYXQ6bm9uZTttYXJnaW4tbGVmdDowfS5uYXYtY29sbGFwc2UsLm5hdi1jb2xsYXBzZS5j
b2xsYXBzZXtoZWlnaHQ6MDtvdmVyZmxvdzpoaWRkZW59Lm5hdmJhciAuYnRuLW5hdmJhcntkaXNw
bGF5OmJsb2NrfS5uYXZiYXItc3RhdGljIC5uYXZiYXItaW5uZXJ7cGFkZGluZy1yaWdodDoxMHB4
O3BhZGRpbmctbGVmdDoxMHB4fX1AbWVkaWEobWluLXdpZHRoOjk4MHB4KXsubmF2LWNvbGxhcHNl
LmNvbGxhcHNle2hlaWdodDphdXRvIWltcG9ydGFudDtvdmVyZmxvdzp2aXNpYmxlIWltcG9ydGFu
dH19CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4x
L3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2Jvb3RzdHJhcC9jc3Mv
Ym9vdHN0cmFwLmNzcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEv
cmVzb3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvYm9vdHN0cmFwL2Nzcy9i
b290c3RyYXAuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU0ZDA2YzZlYzQ1MDY0NmZlZWQ4Zjg4NTY2MDYxYzY0
NjFhNTA4NTYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1Nw
ZWVkb21ldGVyMi4xL3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2Jv
b3RzdHJhcC9jc3MvYm9vdHN0cmFwLmNzcwpAQCAtMCwwICsxLDI0NzAgQEAKKy8qIQorICogQm9v
dHN0cmFwIHYxLjQuMAorICoKKyAqIENvcHlyaWdodCAyMDExIFR3aXR0ZXIsIEluYworICogTGlj
ZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIHYyLjAKKyAqIGh0dHA6Ly93d3cuYXBhY2hl
Lm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIERlc2lnbmVkIGFuZCBidWlsdCB3aXRo
IGFsbCB0aGUgbG92ZSBpbiB0aGUgd29ybGQgQHR3aXR0ZXIgYnkgQG1kbyBhbmQgQGZhdC4KKyAq
IERhdGU6IFN1biBEZWMgMjUgMjA6MTg6MzEgUFNUIDIwMTEKKyAqLworLyogUmVzZXQubGVzcwor
ICogUHJvcHMgdG8gRXJpYyBNZXllciAobWV5ZXJ3ZWIuY29tKSBmb3IgaGlzIENTUyByZXNldCBm
aWxlLiBXZSdyZSB1c2luZyBhbiBhZGFwdGVkIHZlcnNpb24gaGVyZSAgICB0aGF0IGN1dHMgb3V0
IHNvbWUgb2YgdGhlIHJlc2V0IEhUTUwgZWxlbWVudHMgd2Ugd2lsbCBuZXZlciBuZWVkIGhlcmUg
KGkuZS4sIGRmbiwgc2FtcCwgZXRjKS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK2h0bWwsIGJv
ZHkgeworICBtYXJnaW46IDA7CisgIHBhZGRpbmc6IDA7Cit9CitoMSwKK2gyLAoraDMsCitoNCwK
K2g1LAoraDYsCitwLAorYmxvY2txdW90ZSwKK3ByZSwKK2EsCithYmJyLAorYWNyb255bSwKK2Fk
ZHJlc3MsCitjaXRlLAorY29kZSwKK2RlbCwKK2RmbiwKK2VtLAoraW1nLAorcSwKK3MsCitzYW1w
LAorc21hbGwsCitzdHJpa2UsCitzdHJvbmcsCitzdWIsCitzdXAsCit0dCwKK3ZhciwKK2RkLAor
ZGwsCitkdCwKK2xpLAorb2wsCit1bCwKK2ZpZWxkc2V0LAorZm9ybSwKK2xhYmVsLAorbGVnZW5k
LAorYnV0dG9uLAordGFibGUsCitjYXB0aW9uLAordGJvZHksCit0Zm9vdCwKK3RoZWFkLAordHIs
Cit0aCwKK3RkIHsKKyAgbWFyZ2luOiAwOworICBwYWRkaW5nOiAwOworICBib3JkZXI6IDA7Cisg
IGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIGZvbnQtc3R5bGU6IG5vcm1hbDsKKyAgZm9udC1zaXpl
OiAxMDAlOworICBsaW5lLWhlaWdodDogMTsKKyAgZm9udC1mYW1pbHk6IGluaGVyaXQ7Cit9Cit0
YWJsZSB7CisgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CisgIGJvcmRlci1zcGFjaW5nOiAw
OworfQorb2wsIHVsIHsKKyAgbGlzdC1zdHlsZTogbm9uZTsKK30KK3E6YmVmb3JlLAorcTphZnRl
ciwKK2Jsb2NrcXVvdGU6YmVmb3JlLAorYmxvY2txdW90ZTphZnRlciB7CisgIGNvbnRlbnQ6ICIi
OworfQoraHRtbCB7CisgIG92ZXJmbG93LXk6IHNjcm9sbDsKKyAgZm9udC1zaXplOiAxMDAlOwor
ICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7CisgIC1tcy10ZXh0LXNpemUtYWRqdXN0
OiAxMDAlOworfQorYTpmb2N1cyB7CisgIG91dGxpbmU6IHRoaW4gZG90dGVkOworfQorYTpob3Zl
ciwgYTphY3RpdmUgeworICBvdXRsaW5lOiAwOworfQorYXJ0aWNsZSwKK2FzaWRlLAorZGV0YWls
cywKK2ZpZ2NhcHRpb24sCitmaWd1cmUsCitmb290ZXIsCitoZWFkZXIsCitoZ3JvdXAsCituYXYs
CitzZWN0aW9uIHsKKyAgZGlzcGxheTogYmxvY2s7Cit9CithdWRpbywgY2FudmFzLCB2aWRlbyB7
CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgKmRpc3BsYXk6IGlubGluZTsKKyAgKnpvb206
IDE7Cit9CithdWRpbzpub3QoW2NvbnRyb2xzXSkgeworICBkaXNwbGF5OiBub25lOworfQorc3Vi
LCBzdXAgeworICBmb250LXNpemU6IDc1JTsKKyAgbGluZS1oZWlnaHQ6IDA7CisgIHBvc2l0aW9u
OiByZWxhdGl2ZTsKKyAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworfQorc3VwIHsKKyAgdG9w
OiAtMC41ZW07Cit9CitzdWIgeworICBib3R0b206IC0wLjI1ZW07Cit9CitpbWcgeworICBib3Jk
ZXI6IDA7CisgIC1tcy1pbnRlcnBvbGF0aW9uLW1vZGU6IGJpY3ViaWM7Cit9CitidXR0b24sCitp
bnB1dCwKK3NlbGVjdCwKK3RleHRhcmVhIHsKKyAgZm9udC1zaXplOiAxMDAlOworICBtYXJnaW46
IDA7CisgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgKnZlcnRpY2FsLWFsaWduOiBtaWRk
bGU7Cit9CitidXR0b24sIGlucHV0IHsKKyAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKKyAgKm92ZXJm
bG93OiB2aXNpYmxlOworfQorYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLCBpbnB1dDo6LW1vei1m
b2N1cy1pbm5lciB7CisgIGJvcmRlcjogMDsKKyAgcGFkZGluZzogMDsKK30KK2J1dHRvbiwKK2lu
cHV0W3R5cGU9ImJ1dHRvbiJdLAoraW5wdXRbdHlwZT0icmVzZXQiXSwKK2lucHV0W3R5cGU9InN1
Ym1pdCJdIHsKKyAgY3Vyc29yOiBwb2ludGVyOworICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRv
bjsKK30KK2lucHV0W3R5cGU9InNlYXJjaCJdIHsKKyAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0
ZmllbGQ7CisgIC13ZWJraXQtYm94LXNpemluZzogY29udGVudC1ib3g7CisgIC1tb3otYm94LXNp
emluZzogY29udGVudC1ib3g7CisgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94OworfQoraW5wdXRb
dHlwZT0ic2VhcmNoIl06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24geworICAtd2Via2l0LWFw
cGVhcmFuY2U6IG5vbmU7Cit9Cit0ZXh0YXJlYSB7CisgIG92ZXJmbG93OiBhdXRvOworICB2ZXJ0
aWNhbC1hbGlnbjogdG9wOworfQorLyogVmFyaWFibGVzLmxlc3MKKyAqIFZhcmlhYmxlcyB0byBj
dXN0b21pemUgdGhlIGxvb2sgYW5kIGZlZWwgb2YgQm9vdHN0cmFwCisgKiAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogTWl4aW5zLmxl
c3MKKyAqIFNuaXBwZXRzIG9mIHJldXNhYmxlIENTUyB0byBkZXZlbG9wIGZhc3RlciBhbmQga2Vl
cCBjb2RlIHJlYWRhYmxlCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyoKKyAqIFNjYWZmb2xkaW5nCisgKiBC
YXNpYyBhbmQgZ2xvYmFsIHN0eWxlcyBmb3IgZ2VuZXJhdGluZyBhIGdyaWQgc3lzdGVtLCBzdHJ1
Y3R1cmFsIGxheW91dCwgYW5kIHBhZ2UgdGVtcGxhdGVzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tICovCitib2R5IHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsK
KyAgbWFyZ2luOiAwOworICBmb250LWZhbWlseTogIkhlbHZldGljYSBOZXVlIiwgSGVsdmV0aWNh
LCBBcmlhbCwgc2Fucy1zZXJpZjsKKyAgZm9udC1zaXplOiAxM3B4OworICBmb250LXdlaWdodDog
bm9ybWFsOworICBsaW5lLWhlaWdodDogMThweDsKKyAgY29sb3I6ICM0MDQwNDA7Cit9CisuY29u
dGFpbmVyIHsKKyAgd2lkdGg6IDk0MHB4OworICBtYXJnaW4tbGVmdDogYXV0bzsKKyAgbWFyZ2lu
LXJpZ2h0OiBhdXRvOworICB6b29tOiAxOworfQorLmNvbnRhaW5lcjpiZWZvcmUsIC5jb250YWlu
ZXI6YWZ0ZXIgeworICBkaXNwbGF5OiB0YWJsZTsKKyAgY29udGVudDogIiI7CisgIHpvb206IDE7
Cit9CisuY29udGFpbmVyOmFmdGVyIHsKKyAgY2xlYXI6IGJvdGg7Cit9CisuY29udGFpbmVyLWZs
dWlkIHsKKyAgcG9zaXRpb246IHJlbGF0aXZlOworICBtaW4td2lkdGg6IDk0MHB4OworICBwYWRk
aW5nLWxlZnQ6IDIwcHg7CisgIHBhZGRpbmctcmlnaHQ6IDIwcHg7CisgIHpvb206IDE7Cit9Cisu
Y29udGFpbmVyLWZsdWlkOmJlZm9yZSwgLmNvbnRhaW5lci1mbHVpZDphZnRlciB7CisgIGRpc3Bs
YXk6IHRhYmxlOworICBjb250ZW50OiAiIjsKKyAgem9vbTogMTsKK30KKy5jb250YWluZXItZmx1
aWQ6YWZ0ZXIgeworICBjbGVhcjogYm90aDsKK30KKy5jb250YWluZXItZmx1aWQgPiAuc2lkZWJh
ciB7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgdG9wOiAwOworICBsZWZ0OiAyMHB4OworICB3
aWR0aDogMjIwcHg7Cit9CisuY29udGFpbmVyLWZsdWlkID4gLmNvbnRlbnQgeworICBtYXJnaW4t
bGVmdDogMjQwcHg7Cit9CithIHsKKyAgY29sb3I6ICMwMDY5ZDY7CisgIHRleHQtZGVjb3JhdGlv
bjogbm9uZTsKKyAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7CisgIGZvbnQtd2VpZ2h0OiBpbmhlcml0
OworfQorYTpob3ZlciB7CisgIGNvbG9yOiAjMDA0MzhhOworICB0ZXh0LWRlY29yYXRpb246IHVu
ZGVybGluZTsKK30KKy5wdWxsLXJpZ2h0IHsKKyAgZmxvYXQ6IHJpZ2h0OworfQorLnB1bGwtbGVm
dCB7CisgIGZsb2F0OiBsZWZ0OworfQorLmhpZGUgeworICBkaXNwbGF5OiBub25lOworfQorLnNo
b3cgeworICBkaXNwbGF5OiBibG9jazsKK30KKy5yb3cgeworICB6b29tOiAxOworICBtYXJnaW4t
bGVmdDogLTIwcHg7Cit9Cisucm93OmJlZm9yZSwgLnJvdzphZnRlciB7CisgIGRpc3BsYXk6IHRh
YmxlOworICBjb250ZW50OiAiIjsKKyAgem9vbTogMTsKK30KKy5yb3c6YWZ0ZXIgeworICBjbGVh
cjogYm90aDsKK30KKy5yb3cgPiBbY2xhc3MqPSJzcGFuIl0geworICBkaXNwbGF5OiBpbmxpbmU7
CisgIGZsb2F0OiBsZWZ0OworICBtYXJnaW4tbGVmdDogMjBweDsKK30KKy5zcGFuMSB7CisgIHdp
ZHRoOiA0MHB4OworfQorLnNwYW4yIHsKKyAgd2lkdGg6IDEwMHB4OworfQorLnNwYW4zIHsKKyAg
d2lkdGg6IDE2MHB4OworfQorLnNwYW40IHsKKyAgd2lkdGg6IDIyMHB4OworfQorLnNwYW41IHsK
KyAgd2lkdGg6IDI4MHB4OworfQorLnNwYW42IHsKKyAgd2lkdGg6IDM0MHB4OworfQorLnNwYW43
IHsKKyAgd2lkdGg6IDQwMHB4OworfQorLnNwYW44IHsKKyAgd2lkdGg6IDQ2MHB4OworfQorLnNw
YW45IHsKKyAgd2lkdGg6IDUyMHB4OworfQorLnNwYW4xMCB7CisgIHdpZHRoOiA1ODBweDsKK30K
Ky5zcGFuMTEgeworICB3aWR0aDogNjQwcHg7Cit9Cisuc3BhbjEyIHsKKyAgd2lkdGg6IDcwMHB4
OworfQorLnNwYW4xMyB7CisgIHdpZHRoOiA3NjBweDsKK30KKy5zcGFuMTQgeworICB3aWR0aDog
ODIwcHg7Cit9Cisuc3BhbjE1IHsKKyAgd2lkdGg6IDg4MHB4OworfQorLnNwYW4xNiB7CisgIHdp
ZHRoOiA5NDBweDsKK30KKy5zcGFuMTcgeworICB3aWR0aDogMTAwMHB4OworfQorLnNwYW4xOCB7
CisgIHdpZHRoOiAxMDYwcHg7Cit9Cisuc3BhbjE5IHsKKyAgd2lkdGg6IDExMjBweDsKK30KKy5z
cGFuMjAgeworICB3aWR0aDogMTE4MHB4OworfQorLnNwYW4yMSB7CisgIHdpZHRoOiAxMjQwcHg7
Cit9Cisuc3BhbjIyIHsKKyAgd2lkdGg6IDEzMDBweDsKK30KKy5zcGFuMjMgeworICB3aWR0aDog
MTM2MHB4OworfQorLnNwYW4yNCB7CisgIHdpZHRoOiAxNDIwcHg7Cit9Cisucm93ID4gLm9mZnNl
dDEgeworICBtYXJnaW4tbGVmdDogODBweDsKK30KKy5yb3cgPiAub2Zmc2V0MiB7CisgIG1hcmdp
bi1sZWZ0OiAxNDBweDsKK30KKy5yb3cgPiAub2Zmc2V0MyB7CisgIG1hcmdpbi1sZWZ0OiAyMDBw
eDsKK30KKy5yb3cgPiAub2Zmc2V0NCB7CisgIG1hcmdpbi1sZWZ0OiAyNjBweDsKK30KKy5yb3cg
PiAub2Zmc2V0NSB7CisgIG1hcmdpbi1sZWZ0OiAzMjBweDsKK30KKy5yb3cgPiAub2Zmc2V0NiB7
CisgIG1hcmdpbi1sZWZ0OiAzODBweDsKK30KKy5yb3cgPiAub2Zmc2V0NyB7CisgIG1hcmdpbi1s
ZWZ0OiA0NDBweDsKK30KKy5yb3cgPiAub2Zmc2V0OCB7CisgIG1hcmdpbi1sZWZ0OiA1MDBweDsK
K30KKy5yb3cgPiAub2Zmc2V0OSB7CisgIG1hcmdpbi1sZWZ0OiA1NjBweDsKK30KKy5yb3cgPiAu
b2Zmc2V0MTAgeworICBtYXJnaW4tbGVmdDogNjIwcHg7Cit9Cisucm93ID4gLm9mZnNldDExIHsK
KyAgbWFyZ2luLWxlZnQ6IDY4MHB4OworfQorLnJvdyA+IC5vZmZzZXQxMiB7CisgIG1hcmdpbi1s
ZWZ0OiA3NDBweDsKK30KKy5zcGFuLW9uZS10aGlyZCB7CisgIHdpZHRoOiAzMDBweDsKK30KKy5z
cGFuLXR3by10aGlyZHMgeworICB3aWR0aDogNjIwcHg7Cit9Cisucm93ID4gLm9mZnNldC1vbmUt
dGhpcmQgeworICBtYXJnaW4tbGVmdDogMzQwcHg7Cit9Cisucm93ID4gLm9mZnNldC10d28tdGhp
cmRzIHsKKyAgbWFyZ2luLWxlZnQ6IDY2MHB4OworfQorLyogVHlwb2dyYXBoeS5sZXNzCisgKiBI
ZWFkaW5ncywgYm9keSB0ZXh0LCBsaXN0cywgY29kZSwgYW5kIG1vcmUgZm9yIGEgdmVyc2F0aWxl
IGFuZCBkdXJhYmxlIHR5cG9ncmFwaHkgc3lzdGVtCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tICovCitwIHsKKyAgZm9udC1zaXplOiAxM3B4OworICBmb250LXdlaWdodDogbm9y
bWFsOworICBsaW5lLWhlaWdodDogMThweDsKKyAgbWFyZ2luLWJvdHRvbTogOXB4OworfQorcCBz
bWFsbCB7CisgIGZvbnQtc2l6ZTogMTFweDsKKyAgY29sb3I6ICNiZmJmYmY7Cit9CitoMSwKK2gy
LAoraDMsCitoNCwKK2g1LAoraDYgeworICBmb250LXdlaWdodDogYm9sZDsKKyAgY29sb3I6ICM0
MDQwNDA7Cit9CitoMSBzbWFsbCwKK2gyIHNtYWxsLAoraDMgc21hbGwsCitoNCBzbWFsbCwKK2g1
IHNtYWxsLAoraDYgc21hbGwgeworICBjb2xvcjogI2JmYmZiZjsKK30KK2gxIHsKKyAgbWFyZ2lu
LWJvdHRvbTogMThweDsKKyAgZm9udC1zaXplOiAzMHB4OworICBsaW5lLWhlaWdodDogMzZweDsK
K30KK2gxIHNtYWxsIHsKKyAgZm9udC1zaXplOiAxOHB4OworfQoraDIgeworICBmb250LXNpemU6
IDI0cHg7CisgIGxpbmUtaGVpZ2h0OiAzNnB4OworfQoraDIgc21hbGwgeworICBmb250LXNpemU6
IDE0cHg7Cit9CitoMywKK2g0LAoraDUsCitoNiB7CisgIGxpbmUtaGVpZ2h0OiAzNnB4OworfQor
aDMgeworICBmb250LXNpemU6IDE4cHg7Cit9CitoMyBzbWFsbCB7CisgIGZvbnQtc2l6ZTogMTRw
eDsKK30KK2g0IHsKKyAgZm9udC1zaXplOiAxNnB4OworfQoraDQgc21hbGwgeworICBmb250LXNp
emU6IDEycHg7Cit9CitoNSB7CisgIGZvbnQtc2l6ZTogMTRweDsKK30KK2g2IHsKKyAgZm9udC1z
aXplOiAxM3B4OworICBjb2xvcjogI2JmYmZiZjsKKyAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2Fz
ZTsKK30KK3VsLCBvbCB7CisgIG1hcmdpbjogMCAwIDE4cHggMjVweDsKK30KK3VsIHVsLAordWwg
b2wsCitvbCBvbCwKK29sIHVsIHsKKyAgbWFyZ2luLWJvdHRvbTogMDsKK30KK3VsIHsKKyAgbGlz
dC1zdHlsZTogZGlzYzsKK30KK29sIHsKKyAgbGlzdC1zdHlsZTogZGVjaW1hbDsKK30KK2xpIHsK
KyAgbGluZS1oZWlnaHQ6IDE4cHg7CisgIGNvbG9yOiAjODA4MDgwOworfQordWwudW5zdHlsZWQg
eworICBsaXN0LXN0eWxlOiBub25lOworICBtYXJnaW4tbGVmdDogMDsKK30KK2RsIHsKKyAgbWFy
Z2luLWJvdHRvbTogMThweDsKK30KK2RsIGR0LCBkbCBkZCB7CisgIGxpbmUtaGVpZ2h0OiAxOHB4
OworfQorZGwgZHQgeworICBmb250LXdlaWdodDogYm9sZDsKK30KK2RsIGRkIHsKKyAgbWFyZ2lu
LWxlZnQ6IDlweDsKK30KK2hyIHsKKyAgbWFyZ2luOiAyMHB4IDAgMTlweDsKKyAgYm9yZGVyOiAw
OworICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VlZTsKK30KK3N0cm9uZyB7CisgIGZvbnQt
c3R5bGU6IGluaGVyaXQ7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorZW0geworICBmb250LXN0
eWxlOiBpdGFsaWM7CisgIGZvbnQtd2VpZ2h0OiBpbmhlcml0OworICBsaW5lLWhlaWdodDogaW5o
ZXJpdDsKK30KKy5tdXRlZCB7CisgIGNvbG9yOiAjYmZiZmJmOworfQorYmxvY2txdW90ZSB7Cisg
IG1hcmdpbi1ib3R0b206IDE4cHg7CisgIGJvcmRlci1sZWZ0OiA1cHggc29saWQgI2VlZTsKKyAg
cGFkZGluZy1sZWZ0OiAxNXB4OworfQorYmxvY2txdW90ZSBwIHsKKyAgZm9udC1zaXplOiAxNHB4
OworICBmb250LXdlaWdodDogMzAwOworICBsaW5lLWhlaWdodDogMThweDsKKyAgbWFyZ2luLWJv
dHRvbTogMDsKK30KK2Jsb2NrcXVvdGUgc21hbGwgeworICBkaXNwbGF5OiBibG9jazsKKyAgZm9u
dC1zaXplOiAxMnB4OworICBmb250LXdlaWdodDogMzAwOworICBsaW5lLWhlaWdodDogMThweDsK
KyAgY29sb3I6ICNiZmJmYmY7Cit9CitibG9ja3F1b3RlIHNtYWxsOmJlZm9yZSB7CisgIGNvbnRl
bnQ6ICdcMjAxNCBcMDBBMCc7Cit9CithZGRyZXNzIHsKKyAgZGlzcGxheTogYmxvY2s7CisgIGxp
bmUtaGVpZ2h0OiAxOHB4OworICBtYXJnaW4tYm90dG9tOiAxOHB4OworfQorY29kZSwgcHJlIHsK
KyAgcGFkZGluZzogMCAzcHggMnB4OworICBmb250LWZhbWlseTogTW9uYWNvLCBBbmRhbGUgTW9u
bywgQ291cmllciBOZXcsIG1vbm9zcGFjZTsKKyAgZm9udC1zaXplOiAxMnB4OworICAtd2Via2l0
LWJvcmRlci1yYWRpdXM6IDNweDsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAzcHg7CisgIGJvcmRl
ci1yYWRpdXM6IDNweDsKK30KK2NvZGUgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmVlOWNjOwor
ICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjc1KTsKKyAgcGFkZGluZzogMXB4IDNweDsKK30KK3By
ZSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7CisgIGRpc3BsYXk6IGJsb2NrOworICBw
YWRkaW5nOiA4LjVweDsKKyAgbWFyZ2luOiAwIDAgMThweDsKKyAgbGluZS1oZWlnaHQ6IDE4cHg7
CisgIGZvbnQtc2l6ZTogMTJweDsKKyAgYm9yZGVyOiAxcHggc29saWQgI2NjYzsKKyAgYm9yZGVy
OiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjE1KTsKKyAgLXdlYmtpdC1ib3JkZXItcmFkaXVz
OiAzcHg7CisgIC1tb3otYm9yZGVyLXJhZGl1czogM3B4OworICBib3JkZXItcmFkaXVzOiAzcHg7
CisgIHdoaXRlLXNwYWNlOiBwcmU7CisgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKKyAgd29yZC13
cmFwOiBicmVhay13b3JkOworfQorLyogRm9ybXMubGVzcworICogQmFzZSBzdHlsZXMgZm9yIHZh
cmlvdXMgaW5wdXQgdHlwZXMsIGZvcm0gbGF5b3V0cywgYW5kIHN0YXRlcworICogLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwor
Zm9ybSB7CisgIG1hcmdpbi1ib3R0b206IDE4cHg7Cit9CitmaWVsZHNldCB7CisgIG1hcmdpbi1i
b3R0b206IDE4cHg7CisgIHBhZGRpbmctdG9wOiAxOHB4OworfQorZmllbGRzZXQgbGVnZW5kIHsK
KyAgZGlzcGxheTogYmxvY2s7CisgIHBhZGRpbmctbGVmdDogMTUwcHg7CisgIGZvbnQtc2l6ZTog
MTkuNXB4OworICBsaW5lLWhlaWdodDogMTsKKyAgY29sb3I6ICM0MDQwNDA7CisgICpwYWRkaW5n
OiAwIDAgNXB4IDE0NXB4OworICAvKiBJRTYtNyAqLworCisgICpsaW5lLWhlaWdodDogMS41Owor
ICAvKiBJRTYtNyAqLworCit9Citmb3JtIC5jbGVhcmZpeCB7CisgIG1hcmdpbi1ib3R0b206IDE4
cHg7CisgIHpvb206IDE7Cit9Citmb3JtIC5jbGVhcmZpeDpiZWZvcmUsIGZvcm0gLmNsZWFyZml4
OmFmdGVyIHsKKyAgZGlzcGxheTogdGFibGU7CisgIGNvbnRlbnQ6ICIiOworICB6b29tOiAxOwor
fQorZm9ybSAuY2xlYXJmaXg6YWZ0ZXIgeworICBjbGVhcjogYm90aDsKK30KK2xhYmVsLAoraW5w
dXQsCitzZWxlY3QsCit0ZXh0YXJlYSB7CisgIGZvbnQtZmFtaWx5OiAiSGVsdmV0aWNhIE5ldWUi
LCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOworICBmb250LXNpemU6IDEzcHg7CisgIGZv
bnQtd2VpZ2h0OiBub3JtYWw7CisgIGxpbmUtaGVpZ2h0OiBub3JtYWw7Cit9CitsYWJlbCB7Cisg
IHBhZGRpbmctdG9wOiA2cHg7CisgIGZvbnQtc2l6ZTogMTNweDsKKyAgbGluZS1oZWlnaHQ6IDE4
cHg7CisgIGZsb2F0OiBsZWZ0OworICB3aWR0aDogMTMwcHg7CisgIHRleHQtYWxpZ246IHJpZ2h0
OworICBjb2xvcjogIzQwNDA0MDsKK30KK2Zvcm0gLmlucHV0IHsKKyAgbWFyZ2luLWxlZnQ6IDE1
MHB4OworfQoraW5wdXRbdHlwZT1jaGVja2JveF0sIGlucHV0W3R5cGU9cmFkaW9dIHsKKyAgY3Vy
c29yOiBwb2ludGVyOworfQoraW5wdXQsCit0ZXh0YXJlYSwKK3NlbGVjdCwKKy51bmVkaXRhYmxl
LWlucHV0IHsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICB3aWR0aDogMjEwcHg7CisgIGhl
aWdodDogMThweDsKKyAgcGFkZGluZzogNHB4OworICBmb250LXNpemU6IDEzcHg7CisgIGxpbmUt
aGVpZ2h0OiAxOHB4OworICBjb2xvcjogIzgwODA4MDsKKyAgYm9yZGVyOiAxcHggc29saWQgI2Nj
YzsKKyAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAzcHg7CisgIC1tb3otYm9yZGVyLXJhZGl1czog
M3B4OworICBib3JkZXItcmFkaXVzOiAzcHg7Cit9CitzZWxlY3QgeworICBwYWRkaW5nOiBpbml0
aWFsOworfQoraW5wdXRbdHlwZT1jaGVja2JveF0sIGlucHV0W3R5cGU9cmFkaW9dIHsKKyAgd2lk
dGg6IGF1dG87CisgIGhlaWdodDogYXV0bzsKKyAgcGFkZGluZzogMDsKKyAgbWFyZ2luOiAzcHgg
MDsKKyAgKm1hcmdpbi10b3A6IDA7CisgIC8qIElFNi03ICovCisKKyAgbGluZS1oZWlnaHQ6IG5v
cm1hbDsKKyAgYm9yZGVyOiBub25lOworfQoraW5wdXRbdHlwZT1maWxlXSB7CisgIGJhY2tncm91
bmQtY29sb3I6ICNmZmZmZmY7CisgIHBhZGRpbmc6IGluaXRpYWw7CisgIGJvcmRlcjogaW5pdGlh
bDsKKyAgbGluZS1oZWlnaHQ6IGluaXRpYWw7CisgIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTsK
KyAgLW1vei1ib3gtc2hhZG93OiBub25lOworICBib3gtc2hhZG93OiBub25lOworfQoraW5wdXRb
dHlwZT1idXR0b25dLCBpbnB1dFt0eXBlPXJlc2V0XSwgaW5wdXRbdHlwZT1zdWJtaXRdIHsKKyAg
d2lkdGg6IGF1dG87CisgIGhlaWdodDogYXV0bzsKK30KK3NlbGVjdCwgaW5wdXRbdHlwZT1maWxl
XSB7CisgIGhlaWdodDogMjdweDsKKyAgKmhlaWdodDogYXV0bzsKKyAgbGluZS1oZWlnaHQ6IDI3
cHg7CisgICptYXJnaW4tdG9wOiA0cHg7CisgIC8qIEZvciBJRTcsIGFkZCB0b3AgbWFyZ2luIHRv
IGFsaWduIHNlbGVjdCB3aXRoIGxhYmVscyAqLworCit9CitzZWxlY3RbbXVsdGlwbGVdIHsKKyAg
aGVpZ2h0OiBpbmhlcml0OworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmOworfQordGV4dGFy
ZWEgeworICBoZWlnaHQ6IGF1dG87Cit9CisudW5lZGl0YWJsZS1pbnB1dCB7CisgIGJhY2tncm91
bmQtY29sb3I6ICNmZmZmZmY7CisgIGRpc3BsYXk6IGJsb2NrOworICBib3JkZXItY29sb3I6ICNl
ZWU7CisgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwg
MC4wMjUpOworICAtbW96LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDJweCByZ2JhKDAsIDAsIDAs
IDAuMDI1KTsKKyAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4w
MjUpOworICBjdXJzb3I6IG5vdC1hbGxvd2VkOworfQorOi1tb3otcGxhY2Vob2xkZXIgeworICBj
b2xvcjogI2JmYmZiZjsKK30KKzo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7CisgIGNvbG9y
OiAjYmZiZmJmOworfQoraW5wdXQsIHRleHRhcmVhIHsKKyAgLXdlYmtpdC10cmFuc2l0aW9uOiBi
b3JkZXIgbGluZWFyIDAuMnMsIGJveC1zaGFkb3cgbGluZWFyIDAuMnM7CisgIC1tb3otdHJhbnNp
dGlvbjogYm9yZGVyIGxpbmVhciAwLjJzLCBib3gtc2hhZG93IGxpbmVhciAwLjJzOworICAtbXMt
dHJhbnNpdGlvbjogYm9yZGVyIGxpbmVhciAwLjJzLCBib3gtc2hhZG93IGxpbmVhciAwLjJzOwor
ICAtby10cmFuc2l0aW9uOiBib3JkZXIgbGluZWFyIDAuMnMsIGJveC1zaGFkb3cgbGluZWFyIDAu
MnM7CisgIHRyYW5zaXRpb246IGJvcmRlciBsaW5lYXIgMC4ycywgYm94LXNoYWRvdyBsaW5lYXIg
MC4yczsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAzcHggcmdiYSgwLCAwLCAw
LCAwLjEpOworICAtbW96LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAs
IDAuMSk7CisgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMSk7
Cit9CitpbnB1dDpmb2N1cywgdGV4dGFyZWE6Zm9jdXMgeworICBvdXRsaW5lOiAwOworICBib3Jk
ZXItY29sb3I6IHJnYmEoODIsIDE2OCwgMjM2LCAwLjgpOworICAtd2Via2l0LWJveC1zaGFkb3c6
IGluc2V0IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMSksIDAgMCA4cHggcmdiYSg4MiwgMTY4
LCAyMzYsIDAuNik7CisgIC1tb3otYm94LXNoYWRvdzogaW5zZXQgMCAxcHggM3B4IHJnYmEoMCwg
MCwgMCwgMC4xKSwgMCAwIDhweCByZ2JhKDgyLCAxNjgsIDIzNiwgMC42KTsKKyAgYm94LXNoYWRv
dzogaW5zZXQgMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xKSwgMCAwIDhweCByZ2JhKDgyLCAx
NjgsIDIzNiwgMC42KTsKK30KK2lucHV0W3R5cGU9ZmlsZV06Zm9jdXMsIGlucHV0W3R5cGU9Y2hl
Y2tib3hdOmZvY3VzLCBzZWxlY3Q6Zm9jdXMgeworICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7
CisgIC1tb3otYm94LXNoYWRvdzogbm9uZTsKKyAgYm94LXNoYWRvdzogbm9uZTsKKyAgb3V0bGlu
ZTogMXB4IGRvdHRlZCAjNjY2OworfQorZm9ybSAuY2xlYXJmaXguZXJyb3IgPiBsYWJlbCwgZm9y
bSAuY2xlYXJmaXguZXJyb3IgLmhlbHAtYmxvY2ssIGZvcm0gLmNsZWFyZml4LmVycm9yIC5oZWxw
LWlubGluZSB7CisgIGNvbG9yOiAjYjk0YTQ4OworfQorZm9ybSAuY2xlYXJmaXguZXJyb3IgaW5w
dXQsIGZvcm0gLmNsZWFyZml4LmVycm9yIHRleHRhcmVhIHsKKyAgY29sb3I6ICNiOTRhNDg7Cisg
IGJvcmRlci1jb2xvcjogI2VlNWY1YjsKK30KK2Zvcm0gLmNsZWFyZml4LmVycm9yIGlucHV0OmZv
Y3VzLCBmb3JtIC5jbGVhcmZpeC5lcnJvciB0ZXh0YXJlYTpmb2N1cyB7CisgIGJvcmRlci1jb2xv
cjogI2U5MzIyZDsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgNnB4ICNmOGI5Yjc7CisgIC1t
b3otYm94LXNoYWRvdzogMCAwIDZweCAjZjhiOWI3OworICBib3gtc2hhZG93OiAwIDAgNnB4ICNm
OGI5Yjc7Cit9Citmb3JtIC5jbGVhcmZpeC5lcnJvciAuaW5wdXQtcHJlcGVuZCAuYWRkLW9uLCBm
b3JtIC5jbGVhcmZpeC5lcnJvciAuaW5wdXQtYXBwZW5kIC5hZGQtb24geworICBjb2xvcjogI2I5
NGE0ODsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZjZTZlNjsKKyAgYm9yZGVyLWNvbG9yOiAjYjk0
YTQ4OworfQorZm9ybSAuY2xlYXJmaXgud2FybmluZyA+IGxhYmVsLCBmb3JtIC5jbGVhcmZpeC53
YXJuaW5nIC5oZWxwLWJsb2NrLCBmb3JtIC5jbGVhcmZpeC53YXJuaW5nIC5oZWxwLWlubGluZSB7
CisgIGNvbG9yOiAjYzA5ODUzOworfQorZm9ybSAuY2xlYXJmaXgud2FybmluZyBpbnB1dCwgZm9y
bSAuY2xlYXJmaXgud2FybmluZyB0ZXh0YXJlYSB7CisgIGNvbG9yOiAjYzA5ODUzOworICBib3Jk
ZXItY29sb3I6ICNjY2FlNjQ7Cit9Citmb3JtIC5jbGVhcmZpeC53YXJuaW5nIGlucHV0OmZvY3Vz
LCBmb3JtIC5jbGVhcmZpeC53YXJuaW5nIHRleHRhcmVhOmZvY3VzIHsKKyAgYm9yZGVyLWNvbG9y
OiAjYmU5YTNmOworICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMCA2cHggI2U1ZDZiMTsKKyAgLW1v
ei1ib3gtc2hhZG93OiAwIDAgNnB4ICNlNWQ2YjE7CisgIGJveC1zaGFkb3c6IDAgMCA2cHggI2U1
ZDZiMTsKK30KK2Zvcm0gLmNsZWFyZml4Lndhcm5pbmcgLmlucHV0LXByZXBlbmQgLmFkZC1vbiwg
Zm9ybSAuY2xlYXJmaXgud2FybmluZyAuaW5wdXQtYXBwZW5kIC5hZGQtb24geworICBjb2xvcjog
I2MwOTg1MzsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2QyYjg3NzsKKyAgYm9yZGVyLWNvbG9yOiAj
YzA5ODUzOworfQorZm9ybSAuY2xlYXJmaXguc3VjY2VzcyA+IGxhYmVsLCBmb3JtIC5jbGVhcmZp
eC5zdWNjZXNzIC5oZWxwLWJsb2NrLCBmb3JtIC5jbGVhcmZpeC5zdWNjZXNzIC5oZWxwLWlubGlu
ZSB7CisgIGNvbG9yOiAjNDY4ODQ3OworfQorZm9ybSAuY2xlYXJmaXguc3VjY2VzcyBpbnB1dCwg
Zm9ybSAuY2xlYXJmaXguc3VjY2VzcyB0ZXh0YXJlYSB7CisgIGNvbG9yOiAjNDY4ODQ3OworICBi
b3JkZXItY29sb3I6ICM1N2E5NTc7Cit9Citmb3JtIC5jbGVhcmZpeC5zdWNjZXNzIGlucHV0OmZv
Y3VzLCBmb3JtIC5jbGVhcmZpeC5zdWNjZXNzIHRleHRhcmVhOmZvY3VzIHsKKyAgYm9yZGVyLWNv
bG9yOiAjNDU4ODQ1OworICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMCA2cHggIzlhY2M5YTsKKyAg
LW1vei1ib3gtc2hhZG93OiAwIDAgNnB4ICM5YWNjOWE7CisgIGJveC1zaGFkb3c6IDAgMCA2cHgg
IzlhY2M5YTsKK30KK2Zvcm0gLmNsZWFyZml4LnN1Y2Nlc3MgLmlucHV0LXByZXBlbmQgLmFkZC1v
biwgZm9ybSAuY2xlYXJmaXguc3VjY2VzcyAuaW5wdXQtYXBwZW5kIC5hZGQtb24geworICBjb2xv
cjogIzQ2ODg0NzsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2JjZGRiYzsKKyAgYm9yZGVyLWNvbG9y
OiAjNDY4ODQ3OworfQorLmlucHV0LW1pbmksCitpbnB1dC5taW5pLAordGV4dGFyZWEubWluaSwK
K3NlbGVjdC5taW5pIHsKKyAgd2lkdGg6IDYwcHg7Cit9CisuaW5wdXQtc21hbGwsCitpbnB1dC5z
bWFsbCwKK3RleHRhcmVhLnNtYWxsLAorc2VsZWN0LnNtYWxsIHsKKyAgd2lkdGg6IDkwcHg7Cit9
CisuaW5wdXQtbWVkaXVtLAoraW5wdXQubWVkaXVtLAordGV4dGFyZWEubWVkaXVtLAorc2VsZWN0
Lm1lZGl1bSB7CisgIHdpZHRoOiAxNTBweDsKK30KKy5pbnB1dC1sYXJnZSwKK2lucHV0Lmxhcmdl
LAordGV4dGFyZWEubGFyZ2UsCitzZWxlY3QubGFyZ2UgeworICB3aWR0aDogMjEwcHg7Cit9Cisu
aW5wdXQteGxhcmdlLAoraW5wdXQueGxhcmdlLAordGV4dGFyZWEueGxhcmdlLAorc2VsZWN0Lnhs
YXJnZSB7CisgIHdpZHRoOiAyNzBweDsKK30KKy5pbnB1dC14eGxhcmdlLAoraW5wdXQueHhsYXJn
ZSwKK3RleHRhcmVhLnh4bGFyZ2UsCitzZWxlY3QueHhsYXJnZSB7CisgIHdpZHRoOiA1MzBweDsK
K30KK3RleHRhcmVhLnh4bGFyZ2UgeworICBvdmVyZmxvdy15OiBhdXRvOworfQoraW5wdXQuc3Bh
bjEsIHRleHRhcmVhLnNwYW4xIHsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICBmbG9hdDog
bm9uZTsKKyAgd2lkdGg6IDMwcHg7CisgIG1hcmdpbi1sZWZ0OiAwOworfQoraW5wdXQuc3BhbjIs
IHRleHRhcmVhLnNwYW4yIHsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICBmbG9hdDogbm9u
ZTsKKyAgd2lkdGg6IDkwcHg7CisgIG1hcmdpbi1sZWZ0OiAwOworfQoraW5wdXQuc3BhbjMsIHRl
eHRhcmVhLnNwYW4zIHsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICBmbG9hdDogbm9uZTsK
KyAgd2lkdGg6IDE1MHB4OworICBtYXJnaW4tbGVmdDogMDsKK30KK2lucHV0LnNwYW40LCB0ZXh0
YXJlYS5zcGFuNCB7CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgZmxvYXQ6IG5vbmU7Cisg
IHdpZHRoOiAyMTBweDsKKyAgbWFyZ2luLWxlZnQ6IDA7Cit9CitpbnB1dC5zcGFuNSwgdGV4dGFy
ZWEuc3BhbjUgeworICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgIGZsb2F0OiBub25lOworICB3
aWR0aDogMjcwcHg7CisgIG1hcmdpbi1sZWZ0OiAwOworfQoraW5wdXQuc3BhbjYsIHRleHRhcmVh
LnNwYW42IHsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICBmbG9hdDogbm9uZTsKKyAgd2lk
dGg6IDMzMHB4OworICBtYXJnaW4tbGVmdDogMDsKK30KK2lucHV0LnNwYW43LCB0ZXh0YXJlYS5z
cGFuNyB7CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgZmxvYXQ6IG5vbmU7CisgIHdpZHRo
OiAzOTBweDsKKyAgbWFyZ2luLWxlZnQ6IDA7Cit9CitpbnB1dC5zcGFuOCwgdGV4dGFyZWEuc3Bh
bjggeworICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgIGZsb2F0OiBub25lOworICB3aWR0aDog
NDUwcHg7CisgIG1hcmdpbi1sZWZ0OiAwOworfQoraW5wdXQuc3BhbjksIHRleHRhcmVhLnNwYW45
IHsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICBmbG9hdDogbm9uZTsKKyAgd2lkdGg6IDUx
MHB4OworICBtYXJnaW4tbGVmdDogMDsKK30KK2lucHV0LnNwYW4xMCwgdGV4dGFyZWEuc3BhbjEw
IHsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICBmbG9hdDogbm9uZTsKKyAgd2lkdGg6IDU3
MHB4OworICBtYXJnaW4tbGVmdDogMDsKK30KK2lucHV0LnNwYW4xMSwgdGV4dGFyZWEuc3BhbjEx
IHsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICBmbG9hdDogbm9uZTsKKyAgd2lkdGg6IDYz
MHB4OworICBtYXJnaW4tbGVmdDogMDsKK30KK2lucHV0LnNwYW4xMiwgdGV4dGFyZWEuc3BhbjEy
IHsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICBmbG9hdDogbm9uZTsKKyAgd2lkdGg6IDY5
MHB4OworICBtYXJnaW4tbGVmdDogMDsKK30KK2lucHV0LnNwYW4xMywgdGV4dGFyZWEuc3BhbjEz
IHsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICBmbG9hdDogbm9uZTsKKyAgd2lkdGg6IDc1
MHB4OworICBtYXJnaW4tbGVmdDogMDsKK30KK2lucHV0LnNwYW4xNCwgdGV4dGFyZWEuc3BhbjE0
IHsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICBmbG9hdDogbm9uZTsKKyAgd2lkdGg6IDgx
MHB4OworICBtYXJnaW4tbGVmdDogMDsKK30KK2lucHV0LnNwYW4xNSwgdGV4dGFyZWEuc3BhbjE1
IHsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICBmbG9hdDogbm9uZTsKKyAgd2lkdGg6IDg3
MHB4OworICBtYXJnaW4tbGVmdDogMDsKK30KK2lucHV0LnNwYW4xNiwgdGV4dGFyZWEuc3BhbjE2
IHsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICBmbG9hdDogbm9uZTsKKyAgd2lkdGg6IDkz
MHB4OworICBtYXJnaW4tbGVmdDogMDsKK30KK2lucHV0W2Rpc2FibGVkXSwKK3NlbGVjdFtkaXNh
YmxlZF0sCit0ZXh0YXJlYVtkaXNhYmxlZF0sCitpbnB1dFtyZWFkb25seV0sCitzZWxlY3RbcmVh
ZG9ubHldLAordGV4dGFyZWFbcmVhZG9ubHldIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVm
NTsKKyAgYm9yZGVyLWNvbG9yOiAjZGRkOworICBjdXJzb3I6IG5vdC1hbGxvd2VkOworfQorLmFj
dGlvbnMgeworICBiYWNrZ3JvdW5kOiAjZjVmNWY1OworICBtYXJnaW4tdG9wOiAxOHB4OworICBt
YXJnaW4tYm90dG9tOiAxOHB4OworICBwYWRkaW5nOiAxN3B4IDIwcHggMThweCAxNTBweDsKKyAg
Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7CisgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMCAw
IDNweCAzcHg7CisgIC1tb3otYm9yZGVyLXJhZGl1czogMCAwIDNweCAzcHg7CisgIGJvcmRlci1y
YWRpdXM6IDAgMCAzcHggM3B4OworfQorLmFjdGlvbnMgLnNlY29uZGFyeS1hY3Rpb24geworICBm
bG9hdDogcmlnaHQ7Cit9CisuYWN0aW9ucyAuc2Vjb25kYXJ5LWFjdGlvbiBhIHsKKyAgbGluZS1o
ZWlnaHQ6IDMwcHg7Cit9CisuYWN0aW9ucyAuc2Vjb25kYXJ5LWFjdGlvbiBhOmhvdmVyIHsKKyAg
dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cit9CisuaGVscC1pbmxpbmUsIC5oZWxwLWJsb2Nr
IHsKKyAgZm9udC1zaXplOiAxM3B4OworICBsaW5lLWhlaWdodDogMThweDsKKyAgY29sb3I6ICNi
ZmJmYmY7Cit9CisuaGVscC1pbmxpbmUgeworICBwYWRkaW5nLWxlZnQ6IDVweDsKKyAgKnBvc2l0
aW9uOiByZWxhdGl2ZTsKKyAgLyogSUU2LTcgKi8KKworICAqdG9wOiAtNXB4OworICAvKiBJRTYt
NyAqLworCit9CisuaGVscC1ibG9jayB7CisgIGRpc3BsYXk6IGJsb2NrOworICBtYXgtd2lkdGg6
IDYwMHB4OworfQorLmlubGluZS1pbnB1dHMgeworICBjb2xvcjogIzgwODA4MDsKK30KKy5pbmxp
bmUtaW5wdXRzIHNwYW4geworICBwYWRkaW5nOiAwIDJweCAwIDFweDsKK30KKy5pbnB1dC1wcmVw
ZW5kIGlucHV0LCAuaW5wdXQtYXBwZW5kIGlucHV0IHsKKyAgLXdlYmtpdC1ib3JkZXItcmFkaXVz
OiAwIDNweCAzcHggMDsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwIDNweCAzcHggMDsKKyAgYm9y
ZGVyLXJhZGl1czogMCAzcHggM3B4IDA7Cit9CisuaW5wdXQtcHJlcGVuZCAuYWRkLW9uLCAuaW5w
dXQtYXBwZW5kIC5hZGQtb24geworICBwb3NpdGlvbjogcmVsYXRpdmU7CisgIGJhY2tncm91bmQ6
ICNmNWY1ZjU7CisgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7CisgIHotaW5kZXg6IDI7CisgIGZs
b2F0OiBsZWZ0OworICBkaXNwbGF5OiBibG9jazsKKyAgd2lkdGg6IGF1dG87CisgIG1pbi13aWR0
aDogMTZweDsKKyAgaGVpZ2h0OiAxOHB4OworICBwYWRkaW5nOiA0cHggNHB4IDRweCA1cHg7Cisg
IG1hcmdpbi1yaWdodDogLTFweDsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgbGluZS1oZWln
aHQ6IDE4cHg7CisgIGNvbG9yOiAjYmZiZmJmOworICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgIHRl
eHQtc2hhZG93OiAwIDFweCAwICNmZmZmZmY7CisgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogM3B4
IDAgMCAzcHg7CisgIC1tb3otYm9yZGVyLXJhZGl1czogM3B4IDAgMCAzcHg7CisgIGJvcmRlci1y
YWRpdXM6IDNweCAwIDAgM3B4OworfQorLmlucHV0LXByZXBlbmQgLmFjdGl2ZSwgLmlucHV0LWFw
cGVuZCAuYWN0aXZlIHsKKyAgYmFja2dyb3VuZDogI2E5ZGJhOTsKKyAgYm9yZGVyLWNvbG9yOiAj
NDZhNTQ2OworfQorLmlucHV0LXByZXBlbmQgLmFkZC1vbiB7CisgICptYXJnaW4tdG9wOiAxcHg7
CisgIC8qIElFNi03ICovCisKK30KKy5pbnB1dC1hcHBlbmQgaW5wdXQgeworICBmbG9hdDogbGVm
dDsKKyAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAzcHggMCAwIDNweDsKKyAgLW1vei1ib3JkZXIt
cmFkaXVzOiAzcHggMCAwIDNweDsKKyAgYm9yZGVyLXJhZGl1czogM3B4IDAgMCAzcHg7Cit9Cisu
aW5wdXQtYXBwZW5kIC5hZGQtb24geworICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDAgM3B4IDNw
eCAwOworICAtbW96LWJvcmRlci1yYWRpdXM6IDAgM3B4IDNweCAwOworICBib3JkZXItcmFkaXVz
OiAwIDNweCAzcHggMDsKKyAgbWFyZ2luLXJpZ2h0OiAwOworICBtYXJnaW4tbGVmdDogLTFweDsK
K30KKy5pbnB1dHMtbGlzdCB7CisgIG1hcmdpbjogMCAwIDVweDsKKyAgd2lkdGg6IDEwMCU7Cit9
CisuaW5wdXRzLWxpc3QgbGkgeworICBkaXNwbGF5OiBibG9jazsKKyAgcGFkZGluZzogMDsKKyAg
d2lkdGg6IDEwMCU7Cit9CisuaW5wdXRzLWxpc3QgbGFiZWwgeworICBkaXNwbGF5OiBibG9jazsK
KyAgZmxvYXQ6IG5vbmU7CisgIHdpZHRoOiBhdXRvOworICBwYWRkaW5nOiAwOworICBtYXJnaW4t
bGVmdDogMjBweDsKKyAgbGluZS1oZWlnaHQ6IDE4cHg7CisgIHRleHQtYWxpZ246IGxlZnQ7Cisg
IHdoaXRlLXNwYWNlOiBub3JtYWw7Cit9CisuaW5wdXRzLWxpc3QgbGFiZWwgc3Ryb25nIHsKKyAg
Y29sb3I6ICM4MDgwODA7Cit9CisuaW5wdXRzLWxpc3QgbGFiZWwgc21hbGwgeworICBmb250LXNp
emU6IDExcHg7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Cit9CisuaW5wdXRzLWxpc3QgLmlucHV0
cy1saXN0IHsKKyAgbWFyZ2luLWxlZnQ6IDI1cHg7CisgIG1hcmdpbi1ib3R0b206IDEwcHg7Cisg
IHBhZGRpbmctdG9wOiAwOworfQorLmlucHV0cy1saXN0OmZpcnN0LWNoaWxkIHsKKyAgcGFkZGlu
Zy10b3A6IDZweDsKK30KKy5pbnB1dHMtbGlzdCBsaSArIGxpIHsKKyAgcGFkZGluZy10b3A6IDJw
eDsKK30KKy5pbnB1dHMtbGlzdCBpbnB1dFt0eXBlPXJhZGlvXSwgLmlucHV0cy1saXN0IGlucHV0
W3R5cGU9Y2hlY2tib3hdIHsKKyAgbWFyZ2luLWJvdHRvbTogMDsKKyAgbWFyZ2luLWxlZnQ6IC0y
MHB4OworICBmbG9hdDogbGVmdDsKK30KKy5mb3JtLXN0YWNrZWQgeworICBwYWRkaW5nLWxlZnQ6
IDIwcHg7Cit9CisuZm9ybS1zdGFja2VkIGZpZWxkc2V0IHsKKyAgcGFkZGluZy10b3A6IDlweDsK
K30KKy5mb3JtLXN0YWNrZWQgbGVnZW5kIHsKKyAgcGFkZGluZy1sZWZ0OiAwOworfQorLmZvcm0t
c3RhY2tlZCBsYWJlbCB7CisgIGRpc3BsYXk6IGJsb2NrOworICBmbG9hdDogbm9uZTsKKyAgd2lk
dGg6IGF1dG87CisgIGZvbnQtd2VpZ2h0OiBib2xkOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBs
aW5lLWhlaWdodDogMjBweDsKKyAgcGFkZGluZy10b3A6IDA7Cit9CisuZm9ybS1zdGFja2VkIC5j
bGVhcmZpeCB7CisgIG1hcmdpbi1ib3R0b206IDlweDsKK30KKy5mb3JtLXN0YWNrZWQgLmNsZWFy
Zml4IGRpdi5pbnB1dCB7CisgIG1hcmdpbi1sZWZ0OiAwOworfQorLmZvcm0tc3RhY2tlZCAuaW5w
dXRzLWxpc3QgeworICBtYXJnaW4tYm90dG9tOiAwOworfQorLmZvcm0tc3RhY2tlZCAuaW5wdXRz
LWxpc3QgbGkgeworICBwYWRkaW5nLXRvcDogMDsKK30KKy5mb3JtLXN0YWNrZWQgLmlucHV0cy1s
aXN0IGxpIGxhYmVsIHsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgcGFkZGluZy10b3A6IDA7
Cit9CisuZm9ybS1zdGFja2VkIGRpdi5jbGVhcmZpeC5lcnJvciB7CisgIHBhZGRpbmctdG9wOiAx
MHB4OworICBwYWRkaW5nLWJvdHRvbTogMTBweDsKKyAgcGFkZGluZy1sZWZ0OiAxMHB4OworICBt
YXJnaW4tdG9wOiAwOworICBtYXJnaW4tbGVmdDogLTEwcHg7Cit9CisuZm9ybS1zdGFja2VkIC5h
Y3Rpb25zIHsKKyAgbWFyZ2luLWxlZnQ6IC0yMHB4OworICBwYWRkaW5nLWxlZnQ6IDIwcHg7Cit9
CisvKgorICogVGFibGVzLmxlc3MKKyAqIFRhYmxlcyBmb3IsIHlvdSBndWVzc2VkIGl0LCB0YWJ1
bGFyIGRhdGEKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8K
K3RhYmxlIHsKKyAgd2lkdGg6IDEwMCU7CisgIG1hcmdpbi1ib3R0b206IDE4cHg7CisgIHBhZGRp
bmc6IDA7CisgIGZvbnQtc2l6ZTogMTNweDsKKyAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsK
K30KK3RhYmxlIHRoLCB0YWJsZSB0ZCB7CisgIHBhZGRpbmc6IDEwcHggMTBweCA5cHg7CisgIGxp
bmUtaGVpZ2h0OiAxOHB4OworICB0ZXh0LWFsaWduOiBsZWZ0OworfQordGFibGUgdGggeworICBw
YWRkaW5nLXRvcDogOXB4OworICBmb250LXdlaWdodDogYm9sZDsKKyAgdmVydGljYWwtYWxpZ246
IG1pZGRsZTsKK30KK3RhYmxlIHRkIHsKKyAgdmVydGljYWwtYWxpZ246IHRvcDsKKyAgYm9yZGVy
LXRvcDogMXB4IHNvbGlkICNkZGQ7Cit9Cit0YWJsZSB0Ym9keSB0aCB7CisgIGJvcmRlci10b3A6
IDFweCBzb2xpZCAjZGRkOworICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorLmNvbmRlbnNlZC10
YWJsZSB0aCwgLmNvbmRlbnNlZC10YWJsZSB0ZCB7CisgIHBhZGRpbmc6IDVweCA1cHggNHB4Owor
fQorLmJvcmRlcmVkLXRhYmxlIHsKKyAgYm9yZGVyOiAxcHggc29saWQgI2RkZDsKKyAgYm9yZGVy
LWNvbGxhcHNlOiBzZXBhcmF0ZTsKKyAgKmJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CisgIC8q
IElFNywgY29sbGFwc2UgdGFibGUgdG8gcmVtb3ZlIHNwYWNpbmcgKi8KKworICAtd2Via2l0LWJv
cmRlci1yYWRpdXM6IDRweDsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiA0cHg7CisgIGJvcmRlci1y
YWRpdXM6IDRweDsKK30KKy5ib3JkZXJlZC10YWJsZSB0aCArIHRoLCAuYm9yZGVyZWQtdGFibGUg
dGQgKyB0ZCwgLmJvcmRlcmVkLXRhYmxlIHRoICsgdGQgeworICBib3JkZXItbGVmdDogMXB4IHNv
bGlkICNkZGQ7Cit9CisuYm9yZGVyZWQtdGFibGUgdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGg6Zmly
c3QtY2hpbGQsIC5ib3JkZXJlZC10YWJsZSB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZDpmaXJzdC1j
aGlsZCB7CisgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNHB4IDAgMCAwOworICAtbW96LWJvcmRl
ci1yYWRpdXM6IDRweCAwIDAgMDsKKyAgYm9yZGVyLXJhZGl1czogNHB4IDAgMCAwOworfQorLmJv
cmRlcmVkLXRhYmxlIHRoZWFkIHRyOmZpcnN0LWNoaWxkIHRoOmxhc3QtY2hpbGQsIC5ib3JkZXJl
ZC10YWJsZSB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkIHsKKyAgLXdlYmtpdC1i
b3JkZXItcmFkaXVzOiAwIDRweCAwIDA7CisgIC1tb3otYm9yZGVyLXJhZGl1czogMCA0cHggMCAw
OworICBib3JkZXItcmFkaXVzOiAwIDRweCAwIDA7Cit9CisuYm9yZGVyZWQtdGFibGUgdGJvZHkg
dHI6bGFzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCB7CisgIC13ZWJraXQtYm9yZGVyLXJhZGl1czog
MCAwIDAgNHB4OworICAtbW96LWJvcmRlci1yYWRpdXM6IDAgMCAwIDRweDsKKyAgYm9yZGVyLXJh
ZGl1czogMCAwIDAgNHB4OworfQorLmJvcmRlcmVkLXRhYmxlIHRib2R5IHRyOmxhc3QtY2hpbGQg
dGQ6bGFzdC1jaGlsZCB7CisgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMCAwIDRweCAwOworICAt
bW96LWJvcmRlci1yYWRpdXM6IDAgMCA0cHggMDsKKyAgYm9yZGVyLXJhZGl1czogMCAwIDRweCAw
OworfQordGFibGUgLnNwYW4xIHsKKyAgd2lkdGg6IDIwcHg7Cit9Cit0YWJsZSAuc3BhbjIgewor
ICB3aWR0aDogNjBweDsKK30KK3RhYmxlIC5zcGFuMyB7CisgIHdpZHRoOiAxMDBweDsKK30KK3Rh
YmxlIC5zcGFuNCB7CisgIHdpZHRoOiAxNDBweDsKK30KK3RhYmxlIC5zcGFuNSB7CisgIHdpZHRo
OiAxODBweDsKK30KK3RhYmxlIC5zcGFuNiB7CisgIHdpZHRoOiAyMjBweDsKK30KK3RhYmxlIC5z
cGFuNyB7CisgIHdpZHRoOiAyNjBweDsKK30KK3RhYmxlIC5zcGFuOCB7CisgIHdpZHRoOiAzMDBw
eDsKK30KK3RhYmxlIC5zcGFuOSB7CisgIHdpZHRoOiAzNDBweDsKK30KK3RhYmxlIC5zcGFuMTAg
eworICB3aWR0aDogMzgwcHg7Cit9Cit0YWJsZSAuc3BhbjExIHsKKyAgd2lkdGg6IDQyMHB4Owor
fQordGFibGUgLnNwYW4xMiB7CisgIHdpZHRoOiA0NjBweDsKK30KK3RhYmxlIC5zcGFuMTMgewor
ICB3aWR0aDogNTAwcHg7Cit9Cit0YWJsZSAuc3BhbjE0IHsKKyAgd2lkdGg6IDU0MHB4OworfQor
dGFibGUgLnNwYW4xNSB7CisgIHdpZHRoOiA1ODBweDsKK30KK3RhYmxlIC5zcGFuMTYgeworICB3
aWR0aDogNjIwcHg7Cit9CisuemVicmEtc3RyaXBlZCB0Ym9keSB0cjpudGgtY2hpbGQob2RkKSB0
ZCwgLnplYnJhLXN0cmlwZWQgdGJvZHkgdHI6bnRoLWNoaWxkKG9kZCkgdGggeworICBiYWNrZ3Jv
dW5kLWNvbG9yOiAjZjlmOWY5OworfQorLnplYnJhLXN0cmlwZWQgdGJvZHkgdHI6aG92ZXIgdGQs
IC56ZWJyYS1zdHJpcGVkIHRib2R5IHRyOmhvdmVyIHRoIHsKKyAgYmFja2dyb3VuZC1jb2xvcjog
I2Y1ZjVmNTsKK30KK3RhYmxlIC5oZWFkZXIgeworICBjdXJzb3I6IHBvaW50ZXI7Cit9Cit0YWJs
ZSAuaGVhZGVyOmFmdGVyIHsKKyAgY29udGVudDogIiI7CisgIGZsb2F0OiByaWdodDsKKyAgbWFy
Z2luLXRvcDogN3B4OworICBib3JkZXItd2lkdGg6IDAgNHB4IDRweDsKKyAgYm9yZGVyLXN0eWxl
OiBzb2xpZDsKKyAgYm9yZGVyLWNvbG9yOiAjMDAwIHRyYW5zcGFyZW50OworICB2aXNpYmlsaXR5
OiBoaWRkZW47Cit9Cit0YWJsZSAuaGVhZGVyU29ydFVwLCB0YWJsZSAuaGVhZGVyU29ydERvd24g
eworICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDE0MSwgMTkyLCAyMTksIDAuMjUpOworICB0ZXh0
LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43NSk7Cit9Cit0YWJsZSAu
aGVhZGVyOmhvdmVyOmFmdGVyIHsKKyAgdmlzaWJpbGl0eTogdmlzaWJsZTsKK30KK3RhYmxlIC5o
ZWFkZXJTb3J0RG93bjphZnRlciwgdGFibGUgLmhlYWRlclNvcnREb3duOmhvdmVyOmFmdGVyIHsK
KyAgdmlzaWJpbGl0eTogdmlzaWJsZTsKKyAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTYwKTsKKyAg
LWtodG1sLW9wYWNpdHk6IDAuNjsKKyAgLW1vei1vcGFjaXR5OiAwLjY7CisgIG9wYWNpdHk6IDAu
NjsKK30KK3RhYmxlIC5oZWFkZXJTb3J0VXA6YWZ0ZXIgeworICBib3JkZXItYm90dG9tOiBub25l
OworICBib3JkZXItbGVmdDogNHB4IHNvbGlkIHRyYW5zcGFyZW50OworICBib3JkZXItcmlnaHQ6
IDRweCBzb2xpZCB0cmFuc3BhcmVudDsKKyAgYm9yZGVyLXRvcDogNHB4IHNvbGlkICMwMDA7Cisg
IHZpc2liaWxpdHk6IHZpc2libGU7CisgIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTsKKyAgLW1v
ei1ib3gtc2hhZG93OiBub25lOworICBib3gtc2hhZG93OiBub25lOworICBmaWx0ZXI6IGFscGhh
KG9wYWNpdHk9NjApOworICAta2h0bWwtb3BhY2l0eTogMC42OworICAtbW96LW9wYWNpdHk6IDAu
NjsKKyAgb3BhY2l0eTogMC42OworfQordGFibGUgLmJsdWUgeworICBjb2xvcjogIzA0OWNkYjsK
KyAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzA0OWNkYjsKK30KK3RhYmxlIC5oZWFkZXJTb3J0VXAu
Ymx1ZSwgdGFibGUgLmhlYWRlclNvcnREb3duLmJsdWUgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAj
YWRlNmZlOworfQordGFibGUgLmdyZWVuIHsKKyAgY29sb3I6ICM0NmE1NDY7CisgIGJvcmRlci1i
b3R0b20tY29sb3I6ICM0NmE1NDY7Cit9Cit0YWJsZSAuaGVhZGVyU29ydFVwLmdyZWVuLCB0YWJs
ZSAuaGVhZGVyU29ydERvd24uZ3JlZW4geworICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2RlYWNkOwor
fQordGFibGUgLnJlZCB7CisgIGNvbG9yOiAjOWQyNjFkOworICBib3JkZXItYm90dG9tLWNvbG9y
OiAjOWQyNjFkOworfQordGFibGUgLmhlYWRlclNvcnRVcC5yZWQsIHRhYmxlIC5oZWFkZXJTb3J0
RG93bi5yZWQgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjRjOGM1OworfQordGFibGUgLnllbGxv
dyB7CisgIGNvbG9yOiAjZmZjNDBkOworICBib3JkZXItYm90dG9tLWNvbG9yOiAjZmZjNDBkOwor
fQordGFibGUgLmhlYWRlclNvcnRVcC55ZWxsb3csIHRhYmxlIC5oZWFkZXJTb3J0RG93bi55ZWxs
b3cgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmNmQ5OworfQordGFibGUgLm9yYW5nZSB7Cisg
IGNvbG9yOiAjZjg5NDA2OworICBib3JkZXItYm90dG9tLWNvbG9yOiAjZjg5NDA2OworfQordGFi
bGUgLmhlYWRlclNvcnRVcC5vcmFuZ2UsIHRhYmxlIC5oZWFkZXJTb3J0RG93bi5vcmFuZ2Ugewor
ICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmVlOWNjOworfQordGFibGUgLnB1cnBsZSB7CisgIGNvbG9y
OiAjN2E0M2I2OworICBib3JkZXItYm90dG9tLWNvbG9yOiAjN2E0M2I2OworfQordGFibGUgLmhl
YWRlclNvcnRVcC5wdXJwbGUsIHRhYmxlIC5oZWFkZXJTb3J0RG93bi5wdXJwbGUgeworICBiYWNr
Z3JvdW5kLWNvbG9yOiAjZTJkNWYwOworfQorLyogUGF0dGVybnMubGVzcworICogUmVwZWF0YWJs
ZSBVSSBlbGVtZW50cyBvdXRzaWRlIHRoZSBiYXNlIHN0eWxlcyBwcm92aWRlZCBmcm9tIHRoZSBz
Y2FmZm9sZGluZworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLnRvcGJhciB7CisgIGhlaWdo
dDogNDBweDsKKyAgcG9zaXRpb246IGZpeGVkOworICB0b3A6IDA7CisgIGxlZnQ6IDA7CisgIHJp
Z2h0OiAwOworICB6LWluZGV4OiAxMDAwMDsKKyAgb3ZlcmZsb3c6IHZpc2libGU7Cit9CisudG9w
YmFyIGEgeworICBjb2xvcjogI2JmYmZiZjsKKyAgdGV4dC1zaGFkb3c6IDAgLTFweCAwIHJnYmEo
MCwgMCwgMCwgMC4yNSk7Cit9CisudG9wYmFyIGgzIGE6aG92ZXIsIC50b3BiYXIgLmJyYW5kOmhv
dmVyLCAudG9wYmFyIHVsIC5hY3RpdmUgPiBhIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogIzMzMzsK
KyAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTsKKyAgY29sb3I6
ICNmZmZmZmY7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKK30KKy50b3BiYXIgaDMgeworICBw
b3NpdGlvbjogcmVsYXRpdmU7Cit9CisudG9wYmFyIGgzIGEsIC50b3BiYXIgLmJyYW5kIHsKKyAg
ZmxvYXQ6IGxlZnQ7CisgIGRpc3BsYXk6IGJsb2NrOworICBwYWRkaW5nOiA4cHggMjBweCAxMnB4
OworICBtYXJnaW4tbGVmdDogLTIwcHg7CisgIGNvbG9yOiAjZmZmZmZmOworICBmb250LXNpemU6
IDIwcHg7CisgIGZvbnQtd2VpZ2h0OiAyMDA7CisgIGxpbmUtaGVpZ2h0OiAxOworfQorLnRvcGJh
ciBwIHsKKyAgbWFyZ2luOiAwOworICBsaW5lLWhlaWdodDogNDBweDsKK30KKy50b3BiYXIgcCBh
OmhvdmVyIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGNvbG9yOiAjZmZm
ZmZmOworfQorLnRvcGJhciBmb3JtIHsKKyAgZmxvYXQ6IGxlZnQ7CisgIG1hcmdpbjogNXB4IDAg
MCAwOworICBwb3NpdGlvbjogcmVsYXRpdmU7CisgIGZpbHRlcjogYWxwaGEob3BhY2l0eT0xMDAp
OworICAta2h0bWwtb3BhY2l0eTogMTsKKyAgLW1vei1vcGFjaXR5OiAxOworICBvcGFjaXR5OiAx
OworfQorLnRvcGJhciBmb3JtLnB1bGwtcmlnaHQgeworICBmbG9hdDogcmlnaHQ7Cit9CisudG9w
YmFyIGlucHV0IHsKKyAgYmFja2dyb3VuZC1jb2xvcjogIzQ0NDsKKyAgYmFja2dyb3VuZC1jb2xv
cjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpOworICBmb250LWZhbWlseTogIkhlbHZldGljYSBO
ZXVlIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsKKyAgZm9udC1zaXplOiBub3JtYWw7
CisgIGZvbnQtd2VpZ2h0OiAxM3B4OworICBsaW5lLWhlaWdodDogMTsKKyAgcGFkZGluZzogNHB4
IDlweDsKKyAgY29sb3I6ICNmZmZmZmY7CisgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAu
NzUpOworICBib3JkZXI6IDFweCBzb2xpZCAjMTExOworICAtd2Via2l0LWJvcmRlci1yYWRpdXM6
IDRweDsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiA0cHg7CisgIGJvcmRlci1yYWRpdXM6IDRweDsK
KyAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjEp
LCAwIDFweCAwcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KTsKKyAgLW1vei1ib3gtc2hhZG93
OiBpbnNldCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDFweCAwcHggcmdiYSgyNTUs
IDI1NSwgMjU1LCAwLjI1KTsKKyAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMnB4IHJnYmEoMCwg
MCwgMCwgMC4xKSwgMCAxcHggMHB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSk7CisgIC13ZWJr
aXQtdHJhbnNpdGlvbjogbm9uZTsKKyAgLW1vei10cmFuc2l0aW9uOiBub25lOworICAtbXMtdHJh
bnNpdGlvbjogbm9uZTsKKyAgLW8tdHJhbnNpdGlvbjogbm9uZTsKKyAgdHJhbnNpdGlvbjogbm9u
ZTsKK30KKy50b3BiYXIgaW5wdXQ6LW1vei1wbGFjZWhvbGRlciB7CisgIGNvbG9yOiAjZTZlNmU2
OworfQorLnRvcGJhciBpbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7CisgIGNvbG9y
OiAjZTZlNmU2OworfQorLnRvcGJhciBpbnB1dDpob3ZlciB7CisgIGJhY2tncm91bmQtY29sb3I6
ICNiZmJmYmY7CisgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsK
KyAgY29sb3I6ICNmZmZmZmY7Cit9CisudG9wYmFyIGlucHV0OmZvY3VzLCAudG9wYmFyIGlucHV0
LmZvY3VzZWQgeworICBvdXRsaW5lOiAwOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmOwor
ICBjb2xvcjogIzQwNDA0MDsKKyAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgI2ZmZmZmZjsKKyAgYm9y
ZGVyOiAwOworICBwYWRkaW5nOiA1cHggMTBweDsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAg
M3B4IHJnYmEoMCwgMCwgMCwgMC4xNSk7CisgIC1tb3otYm94LXNoYWRvdzogMCAwIDNweCByZ2Jh
KDAsIDAsIDAsIDAuMTUpOworICBib3gtc2hhZG93OiAwIDAgM3B4IHJnYmEoMCwgMCwgMCwgMC4x
NSk7Cit9CisudG9wYmFyLWlubmVyLCAudG9wYmFyIC5maWxsIHsKKyAgYmFja2dyb3VuZC1jb2xv
cjogIzIyMjsKKyAgYmFja2dyb3VuZC1jb2xvcjogIzIyMjIyMjsKKyAgYmFja2dyb3VuZC1yZXBl
YXQ6IHJlcGVhdC14OworICBiYWNrZ3JvdW5kLWltYWdlOiAta2h0bWwtZ3JhZGllbnQobGluZWFy
LCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGZyb20oIzMzMzMzMyksIHRvKCMyMjIyMjIpKTsKKyAg
YmFja2dyb3VuZC1pbWFnZTogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAjMzMzMzMzLCAjMjIy
MjIyKTsKKyAgYmFja2dyb3VuZC1pbWFnZTogLW1zLWxpbmVhci1ncmFkaWVudCh0b3AsICMzMzMz
MzMsICMyMjIyMjIpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVh
ciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBjb2xvci1zdG9wKDAlLCAjMzMzMzMzKSwgY29sb3It
c3RvcCgxMDAlLCAjMjIyMjIyKSk7CisgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFy
LWdyYWRpZW50KHRvcCwgIzMzMzMzMywgIzIyMjIyMik7CisgIGJhY2tncm91bmQtaW1hZ2U6IC1v
LWxpbmVhci1ncmFkaWVudCh0b3AsICMzMzMzMzMsICMyMjIyMjIpOworICBiYWNrZ3JvdW5kLWlt
YWdlOiBsaW5lYXItZ3JhZGllbnQodG9wLCAjMzMzMzMzLCAjMjIyMjIyKTsKKyAgZmlsdGVyOiBw
cm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0n
IzMzMzMzMycsIGVuZENvbG9yc3RyPScjMjIyMjIyJywgR3JhZGllbnRUeXBlPTApOworICAtd2Vi
a2l0LWJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMjUpLCBpbnNldCAwIC0x
cHggMCByZ2JhKDAsIDAsIDAsIDAuMSk7CisgIC1tb3otYm94LXNoYWRvdzogMCAxcHggM3B4IHJn
YmEoMCwgMCwgMCwgMC4yNSksIGluc2V0IDAgLTFweCAwIHJnYmEoMCwgMCwgMCwgMC4xKTsKKyAg
Ym94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4yNSksIGluc2V0IDAgLTFweCAw
IHJnYmEoMCwgMCwgMCwgMC4xKTsKK30KKy50b3BiYXIgZGl2ID4gdWwsIC5uYXYgeworICBkaXNw
bGF5OiBibG9jazsKKyAgZmxvYXQ6IGxlZnQ7CisgIG1hcmdpbjogMCAxMHB4IDAgMDsKKyAgcG9z
aXRpb246IHJlbGF0aXZlOworICBsZWZ0OiAwOworfQorLnRvcGJhciBkaXYgPiB1bCA+IGxpLCAu
bmF2ID4gbGkgeworICBkaXNwbGF5OiBibG9jazsKKyAgZmxvYXQ6IGxlZnQ7Cit9CisudG9wYmFy
IGRpdiA+IHVsIGEsIC5uYXYgYSB7CisgIGRpc3BsYXk6IGJsb2NrOworICBmbG9hdDogbm9uZTsK
KyAgcGFkZGluZzogMTBweCAxMHB4IDExcHg7CisgIGxpbmUtaGVpZ2h0OiAxOXB4OworICB0ZXh0
LWRlY29yYXRpb246IG5vbmU7Cit9CisudG9wYmFyIGRpdiA+IHVsIGE6aG92ZXIsIC5uYXYgYTpo
b3ZlciB7CisgIGNvbG9yOiAjZmZmZmZmOworICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cit9Cisu
dG9wYmFyIGRpdiA+IHVsIC5hY3RpdmUgPiBhLCAubmF2IC5hY3RpdmUgPiBhIHsKKyAgYmFja2dy
b3VuZC1jb2xvcjogIzIyMjsKKyAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUp
OworfQorLnRvcGJhciBkaXYgPiB1bC5zZWNvbmRhcnktbmF2LCAubmF2LnNlY29uZGFyeS1uYXYg
eworICBmbG9hdDogcmlnaHQ7CisgIG1hcmdpbi1sZWZ0OiAxMHB4OworICBtYXJnaW4tcmlnaHQ6
IDA7Cit9CisudG9wYmFyIGRpdiA+IHVsLnNlY29uZGFyeS1uYXYgLm1lbnUtZHJvcGRvd24sCisu
bmF2LnNlY29uZGFyeS1uYXYgLm1lbnUtZHJvcGRvd24sCisudG9wYmFyIGRpdiA+IHVsLnNlY29u
ZGFyeS1uYXYgLmRyb3Bkb3duLW1lbnUsCisubmF2LnNlY29uZGFyeS1uYXYgLmRyb3Bkb3duLW1l
bnUgeworICByaWdodDogMDsKKyAgYm9yZGVyOiAwOworfQorLnRvcGJhciBkaXYgPiB1bCBhLm1l
bnU6aG92ZXIsCisubmF2IGEubWVudTpob3ZlciwKKy50b3BiYXIgZGl2ID4gdWwgbGkub3BlbiAu
bWVudSwKKy5uYXYgbGkub3BlbiAubWVudSwKKy50b3BiYXIgZGl2ID4gdWwgLmRyb3Bkb3duLXRv
Z2dsZTpob3ZlciwKKy5uYXYgLmRyb3Bkb3duLXRvZ2dsZTpob3ZlciwKKy50b3BiYXIgZGl2ID4g
dWwgLmRyb3Bkb3duLm9wZW4gLmRyb3Bkb3duLXRvZ2dsZSwKKy5uYXYgLmRyb3Bkb3duLm9wZW4g
LmRyb3Bkb3duLXRvZ2dsZSB7CisgIGJhY2tncm91bmQ6ICM0NDQ7CisgIGJhY2tncm91bmQ6IHJn
YmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7Cit9CisudG9wYmFyIGRpdiA+IHVsIC5tZW51LWRyb3Bk
b3duLAorLm5hdiAubWVudS1kcm9wZG93biwKKy50b3BiYXIgZGl2ID4gdWwgLmRyb3Bkb3duLW1l
bnUsCisubmF2IC5kcm9wZG93bi1tZW51IHsKKyAgYmFja2dyb3VuZC1jb2xvcjogIzMzMzsKK30K
Ky50b3BiYXIgZGl2ID4gdWwgLm1lbnUtZHJvcGRvd24gYS5tZW51LAorLm5hdiAubWVudS1kcm9w
ZG93biBhLm1lbnUsCisudG9wYmFyIGRpdiA+IHVsIC5kcm9wZG93bi1tZW51IGEubWVudSwKKy5u
YXYgLmRyb3Bkb3duLW1lbnUgYS5tZW51LAorLnRvcGJhciBkaXYgPiB1bCAubWVudS1kcm9wZG93
biAuZHJvcGRvd24tdG9nZ2xlLAorLm5hdiAubWVudS1kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xl
LAorLnRvcGJhciBkaXYgPiB1bCAuZHJvcGRvd24tbWVudSAuZHJvcGRvd24tdG9nZ2xlLAorLm5h
diAuZHJvcGRvd24tbWVudSAuZHJvcGRvd24tdG9nZ2xlIHsKKyAgY29sb3I6ICNmZmZmZmY7Cit9
CisudG9wYmFyIGRpdiA+IHVsIC5tZW51LWRyb3Bkb3duIGEubWVudS5vcGVuLAorLm5hdiAubWVu
dS1kcm9wZG93biBhLm1lbnUub3BlbiwKKy50b3BiYXIgZGl2ID4gdWwgLmRyb3Bkb3duLW1lbnUg
YS5tZW51Lm9wZW4sCisubmF2IC5kcm9wZG93bi1tZW51IGEubWVudS5vcGVuLAorLnRvcGJhciBk
aXYgPiB1bCAubWVudS1kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLm9wZW4sCisubmF2IC5tZW51
LWRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUub3BlbiwKKy50b3BiYXIgZGl2ID4gdWwgLmRyb3Bk
b3duLW1lbnUgLmRyb3Bkb3duLXRvZ2dsZS5vcGVuLAorLm5hdiAuZHJvcGRvd24tbWVudSAuZHJv
cGRvd24tdG9nZ2xlLm9wZW4geworICBiYWNrZ3JvdW5kOiAjNDQ0OworICBiYWNrZ3JvdW5kOiBy
Z2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpOworfQorLnRvcGJhciBkaXYgPiB1bCAubWVudS1kcm9w
ZG93biBsaSBhLAorLm5hdiAubWVudS1kcm9wZG93biBsaSBhLAorLnRvcGJhciBkaXYgPiB1bCAu
ZHJvcGRvd24tbWVudSBsaSBhLAorLm5hdiAuZHJvcGRvd24tbWVudSBsaSBhIHsKKyAgY29sb3I6
ICM5OTk7CisgIHRleHQtc2hhZG93OiAwIDFweCAwIHJnYmEoMCwgMCwgMCwgMC41KTsKK30KKy50
b3BiYXIgZGl2ID4gdWwgLm1lbnUtZHJvcGRvd24gbGkgYTpob3ZlciwKKy5uYXYgLm1lbnUtZHJv
cGRvd24gbGkgYTpob3ZlciwKKy50b3BiYXIgZGl2ID4gdWwgLmRyb3Bkb3duLW1lbnUgbGkgYTpo
b3ZlciwKKy5uYXYgLmRyb3Bkb3duLW1lbnUgbGkgYTpob3ZlciB7CisgIGJhY2tncm91bmQtY29s
b3I6ICMxOTE5MTk7CisgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKKyAgYmFja2dyb3Vu
ZC1pbWFnZTogLWtodG1sLWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBm
cm9tKCMyOTI5MjkpLCB0bygjMTkxOTE5KSk7CisgIGJhY2tncm91bmQtaW1hZ2U6IC1tb3otbGlu
ZWFyLWdyYWRpZW50KHRvcCwgIzI5MjkyOSwgIzE5MTkxOSk7CisgIGJhY2tncm91bmQtaW1hZ2U6
IC1tcy1saW5lYXItZ3JhZGllbnQodG9wLCAjMjkyOTI5LCAjMTkxOTE5KTsKKyAgYmFja2dyb3Vu
ZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwg
Y29sb3Itc3RvcCgwJSwgIzI5MjkyOSksIGNvbG9yLXN0b3AoMTAwJSwgIzE5MTkxOSkpOworICBi
YWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsICMyOTI5MjksICMx
OTE5MTkpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQodG9wLCAjMjky
OTI5LCAjMTkxOTE5KTsKKyAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvcCwg
IzI5MjkyOSwgIzE5MTkxOSk7CisgIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWlj
cm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyMyOTI5MjknLCBlbmRDb2xvcnN0cj0nIzE5
MTkxOScsIEdyYWRpZW50VHlwZT0wKTsKKyAgY29sb3I6ICNmZmZmZmY7Cit9CisudG9wYmFyIGRp
diA+IHVsIC5tZW51LWRyb3Bkb3duIC5hY3RpdmUgYSwKKy5uYXYgLm1lbnUtZHJvcGRvd24gLmFj
dGl2ZSBhLAorLnRvcGJhciBkaXYgPiB1bCAuZHJvcGRvd24tbWVudSAuYWN0aXZlIGEsCisubmF2
IC5kcm9wZG93bi1tZW51IC5hY3RpdmUgYSB7CisgIGNvbG9yOiAjZmZmZmZmOworfQorLnRvcGJh
ciBkaXYgPiB1bCAubWVudS1kcm9wZG93biAuZGl2aWRlciwKKy5uYXYgLm1lbnUtZHJvcGRvd24g
LmRpdmlkZXIsCisudG9wYmFyIGRpdiA+IHVsIC5kcm9wZG93bi1tZW51IC5kaXZpZGVyLAorLm5h
diAuZHJvcGRvd24tbWVudSAuZGl2aWRlciB7CisgIGJhY2tncm91bmQtY29sb3I6ICMyMjI7Cisg
IGJvcmRlci1jb2xvcjogIzQ0NDsKK30KKy50b3BiYXIgdWwgLm1lbnUtZHJvcGRvd24gbGkgYSwg
LnRvcGJhciB1bCAuZHJvcGRvd24tbWVudSBsaSBhIHsKKyAgcGFkZGluZzogNHB4IDE1cHg7Cit9
CitsaS5tZW51LCAuZHJvcGRvd24geworICBwb3NpdGlvbjogcmVsYXRpdmU7Cit9CithLm1lbnU6
YWZ0ZXIsIC5kcm9wZG93bi10b2dnbGU6YWZ0ZXIgeworICB3aWR0aDogMDsKKyAgaGVpZ2h0OiAw
OworICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgIGNvbnRlbnQ6ICImZGFycjsiOworICB0ZXh0
LWluZGVudDogLTk5OTk5cHg7CisgIHZlcnRpY2FsLWFsaWduOiB0b3A7CisgIG1hcmdpbi10b3A6
IDhweDsKKyAgbWFyZ2luLWxlZnQ6IDRweDsKKyAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCB0cmFu
c3BhcmVudDsKKyAgYm9yZGVyLXJpZ2h0OiA0cHggc29saWQgdHJhbnNwYXJlbnQ7CisgIGJvcmRl
ci10b3A6IDRweCBzb2xpZCAjZmZmZmZmOworICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NTApOwor
ICAta2h0bWwtb3BhY2l0eTogMC41OworICAtbW96LW9wYWNpdHk6IDAuNTsKKyAgb3BhY2l0eTog
MC41OworfQorLm1lbnUtZHJvcGRvd24sIC5kcm9wZG93bi1tZW51IHsKKyAgYmFja2dyb3VuZC1j
b2xvcjogI2ZmZmZmZjsKKyAgZmxvYXQ6IGxlZnQ7CisgIGRpc3BsYXk6IG5vbmU7CisgIHBvc2l0
aW9uOiBhYnNvbHV0ZTsKKyAgdG9wOiA0MHB4OworICB6LWluZGV4OiA5MDA7CisgIG1pbi13aWR0
aDogMTYwcHg7CisgIG1heC13aWR0aDogMjIwcHg7CisgIF93aWR0aDogMTYwcHg7CisgIG1hcmdp
bi1sZWZ0OiAwOworICBtYXJnaW4tcmlnaHQ6IDA7CisgIHBhZGRpbmc6IDZweCAwOworICB6b29t
OiAxOworICBib3JkZXItY29sb3I6ICM5OTk7CisgIGJvcmRlci1jb2xvcjogcmdiYSgwLCAwLCAw
LCAwLjIpOworICBib3JkZXItc3R5bGU6IHNvbGlkOworICBib3JkZXItd2lkdGg6IDAgMXB4IDFw
eDsKKyAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwIDAgNnB4IDZweDsKKyAgLW1vei1ib3JkZXIt
cmFkaXVzOiAwIDAgNnB4IDZweDsKKyAgYm9yZGVyLXJhZGl1czogMCAwIDZweCA2cHg7CisgIC13
ZWJraXQtYm94LXNoYWRvdzogMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4yKTsKKyAgLW1vei1i
b3gtc2hhZG93OiAwIDJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjIpOworICBib3gtc2hhZG93OiAw
IDJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjIpOworICAtd2Via2l0LWJhY2tncm91bmQtY2xpcDog
cGFkZGluZy1ib3g7CisgIC1tb3otYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsKKyAgYmFj
a2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsKK30KKy5tZW51LWRyb3Bkb3duIGxpLCAuZHJvcGRv
d24tbWVudSBsaSB7CisgIGZsb2F0OiBub25lOworICBkaXNwbGF5OiBibG9jazsKKyAgYmFja2dy
b3VuZC1jb2xvcjogbm9uZTsKK30KKy5tZW51LWRyb3Bkb3duIC5kaXZpZGVyLCAuZHJvcGRvd24t
bWVudSAuZGl2aWRlciB7CisgIGhlaWdodDogMXB4OworICBtYXJnaW46IDVweCAwOworICBvdmVy
ZmxvdzogaGlkZGVuOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworICBib3JkZXItYm90dG9t
OiAxcHggc29saWQgI2ZmZmZmZjsKK30KKy50b3BiYXIgLmRyb3Bkb3duLW1lbnUgYSwgLmRyb3Bk
b3duLW1lbnUgYSB7CisgIGRpc3BsYXk6IGJsb2NrOworICBwYWRkaW5nOiA0cHggMTVweDsKKyAg
Y2xlYXI6IGJvdGg7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIGxpbmUtaGVpZ2h0OiAxOHB4
OworICBjb2xvcjogIzgwODA4MDsKKyAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgI2ZmZmZmZjsKK30K
Ky50b3BiYXIgLmRyb3Bkb3duLW1lbnUgYTpob3ZlciwKKy5kcm9wZG93bi1tZW51IGE6aG92ZXIs
CisudG9wYmFyIC5kcm9wZG93bi1tZW51IGEuaG92ZXIsCisuZHJvcGRvd24tbWVudSBhLmhvdmVy
IHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2RkZGRkZDsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IHJl
cGVhdC14OworICBiYWNrZ3JvdW5kLWltYWdlOiAta2h0bWwtZ3JhZGllbnQobGluZWFyLCBsZWZ0
IHRvcCwgbGVmdCBib3R0b20sIGZyb20oI2VlZWVlZSksIHRvKCNkZGRkZGQpKTsKKyAgYmFja2dy
b3VuZC1pbWFnZTogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAjZWVlZWVlLCAjZGRkZGRkKTsK
KyAgYmFja2dyb3VuZC1pbWFnZTogLW1zLWxpbmVhci1ncmFkaWVudCh0b3AsICNlZWVlZWUsICNk
ZGRkZGQpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVm
dCB0b3AsIGxlZnQgYm90dG9tLCBjb2xvci1zdG9wKDAlLCAjZWVlZWVlKSwgY29sb3Itc3RvcCgx
MDAlLCAjZGRkZGRkKSk7CisgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRp
ZW50KHRvcCwgI2VlZWVlZSwgI2RkZGRkZCk7CisgIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVh
ci1ncmFkaWVudCh0b3AsICNlZWVlZWUsICNkZGRkZGQpOworICBiYWNrZ3JvdW5kLWltYWdlOiBs
aW5lYXItZ3JhZGllbnQodG9wLCAjZWVlZWVlLCAjZGRkZGRkKTsKKyAgZmlsdGVyOiBwcm9naWQ6
RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2VlZWVl
ZScsIGVuZENvbG9yc3RyPScjZGRkZGRkJywgR3JhZGllbnRUeXBlPTApOworICBjb2xvcjogIzQw
NDA0MDsKKyAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAtd2Via2l0LWJveC1zaGFkb3c6IGlu
c2V0IDAgMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjAyNSksIGluc2V0IDAgLTFweCByZ2JhKDAsIDAs
IDAsIDAuMDI1KTsKKyAgLW1vei1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMCwgMCwg
MCwgMC4wMjUpLCBpbnNldCAwIC0xcHggcmdiYSgwLCAwLCAwLCAwLjAyNSk7CisgIGJveC1zaGFk
b3c6IGluc2V0IDAgMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjAyNSksIGluc2V0IDAgLTFweCByZ2Jh
KDAsIDAsIDAsIDAuMDI1KTsKK30KKy5vcGVuIC5tZW51LAorLmRyb3Bkb3duLm9wZW4gLm1lbnUs
Cisub3BlbiAuZHJvcGRvd24tdG9nZ2xlLAorLmRyb3Bkb3duLm9wZW4gLmRyb3Bkb3duLXRvZ2ds
ZSB7CisgIGNvbG9yOiAjZmZmZmZmOworICBiYWNrZ3JvdW5kOiAjY2NjOworICBiYWNrZ3JvdW5k
OiByZ2JhKDAsIDAsIDAsIDAuMyk7Cit9Cisub3BlbiAubWVudS1kcm9wZG93biwKKy5kcm9wZG93
bi5vcGVuIC5tZW51LWRyb3Bkb3duLAorLm9wZW4gLmRyb3Bkb3duLW1lbnUsCisuZHJvcGRvd24u
b3BlbiAuZHJvcGRvd24tbWVudSB7CisgIGRpc3BsYXk6IGJsb2NrOworfQorLnRhYnMsIC5waWxs
cyB7CisgIG1hcmdpbjogMCAwIDE4cHg7CisgIHBhZGRpbmc6IDA7CisgIGxpc3Qtc3R5bGU6IG5v
bmU7CisgIHpvb206IDE7Cit9CisudGFiczpiZWZvcmUsCisucGlsbHM6YmVmb3JlLAorLnRhYnM6
YWZ0ZXIsCisucGlsbHM6YWZ0ZXIgeworICBkaXNwbGF5OiB0YWJsZTsKKyAgY29udGVudDogIiI7
CisgIHpvb206IDE7Cit9CisudGFiczphZnRlciwgLnBpbGxzOmFmdGVyIHsKKyAgY2xlYXI6IGJv
dGg7Cit9CisudGFicyA+IGxpLCAucGlsbHMgPiBsaSB7CisgIGZsb2F0OiBsZWZ0OworfQorLnRh
YnMgPiBsaSA+IGEsIC5waWxscyA+IGxpID4gYSB7CisgIGRpc3BsYXk6IGJsb2NrOworfQorLnRh
YnMgeworICBib3JkZXItY29sb3I6ICNkZGQ7CisgIGJvcmRlci1zdHlsZTogc29saWQ7CisgIGJv
cmRlci13aWR0aDogMCAwIDFweDsKK30KKy50YWJzID4gbGkgeworICBwb3NpdGlvbjogcmVsYXRp
dmU7CisgIG1hcmdpbi1ib3R0b206IC0xcHg7Cit9CisudGFicyA+IGxpID4gYSB7CisgIHBhZGRp
bmc6IDAgMTVweDsKKyAgbWFyZ2luLXJpZ2h0OiAycHg7CisgIGxpbmUtaGVpZ2h0OiAzNHB4Owor
ICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKKyAgLXdlYmtpdC1ib3JkZXItcmFkaXVz
OiA0cHggNHB4IDAgMDsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiA0cHggNHB4IDAgMDsKKyAgYm9y
ZGVyLXJhZGl1czogNHB4IDRweCAwIDA7Cit9CisudGFicyA+IGxpID4gYTpob3ZlciB7CisgIHRl
eHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKKyAgYm9yZGVy
LWNvbG9yOiAjZWVlICNlZWUgI2RkZDsKK30KKy50YWJzIC5hY3RpdmUgPiBhLCAudGFicyAuYWN0
aXZlID4gYTpob3ZlciB7CisgIGNvbG9yOiAjODA4MDgwOworICBiYWNrZ3JvdW5kLWNvbG9yOiAj
ZmZmZmZmOworICBib3JkZXI6IDFweCBzb2xpZCAjZGRkOworICBib3JkZXItYm90dG9tLWNvbG9y
OiB0cmFuc3BhcmVudDsKKyAgY3Vyc29yOiBkZWZhdWx0OworfQorLnRhYnMgLm1lbnUtZHJvcGRv
d24sIC50YWJzIC5kcm9wZG93bi1tZW51IHsKKyAgdG9wOiAzNXB4OworICBib3JkZXItd2lkdGg6
IDFweDsKKyAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwIDZweCA2cHggNnB4OworICAtbW96LWJv
cmRlci1yYWRpdXM6IDAgNnB4IDZweCA2cHg7CisgIGJvcmRlci1yYWRpdXM6IDAgNnB4IDZweCA2
cHg7Cit9CisudGFicyBhLm1lbnU6YWZ0ZXIsIC50YWJzIC5kcm9wZG93bi10b2dnbGU6YWZ0ZXIg
eworICBib3JkZXItdG9wLWNvbG9yOiAjOTk5OworICBtYXJnaW4tdG9wOiAxNXB4OworICBtYXJn
aW4tbGVmdDogNXB4OworfQorLnRhYnMgbGkub3Blbi5tZW51IC5tZW51LCAudGFicyAub3Blbi5k
cm9wZG93biAuZHJvcGRvd24tdG9nZ2xlIHsKKyAgYm9yZGVyLWNvbG9yOiAjOTk5OworfQorLnRh
YnMgbGkub3BlbiBhLm1lbnU6YWZ0ZXIsIC50YWJzIC5kcm9wZG93bi5vcGVuIC5kcm9wZG93bi10
b2dnbGU6YWZ0ZXIgeworICBib3JkZXItdG9wLWNvbG9yOiAjNTU1OworfQorLnBpbGxzIGEgewor
ICBtYXJnaW46IDVweCAzcHggNXB4IDA7CisgIHBhZGRpbmc6IDAgMTVweDsKKyAgbGluZS1oZWln
aHQ6IDMwcHg7CisgIHRleHQtc2hhZG93OiAwIDFweCAxcHggI2ZmZmZmZjsKKyAgLXdlYmtpdC1i
b3JkZXItcmFkaXVzOiAxNXB4OworICAtbW96LWJvcmRlci1yYWRpdXM6IDE1cHg7CisgIGJvcmRl
ci1yYWRpdXM6IDE1cHg7Cit9CisucGlsbHMgYTpob3ZlciB7CisgIGNvbG9yOiAjZmZmZmZmOwor
ICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgIHRleHQtc2hhZG93OiAwIDFweCAxcHggcmdiYSgw
LCAwLCAwLCAwLjI1KTsKKyAgYmFja2dyb3VuZC1jb2xvcjogIzAwNDM4YTsKK30KKy5waWxscyAu
YWN0aXZlIGEgeworICBjb2xvcjogI2ZmZmZmZjsKKyAgdGV4dC1zaGFkb3c6IDAgMXB4IDFweCBy
Z2JhKDAsIDAsIDAsIDAuMjUpOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA2OWQ2OworfQorLnBp
bGxzLXZlcnRpY2FsID4gbGkgeworICBmbG9hdDogbm9uZTsKK30KKy50YWItY29udGVudCA+IC50
YWItcGFuZSwKKy5waWxsLWNvbnRlbnQgPiAucGlsbC1wYW5lLAorLnRhYi1jb250ZW50ID4gZGl2
LAorLnBpbGwtY29udGVudCA+IGRpdiB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisudGFiLWNvbnRl
bnQgPiAuYWN0aXZlLCAucGlsbC1jb250ZW50ID4gLmFjdGl2ZSB7CisgIGRpc3BsYXk6IGJsb2Nr
OworfQorLmJyZWFkY3J1bWIgeworICBwYWRkaW5nOiA3cHggMTRweDsKKyAgbWFyZ2luOiAwIDAg
MThweDsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6
IHJlcGVhdC14OworICBiYWNrZ3JvdW5kLWltYWdlOiAta2h0bWwtZ3JhZGllbnQobGluZWFyLCBs
ZWZ0IHRvcCwgbGVmdCBib3R0b20sIGZyb20oI2ZmZmZmZiksIHRvKCNmNWY1ZjUpKTsKKyAgYmFj
a2dyb3VuZC1pbWFnZTogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAjZmZmZmZmLCAjZjVmNWY1
KTsKKyAgYmFja2dyb3VuZC1pbWFnZTogLW1zLWxpbmVhci1ncmFkaWVudCh0b3AsICNmZmZmZmYs
ICNmNWY1ZjUpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwg
bGVmdCB0b3AsIGxlZnQgYm90dG9tLCBjb2xvci1zdG9wKDAlLCAjZmZmZmZmKSwgY29sb3Itc3Rv
cCgxMDAlLCAjZjVmNWY1KSk7CisgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdy
YWRpZW50KHRvcCwgI2ZmZmZmZiwgI2Y1ZjVmNSk7CisgIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxp
bmVhci1ncmFkaWVudCh0b3AsICNmZmZmZmYsICNmNWY1ZjUpOworICBiYWNrZ3JvdW5kLWltYWdl
OiBsaW5lYXItZ3JhZGllbnQodG9wLCAjZmZmZmZmLCAjZjVmNWY1KTsKKyAgZmlsdGVyOiBwcm9n
aWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2Zm
ZmZmZicsIGVuZENvbG9yc3RyPScjZjVmNWY1JywgR3JhZGllbnRUeXBlPTApOworICBib3JkZXI6
IDFweCBzb2xpZCAjZGRkOworICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDNweDsKKyAgLW1vei1i
b3JkZXItcmFkaXVzOiAzcHg7CisgIGJvcmRlci1yYWRpdXM6IDNweDsKKyAgLXdlYmtpdC1ib3gt
c2hhZG93OiBpbnNldCAwIDFweCAwICNmZmZmZmY7CisgIC1tb3otYm94LXNoYWRvdzogaW5zZXQg
MCAxcHggMCAjZmZmZmZmOworICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwICNmZmZmZmY7Cit9
CisuYnJlYWRjcnVtYiBsaSB7CisgIGRpc3BsYXk6IGlubGluZTsKKyAgdGV4dC1zaGFkb3c6IDAg
MXB4IDAgI2ZmZmZmZjsKK30KKy5icmVhZGNydW1iIC5kaXZpZGVyIHsKKyAgcGFkZGluZzogMCA1
cHg7CisgIGNvbG9yOiAjYmZiZmJmOworfQorLmJyZWFkY3J1bWIgLmFjdGl2ZSBhIHsKKyAgY29s
b3I6ICM0MDQwNDA7Cit9CisuaGVyby11bml0IHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVm
NTsKKyAgbWFyZ2luLWJvdHRvbTogMzBweDsKKyAgcGFkZGluZzogNjBweDsKKyAgLXdlYmtpdC1i
b3JkZXItcmFkaXVzOiA2cHg7CisgIC1tb3otYm9yZGVyLXJhZGl1czogNnB4OworICBib3JkZXIt
cmFkaXVzOiA2cHg7Cit9CisuaGVyby11bml0IGgxIHsKKyAgbWFyZ2luLWJvdHRvbTogMDsKKyAg
Zm9udC1zaXplOiA2MHB4OworICBsaW5lLWhlaWdodDogMTsKKyAgbGV0dGVyLXNwYWNpbmc6IC0x
cHg7Cit9CisuaGVyby11bml0IHAgeworICBmb250LXNpemU6IDE4cHg7CisgIGZvbnQtd2VpZ2h0
OiAyMDA7CisgIGxpbmUtaGVpZ2h0OiAyN3B4OworfQorZm9vdGVyIHsKKyAgbWFyZ2luLXRvcDog
MTdweDsKKyAgcGFkZGluZy10b3A6IDE3cHg7CisgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZWVl
OworfQorLnBhZ2UtaGVhZGVyIHsKKyAgbWFyZ2luLWJvdHRvbTogMTdweDsKKyAgYm9yZGVyLWJv
dHRvbTogMXB4IHNvbGlkICNkZGQ7CisgIC13ZWJraXQtYm94LXNoYWRvdzogMCAxcHggMCByZ2Jh
KDI1NSwgMjU1LCAyNTUsIDAuNSk7CisgIC1tb3otYm94LXNoYWRvdzogMCAxcHggMCByZ2JhKDI1
NSwgMjU1LCAyNTUsIDAuNSk7CisgIGJveC1zaGFkb3c6IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwg
MjU1LCAwLjUpOworfQorLnBhZ2UtaGVhZGVyIGgxIHsKKyAgbWFyZ2luLWJvdHRvbTogOHB4Owor
fQorLmJ0bi5kYW5nZXIsCisuYWxlcnQtbWVzc2FnZS5kYW5nZXIsCisuYnRuLmRhbmdlcjpob3Zl
ciwKKy5hbGVydC1tZXNzYWdlLmRhbmdlcjpob3ZlciwKKy5idG4uZXJyb3IsCisuYWxlcnQtbWVz
c2FnZS5lcnJvciwKKy5idG4uZXJyb3I6aG92ZXIsCisuYWxlcnQtbWVzc2FnZS5lcnJvcjpob3Zl
ciwKKy5idG4uc3VjY2VzcywKKy5hbGVydC1tZXNzYWdlLnN1Y2Nlc3MsCisuYnRuLnN1Y2Nlc3M6
aG92ZXIsCisuYWxlcnQtbWVzc2FnZS5zdWNjZXNzOmhvdmVyLAorLmJ0bi5pbmZvLAorLmFsZXJ0
LW1lc3NhZ2UuaW5mbywKKy5idG4uaW5mbzpob3ZlciwKKy5hbGVydC1tZXNzYWdlLmluZm86aG92
ZXIgeworICBjb2xvcjogI2ZmZmZmZjsKK30KKy5idG4gLmNsb3NlLCAuYWxlcnQtbWVzc2FnZSAu
Y2xvc2UgeworICBmb250LWZhbWlseTogQXJpYWwsIHNhbnMtc2VyaWY7CisgIGxpbmUtaGVpZ2h0
OiAxOHB4OworfQorLmJ0bi5kYW5nZXIsCisuYWxlcnQtbWVzc2FnZS5kYW5nZXIsCisuYnRuLmVy
cm9yLAorLmFsZXJ0LW1lc3NhZ2UuZXJyb3IgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzQzYzM1
OworICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7CisgIGJhY2tncm91bmQtaW1hZ2U6IC1r
aHRtbC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgZnJvbSgjZWU1ZjVi
KSwgdG8oI2M0M2MzNSkpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtbW96LWxpbmVhci1ncmFkaWVu
dCh0b3AsICNlZTVmNWIsICNjNDNjMzUpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtbXMtbGluZWFy
LWdyYWRpZW50KHRvcCwgI2VlNWY1YiwgI2M0M2MzNSk7CisgIGJhY2tncm91bmQtaW1hZ2U6IC13
ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGNvbG9yLXN0b3Ao
MCUsICNlZTVmNWIpLCBjb2xvci1zdG9wKDEwMCUsICNjNDNjMzUpKTsKKyAgYmFja2dyb3VuZC1p
bWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAjZWU1ZjViLCAjYzQzYzM1KTsKKyAg
YmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KHRvcCwgI2VlNWY1YiwgI2M0M2Mz
NSk7CisgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0b3AsICNlZTVmNWIsICNj
NDNjMzUpOworICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFk
aWVudChzdGFydENvbG9yc3RyPScjZWU1ZjViJywgZW5kQ29sb3JzdHI9JyNjNDNjMzUnLCBHcmFk
aWVudFR5cGU9MCk7CisgIHRleHQtc2hhZG93OiAwIC0xcHggMCByZ2JhKDAsIDAsIDAsIDAuMjUp
OworICBib3JkZXItY29sb3I6ICNjNDNjMzUgI2M0M2MzNSAjODgyYTI1OworICBib3JkZXItY29s
b3I6IHJnYmEoMCwgMCwgMCwgMC4xKSByZ2JhKDAsIDAsIDAsIDAuMSkgcmdiYSgwLCAwLCAwLCAw
LjI1KTsKK30KKy5idG4uc3VjY2VzcywgLmFsZXJ0LW1lc3NhZ2Uuc3VjY2VzcyB7CisgIGJhY2tn
cm91bmQtY29sb3I6ICM1N2E5NTc7CisgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKKyAg
YmFja2dyb3VuZC1pbWFnZTogLWtodG1sLWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQg
Ym90dG9tLCBmcm9tKCM2MmM0NjIpLCB0bygjNTdhOTU3KSk7CisgIGJhY2tncm91bmQtaW1hZ2U6
IC1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwgIzYyYzQ2MiwgIzU3YTk1Nyk7CisgIGJhY2tncm91
bmQtaW1hZ2U6IC1tcy1saW5lYXItZ3JhZGllbnQodG9wLCAjNjJjNDYyLCAjNTdhOTU3KTsKKyAg
YmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0
IGJvdHRvbSwgY29sb3Itc3RvcCgwJSwgIzYyYzQ2MiksIGNvbG9yLXN0b3AoMTAwJSwgIzU3YTk1
NykpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsICM2
MmM0NjIsICM1N2E5NTcpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQo
dG9wLCAjNjJjNDYyLCAjNTdhOTU3KTsKKyAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRp
ZW50KHRvcCwgIzYyYzQ2MiwgIzU3YTk1Nyk7CisgIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFu
c2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyM2MmM0NjInLCBlbmRDb2xv
cnN0cj0nIzU3YTk1NycsIEdyYWRpZW50VHlwZT0wKTsKKyAgdGV4dC1zaGFkb3c6IDAgLTFweCAw
IHJnYmEoMCwgMCwgMCwgMC4yNSk7CisgIGJvcmRlci1jb2xvcjogIzU3YTk1NyAjNTdhOTU3ICMz
ZDc3M2Q7CisgIGJvcmRlci1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpIHJnYmEoMCwgMCwgMCwg
MC4xKSByZ2JhKDAsIDAsIDAsIDAuMjUpOworfQorLmJ0bi5pbmZvLCAuYWxlcnQtbWVzc2FnZS5p
bmZvIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogIzMzOWJiOTsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6
IHJlcGVhdC14OworICBiYWNrZ3JvdW5kLWltYWdlOiAta2h0bWwtZ3JhZGllbnQobGluZWFyLCBs
ZWZ0IHRvcCwgbGVmdCBib3R0b20sIGZyb20oIzViYzBkZSksIHRvKCMzMzliYjkpKTsKKyAgYmFj
a2dyb3VuZC1pbWFnZTogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAjNWJjMGRlLCAjMzM5YmI5
KTsKKyAgYmFja2dyb3VuZC1pbWFnZTogLW1zLWxpbmVhci1ncmFkaWVudCh0b3AsICM1YmMwZGUs
ICMzMzliYjkpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwg
bGVmdCB0b3AsIGxlZnQgYm90dG9tLCBjb2xvci1zdG9wKDAlLCAjNWJjMGRlKSwgY29sb3Itc3Rv
cCgxMDAlLCAjMzM5YmI5KSk7CisgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdy
YWRpZW50KHRvcCwgIzViYzBkZSwgIzMzOWJiOSk7CisgIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxp
bmVhci1ncmFkaWVudCh0b3AsICM1YmMwZGUsICMzMzliYjkpOworICBiYWNrZ3JvdW5kLWltYWdl
OiBsaW5lYXItZ3JhZGllbnQodG9wLCAjNWJjMGRlLCAjMzM5YmI5KTsKKyAgZmlsdGVyOiBwcm9n
aWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nIzVi
YzBkZScsIGVuZENvbG9yc3RyPScjMzM5YmI5JywgR3JhZGllbnRUeXBlPTApOworICB0ZXh0LXNo
YWRvdzogMCAtMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjI1KTsKKyAgYm9yZGVyLWNvbG9yOiAjMzM5
YmI5ICMzMzliYjkgIzIyNjk3ZDsKKyAgYm9yZGVyLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSkg
cmdiYSgwLCAwLCAwLCAwLjEpIHJnYmEoMCwgMCwgMCwgMC4yNSk7Cit9CisuYnRuIHsKKyAgY3Vy
c29yOiBwb2ludGVyOworICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgIGJhY2tncm91bmQtY29s
b3I6ICNlNmU2ZTY7CisgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CisgIGJhY2tncm91
bmQtaW1hZ2U6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCAwIDAsIDAgMTAwJSwgZnJvbSgjZmZm
ZmZmKSwgY29sb3Itc3RvcCgyNSUsICNmZmZmZmYpLCB0bygjZTZlNmU2KSk7CisgIGJhY2tncm91
bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KCNmZmZmZmYsICNmZmZmZmYgMjUlLCAj
ZTZlNmU2KTsKKyAgYmFja2dyb3VuZC1pbWFnZTogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAj
ZmZmZmZmLCAjZmZmZmZmIDI1JSwgI2U2ZTZlNik7CisgIGJhY2tncm91bmQtaW1hZ2U6IC1tcy1s
aW5lYXItZ3JhZGllbnQoI2ZmZmZmZiwgI2ZmZmZmZiAyNSUsICNlNmU2ZTYpOworICBiYWNrZ3Jv
dW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQoI2ZmZmZmZiwgI2ZmZmZmZiAyNSUsICNlNmU2
ZTYpOworICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoI2ZmZmZmZiwgI2ZmZmZm
ZiAyNSUsICNlNmU2ZTYpOworICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jv
c29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZmZmZmJywgZW5kQ29sb3JzdHI9JyNlNmU2
ZTYnLCBHcmFkaWVudFR5cGU9MCk7CisgIHBhZGRpbmc6IDVweCAxNHB4IDZweDsKKyAgdGV4dC1z
aGFkb3c6IDAgMXB4IDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzUpOworICBjb2xvcjogIzMz
MzsKKyAgZm9udC1zaXplOiAxM3B4OworICBsaW5lLWhlaWdodDogbm9ybWFsOworICBib3JkZXI6
IDFweCBzb2xpZCAjY2NjOworICBib3JkZXItYm90dG9tLWNvbG9yOiAjYmJiOworICAtd2Via2l0
LWJvcmRlci1yYWRpdXM6IDRweDsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiA0cHg7CisgIGJvcmRl
ci1yYWRpdXM6IDRweDsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEo
MjU1LCAyNTUsIDI1NSwgMC4yKSwgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7CisgIC1t
b3otYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMiksIDAg
MXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDUpOworICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAw
IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSwgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7
CisgIC13ZWJraXQtdHJhbnNpdGlvbjogMC4xcyBsaW5lYXIgYWxsOworICAtbW96LXRyYW5zaXRp
b246IDAuMXMgbGluZWFyIGFsbDsKKyAgLW1zLXRyYW5zaXRpb246IDAuMXMgbGluZWFyIGFsbDsK
KyAgLW8tdHJhbnNpdGlvbjogMC4xcyBsaW5lYXIgYWxsOworICB0cmFuc2l0aW9uOiAwLjFzIGxp
bmVhciBhbGw7Cit9CisuYnRuOmhvdmVyIHsKKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTVw
eDsKKyAgY29sb3I6ICMzMzM7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKK30KKy5idG46Zm9j
dXMgeworICBvdXRsaW5lOiAxcHggZG90dGVkICM2NjY7Cit9CisuYnRuLnByaW1hcnkgeworICBj
b2xvcjogI2ZmZmZmZjsKKyAgYmFja2dyb3VuZC1jb2xvcjogIzAwNjRjZDsKKyAgYmFja2dyb3Vu
ZC1yZXBlYXQ6IHJlcGVhdC14OworICBiYWNrZ3JvdW5kLWltYWdlOiAta2h0bWwtZ3JhZGllbnQo
bGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGZyb20oIzA0OWNkYiksIHRvKCMwMDY0Y2Qp
KTsKKyAgYmFja2dyb3VuZC1pbWFnZTogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAjMDQ5Y2Ri
LCAjMDA2NGNkKTsKKyAgYmFja2dyb3VuZC1pbWFnZTogLW1zLWxpbmVhci1ncmFkaWVudCh0b3As
ICMwNDljZGIsICMwMDY0Y2QpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50
KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBjb2xvci1zdG9wKDAlLCAjMDQ5Y2RiKSwg
Y29sb3Itc3RvcCgxMDAlLCAjMDA2NGNkKSk7CisgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQt
bGluZWFyLWdyYWRpZW50KHRvcCwgIzA0OWNkYiwgIzAwNjRjZCk7CisgIGJhY2tncm91bmQtaW1h
Z2U6IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsICMwNDljZGIsICMwMDY0Y2QpOworICBiYWNrZ3Jv
dW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG9wLCAjMDQ5Y2RiLCAjMDA2NGNkKTsKKyAgZmls
dGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xv
cnN0cj0nIzA0OWNkYicsIGVuZENvbG9yc3RyPScjMDA2NGNkJywgR3JhZGllbnRUeXBlPTApOwor
ICB0ZXh0LXNoYWRvdzogMCAtMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjI1KTsKKyAgYm9yZGVyLWNv
bG9yOiAjMDA2NGNkICMwMDY0Y2QgIzAwM2Y4MTsKKyAgYm9yZGVyLWNvbG9yOiByZ2JhKDAsIDAs
IDAsIDAuMSkgcmdiYSgwLCAwLCAwLCAwLjEpIHJnYmEoMCwgMCwgMCwgMC4yNSk7Cit9CisuYnRu
LmFjdGl2ZSwgLmJ0bjphY3RpdmUgeworICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMnB4
IDRweCByZ2JhKDAsIDAsIDAsIDAuMjUpLCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjA1KTsK
KyAgLW1vei1ib3gtc2hhZG93OiBpbnNldCAwIDJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjI1KSwg
MCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7CisgIGJveC1zaGFkb3c6IGluc2V0IDAgMnB4
IDRweCByZ2JhKDAsIDAsIDAsIDAuMjUpLCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjA1KTsK
K30KKy5idG4uZGlzYWJsZWQgeworICBjdXJzb3I6IGRlZmF1bHQ7CisgIGJhY2tncm91bmQtaW1h
Z2U6IG5vbmU7CisgIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0Lmdy
YWRpZW50KGVuYWJsZWQgPSBmYWxzZSk7CisgIGZpbHRlcjogYWxwaGEob3BhY2l0eT02NSk7Cisg
IC1raHRtbC1vcGFjaXR5OiAwLjY1OworICAtbW96LW9wYWNpdHk6IDAuNjU7CisgIG9wYWNpdHk6
IDAuNjU7CisgIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTsKKyAgLW1vei1ib3gtc2hhZG93OiBu
b25lOworICBib3gtc2hhZG93OiBub25lOworfQorLmJ0bltkaXNhYmxlZF0geworICBjdXJzb3I6
IGRlZmF1bHQ7CisgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7CisgIGZpbHRlcjogcHJvZ2lkOkRY
SW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQgPSBmYWxzZSk7CisgIGZp
bHRlcjogYWxwaGEob3BhY2l0eT02NSk7CisgIC1raHRtbC1vcGFjaXR5OiAwLjY1OworICAtbW96
LW9wYWNpdHk6IDAuNjU7CisgIG9wYWNpdHk6IDAuNjU7CisgIC13ZWJraXQtYm94LXNoYWRvdzog
bm9uZTsKKyAgLW1vei1ib3gtc2hhZG93OiBub25lOworICBib3gtc2hhZG93OiBub25lOworfQor
LmJ0bi5sYXJnZSB7CisgIGZvbnQtc2l6ZTogMTVweDsKKyAgbGluZS1oZWlnaHQ6IG5vcm1hbDsK
KyAgcGFkZGluZzogOXB4IDE0cHggOXB4OworICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDZweDsK
KyAgLW1vei1ib3JkZXItcmFkaXVzOiA2cHg7CisgIGJvcmRlci1yYWRpdXM6IDZweDsKK30KKy5i
dG4uc21hbGwgeworICBwYWRkaW5nOiA3cHggOXB4IDdweDsKKyAgZm9udC1zaXplOiAxMXB4Owor
fQorOnJvb3QgLmFsZXJ0LW1lc3NhZ2UsIDpyb290IC5idG4geworICBib3JkZXItcmFkaXVzOiAw
IFwwOworfQorYnV0dG9uLmJ0bjo6LW1vei1mb2N1cy1pbm5lciwgaW5wdXRbdHlwZT1zdWJtaXRd
LmJ0bjo6LW1vei1mb2N1cy1pbm5lciB7CisgIHBhZGRpbmc6IDA7CisgIGJvcmRlcjogMDsKK30K
Ky5jbG9zZSB7CisgIGZsb2F0OiByaWdodDsKKyAgY29sb3I6ICMwMDAwMDA7CisgIGZvbnQtc2l6
ZTogMjBweDsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgIGxpbmUtaGVpZ2h0OiAxMy41cHg7Cisg
IHRleHQtc2hhZG93OiAwIDFweCAwICNmZmZmZmY7CisgIGZpbHRlcjogYWxwaGEob3BhY2l0eT0y
NSk7CisgIC1raHRtbC1vcGFjaXR5OiAwLjI1OworICAtbW96LW9wYWNpdHk6IDAuMjU7CisgIG9w
YWNpdHk6IDAuMjU7Cit9CisuY2xvc2U6aG92ZXIgeworICBjb2xvcjogIzAwMDAwMDsKKyAgdGV4
dC1kZWNvcmF0aW9uOiBub25lOworICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NDApOworICAta2h0
bWwtb3BhY2l0eTogMC40OworICAtbW96LW9wYWNpdHk6IDAuNDsKKyAgb3BhY2l0eTogMC40Owor
fQorLmFsZXJ0LW1lc3NhZ2UgeworICBwb3NpdGlvbjogcmVsYXRpdmU7CisgIHBhZGRpbmc6IDdw
eCAxNXB4OworICBtYXJnaW4tYm90dG9tOiAxOHB4OworICBjb2xvcjogIzQwNDA0MDsKKyAgYmFj
a2dyb3VuZC1jb2xvcjogI2VlZGM5NDsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14Owor
ICBiYWNrZ3JvdW5kLWltYWdlOiAta2h0bWwtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVm
dCBib3R0b20sIGZyb20oI2ZjZWVjMSksIHRvKCNlZWRjOTQpKTsKKyAgYmFja2dyb3VuZC1pbWFn
ZTogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAjZmNlZWMxLCAjZWVkYzk0KTsKKyAgYmFja2dy
b3VuZC1pbWFnZTogLW1zLWxpbmVhci1ncmFkaWVudCh0b3AsICNmY2VlYzEsICNlZWRjOTQpOwor
ICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxl
ZnQgYm90dG9tLCBjb2xvci1zdG9wKDAlLCAjZmNlZWMxKSwgY29sb3Itc3RvcCgxMDAlLCAjZWVk
Yzk0KSk7CisgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwg
I2ZjZWVjMSwgI2VlZGM5NCk7CisgIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVu
dCh0b3AsICNmY2VlYzEsICNlZWRjOTQpOworICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3Jh
ZGllbnQodG9wLCAjZmNlZWMxLCAjZWVkYzk0KTsKKyAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRy
YW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZjZWVjMScsIGVuZENv
bG9yc3RyPScjZWVkYzk0JywgR3JhZGllbnRUeXBlPTApOworICB0ZXh0LXNoYWRvdzogMCAtMXB4
IDAgcmdiYSgwLCAwLCAwLCAwLjI1KTsKKyAgYm9yZGVyLWNvbG9yOiAjZWVkYzk0ICNlZWRjOTQg
I2U0YzY1MjsKKyAgYm9yZGVyLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSkgcmdiYSgwLCAwLCAw
LCAwLjEpIHJnYmEoMCwgMCwgMCwgMC4yNSk7CisgIHRleHQtc2hhZG93OiAwIDFweCAwIHJnYmEo
MjU1LCAyNTUsIDI1NSwgMC41KTsKKyAgYm9yZGVyLXdpZHRoOiAxcHg7CisgIGJvcmRlci1zdHls
ZTogc29saWQ7CisgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNHB4OworICAtbW96LWJvcmRlci1y
YWRpdXM6IDRweDsKKyAgYm9yZGVyLXJhZGl1czogNHB4OworICAtd2Via2l0LWJveC1zaGFkb3c6
IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KTsKKyAgLW1vei1ib3gtc2hh
ZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSk7CisgIGJveC1zaGFk
b3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KTsKK30KKy5hbGVydC1t
ZXNzYWdlIC5jbG9zZSB7CisgIG1hcmdpbi10b3A6IDFweDsKKyAgKm1hcmdpbi10b3A6IDA7Cit9
CisuYWxlcnQtbWVzc2FnZSBhIHsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgIGNvbG9yOiAjNDA0
MDQwOworfQorLmFsZXJ0LW1lc3NhZ2UuZGFuZ2VyIHAgYSwKKy5hbGVydC1tZXNzYWdlLmVycm9y
IHAgYSwKKy5hbGVydC1tZXNzYWdlLnN1Y2Nlc3MgcCBhLAorLmFsZXJ0LW1lc3NhZ2UuaW5mbyBw
IGEgeworICBjb2xvcjogI2ZmZmZmZjsKK30KKy5hbGVydC1tZXNzYWdlIGg1IHsKKyAgbGluZS1o
ZWlnaHQ6IDE4cHg7Cit9CisuYWxlcnQtbWVzc2FnZSBwIHsKKyAgbWFyZ2luLWJvdHRvbTogMDsK
K30KKy5hbGVydC1tZXNzYWdlIGRpdiB7CisgIG1hcmdpbi10b3A6IDVweDsKKyAgbWFyZ2luLWJv
dHRvbTogMnB4OworICBsaW5lLWhlaWdodDogMjhweDsKK30KKy5hbGVydC1tZXNzYWdlIC5idG4g
eworICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1
KTsKKyAgLW1vei1ib3gtc2hhZG93OiAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSk7
CisgIGJveC1zaGFkb3c6IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KTsKK30KKy5h
bGVydC1tZXNzYWdlLmJsb2NrLW1lc3NhZ2UgeworICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOwor
ICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmRmNWQ5OworICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJh
bnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkID0gZmFsc2UpOworICBwYWRkaW5nOiAx
NHB4OworICBib3JkZXItY29sb3I6ICNmY2VlYzE7CisgIC13ZWJraXQtYm94LXNoYWRvdzogbm9u
ZTsKKyAgLW1vei1ib3gtc2hhZG93OiBub25lOworICBib3gtc2hhZG93OiBub25lOworfQorLmFs
ZXJ0LW1lc3NhZ2UuYmxvY2stbWVzc2FnZSB1bCwgLmFsZXJ0LW1lc3NhZ2UuYmxvY2stbWVzc2Fn
ZSBwIHsKKyAgbWFyZ2luLXJpZ2h0OiAzMHB4OworfQorLmFsZXJ0LW1lc3NhZ2UuYmxvY2stbWVz
c2FnZSB1bCB7CisgIG1hcmdpbi1ib3R0b206IDA7Cit9CisuYWxlcnQtbWVzc2FnZS5ibG9jay1t
ZXNzYWdlIGxpIHsKKyAgY29sb3I6ICM0MDQwNDA7Cit9CisuYWxlcnQtbWVzc2FnZS5ibG9jay1t
ZXNzYWdlIC5hbGVydC1hY3Rpb25zIHsKKyAgbWFyZ2luLXRvcDogNXB4OworfQorLmFsZXJ0LW1l
c3NhZ2UuYmxvY2stbWVzc2FnZS5lcnJvciwgLmFsZXJ0LW1lc3NhZ2UuYmxvY2stbWVzc2FnZS5z
dWNjZXNzLCAuYWxlcnQtbWVzc2FnZS5ibG9jay1tZXNzYWdlLmluZm8geworICBjb2xvcjogIzQw
NDA0MDsKKyAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOwor
fQorLmFsZXJ0LW1lc3NhZ2UuYmxvY2stbWVzc2FnZS5lcnJvciB7CisgIGJhY2tncm91bmQtY29s
b3I6ICNmZGRmZGU7CisgIGJvcmRlci1jb2xvcjogI2ZiYzdjNjsKK30KKy5hbGVydC1tZXNzYWdl
LmJsb2NrLW1lc3NhZ2Uuc3VjY2VzcyB7CisgIGJhY2tncm91bmQtY29sb3I6ICNkMWVlZDE7Cisg
IGJvcmRlci1jb2xvcjogI2JmZTdiZjsKK30KKy5hbGVydC1tZXNzYWdlLmJsb2NrLW1lc3NhZ2Uu
aW5mbyB7CisgIGJhY2tncm91bmQtY29sb3I6ICNkZGY0ZmI7CisgIGJvcmRlci1jb2xvcjogI2M2
ZWRmOTsKK30KKy5hbGVydC1tZXNzYWdlLmJsb2NrLW1lc3NhZ2UuZGFuZ2VyIHAgYSwKKy5hbGVy
dC1tZXNzYWdlLmJsb2NrLW1lc3NhZ2UuZXJyb3IgcCBhLAorLmFsZXJ0LW1lc3NhZ2UuYmxvY2st
bWVzc2FnZS5zdWNjZXNzIHAgYSwKKy5hbGVydC1tZXNzYWdlLmJsb2NrLW1lc3NhZ2UuaW5mbyBw
IGEgeworICBjb2xvcjogIzQwNDA0MDsKK30KKy5wYWdpbmF0aW9uIHsKKyAgaGVpZ2h0OiAzNnB4
OworICBtYXJnaW46IDE4cHggMDsKK30KKy5wYWdpbmF0aW9uIHVsIHsKKyAgZmxvYXQ6IGxlZnQ7
CisgIG1hcmdpbjogMDsKKyAgYm9yZGVyOiAxcHggc29saWQgI2RkZDsKKyAgYm9yZGVyOiAxcHgg
c29saWQgcmdiYSgwLCAwLCAwLCAwLjE1KTsKKyAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAzcHg7
CisgIC1tb3otYm9yZGVyLXJhZGl1czogM3B4OworICBib3JkZXItcmFkaXVzOiAzcHg7CisgIC13
ZWJraXQtYm94LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7CisgIC1tb3ot
Ym94LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7CisgIGJveC1zaGFkb3c6
IDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDUpOworfQorLnBhZ2luYXRpb24gbGkgeworICBk
aXNwbGF5OiBpbmxpbmU7Cit9CisucGFnaW5hdGlvbiBhIHsKKyAgZmxvYXQ6IGxlZnQ7CisgIHBh
ZGRpbmc6IDAgMTRweDsKKyAgbGluZS1oZWlnaHQ6IDM0cHg7CisgIGJvcmRlci1yaWdodDogMXB4
IHNvbGlkOworICBib3JkZXItcmlnaHQtY29sb3I6ICNkZGQ7CisgIGJvcmRlci1yaWdodC1jb2xv
cjogcmdiYSgwLCAwLCAwLCAwLjE1KTsKKyAgKmJvcmRlci1yaWdodC1jb2xvcjogI2RkZDsKKyAg
LyogSUU2LTcgKi8KKworICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cit9CisucGFnaW5hdGlvbiBh
OmhvdmVyLCAucGFnaW5hdGlvbiAuYWN0aXZlIGEgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzdl
ZWZlOworfQorLnBhZ2luYXRpb24gLmRpc2FibGVkIGEsIC5wYWdpbmF0aW9uIC5kaXNhYmxlZCBh
OmhvdmVyIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGNvbG9yOiAjYmZi
ZmJmOworfQorLnBhZ2luYXRpb24gLm5leHQgYSB7CisgIGJvcmRlcjogMDsKK30KKy53ZWxsIHsK
KyAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTsKKyAgbWFyZ2luLWJvdHRvbTogMjBweDsKKyAg
cGFkZGluZzogMTlweDsKKyAgbWluLWhlaWdodDogMjBweDsKKyAgYm9yZGVyOiAxcHggc29saWQg
I2VlZTsKKyAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjA1KTsKKyAgLXdlYmtp
dC1ib3JkZXItcmFkaXVzOiA0cHg7CisgIC1tb3otYm9yZGVyLXJhZGl1czogNHB4OworICBib3Jk
ZXItcmFkaXVzOiA0cHg7CisgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJn
YmEoMCwgMCwgMCwgMC4wNSk7CisgIC1tb3otYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJn
YmEoMCwgMCwgMCwgMC4wNSk7CisgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAs
IDAsIDAsIDAuMDUpOworfQorLndlbGwgYmxvY2txdW90ZSB7CisgIGJvcmRlci1jb2xvcjogI2Rk
ZDsKKyAgYm9yZGVyLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMTUpOworfQorLm1vZGFsLWJhY2tk
cm9wIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDsKKyAgcG9zaXRpb246IGZpeGVkOwor
ICB0b3A6IDA7CisgIGxlZnQ6IDA7CisgIHJpZ2h0OiAwOworICBib3R0b206IDA7CisgIHotaW5k
ZXg6IDEwMDAwOworfQorLm1vZGFsLWJhY2tkcm9wLmZhZGUgeworICBvcGFjaXR5OiAwOworfQor
Lm1vZGFsLWJhY2tkcm9wLCAubW9kYWwtYmFja2Ryb3AuZmFkZS5pbiB7CisgIGZpbHRlcjogYWxw
aGEob3BhY2l0eT04MCk7CisgIC1raHRtbC1vcGFjaXR5OiAwLjg7CisgIC1tb3otb3BhY2l0eTog
MC44OworICBvcGFjaXR5OiAwLjg7Cit9CisubW9kYWwgeworICBwb3NpdGlvbjogZml4ZWQ7Cisg
IHRvcDogNTAlOworICBsZWZ0OiA1MCU7CisgIHotaW5kZXg6IDExMDAwOworICBtYXgtaGVpZ2h0
OiA1MDBweDsKKyAgb3ZlcmZsb3c6IGF1dG87CisgIHdpZHRoOiA1NjBweDsKKyAgbWFyZ2luOiAt
MjUwcHggMCAwIC0yODBweDsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsKKyAgYm9yZGVy
OiAxcHggc29saWQgIzk5OTsKKyAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjMp
OworICAqYm9yZGVyOiAxcHggc29saWQgIzk5OTsKKyAgLyogSUU2LTcgKi8KKworICAtd2Via2l0
LWJvcmRlci1yYWRpdXM6IDZweDsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiA2cHg7CisgIGJvcmRl
ci1yYWRpdXM6IDZweDsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDNweCA3cHggcmdiYSgwLCAw
LCAwLCAwLjMpOworICAtbW96LWJveC1zaGFkb3c6IDAgM3B4IDdweCByZ2JhKDAsIDAsIDAsIDAu
Myk7CisgIGJveC1zaGFkb3c6IDAgM3B4IDdweCByZ2JhKDAsIDAsIDAsIDAuMyk7CisgIC13ZWJr
aXQtYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsKKyAgLW1vei1iYWNrZ3JvdW5kLWNsaXA6
IHBhZGRpbmctYm94OworICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94OworfQorLm1vZGFs
IC5jbG9zZSB7CisgIG1hcmdpbi10b3A6IDdweDsKK30KKy5tb2RhbC5mYWRlIHsKKyAgLXdlYmtp
dC10cmFuc2l0aW9uOiBvcGFjaXR5IC4zcyBsaW5lYXIsIHRvcCAuM3MgZWFzZS1vdXQ7CisgIC1t
b3otdHJhbnNpdGlvbjogb3BhY2l0eSAuM3MgbGluZWFyLCB0b3AgLjNzIGVhc2Utb3V0OworICAt
bXMtdHJhbnNpdGlvbjogb3BhY2l0eSAuM3MgbGluZWFyLCB0b3AgLjNzIGVhc2Utb3V0OworICAt
by10cmFuc2l0aW9uOiBvcGFjaXR5IC4zcyBsaW5lYXIsIHRvcCAuM3MgZWFzZS1vdXQ7CisgIHRy
YW5zaXRpb246IG9wYWNpdHkgLjNzIGxpbmVhciwgdG9wIC4zcyBlYXNlLW91dDsKKyAgdG9wOiAt
MjUlOworfQorLm1vZGFsLmZhZGUuaW4geworICB0b3A6IDUwJTsKK30KKy5tb2RhbC1oZWFkZXIg
eworICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VlZTsKKyAgcGFkZGluZzogNXB4IDE1cHg7
Cit9CisubW9kYWwtYm9keSB7CisgIHBhZGRpbmc6IDE1cHg7Cit9CisubW9kYWwtYm9keSBmb3Jt
IHsKKyAgbWFyZ2luLWJvdHRvbTogMDsKK30KKy5tb2RhbC1mb290ZXIgeworICBiYWNrZ3JvdW5k
LWNvbG9yOiAjZjVmNWY1OworICBwYWRkaW5nOiAxNHB4IDE1cHggMTVweDsKKyAgYm9yZGVyLXRv
cDogMXB4IHNvbGlkICNkZGQ7CisgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMCAwIDZweCA2cHg7
CisgIC1tb3otYm9yZGVyLXJhZGl1czogMCAwIDZweCA2cHg7CisgIGJvcmRlci1yYWRpdXM6IDAg
MCA2cHggNnB4OworICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgI2ZmZmZmZjsK
KyAgLW1vei1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAwICNmZmZmZmY7CisgIGJveC1zaGFkb3c6
IGluc2V0IDAgMXB4IDAgI2ZmZmZmZjsKKyAgem9vbTogMTsKKyAgbWFyZ2luLWJvdHRvbTogMDsK
K30KKy5tb2RhbC1mb290ZXI6YmVmb3JlLCAubW9kYWwtZm9vdGVyOmFmdGVyIHsKKyAgZGlzcGxh
eTogdGFibGU7CisgIGNvbnRlbnQ6ICIiOworICB6b29tOiAxOworfQorLm1vZGFsLWZvb3Rlcjph
ZnRlciB7CisgIGNsZWFyOiBib3RoOworfQorLm1vZGFsLWZvb3RlciAuYnRuIHsKKyAgZmxvYXQ6
IHJpZ2h0OworICBtYXJnaW4tbGVmdDogNXB4OworfQorLm1vZGFsIC5wb3BvdmVyLCAubW9kYWwg
LnR3aXBzeSB7CisgIHotaW5kZXg6IDEyMDAwOworfQorLnR3aXBzeSB7CisgIGRpc3BsYXk6IGJs
b2NrOworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHZpc2liaWxpdHk6IHZpc2libGU7CisgIHBh
ZGRpbmc6IDVweDsKKyAgZm9udC1zaXplOiAxMXB4OworICB6LWluZGV4OiAxMDAwOworICBmaWx0
ZXI6IGFscGhhKG9wYWNpdHk9ODApOworICAta2h0bWwtb3BhY2l0eTogMC44OworICAtbW96LW9w
YWNpdHk6IDAuODsKKyAgb3BhY2l0eTogMC44OworfQorLnR3aXBzeS5mYWRlLmluIHsKKyAgZmls
dGVyOiBhbHBoYShvcGFjaXR5PTgwKTsKKyAgLWtodG1sLW9wYWNpdHk6IDAuODsKKyAgLW1vei1v
cGFjaXR5OiAwLjg7CisgIG9wYWNpdHk6IDAuODsKK30KKy50d2lwc3kuYWJvdmUgLnR3aXBzeS1h
cnJvdyB7CisgIGJvdHRvbTogMDsKKyAgbGVmdDogNTAlOworICBtYXJnaW4tbGVmdDogLTVweDsK
KyAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCB0cmFuc3BhcmVudDsKKyAgYm9yZGVyLXJpZ2h0OiA1
cHggc29saWQgdHJhbnNwYXJlbnQ7CisgIGJvcmRlci10b3A6IDVweCBzb2xpZCAjMDAwMDAwOwor
fQorLnR3aXBzeS5sZWZ0IC50d2lwc3ktYXJyb3cgeworICB0b3A6IDUwJTsKKyAgcmlnaHQ6IDA7
CisgIG1hcmdpbi10b3A6IC01cHg7CisgIGJvcmRlci10b3A6IDVweCBzb2xpZCB0cmFuc3BhcmVu
dDsKKyAgYm9yZGVyLWJvdHRvbTogNXB4IHNvbGlkIHRyYW5zcGFyZW50OworICBib3JkZXItbGVm
dDogNXB4IHNvbGlkICMwMDAwMDA7Cit9CisudHdpcHN5LmJlbG93IC50d2lwc3ktYXJyb3cgewor
ICB0b3A6IDA7CisgIGxlZnQ6IDUwJTsKKyAgbWFyZ2luLWxlZnQ6IC01cHg7CisgIGJvcmRlci1s
ZWZ0OiA1cHggc29saWQgdHJhbnNwYXJlbnQ7CisgIGJvcmRlci1yaWdodDogNXB4IHNvbGlkIHRy
YW5zcGFyZW50OworICBib3JkZXItYm90dG9tOiA1cHggc29saWQgIzAwMDAwMDsKK30KKy50d2lw
c3kucmlnaHQgLnR3aXBzeS1hcnJvdyB7CisgIHRvcDogNTAlOworICBsZWZ0OiAwOworICBtYXJn
aW4tdG9wOiAtNXB4OworICBib3JkZXItdG9wOiA1cHggc29saWQgdHJhbnNwYXJlbnQ7CisgIGJv
cmRlci1ib3R0b206IDVweCBzb2xpZCB0cmFuc3BhcmVudDsKKyAgYm9yZGVyLXJpZ2h0OiA1cHgg
c29saWQgIzAwMDAwMDsKK30KKy50d2lwc3ktaW5uZXIgeworICBwYWRkaW5nOiAzcHggOHB4Owor
ICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwOworICBjb2xvcjogd2hpdGU7CisgIHRleHQtYWxp
Z246IGNlbnRlcjsKKyAgbWF4LXdpZHRoOiAyMDBweDsKKyAgdGV4dC1kZWNvcmF0aW9uOiBub25l
OworICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDRweDsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiA0
cHg7CisgIGJvcmRlci1yYWRpdXM6IDRweDsKK30KKy50d2lwc3ktYXJyb3cgeworICBwb3NpdGlv
bjogYWJzb2x1dGU7CisgIHdpZHRoOiAwOworICBoZWlnaHQ6IDA7Cit9CisucG9wb3ZlciB7Cisg
IHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgdG9wOiAwOworICBsZWZ0OiAwOworICB6LWluZGV4OiAx
MDAwOworICBwYWRkaW5nOiA1cHg7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisucG9wb3Zlci5hYm92
ZSAuYXJyb3cgeworICBib3R0b206IDA7CisgIGxlZnQ6IDUwJTsKKyAgbWFyZ2luLWxlZnQ6IC01
cHg7CisgIGJvcmRlci1sZWZ0OiA1cHggc29saWQgdHJhbnNwYXJlbnQ7CisgIGJvcmRlci1yaWdo
dDogNXB4IHNvbGlkIHRyYW5zcGFyZW50OworICBib3JkZXItdG9wOiA1cHggc29saWQgIzAwMDAw
MDsKK30KKy5wb3BvdmVyLnJpZ2h0IC5hcnJvdyB7CisgIHRvcDogNTAlOworICBsZWZ0OiAwOwor
ICBtYXJnaW4tdG9wOiAtNXB4OworICBib3JkZXItdG9wOiA1cHggc29saWQgdHJhbnNwYXJlbnQ7
CisgIGJvcmRlci1ib3R0b206IDVweCBzb2xpZCB0cmFuc3BhcmVudDsKKyAgYm9yZGVyLXJpZ2h0
OiA1cHggc29saWQgIzAwMDAwMDsKK30KKy5wb3BvdmVyLmJlbG93IC5hcnJvdyB7CisgIHRvcDog
MDsKKyAgbGVmdDogNTAlOworICBtYXJnaW4tbGVmdDogLTVweDsKKyAgYm9yZGVyLWxlZnQ6IDVw
eCBzb2xpZCB0cmFuc3BhcmVudDsKKyAgYm9yZGVyLXJpZ2h0OiA1cHggc29saWQgdHJhbnNwYXJl
bnQ7CisgIGJvcmRlci1ib3R0b206IDVweCBzb2xpZCAjMDAwMDAwOworfQorLnBvcG92ZXIubGVm
dCAuYXJyb3cgeworICB0b3A6IDUwJTsKKyAgcmlnaHQ6IDA7CisgIG1hcmdpbi10b3A6IC01cHg7
CisgIGJvcmRlci10b3A6IDVweCBzb2xpZCB0cmFuc3BhcmVudDsKKyAgYm9yZGVyLWJvdHRvbTog
NXB4IHNvbGlkIHRyYW5zcGFyZW50OworICBib3JkZXItbGVmdDogNXB4IHNvbGlkICMwMDAwMDA7
Cit9CisucG9wb3ZlciAuYXJyb3cgeworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHdpZHRoOiAw
OworICBoZWlnaHQ6IDA7Cit9CisucG9wb3ZlciAuaW5uZXIgeworICBiYWNrZ3JvdW5kOiAjMDAw
MDAwOworICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuOCk7CisgIHBhZGRpbmc6IDNweDsK
KyAgb3ZlcmZsb3c6IGhpZGRlbjsKKyAgd2lkdGg6IDI4MHB4OworICAtd2Via2l0LWJvcmRlci1y
YWRpdXM6IDZweDsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiA2cHg7CisgIGJvcmRlci1yYWRpdXM6
IDZweDsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDNweCA3cHggcmdiYSgwLCAwLCAwLCAwLjMp
OworICAtbW96LWJveC1zaGFkb3c6IDAgM3B4IDdweCByZ2JhKDAsIDAsIDAsIDAuMyk7CisgIGJv
eC1zaGFkb3c6IDAgM3B4IDdweCByZ2JhKDAsIDAsIDAsIDAuMyk7Cit9CisucG9wb3ZlciAudGl0
bGUgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1OworICBwYWRkaW5nOiA5cHggMTVweDsK
KyAgbGluZS1oZWlnaHQ6IDE7CisgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogM3B4IDNweCAwIDA7
CisgIC1tb3otYm9yZGVyLXJhZGl1czogM3B4IDNweCAwIDA7CisgIGJvcmRlci1yYWRpdXM6IDNw
eCAzcHggMCAwOworICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VlZTsKK30KKy5wb3BvdmVy
IC5jb250ZW50IHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsKKyAgcGFkZGluZzogMTRw
eDsKKyAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwIDAgM3B4IDNweDsKKyAgLW1vei1ib3JkZXIt
cmFkaXVzOiAwIDAgM3B4IDNweDsKKyAgYm9yZGVyLXJhZGl1czogMCAwIDNweCAzcHg7CisgIC13
ZWJraXQtYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsKKyAgLW1vei1iYWNrZ3JvdW5kLWNs
aXA6IHBhZGRpbmctYm94OworICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94OworfQorLnBv
cG92ZXIgLmNvbnRlbnQgcCwgLnBvcG92ZXIgLmNvbnRlbnQgdWwsIC5wb3BvdmVyIC5jb250ZW50
IG9sIHsKKyAgbWFyZ2luLWJvdHRvbTogMDsKK30KKy5mYWRlIHsKKyAgLXdlYmtpdC10cmFuc2l0
aW9uOiBvcGFjaXR5IDAuMTVzIGxpbmVhcjsKKyAgLW1vei10cmFuc2l0aW9uOiBvcGFjaXR5IDAu
MTVzIGxpbmVhcjsKKyAgLW1zLXRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMgbGluZWFyOworICAt
by10cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzIGxpbmVhcjsKKyAgdHJhbnNpdGlvbjogb3BhY2l0
eSAwLjE1cyBsaW5lYXI7CisgIG9wYWNpdHk6IDA7Cit9CisuZmFkZS5pbiB7CisgIG9wYWNpdHk6
IDE7Cit9CisubGFiZWwgeworICBwYWRkaW5nOiAxcHggM3B4IDJweDsKKyAgZm9udC1zaXplOiA5
Ljc1cHg7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworICBjb2xvcjogI2ZmZmZmZjsKKyAgdGV4dC10
cmFuc2Zvcm06IHVwcGVyY2FzZTsKKyAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKKyAgYmFja2dyb3Vu
ZC1jb2xvcjogI2JmYmZiZjsKKyAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAzcHg7CisgIC1tb3ot
Ym9yZGVyLXJhZGl1czogM3B4OworICBib3JkZXItcmFkaXVzOiAzcHg7CisgIHRleHQtc2hhZG93
OiBub25lOworfQorLmxhYmVsLmltcG9ydGFudCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNjNDNj
MzU7Cit9CisubGFiZWwud2FybmluZyB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmODk0MDY7Cit9
CisubGFiZWwuc3VjY2VzcyB7CisgIGJhY2tncm91bmQtY29sb3I6ICM0NmE1NDY7Cit9CisubGFi
ZWwubm90aWNlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogIzYyY2ZmYzsKK30KKy5tZWRpYS1ncmlk
IHsKKyAgbWFyZ2luLWxlZnQ6IC0yMHB4OworICBtYXJnaW4tYm90dG9tOiAwOworICB6b29tOiAx
OworfQorLm1lZGlhLWdyaWQ6YmVmb3JlLCAubWVkaWEtZ3JpZDphZnRlciB7CisgIGRpc3BsYXk6
IHRhYmxlOworICBjb250ZW50OiAiIjsKKyAgem9vbTogMTsKK30KKy5tZWRpYS1ncmlkOmFmdGVy
IHsKKyAgY2xlYXI6IGJvdGg7Cit9CisubWVkaWEtZ3JpZCBsaSB7CisgIGRpc3BsYXk6IGlubGlu
ZTsKK30KKy5tZWRpYS1ncmlkIGEgeworICBmbG9hdDogbGVmdDsKKyAgcGFkZGluZzogNHB4Owor
ICBtYXJnaW46IDAgMCAxOHB4IDIwcHg7CisgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7CisgIC13
ZWJraXQtYm9yZGVyLXJhZGl1czogNHB4OworICAtbW96LWJvcmRlci1yYWRpdXM6IDRweDsKKyAg
Ym9yZGVyLXJhZGl1czogNHB4OworICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2Jh
KDAsIDAsIDAsIDAuMDc1KTsKKyAgLW1vei1ib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgwLCAw
LCAwLCAwLjA3NSk7CisgIGJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1
KTsKK30KKy5tZWRpYS1ncmlkIGEgaW1nIHsKKyAgZGlzcGxheTogYmxvY2s7Cit9CisubWVkaWEt
Z3JpZCBhOmhvdmVyIHsKKyAgYm9yZGVyLWNvbG9yOiAjMDA2OWQ2OworICAtd2Via2l0LWJveC1z
aGFkb3c6IDAgMXB4IDRweCByZ2JhKDAsIDEwNSwgMjE0LCAwLjI1KTsKKyAgLW1vei1ib3gtc2hh
ZG93OiAwIDFweCA0cHggcmdiYSgwLCAxMDUsIDIxNCwgMC4yNSk7CisgIGJveC1zaGFkb3c6IDAg
MXB4IDRweCByZ2JhKDAsIDEwNSwgMjE0LCAwLjI1KTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBmaWxlCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVy
Mi4xL3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2Jvb3RzdHJhcC9j
c3MvYm9vdHN0cmFwLm1pbi5jc3MgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21l
dGVyMi4xL3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2Jvb3RzdHJh
cC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTQwZjczMWRmYTgwMWU5ZjI0NWVl
ZGFiYzU4NDFkZjYyNzMyZTk0ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJi
ZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2Nv
bXBvbmVudHMvYm9vdHN0cmFwL2Nzcy9ib290c3RyYXAubWluLmNzcwpAQCAtMCwwICsxLDkgQEAK
Ky8qIQorICogQm9vdHN0cmFwIHYyLjIuMgorICoKKyAqIENvcHlyaWdodCAyMDEyIFR3aXR0ZXIs
IEluYworICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIHYyLjAKKyAqIGh0dHA6
Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIERlc2lnbmVkIGFu
ZCBidWlsdCB3aXRoIGFsbCB0aGUgbG92ZSBpbiB0aGUgd29ybGQgQHR3aXR0ZXIgYnkgQG1kbyBh
bmQgQGZhdC4KKyAqL2FydGljbGUsYXNpZGUsZGV0YWlscyxmaWdjYXB0aW9uLGZpZ3VyZSxmb290
ZXIsaGVhZGVyLGhncm91cCxuYXYsc2VjdGlvbntkaXNwbGF5OmJsb2NrfWF1ZGlvLGNhbnZhcyx2
aWRlb3tkaXNwbGF5OmlubGluZS1ibG9jazsqZGlzcGxheTppbmxpbmU7Knpvb206MX1hdWRpbzpu
b3QoW2NvbnRyb2xzXSl7ZGlzcGxheTpub25lfWh0bWx7Zm9udC1zaXplOjEwMCU7LXdlYmtpdC10
ZXh0LXNpemUtYWRqdXN0OjEwMCU7LW1zLXRleHQtc2l6ZS1hZGp1c3Q6MTAwJX1hOmZvY3Vze291
dGxpbmU6dGhpbiBkb3R0ZWQgIzMzMztvdXRsaW5lOjVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmlu
Zy1jb2xvcjtvdXRsaW5lLW9mZnNldDotMnB4fWE6aG92ZXIsYTphY3RpdmV7b3V0bGluZTowfXN1
YixzdXB7cG9zaXRpb246cmVsYXRpdmU7Zm9udC1zaXplOjc1JTtsaW5lLWhlaWdodDowO3ZlcnRp
Y2FsLWFsaWduOmJhc2VsaW5lfXN1cHt0b3A6LTAuNWVtfXN1Yntib3R0b206LTAuMjVlbX1pbWd7
d2lkdGg6YXV0b1w5O2hlaWdodDphdXRvO21heC13aWR0aDoxMDAlO3ZlcnRpY2FsLWFsaWduOm1p
ZGRsZTtib3JkZXI6MDstbXMtaW50ZXJwb2xhdGlvbi1tb2RlOmJpY3ViaWN9I21hcF9jYW52YXMg
aW1nLC5nb29nbGUtbWFwcyBpbWd7bWF4LXdpZHRoOm5vbmV9YnV0dG9uLGlucHV0LHNlbGVjdCx0
ZXh0YXJlYXttYXJnaW46MDtmb250LXNpemU6MTAwJTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9YnV0
dG9uLGlucHV0eypvdmVyZmxvdzp2aXNpYmxlO2xpbmUtaGVpZ2h0Om5vcm1hbH1idXR0b246Oi1t
b3otZm9jdXMtaW5uZXIsaW5wdXQ6Oi1tb3otZm9jdXMtaW5uZXJ7cGFkZGluZzowO2JvcmRlcjow
fWJ1dHRvbixodG1sIGlucHV0W3R5cGU9ImJ1dHRvbiJdLGlucHV0W3R5cGU9InJlc2V0Il0saW5w
dXRbdHlwZT0ic3VibWl0Il17Y3Vyc29yOnBvaW50ZXI7LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRv
bn1sYWJlbCxzZWxlY3QsYnV0dG9uLGlucHV0W3R5cGU9ImJ1dHRvbiJdLGlucHV0W3R5cGU9InJl
c2V0Il0saW5wdXRbdHlwZT0ic3VibWl0Il0saW5wdXRbdHlwZT0icmFkaW8iXSxpbnB1dFt0eXBl
PSJjaGVja2JveCJde2N1cnNvcjpwb2ludGVyfWlucHV0W3R5cGU9InNlYXJjaCJdey13ZWJraXQt
Ym94LXNpemluZzpjb250ZW50LWJveDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7Ym94LXNp
emluZzpjb250ZW50LWJveDstd2Via2l0LWFwcGVhcmFuY2U6dGV4dGZpZWxkfWlucHV0W3R5cGU9
InNlYXJjaCJdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uLGlucHV0W3R5cGU9InNlYXJjaCJd
Ojotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfXRl
eHRhcmVhe292ZXJmbG93OmF1dG87dmVydGljYWwtYWxpZ246dG9wfUBtZWRpYSBwcmludHsqe2Nv
bG9yOiMwMDAhaW1wb3J0YW50O3RleHQtc2hhZG93Om5vbmUhaW1wb3J0YW50O2JhY2tncm91bmQ6
dHJhbnNwYXJlbnQhaW1wb3J0YW50O2JveC1zaGFkb3c6bm9uZSFpbXBvcnRhbnR9YSxhOnZpc2l0
ZWR7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX1hW2hyZWZdOmFmdGVye2NvbnRlbnQ6IiAoIiBh
dHRyKGhyZWYpICIpIn1hYmJyW3RpdGxlXTphZnRlcntjb250ZW50OiIgKCIgYXR0cih0aXRsZSkg
IikifS5pciBhOmFmdGVyLGFbaHJlZl49ImphdmFzY3JpcHQ6Il06YWZ0ZXIsYVtocmVmXj0iIyJd
OmFmdGVye2NvbnRlbnQ6IiJ9cHJlLGJsb2NrcXVvdGV7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O3Bh
Z2UtYnJlYWstaW5zaWRlOmF2b2lkfXRoZWFke2Rpc3BsYXk6dGFibGUtaGVhZGVyLWdyb3VwfXRy
LGltZ3twYWdlLWJyZWFrLWluc2lkZTphdm9pZH1pbWd7bWF4LXdpZHRoOjEwMCUhaW1wb3J0YW50
fUBwYWdle21hcmdpbjouNWNtfXAsaDIsaDN7b3JwaGFuczozO3dpZG93czozfWgyLGgze3BhZ2Ut
YnJlYWstYWZ0ZXI6YXZvaWR9fS5jbGVhcmZpeHsqem9vbToxfS5jbGVhcmZpeDpiZWZvcmUsLmNs
ZWFyZml4OmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5jbGVh
cmZpeDphZnRlcntjbGVhcjpib3RofS5oaWRlLXRleHR7Zm9udDowLzAgYTtjb2xvcjp0cmFuc3Bh
cmVudDt0ZXh0LXNoYWRvdzpub25lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVy
OjB9LmlucHV0LWJsb2NrLWxldmVse2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTttaW4taGVpZ2h0
OjMwcHg7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRl
ci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94fWJvZHl7bWFyZ2luOjA7Zm9udC1mYW1pbHk6Ikhl
bHZldGljYSBOZXVlIixIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDts
aW5lLWhlaWdodDoyMHB4O2NvbG9yOiMzMzM7YmFja2dyb3VuZC1jb2xvcjojZmZmfWF7Y29sb3I6
IzA4Yzt0ZXh0LWRlY29yYXRpb246bm9uZX1hOmhvdmVye2NvbG9yOiMwMDU1ODA7dGV4dC1kZWNv
cmF0aW9uOnVuZGVybGluZX0uaW1nLXJvdW5kZWR7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjZweDst
bW96LWJvcmRlci1yYWRpdXM6NnB4O2JvcmRlci1yYWRpdXM6NnB4fS5pbWctcG9sYXJvaWR7cGFk
ZGluZzo0cHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjYztib3Jk
ZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMC4yKTstd2Via2l0LWJveC1zaGFkb3c6MCAxcHggM3B4
IHJnYmEoMCwwLDAsMC4xKTstbW96LWJveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsMC4x
KTtib3gtc2hhZG93OjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuMSl9LmltZy1jaXJjbGV7LXdlYmtp
dC1ib3JkZXItcmFkaXVzOjUwMHB4Oy1tb3otYm9yZGVyLXJhZGl1czo1MDBweDtib3JkZXItcmFk
aXVzOjUwMHB4fS5yb3d7bWFyZ2luLWxlZnQ6LTIwcHg7Knpvb206MX0ucm93OmJlZm9yZSwucm93
OmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5yb3c6YWZ0ZXJ7
Y2xlYXI6Ym90aH1bY2xhc3MqPSJzcGFuIl17ZmxvYXQ6bGVmdDttaW4taGVpZ2h0OjFweDttYXJn
aW4tbGVmdDoyMHB4fS5jb250YWluZXIsLm5hdmJhci1zdGF0aWMtdG9wIC5jb250YWluZXIsLm5h
dmJhci1maXhlZC10b3AgLmNvbnRhaW5lciwubmF2YmFyLWZpeGVkLWJvdHRvbSAuY29udGFpbmVy
e3dpZHRoOjk0MHB4fS5zcGFuMTJ7d2lkdGg6OTQwcHh9LnNwYW4xMXt3aWR0aDo4NjBweH0uc3Bh
bjEwe3dpZHRoOjc4MHB4fS5zcGFuOXt3aWR0aDo3MDBweH0uc3Bhbjh7d2lkdGg6NjIwcHh9LnNw
YW43e3dpZHRoOjU0MHB4fS5zcGFuNnt3aWR0aDo0NjBweH0uc3BhbjV7d2lkdGg6MzgwcHh9LnNw
YW40e3dpZHRoOjMwMHB4fS5zcGFuM3t3aWR0aDoyMjBweH0uc3BhbjJ7d2lkdGg6MTQwcHh9LnNw
YW4xe3dpZHRoOjYwcHh9Lm9mZnNldDEye21hcmdpbi1sZWZ0Ojk4MHB4fS5vZmZzZXQxMXttYXJn
aW4tbGVmdDo5MDBweH0ub2Zmc2V0MTB7bWFyZ2luLWxlZnQ6ODIwcHh9Lm9mZnNldDl7bWFyZ2lu
LWxlZnQ6NzQwcHh9Lm9mZnNldDh7bWFyZ2luLWxlZnQ6NjYwcHh9Lm9mZnNldDd7bWFyZ2luLWxl
ZnQ6NTgwcHh9Lm9mZnNldDZ7bWFyZ2luLWxlZnQ6NTAwcHh9Lm9mZnNldDV7bWFyZ2luLWxlZnQ6
NDIwcHh9Lm9mZnNldDR7bWFyZ2luLWxlZnQ6MzQwcHh9Lm9mZnNldDN7bWFyZ2luLWxlZnQ6MjYw
cHh9Lm9mZnNldDJ7bWFyZ2luLWxlZnQ6MTgwcHh9Lm9mZnNldDF7bWFyZ2luLWxlZnQ6MTAwcHh9
LnJvdy1mbHVpZHt3aWR0aDoxMDAlOyp6b29tOjF9LnJvdy1mbHVpZDpiZWZvcmUsLnJvdy1mbHVp
ZDphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0ucm93LWZsdWlk
OmFmdGVye2NsZWFyOmJvdGh9LnJvdy1mbHVpZCBbY2xhc3MqPSJzcGFuIl17ZGlzcGxheTpibG9j
aztmbG9hdDpsZWZ0O3dpZHRoOjEwMCU7bWluLWhlaWdodDozMHB4O21hcmdpbi1sZWZ0OjIuMTI3
NjU5NTc0NDY4MDg1JTsqbWFyZ2luLWxlZnQ6Mi4wNzQ0NjgwODUxMDYzODMlOy13ZWJraXQtYm94
LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6
Ym9yZGVyLWJveH0ucm93LWZsdWlkIFtjbGFzcyo9InNwYW4iXTpmaXJzdC1jaGlsZHttYXJnaW4t
bGVmdDowfS5yb3ctZmx1aWQgLmNvbnRyb2xzLXJvdyBbY2xhc3MqPSJzcGFuIl0rW2NsYXNzKj0i
c3BhbiJde21hcmdpbi1sZWZ0OjIuMTI3NjU5NTc0NDY4MDg1JX0ucm93LWZsdWlkIC5zcGFuMTJ7
d2lkdGg6MTAwJTsqd2lkdGg6OTkuOTQ2ODA4NTEwNjM4MjklfS5yb3ctZmx1aWQgLnNwYW4xMXt3
aWR0aDo5MS40ODkzNjE3MDIxMjc2NSU7KndpZHRoOjkxLjQzNjE3MDIxMjc2NTk0JX0ucm93LWZs
dWlkIC5zcGFuMTB7d2lkdGg6ODIuOTc4NzIzNDA0MjU1MzIlOyp3aWR0aDo4Mi45MjU1MzE5MTQ4
OTM2MSV9LnJvdy1mbHVpZCAuc3Bhbjl7d2lkdGg6NzQuNDY4MDg1MTA2MzgyOTclOyp3aWR0aDo3
NC40MTQ4OTM2MTcwMjEyNiV9LnJvdy1mbHVpZCAuc3Bhbjh7d2lkdGg6NjUuOTU3NDQ2ODA4NTEw
NjQlOyp3aWR0aDo2NS45MDQyNTUzMTkxNDg5MyV9LnJvdy1mbHVpZCAuc3Bhbjd7d2lkdGg6NTcu
NDQ2ODA4NTEwNjM4MjklOyp3aWR0aDo1Ny4zOTM2MTcwMjEyNzY1OSV9LnJvdy1mbHVpZCAuc3Bh
bjZ7d2lkdGg6NDguOTM2MTcwMjEyNzY1OTUlOyp3aWR0aDo0OC44ODI5Nzg3MjM0MDQyNSV9LnJv
dy1mbHVpZCAuc3BhbjV7d2lkdGg6NDAuNDI1NTMxOTE0ODkzNjIlOyp3aWR0aDo0MC4zNzIzNDA0
MjU1MzE5MiV9LnJvdy1mbHVpZCAuc3BhbjR7d2lkdGg6MzEuOTE0ODkzNjE3MDIxMjc4JTsqd2lk
dGg6MzEuODYxNzAyMTI3NjU5NTc2JX0ucm93LWZsdWlkIC5zcGFuM3t3aWR0aDoyMy40MDQyNTUz
MTkxNDg5MzQlOyp3aWR0aDoyMy4zNTEwNjM4Mjk3ODcyMzMlfS5yb3ctZmx1aWQgLnNwYW4ye3dp
ZHRoOjE0Ljg5MzYxNzAyMTI3NjU5NSU7KndpZHRoOjE0Ljg0MDQyNTUzMTkxNDg5NCV9LnJvdy1m
bHVpZCAuc3BhbjF7d2lkdGg6Ni4zODI5Nzg3MjM0MDQyNTUlOyp3aWR0aDo2LjMyOTc4NzIzNDA0
MjU1MyV9LnJvdy1mbHVpZCAub2Zmc2V0MTJ7bWFyZ2luLWxlZnQ6MTA0LjI1NTMxOTE0ODkzNjE3
JTsqbWFyZ2luLWxlZnQ6MTA0LjE0ODkzNjE3MDIxMjc1JX0ucm93LWZsdWlkIC5vZmZzZXQxMjpm
aXJzdC1jaGlsZHttYXJnaW4tbGVmdDoxMDIuMTI3NjU5NTc0NDY4MDglOyptYXJnaW4tbGVmdDox
MDIuMDIxMjc2NTk1NzQ0NjclfS5yb3ctZmx1aWQgLm9mZnNldDExe21hcmdpbi1sZWZ0Ojk1Ljc0
NDY4MDg1MTA2MzgyJTsqbWFyZ2luLWxlZnQ6OTUuNjM4Mjk3ODcyMzQwNCV9LnJvdy1mbHVpZCAu
b2Zmc2V0MTE6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6OTMuNjE3MDIxMjc2NTk1NzQlOyptYXJn
aW4tbGVmdDo5My41MTA2MzgyOTc4NzIzMiV9LnJvdy1mbHVpZCAub2Zmc2V0MTB7bWFyZ2luLWxl
ZnQ6ODcuMjM0MDQyNTUzMTkxNDklOyptYXJnaW4tbGVmdDo4Ny4xMjc2NTk1NzQ0NjgwNyV9LnJv
dy1mbHVpZCAub2Zmc2V0MTA6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6ODUuMTA2MzgyOTc4NzIz
NCU7Km1hcmdpbi1sZWZ0Ojg0Ljk5OTk5OTk5OTk5OTk5JX0ucm93LWZsdWlkIC5vZmZzZXQ5e21h
cmdpbi1sZWZ0Ojc4LjcyMzQwNDI1NTMxOTE0JTsqbWFyZ2luLWxlZnQ6NzguNjE3MDIxMjc2NTk1
NzIlfS5yb3ctZmx1aWQgLm9mZnNldDk6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NzYuNTk1NzQ0
NjgwODUxMDYlOyptYXJnaW4tbGVmdDo3Ni40ODkzNjE3MDIxMjc2NCV9LnJvdy1mbHVpZCAub2Zm
c2V0OHttYXJnaW4tbGVmdDo3MC4yMTI3NjU5NTc0NDY4JTsqbWFyZ2luLWxlZnQ6NzAuMTA2Mzgy
OTc4NzIzMzklfS5yb3ctZmx1aWQgLm9mZnNldDg6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6Njgu
MDg1MTA2MzgyOTc4NzIlOyptYXJnaW4tbGVmdDo2Ny45Nzg3MjM0MDQyNTUzJX0ucm93LWZsdWlk
IC5vZmZzZXQ3e21hcmdpbi1sZWZ0OjYxLjcwMjEyNzY1OTU3NDQ2JTsqbWFyZ2luLWxlZnQ6NjEu
NTk1NzQ0NjgwODUxMDYlfS5yb3ctZmx1aWQgLm9mZnNldDc6Zmlyc3QtY2hpbGR7bWFyZ2luLWxl
ZnQ6NTkuNTc0NDY4MDg1MTA2Mzc1JTsqbWFyZ2luLWxlZnQ6NTkuNDY4MDg1MTA2MzgyOTclfS5y
b3ctZmx1aWQgLm9mZnNldDZ7bWFyZ2luLWxlZnQ6NTMuMTkxNDg5MzYxNzAyMTI1JTsqbWFyZ2lu
LWxlZnQ6NTMuMDg1MTA2MzgyOTc4NzE1JX0ucm93LWZsdWlkIC5vZmZzZXQ2OmZpcnN0LWNoaWxk
e21hcmdpbi1sZWZ0OjUxLjA2MzgyOTc4NzIzNDAzNSU7Km1hcmdpbi1sZWZ0OjUwLjk1NzQ0Njgw
ODUxMDYzJX0ucm93LWZsdWlkIC5vZmZzZXQ1e21hcmdpbi1sZWZ0OjQ0LjY4MDg1MTA2MzgyOTc5
JTsqbWFyZ2luLWxlZnQ6NDQuNTc0NDY4MDg1MTA2MzglfS5yb3ctZmx1aWQgLm9mZnNldDU6Zmly
c3QtY2hpbGR7bWFyZ2luLWxlZnQ6NDIuNTUzMTkxNDg5MzYxNyU7Km1hcmdpbi1sZWZ0OjQyLjQ0
NjgwODUxMDYzODMlfS5yb3ctZmx1aWQgLm9mZnNldDR7bWFyZ2luLWxlZnQ6MzYuMTcwMjEyNzY1
OTU3NDQ0JTsqbWFyZ2luLWxlZnQ6MzYuMDYzODI5Nzg3MjM0MDUlfS5yb3ctZmx1aWQgLm9mZnNl
dDQ6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MzQuMDQyNTUzMTkxNDg5MzYlOyptYXJnaW4tbGVm
dDozMy45MzYxNzAyMTI3NjU5NiV9LnJvdy1mbHVpZCAub2Zmc2V0M3ttYXJnaW4tbGVmdDoyNy42
NTk1NzQ0NjgwODUxMDQlOyptYXJnaW4tbGVmdDoyNy41NTMxOTE0ODkzNjE3JX0ucm93LWZsdWlk
IC5vZmZzZXQzOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjI1LjUzMTkxNDg5MzYxNzAyJTsqbWFy
Z2luLWxlZnQ6MjUuNDI1NTMxOTE0ODkzNjE4JX0ucm93LWZsdWlkIC5vZmZzZXQye21hcmdpbi1s
ZWZ0OjE5LjE0ODkzNjE3MDIxMjc2NCU7Km1hcmdpbi1sZWZ0OjE5LjA0MjU1MzE5MTQ4OTM2JX0u
cm93LWZsdWlkIC5vZmZzZXQyOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjE3LjAyMTI3NjU5NTc0
NDY4JTsqbWFyZ2luLWxlZnQ6MTYuOTE0ODkzNjE3MDIxMjc4JX0ucm93LWZsdWlkIC5vZmZzZXQx
e21hcmdpbi1sZWZ0OjEwLjYzODI5Nzg3MjM0MDQyNSU7Km1hcmdpbi1sZWZ0OjEwLjUzMTkxNDg5
MzYxNzAyJX0ucm93LWZsdWlkIC5vZmZzZXQxOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjguNTEw
NjM4Mjk3ODcyMzQlOyptYXJnaW4tbGVmdDo4LjQwNDI1NTMxOTE0ODkzOCV9W2NsYXNzKj0ic3Bh
biJdLmhpZGUsLnJvdy1mbHVpZCBbY2xhc3MqPSJzcGFuIl0uaGlkZXtkaXNwbGF5Om5vbmV9W2Ns
YXNzKj0ic3BhbiJdLnB1bGwtcmlnaHQsLnJvdy1mbHVpZCBbY2xhc3MqPSJzcGFuIl0ucHVsbC1y
aWdodHtmbG9hdDpyaWdodH0uY29udGFpbmVye21hcmdpbi1yaWdodDphdXRvO21hcmdpbi1sZWZ0
OmF1dG87Knpvb206MX0uY29udGFpbmVyOmJlZm9yZSwuY29udGFpbmVyOmFmdGVye2Rpc3BsYXk6
dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5jb250YWluZXI6YWZ0ZXJ7Y2xlYXI6Ym90
aH0uY29udGFpbmVyLWZsdWlke3BhZGRpbmctcmlnaHQ6MjBweDtwYWRkaW5nLWxlZnQ6MjBweDsq
em9vbToxfS5jb250YWluZXItZmx1aWQ6YmVmb3JlLC5jb250YWluZXItZmx1aWQ6YWZ0ZXJ7ZGlz
cGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9LmNvbnRhaW5lci1mbHVpZDphZnRl
cntjbGVhcjpib3RofXB7bWFyZ2luOjAgMCAxMHB4fS5sZWFke21hcmdpbi1ib3R0b206MjBweDtm
b250LXNpemU6MjFweDtmb250LXdlaWdodDoyMDA7bGluZS1oZWlnaHQ6MzBweH1zbWFsbHtmb250
LXNpemU6ODUlfXN0cm9uZ3tmb250LXdlaWdodDpib2xkfWVte2ZvbnQtc3R5bGU6aXRhbGljfWNp
dGV7Zm9udC1zdHlsZTpub3JtYWx9Lm11dGVke2NvbG9yOiM5OTl9YS5tdXRlZDpob3Zlcntjb2xv
cjojODA4MDgwfS50ZXh0LXdhcm5pbmd7Y29sb3I6I2MwOTg1M31hLnRleHQtd2FybmluZzpob3Zl
cntjb2xvcjojYTQ3ZTNjfS50ZXh0LWVycm9ye2NvbG9yOiNiOTRhNDh9YS50ZXh0LWVycm9yOmhv
dmVye2NvbG9yOiM5NTNiMzl9LnRleHQtaW5mb3tjb2xvcjojM2E4N2FkfWEudGV4dC1pbmZvOmhv
dmVye2NvbG9yOiMyZDY5ODd9LnRleHQtc3VjY2Vzc3tjb2xvcjojNDY4ODQ3fWEudGV4dC1zdWNj
ZXNzOmhvdmVye2NvbG9yOiMzNTY2MzV9aDEsaDIsaDMsaDQsaDUsaDZ7bWFyZ2luOjEwcHggMDtm
b250LWZhbWlseTppbmhlcml0O2ZvbnQtd2VpZ2h0OmJvbGQ7bGluZS1oZWlnaHQ6MjBweDtjb2xv
cjppbmhlcml0O3RleHQtcmVuZGVyaW5nOm9wdGltaXplbGVnaWJpbGl0eX1oMSBzbWFsbCxoMiBz
bWFsbCxoMyBzbWFsbCxoNCBzbWFsbCxoNSBzbWFsbCxoNiBzbWFsbHtmb250LXdlaWdodDpub3Jt
YWw7bGluZS1oZWlnaHQ6MTtjb2xvcjojOTk5fWgxLGgyLGgze2xpbmUtaGVpZ2h0OjQwcHh9aDF7
Zm9udC1zaXplOjM4LjVweH1oMntmb250LXNpemU6MzEuNXB4fWgze2ZvbnQtc2l6ZToyNC41cHh9
aDR7Zm9udC1zaXplOjE3LjVweH1oNXtmb250LXNpemU6MTRweH1oNntmb250LXNpemU6MTEuOXB4
fWgxIHNtYWxse2ZvbnQtc2l6ZToyNC41cHh9aDIgc21hbGx7Zm9udC1zaXplOjE3LjVweH1oMyBz
bWFsbHtmb250LXNpemU6MTRweH1oNCBzbWFsbHtmb250LXNpemU6MTRweH0ucGFnZS1oZWFkZXJ7
cGFkZGluZy1ib3R0b206OXB4O21hcmdpbjoyMHB4IDAgMzBweDtib3JkZXItYm90dG9tOjFweCBz
b2xpZCAjZWVlfXVsLG9se3BhZGRpbmc6MDttYXJnaW46MCAwIDEwcHggMjVweH11bCB1bCx1bCBv
bCxvbCBvbCxvbCB1bHttYXJnaW4tYm90dG9tOjB9bGl7bGluZS1oZWlnaHQ6MjBweH11bC51bnN0
eWxlZCxvbC51bnN0eWxlZHttYXJnaW4tbGVmdDowO2xpc3Qtc3R5bGU6bm9uZX11bC5pbmxpbmUs
b2wuaW5saW5le21hcmdpbi1sZWZ0OjA7bGlzdC1zdHlsZTpub25lfXVsLmlubGluZT5saSxvbC5p
bmxpbmU+bGl7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZy1yaWdodDo1cHg7cGFkZGluZy1s
ZWZ0OjVweH1kbHttYXJnaW4tYm90dG9tOjIwcHh9ZHQsZGR7bGluZS1oZWlnaHQ6MjBweH1kdHtm
b250LXdlaWdodDpib2xkfWRke21hcmdpbi1sZWZ0OjEwcHh9LmRsLWhvcml6b250YWx7Knpvb206
MX0uZGwtaG9yaXpvbnRhbDpiZWZvcmUsLmRsLWhvcml6b250YWw6YWZ0ZXJ7ZGlzcGxheTp0YWJs
ZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9LmRsLWhvcml6b250YWw6YWZ0ZXJ7Y2xlYXI6Ym90
aH0uZGwtaG9yaXpvbnRhbCBkdHtmbG9hdDpsZWZ0O3dpZHRoOjE2MHB4O292ZXJmbG93OmhpZGRl
bjtjbGVhcjpsZWZ0O3RleHQtYWxpZ246cmlnaHQ7dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0
ZS1zcGFjZTpub3dyYXB9LmRsLWhvcml6b250YWwgZGR7bWFyZ2luLWxlZnQ6MTgwcHh9aHJ7bWFy
Z2luOjIwcHggMDtib3JkZXI6MDtib3JkZXItdG9wOjFweCBzb2xpZCAjZWVlO2JvcmRlci1ib3R0
b206MXB4IHNvbGlkICNmZmZ9YWJiclt0aXRsZV0sYWJicltkYXRhLW9yaWdpbmFsLXRpdGxlXXtj
dXJzb3I6aGVscDtib3JkZXItYm90dG9tOjFweCBkb3R0ZWQgIzk5OX1hYmJyLmluaXRpYWxpc217
Zm9udC1zaXplOjkwJTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9YmxvY2txdW90ZXtwYWRkaW5n
OjAgMCAwIDE1cHg7bWFyZ2luOjAgMCAyMHB4O2JvcmRlci1sZWZ0OjVweCBzb2xpZCAjZWVlfWJs
b2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjA7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6MzAw
O2xpbmUtaGVpZ2h0OjI1cHh9YmxvY2txdW90ZSBzbWFsbHtkaXNwbGF5OmJsb2NrO2xpbmUtaGVp
Z2h0OjIwcHg7Y29sb3I6Izk5OX1ibG9ja3F1b3RlIHNtYWxsOmJlZm9yZXtjb250ZW50OidcMjAx
NCBcMDBBMCd9YmxvY2txdW90ZS5wdWxsLXJpZ2h0e2Zsb2F0OnJpZ2h0O3BhZGRpbmctcmlnaHQ6
MTVweDtwYWRkaW5nLWxlZnQ6MDtib3JkZXItcmlnaHQ6NXB4IHNvbGlkICNlZWU7Ym9yZGVyLWxl
ZnQ6MH1ibG9ja3F1b3RlLnB1bGwtcmlnaHQgcCxibG9ja3F1b3RlLnB1bGwtcmlnaHQgc21hbGx7
dGV4dC1hbGlnbjpyaWdodH1ibG9ja3F1b3RlLnB1bGwtcmlnaHQgc21hbGw6YmVmb3Jle2NvbnRl
bnQ6Jyd9YmxvY2txdW90ZS5wdWxsLXJpZ2h0IHNtYWxsOmFmdGVye2NvbnRlbnQ6J1wwMEEwIFwy
MDE0J31xOmJlZm9yZSxxOmFmdGVyLGJsb2NrcXVvdGU6YmVmb3JlLGJsb2NrcXVvdGU6YWZ0ZXJ7
Y29udGVudDoiIn1hZGRyZXNze2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbToyMHB4O2ZvbnQt
c3R5bGU6bm9ybWFsO2xpbmUtaGVpZ2h0OjIwcHh9Y29kZSxwcmV7cGFkZGluZzowIDNweCAycHg7
Zm9udC1mYW1pbHk6TW9uYWNvLE1lbmxvLENvbnNvbGFzLCJDb3VyaWVyIE5ldyIsbW9ub3NwYWNl
O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiMzMzM7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjNweDstbW96
LWJvcmRlci1yYWRpdXM6M3B4O2JvcmRlci1yYWRpdXM6M3B4fWNvZGV7cGFkZGluZzoycHggNHB4
O2NvbG9yOiNkMTQ7d2hpdGUtc3BhY2U6bm93cmFwO2JhY2tncm91bmQtY29sb3I6I2Y3ZjdmOTti
b3JkZXI6MXB4IHNvbGlkICNlMWUxZTh9cHJle2Rpc3BsYXk6YmxvY2s7cGFkZGluZzo5LjVweDtt
YXJnaW46MCAwIDEwcHg7Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6MjBweDt3b3JkLWJyZWFr
OmJyZWFrLWFsbDt3b3JkLXdyYXA6YnJlYWstd29yZDt3aGl0ZS1zcGFjZTpwcmU7d2hpdGUtc3Bh
Y2U6cHJlLXdyYXA7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1O2JvcmRlcjoxcHggc29saWQgI2Nj
Yztib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMC4xNSk7LXdlYmtpdC1ib3JkZXItcmFkaXVz
OjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4fXByZS5wcmV0dHlw
cmludHttYXJnaW4tYm90dG9tOjIwcHh9cHJlIGNvZGV7cGFkZGluZzowO2NvbG9yOmluaGVyaXQ7
d2hpdGUtc3BhY2U6cHJlO3doaXRlLXNwYWNlOnByZS13cmFwO2JhY2tncm91bmQtY29sb3I6dHJh
bnNwYXJlbnQ7Ym9yZGVyOjB9LnByZS1zY3JvbGxhYmxle21heC1oZWlnaHQ6MzQwcHg7b3ZlcmZs
b3cteTpzY3JvbGx9Zm9ybXttYXJnaW46MCAwIDIwcHh9ZmllbGRzZXR7cGFkZGluZzowO21hcmdp
bjowO2JvcmRlcjowfWxlZ2VuZHtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7cGFkZGluZzowO21h
cmdpbi1ib3R0b206MjBweDtmb250LXNpemU6MjFweDtsaW5lLWhlaWdodDo0MHB4O2NvbG9yOiMz
MzM7Ym9yZGVyOjA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2U1ZTVlNX1sZWdlbmQgc21hbGx7
Zm9udC1zaXplOjE1cHg7Y29sb3I6Izk5OX1sYWJlbCxpbnB1dCxidXR0b24sc2VsZWN0LHRleHRh
cmVhe2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0Om5vcm1hbDtsaW5lLWhlaWdodDoyMHB4fWlu
cHV0LGJ1dHRvbixzZWxlY3QsdGV4dGFyZWF7Zm9udC1mYW1pbHk6IkhlbHZldGljYSBOZXVlIixI
ZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZn1sYWJlbHtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0
b206NXB4fXNlbGVjdCx0ZXh0YXJlYSxpbnB1dFt0eXBlPSJ0ZXh0Il0saW5wdXRbdHlwZT0icGFz
c3dvcmQiXSxpbnB1dFt0eXBlPSJkYXRldGltZSJdLGlucHV0W3R5cGU9ImRhdGV0aW1lLWxvY2Fs
Il0saW5wdXRbdHlwZT0iZGF0ZSJdLGlucHV0W3R5cGU9Im1vbnRoIl0saW5wdXRbdHlwZT0idGlt
ZSJdLGlucHV0W3R5cGU9IndlZWsiXSxpbnB1dFt0eXBlPSJudW1iZXIiXSxpbnB1dFt0eXBlPSJl
bWFpbCJdLGlucHV0W3R5cGU9InVybCJdLGlucHV0W3R5cGU9InNlYXJjaCJdLGlucHV0W3R5cGU9
InRlbCJdLGlucHV0W3R5cGU9ImNvbG9yIl0sLnVuZWRpdGFibGUtaW5wdXR7ZGlzcGxheTppbmxp
bmUtYmxvY2s7aGVpZ2h0OjIwcHg7cGFkZGluZzo0cHggNnB4O21hcmdpbi1ib3R0b206MTBweDtm
b250LXNpemU6MTRweDtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiM1NTU7dmVydGljYWwtYWxpZ246
bWlkZGxlOy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDti
b3JkZXItcmFkaXVzOjRweH1pbnB1dCx0ZXh0YXJlYSwudW5lZGl0YWJsZS1pbnB1dHt3aWR0aDoy
MDZweH10ZXh0YXJlYXtoZWlnaHQ6YXV0b310ZXh0YXJlYSxpbnB1dFt0eXBlPSJ0ZXh0Il0saW5w
dXRbdHlwZT0icGFzc3dvcmQiXSxpbnB1dFt0eXBlPSJkYXRldGltZSJdLGlucHV0W3R5cGU9ImRh
dGV0aW1lLWxvY2FsIl0saW5wdXRbdHlwZT0iZGF0ZSJdLGlucHV0W3R5cGU9Im1vbnRoIl0saW5w
dXRbdHlwZT0idGltZSJdLGlucHV0W3R5cGU9IndlZWsiXSxpbnB1dFt0eXBlPSJudW1iZXIiXSxp
bnB1dFt0eXBlPSJlbWFpbCJdLGlucHV0W3R5cGU9InVybCJdLGlucHV0W3R5cGU9InNlYXJjaCJd
LGlucHV0W3R5cGU9InRlbCJdLGlucHV0W3R5cGU9ImNvbG9yIl0sLnVuZWRpdGFibGUtaW5wdXR7
YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjYzstd2Via2l0LWJveC1z
aGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpOy1tb3otYm94LXNoYWRvdzpp
bnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAx
cHggcmdiYSgwLDAsMCwwLjA3NSk7LXdlYmtpdC10cmFuc2l0aW9uOmJvcmRlciBsaW5lYXIgLjJz
LGJveC1zaGFkb3cgbGluZWFyIC4yczstbW96LXRyYW5zaXRpb246Ym9yZGVyIGxpbmVhciAuMnMs
Ym94LXNoYWRvdyBsaW5lYXIgLjJzOy1vLXRyYW5zaXRpb246Ym9yZGVyIGxpbmVhciAuMnMsYm94
LXNoYWRvdyBsaW5lYXIgLjJzO3RyYW5zaXRpb246Ym9yZGVyIGxpbmVhciAuMnMsYm94LXNoYWRv
dyBsaW5lYXIgLjJzfXRleHRhcmVhOmZvY3VzLGlucHV0W3R5cGU9InRleHQiXTpmb2N1cyxpbnB1
dFt0eXBlPSJwYXNzd29yZCJdOmZvY3VzLGlucHV0W3R5cGU9ImRhdGV0aW1lIl06Zm9jdXMsaW5w
dXRbdHlwZT0iZGF0ZXRpbWUtbG9jYWwiXTpmb2N1cyxpbnB1dFt0eXBlPSJkYXRlIl06Zm9jdXMs
aW5wdXRbdHlwZT0ibW9udGgiXTpmb2N1cyxpbnB1dFt0eXBlPSJ0aW1lIl06Zm9jdXMsaW5wdXRb
dHlwZT0id2VlayJdOmZvY3VzLGlucHV0W3R5cGU9Im51bWJlciJdOmZvY3VzLGlucHV0W3R5cGU9
ImVtYWlsIl06Zm9jdXMsaW5wdXRbdHlwZT0idXJsIl06Zm9jdXMsaW5wdXRbdHlwZT0ic2VhcmNo
Il06Zm9jdXMsaW5wdXRbdHlwZT0idGVsIl06Zm9jdXMsaW5wdXRbdHlwZT0iY29sb3IiXTpmb2N1
cywudW5lZGl0YWJsZS1pbnB1dDpmb2N1c3tib3JkZXItY29sb3I6cmdiYSg4MiwxNjgsMjM2LDAu
OCk7b3V0bGluZTowO291dGxpbmU6dGhpbiBkb3R0ZWQgXDk7LXdlYmtpdC1ib3gtc2hhZG93Omlu
c2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgOHB4IHJnYmEoODIsMTY4LDIzNiww
LjYpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSksMCAw
IDhweCByZ2JhKDgyLDE2OCwyMzYsMC42KTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2Jh
KDAsMCwwLDAuMDc1KSwwIDAgOHB4IHJnYmEoODIsMTY4LDIzNiwwLjYpfWlucHV0W3R5cGU9InJh
ZGlvIl0saW5wdXRbdHlwZT0iY2hlY2tib3giXXttYXJnaW46NHB4IDAgMDttYXJnaW4tdG9wOjFw
eCBcOTsqbWFyZ2luLXRvcDowO2xpbmUtaGVpZ2h0Om5vcm1hbH1pbnB1dFt0eXBlPSJmaWxlIl0s
aW5wdXRbdHlwZT0iaW1hZ2UiXSxpbnB1dFt0eXBlPSJzdWJtaXQiXSxpbnB1dFt0eXBlPSJyZXNl
dCJdLGlucHV0W3R5cGU9ImJ1dHRvbiJdLGlucHV0W3R5cGU9InJhZGlvIl0saW5wdXRbdHlwZT0i
Y2hlY2tib3giXXt3aWR0aDphdXRvfXNlbGVjdCxpbnB1dFt0eXBlPSJmaWxlIl17aGVpZ2h0OjMw
cHg7Km1hcmdpbi10b3A6NHB4O2xpbmUtaGVpZ2h0OjMwcHh9c2VsZWN0e3dpZHRoOjIyMHB4O2Jh
Y2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNjY2N9c2VsZWN0W211bHRpcGxl
XSxzZWxlY3Rbc2l6ZV17aGVpZ2h0OmF1dG99c2VsZWN0OmZvY3VzLGlucHV0W3R5cGU9ImZpbGUi
XTpmb2N1cyxpbnB1dFt0eXBlPSJyYWRpbyJdOmZvY3VzLGlucHV0W3R5cGU9ImNoZWNrYm94Il06
Zm9jdXN7b3V0bGluZTp0aGluIGRvdHRlZCAjMzMzO291dGxpbmU6NXB4IGF1dG8gLXdlYmtpdC1m
b2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zmc2V0Oi0ycHh9LnVuZWRpdGFibGUtaW5wdXQsLnVu
ZWRpdGFibGUtdGV4dGFyZWF7Y29sb3I6Izk5OTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3Vu
ZC1jb2xvcjojZmNmY2ZjO2JvcmRlci1jb2xvcjojY2NjOy13ZWJraXQtYm94LXNoYWRvdzppbnNl
dCAwIDFweCAycHggcmdiYSgwLDAsMCwwLjAyNSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4
IDJweCByZ2JhKDAsMCwwLDAuMDI1KTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDJweCByZ2JhKDAs
MCwwLDAuMDI1KX0udW5lZGl0YWJsZS1pbnB1dHtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6
bm93cmFwfS51bmVkaXRhYmxlLXRleHRhcmVhe3dpZHRoOmF1dG87aGVpZ2h0OmF1dG99aW5wdXQ6
LW1vei1wbGFjZWhvbGRlcix0ZXh0YXJlYTotbW96LXBsYWNlaG9sZGVye2NvbG9yOiM5OTl9aW5w
dXQ6LW1zLWlucHV0LXBsYWNlaG9sZGVyLHRleHRhcmVhOi1tcy1pbnB1dC1wbGFjZWhvbGRlcntj
b2xvcjojOTk5fWlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyLHRleHRhcmVhOjotd2Vi
a2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiM5OTl9LnJhZGlvLC5jaGVja2JveHttaW4taGVp
Z2h0OjIwcHg7cGFkZGluZy1sZWZ0OjIwcHh9LnJhZGlvIGlucHV0W3R5cGU9InJhZGlvIl0sLmNo
ZWNrYm94IGlucHV0W3R5cGU9ImNoZWNrYm94Il17ZmxvYXQ6bGVmdDttYXJnaW4tbGVmdDotMjBw
eH0uY29udHJvbHM+LnJhZGlvOmZpcnN0LWNoaWxkLC5jb250cm9scz4uY2hlY2tib3g6Zmlyc3Qt
Y2hpbGR7cGFkZGluZy10b3A6NXB4fS5yYWRpby5pbmxpbmUsLmNoZWNrYm94LmlubGluZXtkaXNw
bGF5OmlubGluZS1ibG9jaztwYWRkaW5nLXRvcDo1cHg7bWFyZ2luLWJvdHRvbTowO3ZlcnRpY2Fs
LWFsaWduOm1pZGRsZX0ucmFkaW8uaW5saW5lKy5yYWRpby5pbmxpbmUsLmNoZWNrYm94LmlubGlu
ZSsuY2hlY2tib3guaW5saW5le21hcmdpbi1sZWZ0OjEwcHh9LmlucHV0LW1pbml7d2lkdGg6NjBw
eH0uaW5wdXQtc21hbGx7d2lkdGg6OTBweH0uaW5wdXQtbWVkaXVte3dpZHRoOjE1MHB4fS5pbnB1
dC1sYXJnZXt3aWR0aDoyMTBweH0uaW5wdXQteGxhcmdle3dpZHRoOjI3MHB4fS5pbnB1dC14eGxh
cmdle3dpZHRoOjUzMHB4fWlucHV0W2NsYXNzKj0ic3BhbiJdLHNlbGVjdFtjbGFzcyo9InNwYW4i
XSx0ZXh0YXJlYVtjbGFzcyo9InNwYW4iXSwudW5lZGl0YWJsZS1pbnB1dFtjbGFzcyo9InNwYW4i
XSwucm93LWZsdWlkIGlucHV0W2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgc2VsZWN0W2NsYXNz
Kj0ic3BhbiJdLC5yb3ctZmx1aWQgdGV4dGFyZWFbY2xhc3MqPSJzcGFuIl0sLnJvdy1mbHVpZCAu
dW5lZGl0YWJsZS1pbnB1dFtjbGFzcyo9InNwYW4iXXtmbG9hdDpub25lO21hcmdpbi1sZWZ0OjB9
LmlucHV0LWFwcGVuZCBpbnB1dFtjbGFzcyo9InNwYW4iXSwuaW5wdXQtYXBwZW5kIC51bmVkaXRh
YmxlLWlucHV0W2NsYXNzKj0ic3BhbiJdLC5pbnB1dC1wcmVwZW5kIGlucHV0W2NsYXNzKj0ic3Bh
biJdLC5pbnB1dC1wcmVwZW5kIC51bmVkaXRhYmxlLWlucHV0W2NsYXNzKj0ic3BhbiJdLC5yb3ct
Zmx1aWQgaW5wdXRbY2xhc3MqPSJzcGFuIl0sLnJvdy1mbHVpZCBzZWxlY3RbY2xhc3MqPSJzcGFu
Il0sLnJvdy1mbHVpZCB0ZXh0YXJlYVtjbGFzcyo9InNwYW4iXSwucm93LWZsdWlkIC51bmVkaXRh
YmxlLWlucHV0W2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgLmlucHV0LXByZXBlbmQgW2NsYXNz
Kj0ic3BhbiJdLC5yb3ctZmx1aWQgLmlucHV0LWFwcGVuZCBbY2xhc3MqPSJzcGFuIl17ZGlzcGxh
eTppbmxpbmUtYmxvY2t9aW5wdXQsdGV4dGFyZWEsLnVuZWRpdGFibGUtaW5wdXR7bWFyZ2luLWxl
ZnQ6MH0uY29udHJvbHMtcm93IFtjbGFzcyo9InNwYW4iXStbY2xhc3MqPSJzcGFuIl17bWFyZ2lu
LWxlZnQ6MjBweH1pbnB1dC5zcGFuMTIsdGV4dGFyZWEuc3BhbjEyLC51bmVkaXRhYmxlLWlucHV0
LnNwYW4xMnt3aWR0aDo5MjZweH1pbnB1dC5zcGFuMTEsdGV4dGFyZWEuc3BhbjExLC51bmVkaXRh
YmxlLWlucHV0LnNwYW4xMXt3aWR0aDo4NDZweH1pbnB1dC5zcGFuMTAsdGV4dGFyZWEuc3BhbjEw
LC51bmVkaXRhYmxlLWlucHV0LnNwYW4xMHt3aWR0aDo3NjZweH1pbnB1dC5zcGFuOSx0ZXh0YXJl
YS5zcGFuOSwudW5lZGl0YWJsZS1pbnB1dC5zcGFuOXt3aWR0aDo2ODZweH1pbnB1dC5zcGFuOCx0
ZXh0YXJlYS5zcGFuOCwudW5lZGl0YWJsZS1pbnB1dC5zcGFuOHt3aWR0aDo2MDZweH1pbnB1dC5z
cGFuNyx0ZXh0YXJlYS5zcGFuNywudW5lZGl0YWJsZS1pbnB1dC5zcGFuN3t3aWR0aDo1MjZweH1p
bnB1dC5zcGFuNix0ZXh0YXJlYS5zcGFuNiwudW5lZGl0YWJsZS1pbnB1dC5zcGFuNnt3aWR0aDo0
NDZweH1pbnB1dC5zcGFuNSx0ZXh0YXJlYS5zcGFuNSwudW5lZGl0YWJsZS1pbnB1dC5zcGFuNXt3
aWR0aDozNjZweH1pbnB1dC5zcGFuNCx0ZXh0YXJlYS5zcGFuNCwudW5lZGl0YWJsZS1pbnB1dC5z
cGFuNHt3aWR0aDoyODZweH1pbnB1dC5zcGFuMyx0ZXh0YXJlYS5zcGFuMywudW5lZGl0YWJsZS1p
bnB1dC5zcGFuM3t3aWR0aDoyMDZweH1pbnB1dC5zcGFuMix0ZXh0YXJlYS5zcGFuMiwudW5lZGl0
YWJsZS1pbnB1dC5zcGFuMnt3aWR0aDoxMjZweH1pbnB1dC5zcGFuMSx0ZXh0YXJlYS5zcGFuMSwu
dW5lZGl0YWJsZS1pbnB1dC5zcGFuMXt3aWR0aDo0NnB4fS5jb250cm9scy1yb3d7Knpvb206MX0u
Y29udHJvbHMtcm93OmJlZm9yZSwuY29udHJvbHMtcm93OmFmdGVye2Rpc3BsYXk6dGFibGU7bGlu
ZS1oZWlnaHQ6MDtjb250ZW50OiIifS5jb250cm9scy1yb3c6YWZ0ZXJ7Y2xlYXI6Ym90aH0uY29u
dHJvbHMtcm93IFtjbGFzcyo9InNwYW4iXSwucm93LWZsdWlkIC5jb250cm9scy1yb3cgW2NsYXNz
Kj0ic3BhbiJde2Zsb2F0OmxlZnR9LmNvbnRyb2xzLXJvdyAuY2hlY2tib3hbY2xhc3MqPSJzcGFu
Il0sLmNvbnRyb2xzLXJvdyAucmFkaW9bY2xhc3MqPSJzcGFuIl17cGFkZGluZy10b3A6NXB4fWlu
cHV0W2Rpc2FibGVkXSxzZWxlY3RbZGlzYWJsZWRdLHRleHRhcmVhW2Rpc2FibGVkXSxpbnB1dFty
ZWFkb25seV0sc2VsZWN0W3JlYWRvbmx5XSx0ZXh0YXJlYVtyZWFkb25seV17Y3Vyc29yOm5vdC1h
bGxvd2VkO2JhY2tncm91bmQtY29sb3I6I2VlZX1pbnB1dFt0eXBlPSJyYWRpbyJdW2Rpc2FibGVk
XSxpbnB1dFt0eXBlPSJjaGVja2JveCJdW2Rpc2FibGVkXSxpbnB1dFt0eXBlPSJyYWRpbyJdW3Jl
YWRvbmx5XSxpbnB1dFt0eXBlPSJjaGVja2JveCJdW3JlYWRvbmx5XXtiYWNrZ3JvdW5kLWNvbG9y
OnRyYW5zcGFyZW50fS5jb250cm9sLWdyb3VwLndhcm5pbmcgLmNvbnRyb2wtbGFiZWwsLmNvbnRy
b2wtZ3JvdXAud2FybmluZyAuaGVscC1ibG9jaywuY29udHJvbC1ncm91cC53YXJuaW5nIC5oZWxw
LWlubGluZXtjb2xvcjojYzA5ODUzfS5jb250cm9sLWdyb3VwLndhcm5pbmcgLmNoZWNrYm94LC5j
b250cm9sLWdyb3VwLndhcm5pbmcgLnJhZGlvLC5jb250cm9sLWdyb3VwLndhcm5pbmcgaW5wdXQs
LmNvbnRyb2wtZ3JvdXAud2FybmluZyBzZWxlY3QsLmNvbnRyb2wtZ3JvdXAud2FybmluZyB0ZXh0
YXJlYXtjb2xvcjojYzA5ODUzfS5jb250cm9sLWdyb3VwLndhcm5pbmcgaW5wdXQsLmNvbnRyb2wt
Z3JvdXAud2FybmluZyBzZWxlY3QsLmNvbnRyb2wtZ3JvdXAud2FybmluZyB0ZXh0YXJlYXtib3Jk
ZXItY29sb3I6I2MwOTg1Mzstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEo
MCwwLDAsMC4wNzUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCww
LjA3NSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSl9LmNvbnRy
b2wtZ3JvdXAud2FybmluZyBpbnB1dDpmb2N1cywuY29udHJvbC1ncm91cC53YXJuaW5nIHNlbGVj
dDpmb2N1cywuY29udHJvbC1ncm91cC53YXJuaW5nIHRleHRhcmVhOmZvY3Vze2JvcmRlci1jb2xv
cjojYTQ3ZTNjOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCww
LjA3NSksMCAwIDZweCAjZGJjNTllOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdi
YSgwLDAsMCwwLjA3NSksMCAwIDZweCAjZGJjNTllO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4
IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA2cHggI2RiYzU5ZX0uY29udHJvbC1ncm91cC53YXJuaW5n
IC5pbnB1dC1wcmVwZW5kIC5hZGQtb24sLmNvbnRyb2wtZ3JvdXAud2FybmluZyAuaW5wdXQtYXBw
ZW5kIC5hZGQtb257Y29sb3I6I2MwOTg1MztiYWNrZ3JvdW5kLWNvbG9yOiNmY2Y4ZTM7Ym9yZGVy
LWNvbG9yOiNjMDk4NTN9LmNvbnRyb2wtZ3JvdXAuZXJyb3IgLmNvbnRyb2wtbGFiZWwsLmNvbnRy
b2wtZ3JvdXAuZXJyb3IgLmhlbHAtYmxvY2ssLmNvbnRyb2wtZ3JvdXAuZXJyb3IgLmhlbHAtaW5s
aW5le2NvbG9yOiNiOTRhNDh9LmNvbnRyb2wtZ3JvdXAuZXJyb3IgLmNoZWNrYm94LC5jb250cm9s
LWdyb3VwLmVycm9yIC5yYWRpbywuY29udHJvbC1ncm91cC5lcnJvciBpbnB1dCwuY29udHJvbC1n
cm91cC5lcnJvciBzZWxlY3QsLmNvbnRyb2wtZ3JvdXAuZXJyb3IgdGV4dGFyZWF7Y29sb3I6I2I5
NGE0OH0uY29udHJvbC1ncm91cC5lcnJvciBpbnB1dCwuY29udHJvbC1ncm91cC5lcnJvciBzZWxl
Y3QsLmNvbnRyb2wtZ3JvdXAuZXJyb3IgdGV4dGFyZWF7Ym9yZGVyLWNvbG9yOiNiOTRhNDg7LXdl
YmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KTstbW96LWJv
eC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpO2JveC1zaGFkb3c6aW5z
ZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpfS5jb250cm9sLWdyb3VwLmVycm9yIGlucHV0
OmZvY3VzLC5jb250cm9sLWdyb3VwLmVycm9yIHNlbGVjdDpmb2N1cywuY29udHJvbC1ncm91cC5l
cnJvciB0ZXh0YXJlYTpmb2N1c3tib3JkZXItY29sb3I6Izk1M2IzOTstd2Via2l0LWJveC1zaGFk
b3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA2cHggI2Q1OTM5MjstbW96
LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA2cHggI2Q1
OTM5Mjtib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgNnB4
ICNkNTkzOTJ9LmNvbnRyb2wtZ3JvdXAuZXJyb3IgLmlucHV0LXByZXBlbmQgLmFkZC1vbiwuY29u
dHJvbC1ncm91cC5lcnJvciAuaW5wdXQtYXBwZW5kIC5hZGQtb257Y29sb3I6I2I5NGE0ODtiYWNr
Z3JvdW5kLWNvbG9yOiNmMmRlZGU7Ym9yZGVyLWNvbG9yOiNiOTRhNDh9LmNvbnRyb2wtZ3JvdXAu
c3VjY2VzcyAuY29udHJvbC1sYWJlbCwuY29udHJvbC1ncm91cC5zdWNjZXNzIC5oZWxwLWJsb2Nr
LC5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgLmhlbHAtaW5saW5le2NvbG9yOiM0Njg4NDd9LmNvbnRy
b2wtZ3JvdXAuc3VjY2VzcyAuY2hlY2tib3gsLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyAucmFkaW8s
LmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyBpbnB1dCwuY29udHJvbC1ncm91cC5zdWNjZXNzIHNlbGVj
dCwuY29udHJvbC1ncm91cC5zdWNjZXNzIHRleHRhcmVhe2NvbG9yOiM0Njg4NDd9LmNvbnRyb2wt
Z3JvdXAuc3VjY2VzcyBpbnB1dCwuY29udHJvbC1ncm91cC5zdWNjZXNzIHNlbGVjdCwuY29udHJv
bC1ncm91cC5zdWNjZXNzIHRleHRhcmVhe2JvcmRlci1jb2xvcjojNDY4ODQ3Oy13ZWJraXQtYm94
LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSk7LW1vei1ib3gtc2hhZG93
Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KTtib3gtc2hhZG93Omluc2V0IDAgMXB4
IDFweCByZ2JhKDAsMCwwLDAuMDc1KX0uY29udHJvbC1ncm91cC5zdWNjZXNzIGlucHV0OmZvY3Vz
LC5jb250cm9sLWdyb3VwLnN1Y2Nlc3Mgc2VsZWN0OmZvY3VzLC5jb250cm9sLWdyb3VwLnN1Y2Nl
c3MgdGV4dGFyZWE6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMzNTY2MzU7LXdlYmtpdC1ib3gtc2hhZG93
Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgNnB4ICM3YWJhN2I7LW1vei1i
b3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgNnB4ICM3YWJh
N2I7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSksMCAwIDZweCAj
N2FiYTdifS5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgLmlucHV0LXByZXBlbmQgLmFkZC1vbiwuY29u
dHJvbC1ncm91cC5zdWNjZXNzIC5pbnB1dC1hcHBlbmQgLmFkZC1vbntjb2xvcjojNDY4ODQ3O2Jh
Y2tncm91bmQtY29sb3I6I2RmZjBkODtib3JkZXItY29sb3I6IzQ2ODg0N30uY29udHJvbC1ncm91
cC5pbmZvIC5jb250cm9sLWxhYmVsLC5jb250cm9sLWdyb3VwLmluZm8gLmhlbHAtYmxvY2ssLmNv
bnRyb2wtZ3JvdXAuaW5mbyAuaGVscC1pbmxpbmV7Y29sb3I6IzNhODdhZH0uY29udHJvbC1ncm91
cC5pbmZvIC5jaGVja2JveCwuY29udHJvbC1ncm91cC5pbmZvIC5yYWRpbywuY29udHJvbC1ncm91
cC5pbmZvIGlucHV0LC5jb250cm9sLWdyb3VwLmluZm8gc2VsZWN0LC5jb250cm9sLWdyb3VwLmlu
Zm8gdGV4dGFyZWF7Y29sb3I6IzNhODdhZH0uY29udHJvbC1ncm91cC5pbmZvIGlucHV0LC5jb250
cm9sLWdyb3VwLmluZm8gc2VsZWN0LC5jb250cm9sLWdyb3VwLmluZm8gdGV4dGFyZWF7Ym9yZGVy
LWNvbG9yOiMzYTg3YWQ7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAs
MCwwLDAuMDc1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4w
NzUpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpfS5jb250cm9s
LWdyb3VwLmluZm8gaW5wdXQ6Zm9jdXMsLmNvbnRyb2wtZ3JvdXAuaW5mbyBzZWxlY3Q6Zm9jdXMs
LmNvbnRyb2wtZ3JvdXAuaW5mbyB0ZXh0YXJlYTpmb2N1c3tib3JkZXItY29sb3I6IzJkNjk4Nzst
d2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA2
cHggIzdhYjVkMzstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4w
NzUpLDAgMCA2cHggIzdhYjVkMztib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCww
LDAuMDc1KSwwIDAgNnB4ICM3YWI1ZDN9LmNvbnRyb2wtZ3JvdXAuaW5mbyAuaW5wdXQtcHJlcGVu
ZCAuYWRkLW9uLC5jb250cm9sLWdyb3VwLmluZm8gLmlucHV0LWFwcGVuZCAuYWRkLW9ue2NvbG9y
OiMzYTg3YWQ7YmFja2dyb3VuZC1jb2xvcjojZDllZGY3O2JvcmRlci1jb2xvcjojM2E4N2FkfWlu
cHV0OmZvY3VzOmludmFsaWQsdGV4dGFyZWE6Zm9jdXM6aW52YWxpZCxzZWxlY3Q6Zm9jdXM6aW52
YWxpZHtjb2xvcjojYjk0YTQ4O2JvcmRlci1jb2xvcjojZWU1ZjVifWlucHV0OmZvY3VzOmludmFs
aWQ6Zm9jdXMsdGV4dGFyZWE6Zm9jdXM6aW52YWxpZDpmb2N1cyxzZWxlY3Q6Zm9jdXM6aW52YWxp
ZDpmb2N1c3tib3JkZXItY29sb3I6I2U5MzIyZDstd2Via2l0LWJveC1zaGFkb3c6MCAwIDZweCAj
ZjhiOWI3Oy1tb3otYm94LXNoYWRvdzowIDAgNnB4ICNmOGI5Yjc7Ym94LXNoYWRvdzowIDAgNnB4
ICNmOGI5Yjd9LmZvcm0tYWN0aW9uc3twYWRkaW5nOjE5cHggMjBweCAyMHB4O21hcmdpbi10b3A6
MjBweDttYXJnaW4tYm90dG9tOjIwcHg7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1O2JvcmRlci10
b3A6MXB4IHNvbGlkICNlNWU1ZTU7Knpvb206MX0uZm9ybS1hY3Rpb25zOmJlZm9yZSwuZm9ybS1h
Y3Rpb25zOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5mb3Jt
LWFjdGlvbnM6YWZ0ZXJ7Y2xlYXI6Ym90aH0uaGVscC1ibG9jaywuaGVscC1pbmxpbmV7Y29sb3I6
IzU5NTk1OX0uaGVscC1ibG9ja3tkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206MTBweH0uaGVs
cC1pbmxpbmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7KmRpc3BsYXk6aW5saW5lO3BhZGRpbmctbGVm
dDo1cHg7dmVydGljYWwtYWxpZ246bWlkZGxlOyp6b29tOjF9LmlucHV0LWFwcGVuZCwuaW5wdXQt
cHJlcGVuZHttYXJnaW4tYm90dG9tOjVweDtmb250LXNpemU6MDt3aGl0ZS1zcGFjZTpub3dyYXB9
LmlucHV0LWFwcGVuZCBpbnB1dCwuaW5wdXQtcHJlcGVuZCBpbnB1dCwuaW5wdXQtYXBwZW5kIHNl
bGVjdCwuaW5wdXQtcHJlcGVuZCBzZWxlY3QsLmlucHV0LWFwcGVuZCAudW5lZGl0YWJsZS1pbnB1
dCwuaW5wdXQtcHJlcGVuZCAudW5lZGl0YWJsZS1pbnB1dCwuaW5wdXQtYXBwZW5kIC5kcm9wZG93
bi1tZW51LC5pbnB1dC1wcmVwZW5kIC5kcm9wZG93bi1tZW51e2ZvbnQtc2l6ZToxNHB4fS5pbnB1
dC1hcHBlbmQgaW5wdXQsLmlucHV0LXByZXBlbmQgaW5wdXQsLmlucHV0LWFwcGVuZCBzZWxlY3Qs
LmlucHV0LXByZXBlbmQgc2VsZWN0LC5pbnB1dC1hcHBlbmQgLnVuZWRpdGFibGUtaW5wdXQsLmlu
cHV0LXByZXBlbmQgLnVuZWRpdGFibGUtaW5wdXR7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLWJv
dHRvbTowOyptYXJnaW4tbGVmdDowO3ZlcnRpY2FsLWFsaWduOnRvcDstd2Via2l0LWJvcmRlci1y
YWRpdXM6MCA0cHggNHB4IDA7LW1vei1ib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwO2JvcmRlci1y
YWRpdXM6MCA0cHggNHB4IDB9LmlucHV0LWFwcGVuZCBpbnB1dDpmb2N1cywuaW5wdXQtcHJlcGVu
ZCBpbnB1dDpmb2N1cywuaW5wdXQtYXBwZW5kIHNlbGVjdDpmb2N1cywuaW5wdXQtcHJlcGVuZCBz
ZWxlY3Q6Zm9jdXMsLmlucHV0LWFwcGVuZCAudW5lZGl0YWJsZS1pbnB1dDpmb2N1cywuaW5wdXQt
cHJlcGVuZCAudW5lZGl0YWJsZS1pbnB1dDpmb2N1c3t6LWluZGV4OjJ9LmlucHV0LWFwcGVuZCAu
YWRkLW9uLC5pbnB1dC1wcmVwZW5kIC5hZGQtb257ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6
YXV0bztoZWlnaHQ6MjBweDttaW4td2lkdGg6MTZweDtwYWRkaW5nOjRweCA1cHg7Zm9udC1zaXpl
OjE0cHg7Zm9udC13ZWlnaHQ6bm9ybWFsO2xpbmUtaGVpZ2h0OjIwcHg7dGV4dC1hbGlnbjpjZW50
ZXI7dGV4dC1zaGFkb3c6MCAxcHggMCAjZmZmO2JhY2tncm91bmQtY29sb3I6I2VlZTtib3JkZXI6
MXB4IHNvbGlkICNjY2N9LmlucHV0LWFwcGVuZCAuYWRkLW9uLC5pbnB1dC1wcmVwZW5kIC5hZGQt
b24sLmlucHV0LWFwcGVuZCAuYnRuLC5pbnB1dC1wcmVwZW5kIC5idG4sLmlucHV0LWFwcGVuZCAu
YnRuLWdyb3VwPi5kcm9wZG93bi10b2dnbGUsLmlucHV0LXByZXBlbmQgLmJ0bi1ncm91cD4uZHJv
cGRvd24tdG9nZ2xle3ZlcnRpY2FsLWFsaWduOnRvcDstd2Via2l0LWJvcmRlci1yYWRpdXM6MDst
bW96LWJvcmRlci1yYWRpdXM6MDtib3JkZXItcmFkaXVzOjB9LmlucHV0LWFwcGVuZCAuYWN0aXZl
LC5pbnB1dC1wcmVwZW5kIC5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojYTlkYmE5O2JvcmRlci1j
b2xvcjojNDZhNTQ2fS5pbnB1dC1wcmVwZW5kIC5hZGQtb24sLmlucHV0LXByZXBlbmQgLmJ0bntt
YXJnaW4tcmlnaHQ6LTFweH0uaW5wdXQtcHJlcGVuZCAuYWRkLW9uOmZpcnN0LWNoaWxkLC5pbnB1
dC1wcmVwZW5kIC5idG46Zmlyc3QtY2hpbGR7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweCAwIDAg
NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHggMCAwIDRweDtib3JkZXItcmFkaXVzOjRweCAwIDAg
NHB4fS5pbnB1dC1hcHBlbmQgaW5wdXQsLmlucHV0LWFwcGVuZCBzZWxlY3QsLmlucHV0LWFwcGVu
ZCAudW5lZGl0YWJsZS1pbnB1dHstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4IDAgMCA0cHg7LW1v
ei1ib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4O2JvcmRlci1yYWRpdXM6NHB4IDAgMCA0cHh9Lmlu
cHV0LWFwcGVuZCBpbnB1dCsuYnRuLWdyb3VwIC5idG46bGFzdC1jaGlsZCwuaW5wdXQtYXBwZW5k
IHNlbGVjdCsuYnRuLWdyb3VwIC5idG46bGFzdC1jaGlsZCwuaW5wdXQtYXBwZW5kIC51bmVkaXRh
YmxlLWlucHV0Ky5idG4tZ3JvdXAgLmJ0bjpsYXN0LWNoaWxkey13ZWJraXQtYm9yZGVyLXJhZGl1
czowIDRweCA0cHggMDstbW96LWJvcmRlci1yYWRpdXM6MCA0cHggNHB4IDA7Ym9yZGVyLXJhZGl1
czowIDRweCA0cHggMH0uaW5wdXQtYXBwZW5kIC5hZGQtb24sLmlucHV0LWFwcGVuZCAuYnRuLC5p
bnB1dC1hcHBlbmQgLmJ0bi1ncm91cHttYXJnaW4tbGVmdDotMXB4fS5pbnB1dC1hcHBlbmQgLmFk
ZC1vbjpsYXN0LWNoaWxkLC5pbnB1dC1hcHBlbmQgLmJ0bjpsYXN0LWNoaWxkLC5pbnB1dC1hcHBl
bmQgLmJ0bi1ncm91cDpsYXN0LWNoaWxkPi5kcm9wZG93bi10b2dnbGV7LXdlYmtpdC1ib3JkZXIt
cmFkaXVzOjAgNHB4IDRweCAwOy1tb3otYm9yZGVyLXJhZGl1czowIDRweCA0cHggMDtib3JkZXIt
cmFkaXVzOjAgNHB4IDRweCAwfS5pbnB1dC1wcmVwZW5kLmlucHV0LWFwcGVuZCBpbnB1dCwuaW5w
dXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgc2VsZWN0LC5pbnB1dC1wcmVwZW5kLmlucHV0LWFwcGVu
ZCAudW5lZGl0YWJsZS1pbnB1dHstd2Via2l0LWJvcmRlci1yYWRpdXM6MDstbW96LWJvcmRlci1y
YWRpdXM6MDtib3JkZXItcmFkaXVzOjB9LmlucHV0LXByZXBlbmQuaW5wdXQtYXBwZW5kIGlucHV0
Ky5idG4tZ3JvdXAgLmJ0biwuaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgc2VsZWN0Ky5idG4t
Z3JvdXAgLmJ0biwuaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgLnVuZWRpdGFibGUtaW5wdXQr
LmJ0bi1ncm91cCAuYnRuey13ZWJraXQtYm9yZGVyLXJhZGl1czowIDRweCA0cHggMDstbW96LWJv
cmRlci1yYWRpdXM6MCA0cHggNHB4IDA7Ym9yZGVyLXJhZGl1czowIDRweCA0cHggMH0uaW5wdXQt
cHJlcGVuZC5pbnB1dC1hcHBlbmQgLmFkZC1vbjpmaXJzdC1jaGlsZCwuaW5wdXQtcHJlcGVuZC5p
bnB1dC1hcHBlbmQgLmJ0bjpmaXJzdC1jaGlsZHttYXJnaW4tcmlnaHQ6LTFweDstd2Via2l0LWJv
cmRlci1yYWRpdXM6NHB4IDAgMCA0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4O2Jv
cmRlci1yYWRpdXM6NHB4IDAgMCA0cHh9LmlucHV0LXByZXBlbmQuaW5wdXQtYXBwZW5kIC5hZGQt
b246bGFzdC1jaGlsZCwuaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgLmJ0bjpsYXN0LWNoaWxk
e21hcmdpbi1sZWZ0Oi0xcHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwOy1tb3ot
Ym9yZGVyLXJhZGl1czowIDRweCA0cHggMDtib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwfS5pbnB1
dC1wcmVwZW5kLmlucHV0LWFwcGVuZCAuYnRuLWdyb3VwOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0
OjB9aW5wdXQuc2VhcmNoLXF1ZXJ5e3BhZGRpbmctcmlnaHQ6MTRweDtwYWRkaW5nLXJpZ2h0OjRw
eCBcOTtwYWRkaW5nLWxlZnQ6MTRweDtwYWRkaW5nLWxlZnQ6NHB4IFw5O21hcmdpbi1ib3R0b206
MDstd2Via2l0LWJvcmRlci1yYWRpdXM6MTVweDstbW96LWJvcmRlci1yYWRpdXM6MTVweDtib3Jk
ZXItcmFkaXVzOjE1cHh9LmZvcm0tc2VhcmNoIC5pbnB1dC1hcHBlbmQgLnNlYXJjaC1xdWVyeSwu
Zm9ybS1zZWFyY2ggLmlucHV0LXByZXBlbmQgLnNlYXJjaC1xdWVyeXstd2Via2l0LWJvcmRlci1y
YWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXM6MDtib3JkZXItcmFkaXVzOjB9LmZvcm0tc2VhcmNo
IC5pbnB1dC1hcHBlbmQgLnNlYXJjaC1xdWVyeXstd2Via2l0LWJvcmRlci1yYWRpdXM6MTRweCAw
IDAgMTRweDstbW96LWJvcmRlci1yYWRpdXM6MTRweCAwIDAgMTRweDtib3JkZXItcmFkaXVzOjE0
cHggMCAwIDE0cHh9LmZvcm0tc2VhcmNoIC5pbnB1dC1hcHBlbmQgLmJ0bnstd2Via2l0LWJvcmRl
ci1yYWRpdXM6MCAxNHB4IDE0cHggMDstbW96LWJvcmRlci1yYWRpdXM6MCAxNHB4IDE0cHggMDti
b3JkZXItcmFkaXVzOjAgMTRweCAxNHB4IDB9LmZvcm0tc2VhcmNoIC5pbnB1dC1wcmVwZW5kIC5z
ZWFyY2gtcXVlcnl7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjAgMTRweCAxNHB4IDA7LW1vei1ib3Jk
ZXItcmFkaXVzOjAgMTRweCAxNHB4IDA7Ym9yZGVyLXJhZGl1czowIDE0cHggMTRweCAwfS5mb3Jt
LXNlYXJjaCAuaW5wdXQtcHJlcGVuZCAuYnRuey13ZWJraXQtYm9yZGVyLXJhZGl1czoxNHB4IDAg
MCAxNHB4Oy1tb3otYm9yZGVyLXJhZGl1czoxNHB4IDAgMCAxNHB4O2JvcmRlci1yYWRpdXM6MTRw
eCAwIDAgMTRweH0uZm9ybS1zZWFyY2ggaW5wdXQsLmZvcm0taW5saW5lIGlucHV0LC5mb3JtLWhv
cml6b250YWwgaW5wdXQsLmZvcm0tc2VhcmNoIHRleHRhcmVhLC5mb3JtLWlubGluZSB0ZXh0YXJl
YSwuZm9ybS1ob3Jpem9udGFsIHRleHRhcmVhLC5mb3JtLXNlYXJjaCBzZWxlY3QsLmZvcm0taW5s
aW5lIHNlbGVjdCwuZm9ybS1ob3Jpem9udGFsIHNlbGVjdCwuZm9ybS1zZWFyY2ggLmhlbHAtaW5s
aW5lLC5mb3JtLWlubGluZSAuaGVscC1pbmxpbmUsLmZvcm0taG9yaXpvbnRhbCAuaGVscC1pbmxp
bmUsLmZvcm0tc2VhcmNoIC51bmVkaXRhYmxlLWlucHV0LC5mb3JtLWlubGluZSAudW5lZGl0YWJs
ZS1pbnB1dCwuZm9ybS1ob3Jpem9udGFsIC51bmVkaXRhYmxlLWlucHV0LC5mb3JtLXNlYXJjaCAu
aW5wdXQtcHJlcGVuZCwuZm9ybS1pbmxpbmUgLmlucHV0LXByZXBlbmQsLmZvcm0taG9yaXpvbnRh
bCAuaW5wdXQtcHJlcGVuZCwuZm9ybS1zZWFyY2ggLmlucHV0LWFwcGVuZCwuZm9ybS1pbmxpbmUg
LmlucHV0LWFwcGVuZCwuZm9ybS1ob3Jpem9udGFsIC5pbnB1dC1hcHBlbmR7ZGlzcGxheTppbmxp
bmUtYmxvY2s7KmRpc3BsYXk6aW5saW5lO21hcmdpbi1ib3R0b206MDt2ZXJ0aWNhbC1hbGlnbjpt
aWRkbGU7Knpvb206MX0uZm9ybS1zZWFyY2ggLmhpZGUsLmZvcm0taW5saW5lIC5oaWRlLC5mb3Jt
LWhvcml6b250YWwgLmhpZGV7ZGlzcGxheTpub25lfS5mb3JtLXNlYXJjaCBsYWJlbCwuZm9ybS1p
bmxpbmUgbGFiZWwsLmZvcm0tc2VhcmNoIC5idG4tZ3JvdXAsLmZvcm0taW5saW5lIC5idG4tZ3Jv
dXB7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmZvcm0tc2VhcmNoIC5pbnB1dC1hcHBlbmQsLmZvcm0t
aW5saW5lIC5pbnB1dC1hcHBlbmQsLmZvcm0tc2VhcmNoIC5pbnB1dC1wcmVwZW5kLC5mb3JtLWlu
bGluZSAuaW5wdXQtcHJlcGVuZHttYXJnaW4tYm90dG9tOjB9LmZvcm0tc2VhcmNoIC5yYWRpbywu
Zm9ybS1zZWFyY2ggLmNoZWNrYm94LC5mb3JtLWlubGluZSAucmFkaW8sLmZvcm0taW5saW5lIC5j
aGVja2JveHtwYWRkaW5nLWxlZnQ6MDttYXJnaW4tYm90dG9tOjA7dmVydGljYWwtYWxpZ246bWlk
ZGxlfS5mb3JtLXNlYXJjaCAucmFkaW8gaW5wdXRbdHlwZT0icmFkaW8iXSwuZm9ybS1zZWFyY2gg
LmNoZWNrYm94IGlucHV0W3R5cGU9ImNoZWNrYm94Il0sLmZvcm0taW5saW5lIC5yYWRpbyBpbnB1
dFt0eXBlPSJyYWRpbyJdLC5mb3JtLWlubGluZSAuY2hlY2tib3ggaW5wdXRbdHlwZT0iY2hlY2ti
b3giXXtmbG9hdDpsZWZ0O21hcmdpbi1yaWdodDozcHg7bWFyZ2luLWxlZnQ6MH0uY29udHJvbC1n
cm91cHttYXJnaW4tYm90dG9tOjEwcHh9bGVnZW5kKy5jb250cm9sLWdyb3Vwe21hcmdpbi10b3A6
MjBweDstd2Via2l0LW1hcmdpbi10b3AtY29sbGFwc2U6c2VwYXJhdGV9LmZvcm0taG9yaXpvbnRh
bCAuY29udHJvbC1ncm91cHttYXJnaW4tYm90dG9tOjIwcHg7Knpvb206MX0uZm9ybS1ob3Jpem9u
dGFsIC5jb250cm9sLWdyb3VwOmJlZm9yZSwuZm9ybS1ob3Jpem9udGFsIC5jb250cm9sLWdyb3Vw
OmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5mb3JtLWhvcml6
b250YWwgLmNvbnRyb2wtZ3JvdXA6YWZ0ZXJ7Y2xlYXI6Ym90aH0uZm9ybS1ob3Jpem9udGFsIC5j
b250cm9sLWxhYmVse2Zsb2F0OmxlZnQ7d2lkdGg6MTYwcHg7cGFkZGluZy10b3A6NXB4O3RleHQt
YWxpZ246cmlnaHR9LmZvcm0taG9yaXpvbnRhbCAuY29udHJvbHN7KmRpc3BsYXk6aW5saW5lLWJs
b2NrOypwYWRkaW5nLWxlZnQ6MjBweDttYXJnaW4tbGVmdDoxODBweDsqbWFyZ2luLWxlZnQ6MH0u
Zm9ybS1ob3Jpem9udGFsIC5jb250cm9sczpmaXJzdC1jaGlsZHsqcGFkZGluZy1sZWZ0OjE4MHB4
fS5mb3JtLWhvcml6b250YWwgLmhlbHAtYmxvY2t7bWFyZ2luLWJvdHRvbTowfS5mb3JtLWhvcml6
b250YWwgaW5wdXQrLmhlbHAtYmxvY2ssLmZvcm0taG9yaXpvbnRhbCBzZWxlY3QrLmhlbHAtYmxv
Y2ssLmZvcm0taG9yaXpvbnRhbCB0ZXh0YXJlYSsuaGVscC1ibG9jaywuZm9ybS1ob3Jpem9udGFs
IC51bmVkaXRhYmxlLWlucHV0Ky5oZWxwLWJsb2NrLC5mb3JtLWhvcml6b250YWwgLmlucHV0LXBy
ZXBlbmQrLmhlbHAtYmxvY2ssLmZvcm0taG9yaXpvbnRhbCAuaW5wdXQtYXBwZW5kKy5oZWxwLWJs
b2Nre21hcmdpbi10b3A6MTBweH0uZm9ybS1ob3Jpem9udGFsIC5mb3JtLWFjdGlvbnN7cGFkZGlu
Zy1sZWZ0OjE4MHB4fXRhYmxle21heC13aWR0aDoxMDAlO2JhY2tncm91bmQtY29sb3I6dHJhbnNw
YXJlbnQ7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2JvcmRlci1zcGFjaW5nOjB9LnRhYmxle3dp
ZHRoOjEwMCU7bWFyZ2luLWJvdHRvbToyMHB4fS50YWJsZSB0aCwudGFibGUgdGR7cGFkZGluZzo4
cHg7bGluZS1oZWlnaHQ6MjBweDt0ZXh0LWFsaWduOmxlZnQ7dmVydGljYWwtYWxpZ246dG9wO2Jv
cmRlci10b3A6MXB4IHNvbGlkICNkZGR9LnRhYmxlIHRoe2ZvbnQtd2VpZ2h0OmJvbGR9LnRhYmxl
IHRoZWFkIHRoe3ZlcnRpY2FsLWFsaWduOmJvdHRvbX0udGFibGUgY2FwdGlvbit0aGVhZCB0cjpm
aXJzdC1jaGlsZCB0aCwudGFibGUgY2FwdGlvbit0aGVhZCB0cjpmaXJzdC1jaGlsZCB0ZCwudGFi
bGUgY29sZ3JvdXArdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGgsLnRhYmxlIGNvbGdyb3VwK3RoZWFk
IHRyOmZpcnN0LWNoaWxkIHRkLC50YWJsZSB0aGVhZDpmaXJzdC1jaGlsZCB0cjpmaXJzdC1jaGls
ZCB0aCwudGFibGUgdGhlYWQ6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQgdGR7Ym9yZGVyLXRv
cDowfS50YWJsZSB0Ym9keSt0Ym9keXtib3JkZXItdG9wOjJweCBzb2xpZCAjZGRkfS50YWJsZSAu
dGFibGV7YmFja2dyb3VuZC1jb2xvcjojZmZmfS50YWJsZS1jb25kZW5zZWQgdGgsLnRhYmxlLWNv
bmRlbnNlZCB0ZHtwYWRkaW5nOjRweCA1cHh9LnRhYmxlLWJvcmRlcmVke2JvcmRlcjoxcHggc29s
aWQgI2RkZDtib3JkZXItY29sbGFwc2U6c2VwYXJhdGU7KmJvcmRlci1jb2xsYXBzZTpjb2xsYXBz
ZTtib3JkZXItbGVmdDowOy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFk
aXVzOjRweDtib3JkZXItcmFkaXVzOjRweH0udGFibGUtYm9yZGVyZWQgdGgsLnRhYmxlLWJvcmRl
cmVkIHRke2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZGRkfS50YWJsZS1ib3JkZXJlZCBjYXB0aW9u
K3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRoLC50YWJsZS1ib3JkZXJlZCBjYXB0aW9uK3Rib2R5IHRy
OmZpcnN0LWNoaWxkIHRoLC50YWJsZS1ib3JkZXJlZCBjYXB0aW9uK3Rib2R5IHRyOmZpcnN0LWNo
aWxkIHRkLC50YWJsZS1ib3JkZXJlZCBjb2xncm91cCt0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aCwu
dGFibGUtYm9yZGVyZWQgY29sZ3JvdXArdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGgsLnRhYmxlLWJv
cmRlcmVkIGNvbGdyb3VwK3Rib2R5IHRyOmZpcnN0LWNoaWxkIHRkLC50YWJsZS1ib3JkZXJlZCB0
aGVhZDpmaXJzdC1jaGlsZCB0cjpmaXJzdC1jaGlsZCB0aCwudGFibGUtYm9yZGVyZWQgdGJvZHk6
Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQgdGgsLnRhYmxlLWJvcmRlcmVkIHRib2R5OmZpcnN0
LWNoaWxkIHRyOmZpcnN0LWNoaWxkIHRke2JvcmRlci10b3A6MH0udGFibGUtYm9yZGVyZWQgdGhl
YWQ6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQ+dGg6Zmlyc3QtY2hpbGQsLnRhYmxlLWJvcmRl
cmVkIHRib2R5OmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkPnRkOmZpcnN0LWNoaWxkey13ZWJr
aXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7
LW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQ6NHB4fS50YWJsZS1ib3JkZXJlZCB0aGVhZDpmaXJz
dC1jaGlsZCB0cjpmaXJzdC1jaGlsZD50aDpsYXN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCB0Ym9k
eTpmaXJzdC1jaGlsZCB0cjpmaXJzdC1jaGlsZD50ZDpsYXN0LWNoaWxkey13ZWJraXQtYm9yZGVy
LXRvcC1yaWdodC1yYWRpdXM6NHB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweDstbW96LWJv
cmRlci1yYWRpdXMtdG9wcmlnaHQ6NHB4fS50YWJsZS1ib3JkZXJlZCB0aGVhZDpsYXN0LWNoaWxk
IHRyOmxhc3QtY2hpbGQ+dGg6Zmlyc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIHRib2R5Omxhc3Qt
Y2hpbGQgdHI6bGFzdC1jaGlsZD50ZDpmaXJzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgdGZvb3Q6
bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkPnRkOmZpcnN0LWNoaWxkey13ZWJraXQtYm9yZGVyLWJv
dHRvbS1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo0cHg7LW1vei1i
b3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6NHB4fS50YWJsZS1ib3JkZXJlZCB0aGVhZDpsYXN0LWNo
aWxkIHRyOmxhc3QtY2hpbGQ+dGg6bGFzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgdGJvZHk6bGFz
dC1jaGlsZCB0cjpsYXN0LWNoaWxkPnRkOmxhc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIHRmb290
Omxhc3QtY2hpbGQgdHI6bGFzdC1jaGlsZD50ZDpsYXN0LWNoaWxkey13ZWJraXQtYm9yZGVyLWJv
dHRvbS1yaWdodC1yYWRpdXM6NHB4O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjRweDstbW96
LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6NHB4fS50YWJsZS1ib3JkZXJlZCB0Zm9vdCt0Ym9k
eTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGR7LXdlYmtpdC1ib3JkZXIt
Ym90dG9tLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowOy1tb3otYm9y
ZGVyLXJhZGl1cy1ib3R0b21sZWZ0OjB9LnRhYmxlLWJvcmRlcmVkIHRmb290K3Rib2R5Omxhc3Qt
Y2hpbGQgdHI6bGFzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkey13ZWJraXQtYm9yZGVyLWJvdHRvbS1y
aWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowOy1tb3otYm9yZGVyLXJh
ZGl1cy1ib3R0b21yaWdodDowfS50YWJsZS1ib3JkZXJlZCBjYXB0aW9uK3RoZWFkIHRyOmZpcnN0
LWNoaWxkIHRoOmZpcnN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCBjYXB0aW9uK3Rib2R5IHRyOmZp
cnN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCBjb2xncm91cCt0aGVhZCB0
cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgY29sZ3JvdXArdGJv
ZHkgdHI6Zmlyc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGR7LXdlYmtpdC1ib3JkZXItdG9wLWxlZnQt
cmFkaXVzOjRweDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXMt
dG9wbGVmdDo0cHh9LnRhYmxlLWJvcmRlcmVkIGNhcHRpb24rdGhlYWQgdHI6Zmlyc3QtY2hpbGQg
dGg6bGFzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgY2FwdGlvbit0Ym9keSB0cjpmaXJzdC1jaGls
ZCB0ZDpsYXN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCBjb2xncm91cCt0aGVhZCB0cjpmaXJzdC1j
aGlsZCB0aDpsYXN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCBjb2xncm91cCt0Ym9keSB0cjpmaXJz
dC1jaGlsZCB0ZDpsYXN0LWNoaWxkey13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NHB4
O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6
NHB4fS50YWJsZS1zdHJpcGVkIHRib2R5PnRyOm50aC1jaGlsZChvZGQpPnRkLC50YWJsZS1zdHJp
cGVkIHRib2R5PnRyOm50aC1jaGlsZChvZGQpPnRoe2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOX0u
dGFibGUtaG92ZXIgdGJvZHkgdHI6aG92ZXIgdGQsLnRhYmxlLWhvdmVyIHRib2R5IHRyOmhvdmVy
IHRoe2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNX10YWJsZSB0ZFtjbGFzcyo9InNwYW4iXSx0YWJs
ZSB0aFtjbGFzcyo9InNwYW4iXSwucm93LWZsdWlkIHRhYmxlIHRkW2NsYXNzKj0ic3BhbiJdLC5y
b3ctZmx1aWQgdGFibGUgdGhbY2xhc3MqPSJzcGFuIl17ZGlzcGxheTp0YWJsZS1jZWxsO2Zsb2F0
Om5vbmU7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGQuc3BhbjEsLnRhYmxlIHRoLnNwYW4xe2Zsb2F0
Om5vbmU7d2lkdGg6NDRweDttYXJnaW4tbGVmdDowfS50YWJsZSB0ZC5zcGFuMiwudGFibGUgdGgu
c3BhbjJ7ZmxvYXQ6bm9uZTt3aWR0aDoxMjRweDttYXJnaW4tbGVmdDowfS50YWJsZSB0ZC5zcGFu
MywudGFibGUgdGguc3BhbjN7ZmxvYXQ6bm9uZTt3aWR0aDoyMDRweDttYXJnaW4tbGVmdDowfS50
YWJsZSB0ZC5zcGFuNCwudGFibGUgdGguc3BhbjR7ZmxvYXQ6bm9uZTt3aWR0aDoyODRweDttYXJn
aW4tbGVmdDowfS50YWJsZSB0ZC5zcGFuNSwudGFibGUgdGguc3BhbjV7ZmxvYXQ6bm9uZTt3aWR0
aDozNjRweDttYXJnaW4tbGVmdDowfS50YWJsZSB0ZC5zcGFuNiwudGFibGUgdGguc3BhbjZ7Zmxv
YXQ6bm9uZTt3aWR0aDo0NDRweDttYXJnaW4tbGVmdDowfS50YWJsZSB0ZC5zcGFuNywudGFibGUg
dGguc3Bhbjd7ZmxvYXQ6bm9uZTt3aWR0aDo1MjRweDttYXJnaW4tbGVmdDowfS50YWJsZSB0ZC5z
cGFuOCwudGFibGUgdGguc3Bhbjh7ZmxvYXQ6bm9uZTt3aWR0aDo2MDRweDttYXJnaW4tbGVmdDow
fS50YWJsZSB0ZC5zcGFuOSwudGFibGUgdGguc3Bhbjl7ZmxvYXQ6bm9uZTt3aWR0aDo2ODRweDtt
YXJnaW4tbGVmdDowfS50YWJsZSB0ZC5zcGFuMTAsLnRhYmxlIHRoLnNwYW4xMHtmbG9hdDpub25l
O3dpZHRoOjc2NHB4O21hcmdpbi1sZWZ0OjB9LnRhYmxlIHRkLnNwYW4xMSwudGFibGUgdGguc3Bh
bjExe2Zsb2F0Om5vbmU7d2lkdGg6ODQ0cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGQuc3BhbjEy
LC50YWJsZSB0aC5zcGFuMTJ7ZmxvYXQ6bm9uZTt3aWR0aDo5MjRweDttYXJnaW4tbGVmdDowfS50
YWJsZSB0Ym9keSB0ci5zdWNjZXNzIHRke2JhY2tncm91bmQtY29sb3I6I2RmZjBkOH0udGFibGUg
dGJvZHkgdHIuZXJyb3IgdGR7YmFja2dyb3VuZC1jb2xvcjojZjJkZWRlfS50YWJsZSB0Ym9keSB0
ci53YXJuaW5nIHRke2JhY2tncm91bmQtY29sb3I6I2ZjZjhlM30udGFibGUgdGJvZHkgdHIuaW5m
byB0ZHtiYWNrZ3JvdW5kLWNvbG9yOiNkOWVkZjd9LnRhYmxlLWhvdmVyIHRib2R5IHRyLnN1Y2Nl
c3M6aG92ZXIgdGR7YmFja2dyb3VuZC1jb2xvcjojZDBlOWM2fS50YWJsZS1ob3ZlciB0Ym9keSB0
ci5lcnJvcjpob3ZlciB0ZHtiYWNrZ3JvdW5kLWNvbG9yOiNlYmNjY2N9LnRhYmxlLWhvdmVyIHRi
b2R5IHRyLndhcm5pbmc6aG92ZXIgdGR7YmFja2dyb3VuZC1jb2xvcjojZmFmMmNjfS50YWJsZS1o
b3ZlciB0Ym9keSB0ci5pbmZvOmhvdmVyIHRke2JhY2tncm91bmQtY29sb3I6I2M0ZTNmM31bY2xh
c3NePSJpY29uLSJdLFtjbGFzcyo9IiBpY29uLSJde2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRo
OjE0cHg7aGVpZ2h0OjE0cHg7bWFyZ2luLXRvcDoxcHg7Km1hcmdpbi1yaWdodDouM2VtO2xpbmUt
aGVpZ2h0OjE0cHg7dmVydGljYWwtYWxpZ246dGV4dC10b3A7YmFja2dyb3VuZC1pbWFnZTp1cmwo
Ii4uL2ltZy9nbHlwaGljb25zLWhhbGZsaW5ncy5wbmciKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjE0
cHggMTRweDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXR9Lmljb24td2hpdGUsLm5hdi1waWxs
cz4uYWN0aXZlPmE+W2NsYXNzXj0iaWNvbi0iXSwubmF2LXBpbGxzPi5hY3RpdmU+YT5bY2xhc3Mq
PSIgaWNvbi0iXSwubmF2LWxpc3Q+LmFjdGl2ZT5hPltjbGFzc149Imljb24tIl0sLm5hdi1saXN0
Pi5hY3RpdmU+YT5bY2xhc3MqPSIgaWNvbi0iXSwubmF2YmFyLWludmVyc2UgLm5hdj4uYWN0aXZl
PmE+W2NsYXNzXj0iaWNvbi0iXSwubmF2YmFyLWludmVyc2UgLm5hdj4uYWN0aXZlPmE+W2NsYXNz
Kj0iIGljb24tIl0sLmRyb3Bkb3duLW1lbnU+bGk+YTpob3Zlcj5bY2xhc3NePSJpY29uLSJdLC5k
cm9wZG93bi1tZW51PmxpPmE6aG92ZXI+W2NsYXNzKj0iIGljb24tIl0sLmRyb3Bkb3duLW1lbnU+
LmFjdGl2ZT5hPltjbGFzc149Imljb24tIl0sLmRyb3Bkb3duLW1lbnU+LmFjdGl2ZT5hPltjbGFz
cyo9IiBpY29uLSJdLC5kcm9wZG93bi1zdWJtZW51OmhvdmVyPmE+W2NsYXNzXj0iaWNvbi0iXSwu
ZHJvcGRvd24tc3VibWVudTpob3Zlcj5hPltjbGFzcyo9IiBpY29uLSJde2JhY2tncm91bmQtaW1h
Z2U6dXJsKCIuLi9pbWcvZ2x5cGhpY29ucy1oYWxmbGluZ3Mtd2hpdGUucG5nIil9Lmljb24tZ2xh
c3N7YmFja2dyb3VuZC1wb3NpdGlvbjowIDB9Lmljb24tbXVzaWN7YmFja2dyb3VuZC1wb3NpdGlv
bjotMjRweCAwfS5pY29uLXNlYXJjaHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IDB9Lmljb24t
ZW52ZWxvcGV7YmFja2dyb3VuZC1wb3NpdGlvbjotNzJweCAwfS5pY29uLWhlYXJ0e2JhY2tncm91
bmQtcG9zaXRpb246LTk2cHggMH0uaWNvbi1zdGFye2JhY2tncm91bmQtcG9zaXRpb246LTEyMHB4
IDB9Lmljb24tc3Rhci1lbXB0eXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAwfS5pY29uLXVz
ZXJ7YmFja2dyb3VuZC1wb3NpdGlvbjotMTY4cHggMH0uaWNvbi1maWxte2JhY2tncm91bmQtcG9z
aXRpb246LTE5MnB4IDB9Lmljb24tdGgtbGFyZ2V7YmFja2dyb3VuZC1wb3NpdGlvbjotMjE2cHgg
MH0uaWNvbi10aHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAwfS5pY29uLXRoLWxpc3R7YmFj
a2dyb3VuZC1wb3NpdGlvbjotMjY0cHggMH0uaWNvbi1va3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0y
ODhweCAwfS5pY29uLXJlbW92ZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMTJweCAwfS5pY29uLXpv
b20taW57YmFja2dyb3VuZC1wb3NpdGlvbjotMzM2cHggMH0uaWNvbi16b29tLW91dHtiYWNrZ3Jv
dW5kLXBvc2l0aW9uOi0zNjBweCAwfS5pY29uLW9mZntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zODRw
eCAwfS5pY29uLXNpZ25hbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MDhweCAwfS5pY29uLWNvZ3ti
YWNrZ3JvdW5kLXBvc2l0aW9uOi00MzJweCAwfS5pY29uLXRyYXNoe2JhY2tncm91bmQtcG9zaXRp
b246LTQ1NnB4IDB9Lmljb24taG9tZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTI0cHh9Lmljb24t
ZmlsZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNHB4IC0yNHB4fS5pY29uLXRpbWV7YmFja2dyb3Vu
ZC1wb3NpdGlvbjotNDhweCAtMjRweH0uaWNvbi1yb2Fke2JhY2tncm91bmQtcG9zaXRpb246LTcy
cHggLTI0cHh9Lmljb24tZG93bmxvYWQtYWx0e2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTI0
cHh9Lmljb24tZG93bmxvYWR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTIwcHggLTI0cHh9Lmljb24t
dXBsb2Fke2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC0yNHB4fS5pY29uLWluYm94e2JhY2tn
cm91bmQtcG9zaXRpb246LTE2OHB4IC0yNHB4fS5pY29uLXBsYXktY2lyY2xle2JhY2tncm91bmQt
cG9zaXRpb246LTE5MnB4IC0yNHB4fS5pY29uLXJlcGVhdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0y
MTZweCAtMjRweH0uaWNvbi1yZWZyZXNoe2JhY2tncm91bmQtcG9zaXRpb246LTI0MHB4IC0yNHB4
fS5pY29uLWxpc3QtYWx0e2JhY2tncm91bmQtcG9zaXRpb246LTI2NHB4IC0yNHB4fS5pY29uLWxv
Y2t7YmFja2dyb3VuZC1wb3NpdGlvbjotMjg3cHggLTI0cHh9Lmljb24tZmxhZ3tiYWNrZ3JvdW5k
LXBvc2l0aW9uOi0zMTJweCAtMjRweH0uaWNvbi1oZWFkcGhvbmVze2JhY2tncm91bmQtcG9zaXRp
b246LTMzNnB4IC0yNHB4fS5pY29uLXZvbHVtZS1vZmZ7YmFja2dyb3VuZC1wb3NpdGlvbjotMzYw
cHggLTI0cHh9Lmljb24tdm9sdW1lLWRvd257YmFja2dyb3VuZC1wb3NpdGlvbjotMzg0cHggLTI0
cHh9Lmljb24tdm9sdW1lLXVwe2JhY2tncm91bmQtcG9zaXRpb246LTQwOHB4IC0yNHB4fS5pY29u
LXFyY29kZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MzJweCAtMjRweH0uaWNvbi1iYXJjb2Rle2Jh
Y2tncm91bmQtcG9zaXRpb246LTQ1NnB4IC0yNHB4fS5pY29uLXRhZ3tiYWNrZ3JvdW5kLXBvc2l0
aW9uOjAgLTQ4cHh9Lmljb24tdGFnc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNXB4IC00OHB4fS5p
Y29uLWJvb2t7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtNDhweH0uaWNvbi1ib29rbWFya3ti
YWNrZ3JvdW5kLXBvc2l0aW9uOi03MnB4IC00OHB4fS5pY29uLXByaW50e2JhY2tncm91bmQtcG9z
aXRpb246LTk2cHggLTQ4cHh9Lmljb24tY2FtZXJhe2JhY2tncm91bmQtcG9zaXRpb246LTEyMHB4
IC00OHB4fS5pY29uLWZvbnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTQ4cHh9Lmljb24t
Ym9sZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjdweCAtNDhweH0uaWNvbi1pdGFsaWN7YmFja2dy
b3VuZC1wb3NpdGlvbjotMTkycHggLTQ4cHh9Lmljb24tdGV4dC1oZWlnaHR7YmFja2dyb3VuZC1w
b3NpdGlvbjotMjE2cHggLTQ4cHh9Lmljb24tdGV4dC13aWR0aHtiYWNrZ3JvdW5kLXBvc2l0aW9u
Oi0yNDBweCAtNDhweH0uaWNvbi1hbGlnbi1sZWZ0e2JhY2tncm91bmQtcG9zaXRpb246LTI2NHB4
IC00OHB4fS5pY29uLWFsaWduLWNlbnRlcntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yODhweCAtNDhw
eH0uaWNvbi1hbGlnbi1yaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMTJweCAtNDhweH0uaWNv
bi1hbGlnbi1qdXN0aWZ5e2JhY2tncm91bmQtcG9zaXRpb246LTMzNnB4IC00OHB4fS5pY29uLWxp
c3R7YmFja2dyb3VuZC1wb3NpdGlvbjotMzYwcHggLTQ4cHh9Lmljb24taW5kZW50LWxlZnR7YmFj
a2dyb3VuZC1wb3NpdGlvbjotMzg0cHggLTQ4cHh9Lmljb24taW5kZW50LXJpZ2h0e2JhY2tncm91
bmQtcG9zaXRpb246LTQwOHB4IC00OHB4fS5pY29uLWZhY2V0aW1lLXZpZGVve2JhY2tncm91bmQt
cG9zaXRpb246LTQzMnB4IC00OHB4fS5pY29uLXBpY3R1cmV7YmFja2dyb3VuZC1wb3NpdGlvbjot
NDU2cHggLTQ4cHh9Lmljb24tcGVuY2lse2JhY2tncm91bmQtcG9zaXRpb246MCAtNzJweH0uaWNv
bi1tYXAtbWFya2Vye2JhY2tncm91bmQtcG9zaXRpb246LTI0cHggLTcycHh9Lmljb24tYWRqdXN0
e2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTcycHh9Lmljb24tdGludHtiYWNrZ3JvdW5kLXBv
c2l0aW9uOi03MnB4IC03MnB4fS5pY29uLWVkaXR7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAt
NzJweH0uaWNvbi1zaGFyZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjBweCAtNzJweH0uaWNvbi1j
aGVja3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtNzJweH0uaWNvbi1tb3Zle2JhY2tncm91
bmQtcG9zaXRpb246LTE2OHB4IC03MnB4fS5pY29uLXN0ZXAtYmFja3dhcmR7YmFja2dyb3VuZC1w
b3NpdGlvbjotMTkycHggLTcycHh9Lmljb24tZmFzdC1iYWNrd2FyZHtiYWNrZ3JvdW5kLXBvc2l0
aW9uOi0yMTZweCAtNzJweH0uaWNvbi1iYWNrd2FyZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBw
eCAtNzJweH0uaWNvbi1wbGF5e2JhY2tncm91bmQtcG9zaXRpb246LTI2NHB4IC03MnB4fS5pY29u
LXBhdXNle2JhY2tncm91bmQtcG9zaXRpb246LTI4OHB4IC03MnB4fS5pY29uLXN0b3B7YmFja2dy
b3VuZC1wb3NpdGlvbjotMzEycHggLTcycHh9Lmljb24tZm9yd2FyZHtiYWNrZ3JvdW5kLXBvc2l0
aW9uOi0zMzZweCAtNzJweH0uaWNvbi1mYXN0LWZvcndhcmR7YmFja2dyb3VuZC1wb3NpdGlvbjot
MzYwcHggLTcycHh9Lmljb24tc3RlcC1mb3J3YXJke2JhY2tncm91bmQtcG9zaXRpb246LTM4NHB4
IC03MnB4fS5pY29uLWVqZWN0e2JhY2tncm91bmQtcG9zaXRpb246LTQwOHB4IC03MnB4fS5pY29u
LWNoZXZyb24tbGVmdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MzJweCAtNzJweH0uaWNvbi1jaGV2
cm9uLXJpZ2h0e2JhY2tncm91bmQtcG9zaXRpb246LTQ1NnB4IC03MnB4fS5pY29uLXBsdXMtc2ln
bntiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTk2cHh9Lmljb24tbWludXMtc2lnbntiYWNrZ3JvdW5k
LXBvc2l0aW9uOi0yNHB4IC05NnB4fS5pY29uLXJlbW92ZS1zaWdue2JhY2tncm91bmQtcG9zaXRp
b246LTQ4cHggLTk2cHh9Lmljb24tb2stc2lnbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi03MnB4IC05
NnB4fS5pY29uLXF1ZXN0aW9uLXNpZ257YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtOTZweH0u
aWNvbi1pbmZvLXNpZ257YmFja2dyb3VuZC1wb3NpdGlvbjotMTIwcHggLTk2cHh9Lmljb24tc2Ny
ZWVuc2hvdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtOTZweH0uaWNvbi1yZW1vdmUtY2ly
Y2xle2JhY2tncm91bmQtcG9zaXRpb246LTE2OHB4IC05NnB4fS5pY29uLW9rLWNpcmNsZXtiYWNr
Z3JvdW5kLXBvc2l0aW9uOi0xOTJweCAtOTZweH0uaWNvbi1iYW4tY2lyY2xle2JhY2tncm91bmQt
cG9zaXRpb246LTIxNnB4IC05NnB4fS5pY29uLWFycm93LWxlZnR7YmFja2dyb3VuZC1wb3NpdGlv
bjotMjQwcHggLTk2cHh9Lmljb24tYXJyb3ctcmlnaHR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjY0
cHggLTk2cHh9Lmljb24tYXJyb3ctdXB7YmFja2dyb3VuZC1wb3NpdGlvbjotMjg5cHggLTk2cHh9
Lmljb24tYXJyb3ctZG93bntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMTJweCAtOTZweH0uaWNvbi1z
aGFyZS1hbHR7YmFja2dyb3VuZC1wb3NpdGlvbjotMzM2cHggLTk2cHh9Lmljb24tcmVzaXplLWZ1
bGx7YmFja2dyb3VuZC1wb3NpdGlvbjotMzYwcHggLTk2cHh9Lmljb24tcmVzaXplLXNtYWxse2Jh
Y2tncm91bmQtcG9zaXRpb246LTM4NHB4IC05NnB4fS5pY29uLXBsdXN7YmFja2dyb3VuZC1wb3Np
dGlvbjotNDA4cHggLTk2cHh9Lmljb24tbWludXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNDMzcHgg
LTk2cHh9Lmljb24tYXN0ZXJpc2t7YmFja2dyb3VuZC1wb3NpdGlvbjotNDU2cHggLTk2cHh9Lmlj
b24tZXhjbGFtYXRpb24tc2lnbntiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTEyMHB4fS5pY29uLWdp
ZnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjRweCAtMTIwcHh9Lmljb24tbGVhZntiYWNrZ3JvdW5k
LXBvc2l0aW9uOi00OHB4IC0xMjBweH0uaWNvbi1maXJle2JhY2tncm91bmQtcG9zaXRpb246LTcy
cHggLTEyMHB4fS5pY29uLWV5ZS1vcGVue2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTEyMHB4
fS5pY29uLWV5ZS1jbG9zZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjBweCAtMTIwcHh9Lmljb24t
d2FybmluZy1zaWdue2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC0xMjBweH0uaWNvbi1wbGFu
ZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjhweCAtMTIwcHh9Lmljb24tY2FsZW5kYXJ7YmFja2dy
b3VuZC1wb3NpdGlvbjotMTkycHggLTEyMHB4fS5pY29uLXJhbmRvbXt3aWR0aDoxNnB4O2JhY2tn
cm91bmQtcG9zaXRpb246LTIxNnB4IC0xMjBweH0uaWNvbi1jb21tZW50e2JhY2tncm91bmQtcG9z
aXRpb246LTI0MHB4IC0xMjBweH0uaWNvbi1tYWduZXR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjY0
cHggLTEyMHB4fS5pY29uLWNoZXZyb24tdXB7YmFja2dyb3VuZC1wb3NpdGlvbjotMjg4cHggLTEy
MHB4fS5pY29uLWNoZXZyb24tZG93bntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMTNweCAtMTE5cHh9
Lmljb24tcmV0d2VldHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMzZweCAtMTIwcHh9Lmljb24tc2hv
cHBpbmctY2FydHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zNjBweCAtMTIwcHh9Lmljb24tZm9sZGVy
LWNsb3Nle2JhY2tncm91bmQtcG9zaXRpb246LTM4NHB4IC0xMjBweH0uaWNvbi1mb2xkZXItb3Bl
bnt3aWR0aDoxNnB4O2JhY2tncm91bmQtcG9zaXRpb246LTQwOHB4IC0xMjBweH0uaWNvbi1yZXNp
emUtdmVydGljYWx7YmFja2dyb3VuZC1wb3NpdGlvbjotNDMycHggLTExOXB4fS5pY29uLXJlc2l6
ZS1ob3Jpem9udGFse2JhY2tncm91bmQtcG9zaXRpb246LTQ1NnB4IC0xMThweH0uaWNvbi1oZGR7
YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xNDRweH0uaWNvbi1idWxsaG9ybntiYWNrZ3JvdW5kLXBv
c2l0aW9uOi0yNHB4IC0xNDRweH0uaWNvbi1iZWxse2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHgg
LTE0NHB4fS5pY29uLWNlcnRpZmljYXRle2JhY2tncm91bmQtcG9zaXRpb246LTcycHggLTE0NHB4
fS5pY29uLXRodW1icy11cHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0xNDRweH0uaWNvbi10
aHVtYnMtZG93bntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjBweCAtMTQ0cHh9Lmljb24taGFuZC1y
aWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMTQ0cHh9Lmljb24taGFuZC1sZWZ0e2Jh
Y2tncm91bmQtcG9zaXRpb246LTE2OHB4IC0xNDRweH0uaWNvbi1oYW5kLXVwe2JhY2tncm91bmQt
cG9zaXRpb246LTE5MnB4IC0xNDRweH0uaWNvbi1oYW5kLWRvd257YmFja2dyb3VuZC1wb3NpdGlv
bjotMjE2cHggLTE0NHB4fS5pY29uLWNpcmNsZS1hcnJvdy1yaWdodHtiYWNrZ3JvdW5kLXBvc2l0
aW9uOi0yNDBweCAtMTQ0cHh9Lmljb24tY2lyY2xlLWFycm93LWxlZnR7YmFja2dyb3VuZC1wb3Np
dGlvbjotMjY0cHggLTE0NHB4fS5pY29uLWNpcmNsZS1hcnJvdy11cHtiYWNrZ3JvdW5kLXBvc2l0
aW9uOi0yODhweCAtMTQ0cHh9Lmljb24tY2lyY2xlLWFycm93LWRvd257YmFja2dyb3VuZC1wb3Np
dGlvbjotMzEycHggLTE0NHB4fS5pY29uLWdsb2Jle2JhY2tncm91bmQtcG9zaXRpb246LTMzNnB4
IC0xNDRweH0uaWNvbi13cmVuY2h7YmFja2dyb3VuZC1wb3NpdGlvbjotMzYwcHggLTE0NHB4fS5p
Y29uLXRhc2tze2JhY2tncm91bmQtcG9zaXRpb246LTM4NHB4IC0xNDRweH0uaWNvbi1maWx0ZXJ7
YmFja2dyb3VuZC1wb3NpdGlvbjotNDA4cHggLTE0NHB4fS5pY29uLWJyaWVmY2FzZXtiYWNrZ3Jv
dW5kLXBvc2l0aW9uOi00MzJweCAtMTQ0cHh9Lmljb24tZnVsbHNjcmVlbntiYWNrZ3JvdW5kLXBv
c2l0aW9uOi00NTZweCAtMTQ0cHh9LmRyb3B1cCwuZHJvcGRvd257cG9zaXRpb246cmVsYXRpdmV9
LmRyb3Bkb3duLXRvZ2dsZXsqbWFyZ2luLWJvdHRvbTotM3B4fS5kcm9wZG93bi10b2dnbGU6YWN0
aXZlLC5vcGVuIC5kcm9wZG93bi10b2dnbGV7b3V0bGluZTowfS5jYXJldHtkaXNwbGF5OmlubGlu
ZS1ibG9jazt3aWR0aDowO2hlaWdodDowO3ZlcnRpY2FsLWFsaWduOnRvcDtib3JkZXItdG9wOjRw
eCBzb2xpZCAjMDAwO2JvcmRlci1yaWdodDo0cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWxl
ZnQ6NHB4IHNvbGlkIHRyYW5zcGFyZW50O2NvbnRlbnQ6IiJ9LmRyb3Bkb3duIC5jYXJldHttYXJn
aW4tdG9wOjhweDttYXJnaW4tbGVmdDoycHh9LmRyb3Bkb3duLW1lbnV7cG9zaXRpb246YWJzb2x1
dGU7dG9wOjEwMCU7bGVmdDowO3otaW5kZXg6MTAwMDtkaXNwbGF5Om5vbmU7ZmxvYXQ6bGVmdDtt
aW4td2lkdGg6MTYwcHg7cGFkZGluZzo1cHggMDttYXJnaW46MnB4IDAgMDtsaXN0LXN0eWxlOm5v
bmU7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXI6MXB4
IHNvbGlkIHJnYmEoMCwwLDAsMC4yKTsqYm9yZGVyLXJpZ2h0LXdpZHRoOjJweDsqYm9yZGVyLWJv
dHRvbS13aWR0aDoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjZweDstbW96LWJvcmRlci1yYWRp
dXM6NnB4O2JvcmRlci1yYWRpdXM6NnB4Oy13ZWJraXQtYm94LXNoYWRvdzowIDVweCAxMHB4IHJn
YmEoMCwwLDAsMC4yKTstbW96LWJveC1zaGFkb3c6MCA1cHggMTBweCByZ2JhKDAsMCwwLDAuMik7
Ym94LXNoYWRvdzowIDVweCAxMHB4IHJnYmEoMCwwLDAsMC4yKTstd2Via2l0LWJhY2tncm91bmQt
Y2xpcDpwYWRkaW5nLWJveDstbW96LWJhY2tncm91bmQtY2xpcDpwYWRkaW5nO2JhY2tncm91bmQt
Y2xpcDpwYWRkaW5nLWJveH0uZHJvcGRvd24tbWVudS5wdWxsLXJpZ2h0e3JpZ2h0OjA7bGVmdDph
dXRvfS5kcm9wZG93bi1tZW51IC5kaXZpZGVyeyp3aWR0aDoxMDAlO2hlaWdodDoxcHg7bWFyZ2lu
OjlweCAxcHg7Km1hcmdpbjotNXB4IDAgNXB4O292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kLWNv
bG9yOiNlNWU1ZTU7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ZmZn0uZHJvcGRvd24tbWVudSBs
aT5he2Rpc3BsYXk6YmxvY2s7cGFkZGluZzozcHggMjBweDtjbGVhcjpib3RoO2ZvbnQtd2VpZ2h0
Om5vcm1hbDtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiMzMzM7d2hpdGUtc3BhY2U6bm93cmFwfS5k
cm9wZG93bi1tZW51IGxpPmE6aG92ZXIsLmRyb3Bkb3duLW1lbnUgbGk+YTpmb2N1cywuZHJvcGRv
d24tc3VibWVudTpob3Zlcj5he2NvbG9yOiNmZmY7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dy
b3VuZC1jb2xvcjojMDA4MWMyO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQo
dG9wLCMwOGMsIzAwNzdiMyk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVh
ciwwIDAsMCAxMDAlLGZyb20oIzA4YyksdG8oIzAwNzdiMykpO2JhY2tncm91bmQtaW1hZ2U6LXdl
YmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCMwOGMsIzAwNzdiMyk7YmFja2dyb3VuZC1pbWFnZTot
by1saW5lYXItZ3JhZGllbnQodG9wLCMwOGMsIzAwNzdiMyk7YmFja2dyb3VuZC1pbWFnZTpsaW5l
YXItZ3JhZGllbnQodG8gYm90dG9tLCMwOGMsIzAwNzdiMyk7YmFja2dyb3VuZC1yZXBlYXQ6cmVw
ZWF0LXg7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChz
dGFydENvbG9yc3RyPScjZmYwMDg4Y2MnLGVuZENvbG9yc3RyPScjZmYwMDc3YjMnLEdyYWRpZW50
VHlwZT0wKX0uZHJvcGRvd24tbWVudSAuYWN0aXZlPmEsLmRyb3Bkb3duLW1lbnUgLmFjdGl2ZT5h
OmhvdmVye2NvbG9yOiNmZmY7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZC1jb2xvcjoj
MDA4MWMyO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCMwOGMsIzAw
NzdiMyk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAl
LGZyb20oIzA4YyksdG8oIzAwNzdiMykpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXIt
Z3JhZGllbnQodG9wLCMwOGMsIzAwNzdiMyk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3Jh
ZGllbnQodG9wLCMwOGMsIzAwNzdiMyk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQo
dG8gYm90dG9tLCMwOGMsIzAwNzdiMyk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7b3V0bGlu
ZTowO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3Rh
cnRDb2xvcnN0cj0nI2ZmMDA4OGNjJyxlbmRDb2xvcnN0cj0nI2ZmMDA3N2IzJyxHcmFkaWVudFR5
cGU9MCl9LmRyb3Bkb3duLW1lbnUgLmRpc2FibGVkPmEsLmRyb3Bkb3duLW1lbnUgLmRpc2FibGVk
PmE6aG92ZXJ7Y29sb3I6Izk5OX0uZHJvcGRvd24tbWVudSAuZGlzYWJsZWQ+YTpob3Zlcnt0ZXh0
LWRlY29yYXRpb246bm9uZTtjdXJzb3I6ZGVmYXVsdDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFy
ZW50O2JhY2tncm91bmQtaW1hZ2U6bm9uZTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0u
TWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpfS5vcGVueyp6LWluZGV4OjEwMDB9Lm9w
ZW4+LmRyb3Bkb3duLW1lbnV7ZGlzcGxheTpibG9ja30ucHVsbC1yaWdodD4uZHJvcGRvd24tbWVu
dXtyaWdodDowO2xlZnQ6YXV0b30uZHJvcHVwIC5jYXJldCwubmF2YmFyLWZpeGVkLWJvdHRvbSAu
ZHJvcGRvd24gLmNhcmV0e2JvcmRlci10b3A6MDtib3JkZXItYm90dG9tOjRweCBzb2xpZCAjMDAw
O2NvbnRlbnQ6IiJ9LmRyb3B1cCAuZHJvcGRvd24tbWVudSwubmF2YmFyLWZpeGVkLWJvdHRvbSAu
ZHJvcGRvd24gLmRyb3Bkb3duLW1lbnV7dG9wOmF1dG87Ym90dG9tOjEwMCU7bWFyZ2luLWJvdHRv
bToxcHh9LmRyb3Bkb3duLXN1Ym1lbnV7cG9zaXRpb246cmVsYXRpdmV9LmRyb3Bkb3duLXN1Ym1l
bnU+LmRyb3Bkb3duLW1lbnV7dG9wOjA7bGVmdDoxMDAlO21hcmdpbi10b3A6LTZweDttYXJnaW4t
bGVmdDotMXB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czowIDZweCA2cHggNnB4Oy1tb3otYm9yZGVy
LXJhZGl1czowIDZweCA2cHggNnB4O2JvcmRlci1yYWRpdXM6MCA2cHggNnB4IDZweH0uZHJvcGRv
d24tc3VibWVudTpob3Zlcj4uZHJvcGRvd24tbWVudXtkaXNwbGF5OmJsb2NrfS5kcm9wdXAgLmRy
b3Bkb3duLXN1Ym1lbnU+LmRyb3Bkb3duLW1lbnV7dG9wOmF1dG87Ym90dG9tOjA7bWFyZ2luLXRv
cDowO21hcmdpbi1ib3R0b206LTJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NXB4IDVweCA1cHgg
MDstbW96LWJvcmRlci1yYWRpdXM6NXB4IDVweCA1cHggMDtib3JkZXItcmFkaXVzOjVweCA1cHgg
NXB4IDB9LmRyb3Bkb3duLXN1Ym1lbnU+YTphZnRlcntkaXNwbGF5OmJsb2NrO2Zsb2F0OnJpZ2h0
O3dpZHRoOjA7aGVpZ2h0OjA7bWFyZ2luLXRvcDo1cHg7bWFyZ2luLXJpZ2h0Oi0xMHB4O2JvcmRl
ci1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItbGVmdC1jb2xvcjojY2NjO2JvcmRlci1zdHlsZTpz
b2xpZDtib3JkZXItd2lkdGg6NXB4IDAgNXB4IDVweDtjb250ZW50OiIgIn0uZHJvcGRvd24tc3Vi
bWVudTpob3Zlcj5hOmFmdGVye2JvcmRlci1sZWZ0LWNvbG9yOiNmZmZ9LmRyb3Bkb3duLXN1Ym1l
bnUucHVsbC1sZWZ0e2Zsb2F0Om5vbmV9LmRyb3Bkb3duLXN1Ym1lbnUucHVsbC1sZWZ0Pi5kcm9w
ZG93bi1tZW51e2xlZnQ6LTEwMCU7bWFyZ2luLWxlZnQ6MTBweDstd2Via2l0LWJvcmRlci1yYWRp
dXM6NnB4IDAgNnB4IDZweDstbW96LWJvcmRlci1yYWRpdXM6NnB4IDAgNnB4IDZweDtib3JkZXIt
cmFkaXVzOjZweCAwIDZweCA2cHh9LmRyb3Bkb3duIC5kcm9wZG93bi1tZW51IC5uYXYtaGVhZGVy
e3BhZGRpbmctcmlnaHQ6MjBweDtwYWRkaW5nLWxlZnQ6MjBweH0udHlwZWFoZWFke3otaW5kZXg6
MTA1MTttYXJnaW4tdG9wOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVy
LXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHh9LndlbGx7bWluLWhlaWdodDoyMHB4O3BhZGRp
bmc6MTlweDttYXJnaW4tYm90dG9tOjIwcHg7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1O2JvcmRl
cjoxcHggc29saWQgI2UzZTNlMzstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVy
LXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAg
MXB4IDFweCByZ2JhKDAsMCwwLDAuMDUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHgg
cmdiYSgwLDAsMCwwLjA1KTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAu
MDUpfS53ZWxsIGJsb2NrcXVvdGV7Ym9yZGVyLWNvbG9yOiNkZGQ7Ym9yZGVyLWNvbG9yOnJnYmEo
MCwwLDAsMC4xNSl9LndlbGwtbGFyZ2V7cGFkZGluZzoyNHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1
czo2cHg7LW1vei1ib3JkZXItcmFkaXVzOjZweDtib3JkZXItcmFkaXVzOjZweH0ud2VsbC1zbWFs
bHtwYWRkaW5nOjlweDstd2Via2l0LWJvcmRlci1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1
czozcHg7Ym9yZGVyLXJhZGl1czozcHh9LmZhZGV7b3BhY2l0eTowOy13ZWJraXQtdHJhbnNpdGlv
bjpvcGFjaXR5IC4xNXMgbGluZWFyOy1tb3otdHJhbnNpdGlvbjpvcGFjaXR5IC4xNXMgbGluZWFy
Oy1vLXRyYW5zaXRpb246b3BhY2l0eSAuMTVzIGxpbmVhcjt0cmFuc2l0aW9uOm9wYWNpdHkgLjE1
cyBsaW5lYXJ9LmZhZGUuaW57b3BhY2l0eToxfS5jb2xsYXBzZXtwb3NpdGlvbjpyZWxhdGl2ZTto
ZWlnaHQ6MDtvdmVyZmxvdzpoaWRkZW47LXdlYmtpdC10cmFuc2l0aW9uOmhlaWdodCAuMzVzIGVh
c2U7LW1vei10cmFuc2l0aW9uOmhlaWdodCAuMzVzIGVhc2U7LW8tdHJhbnNpdGlvbjpoZWlnaHQg
LjM1cyBlYXNlO3RyYW5zaXRpb246aGVpZ2h0IC4zNXMgZWFzZX0uY29sbGFwc2UuaW57aGVpZ2h0
OmF1dG99LmNsb3Nle2Zsb2F0OnJpZ2h0O2ZvbnQtc2l6ZToyMHB4O2ZvbnQtd2VpZ2h0OmJvbGQ7
bGluZS1oZWlnaHQ6MjBweDtjb2xvcjojMDAwO3RleHQtc2hhZG93OjAgMXB4IDAgI2ZmZjtvcGFj
aXR5Oi4yO2ZpbHRlcjphbHBoYShvcGFjaXR5PTIwKX0uY2xvc2U6aG92ZXJ7Y29sb3I6IzAwMDt0
ZXh0LWRlY29yYXRpb246bm9uZTtjdXJzb3I6cG9pbnRlcjtvcGFjaXR5Oi40O2ZpbHRlcjphbHBo
YShvcGFjaXR5PTQwKX1idXR0b24uY2xvc2V7cGFkZGluZzowO2N1cnNvcjpwb2ludGVyO2JhY2tn
cm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9LmJ0bntk
aXNwbGF5OmlubGluZS1ibG9jazsqZGlzcGxheTppbmxpbmU7cGFkZGluZzo0cHggMTJweDttYXJn
aW4tYm90dG9tOjA7Km1hcmdpbi1sZWZ0Oi4zZW07Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6
MjBweDtjb2xvcjojMzMzO3RleHQtYWxpZ246Y2VudGVyO3RleHQtc2hhZG93OjAgMXB4IDFweCBy
Z2JhKDI1NSwyNTUsMjU1LDAuNzUpO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtjdXJzb3I6cG9pbnRl
cjtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjU7KmJhY2tncm91bmQtY29sb3I6I2U2ZTZlNjtiYWNr
Z3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjZmZmLCNlNmU2ZTYpO2JhY2tn
cm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCNmZmYp
LHRvKCNlNmU2ZTYpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRv
cCwjZmZmLCNlNmU2ZTYpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwj
ZmZmLCNlNmU2ZTYpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwj
ZmZmLCNlNmU2ZTYpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2JvcmRlcjoxcHggc29saWQg
I2JiYjsqYm9yZGVyOjA7Ym9yZGVyLWNvbG9yOiNlNmU2ZTYgI2U2ZTZlNiAjYmZiZmJmO2JvcmRl
ci1jb2xvcjpyZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4yNSk7
Ym9yZGVyLWJvdHRvbS1jb2xvcjojYTJhMmEyOy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1v
ei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweDtmaWx0ZXI6cHJvZ2lkOkRYSW1h
Z2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZmZmZmZmZics
ZW5kQ29sb3JzdHI9JyNmZmU2ZTZlNicsR3JhZGllbnRUeXBlPTApO2ZpbHRlcjpwcm9naWQ6RFhJ
bWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZD1mYWxzZSk7Knpvb206MTst
d2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMiksMCAx
cHggMnB4IHJnYmEoMCwwLDAsMC4wNSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDAgcmdi
YSgyNTUsMjU1LDI1NSwwLjIpLDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpO2JveC1zaGFkb3c6
aW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMiksMCAxcHggMnB4IHJnYmEoMCwwLDAs
MC4wNSl9LmJ0bjpob3ZlciwuYnRuOmFjdGl2ZSwuYnRuLmFjdGl2ZSwuYnRuLmRpc2FibGVkLC5i
dG5bZGlzYWJsZWRde2NvbG9yOiMzMzM7YmFja2dyb3VuZC1jb2xvcjojZTZlNmU2OypiYWNrZ3Jv
dW5kLWNvbG9yOiNkOWQ5ZDl9LmJ0bjphY3RpdmUsLmJ0bi5hY3RpdmV7YmFja2dyb3VuZC1jb2xv
cjojY2NjIFw5fS5idG46Zmlyc3QtY2hpbGR7Km1hcmdpbi1sZWZ0OjB9LmJ0bjpob3Zlcntjb2xv
cjojMzMzO3RleHQtZGVjb3JhdGlvbjpub25lO2JhY2tncm91bmQtcG9zaXRpb246MCAtMTVweDst
d2Via2l0LXRyYW5zaXRpb246YmFja2dyb3VuZC1wb3NpdGlvbiAuMXMgbGluZWFyOy1tb3otdHJh
bnNpdGlvbjpiYWNrZ3JvdW5kLXBvc2l0aW9uIC4xcyBsaW5lYXI7LW8tdHJhbnNpdGlvbjpiYWNr
Z3JvdW5kLXBvc2l0aW9uIC4xcyBsaW5lYXI7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXBvc2l0aW9u
IC4xcyBsaW5lYXJ9LmJ0bjpmb2N1c3tvdXRsaW5lOnRoaW4gZG90dGVkICMzMzM7b3V0bGluZTo1
cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1vZmZzZXQ6LTJweH0uYnRu
LmFjdGl2ZSwuYnRuOmFjdGl2ZXtiYWNrZ3JvdW5kLWltYWdlOm5vbmU7b3V0bGluZTowOy13ZWJr
aXQtYm94LXNoYWRvdzppbnNldCAwIDJweCA0cHggcmdiYSgwLDAsMCwwLjE1KSwwIDFweCAycHgg
cmdiYSgwLDAsMCwwLjA1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAycHggNHB4IHJnYmEoMCww
LDAsMC4xNSksMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSk7Ym94LXNoYWRvdzppbnNldCAwIDJw
eCA0cHggcmdiYSgwLDAsMCwwLjE1KSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KX0uYnRuLmRp
c2FibGVkLC5idG5bZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0O2JhY2tncm91bmQtaW1hZ2U6bm9u
ZTtvcGFjaXR5Oi42NTtmaWx0ZXI6YWxwaGEob3BhY2l0eT02NSk7LXdlYmtpdC1ib3gtc2hhZG93
Om5vbmU7LW1vei1ib3gtc2hhZG93Om5vbmU7Ym94LXNoYWRvdzpub25lfS5idG4tbGFyZ2V7cGFk
ZGluZzoxMXB4IDE5cHg7Zm9udC1zaXplOjE3LjVweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NnB4
Oy1tb3otYm9yZGVyLXJhZGl1czo2cHg7Ym9yZGVyLXJhZGl1czo2cHh9LmJ0bi1sYXJnZSBbY2xh
c3NePSJpY29uLSJdLC5idG4tbGFyZ2UgW2NsYXNzKj0iIGljb24tIl17bWFyZ2luLXRvcDo0cHh9
LmJ0bi1zbWFsbHtwYWRkaW5nOjJweCAxMHB4O2ZvbnQtc2l6ZToxMS45cHg7LXdlYmtpdC1ib3Jk
ZXItcmFkaXVzOjNweDstbW96LWJvcmRlci1yYWRpdXM6M3B4O2JvcmRlci1yYWRpdXM6M3B4fS5i
dG4tc21hbGwgW2NsYXNzXj0iaWNvbi0iXSwuYnRuLXNtYWxsIFtjbGFzcyo9IiBpY29uLSJde21h
cmdpbi10b3A6MH0uYnRuLW1pbmkgW2NsYXNzXj0iaWNvbi0iXSwuYnRuLW1pbmkgW2NsYXNzKj0i
IGljb24tIl17bWFyZ2luLXRvcDotMXB4fS5idG4tbWluaXtwYWRkaW5nOjAgNnB4O2ZvbnQtc2l6
ZToxMC41cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjNweDstbW96LWJvcmRlci1yYWRpdXM6M3B4
O2JvcmRlci1yYWRpdXM6M3B4fS5idG4tYmxvY2t7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO3Bh
ZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJv
eDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmJ0bi1i
bG9jaysuYnRuLWJsb2Nre21hcmdpbi10b3A6NXB4fWlucHV0W3R5cGU9InN1Ym1pdCJdLmJ0bi1i
bG9jayxpbnB1dFt0eXBlPSJyZXNldCJdLmJ0bi1ibG9jayxpbnB1dFt0eXBlPSJidXR0b24iXS5i
dG4tYmxvY2t7d2lkdGg6MTAwJX0uYnRuLXByaW1hcnkuYWN0aXZlLC5idG4td2FybmluZy5hY3Rp
dmUsLmJ0bi1kYW5nZXIuYWN0aXZlLC5idG4tc3VjY2Vzcy5hY3RpdmUsLmJ0bi1pbmZvLmFjdGl2
ZSwuYnRuLWludmVyc2UuYWN0aXZle2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsMC43NSl9LmJ0bnti
b3JkZXItY29sb3I6I2M1YzVjNTtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwLjE1KSByZ2JhKDAs
MCwwLDAuMTUpIHJnYmEoMCwwLDAsMC4yNSl9LmJ0bi1wcmltYXJ5e2NvbG9yOiNmZmY7dGV4dC1z
aGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjI1KTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDZkY2M7
KmJhY2tncm91bmQtY29sb3I6IzA0YztiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRp
ZW50KHRvcCwjMDhjLCMwNGMpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5l
YXIsMCAwLDAgMTAwJSxmcm9tKCMwOGMpLHRvKCMwNGMpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJr
aXQtbGluZWFyLWdyYWRpZW50KHRvcCwjMDhjLCMwNGMpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGlu
ZWFyLWdyYWRpZW50KHRvcCwjMDhjLCMwNGMpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRp
ZW50KHRvIGJvdHRvbSwjMDhjLCMwNGMpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2JvcmRl
ci1jb2xvcjojMDRjICMwNGMgIzAwMmE4MDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwLjEpIHJn
YmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMjUpO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5z
Zm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmMDA4OGNjJyxlbmRDb2xv
cnN0cj0nI2ZmMDA0NGNjJyxHcmFkaWVudFR5cGU9MCk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJh
bnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkPWZhbHNlKX0uYnRuLXByaW1hcnk6aG92
ZXIsLmJ0bi1wcmltYXJ5OmFjdGl2ZSwuYnRuLXByaW1hcnkuYWN0aXZlLC5idG4tcHJpbWFyeS5k
aXNhYmxlZCwuYnRuLXByaW1hcnlbZGlzYWJsZWRde2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xv
cjojMDRjOypiYWNrZ3JvdW5kLWNvbG9yOiMwMDNiYjN9LmJ0bi1wcmltYXJ5OmFjdGl2ZSwuYnRu
LXByaW1hcnkuYWN0aXZle2JhY2tncm91bmQtY29sb3I6IzAzOSBcOX0uYnRuLXdhcm5pbmd7Y29s
b3I6I2ZmZjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpO2JhY2tncm91bmQt
Y29sb3I6I2ZhYTczMjsqYmFja2dyb3VuZC1jb2xvcjojZjg5NDA2O2JhY2tncm91bmQtaW1hZ2U6
LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCNmYmI0NTAsI2Y4OTQwNik7YmFja2dyb3VuZC1pbWFn
ZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oI2ZiYjQ1MCksdG8oI2Y4
OTQwNikpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCNmYmI0
NTAsI2Y4OTQwNik7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCNmYmI0
NTAsI2Y4OTQwNik7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCNm
YmI0NTAsI2Y4OTQwNik7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyLWNvbG9yOiNm
ODk0MDYgI2Y4OTQwNiAjYWQ2NzA0O2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDAuMSkgcmdiYSgw
LDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4yNSk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3Jt
Lk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZmYmI0NTAnLGVuZENvbG9yc3Ry
PScjZmZmODk0MDYnLEdyYWRpZW50VHlwZT0wKTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zv
cm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpfS5idG4td2FybmluZzpob3Zlciwu
YnRuLXdhcm5pbmc6YWN0aXZlLC5idG4td2FybmluZy5hY3RpdmUsLmJ0bi13YXJuaW5nLmRpc2Fi
bGVkLC5idG4td2FybmluZ1tkaXNhYmxlZF17Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiNm
ODk0MDY7KmJhY2tncm91bmQtY29sb3I6I2RmODUwNX0uYnRuLXdhcm5pbmc6YWN0aXZlLC5idG4t
d2FybmluZy5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojYzY3NjA1IFw5fS5idG4tZGFuZ2Vye2Nv
bG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjI1KTtiYWNrZ3JvdW5k
LWNvbG9yOiNkYTRmNDk7KmJhY2tncm91bmQtY29sb3I6I2JkMzYyZjtiYWNrZ3JvdW5kLWltYWdl
Oi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjZWU1ZjViLCNiZDM2MmYpO2JhY2tncm91bmQtaW1h
Z2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCNlZTVmNWIpLHRvKCNi
ZDM2MmYpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjZWU1
ZjViLCNiZDM2MmYpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjZWU1
ZjViLCNiZDM2MmYpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwj
ZWU1ZjViLCNiZDM2MmYpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2JvcmRlci1jb2xvcjoj
YmQzNjJmICNiZDM2MmYgIzgwMjQyMDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwLjEpIHJnYmEo
MCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMjUpO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9y
bS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmZWU1ZjViJyxlbmRDb2xvcnN0
cj0nI2ZmYmQzNjJmJyxHcmFkaWVudFR5cGU9MCk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNm
b3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkPWZhbHNlKX0uYnRuLWRhbmdlcjpob3Zlciwu
YnRuLWRhbmdlcjphY3RpdmUsLmJ0bi1kYW5nZXIuYWN0aXZlLC5idG4tZGFuZ2VyLmRpc2FibGVk
LC5idG4tZGFuZ2VyW2Rpc2FibGVkXXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6I2JkMzYy
ZjsqYmFja2dyb3VuZC1jb2xvcjojYTkzMDJhfS5idG4tZGFuZ2VyOmFjdGl2ZSwuYnRuLWRhbmdl
ci5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojOTQyYTI1IFw5fS5idG4tc3VjY2Vzc3tjb2xvcjoj
ZmZmO3RleHQtc2hhZG93OjAgLTFweCAwIHJnYmEoMCwwLDAsMC4yNSk7YmFja2dyb3VuZC1jb2xv
cjojNWJiNzViOypiYWNrZ3JvdW5kLWNvbG9yOiM1MWEzNTE7YmFja2dyb3VuZC1pbWFnZTotbW96
LWxpbmVhci1ncmFkaWVudCh0b3AsIzYyYzQ2MiwjNTFhMzUxKTtiYWNrZ3JvdW5kLWltYWdlOi13
ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjNjJjNDYyKSx0bygjNTFhMzUx
KSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsIzYyYzQ2Miwj
NTFhMzUxKTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsIzYyYzQ2Miwj
NTFhMzUxKTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIzYyYzQ2
MiwjNTFhMzUxKTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtib3JkZXItY29sb3I6IzUxYTM1
MSAjNTFhMzUxICMzODcwMzg7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCww
LDAuMSkgcmdiYSgwLDAsMCwwLjI1KTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWlj
cm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZjYyYzQ2MicsZW5kQ29sb3JzdHI9JyNm
ZjUxYTM1MScsR3JhZGllbnRUeXBlPTApO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5N
aWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZD1mYWxzZSl9LmJ0bi1zdWNjZXNzOmhvdmVyLC5idG4t
c3VjY2VzczphY3RpdmUsLmJ0bi1zdWNjZXNzLmFjdGl2ZSwuYnRuLXN1Y2Nlc3MuZGlzYWJsZWQs
LmJ0bi1zdWNjZXNzW2Rpc2FibGVkXXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzUxYTM1
MTsqYmFja2dyb3VuZC1jb2xvcjojNDk5MjQ5fS5idG4tc3VjY2VzczphY3RpdmUsLmJ0bi1zdWNj
ZXNzLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiM0MDgxNDAgXDl9LmJ0bi1pbmZve2NvbG9yOiNm
ZmY7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjI1KTtiYWNrZ3JvdW5kLWNvbG9y
OiM0OWFmY2Q7KmJhY2tncm91bmQtY29sb3I6IzJmOTZiNDtiYWNrZ3JvdW5kLWltYWdlOi1tb3ot
bGluZWFyLWdyYWRpZW50KHRvcCwjNWJjMGRlLCMyZjk2YjQpO2JhY2tncm91bmQtaW1hZ2U6LXdl
YmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCM1YmMwZGUpLHRvKCMyZjk2YjQp
KTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjNWJjMGRlLCMy
Zjk2YjQpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjNWJjMGRlLCMy
Zjk2YjQpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjNWJjMGRl
LCMyZjk2YjQpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2JvcmRlci1jb2xvcjojMmY5NmI0
ICMyZjk2YjQgIzFmNjM3Nztib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAs
MC4xKSByZ2JhKDAsMCwwLDAuMjUpO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNy
b3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmNWJjMGRlJyxlbmRDb2xvcnN0cj0nI2Zm
MmY5NmI0JyxHcmFkaWVudFR5cGU9MCk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1p
Y3Jvc29mdC5ncmFkaWVudChlbmFibGVkPWZhbHNlKX0uYnRuLWluZm86aG92ZXIsLmJ0bi1pbmZv
OmFjdGl2ZSwuYnRuLWluZm8uYWN0aXZlLC5idG4taW5mby5kaXNhYmxlZCwuYnRuLWluZm9bZGlz
YWJsZWRde2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMmY5NmI0OypiYWNrZ3JvdW5kLWNv
bG9yOiMyYTg1YTB9LmJ0bi1pbmZvOmFjdGl2ZSwuYnRuLWluZm8uYWN0aXZle2JhY2tncm91bmQt
Y29sb3I6IzI0NzQ4YyBcOX0uYnRuLWludmVyc2V7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIC0x
cHggMCByZ2JhKDAsMCwwLDAuMjUpO2JhY2tncm91bmQtY29sb3I6IzM2MzYzNjsqYmFja2dyb3Vu
ZC1jb2xvcjojMjIyO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCM0
NDQsIzIyMik7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAx
MDAlLGZyb20oIzQ0NCksdG8oIzIyMikpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXIt
Z3JhZGllbnQodG9wLCM0NDQsIzIyMik7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGll
bnQodG9wLCM0NDQsIzIyMik7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90
dG9tLCM0NDQsIzIyMik7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyLWNvbG9yOiMy
MjIgIzIyMiAjMDAwO2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjEp
IHJnYmEoMCwwLDAsMC4yNSk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29m
dC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmY0NDQ0NDQnLGVuZENvbG9yc3RyPScjZmYyMjIy
MjInLEdyYWRpZW50VHlwZT0wKTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9z
b2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpfS5idG4taW52ZXJzZTpob3ZlciwuYnRuLWludmVy
c2U6YWN0aXZlLC5idG4taW52ZXJzZS5hY3RpdmUsLmJ0bi1pbnZlcnNlLmRpc2FibGVkLC5idG4t
aW52ZXJzZVtkaXNhYmxlZF17Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMyMjI7KmJhY2tn
cm91bmQtY29sb3I6IzE1MTUxNX0uYnRuLWludmVyc2U6YWN0aXZlLC5idG4taW52ZXJzZS5hY3Rp
dmV7YmFja2dyb3VuZC1jb2xvcjojMDgwODA4IFw5fWJ1dHRvbi5idG4saW5wdXRbdHlwZT0ic3Vi
bWl0Il0uYnRueypwYWRkaW5nLXRvcDozcHg7KnBhZGRpbmctYm90dG9tOjNweH1idXR0b24uYnRu
OjotbW96LWZvY3VzLWlubmVyLGlucHV0W3R5cGU9InN1Ym1pdCJdLmJ0bjo6LW1vei1mb2N1cy1p
bm5lcntwYWRkaW5nOjA7Ym9yZGVyOjB9YnV0dG9uLmJ0bi5idG4tbGFyZ2UsaW5wdXRbdHlwZT0i
c3VibWl0Il0uYnRuLmJ0bi1sYXJnZXsqcGFkZGluZy10b3A6N3B4OypwYWRkaW5nLWJvdHRvbTo3
cHh9YnV0dG9uLmJ0bi5idG4tc21hbGwsaW5wdXRbdHlwZT0ic3VibWl0Il0uYnRuLmJ0bi1zbWFs
bHsqcGFkZGluZy10b3A6M3B4OypwYWRkaW5nLWJvdHRvbTozcHh9YnV0dG9uLmJ0bi5idG4tbWlu
aSxpbnB1dFt0eXBlPSJzdWJtaXQiXS5idG4uYnRuLW1pbml7KnBhZGRpbmctdG9wOjFweDsqcGFk
ZGluZy1ib3R0b206MXB4fS5idG4tbGluaywuYnRuLWxpbms6YWN0aXZlLC5idG4tbGlua1tkaXNh
YmxlZF17YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLWltYWdlOm5vbmU7
LXdlYmtpdC1ib3gtc2hhZG93Om5vbmU7LW1vei1ib3gtc2hhZG93Om5vbmU7Ym94LXNoYWRvdzpu
b25lfS5idG4tbGlua3tjb2xvcjojMDhjO2N1cnNvcjpwb2ludGVyO2JvcmRlci1jb2xvcjp0cmFu
c3BhcmVudDstd2Via2l0LWJvcmRlci1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXM6MDtib3Jk
ZXItcmFkaXVzOjB9LmJ0bi1saW5rOmhvdmVye2NvbG9yOiMwMDU1ODA7dGV4dC1kZWNvcmF0aW9u
OnVuZGVybGluZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5idG4tbGlua1tkaXNhYmxl
ZF06aG92ZXJ7Y29sb3I6IzMzMzt0ZXh0LWRlY29yYXRpb246bm9uZX0uYnRuLWdyb3Vwe3Bvc2l0
aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrOypkaXNwbGF5OmlubGluZTsqbWFyZ2lu
LWxlZnQ6LjNlbTtmb250LXNpemU6MDt3aGl0ZS1zcGFjZTpub3dyYXA7dmVydGljYWwtYWxpZ246
bWlkZGxlOyp6b29tOjF9LmJ0bi1ncm91cDpmaXJzdC1jaGlsZHsqbWFyZ2luLWxlZnQ6MH0uYnRu
LWdyb3VwKy5idG4tZ3JvdXB7bWFyZ2luLWxlZnQ6NXB4fS5idG4tdG9vbGJhcnttYXJnaW4tdG9w
OjEwcHg7bWFyZ2luLWJvdHRvbToxMHB4O2ZvbnQtc2l6ZTowfS5idG4tdG9vbGJhcj4uYnRuKy5i
dG4sLmJ0bi10b29sYmFyPi5idG4tZ3JvdXArLmJ0biwuYnRuLXRvb2xiYXI+LmJ0bisuYnRuLWdy
b3Vwe21hcmdpbi1sZWZ0OjVweH0uYnRuLWdyb3VwPi5idG57cG9zaXRpb246cmVsYXRpdmU7LXdl
YmtpdC1ib3JkZXItcmFkaXVzOjA7LW1vei1ib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXJhZGl1czow
fS5idG4tZ3JvdXA+LmJ0bisuYnRue21hcmdpbi1sZWZ0Oi0xcHh9LmJ0bi1ncm91cD4uYnRuLC5i
dG4tZ3JvdXA+LmRyb3Bkb3duLW1lbnUsLmJ0bi1ncm91cD4ucG9wb3Zlcntmb250LXNpemU6MTRw
eH0uYnRuLWdyb3VwPi5idG4tbWluaXtmb250LXNpemU6MTAuNXB4fS5idG4tZ3JvdXA+LmJ0bi1z
bWFsbHtmb250LXNpemU6MTEuOXB4fS5idG4tZ3JvdXA+LmJ0bi1sYXJnZXtmb250LXNpemU6MTcu
NXB4fS5idG4tZ3JvdXA+LmJ0bjpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDowOy13ZWJraXQtYm9y
ZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo0cHg7
LXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOjRweDtib3JkZXItdG9wLWxlZnQtcmFkaXVz
OjRweDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDo0cHg7LW1vei1ib3JkZXItcmFkaXVz
LXRvcGxlZnQ6NHB4fS5idG4tZ3JvdXA+LmJ0bjpsYXN0LWNoaWxkLC5idG4tZ3JvdXA+LmRyb3Bk
b3duLXRvZ2dsZXstd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweDtib3JkZXItdG9w
LXJpZ2h0LXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo0cHg7
Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdo
dDo0cHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0OjRweH0uYnRuLWdyb3VwPi5idG4u
bGFyZ2U6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MDstd2Via2l0LWJvcmRlci1ib3R0b20tbGVm
dC1yYWRpdXM6NnB4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NnB4Oy13ZWJraXQtYm9yZGVy
LXRvcC1sZWZ0LXJhZGl1czo2cHg7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo2cHg7LW1vei1ib3Jk
ZXItcmFkaXVzLWJvdHRvbWxlZnQ6NnB4Oy1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0OjZweH0u
YnRuLWdyb3VwPi5idG4ubGFyZ2U6bGFzdC1jaGlsZCwuYnRuLWdyb3VwPi5sYXJnZS5kcm9wZG93
bi10b2dnbGV7LXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo2cHg7Ym9yZGVyLXRvcC1y
aWdodC1yYWRpdXM6NnB4Oy13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NnB4O2Jv
cmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjZweDstbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6
NnB4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDo2cHh9LmJ0bi1ncm91cD4uYnRuOmhv
dmVyLC5idG4tZ3JvdXA+LmJ0bjpmb2N1cywuYnRuLWdyb3VwPi5idG46YWN0aXZlLC5idG4tZ3Jv
dXA+LmJ0bi5hY3RpdmV7ei1pbmRleDoyfS5idG4tZ3JvdXAgLmRyb3Bkb3duLXRvZ2dsZTphY3Rp
dmUsLmJ0bi1ncm91cC5vcGVuIC5kcm9wZG93bi10b2dnbGV7b3V0bGluZTowfS5idG4tZ3JvdXA+
LmJ0bisuZHJvcGRvd24tdG9nZ2xleypwYWRkaW5nLXRvcDo1cHg7cGFkZGluZy1yaWdodDo4cHg7
KnBhZGRpbmctYm90dG9tOjVweDtwYWRkaW5nLWxlZnQ6OHB4Oy13ZWJraXQtYm94LXNoYWRvdzpp
bnNldCAxcHggMCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xMjUpLGluc2V0IDAgMXB4IDAgcmdiYSgy
NTUsMjU1LDI1NSwwLjIpLDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpOy1tb3otYm94LXNoYWRv
dzppbnNldCAxcHggMCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xMjUpLGluc2V0IDAgMXB4IDAgcmdi
YSgyNTUsMjU1LDI1NSwwLjIpLDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpO2JveC1zaGFkb3c6
aW5zZXQgMXB4IDAgMCByZ2JhKDI1NSwyNTUsMjU1LDAuMTI1KSxpbnNldCAwIDFweCAwIHJnYmEo
MjU1LDI1NSwyNTUsMC4yKSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KX0uYnRuLWdyb3VwPi5i
dG4tbWluaSsuZHJvcGRvd24tdG9nZ2xleypwYWRkaW5nLXRvcDoycHg7cGFkZGluZy1yaWdodDo1
cHg7KnBhZGRpbmctYm90dG9tOjJweDtwYWRkaW5nLWxlZnQ6NXB4fS5idG4tZ3JvdXA+LmJ0bi1z
bWFsbCsuZHJvcGRvd24tdG9nZ2xleypwYWRkaW5nLXRvcDo1cHg7KnBhZGRpbmctYm90dG9tOjRw
eH0uYnRuLWdyb3VwPi5idG4tbGFyZ2UrLmRyb3Bkb3duLXRvZ2dsZXsqcGFkZGluZy10b3A6N3B4
O3BhZGRpbmctcmlnaHQ6MTJweDsqcGFkZGluZy1ib3R0b206N3B4O3BhZGRpbmctbGVmdDoxMnB4
fS5idG4tZ3JvdXAub3BlbiAuZHJvcGRvd24tdG9nZ2xle2JhY2tncm91bmQtaW1hZ2U6bm9uZTst
d2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAycHggNHB4IHJnYmEoMCwwLDAsMC4xNSksMCAxcHgg
MnB4IHJnYmEoMCwwLDAsMC4wNSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMnB4IDRweCByZ2Jh
KDAsMCwwLDAuMTUpLDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpO2JveC1zaGFkb3c6aW5zZXQg
MCAycHggNHB4IHJnYmEoMCwwLDAsMC4xNSksMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSl9LmJ0
bi1ncm91cC5vcGVuIC5idG4uZHJvcGRvd24tdG9nZ2xle2JhY2tncm91bmQtY29sb3I6I2U2ZTZl
Nn0uYnRuLWdyb3VwLm9wZW4gLmJ0bi1wcmltYXJ5LmRyb3Bkb3duLXRvZ2dsZXtiYWNrZ3JvdW5k
LWNvbG9yOiMwNGN9LmJ0bi1ncm91cC5vcGVuIC5idG4td2FybmluZy5kcm9wZG93bi10b2dnbGV7
YmFja2dyb3VuZC1jb2xvcjojZjg5NDA2fS5idG4tZ3JvdXAub3BlbiAuYnRuLWRhbmdlci5kcm9w
ZG93bi10b2dnbGV7YmFja2dyb3VuZC1jb2xvcjojYmQzNjJmfS5idG4tZ3JvdXAub3BlbiAuYnRu
LXN1Y2Nlc3MuZHJvcGRvd24tdG9nZ2xle2JhY2tncm91bmQtY29sb3I6IzUxYTM1MX0uYnRuLWdy
b3VwLm9wZW4gLmJ0bi1pbmZvLmRyb3Bkb3duLXRvZ2dsZXtiYWNrZ3JvdW5kLWNvbG9yOiMyZjk2
YjR9LmJ0bi1ncm91cC5vcGVuIC5idG4taW52ZXJzZS5kcm9wZG93bi10b2dnbGV7YmFja2dyb3Vu
ZC1jb2xvcjojMjIyfS5idG4gLmNhcmV0e21hcmdpbi10b3A6OHB4O21hcmdpbi1sZWZ0OjB9LmJ0
bi1taW5pIC5jYXJldCwuYnRuLXNtYWxsIC5jYXJldCwuYnRuLWxhcmdlIC5jYXJldHttYXJnaW4t
dG9wOjZweH0uYnRuLWxhcmdlIC5jYXJldHtib3JkZXItdG9wLXdpZHRoOjVweDtib3JkZXItcmln
aHQtd2lkdGg6NXB4O2JvcmRlci1sZWZ0LXdpZHRoOjVweH0uZHJvcHVwIC5idG4tbGFyZ2UgLmNh
cmV0e2JvcmRlci1ib3R0b20td2lkdGg6NXB4fS5idG4tcHJpbWFyeSAuY2FyZXQsLmJ0bi13YXJu
aW5nIC5jYXJldCwuYnRuLWRhbmdlciAuY2FyZXQsLmJ0bi1pbmZvIC5jYXJldCwuYnRuLXN1Y2Nl
c3MgLmNhcmV0LC5idG4taW52ZXJzZSAuY2FyZXR7Ym9yZGVyLXRvcC1jb2xvcjojZmZmO2JvcmRl
ci1ib3R0b20tY29sb3I6I2ZmZn0uYnRuLWdyb3VwLXZlcnRpY2Fse2Rpc3BsYXk6aW5saW5lLWJs
b2NrOypkaXNwbGF5OmlubGluZTsqem9vbToxfS5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bntkaXNw
bGF5OmJsb2NrO2Zsb2F0Om5vbmU7bWF4LXdpZHRoOjEwMCU7LXdlYmtpdC1ib3JkZXItcmFkaXVz
OjA7LW1vei1ib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXJhZGl1czowfS5idG4tZ3JvdXAtdmVydGlj
YWw+LmJ0bisuYnRue21hcmdpbi10b3A6LTFweDttYXJnaW4tbGVmdDowfS5idG4tZ3JvdXAtdmVy
dGljYWw+LmJ0bjpmaXJzdC1jaGlsZHstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4IDRweCAwIDA7
LW1vei1ib3JkZXItcmFkaXVzOjRweCA0cHggMCAwO2JvcmRlci1yYWRpdXM6NHB4IDRweCAwIDB9
LmJ0bi1ncm91cC12ZXJ0aWNhbD4uYnRuOmxhc3QtY2hpbGR7LXdlYmtpdC1ib3JkZXItcmFkaXVz
OjAgMCA0cHggNHB4Oy1tb3otYm9yZGVyLXJhZGl1czowIDAgNHB4IDRweDtib3JkZXItcmFkaXVz
OjAgMCA0cHggNHB4fS5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bi1sYXJnZTpmaXJzdC1jaGlsZHst
d2Via2l0LWJvcmRlci1yYWRpdXM6NnB4IDZweCAwIDA7LW1vei1ib3JkZXItcmFkaXVzOjZweCA2
cHggMCAwO2JvcmRlci1yYWRpdXM6NnB4IDZweCAwIDB9LmJ0bi1ncm91cC12ZXJ0aWNhbD4uYnRu
LWxhcmdlOmxhc3QtY2hpbGR7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjAgMCA2cHggNnB4Oy1tb3ot
Ym9yZGVyLXJhZGl1czowIDAgNnB4IDZweDtib3JkZXItcmFkaXVzOjAgMCA2cHggNnB4fS5hbGVy
dHtwYWRkaW5nOjhweCAzNXB4IDhweCAxNHB4O21hcmdpbi1ib3R0b206MjBweDt0ZXh0LXNoYWRv
dzowIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC41KTtiYWNrZ3JvdW5kLWNvbG9yOiNmY2Y4ZTM7
Ym9yZGVyOjFweCBzb2xpZCAjZmJlZWQ1Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1i
b3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweH0uYWxlcnQsLmFsZXJ0IGg0e2NvbG9y
OiNjMDk4NTN9LmFsZXJ0IGg0e21hcmdpbjowfS5hbGVydCAuY2xvc2V7cG9zaXRpb246cmVsYXRp
dmU7dG9wOi0ycHg7cmlnaHQ6LTIxcHg7bGluZS1oZWlnaHQ6MjBweH0uYWxlcnQtc3VjY2Vzc3tj
b2xvcjojNDY4ODQ3O2JhY2tncm91bmQtY29sb3I6I2RmZjBkODtib3JkZXItY29sb3I6I2Q2ZTlj
Nn0uYWxlcnQtc3VjY2VzcyBoNHtjb2xvcjojNDY4ODQ3fS5hbGVydC1kYW5nZXIsLmFsZXJ0LWVy
cm9ye2NvbG9yOiNiOTRhNDg7YmFja2dyb3VuZC1jb2xvcjojZjJkZWRlO2JvcmRlci1jb2xvcjoj
ZWVkM2Q3fS5hbGVydC1kYW5nZXIgaDQsLmFsZXJ0LWVycm9yIGg0e2NvbG9yOiNiOTRhNDh9LmFs
ZXJ0LWluZm97Y29sb3I6IzNhODdhZDtiYWNrZ3JvdW5kLWNvbG9yOiNkOWVkZjc7Ym9yZGVyLWNv
bG9yOiNiY2U4ZjF9LmFsZXJ0LWluZm8gaDR7Y29sb3I6IzNhODdhZH0uYWxlcnQtYmxvY2t7cGFk
ZGluZy10b3A6MTRweDtwYWRkaW5nLWJvdHRvbToxNHB4fS5hbGVydC1ibG9jaz5wLC5hbGVydC1i
bG9jaz51bHttYXJnaW4tYm90dG9tOjB9LmFsZXJ0LWJsb2NrIHArcHttYXJnaW4tdG9wOjVweH0u
bmF2e21hcmdpbi1ib3R0b206MjBweDttYXJnaW4tbGVmdDowO2xpc3Qtc3R5bGU6bm9uZX0ubmF2
PmxpPmF7ZGlzcGxheTpibG9ja30ubmF2PmxpPmE6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7
YmFja2dyb3VuZC1jb2xvcjojZWVlfS5uYXY+bGk+YT5pbWd7bWF4LXdpZHRoOm5vbmV9Lm5hdj4u
cHVsbC1yaWdodHtmbG9hdDpyaWdodH0ubmF2LWhlYWRlcntkaXNwbGF5OmJsb2NrO3BhZGRpbmc6
M3B4IDE1cHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6Ym9sZDtsaW5lLWhlaWdodDoyMHB4
O2NvbG9yOiM5OTk7dGV4dC1zaGFkb3c6MCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuNSk7dGV4
dC10cmFuc2Zvcm06dXBwZXJjYXNlfS5uYXYgbGkrLm5hdi1oZWFkZXJ7bWFyZ2luLXRvcDo5cHh9
Lm5hdi1saXN0e3BhZGRpbmctcmlnaHQ6MTVweDtwYWRkaW5nLWxlZnQ6MTVweDttYXJnaW4tYm90
dG9tOjB9Lm5hdi1saXN0PmxpPmEsLm5hdi1saXN0IC5uYXYtaGVhZGVye21hcmdpbi1yaWdodDot
MTVweDttYXJnaW4tbGVmdDotMTVweDt0ZXh0LXNoYWRvdzowIDFweCAwIHJnYmEoMjU1LDI1NSwy
NTUsMC41KX0ubmF2LWxpc3Q+bGk+YXtwYWRkaW5nOjNweCAxNXB4fS5uYXYtbGlzdD4uYWN0aXZl
PmEsLm5hdi1saXN0Pi5hY3RpdmU+YTpob3Zlcntjb2xvcjojZmZmO3RleHQtc2hhZG93OjAgLTFw
eCAwIHJnYmEoMCwwLDAsMC4yKTtiYWNrZ3JvdW5kLWNvbG9yOiMwOGN9Lm5hdi1saXN0IFtjbGFz
c149Imljb24tIl0sLm5hdi1saXN0IFtjbGFzcyo9IiBpY29uLSJde21hcmdpbi1yaWdodDoycHh9
Lm5hdi1saXN0IC5kaXZpZGVyeyp3aWR0aDoxMDAlO2hlaWdodDoxcHg7bWFyZ2luOjlweCAxcHg7
Km1hcmdpbjotNXB4IDAgNXB4O292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kLWNvbG9yOiNlNWU1
ZTU7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ZmZn0ubmF2LXRhYnMsLm5hdi1waWxsc3sqem9v
bToxfS5uYXYtdGFiczpiZWZvcmUsLm5hdi1waWxsczpiZWZvcmUsLm5hdi10YWJzOmFmdGVyLC5u
YXYtcGlsbHM6YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9Lm5h
di10YWJzOmFmdGVyLC5uYXYtcGlsbHM6YWZ0ZXJ7Y2xlYXI6Ym90aH0ubmF2LXRhYnM+bGksLm5h
di1waWxscz5saXtmbG9hdDpsZWZ0fS5uYXYtdGFicz5saT5hLC5uYXYtcGlsbHM+bGk+YXtwYWRk
aW5nLXJpZ2h0OjEycHg7cGFkZGluZy1sZWZ0OjEycHg7bWFyZ2luLXJpZ2h0OjJweDtsaW5lLWhl
aWdodDoxNHB4fS5uYXYtdGFic3tib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZGRkfS5uYXYtdGFi
cz5saXttYXJnaW4tYm90dG9tOi0xcHh9Lm5hdi10YWJzPmxpPmF7cGFkZGluZy10b3A6OHB4O3Bh
ZGRpbmctYm90dG9tOjhweDtsaW5lLWhlaWdodDoyMHB4O2JvcmRlcjoxcHggc29saWQgdHJhbnNw
YXJlbnQ7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweCA0cHggMCAwOy1tb3otYm9yZGVyLXJhZGl1
czo0cHggNHB4IDAgMDtib3JkZXItcmFkaXVzOjRweCA0cHggMCAwfS5uYXYtdGFicz5saT5hOmhv
dmVye2JvcmRlci1jb2xvcjojZWVlICNlZWUgI2RkZH0ubmF2LXRhYnM+LmFjdGl2ZT5hLC5uYXYt
dGFicz4uYWN0aXZlPmE6aG92ZXJ7Y29sb3I6IzU1NTtjdXJzb3I6ZGVmYXVsdDtiYWNrZ3JvdW5k
LWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1ib3R0b20tY29sb3I6dHJh
bnNwYXJlbnR9Lm5hdi1waWxscz5saT5he3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4
cHg7bWFyZ2luLXRvcDoycHg7bWFyZ2luLWJvdHRvbToycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVz
OjVweDstbW96LWJvcmRlci1yYWRpdXM6NXB4O2JvcmRlci1yYWRpdXM6NXB4fS5uYXYtcGlsbHM+
LmFjdGl2ZT5hLC5uYXYtcGlsbHM+LmFjdGl2ZT5hOmhvdmVye2NvbG9yOiNmZmY7YmFja2dyb3Vu
ZC1jb2xvcjojMDhjfS5uYXYtc3RhY2tlZD5saXtmbG9hdDpub25lfS5uYXYtc3RhY2tlZD5saT5h
e21hcmdpbi1yaWdodDowfS5uYXYtdGFicy5uYXYtc3RhY2tlZHtib3JkZXItYm90dG9tOjB9Lm5h
di10YWJzLm5hdi1zdGFja2VkPmxpPmF7Ym9yZGVyOjFweCBzb2xpZCAjZGRkOy13ZWJraXQtYm9y
ZGVyLXJhZGl1czowOy1tb3otYm9yZGVyLXJhZGl1czowO2JvcmRlci1yYWRpdXM6MH0ubmF2LXRh
YnMubmF2LXN0YWNrZWQ+bGk6Zmlyc3QtY2hpbGQ+YXstd2Via2l0LWJvcmRlci10b3AtcmlnaHQt
cmFkaXVzOjRweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItdG9w
LWxlZnQtcmFkaXVzOjRweDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjRweDstbW96LWJvcmRlci1y
YWRpdXMtdG9wcmlnaHQ6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0OjRweH0ubmF2LXRh
YnMubmF2LXN0YWNrZWQ+bGk6bGFzdC1jaGlsZD5hey13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdo
dC1yYWRpdXM6NHB4O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjRweDstd2Via2l0LWJvcmRl
ci1ib3R0b20tbGVmdC1yYWRpdXM6NHB4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NHB4Oy1t
b3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDo0cHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRv
bWxlZnQ6NHB4fS5uYXYtdGFicy5uYXYtc3RhY2tlZD5saT5hOmhvdmVye3otaW5kZXg6Mjtib3Jk
ZXItY29sb3I6I2RkZH0ubmF2LXBpbGxzLm5hdi1zdGFja2VkPmxpPmF7bWFyZ2luLWJvdHRvbToz
cHh9Lm5hdi1waWxscy5uYXYtc3RhY2tlZD5saTpsYXN0LWNoaWxkPmF7bWFyZ2luLWJvdHRvbTox
cHh9Lm5hdi10YWJzIC5kcm9wZG93bi1tZW51ey13ZWJraXQtYm9yZGVyLXJhZGl1czowIDAgNnB4
IDZweDstbW96LWJvcmRlci1yYWRpdXM6MCAwIDZweCA2cHg7Ym9yZGVyLXJhZGl1czowIDAgNnB4
IDZweH0ubmF2LXBpbGxzIC5kcm9wZG93bi1tZW51ey13ZWJraXQtYm9yZGVyLXJhZGl1czo2cHg7
LW1vei1ib3JkZXItcmFkaXVzOjZweDtib3JkZXItcmFkaXVzOjZweH0ubmF2IC5kcm9wZG93bi10
b2dnbGUgLmNhcmV0e21hcmdpbi10b3A6NnB4O2JvcmRlci10b3AtY29sb3I6IzA4Yztib3JkZXIt
Ym90dG9tLWNvbG9yOiMwOGN9Lm5hdiAuZHJvcGRvd24tdG9nZ2xlOmhvdmVyIC5jYXJldHtib3Jk
ZXItdG9wLWNvbG9yOiMwMDU1ODA7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMDA1NTgwfS5uYXYtdGFi
cyAuZHJvcGRvd24tdG9nZ2xlIC5jYXJldHttYXJnaW4tdG9wOjhweH0ubmF2IC5hY3RpdmUgLmRy
b3Bkb3duLXRvZ2dsZSAuY2FyZXR7Ym9yZGVyLXRvcC1jb2xvcjojZmZmO2JvcmRlci1ib3R0b20t
Y29sb3I6I2ZmZn0ubmF2LXRhYnMgLmFjdGl2ZSAuZHJvcGRvd24tdG9nZ2xlIC5jYXJldHtib3Jk
ZXItdG9wLWNvbG9yOiM1NTU7Ym9yZGVyLWJvdHRvbS1jb2xvcjojNTU1fS5uYXY+LmRyb3Bkb3du
LmFjdGl2ZT5hOmhvdmVye2N1cnNvcjpwb2ludGVyfS5uYXYtdGFicyAub3BlbiAuZHJvcGRvd24t
dG9nZ2xlLC5uYXYtcGlsbHMgLm9wZW4gLmRyb3Bkb3duLXRvZ2dsZSwubmF2PmxpLmRyb3Bkb3du
Lm9wZW4uYWN0aXZlPmE6aG92ZXJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Ym9y
ZGVyLWNvbG9yOiM5OTl9Lm5hdiBsaS5kcm9wZG93bi5vcGVuIC5jYXJldCwubmF2IGxpLmRyb3Bk
b3duLm9wZW4uYWN0aXZlIC5jYXJldCwubmF2IGxpLmRyb3Bkb3duLm9wZW4gYTpob3ZlciAuY2Fy
ZXR7Ym9yZGVyLXRvcC1jb2xvcjojZmZmO2JvcmRlci1ib3R0b20tY29sb3I6I2ZmZjtvcGFjaXR5
OjE7ZmlsdGVyOmFscGhhKG9wYWNpdHk9MTAwKX0udGFicy1zdGFja2VkIC5vcGVuPmE6aG92ZXJ7
Ym9yZGVyLWNvbG9yOiM5OTl9LnRhYmJhYmxleyp6b29tOjF9LnRhYmJhYmxlOmJlZm9yZSwudGFi
YmFibGU6YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9LnRhYmJh
YmxlOmFmdGVye2NsZWFyOmJvdGh9LnRhYi1jb250ZW50e292ZXJmbG93OmF1dG99LnRhYnMtYmVs
b3c+Lm5hdi10YWJzLC50YWJzLXJpZ2h0Pi5uYXYtdGFicywudGFicy1sZWZ0Pi5uYXYtdGFic3ti
b3JkZXItYm90dG9tOjB9LnRhYi1jb250ZW50Pi50YWItcGFuZSwucGlsbC1jb250ZW50Pi5waWxs
LXBhbmV7ZGlzcGxheTpub25lfS50YWItY29udGVudD4uYWN0aXZlLC5waWxsLWNvbnRlbnQ+LmFj
dGl2ZXtkaXNwbGF5OmJsb2NrfS50YWJzLWJlbG93Pi5uYXYtdGFic3tib3JkZXItdG9wOjFweCBz
b2xpZCAjZGRkfS50YWJzLWJlbG93Pi5uYXYtdGFicz5saXttYXJnaW4tdG9wOi0xcHg7bWFyZ2lu
LWJvdHRvbTowfS50YWJzLWJlbG93Pi5uYXYtdGFicz5saT5hey13ZWJraXQtYm9yZGVyLXJhZGl1
czowIDAgNHB4IDRweDstbW96LWJvcmRlci1yYWRpdXM6MCAwIDRweCA0cHg7Ym9yZGVyLXJhZGl1
czowIDAgNHB4IDRweH0udGFicy1iZWxvdz4ubmF2LXRhYnM+bGk+YTpob3Zlcntib3JkZXItdG9w
LWNvbG9yOiNkZGQ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp0cmFuc3BhcmVudH0udGFicy1iZWxvdz4u
bmF2LXRhYnM+LmFjdGl2ZT5hLC50YWJzLWJlbG93Pi5uYXYtdGFicz4uYWN0aXZlPmE6aG92ZXJ7
Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50ICNkZGQgI2RkZCAjZGRkfS50YWJzLWxlZnQ+Lm5hdi10
YWJzPmxpLC50YWJzLXJpZ2h0Pi5uYXYtdGFicz5saXtmbG9hdDpub25lfS50YWJzLWxlZnQ+Lm5h
di10YWJzPmxpPmEsLnRhYnMtcmlnaHQ+Lm5hdi10YWJzPmxpPmF7bWluLXdpZHRoOjc0cHg7bWFy
Z2luLXJpZ2h0OjA7bWFyZ2luLWJvdHRvbTozcHh9LnRhYnMtbGVmdD4ubmF2LXRhYnN7ZmxvYXQ6
bGVmdDttYXJnaW4tcmlnaHQ6MTlweDtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNkZGR9LnRhYnMt
bGVmdD4ubmF2LXRhYnM+bGk+YXttYXJnaW4tcmlnaHQ6LTFweDstd2Via2l0LWJvcmRlci1yYWRp
dXM6NHB4IDAgMCA0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4O2JvcmRlci1yYWRp
dXM6NHB4IDAgMCA0cHh9LnRhYnMtbGVmdD4ubmF2LXRhYnM+bGk+YTpob3Zlcntib3JkZXItY29s
b3I6I2VlZSAjZGRkICNlZWUgI2VlZX0udGFicy1sZWZ0Pi5uYXYtdGFicyAuYWN0aXZlPmEsLnRh
YnMtbGVmdD4ubmF2LXRhYnMgLmFjdGl2ZT5hOmhvdmVye2JvcmRlci1jb2xvcjojZGRkIHRyYW5z
cGFyZW50ICNkZGQgI2RkZDsqYm9yZGVyLXJpZ2h0LWNvbG9yOiNmZmZ9LnRhYnMtcmlnaHQ+Lm5h
di10YWJze2Zsb2F0OnJpZ2h0O21hcmdpbi1sZWZ0OjE5cHg7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlk
ICNkZGR9LnRhYnMtcmlnaHQ+Lm5hdi10YWJzPmxpPmF7bWFyZ2luLWxlZnQ6LTFweDstd2Via2l0
LWJvcmRlci1yYWRpdXM6MCA0cHggNHB4IDA7LW1vei1ib3JkZXItcmFkaXVzOjAgNHB4IDRweCAw
O2JvcmRlci1yYWRpdXM6MCA0cHggNHB4IDB9LnRhYnMtcmlnaHQ+Lm5hdi10YWJzPmxpPmE6aG92
ZXJ7Ym9yZGVyLWNvbG9yOiNlZWUgI2VlZSAjZWVlICNkZGR9LnRhYnMtcmlnaHQ+Lm5hdi10YWJz
IC5hY3RpdmU+YSwudGFicy1yaWdodD4ubmF2LXRhYnMgLmFjdGl2ZT5hOmhvdmVye2JvcmRlci1j
b2xvcjojZGRkICNkZGQgI2RkZCB0cmFuc3BhcmVudDsqYm9yZGVyLWxlZnQtY29sb3I6I2ZmZn0u
bmF2Pi5kaXNhYmxlZD5he2NvbG9yOiM5OTl9Lm5hdj4uZGlzYWJsZWQ+YTpob3Zlcnt0ZXh0LWRl
Y29yYXRpb246bm9uZTtjdXJzb3I6ZGVmYXVsdDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50
fS5uYXZiYXJ7KnBvc2l0aW9uOnJlbGF0aXZlOyp6LWluZGV4OjI7bWFyZ2luLWJvdHRvbToyMHB4
O292ZXJmbG93OnZpc2libGV9Lm5hdmJhci1pbm5lcnttaW4taGVpZ2h0OjQwcHg7cGFkZGluZy1y
aWdodDoyMHB4O3BhZGRpbmctbGVmdDoyMHB4O2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYTtiYWNr
Z3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjZmZmLCNmMmYyZjIpO2JhY2tn
cm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCNmZmYp
LHRvKCNmMmYyZjIpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRv
cCwjZmZmLCNmMmYyZjIpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwj
ZmZmLCNmMmYyZjIpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwj
ZmZmLCNmMmYyZjIpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2JvcmRlcjoxcHggc29saWQg
I2Q0ZDRkNDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7
Ym9yZGVyLXJhZGl1czo0cHg7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29m
dC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZmZmZmZmYnLGVuZENvbG9yc3RyPScjZmZmMmYy
ZjInLEdyYWRpZW50VHlwZT0wKTsqem9vbToxOy13ZWJraXQtYm94LXNoYWRvdzowIDFweCA0cHgg
cmdiYSgwLDAsMCwwLjA2NSk7LW1vei1ib3gtc2hhZG93OjAgMXB4IDRweCByZ2JhKDAsMCwwLDAu
MDY1KTtib3gtc2hhZG93OjAgMXB4IDRweCByZ2JhKDAsMCwwLDAuMDY1KX0ubmF2YmFyLWlubmVy
OmJlZm9yZSwubmF2YmFyLWlubmVyOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtj
b250ZW50OiIifS5uYXZiYXItaW5uZXI6YWZ0ZXJ7Y2xlYXI6Ym90aH0ubmF2YmFyIC5jb250YWlu
ZXJ7d2lkdGg6YXV0b30ubmF2LWNvbGxhcHNlLmNvbGxhcHNle2hlaWdodDphdXRvO292ZXJmbG93
OnZpc2libGV9Lm5hdmJhciAuYnJhbmR7ZGlzcGxheTpibG9jaztmbG9hdDpsZWZ0O3BhZGRpbmc6
MTBweCAyMHB4IDEwcHg7bWFyZ2luLWxlZnQ6LTIwcHg7Zm9udC1zaXplOjIwcHg7Zm9udC13ZWln
aHQ6MjAwO2NvbG9yOiM3Nzc7dGV4dC1zaGFkb3c6MCAxcHggMCAjZmZmfS5uYXZiYXIgLmJyYW5k
OmhvdmVye3RleHQtZGVjb3JhdGlvbjpub25lfS5uYXZiYXItdGV4dHttYXJnaW4tYm90dG9tOjA7
bGluZS1oZWlnaHQ6NDBweDtjb2xvcjojNzc3fS5uYXZiYXItbGlua3tjb2xvcjojNzc3fS5uYXZi
YXItbGluazpob3Zlcntjb2xvcjojMzMzfS5uYXZiYXIgLmRpdmlkZXItdmVydGljYWx7aGVpZ2h0
OjQwcHg7bWFyZ2luOjAgOXB4O2JvcmRlci1yaWdodDoxcHggc29saWQgI2ZmZjtib3JkZXItbGVm
dDoxcHggc29saWQgI2YyZjJmMn0ubmF2YmFyIC5idG4sLm5hdmJhciAuYnRuLWdyb3Vwe21hcmdp
bi10b3A6NXB4fS5uYXZiYXIgLmJ0bi1ncm91cCAuYnRuLC5uYXZiYXIgLmlucHV0LXByZXBlbmQg
LmJ0biwubmF2YmFyIC5pbnB1dC1hcHBlbmQgLmJ0bnttYXJnaW4tdG9wOjB9Lm5hdmJhci1mb3Jt
e21hcmdpbi1ib3R0b206MDsqem9vbToxfS5uYXZiYXItZm9ybTpiZWZvcmUsLm5hdmJhci1mb3Jt
OmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5uYXZiYXItZm9y
bTphZnRlcntjbGVhcjpib3RofS5uYXZiYXItZm9ybSBpbnB1dCwubmF2YmFyLWZvcm0gc2VsZWN0
LC5uYXZiYXItZm9ybSAucmFkaW8sLm5hdmJhci1mb3JtIC5jaGVja2JveHttYXJnaW4tdG9wOjVw
eH0ubmF2YmFyLWZvcm0gaW5wdXQsLm5hdmJhci1mb3JtIHNlbGVjdCwubmF2YmFyLWZvcm0gLmJ0
bntkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tYm90dG9tOjB9Lm5hdmJhci1mb3JtIGlucHV0
W3R5cGU9ImltYWdlIl0sLm5hdmJhci1mb3JtIGlucHV0W3R5cGU9ImNoZWNrYm94Il0sLm5hdmJh
ci1mb3JtIGlucHV0W3R5cGU9InJhZGlvIl17bWFyZ2luLXRvcDozcHh9Lm5hdmJhci1mb3JtIC5p
bnB1dC1hcHBlbmQsLm5hdmJhci1mb3JtIC5pbnB1dC1wcmVwZW5ke21hcmdpbi10b3A6NXB4O3do
aXRlLXNwYWNlOm5vd3JhcH0ubmF2YmFyLWZvcm0gLmlucHV0LWFwcGVuZCBpbnB1dCwubmF2YmFy
LWZvcm0gLmlucHV0LXByZXBlbmQgaW5wdXR7bWFyZ2luLXRvcDowfS5uYXZiYXItc2VhcmNoe3Bv
c2l0aW9uOnJlbGF0aXZlO2Zsb2F0OmxlZnQ7bWFyZ2luLXRvcDo1cHg7bWFyZ2luLWJvdHRvbTow
fS5uYXZiYXItc2VhcmNoIC5zZWFyY2gtcXVlcnl7cGFkZGluZzo0cHggMTRweDttYXJnaW4tYm90
dG9tOjA7Zm9udC1mYW1pbHk6IkhlbHZldGljYSBOZXVlIixIZWx2ZXRpY2EsQXJpYWwsc2Fucy1z
ZXJpZjtmb250LXNpemU6MTNweDtmb250LXdlaWdodDpub3JtYWw7bGluZS1oZWlnaHQ6MTstd2Vi
a2l0LWJvcmRlci1yYWRpdXM6MTVweDstbW96LWJvcmRlci1yYWRpdXM6MTVweDtib3JkZXItcmFk
aXVzOjE1cHh9Lm5hdmJhci1zdGF0aWMtdG9we3Bvc2l0aW9uOnN0YXRpYzttYXJnaW4tYm90dG9t
OjB9Lm5hdmJhci1zdGF0aWMtdG9wIC5uYXZiYXItaW5uZXJ7LXdlYmtpdC1ib3JkZXItcmFkaXVz
OjA7LW1vei1ib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXJhZGl1czowfS5uYXZiYXItZml4ZWQtdG9w
LC5uYXZiYXItZml4ZWQtYm90dG9te3Bvc2l0aW9uOmZpeGVkO3JpZ2h0OjA7bGVmdDowO3otaW5k
ZXg6MTAzMDttYXJnaW4tYm90dG9tOjB9Lm5hdmJhci1maXhlZC10b3AgLm5hdmJhci1pbm5lciwu
bmF2YmFyLXN0YXRpYy10b3AgLm5hdmJhci1pbm5lcntib3JkZXItd2lkdGg6MCAwIDFweH0ubmF2
YmFyLWZpeGVkLWJvdHRvbSAubmF2YmFyLWlubmVye2JvcmRlci13aWR0aDoxcHggMCAwfS5uYXZi
YXItZml4ZWQtdG9wIC5uYXZiYXItaW5uZXIsLm5hdmJhci1maXhlZC1ib3R0b20gLm5hdmJhci1p
bm5lcntwYWRkaW5nLXJpZ2h0OjA7cGFkZGluZy1sZWZ0OjA7LXdlYmtpdC1ib3JkZXItcmFkaXVz
OjA7LW1vei1ib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXJhZGl1czowfS5uYXZiYXItc3RhdGljLXRv
cCAuY29udGFpbmVyLC5uYXZiYXItZml4ZWQtdG9wIC5jb250YWluZXIsLm5hdmJhci1maXhlZC1i
b3R0b20gLmNvbnRhaW5lcnt3aWR0aDo5NDBweH0ubmF2YmFyLWZpeGVkLXRvcHt0b3A6MH0ubmF2
YmFyLWZpeGVkLXRvcCAubmF2YmFyLWlubmVyLC5uYXZiYXItc3RhdGljLXRvcCAubmF2YmFyLWlu
bmVyey13ZWJraXQtYm94LXNoYWRvdzowIDFweCAxMHB4IHJnYmEoMCwwLDAsMC4xKTstbW96LWJv
eC1zaGFkb3c6MCAxcHggMTBweCByZ2JhKDAsMCwwLDAuMSk7Ym94LXNoYWRvdzowIDFweCAxMHB4
IHJnYmEoMCwwLDAsMC4xKX0ubmF2YmFyLWZpeGVkLWJvdHRvbXtib3R0b206MH0ubmF2YmFyLWZp
eGVkLWJvdHRvbSAubmF2YmFyLWlubmVyey13ZWJraXQtYm94LXNoYWRvdzowIC0xcHggMTBweCBy
Z2JhKDAsMCwwLDAuMSk7LW1vei1ib3gtc2hhZG93OjAgLTFweCAxMHB4IHJnYmEoMCwwLDAsMC4x
KTtib3gtc2hhZG93OjAgLTFweCAxMHB4IHJnYmEoMCwwLDAsMC4xKX0ubmF2YmFyIC5uYXZ7cG9z
aXRpb246cmVsYXRpdmU7bGVmdDowO2Rpc3BsYXk6YmxvY2s7ZmxvYXQ6bGVmdDttYXJnaW46MCAx
MHB4IDAgMH0ubmF2YmFyIC5uYXYucHVsbC1yaWdodHtmbG9hdDpyaWdodDttYXJnaW4tcmlnaHQ6
MH0ubmF2YmFyIC5uYXY+bGl7ZmxvYXQ6bGVmdH0ubmF2YmFyIC5uYXY+bGk+YXtmbG9hdDpub25l
O3BhZGRpbmc6MTBweCAxNXB4IDEwcHg7Y29sb3I6Izc3Nzt0ZXh0LWRlY29yYXRpb246bm9uZTt0
ZXh0LXNoYWRvdzowIDFweCAwICNmZmZ9Lm5hdmJhciAubmF2IC5kcm9wZG93bi10b2dnbGUgLmNh
cmV0e21hcmdpbi10b3A6OHB4fS5uYXZiYXIgLm5hdj5saT5hOmZvY3VzLC5uYXZiYXIgLm5hdj5s
aT5hOmhvdmVye2NvbG9yOiMzMzM7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZC1jb2xv
cjp0cmFuc3BhcmVudH0ubmF2YmFyIC5uYXY+LmFjdGl2ZT5hLC5uYXZiYXIgLm5hdj4uYWN0aXZl
PmE6aG92ZXIsLm5hdmJhciAubmF2Pi5hY3RpdmU+YTpmb2N1c3tjb2xvcjojNTU1O3RleHQtZGVj
b3JhdGlvbjpub25lO2JhY2tncm91bmQtY29sb3I6I2U1ZTVlNTstd2Via2l0LWJveC1zaGFkb3c6
aW5zZXQgMCAzcHggOHB4IHJnYmEoMCwwLDAsMC4xMjUpOy1tb3otYm94LXNoYWRvdzppbnNldCAw
IDNweCA4cHggcmdiYSgwLDAsMCwwLjEyNSk7Ym94LXNoYWRvdzppbnNldCAwIDNweCA4cHggcmdi
YSgwLDAsMCwwLjEyNSl9Lm5hdmJhciAuYnRuLW5hdmJhcntkaXNwbGF5Om5vbmU7ZmxvYXQ6cmln
aHQ7cGFkZGluZzo3cHggMTBweDttYXJnaW4tcmlnaHQ6NXB4O21hcmdpbi1sZWZ0OjVweDtjb2xv
cjojZmZmO3RleHQtc2hhZG93OjAgLTFweCAwIHJnYmEoMCwwLDAsMC4yNSk7YmFja2dyb3VuZC1j
b2xvcjojZWRlZGVkOypiYWNrZ3JvdW5kLWNvbG9yOiNlNWU1ZTU7YmFja2dyb3VuZC1pbWFnZTot
bW96LWxpbmVhci1ncmFkaWVudCh0b3AsI2YyZjJmMiwjZTVlNWU1KTtiYWNrZ3JvdW5kLWltYWdl
Oi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjZjJmMmYyKSx0bygjZTVl
NWU1KSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsI2YyZjJm
MiwjZTVlNWU1KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsI2YyZjJm
MiwjZTVlNWU1KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sI2Yy
ZjJmMiwjZTVlNWU1KTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtib3JkZXItY29sb3I6I2U1
ZTVlNSAjZTVlNWU1ICNiZmJmYmY7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMC4xKSByZ2JhKDAs
MCwwLDAuMSkgcmdiYSgwLDAsMCwwLjI1KTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0u
TWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZmYyZjJmMicsZW5kQ29sb3JzdHI9
JyNmZmU1ZTVlNScsR3JhZGllbnRUeXBlPTApO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9y
bS5NaWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZD1mYWxzZSk7LXdlYmtpdC1ib3gtc2hhZG93Omlu
c2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjEpLDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1
NSwwLjA3NSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSww
LjEpLDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjA3NSk7Ym94LXNoYWRvdzppbnNldCAwIDFw
eCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xKSwwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4wNzUp
fS5uYXZiYXIgLmJ0bi1uYXZiYXI6aG92ZXIsLm5hdmJhciAuYnRuLW5hdmJhcjphY3RpdmUsLm5h
dmJhciAuYnRuLW5hdmJhci5hY3RpdmUsLm5hdmJhciAuYnRuLW5hdmJhci5kaXNhYmxlZCwubmF2
YmFyIC5idG4tbmF2YmFyW2Rpc2FibGVkXXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6I2U1
ZTVlNTsqYmFja2dyb3VuZC1jb2xvcjojZDlkOWQ5fS5uYXZiYXIgLmJ0bi1uYXZiYXI6YWN0aXZl
LC5uYXZiYXIgLmJ0bi1uYXZiYXIuYWN0aXZle2JhY2tncm91bmQtY29sb3I6I2NjYyBcOX0ubmF2
YmFyIC5idG4tbmF2YmFyIC5pY29uLWJhcntkaXNwbGF5OmJsb2NrO3dpZHRoOjE4cHg7aGVpZ2h0
OjJweDtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjU7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjFweDst
bW96LWJvcmRlci1yYWRpdXM6MXB4O2JvcmRlci1yYWRpdXM6MXB4Oy13ZWJraXQtYm94LXNoYWRv
dzowIDFweCAwIHJnYmEoMCwwLDAsMC4yNSk7LW1vei1ib3gtc2hhZG93OjAgMXB4IDAgcmdiYSgw
LDAsMCwwLjI1KTtib3gtc2hhZG93OjAgMXB4IDAgcmdiYSgwLDAsMCwwLjI1KX0uYnRuLW5hdmJh
ciAuaWNvbi1iYXIrLmljb24tYmFye21hcmdpbi10b3A6M3B4fS5uYXZiYXIgLm5hdj5saT4uZHJv
cGRvd24tbWVudTpiZWZvcmV7cG9zaXRpb246YWJzb2x1dGU7dG9wOi03cHg7bGVmdDo5cHg7ZGlz
cGxheTppbmxpbmUtYmxvY2s7Ym9yZGVyLXJpZ2h0OjdweCBzb2xpZCB0cmFuc3BhcmVudDtib3Jk
ZXItYm90dG9tOjdweCBzb2xpZCAjY2NjO2JvcmRlci1sZWZ0OjdweCBzb2xpZCB0cmFuc3BhcmVu
dDtib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMCwwLDAsMC4yKTtjb250ZW50OicnfS5uYXZiYXIg
Lm5hdj5saT4uZHJvcGRvd24tbWVudTphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTZweDts
ZWZ0OjEwcHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym9yZGVyLXJpZ2h0OjZweCBzb2xpZCB0cmFu
c3BhcmVudDtib3JkZXItYm90dG9tOjZweCBzb2xpZCAjZmZmO2JvcmRlci1sZWZ0OjZweCBzb2xp
ZCB0cmFuc3BhcmVudDtjb250ZW50OicnfS5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXY+bGk+LmRy
b3Bkb3duLW1lbnU6YmVmb3Jle3RvcDphdXRvO2JvdHRvbTotN3B4O2JvcmRlci10b3A6N3B4IHNv
bGlkICNjY2M7Ym9yZGVyLWJvdHRvbTowO2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwwLjIp
fS5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXY+bGk+LmRyb3Bkb3duLW1lbnU6YWZ0ZXJ7dG9wOmF1
dG87Ym90dG9tOi02cHg7Ym9yZGVyLXRvcDo2cHggc29saWQgI2ZmZjtib3JkZXItYm90dG9tOjB9
Lm5hdmJhciAubmF2IGxpLmRyb3Bkb3duPmE6aG92ZXIgLmNhcmV0e2JvcmRlci10b3AtY29sb3I6
IzU1NTtib3JkZXItYm90dG9tLWNvbG9yOiM1NTV9Lm5hdmJhciAubmF2IGxpLmRyb3Bkb3duLm9w
ZW4+LmRyb3Bkb3duLXRvZ2dsZSwubmF2YmFyIC5uYXYgbGkuZHJvcGRvd24uYWN0aXZlPi5kcm9w
ZG93bi10b2dnbGUsLm5hdmJhciAubmF2IGxpLmRyb3Bkb3duLm9wZW4uYWN0aXZlPi5kcm9wZG93
bi10b2dnbGV7Y29sb3I6IzU1NTtiYWNrZ3JvdW5kLWNvbG9yOiNlNWU1ZTV9Lm5hdmJhciAubmF2
IGxpLmRyb3Bkb3duPi5kcm9wZG93bi10b2dnbGUgLmNhcmV0e2JvcmRlci10b3AtY29sb3I6Izc3
Nztib3JkZXItYm90dG9tLWNvbG9yOiM3Nzd9Lm5hdmJhciAubmF2IGxpLmRyb3Bkb3duLm9wZW4+
LmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXQsLm5hdmJhciAubmF2IGxpLmRyb3Bkb3duLmFjdGl2ZT4u
ZHJvcGRvd24tdG9nZ2xlIC5jYXJldCwubmF2YmFyIC5uYXYgbGkuZHJvcGRvd24ub3Blbi5hY3Rp
dmU+LmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXR7Ym9yZGVyLXRvcC1jb2xvcjojNTU1O2JvcmRlci1i
b3R0b20tY29sb3I6IzU1NX0ubmF2YmFyIC5wdWxsLXJpZ2h0PmxpPi5kcm9wZG93bi1tZW51LC5u
YXZiYXIgLm5hdj5saT4uZHJvcGRvd24tbWVudS5wdWxsLXJpZ2h0e3JpZ2h0OjA7bGVmdDphdXRv
fS5uYXZiYXIgLnB1bGwtcmlnaHQ+bGk+LmRyb3Bkb3duLW1lbnU6YmVmb3JlLC5uYXZiYXIgLm5h
dj5saT4uZHJvcGRvd24tbWVudS5wdWxsLXJpZ2h0OmJlZm9yZXtyaWdodDoxMnB4O2xlZnQ6YXV0
b30ubmF2YmFyIC5wdWxsLXJpZ2h0PmxpPi5kcm9wZG93bi1tZW51OmFmdGVyLC5uYXZiYXIgLm5h
dj5saT4uZHJvcGRvd24tbWVudS5wdWxsLXJpZ2h0OmFmdGVye3JpZ2h0OjEzcHg7bGVmdDphdXRv
fS5uYXZiYXIgLnB1bGwtcmlnaHQ+bGk+LmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLW1lbnUsLm5h
dmJhciAubmF2PmxpPi5kcm9wZG93bi1tZW51LnB1bGwtcmlnaHQgLmRyb3Bkb3duLW1lbnV7cmln
aHQ6MTAwJTtsZWZ0OmF1dG87bWFyZ2luLXJpZ2h0Oi0xcHg7bWFyZ2luLWxlZnQ6MDstd2Via2l0
LWJvcmRlci1yYWRpdXM6NnB4IDAgNnB4IDZweDstbW96LWJvcmRlci1yYWRpdXM6NnB4IDAgNnB4
IDZweDtib3JkZXItcmFkaXVzOjZweCAwIDZweCA2cHh9Lm5hdmJhci1pbnZlcnNlIC5uYXZiYXIt
aW5uZXJ7YmFja2dyb3VuZC1jb2xvcjojMWIxYjFiO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5l
YXItZ3JhZGllbnQodG9wLCMyMjIsIzExMSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRp
ZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oIzIyMiksdG8oIzExMSkpO2JhY2tncm91bmQtaW1h
Z2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCMyMjIsIzExMSk7YmFja2dyb3VuZC1pbWFn
ZTotby1saW5lYXItZ3JhZGllbnQodG9wLCMyMjIsIzExMSk7YmFja2dyb3VuZC1pbWFnZTpsaW5l
YXItZ3JhZGllbnQodG8gYm90dG9tLCMyMjIsIzExMSk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0
LXg7Ym9yZGVyLWNvbG9yOiMyNTI1MjU7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1p
Y3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmYyMjIyMjInLGVuZENvbG9yc3RyPScj
ZmYxMTExMTEnLEdyYWRpZW50VHlwZT0wKX0ubmF2YmFyLWludmVyc2UgLmJyYW5kLC5uYXZiYXIt
aW52ZXJzZSAubmF2PmxpPmF7Y29sb3I6Izk5OTt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAs
MCwwLDAuMjUpfS5uYXZiYXItaW52ZXJzZSAuYnJhbmQ6aG92ZXIsLm5hdmJhci1pbnZlcnNlIC5u
YXY+bGk+YTpob3Zlcntjb2xvcjojZmZmfS5uYXZiYXItaW52ZXJzZSAuYnJhbmR7Y29sb3I6Izk5
OX0ubmF2YmFyLWludmVyc2UgLm5hdmJhci10ZXh0e2NvbG9yOiM5OTl9Lm5hdmJhci1pbnZlcnNl
IC5uYXY+bGk+YTpmb2N1cywubmF2YmFyLWludmVyc2UgLm5hdj5saT5hOmhvdmVye2NvbG9yOiNm
ZmY7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubmF2YmFyLWludmVyc2UgLm5hdiAuYWN0
aXZlPmEsLm5hdmJhci1pbnZlcnNlIC5uYXYgLmFjdGl2ZT5hOmhvdmVyLC5uYXZiYXItaW52ZXJz
ZSAubmF2IC5hY3RpdmU+YTpmb2N1c3tjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzExMX0u
bmF2YmFyLWludmVyc2UgLm5hdmJhci1saW5re2NvbG9yOiM5OTl9Lm5hdmJhci1pbnZlcnNlIC5u
YXZiYXItbGluazpob3Zlcntjb2xvcjojZmZmfS5uYXZiYXItaW52ZXJzZSAuZGl2aWRlci12ZXJ0
aWNhbHtib3JkZXItcmlnaHQtY29sb3I6IzIyMjtib3JkZXItbGVmdC1jb2xvcjojMTExfS5uYXZi
YXItaW52ZXJzZSAubmF2IGxpLmRyb3Bkb3duLm9wZW4+LmRyb3Bkb3duLXRvZ2dsZSwubmF2YmFy
LWludmVyc2UgLm5hdiBsaS5kcm9wZG93bi5hY3RpdmU+LmRyb3Bkb3duLXRvZ2dsZSwubmF2YmFy
LWludmVyc2UgLm5hdiBsaS5kcm9wZG93bi5vcGVuLmFjdGl2ZT4uZHJvcGRvd24tdG9nZ2xle2Nv
bG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMTExfS5uYXZiYXItaW52ZXJzZSAubmF2IGxpLmRy
b3Bkb3duPmE6aG92ZXIgLmNhcmV0e2JvcmRlci10b3AtY29sb3I6I2ZmZjtib3JkZXItYm90dG9t
LWNvbG9yOiNmZmZ9Lm5hdmJhci1pbnZlcnNlIC5uYXYgbGkuZHJvcGRvd24+LmRyb3Bkb3duLXRv
Z2dsZSAuY2FyZXR7Ym9yZGVyLXRvcC1jb2xvcjojOTk5O2JvcmRlci1ib3R0b20tY29sb3I6Izk5
OX0ubmF2YmFyLWludmVyc2UgLm5hdiBsaS5kcm9wZG93bi5vcGVuPi5kcm9wZG93bi10b2dnbGUg
LmNhcmV0LC5uYXZiYXItaW52ZXJzZSAubmF2IGxpLmRyb3Bkb3duLmFjdGl2ZT4uZHJvcGRvd24t
dG9nZ2xlIC5jYXJldCwubmF2YmFyLWludmVyc2UgLm5hdiBsaS5kcm9wZG93bi5vcGVuLmFjdGl2
ZT4uZHJvcGRvd24tdG9nZ2xlIC5jYXJldHtib3JkZXItdG9wLWNvbG9yOiNmZmY7Ym9yZGVyLWJv
dHRvbS1jb2xvcjojZmZmfS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXNlYXJjaCAuc2VhcmNoLXF1
ZXJ5e2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojNTE1MTUxO2JvcmRlci1jb2xvcjojMTEx
Oy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAycHggcmdiYSgwLDAsMCwwLjEpLDAgMXB4
IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjE1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMnB4
IHJnYmEoMCwwLDAsMC4xKSwwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xNSk7Ym94LXNoYWRv
dzppbnNldCAwIDFweCAycHggcmdiYSgwLDAsMCwwLjEpLDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1
NSwwLjE1KTstd2Via2l0LXRyYW5zaXRpb246bm9uZTstbW96LXRyYW5zaXRpb246bm9uZTstby10
cmFuc2l0aW9uOm5vbmU7dHJhbnNpdGlvbjpub25lfS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXNl
YXJjaCAuc2VhcmNoLXF1ZXJ5Oi1tb3otcGxhY2Vob2xkZXJ7Y29sb3I6I2NjY30ubmF2YmFyLWlu
dmVyc2UgLm5hdmJhci1zZWFyY2ggLnNlYXJjaC1xdWVyeTotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7
Y29sb3I6I2NjY30ubmF2YmFyLWludmVyc2UgLm5hdmJhci1zZWFyY2ggLnNlYXJjaC1xdWVyeTo6
LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojY2NjfS5uYXZiYXItaW52ZXJzZSAubmF2
YmFyLXNlYXJjaCAuc2VhcmNoLXF1ZXJ5OmZvY3VzLC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXNl
YXJjaCAuc2VhcmNoLXF1ZXJ5LmZvY3VzZWR7cGFkZGluZzo1cHggMTVweDtjb2xvcjojMzMzO3Rl
eHQtc2hhZG93OjAgMXB4IDAgI2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjA7b3V0
bGluZTowOy13ZWJraXQtYm94LXNoYWRvdzowIDAgM3B4IHJnYmEoMCwwLDAsMC4xNSk7LW1vei1i
b3gtc2hhZG93OjAgMCAzcHggcmdiYSgwLDAsMCwwLjE1KTtib3gtc2hhZG93OjAgMCAzcHggcmdi
YSgwLDAsMCwwLjE1KX0ubmF2YmFyLWludmVyc2UgLmJ0bi1uYXZiYXJ7Y29sb3I6I2ZmZjt0ZXh0
LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpO2JhY2tncm91bmQtY29sb3I6IzBlMGUw
ZTsqYmFja2dyb3VuZC1jb2xvcjojMDQwNDA0O2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXIt
Z3JhZGllbnQodG9wLCMxNTE1MTUsIzA0MDQwNCk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdy
YWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oIzE1MTUxNSksdG8oIzA0MDQwNCkpO2JhY2tn
cm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCMxNTE1MTUsIzA0MDQwNCk7
YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCMxNTE1MTUsIzA0MDQwNCk7
YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCMxNTE1MTUsIzA0MDQw
NCk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyLWNvbG9yOiMwNDA0MDQgIzA0MDQw
NCAjMDAwO2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjEpIHJnYmEo
MCwwLDAsMC4yNSk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFk
aWVudChzdGFydENvbG9yc3RyPScjZmYxNTE1MTUnLGVuZENvbG9yc3RyPScjZmYwNDA0MDQnLEdy
YWRpZW50VHlwZT0wKTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0Lmdy
YWRpZW50KGVuYWJsZWQ9ZmFsc2UpfS5uYXZiYXItaW52ZXJzZSAuYnRuLW5hdmJhcjpob3Zlciwu
bmF2YmFyLWludmVyc2UgLmJ0bi1uYXZiYXI6YWN0aXZlLC5uYXZiYXItaW52ZXJzZSAuYnRuLW5h
dmJhci5hY3RpdmUsLm5hdmJhci1pbnZlcnNlIC5idG4tbmF2YmFyLmRpc2FibGVkLC5uYXZiYXIt
aW52ZXJzZSAuYnRuLW5hdmJhcltkaXNhYmxlZF17Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9y
OiMwNDA0MDQ7KmJhY2tncm91bmQtY29sb3I6IzAwMH0ubmF2YmFyLWludmVyc2UgLmJ0bi1uYXZi
YXI6YWN0aXZlLC5uYXZiYXItaW52ZXJzZSAuYnRuLW5hdmJhci5hY3RpdmV7YmFja2dyb3VuZC1j
b2xvcjojMDAwIFw5fS5icmVhZGNydW1ie3BhZGRpbmc6OHB4IDE1cHg7bWFyZ2luOjAgMCAyMHB4
O2xpc3Qtc3R5bGU6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjU7LXdlYmtpdC1ib3JkZXIt
cmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4fS5icmVh
ZGNydW1iPmxpe2Rpc3BsYXk6aW5saW5lLWJsb2NrOypkaXNwbGF5OmlubGluZTt0ZXh0LXNoYWRv
dzowIDFweCAwICNmZmY7Knpvb206MX0uYnJlYWRjcnVtYj5saT4uZGl2aWRlcntwYWRkaW5nOjAg
NXB4O2NvbG9yOiNjY2N9LmJyZWFkY3J1bWI+LmFjdGl2ZXtjb2xvcjojOTk5fS5wYWdpbmF0aW9u
e21hcmdpbjoyMHB4IDB9LnBhZ2luYXRpb24gdWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7KmRpc3Bs
YXk6aW5saW5lO21hcmdpbi1ib3R0b206MDttYXJnaW4tbGVmdDowOy13ZWJraXQtYm9yZGVyLXJh
ZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweDsqem9vbTox
Oy13ZWJraXQtYm94LXNoYWRvdzowIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KTstbW96LWJveC1z
aGFkb3c6MCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSk7Ym94LXNoYWRvdzowIDFweCAycHggcmdi
YSgwLDAsMCwwLjA1KX0ucGFnaW5hdGlvbiB1bD5saXtkaXNwbGF5OmlubGluZX0ucGFnaW5hdGlv
biB1bD5saT5hLC5wYWdpbmF0aW9uIHVsPmxpPnNwYW57ZmxvYXQ6bGVmdDtwYWRkaW5nOjRweCAx
MnB4O2xpbmUtaGVpZ2h0OjIwcHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZC1jb2xv
cjojZmZmO2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItbGVmdC13aWR0aDowfS5wYWdpbmF0
aW9uIHVsPmxpPmE6aG92ZXIsLnBhZ2luYXRpb24gdWw+LmFjdGl2ZT5hLC5wYWdpbmF0aW9uIHVs
Pi5hY3RpdmU+c3BhbntiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjV9LnBhZ2luYXRpb24gdWw+LmFj
dGl2ZT5hLC5wYWdpbmF0aW9uIHVsPi5hY3RpdmU+c3Bhbntjb2xvcjojOTk5O2N1cnNvcjpkZWZh
dWx0fS5wYWdpbmF0aW9uIHVsPi5kaXNhYmxlZD5zcGFuLC5wYWdpbmF0aW9uIHVsPi5kaXNhYmxl
ZD5hLC5wYWdpbmF0aW9uIHVsPi5kaXNhYmxlZD5hOmhvdmVye2NvbG9yOiM5OTk7Y3Vyc29yOmRl
ZmF1bHQ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ucGFnaW5hdGlvbiB1bD5saTpmaXJz
dC1jaGlsZD5hLC5wYWdpbmF0aW9uIHVsPmxpOmZpcnN0LWNoaWxkPnNwYW57Ym9yZGVyLWxlZnQt
d2lkdGg6MXB4Oy13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLWJv
dHRvbS1sZWZ0LXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOjRweDti
b3JkZXItdG9wLWxlZnQtcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDo0
cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQ6NHB4fS5wYWdpbmF0aW9uIHVsPmxpOmxhc3Qt
Y2hpbGQ+YSwucGFnaW5hdGlvbiB1bD5saTpsYXN0LWNoaWxkPnNwYW57LXdlYmtpdC1ib3JkZXIt
dG9wLXJpZ2h0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NHB4Oy13ZWJraXQt
Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NHB4O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVz
OjRweDstbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy1i
b3R0b21yaWdodDo0cHh9LnBhZ2luYXRpb24tY2VudGVyZWR7dGV4dC1hbGlnbjpjZW50ZXJ9LnBh
Z2luYXRpb24tcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0ucGFnaW5hdGlvbi1sYXJnZSB1bD5saT5h
LC5wYWdpbmF0aW9uLWxhcmdlIHVsPmxpPnNwYW57cGFkZGluZzoxMXB4IDE5cHg7Zm9udC1zaXpl
OjE3LjVweH0ucGFnaW5hdGlvbi1sYXJnZSB1bD5saTpmaXJzdC1jaGlsZD5hLC5wYWdpbmF0aW9u
LWxhcmdlIHVsPmxpOmZpcnN0LWNoaWxkPnNwYW57LXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQt
cmFkaXVzOjZweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjZweDstd2Via2l0LWJvcmRlci10
b3AtbGVmdC1yYWRpdXM6NnB4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6NnB4Oy1tb3otYm9yZGVy
LXJhZGl1cy1ib3R0b21sZWZ0OjZweDstbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdDo2cHh9LnBh
Z2luYXRpb24tbGFyZ2UgdWw+bGk6bGFzdC1jaGlsZD5hLC5wYWdpbmF0aW9uLWxhcmdlIHVsPmxp
Omxhc3QtY2hpbGQ+c3Bhbnstd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOjZweDtib3Jk
ZXItdG9wLXJpZ2h0LXJhZGl1czo2cHg7LXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1
czo2cHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NnB4Oy1tb3otYm9yZGVyLXJhZGl1cy10
b3ByaWdodDo2cHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0OjZweH0ucGFnaW5hdGlv
bi1taW5pIHVsPmxpOmZpcnN0LWNoaWxkPmEsLnBhZ2luYXRpb24tc21hbGwgdWw+bGk6Zmlyc3Qt
Y2hpbGQ+YSwucGFnaW5hdGlvbi1taW5pIHVsPmxpOmZpcnN0LWNoaWxkPnNwYW4sLnBhZ2luYXRp
b24tc21hbGwgdWw+bGk6Zmlyc3QtY2hpbGQ+c3Bhbnstd2Via2l0LWJvcmRlci1ib3R0b20tbGVm
dC1yYWRpdXM6M3B4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6M3B4Oy13ZWJraXQtYm9yZGVy
LXRvcC1sZWZ0LXJhZGl1czozcHg7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czozcHg7LW1vei1ib3Jk
ZXItcmFkaXVzLWJvdHRvbWxlZnQ6M3B4Oy1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0OjNweH0u
cGFnaW5hdGlvbi1taW5pIHVsPmxpOmxhc3QtY2hpbGQ+YSwucGFnaW5hdGlvbi1zbWFsbCB1bD5s
aTpsYXN0LWNoaWxkPmEsLnBhZ2luYXRpb24tbWluaSB1bD5saTpsYXN0LWNoaWxkPnNwYW4sLnBh
Z2luYXRpb24tc21hbGwgdWw+bGk6bGFzdC1jaGlsZD5zcGFuey13ZWJraXQtYm9yZGVyLXRvcC1y
aWdodC1yYWRpdXM6M3B4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjNweDstd2Via2l0LWJvcmRl
ci1ib3R0b20tcmlnaHQtcmFkaXVzOjNweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czozcHg7
LW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OjNweDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9t
cmlnaHQ6M3B4fS5wYWdpbmF0aW9uLXNtYWxsIHVsPmxpPmEsLnBhZ2luYXRpb24tc21hbGwgdWw+
bGk+c3BhbntwYWRkaW5nOjJweCAxMHB4O2ZvbnQtc2l6ZToxMS45cHh9LnBhZ2luYXRpb24tbWlu
aSB1bD5saT5hLC5wYWdpbmF0aW9uLW1pbmkgdWw+bGk+c3BhbntwYWRkaW5nOjAgNnB4O2ZvbnQt
c2l6ZToxMC41cHh9LnBhZ2Vye21hcmdpbjoyMHB4IDA7dGV4dC1hbGlnbjpjZW50ZXI7bGlzdC1z
dHlsZTpub25lOyp6b29tOjF9LnBhZ2VyOmJlZm9yZSwucGFnZXI6YWZ0ZXJ7ZGlzcGxheTp0YWJs
ZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9LnBhZ2VyOmFmdGVye2NsZWFyOmJvdGh9LnBhZ2Vy
IGxpe2Rpc3BsYXk6aW5saW5lfS5wYWdlciBsaT5hLC5wYWdlciBsaT5zcGFue2Rpc3BsYXk6aW5s
aW5lLWJsb2NrO3BhZGRpbmc6NXB4IDE0cHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjox
cHggc29saWQgI2RkZDstd2Via2l0LWJvcmRlci1yYWRpdXM6MTVweDstbW96LWJvcmRlci1yYWRp
dXM6MTVweDtib3JkZXItcmFkaXVzOjE1cHh9LnBhZ2VyIGxpPmE6aG92ZXJ7dGV4dC1kZWNvcmF0
aW9uOm5vbmU7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1fS5wYWdlciAubmV4dD5hLC5wYWdlciAu
bmV4dD5zcGFue2Zsb2F0OnJpZ2h0fS5wYWdlciAucHJldmlvdXM+YSwucGFnZXIgLnByZXZpb3Vz
PnNwYW57ZmxvYXQ6bGVmdH0ucGFnZXIgLmRpc2FibGVkPmEsLnBhZ2VyIC5kaXNhYmxlZD5hOmhv
dmVyLC5wYWdlciAuZGlzYWJsZWQ+c3Bhbntjb2xvcjojOTk5O2N1cnNvcjpkZWZhdWx0O2JhY2tn
cm91bmQtY29sb3I6I2ZmZn0ubW9kYWwtYmFja2Ryb3B7cG9zaXRpb246Zml4ZWQ7dG9wOjA7cmln
aHQ6MDtib3R0b206MDtsZWZ0OjA7ei1pbmRleDoxMDQwO2JhY2tncm91bmQtY29sb3I6IzAwMH0u
bW9kYWwtYmFja2Ryb3AuZmFkZXtvcGFjaXR5OjB9Lm1vZGFsLWJhY2tkcm9wLC5tb2RhbC1iYWNr
ZHJvcC5mYWRlLmlue29wYWNpdHk6Ljg7ZmlsdGVyOmFscGhhKG9wYWNpdHk9ODApfS5tb2RhbHtw
b3NpdGlvbjpmaXhlZDt0b3A6MTAlO2xlZnQ6NTAlO3otaW5kZXg6MTA1MDt3aWR0aDo1NjBweDtt
YXJnaW4tbGVmdDotMjgwcHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQg
Izk5OTtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMC4zKTsqYm9yZGVyOjFweCBzb2xpZCAj
OTk5Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo2cHg7LW1vei1ib3JkZXItcmFkaXVzOjZweDtib3Jk
ZXItcmFkaXVzOjZweDtvdXRsaW5lOjA7LXdlYmtpdC1ib3gtc2hhZG93OjAgM3B4IDdweCByZ2Jh
KDAsMCwwLDAuMyk7LW1vei1ib3gtc2hhZG93OjAgM3B4IDdweCByZ2JhKDAsMCwwLDAuMyk7Ym94
LXNoYWRvdzowIDNweCA3cHggcmdiYSgwLDAsMCwwLjMpOy13ZWJraXQtYmFja2dyb3VuZC1jbGlw
OnBhZGRpbmctYm94Oy1tb3otYmFja2dyb3VuZC1jbGlwOnBhZGRpbmctYm94O2JhY2tncm91bmQt
Y2xpcDpwYWRkaW5nLWJveH0ubW9kYWwuZmFkZXt0b3A6LTI1JTstd2Via2l0LXRyYW5zaXRpb246
b3BhY2l0eSAuM3MgbGluZWFyLHRvcCAuM3MgZWFzZS1vdXQ7LW1vei10cmFuc2l0aW9uOm9wYWNp
dHkgLjNzIGxpbmVhcix0b3AgLjNzIGVhc2Utb3V0Oy1vLXRyYW5zaXRpb246b3BhY2l0eSAuM3Mg
bGluZWFyLHRvcCAuM3MgZWFzZS1vdXQ7dHJhbnNpdGlvbjpvcGFjaXR5IC4zcyBsaW5lYXIsdG9w
IC4zcyBlYXNlLW91dH0ubW9kYWwuZmFkZS5pbnt0b3A6MTAlfS5tb2RhbC1oZWFkZXJ7cGFkZGlu
Zzo5cHggMTVweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWVlfS5tb2RhbC1oZWFkZXIgLmNs
b3Nle21hcmdpbi10b3A6MnB4fS5tb2RhbC1oZWFkZXIgaDN7bWFyZ2luOjA7bGluZS1oZWlnaHQ6
MzBweH0ubW9kYWwtYm9keXtwb3NpdGlvbjpyZWxhdGl2ZTttYXgtaGVpZ2h0OjQwMHB4O3BhZGRp
bmc6MTVweDtvdmVyZmxvdy15OmF1dG99Lm1vZGFsLWZvcm17bWFyZ2luLWJvdHRvbTowfS5tb2Rh
bC1mb290ZXJ7cGFkZGluZzoxNHB4IDE1cHggMTVweDttYXJnaW4tYm90dG9tOjA7dGV4dC1hbGln
bjpyaWdodDtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjU7Ym9yZGVyLXRvcDoxcHggc29saWQgI2Rk
ZDstd2Via2l0LWJvcmRlci1yYWRpdXM6MCAwIDZweCA2cHg7LW1vei1ib3JkZXItcmFkaXVzOjAg
MCA2cHggNnB4O2JvcmRlci1yYWRpdXM6MCAwIDZweCA2cHg7Knpvb206MTstd2Via2l0LWJveC1z
aGFkb3c6aW5zZXQgMCAxcHggMCAjZmZmOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAwICNm
ZmY7Ym94LXNoYWRvdzppbnNldCAwIDFweCAwICNmZmZ9Lm1vZGFsLWZvb3RlcjpiZWZvcmUsLm1v
ZGFsLWZvb3RlcjphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0u
bW9kYWwtZm9vdGVyOmFmdGVye2NsZWFyOmJvdGh9Lm1vZGFsLWZvb3RlciAuYnRuKy5idG57bWFy
Z2luLWJvdHRvbTowO21hcmdpbi1sZWZ0OjVweH0ubW9kYWwtZm9vdGVyIC5idG4tZ3JvdXAgLmJ0
bisuYnRue21hcmdpbi1sZWZ0Oi0xcHh9Lm1vZGFsLWZvb3RlciAuYnRuLWJsb2NrKy5idG4tYmxv
Y2t7bWFyZ2luLWxlZnQ6MH0udG9vbHRpcHtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMzA7
ZGlzcGxheTpibG9jaztwYWRkaW5nOjVweDtmb250LXNpemU6MTFweDtvcGFjaXR5OjA7ZmlsdGVy
OmFscGhhKG9wYWNpdHk9MCk7dmlzaWJpbGl0eTp2aXNpYmxlfS50b29sdGlwLmlue29wYWNpdHk6
Ljg7ZmlsdGVyOmFscGhhKG9wYWNpdHk9ODApfS50b29sdGlwLnRvcHttYXJnaW4tdG9wOi0zcHh9
LnRvb2x0aXAucmlnaHR7bWFyZ2luLWxlZnQ6M3B4fS50b29sdGlwLmJvdHRvbXttYXJnaW4tdG9w
OjNweH0udG9vbHRpcC5sZWZ0e21hcmdpbi1sZWZ0Oi0zcHh9LnRvb2x0aXAtaW5uZXJ7bWF4LXdp
ZHRoOjIwMHB4O3BhZGRpbmc6M3B4IDhweDtjb2xvcjojZmZmO3RleHQtYWxpZ246Y2VudGVyO3Rl
eHQtZGVjb3JhdGlvbjpub25lO2JhY2tncm91bmQtY29sb3I6IzAwMDstd2Via2l0LWJvcmRlci1y
YWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHh9LnRvb2x0
aXAtYXJyb3d7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItY29sb3I6
dHJhbnNwYXJlbnQ7Ym9yZGVyLXN0eWxlOnNvbGlkfS50b29sdGlwLnRvcCAudG9vbHRpcC1hcnJv
d3tib3R0b206MDtsZWZ0OjUwJTttYXJnaW4tbGVmdDotNXB4O2JvcmRlci10b3AtY29sb3I6IzAw
MDtib3JkZXItd2lkdGg6NXB4IDVweCAwfS50b29sdGlwLnJpZ2h0IC50b29sdGlwLWFycm93e3Rv
cDo1MCU7bGVmdDowO21hcmdpbi10b3A6LTVweDtib3JkZXItcmlnaHQtY29sb3I6IzAwMDtib3Jk
ZXItd2lkdGg6NXB4IDVweCA1cHggMH0udG9vbHRpcC5sZWZ0IC50b29sdGlwLWFycm93e3RvcDo1
MCU7cmlnaHQ6MDttYXJnaW4tdG9wOi01cHg7Ym9yZGVyLWxlZnQtY29sb3I6IzAwMDtib3JkZXIt
d2lkdGg6NXB4IDAgNXB4IDVweH0udG9vbHRpcC5ib3R0b20gLnRvb2x0aXAtYXJyb3d7dG9wOjA7
bGVmdDo1MCU7bWFyZ2luLWxlZnQ6LTVweDtib3JkZXItYm90dG9tLWNvbG9yOiMwMDA7Ym9yZGVy
LXdpZHRoOjAgNXB4IDVweH0ucG9wb3Zlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7
ei1pbmRleDoxMDEwO2Rpc3BsYXk6bm9uZTt3aWR0aDoyMzZweDtwYWRkaW5nOjFweDt0ZXh0LWFs
aWduOmxlZnQ7d2hpdGUtc3BhY2U6bm9ybWFsO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6
MXB4IHNvbGlkICNjY2M7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDAsMCwwLDAuMik7LXdlYmtpdC1i
b3JkZXItcmFkaXVzOjZweDstbW96LWJvcmRlci1yYWRpdXM6NnB4O2JvcmRlci1yYWRpdXM6NnB4
Oy13ZWJraXQtYm94LXNoYWRvdzowIDVweCAxMHB4IHJnYmEoMCwwLDAsMC4yKTstbW96LWJveC1z
aGFkb3c6MCA1cHggMTBweCByZ2JhKDAsMCwwLDAuMik7Ym94LXNoYWRvdzowIDVweCAxMHB4IHJn
YmEoMCwwLDAsMC4yKTstd2Via2l0LWJhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveDstbW96LWJh
Y2tncm91bmQtY2xpcDpwYWRkaW5nO2JhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveH0ucG9wb3Zl
ci50b3B7bWFyZ2luLXRvcDotMTBweH0ucG9wb3Zlci5yaWdodHttYXJnaW4tbGVmdDoxMHB4fS5w
b3BvdmVyLmJvdHRvbXttYXJnaW4tdG9wOjEwcHh9LnBvcG92ZXIubGVmdHttYXJnaW4tbGVmdDot
MTBweH0ucG9wb3Zlci10aXRsZXtwYWRkaW5nOjhweCAxNHB4O21hcmdpbjowO2ZvbnQtc2l6ZTox
NHB4O2ZvbnQtd2VpZ2h0Om5vcm1hbDtsaW5lLWhlaWdodDoxOHB4O2JhY2tncm91bmQtY29sb3I6
I2Y3ZjdmNztib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViOy13ZWJraXQtYm9yZGVyLXJh
ZGl1czo1cHggNXB4IDAgMDstbW96LWJvcmRlci1yYWRpdXM6NXB4IDVweCAwIDA7Ym9yZGVyLXJh
ZGl1czo1cHggNXB4IDAgMH0ucG9wb3Zlci1jb250ZW50e3BhZGRpbmc6OXB4IDE0cHh9LnBvcG92
ZXIgLmFycm93LC5wb3BvdmVyIC5hcnJvdzphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5
OmJsb2NrO3dpZHRoOjA7aGVpZ2h0OjA7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1z
dHlsZTpzb2xpZH0ucG9wb3ZlciAuYXJyb3d7Ym9yZGVyLXdpZHRoOjExcHh9LnBvcG92ZXIgLmFy
cm93OmFmdGVye2JvcmRlci13aWR0aDoxMHB4O2NvbnRlbnQ6IiJ9LnBvcG92ZXIudG9wIC5hcnJv
d3tib3R0b206LTExcHg7bGVmdDo1MCU7bWFyZ2luLWxlZnQ6LTExcHg7Ym9yZGVyLXRvcC1jb2xv
cjojOTk5O2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwwLjI1KTtib3JkZXItYm90dG9tLXdp
ZHRoOjB9LnBvcG92ZXIudG9wIC5hcnJvdzphZnRlcntib3R0b206MXB4O21hcmdpbi1sZWZ0Oi0x
MHB4O2JvcmRlci10b3AtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tLXdpZHRoOjB9LnBvcG92ZXIu
cmlnaHQgLmFycm93e3RvcDo1MCU7bGVmdDotMTFweDttYXJnaW4tdG9wOi0xMXB4O2JvcmRlci1y
aWdodC1jb2xvcjojOTk5O2JvcmRlci1yaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDAuMjUpO2JvcmRl
ci1sZWZ0LXdpZHRoOjB9LnBvcG92ZXIucmlnaHQgLmFycm93OmFmdGVye2JvdHRvbTotMTBweDts
ZWZ0OjFweDtib3JkZXItcmlnaHQtY29sb3I6I2ZmZjtib3JkZXItbGVmdC13aWR0aDowfS5wb3Bv
dmVyLmJvdHRvbSAuYXJyb3d7dG9wOi0xMXB4O2xlZnQ6NTAlO21hcmdpbi1sZWZ0Oi0xMXB4O2Jv
cmRlci1ib3R0b20tY29sb3I6Izk5OTtib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMCwwLDAsMC4y
NSk7Ym9yZGVyLXRvcC13aWR0aDowfS5wb3BvdmVyLmJvdHRvbSAuYXJyb3c6YWZ0ZXJ7dG9wOjFw
eDttYXJnaW4tbGVmdDotMTBweDtib3JkZXItYm90dG9tLWNvbG9yOiNmZmY7Ym9yZGVyLXRvcC13
aWR0aDowfS5wb3BvdmVyLmxlZnQgLmFycm93e3RvcDo1MCU7cmlnaHQ6LTExcHg7bWFyZ2luLXRv
cDotMTFweDtib3JkZXItbGVmdC1jb2xvcjojOTk5O2JvcmRlci1sZWZ0LWNvbG9yOnJnYmEoMCww
LDAsMC4yNSk7Ym9yZGVyLXJpZ2h0LXdpZHRoOjB9LnBvcG92ZXIubGVmdCAuYXJyb3c6YWZ0ZXJ7
cmlnaHQ6MXB4O2JvdHRvbTotMTBweDtib3JkZXItbGVmdC1jb2xvcjojZmZmO2JvcmRlci1yaWdo
dC13aWR0aDowfS50aHVtYm5haWxze21hcmdpbi1sZWZ0Oi0yMHB4O2xpc3Qtc3R5bGU6bm9uZTsq
em9vbToxfS50aHVtYm5haWxzOmJlZm9yZSwudGh1bWJuYWlsczphZnRlcntkaXNwbGF5OnRhYmxl
O2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0udGh1bWJuYWlsczphZnRlcntjbGVhcjpib3RofS5y
b3ctZmx1aWQgLnRodW1ibmFpbHN7bWFyZ2luLWxlZnQ6MH0udGh1bWJuYWlscz5saXtmbG9hdDps
ZWZ0O21hcmdpbi1ib3R0b206MjBweDttYXJnaW4tbGVmdDoyMHB4fS50aHVtYm5haWx7ZGlzcGxh
eTpibG9jaztwYWRkaW5nOjRweDtsaW5lLWhlaWdodDoyMHB4O2JvcmRlcjoxcHggc29saWQgI2Rk
ZDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVy
LXJhZGl1czo0cHg7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuMDU1
KTstbW96LWJveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsMC4wNTUpO2JveC1zaGFkb3c6
MCAxcHggM3B4IHJnYmEoMCwwLDAsMC4wNTUpOy13ZWJraXQtdHJhbnNpdGlvbjphbGwgLjJzIGVh
c2UtaW4tb3V0Oy1tb3otdHJhbnNpdGlvbjphbGwgLjJzIGVhc2UtaW4tb3V0Oy1vLXRyYW5zaXRp
b246YWxsIC4ycyBlYXNlLWluLW91dDt0cmFuc2l0aW9uOmFsbCAuMnMgZWFzZS1pbi1vdXR9YS50
aHVtYm5haWw6aG92ZXJ7Ym9yZGVyLWNvbG9yOiMwOGM7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4
IDRweCByZ2JhKDAsMTA1LDIxNCwwLjI1KTstbW96LWJveC1zaGFkb3c6MCAxcHggNHB4IHJnYmEo
MCwxMDUsMjE0LDAuMjUpO2JveC1zaGFkb3c6MCAxcHggNHB4IHJnYmEoMCwxMDUsMjE0LDAuMjUp
fS50aHVtYm5haWw+aW1ne2Rpc3BsYXk6YmxvY2s7bWF4LXdpZHRoOjEwMCU7bWFyZ2luLXJpZ2h0
OmF1dG87bWFyZ2luLWxlZnQ6YXV0b30udGh1bWJuYWlsIC5jYXB0aW9ue3BhZGRpbmc6OXB4O2Nv
bG9yOiM1NTV9Lm1lZGlhLC5tZWRpYS1ib2R5e292ZXJmbG93OmhpZGRlbjsqb3ZlcmZsb3c6dmlz
aWJsZTt6b29tOjF9Lm1lZGlhLC5tZWRpYSAubWVkaWF7bWFyZ2luLXRvcDoxNXB4fS5tZWRpYTpm
aXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9Lm1lZGlhLW9iamVjdHtkaXNwbGF5OmJsb2NrfS5tZWRp
YS1oZWFkaW5ne21hcmdpbjowIDAgNXB4fS5tZWRpYSAucHVsbC1sZWZ0e21hcmdpbi1yaWdodDox
MHB4fS5tZWRpYSAucHVsbC1yaWdodHttYXJnaW4tbGVmdDoxMHB4fS5tZWRpYS1saXN0e21hcmdp
bi1sZWZ0OjA7bGlzdC1zdHlsZTpub25lfS5sYWJlbCwuYmFkZ2V7ZGlzcGxheTppbmxpbmUtYmxv
Y2s7cGFkZGluZzoycHggNHB4O2ZvbnQtc2l6ZToxMS44NDRweDtmb250LXdlaWdodDpib2xkO2xp
bmUtaGVpZ2h0OjE0cHg7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCww
LDAuMjUpO3doaXRlLXNwYWNlOm5vd3JhcDt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTtiYWNrZ3Jv
dW5kLWNvbG9yOiM5OTl9LmxhYmVsey13ZWJraXQtYm9yZGVyLXJhZGl1czozcHg7LW1vei1ib3Jk
ZXItcmFkaXVzOjNweDtib3JkZXItcmFkaXVzOjNweH0uYmFkZ2V7cGFkZGluZy1yaWdodDo5cHg7
cGFkZGluZy1sZWZ0OjlweDstd2Via2l0LWJvcmRlci1yYWRpdXM6OXB4Oy1tb3otYm9yZGVyLXJh
ZGl1czo5cHg7Ym9yZGVyLXJhZGl1czo5cHh9LmxhYmVsOmVtcHR5LC5iYWRnZTplbXB0eXtkaXNw
bGF5Om5vbmV9YS5sYWJlbDpob3ZlcixhLmJhZGdlOmhvdmVye2NvbG9yOiNmZmY7dGV4dC1kZWNv
cmF0aW9uOm5vbmU7Y3Vyc29yOnBvaW50ZXJ9LmxhYmVsLWltcG9ydGFudCwuYmFkZ2UtaW1wb3J0
YW50e2JhY2tncm91bmQtY29sb3I6I2I5NGE0OH0ubGFiZWwtaW1wb3J0YW50W2hyZWZdLC5iYWRn
ZS1pbXBvcnRhbnRbaHJlZl17YmFja2dyb3VuZC1jb2xvcjojOTUzYjM5fS5sYWJlbC13YXJuaW5n
LC5iYWRnZS13YXJuaW5ne2JhY2tncm91bmQtY29sb3I6I2Y4OTQwNn0ubGFiZWwtd2FybmluZ1to
cmVmXSwuYmFkZ2Utd2FybmluZ1tocmVmXXtiYWNrZ3JvdW5kLWNvbG9yOiNjNjc2MDV9LmxhYmVs
LXN1Y2Nlc3MsLmJhZGdlLXN1Y2Nlc3N7YmFja2dyb3VuZC1jb2xvcjojNDY4ODQ3fS5sYWJlbC1z
dWNjZXNzW2hyZWZdLC5iYWRnZS1zdWNjZXNzW2hyZWZde2JhY2tncm91bmQtY29sb3I6IzM1NjYz
NX0ubGFiZWwtaW5mbywuYmFkZ2UtaW5mb3tiYWNrZ3JvdW5kLWNvbG9yOiMzYTg3YWR9LmxhYmVs
LWluZm9baHJlZl0sLmJhZGdlLWluZm9baHJlZl17YmFja2dyb3VuZC1jb2xvcjojMmQ2OTg3fS5s
YWJlbC1pbnZlcnNlLC5iYWRnZS1pbnZlcnNle2JhY2tncm91bmQtY29sb3I6IzMzM30ubGFiZWwt
aW52ZXJzZVtocmVmXSwuYmFkZ2UtaW52ZXJzZVtocmVmXXtiYWNrZ3JvdW5kLWNvbG9yOiMxYTFh
MWF9LmJ0biAubGFiZWwsLmJ0biAuYmFkZ2V7cG9zaXRpb246cmVsYXRpdmU7dG9wOi0xcHh9LmJ0
bi1taW5pIC5sYWJlbCwuYnRuLW1pbmkgLmJhZGdle3RvcDowfUAtd2Via2l0LWtleWZyYW1lcyBw
cm9ncmVzcy1iYXItc3RyaXBlc3tmcm9te2JhY2tncm91bmQtcG9zaXRpb246NDBweCAwfXRve2Jh
Y2tncm91bmQtcG9zaXRpb246MCAwfX1ALW1vei1rZXlmcmFtZXMgcHJvZ3Jlc3MtYmFyLXN0cmlw
ZXN7ZnJvbXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjQwcHggMH10b3tiYWNrZ3JvdW5kLXBvc2l0aW9u
OjAgMH19QC1tcy1rZXlmcmFtZXMgcHJvZ3Jlc3MtYmFyLXN0cmlwZXN7ZnJvbXtiYWNrZ3JvdW5k
LXBvc2l0aW9uOjQwcHggMH10b3tiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMH19QC1vLWtleWZyYW1l
cyBwcm9ncmVzcy1iYXItc3RyaXBlc3tmcm9te2JhY2tncm91bmQtcG9zaXRpb246MCAwfXRve2Jh
Y2tncm91bmQtcG9zaXRpb246NDBweCAwfX1Aa2V5ZnJhbWVzIHByb2dyZXNzLWJhci1zdHJpcGVz
e2Zyb217YmFja2dyb3VuZC1wb3NpdGlvbjo0MHB4IDB9dG97YmFja2dyb3VuZC1wb3NpdGlvbjow
IDB9fS5wcm9ncmVzc3toZWlnaHQ6MjBweDttYXJnaW4tYm90dG9tOjIwcHg7b3ZlcmZsb3c6aGlk
ZGVuO2JhY2tncm91bmQtY29sb3I6I2Y3ZjdmNztiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFy
LWdyYWRpZW50KHRvcCwjZjVmNWY1LCNmOWY5ZjkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1n
cmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCNmNWY1ZjUpLHRvKCNmOWY5ZjkpKTtiYWNr
Z3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjZjVmNWY1LCNmOWY5Zjkp
O2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjZjVmNWY1LCNmOWY5Zjkp
O2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjZjVmNWY1LCNmOWY5
ZjkpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7
LW1vei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweDtmaWx0ZXI6cHJvZ2lkOkRY
SW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZmY1ZjVm
NScsZW5kQ29sb3JzdHI9JyNmZmY5ZjlmOScsR3JhZGllbnRUeXBlPTApOy13ZWJraXQtYm94LXNo
YWRvdzppbnNldCAwIDFweCAycHggcmdiYSgwLDAsMCwwLjEpOy1tb3otYm94LXNoYWRvdzppbnNl
dCAwIDFweCAycHggcmdiYSgwLDAsMCwwLjEpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMnB4IHJn
YmEoMCwwLDAsMC4xKX0ucHJvZ3Jlc3MgLmJhcntmbG9hdDpsZWZ0O3dpZHRoOjA7aGVpZ2h0OjEw
MCU7Zm9udC1zaXplOjEycHg7Y29sb3I6I2ZmZjt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LXNoYWRv
dzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpO2JhY2tncm91bmQtY29sb3I6IzBlOTBkMjtiYWNr
Z3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjMTQ5YmRmLCMwNDgwYmUpO2Jh
Y2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCMx
NDliZGYpLHRvKCMwNDgwYmUpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRp
ZW50KHRvcCwjMTQ5YmRmLCMwNDgwYmUpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRp
ZW50KHRvcCwjMTQ5YmRmLCMwNDgwYmUpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50
KHRvIGJvdHRvbSwjMTQ5YmRmLCMwNDgwYmUpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2Zp
bHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xv
cnN0cj0nI2ZmMTQ5YmRmJyxlbmRDb2xvcnN0cj0nI2ZmMDQ4MGJlJyxHcmFkaWVudFR5cGU9MCk7
LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgLTFweCAwIHJnYmEoMCwwLDAsMC4xNSk7LW1vei1i
b3gtc2hhZG93Omluc2V0IDAgLTFweCAwIHJnYmEoMCwwLDAsMC4xNSk7Ym94LXNoYWRvdzppbnNl
dCAwIC0xcHggMCByZ2JhKDAsMCwwLDAuMTUpOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94
Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDstd2Via2l0
LXRyYW5zaXRpb246d2lkdGggLjZzIGVhc2U7LW1vei10cmFuc2l0aW9uOndpZHRoIC42cyBlYXNl
Oy1vLXRyYW5zaXRpb246d2lkdGggLjZzIGVhc2U7dHJhbnNpdGlvbjp3aWR0aCAuNnMgZWFzZX0u
cHJvZ3Jlc3MgLmJhcisuYmFyey13ZWJraXQtYm94LXNoYWRvdzppbnNldCAxcHggMCAwIHJnYmEo
MCwwLDAsMC4xNSksaW5zZXQgMCAtMXB4IDAgcmdiYSgwLDAsMCwwLjE1KTstbW96LWJveC1zaGFk
b3c6aW5zZXQgMXB4IDAgMCByZ2JhKDAsMCwwLDAuMTUpLGluc2V0IDAgLTFweCAwIHJnYmEoMCww
LDAsMC4xNSk7Ym94LXNoYWRvdzppbnNldCAxcHggMCAwIHJnYmEoMCwwLDAsMC4xNSksaW5zZXQg
MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjE1KX0ucHJvZ3Jlc3Mtc3RyaXBlZCAuYmFye2JhY2tncm91
bmQtY29sb3I6IzE0OWJkZjtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFy
LDAgMTAwJSwxMDAlIDAsY29sb3Itc3RvcCgwLjI1LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkpLGNv
bG9yLXN0b3AoMC4yNSx0cmFuc3BhcmVudCksY29sb3Itc3RvcCgwLjUsdHJhbnNwYXJlbnQpLGNv
bG9yLXN0b3AoMC41LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkpLGNvbG9yLXN0b3AoMC43NSxyZ2Jh
KDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuNzUsdHJhbnNwYXJlbnQpLHRvKHRyYW5z
cGFyZW50KSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCg0NWRlZyxy
Z2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAl
LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRy
YW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1n
cmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUs
dHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwy
NTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFn
ZTotby1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJh
bnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxy
Z2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2Jh
Y2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4x
NSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSww
LjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5z
cGFyZW50KTstd2Via2l0LWJhY2tncm91bmQtc2l6ZTo0MHB4IDQwcHg7LW1vei1iYWNrZ3JvdW5k
LXNpemU6NDBweCA0MHB4Oy1vLWJhY2tncm91bmQtc2l6ZTo0MHB4IDQwcHg7YmFja2dyb3VuZC1z
aXplOjQwcHggNDBweH0ucHJvZ3Jlc3MuYWN0aXZlIC5iYXJ7LXdlYmtpdC1hbmltYXRpb246cHJv
Z3Jlc3MtYmFyLXN0cmlwZXMgMnMgbGluZWFyIGluZmluaXRlOy1tb3otYW5pbWF0aW9uOnByb2dy
ZXNzLWJhci1zdHJpcGVzIDJzIGxpbmVhciBpbmZpbml0ZTstbXMtYW5pbWF0aW9uOnByb2dyZXNz
LWJhci1zdHJpcGVzIDJzIGxpbmVhciBpbmZpbml0ZTstby1hbmltYXRpb246cHJvZ3Jlc3MtYmFy
LXN0cmlwZXMgMnMgbGluZWFyIGluZmluaXRlO2FuaW1hdGlvbjpwcm9ncmVzcy1iYXItc3RyaXBl
cyAycyBsaW5lYXIgaW5maW5pdGV9LnByb2dyZXNzLWRhbmdlciAuYmFyLC5wcm9ncmVzcyAuYmFy
LWRhbmdlcntiYWNrZ3JvdW5kLWNvbG9yOiNkZDUxNGM7YmFja2dyb3VuZC1pbWFnZTotbW96LWxp
bmVhci1ncmFkaWVudCh0b3AsI2VlNWY1YiwjYzQzYzM1KTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJr
aXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjZWU1ZjViKSx0bygjYzQzYzM1KSk7
YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsI2VlNWY1YiwjYzQz
YzM1KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsI2VlNWY1YiwjYzQz
YzM1KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sI2VlNWY1Yiwj
YzQzYzM1KTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VU
cmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZmVlNWY1YicsZW5k
Q29sb3JzdHI9JyNmZmM0M2MzNScsR3JhZGllbnRUeXBlPTApfS5wcm9ncmVzcy1kYW5nZXIucHJv
Z3Jlc3Mtc3RyaXBlZCAuYmFyLC5wcm9ncmVzcy1zdHJpcGVkIC5iYXItZGFuZ2Vye2JhY2tncm91
bmQtY29sb3I6I2VlNWY1YjtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFy
LDAgMTAwJSwxMDAlIDAsY29sb3Itc3RvcCgwLjI1LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkpLGNv
bG9yLXN0b3AoMC4yNSx0cmFuc3BhcmVudCksY29sb3Itc3RvcCgwLjUsdHJhbnNwYXJlbnQpLGNv
bG9yLXN0b3AoMC41LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkpLGNvbG9yLXN0b3AoMC43NSxyZ2Jh
KDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuNzUsdHJhbnNwYXJlbnQpLHRvKHRyYW5z
cGFyZW50KSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCg0NWRlZyxy
Z2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAl
LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRy
YW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1n
cmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUs
dHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwy
NTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFn
ZTotby1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJh
bnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxy
Z2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2Jh
Y2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4x
NSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSww
LjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5z
cGFyZW50KX0ucHJvZ3Jlc3Mtc3VjY2VzcyAuYmFyLC5wcm9ncmVzcyAuYmFyLXN1Y2Nlc3N7YmFj
a2dyb3VuZC1jb2xvcjojNWViOTVlO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGll
bnQodG9wLCM2MmM0NjIsIzU3YTk1Nyk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50
KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oIzYyYzQ2MiksdG8oIzU3YTk1NykpO2JhY2tncm91bmQt
aW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCM2MmM0NjIsIzU3YTk1Nyk7YmFja2dy
b3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCM2MmM0NjIsIzU3YTk1Nyk7YmFja2dy
b3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCM2MmM0NjIsIzU3YTk1Nyk7YmFj
a2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1p
Y3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmY2MmM0NjInLGVuZENvbG9yc3RyPScj
ZmY1N2E5NTcnLEdyYWRpZW50VHlwZT0wKX0ucHJvZ3Jlc3Mtc3VjY2Vzcy5wcm9ncmVzcy1zdHJp
cGVkIC5iYXIsLnByb2dyZXNzLXN0cmlwZWQgLmJhci1zdWNjZXNze2JhY2tncm91bmQtY29sb3I6
IzYyYzQ2MjtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMTAwJSwx
MDAlIDAsY29sb3Itc3RvcCgwLjI1LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkpLGNvbG9yLXN0b3Ao
MC4yNSx0cmFuc3BhcmVudCksY29sb3Itc3RvcCgwLjUsdHJhbnNwYXJlbnQpLGNvbG9yLXN0b3Ao
MC41LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkpLGNvbG9yLXN0b3AoMC43NSxyZ2JhKDI1NSwyNTUs
MjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuNzUsdHJhbnNwYXJlbnQpLHRvKHRyYW5zcGFyZW50KSk7
YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwy
NTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1
LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50
IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCg0
NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJl
bnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkg
NzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotby1saW5l
YXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQg
MjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwy
NTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQt
aW1hZ2U6bGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRy
YW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUs
cmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KX0u
cHJvZ3Jlc3MtaW5mbyAuYmFyLC5wcm9ncmVzcyAuYmFyLWluZm97YmFja2dyb3VuZC1jb2xvcjoj
NGJiMWNmO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCM1YmMwZGUs
IzMzOWJiOSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAx
MDAlLGZyb20oIzViYzBkZSksdG8oIzMzOWJiOSkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1s
aW5lYXItZ3JhZGllbnQodG9wLCM1YmMwZGUsIzMzOWJiOSk7YmFja2dyb3VuZC1pbWFnZTotby1s
aW5lYXItZ3JhZGllbnQodG9wLCM1YmMwZGUsIzMzOWJiOSk7YmFja2dyb3VuZC1pbWFnZTpsaW5l
YXItZ3JhZGllbnQodG8gYm90dG9tLCM1YmMwZGUsIzMzOWJiOSk7YmFja2dyb3VuZC1yZXBlYXQ6
cmVwZWF0LXg7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVu
dChzdGFydENvbG9yc3RyPScjZmY1YmMwZGUnLGVuZENvbG9yc3RyPScjZmYzMzliYjknLEdyYWRp
ZW50VHlwZT0wKX0ucHJvZ3Jlc3MtaW5mby5wcm9ncmVzcy1zdHJpcGVkIC5iYXIsLnByb2dyZXNz
LXN0cmlwZWQgLmJhci1pbmZve2JhY2tncm91bmQtY29sb3I6IzViYzBkZTtiYWNrZ3JvdW5kLWlt
YWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMTAwJSwxMDAlIDAsY29sb3Itc3RvcCgwLjI1
LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkpLGNvbG9yLXN0b3AoMC4yNSx0cmFuc3BhcmVudCksY29s
b3Itc3RvcCgwLjUsdHJhbnNwYXJlbnQpLGNvbG9yLXN0b3AoMC41LHJnYmEoMjU1LDI1NSwyNTUs
MC4xNSkpLGNvbG9yLXN0b3AoMC43NSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9w
KDAuNzUsdHJhbnNwYXJlbnQpLHRvKHRyYW5zcGFyZW50KSk7YmFja2dyb3VuZC1pbWFnZTotd2Vi
a2l0LWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFu
c3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJn
YmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFj
a2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1
LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwy
NTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0
cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdi
YSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxy
Z2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFu
c3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50
KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3Bh
cmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1
KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KX0ucHJvZ3Jlc3Mtd2FybmluZyAuYmFy
LC5wcm9ncmVzcyAuYmFyLXdhcm5pbmd7YmFja2dyb3VuZC1jb2xvcjojZmFhNzMyO2JhY2tncm91
bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCNmYmI0NTAsI2Y4OTQwNik7YmFja2dy
b3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oI2ZiYjQ1
MCksdG8oI2Y4OTQwNikpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQo
dG9wLCNmYmI0NTAsI2Y4OTQwNik7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQo
dG9wLCNmYmI0NTAsI2Y4OTQwNik7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8g
Ym90dG9tLCNmYmI0NTAsI2Y4OTQwNik7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7ZmlsdGVy
OnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3Ry
PScjZmZmYmI0NTAnLGVuZENvbG9yc3RyPScjZmZmODk0MDYnLEdyYWRpZW50VHlwZT0wKX0ucHJv
Z3Jlc3Mtd2FybmluZy5wcm9ncmVzcy1zdHJpcGVkIC5iYXIsLnByb2dyZXNzLXN0cmlwZWQgLmJh
ci13YXJuaW5ne2JhY2tncm91bmQtY29sb3I6I2ZiYjQ1MDtiYWNrZ3JvdW5kLWltYWdlOi13ZWJr
aXQtZ3JhZGllbnQobGluZWFyLDAgMTAwJSwxMDAlIDAsY29sb3Itc3RvcCgwLjI1LHJnYmEoMjU1
LDI1NSwyNTUsMC4xNSkpLGNvbG9yLXN0b3AoMC4yNSx0cmFuc3BhcmVudCksY29sb3Itc3RvcCgw
LjUsdHJhbnNwYXJlbnQpLGNvbG9yLXN0b3AoMC41LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkpLGNv
bG9yLXN0b3AoMC43NSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuNzUsdHJh
bnNwYXJlbnQpLHRvKHRyYW5zcGFyZW50KSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVh
ci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAy
NSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1
NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1p
bWFnZTotbW96LWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1
JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkg
NTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVu
dCk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1
LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwy
NTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3
NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJn
YmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUs
cmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJh
bnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KX0uYWNjb3JkaW9ue21hcmdpbi1ib3R0b206MjBweH0u
YWNjb3JkaW9uLWdyb3Vwe21hcmdpbi1ib3R0b206MnB4O2JvcmRlcjoxcHggc29saWQgI2U1ZTVl
NTstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVy
LXJhZGl1czo0cHh9LmFjY29yZGlvbi1oZWFkaW5ne2JvcmRlci1ib3R0b206MH0uYWNjb3JkaW9u
LWhlYWRpbmcgLmFjY29yZGlvbi10b2dnbGV7ZGlzcGxheTpibG9jaztwYWRkaW5nOjhweCAxNXB4
fS5hY2NvcmRpb24tdG9nZ2xle2N1cnNvcjpwb2ludGVyfS5hY2NvcmRpb24taW5uZXJ7cGFkZGlu
Zzo5cHggMTVweDtib3JkZXItdG9wOjFweCBzb2xpZCAjZTVlNWU1fS5jYXJvdXNlbHtwb3NpdGlv
bjpyZWxhdGl2ZTttYXJnaW4tYm90dG9tOjIwcHg7bGluZS1oZWlnaHQ6MX0uY2Fyb3VzZWwtaW5u
ZXJ7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW59LmNhcm91c2Vs
LWlubmVyPi5pdGVte3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6bm9uZTstd2Via2l0LXRyYW5z
aXRpb246LjZzIGVhc2UtaW4tb3V0IGxlZnQ7LW1vei10cmFuc2l0aW9uOi42cyBlYXNlLWluLW91
dCBsZWZ0Oy1vLXRyYW5zaXRpb246LjZzIGVhc2UtaW4tb3V0IGxlZnQ7dHJhbnNpdGlvbjouNnMg
ZWFzZS1pbi1vdXQgbGVmdH0uY2Fyb3VzZWwtaW5uZXI+Lml0ZW0+aW1ne2Rpc3BsYXk6YmxvY2s7
bGluZS1oZWlnaHQ6MX0uY2Fyb3VzZWwtaW5uZXI+LmFjdGl2ZSwuY2Fyb3VzZWwtaW5uZXI+Lm5l
eHQsLmNhcm91c2VsLWlubmVyPi5wcmV2e2Rpc3BsYXk6YmxvY2t9LmNhcm91c2VsLWlubmVyPi5h
Y3RpdmV7bGVmdDowfS5jYXJvdXNlbC1pbm5lcj4ubmV4dCwuY2Fyb3VzZWwtaW5uZXI+LnByZXZ7
cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6MTAwJX0uY2Fyb3VzZWwtaW5uZXI+Lm5leHR7
bGVmdDoxMDAlfS5jYXJvdXNlbC1pbm5lcj4ucHJldntsZWZ0Oi0xMDAlfS5jYXJvdXNlbC1pbm5l
cj4ubmV4dC5sZWZ0LC5jYXJvdXNlbC1pbm5lcj4ucHJldi5yaWdodHtsZWZ0OjB9LmNhcm91c2Vs
LWlubmVyPi5hY3RpdmUubGVmdHtsZWZ0Oi0xMDAlfS5jYXJvdXNlbC1pbm5lcj4uYWN0aXZlLnJp
Z2h0e2xlZnQ6MTAwJX0uY2Fyb3VzZWwtY29udHJvbHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NDAl
O2xlZnQ6MTVweDt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O21hcmdpbi10b3A6LTIwcHg7Zm9udC1z
aXplOjYwcHg7Zm9udC13ZWlnaHQ6MTAwO2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6I2ZmZjt0ZXh0
LWFsaWduOmNlbnRlcjtiYWNrZ3JvdW5kOiMyMjI7Ym9yZGVyOjNweCBzb2xpZCAjZmZmOy13ZWJr
aXQtYm9yZGVyLXJhZGl1czoyM3B4Oy1tb3otYm9yZGVyLXJhZGl1czoyM3B4O2JvcmRlci1yYWRp
dXM6MjNweDtvcGFjaXR5Oi41O2ZpbHRlcjphbHBoYShvcGFjaXR5PTUwKX0uY2Fyb3VzZWwtY29u
dHJvbC5yaWdodHtyaWdodDoxNXB4O2xlZnQ6YXV0b30uY2Fyb3VzZWwtY29udHJvbDpob3Zlcntj
b2xvcjojZmZmO3RleHQtZGVjb3JhdGlvbjpub25lO29wYWNpdHk6Ljk7ZmlsdGVyOmFscGhhKG9w
YWNpdHk9OTApfS5jYXJvdXNlbC1jYXB0aW9ue3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7Ym90
dG9tOjA7bGVmdDowO3BhZGRpbmc6MTVweDtiYWNrZ3JvdW5kOiMzMzM7YmFja2dyb3VuZDpyZ2Jh
KDAsMCwwLDAuNzUpfS5jYXJvdXNlbC1jYXB0aW9uIGg0LC5jYXJvdXNlbC1jYXB0aW9uIHB7bGlu
ZS1oZWlnaHQ6MjBweDtjb2xvcjojZmZmfS5jYXJvdXNlbC1jYXB0aW9uIGg0e21hcmdpbjowIDAg
NXB4fS5jYXJvdXNlbC1jYXB0aW9uIHB7bWFyZ2luLWJvdHRvbTowfS5oZXJvLXVuaXR7cGFkZGlu
Zzo2MHB4O21hcmdpbi1ib3R0b206MzBweDtmb250LXNpemU6MThweDtmb250LXdlaWdodDoyMDA7
bGluZS1oZWlnaHQ6MzBweDtjb2xvcjppbmhlcml0O2JhY2tncm91bmQtY29sb3I6I2VlZTstd2Vi
a2l0LWJvcmRlci1yYWRpdXM6NnB4Oy1tb3otYm9yZGVyLXJhZGl1czo2cHg7Ym9yZGVyLXJhZGl1
czo2cHh9Lmhlcm8tdW5pdCBoMXttYXJnaW4tYm90dG9tOjA7Zm9udC1zaXplOjYwcHg7bGluZS1o
ZWlnaHQ6MTtsZXR0ZXItc3BhY2luZzotMXB4O2NvbG9yOmluaGVyaXR9Lmhlcm8tdW5pdCBsaXts
aW5lLWhlaWdodDozMHB4fS5wdWxsLXJpZ2h0e2Zsb2F0OnJpZ2h0fS5wdWxsLWxlZnR7ZmxvYXQ6
bGVmdH0uaGlkZXtkaXNwbGF5Om5vbmV9LnNob3d7ZGlzcGxheTpibG9ja30uaW52aXNpYmxle3Zp
c2liaWxpdHk6aGlkZGVufS5hZmZpeHtwb3NpdGlvbjpmaXhlZH0KZGlmZiAtLWdpdCBhL1dlYnNp
dGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdodGpzLWV4
YW1wbGUtYXBwL2NvbXBvbmVudHMvYm9vdHN0cmFwL2ltZy9nbHlwaGljb25zLWhhbGZsaW5ncy13
aGl0ZS5wbmcgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291
cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2Jvb3RzdHJhcC9pbWcvZ2x5cGhp
Y29ucy1oYWxmbGluZ3Mtd2hpdGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNiZjY0ODRhMjlkOGRhMjY5Zjli
Yzg3NGIyNTQ5M2E0NWZhZTNiYWUKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDg3NzcKemNtWnZD
MXlHeiN2K20qJExYY3A9QSRaV0IwZkw3d05icF9VKiR+e19nTGBteTNvUCNMITV0UVl5OTlUYWAr
Z19xCnpLbGp8S0oyZkBjKUFSSnh7cSpiPFJje2ZaREV8LUUzejhRZzVDfXs5diFwVHpnYThOWk9t
cmsqT2A1ODkyWjBkaAp6Nnk7UHVKd0hESzkkPyh3LXV8X0xfM2BvMSgkVyVlMGB9a1dVeXkmZENu
cU9RUGZ1NEBTQWdmPztvKlAkenxzOHQKekpoMUtSPmJraE5fIXxXbipWb3M4e1RFaFVUQDVlO19X
SnNJTU1jRzUlPkRpUyZkdl9OYDRASjBjbkFRLSM+UmpaCnowMFc1dCZ0Sl5sLVFDKlNUMS1wfjAw
dV45WEo9QVVsN29XLTsyYSt4MmtfX1Q9Z3JOeysxYzRYSzBaTH5eel5pJAp6cCY+dkVockA0ZlpX
YjM4MFMxOFQmITBjUTNJS3BIRik/dj1iX05JbTBRPnY8ZktnWGgqVzI1PndZN0QwYmFaKW4KejMx
RmE1c0VMVVFBUklWYVUwbnFmMFh6VCtmQl82M2FBO0A8JGx+d3NlfG1jQTteRzFUbVg/LSllKWpr
R1Bma3VBCno5MkB8ITw+aDVTXzRmOFFQLUpScT5kJjcpXllpbjhsN0s4Z0VEJCZfRmFWP2dZK3dM
anBvVyV+N05EZT1uSGZNRwp6NURPM2p7UjlrdjVHYnNzclVwTyk8cEVsTnZWang7SW5hZDclfXJu
bilCdG9pSVhNe3MwQz5PeXY8cyppMm0hN00Kek5DWFVrMWpxfD81fDk5X2smJSVBSWx1LWEwdHkz
PUt4WThqJSo7JlMzSUlhakVfUWMhZiUqWF81RFNjZ2YmeEgwCnp1bXU+VnJseD51MFVLRDBpO0Rw
bTVTNWRZMTYoREw1bHtpeHp8bWhKVUAmLU9XQ1RiN18lfTgtZkUoUH4rWElSTwp6SlV8d3AxfFM+
fEozS3JMY3peK3YxZiZCRHBkPiZNQWFpYlI0IzVBXzQoTXVjWndHOUUxaDRAdTBQQEM4O29vK2cK
eklWajdrZkppe29WfkUoTloqaChAXjxKUWA3b0dHSHRQPi0oUShDYFBzYjNLWntOO15HQihhOE5F
KlZ3YzcxNSE5CnpyLUg0QW98VF9jNitWVF9KSDlIK1AzPmlYU3QhYSRGYD5zYGpuYHc5R1pffkIh
ezx3MmJ9VXo9eFJQME5vZWUhNQp6SEd4SEtIO3Vaam91Q2hTQjkpbGRjT21AezE0fmN0MDR7Yjg+
MHNvYWlWfE9fY15SMmFXYSV9TzNqVUUpV089cGEKenN+X1d6MDh6fGllWTVBJSRARmNCRjleITFh
fW01a3NAN2dqbjs2N04+fVN+SHJtYDRzTTVIaGBxNyY1LU57fDMxCno2eDF7b2w3Qm48a19tJksq
OU5rQjdBTnA2O19XU21yYSFVTF5lWStwel93NUxsQihnJFVZOXwtQVBAenN3NHw3LQp6aXwjPnNr
b1ZpWjxicmxYMjFHMXdMQF52JXYyUCZNU1RaYzhTS1QmJlRxIX4lVXcla14oRDxPPFM7ZXdvSClA
KGIKemIyWjwjd0JWNnktP0hIRlZKRlJnXm1lJkBSZWchZHlzNkYxPjBHcWJMYSNrV2BaPEh5PilW
Q2p0MU15c0tnfHJUCnppIT9zIzxLc0JkNWxnPVZMdTRefHhvMCVlbkF4MG1NWE1TcGswS0ZfKmdP
UztqeCF6UD1ANVRQTitTPiNDaz44Ywp6cGl8PiRsR2x3I0B5TU5pJlY0YDZPQkdKKEgmN2xxTGxj
VFEmMXpXcmlHX2ZMPkJuRmNyfj87RTkze00teElvelEKek89RUhRIys/PH0lQHdiV1d2MjMjIVY3
MGg5TU91VVZhVT4za3BUdllmY3xMQnc/JmIqODl+R2M5aSY4dGxUI2tGCnp0cGJab0F6a2RCK1VU
eT10eCVMM1o0KUl7elkoS2IpZWd7SW5vYlNKbU53UFp0JDE0YVMtdWM0ZUt1WTw/eHlpIQp6YFRl
R3B1bihrUF43I348Zlgwcl5FeFJRd3ZlV0RGO0RPUWJMfT9MQnp0PjhoJGR0Znl4dV5hJXpBKTx5
fDQ7SSMKekZVOHg3JTBlVHxIZEAzIVQ2QW5oM0lvSHJOJUBIOGU2Z2U7M3UpXyROMkgmUnYyYG1s
NjtrTH54UzA3QzVOenQ8Cno+PmZZSSYpQFpYa3k/Xns1PnhTQz87dzRyJnRkNnZCZGkldkhtND1Y
SkghM3lMMz9FcCtUNWFVXz5pO3lyX1hHcQp6eFpmQ3pVVUBHdm5vSWsrX05kYGFreT5TJkghYip7
QSVMPj8qWFBBZ1dMKFZmKGs3cVVTfT5abj1VKFpmY09je0IKejMqdE9ISEB0NVViNUR+I043IUZ4
eH1QMilzeXt2RV9sKFI3JGFXJkNYPmN8JkhZKzd9O3ZVSWlldEslfSFwaDxYCnoqXzYmRWU9KSZE
QG5EYSF5eyRmPChRYFVkTSt8SDJrc0dFaEc3dXRGWWxgWTZwRCMrNExDOEh3QDZ8MUgteHtEYAp6
RSR1YU5TIWleUngoJUIoTXk1fTEjSDczPnJDdWgrO0NAMXVzcDtYTFU8OEdxOFAhckVJMzxVKXk+
aWVnI1ckIT0KelFjWnJ7aHA+OHNGP2smWWwwP0I4NE9uZWlReGVmLTRURUZycTNPfkpBWlJ9eUVK
SEF8WGtxZDQ5dFImOG9xe3pQCnpZQD5KXkhCViooZ0p2SlpjXzBWRk43U3g/SDcjNzVFMyM/Tjg8
cCpidEg+WiFDK19mNTNZVX1weTxGVU5XZ1N1agp6aV5NfXA+Z2d4eDE/d1FpNVliLV9gSWBfVipT
TXg1KypQXmI9ZWM1Uk9OLWsxY0lsc0JMa30oSGlhSnlhYjBgQ0kKem8wezx2M1E1UDNAb00hNkB2
JnQ2Ukp5ME9TfU0/P21HcWsxeDsocGFgRldBI24rMnozNzx1UEhseyNIdkIhXj9yCnptOT9XT3Y7
VHQoZ3QqP1B3OzslbkYzfEkwZ0RCWFBNPj0xX0xPJH5vRTIlVGxffUtVUnVYPGArbVFOX3NUZE0m
Kgp6a0ZmIVh0bF5lXmdUeTZPTj0mZ1RuNikkSkhRcTIpMzNSQF8hIzk/QkxOcS1XaXtVfHJWWDdW
bnkkbDYjK1M8dmEKeiUtcit5OEQpQ217NT1JTTh8PHtwcmopa1pmSVokTmlXMClmRTl7LVNSKUAt
O05CSnRIa0BESV92Km1LKE4wI3MjCno/Uzh+anlvdGRjSkpBQVV0XztUcilmYXwqY1QpfipKWiFj
Xzd5VnBTYntyMk1sbGZKRGJmSX4tN25fI0s2bHc0Rwp6XkV5aHNoXno4ZVpzMjthZHJmazlpcCVo
O0lQfD5aQEt2UXRAVlliJTw5SmZhcEleYjlqPXdhK1RxYjRlaTs4YzUKeiYxPlV6QGxWRnY2VDRa
KllVJHI0R2BnPTkxbFNlQTw9R1JaISpLVFdLRFBSfU5QVVclcGVDVWpgSXhfTERxITh8CnpNSC1W
YFB2IWF+UWtUTHx8TEBjcWlUeikqRy0wPXl0cjFLcVR1RlBhbjl5NGdZRDU+UGxlS2BOWkIkZXZA
VyV0PQp6a3ApXz1sQlVUTFpKcEF0Wmc7cGpJOzdyMnl8MjYtTjcmYShoPHpyeXJnYEpeb2VDfDhW
fHFzekIrfCplUS0oRHkKemJuKm5KMVd8YjQtMXk/ZFRJNn0zSVBNdystTzA7UUBlTU10ampRK0c2
UWZOM2FlNjFZZDlMZlF4X1VSRVdlY0s0CnpNbjdBfmZPeiliZTEpWWd7MllzbDlHJXM4LWgtfkBD
O0FMQUwwcj08SlAydUNlIVR8d0F5d0gxcjtGfGZfcThOKAp6WXBeMEZreUw5dWo8OGJLQGZ5VHRn
bytEVCkxNEJePFNpZ2NTSm90Z0RWMDJPIU0oQ1M2X0ImXmJJTHd5Vj9OZzQKem03V1FwP3tsPE9i
aHV5PTIyPzU8b1FEaU0yMiZ1NHJaclJWR3xMOUFCZll7PTk1YVR5ZH5AYSRvfjFQI2ppYD13CnpC
S21RcVh9cjNObGs5UXxnUjcpfiNuNkF6WWtgIyFSKmQ1eGBBKWhVKCExUjElXnpYeE5KKGtQQ3c0
aHRVOV4oTwp6UDRjWVZeRihJPlh8YDFZTk05Tjh7PjhKQXU8ZW41Kzk0YkQ+dn1ocDF2YDNKSFQt
PTVsYlhwYk1xN1h+Mko1S2wKemg3dHlVYF9BdXNNRlp7ZWo5RDtVeXk7U1EhNG53Z1NubmdzWUJ3
ZFMmRU8zTlMqbzA0KSpqPGcyQkxmO2lBWjIoCno3S2V5JGNjNmV5PnVBWWw7NTdjMkx5MChERVo4
SVk/elNwaC1reXh1K0RgdHRAb1V7MzJKI0l7dm15PSMweVNQSwp6QStpKEEzeWwpcW1UeiokZFpp
I3k5RlM7JDtoJWJZKztTdE54e19SNTZPdHErP3BHZV5UXns1ZDdHcyY/YF9yYDgKekQmZHpPQXxq
OEAzPG9QeUNkfVNPWDZBWmpfO3BUPkEmRlI1VTMqZVFOQmY8NF40V19pU18oKSo4YjRhYVV6Zmsy
Cnp6SWNNV1NFam07RVBaUGt7ansxPm9YZH1wWEFqIU5hUm04e1NqeiFEPX5xM1dKQHZtdDZORF8/
SEl+fHdVUzFqNQp6OSFTMU1LcjclbnhvSjNrYEdCXjd5Vn4qe25+T35uNigkfng1QnV7N3N8SnlY
YkF5S0k0K3RPKHpaWU1zbEs7WmMKenplSEdWbHtgaVBAamZTS3E+Ujt7K2RqSjluJSQlRUwoKVV3
K3N5a2pOUWRmbGtKWlNqcVZfUURXaXZiWlN+U3tLCnprRUBUXkpjdilEZm05MyFtZiRYWW5DVC0t
X0Ekem85TU9rUEI2JmRpTThNd09mVj8rQXBOdmBtb1ZAbnFuPiZsdgp6WWJOMS1NfGpjfnNHfHlM
Tl4xUjI9YCsxaWgzakNzaGdgaVAmbVkkR01UY1leV15UYFdPQ1ghey1LSG1aI0dpUkgKellse3wr
S0xuNSFQQ0x0Qnl+OWl9YCNkXmdDRER4JCtHUWJ+dWM7ViNLM09nYmJPRzBqNXtCUkctc2klQm97
QGxCCnpHSXQrQWluOF5DYCEqUzBkME9TV1ZPK1o4PGtxbTtxUHJISUohcUI4OzloNSo+OX19Tzhh
RlRaPnAma30yZ0dDVgp6aCM8JGdzd2VQRnhXR1QkNERDXjhAODRfZSpeS1Q3ND83bjghJDhjZz1z
TCRPbEtyJkhNaEBScjUlKldyIXhvT2wKem83akl0bmoteFlnVlRYKUgxPUEyYkQodGxlPHRMN15a
IW5KKmZ3Z24mUVVlPkVINTcjVnt4QWVXX2V6SVNnNU9DCnpnPWs+aE9MQV51clRIX2U2KnZTWVJx
Q20kSnt4b30teDNASEg7YnNIRDFaYFB6dnNufSVjdmZ3JVEofWhgRGd0Ygp6MF9KXm5pVW1vQ001
JCpmKTZ9fXFpKHU7Y1BneGZ5ZVY8d3RjUWdzcUc/UUR5QUA2WFhNN3NpVSMrMCNtUH5BblgKejlm
PWJNZXN+OT5hYVZtT3NHPCk1YDZ0elU0d3loRjtrfH58eD43LTJoWHBWQnBjNWt7TDRNYFdiZTZR
P3RyXipCCnpgWSo+NiomUiN+JUpsQklpdGxaXnFHZTNzMjF+aDNVfCZrJSVqZU1NOzYhflVIfCsw
Kzw1Vi1fekRxWlFONzxmRAp6TTJ2UCYmQk1yKCUkTTUxdExweWNORVNee2duR24tb350Jj45P24/
IUFqIU5qYFlNTzk/aj51cUk5LVRleCtuSkQKeiVlMCNZY2E2KHpxR1VSfEtJVGE/OXgtI0MwIUpL
SkhPKCtmeUAxIUIkJVp3SnduY1FXN3ZHWXY/fiFeYCNMflVtCnpPTCsrPjRxbXFXYDBDaGMwVDIz
Rzh8dk8pdEs9WjJgZ3ZTNCpxcHFoSUpDRXY5aSYmJDA5Vk84WU96fG9aK3ViZAp6TlhWZExjJnA9
S3NTZ3RtSVBMTjY5UDd4WWtZUTF2Sj91MWcpVCE2UnVgazJ3a2RqKndEQylWcnlHdTI9eWIwP0YK
ej5xfn5lPktaMGQ8c1AkTV4paHJON0lDKWVHdXYqP3BBayMqNGZ4SUk8OHJJeDU0NUA5RX0tfTt7
SUpkbyp9IVYxCnprVWdXUXA8VEQlNyhRUWhXa2YqdmQ7U2lUMVBAfU4/amFvS0VWP2x6cWZhMXBH
MVlefWlrak5NTSpLYj9tNShuJgp6T3o4eytHMno3SmF0STxKOTVSJSMlI0FUQXpsd1BsJD82KXc2
V0h+a3U/KEZoTylrMWVSbEY0STVVcVI/VGBJeT0Kel9iVnRreHFzM2xRR255LUJTJW5rendyWGhJ
X018UDRsX1ZOVm9NalZSb1oqMChKa01RI0FkSkxGQmolJG9UQng5CnpfNXxnX2xsMEBjZkxmPGo7
JmxKPl8jN2YzVWdWJTlNWTF9dk1nRntCOHlmRXtITCpwTXloWUYpV0RaXl4zdlM4Rgp6R2xPaHMl
Z19+cFMzPVdRIzQ5NEBqQVh3T3RyXll8VG5RNXpraT5xUkcpKG9QWSpmfVVfPWlwX3txQjAhJXc3
fkcKeldFIVA0cDNraHlXLUpKbkU+ZUVDdVlmST9eZDM2NlNocSFXbSN4JmpBPHRGQk9+YVdSdXRZ
Z3w2UyEtViVkdlhiCnpqcG0zLTdeZllDemJXbXgqdHMkOEVDdT1me0QjfD1UezJfUT9DLVNWUVRT
aThleXtHXkQkOFUmKmJZe3ZRJGtHRwp6cSQ4KT5vPj1IZENsbEUkPkRQTzBOO3kjNEcpRDJ5I0JA
NT1OPStGJVhvMm57Z0tjUGNLMiFoUCpeV1NYbCt1dDsKenlMdlZvWT5WTHtIJUtkOV5pfmxzYjhq
ND4kRWxscnBhckVPSk5UP1ltPnZKYSQoUF50T0cpNWFWYl81d14qJk0wCnpZT0pgSWB9PE5rSDRY
QGlDYzU3ak5TcVkzRD45fVVvU25ZZyNFKCZ5eUsodHFyXkBufXFVMkgyRGhrSy1gMkhlJQp6Z1hy
XzRrcFhvUUh4QU85U2B3RWRtcUdVNGo9MUpkRyFPaXhkcUI0UFBQNjxucTtaUyk3M3NfQE57NTRV
XzxtdCMKelJ7QFVVcm9aSjE9bFZCfjN5JVJiTExFPTlNaD1wajR3TnJ1VnhYTGs4cEtIKUpWcntI
YnhgUDFYUT5SWEF9PkdNCnp1bXJ1VVVIfFpHMiRiQmopUWx1aiZ1Qj1kUmIpP15xb213P1okWCUj
RCtRKk85N2VIcmdWQjIqbVIkYkZCVWAqfQp6SWVtP2RNKWl9cmFURkRuQDVeY2F4RV5YRlhWaEJl
UG1IOWZxY1RpYFRMYVhpdWVIPUAwNnNsfT5GJX1oOUhfZTkKej5eTz9MeE0xRWpYfU5WcHBhT0BO
TlFyPUF0SGNILUJVe3lCVF92ZWpKI0opbF5jbDY5Wjckc2tgODJaeXc3V3h0Cno9fko/aFpte2ZA
V318OTZGVUpmeTY1R2s4P157XnlqaE9haFVNQ05OcHQ1REp3fVpLSDdiIWJHaUZZOXk2T1kmVAp6
X04pP0pqKE11TFROMzZaQ0o2PG9idEtTe1ZPT1N6cz5JNVh5N3VWbHJiJG8qWiU9LSlrUG85cz88
Xllxen4hWioKel9tUDxZOFlEQzModm1+PjgodW5GcTY1WFNpISRAWXRpZVNRITw3SUVPYUE5VmtL
ST9sQWAqKG5VUnY8RGAzdklsCnp6az9STUhEcXx9YXFzIVE3bns8VihMPmZLTDhjWH0tK351dzl8
XzUpdUMyYFpIY2E8QkpTeUNKN0w3UjNeZXpwSgp6aXhkVSVeQXJpem8temg7TGdhODlfSj5lWDdM
OGFHNkdobGVnQEY5YUclWCQjZzZeeVA1YXBuQj5ZVHomRWZTe3EKejlVVmZTeUVJY3plYkMpcWxW
dTVjT29NelNfanJDfClyUWxBeks3c2ZpVzBgTThtVklvaGF6UEU5SnpuKnFQdCU2CnpaTDhSRUxZ
QEwwOUI4M0BCZTt4NVYtSUhubiR9e1JBVCM8MkpBJXR0bGsjXigldX1DR3plfDFKWTVNUGhiZm5Z
Rwp6SXclJFhmQm1BLTxfcEtMcEdLd2JSRiQjUDtAXyllY2gjPnZqMjVzdjI1Vk0kb3VvKT9CWGRS
Y097KSpPd1R3KUcKenY0M1d+VDZla0JNdFVEJTVCbT5gPG4wZWh3dztLOXQqX3o9Xmlab00yR2pt
Nld4NlFUV0R6T1gyOGd8aTdwLUcoCnpuUG8ocEdiMi1IamFeKDVnPl5MdHYhdzR+NjVOIVV0NXR3
bCFBZ3J6eXE0TzJGaTNwVU10Q1V+PjlndF89aC1mJQp6OzEmT3VTdT9BX3NKdkl2UStkWk5vMz9t
MSViMStzJlVBeD84c1VIRWVfc0I3emttNFIlNik8QG9ZQl9pNT4zSXAKeklBKz9qVmRYfHpMeyk/
VEdweCs9VGE+RzgwfTB9QXgrNzIyJFhGTkpzQzFnY0g1Nns4QikqKWVVI3J+SHJDJn1gCnp8RVdX
OTImOzZ5OzN9IUw1elhhMzg1QD8tRCU+ZFN2eUs7P2pxVTJ0X1Izd3ZCVzskIWo0NXVRN3R5RUlR
djx2KAp6dylxQnB5UmhpS0JNUjlIVil2MlpKZGs+YTtEYn1yJmJSM2txTlNoKVFfJE1KI1VqM0dq
MUY7KXNPfCU2eiNAPCsKeml7cGJZc1lTI3VgWCROZigkT1MrbGh3Pnhnam9zMU9uRl4kLUkkdTtx
aEpzd2hIfnB8YWIqbk8+ekJydGIwbmRuCnp4VjB1aCFMTmAmeGNrVFArSld9Z3puU3BVNDkyKXUr
YGZ7OVlyKWpzYE5tZllII1dkdHJhZGMwVG5LTnpAU3UhZQp6dSQ5fUdfPWt1OyU0eGt9ZVhsPilL
Z3B1VD5fPGBVZChBXmErK0smcG0zTGJOO2dJfWt1QFlWckElRkpCWjUkO20Kem9iUjh9T0x0VzQt
aStxUFBMUy0oNzw+TXspcmhpUG9pQD8mdkRlVnE1JWZtWms9bURkUlY+UGItbDdwUDF5NnxKCno4
ST5zRitUeXBLVj1fPFNCeFNnTkZ5QDVgdDcwK180RjwqKGc1NFBORXQmNHUlT29WUl5uKyRUTClx
S2RQNmMpbgp6LUNvUCpfa1haNHZCc2o4TV4yWTBuRHEtXjRyLXdndTJZLTNmbWk2b29QSVhUSSVV
ZEpod0A3S2dSPU4rVmwzTk8KemNsOC0maX5eZSUzRTFHK3UmXiNNJjUhc0kpbGEkdVEyeSZLc2Fa
anhecjhENjhCVFpkXk5yQVZ7MHUkPSNTSCM0CnpMRTIpcSU8VUFESCZJJHVtfD5eTndCVV4+NEpK
cTwqMTRHTGZNMipYUXpZZGxxcWpuRSlnWnNQV15FQG1wJnd3Kgp6VzlpPlhMPXV3TFZaOXBPKjhL
PnQ+dmRMfkVrX05VTCQ/TFFpNXNjIzFRLWY2LXl3S2NJVDhLdz9DPG8qPUFhfi0KeiplQTBNZ211
NS1qOHJUaF47PXsxJCNYPUNrNUdrO0BLSyNoYVlhXnNYcjBeX15RODQlK1dPbDM/I01jI3t7ZH1C
Cno+KF8zcGJSYGV8KSU5Uy0oe2lmfEUraFIyVyEmcWZRJlVpRl5JIXxNI3hoZFdzZW48dHE3NUBA
V0hYeytUM1N+Rgp6bm9NdzJ2e15pYTRgZmtkPTNwPDZYa0wpIWxzSSU4aXFAPnZed3BLQ0JpdXhY
Ym5wODVge2l8O0JNP0JhYGxxVEEKenlSbT1VV0psJkV7OEp6WURIRnU+KloxMC0/I0E4RHw1alc5
SG8wKkNBczBmQXl+TXFid1l1T3E5amp0OSpudUhJCnpiRHdLdmgpNUlyJHIhZlM1fDs/RHQ+VitA
Rip2OD1USkpGKVRkbkMjTWs+K3RHREdDdztBfl5QQ2BnVXQqPCh8aQp6Qnt7Z3tgdUZlaHVgJGZt
NCkmazdgdXt4SVYpeXZBKCU1U3hYOU1TODBwMkVLbkw8SFNkaVdGaUF5PTNVbVYtcmoKemMlXnxv
YFghdCF2dVlFcnJVemJHP29zdFkocXM3R0VePVozM2sqUCtGNnIoJGhfP1ctYkhKfEdVS0BXbHY5
KytNCnpHfT9aPzh7X1gke19jOWFPWHc0cWZrMHZUYVZSSDZGTU9uRkQ/d3x6b3t6S0tnJDh3elcm
eXVmV2smaWRCPSs5IQp6XmRUSUBnPT50PEhKJUNkJXt1flhgbFJwTUZnJlh7bT9OdyNUNGNnKj96
eytyQygkTTR6OVJIVkA4S291ZUQ3XykKejhUQGktNlJHJDUlX1lgbFNqanw/d1N2SVRLNWM0ZzAh
VXE0OVZBbi1IPDl+O3ZuN35oQmRZdURPdDIkZ3ROdUJtCnpvOCRZezJsd014Wk5iZmIkSG0wVDUy
OE9nN0pmbCEzNWVkU3I+Q1o+dGxYPipaNm5kJjYtPGN9N3p7c1o5Vl5VeAp6TU5nUjMkaUg5Nz5N
diQ1ckhEKjxGbXV4QDFOa2dpQSVWbXlPQXdhbHsmKkwqPypAQ2w/JiFqdGNmM0tMe3t8OHoKel8o
JCRSO1NvQWVpI2dVT0A9NylNN3N+MmFBeEo+ZGI7JklCSzNLSCZNPCtBcmxHWERSZFgxVlZPNCkm
UiRmNDxnCnpgTX5iZzkrPSh8Y2NeYTN2QjEwPzNHWmlxJG98WnJvbWg/bEUyJW0hYWxHNENJcnZt
UlpIWlZTTT5OeFhJPkdCaAp6U3Z8aD41R0RBSSg0RWBARj9FbjxxNGlCVXRuLWZ1eCNKdD1xVTYj
UEJFNC1HaFApfU9LIUNJO2koc0o2XlZJSkYKendKTUVBZUdLTWJfXmBWYkExaEZZaW8pcm9TQ3JM
Ry1OTDVZcWhie3NoM196dChaZzkzVVAqOyFtP31rJlZgMUFCCnpOWVByaSZ5VmtYVzh1TzFnZVhN
M09qJiRHJX4jSmQlaDs/SkRLd3JxO1ArIXQmNFcxWl4xP0lrZ3V2ayNiSz9CeAp6JHc1TSpMeGdS
ZT1qej9VaURCYmZDMUkzIWNqZU1EKnVlaDRXMFMqejY9VEFmK1pZa0ckfUZHdGlgaXBqcElLPlcK
elM+I2MmR3c2fl9YTGBxUUc0YktgVyo+aGVrNExYKmVmbjZ8X01ZK3JYa055QXV1P054UyVMN345
dEQzY243JnAoCnpDdGZxZTZzakImUS1WczdCUDUrJTsjR2t9OzR4dHdVIUtZMFhYYm1rVXkka1I5
KSF+Pyp2KXF3MDAhK1lnXiNIPgp6YyM4Kno2elpvPisoYnVkP0s8KiFRTzx2S2QkOFRCdF5ITEl3
JWlCPjRlaGlUQ0smUEQ0RyZuKVRyOVhfM3Itd2UKej9mSSt9LUd+WW45M2dJNkZ7fUR3X1NDKkZM
Wik1KDg1enA0JXV1YnREKUopVUVMTGt2R2s0I3R3JlR1c3M8Z0BKCnpkMyhuK2g7PXMtam9EN3Bl
YX0qa2x8P1Q1PDNXIXJLfVYpI0hwdkZMM3VSY3tvZV9tVjx6MWx+Xm0xX1RrSkR1Mwp6O0p0TnM2
I2cmJkBFMDlUR3sjWmB6aHxFS3dSVGlKcilzNTAkNT9OcmhuNjhIQXI9clYjbT5hKW1URCRSMiZP
fnsKekNJMz5mci0hLWJARUdSSSVnMEw4VVUlJXVfPDtlOTQzOUpOVjs0S1N4ZHw3OHYrSSs4XnJt
TTxnK214MCZTaSRhCnpnZjF1WUMwM0tjQ04pTHohPmYzZjQwSmJ9d0VzelJPRD94Qlp1PkxsMztz
VUlvTnhESzN8ajMqc2FtMnRDQEBlJAp6XiE7K0FLPmVmZUJKQiVBTHNRe3VGdWkpb0Q8eH1KTCZM
XkBkVHp7YiZfPypuc1M7bE5ub0pAKGs5ZDV4VnEkfHcKejxlakM+b3EoKTJVU2k/bj02QzMjZWV0
ej93UHN3Yz17STw4eD0oOGxFNEVJc1VmeUdOWnt8S1luMUlSfD1FPT1mCnooOyFBNSgtMnleMnhS
RkNTUHF6SEFabjVSQ05fYnAyMlQoS0V0akEockZaJT5hNEBTVHJIWmZseEtvcWU5WjRAXgp6TSpz
Y3hfeTczPHNGUzFfPzYrdSFzVDlmdmpsZCprVX5lZE15Pj9RezxLdyh4KVRBZDFKZkJwTHo3KE5r
KUpzZHoKemo3I2V5TXswXj1hKEMjTl9wd1ooJl4melpQQDVRd2BvVUJSVzBpPFMycWw8MHRFc34+
dnQ2P35XRWw/MnEqO0A4CnozTSomQCVsKVNRbVhrY1VtKWRAR1QyI0pkemhmU0FQOXxuI0M7JEU4
WHxwd0QhciNYPzBQPjBaaXNRflROcXVwVwp6KmxVWX4raWtEYHZRYj9AU0FXWCNyKlkrOz1ffG9h
Y0wkMkNMJF4obVZ9YUtPNzdwZ31PKy09VDFvTEJUNXNMMmkKejQyUXRoPEpoMFlzdz1LJXU3R2Fy
RmAzYklNMT4yKzBAQ2BjKypEMCo1IXF5MjZzaXM8OWE3PkxOMnt6JVFqNDl0Cno9TEB4YDQkQUxI
YiozQ09Ib1Q/NVNfYyhIc31nIVY+V149NlEwfXphdWJrRG4pKGxUYXgwKyErJUJ9OVZxdzZ7SAp6
dkx8QlJNYE88QDtlVmkxRHpNIXRYdEJyQTIwQ2VAXkp6fD4lWC10YHZpLSVXd2VYQ2hfTGhJI2JV
ZzIqcGNQflIKeipSdVRVekJLTFhPfn51TWQmbyR2M0BkMHNoSGZVakM2YzUzOVBFNnJGJjtVZmEo
UndASzEqbTc/ZjUpdGBNakgwCnopX1YoY2FqVjVBbT5mIWtXY0lANXJFOHQ2JFM+NU09az1hUlpS
T0g2ZkFeakpwfjJObFI0O1EyPkwkN0YjUlQjOQp6PjRAMVJoV0dgS2h5PlAyajFZeF5CQkx7U2Bu
aU1heGxTV1YtSkJVMC1UOXpaJT43bVIzbCR+UVYkKHtvMDtqVEkKemU1PWNOXiFCYzJiVHxCY29q
WHB+SyMyY00+T1RlKmNNe0tnLWoqQ2tpVylFR1FvdF59cztjeThfMV9ASkEwV2hxCnpsck5yK1I7
RWZhK2A2TilzNXJIKnxFKW5ZWjN1cWtrMkMoRTdAQXwzWUlgb3pQfjlMZXh4IyoxKHI4bHVxK1lQ
awp6e0p9YyQ8V1FhJENmVkloc0U+c2A8aTJgY0VQWUh6RiFaSXk/TCR9TWhBUEZxUWVAXzhMaCNj
UUFIfi16WjVwJHUKelphdUVLcjxvbHVSMlQ2ejJBfEJeI3JvaTJqcjNGPFg0JiFaamlYbz85bkli
SjRpQWlpPUFfQCYjbiRUcUheI1ImCnp7JHFNUU83dV4mN0tFQjZse0h+QTt5bFBzSncya0E0I0Uy
QDdkTyVsc2krM3tWSjQ/fmU0KEJ6LXR3Jl5ZUjlQMQp6VGxwQ0goV18lK0AjfD8lUk4wSE09VT9w
VTUkRTJmPFJQSzFmdyUzS0xzLS1oZHxsan0pMWh8WTw2Q0EzTnN1U0kKemw9PDxnKnZjSlc9Nnla
WWBhWGU1UVVCfmF3Z2c1ZnhsdSU3dSNBOD1VWHQ2MVUtN3dHdFJ7TCZYdktiVWYtfVBMCno8ZVhB
Njw8cl47PWBYd3RGTjF+MkpeJFkkeyNRMFR5ZXY/aiEqWjRxXm1qUTRhaCl1V19zPUprclJTJWwq
VXRgPgp6UE0zNUZ4KFlXQjNaNUlZbk4rTF80fGphUig1aVdKaTJ+bCZ4eX1hVTdrVz9vLVYqNkF2
Mnd5WlRHIUUyS1NXMioKekdSTFFrUVU7T3ojI2llLVo0ZkkpV1NSeG4kKFpjRDtUTCs7XnI9YTQo
R35IM1poSyRsU1haaj9jdnlZOCVkOUpNCnp6YzMjcEReV19Rbld5I3J4Izs8cGdEb2F1UmlkX0I2
dyRKNlhLS2VBY1pIVTlySDk9cyF5YCV+ZUBoR2M8YyNBNwp6UlJUUmAmZHRgKjt+VlljVkdrLX5h
TkIhP3EjNEImJTUyP2RJQD0lTFE+YyZOQHNxSGhybkhSbWo8STlUeDRhU0QKelZVUX05bGg9S2Qm
UUl4MHVDcVltM3BGc18qTDtifCR4eVprcyhBQXdnWXNIODVQQUx+bmRIN0ROVW9aS0JIQ1d1Cnpf
PDtAJmVkXnRwb089REc0SGVtfDI+I2k7cyV6TG02U0UobiZCV3BkJmY3PlhualZ9T2xabnRJNzBm
cSU4fjk8Nwp6TVlhd2BFLXJwNDktb0MxTl91WlRvKUN1JVJSMlFXZEhwelFJY05zb0RwYDN4ZlAr
YGdJP3RWUVo0WD17cVU/KG4KelY+MEFTRVNeWHVjOzlKQmppeylSbkZMKExlejs4WGJCMXVXYU1w
QHA/N3hoWGs2ViMhNkJAYVA0Uno3LUslYT5pCno/ZnZmfXZhX0RHVVhsSSM0LS1gQTNxSzdKPy1I
d25HN09+SDI7elJ+UkxXKV9eI0xhIT19Kz5LVyNhblp7fF5EMwpCN0c/a2QKCmxpdGVyYWwgMApI
Y21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRv
bWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvYm9vdHN0
cmFwL2ltZy9nbHlwaGljb25zLWhhbGZsaW5ncy5wbmcgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gu
b3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25l
bnRzL2Jvb3RzdHJhcC9pbWcvZ2x5cGhpY29ucy1oYWxmbGluZ3MucG5nCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE5
OTY5OTkzMjAxZjljZWU2M2NmOWY0OTIxNzY0NjM0NzI5N2I2NDMKR0lUIGJpbmFyeSBwYXRjaAps
aXRlcmFsIDEyNzk5CnpjbWEqT1dtSF5Jdm5AKlM7SzNuU2ZfdCEjOzBmKyZwbTdQbzhgbmt9MnE4
ZjU7TSV4JDxMPlNkQWtkOUZBdmxjJAp6eDY2MFY5ZTNPeEA0V1pePzdqWiVRRkdVLVR+JXx8VWc0
aUs2YmJRWUB6QnVGMiRoeE93OXdGPUEpblVTeFJfNUAKekVYPkhCcnlHcmp5dU9GRnYkWTQ8K3wz
SEBnUWZFcUQ8KSt9YX5tcnlEfDFVOSpJX0ZPRyZGJStXd3tTSi1WMkJSCnpqdDw4MUVrJH1ZYio5
NUQ0UlMwSENwc3x1THlvdnQ7UDA1aGNoUWItdTJiekx0bW9nJmYyfTFWbE5oeFhWKTtTOQp6TTJi
dUJnfiFxOVB0RikmS0dSZ2YzI3o3QihobTVXbE5DbGFDV0ZzIS1QITQtdSp1NSs9K0R8WkU5ZWBL
dmhUSFQKekpCbkx3R00lIXUmdmxFJTF5dEo9IXh0fnlfWWtGTFFiNmJTIUUrczhsN1BpUEdTdDl4
cm1nP0xWJiZTTD9KfmNJCnpTKGU5VEYxP1NHeWgrTV9wQG8xZHlXdTdvN182cDtONmhPITs0fjx0
M3czU1Y1NzA8fCRWV05QUH5UYlgzfD1YPgp6MkJgSTt5YDskWmR0QnB2SzUlb1FecDRlUjJMKUJI
PkIkRlFlQyp0KWNgTDcxZ1hIUFVhfHZ5dWBCbnopSCRaPE4KejdVVkFIRnNSK0hMTysodEt+PU1A
cE03Wk1QajVna3o+Y1hHdmUofVh2UiErKjhhPkJMVjsrcnlHMWt0MD0peXRsCnpOSnhGVU57VjdQ
PyN8Q3A4NVFUYUAoKlEzJUstUihQa3YxTjhZVSooZChZfTk/UFEoajxlfHolLUJucmgqSjFSJQp6
JUpBRipjZHAjWmsjaDA5ZnYxMiRUdUdVc1g9Vi13Z05jRUdlMGhocCVtSzhFVlBpNkAhYTt4aSRr
IXdjSU98YkoKelB4OERaKjBZKGdnS2hucDI9QXgjZjx3S3B7PXBBMjk+O056V29FVldSRC1+SCQ9
Zj5qPExzZk9aO1dMRipGMGNtCno5UFNSU2xTRlFFPjl+UE5eQk0yb2tJKGdZLSZfJkJDVjZSUCZJ
JEZuU0VNM2Q9MGZDeGJ4QTZ+bD41NC11cFRydwp6WWdYQCVtPmpzU0dpYDBjUXQ2YjhjWH4rMDJJ
Z2hWbE5ibFI3ZUk7MHBzfW1wV1VjeHR5MXlHNTZDNXJoJWVwKFgKej8pIzJkP0M8NHQtS0xjKkVB
bj4+TTglSHZDMVR5QlNvUE5nKDRpZH5IOEp3TyNJKUJmO04qeTZhaTZLOV9iQWA0CnpfZzkoLVI7
cXlIJjZJJGBiPGZnfjtTQH0rOF84LUl0WiFUUzwhfHBlaSorQ1dpVkg/TTFDRUZNe2lqX2VQNGRM
Kwp6c24lZURuXktwN3ZMRW58RHEwYFd0JkdwWj9lcV4lcHFYVlJeUEEhWnlvR0xJN2loRGFXaU5p
JE02aClQTnd2SFIKekVjQTgySDVmTTZSbnBaIVI4NzI+NDJ2fDBWM1o4SVhOKnAqOGckZ0U5OCtK
cFhOWStqWHhVMHpzUl5XJCNWPUtQCnozQUVGcEBPTH1XcXdPZnNWPClBXlVURjQmSEYxdlFlY3o/
TFdFQHBeWjIpez1LRUNfM0lvcHhfZVM0Mj5EZWlERwp6V01YR2JZZkd+VzdDOHNAQG08Xz8jR3Fr
OyEmKV9LZXlAXjB4SnhySmFodntCJnteIT5UVjdURURabFB8JD1aQ3oKem1YPVpXdHQ0UVpLPFk+
eCoqKWxRUW9XOHktWExpT1F5I1RgMnR9cDZsKlNgNjhvanlIQFVYSi1ifkB0TmBXcGpGCnolNyVZ
enY4MDdnc08hdj0hKDJ1UikxNiEmVTV+VlByUEh0R3pVVT8ydyhiMVhjaHF9KDU8VHdDPCVoMG93
JUt9aAp6VGx6fTM3Y15kYz83ckVtdDdaeTkjcXxWKzViRTFjMDY/WHtlfiVURFohQHVHX3VVIW42
Vkp5PW9kV0tTP3Ajaj8Kem47dil7aSNgKzFYO0xzXig5cCE/NDJ2bGkoZnUxRC0lbmY/LTNWS0Nz
MUpUXi07e1BnODJFR1omfFR9QSN3dFAoCnpSXmRmfDNQNEpaMHx3ZXVDVj1Kb3BMNk1Mdll5Y2Jk
Oy1YeF9yKUhtMX4oMj5FZF5HfFNEN0lHK2t2Z3lWa3NVKQp6KDBSKVNXMVYoPiZxMm5NJVohQzk9
O3BUZyEoOHBQU2MlSDAxdXJYbVFJNkdpXmRrWUNZZnU2YjRedFcpKWJeVSsKeiQySyZpT2dOX09V
N24jR0MyamdpWFV7Y2FPNWhadDAoPmsrY14ocj48I218I0pecz96QTZwaTteIypycCY7YXFMCnpS
Y1ppMFE0SGhWWDMkeWJjbHhvNEZGSlcqYElWYClCal9MM3JRZT81e3dMSmgxNjhWZTFqWnYrZjFE
fWYwUyROPQp6bTRpfDljRVd6JkM5flpJM3EqZ3dXSF48NnNCV3VwaGd5QFMzUXk/TUppTD5nd2R8
RTwyaDktJDM7Z1Q5Vn5TNnIKeiljQWNtRTBLWE93REE1ZUowMi03NWR+Zj8zO243YTlkX3hQQkph
TztaKSNAczdnazUkUW4oRmNed0A5YzVXMHpZCno1OWlzMD9NdF5AUm9sY257NCUpSW9hdChreFFI
Nn1oSXlrU0Epemh0PTlGX1cqRCM8fU4oayYmO2s7JmdLa1dJTAp6ME9mKnNQPVgoVXl1JFB3Oz9G
QD9qe309PnthU0hGY2lpIzc4RkNeNkpHcmctKSEpTVY0QUt6PnBYbmhWZ1RneDgKejEmNVk9Pnw4
UkdBNisrRnJTeT1fX2tfaW14fHotRUlAZm9LaT50SzBIcTJMZXRqVW90Q2drMlFGWGFlaiFCV1lM
CnpKY3tmdigmcUE3VVVKfEFYTDxUZSNzdmdMZSRHUlZ0fkMwYCVBWistPVMwRF5Pbj1pNDJrQF50
Si1MWkdkTHBSaQp6ZHJWNT8+YzV6Kl9OVyN5V3pLdGwoYzhtRVd7QT41SGpeZ2ZaXkhDOWxRTlE/
Um93WGptdUNqNCEhNTRVczE9aFkKejB7QC1waHZDfXlscyFQbUF+X3o+WSZuJklXOUZRY2p9OShP
TE8tdF5OTiRjMG99WWtzQ1VXdHxEVihNSkIlJVNyCnpkZn04ITl5bFUyVFchPVR7PylnLW9qQU1L
Yz4zcFc7S2laN2YwOyZnKWt9S14jSEJoRTVvdCklb3hxJCokV0BiIwp6ZzRwPDxlMn1AfVp0STA5
MSpmUjZFSG1oYzJKRlQmUys5TldhREohQTgwJEdGRjdSYEEleGw2PzNNV3dGSClraVkKektrTzdQ
KFl9QUlZbCFiQHdVe0hmb3lgcUdgaCtGI1NKSnsmLXM8eytAYjliUlJtKzI8Pk91YE1FfEtkMVdI
S0A4Cnp6TEQrMChOSFdhYEJ7ZW0zWWU/QGFWc0VpPnkjMFhWWmZhRnVxIztYNUMzeyppa1J4N1VZ
NEZGe1p0TkhOTz9BXwp6I1E/aHdSdn5EOGZQRWMlQjVFLVpNSSZUQW1pa2x8fEVFUnVtUUNSaDdw
Oyk+ZmRaTXh2S3E7a3kwfTdJamhKcGgKelcqdXV1KjxGJil1Vnw3M05yPihZNilTO09kLS04dVJe
UiNzYiRjbUZDblBjajlQUENXaFBOO25gaTFRI1FuPmlpCnp7V1J8MD44RmB2ZiYjRShjMk5zb0g9
STdDZC1GVnwlKDdhYGl9Z1p3NE5+UUZGRzJXdFNeSCVAYz8lOVVaK2tlegp6O1B3R2dnX3I2Vj5L
bjVuKG5aNDBQNHFNeXJDUDNiRGtKcEBocDYmWDM+Z3pDPj1mQEhzZW48JUl+N1creEB9Yj4KejB9
RXQqdnhfNTAtcUBQSVY9KDMmVGJtfX1RUm8qRlAyQClBI1hYLThqWXNwSWhhaGA5dWtQQnIpJDg+
VG10ZyZSCno/SkJvSDE3PysxQFlAcj5hbm9LUFF9RjhvOT92aGNHNzlDanZeVjZjdDcwOVZPUXdn
e2MwUSNyQlNzU21LM1E7Twp6QnBOaWhsM1MwX0lHVkUpXmAjOTQjan4kOzxJU2JRK3pMTThRX3NX
cEQ0PCZTaWNsfCFhfiZBQFBIYFVGUnI0XnQKelNqQUE+Nyt1ODcweVdpViRAPXt8R3JCbXV6NGIp
KmJDT1BrYU4wezYkTXZhek9FQnhGZEtaRGxiVnZ2ezhfKmtKCnpmRTZDYDQmS2t6PDV1JWRFZFN0
ZDg1LTVVSEc1SU9XYm84aTlhemdnI3p3LShQMUFBMDQ5aGRkQUIqVWRHM1ZuMAp6WGBPZ00rRU18
PCtLaEo8PWs/en5XQTV3YVZqP1Q5ZUJkZkpHZWJWaWZCS1MxdTwkI3ZsXjxXZyohIU9veUpAR0cK
eiUrXyUyRXgtQSg9WihCczZxfmFnQndCTCtQY25zNXlUWVVDSV96RXYzSk9uT0I7N2Y9aDh4R2Z8
SVFsK1F3MzcjCnp7QmhSP3dqYUZvKUZwUE5OUmtuNjE2SWBmRT1ybCs8VnY9c1h3KW9UQipuc3ha
ZH1eaHF8bHd1THEydFBZSzlDaAp6UH5yV3xreHstUytxO29qZHpuQVd1OSl4PkJ2U2cpeHNuVDVB
d19aWSN9dipMWE8jaHRCPmZ9eDNxRGRESG9GZWIKekFxNzswQ1c7WEpgZCZHKjlWKUBIJjczOURw
ZldZemRRdCtLeF9FMUsjQ2cxRU10RmE4ZVFSa19KdVVkSEQqMjtXCnpSflhGbmwhTDJBPzQ4Tztf
aXFDVnIxb3hFWHZPSWlOXzlDVVZUWnMzQ35QKzExfWVieVRSTEFDaUp1TUlHI2B4UAp6S2xDfEUo
U0BRdk4rJXBCYzZ2UGlRUzhLZ1FBVWg3NUMwPEx7Ung9O00tKkxDczJCcDxqZk9vWmVwSWVIMSZF
OUAKekVDY1JwNn5UU2F4bzl9VllyJU9tKXtTcXRXPE1QUmZ3Mi1LMV9jOSZLT1JwU3loM1oqOT1f
eWBkLVBuMF96QXcrCno9a1lJJVhnYD1MTnsmcXc8SFR0azJNS0UwcjtXb1gkbH0+YTJ4Y1BRREQk
fSpiTSZ6fmc4Kz05bHRta1QkO2M7cwp6NV89OCVpMEheZkVBT1FiSFhmMDs/RDxCUDs8SFZRSTFK
WnQqdik2UkFxJmdhZ09eIUYkc3BYRWgpPk41ei01KzEKekR4ajUweVlrejRveDlwJEhiWnxIPzh1
a0FiTEVeUCRAaH1MJWk2UVZjWT4paSF3PWhrdjJ6dnJkdXV0JSE4PjZiCnpjdXMzYmgxd35MODA0
RVoqczk2P0dCJjxWNXk7dmE4Ymd2JkxoSjxZWUx4am9KNlBKO3IyVCRuMkdaWismYmxCcQp6TkA7
ZlAldl5rel4/dUh7S3BxKEloe2VDVzVPbkU1JUhha3pZNnNNbCF3ZnchKGxCbHtveUR1Tk18YkVL
VSNZdFIKelRUSz9uLXs/JjVTengpeV5+V0tsKGZHPkY3YzU/bT98dCQtdHAycktNeT5GKj00O3cq
ald9Xjs4dmBzdCY4KWM7CnoyQ3Qyeyk/UyhaO0BfbWpBRWpiOHg9cUFRdng9fVM2bDk/fkg/UG1Q
YC14dTtNRSpCOHNtfCFoQEJYND51KHhnXwp6SUhtUXpwNFRnZipKfVk9OFNUUjVfcylHS2NtZ1Yh
PHpMQnY8SkN1KlIqJDdfYl9MezlHdndQYnB2a1RAMSZNUyQKemlqWWZ1TE0/UGEtQkEyfWlYOUEo
MkspQUZAY1A2UWt2dkNMeXN3ZERmP0xJfnRafHFLUHRXUiNeb2FtRkJSY1VrCnpzNWIkU2MrPSVW
ckwqN0JhKHBwPiRKS1RnQExPNDAye3tXcmc+I0Q0LUwldmptdEo0cj9wJiRGIW8tQk9mN2Vqfgp6
NilCdUteXmcxYiMoRT4kc2B0M2kxM3s2LW1tU3A3eztRa2VHNXZ9R0FOJmxNMmxRVCRAKGFRQ2NG
UCglVXlaYkYKeiMkSExUcUdUXkBGI0EyOWIwSHFpSjxaT0tTMVAjUzBJVTZBa3NmZlIqd3g0Y2E1
cj5zUkpBbGg4a25nVWBCREk2CnpKVUV+JiFjUSomZjk1T3QkI214VTUrKl4kcWdfRFdOZGZ1KzFp
cmdsQjd5RGdsekgoKTIhQCNycHUpXjNTOHdlVwp6X0ZFJD1qXkdUWSp8NVNIOTVPOG84VzlGbHVZ
d0I9MlB3dGJXfEpHNmtjVl5kTVZtWCh3RytPdGo7RSQlZ2Z1XksKeiF0fjwzPz84PSgpV1FTeWNz
Qkt5MjQ+TmpSdHVaPnp4SklFRDtZWGFVPHh8dT1WZDd1dVp8PnokQDB6NHJsK1RXCnpXeG12TSQl
NGpZSXBPPmo1azF0MSZ9MVZLTX5zITxFUTZxOFU7RVA2PGdGWVohbSVQT3hVQkMkUDg5ZSo3T25y
TQp6ZFdRQSlDalgjTFlESS1pKm1uUVpyO3NOPDZAU1BPWE5NfTlScF9oY0U7eT5lTHNDVlFgVFRq
bjNKUlhaRH4+R00KeiQtSVR+KFkpZmxOcURrQyVEZmJ4YVY5P1F1V0NWJi1VMXl6clZAMGpSaEU7
KVpPMD1yLXtzQFc/SE9GYlJIRERWCnpxO2VMbyt3T1c7bkl8I21OZihKP1JJbUI5e1lTTzJZYDk4
MjVMeiN1NChuazMpUkd2M1g4QihBJFRzb250SjhMIQp6OUpQXmVXeHRLQz9HOF54QVphMUhFQ3gq
cnAzNXMhXiU7JkBKeWspTmV4VmMpQFU0JF48RCR3bW0/WHBILVNnNCoKejhCXnc7PEg+WDFEYWc2
YFdLc3woSGhaI3J6TzJLRXczeGh+LTA8O3x6Y3MwTD5PY08jWVlYe1M8VFR3KSoobFpDCnpJeDg4
OE9rRFkwYUA9cEZQM2ZoVEdFMCNrdWFARXFKOGhwNFZTTnQtWGZ4JklxOG1yKSNVYkpJQmRXKj9f
OWZkaQp6N2YhMClJeXt4ZU03TERpKypRSj9CZEdlRDVlMCgwYVNtJkd2alEhVjZDRDB3ZSpSKX5N
YnNafD5OOG02YDlwcCsKelFHQHEkSSlUP2FvZSNBb1JAJW9tXyN6PWNAeWNoIWJqfmxWMTNRaS14
ZyRpJGhYRUFCI2w9dDdRV0VOR2JtYTRMCnpiQmYqWCo0b05ZWlVkXzsxe0xuX1plQXdRdjR6P245
JGVveEplST9sVTleIUFCMll+QXdPU3E2N2RUOUFEWilzQAp6Q1JZUzdXJFpwa2R4JDNUPjckSSUz
RUkyaWt+bSFmNyYkRGpwdDZrWnFEV1pKLUd7Kl9lWHMqQjgkMVI0K0l9S2YKenFuaXdDSTY0cjs+
aDJMdXswYygjQXRuKSVFOCYpPTBTNEJNaHE5JGB2dXxDdDtedXJ+Z0xgYkQ+SkBsKVAkcV9BCnpP
N2IzSEdPVUdgdmdIe30mJkFncjxGbkt5fElGKEcxaVIqYEdXMjQ3Vlg8YUFsSjJGP1E8PXtBaWIr
YH1fSHlFKgp6dWpQNX5aOUBJMlBCaGlPWX1jTkE2alhBdUlpbWF2aiMkWElzQEhlekUhVTI0eypH
dEFkSEZ2cihPPkZ5JUtePj8Kej53ZioqY29aMnZkU0RjTllTbX5kWih2azYmbTZiVkttVmdyeC1Y
PD57UXpBISkyKkwrSExUUXokZThVY0ImRGpxCnpsKS0lcyRadFVOLVIhNFppRz1MMCNfUD1CYlV5
SCtZUG1GbF9vZ2trUSQ9c0BUMXZ9ck5uWl5lTWFxSnxxdWMrNgp6KnlnY2VET3JsZHNMMzB3YEg7
ck51K0k8VktVcmpMPWJEeX5XdFM7O0sjVGhSR1ZSTU5GcSZHY28qcGQrQ2hPSkkKenFBYmJrLSZr
U3QlMyFNQ3B1ZX5JJXxnYmxIez1QIy0panFRQyV4Q3B8Sl5qVU8+amxTK0d+cCYwU2F3WENBMStE
CnpDJWNadGpVa0xOcSVGYWR0SEU/Tyh5UVRQNDg2QXsxeDx7a3JxI3JwYXVOUWFleWhNMyppMCV0
QnBRSFFvLXUpeAp6ezB7JktTYD59dmYyX31iMTYwWFpPMiRiKWN5ckhxN1pTZWlTYlJ2YXhuS1VI
e1FgLVAobkwmXmZjRjIpe3ZoTi0KemJYJldFalA3P2I0QSUweTZuXz1tJWwwMHVaK31tQ1lPKCF4
P2okK08kKlRxb0RfUTVFb3lESj93P15VSWE0OTFICnpFfTg3KGJSYFg7QHUjM1F5fjl3V2RXUUln
MWBjWHJrJHg5PWNjUnxSWTF+JXtmQUpAdXFASjNlODcyeDB2JGhtdgp6ZV9LY0wod018bjBFT3A7
dHtoS29vaFl5RG1ZTzshYDdeTHg7MGs9UFdQR1pwST5WNXFZbHpqU0xfKCV8bXVkNTAKejcje3A5
N3NgVXxTbiRXWUY+LWl7aTRga3psclY2YTx9PTcycTJzQVQ3Wmh7PlAlKjZCO1psO34weFd5bXQx
ME1vCnpsNXtibVIod0plZkpwTkdLPWZTUlB8bXBDSS0pTmY2P1B2PT1GY0ZtcFN3RjElQ1RPdWNW
e3lxeFN5eDRad3MzTwp6OGhyNVV5ZCVleklPNz9QbkVPMFQlYWYjS09pWEQkZT9WJk9YLUJ8Wlgt
WXNnU3Mlc3YtNlUrc0xQdXp7RDRicXwKenBkJnxvNXROQ21wVD4odUliUmY/OGN9ZDNJcE9iM3Nu
Nj5fZHIqMjZSI2V2PF9+dmkpd2xlVyRQPFd5bl83bjAtCnpsKUxJZ0YwejskeFR6KDBKZ1cwdHxL
MHt8cGwrZDd7K3tmQVcpbEIqUWcoe3oxfnFycGxubURTUCEyPlh8NSkkXwp6K198PXBpKDBEKEFC
X3NqUTtzUVFTTSZBV3F6RE8xQE5IdztDOWNQZFhSS1JJI0BuVVcpQ2dGeHpRMW55ZCEraCYKemNq
VSFVPSZ1fD5AfVIoOUQkJWx1MlRsVj5ASTItbkBmQ3I1UHI8ZHRQbGZBPFoqYCUkV1M/VyFNNy1Y
QFN3fWxmCnp1N3NMa0lgQks2Z1RCd3YwbnFka15TcWlHQk99VTE2LUt5fURsemZwVnh4bkVBY3xN
Ryg7I0E3YjtIJk1QKnJpRQp6SHI/bClzYXAoUWBQNlVfQE92MThRSndJN3lyfD02WStUYkQyUFVF
UGZzaCZWe3M/OEFBMmRUPlpOVnlLV1I3aG0Keldqb3lePCFSKkolSVhFaz1FNWNqNmI9O2k5dTN1
UXVNSDR7cU9UXj1PR250Xz1uMj5wN3Y4bSMkcU4wSyM4alQtCnpxYG1TaXJEWkRhMUp4bTtSZzM8
SmYkIUJqOWA8a0U7U3orVF9NKW0zLWZfXzJsXiZDc1luSXdWPysldDJGR3tUYQp6SS02Ny1YN0Z1
LXhicmROQGNuNnozX2s5Vlo/Mml7PGllJW54KVVVaVVUTE50SEVLKTBIRF9xVVlwVjBYMzB9ej8K
ek0hKkBvbVJ1PnJBUGhDKUxjSTRALVJ2S1QrQDkmS3NSM2IwXzB6dU0hRmc3dT5vRj4zYnpPeFpQ
VSYkYWIkWjlACnpZKWY3PHZhOWBfTHZZNiE1SEBQTVlpPyg9eU05N0AqcmJyc0I9b2hgdDV5ZG5O
MkE7MTVEeXNJM24/enNFM3taWAp6cSt5Syp1NUgxclZxOG13diF8ZHZFJlBXYXp6ITBeTFk3ZG96
dTVxYVMzUTV+cX11QVFVSk41V1crQSZ3dnBobz8Kej0hejFROTs+cEtoMjJJN1p5a0x7WXNkamNx
ZU4rKz0wYX1lbFFNLTQ7USkoYEVwM3xWRkhxblhPaDE0YCFCdXMmCno5dyUqRVdLNkFpQU17cyQ2
flNFUVM7QT5leSQjYDcpa2hadmFtZW17UD8+ayk1JjdTbCYmTlhLa31vISV2ZDstIQp6cG8ycC1f
aF5iJEQ8ZmR6PEBgSDNufEhlU1ZSNzZLQDZ8XzkmLVZIQVZPPTtgdjFyTjhJfDlQKVBTN3ZwODNl
ZnUKemB5VHI5T1ZMenw/aCpJSGNlN3NkVEBLdGIjIT5OQk8+e2g0SmRHQj1EPmZ2R0lZTjh2Jlhz
ZnhVflZhZWZMP3F9CnozZWtNPzx3TkR0STRKPERDNlhCZ00yNk52IzBpdXQ9WndBI14+aU9La0N6
UUhrQmtoZz1oRCFAJihMfUZjSEtvYQp6Ylo3KUgxQ3xsSGp3RWJAdHU9bl5PdmRIT283bytXYDAt
eTNLZFAjYmJ+d009VnJfZ3lvRXF8I0I/JCZkJHRhbHMKemlJcy0mN2lzQnB2U3xDakN8N0MmM0kw
U0U/fmBhJWd+JFBJJTthdV5jVXBARVIzP21uLXx2eXUhJDdNVjYodXZ0CnorQ2NHdU0oS3UyJkcw
dGNSQ283I0QkRGlyZnFlZjJxUE9FNUkpb0NHem1SNUchbyNRfihrfiljPUxwSWZyaEhRawp6ZUF2
YTZNaWxFaWZFN3JnUDFNN0F5V21MT1hLfWk4Pz16PGopVHNDZyNNST4yO049bm8pYElHbSN5JWFH
RT4tRk4KenlYQ3AwU2xue0lzZk9CdUNkRSojQENRb2Ylanp1VSpqa1IqU3UzPzV0fUYoI2cwQkQw
Wnp1fDFNRGVzOFU3Zjk7CnokSkJnfG1xVFh0YG11Wjg9WmAzd3gkdWl6WkdfNz5HSTd0Y2ZPSFdg
QzJiS3hOT1IpWEF3UmtMT2FIUzR4d2xINAp6RHBVMjkjNndMWEk7SD8wU2VgU1JhJklfUW1Je3pv
N3AldXZlQlowS1pLZDlINkBVP1lHQXJiZm0pRCpeNT0mUnAKemBrezM1P1o1R2JabnY+ekBObUol
K3N4PTFXYW5XZyk4cn1DXz5FR1I4bWsoTlIkcFc8LWw4T1RVXl91M01AZ3dTCno3fUdHYTEpYHo1
R3xEWmlydztGQkBWaEg3RHEqMHFjPXw5bExle3cyI2BnK19udDx1QkJ+aVFvSyVqK0JSe0tXJAp6
eFVvRUU7dTw1NnJsXz4+XyVvPH45KFZaZT16SSpTU3o0dzQzLV9vPjRFNGBNQE5QS1RXWnVRSnMp
P0tYYldwMU0KemltZDVGOz9BUChMV2NhSS1eU2x7YH4+dG14c1FCOVkkWGkqe1pyI3B5XytJJHZ4
N0BOWWBTP0hGZlMhaFVpeiRhCnp7PiEmZTEoMTZUIU9tKW0pJmsxVyMqZCNHc2xEXjQhVHdpRjJX
akZCdmk9TXMhQURUKUFyRVc2emZWdUlYY1hWawp6PkFIalBBRFcrbUp6WWBfSWVxKHM/amJrNGlE
MlJiOCpWM3Q2P0krRTA2KEs4SCEheG5Eek8lR0I7WiROLXtNfEIKemVUYGpvJTkpcyVvcCpYWktE
ZDYqKS1ebFdPeyNSYUlHRmRCSCs7WFhqSSg4UnhwQmN+YXpHMUheMnY3Y15ia0ZFCnpaPCFkQDY7
WHI9enJ6XiRoX1piY2Z+WiRscnJCdzBuTD9CYkJgaGtreCYwMXFjc19AKGBkajVNJDNySTJKS2dz
cgp6U154fj9HfkxURiZQTD5DVlBFK0UqUT1GU2U4Vm0mNnxeM2tpezl+cWFmaU1BZjdpNEFQWmc+
YiUmNT5uVEBwSEgKeiVPKnBPdig3NzxoX1B9TTFmVmxAYkElOzghJUckMnYyXjFLO2F8SnwyNThp
YUZLPEpzWStQdnNlRXJ5SnAkNTwhCno5bFhHTnA1cXJ2YFQ9c35fQDNSeS1CNm88bTtULWxRdGpM
WiltYFgybUtyTiM2YD81U0k1RyNxQ2NgPj9aaVR7Vwp6QmlieH1RMTJ0UmM3UHkxTmNaVHBgUTRl
eSVUX25qQDxyNFJMb0ZpUTFjT0chVSFALWYmRHJIempGcmVnNnJARXwKenZFezJRPWtGSlMkZ3dv
KkZWdGw9ZXBnfkx6Z1ooJkU3Vip5M2N0fH5BR3ZJLTNKY1lyeyVERiM9Oz9jSDZ+Z2UtCnp4T2xk
XjY+MVdLZzVGel9Samw0d2xKUWopcnRwOHlMM3IhUzxLPGJpZDtRK21ZJkVNWk59IUthaWVUfkVW
ST5oeQp6dlp2bm1oIXRINFQ2SnMtP3ZJMDwtcnp6bHttZ1QqUzBkXzdeQVVfOGdCZ14wM28tSj1w
KDFvNmt3dzJoeHwhJVQKei1qcXB9bV5HKlc/JCFSI00lRWY/JjJqWXhteCtsWFdac3pwSTRkJHA8
cjt8MyE/QDNBVzwyWmdpMDxoTjlmZilOCnooem82SSstJDlCeCooYyQtYmswRUdxQnNiOTFubUg3
eXJOYENWaihRQ2FEe1JKZ3ZWLUpQa29CUUF3R0Q7bnl6bgp6Kkk7TD9MPSgzb2VBUTxyalc0TnZX
eSFiSGRMT0hNamV6R2IjSGIrbFNYYCM+VU5gKFMpfCpjXkNnZHdZPkZhPj4KemdHQkpod2U4eSNY
ZCpxMD1AU0xFZ1BGPitRZTQ/JUUqdnthYHx8bHVafiZkcU1CclJmSntTRE1hSiFzXztjU0pwCnpT
cVpIWElkY0BAWHRlTnlTVVpzXjlTRzd4S2A4PU5CTjxWPUUpT0NnZytTMHMlWEBtOGRPcXM7eSoy
VSNDX0QpdQp6ODE7TXQ1cF51QzNQVkpQQDlQSDkhPDNiNUlFXm47a3dtfU52UDchKDdeUCU7MURP
WVZKdW1kMUVnOXpTdmJATTwKej04X25+cmVWTlh7Und5MTh1bkB5JjtlbWVzV2kxWFFvb1NtRHUh
PGtGbyktSFJQNXBuPzswci0rNGl+NW1ZJDI4CnooOz5NKWZSVk9qdylEXil3JUwyT1BrVFEkVGVs
LUopR0QzPVlYeStGNGluKElMeSpBM21AM283M3V2P0pDfVE+Zgp6cjxJZSZ0R2JNXjBOPHJvVHVE
aio/U19PKEl9QiZIZT1lOFBsOGB0akdnLU9+NSVUVUk8MXlRMDVyKiRPYzIjcyMKejglRldyZER0
bjc5LWN3YTJwWDRNXy1KRng5eks3bUNoRE0/eksofl9LOT5ZJjhTV21lc2liYTB8M1gtam1sTVQz
CnoqU1R8X1VATz1pKnNNXyo0OEcpZGdYcWx3b0ZwNUc2cVNNMyYlX2ZfKjxxeHlJTncxJFdlNkl0
PDBJPm4hUDx1agp6Pzg3dmRQT0kzbWt7Y0dYXlI8PmlUPj9jTkkpZkFVa0F7cVducWRNaSthTktf
eVZRJmx4NFVaa25BYzlGSXpWayUKem82Sm1GSH5je190SyFndDQrbzI+KXpvUHtzUn0hIXZmUmpJ
PTEzIXo8ZmM7e3Q5eTJAX3ErJXBvYWJeIWp3UkVyCnoyKyNaZjlkfjM2c25YLWlaKDVVPjV9aWpN
RlE0YTQ/UUlnLUJFNFQ2ISMlP2QmTDtgajU9YWA0aXM+VTslQFJkfgp6WEM8eGNDJWZLPWhDU05Q
VyYpOG8kOFcrS08tU1UjNUxiVnt7UnlMKzA5OUxwQzs2IXV4VSZ7TW1FPFl7YjxoNTIKeiQ4MVlu
Q21JV3UoMGRsT250UmspJj5+SDdlR1FoaFlXaE1QV2Y5em5EYllJZ3d1ZCg2JFczZT4kVzQkfmQl
cW9KCnorSkVgMWckcUolPmJ8eip4Q0tlbm1wViQwcE09R2wtWSpMVDhLK1ApMlgjO1hZRUZGNG1S
YjxZVEl8T28qd3FDNQp6MGg5VmN5ZDEtYVl3X2s7dFZvZFc5NVcyaGRFWH1GTFNycHxSK0dFNTZm
a20tUCktdCRWKXxBPWw3eHxtZWZGWkMKelhNQWlsckp0OG8pJWR6QD5jfmpqP0RNQCgxZWBuTD1G
NFN5dilUS0llUFFVeiliWjxsVkNnQSQqIUZtZ3hsNm8lCnpqZEZSQCZKS2dvbkw1dSRTUztVKWhS
MkpPJShYITwzYDsybWF9ZzdpX193VnIxbX5feUtBZk5obTNjIU5sQkc4Rgp6aSopclghNWNZIWoj
QiZCaDVGKSNyYlBTQDRRRER+QHVsQj8oeHw1fHA0SlduKmRBR3w8O19rcTw0SjN7V3xWJSQKekZ1
eCtpbz9ZbT4/QmkzQEdASE8kQXBzMUR2REdrWUY1ME8kX3dlbHVeY0w3O3ZQaU1HaG83NCQ7NGZE
cUtiRXtVCnpkMWh7O0xmTSNGYnxaJnVIflJtX0opUn5WeTRiOzE/dFdfQSlJeiNTXz1GfH5wSVNh
VmtDblEwJnUlWXolbyN8IQp6Uy1UU2c4N0xVZkZTc3t0VHVNMyQhMDZaekgmTUZ0RylYLWw3PjMp
Vj9UeHVqMkh5Ryo1dTtFWTJfNXZVMHVqQT8KekhYaDVHJTZlM3k3dj9Bamh5WDc5cG5SQlZyfVJt
UG10cnhvQjdsa3hFekNoWF4odktkK3NMaD9TQmljPVEpNW5BCnpkejdNdzNfaUE+O1ReX0tsfj8x
fDV0JUdaO2tpXytpPlF+UTFFVmRLWikkU2gzTE1AZWEmRH57MkhPRysrNyp3Rgp6QUM2alc0PmZh
fiFWcDUrJFp7PClReGJ8PGRveStlUGZ1Nm9DKDckYCZXdU8wcTAkK2E5YSV5el97NXBoUFdCejcK
elcqOz57dW5NZ0N2MilAJTNqPTcpWmMlVTxeaXxTQUY4OHMhQV4rWHMhT0FTWVQlNztKeD9vbGdf
Nk5GUDE0NzVOCnojMHM8QEV+Rkl9I0xOUXs/QjE7dCtOJDJrKmBLJEh4YiUjOHRSUWkqWiNObzBK
fVBsO0hXYil7bDd7QTgocHUjQAp6ZkU8Rlp6VFJPYT97fD8/ISgxTSY9NHQjcWRvUzxeTmErb1lJ
eEM7UW5VSzBhbUBYLXYkKXV0PDN5Y2ExQHomdDkKek0pZHtYX1I2Pi1PVHZFcmVvejErcGA5c1VJ
JTx3YXN3USpzKE1VUzdyLUFEZkw/QEtXMCltYko7fFMmcVQkMHZYCnorM0E+WXtlNUwtb1RQX15O
a2dwWWhaanAmeWtpbm5XOyhmdTE7dHRwU3NnWU04QUJYNGRIZV9IeFUrJU0oRD1+KQp6WU19WFVK
NWd1Wjs9X1pjT3NDYF97Q2lVJHpOMyQreCY1Q2B2WC1WM2A4JlJqbEJzXnJmMDBNTllaVytqQ2R+
N04KeiV7akp1VVV3WShNYDgkYEI+SyZfNDghTGk2ODJaYVJrbk1nUTN+ZG5scDhDP19fIVAyekA9
QXV2O1ReJHlyc055CnpDQVJtYUFAXllvMnNTJTIkYDAzMS0raDlLPEhUVlRlNSlFUXZwIU1XKGlh
ZG1DSlMxd1NiS19AdWZvPWRsT1l9egp6Q085elZZS2d8SSZvPCU4U2IqfEYhU3whMTlvcC1wJmc9
VFolTjlATCMoVW15SFJGaikpOXQrZ1FwQmZiVGVzZi0KemFgMm5WVX44U2Q0S2Q8WGI+TVpzSUhm
Qj5zQH0+WSh6OTg4ZSFgJTQ9RURvQVEwa2JrPitsQ29LNjBNeDlQIX5JCnpscX53ZjdrY21fTkZJ
bXQzWllsRShiM08xS15RV2lGYiRWXmEySmx3dm0oIVhZeDxgaUBaTVMzVXdGdHs7eCstdgp6aHh7
bT1tOzRkZ3ZrS3A1eypsZlNOM29ea2VTcHA5e2hsWGolPX1lXzdPdXtZaXcoSkBOWHVoKjtwTDZA
JEhzZkIKemg/dityXmNwQGpRNEU8dkU+c3BDI1JxcHdQWSh9X1NTJHdae1M5NTlgQzI1Nzc3JnNn
dE5oJVhUQ285VkhKQy1HCno7O3dpOXstaXYrRVRpWTtLOXF2bEVjMDRmO1puVVA+Y1VMX1QqbXNg
YEV0R29QXkIjUT5uMmRTcmJBZzhhPipMZwp6ZDBFSl49dGRXfjdmYmNMRnNxcnlGRWN5Ki08VWpO
UUtQU0U9X1BuMj44IT87biU7Ris4aXtlWnlDRGFpWXhnaHIKeiQ4az5MfDImLSFsaHZ1VmRrIXIt
a3BTRmxgNUY1ZDRESnIlTTQtcU95MzxicTZleysldzxFV2lobjEkJUt6RmZ1CnpgTEtIa3l+KXpk
b2k0Xkg4VT8yekx9P2wxdTZNRCVqZ0I3Jio7UWY+Z2RtUWI8RyRVVk4/Sm1LU0tCfkwhT1I9aQp6
SUBeeSMzI3szaT5xRjE9YUJ0Uk08IUNUNzQxJmk1ak8rczJsc01YdHdSUExDbTtTbiEtR3BRPjcp
Y19BZT8kYjgKelFnNGM4KktRe1hKbUwpMWM3IzBZbjAjUFRNRXM0LUlIPFc3PlBqa24wIT07SmRo
TVhxek1MZWhgeU95bFhST1AtCnpsI3ozK2Z3TTlsMyVWTig2Ujc3dWEqdUk5JWhPN2w3eytIY2Jy
KHBlaDthZlVLP0I0RUMwOUp7LXV7bXYpK3UjPwp6ZEtWQkNQdGBlVUBJekwpT1hBYEU8bzEoNTtt
QzY9a0AtIU9sMn5FfUo5aE9FPz8pS3NQOzJFUTJ7WigwZ3d2fWYKeiFJdDxuJipkS0hRbzR4fGcr
MHVeaH5sWjVPdjRJQyNUZnEqQ3B0aWxWTjtIWHpgaUs0ezFGO3RaaDhTbzVYTFkqCnpYeGdCO0c3
Q1ojPEl2MVg0ZT1OSWZIeVQ7MiNlazEyO1l9N3FBKmphNDFqVmJkdXlyQiRIUk1YM2k0IyFONDlv
TQp6PURSeiYqQDVQMnspQEsrdyEhSWNXNTg7UDw8KUk9KEg2MG03SXpAVHt3MWY8JX56Uz9mOXBS
XlkqI2ZwVDxOb3oKejE5dmhlPmJ1YFhwP3UwbSVoJlg0MX1GTmZuSipnMSExd2NiYnBvJUY0eCEt
I1I5ZnQhOHs1YEhvfTA0P0ZJI0tnCnpMfGtgdEYxdF9geXdkeTgod25UdXQ+SE5EKHFObnElU3E9
QXZ2WmJYbkx4fG1KaGkhKiZsd0cyZ3xlZEJkVmdMeQp6anZWVEtIQXgoKyZQO1AjMlhvYm83X1J0
dFVpKU5sbGN9fWhYPnxOPy11NWc3VkotTk5kd1ljYU9HP05LPTUpfWAKek10T0w7b3xpMG1TS20o
VUlfN0JMX142SG5WT1RrdVBJNnlAWkxSKEg/YzFjci1fb3VTTHB7NSFieF5EaUtkKlliCnp7Szc4
Q2k8bCUlZXBXUSQjTlI5dUlmNXxTM0tWYFpUSiQmcUo2YHJ5IVZocUJ1UHMoaiNqQyYrNXJeLXh6
UjZmQgp6SzI3flQpWmVraW1WUlJ6LWxwQ0FKdTJ5Uj8xfmdJdkhSNWExTllqJCpxM05ldGw1NX10
cyFvaXgyPG1ecTRvS0EKengmcyRHRmVCRD8pNyVAYjdnQ1FQUWtiemNZLSNlPElxYm1IJmBOT1Vq
e21fN3pySkUlMCVNR0tgUCRmdEhDQ3lBCnojUUVPa2RleGNiNXErYVJOcUZiTHtJa1MjaEZ2ampI
OXZ+V2JpcmZNRkZKRCRET3YwJGY4Vl5QbUMpaEBCPzRUdAp6bXxMbmledH07ZSY5Mlp7aCVrLSNq
I3ojc0YmJHUyRUlwJW5YM1loaEg5WkBVelJNSVZZdUN0JiRWI2w+JlR3dXAKelRLbSlpb058d2NZ
eSVRbndiKUl6YjxiI2QpaXsrMXB7a3ZLZXI2Rm04aks+SD5XITtBaDVaZG1falJZYCtWUkoyCnpo
a3NwWjloYkszaVFEOTFBJGQhMCotMWkjJXg4MXxzK1NQUm1EfWR+PDFwNiFBMTMoIXZBQlA8Wntp
d0M3ZTQlfgp6X0xuOC0lbHZjTFkzMi1ZQDFTTzEqcTkyXyhqIytyaENTPUNMTW50clkzTXJ5JChP
dnVaTlNZUnJVPjJrTmdxRUcKej9BTWdsXlAraVJvSVkoOUBfST9uMTgyOWxHdkFzUm5Id1N+fDV2
RDIrWmk1M2o8NU40d05uMHtxPj5qRjkqYkkpCnpMJGtNWE0tYXdOT0VsRj57P0pyXnRPejFnbGJ3
YUQtPFo/aFFFQTNQYmNoey16cnooR21EQH5KKmFnXitmWnNhdwp6WT5NME9LT2xUZVczQyExWnl4
UmJCPjhKRG9mKE8mUjFiaCUzeCM+eTJ+PD5PWE8jSUllZEgwUWAoJiY/ZW8tY34Kej4qQWgjM34w
OXVueW1+VUMtVUZxcUk+e2RtVUQkWTRAZXZHI09STEkqe1pNKUo8cHt2d2htUkRFRjByJHM0eV9l
Cno9c0pWV258Wk0tbGdgaEttaSVwNUMqS2RlKm9gWkZKRWYxRWorXjVBeFhxcG9WKU1sUWJ1ZTcp
XmtfcWtiK2U7YAp6V2RlMFIjNSg9SDVjTSRkSzlMQXNkUz1ZazBvR05UUFZSKHxqNkxze2loMitg
Nl9GPVZ4TUVrcUI8dV95ck1uLTcKemVtLWpHIXpne1ZmQks9UUdJZyRadVl6ZTl1V3g/YUR4aG83
T2RLfEx7NmJgVnd0NkM+bD1lMWl0IVh6WSgkUzNWCnpMRyFZNmZDakU+eDZyQDVGRzFufDhvbXBT
WmFKPjkpcTZqcVU7WHhDUWs5elYoP0M5PFYjdz9MZiUxSW08fT8yOAp6JWZ2MHNPNEdTWiV6ZktI
KiY/TyZ4azxJI210X3tLV05AbDd5Ql4lSlB0PTdeTGZQZ2Nyfm1Fa0JtZkZQN0RiME0KemQjRSFN
PDNlcFpzQF57bTM/Ukd9ITcxTlJCTWtFYW1mfmh4RCVgNnRhSkFOLTdfUCtLSVV+Y3FjbXN3TlBG
QHUwCnpCRWQ/SjJ0Vk1OZG0rQ19PTzF4bkRhUDxDdk8wNl8/OzdFc0NjYmRye2NlZmhSVVl1S3lQ
YUMmNFF9KT4raSo+dwp6MjErS1l0MWdYWCYwYHgzRSloUzdJNX1zbmJCem94OUNAWHpjcnx7QjhI
dztTWTEkfSZCb1lLWEheaHBqVy1SZ0oKei1GYn10YW5uS0N2Pnl+XmByfCgxUTk7K3NabFlmM1hQ
U1h8XmdSMDFVRnR1JEIqUjskc1BaZElaU2hScj58YkBKCno7I0d7RWRvWStPO1JFRWpRfVg3X1l6
V0w8YkBNdGg9NHhja0Ved0ptSVFQc1Vmdz5PK0V5Mz5hX0tEZTFDalNlfAp6NmFycWNFWilDWCE4
cihzaWBkcWJGJHV1JnBuZl5OcHsxZipUZEo8cTJfX0w2REB0ZlBLKn5yelZtKE9oWVppe34Kek83
RDFDeTB6M1dkVDFBT3VeaDdEMV8oJW5GT1lTVyg4S0BDRUYxY3BWcUlmN3taaXhqSCg9NlolPmBy
MjtAU2FaCnojaGI0eGxhQ0FAUHdxaiNMbFVFZTVMe0kkayhaaiRkMyh+KXUoRiUmeGI4PXtOOWhL
eGxaSU8xQUJzTXtNdHwpMgp6Sl50OUlkOz8lNFBmUjQmUGg5QjljRkt+QHRHM3dsRlctMDx3fjVS
YHVLI0Z7YkE2X2FwT3xQS3VUMkcxVj13aCEKelpXUEpXYmJ1KW5HaVduPztfO21FPEt8VDExe2pS
NEkjKnZ7SD1BVXVFYzMrVVhBQDd1SXVEcFR5YGpjWWhVeiVvCnpCQX16ME9SNn0wSXF4OFJjPyp+
KCg+ZlhaU19MNFUqRWlBQSUrYGglcTJeNkJDQzt0MGlPPGo3YEVObVVkOGE7bQp6cT9ifV5yPEly
aG4/dDgyPDNZTndRTztDQHRDWVJSPHBSfXM1JmdpVFQrbmM/SH1tdEgzWlh8RUZwViNIX2c0aW4K
ejhUYnJnN0pkZlF2RmgjPG92SGZ0O2AxWXN4VTIhbGVvY35ZKXFORmMxbUFMOFAyKzk1ODQkMVg3
cTFuQlRveSl5CnokczR9WElsfnpRNz1tNW0tY1RAbjh3aWpKSiR8I3V4TyhuTCtJV3M5cWs/aTkl
cyNXMlp4cWZXYGp0Nnt3SVNecQp6KmlVcTZqSENlcWNhP1JlMXcqIUMpay1uSChlViMoUG5QVWA/
fm92JVkrbmo5KWozfldCcktIbkM8VzBRbFROQyoKejx1X3EwTz9fUG9FS2RFJSl0eUBWNUY9Xi09
eStFYChEfFRgOyZKamY/XzdDU1Q4NH5vUnlNIVJ3TEVae1pNQGlZCnpJQntVfkdlK0lLXj9IfEJw
ajhqczMoMFAyRVUlZldOaEFIITlCNXJBKDJUWEwwNzFzfmkydCFWbFFmcD1TKjZBMgp6a3QtQ05f
enwxdWM5UUIxX15HcHo1KTtuX0BwRWJqKlQjRHZ1cUp1dUtiX1B1dFFoY3U2Pzd7bTdnN287bXpa
QTkKemZ7VyRESyRAJms1NjVeWTdNKnZtSyN2RjBpKFpiNFRNJX41ZzdDP2R1PG9BYmpqVT40Vj1z
NFF1Z3tNfGlEVkBzCnpDN3xlZi1keGlSN1QmTXByZSElaGlVaEhNJTNReGkkTHp3NiYoVHZseDlR
QV83TGhZcTwob349WT4za2EtenJRYQp6aEdwZkZLQCkjKXJ0Zno2MXczNV5zTjE9SUZ3Jk9jIU5h
aCs4QHFoSjBVRUdyO0pwbGF4T0dJODJPVnFaSHNxZlgKemUxfXJ7ank7Rz8mfURhfWE3PlM8YVh8
IXROYmpHTHU/RSNNX0ZRK3R4N1F3VSFmfFQjfDBwR3c4YmV6ZSVXfVg4CnpUaCVvOURicmsqS0Y4
TE4/XjwzYnVMNyU/S2JrUk1yX2pNSUk9eFlgVSR2bDVmMHJAI0gtfF5Ub0V4R1U8d2ZMZAp6WHIr
R0FOWihqejZxSTc8MUh3dUd5UTdIXm5hSjFFJFh4WmZsPkNEc0ZEdXp1c2VlPEJ2a2FPbk47STEq
JXE5a2oKel4jbTJsbDF0cSZvTXY1Z2B9PzB1IS1ET3ZhNyZCMEBaIWJIPUtgZihrP0dmTmtHeyUp
PkNLb2Z8RHoyQlBzUDg/CnpZO2EpVGtyMlB+MF4yQmVPP3duekZfPGw0TnZxZjxXYDdRald0SkRT
dylCP0ZPTWF7OERHP2t4SEFRblZoUEY1egp6eG5VXy1edXA0UHJlbF5lZC1Qa0IxK3koKFBubWBB
O3AjMEtIaUFVQHI5fEVLQiFmfiohQ0k/PWZwZ3VodTFseEoKek5md2QjX3ZKPHY7fV5HR09jeEV8
Nk9YaH4tI19EWE1FdXpHWGNGPlVsLWVrWT0tdzI2Vm5VJVUzZjE5Wi1waiYyCno0Sl9hfG80RGNp
K01PKW1QUUlNPmtkUEcxPHc8aWNgK1dFckI+eHlkaVI5QCM8bn0mXlpAemJARl53JXpVND44bQp6
aDI3RDdHRntwfGF7OCh7US1Qci07I2pWezJ6SFI+PHJ9RylVWXhwQWRCPSFQUyooQ34qMUgjaSMz
I1QxJGoyKXQKejgxayVaQ35eN0s8b01uZzdYT0Q0PH1iKWFHZV8xajx2eHh+Oz1+T1dOWlRodnFz
cSZ8OUQjUGxHQyRMODhmTSExCnppcXEzUlhRXjRDKj5sR29GdElmSXBvTW8/ZXh1UXlYX0E7O2ww
QVA0ISlKRU0kRXdNSW5aa2orOCpJSFA0dktSZAp6S3hfbC1pKj5BKkNAe3UlY3RgeX5zNk1XQWZP
e0BGUElYJnNnOEh7R01EY3s0TTMlJEBjOCZSQWx3MC1SPDRETzMKdHJKcWRjJG1CcFdlem5uP0Uw
TSRGYHwzdj1gMyVUMkExN2g7cnhQNyQlSkxkPTYoMnU7YChOM3B0JnNvIwoKbGl0ZXJhbCAwCkhj
bVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9t
ZXRlcjIuMS9yZXNvdXJjZXMvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9ib290c3Ry
YXAvanMvYm9vdHN0cmFwLmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRl
cjIuMS9yZXNvdXJjZXMvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9ib290c3RyYXAv
anMvYm9vdHN0cmFwLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZjMTVhNTgzMjk2NDliZTk4M2Q5MTc5MGRkOTY5
ZGY4ODJkOTA3MDgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3Jn
L1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRz
L2Jvb3RzdHJhcC9qcy9ib290c3RyYXAuanMKQEAgLTAsMCArMSwyMTU5IEBACisvKiA9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIGJvb3RzdHJh
cC10cmFuc2l0aW9uLmpzIHYyLjIuMgorICogaHR0cDovL3R3aXR0ZXIuZ2l0aHViLmNvbS9ib290
c3RyYXAvamF2YXNjcmlwdC5odG1sI3RyYW5zaXRpb25zCisgKiA9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAyMDEyIFR3aXR0
ZXIsIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNp
b24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhj
ZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEg
Y29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNl
bnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxh
dyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVy
IHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRI
T1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mg
b3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdl
IGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNl
bnNlLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PSAqLworCisKKyFmdW5jdGlvbiAoJCkgeworCisgICJ1c2Ugc3RyaWN0IjsgLy8g
anNoaW50IDtfOworCisKKyAgLyogQ1NTIFRSQU5TSVRJT04gU1VQUE9SVCAoaHR0cDovL3d3dy5t
b2Rlcm5penIuY29tLykKKyAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PSAqLworCisgICQoZnVuY3Rpb24gKCkgeworCisgICAgJC5zdXBw
b3J0LnRyYW5zaXRpb24gPSAoZnVuY3Rpb24gKCkgeworCisgICAgICB2YXIgdHJhbnNpdGlvbkVu
ZCA9IChmdW5jdGlvbiAoKSB7CisKKyAgICAgICAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgnYm9vdHN0cmFwJykKKyAgICAgICAgICAsIHRyYW5zRW5kRXZlbnROYW1lcyA9IHsKKyAg
ICAgICAgICAgICAgICdXZWJraXRUcmFuc2l0aW9uJyA6ICd3ZWJraXRUcmFuc2l0aW9uRW5kJwor
ICAgICAgICAgICAgLCAgJ01velRyYW5zaXRpb24nICAgIDogJ3RyYW5zaXRpb25lbmQnCisgICAg
ICAgICAgICAsICAnT1RyYW5zaXRpb24nICAgICAgOiAnb1RyYW5zaXRpb25FbmQgb3RyYW5zaXRp
b25lbmQnCisgICAgICAgICAgICAsICAndHJhbnNpdGlvbicgICAgICAgOiAndHJhbnNpdGlvbmVu
ZCcKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAsIG5hbWUKKworICAgICAgICBmb3IgKG5hbWUg
aW4gdHJhbnNFbmRFdmVudE5hbWVzKXsKKyAgICAgICAgICBpZiAoZWwuc3R5bGVbbmFtZV0gIT09
IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgcmV0dXJuIHRyYW5zRW5kRXZlbnROYW1lc1tuYW1l
XQorICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICB9KCkpCisKKyAgICAgIHJldHVybiB0
cmFuc2l0aW9uRW5kICYmIHsKKyAgICAgICAgZW5kOiB0cmFuc2l0aW9uRW5kCisgICAgICB9CisK
KyAgICB9KSgpCisKKyAgfSkKKworfSh3aW5kb3cualF1ZXJ5KTsvKiA9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBib290c3RyYXAt
YWxlcnQuanMgdjIuMi4yCisgKiBodHRwOi8vdHdpdHRlci5naXRodWIuY29tL2Jvb3RzdHJhcC9q
YXZhc2NyaXB0Lmh0bWwjYWxlcnRzCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgMjAxMiBUd2l0dGVyLCBJ
bmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIu
MCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBp
biBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkg
b2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMv
TElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3Ig
YWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUg
TGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBX
QVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGlt
cGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zl
cm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4K
KyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0gKi8KKworCishZnVuY3Rpb24gKCQpIHsKKworICAidXNlIHN0cmljdCI7IC8vIGpzaGlu
dCA7XzsKKworCisgLyogQUxFUlQgQ0xBU1MgREVGSU5JVElPTgorICAqID09PT09PT09PT09PT09
PT09PT09PT0gKi8KKworICB2YXIgZGlzbWlzcyA9ICdbZGF0YS1kaXNtaXNzPSJhbGVydCJdJwor
ICAgICwgQWxlcnQgPSBmdW5jdGlvbiAoZWwpIHsKKyAgICAgICAgJChlbCkub24oJ2NsaWNrJywg
ZGlzbWlzcywgdGhpcy5jbG9zZSkKKyAgICAgIH0KKworICBBbGVydC5wcm90b3R5cGUuY2xvc2Ug
PSBmdW5jdGlvbiAoZSkgeworICAgIHZhciAkdGhpcyA9ICQodGhpcykKKyAgICAgICwgc2VsZWN0
b3IgPSAkdGhpcy5hdHRyKCdkYXRhLXRhcmdldCcpCisgICAgICAsICRwYXJlbnQKKworICAgIGlm
ICghc2VsZWN0b3IpIHsKKyAgICAgIHNlbGVjdG9yID0gJHRoaXMuYXR0cignaHJlZicpCisgICAg
ICBzZWxlY3RvciA9IHNlbGVjdG9yICYmIHNlbGVjdG9yLnJlcGxhY2UoLy4qKD89I1teXHNdKiQp
LywgJycpIC8vc3RyaXAgZm9yIGllNworICAgIH0KKworICAgICRwYXJlbnQgPSAkKHNlbGVjdG9y
KQorCisgICAgZSAmJiBlLnByZXZlbnREZWZhdWx0KCkKKworICAgICRwYXJlbnQubGVuZ3RoIHx8
ICgkcGFyZW50ID0gJHRoaXMuaGFzQ2xhc3MoJ2FsZXJ0JykgPyAkdGhpcyA6ICR0aGlzLnBhcmVu
dCgpKQorCisgICAgJHBhcmVudC50cmlnZ2VyKGUgPSAkLkV2ZW50KCdjbG9zZScpKQorCisgICAg
aWYgKGUuaXNEZWZhdWx0UHJldmVudGVkKCkpIHJldHVybgorCisgICAgJHBhcmVudC5yZW1vdmVD
bGFzcygnaW4nKQorCisgICAgZnVuY3Rpb24gcmVtb3ZlRWxlbWVudCgpIHsKKyAgICAgICRwYXJl
bnQKKyAgICAgICAgLnRyaWdnZXIoJ2Nsb3NlZCcpCisgICAgICAgIC5yZW1vdmUoKQorICAgIH0K
KworICAgICQuc3VwcG9ydC50cmFuc2l0aW9uICYmICRwYXJlbnQuaGFzQ2xhc3MoJ2ZhZGUnKSA/
CisgICAgICAkcGFyZW50Lm9uKCQuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCwgcmVtb3ZlRWxlbWVu
dCkgOgorICAgICAgcmVtb3ZlRWxlbWVudCgpCisgIH0KKworCisgLyogQUxFUlQgUExVR0lOIERF
RklOSVRJT04KKyAgKiA9PT09PT09PT09PT09PT09PT09PT09PSAqLworCisgIHZhciBvbGQgPSAk
LmZuLmFsZXJ0CisKKyAgJC5mbi5hbGVydCA9IGZ1bmN0aW9uIChvcHRpb24pIHsKKyAgICByZXR1
cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciAkdGhpcyA9ICQodGhpcykKKyAg
ICAgICAgLCBkYXRhID0gJHRoaXMuZGF0YSgnYWxlcnQnKQorICAgICAgaWYgKCFkYXRhKSAkdGhp
cy5kYXRhKCdhbGVydCcsIChkYXRhID0gbmV3IEFsZXJ0KHRoaXMpKSkKKyAgICAgIGlmICh0eXBl
b2Ygb3B0aW9uID09ICdzdHJpbmcnKSBkYXRhW29wdGlvbl0uY2FsbCgkdGhpcykKKyAgICB9KQor
ICB9CisKKyAgJC5mbi5hbGVydC5Db25zdHJ1Y3RvciA9IEFsZXJ0CisKKworIC8qIEFMRVJUIE5P
IENPTkZMSUNUCisgICogPT09PT09PT09PT09PT09PT0gKi8KKworICAkLmZuLmFsZXJ0Lm5vQ29u
ZmxpY3QgPSBmdW5jdGlvbiAoKSB7CisgICAgJC5mbi5hbGVydCA9IG9sZAorICAgIHJldHVybiB0
aGlzCisgIH0KKworCisgLyogQUxFUlQgREFUQS1BUEkKKyAgKiA9PT09PT09PT09PT09PSAqLwor
CisgICQoZG9jdW1lbnQpLm9uKCdjbGljay5hbGVydC5kYXRhLWFwaScsIGRpc21pc3MsIEFsZXJ0
LnByb3RvdHlwZS5jbG9zZSkKKworfSh3aW5kb3cualF1ZXJ5KTsvKiA9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIGJvb3RzdHJh
cC1idXR0b24uanMgdjIuMi4yCisgKiBodHRwOi8vdHdpdHRlci5naXRodWIuY29tL2Jvb3RzdHJh
cC9qYXZhc2NyaXB0Lmh0bWwjYnV0dG9ucworICogPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgMjAxMiBUd2l0
dGVyLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJz
aW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4
Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBh
IGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGlj
ZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBs
YXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRl
ciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lU
SE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNz
IG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFn
ZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGlj
ZW5zZS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PSAqLworCisKKyFmdW5jdGlvbiAoJCkgeworCisgICJ1c2Ugc3RyaWN0Ijsg
Ly8ganNoaW50IDtfOworCisKKyAvKiBCVVRUT04gUFVCTElDIENMQVNTIERFRklOSVRJT04KKyAg
KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworICB2YXIgQnV0dG9uID0gZnVu
Y3Rpb24gKGVsZW1lbnQsIG9wdGlvbnMpIHsKKyAgICB0aGlzLiRlbGVtZW50ID0gJChlbGVtZW50
KQorICAgIHRoaXMub3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCAkLmZuLmJ1dHRvbi5kZWZhdWx0cywg
b3B0aW9ucykKKyAgfQorCisgIEJ1dHRvbi5wcm90b3R5cGUuc2V0U3RhdGUgPSBmdW5jdGlvbiAo
c3RhdGUpIHsKKyAgICB2YXIgZCA9ICdkaXNhYmxlZCcKKyAgICAgICwgJGVsID0gdGhpcy4kZWxl
bWVudAorICAgICAgLCBkYXRhID0gJGVsLmRhdGEoKQorICAgICAgLCB2YWwgPSAkZWwuaXMoJ2lu
cHV0JykgPyAndmFsJyA6ICdodG1sJworCisgICAgc3RhdGUgPSBzdGF0ZSArICdUZXh0JworICAg
IGRhdGEucmVzZXRUZXh0IHx8ICRlbC5kYXRhKCdyZXNldFRleHQnLCAkZWxbdmFsXSgpKQorCisg
ICAgJGVsW3ZhbF0oZGF0YVtzdGF0ZV0gfHwgdGhpcy5vcHRpb25zW3N0YXRlXSkKKworICAgIC8v
IHB1c2ggdG8gZXZlbnQgbG9vcCB0byBhbGxvdyBmb3JtcyB0byBzdWJtaXQKKyAgICBzZXRUaW1l
b3V0KGZ1bmN0aW9uICgpIHsKKyAgICAgIHN0YXRlID09ICdsb2FkaW5nVGV4dCcgPworICAgICAg
ICAkZWwuYWRkQ2xhc3MoZCkuYXR0cihkLCBkKSA6CisgICAgICAgICRlbC5yZW1vdmVDbGFzcyhk
KS5yZW1vdmVBdHRyKGQpCisgICAgfSwgMCkKKyAgfQorCisgIEJ1dHRvbi5wcm90b3R5cGUudG9n
Z2xlID0gZnVuY3Rpb24gKCkgeworICAgIHZhciAkcGFyZW50ID0gdGhpcy4kZWxlbWVudC5jbG9z
ZXN0KCdbZGF0YS10b2dnbGU9ImJ1dHRvbnMtcmFkaW8iXScpCisKKyAgICAkcGFyZW50ICYmICRw
YXJlbnQKKyAgICAgIC5maW5kKCcuYWN0aXZlJykKKyAgICAgIC5yZW1vdmVDbGFzcygnYWN0aXZl
JykKKworICAgIHRoaXMuJGVsZW1lbnQudG9nZ2xlQ2xhc3MoJ2FjdGl2ZScpCisgIH0KKworCisg
LyogQlVUVE9OIFBMVUdJTiBERUZJTklUSU9OCisgICogPT09PT09PT09PT09PT09PT09PT09PT09
ICovCisKKyAgdmFyIG9sZCA9ICQuZm4uYnV0dG9uCisKKyAgJC5mbi5idXR0b24gPSBmdW5jdGlv
biAob3B0aW9uKSB7CisgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7CisgICAgICB2
YXIgJHRoaXMgPSAkKHRoaXMpCisgICAgICAgICwgZGF0YSA9ICR0aGlzLmRhdGEoJ2J1dHRvbicp
CisgICAgICAgICwgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb24gPT0gJ29iamVjdCcgJiYgb3B0aW9u
CisgICAgICBpZiAoIWRhdGEpICR0aGlzLmRhdGEoJ2J1dHRvbicsIChkYXRhID0gbmV3IEJ1dHRv
bih0aGlzLCBvcHRpb25zKSkpCisgICAgICBpZiAob3B0aW9uID09ICd0b2dnbGUnKSBkYXRhLnRv
Z2dsZSgpCisgICAgICBlbHNlIGlmIChvcHRpb24pIGRhdGEuc2V0U3RhdGUob3B0aW9uKQorICAg
IH0pCisgIH0KKworICAkLmZuLmJ1dHRvbi5kZWZhdWx0cyA9IHsKKyAgICBsb2FkaW5nVGV4dDog
J2xvYWRpbmcuLi4nCisgIH0KKworICAkLmZuLmJ1dHRvbi5Db25zdHJ1Y3RvciA9IEJ1dHRvbgor
CisKKyAvKiBCVVRUT04gTk8gQ09ORkxJQ1QKKyAgKiA9PT09PT09PT09PT09PT09PT0gKi8KKwor
ICAkLmZuLmJ1dHRvbi5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkgeworICAgICQuZm4uYnV0dG9u
ID0gb2xkCisgICAgcmV0dXJuIHRoaXMKKyAgfQorCisKKyAvKiBCVVRUT04gREFUQS1BUEkKKyAg
KiA9PT09PT09PT09PT09PT0gKi8KKworICAkKGRvY3VtZW50KS5vbignY2xpY2suYnV0dG9uLmRh
dGEtYXBpJywgJ1tkYXRhLXRvZ2dsZV49YnV0dG9uXScsIGZ1bmN0aW9uIChlKSB7CisgICAgdmFy
ICRidG4gPSAkKGUudGFyZ2V0KQorICAgIGlmICghJGJ0bi5oYXNDbGFzcygnYnRuJykpICRidG4g
PSAkYnRuLmNsb3Nlc3QoJy5idG4nKQorICAgICRidG4uYnV0dG9uKCd0b2dnbGUnKQorICB9KQor
Cit9KHdpbmRvdy5qUXVlcnkpOy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIGJvb3RzdHJhcC1jYXJvdXNlbC5qcyB2Mi4yLjIK
KyAqIGh0dHA6Ly90d2l0dGVyLmdpdGh1Yi5jb20vYm9vdHN0cmFwL2phdmFzY3JpcHQuaHRtbCNj
YXJvdXNlbAorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IDIwMTIgVHdpdHRlciwgSW5jLgorICoKKyAqIExp
Y2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5z
ZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3
aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNl
IGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisg
KgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3
cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlz
dHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBD
T05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2Vl
IHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Np
b25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKiA9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKwor
IWZ1bmN0aW9uICgkKSB7CisKKyAgInVzZSBzdHJpY3QiOyAvLyBqc2hpbnQgO187CisKKworIC8q
IENBUk9VU0VMIENMQVNTIERFRklOSVRJT04KKyAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09
ICovCisKKyAgdmFyIENhcm91c2VsID0gZnVuY3Rpb24gKGVsZW1lbnQsIG9wdGlvbnMpIHsKKyAg
ICB0aGlzLiRlbGVtZW50ID0gJChlbGVtZW50KQorICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMK
KyAgICB0aGlzLm9wdGlvbnMucGF1c2UgPT0gJ2hvdmVyJyAmJiB0aGlzLiRlbGVtZW50CisgICAg
ICAub24oJ21vdXNlZW50ZXInLCAkLnByb3h5KHRoaXMucGF1c2UsIHRoaXMpKQorICAgICAgLm9u
KCdtb3VzZWxlYXZlJywgJC5wcm94eSh0aGlzLmN5Y2xlLCB0aGlzKSkKKyAgfQorCisgIENhcm91
c2VsLnByb3RvdHlwZSA9IHsKKworICAgIGN5Y2xlOiBmdW5jdGlvbiAoZSkgeworICAgICAgaWYg
KCFlKSB0aGlzLnBhdXNlZCA9IGZhbHNlCisgICAgICB0aGlzLm9wdGlvbnMuaW50ZXJ2YWwKKyAg
ICAgICAgJiYgIXRoaXMucGF1c2VkCisgICAgICAgICYmICh0aGlzLmludGVydmFsID0gc2V0SW50
ZXJ2YWwoJC5wcm94eSh0aGlzLm5leHQsIHRoaXMpLCB0aGlzLm9wdGlvbnMuaW50ZXJ2YWwpKQor
ICAgICAgcmV0dXJuIHRoaXMKKyAgICB9CisKKyAgLCB0bzogZnVuY3Rpb24gKHBvcykgeworICAg
ICAgdmFyICRhY3RpdmUgPSB0aGlzLiRlbGVtZW50LmZpbmQoJy5pdGVtLmFjdGl2ZScpCisgICAg
ICAgICwgY2hpbGRyZW4gPSAkYWN0aXZlLnBhcmVudCgpLmNoaWxkcmVuKCkKKyAgICAgICAgLCBh
Y3RpdmVQb3MgPSBjaGlsZHJlbi5pbmRleCgkYWN0aXZlKQorICAgICAgICAsIHRoYXQgPSB0aGlz
CisKKyAgICAgIGlmIChwb3MgPiAoY2hpbGRyZW4ubGVuZ3RoIC0gMSkgfHwgcG9zIDwgMCkgcmV0
dXJuCisKKyAgICAgIGlmICh0aGlzLnNsaWRpbmcpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJGVs
ZW1lbnQub25lKCdzbGlkJywgZnVuY3Rpb24gKCkgeworICAgICAgICAgIHRoYXQudG8ocG9zKQor
ICAgICAgICB9KQorICAgICAgfQorCisgICAgICBpZiAoYWN0aXZlUG9zID09IHBvcykgeworICAg
ICAgICByZXR1cm4gdGhpcy5wYXVzZSgpLmN5Y2xlKCkKKyAgICAgIH0KKworICAgICAgcmV0dXJu
IHRoaXMuc2xpZGUocG9zID4gYWN0aXZlUG9zID8gJ25leHQnIDogJ3ByZXYnLCAkKGNoaWxkcmVu
W3Bvc10pKQorICAgIH0KKworICAsIHBhdXNlOiBmdW5jdGlvbiAoZSkgeworICAgICAgaWYgKCFl
KSB0aGlzLnBhdXNlZCA9IHRydWUKKyAgICAgIGlmICh0aGlzLiRlbGVtZW50LmZpbmQoJy5uZXh0
LCAucHJldicpLmxlbmd0aCAmJiAkLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQpIHsKKyAgICAgICAg
dGhpcy4kZWxlbWVudC50cmlnZ2VyKCQuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCkKKyAgICAgICAg
dGhpcy5jeWNsZSgpCisgICAgICB9CisgICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwp
CisgICAgICB0aGlzLmludGVydmFsID0gbnVsbAorICAgICAgcmV0dXJuIHRoaXMKKyAgICB9CisK
KyAgLCBuZXh0OiBmdW5jdGlvbiAoKSB7CisgICAgICBpZiAodGhpcy5zbGlkaW5nKSByZXR1cm4K
KyAgICAgIHJldHVybiB0aGlzLnNsaWRlKCduZXh0JykKKyAgICB9CisKKyAgLCBwcmV2OiBmdW5j
dGlvbiAoKSB7CisgICAgICBpZiAodGhpcy5zbGlkaW5nKSByZXR1cm4KKyAgICAgIHJldHVybiB0
aGlzLnNsaWRlKCdwcmV2JykKKyAgICB9CisKKyAgLCBzbGlkZTogZnVuY3Rpb24gKHR5cGUsIG5l
eHQpIHsKKyAgICAgIHZhciAkYWN0aXZlID0gdGhpcy4kZWxlbWVudC5maW5kKCcuaXRlbS5hY3Rp
dmUnKQorICAgICAgICAsICRuZXh0ID0gbmV4dCB8fCAkYWN0aXZlW3R5cGVdKCkKKyAgICAgICAg
LCBpc0N5Y2xpbmcgPSB0aGlzLmludGVydmFsCisgICAgICAgICwgZGlyZWN0aW9uID0gdHlwZSA9
PSAnbmV4dCcgPyAnbGVmdCcgOiAncmlnaHQnCisgICAgICAgICwgZmFsbGJhY2sgID0gdHlwZSA9
PSAnbmV4dCcgPyAnZmlyc3QnIDogJ2xhc3QnCisgICAgICAgICwgdGhhdCA9IHRoaXMKKyAgICAg
ICAgLCBlCisKKyAgICAgIHRoaXMuc2xpZGluZyA9IHRydWUKKworICAgICAgaXNDeWNsaW5nICYm
IHRoaXMucGF1c2UoKQorCisgICAgICAkbmV4dCA9ICRuZXh0Lmxlbmd0aCA/ICRuZXh0IDogdGhp
cy4kZWxlbWVudC5maW5kKCcuaXRlbScpW2ZhbGxiYWNrXSgpCisKKyAgICAgIGUgPSAkLkV2ZW50
KCdzbGlkZScsIHsKKyAgICAgICAgcmVsYXRlZFRhcmdldDogJG5leHRbMF0KKyAgICAgIH0pCisK
KyAgICAgIGlmICgkbmV4dC5oYXNDbGFzcygnYWN0aXZlJykpIHJldHVybgorCisgICAgICBpZiAo
JC5zdXBwb3J0LnRyYW5zaXRpb24gJiYgdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnc2xpZGUnKSkg
eworICAgICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoZSkKKyAgICAgICAgaWYgKGUuaXNEZWZh
dWx0UHJldmVudGVkKCkpIHJldHVybgorICAgICAgICAkbmV4dC5hZGRDbGFzcyh0eXBlKQorICAg
ICAgICAkbmV4dFswXS5vZmZzZXRXaWR0aCAvLyBmb3JjZSByZWZsb3cKKyAgICAgICAgJGFjdGl2
ZS5hZGRDbGFzcyhkaXJlY3Rpb24pCisgICAgICAgICRuZXh0LmFkZENsYXNzKGRpcmVjdGlvbikK
KyAgICAgICAgdGhpcy4kZWxlbWVudC5vbmUoJC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLCBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgJG5leHQucmVtb3ZlQ2xhc3MoW3R5cGUsIGRpcmVjdGlvbl0u
am9pbignICcpKS5hZGRDbGFzcygnYWN0aXZlJykKKyAgICAgICAgICAkYWN0aXZlLnJlbW92ZUNs
YXNzKFsnYWN0aXZlJywgZGlyZWN0aW9uXS5qb2luKCcgJykpCisgICAgICAgICAgdGhhdC5zbGlk
aW5nID0gZmFsc2UKKyAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgdGhhdC4kZWxl
bWVudC50cmlnZ2VyKCdzbGlkJykgfSwgMCkKKyAgICAgICAgfSkKKyAgICAgIH0gZWxzZSB7Cisg
ICAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcihlKQorICAgICAgICBpZiAoZS5pc0RlZmF1bHRQ
cmV2ZW50ZWQoKSkgcmV0dXJuCisgICAgICAgICRhY3RpdmUucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScp
CisgICAgICAgICRuZXh0LmFkZENsYXNzKCdhY3RpdmUnKQorICAgICAgICB0aGlzLnNsaWRpbmcg
PSBmYWxzZQorICAgICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ3NsaWQnKQorICAgICAgfQor
CisgICAgICBpc0N5Y2xpbmcgJiYgdGhpcy5jeWNsZSgpCisKKyAgICAgIHJldHVybiB0aGlzCisg
ICAgfQorCisgIH0KKworCisgLyogQ0FST1VTRUwgUExVR0lOIERFRklOSVRJT04KKyAgKiA9PT09
PT09PT09PT09PT09PT09PT09PT09PSAqLworCisgIHZhciBvbGQgPSAkLmZuLmNhcm91c2VsCisK
KyAgJC5mbi5jYXJvdXNlbCA9IGZ1bmN0aW9uIChvcHRpb24pIHsKKyAgICByZXR1cm4gdGhpcy5l
YWNoKGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciAkdGhpcyA9ICQodGhpcykKKyAgICAgICAgLCBk
YXRhID0gJHRoaXMuZGF0YSgnY2Fyb3VzZWwnKQorICAgICAgICAsIG9wdGlvbnMgPSAkLmV4dGVu
ZCh7fSwgJC5mbi5jYXJvdXNlbC5kZWZhdWx0cywgdHlwZW9mIG9wdGlvbiA9PSAnb2JqZWN0JyAm
JiBvcHRpb24pCisgICAgICAgICwgYWN0aW9uID0gdHlwZW9mIG9wdGlvbiA9PSAnc3RyaW5nJyA/
IG9wdGlvbiA6IG9wdGlvbnMuc2xpZGUKKyAgICAgIGlmICghZGF0YSkgJHRoaXMuZGF0YSgnY2Fy
b3VzZWwnLCAoZGF0YSA9IG5ldyBDYXJvdXNlbCh0aGlzLCBvcHRpb25zKSkpCisgICAgICBpZiAo
dHlwZW9mIG9wdGlvbiA9PSAnbnVtYmVyJykgZGF0YS50byhvcHRpb24pCisgICAgICBlbHNlIGlm
IChhY3Rpb24pIGRhdGFbYWN0aW9uXSgpCisgICAgICBlbHNlIGlmIChvcHRpb25zLmludGVydmFs
KSBkYXRhLmN5Y2xlKCkKKyAgICB9KQorICB9CisKKyAgJC5mbi5jYXJvdXNlbC5kZWZhdWx0cyA9
IHsKKyAgICBpbnRlcnZhbDogNTAwMAorICAsIHBhdXNlOiAnaG92ZXInCisgIH0KKworICAkLmZu
LmNhcm91c2VsLkNvbnN0cnVjdG9yID0gQ2Fyb3VzZWwKKworCisgLyogQ0FST1VTRUwgTk8gQ09O
RkxJQ1QKKyAgKiA9PT09PT09PT09PT09PT09PT09PSAqLworCisgICQuZm4uY2Fyb3VzZWwubm9D
b25mbGljdCA9IGZ1bmN0aW9uICgpIHsKKyAgICAkLmZuLmNhcm91c2VsID0gb2xkCisgICAgcmV0
dXJuIHRoaXMKKyAgfQorCisgLyogQ0FST1VTRUwgREFUQS1BUEkKKyAgKiA9PT09PT09PT09PT09
PT09PSAqLworCisgICQoZG9jdW1lbnQpLm9uKCdjbGljay5jYXJvdXNlbC5kYXRhLWFwaScsICdb
ZGF0YS1zbGlkZV0nLCBmdW5jdGlvbiAoZSkgeworICAgIHZhciAkdGhpcyA9ICQodGhpcyksIGhy
ZWYKKyAgICAgICwgJHRhcmdldCA9ICQoJHRoaXMuYXR0cignZGF0YS10YXJnZXQnKSB8fCAoaHJl
ZiA9ICR0aGlzLmF0dHIoJ2hyZWYnKSkgJiYgaHJlZi5yZXBsYWNlKC8uKig/PSNbXlxzXSskKS8s
ICcnKSkgLy9zdHJpcCBmb3IgaWU3CisgICAgICAsIG9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgJHRh
cmdldC5kYXRhKCksICR0aGlzLmRhdGEoKSkKKyAgICAkdGFyZ2V0LmNhcm91c2VsKG9wdGlvbnMp
CisgICAgZS5wcmV2ZW50RGVmYXVsdCgpCisgIH0pCisKK30od2luZG93LmpRdWVyeSk7LyogPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQorICogYm9vdHN0cmFwLWNvbGxhcHNlLmpzIHYyLjIuMgorICogaHR0cDovL3R3aXR0ZXIuZ2l0
aHViLmNvbS9ib290c3RyYXAvamF2YXNjcmlwdC5odG1sI2NvbGxhcHNlCisgKiA9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBD
b3B5cmlnaHQgMjAxMiBUd2l0dGVyLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFw
YWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5v
dCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisg
KiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8v
d3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWly
ZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisg
KiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMg
SVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJ
TkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRo
ZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0
aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKyFmdW5jdGlvbiAoJCkgewor
CisgICJ1c2Ugc3RyaWN0IjsgLy8ganNoaW50IDtfOworCisKKyAvKiBDT0xMQVBTRSBQVUJMSUMg
Q0xBU1MgREVGSU5JVElPTgorICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICov
CisKKyAgdmFyIENvbGxhcHNlID0gZnVuY3Rpb24gKGVsZW1lbnQsIG9wdGlvbnMpIHsKKyAgICB0
aGlzLiRlbGVtZW50ID0gJChlbGVtZW50KQorICAgIHRoaXMub3B0aW9ucyA9ICQuZXh0ZW5kKHt9
LCAkLmZuLmNvbGxhcHNlLmRlZmF1bHRzLCBvcHRpb25zKQorCisgICAgaWYgKHRoaXMub3B0aW9u
cy5wYXJlbnQpIHsKKyAgICAgIHRoaXMuJHBhcmVudCA9ICQodGhpcy5vcHRpb25zLnBhcmVudCkK
KyAgICB9CisKKyAgICB0aGlzLm9wdGlvbnMudG9nZ2xlICYmIHRoaXMudG9nZ2xlKCkKKyAgfQor
CisgIENvbGxhcHNlLnByb3RvdHlwZSA9IHsKKworICAgIGNvbnN0cnVjdG9yOiBDb2xsYXBzZQor
CisgICwgZGltZW5zaW9uOiBmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgaGFzV2lkdGggPSB0aGlz
LiRlbGVtZW50Lmhhc0NsYXNzKCd3aWR0aCcpCisgICAgICByZXR1cm4gaGFzV2lkdGggPyAnd2lk
dGgnIDogJ2hlaWdodCcKKyAgICB9CisKKyAgLCBzaG93OiBmdW5jdGlvbiAoKSB7CisgICAgICB2
YXIgZGltZW5zaW9uCisgICAgICAgICwgc2Nyb2xsCisgICAgICAgICwgYWN0aXZlcworICAgICAg
ICAsIGhhc0RhdGEKKworICAgICAgaWYgKHRoaXMudHJhbnNpdGlvbmluZykgcmV0dXJuCisKKyAg
ICAgIGRpbWVuc2lvbiA9IHRoaXMuZGltZW5zaW9uKCkKKyAgICAgIHNjcm9sbCA9ICQuY2FtZWxD
YXNlKFsnc2Nyb2xsJywgZGltZW5zaW9uXS5qb2luKCctJykpCisgICAgICBhY3RpdmVzID0gdGhp
cy4kcGFyZW50ICYmIHRoaXMuJHBhcmVudC5maW5kKCc+IC5hY2NvcmRpb24tZ3JvdXAgPiAuaW4n
KQorCisgICAgICBpZiAoYWN0aXZlcyAmJiBhY3RpdmVzLmxlbmd0aCkgeworICAgICAgICBoYXNE
YXRhID0gYWN0aXZlcy5kYXRhKCdjb2xsYXBzZScpCisgICAgICAgIGlmIChoYXNEYXRhICYmIGhh
c0RhdGEudHJhbnNpdGlvbmluZykgcmV0dXJuCisgICAgICAgIGFjdGl2ZXMuY29sbGFwc2UoJ2hp
ZGUnKQorICAgICAgICBoYXNEYXRhIHx8IGFjdGl2ZXMuZGF0YSgnY29sbGFwc2UnLCBudWxsKQor
ICAgICAgfQorCisgICAgICB0aGlzLiRlbGVtZW50W2RpbWVuc2lvbl0oMCkKKyAgICAgIHRoaXMu
dHJhbnNpdGlvbignYWRkQ2xhc3MnLCAkLkV2ZW50KCdzaG93JyksICdzaG93bicpCisgICAgICAk
LnN1cHBvcnQudHJhbnNpdGlvbiAmJiB0aGlzLiRlbGVtZW50W2RpbWVuc2lvbl0odGhpcy4kZWxl
bWVudFswXVtzY3JvbGxdKQorICAgIH0KKworICAsIGhpZGU6IGZ1bmN0aW9uICgpIHsKKyAgICAg
IHZhciBkaW1lbnNpb24KKyAgICAgIGlmICh0aGlzLnRyYW5zaXRpb25pbmcpIHJldHVybgorICAg
ICAgZGltZW5zaW9uID0gdGhpcy5kaW1lbnNpb24oKQorICAgICAgdGhpcy5yZXNldCh0aGlzLiRl
bGVtZW50W2RpbWVuc2lvbl0oKSkKKyAgICAgIHRoaXMudHJhbnNpdGlvbigncmVtb3ZlQ2xhc3Mn
LCAkLkV2ZW50KCdoaWRlJyksICdoaWRkZW4nKQorICAgICAgdGhpcy4kZWxlbWVudFtkaW1lbnNp
b25dKDApCisgICAgfQorCisgICwgcmVzZXQ6IGZ1bmN0aW9uIChzaXplKSB7CisgICAgICB2YXIg
ZGltZW5zaW9uID0gdGhpcy5kaW1lbnNpb24oKQorCisgICAgICB0aGlzLiRlbGVtZW50CisgICAg
ICAgIC5yZW1vdmVDbGFzcygnY29sbGFwc2UnKQorICAgICAgICBbZGltZW5zaW9uXShzaXplIHx8
ICdhdXRvJykKKyAgICAgICAgWzBdLm9mZnNldFdpZHRoCisKKyAgICAgIHRoaXMuJGVsZW1lbnRb
c2l6ZSAhPT0gbnVsbCA/ICdhZGRDbGFzcycgOiAncmVtb3ZlQ2xhc3MnXSgnY29sbGFwc2UnKQor
CisgICAgICByZXR1cm4gdGhpcworICAgIH0KKworICAsIHRyYW5zaXRpb246IGZ1bmN0aW9uICht
ZXRob2QsIHN0YXJ0RXZlbnQsIGNvbXBsZXRlRXZlbnQpIHsKKyAgICAgIHZhciB0aGF0ID0gdGhp
cworICAgICAgICAsIGNvbXBsZXRlID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKHN0
YXJ0RXZlbnQudHlwZSA9PSAnc2hvdycpIHRoYXQucmVzZXQoKQorICAgICAgICAgICAgdGhhdC50
cmFuc2l0aW9uaW5nID0gMAorICAgICAgICAgICAgdGhhdC4kZWxlbWVudC50cmlnZ2VyKGNvbXBs
ZXRlRXZlbnQpCisgICAgICAgICAgfQorCisgICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoc3Rh
cnRFdmVudCkKKworICAgICAgaWYgKHN0YXJ0RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHJl
dHVybgorCisgICAgICB0aGlzLnRyYW5zaXRpb25pbmcgPSAxCisKKyAgICAgIHRoaXMuJGVsZW1l
bnRbbWV0aG9kXSgnaW4nKQorCisgICAgICAkLnN1cHBvcnQudHJhbnNpdGlvbiAmJiB0aGlzLiRl
bGVtZW50Lmhhc0NsYXNzKCdjb2xsYXBzZScpID8KKyAgICAgICAgdGhpcy4kZWxlbWVudC5vbmUo
JC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLCBjb21wbGV0ZSkgOgorICAgICAgICBjb21wbGV0ZSgp
CisgICAgfQorCisgICwgdG9nZ2xlOiBmdW5jdGlvbiAoKSB7CisgICAgICB0aGlzW3RoaXMuJGVs
ZW1lbnQuaGFzQ2xhc3MoJ2luJykgPyAnaGlkZScgOiAnc2hvdyddKCkKKyAgICB9CisKKyAgfQor
CisKKyAvKiBDT0xMQVBTRSBQTFVHSU4gREVGSU5JVElPTgorICAqID09PT09PT09PT09PT09PT09
PT09PT09PT09ICovCisKKyAgdmFyIG9sZCA9ICQuZm4uY29sbGFwc2UKKworICAkLmZuLmNvbGxh
cHNlID0gZnVuY3Rpb24gKG9wdGlvbikgeworICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24g
KCkgeworICAgICAgdmFyICR0aGlzID0gJCh0aGlzKQorICAgICAgICAsIGRhdGEgPSAkdGhpcy5k
YXRhKCdjb2xsYXBzZScpCisgICAgICAgICwgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb24gPT0gJ29i
amVjdCcgJiYgb3B0aW9uCisgICAgICBpZiAoIWRhdGEpICR0aGlzLmRhdGEoJ2NvbGxhcHNlJywg
KGRhdGEgPSBuZXcgQ29sbGFwc2UodGhpcywgb3B0aW9ucykpKQorICAgICAgaWYgKHR5cGVvZiBv
cHRpb24gPT0gJ3N0cmluZycpIGRhdGFbb3B0aW9uXSgpCisgICAgfSkKKyAgfQorCisgICQuZm4u
Y29sbGFwc2UuZGVmYXVsdHMgPSB7CisgICAgdG9nZ2xlOiB0cnVlCisgIH0KKworICAkLmZuLmNv
bGxhcHNlLkNvbnN0cnVjdG9yID0gQ29sbGFwc2UKKworCisgLyogQ09MTEFQU0UgTk8gQ09ORkxJ
Q1QKKyAgKiA9PT09PT09PT09PT09PT09PT09PSAqLworCisgICQuZm4uY29sbGFwc2Uubm9Db25m
bGljdCA9IGZ1bmN0aW9uICgpIHsKKyAgICAkLmZuLmNvbGxhcHNlID0gb2xkCisgICAgcmV0dXJu
IHRoaXMKKyAgfQorCisKKyAvKiBDT0xMQVBTRSBEQVRBLUFQSQorICAqID09PT09PT09PT09PT09
PT09ICovCisKKyAgJChkb2N1bWVudCkub24oJ2NsaWNrLmNvbGxhcHNlLmRhdGEtYXBpJywgJ1tk
YXRhLXRvZ2dsZT1jb2xsYXBzZV0nLCBmdW5jdGlvbiAoZSkgeworICAgIHZhciAkdGhpcyA9ICQo
dGhpcyksIGhyZWYKKyAgICAgICwgdGFyZ2V0ID0gJHRoaXMuYXR0cignZGF0YS10YXJnZXQnKQor
ICAgICAgICB8fCBlLnByZXZlbnREZWZhdWx0KCkKKyAgICAgICAgfHwgKGhyZWYgPSAkdGhpcy5h
dHRyKCdocmVmJykpICYmIGhyZWYucmVwbGFjZSgvLiooPz0jW15cc10rJCkvLCAnJykgLy9zdHJp
cCBmb3IgaWU3CisgICAgICAsIG9wdGlvbiA9ICQodGFyZ2V0KS5kYXRhKCdjb2xsYXBzZScpID8g
J3RvZ2dsZScgOiAkdGhpcy5kYXRhKCkKKyAgICAkdGhpc1skKHRhcmdldCkuaGFzQ2xhc3MoJ2lu
JykgPyAnYWRkQ2xhc3MnIDogJ3JlbW92ZUNsYXNzJ10oJ2NvbGxhcHNlZCcpCisgICAgJCh0YXJn
ZXQpLmNvbGxhcHNlKG9wdGlvbikKKyAgfSkKKworfSh3aW5kb3cualF1ZXJ5KTsvKiA9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAq
IGJvb3RzdHJhcC1kcm9wZG93bi5qcyB2Mi4yLjIKKyAqIGh0dHA6Ly90d2l0dGVyLmdpdGh1Yi5j
b20vYm9vdHN0cmFwL2phdmFzY3JpcHQuaHRtbCNkcm9wZG93bnMKKyAqID09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJp
Z2h0IDIwMTIgVHdpdHRlciwgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUg
TGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNl
IHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91
IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5h
cGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5
IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlz
dHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBC
QVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBl
aXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3Bl
Y2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMg
dW5kZXIgdGhlIExpY2Vuc2UuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCishZnVuY3Rpb24gKCQpIHsKKworICAi
dXNlIHN0cmljdCI7IC8vIGpzaGludCA7XzsKKworCisgLyogRFJPUERPV04gQ0xBU1MgREVGSU5J
VElPTgorICAqID09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworICB2YXIgdG9nZ2xlID0g
J1tkYXRhLXRvZ2dsZT1kcm9wZG93bl0nCisgICAgLCBEcm9wZG93biA9IGZ1bmN0aW9uIChlbGVt
ZW50KSB7CisgICAgICAgIHZhciAkZWwgPSAkKGVsZW1lbnQpLm9uKCdjbGljay5kcm9wZG93bi5k
YXRhLWFwaScsIHRoaXMudG9nZ2xlKQorICAgICAgICAkKCdodG1sJykub24oJ2NsaWNrLmRyb3Bk
b3duLmRhdGEtYXBpJywgZnVuY3Rpb24gKCkgeworICAgICAgICAgICRlbC5wYXJlbnQoKS5yZW1v
dmVDbGFzcygnb3BlbicpCisgICAgICAgIH0pCisgICAgICB9CisKKyAgRHJvcGRvd24ucHJvdG90
eXBlID0geworCisgICAgY29uc3RydWN0b3I6IERyb3Bkb3duCisKKyAgLCB0b2dnbGU6IGZ1bmN0
aW9uIChlKSB7CisgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpCisgICAgICAgICwgJHBhcmVudAor
ICAgICAgICAsIGlzQWN0aXZlCisKKyAgICAgIGlmICgkdGhpcy5pcygnLmRpc2FibGVkLCA6ZGlz
YWJsZWQnKSkgcmV0dXJuCisKKyAgICAgICRwYXJlbnQgPSBnZXRQYXJlbnQoJHRoaXMpCisKKyAg
ICAgIGlzQWN0aXZlID0gJHBhcmVudC5oYXNDbGFzcygnb3BlbicpCisKKyAgICAgIGNsZWFyTWVu
dXMoKQorCisgICAgICBpZiAoIWlzQWN0aXZlKSB7CisgICAgICAgICRwYXJlbnQudG9nZ2xlQ2xh
c3MoJ29wZW4nKQorICAgICAgfQorCisgICAgICAkdGhpcy5mb2N1cygpCisKKyAgICAgIHJldHVy
biBmYWxzZQorICAgIH0KKworICAsIGtleWRvd246IGZ1bmN0aW9uIChlKSB7CisgICAgICB2YXIg
JHRoaXMKKyAgICAgICAgLCAkaXRlbXMKKyAgICAgICAgLCAkYWN0aXZlCisgICAgICAgICwgJHBh
cmVudAorICAgICAgICAsIGlzQWN0aXZlCisgICAgICAgICwgaW5kZXgKKworICAgICAgaWYgKCEv
KDM4fDQwfDI3KS8udGVzdChlLmtleUNvZGUpKSByZXR1cm4KKworICAgICAgJHRoaXMgPSAkKHRo
aXMpCisKKyAgICAgIGUucHJldmVudERlZmF1bHQoKQorICAgICAgZS5zdG9wUHJvcGFnYXRpb24o
KQorCisgICAgICBpZiAoJHRoaXMuaXMoJy5kaXNhYmxlZCwgOmRpc2FibGVkJykpIHJldHVybgor
CisgICAgICAkcGFyZW50ID0gZ2V0UGFyZW50KCR0aGlzKQorCisgICAgICBpc0FjdGl2ZSA9ICRw
YXJlbnQuaGFzQ2xhc3MoJ29wZW4nKQorCisgICAgICBpZiAoIWlzQWN0aXZlIHx8IChpc0FjdGl2
ZSAmJiBlLmtleUNvZGUgPT0gMjcpKSByZXR1cm4gJHRoaXMuY2xpY2soKQorCisgICAgICAkaXRl
bXMgPSAkKCdbcm9sZT1tZW51XSBsaTpub3QoLmRpdmlkZXIpOnZpc2libGUgYScsICRwYXJlbnQp
CisKKyAgICAgIGlmICghJGl0ZW1zLmxlbmd0aCkgcmV0dXJuCisKKyAgICAgIGluZGV4ID0gJGl0
ZW1zLmluZGV4KCRpdGVtcy5maWx0ZXIoJzpmb2N1cycpKQorCisgICAgICBpZiAoZS5rZXlDb2Rl
ID09IDM4ICYmIGluZGV4ID4gMCkgaW5kZXgtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyB1cAorICAgICAgaWYgKGUua2V5Q29kZSA9PSA0MCAmJiBpbmRleCA8ICRp
dGVtcy5sZW5ndGggLSAxKSBpbmRleCsrICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG93bgor
ICAgICAgaWYgKCF+aW5kZXgpIGluZGV4ID0gMAorCisgICAgICAkaXRlbXMKKyAgICAgICAgLmVx
KGluZGV4KQorICAgICAgICAuZm9jdXMoKQorICAgIH0KKworICB9CisKKyAgZnVuY3Rpb24gY2xl
YXJNZW51cygpIHsKKyAgICAkKHRvZ2dsZSkuZWFjaChmdW5jdGlvbiAoKSB7CisgICAgICBnZXRQ
YXJlbnQoJCh0aGlzKSkucmVtb3ZlQ2xhc3MoJ29wZW4nKQorICAgIH0pCisgIH0KKworICBmdW5j
dGlvbiBnZXRQYXJlbnQoJHRoaXMpIHsKKyAgICB2YXIgc2VsZWN0b3IgPSAkdGhpcy5hdHRyKCdk
YXRhLXRhcmdldCcpCisgICAgICAsICRwYXJlbnQKKworICAgIGlmICghc2VsZWN0b3IpIHsKKyAg
ICAgIHNlbGVjdG9yID0gJHRoaXMuYXR0cignaHJlZicpCisgICAgICBzZWxlY3RvciA9IHNlbGVj
dG9yICYmIC8jLy50ZXN0KHNlbGVjdG9yKSAmJiBzZWxlY3Rvci5yZXBsYWNlKC8uKig/PSNbXlxz
XSokKS8sICcnKSAvL3N0cmlwIGZvciBpZTcKKyAgICB9CisKKyAgICAkcGFyZW50ID0gJChzZWxl
Y3RvcikKKyAgICAkcGFyZW50Lmxlbmd0aCB8fCAoJHBhcmVudCA9ICR0aGlzLnBhcmVudCgpKQor
CisgICAgcmV0dXJuICRwYXJlbnQKKyAgfQorCisKKyAgLyogRFJPUERPV04gUExVR0lOIERFRklO
SVRJT04KKyAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworICB2YXIgb2xkID0g
JC5mbi5kcm9wZG93bgorCisgICQuZm4uZHJvcGRvd24gPSBmdW5jdGlvbiAob3B0aW9uKSB7Cisg
ICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgJHRoaXMgPSAkKHRo
aXMpCisgICAgICAgICwgZGF0YSA9ICR0aGlzLmRhdGEoJ2Ryb3Bkb3duJykKKyAgICAgIGlmICgh
ZGF0YSkgJHRoaXMuZGF0YSgnZHJvcGRvd24nLCAoZGF0YSA9IG5ldyBEcm9wZG93bih0aGlzKSkp
CisgICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PSAnc3RyaW5nJykgZGF0YVtvcHRpb25dLmNhbGwo
JHRoaXMpCisgICAgfSkKKyAgfQorCisgICQuZm4uZHJvcGRvd24uQ29uc3RydWN0b3IgPSBEcm9w
ZG93bgorCisKKyAvKiBEUk9QRE9XTiBOTyBDT05GTElDVAorICAqID09PT09PT09PT09PT09PT09
PT09ICovCisKKyAgJC5mbi5kcm9wZG93bi5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkgeworICAg
ICQuZm4uZHJvcGRvd24gPSBvbGQKKyAgICByZXR1cm4gdGhpcworICB9CisKKworICAvKiBBUFBM
WSBUTyBTVEFOREFSRCBEUk9QRE9XTiBFTEVNRU5UUworICAgKiA9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PSAqLworCisgICQoZG9jdW1lbnQpCisgICAgLm9uKCdjbGljay5kcm9w
ZG93bi5kYXRhLWFwaSB0b3VjaHN0YXJ0LmRyb3Bkb3duLmRhdGEtYXBpJywgY2xlYXJNZW51cykK
KyAgICAub24oJ2NsaWNrLmRyb3Bkb3duIHRvdWNoc3RhcnQuZHJvcGRvd24uZGF0YS1hcGknLCAn
LmRyb3Bkb3duIGZvcm0nLCBmdW5jdGlvbiAoZSkgeyBlLnN0b3BQcm9wYWdhdGlvbigpIH0pCisg
ICAgLm9uKCd0b3VjaHN0YXJ0LmRyb3Bkb3duLmRhdGEtYXBpJywgJy5kcm9wZG93bi1tZW51Jywg
ZnVuY3Rpb24gKGUpIHsgZS5zdG9wUHJvcGFnYXRpb24oKSB9KQorICAgIC5vbignY2xpY2suZHJv
cGRvd24uZGF0YS1hcGkgdG91Y2hzdGFydC5kcm9wZG93bi5kYXRhLWFwaScgICwgdG9nZ2xlLCBE
cm9wZG93bi5wcm90b3R5cGUudG9nZ2xlKQorICAgIC5vbigna2V5ZG93bi5kcm9wZG93bi5kYXRh
LWFwaSB0b3VjaHN0YXJ0LmRyb3Bkb3duLmRhdGEtYXBpJywgdG9nZ2xlICsgJywgW3JvbGU9bWVu
dV0nICwgRHJvcGRvd24ucHJvdG90eXBlLmtleWRvd24pCisKK30od2luZG93LmpRdWVyeSk7Lyog
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
CisgKiBib290c3RyYXAtbW9kYWwuanMgdjIuMi4yCisgKiBodHRwOi8vdHdpdHRlci5naXRodWIu
Y29tL2Jvb3RzdHJhcC9qYXZhc2NyaXB0Lmh0bWwjbW9kYWxzCisgKiA9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAy
MDEyIFR3aXR0ZXIsIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vu
c2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlz
IGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkg
b2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hl
Lm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBs
aWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1
dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMs
CisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVy
IGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmlj
IGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVy
IHRoZSBMaWNlbnNlLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ICovCisKKworIWZ1bmN0aW9uICgkKSB7CisKKyAgInVzZSBzdHJp
Y3QiOyAvLyBqc2hpbnQgO187CisKKworIC8qIE1PREFMIENMQVNTIERFRklOSVRJT04KKyAgKiA9
PT09PT09PT09PT09PT09PT09PT09ICovCisKKyAgdmFyIE1vZGFsID0gZnVuY3Rpb24gKGVsZW1l
bnQsIG9wdGlvbnMpIHsKKyAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zCisgICAgdGhpcy4kZWxl
bWVudCA9ICQoZWxlbWVudCkKKyAgICAgIC5kZWxlZ2F0ZSgnW2RhdGEtZGlzbWlzcz0ibW9kYWwi
XScsICdjbGljay5kaXNtaXNzLm1vZGFsJywgJC5wcm94eSh0aGlzLmhpZGUsIHRoaXMpKQorICAg
IHRoaXMub3B0aW9ucy5yZW1vdGUgJiYgdGhpcy4kZWxlbWVudC5maW5kKCcubW9kYWwtYm9keScp
LmxvYWQodGhpcy5vcHRpb25zLnJlbW90ZSkKKyAgfQorCisgIE1vZGFsLnByb3RvdHlwZSA9IHsK
KworICAgICAgY29uc3RydWN0b3I6IE1vZGFsCisKKyAgICAsIHRvZ2dsZTogZnVuY3Rpb24gKCkg
eworICAgICAgICByZXR1cm4gdGhpc1shdGhpcy5pc1Nob3duID8gJ3Nob3cnIDogJ2hpZGUnXSgp
CisgICAgICB9CisKKyAgICAsIHNob3c6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHRoYXQg
PSB0aGlzCisgICAgICAgICAgLCBlID0gJC5FdmVudCgnc2hvdycpCisKKyAgICAgICAgdGhpcy4k
ZWxlbWVudC50cmlnZ2VyKGUpCisKKyAgICAgICAgaWYgKHRoaXMuaXNTaG93biB8fCBlLmlzRGVm
YXVsdFByZXZlbnRlZCgpKSByZXR1cm4KKworICAgICAgICB0aGlzLmlzU2hvd24gPSB0cnVlCisK
KyAgICAgICAgdGhpcy5lc2NhcGUoKQorCisgICAgICAgIHRoaXMuYmFja2Ryb3AoZnVuY3Rpb24g
KCkgeworICAgICAgICAgIHZhciB0cmFuc2l0aW9uID0gJC5zdXBwb3J0LnRyYW5zaXRpb24gJiYg
dGhhdC4kZWxlbWVudC5oYXNDbGFzcygnZmFkZScpCisKKyAgICAgICAgICBpZiAoIXRoYXQuJGVs
ZW1lbnQucGFyZW50KCkubGVuZ3RoKSB7CisgICAgICAgICAgICB0aGF0LiRlbGVtZW50LmFwcGVu
ZFRvKGRvY3VtZW50LmJvZHkpIC8vZG9uJ3QgbW92ZSBtb2RhbHMgZG9tIHBvc2l0aW9uCisgICAg
ICAgICAgfQorCisgICAgICAgICAgdGhhdC4kZWxlbWVudAorICAgICAgICAgICAgLnNob3coKQor
CisgICAgICAgICAgaWYgKHRyYW5zaXRpb24pIHsKKyAgICAgICAgICAgIHRoYXQuJGVsZW1lbnRb
MF0ub2Zmc2V0V2lkdGggLy8gZm9yY2UgcmVmbG93CisgICAgICAgICAgfQorCisgICAgICAgICAg
dGhhdC4kZWxlbWVudAorICAgICAgICAgICAgLmFkZENsYXNzKCdpbicpCisgICAgICAgICAgICAu
YXR0cignYXJpYS1oaWRkZW4nLCBmYWxzZSkKKworICAgICAgICAgIHRoYXQuZW5mb3JjZUZvY3Vz
KCkKKworICAgICAgICAgIHRyYW5zaXRpb24gPworICAgICAgICAgICAgdGhhdC4kZWxlbWVudC5v
bmUoJC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLCBmdW5jdGlvbiAoKSB7IHRoYXQuJGVsZW1lbnQu
Zm9jdXMoKS50cmlnZ2VyKCdzaG93bicpIH0pIDoKKyAgICAgICAgICAgIHRoYXQuJGVsZW1lbnQu
Zm9jdXMoKS50cmlnZ2VyKCdzaG93bicpCisKKyAgICAgICAgfSkKKyAgICAgIH0KKworICAgICwg
aGlkZTogZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgZSAmJiBlLnByZXZlbnREZWZhdWx0KCkKKwor
ICAgICAgICB2YXIgdGhhdCA9IHRoaXMKKworICAgICAgICBlID0gJC5FdmVudCgnaGlkZScpCisK
KyAgICAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKGUpCisKKyAgICAgICAgaWYgKCF0aGlzLmlz
U2hvd24gfHwgZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkgcmV0dXJuCisKKyAgICAgICAgdGhpcy5p
c1Nob3duID0gZmFsc2UKKworICAgICAgICB0aGlzLmVzY2FwZSgpCisKKyAgICAgICAgJChkb2N1
bWVudCkub2ZmKCdmb2N1c2luLm1vZGFsJykKKworICAgICAgICB0aGlzLiRlbGVtZW50CisgICAg
ICAgICAgLnJlbW92ZUNsYXNzKCdpbicpCisgICAgICAgICAgLmF0dHIoJ2FyaWEtaGlkZGVuJywg
dHJ1ZSkKKworICAgICAgICAkLnN1cHBvcnQudHJhbnNpdGlvbiAmJiB0aGlzLiRlbGVtZW50Lmhh
c0NsYXNzKCdmYWRlJykgPworICAgICAgICAgIHRoaXMuaGlkZVdpdGhUcmFuc2l0aW9uKCkgOgor
ICAgICAgICAgIHRoaXMuaGlkZU1vZGFsKCkKKyAgICAgIH0KKworICAgICwgZW5mb3JjZUZvY3Vz
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciB0aGF0ID0gdGhpcworICAgICAgICAkKGRvY3Vt
ZW50KS5vbignZm9jdXNpbi5tb2RhbCcsIGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgaWYgKHRo
YXQuJGVsZW1lbnRbMF0gIT09IGUudGFyZ2V0ICYmICF0aGF0LiRlbGVtZW50LmhhcyhlLnRhcmdl
dCkubGVuZ3RoKSB7CisgICAgICAgICAgICB0aGF0LiRlbGVtZW50LmZvY3VzKCkKKyAgICAgICAg
ICB9CisgICAgICAgIH0pCisgICAgICB9CisKKyAgICAsIGVzY2FwZTogZnVuY3Rpb24gKCkgewor
ICAgICAgICB2YXIgdGhhdCA9IHRoaXMKKyAgICAgICAgaWYgKHRoaXMuaXNTaG93biAmJiB0aGlz
Lm9wdGlvbnMua2V5Ym9hcmQpIHsKKyAgICAgICAgICB0aGlzLiRlbGVtZW50Lm9uKCdrZXl1cC5k
aXNtaXNzLm1vZGFsJywgZnVuY3Rpb24gKCBlICkgeworICAgICAgICAgICAgZS53aGljaCA9PSAy
NyAmJiB0aGF0LmhpZGUoKQorICAgICAgICAgIH0pCisgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMu
aXNTaG93bikgeworICAgICAgICAgIHRoaXMuJGVsZW1lbnQub2ZmKCdrZXl1cC5kaXNtaXNzLm1v
ZGFsJykKKyAgICAgICAgfQorICAgICAgfQorCisgICAgLCBoaWRlV2l0aFRyYW5zaXRpb246IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHRoYXQgPSB0aGlzCisgICAgICAgICAgLCB0aW1lb3V0
ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgIHRoYXQuJGVsZW1lbnQu
b2ZmKCQuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCkKKyAgICAgICAgICAgICAgdGhhdC5oaWRlTW9k
YWwoKQorICAgICAgICAgICAgfSwgNTAwKQorCisgICAgICAgIHRoaXMuJGVsZW1lbnQub25lKCQu
c3VwcG9ydC50cmFuc2l0aW9uLmVuZCwgZnVuY3Rpb24gKCkgeworICAgICAgICAgIGNsZWFyVGlt
ZW91dCh0aW1lb3V0KQorICAgICAgICAgIHRoYXQuaGlkZU1vZGFsKCkKKyAgICAgICAgfSkKKyAg
ICAgIH0KKworICAgICwgaGlkZU1vZGFsOiBmdW5jdGlvbiAodGhhdCkgeworICAgICAgICB0aGlz
LiRlbGVtZW50CisgICAgICAgICAgLmhpZGUoKQorICAgICAgICAgIC50cmlnZ2VyKCdoaWRkZW4n
KQorCisgICAgICAgIHRoaXMuYmFja2Ryb3AoKQorICAgICAgfQorCisgICAgLCByZW1vdmVCYWNr
ZHJvcDogZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLiRiYWNrZHJvcC5yZW1vdmUoKQorICAg
ICAgICB0aGlzLiRiYWNrZHJvcCA9IG51bGwKKyAgICAgIH0KKworICAgICwgYmFja2Ryb3A6IGZ1
bmN0aW9uIChjYWxsYmFjaykgeworICAgICAgICB2YXIgdGhhdCA9IHRoaXMKKyAgICAgICAgICAs
IGFuaW1hdGUgPSB0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdmYWRlJykgPyAnZmFkZScgOiAnJwor
CisgICAgICAgIGlmICh0aGlzLmlzU2hvd24gJiYgdGhpcy5vcHRpb25zLmJhY2tkcm9wKSB7Cisg
ICAgICAgICAgdmFyIGRvQW5pbWF0ZSA9ICQuc3VwcG9ydC50cmFuc2l0aW9uICYmIGFuaW1hdGUK
KworICAgICAgICAgIHRoaXMuJGJhY2tkcm9wID0gJCgnPGRpdiBjbGFzcz0ibW9kYWwtYmFja2Ry
b3AgJyArIGFuaW1hdGUgKyAnIiAvPicpCisgICAgICAgICAgICAuYXBwZW5kVG8oZG9jdW1lbnQu
Ym9keSkKKworICAgICAgICAgIHRoaXMuJGJhY2tkcm9wLmNsaWNrKAorICAgICAgICAgICAgdGhp
cy5vcHRpb25zLmJhY2tkcm9wID09ICdzdGF0aWMnID8KKyAgICAgICAgICAgICAgJC5wcm94eSh0
aGlzLiRlbGVtZW50WzBdLmZvY3VzLCB0aGlzLiRlbGVtZW50WzBdKQorICAgICAgICAgICAgOiAk
LnByb3h5KHRoaXMuaGlkZSwgdGhpcykKKyAgICAgICAgICApCisKKyAgICAgICAgICBpZiAoZG9B
bmltYXRlKSB0aGlzLiRiYWNrZHJvcFswXS5vZmZzZXRXaWR0aCAvLyBmb3JjZSByZWZsb3cKKwor
ICAgICAgICAgIHRoaXMuJGJhY2tkcm9wLmFkZENsYXNzKCdpbicpCisKKyAgICAgICAgICBkb0Fu
aW1hdGUgPworICAgICAgICAgICAgdGhpcy4kYmFja2Ryb3Aub25lKCQuc3VwcG9ydC50cmFuc2l0
aW9uLmVuZCwgY2FsbGJhY2spIDoKKyAgICAgICAgICAgIGNhbGxiYWNrKCkKKworICAgICAgICB9
IGVsc2UgaWYgKCF0aGlzLmlzU2hvd24gJiYgdGhpcy4kYmFja2Ryb3ApIHsKKyAgICAgICAgICB0
aGlzLiRiYWNrZHJvcC5yZW1vdmVDbGFzcygnaW4nKQorCisgICAgICAgICAgJC5zdXBwb3J0LnRy
YW5zaXRpb24gJiYgdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnZmFkZScpPworICAgICAgICAgICAg
dGhpcy4kYmFja2Ryb3Aub25lKCQuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCwgJC5wcm94eSh0aGlz
LnJlbW92ZUJhY2tkcm9wLCB0aGlzKSkgOgorICAgICAgICAgICAgdGhpcy5yZW1vdmVCYWNrZHJv
cCgpCisKKyAgICAgICAgfSBlbHNlIGlmIChjYWxsYmFjaykgeworICAgICAgICAgIGNhbGxiYWNr
KCkKKyAgICAgICAgfQorICAgICAgfQorICB9CisKKworIC8qIE1PREFMIFBMVUdJTiBERUZJTklU
SU9OCisgICogPT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworICB2YXIgb2xkID0gJC5mbi5t
b2RhbAorCisgICQuZm4ubW9kYWwgPSBmdW5jdGlvbiAob3B0aW9uKSB7CisgICAgcmV0dXJuIHRo
aXMuZWFjaChmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpCisgICAgICAg
ICwgZGF0YSA9ICR0aGlzLmRhdGEoJ21vZGFsJykKKyAgICAgICAgLCBvcHRpb25zID0gJC5leHRl
bmQoe30sICQuZm4ubW9kYWwuZGVmYXVsdHMsICR0aGlzLmRhdGEoKSwgdHlwZW9mIG9wdGlvbiA9
PSAnb2JqZWN0JyAmJiBvcHRpb24pCisgICAgICBpZiAoIWRhdGEpICR0aGlzLmRhdGEoJ21vZGFs
JywgKGRhdGEgPSBuZXcgTW9kYWwodGhpcywgb3B0aW9ucykpKQorICAgICAgaWYgKHR5cGVvZiBv
cHRpb24gPT0gJ3N0cmluZycpIGRhdGFbb3B0aW9uXSgpCisgICAgICBlbHNlIGlmIChvcHRpb25z
LnNob3cpIGRhdGEuc2hvdygpCisgICAgfSkKKyAgfQorCisgICQuZm4ubW9kYWwuZGVmYXVsdHMg
PSB7CisgICAgICBiYWNrZHJvcDogdHJ1ZQorICAgICwga2V5Ym9hcmQ6IHRydWUKKyAgICAsIHNo
b3c6IHRydWUKKyAgfQorCisgICQuZm4ubW9kYWwuQ29uc3RydWN0b3IgPSBNb2RhbAorCisKKyAv
KiBNT0RBTCBOTyBDT05GTElDVAorICAqID09PT09PT09PT09PT09PT09ICovCisKKyAgJC5mbi5t
b2RhbC5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkgeworICAgICQuZm4ubW9kYWwgPSBvbGQKKyAg
ICByZXR1cm4gdGhpcworICB9CisKKworIC8qIE1PREFMIERBVEEtQVBJCisgICogPT09PT09PT09
PT09PT0gKi8KKworICAkKGRvY3VtZW50KS5vbignY2xpY2subW9kYWwuZGF0YS1hcGknLCAnW2Rh
dGEtdG9nZ2xlPSJtb2RhbCJdJywgZnVuY3Rpb24gKGUpIHsKKyAgICB2YXIgJHRoaXMgPSAkKHRo
aXMpCisgICAgICAsIGhyZWYgPSAkdGhpcy5hdHRyKCdocmVmJykKKyAgICAgICwgJHRhcmdldCA9
ICQoJHRoaXMuYXR0cignZGF0YS10YXJnZXQnKSB8fCAoaHJlZiAmJiBocmVmLnJlcGxhY2UoLy4q
KD89I1teXHNdKyQpLywgJycpKSkgLy9zdHJpcCBmb3IgaWU3CisgICAgICAsIG9wdGlvbiA9ICR0
YXJnZXQuZGF0YSgnbW9kYWwnKSA/ICd0b2dnbGUnIDogJC5leHRlbmQoeyByZW1vdGU6IS8jLy50
ZXN0KGhyZWYpICYmIGhyZWYgfSwgJHRhcmdldC5kYXRhKCksICR0aGlzLmRhdGEoKSkKKworICAg
IGUucHJldmVudERlZmF1bHQoKQorCisgICAgJHRhcmdldAorICAgICAgLm1vZGFsKG9wdGlvbikK
KyAgICAgIC5vbmUoJ2hpZGUnLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICR0aGlzLmZvY3VzKCkK
KyAgICAgIH0pCisgIH0pCisKK30od2luZG93LmpRdWVyeSk7CisvKiA9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogYm9vdHN0cmFw
LXRvb2x0aXAuanMgdjIuMi4yCisgKiBodHRwOi8vdHdpdHRlci5naXRodWIuY29tL2Jvb3RzdHJh
cC9qYXZhc2NyaXB0Lmh0bWwjdG9vbHRpcHMKKyAqIEluc3BpcmVkIGJ5IHRoZSBvcmlnaW5hbCBq
UXVlcnkudGlwc3kgYnkgSmFzb24gRnJhbWUKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgMjAxMiBUd2l0
dGVyLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJz
aW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4
Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBh
IGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGlj
ZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBs
YXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRl
ciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lU
SE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNz
IG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFn
ZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGlj
ZW5zZS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0gKi8KKworCishZnVuY3Rpb24gKCQpIHsKKworICAidXNlIHN0cmljdCI7IC8v
IGpzaGludCA7XzsKKworCisgLyogVE9PTFRJUCBQVUJMSUMgQ0xBU1MgREVGSU5JVElPTgorICAq
ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworICB2YXIgVG9vbHRpcCA9IGZ1
bmN0aW9uIChlbGVtZW50LCBvcHRpb25zKSB7CisgICAgdGhpcy5pbml0KCd0b29sdGlwJywgZWxl
bWVudCwgb3B0aW9ucykKKyAgfQorCisgIFRvb2x0aXAucHJvdG90eXBlID0geworCisgICAgY29u
c3RydWN0b3I6IFRvb2x0aXAKKworICAsIGluaXQ6IGZ1bmN0aW9uICh0eXBlLCBlbGVtZW50LCBv
cHRpb25zKSB7CisgICAgICB2YXIgZXZlbnRJbgorICAgICAgICAsIGV2ZW50T3V0CisKKyAgICAg
IHRoaXMudHlwZSA9IHR5cGUKKyAgICAgIHRoaXMuJGVsZW1lbnQgPSAkKGVsZW1lbnQpCisgICAg
ICB0aGlzLm9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbnMob3B0aW9ucykKKyAgICAgIHRoaXMuZW5h
YmxlZCA9IHRydWUKKworICAgICAgaWYgKHRoaXMub3B0aW9ucy50cmlnZ2VyID09ICdjbGljaycp
IHsKKyAgICAgICAgdGhpcy4kZWxlbWVudC5vbignY2xpY2suJyArIHRoaXMudHlwZSwgdGhpcy5v
cHRpb25zLnNlbGVjdG9yLCAkLnByb3h5KHRoaXMudG9nZ2xlLCB0aGlzKSkKKyAgICAgIH0gZWxz
ZSBpZiAodGhpcy5vcHRpb25zLnRyaWdnZXIgIT0gJ21hbnVhbCcpIHsKKyAgICAgICAgZXZlbnRJ
biA9IHRoaXMub3B0aW9ucy50cmlnZ2VyID09ICdob3ZlcicgPyAnbW91c2VlbnRlcicgOiAnZm9j
dXMnCisgICAgICAgIGV2ZW50T3V0ID0gdGhpcy5vcHRpb25zLnRyaWdnZXIgPT0gJ2hvdmVyJyA/
ICdtb3VzZWxlYXZlJyA6ICdibHVyJworICAgICAgICB0aGlzLiRlbGVtZW50Lm9uKGV2ZW50SW4g
KyAnLicgKyB0aGlzLnR5cGUsIHRoaXMub3B0aW9ucy5zZWxlY3RvciwgJC5wcm94eSh0aGlzLmVu
dGVyLCB0aGlzKSkKKyAgICAgICAgdGhpcy4kZWxlbWVudC5vbihldmVudE91dCArICcuJyArIHRo
aXMudHlwZSwgdGhpcy5vcHRpb25zLnNlbGVjdG9yLCAkLnByb3h5KHRoaXMubGVhdmUsIHRoaXMp
KQorICAgICAgfQorCisgICAgICB0aGlzLm9wdGlvbnMuc2VsZWN0b3IgPworICAgICAgICAodGhp
cy5fb3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCB0aGlzLm9wdGlvbnMsIHsgdHJpZ2dlcjogJ21hbnVh
bCcsIHNlbGVjdG9yOiAnJyB9KSkgOgorICAgICAgICB0aGlzLmZpeFRpdGxlKCkKKyAgICB9CisK
KyAgLCBnZXRPcHRpb25zOiBmdW5jdGlvbiAob3B0aW9ucykgeworICAgICAgb3B0aW9ucyA9ICQu
ZXh0ZW5kKHt9LCAkLmZuW3RoaXMudHlwZV0uZGVmYXVsdHMsIG9wdGlvbnMsIHRoaXMuJGVsZW1l
bnQuZGF0YSgpKQorCisgICAgICBpZiAob3B0aW9ucy5kZWxheSAmJiB0eXBlb2Ygb3B0aW9ucy5k
ZWxheSA9PSAnbnVtYmVyJykgeworICAgICAgICBvcHRpb25zLmRlbGF5ID0geworICAgICAgICAg
IHNob3c6IG9wdGlvbnMuZGVsYXkKKyAgICAgICAgLCBoaWRlOiBvcHRpb25zLmRlbGF5CisgICAg
ICAgIH0KKyAgICAgIH0KKworICAgICAgcmV0dXJuIG9wdGlvbnMKKyAgICB9CisKKyAgLCBlbnRl
cjogZnVuY3Rpb24gKGUpIHsKKyAgICAgIHZhciBzZWxmID0gJChlLmN1cnJlbnRUYXJnZXQpW3Ro
aXMudHlwZV0odGhpcy5fb3B0aW9ucykuZGF0YSh0aGlzLnR5cGUpCisKKyAgICAgIGlmICghc2Vs
Zi5vcHRpb25zLmRlbGF5IHx8ICFzZWxmLm9wdGlvbnMuZGVsYXkuc2hvdykgcmV0dXJuIHNlbGYu
c2hvdygpCisKKyAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpCisgICAgICBzZWxmLmhv
dmVyU3RhdGUgPSAnaW4nCisgICAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9u
KCkgeworICAgICAgICBpZiAoc2VsZi5ob3ZlclN0YXRlID09ICdpbicpIHNlbGYuc2hvdygpCisg
ICAgICB9LCBzZWxmLm9wdGlvbnMuZGVsYXkuc2hvdykKKyAgICB9CisKKyAgLCBsZWF2ZTogZnVu
Y3Rpb24gKGUpIHsKKyAgICAgIHZhciBzZWxmID0gJChlLmN1cnJlbnRUYXJnZXQpW3RoaXMudHlw
ZV0odGhpcy5fb3B0aW9ucykuZGF0YSh0aGlzLnR5cGUpCisKKyAgICAgIGlmICh0aGlzLnRpbWVv
dXQpIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpCisgICAgICBpZiAoIXNlbGYub3B0aW9ucy5k
ZWxheSB8fCAhc2VsZi5vcHRpb25zLmRlbGF5LmhpZGUpIHJldHVybiBzZWxmLmhpZGUoKQorCisg
ICAgICBzZWxmLmhvdmVyU3RhdGUgPSAnb3V0JworICAgICAgdGhpcy50aW1lb3V0ID0gc2V0VGlt
ZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHNlbGYuaG92ZXJTdGF0ZSA9PSAnb3V0Jykg
c2VsZi5oaWRlKCkKKyAgICAgIH0sIHNlbGYub3B0aW9ucy5kZWxheS5oaWRlKQorICAgIH0KKwor
ICAsIHNob3c6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciAkdGlwCisgICAgICAgICwgaW5zaWRl
CisgICAgICAgICwgcG9zCisgICAgICAgICwgYWN0dWFsV2lkdGgKKyAgICAgICAgLCBhY3R1YWxI
ZWlnaHQKKyAgICAgICAgLCBwbGFjZW1lbnQKKyAgICAgICAgLCB0cAorCisgICAgICBpZiAodGhp
cy5oYXNDb250ZW50KCkgJiYgdGhpcy5lbmFibGVkKSB7CisgICAgICAgICR0aXAgPSB0aGlzLnRp
cCgpCisgICAgICAgIHRoaXMuc2V0Q29udGVudCgpCisKKyAgICAgICAgaWYgKHRoaXMub3B0aW9u
cy5hbmltYXRpb24pIHsKKyAgICAgICAgICAkdGlwLmFkZENsYXNzKCdmYWRlJykKKyAgICAgICAg
fQorCisgICAgICAgIHBsYWNlbWVudCA9IHR5cGVvZiB0aGlzLm9wdGlvbnMucGxhY2VtZW50ID09
ICdmdW5jdGlvbicgPworICAgICAgICAgIHRoaXMub3B0aW9ucy5wbGFjZW1lbnQuY2FsbCh0aGlz
LCAkdGlwWzBdLCB0aGlzLiRlbGVtZW50WzBdKSA6CisgICAgICAgICAgdGhpcy5vcHRpb25zLnBs
YWNlbWVudAorCisgICAgICAgIGluc2lkZSA9IC9pbi8udGVzdChwbGFjZW1lbnQpCisKKyAgICAg
ICAgJHRpcAorICAgICAgICAgIC5kZXRhY2goKQorICAgICAgICAgIC5jc3MoeyB0b3A6IDAsIGxl
ZnQ6IDAsIGRpc3BsYXk6ICdibG9jaycgfSkKKyAgICAgICAgICAuaW5zZXJ0QWZ0ZXIodGhpcy4k
ZWxlbWVudCkKKworICAgICAgICBwb3MgPSB0aGlzLmdldFBvc2l0aW9uKGluc2lkZSkKKworICAg
ICAgICBhY3R1YWxXaWR0aCA9ICR0aXBbMF0ub2Zmc2V0V2lkdGgKKyAgICAgICAgYWN0dWFsSGVp
Z2h0ID0gJHRpcFswXS5vZmZzZXRIZWlnaHQKKworICAgICAgICBzd2l0Y2ggKGluc2lkZSA/IHBs
YWNlbWVudC5zcGxpdCgnICcpWzFdIDogcGxhY2VtZW50KSB7CisgICAgICAgICAgY2FzZSAnYm90
dG9tJzoKKyAgICAgICAgICAgIHRwID0ge3RvcDogcG9zLnRvcCArIHBvcy5oZWlnaHQsIGxlZnQ6
IHBvcy5sZWZ0ICsgcG9zLndpZHRoIC8gMiAtIGFjdHVhbFdpZHRoIC8gMn0KKyAgICAgICAgICAg
IGJyZWFrCisgICAgICAgICAgY2FzZSAndG9wJzoKKyAgICAgICAgICAgIHRwID0ge3RvcDogcG9z
LnRvcCAtIGFjdHVhbEhlaWdodCwgbGVmdDogcG9zLmxlZnQgKyBwb3Mud2lkdGggLyAyIC0gYWN0
dWFsV2lkdGggLyAyfQorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICBjYXNlICdsZWZ0JzoK
KyAgICAgICAgICAgIHRwID0ge3RvcDogcG9zLnRvcCArIHBvcy5oZWlnaHQgLyAyIC0gYWN0dWFs
SGVpZ2h0IC8gMiwgbGVmdDogcG9zLmxlZnQgLSBhY3R1YWxXaWR0aH0KKyAgICAgICAgICAgIGJy
ZWFrCisgICAgICAgICAgY2FzZSAncmlnaHQnOgorICAgICAgICAgICAgdHAgPSB7dG9wOiBwb3Mu
dG9wICsgcG9zLmhlaWdodCAvIDIgLSBhY3R1YWxIZWlnaHQgLyAyLCBsZWZ0OiBwb3MubGVmdCAr
IHBvcy53aWR0aH0KKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIH0KKworICAgICAgICAkdGlw
CisgICAgICAgICAgLm9mZnNldCh0cCkKKyAgICAgICAgICAuYWRkQ2xhc3MocGxhY2VtZW50KQor
ICAgICAgICAgIC5hZGRDbGFzcygnaW4nKQorICAgICAgfQorICAgIH0KKworICAsIHNldENvbnRl
bnQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciAkdGlwID0gdGhpcy50aXAoKQorICAgICAgICAs
IHRpdGxlID0gdGhpcy5nZXRUaXRsZSgpCisKKyAgICAgICR0aXAuZmluZCgnLnRvb2x0aXAtaW5u
ZXInKVt0aGlzLm9wdGlvbnMuaHRtbCA/ICdodG1sJyA6ICd0ZXh0J10odGl0bGUpCisgICAgICAk
dGlwLnJlbW92ZUNsYXNzKCdmYWRlIGluIHRvcCBib3R0b20gbGVmdCByaWdodCcpCisgICAgfQor
CisgICwgaGlkZTogZnVuY3Rpb24gKCkgeworICAgICAgdmFyIHRoYXQgPSB0aGlzCisgICAgICAg
ICwgJHRpcCA9IHRoaXMudGlwKCkKKworICAgICAgJHRpcC5yZW1vdmVDbGFzcygnaW4nKQorCisg
ICAgICBmdW5jdGlvbiByZW1vdmVXaXRoQW5pbWF0aW9uKCkgeworICAgICAgICB2YXIgdGltZW91
dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICR0aXAub2ZmKCQuc3VwcG9y
dC50cmFuc2l0aW9uLmVuZCkuZGV0YWNoKCkKKyAgICAgICAgfSwgNTAwKQorCisgICAgICAgICR0
aXAub25lKCQuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCwgZnVuY3Rpb24gKCkgeworICAgICAgICAg
IGNsZWFyVGltZW91dCh0aW1lb3V0KQorICAgICAgICAgICR0aXAuZGV0YWNoKCkKKyAgICAgICAg
fSkKKyAgICAgIH0KKworICAgICAgJC5zdXBwb3J0LnRyYW5zaXRpb24gJiYgdGhpcy4kdGlwLmhh
c0NsYXNzKCdmYWRlJykgPworICAgICAgICByZW1vdmVXaXRoQW5pbWF0aW9uKCkgOgorICAgICAg
ICAkdGlwLmRldGFjaCgpCisKKyAgICAgIHJldHVybiB0aGlzCisgICAgfQorCisgICwgZml4VGl0
bGU6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciAkZSA9IHRoaXMuJGVsZW1lbnQKKyAgICAgIGlm
ICgkZS5hdHRyKCd0aXRsZScpIHx8IHR5cGVvZigkZS5hdHRyKCdkYXRhLW9yaWdpbmFsLXRpdGxl
JykpICE9ICdzdHJpbmcnKSB7CisgICAgICAgICRlLmF0dHIoJ2RhdGEtb3JpZ2luYWwtdGl0bGUn
LCAkZS5hdHRyKCd0aXRsZScpIHx8ICcnKS5yZW1vdmVBdHRyKCd0aXRsZScpCisgICAgICB9Cisg
ICAgfQorCisgICwgaGFzQ29udGVudDogZnVuY3Rpb24gKCkgeworICAgICAgcmV0dXJuIHRoaXMu
Z2V0VGl0bGUoKQorICAgIH0KKworICAsIGdldFBvc2l0aW9uOiBmdW5jdGlvbiAoaW5zaWRlKSB7
CisgICAgICByZXR1cm4gJC5leHRlbmQoe30sIChpbnNpZGUgPyB7dG9wOiAwLCBsZWZ0OiAwfSA6
IHRoaXMuJGVsZW1lbnQub2Zmc2V0KCkpLCB7CisgICAgICAgIHdpZHRoOiB0aGlzLiRlbGVtZW50
WzBdLm9mZnNldFdpZHRoCisgICAgICAsIGhlaWdodDogdGhpcy4kZWxlbWVudFswXS5vZmZzZXRI
ZWlnaHQKKyAgICAgIH0pCisgICAgfQorCisgICwgZ2V0VGl0bGU6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgIHZhciB0aXRsZQorICAgICAgICAsICRlID0gdGhpcy4kZWxlbWVudAorICAgICAgICAsIG8g
PSB0aGlzLm9wdGlvbnMKKworICAgICAgdGl0bGUgPSAkZS5hdHRyKCdkYXRhLW9yaWdpbmFsLXRp
dGxlJykKKyAgICAgICAgfHwgKHR5cGVvZiBvLnRpdGxlID09ICdmdW5jdGlvbicgPyBvLnRpdGxl
LmNhbGwoJGVbMF0pIDogIG8udGl0bGUpCisKKyAgICAgIHJldHVybiB0aXRsZQorICAgIH0KKwor
ICAsIHRpcDogZnVuY3Rpb24gKCkgeworICAgICAgcmV0dXJuIHRoaXMuJHRpcCA9IHRoaXMuJHRp
cCB8fCAkKHRoaXMub3B0aW9ucy50ZW1wbGF0ZSkKKyAgICB9CisKKyAgLCB2YWxpZGF0ZTogZnVu
Y3Rpb24gKCkgeworICAgICAgaWYgKCF0aGlzLiRlbGVtZW50WzBdLnBhcmVudE5vZGUpIHsKKyAg
ICAgICAgdGhpcy5oaWRlKCkKKyAgICAgICAgdGhpcy4kZWxlbWVudCA9IG51bGwKKyAgICAgICAg
dGhpcy5vcHRpb25zID0gbnVsbAorICAgICAgfQorICAgIH0KKworICAsIGVuYWJsZTogZnVuY3Rp
b24gKCkgeworICAgICAgdGhpcy5lbmFibGVkID0gdHJ1ZQorICAgIH0KKworICAsIGRpc2FibGU6
IGZ1bmN0aW9uICgpIHsKKyAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlCisgICAgfQorCisgICwg
dG9nZ2xlRW5hYmxlZDogZnVuY3Rpb24gKCkgeworICAgICAgdGhpcy5lbmFibGVkID0gIXRoaXMu
ZW5hYmxlZAorICAgIH0KKworICAsIHRvZ2dsZTogZnVuY3Rpb24gKGUpIHsKKyAgICAgIHZhciBz
ZWxmID0gJChlLmN1cnJlbnRUYXJnZXQpW3RoaXMudHlwZV0odGhpcy5fb3B0aW9ucykuZGF0YSh0
aGlzLnR5cGUpCisgICAgICBzZWxmW3NlbGYudGlwKCkuaGFzQ2xhc3MoJ2luJykgPyAnaGlkZScg
OiAnc2hvdyddKCkKKyAgICB9CisKKyAgLCBkZXN0cm95OiBmdW5jdGlvbiAoKSB7CisgICAgICB0
aGlzLmhpZGUoKS4kZWxlbWVudC5vZmYoJy4nICsgdGhpcy50eXBlKS5yZW1vdmVEYXRhKHRoaXMu
dHlwZSkKKyAgICB9CisKKyAgfQorCisKKyAvKiBUT09MVElQIFBMVUdJTiBERUZJTklUSU9OCisg
ICogPT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisgIHZhciBvbGQgPSAkLmZuLnRvb2x0
aXAKKworICAkLmZuLnRvb2x0aXAgPSBmdW5jdGlvbiAoIG9wdGlvbiApIHsKKyAgICByZXR1cm4g
dGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciAkdGhpcyA9ICQodGhpcykKKyAgICAg
ICAgLCBkYXRhID0gJHRoaXMuZGF0YSgndG9vbHRpcCcpCisgICAgICAgICwgb3B0aW9ucyA9IHR5
cGVvZiBvcHRpb24gPT0gJ29iamVjdCcgJiYgb3B0aW9uCisgICAgICBpZiAoIWRhdGEpICR0aGlz
LmRhdGEoJ3Rvb2x0aXAnLCAoZGF0YSA9IG5ldyBUb29sdGlwKHRoaXMsIG9wdGlvbnMpKSkKKyAg
ICAgIGlmICh0eXBlb2Ygb3B0aW9uID09ICdzdHJpbmcnKSBkYXRhW29wdGlvbl0oKQorICAgIH0p
CisgIH0KKworICAkLmZuLnRvb2x0aXAuQ29uc3RydWN0b3IgPSBUb29sdGlwCisKKyAgJC5mbi50
b29sdGlwLmRlZmF1bHRzID0geworICAgIGFuaW1hdGlvbjogdHJ1ZQorICAsIHBsYWNlbWVudDog
J3RvcCcKKyAgLCBzZWxlY3RvcjogZmFsc2UKKyAgLCB0ZW1wbGF0ZTogJzxkaXYgY2xhc3M9InRv
b2x0aXAiPjxkaXYgY2xhc3M9InRvb2x0aXAtYXJyb3ciPjwvZGl2PjxkaXYgY2xhc3M9InRvb2x0
aXAtaW5uZXIiPjwvZGl2PjwvZGl2PicKKyAgLCB0cmlnZ2VyOiAnaG92ZXInCisgICwgdGl0bGU6
ICcnCisgICwgZGVsYXk6IDAKKyAgLCBodG1sOiBmYWxzZQorICB9CisKKworIC8qIFRPT0xUSVAg
Tk8gQ09ORkxJQ1QKKyAgKiA9PT09PT09PT09PT09PT09PT09ICovCisKKyAgJC5mbi50b29sdGlw
Lm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7CisgICAgJC5mbi50b29sdGlwID0gb2xkCisgICAg
cmV0dXJuIHRoaXMKKyAgfQorCit9KHdpbmRvdy5qUXVlcnkpOy8qID09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBib290c3RyYXAt
cG9wb3Zlci5qcyB2Mi4yLjIKKyAqIGh0dHA6Ly90d2l0dGVyLmdpdGh1Yi5jb20vYm9vdHN0cmFw
L2phdmFzY3JpcHQuaHRtbCNwb3BvdmVycworICogPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAyMDEyIFR3aXR0
ZXIsIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNp
b24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhj
ZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEg
Y29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNl
bnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxh
dyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVy
IHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRI
T1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mg
b3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdl
IGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNl
bnNlLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0gKi8KKworCishZnVuY3Rpb24gKCQpIHsKKworICAidXNlIHN0cmljdCI7IC8v
IGpzaGludCA7XzsKKworCisgLyogUE9QT1ZFUiBQVUJMSUMgQ0xBU1MgREVGSU5JVElPTgorICAq
ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworICB2YXIgUG9wb3ZlciA9IGZ1
bmN0aW9uIChlbGVtZW50LCBvcHRpb25zKSB7CisgICAgdGhpcy5pbml0KCdwb3BvdmVyJywgZWxl
bWVudCwgb3B0aW9ucykKKyAgfQorCisKKyAgLyogTk9URTogUE9QT1ZFUiBFWFRFTkRTIEJPT1RT
VFJBUC1UT09MVElQLmpzCisgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PSAqLworCisgIFBvcG92ZXIucHJvdG90eXBlID0gJC5leHRlbmQoe30sICQuZm4udG9v
bHRpcC5Db25zdHJ1Y3Rvci5wcm90b3R5cGUsIHsKKworICAgIGNvbnN0cnVjdG9yOiBQb3BvdmVy
CisKKyAgLCBzZXRDb250ZW50OiBmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgJHRpcCA9IHRoaXMu
dGlwKCkKKyAgICAgICAgLCB0aXRsZSA9IHRoaXMuZ2V0VGl0bGUoKQorICAgICAgICAsIGNvbnRl
bnQgPSB0aGlzLmdldENvbnRlbnQoKQorCisgICAgICAkdGlwLmZpbmQoJy5wb3BvdmVyLXRpdGxl
JylbdGhpcy5vcHRpb25zLmh0bWwgPyAnaHRtbCcgOiAndGV4dCddKHRpdGxlKQorICAgICAgJHRp
cC5maW5kKCcucG9wb3Zlci1jb250ZW50JylbdGhpcy5vcHRpb25zLmh0bWwgPyAnaHRtbCcgOiAn
dGV4dCddKGNvbnRlbnQpCisKKyAgICAgICR0aXAucmVtb3ZlQ2xhc3MoJ2ZhZGUgdG9wIGJvdHRv
bSBsZWZ0IHJpZ2h0IGluJykKKyAgICB9CisKKyAgLCBoYXNDb250ZW50OiBmdW5jdGlvbiAoKSB7
CisgICAgICByZXR1cm4gdGhpcy5nZXRUaXRsZSgpIHx8IHRoaXMuZ2V0Q29udGVudCgpCisgICAg
fQorCisgICwgZ2V0Q29udGVudDogZnVuY3Rpb24gKCkgeworICAgICAgdmFyIGNvbnRlbnQKKyAg
ICAgICAgLCAkZSA9IHRoaXMuJGVsZW1lbnQKKyAgICAgICAgLCBvID0gdGhpcy5vcHRpb25zCisK
KyAgICAgIGNvbnRlbnQgPSAkZS5hdHRyKCdkYXRhLWNvbnRlbnQnKQorICAgICAgICB8fCAodHlw
ZW9mIG8uY29udGVudCA9PSAnZnVuY3Rpb24nID8gby5jb250ZW50LmNhbGwoJGVbMF0pIDogIG8u
Y29udGVudCkKKworICAgICAgcmV0dXJuIGNvbnRlbnQKKyAgICB9CisKKyAgLCB0aXA6IGZ1bmN0
aW9uICgpIHsKKyAgICAgIGlmICghdGhpcy4kdGlwKSB7CisgICAgICAgIHRoaXMuJHRpcCA9ICQo
dGhpcy5vcHRpb25zLnRlbXBsYXRlKQorICAgICAgfQorICAgICAgcmV0dXJuIHRoaXMuJHRpcAor
ICAgIH0KKworICAsIGRlc3Ryb3k6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHRoaXMuaGlkZSgpLiRl
bGVtZW50Lm9mZignLicgKyB0aGlzLnR5cGUpLnJlbW92ZURhdGEodGhpcy50eXBlKQorICAgIH0K
KworICB9KQorCisKKyAvKiBQT1BPVkVSIFBMVUdJTiBERUZJTklUSU9OCisgICogPT09PT09PT09
PT09PT09PT09PT09PT0gKi8KKworICB2YXIgb2xkID0gJC5mbi5wb3BvdmVyCisKKyAgJC5mbi5w
b3BvdmVyID0gZnVuY3Rpb24gKG9wdGlvbikgeworICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rp
b24gKCkgeworICAgICAgdmFyICR0aGlzID0gJCh0aGlzKQorICAgICAgICAsIGRhdGEgPSAkdGhp
cy5kYXRhKCdwb3BvdmVyJykKKyAgICAgICAgLCBvcHRpb25zID0gdHlwZW9mIG9wdGlvbiA9PSAn
b2JqZWN0JyAmJiBvcHRpb24KKyAgICAgIGlmICghZGF0YSkgJHRoaXMuZGF0YSgncG9wb3Zlcics
IChkYXRhID0gbmV3IFBvcG92ZXIodGhpcywgb3B0aW9ucykpKQorICAgICAgaWYgKHR5cGVvZiBv
cHRpb24gPT0gJ3N0cmluZycpIGRhdGFbb3B0aW9uXSgpCisgICAgfSkKKyAgfQorCisgICQuZm4u
cG9wb3Zlci5Db25zdHJ1Y3RvciA9IFBvcG92ZXIKKworICAkLmZuLnBvcG92ZXIuZGVmYXVsdHMg
PSAkLmV4dGVuZCh7fSAsICQuZm4udG9vbHRpcC5kZWZhdWx0cywgeworICAgIHBsYWNlbWVudDog
J3JpZ2h0JworICAsIHRyaWdnZXI6ICdjbGljaycKKyAgLCBjb250ZW50OiAnJworICAsIHRlbXBs
YXRlOiAnPGRpdiBjbGFzcz0icG9wb3ZlciI+PGRpdiBjbGFzcz0iYXJyb3ciPjwvZGl2PjxkaXYg
Y2xhc3M9InBvcG92ZXItaW5uZXIiPjxoMyBjbGFzcz0icG9wb3Zlci10aXRsZSI+PC9oMz48ZGl2
IGNsYXNzPSJwb3BvdmVyLWNvbnRlbnQiPjwvZGl2PjwvZGl2PjwvZGl2PicKKyAgfSkKKworCisg
LyogUE9QT1ZFUiBOTyBDT05GTElDVAorICAqID09PT09PT09PT09PT09PT09PT0gKi8KKworICAk
LmZuLnBvcG92ZXIubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHsKKyAgICAkLmZuLnBvcG92ZXIg
PSBvbGQKKyAgICByZXR1cm4gdGhpcworICB9CisKK30od2luZG93LmpRdWVyeSk7LyogPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor
ICogYm9vdHN0cmFwLXNjcm9sbHNweS5qcyB2Mi4yLjIKKyAqIGh0dHA6Ly90d2l0dGVyLmdpdGh1
Yi5jb20vYm9vdHN0cmFwL2phdmFzY3JpcHQuaHRtbCNzY3JvbGxzcHkKKyAqID09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENv
cHlyaWdodCAyMDEyIFR3aXR0ZXIsIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBh
Y2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90
IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAq
IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93
d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJl
ZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAq
IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJ
UyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lO
RCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhl
IHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRp
b25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCishZnVuY3Rpb24gKCQpIHsK
KworICAidXNlIHN0cmljdCI7IC8vIGpzaGludCA7XzsKKworCisgLyogU0NST0xMU1BZIENMQVNT
IERFRklOSVRJT04KKyAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisgIGZ1bmN0
aW9uIFNjcm9sbFNweShlbGVtZW50LCBvcHRpb25zKSB7CisgICAgdmFyIHByb2Nlc3MgPSAkLnBy
b3h5KHRoaXMucHJvY2VzcywgdGhpcykKKyAgICAgICwgJGVsZW1lbnQgPSAkKGVsZW1lbnQpLmlz
KCdib2R5JykgPyAkKHdpbmRvdykgOiAkKGVsZW1lbnQpCisgICAgICAsIGhyZWYKKyAgICB0aGlz
Lm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgJC5mbi5zY3JvbGxzcHkuZGVmYXVsdHMsIG9wdGlvbnMp
CisgICAgdGhpcy4kc2Nyb2xsRWxlbWVudCA9ICRlbGVtZW50Lm9uKCdzY3JvbGwuc2Nyb2xsLXNw
eS5kYXRhLWFwaScsIHByb2Nlc3MpCisgICAgdGhpcy5zZWxlY3RvciA9ICh0aGlzLm9wdGlvbnMu
dGFyZ2V0CisgICAgICB8fCAoKGhyZWYgPSAkKGVsZW1lbnQpLmF0dHIoJ2hyZWYnKSkgJiYgaHJl
Zi5yZXBsYWNlKC8uKig/PSNbXlxzXSskKS8sICcnKSkgLy9zdHJpcCBmb3IgaWU3CisgICAgICB8
fCAnJykgKyAnIC5uYXYgbGkgPiBhJworICAgIHRoaXMuJGJvZHkgPSAkKCdib2R5JykKKyAgICB0
aGlzLnJlZnJlc2goKQorICAgIHRoaXMucHJvY2VzcygpCisgIH0KKworICBTY3JvbGxTcHkucHJv
dG90eXBlID0geworCisgICAgICBjb25zdHJ1Y3RvcjogU2Nyb2xsU3B5CisKKyAgICAsIHJlZnJl
c2g6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzCisgICAgICAgICAgLCAk
dGFyZ2V0cworCisgICAgICAgIHRoaXMub2Zmc2V0cyA9ICQoW10pCisgICAgICAgIHRoaXMudGFy
Z2V0cyA9ICQoW10pCisKKyAgICAgICAgJHRhcmdldHMgPSB0aGlzLiRib2R5CisgICAgICAgICAg
LmZpbmQodGhpcy5zZWxlY3RvcikKKyAgICAgICAgICAubWFwKGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHZhciAkZWwgPSAkKHRoaXMpCisgICAgICAgICAgICAgICwgaHJlZiA9ICRlbC5kYXRh
KCd0YXJnZXQnKSB8fCAkZWwuYXR0cignaHJlZicpCisgICAgICAgICAgICAgICwgJGhyZWYgPSAv
XiNcdy8udGVzdChocmVmKSAmJiAkKGhyZWYpCisgICAgICAgICAgICByZXR1cm4gKCAkaHJlZgor
ICAgICAgICAgICAgICAmJiAkaHJlZi5sZW5ndGgKKyAgICAgICAgICAgICAgJiYgW1sgJGhyZWYu
cG9zaXRpb24oKS50b3AgKyBzZWxmLiRzY3JvbGxFbGVtZW50LnNjcm9sbFRvcCgpLCBocmVmIF1d
ICkgfHwgbnVsbAorICAgICAgICAgIH0pCisgICAgICAgICAgLnNvcnQoZnVuY3Rpb24gKGEsIGIp
IHsgcmV0dXJuIGFbMF0gLSBiWzBdIH0pCisgICAgICAgICAgLmVhY2goZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgc2VsZi5vZmZzZXRzLnB1c2godGhpc1swXSkKKyAgICAgICAgICAgIHNlbGYu
dGFyZ2V0cy5wdXNoKHRoaXNbMV0pCisgICAgICAgICAgfSkKKyAgICAgIH0KKworICAgICwgcHJv
Y2VzczogZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgc2Nyb2xsVG9wID0gdGhpcy4kc2Nyb2xs
RWxlbWVudC5zY3JvbGxUb3AoKSArIHRoaXMub3B0aW9ucy5vZmZzZXQKKyAgICAgICAgICAsIHNj
cm9sbEhlaWdodCA9IHRoaXMuJHNjcm9sbEVsZW1lbnRbMF0uc2Nyb2xsSGVpZ2h0IHx8IHRoaXMu
JGJvZHlbMF0uc2Nyb2xsSGVpZ2h0CisgICAgICAgICAgLCBtYXhTY3JvbGwgPSBzY3JvbGxIZWln
aHQgLSB0aGlzLiRzY3JvbGxFbGVtZW50LmhlaWdodCgpCisgICAgICAgICAgLCBvZmZzZXRzID0g
dGhpcy5vZmZzZXRzCisgICAgICAgICAgLCB0YXJnZXRzID0gdGhpcy50YXJnZXRzCisgICAgICAg
ICAgLCBhY3RpdmVUYXJnZXQgPSB0aGlzLmFjdGl2ZVRhcmdldAorICAgICAgICAgICwgaQorCisg
ICAgICAgIGlmIChzY3JvbGxUb3AgPj0gbWF4U2Nyb2xsKSB7CisgICAgICAgICAgcmV0dXJuIGFj
dGl2ZVRhcmdldCAhPSAoaSA9IHRhcmdldHMubGFzdCgpWzBdKQorICAgICAgICAgICAgJiYgdGhp
cy5hY3RpdmF0ZSAoIGkgKQorICAgICAgICB9CisKKyAgICAgICAgZm9yIChpID0gb2Zmc2V0cy5s
ZW5ndGg7IGktLTspIHsKKyAgICAgICAgICBhY3RpdmVUYXJnZXQgIT0gdGFyZ2V0c1tpXQorICAg
ICAgICAgICAgJiYgc2Nyb2xsVG9wID49IG9mZnNldHNbaV0KKyAgICAgICAgICAgICYmICghb2Zm
c2V0c1tpICsgMV0gfHwgc2Nyb2xsVG9wIDw9IG9mZnNldHNbaSArIDFdKQorICAgICAgICAgICAg
JiYgdGhpcy5hY3RpdmF0ZSggdGFyZ2V0c1tpXSApCisgICAgICAgIH0KKyAgICAgIH0KKworICAg
ICwgYWN0aXZhdGU6IGZ1bmN0aW9uICh0YXJnZXQpIHsKKyAgICAgICAgdmFyIGFjdGl2ZQorICAg
ICAgICAgICwgc2VsZWN0b3IKKworICAgICAgICB0aGlzLmFjdGl2ZVRhcmdldCA9IHRhcmdldAor
CisgICAgICAgICQodGhpcy5zZWxlY3RvcikKKyAgICAgICAgICAucGFyZW50KCcuYWN0aXZlJykK
KyAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpCisKKyAgICAgICAgc2VsZWN0b3IgPSB0
aGlzLnNlbGVjdG9yCisgICAgICAgICAgKyAnW2RhdGEtdGFyZ2V0PSInICsgdGFyZ2V0ICsgJyJd
LCcKKyAgICAgICAgICArIHRoaXMuc2VsZWN0b3IgKyAnW2hyZWY9IicgKyB0YXJnZXQgKyAnIl0n
CisKKyAgICAgICAgYWN0aXZlID0gJChzZWxlY3RvcikKKyAgICAgICAgICAucGFyZW50KCdsaScp
CisgICAgICAgICAgLmFkZENsYXNzKCdhY3RpdmUnKQorCisgICAgICAgIGlmIChhY3RpdmUucGFy
ZW50KCcuZHJvcGRvd24tbWVudScpLmxlbmd0aCkgIHsKKyAgICAgICAgICBhY3RpdmUgPSBhY3Rp
dmUuY2xvc2VzdCgnbGkuZHJvcGRvd24nKS5hZGRDbGFzcygnYWN0aXZlJykKKyAgICAgICAgfQor
CisgICAgICAgIGFjdGl2ZS50cmlnZ2VyKCdhY3RpdmF0ZScpCisgICAgICB9CisKKyAgfQorCisK
KyAvKiBTQ1JPTExTUFkgUExVR0lOIERFRklOSVRJT04KKyAgKiA9PT09PT09PT09PT09PT09PT09
PT09PT09PT0gKi8KKworICB2YXIgb2xkID0gJC5mbi5zY3JvbGxzcHkKKworICAkLmZuLnNjcm9s
bHNweSA9IGZ1bmN0aW9uIChvcHRpb24pIHsKKyAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9u
ICgpIHsKKyAgICAgIHZhciAkdGhpcyA9ICQodGhpcykKKyAgICAgICAgLCBkYXRhID0gJHRoaXMu
ZGF0YSgnc2Nyb2xsc3B5JykKKyAgICAgICAgLCBvcHRpb25zID0gdHlwZW9mIG9wdGlvbiA9PSAn
b2JqZWN0JyAmJiBvcHRpb24KKyAgICAgIGlmICghZGF0YSkgJHRoaXMuZGF0YSgnc2Nyb2xsc3B5
JywgKGRhdGEgPSBuZXcgU2Nyb2xsU3B5KHRoaXMsIG9wdGlvbnMpKSkKKyAgICAgIGlmICh0eXBl
b2Ygb3B0aW9uID09ICdzdHJpbmcnKSBkYXRhW29wdGlvbl0oKQorICAgIH0pCisgIH0KKworICAk
LmZuLnNjcm9sbHNweS5Db25zdHJ1Y3RvciA9IFNjcm9sbFNweQorCisgICQuZm4uc2Nyb2xsc3B5
LmRlZmF1bHRzID0geworICAgIG9mZnNldDogMTAKKyAgfQorCisKKyAvKiBTQ1JPTExTUFkgTk8g
Q09ORkxJQ1QKKyAgKiA9PT09PT09PT09PT09PT09PT09PT0gKi8KKworICAkLmZuLnNjcm9sbHNw
eS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkgeworICAgICQuZm4uc2Nyb2xsc3B5ID0gb2xkCisg
ICAgcmV0dXJuIHRoaXMKKyAgfQorCisKKyAvKiBTQ1JPTExTUFkgREFUQS1BUEkKKyAgKiA9PT09
PT09PT09PT09PT09PT0gKi8KKworICAkKHdpbmRvdykub24oJ2xvYWQnLCBmdW5jdGlvbiAoKSB7
CisgICAgJCgnW2RhdGEtc3B5PSJzY3JvbGwiXScpLmVhY2goZnVuY3Rpb24gKCkgeworICAgICAg
dmFyICRzcHkgPSAkKHRoaXMpCisgICAgICAkc3B5LnNjcm9sbHNweSgkc3B5LmRhdGEoKSkKKyAg
ICB9KQorICB9KQorCit9KHdpbmRvdy5qUXVlcnkpOy8qID09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBib290c3RyYXAtdGFiLmpzIHYy
LjIuMgorICogaHR0cDovL3R3aXR0ZXIuZ2l0aHViLmNvbS9ib290c3RyYXAvamF2YXNjcmlwdC5o
dG1sI3RhYnMKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgMjAxMiBUd2l0dGVyLCBJbmMuCisgKgorICogTGlj
ZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNl
Iik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdp
dGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2Ug
YXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAq
CisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdy
aXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0
cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENP
TkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUg
dGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lv
bnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqID09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworIWZ1
bmN0aW9uICgkKSB7CisKKyAgInVzZSBzdHJpY3QiOyAvLyBqc2hpbnQgO187CisKKworIC8qIFRB
QiBDTEFTUyBERUZJTklUSU9OCisgICogPT09PT09PT09PT09PT09PT09PT0gKi8KKworICB2YXIg
VGFiID0gZnVuY3Rpb24gKGVsZW1lbnQpIHsKKyAgICB0aGlzLmVsZW1lbnQgPSAkKGVsZW1lbnQp
CisgIH0KKworICBUYWIucHJvdG90eXBlID0geworCisgICAgY29uc3RydWN0b3I6IFRhYgorCisg
ICwgc2hvdzogZnVuY3Rpb24gKCkgeworICAgICAgdmFyICR0aGlzID0gdGhpcy5lbGVtZW50Cisg
ICAgICAgICwgJHVsID0gJHRoaXMuY2xvc2VzdCgndWw6bm90KC5kcm9wZG93bi1tZW51KScpCisg
ICAgICAgICwgc2VsZWN0b3IgPSAkdGhpcy5hdHRyKCdkYXRhLXRhcmdldCcpCisgICAgICAgICwg
cHJldmlvdXMKKyAgICAgICAgLCAkdGFyZ2V0CisgICAgICAgICwgZQorCisgICAgICBpZiAoIXNl
bGVjdG9yKSB7CisgICAgICAgIHNlbGVjdG9yID0gJHRoaXMuYXR0cignaHJlZicpCisgICAgICAg
IHNlbGVjdG9yID0gc2VsZWN0b3IgJiYgc2VsZWN0b3IucmVwbGFjZSgvLiooPz0jW15cc10qJCkv
LCAnJykgLy9zdHJpcCBmb3IgaWU3CisgICAgICB9CisKKyAgICAgIGlmICggJHRoaXMucGFyZW50
KCdsaScpLmhhc0NsYXNzKCdhY3RpdmUnKSApIHJldHVybgorCisgICAgICBwcmV2aW91cyA9ICR1
bC5maW5kKCcuYWN0aXZlOmxhc3QgYScpWzBdCisKKyAgICAgIGUgPSAkLkV2ZW50KCdzaG93Jywg
eworICAgICAgICByZWxhdGVkVGFyZ2V0OiBwcmV2aW91cworICAgICAgfSkKKworICAgICAgJHRo
aXMudHJpZ2dlcihlKQorCisgICAgICBpZiAoZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkgcmV0dXJu
CisKKyAgICAgICR0YXJnZXQgPSAkKHNlbGVjdG9yKQorCisgICAgICB0aGlzLmFjdGl2YXRlKCR0
aGlzLnBhcmVudCgnbGknKSwgJHVsKQorICAgICAgdGhpcy5hY3RpdmF0ZSgkdGFyZ2V0LCAkdGFy
Z2V0LnBhcmVudCgpLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICR0aGlzLnRyaWdnZXIoeworICAg
ICAgICAgIHR5cGU6ICdzaG93bicKKyAgICAgICAgLCByZWxhdGVkVGFyZ2V0OiBwcmV2aW91cwor
ICAgICAgICB9KQorICAgICAgfSkKKyAgICB9CisKKyAgLCBhY3RpdmF0ZTogZnVuY3Rpb24gKCBl
bGVtZW50LCBjb250YWluZXIsIGNhbGxiYWNrKSB7CisgICAgICB2YXIgJGFjdGl2ZSA9IGNvbnRh
aW5lci5maW5kKCc+IC5hY3RpdmUnKQorICAgICAgICAsIHRyYW5zaXRpb24gPSBjYWxsYmFjawor
ICAgICAgICAgICAgJiYgJC5zdXBwb3J0LnRyYW5zaXRpb24KKyAgICAgICAgICAgICYmICRhY3Rp
dmUuaGFzQ2xhc3MoJ2ZhZGUnKQorCisgICAgICBmdW5jdGlvbiBuZXh0KCkgeworICAgICAgICAk
YWN0aXZlCisgICAgICAgICAgLnJlbW92ZUNsYXNzKCdhY3RpdmUnKQorICAgICAgICAgIC5maW5k
KCc+IC5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZScpCisgICAgICAgICAgLnJlbW92ZUNsYXNzKCdh
Y3RpdmUnKQorCisgICAgICAgIGVsZW1lbnQuYWRkQ2xhc3MoJ2FjdGl2ZScpCisKKyAgICAgICAg
aWYgKHRyYW5zaXRpb24pIHsKKyAgICAgICAgICBlbGVtZW50WzBdLm9mZnNldFdpZHRoIC8vIHJl
ZmxvdyBmb3IgdHJhbnNpdGlvbgorICAgICAgICAgIGVsZW1lbnQuYWRkQ2xhc3MoJ2luJykKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBlbGVtZW50LnJlbW92ZUNsYXNzKCdmYWRlJykKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICggZWxlbWVudC5wYXJlbnQoJy5kcm9wZG93bi1tZW51Jykg
KSB7CisgICAgICAgICAgZWxlbWVudC5jbG9zZXN0KCdsaS5kcm9wZG93bicpLmFkZENsYXNzKCdh
Y3RpdmUnKQorICAgICAgICB9CisKKyAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKQorICAg
ICAgfQorCisgICAgICB0cmFuc2l0aW9uID8KKyAgICAgICAgJGFjdGl2ZS5vbmUoJC5zdXBwb3J0
LnRyYW5zaXRpb24uZW5kLCBuZXh0KSA6CisgICAgICAgIG5leHQoKQorCisgICAgICAkYWN0aXZl
LnJlbW92ZUNsYXNzKCdpbicpCisgICAgfQorICB9CisKKworIC8qIFRBQiBQTFVHSU4gREVGSU5J
VElPTgorICAqID09PT09PT09PT09PT09PT09PT09PSAqLworCisgIHZhciBvbGQgPSAkLmZuLnRh
YgorCisgICQuZm4udGFiID0gZnVuY3Rpb24gKCBvcHRpb24gKSB7CisgICAgcmV0dXJuIHRoaXMu
ZWFjaChmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpCisgICAgICAgICwg
ZGF0YSA9ICR0aGlzLmRhdGEoJ3RhYicpCisgICAgICBpZiAoIWRhdGEpICR0aGlzLmRhdGEoJ3Rh
YicsIChkYXRhID0gbmV3IFRhYih0aGlzKSkpCisgICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PSAn
c3RyaW5nJykgZGF0YVtvcHRpb25dKCkKKyAgICB9KQorICB9CisKKyAgJC5mbi50YWIuQ29uc3Ry
dWN0b3IgPSBUYWIKKworCisgLyogVEFCIE5PIENPTkZMSUNUCisgICogPT09PT09PT09PT09PT09
ICovCisKKyAgJC5mbi50YWIubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHsKKyAgICAkLmZuLnRh
YiA9IG9sZAorICAgIHJldHVybiB0aGlzCisgIH0KKworCisgLyogVEFCIERBVEEtQVBJCisgICog
PT09PT09PT09PT09ICovCisKKyAgJChkb2N1bWVudCkub24oJ2NsaWNrLnRhYi5kYXRhLWFwaScs
ICdbZGF0YS10b2dnbGU9InRhYiJdLCBbZGF0YS10b2dnbGU9InBpbGwiXScsIGZ1bmN0aW9uIChl
KSB7CisgICAgZS5wcmV2ZW50RGVmYXVsdCgpCisgICAgJCh0aGlzKS50YWIoJ3Nob3cnKQorICB9
KQorCit9KHdpbmRvdy5qUXVlcnkpOy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIGJvb3RzdHJhcC10eXBlYWhlYWQuanMg
djIuMi4yCisgKiBodHRwOi8vdHdpdHRlci5naXRodWIuY29tL2Jvb3RzdHJhcC9qYXZhc2NyaXB0
Lmh0bWwjdHlwZWFoZWFkCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgMjAxMiBUd2l0dGVyLCBJbmMu
CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAo
dGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBj
b21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2Yg
dGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElD
RU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdy
ZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGlj
ZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJS
QU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxp
ZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5p
bmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAq
ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PSAqLworCisKKyFmdW5jdGlvbigkKXsKKworICAidXNlIHN0cmljdCI7IC8vIGpzaGludCA7
XzsKKworCisgLyogVFlQRUFIRUFEIFBVQkxJQyBDTEFTUyBERUZJTklUSU9OCisgICogPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKyAgdmFyIFR5cGVhaGVhZCA9IGZ1bmN0
aW9uIChlbGVtZW50LCBvcHRpb25zKSB7CisgICAgdGhpcy4kZWxlbWVudCA9ICQoZWxlbWVudCkK
KyAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgJC5mbi50eXBlYWhlYWQuZGVmYXVsdHMs
IG9wdGlvbnMpCisgICAgdGhpcy5tYXRjaGVyID0gdGhpcy5vcHRpb25zLm1hdGNoZXIgfHwgdGhp
cy5tYXRjaGVyCisgICAgdGhpcy5zb3J0ZXIgPSB0aGlzLm9wdGlvbnMuc29ydGVyIHx8IHRoaXMu
c29ydGVyCisgICAgdGhpcy5oaWdobGlnaHRlciA9IHRoaXMub3B0aW9ucy5oaWdobGlnaHRlciB8
fCB0aGlzLmhpZ2hsaWdodGVyCisgICAgdGhpcy51cGRhdGVyID0gdGhpcy5vcHRpb25zLnVwZGF0
ZXIgfHwgdGhpcy51cGRhdGVyCisgICAgdGhpcy5zb3VyY2UgPSB0aGlzLm9wdGlvbnMuc291cmNl
CisgICAgdGhpcy4kbWVudSA9ICQodGhpcy5vcHRpb25zLm1lbnUpCisgICAgdGhpcy5zaG93biA9
IGZhbHNlCisgICAgdGhpcy5saXN0ZW4oKQorICB9CisKKyAgVHlwZWFoZWFkLnByb3RvdHlwZSA9
IHsKKworICAgIGNvbnN0cnVjdG9yOiBUeXBlYWhlYWQKKworICAsIHNlbGVjdDogZnVuY3Rpb24g
KCkgeworICAgICAgdmFyIHZhbCA9IHRoaXMuJG1lbnUuZmluZCgnLmFjdGl2ZScpLmF0dHIoJ2Rh
dGEtdmFsdWUnKQorICAgICAgdGhpcy4kZWxlbWVudAorICAgICAgICAudmFsKHRoaXMudXBkYXRl
cih2YWwpKQorICAgICAgICAuY2hhbmdlKCkKKyAgICAgIHJldHVybiB0aGlzLmhpZGUoKQorICAg
IH0KKworICAsIHVwZGF0ZXI6IGZ1bmN0aW9uIChpdGVtKSB7CisgICAgICByZXR1cm4gaXRlbQor
ICAgIH0KKworICAsIHNob3c6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciBwb3MgPSAkLmV4dGVu
ZCh7fSwgdGhpcy4kZWxlbWVudC5wb3NpdGlvbigpLCB7CisgICAgICAgIGhlaWdodDogdGhpcy4k
ZWxlbWVudFswXS5vZmZzZXRIZWlnaHQKKyAgICAgIH0pCisKKyAgICAgIHRoaXMuJG1lbnUKKyAg
ICAgICAgLmluc2VydEFmdGVyKHRoaXMuJGVsZW1lbnQpCisgICAgICAgIC5jc3MoeworICAgICAg
ICAgIHRvcDogcG9zLnRvcCArIHBvcy5oZWlnaHQKKyAgICAgICAgLCBsZWZ0OiBwb3MubGVmdAor
ICAgICAgICB9KQorICAgICAgICAuc2hvdygpCisKKyAgICAgIHRoaXMuc2hvd24gPSB0cnVlCisg
ICAgICByZXR1cm4gdGhpcworICAgIH0KKworICAsIGhpZGU6IGZ1bmN0aW9uICgpIHsKKyAgICAg
IHRoaXMuJG1lbnUuaGlkZSgpCisgICAgICB0aGlzLnNob3duID0gZmFsc2UKKyAgICAgIHJldHVy
biB0aGlzCisgICAgfQorCisgICwgbG9va3VwOiBmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgIHZh
ciBpdGVtcworCisgICAgICB0aGlzLnF1ZXJ5ID0gdGhpcy4kZWxlbWVudC52YWwoKQorCisgICAg
ICBpZiAoIXRoaXMucXVlcnkgfHwgdGhpcy5xdWVyeS5sZW5ndGggPCB0aGlzLm9wdGlvbnMubWlu
TGVuZ3RoKSB7CisgICAgICAgIHJldHVybiB0aGlzLnNob3duID8gdGhpcy5oaWRlKCkgOiB0aGlz
CisgICAgICB9CisKKyAgICAgIGl0ZW1zID0gJC5pc0Z1bmN0aW9uKHRoaXMuc291cmNlKSA/IHRo
aXMuc291cmNlKHRoaXMucXVlcnksICQucHJveHkodGhpcy5wcm9jZXNzLCB0aGlzKSkgOiB0aGlz
LnNvdXJjZQorCisgICAgICByZXR1cm4gaXRlbXMgPyB0aGlzLnByb2Nlc3MoaXRlbXMpIDogdGhp
cworICAgIH0KKworICAsIHByb2Nlc3M6IGZ1bmN0aW9uIChpdGVtcykgeworICAgICAgdmFyIHRo
YXQgPSB0aGlzCisKKyAgICAgIGl0ZW1zID0gJC5ncmVwKGl0ZW1zLCBmdW5jdGlvbiAoaXRlbSkg
eworICAgICAgICByZXR1cm4gdGhhdC5tYXRjaGVyKGl0ZW0pCisgICAgICB9KQorCisgICAgICBp
dGVtcyA9IHRoaXMuc29ydGVyKGl0ZW1zKQorCisgICAgICBpZiAoIWl0ZW1zLmxlbmd0aCkgewor
ICAgICAgICByZXR1cm4gdGhpcy5zaG93biA/IHRoaXMuaGlkZSgpIDogdGhpcworICAgICAgfQor
CisgICAgICByZXR1cm4gdGhpcy5yZW5kZXIoaXRlbXMuc2xpY2UoMCwgdGhpcy5vcHRpb25zLml0
ZW1zKSkuc2hvdygpCisgICAgfQorCisgICwgbWF0Y2hlcjogZnVuY3Rpb24gKGl0ZW0pIHsKKyAg
ICAgIHJldHVybiB+aXRlbS50b0xvd2VyQ2FzZSgpLmluZGV4T2YodGhpcy5xdWVyeS50b0xvd2Vy
Q2FzZSgpKQorICAgIH0KKworICAsIHNvcnRlcjogZnVuY3Rpb24gKGl0ZW1zKSB7CisgICAgICB2
YXIgYmVnaW5zd2l0aCA9IFtdCisgICAgICAgICwgY2FzZVNlbnNpdGl2ZSA9IFtdCisgICAgICAg
ICwgY2FzZUluc2Vuc2l0aXZlID0gW10KKyAgICAgICAgLCBpdGVtCisKKyAgICAgIHdoaWxlIChp
dGVtID0gaXRlbXMuc2hpZnQoKSkgeworICAgICAgICBpZiAoIWl0ZW0udG9Mb3dlckNhc2UoKS5p
bmRleE9mKHRoaXMucXVlcnkudG9Mb3dlckNhc2UoKSkpIGJlZ2luc3dpdGgucHVzaChpdGVtKQor
ICAgICAgICBlbHNlIGlmICh+aXRlbS5pbmRleE9mKHRoaXMucXVlcnkpKSBjYXNlU2Vuc2l0aXZl
LnB1c2goaXRlbSkKKyAgICAgICAgZWxzZSBjYXNlSW5zZW5zaXRpdmUucHVzaChpdGVtKQorICAg
ICAgfQorCisgICAgICByZXR1cm4gYmVnaW5zd2l0aC5jb25jYXQoY2FzZVNlbnNpdGl2ZSwgY2Fz
ZUluc2Vuc2l0aXZlKQorICAgIH0KKworICAsIGhpZ2hsaWdodGVyOiBmdW5jdGlvbiAoaXRlbSkg
eworICAgICAgdmFyIHF1ZXJ5ID0gdGhpcy5xdWVyeS5yZXBsYWNlKC9bXC1cW1xde30oKSorPy4s
XFxcXiR8I1xzXS9nLCAnXFwkJicpCisgICAgICByZXR1cm4gaXRlbS5yZXBsYWNlKG5ldyBSZWdF
eHAoJygnICsgcXVlcnkgKyAnKScsICdpZycpLCBmdW5jdGlvbiAoJDEsIG1hdGNoKSB7CisgICAg
ICAgIHJldHVybiAnPHN0cm9uZz4nICsgbWF0Y2ggKyAnPC9zdHJvbmc+JworICAgICAgfSkKKyAg
ICB9CisKKyAgLCByZW5kZXI6IGZ1bmN0aW9uIChpdGVtcykgeworICAgICAgdmFyIHRoYXQgPSB0
aGlzCisKKyAgICAgIGl0ZW1zID0gJChpdGVtcykubWFwKGZ1bmN0aW9uIChpLCBpdGVtKSB7Cisg
ICAgICAgIGkgPSAkKHRoYXQub3B0aW9ucy5pdGVtKS5hdHRyKCdkYXRhLXZhbHVlJywgaXRlbSkK
KyAgICAgICAgaS5maW5kKCdhJykuaHRtbCh0aGF0LmhpZ2hsaWdodGVyKGl0ZW0pKQorICAgICAg
ICByZXR1cm4gaVswXQorICAgICAgfSkKKworICAgICAgaXRlbXMuZmlyc3QoKS5hZGRDbGFzcygn
YWN0aXZlJykKKyAgICAgIHRoaXMuJG1lbnUuaHRtbChpdGVtcykKKyAgICAgIHJldHVybiB0aGlz
CisgICAgfQorCisgICwgbmV4dDogZnVuY3Rpb24gKGV2ZW50KSB7CisgICAgICB2YXIgYWN0aXZl
ID0gdGhpcy4kbWVudS5maW5kKCcuYWN0aXZlJykucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpCisgICAg
ICAgICwgbmV4dCA9IGFjdGl2ZS5uZXh0KCkKKworICAgICAgaWYgKCFuZXh0Lmxlbmd0aCkgewor
ICAgICAgICBuZXh0ID0gJCh0aGlzLiRtZW51LmZpbmQoJ2xpJylbMF0pCisgICAgICB9CisKKyAg
ICAgIG5leHQuYWRkQ2xhc3MoJ2FjdGl2ZScpCisgICAgfQorCisgICwgcHJldjogZnVuY3Rpb24g
KGV2ZW50KSB7CisgICAgICB2YXIgYWN0aXZlID0gdGhpcy4kbWVudS5maW5kKCcuYWN0aXZlJyku
cmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpCisgICAgICAgICwgcHJldiA9IGFjdGl2ZS5wcmV2KCkKKwor
ICAgICAgaWYgKCFwcmV2Lmxlbmd0aCkgeworICAgICAgICBwcmV2ID0gdGhpcy4kbWVudS5maW5k
KCdsaScpLmxhc3QoKQorICAgICAgfQorCisgICAgICBwcmV2LmFkZENsYXNzKCdhY3RpdmUnKQor
ICAgIH0KKworICAsIGxpc3RlbjogZnVuY3Rpb24gKCkgeworICAgICAgdGhpcy4kZWxlbWVudAor
ICAgICAgICAub24oJ2JsdXInLCAgICAgJC5wcm94eSh0aGlzLmJsdXIsIHRoaXMpKQorICAgICAg
ICAub24oJ2tleXByZXNzJywgJC5wcm94eSh0aGlzLmtleXByZXNzLCB0aGlzKSkKKyAgICAgICAg
Lm9uKCdrZXl1cCcsICAgICQucHJveHkodGhpcy5rZXl1cCwgdGhpcykpCisKKyAgICAgIGlmICh0
aGlzLmV2ZW50U3VwcG9ydGVkKCdrZXlkb3duJykpIHsKKyAgICAgICAgdGhpcy4kZWxlbWVudC5v
bigna2V5ZG93bicsICQucHJveHkodGhpcy5rZXlkb3duLCB0aGlzKSkKKyAgICAgIH0KKworICAg
ICAgdGhpcy4kbWVudQorICAgICAgICAub24oJ2NsaWNrJywgJC5wcm94eSh0aGlzLmNsaWNrLCB0
aGlzKSkKKyAgICAgICAgLm9uKCdtb3VzZWVudGVyJywgJ2xpJywgJC5wcm94eSh0aGlzLm1vdXNl
ZW50ZXIsIHRoaXMpKQorICAgIH0KKworICAsIGV2ZW50U3VwcG9ydGVkOiBmdW5jdGlvbihldmVu
dE5hbWUpIHsKKyAgICAgIHZhciBpc1N1cHBvcnRlZCA9IGV2ZW50TmFtZSBpbiB0aGlzLiRlbGVt
ZW50CisgICAgICBpZiAoIWlzU3VwcG9ydGVkKSB7CisgICAgICAgIHRoaXMuJGVsZW1lbnQuc2V0
QXR0cmlidXRlKGV2ZW50TmFtZSwgJ3JldHVybjsnKQorICAgICAgICBpc1N1cHBvcnRlZCA9IHR5
cGVvZiB0aGlzLiRlbGVtZW50W2V2ZW50TmFtZV0gPT09ICdmdW5jdGlvbicKKyAgICAgIH0KKyAg
ICAgIHJldHVybiBpc1N1cHBvcnRlZAorICAgIH0KKworICAsIG1vdmU6IGZ1bmN0aW9uIChlKSB7
CisgICAgICBpZiAoIXRoaXMuc2hvd24pIHJldHVybgorCisgICAgICBzd2l0Y2goZS5rZXlDb2Rl
KSB7CisgICAgICAgIGNhc2UgOTogLy8gdGFiCisgICAgICAgIGNhc2UgMTM6IC8vIGVudGVyCisg
ICAgICAgIGNhc2UgMjc6IC8vIGVzY2FwZQorICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKQor
ICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgY2FzZSAzODogLy8gdXAgYXJyb3cKKyAgICAgICAg
ICBlLnByZXZlbnREZWZhdWx0KCkKKyAgICAgICAgICB0aGlzLnByZXYoKQorICAgICAgICAgIGJy
ZWFrCisKKyAgICAgICAgY2FzZSA0MDogLy8gZG93biBhcnJvdworICAgICAgICAgIGUucHJldmVu
dERlZmF1bHQoKQorICAgICAgICAgIHRoaXMubmV4dCgpCisgICAgICAgICAgYnJlYWsKKyAgICAg
IH0KKworICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKQorICAgIH0KKworICAsIGtleWRvd246IGZ1
bmN0aW9uIChlKSB7CisgICAgICB0aGlzLnN1cHByZXNzS2V5UHJlc3NSZXBlYXQgPSB+JC5pbkFy
cmF5KGUua2V5Q29kZSwgWzQwLDM4LDksMTMsMjddKQorICAgICAgdGhpcy5tb3ZlKGUpCisgICAg
fQorCisgICwga2V5cHJlc3M6IGZ1bmN0aW9uIChlKSB7CisgICAgICBpZiAodGhpcy5zdXBwcmVz
c0tleVByZXNzUmVwZWF0KSByZXR1cm4KKyAgICAgIHRoaXMubW92ZShlKQorICAgIH0KKworICAs
IGtleXVwOiBmdW5jdGlvbiAoZSkgeworICAgICAgc3dpdGNoKGUua2V5Q29kZSkgeworICAgICAg
ICBjYXNlIDQwOiAvLyBkb3duIGFycm93CisgICAgICAgIGNhc2UgMzg6IC8vIHVwIGFycm93Cisg
ICAgICAgIGNhc2UgMTY6IC8vIHNoaWZ0CisgICAgICAgIGNhc2UgMTc6IC8vIGN0cmwKKyAgICAg
ICAgY2FzZSAxODogLy8gYWx0CisgICAgICAgICAgYnJlYWsKKworICAgICAgICBjYXNlIDk6IC8v
IHRhYgorICAgICAgICBjYXNlIDEzOiAvLyBlbnRlcgorICAgICAgICAgIGlmICghdGhpcy5zaG93
bikgcmV0dXJuCisgICAgICAgICAgdGhpcy5zZWxlY3QoKQorICAgICAgICAgIGJyZWFrCisKKyAg
ICAgICAgY2FzZSAyNzogLy8gZXNjYXBlCisgICAgICAgICAgaWYgKCF0aGlzLnNob3duKSByZXR1
cm4KKyAgICAgICAgICB0aGlzLmhpZGUoKQorICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICB0aGlzLmxvb2t1cCgpCisgICAgICB9CisKKyAgICAgIGUuc3RvcFBy
b3BhZ2F0aW9uKCkKKyAgICAgIGUucHJldmVudERlZmF1bHQoKQorICB9CisKKyAgLCBibHVyOiBm
dW5jdGlvbiAoZSkgeworICAgICAgdmFyIHRoYXQgPSB0aGlzCisgICAgICBzZXRUaW1lb3V0KGZ1
bmN0aW9uICgpIHsgdGhhdC5oaWRlKCkgfSwgMTUwKQorICAgIH0KKworICAsIGNsaWNrOiBmdW5j
dGlvbiAoZSkgeworICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKQorICAgICAgZS5wcmV2ZW50RGVm
YXVsdCgpCisgICAgICB0aGlzLnNlbGVjdCgpCisgICAgfQorCisgICwgbW91c2VlbnRlcjogZnVu
Y3Rpb24gKGUpIHsKKyAgICAgIHRoaXMuJG1lbnUuZmluZCgnLmFjdGl2ZScpLnJlbW92ZUNsYXNz
KCdhY3RpdmUnKQorICAgICAgJChlLmN1cnJlbnRUYXJnZXQpLmFkZENsYXNzKCdhY3RpdmUnKQor
ICAgIH0KKworICB9CisKKworICAvKiBUWVBFQUhFQUQgUExVR0lOIERFRklOSVRJT04KKyAgICog
PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKyAgdmFyIG9sZCA9ICQuZm4udHlwZWFo
ZWFkCisKKyAgJC5mbi50eXBlYWhlYWQgPSBmdW5jdGlvbiAob3B0aW9uKSB7CisgICAgcmV0dXJu
IHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpCisgICAg
ICAgICwgZGF0YSA9ICR0aGlzLmRhdGEoJ3R5cGVhaGVhZCcpCisgICAgICAgICwgb3B0aW9ucyA9
IHR5cGVvZiBvcHRpb24gPT0gJ29iamVjdCcgJiYgb3B0aW9uCisgICAgICBpZiAoIWRhdGEpICR0
aGlzLmRhdGEoJ3R5cGVhaGVhZCcsIChkYXRhID0gbmV3IFR5cGVhaGVhZCh0aGlzLCBvcHRpb25z
KSkpCisgICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PSAnc3RyaW5nJykgZGF0YVtvcHRpb25dKCkK
KyAgICB9KQorICB9CisKKyAgJC5mbi50eXBlYWhlYWQuZGVmYXVsdHMgPSB7CisgICAgc291cmNl
OiBbXQorICAsIGl0ZW1zOiA4CisgICwgbWVudTogJzx1bCBjbGFzcz0idHlwZWFoZWFkIGRyb3Bk
b3duLW1lbnUiPjwvdWw+JworICAsIGl0ZW06ICc8bGk+PGEgaHJlZj0iIyI+PC9hPjwvbGk+Jwor
ICAsIG1pbkxlbmd0aDogMQorICB9CisKKyAgJC5mbi50eXBlYWhlYWQuQ29uc3RydWN0b3IgPSBU
eXBlYWhlYWQKKworCisgLyogVFlQRUFIRUFEIE5PIENPTkZMSUNUCisgICogPT09PT09PT09PT09
PT09PT09PSAqLworCisgICQuZm4udHlwZWFoZWFkLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7
CisgICAgJC5mbi50eXBlYWhlYWQgPSBvbGQKKyAgICByZXR1cm4gdGhpcworICB9CisKKworIC8q
IFRZUEVBSEVBRCBEQVRBLUFQSQorICAqID09PT09PT09PT09PT09PT09PSAqLworCisgICQoZG9j
dW1lbnQpLm9uKCdmb2N1cy50eXBlYWhlYWQuZGF0YS1hcGknLCAnW2RhdGEtcHJvdmlkZT0idHlw
ZWFoZWFkIl0nLCBmdW5jdGlvbiAoZSkgeworICAgIHZhciAkdGhpcyA9ICQodGhpcykKKyAgICBp
ZiAoJHRoaXMuZGF0YSgndHlwZWFoZWFkJykpIHJldHVybgorICAgIGUucHJldmVudERlZmF1bHQo
KQorICAgICR0aGlzLnR5cGVhaGVhZCgkdGhpcy5kYXRhKCkpCisgIH0pCisKK30od2luZG93LmpR
dWVyeSk7CisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09CisgKiBib290c3RyYXAtYWZmaXguanMgdjIuMi4yCisgKiBodHRwOi8vdHdp
dHRlci5naXRodWIuY29tL2Jvb3RzdHJhcC9qYXZhc2NyaXB0Lmh0bWwjYWZmaXgKKyAqID09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAq
IENvcHlyaWdodCAyMDEyIFR3aXR0ZXIsIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUg
QXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkg
bm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4K
KyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6
Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1
aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUK
KyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJB
UyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkg
S0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3Ig
dGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0
YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKyFmdW5jdGlvbiAoJCkgewor
CisgICJ1c2Ugc3RyaWN0IjsgLy8ganNoaW50IDtfOworCisKKyAvKiBBRkZJWCBDTEFTUyBERUZJ
TklUSU9OCisgICogPT09PT09PT09PT09PT09PT09PT09PSAqLworCisgIHZhciBBZmZpeCA9IGZ1
bmN0aW9uIChlbGVtZW50LCBvcHRpb25zKSB7CisgICAgdGhpcy5vcHRpb25zID0gJC5leHRlbmQo
e30sICQuZm4uYWZmaXguZGVmYXVsdHMsIG9wdGlvbnMpCisgICAgdGhpcy4kd2luZG93ID0gJCh3
aW5kb3cpCisgICAgICAub24oJ3Njcm9sbC5hZmZpeC5kYXRhLWFwaScsICQucHJveHkodGhpcy5j
aGVja1Bvc2l0aW9uLCB0aGlzKSkKKyAgICAgIC5vbignY2xpY2suYWZmaXguZGF0YS1hcGknLCAg
JC5wcm94eShmdW5jdGlvbiAoKSB7IHNldFRpbWVvdXQoJC5wcm94eSh0aGlzLmNoZWNrUG9zaXRp
b24sIHRoaXMpLCAxKSB9LCB0aGlzKSkKKyAgICB0aGlzLiRlbGVtZW50ID0gJChlbGVtZW50KQor
ICAgIHRoaXMuY2hlY2tQb3NpdGlvbigpCisgIH0KKworICBBZmZpeC5wcm90b3R5cGUuY2hlY2tQ
b3NpdGlvbiA9IGZ1bmN0aW9uICgpIHsKKyAgICBpZiAoIXRoaXMuJGVsZW1lbnQuaXMoJzp2aXNp
YmxlJykpIHJldHVybgorCisgICAgdmFyIHNjcm9sbEhlaWdodCA9ICQoZG9jdW1lbnQpLmhlaWdo
dCgpCisgICAgICAsIHNjcm9sbFRvcCA9IHRoaXMuJHdpbmRvdy5zY3JvbGxUb3AoKQorICAgICAg
LCBwb3NpdGlvbiA9IHRoaXMuJGVsZW1lbnQub2Zmc2V0KCkKKyAgICAgICwgb2Zmc2V0ID0gdGhp
cy5vcHRpb25zLm9mZnNldAorICAgICAgLCBvZmZzZXRCb3R0b20gPSBvZmZzZXQuYm90dG9tCisg
ICAgICAsIG9mZnNldFRvcCA9IG9mZnNldC50b3AKKyAgICAgICwgcmVzZXQgPSAnYWZmaXggYWZm
aXgtdG9wIGFmZml4LWJvdHRvbScKKyAgICAgICwgYWZmaXgKKworICAgIGlmICh0eXBlb2Ygb2Zm
c2V0ICE9ICdvYmplY3QnKSBvZmZzZXRCb3R0b20gPSBvZmZzZXRUb3AgPSBvZmZzZXQKKyAgICBp
ZiAodHlwZW9mIG9mZnNldFRvcCA9PSAnZnVuY3Rpb24nKSBvZmZzZXRUb3AgPSBvZmZzZXQudG9w
KCkKKyAgICBpZiAodHlwZW9mIG9mZnNldEJvdHRvbSA9PSAnZnVuY3Rpb24nKSBvZmZzZXRCb3R0
b20gPSBvZmZzZXQuYm90dG9tKCkKKworICAgIGFmZml4ID0gdGhpcy51bnBpbiAhPSBudWxsICYm
IChzY3JvbGxUb3AgKyB0aGlzLnVucGluIDw9IHBvc2l0aW9uLnRvcCkgPworICAgICAgZmFsc2Ug
ICAgOiBvZmZzZXRCb3R0b20gIT0gbnVsbCAmJiAocG9zaXRpb24udG9wICsgdGhpcy4kZWxlbWVu
dC5oZWlnaHQoKSA+PSBzY3JvbGxIZWlnaHQgLSBvZmZzZXRCb3R0b20pID8KKyAgICAgICdib3R0
b20nIDogb2Zmc2V0VG9wICE9IG51bGwgJiYgc2Nyb2xsVG9wIDw9IG9mZnNldFRvcCA/CisgICAg
ICAndG9wJyAgICA6IGZhbHNlCisKKyAgICBpZiAodGhpcy5hZmZpeGVkID09PSBhZmZpeCkgcmV0
dXJuCisKKyAgICB0aGlzLmFmZml4ZWQgPSBhZmZpeAorICAgIHRoaXMudW5waW4gPSBhZmZpeCA9
PSAnYm90dG9tJyA/IHBvc2l0aW9uLnRvcCAtIHNjcm9sbFRvcCA6IG51bGwKKworICAgIHRoaXMu
JGVsZW1lbnQucmVtb3ZlQ2xhc3MocmVzZXQpLmFkZENsYXNzKCdhZmZpeCcgKyAoYWZmaXggPyAn
LScgKyBhZmZpeCA6ICcnKSkKKyAgfQorCisKKyAvKiBBRkZJWCBQTFVHSU4gREVGSU5JVElPTgor
ICAqID09PT09PT09PT09PT09PT09PT09PT09ICovCisKKyAgdmFyIG9sZCA9ICQuZm4uYWZmaXgK
KworICAkLmZuLmFmZml4ID0gZnVuY3Rpb24gKG9wdGlvbikgeworICAgIHJldHVybiB0aGlzLmVh
Y2goZnVuY3Rpb24gKCkgeworICAgICAgdmFyICR0aGlzID0gJCh0aGlzKQorICAgICAgICAsIGRh
dGEgPSAkdGhpcy5kYXRhKCdhZmZpeCcpCisgICAgICAgICwgb3B0aW9ucyA9IHR5cGVvZiBvcHRp
b24gPT0gJ29iamVjdCcgJiYgb3B0aW9uCisgICAgICBpZiAoIWRhdGEpICR0aGlzLmRhdGEoJ2Fm
Zml4JywgKGRhdGEgPSBuZXcgQWZmaXgodGhpcywgb3B0aW9ucykpKQorICAgICAgaWYgKHR5cGVv
ZiBvcHRpb24gPT0gJ3N0cmluZycpIGRhdGFbb3B0aW9uXSgpCisgICAgfSkKKyAgfQorCisgICQu
Zm4uYWZmaXguQ29uc3RydWN0b3IgPSBBZmZpeAorCisgICQuZm4uYWZmaXguZGVmYXVsdHMgPSB7
CisgICAgb2Zmc2V0OiAwCisgIH0KKworCisgLyogQUZGSVggTk8gQ09ORkxJQ1QKKyAgKiA9PT09
PT09PT09PT09PT09PSAqLworCisgICQuZm4uYWZmaXgubm9Db25mbGljdCA9IGZ1bmN0aW9uICgp
IHsKKyAgICAkLmZuLmFmZml4ID0gb2xkCisgICAgcmV0dXJuIHRoaXMKKyAgfQorCisKKyAvKiBB
RkZJWCBEQVRBLUFQSQorICAqID09PT09PT09PT09PT09ICovCisKKyAgJCh3aW5kb3cpLm9uKCds
b2FkJywgZnVuY3Rpb24gKCkgeworICAgICQoJ1tkYXRhLXNweT0iYWZmaXgiXScpLmVhY2goZnVu
Y3Rpb24gKCkgeworICAgICAgdmFyICRzcHkgPSAkKHRoaXMpCisgICAgICAgICwgZGF0YSA9ICRz
cHkuZGF0YSgpCisKKyAgICAgIGRhdGEub2Zmc2V0ID0gZGF0YS5vZmZzZXQgfHwge30KKworICAg
ICAgZGF0YS5vZmZzZXRCb3R0b20gJiYgKGRhdGEub2Zmc2V0LmJvdHRvbSA9IGRhdGEub2Zmc2V0
Qm90dG9tKQorICAgICAgZGF0YS5vZmZzZXRUb3AgJiYgKGRhdGEub2Zmc2V0LnRvcCA9IGRhdGEu
b2Zmc2V0VG9wKQorCisgICAgICAkc3B5LmFmZml4KGRhdGEpCisgICAgfSkKKyAgfSkKKworCit9
KHdpbmRvdy5qUXVlcnkpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBh
L1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdo
dGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvYm9vdHN0cmFwL2pzL2Jvb3RzdHJhcC5taW4uanMg
Yi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9mbGln
aHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2Jvb3RzdHJhcC9qcy9ib290c3RyYXAubWluLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjZlZWIxNWNlM2I3M2U1MjU0MDU0ZTM2YTE3YWZjOGM2YTVhNjMzNGYKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4x
L3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2Jvb3RzdHJhcC9qcy9i
b290c3RyYXAubWluLmpzCkBAIC0wLDAgKzEsNiBAQAorLyohCisqIEJvb3RzdHJhcC5qcyBieSBA
ZmF0ICYgQG1kbworKiBDb3B5cmlnaHQgMjAxMiBUd2l0dGVyLCBJbmMuCisqIGh0dHA6Ly93d3cu
YXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMC50eHQKKyovCishZnVuY3Rpb24oJCl7InVz
ZSBzdHJpY3QiOyQoZnVuY3Rpb24oKXskLnN1cHBvcnQudHJhbnNpdGlvbj1mdW5jdGlvbigpe3Zh
ciB0cmFuc2l0aW9uRW5kPWZ1bmN0aW9uKCl7dmFyIG5hbWUsZWw9ZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiYm9vdHN0cmFwIiksdHJhbnNFbmRFdmVudE5hbWVzPXtXZWJraXRUcmFuc2l0aW9uOiJ3
ZWJraXRUcmFuc2l0aW9uRW5kIixNb3pUcmFuc2l0aW9uOiJ0cmFuc2l0aW9uZW5kIixPVHJhbnNp
dGlvbjoib1RyYW5zaXRpb25FbmQgb3RyYW5zaXRpb25lbmQiLHRyYW5zaXRpb246InRyYW5zaXRp
b25lbmQifTtmb3IobmFtZSBpbiB0cmFuc0VuZEV2ZW50TmFtZXMpaWYodm9pZCAwIT09ZWwuc3R5
bGVbbmFtZV0pcmV0dXJuIHRyYW5zRW5kRXZlbnROYW1lc1tuYW1lXX0oKTtyZXR1cm4gdHJhbnNp
dGlvbkVuZCYme2VuZDp0cmFuc2l0aW9uRW5kfX0oKX0pfSh3aW5kb3cualF1ZXJ5KSwhZnVuY3Rp
b24oJCl7InVzZSBzdHJpY3QiO3ZhciBkaXNtaXNzPSdbZGF0YS1kaXNtaXNzPSJhbGVydCJdJyxB
bGVydD1mdW5jdGlvbihlbCl7JChlbCkub24oImNsaWNrIixkaXNtaXNzLHRoaXMuY2xvc2UpfTtB
bGVydC5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcmVtb3ZlRWxlbWVudCgp
eyRwYXJlbnQudHJpZ2dlcigiY2xvc2VkIikucmVtb3ZlKCl9dmFyICRwYXJlbnQsJHRoaXM9JCh0
aGlzKSxzZWxlY3Rvcj0kdGhpcy5hdHRyKCJkYXRhLXRhcmdldCIpO3NlbGVjdG9yfHwoc2VsZWN0
b3I9JHRoaXMuYXR0cigiaHJlZiIpLHNlbGVjdG9yPXNlbGVjdG9yJiZzZWxlY3Rvci5yZXBsYWNl
KC8uKig/PSNbXlxzXSokKS8sIiIpKSwkcGFyZW50PSQoc2VsZWN0b3IpLGUmJmUucHJldmVudERl
ZmF1bHQoKSwkcGFyZW50Lmxlbmd0aHx8KCRwYXJlbnQ9JHRoaXMuaGFzQ2xhc3MoImFsZXJ0Iik/
JHRoaXM6JHRoaXMucGFyZW50KCkpLCRwYXJlbnQudHJpZ2dlcihlPSQuRXZlbnQoImNsb3NlIikp
LGUuaXNEZWZhdWx0UHJldmVudGVkKCl8fCgkcGFyZW50LnJlbW92ZUNsYXNzKCJpbiIpLCQuc3Vw
cG9ydC50cmFuc2l0aW9uJiYkcGFyZW50Lmhhc0NsYXNzKCJmYWRlIik/JHBhcmVudC5vbigkLnN1
cHBvcnQudHJhbnNpdGlvbi5lbmQscmVtb3ZlRWxlbWVudCk6cmVtb3ZlRWxlbWVudCgpKX07dmFy
IG9sZD0kLmZuLmFsZXJ0OyQuZm4uYWxlcnQ9ZnVuY3Rpb24ob3B0aW9uKXtyZXR1cm4gdGhpcy5l
YWNoKGZ1bmN0aW9uKCl7dmFyICR0aGlzPSQodGhpcyksZGF0YT0kdGhpcy5kYXRhKCJhbGVydCIp
O2RhdGF8fCR0aGlzLmRhdGEoImFsZXJ0IixkYXRhPW5ldyBBbGVydCh0aGlzKSksInN0cmluZyI9
PXR5cGVvZiBvcHRpb24mJmRhdGFbb3B0aW9uXS5jYWxsKCR0aGlzKX0pfSwkLmZuLmFsZXJ0LkNv
bnN0cnVjdG9yPUFsZXJ0LCQuZm4uYWxlcnQubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiAk
LmZuLmFsZXJ0PW9sZCx0aGlzfSwkKGRvY3VtZW50KS5vbigiY2xpY2suYWxlcnQuZGF0YS1hcGki
LGRpc21pc3MsQWxlcnQucHJvdG90eXBlLmNsb3NlKX0od2luZG93LmpRdWVyeSksIWZ1bmN0aW9u
KCQpeyJ1c2Ugc3RyaWN0Ijt2YXIgQnV0dG9uPWZ1bmN0aW9uKGVsZW1lbnQsb3B0aW9ucyl7dGhp
cy4kZWxlbWVudD0kKGVsZW1lbnQpLHRoaXMub3B0aW9ucz0kLmV4dGVuZCh7fSwkLmZuLmJ1dHRv
bi5kZWZhdWx0cyxvcHRpb25zKX07QnV0dG9uLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihz
dGF0ZSl7dmFyIGQ9ImRpc2FibGVkIiwkZWw9dGhpcy4kZWxlbWVudCxkYXRhPSRlbC5kYXRhKCks
dmFsPSRlbC5pcygiaW5wdXQiKT8idmFsIjoiaHRtbCI7c3RhdGUrPSJUZXh0IixkYXRhLnJlc2V0
VGV4dHx8JGVsLmRhdGEoInJlc2V0VGV4dCIsJGVsW3ZhbF0oKSksJGVsW3ZhbF0oZGF0YVtzdGF0
ZV18fHRoaXMub3B0aW9uc1tzdGF0ZV0pLHNldFRpbWVvdXQoZnVuY3Rpb24oKXsibG9hZGluZ1Rl
eHQiPT1zdGF0ZT8kZWwuYWRkQ2xhc3MoZCkuYXR0cihkLGQpOiRlbC5yZW1vdmVDbGFzcyhkKS5y
ZW1vdmVBdHRyKGQpfSwwKX0sQnV0dG9uLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oKXt2YXIg
JHBhcmVudD10aGlzLiRlbGVtZW50LmNsb3Nlc3QoJ1tkYXRhLXRvZ2dsZT0iYnV0dG9ucy1yYWRp
byJdJyk7JHBhcmVudCYmJHBhcmVudC5maW5kKCIuYWN0aXZlIikucmVtb3ZlQ2xhc3MoImFjdGl2
ZSIpLHRoaXMuJGVsZW1lbnQudG9nZ2xlQ2xhc3MoImFjdGl2ZSIpfTt2YXIgb2xkPSQuZm4uYnV0
dG9uOyQuZm4uYnV0dG9uPWZ1bmN0aW9uKG9wdGlvbil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlv
bigpe3ZhciAkdGhpcz0kKHRoaXMpLGRhdGE9JHRoaXMuZGF0YSgiYnV0dG9uIiksb3B0aW9ucz0i
b2JqZWN0Ij09dHlwZW9mIG9wdGlvbiYmb3B0aW9uO2RhdGF8fCR0aGlzLmRhdGEoImJ1dHRvbiIs
ZGF0YT1uZXcgQnV0dG9uKHRoaXMsb3B0aW9ucykpLCJ0b2dnbGUiPT1vcHRpb24/ZGF0YS50b2dn
bGUoKTpvcHRpb24mJmRhdGEuc2V0U3RhdGUob3B0aW9uKX0pfSwkLmZuLmJ1dHRvbi5kZWZhdWx0
cz17bG9hZGluZ1RleHQ6ImxvYWRpbmcuLi4ifSwkLmZuLmJ1dHRvbi5Db25zdHJ1Y3Rvcj1CdXR0
b24sJC5mbi5idXR0b24ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiAkLmZuLmJ1dHRvbj1v
bGQsdGhpc30sJChkb2N1bWVudCkub24oImNsaWNrLmJ1dHRvbi5kYXRhLWFwaSIsIltkYXRhLXRv
Z2dsZV49YnV0dG9uXSIsZnVuY3Rpb24oZSl7dmFyICRidG49JChlLnRhcmdldCk7JGJ0bi5oYXND
bGFzcygiYnRuIil8fCgkYnRuPSRidG4uY2xvc2VzdCgiLmJ0biIpKSwkYnRuLmJ1dHRvbigidG9n
Z2xlIil9KX0od2luZG93LmpRdWVyeSksIWZ1bmN0aW9uKCQpeyJ1c2Ugc3RyaWN0Ijt2YXIgQ2Fy
b3VzZWw9ZnVuY3Rpb24oZWxlbWVudCxvcHRpb25zKXt0aGlzLiRlbGVtZW50PSQoZWxlbWVudCks
dGhpcy5vcHRpb25zPW9wdGlvbnMsImhvdmVyIj09dGhpcy5vcHRpb25zLnBhdXNlJiZ0aGlzLiRl
bGVtZW50Lm9uKCJtb3VzZWVudGVyIiwkLnByb3h5KHRoaXMucGF1c2UsdGhpcykpLm9uKCJtb3Vz
ZWxlYXZlIiwkLnByb3h5KHRoaXMuY3ljbGUsdGhpcykpfTtDYXJvdXNlbC5wcm90b3R5cGU9e2N5
Y2xlOmZ1bmN0aW9uKGUpe3JldHVybiBlfHwodGhpcy5wYXVzZWQ9ITEpLHRoaXMub3B0aW9ucy5p
bnRlcnZhbCYmIXRoaXMucGF1c2VkJiYodGhpcy5pbnRlcnZhbD1zZXRJbnRlcnZhbCgkLnByb3h5
KHRoaXMubmV4dCx0aGlzKSx0aGlzLm9wdGlvbnMuaW50ZXJ2YWwpKSx0aGlzfSx0bzpmdW5jdGlv
bihwb3Mpe3ZhciAkYWN0aXZlPXRoaXMuJGVsZW1lbnQuZmluZCgiLml0ZW0uYWN0aXZlIiksY2hp
bGRyZW49JGFjdGl2ZS5wYXJlbnQoKS5jaGlsZHJlbigpLGFjdGl2ZVBvcz1jaGlsZHJlbi5pbmRl
eCgkYWN0aXZlKSx0aGF0PXRoaXM7aWYoIShwb3M+Y2hpbGRyZW4ubGVuZ3RoLTF8fDA+cG9zKSly
ZXR1cm4gdGhpcy5zbGlkaW5nP3RoaXMuJGVsZW1lbnQub25lKCJzbGlkIixmdW5jdGlvbigpe3Ro
YXQudG8ocG9zKX0pOmFjdGl2ZVBvcz09cG9zP3RoaXMucGF1c2UoKS5jeWNsZSgpOnRoaXMuc2xp
ZGUocG9zPmFjdGl2ZVBvcz8ibmV4dCI6InByZXYiLCQoY2hpbGRyZW5bcG9zXSkpfSxwYXVzZTpm
dW5jdGlvbihlKXtyZXR1cm4gZXx8KHRoaXMucGF1c2VkPSEwKSx0aGlzLiRlbGVtZW50LmZpbmQo
Ii5uZXh0LCAucHJldiIpLmxlbmd0aCYmJC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kJiYodGhpcy4k
ZWxlbWVudC50cmlnZ2VyKCQuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCksdGhpcy5jeWNsZSgpKSxj
bGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpLHRoaXMuaW50ZXJ2YWw9bnVsbCx0aGlzfSxuZXh0
OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2xpZGluZz92b2lkIDA6dGhpcy5zbGlkZSgibmV4dCIp
fSxwcmV2OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2xpZGluZz92b2lkIDA6dGhpcy5zbGlkZSgi
cHJldiIpfSxzbGlkZTpmdW5jdGlvbih0eXBlLG5leHQpe3ZhciBlLCRhY3RpdmU9dGhpcy4kZWxl
bWVudC5maW5kKCIuaXRlbS5hY3RpdmUiKSwkbmV4dD1uZXh0fHwkYWN0aXZlW3R5cGVdKCksaXND
eWNsaW5nPXRoaXMuaW50ZXJ2YWwsZGlyZWN0aW9uPSJuZXh0Ij09dHlwZT8ibGVmdCI6InJpZ2h0
IixmYWxsYmFjaz0ibmV4dCI9PXR5cGU/ImZpcnN0IjoibGFzdCIsdGhhdD10aGlzO2lmKHRoaXMu
c2xpZGluZz0hMCxpc0N5Y2xpbmcmJnRoaXMucGF1c2UoKSwkbmV4dD0kbmV4dC5sZW5ndGg/JG5l
eHQ6dGhpcy4kZWxlbWVudC5maW5kKCIuaXRlbSIpW2ZhbGxiYWNrXSgpLGU9JC5FdmVudCgic2xp
ZGUiLHtyZWxhdGVkVGFyZ2V0OiRuZXh0WzBdfSksISRuZXh0Lmhhc0NsYXNzKCJhY3RpdmUiKSl7
aWYoJC5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoInNsaWRlIikp
e2lmKHRoaXMuJGVsZW1lbnQudHJpZ2dlcihlKSxlLmlzRGVmYXVsdFByZXZlbnRlZCgpKXJldHVy
bjskbmV4dC5hZGRDbGFzcyh0eXBlKSwkbmV4dFswXS5vZmZzZXRXaWR0aCwkYWN0aXZlLmFkZENs
YXNzKGRpcmVjdGlvbiksJG5leHQuYWRkQ2xhc3MoZGlyZWN0aW9uKSx0aGlzLiRlbGVtZW50Lm9u
ZSgkLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsZnVuY3Rpb24oKXskbmV4dC5yZW1vdmVDbGFzcyhb
dHlwZSxkaXJlY3Rpb25dLmpvaW4oIiAiKSkuYWRkQ2xhc3MoImFjdGl2ZSIpLCRhY3RpdmUucmVt
b3ZlQ2xhc3MoWyJhY3RpdmUiLGRpcmVjdGlvbl0uam9pbigiICIpKSx0aGF0LnNsaWRpbmc9ITEs
c2V0VGltZW91dChmdW5jdGlvbigpe3RoYXQuJGVsZW1lbnQudHJpZ2dlcigic2xpZCIpfSwwKX0p
fWVsc2V7aWYodGhpcy4kZWxlbWVudC50cmlnZ2VyKGUpLGUuaXNEZWZhdWx0UHJldmVudGVkKCkp
cmV0dXJuOyRhY3RpdmUucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpLCRuZXh0LmFkZENsYXNzKCJhY3Rp
dmUiKSx0aGlzLnNsaWRpbmc9ITEsdGhpcy4kZWxlbWVudC50cmlnZ2VyKCJzbGlkIil9cmV0dXJu
IGlzQ3ljbGluZyYmdGhpcy5jeWNsZSgpLHRoaXN9fX07dmFyIG9sZD0kLmZuLmNhcm91c2VsOyQu
Zm4uY2Fyb3VzZWw9ZnVuY3Rpb24ob3B0aW9uKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7
dmFyICR0aGlzPSQodGhpcyksZGF0YT0kdGhpcy5kYXRhKCJjYXJvdXNlbCIpLG9wdGlvbnM9JC5l
eHRlbmQoe30sJC5mbi5jYXJvdXNlbC5kZWZhdWx0cywib2JqZWN0Ij09dHlwZW9mIG9wdGlvbiYm
b3B0aW9uKSxhY3Rpb249InN0cmluZyI9PXR5cGVvZiBvcHRpb24/b3B0aW9uOm9wdGlvbnMuc2xp
ZGU7ZGF0YXx8JHRoaXMuZGF0YSgiY2Fyb3VzZWwiLGRhdGE9bmV3IENhcm91c2VsKHRoaXMsb3B0
aW9ucykpLCJudW1iZXIiPT10eXBlb2Ygb3B0aW9uP2RhdGEudG8ob3B0aW9uKTphY3Rpb24/ZGF0
YVthY3Rpb25dKCk6b3B0aW9ucy5pbnRlcnZhbCYmZGF0YS5jeWNsZSgpfSl9LCQuZm4uY2Fyb3Vz
ZWwuZGVmYXVsdHM9e2ludGVydmFsOjVlMyxwYXVzZToiaG92ZXIifSwkLmZuLmNhcm91c2VsLkNv
bnN0cnVjdG9yPUNhcm91c2VsLCQuZm4uY2Fyb3VzZWwubm9Db25mbGljdD1mdW5jdGlvbigpe3Jl
dHVybiAkLmZuLmNhcm91c2VsPW9sZCx0aGlzfSwkKGRvY3VtZW50KS5vbigiY2xpY2suY2Fyb3Vz
ZWwuZGF0YS1hcGkiLCJbZGF0YS1zbGlkZV0iLGZ1bmN0aW9uKGUpe3ZhciBocmVmLCR0aGlzPSQo
dGhpcyksJHRhcmdldD0kKCR0aGlzLmF0dHIoImRhdGEtdGFyZ2V0Iil8fChocmVmPSR0aGlzLmF0
dHIoImhyZWYiKSkmJmhyZWYucmVwbGFjZSgvLiooPz0jW15cc10rJCkvLCIiKSksb3B0aW9ucz0k
LmV4dGVuZCh7fSwkdGFyZ2V0LmRhdGEoKSwkdGhpcy5kYXRhKCkpOyR0YXJnZXQuY2Fyb3VzZWwo
b3B0aW9ucyksZS5wcmV2ZW50RGVmYXVsdCgpfSl9KHdpbmRvdy5qUXVlcnkpLCFmdW5jdGlvbigk
KXsidXNlIHN0cmljdCI7dmFyIENvbGxhcHNlPWZ1bmN0aW9uKGVsZW1lbnQsb3B0aW9ucyl7dGhp
cy4kZWxlbWVudD0kKGVsZW1lbnQpLHRoaXMub3B0aW9ucz0kLmV4dGVuZCh7fSwkLmZuLmNvbGxh
cHNlLmRlZmF1bHRzLG9wdGlvbnMpLHRoaXMub3B0aW9ucy5wYXJlbnQmJih0aGlzLiRwYXJlbnQ9
JCh0aGlzLm9wdGlvbnMucGFyZW50KSksdGhpcy5vcHRpb25zLnRvZ2dsZSYmdGhpcy50b2dnbGUo
KX07Q29sbGFwc2UucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpDb2xsYXBzZSxkaW1lbnNpb246ZnVu
Y3Rpb24oKXt2YXIgaGFzV2lkdGg9dGhpcy4kZWxlbWVudC5oYXNDbGFzcygid2lkdGgiKTtyZXR1
cm4gaGFzV2lkdGg/IndpZHRoIjoiaGVpZ2h0In0sc2hvdzpmdW5jdGlvbigpe3ZhciBkaW1lbnNp
b24sc2Nyb2xsLGFjdGl2ZXMsaGFzRGF0YTtpZighdGhpcy50cmFuc2l0aW9uaW5nKXtpZihkaW1l
bnNpb249dGhpcy5kaW1lbnNpb24oKSxzY3JvbGw9JC5jYW1lbENhc2UoWyJzY3JvbGwiLGRpbWVu
c2lvbl0uam9pbigiLSIpKSxhY3RpdmVzPXRoaXMuJHBhcmVudCYmdGhpcy4kcGFyZW50LmZpbmQo
Ij4gLmFjY29yZGlvbi1ncm91cCA+IC5pbiIpLGFjdGl2ZXMmJmFjdGl2ZXMubGVuZ3RoKXtpZiho
YXNEYXRhPWFjdGl2ZXMuZGF0YSgiY29sbGFwc2UiKSxoYXNEYXRhJiZoYXNEYXRhLnRyYW5zaXRp
b25pbmcpcmV0dXJuO2FjdGl2ZXMuY29sbGFwc2UoImhpZGUiKSxoYXNEYXRhfHxhY3RpdmVzLmRh
dGEoImNvbGxhcHNlIixudWxsKX10aGlzLiRlbGVtZW50W2RpbWVuc2lvbl0oMCksdGhpcy50cmFu
c2l0aW9uKCJhZGRDbGFzcyIsJC5FdmVudCgic2hvdyIpLCJzaG93biIpLCQuc3VwcG9ydC50cmFu
c2l0aW9uJiZ0aGlzLiRlbGVtZW50W2RpbWVuc2lvbl0odGhpcy4kZWxlbWVudFswXVtzY3JvbGxd
KX19LGhpZGU6ZnVuY3Rpb24oKXt2YXIgZGltZW5zaW9uO3RoaXMudHJhbnNpdGlvbmluZ3x8KGRp
bWVuc2lvbj10aGlzLmRpbWVuc2lvbigpLHRoaXMucmVzZXQodGhpcy4kZWxlbWVudFtkaW1lbnNp
b25dKCkpLHRoaXMudHJhbnNpdGlvbigicmVtb3ZlQ2xhc3MiLCQuRXZlbnQoImhpZGUiKSwiaGlk
ZGVuIiksdGhpcy4kZWxlbWVudFtkaW1lbnNpb25dKDApKX0scmVzZXQ6ZnVuY3Rpb24oc2l6ZSl7
dmFyIGRpbWVuc2lvbj10aGlzLmRpbWVuc2lvbigpO3JldHVybiB0aGlzLiRlbGVtZW50LnJlbW92
ZUNsYXNzKCJjb2xsYXBzZSIpW2RpbWVuc2lvbl0oc2l6ZXx8ImF1dG8iKVswXS5vZmZzZXRXaWR0
aCx0aGlzLiRlbGVtZW50W251bGwhPT1zaXplPyJhZGRDbGFzcyI6InJlbW92ZUNsYXNzIl0oImNv
bGxhcHNlIiksdGhpc30sdHJhbnNpdGlvbjpmdW5jdGlvbihtZXRob2Qsc3RhcnRFdmVudCxjb21w
bGV0ZUV2ZW50KXt2YXIgdGhhdD10aGlzLGNvbXBsZXRlPWZ1bmN0aW9uKCl7InNob3ciPT1zdGFy
dEV2ZW50LnR5cGUmJnRoYXQucmVzZXQoKSx0aGF0LnRyYW5zaXRpb25pbmc9MCx0aGF0LiRlbGVt
ZW50LnRyaWdnZXIoY29tcGxldGVFdmVudCl9O3RoaXMuJGVsZW1lbnQudHJpZ2dlcihzdGFydEV2
ZW50KSxzdGFydEV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpfHwodGhpcy50cmFuc2l0aW9uaW5n
PTEsdGhpcy4kZWxlbWVudFttZXRob2RdKCJpbiIpLCQuc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlz
LiRlbGVtZW50Lmhhc0NsYXNzKCJjb2xsYXBzZSIpP3RoaXMuJGVsZW1lbnQub25lKCQuc3VwcG9y
dC50cmFuc2l0aW9uLmVuZCxjb21wbGV0ZSk6Y29tcGxldGUoKSl9LHRvZ2dsZTpmdW5jdGlvbigp
e3RoaXNbdGhpcy4kZWxlbWVudC5oYXNDbGFzcygiaW4iKT8iaGlkZSI6InNob3ciXSgpfX07dmFy
IG9sZD0kLmZuLmNvbGxhcHNlOyQuZm4uY29sbGFwc2U9ZnVuY3Rpb24ob3B0aW9uKXtyZXR1cm4g
dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyICR0aGlzPSQodGhpcyksZGF0YT0kdGhpcy5kYXRhKCJj
b2xsYXBzZSIpLG9wdGlvbnM9Im9iamVjdCI9PXR5cGVvZiBvcHRpb24mJm9wdGlvbjtkYXRhfHwk
dGhpcy5kYXRhKCJjb2xsYXBzZSIsZGF0YT1uZXcgQ29sbGFwc2UodGhpcyxvcHRpb25zKSksInN0
cmluZyI9PXR5cGVvZiBvcHRpb24mJmRhdGFbb3B0aW9uXSgpfSl9LCQuZm4uY29sbGFwc2UuZGVm
YXVsdHM9e3RvZ2dsZTohMH0sJC5mbi5jb2xsYXBzZS5Db25zdHJ1Y3Rvcj1Db2xsYXBzZSwkLmZu
LmNvbGxhcHNlLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gJC5mbi5jb2xsYXBzZT1vbGQs
dGhpc30sJChkb2N1bWVudCkub24oImNsaWNrLmNvbGxhcHNlLmRhdGEtYXBpIiwiW2RhdGEtdG9n
Z2xlPWNvbGxhcHNlXSIsZnVuY3Rpb24oZSl7dmFyIGhyZWYsJHRoaXM9JCh0aGlzKSx0YXJnZXQ9
JHRoaXMuYXR0cigiZGF0YS10YXJnZXQiKXx8ZS5wcmV2ZW50RGVmYXVsdCgpfHwoaHJlZj0kdGhp
cy5hdHRyKCJocmVmIikpJiZocmVmLnJlcGxhY2UoLy4qKD89I1teXHNdKyQpLywiIiksb3B0aW9u
PSQodGFyZ2V0KS5kYXRhKCJjb2xsYXBzZSIpPyJ0b2dnbGUiOiR0aGlzLmRhdGEoKTskdGhpc1sk
KHRhcmdldCkuaGFzQ2xhc3MoImluIik/ImFkZENsYXNzIjoicmVtb3ZlQ2xhc3MiXSgiY29sbGFw
c2VkIiksJCh0YXJnZXQpLmNvbGxhcHNlKG9wdGlvbil9KX0od2luZG93LmpRdWVyeSksIWZ1bmN0
aW9uKCQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBjbGVhck1lbnVzKCl7JCh0b2dnbGUpLmVhY2go
ZnVuY3Rpb24oKXtnZXRQYXJlbnQoJCh0aGlzKSkucmVtb3ZlQ2xhc3MoIm9wZW4iKX0pfWZ1bmN0
aW9uIGdldFBhcmVudCgkdGhpcyl7dmFyICRwYXJlbnQsc2VsZWN0b3I9JHRoaXMuYXR0cigiZGF0
YS10YXJnZXQiKTtyZXR1cm4gc2VsZWN0b3J8fChzZWxlY3Rvcj0kdGhpcy5hdHRyKCJocmVmIiks
c2VsZWN0b3I9c2VsZWN0b3ImJi8jLy50ZXN0KHNlbGVjdG9yKSYmc2VsZWN0b3IucmVwbGFjZSgv
LiooPz0jW15cc10qJCkvLCIiKSksJHBhcmVudD0kKHNlbGVjdG9yKSwkcGFyZW50Lmxlbmd0aHx8
KCRwYXJlbnQ9JHRoaXMucGFyZW50KCkpLCRwYXJlbnR9dmFyIHRvZ2dsZT0iW2RhdGEtdG9nZ2xl
PWRyb3Bkb3duXSIsRHJvcGRvd249ZnVuY3Rpb24oZWxlbWVudCl7dmFyICRlbD0kKGVsZW1lbnQp
Lm9uKCJjbGljay5kcm9wZG93bi5kYXRhLWFwaSIsdGhpcy50b2dnbGUpOyQoImh0bWwiKS5vbigi
Y2xpY2suZHJvcGRvd24uZGF0YS1hcGkiLGZ1bmN0aW9uKCl7JGVsLnBhcmVudCgpLnJlbW92ZUNs
YXNzKCJvcGVuIil9KX07RHJvcGRvd24ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpEcm9wZG93bix0
b2dnbGU6ZnVuY3Rpb24oKXt2YXIgJHBhcmVudCxpc0FjdGl2ZSwkdGhpcz0kKHRoaXMpO2lmKCEk
dGhpcy5pcygiLmRpc2FibGVkLCA6ZGlzYWJsZWQiKSlyZXR1cm4gJHBhcmVudD1nZXRQYXJlbnQo
JHRoaXMpLGlzQWN0aXZlPSRwYXJlbnQuaGFzQ2xhc3MoIm9wZW4iKSxjbGVhck1lbnVzKCksaXNB
Y3RpdmV8fCRwYXJlbnQudG9nZ2xlQ2xhc3MoIm9wZW4iKSwkdGhpcy5mb2N1cygpLCExfSxrZXlk
b3duOmZ1bmN0aW9uKGUpe3ZhciAkdGhpcywkaXRlbXMsJHBhcmVudCxpc0FjdGl2ZSxpbmRleDtp
ZigvKDM4fDQwfDI3KS8udGVzdChlLmtleUNvZGUpJiYoJHRoaXM9JCh0aGlzKSxlLnByZXZlbnRE
ZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSwhJHRoaXMuaXMoIi5kaXNhYmxlZCwgOmRpc2Fi
bGVkIikpKXtpZigkcGFyZW50PWdldFBhcmVudCgkdGhpcyksaXNBY3RpdmU9JHBhcmVudC5oYXND
bGFzcygib3BlbiIpLCFpc0FjdGl2ZXx8aXNBY3RpdmUmJjI3PT1lLmtleUNvZGUpcmV0dXJuICR0
aGlzLmNsaWNrKCk7JGl0ZW1zPSQoIltyb2xlPW1lbnVdIGxpOm5vdCguZGl2aWRlcik6dmlzaWJs
ZSBhIiwkcGFyZW50KSwkaXRlbXMubGVuZ3RoJiYoaW5kZXg9JGl0ZW1zLmluZGV4KCRpdGVtcy5m
aWx0ZXIoIjpmb2N1cyIpKSwzOD09ZS5rZXlDb2RlJiZpbmRleD4wJiZpbmRleC0tLDQwPT1lLmtl
eUNvZGUmJiRpdGVtcy5sZW5ndGgtMT5pbmRleCYmaW5kZXgrKyx+aW5kZXh8fChpbmRleD0wKSwk
aXRlbXMuZXEoaW5kZXgpLmZvY3VzKCkpfX19O3ZhciBvbGQ9JC5mbi5kcm9wZG93bjskLmZuLmRy
b3Bkb3duPWZ1bmN0aW9uKG9wdGlvbil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciAk
dGhpcz0kKHRoaXMpLGRhdGE9JHRoaXMuZGF0YSgiZHJvcGRvd24iKTtkYXRhfHwkdGhpcy5kYXRh
KCJkcm9wZG93biIsZGF0YT1uZXcgRHJvcGRvd24odGhpcykpLCJzdHJpbmciPT10eXBlb2Ygb3B0
aW9uJiZkYXRhW29wdGlvbl0uY2FsbCgkdGhpcyl9KX0sJC5mbi5kcm9wZG93bi5Db25zdHJ1Y3Rv
cj1Ecm9wZG93biwkLmZuLmRyb3Bkb3duLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gJC5m
bi5kcm9wZG93bj1vbGQsdGhpc30sJChkb2N1bWVudCkub24oImNsaWNrLmRyb3Bkb3duLmRhdGEt
YXBpIHRvdWNoc3RhcnQuZHJvcGRvd24uZGF0YS1hcGkiLGNsZWFyTWVudXMpLm9uKCJjbGljay5k
cm9wZG93biB0b3VjaHN0YXJ0LmRyb3Bkb3duLmRhdGEtYXBpIiwiLmRyb3Bkb3duIGZvcm0iLGZ1
bmN0aW9uKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCl9KS5vbigidG91Y2hzdGFydC5kcm9wZG93bi5k
YXRhLWFwaSIsIi5kcm9wZG93bi1tZW51IixmdW5jdGlvbihlKXtlLnN0b3BQcm9wYWdhdGlvbigp
fSkub24oImNsaWNrLmRyb3Bkb3duLmRhdGEtYXBpIHRvdWNoc3RhcnQuZHJvcGRvd24uZGF0YS1h
cGkiLHRvZ2dsZSxEcm9wZG93bi5wcm90b3R5cGUudG9nZ2xlKS5vbigia2V5ZG93bi5kcm9wZG93
bi5kYXRhLWFwaSB0b3VjaHN0YXJ0LmRyb3Bkb3duLmRhdGEtYXBpIix0b2dnbGUrIiwgW3JvbGU9
bWVudV0iLERyb3Bkb3duLnByb3RvdHlwZS5rZXlkb3duKX0od2luZG93LmpRdWVyeSksIWZ1bmN0
aW9uKCQpeyJ1c2Ugc3RyaWN0Ijt2YXIgTW9kYWw9ZnVuY3Rpb24oZWxlbWVudCxvcHRpb25zKXt0
aGlzLm9wdGlvbnM9b3B0aW9ucyx0aGlzLiRlbGVtZW50PSQoZWxlbWVudCkuZGVsZWdhdGUoJ1tk
YXRhLWRpc21pc3M9Im1vZGFsIl0nLCJjbGljay5kaXNtaXNzLm1vZGFsIiwkLnByb3h5KHRoaXMu
aGlkZSx0aGlzKSksdGhpcy5vcHRpb25zLnJlbW90ZSYmdGhpcy4kZWxlbWVudC5maW5kKCIubW9k
YWwtYm9keSIpLmxvYWQodGhpcy5vcHRpb25zLnJlbW90ZSl9O01vZGFsLnByb3RvdHlwZT17Y29u
c3RydWN0b3I6TW9kYWwsdG9nZ2xlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbdGhpcy5pc1Nob3du
PyJoaWRlIjoic2hvdyJdKCl9LHNob3c6ZnVuY3Rpb24oKXt2YXIgdGhhdD10aGlzLGU9JC5FdmVu
dCgic2hvdyIpO3RoaXMuJGVsZW1lbnQudHJpZ2dlcihlKSx0aGlzLmlzU2hvd258fGUuaXNEZWZh
dWx0UHJldmVudGVkKCl8fCh0aGlzLmlzU2hvd249ITAsdGhpcy5lc2NhcGUoKSx0aGlzLmJhY2tk
cm9wKGZ1bmN0aW9uKCl7dmFyIHRyYW5zaXRpb249JC5zdXBwb3J0LnRyYW5zaXRpb24mJnRoYXQu
JGVsZW1lbnQuaGFzQ2xhc3MoImZhZGUiKTt0aGF0LiRlbGVtZW50LnBhcmVudCgpLmxlbmd0aHx8
dGhhdC4kZWxlbWVudC5hcHBlbmRUbyhkb2N1bWVudC5ib2R5KSx0aGF0LiRlbGVtZW50LnNob3co
KSx0cmFuc2l0aW9uJiZ0aGF0LiRlbGVtZW50WzBdLm9mZnNldFdpZHRoLHRoYXQuJGVsZW1lbnQu
YWRkQ2xhc3MoImluIikuYXR0cigiYXJpYS1oaWRkZW4iLCExKSx0aGF0LmVuZm9yY2VGb2N1cygp
LHRyYW5zaXRpb24/dGhhdC4kZWxlbWVudC5vbmUoJC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLGZ1
bmN0aW9uKCl7dGhhdC4kZWxlbWVudC5mb2N1cygpLnRyaWdnZXIoInNob3duIil9KTp0aGF0LiRl
bGVtZW50LmZvY3VzKCkudHJpZ2dlcigic2hvd24iKX0pKX0saGlkZTpmdW5jdGlvbihlKXtlJiZl
LnByZXZlbnREZWZhdWx0KCksZT0kLkV2ZW50KCJoaWRlIiksdGhpcy4kZWxlbWVudC50cmlnZ2Vy
KGUpLHRoaXMuaXNTaG93biYmIWUuaXNEZWZhdWx0UHJldmVudGVkKCkmJih0aGlzLmlzU2hvd249
ITEsdGhpcy5lc2NhcGUoKSwkKGRvY3VtZW50KS5vZmYoImZvY3VzaW4ubW9kYWwiKSx0aGlzLiRl
bGVtZW50LnJlbW92ZUNsYXNzKCJpbiIpLmF0dHIoImFyaWEtaGlkZGVuIiwhMCksJC5zdXBwb3J0
LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImZhZGUiKT90aGlzLmhpZGVXaXRo
VHJhbnNpdGlvbigpOnRoaXMuaGlkZU1vZGFsKCkpfSxlbmZvcmNlRm9jdXM6ZnVuY3Rpb24oKXt2
YXIgdGhhdD10aGlzOyQoZG9jdW1lbnQpLm9uKCJmb2N1c2luLm1vZGFsIixmdW5jdGlvbihlKXt0
aGF0LiRlbGVtZW50WzBdPT09ZS50YXJnZXR8fHRoYXQuJGVsZW1lbnQuaGFzKGUudGFyZ2V0KS5s
ZW5ndGh8fHRoYXQuJGVsZW1lbnQuZm9jdXMoKX0pfSxlc2NhcGU6ZnVuY3Rpb24oKXt2YXIgdGhh
dD10aGlzO3RoaXMuaXNTaG93biYmdGhpcy5vcHRpb25zLmtleWJvYXJkP3RoaXMuJGVsZW1lbnQu
b24oImtleXVwLmRpc21pc3MubW9kYWwiLGZ1bmN0aW9uKGUpezI3PT1lLndoaWNoJiZ0aGF0Lmhp
ZGUoKX0pOnRoaXMuaXNTaG93bnx8dGhpcy4kZWxlbWVudC5vZmYoImtleXVwLmRpc21pc3MubW9k
YWwiKX0saGlkZVdpdGhUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHRoYXQ9dGhpcyx0aW1lb3V0
PXNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGF0LiRlbGVtZW50Lm9mZigkLnN1cHBvcnQudHJhbnNp
dGlvbi5lbmQpLHRoYXQuaGlkZU1vZGFsKCl9LDUwMCk7dGhpcy4kZWxlbWVudC5vbmUoJC5zdXBw
b3J0LnRyYW5zaXRpb24uZW5kLGZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHRpbWVvdXQpLHRoYXQu
aGlkZU1vZGFsKCl9KX0saGlkZU1vZGFsOmZ1bmN0aW9uKCl7dGhpcy4kZWxlbWVudC5oaWRlKCku
dHJpZ2dlcigiaGlkZGVuIiksdGhpcy5iYWNrZHJvcCgpfSxyZW1vdmVCYWNrZHJvcDpmdW5jdGlv
bigpe3RoaXMuJGJhY2tkcm9wLnJlbW92ZSgpLHRoaXMuJGJhY2tkcm9wPW51bGx9LGJhY2tkcm9w
OmZ1bmN0aW9uKGNhbGxiYWNrKXt2YXIgYW5pbWF0ZT10aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJm
YWRlIik/ImZhZGUiOiIiO2lmKHRoaXMuaXNTaG93biYmdGhpcy5vcHRpb25zLmJhY2tkcm9wKXt2
YXIgZG9BbmltYXRlPSQuc3VwcG9ydC50cmFuc2l0aW9uJiZhbmltYXRlO3RoaXMuJGJhY2tkcm9w
PSQoJzxkaXYgY2xhc3M9Im1vZGFsLWJhY2tkcm9wICcrYW5pbWF0ZSsnIiAvPicpLmFwcGVuZFRv
KGRvY3VtZW50LmJvZHkpLHRoaXMuJGJhY2tkcm9wLmNsaWNrKCJzdGF0aWMiPT10aGlzLm9wdGlv
bnMuYmFja2Ryb3A/JC5wcm94eSh0aGlzLiRlbGVtZW50WzBdLmZvY3VzLHRoaXMuJGVsZW1lbnRb
MF0pOiQucHJveHkodGhpcy5oaWRlLHRoaXMpKSxkb0FuaW1hdGUmJnRoaXMuJGJhY2tkcm9wWzBd
Lm9mZnNldFdpZHRoLHRoaXMuJGJhY2tkcm9wLmFkZENsYXNzKCJpbiIpLGRvQW5pbWF0ZT90aGlz
LiRiYWNrZHJvcC5vbmUoJC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLGNhbGxiYWNrKTpjYWxsYmFj
aygpfWVsc2UhdGhpcy5pc1Nob3duJiZ0aGlzLiRiYWNrZHJvcD8odGhpcy4kYmFja2Ryb3AucmVt
b3ZlQ2xhc3MoImluIiksJC5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xh
c3MoImZhZGUiKT90aGlzLiRiYWNrZHJvcC5vbmUoJC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLCQu
cHJveHkodGhpcy5yZW1vdmVCYWNrZHJvcCx0aGlzKSk6dGhpcy5yZW1vdmVCYWNrZHJvcCgpKTpj
YWxsYmFjayYmY2FsbGJhY2soKX19O3ZhciBvbGQ9JC5mbi5tb2RhbDskLmZuLm1vZGFsPWZ1bmN0
aW9uKG9wdGlvbil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciAkdGhpcz0kKHRoaXMp
LGRhdGE9JHRoaXMuZGF0YSgibW9kYWwiKSxvcHRpb25zPSQuZXh0ZW5kKHt9LCQuZm4ubW9kYWwu
ZGVmYXVsdHMsJHRoaXMuZGF0YSgpLCJvYmplY3QiPT10eXBlb2Ygb3B0aW9uJiZvcHRpb24pO2Rh
dGF8fCR0aGlzLmRhdGEoIm1vZGFsIixkYXRhPW5ldyBNb2RhbCh0aGlzLG9wdGlvbnMpKSwic3Ry
aW5nIj09dHlwZW9mIG9wdGlvbj9kYXRhW29wdGlvbl0oKTpvcHRpb25zLnNob3cmJmRhdGEuc2hv
dygpfSl9LCQuZm4ubW9kYWwuZGVmYXVsdHM9e2JhY2tkcm9wOiEwLGtleWJvYXJkOiEwLHNob3c6
ITB9LCQuZm4ubW9kYWwuQ29uc3RydWN0b3I9TW9kYWwsJC5mbi5tb2RhbC5ub0NvbmZsaWN0PWZ1
bmN0aW9uKCl7cmV0dXJuICQuZm4ubW9kYWw9b2xkLHRoaXN9LCQoZG9jdW1lbnQpLm9uKCJjbGlj
ay5tb2RhbC5kYXRhLWFwaSIsJ1tkYXRhLXRvZ2dsZT0ibW9kYWwiXScsZnVuY3Rpb24oZSl7dmFy
ICR0aGlzPSQodGhpcyksaHJlZj0kdGhpcy5hdHRyKCJocmVmIiksJHRhcmdldD0kKCR0aGlzLmF0
dHIoImRhdGEtdGFyZ2V0Iil8fGhyZWYmJmhyZWYucmVwbGFjZSgvLiooPz0jW15cc10rJCkvLCIi
KSksb3B0aW9uPSR0YXJnZXQuZGF0YSgibW9kYWwiKT8idG9nZ2xlIjokLmV4dGVuZCh7cmVtb3Rl
OiEvIy8udGVzdChocmVmKSYmaHJlZn0sJHRhcmdldC5kYXRhKCksJHRoaXMuZGF0YSgpKTtlLnBy
ZXZlbnREZWZhdWx0KCksJHRhcmdldC5tb2RhbChvcHRpb24pLm9uZSgiaGlkZSIsZnVuY3Rpb24o
KXskdGhpcy5mb2N1cygpfSl9KX0od2luZG93LmpRdWVyeSksIWZ1bmN0aW9uKCQpeyJ1c2Ugc3Ry
aWN0Ijt2YXIgVG9vbHRpcD1mdW5jdGlvbihlbGVtZW50LG9wdGlvbnMpe3RoaXMuaW5pdCgidG9v
bHRpcCIsZWxlbWVudCxvcHRpb25zKX07VG9vbHRpcC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlRv
b2x0aXAsaW5pdDpmdW5jdGlvbih0eXBlLGVsZW1lbnQsb3B0aW9ucyl7dmFyIGV2ZW50SW4sZXZl
bnRPdXQ7dGhpcy50eXBlPXR5cGUsdGhpcy4kZWxlbWVudD0kKGVsZW1lbnQpLHRoaXMub3B0aW9u
cz10aGlzLmdldE9wdGlvbnMob3B0aW9ucyksdGhpcy5lbmFibGVkPSEwLCJjbGljayI9PXRoaXMu
b3B0aW9ucy50cmlnZ2VyP3RoaXMuJGVsZW1lbnQub24oImNsaWNrLiIrdGhpcy50eXBlLHRoaXMu
b3B0aW9ucy5zZWxlY3RvciwkLnByb3h5KHRoaXMudG9nZ2xlLHRoaXMpKToibWFudWFsIiE9dGhp
cy5vcHRpb25zLnRyaWdnZXImJihldmVudEluPSJob3ZlciI9PXRoaXMub3B0aW9ucy50cmlnZ2Vy
PyJtb3VzZWVudGVyIjoiZm9jdXMiLGV2ZW50T3V0PSJob3ZlciI9PXRoaXMub3B0aW9ucy50cmln
Z2VyPyJtb3VzZWxlYXZlIjoiYmx1ciIsdGhpcy4kZWxlbWVudC5vbihldmVudEluKyIuIit0aGlz
LnR5cGUsdGhpcy5vcHRpb25zLnNlbGVjdG9yLCQucHJveHkodGhpcy5lbnRlcix0aGlzKSksdGhp
cy4kZWxlbWVudC5vbihldmVudE91dCsiLiIrdGhpcy50eXBlLHRoaXMub3B0aW9ucy5zZWxlY3Rv
ciwkLnByb3h5KHRoaXMubGVhdmUsdGhpcykpKSx0aGlzLm9wdGlvbnMuc2VsZWN0b3I/dGhpcy5f
b3B0aW9ucz0kLmV4dGVuZCh7fSx0aGlzLm9wdGlvbnMse3RyaWdnZXI6Im1hbnVhbCIsc2VsZWN0
b3I6IiJ9KTp0aGlzLmZpeFRpdGxlKCl9LGdldE9wdGlvbnM6ZnVuY3Rpb24ob3B0aW9ucyl7cmV0
dXJuIG9wdGlvbnM9JC5leHRlbmQoe30sJC5mblt0aGlzLnR5cGVdLmRlZmF1bHRzLG9wdGlvbnMs
dGhpcy4kZWxlbWVudC5kYXRhKCkpLG9wdGlvbnMuZGVsYXkmJiJudW1iZXIiPT10eXBlb2Ygb3B0
aW9ucy5kZWxheSYmKG9wdGlvbnMuZGVsYXk9e3Nob3c6b3B0aW9ucy5kZWxheSxoaWRlOm9wdGlv
bnMuZGVsYXl9KSxvcHRpb25zfSxlbnRlcjpmdW5jdGlvbihlKXt2YXIgc2VsZj0kKGUuY3VycmVu
dFRhcmdldClbdGhpcy50eXBlXSh0aGlzLl9vcHRpb25zKS5kYXRhKHRoaXMudHlwZSk7cmV0dXJu
IHNlbGYub3B0aW9ucy5kZWxheSYmc2VsZi5vcHRpb25zLmRlbGF5LnNob3c/KGNsZWFyVGltZW91
dCh0aGlzLnRpbWVvdXQpLHNlbGYuaG92ZXJTdGF0ZT0iaW4iLHRoaXMudGltZW91dD1zZXRUaW1l
b3V0KGZ1bmN0aW9uKCl7ImluIj09c2VsZi5ob3ZlclN0YXRlJiZzZWxmLnNob3coKX0sc2VsZi5v
cHRpb25zLmRlbGF5LnNob3cpLHZvaWQgMCk6c2VsZi5zaG93KCl9LGxlYXZlOmZ1bmN0aW9uKGUp
e3ZhciBzZWxmPSQoZS5jdXJyZW50VGFyZ2V0KVt0aGlzLnR5cGVdKHRoaXMuX29wdGlvbnMpLmRh
dGEodGhpcy50eXBlKTtyZXR1cm4gdGhpcy50aW1lb3V0JiZjbGVhclRpbWVvdXQodGhpcy50aW1l
b3V0KSxzZWxmLm9wdGlvbnMuZGVsYXkmJnNlbGYub3B0aW9ucy5kZWxheS5oaWRlPyhzZWxmLmhv
dmVyU3RhdGU9Im91dCIsdGhpcy50aW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXsib3V0Ij09
c2VsZi5ob3ZlclN0YXRlJiZzZWxmLmhpZGUoKX0sc2VsZi5vcHRpb25zLmRlbGF5LmhpZGUpLHZv
aWQgMCk6c2VsZi5oaWRlKCl9LHNob3c6ZnVuY3Rpb24oKXt2YXIgJHRpcCxpbnNpZGUscG9zLGFj
dHVhbFdpZHRoLGFjdHVhbEhlaWdodCxwbGFjZW1lbnQsdHA7aWYodGhpcy5oYXNDb250ZW50KCkm
JnRoaXMuZW5hYmxlZCl7c3dpdGNoKCR0aXA9dGhpcy50aXAoKSx0aGlzLnNldENvbnRlbnQoKSx0
aGlzLm9wdGlvbnMuYW5pbWF0aW9uJiYkdGlwLmFkZENsYXNzKCJmYWRlIikscGxhY2VtZW50PSJm
dW5jdGlvbiI9PXR5cGVvZiB0aGlzLm9wdGlvbnMucGxhY2VtZW50P3RoaXMub3B0aW9ucy5wbGFj
ZW1lbnQuY2FsbCh0aGlzLCR0aXBbMF0sdGhpcy4kZWxlbWVudFswXSk6dGhpcy5vcHRpb25zLnBs
YWNlbWVudCxpbnNpZGU9L2luLy50ZXN0KHBsYWNlbWVudCksJHRpcC5kZXRhY2goKS5jc3Moe3Rv
cDowLGxlZnQ6MCxkaXNwbGF5OiJibG9jayJ9KS5pbnNlcnRBZnRlcih0aGlzLiRlbGVtZW50KSxw
b3M9dGhpcy5nZXRQb3NpdGlvbihpbnNpZGUpLGFjdHVhbFdpZHRoPSR0aXBbMF0ub2Zmc2V0V2lk
dGgsYWN0dWFsSGVpZ2h0PSR0aXBbMF0ub2Zmc2V0SGVpZ2h0LGluc2lkZT9wbGFjZW1lbnQuc3Bs
aXQoIiAiKVsxXTpwbGFjZW1lbnQpe2Nhc2UiYm90dG9tIjp0cD17dG9wOnBvcy50b3ArcG9zLmhl
aWdodCxsZWZ0OnBvcy5sZWZ0K3Bvcy53aWR0aC8yLWFjdHVhbFdpZHRoLzJ9O2JyZWFrO2Nhc2Ui
dG9wIjp0cD17dG9wOnBvcy50b3AtYWN0dWFsSGVpZ2h0LGxlZnQ6cG9zLmxlZnQrcG9zLndpZHRo
LzItYWN0dWFsV2lkdGgvMn07YnJlYWs7Y2FzZSJsZWZ0Ijp0cD17dG9wOnBvcy50b3ArcG9zLmhl
aWdodC8yLWFjdHVhbEhlaWdodC8yLGxlZnQ6cG9zLmxlZnQtYWN0dWFsV2lkdGh9O2JyZWFrO2Nh
c2UicmlnaHQiOnRwPXt0b3A6cG9zLnRvcCtwb3MuaGVpZ2h0LzItYWN0dWFsSGVpZ2h0LzIsbGVm
dDpwb3MubGVmdCtwb3Mud2lkdGh9fSR0aXAub2Zmc2V0KHRwKS5hZGRDbGFzcyhwbGFjZW1lbnQp
LmFkZENsYXNzKCJpbiIpfX0sc2V0Q29udGVudDpmdW5jdGlvbigpe3ZhciAkdGlwPXRoaXMudGlw
KCksdGl0bGU9dGhpcy5nZXRUaXRsZSgpOyR0aXAuZmluZCgiLnRvb2x0aXAtaW5uZXIiKVt0aGlz
Lm9wdGlvbnMuaHRtbD8iaHRtbCI6InRleHQiXSh0aXRsZSksJHRpcC5yZW1vdmVDbGFzcygiZmFk
ZSBpbiB0b3AgYm90dG9tIGxlZnQgcmlnaHQiKX0saGlkZTpmdW5jdGlvbigpe2Z1bmN0aW9uIHJl
bW92ZVdpdGhBbmltYXRpb24oKXt2YXIgdGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7JHRp
cC5vZmYoJC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kKS5kZXRhY2goKX0sNTAwKTskdGlwLm9uZSgk
LnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGltZW91dCks
JHRpcC5kZXRhY2goKX0pfXZhciAkdGlwPXRoaXMudGlwKCk7cmV0dXJuICR0aXAucmVtb3ZlQ2xh
c3MoImluIiksJC5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJHRpcC5oYXNDbGFzcygiZmFkZSIp
P3JlbW92ZVdpdGhBbmltYXRpb24oKTokdGlwLmRldGFjaCgpLHRoaXN9LGZpeFRpdGxlOmZ1bmN0
aW9uKCl7dmFyICRlPXRoaXMuJGVsZW1lbnQ7KCRlLmF0dHIoInRpdGxlIil8fCJzdHJpbmciIT10
eXBlb2YgJGUuYXR0cigiZGF0YS1vcmlnaW5hbC10aXRsZSIpKSYmJGUuYXR0cigiZGF0YS1vcmln
aW5hbC10aXRsZSIsJGUuYXR0cigidGl0bGUiKXx8IiIpLnJlbW92ZUF0dHIoInRpdGxlIil9LGhh
c0NvbnRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRUaXRsZSgpfSxnZXRQb3NpdGlvbjpm
dW5jdGlvbihpbnNpZGUpe3JldHVybiAkLmV4dGVuZCh7fSxpbnNpZGU/e3RvcDowLGxlZnQ6MH06
dGhpcy4kZWxlbWVudC5vZmZzZXQoKSx7d2lkdGg6dGhpcy4kZWxlbWVudFswXS5vZmZzZXRXaWR0
aCxoZWlnaHQ6dGhpcy4kZWxlbWVudFswXS5vZmZzZXRIZWlnaHR9KX0sZ2V0VGl0bGU6ZnVuY3Rp
b24oKXt2YXIgdGl0bGUsJGU9dGhpcy4kZWxlbWVudCxvPXRoaXMub3B0aW9ucztyZXR1cm4gdGl0
bGU9JGUuYXR0cigiZGF0YS1vcmlnaW5hbC10aXRsZSIpfHwoImZ1bmN0aW9uIj09dHlwZW9mIG8u
dGl0bGU/by50aXRsZS5jYWxsKCRlWzBdKTpvLnRpdGxlKX0sdGlwOmZ1bmN0aW9uKCl7cmV0dXJu
IHRoaXMuJHRpcD10aGlzLiR0aXB8fCQodGhpcy5vcHRpb25zLnRlbXBsYXRlKX0sdmFsaWRhdGU6
ZnVuY3Rpb24oKXt0aGlzLiRlbGVtZW50WzBdLnBhcmVudE5vZGV8fCh0aGlzLmhpZGUoKSx0aGlz
LiRlbGVtZW50PW51bGwsdGhpcy5vcHRpb25zPW51bGwpfSxlbmFibGU6ZnVuY3Rpb24oKXt0aGlz
LmVuYWJsZWQ9ITB9LGRpc2FibGU6ZnVuY3Rpb24oKXt0aGlzLmVuYWJsZWQ9ITF9LHRvZ2dsZUVu
YWJsZWQ6ZnVuY3Rpb24oKXt0aGlzLmVuYWJsZWQ9IXRoaXMuZW5hYmxlZH0sdG9nZ2xlOmZ1bmN0
aW9uKGUpe3ZhciBzZWxmPSQoZS5jdXJyZW50VGFyZ2V0KVt0aGlzLnR5cGVdKHRoaXMuX29wdGlv
bnMpLmRhdGEodGhpcy50eXBlKTtzZWxmW3NlbGYudGlwKCkuaGFzQ2xhc3MoImluIik/ImhpZGUi
OiJzaG93Il0oKX0sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuaGlkZSgpLiRlbGVtZW50Lm9mZigi
LiIrdGhpcy50eXBlKS5yZW1vdmVEYXRhKHRoaXMudHlwZSl9fTt2YXIgb2xkPSQuZm4udG9vbHRp
cDskLmZuLnRvb2x0aXA9ZnVuY3Rpb24ob3B0aW9uKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9u
KCl7dmFyICR0aGlzPSQodGhpcyksZGF0YT0kdGhpcy5kYXRhKCJ0b29sdGlwIiksb3B0aW9ucz0i
b2JqZWN0Ij09dHlwZW9mIG9wdGlvbiYmb3B0aW9uO2RhdGF8fCR0aGlzLmRhdGEoInRvb2x0aXAi
LGRhdGE9bmV3IFRvb2x0aXAodGhpcyxvcHRpb25zKSksInN0cmluZyI9PXR5cGVvZiBvcHRpb24m
JmRhdGFbb3B0aW9uXSgpfSl9LCQuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvcj1Ub29sdGlwLCQuZm4u
dG9vbHRpcC5kZWZhdWx0cz17YW5pbWF0aW9uOiEwLHBsYWNlbWVudDoidG9wIixzZWxlY3Rvcjoh
MSx0ZW1wbGF0ZTonPGRpdiBjbGFzcz0idG9vbHRpcCI+PGRpdiBjbGFzcz0idG9vbHRpcC1hcnJv
dyI+PC9kaXY+PGRpdiBjbGFzcz0idG9vbHRpcC1pbm5lciI+PC9kaXY+PC9kaXY+Jyx0cmlnZ2Vy
OiJob3ZlciIsdGl0bGU6IiIsZGVsYXk6MCxodG1sOiExfSwkLmZuLnRvb2x0aXAubm9Db25mbGlj
dD1mdW5jdGlvbigpe3JldHVybiAkLmZuLnRvb2x0aXA9b2xkLHRoaXN9fSh3aW5kb3cualF1ZXJ5
KSwhZnVuY3Rpb24oJCl7InVzZSBzdHJpY3QiO3ZhciBQb3BvdmVyPWZ1bmN0aW9uKGVsZW1lbnQs
b3B0aW9ucyl7dGhpcy5pbml0KCJwb3BvdmVyIixlbGVtZW50LG9wdGlvbnMpfTtQb3BvdmVyLnBy
b3RvdHlwZT0kLmV4dGVuZCh7fSwkLmZuLnRvb2x0aXAuQ29uc3RydWN0b3IucHJvdG90eXBlLHtj
b25zdHJ1Y3RvcjpQb3BvdmVyLHNldENvbnRlbnQ6ZnVuY3Rpb24oKXt2YXIgJHRpcD10aGlzLnRp
cCgpLHRpdGxlPXRoaXMuZ2V0VGl0bGUoKSxjb250ZW50PXRoaXMuZ2V0Q29udGVudCgpOyR0aXAu
ZmluZCgiLnBvcG92ZXItdGl0bGUiKVt0aGlzLm9wdGlvbnMuaHRtbD8iaHRtbCI6InRleHQiXSh0
aXRsZSksJHRpcC5maW5kKCIucG9wb3Zlci1jb250ZW50IilbdGhpcy5vcHRpb25zLmh0bWw/Imh0
bWwiOiJ0ZXh0Il0oY29udGVudCksJHRpcC5yZW1vdmVDbGFzcygiZmFkZSB0b3AgYm90dG9tIGxl
ZnQgcmlnaHQgaW4iKX0saGFzQ29udGVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFRpdGxl
KCl8fHRoaXMuZ2V0Q29udGVudCgpfSxnZXRDb250ZW50OmZ1bmN0aW9uKCl7dmFyIGNvbnRlbnQs
JGU9dGhpcy4kZWxlbWVudCxvPXRoaXMub3B0aW9ucztyZXR1cm4gY29udGVudD0kZS5hdHRyKCJk
YXRhLWNvbnRlbnQiKXx8KCJmdW5jdGlvbiI9PXR5cGVvZiBvLmNvbnRlbnQ/by5jb250ZW50LmNh
bGwoJGVbMF0pOm8uY29udGVudCl9LHRpcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiR0aXB8fCh0
aGlzLiR0aXA9JCh0aGlzLm9wdGlvbnMudGVtcGxhdGUpKSx0aGlzLiR0aXB9LGRlc3Ryb3k6ZnVu
Y3Rpb24oKXt0aGlzLmhpZGUoKS4kZWxlbWVudC5vZmYoIi4iK3RoaXMudHlwZSkucmVtb3ZlRGF0
YSh0aGlzLnR5cGUpfX0pO3ZhciBvbGQ9JC5mbi5wb3BvdmVyOyQuZm4ucG9wb3Zlcj1mdW5jdGlv
bihvcHRpb24pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgJHRoaXM9JCh0aGlzKSxk
YXRhPSR0aGlzLmRhdGEoInBvcG92ZXIiKSxvcHRpb25zPSJvYmplY3QiPT10eXBlb2Ygb3B0aW9u
JiZvcHRpb247ZGF0YXx8JHRoaXMuZGF0YSgicG9wb3ZlciIsZGF0YT1uZXcgUG9wb3Zlcih0aGlz
LG9wdGlvbnMpKSwic3RyaW5nIj09dHlwZW9mIG9wdGlvbiYmZGF0YVtvcHRpb25dKCl9KX0sJC5m
bi5wb3BvdmVyLkNvbnN0cnVjdG9yPVBvcG92ZXIsJC5mbi5wb3BvdmVyLmRlZmF1bHRzPSQuZXh0
ZW5kKHt9LCQuZm4udG9vbHRpcC5kZWZhdWx0cyx7cGxhY2VtZW50OiJyaWdodCIsdHJpZ2dlcjoi
Y2xpY2siLGNvbnRlbnQ6IiIsdGVtcGxhdGU6JzxkaXYgY2xhc3M9InBvcG92ZXIiPjxkaXYgY2xh
c3M9ImFycm93Ij48L2Rpdj48ZGl2IGNsYXNzPSJwb3BvdmVyLWlubmVyIj48aDMgY2xhc3M9InBv
cG92ZXItdGl0bGUiPjwvaDM+PGRpdiBjbGFzcz0icG9wb3Zlci1jb250ZW50Ij48L2Rpdj48L2Rp
dj48L2Rpdj4nfSksJC5mbi5wb3BvdmVyLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gJC5m
bi5wb3BvdmVyPW9sZCx0aGlzfX0od2luZG93LmpRdWVyeSksIWZ1bmN0aW9uKCQpeyJ1c2Ugc3Ry
aWN0IjtmdW5jdGlvbiBTY3JvbGxTcHkoZWxlbWVudCxvcHRpb25zKXt2YXIgaHJlZixwcm9jZXNz
PSQucHJveHkodGhpcy5wcm9jZXNzLHRoaXMpLCRlbGVtZW50PSQoZWxlbWVudCkuaXMoImJvZHki
KT8kKHdpbmRvdyk6JChlbGVtZW50KTt0aGlzLm9wdGlvbnM9JC5leHRlbmQoe30sJC5mbi5zY3Jv
bGxzcHkuZGVmYXVsdHMsb3B0aW9ucyksdGhpcy4kc2Nyb2xsRWxlbWVudD0kZWxlbWVudC5vbigi
c2Nyb2xsLnNjcm9sbC1zcHkuZGF0YS1hcGkiLHByb2Nlc3MpLHRoaXMuc2VsZWN0b3I9KHRoaXMu
b3B0aW9ucy50YXJnZXR8fChocmVmPSQoZWxlbWVudCkuYXR0cigiaHJlZiIpKSYmaHJlZi5yZXBs
YWNlKC8uKig/PSNbXlxzXSskKS8sIiIpfHwiIikrIiAubmF2IGxpID4gYSIsdGhpcy4kYm9keT0k
KCJib2R5IiksdGhpcy5yZWZyZXNoKCksdGhpcy5wcm9jZXNzKCl9U2Nyb2xsU3B5LnByb3RvdHlw
ZT17Y29uc3RydWN0b3I6U2Nyb2xsU3B5LHJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgJHRhcmdldHMs
c2VsZj10aGlzO3RoaXMub2Zmc2V0cz0kKFtdKSx0aGlzLnRhcmdldHM9JChbXSksJHRhcmdldHM9
dGhpcy4kYm9keS5maW5kKHRoaXMuc2VsZWN0b3IpLm1hcChmdW5jdGlvbigpe3ZhciAkZWw9JCh0
aGlzKSxocmVmPSRlbC5kYXRhKCJ0YXJnZXQiKXx8JGVsLmF0dHIoImhyZWYiKSwkaHJlZj0vXiNc
dy8udGVzdChocmVmKSYmJChocmVmKTtyZXR1cm4gJGhyZWYmJiRocmVmLmxlbmd0aCYmW1skaHJl
Zi5wb3NpdGlvbigpLnRvcCtzZWxmLiRzY3JvbGxFbGVtZW50LnNjcm9sbFRvcCgpLGhyZWZdXXx8
bnVsbH0pLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYVswXS1iWzBdfSkuZWFjaChmdW5jdGlv
bigpe3NlbGYub2Zmc2V0cy5wdXNoKHRoaXNbMF0pLHNlbGYudGFyZ2V0cy5wdXNoKHRoaXNbMV0p
fSl9LHByb2Nlc3M6ZnVuY3Rpb24oKXt2YXIgaSxzY3JvbGxUb3A9dGhpcy4kc2Nyb2xsRWxlbWVu
dC5zY3JvbGxUb3AoKSt0aGlzLm9wdGlvbnMub2Zmc2V0LHNjcm9sbEhlaWdodD10aGlzLiRzY3Jv
bGxFbGVtZW50WzBdLnNjcm9sbEhlaWdodHx8dGhpcy4kYm9keVswXS5zY3JvbGxIZWlnaHQsbWF4
U2Nyb2xsPXNjcm9sbEhlaWdodC10aGlzLiRzY3JvbGxFbGVtZW50LmhlaWdodCgpLG9mZnNldHM9
dGhpcy5vZmZzZXRzLHRhcmdldHM9dGhpcy50YXJnZXRzLGFjdGl2ZVRhcmdldD10aGlzLmFjdGl2
ZVRhcmdldDtpZihzY3JvbGxUb3A+PW1heFNjcm9sbClyZXR1cm4gYWN0aXZlVGFyZ2V0IT0oaT10
YXJnZXRzLmxhc3QoKVswXSkmJnRoaXMuYWN0aXZhdGUoaSk7Zm9yKGk9b2Zmc2V0cy5sZW5ndGg7
aS0tOylhY3RpdmVUYXJnZXQhPXRhcmdldHNbaV0mJnNjcm9sbFRvcD49b2Zmc2V0c1tpXSYmKCFv
ZmZzZXRzW2krMV18fG9mZnNldHNbaSsxXT49c2Nyb2xsVG9wKSYmdGhpcy5hY3RpdmF0ZSh0YXJn
ZXRzW2ldKX0sYWN0aXZhdGU6ZnVuY3Rpb24odGFyZ2V0KXt2YXIgYWN0aXZlLHNlbGVjdG9yO3Ro
aXMuYWN0aXZlVGFyZ2V0PXRhcmdldCwkKHRoaXMuc2VsZWN0b3IpLnBhcmVudCgiLmFjdGl2ZSIp
LnJlbW92ZUNsYXNzKCJhY3RpdmUiKSxzZWxlY3Rvcj10aGlzLnNlbGVjdG9yKydbZGF0YS10YXJn
ZXQ9IicrdGFyZ2V0KyciXSwnK3RoaXMuc2VsZWN0b3IrJ1tocmVmPSInK3RhcmdldCsnIl0nLGFj
dGl2ZT0kKHNlbGVjdG9yKS5wYXJlbnQoImxpIikuYWRkQ2xhc3MoImFjdGl2ZSIpLGFjdGl2ZS5w
YXJlbnQoIi5kcm9wZG93bi1tZW51IikubGVuZ3RoJiYoYWN0aXZlPWFjdGl2ZS5jbG9zZXN0KCJs
aS5kcm9wZG93biIpLmFkZENsYXNzKCJhY3RpdmUiKSksYWN0aXZlLnRyaWdnZXIoImFjdGl2YXRl
Iil9fTt2YXIgb2xkPSQuZm4uc2Nyb2xsc3B5OyQuZm4uc2Nyb2xsc3B5PWZ1bmN0aW9uKG9wdGlv
bil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciAkdGhpcz0kKHRoaXMpLGRhdGE9JHRo
aXMuZGF0YSgic2Nyb2xsc3B5Iiksb3B0aW9ucz0ib2JqZWN0Ij09dHlwZW9mIG9wdGlvbiYmb3B0
aW9uO2RhdGF8fCR0aGlzLmRhdGEoInNjcm9sbHNweSIsZGF0YT1uZXcgU2Nyb2xsU3B5KHRoaXMs
b3B0aW9ucykpLCJzdHJpbmciPT10eXBlb2Ygb3B0aW9uJiZkYXRhW29wdGlvbl0oKX0pfSwkLmZu
LnNjcm9sbHNweS5Db25zdHJ1Y3Rvcj1TY3JvbGxTcHksJC5mbi5zY3JvbGxzcHkuZGVmYXVsdHM9
e29mZnNldDoxMH0sJC5mbi5zY3JvbGxzcHkubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiAk
LmZuLnNjcm9sbHNweT1vbGQsdGhpc30sJCh3aW5kb3cpLm9uKCJsb2FkIixmdW5jdGlvbigpeyQo
J1tkYXRhLXNweT0ic2Nyb2xsIl0nKS5lYWNoKGZ1bmN0aW9uKCl7dmFyICRzcHk9JCh0aGlzKTsk
c3B5LnNjcm9sbHNweSgkc3B5LmRhdGEoKSl9KX0pfSh3aW5kb3cualF1ZXJ5KSwhZnVuY3Rpb24o
JCl7InVzZSBzdHJpY3QiO3ZhciBUYWI9ZnVuY3Rpb24oZWxlbWVudCl7dGhpcy5lbGVtZW50PSQo
ZWxlbWVudCl9O1RhYi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlRhYixzaG93OmZ1bmN0aW9uKCl7
dmFyIHByZXZpb3VzLCR0YXJnZXQsZSwkdGhpcz10aGlzLmVsZW1lbnQsJHVsPSR0aGlzLmNsb3Nl
c3QoInVsOm5vdCguZHJvcGRvd24tbWVudSkiKSxzZWxlY3Rvcj0kdGhpcy5hdHRyKCJkYXRhLXRh
cmdldCIpO3NlbGVjdG9yfHwoc2VsZWN0b3I9JHRoaXMuYXR0cigiaHJlZiIpLHNlbGVjdG9yPXNl
bGVjdG9yJiZzZWxlY3Rvci5yZXBsYWNlKC8uKig/PSNbXlxzXSokKS8sIiIpKSwkdGhpcy5wYXJl
bnQoImxpIikuaGFzQ2xhc3MoImFjdGl2ZSIpfHwocHJldmlvdXM9JHVsLmZpbmQoIi5hY3RpdmU6
bGFzdCBhIilbMF0sZT0kLkV2ZW50KCJzaG93Iix7cmVsYXRlZFRhcmdldDpwcmV2aW91c30pLCR0
aGlzLnRyaWdnZXIoZSksZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8KCR0YXJnZXQ9JChzZWxlY3Rv
ciksdGhpcy5hY3RpdmF0ZSgkdGhpcy5wYXJlbnQoImxpIiksJHVsKSx0aGlzLmFjdGl2YXRlKCR0
YXJnZXQsJHRhcmdldC5wYXJlbnQoKSxmdW5jdGlvbigpeyR0aGlzLnRyaWdnZXIoe3R5cGU6InNo
b3duIixyZWxhdGVkVGFyZ2V0OnByZXZpb3VzfSl9KSkpfSxhY3RpdmF0ZTpmdW5jdGlvbihlbGVt
ZW50LGNvbnRhaW5lcixjYWxsYmFjayl7ZnVuY3Rpb24gbmV4dCgpeyRhY3RpdmUucmVtb3ZlQ2xh
c3MoImFjdGl2ZSIpLmZpbmQoIj4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlIikucmVtb3ZlQ2xh
c3MoImFjdGl2ZSIpLGVsZW1lbnQuYWRkQ2xhc3MoImFjdGl2ZSIpLHRyYW5zaXRpb24/KGVsZW1l
bnRbMF0ub2Zmc2V0V2lkdGgsZWxlbWVudC5hZGRDbGFzcygiaW4iKSk6ZWxlbWVudC5yZW1vdmVD
bGFzcygiZmFkZSIpLGVsZW1lbnQucGFyZW50KCIuZHJvcGRvd24tbWVudSIpJiZlbGVtZW50LmNs
b3Nlc3QoImxpLmRyb3Bkb3duIikuYWRkQ2xhc3MoImFjdGl2ZSIpLGNhbGxiYWNrJiZjYWxsYmFj
aygpfXZhciAkYWN0aXZlPWNvbnRhaW5lci5maW5kKCI+IC5hY3RpdmUiKSx0cmFuc2l0aW9uPWNh
bGxiYWNrJiYkLnN1cHBvcnQudHJhbnNpdGlvbiYmJGFjdGl2ZS5oYXNDbGFzcygiZmFkZSIpO3Ry
YW5zaXRpb24/JGFjdGl2ZS5vbmUoJC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLG5leHQpOm5leHQo
KSwkYWN0aXZlLnJlbW92ZUNsYXNzKCJpbiIpfX07dmFyIG9sZD0kLmZuLnRhYjskLmZuLnRhYj1m
dW5jdGlvbihvcHRpb24pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgJHRoaXM9JCh0
aGlzKSxkYXRhPSR0aGlzLmRhdGEoInRhYiIpO2RhdGF8fCR0aGlzLmRhdGEoInRhYiIsZGF0YT1u
ZXcgVGFiKHRoaXMpKSwic3RyaW5nIj09dHlwZW9mIG9wdGlvbiYmZGF0YVtvcHRpb25dKCl9KX0s
JC5mbi50YWIuQ29uc3RydWN0b3I9VGFiLCQuZm4udGFiLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXty
ZXR1cm4gJC5mbi50YWI9b2xkLHRoaXN9LCQoZG9jdW1lbnQpLm9uKCJjbGljay50YWIuZGF0YS1h
cGkiLCdbZGF0YS10b2dnbGU9InRhYiJdLCBbZGF0YS10b2dnbGU9InBpbGwiXScsZnVuY3Rpb24o
ZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLCQodGhpcykudGFiKCJzaG93Iil9KX0od2luZG93LmpRdWVy
eSksIWZ1bmN0aW9uKCQpeyJ1c2Ugc3RyaWN0Ijt2YXIgVHlwZWFoZWFkPWZ1bmN0aW9uKGVsZW1l
bnQsb3B0aW9ucyl7dGhpcy4kZWxlbWVudD0kKGVsZW1lbnQpLHRoaXMub3B0aW9ucz0kLmV4dGVu
ZCh7fSwkLmZuLnR5cGVhaGVhZC5kZWZhdWx0cyxvcHRpb25zKSx0aGlzLm1hdGNoZXI9dGhpcy5v
cHRpb25zLm1hdGNoZXJ8fHRoaXMubWF0Y2hlcix0aGlzLnNvcnRlcj10aGlzLm9wdGlvbnMuc29y
dGVyfHx0aGlzLnNvcnRlcix0aGlzLmhpZ2hsaWdodGVyPXRoaXMub3B0aW9ucy5oaWdobGlnaHRl
cnx8dGhpcy5oaWdobGlnaHRlcix0aGlzLnVwZGF0ZXI9dGhpcy5vcHRpb25zLnVwZGF0ZXJ8fHRo
aXMudXBkYXRlcix0aGlzLnNvdXJjZT10aGlzLm9wdGlvbnMuc291cmNlLHRoaXMuJG1lbnU9JCh0
aGlzLm9wdGlvbnMubWVudSksdGhpcy5zaG93bj0hMSx0aGlzLmxpc3RlbigpfTtUeXBlYWhlYWQu
cHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpUeXBlYWhlYWQsc2VsZWN0OmZ1bmN0aW9uKCl7dmFyIHZh
bD10aGlzLiRtZW51LmZpbmQoIi5hY3RpdmUiKS5hdHRyKCJkYXRhLXZhbHVlIik7cmV0dXJuIHRo
aXMuJGVsZW1lbnQudmFsKHRoaXMudXBkYXRlcih2YWwpKS5jaGFuZ2UoKSx0aGlzLmhpZGUoKX0s
dXBkYXRlcjpmdW5jdGlvbihpdGVtKXtyZXR1cm4gaXRlbX0sc2hvdzpmdW5jdGlvbigpe3ZhciBw
b3M9JC5leHRlbmQoe30sdGhpcy4kZWxlbWVudC5wb3NpdGlvbigpLHtoZWlnaHQ6dGhpcy4kZWxl
bWVudFswXS5vZmZzZXRIZWlnaHR9KTtyZXR1cm4gdGhpcy4kbWVudS5pbnNlcnRBZnRlcih0aGlz
LiRlbGVtZW50KS5jc3Moe3RvcDpwb3MudG9wK3Bvcy5oZWlnaHQsbGVmdDpwb3MubGVmdH0pLnNo
b3coKSx0aGlzLnNob3duPSEwLHRoaXN9LGhpZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kbWVu
dS5oaWRlKCksdGhpcy5zaG93bj0hMSx0aGlzfSxsb29rdXA6ZnVuY3Rpb24oKXt2YXIgaXRlbXM7
cmV0dXJuIHRoaXMucXVlcnk9dGhpcy4kZWxlbWVudC52YWwoKSwhdGhpcy5xdWVyeXx8dGhpcy5x
dWVyeS5sZW5ndGg8dGhpcy5vcHRpb25zLm1pbkxlbmd0aD90aGlzLnNob3duP3RoaXMuaGlkZSgp
OnRoaXM6KGl0ZW1zPSQuaXNGdW5jdGlvbih0aGlzLnNvdXJjZSk/dGhpcy5zb3VyY2UodGhpcy5x
dWVyeSwkLnByb3h5KHRoaXMucHJvY2Vzcyx0aGlzKSk6dGhpcy5zb3VyY2UsaXRlbXM/dGhpcy5w
cm9jZXNzKGl0ZW1zKTp0aGlzKX0scHJvY2VzczpmdW5jdGlvbihpdGVtcyl7dmFyIHRoYXQ9dGhp
cztyZXR1cm4gaXRlbXM9JC5ncmVwKGl0ZW1zLGZ1bmN0aW9uKGl0ZW0pe3JldHVybiB0aGF0Lm1h
dGNoZXIoaXRlbSl9KSxpdGVtcz10aGlzLnNvcnRlcihpdGVtcyksaXRlbXMubGVuZ3RoP3RoaXMu
cmVuZGVyKGl0ZW1zLnNsaWNlKDAsdGhpcy5vcHRpb25zLml0ZW1zKSkuc2hvdygpOnRoaXMuc2hv
d24/dGhpcy5oaWRlKCk6dGhpc30sbWF0Y2hlcjpmdW5jdGlvbihpdGVtKXtyZXR1cm5+aXRlbS50
b0xvd2VyQ2FzZSgpLmluZGV4T2YodGhpcy5xdWVyeS50b0xvd2VyQ2FzZSgpKX0sc29ydGVyOmZ1
bmN0aW9uKGl0ZW1zKXtmb3IodmFyIGl0ZW0sYmVnaW5zd2l0aD1bXSxjYXNlU2Vuc2l0aXZlPVtd
LGNhc2VJbnNlbnNpdGl2ZT1bXTtpdGVtPWl0ZW1zLnNoaWZ0KCk7KWl0ZW0udG9Mb3dlckNhc2Uo
KS5pbmRleE9mKHRoaXMucXVlcnkudG9Mb3dlckNhc2UoKSk/fml0ZW0uaW5kZXhPZih0aGlzLnF1
ZXJ5KT9jYXNlU2Vuc2l0aXZlLnB1c2goaXRlbSk6Y2FzZUluc2Vuc2l0aXZlLnB1c2goaXRlbSk6
YmVnaW5zd2l0aC5wdXNoKGl0ZW0pO3JldHVybiBiZWdpbnN3aXRoLmNvbmNhdChjYXNlU2Vuc2l0
aXZlLGNhc2VJbnNlbnNpdGl2ZSl9LGhpZ2hsaWdodGVyOmZ1bmN0aW9uKGl0ZW0pe3ZhciBxdWVy
eT10aGlzLnF1ZXJ5LnJlcGxhY2UoL1tcLVxbXF17fSgpKis/LixcXFxeJHwjXHNdL2csIlxcJCYi
KTtyZXR1cm4gaXRlbS5yZXBsYWNlKFJlZ0V4cCgiKCIrcXVlcnkrIikiLCJpZyIpLGZ1bmN0aW9u
KCQxLG1hdGNoKXtyZXR1cm4iPHN0cm9uZz4iK21hdGNoKyI8L3N0cm9uZz4ifSl9LHJlbmRlcjpm
dW5jdGlvbihpdGVtcyl7dmFyIHRoYXQ9dGhpcztyZXR1cm4gaXRlbXM9JChpdGVtcykubWFwKGZ1
bmN0aW9uKGksaXRlbSl7cmV0dXJuIGk9JCh0aGF0Lm9wdGlvbnMuaXRlbSkuYXR0cigiZGF0YS12
YWx1ZSIsaXRlbSksaS5maW5kKCJhIikuaHRtbCh0aGF0LmhpZ2hsaWdodGVyKGl0ZW0pKSxpWzBd
fSksaXRlbXMuZmlyc3QoKS5hZGRDbGFzcygiYWN0aXZlIiksdGhpcy4kbWVudS5odG1sKGl0ZW1z
KSx0aGlzfSxuZXh0OmZ1bmN0aW9uKCl7dmFyIGFjdGl2ZT10aGlzLiRtZW51LmZpbmQoIi5hY3Rp
dmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIiksbmV4dD1hY3RpdmUubmV4dCgpO25leHQubGVuZ3Ro
fHwobmV4dD0kKHRoaXMuJG1lbnUuZmluZCgibGkiKVswXSkpLG5leHQuYWRkQ2xhc3MoImFjdGl2
ZSIpfSxwcmV2OmZ1bmN0aW9uKCl7dmFyIGFjdGl2ZT10aGlzLiRtZW51LmZpbmQoIi5hY3RpdmUi
KS5yZW1vdmVDbGFzcygiYWN0aXZlIikscHJldj1hY3RpdmUucHJldigpO3ByZXYubGVuZ3RofHwo
cHJldj10aGlzLiRtZW51LmZpbmQoImxpIikubGFzdCgpKSxwcmV2LmFkZENsYXNzKCJhY3RpdmUi
KX0sbGlzdGVuOmZ1bmN0aW9uKCl7dGhpcy4kZWxlbWVudC5vbigiYmx1ciIsJC5wcm94eSh0aGlz
LmJsdXIsdGhpcykpLm9uKCJrZXlwcmVzcyIsJC5wcm94eSh0aGlzLmtleXByZXNzLHRoaXMpKS5v
bigia2V5dXAiLCQucHJveHkodGhpcy5rZXl1cCx0aGlzKSksdGhpcy5ldmVudFN1cHBvcnRlZCgi
a2V5ZG93biIpJiZ0aGlzLiRlbGVtZW50Lm9uKCJrZXlkb3duIiwkLnByb3h5KHRoaXMua2V5ZG93
bix0aGlzKSksdGhpcy4kbWVudS5vbigiY2xpY2siLCQucHJveHkodGhpcy5jbGljayx0aGlzKSku
b24oIm1vdXNlZW50ZXIiLCJsaSIsJC5wcm94eSh0aGlzLm1vdXNlZW50ZXIsdGhpcykpfSxldmVu
dFN1cHBvcnRlZDpmdW5jdGlvbihldmVudE5hbWUpe3ZhciBpc1N1cHBvcnRlZD1ldmVudE5hbWUg
aW4gdGhpcy4kZWxlbWVudDtyZXR1cm4gaXNTdXBwb3J0ZWR8fCh0aGlzLiRlbGVtZW50LnNldEF0
dHJpYnV0ZShldmVudE5hbWUsInJldHVybjsiKSxpc1N1cHBvcnRlZD0iZnVuY3Rpb24iPT10eXBl
b2YgdGhpcy4kZWxlbWVudFtldmVudE5hbWVdKSxpc1N1cHBvcnRlZH0sbW92ZTpmdW5jdGlvbihl
KXtpZih0aGlzLnNob3duKXtzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIDk6Y2FzZSAxMzpjYXNlIDI3
OmUucHJldmVudERlZmF1bHQoKTticmVhaztjYXNlIDM4OmUucHJldmVudERlZmF1bHQoKSx0aGlz
LnByZXYoKTticmVhaztjYXNlIDQwOmUucHJldmVudERlZmF1bHQoKSx0aGlzLm5leHQoKX1lLnN0
b3BQcm9wYWdhdGlvbigpfX0sa2V5ZG93bjpmdW5jdGlvbihlKXt0aGlzLnN1cHByZXNzS2V5UHJl
c3NSZXBlYXQ9fiQuaW5BcnJheShlLmtleUNvZGUsWzQwLDM4LDksMTMsMjddKSx0aGlzLm1vdmUo
ZSl9LGtleXByZXNzOmZ1bmN0aW9uKGUpe3RoaXMuc3VwcHJlc3NLZXlQcmVzc1JlcGVhdHx8dGhp
cy5tb3ZlKGUpfSxrZXl1cDpmdW5jdGlvbihlKXtzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIDQwOmNh
c2UgMzg6Y2FzZSAxNjpjYXNlIDE3OmNhc2UgMTg6YnJlYWs7Y2FzZSA5OmNhc2UgMTM6aWYoIXRo
aXMuc2hvd24pcmV0dXJuO3RoaXMuc2VsZWN0KCk7YnJlYWs7Y2FzZSAyNzppZighdGhpcy5zaG93
bilyZXR1cm47dGhpcy5oaWRlKCk7YnJlYWs7ZGVmYXVsdDp0aGlzLmxvb2t1cCgpfWUuc3RvcFBy
b3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpfSxibHVyOmZ1bmN0aW9uKCl7dmFyIHRoYXQ9
dGhpcztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhhdC5oaWRlKCl9LDE1MCl9LGNsaWNrOmZ1bmN0
aW9uKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuc2VsZWN0
KCl9LG1vdXNlZW50ZXI6ZnVuY3Rpb24oZSl7dGhpcy4kbWVudS5maW5kKCIuYWN0aXZlIikucmVt
b3ZlQ2xhc3MoImFjdGl2ZSIpLCQoZS5jdXJyZW50VGFyZ2V0KS5hZGRDbGFzcygiYWN0aXZlIil9
fTt2YXIgb2xkPSQuZm4udHlwZWFoZWFkOyQuZm4udHlwZWFoZWFkPWZ1bmN0aW9uKG9wdGlvbil7
cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciAkdGhpcz0kKHRoaXMpLGRhdGE9JHRoaXMu
ZGF0YSgidHlwZWFoZWFkIiksb3B0aW9ucz0ib2JqZWN0Ij09dHlwZW9mIG9wdGlvbiYmb3B0aW9u
O2RhdGF8fCR0aGlzLmRhdGEoInR5cGVhaGVhZCIsZGF0YT1uZXcgVHlwZWFoZWFkKHRoaXMsb3B0
aW9ucykpLCJzdHJpbmciPT10eXBlb2Ygb3B0aW9uJiZkYXRhW29wdGlvbl0oKX0pfSwkLmZuLnR5
cGVhaGVhZC5kZWZhdWx0cz17c291cmNlOltdLGl0ZW1zOjgsbWVudTonPHVsIGNsYXNzPSJ0eXBl
YWhlYWQgZHJvcGRvd24tbWVudSI+PC91bD4nLGl0ZW06JzxsaT48YSBocmVmPSIjIj48L2E+PC9s
aT4nLG1pbkxlbmd0aDoxfSwkLmZuLnR5cGVhaGVhZC5Db25zdHJ1Y3Rvcj1UeXBlYWhlYWQsJC5m
bi50eXBlYWhlYWQubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiAkLmZuLnR5cGVhaGVhZD1v
bGQsdGhpc30sJChkb2N1bWVudCkub24oImZvY3VzLnR5cGVhaGVhZC5kYXRhLWFwaSIsJ1tkYXRh
LXByb3ZpZGU9InR5cGVhaGVhZCJdJyxmdW5jdGlvbihlKXt2YXIgJHRoaXM9JCh0aGlzKTskdGhp
cy5kYXRhKCJ0eXBlYWhlYWQiKXx8KGUucHJldmVudERlZmF1bHQoKSwkdGhpcy50eXBlYWhlYWQo
JHRoaXMuZGF0YSgpKSl9KX0od2luZG93LmpRdWVyeSksIWZ1bmN0aW9uKCQpeyJ1c2Ugc3RyaWN0
Ijt2YXIgQWZmaXg9ZnVuY3Rpb24oZWxlbWVudCxvcHRpb25zKXt0aGlzLm9wdGlvbnM9JC5leHRl
bmQoe30sJC5mbi5hZmZpeC5kZWZhdWx0cyxvcHRpb25zKSx0aGlzLiR3aW5kb3c9JCh3aW5kb3cp
Lm9uKCJzY3JvbGwuYWZmaXguZGF0YS1hcGkiLCQucHJveHkodGhpcy5jaGVja1Bvc2l0aW9uLHRo
aXMpKS5vbigiY2xpY2suYWZmaXguZGF0YS1hcGkiLCQucHJveHkoZnVuY3Rpb24oKXtzZXRUaW1l
b3V0KCQucHJveHkodGhpcy5jaGVja1Bvc2l0aW9uLHRoaXMpLDEpfSx0aGlzKSksdGhpcy4kZWxl
bWVudD0kKGVsZW1lbnQpLHRoaXMuY2hlY2tQb3NpdGlvbigpfTtBZmZpeC5wcm90b3R5cGUuY2hl
Y2tQb3NpdGlvbj1mdW5jdGlvbigpe2lmKHRoaXMuJGVsZW1lbnQuaXMoIjp2aXNpYmxlIikpe3Zh
ciBhZmZpeCxzY3JvbGxIZWlnaHQ9JChkb2N1bWVudCkuaGVpZ2h0KCksc2Nyb2xsVG9wPXRoaXMu
JHdpbmRvdy5zY3JvbGxUb3AoKSxwb3NpdGlvbj10aGlzLiRlbGVtZW50Lm9mZnNldCgpLG9mZnNl
dD10aGlzLm9wdGlvbnMub2Zmc2V0LG9mZnNldEJvdHRvbT1vZmZzZXQuYm90dG9tLG9mZnNldFRv
cD1vZmZzZXQudG9wLHJlc2V0PSJhZmZpeCBhZmZpeC10b3AgYWZmaXgtYm90dG9tIjsib2JqZWN0
IiE9dHlwZW9mIG9mZnNldCYmKG9mZnNldEJvdHRvbT1vZmZzZXRUb3A9b2Zmc2V0KSwiZnVuY3Rp
b24iPT10eXBlb2Ygb2Zmc2V0VG9wJiYob2Zmc2V0VG9wPW9mZnNldC50b3AoKSksImZ1bmN0aW9u
Ij09dHlwZW9mIG9mZnNldEJvdHRvbSYmKG9mZnNldEJvdHRvbT1vZmZzZXQuYm90dG9tKCkpLGFm
Zml4PW51bGwhPXRoaXMudW5waW4mJnNjcm9sbFRvcCt0aGlzLnVucGluPD1wb3NpdGlvbi50b3A/
ITE6bnVsbCE9b2Zmc2V0Qm90dG9tJiZwb3NpdGlvbi50b3ArdGhpcy4kZWxlbWVudC5oZWlnaHQo
KT49c2Nyb2xsSGVpZ2h0LW9mZnNldEJvdHRvbT8iYm90dG9tIjpudWxsIT1vZmZzZXRUb3AmJm9m
ZnNldFRvcD49c2Nyb2xsVG9wPyJ0b3AiOiExLHRoaXMuYWZmaXhlZCE9PWFmZml4JiYodGhpcy5h
ZmZpeGVkPWFmZml4LHRoaXMudW5waW49ImJvdHRvbSI9PWFmZml4P3Bvc2l0aW9uLnRvcC1zY3Jv
bGxUb3A6bnVsbCx0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKHJlc2V0KS5hZGRDbGFzcygiYWZm
aXgiKyhhZmZpeD8iLSIrYWZmaXg6IiIpKSl9fTt2YXIgb2xkPSQuZm4uYWZmaXg7JC5mbi5hZmZp
eD1mdW5jdGlvbihvcHRpb24pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgJHRoaXM9
JCh0aGlzKSxkYXRhPSR0aGlzLmRhdGEoImFmZml4Iiksb3B0aW9ucz0ib2JqZWN0Ij09dHlwZW9m
IG9wdGlvbiYmb3B0aW9uO2RhdGF8fCR0aGlzLmRhdGEoImFmZml4IixkYXRhPW5ldyBBZmZpeCh0
aGlzLG9wdGlvbnMpKSwic3RyaW5nIj09dHlwZW9mIG9wdGlvbiYmZGF0YVtvcHRpb25dKCl9KX0s
JC5mbi5hZmZpeC5Db25zdHJ1Y3Rvcj1BZmZpeCwkLmZuLmFmZml4LmRlZmF1bHRzPXtvZmZzZXQ6
MH0sJC5mbi5hZmZpeC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuICQuZm4uYWZmaXg9b2xk
LHRoaXN9LCQod2luZG93KS5vbigibG9hZCIsZnVuY3Rpb24oKXskKCdbZGF0YS1zcHk9ImFmZml4
Il0nKS5lYWNoKGZ1bmN0aW9uKCl7dmFyICRzcHk9JCh0aGlzKSxkYXRhPSRzcHkuZGF0YSgpO2Rh
dGEub2Zmc2V0PWRhdGEub2Zmc2V0fHx7fSxkYXRhLm9mZnNldEJvdHRvbSYmKGRhdGEub2Zmc2V0
LmJvdHRvbT1kYXRhLm9mZnNldEJvdHRvbSksZGF0YS5vZmZzZXRUb3AmJihkYXRhLm9mZnNldC50
b3A9ZGF0YS5vZmZzZXRUb3ApLCRzcHkuYWZmaXgoZGF0YSl9KX0pfSh3aW5kb3cualF1ZXJ5KTsK
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2Vy
YmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFwcC9j
b21wb25lbnRzL2VzNS1zaGltLy5naXRpZ25vcmUgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3Jn
L1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRz
L2VzNS1zaGltLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmQ0ZjJiMDY2YjMzOWU0ZmQ1YzBlZmQ0
NDkzODIzMWEzOThlOWE4MQotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5j
aC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBv
bmVudHMvZXM1LXNoaW0vLmdpdGlnbm9yZQpAQCAtMCwwICsxLDIgQEAKK25vZGVfbW9kdWxlcwor
LkRTX1N0b3JlCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21l
dGVyMi4xL3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGlt
L0NIQU5HRVMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291
cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL0NIQU5HRVMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZjZmNGYwNDZlNTUyMzU5YjMyNTdmYzAxNjlmZTgwZGYyNWVjNGNlYwotLS0gL2Rl
di9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVz
b3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vQ0hBTkdFUwpA
QCAtMCwwICsxLDkzIEBACisKKzIuMC4wCisgLSBTZXBhcmF0ZSByZWxpYWJsZSBzaGltcyBmcm9t
IGR1YmlvdXMgc2hpbXMgKHNoYW1zKS4KKworMS4yLjEwCisgLSBHcm91cC1lZmZvcnQgU3R5bGUg
Q2xlYW51cAorIC0gVG9vayBhIHN0YWIgYXQgZml4aW5nIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBv
biBJRTggd2l0aG91dAorICAgYmFkIHNpZGUtZWZmZWN0cy4gKEBoYXgpCisgLSBPYmplY3QuaXNF
eHRlbnNpYmxlIG5vIGxvbmdlciBmYWtlcyBpdC4gKEB4YXZpZXJtKQorIC0gRGF0ZS5wcm90b3R5
cGUudG9JU09TdHJpbmcgbm8gbG9uZ2VyIGRlYWxzIHdpdGggcGFydGlhbAorICAgSVNPIGRhdGVz
LCBwZXIgc3BlYyAoQGtpdGNhbWJyaWRnZSkKKyAtIE1vcmUgKG1vc3RseSBmcm9tIEBicnlhbmZv
cmJlcykKKworMS4yLjkKKyAtIENvcnJlY3Rpb25zIHRvIHRvSVNPU3RyaW5nIGJ5IEBraXRjYW1i
cmlkZ2UKKyAtIEZpeGVkIHRocmVlIGJ1Z3MgaW4gYXJyYXkgbWV0aG9kcyByZXZlYWxlZCBieSBK
YXNtaW5lIHRlc3RzLgorIC0gQ2xlYW5lZCB1cCBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB3aXRo
IG1vcmUgZml4ZXMgYW5kIHRlc3RzIGZyb20KKyAgIEBicnlhbmZvcmJlcy4KKworMS4yLjgKKyAt
IEFjdHVhbGx5IGZpeGVkIHByb2JsZW1zIHdpdGggRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQsIGFu
ZCByZWdyZXNzaW9ucworICAgZnJvbSAxLjIuNyAoQGJyeWFuZm9yYmVzLCBAamRhbHRvbiAjMzYp
CisKKzEuMi43IC0gUkVHUkVTU0VECisgLSBGaXhlZCBwcm9ibGVtcyB3aXRoIEZ1bmN0aW9uLnBy
b3RvdHlwZS5iaW5kIHdoZW4gY2FsbGVkIGFzIGEgY29uc3RydWN0b3IuCisgICAoQGpkYWx0b24g
IzM2KQorCisxLjIuNgorIC0gUmV2aXNlZCBEYXRlLnBhcnNlIHRvIG1hdGNoIEVTIDUuMSAoa2l0
Y2FtYnJpZGdlKQorCisxLjIuNQorIC0gRml4ZWQgYSBidWcgZm9yIHBhZGRpbmcgaXQgRGF0ZS4u
dG9JU09TdHJpbmcgKHRhZGZpc2hlciBpc3N1ZSAjMzMpCisKKzEuMi40CisgLSBGaXhlZCBhIGRl
c2NyaXB0b3IgYnVnIGluIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAocmF5bm9zKQorCisxLjIuMwor
IC0gQ2xlYW5lZCB1cCBSZXF1aXJlSlMgYW5kIDxzY3JpcHQ+IGJvaWxlcnBsYXRlCisKKzEuMi4y
CisgLSBDaGFuZ2VkIHJlZHVjZSB0byBmb2xsb3cgdGhlIGxldHRlciBvZiB0aGUgc3BlYyB3aXRo
IHJlZ2FyZCB0byBoYXZpbmcgYW5kCisgICBvd25pbmcgcHJvcGVydGllcy4KKyAtIEZpeGVkIGEg
YnVnIHdoZXJlIFJlZ0V4cHMgcGFzcyBhcyBGdW5jdGlvbnMgaW4gc29tZSBlbmdpbmVzIGluIHJl
ZHVjZS4KKworMS4yLjEKKyAtIEFkZGluZyBmZXcgZml4ZXMgdG8gbWFrZSBqc2hpbnQgaGFwcHku
CisgLSBGaXggZm9yIGlzc3VlICMxMiwgZnVuY3Rpb24gZXhwcmVzc2lvbnMgY2FuIGNhdXNlIHNj
b3BpbmcgaXNzdWVzIGluIElFLgorIC0gTlBNIHdpbGwgbWluaWZ5IG9uIGluc3RhbGwgb3Igd2hl
biBgbnBtIHJ1bi1zY3JpcHQgaW5zdGFsbGAgaXMgZXhlY3V0ZWQuCisgLSBBZGRpbmcgLmdpdGln
bm9yZSB0byBhdm9pZCBwdWJsaXNoaW5nIGRldiBkZXBlbmRlbmNpZXMuCisKKzEuMi4wCisgLSBN
YWtpbmcgc2NyaXB0IGxvYWRhYmxlIGFzIEFNRCBtb2R1bGUuCisgLSBBZGRpbmcgYGluZGV4T2Zg
IHRvIHRoZSBsaXN0IG9mIHNhZmUgc2hpbXMuCisKKzEuMS4wCisgLSBBZGRlZCBzdXBwb3J0IGZv
ciBhY2Nlc3NvciBwcm9wZXJ0aWVzIHdoZXJlIHBvc3NpYmxlICh3aGljaCBpcyBhbGwgYnJvd3Nl
cnMKKyAgIGV4Y2VwdCBJRSkuCisgLSBTdG9wIGV4cG9zaW5nIGJvdW5kIGZ1bmN0aW9uJ3MgKHRo
YXQgYXJlIHJldHVybmVkIGJ5CisgICBgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRgKSBpbnRlcm5h
bCBwcm9wZXJ0aWVzIChgYm91bmQsIGJvdW5kVG8sIGJvdW5kQXJnc2ApCisgICBhcyBpbiBzb21l
IGNhc2VzICh3aGVuIHVzaW5nIGZhY2FkZSBvYmplY3RzIGZvciBleGFtcGxlKSBjYXBhYmlsaXRp
ZXMgb2YgdGhlCisgICBlbmNsb3NlZCBmdW5jdGlvbnMgd2lsbCBiZSBsZWFrZWQuCisgLSBgT2Jq
ZWN0LmNyZWF0ZWAgbm93IGV4cGxpY2l0bHkgc2V0cyBgX19wcm90b19fYCBwcm9wZXJ0eSB0byBn
dWFyYW50ZWUKKyAgIGNvcnJlY3QgYmVoYXZpb3Igb2YgYE9iamVjdC5nZXRQcm90b3R5cGVPZmAn
cyBvbiBhbGwgb2JqZWN0cyBjcmVhdGVkIHVzaW5nCisgICBgT2JqZWN0LmNyZWF0ZWAuCisgLSBT
d2l0Y2hlZCB0byBgPT09YCBmcm9tIGA9PWAgd2hlcmUgcG9zc2libGUgYXMgaXQncyBzbGlnaHRs
eSBmYXN0ZXIgb24gb2xkZXIKKyAgIGJyb3dzZXJzIHRoYXQgYXJlIHRhcmdldCBvZiB0aGlzIGxp
Yi4KKyAtIEFkZGVkIG5hbWVzIHRvIGFsbCBhbm9ueW1vdXMgZnVuY3Rpb25zIHRvIGhhdmUgYSBi
ZXR0ZXIgc3RhY2sgdHJhY2VzLgorCisxLjAuMAorIC0gZml4ZWQgRGF0ZS50b0lTT0RhdGUsIHVz
aW5nIFVUQyBhY2Nlc3NvcnMsIGFzIGluCisgICBodHRwOi8vY29kZS5nb29nbGUuY29tL3Avdjgv
c291cmNlL2Jyb3dzZS90cnVuay9zcmMvZGF0ZS5qcz9yPTYxMjAjOTg2CisgICAoYXJpYW4pCisK
KzAuMC40CisgLSBSZXZpc2VkIE9iamVjdC5nZXRQcm90b3R5cGVPZiB0byB3b3JrIGluIG1vcmUg
Y2FzZXMKKyAgIGluIHJlc3BvbnNlIHRvIGh0dHA6Ly9lam9obi5vcmcvYmxvZy9vYmplY3RnZXRw
cm90b3R5cGVvZi8KKyAgIFtpc3N1ZSAjMl0gKGZzY2hhZWZlcikKKworMC4wLjMKKyAtIEZpeGVk
IHR5cG9zIGluIE9iamVjdC5rZXlzIChzYW1zb25qcykKKworMC4wLjIKKyAgIFBlciBrYW5nYXgn
cyByZWNvbW1lbmRhdGlvbnM6CisgLSBmYXN0ZXIgT2JqZWN0LmNyZWF0ZShudWxsKQorIC0gZml4
ZWQgYSBmdW5jdGlvbi1zY29wZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBzdGF0ZW1lbnQgaW4gT2Jq
ZWN0LmNyZWF0ZQorCiswLjAuMQorIC0gZml4ZWQgT2JqZWN0LmNyZWF0ZShudWxsKSwgaW4gc28g
ZmFyIGFzIHRoYXQncyBwb3NzaWJsZQorIC0gcmV3b3JrZWQgUmhpbm8gT2JqZWN0LmZyZWV6ZShG
dW5jdGlvbikgYnVnIGRldGVjdG9yIGFuZCBwYXRjaGVyCisKKzAuMC4wCisgLSBmb3JrZWQgZnJv
bSBuYXJ3aGFsLWxpYgorCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1Nw
ZWVkb21ldGVyMi4xL3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2Vz
NS1zaGltL0NPTlRSSUJVVE9SUy5tZCBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRv
bWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNo
aW0vQ09OVFJJQlVUT1JTLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU2OTU5YTY5NmE0NGViMzdiNTcwOWY2Nzdl
Y2VhYjhkYWJkYjQ5YTMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gu
b3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25l
bnRzL2VzNS1zaGltL0NPTlRSSUJVVE9SUy5tZApAQCAtMCwwICsxLDI1IEBACisKKy0gICBrcmlz
a293YWwgS3JpcyBLb3dhbCBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSBNSVQgTGljZW5zZQorLSAg
IHRscm9iaW5zb24gVG9tIFJvYmluc29uIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIE1JVCBMaWNl
bnNlIChOYXJ3aGFsCisgICAgUHJvamVjdCkKKy0gICBkYW50bWFuIERhbmllbCBGcmllc2VuIENv
cHlyaWdodCAoQykgMjAxMCBYWFggVE9ETyBMaWNlbnNlIG9yIENMQQorLSAgIGZzY2hhZWZlciBG
bG9yaWFuIFNjaMOkZmVyIENvcHlyaWdodCAoQykgMjAxMCBNSVQgTGljZW5zZQorLSAgIEdvemFs
YSBJcmFrbGkgR296YWxpc2h2aWxpIENvcHlyaWdodCAoQykgMjAxMCBNSVQgTGljZW5zZQorLSAg
IGtpdGNhbWJyaWRnZSBLaXQgQ2FtYnJpZGdlIENvcHlyaWdodCAoQykgMjAxMSBNSVQgTGljZW5z
ZQorLSAgIGtvc3Nub2NvcnAgU2FzaGEgS29zcyBYWFggVE9ETyBMaWNlbnNlIG9yIENMQQorLSAg
IGJyeWFuZm9yYmVzIEJyeWFuIEZvcmJlcyBYWFggVE9ETyBMaWNlbnNlIG9yIENMQQorLSAgIGtp
bGxkcmVhbSBRdWlsZHJlZW4gTW90dGEgQ29weXJpZ2h0IChDKSAyMDExIE1JVCBMaWNlbmNlCist
ICAgbWljaGFlbGZpY2FycmEgTWljaGFlbCBGaWNhcnJhIENvcHlyaWdodCAoQykgMjAxMSAzLWNs
YXVzZSBCU0QKKyAgICBMaWNlbnNlCistICAgc2hhcmticmFpbmd1eSBHZXJhcmQgUGFhcHUgQ29w
eXJpZ2h0IChDKSAyMDExIE1JVCBMaWNlbnNlCistICAgYmJxc3JjIEJyZW5kYW4gTW9sbG95IChD
KSAyMDExIENyZWF0aXZlIENvbW1vbnMgWmVybyAocHVibGljIGRvbWFpbikKKy0gICBpd3lnIFhY
WCBUT0RPIExpY2Vuc2Ugb3IgQ0xBCistICAgRG9tZW5pY0Rlbmljb2xhIERvbWVuaWMgRGVuaWNv
bGEgQ29weXJpZ2h0IChDKSAyMDExIE1JVCBMaWNlbnNlCistICAgeGF2aWVybTAyIE1vbnRpbGxl
dCBYYXZpZXIgQ29weXJpZ2h0IChDKSAyMDExIE1JVCBMaWNlbnNlCistICAgUmF5bm9zIEpha2Ug
VmVyYmF0ZW4gQ29weXJpZ2h0IChDKSAyMDExIE1JVCBMaWNlbmNlCistICAgc2Ftc29uanMgU2Ft
aSBTYW1odXJpIENvcHlyaWdodCAoQykgMjAxMCBNSVQgTGljZW5zZQorLSAgIHJ3bGRybiBSaWNr
IFdhbGRyb24gQ29weXJpZ2h0IChDKSAyMDExIE1JVCBMaWNlbnNlCistICAgbGV4ZXIgQWxleGV5
IFpha2hhcm92IFhYWCBUT0RPIExpY2Vuc2Ugb3IgQ0xBCistICAgMjgwIE5vcnRoIEluYy4gKE5v
dyBNb3Rvcm9sYSBMTEMsIGEgc3Vic2lkaWFyeSBvZiBHb29nbGUgSW5jLikKKyAgICBDb3B5cmln
aHQgKEMpIDIwMDkgTUlUIExpY2Vuc2UKKwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJl
bmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29t
cG9uZW50cy9lczUtc2hpbS9MSUNFTlNFIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVl
ZG9tZXRlcjIuMS9yZXNvdXJjZXMvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUt
c2hpbS9MSUNFTlNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZlZTA4MjU1Y2I5NzE4ZDkzNTliY2NlYTkwNWJlNzQ4
MjYzN2VlNjkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1Nw
ZWVkb21ldGVyMi4xL3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2Vz
NS1zaGltL0xJQ0VOU0UKQEAgLTAsMCArMSwxOSBAQAorCitDb3B5cmlnaHQgMjAwOSwgMjAxMCBL
cmlzdG9waGVyIE1pY2hhZWwgS293YWwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCitQZXJtaXNzaW9u
IGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5p
bmcgYSBjb3B5CitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24g
ZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8KK2RlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQg
cmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlCityaWdodHMgdG8g
dXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNl
LCBhbmQvb3IKK3NlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJz
b25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3Qg
dG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj
ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorYWxsIGNv
cGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZU
V0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBF
WFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBP
UiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBP
VEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBP
UiBPVEhFUldJU0UsIEFSSVNJTkcKK0ZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEgg
VEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKK0lOIFRIRSBTT0ZUV0FS
RS4KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEv
cmVzb3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vUkVBRE1F
Lm1kIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMv
ZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS9SRUFETUUubWQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMjk3MjIyMjgxNGM1NzFhYjlmMDA0NWUzYjE3YjFhMDMyYzZhYThjNQotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3Vy
Y2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vUkVBRE1FLm1kCkBA
IC0wLDAgKzEsMTYxIEBACisKK2BlczUtc2hpbS5qc2AgYW5kIGBlczUtc2hpbS5taW4uanNgIG1v
bmtleS1wYXRjaCBhIEphdmFTY3JpcHQgY29udGV4dCB0bworY29udGFpbiBhbGwgRWNtYVNjcmlw
dCA1IG1ldGhvZHMgdGhhdCBjYW4gYmUgZmFpdGhmdWxseSBlbXVsYXRlZCB3aXRoIGEKK2xlZ2Fj
eSBKYXZhU2NyaXB0IGVuZ2luZS4KKworYGVzNS1zaGFtLmpzYCBhbmQgYGVzNS1zaGFtLm1pbi5q
c2AgbW9ua2V5LXBhdGNoIG90aGVyIEVTNSBtZXRob2RzIGFzCitjbG9zZWx5IGFzIHBvc3NpYmxl
LiAgRm9yIHRoZXNlIG1ldGhvZHMsIGFzIGNsb3NlbHkgYXMgcG9zc2libGUgdG8gRVM1CitpcyBu
b3QgdmVyeSBjbG9zZS4gIE1hbnkgb2YgdGhlc2Ugc2hhbXMgYXJlIGludGVuZGVkIG9ubHkgdG8g
YWxsb3cgY29kZQordG8gYmUgd3JpdHRlbiB0byBFUzUgd2l0aG91dCBjYXVzaW5nIHJ1bi10aW1l
IGVycm9ycyBpbiBvbGRlciBlbmdpbmVzLgorSW4gbWFueSBjYXNlcywgdGhpcyBtZWFucyB0aGF0
IHRoZXNlIHNoYW1zIGNhdXNlIG1hbnkgRVM1IG1ldGhvZHMgdG8KK3NpbGVudGx5IGZhaWwuICBE
ZWNpZGUgY2FyZWZ1bGx5IHdoZXRoZXIgdGhpcyBpcyB3aGF0IHlvdSB3YW50LgorCisKKyMjIFRl
c3RzCisKK1RoZSB0ZXN0cyBhcmUgd3JpdHRlbiB3aXRoIHRoZSBKYXNtaW5lIEJERCB0ZXN0IGZy
YW1ld29yay4KK1RvIHJ1biB0aGUgdGVzdHMsIG5hdmlnYXRlIHRvIDxyb290LWZvbGRlcj4vdGVz
dHMvLiAKKworSW4gb3JkZXIgdG8gcnVuIGFnYWluc3QgdGhlIHNoaW0tY29kZSwgdGhlIHRlc3Rz
IGF0dGVtcHQgdG8ga2lsbCB0aGUgY3VycmVudCAKK2ltcGxlbWVudGF0aW9uIG9mIHRoZSBtaXNz
aW5nIG1ldGhvZHMuIFRoaXMgaGFwcGVucyBpbiA8cm9vdC1mb2xkZXI+L3Rlc3RzL2hlbHBlcnMv
aC1raWxsLmpzLgorU28gaW4gb3JkZXIgdG8gcnVuIHRoZSB0ZXN0cyBhZ2FpbnN0IHRoZSBidWls
ZC1pbiBtZXRob2RzLCBpbnZhbGlkYXRlIHRoYXQgZmlsZSBzb21laG93CisoY29tbWVudC1vdXQs
IGRlbGV0ZSB0aGUgZmlsZSwgZGVsZXRlIHRoZSBzY3JpcHQtdGFnLCBldGMuKS4KKworIyMgU2hp
bXMKKworIyMjIENvbXBsZXRlIHRlc3RzICMjIworCisqIEFycmF5LnByb3RvdHlwZS5ldmVyeQor
KiBBcnJheS5wcm90b3R5cGUuZmlsdGVyCisqIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoCisqIEFy
cmF5LnByb3RvdHlwZS5pbmRleE9mCisqIEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZgorKiBB
cnJheS5wcm90b3R5cGUubWFwCisqIEFycmF5LnByb3RvdHlwZS5zb21lCisqIEFycmF5LnByb3Rv
dHlwZS5yZWR1Y2UKKyogQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0CisqIEFycmF5LmlzQXJy
YXkKKyogRGF0ZS5ub3cKKyogRGF0ZS5wcm90b3R5cGUudG9KU09OCisqIEZ1bmN0aW9uLnByb3Rv
dHlwZS5iaW5kCisgICAgKiAvIVwgQ2F2ZWF0OiB0aGUgYm91bmQgZnVuY3Rpb24ncyBsZW5ndGgg
aXMgYWx3YXlzIDAuCisgICAgKiAvIVwgQ2F2ZWF0OiB0aGUgYm91bmQgZnVuY3Rpb24gaGFzIGEg
cHJvdG90eXBlIHByb3BlcnR5LgorICAgICogLyFcIENhdmVhdDogYm91bmQgZnVuY3Rpb25zIGRv
IG5vdCB0cnkgdG9vIGhhcmQgdG8ga2VlcCB5b3UKKyAgICAgIGZyb20gbWFuaXB1bGF0aW5nIHRo
ZWlyIGBgYXJndW1lbnRzYGAgYW5kIGBgY2FsbGVyYGAgcHJvcGVydGllcy4KKyAgICAqIC8hXCBD
YXZlYXQ6IGJvdW5kIGZ1bmN0aW9ucyBkb24ndCBoYXZlIGNoZWNrcyBpbiBgYGNhbGxgYCBhbmQK
KyAgICAgIGBgYXBwbHlgYCB0byBhdm9pZCBleGVjdXRpbmcgYXMgYSBjb25zdHJ1Y3Rvci4KKyog
T2JqZWN0LmtleXMKKyogU3RyaW5nLnByb3RvdHlwZS50cmltCisKKyMjIyBVbnRlc3RlZCAjIyMK
KworKiBEYXRlLnBhcnNlIChmb3IgSVNPIHBhcnNpbmcpCisqIERhdGUucHJvdG90eXBlLnRvSVNP
U3RyaW5nCisKKyMjIFNoYW1zCisKKyogLz9cIE9iamVjdC5jcmVhdGUKKworICAgIEZvciB0aGUg
Y2FzZSBvZiBzaW1wbHkgImJlZ2V0dGluZyIgYW4gb2JqZWN0IHRoYXQKKyAgICBpbmhlcml0cyBw
cm90b3R5cGljYWxseSBmcm9tIGFub3RoZXIsIHRoaXMgc2hvdWxkIHdvcmsKKyAgICBmaW5lIGFj
cm9zcyBsZWdhY3kgZW5naW5lcy4KKworICAgIC8hXCBPYmplY3QuY3JlYXRlKG51bGwpIHdpbGwg
d29yayBvbmx5IGluIGJyb3dzZXJzIHRoYXQKKyAgICBzdXBwb3J0IHByb3RvdHlwZSBhc3NpZ25t
ZW50LiAgVGhpcyBjcmVhdGVzIGFuIG9iamVjdAorICAgIHRoYXQgZG9lcyBub3QgaGF2ZSBhbnkg
cHJvcGVydGllcyBpbmhlcml0ZWQgZnJvbQorICAgIE9iamVjdC5wcm90b3R5cGUuICBJdCB3aWxs
IHNpbGVudGx5IGZhaWwgb3RoZXJ3aXNlLgorCisgICAgLyFcIFRoZSBzZWNvbmQgYXJndW1lbnQg
aXMgcGFzc2VkIHRvCisgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgd2hpY2ggd2lsbCBwcm9i
YWJseSBmYWlsCisgICAgc2lsZW50bHkuCisKKyogLz9cIE9iamVjdC5nZXRQcm90b3R5cGVPZgor
CisgICAgVGhpcyB3aWxsIHJldHVybiAidW5kZWZpbmVkIiBpbiBzb21lIGNhc2VzLiAgSXQgdXNl
cworICAgIF9fcHJvdG9fXyBpZiBpdCdzIGF2YWlsYWJsZS4gIEZhaWxpbmcgdGhhdCwgaXQgdXNl
cworICAgIGNvbnN0cnVjdG9yLnByb3RvdHlwZSwgd2hpY2ggZGVwZW5kcyBvbiB0aGUgY29uc3Ry
dWN0b3IKKyAgICBwcm9wZXJ0eSBvZiB0aGUgb2JqZWN0J3MgcHJvdG90eXBlIGhhdmluZyBub3Qg
YmVlbgorICAgIHJlcGxhY2VkLiAgSWYgeW91ciBvYmplY3Qgd2FzIGNyZWF0ZWQgbGlrZSB0aGlz
LCBpdAorICAgIHdvbid0IHdvcms6CisKKyAgICAgICAgZnVuY3Rpb24gRm9vKCkgeworICAgICAg
ICB9CisgICAgICAgIEZvby5wcm90b3R5cGUgPSB7fTsKKworICAgIEJlY2F1c2UgdGhlIHByb3Rv
dHlwZSByZWFzc2lnbm1lbnQgZGVzdHJveXMgdGhlCisgICAgY29uc3RydWN0b3IgcHJvcGVydHku
CisKKyAgICBUaGlzIHdpbGwgd29yayBmb3IgYWxsIG9iamVjdHMgdGhhdCB3ZXJlIGNyZWF0ZWQg
dXNpbmcKKyAgICBgT2JqZWN0LmNyZWF0ZWAgaW1wbGVtZW50ZWQgd2l0aCB0aGlzIGxpYnJhcnku
CisKKyogLyFcIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzCisKKyAgICBUaGlzIG1ldGhvZCB1
c2VzIE9iamVjdC5rZXlzLCBzbyBpdCB3aWxsIG5vdCBiZSBhY2N1cmF0ZQorICAgIG9uIGxlZ2Fj
eSBlbmdpbmVzLgorCisqIE9iamVjdC5pc1NlYWxlZAorCisgICAgUmV0dXJucyAiZmFsc2UiIGlu
IGFsbCBsZWdhY3kgZW5naW5lcyBmb3IgYWxsIG9iamVjdHMsCisgICAgd2hpY2ggaXMgY29udmVu
aWVudGx5IGd1YXJhbnRlZWQgdG8gYmUgYWNjdXJhdGUuCisKKyogT2JqZWN0LmlzRnJvemVuCisK
KyAgICBSZXR1cm5zICJmYWxzZSIgaW4gYWxsIGxlZ2FjeSBlbmdpbmVzIGZvciBhbGwgb2JqZWN0
cywKKyAgICB3aGljaCBpcyBjb252ZW5pZW50bHkgZ3VhcmFudGVlZCB0byBiZSBhY2N1cmF0ZS4K
KworKiBPYmplY3QuaXNFeHRlbnNpYmxlCisKKyAgICBXb3JrcyBsaWtlIGEgY2hhcm0sIGJ5IHRy
eWluZyB2ZXJ5IGhhcmQgdG8gZXh0ZW5kIHRoZQorICAgIG9iamVjdCB0aGVuIHJlZGFjdGluZyB0
aGUgZXh0ZW5zaW9uLgorCisjIyMgRmFpbCBzaWxlbnRseQorCisqIC8hXCBPYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yCisgICAgCisgICAgVGhlIGJlaGF2aW9yIG9mIHRoaXMgc2hpbSBk
b2VzIG5vdCBjb25mb3JtIHRvIEVTNS4gIEl0CisgICAgc2hvdWxkIHByb2JhYmx5IG5vdCBiZSB1
c2VkIGF0IHRoaXMgdGltZSwgdW50aWwgaXRzCisgICAgYmVoYXZpb3IgaGFzIGJlZW4gcmV2aWV3
ZWQgYW5kIGJlZW4gY29uZmlybWVkIHRvIGJlCisgICAgdXNlZnVsIGluIGxlZ2FjeSBlbmdpbmVz
LgorCisqIC8hXCBPYmplY3QuZGVmaW5lUHJvcGVydHkKKworICAgIFRoaXMgbWV0aG9kIHdpbGwg
c2lsZW50bHkgZmFpbCB0byBzZXQgIndyaXRhYmxlIiwKKyAgICAiZW51bWVyYWJsZSIsIGFuZCAi
Y29uZmlndXJhYmxlIiBwcm9wZXJ0aWVzLgorICAgIAorICAgIFByb3ZpZGluZyBhIGdldHRlciBv
ciBzZXR0ZXIgd2l0aCAiZ2V0IiBvciAic2V0IiBvbiBhCisgICAgZGVzY3JpcHRvciB3aWxsIHNp
bGVudGx5IGZhaWwgb24gZW5naW5lcyB0aGF0IGxhY2sKKyAgICAiX19kZWZpbmVHZXR0ZXJfXyIg
YW5kICJfX2RlZmluZVNldHRlcl9fIiwgd2hpY2ggaW5jbHVkZQorICAgIGFsbCB2ZXJzaW9ucyBv
ZiBJRSB1cCB0byB2ZXJzaW9uIDggc28gZmFyLgorCisgICAgSUUgOCBwcm92aWRlcyBhIHZlcnNp
b24gb2YgdGhpcyBtZXRob2QgYnV0IGl0IG9ubHkgd29ya3MKKyAgICBvbiBET00gb2JqZWN0cy4g
IFRodXMsIHRoZSBzaGltIHdpbGwgbm90IGdldCBpbnN0YWxsZWQKKyAgICBhbmQgYXR0ZW1wdHMg
dG8gc2V0ICJ2YWx1ZSIgcHJvcGVydGllcyB3aWxsIGZhaWwKKyAgICBzaWxlbnRseSBvbiBub24t
RE9NIG9iamVjdHMuCisKKyAgICBodHRwczovL2dpdGh1Yi5jb20va3Jpc2tvd2FsL2VzNS1zaGlt
L2lzc3VlcyNpc3N1ZS81CisKKyogLyFcIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzCisKKyAgICBU
aGlzIHVzZXMgdGhlIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBzaGltCisKKyogT2JqZWN0LnNlYWwK
KworICAgIFNpbGVudGx5IGZhaWxzIG9uIGFsbCBsZWdhY3kgZW5naW5lcy4gIFRoaXMgc2hvdWxk
IGJlCisgICAgZmluZSB1bmxlc3MgeW91IGFyZSBkZXBlbmRpbmcgb24gdGhlIHNhZmV0eSBhbmQg
c2VjdXJpdHkKKyAgICBwcm92aXNpb25zIG9mIHRoaXMgbWV0aG9kLCB3aGljaCB5b3UgY2Fubm90
IHBvc3NpYmx5CisgICAgb2J0YWluIGluIGxlZ2FjeSBlbmdpbmVzLgorCisqIE9iamVjdC5mcmVl
emUKKworICAgIFNpbGVudGx5IGZhaWxzIG9uIGFsbCBsZWdhY3kgZW5naW5lcy4gIFRoaXMgc2hv
dWxkIGJlCisgICAgZmluZSB1bmxlc3MgeW91IGFyZSBkZXBlbmRpbmcgb24gdGhlIHNhZmV0eSBh
bmQgc2VjdXJpdHkKKyAgICBwcm92aXNpb25zIG9mIHRoaXMgbWV0aG9kLCB3aGljaCB5b3UgY2Fu
bm90IHBvc3NpYmx5CisgICAgb2J0YWluIGluIGxlZ2FjeSBlbmdpbmVzLgorCisqIE9iamVjdC5w
cmV2ZW50RXh0ZW5zaW9ucworCisgICAgU2lsZW50bHkgZmFpbHMgb24gYWxsIGxlZ2FjeSBlbmdp
bmVzLiAgVGhpcyBzaG91bGQgYmUKKyAgICBmaW5lIHVubGVzcyB5b3UgYXJlIGRlcGVuZGluZyBv
biB0aGUgc2FmZXR5IGFuZCBzZWN1cml0eQorICAgIHByb3Zpc2lvbnMgb2YgdGhpcyBtZXRob2Qs
IHdoaWNoIHlvdSBjYW5ub3QgcG9zc2libHkKKyAgICBvYnRhaW4gaW4gbGVnYWN5IGVuZ2luZXMu
CisKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEv
cmVzb3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vZXM1LXNo
YW0uanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNl
cy9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL2VzNS1zaGFtLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmExYjQ2Y2JjMWZhNjFmNWNhNDQyZjRmZDVkY2Q3NjA0MTk2MWJlOWQKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jl
c291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL2VzNS1zaGFt
LmpzCkBAIC0wLDAgKzEsMzI2IEBACisvLyBDb3B5cmlnaHQgMjAwOS0yMDEyIGJ5IGNvbnRyaWJ1
dG9ycywgTUlUIExpY2Vuc2UKKy8vIHZpbTogdHM9NCBzdHM9NCBzdz00IGV4cGFuZHRhYgorCisv
LyBNb2R1bGUgc3lzdGVtcyBtYWdpYyBkYW5jZQorKGZ1bmN0aW9uIChkZWZpbml0aW9uKSB7Cisg
ICAgLy8gUmVxdWlyZUpTCisgICAgaWYgKHR5cGVvZiBkZWZpbmUgPT0gImZ1bmN0aW9uIikgewor
ICAgICAgICBkZWZpbmUoZGVmaW5pdGlvbik7CisgICAgLy8gWVVJMworICAgIH0gZWxzZSBpZiAo
dHlwZW9mIFlVSSA9PSAiZnVuY3Rpb24iKSB7CisgICAgICAgIFlVSS5hZGQoImVzNS1zaGFtIiwg
ZGVmaW5pdGlvbik7CisgICAgLy8gQ29tbW9uSlMgYW5kIDxzY3JpcHQ+CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZGVmaW5pdGlvbigpOworICAgIH0KK30pKGZ1bmN0aW9uICgpIHsKKworLy8gRVM1
IDE1LjIuMy4yCisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMuMgoraWYgKCFPYmpl
Y3QuZ2V0UHJvdG90eXBlT2YpIHsKKyAgICAvLyBodHRwczovL2dpdGh1Yi5jb20va3Jpc2tvd2Fs
L2VzNS1zaGltL2lzc3VlcyNpc3N1ZS8yCisgICAgLy8gaHR0cDovL2Vqb2huLm9yZy9ibG9nL29i
amVjdGdldHByb3RvdHlwZW9mLworICAgIC8vIHJlY29tbWVuZGVkIGJ5IGZzY2hhZWZlciBvbiBn
aXRodWIKKyAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YgPSBmdW5jdGlvbiBnZXRQcm90b3R5cGVP
ZihvYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIG9iamVjdC5fX3Byb3RvX18gfHwgKAorICAgICAg
ICAgICAgb2JqZWN0LmNvbnN0cnVjdG9yCisgICAgICAgICAgICAgICAgPyBvYmplY3QuY29uc3Ry
dWN0b3IucHJvdG90eXBlCisgICAgICAgICAgICAgICAgOiBwcm90b3R5cGVPZk9iamVjdAorICAg
ICAgICApOworICAgIH07Cit9CisKKy8vIEVTNSAxNS4yLjMuMworLy8gaHR0cDovL2VzNS5naXRo
dWIuY29tLyN4MTUuMi4zLjMKK2lmICghT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcikg
eworICAgIHZhciBFUlJfTk9OX09CSkVDVCA9ICJPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yIGNhbGxlZCBvbiBhIG5vbi1vYmplY3Q6ICI7CisKKyAgICBPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwg
cHJvcGVydHkpIHsKKyAgICAgICAgaWYgKCh0eXBlb2Ygb2JqZWN0ICE9ICJvYmplY3QiICYmIHR5
cGVvZiBvYmplY3QgIT0gImZ1bmN0aW9uIikgfHwgb2JqZWN0ID09PSBudWxsKSB7CisgICAgICAg
ICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9OT05fT0JKRUNUICsgb2JqZWN0KTsKKyAgICAg
ICAgfQorICAgICAgICAvLyBJZiBvYmplY3QgZG9lcyBub3Qgb3ducyBwcm9wZXJ0eSByZXR1cm4g
dW5kZWZpbmVkIGltbWVkaWF0ZWx5LgorICAgICAgICBpZiAoIW93bnMob2JqZWN0LCBwcm9wZXJ0
eSkpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIG9i
amVjdCBoYXMgYSBwcm9wZXJ0eSB0aGVuIGl0J3MgZm9yIHN1cmUgYm90aCBgZW51bWVyYWJsZWAg
YW5kCisgICAgICAgIC8vIGBjb25maWd1cmFibGVgLgorICAgICAgICB2YXIgZGVzY3JpcHRvciA9
ICB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9OworCisgICAgICAgIC8v
IElmIEpTIGVuZ2luZSBzdXBwb3J0cyBhY2Nlc3NvciBwcm9wZXJ0aWVzIHRoZW4gcHJvcGVydHkg
bWF5IGJlIGEKKyAgICAgICAgLy8gZ2V0dGVyIG9yIHNldHRlci4KKyAgICAgICAgaWYgKHN1cHBv
cnRzQWNjZXNzb3JzKSB7CisgICAgICAgICAgICAvLyBVbmZvcnR1bmF0ZWx5IGBfX2xvb2t1cEdl
dHRlcl9fYCB3aWxsIHJldHVybiBhIGdldHRlciBldmVuCisgICAgICAgICAgICAvLyBpZiBvYmpl
Y3QgaGFzIG93biBub24gZ2V0dGVyIHByb3BlcnR5IGFsb25nIHdpdGggYSBzYW1lIG5hbWVkCisg
ICAgICAgICAgICAvLyBpbmhlcml0ZWQgZ2V0dGVyLiBUbyBhdm9pZCBtaXNiZWhhdmlvciB3ZSB0
ZW1wb3JhcnkgcmVtb3ZlCisgICAgICAgICAgICAvLyBgX19wcm90b19fYCBzbyB0aGF0IGBfX2xv
b2t1cEdldHRlcl9fYCB3aWxsIHJldHVybiBnZXR0ZXIgb25seQorICAgICAgICAgICAgLy8gaWYg
aXQncyBvd25lZCBieSBhbiBvYmplY3QuCisgICAgICAgICAgICB2YXIgcHJvdG90eXBlID0gb2Jq
ZWN0Ll9fcHJvdG9fXzsKKyAgICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGVP
Zk9iamVjdDsKKworICAgICAgICAgICAgdmFyIGdldHRlciA9IGxvb2t1cEdldHRlcihvYmplY3Qs
IHByb3BlcnR5KTsKKyAgICAgICAgICAgIHZhciBzZXR0ZXIgPSBsb29rdXBTZXR0ZXIob2JqZWN0
LCBwcm9wZXJ0eSk7CisKKyAgICAgICAgICAgIC8vIE9uY2Ugd2UgaGF2ZSBnZXR0ZXIgYW5kIHNl
dHRlciB3ZSBjYW4gcHV0IHZhbHVlcyBiYWNrLgorICAgICAgICAgICAgb2JqZWN0Ll9fcHJvdG9f
XyA9IHByb3RvdHlwZTsKKworICAgICAgICAgICAgaWYgKGdldHRlciB8fCBzZXR0ZXIpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoZ2V0dGVyKSB7CisgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0
b3IuZ2V0ID0gZ2V0dGVyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
c2V0dGVyKSB7CisgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0ID0gc2V0dGVyOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBJZiBpdCB3YXMgYWNjZXNzb3Ig
cHJvcGVydHkgd2UncmUgZG9uZSBhbmQgcmV0dXJuIGhlcmUKKyAgICAgICAgICAgICAgICAvLyBp
biBvcmRlciB0byBhdm9pZCBhZGRpbmcgYHZhbHVlYCB0byB0aGUgZGVzY3JpcHRvci4KKyAgICAg
ICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIC8vIElmIHdlIGdvdCB0aGlzIGZhciB3ZSBrbm93IHRoYXQgb2JqZWN0IGhhcyBh
biBvd24gcHJvcGVydHkgdGhhdCBpcworICAgICAgICAvLyBub3QgYW4gYWNjZXNzb3Igc28gd2Ug
c2V0IGl0IGFzIGEgdmFsdWUgYW5kIHJldHVybiBkZXNjcmlwdG9yLgorICAgICAgICBkZXNjcmlw
dG9yLnZhbHVlID0gb2JqZWN0W3Byb3BlcnR5XTsKKyAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7
CisgICAgfTsKK30KKworLy8gRVM1IDE1LjIuMy40CisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20v
I3gxNS4yLjMuNAoraWYgKCFPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcykgeworICAgIE9iamVj
dC5nZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhvYmpl
Y3QpIHsKKyAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCk7CisgICAgfTsKK30KKwor
Ly8gRVM1IDE1LjIuMy41CisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMuNQoraWYg
KCFPYmplY3QuY3JlYXRlKSB7CisgICAgT2JqZWN0LmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShw
cm90b3R5cGUsIHByb3BlcnRpZXMpIHsKKyAgICAgICAgdmFyIG9iamVjdDsKKyAgICAgICAgaWYg
KHByb3RvdHlwZSA9PT0gbnVsbCkgeworICAgICAgICAgICAgb2JqZWN0ID0geyAiX19wcm90b19f
IjogbnVsbCB9OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm90
b3R5cGUgIT0gIm9iamVjdCIpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9y
KCJ0eXBlb2YgcHJvdG90eXBlWyIrKHR5cGVvZiBwcm90b3R5cGUpKyJdICE9ICdvYmplY3QnIik7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgVHlwZSA9IGZ1bmN0aW9uICgpIHt9Owor
ICAgICAgICAgICAgVHlwZS5wcm90b3R5cGUgPSBwcm90b3R5cGU7CisgICAgICAgICAgICBvYmpl
Y3QgPSBuZXcgVHlwZSgpOworICAgICAgICAgICAgLy8gSUUgaGFzIG5vIGJ1aWx0LWluIGltcGxl
bWVudGF0aW9uIG9mIGBPYmplY3QuZ2V0UHJvdG90eXBlT2ZgCisgICAgICAgICAgICAvLyBuZWl0
aGVyIGBfX3Byb3RvX19gLCBidXQgdGhpcyBtYW51YWxseSBzZXR0aW5nIGBfX3Byb3RvX19gIHdp
bGwKKyAgICAgICAgICAgIC8vIGd1YXJhbnRlZSB0aGF0IGBPYmplY3QuZ2V0UHJvdG90eXBlT2Zg
IHdpbGwgd29yayBhcyBleHBlY3RlZCB3aXRoCisgICAgICAgICAgICAvLyBvYmplY3RzIGNyZWF0
ZWQgdXNpbmcgYE9iamVjdC5jcmVhdGVgCisgICAgICAgICAgICBvYmplY3QuX19wcm90b19fID0g
cHJvdG90eXBlOworICAgICAgICB9CisgICAgICAgIGlmIChwcm9wZXJ0aWVzICE9PSB2b2lkIDAp
IHsKKyAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG9iamVjdCwgcHJvcGVydGll
cyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9OworfQorCisvLyBF
UzUgMTUuMi4zLjYKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy42CisKKy8vIFBh
dGNoIGZvciBXZWJLaXQgYW5kIElFOCBzdGFuZGFyZCBtb2RlCisvLyBEZXNpZ25lZCBieSBoYXgg
PGhheC5naXRodWIuY29tPgorLy8gcmVsYXRlZCBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL2ty
aXNrb3dhbC9lczUtc2hpbS9pc3N1ZXMjaXNzdWUvNQorLy8gSUU4IFJlZmVyZW5jZToKKy8vICAg
ICBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvZGQyODI5MDAuYXNweAor
Ly8gICAgIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9kZDIyOTkxNi5h
c3B4CisvLyBXZWJLaXQgQnVnczoKKy8vICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzY0MjMKKworZnVuY3Rpb24gZG9lc0RlZmluZVByb3BlcnR5V29yayhvYmpl
Y3QpIHsKKyAgICB0cnkgeworICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCAi
c2VudGluZWwiLCB7fSk7CisgICAgICAgIHJldHVybiAic2VudGluZWwiIGluIG9iamVjdDsKKyAg
ICB9IGNhdGNoIChleGNlcHRpb24pIHsKKyAgICAgICAgLy8gcmV0dXJucyBmYWxzeQorICAgIH0K
K30KKworLy8gY2hlY2sgd2hldGhlciBkZWZpbmVQcm9wZXJ0eSB3b3JrcyBpZiBpdCdzIGdpdmVu
LiBPdGhlcndpc2UsCisvLyBzaGltIHBhcnRpYWxseS4KK2lmIChPYmplY3QuZGVmaW5lUHJvcGVy
dHkpIHsKKyAgICB2YXIgZGVmaW5lUHJvcGVydHlXb3Jrc09uT2JqZWN0ID0gZG9lc0RlZmluZVBy
b3BlcnR5V29yayh7fSk7CisgICAgdmFyIGRlZmluZVByb3BlcnR5V29ya3NPbkRvbSA9IHR5cGVv
ZiBkb2N1bWVudCA9PSAidW5kZWZpbmVkIiB8fAorICAgICAgICBkb2VzRGVmaW5lUHJvcGVydHlX
b3JrKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKTsKKyAgICBpZiAoIWRlZmluZVByb3Bl
cnR5V29ya3NPbk9iamVjdCB8fCAhZGVmaW5lUHJvcGVydHlXb3Jrc09uRG9tKSB7CisgICAgICAg
IHZhciBkZWZpbmVQcm9wZXJ0eUZhbGxiYWNrID0gT2JqZWN0LmRlZmluZVByb3BlcnR5OworICAg
IH0KK30KKworaWYgKCFPYmplY3QuZGVmaW5lUHJvcGVydHkgfHwgZGVmaW5lUHJvcGVydHlGYWxs
YmFjaykgeworICAgIHZhciBFUlJfTk9OX09CSkVDVF9ERVNDUklQVE9SID0gIlByb3BlcnR5IGRl
c2NyaXB0aW9uIG11c3QgYmUgYW4gb2JqZWN0OiAiOworICAgIHZhciBFUlJfTk9OX09CSkVDVF9U
QVJHRVQgPSAiT2JqZWN0LmRlZmluZVByb3BlcnR5IGNhbGxlZCBvbiBub24tb2JqZWN0OiAiCisg
ICAgdmFyIEVSUl9BQ0NFU1NPUlNfTk9UX1NVUFBPUlRFRCA9ICJnZXR0ZXJzICYgc2V0dGVycyBj
YW4gbm90IGJlIGRlZmluZWQgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJvbiB0aGlzIGphdmFzY3JpcHQgZW5naW5lIjsKKworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0
b3IpIHsKKyAgICAgICAgaWYgKCh0eXBlb2Ygb2JqZWN0ICE9ICJvYmplY3QiICYmIHR5cGVvZiBv
YmplY3QgIT0gImZ1bmN0aW9uIikgfHwgb2JqZWN0ID09PSBudWxsKSB7CisgICAgICAgICAgICB0
aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9OT05fT0JKRUNUX1RBUkdFVCArIG9iamVjdCk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKCh0eXBlb2YgZGVzY3JpcHRvciAhPSAib2JqZWN0IiAmJiB0eXBl
b2YgZGVzY3JpcHRvciAhPSAiZnVuY3Rpb24iKSB8fCBkZXNjcmlwdG9yID09PSBudWxsKSB7Cisg
ICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9OT05fT0JKRUNUX0RFU0NSSVBUT1Ig
KyBkZXNjcmlwdG9yKTsKKyAgICAgICAgfQorICAgICAgICAvLyBtYWtlIGEgdmFsaWFudCBhdHRl
bXB0IHRvIHVzZSB0aGUgcmVhbCBkZWZpbmVQcm9wZXJ0eQorICAgICAgICAvLyBmb3IgSTgncyBE
T00gZWxlbWVudHMuCisgICAgICAgIGlmIChkZWZpbmVQcm9wZXJ0eUZhbGxiYWNrKSB7CisgICAg
ICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0eUZhbGxi
YWNrLmNhbGwoT2JqZWN0LCBvYmplY3QsIHByb3BlcnR5LCBkZXNjcmlwdG9yKTsKKyAgICAgICAg
ICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikgeworICAgICAgICAgICAgICAgIC8vIHRyeSB0aGUgc2hp
bSBpZiB0aGUgcmVhbCBvbmUgZG9lc24ndCB3b3JrCisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICAvLyBJZiBpdCdzIGEgZGF0YSBwcm9wZXJ0eS4KKyAgICAgICAgaWYgKG93bnMo
ZGVzY3JpcHRvciwgInZhbHVlIikpIHsKKyAgICAgICAgICAgIC8vIGZhaWwgc2lsZW50bHkgaWYg
IndyaXRhYmxlIiwgImVudW1lcmFibGUiLCBvciAiY29uZmlndXJhYmxlIgorICAgICAgICAgICAg
Ly8gYXJlIHJlcXVlc3RlZCBidXQgbm90IHN1cHBvcnRlZAorICAgICAgICAgICAgLyoKKyAgICAg
ICAgICAgIC8vIGFsdGVybmF0ZSBhcHByb2FjaDoKKyAgICAgICAgICAgIGlmICggLy8gY2FuJ3Qg
aW1wbGVtZW50IHRoZXNlIGZlYXR1cmVzOyBhbGxvdyBmYWxzZSBidXQgbm90IHRydWUKKyAgICAg
ICAgICAgICAgICAhKG93bnMoZGVzY3JpcHRvciwgIndyaXRhYmxlIikgPyBkZXNjcmlwdG9yLndy
aXRhYmxlIDogdHJ1ZSkgfHwKKyAgICAgICAgICAgICAgICAhKG93bnMoZGVzY3JpcHRvciwgImVu
dW1lcmFibGUiKSA/IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA6IHRydWUpIHx8CisgICAgICAgICAg
ICAgICAgIShvd25zKGRlc2NyaXB0b3IsICJjb25maWd1cmFibGUiKSA/IGRlc2NyaXB0b3IuY29u
ZmlndXJhYmxlIDogdHJ1ZSkKKyAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgUmFuZ2VFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgIlRoaXMgaW1wbGVtZW50YXRpb24g
b2YgT2JqZWN0LmRlZmluZVByb3BlcnR5IGRvZXMgbm90ICIgKworICAgICAgICAgICAgICAgICAg
ICAic3VwcG9ydCBjb25maWd1cmFibGUsIGVudW1lcmFibGUsIG9yIHdyaXRhYmxlLiIKKyAgICAg
ICAgICAgICAgICApOworICAgICAgICAgICAgKi8KKworICAgICAgICAgICAgaWYgKHN1cHBvcnRz
QWNjZXNzb3JzICYmIChsb29rdXBHZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSkgfHwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va3VwU2V0dGVyKG9iamVjdCwgcHJvcGVy
dHkpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBBcyBhY2Nlc3NvcnMgYXJl
IHN1cHBvcnRlZCBvbmx5IG9uIGVuZ2luZXMgaW1wbGVtZW50aW5nCisgICAgICAgICAgICAgICAg
Ly8gYF9fcHJvdG9fX2Agd2UgY2FuIHNhZmVseSBvdmVycmlkZSBgX19wcm90b19fYCB3aGlsZSBk
ZWZpbmluZworICAgICAgICAgICAgICAgIC8vIGEgcHJvcGVydHkgdG8gbWFrZSBzdXJlIHRoYXQg
d2UgZG9uJ3QgaGl0IGFuIGluaGVyaXRlZAorICAgICAgICAgICAgICAgIC8vIGFjY2Vzc29yLgor
ICAgICAgICAgICAgICAgIHZhciBwcm90b3R5cGUgPSBvYmplY3QuX19wcm90b19fOworICAgICAg
ICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGVPZk9iamVjdDsKKyAgICAgICAg
ICAgICAgICAvLyBEZWxldGluZyBhIHByb3BlcnR5IGFueXdheSBzaW5jZSBnZXR0ZXIgLyBzZXR0
ZXIgbWF5IGJlCisgICAgICAgICAgICAgICAgLy8gZGVmaW5lZCBvbiBvYmplY3QgaXRzZWxmLgor
ICAgICAgICAgICAgICAgIGRlbGV0ZSBvYmplY3RbcHJvcGVydHldOworICAgICAgICAgICAgICAg
IG9iamVjdFtwcm9wZXJ0eV0gPSBkZXNjcmlwdG9yLnZhbHVlOworICAgICAgICAgICAgICAgIC8v
IFNldHRpbmcgb3JpZ2luYWwgYF9fcHJvdG9fX2AgYmFjayBub3cuCisgICAgICAgICAgICAgICAg
b2JqZWN0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgb2JqZWN0W3Byb3BlcnR5XSA9IGRlc2NyaXB0b3IudmFsdWU7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoIXN1cHBvcnRzQWNjZXNz
b3JzKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJfQUNDRVNTT1JT
X05PVF9TVVBQT1JURUQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gSWYgd2UgZ290
IHRoYXQgZmFyIHRoZW4gZ2V0dGVycyBhbmQgc2V0dGVycyBjYW4gYmUgZGVmaW5lZCAhIQorICAg
ICAgICAgICAgaWYgKG93bnMoZGVzY3JpcHRvciwgImdldCIpKSB7CisgICAgICAgICAgICAgICAg
ZGVmaW5lR2V0dGVyKG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0b3IuZ2V0KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChvd25zKGRlc2NyaXB0b3IsICJzZXQiKSkgeworICAgICAg
ICAgICAgICAgIGRlZmluZVNldHRlcihvYmplY3QsIHByb3BlcnR5LCBkZXNjcmlwdG9yLnNldCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9
OworfQorCisvLyBFUzUgMTUuMi4zLjcKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIu
My43CitpZiAoIU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKSB7CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKG9iamVjdCwgcHJvcGVydGllcykg
eworICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzKSB7CisgICAgICAgICAg
ICBpZiAob3ducyhwcm9wZXJ0aWVzLCBwcm9wZXJ0eSkgJiYgcHJvcGVydHkgIT0gIl9fcHJvdG9f
XyIpIHsKKyAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9w
ZXJ0eSwgcHJvcGVydGllc1twcm9wZXJ0eV0pOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfTsKK30KKworLy8gRVM1IDE1LjIuMy44CisvLyBo
dHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMuOAoraWYgKCFPYmplY3Quc2VhbCkgeworICAg
IE9iamVjdC5zZWFsID0gZnVuY3Rpb24gc2VhbChvYmplY3QpIHsKKyAgICAgICAgLy8gdGhpcyBp
cyBtaXNsZWFkaW5nIGFuZCBicmVha3MgZmVhdHVyZS1kZXRlY3Rpb24sIGJ1dAorICAgICAgICAv
LyBhbGxvd3MgInNlY3VyYWJsZSIgY29kZSB0byAiZ3JhY2VmdWxseSIgZGVncmFkZSB0byB3b3Jr
aW5nCisgICAgICAgIC8vIGJ1dCBpbnNlY3VyZSBjb2RlLgorICAgICAgICByZXR1cm4gb2JqZWN0
OworICAgIH07Cit9CisKKy8vIEVTNSAxNS4yLjMuOQorLy8gaHR0cDovL2VzNS5naXRodWIuY29t
LyN4MTUuMi4zLjkKK2lmICghT2JqZWN0LmZyZWV6ZSkgeworICAgIE9iamVjdC5mcmVlemUgPSBm
dW5jdGlvbiBmcmVlemUob2JqZWN0KSB7CisgICAgICAgIC8vIHRoaXMgaXMgbWlzbGVhZGluZyBh
bmQgYnJlYWtzIGZlYXR1cmUtZGV0ZWN0aW9uLCBidXQKKyAgICAgICAgLy8gYWxsb3dzICJzZWN1
cmFibGUiIGNvZGUgdG8gImdyYWNlZnVsbHkiIGRlZ3JhZGUgdG8gd29ya2luZworICAgICAgICAv
LyBidXQgaW5zZWN1cmUgY29kZS4KKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9OworfQor
CisvLyBkZXRlY3QgYSBSaGlubyBidWcgYW5kIHBhdGNoIGl0Cit0cnkgeworICAgIE9iamVjdC5m
cmVlemUoZnVuY3Rpb24gKCkge30pOworfSBjYXRjaCAoZXhjZXB0aW9uKSB7CisgICAgT2JqZWN0
LmZyZWV6ZSA9IChmdW5jdGlvbiBmcmVlemUoZnJlZXplT2JqZWN0KSB7CisgICAgICAgIHJldHVy
biBmdW5jdGlvbiBmcmVlemUob2JqZWN0KSB7CisgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVj
dCA9PSAiZnVuY3Rpb24iKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZyZWV6ZU9iamVjdChvYmpl
Y3QpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0pKE9iamVjdC5mcmVlemUpOwor
fQorCisvLyBFUzUgMTUuMi4zLjEwCisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMu
MTAKK2lmICghT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKSB7CisgICAgT2JqZWN0LnByZXZlbnRF
eHRlbnNpb25zID0gZnVuY3Rpb24gcHJldmVudEV4dGVuc2lvbnMob2JqZWN0KSB7CisgICAgICAg
IC8vIHRoaXMgaXMgbWlzbGVhZGluZyBhbmQgYnJlYWtzIGZlYXR1cmUtZGV0ZWN0aW9uLCBidXQK
KyAgICAgICAgLy8gYWxsb3dzICJzZWN1cmFibGUiIGNvZGUgdG8gImdyYWNlZnVsbHkiIGRlZ3Jh
ZGUgdG8gd29ya2luZworICAgICAgICAvLyBidXQgaW5zZWN1cmUgY29kZS4KKyAgICAgICAgcmV0
dXJuIG9iamVjdDsKKyAgICB9OworfQorCisvLyBFUzUgMTUuMi4zLjExCisvLyBodHRwOi8vZXM1
LmdpdGh1Yi5jb20vI3gxNS4yLjMuMTEKK2lmICghT2JqZWN0LmlzU2VhbGVkKSB7CisgICAgT2Jq
ZWN0LmlzU2VhbGVkID0gZnVuY3Rpb24gaXNTZWFsZWQob2JqZWN0KSB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9OworfQorCisvLyBFUzUgMTUuMi4zLjEyCisvLyBodHRwOi8vZXM1Lmdp
dGh1Yi5jb20vI3gxNS4yLjMuMTIKK2lmICghT2JqZWN0LmlzRnJvemVuKSB7CisgICAgT2JqZWN0
LmlzRnJvemVuID0gZnVuY3Rpb24gaXNGcm96ZW4ob2JqZWN0KSB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9OworfQorCisvLyBFUzUgMTUuMi4zLjEzCisvLyBodHRwOi8vZXM1LmdpdGh1
Yi5jb20vI3gxNS4yLjMuMTMKK2lmICghT2JqZWN0LmlzRXh0ZW5zaWJsZSkgeworICAgIE9iamVj
dC5pc0V4dGVuc2libGUgPSBmdW5jdGlvbiBpc0V4dGVuc2libGUob2JqZWN0KSB7CisgICAgICAg
IC8vIDEuIElmIFR5cGUoTykgaXMgbm90IE9iamVjdCB0aHJvdyBhIFR5cGVFcnJvciBleGNlcHRp
b24uCisgICAgICAgIGlmIChPYmplY3Qob2JqZWN0KSAhPT0gb2JqZWN0KSB7CisgICAgICAgICAg
ICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7IC8vIFRPRE8gbWVzc2FnZQorICAgICAgICB9CisgICAg
ICAgIC8vIDIuIFJldHVybiB0aGUgQm9vbGVhbiB2YWx1ZSBvZiB0aGUgW1tFeHRlbnNpYmxlXV0g
aW50ZXJuYWwgcHJvcGVydHkgb2YgTy4KKyAgICAgICAgdmFyIG5hbWUgPSAnJzsKKyAgICAgICAg
d2hpbGUgKG93bnMob2JqZWN0LCBuYW1lKSkgeworICAgICAgICAgICAgbmFtZSArPSAnPyc7Cisg
ICAgICAgIH0KKyAgICAgICAgb2JqZWN0W25hbWVdID0gdHJ1ZTsKKyAgICAgICAgdmFyIHJldHVy
blZhbHVlID0gb3ducyhvYmplY3QsIG5hbWUpOworICAgICAgICBkZWxldGUgb2JqZWN0W25hbWVd
OworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgfTsKK30KKworfSk7CmRpZmYgLS1n
aXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9m
bGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL2VzNS1zaGFtLm1pbi5qcyBi
L1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdo
dGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vZXM1LXNoYW0ubWluLmpzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmEzNzg1MDM1ODM5NTU1ODBlOTc2MTQyODAyY2ZiYmI5MGFlNGIxNDEKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291
cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL2VzNS1zaGFtLm1p
bi5qcwpAQCAtMCwwICsxLDYgQEAKKyhmdW5jdGlvbihkKXsiZnVuY3Rpb24iPT10eXBlb2YgZGVm
aW5lP2RlZmluZShkKToiZnVuY3Rpb24iPT10eXBlb2YgWVVJP1lVSS5hZGQoImVzNS1zaGFtIixk
KTpkKCl9KShmdW5jdGlvbigpe2Z1bmN0aW9uIGQoYSl7dHJ5e3JldHVybiBPYmplY3QuZGVmaW5l
UHJvcGVydHkoYSwic2VudGluZWwiLHt9KSwic2VudGluZWwiaW4gYX1jYXRjaChjKXt9fU9iamVj
dC5nZXRQcm90b3R5cGVPZnx8KE9iamVjdC5nZXRQcm90b3R5cGVPZj1mdW5jdGlvbihhKXtyZXR1
cm4gYS5fX3Byb3RvX198fChhLmNvbnN0cnVjdG9yP2EuY29uc3RydWN0b3IucHJvdG90eXBlOnBy
b3RvdHlwZU9mT2JqZWN0KX0pO09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3J8fChPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yPWZ1bmN0aW9uKGEsYyl7aWYodHlwZW9mIGEhPSJv
YmplY3QiJiZ0eXBlb2YgYSE9ImZ1bmN0aW9uInx8YT09PW51bGwpdGhyb3cgbmV3IFR5cGVFcnJv
cigiT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciBjYWxsZWQgb24gYSBub24tb2JqZWN0
OiAiKworYSk7aWYob3ducyhhLGMpKXt2YXIgYj17ZW51bWVyYWJsZTp0cnVlLGNvbmZpZ3VyYWJs
ZTp0cnVlfTtpZihzdXBwb3J0c0FjY2Vzc29ycyl7dmFyIGQ9YS5fX3Byb3RvX187YS5fX3Byb3Rv
X189cHJvdG90eXBlT2ZPYmplY3Q7dmFyIGY9bG9va3VwR2V0dGVyKGEsYyksZT1sb29rdXBTZXR0
ZXIoYSxjKTthLl9fcHJvdG9fXz1kO2lmKGZ8fGUpe2lmKGYpYi5nZXQ9ZjtpZihlKWIuc2V0PWU7
cmV0dXJuIGJ9fWIudmFsdWU9YVtjXTtyZXR1cm4gYn19KTtPYmplY3QuZ2V0T3duUHJvcGVydHlO
YW1lc3x8KE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzPWZ1bmN0aW9uKGEpe3JldHVybiBPYmpl
Y3Qua2V5cyhhKX0pO09iamVjdC5jcmVhdGV8fChPYmplY3QuY3JlYXRlPWZ1bmN0aW9uKGEsYyl7
dmFyIGI7aWYoYT09PW51bGwpYj17X19wcm90b19fOm51bGx9O2Vsc2V7aWYodHlwZW9mIGEhPSJv
YmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoInR5cGVvZiBwcm90b3R5cGVbIit0eXBlb2YgYSsK
KyJdICE9ICdvYmplY3QnIik7Yj1mdW5jdGlvbigpe307Yi5wcm90b3R5cGU9YTtiPW5ldyBiO2Iu
X19wcm90b19fPWF9YyE9PXZvaWQgMCYmT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYixjKTtyZXR1
cm4gYn0pO2lmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSl7dmFyIGc9ZCh7fSksaD0idW5kZWZpbmVk
Ij09dHlwZW9mIGRvY3VtZW50fHxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKTtpZigh
Z3x8IWgpdmFyIGU9T2JqZWN0LmRlZmluZVByb3BlcnR5fWlmKCFPYmplY3QuZGVmaW5lUHJvcGVy
dHl8fGUpT2JqZWN0LmRlZmluZVByb3BlcnR5PWZ1bmN0aW9uKGEsYyxiKXtpZih0eXBlb2YgYSE9
Im9iamVjdCImJnR5cGVvZiBhIT0iZnVuY3Rpb24ifHxhPT09bnVsbCl0aHJvdyBuZXcgVHlwZUVy
cm9yKCJPYmplY3QuZGVmaW5lUHJvcGVydHkgY2FsbGVkIG9uIG5vbi1vYmplY3Q6ICIrYSk7aWYo
dHlwZW9mIGIhPSJvYmplY3QiJiZ0eXBlb2YgYiE9ImZ1bmN0aW9uInx8Yj09PQorbnVsbCl0aHJv
dyBuZXcgVHlwZUVycm9yKCJQcm9wZXJ0eSBkZXNjcmlwdGlvbiBtdXN0IGJlIGFuIG9iamVjdDog
IitiKTtpZihlKXRyeXtyZXR1cm4gZS5jYWxsKE9iamVjdCxhLGMsYil9Y2F0Y2goZCl7fWlmKG93
bnMoYiwidmFsdWUiKSlpZihzdXBwb3J0c0FjY2Vzc29ycyYmKGxvb2t1cEdldHRlcihhLGMpfHxs
b29rdXBTZXR0ZXIoYSxjKSkpe3ZhciBmPWEuX19wcm90b19fO2EuX19wcm90b19fPXByb3RvdHlw
ZU9mT2JqZWN0O2RlbGV0ZSBhW2NdO2FbY109Yi52YWx1ZTthLl9fcHJvdG9fXz1mfWVsc2UgYVtj
XT1iLnZhbHVlO2Vsc2V7aWYoIXN1cHBvcnRzQWNjZXNzb3JzKXRocm93IG5ldyBUeXBlRXJyb3Io
ImdldHRlcnMgJiBzZXR0ZXJzIGNhbiBub3QgYmUgZGVmaW5lZCBvbiB0aGlzIGphdmFzY3JpcHQg
ZW5naW5lIik7b3ducyhiLCJnZXQiKSYmZGVmaW5lR2V0dGVyKGEsYyxiLmdldCk7b3ducyhiLCJz
ZXQiKSYmZGVmaW5lU2V0dGVyKGEsYyxiLnNldCl9cmV0dXJuIGF9OworT2JqZWN0LmRlZmluZVBy
b3BlcnRpZXN8fChPYmplY3QuZGVmaW5lUHJvcGVydGllcz1mdW5jdGlvbihhLGMpe2Zvcih2YXIg
YiBpbiBjKW93bnMoYyxiKSYmYiE9Il9fcHJvdG9fXyImJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShh
LGIsY1tiXSk7cmV0dXJuIGF9KTtPYmplY3Quc2VhbHx8KE9iamVjdC5zZWFsPWZ1bmN0aW9uKGEp
e3JldHVybiBhfSk7T2JqZWN0LmZyZWV6ZXx8KE9iamVjdC5mcmVlemU9ZnVuY3Rpb24oYSl7cmV0
dXJuIGF9KTt0cnl7T2JqZWN0LmZyZWV6ZShmdW5jdGlvbigpe30pfWNhdGNoKGope3ZhciBpPU9i
amVjdC5mcmVlemU7T2JqZWN0LmZyZWV6ZT1mdW5jdGlvbihhKXtyZXR1cm4gdHlwZW9mIGE9PSJm
dW5jdGlvbiI/YTppKGEpfX1PYmplY3QucHJldmVudEV4dGVuc2lvbnN8fChPYmplY3QucHJldmVu
dEV4dGVuc2lvbnM9ZnVuY3Rpb24oYSl7cmV0dXJuIGF9KTtPYmplY3QuaXNTZWFsZWR8fChPYmpl
Y3QuaXNTZWFsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZmFsc2V9KTsKK09iamVjdC5pc0Zyb3plbnx8
KE9iamVjdC5pc0Zyb3plbj1mdW5jdGlvbigpe3JldHVybiBmYWxzZX0pO09iamVjdC5pc0V4dGVu
c2libGV8fChPYmplY3QuaXNFeHRlbnNpYmxlPWZ1bmN0aW9uKGEpe2lmKE9iamVjdChhKSE9PWEp
dGhyb3cgbmV3IFR5cGVFcnJvcjtmb3IodmFyIGM9IiI7b3ducyhhLGMpOyljPWMrIj8iO2FbY109
dHJ1ZTt2YXIgYj1vd25zKGEsYyk7ZGVsZXRlIGFbY107cmV0dXJuIGJ9KX0pOwpkaWZmIC0tZ2l0
IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvZmxp
Z2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS9lczUtc2hpbS5qcyBiL1dlYnNp
dGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdodGpzLWV4
YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vZXM1LXNoaW0uanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDU5
MTk3ZGI0NWY2NTNiMTg5NjBhOGU4MjI0MzFhMWYyMmVkMzk3NgotLS0gL2Rldi9udWxsCisrKyBi
L1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdo
dGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vZXM1LXNoaW0uanMKQEAgLTAsMCAr
MSw3NzggQEAKKy8vIENvcHlyaWdodCAyMDA5LTIwMTIgYnkgY29udHJpYnV0b3JzLCBNSVQgTGlj
ZW5zZQorLy8gdmltOiB0cz00IHN0cz00IHN3PTQgZXhwYW5kdGFiCisKKy8vIE1vZHVsZSBzeXN0
ZW1zIG1hZ2ljIGRhbmNlCisoZnVuY3Rpb24gKGRlZmluaXRpb24pIHsKKyAgICAvLyBSZXF1aXJl
SlMKKyAgICBpZiAodHlwZW9mIGRlZmluZSA9PSAiZnVuY3Rpb24iKSB7CisgICAgICAgIGRlZmlu
ZShkZWZpbml0aW9uKTsKKyAgICAvLyBZVUkzCisgICAgfSBlbHNlIGlmICh0eXBlb2YgWVVJID09
ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgWVVJLmFkZCgiZXM1IiwgZGVmaW5pdGlvbik7CisgICAg
Ly8gQ29tbW9uSlMgYW5kIDxzY3JpcHQ+CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVmaW5pdGlv
bigpOworICAgIH0KK30pKGZ1bmN0aW9uICgpIHsKKworLyoqCisgKiBCcmluZ3MgYW4gZW52aXJv
bm1lbnQgYXMgY2xvc2UgdG8gRUNNQVNjcmlwdCA1IGNvbXBsaWFuY2UKKyAqIGFzIGlzIHBvc3Np
YmxlIHdpdGggdGhlIGZhY2lsaXRpZXMgb2YgZXJzdHdoaWxlIGVuZ2luZXMuCisgKgorICogQW5u
b3RhdGVkIEVTNTogaHR0cDovL2VzNS5naXRodWIuY29tLyAoc3BlY2lmaWMgbGlua3MgYmVsb3cp
CisgKiBFUzUgU3BlYzogaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL3B1YmxpY2F0
aW9ucy9maWxlcy9FQ01BLVNUL0VjbWEtMjYyLnBkZgorICogUmVxdWlyZWQgcmVhZGluZzogaHR0
cDovL2phdmFzY3JpcHR3ZWJsb2cud29yZHByZXNzLmNvbS8yMDExLzEyLzA1L2V4dGVuZGluZy1q
YXZhc2NyaXB0LW5hdGl2ZXMvCisgKi8KKworLy8KKy8vIEZ1bmN0aW9uCisvLyA9PT09PT09PQor
Ly8KKworLy8gRVMtNSAxNS4zLjQuNQorLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuMy40
LjUKKworaWYgKCFGdW5jdGlvbi5wcm90b3R5cGUuYmluZCkgeworICAgIEZ1bmN0aW9uLnByb3Rv
dHlwZS5iaW5kID0gZnVuY3Rpb24gYmluZCh0aGF0KSB7IC8vIC5sZW5ndGggaXMgMQorICAgICAg
ICAvLyAxLiBMZXQgVGFyZ2V0IGJlIHRoZSB0aGlzIHZhbHVlLgorICAgICAgICB2YXIgdGFyZ2V0
ID0gdGhpczsKKyAgICAgICAgLy8gMi4gSWYgSXNDYWxsYWJsZShUYXJnZXQpIGlzIGZhbHNlLCB0
aHJvdyBhIFR5cGVFcnJvciBleGNlcHRpb24uCisgICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ICE9
ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9u
LnByb3RvdHlwZS5iaW5kIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgIiArIHRhcmdldCk7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gMy4gTGV0IEEgYmUgYSBuZXcgKHBvc3NpYmx5IGVtcHR5KSBpbnRl
cm5hbCBsaXN0IG9mIGFsbCBvZiB0aGUKKyAgICAgICAgLy8gICBhcmd1bWVudCB2YWx1ZXMgcHJv
dmlkZWQgYWZ0ZXIgdGhpc0FyZyAoYXJnMSwgYXJnMiBldGMpLCBpbiBvcmRlci4KKyAgICAgICAg
Ly8gWFhYIHNsaWNlZEFyZ3Mgd2lsbCBzdGFuZCBpbiBmb3IgIkEiIGlmIHVzZWQKKyAgICAgICAg
dmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7IC8vIGZvciBub3JtYWwgY2FsbAor
ICAgICAgICAvLyA0LiBMZXQgRiBiZSBhIG5ldyBuYXRpdmUgRUNNQVNjcmlwdCBvYmplY3QuCisg
ICAgICAgIC8vIDExLiBTZXQgdGhlIFtbUHJvdG90eXBlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2Yg
RiB0byB0aGUgc3RhbmRhcmQKKyAgICAgICAgLy8gICBidWlsdC1pbiBGdW5jdGlvbiBwcm90b3R5
cGUgb2JqZWN0IGFzIHNwZWNpZmllZCBpbiAxNS4zLjMuMS4KKyAgICAgICAgLy8gMTIuIFNldCB0
aGUgW1tDYWxsXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgRiBhcyBkZXNjcmliZWQgaW4KKyAgICAg
ICAgLy8gICAxNS4zLjQuNS4xLgorICAgICAgICAvLyAxMy4gU2V0IHRoZSBbW0NvbnN0cnVjdF1d
IGludGVybmFsIHByb3BlcnR5IG9mIEYgYXMgZGVzY3JpYmVkIGluCisgICAgICAgIC8vICAgMTUu
My40LjUuMi4KKyAgICAgICAgLy8gMTQuIFNldCB0aGUgW1tIYXNJbnN0YW5jZV1dIGludGVybmFs
IHByb3BlcnR5IG9mIEYgYXMgZGVzY3JpYmVkIGluCisgICAgICAgIC8vICAgMTUuMy40LjUuMy4K
KyAgICAgICAgdmFyIGJvdW5kID0gZnVuY3Rpb24gKCkgeworCisgICAgICAgICAgICBpZiAodGhp
cyBpbnN0YW5jZW9mIGJvdW5kKSB7CisgICAgICAgICAgICAgICAgLy8gMTUuMy40LjUuMiBbW0Nv
bnN0cnVjdF1dCisgICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgW1tDb25zdHJ1Y3RdXSBpbnRl
cm5hbCBtZXRob2Qgb2YgYSBmdW5jdGlvbiBvYmplY3QsCisgICAgICAgICAgICAgICAgLy8gRiB0
aGF0IHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBiaW5kIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGEK
KyAgICAgICAgICAgICAgICAvLyBsaXN0IG9mIGFyZ3VtZW50cyBFeHRyYUFyZ3MsIHRoZSBmb2xs
b3dpbmcgc3RlcHMgYXJlIHRha2VuOgorICAgICAgICAgICAgICAgIC8vIDEuIExldCB0YXJnZXQg
YmUgdGhlIHZhbHVlIG9mIEYncyBbW1RhcmdldEZ1bmN0aW9uXV0KKyAgICAgICAgICAgICAgICAv
LyAgIGludGVybmFsIHByb3BlcnR5LgorICAgICAgICAgICAgICAgIC8vIDIuIElmIHRhcmdldCBo
YXMgbm8gW1tDb25zdHJ1Y3RdXSBpbnRlcm5hbCBtZXRob2QsIGEKKyAgICAgICAgICAgICAgICAv
LyAgIFR5cGVFcnJvciBleGNlcHRpb24gaXMgdGhyb3duLgorICAgICAgICAgICAgICAgIC8vIDMu
IExldCBib3VuZEFyZ3MgYmUgdGhlIHZhbHVlIG9mIEYncyBbW0JvdW5kQXJnc11dIGludGVybmFs
CisgICAgICAgICAgICAgICAgLy8gICBwcm9wZXJ0eS4KKyAgICAgICAgICAgICAgICAvLyA0LiBM
ZXQgYXJncyBiZSBhIG5ldyBsaXN0IGNvbnRhaW5pbmcgdGhlIHNhbWUgdmFsdWVzIGFzIHRoZQor
ICAgICAgICAgICAgICAgIC8vICAgbGlzdCBib3VuZEFyZ3MgaW4gdGhlIHNhbWUgb3JkZXIgZm9s
bG93ZWQgYnkgdGhlIHNhbWUKKyAgICAgICAgICAgICAgICAvLyAgIHZhbHVlcyBhcyB0aGUgbGlz
dCBFeHRyYUFyZ3MgaW4gdGhlIHNhbWUgb3JkZXIuCisgICAgICAgICAgICAgICAgLy8gNS4gUmV0
dXJuIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tDb25zdHJ1Y3RdXSBpbnRlcm5hbAorICAg
ICAgICAgICAgICAgIC8vICAgbWV0aG9kIG9mIHRhcmdldCBwcm92aWRpbmcgYXJncyBhcyB0aGUg
YXJndW1lbnRzLgorCisgICAgICAgICAgICAgICAgdmFyIEYgPSBmdW5jdGlvbigpe307CisgICAg
ICAgICAgICAgICAgRi5wcm90b3R5cGUgPSB0YXJnZXQucHJvdG90eXBlOworICAgICAgICAgICAg
ICAgIHZhciBzZWxmID0gbmV3IEY7CisKKyAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGFy
Z2V0LmFwcGx5KAorICAgICAgICAgICAgICAgICAgICBzZWxmLAorICAgICAgICAgICAgICAgICAg
ICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpCisgICAgICAgICAgICAgICAgKTsK
KyAgICAgICAgICAgICAgICBpZiAoT2JqZWN0KHJlc3VsdCkgPT09IHJlc3VsdCkgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICByZXR1cm4gc2VsZjsKKworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAvLyAxNS4zLjQuNS4xIFtbQ2FsbF1dCisgICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUg
W1tDYWxsXV0gaW50ZXJuYWwgbWV0aG9kIG9mIGEgZnVuY3Rpb24gb2JqZWN0LCBGLAorICAgICAg
ICAgICAgICAgIC8vIHdoaWNoIHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBiaW5kIGZ1bmN0aW9uIGlz
IGNhbGxlZCB3aXRoIGEKKyAgICAgICAgICAgICAgICAvLyB0aGlzIHZhbHVlIGFuZCBhIGxpc3Qg
b2YgYXJndW1lbnRzIEV4dHJhQXJncywgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgIC8v
IHN0ZXBzIGFyZSB0YWtlbjoKKyAgICAgICAgICAgICAgICAvLyAxLiBMZXQgYm91bmRBcmdzIGJl
IHRoZSB2YWx1ZSBvZiBGJ3MgW1tCb3VuZEFyZ3NdXSBpbnRlcm5hbAorICAgICAgICAgICAgICAg
IC8vICAgcHJvcGVydHkuCisgICAgICAgICAgICAgICAgLy8gMi4gTGV0IGJvdW5kVGhpcyBiZSB0
aGUgdmFsdWUgb2YgRidzIFtbQm91bmRUaGlzXV0gaW50ZXJuYWwKKyAgICAgICAgICAgICAgICAv
LyAgIHByb3BlcnR5LgorICAgICAgICAgICAgICAgIC8vIDMuIExldCB0YXJnZXQgYmUgdGhlIHZh
bHVlIG9mIEYncyBbW1RhcmdldEZ1bmN0aW9uXV0gaW50ZXJuYWwKKyAgICAgICAgICAgICAgICAv
LyAgIHByb3BlcnR5LgorICAgICAgICAgICAgICAgIC8vIDQuIExldCBhcmdzIGJlIGEgbmV3IGxp
c3QgY29udGFpbmluZyB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhlCisgICAgICAgICAgICAgICAgLy8g
ICBsaXN0IGJvdW5kQXJncyBpbiB0aGUgc2FtZSBvcmRlciBmb2xsb3dlZCBieSB0aGUgc2FtZQor
ICAgICAgICAgICAgICAgIC8vICAgdmFsdWVzIGFzIHRoZSBsaXN0IEV4dHJhQXJncyBpbiB0aGUg
c2FtZSBvcmRlci4KKyAgICAgICAgICAgICAgICAvLyA1LiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBj
YWxsaW5nIHRoZSBbW0NhbGxdXSBpbnRlcm5hbCBtZXRob2QKKyAgICAgICAgICAgICAgICAvLyAg
IG9mIHRhcmdldCBwcm92aWRpbmcgYm91bmRUaGlzIGFzIHRoZSB0aGlzIHZhbHVlIGFuZAorICAg
ICAgICAgICAgICAgIC8vICAgcHJvdmlkaW5nIGFyZ3MgYXMgdGhlIGFyZ3VtZW50cy4KKworICAg
ICAgICAgICAgICAgIC8vIGVxdWl2OiB0YXJnZXQuY2FsbCh0aGlzLCAuLi5ib3VuZEFyZ3MsIC4u
LmFyZ3MpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5hcHBseSgKKyAgICAgICAgICAg
ICAgICAgICAgdGhhdCwKKyAgICAgICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2Fs
bChhcmd1bWVudHMpKQorICAgICAgICAgICAgICAgICk7CisKKyAgICAgICAgICAgIH0KKworICAg
ICAgICB9OworICAgICAgICAvLyBYWFggYm91bmQubGVuZ3RoIGlzIG5ldmVyIHdyaXRhYmxlLCBz
byBkb24ndCBldmVuIHRyeQorICAgICAgICAvLworICAgICAgICAvLyAxNS4gSWYgdGhlIFtbQ2xh
c3NdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBUYXJnZXQgaXMgIkZ1bmN0aW9uIiwgdGhlbgorICAg
ICAgICAvLyAgICAgYS4gTGV0IEwgYmUgdGhlIGxlbmd0aCBwcm9wZXJ0eSBvZiBUYXJnZXQgbWlu
dXMgdGhlIGxlbmd0aCBvZiBBLgorICAgICAgICAvLyAgICAgYi4gU2V0IHRoZSBsZW5ndGggb3du
IHByb3BlcnR5IG9mIEYgdG8gZWl0aGVyIDAgb3IgTCwgd2hpY2hldmVyIGlzCisgICAgICAgIC8v
ICAgICAgIGxhcmdlci4KKyAgICAgICAgLy8gMTYuIEVsc2Ugc2V0IHRoZSBsZW5ndGggb3duIHBy
b3BlcnR5IG9mIEYgdG8gMC4KKyAgICAgICAgLy8gMTcuIFNldCB0aGUgYXR0cmlidXRlcyBvZiB0
aGUgbGVuZ3RoIG93biBwcm9wZXJ0eSBvZiBGIHRvIHRoZSB2YWx1ZXMKKyAgICAgICAgLy8gICBz
cGVjaWZpZWQgaW4gMTUuMy41LjEuCisKKyAgICAgICAgLy8gVE9ETworICAgICAgICAvLyAxOC4g
U2V0IHRoZSBbW0V4dGVuc2libGVdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBGIHRvIHRydWUuCisK
KyAgICAgICAgLy8gVE9ETworICAgICAgICAvLyAxOS4gTGV0IHRocm93ZXIgYmUgdGhlIFtbVGhy
b3dUeXBlRXJyb3JdXSBmdW5jdGlvbiBPYmplY3QgKDEzLjIuMykuCisgICAgICAgIC8vIDIwLiBD
YWxsIHRoZSBbW0RlZmluZU93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIEYgd2l0aAor
ICAgICAgICAvLyAgIGFyZ3VtZW50cyAiY2FsbGVyIiwgUHJvcGVydHlEZXNjcmlwdG9yIHtbW0dl
dF1dOiB0aHJvd2VyLCBbW1NldF1dOgorICAgICAgICAvLyAgIHRocm93ZXIsIFtbRW51bWVyYWJs
ZV1dOiBmYWxzZSwgW1tDb25maWd1cmFibGVdXTogZmFsc2V9LCBhbmQKKyAgICAgICAgLy8gICBm
YWxzZS4KKyAgICAgICAgLy8gMjEuIENhbGwgdGhlIFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRl
cm5hbCBtZXRob2Qgb2YgRiB3aXRoCisgICAgICAgIC8vICAgYXJndW1lbnRzICJhcmd1bWVudHMi
LCBQcm9wZXJ0eURlc2NyaXB0b3Ige1tbR2V0XV06IHRocm93ZXIsCisgICAgICAgIC8vICAgW1tT
ZXRdXTogdGhyb3dlciwgW1tFbnVtZXJhYmxlXV06IGZhbHNlLCBbW0NvbmZpZ3VyYWJsZV1dOiBm
YWxzZX0sCisgICAgICAgIC8vICAgYW5kIGZhbHNlLgorCisgICAgICAgIC8vIFRPRE8KKyAgICAg
ICAgLy8gTk9URSBGdW5jdGlvbiBvYmplY3RzIGNyZWF0ZWQgdXNpbmcgRnVuY3Rpb24ucHJvdG90
eXBlLmJpbmQgZG8gbm90CisgICAgICAgIC8vIGhhdmUgYSBwcm90b3R5cGUgcHJvcGVydHkgb3Ig
dGhlIFtbQ29kZV1dLCBbW0Zvcm1hbFBhcmFtZXRlcnNdXSwgYW5kCisgICAgICAgIC8vIFtbU2Nv
cGVdXSBpbnRlcm5hbCBwcm9wZXJ0aWVzLgorICAgICAgICAvLyBYWFggY2FuJ3QgZGVsZXRlIHBy
b3RvdHlwZSBpbiBwdXJlLWpzLgorCisgICAgICAgIC8vIDIyLiBSZXR1cm4gRi4KKyAgICAgICAg
cmV0dXJuIGJvdW5kOworICAgIH07Cit9CisKKy8vIFNob3J0Y3V0IHRvIGFuIG9mdGVuIGFjY2Vz
c2VkIHByb3BlcnRpZXMsIGluIG9yZGVyIHRvIGF2b2lkIG11bHRpcGxlCisvLyBkZXJlZmVyZW5j
ZSB0aGF0IGNvc3RzIHVuaXZlcnNhbGx5LgorLy8gX1BsZWFzZSBub3RlOiBTaG9ydGN1dHMgYXJl
IGRlZmluZWQgYWZ0ZXIgYEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kYCBhcyB3ZQorLy8gdXMgaXQg
aW4gZGVmaW5pbmcgc2hvcnRjdXRzLgordmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2Fs
bDsKK3ZhciBwcm90b3R5cGVPZkFycmF5ID0gQXJyYXkucHJvdG90eXBlOwordmFyIHByb3RvdHlw
ZU9mT2JqZWN0ID0gT2JqZWN0LnByb3RvdHlwZTsKK3ZhciBzbGljZSA9IHByb3RvdHlwZU9mQXJy
YXkuc2xpY2U7CisvLyBIYXZpbmcgYSB0b1N0cmluZyBsb2NhbCB2YXJpYWJsZSBuYW1lIGJyZWFr
cyBpbiBPcGVyYSBzbyB1c2UgX3RvU3RyaW5nLgordmFyIF90b1N0cmluZyA9IGNhbGwuYmluZChw
cm90b3R5cGVPZk9iamVjdC50b1N0cmluZyk7Cit2YXIgb3ducyA9IGNhbGwuYmluZChwcm90b3R5
cGVPZk9iamVjdC5oYXNPd25Qcm9wZXJ0eSk7CisKKy8vIElmIEpTIGVuZ2luZSBzdXBwb3J0cyBh
Y2Nlc3NvcnMgY3JlYXRpbmcgc2hvcnRjdXRzLgordmFyIGRlZmluZUdldHRlcjsKK3ZhciBkZWZp
bmVTZXR0ZXI7Cit2YXIgbG9va3VwR2V0dGVyOwordmFyIGxvb2t1cFNldHRlcjsKK3ZhciBzdXBw
b3J0c0FjY2Vzc29yczsKK2lmICgoc3VwcG9ydHNBY2Nlc3NvcnMgPSBvd25zKHByb3RvdHlwZU9m
T2JqZWN0LCAiX19kZWZpbmVHZXR0ZXJfXyIpKSkgeworICAgIGRlZmluZUdldHRlciA9IGNhbGwu
YmluZChwcm90b3R5cGVPZk9iamVjdC5fX2RlZmluZUdldHRlcl9fKTsKKyAgICBkZWZpbmVTZXR0
ZXIgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuX19kZWZpbmVTZXR0ZXJfXyk7CisgICAg
bG9va3VwR2V0dGVyID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fbG9va3VwR2V0dGVy
X18pOworICAgIGxvb2t1cFNldHRlciA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2xv
b2t1cFNldHRlcl9fKTsKK30KKworLy8KKy8vIEFycmF5CisvLyA9PT09PQorLy8KKworLy8gRVM1
IDE1LjQuMy4yCisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS40LjMuMgorLy8gaHR0cHM6
Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09i
amVjdHMvQXJyYXkvaXNBcnJheQoraWYgKCFBcnJheS5pc0FycmF5KSB7CisgICAgQXJyYXkuaXNB
cnJheSA9IGZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7CisgICAgICAgIHJldHVybiBfdG9TdHJpbmco
b2JqKSA9PSAiW29iamVjdCBBcnJheV0iOworICAgIH07Cit9CisKKy8vIFRoZSBJc0NhbGxhYmxl
KCkgY2hlY2sgaW4gdGhlIEFycmF5IGZ1bmN0aW9ucworLy8gaGFzIGJlZW4gcmVwbGFjZWQgd2l0
aCBhIHN0cmljdCBjaGVjayBvbiB0aGUKKy8vIGludGVybmFsIGNsYXNzIG9mIHRoZSBvYmplY3Qg
dG8gdHJhcCBjYXNlcyB3aGVyZQorLy8gdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHdhcyBhY3R1YWxs
eSBhIHJlZ3VsYXIKKy8vIGV4cHJlc3Npb24gbGl0ZXJhbCwgd2hpY2ggaW4gVjggYW5kCisvLyBK
YXZhU2NyaXB0Q29yZSBpcyBhIHR5cGVvZiAiZnVuY3Rpb24iLiAgT25seSBpbgorLy8gVjggYXJl
IHJlZ3VsYXIgZXhwcmVzc2lvbiBsaXRlcmFscyBwZXJtaXR0ZWQgYXMKKy8vIHJlZHVjZSBwYXJh
bWV0ZXJzLCBzbyBpdCBpcyBkZXNpcmFibGUgaW4gdGhlCisvLyBnZW5lcmFsIGNhc2UgZm9yIHRo
ZSBzaGltIHRvIG1hdGNoIHRoZSBtb3JlCisvLyBzdHJpY3QgYW5kIGNvbW1vbiBiZWhhdmlvciBv
ZiByZWplY3RpbmcgcmVndWxhcgorLy8gZXhwcmVzc2lvbnMuCisKKy8vIEVTNSAxNS40LjQuMTgK
Ky8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjQuNC4xOAorLy8gaHR0cHM6Ly9kZXZlbG9w
ZXIubW96aWxsYS5vcmcvZW4vSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvYXJy
YXkvZm9yRWFjaAoraWYgKCFBcnJheS5wcm90b3R5cGUuZm9yRWFjaCkgeworICAgIEFycmF5LnBy
b3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gZm9yRWFjaChmdW4gLyosIHRoaXNwKi8pIHsKKyAg
ICAgICAgdmFyIHNlbGYgPSB0b09iamVjdCh0aGlzKSwKKyAgICAgICAgICAgIHRoaXNwID0gYXJn
dW1lbnRzWzFdLAorICAgICAgICAgICAgaSA9IC0xLAorICAgICAgICAgICAgbGVuZ3RoID0gc2Vs
Zi5sZW5ndGggPj4+IDA7CisKKyAgICAgICAgLy8gSWYgbm8gY2FsbGJhY2sgZnVuY3Rpb24gb3Ig
aWYgY2FsbGJhY2sgaXMgbm90IGEgY2FsbGFibGUgZnVuY3Rpb24KKyAgICAgICAgaWYgKF90b1N0
cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKKyAgICAgICAgICAgIHRocm93IG5l
dyBUeXBlRXJyb3IoKTsgLy8gVE9ETyBtZXNzYWdlCisgICAgICAgIH0KKworICAgICAgICB3aGls
ZSAoKytpIDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7CisgICAgICAg
ICAgICAgICAgLy8gSW52b2tlIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aXRoIGNhbGwsIHBhc3Np
bmcgYXJndW1lbnRzOgorICAgICAgICAgICAgICAgIC8vIGNvbnRleHQsIHByb3BlcnR5IHZhbHVl
LCBwcm9wZXJ0eSBrZXksIHRoaXNBcmcgb2JqZWN0IGNvbnRleHQKKyAgICAgICAgICAgICAgICBm
dW4uY2FsbCh0aGlzcCwgc2VsZltpXSwgaSwgc2VsZik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9OworfQorCisvLyBFUzUgMTUuNC40LjE5CisvLyBodHRwOi8vZXM1LmdpdGh1Yi5j
b20vI3gxNS40LjQuMTkKKy8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0NvcmVf
SmF2YVNjcmlwdF8xLjVfUmVmZXJlbmNlL09iamVjdHMvQXJyYXkvbWFwCitpZiAoIUFycmF5LnBy
b3RvdHlwZS5tYXApIHsKKyAgICBBcnJheS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gbWFwKGZ1
biAvKiwgdGhpc3AqLykgeworICAgICAgICB2YXIgc2VsZiA9IHRvT2JqZWN0KHRoaXMpLAorICAg
ICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDAsCisgICAgICAgICAgICByZXN1bHQg
PSBBcnJheShsZW5ndGgpLAorICAgICAgICAgICAgdGhpc3AgPSBhcmd1bWVudHNbMV07CisKKyAg
ICAgICAgLy8gSWYgbm8gY2FsbGJhY2sgZnVuY3Rpb24gb3IgaWYgY2FsbGJhY2sgaXMgbm90IGEg
Y2FsbGFibGUgZnVuY3Rpb24KKyAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0
IEZ1bmN0aW9uXSIpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBp
cyBub3QgYSBmdW5jdGlvbiIpOworICAgICAgICB9CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikKKyAgICAgICAg
ICAgICAgICByZXN1bHRbaV0gPSBmdW4uY2FsbCh0aGlzcCwgc2VsZltpXSwgaSwgc2VsZik7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworfQorCisvLyBFUzUgMTUu
NC40LjIwCisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS40LjQuMjAKKy8vIGh0dHBzOi8v
ZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0NvcmVfSmF2YVNjcmlwdF8xLjVfUmVmZXJlbmNlL09i
amVjdHMvQXJyYXkvZmlsdGVyCitpZiAoIUFycmF5LnByb3RvdHlwZS5maWx0ZXIpIHsKKyAgICBB
cnJheS5wcm90b3R5cGUuZmlsdGVyID0gZnVuY3Rpb24gZmlsdGVyKGZ1biAvKiwgdGhpc3AgKi8p
IHsKKyAgICAgICAgdmFyIHNlbGYgPSB0b09iamVjdCh0aGlzKSwKKyAgICAgICAgICAgIGxlbmd0
aCA9IHNlbGYubGVuZ3RoID4+PiAwLAorICAgICAgICAgICAgcmVzdWx0ID0gW10sCisgICAgICAg
ICAgICB2YWx1ZSwKKyAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdOworCisgICAgICAg
IC8vIElmIG5vIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIGlmIGNhbGxiYWNrIGlzIG5vdCBhIGNhbGxh
YmxlIGZ1bmN0aW9uCisgICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29iamVjdCBGdW5j
dGlvbl0iKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIgaXMgbm90
IGEgZnVuY3Rpb24iKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpIGluIHNlbGYpIHsKKyAgICAgICAgICAg
ICAgICB2YWx1ZSA9IHNlbGZbaV07CisgICAgICAgICAgICAgICAgaWYgKGZ1bi5jYWxsKHRoaXNw
LCB2YWx1ZSwgaSwgc2VsZikpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godmFs
dWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH07Cit9CisKKy8vIEVTNSAxNS40LjQuMTYKKy8vIGh0dHA6
Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjQuNC4xNgorLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxs
YS5vcmcvZW4vSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJyYXkvZXZlcnkK
K2lmICghQXJyYXkucHJvdG90eXBlLmV2ZXJ5KSB7CisgICAgQXJyYXkucHJvdG90eXBlLmV2ZXJ5
ID0gZnVuY3Rpb24gZXZlcnkoZnVuIC8qLCB0aGlzcCAqLykgeworICAgICAgICB2YXIgc2VsZiA9
IHRvT2JqZWN0KHRoaXMpLAorICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDAs
CisgICAgICAgICAgICB0aGlzcCA9IGFyZ3VtZW50c1sxXTsKKworICAgICAgICAvLyBJZiBubyBj
YWxsYmFjayBmdW5jdGlvbiBvciBpZiBjYWxsYmFjayBpcyBub3QgYSBjYWxsYWJsZSBmdW5jdGlv
bgorICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgewor
ICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4gKyAiIGlzIG5vdCBhIGZ1bmN0aW9u
Iik7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsr
KSB7CisgICAgICAgICAgICBpZiAoaSBpbiBzZWxmICYmICFmdW4uY2FsbCh0aGlzcCwgc2VsZltp
XSwgaSwgc2VsZikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKK30KKworLy8gRVM1
IDE1LjQuNC4xNworLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC40LjE3CisvLyBodHRw
czovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxf
T2JqZWN0cy9BcnJheS9zb21lCitpZiAoIUFycmF5LnByb3RvdHlwZS5zb21lKSB7CisgICAgQXJy
YXkucHJvdG90eXBlLnNvbWUgPSBmdW5jdGlvbiBzb21lKGZ1biAvKiwgdGhpc3AgKi8pIHsKKyAg
ICAgICAgdmFyIHNlbGYgPSB0b09iamVjdCh0aGlzKSwKKyAgICAgICAgICAgIGxlbmd0aCA9IHNl
bGYubGVuZ3RoID4+PiAwLAorICAgICAgICAgICAgdGhpc3AgPSBhcmd1bWVudHNbMV07CisKKyAg
ICAgICAgLy8gSWYgbm8gY2FsbGJhY2sgZnVuY3Rpb24gb3IgaWYgY2FsbGJhY2sgaXMgbm90IGEg
Y2FsbGFibGUgZnVuY3Rpb24KKyAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0
IEZ1bmN0aW9uXSIpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBp
cyBub3QgYSBmdW5jdGlvbiIpOworICAgICAgICB9CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAmJiBmdW4uY2Fs
bCh0aGlzcCwgc2VsZltpXSwgaSwgc2VsZikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fTsKK30KKworLy8gRVM1IDE1LjQuNC4yMQorLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUu
NC40LjIxCisvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9Db3JlX0phdmFTY3Jp
cHRfMS41X1JlZmVyZW5jZS9PYmplY3RzL0FycmF5L3JlZHVjZQoraWYgKCFBcnJheS5wcm90b3R5
cGUucmVkdWNlKSB7CisgICAgQXJyYXkucHJvdG90eXBlLnJlZHVjZSA9IGZ1bmN0aW9uIHJlZHVj
ZShmdW4gLyosIGluaXRpYWwqLykgeworICAgICAgICB2YXIgc2VsZiA9IHRvT2JqZWN0KHRoaXMp
LAorICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7CisKKyAgICAgICAgLy8g
SWYgbm8gY2FsbGJhY2sgZnVuY3Rpb24gb3IgaWYgY2FsbGJhY2sgaXMgbm90IGEgY2FsbGFibGUg
ZnVuY3Rpb24KKyAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9u
XSIpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBm
dW5jdGlvbiIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gbm8gdmFsdWUgdG8gcmV0dXJuIGlm
IG5vIGluaXRpYWwgdmFsdWUgYW5kIGFuIGVtcHR5IGFycmF5CisgICAgICAgIGlmICghbGVuZ3Ro
ICYmIGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVF
cnJvcigncmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZScpOworICAg
ICAgICB9CisKKyAgICAgICAgdmFyIGkgPSAwOworICAgICAgICB2YXIgcmVzdWx0OworICAgICAg
ICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAyKSB7CisgICAgICAgICAgICByZXN1bHQgPSBhcmd1
bWVudHNbMV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAg
ICAgICAgaWYgKGkgaW4gc2VsZikgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxm
W2krK107CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIC8vIGlmIGFycmF5IGNvbnRhaW5zIG5vIHZhbHVlcywgbm8gaW5pdGlh
bCB2YWx1ZSB0byByZXR1cm4KKyAgICAgICAgICAgICAgICBpZiAoKytpID49IGxlbmd0aCkgewor
ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdyZWR1Y2Ugb2YgZW1wdHkg
YXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSB3aGlsZSAodHJ1ZSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKDsgaSA8IGxl
bmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7CisgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gZnVuLmNhbGwodm9pZCAwLCByZXN1bHQsIHNlbGZbaV0sIGksIHNlbGYpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
OworfQorCisvLyBFUzUgMTUuNC40LjIyCisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS40
LjQuMjIKKy8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0NvcmVfSmF2YVNjcmlw
dF8xLjVfUmVmZXJlbmNlL09iamVjdHMvQXJyYXkvcmVkdWNlUmlnaHQKK2lmICghQXJyYXkucHJv
dG90eXBlLnJlZHVjZVJpZ2h0KSB7CisgICAgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0ID0g
ZnVuY3Rpb24gcmVkdWNlUmlnaHQoZnVuIC8qLCBpbml0aWFsKi8pIHsKKyAgICAgICAgdmFyIHNl
bGYgPSB0b09iamVjdCh0aGlzKSwKKyAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+
PiAwOworCisgICAgICAgIC8vIElmIG5vIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIGlmIGNhbGxiYWNr
IGlzIG5vdCBhIGNhbGxhYmxlIGZ1bmN0aW9uCisgICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAh
PSAiW29iamVjdCBGdW5jdGlvbl0iKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9y
KGZ1biArICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIG5v
IHZhbHVlIHRvIHJldHVybiBpZiBubyBpbml0aWFsIHZhbHVlLCBlbXB0eSBhcnJheQorICAgICAg
ICBpZiAoIWxlbmd0aCAmJiBhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKKyAgICAgICAgICAgIHRo
cm93IG5ldyBUeXBlRXJyb3IoJ3JlZHVjZVJpZ2h0IG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5p
dGlhbCB2YWx1ZScpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHJlc3VsdCwgaSA9IGxlbmd0
aCAtIDE7CisgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDIpIHsKKyAgICAgICAgICAg
IHJlc3VsdCA9IGFyZ3VtZW50c1sxXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRv
IHsKKyAgICAgICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7CisgICAgICAgICAgICAgICAgICAg
IHJlc3VsdCA9IHNlbGZbaS0tXTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gaWYgYXJyYXkgY29udGFpbnMgbm8gdmFs
dWVzLCBubyBpbml0aWFsIHZhbHVlIHRvIHJldHVybgorICAgICAgICAgICAgICAgIGlmICgtLWkg
PCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3JlZHVjZVJp
Z2h0IG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZScpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0gd2hpbGUgKHRydWUpOworICAgICAgICB9CisKKyAgICAgICAg
ZG8geworICAgICAgICAgICAgaWYgKGkgaW4gdGhpcykgeworICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IGZ1bi5jYWxsKHZvaWQgMCwgcmVzdWx0LCBzZWxmW2ldLCBpLCBzZWxmKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSB3aGlsZSAoaS0tKTsKKworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH07Cit9CisKKy8vIEVTNSAxNS40LjQuMTQKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8j
eDE1LjQuNC4xNAorLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vSmF2YVNjcmlw
dC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJyYXkvaW5kZXhPZgoraWYgKCFBcnJheS5wcm90
b3R5cGUuaW5kZXhPZikgeworICAgIEFycmF5LnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24g
aW5kZXhPZihzb3VnaHQgLyosIGZyb21JbmRleCAqLyApIHsKKyAgICAgICAgdmFyIHNlbGYgPSB0
b09iamVjdCh0aGlzKSwKKyAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwOwor
CisgICAgICAgIGlmICghbGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAg
IH0KKworICAgICAgICB2YXIgaSA9IDA7CisgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4g
MSkgeworICAgICAgICAgICAgaSA9IHRvSW50ZWdlcihhcmd1bWVudHNbMV0pOworICAgICAgICB9
CisKKyAgICAgICAgLy8gaGFuZGxlIG5lZ2F0aXZlIGluZGljZXMKKyAgICAgICAgaSA9IGkgPj0g
MCA/IGkgOiBNYXRoLm1heCgwLCBsZW5ndGggKyBpKTsKKyAgICAgICAgZm9yICg7IGkgPCBsZW5n
dGg7IGkrKykgeworICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAmJiBzZWxmW2ldID09PSBzb3Vn
aHQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gLTE7CisgICAgfTsKK30KKworLy8gRVM1IDE1LjQuNC4xNQorLy8g
aHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC40LjE1CisvLyBodHRwczovL2RldmVsb3Blci5t
b3ppbGxhLm9yZy9lbi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9s
YXN0SW5kZXhPZgoraWYgKCFBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YpIHsKKyAgICBBcnJh
eS5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbiBsYXN0SW5kZXhPZihzb3VnaHQgLyos
IGZyb21JbmRleCAqLykgeworICAgICAgICB2YXIgc2VsZiA9IHRvT2JqZWN0KHRoaXMpLAorICAg
ICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7CisKKyAgICAgICAgaWYgKCFsZW5n
dGgpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICB2YXIgaSA9
IGxlbmd0aCAtIDE7CisgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgeworICAgICAg
ICAgICAgaSA9IE1hdGgubWluKGksIHRvSW50ZWdlcihhcmd1bWVudHNbMV0pKTsKKyAgICAgICAg
fQorICAgICAgICAvLyBoYW5kbGUgbmVnYXRpdmUgaW5kaWNlcworICAgICAgICBpID0gaSA+PSAw
ID8gaSA6IGxlbmd0aCAtIE1hdGguYWJzKGkpOworICAgICAgICBmb3IgKDsgaSA+PSAwOyBpLS0p
IHsKKyAgICAgICAgICAgIGlmIChpIGluIHNlbGYgJiYgc291Z2h0ID09PSBzZWxmW2ldKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIC0xOworICAgIH07Cit9CisKKy8vCisvLyBPYmplY3QKKy8vID09PT09PQorLy8K
KworLy8gRVM1IDE1LjIuMy4xNAorLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuMi4zLjE0
CitpZiAoIU9iamVjdC5rZXlzKSB7CisgICAgLy8gaHR0cDovL3doYXR0aGVoZWFkc2FpZC5jb20v
MjAxMC8xMC9hLXNhZmVyLW9iamVjdC1rZXlzLWNvbXBhdGliaWxpdHktaW1wbGVtZW50YXRpb24K
KyAgICB2YXIgaGFzRG9udEVudW1CdWcgPSB0cnVlLAorICAgICAgICBkb250RW51bXMgPSBbCisg
ICAgICAgICAgICAidG9TdHJpbmciLAorICAgICAgICAgICAgInRvTG9jYWxlU3RyaW5nIiwKKyAg
ICAgICAgICAgICJ2YWx1ZU9mIiwKKyAgICAgICAgICAgICJoYXNPd25Qcm9wZXJ0eSIsCisgICAg
ICAgICAgICAiaXNQcm90b3R5cGVPZiIsCisgICAgICAgICAgICAicHJvcGVydHlJc0VudW1lcmFi
bGUiLAorICAgICAgICAgICAgImNvbnN0cnVjdG9yIgorICAgICAgICBdLAorICAgICAgICBkb250
RW51bXNMZW5ndGggPSBkb250RW51bXMubGVuZ3RoOworCisgICAgZm9yICh2YXIga2V5IGluIHsi
dG9TdHJpbmciOiBudWxsfSkgeworICAgICAgICBoYXNEb250RW51bUJ1ZyA9IGZhbHNlOworICAg
IH0KKworICAgIE9iamVjdC5rZXlzID0gZnVuY3Rpb24ga2V5cyhvYmplY3QpIHsKKworICAgICAg
ICBpZiAoKHR5cGVvZiBvYmplY3QgIT0gIm9iamVjdCIgJiYgdHlwZW9mIG9iamVjdCAhPSAiZnVu
Y3Rpb24iKSB8fCBvYmplY3QgPT09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBUeXBl
RXJyb3IoIk9iamVjdC5rZXlzIGNhbGxlZCBvbiBhIG5vbi1vYmplY3QiKTsKKyAgICAgICAgfQor
CisgICAgICAgIHZhciBrZXlzID0gW107CisgICAgICAgIGZvciAodmFyIG5hbWUgaW4gb2JqZWN0
KSB7CisgICAgICAgICAgICBpZiAob3ducyhvYmplY3QsIG5hbWUpKSB7CisgICAgICAgICAgICAg
ICAga2V5cy5wdXNoKG5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
aWYgKGhhc0RvbnRFbnVtQnVnKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBk
b250RW51bXNMZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgICAgICAgICAgdmFyIGRvbnRF
bnVtID0gZG9udEVudW1zW2ldOworICAgICAgICAgICAgICAgIGlmIChvd25zKG9iamVjdCwgZG9u
dEVudW0pKSB7CisgICAgICAgICAgICAgICAgICAgIGtleXMucHVzaChkb250RW51bSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBr
ZXlzOworICAgIH07CisKK30KKworLy8KKy8vIERhdGUKKy8vID09PT0KKy8vCisKKy8vIEVTNSAx
NS45LjUuNDMKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjkuNS40MworLy8gVGhpcyBm
dW5jdGlvbiByZXR1cm5zIGEgU3RyaW5nIHZhbHVlIHJlcHJlc2VudCB0aGUgaW5zdGFuY2UgaW4g
dGltZQorLy8gcmVwcmVzZW50ZWQgYnkgdGhpcyBEYXRlIG9iamVjdC4gVGhlIGZvcm1hdCBvZiB0
aGUgU3RyaW5nIGlzIHRoZSBEYXRlIFRpbWUKKy8vIHN0cmluZyBmb3JtYXQgZGVmaW5lZCBpbiAx
NS45LjEuMTUuIEFsbCBmaWVsZHMgYXJlIHByZXNlbnQgaW4gdGhlIFN0cmluZy4KKy8vIFRoZSB0
aW1lIHpvbmUgaXMgYWx3YXlzIFVUQywgZGVub3RlZCBieSB0aGUgc3VmZml4IFouIElmIHRoZSB0
aW1lIHZhbHVlIG9mCisvLyB0aGlzIG9iamVjdCBpcyBub3QgYSBmaW5pdGUgTnVtYmVyIGEgUmFu
Z2VFcnJvciBleGNlcHRpb24gaXMgdGhyb3duLgoraWYgKCFEYXRlLnByb3RvdHlwZS50b0lTT1N0
cmluZyB8fCAobmV3IERhdGUoLTYyMTk4NzU1MjAwMDAwKS50b0lTT1N0cmluZygpLmluZGV4T2Yo
Jy0wMDAwMDEnKSA9PT0gLTEpKSB7CisgICAgRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcgPSBm
dW5jdGlvbiB0b0lTT1N0cmluZygpIHsKKyAgICAgICAgdmFyIHJlc3VsdCwgbGVuZ3RoLCB2YWx1
ZSwgeWVhcjsKKyAgICAgICAgaWYgKCFpc0Zpbml0ZSh0aGlzKSkgeworICAgICAgICAgICAgdGhy
b3cgbmV3IFJhbmdlRXJyb3IoIkRhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nIGNhbGxlZCBvbiBu
b24tZmluaXRlIHZhbHVlLiIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gdGhlIGRhdGUgdGlt
ZSBzdHJpbmcgZm9ybWF0IGlzIHNwZWNpZmllZCBpbiAxNS45LjEuMTUuCisgICAgICAgIHJlc3Vs
dCA9IFt0aGlzLmdldFVUQ01vbnRoKCkgKyAxLCB0aGlzLmdldFVUQ0RhdGUoKSwKKyAgICAgICAg
ICAgIHRoaXMuZ2V0VVRDSG91cnMoKSwgdGhpcy5nZXRVVENNaW51dGVzKCksIHRoaXMuZ2V0VVRD
U2Vjb25kcygpXTsKKyAgICAgICAgeWVhciA9IHRoaXMuZ2V0VVRDRnVsbFllYXIoKTsKKyAgICAg
ICAgeWVhciA9ICh5ZWFyIDwgMCA/ICctJyA6ICh5ZWFyID4gOTk5OSA/ICcrJyA6ICcnKSkgKyAo
JzAwMDAwJyArIE1hdGguYWJzKHllYXIpKS5zbGljZSgwIDw9IHllYXIgJiYgeWVhciA8PSA5OTk5
ID8gLTQgOiAtNik7CisKKyAgICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDsKKyAgICAgICAg
d2hpbGUgKGxlbmd0aC0tKSB7CisgICAgICAgICAgICB2YWx1ZSA9IHJlc3VsdFtsZW5ndGhdOwor
ICAgICAgICAgICAgLy8gcGFkIG1vbnRocywgZGF5cywgaG91cnMsIG1pbnV0ZXMsIGFuZCBzZWNv
bmRzIHRvIGhhdmUgdHdvIGRpZ2l0cy4KKyAgICAgICAgICAgIGlmICh2YWx1ZSA8IDEwKSB7Cisg
ICAgICAgICAgICAgICAgcmVzdWx0W2xlbmd0aF0gPSAiMCIgKyB2YWx1ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAvLyBwYWQgbWlsbGlzZWNvbmRzIHRvIGhhdmUgdGhyZWUg
ZGlnaXRzLgorICAgICAgICByZXR1cm4geWVhciArICItIiArIHJlc3VsdC5zbGljZSgwLCAyKS5q
b2luKCItIikgKyAiVCIgKyByZXN1bHQuc2xpY2UoMikuam9pbigiOiIpICsgIi4iICsKKyAgICAg
ICAgICAgICgiMDAwIiArIHRoaXMuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpLnNsaWNlKC0zKSArICJa
IjsKKyAgICB9Cit9CisKKy8vIEVTNSAxNS45LjQuNAorLy8gaHR0cDovL2VzNS5naXRodWIuY29t
LyN4MTUuOS40LjQKK2lmICghRGF0ZS5ub3cpIHsKKyAgICBEYXRlLm5vdyA9IGZ1bmN0aW9uIG5v
dygpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpOworICAgIH07Cit9CisK
Ky8vIEVTNSAxNS45LjUuNDQKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjkuNS40NAor
Ly8gVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIERh
dGUgb2JqZWN0IGZvciB1c2UgYnkKKy8vIEpTT04uc3RyaW5naWZ5ICgxNS4xMi4zKS4KK2lmICgh
RGF0ZS5wcm90b3R5cGUudG9KU09OKSB7CisgICAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gZnVu
Y3Rpb24gdG9KU09OKGtleSkgeworICAgICAgICAvLyBXaGVuIHRoZSB0b0pTT04gbWV0aG9kIGlz
IGNhbGxlZCB3aXRoIGFyZ3VtZW50IGtleSwgdGhlIGZvbGxvd2luZworICAgICAgICAvLyBzdGVw
cyBhcmUgdGFrZW46CisKKyAgICAgICAgLy8gMS4gIExldCBPIGJlIHRoZSByZXN1bHQgb2YgY2Fs
bGluZyBUb09iamVjdCwgZ2l2aW5nIGl0IHRoZSB0aGlzCisgICAgICAgIC8vIHZhbHVlIGFzIGl0
cyBhcmd1bWVudC4KKyAgICAgICAgLy8gMi4gTGV0IHR2IGJlIFRvUHJpbWl0aXZlKE8sIGhpbnQg
TnVtYmVyKS4KKyAgICAgICAgLy8gMy4gSWYgdHYgaXMgYSBOdW1iZXIgYW5kIGlzIG5vdCBmaW5p
dGUsIHJldHVybiBudWxsLgorICAgICAgICAvLyBYWFgKKyAgICAgICAgLy8gNC4gTGV0IHRvSVNP
IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YK
KyAgICAgICAgLy8gTyB3aXRoIGFyZ3VtZW50ICJ0b0lTT1N0cmluZyIuCisgICAgICAgIC8vIDUu
IElmIElzQ2FsbGFibGUodG9JU08pIGlzIGZhbHNlLCB0aHJvdyBhIFR5cGVFcnJvciBleGNlcHRp
b24uCisgICAgICAgIGlmICh0eXBlb2YgdGhpcy50b0lTT1N0cmluZyAhPSAiZnVuY3Rpb24iKSB7
CisgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0b0lTT1N0cmluZyBwcm9wZXJ0eSBp
cyBub3QgY2FsbGFibGUnKTsKKyAgICAgICAgfQorICAgICAgICAvLyA2LiBSZXR1cm4gdGhlIHJl
c3VsdCBvZiBjYWxsaW5nIHRoZSBbW0NhbGxdXSBpbnRlcm5hbCBtZXRob2Qgb2YKKyAgICAgICAg
Ly8gIHRvSVNPIHdpdGggTyBhcyB0aGUgdGhpcyB2YWx1ZSBhbmQgYW4gZW1wdHkgYXJndW1lbnQg
bGlzdC4KKyAgICAgICAgcmV0dXJuIHRoaXMudG9JU09TdHJpbmcoKTsKKworICAgICAgICAvLyBO
T1RFIDEgVGhlIGFyZ3VtZW50IGlzIGlnbm9yZWQuCisKKyAgICAgICAgLy8gTk9URSAyIFRoZSB0
b0pTT04gZnVuY3Rpb24gaXMgaW50ZW50aW9uYWxseSBnZW5lcmljOyBpdCBkb2VzIG5vdAorICAg
ICAgICAvLyByZXF1aXJlIHRoYXQgaXRzIHRoaXMgdmFsdWUgYmUgYSBEYXRlIG9iamVjdC4gVGhl
cmVmb3JlLCBpdCBjYW4gYmUKKyAgICAgICAgLy8gdHJhbnNmZXJyZWQgdG8gb3RoZXIga2luZHMg
b2Ygb2JqZWN0cyBmb3IgdXNlIGFzIGEgbWV0aG9kLiBIb3dldmVyLAorICAgICAgICAvLyBpdCBk
b2VzIHJlcXVpcmUgdGhhdCBhbnkgc3VjaCBvYmplY3QgaGF2ZSBhIHRvSVNPU3RyaW5nIG1ldGhv
ZC4gQW4KKyAgICAgICAgLy8gb2JqZWN0IGlzIGZyZWUgdG8gdXNlIHRoZSBhcmd1bWVudCBrZXkg
dG8gZmlsdGVyIGl0cworICAgICAgICAvLyBzdHJpbmdpZmljYXRpb24uCisgICAgfTsKK30KKwor
Ly8gRVM1IDE1LjkuNC4yCisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS45LjQuMgorLy8g
YmFzZWQgb24gd29yayBzaGFyZWQgYnkgRGFuaWVsIEZyaWVzZW4gKGRhbnRtYW4pCisvLyBodHRw
Oi8vZ2lzdC5naXRodWIuY29tLzMwMzI0OQoraWYgKCFEYXRlLnBhcnNlIHx8IERhdGUucGFyc2Uo
IisyNzU3NjAtMDktMTNUMDA6MDA6MDAuMDAwWiIpICE9PSA4LjY0ZTE1KSB7CisgICAgLy8gWFhY
IGdsb2JhbCBhc3NpZ25tZW50IHdvbid0IHdvcmsgaW4gZW1iZWRkaW5ncyB0aGF0IHVzZQorICAg
IC8vIGFuIGFsdGVybmF0ZSBvYmplY3QgZm9yIHRoZSBjb250ZXh0LgorICAgIERhdGUgPSAoZnVu
Y3Rpb24oTmF0aXZlRGF0ZSkgeworCisgICAgICAgIC8vIERhdGUubGVuZ3RoID09PSA3CisgICAg
ICAgIHZhciBEYXRlID0gZnVuY3Rpb24gRGF0ZShZLCBNLCBELCBoLCBtLCBzLCBtcykgeworICAg
ICAgICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7CisgICAgICAgICAgICBpZiAo
dGhpcyBpbnN0YW5jZW9mIE5hdGl2ZURhdGUpIHsKKyAgICAgICAgICAgICAgICB2YXIgZGF0ZSA9
IGxlbmd0aCA9PSAxICYmIFN0cmluZyhZKSA9PT0gWSA/IC8vIGlzU3RyaW5nKFkpCisgICAgICAg
ICAgICAgICAgICAgIC8vIFdlIGV4cGxpY2l0bHkgcGFzcyBpdCB0aHJvdWdoIHBhcnNlOgorICAg
ICAgICAgICAgICAgICAgICBuZXcgTmF0aXZlRGF0ZShEYXRlLnBhcnNlKFkpKSA6CisgICAgICAg
ICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gbWFudWFsbHkgbWFrZSBjYWxscyBkZXBlbmRpbmcg
b24gYXJndW1lbnQKKyAgICAgICAgICAgICAgICAgICAgLy8gbGVuZ3RoIGhlcmUKKyAgICAgICAg
ICAgICAgICAgICAgbGVuZ3RoID49IDcgPyBuZXcgTmF0aXZlRGF0ZShZLCBNLCBELCBoLCBtLCBz
LCBtcykgOgorICAgICAgICAgICAgICAgICAgICBsZW5ndGggPj0gNiA/IG5ldyBOYXRpdmVEYXRl
KFksIE0sIEQsIGgsIG0sIHMpIDoKKyAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID49IDUgPyBu
ZXcgTmF0aXZlRGF0ZShZLCBNLCBELCBoLCBtKSA6CisgICAgICAgICAgICAgICAgICAgIGxlbmd0
aCA+PSA0ID8gbmV3IE5hdGl2ZURhdGUoWSwgTSwgRCwgaCkgOgorICAgICAgICAgICAgICAgICAg
ICBsZW5ndGggPj0gMyA/IG5ldyBOYXRpdmVEYXRlKFksIE0sIEQpIDoKKyAgICAgICAgICAgICAg
ICAgICAgbGVuZ3RoID49IDIgPyBuZXcgTmF0aXZlRGF0ZShZLCBNKSA6CisgICAgICAgICAgICAg
ICAgICAgIGxlbmd0aCA+PSAxID8gbmV3IE5hdGl2ZURhdGUoWSkgOgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5ldyBOYXRpdmVEYXRlKCk7CisgICAgICAgICAgICAgICAgLy8g
UHJldmVudCBtaXh1cHMgd2l0aCB1bmZpeGVkIERhdGUgb2JqZWN0CisgICAgICAgICAgICAgICAg
ZGF0ZS5jb25zdHJ1Y3RvciA9IERhdGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGU7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gTmF0aXZlRGF0ZS5hcHBseSh0aGlzLCBh
cmd1bWVudHMpOworICAgICAgICB9OworCisgICAgICAgIC8vIDE1LjkuMS4xNSBEYXRlIFRpbWUg
U3RyaW5nIEZvcm1hdC4KKyAgICAgICAgdmFyIGlzb0RhdGVFeHByZXNzaW9uID0gbmV3IFJlZ0V4
cCgiXiIgKworICAgICAgICAgICAgIihcXGR7NH18W1wrXC1dXFxkezZ9KSIgKyAvLyBmb3VyLWRp
Z2l0IHllYXIgY2FwdHVyZSBvciBzaWduICsgNi1kaWdpdCBleHRlbmRlZCB5ZWFyCisgICAgICAg
ICAgICAiKD86LShcXGR7Mn0pIiArIC8vIG9wdGlvbmFsIG1vbnRoIGNhcHR1cmUKKyAgICAgICAg
ICAgICIoPzotKFxcZHsyfSkiICsgLy8gb3B0aW9uYWwgZGF5IGNhcHR1cmUKKyAgICAgICAgICAg
ICIoPzoiICsgLy8gY2FwdHVyZSBob3VyczptaW51dGVzOnNlY29uZHMubWlsbGlzZWNvbmRzCisg
ICAgICAgICAgICAgICAgIlQoXFxkezJ9KSIgKyAvLyBob3VycyBjYXB0dXJlCisgICAgICAgICAg
ICAgICAgIjooXFxkezJ9KSIgKyAvLyBtaW51dGVzIGNhcHR1cmUKKyAgICAgICAgICAgICAgICAi
KD86IiArIC8vIG9wdGlvbmFsIDpzZWNvbmRzLm1pbGxpc2Vjb25kcworICAgICAgICAgICAgICAg
ICAgICAiOihcXGR7Mn0pIiArIC8vIHNlY29uZHMgY2FwdHVyZQorICAgICAgICAgICAgICAgICAg
ICAiKD86XFwuKFxcZHszfSkpPyIgKyAvLyBtaWxsaXNlY29uZHMgY2FwdHVyZQorICAgICAgICAg
ICAgICAgICIpPyIgKworICAgICAgICAgICAgIig/OiIgKyAvLyBjYXB0dXJlIFVUQyBvZmZzZXQg
Y29tcG9uZW50CisgICAgICAgICAgICAgICAgIlp8IiArIC8vIFVUQyBjYXB0dXJlCisgICAgICAg
ICAgICAgICAgIig/OiIgKyAvLyBvZmZzZXQgc3BlY2lmaWVyICsvLWhvdXJzOm1pbnV0ZXMKKyAg
ICAgICAgICAgICAgICAgICAgIihbLStdKSIgKyAvLyBzaWduIGNhcHR1cmUKKyAgICAgICAgICAg
ICAgICAgICAgIihcXGR7Mn0pIiArIC8vIGhvdXJzIG9mZnNldCBjYXB0dXJlCisgICAgICAgICAg
ICAgICAgICAgICI6KFxcZHsyfSkiICsgLy8gbWludXRlcyBvZmZzZXQgY2FwdHVyZQorICAgICAg
ICAgICAgICAgICIpIiArCisgICAgICAgICAgICAiKT8pPyk/KT8iICsKKyAgICAgICAgIiQiKTsK
KworICAgICAgICAvLyBDb3B5IGFueSBjdXN0b20gbWV0aG9kcyBhIDNyZCBwYXJ0eSBsaWJyYXJ5
IG1heSBoYXZlIGFkZGVkCisgICAgICAgIGZvciAodmFyIGtleSBpbiBOYXRpdmVEYXRlKSB7Cisg
ICAgICAgICAgICBEYXRlW2tleV0gPSBOYXRpdmVEYXRlW2tleV07CisgICAgICAgIH0KKworICAg
ICAgICAvLyBDb3B5ICJuYXRpdmUiIG1ldGhvZHMgZXhwbGljaXRseTsgdGhleSBtYXkgYmUgbm9u
LWVudW1lcmFibGUKKyAgICAgICAgRGF0ZS5ub3cgPSBOYXRpdmVEYXRlLm5vdzsKKyAgICAgICAg
RGF0ZS5VVEMgPSBOYXRpdmVEYXRlLlVUQzsKKyAgICAgICAgRGF0ZS5wcm90b3R5cGUgPSBOYXRp
dmVEYXRlLnByb3RvdHlwZTsKKyAgICAgICAgRGF0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBE
YXRlOworCisgICAgICAgIC8vIFVwZ3JhZGUgRGF0ZS5wYXJzZSB0byBoYW5kbGUgc2ltcGxpZmll
ZCBJU08gODYwMSBzdHJpbmdzCisgICAgICAgIERhdGUucGFyc2UgPSBmdW5jdGlvbiBwYXJzZShz
dHJpbmcpIHsKKyAgICAgICAgICAgIHZhciBtYXRjaCA9IGlzb0RhdGVFeHByZXNzaW9uLmV4ZWMo
c3RyaW5nKTsKKyAgICAgICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICAgICAgICAgIG1hdGNo
LnNoaWZ0KCk7IC8vIGtpbGwgbWF0Y2hbMF0sIHRoZSBmdWxsIG1hdGNoCisgICAgICAgICAgICAg
ICAgLy8gcGFyc2UgbW9udGhzLCBkYXlzLCBob3VycywgbWludXRlcywgc2Vjb25kcywgYW5kIG1p
bGxpc2Vjb25kcworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgNzsgaSsrKSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIHByb3ZpZGUgZGVmYXVsdCB2YWx1ZXMgaWYgbmVjZXNz
YXJ5CisgICAgICAgICAgICAgICAgICAgIG1hdGNoW2ldID0gKyhtYXRjaFtpXSB8fCAoaSA8IDMg
PyAxIDogMCkpOworICAgICAgICAgICAgICAgICAgICAvLyBtYXRjaFsxXSBpcyB0aGUgbW9udGgu
IE1vbnRocyBhcmUgMC0xMSBpbiBKYXZhU2NyaXB0CisgICAgICAgICAgICAgICAgICAgIC8vIGBE
YXRlYCBvYmplY3RzLCBidXQgMS0xMiBpbiBJU08gbm90YXRpb24sIHNvIHdlCisgICAgICAgICAg
ICAgICAgICAgIC8vIGRlY3JlbWVudC4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gMSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hbaV0tLTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIHBhcnNlIHRoZSBV
VEMgb2Zmc2V0IGNvbXBvbmVudAorICAgICAgICAgICAgICAgIHZhciBtaW51dGVPZmZzZXQgPSAr
bWF0Y2gucG9wKCksIGhvdXJPZmZzZXQgPSArbWF0Y2gucG9wKCksIHNpZ24gPSBtYXRjaC5wb3Ao
KTsKKworICAgICAgICAgICAgICAgIC8vIGNvbXB1dGUgdGhlIGV4cGxpY2l0IHRpbWUgem9uZSBv
ZmZzZXQgaWYgc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IDA7CisgICAg
ICAgICAgICAgICAgaWYgKHNpZ24pIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gZGV0ZWN0IGlu
dmFsaWQgb2Zmc2V0cyBhbmQgcmV0dXJuIGVhcmx5CisgICAgICAgICAgICAgICAgICAgIGlmICho
b3VyT2Zmc2V0ID4gMjMgfHwgbWludXRlT2Zmc2V0ID4gNTkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBOYU47CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICAvLyBleHByZXNzIHRoZSBwcm92aWRlZCB0aW1lIHpvbmUgb2Zmc2V0IGluIG1pbnV0
ZXMuIFRoZSBvZmZzZXQgaXMKKyAgICAgICAgICAgICAgICAgICAgLy8gbmVnYXRpdmUgZm9yIHRp
bWUgem9uZXMgd2VzdCBvZiBVVEM7IHBvc2l0aXZlIG90aGVyd2lzZS4KKyAgICAgICAgICAgICAg
ICAgICAgb2Zmc2V0ID0gKGhvdXJPZmZzZXQgKiA2MCArIG1pbnV0ZU9mZnNldCkgKiA2ZTQgKiAo
c2lnbiA9PSAiKyIgPyAtMSA6IDEpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIC8vIERhdGUuVVRDIGZvciB5ZWFycyBiZXR3ZWVuIDAgYW5kIDk5IGNvbnZlcnRzIHllYXIg
dG8gMTkwMCArIHllYXIKKyAgICAgICAgICAgICAgICAvLyBUaGUgR3JlZ29yaWFuIGNhbGVuZGFy
IGhhcyBhIDQwMC15ZWFyIGN5Y2xlLCBzbworICAgICAgICAgICAgICAgIC8vIHRvIERhdGUuVVRD
KHllYXIgKyA0MDAsIC4uLi4gKSAtIDEyNjIyNzgwODAwMDAwID09IERhdGUuVVRDKHllYXIsIC4u
LiksCisgICAgICAgICAgICAgICAgLy8gd2hlcmUgMTI2MjI3ODA4MDAwMDAgLSBudW1iZXIgb2Yg
bWlsbGlzZWNvbmRzIGluIEdyZWdvcmlhbiBjYWxlbmRhciA0MDAgeWVhcnMKKyAgICAgICAgICAg
ICAgICB2YXIgeWVhciA9ICttYXRjaFswXTsKKyAgICAgICAgICAgICAgICBpZiAoMCA8PSB5ZWFy
ICYmIHllYXIgPD0gOTkpIHsKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hbMF0gPSB5ZWFyICsg
NDAwOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTmF0aXZlRGF0ZS5VVEMuYXBwbHkodGhp
cywgbWF0Y2gpICsgb2Zmc2V0IC0gMTI2MjI3ODA4MDAwMDA7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgLy8gY29tcHV0ZSBhIG5ldyBVVEMgZGF0ZSB2YWx1ZSwgYWNjb3Vu
dGluZyBmb3IgdGhlIG9wdGlvbmFsIG9mZnNldAorICAgICAgICAgICAgICAgIHJldHVybiBOYXRp
dmVEYXRlLlVUQy5hcHBseSh0aGlzLCBtYXRjaCkgKyBvZmZzZXQ7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gTmF0aXZlRGF0ZS5wYXJzZS5hcHBseSh0aGlzLCBhcmd1bWVudHMp
OworICAgICAgICB9OworCisgICAgICAgIHJldHVybiBEYXRlOworICAgIH0pKERhdGUpOworfQor
CisvLworLy8gU3RyaW5nCisvLyA9PT09PT0KKy8vCisKKy8vIEVTNSAxNS41LjQuMjAKKy8vIGh0
dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjUuNC4yMAordmFyIHdzID0gIlx4MDlceDBBXHgwQlx4
MENceDBEXHgyMFx4QTBcdTE2ODBcdTE4MEVcdTIwMDBcdTIwMDFcdTIwMDJcdTIwMDMiICsKKyAg
ICAiXHUyMDA0XHUyMDA1XHUyMDA2XHUyMDA3XHUyMDA4XHUyMDA5XHUyMDBBXHUyMDJGXHUyMDVG
XHUzMDAwXHUyMDI4IiArCisgICAgIlx1MjAyOVx1RkVGRiI7CitpZiAoIVN0cmluZy5wcm90b3R5
cGUudHJpbSB8fCB3cy50cmltKCkpIHsKKyAgICAvLyBodHRwOi8vYmxvZy5zdGV2ZW5sZXZpdGhh
bi5jb20vYXJjaGl2ZXMvZmFzdGVyLXRyaW0tamF2YXNjcmlwdAorICAgIC8vIGh0dHA6Ly9wZXJm
ZWN0aW9ua2lsbHMuY29tL3doaXRlc3BhY2UtZGV2aWF0aW9ucy8KKyAgICB3cyA9ICJbIiArIHdz
ICsgIl0iOworICAgIHZhciB0cmltQmVnaW5SZWdleHAgPSBuZXcgUmVnRXhwKCJeIiArIHdzICsg
d3MgKyAiKiIpLAorICAgICAgICB0cmltRW5kUmVnZXhwID0gbmV3IFJlZ0V4cCh3cyArIHdzICsg
IiokIik7CisgICAgU3RyaW5nLnByb3RvdHlwZS50cmltID0gZnVuY3Rpb24gdHJpbSgpIHsKKyAg
ICAgICAgaWYgKHRoaXMgPT09IHVuZGVmaW5lZCB8fCB0aGlzID09PSBudWxsKSB7CisgICAgICAg
ICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJjYW4ndCBjb252ZXJ0ICIrdGhpcysiIHRvIG9iamVj
dCIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSh0cmlt
QmVnaW5SZWdleHAsICIiKS5yZXBsYWNlKHRyaW1FbmRSZWdleHAsICIiKTsKKyAgICB9OworfQor
CisvLworLy8gVXRpbAorLy8gPT09PT09CisvLworCisvLyBFUzUgOS40CisvLyBodHRwOi8vZXM1
LmdpdGh1Yi5jb20vI3g5LjQKKy8vIGh0dHA6Ly9qc3BlcmYuY29tL3RvLWludGVnZXIKK3ZhciB0
b0ludGVnZXIgPSBmdW5jdGlvbiAobikgeworICAgIG4gPSArbjsKKyAgICBpZiAobiAhPT0gbikg
eyAvLyBpc05hTgorICAgICAgICBuID0gMDsKKyAgICB9IGVsc2UgaWYgKG4gIT09IDAgJiYgbiAh
PT0gKDEvMCkgJiYgbiAhPT0gLSgxLzApKSB7CisgICAgICAgIG4gPSAobiA+IDAgfHwgLTEpICog
TWF0aC5mbG9vcihNYXRoLmFicyhuKSk7CisgICAgfQorICAgIHJldHVybiBuOworfTsKKwordmFy
IHByZXBhcmVTdHJpbmcgPSAiYSJbMF0gIT0gImEiOworICAgIC8vIEVTNSA5LjkKKyAgICAvLyBo
dHRwOi8vZXM1LmdpdGh1Yi5jb20vI3g5LjkKK3ZhciB0b09iamVjdCA9IGZ1bmN0aW9uIChvKSB7
CisgICAgaWYgKG8gPT0gbnVsbCkgeyAvLyB0aGlzIG1hdGNoZXMgYm90aCBudWxsIGFuZCB1bmRl
ZmluZWQKKyAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FuJ3QgY29udmVydCAiK28rIiB0
byBvYmplY3QiKTsKKyAgICB9CisgICAgLy8gSWYgdGhlIGltcGxlbWVudGF0aW9uIGRvZXNuJ3Qg
c3VwcG9ydCBieS1pbmRleCBhY2Nlc3Mgb2YKKyAgICAvLyBzdHJpbmcgY2hhcmFjdGVycyAoZXgu
IElFIDwgOSksIHNwbGl0IHRoZSBzdHJpbmcKKyAgICBpZiAocHJlcGFyZVN0cmluZyAmJiB0eXBl
b2YgbyA9PSAic3RyaW5nIiAmJiBvKSB7CisgICAgICAgIHJldHVybiBvLnNwbGl0KCIiKTsKKyAg
ICB9CisgICAgcmV0dXJuIE9iamVjdChvKTsKK307CisKK30pOwpkaWZmIC0tZ2l0IGEvV2Vic2l0
ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvZmxpZ2h0anMtZXhh
bXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS9lczUtc2hpbS5taW4uanMgYi9XZWJzaXRlcy9i
cm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxl
LWFwcC9jb21wb25lbnRzL2VzNS1zaGltL2VzNS1zaGltLm1pbi5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNzY0
ZDZlYjE0YjlmNjMwODA4ZGQ4MDFmNTMyODY0MjFkYTFhMjQ5Ci0tLSAvZGV2L251bGwKKysrIGIv
V2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvZmxpZ2h0
anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS9lczUtc2hpbS5taW4uanMKQEAgLTAs
MCArMSwxMyBAQAorKGZ1bmN0aW9uKGYpeyJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmU/ZGVmaW5l
KGYpOiJmdW5jdGlvbiI9PXR5cGVvZiBZVUk/WVVJLmFkZCgiZXM1IixmKTpmKCl9KShmdW5jdGlv
bigpe0Z1bmN0aW9uLnByb3RvdHlwZS5iaW5kfHwoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ9ZnVu
Y3Rpb24oZCl7dmFyIGM9dGhpcztpZigiZnVuY3Rpb24iIT10eXBlb2YgYyl0aHJvdyBuZXcgVHlw
ZUVycm9yKCJGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICIr
Yyk7dmFyIGE9bi5jYWxsKGFyZ3VtZW50cywxKSxiPWZ1bmN0aW9uKCl7aWYodGhpcyBpbnN0YW5j
ZW9mIGIpe3ZhciBlPWZ1bmN0aW9uKCl7fTtlLnByb3RvdHlwZT1jLnByb3RvdHlwZTt2YXIgZT1u
ZXcgZSxpPWMuYXBwbHkoZSxhLmNvbmNhdChuLmNhbGwoYXJndW1lbnRzKSkpO3JldHVybiBPYmpl
Y3QoaSk9PT1pP2k6ZX1yZXR1cm4gYy5hcHBseShkLGEuY29uY2F0KG4uY2FsbChhcmd1bWVudHMp
KSl9OworcmV0dXJuIGJ9KTt2YXIgZj1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbCxtPU9iamVjdC5w
cm90b3R5cGUsbj1BcnJheS5wcm90b3R5cGUuc2xpY2UsbD1mLmJpbmQobS50b1N0cmluZyksbz1m
LmJpbmQobS5oYXNPd25Qcm9wZXJ0eSk7byhtLCJfX2RlZmluZUdldHRlcl9fIikmJihmLmJpbmQo
bS5fX2RlZmluZUdldHRlcl9fKSxmLmJpbmQobS5fX2RlZmluZVNldHRlcl9fKSxmLmJpbmQobS5f
X2xvb2t1cEdldHRlcl9fKSxmLmJpbmQobS5fX2xvb2t1cFNldHRlcl9fKSk7QXJyYXkuaXNBcnJh
eXx8KEFycmF5LmlzQXJyYXk9ZnVuY3Rpb24oZCl7cmV0dXJuIGwoZCk9PSJbb2JqZWN0IEFycmF5
XSJ9KTtBcnJheS5wcm90b3R5cGUuZm9yRWFjaHx8KEFycmF5LnByb3RvdHlwZS5mb3JFYWNoPWZ1
bmN0aW9uKGQsYyl7dmFyIGE9aih0aGlzKSxiPS0xLGU9YS5sZW5ndGg+Pj4wO2lmKGwoZCkhPSJb
b2JqZWN0IEZ1bmN0aW9uXSIpdGhyb3cgbmV3IFR5cGVFcnJvcjtmb3IoOysrYjxlOyliIGluCith
JiZkLmNhbGwoYyxhW2JdLGIsYSl9KTtBcnJheS5wcm90b3R5cGUubWFwfHwoQXJyYXkucHJvdG90
eXBlLm1hcD1mdW5jdGlvbihkLGMpe3ZhciBhPWoodGhpcyksYj1hLmxlbmd0aD4+PjAsZT1BcnJh
eShiKTtpZihsKGQpIT0iW29iamVjdCBGdW5jdGlvbl0iKXRocm93IG5ldyBUeXBlRXJyb3IoZCsi
IGlzIG5vdCBhIGZ1bmN0aW9uIik7Zm9yKHZhciBpPTA7aTxiO2krKylpIGluIGEmJihlW2ldPWQu
Y2FsbChjLGFbaV0saSxhKSk7cmV0dXJuIGV9KTtBcnJheS5wcm90b3R5cGUuZmlsdGVyfHwoQXJy
YXkucHJvdG90eXBlLmZpbHRlcj1mdW5jdGlvbihkLGMpe3ZhciBhPWoodGhpcyksYj1hLmxlbmd0
aD4+PjAsZT1bXSxpO2lmKGwoZCkhPSJbb2JqZWN0IEZ1bmN0aW9uXSIpdGhyb3cgbmV3IFR5cGVF
cnJvcihkKyIgaXMgbm90IGEgZnVuY3Rpb24iKTtmb3IodmFyIGY9MDtmPGI7ZisrKWlmKGYgaW4g
YSl7aT1hW2ZdO2QuY2FsbChjLGksZixhKSYmZS5wdXNoKGkpfXJldHVybiBlfSk7CitBcnJheS5w
cm90b3R5cGUuZXZlcnl8fChBcnJheS5wcm90b3R5cGUuZXZlcnk9ZnVuY3Rpb24oZCxjKXt2YXIg
YT1qKHRoaXMpLGI9YS5sZW5ndGg+Pj4wO2lmKGwoZCkhPSJbb2JqZWN0IEZ1bmN0aW9uXSIpdGhy
b3cgbmV3IFR5cGVFcnJvcihkKyIgaXMgbm90IGEgZnVuY3Rpb24iKTtmb3IodmFyIGU9MDtlPGI7
ZSsrKWlmKGUgaW4gYSYmIWQuY2FsbChjLGFbZV0sZSxhKSlyZXR1cm4gZmFsc2U7cmV0dXJuIHRy
dWV9KTtBcnJheS5wcm90b3R5cGUuc29tZXx8KEFycmF5LnByb3RvdHlwZS5zb21lPWZ1bmN0aW9u
KGQsYyl7dmFyIGE9aih0aGlzKSxiPWEubGVuZ3RoPj4+MDtpZihsKGQpIT0iW29iamVjdCBGdW5j
dGlvbl0iKXRocm93IG5ldyBUeXBlRXJyb3IoZCsiIGlzIG5vdCBhIGZ1bmN0aW9uIik7Zm9yKHZh
ciBlPTA7ZTxiO2UrKylpZihlIGluIGEmJmQuY2FsbChjLGFbZV0sZSxhKSlyZXR1cm4gdHJ1ZTty
ZXR1cm4gZmFsc2V9KTtBcnJheS5wcm90b3R5cGUucmVkdWNlfHwKKyhBcnJheS5wcm90b3R5cGUu
cmVkdWNlPWZ1bmN0aW9uKGQpe3ZhciBjPWoodGhpcyksYT1jLmxlbmd0aD4+PjA7aWYobChkKSE9
IltvYmplY3QgRnVuY3Rpb25dIil0aHJvdyBuZXcgVHlwZUVycm9yKGQrIiBpcyBub3QgYSBmdW5j
dGlvbiIpO2lmKCFhJiZhcmd1bWVudHMubGVuZ3RoPT0xKXRocm93IG5ldyBUeXBlRXJyb3IoInJl
ZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTt2YXIgYj0wLGU7aWYo
YXJndW1lbnRzLmxlbmd0aD49MillPWFyZ3VtZW50c1sxXTtlbHNle2Rve2lmKGIgaW4gYyl7ZT1j
W2IrK107YnJlYWt9aWYoKytiPj1hKXRocm93IG5ldyBUeXBlRXJyb3IoInJlZHVjZSBvZiBlbXB0
eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTt9d2hpbGUoMSl9Zm9yKDtiPGE7YisrKWIg
aW4gYyYmKGU9ZC5jYWxsKHZvaWQgMCxlLGNbYl0sYixjKSk7cmV0dXJuIGV9KTtBcnJheS5wcm90
b3R5cGUucmVkdWNlUmlnaHR8fChBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQ9CitmdW5jdGlv
bihkKXt2YXIgYz1qKHRoaXMpLGE9Yy5sZW5ndGg+Pj4wO2lmKGwoZCkhPSJbb2JqZWN0IEZ1bmN0
aW9uXSIpdGhyb3cgbmV3IFR5cGVFcnJvcihkKyIgaXMgbm90IGEgZnVuY3Rpb24iKTtpZighYSYm
YXJndW1lbnRzLmxlbmd0aD09MSl0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1Y2VSaWdodCBvZiBl
bXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTt2YXIgYixhPWEtMTtpZihhcmd1bWVu
dHMubGVuZ3RoPj0yKWI9YXJndW1lbnRzWzFdO2Vsc2V7ZG97aWYoYSBpbiBjKXtiPWNbYS0tXTti
cmVha31pZigtLWE8MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1Y2VSaWdodCBvZiBlbXB0eSBh
cnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTt9d2hpbGUoMSl9ZG8gYSBpbiB0aGlzJiYoYj1k
LmNhbGwodm9pZCAwLGIsY1thXSxhLGMpKTt3aGlsZShhLS0pO3JldHVybiBifSk7QXJyYXkucHJv
dG90eXBlLmluZGV4T2Z8fChBcnJheS5wcm90b3R5cGUuaW5kZXhPZj0KK2Z1bmN0aW9uKGQpe3Zh
ciBjPWoodGhpcyksYT1jLmxlbmd0aD4+PjA7aWYoIWEpcmV0dXJuLTE7dmFyIGI9MDthcmd1bWVu
dHMubGVuZ3RoPjEmJihiPXAoYXJndW1lbnRzWzFdKSk7Zm9yKGI9Yj49MD9iOk1hdGgubWF4KDAs
YStiKTtiPGE7YisrKWlmKGIgaW4gYyYmY1tiXT09PWQpcmV0dXJuIGI7cmV0dXJuLTF9KTtBcnJh
eS5wcm90b3R5cGUubGFzdEluZGV4T2Z8fChBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVu
Y3Rpb24oZCl7dmFyIGM9aih0aGlzKSxhPWMubGVuZ3RoPj4+MDtpZighYSlyZXR1cm4tMTt2YXIg
Yj1hLTE7YXJndW1lbnRzLmxlbmd0aD4xJiYoYj1NYXRoLm1pbihiLHAoYXJndW1lbnRzWzFdKSkp
O2ZvcihiPWI+PTA/YjphLU1hdGguYWJzKGIpO2I+PTA7Yi0tKWlmKGIgaW4gYyYmZD09PWNbYl0p
cmV0dXJuIGI7cmV0dXJuLTF9KTtpZighT2JqZWN0LmtleXMpe3ZhciBxPSEwLHI9InRvU3RyaW5n
IHRvTG9jYWxlU3RyaW5nIHZhbHVlT2YgaGFzT3duUHJvcGVydHkgaXNQcm90b3R5cGVPZiBwcm9w
ZXJ0eUlzRW51bWVyYWJsZSBjb25zdHJ1Y3RvciIuc3BsaXQoIiAiKSwKK3M9ci5sZW5ndGgsdDtm
b3IodCBpbnt0b1N0cmluZzpudWxsfSlxPSExO09iamVjdC5rZXlzPWZ1bmN0aW9uKGQpe2lmKHR5
cGVvZiBkIT0ib2JqZWN0IiYmdHlwZW9mIGQhPSJmdW5jdGlvbiJ8fGQ9PT1udWxsKXRocm93IG5l
dyBUeXBlRXJyb3IoIk9iamVjdC5rZXlzIGNhbGxlZCBvbiBhIG5vbi1vYmplY3QiKTt2YXIgYz1b
XSxhO2ZvcihhIGluIGQpbyhkLGEpJiZjLnB1c2goYSk7aWYocSlmb3IoYT0wO2E8czthKyspe3Zh
ciBiPXJbYV07byhkLGIpJiZjLnB1c2goYil9cmV0dXJuIGN9fWlmKCFEYXRlLnByb3RvdHlwZS50
b0lTT1N0cmluZ3x8LTE9PT0obmV3IERhdGUoLTYyMTk4NzU1MkU1KSkudG9JU09TdHJpbmcoKS5p
bmRleE9mKCItMDAwMDAxIikpRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmc9ZnVuY3Rpb24oKXt2
YXIgZCxjLGEsYjtpZighaXNGaW5pdGUodGhpcykpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkRhdGUu
cHJvdG90eXBlLnRvSVNPU3RyaW5nIGNhbGxlZCBvbiBub24tZmluaXRlIHZhbHVlLiIpOworZD1b
dGhpcy5nZXRVVENNb250aCgpKzEsdGhpcy5nZXRVVENEYXRlKCksdGhpcy5nZXRVVENIb3Vycygp
LHRoaXMuZ2V0VVRDTWludXRlcygpLHRoaXMuZ2V0VVRDU2Vjb25kcygpXTtiPXRoaXMuZ2V0VVRD
RnVsbFllYXIoKTtiPShiPDA/Ii0iOmI+OTk5OT8iKyI6IiIpKygiMDAwMDAiK01hdGguYWJzKGIp
KS5zbGljZSgwPD1iJiZiPD05OTk5Py00Oi02KTtmb3IoYz1kLmxlbmd0aDtjLS07KXthPWRbY107
YTwxMCYmKGRbY109IjAiK2EpfXJldHVybiBiKyItIitkLnNsaWNlKDAsMikuam9pbigiLSIpKyJU
IitkLnNsaWNlKDIpLmpvaW4oIjoiKSsiLiIrKCIwMDAiK3RoaXMuZ2V0VVRDTWlsbGlzZWNvbmRz
KCkpLnNsaWNlKC0zKSsiWiJ9O0RhdGUubm93fHwoRGF0ZS5ub3c9ZnVuY3Rpb24oKXtyZXR1cm4o
bmV3IERhdGUpLmdldFRpbWUoKX0pO0RhdGUucHJvdG90eXBlLnRvSlNPTnx8KERhdGUucHJvdG90
eXBlLnRvSlNPTj1mdW5jdGlvbigpe2lmKHR5cGVvZiB0aGlzLnRvSVNPU3RyaW5nIT0KKyJmdW5j
dGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigidG9JU09TdHJpbmcgcHJvcGVydHkgaXMgbm90IGNh
bGxhYmxlIik7cmV0dXJuIHRoaXMudG9JU09TdHJpbmcoKX0pO2lmKCFEYXRlLnBhcnNlfHw4NjRF
MTMhPT1EYXRlLnBhcnNlKCIrMjc1NzYwLTA5LTEzVDAwOjAwOjAwLjAwMFoiKSl7dmFyIGc9RGF0
ZSxmPWZ1bmN0aW9uIGMoYSxiLGUsZixoLGosbCl7dmFyIGs9YXJndW1lbnRzLmxlbmd0aDtpZih0
aGlzIGluc3RhbmNlb2YgZyl7az1rPT0xJiZTdHJpbmcoYSk9PT1hP25ldyBnKGMucGFyc2UoYSkp
Oms+PTc/bmV3IGcoYSxiLGUsZixoLGosbCk6az49Nj9uZXcgZyhhLGIsZSxmLGgsaik6az49NT9u
ZXcgZyhhLGIsZSxmLGgpOms+PTQ/bmV3IGcoYSxiLGUsZik6az49Mz9uZXcgZyhhLGIsZSk6az49
Mj9uZXcgZyhhLGIpOms+PTE/bmV3IGcoYSk6bmV3IGc7ay5jb25zdHJ1Y3Rvcj1jO3JldHVybiBr
fXJldHVybiBnLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdT1SZWdFeHAoIl4oXFxkezR9fFsrLV1c
XGR7Nn0pKD86LShcXGR7Mn0pKD86LShcXGR7Mn0pKD86VChcXGR7Mn0pOihcXGR7Mn0pKD86Oihc
XGR7Mn0pKD86XFwuKFxcZHszfSkpPyk/KD86WnwoPzooWy0rXSkoXFxkezJ9KTooXFxkezJ9KSkp
Pyk/KT8pPyQiKSwKK2g7Zm9yKGggaW4gZylmW2hdPWdbaF07Zi5ub3c9Zy5ub3c7Zi5VVEM9Zy5V
VEM7Zi5wcm90b3R5cGU9Zy5wcm90b3R5cGU7Zi5wcm90b3R5cGUuY29uc3RydWN0b3I9ZjtmLnBh
cnNlPWZ1bmN0aW9uKGMpe3ZhciBhPXUuZXhlYyhjKTtpZihhKXthLnNoaWZ0KCk7Zm9yKHZhciBi
PTE7Yjw3O2IrKyl7YVtiXT0rKGFbYl18fChiPDM/MTowKSk7Yj09MSYmYVtiXS0tfXZhciBlPSth
LnBvcCgpLGY9K2EucG9wKCksaD1hLnBvcCgpLGI9MDtpZihoKXtpZihmPjIzfHxlPjU5KXJldHVy
biBOYU47Yj0oZio2MCtlKSo2RTQqKGg9PSIrIj8tMToxKX1lPSthWzBdO2lmKDA8PWUmJmU8PTk5
KXthWzBdPWUrNDAwO3JldHVybiBnLlVUQy5hcHBseSh0aGlzLGEpK2ItMTI2MjI3ODA4RTV9cmV0
dXJuIGcuVVRDLmFwcGx5KHRoaXMsYSkrYn1yZXR1cm4gZy5wYXJzZS5hcHBseSh0aGlzLGFyZ3Vt
ZW50cyl9O0RhdGU9Zn1oPSJcdFxuXHgwQlxmXHIgXHUwMGEwXHUxNjgwXHUxODBlXHUyMDAwXHUy
MDAxXHUyMDAyXHUyMDAzXHUyMDA0XHUyMDA1XHUyMDA2XHUyMDA3XHUyMDA4XHUyMDA5XHUyMDBh
XHUyMDJmXHUyMDVmXHUzMDAwXHUyMDI4XHUyMDI5XHVmZWZmIjsKK2lmKCFTdHJpbmcucHJvdG90
eXBlLnRyaW18fGgudHJpbSgpKXtoPSJbIitoKyJdIjt2YXIgdj1SZWdFeHAoIl4iK2graCsiKiIp
LHc9UmVnRXhwKGgraCsiKiQiKTtTdHJpbmcucHJvdG90eXBlLnRyaW09ZnVuY3Rpb24oKXtpZih0
aGlzPT09dm9pZCAwfHx0aGlzPT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYW4ndCBjb252
ZXJ0ICIrdGhpcysiIHRvIG9iamVjdCIpO3JldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSh2LCIi
KS5yZXBsYWNlKHcsIiIpfX12YXIgcD1mdW5jdGlvbihjKXtjPStjO2MhPT1jP2M9MDpjIT09MCYm
KGMhPT0xLzAmJmMhPT0tKDEvMCkpJiYoYz0oYz4wfHwtMSkqTWF0aC5mbG9vcihNYXRoLmFicyhj
KSkpO3JldHVybiBjfSx4PSJhIiE9ImEiWzBdLGo9ZnVuY3Rpb24oYyl7aWYoYz09bnVsbCl0aHJv
dyBuZXcgVHlwZUVycm9yKCJjYW4ndCBjb252ZXJ0ICIrYysiIHRvIG9iamVjdCIpO3JldHVybiB4
JiZ0eXBlb2YgYz09InN0cmluZyImJmM/Yy5zcGxpdCgiIik6CitPYmplY3QoYyl9fSk7CmRpZmYg
LS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNl
cy9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL3Rlc3RzL2hlbHBlcnMv
aC1raWxsLmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNv
dXJjZXMvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS90ZXN0cy9oZWxw
ZXJzL2gta2lsbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MGI0MTgwMjNmOGE5YTJjNGY3OGRlZjI3MmRhZWEx
Mjc1YWU2ZmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9T
cGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9l
czUtc2hpbS90ZXN0cy9oZWxwZXJzL2gta2lsbC5qcwpAQCAtMCwwICsxLDU5IEBACisvLyBUaGlz
IG1ldGhvZHMgYWxsb3dzIHRoZSBraWxsaW5nIG9mIGJ1aWx0LWluIGZ1bmN0aW9ucywKKy8vIHNv
IHRoZSBzaGltIGNhbiB0YWtlIG92ZXIgd2l0aCB0aGF0IGltcGxlbWVudGF0aW9uCit2YXIgSExQ
ID0gKGZ1bmN0aW9uKCkgeworICAgICJ1c2Ugc3RyaWN0IjsKKyAgICB2YXIga2lsbDsKKyAgICAK
KyAgICBraWxsID0gZnVuY3Rpb24oX2NsYXNzLCBtZXRob2RzKSB7CisgICAgICAgIC8qaWYoIUFy
cmF5LmlzQXJyYXkobWV0aG9kcykpCisgICAgICAgICAgICByZXR1cm47Ki8KKyAgICAgICAgaWYo
IV9jbGFzcy5vcmlnaW5hbHMpCisgICAgICAgICAgICBfY2xhc3Mub3JpZ2luYWxzID0ge307CisK
KyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IG1ldGhvZHMubGVuZ3RoOyBpIDwgbGVuOyBp
KyspIHsKKyAgICAgICAgICAgIHZhciBvYmogPSBtZXRob2RzW2ldOworICAgICAgICAgICAgX2Ns
YXNzLm9yaWdpbmFsc1tvYmpdID0gX2NsYXNzW29ial07CisgICAgICAgICAgICBkZWxldGUgX2Ns
YXNzW29ial07CisgICAgICAgICAgICBpZiAob2JqIGluIF9jbGFzcykgeworICAgICAgICAgICAg
ICAgIC8vIHRyeSBzb21ldGhpbmcgbW9yZSBhZ2dyZXNzaXZlIHNpbmNlIFY4IGF0IGxlYXN0Cisg
ICAgICAgICAgICAgICAgLy8gYXBwZWFycyB0byBpZ25vcmUgdGhlIGRlbGV0ZS4KKyAgICAgICAg
ICAgICAgICBfY2xhc3Nbb2JqXSA9IG51bGw7CisgICAgICAgICAgICAgICAgaWYgKF9jbGFzc1tv
YmpdKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJDb3Vsbid0IG92ZXJ3cml0
ZSIsIG9iaiwgIm9mIiwgX2NsYXNzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9OworICAgIHJldHVybiB7IGtpbGw6IGtpbGwgfTsKK30oKSk7CisK
K0hMUC5raWxsKEZ1bmN0aW9uLnByb3RvdHlwZSwgWworICAgICdiaW5kJworXSk7CisKK0hMUC5r
aWxsKEFycmF5LCBbCisgICAgJ2lzQXJyYXknCitdKTsKKworSExQLmtpbGwoU3RyaW5nLnByb3Rv
dHlwZSwgWworICAgICJ0cmltIgorXSk7CisKK0hMUC5raWxsKE9iamVjdCwgWworICAgICdrZXlz
JworXSk7CisKK0hMUC5raWxsKERhdGUsIFsKKyAgICAnbm93JywgJ3BhcnNlJworXSk7CisKK0hM
UC5raWxsKERhdGUucHJvdG90eXBlLCBbCisgICAgInRvSlNPTiIsICJ0b0lTT1N0cmluZyIKK10p
OworCitITFAua2lsbChBcnJheS5wcm90b3R5cGUsIFsKKyAgICAnZm9yRWFjaCcsICdzb21lJywg
J2V2ZXJ5JywgCisgICAgJ2luZGV4T2YnLCAnbGFzdEluZGV4T2YnLCAKKyAgICAnbWFwJywgJ2Zp
bHRlcicsIAorICAgICdyZWR1Y2UnLCAncmVkdWNlUmlnaHQnCitdKTsKZGlmZiAtLWdpdCBhL1dl
YnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdodGpz
LWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vdGVzdHMvaGVscGVycy9oLW1hdGNoZXJz
LmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMv
ZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS90ZXN0cy9oZWxwZXJzL2gt
bWF0Y2hlcnMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGRhNzUxM2E1ZjRlNTRjMmRjMWZhMTE1NmNkYWFjNmJj
YjJkMmRkNQotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3Bl
ZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1
LXNoaW0vdGVzdHMvaGVscGVycy9oLW1hdGNoZXJzLmpzCkBAIC0wLDAgKzEsMzQgQEAKK2JlZm9y
ZUVhY2goZnVuY3Rpb24oKSB7CisgICAgdGhpcy5hZGRNYXRjaGVycyh7CisgICAgICAgIHRvRXhh
Y3RseU1hdGNoOiBmdW5jdGlvbihleHBlY3RlZCkgeworICAgICAgICAgICAgdmFyIGExLCBhMiwK
KyAgICAgICAgICAgICAgICBsLCBpLAorICAgICAgICAgICAgICAgIGtleSwKKyAgICAgICAgICAg
ICAgICBhY3R1YWwgPSB0aGlzLmFjdHVhbDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdmFy
IGdldEtleXMgPSBmdW5jdGlvbihvKSB7CisgICAgICAgICAgICAgICAgdmFyIGEgPSBbXTsKKyAg
ICAgICAgICAgICAgICBmb3Ioa2V5IGluIG8pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoby5o
YXNPd25Qcm9wZXJ0eShrZXkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhLnB1c2goa2V5
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICByZXR1cm4gYTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGExID0gZ2V0S2V5cyhh
Y3R1YWwpOworICAgICAgICAgICAgYTIgPSBnZXRLZXlzKGV4cGVjdGVkKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgbCA9IGExLmxlbmd0aDsKKyAgICAgICAgICAgIGlmKGwgIT09IGEyLmxl
bmd0aCkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGZvcihpID0gMDsgaSA8IGw7IGkrKykgeworICAgICAgICAgICAgICAgIGtleSA9
IGExW2ldOworICAgICAgICAgICAgICAgIGV4cGVjdChrZXkpLnRvRXF1YWwoYTJbaV0pOworICAg
ICAgICAgICAgICAgIGV4cGVjdChhY3R1YWxba2V5XSkudG9FcXVhbChleHBlY3RlZFtrZXldKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICB9KQorfSk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gu
b3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25l
bnRzL2VzNS1zaGltL3Rlc3RzL2hlbHBlcnMvaC5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5v
cmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVu
dHMvZXM1LXNoaW0vdGVzdHMvaGVscGVycy9oLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVkZTUxZWY2NzNhMjVk
Y2IzOGVmNGFmYTNiYjg5MjNiOGRlOWJjNGQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9i
cm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxl
LWFwcC9jb21wb25lbnRzL2VzNS1zaGltL3Rlc3RzL2hlbHBlcnMvaC5qcwpAQCAtMCwwICsxLDMg
QEAKK2Z1bmN0aW9uIGltcGxlbWVudCgpIHsKKyAgICB0aHJvdyAnTm90IGltcGxlbWVudGVkJzsK
K30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93
c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFw
cC9jb21wb25lbnRzL2VzNS1zaGltL3Rlc3RzL2luZGV4Lmh0bWwgYi9XZWJzaXRlcy9icm93c2Vy
YmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFwcC9j
b21wb25lbnRzL2VzNS1zaGltL3Rlc3RzL2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTJiZjIxM2Yz
OTAxMWZmYTQxYjRhY2ZjMGNlNzM0ZWE3OGMxNWZiMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNp
dGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdodGpzLWV4
YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vdGVzdHMvaW5kZXguaHRtbApAQCAtMCwwICsx
LDYyIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHRpdGxlPkphc21p
bmUgU3BlYyBSdW5uZXI8L3RpdGxlPgorCisgICAgPGxpbmsgcmVsPSJzaG9ydGN1dCBpY29uIiB0
eXBlPSJpbWFnZS9wbmciIGhyZWY9ImxpYi9qYXNtaW5lX2Zhdmljb24ucG5nIj4KKworICAgIDxs
aW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9ImxpYi9qYXNtaW5lLmNz
cyI+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ibGliL2phc21pbmUu
anMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imxp
Yi9qYXNtaW5lLWh0bWwuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZh
c2NyaXB0IiBzcmM9ImxpYi9qc29uMi5qcyI+PC9zY3JpcHQ+CisKKyAgICA8IS0tIGluY2x1ZGUg
aGVscGVyIGZpbGVzIGhlcmUuLi4gLS0+CisgICAgPHNjcmlwdCBzcmM9ImhlbHBlcnMvaC5qcyI+
PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9ImhlbHBlcnMvaC1raWxsLmpzIj48L3NjcmlwdD4K
KyAgICA8c2NyaXB0IHNyYz0iaGVscGVycy9oLW1hdGNoZXJzLmpzIj48L3NjcmlwdD4KKworICAg
IDwhLS0gaW5jbHVkZSBzb3VyY2UgZmlsZXMgaGVyZS4uLiAtLT4KKyAgICA8c2NyaXB0IHNyYz0i
Li4vZXM1LXNoaW0uanMiPjwvc2NyaXB0PgorCisgICAgPCEtLSBpbmNsdWRlIHNwZWMgZmlsZXMg
aGVyZS4uLiAtLT4KKyAgICA8c2NyaXB0IHNyYz0ic3BlYy9zLWFycmF5LmpzIj48L3NjcmlwdD4K
KyAgICA8c2NyaXB0IHNyYz0ic3BlYy9zLWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKyAgICA8c2Ny
aXB0IHNyYz0ic3BlYy9zLXN0cmluZy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InNw
ZWMvcy1vYmplY3QuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJzcGVjL3MtZGF0ZS5q
cyI+PC9zY3JpcHQ+CisKKworICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAg
ICAgICAgKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdmFyIGphc21pbmVFbnYgPSBqYXNtaW5l
LmdldEVudigpOworICAgICAgICAgICAgamFzbWluZUVudi51cGRhdGVJbnRlcnZhbCA9IDEwMDA7
CisKKyAgICAgICAgICAgIHZhciB0cml2aWFsUmVwb3J0ZXIgPSBuZXcgamFzbWluZS5Ucml2aWFs
UmVwb3J0ZXIoKTsKKworICAgICAgICAgICAgamFzbWluZUVudi5hZGRSZXBvcnRlcih0cml2aWFs
UmVwb3J0ZXIpOworCisgICAgICAgICAgICBqYXNtaW5lRW52LnNwZWNGaWx0ZXIgPSBmdW5jdGlv
bihzcGVjKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRyaXZpYWxSZXBvcnRlci5zcGVjRmls
dGVyKHNwZWMpOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgdmFyIGN1cnJlbnRXaW5k
b3dPbmxvYWQgPSB3aW5kb3cub25sb2FkOworCisgICAgICAgICAgICB3aW5kb3cub25sb2FkID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRXaW5kb3dPbmxvYWQpIHsK
KyAgICAgICAgICAgICAgICAgICAgY3VycmVudFdpbmRvd09ubG9hZCgpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBleGVjSmFzbWluZSgpOworICAgICAgICAgICAgfTsKKwor
ICAgICAgICAgICAgZnVuY3Rpb24gZXhlY0phc21pbmUoKSB7CisgICAgICAgICAgICAgICAgamFz
bWluZUVudi5leGVjdXRlKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSkoKTsKKyAgICA8
L3NjcmlwdD4KKworPC9oZWFkPgorCis8Ym9keT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2Zs
aWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vdGVzdHMvbGliL2phc21pbmUt
aHRtbC5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3Vy
Y2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vdGVzdHMvbGliL2ph
c21pbmUtaHRtbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MzgzNDAxMGY2MDE0NWRlYjhiOGRmNjg2N2E5MDA2
MzIwOWMyYTBiCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9T
cGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9l
czUtc2hpbS90ZXN0cy9saWIvamFzbWluZS1odG1sLmpzCkBAIC0wLDAgKzEsMTkwIEBACitqYXNt
aW5lLlRyaXZpYWxSZXBvcnRlciA9IGZ1bmN0aW9uKGRvYykgeworICB0aGlzLmRvY3VtZW50ID0g
ZG9jIHx8IGRvY3VtZW50OworICB0aGlzLnN1aXRlRGl2cyA9IHt9OworICB0aGlzLmxvZ1J1bm5p
bmdTcGVjcyA9IGZhbHNlOworfTsKKworamFzbWluZS5Ucml2aWFsUmVwb3J0ZXIucHJvdG90eXBl
LmNyZWF0ZURvbSA9IGZ1bmN0aW9uKHR5cGUsIGF0dHJzLCBjaGlsZHJlblZhckFyZ3MpIHsKKyAg
dmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0eXBlKTsKKworICBmb3IgKHZhciBpID0g
MjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeworICAgIHZhciBjaGlsZCA9IGFyZ3VtZW50
c1tpXTsKKworICAgIGlmICh0eXBlb2YgY2hpbGQgPT09ICdzdHJpbmcnKSB7CisgICAgICBlbC5h
cHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjaGlsZCkpOworICAgIH0gZWxzZSB7
CisgICAgICBpZiAoY2hpbGQpIHsgZWwuYXBwZW5kQ2hpbGQoY2hpbGQpOyB9CisgICAgfQorICB9
CisKKyAgZm9yICh2YXIgYXR0ciBpbiBhdHRycykgeworICAgIGlmIChhdHRyID09ICJjbGFzc05h
bWUiKSB7CisgICAgICBlbFthdHRyXSA9IGF0dHJzW2F0dHJdOworICAgIH0gZWxzZSB7CisgICAg
ICBlbC5zZXRBdHRyaWJ1dGUoYXR0ciwgYXR0cnNbYXR0cl0pOworICAgIH0KKyAgfQorCisgIHJl
dHVybiBlbDsKK307CisKK2phc21pbmUuVHJpdmlhbFJlcG9ydGVyLnByb3RvdHlwZS5yZXBvcnRS
dW5uZXJTdGFydGluZyA9IGZ1bmN0aW9uKHJ1bm5lcikgeworICB2YXIgc2hvd1Bhc3NlZCwgc2hv
d1NraXBwZWQ7CisKKyAgdGhpcy5vdXRlckRpdiA9IHRoaXMuY3JlYXRlRG9tKCdkaXYnLCB7IGNs
YXNzTmFtZTogJ2phc21pbmVfcmVwb3J0ZXInIH0sCisgICAgICB0aGlzLmNyZWF0ZURvbSgnZGl2
JywgeyBjbGFzc05hbWU6ICdiYW5uZXInIH0sCisgICAgICAgIHRoaXMuY3JlYXRlRG9tKCdkaXYn
LCB7IGNsYXNzTmFtZTogJ2xvZ28nIH0sCisgICAgICAgICAgICB0aGlzLmNyZWF0ZURvbSgnc3Bh
bicsIHsgY2xhc3NOYW1lOiAndGl0bGUnIH0sICJKYXNtaW5lIiksCisgICAgICAgICAgICB0aGlz
LmNyZWF0ZURvbSgnc3BhbicsIHsgY2xhc3NOYW1lOiAndmVyc2lvbicgfSwgcnVubmVyLmVudi52
ZXJzaW9uU3RyaW5nKCkpKSwKKyAgICAgICAgdGhpcy5jcmVhdGVEb20oJ2RpdicsIHsgY2xhc3NO
YW1lOiAnb3B0aW9ucycgfSwKKyAgICAgICAgICAgICJTaG93ICIsCisgICAgICAgICAgICBzaG93
UGFzc2VkID0gdGhpcy5jcmVhdGVEb20oJ2lucHV0JywgeyBpZDogIl9famFzbWluZV9Ucml2aWFs
UmVwb3J0ZXJfc2hvd1Bhc3NlZF9fIiwgdHlwZTogJ2NoZWNrYm94JyB9KSwKKyAgICAgICAgICAg
IHRoaXMuY3JlYXRlRG9tKCdsYWJlbCcsIHsgImZvciI6ICJfX2phc21pbmVfVHJpdmlhbFJlcG9y
dGVyX3Nob3dQYXNzZWRfXyIgfSwgIiBwYXNzZWQgIiksCisgICAgICAgICAgICBzaG93U2tpcHBl
ZCA9IHRoaXMuY3JlYXRlRG9tKCdpbnB1dCcsIHsgaWQ6ICJfX2phc21pbmVfVHJpdmlhbFJlcG9y
dGVyX3Nob3dTa2lwcGVkX18iLCB0eXBlOiAnY2hlY2tib3gnIH0pLAorICAgICAgICAgICAgdGhp
cy5jcmVhdGVEb20oJ2xhYmVsJywgeyAiZm9yIjogIl9famFzbWluZV9Ucml2aWFsUmVwb3J0ZXJf
c2hvd1NraXBwZWRfXyIgfSwgIiBza2lwcGVkIikKKyAgICAgICAgICAgICkKKyAgICAgICAgICAp
LAorCisgICAgICB0aGlzLnJ1bm5lckRpdiA9IHRoaXMuY3JlYXRlRG9tKCdkaXYnLCB7IGNsYXNz
TmFtZTogJ3J1bm5lciBydW5uaW5nJyB9LAorICAgICAgICAgIHRoaXMuY3JlYXRlRG9tKCdhJywg
eyBjbGFzc05hbWU6ICdydW5fc3BlYycsIGhyZWY6ICc/JyB9LCAicnVuIGFsbCIpLAorICAgICAg
ICAgIHRoaXMucnVubmVyTWVzc2FnZVNwYW4gPSB0aGlzLmNyZWF0ZURvbSgnc3BhbicsIHt9LCAi
UnVubmluZy4uLiIpLAorICAgICAgICAgIHRoaXMuZmluaXNoZWRBdFNwYW4gPSB0aGlzLmNyZWF0
ZURvbSgnc3BhbicsIHsgY2xhc3NOYW1lOiAnZmluaXNoZWQtYXQnIH0sICIiKSkKKyAgICAgICk7
CisKKyAgdGhpcy5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMub3V0ZXJEaXYpOworCisg
IHZhciBzdWl0ZXMgPSBydW5uZXIuc3VpdGVzKCk7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgc3Vp
dGVzLmxlbmd0aDsgaSsrKSB7CisgICAgdmFyIHN1aXRlID0gc3VpdGVzW2ldOworICAgIHZhciBz
dWl0ZURpdiA9IHRoaXMuY3JlYXRlRG9tKCdkaXYnLCB7IGNsYXNzTmFtZTogJ3N1aXRlJyB9LAor
ICAgICAgICB0aGlzLmNyZWF0ZURvbSgnYScsIHsgY2xhc3NOYW1lOiAncnVuX3NwZWMnLCBocmVm
OiAnP3NwZWM9JyArIGVuY29kZVVSSUNvbXBvbmVudChzdWl0ZS5nZXRGdWxsTmFtZSgpKSB9LCAi
cnVuIiksCisgICAgICAgIHRoaXMuY3JlYXRlRG9tKCdhJywgeyBjbGFzc05hbWU6ICdkZXNjcmlw
dGlvbicsIGhyZWY6ICc/c3BlYz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHN1aXRlLmdldEZ1bGxO
YW1lKCkpIH0sIHN1aXRlLmRlc2NyaXB0aW9uKSk7CisgICAgdGhpcy5zdWl0ZURpdnNbc3VpdGUu
aWRdID0gc3VpdGVEaXY7CisgICAgdmFyIHBhcmVudERpdiA9IHRoaXMub3V0ZXJEaXY7CisgICAg
aWYgKHN1aXRlLnBhcmVudFN1aXRlKSB7CisgICAgICBwYXJlbnREaXYgPSB0aGlzLnN1aXRlRGl2
c1tzdWl0ZS5wYXJlbnRTdWl0ZS5pZF07CisgICAgfQorICAgIHBhcmVudERpdi5hcHBlbmRDaGls
ZChzdWl0ZURpdik7CisgIH0KKworICB0aGlzLnN0YXJ0ZWRBdCA9IG5ldyBEYXRlKCk7CisKKyAg
dmFyIHNlbGYgPSB0aGlzOworICBzaG93UGFzc2VkLm9uY2xpY2sgPSBmdW5jdGlvbihldnQpIHsK
KyAgICBpZiAoc2hvd1Bhc3NlZC5jaGVja2VkKSB7CisgICAgICBzZWxmLm91dGVyRGl2LmNsYXNz
TmFtZSArPSAnIHNob3ctcGFzc2VkJzsKKyAgICB9IGVsc2UgeworICAgICAgc2VsZi5vdXRlckRp
di5jbGFzc05hbWUgPSBzZWxmLm91dGVyRGl2LmNsYXNzTmFtZS5yZXBsYWNlKC8gc2hvdy1wYXNz
ZWQvLCAnJyk7CisgICAgfQorICB9OworCisgIHNob3dTa2lwcGVkLm9uY2xpY2sgPSBmdW5jdGlv
bihldnQpIHsKKyAgICBpZiAoc2hvd1NraXBwZWQuY2hlY2tlZCkgeworICAgICAgc2VsZi5vdXRl
ckRpdi5jbGFzc05hbWUgKz0gJyBzaG93LXNraXBwZWQnOworICAgIH0gZWxzZSB7CisgICAgICBz
ZWxmLm91dGVyRGl2LmNsYXNzTmFtZSA9IHNlbGYub3V0ZXJEaXYuY2xhc3NOYW1lLnJlcGxhY2Uo
LyBzaG93LXNraXBwZWQvLCAnJyk7CisgICAgfQorICB9OworfTsKKworamFzbWluZS5Ucml2aWFs
UmVwb3J0ZXIucHJvdG90eXBlLnJlcG9ydFJ1bm5lclJlc3VsdHMgPSBmdW5jdGlvbihydW5uZXIp
IHsKKyAgdmFyIHJlc3VsdHMgPSBydW5uZXIucmVzdWx0cygpOworICB2YXIgY2xhc3NOYW1lID0g
KHJlc3VsdHMuZmFpbGVkQ291bnQgPiAwKSA/ICJydW5uZXIgZmFpbGVkIiA6ICJydW5uZXIgcGFz
c2VkIjsKKyAgdGhpcy5ydW5uZXJEaXYuc2V0QXR0cmlidXRlKCJjbGFzcyIsIGNsYXNzTmFtZSk7
CisgIC8vZG8gaXQgdHdpY2UgZm9yIElFCisgIHRoaXMucnVubmVyRGl2LnNldEF0dHJpYnV0ZSgi
Y2xhc3NOYW1lIiwgY2xhc3NOYW1lKTsKKyAgdmFyIHNwZWNzID0gcnVubmVyLnNwZWNzKCk7Cisg
IHZhciBzcGVjQ291bnQgPSAwOworICBmb3IgKHZhciBpID0gMDsgaSA8IHNwZWNzLmxlbmd0aDsg
aSsrKSB7CisgICAgaWYgKHRoaXMuc3BlY0ZpbHRlcihzcGVjc1tpXSkpIHsKKyAgICAgIHNwZWND
b3VudCsrOworICAgIH0KKyAgfQorICB2YXIgbWVzc2FnZSA9ICIiICsgc3BlY0NvdW50ICsgIiBz
cGVjIiArIChzcGVjQ291bnQgPT0gMSA/ICIiIDogInMiICkgKyAiLCAiICsgcmVzdWx0cy5mYWls
ZWRDb3VudCArICIgZmFpbHVyZSIgKyAoKHJlc3VsdHMuZmFpbGVkQ291bnQgPT0gMSkgPyAiIiA6
ICJzIik7CisgIG1lc3NhZ2UgKz0gIiBpbiAiICsgKChuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIHRo
aXMuc3RhcnRlZEF0LmdldFRpbWUoKSkgLyAxMDAwKSArICJzIjsKKyAgdGhpcy5ydW5uZXJNZXNz
YWdlU3Bhbi5yZXBsYWNlQ2hpbGQodGhpcy5jcmVhdGVEb20oJ2EnLCB7IGNsYXNzTmFtZTogJ2Rl
c2NyaXB0aW9uJywgaHJlZjogJz8nfSwgbWVzc2FnZSksIHRoaXMucnVubmVyTWVzc2FnZVNwYW4u
Zmlyc3RDaGlsZCk7CisKKyAgdGhpcy5maW5pc2hlZEF0U3Bhbi5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVUZXh0Tm9kZSgiRmluaXNoZWQgYXQgIiArIG5ldyBEYXRlKCkudG9TdHJpbmcoKSkp
OworfTsKKworamFzbWluZS5Ucml2aWFsUmVwb3J0ZXIucHJvdG90eXBlLnJlcG9ydFN1aXRlUmVz
dWx0cyA9IGZ1bmN0aW9uKHN1aXRlKSB7CisgIHZhciByZXN1bHRzID0gc3VpdGUucmVzdWx0cygp
OworICB2YXIgc3RhdHVzID0gcmVzdWx0cy5wYXNzZWQoKSA/ICdwYXNzZWQnIDogJ2ZhaWxlZCc7
CisgIGlmIChyZXN1bHRzLnRvdGFsQ291bnQgPT09IDApIHsgLy8gdG9kbzogY2hhbmdlIHRoaXMg
dG8gY2hlY2sgcmVzdWx0cy5za2lwcGVkCisgICAgc3RhdHVzID0gJ3NraXBwZWQnOworICB9Cisg
IHRoaXMuc3VpdGVEaXZzW3N1aXRlLmlkXS5jbGFzc05hbWUgKz0gIiAiICsgc3RhdHVzOworfTsK
KworamFzbWluZS5Ucml2aWFsUmVwb3J0ZXIucHJvdG90eXBlLnJlcG9ydFNwZWNTdGFydGluZyA9
IGZ1bmN0aW9uKHNwZWMpIHsKKyAgaWYgKHRoaXMubG9nUnVubmluZ1NwZWNzKSB7CisgICAgdGhp
cy5sb2coJz4+IEphc21pbmUgUnVubmluZyAnICsgc3BlYy5zdWl0ZS5kZXNjcmlwdGlvbiArICcg
JyArIHNwZWMuZGVzY3JpcHRpb24gKyAnLi4uJyk7CisgIH0KK307CisKK2phc21pbmUuVHJpdmlh
bFJlcG9ydGVyLnByb3RvdHlwZS5yZXBvcnRTcGVjUmVzdWx0cyA9IGZ1bmN0aW9uKHNwZWMpIHsK
KyAgdmFyIHJlc3VsdHMgPSBzcGVjLnJlc3VsdHMoKTsKKyAgdmFyIHN0YXR1cyA9IHJlc3VsdHMu
cGFzc2VkKCkgPyAncGFzc2VkJyA6ICdmYWlsZWQnOworICBpZiAocmVzdWx0cy5za2lwcGVkKSB7
CisgICAgc3RhdHVzID0gJ3NraXBwZWQnOworICB9CisgIHZhciBzcGVjRGl2ID0gdGhpcy5jcmVh
dGVEb20oJ2RpdicsIHsgY2xhc3NOYW1lOiAnc3BlYyAnICArIHN0YXR1cyB9LAorICAgICAgdGhp
cy5jcmVhdGVEb20oJ2EnLCB7IGNsYXNzTmFtZTogJ3J1bl9zcGVjJywgaHJlZjogJz9zcGVjPScg
KyBlbmNvZGVVUklDb21wb25lbnQoc3BlYy5nZXRGdWxsTmFtZSgpKSB9LCAicnVuIiksCisgICAg
ICB0aGlzLmNyZWF0ZURvbSgnYScsIHsKKyAgICAgICAgY2xhc3NOYW1lOiAnZGVzY3JpcHRpb24n
LAorICAgICAgICBocmVmOiAnP3NwZWM9JyArIGVuY29kZVVSSUNvbXBvbmVudChzcGVjLmdldEZ1
bGxOYW1lKCkpLAorICAgICAgICB0aXRsZTogc3BlYy5nZXRGdWxsTmFtZSgpCisgICAgICB9LCBz
cGVjLmRlc2NyaXB0aW9uKSk7CisKKworICB2YXIgcmVzdWx0SXRlbXMgPSByZXN1bHRzLmdldEl0
ZW1zKCk7CisgIHZhciBtZXNzYWdlc0RpdiA9IHRoaXMuY3JlYXRlRG9tKCdkaXYnLCB7IGNsYXNz
TmFtZTogJ21lc3NhZ2VzJyB9KTsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRJdGVtcy5s
ZW5ndGg7IGkrKykgeworICAgIHZhciByZXN1bHQgPSByZXN1bHRJdGVtc1tpXTsKKworICAgIGlm
IChyZXN1bHQudHlwZSA9PSAnbG9nJykgeworICAgICAgbWVzc2FnZXNEaXYuYXBwZW5kQ2hpbGQo
dGhpcy5jcmVhdGVEb20oJ2RpdicsIHtjbGFzc05hbWU6ICdyZXN1bHRNZXNzYWdlIGxvZyd9LCBy
ZXN1bHQudG9TdHJpbmcoKSkpOworICAgIH0gZWxzZSBpZiAocmVzdWx0LnR5cGUgPT0gJ2V4cGVj
dCcgJiYgcmVzdWx0LnBhc3NlZCAmJiAhcmVzdWx0LnBhc3NlZCgpKSB7CisgICAgICBtZXNzYWdl
c0Rpdi5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZURvbSgnZGl2Jywge2NsYXNzTmFtZTogJ3Jlc3Vs
dE1lc3NhZ2UgZmFpbCd9LCByZXN1bHQubWVzc2FnZSkpOworCisgICAgICBpZiAocmVzdWx0LnRy
YWNlLnN0YWNrKSB7CisgICAgICAgIG1lc3NhZ2VzRGl2LmFwcGVuZENoaWxkKHRoaXMuY3JlYXRl
RG9tKCdkaXYnLCB7Y2xhc3NOYW1lOiAnc3RhY2tUcmFjZSd9LCByZXN1bHQudHJhY2Uuc3RhY2sp
KTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBpZiAobWVzc2FnZXNEaXYuY2hpbGROb2Rlcy5s
ZW5ndGggPiAwKSB7CisgICAgc3BlY0Rpdi5hcHBlbmRDaGlsZChtZXNzYWdlc0Rpdik7CisgIH0K
KworICB0aGlzLnN1aXRlRGl2c1tzcGVjLnN1aXRlLmlkXS5hcHBlbmRDaGlsZChzcGVjRGl2KTsK
K307CisKK2phc21pbmUuVHJpdmlhbFJlcG9ydGVyLnByb3RvdHlwZS5sb2cgPSBmdW5jdGlvbigp
IHsKKyAgdmFyIGNvbnNvbGUgPSBqYXNtaW5lLmdldEdsb2JhbCgpLmNvbnNvbGU7CisgIGlmIChj
b25zb2xlICYmIGNvbnNvbGUubG9nKSB7CisgICAgaWYgKGNvbnNvbGUubG9nLmFwcGx5KSB7Cisg
ICAgICBjb25zb2xlLmxvZy5hcHBseShjb25zb2xlLCBhcmd1bWVudHMpOworICAgIH0gZWxzZSB7
CisgICAgICBjb25zb2xlLmxvZyhhcmd1bWVudHMpOyAvLyBpZSBmaXg6IGNvbnNvbGUubG9nLmFw
cGx5IGRvZXNuJ3QgZXhpc3Qgb24gaWUKKyAgICB9CisgIH0KK307CisKK2phc21pbmUuVHJpdmlh
bFJlcG9ydGVyLnByb3RvdHlwZS5nZXRMb2NhdGlvbiA9IGZ1bmN0aW9uKCkgeworICByZXR1cm4g
dGhpcy5kb2N1bWVudC5sb2NhdGlvbjsKK307CisKK2phc21pbmUuVHJpdmlhbFJlcG9ydGVyLnBy
b3RvdHlwZS5zcGVjRmlsdGVyID0gZnVuY3Rpb24oc3BlYykgeworICB2YXIgcGFyYW1NYXAgPSB7
fTsKKyAgdmFyIHBhcmFtcyA9IHRoaXMuZ2V0TG9jYXRpb24oKS5zZWFyY2guc3Vic3RyaW5nKDEp
LnNwbGl0KCcmJyk7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7
CisgICAgdmFyIHAgPSBwYXJhbXNbaV0uc3BsaXQoJz0nKTsKKyAgICBwYXJhbU1hcFtkZWNvZGVV
UklDb21wb25lbnQocFswXSldID0gZGVjb2RlVVJJQ29tcG9uZW50KHBbMV0pOworICB9CisKKyAg
aWYgKCFwYXJhbU1hcC5zcGVjKSB7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKyAgcmV0dXJuIHNw
ZWMuZ2V0RnVsbE5hbWUoKS5pbmRleE9mKHBhcmFtTWFwLnNwZWMpID09PSAwOworfTsKZGlmZiAt
LWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2Vz
L2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vdGVzdHMvbGliL2phc21p
bmUuY3NzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJj
ZXMvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS90ZXN0cy9saWIvamFz
bWluZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNjU4M2ZlN2M2NmQ0MzlkMTQwYTM3ZmNlYTI3NDE3Yjk1N2Uw
OWQ1YwotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRv
bWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNo
aW0vdGVzdHMvbGliL2phc21pbmUuY3NzCkBAIC0wLDAgKzEsMTY2IEBACitib2R5IHsKKyAgZm9u
dC1mYW1pbHk6ICJIZWx2ZXRpY2EgTmV1ZSBMaWdodCIsICJMdWNpZGEgR3JhbmRlIiwgIkNhbGli
cmkiLCAiQXJpYWwiLCBzYW5zLXNlcmlmOworfQorCisKKy5qYXNtaW5lX3JlcG9ydGVyIGE6dmlz
aXRlZCwgLmphc21pbmVfcmVwb3J0ZXIgYSB7CisgIGNvbG9yOiAjMzAzOyAKK30KKworLmphc21p
bmVfcmVwb3J0ZXIgYTpob3ZlciwgLmphc21pbmVfcmVwb3J0ZXIgYTphY3RpdmUgeworICBjb2xv
cjogYmx1ZTsgCit9CisKKy5ydW5fc3BlYyB7CisgIGZsb2F0OnJpZ2h0OworICBwYWRkaW5nLXJp
Z2h0OiA1cHg7CisgIGZvbnQtc2l6ZTogLjhlbTsKKyAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwor
fQorCisuamFzbWluZV9yZXBvcnRlciB7CisgIG1hcmdpbjogMCA1cHg7Cit9CisKKy5iYW5uZXIg
eworICBjb2xvcjogIzMwMzsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZlZjsKKyAgcGFkZGluZzog
NXB4OworfQorCisubG9nbyB7CisgIGZsb2F0OiBsZWZ0OworICBmb250LXNpemU6IDEuMWVtOwor
ICBwYWRkaW5nLWxlZnQ6IDVweDsKK30KKworLmxvZ28gLnZlcnNpb24geworICBmb250LXNpemU6
IC42ZW07CisgIHBhZGRpbmctbGVmdDogMWVtOworfQorCisucnVubmVyLnJ1bm5pbmcgeworICBi
YWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3c7Cit9CisKKworLm9wdGlvbnMgeworICB0ZXh0LWFsaWdu
OiByaWdodDsKKyAgZm9udC1zaXplOiAuOGVtOworfQorCisKKworCisuc3VpdGUgeworICBib3Jk
ZXI6IDFweCBvdXRzZXQgZ3JheTsKKyAgbWFyZ2luOiA1cHggMDsKKyAgcGFkZGluZy1sZWZ0OiAx
ZW07Cit9CisKKy5zdWl0ZSAuc3VpdGUgeworICBtYXJnaW46IDVweDsgCit9CisKKy5zdWl0ZS5w
YXNzZWQgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGZkOworfQorCisuc3VpdGUuZmFpbGVkIHsK
KyAgYmFja2dyb3VuZC1jb2xvcjogI2ZkZDsKK30KKworLnNwZWMgeworICBtYXJnaW46IDVweDsK
KyAgcGFkZGluZy1sZWZ0OiAxZW07CisgIGNsZWFyOiBib3RoOworfQorCisuc3BlYy5mYWlsZWQs
IC5zcGVjLnBhc3NlZCwgLnNwZWMuc2tpcHBlZCB7CisgIHBhZGRpbmctYm90dG9tOiA1cHg7Cisg
IGJvcmRlcjogMXB4IHNvbGlkIGdyYXk7Cit9CisKKy5zcGVjLmZhaWxlZCB7CisgIGJhY2tncm91
bmQtY29sb3I6ICNmYmI7CisgIGJvcmRlci1jb2xvcjogcmVkOworfQorCisuc3BlYy5wYXNzZWQg
eworICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmZiOworICBib3JkZXItY29sb3I6IGdyZWVuOworfQor
Cisuc3BlYy5za2lwcGVkIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2JiYjsKK30KKworLm1lc3Nh
Z2VzIHsKKyAgYm9yZGVyLWxlZnQ6IDFweCBkYXNoZWQgZ3JheTsKKyAgcGFkZGluZy1sZWZ0OiAx
ZW07CisgIHBhZGRpbmctcmlnaHQ6IDFlbTsKK30KKworLnBhc3NlZCB7CisgIGJhY2tncm91bmQt
Y29sb3I6ICNjZmM7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKKy5mYWlsZWQgeworICBiYWNrZ3Jv
dW5kLWNvbG9yOiAjZmJiOworfQorCisuc2tpcHBlZCB7CisgIGNvbG9yOiAjNzc3OworICBiYWNr
Z3JvdW5kLWNvbG9yOiAjZWVlOworICBkaXNwbGF5OiBub25lOworfQorCisKKy8qLnJlc3VsdE1l
c3NhZ2UgeyovCisgIC8qd2hpdGUtc3BhY2U6IHByZTsqLworLyp9Ki8KKworLnJlc3VsdE1lc3Nh
Z2Ugc3Bhbi5yZXN1bHQgeworICBkaXNwbGF5OiBibG9jazsKKyAgbGluZS1oZWlnaHQ6IDJlbTsK
KyAgY29sb3I6IGJsYWNrOworfQorCisucmVzdWx0TWVzc2FnZSAubWlzbWF0Y2ggeworICBjb2xv
cjogYmxhY2s7Cit9CisKKy5zdGFja1RyYWNlIHsKKyAgd2hpdGUtc3BhY2U6IHByZTsKKyAgZm9u
dC1zaXplOiAuOGVtOworICBtYXJnaW4tbGVmdDogMTBweDsKKyAgbWF4LWhlaWdodDogNWVtOwor
ICBvdmVyZmxvdzogYXV0bzsKKyAgYm9yZGVyOiAxcHggaW5zZXQgcmVkOworICBwYWRkaW5nOiAx
ZW07CisgIGJhY2tncm91bmQ6ICNlZWY7Cit9CisKKy5maW5pc2hlZC1hdCB7CisgIHBhZGRpbmct
bGVmdDogMWVtOworICBmb250LXNpemU6IC42ZW07Cit9CisKKy5zaG93LXBhc3NlZCAucGFzc2Vk
LAorLnNob3ctc2tpcHBlZCAuc2tpcHBlZCB7CisgIGRpc3BsYXk6IGJsb2NrOworfQorCisKKyNq
YXNtaW5lX2NvbnRlbnQgeworICBwb3NpdGlvbjpmaXhlZDsKKyAgcmlnaHQ6IDEwMCU7Cit9CisK
Ky5ydW5uZXIgeworICBib3JkZXI6IDFweCBzb2xpZCBncmF5OworICBkaXNwbGF5OiBibG9jazsK
KyAgbWFyZ2luOiA1cHggMDsKKyAgcGFkZGluZzogMnB4IDAgMnB4IDEwcHg7Cit9CmRpZmYgLS1n
aXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9m
bGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL3Rlc3RzL2xpYi9qYXNtaW5l
LmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMv
ZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS90ZXN0cy9saWIvamFzbWlu
ZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi43MGQ3ZDI1ZTE4ZDM1ZDliYzBiN2Q4Mzg3NzUwMDEzMGU3NjViMTdk
Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRl
cjIuMS9yZXNvdXJjZXMvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS90
ZXN0cy9saWIvamFzbWluZS5qcwpAQCAtMCwwICsxLDI0NzcgQEAKK3ZhciBpc0NvbW1vbkpTID0g
dHlwZW9mIHdpbmRvdyA9PSAidW5kZWZpbmVkIjsKKworLyoqCisgKiBUb3AgbGV2ZWwgbmFtZXNw
YWNlIGZvciBKYXNtaW5lLCBhIGxpZ2h0d2VpZ2h0IEphdmFTY3JpcHQgQkREL3NwZWMvdGVzdGlu
ZyBmcmFtZXdvcmsuCisgKgorICogQG5hbWVzcGFjZQorICovCit2YXIgamFzbWluZSA9IHt9Owor
aWYgKGlzQ29tbW9uSlMpIGV4cG9ydHMuamFzbWluZSA9IGphc21pbmU7CisvKioKKyAqIEBwcml2
YXRlCisgKi8KK2phc21pbmUudW5pbXBsZW1lbnRlZE1ldGhvZF8gPSBmdW5jdGlvbigpIHsKKyAg
dGhyb3cgbmV3IEVycm9yKCJ1bmltcGxlbWVudGVkIG1ldGhvZCIpOworfTsKKworLyoqCisgKiBV
c2UgPGNvZGU+amFzbWluZS51bmRlZmluZWQ8L2NvZGU+IGluc3RlYWQgb2YgPGNvZGU+dW5kZWZp
bmVkPC9jb2RlPiwgc2luY2UgPGNvZGU+dW5kZWZpbmVkPC9jb2RlPiBpcyBqdXN0CisgKiBhIHBs
YWluIG9sZCB2YXJpYWJsZSBhbmQgbWF5IGJlIHJlZGVmaW5lZCBieSBzb21lYm9keSBlbHNlLgor
ICoKKyAqIEBwcml2YXRlCisgKi8KK2phc21pbmUudW5kZWZpbmVkID0gamFzbWluZS5fX191bmRl
ZmluZWRfX187CisKKy8qKgorICogU2hvdyBkaWFnbm9zdGljIG1lc3NhZ2VzIGluIHRoZSBjb25z
b2xlIGlmIHNldCB0byB0cnVlCisgKgorICovCitqYXNtaW5lLlZFUkJPU0UgPSBmYWxzZTsKKwor
LyoqCisgKiBEZWZhdWx0IGludGVydmFsIGluIG1pbGxpc2Vjb25kcyBmb3IgZXZlbnQgbG9vcCB5
aWVsZHMgKGUuZy4gdG8gYWxsb3cgbmV0d29yayBhY3Rpdml0eSBvciB0byByZWZyZXNoIHRoZSBz
Y3JlZW4gd2l0aCB0aGUgSFRNTC1iYXNlZCBydW5uZXIpLiBTbWFsbCB2YWx1ZXMgaGVyZSBtYXkg
cmVzdWx0IGluIHNsb3cgdGVzdCBydW5uaW5nLiBaZXJvIG1lYW5zIG5vIHVwZGF0ZXMgdW50aWwg
YWxsIHRlc3RzIGhhdmUgY29tcGxldGVkLgorICoKKyAqLworamFzbWluZS5ERUZBVUxUX1VQREFU
RV9JTlRFUlZBTCA9IDI1MDsKKworLyoqCisgKiBEZWZhdWx0IHRpbWVvdXQgaW50ZXJ2YWwgaW4g
bWlsbGlzZWNvbmRzIGZvciB3YWl0c0ZvcigpIGJsb2Nrcy4KKyAqLworamFzbWluZS5ERUZBVUxU
X1RJTUVPVVRfSU5URVJWQUwgPSA1MDAwOworCitqYXNtaW5lLmdldEdsb2JhbCA9IGZ1bmN0aW9u
KCkgeworICBmdW5jdGlvbiBnZXRHbG9iYWwoKSB7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKwor
ICByZXR1cm4gZ2V0R2xvYmFsKCk7Cit9OworCisvKioKKyAqIEFsbG93cyBmb3IgYm91bmQgZnVu
Y3Rpb25zIHRvIGJlIGNvbXBhcmVkLiAgSW50ZXJuYWwgdXNlIG9ubHkuCisgKgorICogQGlnbm9y
ZQorICogQHByaXZhdGUKKyAqIEBwYXJhbSBiYXNlIHtPYmplY3R9IGJvdW5kICd0aGlzJyBmb3Ig
dGhlIGZ1bmN0aW9uCisgKiBAcGFyYW0gbmFtZSB7RnVuY3Rpb259IGZ1bmN0aW9uIHRvIGZpbmQK
KyAqLworamFzbWluZS5iaW5kT3JpZ2luYWxfID0gZnVuY3Rpb24oYmFzZSwgbmFtZSkgeworICB2
YXIgb3JpZ2luYWwgPSBiYXNlW25hbWVdOworICBpZiAob3JpZ2luYWwuYXBwbHkpIHsKKyAgICBy
ZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkoYmFzZSwgYXJn
dW1lbnRzKTsKKyAgICB9OworICB9IGVsc2UgeworICAgIC8vIElFIHN1cHBvcnQKKyAgICByZXR1
cm4gamFzbWluZS5nZXRHbG9iYWwoKVtuYW1lXTsKKyAgfQorfTsKKworamFzbWluZS5zZXRUaW1l
b3V0ID0gamFzbWluZS5iaW5kT3JpZ2luYWxfKGphc21pbmUuZ2V0R2xvYmFsKCksICdzZXRUaW1l
b3V0Jyk7CitqYXNtaW5lLmNsZWFyVGltZW91dCA9IGphc21pbmUuYmluZE9yaWdpbmFsXyhqYXNt
aW5lLmdldEdsb2JhbCgpLCAnY2xlYXJUaW1lb3V0Jyk7CitqYXNtaW5lLnNldEludGVydmFsID0g
amFzbWluZS5iaW5kT3JpZ2luYWxfKGphc21pbmUuZ2V0R2xvYmFsKCksICdzZXRJbnRlcnZhbCcp
OworamFzbWluZS5jbGVhckludGVydmFsID0gamFzbWluZS5iaW5kT3JpZ2luYWxfKGphc21pbmUu
Z2V0R2xvYmFsKCksICdjbGVhckludGVydmFsJyk7CisKK2phc21pbmUuTWVzc2FnZVJlc3VsdCA9
IGZ1bmN0aW9uKHZhbHVlcykgeworICB0aGlzLnR5cGUgPSAnbG9nJzsKKyAgdGhpcy52YWx1ZXMg
PSB2YWx1ZXM7CisgIHRoaXMudHJhY2UgPSBuZXcgRXJyb3IoKTsgLy8gdG9kbzogdGVzdCBiZXR0
ZXIKK307CisKK2phc21pbmUuTWVzc2FnZVJlc3VsdC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5j
dGlvbigpIHsKKyAgdmFyIHRleHQgPSAiIjsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnZh
bHVlcy5sZW5ndGg7IGkrKykgeworICAgIGlmIChpID4gMCkgdGV4dCArPSAiICI7CisgICAgaWYg
KGphc21pbmUuaXNTdHJpbmdfKHRoaXMudmFsdWVzW2ldKSkgeworICAgICAgdGV4dCArPSB0aGlz
LnZhbHVlc1tpXTsKKyAgICB9IGVsc2UgeworICAgICAgdGV4dCArPSBqYXNtaW5lLnBwKHRoaXMu
dmFsdWVzW2ldKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHRleHQ7Cit9OworCitqYXNtaW5lLkV4
cGVjdGF0aW9uUmVzdWx0ID0gZnVuY3Rpb24ocGFyYW1zKSB7CisgIHRoaXMudHlwZSA9ICdleHBl
Y3QnOworICB0aGlzLm1hdGNoZXJOYW1lID0gcGFyYW1zLm1hdGNoZXJOYW1lOworICB0aGlzLnBh
c3NlZF8gPSBwYXJhbXMucGFzc2VkOworICB0aGlzLmV4cGVjdGVkID0gcGFyYW1zLmV4cGVjdGVk
OworICB0aGlzLmFjdHVhbCA9IHBhcmFtcy5hY3R1YWw7CisgIHRoaXMubWVzc2FnZSA9IHRoaXMu
cGFzc2VkXyA/ICdQYXNzZWQuJyA6IHBhcmFtcy5tZXNzYWdlOworCisgIHZhciB0cmFjZSA9IChw
YXJhbXMudHJhY2UgfHwgbmV3IEVycm9yKHRoaXMubWVzc2FnZSkpOworICB0aGlzLnRyYWNlID0g
dGhpcy5wYXNzZWRfID8gJycgOiB0cmFjZTsKK307CisKK2phc21pbmUuRXhwZWN0YXRpb25SZXN1
bHQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgeworICByZXR1cm4gdGhpcy5tZXNz
YWdlOworfTsKKworamFzbWluZS5FeHBlY3RhdGlvblJlc3VsdC5wcm90b3R5cGUucGFzc2VkID0g
ZnVuY3Rpb24gKCkgeworICByZXR1cm4gdGhpcy5wYXNzZWRfOworfTsKKworLyoqCisgKiBHZXR0
ZXIgZm9yIHRoZSBKYXNtaW5lIGVudmlyb25tZW50LiBFbnN1cmVzIG9uZSBnZXRzIGNyZWF0ZWQK
KyAqLworamFzbWluZS5nZXRFbnYgPSBmdW5jdGlvbigpIHsKKyAgdmFyIGVudiA9IGphc21pbmUu
Y3VycmVudEVudl8gPSBqYXNtaW5lLmN1cnJlbnRFbnZfIHx8IG5ldyBqYXNtaW5lLkVudigpOwor
ICByZXR1cm4gZW52OworfTsKKworLyoqCisgKiBAaWdub3JlCisgKiBAcHJpdmF0ZQorICogQHBh
cmFtIHZhbHVlCisgKiBAcmV0dXJucyB7Qm9vbGVhbn0KKyAqLworamFzbWluZS5pc0FycmF5XyA9
IGZ1bmN0aW9uKHZhbHVlKSB7CisgIHJldHVybiBqYXNtaW5lLmlzQV8oIkFycmF5IiwgdmFsdWUp
OworfTsKKworLyoqCisgKiBAaWdub3JlCisgKiBAcHJpdmF0ZQorICogQHBhcmFtIHZhbHVlCisg
KiBAcmV0dXJucyB7Qm9vbGVhbn0KKyAqLworamFzbWluZS5pc1N0cmluZ18gPSBmdW5jdGlvbih2
YWx1ZSkgeworICByZXR1cm4gamFzbWluZS5pc0FfKCJTdHJpbmciLCB2YWx1ZSk7Cit9OworCisv
KioKKyAqIEBpZ25vcmUKKyAqIEBwcml2YXRlCisgKiBAcGFyYW0gdmFsdWUKKyAqIEByZXR1cm5z
IHtCb29sZWFufQorICovCitqYXNtaW5lLmlzTnVtYmVyXyA9IGZ1bmN0aW9uKHZhbHVlKSB7Cisg
IHJldHVybiBqYXNtaW5lLmlzQV8oIk51bWJlciIsIHZhbHVlKTsKK307CisKKy8qKgorICogQGln
bm9yZQorICogQHByaXZhdGUKKyAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlTmFtZQorICogQHBhcmFt
IHZhbHVlCisgKiBAcmV0dXJucyB7Qm9vbGVhbn0KKyAqLworamFzbWluZS5pc0FfID0gZnVuY3Rp
b24odHlwZU5hbWUsIHZhbHVlKSB7CisgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5n
LmFwcGx5KHZhbHVlKSA9PT0gJ1tvYmplY3QgJyArIHR5cGVOYW1lICsgJ10nOworfTsKKworLyoq
CisgKiBQcmV0dHkgcHJpbnRlciBmb3IgZXhwZWNhdGlvbnMuICBUYWtlcyBhbnkgb2JqZWN0IGFu
ZCB0dXJucyBpdCBpbnRvIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nLgorICoKKyAqIEBwYXJhbSB2
YWx1ZSB7T2JqZWN0fSBhbiBvYmplY3QgdG8gYmUgb3V0cHV0dGVkCisgKiBAcmV0dXJucyB7U3Ry
aW5nfQorICovCitqYXNtaW5lLnBwID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgdmFyIHN0cmluZ1By
ZXR0eVByaW50ZXIgPSBuZXcgamFzbWluZS5TdHJpbmdQcmV0dHlQcmludGVyKCk7CisgIHN0cmlu
Z1ByZXR0eVByaW50ZXIuZm9ybWF0KHZhbHVlKTsKKyAgcmV0dXJuIHN0cmluZ1ByZXR0eVByaW50
ZXIuc3RyaW5nOworfTsKKworLyoqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIG9iamVjdCBpcyBh
IERPTSBOb2RlLgorICoKKyAqIEBwYXJhbSB7T2JqZWN0fSBvYmogb2JqZWN0IHRvIGNoZWNrCisg
KiBAcmV0dXJucyB7Qm9vbGVhbn0KKyAqLworamFzbWluZS5pc0RvbU5vZGUgPSBmdW5jdGlvbihv
YmopIHsKKyAgcmV0dXJuIG9iai5ub2RlVHlwZSA+IDA7Cit9OworCisvKioKKyAqIFJldHVybnMg
YSBtYXRjaGFibGUgJ2dlbmVyaWMnIG9iamVjdCBvZiB0aGUgY2xhc3MgdHlwZS4gIEZvciB1c2Ug
aW4gZXhwZWNhdGlvbnMgb2YgdHlwZSB3aGVuIHZhbHVlcyBkb24ndCBtYXR0ZXIuCisgKgorICog
QGV4YW1wbGUKKyAqIC8vIGRvbid0IGNhcmUgYWJvdXQgd2hpY2ggZnVuY3Rpb24gaXMgcGFzc2Vk
IGluLCBhcyBsb25nIGFzIGl0J3MgYSBmdW5jdGlvbgorICogZXhwZWN0KG15U3B5KS50b0hhdmVC
ZWVuQ2FsbGVkV2l0aChqYXNtaW5lLmFueShGdW5jdGlvbikpOworICoKKyAqIEBwYXJhbSB7Q2xh
c3N9IGNsYXp6CisgKiBAcmV0dXJucyBtYXRjaGFibGUgb2JqZWN0IG9mIHRoZSB0eXBlIGNsYXp6
CisgKi8KK2phc21pbmUuYW55ID0gZnVuY3Rpb24oY2xhenopIHsKKyAgcmV0dXJuIG5ldyBqYXNt
aW5lLk1hdGNoZXJzLkFueShjbGF6eik7Cit9OworCisvKioKKyAqIEphc21pbmUgU3BpZXMgYXJl
IHRlc3QgZG91YmxlcyB0aGF0IGNhbiBhY3QgYXMgc3R1YnMsIHNwaWVzLCBmYWtlcyBvciB3aGVu
IHVzZWQgaW4gYW4gZXhwZWNhdGlvbiwgbW9ja3MuCisgKgorICogU3BpZXMgc2hvdWxkIGJlIGNy
ZWF0ZWQgaW4gdGVzdCBzZXR1cCwgYmVmb3JlIGV4cGVjdGF0aW9ucy4gIFRoZXkgY2FuIHRoZW4g
YmUgY2hlY2tlZCwgdXNpbmcgdGhlIHN0YW5kYXJkIEphc21pbmUKKyAqIGV4cGVjdGF0aW9uIHN5
bnRheC4gU3BpZXMgY2FuIGJlIGNoZWNrZWQgaWYgdGhleSB3ZXJlIGNhbGxlZCBvciBub3QgYW5k
IHdoYXQgdGhlIGNhbGxpbmcgcGFyYW1zIHdlcmUuCisgKgorICogQSBTcHkgaGFzIHRoZSBmb2xs
b3dpbmcgZmllbGRzOiB3YXNDYWxsZWQsIGNhbGxDb3VudCwgbW9zdFJlY2VudENhbGwsIGFuZCBh
cmdzRm9yQ2FsbCAoc2VlIGRvY3MpLgorICoKKyAqIFNwaWVzIGFyZSB0b3JuIGRvd24gYXQgdGhl
IGVuZCBvZiBldmVyeSBzcGVjLgorICoKKyAqIE5vdGU6IERvIDxiPm5vdDwvYj4gY2FsbCBuZXcg
amFzbWluZS5TcHkoKSBkaXJlY3RseSAtIGEgc3B5IG11c3QgYmUgY3JlYXRlZCB1c2luZyBzcHlP
biwgamFzbWluZS5jcmVhdGVTcHkgb3IgamFzbWluZS5jcmVhdGVTcHlPYmouCisgKgorICogQGV4
YW1wbGUKKyAqIC8vIGEgc3R1YgorICogdmFyIG15U3R1YiA9IGphc21pbmUuY3JlYXRlU3B5KCdt
eVN0dWInKTsgIC8vIGNhbiBiZSB1c2VkIGFueXdoZXJlCisgKgorICogLy8gc3B5IGV4YW1wbGUK
KyAqIHZhciBmb28gPSB7CisgKiAgIG5vdDogZnVuY3Rpb24oYm9vbCkgeyByZXR1cm4gIWJvb2w7
IH0KKyAqIH0KKyAqCisgKiAvLyBhY3R1YWwgZm9vLm5vdCB3aWxsIG5vdCBiZSBjYWxsZWQsIGV4
ZWN1dGlvbiBzdG9wcworICogc3B5T24oZm9vLCAnbm90Jyk7CisKKyAvLyBmb28ubm90IHNwaWVk
IHVwb24sIGV4ZWN1dGlvbiB3aWxsIGNvbnRpbnVlIHRvIGltcGxlbWVudGF0aW9uCisgKiBzcHlP
bihmb28sICdub3QnKS5hbmRDYWxsVGhyb3VnaCgpOworICoKKyAqIC8vIGZha2UgZXhhbXBsZQor
ICogdmFyIGZvbyA9IHsKKyAqICAgbm90OiBmdW5jdGlvbihib29sKSB7IHJldHVybiAhYm9vbDsg
fQorICogfQorICoKKyAqIC8vIGZvby5ub3QodmFsKSB3aWxsIHJldHVybiB2YWwKKyAqIHNweU9u
KGZvbywgJ25vdCcpLmFuZENhbGxGYWtlKGZ1bmN0aW9uKHZhbHVlKSB7cmV0dXJuIHZhbHVlO30p
OworICoKKyAqIC8vIG1vY2sgZXhhbXBsZQorICogZm9vLm5vdCg3ID09IDcpOworICogZXhwZWN0
KGZvby5ub3QpLnRvSGF2ZUJlZW5DYWxsZWQoKTsKKyAqIGV4cGVjdChmb28ubm90KS50b0hhdmVC
ZWVuQ2FsbGVkV2l0aCh0cnVlKTsKKyAqCisgKiBAY29uc3RydWN0b3IKKyAqIEBzZWUgc3B5T24s
IGphc21pbmUuY3JlYXRlU3B5LCBqYXNtaW5lLmNyZWF0ZVNweU9iagorICogQHBhcmFtIHtTdHJp
bmd9IG5hbWUKKyAqLworamFzbWluZS5TcHkgPSBmdW5jdGlvbihuYW1lKSB7CisgIC8qKgorICAg
KiBUaGUgbmFtZSBvZiB0aGUgc3B5LCBpZiBwcm92aWRlZC4KKyAgICovCisgIHRoaXMuaWRlbnRp
dHkgPSBuYW1lIHx8ICd1bmtub3duJzsKKyAgLyoqCisgICAqICBJcyB0aGlzIE9iamVjdCBhIHNw
eT8KKyAgICovCisgIHRoaXMuaXNTcHkgPSB0cnVlOworICAvKioKKyAgICogVGhlIGFjdHVhbCBm
dW5jdGlvbiB0aGlzIHNweSBzdHVicy4KKyAgICovCisgIHRoaXMucGxhbiA9IGZ1bmN0aW9uKCkg
eworICB9OworICAvKioKKyAgICogVHJhY2tpbmcgb2YgdGhlIG1vc3QgcmVjZW50IGNhbGwgdG8g
dGhlIHNweS4KKyAgICogQGV4YW1wbGUKKyAgICogdmFyIG15U3B5ID0gamFzbWluZS5jcmVhdGVT
cHkoJ2ZvbycpOworICAgKiBteVNweSgxLCAyKTsKKyAgICogbXlTcHkubW9zdFJlY2VudENhbGwu
YXJncyA9IFsxLCAyXTsKKyAgICovCisgIHRoaXMubW9zdFJlY2VudENhbGwgPSB7fTsKKworICAv
KioKKyAgICogSG9sZHMgYXJndW1lbnRzIGZvciBlYWNoIGNhbGwgdG8gdGhlIHNweSwgaW5kZXhl
ZCBieSBjYWxsIGNvdW50CisgICAqIEBleGFtcGxlCisgICAqIHZhciBteVNweSA9IGphc21pbmUu
Y3JlYXRlU3B5KCdmb28nKTsKKyAgICogbXlTcHkoMSwgMik7CisgICAqIG15U3B5KDcsIDgpOwor
ICAgKiBteVNweS5tb3N0UmVjZW50Q2FsbC5hcmdzID0gWzcsIDhdOworICAgKiBteVNweS5hcmdz
Rm9yQ2FsbFswXSA9IFsxLCAyXTsKKyAgICogbXlTcHkuYXJnc0ZvckNhbGxbMV0gPSBbNywgOF07
CisgICAqLworICB0aGlzLmFyZ3NGb3JDYWxsID0gW107CisgIHRoaXMuY2FsbHMgPSBbXTsKK307
CisKKy8qKgorICogVGVsbHMgYSBzcHkgdG8gY2FsbCB0aHJvdWdoIHRvIHRoZSBhY3R1YWwgaW1w
bGVtZW5hdGF0aW9uLgorICoKKyAqIEBleGFtcGxlCisgKiB2YXIgZm9vID0geworICogICBiYXI6
IGZ1bmN0aW9uKCkgeyAvLyBkbyBzb21lIHN0dWZmIH0KKyAqIH0KKyAqCisgKiAvLyBkZWZpbmlu
ZyBhIHNweSBvbiBhbiBleGlzdGluZyBwcm9wZXJ0eTogZm9vLmJhcgorICogc3B5T24oZm9vLCAn
YmFyJykuYW5kQ2FsbFRocm91Z2goKTsKKyAqLworamFzbWluZS5TcHkucHJvdG90eXBlLmFuZENh
bGxUaHJvdWdoID0gZnVuY3Rpb24oKSB7CisgIHRoaXMucGxhbiA9IHRoaXMub3JpZ2luYWxWYWx1
ZTsKKyAgcmV0dXJuIHRoaXM7Cit9OworCisvKioKKyAqIEZvciBzZXR0aW5nIHRoZSByZXR1cm4g
dmFsdWUgb2YgYSBzcHkuCisgKgorICogQGV4YW1wbGUKKyAqIC8vIGRlZmluaW5nIGEgc3B5IGZy
b20gc2NyYXRjaDogZm9vKCkgcmV0dXJucyAnYmF6JworICogdmFyIGZvbyA9IGphc21pbmUuY3Jl
YXRlU3B5KCdzcHkgb24gZm9vJykuYW5kUmV0dXJuKCdiYXonKTsKKyAqCisgKiAvLyBkZWZpbmlu
ZyBhIHNweSBvbiBhbiBleGlzdGluZyBwcm9wZXJ0eTogZm9vLmJhcigpIHJldHVybnMgJ2JheicK
KyAqIHNweU9uKGZvbywgJ2JhcicpLmFuZFJldHVybignYmF6Jyk7CisgKgorICogQHBhcmFtIHtP
YmplY3R9IHZhbHVlCisgKi8KK2phc21pbmUuU3B5LnByb3RvdHlwZS5hbmRSZXR1cm4gPSBmdW5j
dGlvbih2YWx1ZSkgeworICB0aGlzLnBsYW4gPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdmFs
dWU7CisgIH07CisgIHJldHVybiB0aGlzOworfTsKKworLyoqCisgKiBGb3IgdGhyb3dpbmcgYW4g
ZXhjZXB0aW9uIHdoZW4gYSBzcHkgaXMgY2FsbGVkLgorICoKKyAqIEBleGFtcGxlCisgKiAvLyBk
ZWZpbmluZyBhIHNweSBmcm9tIHNjcmF0Y2g6IGZvbygpIHRocm93cyBhbiBleGNlcHRpb24gdy8g
bWVzc2FnZSAnb3VjaCcKKyAqIHZhciBmb28gPSBqYXNtaW5lLmNyZWF0ZVNweSgnc3B5IG9uIGZv
bycpLmFuZFRocm93KCdiYXonKTsKKyAqCisgKiAvLyBkZWZpbmluZyBhIHNweSBvbiBhbiBleGlz
dGluZyBwcm9wZXJ0eTogZm9vLmJhcigpIHRocm93cyBhbiBleGNlcHRpb24gdy8gbWVzc2FnZSAn
b3VjaCcKKyAqIHNweU9uKGZvbywgJ2JhcicpLmFuZFRocm93KCdiYXonKTsKKyAqCisgKiBAcGFy
YW0ge1N0cmluZ30gZXhjZXB0aW9uTXNnCisgKi8KK2phc21pbmUuU3B5LnByb3RvdHlwZS5hbmRU
aHJvdyA9IGZ1bmN0aW9uKGV4Y2VwdGlvbk1zZykgeworICB0aGlzLnBsYW4gPSBmdW5jdGlvbigp
IHsKKyAgICB0aHJvdyBleGNlcHRpb25Nc2c7CisgIH07CisgIHJldHVybiB0aGlzOworfTsKKwor
LyoqCisgKiBDYWxscyBhbiBhbHRlcm5hdGUgaW1wbGVtZW50YXRpb24gd2hlbiBhIHNweSBpcyBj
YWxsZWQuCisgKgorICogQGV4YW1wbGUKKyAqIHZhciBiYXogPSBmdW5jdGlvbigpIHsKKyAqICAg
Ly8gZG8gc29tZSBzdHVmZiwgcmV0dXJuIHNvbWV0aGluZworICogfQorICogLy8gZGVmaW5pbmcg
YSBzcHkgZnJvbSBzY3JhdGNoOiBmb28oKSBjYWxscyB0aGUgZnVuY3Rpb24gYmF6CisgKiB2YXIg
Zm9vID0gamFzbWluZS5jcmVhdGVTcHkoJ3NweSBvbiBmb28nKS5hbmRDYWxsKGJheik7CisgKgor
ICogLy8gZGVmaW5pbmcgYSBzcHkgb24gYW4gZXhpc3RpbmcgcHJvcGVydHk6IGZvby5iYXIoKSBj
YWxscyBhbiBhbm9ueW1ub3VzIGZ1bmN0aW9uCisgKiBzcHlPbihmb28sICdiYXInKS5hbmRDYWxs
KGZ1bmN0aW9uKCkgeyByZXR1cm4gJ2Jheic7fSApOworICoKKyAqIEBwYXJhbSB7RnVuY3Rpb259
IGZha2VGdW5jCisgKi8KK2phc21pbmUuU3B5LnByb3RvdHlwZS5hbmRDYWxsRmFrZSA9IGZ1bmN0
aW9uKGZha2VGdW5jKSB7CisgIHRoaXMucGxhbiA9IGZha2VGdW5jOworICByZXR1cm4gdGhpczsK
K307CisKKy8qKgorICogUmVzZXRzIGFsbCBvZiBhIHNweSdzIHRoZSB0cmFja2luZyB2YXJpYWJs
ZXMgc28gdGhhdCBpdCBjYW4gYmUgdXNlZCBhZ2Fpbi4KKyAqCisgKiBAZXhhbXBsZQorICogc3B5
T24oZm9vLCAnYmFyJyk7CisgKgorICogZm9vLmJhcigpOworICoKKyAqIGV4cGVjdChmb28uYmFy
LmNhbGxDb3VudCkudG9FcXVhbCgxKTsKKyAqCisgKiBmb28uYmFyLnJlc2V0KCk7CisgKgorICog
ZXhwZWN0KGZvby5iYXIuY2FsbENvdW50KS50b0VxdWFsKDApOworICovCitqYXNtaW5lLlNweS5w
cm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHsKKyAgdGhpcy53YXNDYWxsZWQgPSBmYWxzZTsK
KyAgdGhpcy5jYWxsQ291bnQgPSAwOworICB0aGlzLmFyZ3NGb3JDYWxsID0gW107CisgIHRoaXMu
Y2FsbHMgPSBbXTsKKyAgdGhpcy5tb3N0UmVjZW50Q2FsbCA9IHt9OworfTsKKworamFzbWluZS5j
cmVhdGVTcHkgPSBmdW5jdGlvbihuYW1lKSB7CisKKyAgdmFyIHNweU9iaiA9IGZ1bmN0aW9uKCkg
eworICAgIHNweU9iai53YXNDYWxsZWQgPSB0cnVlOworICAgIHNweU9iai5jYWxsQ291bnQrKzsK
KyAgICB2YXIgYXJncyA9IGphc21pbmUudXRpbC5hcmdzVG9BcnJheShhcmd1bWVudHMpOworICAg
IHNweU9iai5tb3N0UmVjZW50Q2FsbC5vYmplY3QgPSB0aGlzOworICAgIHNweU9iai5tb3N0UmVj
ZW50Q2FsbC5hcmdzID0gYXJnczsKKyAgICBzcHlPYmouYXJnc0ZvckNhbGwucHVzaChhcmdzKTsK
KyAgICBzcHlPYmouY2FsbHMucHVzaCh7b2JqZWN0OiB0aGlzLCBhcmdzOiBhcmdzfSk7CisgICAg
cmV0dXJuIHNweU9iai5wbGFuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgIH07CisKKyAgdmFy
IHNweSA9IG5ldyBqYXNtaW5lLlNweShuYW1lKTsKKworICBmb3IgKHZhciBwcm9wIGluIHNweSkg
eworICAgIHNweU9ialtwcm9wXSA9IHNweVtwcm9wXTsKKyAgfQorCisgIHNweU9iai5yZXNldCgp
OworCisgIHJldHVybiBzcHlPYmo7Cit9OworCisvKioKKyAqIERldGVybWluZXMgd2hldGhlciBh
biBvYmplY3QgaXMgYSBzcHkuCisgKgorICogQHBhcmFtIHtqYXNtaW5lLlNweXxPYmplY3R9IHB1
dGF0aXZlU3B5CisgKiBAcmV0dXJucyB7Qm9vbGVhbn0KKyAqLworamFzbWluZS5pc1NweSA9IGZ1
bmN0aW9uKHB1dGF0aXZlU3B5KSB7CisgIHJldHVybiBwdXRhdGl2ZVNweSAmJiBwdXRhdGl2ZVNw
eS5pc1NweTsKK307CisKKy8qKgorICogQ3JlYXRlcyBhIG1vcmUgY29tcGxpY2F0ZWQgc3B5OiBh
biBPYmplY3QgdGhhdCBoYXMgZXZlcnkgcHJvcGVydHkgYSBmdW5jdGlvbiB0aGF0IGlzIGEgc3B5
LiAgVXNlZCBmb3Igc3R1YmJpbmcgc29tZXRoaW5nCisgKiBsYXJnZSBpbiBvbmUgY2FsbC4KKyAq
CisgKiBAcGFyYW0ge1N0cmluZ30gYmFzZU5hbWUgbmFtZSBvZiBzcHkgY2xhc3MKKyAqIEBwYXJh
bSB7QXJyYXl9IG1ldGhvZE5hbWVzIGFycmF5IG9mIG5hbWVzIG9mIG1ldGhvZHMgdG8gbWFrZSBz
cGllcworICovCitqYXNtaW5lLmNyZWF0ZVNweU9iaiA9IGZ1bmN0aW9uKGJhc2VOYW1lLCBtZXRo
b2ROYW1lcykgeworICBpZiAoIWphc21pbmUuaXNBcnJheV8obWV0aG9kTmFtZXMpIHx8IG1ldGhv
ZE5hbWVzLmxlbmd0aCA9PT0gMCkgeworICAgIHRocm93IG5ldyBFcnJvcignY3JlYXRlU3B5T2Jq
IHJlcXVpcmVzIGEgbm9uLWVtcHR5IGFycmF5IG9mIG1ldGhvZCBuYW1lcyB0byBjcmVhdGUgc3Bp
ZXMgZm9yJyk7CisgIH0KKyAgdmFyIG9iaiA9IHt9OworICBmb3IgKHZhciBpID0gMDsgaSA8IG1l
dGhvZE5hbWVzLmxlbmd0aDsgaSsrKSB7CisgICAgb2JqW21ldGhvZE5hbWVzW2ldXSA9IGphc21p
bmUuY3JlYXRlU3B5KGJhc2VOYW1lICsgJy4nICsgbWV0aG9kTmFtZXNbaV0pOworICB9CisgIHJl
dHVybiBvYmo7Cit9OworCisvKioKKyAqIEFsbCBwYXJhbWV0ZXJzIGFyZSBwcmV0dHktcHJpbnRl
ZCBhbmQgY29uY2F0ZW5hdGVkIHRvZ2V0aGVyLCB0aGVuIHdyaXR0ZW4gdG8gdGhlIGN1cnJlbnQg
c3BlYydzIG91dHB1dC4KKyAqCisgKiBCZSBjYXJlZnVsIG5vdCB0byBsZWF2ZSBjYWxscyB0byA8
Y29kZT5qYXNtaW5lLmxvZzwvY29kZT4gaW4gcHJvZHVjdGlvbiBjb2RlLgorICovCitqYXNtaW5l
LmxvZyA9IGZ1bmN0aW9uKCkgeworICB2YXIgc3BlYyA9IGphc21pbmUuZ2V0RW52KCkuY3VycmVu
dFNwZWM7CisgIHNwZWMubG9nLmFwcGx5KHNwZWMsIGFyZ3VtZW50cyk7Cit9OworCisvKioKKyAq
IEZ1bmN0aW9uIHRoYXQgaW5zdGFsbHMgYSBzcHkgb24gYW4gZXhpc3Rpbmcgb2JqZWN0J3MgbWV0
aG9kIG5hbWUuICBVc2VkIHdpdGhpbiBhIFNwZWMgdG8gY3JlYXRlIGEgc3B5LgorICoKKyAqIEBl
eGFtcGxlCisgKiAvLyBzcHkgZXhhbXBsZQorICogdmFyIGZvbyA9IHsKKyAqICAgbm90OiBmdW5j
dGlvbihib29sKSB7IHJldHVybiAhYm9vbDsgfQorICogfQorICogc3B5T24oZm9vLCAnbm90Jyk7
IC8vIGFjdHVhbCBmb28ubm90IHdpbGwgbm90IGJlIGNhbGxlZCwgZXhlY3V0aW9uIHN0b3BzCisg
KgorICogQHNlZSBqYXNtaW5lLmNyZWF0ZVNweQorICogQHBhcmFtIG9iagorICogQHBhcmFtIG1l
dGhvZE5hbWUKKyAqIEByZXR1cm5zIGEgSmFzbWluZSBzcHkgdGhhdCBjYW4gYmUgY2hhaW5lZCB3
aXRoIGFsbCBzcHkgbWV0aG9kcworICovCit2YXIgc3B5T24gPSBmdW5jdGlvbihvYmosIG1ldGhv
ZE5hbWUpIHsKKyAgcmV0dXJuIGphc21pbmUuZ2V0RW52KCkuY3VycmVudFNwZWMuc3B5T24ob2Jq
LCBtZXRob2ROYW1lKTsKK307CitpZiAoaXNDb21tb25KUykgZXhwb3J0cy5zcHlPbiA9IHNweU9u
OworCisvKioKKyAqIENyZWF0ZXMgYSBKYXNtaW5lIHNwZWMgdGhhdCB3aWxsIGJlIGFkZGVkIHRv
IHRoZSBjdXJyZW50IHN1aXRlLgorICoKKyAqIC8vIFRPRE86IHBlbmRpbmcgdGVzdHMKKyAqCisg
KiBAZXhhbXBsZQorICogaXQoJ3Nob3VsZCBiZSB0cnVlJywgZnVuY3Rpb24oKSB7CisgKiAgIGV4
cGVjdCh0cnVlKS50b0VxdWFsKHRydWUpOworICogfSk7CisgKgorICogQHBhcmFtIHtTdHJpbmd9
IGRlc2MgZGVzY3JpcHRpb24gb2YgdGhpcyBzcGVjaWZpY2F0aW9uCisgKiBAcGFyYW0ge0Z1bmN0
aW9ufSBmdW5jIGRlZmluZXMgdGhlIHByZWNvbmRpdGlvbnMgYW5kIGV4cGVjdGF0aW9ucyBvZiB0
aGUgc3BlYworICovCit2YXIgaXQgPSBmdW5jdGlvbihkZXNjLCBmdW5jKSB7CisgIHJldHVybiBq
YXNtaW5lLmdldEVudigpLml0KGRlc2MsIGZ1bmMpOworfTsKK2lmIChpc0NvbW1vbkpTKSBleHBv
cnRzLml0ID0gaXQ7CisKKy8qKgorICogQ3JlYXRlcyBhIDxlbT5kaXNhYmxlZDwvZW0+IEphc21p
bmUgc3BlYy4KKyAqCisgKiBBIGNvbnZlbmllbmNlIG1ldGhvZCB0aGF0IGFsbG93cyBleGlzdGlu
ZyBzcGVjcyB0byBiZSBkaXNhYmxlZCB0ZW1wb3JhcmlseSBkdXJpbmcgZGV2ZWxvcG1lbnQuCisg
KgorICogQHBhcmFtIHtTdHJpbmd9IGRlc2MgZGVzY3JpcHRpb24gb2YgdGhpcyBzcGVjaWZpY2F0
aW9uCisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIGRlZmluZXMgdGhlIHByZWNvbmRpdGlvbnMg
YW5kIGV4cGVjdGF0aW9ucyBvZiB0aGUgc3BlYworICovCit2YXIgeGl0ID0gZnVuY3Rpb24oZGVz
YywgZnVuYykgeworICByZXR1cm4gamFzbWluZS5nZXRFbnYoKS54aXQoZGVzYywgZnVuYyk7Cit9
OworaWYgKGlzQ29tbW9uSlMpIGV4cG9ydHMueGl0ID0geGl0OworCisvKioKKyAqIFN0YXJ0cyBh
IGNoYWluIGZvciBhIEphc21pbmUgZXhwZWN0YXRpb24uCisgKgorICogSXQgaXMgcGFzc2VkIGFu
IE9iamVjdCB0aGF0IGlzIHRoZSBhY3R1YWwgdmFsdWUgYW5kIHNob3VsZCBjaGFpbiB0byBvbmUg
b2YgdGhlIG1hbnkKKyAqIGphc21pbmUuTWF0Y2hlcnMgZnVuY3Rpb25zLgorICoKKyAqIEBwYXJh
bSB7T2JqZWN0fSBhY3R1YWwgQWN0dWFsIHZhbHVlIHRvIHRlc3QgYWdhaW5zdCBhbmQgZXhwZWN0
ZWQgdmFsdWUKKyAqLwordmFyIGV4cGVjdCA9IGZ1bmN0aW9uKGFjdHVhbCkgeworICByZXR1cm4g
amFzbWluZS5nZXRFbnYoKS5jdXJyZW50U3BlYy5leHBlY3QoYWN0dWFsKTsKK307CitpZiAoaXND
b21tb25KUykgZXhwb3J0cy5leHBlY3QgPSBleHBlY3Q7CisKKy8qKgorICogRGVmaW5lcyBwYXJ0
IG9mIGEgamFzbWluZSBzcGVjLiAgVXNlZCBpbiBjb21pbmJpbmF0aW9uIHdpdGggd2FpdHMgb3Ig
d2FpdHNGb3IgaW4gYXN5bmNocm5vdXMgc3BlY3MuCisgKgorICogQHBhcmFtIHtGdW5jdGlvbn0g
ZnVuYyBGdW5jdGlvbiB0aGF0IGRlZmluZXMgcGFydCBvZiBhIGphc21pbmUgc3BlYy4KKyAqLwor
dmFyIHJ1bnMgPSBmdW5jdGlvbihmdW5jKSB7CisgIGphc21pbmUuZ2V0RW52KCkuY3VycmVudFNw
ZWMucnVucyhmdW5jKTsKK307CitpZiAoaXNDb21tb25KUykgZXhwb3J0cy5ydW5zID0gcnVuczsK
KworLyoqCisgKiBXYWl0cyBhIGZpeGVkIHRpbWUgcGVyaW9kIGJlZm9yZSBtb3ZpbmcgdG8gdGhl
IG5leHQgYmxvY2suCisgKgorICogQGRlcHJlY2F0ZWQgVXNlIHdhaXRzRm9yKCkgaW5zdGVhZAor
ICogQHBhcmFtIHtOdW1iZXJ9IHRpbWVvdXQgbWlsbGlzZWNvbmRzIHRvIHdhaXQKKyAqLwordmFy
IHdhaXRzID0gZnVuY3Rpb24odGltZW91dCkgeworICBqYXNtaW5lLmdldEVudigpLmN1cnJlbnRT
cGVjLndhaXRzKHRpbWVvdXQpOworfTsKK2lmIChpc0NvbW1vbkpTKSBleHBvcnRzLndhaXRzID0g
d2FpdHM7CisKKy8qKgorICogV2FpdHMgZm9yIHRoZSBsYXRjaEZ1bmN0aW9uIHRvIHJldHVybiB0
cnVlIGJlZm9yZSBwcm9jZWVkaW5nIHRvIHRoZSBuZXh0IGJsb2NrLgorICoKKyAqIEBwYXJhbSB7
RnVuY3Rpb259IGxhdGNoRnVuY3Rpb24KKyAqIEBwYXJhbSB7U3RyaW5nfSBvcHRpb25hbF90aW1l
b3V0TWVzc2FnZQorICogQHBhcmFtIHtOdW1iZXJ9IG9wdGlvbmFsX3RpbWVvdXQKKyAqLwordmFy
IHdhaXRzRm9yID0gZnVuY3Rpb24obGF0Y2hGdW5jdGlvbiwgb3B0aW9uYWxfdGltZW91dE1lc3Nh
Z2UsIG9wdGlvbmFsX3RpbWVvdXQpIHsKKyAgamFzbWluZS5nZXRFbnYoKS5jdXJyZW50U3BlYy53
YWl0c0Zvci5hcHBseShqYXNtaW5lLmdldEVudigpLmN1cnJlbnRTcGVjLCBhcmd1bWVudHMpOwor
fTsKK2lmIChpc0NvbW1vbkpTKSBleHBvcnRzLndhaXRzRm9yID0gd2FpdHNGb3I7CisKKy8qKgor
ICogQSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBiZWZvcmUgZWFjaCBzcGVjIGluIGEgc3VpdGUu
CisgKgorICogVXNlZCBmb3Igc3BlYyBzZXR1cCwgaW5jbHVkaW5nIHZhbGlkYXRpbmcgYXNzdW1w
dGlvbnMuCisgKgorICogQHBhcmFtIHtGdW5jdGlvbn0gYmVmb3JlRWFjaEZ1bmN0aW9uCisgKi8K
K3ZhciBiZWZvcmVFYWNoID0gZnVuY3Rpb24oYmVmb3JlRWFjaEZ1bmN0aW9uKSB7CisgIGphc21p
bmUuZ2V0RW52KCkuYmVmb3JlRWFjaChiZWZvcmVFYWNoRnVuY3Rpb24pOworfTsKK2lmIChpc0Nv
bW1vbkpTKSBleHBvcnRzLmJlZm9yZUVhY2ggPSBiZWZvcmVFYWNoOworCisvKioKKyAqIEEgZnVu
Y3Rpb24gdGhhdCBpcyBjYWxsZWQgYWZ0ZXIgZWFjaCBzcGVjIGluIGEgc3VpdGUuCisgKgorICog
VXNlZCBmb3IgcmVzdG9yaW5nIGFueSBzdGF0ZSB0aGF0IGlzIGhpamFja2VkIGR1cmluZyBzcGVj
IGV4ZWN1dGlvbi4KKyAqCisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBhZnRlckVhY2hGdW5jdGlvbgor
ICovCit2YXIgYWZ0ZXJFYWNoID0gZnVuY3Rpb24oYWZ0ZXJFYWNoRnVuY3Rpb24pIHsKKyAgamFz
bWluZS5nZXRFbnYoKS5hZnRlckVhY2goYWZ0ZXJFYWNoRnVuY3Rpb24pOworfTsKK2lmIChpc0Nv
bW1vbkpTKSBleHBvcnRzLmFmdGVyRWFjaCA9IGFmdGVyRWFjaDsKKworLyoqCisgKiBEZWZpbmVz
IGEgc3VpdGUgb2Ygc3BlY2lmaWNhdGlvbnMuCisgKgorICogU3RvcmVzIHRoZSBkZXNjcmlwdGlv
biBhbmQgYWxsIGRlZmluZWQgc3BlY3MgaW4gdGhlIEphc21pbmUgZW52aXJvbm1lbnQgYXMgb25l
IHN1aXRlIG9mIHNwZWNzLiBWYXJpYWJsZXMgZGVjbGFyZWQKKyAqIGFyZSBhY2Nlc3NpYmxlIGJ5
IGNhbGxzIHRvIGJlZm9yZUVhY2gsIGl0LCBhbmQgYWZ0ZXJFYWNoLiBEZXNjcmliZSBibG9ja3Mg
Y2FuIGJlIG5lc3RlZCwgYWxsb3dpbmcgZm9yIHNwZWNpYWxpemF0aW9uCisgKiBvZiBzZXR1cCBp
biBzb21lIHRlc3RzLgorICoKKyAqIEBleGFtcGxlCisgKiAvLyBUT0RPOiBhIHNpbXBsZSBzdWl0
ZQorICoKKyAqIC8vIFRPRE86IGEgc2ltcGxlIHN1aXRlIHdpdGggYSBuZXN0ZWQgZGVzY3JpYmUg
YmxvY2sKKyAqCisgKiBAcGFyYW0ge1N0cmluZ30gZGVzY3JpcHRpb24gQSBzdHJpbmcsIHVzdWFs
bHkgdGhlIGNsYXNzIHVuZGVyIHRlc3QuCisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzcGVjRGVmaW5p
dGlvbnMgZnVuY3Rpb24gdGhhdCBkZWZpbmVzIHNldmVyYWwgc3BlY3MuCisgKi8KK3ZhciBkZXNj
cmliZSA9IGZ1bmN0aW9uKGRlc2NyaXB0aW9uLCBzcGVjRGVmaW5pdGlvbnMpIHsKKyAgcmV0dXJu
IGphc21pbmUuZ2V0RW52KCkuZGVzY3JpYmUoZGVzY3JpcHRpb24sIHNwZWNEZWZpbml0aW9ucyk7
Cit9OworaWYgKGlzQ29tbW9uSlMpIGV4cG9ydHMuZGVzY3JpYmUgPSBkZXNjcmliZTsKKworLyoq
CisgKiBEaXNhYmxlcyBhIHN1aXRlIG9mIHNwZWNpZmljYXRpb25zLiAgVXNlZCB0byBkaXNhYmxl
IHNvbWUgc3VpdGVzIGluIGEgZmlsZSwgb3IgZmlsZXMsIHRlbXBvcmFyaWx5IGR1cmluZyBkZXZl
bG9wbWVudC4KKyAqCisgKiBAcGFyYW0ge1N0cmluZ30gZGVzY3JpcHRpb24gQSBzdHJpbmcsIHVz
dWFsbHkgdGhlIGNsYXNzIHVuZGVyIHRlc3QuCisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzcGVjRGVm
aW5pdGlvbnMgZnVuY3Rpb24gdGhhdCBkZWZpbmVzIHNldmVyYWwgc3BlY3MuCisgKi8KK3ZhciB4
ZGVzY3JpYmUgPSBmdW5jdGlvbihkZXNjcmlwdGlvbiwgc3BlY0RlZmluaXRpb25zKSB7CisgIHJl
dHVybiBqYXNtaW5lLmdldEVudigpLnhkZXNjcmliZShkZXNjcmlwdGlvbiwgc3BlY0RlZmluaXRp
b25zKTsKK307CitpZiAoaXNDb21tb25KUykgZXhwb3J0cy54ZGVzY3JpYmUgPSB4ZGVzY3JpYmU7
CisKKworLy8gUHJvdmlkZSB0aGUgWE1MSHR0cFJlcXVlc3QgY2xhc3MgZm9yIElFIDUueC02Lng6
CitqYXNtaW5lLlhtbEh0dHBSZXF1ZXN0ID0gKHR5cGVvZiBYTUxIdHRwUmVxdWVzdCA9PSAidW5k
ZWZpbmVkIikgPyBmdW5jdGlvbigpIHsKKyAgZnVuY3Rpb24gdHJ5SXQoZikgeworICAgIHRyeSB7
CisgICAgICByZXR1cm4gZigpOworICAgIH0gY2F0Y2goZSkgeworICAgIH0KKyAgICByZXR1cm4g
bnVsbDsKKyAgfQorCisgIHZhciB4aHIgPSB0cnlJdChmdW5jdGlvbigpIHsKKyAgICByZXR1cm4g
bmV3IEFjdGl2ZVhPYmplY3QoIk1zeG1sMi5YTUxIVFRQLjYuMCIpOworICB9KSB8fAorICAgIHRy
eUl0KGZ1bmN0aW9uKCkgeworICAgICAgcmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCJNc3htbDIu
WE1MSFRUUC4zLjAiKTsKKyAgICB9KSB8fAorICAgIHRyeUl0KGZ1bmN0aW9uKCkgeworICAgICAg
cmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCJNc3htbDIuWE1MSFRUUCIpOworICAgIH0pIHx8Cisg
ICAgdHJ5SXQoZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoIk1p
Y3Jvc29mdC5YTUxIVFRQIik7CisgICAgfSk7CisKKyAgaWYgKCF4aHIpIHRocm93IG5ldyBFcnJv
cigiVGhpcyBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgWE1MSHR0cFJlcXVlc3QuIik7CisKKyAg
cmV0dXJuIHhocjsKK30gOiBYTUxIdHRwUmVxdWVzdDsKKy8qKgorICogQG5hbWVzcGFjZQorICov
CitqYXNtaW5lLnV0aWwgPSB7fTsKKworLyoqCisgKiBEZWNsYXJlIHRoYXQgYSBjaGlsZCBjbGFz
cyBpbmhlcml0IGl0J3MgcHJvdG90eXBlIGZyb20gdGhlIHBhcmVudCBjbGFzcy4KKyAqCisgKiBA
cHJpdmF0ZQorICogQHBhcmFtIHtGdW5jdGlvbn0gY2hpbGRDbGFzcworICogQHBhcmFtIHtGdW5j
dGlvbn0gcGFyZW50Q2xhc3MKKyAqLworamFzbWluZS51dGlsLmluaGVyaXQgPSBmdW5jdGlvbihj
aGlsZENsYXNzLCBwYXJlbnRDbGFzcykgeworICAvKioKKyAgICogQHByaXZhdGUKKyAgICovCisg
IHZhciBzdWJjbGFzcyA9IGZ1bmN0aW9uKCkgeworICB9OworICBzdWJjbGFzcy5wcm90b3R5cGUg
PSBwYXJlbnRDbGFzcy5wcm90b3R5cGU7CisgIGNoaWxkQ2xhc3MucHJvdG90eXBlID0gbmV3IHN1
YmNsYXNzKCk7Cit9OworCitqYXNtaW5lLnV0aWwuZm9ybWF0RXhjZXB0aW9uID0gZnVuY3Rpb24o
ZSkgeworICB2YXIgbGluZU51bWJlcjsKKyAgaWYgKGUubGluZSkgeworICAgIGxpbmVOdW1iZXIg
PSBlLmxpbmU7CisgIH0KKyAgZWxzZSBpZiAoZS5saW5lTnVtYmVyKSB7CisgICAgbGluZU51bWJl
ciA9IGUubGluZU51bWJlcjsKKyAgfQorCisgIHZhciBmaWxlOworCisgIGlmIChlLnNvdXJjZVVS
TCkgeworICAgIGZpbGUgPSBlLnNvdXJjZVVSTDsKKyAgfQorICBlbHNlIGlmIChlLmZpbGVOYW1l
KSB7CisgICAgZmlsZSA9IGUuZmlsZU5hbWU7CisgIH0KKworICB2YXIgbWVzc2FnZSA9IChlLm5h
bWUgJiYgZS5tZXNzYWdlKSA/IChlLm5hbWUgKyAnOiAnICsgZS5tZXNzYWdlKSA6IGUudG9TdHJp
bmcoKTsKKworICBpZiAoZmlsZSAmJiBsaW5lTnVtYmVyKSB7CisgICAgbWVzc2FnZSArPSAnIGlu
ICcgKyBmaWxlICsgJyAobGluZSAnICsgbGluZU51bWJlciArICcpJzsKKyAgfQorCisgIHJldHVy
biBtZXNzYWdlOworfTsKKworamFzbWluZS51dGlsLmh0bWxFc2NhcGUgPSBmdW5jdGlvbihzdHIp
IHsKKyAgaWYgKCFzdHIpIHJldHVybiBzdHI7CisgIHJldHVybiBzdHIucmVwbGFjZSgvJi9nLCAn
JmFtcDsnKQorICAgIC5yZXBsYWNlKC88L2csICcmbHQ7JykKKyAgICAucmVwbGFjZSgvPi9nLCAn
Jmd0OycpOworfTsKKworamFzbWluZS51dGlsLmFyZ3NUb0FycmF5ID0gZnVuY3Rpb24oYXJncykg
eworICB2YXIgYXJyYXlPZkFyZ3MgPSBbXTsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxl
bmd0aDsgaSsrKSBhcnJheU9mQXJncy5wdXNoKGFyZ3NbaV0pOworICByZXR1cm4gYXJyYXlPZkFy
Z3M7Cit9OworCitqYXNtaW5lLnV0aWwuZXh0ZW5kID0gZnVuY3Rpb24oZGVzdGluYXRpb24sIHNv
dXJjZSkgeworICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBzb3VyY2UpIGRlc3RpbmF0aW9uW3Byb3Bl
cnR5XSA9IHNvdXJjZVtwcm9wZXJ0eV07CisgIHJldHVybiBkZXN0aW5hdGlvbjsKK307CisKKy8q
KgorICogRW52aXJvbm1lbnQgZm9yIEphc21pbmUKKyAqCisgKiBAY29uc3RydWN0b3IKKyAqLwor
amFzbWluZS5FbnYgPSBmdW5jdGlvbigpIHsKKyAgdGhpcy5jdXJyZW50U3BlYyA9IG51bGw7Cisg
IHRoaXMuY3VycmVudFN1aXRlID0gbnVsbDsKKyAgdGhpcy5jdXJyZW50UnVubmVyXyA9IG5ldyBq
YXNtaW5lLlJ1bm5lcih0aGlzKTsKKworICB0aGlzLnJlcG9ydGVyID0gbmV3IGphc21pbmUuTXVs
dGlSZXBvcnRlcigpOworCisgIHRoaXMudXBkYXRlSW50ZXJ2YWwgPSBqYXNtaW5lLkRFRkFVTFRf
VVBEQVRFX0lOVEVSVkFMOworICB0aGlzLmRlZmF1bHRUaW1lb3V0SW50ZXJ2YWwgPSBqYXNtaW5l
LkRFRkFVTFRfVElNRU9VVF9JTlRFUlZBTDsKKyAgdGhpcy5sYXN0VXBkYXRlID0gMDsKKyAgdGhp
cy5zcGVjRmlsdGVyID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRydWU7CisgIH07CisKKyAg
dGhpcy5uZXh0U3BlY0lkXyA9IDA7CisgIHRoaXMubmV4dFN1aXRlSWRfID0gMDsKKyAgdGhpcy5l
cXVhbGl0eVRlc3RlcnNfID0gW107CisKKyAgLy8gd3JhcCBtYXRjaGVycworICB0aGlzLm1hdGNo
ZXJzQ2xhc3MgPSBmdW5jdGlvbigpIHsKKyAgICBqYXNtaW5lLk1hdGNoZXJzLmFwcGx5KHRoaXMs
IGFyZ3VtZW50cyk7CisgIH07CisgIGphc21pbmUudXRpbC5pbmhlcml0KHRoaXMubWF0Y2hlcnND
bGFzcywgamFzbWluZS5NYXRjaGVycyk7CisKKyAgamFzbWluZS5NYXRjaGVycy53cmFwSW50b18o
amFzbWluZS5NYXRjaGVycy5wcm90b3R5cGUsIHRoaXMubWF0Y2hlcnNDbGFzcyk7Cit9OworCisK
K2phc21pbmUuRW52LnByb3RvdHlwZS5zZXRUaW1lb3V0ID0gamFzbWluZS5zZXRUaW1lb3V0Owor
amFzbWluZS5FbnYucHJvdG90eXBlLmNsZWFyVGltZW91dCA9IGphc21pbmUuY2xlYXJUaW1lb3V0
OworamFzbWluZS5FbnYucHJvdG90eXBlLnNldEludGVydmFsID0gamFzbWluZS5zZXRJbnRlcnZh
bDsKK2phc21pbmUuRW52LnByb3RvdHlwZS5jbGVhckludGVydmFsID0gamFzbWluZS5jbGVhcklu
dGVydmFsOworCisvKioKKyAqIEByZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIGphc21pbmUg
dmVyc2lvbiBidWlsZCBpbmZvLCBpZiBzZXQuCisgKi8KK2phc21pbmUuRW52LnByb3RvdHlwZS52
ZXJzaW9uID0gZnVuY3Rpb24gKCkgeworICBpZiAoamFzbWluZS52ZXJzaW9uXykgeworICAgIHJl
dHVybiBqYXNtaW5lLnZlcnNpb25fOworICB9IGVsc2UgeworICAgIHRocm93IG5ldyBFcnJvcign
VmVyc2lvbiBub3Qgc2V0Jyk7CisgIH0KK307CisKKy8qKgorICogQHJldHVybnMgc3RyaW5nIGNv
bnRhaW5pbmcgamFzbWluZSB2ZXJzaW9uIGJ1aWxkIGluZm8sIGlmIHNldC4KKyAqLworamFzbWlu
ZS5FbnYucHJvdG90eXBlLnZlcnNpb25TdHJpbmcgPSBmdW5jdGlvbigpIHsKKyAgaWYgKCFqYXNt
aW5lLnZlcnNpb25fKSB7CisgICAgcmV0dXJuICJ2ZXJzaW9uIHVua25vd24iOworICB9CisKKyAg
dmFyIHZlcnNpb24gPSB0aGlzLnZlcnNpb24oKTsKKyAgdmFyIHZlcnNpb25TdHJpbmcgPSB2ZXJz
aW9uLm1ham9yICsgIi4iICsgdmVyc2lvbi5taW5vciArICIuIiArIHZlcnNpb24uYnVpbGQ7Cisg
IGlmICh2ZXJzaW9uLnJlbGVhc2VfY2FuZGlkYXRlKSB7CisgICAgdmVyc2lvblN0cmluZyArPSAi
LnJjIiArIHZlcnNpb24ucmVsZWFzZV9jYW5kaWRhdGUKKyAgfQorICB2ZXJzaW9uU3RyaW5nICs9
ICIgcmV2aXNpb24gIiArIHZlcnNpb24ucmV2aXNpb247CisgIHJldHVybiB2ZXJzaW9uU3RyaW5n
OworfTsKKworLyoqCisgKiBAcmV0dXJucyBhIHNlcXVlbnRpYWwgaW50ZWdlciBzdGFydGluZyBh
dCAwCisgKi8KK2phc21pbmUuRW52LnByb3RvdHlwZS5uZXh0U3BlY0lkID0gZnVuY3Rpb24gKCkg
eworICByZXR1cm4gdGhpcy5uZXh0U3BlY0lkXysrOworfTsKKworLyoqCisgKiBAcmV0dXJucyBh
IHNlcXVlbnRpYWwgaW50ZWdlciBzdGFydGluZyBhdCAwCisgKi8KK2phc21pbmUuRW52LnByb3Rv
dHlwZS5uZXh0U3VpdGVJZCA9IGZ1bmN0aW9uICgpIHsKKyAgcmV0dXJuIHRoaXMubmV4dFN1aXRl
SWRfKys7Cit9OworCisvKioKKyAqIFJlZ2lzdGVyIGEgcmVwb3J0ZXIgdG8gcmVjZWl2ZSBzdGF0
dXMgdXBkYXRlcyBmcm9tIEphc21pbmUuCisgKiBAcGFyYW0ge2phc21pbmUuUmVwb3J0ZXJ9IHJl
cG9ydGVyIEFuIG9iamVjdCB3aGljaCB3aWxsIHJlY2VpdmUgc3RhdHVzIHVwZGF0ZXMuCisgKi8K
K2phc21pbmUuRW52LnByb3RvdHlwZS5hZGRSZXBvcnRlciA9IGZ1bmN0aW9uKHJlcG9ydGVyKSB7
CisgIHRoaXMucmVwb3J0ZXIuYWRkUmVwb3J0ZXIocmVwb3J0ZXIpOworfTsKKworamFzbWluZS5F
bnYucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbigpIHsKKyAgdGhpcy5jdXJyZW50UnVubmVy
Xy5leGVjdXRlKCk7Cit9OworCitqYXNtaW5lLkVudi5wcm90b3R5cGUuZGVzY3JpYmUgPSBmdW5j
dGlvbihkZXNjcmlwdGlvbiwgc3BlY0RlZmluaXRpb25zKSB7CisgIHZhciBzdWl0ZSA9IG5ldyBq
YXNtaW5lLlN1aXRlKHRoaXMsIGRlc2NyaXB0aW9uLCBzcGVjRGVmaW5pdGlvbnMsIHRoaXMuY3Vy
cmVudFN1aXRlKTsKKworICB2YXIgcGFyZW50U3VpdGUgPSB0aGlzLmN1cnJlbnRTdWl0ZTsKKyAg
aWYgKHBhcmVudFN1aXRlKSB7CisgICAgcGFyZW50U3VpdGUuYWRkKHN1aXRlKTsKKyAgfSBlbHNl
IHsKKyAgICB0aGlzLmN1cnJlbnRSdW5uZXJfLmFkZChzdWl0ZSk7CisgIH0KKworICB0aGlzLmN1
cnJlbnRTdWl0ZSA9IHN1aXRlOworCisgIHZhciBkZWNsYXJhdGlvbkVycm9yID0gbnVsbDsKKyAg
dHJ5IHsKKyAgICBzcGVjRGVmaW5pdGlvbnMuY2FsbChzdWl0ZSk7CisgIH0gY2F0Y2goZSkgewor
ICAgIGRlY2xhcmF0aW9uRXJyb3IgPSBlOworICB9CisKKyAgaWYgKGRlY2xhcmF0aW9uRXJyb3Ip
IHsKKyAgICB0aGlzLml0KCJlbmNvdW50ZXJlZCBhIGRlY2xhcmF0aW9uIGV4Y2VwdGlvbiIsIGZ1
bmN0aW9uKCkgeworICAgICAgdGhyb3cgZGVjbGFyYXRpb25FcnJvcjsKKyAgICB9KTsKKyAgfQor
CisgIHRoaXMuY3VycmVudFN1aXRlID0gcGFyZW50U3VpdGU7CisKKyAgcmV0dXJuIHN1aXRlOwor
fTsKKworamFzbWluZS5FbnYucHJvdG90eXBlLmJlZm9yZUVhY2ggPSBmdW5jdGlvbihiZWZvcmVF
YWNoRnVuY3Rpb24pIHsKKyAgaWYgKHRoaXMuY3VycmVudFN1aXRlKSB7CisgICAgdGhpcy5jdXJy
ZW50U3VpdGUuYmVmb3JlRWFjaChiZWZvcmVFYWNoRnVuY3Rpb24pOworICB9IGVsc2UgeworICAg
IHRoaXMuY3VycmVudFJ1bm5lcl8uYmVmb3JlRWFjaChiZWZvcmVFYWNoRnVuY3Rpb24pOworICB9
Cit9OworCitqYXNtaW5lLkVudi5wcm90b3R5cGUuY3VycmVudFJ1bm5lciA9IGZ1bmN0aW9uICgp
IHsKKyAgcmV0dXJuIHRoaXMuY3VycmVudFJ1bm5lcl87Cit9OworCitqYXNtaW5lLkVudi5wcm90
b3R5cGUuYWZ0ZXJFYWNoID0gZnVuY3Rpb24oYWZ0ZXJFYWNoRnVuY3Rpb24pIHsKKyAgaWYgKHRo
aXMuY3VycmVudFN1aXRlKSB7CisgICAgdGhpcy5jdXJyZW50U3VpdGUuYWZ0ZXJFYWNoKGFmdGVy
RWFjaEZ1bmN0aW9uKTsKKyAgfSBlbHNlIHsKKyAgICB0aGlzLmN1cnJlbnRSdW5uZXJfLmFmdGVy
RWFjaChhZnRlckVhY2hGdW5jdGlvbik7CisgIH0KKworfTsKKworamFzbWluZS5FbnYucHJvdG90
eXBlLnhkZXNjcmliZSA9IGZ1bmN0aW9uKGRlc2MsIHNwZWNEZWZpbml0aW9ucykgeworICByZXR1
cm4geworICAgIGV4ZWN1dGU6IGZ1bmN0aW9uKCkgeworICAgIH0KKyAgfTsKK307CisKK2phc21p
bmUuRW52LnByb3RvdHlwZS5pdCA9IGZ1bmN0aW9uKGRlc2NyaXB0aW9uLCBmdW5jKSB7CisgIHZh
ciBzcGVjID0gbmV3IGphc21pbmUuU3BlYyh0aGlzLCB0aGlzLmN1cnJlbnRTdWl0ZSwgZGVzY3Jp
cHRpb24pOworICB0aGlzLmN1cnJlbnRTdWl0ZS5hZGQoc3BlYyk7CisgIHRoaXMuY3VycmVudFNw
ZWMgPSBzcGVjOworCisgIGlmIChmdW5jKSB7CisgICAgc3BlYy5ydW5zKGZ1bmMpOworICB9CisK
KyAgcmV0dXJuIHNwZWM7Cit9OworCitqYXNtaW5lLkVudi5wcm90b3R5cGUueGl0ID0gZnVuY3Rp
b24oZGVzYywgZnVuYykgeworICByZXR1cm4geworICAgIGlkOiB0aGlzLm5leHRTcGVjSWQoKSwK
KyAgICBydW5zOiBmdW5jdGlvbigpIHsKKyAgICB9CisgIH07Cit9OworCitqYXNtaW5lLkVudi5w
cm90b3R5cGUuY29tcGFyZU9iamVjdHNfID0gZnVuY3Rpb24oYSwgYiwgbWlzbWF0Y2hLZXlzLCBt
aXNtYXRjaFZhbHVlcykgeworICBpZiAoYS5fX0phc21pbmVfYmVlbl9oZXJlX2JlZm9yZV9fID09
PSBiICYmIGIuX19KYXNtaW5lX2JlZW5faGVyZV9iZWZvcmVfXyA9PT0gYSkgeworICAgIHJldHVy
biB0cnVlOworICB9CisKKyAgYS5fX0phc21pbmVfYmVlbl9oZXJlX2JlZm9yZV9fID0gYjsKKyAg
Yi5fX0phc21pbmVfYmVlbl9oZXJlX2JlZm9yZV9fID0gYTsKKworICB2YXIgaGFzS2V5ID0gZnVu
Y3Rpb24ob2JqLCBrZXlOYW1lKSB7CisgICAgcmV0dXJuIG9iaiAhPT0gbnVsbCAmJiBvYmpba2V5
TmFtZV0gIT09IGphc21pbmUudW5kZWZpbmVkOworICB9OworCisgIGZvciAodmFyIHByb3BlcnR5
IGluIGIpIHsKKyAgICBpZiAoIWhhc0tleShhLCBwcm9wZXJ0eSkgJiYgaGFzS2V5KGIsIHByb3Bl
cnR5KSkgeworICAgICAgbWlzbWF0Y2hLZXlzLnB1c2goImV4cGVjdGVkIGhhcyBrZXkgJyIgKyBw
cm9wZXJ0eSArICInLCBidXQgbWlzc2luZyBmcm9tIGFjdHVhbC4iKTsKKyAgICB9CisgIH0KKyAg
Zm9yIChwcm9wZXJ0eSBpbiBhKSB7CisgICAgaWYgKCFoYXNLZXkoYiwgcHJvcGVydHkpICYmIGhh
c0tleShhLCBwcm9wZXJ0eSkpIHsKKyAgICAgIG1pc21hdGNoS2V5cy5wdXNoKCJleHBlY3RlZCBt
aXNzaW5nIGtleSAnIiArIHByb3BlcnR5ICsgIicsIGJ1dCBwcmVzZW50IGluIGFjdHVhbC4iKTsK
KyAgICB9CisgIH0KKyAgZm9yIChwcm9wZXJ0eSBpbiBiKSB7CisgICAgaWYgKHByb3BlcnR5ID09
ICdfX0phc21pbmVfYmVlbl9oZXJlX2JlZm9yZV9fJykgY29udGludWU7CisgICAgaWYgKCF0aGlz
LmVxdWFsc18oYVtwcm9wZXJ0eV0sIGJbcHJvcGVydHldLCBtaXNtYXRjaEtleXMsIG1pc21hdGNo
VmFsdWVzKSkgeworICAgICAgbWlzbWF0Y2hWYWx1ZXMucHVzaCgiJyIgKyBwcm9wZXJ0eSArICIn
IHdhcyAnIiArIChiW3Byb3BlcnR5XSA/IGphc21pbmUudXRpbC5odG1sRXNjYXBlKGJbcHJvcGVy
dHldLnRvU3RyaW5nKCkpIDogYltwcm9wZXJ0eV0pICsgIicgaW4gZXhwZWN0ZWQsIGJ1dCB3YXMg
JyIgKyAoYVtwcm9wZXJ0eV0gPyBqYXNtaW5lLnV0aWwuaHRtbEVzY2FwZShhW3Byb3BlcnR5XS50
b1N0cmluZygpKSA6IGFbcHJvcGVydHldKSArICInIGluIGFjdHVhbC4iKTsKKyAgICB9CisgIH0K
KworICBpZiAoamFzbWluZS5pc0FycmF5XyhhKSAmJiBqYXNtaW5lLmlzQXJyYXlfKGIpICYmIGEu
bGVuZ3RoICE9IGIubGVuZ3RoKSB7CisgICAgbWlzbWF0Y2hWYWx1ZXMucHVzaCgiYXJyYXlzIHdl
cmUgbm90IHRoZSBzYW1lIGxlbmd0aCIpOworICB9CisKKyAgZGVsZXRlIGEuX19KYXNtaW5lX2Jl
ZW5faGVyZV9iZWZvcmVfXzsKKyAgZGVsZXRlIGIuX19KYXNtaW5lX2JlZW5faGVyZV9iZWZvcmVf
XzsKKyAgcmV0dXJuIChtaXNtYXRjaEtleXMubGVuZ3RoID09PSAwICYmIG1pc21hdGNoVmFsdWVz
Lmxlbmd0aCA9PT0gMCk7Cit9OworCitqYXNtaW5lLkVudi5wcm90b3R5cGUuZXF1YWxzXyA9IGZ1
bmN0aW9uKGEsIGIsIG1pc21hdGNoS2V5cywgbWlzbWF0Y2hWYWx1ZXMpIHsKKyAgbWlzbWF0Y2hL
ZXlzID0gbWlzbWF0Y2hLZXlzIHx8IFtdOworICBtaXNtYXRjaFZhbHVlcyA9IG1pc21hdGNoVmFs
dWVzIHx8IFtdOworCisgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lcXVhbGl0eVRlc3RlcnNf
Lmxlbmd0aDsgaSsrKSB7CisgICAgdmFyIGVxdWFsaXR5VGVzdGVyID0gdGhpcy5lcXVhbGl0eVRl
c3RlcnNfW2ldOworICAgIHZhciByZXN1bHQgPSBlcXVhbGl0eVRlc3RlcihhLCBiLCB0aGlzLCBt
aXNtYXRjaEtleXMsIG1pc21hdGNoVmFsdWVzKTsKKyAgICBpZiAocmVzdWx0ICE9PSBqYXNtaW5l
LnVuZGVmaW5lZCkgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisgIGlmIChhID09PSBiKSByZXR1cm4g
dHJ1ZTsKKworICBpZiAoYSA9PT0gamFzbWluZS51bmRlZmluZWQgfHwgYSA9PT0gbnVsbCB8fCBi
ID09PSBqYXNtaW5lLnVuZGVmaW5lZCB8fCBiID09PSBudWxsKSB7CisgICAgcmV0dXJuIChhID09
IGphc21pbmUudW5kZWZpbmVkICYmIGIgPT0gamFzbWluZS51bmRlZmluZWQpOworICB9CisKKyAg
aWYgKGphc21pbmUuaXNEb21Ob2RlKGEpICYmIGphc21pbmUuaXNEb21Ob2RlKGIpKSB7CisgICAg
cmV0dXJuIGEgPT09IGI7CisgIH0KKworICBpZiAoYSBpbnN0YW5jZW9mIERhdGUgJiYgYiBpbnN0
YW5jZW9mIERhdGUpIHsKKyAgICByZXR1cm4gYS5nZXRUaW1lKCkgPT0gYi5nZXRUaW1lKCk7Cisg
IH0KKworICBpZiAoYSBpbnN0YW5jZW9mIGphc21pbmUuTWF0Y2hlcnMuQW55KSB7CisgICAgcmV0
dXJuIGEubWF0Y2hlcyhiKTsKKyAgfQorCisgIGlmIChiIGluc3RhbmNlb2YgamFzbWluZS5NYXRj
aGVycy5BbnkpIHsKKyAgICByZXR1cm4gYi5tYXRjaGVzKGEpOworICB9CisKKyAgaWYgKGphc21p
bmUuaXNTdHJpbmdfKGEpICYmIGphc21pbmUuaXNTdHJpbmdfKGIpKSB7CisgICAgcmV0dXJuIChh
ID09IGIpOworICB9CisKKyAgaWYgKGphc21pbmUuaXNOdW1iZXJfKGEpICYmIGphc21pbmUuaXNO
dW1iZXJfKGIpKSB7CisgICAgcmV0dXJuIChhID09IGIpOworICB9CisKKyAgaWYgKHR5cGVvZiBh
ID09PSAib2JqZWN0IiAmJiB0eXBlb2YgYiA9PT0gIm9iamVjdCIpIHsKKyAgICByZXR1cm4gdGhp
cy5jb21wYXJlT2JqZWN0c18oYSwgYiwgbWlzbWF0Y2hLZXlzLCBtaXNtYXRjaFZhbHVlcyk7Cisg
IH0KKworICAvL1N0cmFpZ2h0IGNoZWNrCisgIHJldHVybiAoYSA9PT0gYik7Cit9OworCitqYXNt
aW5lLkVudi5wcm90b3R5cGUuY29udGFpbnNfID0gZnVuY3Rpb24oaGF5c3RhY2ssIG5lZWRsZSkg
eworICBpZiAoamFzbWluZS5pc0FycmF5XyhoYXlzdGFjaykpIHsKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGhheXN0YWNrLmxlbmd0aDsgaSsrKSB7CisgICAgICBpZiAodGhpcy5lcXVhbHNfKGhh
eXN0YWNrW2ldLCBuZWVkbGUpKSByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworICB9CisgIHJldHVybiBoYXlzdGFjay5pbmRleE9mKG5lZWRsZSkgPj0gMDsKK307CisKK2ph
c21pbmUuRW52LnByb3RvdHlwZS5hZGRFcXVhbGl0eVRlc3RlciA9IGZ1bmN0aW9uKGVxdWFsaXR5
VGVzdGVyKSB7CisgIHRoaXMuZXF1YWxpdHlUZXN0ZXJzXy5wdXNoKGVxdWFsaXR5VGVzdGVyKTsK
K307CisvKiogTm8tb3AgYmFzZSBjbGFzcyBmb3IgSmFzbWluZSByZXBvcnRlcnMuCisgKgorICog
QGNvbnN0cnVjdG9yCisgKi8KK2phc21pbmUuUmVwb3J0ZXIgPSBmdW5jdGlvbigpIHsKK307CisK
Ky8vbm9pbnNwZWN0aW9uIEpTVW51c2VkTG9jYWxTeW1ib2xzCitqYXNtaW5lLlJlcG9ydGVyLnBy
b3RvdHlwZS5yZXBvcnRSdW5uZXJTdGFydGluZyA9IGZ1bmN0aW9uKHJ1bm5lcikgeworfTsKKwor
Ly9ub2luc3BlY3Rpb24gSlNVbnVzZWRMb2NhbFN5bWJvbHMKK2phc21pbmUuUmVwb3J0ZXIucHJv
dG90eXBlLnJlcG9ydFJ1bm5lclJlc3VsdHMgPSBmdW5jdGlvbihydW5uZXIpIHsKK307CisKKy8v
bm9pbnNwZWN0aW9uIEpTVW51c2VkTG9jYWxTeW1ib2xzCitqYXNtaW5lLlJlcG9ydGVyLnByb3Rv
dHlwZS5yZXBvcnRTdWl0ZVJlc3VsdHMgPSBmdW5jdGlvbihzdWl0ZSkgeworfTsKKworLy9ub2lu
c3BlY3Rpb24gSlNVbnVzZWRMb2NhbFN5bWJvbHMKK2phc21pbmUuUmVwb3J0ZXIucHJvdG90eXBl
LnJlcG9ydFNwZWNTdGFydGluZyA9IGZ1bmN0aW9uKHNwZWMpIHsKK307CisKKy8vbm9pbnNwZWN0
aW9uIEpTVW51c2VkTG9jYWxTeW1ib2xzCitqYXNtaW5lLlJlcG9ydGVyLnByb3RvdHlwZS5yZXBv
cnRTcGVjUmVzdWx0cyA9IGZ1bmN0aW9uKHNwZWMpIHsKK307CisKKy8vbm9pbnNwZWN0aW9uIEpT
VW51c2VkTG9jYWxTeW1ib2xzCitqYXNtaW5lLlJlcG9ydGVyLnByb3RvdHlwZS5sb2cgPSBmdW5j
dGlvbihzdHIpIHsKK307CisKKy8qKgorICogQmxvY2tzIGFyZSBmdW5jdGlvbnMgd2l0aCBleGVj
dXRhYmxlIGNvZGUgdGhhdCBtYWtlIHVwIGEgc3BlYy4KKyAqCisgKiBAY29uc3RydWN0b3IKKyAq
IEBwYXJhbSB7amFzbWluZS5FbnZ9IGVudgorICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYworICog
QHBhcmFtIHtqYXNtaW5lLlNwZWN9IHNwZWMKKyAqLworamFzbWluZS5CbG9jayA9IGZ1bmN0aW9u
KGVudiwgZnVuYywgc3BlYykgeworICB0aGlzLmVudiA9IGVudjsKKyAgdGhpcy5mdW5jID0gZnVu
YzsKKyAgdGhpcy5zcGVjID0gc3BlYzsKK307CisKK2phc21pbmUuQmxvY2sucHJvdG90eXBlLmV4
ZWN1dGUgPSBmdW5jdGlvbihvbkNvbXBsZXRlKSB7ICAKKyAgdHJ5IHsKKyAgICB0aGlzLmZ1bmMu
YXBwbHkodGhpcy5zcGVjKTsKKyAgfSBjYXRjaCAoZSkgeworICAgIHRoaXMuc3BlYy5mYWlsKGUp
OworICB9CisgIG9uQ29tcGxldGUoKTsKK307CisvKiogSmF2YVNjcmlwdCBBUEkgcmVwb3J0ZXIu
CisgKgorICogQGNvbnN0cnVjdG9yCisgKi8KK2phc21pbmUuSnNBcGlSZXBvcnRlciA9IGZ1bmN0
aW9uKCkgeworICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTsKKyAgdGhpcy5maW5pc2hlZCA9IGZhbHNl
OworICB0aGlzLnN1aXRlc18gPSBbXTsKKyAgdGhpcy5yZXN1bHRzXyA9IHt9OworfTsKKworamFz
bWluZS5Kc0FwaVJlcG9ydGVyLnByb3RvdHlwZS5yZXBvcnRSdW5uZXJTdGFydGluZyA9IGZ1bmN0
aW9uKHJ1bm5lcikgeworICB0aGlzLnN0YXJ0ZWQgPSB0cnVlOworICB2YXIgc3VpdGVzID0gcnVu
bmVyLnRvcExldmVsU3VpdGVzKCk7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgc3VpdGVzLmxlbmd0
aDsgaSsrKSB7CisgICAgdmFyIHN1aXRlID0gc3VpdGVzW2ldOworICAgIHRoaXMuc3VpdGVzXy5w
dXNoKHRoaXMuc3VtbWFyaXplXyhzdWl0ZSkpOworICB9Cit9OworCitqYXNtaW5lLkpzQXBpUmVw
b3J0ZXIucHJvdG90eXBlLnN1aXRlcyA9IGZ1bmN0aW9uKCkgeworICByZXR1cm4gdGhpcy5zdWl0
ZXNfOworfTsKKworamFzbWluZS5Kc0FwaVJlcG9ydGVyLnByb3RvdHlwZS5zdW1tYXJpemVfID0g
ZnVuY3Rpb24oc3VpdGVPclNwZWMpIHsKKyAgdmFyIGlzU3VpdGUgPSBzdWl0ZU9yU3BlYyBpbnN0
YW5jZW9mIGphc21pbmUuU3VpdGU7CisgIHZhciBzdW1tYXJ5ID0geworICAgIGlkOiBzdWl0ZU9y
U3BlYy5pZCwKKyAgICBuYW1lOiBzdWl0ZU9yU3BlYy5kZXNjcmlwdGlvbiwKKyAgICB0eXBlOiBp
c1N1aXRlID8gJ3N1aXRlJyA6ICdzcGVjJywKKyAgICBjaGlsZHJlbjogW10KKyAgfTsKKyAgCisg
IGlmIChpc1N1aXRlKSB7CisgICAgdmFyIGNoaWxkcmVuID0gc3VpdGVPclNwZWMuY2hpbGRyZW4o
KTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7CisgICAg
ICBzdW1tYXJ5LmNoaWxkcmVuLnB1c2godGhpcy5zdW1tYXJpemVfKGNoaWxkcmVuW2ldKSk7Cisg
ICAgfQorICB9CisgIHJldHVybiBzdW1tYXJ5OworfTsKKworamFzbWluZS5Kc0FwaVJlcG9ydGVy
LnByb3RvdHlwZS5yZXN1bHRzID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiB0aGlzLnJlc3VsdHNf
OworfTsKKworamFzbWluZS5Kc0FwaVJlcG9ydGVyLnByb3RvdHlwZS5yZXN1bHRzRm9yU3BlYyA9
IGZ1bmN0aW9uKHNwZWNJZCkgeworICByZXR1cm4gdGhpcy5yZXN1bHRzX1tzcGVjSWRdOworfTsK
KworLy9ub2luc3BlY3Rpb24gSlNVbnVzZWRMb2NhbFN5bWJvbHMKK2phc21pbmUuSnNBcGlSZXBv
cnRlci5wcm90b3R5cGUucmVwb3J0UnVubmVyUmVzdWx0cyA9IGZ1bmN0aW9uKHJ1bm5lcikgewor
ICB0aGlzLmZpbmlzaGVkID0gdHJ1ZTsKK307CisKKy8vbm9pbnNwZWN0aW9uIEpTVW51c2VkTG9j
YWxTeW1ib2xzCitqYXNtaW5lLkpzQXBpUmVwb3J0ZXIucHJvdG90eXBlLnJlcG9ydFN1aXRlUmVz
dWx0cyA9IGZ1bmN0aW9uKHN1aXRlKSB7Cit9OworCisvL25vaW5zcGVjdGlvbiBKU1VudXNlZExv
Y2FsU3ltYm9scworamFzbWluZS5Kc0FwaVJlcG9ydGVyLnByb3RvdHlwZS5yZXBvcnRTcGVjUmVz
dWx0cyA9IGZ1bmN0aW9uKHNwZWMpIHsKKyAgdGhpcy5yZXN1bHRzX1tzcGVjLmlkXSA9IHsKKyAg
ICBtZXNzYWdlczogc3BlYy5yZXN1bHRzKCkuZ2V0SXRlbXMoKSwKKyAgICByZXN1bHQ6IHNwZWMu
cmVzdWx0cygpLmZhaWxlZENvdW50ID4gMCA/ICJmYWlsZWQiIDogInBhc3NlZCIKKyAgfTsKK307
CisKKy8vbm9pbnNwZWN0aW9uIEpTVW51c2VkTG9jYWxTeW1ib2xzCitqYXNtaW5lLkpzQXBpUmVw
b3J0ZXIucHJvdG90eXBlLmxvZyA9IGZ1bmN0aW9uKHN0cikgeworfTsKKworamFzbWluZS5Kc0Fw
aVJlcG9ydGVyLnByb3RvdHlwZS5yZXN1bHRzRm9yU3BlY3MgPSBmdW5jdGlvbihzcGVjSWRzKXsK
KyAgdmFyIHJlc3VsdHMgPSB7fTsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGVjSWRzLmxlbmd0
aDsgaSsrKSB7CisgICAgdmFyIHNwZWNJZCA9IHNwZWNJZHNbaV07CisgICAgcmVzdWx0c1tzcGVj
SWRdID0gdGhpcy5zdW1tYXJpemVSZXN1bHRfKHRoaXMucmVzdWx0c19bc3BlY0lkXSk7CisgIH0K
KyAgcmV0dXJuIHJlc3VsdHM7Cit9OworCitqYXNtaW5lLkpzQXBpUmVwb3J0ZXIucHJvdG90eXBl
LnN1bW1hcml6ZVJlc3VsdF8gPSBmdW5jdGlvbihyZXN1bHQpeworICB2YXIgc3VtbWFyeU1lc3Nh
Z2VzID0gW107CisgIHZhciBtZXNzYWdlc0xlbmd0aCA9IHJlc3VsdC5tZXNzYWdlcy5sZW5ndGg7
CisgIGZvciAodmFyIG1lc3NhZ2VJbmRleCA9IDA7IG1lc3NhZ2VJbmRleCA8IG1lc3NhZ2VzTGVu
Z3RoOyBtZXNzYWdlSW5kZXgrKykgeworICAgIHZhciByZXN1bHRNZXNzYWdlID0gcmVzdWx0Lm1l
c3NhZ2VzW21lc3NhZ2VJbmRleF07CisgICAgc3VtbWFyeU1lc3NhZ2VzLnB1c2goeworICAgICAg
dGV4dDogcmVzdWx0TWVzc2FnZS50eXBlID09ICdsb2cnID8gcmVzdWx0TWVzc2FnZS50b1N0cmlu
ZygpIDogamFzbWluZS51bmRlZmluZWQsCisgICAgICBwYXNzZWQ6IHJlc3VsdE1lc3NhZ2UucGFz
c2VkID8gcmVzdWx0TWVzc2FnZS5wYXNzZWQoKSA6IHRydWUsCisgICAgICB0eXBlOiByZXN1bHRN
ZXNzYWdlLnR5cGUsCisgICAgICBtZXNzYWdlOiByZXN1bHRNZXNzYWdlLm1lc3NhZ2UsCisgICAg
ICB0cmFjZTogeworICAgICAgICBzdGFjazogcmVzdWx0TWVzc2FnZS5wYXNzZWQgJiYgIXJlc3Vs
dE1lc3NhZ2UucGFzc2VkKCkgPyByZXN1bHRNZXNzYWdlLnRyYWNlLnN0YWNrIDogamFzbWluZS51
bmRlZmluZWQKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIHJldHVybiB7CisgICAgcmVzdWx0
IDogcmVzdWx0LnJlc3VsdCwKKyAgICBtZXNzYWdlcyA6IHN1bW1hcnlNZXNzYWdlcworICB9Owor
fTsKKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBwYXJhbSB7amFzbWluZS5FbnZ9IGVudgor
ICogQHBhcmFtIGFjdHVhbAorICogQHBhcmFtIHtqYXNtaW5lLlNwZWN9IHNwZWMKKyAqLworamFz
bWluZS5NYXRjaGVycyA9IGZ1bmN0aW9uKGVudiwgYWN0dWFsLCBzcGVjLCBvcHRfaXNOb3QpIHsK
KyAgdGhpcy5lbnYgPSBlbnY7CisgIHRoaXMuYWN0dWFsID0gYWN0dWFsOworICB0aGlzLnNwZWMg
PSBzcGVjOworICB0aGlzLmlzTm90ID0gb3B0X2lzTm90IHx8IGZhbHNlOworICB0aGlzLnJlcG9y
dFdhc0NhbGxlZF8gPSBmYWxzZTsKK307CisKKy8vIHRvZG86IEBkZXByZWNhdGVkIGFzIG9mIEph
c21pbmUgMC4xMSwgcmVtb3ZlIHNvb24gW3h3XQoramFzbWluZS5NYXRjaGVycy5wcCA9IGZ1bmN0
aW9uKHN0cikgeworICB0aHJvdyBuZXcgRXJyb3IoImphc21pbmUuTWF0Y2hlcnMucHAoKSBpcyBu
byBsb25nZXIgc3VwcG9ydGVkLCBwbGVhc2UgdXNlIGphc21pbmUucHAoKSBpbnN0ZWFkISIpOwor
fTsKKworLy8gdG9kbzogQGRlcHJlY2F0ZWQgRGVwcmVjYXRlZCBhcyBvZiBKYXNtaW5lIDAuMTAu
IFJld3JpdGUgeW91ciBjdXN0b20gbWF0Y2hlcnMgdG8gcmV0dXJuIHRydWUgb3IgZmFsc2UuIFt4
d10KK2phc21pbmUuTWF0Y2hlcnMucHJvdG90eXBlLnJlcG9ydCA9IGZ1bmN0aW9uKHJlc3VsdCwg
ZmFpbGluZ19tZXNzYWdlLCBkZXRhaWxzKSB7CisgIHRocm93IG5ldyBFcnJvcigiQXMgb2YgamFz
bWluZSAwLjExLCBjdXN0b20gbWF0Y2hlcnMgbXVzdCBiZSBpbXBsZW1lbnRlZCBkaWZmZXJlbnRs
eSAtLSBwbGVhc2Ugc2VlIGphc21pbmUgZG9jcyIpOworfTsKKworamFzbWluZS5NYXRjaGVycy53
cmFwSW50b18gPSBmdW5jdGlvbihwcm90b3R5cGUsIG1hdGNoZXJzQ2xhc3MpIHsKKyAgZm9yICh2
YXIgbWV0aG9kTmFtZSBpbiBwcm90b3R5cGUpIHsKKyAgICBpZiAobWV0aG9kTmFtZSA9PSAncmVw
b3J0JykgY29udGludWU7CisgICAgdmFyIG9yaWcgPSBwcm90b3R5cGVbbWV0aG9kTmFtZV07Cisg
ICAgbWF0Y2hlcnNDbGFzcy5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBqYXNtaW5lLk1hdGNoZXJz
Lm1hdGNoZXJGbl8obWV0aG9kTmFtZSwgb3JpZyk7CisgIH0KK307CisKK2phc21pbmUuTWF0Y2hl
cnMubWF0Y2hlckZuXyA9IGZ1bmN0aW9uKG1hdGNoZXJOYW1lLCBtYXRjaGVyRnVuY3Rpb24pIHsK
KyAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgIHZhciBtYXRjaGVyQXJncyA9IGphc21pbmUudXRp
bC5hcmdzVG9BcnJheShhcmd1bWVudHMpOworICAgIHZhciByZXN1bHQgPSBtYXRjaGVyRnVuY3Rp
b24uYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKworICAgIGlmICh0aGlzLmlzTm90KSB7CisgICAg
ICByZXN1bHQgPSAhcmVzdWx0OworICAgIH0KKworICAgIGlmICh0aGlzLnJlcG9ydFdhc0NhbGxl
ZF8pIHJldHVybiByZXN1bHQ7CisKKyAgICB2YXIgbWVzc2FnZTsKKyAgICBpZiAoIXJlc3VsdCkg
eworICAgICAgaWYgKHRoaXMubWVzc2FnZSkgeworICAgICAgICBtZXNzYWdlID0gdGhpcy5tZXNz
YWdlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgIGlmIChqYXNtaW5lLmlzQXJyYXlf
KG1lc3NhZ2UpKSB7CisgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2VbdGhpcy5pc05vdCA/IDEg
OiAwXTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIGVuZ2xpc2h5UHJl
ZGljYXRlID0gbWF0Y2hlck5hbWUucmVwbGFjZSgvW0EtWl0vZywgZnVuY3Rpb24ocykgeyByZXR1
cm4gJyAnICsgcy50b0xvd2VyQ2FzZSgpOyB9KTsKKyAgICAgICAgbWVzc2FnZSA9ICJFeHBlY3Rl
ZCAiICsgamFzbWluZS5wcCh0aGlzLmFjdHVhbCkgKyAodGhpcy5pc05vdCA/ICIgbm90ICIgOiAi
ICIpICsgZW5nbGlzaHlQcmVkaWNhdGU7CisgICAgICAgIGlmIChtYXRjaGVyQXJncy5sZW5ndGgg
PiAwKSB7CisgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXRjaGVyQXJncy5sZW5ndGg7
IGkrKykgeworICAgICAgICAgICAgaWYgKGkgPiAwKSBtZXNzYWdlICs9ICIsIjsKKyAgICAgICAg
ICAgIG1lc3NhZ2UgKz0gIiAiICsgamFzbWluZS5wcChtYXRjaGVyQXJnc1tpXSk7CisgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIG1lc3NhZ2UgKz0gIi4iOworICAgICAgfQorICAgIH0K
KyAgICB2YXIgZXhwZWN0YXRpb25SZXN1bHQgPSBuZXcgamFzbWluZS5FeHBlY3RhdGlvblJlc3Vs
dCh7CisgICAgICBtYXRjaGVyTmFtZTogbWF0Y2hlck5hbWUsCisgICAgICBwYXNzZWQ6IHJlc3Vs
dCwKKyAgICAgIGV4cGVjdGVkOiBtYXRjaGVyQXJncy5sZW5ndGggPiAxID8gbWF0Y2hlckFyZ3Mg
OiBtYXRjaGVyQXJnc1swXSwKKyAgICAgIGFjdHVhbDogdGhpcy5hY3R1YWwsCisgICAgICBtZXNz
YWdlOiBtZXNzYWdlCisgICAgfSk7CisgICAgdGhpcy5zcGVjLmFkZE1hdGNoZXJSZXN1bHQoZXhw
ZWN0YXRpb25SZXN1bHQpOworICAgIHJldHVybiBqYXNtaW5lLnVuZGVmaW5lZDsKKyAgfTsKK307
CisKKworCisKKy8qKgorICogdG9CZTogY29tcGFyZXMgdGhlIGFjdHVhbCB0byB0aGUgZXhwZWN0
ZWQgdXNpbmcgPT09CisgKiBAcGFyYW0gZXhwZWN0ZWQKKyAqLworamFzbWluZS5NYXRjaGVycy5w
cm90b3R5cGUudG9CZSA9IGZ1bmN0aW9uKGV4cGVjdGVkKSB7CisgIHJldHVybiB0aGlzLmFjdHVh
bCA9PT0gZXhwZWN0ZWQ7Cit9OworCisvKioKKyAqIHRvTm90QmU6IGNvbXBhcmVzIHRoZSBhY3R1
YWwgdG8gdGhlIGV4cGVjdGVkIHVzaW5nICE9PQorICogQHBhcmFtIGV4cGVjdGVkCisgKiBAZGVw
cmVjYXRlZCBhcyBvZiAxLjAuIFVzZSBub3QudG9CZSgpIGluc3RlYWQuCisgKi8KK2phc21pbmUu
TWF0Y2hlcnMucHJvdG90eXBlLnRvTm90QmUgPSBmdW5jdGlvbihleHBlY3RlZCkgeworICByZXR1
cm4gdGhpcy5hY3R1YWwgIT09IGV4cGVjdGVkOworfTsKKworLyoqCisgKiB0b0VxdWFsOiBjb21w
YXJlcyB0aGUgYWN0dWFsIHRvIHRoZSBleHBlY3RlZCB1c2luZyBjb21tb24gc2Vuc2UgZXF1YWxp
dHkuIEhhbmRsZXMgT2JqZWN0cywgQXJyYXlzLCBldGMuCisgKgorICogQHBhcmFtIGV4cGVjdGVk
CisgKi8KK2phc21pbmUuTWF0Y2hlcnMucHJvdG90eXBlLnRvRXF1YWwgPSBmdW5jdGlvbihleHBl
Y3RlZCkgeworICByZXR1cm4gdGhpcy5lbnYuZXF1YWxzXyh0aGlzLmFjdHVhbCwgZXhwZWN0ZWQp
OworfTsKKworLyoqCisgKiB0b05vdEVxdWFsOiBjb21wYXJlcyB0aGUgYWN0dWFsIHRvIHRoZSBl
eHBlY3RlZCB1c2luZyB0aGUgISBvZiBqYXNtaW5lLk1hdGNoZXJzLnRvRXF1YWwKKyAqIEBwYXJh
bSBleHBlY3RlZAorICogQGRlcHJlY2F0ZWQgYXMgb2YgMS4wLiBVc2Ugbm90LnRvTm90RXF1YWwo
KSBpbnN0ZWFkLgorICovCitqYXNtaW5lLk1hdGNoZXJzLnByb3RvdHlwZS50b05vdEVxdWFsID0g
ZnVuY3Rpb24oZXhwZWN0ZWQpIHsKKyAgcmV0dXJuICF0aGlzLmVudi5lcXVhbHNfKHRoaXMuYWN0
dWFsLCBleHBlY3RlZCk7Cit9OworCisvKioKKyAqIE1hdGNoZXIgdGhhdCBjb21wYXJlcyB0aGUg
YWN0dWFsIHRvIHRoZSBleHBlY3RlZCB1c2luZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbi4gIENvbnN0
cnVjdHMgYSBSZWdFeHAsIHNvIHRha2VzCisgKiBhIHBhdHRlcm4gb3IgYSBTdHJpbmcuCisgKgor
ICogQHBhcmFtIGV4cGVjdGVkCisgKi8KK2phc21pbmUuTWF0Y2hlcnMucHJvdG90eXBlLnRvTWF0
Y2ggPSBmdW5jdGlvbihleHBlY3RlZCkgeworICByZXR1cm4gbmV3IFJlZ0V4cChleHBlY3RlZCku
dGVzdCh0aGlzLmFjdHVhbCk7Cit9OworCisvKioKKyAqIE1hdGNoZXIgdGhhdCBjb21wYXJlcyB0
aGUgYWN0dWFsIHRvIHRoZSBleHBlY3RlZCB1c2luZyB0aGUgYm9vbGVhbiBpbnZlcnNlIG9mIGph
c21pbmUuTWF0Y2hlcnMudG9NYXRjaAorICogQHBhcmFtIGV4cGVjdGVkCisgKiBAZGVwcmVjYXRl
ZCBhcyBvZiAxLjAuIFVzZSBub3QudG9NYXRjaCgpIGluc3RlYWQuCisgKi8KK2phc21pbmUuTWF0
Y2hlcnMucHJvdG90eXBlLnRvTm90TWF0Y2ggPSBmdW5jdGlvbihleHBlY3RlZCkgeworICByZXR1
cm4gIShuZXcgUmVnRXhwKGV4cGVjdGVkKS50ZXN0KHRoaXMuYWN0dWFsKSk7Cit9OworCisvKioK
KyAqIE1hdGNoZXIgdGhhdCBjb21wYXJlcyB0aGUgYWN0dWFsIHRvIGphc21pbmUudW5kZWZpbmVk
LgorICovCitqYXNtaW5lLk1hdGNoZXJzLnByb3RvdHlwZS50b0JlRGVmaW5lZCA9IGZ1bmN0aW9u
KCkgeworICByZXR1cm4gKHRoaXMuYWN0dWFsICE9PSBqYXNtaW5lLnVuZGVmaW5lZCk7Cit9Owor
CisvKioKKyAqIE1hdGNoZXIgdGhhdCBjb21wYXJlcyB0aGUgYWN0dWFsIHRvIGphc21pbmUudW5k
ZWZpbmVkLgorICovCitqYXNtaW5lLk1hdGNoZXJzLnByb3RvdHlwZS50b0JlVW5kZWZpbmVkID0g
ZnVuY3Rpb24oKSB7CisgIHJldHVybiAodGhpcy5hY3R1YWwgPT09IGphc21pbmUudW5kZWZpbmVk
KTsKK307CisKKy8qKgorICogTWF0Y2hlciB0aGF0IGNvbXBhcmVzIHRoZSBhY3R1YWwgdG8gbnVs
bC4KKyAqLworamFzbWluZS5NYXRjaGVycy5wcm90b3R5cGUudG9CZU51bGwgPSBmdW5jdGlvbigp
IHsKKyAgcmV0dXJuICh0aGlzLmFjdHVhbCA9PT0gbnVsbCk7Cit9OworCisvKioKKyAqIE1hdGNo
ZXIgdGhhdCBib29sZWFuIG5vdC1ub3RzIHRoZSBhY3R1YWwuCisgKi8KK2phc21pbmUuTWF0Y2hl
cnMucHJvdG90eXBlLnRvQmVUcnV0aHkgPSBmdW5jdGlvbigpIHsKKyAgcmV0dXJuICEhdGhpcy5h
Y3R1YWw7Cit9OworCisKKy8qKgorICogTWF0Y2hlciB0aGF0IGJvb2xlYW4gbm90cyB0aGUgYWN0
dWFsLgorICovCitqYXNtaW5lLk1hdGNoZXJzLnByb3RvdHlwZS50b0JlRmFsc3kgPSBmdW5jdGlv
bigpIHsKKyAgcmV0dXJuICF0aGlzLmFjdHVhbDsKK307CisKKworLyoqCisgKiBNYXRjaGVyIHRo
YXQgY2hlY2tzIHRvIHNlZSBpZiB0aGUgYWN0dWFsLCBhIEphc21pbmUgc3B5LCB3YXMgY2FsbGVk
LgorICovCitqYXNtaW5lLk1hdGNoZXJzLnByb3RvdHlwZS50b0hhdmVCZWVuQ2FsbGVkID0gZnVu
Y3Rpb24oKSB7CisgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMCkgeworICAgIHRocm93IG5ldyBF
cnJvcigndG9IYXZlQmVlbkNhbGxlZCBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cywgdXNlIHRvSGF2
ZUJlZW5DYWxsZWRXaXRoJyk7CisgIH0KKworICBpZiAoIWphc21pbmUuaXNTcHkodGhpcy5hY3R1
YWwpKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBhIHNweSwgYnV0IGdvdCAnICsg
amFzbWluZS5wcCh0aGlzLmFjdHVhbCkgKyAnLicpOworICB9CisKKyAgdGhpcy5tZXNzYWdlID0g
ZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFsKKyAgICAgICJFeHBlY3RlZCBzcHkgIiArIHRoaXMu
YWN0dWFsLmlkZW50aXR5ICsgIiB0byBoYXZlIGJlZW4gY2FsbGVkLiIsCisgICAgICAiRXhwZWN0
ZWQgc3B5ICIgKyB0aGlzLmFjdHVhbC5pZGVudGl0eSArICIgbm90IHRvIGhhdmUgYmVlbiBjYWxs
ZWQuIgorICAgIF07CisgIH07CisKKyAgcmV0dXJuIHRoaXMuYWN0dWFsLndhc0NhbGxlZDsKK307
CisKKy8qKiBAZGVwcmVjYXRlZCBVc2UgZXhwZWN0KHh4eCkudG9IYXZlQmVlbkNhbGxlZCgpIGlu
c3RlYWQgKi8KK2phc21pbmUuTWF0Y2hlcnMucHJvdG90eXBlLndhc0NhbGxlZCA9IGphc21pbmUu
TWF0Y2hlcnMucHJvdG90eXBlLnRvSGF2ZUJlZW5DYWxsZWQ7CisKKy8qKgorICogTWF0Y2hlciB0
aGF0IGNoZWNrcyB0byBzZWUgaWYgdGhlIGFjdHVhbCwgYSBKYXNtaW5lIHNweSwgd2FzIG5vdCBj
YWxsZWQuCisgKgorICogQGRlcHJlY2F0ZWQgVXNlIGV4cGVjdCh4eHgpLm5vdC50b0hhdmVCZWVu
Q2FsbGVkKCkgaW5zdGVhZAorICovCitqYXNtaW5lLk1hdGNoZXJzLnByb3RvdHlwZS53YXNOb3RD
YWxsZWQgPSBmdW5jdGlvbigpIHsKKyAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAwKSB7CisgICAg
dGhyb3cgbmV3IEVycm9yKCd3YXNOb3RDYWxsZWQgZG9lcyBub3QgdGFrZSBhcmd1bWVudHMnKTsK
KyAgfQorCisgIGlmICghamFzbWluZS5pc1NweSh0aGlzLmFjdHVhbCkpIHsKKyAgICB0aHJvdyBu
ZXcgRXJyb3IoJ0V4cGVjdGVkIGEgc3B5LCBidXQgZ290ICcgKyBqYXNtaW5lLnBwKHRoaXMuYWN0
dWFsKSArICcuJyk7CisgIH0KKworICB0aGlzLm1lc3NhZ2UgPSBmdW5jdGlvbigpIHsKKyAgICBy
ZXR1cm4gWworICAgICAgIkV4cGVjdGVkIHNweSAiICsgdGhpcy5hY3R1YWwuaWRlbnRpdHkgKyAi
IHRvIG5vdCBoYXZlIGJlZW4gY2FsbGVkLiIsCisgICAgICAiRXhwZWN0ZWQgc3B5ICIgKyB0aGlz
LmFjdHVhbC5pZGVudGl0eSArICIgdG8gaGF2ZSBiZWVuIGNhbGxlZC4iCisgICAgXTsKKyAgfTsK
KworICByZXR1cm4gIXRoaXMuYWN0dWFsLndhc0NhbGxlZDsKK307CisKKy8qKgorICogTWF0Y2hl
ciB0aGF0IGNoZWNrcyB0byBzZWUgaWYgdGhlIGFjdHVhbCwgYSBKYXNtaW5lIHNweSwgd2FzIGNh
bGxlZCB3aXRoIGEgc2V0IG9mIHBhcmFtZXRlcnMuCisgKgorICogQGV4YW1wbGUKKyAqCisgKi8K
K2phc21pbmUuTWF0Y2hlcnMucHJvdG90eXBlLnRvSGF2ZUJlZW5DYWxsZWRXaXRoID0gZnVuY3Rp
b24oKSB7CisgIHZhciBleHBlY3RlZEFyZ3MgPSBqYXNtaW5lLnV0aWwuYXJnc1RvQXJyYXkoYXJn
dW1lbnRzKTsKKyAgaWYgKCFqYXNtaW5lLmlzU3B5KHRoaXMuYWN0dWFsKSkgeworICAgIHRocm93
IG5ldyBFcnJvcignRXhwZWN0ZWQgYSBzcHksIGJ1dCBnb3QgJyArIGphc21pbmUucHAodGhpcy5h
Y3R1YWwpICsgJy4nKTsKKyAgfQorICB0aGlzLm1lc3NhZ2UgPSBmdW5jdGlvbigpIHsKKyAgICBp
ZiAodGhpcy5hY3R1YWwuY2FsbENvdW50ID09PSAwKSB7CisgICAgICAvLyB0b2RvOiB3aGF0IHNo
b3VsZCB0aGUgZmFpbHVyZSBtZXNzYWdlIGZvciAubm90LnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCkg
YmU/IGlzIHRoaXMgcmlnaHQ/IHRlc3QgYmV0dGVyLiBbeHddCisgICAgICByZXR1cm4gWworICAg
ICAgICAiRXhwZWN0ZWQgc3B5ICIgKyB0aGlzLmFjdHVhbC5pZGVudGl0eSArICIgdG8gaGF2ZSBi
ZWVuIGNhbGxlZCB3aXRoICIgKyBqYXNtaW5lLnBwKGV4cGVjdGVkQXJncykgKyAiIGJ1dCBpdCB3
YXMgbmV2ZXIgY2FsbGVkLiIsCisgICAgICAgICJFeHBlY3RlZCBzcHkgIiArIHRoaXMuYWN0dWFs
LmlkZW50aXR5ICsgIiBub3QgdG8gaGF2ZSBiZWVuIGNhbGxlZCB3aXRoICIgKyBqYXNtaW5lLnBw
KGV4cGVjdGVkQXJncykgKyAiIGJ1dCBpdCB3YXMuIgorICAgICAgXTsKKyAgICB9IGVsc2Ugewor
ICAgICAgcmV0dXJuIFsKKyAgICAgICAgIkV4cGVjdGVkIHNweSAiICsgdGhpcy5hY3R1YWwuaWRl
bnRpdHkgKyAiIHRvIGhhdmUgYmVlbiBjYWxsZWQgd2l0aCAiICsgamFzbWluZS5wcChleHBlY3Rl
ZEFyZ3MpICsgIiBidXQgd2FzIGNhbGxlZCB3aXRoICIgKyBqYXNtaW5lLnBwKHRoaXMuYWN0dWFs
LmFyZ3NGb3JDYWxsKSwKKyAgICAgICAgIkV4cGVjdGVkIHNweSAiICsgdGhpcy5hY3R1YWwuaWRl
bnRpdHkgKyAiIG5vdCB0byBoYXZlIGJlZW4gY2FsbGVkIHdpdGggIiArIGphc21pbmUucHAoZXhw
ZWN0ZWRBcmdzKSArICIgYnV0IHdhcyBjYWxsZWQgd2l0aCAiICsgamFzbWluZS5wcCh0aGlzLmFj
dHVhbC5hcmdzRm9yQ2FsbCkKKyAgICAgIF07CisgICAgfQorICB9OworCisgIHJldHVybiB0aGlz
LmVudi5jb250YWluc18odGhpcy5hY3R1YWwuYXJnc0ZvckNhbGwsIGV4cGVjdGVkQXJncyk7Cit9
OworCisvKiogQGRlcHJlY2F0ZWQgVXNlIGV4cGVjdCh4eHgpLnRvSGF2ZUJlZW5DYWxsZWRXaXRo
KCkgaW5zdGVhZCAqLworamFzbWluZS5NYXRjaGVycy5wcm90b3R5cGUud2FzQ2FsbGVkV2l0aCA9
IGphc21pbmUuTWF0Y2hlcnMucHJvdG90eXBlLnRvSGF2ZUJlZW5DYWxsZWRXaXRoOworCisvKiog
QGRlcHJlY2F0ZWQgVXNlIGV4cGVjdCh4eHgpLm5vdC50b0hhdmVCZWVuQ2FsbGVkV2l0aCgpIGlu
c3RlYWQgKi8KK2phc21pbmUuTWF0Y2hlcnMucHJvdG90eXBlLndhc05vdENhbGxlZFdpdGggPSBm
dW5jdGlvbigpIHsKKyAgdmFyIGV4cGVjdGVkQXJncyA9IGphc21pbmUudXRpbC5hcmdzVG9BcnJh
eShhcmd1bWVudHMpOworICBpZiAoIWphc21pbmUuaXNTcHkodGhpcy5hY3R1YWwpKSB7CisgICAg
dGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBhIHNweSwgYnV0IGdvdCAnICsgamFzbWluZS5wcCh0
aGlzLmFjdHVhbCkgKyAnLicpOworICB9CisKKyAgdGhpcy5tZXNzYWdlID0gZnVuY3Rpb24oKSB7
CisgICAgcmV0dXJuIFsKKyAgICAgICJFeHBlY3RlZCBzcHkgbm90IHRvIGhhdmUgYmVlbiBjYWxs
ZWQgd2l0aCAiICsgamFzbWluZS5wcChleHBlY3RlZEFyZ3MpICsgIiBidXQgaXQgd2FzIiwKKyAg
ICAgICJFeHBlY3RlZCBzcHkgdG8gaGF2ZSBiZWVuIGNhbGxlZCB3aXRoICIgKyBqYXNtaW5lLnBw
KGV4cGVjdGVkQXJncykgKyAiIGJ1dCBpdCB3YXMiCisgICAgXTsKKyAgfTsKKworICByZXR1cm4g
IXRoaXMuZW52LmNvbnRhaW5zXyh0aGlzLmFjdHVhbC5hcmdzRm9yQ2FsbCwgZXhwZWN0ZWRBcmdz
KTsKK307CisKKy8qKgorICogTWF0Y2hlciB0aGF0IGNoZWNrcyB0aGF0IHRoZSBleHBlY3RlZCBp
dGVtIGlzIGFuIGVsZW1lbnQgaW4gdGhlIGFjdHVhbCBBcnJheS4KKyAqCisgKiBAcGFyYW0ge09i
amVjdH0gZXhwZWN0ZWQKKyAqLworamFzbWluZS5NYXRjaGVycy5wcm90b3R5cGUudG9Db250YWlu
ID0gZnVuY3Rpb24oZXhwZWN0ZWQpIHsKKyAgcmV0dXJuIHRoaXMuZW52LmNvbnRhaW5zXyh0aGlz
LmFjdHVhbCwgZXhwZWN0ZWQpOworfTsKKworLyoqCisgKiBNYXRjaGVyIHRoYXQgY2hlY2tzIHRo
YXQgdGhlIGV4cGVjdGVkIGl0ZW0gaXMgTk9UIGFuIGVsZW1lbnQgaW4gdGhlIGFjdHVhbCBBcnJh
eS4KKyAqCisgKiBAcGFyYW0ge09iamVjdH0gZXhwZWN0ZWQKKyAqIEBkZXByZWNhdGVkIGFzIG9m
IDEuMC4gVXNlIG5vdC50b05vdENvbnRhaW4oKSBpbnN0ZWFkLgorICovCitqYXNtaW5lLk1hdGNo
ZXJzLnByb3RvdHlwZS50b05vdENvbnRhaW4gPSBmdW5jdGlvbihleHBlY3RlZCkgeworICByZXR1
cm4gIXRoaXMuZW52LmNvbnRhaW5zXyh0aGlzLmFjdHVhbCwgZXhwZWN0ZWQpOworfTsKKworamFz
bWluZS5NYXRjaGVycy5wcm90b3R5cGUudG9CZUxlc3NUaGFuID0gZnVuY3Rpb24oZXhwZWN0ZWQp
IHsKKyAgcmV0dXJuIHRoaXMuYWN0dWFsIDwgZXhwZWN0ZWQ7Cit9OworCitqYXNtaW5lLk1hdGNo
ZXJzLnByb3RvdHlwZS50b0JlR3JlYXRlclRoYW4gPSBmdW5jdGlvbihleHBlY3RlZCkgeworICBy
ZXR1cm4gdGhpcy5hY3R1YWwgPiBleHBlY3RlZDsKK307CisKKy8qKgorICogTWF0Y2hlciB0aGF0
IGNoZWNrcyB0aGF0IHRoZSBleHBlY3RlZCBpdGVtIGlzIGVxdWFsIHRvIHRoZSBhY3R1YWwgaXRl
bQorICogdXAgdG8gYSBnaXZlbiBsZXZlbCBvZiBkZWNpbWFsIHByZWNpc2lvbiAoZGVmYXVsdCAy
KS4KKyAqCisgKiBAcGFyYW0ge051bWJlcn0gZXhwZWN0ZWQKKyAqIEBwYXJhbSB7TnVtYmVyfSBw
cmVjaXNpb24KKyAqLworamFzbWluZS5NYXRjaGVycy5wcm90b3R5cGUudG9CZUNsb3NlVG8gPSBm
dW5jdGlvbihleHBlY3RlZCwgcHJlY2lzaW9uKSB7CisgIGlmICghKHByZWNpc2lvbiA9PT0gMCkp
IHsKKyAgICBwcmVjaXNpb24gPSBwcmVjaXNpb24gfHwgMjsKKyAgfQorICB2YXIgbXVsdGlwbGll
ciA9IE1hdGgucG93KDEwLCBwcmVjaXNpb24pOworICB2YXIgYWN0dWFsID0gTWF0aC5yb3VuZCh0
aGlzLmFjdHVhbCAqIG11bHRpcGxpZXIpOworICBleHBlY3RlZCA9IE1hdGgucm91bmQoZXhwZWN0
ZWQgKiBtdWx0aXBsaWVyKTsKKyAgcmV0dXJuIGV4cGVjdGVkID09IGFjdHVhbDsKK307CisKKy8q
KgorICogTWF0Y2hlciB0aGF0IGNoZWNrcyB0aGF0IHRoZSBleHBlY3RlZCBleGNlcHRpb24gd2Fz
IHRocm93biBieSB0aGUgYWN0dWFsLgorICoKKyAqIEBwYXJhbSB7U3RyaW5nfSBleHBlY3RlZAor
ICovCitqYXNtaW5lLk1hdGNoZXJzLnByb3RvdHlwZS50b1Rocm93ID0gZnVuY3Rpb24oZXhwZWN0
ZWQpIHsKKyAgdmFyIHJlc3VsdCA9IGZhbHNlOworICB2YXIgZXhjZXB0aW9uOworICBpZiAodHlw
ZW9mIHRoaXMuYWN0dWFsICE9ICdmdW5jdGlvbicpIHsKKyAgICB0aHJvdyBuZXcgRXJyb3IoJ0Fj
dHVhbCBpcyBub3QgYSBmdW5jdGlvbicpOworICB9CisgIHRyeSB7CisgICAgdGhpcy5hY3R1YWwo
KTsKKyAgfSBjYXRjaCAoZSkgeworICAgIGV4Y2VwdGlvbiA9IGU7CisgIH0KKyAgaWYgKGV4Y2Vw
dGlvbikgeworICAgIHJlc3VsdCA9IChleHBlY3RlZCA9PT0gamFzbWluZS51bmRlZmluZWQgfHwg
dGhpcy5lbnYuZXF1YWxzXyhleGNlcHRpb24ubWVzc2FnZSB8fCBleGNlcHRpb24sIGV4cGVjdGVk
Lm1lc3NhZ2UgfHwgZXhwZWN0ZWQpKTsKKyAgfQorCisgIHZhciBub3QgPSB0aGlzLmlzTm90ID8g
Im5vdCAiIDogIiI7CisKKyAgdGhpcy5tZXNzYWdlID0gZnVuY3Rpb24oKSB7CisgICAgaWYgKGV4
Y2VwdGlvbiAmJiAoZXhwZWN0ZWQgPT09IGphc21pbmUudW5kZWZpbmVkIHx8ICF0aGlzLmVudi5l
cXVhbHNfKGV4Y2VwdGlvbi5tZXNzYWdlIHx8IGV4Y2VwdGlvbiwgZXhwZWN0ZWQubWVzc2FnZSB8
fCBleHBlY3RlZCkpKSB7CisgICAgICByZXR1cm4gWyJFeHBlY3RlZCBmdW5jdGlvbiAiICsgbm90
ICsgInRvIHRocm93IiwgZXhwZWN0ZWQgPyBleHBlY3RlZC5tZXNzYWdlIHx8IGV4cGVjdGVkIDog
ImFuIGV4Y2VwdGlvbiIsICIsIGJ1dCBpdCB0aHJldyIsIGV4Y2VwdGlvbi5tZXNzYWdlIHx8IGV4
Y2VwdGlvbl0uam9pbignICcpOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gIkV4cGVjdGVk
IGZ1bmN0aW9uIHRvIHRocm93IGFuIGV4Y2VwdGlvbi4iOworICAgIH0KKyAgfTsKKworICByZXR1
cm4gcmVzdWx0OworfTsKKworamFzbWluZS5NYXRjaGVycy5BbnkgPSBmdW5jdGlvbihleHBlY3Rl
ZENsYXNzKSB7CisgIHRoaXMuZXhwZWN0ZWRDbGFzcyA9IGV4cGVjdGVkQ2xhc3M7Cit9OworCitq
YXNtaW5lLk1hdGNoZXJzLkFueS5wcm90b3R5cGUubWF0Y2hlcyA9IGZ1bmN0aW9uKG90aGVyKSB7
CisgIGlmICh0aGlzLmV4cGVjdGVkQ2xhc3MgPT0gU3RyaW5nKSB7CisgICAgcmV0dXJuIHR5cGVv
ZiBvdGhlciA9PSAnc3RyaW5nJyB8fCBvdGhlciBpbnN0YW5jZW9mIFN0cmluZzsKKyAgfQorCisg
IGlmICh0aGlzLmV4cGVjdGVkQ2xhc3MgPT0gTnVtYmVyKSB7CisgICAgcmV0dXJuIHR5cGVvZiBv
dGhlciA9PSAnbnVtYmVyJyB8fCBvdGhlciBpbnN0YW5jZW9mIE51bWJlcjsKKyAgfQorCisgIGlm
ICh0aGlzLmV4cGVjdGVkQ2xhc3MgPT0gRnVuY3Rpb24pIHsKKyAgICByZXR1cm4gdHlwZW9mIG90
aGVyID09ICdmdW5jdGlvbicgfHwgb3RoZXIgaW5zdGFuY2VvZiBGdW5jdGlvbjsKKyAgfQorCisg
IGlmICh0aGlzLmV4cGVjdGVkQ2xhc3MgPT0gT2JqZWN0KSB7CisgICAgcmV0dXJuIHR5cGVvZiBv
dGhlciA9PSAnb2JqZWN0JzsKKyAgfQorCisgIHJldHVybiBvdGhlciBpbnN0YW5jZW9mIHRoaXMu
ZXhwZWN0ZWRDbGFzczsKK307CisKK2phc21pbmUuTWF0Y2hlcnMuQW55LnByb3RvdHlwZS50b1N0
cmluZyA9IGZ1bmN0aW9uKCkgeworICByZXR1cm4gJzxqYXNtaW5lLmFueSgnICsgdGhpcy5leHBl
Y3RlZENsYXNzICsgJyk+JzsKK307CisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKi8KK2phc21p
bmUuTXVsdGlSZXBvcnRlciA9IGZ1bmN0aW9uKCkgeworICB0aGlzLnN1YlJlcG9ydGVyc18gPSBb
XTsKK307CitqYXNtaW5lLnV0aWwuaW5oZXJpdChqYXNtaW5lLk11bHRpUmVwb3J0ZXIsIGphc21p
bmUuUmVwb3J0ZXIpOworCitqYXNtaW5lLk11bHRpUmVwb3J0ZXIucHJvdG90eXBlLmFkZFJlcG9y
dGVyID0gZnVuY3Rpb24ocmVwb3J0ZXIpIHsKKyAgdGhpcy5zdWJSZXBvcnRlcnNfLnB1c2gocmVw
b3J0ZXIpOworfTsKKworKGZ1bmN0aW9uKCkgeworICB2YXIgZnVuY3Rpb25OYW1lcyA9IFsKKyAg
ICAicmVwb3J0UnVubmVyU3RhcnRpbmciLAorICAgICJyZXBvcnRSdW5uZXJSZXN1bHRzIiwKKyAg
ICAicmVwb3J0U3VpdGVSZXN1bHRzIiwKKyAgICAicmVwb3J0U3BlY1N0YXJ0aW5nIiwKKyAgICAi
cmVwb3J0U3BlY1Jlc3VsdHMiLAorICAgICJsb2ciCisgIF07CisgIGZvciAodmFyIGkgPSAwOyBp
IDwgZnVuY3Rpb25OYW1lcy5sZW5ndGg7IGkrKykgeworICAgIHZhciBmdW5jdGlvbk5hbWUgPSBm
dW5jdGlvbk5hbWVzW2ldOworICAgIGphc21pbmUuTXVsdGlSZXBvcnRlci5wcm90b3R5cGVbZnVu
Y3Rpb25OYW1lXSA9IChmdW5jdGlvbihmdW5jdGlvbk5hbWUpIHsKKyAgICAgIHJldHVybiBmdW5j
dGlvbigpIHsKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLnN1YlJlcG9ydGVyc18u
bGVuZ3RoOyBqKyspIHsKKyAgICAgICAgICB2YXIgc3ViUmVwb3J0ZXIgPSB0aGlzLnN1YlJlcG9y
dGVyc19bal07CisgICAgICAgICAgaWYgKHN1YlJlcG9ydGVyW2Z1bmN0aW9uTmFtZV0pIHsKKyAg
ICAgICAgICAgIHN1YlJlcG9ydGVyW2Z1bmN0aW9uTmFtZV0uYXBwbHkoc3ViUmVwb3J0ZXIsIGFy
Z3VtZW50cyk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9OworICAgIH0pKGZ1bmN0
aW9uTmFtZSk7CisgIH0KK30pKCk7CisvKioKKyAqIEhvbGRzIHJlc3VsdHMgZm9yIGEgc2V0IG9m
IEphc21pbmUgc3BlYy4gQWxsb3dzIGZvciB0aGUgcmVzdWx0cyBhcnJheSB0byBob2xkIGFub3Ro
ZXIgamFzbWluZS5OZXN0ZWRSZXN1bHRzCisgKgorICogQGNvbnN0cnVjdG9yCisgKi8KK2phc21p
bmUuTmVzdGVkUmVzdWx0cyA9IGZ1bmN0aW9uKCkgeworICAvKioKKyAgICogVGhlIHRvdGFsIGNv
dW50IG9mIHJlc3VsdHMKKyAgICovCisgIHRoaXMudG90YWxDb3VudCA9IDA7CisgIC8qKgorICAg
KiBOdW1iZXIgb2YgcGFzc2VkIHJlc3VsdHMKKyAgICovCisgIHRoaXMucGFzc2VkQ291bnQgPSAw
OworICAvKioKKyAgICogTnVtYmVyIG9mIGZhaWxlZCByZXN1bHRzCisgICAqLworICB0aGlzLmZh
aWxlZENvdW50ID0gMDsKKyAgLyoqCisgICAqIFdhcyB0aGlzIHN1aXRlL3NwZWMgc2tpcHBlZD8K
KyAgICovCisgIHRoaXMuc2tpcHBlZCA9IGZhbHNlOworICAvKioKKyAgICogQGlnbm9yZQorICAg
Ki8KKyAgdGhpcy5pdGVtc18gPSBbXTsKK307CisKKy8qKgorICogUm9sbCB1cCB0aGUgcmVzdWx0
IGNvdW50cy4KKyAqCisgKiBAcGFyYW0gcmVzdWx0CisgKi8KK2phc21pbmUuTmVzdGVkUmVzdWx0
cy5wcm90b3R5cGUucm9sbHVwQ291bnRzID0gZnVuY3Rpb24ocmVzdWx0KSB7CisgIHRoaXMudG90
YWxDb3VudCArPSByZXN1bHQudG90YWxDb3VudDsKKyAgdGhpcy5wYXNzZWRDb3VudCArPSByZXN1
bHQucGFzc2VkQ291bnQ7CisgIHRoaXMuZmFpbGVkQ291bnQgKz0gcmVzdWx0LmZhaWxlZENvdW50
OworfTsKKworLyoqCisgKiBBZGRzIGEgbG9nIG1lc3NhZ2UuCisgKiBAcGFyYW0gdmFsdWVzIEFy
cmF5IG9mIG1lc3NhZ2UgcGFydHMgd2hpY2ggd2lsbCBiZSBjb25jYXRlbmF0ZWQgbGF0ZXIuCisg
Ki8KK2phc21pbmUuTmVzdGVkUmVzdWx0cy5wcm90b3R5cGUubG9nID0gZnVuY3Rpb24odmFsdWVz
KSB7CisgIHRoaXMuaXRlbXNfLnB1c2gobmV3IGphc21pbmUuTWVzc2FnZVJlc3VsdCh2YWx1ZXMp
KTsKK307CisKKy8qKgorICogR2V0dGVyIGZvciB0aGUgcmVzdWx0czogbWVzc2FnZSAmIHJlc3Vs
dHMuCisgKi8KK2phc21pbmUuTmVzdGVkUmVzdWx0cy5wcm90b3R5cGUuZ2V0SXRlbXMgPSBmdW5j
dGlvbigpIHsKKyAgcmV0dXJuIHRoaXMuaXRlbXNfOworfTsKKworLyoqCisgKiBBZGRzIGEgcmVz
dWx0LCB0cmFja2luZyBjb3VudHMgKHRvdGFsLCBwYXNzZWQsICYgZmFpbGVkKQorICogQHBhcmFt
IHtqYXNtaW5lLkV4cGVjdGF0aW9uUmVzdWx0fGphc21pbmUuTmVzdGVkUmVzdWx0c30gcmVzdWx0
CisgKi8KK2phc21pbmUuTmVzdGVkUmVzdWx0cy5wcm90b3R5cGUuYWRkUmVzdWx0ID0gZnVuY3Rp
b24ocmVzdWx0KSB7CisgIGlmIChyZXN1bHQudHlwZSAhPSAnbG9nJykgeworICAgIGlmIChyZXN1
bHQuaXRlbXNfKSB7CisgICAgICB0aGlzLnJvbGx1cENvdW50cyhyZXN1bHQpOworICAgIH0gZWxz
ZSB7CisgICAgICB0aGlzLnRvdGFsQ291bnQrKzsKKyAgICAgIGlmIChyZXN1bHQucGFzc2VkKCkp
IHsKKyAgICAgICAgdGhpcy5wYXNzZWRDb3VudCsrOworICAgICAgfSBlbHNlIHsKKyAgICAgICAg
dGhpcy5mYWlsZWRDb3VudCsrOworICAgICAgfQorICAgIH0KKyAgfQorICB0aGlzLml0ZW1zXy5w
dXNoKHJlc3VsdCk7Cit9OworCisvKioKKyAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIDxi
PmV2ZXJ5dGhpbmc8L2I+IGJlbG93IHBhc3NlZAorICovCitqYXNtaW5lLk5lc3RlZFJlc3VsdHMu
cHJvdG90eXBlLnBhc3NlZCA9IGZ1bmN0aW9uKCkgeworICByZXR1cm4gdGhpcy5wYXNzZWRDb3Vu
dCA9PT0gdGhpcy50b3RhbENvdW50OworfTsKKy8qKgorICogQmFzZSBjbGFzcyBmb3IgcHJldHR5
IHByaW50aW5nIGZvciBleHBlY3RhdGlvbiByZXN1bHRzLgorICovCitqYXNtaW5lLlByZXR0eVBy
aW50ZXIgPSBmdW5jdGlvbigpIHsKKyAgdGhpcy5wcE5lc3RMZXZlbF8gPSAwOworfTsKKworLyoq
CisgKiBGb3JtYXRzIGEgdmFsdWUgaW4gYSBuaWNlLCBodW1hbi1yZWFkYWJsZSBzdHJpbmcuCisg
KgorICogQHBhcmFtIHZhbHVlCisgKi8KK2phc21pbmUuUHJldHR5UHJpbnRlci5wcm90b3R5cGUu
Zm9ybWF0ID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgaWYgKHRoaXMucHBOZXN0TGV2ZWxfID4gNDAp
IHsKKyAgICB0aHJvdyBuZXcgRXJyb3IoJ2phc21pbmUuUHJldHR5UHJpbnRlcjogZm9ybWF0KCkg
bmVzdGVkIHRvbyBkZWVwbHkhJyk7CisgIH0KKworICB0aGlzLnBwTmVzdExldmVsXysrOworICB0
cnkgeworICAgIGlmICh2YWx1ZSA9PT0gamFzbWluZS51bmRlZmluZWQpIHsKKyAgICAgIHRoaXMu
ZW1pdFNjYWxhcigndW5kZWZpbmVkJyk7CisgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gbnVsbCkg
eworICAgICAgdGhpcy5lbWl0U2NhbGFyKCdudWxsJyk7CisgICAgfSBlbHNlIGlmICh2YWx1ZSA9
PT0gamFzbWluZS5nZXRHbG9iYWwoKSkgeworICAgICAgdGhpcy5lbWl0U2NhbGFyKCc8Z2xvYmFs
PicpOworICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBqYXNtaW5lLk1hdGNoZXJzLkFu
eSkgeworICAgICAgdGhpcy5lbWl0U2NhbGFyKHZhbHVlLnRvU3RyaW5nKCkpOworICAgIH0gZWxz
ZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgeworICAgICAgdGhpcy5lbWl0U3RyaW5n
KHZhbHVlKTsKKyAgICB9IGVsc2UgaWYgKGphc21pbmUuaXNTcHkodmFsdWUpKSB7CisgICAgICB0
aGlzLmVtaXRTY2FsYXIoInNweSBvbiAiICsgdmFsdWUuaWRlbnRpdHkpOworICAgIH0gZWxzZSBp
ZiAodmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHsKKyAgICAgIHRoaXMuZW1pdFNjYWxhcih2YWx1
ZS50b1N0cmluZygpKTsKKyAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9u
JykgeworICAgICAgdGhpcy5lbWl0U2NhbGFyKCdGdW5jdGlvbicpOworICAgIH0gZWxzZSBpZiAo
dHlwZW9mIHZhbHVlLm5vZGVUeXBlID09PSAnbnVtYmVyJykgeworICAgICAgdGhpcy5lbWl0U2Nh
bGFyKCdIVE1MTm9kZScpOworICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7
CisgICAgICB0aGlzLmVtaXRTY2FsYXIoJ0RhdGUoJyArIHZhbHVlICsgJyknKTsKKyAgICB9IGVs
c2UgaWYgKHZhbHVlLl9fSmFzbWluZV9iZWVuX2hlcmVfYmVmb3JlX18pIHsKKyAgICAgIHRoaXMu
ZW1pdFNjYWxhcignPGNpcmN1bGFyIHJlZmVyZW5jZTogJyArIChqYXNtaW5lLmlzQXJyYXlfKHZh
bHVlKSA/ICdBcnJheScgOiAnT2JqZWN0JykgKyAnPicpOworICAgIH0gZWxzZSBpZiAoamFzbWlu
ZS5pc0FycmF5Xyh2YWx1ZSkgfHwgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnKSB7CisgICAgICB2
YWx1ZS5fX0phc21pbmVfYmVlbl9oZXJlX2JlZm9yZV9fID0gdHJ1ZTsKKyAgICAgIGlmIChqYXNt
aW5lLmlzQXJyYXlfKHZhbHVlKSkgeworICAgICAgICB0aGlzLmVtaXRBcnJheSh2YWx1ZSk7Cisg
ICAgICB9IGVsc2UgeworICAgICAgICB0aGlzLmVtaXRPYmplY3QodmFsdWUpOworICAgICAgfQor
ICAgICAgZGVsZXRlIHZhbHVlLl9fSmFzbWluZV9iZWVuX2hlcmVfYmVmb3JlX187CisgICAgfSBl
bHNlIHsKKyAgICAgIHRoaXMuZW1pdFNjYWxhcih2YWx1ZS50b1N0cmluZygpKTsKKyAgICB9Cisg
IH0gZmluYWxseSB7CisgICAgdGhpcy5wcE5lc3RMZXZlbF8tLTsKKyAgfQorfTsKKworamFzbWlu
ZS5QcmV0dHlQcmludGVyLnByb3RvdHlwZS5pdGVyYXRlT2JqZWN0ID0gZnVuY3Rpb24ob2JqLCBm
bikgeworICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBvYmopIHsKKyAgICBpZiAocHJvcGVydHkgPT0g
J19fSmFzbWluZV9iZWVuX2hlcmVfYmVmb3JlX18nKSBjb250aW51ZTsKKyAgICBmbihwcm9wZXJ0
eSwgb2JqLl9fbG9va3VwR2V0dGVyX18gPyAob2JqLl9fbG9va3VwR2V0dGVyX18ocHJvcGVydHkp
ICE9PSBqYXNtaW5lLnVuZGVmaW5lZCAmJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb2JqLl9fbG9va3VwR2V0dGVyX18ocHJvcGVydHkpICE9PSBudWxsKSA6IGZh
bHNlKTsKKyAgfQorfTsKKworamFzbWluZS5QcmV0dHlQcmludGVyLnByb3RvdHlwZS5lbWl0QXJy
YXkgPSBqYXNtaW5lLnVuaW1wbGVtZW50ZWRNZXRob2RfOworamFzbWluZS5QcmV0dHlQcmludGVy
LnByb3RvdHlwZS5lbWl0T2JqZWN0ID0gamFzbWluZS51bmltcGxlbWVudGVkTWV0aG9kXzsKK2ph
c21pbmUuUHJldHR5UHJpbnRlci5wcm90b3R5cGUuZW1pdFNjYWxhciA9IGphc21pbmUudW5pbXBs
ZW1lbnRlZE1ldGhvZF87CitqYXNtaW5lLlByZXR0eVByaW50ZXIucHJvdG90eXBlLmVtaXRTdHJp
bmcgPSBqYXNtaW5lLnVuaW1wbGVtZW50ZWRNZXRob2RfOworCitqYXNtaW5lLlN0cmluZ1ByZXR0
eVByaW50ZXIgPSBmdW5jdGlvbigpIHsKKyAgamFzbWluZS5QcmV0dHlQcmludGVyLmNhbGwodGhp
cyk7CisKKyAgdGhpcy5zdHJpbmcgPSAnJzsKK307CitqYXNtaW5lLnV0aWwuaW5oZXJpdChqYXNt
aW5lLlN0cmluZ1ByZXR0eVByaW50ZXIsIGphc21pbmUuUHJldHR5UHJpbnRlcik7CisKK2phc21p
bmUuU3RyaW5nUHJldHR5UHJpbnRlci5wcm90b3R5cGUuZW1pdFNjYWxhciA9IGZ1bmN0aW9uKHZh
bHVlKSB7CisgIHRoaXMuYXBwZW5kKHZhbHVlKTsKK307CisKK2phc21pbmUuU3RyaW5nUHJldHR5
UHJpbnRlci5wcm90b3R5cGUuZW1pdFN0cmluZyA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgIHRoaXMu
YXBwZW5kKCInIiArIHZhbHVlICsgIiciKTsKK307CisKK2phc21pbmUuU3RyaW5nUHJldHR5UHJp
bnRlci5wcm90b3R5cGUuZW1pdEFycmF5ID0gZnVuY3Rpb24oYXJyYXkpIHsKKyAgdGhpcy5hcHBl
bmQoJ1sgJyk7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHsKKyAg
ICBpZiAoaSA+IDApIHsKKyAgICAgIHRoaXMuYXBwZW5kKCcsICcpOworICAgIH0KKyAgICB0aGlz
LmZvcm1hdChhcnJheVtpXSk7CisgIH0KKyAgdGhpcy5hcHBlbmQoJyBdJyk7Cit9OworCitqYXNt
aW5lLlN0cmluZ1ByZXR0eVByaW50ZXIucHJvdG90eXBlLmVtaXRPYmplY3QgPSBmdW5jdGlvbihv
YmopIHsKKyAgdmFyIHNlbGYgPSB0aGlzOworICB0aGlzLmFwcGVuZCgneyAnKTsKKyAgdmFyIGZp
cnN0ID0gdHJ1ZTsKKworICB0aGlzLml0ZXJhdGVPYmplY3Qob2JqLCBmdW5jdGlvbihwcm9wZXJ0
eSwgaXNHZXR0ZXIpIHsKKyAgICBpZiAoZmlyc3QpIHsKKyAgICAgIGZpcnN0ID0gZmFsc2U7Cisg
ICAgfSBlbHNlIHsKKyAgICAgIHNlbGYuYXBwZW5kKCcsICcpOworICAgIH0KKworICAgIHNlbGYu
YXBwZW5kKHByb3BlcnR5KTsKKyAgICBzZWxmLmFwcGVuZCgnIDogJyk7CisgICAgaWYgKGlzR2V0
dGVyKSB7CisgICAgICBzZWxmLmFwcGVuZCgnPGdldHRlcj4nKTsKKyAgICB9IGVsc2UgeworICAg
ICAgc2VsZi5mb3JtYXQob2JqW3Byb3BlcnR5XSk7CisgICAgfQorICB9KTsKKworICB0aGlzLmFw
cGVuZCgnIH0nKTsKK307CisKK2phc21pbmUuU3RyaW5nUHJldHR5UHJpbnRlci5wcm90b3R5cGUu
YXBwZW5kID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgdGhpcy5zdHJpbmcgKz0gdmFsdWU7Cit9Owor
amFzbWluZS5RdWV1ZSA9IGZ1bmN0aW9uKGVudikgeworICB0aGlzLmVudiA9IGVudjsKKyAgdGhp
cy5ibG9ja3MgPSBbXTsKKyAgdGhpcy5ydW5uaW5nID0gZmFsc2U7CisgIHRoaXMuaW5kZXggPSAw
OworICB0aGlzLm9mZnNldCA9IDA7CisgIHRoaXMuYWJvcnQgPSBmYWxzZTsKK307CisKK2phc21p
bmUuUXVldWUucHJvdG90eXBlLmFkZEJlZm9yZSA9IGZ1bmN0aW9uKGJsb2NrKSB7CisgIHRoaXMu
YmxvY2tzLnVuc2hpZnQoYmxvY2spOworfTsKKworamFzbWluZS5RdWV1ZS5wcm90b3R5cGUuYWRk
ID0gZnVuY3Rpb24oYmxvY2spIHsKKyAgdGhpcy5ibG9ja3MucHVzaChibG9jayk7Cit9OworCitq
YXNtaW5lLlF1ZXVlLnByb3RvdHlwZS5pbnNlcnROZXh0ID0gZnVuY3Rpb24oYmxvY2spIHsKKyAg
dGhpcy5ibG9ja3Muc3BsaWNlKCh0aGlzLmluZGV4ICsgdGhpcy5vZmZzZXQgKyAxKSwgMCwgYmxv
Y2spOworICB0aGlzLm9mZnNldCsrOworfTsKKworamFzbWluZS5RdWV1ZS5wcm90b3R5cGUuc3Rh
cnQgPSBmdW5jdGlvbihvbkNvbXBsZXRlKSB7CisgIHRoaXMucnVubmluZyA9IHRydWU7CisgIHRo
aXMub25Db21wbGV0ZSA9IG9uQ29tcGxldGU7CisgIHRoaXMubmV4dF8oKTsKK307CisKK2phc21p
bmUuUXVldWUucHJvdG90eXBlLmlzUnVubmluZyA9IGZ1bmN0aW9uKCkgeworICByZXR1cm4gdGhp
cy5ydW5uaW5nOworfTsKKworamFzbWluZS5RdWV1ZS5MT09QX0RPTlRfUkVDVVJTRSA9IHRydWU7
CisKK2phc21pbmUuUXVldWUucHJvdG90eXBlLm5leHRfID0gZnVuY3Rpb24oKSB7CisgIHZhciBz
ZWxmID0gdGhpczsKKyAgdmFyIGdvQWdhaW4gPSB0cnVlOworCisgIHdoaWxlIChnb0FnYWluKSB7
CisgICAgZ29BZ2FpbiA9IGZhbHNlOworICAgIAorICAgIGlmIChzZWxmLmluZGV4IDwgc2VsZi5i
bG9ja3MubGVuZ3RoICYmICF0aGlzLmFib3J0KSB7CisgICAgICB2YXIgY2FsbGVkU3luY2hyb25v
dXNseSA9IHRydWU7CisgICAgICB2YXIgY29tcGxldGVkU3luY2hyb25vdXNseSA9IGZhbHNlOwor
CisgICAgICB2YXIgb25Db21wbGV0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKGphc21p
bmUuUXVldWUuTE9PUF9ET05UX1JFQ1VSU0UgJiYgY2FsbGVkU3luY2hyb25vdXNseSkgeworICAg
ICAgICAgIGNvbXBsZXRlZFN5bmNocm9ub3VzbHkgPSB0cnVlOworICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChzZWxmLmJsb2Nrc1tzZWxmLmluZGV4XS5hYm9ydCkg
eworICAgICAgICAgIHNlbGYuYWJvcnQgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgc2Vs
Zi5vZmZzZXQgPSAwOworICAgICAgICBzZWxmLmluZGV4Kys7CisKKyAgICAgICAgdmFyIG5vdyA9
IG5ldyBEYXRlKCkuZ2V0VGltZSgpOworICAgICAgICBpZiAoc2VsZi5lbnYudXBkYXRlSW50ZXJ2
YWwgJiYgbm93IC0gc2VsZi5lbnYubGFzdFVwZGF0ZSA+IHNlbGYuZW52LnVwZGF0ZUludGVydmFs
KSB7CisgICAgICAgICAgc2VsZi5lbnYubGFzdFVwZGF0ZSA9IG5vdzsKKyAgICAgICAgICBzZWxm
LmVudi5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgc2VsZi5uZXh0XygpOwor
ICAgICAgICAgIH0sIDApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGlmIChqYXNtaW5l
LlF1ZXVlLkxPT1BfRE9OVF9SRUNVUlNFICYmIGNvbXBsZXRlZFN5bmNocm9ub3VzbHkpIHsKKyAg
ICAgICAgICAgIGdvQWdhaW4gPSB0cnVlOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBzZWxmLm5leHRfKCk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9OworICAgICAg
c2VsZi5ibG9ja3Nbc2VsZi5pbmRleF0uZXhlY3V0ZShvbkNvbXBsZXRlKTsKKworICAgICAgY2Fs
bGVkU3luY2hyb25vdXNseSA9IGZhbHNlOworICAgICAgaWYgKGNvbXBsZXRlZFN5bmNocm9ub3Vz
bHkpIHsKKyAgICAgICAgb25Db21wbGV0ZSgpOworICAgICAgfQorICAgICAgCisgICAgfSBlbHNl
IHsKKyAgICAgIHNlbGYucnVubmluZyA9IGZhbHNlOworICAgICAgaWYgKHNlbGYub25Db21wbGV0
ZSkgeworICAgICAgICBzZWxmLm9uQ29tcGxldGUoKTsKKyAgICAgIH0KKyAgICB9CisgIH0KK307
CisKK2phc21pbmUuUXVldWUucHJvdG90eXBlLnJlc3VsdHMgPSBmdW5jdGlvbigpIHsKKyAgdmFy
IHJlc3VsdHMgPSBuZXcgamFzbWluZS5OZXN0ZWRSZXN1bHRzKCk7CisgIGZvciAodmFyIGkgPSAw
OyBpIDwgdGhpcy5ibG9ja3MubGVuZ3RoOyBpKyspIHsKKyAgICBpZiAodGhpcy5ibG9ja3NbaV0u
cmVzdWx0cykgeworICAgICAgcmVzdWx0cy5hZGRSZXN1bHQodGhpcy5ibG9ja3NbaV0ucmVzdWx0
cygpKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHJlc3VsdHM7Cit9OworCisKKy8qKgorICogUnVu
bmVyCisgKgorICogQGNvbnN0cnVjdG9yCisgKiBAcGFyYW0ge2phc21pbmUuRW52fSBlbnYKKyAq
LworamFzbWluZS5SdW5uZXIgPSBmdW5jdGlvbihlbnYpIHsKKyAgdmFyIHNlbGYgPSB0aGlzOwor
ICBzZWxmLmVudiA9IGVudjsKKyAgc2VsZi5xdWV1ZSA9IG5ldyBqYXNtaW5lLlF1ZXVlKGVudik7
CisgIHNlbGYuYmVmb3JlXyA9IFtdOworICBzZWxmLmFmdGVyXyA9IFtdOworICBzZWxmLnN1aXRl
c18gPSBbXTsKK307CisKK2phc21pbmUuUnVubmVyLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rp
b24oKSB7CisgIHZhciBzZWxmID0gdGhpczsKKyAgaWYgKHNlbGYuZW52LnJlcG9ydGVyLnJlcG9y
dFJ1bm5lclN0YXJ0aW5nKSB7CisgICAgc2VsZi5lbnYucmVwb3J0ZXIucmVwb3J0UnVubmVyU3Rh
cnRpbmcodGhpcyk7CisgIH0KKyAgc2VsZi5xdWV1ZS5zdGFydChmdW5jdGlvbiAoKSB7CisgICAg
c2VsZi5maW5pc2hDYWxsYmFjaygpOworICB9KTsKK307CisKK2phc21pbmUuUnVubmVyLnByb3Rv
dHlwZS5iZWZvcmVFYWNoID0gZnVuY3Rpb24oYmVmb3JlRWFjaEZ1bmN0aW9uKSB7CisgIGJlZm9y
ZUVhY2hGdW5jdGlvbi50eXBlTmFtZSA9ICdiZWZvcmVFYWNoJzsKKyAgdGhpcy5iZWZvcmVfLnNw
bGljZSgwLDAsYmVmb3JlRWFjaEZ1bmN0aW9uKTsKK307CisKK2phc21pbmUuUnVubmVyLnByb3Rv
dHlwZS5hZnRlckVhY2ggPSBmdW5jdGlvbihhZnRlckVhY2hGdW5jdGlvbikgeworICBhZnRlckVh
Y2hGdW5jdGlvbi50eXBlTmFtZSA9ICdhZnRlckVhY2gnOworICB0aGlzLmFmdGVyXy5zcGxpY2Uo
MCwwLGFmdGVyRWFjaEZ1bmN0aW9uKTsKK307CisKKworamFzbWluZS5SdW5uZXIucHJvdG90eXBl
LmZpbmlzaENhbGxiYWNrID0gZnVuY3Rpb24oKSB7CisgIHRoaXMuZW52LnJlcG9ydGVyLnJlcG9y
dFJ1bm5lclJlc3VsdHModGhpcyk7Cit9OworCitqYXNtaW5lLlJ1bm5lci5wcm90b3R5cGUuYWRk
U3VpdGUgPSBmdW5jdGlvbihzdWl0ZSkgeworICB0aGlzLnN1aXRlc18ucHVzaChzdWl0ZSk7Cit9
OworCitqYXNtaW5lLlJ1bm5lci5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24oYmxvY2spIHsKKyAg
aWYgKGJsb2NrIGluc3RhbmNlb2YgamFzbWluZS5TdWl0ZSkgeworICAgIHRoaXMuYWRkU3VpdGUo
YmxvY2spOworICB9CisgIHRoaXMucXVldWUuYWRkKGJsb2NrKTsKK307CisKK2phc21pbmUuUnVu
bmVyLnByb3RvdHlwZS5zcGVjcyA9IGZ1bmN0aW9uICgpIHsKKyAgdmFyIHN1aXRlcyA9IHRoaXMu
c3VpdGVzKCk7CisgIHZhciBzcGVjcyA9IFtdOworICBmb3IgKHZhciBpID0gMDsgaSA8IHN1aXRl
cy5sZW5ndGg7IGkrKykgeworICAgIHNwZWNzID0gc3BlY3MuY29uY2F0KHN1aXRlc1tpXS5zcGVj
cygpKTsKKyAgfQorICByZXR1cm4gc3BlY3M7Cit9OworCitqYXNtaW5lLlJ1bm5lci5wcm90b3R5
cGUuc3VpdGVzID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiB0aGlzLnN1aXRlc187Cit9OworCitq
YXNtaW5lLlJ1bm5lci5wcm90b3R5cGUudG9wTGV2ZWxTdWl0ZXMgPSBmdW5jdGlvbigpIHsKKyAg
dmFyIHRvcExldmVsU3VpdGVzID0gW107CisgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zdWl0
ZXNfLmxlbmd0aDsgaSsrKSB7CisgICAgaWYgKCF0aGlzLnN1aXRlc19baV0ucGFyZW50U3VpdGUp
IHsKKyAgICAgIHRvcExldmVsU3VpdGVzLnB1c2godGhpcy5zdWl0ZXNfW2ldKTsKKyAgICB9Cisg
IH0KKyAgcmV0dXJuIHRvcExldmVsU3VpdGVzOworfTsKKworamFzbWluZS5SdW5uZXIucHJvdG90
eXBlLnJlc3VsdHMgPSBmdW5jdGlvbigpIHsKKyAgcmV0dXJuIHRoaXMucXVldWUucmVzdWx0cygp
OworfTsKKy8qKgorICogSW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgYSBKYXNtaW5lIHNwZWNp
ZmljYXRpb24sIG9yIHRlc3QuCisgKgorICogQGNvbnN0cnVjdG9yCisgKiBAcGFyYW0ge2phc21p
bmUuRW52fSBlbnYKKyAqIEBwYXJhbSB7amFzbWluZS5TdWl0ZX0gc3VpdGUKKyAqIEBwYXJhbSB7
U3RyaW5nfSBkZXNjcmlwdGlvbgorICovCitqYXNtaW5lLlNwZWMgPSBmdW5jdGlvbihlbnYsIHN1
aXRlLCBkZXNjcmlwdGlvbikgeworICBpZiAoIWVudikgeworICAgIHRocm93IG5ldyBFcnJvcign
amFzbWluZS5FbnYoKSByZXF1aXJlZCcpOworICB9CisgIGlmICghc3VpdGUpIHsKKyAgICB0aHJv
dyBuZXcgRXJyb3IoJ2phc21pbmUuU3VpdGUoKSByZXF1aXJlZCcpOworICB9CisgIHZhciBzcGVj
ID0gdGhpczsKKyAgc3BlYy5pZCA9IGVudi5uZXh0U3BlY0lkID8gZW52Lm5leHRTcGVjSWQoKSA6
IG51bGw7CisgIHNwZWMuZW52ID0gZW52OworICBzcGVjLnN1aXRlID0gc3VpdGU7CisgIHNwZWMu
ZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKKyAgc3BlYy5xdWV1ZSA9IG5ldyBqYXNtaW5lLlF1
ZXVlKGVudik7CisKKyAgc3BlYy5hZnRlckNhbGxiYWNrcyA9IFtdOworICBzcGVjLnNwaWVzXyA9
IFtdOworCisgIHNwZWMucmVzdWx0c18gPSBuZXcgamFzbWluZS5OZXN0ZWRSZXN1bHRzKCk7Cisg
IHNwZWMucmVzdWx0c18uZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKKyAgc3BlYy5tYXRjaGVy
c0NsYXNzID0gbnVsbDsKK307CisKK2phc21pbmUuU3BlYy5wcm90b3R5cGUuZ2V0RnVsbE5hbWUg
PSBmdW5jdGlvbigpIHsKKyAgcmV0dXJuIHRoaXMuc3VpdGUuZ2V0RnVsbE5hbWUoKSArICcgJyAr
IHRoaXMuZGVzY3JpcHRpb24gKyAnLic7Cit9OworCisKK2phc21pbmUuU3BlYy5wcm90b3R5cGUu
cmVzdWx0cyA9IGZ1bmN0aW9uKCkgeworICByZXR1cm4gdGhpcy5yZXN1bHRzXzsKK307CisKKy8q
KgorICogQWxsIHBhcmFtZXRlcnMgYXJlIHByZXR0eS1wcmludGVkIGFuZCBjb25jYXRlbmF0ZWQg
dG9nZXRoZXIsIHRoZW4gd3JpdHRlbiB0byB0aGUgc3BlYydzIG91dHB1dC4KKyAqCisgKiBCZSBj
YXJlZnVsIG5vdCB0byBsZWF2ZSBjYWxscyB0byA8Y29kZT5qYXNtaW5lLmxvZzwvY29kZT4gaW4g
cHJvZHVjdGlvbiBjb2RlLgorICovCitqYXNtaW5lLlNwZWMucHJvdG90eXBlLmxvZyA9IGZ1bmN0
aW9uKCkgeworICByZXR1cm4gdGhpcy5yZXN1bHRzXy5sb2coYXJndW1lbnRzKTsKK307CisKK2ph
c21pbmUuU3BlYy5wcm90b3R5cGUucnVucyA9IGZ1bmN0aW9uIChmdW5jKSB7CisgIHZhciBibG9j
ayA9IG5ldyBqYXNtaW5lLkJsb2NrKHRoaXMuZW52LCBmdW5jLCB0aGlzKTsKKyAgdGhpcy5hZGRU
b1F1ZXVlKGJsb2NrKTsKKyAgcmV0dXJuIHRoaXM7Cit9OworCitqYXNtaW5lLlNwZWMucHJvdG90
eXBlLmFkZFRvUXVldWUgPSBmdW5jdGlvbiAoYmxvY2spIHsKKyAgaWYgKHRoaXMucXVldWUuaXNS
dW5uaW5nKCkpIHsKKyAgICB0aGlzLnF1ZXVlLmluc2VydE5leHQoYmxvY2spOworICB9IGVsc2Ug
eworICAgIHRoaXMucXVldWUuYWRkKGJsb2NrKTsKKyAgfQorfTsKKworLyoqCisgKiBAcGFyYW0g
e2phc21pbmUuRXhwZWN0YXRpb25SZXN1bHR9IHJlc3VsdAorICovCitqYXNtaW5lLlNwZWMucHJv
dG90eXBlLmFkZE1hdGNoZXJSZXN1bHQgPSBmdW5jdGlvbihyZXN1bHQpIHsKKyAgdGhpcy5yZXN1
bHRzXy5hZGRSZXN1bHQocmVzdWx0KTsKK307CisKK2phc21pbmUuU3BlYy5wcm90b3R5cGUuZXhw
ZWN0ID0gZnVuY3Rpb24oYWN0dWFsKSB7CisgIHZhciBwb3NpdGl2ZSA9IG5ldyAodGhpcy5nZXRN
YXRjaGVyc0NsYXNzXygpKSh0aGlzLmVudiwgYWN0dWFsLCB0aGlzKTsKKyAgcG9zaXRpdmUubm90
ID0gbmV3ICh0aGlzLmdldE1hdGNoZXJzQ2xhc3NfKCkpKHRoaXMuZW52LCBhY3R1YWwsIHRoaXMs
IHRydWUpOworICByZXR1cm4gcG9zaXRpdmU7Cit9OworCisvKioKKyAqIFdhaXRzIGEgZml4ZWQg
dGltZSBwZXJpb2QgYmVmb3JlIG1vdmluZyB0byB0aGUgbmV4dCBibG9jay4KKyAqCisgKiBAZGVw
cmVjYXRlZCBVc2Ugd2FpdHNGb3IoKSBpbnN0ZWFkCisgKiBAcGFyYW0ge051bWJlcn0gdGltZW91
dCBtaWxsaXNlY29uZHMgdG8gd2FpdAorICovCitqYXNtaW5lLlNwZWMucHJvdG90eXBlLndhaXRz
ID0gZnVuY3Rpb24odGltZW91dCkgeworICB2YXIgd2FpdHNGdW5jID0gbmV3IGphc21pbmUuV2Fp
dHNCbG9jayh0aGlzLmVudiwgdGltZW91dCwgdGhpcyk7CisgIHRoaXMuYWRkVG9RdWV1ZSh3YWl0
c0Z1bmMpOworICByZXR1cm4gdGhpczsKK307CisKKy8qKgorICogV2FpdHMgZm9yIHRoZSBsYXRj
aEZ1bmN0aW9uIHRvIHJldHVybiB0cnVlIGJlZm9yZSBwcm9jZWVkaW5nIHRvIHRoZSBuZXh0IGJs
b2NrLgorICoKKyAqIEBwYXJhbSB7RnVuY3Rpb259IGxhdGNoRnVuY3Rpb24KKyAqIEBwYXJhbSB7
U3RyaW5nfSBvcHRpb25hbF90aW1lb3V0TWVzc2FnZQorICogQHBhcmFtIHtOdW1iZXJ9IG9wdGlv
bmFsX3RpbWVvdXQKKyAqLworamFzbWluZS5TcGVjLnByb3RvdHlwZS53YWl0c0ZvciA9IGZ1bmN0
aW9uKGxhdGNoRnVuY3Rpb24sIG9wdGlvbmFsX3RpbWVvdXRNZXNzYWdlLCBvcHRpb25hbF90aW1l
b3V0KSB7CisgIHZhciBsYXRjaEZ1bmN0aW9uXyA9IG51bGw7CisgIHZhciBvcHRpb25hbF90aW1l
b3V0TWVzc2FnZV8gPSBudWxsOworICB2YXIgb3B0aW9uYWxfdGltZW91dF8gPSBudWxsOworCisg
IGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CisgICAgdmFyIGFy
ZyA9IGFyZ3VtZW50c1tpXTsKKyAgICBzd2l0Y2ggKHR5cGVvZiBhcmcpIHsKKyAgICAgIGNhc2Ug
J2Z1bmN0aW9uJzoKKyAgICAgICAgbGF0Y2hGdW5jdGlvbl8gPSBhcmc7CisgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSAnc3RyaW5nJzoKKyAgICAgICAgb3B0aW9uYWxfdGltZW91dE1lc3NhZ2Vf
ID0gYXJnOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ251bWJlcic6CisgICAgICAgIG9w
dGlvbmFsX3RpbWVvdXRfID0gYXJnOworICAgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICB2
YXIgd2FpdHNGb3JGdW5jID0gbmV3IGphc21pbmUuV2FpdHNGb3JCbG9jayh0aGlzLmVudiwgb3B0
aW9uYWxfdGltZW91dF8sIGxhdGNoRnVuY3Rpb25fLCBvcHRpb25hbF90aW1lb3V0TWVzc2FnZV8s
IHRoaXMpOworICB0aGlzLmFkZFRvUXVldWUod2FpdHNGb3JGdW5jKTsKKyAgcmV0dXJuIHRoaXM7
Cit9OworCitqYXNtaW5lLlNwZWMucHJvdG90eXBlLmZhaWwgPSBmdW5jdGlvbiAoZSkgeworICB2
YXIgZXhwZWN0YXRpb25SZXN1bHQgPSBuZXcgamFzbWluZS5FeHBlY3RhdGlvblJlc3VsdCh7Cisg
ICAgcGFzc2VkOiBmYWxzZSwKKyAgICBtZXNzYWdlOiBlID8gamFzbWluZS51dGlsLmZvcm1hdEV4
Y2VwdGlvbihlKSA6ICdFeGNlcHRpb24nLAorICAgIHRyYWNlOiB7IHN0YWNrOiBlLnN0YWNrIH0K
KyAgfSk7CisgIHRoaXMucmVzdWx0c18uYWRkUmVzdWx0KGV4cGVjdGF0aW9uUmVzdWx0KTsKK307
CisKK2phc21pbmUuU3BlYy5wcm90b3R5cGUuZ2V0TWF0Y2hlcnNDbGFzc18gPSBmdW5jdGlvbigp
IHsKKyAgcmV0dXJuIHRoaXMubWF0Y2hlcnNDbGFzcyB8fCB0aGlzLmVudi5tYXRjaGVyc0NsYXNz
OworfTsKKworamFzbWluZS5TcGVjLnByb3RvdHlwZS5hZGRNYXRjaGVycyA9IGZ1bmN0aW9uKG1h
dGNoZXJzUHJvdG90eXBlKSB7CisgIHZhciBwYXJlbnQgPSB0aGlzLmdldE1hdGNoZXJzQ2xhc3Nf
KCk7CisgIHZhciBuZXdNYXRjaGVyc0NsYXNzID0gZnVuY3Rpb24oKSB7CisgICAgcGFyZW50LmFw
cGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgIH07CisgIGphc21pbmUudXRpbC5pbmhlcml0KG5ld01h
dGNoZXJzQ2xhc3MsIHBhcmVudCk7CisgIGphc21pbmUuTWF0Y2hlcnMud3JhcEludG9fKG1hdGNo
ZXJzUHJvdG90eXBlLCBuZXdNYXRjaGVyc0NsYXNzKTsKKyAgdGhpcy5tYXRjaGVyc0NsYXNzID0g
bmV3TWF0Y2hlcnNDbGFzczsKK307CisKK2phc21pbmUuU3BlYy5wcm90b3R5cGUuZmluaXNoQ2Fs
bGJhY2sgPSBmdW5jdGlvbigpIHsKKyAgdGhpcy5lbnYucmVwb3J0ZXIucmVwb3J0U3BlY1Jlc3Vs
dHModGhpcyk7Cit9OworCitqYXNtaW5lLlNwZWMucHJvdG90eXBlLmZpbmlzaCA9IGZ1bmN0aW9u
KG9uQ29tcGxldGUpIHsKKyAgdGhpcy5yZW1vdmVBbGxTcGllcygpOworICB0aGlzLmZpbmlzaENh
bGxiYWNrKCk7CisgIGlmIChvbkNvbXBsZXRlKSB7CisgICAgb25Db21wbGV0ZSgpOworICB9Cit9
OworCitqYXNtaW5lLlNwZWMucHJvdG90eXBlLmFmdGVyID0gZnVuY3Rpb24oZG9BZnRlcikgewor
ICBpZiAodGhpcy5xdWV1ZS5pc1J1bm5pbmcoKSkgeworICAgIHRoaXMucXVldWUuYWRkKG5ldyBq
YXNtaW5lLkJsb2NrKHRoaXMuZW52LCBkb0FmdGVyLCB0aGlzKSk7CisgIH0gZWxzZSB7CisgICAg
dGhpcy5hZnRlckNhbGxiYWNrcy51bnNoaWZ0KGRvQWZ0ZXIpOworICB9Cit9OworCitqYXNtaW5l
LlNwZWMucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihvbkNvbXBsZXRlKSB7CisgIHZhciBz
cGVjID0gdGhpczsKKyAgaWYgKCFzcGVjLmVudi5zcGVjRmlsdGVyKHNwZWMpKSB7CisgICAgc3Bl
Yy5yZXN1bHRzXy5za2lwcGVkID0gdHJ1ZTsKKyAgICBzcGVjLmZpbmlzaChvbkNvbXBsZXRlKTsK
KyAgICByZXR1cm47CisgIH0KKworICB0aGlzLmVudi5yZXBvcnRlci5yZXBvcnRTcGVjU3RhcnRp
bmcodGhpcyk7CisKKyAgc3BlYy5lbnYuY3VycmVudFNwZWMgPSBzcGVjOworCisgIHNwZWMuYWRk
QmVmb3Jlc0FuZEFmdGVyc1RvUXVldWUoKTsKKworICBzcGVjLnF1ZXVlLnN0YXJ0KGZ1bmN0aW9u
ICgpIHsKKyAgICBzcGVjLmZpbmlzaChvbkNvbXBsZXRlKTsKKyAgfSk7Cit9OworCitqYXNtaW5l
LlNwZWMucHJvdG90eXBlLmFkZEJlZm9yZXNBbmRBZnRlcnNUb1F1ZXVlID0gZnVuY3Rpb24oKSB7
CisgIHZhciBydW5uZXIgPSB0aGlzLmVudi5jdXJyZW50UnVubmVyKCk7CisgIHZhciBpOworCisg
IGZvciAodmFyIHN1aXRlID0gdGhpcy5zdWl0ZTsgc3VpdGU7IHN1aXRlID0gc3VpdGUucGFyZW50
U3VpdGUpIHsKKyAgICBmb3IgKGkgPSAwOyBpIDwgc3VpdGUuYmVmb3JlXy5sZW5ndGg7IGkrKykg
eworICAgICAgdGhpcy5xdWV1ZS5hZGRCZWZvcmUobmV3IGphc21pbmUuQmxvY2sodGhpcy5lbnYs
IHN1aXRlLmJlZm9yZV9baV0sIHRoaXMpKTsKKyAgICB9CisgIH0KKyAgZm9yIChpID0gMDsgaSA8
IHJ1bm5lci5iZWZvcmVfLmxlbmd0aDsgaSsrKSB7CisgICAgdGhpcy5xdWV1ZS5hZGRCZWZvcmUo
bmV3IGphc21pbmUuQmxvY2sodGhpcy5lbnYsIHJ1bm5lci5iZWZvcmVfW2ldLCB0aGlzKSk7Cisg
IH0KKyAgZm9yIChpID0gMDsgaSA8IHRoaXMuYWZ0ZXJDYWxsYmFja3MubGVuZ3RoOyBpKyspIHsK
KyAgICB0aGlzLnF1ZXVlLmFkZChuZXcgamFzbWluZS5CbG9jayh0aGlzLmVudiwgdGhpcy5hZnRl
ckNhbGxiYWNrc1tpXSwgdGhpcykpOworICB9CisgIGZvciAoc3VpdGUgPSB0aGlzLnN1aXRlOyBz
dWl0ZTsgc3VpdGUgPSBzdWl0ZS5wYXJlbnRTdWl0ZSkgeworICAgIGZvciAoaSA9IDA7IGkgPCBz
dWl0ZS5hZnRlcl8ubGVuZ3RoOyBpKyspIHsKKyAgICAgIHRoaXMucXVldWUuYWRkKG5ldyBqYXNt
aW5lLkJsb2NrKHRoaXMuZW52LCBzdWl0ZS5hZnRlcl9baV0sIHRoaXMpKTsKKyAgICB9CisgIH0K
KyAgZm9yIChpID0gMDsgaSA8IHJ1bm5lci5hZnRlcl8ubGVuZ3RoOyBpKyspIHsKKyAgICB0aGlz
LnF1ZXVlLmFkZChuZXcgamFzbWluZS5CbG9jayh0aGlzLmVudiwgcnVubmVyLmFmdGVyX1tpXSwg
dGhpcykpOworICB9Cit9OworCitqYXNtaW5lLlNwZWMucHJvdG90eXBlLmV4cGxvZGVzID0gZnVu
Y3Rpb24oKSB7CisgIHRocm93ICdleHBsb2RlcyBmdW5jdGlvbiBzaG91bGQgbm90IGhhdmUgYmVl
biBjYWxsZWQnOworfTsKKworamFzbWluZS5TcGVjLnByb3RvdHlwZS5zcHlPbiA9IGZ1bmN0aW9u
KG9iaiwgbWV0aG9kTmFtZSwgaWdub3JlTWV0aG9kRG9lc250RXhpc3QpIHsKKyAgaWYgKG9iaiA9
PSBqYXNtaW5lLnVuZGVmaW5lZCkgeworICAgIHRocm93ICJzcHlPbiBjb3VsZCBub3QgZmluZCBh
biBvYmplY3QgdG8gc3B5IHVwb24gZm9yICIgKyBtZXRob2ROYW1lICsgIigpIjsKKyAgfQorCisg
IGlmICghaWdub3JlTWV0aG9kRG9lc250RXhpc3QgJiYgb2JqW21ldGhvZE5hbWVdID09PSBqYXNt
aW5lLnVuZGVmaW5lZCkgeworICAgIHRocm93IG1ldGhvZE5hbWUgKyAnKCkgbWV0aG9kIGRvZXMg
bm90IGV4aXN0JzsKKyAgfQorCisgIGlmICghaWdub3JlTWV0aG9kRG9lc250RXhpc3QgJiYgb2Jq
W21ldGhvZE5hbWVdICYmIG9ialttZXRob2ROYW1lXS5pc1NweSkgeworICAgIHRocm93IG5ldyBF
cnJvcihtZXRob2ROYW1lICsgJyBoYXMgYWxyZWFkeSBiZWVuIHNwaWVkIHVwb24nKTsKKyAgfQor
CisgIHZhciBzcHlPYmogPSBqYXNtaW5lLmNyZWF0ZVNweShtZXRob2ROYW1lKTsKKworICB0aGlz
LnNwaWVzXy5wdXNoKHNweU9iaik7CisgIHNweU9iai5iYXNlT2JqID0gb2JqOworICBzcHlPYmou
bWV0aG9kTmFtZSA9IG1ldGhvZE5hbWU7CisgIHNweU9iai5vcmlnaW5hbFZhbHVlID0gb2JqW21l
dGhvZE5hbWVdOworCisgIG9ialttZXRob2ROYW1lXSA9IHNweU9iajsKKworICByZXR1cm4gc3B5
T2JqOworfTsKKworamFzbWluZS5TcGVjLnByb3RvdHlwZS5yZW1vdmVBbGxTcGllcyA9IGZ1bmN0
aW9uKCkgeworICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc3BpZXNfLmxlbmd0aDsgaSsrKSB7
CisgICAgdmFyIHNweSA9IHRoaXMuc3BpZXNfW2ldOworICAgIHNweS5iYXNlT2JqW3NweS5tZXRo
b2ROYW1lXSA9IHNweS5vcmlnaW5hbFZhbHVlOworICB9CisgIHRoaXMuc3BpZXNfID0gW107Cit9
OworCisvKioKKyAqIEludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIGEgSmFzbWluZSBzdWl0ZS4K
KyAqCisgKiBAY29uc3RydWN0b3IKKyAqIEBwYXJhbSB7amFzbWluZS5FbnZ9IGVudgorICogQHBh
cmFtIHtTdHJpbmd9IGRlc2NyaXB0aW9uCisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzcGVjRGVmaW5p
dGlvbnMKKyAqIEBwYXJhbSB7amFzbWluZS5TdWl0ZX0gcGFyZW50U3VpdGUKKyAqLworamFzbWlu
ZS5TdWl0ZSA9IGZ1bmN0aW9uKGVudiwgZGVzY3JpcHRpb24sIHNwZWNEZWZpbml0aW9ucywgcGFy
ZW50U3VpdGUpIHsKKyAgdmFyIHNlbGYgPSB0aGlzOworICBzZWxmLmlkID0gZW52Lm5leHRTdWl0
ZUlkID8gZW52Lm5leHRTdWl0ZUlkKCkgOiBudWxsOworICBzZWxmLmRlc2NyaXB0aW9uID0gZGVz
Y3JpcHRpb247CisgIHNlbGYucXVldWUgPSBuZXcgamFzbWluZS5RdWV1ZShlbnYpOworICBzZWxm
LnBhcmVudFN1aXRlID0gcGFyZW50U3VpdGU7CisgIHNlbGYuZW52ID0gZW52OworICBzZWxmLmJl
Zm9yZV8gPSBbXTsKKyAgc2VsZi5hZnRlcl8gPSBbXTsKKyAgc2VsZi5jaGlsZHJlbl8gPSBbXTsK
KyAgc2VsZi5zdWl0ZXNfID0gW107CisgIHNlbGYuc3BlY3NfID0gW107Cit9OworCitqYXNtaW5l
LlN1aXRlLnByb3RvdHlwZS5nZXRGdWxsTmFtZSA9IGZ1bmN0aW9uKCkgeworICB2YXIgZnVsbE5h
bWUgPSB0aGlzLmRlc2NyaXB0aW9uOworICBmb3IgKHZhciBwYXJlbnRTdWl0ZSA9IHRoaXMucGFy
ZW50U3VpdGU7IHBhcmVudFN1aXRlOyBwYXJlbnRTdWl0ZSA9IHBhcmVudFN1aXRlLnBhcmVudFN1
aXRlKSB7CisgICAgZnVsbE5hbWUgPSBwYXJlbnRTdWl0ZS5kZXNjcmlwdGlvbiArICcgJyArIGZ1
bGxOYW1lOworICB9CisgIHJldHVybiBmdWxsTmFtZTsKK307CisKK2phc21pbmUuU3VpdGUucHJv
dG90eXBlLmZpbmlzaCA9IGZ1bmN0aW9uKG9uQ29tcGxldGUpIHsKKyAgdGhpcy5lbnYucmVwb3J0
ZXIucmVwb3J0U3VpdGVSZXN1bHRzKHRoaXMpOworICB0aGlzLmZpbmlzaGVkID0gdHJ1ZTsKKyAg
aWYgKHR5cGVvZihvbkNvbXBsZXRlKSA9PSAnZnVuY3Rpb24nKSB7CisgICAgb25Db21wbGV0ZSgp
OworICB9Cit9OworCitqYXNtaW5lLlN1aXRlLnByb3RvdHlwZS5iZWZvcmVFYWNoID0gZnVuY3Rp
b24oYmVmb3JlRWFjaEZ1bmN0aW9uKSB7CisgIGJlZm9yZUVhY2hGdW5jdGlvbi50eXBlTmFtZSA9
ICdiZWZvcmVFYWNoJzsKKyAgdGhpcy5iZWZvcmVfLnVuc2hpZnQoYmVmb3JlRWFjaEZ1bmN0aW9u
KTsKK307CisKK2phc21pbmUuU3VpdGUucHJvdG90eXBlLmFmdGVyRWFjaCA9IGZ1bmN0aW9uKGFm
dGVyRWFjaEZ1bmN0aW9uKSB7CisgIGFmdGVyRWFjaEZ1bmN0aW9uLnR5cGVOYW1lID0gJ2FmdGVy
RWFjaCc7CisgIHRoaXMuYWZ0ZXJfLnVuc2hpZnQoYWZ0ZXJFYWNoRnVuY3Rpb24pOworfTsKKwor
amFzbWluZS5TdWl0ZS5wcm90b3R5cGUucmVzdWx0cyA9IGZ1bmN0aW9uKCkgeworICByZXR1cm4g
dGhpcy5xdWV1ZS5yZXN1bHRzKCk7Cit9OworCitqYXNtaW5lLlN1aXRlLnByb3RvdHlwZS5hZGQg
PSBmdW5jdGlvbihzdWl0ZU9yU3BlYykgeworICB0aGlzLmNoaWxkcmVuXy5wdXNoKHN1aXRlT3JT
cGVjKTsKKyAgaWYgKHN1aXRlT3JTcGVjIGluc3RhbmNlb2YgamFzbWluZS5TdWl0ZSkgeworICAg
IHRoaXMuc3VpdGVzXy5wdXNoKHN1aXRlT3JTcGVjKTsKKyAgICB0aGlzLmVudi5jdXJyZW50UnVu
bmVyKCkuYWRkU3VpdGUoc3VpdGVPclNwZWMpOworICB9IGVsc2UgeworICAgIHRoaXMuc3BlY3Nf
LnB1c2goc3VpdGVPclNwZWMpOworICB9CisgIHRoaXMucXVldWUuYWRkKHN1aXRlT3JTcGVjKTsK
K307CisKK2phc21pbmUuU3VpdGUucHJvdG90eXBlLnNwZWNzID0gZnVuY3Rpb24oKSB7CisgIHJl
dHVybiB0aGlzLnNwZWNzXzsKK307CisKK2phc21pbmUuU3VpdGUucHJvdG90eXBlLnN1aXRlcyA9
IGZ1bmN0aW9uKCkgeworICByZXR1cm4gdGhpcy5zdWl0ZXNfOworfTsKKworamFzbWluZS5TdWl0
ZS5wcm90b3R5cGUuY2hpbGRyZW4gPSBmdW5jdGlvbigpIHsKKyAgcmV0dXJuIHRoaXMuY2hpbGRy
ZW5fOworfTsKKworamFzbWluZS5TdWl0ZS5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKG9u
Q29tcGxldGUpIHsKKyAgdmFyIHNlbGYgPSB0aGlzOworICB0aGlzLnF1ZXVlLnN0YXJ0KGZ1bmN0
aW9uICgpIHsKKyAgICBzZWxmLmZpbmlzaChvbkNvbXBsZXRlKTsKKyAgfSk7Cit9OworamFzbWlu
ZS5XYWl0c0Jsb2NrID0gZnVuY3Rpb24oZW52LCB0aW1lb3V0LCBzcGVjKSB7CisgIHRoaXMudGlt
ZW91dCA9IHRpbWVvdXQ7CisgIGphc21pbmUuQmxvY2suY2FsbCh0aGlzLCBlbnYsIG51bGwsIHNw
ZWMpOworfTsKKworamFzbWluZS51dGlsLmluaGVyaXQoamFzbWluZS5XYWl0c0Jsb2NrLCBqYXNt
aW5lLkJsb2NrKTsKKworamFzbWluZS5XYWl0c0Jsb2NrLnByb3RvdHlwZS5leGVjdXRlID0gZnVu
Y3Rpb24gKG9uQ29tcGxldGUpIHsKKyAgaWYgKGphc21pbmUuVkVSQk9TRSkgeworICAgIHRoaXMu
ZW52LnJlcG9ydGVyLmxvZygnPj4gSmFzbWluZSB3YWl0aW5nIGZvciAnICsgdGhpcy50aW1lb3V0
ICsgJyBtcy4uLicpOworICB9CisgIHRoaXMuZW52LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewor
ICAgIG9uQ29tcGxldGUoKTsKKyAgfSwgdGhpcy50aW1lb3V0KTsKK307CisvKioKKyAqIEEgYmxv
Y2sgd2hpY2ggd2FpdHMgZm9yIHNvbWUgY29uZGl0aW9uIHRvIGJlY29tZSB0cnVlLCB3aXRoIHRp
bWVvdXQuCisgKgorICogQGNvbnN0cnVjdG9yCisgKiBAZXh0ZW5kcyBqYXNtaW5lLkJsb2NrCisg
KiBAcGFyYW0ge2phc21pbmUuRW52fSBlbnYgVGhlIEphc21pbmUgZW52aXJvbm1lbnQuCisgKiBA
cGFyYW0ge051bWJlcn0gdGltZW91dCBUaGUgbWF4aW11bSB0aW1lIGluIG1pbGxpc2Vjb25kcyB0
byB3YWl0IGZvciB0aGUgY29uZGl0aW9uIHRvIGJlY29tZSB0cnVlLgorICogQHBhcmFtIHtGdW5j
dGlvbn0gbGF0Y2hGdW5jdGlvbiBBIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgdHJ1ZSB3aGVuIHRo
ZSBkZXNpcmVkIGNvbmRpdGlvbiBoYXMgYmVlbiBtZXQuCisgKiBAcGFyYW0ge1N0cmluZ30gbWVz
c2FnZSBUaGUgbWVzc2FnZSB0byBkaXNwbGF5IGlmIHRoZSBkZXNpcmVkIGNvbmRpdGlvbiBoYXNu
J3QgYmVlbiBtZXQgd2l0aGluIHRoZSBnaXZlbiB0aW1lIHBlcmlvZC4KKyAqIEBwYXJhbSB7amFz
bWluZS5TcGVjfSBzcGVjIFRoZSBKYXNtaW5lIHNwZWMuCisgKi8KK2phc21pbmUuV2FpdHNGb3JC
bG9jayA9IGZ1bmN0aW9uKGVudiwgdGltZW91dCwgbGF0Y2hGdW5jdGlvbiwgbWVzc2FnZSwgc3Bl
YykgeworICB0aGlzLnRpbWVvdXQgPSB0aW1lb3V0IHx8IGVudi5kZWZhdWx0VGltZW91dEludGVy
dmFsOworICB0aGlzLmxhdGNoRnVuY3Rpb24gPSBsYXRjaEZ1bmN0aW9uOworICB0aGlzLm1lc3Nh
Z2UgPSBtZXNzYWdlOworICB0aGlzLnRvdGFsVGltZVNwZW50V2FpdGluZ0ZvckxhdGNoID0gMDsK
KyAgamFzbWluZS5CbG9jay5jYWxsKHRoaXMsIGVudiwgbnVsbCwgc3BlYyk7Cit9OworamFzbWlu
ZS51dGlsLmluaGVyaXQoamFzbWluZS5XYWl0c0ZvckJsb2NrLCBqYXNtaW5lLkJsb2NrKTsKKwor
amFzbWluZS5XYWl0c0ZvckJsb2NrLlRJTUVPVVRfSU5DUkVNRU5UID0gMTA7CisKK2phc21pbmUu
V2FpdHNGb3JCbG9jay5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKG9uQ29tcGxldGUpIHsK
KyAgaWYgKGphc21pbmUuVkVSQk9TRSkgeworICAgIHRoaXMuZW52LnJlcG9ydGVyLmxvZygnPj4g
SmFzbWluZSB3YWl0aW5nIGZvciAnICsgKHRoaXMubWVzc2FnZSB8fCAnc29tZXRoaW5nIHRvIGhh
cHBlbicpKTsKKyAgfQorICB2YXIgbGF0Y2hGdW5jdGlvblJlc3VsdDsKKyAgdHJ5IHsKKyAgICBs
YXRjaEZ1bmN0aW9uUmVzdWx0ID0gdGhpcy5sYXRjaEZ1bmN0aW9uLmFwcGx5KHRoaXMuc3BlYyk7
CisgIH0gY2F0Y2ggKGUpIHsKKyAgICB0aGlzLnNwZWMuZmFpbChlKTsKKyAgICBvbkNvbXBsZXRl
KCk7CisgICAgcmV0dXJuOworICB9CisKKyAgaWYgKGxhdGNoRnVuY3Rpb25SZXN1bHQpIHsKKyAg
ICBvbkNvbXBsZXRlKCk7CisgIH0gZWxzZSBpZiAodGhpcy50b3RhbFRpbWVTcGVudFdhaXRpbmdG
b3JMYXRjaCA+PSB0aGlzLnRpbWVvdXQpIHsKKyAgICB2YXIgbWVzc2FnZSA9ICd0aW1lZCBvdXQg
YWZ0ZXIgJyArIHRoaXMudGltZW91dCArICcgbXNlYyB3YWl0aW5nIGZvciAnICsgKHRoaXMubWVz
c2FnZSB8fCAnc29tZXRoaW5nIHRvIGhhcHBlbicpOworICAgIHRoaXMuc3BlYy5mYWlsKHsKKyAg
ICAgIG5hbWU6ICd0aW1lb3V0JywKKyAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UKKyAgICB9KTsKKwor
ICAgIHRoaXMuYWJvcnQgPSB0cnVlOworICAgIG9uQ29tcGxldGUoKTsKKyAgfSBlbHNlIHsKKyAg
ICB0aGlzLnRvdGFsVGltZVNwZW50V2FpdGluZ0ZvckxhdGNoICs9IGphc21pbmUuV2FpdHNGb3JC
bG9jay5USU1FT1VUX0lOQ1JFTUVOVDsKKyAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgdGhpcy5l
bnYuc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgIHNlbGYuZXhlY3V0ZShvbkNvbXBsZXRl
KTsKKyAgICB9LCBqYXNtaW5lLldhaXRzRm9yQmxvY2suVElNRU9VVF9JTkNSRU1FTlQpOworICB9
Cit9OworLy8gTW9jayBzZXRUaW1lb3V0LCBjbGVhclRpbWVvdXQKKy8vIENvbnRyaWJ1dGVkIGJ5
IFBpdm90YWwgQ29tcHV0ZXIgU3lzdGVtcywgd3d3LnBpdm90YWxzZi5jb20KKworamFzbWluZS5G
YWtlVGltZXIgPSBmdW5jdGlvbigpIHsKKyAgdGhpcy5yZXNldCgpOworCisgIHZhciBzZWxmID0g
dGhpczsKKyAgc2VsZi5zZXRUaW1lb3V0ID0gZnVuY3Rpb24oZnVuY1RvQ2FsbCwgbWlsbGlzKSB7
CisgICAgc2VsZi50aW1lb3V0c01hZGUrKzsKKyAgICBzZWxmLnNjaGVkdWxlRnVuY3Rpb24oc2Vs
Zi50aW1lb3V0c01hZGUsIGZ1bmNUb0NhbGwsIG1pbGxpcywgZmFsc2UpOworICAgIHJldHVybiBz
ZWxmLnRpbWVvdXRzTWFkZTsKKyAgfTsKKworICBzZWxmLnNldEludGVydmFsID0gZnVuY3Rpb24o
ZnVuY1RvQ2FsbCwgbWlsbGlzKSB7CisgICAgc2VsZi50aW1lb3V0c01hZGUrKzsKKyAgICBzZWxm
LnNjaGVkdWxlRnVuY3Rpb24oc2VsZi50aW1lb3V0c01hZGUsIGZ1bmNUb0NhbGwsIG1pbGxpcywg
dHJ1ZSk7CisgICAgcmV0dXJuIHNlbGYudGltZW91dHNNYWRlOworICB9OworCisgIHNlbGYuY2xl
YXJUaW1lb3V0ID0gZnVuY3Rpb24odGltZW91dEtleSkgeworICAgIHNlbGYuc2NoZWR1bGVkRnVu
Y3Rpb25zW3RpbWVvdXRLZXldID0gamFzbWluZS51bmRlZmluZWQ7CisgIH07CisKKyAgc2VsZi5j
bGVhckludGVydmFsID0gZnVuY3Rpb24odGltZW91dEtleSkgeworICAgIHNlbGYuc2NoZWR1bGVk
RnVuY3Rpb25zW3RpbWVvdXRLZXldID0gamFzbWluZS51bmRlZmluZWQ7CisgIH07CisKK307CisK
K2phc21pbmUuRmFrZVRpbWVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkgeworICB0aGlz
LnRpbWVvdXRzTWFkZSA9IDA7CisgIHRoaXMuc2NoZWR1bGVkRnVuY3Rpb25zID0ge307CisgIHRo
aXMubm93TWlsbGlzID0gMDsKK307CisKK2phc21pbmUuRmFrZVRpbWVyLnByb3RvdHlwZS50aWNr
ID0gZnVuY3Rpb24obWlsbGlzKSB7CisgIHZhciBvbGRNaWxsaXMgPSB0aGlzLm5vd01pbGxpczsK
KyAgdmFyIG5ld01pbGxpcyA9IG9sZE1pbGxpcyArIG1pbGxpczsKKyAgdGhpcy5ydW5GdW5jdGlv
bnNXaXRoaW5SYW5nZShvbGRNaWxsaXMsIG5ld01pbGxpcyk7CisgIHRoaXMubm93TWlsbGlzID0g
bmV3TWlsbGlzOworfTsKKworamFzbWluZS5GYWtlVGltZXIucHJvdG90eXBlLnJ1bkZ1bmN0aW9u
c1dpdGhpblJhbmdlID0gZnVuY3Rpb24ob2xkTWlsbGlzLCBub3dNaWxsaXMpIHsKKyAgdmFyIHNj
aGVkdWxlZEZ1bmM7CisgIHZhciBmdW5jc1RvUnVuID0gW107CisgIGZvciAodmFyIHRpbWVvdXRL
ZXkgaW4gdGhpcy5zY2hlZHVsZWRGdW5jdGlvbnMpIHsKKyAgICBzY2hlZHVsZWRGdW5jID0gdGhp
cy5zY2hlZHVsZWRGdW5jdGlvbnNbdGltZW91dEtleV07CisgICAgaWYgKHNjaGVkdWxlZEZ1bmMg
IT0gamFzbWluZS51bmRlZmluZWQgJiYKKyAgICAgICAgc2NoZWR1bGVkRnVuYy5ydW5BdE1pbGxp
cyA+PSBvbGRNaWxsaXMgJiYKKyAgICAgICAgc2NoZWR1bGVkRnVuYy5ydW5BdE1pbGxpcyA8PSBu
b3dNaWxsaXMpIHsKKyAgICAgIGZ1bmNzVG9SdW4ucHVzaChzY2hlZHVsZWRGdW5jKTsKKyAgICAg
IHRoaXMuc2NoZWR1bGVkRnVuY3Rpb25zW3RpbWVvdXRLZXldID0gamFzbWluZS51bmRlZmluZWQ7
CisgICAgfQorICB9CisKKyAgaWYgKGZ1bmNzVG9SdW4ubGVuZ3RoID4gMCkgeworICAgIGZ1bmNz
VG9SdW4uc29ydChmdW5jdGlvbihhLCBiKSB7CisgICAgICByZXR1cm4gYS5ydW5BdE1pbGxpcyAt
IGIucnVuQXRNaWxsaXM7CisgICAgfSk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmdW5jc1Rv
UnVuLmxlbmd0aDsgKytpKSB7CisgICAgICB0cnkgeworICAgICAgICB2YXIgZnVuY1RvUnVuID0g
ZnVuY3NUb1J1bltpXTsKKyAgICAgICAgdGhpcy5ub3dNaWxsaXMgPSBmdW5jVG9SdW4ucnVuQXRN
aWxsaXM7CisgICAgICAgIGZ1bmNUb1J1bi5mdW5jVG9DYWxsKCk7CisgICAgICAgIGlmIChmdW5j
VG9SdW4ucmVjdXJyaW5nKSB7CisgICAgICAgICAgdGhpcy5zY2hlZHVsZUZ1bmN0aW9uKGZ1bmNU
b1J1bi50aW1lb3V0S2V5LAorICAgICAgICAgICAgICBmdW5jVG9SdW4uZnVuY1RvQ2FsbCwKKyAg
ICAgICAgICAgICAgZnVuY1RvUnVuLm1pbGxpcywKKyAgICAgICAgICAgICAgdHJ1ZSk7CisgICAg
ICAgIH0KKyAgICAgIH0gY2F0Y2goZSkgeworICAgICAgfQorICAgIH0KKyAgICB0aGlzLnJ1bkZ1
bmN0aW9uc1dpdGhpblJhbmdlKG9sZE1pbGxpcywgbm93TWlsbGlzKTsKKyAgfQorfTsKKworamFz
bWluZS5GYWtlVGltZXIucHJvdG90eXBlLnNjaGVkdWxlRnVuY3Rpb24gPSBmdW5jdGlvbih0aW1l
b3V0S2V5LCBmdW5jVG9DYWxsLCBtaWxsaXMsIHJlY3VycmluZykgeworICB0aGlzLnNjaGVkdWxl
ZEZ1bmN0aW9uc1t0aW1lb3V0S2V5XSA9IHsKKyAgICBydW5BdE1pbGxpczogdGhpcy5ub3dNaWxs
aXMgKyBtaWxsaXMsCisgICAgZnVuY1RvQ2FsbDogZnVuY1RvQ2FsbCwKKyAgICByZWN1cnJpbmc6
IHJlY3VycmluZywKKyAgICB0aW1lb3V0S2V5OiB0aW1lb3V0S2V5LAorICAgIG1pbGxpczogbWls
bGlzCisgIH07Cit9OworCisvKioKKyAqIEBuYW1lc3BhY2UKKyAqLworamFzbWluZS5DbG9jayA9
IHsKKyAgZGVmYXVsdEZha2VUaW1lcjogbmV3IGphc21pbmUuRmFrZVRpbWVyKCksCisKKyAgcmVz
ZXQ6IGZ1bmN0aW9uKCkgeworICAgIGphc21pbmUuQ2xvY2suYXNzZXJ0SW5zdGFsbGVkKCk7Cisg
ICAgamFzbWluZS5DbG9jay5kZWZhdWx0RmFrZVRpbWVyLnJlc2V0KCk7CisgIH0sCisKKyAgdGlj
azogZnVuY3Rpb24obWlsbGlzKSB7CisgICAgamFzbWluZS5DbG9jay5hc3NlcnRJbnN0YWxsZWQo
KTsKKyAgICBqYXNtaW5lLkNsb2NrLmRlZmF1bHRGYWtlVGltZXIudGljayhtaWxsaXMpOworICB9
LAorCisgIHJ1bkZ1bmN0aW9uc1dpdGhpblJhbmdlOiBmdW5jdGlvbihvbGRNaWxsaXMsIG5vd01p
bGxpcykgeworICAgIGphc21pbmUuQ2xvY2suZGVmYXVsdEZha2VUaW1lci5ydW5GdW5jdGlvbnNX
aXRoaW5SYW5nZShvbGRNaWxsaXMsIG5vd01pbGxpcyk7CisgIH0sCisKKyAgc2NoZWR1bGVGdW5j
dGlvbjogZnVuY3Rpb24odGltZW91dEtleSwgZnVuY1RvQ2FsbCwgbWlsbGlzLCByZWN1cnJpbmcp
IHsKKyAgICBqYXNtaW5lLkNsb2NrLmRlZmF1bHRGYWtlVGltZXIuc2NoZWR1bGVGdW5jdGlvbih0
aW1lb3V0S2V5LCBmdW5jVG9DYWxsLCBtaWxsaXMsIHJlY3VycmluZyk7CisgIH0sCisKKyAgdXNl
TW9jazogZnVuY3Rpb24oKSB7CisgICAgaWYgKCFqYXNtaW5lLkNsb2NrLmlzSW5zdGFsbGVkKCkp
IHsKKyAgICAgIHZhciBzcGVjID0gamFzbWluZS5nZXRFbnYoKS5jdXJyZW50U3BlYzsKKyAgICAg
IHNwZWMuYWZ0ZXIoamFzbWluZS5DbG9jay51bmluc3RhbGxNb2NrKTsKKworICAgICAgamFzbWlu
ZS5DbG9jay5pbnN0YWxsTW9jaygpOworICAgIH0KKyAgfSwKKworICBpbnN0YWxsTW9jazogZnVu
Y3Rpb24oKSB7CisgICAgamFzbWluZS5DbG9jay5pbnN0YWxsZWQgPSBqYXNtaW5lLkNsb2NrLmRl
ZmF1bHRGYWtlVGltZXI7CisgIH0sCisKKyAgdW5pbnN0YWxsTW9jazogZnVuY3Rpb24oKSB7Cisg
ICAgamFzbWluZS5DbG9jay5hc3NlcnRJbnN0YWxsZWQoKTsKKyAgICBqYXNtaW5lLkNsb2NrLmlu
c3RhbGxlZCA9IGphc21pbmUuQ2xvY2sucmVhbDsKKyAgfSwKKworICByZWFsOiB7CisgICAgc2V0
VGltZW91dDogamFzbWluZS5nZXRHbG9iYWwoKS5zZXRUaW1lb3V0LAorICAgIGNsZWFyVGltZW91
dDogamFzbWluZS5nZXRHbG9iYWwoKS5jbGVhclRpbWVvdXQsCisgICAgc2V0SW50ZXJ2YWw6IGph
c21pbmUuZ2V0R2xvYmFsKCkuc2V0SW50ZXJ2YWwsCisgICAgY2xlYXJJbnRlcnZhbDogamFzbWlu
ZS5nZXRHbG9iYWwoKS5jbGVhckludGVydmFsCisgIH0sCisKKyAgYXNzZXJ0SW5zdGFsbGVkOiBm
dW5jdGlvbigpIHsKKyAgICBpZiAoIWphc21pbmUuQ2xvY2suaXNJbnN0YWxsZWQoKSkgeworICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJNb2NrIGNsb2NrIGlzIG5vdCBpbnN0YWxsZWQsIHVzZSBqYXNt
aW5lLkNsb2NrLnVzZU1vY2soKSIpOworICAgIH0KKyAgfSwKKworICBpc0luc3RhbGxlZDogZnVu
Y3Rpb24oKSB7CisgICAgcmV0dXJuIGphc21pbmUuQ2xvY2suaW5zdGFsbGVkID09IGphc21pbmUu
Q2xvY2suZGVmYXVsdEZha2VUaW1lcjsKKyAgfSwKKworICBpbnN0YWxsZWQ6IG51bGwKK307Citq
YXNtaW5lLkNsb2NrLmluc3RhbGxlZCA9IGphc21pbmUuQ2xvY2sucmVhbDsKKworLy9lbHNlIGZv
ciBJRSBzdXBwb3J0CitqYXNtaW5lLmdldEdsb2JhbCgpLnNldFRpbWVvdXQgPSBmdW5jdGlvbihm
dW5jVG9DYWxsLCBtaWxsaXMpIHsKKyAgaWYgKGphc21pbmUuQ2xvY2suaW5zdGFsbGVkLnNldFRp
bWVvdXQuYXBwbHkpIHsKKyAgICByZXR1cm4gamFzbWluZS5DbG9jay5pbnN0YWxsZWQuc2V0VGlt
ZW91dC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICB9IGVsc2UgeworICAgIHJldHVybiBqYXNt
aW5lLkNsb2NrLmluc3RhbGxlZC5zZXRUaW1lb3V0KGZ1bmNUb0NhbGwsIG1pbGxpcyk7CisgIH0K
K307CisKK2phc21pbmUuZ2V0R2xvYmFsKCkuc2V0SW50ZXJ2YWwgPSBmdW5jdGlvbihmdW5jVG9D
YWxsLCBtaWxsaXMpIHsKKyAgaWYgKGphc21pbmUuQ2xvY2suaW5zdGFsbGVkLnNldEludGVydmFs
LmFwcGx5KSB7CisgICAgcmV0dXJuIGphc21pbmUuQ2xvY2suaW5zdGFsbGVkLnNldEludGVydmFs
LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIGphc21pbmUu
Q2xvY2suaW5zdGFsbGVkLnNldEludGVydmFsKGZ1bmNUb0NhbGwsIG1pbGxpcyk7CisgIH0KK307
CisKK2phc21pbmUuZ2V0R2xvYmFsKCkuY2xlYXJUaW1lb3V0ID0gZnVuY3Rpb24odGltZW91dEtl
eSkgeworICBpZiAoamFzbWluZS5DbG9jay5pbnN0YWxsZWQuY2xlYXJUaW1lb3V0LmFwcGx5KSB7
CisgICAgcmV0dXJuIGphc21pbmUuQ2xvY2suaW5zdGFsbGVkLmNsZWFyVGltZW91dC5hcHBseSh0
aGlzLCBhcmd1bWVudHMpOworICB9IGVsc2UgeworICAgIHJldHVybiBqYXNtaW5lLkNsb2NrLmlu
c3RhbGxlZC5jbGVhclRpbWVvdXQodGltZW91dEtleSk7CisgIH0KK307CisKK2phc21pbmUuZ2V0
R2xvYmFsKCkuY2xlYXJJbnRlcnZhbCA9IGZ1bmN0aW9uKHRpbWVvdXRLZXkpIHsKKyAgaWYgKGph
c21pbmUuQ2xvY2suaW5zdGFsbGVkLmNsZWFyVGltZW91dC5hcHBseSkgeworICAgIHJldHVybiBq
YXNtaW5lLkNsb2NrLmluc3RhbGxlZC5jbGVhckludGVydmFsLmFwcGx5KHRoaXMsIGFyZ3VtZW50
cyk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIGphc21pbmUuQ2xvY2suaW5zdGFsbGVkLmNsZWFy
SW50ZXJ2YWwodGltZW91dEtleSk7CisgIH0KK307CisKK2phc21pbmUudmVyc2lvbl89IHsKKyAg
Im1ham9yIjogMSwKKyAgIm1pbm9yIjogMSwKKyAgImJ1aWxkIjogMCwKKyAgInJldmlzaW9uIjog
MTMwODYxODk0OCwKKyAgInJlbGVhc2VfY2FuZGlkYXRlIjogMQorfTsKZGlmZiAtLWdpdCBhL1dl
YnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdodGpz
LWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vdGVzdHMvbGliL2phc21pbmVfZmF2aWNv
bi5wbmcgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNl
cy9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL3Rlc3RzL2xpYi9qYXNt
aW5lX2Zhdmljb24ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIxOGYzYjQzNzEzNTk4ZmE1YTNlNzhiNTdhY2Vi
OTA5YzMzZjQ2ZGYKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDkwNQp6Y21WOzQxOXRxMFApPGg7
M0t8TGswMDBlMU5KTFRxMDAwbUcwMDBtTzFeQHM2QU1eaVYwMDAwNFhGKkx0MDA2TyUKejM7YmFQ
MDAwMDFiNWNoXzBJdHApPT5QeCNBWSh7VU8jbEZUQ0lBM3tnYTgyZzAwMDFoPWx9cTlGYVFBUlU7
cUYqCnptO2VBNWFHYmhQSk9CVXkyNFlKYEw7KEspe3thNz55e0Q0XjAwMFNhTkxoMEwwMUZjVTAx
RmNWMEdnWl8wMDA4dQp6TmtsPFpJTG9EeU9HczI8Nz4ze2ZvZDI4fFBqbUEpN2ZZZzR3OC0oMm15
OXh0QkdPc31LYG4mdDFWenhNT15YKU0KenJXK0xuMXVkYz9xNjxZKShMRHtMKGkkejlHRHBYOSN4
azg2KDszZ2A9JCF2PVE0PjxRaEBSRV4hU31zPEgtY1lHCnpQUGIyQXpvfSstZHN+Tyt7PUtAM1Q1
TXp4MDFVRX1HUVhtMSNrOCE8MHNeazxpTHY8QUU0TlEtdkVjfkRsa2QqMAp6ZUM9ITArQ0lJRjlY
cWtfTXNDaXVCOGlJOSlAfCRkZE90S3BmJipScihfbnlLempNKVJ2em5hQUkrXyVQI1JjPXkKem9L
N1FeQndAe2xidHxXNVhKeX5JZGowbWNvamJQTVVGbH1WNyhgS28tYENMPWpjV2FXOEh+bjlITz84
fjA2MWVQCnp0QztXM24zfn0+VFApejVnQWp0KVAmRCFNJCtISks8QjRSUWtRQjkjPiN4PGB4bkQw
MzB6d0Q/S3J4eFkhMnRsQQp6R2MtNTg/MEQ3U3NUKTdLbT12K3ROVk5Va2A/c0A7Xk94Q0YpeTZQ
fV9tTDt+NztTPEBifE16bUtxKW04bEB5a3kKelQxfkVDcHhad0A2NCFua0kzNFFMaVVzQSVpJU4+
LSQmekdZUjdXSnlpPFp6c1NkOSozeChjQj45RVJNeVMoJWtmCno3QV9yKVg+ITkwJm0oRndEUVo+
cTsrbk9hKktSMitFNkZ6KVF3VT1XMU95byo0Pl9xbG18fmpvYXx7NF9BXzNXOAp6I0ZGWnpScC14
TUl4NWE3RF9GajMmI3JeVGJJWUBjTkQxZDBmKl5xRElzeyFwdyFJV0dRXyVsNCNBU21fRDVWZXQK
ejAlZWs3XilAeFBpaFhfRzAmaEljOSoxNGNhPUQhOG9HfXZXP0glfndeRj9mX3M+elV8ZktyTkpY
Sl9kNnt2IXQoCnpwRW9xTXdzX3lRd3M+M28/Vlc4VHhxfiMtPmRKR15FTFc1aXJSIXNgKF9KdkRe
NjtyK2hvfmVJS0BpYThfbEgoaAp6dCotcD9DRkMxX2gyTVY9P2pQKXt1VyE3V2pMakNhTyZjMUQr
dGY1ODIhWEVhb0IjeFdBWWNONWYkc0x0ZiRrb1cKelFze3s+KVpUcT9GQzZ8Sl8lbn1BV2JpRkso
Qm8tJV4te0hgKilFKHVjam8tciVTWW0pVzVmNnROPXh6PVM2NDZFCmZOWFcjVXt4PzRXWFdKPHpf
Qks0QjAwMDAwTmt2WFh1MG1qZlAmaztoCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1n
aXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9m
bGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL3Rlc3RzL2xpYi9qc29uMi5q
cyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2Zs
aWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vdGVzdHMvbGliL2pzb24yLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmFjNTgwNzkyMWY5ZDVhMTEyOWQ3YWZjMDRmZmZjZjc2M2NjYTJjZGEKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4x
L3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL3Rlc3Rz
L2xpYi9qc29uMi5qcwpAQCAtMCwwICsxLDQ3OCBAQAorLyoKKyAgICBodHRwOi8vd3d3LkpTT04u
b3JnL2pzb24yLmpzCisgICAgMjAwOS0wOC0xNworCisgICAgUHVibGljIERvbWFpbi4KKworICAg
IE5PIFdBUlJBTlRZIEVYUFJFU1NFRCBPUiBJTVBMSUVELiBVU0UgQVQgWU9VUiBPV04gUklTSy4K
KworICAgIFNlZSBodHRwOi8vd3d3LkpTT04ub3JnL2pzLmh0bWwKKworICAgIFRoaXMgZmlsZSBj
cmVhdGVzIGEgZ2xvYmFsIEpTT04gb2JqZWN0IGNvbnRhaW5pbmcgdHdvIG1ldGhvZHM6IHN0cmlu
Z2lmeQorICAgIGFuZCBwYXJzZS4KKworICAgICAgICBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgcmVw
bGFjZXIsIHNwYWNlKQorICAgICAgICAgICAgdmFsdWUgICAgICAgYW55IEphdmFTY3JpcHQgdmFs
dWUsIHVzdWFsbHkgYW4gb2JqZWN0IG9yIGFycmF5LgorCisgICAgICAgICAgICByZXBsYWNlciAg
ICBhbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBkZXRlcm1pbmVzIGhvdyBvYmplY3QKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbHVlcyBhcmUgc3RyaW5naWZpZWQgZm9yIG9iamVjdHMuIEl0
IGNhbiBiZSBhCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBvciBhbiBhcnJheSBv
ZiBzdHJpbmdzLgorCisgICAgICAgICAgICBzcGFjZSAgICAgICBhbiBvcHRpb25hbCBwYXJhbWV0
ZXIgdGhhdCBzcGVjaWZpZXMgdGhlIGluZGVudGF0aW9uCisgICAgICAgICAgICAgICAgICAgICAg
ICBvZiBuZXN0ZWQgc3RydWN0dXJlcy4gSWYgaXQgaXMgb21pdHRlZCwgdGhlIHRleHQgd2lsbAor
ICAgICAgICAgICAgICAgICAgICAgICAgYmUgcGFja2VkIHdpdGhvdXQgZXh0cmEgd2hpdGVzcGFj
ZS4gSWYgaXQgaXMgYSBudW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBpdCB3aWxsIHNw
ZWNpZnkgdGhlIG51bWJlciBvZiBzcGFjZXMgdG8gaW5kZW50IGF0IGVhY2gKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGxldmVsLiBJZiBpdCBpcyBhIHN0cmluZyAoc3VjaCBhcyAnXHQnIG9yICcm
bmJzcDsnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0IGNvbnRhaW5zIHRoZSBjaGFyYWN0
ZXJzIHVzZWQgdG8gaW5kZW50IGF0IGVhY2ggbGV2ZWwuCisKKyAgICAgICAgICAgIFRoaXMgbWV0
aG9kIHByb2R1Y2VzIGEgSlNPTiB0ZXh0IGZyb20gYSBKYXZhU2NyaXB0IHZhbHVlLgorCisgICAg
ICAgICAgICBXaGVuIGFuIG9iamVjdCB2YWx1ZSBpcyBmb3VuZCwgaWYgdGhlIG9iamVjdCBjb250
YWlucyBhIHRvSlNPTgorICAgICAgICAgICAgbWV0aG9kLCBpdHMgdG9KU09OIG1ldGhvZCB3aWxs
IGJlIGNhbGxlZCBhbmQgdGhlIHJlc3VsdCB3aWxsIGJlCisgICAgICAgICAgICBzdHJpbmdpZmll
ZC4gQSB0b0pTT04gbWV0aG9kIGRvZXMgbm90IHNlcmlhbGl6ZTogaXQgcmV0dXJucyB0aGUKKyAg
ICAgICAgICAgIHZhbHVlIHJlcHJlc2VudGVkIGJ5IHRoZSBuYW1lL3ZhbHVlIHBhaXIgdGhhdCBz
aG91bGQgYmUgc2VyaWFsaXplZCwKKyAgICAgICAgICAgIG9yIHVuZGVmaW5lZCBpZiBub3RoaW5n
IHNob3VsZCBiZSBzZXJpYWxpemVkLiBUaGUgdG9KU09OIG1ldGhvZAorICAgICAgICAgICAgd2ls
bCBiZSBwYXNzZWQgdGhlIGtleSBhc3NvY2lhdGVkIHdpdGggdGhlIHZhbHVlLCBhbmQgdGhpcyB3
aWxsIGJlCisgICAgICAgICAgICBib3VuZCB0byB0aGUgdmFsdWUKKworICAgICAgICAgICAgRm9y
IGV4YW1wbGUsIHRoaXMgd291bGQgc2VyaWFsaXplIERhdGVzIGFzIElTTyBzdHJpbmdzLgorCisg
ICAgICAgICAgICAgICAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKGtleSkgewor
ICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBmKG4pIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEZvcm1hdCBpbnRlZ2VycyB0byBoYXZlIGF0IGxlYXN0IHR3byBkaWdpdHMuCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbiA8IDEwID8gJzAnICsgbiA6IG47CisgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRVVENG
dWxsWWVhcigpICAgKyAnLScgKworICAgICAgICAgICAgICAgICAgICAgICAgIGYodGhpcy5nZXRV
VENNb250aCgpICsgMSkgKyAnLScgKworICAgICAgICAgICAgICAgICAgICAgICAgIGYodGhpcy5n
ZXRVVENEYXRlKCkpICAgICAgKyAnVCcgKworICAgICAgICAgICAgICAgICAgICAgICAgIGYodGhp
cy5nZXRVVENIb3VycygpKSAgICAgKyAnOicgKworICAgICAgICAgICAgICAgICAgICAgICAgIGYo
dGhpcy5nZXRVVENNaW51dGVzKCkpICAgKyAnOicgKworICAgICAgICAgICAgICAgICAgICAgICAg
IGYodGhpcy5nZXRVVENTZWNvbmRzKCkpICAgKyAnWic7CisgICAgICAgICAgICAgICAgfTsKKwor
ICAgICAgICAgICAgWW91IGNhbiBwcm92aWRlIGFuIG9wdGlvbmFsIHJlcGxhY2VyIG1ldGhvZC4g
SXQgd2lsbCBiZSBwYXNzZWQgdGhlCisgICAgICAgICAgICBrZXkgYW5kIHZhbHVlIG9mIGVhY2gg
bWVtYmVyLCB3aXRoIHRoaXMgYm91bmQgdG8gdGhlIGNvbnRhaW5pbmcKKyAgICAgICAgICAgIG9i
amVjdC4gVGhlIHZhbHVlIHRoYXQgaXMgcmV0dXJuZWQgZnJvbSB5b3VyIG1ldGhvZCB3aWxsIGJl
CisgICAgICAgICAgICBzZXJpYWxpemVkLiBJZiB5b3VyIG1ldGhvZCByZXR1cm5zIHVuZGVmaW5l
ZCwgdGhlbiB0aGUgbWVtYmVyIHdpbGwKKyAgICAgICAgICAgIGJlIGV4Y2x1ZGVkIGZyb20gdGhl
IHNlcmlhbGl6YXRpb24uCisKKyAgICAgICAgICAgIElmIHRoZSByZXBsYWNlciBwYXJhbWV0ZXIg
aXMgYW4gYXJyYXkgb2Ygc3RyaW5ncywgdGhlbiBpdCB3aWxsIGJlCisgICAgICAgICAgICB1c2Vk
IHRvIHNlbGVjdCB0aGUgbWVtYmVycyB0byBiZSBzZXJpYWxpemVkLiBJdCBmaWx0ZXJzIHRoZSBy
ZXN1bHRzCisgICAgICAgICAgICBzdWNoIHRoYXQgb25seSBtZW1iZXJzIHdpdGgga2V5cyBsaXN0
ZWQgaW4gdGhlIHJlcGxhY2VyIGFycmF5IGFyZQorICAgICAgICAgICAgc3RyaW5naWZpZWQuCisK
KyAgICAgICAgICAgIFZhbHVlcyB0aGF0IGRvIG5vdCBoYXZlIEpTT04gcmVwcmVzZW50YXRpb25z
LCBzdWNoIGFzIHVuZGVmaW5lZCBvcgorICAgICAgICAgICAgZnVuY3Rpb25zLCB3aWxsIG5vdCBi
ZSBzZXJpYWxpemVkLiBTdWNoIHZhbHVlcyBpbiBvYmplY3RzIHdpbGwgYmUKKyAgICAgICAgICAg
IGRyb3BwZWQ7IGluIGFycmF5cyB0aGV5IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBudWxsLiBZb3Ug
Y2FuIHVzZQorICAgICAgICAgICAgYSByZXBsYWNlciBmdW5jdGlvbiB0byByZXBsYWNlIHRob3Nl
IHdpdGggSlNPTiB2YWx1ZXMuCisgICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh1bmRlZmluZWQp
IHJldHVybnMgdW5kZWZpbmVkLgorCisgICAgICAgICAgICBUaGUgb3B0aW9uYWwgc3BhY2UgcGFy
YW1ldGVyIHByb2R1Y2VzIGEgc3RyaW5naWZpY2F0aW9uIG9mIHRoZQorICAgICAgICAgICAgdmFs
dWUgdGhhdCBpcyBmaWxsZWQgd2l0aCBsaW5lIGJyZWFrcyBhbmQgaW5kZW50YXRpb24gdG8gbWFr
ZSBpdAorICAgICAgICAgICAgZWFzaWVyIHRvIHJlYWQuCisKKyAgICAgICAgICAgIElmIHRoZSBz
cGFjZSBwYXJhbWV0ZXIgaXMgYSBub24tZW1wdHkgc3RyaW5nLCB0aGVuIHRoYXQgc3RyaW5nIHdp
bGwKKyAgICAgICAgICAgIGJlIHVzZWQgZm9yIGluZGVudGF0aW9uLiBJZiB0aGUgc3BhY2UgcGFy
YW1ldGVyIGlzIGEgbnVtYmVyLCB0aGVuCisgICAgICAgICAgICB0aGUgaW5kZW50YXRpb24gd2ls
bCBiZSB0aGF0IG1hbnkgc3BhY2VzLgorCisgICAgICAgICAgICBFeGFtcGxlOgorCisgICAgICAg
ICAgICB0ZXh0ID0gSlNPTi5zdHJpbmdpZnkoWydlJywge3BsdXJpYnVzOiAndW51bSd9XSk7Cisg
ICAgICAgICAgICAvLyB0ZXh0IGlzICdbImUiLHsicGx1cmlidXMiOiJ1bnVtIn1dJworCisKKyAg
ICAgICAgICAgIHRleHQgPSBKU09OLnN0cmluZ2lmeShbJ2UnLCB7cGx1cmlidXM6ICd1bnVtJ31d
LCBudWxsLCAnXHQnKTsKKyAgICAgICAgICAgIC8vIHRleHQgaXMgJ1tcblx0ImUiLFxuXHR7XG5c
dFx0InBsdXJpYnVzIjogInVudW0iXG5cdH1cbl0nCisKKyAgICAgICAgICAgIHRleHQgPSBKU09O
LnN0cmluZ2lmeShbbmV3IERhdGUoKV0sIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXNba2V5XSBpbnN0YW5jZW9mIERhdGUgPworICAgICAgICAgICAg
ICAgICAgICAnRGF0ZSgnICsgdGhpc1trZXldICsgJyknIDogdmFsdWU7CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIC8vIHRleHQgaXMgJ1siRGF0ZSgtLS1jdXJyZW50IHRpbWUtLS0pIl0n
CisKKworICAgICAgICBKU09OLnBhcnNlKHRleHQsIHJldml2ZXIpCisgICAgICAgICAgICBUaGlz
IG1ldGhvZCBwYXJzZXMgYSBKU09OIHRleHQgdG8gcHJvZHVjZSBhbiBvYmplY3Qgb3IgYXJyYXku
CisgICAgICAgICAgICBJdCBjYW4gdGhyb3cgYSBTeW50YXhFcnJvciBleGNlcHRpb24uCisKKyAg
ICAgICAgICAgIFRoZSBvcHRpb25hbCByZXZpdmVyIHBhcmFtZXRlciBpcyBhIGZ1bmN0aW9uIHRo
YXQgY2FuIGZpbHRlciBhbmQKKyAgICAgICAgICAgIHRyYW5zZm9ybSB0aGUgcmVzdWx0cy4gSXQg
cmVjZWl2ZXMgZWFjaCBvZiB0aGUga2V5cyBhbmQgdmFsdWVzLAorICAgICAgICAgICAgYW5kIGl0
cyByZXR1cm4gdmFsdWUgaXMgdXNlZCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCB2YWx1ZS4KKyAg
ICAgICAgICAgIElmIGl0IHJldHVybnMgd2hhdCBpdCByZWNlaXZlZCwgdGhlbiB0aGUgc3RydWN0
dXJlIGlzIG5vdCBtb2RpZmllZC4KKyAgICAgICAgICAgIElmIGl0IHJldHVybnMgdW5kZWZpbmVk
IHRoZW4gdGhlIG1lbWJlciBpcyBkZWxldGVkLgorCisgICAgICAgICAgICBFeGFtcGxlOgorCisg
ICAgICAgICAgICAvLyBQYXJzZSB0aGUgdGV4dC4gVmFsdWVzIHRoYXQgbG9vayBsaWtlIElTTyBk
YXRlIHN0cmluZ3Mgd2lsbAorICAgICAgICAgICAgLy8gYmUgY29udmVydGVkIHRvIERhdGUgb2Jq
ZWN0cy4KKworICAgICAgICAgICAgbXlEYXRhID0gSlNPTi5wYXJzZSh0ZXh0LCBmdW5jdGlvbiAo
a2V5LCB2YWx1ZSkgeworICAgICAgICAgICAgICAgIHZhciBhOworICAgICAgICAgICAgICAgIGlm
ICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7CisgICAgICAgICAgICAgICAgICAgIGEgPQor
L14oXGR7NH0pLShcZHsyfSktKFxkezJ9KVQoXGR7Mn0pOihcZHsyfSk6KFxkezJ9KD86XC5cZCop
PylaJC8uZXhlYyh2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChhKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoK2FbMV0sICthWzJdIC0g
MSwgK2FbM10sICthWzRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICthWzVdLCArYVs2
XSkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBteURh
dGEgPSBKU09OLnBhcnNlKCdbIkRhdGUoMDkvMDkvMjAwMSkiXScsIGZ1bmN0aW9uIChrZXksIHZh
bHVlKSB7CisgICAgICAgICAgICAgICAgdmFyIGQ7CisgICAgICAgICAgICAgICAgaWYgKHR5cGVv
ZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnNs
aWNlKDAsIDUpID09PSAnRGF0ZSgnICYmCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5z
bGljZSgtMSkgPT09ICcpJykgeworICAgICAgICAgICAgICAgICAgICBkID0gbmV3IERhdGUodmFs
dWUuc2xpY2UoNSwgLTEpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBkOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgICAgIH0p
OworCisKKyAgICBUaGlzIGlzIGEgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uLiBZb3UgYXJlIGZy
ZWUgdG8gY29weSwgbW9kaWZ5LCBvcgorICAgIHJlZGlzdHJpYnV0ZS4KKworICAgIFRoaXMgY29k
ZSBzaG91bGQgYmUgbWluaWZpZWQgYmVmb3JlIGRlcGxveW1lbnQuCisgICAgU2VlIGh0dHA6Ly9q
YXZhc2NyaXB0LmNyb2NrZm9yZC5jb20vanNtaW4uaHRtbAorCisgICAgVVNFIFlPVVIgT1dOIENP
UFkuIElUIElTIEVYVFJFTUVMWSBVTldJU0UgVE8gTE9BRCBDT0RFIEZST00gU0VSVkVSUyBZT1Ug
RE8KKyAgICBOT1QgQ09OVFJPTC4KKyovCisKKy8qanNsaW50IGV2aWw6IHRydWUgKi8KKworLypt
ZW1iZXJzICIiLCAiXGIiLCAiXHQiLCAiXG4iLCAiXGYiLCAiXHIiLCAiXCIiLCBKU09OLCAiXFwi
LCBhcHBseSwKKyAgICBjYWxsLCBjaGFyQ29kZUF0LCBnZXRVVENEYXRlLCBnZXRVVENGdWxsWWVh
ciwgZ2V0VVRDSG91cnMsCisgICAgZ2V0VVRDTWludXRlcywgZ2V0VVRDTW9udGgsIGdldFVUQ1Nl
Y29uZHMsIGhhc093blByb3BlcnR5LCBqb2luLAorICAgIGxhc3RJbmRleCwgbGVuZ3RoLCBwYXJz
ZSwgcHJvdG90eXBlLCBwdXNoLCByZXBsYWNlLCBzbGljZSwgc3RyaW5naWZ5LAorICAgIHRlc3Qs
IHRvSlNPTiwgdG9TdHJpbmcsIHZhbHVlT2YKKyovCisKKyJ1c2Ugc3RyaWN0IjsKKworLy8gQ3Jl
YXRlIGEgSlNPTiBvYmplY3Qgb25seSBpZiBvbmUgZG9lcyBub3QgYWxyZWFkeSBleGlzdC4gV2Ug
Y3JlYXRlIHRoZQorLy8gbWV0aG9kcyBpbiBhIGNsb3N1cmUgdG8gYXZvaWQgY3JlYXRpbmcgZ2xv
YmFsIHZhcmlhYmxlcy4KKworaWYgKCF0aGlzLkpTT04pIHsKKyAgICB0aGlzLkpTT04gPSB7fTsK
K30KKworKGZ1bmN0aW9uICgpIHsKKworICAgIGZ1bmN0aW9uIGYobikgeworICAgICAgICAvLyBG
b3JtYXQgaW50ZWdlcnMgdG8gaGF2ZSBhdCBsZWFzdCB0d28gZGlnaXRzLgorICAgICAgICByZXR1
cm4gbiA8IDEwID8gJzAnICsgbiA6IG47CisgICAgfQorCisgICAgaWYgKHR5cGVvZiBEYXRlLnBy
b3RvdHlwZS50b0pTT04gIT09ICdmdW5jdGlvbicpIHsKKworICAgICAgICBEYXRlLnByb3RvdHlw
ZS50b0pTT04gPSBmdW5jdGlvbiAoa2V5KSB7CisKKyAgICAgICAgICAgIHJldHVybiBpc0Zpbml0
ZSh0aGlzLnZhbHVlT2YoKSkgPworICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0VVRDRnVsbFll
YXIoKSAgICsgJy0nICsKKyAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ01vbnRoKCkgKyAx
KSArICctJyArCisgICAgICAgICAgICAgICAgIGYodGhpcy5nZXRVVENEYXRlKCkpICAgICAgKyAn
VCcgKworICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDSG91cnMoKSkgICAgICsgJzonICsK
KyAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ01pbnV0ZXMoKSkgICArICc6JyArCisgICAg
ICAgICAgICAgICAgIGYodGhpcy5nZXRVVENTZWNvbmRzKCkpICAgKyAnWicgOiBudWxsOworICAg
ICAgICB9OworCisgICAgICAgIFN0cmluZy5wcm90b3R5cGUudG9KU09OID0KKyAgICAgICAgTnVt
YmVyLnByb3RvdHlwZS50b0pTT04gPQorICAgICAgICBCb29sZWFuLnByb3RvdHlwZS50b0pTT04g
PSBmdW5jdGlvbiAoa2V5KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCk7Cisg
ICAgICAgIH07CisgICAgfQorCisgICAgdmFyIGN4ID0gL1tcdTAwMDBcdTAwYWRcdTA2MDAtXHUw
NjA0XHUwNzBmXHUxN2I0XHUxN2I1XHUyMDBjLVx1MjAwZlx1MjAyOC1cdTIwMmZcdTIwNjAtXHUy
MDZmXHVmZWZmXHVmZmYwLVx1ZmZmZl0vZywKKyAgICAgICAgZXNjYXBhYmxlID0gL1tcXFwiXHgw
MC1ceDFmXHg3Zi1ceDlmXHUwMGFkXHUwNjAwLVx1MDYwNFx1MDcwZlx1MTdiNFx1MTdiNVx1MjAw
Yy1cdTIwMGZcdTIwMjgtXHUyMDJmXHUyMDYwLVx1MjA2Zlx1ZmVmZlx1ZmZmMC1cdWZmZmZdL2cs
CisgICAgICAgIGdhcCwKKyAgICAgICAgaW5kZW50LAorICAgICAgICBtZXRhID0geyAgICAvLyB0
YWJsZSBvZiBjaGFyYWN0ZXIgc3Vic3RpdHV0aW9ucworICAgICAgICAgICAgJ1xiJzogJ1xcYics
CisgICAgICAgICAgICAnXHQnOiAnXFx0JywKKyAgICAgICAgICAgICdcbic6ICdcXG4nLAorICAg
ICAgICAgICAgJ1xmJzogJ1xcZicsCisgICAgICAgICAgICAnXHInOiAnXFxyJywKKyAgICAgICAg
ICAgICciJyA6ICdcXCInLAorICAgICAgICAgICAgJ1xcJzogJ1xcXFwnCisgICAgICAgIH0sCisg
ICAgICAgIHJlcDsKKworCisgICAgZnVuY3Rpb24gcXVvdGUoc3RyaW5nKSB7CisKKy8vIElmIHRo
ZSBzdHJpbmcgY29udGFpbnMgbm8gY29udHJvbCBjaGFyYWN0ZXJzLCBubyBxdW90ZSBjaGFyYWN0
ZXJzLCBhbmQgbm8KKy8vIGJhY2tzbGFzaCBjaGFyYWN0ZXJzLCB0aGVuIHdlIGNhbiBzYWZlbHkg
c2xhcCBzb21lIHF1b3RlcyBhcm91bmQgaXQuCisvLyBPdGhlcndpc2Ugd2UgbXVzdCBhbHNvIHJl
cGxhY2UgdGhlIG9mZmVuZGluZyBjaGFyYWN0ZXJzIHdpdGggc2FmZSBlc2NhcGUKKy8vIHNlcXVl
bmNlcy4KKworICAgICAgICBlc2NhcGFibGUubGFzdEluZGV4ID0gMDsKKyAgICAgICAgcmV0dXJu
IGVzY2FwYWJsZS50ZXN0KHN0cmluZykgPworICAgICAgICAgICAgJyInICsgc3RyaW5nLnJlcGxh
Y2UoZXNjYXBhYmxlLCBmdW5jdGlvbiAoYSkgeworICAgICAgICAgICAgICAgIHZhciBjID0gbWV0
YVthXTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIGMgPT09ICdzdHJpbmcnID8gYyA6
CisgICAgICAgICAgICAgICAgICAgICdcXHUnICsgKCcwMDAwJyArIGEuY2hhckNvZGVBdCgwKS50
b1N0cmluZygxNikpLnNsaWNlKC00KTsKKyAgICAgICAgICAgIH0pICsgJyInIDoKKyAgICAgICAg
ICAgICciJyArIHN0cmluZyArICciJzsKKyAgICB9CisKKworICAgIGZ1bmN0aW9uIHN0cihrZXks
IGhvbGRlcikgeworLy8gUHJvZHVjZSBhIHN0cmluZyBmcm9tIGhvbGRlcltrZXldLgorCisgICAg
ICAgIHZhciBpLCAgICAgICAgICAvLyBUaGUgbG9vcCBjb3VudGVyLgorICAgICAgICAgICAgaywg
ICAgICAgICAgLy8gVGhlIG1lbWJlciBrZXkuCisgICAgICAgICAgICB2LCAgICAgICAgICAvLyBU
aGUgbWVtYmVyIHZhbHVlLgorICAgICAgICAgICAgbGVuZ3RoLAorICAgICAgICAgICAgbWluZCA9
IGdhcCwKKyAgICAgICAgICAgIHBhcnRpYWwsCisgICAgICAgICAgICB2YWx1ZSA9IGhvbGRlcltr
ZXldOworCisvLyBJZiB0aGUgdmFsdWUgaGFzIGEgdG9KU09OIG1ldGhvZCwgY2FsbCBpdCB0byBv
YnRhaW4gYSByZXBsYWNlbWVudCB2YWx1ZS4KKworICAgICAgICBpZiAodmFsdWUgJiYgdHlwZW9m
IHZhbHVlID09PSAnb2JqZWN0JyAmJgorICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZS50b0pT
T04gPT09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudG9KU09OKGtl
eSk7CisgICAgICAgIH0KKworLy8gSWYgd2Ugd2VyZSBjYWxsZWQgd2l0aCBhIHJlcGxhY2VyIGZ1
bmN0aW9uLCB0aGVuIGNhbGwgdGhlIHJlcGxhY2VyIHRvCisvLyBvYnRhaW4gYSByZXBsYWNlbWVu
dCB2YWx1ZS4KKworICAgICAgICBpZiAodHlwZW9mIHJlcCA9PT0gJ2Z1bmN0aW9uJykgeworICAg
ICAgICAgICAgdmFsdWUgPSByZXAuY2FsbChob2xkZXIsIGtleSwgdmFsdWUpOworICAgICAgICB9
CisKKy8vIFdoYXQgaGFwcGVucyBuZXh0IGRlcGVuZHMgb24gdGhlIHZhbHVlJ3MgdHlwZS4KKwor
ICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkgeworICAgICAgICBjYXNlICdzdHJpbmcnOgor
ICAgICAgICAgICAgcmV0dXJuIHF1b3RlKHZhbHVlKTsKKworICAgICAgICBjYXNlICdudW1iZXIn
OgorCisvLyBKU09OIG51bWJlcnMgbXVzdCBiZSBmaW5pdGUuIEVuY29kZSBub24tZmluaXRlIG51
bWJlcnMgYXMgbnVsbC4KKworICAgICAgICAgICAgcmV0dXJuIGlzRmluaXRlKHZhbHVlKSA/IFN0
cmluZyh2YWx1ZSkgOiAnbnVsbCc7CisKKyAgICAgICAgY2FzZSAnYm9vbGVhbic6CisgICAgICAg
IGNhc2UgJ251bGwnOgorCisvLyBJZiB0aGUgdmFsdWUgaXMgYSBib29sZWFuIG9yIG51bGwsIGNv
bnZlcnQgaXQgdG8gYSBzdHJpbmcuIE5vdGU6CisvLyB0eXBlb2YgbnVsbCBkb2VzIG5vdCBwcm9k
dWNlICdudWxsJy4gVGhlIGNhc2UgaXMgaW5jbHVkZWQgaGVyZSBpbgorLy8gdGhlIHJlbW90ZSBj
aGFuY2UgdGhhdCB0aGlzIGdldHMgZml4ZWQgc29tZWRheS4KKworICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyh2YWx1ZSk7CisKKy8vIElmIHRoZSB0eXBlIGlzICdvYmplY3QnLCB3ZSBtaWdodCBi
ZSBkZWFsaW5nIHdpdGggYW4gb2JqZWN0IG9yIGFuIGFycmF5IG9yCisvLyBudWxsLgorCisgICAg
ICAgIGNhc2UgJ29iamVjdCc6CisKKy8vIER1ZSB0byBhIHNwZWNpZmljYXRpb24gYmx1bmRlciBp
biBFQ01BU2NyaXB0LCB0eXBlb2YgbnVsbCBpcyAnb2JqZWN0JywKKy8vIHNvIHdhdGNoIG91dCBm
b3IgdGhhdCBjYXNlLgorCisgICAgICAgICAgICBpZiAoIXZhbHVlKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuICdudWxsJzsKKyAgICAgICAgICAgIH0KKworLy8gTWFrZSBhbiBhcnJheSB0byBo
b2xkIHRoZSBwYXJ0aWFsIHJlc3VsdHMgb2Ygc3RyaW5naWZ5aW5nIHRoaXMgb2JqZWN0IHZhbHVl
LgorCisgICAgICAgICAgICBnYXAgKz0gaW5kZW50OworICAgICAgICAgICAgcGFydGlhbCA9IFtd
OworCisvLyBJcyB0aGUgdmFsdWUgYW4gYXJyYXk/CisKKyAgICAgICAgICAgIGlmIChPYmplY3Qu
cHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KHZhbHVlKSA9PT0gJ1tvYmplY3QgQXJyYXldJykgewor
CisvLyBUaGUgdmFsdWUgaXMgYW4gYXJyYXkuIFN0cmluZ2lmeSBldmVyeSBlbGVtZW50LiBVc2Ug
bnVsbCBhcyBhIHBsYWNlaG9sZGVyCisvLyBmb3Igbm9uLUpTT04gdmFsdWVzLgorCisgICAgICAg
ICAgICAgICAgbGVuZ3RoID0gdmFsdWUubGVuZ3RoOworICAgICAgICAgICAgICAgIGZvciAoaSA9
IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkgeworICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsW2ld
ID0gc3RyKGksIHZhbHVlKSB8fCAnbnVsbCc7CisgICAgICAgICAgICAgICAgfQorCisvLyBKb2lu
IGFsbCBvZiB0aGUgZWxlbWVudHMgdG9nZXRoZXIsIHNlcGFyYXRlZCB3aXRoIGNvbW1hcywgYW5k
IHdyYXAgdGhlbSBpbgorLy8gYnJhY2tldHMuCisKKyAgICAgICAgICAgICAgICB2ID0gcGFydGlh
bC5sZW5ndGggPT09IDAgPyAnW10nIDoKKyAgICAgICAgICAgICAgICAgICAgZ2FwID8gJ1tcbicg
KyBnYXAgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWwuam9pbignLFxuJyAr
IGdhcCkgKyAnXG4nICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluZCArICdd
JyA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICdbJyArIHBhcnRpYWwuam9pbignLCcpICsg
J10nOworICAgICAgICAgICAgICAgIGdhcCA9IG1pbmQ7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHY7CisgICAgICAgICAgICB9CisKKy8vIElmIHRoZSByZXBsYWNlciBpcyBhbiBhcnJheSwgdXNl
IGl0IHRvIHNlbGVjdCB0aGUgbWVtYmVycyB0byBiZSBzdHJpbmdpZmllZC4KKworICAgICAgICAg
ICAgaWYgKHJlcCAmJiB0eXBlb2YgcmVwID09PSAnb2JqZWN0JykgeworICAgICAgICAgICAgICAg
IGxlbmd0aCA9IHJlcC5sZW5ndGg7CisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxl
bmd0aDsgaSArPSAxKSB7CisgICAgICAgICAgICAgICAgICAgIGsgPSByZXBbaV07CisgICAgICAg
ICAgICAgICAgICAgIGlmICh0eXBlb2YgayA9PT0gJ3N0cmluZycpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHYgPSBzdHIoaywgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsLnB1c2gocXVvdGUoaykg
KyAoZ2FwID8gJzogJyA6ICc6JykgKyB2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxz
ZSB7CisKKy8vIE90aGVyd2lzZSwgaXRlcmF0ZSB0aHJvdWdoIGFsbCBvZiB0aGUga2V5cyBpbiB0
aGUgb2JqZWN0LgorCisgICAgICAgICAgICAgICAgZm9yIChrIGluIHZhbHVlKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgaykpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBzdHIoaywgdmFsdWUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWFs
LnB1c2gocXVvdGUoaykgKyAoZ2FwID8gJzogJyA6ICc6JykgKyB2KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworLy8gSm9pbiBhbGwgb2YgdGhlIG1lbWJlciB0ZXh0cyB0b2dldGhlciwg
c2VwYXJhdGVkIHdpdGggY29tbWFzLAorLy8gYW5kIHdyYXAgdGhlbSBpbiBicmFjZXMuCisKKyAg
ICAgICAgICAgIHYgPSBwYXJ0aWFsLmxlbmd0aCA9PT0gMCA/ICd7fScgOgorICAgICAgICAgICAg
ICAgIGdhcCA/ICd7XG4nICsgZ2FwICsgcGFydGlhbC5qb2luKCcsXG4nICsgZ2FwKSArICdcbicg
KworICAgICAgICAgICAgICAgICAgICAgICAgbWluZCArICd9JyA6ICd7JyArIHBhcnRpYWwuam9p
bignLCcpICsgJ30nOworICAgICAgICAgICAgZ2FwID0gbWluZDsKKyAgICAgICAgICAgIHJldHVy
biB2OworICAgICAgICB9CisgICAgfQorCisvLyBJZiB0aGUgSlNPTiBvYmplY3QgZG9lcyBub3Qg
eWV0IGhhdmUgYSBzdHJpbmdpZnkgbWV0aG9kLCBnaXZlIGl0IG9uZS4KKworICAgIGlmICh0eXBl
b2YgSlNPTi5zdHJpbmdpZnkgIT09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgSlNPTi5zdHJpbmdp
ZnkgPSBmdW5jdGlvbiAodmFsdWUsIHJlcGxhY2VyLCBzcGFjZSkgeworLy8gVGhlIHN0cmluZ2lm
eSBtZXRob2QgdGFrZXMgYSB2YWx1ZSBhbmQgYW4gb3B0aW9uYWwgcmVwbGFjZXIsIGFuZCBhbiBv
cHRpb25hbAorLy8gc3BhY2UgcGFyYW1ldGVyLCBhbmQgcmV0dXJucyBhIEpTT04gdGV4dC4gVGhl
IHJlcGxhY2VyIGNhbiBiZSBhIGZ1bmN0aW9uCisvLyB0aGF0IGNhbiByZXBsYWNlIHZhbHVlcywg
b3IgYW4gYXJyYXkgb2Ygc3RyaW5ncyB0aGF0IHdpbGwgc2VsZWN0IHRoZSBrZXlzLgorLy8gQSBk
ZWZhdWx0IHJlcGxhY2VyIG1ldGhvZCBjYW4gYmUgcHJvdmlkZWQuIFVzZSBvZiB0aGUgc3BhY2Ug
cGFyYW1ldGVyIGNhbgorLy8gcHJvZHVjZSB0ZXh0IHRoYXQgaXMgbW9yZSBlYXNpbHkgcmVhZGFi
bGUuCisKKyAgICAgICAgICAgIHZhciBpOworICAgICAgICAgICAgZ2FwID0gJyc7CisgICAgICAg
ICAgICBpbmRlbnQgPSAnJzsKKworLy8gSWYgdGhlIHNwYWNlIHBhcmFtZXRlciBpcyBhIG51bWJl
ciwgbWFrZSBhbiBpbmRlbnQgc3RyaW5nIGNvbnRhaW5pbmcgdGhhdAorLy8gbWFueSBzcGFjZXMu
CisKKyAgICAgICAgICAgIGlmICh0eXBlb2Ygc3BhY2UgPT09ICdudW1iZXInKSB7CisgICAgICAg
ICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNwYWNlOyBpICs9IDEpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaW5kZW50ICs9ICcgJzsKKyAgICAgICAgICAgICAgICB9CisKKy8vIElmIHRoZSBzcGFj
ZSBwYXJhbWV0ZXIgaXMgYSBzdHJpbmcsIGl0IHdpbGwgYmUgdXNlZCBhcyB0aGUgaW5kZW50IHN0
cmluZy4KKworICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3BhY2UgPT09ICdzdHJpbmcn
KSB7CisgICAgICAgICAgICAgICAgaW5kZW50ID0gc3BhY2U7CisgICAgICAgICAgICB9CisKKy8v
IElmIHRoZXJlIGlzIGEgcmVwbGFjZXIsIGl0IG11c3QgYmUgYSBmdW5jdGlvbiBvciBhbiBhcnJh
eS4KKy8vIE90aGVyd2lzZSwgdGhyb3cgYW4gZXJyb3IuCisKKyAgICAgICAgICAgIHJlcCA9IHJl
cGxhY2VyOworICAgICAgICAgICAgaWYgKHJlcGxhY2VyICYmIHR5cGVvZiByZXBsYWNlciAhPT0g
J2Z1bmN0aW9uJyAmJgorICAgICAgICAgICAgICAgICAgICAodHlwZW9mIHJlcGxhY2VyICE9PSAn
b2JqZWN0JyB8fAorICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHJlcGxhY2VyLmxlbmd0aCAh
PT0gJ251bWJlcicpKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdKU09OLnN0
cmluZ2lmeScpOworICAgICAgICAgICAgfQorCisvLyBNYWtlIGEgZmFrZSByb290IG9iamVjdCBj
b250YWluaW5nIG91ciB2YWx1ZSB1bmRlciB0aGUga2V5IG9mICcnLgorLy8gUmV0dXJuIHRoZSBy
ZXN1bHQgb2Ygc3RyaW5naWZ5aW5nIHRoZSB2YWx1ZS4KKworICAgICAgICAgICAgcmV0dXJuIHN0
cignJywgeycnOiB2YWx1ZX0pOworICAgICAgICB9OworICAgIH0KKworCisvLyBJZiB0aGUgSlNP
TiBvYmplY3QgZG9lcyBub3QgeWV0IGhhdmUgYSBwYXJzZSBtZXRob2QsIGdpdmUgaXQgb25lLgor
CisgICAgaWYgKHR5cGVvZiBKU09OLnBhcnNlICE9PSAnZnVuY3Rpb24nKSB7CisgICAgICAgIEpT
T04ucGFyc2UgPSBmdW5jdGlvbiAodGV4dCwgcmV2aXZlcikgeworCisvLyBUaGUgcGFyc2UgbWV0
aG9kIHRha2VzIGEgdGV4dCBhbmQgYW4gb3B0aW9uYWwgcmV2aXZlciBmdW5jdGlvbiwgYW5kIHJl
dHVybnMKKy8vIGEgSmF2YVNjcmlwdCB2YWx1ZSBpZiB0aGUgdGV4dCBpcyBhIHZhbGlkIEpTT04g
dGV4dC4KKworICAgICAgICAgICAgdmFyIGo7CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIHdhbGso
aG9sZGVyLCBrZXkpIHsKKworLy8gVGhlIHdhbGsgbWV0aG9kIGlzIHVzZWQgdG8gcmVjdXJzaXZl
bHkgd2FsayB0aGUgcmVzdWx0aW5nIHN0cnVjdHVyZSBzbworLy8gdGhhdCBtb2RpZmljYXRpb25z
IGNhbiBiZSBtYWRlLgorCisgICAgICAgICAgICAgICAgdmFyIGssIHYsIHZhbHVlID0gaG9sZGVy
W2tleV07CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29i
amVjdCcpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChrIGluIHZhbHVlKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGsp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiA9IHdhbGsodmFsdWUsIGspOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVba10gPSB2OworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0
ZSB2YWx1ZVtrXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHJldml2ZXIuY2FsbChob2xkZXIsIGtleSwgdmFsdWUpOwor
ICAgICAgICAgICAgfQorCisKKy8vIFBhcnNpbmcgaGFwcGVucyBpbiBmb3VyIHN0YWdlcy4gSW4g
dGhlIGZpcnN0IHN0YWdlLCB3ZSByZXBsYWNlIGNlcnRhaW4KKy8vIFVuaWNvZGUgY2hhcmFjdGVy
cyB3aXRoIGVzY2FwZSBzZXF1ZW5jZXMuIEphdmFTY3JpcHQgaGFuZGxlcyBtYW55IGNoYXJhY3Rl
cnMKKy8vIGluY29ycmVjdGx5LCBlaXRoZXIgc2lsZW50bHkgZGVsZXRpbmcgdGhlbSwgb3IgdHJl
YXRpbmcgdGhlbSBhcyBsaW5lIGVuZGluZ3MuCisKKyAgICAgICAgICAgIGN4Lmxhc3RJbmRleCA9
IDA7CisgICAgICAgICAgICBpZiAoY3gudGVzdCh0ZXh0KSkgeworICAgICAgICAgICAgICAgIHRl
eHQgPSB0ZXh0LnJlcGxhY2UoY3gsIGZ1bmN0aW9uIChhKSB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiAnXFx1JyArCisgICAgICAgICAgICAgICAgICAgICAgICAoJzAwMDAnICsgYS5jaGFy
Q29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpOworICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgfQorCisvLyBJbiB0aGUgc2Vjb25kIHN0YWdlLCB3ZSBydW4gdGhlIHRleHQg
YWdhaW5zdCByZWd1bGFyIGV4cHJlc3Npb25zIHRoYXQgbG9vaworLy8gZm9yIG5vbi1KU09OIHBh
dHRlcm5zLiBXZSBhcmUgZXNwZWNpYWxseSBjb25jZXJuZWQgd2l0aCAnKCknIGFuZCAnbmV3Jwor
Ly8gYmVjYXVzZSB0aGV5IGNhbiBjYXVzZSBpbnZvY2F0aW9uLCBhbmQgJz0nIGJlY2F1c2UgaXQg
Y2FuIGNhdXNlIG11dGF0aW9uLgorLy8gQnV0IGp1c3QgdG8gYmUgc2FmZSwgd2Ugd2FudCB0byBy
ZWplY3QgYWxsIHVuZXhwZWN0ZWQgZm9ybXMuCisKKy8vIFdlIHNwbGl0IHRoZSBzZWNvbmQgc3Rh
Z2UgaW50byA0IHJlZ2V4cCBvcGVyYXRpb25zIGluIG9yZGVyIHRvIHdvcmsgYXJvdW5kCisvLyBj
cmlwcGxpbmcgaW5lZmZpY2llbmNpZXMgaW4gSUUncyBhbmQgU2FmYXJpJ3MgcmVnZXhwIGVuZ2lu
ZXMuIEZpcnN0IHdlCisvLyByZXBsYWNlIHRoZSBKU09OIGJhY2tzbGFzaCBwYWlycyB3aXRoICdA
JyAoYSBub24tSlNPTiBjaGFyYWN0ZXIpLiBTZWNvbmQsIHdlCisvLyByZXBsYWNlIGFsbCBzaW1w
bGUgdmFsdWUgdG9rZW5zIHdpdGggJ10nIGNoYXJhY3RlcnMuIFRoaXJkLCB3ZSBkZWxldGUgYWxs
CisvLyBvcGVuIGJyYWNrZXRzIHRoYXQgZm9sbG93IGEgY29sb24gb3IgY29tbWEgb3IgdGhhdCBi
ZWdpbiB0aGUgdGV4dC4gRmluYWxseSwKKy8vIHdlIGxvb2sgdG8gc2VlIHRoYXQgdGhlIHJlbWFp
bmluZyBjaGFyYWN0ZXJzIGFyZSBvbmx5IHdoaXRlc3BhY2Ugb3IgJ10nIG9yCisvLyAnLCcgb3Ig
JzonIG9yICd7JyBvciAnfScuIElmIHRoYXQgaXMgc28sIHRoZW4gdGhlIHRleHQgaXMgc2FmZSBm
b3IgZXZhbC4KKworICAgICAgICAgICAgaWYgKC9eW1xdLDp7fVxzXSokLy4KK3Rlc3QodGV4dC5y
ZXBsYWNlKC9cXCg/OlsiXFxcL2JmbnJ0XXx1WzAtOWEtZkEtRl17NH0pL2csICdAJykuCityZXBs
YWNlKC8iW14iXFxcblxyXSoifHRydWV8ZmFsc2V8bnVsbHwtP1xkKyg/OlwuXGQqKT8oPzpbZUVd
WytcLV0/XGQrKT8vZywgJ10nKS4KK3JlcGxhY2UoLyg/Ol58OnwsKSg/OlxzKlxbKSsvZywgJycp
KSkgeworCisvLyBJbiB0aGUgdGhpcmQgc3RhZ2Ugd2UgdXNlIHRoZSBldmFsIGZ1bmN0aW9uIHRv
IGNvbXBpbGUgdGhlIHRleHQgaW50byBhCisvLyBKYXZhU2NyaXB0IHN0cnVjdHVyZS4gVGhlICd7
JyBvcGVyYXRvciBpcyBzdWJqZWN0IHRvIGEgc3ludGFjdGljIGFtYmlndWl0eQorLy8gaW4gSmF2
YVNjcmlwdDogaXQgY2FuIGJlZ2luIGEgYmxvY2sgb3IgYW4gb2JqZWN0IGxpdGVyYWwuIFdlIHdy
YXAgdGhlIHRleHQKKy8vIGluIHBhcmVucyB0byBlbGltaW5hdGUgdGhlIGFtYmlndWl0eS4KKwor
ICAgICAgICAgICAgICAgIGogPSBldmFsKCcoJyArIHRleHQgKyAnKScpOworCisvLyBJbiB0aGUg
b3B0aW9uYWwgZm91cnRoIHN0YWdlLCB3ZSByZWN1cnNpdmVseSB3YWxrIHRoZSBuZXcgc3RydWN0
dXJlLCBwYXNzaW5nCisvLyBlYWNoIG5hbWUvdmFsdWUgcGFpciB0byBhIHJldml2ZXIgZnVuY3Rp
b24gZm9yIHBvc3NpYmxlIHRyYW5zZm9ybWF0aW9uLgorCisgICAgICAgICAgICAgICAgcmV0dXJu
IHR5cGVvZiByZXZpdmVyID09PSAnZnVuY3Rpb24nID8KKyAgICAgICAgICAgICAgICAgICAgd2Fs
ayh7Jyc6IGp9LCAnJykgOiBqOworICAgICAgICAgICAgfQorCisvLyBJZiB0aGUgdGV4dCBpcyBu
b3QgSlNPTiBwYXJzZWFibGUsIHRoZW4gYSBTeW50YXhFcnJvciBpcyB0aHJvd24uCisKKyAgICAg
ICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignSlNPTi5wYXJzZScpOworICAgICAgICB9Owor
ICAgIH0KK30oKSk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVk
b21ldGVyMi4xL3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1z
aGltL3Rlc3RzL3NwZWMvcy1hcnJheS5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3Bl
ZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1
LXNoaW0vdGVzdHMvc3BlYy9zLWFycmF5LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZjMzUzZDg1Yjc1NWE4NWQ4
MmMxYjlkM2MwMTJkMzlkMzJjYjAzMGIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93
c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFw
cC9jb21wb25lbnRzL2VzNS1zaGltL3Rlc3RzL3NwZWMvcy1hcnJheS5qcwpAQCAtMCwwICsxLDEw
NzAgQEAKK2Rlc2NyaWJlKCdBcnJheScsIGZ1bmN0aW9uKCkgeworICAgIHZhciB0ZXN0U3ViamVj
dDsKKyAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICB0ZXN0U3ViamVjdCA9IFsy
LCAzLCB1bmRlZmluZWQsIHRydWUsICdoZWonLCBudWxsLCBmYWxzZSwgMF07CisgICAgICAgIGRl
bGV0ZSB0ZXN0U3ViamVjdFsxXTsKKyAgICB9KTsKKyAgICBmdW5jdGlvbiBjcmVhdGVBcnJheUxp
a2VGcm9tQXJyYXkoYXJyKSB7CisgICAgICAgIHZhciBvID0ge307CisgICAgICAgIEFycmF5LnBy
b3RvdHlwZS5mb3JFYWNoLmNhbGwoYXJyLCBmdW5jdGlvbihlLCBpKSB7CisgICAgICAgICAgICBv
W2ldPWU7CisgICAgICAgIH0pOworICAgICAgICBvLmxlbmd0aCA9IGFyci5sZW5ndGg7CisgICAg
ICAgIHJldHVybiBvOworICAgIH07CisgICAgCisgICAgZGVzY3JpYmUoJ2ZvckVhY2gnLCBmdW5j
dGlvbigpIHsKKyAgICAgICAgInVzZSBzdHJpY3QiOworICAgICAgICB2YXIgZXhwZWN0ZWQsIGFj
dHVhbDsKKyAgICAgICAgCisgICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICBleHBlY3RlZCA9IHswOjIsIDI6IHVuZGVmaW5lZCwgMzp0cnVlLCA0OiAnaGVqJywgNTpu
dWxsLCA2OmZhbHNlLCA3OjAgfTsKKyAgICAgICAgICAgIGFjdHVhbCA9IHt9OworICAgICAgICB9
KTsKKyAgICAgICAgaXQoJ3Nob3VsZCBwYXNzIHRoZSByaWdodCBwYXJhbWV0ZXJzJywgZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBqYXNtaW5lLmNyZWF0ZVNweSgnY2Fs
bGJhY2snKSwKKyAgICAgICAgICAgICAgICBhcnJheSA9IFsnMSddOworICAgICAgICAgICAgYXJy
YXkuZm9yRWFjaChjYWxsYmFjayk7CisgICAgICAgICAgICBleHBlY3QoY2FsbGJhY2spLnRvSGF2
ZUJlZW5DYWxsZWRXaXRoKCcxJywgMCwgYXJyYXkpOworICAgICAgICB9KTsKKyAgICAgICAgaXQo
J3Nob3VsZCBub3QgYWZmZWN0IGVsZW1lbnRzIGFkZGVkIHRvIHRoZSBhcnJheSBhZnRlciBpdCBo
YXMgYmVndW4nLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciBhcnIgPSBbMSwyLDNdLAor
ICAgICAgICAgICAgICAgIGkgPSAwOworICAgICAgICAgICAgYXJyLmZvckVhY2goZnVuY3Rpb24o
YSkgeworICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgICBhcnIucHVzaChhKzMp
OworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBleHBlY3QoYXJyKS50b0VxdWFsKFsxLDIs
Myw0LDUsNl0pOworICAgICAgICAgICAgZXhwZWN0KGkpLnRvQmUoMyk7CisgICAgICAgIH0pOwor
ICAgICAgICAKKyAgICAgICAgaXQoJ3Nob3VsZCBzZXQgdGhlIHJpZ2h0IGNvbnRleHQgd2hlbiBn
aXZlbiBub25lJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgY29udGV4dDsKKyAgICAg
ICAgICAgIFsxXS5mb3JFYWNoKGZ1bmN0aW9uKCkge2NvbnRleHQgPSB0aGlzO30pOworICAgICAg
ICAgICAgZXhwZWN0KGNvbnRleHQpLnRvQmUoZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXN9LmNhbGwo
KSk7CisgICAgICAgIH0pOworICAgICAgICBpdCgnc2hvdWxkIGl0ZXJhdGUgYWxsJywgZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICB0ZXN0U3ViamVjdC5mb3JFYWNoKGZ1bmN0aW9uKG9iaiwgaW5k
ZXgpIHsKKyAgICAgICAgICAgICAgICBhY3R1YWxbaW5kZXhdID0gb2JqOworICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICBleHBlY3QoYWN0dWFsKS50b0V4YWN0bHlNYXRjaChleHBlY3RlZCk7
CisgICAgICAgIH0pOworICAgICAgICBpdCgnc2hvdWxkIGl0ZXJhdGUgYWxsIHVzaW5nIGEgY29u
dGV4dCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdmFyIG8gPSB7IGE6IGFjdHVhbCB9Owor
ICAgIAorICAgICAgICAgICAgdGVzdFN1YmplY3QuZm9yRWFjaChmdW5jdGlvbihvYmosIGluZGV4
KSB7CisgICAgICAgICAgICAgICAgdGhpcy5hW2luZGV4XSA9IG9iajsKKyAgICAgICAgICAgIH0s
IG8pOworICAgICAgICAgICAgZXhwZWN0KGFjdHVhbCkudG9FeGFjdGx5TWF0Y2goZXhwZWN0ZWQp
OworICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIGl0KCdzaG91bGQgaXRlcmF0ZSBhbGwg
aW4gYW4gYXJyYXktbGlrZSBvYmplY3QnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciB0
cyA9IGNyZWF0ZUFycmF5TGlrZUZyb21BcnJheSh0ZXN0U3ViamVjdCk7CisgICAgICAgICAgICBB
cnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHRzLCBmdW5jdGlvbihvYmosIGluZGV4KSB7Cisg
ICAgICAgICAgICAgICAgYWN0dWFsW2luZGV4XSA9IG9iajsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgZXhwZWN0KGFjdHVhbCkudG9FeGFjdGx5TWF0Y2goZXhwZWN0ZWQpOworICAgICAg
ICB9KTsKKyAgICAgICAgaXQoJ3Nob3VsZCBpdGVyYXRlIGFsbCBpbiBhbiBhcnJheS1saWtlIG9i
amVjdCB1c2luZyBhIGNvbnRleHQnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciB0cyA9
IGNyZWF0ZUFycmF5TGlrZUZyb21BcnJheSh0ZXN0U3ViamVjdCksCisgICAgICAgICAgICAgICAg
byA9IHsgYTogYWN0dWFsIH07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFycmF5LnByb3Rv
dHlwZS5mb3JFYWNoLmNhbGwodHMsIGZ1bmN0aW9uKG9iaiwgaW5kZXgpIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLmFbaW5kZXhdID0gb2JqOworICAgICAgICAgICAgfSwgbyk7CisgICAgICAgICAg
ICBleHBlY3QoYWN0dWFsKS50b0V4YWN0bHlNYXRjaChleHBlY3RlZCk7CisgICAgICAgIH0pOwor
ICAgIH0pOworICAgIGRlc2NyaWJlKCdzb21lJywgZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBh
Y3R1YWwsIGV4cGVjdGVkLCBudW1iZXJPZlJ1bnM7CisgICAgICAgIAorICAgICAgICBiZWZvcmVF
YWNoKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZXhwZWN0ZWQgPSB7MDoyLCAyOiB1bmRlZmlu
ZWQsIDM6dHJ1ZSB9OworICAgICAgICAgICAgYWN0dWFsID0ge307CisgICAgICAgICAgICBudW1i
ZXJPZlJ1bnMgPSAwOworICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIGl0KCdzaG91bGQg
cGFzcyB0aGUgY29ycmVjdCB2YWx1ZXMgYWxvbmcgdG8gdGhlIGNhbGxiYWNrJywgZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBqYXNtaW5lLmNyZWF0ZVNweSgnY2FsbGJh
Y2snKTsKKyAgICAgICAgICAgIHZhciBhcnJheSA9IFsnMSddOworICAgICAgICAgICAgYXJyYXku
c29tZShjYWxsYmFjayk7CisgICAgICAgICAgICBleHBlY3QoY2FsbGJhY2spLnRvSGF2ZUJlZW5D
YWxsZWRXaXRoKCcxJywgMCwgYXJyYXkpOworICAgICAgICB9KTsKKyAgICAgICAgaXQoJ3Nob3Vs
ZCBub3QgYWZmZWN0IGVsZW1lbnRzIGFkZGVkIHRvIHRoZSBhcnJheSBhZnRlciBpdCBoYXMgYmVn
dW4nLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciBhcnIgPSBbMSwyLDNdLAorICAgICAg
ICAgICAgICAgIGkgPSAwOworICAgICAgICAgICAgYXJyLnNvbWUoZnVuY3Rpb24oYSkgeworICAg
ICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgICBhcnIucHVzaChhKzMpOworICAgICAg
ICAgICAgICAgIHJldHVybiBpID4gMzsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgZXhw
ZWN0KGFycikudG9FcXVhbChbMSwyLDMsNCw1LDZdKTsKKyAgICAgICAgICAgIGV4cGVjdChpKS50
b0JlKDMpOworICAgICAgICB9KTsKKyAgICAgICAgaXQoJ3Nob3VsZCBzZXQgdGhlIHJpZ2h0IGNv
bnRleHQgd2hlbiBnaXZlbiBub25lJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgY29u
dGV4dDsKKyAgICAgICAgICAgIFsxXS5zb21lKGZ1bmN0aW9uKCkge2NvbnRleHQgPSB0aGlzO30p
OworICAgICAgICAgICAgZXhwZWN0KGNvbnRleHQpLnRvQmUoZnVuY3Rpb24oKSB7cmV0dXJuIHRo
aXN9LmNhbGwoKSk7CisgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgaXQoJ3Nob3VsZCBy
ZXR1cm4gZmFsc2UgaWYgaXQgcnVucyB0byB0aGUgZW5kJywgZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICBhY3R1YWwgPSB0ZXN0U3ViamVjdC5zb21lKGZ1bmN0aW9uKCkge30pOworICAgICAgICAg
ICAgZXhwZWN0KGFjdHVhbCkudG9CZUZhbHN5KCk7CisgICAgICAgIH0pOworICAgICAgICBpdCgn
c2hvdWxkIHJldHVybiB0cnVlIGlmIGl0IGlzIHN0b3BwZWQgc29tZXdoZXJlJywgZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICBhY3R1YWwgPSB0ZXN0U3ViamVjdC5zb21lKGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gdHJ1ZTsgfSk7CisgICAgICAgICAgICBleHBlY3QoYWN0dWFsKS50b0JlVHJ1dGh5KCk7
CisgICAgICAgIH0pOworICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSBpZiB0aGVyZSBh
cmUgbm8gZWxlbWVudHMnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGFjdHVhbCA9IFtdLnNv
bWUoZnVuY3Rpb24oKSB7IHJldHVybiB0cnVlOyB9KTsKKyAgICAgICAgICAgIGV4cGVjdChhY3R1
YWwpLnRvQmVGYWxzeSgpOworICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIGl0KCdzaG91
bGQgc3RvcCBhZnRlciAzIGVsZW1lbnRzJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB0ZXN0
U3ViamVjdC5zb21lKGZ1bmN0aW9uKG9iaiwgaW5kZXgpIHsKKyAgICAgICAgICAgICAgICBhY3R1
YWxbaW5kZXhdID0gb2JqOworICAgICAgICAgICAgICAgIG51bWJlck9mUnVucyArPSAxOworICAg
ICAgICAgICAgICAgIGlmKG51bWJlck9mUnVucyA9PSAzKSB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGV4cGVjdChhY3R1YWwpLnRvRXhh
Y3RseU1hdGNoKGV4cGVjdGVkKTsKKyAgICAgICAgfSk7CisgICAgICAgIGl0KCdzaG91bGQgc3Rv
cCBhZnRlciAzIGVsZW1lbnRzIHVzaW5nIGEgY29udGV4dCcsIGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgdmFyIG8gPSB7IGE6IGFjdHVhbCB9OworICAgICAgICAgICAgdGVzdFN1YmplY3Quc29t
ZShmdW5jdGlvbihvYmosIGluZGV4KSB7CisgICAgICAgICAgICAgICAgdGhpcy5hW2luZGV4XSA9
IG9iajsKKyAgICAgICAgICAgICAgICBudW1iZXJPZlJ1bnMgKz0gMTsKKyAgICAgICAgICAgICAg
ICBpZihudW1iZXJPZlJ1bnMgPT0gMykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfSwgbyk7CisgICAgICAgICAgICBleHBlY3QoYWN0dWFsKS50b0V4YWN0bHlNYXRj
aChleHBlY3RlZCk7CisgICAgICAgIH0pOworICAgIAorICAgICAgICBpdCgnc2hvdWxkIHN0b3Ag
YWZ0ZXIgMyBlbGVtZW50cyBpbiBhbiBhcnJheS1saWtlIG9iamVjdCcsIGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgdmFyIHRzID0gY3JlYXRlQXJyYXlMaWtlRnJvbUFycmF5KHRlc3RTdWJqZWN0
KTsKKyAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5zb21lLmNhbGwodHMsIGZ1bmN0aW9uKG9i
aiwgaW5kZXgpIHsKKyAgICAgICAgICAgICAgICBhY3R1YWxbaW5kZXhdID0gb2JqOworICAgICAg
ICAgICAgICAgIG51bWJlck9mUnVucyArPSAxOworICAgICAgICAgICAgICAgIGlmKG51bWJlck9m
UnVucyA9PSAzKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIGV4cGVjdChhY3R1YWwpLnRvRXhhY3RseU1hdGNoKGV4cGVjdGVkKTsKKyAg
ICAgICAgfSk7CisgICAgICAgIGl0KCdzaG91bGQgc3RvcCBhZnRlciAzIGVsZW1lbnRzIGluIGFu
IGFycmF5LWxpa2Ugb2JqZWN0IHVzaW5nIGEgY29udGV4dCcsIGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgdmFyIHRzID0gY3JlYXRlQXJyYXlMaWtlRnJvbUFycmF5KHRlc3RTdWJqZWN0KTsKKyAg
ICAgICAgICAgIHZhciBvID0geyBhOiBhY3R1YWwgfTsKKyAgICAgICAgICAgIEFycmF5LnByb3Rv
dHlwZS5zb21lLmNhbGwodHMsIGZ1bmN0aW9uKG9iaiwgaW5kZXgpIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLmFbaW5kZXhdID0gb2JqOworICAgICAgICAgICAgICAgIG51bWJlck9mUnVucyArPSAx
OworICAgICAgICAgICAgICAgIGlmKG51bWJlck9mUnVucyA9PSAzKSB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9LCBvKTsKKyAgICAgICAgICAgIGV4cGVjdChhY3R1
YWwpLnRvRXhhY3RseU1hdGNoKGV4cGVjdGVkKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisgICAg
ZGVzY3JpYmUoJ2V2ZXJ5JywgZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBhY3R1YWwsIGV4cGVj
dGVkLCBudW1iZXJPZlJ1bnM7CisgICAgICAgIAorICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgZXhwZWN0ZWQgPSB7MDoyLCAyOiB1bmRlZmluZWQsIDM6dHJ1ZSB9
OworICAgICAgICAgICAgYWN0dWFsID0ge307CisgICAgICAgICAgICBudW1iZXJPZlJ1bnMgPSAw
OworICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIGl0KCdzaG91bGQgcGFzcyB0aGUgY29y
cmVjdCB2YWx1ZXMgYWxvbmcgdG8gdGhlIGNhbGxiYWNrJywgZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICB2YXIgY2FsbGJhY2sgPSBqYXNtaW5lLmNyZWF0ZVNweSgnY2FsbGJhY2snKTsKKyAgICAg
ICAgICAgIHZhciBhcnJheSA9IFsnMSddOworICAgICAgICAgICAgYXJyYXkuZXZlcnkoY2FsbGJh
Y2spOworICAgICAgICAgICAgZXhwZWN0KGNhbGxiYWNrKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgn
MScsIDAsIGFycmF5KTsKKyAgICAgICAgfSk7CisgICAgICAgIGl0KCdzaG91bGQgbm90IGFmZmVj
dCBlbGVtZW50cyBhZGRlZCB0byB0aGUgYXJyYXkgYWZ0ZXIgaXQgaGFzIGJlZ3VuJywgZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICB2YXIgYXJyID0gWzEsMiwzXSwKKyAgICAgICAgICAgICAgICBp
ID0gMDsKKyAgICAgICAgICAgIGFyci5ldmVyeShmdW5jdGlvbihhKSB7CisgICAgICAgICAgICAg
ICAgaSsrOworICAgICAgICAgICAgICAgIGFyci5wdXNoKGErMyk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGkgPD0gMzsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgZXhwZWN0KGFyciku
dG9FcXVhbChbMSwyLDMsNCw1LDZdKTsKKyAgICAgICAgICAgIGV4cGVjdChpKS50b0JlKDMpOwor
ICAgICAgICB9KTsKKyAgICAgICAgaXQoJ3Nob3VsZCBzZXQgdGhlIHJpZ2h0IGNvbnRleHQgd2hl
biBnaXZlbiBub25lJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgY29udGV4dDsKKyAg
ICAgICAgICAgIFsxXS5ldmVyeShmdW5jdGlvbigpIHtjb250ZXh0ID0gdGhpczt9KTsKKyAgICAg
ICAgICAgIGV4cGVjdChjb250ZXh0KS50b0JlKGZ1bmN0aW9uKCkge3JldHVybiB0aGlzfS5jYWxs
KCkpOworICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHRy
dWUgaWYgdGhlIGFycmF5IGlzIGVtcHR5JywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBhY3R1
YWwgPSBbXS5ldmVyeShmdW5jdGlvbigpIHsgcmV0dXJuIHRydWU7IH0pOworICAgICAgICAgICAg
ZXhwZWN0KGFjdHVhbCkudG9CZVRydXRoeSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBh
Y3R1YWwgPSBbXS5ldmVyeShmdW5jdGlvbigpIHsgcmV0dXJuIGZhbHNlOyB9KTsKKyAgICAgICAg
ICAgIGV4cGVjdChhY3R1YWwpLnRvQmVUcnV0aHkoKTsKKyAgICAgICAgfSk7CisgICAgICAgIGl0
KCdzaG91bGQgcmV0dXJuIHRydWUgaWYgaXQgcnVucyB0byB0aGUgZW5kJywgZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICBhY3R1YWwgPSBbMSwyLDNdLmV2ZXJ5KGZ1bmN0aW9uKCkgeyByZXR1cm4g
dHJ1ZTsgfSk7CisgICAgICAgICAgICBleHBlY3QoYWN0dWFsKS50b0JlVHJ1dGh5KCk7CisgICAg
ICAgIH0pOworICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSBpZiBpdCBpcyBzdG9wcGVk
IGJlZm9yZSB0aGUgZW5kJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBhY3R1YWwgPSBbMSwy
LDNdLmV2ZXJ5KGZ1bmN0aW9uKCkgeyByZXR1cm4gZmFsc2U7IH0pOworICAgICAgICAgICAgZXhw
ZWN0KGFjdHVhbCkudG9CZUZhbHN5KCk7CisgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAg
aXQoJ3Nob3VsZCByZXR1cm4gYWZ0ZXIgMyBlbGVtZW50cycsIGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgdGVzdFN1YmplY3QuZXZlcnkoZnVuY3Rpb24ob2JqLCBpbmRleCkgeworICAgICAgICAg
ICAgICAgIGFjdHVhbFtpbmRleF0gPSBvYmo7CisgICAgICAgICAgICAgICAgbnVtYmVyT2ZSdW5z
ICs9IDE7CisgICAgICAgICAgICAgICAgaWYobnVtYmVyT2ZSdW5zID09IDMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgZXhwZWN0KGFj
dHVhbCkudG9FeGFjdGx5TWF0Y2goZXhwZWN0ZWQpOworICAgICAgICB9KTsKKyAgICAgICAgaXQo
J3Nob3VsZCBzdG9wIGFmdGVyIDMgZWxlbWVudHMgdXNpbmcgYSBjb250ZXh0JywgZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICB2YXIgbyA9IHsgYTogYWN0dWFsIH07CisgICAgICAgICAgICB0ZXN0
U3ViamVjdC5ldmVyeShmdW5jdGlvbihvYmosIGluZGV4KSB7CisgICAgICAgICAgICAgICAgdGhp
cy5hW2luZGV4XSA9IG9iajsKKyAgICAgICAgICAgICAgICBudW1iZXJPZlJ1bnMgKz0gMTsKKyAg
ICAgICAgICAgICAgICBpZihudW1iZXJPZlJ1bnMgPT0gMykgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgfSwgbyk7CisgICAgICAgICAgICBleHBlY3QoYWN0dWFsKS50
b0V4YWN0bHlNYXRjaChleHBlY3RlZCk7CisgICAgICAgIH0pOworICAgIAorICAgICAgICBpdCgn
c2hvdWxkIHN0b3AgYWZ0ZXIgMyBlbGVtZW50cyBpbiBhbiBhcnJheS1saWtlIG9iamVjdCcsIGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgdmFyIHRzID0gY3JlYXRlQXJyYXlMaWtlRnJvbUFycmF5
KHRlc3RTdWJqZWN0KTsKKyAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5ldmVyeS5jYWxsKHRz
LCBmdW5jdGlvbihvYmosIGluZGV4KSB7CisgICAgICAgICAgICAgICAgYWN0dWFsW2luZGV4XSA9
IG9iajsKKyAgICAgICAgICAgICAgICBudW1iZXJPZlJ1bnMgKz0gMTsKKyAgICAgICAgICAgICAg
ICBpZihudW1iZXJPZlJ1bnMgPT0gMykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICBleHBlY3QoYWN0dWFsKS50b0V4YWN0bHlNYXRjaChl
eHBlY3RlZCk7CisgICAgICAgIH0pOworICAgICAgICBpdCgnc2hvdWxkIHN0b3AgYWZ0ZXIgMyBl
bGVtZW50cyBpbiBhbiBhcnJheS1saWtlIG9iamVjdCB1c2luZyBhIGNvbnRleHQnLCBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgIHZhciB0cyA9IGNyZWF0ZUFycmF5TGlrZUZyb21BcnJheSh0ZXN0
U3ViamVjdCk7CisgICAgICAgICAgICB2YXIgbyA9IHsgYTogYWN0dWFsIH07CisgICAgICAgICAg
ICBBcnJheS5wcm90b3R5cGUuZXZlcnkuY2FsbCh0cywgZnVuY3Rpb24ob2JqLCBpbmRleCkgewor
ICAgICAgICAgICAgICAgIHRoaXMuYVtpbmRleF0gPSBvYmo7CisgICAgICAgICAgICAgICAgbnVt
YmVyT2ZSdW5zICs9IDE7CisgICAgICAgICAgICAgICAgaWYobnVtYmVyT2ZSdW5zID09IDMpIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0sIG8pOworICAgICAgICAg
ICAgZXhwZWN0KGFjdHVhbCkudG9FeGFjdGx5TWF0Y2goZXhwZWN0ZWQpOworICAgICAgICB9KTsK
KyAgICB9KTsKKyAgICAKKyAgICBkZXNjcmliZSgnaW5kZXhPZicsIGZ1bmN0aW9uKCkgeworICAg
ICAgICAidXNlIHN0cmljdCI7CisgICAgICAgIHZhciBhY3R1YWwsIGV4cGVjdGVkLCB0ZXN0U3Vi
amVjdDsKKyAgICAgICAgCisgICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICB0ZXN0U3ViamVjdCA9IFsyLCAzLCB1bmRlZmluZWQsIHRydWUsICdoZWonLCBudWxsLCAy
LCBmYWxzZSwgMF07CisgICAgICAgICAgICBkZWxldGUgdGVzdFN1YmplY3RbMV07CisgICAgCisg
ICAgICAgIH0pOworICAgIAorICAgICAgICBpdCgnc2hvdWxkIGZpbmQgdGhlIGVsZW1lbnQnLCBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgIGV4cGVjdGVkID0gNDsKKyAgICAgICAgICAgIGFjdHVh
bCA9IHRlc3RTdWJqZWN0LmluZGV4T2YoJ2hlaicpOworICAgICAgICAgICAgZXhwZWN0KGFjdHVh
bCkudG9FcXVhbChleHBlY3RlZCk7CisgICAgICAgIH0pOworICAgICAgICBpdCgnc2hvdWxkIG5v
dCBmaW5kIHRoZSBlbGVtZW50JywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBleHBlY3RlZCA9
IC0xOworICAgICAgICAgICAgYWN0dWFsID0gdGVzdFN1YmplY3QuaW5kZXhPZignbXVzJyk7Cisg
ICAgICAgICAgICBleHBlY3QoYWN0dWFsKS50b0VxdWFsKGV4cGVjdGVkKTsKKyAgICAgICAgfSk7
CisgICAgICAgIGl0KCdzaG91bGQgZmluZCB1bmRlZmluZWQgYXMgd2VsbCcsIGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgZXhwZWN0ZWQgPSAtMTsKKyAgICAgICAgICAgIGFjdHVhbCA9IHRlc3RT
dWJqZWN0LmluZGV4T2YodW5kZWZpbmVkKTsKKyAgICAgICAgICAgIGV4cGVjdChhY3R1YWwpLm5v
dC50b0VxdWFsKGV4cGVjdGVkKTsKKyAgICAgICAgfSk7CisgICAgICAgIGl0KCdzaG91bGQgc2tp
cCB1bnNldCBpbmRleGVzJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBleHBlY3RlZCA9IDI7
CisgICAgICAgICAgICBhY3R1YWwgPSB0ZXN0U3ViamVjdC5pbmRleE9mKHVuZGVmaW5lZCk7Cisg
ICAgICAgICAgICBleHBlY3QoYWN0dWFsKS50b0VxdWFsKGV4cGVjdGVkKTsKKyAgICAgICAgfSk7
CisgICAgICAgIGl0KCdzaG91bGQgdXNlIGEgc3RyaWN0IHRlc3QnLCBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgIGFjdHVhbCA9IHRlc3RTdWJqZWN0LmluZGV4T2YobnVsbCk7CisgICAgICAgICAg
ICBleHBlY3QoYWN0dWFsKS50b0VxdWFsKDUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBh
Y3R1YWwgPSB0ZXN0U3ViamVjdC5pbmRleE9mKCcyJyk7CisgICAgICAgICAgICBleHBlY3QoYWN0
dWFsKS50b0VxdWFsKC0xKTsKKyAgICAgICAgfSk7CisgICAgICAgIGl0KCdzaG91bGQgc2tpcCB0
aGUgZmlyc3QgaWYgZnJvbUluZGV4IGlzIHNldCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ZXhwZWN0KHRlc3RTdWJqZWN0LmluZGV4T2YoMiwgMikpLnRvRXF1YWwoNik7CisgICAgICAgICAg
ICBleHBlY3QodGVzdFN1YmplY3QuaW5kZXhPZigyLCAwKSkudG9FcXVhbCgwKTsKKyAgICAgICAg
ICAgIGV4cGVjdCh0ZXN0U3ViamVjdC5pbmRleE9mKDIsIDYpKS50b0VxdWFsKDYpOworICAgICAg
ICB9KTsKKyAgICAgICAgaXQoJ3Nob3VsZCB3b3JrIHdpdGggbmVnYXRpdmUgZnJvbUluZGV4Jywg
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBleHBlY3QodGVzdFN1YmplY3QuaW5kZXhPZigyLCAt
MykpLnRvRXF1YWwoNik7CisgICAgICAgICAgICBleHBlY3QodGVzdFN1YmplY3QuaW5kZXhPZigy
LCAtOSkpLnRvRXF1YWwoMCk7CisgICAgICAgIH0pOworICAgICAgICBpdCgnc2hvdWxkIHdvcmsg
d2l0aCBmcm9tSW5kZXggYmVpbmcgZ3JlYXRlciB0aGFuIHRoZSBsZW5ndGgnLCBmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgIGV4cGVjdCh0ZXN0U3ViamVjdC5pbmRleE9mKCdoZWonLCAyMCkpLnRv
RXF1YWwoLTEpOworICAgICAgICB9KTsKKyAgICAgICAgaXQoJ3Nob3VsZCB3b3JrIHdpdGggZnJv
bUluZGV4IGJlaW5nIG5lZ2F0aXZlIGFuZCBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCcsIGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgZXhwZWN0KHRlc3RTdWJqZWN0LmluZGV4T2YoJ2hlaicsIC0y
MCkpLnRvRXF1YWwoNCk7CisgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgZGVzY3JpYmUo
J0FycmF5LWxpa2UnLCBmdW5jdGlvbiBBcnJheUxpa2UoKSB7CisgICAgICAgICAgICB2YXIgaW5k
ZXhPZiA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mLAorICAgICAgICAgICAgICAgIHRlc3RBTDsK
KyAgICAgICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gYmVmb3JlRWFjaCgpIHsKKyAgICAgICAg
ICAgICAgICB0ZXN0QUwgPSB7fTsKKyAgICAgICAgICAgICAgICB0ZXN0U3ViamVjdCA9IFsyLCAz
LCB1bmRlZmluZWQsIHRydWUsICdoZWonLCBudWxsLCAyLCBmYWxzZSwgMF07CisgICAgICAgICAg
ICAgICAgdGVzdFN1YmplY3QuZm9yRWFjaChmdW5jdGlvbiAobyxpKSB7CisgICAgICAgICAgICAg
ICAgICAgIHRlc3RBTFtpXSA9IG87CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgdGVzdEFMLmxlbmd0aCA9IHRlc3RTdWJqZWN0Lmxlbmd0aDsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgaXQoJ3Nob3VsZCBmaW5kIHRoZSBlbGVtZW50IChhcnJheS1saWtlKScsIGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gNDsKKyAgICAgICAgICAgICAg
ICBhY3R1YWwgPSBpbmRleE9mLmNhbGwodGVzdEFMLCAnaGVqJyk7CisgICAgICAgICAgICAgICAg
ZXhwZWN0KGFjdHVhbCkudG9FcXVhbChleHBlY3RlZCk7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIGl0KCdzaG91bGQgbm90IGZpbmQgdGhlIGVsZW1lbnQgKGFycmF5LWxpa2UpJywgZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAtMTsKKyAgICAgICAgICAgICAg
ICBhY3R1YWwgPSBpbmRleE9mLmNhbGwodGVzdEFMLCAnbXVzJyk7CisgICAgICAgICAgICAgICAg
ZXhwZWN0KGFjdHVhbCkudG9FcXVhbChleHBlY3RlZCk7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIGl0KCdzaG91bGQgZmluZCB1bmRlZmluZWQgYXMgd2VsbCAoYXJyYXktbGlrZSknLCBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9IC0xOworICAgICAgICAgICAg
ICAgIGFjdHVhbCA9IGluZGV4T2YuY2FsbCh0ZXN0QUwsIHVuZGVmaW5lZCk7CisgICAgICAgICAg
ICAgICAgZXhwZWN0KGFjdHVhbCkubm90LnRvRXF1YWwoZXhwZWN0ZWQpOworICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIHNraXAgdW5zZXQgaW5kZXhlcyAoYXJyYXktbGlr
ZSknLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9IDI7CisgICAgICAg
ICAgICAgICAgYWN0dWFsID0gaW5kZXhPZi5jYWxsKHRlc3RBTCwgdW5kZWZpbmVkKTsKKyAgICAg
ICAgICAgICAgICBleHBlY3QoYWN0dWFsKS50b0VxdWFsKGV4cGVjdGVkKTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCB1c2UgYSBzdHJpY3QgdGVzdCAoYXJyYXktbGlr
ZSknLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBhY3R1YWwgPSBBcnJheS5wcm90b3R5
cGUuaW5kZXhPZi5jYWxsKHRlc3RBTCwgbnVsbCk7CisgICAgICAgICAgICAgICAgZXhwZWN0KGFj
dHVhbCkudG9FcXVhbCg1KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBhY3R1
YWwgPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHRlc3RBTCwgJzInKTsKKyAgICAgICAg
ICAgICAgICBleHBlY3QoYWN0dWFsKS50b0VxdWFsKC0xKTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgaXQoJ3Nob3VsZCBza2lwIHRoZSBmaXJzdCBpZiBmcm9tSW5kZXggaXMgc2V0IChh
cnJheS1saWtlKScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGV4cGVjdChpbmRleE9m
LmNhbGwodGVzdEFMLCAyLCAyKSkudG9FcXVhbCg2KTsKKyAgICAgICAgICAgICAgICBleHBlY3Qo
aW5kZXhPZi5jYWxsKHRlc3RBTCwgMiwgMCkpLnRvRXF1YWwoMCk7CisgICAgICAgICAgICAgICAg
ZXhwZWN0KGluZGV4T2YuY2FsbCh0ZXN0QUwsIDIsIDYpKS50b0VxdWFsKDYpOworICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIHdvcmsgd2l0aCBuZWdhdGl2ZSBmcm9tSW5k
ZXggKGFycmF5LWxpa2UpJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZXhwZWN0KGlu
ZGV4T2YuY2FsbCh0ZXN0QUwsIDIsIC0zKSkudG9FcXVhbCg2KTsKKyAgICAgICAgICAgICAgICBl
eHBlY3QoaW5kZXhPZi5jYWxsKHRlc3RBTCwgMiwgLTkpKS50b0VxdWFsKDApOworICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIHdvcmsgd2l0aCBmcm9tSW5kZXggYmVpbmcg
Z3JlYXRlciB0aGFuIHRoZSBsZW5ndGggKGFycmF5LWxpa2UpJywgZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICAgICAgZXhwZWN0KGluZGV4T2YuY2FsbCh0ZXN0QUwsICdoZWonLCAyMCkpLnRvRXF1
YWwoLTEpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIHdvcmsgd2l0
aCBmcm9tSW5kZXggYmVpbmcgbmVnYXRpdmUgYW5kIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoIChh
cnJheS1saWtlKScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGV4cGVjdChpbmRleE9m
LmNhbGwodGVzdEFMLCAnaGVqJywgLTIwKSkudG9FcXVhbCg0KTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICB9KTsKKyAgICB9KTsKKyAgICBkZXNjcmliZSgnbGFzdEluZGV4T2YnLCBmdW5jdGlv
bigpIHsKKyAgICAgICAgInVzZSBzdHJpY3QiOworICAgICAgICB2YXIgYWN0dWFsLCBleHBlY3Rl
ZCwgdGVzdFN1YmplY3QsIHRlc3RBTDsKKyAgICAgICAgCisgICAgICAgIGJlZm9yZUVhY2goZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICB0ZXN0U3ViamVjdCA9IFsyLCAzLCB1bmRlZmluZWQsIHRy
dWUsICdoZWonLCBudWxsLCAyLCAzLCBmYWxzZSwgMF07CisgICAgICAgICAgICBkZWxldGUgdGVz
dFN1YmplY3RbMV07CisgICAgICAgICAgICBkZWxldGUgdGVzdFN1YmplY3RbN107CisgICAgICAg
IH0pOworICAgICAgICBkZXNjcmliZSgnQXJyYXknLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
IGl0KCdzaG91bGQgZmluZCB0aGUgZWxlbWVudCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ICAgIGV4cGVjdGVkID0gNDsKKyAgICAgICAgICAgICAgICBhY3R1YWwgPSB0ZXN0U3ViamVjdC5s
YXN0SW5kZXhPZignaGVqJyk7CisgICAgICAgICAgICAgICAgZXhwZWN0KGFjdHVhbCkudG9FcXVh
bChleHBlY3RlZCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgbm90
IGZpbmQgdGhlIGVsZW1lbnQnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBleHBlY3Rl
ZCA9IC0xOworICAgICAgICAgICAgICAgIGFjdHVhbCA9IHRlc3RTdWJqZWN0Lmxhc3RJbmRleE9m
KCdtdXMnKTsKKyAgICAgICAgICAgICAgICBleHBlY3QoYWN0dWFsKS50b0VxdWFsKGV4cGVjdGVk
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCBmaW5kIHVuZGVmaW5l
ZCBhcyB3ZWxsJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAtMTsK
KyAgICAgICAgICAgICAgICBhY3R1YWwgPSB0ZXN0U3ViamVjdC5sYXN0SW5kZXhPZih1bmRlZmlu
ZWQpOworICAgICAgICAgICAgICAgIGV4cGVjdChhY3R1YWwpLm5vdC50b0VxdWFsKGV4cGVjdGVk
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCBza2lwIHVuc2V0IGlu
ZGV4ZXMnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9IDI7CisgICAg
ICAgICAgICAgICAgYWN0dWFsID0gdGVzdFN1YmplY3QubGFzdEluZGV4T2YodW5kZWZpbmVkKTsK
KyAgICAgICAgICAgICAgICBleHBlY3QoYWN0dWFsKS50b0VxdWFsKGV4cGVjdGVkKTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCB1c2UgYSBzdHJpY3QgdGVzdCcsIGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGFjdHVhbCA9IHRlc3RTdWJqZWN0Lmxhc3RJbmRl
eE9mKG51bGwpOworICAgICAgICAgICAgICAgIGV4cGVjdChhY3R1YWwpLnRvRXF1YWwoNSk7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYWN0dWFsID0gdGVzdFN1YmplY3QubGFz
dEluZGV4T2YoJzInKTsKKyAgICAgICAgICAgICAgICBleHBlY3QoYWN0dWFsKS50b0VxdWFsKC0x
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCBza2lwIHRoZSBmaXJz
dCBpZiBmcm9tSW5kZXggaXMgc2V0JywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZXhw
ZWN0KHRlc3RTdWJqZWN0Lmxhc3RJbmRleE9mKDIsIDIpKS50b0VxdWFsKDApOworICAgICAgICAg
ICAgICAgIGV4cGVjdCh0ZXN0U3ViamVjdC5sYXN0SW5kZXhPZigyLCAwKSkudG9FcXVhbCgwKTsK
KyAgICAgICAgICAgICAgICBleHBlY3QodGVzdFN1YmplY3QubGFzdEluZGV4T2YoMiwgNikpLnRv
RXF1YWwoNik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgd29yayB3
aXRoIG5lZ2F0aXZlIGZyb21JbmRleCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGV4
cGVjdCh0ZXN0U3ViamVjdC5sYXN0SW5kZXhPZigyLCAtMykpLnRvRXF1YWwoNik7CisgICAgICAg
ICAgICAgICAgZXhwZWN0KHRlc3RTdWJqZWN0Lmxhc3RJbmRleE9mKDIsIC05KSkudG9FcXVhbCgw
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCB3b3JrIHdpdGggZnJv
bUluZGV4IGJlaW5nIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoJywgZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICAgICAgZXhwZWN0KHRlc3RTdWJqZWN0Lmxhc3RJbmRleE9mKDIsIDIwKSkudG9FcXVh
bCg2KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCB3b3JrIHdpdGgg
ZnJvbUluZGV4IGJlaW5nIG5lZ2F0aXZlIGFuZCBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCcsIGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGV4cGVjdCh0ZXN0U3ViamVjdC5sYXN0SW5kZXhP
ZigyLCAtMjApKS50b0VxdWFsKC0xKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAg
ICAKKyAgICAgICAgZGVzY3JpYmUoJ0FycmF5IGxpa2UnLCBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgIHZhciBsYXN0SW5kZXhPZiA9IEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZiwKKyAgICAg
ICAgICAgICAgICB0ZXN0QUw7CisgICAgICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgICAgIHRlc3RBTCA9IHt9OworICAgICAgICAgICAgICAgIHRlc3RTdWJqZWN0
LmZvckVhY2goZnVuY3Rpb24gKG8saSkgeworICAgICAgICAgICAgICAgICAgICB0ZXN0QUxbaV0g
PSBvOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHRlc3RBTC5sZW5ndGgg
PSB0ZXN0U3ViamVjdC5sZW5ndGg7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdz
aG91bGQgZmluZCB0aGUgZWxlbWVudCAoYXJyYXktbGlrZSknLCBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgICAgICBleHBlY3RlZCA9IDQ7CisgICAgICAgICAgICAgICAgYWN0dWFsID0gbGFzdElu
ZGV4T2YuY2FsbCh0ZXN0QUwsICdoZWonKTsKKyAgICAgICAgICAgICAgICBleHBlY3QoYWN0dWFs
KS50b0VxdWFsKGV4cGVjdGVkKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3No
b3VsZCBub3QgZmluZCB0aGUgZWxlbWVudCAoYXJyYXktbGlrZSknLCBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgICAgICBleHBlY3RlZCA9IC0xOworICAgICAgICAgICAgICAgIGFjdHVhbCA9IGxh
c3RJbmRleE9mLmNhbGwodGVzdEFMLCAnbXVzJyk7CisgICAgICAgICAgICAgICAgZXhwZWN0KGFj
dHVhbCkudG9FcXVhbChleHBlY3RlZCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0
KCdzaG91bGQgZmluZCB1bmRlZmluZWQgYXMgd2VsbCAoYXJyYXktbGlrZSknLCBmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9IC0xOworICAgICAgICAgICAgICAgIGFjdHVh
bCA9IGxhc3RJbmRleE9mLmNhbGwodGVzdEFMLCB1bmRlZmluZWQpOworICAgICAgICAgICAgICAg
IGV4cGVjdChhY3R1YWwpLm5vdC50b0VxdWFsKGV4cGVjdGVkKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgaXQoJ3Nob3VsZCBza2lwIHVuc2V0IGluZGV4ZXMgKGFycmF5LWxpa2UpJywg
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAyOworICAgICAgICAgICAg
ICAgIGFjdHVhbCA9IGxhc3RJbmRleE9mLmNhbGwodGVzdEFMLCB1bmRlZmluZWQpOworICAgICAg
ICAgICAgICAgIGV4cGVjdChhY3R1YWwpLnRvRXF1YWwoZXhwZWN0ZWQpOworICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIHVzZSBhIHN0cmljdCB0ZXN0IChhcnJheS1saWtl
KScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGFjdHVhbCA9IGxhc3RJbmRleE9mLmNh
bGwodGVzdEFMLCBudWxsKTsKKyAgICAgICAgICAgICAgICBleHBlY3QoYWN0dWFsKS50b0VxdWFs
KDUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGFjdHVhbCA9IGxhc3RJbmRl
eE9mLmNhbGwodGVzdEFMLCAnMicpOworICAgICAgICAgICAgICAgIGV4cGVjdChhY3R1YWwpLnRv
RXF1YWwoLTEpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIHNraXAg
dGhlIGZpcnN0IGlmIGZyb21JbmRleCBpcyBzZXQnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
ICAgICBleHBlY3QobGFzdEluZGV4T2YuY2FsbCh0ZXN0QUwsIDIsIDIpKS50b0VxdWFsKDApOwor
ICAgICAgICAgICAgICAgIGV4cGVjdChsYXN0SW5kZXhPZi5jYWxsKHRlc3RBTCwgMiwgMCkpLnRv
RXF1YWwoMCk7CisgICAgICAgICAgICAgICAgZXhwZWN0KGxhc3RJbmRleE9mLmNhbGwodGVzdEFM
LCAyLCA2KSkudG9FcXVhbCg2KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3No
b3VsZCB3b3JrIHdpdGggbmVnYXRpdmUgZnJvbUluZGV4JywgZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICAgICAgZXhwZWN0KGxhc3RJbmRleE9mLmNhbGwodGVzdEFMLCAyLCAtMykpLnRvRXF1YWwo
Nik7CisgICAgICAgICAgICAgICAgZXhwZWN0KGxhc3RJbmRleE9mLmNhbGwodGVzdEFMLCAyLCAt
OSkpLnRvRXF1YWwoMCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQg
d29yayB3aXRoIGZyb21JbmRleCBiZWluZyBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCcsIGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgICAgIGV4cGVjdChsYXN0SW5kZXhPZi5jYWxsKHRlc3RBTCwg
MiwgMjApKS50b0VxdWFsKDYpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hv
dWxkIHdvcmsgd2l0aCBmcm9tSW5kZXggYmVpbmcgbmVnYXRpdmUgYW5kIGdyZWF0ZXIgdGhhbiB0
aGUgbGVuZ3RoJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZXhwZWN0KGxhc3RJbmRl
eE9mLmNhbGwodGVzdEFMLCAyLCAtMjApKS50b0VxdWFsKC0xKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICB9KTsKKyAgICB9KTsKKyAgICAKKyAgICBkZXNjcmliZSgnZmlsdGVyJywgZnVuY3Rp
b24oKSB7CisgICAgICAgIHZhciBmaWx0ZXJlZEFycmF5LAorICAgICAgICAgICAgY2FsbGJhY2sg
PSBmdW5jdGlvbiBjYWxsYmFjayhvLCBpLCBhcnIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
KAorICAgICAgICAgICAgICAgICAgICBpICE9IDMgJiYgaSAhPSA1CisgICAgICAgICAgICAgICAg
KTsKKyAgICAgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgdGVzdFN1YmplY3QgPSBbMiwgMywgdW5kZWZpbmVkLCB0cnVlLCAn
aGVqJywgMywgbnVsbCwgZmFsc2UsIDBdOworICAgICAgICAgICAgZGVsZXRlIHRlc3RTdWJqZWN0
WzFdOworICAgICAgICAgICAgZmlsdGVyZWRBcnJheSA9IFsyLCB1bmRlZmluZWQsICdoZWonLCBu
dWxsLCBmYWxzZSwgMF07CisgICAgICAgIH0pOworICAgICAgICBkZXNjcmliZSgnQXJyYXkgb2Jq
ZWN0JywgZnVuY3Rpb24oKSB7CisKKyAgICAgICAgICAgIGl0KCdzaG91bGQgY2FsbCB0aGUgY2Fs
bGJhY2sgd2l0aCB0aGUgcHJvcGVyIGFyZ3VtZW50cycsIGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgICAgIHZhciBjYWxsYmFjayA9IGphc21pbmUuY3JlYXRlU3B5KCdjYWxsYmFjaycpLAorICAg
ICAgICAgICAgICAgICAgICBhcnIgPSBbJzEnXTsKKyAgICAgICAgICAgICAgICBhcnIuZmlsdGVy
KGNhbGxiYWNrKTsKKyAgICAgICAgICAgICAgICBleHBlY3QoY2FsbGJhY2spLnRvSGF2ZUJlZW5D
YWxsZWRXaXRoKCcxJywgMCwgYXJyKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQo
J3Nob3VsZCBub3QgYWZmZWN0IGVsZW1lbnRzIGFkZGVkIHRvIHRoZSBhcnJheSBhZnRlciBpdCBo
YXMgYmVndW4nLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgYXJyID0gWzEsMiwz
XSwKKyAgICAgICAgICAgICAgICAgICAgaSA9IDA7CisgICAgICAgICAgICAgICAgYXJyLmZpbHRl
cihmdW5jdGlvbihhKSB7CisgICAgICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAg
ICAgICAgaWYoaSA8PSA0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaChhKzMp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGV4cGVjdChhcnIpLnRvRXF1
YWwoWzEsMiwzLDQsNSw2XSk7CisgICAgICAgICAgICAgICAgZXhwZWN0KGkpLnRvQmUoMyk7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgc2tpcCBub24tc2V0IHZhbHVl
cycsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHZhciBwYXNzZWRWYWx1ZXMgPSB7fTsK
KyAgICAgICAgICAgICAgICB0ZXN0U3ViamVjdCA9IFsxLDIsMyw0XTsKKyAgICAgICAgICAgICAg
ICBkZWxldGUgdGVzdFN1YmplY3RbMV07CisgICAgICAgICAgICAgICAgdGVzdFN1YmplY3QuZmls
dGVyKGZ1bmN0aW9uKG8sIGkpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFzc2VkVmFsdWVzW2ld
ID0gbzsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICAgICAgZXhwZWN0KHBhc3NlZFZhbHVlcykudG9FeGFjdGx5TWF0Y2go
dGVzdFN1YmplY3QpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIHBh
c3MgdGhlIHJpZ2h0IGNvbnRleHQgdG8gdGhlIGZpbHRlcicsIGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgICAgIHZhciBwYXNzZWRWYWx1ZXMgPSB7fTsKKyAgICAgICAgICAgICAgICB0ZXN0U3Vi
amVjdCA9IFsxLDIsMyw0XTsKKyAgICAgICAgICAgICAgICBkZWxldGUgdGVzdFN1YmplY3RbMV07
CisgICAgICAgICAgICAgICAgdGVzdFN1YmplY3QuZmlsdGVyKGZ1bmN0aW9uKG8sIGkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGhpc1tpXSA9IG87CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgICAgIH0sIHBhc3NlZFZhbHVlcyk7CisgICAgICAgICAgICAg
ICAgZXhwZWN0KHBhc3NlZFZhbHVlcykudG9FeGFjdGx5TWF0Y2godGVzdFN1YmplY3QpOworICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIHNldCB0aGUgcmlnaHQgY29udGV4
dCB3aGVuIGdpdmVuIG5vbmUnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgY29u
dGV4dDsKKyAgICAgICAgICAgICAgICBbMV0uZmlsdGVyKGZ1bmN0aW9uKCkge2NvbnRleHQgPSB0
aGlzO30pOworICAgICAgICAgICAgICAgIGV4cGVjdChjb250ZXh0KS50b0JlKGZ1bmN0aW9uKCkg
e3JldHVybiB0aGlzfS5jYWxsKCkpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgn
c2hvdWxkIHJlbW92ZSBvbmx5IHRoZSB2YWx1ZXMgZm9yIHdoaWNoIHRoZSBjYWxsYmFjayByZXR1
cm5zIGZhbHNlJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRl
c3RTdWJqZWN0LmZpbHRlcihjYWxsYmFjayk7CisgICAgICAgICAgICAgICAgZXhwZWN0KHJlc3Vs
dCkudG9FeGFjdGx5TWF0Y2goZmlsdGVyZWRBcnJheSk7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIGl0KCdzaG91bGQgbGVhdmUgdGhlIG9yaWdpbmFsIGFycmF5IHVudG91Y2hlZCcsIGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHZhciBjb3B5ID0gdGVzdFN1YmplY3Quc2xpY2Uo
KTsKKyAgICAgICAgICAgICAgICB0ZXN0U3ViamVjdC5maWx0ZXIoY2FsbGJhY2spOworICAgICAg
ICAgICAgICAgIGV4cGVjdCh0ZXN0U3ViamVjdCkudG9FeGFjdGx5TWF0Y2goY29weSk7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgbm90IGJlIGFmZmVjdGVkIGJ5IHNh
bWUtaW5kZXggbXV0YXRpb24nLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgdmFyIHJl
c3VsdHMgPSBbMSwgMiwgM10KKyAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICh2YWx1
ZSwgaW5kZXgsIGFycmF5KSB7CisgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9ICdh
JzsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICAgICAgZXhwZWN0KHJlc3VsdHMpLnRvRXF1YWwoWzEsIDIsIDNdKTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICAgICAgZGVzY3JpYmUoJ0FycmF5IGxpa2Un
LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICAgICAgdGVzdFN1YmplY3QgPSBjcmVhdGVBcnJheUxpa2VGcm9tQXJyYXkodGVzdFN1
YmplY3QpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIGNhbGwgdGhl
IGNhbGxiYWNrIHdpdGggdGhlIHByb3BlciBhcmd1bWVudHMnLCBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBqYXNtaW5lLmNyZWF0ZVNweSgnY2FsbGJhY2snKSwK
KyAgICAgICAgICAgICAgICAgICAgYXJyID0gY3JlYXRlQXJyYXlMaWtlRnJvbUFycmF5KFsnMSdd
KTsKKyAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoYXJyLCBjYWxs
YmFjayk7CisgICAgICAgICAgICAgICAgZXhwZWN0KGNhbGxiYWNrKS50b0hhdmVCZWVuQ2FsbGVk
V2l0aCgnMScsIDAsIGFycik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91
bGQgbm90IGFmZmVjdCBlbGVtZW50cyBhZGRlZCB0byB0aGUgYXJyYXkgYWZ0ZXIgaXQgaGFzIGJl
Z3VuJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIGFyciA9IGNyZWF0ZUFycmF5
TGlrZUZyb21BcnJheShbMSwyLDNdKSwKKyAgICAgICAgICAgICAgICAgICAgaSA9IDA7CisgICAg
ICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKGFyciwgZnVuY3Rpb24oYSkg
eworICAgICAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgICAgIGlmKGkgPD0g
NCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYXJyW2krMl0gPSBhKzM7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICAgICAgZGVsZXRlIGFyci5sZW5ndGg7CisgICAgICAgICAg
ICAgICAgZXhwZWN0KGFycikudG9FeGFjdGx5TWF0Y2goWzEsMiwzLDQsNSw2XSk7CisgICAgICAg
ICAgICAgICAgZXhwZWN0KGkpLnRvQmUoMyk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IGl0KCdzaG91bGQgc2tpcCBub24tc2V0IHZhbHVlcycsIGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgICAgIHZhciBwYXNzZWRWYWx1ZXMgPSB7fTsKKyAgICAgICAgICAgICAgICB0ZXN0U3ViamVj
dCA9IGNyZWF0ZUFycmF5TGlrZUZyb21BcnJheShbMSwyLDMsNF0pOworICAgICAgICAgICAgICAg
IGRlbGV0ZSB0ZXN0U3ViamVjdFsxXTsKKyAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUu
ZmlsdGVyLmNhbGwodGVzdFN1YmplY3QsIGZ1bmN0aW9uKG8sIGkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgcGFzc2VkVmFsdWVzW2ldID0gbzsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgZGVsZXRlIHRlc3RTdWJq
ZWN0Lmxlbmd0aDsKKyAgICAgICAgICAgICAgICBleHBlY3QocGFzc2VkVmFsdWVzKS50b0V4YWN0
bHlNYXRjaCh0ZXN0U3ViamVjdCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdz
aG91bGQgc2V0IHRoZSByaWdodCBjb250ZXh0IHdoZW4gZ2l2ZW4gbm9uZScsIGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgICAgIHZhciBjb250ZXh0OworICAgICAgICAgICAgICAgIEFycmF5LnBy
b3RvdHlwZS5maWx0ZXIuY2FsbChjcmVhdGVBcnJheUxpa2VGcm9tQXJyYXkoWzFdKSwgZnVuY3Rp
b24oKSB7Y29udGV4dCA9IHRoaXM7fSwgdW5kZWZpbmVkKTsKKyAgICAgICAgICAgICAgICBleHBl
Y3QoY29udGV4dCkudG9CZShmdW5jdGlvbigpIHtyZXR1cm4gdGhpc30uY2FsbCgpKTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCBwYXNzIHRoZSByaWdodCBjb250ZXh0
IHRvIHRoZSBmaWx0ZXInLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgcGFzc2Vk
VmFsdWVzID0ge307CisgICAgICAgICAgICAgICAgdGVzdFN1YmplY3QgPSBjcmVhdGVBcnJheUxp
a2VGcm9tQXJyYXkoWzEsMiwzLDRdKTsKKyAgICAgICAgICAgICAgICBkZWxldGUgdGVzdFN1Ympl
Y3RbMV07CisgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKHRlc3RT
dWJqZWN0LCBmdW5jdGlvbihvLCBpKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXNbaV0gPSBv
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9LCBw
YXNzZWRWYWx1ZXMpOworICAgICAgICAgICAgICAgIGRlbGV0ZSB0ZXN0U3ViamVjdC5sZW5ndGg7
CisgICAgICAgICAgICAgICAgZXhwZWN0KHBhc3NlZFZhbHVlcykudG9FeGFjdGx5TWF0Y2godGVz
dFN1YmplY3QpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIHJlbW92
ZSBvbmx5IHRoZSB2YWx1ZXMgZm9yIHdoaWNoIHRoZSBjYWxsYmFjayByZXR1cm5zIGZhbHNlJywg
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IEFycmF5LnByb3RvdHlw
ZS5maWx0ZXIuY2FsbCh0ZXN0U3ViamVjdCwgY2FsbGJhY2spOworICAgICAgICAgICAgICAgIGV4
cGVjdChyZXN1bHQpLnRvRXhhY3RseU1hdGNoKGZpbHRlcmVkQXJyYXkpOworICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIGxlYXZlIHRoZSBvcmlnaW5hbCBhcnJheSB1bnRv
dWNoZWQnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgY29weSA9IGNyZWF0ZUFy
cmF5TGlrZUZyb21BcnJheSh0ZXN0U3ViamVjdCk7CisgICAgICAgICAgICAgICAgQXJyYXkucHJv
dG90eXBlLmZpbHRlci5jYWxsKHRlc3RTdWJqZWN0LCBjYWxsYmFjayk7CisgICAgICAgICAgICAg
ICAgZXhwZWN0KHRlc3RTdWJqZWN0KS50b0V4YWN0bHlNYXRjaChjb3B5KTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICB9KTsKKyAgICB9KTsKKyAgICBkZXNjcmliZSgnbWFwJywgZnVuY3Rpb24o
KSB7CisgICAgICAgIHZhciBjYWxsYmFjazsKKyAgICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgIHZhciBpID0gMDsKKyAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGkrKzsKKyAgICAgICAgICAgIH07CisgICAg
ICAgIH0pOworICAgICAgICBkZXNjcmliZSgnQXJyYXkgb2JqZWN0JywgZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgICBpdCgnc2hvdWxkIGNhbGwgY2FsbGJhY2sgd2l0aCB0aGUgcmlnaHQgcGFyYW1l
dGVycycsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGphc21p
bmUuY3JlYXRlU3B5KCdjYWxsYmFjaycpLAorICAgICAgICAgICAgICAgICAgICBhcnJheSA9IFsx
XTsKKyAgICAgICAgICAgICAgICBhcnJheS5tYXAoY2FsbGJhY2spOworICAgICAgICAgICAgICAg
IGV4cGVjdChjYWxsYmFjaykudG9IYXZlQmVlbkNhbGxlZFdpdGgoMSwgMCwgYXJyYXkpOworICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIHNldCB0aGUgY29udGV4dCBjb3Jy
ZWN0bHknLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgY29udGV4dCA9IHt9Owor
ICAgICAgICAgICAgICAgIHRlc3RTdWJqZWN0Lm1hcChmdW5jdGlvbihvLGkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgdGhpc1tpXSA9IG87CisgICAgICAgICAgICAgICAgfSwgY29udGV4dCk7Cisg
ICAgICAgICAgICAgICAgZXhwZWN0KGNvbnRleHQpLnRvRXhhY3RseU1hdGNoKHRlc3RTdWJqZWN0
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCBzZXQgdGhlIHJpZ2h0
IGNvbnRleHQgd2hlbiBnaXZlbiBub25lJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAg
dmFyIGNvbnRleHQ7CisgICAgICAgICAgICAgICAgWzFdLm1hcChmdW5jdGlvbigpIHtjb250ZXh0
ID0gdGhpczt9KTsKKyAgICAgICAgICAgICAgICBleHBlY3QoY29udGV4dCkudG9CZShmdW5jdGlv
bigpIHtyZXR1cm4gdGhpc30uY2FsbCgpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
aXQoJ3Nob3VsZCBub3QgY2hhbmdlIHRoZSBhcnJheSBpdCBpcyBjYWxsZWQgb24nLCBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgICAgICB2YXIgY29weSA9IHRlc3RTdWJqZWN0LnNsaWNlKCk7Cisg
ICAgICAgICAgICAgICAgdGVzdFN1YmplY3QubWFwKGNhbGxiYWNrKTsKKyAgICAgICAgICAgICAg
ICBleHBlY3QodGVzdFN1YmplY3QpLnRvRXhhY3RseU1hdGNoKGNvcHkpOworICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIG9ubHkgcnVuIGZvciB0aGUgbnVtYmVyIG9mIG9i
amVjdHMgaW4gdGhlIGFycmF5IHdoZW4gaXQgc3RhcnRlZCcsIGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgICAgIHZhciBhcnIgPSBbMSwyLDNdLAorICAgICAgICAgICAgICAgICAgICBpID0gMDsK
KyAgICAgICAgICAgICAgICBhcnIubWFwKGZ1bmN0aW9uKG8pIHsKKyAgICAgICAgICAgICAgICAg
ICAgYXJyLnB1c2gobyszKTsKKyAgICAgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbzsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBl
eHBlY3QoYXJyKS50b0V4YWN0bHlNYXRjaChbMSwyLDMsNCw1LDZdKTsKKyAgICAgICAgICAgICAg
ICBleHBlY3QoaSkudG9CZSgzKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3No
b3VsZCBwcm9wZXJseSB0cmFuc2xhdGUgdGhlIHZhbHVlcyBhcyBhY2NvcmRpbmcgdG8gdGhlIGNh
bGxiYWNrJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRlc3RT
dWJqZWN0Lm1hcChjYWxsYmFjayksCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gWzAs
MCwxLDIsMyw0LDUsNl07CisgICAgICAgICAgICAgICAgZGVsZXRlIGV4cGVjdGVkWzFdOworICAg
ICAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXhhY3RseU1hdGNoKGV4cGVjdGVkKTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCBza2lwIG5vbi1leGlzdGluZyB2
YWx1ZXMnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgYXJyYXkgPSBbMSwyLDMs
NF0sIAorICAgICAgICAgICAgICAgICAgICBpID0gMDsKKyAgICAgICAgICAgICAgICBkZWxldGUg
YXJyYXlbMl07CisgICAgICAgICAgICAgICAgYXJyYXkubWFwKGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAg
ZXhwZWN0KGkpLnRvQmUoMyk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgICAg
IGRlc2NyaWJlKCdBcnJheS1saWtlJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBiZWZvcmVF
YWNoKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHRlc3RTdWJqZWN0ID0gY3JlYXRlQXJy
YXlMaWtlRnJvbUFycmF5KHRlc3RTdWJqZWN0KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgaXQoJ3Nob3VsZCBjYWxsIGNhbGxiYWNrIHdpdGggdGhlIHJpZ2h0IHBhcmFtZXRlcnMnLCBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBqYXNtaW5lLmNyZWF0
ZVNweSgnY2FsbGJhY2snKSwKKyAgICAgICAgICAgICAgICAgICAgYXJyYXkgPSBjcmVhdGVBcnJh
eUxpa2VGcm9tQXJyYXkoWzFdKTsKKyAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUubWFw
LmNhbGwoYXJyYXksIGNhbGxiYWNrKTsKKyAgICAgICAgICAgICAgICBleHBlY3QoY2FsbGJhY2sp
LnRvSGF2ZUJlZW5DYWxsZWRXaXRoKDEsIDAsIGFycmF5KTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgaXQoJ3Nob3VsZCBzZXQgdGhlIGNvbnRleHQgY29ycmVjdGx5JywgZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICAgICAgdmFyIGNvbnRleHQgPSB7fTsKKyAgICAgICAgICAgICAgICBB
cnJheS5wcm90b3R5cGUubWFwLmNhbGwodGVzdFN1YmplY3QsIGZ1bmN0aW9uKG8saSkgeworICAg
ICAgICAgICAgICAgICAgICB0aGlzW2ldID0gbzsKKyAgICAgICAgICAgICAgICB9LCBjb250ZXh0
KTsKKyAgICAgICAgICAgICAgICBkZWxldGUgdGVzdFN1YmplY3QubGVuZ3RoOworICAgICAgICAg
ICAgICAgIGV4cGVjdChjb250ZXh0KS50b0V4YWN0bHlNYXRjaCh0ZXN0U3ViamVjdCk7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgc2V0IHRoZSByaWdodCBjb250ZXh0
IHdoZW4gZ2l2ZW4gbm9uZScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHZhciBjb250
ZXh0OworICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5tYXAuY2FsbChjcmVhdGVBcnJh
eUxpa2VGcm9tQXJyYXkoWzFdKSwgZnVuY3Rpb24oKSB7Y29udGV4dCA9IHRoaXM7fSk7CisgICAg
ICAgICAgICAgICAgZXhwZWN0KGNvbnRleHQpLnRvQmUoZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXN9
LmNhbGwoKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgbm90IGNo
YW5nZSB0aGUgYXJyYXkgaXQgaXMgY2FsbGVkIG9uJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICAgICAgdmFyIGNvcHkgPSBjcmVhdGVBcnJheUxpa2VGcm9tQXJyYXkodGVzdFN1YmplY3QpOwor
ICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5tYXAuY2FsbCh0ZXN0U3ViamVjdCwgY2Fs
bGJhY2spOworICAgICAgICAgICAgICAgIGV4cGVjdCh0ZXN0U3ViamVjdCkudG9FeGFjdGx5TWF0
Y2goY29weSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgb25seSBy
dW4gZm9yIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgYXJyYXkgd2hlbiBpdCBzdGFydGVk
JywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIGFyciA9IGNyZWF0ZUFycmF5TGlr
ZUZyb21BcnJheShbMSwyLDNdKSwKKyAgICAgICAgICAgICAgICAgICAgaSA9IDA7CisgICAgICAg
ICAgICAgICAgQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGFyciwgZnVuY3Rpb24obykgeworICAg
ICAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5jYWxsKGFyciwgbyszKTsKKyAg
ICAgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbzsKKyAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBkZWxldGUgYXJyLmxlbmd0aDsKKyAg
ICAgICAgICAgICAgICBleHBlY3QoYXJyKS50b0V4YWN0bHlNYXRjaChbMSwyLDMsNCw1LDZdKTsK
KyAgICAgICAgICAgICAgICBleHBlY3QoaSkudG9CZSgzKTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgaXQoJ3Nob3VsZCBwcm9wZXJseSB0cmFuc2xhdGUgdGhlIHZhbHVlcyBhcyBhY2Nv
cmRpbmcgdG8gdGhlIGNhbGxiYWNrJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFy
IHJlc3VsdCA9IEFycmF5LnByb3RvdHlwZS5tYXAuY2FsbCh0ZXN0U3ViamVjdCwgY2FsbGJhY2sp
LAorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IFswLDAsMSwyLDMsNCw1LDZdOworICAg
ICAgICAgICAgICAgIGRlbGV0ZSBleHBlY3RlZFsxXTsKKyAgICAgICAgICAgICAgICBleHBlY3Qo
cmVzdWx0KS50b0V4YWN0bHlNYXRjaChleHBlY3RlZCk7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIGl0KCdzaG91bGQgc2tpcCBub24tZXhpc3RpbmcgdmFsdWVzJywgZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICAgICAgdmFyIGFycmF5ID0gY3JlYXRlQXJyYXlMaWtlRnJvbUFycmF5KFsx
LDIsMyw0XSksIAorICAgICAgICAgICAgICAgICAgICBpID0gMDsKKyAgICAgICAgICAgICAgICBk
ZWxldGUgYXJyYXlbMl07CisgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLm1hcC5jYWxs
KGFycmF5LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgICAgIGV4cGVjdChpKS50b0JlKDMpOworICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOworICAgIAorICAgIGRlc2NyaWJlKCdyZWR1Y2Un
LCBmdW5jdGlvbigpIHsKKyAgICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgIHRlc3RTdWJqZWN0ID0gWzEsMiwzXTsKKyAgICAgICAgfSk7CisgICAgICAgIAorICAgICAg
ICBkZXNjcmliZSgnQXJyYXknLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGl0KCdzaG91bGQg
cGFzcyB0aGUgY29ycmVjdCBhcmd1bWVudHMgdG8gdGhlIGNhbGxiYWNrJywgZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICAgICAgdmFyIHNweSA9IGphc21pbmUuY3JlYXRlU3B5KCkuYW5kUmV0dXJu
KDApOworICAgICAgICAgICAgICAgIHRlc3RTdWJqZWN0LnJlZHVjZShzcHkpOworICAgICAgICAg
ICAgICAgIGV4cGVjdChzcHkuY2FsbHNbMF0uYXJncykudG9FeGFjdGx5TWF0Y2goWzEsIDIsIDEs
IHRlc3RTdWJqZWN0XSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQg
c3RhcnQgd2l0aCB0aGUgcmlnaHQgaW5pdGlhbFZhbHVlJywgZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICAgICAgdmFyIHNweSA9IGphc21pbmUuY3JlYXRlU3B5KCkuYW5kUmV0dXJuKDApOworICAg
ICAgICAgICAgICAgIHRlc3RTdWJqZWN0LnJlZHVjZShzcHksIDApOworICAgICAgICAgICAgICAg
IGV4cGVjdChzcHkuY2FsbHNbMF0uYXJncykudG9FeGFjdGx5TWF0Y2goWzAsIDEsIDAsIHRlc3RT
dWJqZWN0XSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgbm90IGFm
ZmVjdCBlbGVtZW50cyBhZGRlZCB0byB0aGUgYXJyYXkgYWZ0ZXIgaXQgaGFzIGJlZ3VuJywgZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIGFyciA9IFsxLDIsM10sCisgICAgICAgICAg
ICAgICAgICAgIGkgPSAwOworICAgICAgICAgICAgICAgIGFyci5yZWR1Y2UoZnVuY3Rpb24oYSwg
YikgeworICAgICAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgICAgIGlmKGkg
PD0gNCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2goYSszKTsKKyAgICAgICAg
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGI7CisgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICAgICAgZXhwZWN0KGFycikudG9FcXVhbChbMSwyLDMsNCw1
XSk7CisgICAgICAgICAgICAgICAgZXhwZWN0KGkpLnRvQmUoMik7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIGl0KCdzaG91bGQgd29yayBhcyBleHBlY3RlZCBmb3IgZW1wdHkgYXJyYXlz
JywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIHNweSA9IGphc21pbmUuY3JlYXRl
U3B5KCk7CisgICAgICAgICAgICAgICAgZXhwZWN0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ICAgICAgICBbXS5yZWR1Y2Uoc3B5KTsKKyAgICAgICAgICAgICAgICB9KS50b1Rocm93KCk7Cisg
ICAgICAgICAgICAgICAgZXhwZWN0KHNweSkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBjb3JyZWN0bHkgaWYgbm8g
Y2FsbGJhY2sgaXMgZ2l2ZW4nLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBleHBlY3Qo
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIHRlc3RTdWJqZWN0LnJlZHVjZSgpOwor
ICAgICAgICAgICAgICAgIH0pLnRvVGhyb3coKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGV4cGVjdGVkIHJlc3VsdCcsIGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgICAgIGV4cGVjdCh0ZXN0U3ViamVjdC5yZWR1Y2UoZnVuY3Rpb24oYSxiKSB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoYXx8JycpLnRvU3RyaW5nKCkrKGJ8fCcnKS50
b1N0cmluZygpOworICAgICAgICAgICAgICAgIH0pKS50b0VxdWFsKHRlc3RTdWJqZWN0LmpvaW4o
JycpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCBub3QgZGlyZWN0
bHkgYWZmZWN0IHRoZSBwYXNzZWQgYXJyYXknLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg
ICB2YXIgY29weSA9IHRlc3RTdWJqZWN0LnNsaWNlKCk7CisgICAgICAgICAgICAgICAgdGVzdFN1
YmplY3QucmVkdWNlKGZ1bmN0aW9uKGEsYikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
YStiOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGV4cGVjdCh0ZXN0U3Vi
amVjdCkudG9FcXVhbChjb3B5KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3No
b3VsZCBza2lwIG5vbi1zZXQgdmFsdWVzJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAg
ZGVsZXRlIHRlc3RTdWJqZWN0WzFdOworICAgICAgICAgICAgICAgIHZhciB2aXNpdGVkID0ge307
CisgICAgICAgICAgICAgICAgdGVzdFN1YmplY3QucmVkdWNlKGZ1bmN0aW9uKGEsYikgeworICAg
ICAgICAgICAgICAgICAgICBpZihhKQorICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRlZFth
XSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGlmKGIpCisgICAgICAgICAgICAgICAgICAg
ICAgICB2aXNpdGVkW2JdID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZXhw
ZWN0KHZpc2l0ZWQpLnRvRXF1YWwoeyAnMSc6IHRydWUsICczJzogdHJ1ZSB9KTsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIHRoZSByaWdodCBsZW5ndGgnLCBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBleHBlY3QodGVzdFN1YmplY3QucmVkdWNlLmxl
bmd0aCkudG9CZSgxKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICAgICAgZGVz
Y3JpYmUoJ0FycmF5LWxpa2Ugb2JqZWN0cycsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgYmVm
b3JlRWFjaChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB0ZXN0U3ViamVjdCA9IGNyZWF0
ZUFycmF5TGlrZUZyb21BcnJheSh0ZXN0U3ViamVjdCk7CisgICAgICAgICAgICAgICAgdGVzdFN1
YmplY3QucmVkdWNlID0gQXJyYXkucHJvdG90eXBlLnJlZHVjZTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgaXQoJ3Nob3VsZCBwYXNzIHRoZSBjb3JyZWN0IGFyZ3VtZW50cyB0byB0aGUg
Y2FsbGJhY2snLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgc3B5ID0gamFzbWlu
ZS5jcmVhdGVTcHkoKS5hbmRSZXR1cm4oMCk7CisgICAgICAgICAgICAgICAgdGVzdFN1YmplY3Qu
cmVkdWNlKHNweSk7CisgICAgICAgICAgICAgICAgZXhwZWN0KHNweS5jYWxsc1swXS5hcmdzKS50
b0V4YWN0bHlNYXRjaChbMSwgMiwgMSwgdGVzdFN1YmplY3RdKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgaXQoJ3Nob3VsZCBzdGFydCB3aXRoIHRoZSByaWdodCBpbml0aWFsVmFsdWUn
LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgc3B5ID0gamFzbWluZS5jcmVhdGVT
cHkoKS5hbmRSZXR1cm4oMCk7CisgICAgICAgICAgICAgICAgdGVzdFN1YmplY3QucmVkdWNlKHNw
eSwgMCk7CisgICAgICAgICAgICAgICAgZXhwZWN0KHNweS5jYWxsc1swXS5hcmdzKS50b0V4YWN0
bHlNYXRjaChbMCwgMSwgMCwgdGVzdFN1YmplY3RdKTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgaXQoJ3Nob3VsZCBub3QgYWZmZWN0IGVsZW1lbnRzIGFkZGVkIHRvIHRoZSBhcnJheSBh
ZnRlciBpdCBoYXMgYmVndW4nLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgYXJy
ID0gY3JlYXRlQXJyYXlMaWtlRnJvbUFycmF5KFsxLDIsM10pLAorICAgICAgICAgICAgICAgICAg
ICBpID0gMDsKKyAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucmVkdWNlLmNhbGwoYXJy
LCBmdW5jdGlvbihhLCBiKSB7CisgICAgICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAg
ICAgICAgICAgaWYoaSA8PSA0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhcnJbaSsyXSA9
IGErMzsKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGI7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgZXhwZWN0KGFycikudG9F
cXVhbCh7CisgICAgICAgICAgICAgICAgICAgIDA6IDEsCisgICAgICAgICAgICAgICAgICAgIDE6
IDIsCisgICAgICAgICAgICAgICAgICAgIDI6IDMsCisgICAgICAgICAgICAgICAgICAgIDM6IDQs
CisgICAgICAgICAgICAgICAgICAgIDQ6IDUsCisgICAgICAgICAgICAgICAgICAgIGxlbmd0aDog
MworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGV4cGVjdChpKS50b0JlKDIp
OworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIHdvcmsgYXMgZXhwZWN0
ZWQgZm9yIGVtcHR5IGFycmF5cycsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHZhciBz
cHkgPSBqYXNtaW5lLmNyZWF0ZVNweSgpOworICAgICAgICAgICAgICAgIGV4cGVjdChmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnJlZHVjZS5jYWxsKHts
ZW5ndGg6IDB9LCBzcHkpOworICAgICAgICAgICAgICAgIH0pLnRvVGhyb3coKTsKKyAgICAgICAg
ICAgICAgICBleHBlY3Qoc3B5KS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpOworICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIHRocm93IGNvcnJlY3RseSBpZiBubyBjYWxsYmFj
ayBpcyBnaXZlbicsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGV4cGVjdChmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgICAgICAgICAgdGVzdFN1YmplY3QucmVkdWNlKCk7CisgICAgICAg
ICAgICAgICAgfSkudG9UaHJvdygpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgn
c2hvdWxkIHJldHVybiB0aGUgZXhwZWN0ZWQgcmVzdWx0JywgZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICAgICAgZXhwZWN0KHRlc3RTdWJqZWN0LnJlZHVjZShmdW5jdGlvbihhLGIpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIChhfHwnJykudG9TdHJpbmcoKSsoYnx8JycpLnRvU3RyaW5n
KCk7CisgICAgICAgICAgICAgICAgfSkpLnRvRXF1YWwoJzEyMycpOworICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICBpdCgnc2hvdWxkIG5vdCBkaXJlY3RseSBhZmZlY3QgdGhlIHBhc3NlZCBh
cnJheScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHZhciBjb3B5ID0gY3JlYXRlQXJy
YXlMaWtlRnJvbUFycmF5KHRlc3RTdWJqZWN0KTsKKyAgICAgICAgICAgICAgICB0ZXN0U3ViamVj
dC5yZWR1Y2UoZnVuY3Rpb24oYSxiKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBhK2I7
CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgZGVsZXRlKHRlc3RTdWJqZWN0
LnJlZHVjZSk7CisgICAgICAgICAgICAgICAgZXhwZWN0KHRlc3RTdWJqZWN0KS50b0VxdWFsKGNv
cHkpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIHNraXAgbm9uLXNl
dCB2YWx1ZXMnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBkZWxldGUgdGVzdFN1Ympl
Y3RbMV07CisgICAgICAgICAgICAgICAgdmFyIHZpc2l0ZWQgPSB7fTsKKyAgICAgICAgICAgICAg
ICB0ZXN0U3ViamVjdC5yZWR1Y2UoZnVuY3Rpb24oYSxiKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmKGEpCisgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdGVkW2FdID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYoYikKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0ZWRbYl0g
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBleHBlY3QodmlzaXRlZCkudG9F
cXVhbCh7ICcxJzogdHJ1ZSwgJzMnOiB0cnVlIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICBpdCgnc2hvdWxkIGhhdmUgdGhlIHJpZ2h0IGxlbmd0aCcsIGZ1bmN0aW9uKCkgeworICAg
ICAgICAgICAgICAgIGV4cGVjdCh0ZXN0U3ViamVjdC5yZWR1Y2UubGVuZ3RoKS50b0JlKDEpOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOworICAgIGRlc2NyaWJlKCdyZWR1
Y2VSaWdodCcsIGZ1bmN0aW9uKCkgeworICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgdGVzdFN1YmplY3QgPSBbMSwyLDNdOworICAgICAgICB9KTsKKyAgICAgICAg
CisgICAgICAgIGRlc2NyaWJlKCdBcnJheScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgaXQo
J3Nob3VsZCBwYXNzIHRoZSBjb3JyZWN0IGFyZ3VtZW50cyB0byB0aGUgY2FsbGJhY2snLCBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgc3B5ID0gamFzbWluZS5jcmVhdGVTcHkoKS5h
bmRSZXR1cm4oMCk7CisgICAgICAgICAgICAgICAgdGVzdFN1YmplY3QucmVkdWNlUmlnaHQoc3B5
KTsKKyAgICAgICAgICAgICAgICBleHBlY3Qoc3B5LmNhbGxzWzBdLmFyZ3MpLnRvRXhhY3RseU1h
dGNoKFszLCAyLCAxLCB0ZXN0U3ViamVjdF0pOworICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICBpdCgnc2hvdWxkIHN0YXJ0IHdpdGggdGhlIHJpZ2h0IGluaXRpYWxWYWx1ZScsIGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgICAgIHZhciBzcHkgPSBqYXNtaW5lLmNyZWF0ZVNweSgpLmFuZFJl
dHVybigwKTsKKyAgICAgICAgICAgICAgICB0ZXN0U3ViamVjdC5yZWR1Y2VSaWdodChzcHksIDAp
OworICAgICAgICAgICAgICAgIGV4cGVjdChzcHkuY2FsbHNbMF0uYXJncykudG9FeGFjdGx5TWF0
Y2goWzAsIDMsIDIsIHRlc3RTdWJqZWN0XSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IGl0KCdzaG91bGQgbm90IGFmZmVjdCBlbGVtZW50cyBhZGRlZCB0byB0aGUgYXJyYXkgYWZ0ZXIg
aXQgaGFzIGJlZ3VuJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIGFyciA9IFsx
LDIsM10sCisgICAgICAgICAgICAgICAgICAgIGkgPSAwOworICAgICAgICAgICAgICAgIGFyci5y
ZWR1Y2VSaWdodChmdW5jdGlvbihhLCBiKSB7CisgICAgICAgICAgICAgICAgICAgIGkrKzsKKyAg
ICAgICAgICAgICAgICAgICAgaWYoaSA8PSA0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBh
cnIucHVzaChhKzMpOworICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gYjsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBleHBlY3Qo
YXJyKS50b0VxdWFsKFsxLDIsMyw2LDVdKTsKKyAgICAgICAgICAgICAgICBleHBlY3QoaSkudG9C
ZSgyKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCB3b3JrIGFzIGV4
cGVjdGVkIGZvciBlbXB0eSBhcnJheXMnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2
YXIgc3B5ID0gamFzbWluZS5jcmVhdGVTcHkoKTsKKyAgICAgICAgICAgICAgICBleHBlY3QoZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIFtdLnJlZHVjZVJpZ2h0KHNweSk7CisgICAg
ICAgICAgICAgICAgfSkudG9UaHJvdygpOworICAgICAgICAgICAgICAgIGV4cGVjdChzcHkpLm5v
dC50b0hhdmVCZWVuQ2FsbGVkKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdz
aG91bGQgdGhyb3cgY29ycmVjdGx5IGlmIG5vIGNhbGxiYWNrIGlzIGdpdmVuJywgZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICAgICAgZXhwZWN0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAg
ICAgICB0ZXN0U3ViamVjdC5yZWR1Y2VSaWdodCgpOworICAgICAgICAgICAgICAgIH0pLnRvVGhy
b3coKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhl
IGV4cGVjdGVkIHJlc3VsdCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGV4cGVjdCh0
ZXN0U3ViamVjdC5yZWR1Y2VSaWdodChmdW5jdGlvbihhLGIpIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIChhfHwnJykudG9TdHJpbmcoKSsoYnx8JycpLnRvU3RyaW5nKCk7CisgICAgICAg
ICAgICAgICAgfSkpLnRvRXF1YWwoJzMyMScpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICBpdCgnc2hvdWxkIG5vdCBkaXJlY3RseSBhZmZlY3QgdGhlIHBhc3NlZCBhcnJheScsIGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgICAgIHZhciBjb3B5ID0gdGVzdFN1YmplY3Quc2xpY2UoKTsK
KyAgICAgICAgICAgICAgICB0ZXN0U3ViamVjdC5yZWR1Y2VSaWdodChmdW5jdGlvbihhLGIpIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGErYjsKKyAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgICAgICBleHBlY3QodGVzdFN1YmplY3QpLnRvRXF1YWwoY29weSk7CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgc2tpcCBub24tc2V0IHZhbHVlcycsIGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGRlbGV0ZSB0ZXN0U3ViamVjdFsxXTsKKyAgICAg
ICAgICAgICAgICB2YXIgdmlzaXRlZCA9IHt9OworICAgICAgICAgICAgICAgIHRlc3RTdWJqZWN0
LnJlZHVjZVJpZ2h0KGZ1bmN0aW9uKGEsYikgeworICAgICAgICAgICAgICAgICAgICBpZihhKQor
ICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRlZFthXSA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgIGlmKGIpCisgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdGVkW2JdID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZXhwZWN0KHZpc2l0ZWQpLnRvRXF1YWwoeyAn
MSc6IHRydWUsICczJzogdHJ1ZSB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQo
J3Nob3VsZCBoYXZlIHRoZSByaWdodCBsZW5ndGgnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
ICAgICBleHBlY3QodGVzdFN1YmplY3QucmVkdWNlUmlnaHQubGVuZ3RoKS50b0JlKDEpOworICAg
ICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgICAgICBkZXNjcmliZSgnQXJyYXktbGlrZSBv
YmplY3RzJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgICAgIHRlc3RTdWJqZWN0ID0gY3JlYXRlQXJyYXlMaWtlRnJvbUFycmF5
KHRlc3RTdWJqZWN0KTsKKyAgICAgICAgICAgICAgICB0ZXN0U3ViamVjdC5yZWR1Y2VSaWdodCA9
IEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodDsKKyAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgaXQoJ3Nob3VsZCBwYXNzIHRoZSBjb3JyZWN0IGFyZ3VtZW50cyB0byB0aGUgY2FsbGJhY2sn
LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgc3B5ID0gamFzbWluZS5jcmVhdGVT
cHkoKS5hbmRSZXR1cm4oMCk7CisgICAgICAgICAgICAgICAgdGVzdFN1YmplY3QucmVkdWNlUmln
aHQoc3B5KTsKKyAgICAgICAgICAgICAgICBleHBlY3Qoc3B5LmNhbGxzWzBdLmFyZ3MpLnRvRXhh
Y3RseU1hdGNoKFszLCAyLCAxLCB0ZXN0U3ViamVjdF0pOworICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICBpdCgnc2hvdWxkIHN0YXJ0IHdpdGggdGhlIHJpZ2h0IGluaXRpYWxWYWx1ZScsIGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHZhciBzcHkgPSBqYXNtaW5lLmNyZWF0ZVNweSgp
LmFuZFJldHVybigwKTsKKyAgICAgICAgICAgICAgICB0ZXN0U3ViamVjdC5yZWR1Y2VSaWdodChz
cHksIDApOworICAgICAgICAgICAgICAgIGV4cGVjdChzcHkuY2FsbHNbMF0uYXJncykudG9FeGFj
dGx5TWF0Y2goWzAsIDMsIDIsIHRlc3RTdWJqZWN0XSk7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIGl0KCdzaG91bGQgbm90IGFmZmVjdCBlbGVtZW50cyBhZGRlZCB0byB0aGUgYXJyYXkg
YWZ0ZXIgaXQgaGFzIGJlZ3VuJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIGFy
ciA9IGNyZWF0ZUFycmF5TGlrZUZyb21BcnJheShbMSwyLDNdKSwKKyAgICAgICAgICAgICAgICAg
ICAgaSA9IDA7CisgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0LmNh
bGwoYXJyLCBmdW5jdGlvbihhLCBiKSB7CisgICAgICAgICAgICAgICAgICAgIGkrKzsKKyAgICAg
ICAgICAgICAgICAgICAgaWYoaSA8PSA0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhcnJb
aSsyXSA9IGErMzsKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGI7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgZXhwZWN0KGFy
cikudG9FcXVhbCh7CisgICAgICAgICAgICAgICAgICAgIDA6IDEsCisgICAgICAgICAgICAgICAg
ICAgIDE6IDIsCisgICAgICAgICAgICAgICAgICAgIDI6IDMsCisgICAgICAgICAgICAgICAgICAg
IDM6IDYsCisgICAgICAgICAgICAgICAgICAgIDQ6IDUsCisgICAgICAgICAgICAgICAgICAgIGxl
bmd0aDogMyAvLyBkb2VzIG5vdCBnZXQgdXBkYXRlZCBvbiBwcm9wZXJ0eSBhc3NpZ25tZW50Cisg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgZXhwZWN0KGkpLnRvQmUoMik7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgd29yayBhcyBleHBlY3RlZCBm
b3IgZW1wdHkgYXJyYXlzJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIHNweSA9
IGphc21pbmUuY3JlYXRlU3B5KCk7CisgICAgICAgICAgICAgICAgZXhwZWN0KGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQuY2FsbCh7
bGVuZ3RoOjB9LCBzcHkpOworICAgICAgICAgICAgICAgIH0pLnRvVGhyb3coKTsKKyAgICAgICAg
ICAgICAgICBleHBlY3Qoc3B5KS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpOworICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIHRocm93IGNvcnJlY3RseSBpZiBubyBjYWxsYmFj
ayBpcyBnaXZlbicsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGV4cGVjdChmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgICAgICAgICAgdGVzdFN1YmplY3QucmVkdWNlUmlnaHQoKTsKKyAg
ICAgICAgICAgICAgICB9KS50b1Rocm93KCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IGl0KCdzaG91bGQgcmV0dXJuIHRoZSBleHBlY3RlZCByZXN1bHQnLCBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgICAgICBleHBlY3QodGVzdFN1YmplY3QucmVkdWNlUmlnaHQoZnVuY3Rpb24oYSxi
KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoYXx8JycpLnRvU3RyaW5nKCkrKGJ8fCcn
KS50b1N0cmluZygpOworICAgICAgICAgICAgICAgIH0pKS50b0VxdWFsKCczMjEnKTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCBub3QgZGlyZWN0bHkgYWZmZWN0IHRo
ZSBwYXNzZWQgYXJyYXknLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgY29weSA9
IGNyZWF0ZUFycmF5TGlrZUZyb21BcnJheSh0ZXN0U3ViamVjdCk7CisgICAgICAgICAgICAgICAg
dGVzdFN1YmplY3QucmVkdWNlUmlnaHQoZnVuY3Rpb24oYSxiKSB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBhK2I7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgZGVs
ZXRlKHRlc3RTdWJqZWN0LnJlZHVjZVJpZ2h0KTsKKyAgICAgICAgICAgICAgICBleHBlY3QodGVz
dFN1YmplY3QpLnRvRXF1YWwoY29weSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0
KCdzaG91bGQgc2tpcCBub24tc2V0IHZhbHVlcycsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ICAgIGRlbGV0ZSB0ZXN0U3ViamVjdFsxXTsKKyAgICAgICAgICAgICAgICB2YXIgdmlzaXRlZCA9
IHt9OworICAgICAgICAgICAgICAgIHRlc3RTdWJqZWN0LnJlZHVjZVJpZ2h0KGZ1bmN0aW9uKGEs
YikgeworICAgICAgICAgICAgICAgICAgICBpZihhKQorICAgICAgICAgICAgICAgICAgICAgICAg
dmlzaXRlZFthXSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGlmKGIpCisgICAgICAgICAg
ICAgICAgICAgICAgICB2aXNpdGVkW2JdID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgZXhwZWN0KHZpc2l0ZWQpLnRvRXF1YWwoeyAnMSc6IHRydWUsICczJzogdHJ1ZSB9KTsK
KyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIHRoZSByaWdodCBs
ZW5ndGgnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBleHBlY3QodGVzdFN1YmplY3Qu
cmVkdWNlUmlnaHQubGVuZ3RoKS50b0JlKDEpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0p
OworICAgIH0pOworCisgICAgZGVzY3JpYmUoJ2lzQXJyYXknLCBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIGl0KCdzaG91bGQgd29yayBmb3IgQXJyYXknLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICB2YXIgcmV0ID0gQXJyYXkuaXNBcnJheShbXSk7CisKKyAgICAgICAgICAgIGV4cGVjdChyZXQp
LnRvQmUodHJ1ZSk7CisgICAgICAgIH0pOworCisgICAgICAgIGl0KCdzaG91bGQgZmFpbCBmb3Ig
b3RoZXIgb2JqZWN0cycsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBvYmplY3RzID0g
WworICAgICAgICAgICAgICAgICJzb21lU3RyaW5nIiwKKyAgICAgICAgICAgICAgICB0cnVlLAor
ICAgICAgICAgICAgICAgIGZhbHNlLAorICAgICAgICAgICAgICAgIDQyLAorICAgICAgICAgICAg
ICAgIDAsCisgICAgICAgICAgICAgICAge30sCisgICAgICAgICAgICAgICAgT2JqZWN0LmNyZWF0
ZShudWxsKSwKKyAgICAgICAgICAgICAgICAvZm9vLywKKyAgICAgICAgICAgICAgICBhcmd1bWVu
dHMsCisgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImRpdiIp
CisgICAgICAgICAgICBdOworCisgICAgICAgICAgICBvYmplY3RzLmZvckVhY2goZnVuY3Rpb24g
KHYpIHsKKyAgICAgICAgICAgICAgICBleHBlY3QoQXJyYXkuaXNBcnJheSh2KSkudG9CZShmYWxz
ZSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICAKK30pOwpk
aWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNv
dXJjZXMvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS90ZXN0cy9zcGVj
L3MtZGF0ZS5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVz
b3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vdGVzdHMvc3Bl
Yy9zLWRhdGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjZhYjI4NTI5ZTM2Njg1ZjExZjMzMTc2M2Q5ZTU5ZGZk
M2RkM2ZmYwotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3Bl
ZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1
LXNoaW0vdGVzdHMvc3BlYy9zLWRhdGUuanMKQEAgLTAsMCArMSw0MCBAQAorZGVzY3JpYmUoJ0Rh
dGUnLCBmdW5jdGlvbiAoKSB7CisgICAgCisgICAgZGVzY3JpYmUoJ25vdycsIGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgaXQoJ3Nob3VsZCBiZSB0aGUgY3VycmVudCB0aW1lJywgZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgZXhwZWN0KERhdGUubm93KCkgPT09IG5ldyBEYXRlKCkuZ2V0VGltZSgp
KS50b0JlKHRydWUpOworICAgICAgICB9KTsKKyAgICB9KTsKKworICAgIGRlc2NyaWJlKCJwYXJz
ZSIsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLy8gVE9ETzogV3JpdGUgdGhlIHJlc3Qgb2YgdGhl
IHRlc3QuCisKKyAgICAgICAgaXQoJ3Nob3VsZCBzdXBwb3J0IGV4dGVuZGVkIHllYXJzJywgZnVu
Y3Rpb24gKCkgeworCisgICAgICAgICAgICBleHBlY3QoRGF0ZS5wYXJzZSgnMDAwMS0wMS0wMVQw
MDowMDowMFonKSkudG9CZSgtNjIxMzU1OTY4MDAwMDApOworICAgICAgICAgICAgZXhwZWN0KERh
dGUucGFyc2UoJysyNzU3NjAtMDktMTNUMDA6MDA6MDAuMDAwWicpKS50b0JlKDguNjRlMTUpOwor
ICAgICAgICAgICAgZXhwZWN0KERhdGUucGFyc2UoJyswMzM2NTgtMDktMjdUMDE6NDY6NDAuMDAw
WicpKS50b0JlKDFlMTUpOworICAgICAgICAgICAgZXhwZWN0KERhdGUucGFyc2UoJy0wMDAwMDEt
MDEtMDFUMDA6MDA6MDBaJykpLnRvQmUoLTYyMTk4NzU1MjAwMDAwKTsKKyAgICAgICAgICAgIGV4
cGVjdChEYXRlLnBhcnNlKCcrMDAyMDA5LTEyLTE1VDAwOjAwOjAwWicpKS50b0JlKDEyNjA4MzUy
MDAwMDApOworCisgICAgICAgIH0pOworCisgICAgfSk7CisKKyAgICBkZXNjcmliZSgidG9JU09T
dHJpbmciLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIC8vIFRPRE86IHdyaXRlIHRoZSByZXN0IG9m
IHRoZSB0ZXN0LgorICAgICAgIAorICAgICAgICBpdCgnc2hvdWxkIHN1cHBvcnQgZXh0ZW5kZWQg
eWVhcnMnLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBleHBlY3QobmV3IERhdGUoLTYyMTk4
NzU1MjAwMDAwKS50b0lTT1N0cmluZygpLmluZGV4T2YoJy0wMDAwMDEtMDEtMDEnKSkudG9CZSgw
KTsKKyAgICAgICAgICAgIGV4cGVjdChuZXcgRGF0ZSg4LjY0ZTE1KS50b0lTT1N0cmluZygpLmlu
ZGV4T2YoJysyNzU3NjAtMDktMTMnKSkudG9CZSgwKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisK
KyAgICBkZXNjcmliZSgidG9KU09OIiwgZnVuY3Rpb24gKCkgeworICAgICAgICBpdCgnc2hvdWxk
IHJldHVybiB0aGUgaXNvU3RyaW5nIHdoZW4gc3RyaW5naWZpZWQnLCBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKCk7CisgICAgICAgICAgICBleHBlY3QoSlNP
Ti5zdHJpbmdpZnkoZGF0ZS50b0lTT1N0cmluZygpKSkudG9CZShKU09OLnN0cmluZ2lmeShkYXRl
KSk7CisgICAgICAgIH0pIAorICAgIH0pOworCit9KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm
aWxlCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4x
L3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL3Rlc3Rz
L3NwZWMvcy1mdW5jdGlvbi5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0
ZXIyLjEvcmVzb3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0v
dGVzdHMvc3BlYy9zLWZ1bmN0aW9uLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFkYjYwMjNmYzI1NTUwZDMxYTQ4
MDU1NjEyZDAyMGY2MjIxYmUwM2YKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2Vy
YmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFwcC9j
b21wb25lbnRzL2VzNS1zaGltL3Rlc3RzL3NwZWMvcy1mdW5jdGlvbi5qcwpAQCAtMCwwICsxLDEz
NyBAQAorCitkZXNjcmliZSgnRnVuY3Rpb24nLCBmdW5jdGlvbigpIHsKKyAgICAidXNlIHN0cmlj
dCI7CisgICAgZGVzY3JpYmUoJ2JpbmQnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGFjdHVh
bCwgZXhwZWN0ZWQsCisgICAgICAgICAgICB0ZXN0U3ViamVjdDsKKyAgICAgICAgCisgICAgICAg
IHRlc3RTdWJqZWN0ID0geworICAgICAgICAgICAgcHVzaDogZnVuY3Rpb24obykgeworICAgICAg
ICAgICAgICAgIHRoaXMuYS5wdXNoKG8pOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAg
ICAgICAKKyAgICAgICAgZnVuY3Rpb24gZnVuYygpIHsKKyAgICAgICAgICAgIEFycmF5LnByb3Rv
dHlwZS5mb3JFYWNoLmNhbGwoYXJndW1lbnRzLCBmdW5jdGlvbihhKSB7CisgICAgICAgICAgICAg
ICAgdGhpcy5wdXNoKGEpOworICAgICAgICAgICAgfSwgdGhpcyk7CisgICAgICAgICAgICByZXR1
cm4gdGhpczsKKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIGJlZm9yZUVhY2goZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICBhY3R1YWwgPSBbXTsKKyAgICAgICAgICAgIHRlc3RTdWJqZWN0
LmEgPSBbXTsKKyAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICBpdCgnYmluZHMgcHJvcGVy
bHkgd2l0aG91dCBhIGNvbnRleHQnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciBjb250
ZXh0OworICAgICAgICAgICAgdGVzdFN1YmplY3QuZnVuYyA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgICAgIGNvbnRleHQgPSB0aGlzOworICAgICAgICAgICAgfS5iaW5kKCk7CisgICAgICAg
ICAgICB0ZXN0U3ViamVjdC5mdW5jKCk7CisgICAgICAgICAgICBleHBlY3QoY29udGV4dCkudG9C
ZShmdW5jdGlvbigpIHtyZXR1cm4gdGhpc30uY2FsbCgpKTsKKyAgICAgICAgfSk7CisgICAgICAg
IGl0KCdiaW5kcyBwcm9wZXJseSB3aXRob3V0IGEgY29udGV4dCwgYW5kIHN0aWxsIHN1cHBsaWVz
IGJvdW5kIGFyZ3VtZW50cycsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdmFyIGEsIGNvbnRl
eHQ7CisgICAgICAgICAgICB0ZXN0U3ViamVjdC5mdW5jID0gZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICAgICAgYSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CisgICAg
ICAgICAgICAgICAgY29udGV4dCA9IHRoaXM7CisgICAgICAgICAgICB9LmJpbmQodW5kZWZpbmVk
LCAxLDIsMyk7CisgICAgICAgICAgICB0ZXN0U3ViamVjdC5mdW5jKDEsMiwzKTsKKyAgICAgICAg
ICAgIGV4cGVjdChhKS50b0VxdWFsKFsxLDIsMywxLDIsM10pOworICAgICAgICAgICAgZXhwZWN0
KGNvbnRleHQpLnRvQmUoZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXN9LmNhbGwoKSk7CisgICAgICAg
IH0pOworICAgICAgICBpdCgnYmluZHMgYSBjb250ZXh0IHByb3Blcmx5JywgZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICB0ZXN0U3ViamVjdC5mdW5jID0gZnVuYy5iaW5kKGFjdHVhbCk7CisgICAg
ICAgICAgICB0ZXN0U3ViamVjdC5mdW5jKDEsMiwzKTsKKyAgICAgICAgICAgIGV4cGVjdChhY3R1
YWwpLnRvRXF1YWwoWzEsMiwzXSk7CisgICAgICAgICAgICBleHBlY3QodGVzdFN1YmplY3QuYSku
dG9FcXVhbChbXSk7CisgICAgICAgIH0pOworICAgICAgICBpdCgnYmluZHMgYSBjb250ZXh0IGFu
ZCBzdXBwbGllcyBib3VuZCBhcmd1bWVudHMnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHRl
c3RTdWJqZWN0LmZ1bmMgPSBmdW5jLmJpbmQoYWN0dWFsLCAxLDIsMyk7CisgICAgICAgICAgICB0
ZXN0U3ViamVjdC5mdW5jKDQsNSw2KTsKKyAgICAgICAgICAgIGV4cGVjdChhY3R1YWwpLnRvRXF1
YWwoWzEsMiwzLDQsNSw2XSk7CisgICAgICAgICAgICBleHBlY3QodGVzdFN1YmplY3QuYSkudG9F
cXVhbChbXSk7CisgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgaXQoJ3JldHVybnMgcHJv
cGVybHkgd2l0aG91dCBiaW5kaW5nIGEgY29udGV4dCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgdGVzdFN1YmplY3QuZnVuYyA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzOworICAgICAgICAgICAgfS5iaW5kKCk7CisgICAgICAgICAgICB2YXIgY29udGV4dCA9
IHRlc3RTdWJqZWN0LmZ1bmMoKTsKKyAgICAgICAgICAgIGV4cGVjdChjb250ZXh0KS50b0JlKGZ1
bmN0aW9uKCkge3JldHVybiB0aGlzfS5jYWxsKCkpOworICAgICAgICB9KTsKKyAgICAgICAgaXQo
J3JldHVybnMgcHJvcGVybHkgd2l0aG91dCBiaW5kaW5nIGEgY29udGV4dCwgYW5kIHN0aWxsIHN1
cHBsaWVzIGJvdW5kIGFyZ3VtZW50cycsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdmFyIGNv
bnRleHQ7CisgICAgICAgICAgICB0ZXN0U3ViamVjdC5mdW5jID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICAgICAgY29udGV4dCA9IHRoaXM7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5
LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CisgICAgICAgICAgICB9LmJpbmQodW5k
ZWZpbmVkLCAxLDIsMyk7CisgICAgICAgICAgICBhY3R1YWwgPSB0ZXN0U3ViamVjdC5mdW5jKDEs
MiwzKTsKKyAgICAgICAgICAgIGV4cGVjdChjb250ZXh0KS50b0JlKGZ1bmN0aW9uKCkge3JldHVy
biB0aGlzfS5jYWxsKCkpOworICAgICAgICAgICAgZXhwZWN0KGFjdHVhbCkudG9FcXVhbChbMSwy
LDMsMSwyLDNdKTsKKyAgICAgICAgfSk7CisgICAgICAgIGl0KCdyZXR1cm5zIHByb3Blcmx5IHdo
aWxlIGJpbmRpbmcgYSBjb250ZXh0IHByb3Blcmx5JywgZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICB2YXIgcmV0OworICAgICAgICAgICAgdGVzdFN1YmplY3QuZnVuYyA9IGZ1bmMuYmluZChhY3R1
YWwpOworICAgICAgICAgICAgcmV0ID0gdGVzdFN1YmplY3QuZnVuYygxLDIsMyk7CisgICAgICAg
ICAgICBleHBlY3QocmV0KS50b0JlKGFjdHVhbCk7CisgICAgICAgICAgICBleHBlY3QocmV0KS5u
b3QudG9CZSh0ZXN0U3ViamVjdCk7CisgICAgICAgIH0pOworICAgICAgICBpdCgncmV0dXJucyBw
cm9wZXJseSB3aGlsZSBiaW5kaW5nIGEgY29udGV4dCBhbmQgc3VwcGxpZXMgYm91bmQgYXJndW1l
bnRzJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgcmV0OworICAgICAgICAgICAgdGVz
dFN1YmplY3QuZnVuYyA9IGZ1bmMuYmluZChhY3R1YWwsIDEsMiwzKTsKKyAgICAgICAgICAgIHJl
dCA9IHRlc3RTdWJqZWN0LmZ1bmMoNCw1LDYpOworICAgICAgICAgICAgZXhwZWN0KHJldCkudG9C
ZShhY3R1YWwpOworICAgICAgICAgICAgZXhwZWN0KHJldCkubm90LnRvQmUodGVzdFN1YmplY3Qp
OworICAgICAgICB9KTsKKyAgICAgICAgaXQoJ3Bhc3NlcyB0aGUgY29ycmVjdCBhcmd1bWVudHMg
YXMgYSBjb25zdHJ1Y3RvcicsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdmFyIHJldCwgZXhw
ZWN0ZWQgPSB7IG5hbWU6ICJDb3JyZWN0IiB9OworICAgICAgICAgICAgdGVzdFN1YmplY3QuZnVu
YyA9IGZ1bmN0aW9uKGFyZykgeworICAgICAgICAgICAgICAgIHJldHVybiBhcmc7CisgICAgICAg
ICAgICB9LmJpbmQoeyBuYW1lOiAiSW5jb3JyZWN0IiB9KTsKKyAgICAgICAgICAgIHJldCA9IG5l
dyB0ZXN0U3ViamVjdC5mdW5jKGV4cGVjdGVkKTsKKyAgICAgICAgICAgIGV4cGVjdChyZXQpLnRv
QmUoZXhwZWN0ZWQpOworICAgICAgICB9KTsKKyAgICAgICAgaXQoJ3JldHVybnMgdGhlIHJldHVy
biB2YWx1ZSBvZiB0aGUgYm91bmQgZnVuY3Rpb24gd2hlbiBjYWxsZWQgYXMgYSBjb25zdHJ1Y3Rv
cicsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBvcmFjbGUgPSBbMSwgMiwgM107Cisg
ICAgICAgICAgICB2YXIgc3ViamVjdCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gb3JhY2xlOworICAgICAgICAgICAgfS5iaW5kKG51bGwpOworICAgICAgICAgICAgdmFy
IHJlc3VsdCA9IG5ldyBzdWJqZWN0OworICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShv
cmFjbGUpOworICAgICAgICB9KTsKKyAgICAgICAgaXQoJ3JldHVybnMgdGhlIGNvcnJlY3QgdmFs
dWUgaWYgY29uc3RydWN0b3IgcmV0dXJucyBwcmltaXRpdmUnLCBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgIHZhciBvcmFjbGUgPSBbMSwgMiwgM107CisgICAgICAgICAgICB2YXIgc3ViamVjdCA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gb3JhY2xlOworICAgICAgICAg
ICAgfS5iaW5kKG51bGwpOworICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBzdWJqZWN0Owor
ICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShvcmFjbGUpOworCisgICAgICAgICAgICBv
cmFjbGUgPSB7fTsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBzdWJqZWN0OworICAgICAgICAg
ICAgZXhwZWN0KHJlc3VsdCkudG9CZShvcmFjbGUpOworCisgICAgICAgICAgICBvcmFjbGUgPSBm
dW5jdGlvbigpe307CisgICAgICAgICAgICByZXN1bHQgPSBuZXcgc3ViamVjdDsKKyAgICAgICAg
ICAgIGV4cGVjdChyZXN1bHQpLnRvQmUob3JhY2xlKTsKKworICAgICAgICAgICAgb3JhY2xlID0g
ImFzZGYiOworICAgICAgICAgICAgcmVzdWx0ID0gbmV3IHN1YmplY3Q7CisgICAgICAgICAgICBl
eHBlY3QocmVzdWx0KS5ub3QudG9CZShvcmFjbGUpOworCisgICAgICAgICAgICBvcmFjbGUgPSBu
dWxsOworICAgICAgICAgICAgcmVzdWx0ID0gbmV3IHN1YmplY3Q7CisgICAgICAgICAgICBleHBl
Y3QocmVzdWx0KS5ub3QudG9CZShvcmFjbGUpOworCisgICAgICAgICAgICBvcmFjbGUgPSB0cnVl
OworICAgICAgICAgICAgcmVzdWx0ID0gbmV3IHN1YmplY3Q7CisgICAgICAgICAgICBleHBlY3Qo
cmVzdWx0KS5ub3QudG9CZShvcmFjbGUpOworCisgICAgICAgICAgICBvcmFjbGUgPSAxOworICAg
ICAgICAgICAgcmVzdWx0ID0gbmV3IHN1YmplY3Q7CisgICAgICAgICAgICBleHBlY3QocmVzdWx0
KS5ub3QudG9CZShvcmFjbGUpOworICAgICAgICB9KTsKKyAgICB9KTsKK30pOwpkaWZmIC0tZ2l0
IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvZmxp
Z2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS90ZXN0cy9zcGVjL3Mtb2JqZWN0
LmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMv
ZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS90ZXN0cy9zcGVjL3Mtb2Jq
ZWN0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjhmMmE4N2FkOGY1ODA1ZWM5YWM4M2U5ZTY2MGZhNTQ3ZDRkNzY1
OTEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21l
dGVyMi4xL3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGlt
L3Rlc3RzL3NwZWMvcy1vYmplY3QuanMKQEAgLTAsMCArMSw4NCBAQAorZGVzY3JpYmUoJ09iamVj
dCcsIGZ1bmN0aW9uICgpIHsKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBkZXNjcmliZSgiT2Jq
ZWN0LmtleXMiLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBvYmogPSB7CisgICAgICAgICAg
ICAic3RyIjogImJveiIsCisgICAgICAgICAgICAib2JqIjogeyB9LAorICAgICAgICAgICAgImFy
ciI6IFtdLAorICAgICAgICAgICAgImJvb2wiOiB0cnVlLAorICAgICAgICAgICAgIm51bSI6IDQy
LAorICAgICAgICAgICAgIm51bGwiOiBudWxsLAorICAgICAgICAgICAgInVuZGVmaW5lZCI6IHVu
ZGVmaW5lZAorICAgICAgICB9OworCisgICAgICAgIHZhciBsb29wZWRWYWx1ZXMgPSBbXTsKKyAg
ICAgICAgZm9yICh2YXIgayBpbiBvYmopIHsKKyAgICAgICAgICAgIGxvb3BlZFZhbHVlcy5wdXNo
KGspOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmopOwor
ICAgICAgICBpdCgnc2hvdWxkIGhhdmUgY29ycmVjdCBsZW5ndGgnLCBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICBleHBlY3Qoa2V5cy5sZW5ndGgpLnRvQmUoNyk7ICAgIAorICAgICAgICB9KTsK
KworICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBBcnJheScsIGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIGV4cGVjdChBcnJheS5pc0FycmF5KGtleXMpKS50b0JlKHRydWUpOyAgICAKKyAg
ICAgICAgfSk7CisgICAgICAgIAorICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBuYW1lcyB3aGlj
aCBhcmUgb3duIHByb3BlcnRpZXMnLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBrZXlzLmZv
ckVhY2goZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgICAgICAgICAgICBleHBlY3Qob2JqLmhhc093
blByb3BlcnR5KG5hbWUpKS50b0JlKHRydWUpOworICAgICAgICAgICAgfSk7ICAgIAorICAgICAg
ICB9KTsKKworICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBuYW1lcyB3aGljaCBhcmUgZW51bWVy
YWJsZScsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAo
bmFtZSkgeworICAgICAgICAgICAgICAgIGV4cGVjdChsb29wZWRWYWx1ZXMuaW5kZXhPZihuYW1l
KSkudG9Ob3RCZSgtMSk7CisgICAgICAgICAgICB9KSAKKyAgICAgICAgfSk7CisgICAgICAgIAor
ICAgICAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBub24gb2JqZWN0JywgZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgdmFyIGUgPSB7fTsKKyAgICAgICAgICAgIGV4cGVjdChmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgT2JqZWN0
LmtleXMoNDIpCisgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICAgICAgICAg
ICAgICAgIHRocm93IGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSkudG9UaHJv
dyhlKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisgCisgICAgZGVzY3JpYmUoIk9iamVjdC5pc0V4
dGVuc2libGUiLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBvYmogPSB7IH07CisKKyAgICAg
ICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSBpZiBvYmplY3QgaXMgZXh0ZW5zaWJsZScsIGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIGV4cGVjdChPYmplY3QuaXNFeHRlbnNpYmxlKG9iaikpLnRv
QmUodHJ1ZSk7ICAgIAorICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIGl0KCdzaG91bGQg
cmV0dXJuIGZhbHNlIGlmIG9iamVjdCBpcyBub3QgZXh0ZW5zaWJsZScsIGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIGV4cGVjdChPYmplY3QuaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0
ZW5zaW9ucyhvYmopKSkudG9CZShmYWxzZSk7ICAgIAorICAgICAgICB9KTsKKyAgICAgICAgCisg
ICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIGlmIG9iamVjdCBpcyBzZWFsJywgZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgZXhwZWN0KE9iamVjdC5pc0V4dGVuc2libGUoT2JqZWN0LnNl
YWwob2JqKSkpLnRvQmUoZmFsc2UpOyAgICAKKyAgICAgICAgfSk7CisgICAgICAgIAorICAgICAg
ICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSBpZiBvYmplY3QgaXMgZnJlZXplJywgZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgZXhwZWN0KE9iamVjdC5pc0V4dGVuc2libGUoT2JqZWN0LmZyZWV6
ZShvYmopKSkudG9CZShmYWxzZSk7ICAgIAorICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAg
IGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgZm9yIG5vbiBvYmplY3QnLCBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICB2YXIgZTEgPSB7fTsKKyAgICAgICAgICAgIGV4cGVjdChmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmlzRXh0
ZW5zaWJsZSg0MikKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgICAgICAg
ICAgICAgICAgdGhyb3cgZTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSkudG9U
aHJvdyhlMSk7CisgICAgICAgIH0pOworICAgIH0pOworIAorfSk7ClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9t
ZXRlcjIuMS9yZXNvdXJjZXMvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hp
bS90ZXN0cy9zcGVjL3Mtc3RyaW5nLmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVl
ZG9tZXRlcjIuMS9yZXNvdXJjZXMvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUt
c2hpbS90ZXN0cy9zcGVjL3Mtc3RyaW5nLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMzMTQ5OGRkOGFmNDFiMWQw
MWJlN2YxNzcxZTRmZDJiM2MzNWViZmEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93
c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFw
cC9jb21wb25lbnRzL2VzNS1zaGltL3Rlc3RzL3NwZWMvcy1zdHJpbmcuanMKQEAgLTAsMCArMSwx
MSBAQAorZGVzY3JpYmUoJ1N0cmluZycsIGZ1bmN0aW9uKCkgeworICAgICJ1c2Ugc3RyaWN0IjsK
KyAgICBkZXNjcmliZSgidHJpbSIsIGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgdGVzdCA9ICJc
eDA5XHgwQVx4MEJceDBDXHgwRFx4MjBceEEwXHUxNjgwXHUxODBFXHUyMDAwXHUyMDAxXHUyMDAy
XHUyMDAzXHUyMDA0XHUyMDA1XHUyMDA2XHUyMDA3XHUyMDA4XHUyMDA5XHUyMDBBXHUyMDJGXHUy
MDVGXHUzMDAwXHUyMDI4XHUyMDI5XHVGRUZGSGVsbG8sIFdvcmxkIVx4MDlceDBBXHgwQlx4MENc
eDBEXHgyMFx4QTBcdTE2ODBcdTE4MEVcdTIwMDBcdTIwMDFcdTIwMDJcdTIwMDNcdTIwMDRcdTIw
MDVcdTIwMDZcdTIwMDdcdTIwMDhcdTIwMDlcdTIwMEFcdTIwMkZcdTIwNUZcdTMwMDBcdTIwMjhc
dTIwMjlcdUZFRkYiOworCisgICAgICAgIGl0KCd0cmltcyBhbGwgRVM1IHdoaXRlc3BhY2UnLCBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgIGV4cGVjdCh0ZXN0LnRyaW0oKSkudG9FcXVhbCgiSGVs
bG8sIFdvcmxkISIpOworICAgICAgICAgICAgZXhwZWN0KHRlc3QudHJpbSgpLmxlbmd0aCkudG9F
cXVhbCgxMyk7CisgICAgICAgIH0pOworICAgIH0pOworfSk7CmRpZmYgLS1naXQgYS9XZWJzaXRl
cy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9mbGlnaHRqcy1leGFt
cGxlLWFwcC9jb21wb25lbnRzL2ZsaWdodC8udHJhdmlzLnltbCBiL1dlYnNpdGVzL2Jyb3dzZXJi
ZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2Nv
bXBvbmVudHMvZmxpZ2h0Ly50cmF2aXMueW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAzYzY2ODAzODMxYjgzNmEy
YTAwYzQ2OGNhYmQ2NjY3MjkyZTc1MTIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93
c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFw
cC9jb21wb25lbnRzL2ZsaWdodC8udHJhdmlzLnltbApAQCAtMCwwICsxLDcgQEAKK2xhbmd1YWdl
OiBub2RlX2pzCitub2RlX2pzOgorICAtIDAuOAorYmVmb3JlX3NjcmlwdDoKKyAgLSAiZXhwb3J0
IERJU1BMQVk9Ojk5LjAiCisgIC0gInNoIC1lIC9ldGMvaW5pdC5kL3h2ZmIgc3RhcnQiCitzY3Jp
cHQ6ICJucG0gaW5zdGFsbDsgbWFrZSBzdGFuZGFsb25lOyBwaGFudG9tanMgdGVzdC9waGFudG9t
LWphc21pbmUvcnVuX2phc21pbmVfdGVzdC5jb2ZmZWUgdGVzdC9ydW4vamFzbWluZV90ZXN0Lmh0
bWwiCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4x
L3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2ZsaWdodC9saWIvYWR2
aWNlLmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJj
ZXMvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9mbGlnaHQvbGliL2FkdmljZS5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4wZjQ2ODY5MjlhYTdiNTk5MDM5OTUwZmQ3NjFmMTdjYjQ1NmQ2ZDdjCi0tLSAv
ZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9y
ZXNvdXJjZXMvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9mbGlnaHQvbGliL2Fkdmlj
ZS5qcwpAQCAtMCwwICsxLDY5IEBACisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KKy8vIENvcHlyaWdodCAyMDEzIFR3aXR0ZXIsIEluYworLy8gTGljZW5zZWQg
dW5kZXIgVGhlIE1JVCBMaWNlbnNlCisvLyBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMv
TUlUCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworInVz
ZSBzdHJpY3QiOworCitkZWZpbmUoCisKKyAgWworICAgICcuL3V0aWxzJywKKyAgICAnLi9jb21w
b3NlJworICBdLAorCisgIGZ1bmN0aW9uICh1dGlsLCBjb21wb3NlKSB7CisKKyAgICB2YXIgYWR2
aWNlID0geworCisgICAgICBhcm91bmQ6IGZ1bmN0aW9uKGJhc2UsIHdyYXBwZWQpIHsKKyAgICAg
ICAgcmV0dXJuIGZ1bmN0aW9uIGNvbXBvc2VkQXJvdW5kKCkgeworICAgICAgICAgIC8vIHVucGFj
a2luZyBhcmd1bWVudHMgYnkgaGFuZCBiZW5jaG1hcmtlZCBmYXN0ZXIKKyAgICAgICAgICB2YXIg
aSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KGwgKyAxKTsKKyAg
ICAgICAgICBhcmdzWzBdID0gYmFzZS5iaW5kKHRoaXMpOworICAgICAgICAgIGZvciAoOyBpIDwg
bDsgaSsrKSBhcmdzW2kgKyAxXSA9IGFyZ3VtZW50c1tpXTsKKworICAgICAgICAgIHJldHVybiB3
cmFwcGVkLmFwcGx5KHRoaXMsIGFyZ3MpOworICAgICAgICB9CisgICAgICB9LAorCisgICAgICBi
ZWZvcmU6IGZ1bmN0aW9uKGJhc2UsIGJlZm9yZSkgeworICAgICAgICB2YXIgYmVmb3JlRm4gPSAo
dHlwZW9mIGJlZm9yZSA9PSAnZnVuY3Rpb24nKSA/IGJlZm9yZSA6IGJlZm9yZS5vYmpbYmVmb3Jl
LmZuTmFtZV07CisgICAgICAgIHJldHVybiBmdW5jdGlvbiBjb21wb3NlZEJlZm9yZSgpIHsKKyAg
ICAgICAgICBiZWZvcmVGbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgICAgICAgIHJldHVy
biBiYXNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgIH0KKyAgICAgIH0sCisKKyAg
ICAgIGFmdGVyOiBmdW5jdGlvbihiYXNlLCBhZnRlcikgeworICAgICAgICB2YXIgYWZ0ZXJGbiA9
ICh0eXBlb2YgYWZ0ZXIgPT0gJ2Z1bmN0aW9uJykgPyBhZnRlciA6IGFmdGVyLm9ialthZnRlci5m
bk5hbWVdOworICAgICAgICByZXR1cm4gZnVuY3Rpb24gY29tcG9zZWRBZnRlcigpIHsKKyAgICAg
ICAgICB2YXIgcmVzID0gKGJhc2UudW5ib3VuZCB8fCBiYXNlKS5hcHBseSh0aGlzLCBhcmd1bWVu
dHMpOworICAgICAgICAgIGFmdGVyRm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICAgICAg
ICByZXR1cm4gcmVzOworICAgICAgICB9CisgICAgICB9LAorCisgICAgICAvLyBhIG1peGluIHRo
YXQgYWxsb3dzIG90aGVyIG1peGlucyB0byBhdWdtZW50IGV4aXN0aW5nIGZ1bmN0aW9ucyBieSBh
ZGRpbmcgYWRkaXRpb25hbAorICAgICAgLy8gY29kZSBiZWZvcmUsIGFmdGVyIG9yIGFyb3VuZC4K
KyAgICAgIHdpdGhBZHZpY2U6IGZ1bmN0aW9uKCkgeworICAgICAgICBbJ2JlZm9yZScsICdhZnRl
cicsICdhcm91bmQnXS5mb3JFYWNoKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICB0aGlzW21dID0g
ZnVuY3Rpb24obWV0aG9kLCBmbikgeworCisgICAgICAgICAgICBjb21wb3NlLnVubG9ja1Byb3Bl
cnR5KHRoaXMsIG1ldGhvZCwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgIGlmICh0eXBlb2Yg
dGhpc1ttZXRob2RdID09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhp
c1ttZXRob2RdID0gYWR2aWNlW21dKHRoaXNbbWV0aG9kXSwgZm4pOworICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW21ldGhvZF0gPSBmbjsKKyAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICB9OworICAgICAgICB9LCB0
aGlzKTsKKyAgICAgIH0KKyAgICB9OworCisgICAgcmV0dXJuIGFkdmljZTsKKyAgfQorKTsKZGlm
ZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3Vy
Y2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZmxpZ2h0L2xpYi9jb21wb25lbnQu
anMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9m
bGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2ZsaWdodC9saWIvY29tcG9uZW50LmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmQ5YTUwNzdhYzk5Yjk5NzQ0M2NhY2UyMzVlNjNjNDRmMmUzYWU5YzYKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jl
c291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2ZsaWdodC9saWIvY29tcG9u
ZW50LmpzCkBAIC0wLDAgKzEsMzA4IEBACisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KKy8vIENvcHlyaWdodCAyMDEzIFR3aXR0ZXIsIEluYworLy8gTGljZW5z
ZWQgdW5kZXIgVGhlIE1JVCBMaWNlbnNlCisvLyBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5z
ZXMvTUlUCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwor
InVzZSBzdHJpY3QiOworCitkZWZpbmUoCisKKyAgWworICAgICcuL2FkdmljZScsCisgICAgJy4v
dXRpbHMnLAorICAgICcuL2NvbXBvc2UnLAorICAgICcuL3JlZ2lzdHJ5JworICBdLAorCisgIGZ1
bmN0aW9uKGFkdmljZSwgdXRpbHMsIGNvbXBvc2UsIHJlZ2lzdHJ5KSB7CisKKyAgICB2YXIgZnVu
Y3Rpb25OYW1lUmVnRXggPSAvZnVuY3Rpb24gKC4qPylccz9cKC87CisgICAgdmFyIGNvbXBvbmVu
dElkID0gMDsKKworICAgIGZ1bmN0aW9uIHRlYXJkb3duSW5zdGFuY2UoaW5zdGFuY2VJbmZvKXsK
KyAgICAgIGluc3RhbmNlSW5mby5ldmVudHMuc2xpY2UoKS5mb3JFYWNoKGZ1bmN0aW9uKGV2ZW50
KSB7CisgICAgICAgIHZhciBhcmdzID0gW2V2ZW50LnR5cGVdOworCisgICAgICAgIGV2ZW50LmVs
ZW1lbnQgJiYgYXJncy51bnNoaWZ0KGV2ZW50LmVsZW1lbnQpOworICAgICAgICAodHlwZW9mIGV2
ZW50LmNhbGxiYWNrID09ICdmdW5jdGlvbicpICYmIGFyZ3MucHVzaChldmVudC5jYWxsYmFjayk7
CisKKyAgICAgICAgdGhpcy5vZmYuYXBwbHkodGhpcywgYXJncyk7CisgICAgICB9LCBpbnN0YW5j
ZUluZm8uaW5zdGFuY2UpOworICAgIH0KKworCisgICAgZnVuY3Rpb24gdGVhcmRvd24oKSB7Cisg
ICAgICB0ZWFyZG93bkluc3RhbmNlKHJlZ2lzdHJ5LmZpbmRJbnN0YW5jZUluZm8odGhpcykpOwor
ICAgIH0KKworICAgIC8vdGVhcmRvd24gZm9yIGFsbCBpbnN0YW5jZXMgb2YgdGhpcyBjb25zdHJ1
Y3RvcgorICAgIGZ1bmN0aW9uIHRlYXJkb3duQWxsKCkgeworICAgICAgdmFyIGNvbXBvbmVudElu
Zm8gPSByZWdpc3RyeS5maW5kQ29tcG9uZW50SW5mbyh0aGlzKTsKKworICAgICAgY29tcG9uZW50
SW5mbyAmJiBPYmplY3Qua2V5cyhjb21wb25lbnRJbmZvLmluc3RhbmNlcykuZm9yRWFjaChmdW5j
dGlvbihrKSB7CisgICAgICAgIHZhciBpbmZvID0gY29tcG9uZW50SW5mby5pbnN0YW5jZXNba107
CisgICAgICAgIGluZm8uaW5zdGFuY2UudGVhcmRvd24oKTsKKyAgICAgIH0pOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGNoZWNrU2VyaWFsaXphYmxlKHR5cGUsIGRhdGEpIHsKKyAgICAgIHRyeSB7
CisgICAgICAgIHdpbmRvdy5wb3N0TWVzc2FnZShkYXRhLCAnKicpOworICAgICAgfSBjYXRjaChl
KSB7CisgICAgICAgIGNvbnNvbGUubG9nKCd1bnNlcmlhbGl6YWJsZSBkYXRhIGZvciBldmVudCcs
dHlwZSwnOicsZGF0YSk7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigKKyAgICAgICAgICBbIlRo
ZSBldmVudCIsIHR5cGUsICJvbiBjb21wb25lbnQiLCB0aGlzLnRvU3RyaW5nKCksICJ3YXMgdHJp
Z2dlcmVkIHdpdGggbm9uLXNlcmlhbGl6YWJsZSBkYXRhIl0uam9pbigiICIpCisgICAgICAgICk7
CisgICAgICB9CisgICAgfQorCisgICAgLy9jb21tb24gbWl4aW4gYWxsb2NhdGVzIGJhc2ljIGZ1
bmN0aW9uYWxpdHkgLSB1c2VkIGJ5IGFsbCBjb21wb25lbnQgcHJvdG90eXBlcworICAgIC8vY2Fs
bGJhY2sgY29udGV4dCBpcyBib3VuZCB0byBjb21wb25lbnQKKyAgICBmdW5jdGlvbiB3aXRoQmFz
ZUNvbXBvbmVudCgpIHsKKworICAgICAgLy8gZGVsZWdhdGUgdHJpZ2dlciwgYmluZCBhbmQgdW5i
aW5kIHRvIGFuIGVsZW1lbnQKKyAgICAgIC8vIGlmICRlbGVtZW50IG5vdCBzdXBwbGllZCwgdXNl
IGNvbXBvbmVudCdzIG5vZGUKKyAgICAgIC8vIG90aGVyIGFyZ3VtZW50cyBhcmUgcGFzc2VkIG9u
CisgICAgICAvLyBldmVudCBjYW4gYmUgZWl0aGVyIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIHR5
cGUKKyAgICAgIC8vIG9mIHRoZSBldmVudCwgb3IgYSBoYXNoIHNwZWNpZnlpbmcgYm90aCB0aGUg
dHlwZQorICAgICAgLy8gYW5kIGEgZGVmYXVsdCBmdW5jdGlvbiB0byBiZSBjYWxsZWQuCisgICAg
ICB0aGlzLnRyaWdnZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyICRlbGVtZW50LCB0eXBl
LCBkYXRhLCBldmVudCwgZGVmYXVsdEZuOworICAgICAgICB2YXIgbGFzdEluZGV4ID0gYXJndW1l
bnRzLmxlbmd0aCAtIDEsIGxhc3RBcmcgPSBhcmd1bWVudHNbbGFzdEluZGV4XTsKKworICAgICAg
ICBpZiAodHlwZW9mIGxhc3RBcmcgIT0gInN0cmluZyIgJiYgIShsYXN0QXJnICYmIGxhc3RBcmcu
ZGVmYXVsdEJlaGF2aW9yKSkgeworICAgICAgICAgIGxhc3RJbmRleC0tOworICAgICAgICAgIGRh
dGEgPSBsYXN0QXJnOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxhc3RJbmRleCA9PSAxKSB7
CisgICAgICAgICAgJGVsZW1lbnQgPSAkKGFyZ3VtZW50c1swXSk7CisgICAgICAgICAgZXZlbnQg
PSBhcmd1bWVudHNbMV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgJGVsZW1lbnQgPSB0
aGlzLiRub2RlOworICAgICAgICAgIGV2ZW50ID0gYXJndW1lbnRzWzBdOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGV2ZW50LmRlZmF1bHRCZWhhdmlvcikgeworICAgICAgICAgIGRlZmF1bHRG
biA9IGV2ZW50LmRlZmF1bHRCZWhhdmlvcjsKKyAgICAgICAgICBldmVudCA9ICQuRXZlbnQoZXZl
bnQudHlwZSk7CisgICAgICAgIH0KKworICAgICAgICB0eXBlID0gZXZlbnQudHlwZSB8fCBldmVu
dDsKKworICAgICAgICBpZiAod2luZG93LkRFQlVHICYmIHdpbmRvdy5ERUJVRy5lbmFibGVkICYm
IHdpbmRvdy5wb3N0TWVzc2FnZSkgeworICAgICAgICAgIGNoZWNrU2VyaWFsaXphYmxlLmNhbGwo
dGhpcywgdHlwZSwgZGF0YSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodHlwZW9mIHRoaXMu
YXR0ci5ldmVudERhdGEgPT09ICdvYmplY3QnKSB7CisgICAgICAgICAgZGF0YSA9ICQuZXh0ZW5k
KHRydWUsIHt9LCB0aGlzLmF0dHIuZXZlbnREYXRhLCBkYXRhKTsKKyAgICAgICAgfQorCisgICAg
ICAgICRlbGVtZW50LnRyaWdnZXIoKGV2ZW50IHx8IHR5cGUpLCBkYXRhKTsKKworICAgICAgICBp
ZiAoZGVmYXVsdEZuICYmICFldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkgeworICAgICAgICAg
ICh0aGlzW2RlZmF1bHRGbl0gfHwgZGVmYXVsdEZuKS5jYWxsKHRoaXMpOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuICRlbGVtZW50OworICAgICAgfTsKKworICAgICAgdGhpcy5vbiA9IGZ1
bmN0aW9uKCkgeworICAgICAgICB2YXIgJGVsZW1lbnQsIHR5cGUsIGNhbGxiYWNrLCBvcmlnaW5h
bENiOworICAgICAgICB2YXIgbGFzdEluZGV4ID0gYXJndW1lbnRzLmxlbmd0aCAtIDEsIG9yaWdp
biA9IGFyZ3VtZW50c1tsYXN0SW5kZXhdOworCisgICAgICAgIGlmICh0eXBlb2Ygb3JpZ2luID09
ICJvYmplY3QiKSB7CisgICAgICAgICAgLy9kZWxlZ2F0ZSBjYWxsYmFjaworICAgICAgICAgIG9y
aWdpbmFsQ2IgPSB1dGlscy5kZWxlZ2F0ZSgKKyAgICAgICAgICAgIHRoaXMucmVzb2x2ZURlbGVn
YXRlUnVsZXMob3JpZ2luKQorICAgICAgICAgICk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgb3JpZ2luYWxDYiA9IG9yaWdpbjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsYXN0SW5k
ZXggPT0gMikgeworICAgICAgICAgICRlbGVtZW50ID0gJChhcmd1bWVudHNbMF0pOworICAgICAg
ICAgIHR5cGUgPSBhcmd1bWVudHNbMV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgJGVs
ZW1lbnQgPSB0aGlzLiRub2RlOworICAgICAgICAgIHR5cGUgPSBhcmd1bWVudHNbMF07CisgICAg
ICAgIH0KKworICAgICAgICBpZiAodHlwZW9mIG9yaWdpbmFsQ2IgIT0gJ2Z1bmN0aW9uJyAmJiB0
eXBlb2Ygb3JpZ2luYWxDYiAhPSAnb2JqZWN0JykgeworICAgICAgICAgIHRocm93IG5ldyBFcnJv
cigiVW5hYmxlIHRvIGJpbmQgdG8gJyIgKyB0eXBlICsgIicgYmVjYXVzZSB0aGUgZ2l2ZW4gY2Fs
bGJhY2sgaXMgbm90IGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0Iik7CisgICAgICAgIH0KKworICAg
ICAgICBjYWxsYmFjayA9IG9yaWdpbmFsQ2IuYmluZCh0aGlzKTsKKyAgICAgICAgY2FsbGJhY2su
dGFyZ2V0ID0gb3JpZ2luYWxDYjsKKworICAgICAgICAvLyBpZiB0aGUgb3JpZ2luYWwgY2FsbGJh
Y2sgaXMgYWxyZWFkeSBicmFuZGVkIGJ5IGpRdWVyeSdzIGd1aWQsIGNvcHkgaXQgdG8gdGhlIGNv
bnRleHQtYm91bmQgdmVyc2lvbgorICAgICAgICBpZiAob3JpZ2luYWxDYi5ndWlkKSB7CisgICAg
ICAgICAgY2FsbGJhY2suZ3VpZCA9IG9yaWdpbmFsQ2IuZ3VpZDsKKyAgICAgICAgfQorCisgICAg
ICAgICRlbGVtZW50Lm9uKHR5cGUsIGNhbGxiYWNrKTsKKworICAgICAgICAvLyBnZXQganF1ZXJ5
J3MgZ3VpZCBmcm9tIG91ciBib3VuZCBmbiwgc28gdW5iaW5kaW5nIHdpbGwgd29yaworICAgICAg
ICBvcmlnaW5hbENiLmd1aWQgPSBjYWxsYmFjay5ndWlkOworCisgICAgICAgIHJldHVybiBjYWxs
YmFjazsKKyAgICAgIH07CisKKyAgICAgIHRoaXMub2ZmID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHZhciAkZWxlbWVudCwgdHlwZSwgY2FsbGJhY2s7CisgICAgICAgIHZhciBsYXN0SW5kZXggPSBh
cmd1bWVudHMubGVuZ3RoIC0gMTsKKworICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1tsYXN0
SW5kZXhdID09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1ts
YXN0SW5kZXhdOworICAgICAgICAgIGxhc3RJbmRleCAtPSAxOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGxhc3RJbmRleCA9PSAxKSB7CisgICAgICAgICAgJGVsZW1lbnQgPSAkKGFyZ3VtZW50
c1swXSk7CisgICAgICAgICAgdHlwZSA9IGFyZ3VtZW50c1sxXTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAkZWxlbWVudCA9IHRoaXMuJG5vZGU7CisgICAgICAgICAgdHlwZSA9IGFyZ3Vt
ZW50c1swXTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAkZWxlbWVudC5vZmYodHlwZSwg
Y2FsbGJhY2spOworICAgICAgfTsKKworICAgICAgdGhpcy5yZXNvbHZlRGVsZWdhdGVSdWxlcyA9
IGZ1bmN0aW9uKHJ1bGVJbmZvKSB7CisgICAgICAgIHZhciBydWxlcyA9IHt9OworCisgICAgICAg
IE9iamVjdC5rZXlzKHJ1bGVJbmZvKS5mb3JFYWNoKGZ1bmN0aW9uKHIpIHsKKyAgICAgICAgICBp
ZiAoIXIgaW4gdGhpcy5hdHRyKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbXBv
bmVudCAiJyArIHRoaXMudG9TdHJpbmcoKSArICciIHdhbnRzIHRvIGxpc3RlbiBvbiAiJyArIHIg
KyAnIiBidXQgbm8gc3VjaCBhdHRyaWJ1dGUgd2FzIGRlZmluZWQuJyk7CisgICAgICAgICAgfQor
ICAgICAgICAgIHJ1bGVzW3RoaXMuYXR0cltyXV0gPSBydWxlSW5mb1tyXTsKKyAgICAgICAgfSwg
dGhpcyk7CisKKyAgICAgICAgcmV0dXJuIHJ1bGVzOworICAgICAgfTsKKworICAgICAgdGhpcy5k
ZWZhdWx0QXR0cnMgPSBmdW5jdGlvbihkZWZhdWx0cykgeworICAgICAgICB1dGlscy5wdXNoKHRo
aXMuZGVmYXVsdHMsIGRlZmF1bHRzLCB0cnVlKSB8fCAodGhpcy5kZWZhdWx0cyA9IGRlZmF1bHRz
KTsKKyAgICAgIH07CisKKyAgICAgIHRoaXMuc2VsZWN0ID0gZnVuY3Rpb24oYXR0cmlidXRlS2V5
KSB7CisgICAgICAgIHJldHVybiB0aGlzLiRub2RlLmZpbmQodGhpcy5hdHRyW2F0dHJpYnV0ZUtl
eV0pOworICAgICAgfTsKKworICAgICAgdGhpcy5pbml0aWFsaXplID0gJC5ub29wOworICAgICAg
dGhpcy50ZWFyZG93biA9IHRlYXJkb3duOworICAgIH0KKworICAgIGZ1bmN0aW9uIGF0dGFjaFRv
KHNlbGVjdG9yLyosIG9wdGlvbnMgYXJncyAqLykgeworICAgICAgLy8gdW5wYWNraW5nIGFyZ3Vt
ZW50cyBieSBoYW5kIGJlbmNobWFya2VkIGZhc3RlcgorICAgICAgdmFyIGwgPSBhcmd1bWVudHMu
bGVuZ3RoOworICAgICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobCAtIDEpOworICAgICAgZm9yICh2
YXIgaSA9IDE7IGkgPCBsOyBpKyspIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldOworCisgICAg
ICBpZiAoIXNlbGVjdG9yKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ29tcG9uZW50IG5l
ZWRzIHRvIGJlIGF0dGFjaFRvJ2QgYSBqUXVlcnkgb2JqZWN0LCBuYXRpdmUgbm9kZSBvciBzZWxl
Y3RvciBzdHJpbmciKTsKKyAgICAgIH0KKworICAgICAgdmFyIG9wdGlvbnMgPSB1dGlscy5tZXJn
ZS5hcHBseSh1dGlscywgYXJncyk7CisKKyAgICAgICQoc2VsZWN0b3IpLmVhY2goZnVuY3Rpb24o
aSwgbm9kZSkgeworICAgICAgICB2YXIgcmF3Tm9kZSA9IG5vZGUualF1ZXJ5ID8gbm9kZVswXSA6
IG5vZGU7CisgICAgICAgIHZhciBjb21wb25lbnRJbmZvID0gcmVnaXN0cnkuZmluZENvbXBvbmVu
dEluZm8odGhpcykKKyAgICAgICAgaWYgKGNvbXBvbmVudEluZm8gJiYgY29tcG9uZW50SW5mby5p
c0F0dGFjaGVkVG8ocmF3Tm9kZSkpIHsKKyAgICAgICAgICAvL2FscmVhZHkgYXR0YWNoZWQKKyAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBuZXcgdGhpcyhub2RlLCBvcHRp
b25zKTsKKyAgICAgIH0uYmluZCh0aGlzKSk7CisgICAgfQorCisgICAgLy8gZGVmaW5lIHRoZSBj
b25zdHJ1Y3RvciBmb3IgYSBjdXN0b20gY29tcG9uZW50IHR5cGUKKyAgICAvLyB0YWtlcyBhbiB1
bmxpbWl0ZWQgbnVtYmVyIG9mIG1peGluIGZ1bmN0aW9ucyBhcyBhcmd1bWVudHMKKyAgICAvLyB0
eXBpY2FsIGFwaSBjYWxsIHdpdGggMyBtaXhpbnM6IGRlZmluZSh0aW1lbGluZSwgd2l0aFR3ZWV0
Q2FwYWJpbGl0eSwgd2l0aFNjcm9sbENhcGFiaWxpdHkpOworICAgIGZ1bmN0aW9uIGRlZmluZSgv
Km1peGlucyovKSB7CisgICAgICAvLyB1bnBhY2tpbmcgYXJndW1lbnRzIGJ5IGhhbmQgYmVuY2ht
YXJrZWQgZmFzdGVyCisgICAgICB2YXIgbCA9IGFyZ3VtZW50cy5sZW5ndGg7CisgICAgICB2YXIg
bWl4aW5zID0gbmV3IEFycmF5KGwpOworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKysp
IG1peGluc1tpXSA9IGFyZ3VtZW50c1tpXTsKKworICAgICAgQ29tcG9uZW50LnRvU3RyaW5nID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBwcmV0dHlQcmludE1peGlucyA9IG1peGlucy5tYXAo
ZnVuY3Rpb24obWl4aW4pIHsKKyAgICAgICAgICBpZiAobWl4aW4ubmFtZSA9PSBudWxsKSB7Cisg
ICAgICAgICAgICAvL2Z1bmN0aW9uIG5hbWUgcHJvcGVydHkgbm90IHN1cHBvcnRlZCBieSB0aGlz
IGJyb3dzZXIsIHVzZSByZWdleAorICAgICAgICAgICAgdmFyIG0gPSBtaXhpbi50b1N0cmluZygp
Lm1hdGNoKGZ1bmN0aW9uTmFtZVJlZ0V4KTsKKyAgICAgICAgICAgIHJldHVybiAobSAmJiBtWzFd
KSA/IG1bMV0gOiAiIjsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuICht
aXhpbi5uYW1lICE9ICJ3aXRoQmFzZUNvbXBvbmVudCIpID8gbWl4aW4ubmFtZSA6ICIiOworICAg
ICAgICAgIH0KKyAgICAgICAgfSkuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJywgJyk7CisgICAgICAg
IHJldHVybiBwcmV0dHlQcmludE1peGluczsKKyAgICAgIH07CisKKyAgICAgIGlmICh3aW5kb3cu
REVCVUcgJiYgd2luZG93LkRFQlVHLmVuYWJsZWQpIHsKKyAgICAgICAgQ29tcG9uZW50LmRlc2Ny
aWJlID0gQ29tcG9uZW50LnRvU3RyaW5nKCk7CisgICAgICB9CisKKyAgICAgIC8vJ29wdGlvbnMn
IGlzIG9wdGlvbmFsIGhhc2ggdG8gYmUgbWVyZ2VkIHdpdGggJ2RlZmF1bHRzJyBpbiB0aGUgY29t
cG9uZW50IGRlZmluaXRpb24KKyAgICAgIGZ1bmN0aW9uIENvbXBvbmVudChub2RlLCBvcHRpb25z
KSB7CisgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OworICAgICAgICB0aGlzLmlkZW50
aXR5ID0gY29tcG9uZW50SWQrKzsKKworICAgICAgICBpZiAoIW5vZGUpIHsKKyAgICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoIkNvbXBvbmVudCBuZWVkcyBhIG5vZGUiKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChub2RlLmpxdWVyeSkgeworICAgICAgICAgIHRoaXMubm9kZSA9IG5vZGVbMF07
CisgICAgICAgICAgdGhpcy4kbm9kZSA9IG5vZGU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgdGhpcy5ub2RlID0gbm9kZTsKKyAgICAgICAgICB0aGlzLiRub2RlID0gJChub2RlKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHRoaXMudG9TdHJpbmcgPSBDb21wb25lbnQudG9TdHJpbmc7Cisg
ICAgICAgIGlmICh3aW5kb3cuREVCVUcgJiYgd2luZG93LkRFQlVHLmVuYWJsZWQpIHsKKyAgICAg
ICAgICB0aGlzLmRlc2NyaWJlID0gdGhpcy50b1N0cmluZygpOworICAgICAgICB9CisKKyAgICAg
ICAgLy9tZXJnZSBkZWZhdWx0cyB3aXRoIHN1cHBsaWVkIG9wdGlvbnMKKyAgICAgICAgLy9wdXQg
b3B0aW9ucyBpbiBhdHRyLl9fcHJvdG9fXyB0byBhdm9pZCBtZXJnZSBvdmVyaGVhZAorICAgICAg
ICB2YXIgYXR0ciA9IE9iamVjdC5jcmVhdGUob3B0aW9ucyk7CisgICAgICAgIGZvciAodmFyIGtl
eSBpbiB0aGlzLmRlZmF1bHRzKSB7CisgICAgICAgICAgaWYgKCFvcHRpb25zLmhhc093blByb3Bl
cnR5KGtleSkpIHsKKyAgICAgICAgICAgIGF0dHJba2V5XSA9IHRoaXMuZGVmYXVsdHNba2V5XTsK
KyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5hdHRyID0gYXR0cjsKKworICAg
ICAgICBPYmplY3Qua2V5cyh0aGlzLmRlZmF1bHRzIHx8IHt9KS5mb3JFYWNoKGZ1bmN0aW9uKGtl
eSkgeworICAgICAgICAgIGlmICh0aGlzLmRlZmF1bHRzW2tleV0gPT09IG51bGwgJiYgdGhpcy5h
dHRyW2tleV0gPT09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWly
ZWQgYXR0cmlidXRlICInICsga2V5ICsgJyIgbm90IHNwZWNpZmllZCBpbiBhdHRhY2hUbyBmb3Ig
Y29tcG9uZW50ICInICsgdGhpcy50b1N0cmluZygpICsgJyIuJyk7CisgICAgICAgICAgfQorICAg
ICAgICB9LCB0aGlzKTsKKworICAgICAgICB0aGlzLmluaXRpYWxpemUuY2FsbCh0aGlzLCBvcHRp
b25zKTsKKyAgICAgIH0KKworICAgICAgQ29tcG9uZW50LmF0dGFjaFRvID0gYXR0YWNoVG87Cisg
ICAgICBDb21wb25lbnQudGVhcmRvd25BbGwgPSB0ZWFyZG93bkFsbDsKKworICAgICAgLy8gcHJl
cGVuZCBjb21tb24gbWl4aW5zIHRvIHN1cHBsaWVkIGxpc3QsIHRoZW4gbWl4aW4gYWxsIGZsYXZv
cnMKKyAgICAgIG1peGlucy51bnNoaWZ0KHdpdGhCYXNlQ29tcG9uZW50LCBhZHZpY2Uud2l0aEFk
dmljZSwgcmVnaXN0cnkud2l0aFJlZ2lzdHJhdGlvbik7CisKKyAgICAgIGNvbXBvc2UubWl4aW4o
Q29tcG9uZW50LnByb3RvdHlwZSwgbWl4aW5zKTsKKworICAgICAgcmV0dXJuIENvbXBvbmVudDsK
KyAgICB9CisKKyAgICBkZWZpbmUudGVhcmRvd25BbGwgPSBmdW5jdGlvbigpIHsKKyAgICAgIHJl
Z2lzdHJ5LmNvbXBvbmVudHMuc2xpY2UoKS5mb3JFYWNoKGZ1bmN0aW9uKGMpIHsKKyAgICAgICAg
Yy5jb21wb25lbnQudGVhcmRvd25BbGwoKTsKKyAgICAgIH0pOworICAgICAgcmVnaXN0cnkucmVz
ZXQoKTsKKyAgICB9OworCisgICAgcmV0dXJuIGRlZmluZTsKKyAgfQorKTsKZGlmZiAtLWdpdCBh
L1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdo
dGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZmxpZ2h0L2xpYi9jb21wb3NlLmpzIGIvV2Vic2l0
ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvZmxpZ2h0anMtZXhh
bXBsZS1hcHAvY29tcG9uZW50cy9mbGlnaHQvbGliL2NvbXBvc2UuanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzEz
NDNlN2ZlODk1ZjlhZTM4YTk3MzBiNmYyNzkyZTA5MjlkNGE3MgotLS0gL2Rldi9udWxsCisrKyBi
L1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdo
dGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZmxpZ2h0L2xpYi9jb21wb3NlLmpzCkBAIC0wLDAg
KzEsODYgQEAKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor
Ly8gQ29weXJpZ2h0IDIwMTMgVHdpdHRlciwgSW5jCisvLyBMaWNlbnNlZCB1bmRlciBUaGUgTUlU
IExpY2Vuc2UKKy8vIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQKKy8vID09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisidXNlIHN0cmljdCI7CisK
K2RlZmluZSgKKworICBbCisgICAgJy4vdXRpbHMnLAorICAgICcuLi90b29scy9kZWJ1Zy9kZWJ1
ZycKKyAgXSwKKworICBmdW5jdGlvbih1dGlsLCBkZWJ1ZykgeworCisgICAgLy9lbnVtZXJhYmxl
cyBhcmUgc2hpbXMgLSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Igc2hpbSBkb2Vzbid0IHdvcmsK
KyAgICB2YXIgY2FuV3JpdGVQcm90ZWN0ID0gZGVidWcuZW5hYmxlZCAmJiAhdXRpbC5pc0VudW1l
cmFibGUoT2JqZWN0LCAnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJyk7CisgICAgLy93aGl0ZWxp
c3Qgb2YgdW5sb2NrYWJsZSBwcm9wZXJ0eSBuYW1lcworICAgIHZhciBkb250TG9jayA9IFsnbWl4
ZWRJbiddOworCisgICAgaWYgKGNhbldyaXRlUHJvdGVjdCkgeworICAgICAgLy9JRTggZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yIGlzIGJ1aWx0LWluIGJ1dCB0aHJvd3MgZXhlcHRpb24gb24gbm9u
IERPTSBvYmplY3RzCisgICAgICB0cnkgeworICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKE9iamVjdCwgJ2tleXMnKTsKKyAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICBj
YW5Xcml0ZVByb3RlY3QgPSBmYWxzZTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBz
ZXRQcm9wZXJ0eVdyaXRhYmlsaXR5KG9iaiwgaXNXcml0YWJsZSkgeworICAgICAgaWYgKCFjYW5X
cml0ZVByb3RlY3QpIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorCisgICAgICB2YXIgcHJv
cHMgPSBPYmplY3QuY3JlYXRlKG51bGwpOworCisgICAgICBPYmplY3Qua2V5cyhvYmopLmZvckVh
Y2goCisgICAgICAgIGZ1bmN0aW9uIChrZXkpIHsKKyAgICAgICAgICBpZiAoZG9udExvY2suaW5k
ZXhPZihrZXkpIDwgMCkgeworICAgICAgICAgICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKG9iaiwga2V5KTsKKyAgICAgICAgICAgIGRlc2Mud3JpdGFibGUgPSBp
c1dyaXRhYmxlOworICAgICAgICAgICAgcHJvcHNba2V5XSA9IGRlc2M7CisgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICApOworCisgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhvYmos
IHByb3BzKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB1bmxvY2tQcm9wZXJ0eShvYmosIHByb3As
IG9wKSB7CisgICAgICB2YXIgd3JpdGFibGU7CisKKyAgICAgIGlmICghY2FuV3JpdGVQcm90ZWN0
IHx8ICFvYmouaGFzT3duUHJvcGVydHkocHJvcCkpIHsKKyAgICAgICAgb3AuY2FsbChvYmopOwor
ICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICAgIHdyaXRhYmxlID0gT2JqZWN0LmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihvYmosIHByb3ApLndyaXRhYmxlOworICAgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KG9iaiwgcHJvcCwgeyB3cml0YWJsZTogdHJ1ZSB9KTsKKyAgICAgIG9wLmNh
bGwob2JqKTsKKyAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHByb3AsIHsgd3JpdGFi
bGU6IHdyaXRhYmxlIH0pOworICAgIH0KKworICAgIGZ1bmN0aW9uIG1peGluKGJhc2UsIG1peGlu
cykgeworICAgICAgYmFzZS5taXhlZEluID0gYmFzZS5oYXNPd25Qcm9wZXJ0eSgnbWl4ZWRJbicp
ID8gYmFzZS5taXhlZEluIDogW107CisKKyAgICAgIG1peGlucy5mb3JFYWNoKGZ1bmN0aW9uKG1p
eGluKSB7CisgICAgICAgIGlmIChiYXNlLm1peGVkSW4uaW5kZXhPZihtaXhpbikgPT0gLTEpIHsK
KyAgICAgICAgICBzZXRQcm9wZXJ0eVdyaXRhYmlsaXR5KGJhc2UsIGZhbHNlKTsKKyAgICAgICAg
ICBtaXhpbi5jYWxsKGJhc2UpOworICAgICAgICAgIGJhc2UubWl4ZWRJbi5wdXNoKG1peGluKTsK
KyAgICAgICAgfQorICAgICAgfSk7CisKKyAgICAgIHNldFByb3BlcnR5V3JpdGFiaWxpdHkoYmFz
ZSwgdHJ1ZSk7CisgICAgfQorCisgICAgcmV0dXJuIHsKKyAgICAgIG1peGluOiBtaXhpbiwKKyAg
ICAgIHVubG9ja1Byb3BlcnR5OiB1bmxvY2tQcm9wZXJ0eQorICAgIH07CisKKyAgfQorKTsKZGlm
ZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3Vy
Y2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZmxpZ2h0L2xpYi9pbmRleC5qcyBi
L1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdo
dGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZmxpZ2h0L2xpYi9pbmRleC5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4xNjA0YjI1M2I5MWQyNzM4ZjM4M2MyNjk4MDg0ZDMwOTQ1YmI1MGIwCi0tLSAvZGV2L251bGwK
KysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMv
ZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9mbGlnaHQvbGliL2luZGV4LmpzCkBAIC0w
LDAgKzEsMzAgQEAKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQorLy8gQ29weXJpZ2h0IDIwMTMgVHdpdHRlciwgSW5jCisvLyBMaWNlbnNlZCB1bmRlciBUaGUg
TUlUIExpY2Vuc2UKKy8vIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQKKy8vID09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitkZWZpbmUoCisKKyAg
WworICAgICcuL2FkdmljZScsCisgICAgJy4vY29tcG9uZW50JywKKyAgICAnLi9jb21wb3NlJywK
KyAgICAnLi9sb2dnZXInLAorICAgICcuL3JlZ2lzdHJ5JywKKyAgICAnLi91dGlscycKKyAgXSwK
KworICBmdW5jdGlvbiAoYWR2aWNlLCBjb21wb25lbnQsIGNvbXBvc2UsIGxvZ2dlciwgcmVnaXN0
cnksIHV0aWxzKSB7CisKKyAgICByZXR1cm4geworICAgICAgYWR2aWNlOiBhZHZpY2UsCisgICAg
ICBjb21wb25lbnQ6IGNvbXBvbmVudCwKKyAgICAgIGNvbXBvc2U6IGNvbXBvc2UsCisgICAgICBs
b2dnZXI6IGxvZ2dlciwKKyAgICAgIHJlZ2lzdHJ5OiByZWdpc3RyeSwKKyAgICAgIHV0aWxzOiB1
dGlscworICAgIH07CisKKyAgfQorKTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5j
aC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBv
bmVudHMvZmxpZ2h0L2xpYi9sb2dnZXIuanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1Nw
ZWVkb21ldGVyMi4xL3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2Zs
aWdodC9saWIvbG9nZ2VyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJjODliMWJkMjAwYmZhZmEyOWMyMzZiYTU2
Njk4NTA5Y2VkMTFiZWIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gu
b3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25l
bnRzL2ZsaWdodC9saWIvbG9nZ2VyLmpzCkBAIC0wLDAgKzEsOTMgQEAKKy8vID09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gQ29weXJpZ2h0IDIwMTMgVHdpdHRl
ciwgSW5jCisvLyBMaWNlbnNlZCB1bmRlciBUaGUgTUlUIExpY2Vuc2UKKy8vIGh0dHA6Ly9vcGVu
c291cmNlLm9yZy9saWNlbnNlcy9NSVQKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQorCisidXNlIHN0cmljdCI7CisKK2RlZmluZSgKKworICBbCisgICAgJy4v
Y29tcG9zZScsCisgICAgJy4vdXRpbHMnCisgIF0sCisKKyAgZnVuY3Rpb24gKGNvbXBvc2UsIHV0
aWwpIHsKKworICAgIHZhciBhY3Rpb25TeW1ib2xzID0geworICAgICAgb246JzwtJywKKyAgICAg
IHRyaWdnZXI6ICctPicsCisgICAgICBvZmY6ICd4ICcKKyAgICB9OworCisgICAgZnVuY3Rpb24g
ZWxlbVRvU3RyaW5nKGVsZW0pIHsKKyAgICAgIHZhciB0YWdTdHIgPSBlbGVtLnRhZ05hbWUgPyBl
bGVtLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA6IGVsZW0udG9TdHJpbmcoKTsKKyAgICAgIHZhciBj
bGFzc1N0ciA9IGVsZW0uY2xhc3NOYW1lID8gIi4iICsgKGVsZW0uY2xhc3NOYW1lKSA6ICIiOwor
ICAgICAgdmFyIHJlc3VsdCA9IHRhZ1N0ciArIGNsYXNzU3RyOworICAgICAgcmV0dXJuIGVsZW0u
dGFnTmFtZSA/IFsnXCcnLCAnXCcnXS5qb2luKHJlc3VsdCkgOiByZXN1bHQ7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gbG9nKGFjdGlvbiwgY29tcG9uZW50LCBldmVudEFyZ3MpIHsKKworICAgICAg
dmFyIG5hbWUsIGVsZW0sIGZuLCBmbk5hbWUsIGxvZ0ZpbHRlciwgdG9SZWdFeHAsIGFjdGlvbkxv
Z2dhYmxlLCBuYW1lTG9nZ2FibGU7CisKKyAgICAgIGlmICh0eXBlb2YgZXZlbnRBcmdzW2V2ZW50
QXJncy5sZW5ndGgtMV0gPT0gJ2Z1bmN0aW9uJykgeworICAgICAgICBmbiA9IGV2ZW50QXJncy5w
b3AoKTsKKyAgICAgICAgZm4gPSBmbi51bmJvdW5kIHx8IGZuOyAvL3VzZSB1bmJvdW5kIHZlcnNp
b24gaWYgYW55IChiZXR0ZXIgaW5mbykKKyAgICAgIH0KKworICAgICAgaWYgKHR5cGVvZiBldmVu
dEFyZ3NbZXZlbnRBcmdzLmxlbmd0aCAtIDFdID09ICdvYmplY3QnKSB7CisgICAgICAgIGV2ZW50
QXJncy5wb3AoKTsgLy90cmlnZ2VyIGRhdGEgYXJnIC0gbm90IGxvZ2dlZCByaWdodCBub3cKKyAg
ICAgIH0KKworICAgICAgaWYgKGV2ZW50QXJncy5sZW5ndGggPT0gMikgeworICAgICAgICBlbGVt
ID0gZXZlbnRBcmdzWzBdOworICAgICAgICBuYW1lID0gZXZlbnRBcmdzWzFdOworICAgICAgfSBl
bHNlIHsKKyAgICAgICAgZWxlbSA9IGNvbXBvbmVudC4kbm9kZVswXTsKKyAgICAgICAgbmFtZSA9
IGV2ZW50QXJnc1swXTsKKyAgICAgIH0KKworICAgICAgaWYgKHdpbmRvdy5ERUJVRyAmJiB3aW5k
b3cuREVCVUcuZW5hYmxlZCkgeworICAgICAgICBsb2dGaWx0ZXIgPSBERUJVRy5ldmVudHMubG9n
RmlsdGVyOworCisgICAgICAgIC8vIG5vIHJlZ2V4IGZvciB5b3UsIGFjdGlvbnMuLi4KKyAgICAg
ICAgYWN0aW9uTG9nZ2FibGUgPSBsb2dGaWx0ZXIuYWN0aW9ucz09ImFsbCIgfHwgKGxvZ0ZpbHRl
ci5hY3Rpb25zLmluZGV4T2YoYWN0aW9uKSA+IC0xKTsKKyAgICAgICAgLy8gZXZlbnQgbmFtZSBm
aWx0ZXIgYWxsb3cgd2lsZGNhcmRzIG9yIHJlZ2V4Li4uCisgICAgICAgIHRvUmVnRXhwID0gZnVu
Y3Rpb24oZXhwcikgeworICAgICAgICAgIHJldHVybiBleHByLnRlc3QgPyBleHByIDogbmV3IFJl
Z0V4cCgiXiIgKyBleHByLnJlcGxhY2UoL1wqL2csICIuKiIpICsgIiQiKTsKKyAgICAgICAgfTsK
KyAgICAgICAgbmFtZUxvZ2dhYmxlID0KKyAgICAgICAgICBsb2dGaWx0ZXIuZXZlbnROYW1lcz09
ImFsbCIgfHwKKyAgICAgICAgICBsb2dGaWx0ZXIuZXZlbnROYW1lcy5zb21lKGZ1bmN0aW9uKGUp
IHtyZXR1cm4gdG9SZWdFeHAoZSkudGVzdChuYW1lKX0pOworCisgICAgICAgIGlmIChhY3Rpb25M
b2dnYWJsZSAmJiBuYW1lTG9nZ2FibGUpIHsKKyAgICAgICAgICBjb25zb2xlLmluZm8oCisgICAg
ICAgICAgICBhY3Rpb25TeW1ib2xzW2FjdGlvbl0sCisgICAgICAgICAgICBhY3Rpb24sCisgICAg
ICAgICAgICAnWycgKyBuYW1lICsgJ10nLAorICAgICAgICAgICAgZWxlbVRvU3RyaW5nKGVsZW0p
LAorICAgICAgICAgICAgY29tcG9uZW50LmNvbnN0cnVjdG9yLnRvU3RyaW5nKCksCisgICAgICAg
ICAgICBmbiAmJiAoZm5OYW1lID0gZm4ubmFtZSB8fCBmbi5kaXNwbGF5TmFtZSkgJiYgJy0+ICAn
ICsgZm5OYW1lCisgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworCisg
ICAgZnVuY3Rpb24gd2l0aExvZ2dpbmcoKSB7CisgICAgICB0aGlzLmJlZm9yZSgndHJpZ2dlcics
IGZ1bmN0aW9uKCkgeworICAgICAgICBsb2coJ3RyaWdnZXInLCB0aGlzLCB1dGlsLnRvQXJyYXko
YXJndW1lbnRzKSk7CisgICAgICB9KTsKKyAgICAgIHRoaXMuYmVmb3JlKCdvbicsIGZ1bmN0aW9u
KCkgeworICAgICAgICBsb2coJ29uJywgdGhpcywgdXRpbC50b0FycmF5KGFyZ3VtZW50cykpOwor
ICAgICAgfSk7CisgICAgICB0aGlzLmJlZm9yZSgnb2ZmJywgZnVuY3Rpb24oZXZlbnRBcmdzKSB7
CisgICAgICAgIGxvZygnb2ZmJywgdGhpcywgdXRpbC50b0FycmF5KGFyZ3VtZW50cykpOworICAg
ICAgfSk7CisgICAgfQorCisgICAgcmV0dXJuIHdpdGhMb2dnaW5nOworICB9CispOwpkaWZmIC0t
Z2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMv
ZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9mbGlnaHQvbGliL3JlZ2lzdHJ5LmpzIGIv
V2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvZmxpZ2h0
anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9mbGlnaHQvbGliL3JlZ2lzdHJ5LmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmJhYWEzYjEwYTdlZWQzOTc1YTQ5ZmY0YzU5MjE4YTkzNTgzOTU2NzUKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNl
cy9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2ZsaWdodC9saWIvcmVnaXN0cnkuanMK
QEAgLTAsMCArMSwyMjAgQEAKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQorLy8gQ29weXJpZ2h0IDIwMTMgVHdpdHRlciwgSW5jCisvLyBMaWNlbnNlZCB1bmRl
ciBUaGUgTUlUIExpY2Vuc2UKKy8vIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQK
Ky8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisidXNlIHN0
cmljdCI7CisKK2RlZmluZSgKKworICBbCisgICAgJy4vdXRpbHMnCisgIF0sCisKKyAgZnVuY3Rp
b24gKHV0aWwpIHsKKworICAgIGZ1bmN0aW9uIHBhcnNlRXZlbnRBcmdzKGluc3RhbmNlLCBhcmdz
KSB7CisgICAgICB2YXIgZWxlbWVudCwgdHlwZSwgY2FsbGJhY2s7CisgICAgICB2YXIgZW5kID0g
YXJncy5sZW5ndGg7CisKKyAgICAgIGlmICh0eXBlb2YgYXJnc1tlbmQgLSAxXSA9PT0gJ2Z1bmN0
aW9uJykgeworICAgICAgICBlbmQgLT0gMTsKKyAgICAgICAgY2FsbGJhY2sgPSBhcmdzW2VuZF07
CisgICAgICB9CisKKyAgICAgIGlmICh0eXBlb2YgYXJnc1tlbmQgLSAxXSA9PT0gJ29iamVjdCcp
IHsKKyAgICAgICAgZW5kIC09IDE7CisgICAgICB9CisKKyAgICAgIGlmIChlbmQgPT0gMikgewor
ICAgICAgICBlbGVtZW50ID0gYXJnc1swXTsKKyAgICAgICAgdHlwZSA9IGFyZ3NbMV07CisgICAg
ICB9IGVsc2UgeworICAgICAgICBlbGVtZW50ID0gaW5zdGFuY2Uubm9kZTsKKyAgICAgICAgdHlw
ZSA9IGFyZ3NbMF07CisgICAgICB9CisKKyAgICAgIHJldHVybiB7CisgICAgICAgIGVsZW1lbnQ6
IGVsZW1lbnQsCisgICAgICAgIHR5cGU6IHR5cGUsCisgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFj
aworICAgICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBtYXRjaEV2ZW50KGEsIGIpIHsKKyAg
ICAgIHJldHVybiAoCisgICAgICAgIChhLmVsZW1lbnQgPT0gYi5lbGVtZW50KSAmJgorICAgICAg
ICAoYS50eXBlID09IGIudHlwZSkgJiYKKyAgICAgICAgKGIuY2FsbGJhY2sgPT0gbnVsbCB8fCAo
YS5jYWxsYmFjayA9PSBiLmNhbGxiYWNrKSkKKyAgICAgICk7CisgICAgfQorCisgICAgZnVuY3Rp
b24gUmVnaXN0cnkoKSB7CisKKyAgICAgIHZhciByZWdpc3RyeSA9IHRoaXM7CisKKyAgICAgICh0
aGlzLnJlc2V0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuY29tcG9uZW50cyA9IFtdOwor
ICAgICAgICB0aGlzLmFsbEluc3RhbmNlcyA9IHt9OworICAgICAgICB0aGlzLmV2ZW50cyA9IFtd
OworICAgICAgfSkuY2FsbCh0aGlzKTsKKworICAgICAgZnVuY3Rpb24gQ29tcG9uZW50SW5mbyhj
b21wb25lbnQpIHsKKyAgICAgICAgdGhpcy5jb21wb25lbnQgPSBjb21wb25lbnQ7CisgICAgICAg
IHRoaXMuYXR0YWNoZWRUbyA9IFtdOworICAgICAgICB0aGlzLmluc3RhbmNlcyA9IHt9OworCisg
ICAgICAgIHRoaXMuYWRkSW5zdGFuY2UgPSBmdW5jdGlvbihpbnN0YW5jZSkgeworICAgICAgICAg
IHZhciBpbnN0YW5jZUluZm8gPSBuZXcgSW5zdGFuY2VJbmZvKGluc3RhbmNlKTsKKyAgICAgICAg
ICB0aGlzLmluc3RhbmNlc1tpbnN0YW5jZS5pZGVudGl0eV0gPSBpbnN0YW5jZUluZm87CisgICAg
ICAgICAgdGhpcy5hdHRhY2hlZFRvLnB1c2goaW5zdGFuY2Uubm9kZSk7CisKKyAgICAgICAgICBy
ZXR1cm4gaW5zdGFuY2VJbmZvOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5yZW1vdmVJbnN0
YW5jZSA9IGZ1bmN0aW9uKGluc3RhbmNlKSB7CisgICAgICAgICAgZGVsZXRlIHRoaXMuaW5zdGFu
Y2VzW2luc3RhbmNlLmlkZW50aXR5XTsKKyAgICAgICAgICB2YXIgaW5kZXhPZk5vZGUgPSB0aGlz
LmF0dGFjaGVkVG8uaW5kZXhPZihpbnN0YW5jZS5ub2RlKTsKKyAgICAgICAgICAoaW5kZXhPZk5v
ZGUgPiAtMSkgJiYgdGhpcy5hdHRhY2hlZFRvLnNwbGljZShpbmRleE9mTm9kZSwgMSk7CisKKyAg
ICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2VzLmxlbmd0aCkgeworICAgICAgICAgICAgLy9pZiBJ
IGhvbGQgbm8gbW9yZSBpbnN0YW5jZXMgcmVtb3ZlIG1lIGZyb20gcmVnaXN0cnkKKyAgICAgICAg
ICAgIHJlZ2lzdHJ5LnJlbW92ZUNvbXBvbmVudEluZm8odGhpcyk7CisgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgdGhpcy5pc0F0dGFjaGVkVG8gPSBmdW5jdGlvbihub2RlKSB7Cisg
ICAgICAgICAgcmV0dXJuIHRoaXMuYXR0YWNoZWRUby5pbmRleE9mKG5vZGUpID4gLTE7CisgICAg
ICAgIH0KKyAgICAgIH0KKworICAgICAgZnVuY3Rpb24gSW5zdGFuY2VJbmZvKGluc3RhbmNlKSB7
CisgICAgICAgIHRoaXMuaW5zdGFuY2UgPSBpbnN0YW5jZTsKKyAgICAgICAgdGhpcy5ldmVudHMg
PSBbXTsKKworICAgICAgICB0aGlzLmFkZEJpbmQgPSBmdW5jdGlvbihldmVudCkgeworICAgICAg
ICAgIHRoaXMuZXZlbnRzLnB1c2goZXZlbnQpOworICAgICAgICAgIHJlZ2lzdHJ5LmV2ZW50cy5w
dXNoKGV2ZW50KTsKKyAgICAgICAgfTsKKworICAgICAgICB0aGlzLnJlbW92ZUJpbmQgPSBmdW5j
dGlvbihldmVudCkgeworICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBlOyBlID0gdGhpcy5ldmVu
dHNbaV07IGkrKykgeworICAgICAgICAgICAgaWYgKG1hdGNoRXZlbnQoZSwgZXZlbnQpKSB7Cisg
ICAgICAgICAgICAgIHRoaXMuZXZlbnRzLnNwbGljZShpLCAxKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgdGhpcy5hZGRJbnN0YW5jZSA9
IGZ1bmN0aW9uKGluc3RhbmNlKSB7CisgICAgICAgIHZhciBjb21wb25lbnQgPSB0aGlzLmZpbmRD
b21wb25lbnRJbmZvKGluc3RhbmNlKTsKKworICAgICAgICBpZiAoIWNvbXBvbmVudCkgeworICAg
ICAgICAgIGNvbXBvbmVudCA9IG5ldyBDb21wb25lbnRJbmZvKGluc3RhbmNlLmNvbnN0cnVjdG9y
KTsKKyAgICAgICAgICB0aGlzLmNvbXBvbmVudHMucHVzaChjb21wb25lbnQpOworICAgICAgICB9
CisKKyAgICAgICAgdmFyIGluc3QgPSBjb21wb25lbnQuYWRkSW5zdGFuY2UoaW5zdGFuY2UpOwor
CisgICAgICAgIHRoaXMuYWxsSW5zdGFuY2VzW2luc3RhbmNlLmlkZW50aXR5XSA9IGluc3Q7CisK
KyAgICAgICAgcmV0dXJuIGNvbXBvbmVudDsKKyAgICAgIH07CisKKyAgICAgIHRoaXMucmVtb3Zl
SW5zdGFuY2UgPSBmdW5jdGlvbihpbnN0YW5jZSkgeworICAgICAgICB2YXIgaW5kZXgsIGluc3RJ
bmZvID0gdGhpcy5maW5kSW5zdGFuY2VJbmZvKGluc3RhbmNlKTsKKworICAgICAgICAvL3JlbW92
ZSBmcm9tIGNvbXBvbmVudCBpbmZvCisgICAgICAgIHZhciBjb21wb25lbnRJbmZvID0gdGhpcy5m
aW5kQ29tcG9uZW50SW5mbyhpbnN0YW5jZSk7CisgICAgICAgIGNvbXBvbmVudEluZm8gJiYgY29t
cG9uZW50SW5mby5yZW1vdmVJbnN0YW5jZShpbnN0YW5jZSk7CisKKyAgICAgICAgLy9yZW1vdmUg
ZnJvbSByZWdpc3RyeQorICAgICAgICBkZWxldGUgdGhpcy5hbGxJbnN0YW5jZXNbaW5zdGFuY2Uu
aWRlbnRpdHldOworICAgICAgfTsKKworICAgICAgdGhpcy5yZW1vdmVDb21wb25lbnRJbmZvID0g
ZnVuY3Rpb24oY29tcG9uZW50SW5mbykgeworICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmNvbXBv
bmVudHMuaW5kZXhPZihjb21wb25lbnRJbmZvKTsKKyAgICAgICAgKGluZGV4ID4gLTEpICAmJiB0
aGlzLmNvbXBvbmVudHMuc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgIH07CisKKyAgICAgIHRoaXMu
ZmluZENvbXBvbmVudEluZm8gPSBmdW5jdGlvbih3aGljaCkgeworICAgICAgICB2YXIgY29tcG9u
ZW50ID0gd2hpY2guYXR0YWNoVG8gPyB3aGljaCA6IHdoaWNoLmNvbnN0cnVjdG9yOworCisgICAg
ICAgIGZvciAodmFyIGkgPSAwLCBjOyBjID0gdGhpcy5jb21wb25lbnRzW2ldOyBpKyspIHsKKyAg
ICAgICAgICBpZiAoYy5jb21wb25lbnQgPT09IGNvbXBvbmVudCkgeworICAgICAgICAgICAgcmV0
dXJuIGM7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG51bGw7Cisg
ICAgICB9OworCisgICAgICB0aGlzLmZpbmRJbnN0YW5jZUluZm8gPSBmdW5jdGlvbihpbnN0YW5j
ZSkgeworICAgICAgICAgIHJldHVybiB0aGlzLmFsbEluc3RhbmNlc1tpbnN0YW5jZS5pZGVudGl0
eV0gfHwgbnVsbDsKKyAgICAgIH07CisKKyAgICAgIHRoaXMuZmluZEluc3RhbmNlSW5mb0J5Tm9k
ZSA9IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICB2YXIgcmVzdWx0ID0gW107CisgICAgICAg
ICAgT2JqZWN0LmtleXModGhpcy5hbGxJbnN0YW5jZXMpLmZvckVhY2goZnVuY3Rpb24oaykgewor
ICAgICAgICAgICAgdmFyIHRoaXNJbnN0YW5jZUluZm8gPSB0aGlzLmFsbEluc3RhbmNlc1trXTsK
KyAgICAgICAgICAgIGlmKHRoaXNJbnN0YW5jZUluZm8uaW5zdGFuY2Uubm9kZSA9PT0gbm9kZSkg
eworICAgICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzSW5zdGFuY2VJbmZvKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICB9LCB0aGlzKTsKKyAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgfTsKKworICAgICAgdGhpcy5vbiA9IGZ1bmN0aW9uKGNvbXBvbmVudE9uKSB7CisgICAgICAg
IHZhciBpbnN0YW5jZSA9IHJlZ2lzdHJ5LmZpbmRJbnN0YW5jZUluZm8odGhpcyksIGJvdW5kQ2Fs
bGJhY2s7CisKKyAgICAgICAgLy8gdW5wYWNraW5nIGFyZ3VtZW50cyBieSBoYW5kIGJlbmNobWFy
a2VkIGZhc3RlcgorICAgICAgICB2YXIgbCA9IGFyZ3VtZW50cy5sZW5ndGgsIGkgPSAxOworICAg
ICAgICB2YXIgb3RoZXJBcmdzID0gbmV3IEFycmF5KGwgLSAxKTsKKyAgICAgICAgZm9yICg7IGkg
PCBsOyBpKyspIG90aGVyQXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07CisKKyAgICAgICAgaWYg
KGluc3RhbmNlKSB7CisgICAgICAgICAgYm91bmRDYWxsYmFjayA9IGNvbXBvbmVudE9uLmFwcGx5
KG51bGwsIG90aGVyQXJncyk7CisgICAgICAgICAgaWYgKGJvdW5kQ2FsbGJhY2spIHsKKyAgICAg
ICAgICAgIG90aGVyQXJnc1tvdGhlckFyZ3MubGVuZ3RoLTFdID0gYm91bmRDYWxsYmFjazsKKyAg
ICAgICAgICB9CisgICAgICAgICAgdmFyIGV2ZW50ID0gcGFyc2VFdmVudEFyZ3ModGhpcywgb3Ro
ZXJBcmdzKTsKKyAgICAgICAgICBpbnN0YW5jZS5hZGRCaW5kKGV2ZW50KTsKKyAgICAgICAgfQor
ICAgICAgfTsKKworICAgICAgdGhpcy5vZmYgPSBmdW5jdGlvbihlbCwgdHlwZSwgY2FsbGJhY2sp
IHsKKyAgICAgICAgdmFyIGV2ZW50ID0gcGFyc2VFdmVudEFyZ3ModGhpcywgYXJndW1lbnRzKSwK
KyAgICAgICAgICAgIGluc3RhbmNlID0gcmVnaXN0cnkuZmluZEluc3RhbmNlSW5mbyh0aGlzKTsK
KworICAgICAgICBpZiAoaW5zdGFuY2UpIHsKKyAgICAgICAgICBpbnN0YW5jZS5yZW1vdmVCaW5k
KGV2ZW50KTsKKyAgICAgICAgfQorICAgICAgfTsKKworICAgICAgLy9kZWJ1ZyB0b29scyBtYXkg
d2FudCB0byBhZGQgYWR2aWNlIHRvIHRyaWdnZXIKKyAgICAgIGlmICh3aW5kb3cuREVCVUcgJiYg
REVCVUcuZW5hYmxlZCkgeworICAgICAgICByZWdpc3RyeS50cmlnZ2VyID0gbmV3IEZ1bmN0aW9u
OworICAgICAgfQorCisgICAgICB0aGlzLnRlYXJkb3duID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHJlZ2lzdHJ5LnJlbW92ZUluc3RhbmNlKHRoaXMpOworICAgICAgfTsKKworICAgICAgdGhpcy53
aXRoUmVnaXN0cmF0aW9uID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuYmVmb3JlKCdpbml0
aWFsaXplJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgcmVnaXN0cnkuYWRkSW5zdGFuY2UodGhp
cyk7CisgICAgICAgIH0pOworCisgICAgICAgIHRoaXMuYXJvdW5kKCdvbicsIHJlZ2lzdHJ5Lm9u
KTsKKyAgICAgICAgdGhpcy5hZnRlcignb2ZmJywgcmVnaXN0cnkub2ZmKTsKKyAgICAgICAgLy9k
ZWJ1ZyB0b29scyBtYXkgd2FudCB0byBhZGQgYWR2aWNlIHRvIHRyaWdnZXIKKyAgICAgICAgd2lu
ZG93LkRFQlVHICYmIERFQlVHLmVuYWJsZWQgJiYgdGhpcy5hZnRlcigndHJpZ2dlcicsIHJlZ2lz
dHJ5LnRyaWdnZXIpOworICAgICAgICB0aGlzLmFmdGVyKCd0ZWFyZG93bicsIHtvYmo6cmVnaXN0
cnksIGZuTmFtZTondGVhcmRvd24nfSk7CisgICAgICB9OworCisgICAgfQorCisgICAgcmV0dXJu
IG5ldyBSZWdpc3RyeTsKKyAgfQorKTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5j
aC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBv
bmVudHMvZmxpZ2h0L2xpYi91dGlscy5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3Bl
ZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZmxp
Z2h0L2xpYi91dGlscy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMWFmNzc3MzQ4ZDY5ZWRiZDk5M2FhNmJjOTJj
OWNmNzFkMDAzYjU1Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9y
Zy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50
cy9mbGlnaHQvbGliL3V0aWxzLmpzCkBAIC0wLDAgKzEsMjM2IEBACisvLyA9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIENvcHlyaWdodCAyMDEzIFR3aXR0ZXIs
IEluYworLy8gTGljZW5zZWQgdW5kZXIgVGhlIE1JVCBMaWNlbnNlCisvLyBodHRwOi8vb3BlbnNv
dXJjZS5vcmcvbGljZW5zZXMvTUlUCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KKworInVzZSBzdHJpY3QiOworCitkZWZpbmUoCisKKyAgW10sCisKKyAgZnVu
Y3Rpb24gKCkgeworCisgICAgdmFyIGFycnkgPSBbXTsKKyAgICB2YXIgREVGQVVMVF9JTlRFUlZB
TCA9IDEwMDsKKworICAgIHZhciB1dGlscyA9IHsKKworICAgICAgaXNEb21PYmo6IGZ1bmN0aW9u
KG9iaikgeworICAgICAgICByZXR1cm4gISEob2JqLm5vZGVUeXBlIHx8IChvYmogPT09IHdpbmRv
dykpOworICAgICAgfSwKKworICAgICAgdG9BcnJheTogZnVuY3Rpb24ob2JqLCBmcm9tKSB7Cisg
ICAgICAgIHJldHVybiBhcnJ5LnNsaWNlLmNhbGwob2JqLCBmcm9tKTsKKyAgICAgIH0sCisKKyAg
ICAgIC8vIHJldHVybnMgbmV3IG9iamVjdCByZXByZXNlbnRpbmcgbXVsdGlwbGUgb2JqZWN0cyBt
ZXJnZWQgdG9nZXRoZXIKKyAgICAgIC8vIG9wdGlvbmFsIGZpbmFsIGFyZ3VtZW50IGlzIGJvb2xl
YW4gd2hpY2ggc3BlY2lmaWVzIGlmIG1lcmdlIGlzIHJlY3Vyc2l2ZQorICAgICAgLy8gb3JpZ2lu
YWwgb2JqZWN0cyBhcmUgdW5tb2RpZmllZAorICAgICAgLy8KKyAgICAgIC8vIHVzYWdlOgorICAg
ICAgLy8gICB2YXIgYmFzZSA9IHthOjIsIGI6Nn07CisgICAgICAvLyAgIHZhciBleHRyYSA9IHti
OjMsIGM6NH07CisgICAgICAvLyAgIG1lcmdlKGJhc2UsIGV4dHJhKTsgLy97YToyLCBiOjMsIGM6
NH0KKyAgICAgIC8vICAgYmFzZTsgLy97YToyLCBiOjZ9CisgICAgICAvLworICAgICAgLy8gICB2
YXIgYmFzZSA9IHthOjIsIGI6Nn07CisgICAgICAvLyAgIHZhciBleHRyYSA9IHtiOjMsIGM6NH07
CisgICAgICAvLyAgIHZhciBleHRyYUV4dHJhID0ge2E6NCwgZDo5fTsKKyAgICAgIC8vICAgbWVy
Z2UoYmFzZSwgZXh0cmEsIGV4dHJhRXh0cmEpOyAvL3thOjQsIGI6MywgYzo0LiBkOiA5fQorICAg
ICAgLy8gICBiYXNlOyAvL3thOjIsIGI6Nn0KKyAgICAgIC8vCisgICAgICAvLyAgIHZhciBiYXNl
ID0ge2E6MiwgYjp7YmI6NCwgY2M6NX19OworICAgICAgLy8gICB2YXIgZXh0cmEgPSB7YTo0LCBi
OntjYzo3LCBkZDoxfX07CisgICAgICAvLyAgIG1lcmdlKGJhc2UsIGV4dHJhLCB0cnVlKTsgLy97
YTo0LCBiOntiYjo0LCBjYzo3LCBkZDoxfX0KKyAgICAgIC8vICAgYmFzZTsgLy97YToyLCBiOjZ9
CisKKyAgICAgIG1lcmdlOiBmdW5jdGlvbigvKm9iajEsIG9iajIsLi4uLmRlZXBDb3B5Ki8pIHsK
KyAgICAgICAgLy8gdW5wYWNraW5nIGFyZ3VtZW50cyBieSBoYW5kIGJlbmNobWFya2VkIGZhc3Rl
cgorICAgICAgICB2YXIgbCA9IGFyZ3VtZW50cy5sZW5ndGgsCisgICAgICAgICAgICBpID0gMCwK
KyAgICAgICAgICAgIGFyZ3MgPSBuZXcgQXJyYXkobCArIDEpOworICAgICAgICBmb3IgKDsgaSA8
IGw7IGkrKykgYXJnc1tpICsgMV0gPSBhcmd1bWVudHNbaV07CisKKyAgICAgICAgaWYgKGwgPT09
IDApIHsKKyAgICAgICAgICByZXR1cm4ge307CisgICAgICAgIH0KKworICAgICAgICAvL3N0YXJ0
IHdpdGggZW1wdHkgb2JqZWN0IHNvIGEgY29weSBpcyBjcmVhdGVkCisgICAgICAgIGFyZ3NbMF0g
PSB7fTsKKworICAgICAgICBpZiAoYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSB0cnVlKSB7Cisg
ICAgICAgICAgLy9qcXVlcnkgZXh0ZW5kIHJlcXVpcmVzIGRlZXAgY29weSBhcyBmaXJzdCBhcmcK
KyAgICAgICAgICBhcmdzLnBvcCgpOworICAgICAgICAgIGFyZ3MudW5zaGlmdCh0cnVlKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiAkLmV4dGVuZC5hcHBseSh1bmRlZmluZWQsIGFyZ3Mp
OworICAgICAgfSwKKworICAgICAgLy8gdXBkYXRlcyBiYXNlIGluIHBsYWNlIGJ5IGNvcHlpbmcg
cHJvcGVydGllcyBvZiBleHRyYSB0byBpdAorICAgICAgLy8gb3B0aW9uYWxseSBjbG9iYmVyIHBy
b3RlY3RlZAorICAgICAgLy8gdXNhZ2U6CisgICAgICAvLyAgIHZhciBiYXNlID0ge2E6MiwgYjo2
fTsKKyAgICAgIC8vICAgdmFyIGV4dHJhID0ge2M6NH07CisgICAgICAvLyAgIHB1c2goYmFzZSwg
ZXh0cmEpOyAvL3thOjIsIGI6NiwgYzo0fQorICAgICAgLy8gICBiYXNlOyAvL3thOjIsIGI6Niwg
Yzo0fQorICAgICAgLy8KKyAgICAgIC8vICAgdmFyIGJhc2UgPSB7YToyLCBiOjZ9OworICAgICAg
Ly8gICB2YXIgZXh0cmEgPSB7YjogNCBjOjR9OworICAgICAgLy8gICBwdXNoKGJhc2UsIGV4dHJh
LCB0cnVlKTsgLy9FcnJvciAoInV0aWxzLnB1c2ggYXR0ZW1wdGVkIHRvIG92ZXJ3cml0ZSAnYicg
d2hpbGUgcnVubmluZyBpbiBwcm90ZWN0ZWQgbW9kZSIpCisgICAgICAvLyAgIGJhc2U7IC8ve2E6
MiwgYjo2fQorICAgICAgLy8KKyAgICAgIC8vIG9iamVjdHMgd2l0aCB0aGUgc2FtZSBrZXkgd2ls
bCBtZXJnZSByZWN1cnNpdmVseSB3aGVuIHByb3RlY3QgaXMgZmFsc2UKKyAgICAgIC8vIGVnOgor
ICAgICAgLy8gdmFyIGJhc2UgPSB7YToxNiwgYjp7YmI6NCwgY2M6MTB9fTsKKyAgICAgIC8vIHZh
ciBleHRyYSA9IHtiOntjYzoyNSwgZGQ6MTl9LCBjOjV9OworICAgICAgLy8gcHVzaChiYXNlLCBl
eHRyYSk7IC8ve2E6MTYsIHtiYjo0LCBjYzoyNSwgZGQ6MTl9LCBjOjV9CisgICAgICAvLworICAg
ICAgcHVzaDogZnVuY3Rpb24oYmFzZSwgZXh0cmEsIHByb3RlY3QpIHsKKyAgICAgICAgaWYgKGJh
c2UpIHsKKyAgICAgICAgICBPYmplY3Qua2V5cyhleHRyYSB8fCB7fSkuZm9yRWFjaChmdW5jdGlv
bihrZXkpIHsKKyAgICAgICAgICAgIGlmIChiYXNlW2tleV0gJiYgcHJvdGVjdCkgeworICAgICAg
ICAgICAgICB0aHJvdyBFcnJvcigidXRpbHMucHVzaCBhdHRlbXB0ZWQgdG8gb3ZlcndyaXRlICci
ICsga2V5ICsgIicgd2hpbGUgcnVubmluZyBpbiBwcm90ZWN0ZWQgbW9kZSIpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAodHlwZW9mIGJhc2Vba2V5XSA9PSAib2JqZWN0IiAmJiB0
eXBlb2YgZXh0cmFba2V5XSA9PSAib2JqZWN0IikgeworICAgICAgICAgICAgICAvL3JlY3Vyc2UK
KyAgICAgICAgICAgICAgdGhpcy5wdXNoKGJhc2Vba2V5XSwgZXh0cmFba2V5XSk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAvL25vIHByb3RlY3QsIHNvIGV4dHJhIHdpbnMK
KyAgICAgICAgICAgICAgYmFzZVtrZXldID0gZXh0cmFba2V5XTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICB9LCB0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBiYXNlOworICAg
ICAgfSwKKworICAgICAgaXNFbnVtZXJhYmxlOiBmdW5jdGlvbihvYmosIHByb3BlcnR5KSB7Cisg
ICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmluZGV4T2YocHJvcGVydHkpID4gLTE7Cisg
ICAgICB9LAorCisgICAgICAvL2J1aWxkIGEgZnVuY3Rpb24gZnJvbSBvdGhlciBmdW5jdGlvbihz
KQorICAgICAgLy91dGlsLmNvbXBvc2UoYSxiLGMpIC0+IGEoYihjKCkpKTsKKyAgICAgIC8vaW1w
bGVtZW50YXRpb24gbGlmdGVkIGZyb20gdW5kZXJzY29yZS5qcyAoYykgMjAwOS0yMDEyIEplcmVt
eSBBc2hrZW5hcworICAgICAgY29tcG9zZTogZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBmdW5j
cyA9IGFyZ3VtZW50czsKKworICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAg
dmFyIGFyZ3MgPSBhcmd1bWVudHM7CisKKyAgICAgICAgICBmb3IgKHZhciBpID0gZnVuY3MubGVu
Z3RoLTE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICBhcmdzID0gW2Z1bmNzW2ldLmFwcGx5
KHRoaXMsIGFyZ3MpXTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICByZXR1cm4gYXJnc1swXTsK
KyAgICAgICAgfTsKKyAgICAgIH0sCisKKyAgICAgIC8vIENhbiBvbmx5IHVuaXF1ZSBhcnJheXMg
b2YgaG9tb2dlbmVvdXMgcHJpbWl0aXZlcywgZS5nLiBhbiBhcnJheSBvZiBvbmx5IHN0cmluZ3Ms
IGFuIGFycmF5IG9mIG9ubHkgYm9vbGVhbnMsIG9yIGFuIGFycmF5IG9mIG9ubHkgbnVtZXJpY3MK
KyAgICAgIHVuaXF1ZUFycmF5OiBmdW5jdGlvbihhcnJheSkgeworICAgICAgICB2YXIgdSA9IHt9
LCBhID0gW107CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcnJheS5sZW5ndGg7IGkg
PCBsOyArK2kpIHsKKyAgICAgICAgICBpZiAodS5oYXNPd25Qcm9wZXJ0eShhcnJheVtpXSkpIHsK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIH0KKworICAgICAgICAgIGEucHVzaChh
cnJheVtpXSk7CisgICAgICAgICAgdVthcnJheVtpXV0gPSAxOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIGE7CisgICAgICB9LAorCisgICAgICBkZWJvdW5jZTogZnVuY3Rpb24oZnVuYywg
d2FpdCwgaW1tZWRpYXRlKSB7CisgICAgICAgIGlmICh0eXBlb2Ygd2FpdCAhPSAnbnVtYmVyJykg
eworICAgICAgICAgIHdhaXQgPSBERUZBVUxUX0lOVEVSVkFMOworICAgICAgICB9CisKKyAgICAg
ICAgdmFyIHRpbWVvdXQsIHJlc3VsdDsKKworICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzOworICAgICAgICAg
IHZhciBsYXRlciA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdGltZW91dCA9IG51bGw7Cisg
ICAgICAgICAgICBpZiAoIWltbWVkaWF0ZSkgeworICAgICAgICAgICAgICByZXN1bHQgPSBmdW5j
LmFwcGx5KGNvbnRleHQsIGFyZ3MpOworICAgICAgICAgICAgfQorICAgICAgICAgIH07CisgICAg
ICAgICAgdmFyIGNhbGxOb3cgPSBpbW1lZGlhdGUgJiYgIXRpbWVvdXQ7CisKKyAgICAgICAgICBj
bGVhclRpbWVvdXQodGltZW91dCk7CisgICAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0
ZXIsIHdhaXQpOworCisgICAgICAgICAgaWYgKGNhbGxOb3cpIHsKKyAgICAgICAgICAgIHJlc3Vs
dCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7CisgICAgICAgICAgfQorCisgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfTsKKyAgICAgIH0sCisKKyAgICAgIHRocm90dGxlOiBm
dW5jdGlvbihmdW5jLCB3YWl0KSB7CisgICAgICAgIGlmICh0eXBlb2Ygd2FpdCAhPSAnbnVtYmVy
JykgeworICAgICAgICAgIHdhaXQgPSBERUZBVUxUX0lOVEVSVkFMOworICAgICAgICB9CisKKyAg
ICAgICAgdmFyIGNvbnRleHQsIGFyZ3MsIHRpbWVvdXQsIHRocm90dGxpbmcsIG1vcmUsIHJlc3Vs
dDsKKyAgICAgICAgdmFyIHdoZW5Eb25lID0gdGhpcy5kZWJvdW5jZShmdW5jdGlvbigpeworICAg
ICAgICAgIG1vcmUgPSB0aHJvdHRsaW5nID0gZmFsc2U7CisgICAgICAgIH0sIHdhaXQpOworCisg
ICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgICBjb250ZXh0ID0gdGhpczsgYXJn
cyA9IGFyZ3VtZW50czsKKyAgICAgICAgICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgIHRpbWVvdXQgPSBudWxsOworICAgICAgICAgICAgaWYgKG1vcmUpIHsKKyAgICAgICAg
ICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHdoZW5Eb25lKCk7CisgICAgICAgICAgfTsKKworICAgICAgICAgIGlmICgh
dGltZW91dCkgeworICAgICAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQp
OworICAgICAgICAgIH0KKworICAgICAgICAgIGlmICh0aHJvdHRsaW5nKSB7CisgICAgICAgICAg
ICBtb3JlID0gdHJ1ZTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3R0bGlu
ZyA9IHRydWU7CisgICAgICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3Mp
OworICAgICAgICAgIH0KKworICAgICAgICAgIHdoZW5Eb25lKCk7CisgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgfTsKKyAgICAgIH0sCisKKyAgICAgIGNvdW50VGhlbjogZnVuY3Rp
b24obnVtLCBiYXNlKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgICBp
ZiAoIS0tbnVtKSB7IHJldHVybiBiYXNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0KKyAgICAg
ICAgfTsKKyAgICAgIH0sCisKKyAgICAgIGRlbGVnYXRlOiBmdW5jdGlvbihydWxlcykgeworICAg
ICAgICByZXR1cm4gZnVuY3Rpb24oZSwgZGF0YSkgeworICAgICAgICAgIHZhciB0YXJnZXQgPSAk
KGUudGFyZ2V0KSwgcGFyZW50OworCisgICAgICAgICAgT2JqZWN0LmtleXMocnVsZXMpLmZvckVh
Y2goZnVuY3Rpb24oc2VsZWN0b3IpIHsKKyAgICAgICAgICAgIGlmICgocGFyZW50ID0gdGFyZ2V0
LmNsb3Nlc3Qoc2VsZWN0b3IpKS5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgZGF0YSA9IGRhdGEg
fHwge307CisgICAgICAgICAgICAgIGRhdGEuZWwgPSBwYXJlbnRbMF07CisgICAgICAgICAgICAg
IHJldHVybiBydWxlc1tzZWxlY3Rvcl0uYXBwbHkodGhpcywgW2UsIGRhdGFdKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICB9LCB0aGlzKTsKKyAgICAgICAgfTsKKyAgICAgIH0KKworICAgIH07
CisKKyAgICByZXR1cm4gdXRpbHM7CisgIH0KKyk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93
c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFw
cC9jb21wb25lbnRzL2ZsaWdodC90b29scy9kZWJ1Zy9kZWJ1Zy5qcyBiL1dlYnNpdGVzL2Jyb3dz
ZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBw
L2NvbXBvbmVudHMvZmxpZ2h0L3Rvb2xzL2RlYnVnL2RlYnVnLmpzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIyZTRm
ZGZlZmZhNjUwNDdjNGQ4ZWJhN2M0ZDkxNzViOWRkYWRhNzMKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9mbGlnaHRq
cy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2ZsaWdodC90b29scy9kZWJ1Zy9kZWJ1Zy5qcwpAQCAt
MCwwICsxLDE1NyBAQAorInVzZSBzdHJpY3QiOworCitkZWZpbmUoCisKKyAgWworICAgICcuLi8u
Li9saWIvcmVnaXN0cnknLAorICAgICcuLi8uLi9saWIvdXRpbHMnCisgIF0sCisKKyAgZnVuY3Rp
b24ocmVnaXN0cnksIHV0aWxzKSB7CisKKyAgICB2YXIgbG9nRmlsdGVyOworCisgICAgLy8qKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAvLyBTZWFyY2ggb2JqZWN0IG1vZGVs
CisgICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICAgIGZ1bmN0aW9u
IHRyYXZlcnNlKHV0aWwsIHNlYXJjaFRlcm0sIG9wdGlvbnMpIHsKKyAgICAgIHZhciBvcHRpb25z
ID0gb3B0aW9ucyB8fCB7fTsKKyAgICAgIHZhciBvYmogPSBvcHRpb25zLm9iaiB8fCB3aW5kb3c7
CisgICAgICB2YXIgcGF0aCA9IG9wdGlvbnMucGF0aCB8fCAoKG9iaj09d2luZG93KSA/ICJ3aW5k
b3ciIDogIiIpOworICAgICAgdmFyIHByb3BzID0gT2JqZWN0LmtleXMob2JqKTsKKyAgICAgIHBy
b3BzLmZvckVhY2goZnVuY3Rpb24ocHJvcCkgeworICAgICAgICBpZiAoKHRlc3RzW3V0aWxdIHx8
IHV0aWwpKHNlYXJjaFRlcm0sIG9iaiwgcHJvcCkpeworICAgICAgICAgIGNvbnNvbGUubG9nKFtw
YXRoLCAiLiIsIHByb3BdLmpvaW4oIiIpLCAiLT4iLFsiKCIsIHR5cGVvZiBvYmpbcHJvcF0sICIp
Il0uam9pbigiIiksIG9ialtwcm9wXSk7CisgICAgICAgIH0KKyAgICAgICAgaWYoT2JqZWN0LnBy
b3RvdHlwZS50b1N0cmluZy5jYWxsKG9ialtwcm9wXSk9PSJbb2JqZWN0IE9iamVjdF0iICYmIChv
YmpbcHJvcF0gIT0gb2JqKSAmJiBwYXRoLnNwbGl0KCIuIikuaW5kZXhPZihwcm9wKSA9PSAtMSkg
eworICAgICAgICAgIHRyYXZlcnNlKHV0aWwsIHNlYXJjaFRlcm0sIHtvYmo6IG9ialtwcm9wXSwg
cGF0aDogW3BhdGgscHJvcF0uam9pbigiLiIpfSk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAg
IH0KKworICAgIGZ1bmN0aW9uIHNlYXJjaCh1dGlsLCBleHBlY3RlZCwgc2VhcmNoVGVybSwgb3B0
aW9ucykgeworICAgICAgaWYgKCFleHBlY3RlZCB8fCB0eXBlb2Ygc2VhcmNoVGVybSA9PSBleHBl
Y3RlZCkgeworICAgICAgICB0cmF2ZXJzZSh1dGlsLCBzZWFyY2hUZXJtLCBvcHRpb25zKTsKKyAg
ICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnNvbGUuZXJyb3IoW3NlYXJjaFRlcm0sICdtdXN0IGJl
JywgZXhwZWN0ZWRdLmpvaW4oJyAnKSkKKyAgICAgIH0KKyAgICB9CisKKyAgICB2YXIgdGVzdHMg
PSB7CisgICAgICAnbmFtZSc6IGZ1bmN0aW9uKHNlYXJjaFRlcm0sIG9iaiwgcHJvcCkge3JldHVy
biBzZWFyY2hUZXJtID09IHByb3B9LAorICAgICAgJ25hbWVDb250YWlucyc6IGZ1bmN0aW9uKHNl
YXJjaFRlcm0sIG9iaiwgcHJvcCkge3JldHVybiBwcm9wLmluZGV4T2Yoc2VhcmNoVGVybSk+LTF9
LAorICAgICAgJ3R5cGUnOiBmdW5jdGlvbihzZWFyY2hUZXJtLCBvYmosIHByb3ApIHtyZXR1cm4g
b2JqW3Byb3BdIGluc3RhbmNlb2Ygc2VhcmNoVGVybX0sCisgICAgICAndmFsdWUnOiBmdW5jdGlv
bihzZWFyY2hUZXJtLCBvYmosIHByb3ApIHtyZXR1cm4gb2JqW3Byb3BdID09PSBzZWFyY2hUZXJt
fSwKKyAgICAgICd2YWx1ZUNvZXJjZWQnOiBmdW5jdGlvbihzZWFyY2hUZXJtLCBvYmosIHByb3Ap
IHtyZXR1cm4gb2JqW3Byb3BdID09IHNlYXJjaFRlcm19CisgICAgfQorCisgICAgZnVuY3Rpb24g
YnlOYW1lKHNlYXJjaFRlcm0sIG9wdGlvbnMpIHtzZWFyY2goJ25hbWUnLCAnc3RyaW5nJywgc2Vh
cmNoVGVybSwgb3B0aW9ucyk7fTsKKyAgICBmdW5jdGlvbiBieU5hbWVDb250YWlucyhzZWFyY2hU
ZXJtLCBvcHRpb25zKSB7c2VhcmNoKCduYW1lQ29udGFpbnMnLCAnc3RyaW5nJywgc2VhcmNoVGVy
bSwgb3B0aW9ucyk7fTsKKyAgICBmdW5jdGlvbiBieVR5cGUoc2VhcmNoVGVybSwgb3B0aW9ucykg
e3NlYXJjaCgndHlwZScsICdmdW5jdGlvbicsIHNlYXJjaFRlcm0sIG9wdGlvbnMpO307CisgICAg
ZnVuY3Rpb24gYnlWYWx1ZShzZWFyY2hUZXJtLCBvcHRpb25zKSB7c2VhcmNoKCd2YWx1ZScsIG51
bGwsIHNlYXJjaFRlcm0sIG9wdGlvbnMpO307CisgICAgZnVuY3Rpb24gYnlWYWx1ZUNvZXJjZWQo
c2VhcmNoVGVybSwgb3B0aW9ucykge3NlYXJjaCgndmFsdWVDb2VyY2VkJywgbnVsbCwgc2VhcmNo
VGVybSwgb3B0aW9ucyk7fTsKKyAgICBmdW5jdGlvbiBjdXN0b20oZm4sIG9wdGlvbnMpIHt0cmF2
ZXJzZShmbiwgbnVsbCwgb3B0aW9ucyk7fTsKKworICAgIC8vKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqCisgICAgLy8gRXZlbnQgbG9nZ2luZworICAgIC8vKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqCisKKyAgICB2YXIgQUxMID0gJ2FsbCc7IC8vbm8gZmlsdGVyCisK
KyAgICAvL25vIGxvZ2dpbmcgYnkgZGVmYXVsdAorICAgIHZhciBkZWZhdWx0RXZlbnROYW1lc0Zp
bHRlciA9IFtdOworICAgIHZhciBkZWZhdWx0QWN0aW9uc0ZpbHRlciA9IFtdOworCisgICAgdmFy
IGxvZ0ZpbHRlciA9IHJldHJpZXZlTG9nRmlsdGVyKCk7CisKKyAgICBmdW5jdGlvbiBmaWx0ZXJF
dmVudExvZ3NCeUFjdGlvbigvKmFjdGlvbnMqLykgeworICAgICAgdmFyIGFjdGlvbnMgPSBbXS5z
bGljZS5jYWxsKGFyZ3VtZW50cyk7CisKKyAgICAgIGxvZ0ZpbHRlci5ldmVudE5hbWVzLmxlbmd0
aCB8fCAobG9nRmlsdGVyLmV2ZW50TmFtZXMgPSBBTEwpOworICAgICAgbG9nRmlsdGVyLmFjdGlv
bnMgPSBhY3Rpb25zLmxlbmd0aCA/IGFjdGlvbnMgOiBBTEw7CisgICAgICBzYXZlTG9nRmlsdGVy
KCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZmlsdGVyRXZlbnRMb2dzQnlOYW1lKC8qZXZlbnRO
YW1lcyovKSB7CisgICAgICB2YXIgZXZlbnROYW1lcyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRz
KTsKKworICAgICAgbG9nRmlsdGVyLmFjdGlvbnMubGVuZ3RoIHx8IChsb2dGaWx0ZXIuYWN0aW9u
cyA9IEFMTCk7CisgICAgICBsb2dGaWx0ZXIuZXZlbnROYW1lcyA9IGV2ZW50TmFtZXMubGVuZ3Ro
ID8gZXZlbnROYW1lcyA6IEFMTDsKKyAgICAgIHNhdmVMb2dGaWx0ZXIoKTsKKyAgICB9CisKKyAg
ICBmdW5jdGlvbiBoaWRlQWxsRXZlbnRMb2dzKCkgeworICAgICAgbG9nRmlsdGVyLmFjdGlvbnMg
PSBbXTsKKyAgICAgIGxvZ0ZpbHRlci5ldmVudE5hbWVzID0gW107CisgICAgICBzYXZlTG9nRmls
dGVyKCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gc2hvd0FsbEV2ZW50TG9ncygpIHsKKyAgICAg
IGxvZ0ZpbHRlci5hY3Rpb25zID0gQUxMOworICAgICAgbG9nRmlsdGVyLmV2ZW50TmFtZXMgPSBB
TEw7CisgICAgICBzYXZlTG9nRmlsdGVyKCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gc2F2ZUxv
Z0ZpbHRlcigpIHsKKyAgICAgIGlmICh3aW5kb3cubG9jYWxTdG9yYWdlKSB7CisgICAgICAgIGxv
Y2FsU3RvcmFnZS5zZXRJdGVtKCdsb2dGaWx0ZXJfZXZlbnROYW1lcycsIGxvZ0ZpbHRlci5ldmVu
dE5hbWVzKTsKKyAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2xvZ0ZpbHRlcl9hY3Rpb25z
JywgbG9nRmlsdGVyLmFjdGlvbnMpOworICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIHJl
dHJpZXZlTG9nRmlsdGVyKCkgeworICAgICAgdmFyIHJlc3VsdCA9IHsKKyAgICAgICAgZXZlbnRO
YW1lczogKHdpbmRvdy5sb2NhbFN0b3JhZ2UgJiYgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xvZ0Zp
bHRlcl9ldmVudE5hbWVzJykpIHx8IGRlZmF1bHRFdmVudE5hbWVzRmlsdGVyLAorICAgICAgICBh
Y3Rpb25zOiAod2luZG93LmxvY2FsU3RvcmFnZSAmJiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbG9n
RmlsdGVyX2FjdGlvbnMnKSkgfHwgZGVmYXVsdEFjdGlvbnNGaWx0ZXIKKyAgICAgIH07CisgICAg
ICAvL3JlY29uc3RpdHV0ZSBhcnJheXMKKyAgICAgIE9iamVjdC5rZXlzKHJlc3VsdCkuZm9yRWFj
aChmdW5jdGlvbihrKSB7CisgICAgICAgIHZhciB0aGlzUHJvcCA9IHJlc3VsdFtrXTsKKyAgICAg
ICAgaWYgKHR5cGVvZiB0aGlzUHJvcCA9PSAnc3RyaW5nJyAmJiB0aGlzUHJvcCAhPT0gQUxMKSB7
CisgICAgICAgICAgcmVzdWx0W2tdID0gdGhpc1Byb3Auc3BsaXQoJywnKTsKKyAgICAgICAgfQor
ICAgICAgfSk7CisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHJldHVybiB7CisK
KyAgICAgIGVuYWJsZTogZnVuY3Rpb24oZW5hYmxlKSB7CisgICAgICAgIHRoaXMuZW5hYmxlZCA9
ICEhZW5hYmxlOworCisgICAgICAgIGlmIChlbmFibGUgJiYgd2luZG93LmNvbnNvbGUpIHsKKyAg
ICAgICAgICBjb25zb2xlLmluZm8oJ0Jvb3RpbmcgaW4gREVCVUcgbW9kZScpOworICAgICAgICAg
IGNvbnNvbGUuaW5mbygnWW91IGNhbiBjb25maWd1cmUgZXZlbnQgbG9nZ2luZyB3aXRoIERFQlVH
LmV2ZW50cy5sb2dBbGwoKS9sb2dOb25lKCkvbG9nQnlOYW1lKCkvbG9nQnlBY3Rpb24oKScpOwor
ICAgICAgICB9CisKKyAgICAgICAgd2luZG93LkRFQlVHID0gdGhpczsKKyAgICAgIH0sCisKKyAg
ICAgIGZpbmQ6IHsKKyAgICAgICAgYnlOYW1lOiBieU5hbWUsCisgICAgICAgIGJ5TmFtZUNvbnRh
aW5zOiBieU5hbWVDb250YWlucywKKyAgICAgICAgYnlUeXBlOiBieVR5cGUsCisgICAgICAgIGJ5
VmFsdWU6IGJ5VmFsdWUsCisgICAgICAgIGJ5VmFsdWVDb2VyY2VkOiBieVZhbHVlQ29lcmNlZCwK
KyAgICAgICAgY3VzdG9tOiBjdXN0b20KKyAgICAgIH0sCisKKyAgICAgIGV2ZW50czogeworICAg
ICAgICBsb2dGaWx0ZXI6IGxvZ0ZpbHRlciwKKworICAgICAgICAvLyBBY2NlcHRzIGFueSBudW1i
ZXIgb2YgYWN0aW9uIGFyZ3MKKyAgICAgICAgLy8gZS5nLiBERUJVRy5ldmVudHMubG9nQnlBY3Rp
b24oIm9uIiwgIm9mZiIpCisgICAgICAgIGxvZ0J5QWN0aW9uOiBmaWx0ZXJFdmVudExvZ3NCeUFj
dGlvbiwKKworICAgICAgICAvLyBBY2NlcHRzIGFueSBudW1iZXIgb2YgZXZlbnQgbmFtZSBhcmdz
IChpbmMuIHJlZ2V4IG9yIHdpbGRjYXJkcykKKyAgICAgICAgLy8gZS5nLiBERUJVRy5ldmVudHMu
bG9nQnlOYW1lKC91aS4qLywgIipUaHJlYWQqIik7CisgICAgICAgIGxvZ0J5TmFtZTogZmlsdGVy
RXZlbnRMb2dzQnlOYW1lLAorCisgICAgICAgIGxvZ0FsbDogc2hvd0FsbEV2ZW50TG9ncywKKyAg
ICAgICAgbG9nTm9uZTogaGlkZUFsbEV2ZW50TG9ncworICAgICAgfQorICAgIH07CisgIH0KKyk7
CisKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEv
cmVzb3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvamFzbWluZS1mbGlnaHQv
TElDRU5TRS5tZCBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVz
b3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvamFzbWluZS1mbGlnaHQvTElD
RU5TRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi41N2NjZGZmNWY3N2VjODg2NWVkZjIxMTViOGJmNzVjOTVjY2Jl
MGFmCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9t
ZXRlcjIuMS9yZXNvdXJjZXMvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9qYXNtaW5l
LWZsaWdodC9MSUNFTlNFLm1kCkBAIC0wLDAgKzEsMTkgQEAKK0NvcHlyaWdodCAoYykgMjAxMyBU
d2l0dGVyLCBJbmMgYW5kIG90aGVycworCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBm
cmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0aGlzIHNv
ZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUi
KSwgdG8gZGVhbAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGlu
ZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gdXNlLCBjb3B5LCBtb2RpZnksIG1l
cmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorY29waWVz
IG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3
YXJlIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9u
IG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBw
b3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg
SVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJ
TkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1F
TlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBC
RSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVU
SEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcg
RlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBV
U0UgT1IgT1RIRVIgREVBTElOR1MgSU4KK1RIRSBTT0ZUV0FSRS4KXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21l
dGVyMi4xL3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2phc21pbmUt
ZmxpZ2h0L1JFQURNRS5tZCBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIy
LjEvcmVzb3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvamFzbWluZS1mbGln
aHQvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFhOGIwZjg0YzhlN2Y1MDVlNjYzMjY5M2VhNjViMWMx
NTYyZTZhYjcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1Nw
ZWVkb21ldGVyMi4xL3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2ph
c21pbmUtZmxpZ2h0L1JFQURNRS5tZApAQCAtMCwwICsxLDE0NSBAQAorIyBqYXNtaW5lLWZsaWdo
dCBbIVtCdWlsZCBTdGF0dXNdKGh0dHBzOi8vdHJhdmlzLWNpLm9yZy9mbGlnaHRqcy9qYXNtaW5l
LWZsaWdodC5wbmc/YnJhbmNoPW1hc3RlcildKGh0dHA6Ly90cmF2aXMtY2kub3JnL2ZsaWdodGpz
L2phc21pbmUtZmxpZ2h0KQorCitFeHRlbnNpb25zIHRvIHRoZSBKYXNtaW5lIHRlc3QgZnJhbWV3
b3JrIGZvciB1c2Ugd2l0aCBbRmxpZ2h0XShodHRwczovL2dpdGh1Yi5jb20vZmxpZ2h0anMvZmxp
Z2h0KQorCisjIEdldHRpbmcgc3RhcnRlZAorCitJbmNsdWRlIFtqYXNtaW5lLWZsaWdodC5qc10o
aHR0cHM6Ly9yYXcuZ2l0aHViLmNvbS9mbGlnaHRqcy9qYXNtaW5lLWZsaWdodC9tYXN0ZXIvbGli
L2phc21pbmUtZmxpZ2h0LmpzKQoraW4geW91ciBhcHAgYW5kIGxvYWQgaXQgaW4geW91ciB0ZXN0
IHJ1bm5lci4KKworT3IgaW5zdGFsbCBpdCB3aXRoIFtCb3dlcl0oaHR0cDovL2Jvd2VyLmlvLyk6
CisKK2BgYGJhc2gKK2Jvd2VyIGluc3RhbGwgLS1zYXZlLWRldiBqYXNtaW5lLWZsaWdodAorYGBg
CisKKyoqTi5CLioqIGphc21pbmUtZmxpZ2h0IGRlcGVuZHMgb24KK1tqYXNtaW5lXShodHRwczov
L2dpdGh1Yi5jb20vcGl2b3RhbC9qYXNtaW5lKSBhbmQKK1tqYXNtaW5lLWpxdWVyeV0oaHR0cHM6
Ly9naXRodWIuY29tL3ZlbGVzaW4vamFzbWluZS1qcXVlcnkpCisKKyMjIENvbXBvbmVudHMKKwor
YGBgamF2YXNjcmlwdAorZGVzY3JpYmVDb21wb25lbnQoJ3BhdGgvdG8vY29tcG9uZW50JywgZnVu
Y3Rpb24gKCkgeworICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHsKKyAgICBzZXR1cENvbXBvbmVu
dCgpOworICB9KTsKKworICBpdCgnc2hvdWxkIGRvIHgnLCBmdW5jdGlvbiAoKSB7CisgICAgLy8g
YSBjb21wb25lbnQgaW5zdGFuY2UgaXMgbm93IGFjY2Vzc2libGUgYXMgdGhpcy5jb21wb25lbnQK
KyAgICAvLyB0aGUgY29tcG9uZW50IHJvb3Qgbm9kZSBpcyBhdHRhY2hlZCB0byB0aGUgRE9NCisg
ICAgLy8gdGhlIGNvbXBvbmVudCByb290IG5vZGUgaXMgYWxzbyBhdmFpbGFibGUgYXMgdGhpcy4k
bm9kZQorICB9KTsKK30pOworYGBgCisKKyMjIE1peGlucworCitgYGBqYXZhc2NyaXB0CitkZXNj
cmliZU1peGluKCdwYXRoL3RvL21peGluJywgZnVuY3Rpb24gKCkgeworICAvLyBpbml0aWFsaXpl
IHRoZSBjb21wb25lbnQgYW5kIGF0dGFjaCBpdCB0byB0aGUgRE9NCisgIGJlZm9yZUVhY2goZnVu
Y3Rpb24gKCkgeworICAgIHNldHVwQ29tcG9uZW50KCk7CisgIH0pOworCisgIGl0KCdzaG91bGQg
ZG8geCcsIGZ1bmN0aW9uICgpIHsKKyAgICBleHBlY3QodGhpcy5jb21wb25lbnQuZG9Tb21ldGhp
bmcoKSkudG9CZShleHBlY3RlZCk7CisgIH0pOworfSk7CitgYGAKKworIyMgRXZlbnQgc3B5CisK
K2BgYGphdmFzY3JpcHQKK2Rlc2NyaWJlQ29tcG9uZW50KCdkYXRhL3R3aXR0ZXJfcHJvZmlsZScs
IGZ1bmN0aW9uICgpIHsKKyAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7CisgICAgc2V0dXBDb21w
b25lbnQoKTsKKyAgfSk7CisKKyAgZGVzY3JpYmUoJ2xpc3RlbnMgZm9yIHVpTmVlZHNUd2l0dGVy
VXNlcklkJywgZnVuY3Rpb24gKCkgeworICAgIC8vIHdhcyB0aGUgZXZlbnQgdHJpZ2dlcmVkPwor
ICAgIGl0KCdhbmQgdHJpZ2dlcnMgZGF0YVR3aXR0ZXJVc2VySWQnLCBmdW5jdGlvbiAoKSB7Cisg
ICAgICB2YXIgZXZlbnRTcHkgPSBzcHlPbkV2ZW50KGRvY3VtZW50LCAnZGF0YVR3aXR0ZXJQcm9m
aWxlJyk7CisgICAgICAkKGRvY3VtZW50KS50cmlnZ2VyKCd1aU5lZWRzVHdpdHRlclVzZXJJZCcs
IHsKKyAgICAgICAgc2NyZWVuX25hbWU6ICd0YnJkJworICAgICAgfSk7CisgICAgICBleHBlY3Qo
ZXZlbnRTcHkpLnRvSGF2ZUJlZW5UcmlnZ2VyZWRPbihkb2N1bWVudCk7CisgICAgfSk7CisKKyAg
ICAvLyBpcyB0aGUgdXNlciBpZCBjb3JyZWN0PworICAgIGl0KCdhbmQgaGFzIGNvcnJlY3QgaWQn
LCBmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgZXZlbnRTcHkgPSBzcHlPbkV2ZW50KGRvY3VtZW50
LCAnZGF0YVR3aXR0ZXJVc2VySWQnKTsKKyAgICAgICQoZG9jdW1lbnQpLnRyaWdnZXIoJ3VpTmVl
ZHNUd2l0dGVydXNlcklkJywgeworICAgICAgICBzY3JlZW5fbmFtZTogJ3RicmQnCisgICAgICB9
KTsKKyAgICAgIGV4cGVjdChldmVudFNweS5tb3N0UmVjZW50Q2FsbC5kYXRhKS50b0VxdWFsKHsK
KyAgICAgICAgc2NyZWVuX25hbWU6ICd0YnJkJywKKyAgICAgICAgaWQ6IDQxNDk4NjEKKyAgICAg
IH0pOworICAgIH0pOworICB9KTsKK30pOworYGBgCisKKyMjIHNldHVwQ29tcG9uZW50CisKK2Bg
YGphdmFzY3JpcHQKK3NldHVwQ29tcG9uZW50KG9wdGlvbmFsRml4dHVyZSwgb3B0aW9uYWxPcHRp
b25zKTsKK2BgYAorCitDYWxsaW5nIGBzZXR1cENvbXBvbmVudGAgdHdpY2Ugd2lsbCBjcmVhdGUg
YW4gaW5zdGFuY2UsIHRlYXIgaXQgZG93biBhbmQgY3JlYXRlIGEgbmV3IG9uZS4KKworIyMjIEhU
TUwgRml4dHVyZXMKKworYGBgamF2YXNjcmlwdAorZGVzY3JpYmVDb21wb25lbnQoJ3VpL3R3aXR0
ZXJfcHJvZmlsZScsIGZ1bmN0aW9uICgpIHsKKyAgLy8gaXMgdGhlIGNvbXBvbmVudCBhdHRhY2hl
ZCB0byB0aGUgZml4dHVyZT8KKyAgaXQoJ3RoaXMuY29tcG9uZW50LiRub2RlIGhhcyBjbGFzcyAi
Zm9vIicsIGZ1bmN0aW9uICgpIHsKKyAgICBzZXR1cENvbXBvbmVudCgnPHNwYW4gY2xhc3M9ImZv
byI+VGVzdDwvc3Bhbj4nKTsKKyAgICBleHBlY3QodGhpcy5jb21wb25lbnQuJG5vZGUpLnRvSGF2
ZUNsYXNzKCdmb28nKTsKKyAgfSk7Cit9KTsKK2BgYAorCisjIyMgQ29tcG9uZW50IE9wdGlvbnMK
KworYGBgamF2YXNjcmlwdAorZGVzY3JpYmVDb21wb25lbnQoJ2RhdGEvdHdpdHRlcl9wcm9maWxl
JywgZnVuY3Rpb24gKCkgeworICAvLyBpcyB0aGUgb3B0aW9uIHNldCBjb3JyZWN0bHk/CisgIGl0
KCd0aGlzLmNvbXBvbmVudC5hdHRyLmJhc2VVcmwgaXMgc2V0JywgZnVuY3Rpb24gKCkgeworICAg
IHNldHVwQ29tcG9uZW50KHsKKyAgICAgIGJhc2VVcmw6ICdodHRwOi8vdHdpdHRlci5jb20vMS4x
LycKKyAgICB9KTsKKyAgICBleHBlY3QodGhpcy5jb21wb25lbnQuYXR0ci5iYXNlVXJsKS50b0Jl
KCdodHRwOi8vdHdpdHRlci5jb20vMS4xLycpOworICB9KTsKK30pOworYGBgCisKKyMgVGVhcmRv
d24KKworQ29tcG9uZW50cyBhcmUgYXV0b21hdGljYWxseSB0b3JuIGRvd24gYWZ0ZXIgZWFjaCB0
ZXN0LgorCisjIyBDb250cmlidXRpbmcgdG8gdGhpcyBwcm9qZWN0CisKK0FueW9uZSBhbmQgZXZl
cnlvbmUgaXMgd2VsY29tZSB0byBjb250cmlidXRlLiBQbGVhc2UgdGFrZSBhIG1vbWVudCB0bwor
cmV2aWV3IHRoZSBbZ3VpZGVsaW5lcyBmb3IgY29udHJpYnV0aW5nXShDT05UUklCVVRJTkcubWQp
LgorCisqIFtCdWcgcmVwb3J0c10oQ09OVFJJQlVUSU5HLm1kI2J1Z3MpCisqIFtGZWF0dXJlIHJl
cXVlc3RzXShDT05UUklCVVRJTkcubWQjZmVhdHVyZXMpCisqIFtQdWxsIHJlcXVlc3RzXShDT05U
UklCVVRJTkcubWQjcHVsbC1yZXF1ZXN0cykKKworIyMgQXV0aG9ycworCisqIFtAdGJyZF0oaHR0
cDovL2dpdGh1Yi5jb20vdGJyZCkKKworIyMgVGhhbmtzCisKKyogW0Blc2JpZV0oaHR0cDovL2dp
dGh1Yi5jb20vZXNiaWUpIGFuZAorICBbQHNraWxsZHJpY2tdKGh0dHA6Ly9naXRodWIuY29tL3Nr
aWxsZHJpY2spIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwKKyAgYGRlc2NyaWJlQ29tcG9uZW50
YCAmIGBkZXNjcmliZU1peGluYCBtZXRob2RzLgorCisjIyBMaWNlbnNlCisKK0NvcHlyaWdodCAy
MDEzIFR3aXR0ZXIsIEluYyBhbmQgb3RoZXIgY29udHJpYnV0b3JzLgorCitMaWNlbnNlZCB1bmRl
ciB0aGUgTUlUIExpY2Vuc2UKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcv
U3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMv
amFzbWluZS1mbGlnaHQvbGliL2phc21pbmUtZmxpZ2h0LmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJl
bmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29t
cG9uZW50cy9qYXNtaW5lLWZsaWdodC9saWIvamFzbWluZS1mbGlnaHQuanMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OGVjNzZiNGUxZDNhNTk1ZDFlZGI4NmE5NWQxYzQ1Yjk1ZGNkZTQ1MAotLS0gL2Rldi9udWxsCisr
KyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2Zs
aWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvamFzbWluZS1mbGlnaHQvbGliL2phc21pbmUt
ZmxpZ2h0LmpzCkBAIC0wLDAgKzEsNDQ0IEBACisvKioKKyAqIENvcHlyaWdodCAyMDEzLCBUd2l0
dGVyIEluYy4gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycworICogTGljZW5zZWQgdW5kZXIgdGhlIE1J
VCBMaWNlbnNlCisgKi8KKworKGZ1bmN0aW9uIChyb290KSB7CisgICd1c2Ugc3RyaWN0JzsKKwor
ICBqYXNtaW5lLmZsaWdodCA9IHt9OworCisgIC8qKgorICAgKiBXcmFwcGVyIGZvciBkZXNjcmli
ZS4gTG9hZCBjb21wb25lbnQgYmVmb3JlIGVhY2ggdGVzdC4KKyAgICoKKyAgICogQHBhcmFtIGNv
bXBvbmVudFBhdGgKKyAgICogQHBhcmFtIHNwZWNEZWZpbml0aW9ucworICAgKi8KKworICByb290
LmRlc2NyaWJlQ29tcG9uZW50ID0gZnVuY3Rpb24gKGNvbXBvbmVudFBhdGgsIHNwZWNEZWZpbml0
aW9ucykgeworICAgIGphc21pbmUuZ2V0RW52KCkuZGVzY3JpYmVDb21wb25lbnQoY29tcG9uZW50
UGF0aCwgc3BlY0RlZmluaXRpb25zKTsKKyAgfTsKKworICBqYXNtaW5lLkVudi5wcm90b3R5cGUu
ZGVzY3JpYmVDb21wb25lbnQgPSBmdW5jdGlvbiAoY29tcG9uZW50UGF0aCwgc3BlY0RlZmluaXRp
b25zKSB7CisgICAgZGVzY3JpYmUoY29tcG9uZW50UGF0aCwgZnVuY3Rpb24gKCkgeworICAgICAg
YmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuQ29tcG9uZW50ID0gdGhpcy5j
b21wb25lbnQgPSB0aGlzLiRub2RlID0gbnVsbDsKKworICAgICAgICB2YXIgcmVxdWlyZUNhbGxi
YWNrID0gZnVuY3Rpb24gKHJlZ2lzdHJ5LCBDb21wb25lbnQpIHsKKyAgICAgICAgICByZWdpc3Ry
eS5yZXNldCgpOworICAgICAgICAgIHRoaXMuQ29tcG9uZW50ID0gQ29tcG9uZW50OworICAgICAg
ICB9LmJpbmQodGhpcyk7CisKKyAgICAgICAgcmVxdWlyZShbJ2ZsaWdodC9saWIvcmVnaXN0cnkn
LCBjb21wb25lbnRQYXRoXSwgcmVxdWlyZUNhbGxiYWNrKTsKKworICAgICAgICB3YWl0c0Zvcihm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgcmV0dXJuIHRoaXMuQ29tcG9uZW50ICE9PSBudWxsOwor
ICAgICAgICB9LmJpbmQodGhpcykpOworICAgICAgfSk7CisKKyAgICAgIGFmdGVyRWFjaChmdW5j
dGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLiRub2RlKSB7CisgICAgICAgICAgdGhpcy4kbm9k
ZS5yZW1vdmUoKTsKKyAgICAgICAgICB0aGlzLiRub2RlID0gbnVsbDsKKyAgICAgICAgfQorCisg
ICAgICAgIHZhciByZXF1aXJlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoZGVmaW5lQ29tcG9uZW50KSB7
CisgICAgICAgICAgaWYgKHRoaXMuY29tcG9uZW50KSB7CisgICAgICAgICAgICB0aGlzLmNvbXBv
bmVudCA9IG51bGw7CisgICAgICAgICAgfQorCisgICAgICAgICAgdGhpcy5Db21wb25lbnQgPSBu
dWxsOworICAgICAgICAgIGRlZmluZUNvbXBvbmVudC50ZWFyZG93bkFsbCgpOworICAgICAgICB9
LmJpbmQodGhpcyk7CisKKyAgICAgICAgcmVxdWlyZShbJ2ZsaWdodC9saWIvY29tcG9uZW50J10s
IHJlcXVpcmVDYWxsYmFjayk7CisKKyAgICAgICAgd2FpdHNGb3IoZnVuY3Rpb24gKCkgeworICAg
ICAgICAgIHJldHVybiB0aGlzLkNvbXBvbmVudCA9PT0gbnVsbDsKKyAgICAgICAgfS5iaW5kKHRo
aXMpKTsKKyAgICAgIH0pOworCisgICAgICBzcGVjRGVmaW5pdGlvbnMuYXBwbHkodGhpcyk7Cisg
ICAgfSk7CisgIH07CisKKyAgLyoqCisgICAqIFdyYXBwZXIgZm9yIGRlc2NyaWJlLiBMb2FkIG1p
eGluIGJlZm9yZSBlYWNoIHRlc3QuCisgICAqCisgICAqIEBwYXJhbSBtaXhpblBhdGgKKyAgICog
QHBhcmFtIHNwZWNEZWZpbml0aW9ucworICAgKi8KKworICByb290LmRlc2NyaWJlTWl4aW4gPSBm
dW5jdGlvbiAobWl4aW5QYXRoLCBzcGVjRGVmaW5pdGlvbnMpIHsKKyAgICBqYXNtaW5lLmdldEVu
digpLmRlc2NyaWJlTWl4aW4obWl4aW5QYXRoLCBzcGVjRGVmaW5pdGlvbnMpOworICB9OworCisg
IGphc21pbmUuRW52LnByb3RvdHlwZS5kZXNjcmliZU1peGluID0gZnVuY3Rpb24gKG1peGluUGF0
aCwgc3BlY0RlZmluaXRpb25zKSB7CisgICAgZGVzY3JpYmUobWl4aW5QYXRoLCBmdW5jdGlvbiAo
KSB7CisgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5Db21wb25l
bnQgPSB0aGlzLmNvbXBvbmVudCA9IHRoaXMuJG5vZGUgPSBudWxsOworCisgICAgICAgIHZhciBy
ZXF1aXJlQ2FsbGJhY2sgPSBmdW5jdGlvbiAocmVnaXN0cnksIGRlZmluZUNvbXBvbmVudCwgTWl4
aW4pIHsKKyAgICAgICAgICByZWdpc3RyeS5yZXNldCgpOworICAgICAgICAgIHRoaXMuQ29tcG9u
ZW50ID0gZGVmaW5lQ29tcG9uZW50KGZ1bmN0aW9uICgpIHt9LCBNaXhpbik7CisgICAgICAgIH0u
YmluZCh0aGlzKTsKKworICAgICAgICByZXF1aXJlKFsnZmxpZ2h0L2xpYi9yZWdpc3RyeScsICdm
bGlnaHQvbGliL2NvbXBvbmVudCcsIG1peGluUGF0aF0sIHJlcXVpcmVDYWxsYmFjayk7CisKKyAg
ICAgICAgd2FpdHNGb3IoZnVuY3Rpb24gKCkgeworICAgICAgICAgIHJldHVybiB0aGlzLkNvbXBv
bmVudCAhPT0gbnVsbDsKKyAgICAgICAgfSk7CisgICAgICB9KTsKKworICAgICAgYWZ0ZXJFYWNo
KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuJG5vZGUpIHsKKyAgICAgICAgICB0aGlz
LiRub2RlLnJlbW92ZSgpOworICAgICAgICAgIHRoaXMuJG5vZGUgPSBudWxsOworICAgICAgICB9
CisKKyAgICAgICAgdmFyIHJlcXVpcmVDYWxsYmFjayA9IGZ1bmN0aW9uIChkZWZpbmVDb21wb25l
bnQpIHsKKyAgICAgICAgICBpZiAodGhpcy5jb21wb25lbnQpIHsKKyAgICAgICAgICAgIHRoaXMu
Y29tcG9uZW50ID0gbnVsbDsKKyAgICAgICAgICB9CisKKyAgICAgICAgICB0aGlzLkNvbXBvbmVu
dCA9IG51bGw7CisgICAgICAgICAgZGVmaW5lQ29tcG9uZW50LnRlYXJkb3duQWxsKCk7CisgICAg
ICAgIH0uYmluZCh0aGlzKTsKKworICAgICAgICByZXF1aXJlKFsnZmxpZ2h0L2xpYi9jb21wb25l
bnQnXSwgcmVxdWlyZUNhbGxiYWNrKTsKKworICAgICAgICB3YWl0c0ZvcihmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgcmV0dXJuIHRoaXMuQ29tcG9uZW50ID09PSBudWxsOworICAgICAgICB9LmJp
bmQodGhpcykpOworICAgICAgfSk7CisKKyAgICAgIHNwZWNEZWZpbml0aW9ucy5hcHBseSh0aGlz
KTsKKyAgICB9KTsKKyAgfTsKKworICAvKioKKyAgICogV3JhcHBlciBmb3IgZGVzY3JpYmUuIExv
YWQgbW9kdWxlIGJlZm9yZSBlYWNoIHRlc3QuCisgICAqCisgICAqIEBwYXJhbSBtb2R1bGVQYXRo
CisgICAqIEBwYXJhbSBzcGVjRGVmaW5pdGlvbnMKKyAgICovCisKKyAgcm9vdC5kZXNjcmliZU1v
ZHVsZSA9IGZ1bmN0aW9uIChtb2R1bGVQYXRoLCBzcGVjRGVmaW5pdGlvbnMpIHsKKyAgICByZXR1
cm4gamFzbWluZS5nZXRFbnYoKS5kZXNjcmliZU1vZHVsZShtb2R1bGVQYXRoLCBzcGVjRGVmaW5p
dGlvbnMpOworICB9OworCisgIGphc21pbmUuRW52LnByb3RvdHlwZS5kZXNjcmliZU1vZHVsZSA9
IGZ1bmN0aW9uIChtb2R1bGVQYXRoLCBzcGVjRGVmaW5pdGlvbnMpIHsKKyAgICBkZXNjcmliZSht
b2R1bGVQYXRoLCBmdW5jdGlvbiAoKSB7CisgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgdGhpcy5tb2R1bGUgPSBudWxsOworCisgICAgICAgIHZhciByZXF1aXJlQ2FsbGJh
Y2sgPSBmdW5jdGlvbiAobW9kdWxlKSB7CisgICAgICAgICAgdGhpcy5tb2R1bGUgPSBtb2R1bGU7
CisgICAgICAgIH0uYmluZCh0aGlzKTsKKworICAgICAgICByZXF1aXJlKFttb2R1bGVQYXRoXSwg
cmVxdWlyZUNhbGxiYWNrKTsKKworICAgICAgICB3YWl0c0ZvcihmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgcmV0dXJuIHRoaXMubW9kdWxlICE9PSBudWxsOworICAgICAgICB9KTsKKyAgICAgIH0p
OworCisgICAgICBzcGVjRGVmaW5pdGlvbnMuYXBwbHkodGhpcyk7CisgICAgfSk7CisgIH07CisK
KyAgLyoqCisgICAqIENyZWF0ZSByb290IG5vZGUgYW5kIGluaXRpYWxpemUgY29tcG9uZW50LiBG
aXh0dXJlIHNob3VsZCBiZSBodG1sIHN0cmluZworICAgKiBvciBqUXVlcnkgb2JqZWN0LgorICAg
KgorICAgKiBAcGFyYW0gZml4dHVyZSB7U3RyaW5nfSAoT3B0aW9uYWwpCisgICAqIEBwYXJhbSBv
cHRpb25zIHtPcHRpb25zfSAoT3B0aW9uYWwpCisgICAqLworCisgIHJvb3Quc2V0dXBDb21wb25l
bnQgPSBmdW5jdGlvbiAoZml4dHVyZSwgb3B0aW9ucykgeworICAgIGphc21pbmUuZ2V0RW52KCku
Y3VycmVudFNwZWMuc2V0dXBDb21wb25lbnQoZml4dHVyZSwgb3B0aW9ucyk7CisgIH07CisKKyAg
amFzbWluZS5TcGVjLnByb3RvdHlwZS5zZXR1cENvbXBvbmVudCA9IGZ1bmN0aW9uIChmaXh0dXJl
LCBvcHRpb25zKSB7CisgICAgaWYgKHRoaXMuY29tcG9uZW50KSB7CisgICAgICB0aGlzLmNvbXBv
bmVudC50ZWFyZG93bigpOworICAgICAgdGhpcy4kbm9kZS5yZW1vdmUoKTsKKyAgICB9CisKKyAg
ICB0aGlzLiRub2RlID0gJCgnPGRpdiBjbGFzcz0iY29tcG9uZW50LXJvb3QiIC8+Jyk7CisgICAg
JCgnYm9keScpLmFwcGVuZCh0aGlzLiRub2RlKTsKKworICAgIGlmIChmaXh0dXJlIGluc3RhbmNl
b2YgalF1ZXJ5IHx8IHR5cGVvZiBmaXh0dXJlID09PSAnc3RyaW5nJykgeworICAgICAgdGhpcy4k
bm9kZS5hcHBlbmQoZml4dHVyZSk7CisgICAgfSBlbHNlIHsKKyAgICAgIG9wdGlvbnMgPSBmaXh0
dXJlOworICAgICAgZml4dHVyZSA9IG51bGw7CisgICAgfQorCisgICAgb3B0aW9ucyA9IG9wdGlv
bnMgPT09IHVuZGVmaW5lZCA/IHt9IDogb3B0aW9uczsKKworICAgIHRoaXMuY29tcG9uZW50ID0g
bmV3IHRoaXMuQ29tcG9uZW50KHRoaXMuJG5vZGUsIG9wdGlvbnMpOworICB9OworCisKKyAgKGZ1
bmN0aW9uIChuYW1lc3BhY2UpIHsKKyAgICB2YXIgZXZlbnRzRGF0YSA9IHsKKyAgICAgIHNwaWVk
RXZlbnRzOiB7fSwKKyAgICAgIGhhbmRsZXJzOiAgICBbXQorICAgIH07CisKKyAgICBuYW1lc3Bh
Y2UuZm9ybWF0RWxlbWVudCA9IGZ1bmN0aW9uICgkZWxlbWVudCkgeworICAgICAgdmFyIGxpbWl0
ID0gMjAwOworICAgICAgdmFyIG91dHB1dCA9ICcnOworCisgICAgICBpZiAoJGVsZW1lbnQgaW5z
dGFuY2VvZiBqUXVlcnkpIHsKKyAgICAgICAgb3V0cHV0ID0gamFzbWluZS5KUXVlcnkuZWxlbWVu
dFRvU3RyaW5nKCRlbGVtZW50KTsKKyAgICAgICAgaWYgKG91dHB1dC5sZW5ndGggPiBsaW1pdCkg
eworICAgICAgICAgIG91dHB1dCA9IG91dHB1dC5zbGljZSgwLCAyMDApICsgJy4uLic7CisgICAg
ICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIC8vJGVsZW1lbnQgc2hvdWxkIGFsd2F5cyBi
ZSBhIGpRdWVyeSBvYmplY3QKKyAgICAgICAgb3V0cHV0ID0gJ2VsZW1lbnQgaXMgbm90IGEgalF1
ZXJ5IG9iamVjdCc7CisgICAgICB9CisKKyAgICAgIHJldHVybiBvdXRwdXQ7CisgICAgfTsKKwor
ICAgIG5hbWVzcGFjZS5jb21wYXJlQ29sb3JzID0gZnVuY3Rpb24gKGNvbG9yMSwgY29sb3IyKSB7
CisgICAgICBpZiAoY29sb3IxLmNoYXJBdCgwKSA9PT0gY29sb3IyLmNoYXJBdCgwKSkgeworICAg
ICAgICByZXR1cm4gY29sb3IxID09PSBjb2xvcjI7CisgICAgICB9IGVsc2UgeworICAgICAgICBy
ZXR1cm4gbmFtZXNwYWNlLmhleDJyZ2IoY29sb3IxKSA9PT0gbmFtZXNwYWNlLmhleDJyZ2IoY29s
b3IyKTsKKyAgICAgIH0KKyAgICB9OworCisgICAgbmFtZXNwYWNlLmhleDJyZ2IgPSBmdW5jdGlv
biAoY29sb3JTdHJpbmcpIHsKKyAgICAgIGlmIChjb2xvclN0cmluZy5jaGFyQXQoMCkgIT09ICcj
JykgcmV0dXJuIGNvbG9yU3RyaW5nOworICAgICAgLy8gbm90ZTogaGV4U3RyIHNob3VsZCBiZSAj
cnJnZ2JiCisgICAgICB2YXIgaGV4ID0gcGFyc2VJbnQoY29sb3JTdHJpbmcuc3Vic3RyaW5nKDEp
LCAxNik7CisgICAgICB2YXIgciA9IChoZXggJiAweGZmMDAwMCkgPj4gMTY7CisgICAgICB2YXIg
ZyA9IChoZXggJiAweDAwZmYwMCkgPj4gODsKKyAgICAgIHZhciBiID0gaGV4ICYgMHgwMDAwZmY7
CisgICAgICByZXR1cm4gJ3JnYignICsgciArICcsICcgKyBnICsgJywgJyArIGIgKyAnKSc7Cisg
ICAgfTsKKworICAgIG5hbWVzcGFjZS5ldmVudHMgPSB7CisgICAgICBzcHlPbjogZnVuY3Rpb24g
KHNlbGVjdG9yLCBldmVudE5hbWUpIHsKKyAgICAgICAgZXZlbnRzRGF0YS5zcGllZEV2ZW50c1tb
c2VsZWN0b3IsIGV2ZW50TmFtZV1dID0geworICAgICAgICAgIGNhbGxDb3VudDogMCwKKyAgICAg
ICAgICBjYWxsczogW10sCisgICAgICAgICAgbW9zdFJlY2VudENhbGw6IHt9LAorICAgICAgICAg
IG5hbWU6IGV2ZW50TmFtZQorICAgICAgICB9OworCisgICAgICAgIHZhciBoYW5kbGVyID0gZnVu
Y3Rpb24gKGUsIGRhdGEpIHsKKyAgICAgICAgICB2YXIgY2FsbCA9IHsKKyAgICAgICAgICAgIGV2
ZW50OiBlLAorICAgICAgICAgICAgYXJnczogamFzbWluZS51dGlsLmFyZ3NUb0FycmF5KGFyZ3Vt
ZW50cyksCisgICAgICAgICAgICBkYXRhOiBkYXRhCisgICAgICAgICAgfTsKKyAgICAgICAgICBl
dmVudHNEYXRhLnNwaWVkRXZlbnRzW1tzZWxlY3RvciwgZXZlbnROYW1lXV0uY2FsbENvdW50Kys7
CisgICAgICAgICAgZXZlbnRzRGF0YS5zcGllZEV2ZW50c1tbc2VsZWN0b3IsIGV2ZW50TmFtZV1d
LmNhbGxzLnB1c2goY2FsbCk7CisgICAgICAgICAgZXZlbnRzRGF0YS5zcGllZEV2ZW50c1tbc2Vs
ZWN0b3IsIGV2ZW50TmFtZV1dLm1vc3RSZWNlbnRDYWxsID0gY2FsbDsKKyAgICAgICAgfTsKKwor
ICAgICAgICBqUXVlcnkoc2VsZWN0b3IpLm9uKGV2ZW50TmFtZSwgaGFuZGxlcik7CisgICAgICAg
IGV2ZW50c0RhdGEuaGFuZGxlcnMucHVzaChoYW5kbGVyKTsKKyAgICAgICAgcmV0dXJuIGV2ZW50
c0RhdGEuc3BpZWRFdmVudHNbW3NlbGVjdG9yLCBldmVudE5hbWVdXTsKKyAgICAgIH0sCisKKyAg
ICAgIGV2ZW50QXJnczogZnVuY3Rpb24gKHNlbGVjdG9yLCBldmVudE5hbWUsIGV4cGVjdGVkQXJn
KSB7CisgICAgICAgIHZhciBhY3R1YWxBcmdzID0gZXZlbnRzRGF0YS5zcGllZEV2ZW50c1tbc2Vs
ZWN0b3IsIGV2ZW50TmFtZV1dLm1vc3RSZWNlbnRDYWxsLmFyZ3M7CisKKyAgICAgICAgaWYgKCFh
Y3R1YWxBcmdzKSB7CisgICAgICAgICAgdGhyb3cgJ05vIGV2ZW50IHNweSBmb3VuZCBvbiAnICsg
ZXZlbnROYW1lICsgJy4gVHJ5IGFkZGluZyBhIGNhbGwgdG8gc3B5T25FdmVudCBvciBtYWtlIHN1
cmUgdGhhdCB0aGUgc2VsZWN0b3IgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZCBvbiBhbmQgdGhlIHNl
bGVjdG9yIGJlaW5nIHNwaWVkIG9uIGFyZSBjb3JyZWN0Lic7CisgICAgICAgIH0KKworICAgICAg
ICAvLyByZW1vdmUgZXh0cmEgZXZlbnQgbWV0YWRhdGEgaWYgaXQgaXMgbm90IHRlc3RlZCBmb3IK
KyAgICAgICAgaWYgKChhY3R1YWxBcmdzLmxlbmd0aCA9PT0gMikgJiYgdHlwZW9mIGFjdHVhbEFy
Z3NbMV0gPT09ICdvYmplY3QnICYmCisgICAgICAgICAgZXhwZWN0ZWRBcmcgJiYgIWV4cGVjdGVk
QXJnLnNjcmliZUNvbnRleHQgJiYgIWV4cGVjdGVkQXJnLnNvdXJjZUV2ZW50RGF0YSAmJiAhZXhw
ZWN0ZWRBcmcuc2NyaWJlRGF0YSkgeworICAgICAgICAgIGFjdHVhbEFyZ3NbMV0gPSAkLmV4dGVu
ZCh7fSwgYWN0dWFsQXJnc1sxXSk7CisgICAgICAgICAgZGVsZXRlIGFjdHVhbEFyZ3NbMV0uc291
cmNlRXZlbnREYXRhOworICAgICAgICAgIGRlbGV0ZSBhY3R1YWxBcmdzWzFdLnNjcmliZUNvbnRl
eHQ7CisgICAgICAgICAgZGVsZXRlIGFjdHVhbEFyZ3NbMV0uc2NyaWJlRGF0YTsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiBhY3R1YWxBcmdzOworICAgICAgfSwKKworICAgICAgd2FzVHJp
Z2dlcmVkOiBmdW5jdGlvbiAoc2VsZWN0b3IsIGV2ZW50KSB7CisgICAgICAgIHZhciBzcGllZEV2
ZW50ID0gZXZlbnRzRGF0YS5zcGllZEV2ZW50c1tbc2VsZWN0b3IsIGV2ZW50XV07CisgICAgICAg
IHJldHVybiBzcGllZEV2ZW50ICYmIHNwaWVkRXZlbnQuY2FsbENvdW50ID4gMDsKKyAgICAgIH0s
CisKKyAgICAgIHdhc1RyaWdnZXJlZFdpdGg6IGZ1bmN0aW9uIChzZWxlY3RvciwgZXZlbnROYW1l
LCBleHBlY3RlZEFyZywgZW52KSB7CisgICAgICAgIHZhciBhY3R1YWxBcmdzID0gamFzbWluZS5m
bGlnaHQuZXZlbnRzLmV2ZW50QXJncyhzZWxlY3RvciwgZXZlbnROYW1lLCBleHBlY3RlZEFyZyk7
CisgICAgICAgIHJldHVybiBhY3R1YWxBcmdzICYmIGVudi5jb250YWluc18oYWN0dWFsQXJncywg
ZXhwZWN0ZWRBcmcpOworICAgICAgfSwKKworICAgICAgd2FzVHJpZ2dlcmVkV2l0aERhdGE6IGZ1
bmN0aW9uIChzZWxlY3RvciwgZXZlbnROYW1lLCBleHBlY3RlZEFyZywgZW52KSB7CisgICAgICAg
IHZhciBhY3R1YWxBcmdzID0gamFzbWluZS5mbGlnaHQuZXZlbnRzLmV2ZW50QXJncyhzZWxlY3Rv
ciwgZXZlbnROYW1lLCBleHBlY3RlZEFyZyk7CisgICAgICAgIHZhciB2YWxpZDsKKworICAgICAg
ICBpZiAoYWN0dWFsQXJncykgeworICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBhY3R1YWxBcmdzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAg
ICBpZiAoamFzbWluZS5mbGlnaHQudmFsaWRhdGVIYXNoKGV4cGVjdGVkQXJnLCBhY3R1YWxBcmdz
W2ldKSkgeworICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICB9CisgICAgICAgICAgcmV0dXJuIHZhbGlkOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgfSwKKworICAgICAgY2xlYW5VcDogZnVuY3Rpb24gKCkgeworICAg
ICAgICBldmVudHNEYXRhLnNwaWVkRXZlbnRzID0ge307CisgICAgICAgIGV2ZW50c0RhdGEuaGFu
ZGxlcnMgICAgPSBbXTsKKyAgICAgIH0KKyAgICB9OworCisgICAgbmFtZXNwYWNlLnZhbGlkYXRl
SGFzaCA9IGZ1bmN0aW9uIChhLCBiLCBpbnRlcnNlY3Rpb24pIHsKKyAgICAgIHZhciB2YWxpZEhh
c2g7CisgICAgICBmb3IgKHZhciBmaWVsZCBpbiBhKSB7CisgICAgICAgIGlmICgodHlwZW9mIGFb
ZmllbGRdID09PSAnb2JqZWN0JykgJiYgKHR5cGVvZiBiW2ZpZWxkXSA9PT0gJ29iamVjdCcpKSB7
CisgICAgICAgICAgdmFsaWRIYXNoID0gamFzbWluZS5mbGlnaHQudmFsaWRhdGVIYXNoKGFbZmll
bGRdLCBiW2ZpZWxkXSk7CisgICAgICAgIH0gZWxzZSBpZiAoaW50ZXJzZWN0aW9uICYmICh0eXBl
b2YgYVtmaWVsZF0gPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBiW2ZpZWxkXSA9PT0gJ3VuZGVm
aW5lZCcpKSB7CisgICAgICAgICAgdmFsaWRIYXNoID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICB2YWxpZEhhc2ggPSAoYVtmaWVsZF0gPT09IGJbZmllbGRdKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoIXZhbGlkSGFzaCkgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICB9CisgICAgICByZXR1cm4gdmFsaWRIYXNoOworICAgIH07CisgIH0pKGphc21pbmUu
ZmxpZ2h0KTsKKworICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHsKKyAgICB0aGlzLmFkZE1hdGNo
ZXJzKHsKKyAgICAgIHRvSGF2ZUJlZW5UcmlnZ2VyZWRPbjogZnVuY3Rpb24gKCkgeworICAgICAg
ICB2YXIgc2VsZWN0b3IgPSBhcmd1bWVudHNbMF07CisgICAgICAgIHZhciBldmVudE5hbWUgPSB0
eXBlb2YgdGhpcy5hY3R1YWwgPT09ICdzdHJpbmcnID8gdGhpcy5hY3R1YWwgOiB0aGlzLmFjdHVh
bC5uYW1lOworICAgICAgICB2YXIgd2FzVHJpZ2dlcmVkID0gamFzbWluZS5mbGlnaHQuZXZlbnRz
Lndhc1RyaWdnZXJlZChzZWxlY3RvciwgZXZlbnROYW1lKTsKKworICAgICAgICB0aGlzLm1lc3Nh
Z2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgdmFyICRwcCA9IGZ1bmN0aW9uIChvYmopIHsK
KyAgICAgICAgICAgIHZhciBkZXNjcmlwdGlvbjsKKyAgICAgICAgICAgIHZhciBhdHRyOworCisg
ICAgICAgICAgICBpZiAoIShvYmogaW5zdGFuY2VvZiBqUXVlcnkpKSB7CisgICAgICAgICAgICAg
IG9iaiA9ICQob2JqKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVzY3JpcHRpb24g
PSBbCisgICAgICAgICAgICAgIG9iai5nZXQoMCkubm9kZU5hbWUKKyAgICAgICAgICAgIF07CisK
KyAgICAgICAgICAgIGF0dHIgPSBvYmouZ2V0KDApLmF0dHJpYnV0ZXMgfHwgW107CisKKyAgICAg
ICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgYXR0ci5sZW5ndGg7IHgrKykgeworICAgICAgICAg
ICAgICBkZXNjcmlwdGlvbi5wdXNoKGF0dHJbeF0ubmFtZSArICc9IicgKyBhdHRyW3hdLnZhbHVl
ICsgJyInKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuICc8JyArIGRlc2Ny
aXB0aW9uLmpvaW4oJyAnKSArICc+JzsKKyAgICAgICAgICB9OworCisgICAgICAgICAgaWYgKHdh
c1RyaWdnZXJlZCkgeworICAgICAgICAgICAgcmV0dXJuIFsKKyAgICAgICAgICAgICAgJzxkaXYg
Y2xhc3M9InZhbHVlLW1pc21hdGNoIj5FeHBlY3RlZCBldmVudCAnICsgZXZlbnROYW1lICsgJyB0
byBoYXZlIGJlZW4gdHJpZ2dlcmVkIG9uJyArIHNlbGVjdG9yLAorICAgICAgICAgICAgICAnPGRp
diBjbGFzcz0idmFsdWUtbWlzbWF0Y2giPkV4cGVjdGVkIGV2ZW50ICcgKyBldmVudE5hbWUgKyAn
IG5vdCB0byBoYXZlIGJlZW4gdHJpZ2dlcmVkIG9uJyArIHNlbGVjdG9yCisgICAgICAgICAgICBd
OworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gWworICAgICAgICAgICAg
ICAnRXhwZWN0ZWQgZXZlbnQgJyArIGV2ZW50TmFtZSArICcgdG8gaGF2ZSBiZWVuIHRyaWdnZXJl
ZCBvbiAnICsgJHBwKHNlbGVjdG9yKSwKKyAgICAgICAgICAgICAgJ0V4cGVjdGVkIGV2ZW50ICcg
KyBldmVudE5hbWUgKyAnIG5vdCB0byBoYXZlIGJlZW4gdHJpZ2dlcmVkIG9uICcgKyAkcHAoc2Vs
ZWN0b3IpCisgICAgICAgICAgICBdOworICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAg
ICByZXR1cm4gd2FzVHJpZ2dlcmVkOworICAgICAgfSwKKworICAgICAgdG9IYXZlQmVlblRyaWdn
ZXJlZE9uQW5kV2l0aDogZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgc2VsZWN0b3IgPSBhcmd1
bWVudHNbMF07CisgICAgICAgIHZhciBleHBlY3RlZEFyZyA9IGFyZ3VtZW50c1sxXTsKKyAgICAg
ICAgdmFyIGV4YWN0TWF0Y2ggPSAhYXJndW1lbnRzWzJdOworICAgICAgICB2YXIgd2FzVHJpZ2dl
cmVkID0gamFzbWluZS5mbGlnaHQuZXZlbnRzLndhc1RyaWdnZXJlZChzZWxlY3RvciwgdGhpcy5h
Y3R1YWwpOworCisgICAgICAgIHRoaXMubWVzc2FnZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICB2YXIgJHBwID0gZnVuY3Rpb24gKG9iaikgeworICAgICAgICAgICAgdmFyIGRlc2NyaXB0aW9u
OworICAgICAgICAgICAgdmFyIGF0dHI7CisKKyAgICAgICAgICAgIGlmICghKG9iaiBpbnN0YW5j
ZW9mIGpRdWVyeSkpIHsKKyAgICAgICAgICAgICAgb2JqID0gJChvYmopOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IFsKKyAgICAgICAgICAgICAgb2JqLmdldCgw
KS5ub2RlTmFtZQorICAgICAgICAgICAgXTsKKworICAgICAgICAgICAgYXR0ciA9IG9iai5nZXQo
MCkuYXR0cmlidXRlcyB8fCBbXTsKKworICAgICAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCBh
dHRyLmxlbmd0aDsgeCsrKSB7CisgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLnB1c2goYXR0clt4
XS5uYW1lICsgJz0iJyArIGF0dHJbeF0udmFsdWUgKyAnIicpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICByZXR1cm4gJzwnICsgZGVzY3JpcHRpb24uam9pbignICcpICsgJz4nOworICAg
ICAgICAgIH07CisKKyAgICAgICAgICBpZiAod2FzVHJpZ2dlcmVkKSB7CisgICAgICAgICAgICB2
YXIgYWN0dWFsQXJnID0gamFzbWluZS5mbGlnaHQuZXZlbnRzLmV2ZW50QXJncyhzZWxlY3Rvciwg
dGhpcy5hY3R1YWwsIGV4cGVjdGVkQXJnKVsxXTsKKyAgICAgICAgICAgIHJldHVybiBbCisgICAg
ICAgICAgICAgICc8ZGl2IGNsYXNzPSJ2YWx1ZS1taXNtYXRjaCI+RXhwZWN0ZWQgZXZlbnQgJyAr
IHRoaXMuYWN0dWFsLm5hbWUgKyAnIHRvIGhhdmUgYmVlbiB0cmlnZ2VyZWQgb24nICsgc2VsZWN0
b3IsCisgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJ2YWx1ZS1taXNtYXRjaCI+RXhwZWN0ZWQg
ZXZlbnQgJyArIHRoaXMuYWN0dWFsLm5hbWUgKyAnIG5vdCB0byBoYXZlIGJlZW4gdHJpZ2dlcmVk
IG9uJyArIHNlbGVjdG9yCisgICAgICAgICAgICBdOworICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICByZXR1cm4gWworICAgICAgICAgICAgICAnRXhwZWN0ZWQgZXZlbnQgJyArIHRoaXMu
YWN0dWFsLm5hbWUgKyAnIHRvIGhhdmUgYmVlbiB0cmlnZ2VyZWQgb24gJyArICRwcChzZWxlY3Rv
ciksCisgICAgICAgICAgICAgICdFeHBlY3RlZCBldmVudCAnICsgdGhpcy5hY3R1YWwubmFtZSAr
ICcgbm90IHRvIGhhdmUgYmVlbiB0cmlnZ2VyZWQgb24gJyArICRwcChzZWxlY3RvcikKKyAgICAg
ICAgICAgIF07CisgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIGlmICghd2FzVHJp
Z2dlcmVkKSB7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGV4YWN0TWF0Y2gpIHsKKyAgICAgICAgICByZXR1cm4gamFzbWluZS5mbGlnaHQuZXZlbnRz
Lndhc1RyaWdnZXJlZFdpdGgoc2VsZWN0b3IsIHRoaXMuYWN0dWFsLCBleHBlY3RlZEFyZywgdGhp
cy5lbnYpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHJldHVybiBqYXNtaW5lLmZsaWdo
dC5ldmVudHMud2FzVHJpZ2dlcmVkV2l0aERhdGEoc2VsZWN0b3IsIHRoaXMuYWN0dWFsLCBleHBl
Y3RlZEFyZywgdGhpcy5lbnYpOworICAgICAgICB9CisgICAgICB9LAorCisgICAgICB0b0hhdmVD
c3M6IGZ1bmN0aW9uIChwcm9wLCB2YWwpIHsKKyAgICAgICAgdmFyIHJlc3VsdDsKKyAgICAgICAg
aWYgKHZhbCBpbnN0YW5jZW9mIFJlZ0V4cCkgeworICAgICAgICAgIHJlc3VsdCA9IHZhbC50ZXN0
KHRoaXMuYWN0dWFsLmNzcyhwcm9wKSk7CisgICAgICAgIH0gZWxzZSBpZiAocHJvcC5tYXRjaCgv
Y29sb3IvKSkgeworICAgICAgICAgIC8vSUUgcmV0dXJucyBjb2xvcnMgYXMgaGV4IHN0cmluZ3M7
IG90aGVyIGJyb3dzZXJzIHJldHVybiByZ2IociwgZywgYikgc3RyaW5ncworICAgICAgICAgIHJl
c3VsdCA9IGphc21pbmUuZmxpZ2h0LmNvbXBhcmVDb2xvcnModGhpcy5hY3R1YWwuY3NzKHByb3Ap
LCB2YWwpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHJlc3VsdCA9IHRoaXMuYWN0dWFs
LmNzcyhwcm9wKSA9PT0gdmFsOworICAgICAgICAgIC8vc29tZXRpbWVzIC5jc3MoKSByZXR1cm5z
IHN0cmluZ3Mgd2hlbiBpdCBzaG91bGQgcmV0dXJuIG51bWJlcnMKKyAgICAgICAgICBpZiAoIXJl
c3VsdCAmJiB0eXBlb2YgdmFsID09PSAnbnVtYmVyJykgeworICAgICAgICAgICAgcmVzdWx0ID0g
cGFyc2VGbG9hdCh0aGlzLmFjdHVhbC5jc3MocHJvcCksIDEwKSA9PT0gdmFsOworICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuYWN0dWFsID0gamFzbWluZS5mbGlnaHQuZm9y
bWF0RWxlbWVudCh0aGlzLmFjdHVhbCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICB9
CisgICAgfSk7CisgIH0pOworCisgIHJvb3Quc3B5T25FdmVudCA9IGZ1bmN0aW9uIChzZWxlY3Rv
ciwgZXZlbnROYW1lKSB7CisgICAgamFzbWluZS5KUXVlcnkuZXZlbnRzLnNweU9uKHNlbGVjdG9y
LCBldmVudE5hbWUpOworICAgIHJldHVybiBqYXNtaW5lLmZsaWdodC5ldmVudHMuc3B5T24oc2Vs
ZWN0b3IsIGV2ZW50TmFtZSk7CisgIH07CisKK30odGhpcykpOwpkaWZmIC0tZ2l0IGEvV2Vic2l0
ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvZmxpZ2h0anMtZXhh
bXBsZS1hcHAvY29tcG9uZW50cy9qYXNtaW5lLWpxdWVyeS9saWIvamFzbWluZS1qcXVlcnkuanMg
Yi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9mbGln
aHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2phc21pbmUtanF1ZXJ5L2xpYi9qYXNtaW5lLWpx
dWVyeS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4zYTVhMDI4OTQ1MTExMDdkZGVmOTNhZGRhMjZjMDhmZjVmZTg0
YTNkCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9t
ZXRlcjIuMS9yZXNvdXJjZXMvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9qYXNtaW5l
LWpxdWVyeS9saWIvamFzbWluZS1qcXVlcnkuanMKQEAgLTAsMCArMSw2NTkgQEAKKy8qIQorIEph
c21pbmUtalF1ZXJ5OiBhIHNldCBvZiBqUXVlcnkgaGVscGVycyBmb3IgSmFzbWluZSB0ZXN0cy4K
KworIFZlcnNpb24gMS41LjIKKworIGh0dHBzOi8vZ2l0aHViLmNvbS92ZWxlc2luL2phc21pbmUt
anF1ZXJ5CisKKyBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMyBXb2pjaWVjaCBaYXdpc3Rvd3NraSwg
VHJhdmlzIEplZmZlcnkKKworIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2Yg
Y2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworIGEgY29weSBvZiB0aGlzIHNvZnR3YXJl
IGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICJTb2Z0d2FyZSIpLCB0
byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyB3
aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2Us
IHB1Ymxpc2gsCisgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9m
IHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdh
cmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zOgorCisgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lv
biBub3RpY2Ugc2hhbGwgYmUKKyBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFs
IHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAi
QVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorIEVYUFJFU1MgT1IgSU1QTElF
RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorIE1FUkNI
QU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgTk9OSU5G
UklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9M
REVSUyBCRQorIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us
IEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyBXSVRIIFRIRSBTT0ZUV0FS
RSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyovCit2YXIg
cmVhZEZpeHR1cmVzID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiBqYXNtaW5lLmdldEZpeHR1cmVz
KCkucHJveHlDYWxsVG9fKCdyZWFkJywgYXJndW1lbnRzKQorfQorCit2YXIgcHJlbG9hZEZpeHR1
cmVzID0gZnVuY3Rpb24oKSB7CisgIGphc21pbmUuZ2V0Rml4dHVyZXMoKS5wcm94eUNhbGxUb18o
J3ByZWxvYWQnLCBhcmd1bWVudHMpCit9CisKK3ZhciBsb2FkRml4dHVyZXMgPSBmdW5jdGlvbigp
IHsKKyAgamFzbWluZS5nZXRGaXh0dXJlcygpLnByb3h5Q2FsbFRvXygnbG9hZCcsIGFyZ3VtZW50
cykKK30KKwordmFyIGFwcGVuZExvYWRGaXh0dXJlcyA9IGZ1bmN0aW9uKCkgeworICBqYXNtaW5l
LmdldEZpeHR1cmVzKCkucHJveHlDYWxsVG9fKCdhcHBlbmRMb2FkJywgYXJndW1lbnRzKQorfQor
Cit2YXIgc2V0Rml4dHVyZXMgPSBmdW5jdGlvbihodG1sKSB7CisgIGphc21pbmUuZ2V0Rml4dHVy
ZXMoKS5wcm94eUNhbGxUb18oJ3NldCcsIGFyZ3VtZW50cykKK30KKwordmFyIGFwcGVuZFNldEZp
eHR1cmVzID0gZnVuY3Rpb24oKSB7CisgIGphc21pbmUuZ2V0Rml4dHVyZXMoKS5wcm94eUNhbGxU
b18oJ2FwcGVuZFNldCcsIGFyZ3VtZW50cykKK30KKwordmFyIHNhbmRib3ggPSBmdW5jdGlvbihh
dHRyaWJ1dGVzKSB7CisgIHJldHVybiBqYXNtaW5lLmdldEZpeHR1cmVzKCkuc2FuZGJveChhdHRy
aWJ1dGVzKQorfQorCit2YXIgc3B5T25FdmVudCA9IGZ1bmN0aW9uKHNlbGVjdG9yLCBldmVudE5h
bWUpIHsKKyAgcmV0dXJuIGphc21pbmUuSlF1ZXJ5LmV2ZW50cy5zcHlPbihzZWxlY3RvciwgZXZl
bnROYW1lKQorfQorCit2YXIgcHJlbG9hZFN0eWxlRml4dHVyZXMgPSBmdW5jdGlvbigpIHsKKyAg
amFzbWluZS5nZXRTdHlsZUZpeHR1cmVzKCkucHJveHlDYWxsVG9fKCdwcmVsb2FkJywgYXJndW1l
bnRzKQorfQorCit2YXIgbG9hZFN0eWxlRml4dHVyZXMgPSBmdW5jdGlvbigpIHsKKyAgamFzbWlu
ZS5nZXRTdHlsZUZpeHR1cmVzKCkucHJveHlDYWxsVG9fKCdsb2FkJywgYXJndW1lbnRzKQorfQor
Cit2YXIgYXBwZW5kTG9hZFN0eWxlRml4dHVyZXMgPSBmdW5jdGlvbigpIHsKKyAgamFzbWluZS5n
ZXRTdHlsZUZpeHR1cmVzKCkucHJveHlDYWxsVG9fKCdhcHBlbmRMb2FkJywgYXJndW1lbnRzKQor
fQorCit2YXIgc2V0U3R5bGVGaXh0dXJlcyA9IGZ1bmN0aW9uKGh0bWwpIHsKKyAgamFzbWluZS5n
ZXRTdHlsZUZpeHR1cmVzKCkucHJveHlDYWxsVG9fKCdzZXQnLCBhcmd1bWVudHMpCit9CisKK3Zh
ciBhcHBlbmRTZXRTdHlsZUZpeHR1cmVzID0gZnVuY3Rpb24oaHRtbCkgeworICBqYXNtaW5lLmdl
dFN0eWxlRml4dHVyZXMoKS5wcm94eUNhbGxUb18oJ2FwcGVuZFNldCcsIGFyZ3VtZW50cykKK30K
KwordmFyIGxvYWRKU09ORml4dHVyZXMgPSBmdW5jdGlvbigpIHsKKyAgcmV0dXJuIGphc21pbmUu
Z2V0SlNPTkZpeHR1cmVzKCkucHJveHlDYWxsVG9fKCdsb2FkJywgYXJndW1lbnRzKQorfQorCit2
YXIgZ2V0SlNPTkZpeHR1cmUgPSBmdW5jdGlvbih1cmwpIHsKKyAgcmV0dXJuIGphc21pbmUuZ2V0
SlNPTkZpeHR1cmVzKCkucHJveHlDYWxsVG9fKCdyZWFkJywgYXJndW1lbnRzKVt1cmxdCit9CisK
K2phc21pbmUuc3BpZWRFdmVudHNLZXkgPSBmdW5jdGlvbiAoc2VsZWN0b3IsIGV2ZW50TmFtZSkg
eworICByZXR1cm4gWyQoc2VsZWN0b3IpLnNlbGVjdG9yLCBldmVudE5hbWVdLnRvU3RyaW5nKCkK
K30KKworamFzbWluZS5nZXRGaXh0dXJlcyA9IGZ1bmN0aW9uKCkgeworICByZXR1cm4gamFzbWlu
ZS5jdXJyZW50Rml4dHVyZXNfID0gamFzbWluZS5jdXJyZW50Rml4dHVyZXNfIHx8IG5ldyBqYXNt
aW5lLkZpeHR1cmVzKCkKK30KKworamFzbWluZS5nZXRTdHlsZUZpeHR1cmVzID0gZnVuY3Rpb24o
KSB7CisgIHJldHVybiBqYXNtaW5lLmN1cnJlbnRTdHlsZUZpeHR1cmVzXyA9IGphc21pbmUuY3Vy
cmVudFN0eWxlRml4dHVyZXNfIHx8IG5ldyBqYXNtaW5lLlN0eWxlRml4dHVyZXMoKQorfQorCitq
YXNtaW5lLkZpeHR1cmVzID0gZnVuY3Rpb24oKSB7CisgIHRoaXMuY29udGFpbmVySWQgPSAnamFz
bWluZS1maXh0dXJlcycKKyAgdGhpcy5maXh0dXJlc0NhY2hlXyA9IHt9CisgIHRoaXMuZml4dHVy
ZXNQYXRoID0gJ3NwZWMvamF2YXNjcmlwdHMvZml4dHVyZXMnCit9CisKK2phc21pbmUuRml4dHVy
ZXMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKGh0bWwpIHsKKyAgdGhpcy5jbGVhblVwKCkKKyAg
dGhpcy5jcmVhdGVDb250YWluZXJfKGh0bWwpCit9CisKK2phc21pbmUuRml4dHVyZXMucHJvdG90
eXBlLmFwcGVuZFNldD0gZnVuY3Rpb24oaHRtbCkgeworICB0aGlzLmFkZFRvQ29udGFpbmVyXyho
dG1sKQorfQorCitqYXNtaW5lLkZpeHR1cmVzLnByb3RvdHlwZS5wcmVsb2FkID0gZnVuY3Rpb24o
KSB7CisgIHRoaXMucmVhZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpCit9CisKK2phc21pbmUuRml4
dHVyZXMucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbigpIHsKKyAgdGhpcy5jbGVhblVwKCkKKyAg
dGhpcy5jcmVhdGVDb250YWluZXJfKHRoaXMucmVhZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpKQor
fQorCitqYXNtaW5lLkZpeHR1cmVzLnByb3RvdHlwZS5hcHBlbmRMb2FkID0gZnVuY3Rpb24oKSB7
CisgIHRoaXMuYWRkVG9Db250YWluZXJfKHRoaXMucmVhZC5hcHBseSh0aGlzLCBhcmd1bWVudHMp
KQorfQorCitqYXNtaW5lLkZpeHR1cmVzLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24oKSB7Cisg
IHZhciBodG1sQ2h1bmtzID0gW10KKworICB2YXIgZml4dHVyZVVybHMgPSBhcmd1bWVudHMKKyAg
Zm9yKHZhciB1cmxDb3VudCA9IGZpeHR1cmVVcmxzLmxlbmd0aCwgdXJsSW5kZXggPSAwOyB1cmxJ
bmRleCA8IHVybENvdW50OyB1cmxJbmRleCsrKSB7CisgICAgaHRtbENodW5rcy5wdXNoKHRoaXMu
Z2V0Rml4dHVyZUh0bWxfKGZpeHR1cmVVcmxzW3VybEluZGV4XSkpCisgIH0KKworICByZXR1cm4g
aHRtbENodW5rcy5qb2luKCcnKQorfQorCitqYXNtaW5lLkZpeHR1cmVzLnByb3RvdHlwZS5jbGVh
ckNhY2hlID0gZnVuY3Rpb24oKSB7CisgIHRoaXMuZml4dHVyZXNDYWNoZV8gPSB7fQorfQorCitq
YXNtaW5lLkZpeHR1cmVzLnByb3RvdHlwZS5jbGVhblVwID0gZnVuY3Rpb24oKSB7CisgICQoJyMn
ICsgdGhpcy5jb250YWluZXJJZCkucmVtb3ZlKCkKK30KKworamFzbWluZS5GaXh0dXJlcy5wcm90
b3R5cGUuc2FuZGJveCA9IGZ1bmN0aW9uKGF0dHJpYnV0ZXMpIHsKKyAgdmFyIGF0dHJpYnV0ZXNU
b1NldCA9IGF0dHJpYnV0ZXMgfHwge30KKyAgcmV0dXJuICQoJzxkaXYgaWQ9InNhbmRib3giIC8+
JykuYXR0cihhdHRyaWJ1dGVzVG9TZXQpCit9CisKK2phc21pbmUuRml4dHVyZXMucHJvdG90eXBl
LmNyZWF0ZUNvbnRhaW5lcl8gPSBmdW5jdGlvbihodG1sKSB7CisgIHZhciBjb250YWluZXIKKyAg
aWYoaHRtbCBpbnN0YW5jZW9mICQpIHsKKyAgICBjb250YWluZXIgPSAkKCc8ZGl2IGlkPSInICsg
dGhpcy5jb250YWluZXJJZCArICciIC8+JykKKyAgICBjb250YWluZXIuaHRtbChodG1sKQorICB9
IGVsc2UgeworICAgIGNvbnRhaW5lciA9ICc8ZGl2IGlkPSInICsgdGhpcy5jb250YWluZXJJZCAr
ICciPicgKyBodG1sICsgJzwvZGl2PicKKyAgfQorICAkKGRvY3VtZW50LmJvZHkpLmFwcGVuZChj
b250YWluZXIpCit9CisKK2phc21pbmUuRml4dHVyZXMucHJvdG90eXBlLmFkZFRvQ29udGFpbmVy
XyA9IGZ1bmN0aW9uKGh0bWwpeworICB2YXIgY29udGFpbmVyID0gJChkb2N1bWVudC5ib2R5KS5m
aW5kKCcjJyt0aGlzLmNvbnRhaW5lcklkKS5hcHBlbmQoaHRtbCkKKyAgaWYoIWNvbnRhaW5lci5s
ZW5ndGgpeworICAgIHRoaXMuY3JlYXRlQ29udGFpbmVyXyhodG1sKQorICB9Cit9CisKK2phc21p
bmUuRml4dHVyZXMucHJvdG90eXBlLmdldEZpeHR1cmVIdG1sXyA9IGZ1bmN0aW9uKHVybCkgewor
ICBpZiAodHlwZW9mIHRoaXMuZml4dHVyZXNDYWNoZV9bdXJsXSA9PT0gJ3VuZGVmaW5lZCcpIHsK
KyAgICB0aGlzLmxvYWRGaXh0dXJlSW50b0NhY2hlXyh1cmwpCisgIH0KKyAgcmV0dXJuIHRoaXMu
Zml4dHVyZXNDYWNoZV9bdXJsXQorfQorCitqYXNtaW5lLkZpeHR1cmVzLnByb3RvdHlwZS5sb2Fk
Rml4dHVyZUludG9DYWNoZV8gPSBmdW5jdGlvbihyZWxhdGl2ZVVybCkgeworICB2YXIgdXJsID0g
dGhpcy5tYWtlRml4dHVyZVVybF8ocmVsYXRpdmVVcmwpCisgIHZhciByZXF1ZXN0ID0gJC5hamF4
KHsKKyAgICB0eXBlOiAiR0VUIiwKKyAgICB1cmw6IHVybCArICI/IiArIG5ldyBEYXRlKCkuZ2V0
VGltZSgpLAorICAgIGFzeW5jOiBmYWxzZQorICB9KQorICB0aGlzLmZpeHR1cmVzQ2FjaGVfW3Jl
bGF0aXZlVXJsXSA9IHJlcXVlc3QucmVzcG9uc2VUZXh0Cit9CisKK2phc21pbmUuRml4dHVyZXMu
cHJvdG90eXBlLm1ha2VGaXh0dXJlVXJsXyA9IGZ1bmN0aW9uKHJlbGF0aXZlVXJsKXsKKyAgcmV0
dXJuIHRoaXMuZml4dHVyZXNQYXRoLm1hdGNoKCcvJCcpID8gdGhpcy5maXh0dXJlc1BhdGggKyBy
ZWxhdGl2ZVVybCA6IHRoaXMuZml4dHVyZXNQYXRoICsgJy8nICsgcmVsYXRpdmVVcmwKK30KKwor
amFzbWluZS5GaXh0dXJlcy5wcm90b3R5cGUucHJveHlDYWxsVG9fID0gZnVuY3Rpb24obWV0aG9k
TmFtZSwgcGFzc2VkQXJndW1lbnRzKSB7CisgIHJldHVybiB0aGlzW21ldGhvZE5hbWVdLmFwcGx5
KHRoaXMsIHBhc3NlZEFyZ3VtZW50cykKK30KKworCitqYXNtaW5lLlN0eWxlRml4dHVyZXMgPSBm
dW5jdGlvbigpIHsKKyAgdGhpcy5maXh0dXJlc0NhY2hlXyA9IHt9CisgIHRoaXMuZml4dHVyZXNO
b2Rlc18gPSBbXQorICB0aGlzLmZpeHR1cmVzUGF0aCA9ICdzcGVjL2phdmFzY3JpcHRzL2ZpeHR1
cmVzJworfQorCitqYXNtaW5lLlN0eWxlRml4dHVyZXMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9u
KGNzcykgeworICB0aGlzLmNsZWFuVXAoKQorICB0aGlzLmNyZWF0ZVN0eWxlXyhjc3MpCit9CisK
K2phc21pbmUuU3R5bGVGaXh0dXJlcy5wcm90b3R5cGUuYXBwZW5kU2V0ID0gZnVuY3Rpb24oY3Nz
KSB7CisgIHRoaXMuY3JlYXRlU3R5bGVfKGNzcykKK30KKworamFzbWluZS5TdHlsZUZpeHR1cmVz
LnByb3RvdHlwZS5wcmVsb2FkID0gZnVuY3Rpb24oKSB7CisgIHRoaXMucmVhZF8uYXBwbHkodGhp
cywgYXJndW1lbnRzKQorfQorCitqYXNtaW5lLlN0eWxlRml4dHVyZXMucHJvdG90eXBlLmxvYWQg
PSBmdW5jdGlvbigpIHsKKyAgdGhpcy5jbGVhblVwKCkKKyAgdGhpcy5jcmVhdGVTdHlsZV8odGhp
cy5yZWFkXy5hcHBseSh0aGlzLCBhcmd1bWVudHMpKQorfQorCitqYXNtaW5lLlN0eWxlRml4dHVy
ZXMucHJvdG90eXBlLmFwcGVuZExvYWQgPSBmdW5jdGlvbigpIHsKKyAgdGhpcy5jcmVhdGVTdHls
ZV8odGhpcy5yZWFkXy5hcHBseSh0aGlzLCBhcmd1bWVudHMpKQorfQorCitqYXNtaW5lLlN0eWxl
Rml4dHVyZXMucHJvdG90eXBlLmNsZWFuVXAgPSBmdW5jdGlvbigpIHsKKyAgd2hpbGUodGhpcy5m
aXh0dXJlc05vZGVzXy5sZW5ndGgpIHsKKyAgICB0aGlzLmZpeHR1cmVzTm9kZXNfLnBvcCgpLnJl
bW92ZSgpCisgIH0KK30KKworamFzbWluZS5TdHlsZUZpeHR1cmVzLnByb3RvdHlwZS5jcmVhdGVT
dHlsZV8gPSBmdW5jdGlvbihodG1sKSB7CisgIHZhciBzdHlsZVRleHQgPSAkKCc8ZGl2PjwvZGl2
PicpLmh0bWwoaHRtbCkudGV4dCgpLAorICAgIHN0eWxlID0gJCgnPHN0eWxlPicgKyBzdHlsZVRl
eHQgKyAnPC9zdHlsZT4nKQorCisgIHRoaXMuZml4dHVyZXNOb2Rlc18ucHVzaChzdHlsZSkKKwor
ICAkKCdoZWFkJykuYXBwZW5kKHN0eWxlKQorfQorCitqYXNtaW5lLlN0eWxlRml4dHVyZXMucHJv
dG90eXBlLmNsZWFyQ2FjaGUgPSBqYXNtaW5lLkZpeHR1cmVzLnByb3RvdHlwZS5jbGVhckNhY2hl
CisKK2phc21pbmUuU3R5bGVGaXh0dXJlcy5wcm90b3R5cGUucmVhZF8gPSBqYXNtaW5lLkZpeHR1
cmVzLnByb3RvdHlwZS5yZWFkCisKK2phc21pbmUuU3R5bGVGaXh0dXJlcy5wcm90b3R5cGUuZ2V0
Rml4dHVyZUh0bWxfID0gamFzbWluZS5GaXh0dXJlcy5wcm90b3R5cGUuZ2V0Rml4dHVyZUh0bWxf
CisKK2phc21pbmUuU3R5bGVGaXh0dXJlcy5wcm90b3R5cGUubG9hZEZpeHR1cmVJbnRvQ2FjaGVf
ID0gamFzbWluZS5GaXh0dXJlcy5wcm90b3R5cGUubG9hZEZpeHR1cmVJbnRvQ2FjaGVfCisKK2ph
c21pbmUuU3R5bGVGaXh0dXJlcy5wcm90b3R5cGUubWFrZUZpeHR1cmVVcmxfID0gamFzbWluZS5G
aXh0dXJlcy5wcm90b3R5cGUubWFrZUZpeHR1cmVVcmxfCisKK2phc21pbmUuU3R5bGVGaXh0dXJl
cy5wcm90b3R5cGUucHJveHlDYWxsVG9fID0gamFzbWluZS5GaXh0dXJlcy5wcm90b3R5cGUucHJv
eHlDYWxsVG9fCisKK2phc21pbmUuZ2V0SlNPTkZpeHR1cmVzID0gZnVuY3Rpb24oKSB7CisgIHJl
dHVybiBqYXNtaW5lLmN1cnJlbnRKU09ORml4dHVyZXNfID0gamFzbWluZS5jdXJyZW50SlNPTkZp
eHR1cmVzXyB8fCBuZXcgamFzbWluZS5KU09ORml4dHVyZXMoKQorfQorCitqYXNtaW5lLkpTT05G
aXh0dXJlcyA9IGZ1bmN0aW9uKCkgeworICB0aGlzLmZpeHR1cmVzQ2FjaGVfID0ge30KKyAgdGhp
cy5maXh0dXJlc1BhdGggPSAnc3BlYy9qYXZhc2NyaXB0cy9maXh0dXJlcy9qc29uJworfQorCitq
YXNtaW5lLkpTT05GaXh0dXJlcy5wcm90b3R5cGUubG9hZCA9IGZ1bmN0aW9uKCkgeworICB0aGlz
LnJlYWQuYXBwbHkodGhpcywgYXJndW1lbnRzKQorICByZXR1cm4gdGhpcy5maXh0dXJlc0NhY2hl
XworfQorCitqYXNtaW5lLkpTT05GaXh0dXJlcy5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uKCkg
eworICB2YXIgZml4dHVyZVVybHMgPSBhcmd1bWVudHMKKyAgZm9yKHZhciB1cmxDb3VudCA9IGZp
eHR1cmVVcmxzLmxlbmd0aCwgdXJsSW5kZXggPSAwOyB1cmxJbmRleCA8IHVybENvdW50OyB1cmxJ
bmRleCsrKSB7CisgICAgdGhpcy5nZXRGaXh0dXJlRGF0YV8oZml4dHVyZVVybHNbdXJsSW5kZXhd
KQorICB9CisgIHJldHVybiB0aGlzLmZpeHR1cmVzQ2FjaGVfCit9CisKK2phc21pbmUuSlNPTkZp
eHR1cmVzLnByb3RvdHlwZS5jbGVhckNhY2hlID0gZnVuY3Rpb24oKSB7CisgIHRoaXMuZml4dHVy
ZXNDYWNoZV8gPSB7fQorfQorCitqYXNtaW5lLkpTT05GaXh0dXJlcy5wcm90b3R5cGUuZ2V0Rml4
dHVyZURhdGFfID0gZnVuY3Rpb24odXJsKSB7CisgIHRoaXMubG9hZEZpeHR1cmVJbnRvQ2FjaGVf
KHVybCkKKyAgcmV0dXJuIHRoaXMuZml4dHVyZXNDYWNoZV9bdXJsXQorfQorCitqYXNtaW5lLkpT
T05GaXh0dXJlcy5wcm90b3R5cGUubG9hZEZpeHR1cmVJbnRvQ2FjaGVfID0gZnVuY3Rpb24ocmVs
YXRpdmVVcmwpIHsKKyAgdmFyIHNlbGYgPSB0aGlzCisgIHZhciB1cmwgPSB0aGlzLmZpeHR1cmVz
UGF0aC5tYXRjaCgnLyQnKSA/IHRoaXMuZml4dHVyZXNQYXRoICsgcmVsYXRpdmVVcmwgOiB0aGlz
LmZpeHR1cmVzUGF0aCArICcvJyArIHJlbGF0aXZlVXJsCisgICQuYWpheCh7CisgICAgYXN5bmM6
IGZhbHNlLCAvLyBtdXN0IGJlIHN5bmNocm9ub3VzIHRvIGd1YXJhbnRlZSB0aGF0IG5vIHRlc3Rz
IGFyZSBydW4gYmVmb3JlIGZpeHR1cmUgaXMgbG9hZGVkCisgICAgY2FjaGU6IGZhbHNlLAorICAg
IGRhdGFUeXBlOiAnanNvbicsCisgICAgdXJsOiB1cmwsCisgICAgc3VjY2VzczogZnVuY3Rpb24o
ZGF0YSkgeworICAgICAgc2VsZi5maXh0dXJlc0NhY2hlX1tyZWxhdGl2ZVVybF0gPSBkYXRhCisg
ICAgfSwKKyAgICBlcnJvcjogZnVuY3Rpb24oanFYSFIsIHN0YXR1cywgZXJyb3JUaHJvd24pIHsK
KyAgICAgICAgdGhyb3cgRXJyb3IoJ0pTT05GaXh0dXJlIGNvdWxkIG5vdCBiZSBsb2FkZWQ6ICcg
KyB1cmwgKyAnIChzdGF0dXM6ICcgKyBzdGF0dXMgKyAnLCBtZXNzYWdlOiAnICsgZXJyb3JUaHJv
d24ubWVzc2FnZSArICcpJykKKyAgICB9CisgIH0pCit9CisKK2phc21pbmUuSlNPTkZpeHR1cmVz
LnByb3RvdHlwZS5wcm94eUNhbGxUb18gPSBmdW5jdGlvbihtZXRob2ROYW1lLCBwYXNzZWRBcmd1
bWVudHMpIHsKKyAgcmV0dXJuIHRoaXNbbWV0aG9kTmFtZV0uYXBwbHkodGhpcywgcGFzc2VkQXJn
dW1lbnRzKQorfQorCitqYXNtaW5lLkpRdWVyeSA9IGZ1bmN0aW9uKCkge30KKworamFzbWluZS5K
UXVlcnkuYnJvd3NlclRhZ0Nhc2VJbmRlcGVuZGVudEh0bWwgPSBmdW5jdGlvbihodG1sKSB7Cisg
IHJldHVybiAkKCc8ZGl2Lz4nKS5hcHBlbmQoaHRtbCkuaHRtbCgpCit9CisKK2phc21pbmUuSlF1
ZXJ5LmVsZW1lbnRUb1N0cmluZyA9IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgdmFyIGRvbUVsID0g
JChlbGVtZW50KS5nZXQoMCkKKyAgaWYgKGRvbUVsID09IHVuZGVmaW5lZCB8fCBkb21FbC5jbG9u
ZU5vZGUpCisgICAgcmV0dXJuICQoJzxkaXYgLz4nKS5hcHBlbmQoJChlbGVtZW50KS5jbG9uZSgp
KS5odG1sKCkKKyAgZWxzZQorICAgIHJldHVybiBlbGVtZW50LnRvU3RyaW5nKCkKK30KKworamFz
bWluZS5KUXVlcnkubWF0Y2hlcnNDbGFzcyA9IHt9CisKKyFmdW5jdGlvbihuYW1lc3BhY2UpIHsK
KyAgdmFyIGRhdGEgPSB7CisgICAgc3BpZWRFdmVudHM6IHt9LAorICAgIGhhbmRsZXJzOiAgICBb
XQorICB9CisKKyAgbmFtZXNwYWNlLmV2ZW50cyA9IHsKKyAgICBzcHlPbjogZnVuY3Rpb24oc2Vs
ZWN0b3IsIGV2ZW50TmFtZSkgeworICAgICAgdmFyIGhhbmRsZXIgPSBmdW5jdGlvbihlKSB7Cisg
ICAgICAgIGRhdGEuc3BpZWRFdmVudHNbamFzbWluZS5zcGllZEV2ZW50c0tleShzZWxlY3Rvciwg
ZXZlbnROYW1lKV0gPSBqYXNtaW5lLnV0aWwuYXJnc1RvQXJyYXkoYXJndW1lbnRzKQorICAgICAg
fQorICAgICAgJChzZWxlY3Rvcikub24oZXZlbnROYW1lLCBoYW5kbGVyKQorICAgICAgZGF0YS5o
YW5kbGVycy5wdXNoKGhhbmRsZXIpCisgICAgICByZXR1cm4geworICAgICAgICBzZWxlY3Rvcjog
c2VsZWN0b3IsCisgICAgICAgIGV2ZW50TmFtZTogZXZlbnROYW1lLAorICAgICAgICBoYW5kbGVy
OiBoYW5kbGVyLAorICAgICAgICByZXNldDogZnVuY3Rpb24oKXsKKyAgICAgICAgICBkZWxldGUg
ZGF0YS5zcGllZEV2ZW50c1tqYXNtaW5lLnNwaWVkRXZlbnRzS2V5KHNlbGVjdG9yLCBldmVudE5h
bWUpXQorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKworICAgIGFyZ3M6IGZ1bmN0aW9uKHNl
bGVjdG9yLCBldmVudE5hbWUpIHsKKyAgICAgIHZhciBhY3R1YWxBcmdzID0gZGF0YS5zcGllZEV2
ZW50c1tqYXNtaW5lLnNwaWVkRXZlbnRzS2V5KHNlbGVjdG9yLCBldmVudE5hbWUpXTsKKworICAg
ICAgaWYgKCFhY3R1YWxBcmdzKSB7CisgICAgICAgIHRocm93ICJUaGVyZSBpcyBubyBzcHkgZm9y
ICIgKyBldmVudE5hbWUgKyAiIG9uICIgKyBzZWxlY3Rvci50b1N0cmluZygpICsgIi4gTWFrZSBz
dXJlIHRvIGNyZWF0ZSBhIHNweSB1c2luZyBzcHlPbkV2ZW50LiI7CisgICAgICB9CisKKyAgICAg
IHJldHVybiBhY3R1YWxBcmdzOworICAgIH0sCisKKyAgICB3YXNUcmlnZ2VyZWQ6IGZ1bmN0aW9u
KHNlbGVjdG9yLCBldmVudE5hbWUpIHsKKyAgICAgIHJldHVybiAhIShkYXRhLnNwaWVkRXZlbnRz
W2phc21pbmUuc3BpZWRFdmVudHNLZXkoc2VsZWN0b3IsIGV2ZW50TmFtZSldKQorICAgIH0sCisK
KyAgICB3YXNUcmlnZ2VyZWRXaXRoOiBmdW5jdGlvbihzZWxlY3RvciwgZXZlbnROYW1lLCBleHBl
Y3RlZEFyZ3MsIGVudikgeworICAgICAgdmFyIGFjdHVhbEFyZ3MgPSBqYXNtaW5lLkpRdWVyeS5l
dmVudHMuYXJncyhzZWxlY3RvciwgZXZlbnROYW1lKS5zbGljZSgxKTsKKyAgICAgIGlmIChPYmpl
Y3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZXhwZWN0ZWRBcmdzKSAhPT0gJ1tvYmplY3QgQXJy
YXldJykgeworICAgICAgICBhY3R1YWxBcmdzID0gYWN0dWFsQXJnc1swXTsKKyAgICAgIH0KKyAg
ICAgIHJldHVybiBlbnYuZXF1YWxzXyhleHBlY3RlZEFyZ3MsIGFjdHVhbEFyZ3MpOworICAgIH0s
CisKKyAgICB3YXNQcmV2ZW50ZWQ6IGZ1bmN0aW9uKHNlbGVjdG9yLCBldmVudE5hbWUpIHsKKyAg
ICAgIHZhciBhcmdzID0gZGF0YS5zcGllZEV2ZW50c1tqYXNtaW5lLnNwaWVkRXZlbnRzS2V5KHNl
bGVjdG9yLCBldmVudE5hbWUpXSwKKyAgICAgICAgICBlID0gYXJncyA/IGFyZ3NbMF0gOiB1bmRl
ZmluZWQ7CisgICAgICByZXR1cm4gZSAmJiBlLmlzRGVmYXVsdFByZXZlbnRlZCgpCisgICAgfSwK
KworICAgIHdhc1N0b3BwZWQ6IGZ1bmN0aW9uKHNlbGVjdG9yLCBldmVudE5hbWUpIHsKKyAgICAg
IHZhciBhcmdzID0gZGF0YS5zcGllZEV2ZW50c1tqYXNtaW5lLnNwaWVkRXZlbnRzS2V5KHNlbGVj
dG9yLCBldmVudE5hbWUpXSwKKyAgICAgICAgICBlID0gYXJncyA/IGFyZ3NbMF0gOiB1bmRlZmlu
ZWQ7CisgICAgICByZXR1cm4gZSAmJiBlLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkKKyAgICB9LAor
CisgICAgY2xlYW5VcDogZnVuY3Rpb24oKSB7CisgICAgICBkYXRhLnNwaWVkRXZlbnRzID0ge30K
KyAgICAgIGRhdGEuaGFuZGxlcnMgICAgPSBbXQorICAgIH0KKyAgfQorfShqYXNtaW5lLkpRdWVy
eSkKKworIWZ1bmN0aW9uKCl7CisgIHZhciBqUXVlcnlNYXRjaGVycyA9IHsKKyAgICB0b0hhdmVD
bGFzczogZnVuY3Rpb24oY2xhc3NOYW1lKSB7CisgICAgICByZXR1cm4gdGhpcy5hY3R1YWwuaGFz
Q2xhc3MoY2xhc3NOYW1lKQorICAgIH0sCisKKyAgICB0b0hhdmVDc3M6IGZ1bmN0aW9uKGNzcyl7
CisgICAgICBmb3IgKHZhciBwcm9wIGluIGNzcyl7CisgICAgICAgIGlmICh0aGlzLmFjdHVhbC5j
c3MocHJvcCkgIT09IGNzc1twcm9wXSkgcmV0dXJuIGZhbHNlCisgICAgICB9CisgICAgICByZXR1
cm4gdHJ1ZQorICAgIH0sCisKKyAgICB0b0JlVmlzaWJsZTogZnVuY3Rpb24oKSB7CisgICAgICBy
ZXR1cm4gdGhpcy5hY3R1YWwuaXMoJzp2aXNpYmxlJykKKyAgICB9LAorCisgICAgdG9CZUhpZGRl
bjogZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gdGhpcy5hY3R1YWwuaXMoJzpoaWRkZW4nKQor
ICAgIH0sCisKKyAgICB0b0JlU2VsZWN0ZWQ6IGZ1bmN0aW9uKCkgeworICAgICAgcmV0dXJuIHRo
aXMuYWN0dWFsLmlzKCc6c2VsZWN0ZWQnKQorICAgIH0sCisKKyAgICB0b0JlQ2hlY2tlZDogZnVu
Y3Rpb24oKSB7CisgICAgICByZXR1cm4gdGhpcy5hY3R1YWwuaXMoJzpjaGVja2VkJykKKyAgICB9
LAorCisgICAgdG9CZUVtcHR5OiBmdW5jdGlvbigpIHsKKyAgICAgIHJldHVybiB0aGlzLmFjdHVh
bC5pcygnOmVtcHR5JykKKyAgICB9LAorCisgICAgdG9FeGlzdDogZnVuY3Rpb24oKSB7CisgICAg
ICByZXR1cm4gJChkb2N1bWVudCkuZmluZCh0aGlzLmFjdHVhbCkubGVuZ3RoCisgICAgfSwKKwor
ICAgIHRvSGF2ZUxlbmd0aDogZnVuY3Rpb24obGVuZ3RoKSB7CisgICAgICByZXR1cm4gdGhpcy5h
Y3R1YWwubGVuZ3RoID09PSBsZW5ndGgKKyAgICB9LAorCisgICAgdG9IYXZlQXR0cjogZnVuY3Rp
b24oYXR0cmlidXRlTmFtZSwgZXhwZWN0ZWRBdHRyaWJ1dGVWYWx1ZSkgeworICAgICAgcmV0dXJu
IGhhc1Byb3BlcnR5KHRoaXMuYWN0dWFsLmF0dHIoYXR0cmlidXRlTmFtZSksIGV4cGVjdGVkQXR0
cmlidXRlVmFsdWUpCisgICAgfSwKKworICAgIHRvSGF2ZVByb3A6IGZ1bmN0aW9uKHByb3BlcnR5
TmFtZSwgZXhwZWN0ZWRQcm9wZXJ0eVZhbHVlKSB7CisgICAgICByZXR1cm4gaGFzUHJvcGVydHko
dGhpcy5hY3R1YWwucHJvcChwcm9wZXJ0eU5hbWUpLCBleHBlY3RlZFByb3BlcnR5VmFsdWUpCisg
ICAgfSwKKworICAgIHRvSGF2ZUlkOiBmdW5jdGlvbihpZCkgeworICAgICAgcmV0dXJuIHRoaXMu
YWN0dWFsLmF0dHIoJ2lkJykgPT0gaWQKKyAgICB9LAorCisgICAgdG9IYXZlSHRtbDogZnVuY3Rp
b24oaHRtbCkgeworICAgICAgcmV0dXJuIHRoaXMuYWN0dWFsLmh0bWwoKSA9PSBqYXNtaW5lLkpR
dWVyeS5icm93c2VyVGFnQ2FzZUluZGVwZW5kZW50SHRtbChodG1sKQorICAgIH0sCisKKyAgICB0
b0NvbnRhaW5IdG1sOiBmdW5jdGlvbihodG1sKXsKKyAgICAgIHZhciBhY3R1YWxIdG1sID0gdGhp
cy5hY3R1YWwuaHRtbCgpCisgICAgICB2YXIgZXhwZWN0ZWRIdG1sID0gamFzbWluZS5KUXVlcnku
YnJvd3NlclRhZ0Nhc2VJbmRlcGVuZGVudEh0bWwoaHRtbCkKKyAgICAgIHJldHVybiAoYWN0dWFs
SHRtbC5pbmRleE9mKGV4cGVjdGVkSHRtbCkgPj0gMCkKKyAgICB9LAorCisgICAgdG9IYXZlVGV4
dDogZnVuY3Rpb24odGV4dCkgeworICAgICAgdmFyIHRyaW1tZWRUZXh0ID0gJC50cmltKHRoaXMu
YWN0dWFsLnRleHQoKSkKKyAgICAgIGlmICh0ZXh0ICYmICQuaXNGdW5jdGlvbih0ZXh0LnRlc3Qp
KSB7CisgICAgICAgIHJldHVybiB0ZXh0LnRlc3QodHJpbW1lZFRleHQpCisgICAgICB9IGVsc2Ug
eworICAgICAgICByZXR1cm4gdHJpbW1lZFRleHQgPT0gdGV4dAorICAgICAgfQorICAgIH0sCisK
KyAgICB0b0NvbnRhaW5UZXh0OiBmdW5jdGlvbih0ZXh0KSB7CisgICAgICB2YXIgdHJpbW1lZFRl
eHQgPSAkLnRyaW0odGhpcy5hY3R1YWwudGV4dCgpKQorICAgICAgaWYgKHRleHQgJiYgJC5pc0Z1
bmN0aW9uKHRleHQudGVzdCkpIHsKKyAgICAgICAgcmV0dXJuIHRleHQudGVzdCh0cmltbWVkVGV4
dCkKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiB0cmltbWVkVGV4dC5pbmRleE9mKHRl
eHQpICE9IC0xOworICAgICAgfQorICAgIH0sCisKKyAgICB0b0hhdmVWYWx1ZTogZnVuY3Rpb24o
dmFsdWUpIHsKKyAgICAgIHJldHVybiB0aGlzLmFjdHVhbC52YWwoKSA9PT0gdmFsdWUKKyAgICB9
LAorCisgICAgdG9IYXZlRGF0YTogZnVuY3Rpb24oa2V5LCBleHBlY3RlZFZhbHVlKSB7CisgICAg
ICByZXR1cm4gaGFzUHJvcGVydHkodGhpcy5hY3R1YWwuZGF0YShrZXkpLCBleHBlY3RlZFZhbHVl
KQorICAgIH0sCisKKyAgICB0b0JlOiBmdW5jdGlvbihzZWxlY3RvcikgeworICAgICAgcmV0dXJu
IHRoaXMuYWN0dWFsLmlzKHNlbGVjdG9yKQorICAgIH0sCisKKyAgICB0b0NvbnRhaW46IGZ1bmN0
aW9uKHNlbGVjdG9yKSB7CisgICAgICByZXR1cm4gdGhpcy5hY3R1YWwuZmluZChzZWxlY3Rvciku
bGVuZ3RoCisgICAgfSwKKworICAgIHRvQmVEaXNhYmxlZDogZnVuY3Rpb24oc2VsZWN0b3Ipewor
ICAgICAgcmV0dXJuIHRoaXMuYWN0dWFsLmlzKCc6ZGlzYWJsZWQnKQorICAgIH0sCisKKyAgICB0
b0JlRm9jdXNlZDogZnVuY3Rpb24oc2VsZWN0b3IpIHsKKyAgICAgIHJldHVybiB0aGlzLmFjdHVh
bFswXSA9PT0gdGhpcy5hY3R1YWxbMF0ub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50CisgICAg
fSwKKworICAgIHRvSGFuZGxlOiBmdW5jdGlvbihldmVudCkgeworCisgICAgICB2YXIgZXZlbnRz
ID0gJC5fZGF0YSh0aGlzLmFjdHVhbC5nZXQoMCksICJldmVudHMiKQorCisgICAgICBpZighZXZl
bnRzIHx8ICFldmVudCB8fCB0eXBlb2YgZXZlbnQgIT09ICJzdHJpbmciKSB7CisgICAgICAgIHJl
dHVybiBmYWxzZQorICAgICAgfQorCisgICAgICB2YXIgbmFtZXNwYWNlcyA9IGV2ZW50LnNwbGl0
KCIuIikKKyAgICAgIHZhciBldmVudFR5cGUgPSBuYW1lc3BhY2VzLnNoaWZ0KCkKKyAgICAgIHZh
ciBzb3J0ZWROYW1lc3BhY2VzID0gbmFtZXNwYWNlcy5zbGljZSgwKS5zb3J0KCkKKyAgICAgIHZh
ciBuYW1lc3BhY2VSZWdFeHAgPSBuZXcgUmVnRXhwKCIoXnxcXC4pIiArIHNvcnRlZE5hbWVzcGFj
ZXMuam9pbigiXFwuKD86LipcXC4pPyIpICsgIihcXC58JCkiKQorCisgICAgICBpZihldmVudHNb
ZXZlbnRUeXBlXSAmJiBuYW1lc3BhY2VzLmxlbmd0aCkgeworICAgICAgICBmb3IodmFyIGkgPSAw
OyBpIDwgZXZlbnRzW2V2ZW50VHlwZV0ubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICB2YXIgbmFt
ZXNwYWNlID0gZXZlbnRzW2V2ZW50VHlwZV1baV0ubmFtZXNwYWNlCisgICAgICAgICAgaWYobmFt
ZXNwYWNlUmVnRXhwLnRlc3QobmFtZXNwYWNlKSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWUK
KyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBl
dmVudHNbZXZlbnRUeXBlXSAmJiBldmVudHNbZXZlbnRUeXBlXS5sZW5ndGggPiAwCisgICAgICB9
CisgICAgfSwKKworICAgIC8vIHRlc3RzIHRoZSBleGlzdGVuY2Ugb2YgYSBzcGVjaWZpYyBldmVu
dCBiaW5kaW5nICsgaGFuZGxlcgorICAgIHRvSGFuZGxlV2l0aDogZnVuY3Rpb24oZXZlbnROYW1l
LCBldmVudEhhbmRsZXIpIHsKKyAgICAgIHZhciBzdGFjayA9ICQuX2RhdGEodGhpcy5hY3R1YWwu
Z2V0KDApLCAiZXZlbnRzIilbZXZlbnROYW1lXQorICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBz
dGFjay5sZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoc3RhY2tbaV0uaGFuZGxlciA9PSBldmVu
dEhhbmRsZXIpIHJldHVybiB0cnVlCisgICAgICB9CisgICAgICByZXR1cm4gZmFsc2UKKyAgICB9
CisgIH0KKworICB2YXIgaGFzUHJvcGVydHkgPSBmdW5jdGlvbihhY3R1YWxWYWx1ZSwgZXhwZWN0
ZWRWYWx1ZSkgeworICAgIGlmIChleHBlY3RlZFZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBh
Y3R1YWxWYWx1ZSAhPT0gdW5kZWZpbmVkCisgICAgcmV0dXJuIGFjdHVhbFZhbHVlID09IGV4cGVj
dGVkVmFsdWUKKyAgfQorCisgIHZhciBiaW5kTWF0Y2hlciA9IGZ1bmN0aW9uKG1ldGhvZE5hbWUp
IHsKKyAgICB2YXIgYnVpbHRJbk1hdGNoZXIgPSBqYXNtaW5lLk1hdGNoZXJzLnByb3RvdHlwZVtt
ZXRob2ROYW1lXQorCisgICAgamFzbWluZS5KUXVlcnkubWF0Y2hlcnNDbGFzc1ttZXRob2ROYW1l
XSA9IGZ1bmN0aW9uKCkgeworICAgICAgaWYgKHRoaXMuYWN0dWFsCisgICAgICAgICYmICh0aGlz
LmFjdHVhbCBpbnN0YW5jZW9mICQKKyAgICAgICAgICB8fCBqYXNtaW5lLmlzRG9tTm9kZSh0aGlz
LmFjdHVhbCkpKSB7CisgICAgICAgICAgICB0aGlzLmFjdHVhbCA9ICQodGhpcy5hY3R1YWwpCisg
ICAgICAgICAgICB2YXIgcmVzdWx0ID0galF1ZXJ5TWF0Y2hlcnNbbWV0aG9kTmFtZV0uYXBwbHko
dGhpcywgYXJndW1lbnRzKQorICAgICAgICAgICAgdmFyIGVsZW1lbnQKKyAgICAgICAgICAgIGlm
ICh0aGlzLmFjdHVhbC5nZXQgJiYgKGVsZW1lbnQgPSB0aGlzLmFjdHVhbC5nZXQoKVswXSkgJiYg
ISQuaXNXaW5kb3coZWxlbWVudCkgJiYgZWxlbWVudC50YWdOYW1lICE9PSAiSFRNTCIpCisgICAg
ICAgICAgICAgIHRoaXMuYWN0dWFsID0gamFzbWluZS5KUXVlcnkuZWxlbWVudFRvU3RyaW5nKHRo
aXMuYWN0dWFsKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICAgIH0KKworICAg
ICAgICAgIGlmIChidWlsdEluTWF0Y2hlcikgeworICAgICAgICAgICAgcmV0dXJuIGJ1aWx0SW5N
YXRjaGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykKKyAgICAgICAgICB9CisKKyAgICAgICAgICBy
ZXR1cm4gZmFsc2UKKyAgICB9CisgIH0KKworICBmb3IodmFyIG1ldGhvZE5hbWUgaW4galF1ZXJ5
TWF0Y2hlcnMpIHsKKyAgICBiaW5kTWF0Y2hlcihtZXRob2ROYW1lKQorICB9Cit9KCkKKworYmVm
b3JlRWFjaChmdW5jdGlvbigpIHsKKyAgdGhpcy5hZGRNYXRjaGVycyhqYXNtaW5lLkpRdWVyeS5t
YXRjaGVyc0NsYXNzKQorICB0aGlzLmFkZE1hdGNoZXJzKHsKKyAgICB0b0hhdmVCZWVuVHJpZ2dl
cmVkT246IGZ1bmN0aW9uKHNlbGVjdG9yKSB7CisgICAgICB0aGlzLm1lc3NhZ2UgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgcmV0dXJuIFsKKyAgICAgICAgICAiRXhwZWN0ZWQgZXZlbnQgIiArIHRo
aXMuYWN0dWFsICsgIiB0byBoYXZlIGJlZW4gdHJpZ2dlcmVkIG9uICIgKyBzZWxlY3RvciwKKyAg
ICAgICAgICAiRXhwZWN0ZWQgZXZlbnQgIiArIHRoaXMuYWN0dWFsICsgIiBub3QgdG8gaGF2ZSBi
ZWVuIHRyaWdnZXJlZCBvbiAiICsgc2VsZWN0b3IKKyAgICAgICAgXQorICAgICAgfQorICAgICAg
cmV0dXJuIGphc21pbmUuSlF1ZXJ5LmV2ZW50cy53YXNUcmlnZ2VyZWQoc2VsZWN0b3IsIHRoaXMu
YWN0dWFsKQorICAgIH0KKyAgfSkKKyAgdGhpcy5hZGRNYXRjaGVycyh7CisgICAgdG9IYXZlQmVl
blRyaWdnZXJlZDogZnVuY3Rpb24oKXsKKyAgICAgIHZhciBldmVudE5hbWUgPSB0aGlzLmFjdHVh
bC5ldmVudE5hbWUsCisgICAgICAgICAgc2VsZWN0b3IgPSB0aGlzLmFjdHVhbC5zZWxlY3Rvcgor
ICAgICAgdGhpcy5tZXNzYWdlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBbCisgICAg
ICAgICAgIkV4cGVjdGVkIGV2ZW50ICIgKyBldmVudE5hbWUgKyAiIHRvIGhhdmUgYmVlbiB0cmln
Z2VyZWQgb24gIiArIHNlbGVjdG9yLAorICAgICAgICAgICJFeHBlY3RlZCBldmVudCAiICsgZXZl
bnROYW1lICsgIiBub3QgdG8gaGF2ZSBiZWVuIHRyaWdnZXJlZCBvbiAiICsgc2VsZWN0b3IKKyAg
ICAgICAgXQorICAgICAgfQorICAgICAgcmV0dXJuIGphc21pbmUuSlF1ZXJ5LmV2ZW50cy53YXNU
cmlnZ2VyZWQoc2VsZWN0b3IsIGV2ZW50TmFtZSkKKyAgICAgfQorICB9KQorICB0aGlzLmFkZE1h
dGNoZXJzKHsKKyAgICB0b0hhdmVCZWVuVHJpZ2dlcmVkT25BbmRXaXRoOiBmdW5jdGlvbigpIHsK
KyAgICAgIHZhciBzZWxlY3RvciA9IGFyZ3VtZW50c1swXSwKKyAgICAgICAgICBleHBlY3RlZEFy
Z3MgPSBhcmd1bWVudHNbMV0sCisgICAgICAgICAgd2FzVHJpZ2dlcmVkID0gamFzbWluZS5KUXVl
cnkuZXZlbnRzLndhc1RyaWdnZXJlZChzZWxlY3RvciwgdGhpcy5hY3R1YWwpOworICAgICAgdGhp
cy5tZXNzYWdlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3YXNUcmlnZ2VyZWQpIHsKKyAg
ICAgICAgICB2YXIgYWN0dWFsQXJncyA9IGphc21pbmUuSlF1ZXJ5LmV2ZW50cy5hcmdzKHNlbGVj
dG9yLCB0aGlzLmFjdHVhbCwgZXhwZWN0ZWRBcmdzKVsxXTsKKyAgICAgICAgICByZXR1cm4gWwor
ICAgICAgICAgICAgIkV4cGVjdGVkIGV2ZW50ICIgKyB0aGlzLmFjdHVhbCArICIgdG8gaGF2ZSBi
ZWVuIHRyaWdnZXJlZCB3aXRoICIgKyBqYXNtaW5lLnBwKGV4cGVjdGVkQXJncykgKyAiICBidXQg
aXQgd2FzIHRyaWdnZXJlZCB3aXRoICIgKyBqYXNtaW5lLnBwKGFjdHVhbEFyZ3MpLAorICAgICAg
ICAgICAgIkV4cGVjdGVkIGV2ZW50ICIgKyB0aGlzLmFjdHVhbCArICIgbm90IHRvIGhhdmUgYmVl
biB0cmlnZ2VyZWQgd2l0aCAiICsgamFzbWluZS5wcChleHBlY3RlZEFyZ3MpICsgIiBidXQgaXQg
d2FzIHRyaWdnZXJlZCB3aXRoICIgKyBqYXNtaW5lLnBwKGFjdHVhbEFyZ3MpCisgICAgICAgICAg
XQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHJldHVybiBbCisgICAgICAgICAgICAiRXhw
ZWN0ZWQgZXZlbnQgIiArIHRoaXMuYWN0dWFsICsgIiB0byBoYXZlIGJlZW4gdHJpZ2dlcmVkIG9u
ICIgKyBzZWxlY3RvciwKKyAgICAgICAgICAgICJFeHBlY3RlZCBldmVudCAiICsgdGhpcy5hY3R1
YWwgKyAiIG5vdCB0byBoYXZlIGJlZW4gdHJpZ2dlcmVkIG9uICIgKyBzZWxlY3RvcgorICAgICAg
ICAgIF0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgcmV0dXJuIHdhc1RyaWdnZXJlZCAmJiBq
YXNtaW5lLkpRdWVyeS5ldmVudHMud2FzVHJpZ2dlcmVkV2l0aChzZWxlY3RvciwgdGhpcy5hY3R1
YWwsIGV4cGVjdGVkQXJncywgdGhpcy5lbnYpOworICAgIH0KKyAgfSkKKyAgdGhpcy5hZGRNYXRj
aGVycyh7CisgICAgdG9IYXZlQmVlblByZXZlbnRlZE9uOiBmdW5jdGlvbihzZWxlY3Rvcikgewor
ICAgICAgdGhpcy5tZXNzYWdlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBbCisgICAg
ICAgICAgIkV4cGVjdGVkIGV2ZW50ICIgKyB0aGlzLmFjdHVhbCArICIgdG8gaGF2ZSBiZWVuIHBy
ZXZlbnRlZCBvbiAiICsgc2VsZWN0b3IsCisgICAgICAgICAgIkV4cGVjdGVkIGV2ZW50ICIgKyB0
aGlzLmFjdHVhbCArICIgbm90IHRvIGhhdmUgYmVlbiBwcmV2ZW50ZWQgb24gIiArIHNlbGVjdG9y
CisgICAgICAgIF0KKyAgICAgIH0KKyAgICAgIHJldHVybiBqYXNtaW5lLkpRdWVyeS5ldmVudHMu
d2FzUHJldmVudGVkKHNlbGVjdG9yLCB0aGlzLmFjdHVhbCkKKyAgICB9CisgIH0pCisgIHRoaXMu
YWRkTWF0Y2hlcnMoeworICAgIHRvSGF2ZUJlZW5QcmV2ZW50ZWQ6IGZ1bmN0aW9uKCkgeworICAg
ICAgdmFyIGV2ZW50TmFtZSA9IHRoaXMuYWN0dWFsLmV2ZW50TmFtZSwKKyAgICAgICAgICBzZWxl
Y3RvciA9IHRoaXMuYWN0dWFsLnNlbGVjdG9yCisgICAgICB0aGlzLm1lc3NhZ2UgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgcmV0dXJuIFsKKyAgICAgICAgICAiRXhwZWN0ZWQgZXZlbnQgIiArIGV2
ZW50TmFtZSArICIgdG8gaGF2ZSBiZWVuIHByZXZlbnRlZCBvbiAiICsgc2VsZWN0b3IsCisgICAg
ICAgICAgIkV4cGVjdGVkIGV2ZW50ICIgKyBldmVudE5hbWUgKyAiIG5vdCB0byBoYXZlIGJlZW4g
cHJldmVudGVkIG9uICIgKyBzZWxlY3RvcgorICAgICAgICBdCisgICAgICB9CisgICAgICByZXR1
cm4gamFzbWluZS5KUXVlcnkuZXZlbnRzLndhc1ByZXZlbnRlZChzZWxlY3RvciwgZXZlbnROYW1l
KQorICAgIH0KKyAgfSkKKyAgdGhpcy5hZGRNYXRjaGVycyh7CisgICAgdG9IYXZlQmVlblN0b3Bw
ZWRPbjogZnVuY3Rpb24oc2VsZWN0b3IpIHsKKyAgICAgIHRoaXMubWVzc2FnZSA9IGZ1bmN0aW9u
KCkgeworICAgICAgICByZXR1cm4gWworICAgICAgICAgICJFeHBlY3RlZCBldmVudCAiICsgdGhp
cy5hY3R1YWwgKyAiIHRvIGhhdmUgYmVlbiBzdG9wcGVkIG9uICIgKyBzZWxlY3RvciwKKyAgICAg
ICAgICAiRXhwZWN0ZWQgZXZlbnQgIiArIHRoaXMuYWN0dWFsICsgIiBub3QgdG8gaGF2ZSBiZWVu
IHN0b3BwZWQgb24gIiArIHNlbGVjdG9yCisgICAgICAgIF0KKyAgICAgIH0KKyAgICAgIHJldHVy
biBqYXNtaW5lLkpRdWVyeS5ldmVudHMud2FzU3RvcHBlZChzZWxlY3RvciwgdGhpcy5hY3R1YWwp
CisgICAgfQorICB9KQorICB0aGlzLmFkZE1hdGNoZXJzKHsKKyAgICB0b0hhdmVCZWVuU3RvcHBl
ZDogZnVuY3Rpb24oKSB7CisgICAgICB2YXIgZXZlbnROYW1lID0gdGhpcy5hY3R1YWwuZXZlbnRO
YW1lLAorICAgICAgICAgIHNlbGVjdG9yID0gdGhpcy5hY3R1YWwuc2VsZWN0b3IKKyAgICAgIHRo
aXMubWVzc2FnZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gWworICAgICAgICAgICJF
eHBlY3RlZCBldmVudCAiICsgZXZlbnROYW1lICsgIiB0byBoYXZlIGJlZW4gc3RvcHBlZCBvbiAi
ICsgc2VsZWN0b3IsCisgICAgICAgICAgIkV4cGVjdGVkIGV2ZW50ICIgKyBldmVudE5hbWUgKyAi
IG5vdCB0byBoYXZlIGJlZW4gc3RvcHBlZCBvbiAiICsgc2VsZWN0b3IKKyAgICAgICAgXQorICAg
ICAgfQorICAgICAgcmV0dXJuIGphc21pbmUuSlF1ZXJ5LmV2ZW50cy53YXNTdG9wcGVkKHNlbGVj
dG9yLCBldmVudE5hbWUpCisgICAgfQorICB9KQorfSkKKworYWZ0ZXJFYWNoKGZ1bmN0aW9uKCkg
eworICBqYXNtaW5lLmdldEZpeHR1cmVzKCkuY2xlYW5VcCgpCisgIGphc21pbmUuZ2V0U3R5bGVG
aXh0dXJlcygpLmNsZWFuVXAoKQorICBqYXNtaW5lLkpRdWVyeS5ldmVudHMuY2xlYW5VcCgpCit9
KQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9y
ZXNvdXJjZXMvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9qcXVlcnkvanF1ZXJ5Lmpz
IGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvZmxp
Z2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9qcXVlcnkvanF1ZXJ5LmpzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjFkZGQ4ZWJkNmMxMjk1ZWFhYTc2Nzg4MjFkMjRmNmFmMGIxZjE4ZjUKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9m
bGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2pxdWVyeS9qcXVlcnkuanMKQEAgLTAsMCAr
MSw5NDcyIEBACisvKiEKKyAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjEuOC4zCisgKiBo
dHRwOi8vanF1ZXJ5LmNvbS8KKyAqCisgKiBJbmNsdWRlcyBTaXp6bGUuanMKKyAqIGh0dHA6Ly9z
aXp6bGVqcy5jb20vCisgKgorICogQ29weXJpZ2h0IDIwMTIgalF1ZXJ5IEZvdW5kYXRpb24gYW5k
IG90aGVyIGNvbnRyaWJ1dG9ycworICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCisg
KiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlCisgKgorICogRGF0ZTogVHVlIE5vdiAxMyAyMDEy
IDA4OjIwOjMzIEdNVC0wNTAwIChFYXN0ZXJuIFN0YW5kYXJkIFRpbWUpCisgKi8KKyhmdW5jdGlv
biggd2luZG93LCB1bmRlZmluZWQgKSB7Cit2YXIKKyAgICAvLyBBIGNlbnRyYWwgcmVmZXJlbmNl
IHRvIHRoZSByb290IGpRdWVyeShkb2N1bWVudCkKKyAgICByb290alF1ZXJ5LAorCisgICAgLy8g
VGhlIGRlZmVycmVkIHVzZWQgb24gRE9NIHJlYWR5CisgICAgcmVhZHlMaXN0LAorCisgICAgLy8g
VXNlIHRoZSBjb3JyZWN0IGRvY3VtZW50IGFjY29yZGluZ2x5IHdpdGggd2luZG93IGFyZ3VtZW50
IChzYW5kYm94KQorICAgIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50LAorICAgIGxvY2F0aW9u
ID0gd2luZG93LmxvY2F0aW9uLAorICAgIG5hdmlnYXRvciA9IHdpbmRvdy5uYXZpZ2F0b3IsCisK
KyAgICAvLyBNYXAgb3ZlciBqUXVlcnkgaW4gY2FzZSBvZiBvdmVyd3JpdGUKKyAgICBfalF1ZXJ5
ID0gd2luZG93LmpRdWVyeSwKKworICAgIC8vIE1hcCBvdmVyIHRoZSAkIGluIGNhc2Ugb2Ygb3Zl
cndyaXRlCisgICAgXyQgPSB3aW5kb3cuJCwKKworICAgIC8vIFNhdmUgYSByZWZlcmVuY2UgdG8g
c29tZSBjb3JlIG1ldGhvZHMKKyAgICBjb3JlX3B1c2ggPSBBcnJheS5wcm90b3R5cGUucHVzaCwK
KyAgICBjb3JlX3NsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLAorICAgIGNvcmVfaW5kZXhP
ZiA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mLAorICAgIGNvcmVfdG9TdHJpbmcgPSBPYmplY3Qu
cHJvdG90eXBlLnRvU3RyaW5nLAorICAgIGNvcmVfaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5o
YXNPd25Qcm9wZXJ0eSwKKyAgICBjb3JlX3RyaW0gPSBTdHJpbmcucHJvdG90eXBlLnRyaW0sCisK
KyAgICAvLyBEZWZpbmUgYSBsb2NhbCBjb3B5IG9mIGpRdWVyeQorICAgIGpRdWVyeSA9IGZ1bmN0
aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHsKKyAgICAgICAgLy8gVGhlIGpRdWVyeSBvYmplY3Qg
aXMgYWN0dWFsbHkganVzdCB0aGUgaW5pdCBjb25zdHJ1Y3RvciAnZW5oYW5jZWQnCisgICAgICAg
IHJldHVybiBuZXcgalF1ZXJ5LmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0LCByb290alF1ZXJ5
ICk7CisgICAgfSwKKworICAgIC8vIFVzZWQgZm9yIG1hdGNoaW5nIG51bWJlcnMKKyAgICBjb3Jl
X3BudW0gPSAvW1wtK10/KD86XGQqXC58KVxkKyg/OltlRV1bXC0rXT9cZCt8KS8uc291cmNlLAor
CisgICAgLy8gVXNlZCBmb3IgZGV0ZWN0aW5nIGFuZCB0cmltbWluZyB3aGl0ZXNwYWNlCisgICAg
Y29yZV9ybm90d2hpdGUgPSAvXFMvLAorICAgIGNvcmVfcnNwYWNlID0gL1xzKy8sCisKKyAgICAv
LyBNYWtlIHN1cmUgd2UgdHJpbSBCT00gYW5kIE5CU1AgKGhlcmUncyBsb29raW5nIGF0IHlvdSwg
U2FmYXJpIDUuMCBhbmQgSUUpCisgICAgcnRyaW0gPSAvXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZF
RkZceEEwXSskL2csCisKKyAgICAvLyBBIHNpbXBsZSB3YXkgdG8gY2hlY2sgZm9yIEhUTUwgc3Ry
aW5ncworICAgIC8vIFByaW9yaXRpemUgI2lkIG92ZXIgPHRhZz4gdG8gYXZvaWQgWFNTIHZpYSBs
b2NhdGlvbi5oYXNoICgjOTUyMSkKKyAgICBycXVpY2tFeHByID0gL14oPzpbXiM8XSooPFtcd1xX
XSs+KVtePl0qJHwjKFtcd1wtXSopJCkvLAorCisgICAgLy8gTWF0Y2ggYSBzdGFuZGFsb25lIHRh
ZworICAgIHJzaW5nbGVUYWcgPSAvXjwoXHcrKVxzKlwvPz4oPzo8XC9cMT58KSQvLAorCisgICAg
Ly8gSlNPTiBSZWdFeHAKKyAgICBydmFsaWRjaGFycyA9IC9eW1xdLDp7fVxzXSokLywKKyAgICBy
dmFsaWRicmFjZXMgPSAvKD86Xnw6fCwpKD86XHMqXFspKy9nLAorICAgIHJ2YWxpZGVzY2FwZSA9
IC9cXCg/OlsiXFxcL2JmbnJ0XXx1W1xkYS1mQS1GXXs0fSkvZywKKyAgICBydmFsaWR0b2tlbnMg
PSAvIlteIlxcXHJcbl0qInx0cnVlfGZhbHNlfG51bGx8LT8oPzpcZFxkKlwufClcZCsoPzpbZUVd
W1wtK10/XGQrfCkvZywKKworICAgIC8vIE1hdGNoZXMgZGFzaGVkIHN0cmluZyBmb3IgY2FtZWxp
emluZworICAgIHJtc1ByZWZpeCA9IC9eLW1zLS8sCisgICAgcmRhc2hBbHBoYSA9IC8tKFtcZGEt
el0pL2dpLAorCisgICAgLy8gVXNlZCBieSBqUXVlcnkuY2FtZWxDYXNlIGFzIGNhbGxiYWNrIHRv
IHJlcGxhY2UoKQorICAgIGZjYW1lbENhc2UgPSBmdW5jdGlvbiggYWxsLCBsZXR0ZXIgKSB7Cisg
ICAgICAgIHJldHVybiAoIGxldHRlciArICIiICkudG9VcHBlckNhc2UoKTsKKyAgICB9LAorCisg
ICAgLy8gVGhlIHJlYWR5IGV2ZW50IGhhbmRsZXIgYW5kIHNlbGYgY2xlYW51cCBtZXRob2QKKyAg
ICBET01Db250ZW50TG9hZGVkID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICggZG9jdW1lbnQu
YWRkRXZlbnRMaXN0ZW5lciApIHsKKyAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlz
dGVuZXIoICJET01Db250ZW50TG9hZGVkIiwgRE9NQ29udGVudExvYWRlZCwgZmFsc2UgKTsKKyAg
ICAgICAgICAgIGpRdWVyeS5yZWFkeSgpOworICAgICAgICB9IGVsc2UgaWYgKCBkb2N1bWVudC5y
ZWFkeVN0YXRlID09PSAiY29tcGxldGUiICkgeworICAgICAgICAgICAgLy8gd2UncmUgaGVyZSBi
ZWNhdXNlIHJlYWR5U3RhdGUgPT09ICJjb21wbGV0ZSIgaW4gb2xkSUUKKyAgICAgICAgICAgIC8v
IHdoaWNoIGlzIGdvb2QgZW5vdWdoIGZvciB1cyB0byBjYWxsIHRoZSBkb20gcmVhZHkhCisgICAg
ICAgICAgICBkb2N1bWVudC5kZXRhY2hFdmVudCggIm9ucmVhZHlzdGF0ZWNoYW5nZSIsIERPTUNv
bnRlbnRMb2FkZWQgKTsKKyAgICAgICAgICAgIGpRdWVyeS5yZWFkeSgpOworICAgICAgICB9Cisg
ICAgfSwKKworICAgIC8vIFtbQ2xhc3NdXSAtPiB0eXBlIHBhaXJzCisgICAgY2xhc3MydHlwZSA9
IHt9OworCitqUXVlcnkuZm4gPSBqUXVlcnkucHJvdG90eXBlID0geworICAgIGNvbnN0cnVjdG9y
OiBqUXVlcnksCisgICAgaW5pdDogZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByb290alF1
ZXJ5ICkgeworICAgICAgICB2YXIgbWF0Y2gsIGVsZW0sIHJldCwgZG9jOworCisgICAgICAgIC8v
IEhhbmRsZSAkKCIiKSwgJChudWxsKSwgJCh1bmRlZmluZWQpLCAkKGZhbHNlKQorICAgICAgICBp
ZiAoICFzZWxlY3RvciApIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisK
KyAgICAgICAgLy8gSGFuZGxlICQoRE9NRWxlbWVudCkKKyAgICAgICAgaWYgKCBzZWxlY3Rvci5u
b2RlVHlwZSApIHsKKyAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IHRoaXNbMF0gPSBzZWxlY3Rv
cjsKKyAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gMTsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
OworICAgICAgICB9CisKKyAgICAgICAgLy8gSGFuZGxlIEhUTUwgc3RyaW5ncworICAgICAgICBp
ZiAoIHR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgKSB7CisgICAgICAgICAgICBpZiAoIHNl
bGVjdG9yLmNoYXJBdCgwKSA9PT0gIjwiICYmIHNlbGVjdG9yLmNoYXJBdCggc2VsZWN0b3IubGVu
Z3RoIC0gMSApID09PSAiPiIgJiYgc2VsZWN0b3IubGVuZ3RoID49IDMgKSB7CisgICAgICAgICAg
ICAgICAgLy8gQXNzdW1lIHRoYXQgc3RyaW5ncyB0aGF0IHN0YXJ0IGFuZCBlbmQgd2l0aCA8PiBh
cmUgSFRNTCBhbmQgc2tpcCB0aGUgcmVnZXggY2hlY2sKKyAgICAgICAgICAgICAgICBtYXRjaCA9
IFsgbnVsbCwgc2VsZWN0b3IsIG51bGwgXTsKKworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gTWF0Y2ggaHRtbCBvciBtYWtlIHN1cmUgbm8gY29udGV4
dCBpcyBzcGVjaWZpZWQgZm9yICNpZAorICAgICAgICAgICAgaWYgKCBtYXRjaCAmJiAobWF0Y2hb
MV0gfHwgIWNvbnRleHQpICkgeworCisgICAgICAgICAgICAgICAgLy8gSEFORExFOiAkKGh0bWwp
IC0+ICQoYXJyYXkpCisgICAgICAgICAgICAgICAgaWYgKCBtYXRjaFsxXSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnkgPyBjb250ZXh0
WzBdIDogY29udGV4dDsKKyAgICAgICAgICAgICAgICAgICAgZG9jID0gKCBjb250ZXh0ICYmIGNv
bnRleHQubm9kZVR5cGUgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IGRvY3Vt
ZW50ICk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gc2NyaXB0cyBpcyB0cnVlIGZvciBiYWNr
LWNvbXBhdAorICAgICAgICAgICAgICAgICAgICBzZWxlY3RvciA9IGpRdWVyeS5wYXJzZUhUTUwo
IG1hdGNoWzFdLCBkb2MsIHRydWUgKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCByc2luZ2xl
VGFnLnRlc3QoIG1hdGNoWzFdICkgJiYgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvbnRleHQgKSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXR0ci5jYWxsKCBzZWxlY3RvciwgY29u
dGV4dCwgdHJ1ZSApOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGpRdWVyeS5tZXJnZSggdGhpcywgc2VsZWN0b3IgKTsKKworICAgICAgICAgICAg
ICAgIC8vIEhBTkRMRTogJCgjaWQpCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCBtYXRjaFsyXSApOwor
CisgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHBhcmVudE5vZGUgdG8gY2F0Y2ggd2hlbiBC
bGFja2JlcnJ5IDQuNiByZXR1cm5zCisgICAgICAgICAgICAgICAgICAgIC8vIG5vZGVzIHRoYXQg
YXJlIG5vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQgIzY5NjMKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCBlbGVtICYmIGVsZW0ucGFyZW50Tm9kZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBJRSBhbmQgT3BlcmEgcmV0dXJuIGl0ZW1zCisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBieSBuYW1lIGluc3RlYWQgb2YgSUQKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggZWxlbS5pZCAhPT0gbWF0Y2hbMl0gKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJvb3RqUXVlcnkuZmluZCggc2VsZWN0b3IgKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3
aXNlLCB3ZSBpbmplY3QgdGhlIGVsZW1lbnQgZGlyZWN0bHkgaW50byB0aGUgalF1ZXJ5IG9iamVj
dAorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggPSAxOworICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpc1swXSA9IGVsZW07CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQgPSBkb2N1bWVudDsKKyAgICAgICAgICAgICAg
ICAgICAgdGhpcy5zZWxlY3RvciA9IHNlbGVjdG9yOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGhpczsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEhBTkRMRTogJChl
eHByLCAkKC4uLikpCisgICAgICAgICAgICB9IGVsc2UgaWYgKCAhY29udGV4dCB8fCBjb250ZXh0
LmpxdWVyeSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKCBjb250ZXh0IHx8IHJvb3RqUXVl
cnkgKS5maW5kKCBzZWxlY3RvciApOworCisgICAgICAgICAgICAvLyBIQU5ETEU6ICQoZXhwciwg
Y29udGV4dCkKKyAgICAgICAgICAgIC8vICh3aGljaCBpcyBqdXN0IGVxdWl2YWxlbnQgdG86ICQo
Y29udGV4dCkuZmluZChleHByKQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5jb25zdHJ1Y3RvciggY29udGV4dCApLmZpbmQoIHNlbGVjdG9yICk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgLy8gSEFORExFOiAkKGZ1bmN0aW9uKQorICAgICAgICAv
LyBTaG9ydGN1dCBmb3IgZG9jdW1lbnQgcmVhZHkKKyAgICAgICAgfSBlbHNlIGlmICggalF1ZXJ5
LmlzRnVuY3Rpb24oIHNlbGVjdG9yICkgKSB7CisgICAgICAgICAgICByZXR1cm4gcm9vdGpRdWVy
eS5yZWFkeSggc2VsZWN0b3IgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggc2VsZWN0b3Iu
c2VsZWN0b3IgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIHRoaXMuc2VsZWN0b3IgPSBz
ZWxlY3Rvci5zZWxlY3RvcjsKKyAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IHNlbGVjdG9yLmNv
bnRleHQ7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4galF1ZXJ5Lm1ha2VBcnJheSggc2Vs
ZWN0b3IsIHRoaXMgKTsKKyAgICB9LAorCisgICAgLy8gU3RhcnQgd2l0aCBhbiBlbXB0eSBzZWxl
Y3RvcgorICAgIHNlbGVjdG9yOiAiIiwKKworICAgIC8vIFRoZSBjdXJyZW50IHZlcnNpb24gb2Yg
alF1ZXJ5IGJlaW5nIHVzZWQKKyAgICBqcXVlcnk6ICIxLjguMyIsCisKKyAgICAvLyBUaGUgZGVm
YXVsdCBsZW5ndGggb2YgYSBqUXVlcnkgb2JqZWN0IGlzIDAKKyAgICBsZW5ndGg6IDAsCisKKyAg
ICAvLyBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGNvbnRhaW5lZCBpbiB0aGUgbWF0Y2hlZCBlbGVt
ZW50IHNldAorICAgIHNpemU6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5sZW5n
dGg7CisgICAgfSwKKworICAgIHRvQXJyYXk6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4g
Y29yZV9zbGljZS5jYWxsKCB0aGlzICk7CisgICAgfSwKKworICAgIC8vIEdldCB0aGUgTnRoIGVs
ZW1lbnQgaW4gdGhlIG1hdGNoZWQgZWxlbWVudCBzZXQgT1IKKyAgICAvLyBHZXQgdGhlIHdob2xl
IG1hdGNoZWQgZWxlbWVudCBzZXQgYXMgYSBjbGVhbiBhcnJheQorICAgIGdldDogZnVuY3Rpb24o
IG51bSApIHsKKyAgICAgICAgcmV0dXJuIG51bSA9PSBudWxsID8KKworICAgICAgICAgICAgLy8g
UmV0dXJuIGEgJ2NsZWFuJyBhcnJheQorICAgICAgICAgICAgdGhpcy50b0FycmF5KCkgOgorCisg
ICAgICAgICAgICAvLyBSZXR1cm4ganVzdCB0aGUgb2JqZWN0CisgICAgICAgICAgICAoIG51bSA8
IDAgPyB0aGlzWyB0aGlzLmxlbmd0aCArIG51bSBdIDogdGhpc1sgbnVtIF0gKTsKKyAgICB9LAor
CisgICAgLy8gVGFrZSBhbiBhcnJheSBvZiBlbGVtZW50cyBhbmQgcHVzaCBpdCBvbnRvIHRoZSBz
dGFjaworICAgIC8vIChyZXR1cm5pbmcgdGhlIG5ldyBtYXRjaGVkIGVsZW1lbnQgc2V0KQorICAg
IHB1c2hTdGFjazogZnVuY3Rpb24oIGVsZW1zLCBuYW1lLCBzZWxlY3RvciApIHsKKworICAgICAg
ICAvLyBCdWlsZCBhIG5ldyBqUXVlcnkgbWF0Y2hlZCBlbGVtZW50IHNldAorICAgICAgICB2YXIg
cmV0ID0galF1ZXJ5Lm1lcmdlKCB0aGlzLmNvbnN0cnVjdG9yKCksIGVsZW1zICk7CisKKyAgICAg
ICAgLy8gQWRkIHRoZSBvbGQgb2JqZWN0IG9udG8gdGhlIHN0YWNrIChhcyBhIHJlZmVyZW5jZSkK
KyAgICAgICAgcmV0LnByZXZPYmplY3QgPSB0aGlzOworCisgICAgICAgIHJldC5jb250ZXh0ID0g
dGhpcy5jb250ZXh0OworCisgICAgICAgIGlmICggbmFtZSA9PT0gImZpbmQiICkgeworICAgICAg
ICAgICAgcmV0LnNlbGVjdG9yID0gdGhpcy5zZWxlY3RvciArICggdGhpcy5zZWxlY3RvciA/ICIg
IiA6ICIiICkgKyBzZWxlY3RvcjsKKyAgICAgICAgfSBlbHNlIGlmICggbmFtZSApIHsKKyAgICAg
ICAgICAgIHJldC5zZWxlY3RvciA9IHRoaXMuc2VsZWN0b3IgKyAiLiIgKyBuYW1lICsgIigiICsg
c2VsZWN0b3IgKyAiKSI7CisgICAgICAgIH0KKworICAgICAgICAvLyBSZXR1cm4gdGhlIG5ld2x5
LWZvcm1lZCBlbGVtZW50IHNldAorICAgICAgICByZXR1cm4gcmV0OworICAgIH0sCisKKyAgICAv
LyBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgc2V0
LgorICAgIC8vIChZb3UgY2FuIHNlZWQgdGhlIGFyZ3VtZW50cyB3aXRoIGFuIGFycmF5IG9mIGFy
Z3MsIGJ1dCB0aGlzIGlzCisgICAgLy8gb25seSB1c2VkIGludGVybmFsbHkuKQorICAgIGVhY2g6
IGZ1bmN0aW9uKCBjYWxsYmFjaywgYXJncyApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5lYWNo
KCB0aGlzLCBjYWxsYmFjaywgYXJncyApOworICAgIH0sCisKKyAgICByZWFkeTogZnVuY3Rpb24o
IGZuICkgeworICAgICAgICAvLyBBZGQgdGhlIGNhbGxiYWNrCisgICAgICAgIGpRdWVyeS5yZWFk
eS5wcm9taXNlKCkuZG9uZSggZm4gKTsKKworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAor
CisgICAgZXE6IGZ1bmN0aW9uKCBpICkgeworICAgICAgICBpID0gK2k7CisgICAgICAgIHJldHVy
biBpID09PSAtMSA/CisgICAgICAgICAgICB0aGlzLnNsaWNlKCBpICkgOgorICAgICAgICAgICAg
dGhpcy5zbGljZSggaSwgaSArIDEgKTsKKyAgICB9LAorCisgICAgZmlyc3Q6IGZ1bmN0aW9uKCkg
eworICAgICAgICByZXR1cm4gdGhpcy5lcSggMCApOworICAgIH0sCisKKyAgICBsYXN0OiBmdW5j
dGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZXEoIC0xICk7CisgICAgfSwKKworICAgIHNs
aWNlOiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBjb3JlX3Ns
aWNlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSwKKyAgICAgICAgICAgICJzbGljZSIsIGNvcmVf
c2xpY2UuY2FsbChhcmd1bWVudHMpLmpvaW4oIiwiKSApOworICAgIH0sCisKKyAgICBtYXA6IGZ1
bmN0aW9uKCBjYWxsYmFjayApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVl
cnkubWFwKHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBpICkgeworICAgICAgICAgICAgcmV0dXJuIGNh
bGxiYWNrLmNhbGwoIGVsZW0sIGksIGVsZW0gKTsKKyAgICAgICAgfSkpOworICAgIH0sCisKKyAg
ICBlbmQ6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5wcmV2T2JqZWN0IHx8IHRo
aXMuY29uc3RydWN0b3IobnVsbCk7CisgICAgfSwKKworICAgIC8vIEZvciBpbnRlcm5hbCB1c2Ug
b25seS4KKyAgICAvLyBCZWhhdmVzIGxpa2UgYW4gQXJyYXkncyBtZXRob2QsIG5vdCBsaWtlIGEg
alF1ZXJ5IG1ldGhvZC4KKyAgICBwdXNoOiBjb3JlX3B1c2gsCisgICAgc29ydDogW10uc29ydCwK
KyAgICBzcGxpY2U6IFtdLnNwbGljZQorfTsKKworLy8gR2l2ZSB0aGUgaW5pdCBmdW5jdGlvbiB0
aGUgalF1ZXJ5IHByb3RvdHlwZSBmb3IgbGF0ZXIgaW5zdGFudGlhdGlvbgoralF1ZXJ5LmZuLmlu
aXQucHJvdG90eXBlID0galF1ZXJ5LmZuOworCitqUXVlcnkuZXh0ZW5kID0galF1ZXJ5LmZuLmV4
dGVuZCA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBvcHRpb25zLCBuYW1lLCBzcmMsIGNvcHksIGNv
cHlJc0FycmF5LCBjbG9uZSwKKyAgICAgICAgdGFyZ2V0ID0gYXJndW1lbnRzWzBdIHx8IHt9LAor
ICAgICAgICBpID0gMSwKKyAgICAgICAgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCwKKyAgICAg
ICAgZGVlcCA9IGZhbHNlOworCisgICAgLy8gSGFuZGxlIGEgZGVlcCBjb3B5IHNpdHVhdGlvbgor
ICAgIGlmICggdHlwZW9mIHRhcmdldCA9PT0gImJvb2xlYW4iICkgeworICAgICAgICBkZWVwID0g
dGFyZ2V0OworICAgICAgICB0YXJnZXQgPSBhcmd1bWVudHNbMV0gfHwge307CisgICAgICAgIC8v
IHNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXQKKyAgICAgICAgaSA9IDI7CisgICAgfQor
CisgICAgLy8gSGFuZGxlIGNhc2Ugd2hlbiB0YXJnZXQgaXMgYSBzdHJpbmcgb3Igc29tZXRoaW5n
IChwb3NzaWJsZSBpbiBkZWVwIGNvcHkpCisgICAgaWYgKCB0eXBlb2YgdGFyZ2V0ICE9PSAib2Jq
ZWN0IiAmJiAhalF1ZXJ5LmlzRnVuY3Rpb24odGFyZ2V0KSApIHsKKyAgICAgICAgdGFyZ2V0ID0g
e307CisgICAgfQorCisgICAgLy8gZXh0ZW5kIGpRdWVyeSBpdHNlbGYgaWYgb25seSBvbmUgYXJn
dW1lbnQgaXMgcGFzc2VkCisgICAgaWYgKCBsZW5ndGggPT09IGkgKSB7CisgICAgICAgIHRhcmdl
dCA9IHRoaXM7CisgICAgICAgIC0taTsKKyAgICB9CisKKyAgICBmb3IgKCA7IGkgPCBsZW5ndGg7
IGkrKyApIHsKKyAgICAgICAgLy8gT25seSBkZWFsIHdpdGggbm9uLW51bGwvdW5kZWZpbmVkIHZh
bHVlcworICAgICAgICBpZiAoIChvcHRpb25zID0gYXJndW1lbnRzWyBpIF0pICE9IG51bGwgKSB7
CisgICAgICAgICAgICAvLyBFeHRlbmQgdGhlIGJhc2Ugb2JqZWN0CisgICAgICAgICAgICBmb3Ig
KCBuYW1lIGluIG9wdGlvbnMgKSB7CisgICAgICAgICAgICAgICAgc3JjID0gdGFyZ2V0WyBuYW1l
IF07CisgICAgICAgICAgICAgICAgY29weSA9IG9wdGlvbnNbIG5hbWUgXTsKKworICAgICAgICAg
ICAgICAgIC8vIFByZXZlbnQgbmV2ZXItZW5kaW5nIGxvb3AKKyAgICAgICAgICAgICAgICBpZiAo
IHRhcmdldCA9PT0gY29weSApIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gUmVjdXJzZSBpZiB3ZSdyZSBtZXJn
aW5nIHBsYWluIG9iamVjdHMgb3IgYXJyYXlzCisgICAgICAgICAgICAgICAgaWYgKCBkZWVwICYm
IGNvcHkgJiYgKCBqUXVlcnkuaXNQbGFpbk9iamVjdChjb3B5KSB8fCAoY29weUlzQXJyYXkgPSBq
UXVlcnkuaXNBcnJheShjb3B5KSkgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBjb3B5
SXNBcnJheSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlJc0FycmF5ID0gZmFsc2U7
CisgICAgICAgICAgICAgICAgICAgICAgICBjbG9uZSA9IHNyYyAmJiBqUXVlcnkuaXNBcnJheShz
cmMpID8gc3JjIDogW107CisKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNsb25lID0gc3JjICYmIGpRdWVyeS5pc1BsYWluT2JqZWN0KHNyYykg
PyBzcmMgOiB7fTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
IC8vIE5ldmVyIG1vdmUgb3JpZ2luYWwgb2JqZWN0cywgY2xvbmUgdGhlbQorICAgICAgICAgICAg
ICAgICAgICB0YXJnZXRbIG5hbWUgXSA9IGpRdWVyeS5leHRlbmQoIGRlZXAsIGNsb25lLCBjb3B5
ICk7CisKKyAgICAgICAgICAgICAgICAvLyBEb24ndCBicmluZyBpbiB1bmRlZmluZWQgdmFsdWVz
CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggY29weSAhPT0gdW5kZWZpbmVkICkgeworICAg
ICAgICAgICAgICAgICAgICB0YXJnZXRbIG5hbWUgXSA9IGNvcHk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gUmV0dXJuIHRoZSBt
b2RpZmllZCBvYmplY3QKKyAgICByZXR1cm4gdGFyZ2V0OworfTsKKworalF1ZXJ5LmV4dGVuZCh7
CisgICAgbm9Db25mbGljdDogZnVuY3Rpb24oIGRlZXAgKSB7CisgICAgICAgIGlmICggd2luZG93
LiQgPT09IGpRdWVyeSApIHsKKyAgICAgICAgICAgIHdpbmRvdy4kID0gXyQ7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoIGRlZXAgJiYgd2luZG93LmpRdWVyeSA9PT0galF1ZXJ5ICkgeworICAg
ICAgICAgICAgd2luZG93LmpRdWVyeSA9IF9qUXVlcnk7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4galF1ZXJ5OworICAgIH0sCisKKyAgICAvLyBJcyB0aGUgRE9NIHJlYWR5IHRvIGJlIHVz
ZWQ/IFNldCB0byB0cnVlIG9uY2UgaXQgb2NjdXJzLgorICAgIGlzUmVhZHk6IGZhbHNlLAorCisg
ICAgLy8gQSBjb3VudGVyIHRvIHRyYWNrIGhvdyBtYW55IGl0ZW1zIHRvIHdhaXQgZm9yIGJlZm9y
ZQorICAgIC8vIHRoZSByZWFkeSBldmVudCBmaXJlcy4gU2VlICM2NzgxCisgICAgcmVhZHlXYWl0
OiAxLAorCisgICAgLy8gSG9sZCAob3IgcmVsZWFzZSkgdGhlIHJlYWR5IGV2ZW50CisgICAgaG9s
ZFJlYWR5OiBmdW5jdGlvbiggaG9sZCApIHsKKyAgICAgICAgaWYgKCBob2xkICkgeworICAgICAg
ICAgICAgalF1ZXJ5LnJlYWR5V2FpdCsrOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
alF1ZXJ5LnJlYWR5KCB0cnVlICk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgLy8gSGFuZGxl
IHdoZW4gdGhlIERPTSBpcyByZWFkeQorICAgIHJlYWR5OiBmdW5jdGlvbiggd2FpdCApIHsKKwor
ICAgICAgICAvLyBBYm9ydCBpZiB0aGVyZSBhcmUgcGVuZGluZyBob2xkcyBvciB3ZSdyZSBhbHJl
YWR5IHJlYWR5CisgICAgICAgIGlmICggd2FpdCA9PT0gdHJ1ZSA/IC0talF1ZXJ5LnJlYWR5V2Fp
dCA6IGpRdWVyeS5pc1JlYWR5ICkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgLy8gTWFrZSBzdXJlIGJvZHkgZXhpc3RzLCBhdCBsZWFzdCwgaW4gY2FzZSBJRSBn
ZXRzIGEgbGl0dGxlIG92ZXJ6ZWFsb3VzICh0aWNrZXQgIzU0NDMpLgorICAgICAgICBpZiAoICFk
b2N1bWVudC5ib2R5ICkgeworICAgICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoIGpRdWVyeS5y
ZWFkeSwgMSApOworICAgICAgICB9CisKKyAgICAgICAgLy8gUmVtZW1iZXIgdGhhdCB0aGUgRE9N
IGlzIHJlYWR5CisgICAgICAgIGpRdWVyeS5pc1JlYWR5ID0gdHJ1ZTsKKworICAgICAgICAvLyBJ
ZiBhIG5vcm1hbCBET00gUmVhZHkgZXZlbnQgZmlyZWQsIGRlY3JlbWVudCwgYW5kIHdhaXQgaWYg
bmVlZCBiZQorICAgICAgICBpZiAoIHdhaXQgIT09IHRydWUgJiYgLS1qUXVlcnkucmVhZHlXYWl0
ID4gMCApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElm
IHRoZXJlIGFyZSBmdW5jdGlvbnMgYm91bmQsIHRvIGV4ZWN1dGUKKyAgICAgICAgcmVhZHlMaXN0
LnJlc29sdmVXaXRoKCBkb2N1bWVudCwgWyBqUXVlcnkgXSApOworCisgICAgICAgIC8vIFRyaWdn
ZXIgYW55IGJvdW5kIHJlYWR5IGV2ZW50cworICAgICAgICBpZiAoIGpRdWVyeS5mbi50cmlnZ2Vy
ICkgeworICAgICAgICAgICAgalF1ZXJ5KCBkb2N1bWVudCApLnRyaWdnZXIoInJlYWR5Iikub2Zm
KCJyZWFkeSIpOworICAgICAgICB9CisgICAgfSwKKworICAgIC8vIFNlZSB0ZXN0L3VuaXQvY29y
ZS5qcyBmb3IgZGV0YWlscyBjb25jZXJuaW5nIGlzRnVuY3Rpb24uCisgICAgLy8gU2luY2UgdmVy
c2lvbiAxLjMsIERPTSBtZXRob2RzIGFuZCBmdW5jdGlvbnMgbGlrZSBhbGVydAorICAgIC8vIGFy
ZW4ndCBzdXBwb3J0ZWQuIFRoZXkgcmV0dXJuIGZhbHNlIG9uIElFICgjMjk2OCkuCisgICAgaXNG
dW5jdGlvbjogZnVuY3Rpb24oIG9iaiApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS50eXBlKG9i
aikgPT09ICJmdW5jdGlvbiI7CisgICAgfSwKKworICAgIGlzQXJyYXk6IEFycmF5LmlzQXJyYXkg
fHwgZnVuY3Rpb24oIG9iaiApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS50eXBlKG9iaikgPT09
ICJhcnJheSI7CisgICAgfSwKKworICAgIGlzV2luZG93OiBmdW5jdGlvbiggb2JqICkgeworICAg
ICAgICByZXR1cm4gb2JqICE9IG51bGwgJiYgb2JqID09IG9iai53aW5kb3c7CisgICAgfSwKKwor
ICAgIGlzTnVtZXJpYzogZnVuY3Rpb24oIG9iaiApIHsKKyAgICAgICAgcmV0dXJuICFpc05hTigg
cGFyc2VGbG9hdChvYmopICkgJiYgaXNGaW5pdGUoIG9iaiApOworICAgIH0sCisKKyAgICB0eXBl
OiBmdW5jdGlvbiggb2JqICkgeworICAgICAgICByZXR1cm4gb2JqID09IG51bGwgPworICAgICAg
ICAgICAgU3RyaW5nKCBvYmogKSA6CisgICAgICAgICAgICBjbGFzczJ0eXBlWyBjb3JlX3RvU3Ry
aW5nLmNhbGwob2JqKSBdIHx8ICJvYmplY3QiOworICAgIH0sCisKKyAgICBpc1BsYWluT2JqZWN0
OiBmdW5jdGlvbiggb2JqICkgeworICAgICAgICAvLyBNdXN0IGJlIGFuIE9iamVjdC4KKyAgICAg
ICAgLy8gQmVjYXVzZSBvZiBJRSwgd2UgYWxzbyBoYXZlIHRvIGNoZWNrIHRoZSBwcmVzZW5jZSBv
ZiB0aGUgY29uc3RydWN0b3IgcHJvcGVydHkuCisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IERP
TSBub2RlcyBhbmQgd2luZG93IG9iamVjdHMgZG9uJ3QgcGFzcyB0aHJvdWdoLCBhcyB3ZWxsCisg
ICAgICAgIGlmICggIW9iaiB8fCBqUXVlcnkudHlwZShvYmopICE9PSAib2JqZWN0IiB8fCBvYmou
bm9kZVR5cGUgfHwgalF1ZXJ5LmlzV2luZG93KCBvYmogKSApIHsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICAvLyBOb3Qg
b3duIGNvbnN0cnVjdG9yIHByb3BlcnR5IG11c3QgYmUgT2JqZWN0CisgICAgICAgICAgICBpZiAo
IG9iai5jb25zdHJ1Y3RvciAmJgorICAgICAgICAgICAgICAgICFjb3JlX2hhc093bi5jYWxsKG9i
aiwgImNvbnN0cnVjdG9yIikgJiYKKyAgICAgICAgICAgICAgICAhY29yZV9oYXNPd24uY2FsbChv
YmouY29uc3RydWN0b3IucHJvdG90eXBlLCAiaXNQcm90b3R5cGVPZiIpICkgeworICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoIGUg
KSB7CisgICAgICAgICAgICAvLyBJRTgsOSBXaWxsIHRocm93IGV4Y2VwdGlvbnMgb24gY2VydGFp
biBob3N0IG9iamVjdHMgIzk4OTcKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIE93biBwcm9wZXJ0aWVzIGFyZSBlbnVtZXJhdGVkIGZpcnN0bHksIHNv
IHRvIHNwZWVkIHVwLAorICAgICAgICAvLyBpZiBsYXN0IG9uZSBpcyBvd24sIHRoZW4gYWxsIHBy
b3BlcnRpZXMgYXJlIG93bi4KKworICAgICAgICB2YXIga2V5OworICAgICAgICBmb3IgKCBrZXkg
aW4gb2JqICkge30KKworICAgICAgICByZXR1cm4ga2V5ID09PSB1bmRlZmluZWQgfHwgY29yZV9o
YXNPd24uY2FsbCggb2JqLCBrZXkgKTsKKyAgICB9LAorCisgICAgaXNFbXB0eU9iamVjdDogZnVu
Y3Rpb24oIG9iaiApIHsKKyAgICAgICAgdmFyIG5hbWU7CisgICAgICAgIGZvciAoIG5hbWUgaW4g
b2JqICkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0sCisKKyAgICBlcnJvcjogZnVuY3Rpb24oIG1zZyApIHsKKyAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCBtc2cgKTsKKyAgICB9LAorCisgICAgLy8gZGF0YTogc3RyaW5n
IG9mIGh0bWwKKyAgICAvLyBjb250ZXh0IChvcHRpb25hbCk6IElmIHNwZWNpZmllZCwgdGhlIGZy
YWdtZW50IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGlzIGNvbnRleHQsIGRlZmF1bHRzIHRvIGRvY3Vt
ZW50CisgICAgLy8gc2NyaXB0cyAob3B0aW9uYWwpOiBJZiB0cnVlLCB3aWxsIGluY2x1ZGUgc2Ny
aXB0cyBwYXNzZWQgaW4gdGhlIGh0bWwgc3RyaW5nCisgICAgcGFyc2VIVE1MOiBmdW5jdGlvbigg
ZGF0YSwgY29udGV4dCwgc2NyaXB0cyApIHsKKyAgICAgICAgdmFyIHBhcnNlZDsKKyAgICAgICAg
aWYgKCAhZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gInN0cmluZyIgKSB7CisgICAgICAgICAgICBy
ZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIHR5cGVvZiBjb250ZXh0ID09PSAi
Ym9vbGVhbiIgKSB7CisgICAgICAgICAgICBzY3JpcHRzID0gY29udGV4dDsKKyAgICAgICAgICAg
IGNvbnRleHQgPSAwOworICAgICAgICB9CisgICAgICAgIGNvbnRleHQgPSBjb250ZXh0IHx8IGRv
Y3VtZW50OworCisgICAgICAgIC8vIFNpbmdsZSB0YWcKKyAgICAgICAgaWYgKCAocGFyc2VkID0g
cnNpbmdsZVRhZy5leGVjKCBkYXRhICkpICkgeworICAgICAgICAgICAgcmV0dXJuIFsgY29udGV4
dC5jcmVhdGVFbGVtZW50KCBwYXJzZWRbMV0gKSBdOworICAgICAgICB9CisKKyAgICAgICAgcGFy
c2VkID0galF1ZXJ5LmJ1aWxkRnJhZ21lbnQoIFsgZGF0YSBdLCBjb250ZXh0LCBzY3JpcHRzID8g
bnVsbCA6IFtdICk7CisgICAgICAgIHJldHVybiBqUXVlcnkubWVyZ2UoIFtdLAorICAgICAgICAg
ICAgKHBhcnNlZC5jYWNoZWFibGUgPyBqUXVlcnkuY2xvbmUoIHBhcnNlZC5mcmFnbWVudCApIDog
cGFyc2VkLmZyYWdtZW50KS5jaGlsZE5vZGVzICk7CisgICAgfSwKKworICAgIHBhcnNlSlNPTjog
ZnVuY3Rpb24oIGRhdGEgKSB7CisgICAgICAgIGlmICggIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09
ICJzdHJpbmciKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIE1ha2Ugc3VyZSBsZWFkaW5nL3RyYWlsaW5nIHdoaXRlc3BhY2UgaXMgcmVtb3ZlZCAo
SUUgY2FuJ3QgaGFuZGxlIGl0KQorICAgICAgICBkYXRhID0galF1ZXJ5LnRyaW0oIGRhdGEgKTsK
KworICAgICAgICAvLyBBdHRlbXB0IHRvIHBhcnNlIHVzaW5nIHRoZSBuYXRpdmUgSlNPTiBwYXJz
ZXIgZmlyc3QKKyAgICAgICAgaWYgKCB3aW5kb3cuSlNPTiAmJiB3aW5kb3cuSlNPTi5wYXJzZSAp
IHsKKyAgICAgICAgICAgIHJldHVybiB3aW5kb3cuSlNPTi5wYXJzZSggZGF0YSApOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBpbmNvbWluZyBkYXRhIGlzIGFjdHVhbCBK
U09OCisgICAgICAgIC8vIExvZ2ljIGJvcnJvd2VkIGZyb20gaHR0cDovL2pzb24ub3JnL2pzb24y
LmpzCisgICAgICAgIGlmICggcnZhbGlkY2hhcnMudGVzdCggZGF0YS5yZXBsYWNlKCBydmFsaWRl
c2NhcGUsICJAIiApCisgICAgICAgICAgICAucmVwbGFjZSggcnZhbGlkdG9rZW5zLCAiXSIgKQor
ICAgICAgICAgICAgLnJlcGxhY2UoIHJ2YWxpZGJyYWNlcywgIiIpKSApIHsKKworICAgICAgICAg
ICAgcmV0dXJuICggbmV3IEZ1bmN0aW9uKCAicmV0dXJuICIgKyBkYXRhICkgKSgpOworCisgICAg
ICAgIH0KKyAgICAgICAgalF1ZXJ5LmVycm9yKCAiSW52YWxpZCBKU09OOiAiICsgZGF0YSApOwor
ICAgIH0sCisKKyAgICAvLyBDcm9zcy1icm93c2VyIHhtbCBwYXJzaW5nCisgICAgcGFyc2VYTUw6
IGZ1bmN0aW9uKCBkYXRhICkgeworICAgICAgICB2YXIgeG1sLCB0bXA7CisgICAgICAgIGlmICgg
IWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09ICJzdHJpbmciICkgeworICAgICAgICAgICAgcmV0dXJu
IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmICggd2luZG93
LkRPTVBhcnNlciApIHsgLy8gU3RhbmRhcmQKKyAgICAgICAgICAgICAgICB0bXAgPSBuZXcgRE9N
UGFyc2VyKCk7CisgICAgICAgICAgICAgICAgeG1sID0gdG1wLnBhcnNlRnJvbVN0cmluZyggZGF0
YSAsICJ0ZXh0L3htbCIgKTsKKyAgICAgICAgICAgIH0gZWxzZSB7IC8vIElFCisgICAgICAgICAg
ICAgICAgeG1sID0gbmV3IEFjdGl2ZVhPYmplY3QoICJNaWNyb3NvZnQuWE1MRE9NIiApOworICAg
ICAgICAgICAgICAgIHhtbC5hc3luYyA9ICJmYWxzZSI7CisgICAgICAgICAgICAgICAgeG1sLmxv
YWRYTUwoIGRhdGEgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCggZSApIHsKKyAg
ICAgICAgICAgIHhtbCA9IHVuZGVmaW5lZDsKKyAgICAgICAgfQorICAgICAgICBpZiAoICF4bWwg
fHwgIXhtbC5kb2N1bWVudEVsZW1lbnQgfHwgeG1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCAicGFy
c2VyZXJyb3IiICkubGVuZ3RoICkgeworICAgICAgICAgICAgalF1ZXJ5LmVycm9yKCAiSW52YWxp
ZCBYTUw6ICIgKyBkYXRhICk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHhtbDsKKyAgICB9
LAorCisgICAgbm9vcDogZnVuY3Rpb24oKSB7fSwKKworICAgIC8vIEV2YWx1YXRlcyBhIHNjcmlw
dCBpbiBhIGdsb2JhbCBjb250ZXh0CisgICAgLy8gV29ya2Fyb3VuZHMgYmFzZWQgb24gZmluZGlu
Z3MgYnkgSmltIERyaXNjb2xsCisgICAgLy8gaHR0cDovL3dlYmxvZ3MuamF2YS5uZXQvYmxvZy9k
cmlzY29sbC9hcmNoaXZlLzIwMDkvMDkvMDgvZXZhbC1qYXZhc2NyaXB0LWdsb2JhbC1jb250ZXh0
CisgICAgZ2xvYmFsRXZhbDogZnVuY3Rpb24oIGRhdGEgKSB7CisgICAgICAgIGlmICggZGF0YSAm
JiBjb3JlX3Jub3R3aGl0ZS50ZXN0KCBkYXRhICkgKSB7CisgICAgICAgICAgICAvLyBXZSB1c2Ug
ZXhlY1NjcmlwdCBvbiBJbnRlcm5ldCBFeHBsb3JlcgorICAgICAgICAgICAgLy8gV2UgdXNlIGFu
IGFub255bW91cyBmdW5jdGlvbiBzbyB0aGF0IGNvbnRleHQgaXMgd2luZG93CisgICAgICAgICAg
ICAvLyByYXRoZXIgdGhhbiBqUXVlcnkgaW4gRmlyZWZveAorICAgICAgICAgICAgKCB3aW5kb3cu
ZXhlY1NjcmlwdCB8fCBmdW5jdGlvbiggZGF0YSApIHsKKyAgICAgICAgICAgICAgICB3aW5kb3db
ICJldmFsIiBdLmNhbGwoIHdpbmRvdywgZGF0YSApOworICAgICAgICAgICAgfSApKCBkYXRhICk7
CisgICAgICAgIH0KKyAgICB9LAorCisgICAgLy8gQ29udmVydCBkYXNoZWQgdG8gY2FtZWxDYXNl
OyB1c2VkIGJ5IHRoZSBjc3MgYW5kIGRhdGEgbW9kdWxlcworICAgIC8vIE1pY3Jvc29mdCBmb3Jn
b3QgdG8gaHVtcCB0aGVpciB2ZW5kb3IgcHJlZml4ICgjOTU3MikKKyAgICBjYW1lbENhc2U6IGZ1
bmN0aW9uKCBzdHJpbmcgKSB7CisgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSggcm1zUHJl
Zml4LCAibXMtIiApLnJlcGxhY2UoIHJkYXNoQWxwaGEsIGZjYW1lbENhc2UgKTsKKyAgICB9LAor
CisgICAgbm9kZU5hbWU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgeworICAgICAgICByZXR1cm4g
ZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUudG9M
b3dlckNhc2UoKTsKKyAgICB9LAorCisgICAgLy8gYXJncyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ug
b25seQorICAgIGVhY2g6IGZ1bmN0aW9uKCBvYmosIGNhbGxiYWNrLCBhcmdzICkgeworICAgICAg
ICB2YXIgbmFtZSwKKyAgICAgICAgICAgIGkgPSAwLAorICAgICAgICAgICAgbGVuZ3RoID0gb2Jq
Lmxlbmd0aCwKKyAgICAgICAgICAgIGlzT2JqID0gbGVuZ3RoID09PSB1bmRlZmluZWQgfHwgalF1
ZXJ5LmlzRnVuY3Rpb24oIG9iaiApOworCisgICAgICAgIGlmICggYXJncyApIHsKKyAgICAgICAg
ICAgIGlmICggaXNPYmogKSB7CisgICAgICAgICAgICAgICAgZm9yICggbmFtZSBpbiBvYmogKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2suYXBwbHkoIG9ialsgbmFtZSBdLCBh
cmdzICkgPT09IGZhbHNlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmICggY2FsbGJhY2suYXBwbHkoIG9ialsgaSsrIF0sIGFyZ3MgKSA9PT0gZmFsc2Ug
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAvLyBBIHNwZWNp
YWwsIGZhc3QsIGNhc2UgZm9yIHRoZSBtb3N0IGNvbW1vbiB1c2Ugb2YgZWFjaAorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgaWYgKCBpc09iaiApIHsKKyAgICAgICAgICAgICAgICBmb3Ig
KCBuYW1lIGluIG9iaiApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBjYWxsYmFjay5jYWxs
KCBvYmpbIG5hbWUgXSwgbmFtZSwgb2JqWyBuYW1lIF0gKSA9PT0gZmFsc2UgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZm9yICggOyBp
IDwgbGVuZ3RoOyApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBjYWxsYmFjay5jYWxsKCBv
YmpbIGkgXSwgaSwgb2JqWyBpKysgXSApID09PSBmYWxzZSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG9iajsKKyAgICB9LAor
CisgICAgLy8gVXNlIG5hdGl2ZSBTdHJpbmcudHJpbSBmdW5jdGlvbiB3aGVyZXZlciBwb3NzaWJs
ZQorICAgIHRyaW06IGNvcmVfdHJpbSAmJiAhY29yZV90cmltLmNhbGwoIlx1RkVGRlx4QTAiKSA/
CisgICAgICAgIGZ1bmN0aW9uKCB0ZXh0ICkgeworICAgICAgICAgICAgcmV0dXJuIHRleHQgPT0g
bnVsbCA/CisgICAgICAgICAgICAgICAgIiIgOgorICAgICAgICAgICAgICAgIGNvcmVfdHJpbS5j
YWxsKCB0ZXh0ICk7CisgICAgICAgIH0gOgorCisgICAgICAgIC8vIE90aGVyd2lzZSB1c2Ugb3Vy
IG93biB0cmltbWluZyBmdW5jdGlvbmFsaXR5CisgICAgICAgIGZ1bmN0aW9uKCB0ZXh0ICkgewor
ICAgICAgICAgICAgcmV0dXJuIHRleHQgPT0gbnVsbCA/CisgICAgICAgICAgICAgICAgIiIgOgor
ICAgICAgICAgICAgICAgICggdGV4dCArICIiICkucmVwbGFjZSggcnRyaW0sICIiICk7CisgICAg
ICAgIH0sCisKKyAgICAvLyByZXN1bHRzIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5CisgICAg
bWFrZUFycmF5OiBmdW5jdGlvbiggYXJyLCByZXN1bHRzICkgeworICAgICAgICB2YXIgdHlwZSwK
KyAgICAgICAgICAgIHJldCA9IHJlc3VsdHMgfHwgW107CisKKyAgICAgICAgaWYgKCBhcnIgIT0g
bnVsbCApIHsKKyAgICAgICAgICAgIC8vIFRoZSB3aW5kb3csIHN0cmluZ3MgKGFuZCBmdW5jdGlv
bnMpIGFsc28gaGF2ZSAnbGVuZ3RoJworICAgICAgICAgICAgLy8gVHdlYWtlZCBsb2dpYyBzbGln
aHRseSB0byBoYW5kbGUgQmxhY2tiZXJyeSA0LjcgUmVnRXhwIGlzc3VlcyAjNjkzMAorICAgICAg
ICAgICAgdHlwZSA9IGpRdWVyeS50eXBlKCBhcnIgKTsKKworICAgICAgICAgICAgaWYgKCBhcnIu
bGVuZ3RoID09IG51bGwgfHwgdHlwZSA9PT0gInN0cmluZyIgfHwgdHlwZSA9PT0gImZ1bmN0aW9u
IiB8fCB0eXBlID09PSAicmVnZXhwIiB8fCBqUXVlcnkuaXNXaW5kb3coIGFyciApICkgeworICAg
ICAgICAgICAgICAgIGNvcmVfcHVzaC5jYWxsKCByZXQsIGFyciApOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkubWVyZ2UoIHJldCwgYXJyICk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0OworICAgIH0sCisKKyAgICBp
bkFycmF5OiBmdW5jdGlvbiggZWxlbSwgYXJyLCBpICkgeworICAgICAgICB2YXIgbGVuOworCisg
ICAgICAgIGlmICggYXJyICkgeworICAgICAgICAgICAgaWYgKCBjb3JlX2luZGV4T2YgKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGNvcmVfaW5kZXhPZi5jYWxsKCBhcnIsIGVsZW0sIGkgKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbGVuID0gYXJyLmxlbmd0aDsKKyAgICAgICAg
ICAgIGkgPSBpID8gaSA8IDAgPyBNYXRoLm1heCggMCwgbGVuICsgaSApIDogaSA6IDA7CisKKyAg
ICAgICAgICAgIGZvciAoIDsgaSA8IGxlbjsgaSsrICkgeworICAgICAgICAgICAgICAgIC8vIFNr
aXAgYWNjZXNzaW5nIGluIHNwYXJzZSBhcnJheXMKKyAgICAgICAgICAgICAgICBpZiAoIGkgaW4g
YXJyICYmIGFyclsgaSBdID09PSBlbGVtICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
aTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gLTE7CisgICAgfSwKKworICAgIG1lcmdlOiBmdW5jdGlvbiggZmlyc3QsIHNlY29u
ZCApIHsKKyAgICAgICAgdmFyIGwgPSBzZWNvbmQubGVuZ3RoLAorICAgICAgICAgICAgaSA9IGZp
cnN0Lmxlbmd0aCwKKyAgICAgICAgICAgIGogPSAwOworCisgICAgICAgIGlmICggdHlwZW9mIGwg
PT09ICJudW1iZXIiICkgeworICAgICAgICAgICAgZm9yICggOyBqIDwgbDsgaisrICkgeworICAg
ICAgICAgICAgICAgIGZpcnN0WyBpKysgXSA9IHNlY29uZFsgaiBdOworICAgICAgICAgICAgfQor
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB3aGlsZSAoIHNlY29uZFtqXSAhPT0gdW5k
ZWZpbmVkICkgeworICAgICAgICAgICAgICAgIGZpcnN0WyBpKysgXSA9IHNlY29uZFsgaisrIF07
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmaXJzdC5sZW5ndGggPSBpOwor
CisgICAgICAgIHJldHVybiBmaXJzdDsKKyAgICB9LAorCisgICAgZ3JlcDogZnVuY3Rpb24oIGVs
ZW1zLCBjYWxsYmFjaywgaW52ICkgeworICAgICAgICB2YXIgcmV0VmFsLAorICAgICAgICAgICAg
cmV0ID0gW10sCisgICAgICAgICAgICBpID0gMCwKKyAgICAgICAgICAgIGxlbmd0aCA9IGVsZW1z
Lmxlbmd0aDsKKyAgICAgICAgaW52ID0gISFpbnY7CisKKyAgICAgICAgLy8gR28gdGhyb3VnaCB0
aGUgYXJyYXksIG9ubHkgc2F2aW5nIHRoZSBpdGVtcworICAgICAgICAvLyB0aGF0IHBhc3MgdGhl
IHZhbGlkYXRvciBmdW5jdGlvbgorICAgICAgICBmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHsK
KyAgICAgICAgICAgIHJldFZhbCA9ICEhY2FsbGJhY2soIGVsZW1zWyBpIF0sIGkgKTsKKyAgICAg
ICAgICAgIGlmICggaW52ICE9PSByZXRWYWwgKSB7CisgICAgICAgICAgICAgICAgcmV0LnB1c2go
IGVsZW1zWyBpIF0gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biByZXQ7CisgICAgfSwKKworICAgIC8vIGFyZyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seQor
ICAgIG1hcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgYXJnICkgeworICAgICAgICB2YXIg
dmFsdWUsIGtleSwKKyAgICAgICAgICAgIHJldCA9IFtdLAorICAgICAgICAgICAgaSA9IDAsCisg
ICAgICAgICAgICBsZW5ndGggPSBlbGVtcy5sZW5ndGgsCisgICAgICAgICAgICAvLyBqcXVlcnkg
b2JqZWN0cyBhcmUgdHJlYXRlZCBhcyBhcnJheXMKKyAgICAgICAgICAgIGlzQXJyYXkgPSBlbGVt
cyBpbnN0YW5jZW9mIGpRdWVyeSB8fCBsZW5ndGggIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgbGVu
Z3RoID09PSAibnVtYmVyIiAmJiAoICggbGVuZ3RoID4gMCAmJiBlbGVtc1sgMCBdICYmIGVsZW1z
WyBsZW5ndGggLTEgXSApIHx8IGxlbmd0aCA9PT0gMCB8fCBqUXVlcnkuaXNBcnJheSggZWxlbXMg
KSApIDsKKworICAgICAgICAvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgdHJhbnNsYXRpbmcgZWFj
aCBvZiB0aGUgaXRlbXMgdG8gdGhlaXIKKyAgICAgICAgaWYgKCBpc0FycmF5ICkgeworICAgICAg
ICAgICAgZm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7CisgICAgICAgICAgICAgICAgdmFsdWUg
PSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7CisKKyAgICAgICAgICAgICAgICBpZiAo
IHZhbHVlICE9IG51bGwgKSB7CisgICAgICAgICAgICAgICAgICAgIHJldFsgcmV0Lmxlbmd0aCBd
ID0gdmFsdWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgIC8v
IEdvIHRocm91Z2ggZXZlcnkga2V5IG9uIHRoZSBvYmplY3QsCisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBmb3IgKCBrZXkgaW4gZWxlbXMgKSB7CisgICAgICAgICAgICAgICAgdmFsdWUg
PSBjYWxsYmFjayggZWxlbXNbIGtleSBdLCBrZXksIGFyZyApOworCisgICAgICAgICAgICAgICAg
aWYgKCB2YWx1ZSAhPSBudWxsICkgeworICAgICAgICAgICAgICAgICAgICByZXRbIHJldC5sZW5n
dGggXSA9IHZhbHVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXMKKyAgICAgICAgcmV0dXJu
IHJldC5jb25jYXQuYXBwbHkoIFtdLCByZXQgKTsKKyAgICB9LAorCisgICAgLy8gQSBnbG9iYWwg
R1VJRCBjb3VudGVyIGZvciBvYmplY3RzCisgICAgZ3VpZDogMSwKKworICAgIC8vIEJpbmQgYSBm
dW5jdGlvbiB0byBhIGNvbnRleHQsIG9wdGlvbmFsbHkgcGFydGlhbGx5IGFwcGx5aW5nIGFueQor
ICAgIC8vIGFyZ3VtZW50cy4KKyAgICBwcm94eTogZnVuY3Rpb24oIGZuLCBjb250ZXh0ICkgewor
ICAgICAgICB2YXIgdG1wLCBhcmdzLCBwcm94eTsKKworICAgICAgICBpZiAoIHR5cGVvZiBjb250
ZXh0ID09PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgIHRtcCA9IGZuWyBjb250ZXh0IF07Cisg
ICAgICAgICAgICBjb250ZXh0ID0gZm47CisgICAgICAgICAgICBmbiA9IHRtcDsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIFF1aWNrIGNoZWNrIHRvIGRldGVybWluZSBpZiB0YXJnZXQgaXMgY2Fs
bGFibGUsIGluIHRoZSBzcGVjCisgICAgICAgIC8vIHRoaXMgdGhyb3dzIGEgVHlwZUVycm9yLCBi
dXQgd2Ugd2lsbCBqdXN0IHJldHVybiB1bmRlZmluZWQuCisgICAgICAgIGlmICggIWpRdWVyeS5p
c0Z1bmN0aW9uKCBmbiApICkgeworICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIFNpbXVsYXRlZCBiaW5kCisgICAgICAgIGFyZ3MgPSBjb3JlX3Ns
aWNlLmNhbGwoIGFyZ3VtZW50cywgMiApOworICAgICAgICBwcm94eSA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KCBjb250ZXh0LCBhcmdzLmNvbmNhdCggY29yZV9z
bGljZS5jYWxsKCBhcmd1bWVudHMgKSApICk7CisgICAgICAgIH07CisKKyAgICAgICAgLy8gU2V0
IHRoZSBndWlkIG9mIHVuaXF1ZSBoYW5kbGVyIHRvIHRoZSBzYW1lIG9mIG9yaWdpbmFsIGhhbmRs
ZXIsIHNvIGl0IGNhbiBiZSByZW1vdmVkCisgICAgICAgIHByb3h5Lmd1aWQgPSBmbi5ndWlkID0g
Zm4uZ3VpZCB8fCBqUXVlcnkuZ3VpZCsrOworCisgICAgICAgIHJldHVybiBwcm94eTsKKyAgICB9
LAorCisgICAgLy8gTXVsdGlmdW5jdGlvbmFsIG1ldGhvZCB0byBnZXQgYW5kIHNldCB2YWx1ZXMg
b2YgYSBjb2xsZWN0aW9uCisgICAgLy8gVGhlIHZhbHVlL3MgY2FuIG9wdGlvbmFsbHkgYmUgZXhl
Y3V0ZWQgaWYgaXQncyBhIGZ1bmN0aW9uCisgICAgYWNjZXNzOiBmdW5jdGlvbiggZWxlbXMsIGZu
LCBrZXksIHZhbHVlLCBjaGFpbmFibGUsIGVtcHR5R2V0LCBwYXNzICkgeworICAgICAgICB2YXIg
ZXhlYywKKyAgICAgICAgICAgIGJ1bGsgPSBrZXkgPT0gbnVsbCwKKyAgICAgICAgICAgIGkgPSAw
LAorICAgICAgICAgICAgbGVuZ3RoID0gZWxlbXMubGVuZ3RoOworCisgICAgICAgIC8vIFNldHMg
bWFueSB2YWx1ZXMKKyAgICAgICAgaWYgKCBrZXkgJiYgdHlwZW9mIGtleSA9PT0gIm9iamVjdCIg
KSB7CisgICAgICAgICAgICBmb3IgKCBpIGluIGtleSApIHsKKyAgICAgICAgICAgICAgICBqUXVl
cnkuYWNjZXNzKCBlbGVtcywgZm4sIGksIGtleVtpXSwgMSwgZW1wdHlHZXQsIHZhbHVlICk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBjaGFpbmFibGUgPSAxOworCisgICAgICAgIC8vIFNl
dHMgb25lIHZhbHVlCisgICAgICAgIH0gZWxzZSBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7
CisgICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBmdW5jdGlvbiB2YWx1ZXMgZ2V0IGV4ZWN1dGVk
IGlmIGV4ZWMgaXMgdHJ1ZQorICAgICAgICAgICAgZXhlYyA9IHBhc3MgPT09IHVuZGVmaW5lZCAm
JiBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKTsKKworICAgICAgICAgICAgaWYgKCBidWxrICkg
eworICAgICAgICAgICAgICAgIC8vIEJ1bGsgb3BlcmF0aW9ucyBvbmx5IGl0ZXJhdGUgd2hlbiBl
eGVjdXRpbmcgZnVuY3Rpb24gdmFsdWVzCisgICAgICAgICAgICAgICAgaWYgKCBleGVjICkgewor
ICAgICAgICAgICAgICAgICAgICBleGVjID0gZm47CisgICAgICAgICAgICAgICAgICAgIGZuID0g
ZnVuY3Rpb24oIGVsZW0sIGtleSwgdmFsdWUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXhlYy5jYWxsKCBqUXVlcnkoIGVsZW0gKSwgdmFsdWUgKTsKKyAgICAgICAgICAgICAg
ICAgICAgfTsKKworICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSB0aGV5IHJ1biBhZ2FpbnN0
IHRoZSBlbnRpcmUgc2V0CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgZm4uY2FsbCggZWxlbXMsIHZhbHVlICk7CisgICAgICAgICAgICAgICAgICAgIGZuID0g
bnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
ICggZm4gKSB7CisgICAgICAgICAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7IGkrKyApIHsKKyAg
ICAgICAgICAgICAgICAgICAgZm4oIGVsZW1zW2ldLCBrZXksIGV4ZWMgPyB2YWx1ZS5jYWxsKCBl
bGVtc1tpXSwgaSwgZm4oIGVsZW1zW2ldLCBrZXkgKSApIDogdmFsdWUsIHBhc3MgKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNoYWluYWJsZSA9IDE7
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gY2hhaW5hYmxlID8KKyAgICAgICAgICAgIGVs
ZW1zIDoKKworICAgICAgICAgICAgLy8gR2V0cworICAgICAgICAgICAgYnVsayA/CisgICAgICAg
ICAgICAgICAgZm4uY2FsbCggZWxlbXMgKSA6CisgICAgICAgICAgICAgICAgbGVuZ3RoID8gZm4o
IGVsZW1zWzBdLCBrZXkgKSA6IGVtcHR5R2V0OworICAgIH0sCisKKyAgICBub3c6IGZ1bmN0aW9u
KCkgeworICAgICAgICByZXR1cm4gKCBuZXcgRGF0ZSgpICkuZ2V0VGltZSgpOworICAgIH0KK30p
OworCitqUXVlcnkucmVhZHkucHJvbWlzZSA9IGZ1bmN0aW9uKCBvYmogKSB7CisgICAgaWYgKCAh
cmVhZHlMaXN0ICkgeworCisgICAgICAgIHJlYWR5TGlzdCA9IGpRdWVyeS5EZWZlcnJlZCgpOwor
CisgICAgICAgIC8vIENhdGNoIGNhc2VzIHdoZXJlICQoZG9jdW1lbnQpLnJlYWR5KCkgaXMgY2Fs
bGVkIGFmdGVyIHRoZSBicm93c2VyIGV2ZW50IGhhcyBhbHJlYWR5IG9jY3VycmVkLgorICAgICAg
ICAvLyB3ZSBvbmNlIHRyaWVkIHRvIHVzZSByZWFkeVN0YXRlICJpbnRlcmFjdGl2ZSIgaGVyZSwg
YnV0IGl0IGNhdXNlZCBpc3N1ZXMgbGlrZSB0aGUgb25lCisgICAgICAgIC8vIGRpc2NvdmVyZWQg
YnkgQ2hyaXNTIGhlcmU6IGh0dHA6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEyMjgyI2NvbW1l
bnQ6MTUKKyAgICAgICAgaWYgKCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSAiY29tcGxldGUiICkg
eworICAgICAgICAgICAgLy8gSGFuZGxlIGl0IGFzeW5jaHJvbm91c2x5IHRvIGFsbG93IHNjcmlw
dHMgdGhlIG9wcG9ydHVuaXR5IHRvIGRlbGF5IHJlYWR5CisgICAgICAgICAgICBzZXRUaW1lb3V0
KCBqUXVlcnkucmVhZHksIDEgKTsKKworICAgICAgICAvLyBTdGFuZGFyZHMtYmFzZWQgYnJvd3Nl
cnMgc3VwcG9ydCBET01Db250ZW50TG9hZGVkCisgICAgICAgIH0gZWxzZSBpZiAoIGRvY3VtZW50
LmFkZEV2ZW50TGlzdGVuZXIgKSB7CisgICAgICAgICAgICAvLyBVc2UgdGhlIGhhbmR5IGV2ZW50
IGNhbGxiYWNrCisgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCAiRE9NQ29u
dGVudExvYWRlZCIsIERPTUNvbnRlbnRMb2FkZWQsIGZhbHNlICk7CisKKyAgICAgICAgICAgIC8v
IEEgZmFsbGJhY2sgdG8gd2luZG93Lm9ubG9hZCwgdGhhdCB3aWxsIGFsd2F5cyB3b3JrCisgICAg
ICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggImxvYWQiLCBqUXVlcnkucmVhZHksIGZh
bHNlICk7CisKKyAgICAgICAgLy8gSWYgSUUgZXZlbnQgbW9kZWwgaXMgdXNlZAorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgLy8gRW5zdXJlIGZpcmluZyBiZWZvcmUgb25sb2FkLCBtYXli
ZSBsYXRlIGJ1dCBzYWZlIGFsc28gZm9yIGlmcmFtZXMKKyAgICAgICAgICAgIGRvY3VtZW50LmF0
dGFjaEV2ZW50KCAib25yZWFkeXN0YXRlY2hhbmdlIiwgRE9NQ29udGVudExvYWRlZCApOworCisg
ICAgICAgICAgICAvLyBBIGZhbGxiYWNrIHRvIHdpbmRvdy5vbmxvYWQsIHRoYXQgd2lsbCBhbHdh
eXMgd29yaworICAgICAgICAgICAgd2luZG93LmF0dGFjaEV2ZW50KCAib25sb2FkIiwgalF1ZXJ5
LnJlYWR5ICk7CisKKyAgICAgICAgICAgIC8vIElmIElFIGFuZCBub3QgYSBmcmFtZQorICAgICAg
ICAgICAgLy8gY29udGludWFsbHkgY2hlY2sgdG8gc2VlIGlmIHRoZSBkb2N1bWVudCBpcyByZWFk
eQorICAgICAgICAgICAgdmFyIHRvcCA9IGZhbHNlOworCisgICAgICAgICAgICB0cnkgeworICAg
ICAgICAgICAgICAgIHRvcCA9IHdpbmRvdy5mcmFtZUVsZW1lbnQgPT0gbnVsbCAmJiBkb2N1bWVu
dC5kb2N1bWVudEVsZW1lbnQ7CisgICAgICAgICAgICB9IGNhdGNoKGUpIHt9CisKKyAgICAgICAg
ICAgIGlmICggdG9wICYmIHRvcC5kb1Njcm9sbCApIHsKKyAgICAgICAgICAgICAgICAoZnVuY3Rp
b24gZG9TY3JvbGxDaGVjaygpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAhalF1ZXJ5Lmlz
UmVhZHkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gVXNlIHRoZSB0cmljayBieSBEaWVnbyBQZXJpbmkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBodHRwOi8vamF2YXNjcmlwdC5ud2JveC5jb20vSUVDb250
ZW50TG9hZGVkLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcC5kb1Njcm9sbCgibGVm
dCIpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoIGRvU2Nyb2xsQ2hlY2ssIDUwICk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFu
ZCBleGVjdXRlIGFueSB3YWl0aW5nIGZ1bmN0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAg
alF1ZXJ5LnJlYWR5KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
KSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZWFkeUxp
c3QucHJvbWlzZSggb2JqICk7Cit9OworCisvLyBQb3B1bGF0ZSB0aGUgY2xhc3MydHlwZSBtYXAK
K2pRdWVyeS5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBS
ZWdFeHAgT2JqZWN0Ii5zcGxpdCgiICIpLCBmdW5jdGlvbihpLCBuYW1lKSB7CisgICAgY2xhc3My
dHlwZVsgIltvYmplY3QgIiArIG5hbWUgKyAiXSIgXSA9IG5hbWUudG9Mb3dlckNhc2UoKTsKK30p
OworCisvLyBBbGwgalF1ZXJ5IG9iamVjdHMgc2hvdWxkIHBvaW50IGJhY2sgdG8gdGhlc2UKK3Jv
b3RqUXVlcnkgPSBqUXVlcnkoZG9jdW1lbnQpOworLy8gU3RyaW5nIHRvIE9iamVjdCBvcHRpb25z
IGZvcm1hdCBjYWNoZQordmFyIG9wdGlvbnNDYWNoZSA9IHt9OworCisvLyBDb252ZXJ0IFN0cmlu
Zy1mb3JtYXR0ZWQgb3B0aW9ucyBpbnRvIE9iamVjdC1mb3JtYXR0ZWQgb25lcyBhbmQgc3RvcmUg
aW4gY2FjaGUKK2Z1bmN0aW9uIGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSB7CisgICAgdmFyIG9i
amVjdCA9IG9wdGlvbnNDYWNoZVsgb3B0aW9ucyBdID0ge307CisgICAgalF1ZXJ5LmVhY2goIG9w
dGlvbnMuc3BsaXQoIGNvcmVfcnNwYWNlICksIGZ1bmN0aW9uKCBfLCBmbGFnICkgeworICAgICAg
ICBvYmplY3RbIGZsYWcgXSA9IHRydWU7CisgICAgfSk7CisgICAgcmV0dXJuIG9iamVjdDsKK30K
KworLyoKKyAqIENyZWF0ZSBhIGNhbGxiYWNrIGxpc3QgdXNpbmcgdGhlIGZvbGxvd2luZyBwYXJh
bWV0ZXJzOgorICoKKyAqICAgIG9wdGlvbnM6IGFuIG9wdGlvbmFsIGxpc3Qgb2Ygc3BhY2Utc2Vw
YXJhdGVkIG9wdGlvbnMgdGhhdCB3aWxsIGNoYW5nZSBob3cKKyAqICAgICAgICAgICAgdGhlIGNh
bGxiYWNrIGxpc3QgYmVoYXZlcyBvciBhIG1vcmUgdHJhZGl0aW9uYWwgb3B0aW9uIG9iamVjdAor
ICoKKyAqIEJ5IGRlZmF1bHQgYSBjYWxsYmFjayBsaXN0IHdpbGwgYWN0IGxpa2UgYW4gZXZlbnQg
Y2FsbGJhY2sgbGlzdCBhbmQgY2FuIGJlCisgKiAiZmlyZWQiIG11bHRpcGxlIHRpbWVzLgorICoK
KyAqIFBvc3NpYmxlIG9wdGlvbnM6CisgKgorICogICAgb25jZTogICAgICAgICAgICB3aWxsIGVu
c3VyZSB0aGUgY2FsbGJhY2sgbGlzdCBjYW4gb25seSBiZSBmaXJlZCBvbmNlIChsaWtlIGEgRGVm
ZXJyZWQpCisgKgorICogICAgbWVtb3J5OiAgICAgICAgICAgIHdpbGwga2VlcCB0cmFjayBvZiBw
cmV2aW91cyB2YWx1ZXMgYW5kIHdpbGwgY2FsbCBhbnkgY2FsbGJhY2sgYWRkZWQKKyAqICAgICAg
ICAgICAgICAgICAgICBhZnRlciB0aGUgbGlzdCBoYXMgYmVlbiBmaXJlZCByaWdodCBhd2F5IHdp
dGggdGhlIGxhdGVzdCAibWVtb3JpemVkIgorICogICAgICAgICAgICAgICAgICAgIHZhbHVlcyAo
bGlrZSBhIERlZmVycmVkKQorICoKKyAqICAgIHVuaXF1ZTogICAgICAgICAgICB3aWxsIGVuc3Vy
ZSBhIGNhbGxiYWNrIGNhbiBvbmx5IGJlIGFkZGVkIG9uY2UgKG5vIGR1cGxpY2F0ZSBpbiB0aGUg
bGlzdCkKKyAqCisgKiAgICBzdG9wT25GYWxzZTogICAgaW50ZXJydXB0IGNhbGxpbmdzIHdoZW4g
YSBjYWxsYmFjayByZXR1cm5zIGZhbHNlCisgKgorICovCitqUXVlcnkuQ2FsbGJhY2tzID0gZnVu
Y3Rpb24oIG9wdGlvbnMgKSB7CisKKyAgICAvLyBDb252ZXJ0IG9wdGlvbnMgZnJvbSBTdHJpbmct
Zm9ybWF0dGVkIHRvIE9iamVjdC1mb3JtYXR0ZWQgaWYgbmVlZGVkCisgICAgLy8gKHdlIGNoZWNr
IGluIGNhY2hlIGZpcnN0KQorICAgIG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gInN0cmlu
ZyIgPworICAgICAgICAoIG9wdGlvbnNDYWNoZVsgb3B0aW9ucyBdIHx8IGNyZWF0ZU9wdGlvbnMo
IG9wdGlvbnMgKSApIDoKKyAgICAgICAgalF1ZXJ5LmV4dGVuZCgge30sIG9wdGlvbnMgKTsKKwor
ICAgIHZhciAvLyBMYXN0IGZpcmUgdmFsdWUgKGZvciBub24tZm9yZ2V0dGFibGUgbGlzdHMpCisg
ICAgICAgIG1lbW9yeSwKKyAgICAgICAgLy8gRmxhZyB0byBrbm93IGlmIGxpc3Qgd2FzIGFscmVh
ZHkgZmlyZWQKKyAgICAgICAgZmlyZWQsCisgICAgICAgIC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0
IGlzIGN1cnJlbnRseSBmaXJpbmcKKyAgICAgICAgZmlyaW5nLAorICAgICAgICAvLyBGaXJzdCBj
YWxsYmFjayB0byBmaXJlICh1c2VkIGludGVybmFsbHkgYnkgYWRkIGFuZCBmaXJlV2l0aCkKKyAg
ICAgICAgZmlyaW5nU3RhcnQsCisgICAgICAgIC8vIEVuZCBvZiB0aGUgbG9vcCB3aGVuIGZpcmlu
ZworICAgICAgICBmaXJpbmdMZW5ndGgsCisgICAgICAgIC8vIEluZGV4IG9mIGN1cnJlbnRseSBm
aXJpbmcgY2FsbGJhY2sgKG1vZGlmaWVkIGJ5IHJlbW92ZSBpZiBuZWVkZWQpCisgICAgICAgIGZp
cmluZ0luZGV4LAorICAgICAgICAvLyBBY3R1YWwgY2FsbGJhY2sgbGlzdAorICAgICAgICBsaXN0
ID0gW10sCisgICAgICAgIC8vIFN0YWNrIG9mIGZpcmUgY2FsbHMgZm9yIHJlcGVhdGFibGUgbGlz
dHMKKyAgICAgICAgc3RhY2sgPSAhb3B0aW9ucy5vbmNlICYmIFtdLAorICAgICAgICAvLyBGaXJl
IGNhbGxiYWNrcworICAgICAgICBmaXJlID0gZnVuY3Rpb24oIGRhdGEgKSB7CisgICAgICAgICAg
ICBtZW1vcnkgPSBvcHRpb25zLm1lbW9yeSAmJiBkYXRhOworICAgICAgICAgICAgZmlyZWQgPSB0
cnVlOworICAgICAgICAgICAgZmlyaW5nSW5kZXggPSBmaXJpbmdTdGFydCB8fCAwOworICAgICAg
ICAgICAgZmlyaW5nU3RhcnQgPSAwOworICAgICAgICAgICAgZmlyaW5nTGVuZ3RoID0gbGlzdC5s
ZW5ndGg7CisgICAgICAgICAgICBmaXJpbmcgPSB0cnVlOworICAgICAgICAgICAgZm9yICggOyBs
aXN0ICYmIGZpcmluZ0luZGV4IDwgZmlyaW5nTGVuZ3RoOyBmaXJpbmdJbmRleCsrICkgeworICAg
ICAgICAgICAgICAgIGlmICggbGlzdFsgZmlyaW5nSW5kZXggXS5hcHBseSggZGF0YVsgMCBdLCBk
YXRhWyAxIF0gKSA9PT0gZmFsc2UgJiYgb3B0aW9ucy5zdG9wT25GYWxzZSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgbWVtb3J5ID0gZmFsc2U7IC8vIFRvIHByZXZlbnQgZnVydGhlciBjYWxscyB1
c2luZyBhZGQKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZmlyaW5nID0gZmFsc2U7CisgICAgICAgICAgICBp
ZiAoIGxpc3QgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBzdGFjayApIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCBzdGFjay5sZW5ndGggKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBm
aXJlKCBzdGFjay5zaGlmdCgpICk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKCBtZW1vcnkgKSB7CisgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBb
XTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzZWxmLmRp
c2FibGUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisg
ICAgICAgIC8vIEFjdHVhbCBDYWxsYmFja3Mgb2JqZWN0CisgICAgICAgIHNlbGYgPSB7CisgICAg
ICAgICAgICAvLyBBZGQgYSBjYWxsYmFjayBvciBhIGNvbGxlY3Rpb24gb2YgY2FsbGJhY2tzIHRv
IHRoZSBsaXN0CisgICAgICAgICAgICBhZGQ6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAg
IGlmICggbGlzdCApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRmlyc3QsIHdlIHNhdmUgdGhl
IGN1cnJlbnQgbGVuZ3RoCisgICAgICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IGxpc3QubGVu
Z3RoOworICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gYWRkKCBhcmdzICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgalF1ZXJ5LmVhY2goIGFyZ3MsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSBqUXVlcnkudHlwZSggYXJn
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlID09PSAiZnVuY3Rpb24i
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFvcHRpb25zLnVuaXF1
ZSB8fCAhc2VsZi5oYXMoIGFyZyApICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGlzdC5wdXNoKCBhcmcgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGFyZyAmJiBhcmcubGVu
Z3RoICYmIHR5cGUgIT09ICJzdHJpbmciICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBJbnNwZWN0IHJlY3Vyc2l2ZWx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFkZCggYXJnICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0pKCBhcmd1bWVudHMgKTsK
KyAgICAgICAgICAgICAgICAgICAgLy8gRG8gd2UgbmVlZCB0byBhZGQgdGhlIGNhbGxiYWNrcyB0
byB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gY3VycmVudCBmaXJpbmcgYmF0Y2g/CisgICAg
ICAgICAgICAgICAgICAgIGlmICggZmlyaW5nICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ZmlyaW5nTGVuZ3RoID0gbGlzdC5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIC8vIFdpdGgg
bWVtb3J5LCBpZiB3ZSdyZSBub3QgZmlyaW5nIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgLy8g
d2Ugc2hvdWxkIGNhbGwgcmlnaHQgYXdheQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KCBtZW1vcnkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaXJpbmdTdGFydCA9IHN0YXJ0
OworICAgICAgICAgICAgICAgICAgICAgICAgZmlyZSggbWVtb3J5ICk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7
CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgLy8gUmVtb3ZlIGEgY2FsbGJhY2sgZnJvbSB0
aGUgbGlzdAorICAgICAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIGxpc3QgKSB7CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5lYWNoKCBhcmd1bWVu
dHMsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5k
ZXg7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSggKCBpbmRleCA9IGpRdWVyeS5pbkFy
cmF5KCBhcmcsIGxpc3QsIGluZGV4ICkgKSA+IC0xICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxpc3Quc3BsaWNlKCBpbmRleCwgMSApOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEhhbmRsZSBmaXJpbmcgaW5kZXhlcworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggZmlyaW5nICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGlu
ZGV4IDw9IGZpcmluZ0xlbmd0aCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZpcmluZ0xlbmd0aC0tOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaW5kZXggPD0gZmlyaW5nSW5kZXgg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJpbmdJbmRleC0tOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
ICAgICAgICB9LAorICAgICAgICAgICAgLy8gQ29udHJvbCBpZiBhIGdpdmVuIGNhbGxiYWNrIGlz
IGluIHRoZSBsaXN0CisgICAgICAgICAgICBoYXM6IGZ1bmN0aW9uKCBmbiApIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4galF1ZXJ5LmluQXJyYXkoIGZuLCBsaXN0ICkgPiAtMTsKKyAgICAgICAg
ICAgIH0sCisgICAgICAgICAgICAvLyBSZW1vdmUgYWxsIGNhbGxiYWNrcyBmcm9tIHRoZSBsaXN0
CisgICAgICAgICAgICBlbXB0eTogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgbGlzdCA9
IFtdOworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgfSwKKyAgICAg
ICAgICAgIC8vIEhhdmUgdGhlIGxpc3QgZG8gbm90aGluZyBhbnltb3JlCisgICAgICAgICAgICBk
aXNhYmxlOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBsaXN0ID0gc3RhY2sgPSBtZW1v
cnkgPSB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAg
ICB9LAorICAgICAgICAgICAgLy8gSXMgaXQgZGlzYWJsZWQ/CisgICAgICAgICAgICBkaXNhYmxl
ZDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICFsaXN0OworICAgICAgICAg
ICAgfSwKKyAgICAgICAgICAgIC8vIExvY2sgdGhlIGxpc3QgaW4gaXRzIGN1cnJlbnQgc3RhdGUK
KyAgICAgICAgICAgIGxvY2s6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHN0YWNrID0g
dW5kZWZpbmVkOworICAgICAgICAgICAgICAgIGlmICggIW1lbW9yeSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgc2VsZi5kaXNhYmxlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIC8vIElzIGl0IGxv
Y2tlZD8KKyAgICAgICAgICAgIGxvY2tlZDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuICFzdGFjazsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAvLyBDYWxsIGFsbCBj
YWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gY29udGV4dCBhbmQgYXJndW1lbnRzCisgICAgICAgICAg
ICBmaXJlV2l0aDogZnVuY3Rpb24oIGNvbnRleHQsIGFyZ3MgKSB7CisgICAgICAgICAgICAgICAg
YXJncyA9IGFyZ3MgfHwgW107CisgICAgICAgICAgICAgICAgYXJncyA9IFsgY29udGV4dCwgYXJn
cy5zbGljZSA/IGFyZ3Muc2xpY2UoKSA6IGFyZ3MgXTsKKyAgICAgICAgICAgICAgICBpZiAoIGxp
c3QgJiYgKCAhZmlyZWQgfHwgc3RhY2sgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBm
aXJpbmcgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKCBhcmdzICk7Cisg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaXJl
KCBhcmdzICk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgLy8g
Q2FsbCBhbGwgdGhlIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMKKyAgICAgICAg
ICAgIGZpcmU6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHNlbGYuZmlyZVdpdGgoIHRo
aXMsIGFyZ3VtZW50cyApOworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAg
ICAgfSwKKyAgICAgICAgICAgIC8vIFRvIGtub3cgaWYgdGhlIGNhbGxiYWNrcyBoYXZlIGFscmVh
ZHkgYmVlbiBjYWxsZWQgYXQgbGVhc3Qgb25jZQorICAgICAgICAgICAgZmlyZWQ6IGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgICAgIHJldHVybiAhIWZpcmVkOworICAgICAgICAgICAgfQorICAg
ICAgICB9OworCisgICAgcmV0dXJuIHNlbGY7Cit9OworalF1ZXJ5LmV4dGVuZCh7CisKKyAgICBE
ZWZlcnJlZDogZnVuY3Rpb24oIGZ1bmMgKSB7CisgICAgICAgIHZhciB0dXBsZXMgPSBbCisgICAg
ICAgICAgICAgICAgLy8gYWN0aW9uLCBhZGQgbGlzdGVuZXIsIGxpc3RlbmVyIGxpc3QsIGZpbmFs
IHN0YXRlCisgICAgICAgICAgICAgICAgWyAicmVzb2x2ZSIsICJkb25lIiwgalF1ZXJ5LkNhbGxi
YWNrcygib25jZSBtZW1vcnkiKSwgInJlc29sdmVkIiBdLAorICAgICAgICAgICAgICAgIFsgInJl
amVjdCIsICJmYWlsIiwgalF1ZXJ5LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwgInJlamVjdGVk
IiBdLAorICAgICAgICAgICAgICAgIFsgIm5vdGlmeSIsICJwcm9ncmVzcyIsIGpRdWVyeS5DYWxs
YmFja3MoIm1lbW9yeSIpIF0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICBzdGF0ZSA9ICJw
ZW5kaW5nIiwKKyAgICAgICAgICAgIHByb21pc2UgPSB7CisgICAgICAgICAgICAgICAgc3RhdGU6
IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGU7CisgICAgICAg
ICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBhbHdheXM6IGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgICAgICAgICBkZWZlcnJlZC5kb25lKCBhcmd1bWVudHMgKS5mYWlsKCBhcmd1bWVudHMg
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgfSwK
KyAgICAgICAgICAgICAgICB0aGVuOiBmdW5jdGlvbiggLyogZm5Eb25lLCBmbkZhaWwsIGZuUHJv
Z3Jlc3MgKi8gKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBmbnMgPSBhcmd1bWVudHM7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuRGVmZXJyZWQoZnVuY3Rpb24oIG5ld0Rl
ZmVyICkgeworICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmVhY2goIHR1cGxlcywgZnVu
Y3Rpb24oIGksIHR1cGxlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhY3Rp
b24gPSB0dXBsZVsgMCBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbiA9IGZu
c1sgaSBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlZmVycmVkWyBkb25lIHwg
ZmFpbCB8IHByb2dyZXNzIF0gZm9yIGZvcndhcmRpbmcgYWN0aW9ucyB0byBuZXdEZWZlcgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkWyB0dXBsZVsxXSBdKCBqUXVlcnkuaXNG
dW5jdGlvbiggZm4gKSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJldHVybmVkID0g
Zm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCByZXR1cm5lZCAmJiBqUXVlcnkuaXNGdW5jdGlvbiggcmV0dXJuZWQucHJv
bWlzZSApICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bmVkLnByb21pc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAuZG9uZSggbmV3RGVmZXIucmVzb2x2ZSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC5mYWlsKCBuZXdEZWZlci5yZWplY3QgKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucHJvZ3Jlc3MoIG5ld0RlZmVyLm5vdGlmeSAp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdEZWZlclsgYWN0aW9uICsgIldpdGgi
IF0oIHRoaXMgPT09IGRlZmVycmVkID8gbmV3RGVmZXIgOiB0aGlzLCBbIHJldHVybmVkIF0gKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Rl
ZmVyWyBhY3Rpb24gXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZucyA9IG51bGw7Cisg
ICAgICAgICAgICAgICAgICAgIH0pLnByb21pc2UoKTsKKyAgICAgICAgICAgICAgICB9LAorICAg
ICAgICAgICAgICAgIC8vIEdldCBhIHByb21pc2UgZm9yIHRoaXMgZGVmZXJyZWQKKyAgICAgICAg
ICAgICAgICAvLyBJZiBvYmogaXMgcHJvdmlkZWQsIHRoZSBwcm9taXNlIGFzcGVjdCBpcyBhZGRl
ZCB0byB0aGUgb2JqZWN0CisgICAgICAgICAgICAgICAgcHJvbWlzZTogZnVuY3Rpb24oIG9iaiAp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iaiAhPSBudWxsID8galF1ZXJ5LmV4dGVu
ZCggb2JqLCBwcm9taXNlICkgOiBwcm9taXNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0sCisgICAgICAgICAgICBkZWZlcnJlZCA9IHt9OworCisgICAgICAgIC8vIEtlZXAgcGlw
ZSBmb3IgYmFjay1jb21wYXQKKyAgICAgICAgcHJvbWlzZS5waXBlID0gcHJvbWlzZS50aGVuOwor
CisgICAgICAgIC8vIEFkZCBsaXN0LXNwZWNpZmljIG1ldGhvZHMKKyAgICAgICAgalF1ZXJ5LmVh
Y2goIHR1cGxlcywgZnVuY3Rpb24oIGksIHR1cGxlICkgeworICAgICAgICAgICAgdmFyIGxpc3Qg
PSB0dXBsZVsgMiBdLAorICAgICAgICAgICAgICAgIHN0YXRlU3RyaW5nID0gdHVwbGVbIDMgXTsK
KworICAgICAgICAgICAgLy8gcHJvbWlzZVsgZG9uZSB8IGZhaWwgfCBwcm9ncmVzcyBdID0gbGlz
dC5hZGQKKyAgICAgICAgICAgIHByb21pc2VbIHR1cGxlWzFdIF0gPSBsaXN0LmFkZDsKKworICAg
ICAgICAgICAgLy8gSGFuZGxlIHN0YXRlCisgICAgICAgICAgICBpZiAoIHN0YXRlU3RyaW5nICkg
eworICAgICAgICAgICAgICAgIGxpc3QuYWRkKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAg
ICAgICAvLyBzdGF0ZSA9IFsgcmVzb2x2ZWQgfCByZWplY3RlZCBdCisgICAgICAgICAgICAgICAg
ICAgIHN0YXRlID0gc3RhdGVTdHJpbmc7CisKKyAgICAgICAgICAgICAgICAvLyBbIHJlamVjdF9s
aXN0IHwgcmVzb2x2ZV9saXN0IF0uZGlzYWJsZTsgcHJvZ3Jlc3NfbGlzdC5sb2NrCisgICAgICAg
ICAgICAgICAgfSwgdHVwbGVzWyBpIF4gMSBdWyAyIF0uZGlzYWJsZSwgdHVwbGVzWyAyIF1bIDIg
XS5sb2NrICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGRlZmVycmVkWyByZXNv
bHZlIHwgcmVqZWN0IHwgbm90aWZ5IF0gPSBsaXN0LmZpcmUKKyAgICAgICAgICAgIGRlZmVycmVk
WyB0dXBsZVswXSBdID0gbGlzdC5maXJlOworICAgICAgICAgICAgZGVmZXJyZWRbIHR1cGxlWzBd
ICsgIldpdGgiIF0gPSBsaXN0LmZpcmVXaXRoOworICAgICAgICB9KTsKKworICAgICAgICAvLyBN
YWtlIHRoZSBkZWZlcnJlZCBhIHByb21pc2UKKyAgICAgICAgcHJvbWlzZS5wcm9taXNlKCBkZWZl
cnJlZCApOworCisgICAgICAgIC8vIENhbGwgZ2l2ZW4gZnVuYyBpZiBhbnkKKyAgICAgICAgaWYg
KCBmdW5jICkgeworICAgICAgICAgICAgZnVuYy5jYWxsKCBkZWZlcnJlZCwgZGVmZXJyZWQgKTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIEFsbCBkb25lIQorICAgICAgICByZXR1cm4gZGVmZXJy
ZWQ7CisgICAgfSwKKworICAgIC8vIERlZmVycmVkIGhlbHBlcgorICAgIHdoZW46IGZ1bmN0aW9u
KCBzdWJvcmRpbmF0ZSAvKiAsIC4uLiwgc3Vib3JkaW5hdGVOICovICkgeworICAgICAgICB2YXIg
aSA9IDAsCisgICAgICAgICAgICByZXNvbHZlVmFsdWVzID0gY29yZV9zbGljZS5jYWxsKCBhcmd1
bWVudHMgKSwKKyAgICAgICAgICAgIGxlbmd0aCA9IHJlc29sdmVWYWx1ZXMubGVuZ3RoLAorCisg
ICAgICAgICAgICAvLyB0aGUgY291bnQgb2YgdW5jb21wbGV0ZWQgc3Vib3JkaW5hdGVzCisgICAg
ICAgICAgICByZW1haW5pbmcgPSBsZW5ndGggIT09IDEgfHwgKCBzdWJvcmRpbmF0ZSAmJiBqUXVl
cnkuaXNGdW5jdGlvbiggc3Vib3JkaW5hdGUucHJvbWlzZSApICkgPyBsZW5ndGggOiAwLAorCisg
ICAgICAgICAgICAvLyB0aGUgbWFzdGVyIERlZmVycmVkLiBJZiByZXNvbHZlVmFsdWVzIGNvbnNp
c3Qgb2Ygb25seSBhIHNpbmdsZSBEZWZlcnJlZCwganVzdCB1c2UgdGhhdC4KKyAgICAgICAgICAg
IGRlZmVycmVkID0gcmVtYWluaW5nID09PSAxID8gc3Vib3JkaW5hdGUgOiBqUXVlcnkuRGVmZXJy
ZWQoKSwKKworICAgICAgICAgICAgLy8gVXBkYXRlIGZ1bmN0aW9uIGZvciBib3RoIHJlc29sdmUg
YW5kIHByb2dyZXNzIHZhbHVlcworICAgICAgICAgICAgdXBkYXRlRnVuYyA9IGZ1bmN0aW9uKCBp
LCBjb250ZXh0cywgdmFsdWVzICkgeworICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigg
dmFsdWUgKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHRzWyBpIF0gPSB0aGlzOworICAg
ICAgICAgICAgICAgICAgICB2YWx1ZXNbIGkgXSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gY29y
ZV9zbGljZS5jYWxsKCBhcmd1bWVudHMgKSA6IHZhbHVlOworICAgICAgICAgICAgICAgICAgICBp
ZiggdmFsdWVzID09PSBwcm9ncmVzc1ZhbHVlcyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGRlZmVycmVkLm5vdGlmeVdpdGgoIGNvbnRleHRzLCB2YWx1ZXMgKTsKKyAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmICggISggLS1yZW1haW5pbmcgKSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmVycmVkLnJlc29sdmVXaXRoKCBjb250ZXh0cywgdmFsdWVzICk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfSwKKworICAg
ICAgICAgICAgcHJvZ3Jlc3NWYWx1ZXMsIHByb2dyZXNzQ29udGV4dHMsIHJlc29sdmVDb250ZXh0
czsKKworICAgICAgICAvLyBhZGQgbGlzdGVuZXJzIHRvIERlZmVycmVkIHN1Ym9yZGluYXRlczsg
dHJlYXQgb3RoZXJzIGFzIHJlc29sdmVkCisgICAgICAgIGlmICggbGVuZ3RoID4gMSApIHsKKyAg
ICAgICAgICAgIHByb2dyZXNzVmFsdWVzID0gbmV3IEFycmF5KCBsZW5ndGggKTsKKyAgICAgICAg
ICAgIHByb2dyZXNzQ29udGV4dHMgPSBuZXcgQXJyYXkoIGxlbmd0aCApOworICAgICAgICAgICAg
cmVzb2x2ZUNvbnRleHRzID0gbmV3IEFycmF5KCBsZW5ndGggKTsKKyAgICAgICAgICAgIGZvciAo
IDsgaSA8IGxlbmd0aDsgaSsrICkgeworICAgICAgICAgICAgICAgIGlmICggcmVzb2x2ZVZhbHVl
c1sgaSBdICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCByZXNvbHZlVmFsdWVzWyBpIF0ucHJvbWlzZSAp
ICkgeworICAgICAgICAgICAgICAgICAgICByZXNvbHZlVmFsdWVzWyBpIF0ucHJvbWlzZSgpCisg
ICAgICAgICAgICAgICAgICAgICAgICAuZG9uZSggdXBkYXRlRnVuYyggaSwgcmVzb2x2ZUNvbnRl
eHRzLCByZXNvbHZlVmFsdWVzICkgKQorICAgICAgICAgICAgICAgICAgICAgICAgLmZhaWwoIGRl
ZmVycmVkLnJlamVjdCApCisgICAgICAgICAgICAgICAgICAgICAgICAucHJvZ3Jlc3MoIHVwZGF0
ZUZ1bmMoIGksIHByb2dyZXNzQ29udGV4dHMsIHByb2dyZXNzVmFsdWVzICkgKTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAtLXJlbWFpbmluZzsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBpZiB3
ZSdyZSBub3Qgd2FpdGluZyBvbiBhbnl0aGluZywgcmVzb2x2ZSB0aGUgbWFzdGVyCisgICAgICAg
IGlmICggIXJlbWFpbmluZyApIHsKKyAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmVXaXRoKCBy
ZXNvbHZlQ29udGV4dHMsIHJlc29sdmVWYWx1ZXMgKTsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiBkZWZlcnJlZC5wcm9taXNlKCk7CisgICAgfQorfSk7CitqUXVlcnkuc3VwcG9ydCA9IChm
dW5jdGlvbigpIHsKKworICAgIHZhciBzdXBwb3J0LAorICAgICAgICBhbGwsCisgICAgICAgIGEs
CisgICAgICAgIHNlbGVjdCwKKyAgICAgICAgb3B0LAorICAgICAgICBpbnB1dCwKKyAgICAgICAg
ZnJhZ21lbnQsCisgICAgICAgIGV2ZW50TmFtZSwKKyAgICAgICAgaSwKKyAgICAgICAgaXNTdXBw
b3J0ZWQsCisgICAgICAgIGNsaWNrRm4sCisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoImRpdiIpOworCisgICAgLy8gU2V0dXAKKyAgICBkaXYuc2V0QXR0cmlidXRlKCAiY2xh
c3NOYW1lIiwgInQiICk7CisgICAgZGl2LmlubmVySFRNTCA9ICIgIDxsaW5rLz48dGFibGU+PC90
YWJsZT48YSBocmVmPScvYSc+YTwvYT48aW5wdXQgdHlwZT0nY2hlY2tib3gnLz4iOworCisgICAg
Ly8gU3VwcG9ydCB0ZXN0cyB3b24ndCBydW4gaW4gc29tZSBsaW1pdGVkIG9yIG5vbi1icm93c2Vy
IGVudmlyb25tZW50cworICAgIGFsbCA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOwor
ICAgIGEgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVsgMCBdOworICAgIGlmICggIWFs
bCB8fCAhYSB8fCAhYWxsLmxlbmd0aCApIHsKKyAgICAgICAgcmV0dXJuIHt9OworICAgIH0KKwor
ICAgIC8vIEZpcnN0IGJhdGNoIG9mIHRlc3RzCisgICAgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgic2VsZWN0Iik7CisgICAgb3B0ID0gc2VsZWN0LmFwcGVuZENoaWxkKCBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKSApOworICAgIGlucHV0ID0gZGl2LmdldEVsZW1lbnRz
QnlUYWdOYW1lKCJpbnB1dCIpWyAwIF07CisKKyAgICBhLnN0eWxlLmNzc1RleHQgPSAidG9wOjFw
eDtmbG9hdDpsZWZ0O29wYWNpdHk6LjUiOworICAgIHN1cHBvcnQgPSB7CisgICAgICAgIC8vIElF
IHN0cmlwcyBsZWFkaW5nIHdoaXRlc3BhY2Ugd2hlbiAuaW5uZXJIVE1MIGlzIHVzZWQKKyAgICAg
ICAgbGVhZGluZ1doaXRlc3BhY2U6ICggZGl2LmZpcnN0Q2hpbGQubm9kZVR5cGUgPT09IDMgKSwK
KworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0Ym9keSBlbGVtZW50cyBhcmVuJ3QgYXV0b21h
dGljYWxseSBpbnNlcnRlZAorICAgICAgICAvLyBJRSB3aWxsIGluc2VydCB0aGVtIGludG8gZW1w
dHkgdGFibGVzCisgICAgICAgIHRib2R5OiAhZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9k
eSIpLmxlbmd0aCwKKworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBsaW5rIGVsZW1lbnRzIGdl
dCBzZXJpYWxpemVkIGNvcnJlY3RseSBieSBpbm5lckhUTUwKKyAgICAgICAgLy8gVGhpcyByZXF1
aXJlcyBhIHdyYXBwZXIgZWxlbWVudCBpbiBJRQorICAgICAgICBodG1sU2VyaWFsaXplOiAhIWRp
di5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGluayIpLmxlbmd0aCwKKworICAgICAgICAvLyBHZXQg
dGhlIHN0eWxlIGluZm9ybWF0aW9uIGZyb20gZ2V0QXR0cmlidXRlCisgICAgICAgIC8vIChJRSB1
c2VzIC5jc3NUZXh0IGluc3RlYWQpCisgICAgICAgIHN0eWxlOiAvdG9wLy50ZXN0KCBhLmdldEF0
dHJpYnV0ZSgic3R5bGUiKSApLAorCisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IFVSTHMgYXJl
bid0IG1hbmlwdWxhdGVkCisgICAgICAgIC8vIChJRSBub3JtYWxpemVzIGl0IGJ5IGRlZmF1bHQp
CisgICAgICAgIGhyZWZOb3JtYWxpemVkOiAoIGEuZ2V0QXR0cmlidXRlKCJocmVmIikgPT09ICIv
YSIgKSwKKworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBlbGVtZW50IG9wYWNpdHkgZXhpc3Rz
CisgICAgICAgIC8vIChJRSB1c2VzIGZpbHRlciBpbnN0ZWFkKQorICAgICAgICAvLyBVc2UgYSBy
ZWdleCB0byB3b3JrIGFyb3VuZCBhIFdlYktpdCBpc3N1ZS4gU2VlICM1MTQ1CisgICAgICAgIG9w
YWNpdHk6IC9eMC41Ly50ZXN0KCBhLnN0eWxlLm9wYWNpdHkgKSwKKworICAgICAgICAvLyBWZXJp
Znkgc3R5bGUgZmxvYXQgZXhpc3RlbmNlCisgICAgICAgIC8vIChJRSB1c2VzIHN0eWxlRmxvYXQg
aW5zdGVhZCBvZiBjc3NGbG9hdCkKKyAgICAgICAgY3NzRmxvYXQ6ICEhYS5zdHlsZS5jc3NGbG9h
dCwKKworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBpZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQg
Zm9yIGEgY2hlY2tib3gKKyAgICAgICAgLy8gdGhhdCBpdCBkZWZhdWx0cyB0byAib24iLgorICAg
ICAgICAvLyAoV2ViS2l0IGRlZmF1bHRzIHRvICIiIGluc3RlYWQpCisgICAgICAgIGNoZWNrT246
ICggaW5wdXQudmFsdWUgPT09ICJvbiIgKSwKKworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBh
IHNlbGVjdGVkLWJ5LWRlZmF1bHQgb3B0aW9uIGhhcyBhIHdvcmtpbmcgc2VsZWN0ZWQgcHJvcGVy
dHkuCisgICAgICAgIC8vIChXZWJLaXQgZGVmYXVsdHMgdG8gZmFsc2UgaW5zdGVhZCBvZiB0cnVl
LCBJRSB0b28sIGlmIGl0J3MgaW4gYW4gb3B0Z3JvdXApCisgICAgICAgIG9wdFNlbGVjdGVkOiBv
cHQuc2VsZWN0ZWQsCisKKyAgICAgICAgLy8gVGVzdCBzZXRBdHRyaWJ1dGUgb24gY2FtZWxDYXNl
IGNsYXNzLiBJZiBpdCB3b3Jrcywgd2UgbmVlZCBhdHRyRml4ZXMgd2hlbiBkb2luZyBnZXQvc2V0
QXR0cmlidXRlIChpZTYvNykKKyAgICAgICAgZ2V0U2V0QXR0cmlidXRlOiBkaXYuY2xhc3NOYW1l
ICE9PSAidCIsCisKKyAgICAgICAgLy8gVGVzdHMgZm9yIGVuY3R5cGUgc3VwcG9ydCBvbiBhIGZv
cm0gKCM2NzQzKQorICAgICAgICBlbmN0eXBlOiAhIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImZv
cm0iKS5lbmN0eXBlLAorCisgICAgICAgIC8vIE1ha2VzIHN1cmUgY2xvbmluZyBhbiBodG1sNSBl
bGVtZW50IGRvZXMgbm90IGNhdXNlIHByb2JsZW1zCisgICAgICAgIC8vIFdoZXJlIG91dGVySFRN
TCBpcyB1bmRlZmluZWQsIHRoaXMgc3RpbGwgd29ya3MKKyAgICAgICAgaHRtbDVDbG9uZTogZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgibmF2IikuY2xvbmVOb2RlKCB0cnVlICkub3V0ZXJIVE1MICE9
PSAiPDpuYXY+PC86bmF2PiIsCisKKyAgICAgICAgLy8galF1ZXJ5LnN1cHBvcnQuYm94TW9kZWwg
REVQUkVDQVRFRCBpbiAxLjggc2luY2Ugd2UgZG9uJ3Qgc3VwcG9ydCBRdWlya3MgTW9kZQorICAg
ICAgICBib3hNb2RlbDogKCBkb2N1bWVudC5jb21wYXRNb2RlID09PSAiQ1NTMUNvbXBhdCIgKSwK
KworICAgICAgICAvLyBXaWxsIGJlIGRlZmluZWQgbGF0ZXIKKyAgICAgICAgc3VibWl0QnViYmxl
czogdHJ1ZSwKKyAgICAgICAgY2hhbmdlQnViYmxlczogdHJ1ZSwKKyAgICAgICAgZm9jdXNpbkJ1
YmJsZXM6IGZhbHNlLAorICAgICAgICBkZWxldGVFeHBhbmRvOiB0cnVlLAorICAgICAgICBub0Ns
b25lRXZlbnQ6IHRydWUsCisgICAgICAgIGlubGluZUJsb2NrTmVlZHNMYXlvdXQ6IGZhbHNlLAor
ICAgICAgICBzaHJpbmtXcmFwQmxvY2tzOiBmYWxzZSwKKyAgICAgICAgcmVsaWFibGVNYXJnaW5S
aWdodDogdHJ1ZSwKKyAgICAgICAgYm94U2l6aW5nUmVsaWFibGU6IHRydWUsCisgICAgICAgIHBp
eGVsUG9zaXRpb246IGZhbHNlCisgICAgfTsKKworICAgIC8vIE1ha2Ugc3VyZSBjaGVja2VkIHN0
YXR1cyBpcyBwcm9wZXJseSBjbG9uZWQKKyAgICBpbnB1dC5jaGVja2VkID0gdHJ1ZTsKKyAgICBz
dXBwb3J0Lm5vQ2xvbmVDaGVja2VkID0gaW5wdXQuY2xvbmVOb2RlKCB0cnVlICkuY2hlY2tlZDsK
KworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBvcHRpb25zIGluc2lkZSBkaXNhYmxlZCBzZWxl
Y3RzIGFyZW4ndCBtYXJrZWQgYXMgZGlzYWJsZWQKKyAgICAvLyAoV2ViS2l0IG1hcmtzIHRoZW0g
YXMgZGlzYWJsZWQpCisgICAgc2VsZWN0LmRpc2FibGVkID0gdHJ1ZTsKKyAgICBzdXBwb3J0Lm9w
dERpc2FibGVkID0gIW9wdC5kaXNhYmxlZDsKKworICAgIC8vIFRlc3QgdG8gc2VlIGlmIGl0J3Mg
cG9zc2libGUgdG8gZGVsZXRlIGFuIGV4cGFuZG8gZnJvbSBhbiBlbGVtZW50CisgICAgLy8gRmFp
bHMgaW4gSW50ZXJuZXQgRXhwbG9yZXIKKyAgICB0cnkgeworICAgICAgICBkZWxldGUgZGl2LnRl
c3Q7CisgICAgfSBjYXRjaCggZSApIHsKKyAgICAgICAgc3VwcG9ydC5kZWxldGVFeHBhbmRvID0g
ZmFsc2U7CisgICAgfQorCisgICAgaWYgKCAhZGl2LmFkZEV2ZW50TGlzdGVuZXIgJiYgZGl2LmF0
dGFjaEV2ZW50ICYmIGRpdi5maXJlRXZlbnQgKSB7CisgICAgICAgIGRpdi5hdHRhY2hFdmVudCgg
Im9uY2xpY2siLCBjbGlja0ZuID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAvLyBDbG9uaW5n
IGEgbm9kZSBzaG91bGRuJ3QgY29weSBvdmVyIGFueQorICAgICAgICAgICAgLy8gYm91bmQgZXZl
bnQgaGFuZGxlcnMgKElFIGRvZXMgdGhpcykKKyAgICAgICAgICAgIHN1cHBvcnQubm9DbG9uZUV2
ZW50ID0gZmFsc2U7CisgICAgICAgIH0pOworICAgICAgICBkaXYuY2xvbmVOb2RlKCB0cnVlICku
ZmlyZUV2ZW50KCJvbmNsaWNrIik7CisgICAgICAgIGRpdi5kZXRhY2hFdmVudCggIm9uY2xpY2si
LCBjbGlja0ZuICk7CisgICAgfQorCisgICAgLy8gQ2hlY2sgaWYgYSByYWRpbyBtYWludGFpbnMg
aXRzIHZhbHVlCisgICAgLy8gYWZ0ZXIgYmVpbmcgYXBwZW5kZWQgdG8gdGhlIERPTQorICAgIGlu
cHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKKyAgICBpbnB1dC52YWx1ZSA9
ICJ0IjsKKyAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoICJ0eXBlIiwgInJhZGlvIiApOworICAgIHN1
cHBvcnQucmFkaW9WYWx1ZSA9IGlucHV0LnZhbHVlID09PSAidCI7CisKKyAgICBpbnB1dC5zZXRB
dHRyaWJ1dGUoICJjaGVja2VkIiwgImNoZWNrZWQiICk7CisKKyAgICAvLyAjMTEyMTcgLSBXZWJL
aXQgbG9zZXMgY2hlY2sgd2hlbiB0aGUgbmFtZSBpcyBhZnRlciB0aGUgY2hlY2tlZCBhdHRyaWJ1
dGUKKyAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoICJuYW1lIiwgInQiICk7CisKKyAgICBkaXYuYXBw
ZW5kQ2hpbGQoIGlucHV0ICk7CisgICAgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVu
dEZyYWdtZW50KCk7CisgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGRpdi5sYXN0Q2hpbGQgKTsK
KworICAgIC8vIFdlYktpdCBkb2Vzbid0IGNsb25lIGNoZWNrZWQgc3RhdGUgY29ycmVjdGx5IGlu
IGZyYWdtZW50cworICAgIHN1cHBvcnQuY2hlY2tDbG9uZSA9IGZyYWdtZW50LmNsb25lTm9kZSgg
dHJ1ZSApLmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5jaGVja2VkOworCisgICAgLy8gQ2hl
Y2sgaWYgYSBkaXNjb25uZWN0ZWQgY2hlY2tib3ggd2lsbCByZXRhaW4gaXRzIGNoZWNrZWQKKyAg
ICAvLyB2YWx1ZSBvZiB0cnVlIGFmdGVyIGFwcGVuZGVkIHRvIHRoZSBET00gKElFNi83KQorICAg
IHN1cHBvcnQuYXBwZW5kQ2hlY2tlZCA9IGlucHV0LmNoZWNrZWQ7CisKKyAgICBmcmFnbWVudC5y
ZW1vdmVDaGlsZCggaW5wdXQgKTsKKyAgICBmcmFnbWVudC5hcHBlbmRDaGlsZCggZGl2ICk7CisK
KyAgICAvLyBUZWNobmlxdWUgZnJvbSBKdXJpeSBaYXl0c2V2CisgICAgLy8gaHR0cDovL3BlcmZl
Y3Rpb25raWxscy5jb20vZGV0ZWN0aW5nLWV2ZW50LXN1cHBvcnQtd2l0aG91dC1icm93c2VyLXNu
aWZmaW5nLworICAgIC8vIFdlIG9ubHkgY2FyZSBhYm91dCB0aGUgY2FzZSB3aGVyZSBub24tc3Rh
bmRhcmQgZXZlbnQgc3lzdGVtcworICAgIC8vIGFyZSB1c2VkLCBuYW1lbHkgaW4gSUUuIFNob3J0
LWNpcmN1aXRpbmcgaGVyZSBoZWxwcyB1cyB0bworICAgIC8vIGF2b2lkIGFuIGV2YWwgY2FsbCAo
aW4gc2V0QXR0cmlidXRlKSB3aGljaCBjYW4gY2F1c2UgQ1NQCisgICAgLy8gdG8gZ28gaGF5d2ly
ZS4gU2VlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9TZWN1cml0eS9DU1AKKyAg
ICBpZiAoIGRpdi5hdHRhY2hFdmVudCApIHsKKyAgICAgICAgZm9yICggaSBpbiB7CisgICAgICAg
ICAgICBzdWJtaXQ6IHRydWUsCisgICAgICAgICAgICBjaGFuZ2U6IHRydWUsCisgICAgICAgICAg
ICBmb2N1c2luOiB0cnVlCisgICAgICAgIH0pIHsKKyAgICAgICAgICAgIGV2ZW50TmFtZSA9ICJv
biIgKyBpOworICAgICAgICAgICAgaXNTdXBwb3J0ZWQgPSAoIGV2ZW50TmFtZSBpbiBkaXYgKTsK
KyAgICAgICAgICAgIGlmICggIWlzU3VwcG9ydGVkICkgeworICAgICAgICAgICAgICAgIGRpdi5z
ZXRBdHRyaWJ1dGUoIGV2ZW50TmFtZSwgInJldHVybjsiICk7CisgICAgICAgICAgICAgICAgaXNT
dXBwb3J0ZWQgPSAoIHR5cGVvZiBkaXZbIGV2ZW50TmFtZSBdID09PSAiZnVuY3Rpb24iICk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBzdXBwb3J0WyBpICsgIkJ1YmJsZXMiIF0gPSBpc1N1
cHBvcnRlZDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFJ1biB0ZXN0cyB0aGF0IG5lZWQg
YSBib2R5IGF0IGRvYyByZWFkeQorICAgIGpRdWVyeShmdW5jdGlvbigpIHsKKyAgICAgICAgdmFy
IGNvbnRhaW5lciwgZGl2LCB0ZHMsIG1hcmdpbkRpdiwKKyAgICAgICAgICAgIGRpdlJlc2V0ID0g
InBhZGRpbmc6MDttYXJnaW46MDtib3JkZXI6MDtkaXNwbGF5OmJsb2NrO292ZXJmbG93OmhpZGRl
bjsiLAorICAgICAgICAgICAgYm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJi
b2R5IilbMF07CisKKyAgICAgICAgaWYgKCAhYm9keSApIHsKKyAgICAgICAgICAgIC8vIFJldHVy
biBmb3IgZnJhbWVzZXQgZG9jcyB0aGF0IGRvbid0IGhhdmUgYSBib2R5CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJkaXYiKTsKKyAgICAgICAgY29udGFpbmVyLnN0eWxlLmNzc1RleHQgPSAidmlzaWJp
bGl0eTpoaWRkZW47Ym9yZGVyOjA7d2lkdGg6MDtoZWlnaHQ6MDtwb3NpdGlvbjpzdGF0aWM7dG9w
OjA7bWFyZ2luLXRvcDoxcHgiOworICAgICAgICBib2R5Lmluc2VydEJlZm9yZSggY29udGFpbmVy
LCBib2R5LmZpcnN0Q2hpbGQgKTsKKworICAgICAgICAvLyBDb25zdHJ1Y3QgdGhlIHRlc3QgZWxl
bWVudAorICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAg
ICAgY29udGFpbmVyLmFwcGVuZENoaWxkKCBkaXYgKTsKKworICAgICAgICAvLyBDaGVjayBpZiB0
YWJsZSBjZWxscyBzdGlsbCBoYXZlIG9mZnNldFdpZHRoL0hlaWdodCB3aGVuIHRoZXkgYXJlIHNl
dAorICAgICAgICAvLyB0byBkaXNwbGF5Om5vbmUgYW5kIHRoZXJlIGFyZSBzdGlsbCBvdGhlciB2
aXNpYmxlIHRhYmxlIGNlbGxzIGluIGEKKyAgICAgICAgLy8gdGFibGUgcm93OyBpZiBzbywgb2Zm
c2V0V2lkdGgvSGVpZ2h0IGFyZSBub3QgcmVsaWFibGUgZm9yIHVzZSB3aGVuCisgICAgICAgIC8v
IGRldGVybWluaW5nIGlmIGFuIGVsZW1lbnQgaGFzIGJlZW4gaGlkZGVuIGRpcmVjdGx5IHVzaW5n
CisgICAgICAgIC8vIGRpc3BsYXk6bm9uZSAoaXQgaXMgc3RpbGwgc2FmZSB0byB1c2Ugb2Zmc2V0
cyBpZiBhIHBhcmVudCBlbGVtZW50IGlzCisgICAgICAgIC8vIGhpZGRlbjsgZG9uIHNhZmV0eSBn
b2dnbGVzIGFuZCBzZWUgYnVnICM0NTEyIGZvciBtb3JlIGluZm9ybWF0aW9uKS4KKyAgICAgICAg
Ly8gKG9ubHkgSUUgOCBmYWlscyB0aGlzIHRlc3QpCisgICAgICAgIGRpdi5pbm5lckhUTUwgPSAi
PHRhYmxlPjx0cj48dGQ+PC90ZD48dGQ+dDwvdGQ+PC90cj48L3RhYmxlPiI7CisgICAgICAgIHRk
cyA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKKyAgICAgICAgdGRzWyAwIF0uc3R5
bGUuY3NzVGV4dCA9ICJwYWRkaW5nOjA7bWFyZ2luOjA7Ym9yZGVyOjA7ZGlzcGxheTpub25lIjsK
KyAgICAgICAgaXNTdXBwb3J0ZWQgPSAoIHRkc1sgMCBdLm9mZnNldEhlaWdodCA9PT0gMCApOwor
CisgICAgICAgIHRkc1sgMCBdLnN0eWxlLmRpc3BsYXkgPSAiIjsKKyAgICAgICAgdGRzWyAxIF0u
c3R5bGUuZGlzcGxheSA9ICJub25lIjsKKworICAgICAgICAvLyBDaGVjayBpZiBlbXB0eSB0YWJs
ZSBjZWxscyBzdGlsbCBoYXZlIG9mZnNldFdpZHRoL0hlaWdodAorICAgICAgICAvLyAoSUUgPD0g
OCBmYWlsIHRoaXMgdGVzdCkKKyAgICAgICAgc3VwcG9ydC5yZWxpYWJsZUhpZGRlbk9mZnNldHMg
PSBpc1N1cHBvcnRlZCAmJiAoIHRkc1sgMCBdLm9mZnNldEhlaWdodCA9PT0gMCApOworCisgICAg
ICAgIC8vIENoZWNrIGJveC1zaXppbmcgYW5kIG1hcmdpbiBiZWhhdmlvcgorICAgICAgICBkaXYu
aW5uZXJIVE1MID0gIiI7CisgICAgICAgIGRpdi5zdHlsZS5jc3NUZXh0ID0gImJveC1zaXppbmc6
Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDstd2Via2l0LWJveC1zaXppbmc6
Ym9yZGVyLWJveDtwYWRkaW5nOjFweDtib3JkZXI6MXB4O2Rpc3BsYXk6YmxvY2s7d2lkdGg6NHB4
O21hcmdpbi10b3A6MSU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjElOyI7CisgICAgICAgIHN1cHBv
cnQuYm94U2l6aW5nID0gKCBkaXYub2Zmc2V0V2lkdGggPT09IDQgKTsKKyAgICAgICAgc3VwcG9y
dC5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldCA9ICggYm9keS5vZmZzZXRUb3AgIT09
IDEgKTsKKworICAgICAgICAvLyBOT1RFOiBUbyBhbnkgZnV0dXJlIG1haW50YWluZXIsIHdlJ3Zl
IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlCisgICAgICAgIC8vIGJlY2F1c2UganNkb20gb24gbm9k
ZS5qcyB3aWxsIGJyZWFrIHdpdGhvdXQgaXQuCisgICAgICAgIGlmICggd2luZG93LmdldENvbXB1
dGVkU3R5bGUgKSB7CisgICAgICAgICAgICBzdXBwb3J0LnBpeGVsUG9zaXRpb24gPSAoIHdpbmRv
dy5nZXRDb21wdXRlZFN0eWxlKCBkaXYsIG51bGwgKSB8fCB7fSApLnRvcCAhPT0gIjElIjsKKyAg
ICAgICAgICAgIHN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGUgPSAoIHdpbmRvdy5nZXRDb21wdXRl
ZFN0eWxlKCBkaXYsIG51bGwgKSB8fCB7IHdpZHRoOiAiNHB4IiB9ICkud2lkdGggPT09ICI0cHgi
OworCisgICAgICAgICAgICAvLyBDaGVjayBpZiBkaXYgd2l0aCBleHBsaWNpdCB3aWR0aCBhbmQg
bm8gbWFyZ2luLXJpZ2h0IGluY29ycmVjdGx5CisgICAgICAgICAgICAvLyBnZXRzIGNvbXB1dGVk
IG1hcmdpbi1yaWdodCBiYXNlZCBvbiB3aWR0aCBvZiBjb250YWluZXIuIEZvciBtb3JlCisgICAg
ICAgICAgICAvLyBpbmZvIHNlZSBidWcgIzMzMzMKKyAgICAgICAgICAgIC8vIEZhaWxzIGluIFdl
YktpdCBiZWZvcmUgRmViIDIwMTEgbmlnaHRsaWVzCisgICAgICAgICAgICAvLyBXZWJLaXQgQnVn
IDEzMzQzIC0gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHdyb25nIHZhbHVlIGZvciBtYXJnaW4t
cmlnaHQKKyAgICAgICAgICAgIG1hcmdpbkRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRp
diIpOworICAgICAgICAgICAgbWFyZ2luRGl2LnN0eWxlLmNzc1RleHQgPSBkaXYuc3R5bGUuY3Nz
VGV4dCA9IGRpdlJlc2V0OworICAgICAgICAgICAgbWFyZ2luRGl2LnN0eWxlLm1hcmdpblJpZ2h0
ID0gbWFyZ2luRGl2LnN0eWxlLndpZHRoID0gIjAiOworICAgICAgICAgICAgZGl2LnN0eWxlLndp
ZHRoID0gIjFweCI7CisgICAgICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoIG1hcmdpbkRpdiApOwor
ICAgICAgICAgICAgc3VwcG9ydC5yZWxpYWJsZU1hcmdpblJpZ2h0ID0KKyAgICAgICAgICAgICAg
ICAhcGFyc2VGbG9hdCggKCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggbWFyZ2luRGl2LCBudWxs
ICkgfHwge30gKS5tYXJnaW5SaWdodCApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCB0eXBl
b2YgZGl2LnN0eWxlLnpvb20gIT09ICJ1bmRlZmluZWQiICkgeworICAgICAgICAgICAgLy8gQ2hl
Y2sgaWYgbmF0aXZlbHkgYmxvY2stbGV2ZWwgZWxlbWVudHMgYWN0IGxpa2UgaW5saW5lLWJsb2Nr
CisgICAgICAgICAgICAvLyBlbGVtZW50cyB3aGVuIHNldHRpbmcgdGhlaXIgZGlzcGxheSB0byAn
aW5saW5lJyBhbmQgZ2l2aW5nCisgICAgICAgICAgICAvLyB0aGVtIGxheW91dAorICAgICAgICAg
ICAgLy8gKElFIDwgOCBkb2VzIHRoaXMpCisgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0gIiI7
CisgICAgICAgICAgICBkaXYuc3R5bGUuY3NzVGV4dCA9IGRpdlJlc2V0ICsgIndpZHRoOjFweDtw
YWRkaW5nOjFweDtkaXNwbGF5OmlubGluZTt6b29tOjEiOworICAgICAgICAgICAgc3VwcG9ydC5p
bmxpbmVCbG9ja05lZWRzTGF5b3V0ID0gKCBkaXYub2Zmc2V0V2lkdGggPT09IDMgKTsKKworICAg
ICAgICAgICAgLy8gQ2hlY2sgaWYgZWxlbWVudHMgd2l0aCBsYXlvdXQgc2hyaW5rLXdyYXAgdGhl
aXIgY2hpbGRyZW4KKyAgICAgICAgICAgIC8vIChJRSA2IGRvZXMgdGhpcykKKyAgICAgICAgICAg
IGRpdi5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKKyAgICAgICAgICAgIGRpdi5zdHlsZS5vdmVy
ZmxvdyA9ICJ2aXNpYmxlIjsKKyAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSAiPGRpdj48L2Rp
dj4iOworICAgICAgICAgICAgZGl2LmZpcnN0Q2hpbGQuc3R5bGUud2lkdGggPSAiNXB4IjsKKyAg
ICAgICAgICAgIHN1cHBvcnQuc2hyaW5rV3JhcEJsb2NrcyA9ICggZGl2Lm9mZnNldFdpZHRoICE9
PSAzICk7CisKKyAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS56b29tID0gMTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIE51bGwgZWxlbWVudHMgdG8gYXZvaWQgbGVha3MgaW4gSUUKKyAgICAg
ICAgYm9keS5yZW1vdmVDaGlsZCggY29udGFpbmVyICk7CisgICAgICAgIGNvbnRhaW5lciA9IGRp
diA9IHRkcyA9IG1hcmdpbkRpdiA9IG51bGw7CisgICAgfSk7CisKKyAgICAvLyBOdWxsIGVsZW1l
bnRzIHRvIGF2b2lkIGxlYWtzIGluIElFCisgICAgZnJhZ21lbnQucmVtb3ZlQ2hpbGQoIGRpdiAp
OworICAgIGFsbCA9IGEgPSBzZWxlY3QgPSBvcHQgPSBpbnB1dCA9IGZyYWdtZW50ID0gZGl2ID0g
bnVsbDsKKworICAgIHJldHVybiBzdXBwb3J0OworfSkoKTsKK3ZhciByYnJhY2UgPSAvKD86XHtb
XHNcU10qXH18XFtbXHNcU10qXF0pJC8sCisgICAgcm11bHRpRGFzaCA9IC8oW0EtWl0pL2c7CisK
K2pRdWVyeS5leHRlbmQoeworICAgIGNhY2hlOiB7fSwKKworICAgIGRlbGV0ZWRJZHM6IFtdLAor
CisgICAgLy8gUmVtb3ZlIGF0IG5leHQgbWFqb3IgcmVsZWFzZSAoMS45LzIuMCkKKyAgICB1dWlk
OiAwLAorCisgICAgLy8gVW5pcXVlIGZvciBlYWNoIGNvcHkgb2YgalF1ZXJ5IG9uIHRoZSBwYWdl
CisgICAgLy8gTm9uLWRpZ2l0cyByZW1vdmVkIHRvIG1hdGNoIHJpbmxpbmVqUXVlcnkKKyAgICBl
eHBhbmRvOiAialF1ZXJ5IiArICggalF1ZXJ5LmZuLmpxdWVyeSArIE1hdGgucmFuZG9tKCkgKS5y
ZXBsYWNlKCAvXEQvZywgIiIgKSwKKworICAgIC8vIFRoZSBmb2xsb3dpbmcgZWxlbWVudHMgdGhy
b3cgdW5jYXRjaGFibGUgZXhjZXB0aW9ucyBpZiB5b3UKKyAgICAvLyBhdHRlbXB0IHRvIGFkZCBl
eHBhbmRvIHByb3BlcnRpZXMgdG8gdGhlbS4KKyAgICBub0RhdGE6IHsKKyAgICAgICAgImVtYmVk
IjogdHJ1ZSwKKyAgICAgICAgLy8gQmFuIGFsbCBvYmplY3RzIGV4Y2VwdCBmb3IgRmxhc2ggKHdo
aWNoIGhhbmRsZSBleHBhbmRvcykKKyAgICAgICAgIm9iamVjdCI6ICJjbHNpZDpEMjdDREI2RS1B
RTZELTExY2YtOTZCOC00NDQ1NTM1NDAwMDAiLAorICAgICAgICAiYXBwbGV0IjogdHJ1ZQorICAg
IH0sCisKKyAgICBoYXNEYXRhOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgZWxlbSA9IGVs
ZW0ubm9kZVR5cGUgPyBqUXVlcnkuY2FjaGVbIGVsZW1balF1ZXJ5LmV4cGFuZG9dIF0gOiBlbGVt
WyBqUXVlcnkuZXhwYW5kbyBdOworICAgICAgICByZXR1cm4gISFlbGVtICYmICFpc0VtcHR5RGF0
YU9iamVjdCggZWxlbSApOworICAgIH0sCisKKyAgICBkYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFt
ZSwgZGF0YSwgcHZ0IC8qIEludGVybmFsIFVzZSBPbmx5ICovICkgeworICAgICAgICBpZiAoICFq
UXVlcnkuYWNjZXB0RGF0YSggZWxlbSApICkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgdmFyIHRoaXNDYWNoZSwgcmV0LAorICAgICAgICAgICAgaW50ZXJuYWxL
ZXkgPSBqUXVlcnkuZXhwYW5kbywKKyAgICAgICAgICAgIGdldEJ5TmFtZSA9IHR5cGVvZiBuYW1l
ID09PSAic3RyaW5nIiwKKworICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBoYW5kbGUgRE9NIG5v
ZGVzIGFuZCBKUyBvYmplY3RzIGRpZmZlcmVudGx5IGJlY2F1c2UgSUU2LTcKKyAgICAgICAgICAg
IC8vIGNhbid0IEdDIG9iamVjdCByZWZlcmVuY2VzIHByb3Blcmx5IGFjcm9zcyB0aGUgRE9NLUpT
IGJvdW5kYXJ5CisgICAgICAgICAgICBpc05vZGUgPSBlbGVtLm5vZGVUeXBlLAorCisgICAgICAg
ICAgICAvLyBPbmx5IERPTSBub2RlcyBuZWVkIHRoZSBnbG9iYWwgalF1ZXJ5IGNhY2hlOyBKUyBv
YmplY3QgZGF0YSBpcworICAgICAgICAgICAgLy8gYXR0YWNoZWQgZGlyZWN0bHkgdG8gdGhlIG9i
amVjdCBzbyBHQyBjYW4gb2NjdXIgYXV0b21hdGljYWxseQorICAgICAgICAgICAgY2FjaGUgPSBp
c05vZGUgPyBqUXVlcnkuY2FjaGUgOiBlbGVtLAorCisgICAgICAgICAgICAvLyBPbmx5IGRlZmlu
aW5nIGFuIElEIGZvciBKUyBvYmplY3RzIGlmIGl0cyBjYWNoZSBhbHJlYWR5IGV4aXN0cyBhbGxv
d3MKKyAgICAgICAgICAgIC8vIHRoZSBjb2RlIHRvIHNob3J0Y3V0IG9uIHRoZSBzYW1lIHBhdGgg
YXMgYSBET00gbm9kZSB3aXRoIG5vIGNhY2hlCisgICAgICAgICAgICBpZCA9IGlzTm9kZSA/IGVs
ZW1bIGludGVybmFsS2V5IF0gOiBlbGVtWyBpbnRlcm5hbEtleSBdICYmIGludGVybmFsS2V5Owor
CisgICAgICAgIC8vIEF2b2lkIGRvaW5nIGFueSBtb3JlIHdvcmsgdGhhbiB3ZSBuZWVkIHRvIHdo
ZW4gdHJ5aW5nIHRvIGdldCBkYXRhIG9uIGFuCisgICAgICAgIC8vIG9iamVjdCB0aGF0IGhhcyBu
byBkYXRhIGF0IGFsbAorICAgICAgICBpZiAoICghaWQgfHwgIWNhY2hlW2lkXSB8fCAoIXB2dCAm
JiAhY2FjaGVbaWRdLmRhdGEpKSAmJiBnZXRCeU5hbWUgJiYgZGF0YSA9PT0gdW5kZWZpbmVkICkg
eworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCAhaWQgKSB7
CisgICAgICAgICAgICAvLyBPbmx5IERPTSBub2RlcyBuZWVkIGEgbmV3IHVuaXF1ZSBJRCBmb3Ig
ZWFjaCBlbGVtZW50IHNpbmNlIHRoZWlyIGRhdGEKKyAgICAgICAgICAgIC8vIGVuZHMgdXAgaW4g
dGhlIGdsb2JhbCBjYWNoZQorICAgICAgICAgICAgaWYgKCBpc05vZGUgKSB7CisgICAgICAgICAg
ICAgICAgZWxlbVsgaW50ZXJuYWxLZXkgXSA9IGlkID0galF1ZXJ5LmRlbGV0ZWRJZHMucG9wKCkg
fHwgalF1ZXJ5Lmd1aWQrKzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
aWQgPSBpbnRlcm5hbEtleTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlm
ICggIWNhY2hlWyBpZCBdICkgeworICAgICAgICAgICAgY2FjaGVbIGlkIF0gPSB7fTsKKworICAg
ICAgICAgICAgLy8gQXZvaWRzIGV4cG9zaW5nIGpRdWVyeSBtZXRhZGF0YSBvbiBwbGFpbiBKUyBv
YmplY3RzIHdoZW4gdGhlIG9iamVjdAorICAgICAgICAgICAgLy8gaXMgc2VyaWFsaXplZCB1c2lu
ZyBKU09OLnN0cmluZ2lmeQorICAgICAgICAgICAgaWYgKCAhaXNOb2RlICkgeworICAgICAgICAg
ICAgICAgIGNhY2hlWyBpZCBdLnRvSlNPTiA9IGpRdWVyeS5ub29wOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgLy8gQW4gb2JqZWN0IGNhbiBiZSBwYXNzZWQgdG8galF1ZXJ5
LmRhdGEgaW5zdGVhZCBvZiBhIGtleS92YWx1ZSBwYWlyOyB0aGlzIGdldHMKKyAgICAgICAgLy8g
c2hhbGxvdyBjb3BpZWQgb3ZlciBvbnRvIHRoZSBleGlzdGluZyBjYWNoZQorICAgICAgICBpZiAo
IHR5cGVvZiBuYW1lID09PSAib2JqZWN0IiB8fCB0eXBlb2YgbmFtZSA9PT0gImZ1bmN0aW9uIiAp
IHsKKyAgICAgICAgICAgIGlmICggcHZ0ICkgeworICAgICAgICAgICAgICAgIGNhY2hlWyBpZCBd
ID0galF1ZXJ5LmV4dGVuZCggY2FjaGVbIGlkIF0sIG5hbWUgKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgY2FjaGVbIGlkIF0uZGF0YSA9IGpRdWVyeS5leHRlbmQoIGNh
Y2hlWyBpZCBdLmRhdGEsIG5hbWUgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIHRoaXNDYWNoZSA9IGNhY2hlWyBpZCBdOworCisgICAgICAgIC8vIGpRdWVyeSBkYXRhKCkg
aXMgc3RvcmVkIGluIGEgc2VwYXJhdGUgb2JqZWN0IGluc2lkZSB0aGUgb2JqZWN0J3MgaW50ZXJu
YWwgZGF0YQorICAgICAgICAvLyBjYWNoZSBpbiBvcmRlciB0byBhdm9pZCBrZXkgY29sbGlzaW9u
cyBiZXR3ZWVuIGludGVybmFsIGRhdGEgYW5kIHVzZXItZGVmaW5lZAorICAgICAgICAvLyBkYXRh
LgorICAgICAgICBpZiAoICFwdnQgKSB7CisgICAgICAgICAgICBpZiAoICF0aGlzQ2FjaGUuZGF0
YSApIHsKKyAgICAgICAgICAgICAgICB0aGlzQ2FjaGUuZGF0YSA9IHt9OworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICB0aGlzQ2FjaGUgPSB0aGlzQ2FjaGUuZGF0YTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgdGhpc0Nh
Y2hlWyBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lICkgXSA9IGRhdGE7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBDaGVjayBmb3IgYm90aCBjb252ZXJ0ZWQtdG8tY2FtZWwgYW5kIG5vbi1jb252ZXJ0
ZWQgZGF0YSBwcm9wZXJ0eSBuYW1lcworICAgICAgICAvLyBJZiBhIGRhdGEgcHJvcGVydHkgd2Fz
IHNwZWNpZmllZAorICAgICAgICBpZiAoIGdldEJ5TmFtZSApIHsKKworICAgICAgICAgICAgLy8g
Rmlyc3QgVHJ5IHRvIGZpbmQgYXMtaXMgcHJvcGVydHkgZGF0YQorICAgICAgICAgICAgcmV0ID0g
dGhpc0NhY2hlWyBuYW1lIF07CisKKyAgICAgICAgICAgIC8vIFRlc3QgZm9yIG51bGx8dW5kZWZp
bmVkIHByb3BlcnR5IGRhdGEKKyAgICAgICAgICAgIGlmICggcmV0ID09IG51bGwgKSB7CisKKyAg
ICAgICAgICAgICAgICAvLyBUcnkgdG8gZmluZCB0aGUgY2FtZWxDYXNlZCBwcm9wZXJ0eQorICAg
ICAgICAgICAgICAgIHJldCA9IHRoaXNDYWNoZVsgalF1ZXJ5LmNhbWVsQ2FzZSggbmFtZSApIF07
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXQgPSB0aGlz
Q2FjaGU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0OworICAgIH0sCisKKyAgICBy
ZW1vdmVEYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgcHZ0IC8qIEludGVybmFsIFVzZSBPbmx5
ICovICkgeworICAgICAgICBpZiAoICFqUXVlcnkuYWNjZXB0RGF0YSggZWxlbSApICkgeworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHRoaXNDYWNoZSwgaSwg
bCwKKworICAgICAgICAgICAgaXNOb2RlID0gZWxlbS5ub2RlVHlwZSwKKworICAgICAgICAgICAg
Ly8gU2VlIGpRdWVyeS5kYXRhIGZvciBtb3JlIGluZm9ybWF0aW9uCisgICAgICAgICAgICBjYWNo
ZSA9IGlzTm9kZSA/IGpRdWVyeS5jYWNoZSA6IGVsZW0sCisgICAgICAgICAgICBpZCA9IGlzTm9k
ZSA/IGVsZW1bIGpRdWVyeS5leHBhbmRvIF0gOiBqUXVlcnkuZXhwYW5kbzsKKworICAgICAgICAv
LyBJZiB0aGVyZSBpcyBhbHJlYWR5IG5vIGNhY2hlIGVudHJ5IGZvciB0aGlzIG9iamVjdCwgdGhl
cmUgaXMgbm8KKyAgICAgICAgLy8gcHVycG9zZSBpbiBjb250aW51aW5nCisgICAgICAgIGlmICgg
IWNhY2hlWyBpZCBdICkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKCBuYW1lICkgeworCisgICAgICAgICAgICB0aGlzQ2FjaGUgPSBwdnQgPyBjYWNoZVsg
aWQgXSA6IGNhY2hlWyBpZCBdLmRhdGE7CisKKyAgICAgICAgICAgIGlmICggdGhpc0NhY2hlICkg
eworCisgICAgICAgICAgICAgICAgLy8gU3VwcG9ydCBhcnJheSBvciBzcGFjZSBzZXBhcmF0ZWQg
c3RyaW5nIG5hbWVzIGZvciBkYXRhIGtleXMKKyAgICAgICAgICAgICAgICBpZiAoICFqUXVlcnku
aXNBcnJheSggbmFtZSApICkgeworCisgICAgICAgICAgICAgICAgICAgIC8vIHRyeSB0aGUgc3Ry
aW5nIGFzIGEga2V5IGJlZm9yZSBhbnkgbWFuaXB1bGF0aW9uCisgICAgICAgICAgICAgICAgICAg
IGlmICggbmFtZSBpbiB0aGlzQ2FjaGUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuYW1l
ID0gWyBuYW1lIF07CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHNwbGl0IHRoZSBjYW1lbCBjYXNlZCB2ZXJzaW9uIGJ5IHNwYWNlcyB1
bmxlc3MgYSBrZXkgd2l0aCB0aGUgc3BhY2VzIGV4aXN0cworICAgICAgICAgICAgICAgICAgICAg
ICAgbmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUgKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggbmFtZSBpbiB0aGlzQ2FjaGUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbmFtZSA9IFsgbmFtZSBdOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5zcGxpdCgiICIpOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgZm9yICggaSA9IDAsIGwgPSBuYW1lLmxlbmd0aDsgaSA8
IGw7IGkrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXNDYWNoZVsgbmFtZVtp
XSBdOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlz
IG5vIGRhdGEgbGVmdCBpbiB0aGUgY2FjaGUsIHdlIHdhbnQgdG8gY29udGludWUKKyAgICAgICAg
ICAgICAgICAvLyBhbmQgbGV0IHRoZSBjYWNoZSBvYmplY3QgaXRzZWxmIGdldCBkZXN0cm95ZWQK
KyAgICAgICAgICAgICAgICBpZiAoICEoIHB2dCA/IGlzRW1wdHlEYXRhT2JqZWN0IDogalF1ZXJ5
LmlzRW1wdHlPYmplY3QgKSggdGhpc0NhY2hlICkgKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICAvLyBTZWUgalF1ZXJ5LmRhdGEgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyAgICAgICAgaWYg
KCAhcHZ0ICkgeworICAgICAgICAgICAgZGVsZXRlIGNhY2hlWyBpZCBdLmRhdGE7CisKKyAgICAg
ICAgICAgIC8vIERvbid0IGRlc3Ryb3kgdGhlIHBhcmVudCBjYWNoZSB1bmxlc3MgdGhlIGludGVy
bmFsIGRhdGEgb2JqZWN0CisgICAgICAgICAgICAvLyBoYWQgYmVlbiB0aGUgb25seSB0aGluZyBs
ZWZ0IGluIGl0CisgICAgICAgICAgICBpZiAoICFpc0VtcHR5RGF0YU9iamVjdCggY2FjaGVbIGlk
IF0gKSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICAvLyBEZXN0cm95IHRoZSBjYWNoZQorICAgICAgICBpZiAoIGlzTm9kZSAp
IHsKKyAgICAgICAgICAgIGpRdWVyeS5jbGVhbkRhdGEoIFsgZWxlbSBdLCB0cnVlICk7CisKKyAg
ICAgICAgLy8gVXNlIGRlbGV0ZSB3aGVuIHN1cHBvcnRlZCBmb3IgZXhwYW5kb3Mgb3IgYGNhY2hl
YCBpcyBub3QgYSB3aW5kb3cgcGVyIGlzV2luZG93ICgjMTAwODApCisgICAgICAgIH0gZWxzZSBp
ZiAoIGpRdWVyeS5zdXBwb3J0LmRlbGV0ZUV4cGFuZG8gfHwgY2FjaGUgIT0gY2FjaGUud2luZG93
ICkgeworICAgICAgICAgICAgZGVsZXRlIGNhY2hlWyBpZCBdOworCisgICAgICAgIC8vIFdoZW4g
YWxsIGVsc2UgZmFpbHMsIG51bGwKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNhY2hl
WyBpZCBdID0gbnVsbDsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICAvLyBGb3IgaW50ZXJuYWwg
dXNlIG9ubHkuCisgICAgX2RhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkgeworICAg
ICAgICByZXR1cm4galF1ZXJ5LmRhdGEoIGVsZW0sIG5hbWUsIGRhdGEsIHRydWUgKTsKKyAgICB9
LAorCisgICAgLy8gQSBtZXRob2QgZm9yIGRldGVybWluaW5nIGlmIGEgRE9NIG5vZGUgY2FuIGhh
bmRsZSB0aGUgZGF0YSBleHBhbmRvCisgICAgYWNjZXB0RGF0YTogZnVuY3Rpb24oIGVsZW0gKSB7
CisgICAgICAgIHZhciBub0RhdGEgPSBlbGVtLm5vZGVOYW1lICYmIGpRdWVyeS5ub0RhdGFbIGVs
ZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdOworCisgICAgICAgIC8vIG5vZGVzIGFjY2VwdCBk
YXRhIHVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkOyByZWplY3Rpb24gY2FuIGJlIGNvbmRpdGlv
bmFsCisgICAgICAgIHJldHVybiAhbm9EYXRhIHx8IG5vRGF0YSAhPT0gdHJ1ZSAmJiBlbGVtLmdl
dEF0dHJpYnV0ZSgiY2xhc3NpZCIpID09PSBub0RhdGE7CisgICAgfQorfSk7CisKK2pRdWVyeS5m
bi5leHRlbmQoeworICAgIGRhdGE6IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkgeworICAgICAgICB2
YXIgcGFydHMsIHBhcnQsIGF0dHIsIG5hbWUsIGwsCisgICAgICAgICAgICBlbGVtID0gdGhpc1sw
XSwKKyAgICAgICAgICAgIGkgPSAwLAorICAgICAgICAgICAgZGF0YSA9IG51bGw7CisKKyAgICAg
ICAgLy8gR2V0cyBhbGwgdmFsdWVzCisgICAgICAgIGlmICgga2V5ID09PSB1bmRlZmluZWQgKSB7
CisgICAgICAgICAgICBpZiAoIHRoaXMubGVuZ3RoICkgeworICAgICAgICAgICAgICAgIGRhdGEg
PSBqUXVlcnkuZGF0YSggZWxlbSApOworCisgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVU
eXBlID09PSAxICYmICFqUXVlcnkuX2RhdGEoIGVsZW0sICJwYXJzZWRBdHRycyIgKSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgYXR0ciA9IGVsZW0uYXR0cmlidXRlczsKKyAgICAgICAgICAgICAg
ICAgICAgZm9yICggbCA9IGF0dHIubGVuZ3RoOyBpIDwgbDsgaSsrICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgbmFtZSA9IGF0dHJbaV0ubmFtZTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCAhbmFtZS5pbmRleE9mKCAiZGF0YS0iICkgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUuc3Vic3RyaW5nKDUpICk7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhQXR0ciggZWxlbSwgbmFtZSwgZGF0YVsg
bmFtZSBdICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Ll9kYXRhKCBlbGVtLCAicGFyc2VkQXR0cnMi
LCB0cnVlICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICByZXR1cm4gZGF0YTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNldHMgbXVsdGlwbGUgdmFs
dWVzCisgICAgICAgIGlmICggdHlwZW9mIGtleSA9PT0gIm9iamVjdCIgKSB7CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGpRdWVyeS5k
YXRhKCB0aGlzLCBrZXkgKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAg
cGFydHMgPSBrZXkuc3BsaXQoICIuIiwgMiApOworICAgICAgICBwYXJ0c1sxXSA9IHBhcnRzWzFd
ID8gIi4iICsgcGFydHNbMV0gOiAiIjsKKyAgICAgICAgcGFydCA9IHBhcnRzWzFdICsgIiEiOwor
CisgICAgICAgIHJldHVybiBqUXVlcnkuYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7
CisKKyAgICAgICAgICAgIGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAg
ICAgICBkYXRhID0gdGhpcy50cmlnZ2VySGFuZGxlciggImdldERhdGEiICsgcGFydCwgWyBwYXJ0
c1swXSBdICk7CisKKyAgICAgICAgICAgICAgICAvLyBUcnkgdG8gZmV0Y2ggYW55IGludGVybmFs
bHkgc3RvcmVkIGRhdGEgZmlyc3QKKyAgICAgICAgICAgICAgICBpZiAoIGRhdGEgPT09IHVuZGVm
aW5lZCAmJiBlbGVtICkgeworICAgICAgICAgICAgICAgICAgICBkYXRhID0galF1ZXJ5LmRhdGEo
IGVsZW0sIGtleSApOworICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YUF0dHIoIGVsZW0s
IGtleSwgZGF0YSApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVy
biBkYXRhID09PSB1bmRlZmluZWQgJiYgcGFydHNbMV0gPworICAgICAgICAgICAgICAgICAgICB0
aGlzLmRhdGEoIHBhcnRzWzBdICkgOgorICAgICAgICAgICAgICAgICAgICBkYXRhOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBwYXJ0c1sxXSA9IHZhbHVlOworICAgICAgICAgICAgdGhp
cy5lYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHZhciBzZWxmID0galF1ZXJ5KCB0
aGlzICk7CisKKyAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXJIYW5kbGVyKCAic2V0RGF0YSIg
KyBwYXJ0LCBwYXJ0cyApOworICAgICAgICAgICAgICAgIGpRdWVyeS5kYXRhKCB0aGlzLCBrZXks
IHZhbHVlICk7CisgICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VySGFuZGxlciggImNoYW5nZURh
dGEiICsgcGFydCwgcGFydHMgKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9LCBudWxsLCB2
YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEsIG51bGwsIGZhbHNlICk7CisgICAgfSwKKworICAg
IHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBrZXkgKSB7CisgICAgICAgIHJldHVybiB0aGlzLmVhY2go
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBqUXVlcnkucmVtb3ZlRGF0YSggdGhpcywga2V5ICk7
CisgICAgICAgIH0pOworICAgIH0KK30pOworCitmdW5jdGlvbiBkYXRhQXR0ciggZWxlbSwga2V5
LCBkYXRhICkgeworICAgIC8vIElmIG5vdGhpbmcgd2FzIGZvdW5kIGludGVybmFsbHksIHRyeSB0
byBmZXRjaCBhbnkKKyAgICAvLyBkYXRhIGZyb20gdGhlIEhUTUw1IGRhdGEtKiBhdHRyaWJ1dGUK
KyAgICBpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkgewor
CisgICAgICAgIHZhciBuYW1lID0gImRhdGEtIiArIGtleS5yZXBsYWNlKCBybXVsdGlEYXNoLCAi
LSQxIiApLnRvTG93ZXJDYXNlKCk7CisKKyAgICAgICAgZGF0YSA9IGVsZW0uZ2V0QXR0cmlidXRl
KCBuYW1lICk7CisKKyAgICAgICAgaWYgKCB0eXBlb2YgZGF0YSA9PT0gInN0cmluZyIgKSB7Cisg
ICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhID09PSAidHJ1ZSIg
PyB0cnVlIDoKKyAgICAgICAgICAgICAgICBkYXRhID09PSAiZmFsc2UiID8gZmFsc2UgOgorICAg
ICAgICAgICAgICAgIGRhdGEgPT09ICJudWxsIiA/IG51bGwgOgorICAgICAgICAgICAgICAgIC8v
IE9ubHkgY29udmVydCB0byBhIG51bWJlciBpZiBpdCBkb2Vzbid0IGNoYW5nZSB0aGUgc3RyaW5n
CisgICAgICAgICAgICAgICAgK2RhdGEgKyAiIiA9PT0gZGF0YSA/ICtkYXRhIDoKKyAgICAgICAg
ICAgICAgICByYnJhY2UudGVzdCggZGF0YSApID8galF1ZXJ5LnBhcnNlSlNPTiggZGF0YSApIDoK
KyAgICAgICAgICAgICAgICAgICAgZGF0YTsKKyAgICAgICAgICAgIH0gY2F0Y2goIGUgKSB7fQor
CisgICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2Ugc2V0IHRoZSBkYXRhIHNvIGl0IGlzbid0IGNo
YW5nZWQgbGF0ZXIKKyAgICAgICAgICAgIGpRdWVyeS5kYXRhKCBlbGVtLCBrZXksIGRhdGEgKTsK
KworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGF0YSA9IHVuZGVmaW5lZDsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiBkYXRhOworfQorCisvLyBjaGVja3MgYSBjYWNoZSBv
YmplY3QgZm9yIGVtcHRpbmVzcworZnVuY3Rpb24gaXNFbXB0eURhdGFPYmplY3QoIG9iaiApIHsK
KyAgICB2YXIgbmFtZTsKKyAgICBmb3IgKCBuYW1lIGluIG9iaiApIHsKKworICAgICAgICAvLyBp
ZiB0aGUgcHVibGljIGRhdGEgb2JqZWN0IGlzIGVtcHR5LCB0aGUgcHJpdmF0ZSBpcyBzdGlsbCBl
bXB0eQorICAgICAgICBpZiAoIG5hbWUgPT09ICJkYXRhIiAmJiBqUXVlcnkuaXNFbXB0eU9iamVj
dCggb2JqW25hbWVdICkgKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoIG5hbWUgIT09ICJ0b0pTT04iICkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CitqUXVlcnkuZXh0ZW5k
KHsKKyAgICBxdWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGRhdGEgKSB7CisgICAgICAgIHZh
ciBxdWV1ZTsKKworICAgICAgICBpZiAoIGVsZW0gKSB7CisgICAgICAgICAgICB0eXBlID0gKCB0
eXBlIHx8ICJmeCIgKSArICJxdWV1ZSI7CisgICAgICAgICAgICBxdWV1ZSA9IGpRdWVyeS5fZGF0
YSggZWxlbSwgdHlwZSApOworCisgICAgICAgICAgICAvLyBTcGVlZCB1cCBkZXF1ZXVlIGJ5IGdl
dHRpbmcgb3V0IHF1aWNrbHkgaWYgdGhpcyBpcyBqdXN0IGEgbG9va3VwCisgICAgICAgICAgICBp
ZiAoIGRhdGEgKSB7CisgICAgICAgICAgICAgICAgaWYgKCAhcXVldWUgfHwgalF1ZXJ5LmlzQXJy
YXkoZGF0YSkgKSB7CisgICAgICAgICAgICAgICAgICAgIHF1ZXVlID0galF1ZXJ5Ll9kYXRhKCBl
bGVtLCB0eXBlLCBqUXVlcnkubWFrZUFycmF5KGRhdGEpICk7CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcXVldWUucHVzaCggZGF0YSApOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBxdWV1ZSB8fCBbXTsK
KyAgICAgICAgfQorICAgIH0sCisKKyAgICBkZXF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlwZSAp
IHsKKyAgICAgICAgdHlwZSA9IHR5cGUgfHwgImZ4IjsKKworICAgICAgICB2YXIgcXVldWUgPSBq
UXVlcnkucXVldWUoIGVsZW0sIHR5cGUgKSwKKyAgICAgICAgICAgIHN0YXJ0TGVuZ3RoID0gcXVl
dWUubGVuZ3RoLAorICAgICAgICAgICAgZm4gPSBxdWV1ZS5zaGlmdCgpLAorICAgICAgICAgICAg
aG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sIHR5cGUgKSwKKyAgICAgICAgICAgIG5l
eHQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkuZGVxdWV1ZSggZWxlbSwg
dHlwZSApOworICAgICAgICAgICAgfTsKKworICAgICAgICAvLyBJZiB0aGUgZnggcXVldWUgaXMg
ZGVxdWV1ZWQsIGFsd2F5cyByZW1vdmUgdGhlIHByb2dyZXNzIHNlbnRpbmVsCisgICAgICAgIGlm
ICggZm4gPT09ICJpbnByb2dyZXNzIiApIHsKKyAgICAgICAgICAgIGZuID0gcXVldWUuc2hpZnQo
KTsKKyAgICAgICAgICAgIHN0YXJ0TGVuZ3RoLS07CisgICAgICAgIH0KKworICAgICAgICBpZiAo
IGZuICkgeworCisgICAgICAgICAgICAvLyBBZGQgYSBwcm9ncmVzcyBzZW50aW5lbCB0byBwcmV2
ZW50IHRoZSBmeCBxdWV1ZSBmcm9tIGJlaW5nCisgICAgICAgICAgICAvLyBhdXRvbWF0aWNhbGx5
IGRlcXVldWVkCisgICAgICAgICAgICBpZiAoIHR5cGUgPT09ICJmeCIgKSB7CisgICAgICAgICAg
ICAgICAgcXVldWUudW5zaGlmdCggImlucHJvZ3Jlc3MiICk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIGNsZWFyIHVwIHRoZSBsYXN0IHF1ZXVlIHN0b3AgZnVuY3Rpb24KKyAgICAg
ICAgICAgIGRlbGV0ZSBob29rcy5zdG9wOworICAgICAgICAgICAgZm4uY2FsbCggZWxlbSwgbmV4
dCwgaG9va3MgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggIXN0YXJ0TGVuZ3RoICYmIGhv
b2tzICkgeworICAgICAgICAgICAgaG9va3MuZW1wdHkuZmlyZSgpOworICAgICAgICB9CisgICAg
fSwKKworICAgIC8vIG5vdCBpbnRlbmRlZCBmb3IgcHVibGljIGNvbnN1bXB0aW9uIC0gZ2VuZXJh
dGVzIGEgcXVldWVIb29rcyBvYmplY3QsIG9yIHJldHVybnMgdGhlIGN1cnJlbnQgb25lCisgICAg
X3F1ZXVlSG9va3M6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkgeworICAgICAgICB2YXIga2V5ID0g
dHlwZSArICJxdWV1ZUhvb2tzIjsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5fZGF0YSggZWxlbSwg
a2V5ICkgfHwgalF1ZXJ5Ll9kYXRhKCBlbGVtLCBrZXksIHsKKyAgICAgICAgICAgIGVtcHR5OiBq
UXVlcnkuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLmFkZChmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgICAgICBqUXVlcnkucmVtb3ZlRGF0YSggZWxlbSwgdHlwZSArICJxdWV1ZSIsIHRydWUgKTsK
KyAgICAgICAgICAgICAgICBqUXVlcnkucmVtb3ZlRGF0YSggZWxlbSwga2V5LCB0cnVlICk7Cisg
ICAgICAgICAgICB9KQorICAgICAgICB9KTsKKyAgICB9Cit9KTsKKworalF1ZXJ5LmZuLmV4dGVu
ZCh7CisgICAgcXVldWU6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkgeworICAgICAgICB2YXIgc2V0
dGVyID0gMjsKKworICAgICAgICBpZiAoIHR5cGVvZiB0eXBlICE9PSAic3RyaW5nIiApIHsKKyAg
ICAgICAgICAgIGRhdGEgPSB0eXBlOworICAgICAgICAgICAgdHlwZSA9ICJmeCI7CisgICAgICAg
ICAgICBzZXR0ZXItLTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggYXJndW1lbnRzLmxlbmd0
aCA8IHNldHRlciApIHsKKyAgICAgICAgICAgIHJldHVybiBqUXVlcnkucXVldWUoIHRoaXNbMF0s
IHR5cGUgKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkYXRhID09PSB1bmRlZmluZWQg
PworICAgICAgICAgICAgdGhpcyA6CisgICAgICAgICAgICB0aGlzLmVhY2goZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICAgICAgdmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBk
YXRhICk7CisKKyAgICAgICAgICAgICAgICAvLyBlbnN1cmUgYSBob29rcyBmb3IgdGhpcyBxdWV1
ZQorICAgICAgICAgICAgICAgIGpRdWVyeS5fcXVldWVIb29rcyggdGhpcywgdHlwZSApOworCisg
ICAgICAgICAgICAgICAgaWYgKCB0eXBlID09PSAiZngiICYmIHF1ZXVlWzBdICE9PSAiaW5wcm9n
cmVzcyIgKSB7CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBl
ICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgfSwKKyAgICBkZXF1
ZXVlOiBmdW5jdGlvbiggdHlwZSApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgIGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7CisgICAgICAg
IH0pOworICAgIH0sCisgICAgLy8gQmFzZWQgb2ZmIG9mIHRoZSBwbHVnaW4gYnkgQ2xpbnQgSGVs
ZmVycywgd2l0aCBwZXJtaXNzaW9uLgorICAgIC8vIGh0dHA6Ly9ibGluZHNpZ25hbHMuY29tL2lu
ZGV4LnBocC8yMDA5LzA3L2pxdWVyeS1kZWxheS8KKyAgICBkZWxheTogZnVuY3Rpb24oIHRpbWUs
IHR5cGUgKSB7CisgICAgICAgIHRpbWUgPSBqUXVlcnkuZnggPyBqUXVlcnkuZnguc3BlZWRzWyB0
aW1lIF0gfHwgdGltZSA6IHRpbWU7CisgICAgICAgIHR5cGUgPSB0eXBlIHx8ICJmeCI7CisKKyAg
ICAgICAgcmV0dXJuIHRoaXMucXVldWUoIHR5cGUsIGZ1bmN0aW9uKCBuZXh0LCBob29rcyApIHsK
KyAgICAgICAgICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dCggbmV4dCwgdGltZSApOworICAg
ICAgICAgICAgaG9va3Muc3RvcCA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGNsZWFy
VGltZW91dCggdGltZW91dCApOworICAgICAgICAgICAgfTsKKyAgICAgICAgfSk7CisgICAgfSwK
KyAgICBjbGVhclF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
cXVldWUoIHR5cGUgfHwgImZ4IiwgW10gKTsKKyAgICB9LAorICAgIC8vIEdldCBhIHByb21pc2Ug
cmVzb2x2ZWQgd2hlbiBxdWV1ZXMgb2YgYSBjZXJ0YWluIHR5cGUKKyAgICAvLyBhcmUgZW1wdGll
ZCAoZnggaXMgdGhlIHR5cGUgYnkgZGVmYXVsdCkKKyAgICBwcm9taXNlOiBmdW5jdGlvbiggdHlw
ZSwgb2JqICkgeworICAgICAgICB2YXIgdG1wLAorICAgICAgICAgICAgY291bnQgPSAxLAorICAg
ICAgICAgICAgZGVmZXIgPSBqUXVlcnkuRGVmZXJyZWQoKSwKKyAgICAgICAgICAgIGVsZW1lbnRz
ID0gdGhpcywKKyAgICAgICAgICAgIGkgPSB0aGlzLmxlbmd0aCwKKyAgICAgICAgICAgIHJlc29s
dmUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBpZiAoICEoIC0tY291bnQgKSApIHsK
KyAgICAgICAgICAgICAgICAgICAgZGVmZXIucmVzb2x2ZVdpdGgoIGVsZW1lbnRzLCBbIGVsZW1l
bnRzIF0gKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworCisgICAgICAgIGlm
ICggdHlwZW9mIHR5cGUgIT09ICJzdHJpbmciICkgeworICAgICAgICAgICAgb2JqID0gdHlwZTsK
KyAgICAgICAgICAgIHR5cGUgPSB1bmRlZmluZWQ7CisgICAgICAgIH0KKyAgICAgICAgdHlwZSA9
IHR5cGUgfHwgImZ4IjsKKworICAgICAgICB3aGlsZSggaS0tICkgeworICAgICAgICAgICAgdG1w
ID0galF1ZXJ5Ll9kYXRhKCBlbGVtZW50c1sgaSBdLCB0eXBlICsgInF1ZXVlSG9va3MiICk7Cisg
ICAgICAgICAgICBpZiAoIHRtcCAmJiB0bXAuZW1wdHkgKSB7CisgICAgICAgICAgICAgICAgY291
bnQrKzsKKyAgICAgICAgICAgICAgICB0bXAuZW1wdHkuYWRkKCByZXNvbHZlICk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmVzb2x2ZSgpOworICAgICAgICByZXR1cm4gZGVm
ZXIucHJvbWlzZSggb2JqICk7CisgICAgfQorfSk7Cit2YXIgbm9kZUhvb2ssIGJvb2xIb29rLCBm
aXhTcGVjaWZpZWQsCisgICAgcmNsYXNzID0gL1tcdFxyXG5dL2csCisgICAgcnJldHVybiA9IC9c
ci9nLAorICAgIHJ0eXBlID0gL14oPzpidXR0b258aW5wdXQpJC9pLAorICAgIHJmb2N1c2FibGUg
PSAvXig/OmJ1dHRvbnxpbnB1dHxvYmplY3R8c2VsZWN0fHRleHRhcmVhKSQvaSwKKyAgICByY2xp
Y2thYmxlID0gL15hKD86cmVhfCkkL2ksCisgICAgcmJvb2xlYW4gPSAvXig/OmF1dG9mb2N1c3xh
dXRvcGxheXxhc3luY3xjaGVja2VkfGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxsb29w
fG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkfHNlbGVjdGVkKSQvaSwKKyAg
ICBnZXRTZXRBdHRyaWJ1dGUgPSBqUXVlcnkuc3VwcG9ydC5nZXRTZXRBdHRyaWJ1dGU7CisKK2pR
dWVyeS5mbi5leHRlbmQoeworICAgIGF0dHI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKKyAg
ICAgICAgcmV0dXJuIGpRdWVyeS5hY2Nlc3MoIHRoaXMsIGpRdWVyeS5hdHRyLCBuYW1lLCB2YWx1
ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTsKKyAgICB9LAorCisgICAgcmVtb3ZlQXR0cjogZnVu
Y3Rpb24oIG5hbWUgKSB7CisgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgICBqUXVlcnkucmVtb3ZlQXR0ciggdGhpcywgbmFtZSApOworICAgICAgICB9KTsK
KyAgICB9LAorCisgICAgcHJvcDogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkgeworICAgICAgICBy
ZXR1cm4galF1ZXJ5LmFjY2VzcyggdGhpcywgalF1ZXJ5LnByb3AsIG5hbWUsIHZhbHVlLCBhcmd1
bWVudHMubGVuZ3RoID4gMSApOworICAgIH0sCisKKyAgICByZW1vdmVQcm9wOiBmdW5jdGlvbigg
bmFtZSApIHsKKyAgICAgICAgbmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTsK
KyAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIC8vIHRy
eS9jYXRjaCBoYW5kbGVzIGNhc2VzIHdoZXJlIElFIGJhbGtzIChzdWNoIGFzIHJlbW92aW5nIGEg
cHJvcGVydHkgb24gd2luZG93KQorICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICB0
aGlzWyBuYW1lIF0gPSB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXNbIG5h
bWUgXTsKKyAgICAgICAgICAgIH0gY2F0Y2goIGUgKSB7fQorICAgICAgICB9KTsKKyAgICB9LAor
CisgICAgYWRkQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKKyAgICAgICAgdmFyIGNsYXNzTmFt
ZXMsIGksIGwsIGVsZW0sCisgICAgICAgICAgICBzZXRDbGFzcywgYywgY2w7CisKKyAgICAgICAg
aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLmVhY2goZnVuY3Rpb24oIGogKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICku
YWRkQ2xhc3MoIHZhbHVlLmNhbGwodGhpcywgaiwgdGhpcy5jbGFzc05hbWUpICk7CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggdmFsdWUgJiYgdHlwZW9mIHZhbHVl
ID09PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgIGNsYXNzTmFtZXMgPSB2YWx1ZS5zcGxpdCgg
Y29yZV9yc3BhY2UgKTsKKworICAgICAgICAgICAgZm9yICggaSA9IDAsIGwgPSB0aGlzLmxlbmd0
aDsgaSA8IGw7IGkrKyApIHsKKyAgICAgICAgICAgICAgICBlbGVtID0gdGhpc1sgaSBdOworCisg
ICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoICFlbGVtLmNsYXNzTmFtZSAmJiBjbGFzc05hbWVzLmxlbmd0aCA9PT0gMSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NOYW1lID0gdmFsdWU7CisKKyAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldENs
YXNzID0gIiAiICsgZWxlbS5jbGFzc05hbWUgKyAiICI7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAoIGMgPSAwLCBjbCA9IGNsYXNzTmFtZXMubGVuZ3RoOyBjIDwgY2w7IGMrKyApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNldENsYXNzLmluZGV4T2YoICIgIiAr
IGNsYXNzTmFtZXNbIGMgXSArICIgIiApIDwgMCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2V0Q2xhc3MgKz0gY2xhc3NOYW1lc1sgYyBdICsgIiAiOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGVsZW0uY2xhc3NOYW1lID0galF1ZXJ5LnRyaW0oIHNldENsYXNzICk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgcmVtb3ZlQ2xh
c3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKKyAgICAgICAgdmFyIHJlbW92ZXMsIGNsYXNzTmFtZSwg
ZWxlbSwgYywgY2wsIGksIGw7CisKKyAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFs
dWUgKSApIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oIGogKSB7Cisg
ICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkucmVtb3ZlQ2xhc3MoIHZhbHVlLmNhbGwodGhp
cywgaiwgdGhpcy5jbGFzc05hbWUpICk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciKSB8fCB2YWx1ZSA9
PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgcmVtb3ZlcyA9ICggdmFsdWUgfHwgIiIgKS5z
cGxpdCggY29yZV9yc3BhY2UgKTsKKworICAgICAgICAgICAgZm9yICggaSA9IDAsIGwgPSB0aGlz
Lmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKKyAgICAgICAgICAgICAgICBlbGVtID0gdGhpc1sgaSBd
OworICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiBlbGVtLmNsYXNz
TmFtZSApIHsKKworICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSAoIiAiICsgZWxlbS5j
bGFzc05hbWUgKyAiICIpLnJlcGxhY2UoIHJjbGFzcywgIiAiICk7CisKKyAgICAgICAgICAgICAg
ICAgICAgLy8gbG9vcCBvdmVyIGVhY2ggaXRlbSBpbiB0aGUgcmVtb3ZhbCBsaXN0CisgICAgICAg
ICAgICAgICAgICAgIGZvciAoIGMgPSAwLCBjbCA9IHJlbW92ZXMubGVuZ3RoOyBjIDwgY2w7IGMr
KyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB1bnRpbCB0aGVyZSBpcyBu
b3RoaW5nIHRvIHJlbW92ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggY2xhc3NO
YW1lLmluZGV4T2YoIiAiICsgcmVtb3Zlc1sgYyBdICsgIiAiKSA+PSAwICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZS5yZXBsYWNlKCAiICIgKyBy
ZW1vdmVzWyBjIF0gKyAiICIgLCAiICIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTmFtZSA9
IHZhbHVlID8galF1ZXJ5LnRyaW0oIGNsYXNzTmFtZSApIDogIiI7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
fSwKKworICAgIHRvZ2dsZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUsIHN0YXRlVmFsICkgeworICAg
ICAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZSwKKyAgICAgICAgICAgIGlzQm9vbCA9IHR5cGVv
ZiBzdGF0ZVZhbCA9PT0gImJvb2xlYW4iOworCisgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rp
b24oIHZhbHVlICkgKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBp
ICkgeworICAgICAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLnRvZ2dsZUNsYXNzKCB2YWx1ZS5j
YWxsKHRoaXMsIGksIHRoaXMuY2xhc3NOYW1lLCBzdGF0ZVZhbCksIHN0YXRlVmFsICk7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICBpZiAoIHR5cGUgPT09ICJzdHJpbmciICkgeworICAgICAgICAg
ICAgICAgIC8vIHRvZ2dsZSBpbmRpdmlkdWFsIGNsYXNzIG5hbWVzCisgICAgICAgICAgICAgICAg
dmFyIGNsYXNzTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgaSA9IDAsCisgICAgICAgICAgICAg
ICAgICAgIHNlbGYgPSBqUXVlcnkoIHRoaXMgKSwKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUg
PSBzdGF0ZVZhbCwKKyAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lcyA9IHZhbHVlLnNwbGl0
KCBjb3JlX3JzcGFjZSApOworCisgICAgICAgICAgICAgICAgd2hpbGUgKCAoY2xhc3NOYW1lID0g
Y2xhc3NOYW1lc1sgaSsrIF0pICkgeworICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBlYWNo
IGNsYXNzTmFtZSBnaXZlbiwgc3BhY2Ugc2VwYXJhdGVkIGxpc3QKKyAgICAgICAgICAgICAgICAg
ICAgc3RhdGUgPSBpc0Jvb2wgPyBzdGF0ZSA6ICFzZWxmLmhhc0NsYXNzKCBjbGFzc05hbWUgKTsK
KyAgICAgICAgICAgICAgICAgICAgc2VsZlsgc3RhdGUgPyAiYWRkQ2xhc3MiIDogInJlbW92ZUNs
YXNzIiBdKCBjbGFzc05hbWUgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoIHR5cGUgPT09ICJ1bmRlZmluZWQiIHx8IHR5cGUgPT09ICJib29sZWFuIiApIHsK
KyAgICAgICAgICAgICAgICBpZiAoIHRoaXMuY2xhc3NOYW1lICkgeworICAgICAgICAgICAgICAg
ICAgICAvLyBzdG9yZSBjbGFzc05hbWUgaWYgc2V0CisgICAgICAgICAgICAgICAgICAgIGpRdWVy
eS5fZGF0YSggdGhpcywgIl9fY2xhc3NOYW1lX18iLCB0aGlzLmNsYXNzTmFtZSApOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIHRvZ2dsZSB3aG9sZSBjbGFzc05hbWUK
KyAgICAgICAgICAgICAgICB0aGlzLmNsYXNzTmFtZSA9IHRoaXMuY2xhc3NOYW1lIHx8IHZhbHVl
ID09PSBmYWxzZSA/ICIiIDogalF1ZXJ5Ll9kYXRhKCB0aGlzLCAiX19jbGFzc05hbWVfXyIgKSB8
fCAiIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfSwKKworICAgIGhhc0NsYXNz
OiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisgICAgICAgIHZhciBjbGFzc05hbWUgPSAiICIgKyBz
ZWxlY3RvciArICIgIiwKKyAgICAgICAgICAgIGkgPSAwLAorICAgICAgICAgICAgbCA9IHRoaXMu
bGVuZ3RoOworICAgICAgICBmb3IgKCA7IGkgPCBsOyBpKysgKSB7CisgICAgICAgICAgICBpZiAo
IHRoaXNbaV0ubm9kZVR5cGUgPT09IDEgJiYgKCIgIiArIHRoaXNbaV0uY2xhc3NOYW1lICsgIiAi
KS5yZXBsYWNlKHJjbGFzcywgIiAiKS5pbmRleE9mKCBjbGFzc05hbWUgKSA+PSAwICkgeworICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0sCisKKyAgICB2YWw6IGZ1bmN0aW9uKCB2YWx1ZSAp
IHsKKyAgICAgICAgdmFyIGhvb2tzLCByZXQsIGlzRnVuY3Rpb24sCisgICAgICAgICAgICBlbGVt
ID0gdGhpc1swXTsKKworICAgICAgICBpZiAoICFhcmd1bWVudHMubGVuZ3RoICkgeworICAgICAg
ICAgICAgaWYgKCBlbGVtICkgeworICAgICAgICAgICAgICAgIGhvb2tzID0galF1ZXJ5LnZhbEhv
b2tzWyBlbGVtLnR5cGUgXSB8fCBqUXVlcnkudmFsSG9va3NbIGVsZW0ubm9kZU5hbWUudG9Mb3dl
ckNhc2UoKSBdOworCisgICAgICAgICAgICAgICAgaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29r
cyAmJiAocmV0ID0gaG9va3MuZ2V0KCBlbGVtLCAidmFsdWUiICkpICE9PSB1bmRlZmluZWQgKSB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgcmV0ID0gZWxlbS52YWx1ZTsKKworICAgICAgICAgICAgICAgIHJldHVy
biB0eXBlb2YgcmV0ID09PSAic3RyaW5nIiA/CisgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRs
ZSBtb3N0IGNvbW1vbiBzdHJpbmcgY2FzZXMKKyAgICAgICAgICAgICAgICAgICAgcmV0LnJlcGxh
Y2UocnJldHVybiwgIiIpIDoKKyAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIGNhc2VzIHdo
ZXJlIHZhbHVlIGlzIG51bGwvdW5kZWYgb3IgbnVtYmVyCisgICAgICAgICAgICAgICAgICAgIHJl
dCA9PSBudWxsID8gIiIgOiByZXQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGlzRnVuY3Rpb24gPSBqUXVlcnkuaXNGdW5jdGlvbigg
dmFsdWUgKTsKKworICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBpICkgeworICAg
ICAgICAgICAgdmFyIHZhbCwKKyAgICAgICAgICAgICAgICBzZWxmID0galF1ZXJ5KHRoaXMpOwor
CisgICAgICAgICAgICBpZiAoIHRoaXMubm9kZVR5cGUgIT09IDEgKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIGlzRnVuY3Rpb24g
KSB7CisgICAgICAgICAgICAgICAgdmFsID0gdmFsdWUuY2FsbCggdGhpcywgaSwgc2VsZi52YWwo
KSApOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YWwgPSB2YWx1ZTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVHJlYXQgbnVsbC91bmRlZmluZWQgYXMg
IiI7IGNvbnZlcnQgbnVtYmVycyB0byBzdHJpbmcKKyAgICAgICAgICAgIGlmICggdmFsID09IG51
bGwgKSB7CisgICAgICAgICAgICAgICAgdmFsID0gIiI7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KCB0eXBlb2YgdmFsID09PSAibnVtYmVyIiApIHsKKyAgICAgICAgICAgICAgICB2YWwgKz0gIiI7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKCBqUXVlcnkuaXNBcnJheSggdmFsICkgKSB7CisgICAg
ICAgICAgICAgICAgdmFsID0galF1ZXJ5Lm1hcCh2YWwsIGZ1bmN0aW9uICggdmFsdWUgKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PSBudWxsID8gIiIgOiB2YWx1ZSArICIi
OworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBob29r
cyA9IGpRdWVyeS52YWxIb29rc1sgdGhpcy50eXBlIF0gfHwgalF1ZXJ5LnZhbEhvb2tzWyB0aGlz
Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTsKKworICAgICAgICAgICAgLy8gSWYgc2V0IHJldHVy
bnMgdW5kZWZpbmVkLCBmYWxsIGJhY2sgdG8gbm9ybWFsIHNldHRpbmcKKyAgICAgICAgICAgIGlm
ICggIWhvb2tzIHx8ICEoInNldCIgaW4gaG9va3MpIHx8IGhvb2tzLnNldCggdGhpcywgdmFsLCAi
dmFsdWUiICkgPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0g
dmFsOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9Cit9KTsKKworalF1ZXJ5LmV4
dGVuZCh7CisgICAgdmFsSG9va3M6IHsKKyAgICAgICAgb3B0aW9uOiB7CisgICAgICAgICAgICBn
ZXQ6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAgIC8vIGF0dHJpYnV0ZXMudmFs
dWUgaXMgdW5kZWZpbmVkIGluIEJsYWNrYmVycnkgNC43IGJ1dAorICAgICAgICAgICAgICAgIC8v
IHVzZXMgLnZhbHVlLiBTZWUgIzY5MzIKKyAgICAgICAgICAgICAgICB2YXIgdmFsID0gZWxlbS5h
dHRyaWJ1dGVzLnZhbHVlOworICAgICAgICAgICAgICAgIHJldHVybiAhdmFsIHx8IHZhbC5zcGVj
aWZpZWQgPyBlbGVtLnZhbHVlIDogZWxlbS50ZXh0OworICAgICAgICAgICAgfQorICAgICAgICB9
LAorICAgICAgICBzZWxlY3Q6IHsKKyAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0gKSB7
CisgICAgICAgICAgICAgICAgdmFyIHZhbHVlLCBvcHRpb24sCisgICAgICAgICAgICAgICAgICAg
IG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gZWxl
bS5zZWxlY3RlZEluZGV4LAorICAgICAgICAgICAgICAgICAgICBvbmUgPSBlbGVtLnR5cGUgPT09
ICJzZWxlY3Qtb25lIiB8fCBpbmRleCA8IDAsCisgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9
IG9uZSA/IG51bGwgOiBbXSwKKyAgICAgICAgICAgICAgICAgICAgbWF4ID0gb25lID8gaW5kZXgg
KyAxIDogb3B0aW9ucy5sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIGkgPSBpbmRleCA8IDAg
PworICAgICAgICAgICAgICAgICAgICAgICAgbWF4IDoKKyAgICAgICAgICAgICAgICAgICAgICAg
IG9uZSA/IGluZGV4IDogMDsKKworICAgICAgICAgICAgICAgIC8vIExvb3AgdGhyb3VnaCBhbGwg
dGhlIHNlbGVjdGVkIG9wdGlvbnMKKyAgICAgICAgICAgICAgICBmb3IgKCA7IGkgPCBtYXg7IGkr
KyApIHsKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9uID0gb3B0aW9uc1sgaSBdOworCisgICAg
ICAgICAgICAgICAgICAgIC8vIG9sZElFIGRvZXNuJ3QgdXBkYXRlIHNlbGVjdGVkIGFmdGVyIGZv
cm0gcmVzZXQgKCMyNTUxKQorICAgICAgICAgICAgICAgICAgICBpZiAoICggb3B0aW9uLnNlbGVj
dGVkIHx8IGkgPT09IGluZGV4ICkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBE
b24ndCByZXR1cm4gb3B0aW9ucyB0aGF0IGFyZSBkaXNhYmxlZCBvciBpbiBhIGRpc2FibGVkIG9w
dGdyb3VwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBqUXVlcnkuc3VwcG9ydC5vcHRE
aXNhYmxlZCA/ICFvcHRpb24uZGlzYWJsZWQgOiBvcHRpb24uZ2V0QXR0cmlidXRlKCJkaXNhYmxl
ZCIpID09PSBudWxsICkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICFvcHRpb24u
cGFyZW50Tm9kZS5kaXNhYmxlZCB8fCAhalF1ZXJ5Lm5vZGVOYW1lKCBvcHRpb24ucGFyZW50Tm9k
ZSwgIm9wdGdyb3VwIiApICkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCB0
aGUgc3BlY2lmaWMgdmFsdWUgZm9yIHRoZSBvcHRpb24KKyAgICAgICAgICAgICAgICAgICAgICAg
IHZhbHVlID0galF1ZXJ5KCBvcHRpb24gKS52YWwoKTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gV2UgZG9uJ3QgbmVlZCBhbiBhcnJheSBmb3Igb25lIHNlbGVjdHMKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggb25lICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gTXVsdGktU2VsZWN0cyByZXR1cm4gYW4gYXJyYXkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbHVlcy5wdXNoKCB2YWx1ZSApOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlczsKKyAgICAg
ICAgICAgIH0sCisKKyAgICAgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgewor
ICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBqUXVlcnkubWFrZUFycmF5KCB2YWx1ZSApOwor
CisgICAgICAgICAgICAgICAgalF1ZXJ5KGVsZW0pLmZpbmQoIm9wdGlvbiIpLmVhY2goZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQgPSBqUXVlcnkuaW5BcnJh
eSggalF1ZXJ5KHRoaXMpLnZhbCgpLCB2YWx1ZXMgKSA+PSAwOworICAgICAgICAgICAgICAgIH0p
OworCisgICAgICAgICAgICAgICAgaWYgKCAhdmFsdWVzLmxlbmd0aCApIHsKKyAgICAgICAgICAg
ICAgICAgICAgZWxlbS5zZWxlY3RlZEluZGV4ID0gLTE7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHJldHVybiB2YWx1ZXM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9LAorCisgICAgLy8gVW51c2VkIGluIDEuOCwgbGVmdCBpbiBzbyBhdHRyRm4tc3RhYmJlcnMg
d29uJ3QgZGllOyByZW1vdmUgaW4gMS45CisgICAgYXR0ckZuOiB7fSwKKworICAgIGF0dHI6IGZ1
bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSwgcGFzcyApIHsKKyAgICAgICAgdmFyIHJldCwgaG9v
a3MsIG5vdHhtbCwKKyAgICAgICAgICAgIG5UeXBlID0gZWxlbS5ub2RlVHlwZTsKKworICAgICAg
ICAvLyBkb24ndCBnZXQvc2V0IGF0dHJpYnV0ZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmli
dXRlIG5vZGVzCisgICAgICAgIGlmICggIWVsZW0gfHwgblR5cGUgPT09IDMgfHwgblR5cGUgPT09
IDggfHwgblR5cGUgPT09IDIgKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoIHBhc3MgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIGpRdWVyeS5mblsgbmFtZSBd
ICkgKSB7CisgICAgICAgICAgICByZXR1cm4galF1ZXJ5KCBlbGVtIClbIG5hbWUgXSggdmFsdWUg
KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZhbGxiYWNrIHRvIHByb3Agd2hlbiBhdHRyaWJ1
dGVzIGFyZSBub3Qgc3VwcG9ydGVkCisgICAgICAgIGlmICggdHlwZW9mIGVsZW0uZ2V0QXR0cmli
dXRlID09PSAidW5kZWZpbmVkIiApIHsKKyAgICAgICAgICAgIHJldHVybiBqUXVlcnkucHJvcCgg
ZWxlbSwgbmFtZSwgdmFsdWUgKTsKKyAgICAgICAgfQorCisgICAgICAgIG5vdHhtbCA9IG5UeXBl
ICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKTsKKworICAgICAgICAvLyBBbGwgYXR0
cmlidXRlcyBhcmUgbG93ZXJjYXNlCisgICAgICAgIC8vIEdyYWIgbmVjZXNzYXJ5IGhvb2sgaWYg
b25lIGlzIGRlZmluZWQKKyAgICAgICAgaWYgKCBub3R4bWwgKSB7CisgICAgICAgICAgICBuYW1l
ID0gbmFtZS50b0xvd2VyQ2FzZSgpOworICAgICAgICAgICAgaG9va3MgPSBqUXVlcnkuYXR0ckhv
b2tzWyBuYW1lIF0gfHwgKCByYm9vbGVhbi50ZXN0KCBuYW1lICkgPyBib29sSG9vayA6IG5vZGVI
b29rICk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7
CisKKyAgICAgICAgICAgIGlmICggdmFsdWUgPT09IG51bGwgKSB7CisgICAgICAgICAgICAgICAg
alF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIGhvb2tzICYmICJzZXQiIGluIGhvb2tzICYmIG5v
dHhtbCAmJiAocmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApKSAhPT0gdW5kZWZp
bmVkICkgeworICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIHZhbHVlICsgIiIg
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgfSBlbHNlIGlmICggaG9va3MgJiYgImdldCIgaW4gaG9va3MgJiYgbm90eG1sICYmIChyZXQg
PSBob29rcy5nZXQoIGVsZW0sIG5hbWUgKSkgIT09IG51bGwgKSB7CisgICAgICAgICAgICByZXR1
cm4gcmV0OworCisgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgIHJldCA9IGVsZW0uZ2V0
QXR0cmlidXRlKCBuYW1lICk7CisKKyAgICAgICAgICAgIC8vIE5vbi1leGlzdGVudCBhdHRyaWJ1
dGVzIHJldHVybiBudWxsLCB3ZSBub3JtYWxpemUgdG8gdW5kZWZpbmVkCisgICAgICAgICAgICBy
ZXR1cm4gcmV0ID09PSBudWxsID8KKyAgICAgICAgICAgICAgICB1bmRlZmluZWQgOgorICAgICAg
ICAgICAgICAgIHJldDsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICByZW1vdmVBdHRyOiBmdW5j
dGlvbiggZWxlbSwgdmFsdWUgKSB7CisgICAgICAgIHZhciBwcm9wTmFtZSwgYXR0ck5hbWVzLCBu
YW1lLCBpc0Jvb2wsCisgICAgICAgICAgICBpID0gMDsKKworICAgICAgICBpZiAoIHZhbHVlICYm
IGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7CisKKyAgICAgICAgICAgIGF0dHJOYW1lcyA9IHZhbHVl
LnNwbGl0KCBjb3JlX3JzcGFjZSApOworCisgICAgICAgICAgICBmb3IgKCA7IGkgPCBhdHRyTmFt
ZXMubGVuZ3RoOyBpKysgKSB7CisgICAgICAgICAgICAgICAgbmFtZSA9IGF0dHJOYW1lc1sgaSBd
OworCisgICAgICAgICAgICAgICAgaWYgKCBuYW1lICkgeworICAgICAgICAgICAgICAgICAgICBw
cm9wTmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTsKKyAgICAgICAgICAgICAg
ICAgICAgaXNCb29sID0gcmJvb2xlYW4udGVzdCggbmFtZSApOworCisgICAgICAgICAgICAgICAg
ICAgIC8vIFNlZSAjOTY5OSBmb3IgZXhwbGFuYXRpb24gb2YgdGhpcyBhcHByb2FjaCAoc2V0dGlu
ZyBmaXJzdCwgdGhlbiByZW1vdmFsKQorICAgICAgICAgICAgICAgICAgICAvLyBEbyBub3QgZG8g
dGhpcyBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzIChzZWUgIzEwODcwKQorICAgICAgICAgICAgICAg
ICAgICBpZiAoICFpc0Jvb2wgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuYXR0
ciggZWxlbSwgbmFtZSwgIiIgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBlbGVtLnJlbW92ZUF0dHJpYnV0ZSggZ2V0U2V0QXR0cmlidXRlID8gbmFtZSA6IHBy
b3BOYW1lICk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGNvcnJlc3BvbmRpbmcgcHJv
cGVydHkgdG8gZmFsc2UgZm9yIGJvb2xlYW4gYXR0cmlidXRlcworICAgICAgICAgICAgICAgICAg
ICBpZiAoIGlzQm9vbCAmJiBwcm9wTmFtZSBpbiBlbGVtICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgZWxlbVsgcHJvcE5hbWUgXSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSwKKworICAg
IGF0dHJIb29rczogeworICAgICAgICB0eXBlOiB7CisgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9u
KCBlbGVtLCB2YWx1ZSApIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBhbGxvdyB0aGUg
dHlwZSBwcm9wZXJ0eSB0byBiZSBjaGFuZ2VkIChzaW5jZSBpdCBjYXVzZXMgcHJvYmxlbXMgaW4g
SUUpCisgICAgICAgICAgICAgICAgaWYgKCBydHlwZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgJiYg
ZWxlbS5wYXJlbnROb2RlICkgeworICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXJyb3IoICJ0
eXBlIHByb3BlcnR5IGNhbid0IGJlIGNoYW5nZWQiICk7CisgICAgICAgICAgICAgICAgfSBlbHNl
IGlmICggIWpRdWVyeS5zdXBwb3J0LnJhZGlvVmFsdWUgJiYgdmFsdWUgPT09ICJyYWRpbyIgJiYg
alF1ZXJ5Lm5vZGVOYW1lKGVsZW0sICJpbnB1dCIpICkgeworICAgICAgICAgICAgICAgICAgICAv
LyBTZXR0aW5nIHRoZSB0eXBlIG9uIGEgcmFkaW8gYnV0dG9uIGFmdGVyIHRoZSB2YWx1ZSByZXNl
dHMgdGhlIHZhbHVlIGluIElFNi05CisgICAgICAgICAgICAgICAgICAgIC8vIFJlc2V0IHZhbHVl
IHRvIGl0J3MgZGVmYXVsdCBpbiBjYXNlIHR5cGUgaXMgc2V0IGFmdGVyIHZhbHVlCisgICAgICAg
ICAgICAgICAgICAgIC8vIFRoaXMgaXMgZm9yIGVsZW1lbnQgY3JlYXRpb24KKyAgICAgICAgICAg
ICAgICAgICAgdmFyIHZhbCA9IGVsZW0udmFsdWU7CisgICAgICAgICAgICAgICAgICAgIGVsZW0u
c2V0QXR0cmlidXRlKCAidHlwZSIsIHZhbHVlICk7CisgICAgICAgICAgICAgICAgICAgIGlmICgg
dmFsICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS52YWx1ZSA9IHZhbDsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICAvLyBVc2Ug
dGhlIHZhbHVlIHByb3BlcnR5IGZvciBiYWNrIGNvbXBhdAorICAgICAgICAvLyBVc2UgdGhlIG5v
ZGVIb29rIGZvciBidXR0b24gZWxlbWVudHMgaW4gSUU2LzcgKCMxOTU0KQorICAgICAgICB2YWx1
ZTogeworICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIG5vZGVIb29rICYmIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImJ1dHRvbiIg
KSApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVIb29rLmdldCggZWxlbSwgbmFt
ZSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gbmFtZSBpbiBl
bGVtID8KKyAgICAgICAgICAgICAgICAgICAgZWxlbS52YWx1ZSA6CisgICAgICAgICAgICAgICAg
ICAgIG51bGw7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxl
bSwgdmFsdWUsIG5hbWUgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBub2RlSG9vayAmJiBqUXVl
cnkubm9kZU5hbWUoIGVsZW0sICJidXR0b24iICkgKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBub2RlSG9vay5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIC8vIERvZXMgbm90IHJldHVybiBzbyB0aGF0IHNldEF0dHJpYnV0
ZSBpcyBhbHNvIHVzZWQKKyAgICAgICAgICAgICAgICBlbGVtLnZhbHVlID0gdmFsdWU7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9LAorCisgICAgcHJvcEZpeDogeworICAgICAgICB0
YWJpbmRleDogInRhYkluZGV4IiwKKyAgICAgICAgcmVhZG9ubHk6ICJyZWFkT25seSIsCisgICAg
ICAgICJmb3IiOiAiaHRtbEZvciIsCisgICAgICAgICJjbGFzcyI6ICJjbGFzc05hbWUiLAorICAg
ICAgICBtYXhsZW5ndGg6ICJtYXhMZW5ndGgiLAorICAgICAgICBjZWxsc3BhY2luZzogImNlbGxT
cGFjaW5nIiwKKyAgICAgICAgY2VsbHBhZGRpbmc6ICJjZWxsUGFkZGluZyIsCisgICAgICAgIHJv
d3NwYW46ICJyb3dTcGFuIiwKKyAgICAgICAgY29sc3BhbjogImNvbFNwYW4iLAorICAgICAgICB1
c2VtYXA6ICJ1c2VNYXAiLAorICAgICAgICBmcmFtZWJvcmRlcjogImZyYW1lQm9yZGVyIiwKKyAg
ICAgICAgY29udGVudGVkaXRhYmxlOiAiY29udGVudEVkaXRhYmxlIgorICAgIH0sCisKKyAgICBw
cm9wOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7CisgICAgICAgIHZhciByZXQsIGhv
b2tzLCBub3R4bWwsCisgICAgICAgICAgICBuVHlwZSA9IGVsZW0ubm9kZVR5cGU7CisKKyAgICAg
ICAgLy8gZG9uJ3QgZ2V0L3NldCBwcm9wZXJ0aWVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJp
YnV0ZSBub2RlcworICAgICAgICBpZiAoICFlbGVtIHx8IG5UeXBlID09PSAzIHx8IG5UeXBlID09
PSA4IHx8IG5UeXBlID09PSAyICkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgbm90eG1sID0gblR5cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYyggZWxlbSAp
OworCisgICAgICAgIGlmICggbm90eG1sICkgeworICAgICAgICAgICAgLy8gRml4IG5hbWUgYW5k
IGF0dGFjaCBob29rcworICAgICAgICAgICAgbmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0g
fHwgbmFtZTsKKyAgICAgICAgICAgIGhvb2tzID0galF1ZXJ5LnByb3BIb29rc1sgbmFtZSBdOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkgeworICAgICAg
ICAgICAgaWYgKCBob29rcyAmJiAic2V0IiBpbiBob29rcyAmJiAocmV0ID0gaG9va3Muc2V0KCBl
bGVtLCB2YWx1ZSwgbmFtZSApKSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgIHJl
dHVybiByZXQ7CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
ICggZWxlbVsgbmFtZSBdID0gdmFsdWUgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29rcyAmJiAocmV0ID0g
aG9va3MuZ2V0KCBlbGVtLCBuYW1lICkpICE9PSBudWxsICkgeworICAgICAgICAgICAgICAgIHJl
dHVybiByZXQ7CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGVsZW1bIG5hbWUgXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0sCisKKyAgICBw
cm9wSG9va3M6IHsKKyAgICAgICAgdGFiSW5kZXg6IHsKKyAgICAgICAgICAgIGdldDogZnVuY3Rp
b24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgLy8gZWxlbS50YWJJbmRleCBkb2Vzbid0IGFs
d2F5cyByZXR1cm4gdGhlIGNvcnJlY3QgdmFsdWUgd2hlbiBpdCBoYXNuJ3QgYmVlbiBleHBsaWNp
dGx5IHNldAorICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9mbHVpZHByb2plY3Qub3JnL2Jsb2cv
MjAwOC8wMS8wOS9nZXR0aW5nLXNldHRpbmctYW5kLXJlbW92aW5nLXRhYmluZGV4LXZhbHVlcy13
aXRoLWphdmFzY3JpcHQvCisgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZU5vZGUgPSBlbGVt
LmdldEF0dHJpYnV0ZU5vZGUoInRhYmluZGV4Iik7CisKKyAgICAgICAgICAgICAgICByZXR1cm4g
YXR0cmlidXRlTm9kZSAmJiBhdHRyaWJ1dGVOb2RlLnNwZWNpZmllZCA/CisgICAgICAgICAgICAg
ICAgICAgIHBhcnNlSW50KCBhdHRyaWJ1dGVOb2RlLnZhbHVlLCAxMCApIDoKKyAgICAgICAgICAg
ICAgICAgICAgcmZvY3VzYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgfHwgcmNsaWNrYWJsZS50
ZXN0KCBlbGVtLm5vZGVOYW1lICkgJiYgZWxlbS5ocmVmID8KKyAgICAgICAgICAgICAgICAgICAg
ICAgIDAgOgorICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorfSk7CisKKy8vIEhvb2sgZm9yIGJvb2xlYW4gYXR0cmlidXRl
cworYm9vbEhvb2sgPSB7CisgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsKKyAgICAg
ICAgLy8gQWxpZ24gYm9vbGVhbiBhdHRyaWJ1dGVzIHdpdGggY29ycmVzcG9uZGluZyBwcm9wZXJ0
aWVzCisgICAgICAgIC8vIEZhbGwgYmFjayB0byBhdHRyaWJ1dGUgcHJlc2VuY2Ugd2hlcmUgc29t
ZSBib29sZWFucyBhcmUgbm90IHN1cHBvcnRlZAorICAgICAgICB2YXIgYXR0ck5vZGUsCisgICAg
ICAgICAgICBwcm9wZXJ0eSA9IGpRdWVyeS5wcm9wKCBlbGVtLCBuYW1lICk7CisgICAgICAgIHJl
dHVybiBwcm9wZXJ0eSA9PT0gdHJ1ZSB8fCB0eXBlb2YgcHJvcGVydHkgIT09ICJib29sZWFuIiAm
JiAoIGF0dHJOb2RlID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpICkgJiYgYXR0ck5vZGUu
bm9kZVZhbHVlICE9PSBmYWxzZSA/CisgICAgICAgICAgICBuYW1lLnRvTG93ZXJDYXNlKCkgOgor
ICAgICAgICAgICAgdW5kZWZpbmVkOworICAgIH0sCisgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwg
dmFsdWUsIG5hbWUgKSB7CisgICAgICAgIHZhciBwcm9wTmFtZTsKKyAgICAgICAgaWYgKCB2YWx1
ZSA9PT0gZmFsc2UgKSB7CisgICAgICAgICAgICAvLyBSZW1vdmUgYm9vbGVhbiBhdHRyaWJ1dGVz
IHdoZW4gc2V0IHRvIGZhbHNlCisgICAgICAgICAgICBqUXVlcnkucmVtb3ZlQXR0ciggZWxlbSwg
bmFtZSApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gdmFsdWUgaXMgdHJ1ZSBz
aW5jZSB3ZSBrbm93IGF0IHRoaXMgcG9pbnQgaXQncyB0eXBlIGJvb2xlYW4gYW5kIG5vdCBmYWxz
ZQorICAgICAgICAgICAgLy8gU2V0IGJvb2xlYW4gYXR0cmlidXRlcyB0byB0aGUgc2FtZSBuYW1l
IGFuZCBzZXQgdGhlIERPTSBwcm9wZXJ0eQorICAgICAgICAgICAgcHJvcE5hbWUgPSBqUXVlcnku
cHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7CisgICAgICAgICAgICBpZiAoIHByb3BOYW1lIGluIGVs
ZW0gKSB7CisgICAgICAgICAgICAgICAgLy8gT25seSBzZXQgdGhlIElETCBzcGVjaWZpY2FsbHkg
aWYgaXQgYWxyZWFkeSBleGlzdHMgb24gdGhlIGVsZW1lbnQKKyAgICAgICAgICAgICAgICBlbGVt
WyBwcm9wTmFtZSBdID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZWxlbS5z
ZXRBdHRyaWJ1dGUoIG5hbWUsIG5hbWUudG9Mb3dlckNhc2UoKSApOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBuYW1lOworICAgIH0KK307CisKKy8vIElFNi83IGRvIG5vdCBzdXBwb3J0IGdl
dHRpbmcvc2V0dGluZyBzb21lIGF0dHJpYnV0ZXMgd2l0aCBnZXQvc2V0QXR0cmlidXRlCitpZiAo
ICFnZXRTZXRBdHRyaWJ1dGUgKSB7CisKKyAgICBmaXhTcGVjaWZpZWQgPSB7CisgICAgICAgIG5h
bWU6IHRydWUsCisgICAgICAgIGlkOiB0cnVlLAorICAgICAgICBjb29yZHM6IHRydWUKKyAgICB9
OworCisgICAgLy8gVXNlIHRoaXMgZm9yIGFueSBhdHRyaWJ1dGUgaW4gSUU2LzcKKyAgICAvLyBU
aGlzIGZpeGVzIGFsbW9zdCBldmVyeSBJRTYvNyBpc3N1ZQorICAgIG5vZGVIb29rID0galF1ZXJ5
LnZhbEhvb2tzLmJ1dHRvbiA9IHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgbmFtZSAp
IHsKKyAgICAgICAgICAgIHZhciByZXQ7CisgICAgICAgICAgICByZXQgPSBlbGVtLmdldEF0dHJp
YnV0ZU5vZGUoIG5hbWUgKTsKKyAgICAgICAgICAgIHJldHVybiByZXQgJiYgKCBmaXhTcGVjaWZp
ZWRbIG5hbWUgXSA/IHJldC52YWx1ZSAhPT0gIiIgOiByZXQuc3BlY2lmaWVkICkgPworICAgICAg
ICAgICAgICAgIHJldC52YWx1ZSA6CisgICAgICAgICAgICAgICAgdW5kZWZpbmVkOworICAgICAg
ICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgbmFtZSApIHsKKyAgICAg
ICAgICAgIC8vIFNldCB0aGUgZXhpc3Rpbmcgb3IgY3JlYXRlIGEgbmV3IGF0dHJpYnV0ZSBub2Rl
CisgICAgICAgICAgICB2YXIgcmV0ID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICk7Cisg
ICAgICAgICAgICBpZiAoICFyZXQgKSB7CisgICAgICAgICAgICAgICAgcmV0ID0gZG9jdW1lbnQu
Y3JlYXRlQXR0cmlidXRlKCBuYW1lICk7CisgICAgICAgICAgICAgICAgZWxlbS5zZXRBdHRyaWJ1
dGVOb2RlKCByZXQgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAoIHJldC52
YWx1ZSA9IHZhbHVlICsgIiIgKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvLyBTZXQgd2lk
dGggYW5kIGhlaWdodCB0byBhdXRvIGluc3RlYWQgb2YgMCBvbiBlbXB0eSBzdHJpbmcoIEJ1ZyAj
ODE1MCApCisgICAgLy8gVGhpcyBpcyBmb3IgcmVtb3ZhbHMKKyAgICBqUXVlcnkuZWFjaChbICJ3
aWR0aCIsICJoZWlnaHQiIF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkgeworICAgICAgICBqUXVlcnku
YXR0ckhvb2tzWyBuYW1lIF0gPSBqUXVlcnkuZXh0ZW5kKCBqUXVlcnkuYXR0ckhvb2tzWyBuYW1l
IF0sIHsKKyAgICAgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgeworICAgICAg
ICAgICAgICAgIGlmICggdmFsdWUgPT09ICIiICkgeworICAgICAgICAgICAgICAgICAgICBlbGVt
LnNldEF0dHJpYnV0ZSggbmFtZSwgImF1dG8iICk7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biB2YWx1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOwor
ICAgIH0pOworCisgICAgLy8gU2V0IGNvbnRlbnRlZGl0YWJsZSB0byBmYWxzZSBvbiByZW1vdmFs
cygjMTA0MjkpCisgICAgLy8gU2V0dGluZyB0byBlbXB0eSBzdHJpbmcgdGhyb3dzIGFuIGVycm9y
IGFzIGFuIGludmFsaWQgdmFsdWUKKyAgICBqUXVlcnkuYXR0ckhvb2tzLmNvbnRlbnRlZGl0YWJs
ZSA9IHsKKyAgICAgICAgZ2V0OiBub2RlSG9vay5nZXQsCisgICAgICAgIHNldDogZnVuY3Rpb24o
IGVsZW0sIHZhbHVlLCBuYW1lICkgeworICAgICAgICAgICAgaWYgKCB2YWx1ZSA9PT0gIiIgKSB7
CisgICAgICAgICAgICAgICAgdmFsdWUgPSAiZmFsc2UiOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgbm9kZUhvb2suc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApOworICAgICAgICB9CisgICAg
fTsKK30KKworCisvLyBTb21lIGF0dHJpYnV0ZXMgcmVxdWlyZSBhIHNwZWNpYWwgY2FsbCBvbiBJ
RQoraWYgKCAhalF1ZXJ5LnN1cHBvcnQuaHJlZk5vcm1hbGl6ZWQgKSB7CisgICAgalF1ZXJ5LmVh
Y2goWyAiaHJlZiIsICJzcmMiLCAid2lkdGgiLCAiaGVpZ2h0IiBdLCBmdW5jdGlvbiggaSwgbmFt
ZSApIHsKKyAgICAgICAgalF1ZXJ5LmF0dHJIb29rc1sgbmFtZSBdID0galF1ZXJ5LmV4dGVuZCgg
alF1ZXJ5LmF0dHJIb29rc1sgbmFtZSBdLCB7CisgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBl
bGVtICkgeworICAgICAgICAgICAgICAgIHZhciByZXQgPSBlbGVtLmdldEF0dHJpYnV0ZSggbmFt
ZSwgMiApOworICAgICAgICAgICAgICAgIHJldHVybiByZXQgPT09IG51bGwgPyB1bmRlZmluZWQg
OiByZXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0pOworfQorCitpZiAoICFq
UXVlcnkuc3VwcG9ydC5zdHlsZSApIHsKKyAgICBqUXVlcnkuYXR0ckhvb2tzLnN0eWxlID0gewor
ICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgLy8gUmV0dXJuIHVu
ZGVmaW5lZCBpbiB0aGUgY2FzZSBvZiBlbXB0eSBzdHJpbmcKKyAgICAgICAgICAgIC8vIE5vcm1h
bGl6ZSB0byBsb3dlcmNhc2Ugc2luY2UgSUUgdXBwZXJjYXNlcyBjc3MgcHJvcGVydHkgbmFtZXMK
KyAgICAgICAgICAgIHJldHVybiBlbGVtLnN0eWxlLmNzc1RleHQudG9Mb3dlckNhc2UoKSB8fCB1
bmRlZmluZWQ7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVl
ICkgeworICAgICAgICAgICAgcmV0dXJuICggZWxlbS5zdHlsZS5jc3NUZXh0ID0gdmFsdWUgKyAi
IiApOworICAgICAgICB9CisgICAgfTsKK30KKworLy8gU2FmYXJpIG1pcy1yZXBvcnRzIHRoZSBk
ZWZhdWx0IHNlbGVjdGVkIHByb3BlcnR5IG9mIGFuIG9wdGlvbgorLy8gQWNjZXNzaW5nIHRoZSBw
YXJlbnQncyBzZWxlY3RlZEluZGV4IHByb3BlcnR5IGZpeGVzIGl0CitpZiAoICFqUXVlcnkuc3Vw
cG9ydC5vcHRTZWxlY3RlZCApIHsKKyAgICBqUXVlcnkucHJvcEhvb2tzLnNlbGVjdGVkID0galF1
ZXJ5LmV4dGVuZCggalF1ZXJ5LnByb3BIb29rcy5zZWxlY3RlZCwgeworICAgICAgICBnZXQ6IGZ1
bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgdmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9k
ZTsKKworICAgICAgICAgICAgaWYgKCBwYXJlbnQgKSB7CisgICAgICAgICAgICAgICAgcGFyZW50
LnNlbGVjdGVkSW5kZXg7CisKKyAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBpdCBh
bHNvIHdvcmtzIHdpdGggb3B0Z3JvdXBzLCBzZWUgIzU3MDEKKyAgICAgICAgICAgICAgICBpZiAo
IHBhcmVudC5wYXJlbnROb2RlICkgeworICAgICAgICAgICAgICAgICAgICBwYXJlbnQucGFyZW50
Tm9kZS5zZWxlY3RlZEluZGV4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgfSk7Cit9CisKKy8vIElFNi83
IGNhbGwgZW5jdHlwZSBlbmNvZGluZworaWYgKCAhalF1ZXJ5LnN1cHBvcnQuZW5jdHlwZSApIHsK
KyAgICBqUXVlcnkucHJvcEZpeC5lbmN0eXBlID0gImVuY29kaW5nIjsKK30KKworLy8gUmFkaW9z
IGFuZCBjaGVja2JveGVzIGdldHRlci9zZXR0ZXIKK2lmICggIWpRdWVyeS5zdXBwb3J0LmNoZWNr
T24gKSB7CisgICAgalF1ZXJ5LmVhY2goWyAicmFkaW8iLCAiY2hlY2tib3giIF0sIGZ1bmN0aW9u
KCkgeworICAgICAgICBqUXVlcnkudmFsSG9va3NbIHRoaXMgXSA9IHsKKyAgICAgICAgICAgIGdl
dDogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBjYXNl
IHdoZXJlIGluIFdlYmtpdCAiIiBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mICJvbiIgaWYgYSB2YWx1
ZSBpc24ndCBzcGVjaWZpZWQKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5nZXRBdHRyaWJ1
dGUoInZhbHVlIikgPT09IG51bGwgPyAib24iIDogZWxlbS52YWx1ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfTsKKyAgICB9KTsKK30KK2pRdWVyeS5lYWNoKFsgInJhZGlvIiwgImNoZWNrYm94
IiBdLCBmdW5jdGlvbigpIHsKKyAgICBqUXVlcnkudmFsSG9va3NbIHRoaXMgXSA9IGpRdWVyeS5l
eHRlbmQoIGpRdWVyeS52YWxIb29rc1sgdGhpcyBdLCB7CisgICAgICAgIHNldDogZnVuY3Rpb24o
IGVsZW0sIHZhbHVlICkgeworICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNBcnJheSggdmFsdWUg
KSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKCBlbGVtLmNoZWNrZWQgPSBqUXVlcnkuaW5B
cnJheSggalF1ZXJ5KGVsZW0pLnZhbCgpLCB2YWx1ZSApID49IDAgKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0pOworfSk7Cit2YXIgcmZvcm1FbGVtcyA9IC9eKD86dGV4dGFyZWF8
aW5wdXR8c2VsZWN0KSQvaSwKKyAgICBydHlwZW5hbWVzcGFjZSA9IC9eKFteXC5dKnwpKD86XC4o
LispfCkkLywKKyAgICByaG92ZXJIYWNrID0gLyg/Ol58XHMpaG92ZXIoXC5cUyt8KVxiLywKKyAg
ICBya2V5RXZlbnQgPSAvXmtleS8sCisgICAgcm1vdXNlRXZlbnQgPSAvXig/Om1vdXNlfGNvbnRl
eHRtZW51KXxjbGljay8sCisgICAgcmZvY3VzTW9ycGggPSAvXig/OmZvY3VzaW5mb2N1c3xmb2N1
c291dGJsdXIpJC8sCisgICAgaG92ZXJIYWNrID0gZnVuY3Rpb24oIGV2ZW50cyApIHsKKyAgICAg
ICAgcmV0dXJuIGpRdWVyeS5ldmVudC5zcGVjaWFsLmhvdmVyID8gZXZlbnRzIDogZXZlbnRzLnJl
cGxhY2UoIHJob3ZlckhhY2ssICJtb3VzZWVudGVyJDEgbW91c2VsZWF2ZSQxIiApOworICAgIH07
CisKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBldmVudHMgLS0gbm90IHBh
cnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuCisgKiBQcm9wcyB0byBEZWFuIEVkd2FyZHMnIGFk
ZEV2ZW50IGxpYnJhcnkgZm9yIG1hbnkgb2YgdGhlIGlkZWFzLgorICovCitqUXVlcnkuZXZlbnQg
PSB7CisKKyAgICBhZGQ6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgZGF0YSwgc2Vs
ZWN0b3IgKSB7CisKKyAgICAgICAgdmFyIGVsZW1EYXRhLCBldmVudEhhbmRsZSwgZXZlbnRzLAor
ICAgICAgICAgICAgdCwgdG5zLCB0eXBlLCBuYW1lc3BhY2VzLCBoYW5kbGVPYmosCisgICAgICAg
ICAgICBoYW5kbGVPYmpJbiwgaGFuZGxlcnMsIHNwZWNpYWw7CisKKyAgICAgICAgLy8gRG9uJ3Qg
YXR0YWNoIGV2ZW50cyB0byBub0RhdGEgb3IgdGV4dC9jb21tZW50IG5vZGVzIChhbGxvdyBwbGFp
biBvYmplY3RzIHRobykKKyAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0u
bm9kZVR5cGUgPT09IDggfHwgIXR5cGVzIHx8ICFoYW5kbGVyIHx8ICEoZWxlbURhdGEgPSBqUXVl
cnkuX2RhdGEoIGVsZW0gKSkgKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYW4gb2JqZWN0IG9mIGN1c3RvbSBkYXRhIGlu
IGxpZXUgb2YgdGhlIGhhbmRsZXIKKyAgICAgICAgaWYgKCBoYW5kbGVyLmhhbmRsZXIgKSB7Cisg
ICAgICAgICAgICBoYW5kbGVPYmpJbiA9IGhhbmRsZXI7CisgICAgICAgICAgICBoYW5kbGVyID0g
aGFuZGxlT2JqSW4uaGFuZGxlcjsKKyAgICAgICAgICAgIHNlbGVjdG9yID0gaGFuZGxlT2JqSW4u
c2VsZWN0b3I7CisgICAgICAgIH0KKworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgaGFu
ZGxlciBoYXMgYSB1bmlxdWUgSUQsIHVzZWQgdG8gZmluZC9yZW1vdmUgaXQgbGF0ZXIKKyAgICAg
ICAgaWYgKCAhaGFuZGxlci5ndWlkICkgeworICAgICAgICAgICAgaGFuZGxlci5ndWlkID0galF1
ZXJ5Lmd1aWQrKzsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEluaXQgdGhlIGVsZW1lbnQncyBl
dmVudCBzdHJ1Y3R1cmUgYW5kIG1haW4gaGFuZGxlciwgaWYgdGhpcyBpcyB0aGUgZmlyc3QKKyAg
ICAgICAgZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzOworICAgICAgICBpZiAoICFldmVudHMgKSB7
CisgICAgICAgICAgICBlbGVtRGF0YS5ldmVudHMgPSBldmVudHMgPSB7fTsKKyAgICAgICAgfQor
ICAgICAgICBldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZTsKKyAgICAgICAgaWYgKCAhZXZl
bnRIYW5kbGUgKSB7CisgICAgICAgICAgICBlbGVtRGF0YS5oYW5kbGUgPSBldmVudEhhbmRsZSA9
IGZ1bmN0aW9uKCBlICkgeworICAgICAgICAgICAgICAgIC8vIERpc2NhcmQgdGhlIHNlY29uZCBl
dmVudCBvZiBhIGpRdWVyeS5ldmVudC50cmlnZ2VyKCkgYW5kCisgICAgICAgICAgICAgICAgLy8g
d2hlbiBhbiBldmVudCBpcyBjYWxsZWQgYWZ0ZXIgYSBwYWdlIGhhcyB1bmxvYWRlZAorICAgICAg
ICAgICAgICAgIHJldHVybiB0eXBlb2YgalF1ZXJ5ICE9PSAidW5kZWZpbmVkIiAmJiAoIWUgfHwg
alF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCAhPT0gZS50eXBlKSA/CisgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5ldmVudC5kaXNwYXRjaC5hcHBseSggZXZlbnRIYW5kbGUuZWxlbSwgYXJndW1lbnRz
ICkgOgorICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQ7CisgICAgICAgICAgICB9OworICAg
ICAgICAgICAgLy8gQWRkIGVsZW0gYXMgYSBwcm9wZXJ0eSBvZiB0aGUgaGFuZGxlIGZuIHRvIHBy
ZXZlbnQgYSBtZW1vcnkgbGVhayB3aXRoIElFIG5vbi1uYXRpdmUgZXZlbnRzCisgICAgICAgICAg
ICBldmVudEhhbmRsZS5lbGVtID0gZWxlbTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEhhbmRs
ZSBtdWx0aXBsZSBldmVudHMgc2VwYXJhdGVkIGJ5IGEgc3BhY2UKKyAgICAgICAgLy8galF1ZXJ5
KC4uLikuYmluZCgibW91c2VvdmVyIG1vdXNlb3V0IiwgZm4pOworICAgICAgICB0eXBlcyA9IGpR
dWVyeS50cmltKCBob3ZlckhhY2sodHlwZXMpICkuc3BsaXQoICIgIiApOworICAgICAgICBmb3Ig
KCB0ID0gMDsgdCA8IHR5cGVzLmxlbmd0aDsgdCsrICkgeworCisgICAgICAgICAgICB0bnMgPSBy
dHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1t0XSApIHx8IFtdOworICAgICAgICAgICAgdHlwZSA9
IHRuc1sxXTsKKyAgICAgICAgICAgIG5hbWVzcGFjZXMgPSAoIHRuc1syXSB8fCAiIiApLnNwbGl0
KCAiLiIgKS5zb3J0KCk7CisKKyAgICAgICAgICAgIC8vIElmIGV2ZW50IGNoYW5nZXMgaXRzIHR5
cGUsIHVzZSB0aGUgc3BlY2lhbCBldmVudCBoYW5kbGVycyBmb3IgdGhlIGNoYW5nZWQgdHlwZQor
ICAgICAgICAgICAgc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307
CisKKyAgICAgICAgICAgIC8vIElmIHNlbGVjdG9yIGRlZmluZWQsIGRldGVybWluZSBzcGVjaWFs
IGV2ZW50IGFwaSB0eXBlLCBvdGhlcndpc2UgZ2l2ZW4gdHlwZQorICAgICAgICAgICAgdHlwZSA9
ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8
fCB0eXBlOworCisgICAgICAgICAgICAvLyBVcGRhdGUgc3BlY2lhbCBiYXNlZCBvbiBuZXdseSBy
ZXNldCB0eXBlCisgICAgICAgICAgICBzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5
cGUgXSB8fCB7fTsKKworICAgICAgICAgICAgLy8gaGFuZGxlT2JqIGlzIHBhc3NlZCB0byBhbGwg
ZXZlbnQgaGFuZGxlcnMKKyAgICAgICAgICAgIGhhbmRsZU9iaiA9IGpRdWVyeS5leHRlbmQoewor
ICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsCisgICAgICAgICAgICAgICAgb3JpZ1R5cGU6IHRu
c1sxXSwKKyAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLAorICAgICAgICAgICAgICAgIGhhbmRs
ZXI6IGhhbmRsZXIsCisgICAgICAgICAgICAgICAgZ3VpZDogaGFuZGxlci5ndWlkLAorICAgICAg
ICAgICAgICAgIHNlbGVjdG9yOiBzZWxlY3RvciwKKyAgICAgICAgICAgICAgICBuZWVkc0NvbnRl
eHQ6IHNlbGVjdG9yICYmIGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KCBzZWxl
Y3RvciApLAorICAgICAgICAgICAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlcy5qb2luKCIuIikK
KyAgICAgICAgICAgIH0sIGhhbmRsZU9iakluICk7CisKKyAgICAgICAgICAgIC8vIEluaXQgdGhl
IGV2ZW50IGhhbmRsZXIgcXVldWUgaWYgd2UncmUgdGhlIGZpcnN0CisgICAgICAgICAgICBoYW5k
bGVycyA9IGV2ZW50c1sgdHlwZSBdOworICAgICAgICAgICAgaWYgKCAhaGFuZGxlcnMgKSB7Cisg
ICAgICAgICAgICAgICAgaGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSA9IFtdOworICAgICAgICAg
ICAgICAgIGhhbmRsZXJzLmRlbGVnYXRlQ291bnQgPSAwOworCisgICAgICAgICAgICAgICAgLy8g
T25seSB1c2UgYWRkRXZlbnRMaXN0ZW5lci9hdHRhY2hFdmVudCBpZiB0aGUgc3BlY2lhbCBldmVu
dHMgaGFuZGxlciByZXR1cm5zIGZhbHNlCisgICAgICAgICAgICAgICAgaWYgKCAhc3BlY2lhbC5z
ZXR1cCB8fCBzcGVjaWFsLnNldHVwLmNhbGwoIGVsZW0sIGRhdGEsIG5hbWVzcGFjZXMsIGV2ZW50
SGFuZGxlICkgPT09IGZhbHNlICkgeworICAgICAgICAgICAgICAgICAgICAvLyBCaW5kIHRoZSBn
bG9iYWwgZXZlbnQgaGFuZGxlciB0byB0aGUgZWxlbWVudAorICAgICAgICAgICAgICAgICAgICBp
ZiAoIGVsZW0uYWRkRXZlbnRMaXN0ZW5lciApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVs
ZW0uYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgZXZlbnRIYW5kbGUsIGZhbHNlICk7CisKKyAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmICggZWxlbS5hdHRhY2hFdmVudCApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVsZW0uYXR0YWNoRXZlbnQoICJvbiIgKyB0eXBlLCBldmVudEhhbmRs
ZSApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAoIHNwZWNpYWwuYWRkICkgeworICAgICAgICAgICAgICAg
IHNwZWNpYWwuYWRkLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApOworCisgICAgICAgICAgICAgICAg
aWYgKCAhaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCApIHsKKyAgICAgICAgICAgICAgICAgICAgaGFu
ZGxlT2JqLmhhbmRsZXIuZ3VpZCA9IGhhbmRsZXIuZ3VpZDsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEFkZCB0byB0aGUgZWxlbWVudCdzIGhhbmRs
ZXIgbGlzdCwgZGVsZWdhdGVzIGluIGZyb250CisgICAgICAgICAgICBpZiAoIHNlbGVjdG9yICkg
eworICAgICAgICAgICAgICAgIGhhbmRsZXJzLnNwbGljZSggaGFuZGxlcnMuZGVsZWdhdGVDb3Vu
dCsrLCAwLCBoYW5kbGVPYmogKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgaGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIEtlZXAgdHJhY2sgb2Ygd2hpY2ggZXZlbnRzIGhhdmUgZXZlciBiZWVuIHVzZWQsIGZv
ciBldmVudCBvcHRpbWl6YXRpb24KKyAgICAgICAgICAgIGpRdWVyeS5ldmVudC5nbG9iYWxbIHR5
cGUgXSA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBOdWxsaWZ5IGVsZW0gdG8gcHJl
dmVudCBtZW1vcnkgbGVha3MgaW4gSUUKKyAgICAgICAgZWxlbSA9IG51bGw7CisgICAgfSwKKwor
ICAgIGdsb2JhbDoge30sCisKKyAgICAvLyBEZXRhY2ggYW4gZXZlbnQgb3Igc2V0IG9mIGV2ZW50
cyBmcm9tIGFuIGVsZW1lbnQKKyAgICByZW1vdmU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFu
ZGxlciwgc2VsZWN0b3IsIG1hcHBlZFR5cGVzICkgeworCisgICAgICAgIHZhciB0LCB0bnMsIHR5
cGUsIG9yaWdUeXBlLCBuYW1lc3BhY2VzLCBvcmlnQ291bnQsCisgICAgICAgICAgICBqLCBldmVu
dHMsIHNwZWNpYWwsIGV2ZW50VHlwZSwgaGFuZGxlT2JqLAorICAgICAgICAgICAgZWxlbURhdGEg
PSBqUXVlcnkuaGFzRGF0YSggZWxlbSApICYmIGpRdWVyeS5fZGF0YSggZWxlbSApOworCisgICAg
ICAgIGlmICggIWVsZW1EYXRhIHx8ICEoZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzKSApIHsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9uY2UgZm9yIGVhY2gg
dHlwZS5uYW1lc3BhY2UgaW4gdHlwZXM7IHR5cGUgbWF5IGJlIG9taXR0ZWQKKyAgICAgICAgdHlw
ZXMgPSBqUXVlcnkudHJpbSggaG92ZXJIYWNrKCB0eXBlcyB8fCAiIiApICkuc3BsaXQoIiAiKTsK
KyAgICAgICAgZm9yICggdCA9IDA7IHQgPCB0eXBlcy5sZW5ndGg7IHQrKyApIHsKKyAgICAgICAg
ICAgIHRucyA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzW3RdICkgfHwgW107CisgICAgICAg
ICAgICB0eXBlID0gb3JpZ1R5cGUgPSB0bnNbMV07CisgICAgICAgICAgICBuYW1lc3BhY2VzID0g
dG5zWzJdOworCisgICAgICAgICAgICAvLyBVbmJpbmQgYWxsIGV2ZW50cyAob24gdGhpcyBuYW1l
c3BhY2UsIGlmIHByb3ZpZGVkKSBmb3IgdGhlIGVsZW1lbnQKKyAgICAgICAgICAgIGlmICggIXR5
cGUgKSB7CisgICAgICAgICAgICAgICAgZm9yICggdHlwZSBpbiBldmVudHMgKSB7CisgICAgICAg
ICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKyB0eXBlc1sgdCBd
LCBoYW5kbGVyLCBzZWxlY3RvciwgdHJ1ZSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3BlY2lhbCA9
IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307CisgICAgICAgICAgICB0eXBlID0g
KCBzZWxlY3Rvcj8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwg
dHlwZTsKKyAgICAgICAgICAgIGV2ZW50VHlwZSA9IGV2ZW50c1sgdHlwZSBdIHx8IFtdOworICAg
ICAgICAgICAgb3JpZ0NvdW50ID0gZXZlbnRUeXBlLmxlbmd0aDsKKyAgICAgICAgICAgIG5hbWVz
cGFjZXMgPSBuYW1lc3BhY2VzID8gbmV3IFJlZ0V4cCgiKF58XFwuKSIgKyBuYW1lc3BhY2VzLnNw
bGl0KCIuIikuc29ydCgpLmpvaW4oIlxcLig/Oi4qXFwufCkiKSArICIoXFwufCQpIikgOiBudWxs
OworCisgICAgICAgICAgICAvLyBSZW1vdmUgbWF0Y2hpbmcgZXZlbnRzCisgICAgICAgICAgICBm
b3IgKCBqID0gMDsgaiA8IGV2ZW50VHlwZS5sZW5ndGg7IGorKyApIHsKKyAgICAgICAgICAgICAg
ICBoYW5kbGVPYmogPSBldmVudFR5cGVbIGogXTsKKworICAgICAgICAgICAgICAgIGlmICggKCBt
YXBwZWRUeXBlcyB8fCBvcmlnVHlwZSA9PT0gaGFuZGxlT2JqLm9yaWdUeXBlICkgJiYKKyAgICAg
ICAgICAgICAgICAgICAgICggIWhhbmRsZXIgfHwgaGFuZGxlci5ndWlkID09PSBoYW5kbGVPYmou
Z3VpZCApICYmCisgICAgICAgICAgICAgICAgICAgICAoICFuYW1lc3BhY2VzIHx8IG5hbWVzcGFj
ZXMudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkgJiYKKyAgICAgICAgICAgICAgICAgICAg
ICggIXNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSBoYW5kbGVPYmouc2VsZWN0b3IgfHwgc2VsZWN0
b3IgPT09ICIqKiIgJiYgaGFuZGxlT2JqLnNlbGVjdG9yICkgKSB7CisgICAgICAgICAgICAgICAg
ICAgIGV2ZW50VHlwZS5zcGxpY2UoIGotLSwgMSApOworCisgICAgICAgICAgICAgICAgICAgIGlm
ICggaGFuZGxlT2JqLnNlbGVjdG9yICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRU
eXBlLmRlbGVnYXRlQ291bnQtLTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBpZiAoIHNwZWNpYWwucmVtb3ZlICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
c3BlY2lhbC5yZW1vdmUuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
IFJlbW92ZSBnZW5lcmljIGV2ZW50IGhhbmRsZXIgaWYgd2UgcmVtb3ZlZCBzb21ldGhpbmcgYW5k
IG5vIG1vcmUgaGFuZGxlcnMgZXhpc3QKKyAgICAgICAgICAgIC8vIChhdm9pZHMgcG90ZW50aWFs
IGZvciBlbmRsZXNzIHJlY3Vyc2lvbiBkdXJpbmcgcmVtb3ZhbCBvZiBzcGVjaWFsIGV2ZW50IGhh
bmRsZXJzKQorICAgICAgICAgICAgaWYgKCBldmVudFR5cGUubGVuZ3RoID09PSAwICYmIG9yaWdD
b3VudCAhPT0gZXZlbnRUeXBlLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICBpZiAoICFzcGVj
aWFsLnRlYXJkb3duIHx8IHNwZWNpYWwudGVhcmRvd24uY2FsbCggZWxlbSwgbmFtZXNwYWNlcywg
ZWxlbURhdGEuaGFuZGxlICkgPT09IGZhbHNlICkgeworICAgICAgICAgICAgICAgICAgICBqUXVl
cnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGVsZW1EYXRhLmhhbmRsZSApOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIGRlbGV0ZSBldmVudHNbIHR5cGUgXTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFJlbW92ZSB0aGUgZXhwYW5kbyBpZiBp
dCdzIG5vIGxvbmdlciB1c2VkCisgICAgICAgIGlmICggalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGV2
ZW50cyApICkgeworICAgICAgICAgICAgZGVsZXRlIGVsZW1EYXRhLmhhbmRsZTsKKworICAgICAg
ICAgICAgLy8gcmVtb3ZlRGF0YSBhbHNvIGNoZWNrcyBmb3IgZW1wdGluZXNzIGFuZCBjbGVhcnMg
dGhlIGV4cGFuZG8gaWYgZW1wdHkKKyAgICAgICAgICAgIC8vIHNvIHVzZSBpdCBpbnN0ZWFkIG9m
IGRlbGV0ZQorICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZURhdGEoIGVsZW0sICJldmVudHMiLCB0
cnVlICk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgLy8gRXZlbnRzIHRoYXQgYXJlIHNhZmUg
dG8gc2hvcnQtY2lyY3VpdCBpZiBubyBoYW5kbGVycyBhcmUgYXR0YWNoZWQuCisgICAgLy8gTmF0
aXZlIERPTSBldmVudHMgc2hvdWxkIG5vdCBiZSBhZGRlZCwgdGhleSBtYXkgaGF2ZSBpbmxpbmUg
aGFuZGxlcnMuCisgICAgY3VzdG9tRXZlbnQ6IHsKKyAgICAgICAgImdldERhdGEiOiB0cnVlLAor
ICAgICAgICAic2V0RGF0YSI6IHRydWUsCisgICAgICAgICJjaGFuZ2VEYXRhIjogdHJ1ZQorICAg
IH0sCisKKyAgICB0cmlnZ2VyOiBmdW5jdGlvbiggZXZlbnQsIGRhdGEsIGVsZW0sIG9ubHlIYW5k
bGVycyApIHsKKyAgICAgICAgLy8gRG9uJ3QgZG8gZXZlbnRzIG9uIHRleHQgYW5kIGNvbW1lbnQg
bm9kZXMKKyAgICAgICAgaWYgKCBlbGVtICYmIChlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0u
bm9kZVR5cGUgPT09IDgpICkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gRXZlbnQgb2JqZWN0IG9yIGV2ZW50IHR5cGUKKyAgICAgICAgdmFyIGNhY2hlLCBl
eGNsdXNpdmUsIGksIGN1ciwgb2xkLCBvbnR5cGUsIHNwZWNpYWwsIGhhbmRsZSwgZXZlbnRQYXRo
LCBidWJibGVUeXBlLAorICAgICAgICAgICAgdHlwZSA9IGV2ZW50LnR5cGUgfHwgZXZlbnQsCisg
ICAgICAgICAgICBuYW1lc3BhY2VzID0gW107CisKKyAgICAgICAgLy8gZm9jdXMvYmx1ciBtb3Jw
aHMgdG8gZm9jdXNpbi9vdXQ7IGVuc3VyZSB3ZSdyZSBub3QgZmlyaW5nIHRoZW0gcmlnaHQgbm93
CisgICAgICAgIGlmICggcmZvY3VzTW9ycGgudGVzdCggdHlwZSArIGpRdWVyeS5ldmVudC50cmln
Z2VyZWQgKSApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlm
ICggdHlwZS5pbmRleE9mKCAiISIgKSA+PSAwICkgeworICAgICAgICAgICAgLy8gRXhjbHVzaXZl
IGV2ZW50cyB0cmlnZ2VyIG9ubHkgZm9yIHRoZSBleGFjdCBldmVudCAobm8gbmFtZXNwYWNlcykK
KyAgICAgICAgICAgIHR5cGUgPSB0eXBlLnNsaWNlKDAsIC0xKTsKKyAgICAgICAgICAgIGV4Y2x1
c2l2ZSA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHR5cGUuaW5kZXhPZiggIi4i
ICkgPj0gMCApIHsKKyAgICAgICAgICAgIC8vIE5hbWVzcGFjZWQgdHJpZ2dlcjsgY3JlYXRlIGEg
cmVnZXhwIHRvIG1hdGNoIGV2ZW50IHR5cGUgaW4gaGFuZGxlKCkKKyAgICAgICAgICAgIG5hbWVz
cGFjZXMgPSB0eXBlLnNwbGl0KCIuIik7CisgICAgICAgICAgICB0eXBlID0gbmFtZXNwYWNlcy5z
aGlmdCgpOworICAgICAgICAgICAgbmFtZXNwYWNlcy5zb3J0KCk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoICghZWxlbSB8fCBqUXVlcnkuZXZlbnQuY3VzdG9tRXZlbnRbIHR5cGUgXSkgJiYg
IWpRdWVyeS5ldmVudC5nbG9iYWxbIHR5cGUgXSApIHsKKyAgICAgICAgICAgIC8vIE5vIGpRdWVy
eSBoYW5kbGVycyBmb3IgdGhpcyBldmVudCB0eXBlLCBhbmQgaXQgY2FuJ3QgaGF2ZSBpbmxpbmUg
aGFuZGxlcnMKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENh
bGxlciBjYW4gcGFzcyBpbiBhbiBFdmVudCwgT2JqZWN0LCBvciBqdXN0IGFuIGV2ZW50IHR5cGUg
c3RyaW5nCisgICAgICAgIGV2ZW50ID0gdHlwZW9mIGV2ZW50ID09PSAib2JqZWN0IiA/CisgICAg
ICAgICAgICAvLyBqUXVlcnkuRXZlbnQgb2JqZWN0CisgICAgICAgICAgICBldmVudFsgalF1ZXJ5
LmV4cGFuZG8gXSA/IGV2ZW50IDoKKyAgICAgICAgICAgIC8vIE9iamVjdCBsaXRlcmFsCisgICAg
ICAgICAgICBuZXcgalF1ZXJ5LkV2ZW50KCB0eXBlLCBldmVudCApIDoKKyAgICAgICAgICAgIC8v
IEp1c3QgdGhlIGV2ZW50IHR5cGUgKHN0cmluZykKKyAgICAgICAgICAgIG5ldyBqUXVlcnkuRXZl
bnQoIHR5cGUgKTsKKworICAgICAgICBldmVudC50eXBlID0gdHlwZTsKKyAgICAgICAgZXZlbnQu
aXNUcmlnZ2VyID0gdHJ1ZTsKKyAgICAgICAgZXZlbnQuZXhjbHVzaXZlID0gZXhjbHVzaXZlOwor
ICAgICAgICBldmVudC5uYW1lc3BhY2UgPSBuYW1lc3BhY2VzLmpvaW4oICIuIiApOworICAgICAg
ICBldmVudC5uYW1lc3BhY2VfcmUgPSBldmVudC5uYW1lc3BhY2U/IG5ldyBSZWdFeHAoIihefFxc
LikiICsgbmFtZXNwYWNlcy5qb2luKCJcXC4oPzouKlxcLnwpIikgKyAiKFxcLnwkKSIpIDogbnVs
bDsKKyAgICAgICAgb250eXBlID0gdHlwZS5pbmRleE9mKCAiOiIgKSA8IDAgPyAib24iICsgdHlw
ZSA6ICIiOworCisgICAgICAgIC8vIEhhbmRsZSBhIGdsb2JhbCB0cmlnZ2VyCisgICAgICAgIGlm
ICggIWVsZW0gKSB7CisKKyAgICAgICAgICAgIC8vIFRPRE86IFN0b3AgdGF1bnRpbmcgdGhlIGRh
dGEgY2FjaGU7IHJlbW92ZSBnbG9iYWwgZXZlbnRzIGFuZCBhbHdheXMgYXR0YWNoIHRvIGRvY3Vt
ZW50CisgICAgICAgICAgICBjYWNoZSA9IGpRdWVyeS5jYWNoZTsKKyAgICAgICAgICAgIGZvciAo
IGkgaW4gY2FjaGUgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBjYWNoZVsgaSBdLmV2ZW50cyAm
JiBjYWNoZVsgaSBdLmV2ZW50c1sgdHlwZSBdICkgeworICAgICAgICAgICAgICAgICAgICBqUXVl
cnkuZXZlbnQudHJpZ2dlciggZXZlbnQsIGRhdGEsIGNhY2hlWyBpIF0uaGFuZGxlLmVsZW0sIHRy
dWUgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBDbGVhbiB1cCB0aGUgZXZlbnQgaW4gY2FzZSBp
dCBpcyBiZWluZyByZXVzZWQKKyAgICAgICAgZXZlbnQucmVzdWx0ID0gdW5kZWZpbmVkOworICAg
ICAgICBpZiAoICFldmVudC50YXJnZXQgKSB7CisgICAgICAgICAgICBldmVudC50YXJnZXQgPSBl
bGVtOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ2xvbmUgYW55IGluY29taW5nIGRhdGEgYW5k
IHByZXBlbmQgdGhlIGV2ZW50LCBjcmVhdGluZyB0aGUgaGFuZGxlciBhcmcgbGlzdAorICAgICAg
ICBkYXRhID0gZGF0YSAhPSBudWxsID8galF1ZXJ5Lm1ha2VBcnJheSggZGF0YSApIDogW107Cisg
ICAgICAgIGRhdGEudW5zaGlmdCggZXZlbnQgKTsKKworICAgICAgICAvLyBBbGxvdyBzcGVjaWFs
IGV2ZW50cyB0byBkcmF3IG91dHNpZGUgdGhlIGxpbmVzCisgICAgICAgIHNwZWNpYWwgPSBqUXVl
cnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9OworICAgICAgICBpZiAoIHNwZWNpYWwudHJp
Z2dlciAmJiBzcGVjaWFsLnRyaWdnZXIuYXBwbHkoIGVsZW0sIGRhdGEgKSA9PT0gZmFsc2UgKSB7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBEZXRlcm1pbmUg
ZXZlbnQgcHJvcGFnYXRpb24gcGF0aCBpbiBhZHZhbmNlLCBwZXIgVzNDIGV2ZW50cyBzcGVjICgj
OTk1MSkKKyAgICAgICAgLy8gQnViYmxlIHVwIHRvIGRvY3VtZW50LCB0aGVuIHRvIHdpbmRvdzsg
d2F0Y2ggZm9yIGEgZ2xvYmFsIG93bmVyRG9jdW1lbnQgdmFyICgjOTcyNCkKKyAgICAgICAgZXZl
bnRQYXRoID0gW1sgZWxlbSwgc3BlY2lhbC5iaW5kVHlwZSB8fCB0eXBlIF1dOworICAgICAgICBp
ZiAoICFvbmx5SGFuZGxlcnMgJiYgIXNwZWNpYWwubm9CdWJibGUgJiYgIWpRdWVyeS5pc1dpbmRv
dyggZWxlbSApICkgeworCisgICAgICAgICAgICBidWJibGVUeXBlID0gc3BlY2lhbC5kZWxlZ2F0
ZVR5cGUgfHwgdHlwZTsKKyAgICAgICAgICAgIGN1ciA9IHJmb2N1c01vcnBoLnRlc3QoIGJ1YmJs
ZVR5cGUgKyB0eXBlICkgPyBlbGVtIDogZWxlbS5wYXJlbnROb2RlOworICAgICAgICAgICAgZm9y
ICggb2xkID0gZWxlbTsgY3VyOyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHsKKyAgICAgICAgICAg
ICAgICBldmVudFBhdGgucHVzaChbIGN1ciwgYnViYmxlVHlwZSBdKTsKKyAgICAgICAgICAgICAg
ICBvbGQgPSBjdXI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE9ubHkgYWRkIHdp
bmRvdyBpZiB3ZSBnb3QgdG8gZG9jdW1lbnQgKGUuZy4sIG5vdCBwbGFpbiBvYmogb3IgZGV0YWNo
ZWQgRE9NKQorICAgICAgICAgICAgaWYgKCBvbGQgPT09IChlbGVtLm93bmVyRG9jdW1lbnQgfHwg
ZG9jdW1lbnQpICkgeworICAgICAgICAgICAgICAgIGV2ZW50UGF0aC5wdXNoKFsgb2xkLmRlZmF1
bHRWaWV3IHx8IG9sZC5wYXJlbnRXaW5kb3cgfHwgd2luZG93LCBidWJibGVUeXBlIF0pOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gRmlyZSBoYW5kbGVycyBvbiB0aGUg
ZXZlbnQgcGF0aAorICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGV2ZW50UGF0aC5sZW5ndGggJiYg
IWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCk7IGkrKyApIHsKKworICAgICAgICAgICAgY3Vy
ID0gZXZlbnRQYXRoW2ldWzBdOworICAgICAgICAgICAgZXZlbnQudHlwZSA9IGV2ZW50UGF0aFtp
XVsxXTsKKworICAgICAgICAgICAgaGFuZGxlID0gKCBqUXVlcnkuX2RhdGEoIGN1ciwgImV2ZW50
cyIgKSB8fCB7fSApWyBldmVudC50eXBlIF0gJiYgalF1ZXJ5Ll9kYXRhKCBjdXIsICJoYW5kbGUi
ICk7CisgICAgICAgICAgICBpZiAoIGhhbmRsZSApIHsKKyAgICAgICAgICAgICAgICBoYW5kbGUu
YXBwbHkoIGN1ciwgZGF0YSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gTm90ZSB0
aGF0IHRoaXMgaXMgYSBiYXJlIEpTIGZ1bmN0aW9uIGFuZCBub3QgYSBqUXVlcnkgaGFuZGxlcgor
ICAgICAgICAgICAgaGFuZGxlID0gb250eXBlICYmIGN1clsgb250eXBlIF07CisgICAgICAgICAg
ICBpZiAoIGhhbmRsZSAmJiBqUXVlcnkuYWNjZXB0RGF0YSggY3VyICkgJiYgaGFuZGxlLmFwcGx5
ICYmIGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICkgPT09IGZhbHNlICkgeworICAgICAgICAgICAg
ICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgZXZlbnQudHlwZSA9IHR5cGU7CisKKyAgICAgICAgLy8gSWYgbm9ib2R5IHByZXZlbnRl
ZCB0aGUgZGVmYXVsdCBhY3Rpb24sIGRvIGl0IG5vdworICAgICAgICBpZiAoICFvbmx5SGFuZGxl
cnMgJiYgIWV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpICkgeworCisgICAgICAgICAgICBpZiAo
ICghc3BlY2lhbC5fZGVmYXVsdCB8fCBzcGVjaWFsLl9kZWZhdWx0LmFwcGx5KCBlbGVtLm93bmVy
RG9jdW1lbnQsIGRhdGEgKSA9PT0gZmFsc2UpICYmCisgICAgICAgICAgICAgICAgISh0eXBlID09
PSAiY2xpY2siICYmIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImEiICkpICYmIGpRdWVyeS5hY2Nl
cHREYXRhKCBlbGVtICkgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBDYWxsIGEgbmF0aXZlIERP
TSBtZXRob2Qgb24gdGhlIHRhcmdldCB3aXRoIHRoZSBzYW1lIG5hbWUgbmFtZSBhcyB0aGUgZXZl
bnQuCisgICAgICAgICAgICAgICAgLy8gQ2FuJ3QgdXNlIGFuIC5pc0Z1bmN0aW9uKCkgY2hlY2sg
aGVyZSBiZWNhdXNlIElFNi83IGZhaWxzIHRoYXQgdGVzdC4KKyAgICAgICAgICAgICAgICAvLyBE
b24ndCBkbyBkZWZhdWx0IGFjdGlvbnMgb24gd2luZG93LCB0aGF0J3Mgd2hlcmUgZ2xvYmFsIHZh
cmlhYmxlcyBiZSAoIzYxNzApCisgICAgICAgICAgICAgICAgLy8gSUU8OSBkaWVzIG9uIGZvY3Vz
L2JsdXIgdG8gaGlkZGVuIGVsZW1lbnQgKCMxNDg2KQorICAgICAgICAgICAgICAgIGlmICggb250
eXBlICYmIGVsZW1bIHR5cGUgXSAmJiAoKHR5cGUgIT09ICJmb2N1cyIgJiYgdHlwZSAhPT0gImJs
dXIiKSB8fCBldmVudC50YXJnZXQub2Zmc2V0V2lkdGggIT09IDApICYmICFqUXVlcnkuaXNXaW5k
b3coIGVsZW0gKSApIHsKKworICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCByZS10cmlnZ2Vy
IGFuIG9uRk9PIGV2ZW50IHdoZW4gd2UgY2FsbCBpdHMgRk9PKCkgbWV0aG9kCisgICAgICAgICAg
ICAgICAgICAgIG9sZCA9IGVsZW1bIG9udHlwZSBdOworCisgICAgICAgICAgICAgICAgICAgIGlm
ICggb2xkICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZWxlbVsgb250eXBlIF0gPSBudWxs
OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gUHJldmVu
dCByZS10cmlnZ2VyaW5nIG9mIHRoZSBzYW1lIGV2ZW50LCBzaW5jZSB3ZSBhbHJlYWR5IGJ1YmJs
ZWQgaXQgYWJvdmUKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9
IHR5cGU7CisgICAgICAgICAgICAgICAgICAgIGVsZW1bIHR5cGUgXSgpOworICAgICAgICAgICAg
ICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdW5kZWZpbmVkOworCisgICAgICAgICAg
ICAgICAgICAgIGlmICggb2xkICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZWxlbVsgb250
eXBlIF0gPSBvbGQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZXZlbnQucmVzdWx0Owor
ICAgIH0sCisKKyAgICBkaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50ICkgeworCisgICAgICAgIC8v
IE1ha2UgYSB3cml0YWJsZSBqUXVlcnkuRXZlbnQgZnJvbSB0aGUgbmF0aXZlIGV2ZW50IG9iamVj
dAorICAgICAgICBldmVudCA9IGpRdWVyeS5ldmVudC5maXgoIGV2ZW50IHx8IHdpbmRvdy5ldmVu
dCApOworCisgICAgICAgIHZhciBpLCBqLCBjdXIsIHJldCwgc2VsTWF0Y2gsIG1hdGNoZWQsIG1h
dGNoZXMsIGhhbmRsZU9iaiwgc2VsLCByZWxhdGVkLAorICAgICAgICAgICAgaGFuZGxlcnMgPSAo
IChqUXVlcnkuX2RhdGEoIHRoaXMsICJldmVudHMiICkgfHwge30gKVsgZXZlbnQudHlwZSBdIHx8
IFtdKSwKKyAgICAgICAgICAgIGRlbGVnYXRlQ291bnQgPSBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50
LAorICAgICAgICAgICAgYXJncyA9IGNvcmVfc2xpY2UuY2FsbCggYXJndW1lbnRzICksCisgICAg
ICAgICAgICBydW5fYWxsID0gIWV2ZW50LmV4Y2x1c2l2ZSAmJiAhZXZlbnQubmFtZXNwYWNlLAor
ICAgICAgICAgICAgc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyBldmVudC50eXBlIF0g
fHwge30sCisgICAgICAgICAgICBoYW5kbGVyUXVldWUgPSBbXTsKKworICAgICAgICAvLyBVc2Ug
dGhlIGZpeC1lZCBqUXVlcnkuRXZlbnQgcmF0aGVyIHRoYW4gdGhlIChyZWFkLW9ubHkpIG5hdGl2
ZSBldmVudAorICAgICAgICBhcmdzWzBdID0gZXZlbnQ7CisgICAgICAgIGV2ZW50LmRlbGVnYXRl
VGFyZ2V0ID0gdGhpczsKKworICAgICAgICAvLyBDYWxsIHRoZSBwcmVEaXNwYXRjaCBob29rIGZv
ciB0aGUgbWFwcGVkIHR5cGUsIGFuZCBsZXQgaXQgYmFpbCBpZiBkZXNpcmVkCisgICAgICAgIGlm
ICggc3BlY2lhbC5wcmVEaXNwYXRjaCAmJiBzcGVjaWFsLnByZURpc3BhdGNoLmNhbGwoIHRoaXMs
IGV2ZW50ICkgPT09IGZhbHNlICkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgLy8gRGV0ZXJtaW5lIGhhbmRsZXJzIHRoYXQgc2hvdWxkIHJ1biBpZiB0aGVyZSBh
cmUgZGVsZWdhdGVkIGV2ZW50cworICAgICAgICAvLyBBdm9pZCBub24tbGVmdC1jbGljayBidWJi
bGluZyBpbiBGaXJlZm94ICgjMzg2MSkKKyAgICAgICAgaWYgKCBkZWxlZ2F0ZUNvdW50ICYmICEo
ZXZlbnQuYnV0dG9uICYmIGV2ZW50LnR5cGUgPT09ICJjbGljayIpICkgeworCisgICAgICAgICAg
ICBmb3IgKCBjdXIgPSBldmVudC50YXJnZXQ7IGN1ciAhPSB0aGlzOyBjdXIgPSBjdXIucGFyZW50
Tm9kZSB8fCB0aGlzICkgeworCisgICAgICAgICAgICAgICAgLy8gRG9uJ3QgcHJvY2VzcyBjbGlj
a3MgKE9OTFkpIG9uIGRpc2FibGVkIGVsZW1lbnRzICgjNjkxMSwgIzgxNjUsICMxMTM4MiwgIzEx
NzY0KQorICAgICAgICAgICAgICAgIGlmICggY3VyLmRpc2FibGVkICE9PSB0cnVlIHx8IGV2ZW50
LnR5cGUgIT09ICJjbGljayIgKSB7CisgICAgICAgICAgICAgICAgICAgIHNlbE1hdGNoID0ge307
CisgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAg
Zm9yICggaSA9IDA7IGkgPCBkZWxlZ2F0ZUNvdW50OyBpKysgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBoYW5kbGVPYmogPSBoYW5kbGVyc1sgaSBdOworICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsID0gaGFuZGxlT2JqLnNlbGVjdG9yOworCisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIHNlbE1hdGNoWyBzZWwgXSA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbE1hdGNoWyBzZWwgXSA9IGhhbmRsZU9iai5uZWVkc0NvbnRleHQgPworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIHNlbCwgdGhpcyApLmluZGV4KCBj
dXIgKSA+PSAwIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmZpbmQo
IHNlbCwgdGhpcywgbnVsbCwgWyBjdXIgXSApLmxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc2VsTWF0Y2hbIHNlbCBdICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMucHVzaCggaGFuZGxlT2JqICk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCBtYXRjaGVzLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGhhbmRsZXJRdWV1ZS5wdXNoKHsgZWxlbTogY3VyLCBtYXRjaGVzOiBtYXRjaGVzIH0pOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgLy8gQWRkIHRoZSByZW1haW5pbmcgKGRpcmVjdGx5LWJvdW5k
KSBoYW5kbGVycworICAgICAgICBpZiAoIGhhbmRsZXJzLmxlbmd0aCA+IGRlbGVnYXRlQ291bnQg
KSB7CisgICAgICAgICAgICBoYW5kbGVyUXVldWUucHVzaCh7IGVsZW06IHRoaXMsIG1hdGNoZXM6
IGhhbmRsZXJzLnNsaWNlKCBkZWxlZ2F0ZUNvdW50ICkgfSk7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBSdW4gZGVsZWdhdGVzIGZpcnN0OyB0aGV5IG1heSB3YW50IHRvIHN0b3AgcHJvcGFnYXRp
b24gYmVuZWF0aCB1cworICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGhhbmRsZXJRdWV1ZS5sZW5n
dGggJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCk7IGkrKyApIHsKKyAgICAgICAgICAg
IG1hdGNoZWQgPSBoYW5kbGVyUXVldWVbIGkgXTsKKyAgICAgICAgICAgIGV2ZW50LmN1cnJlbnRU
YXJnZXQgPSBtYXRjaGVkLmVsZW07CisKKyAgICAgICAgICAgIGZvciAoIGogPSAwOyBqIDwgbWF0
Y2hlZC5tYXRjaGVzLmxlbmd0aCAmJiAhZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3Bw
ZWQoKTsgaisrICkgeworICAgICAgICAgICAgICAgIGhhbmRsZU9iaiA9IG1hdGNoZWQubWF0Y2hl
c1sgaiBdOworCisgICAgICAgICAgICAgICAgLy8gVHJpZ2dlcmVkIGV2ZW50IG11c3QgZWl0aGVy
IDEpIGJlIG5vbi1leGNsdXNpdmUgYW5kIGhhdmUgbm8gbmFtZXNwYWNlLCBvcgorICAgICAgICAg
ICAgICAgIC8vIDIpIGhhdmUgbmFtZXNwYWNlKHMpIGEgc3Vic2V0IG9yIGVxdWFsIHRvIHRob3Nl
IGluIHRoZSBib3VuZCBldmVudCAoYm90aCBjYW4gaGF2ZSBubyBuYW1lc3BhY2UpLgorICAgICAg
ICAgICAgICAgIGlmICggcnVuX2FsbCB8fCAoIWV2ZW50Lm5hbWVzcGFjZSAmJiAhaGFuZGxlT2Jq
Lm5hbWVzcGFjZSkgfHwgZXZlbnQubmFtZXNwYWNlX3JlICYmIGV2ZW50Lm5hbWVzcGFjZV9yZS50
ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgZXZl
bnQuZGF0YSA9IGhhbmRsZU9iai5kYXRhOworICAgICAgICAgICAgICAgICAgICBldmVudC5oYW5k
bGVPYmogPSBoYW5kbGVPYmo7CisKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gKCAoalF1ZXJ5
LmV2ZW50LnNwZWNpYWxbIGhhbmRsZU9iai5vcmlnVHlwZSBdIHx8IHt9KS5oYW5kbGUgfHwgaGFu
ZGxlT2JqLmhhbmRsZXIgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcHBseSggbWF0
Y2hlZC5lbGVtLCBhcmdzICk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCByZXQgIT09IHVu
ZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnJlc3VsdCA9IHJldDsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmV0ID09PSBmYWxzZSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQ2FsbCB0aGUgcG9zdERpc3BhdGNo
IGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZQorICAgICAgICBpZiAoIHNwZWNpYWwucG9zdERpc3Bh
dGNoICkgeworICAgICAgICAgICAgc3BlY2lhbC5wb3N0RGlzcGF0Y2guY2FsbCggdGhpcywgZXZl
bnQgKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBldmVudC5yZXN1bHQ7CisgICAgfSwK
KworICAgIC8vIEluY2x1ZGVzIHNvbWUgZXZlbnQgcHJvcHMgc2hhcmVkIGJ5IEtleUV2ZW50IGFu
ZCBNb3VzZUV2ZW50CisgICAgLy8gKioqIGF0dHJDaGFuZ2UgYXR0ck5hbWUgcmVsYXRlZE5vZGUg
c3JjRWxlbWVudCAgYXJlIG5vdCBub3JtYWxpemVkLCBub24tVzNDLCBkZXByZWNhdGVkLCB3aWxs
IGJlIHJlbW92ZWQgaW4gMS44ICoqKgorICAgIHByb3BzOiAiYXR0ckNoYW5nZSBhdHRyTmFtZSBy
ZWxhdGVkTm9kZSBzcmNFbGVtZW50IGFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtleSBj
dXJyZW50VGFyZ2V0IGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRh
cmdldCB0aW1lU3RhbXAgdmlldyB3aGljaCIuc3BsaXQoIiAiKSwKKworICAgIGZpeEhvb2tzOiB7
fSwKKworICAgIGtleUhvb2tzOiB7CisgICAgICAgIHByb3BzOiAiY2hhciBjaGFyQ29kZSBrZXkg
a2V5Q29kZSIuc3BsaXQoIiAiKSwKKyAgICAgICAgZmlsdGVyOiBmdW5jdGlvbiggZXZlbnQsIG9y
aWdpbmFsICkgeworCisgICAgICAgICAgICAvLyBBZGQgd2hpY2ggZm9yIGtleSBldmVudHMKKyAg
ICAgICAgICAgIGlmICggZXZlbnQud2hpY2ggPT0gbnVsbCApIHsKKyAgICAgICAgICAgICAgICBl
dmVudC53aGljaCA9IG9yaWdpbmFsLmNoYXJDb2RlICE9IG51bGwgPyBvcmlnaW5hbC5jaGFyQ29k
ZSA6IG9yaWdpbmFsLmtleUNvZGU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVy
biBldmVudDsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBtb3VzZUhvb2tzOiB7CisgICAgICAg
IHByb3BzOiAiYnV0dG9uIGJ1dHRvbnMgY2xpZW50WCBjbGllbnRZIGZyb21FbGVtZW50IG9mZnNl
dFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNjcmVlblkgdG9FbGVtZW50Ii5zcGxpdCgi
ICIpLAorICAgICAgICBmaWx0ZXI6IGZ1bmN0aW9uKCBldmVudCwgb3JpZ2luYWwgKSB7CisgICAg
ICAgICAgICB2YXIgZXZlbnREb2MsIGRvYywgYm9keSwKKyAgICAgICAgICAgICAgICBidXR0b24g
PSBvcmlnaW5hbC5idXR0b24sCisgICAgICAgICAgICAgICAgZnJvbUVsZW1lbnQgPSBvcmlnaW5h
bC5mcm9tRWxlbWVudDsKKworICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHBhZ2VYL1kgaWYgbWlz
c2luZyBhbmQgY2xpZW50WC9ZIGF2YWlsYWJsZQorICAgICAgICAgICAgaWYgKCBldmVudC5wYWdl
WCA9PSBudWxsICYmIG9yaWdpbmFsLmNsaWVudFggIT0gbnVsbCApIHsKKyAgICAgICAgICAgICAg
ICBldmVudERvYyA9IGV2ZW50LnRhcmdldC5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50OworICAg
ICAgICAgICAgICAgIGRvYyA9IGV2ZW50RG9jLmRvY3VtZW50RWxlbWVudDsKKyAgICAgICAgICAg
ICAgICBib2R5ID0gZXZlbnREb2MuYm9keTsKKworICAgICAgICAgICAgICAgIGV2ZW50LnBhZ2VY
ID0gb3JpZ2luYWwuY2xpZW50WCArICggZG9jICYmIGRvYy5zY3JvbGxMZWZ0IHx8IGJvZHkgJiYg
Ym9keS5zY3JvbGxMZWZ0IHx8IDAgKSAtICggZG9jICYmIGRvYy5jbGllbnRMZWZ0IHx8IGJvZHkg
JiYgYm9keS5jbGllbnRMZWZ0IHx8IDAgKTsKKyAgICAgICAgICAgICAgICBldmVudC5wYWdlWSA9
IG9yaWdpbmFsLmNsaWVudFkgKyAoIGRvYyAmJiBkb2Muc2Nyb2xsVG9wICB8fCBib2R5ICYmIGJv
ZHkuc2Nyb2xsVG9wICB8fCAwICkgLSAoIGRvYyAmJiBkb2MuY2xpZW50VG9wICB8fCBib2R5ICYm
IGJvZHkuY2xpZW50VG9wICB8fCAwICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
IEFkZCByZWxhdGVkVGFyZ2V0LCBpZiBuZWNlc3NhcnkKKyAgICAgICAgICAgIGlmICggIWV2ZW50
LnJlbGF0ZWRUYXJnZXQgJiYgZnJvbUVsZW1lbnQgKSB7CisgICAgICAgICAgICAgICAgZXZlbnQu
cmVsYXRlZFRhcmdldCA9IGZyb21FbGVtZW50ID09PSBldmVudC50YXJnZXQgPyBvcmlnaW5hbC50
b0VsZW1lbnQgOiBmcm9tRWxlbWVudDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8g
QWRkIHdoaWNoIGZvciBjbGljazogMSA9PT0gbGVmdDsgMiA9PT0gbWlkZGxlOyAzID09PSByaWdo
dAorICAgICAgICAgICAgLy8gTm90ZTogYnV0dG9uIGlzIG5vdCBub3JtYWxpemVkLCBzbyBkb24n
dCB1c2UgaXQKKyAgICAgICAgICAgIGlmICggIWV2ZW50LndoaWNoICYmIGJ1dHRvbiAhPT0gdW5k
ZWZpbmVkICkgeworICAgICAgICAgICAgICAgIGV2ZW50LndoaWNoID0gKCBidXR0b24gJiAxID8g
MSA6ICggYnV0dG9uICYgMiA/IDMgOiAoIGJ1dHRvbiAmIDQgPyAyIDogMCApICkgKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGV2ZW50OworICAgICAgICB9CisgICAgfSwK
KworICAgIGZpeDogZnVuY3Rpb24oIGV2ZW50ICkgeworICAgICAgICBpZiAoIGV2ZW50WyBqUXVl
cnkuZXhwYW5kbyBdICkgeworICAgICAgICAgICAgcmV0dXJuIGV2ZW50OworICAgICAgICB9CisK
KyAgICAgICAgLy8gQ3JlYXRlIGEgd3JpdGFibGUgY29weSBvZiB0aGUgZXZlbnQgb2JqZWN0IGFu
ZCBub3JtYWxpemUgc29tZSBwcm9wZXJ0aWVzCisgICAgICAgIHZhciBpLCBwcm9wLAorICAgICAg
ICAgICAgb3JpZ2luYWxFdmVudCA9IGV2ZW50LAorICAgICAgICAgICAgZml4SG9vayA9IGpRdWVy
eS5ldmVudC5maXhIb29rc1sgZXZlbnQudHlwZSBdIHx8IHt9LAorICAgICAgICAgICAgY29weSA9
IGZpeEhvb2sucHJvcHMgPyB0aGlzLnByb3BzLmNvbmNhdCggZml4SG9vay5wcm9wcyApIDogdGhp
cy5wcm9wczsKKworICAgICAgICBldmVudCA9IGpRdWVyeS5FdmVudCggb3JpZ2luYWxFdmVudCAp
OworCisgICAgICAgIGZvciAoIGkgPSBjb3B5Lmxlbmd0aDsgaTsgKSB7CisgICAgICAgICAgICBw
cm9wID0gY29weVsgLS1pIF07CisgICAgICAgICAgICBldmVudFsgcHJvcCBdID0gb3JpZ2luYWxF
dmVudFsgcHJvcCBdOworICAgICAgICB9CisKKyAgICAgICAgLy8gRml4IHRhcmdldCBwcm9wZXJ0
eSwgaWYgbmVjZXNzYXJ5ICgjMTkyNSwgSUUgNi83LzggJiBTYWZhcmkyKQorICAgICAgICBpZiAo
ICFldmVudC50YXJnZXQgKSB7CisgICAgICAgICAgICBldmVudC50YXJnZXQgPSBvcmlnaW5hbEV2
ZW50LnNyY0VsZW1lbnQgfHwgZG9jdW1lbnQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBUYXJn
ZXQgc2hvdWxkIG5vdCBiZSBhIHRleHQgbm9kZSAoIzUwNCwgU2FmYXJpKQorICAgICAgICBpZiAo
IGV2ZW50LnRhcmdldC5ub2RlVHlwZSA9PT0gMyApIHsKKyAgICAgICAgICAgIGV2ZW50LnRhcmdl
dCA9IGV2ZW50LnRhcmdldC5wYXJlbnROb2RlOworICAgICAgICB9CisKKyAgICAgICAgLy8gRm9y
IG1vdXNlL2tleSBldmVudHMsIG1ldGFLZXk9PWZhbHNlIGlmIGl0J3MgdW5kZWZpbmVkICgjMzM2
OCwgIzExMzI4OyBJRTYvNy84KQorICAgICAgICBldmVudC5tZXRhS2V5ID0gISFldmVudC5tZXRh
S2V5OworCisgICAgICAgIHJldHVybiBmaXhIb29rLmZpbHRlcj8gZml4SG9vay5maWx0ZXIoIGV2
ZW50LCBvcmlnaW5hbEV2ZW50ICkgOiBldmVudDsKKyAgICB9LAorCisgICAgc3BlY2lhbDogewor
ICAgICAgICBsb2FkOiB7CisgICAgICAgICAgICAvLyBQcmV2ZW50IHRyaWdnZXJlZCBpbWFnZS5s
b2FkIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIHdpbmRvdy5sb2FkCisgICAgICAgICAgICBub0J1
YmJsZTogdHJ1ZQorICAgICAgICB9LAorCisgICAgICAgIGZvY3VzOiB7CisgICAgICAgICAgICBk
ZWxlZ2F0ZVR5cGU6ICJmb2N1c2luIgorICAgICAgICB9LAorICAgICAgICBibHVyOiB7CisgICAg
ICAgICAgICBkZWxlZ2F0ZVR5cGU6ICJmb2N1c291dCIKKyAgICAgICAgfSwKKworICAgICAgICBi
ZWZvcmV1bmxvYWQ6IHsKKyAgICAgICAgICAgIHNldHVwOiBmdW5jdGlvbiggZGF0YSwgbmFtZXNw
YWNlcywgZXZlbnRIYW5kbGUgKSB7CisgICAgICAgICAgICAgICAgLy8gV2Ugb25seSB3YW50IHRv
IGRvIHRoaXMgc3BlY2lhbCBjYXNlIG9uIHdpbmRvd3MKKyAgICAgICAgICAgICAgICBpZiAoIGpR
dWVyeS5pc1dpbmRvdyggdGhpcyApICkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLm9uYmVm
b3JldW5sb2FkID0gZXZlbnRIYW5kbGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fSwKKworICAgICAgICAgICAgdGVhcmRvd246IGZ1bmN0aW9uKCBuYW1lc3BhY2VzLCBldmVudEhh
bmRsZSApIHsKKyAgICAgICAgICAgICAgICBpZiAoIHRoaXMub25iZWZvcmV1bmxvYWQgPT09IGV2
ZW50SGFuZGxlICkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLm9uYmVmb3JldW5sb2FkID0g
bnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
LAorCisgICAgc2ltdWxhdGU6IGZ1bmN0aW9uKCB0eXBlLCBlbGVtLCBldmVudCwgYnViYmxlICkg
eworICAgICAgICAvLyBQaWdneWJhY2sgb24gYSBkb25vciBldmVudCB0byBzaW11bGF0ZSBhIGRp
ZmZlcmVudCBvbmUuCisgICAgICAgIC8vIEZha2Ugb3JpZ2luYWxFdmVudCB0byBhdm9pZCBkb25v
cidzIHN0b3BQcm9wYWdhdGlvbiwgYnV0IGlmIHRoZQorICAgICAgICAvLyBzaW11bGF0ZWQgZXZl
bnQgcHJldmVudHMgZGVmYXVsdCB0aGVuIHdlIGRvIHRoZSBzYW1lIG9uIHRoZSBkb25vci4KKyAg
ICAgICAgdmFyIGUgPSBqUXVlcnkuZXh0ZW5kKAorICAgICAgICAgICAgbmV3IGpRdWVyeS5FdmVu
dCgpLAorICAgICAgICAgICAgZXZlbnQsCisgICAgICAgICAgICB7IHR5cGU6IHR5cGUsCisgICAg
ICAgICAgICAgICAgaXNTaW11bGF0ZWQ6IHRydWUsCisgICAgICAgICAgICAgICAgb3JpZ2luYWxF
dmVudDoge30KKyAgICAgICAgICAgIH0KKyAgICAgICAgKTsKKyAgICAgICAgaWYgKCBidWJibGUg
KSB7CisgICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlciggZSwgbnVsbCwgZWxlbSApOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LmRpc3BhdGNoLmNhbGwo
IGVsZW0sIGUgKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIGUuaXNEZWZhdWx0UHJldmVudGVk
KCkgKSB7CisgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICB9Cisg
ICAgfQorfTsKKworLy8gU29tZSBwbHVnaW5zIGFyZSB1c2luZywgYnV0IGl0J3MgdW5kb2N1bWVu
dGVkL2RlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZC4KKy8vIFRoZSAxLjcgc3BlY2lhbCBl
dmVudCBpbnRlcmZhY2Ugc2hvdWxkIHByb3ZpZGUgYWxsIHRoZSBob29rcyBuZWVkZWQgbm93Lgor
alF1ZXJ5LmV2ZW50LmhhbmRsZSA9IGpRdWVyeS5ldmVudC5kaXNwYXRjaDsKKworalF1ZXJ5LnJl
bW92ZUV2ZW50ID0gZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciA/CisgICAgZnVuY3Rpb24o
IGVsZW0sIHR5cGUsIGhhbmRsZSApIHsKKyAgICAgICAgaWYgKCBlbGVtLnJlbW92ZUV2ZW50TGlz
dGVuZXIgKSB7CisgICAgICAgICAgICBlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIoIHR5cGUsIGhh
bmRsZSwgZmFsc2UgKTsKKyAgICAgICAgfQorICAgIH0gOgorICAgIGZ1bmN0aW9uKCBlbGVtLCB0
eXBlLCBoYW5kbGUgKSB7CisgICAgICAgIHZhciBuYW1lID0gIm9uIiArIHR5cGU7CisKKyAgICAg
ICAgaWYgKCBlbGVtLmRldGFjaEV2ZW50ICkgeworCisgICAgICAgICAgICAvLyAjODU0NSwgIzcw
NTQsIHByZXZlbnRpbmcgbWVtb3J5IGxlYWtzIGZvciBjdXN0b20gZXZlbnRzIGluIElFNi04Cisg
ICAgICAgICAgICAvLyBkZXRhY2hFdmVudCBuZWVkZWQgcHJvcGVydHkgb24gZWxlbWVudCwgYnkg
bmFtZSBvZiB0aGF0IGV2ZW50LCB0byBwcm9wZXJseSBleHBvc2UgaXQgdG8gR0MKKyAgICAgICAg
ICAgIGlmICggdHlwZW9mIGVsZW1bIG5hbWUgXSA9PT0gInVuZGVmaW5lZCIgKSB7CisgICAgICAg
ICAgICAgICAgZWxlbVsgbmFtZSBdID0gbnVsbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgZWxlbS5kZXRhY2hFdmVudCggbmFtZSwgaGFuZGxlICk7CisgICAgICAgIH0KKyAgICB9Owor
CitqUXVlcnkuRXZlbnQgPSBmdW5jdGlvbiggc3JjLCBwcm9wcyApIHsKKyAgICAvLyBBbGxvdyBp
bnN0YW50aWF0aW9uIHdpdGhvdXQgdGhlICduZXcnIGtleXdvcmQKKyAgICBpZiAoICEodGhpcyBp
bnN0YW5jZW9mIGpRdWVyeS5FdmVudCkgKSB7CisgICAgICAgIHJldHVybiBuZXcgalF1ZXJ5LkV2
ZW50KCBzcmMsIHByb3BzICk7CisgICAgfQorCisgICAgLy8gRXZlbnQgb2JqZWN0CisgICAgaWYg
KCBzcmMgJiYgc3JjLnR5cGUgKSB7CisgICAgICAgIHRoaXMub3JpZ2luYWxFdmVudCA9IHNyYzsK
KyAgICAgICAgdGhpcy50eXBlID0gc3JjLnR5cGU7CisKKyAgICAgICAgLy8gRXZlbnRzIGJ1YmJs
aW5nIHVwIHRoZSBkb2N1bWVudCBtYXkgaGF2ZSBiZWVuIG1hcmtlZCBhcyBwcmV2ZW50ZWQKKyAg
ICAgICAgLy8gYnkgYSBoYW5kbGVyIGxvd2VyIGRvd24gdGhlIHRyZWU7IHJlZmxlY3QgdGhlIGNv
cnJlY3QgdmFsdWUuCisgICAgICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gKCBzcmMuZGVm
YXVsdFByZXZlbnRlZCB8fCBzcmMucmV0dXJuVmFsdWUgPT09IGZhbHNlIHx8CisgICAgICAgICAg
ICBzcmMuZ2V0UHJldmVudERlZmF1bHQgJiYgc3JjLmdldFByZXZlbnREZWZhdWx0KCkgKSA/IHJl
dHVyblRydWUgOiByZXR1cm5GYWxzZTsKKworICAgIC8vIEV2ZW50IHR5cGUKKyAgICB9IGVsc2Ug
eworICAgICAgICB0aGlzLnR5cGUgPSBzcmM7CisgICAgfQorCisgICAgLy8gUHV0IGV4cGxpY2l0
bHkgcHJvdmlkZWQgcHJvcGVydGllcyBvbnRvIHRoZSBldmVudCBvYmplY3QKKyAgICBpZiAoIHBy
b3BzICkgeworICAgICAgICBqUXVlcnkuZXh0ZW5kKCB0aGlzLCBwcm9wcyApOworICAgIH0KKwor
ICAgIC8vIENyZWF0ZSBhIHRpbWVzdGFtcCBpZiBpbmNvbWluZyBldmVudCBkb2Vzbid0IGhhdmUg
b25lCisgICAgdGhpcy50aW1lU3RhbXAgPSBzcmMgJiYgc3JjLnRpbWVTdGFtcCB8fCBqUXVlcnku
bm93KCk7CisKKyAgICAvLyBNYXJrIGl0IGFzIGZpeGVkCisgICAgdGhpc1sgalF1ZXJ5LmV4cGFu
ZG8gXSA9IHRydWU7Cit9OworCitmdW5jdGlvbiByZXR1cm5GYWxzZSgpIHsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CitmdW5jdGlvbiByZXR1cm5UcnVlKCkgeworICAgIHJldHVybiB0cnVlOworfQor
CisvLyBqUXVlcnkuRXZlbnQgaXMgYmFzZWQgb24gRE9NMyBFdmVudHMgYXMgc3BlY2lmaWVkIGJ5
IHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIEJpbmRpbmcKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RS
LzIwMDMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMDMwMzMxL2VjbWEtc2NyaXB0LWJpbmRpbmcu
aHRtbAoralF1ZXJ5LkV2ZW50LnByb3RvdHlwZSA9IHsKKyAgICBwcmV2ZW50RGVmYXVsdDogZnVu
Y3Rpb24oKSB7CisgICAgICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gcmV0dXJuVHJ1ZTsK
KworICAgICAgICB2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDsKKyAgICAgICAgaWYgKCAhZSAp
IHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGlmIHByZXZl
bnREZWZhdWx0IGV4aXN0cyBydW4gaXQgb24gdGhlIG9yaWdpbmFsIGV2ZW50CisgICAgICAgIGlm
ICggZS5wcmV2ZW50RGVmYXVsdCApIHsKKyAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsK
KworICAgICAgICAvLyBvdGhlcndpc2Ugc2V0IHRoZSByZXR1cm5WYWx1ZSBwcm9wZXJ0eSBvZiB0
aGUgb3JpZ2luYWwgZXZlbnQgdG8gZmFsc2UgKElFKQorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlOworICAgICAgICB9CisgICAgfSwKKyAgICBzdG9w
UHJvcGFnYXRpb246IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLmlzUHJvcGFnYXRpb25TdG9w
cGVkID0gcmV0dXJuVHJ1ZTsKKworICAgICAgICB2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDsK
KyAgICAgICAgaWYgKCAhZSApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAvLyBpZiBzdG9wUHJvcGFnYXRpb24gZXhpc3RzIHJ1biBpdCBvbiB0aGUgb3JpZ2luYWwg
ZXZlbnQKKyAgICAgICAgaWYgKCBlLnN0b3BQcm9wYWdhdGlvbiApIHsKKyAgICAgICAgICAgIGUu
c3RvcFByb3BhZ2F0aW9uKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gb3RoZXJ3aXNlIHNldCB0
aGUgY2FuY2VsQnViYmxlIHByb3BlcnR5IG9mIHRoZSBvcmlnaW5hbCBldmVudCB0byB0cnVlIChJ
RSkKKyAgICAgICAgZS5jYW5jZWxCdWJibGUgPSB0cnVlOworICAgIH0sCisgICAgc3RvcEltbWVk
aWF0ZVByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5pc0ltbWVkaWF0ZVBy
b3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7CisgICAgICAgIHRoaXMuc3RvcFByb3BhZ2F0
aW9uKCk7CisgICAgfSwKKyAgICBpc0RlZmF1bHRQcmV2ZW50ZWQ6IHJldHVybkZhbHNlLAorICAg
IGlzUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSwKKyAgICBpc0ltbWVkaWF0ZVByb3Bh
Z2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UKK307CisKKy8vIENyZWF0ZSBtb3VzZWVudGVyL2xl
YXZlIGV2ZW50cyB1c2luZyBtb3VzZW92ZXIvb3V0IGFuZCBldmVudC10aW1lIGNoZWNrcworalF1
ZXJ5LmVhY2goeworICAgIG1vdXNlZW50ZXI6ICJtb3VzZW92ZXIiLAorICAgIG1vdXNlbGVhdmU6
ICJtb3VzZW91dCIKK30sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7CisgICAgalF1ZXJ5LmV2ZW50
LnNwZWNpYWxbIG9yaWcgXSA9IHsKKyAgICAgICAgZGVsZWdhdGVUeXBlOiBmaXgsCisgICAgICAg
IGJpbmRUeXBlOiBmaXgsCisKKyAgICAgICAgaGFuZGxlOiBmdW5jdGlvbiggZXZlbnQgKSB7Cisg
ICAgICAgICAgICB2YXIgcmV0LAorICAgICAgICAgICAgICAgIHRhcmdldCA9IHRoaXMsCisgICAg
ICAgICAgICAgICAgcmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQsCisgICAgICAgICAgICAg
ICAgaGFuZGxlT2JqID0gZXZlbnQuaGFuZGxlT2JqLAorICAgICAgICAgICAgICAgIHNlbGVjdG9y
ID0gaGFuZGxlT2JqLnNlbGVjdG9yOworCisgICAgICAgICAgICAvLyBGb3IgbW91c2VudGVyL2xl
YXZlIGNhbGwgdGhlIGhhbmRsZXIgaWYgcmVsYXRlZCBpcyBvdXRzaWRlIHRoZSB0YXJnZXQuCisg
ICAgICAgICAgICAvLyBOQjogTm8gcmVsYXRlZFRhcmdldCBpZiB0aGUgbW91c2UgbGVmdC9lbnRl
cmVkIHRoZSBicm93c2VyIHdpbmRvdworICAgICAgICAgICAgaWYgKCAhcmVsYXRlZCB8fCAocmVs
YXRlZCAhPT0gdGFyZ2V0ICYmICFqUXVlcnkuY29udGFpbnMoIHRhcmdldCwgcmVsYXRlZCApKSAp
IHsKKyAgICAgICAgICAgICAgICBldmVudC50eXBlID0gaGFuZGxlT2JqLm9yaWdUeXBlOworICAg
ICAgICAgICAgICAgIHJldCA9IGhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVu
dHMgKTsKKyAgICAgICAgICAgICAgICBldmVudC50eXBlID0gZml4OworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQorICAgIH07Cit9KTsKKworLy8gSUUg
c3VibWl0IGRlbGVnYXRpb24KK2lmICggIWpRdWVyeS5zdXBwb3J0LnN1Ym1pdEJ1YmJsZXMgKSB7
CisKKyAgICBqUXVlcnkuZXZlbnQuc3BlY2lhbC5zdWJtaXQgPSB7CisgICAgICAgIHNldHVwOiBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgIC8vIE9ubHkgbmVlZCB0aGlzIGZvciBkZWxlZ2F0ZWQg
Zm9ybSBzdWJtaXQgZXZlbnRzCisgICAgICAgICAgICBpZiAoIGpRdWVyeS5ub2RlTmFtZSggdGhp
cywgImZvcm0iICkgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBMYXp5LWFkZCBhIHN1Ym1pdCBoYW5kbGVyIHdoZW4gYSBk
ZXNjZW5kYW50IGZvcm0gbWF5IHBvdGVudGlhbGx5IGJlIHN1Ym1pdHRlZAorICAgICAgICAgICAg
alF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgImNsaWNrLl9zdWJtaXQga2V5cHJlc3MuX3N1Ym1pdCIs
IGZ1bmN0aW9uKCBlICkgeworICAgICAgICAgICAgICAgIC8vIE5vZGUgbmFtZSBjaGVjayBhdm9p
ZHMgYSBWTUwtcmVsYXRlZCBjcmFzaCBpbiBJRSAoIzk4MDcpCisgICAgICAgICAgICAgICAgdmFy
IGVsZW0gPSBlLnRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgZm9ybSA9IGpRdWVyeS5ub2Rl
TmFtZSggZWxlbSwgImlucHV0IiApIHx8IGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImJ1dHRvbiIg
KSA/IGVsZW0uZm9ybSA6IHVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICBpZiAoIGZvcm0gJiYg
IWpRdWVyeS5fZGF0YSggZm9ybSwgIl9zdWJtaXRfYXR0YWNoZWQiICkgKSB7CisgICAgICAgICAg
ICAgICAgICAgIGpRdWVyeS5ldmVudC5hZGQoIGZvcm0sICJzdWJtaXQuX3N1Ym1pdCIsIGZ1bmN0
aW9uKCBldmVudCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Ll9zdWJtaXRfYnVi
YmxlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5fZGF0YSggZm9ybSwgIl9zdWJtaXRfYXR0YWNoZWQiLCB0cnVlICk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAvLyByZXR1cm4gdW5kZWZp
bmVkIHNpbmNlIHdlIGRvbid0IG5lZWQgYW4gZXZlbnQgbGlzdGVuZXIKKyAgICAgICAgfSwKKwor
ICAgICAgICBwb3N0RGlzcGF0Y2g6IGZ1bmN0aW9uKCBldmVudCApIHsKKyAgICAgICAgICAgIC8v
IElmIGZvcm0gd2FzIHN1Ym1pdHRlZCBieSB0aGUgdXNlciwgYnViYmxlIHRoZSBldmVudCB1cCB0
aGUgdHJlZQorICAgICAgICAgICAgaWYgKCBldmVudC5fc3VibWl0X2J1YmJsZSApIHsKKyAgICAg
ICAgICAgICAgICBkZWxldGUgZXZlbnQuX3N1Ym1pdF9idWJibGU7CisgICAgICAgICAgICAgICAg
aWYgKCB0aGlzLnBhcmVudE5vZGUgJiYgIWV2ZW50LmlzVHJpZ2dlciApIHsKKyAgICAgICAgICAg
ICAgICAgICAgalF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCAic3VibWl0IiwgdGhpcy5wYXJlbnROb2Rl
LCBldmVudCwgdHJ1ZSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSwKKworICAgICAgICB0ZWFyZG93bjogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAvLyBP
bmx5IG5lZWQgdGhpcyBmb3IgZGVsZWdhdGVkIGZvcm0gc3VibWl0IGV2ZW50cworICAgICAgICAg
ICAgaWYgKCBqUXVlcnkubm9kZU5hbWUoIHRoaXMsICJmb3JtIiApICkgeworICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gUmVtb3Zl
IGRlbGVnYXRlZCBoYW5kbGVyczsgY2xlYW5EYXRhIGV2ZW50dWFsbHkgcmVhcHMgc3VibWl0IGhh
bmRsZXJzIGF0dGFjaGVkIGFib3ZlCisgICAgICAgICAgICBqUXVlcnkuZXZlbnQucmVtb3ZlKCB0
aGlzLCAiLl9zdWJtaXQiICk7CisgICAgICAgIH0KKyAgICB9OworfQorCisvLyBJRSBjaGFuZ2Ug
ZGVsZWdhdGlvbiBhbmQgY2hlY2tib3gvcmFkaW8gZml4CitpZiAoICFqUXVlcnkuc3VwcG9ydC5j
aGFuZ2VCdWJibGVzICkgeworCisgICAgalF1ZXJ5LmV2ZW50LnNwZWNpYWwuY2hhbmdlID0gewor
CisgICAgICAgIHNldHVwOiBmdW5jdGlvbigpIHsKKworICAgICAgICAgICAgaWYgKCByZm9ybUVs
ZW1zLnRlc3QoIHRoaXMubm9kZU5hbWUgKSApIHsKKyAgICAgICAgICAgICAgICAvLyBJRSBkb2Vz
bid0IGZpcmUgY2hhbmdlIG9uIGEgY2hlY2svcmFkaW8gdW50aWwgYmx1cjsgdHJpZ2dlciBpdCBv
biBjbGljaworICAgICAgICAgICAgICAgIC8vIGFmdGVyIGEgcHJvcGVydHljaGFuZ2UuIEVhdCB0
aGUgYmx1ci1jaGFuZ2UgaW4gc3BlY2lhbC5jaGFuZ2UuaGFuZGxlLgorICAgICAgICAgICAgICAg
IC8vIFRoaXMgc3RpbGwgZmlyZXMgb25jaGFuZ2UgYSBzZWNvbmQgdGltZSBmb3IgY2hlY2svcmFk
aW8gYWZ0ZXIgYmx1ci4KKyAgICAgICAgICAgICAgICBpZiAoIHRoaXMudHlwZSA9PT0gImNoZWNr
Ym94IiB8fCB0aGlzLnR5cGUgPT09ICJyYWRpbyIgKSB7CisgICAgICAgICAgICAgICAgICAgIGpR
dWVyeS5ldmVudC5hZGQoIHRoaXMsICJwcm9wZXJ0eWNoYW5nZS5fY2hhbmdlIiwgZnVuY3Rpb24o
IGV2ZW50ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBldmVudC5vcmlnaW5hbEV2
ZW50LnByb3BlcnR5TmFtZSA9PT0gImNoZWNrZWQiICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMuX2p1c3RfY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICBqUXVlcnku
ZXZlbnQuYWRkKCB0aGlzLCAiY2xpY2suX2NoYW5nZSIsIGZ1bmN0aW9uKCBldmVudCApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggdGhpcy5fanVzdF9jaGFuZ2VkICYmICFldmVudC5p
c1RyaWdnZXIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fanVzdF9jaGFu
Z2VkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBBbGxvdyB0cmlnZ2VyZWQsIHNpbXVsYXRlZCBjaGFuZ2UgZXZlbnRzICgjMTE1
MDApCisgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQuc2ltdWxhdGUoICJjaGFu
Z2UiLCB0aGlzLCBldmVudCwgdHJ1ZSApOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgLy8gRGVsZWdhdGVkIGV2ZW50OyBsYXp5LWFkZCBhIGNoYW5nZSBoYW5k
bGVyIG9uIGRlc2NlbmRhbnQgaW5wdXRzCisgICAgICAgICAgICBqUXVlcnkuZXZlbnQuYWRkKCB0
aGlzLCAiYmVmb3JlYWN0aXZhdGUuX2NoYW5nZSIsIGZ1bmN0aW9uKCBlICkgeworICAgICAgICAg
ICAgICAgIHZhciBlbGVtID0gZS50YXJnZXQ7CisKKyAgICAgICAgICAgICAgICBpZiAoIHJmb3Jt
RWxlbXMudGVzdCggZWxlbS5ub2RlTmFtZSApICYmICFqUXVlcnkuX2RhdGEoIGVsZW0sICJfY2hh
bmdlX2F0dGFjaGVkIiApICkgeworICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQuYWRk
KCBlbGVtLCAiY2hhbmdlLl9jaGFuZ2UiLCBmdW5jdGlvbiggZXZlbnQgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHRoaXMucGFyZW50Tm9kZSAmJiAhZXZlbnQuaXNTaW11bGF0ZWQg
JiYgIWV2ZW50LmlzVHJpZ2dlciApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVl
cnkuZXZlbnQuc2ltdWxhdGUoICJjaGFuZ2UiLCB0aGlzLnBhcmVudE5vZGUsIGV2ZW50LCB0cnVl
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgICAgICAgICBqUXVlcnkuX2RhdGEoIGVsZW0sICJfY2hhbmdlX2F0dGFjaGVk
IiwgdHJ1ZSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9
LAorCisgICAgICAgIGhhbmRsZTogZnVuY3Rpb24oIGV2ZW50ICkgeworICAgICAgICAgICAgdmFy
IGVsZW0gPSBldmVudC50YXJnZXQ7CisKKyAgICAgICAgICAgIC8vIFN3YWxsb3cgbmF0aXZlIGNo
YW5nZSBldmVudHMgZnJvbSBjaGVja2JveC9yYWRpbywgd2UgYWxyZWFkeSB0cmlnZ2VyZWQgdGhl
bSBhYm92ZQorICAgICAgICAgICAgaWYgKCB0aGlzICE9PSBlbGVtIHx8IGV2ZW50LmlzU2ltdWxh
dGVkIHx8IGV2ZW50LmlzVHJpZ2dlciB8fCAoZWxlbS50eXBlICE9PSAicmFkaW8iICYmIGVsZW0u
dHlwZSAhPT0gImNoZWNrYm94IikgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50Lmhh
bmRsZU9iai5oYW5kbGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSwKKworICAgICAgICB0ZWFyZG93bjogZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICBqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCAiLl9jaGFuZ2UiICk7CisKKyAgICAgICAgICAg
IHJldHVybiAhcmZvcm1FbGVtcy50ZXN0KCB0aGlzLm5vZGVOYW1lICk7CisgICAgICAgIH0KKyAg
ICB9OworfQorCisvLyBDcmVhdGUgImJ1YmJsaW5nIiBmb2N1cyBhbmQgYmx1ciBldmVudHMKK2lm
ICggIWpRdWVyeS5zdXBwb3J0LmZvY3VzaW5CdWJibGVzICkgeworICAgIGpRdWVyeS5lYWNoKHsg
Zm9jdXM6ICJmb2N1c2luIiwgYmx1cjogImZvY3Vzb3V0IiB9LCBmdW5jdGlvbiggb3JpZywgZml4
ICkgeworCisgICAgICAgIC8vIEF0dGFjaCBhIHNpbmdsZSBjYXB0dXJpbmcgaGFuZGxlciB3aGls
ZSBzb21lb25lIHdhbnRzIGZvY3VzaW4vZm9jdXNvdXQKKyAgICAgICAgdmFyIGF0dGFjaGVzID0g
MCwKKyAgICAgICAgICAgIGhhbmRsZXIgPSBmdW5jdGlvbiggZXZlbnQgKSB7CisgICAgICAgICAg
ICAgICAgalF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCBmaXgsIGV2ZW50LnRhcmdldCwgalF1ZXJ5LmV2
ZW50LmZpeCggZXZlbnQgKSwgdHJ1ZSApOworICAgICAgICAgICAgfTsKKworICAgICAgICBqUXVl
cnkuZXZlbnQuc3BlY2lhbFsgZml4IF0gPSB7CisgICAgICAgICAgICBzZXR1cDogZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICAgICAgaWYgKCBhdHRhY2hlcysrID09PSAwICkgeworICAgICAgICAg
ICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVl
ICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHRlYXJk
b3duOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBpZiAoIC0tYXR0YWNoZXMgPT09IDAg
KSB7CisgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIG9y
aWcsIGhhbmRsZXIsIHRydWUgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH07CisgICAgfSk7Cit9CisKK2pRdWVyeS5mbi5leHRlbmQoeworCisgICAgb246IGZ1
bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuLCAvKklOVEVSTkFMKi8gb25lICkgewor
ICAgICAgICB2YXIgb3JpZ0ZuLCB0eXBlOworCisgICAgICAgIC8vIFR5cGVzIGNhbiBiZSBhIG1h
cCBvZiB0eXBlcy9oYW5kbGVycworICAgICAgICBpZiAoIHR5cGVvZiB0eXBlcyA9PT0gIm9iamVj
dCIgKSB7CisgICAgICAgICAgICAvLyAoIHR5cGVzLU9iamVjdCwgc2VsZWN0b3IsIGRhdGEgKQor
ICAgICAgICAgICAgaWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09ICJzdHJpbmciICkgeyAvLyAmJiBz
ZWxlY3RvciAhPSBudWxsCisgICAgICAgICAgICAgICAgLy8gKCB0eXBlcy1PYmplY3QsIGRhdGEg
KQorICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhIHx8IHNlbGVjdG9yOworICAgICAgICAgICAg
ICAgIHNlbGVjdG9yID0gdW5kZWZpbmVkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9y
ICggdHlwZSBpbiB0eXBlcyApIHsKKyAgICAgICAgICAgICAgICB0aGlzLm9uKCB0eXBlLCBzZWxl
Y3RvciwgZGF0YSwgdHlwZXNbIHR5cGUgXSwgb25lICk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggZGF0YSA9PSBudWxs
ICYmIGZuID09IG51bGwgKSB7CisgICAgICAgICAgICAvLyAoIHR5cGVzLCBmbiApCisgICAgICAg
ICAgICBmbiA9IHNlbGVjdG9yOworICAgICAgICAgICAgZGF0YSA9IHNlbGVjdG9yID0gdW5kZWZp
bmVkOworICAgICAgICB9IGVsc2UgaWYgKCBmbiA9PSBudWxsICkgeworICAgICAgICAgICAgaWYg
KCB0eXBlb2Ygc2VsZWN0b3IgPT09ICJzdHJpbmciICkgeworICAgICAgICAgICAgICAgIC8vICgg
dHlwZXMsIHNlbGVjdG9yLCBmbiApCisgICAgICAgICAgICAgICAgZm4gPSBkYXRhOworICAgICAg
ICAgICAgICAgIGRhdGEgPSB1bmRlZmluZWQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIC8vICggdHlwZXMsIGRhdGEsIGZuICkKKyAgICAgICAgICAgICAgICBmbiA9IGRh
dGE7CisgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGVjdG9yOworICAgICAgICAgICAgICAgIHNl
bGVjdG9yID0gdW5kZWZpbmVkOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlm
ICggZm4gPT09IGZhbHNlICkgeworICAgICAgICAgICAgZm4gPSByZXR1cm5GYWxzZTsKKyAgICAg
ICAgfSBlbHNlIGlmICggIWZuICkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoIG9uZSA9PT0gMSApIHsKKyAgICAgICAgICAgIG9yaWdGbiA9IGZu
OworICAgICAgICAgICAgZm4gPSBmdW5jdGlvbiggZXZlbnQgKSB7CisgICAgICAgICAgICAgICAg
Ly8gQ2FuIHVzZSBhbiBlbXB0eSBzZXQsIHNpbmNlIGV2ZW50IGNvbnRhaW5zIHRoZSBpbmZvCisg
ICAgICAgICAgICAgICAgalF1ZXJ5KCkub2ZmKCBldmVudCApOworICAgICAgICAgICAgICAgIHJl
dHVybiBvcmlnRm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOworICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgIC8vIFVzZSBzYW1lIGd1aWQgc28gY2FsbGVyIGNhbiByZW1vdmUgdXNpbmcgb3Jp
Z0ZuCisgICAgICAgICAgICBmbi5ndWlkID0gb3JpZ0ZuLmd1aWQgfHwgKCBvcmlnRm4uZ3VpZCA9
IGpRdWVyeS5ndWlkKysgKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5lYWNoKCBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgIGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsIHR5cGVzLCBm
biwgZGF0YSwgc2VsZWN0b3IgKTsKKyAgICAgICAgfSk7CisgICAgfSwKKyAgICBvbmU6IGZ1bmN0
aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkgeworICAgICAgICByZXR1cm4gdGhpcy5v
biggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgMSApOworICAgIH0sCisgICAgb2ZmOiBmdW5j
dGlvbiggdHlwZXMsIHNlbGVjdG9yLCBmbiApIHsKKyAgICAgICAgdmFyIGhhbmRsZU9iaiwgdHlw
ZTsKKyAgICAgICAgaWYgKCB0eXBlcyAmJiB0eXBlcy5wcmV2ZW50RGVmYXVsdCAmJiB0eXBlcy5o
YW5kbGVPYmogKSB7CisgICAgICAgICAgICAvLyAoIGV2ZW50ICkgIGRpc3BhdGNoZWQgalF1ZXJ5
LkV2ZW50CisgICAgICAgICAgICBoYW5kbGVPYmogPSB0eXBlcy5oYW5kbGVPYmo7CisgICAgICAg
ICAgICBqUXVlcnkoIHR5cGVzLmRlbGVnYXRlVGFyZ2V0ICkub2ZmKAorICAgICAgICAgICAgICAg
IGhhbmRsZU9iai5uYW1lc3BhY2UgPyBoYW5kbGVPYmoub3JpZ1R5cGUgKyAiLiIgKyBoYW5kbGVP
YmoubmFtZXNwYWNlIDogaGFuZGxlT2JqLm9yaWdUeXBlLAorICAgICAgICAgICAgICAgIGhhbmRs
ZU9iai5zZWxlY3RvciwKKyAgICAgICAgICAgICAgICBoYW5kbGVPYmouaGFuZGxlcgorICAgICAg
ICAgICAgKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIGlm
ICggdHlwZW9mIHR5cGVzID09PSAib2JqZWN0IiApIHsKKyAgICAgICAgICAgIC8vICggdHlwZXMt
b2JqZWN0IFssIHNlbGVjdG9yXSApCisgICAgICAgICAgICBmb3IgKCB0eXBlIGluIHR5cGVzICkg
eworICAgICAgICAgICAgICAgIHRoaXMub2ZmKCB0eXBlLCBzZWxlY3RvciwgdHlwZXNbIHR5cGUg
XSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCBzZWxlY3RvciA9PT0gZmFsc2UgfHwgdHlwZW9mIHNlbGVjdG9yID09PSAi
ZnVuY3Rpb24iICkgeworICAgICAgICAgICAgLy8gKCB0eXBlcyBbLCBmbl0gKQorICAgICAgICAg
ICAgZm4gPSBzZWxlY3RvcjsKKyAgICAgICAgICAgIHNlbGVjdG9yID0gdW5kZWZpbmVkOworICAg
ICAgICB9CisgICAgICAgIGlmICggZm4gPT09IGZhbHNlICkgeworICAgICAgICAgICAgZm4gPSBy
ZXR1cm5GYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywgdHlwZXMsIGZuLCBz
ZWxlY3RvciApOworICAgICAgICB9KTsKKyAgICB9LAorCisgICAgYmluZDogZnVuY3Rpb24oIHR5
cGVzLCBkYXRhLCBmbiApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMub24oIHR5cGVzLCBudWxsLCBk
YXRhLCBmbiApOworICAgIH0sCisgICAgdW5iaW5kOiBmdW5jdGlvbiggdHlwZXMsIGZuICkgewor
ICAgICAgICByZXR1cm4gdGhpcy5vZmYoIHR5cGVzLCBudWxsLCBmbiApOworICAgIH0sCisKKyAg
ICBsaXZlOiBmdW5jdGlvbiggdHlwZXMsIGRhdGEsIGZuICkgeworICAgICAgICBqUXVlcnkoIHRo
aXMuY29udGV4dCApLm9uKCB0eXBlcywgdGhpcy5zZWxlY3RvciwgZGF0YSwgZm4gKTsKKyAgICAg
ICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKyAgICBkaWU6IGZ1bmN0aW9uKCB0eXBlcywgZm4gKSB7
CisgICAgICAgIGpRdWVyeSggdGhpcy5jb250ZXh0ICkub2ZmKCB0eXBlcywgdGhpcy5zZWxlY3Rv
ciB8fCAiKioiLCBmbiApOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgZGVs
ZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGRhdGEsIGZuICkgeworICAgICAgICBy
ZXR1cm4gdGhpcy5vbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApOworICAgIH0sCisgICAg
dW5kZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZm4gKSB7CisgICAgICAgIC8v
ICggbmFtZXNwYWNlICkgb3IgKCBzZWxlY3RvciwgdHlwZXMgWywgZm5dICkKKyAgICAgICAgcmV0
dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyB0aGlzLm9mZiggc2VsZWN0b3IsICIqKiIgKSA6
IHRoaXMub2ZmKCB0eXBlcywgc2VsZWN0b3IgfHwgIioqIiwgZm4gKTsKKyAgICB9LAorCisgICAg
dHJpZ2dlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7CisgICAgICAgIHJldHVybiB0aGlzLmVh
Y2goZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwg
ZGF0YSwgdGhpcyApOworICAgICAgICB9KTsKKyAgICB9LAorICAgIHRyaWdnZXJIYW5kbGVyOiBm
dW5jdGlvbiggdHlwZSwgZGF0YSApIHsKKyAgICAgICAgaWYgKCB0aGlzWzBdICkgeworICAgICAg
ICAgICAgcmV0dXJuIGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCB0aGlzWzBdLCB0
cnVlICk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgdG9nZ2xlOiBmdW5jdGlvbiggZm4gKSB7
CisgICAgICAgIC8vIFNhdmUgcmVmZXJlbmNlIHRvIGFyZ3VtZW50cyBmb3IgYWNjZXNzIGluIGNs
b3N1cmUKKyAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsCisgICAgICAgICAgICBndWlkID0g
Zm4uZ3VpZCB8fCBqUXVlcnkuZ3VpZCsrLAorICAgICAgICAgICAgaSA9IDAsCisgICAgICAgICAg
ICB0b2dnbGVyID0gZnVuY3Rpb24oIGV2ZW50ICkgeworICAgICAgICAgICAgICAgIC8vIEZpZ3Vy
ZSBvdXQgd2hpY2ggZnVuY3Rpb24gdG8gZXhlY3V0ZQorICAgICAgICAgICAgICAgIHZhciBsYXN0
VG9nZ2xlID0gKCBqUXVlcnkuX2RhdGEoIHRoaXMsICJsYXN0VG9nZ2xlIiArIGZuLmd1aWQgKSB8
fCAwICkgJSBpOworICAgICAgICAgICAgICAgIGpRdWVyeS5fZGF0YSggdGhpcywgImxhc3RUb2dn
bGUiICsgZm4uZ3VpZCwgbGFzdFRvZ2dsZSArIDEgKTsKKworICAgICAgICAgICAgICAgIC8vIE1h
a2Ugc3VyZSB0aGF0IGNsaWNrcyBzdG9wCisgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERl
ZmF1bHQoKTsKKworICAgICAgICAgICAgICAgIC8vIGFuZCBleGVjdXRlIHRoZSBmdW5jdGlvbgor
ICAgICAgICAgICAgICAgIHJldHVybiBhcmdzWyBsYXN0VG9nZ2xlIF0uYXBwbHkoIHRoaXMsIGFy
Z3VtZW50cyApIHx8IGZhbHNlOworICAgICAgICAgICAgfTsKKworICAgICAgICAvLyBsaW5rIGFs
bCB0aGUgZnVuY3Rpb25zLCBzbyBhbnkgb2YgdGhlbSBjYW4gdW5iaW5kIHRoaXMgY2xpY2sgaGFu
ZGxlcgorICAgICAgICB0b2dnbGVyLmd1aWQgPSBndWlkOworICAgICAgICB3aGlsZSAoIGkgPCBh
cmdzLmxlbmd0aCApIHsKKyAgICAgICAgICAgIGFyZ3NbIGkrKyBdLmd1aWQgPSBndWlkOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRoaXMuY2xpY2soIHRvZ2dsZXIgKTsKKyAgICB9LAor
CisgICAgaG92ZXI6IGZ1bmN0aW9uKCBmbk92ZXIsIGZuT3V0ICkgeworICAgICAgICByZXR1cm4g
dGhpcy5tb3VzZWVudGVyKCBmbk92ZXIgKS5tb3VzZWxlYXZlKCBmbk91dCB8fCBmbk92ZXIgKTsK
KyAgICB9Cit9KTsKKworalF1ZXJ5LmVhY2goICgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0
IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgIiArCisgICAgIm1vdXNl
ZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3Vz
ZWxlYXZlICIgKworICAgICJjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtl
eXVwIGVycm9yIGNvbnRleHRtZW51Iikuc3BsaXQoIiAiKSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7
CisKKyAgICAvLyBIYW5kbGUgZXZlbnQgYmluZGluZworICAgIGpRdWVyeS5mblsgbmFtZSBdID0g
ZnVuY3Rpb24oIGRhdGEsIGZuICkgeworICAgICAgICBpZiAoIGZuID09IG51bGwgKSB7CisgICAg
ICAgICAgICBmbiA9IGRhdGE7CisgICAgICAgICAgICBkYXRhID0gbnVsbDsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMCA/CisgICAgICAgICAgICB0aGlz
Lm9uKCBuYW1lLCBudWxsLCBkYXRhLCBmbiApIDoKKyAgICAgICAgICAgIHRoaXMudHJpZ2dlcigg
bmFtZSApOworICAgIH07CisKKyAgICBpZiAoIHJrZXlFdmVudC50ZXN0KCBuYW1lICkgKSB7Cisg
ICAgICAgIGpRdWVyeS5ldmVudC5maXhIb29rc1sgbmFtZSBdID0galF1ZXJ5LmV2ZW50LmtleUhv
b2tzOworICAgIH0KKworICAgIGlmICggcm1vdXNlRXZlbnQudGVzdCggbmFtZSApICkgeworICAg
ICAgICBqUXVlcnkuZXZlbnQuZml4SG9va3NbIG5hbWUgXSA9IGpRdWVyeS5ldmVudC5tb3VzZUhv
b2tzOworICAgIH0KK30pOworLyohCisgKiBTaXp6bGUgQ1NTIFNlbGVjdG9yIEVuZ2luZQorICog
Q29weXJpZ2h0IDIwMTIgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycwor
ICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCisgKiBodHRwOi8vc2l6emxlanMuY29t
LworICovCisoZnVuY3Rpb24oIHdpbmRvdywgdW5kZWZpbmVkICkgeworCit2YXIgY2FjaGVkcnVu
cywKKyAgICBhc3NlcnRHZXRJZE5vdE5hbWUsCisgICAgRXhwciwKKyAgICBnZXRUZXh0LAorICAg
IGlzWE1MLAorICAgIGNvbnRhaW5zLAorICAgIGNvbXBpbGUsCisgICAgc29ydE9yZGVyLAorICAg
IGhhc0R1cGxpY2F0ZSwKKyAgICBvdXRlcm1vc3RDb250ZXh0LAorCisgICAgYmFzZUhhc0R1cGxp
Y2F0ZSA9IHRydWUsCisgICAgc3RydW5kZWZpbmVkID0gInVuZGVmaW5lZCIsCisKKyAgICBleHBh
bmRvID0gKCAic2l6Y2FjaGUiICsgTWF0aC5yYW5kb20oKSApLnJlcGxhY2UoICIuIiwgIiIgKSwK
KworICAgIFRva2VuID0gU3RyaW5nLAorICAgIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50LAor
ICAgIGRvY0VsZW0gPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsCisgICAgZGlycnVucyA9IDAs
CisgICAgZG9uZSA9IDAsCisgICAgcG9wID0gW10ucG9wLAorICAgIHB1c2ggPSBbXS5wdXNoLAor
ICAgIHNsaWNlID0gW10uc2xpY2UsCisgICAgLy8gVXNlIGEgc3RyaXBwZWQtZG93biBpbmRleE9m
IGlmIGEgbmF0aXZlIG9uZSBpcyB1bmF2YWlsYWJsZQorICAgIGluZGV4T2YgPSBbXS5pbmRleE9m
IHx8IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICB2YXIgaSA9IDAsCisgICAgICAgICAgICBs
ZW4gPSB0aGlzLmxlbmd0aDsKKyAgICAgICAgZm9yICggOyBpIDwgbGVuOyBpKysgKSB7CisgICAg
ICAgICAgICBpZiAoIHRoaXNbaV0gPT09IGVsZW0gKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0s
CisKKyAgICAvLyBBdWdtZW50IGEgZnVuY3Rpb24gZm9yIHNwZWNpYWwgdXNlIGJ5IFNpenpsZQor
ICAgIG1hcmtGdW5jdGlvbiA9IGZ1bmN0aW9uKCBmbiwgdmFsdWUgKSB7CisgICAgICAgIGZuWyBl
eHBhbmRvIF0gPSB2YWx1ZSA9PSBudWxsIHx8IHZhbHVlOworICAgICAgICByZXR1cm4gZm47Cisg
ICAgfSwKKworICAgIGNyZWF0ZUNhY2hlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBjYWNo
ZSA9IHt9LAorICAgICAgICAgICAga2V5cyA9IFtdOworCisgICAgICAgIHJldHVybiBtYXJrRnVu
Y3Rpb24oZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7CisgICAgICAgICAgICAvLyBPbmx5IGtlZXAg
dGhlIG1vc3QgcmVjZW50IGVudHJpZXMKKyAgICAgICAgICAgIGlmICgga2V5cy5wdXNoKCBrZXkg
KSA+IEV4cHIuY2FjaGVMZW5ndGggKSB7CisgICAgICAgICAgICAgICAgZGVsZXRlIGNhY2hlWyBr
ZXlzLnNoaWZ0KCkgXTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gUmV0cmlldmUg
d2l0aCAoa2V5ICsgIiAiKSB0byBhdm9pZCBjb2xsaXNpb24gd2l0aCBuYXRpdmUgT2JqZWN0LnBy
b3RvdHlwZSBwcm9wZXJ0aWVzIChzZWUgSXNzdWUgIzE1NykKKyAgICAgICAgICAgIHJldHVybiAo
Y2FjaGVbIGtleSArICIgIiBdID0gdmFsdWUpOworICAgICAgICB9LCBjYWNoZSApOworICAgIH0s
CisKKyAgICBjbGFzc0NhY2hlID0gY3JlYXRlQ2FjaGUoKSwKKyAgICB0b2tlbkNhY2hlID0gY3Jl
YXRlQ2FjaGUoKSwKKyAgICBjb21waWxlckNhY2hlID0gY3JlYXRlQ2FjaGUoKSwKKworICAgIC8v
IFJlZ2V4CisKKyAgICAvLyBXaGl0ZXNwYWNlIGNoYXJhY3RlcnMgaHR0cDovL3d3dy53My5vcmcv
VFIvY3NzMy1zZWxlY3RvcnMvI3doaXRlc3BhY2UKKyAgICB3aGl0ZXNwYWNlID0gIltcXHgyMFxc
dFxcclxcblxcZl0iLAorICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtc3ludGF4LyNj
aGFyYWN0ZXJzCisgICAgY2hhcmFjdGVyRW5jb2RpbmcgPSAiKD86XFxcXC58Wy1cXHddfFteXFx4
MDAtXFx4YTBdKSsiLAorCisgICAgLy8gTG9vc2VseSBtb2RlbGVkIG9uIENTUyBpZGVudGlmaWVy
IGNoYXJhY3RlcnMKKyAgICAvLyBBbiB1bnF1b3RlZCB2YWx1ZSBzaG91bGQgYmUgYSBDU1MgaWRl
bnRpZmllciAoaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1zZWxlY3RvcnMvI2F0dHJpYnV0ZS1z
ZWxlY3RvcnMpCisgICAgLy8gUHJvcGVyIHN5bnRheDogaHR0cDovL3d3dy53My5vcmcvVFIvQ1NT
MjEvc3luZGF0YS5odG1sI3ZhbHVlLWRlZi1pZGVudGlmaWVyCisgICAgaWRlbnRpZmllciA9IGNo
YXJhY3RlckVuY29kaW5nLnJlcGxhY2UoICJ3IiwgIncjIiApLAorCisgICAgLy8gQWNjZXB0YWJs
ZSBvcGVyYXRvcnMgaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNhdHRyaWJ1dGUtc2Vs
ZWN0b3JzCisgICAgb3BlcmF0b3JzID0gIihbKl4kfCF+XT89KSIsCisgICAgYXR0cmlidXRlcyA9
ICJcXFsiICsgd2hpdGVzcGFjZSArICIqKCIgKyBjaGFyYWN0ZXJFbmNvZGluZyArICIpIiArIHdo
aXRlc3BhY2UgKworICAgICAgICAiKig/OiIgKyBvcGVyYXRvcnMgKyB3aGl0ZXNwYWNlICsgIioo
PzooWydcIl0pKCg/OlxcXFwufFteXFxcXF0pKj8pXFwzfCgiICsgaWRlbnRpZmllciArICIpfCl8
KSIgKyB3aGl0ZXNwYWNlICsgIipcXF0iLAorCisgICAgLy8gUHJlZmVyIGFyZ3VtZW50cyBub3Qg
aW4gcGFyZW5zL2JyYWNrZXRzLAorICAgIC8vICAgdGhlbiBhdHRyaWJ1dGUgc2VsZWN0b3JzIGFu
ZCBub24tcHNldWRvcyAoZGVub3RlZCBieSA6KSwKKyAgICAvLyAgIHRoZW4gYW55dGhpbmcgZWxz
ZQorICAgIC8vIFRoZXNlIHByZWZlcmVuY2VzIGFyZSBoZXJlIHRvIHJlZHVjZSB0aGUgbnVtYmVy
IG9mIHNlbGVjdG9ycworICAgIC8vICAgbmVlZGluZyB0b2tlbml6ZSBpbiB0aGUgUFNFVURPIHBy
ZUZpbHRlcgorICAgIHBzZXVkb3MgPSAiOigiICsgY2hhcmFjdGVyRW5jb2RpbmcgKyAiKSg/Olxc
KCg/OihbJ1wiXSkoKD86XFxcXC58W15cXFxcXSkqPylcXDJ8KFteKClbXFxdXSp8KD86KD86IiAr
IGF0dHJpYnV0ZXMgKyAiKXxbXjpdfFxcXFwuKSp8LiopKVxcKXwpIiwKKworICAgIC8vIEZvciBt
YXRjaEV4cHIuUE9TIGFuZCBtYXRjaEV4cHIubmVlZHNDb250ZXh0CisgICAgcG9zID0gIjooZXZl
bnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFwoIiArIHdoaXRlc3BhY2UgKworICAg
ICAgICAiKigoPzotXFxkKT9cXGQqKSIgKyB3aGl0ZXNwYWNlICsgIipcXCl8KSg/PVteLV18JCki
LAorCisgICAgLy8gTGVhZGluZyBhbmQgbm9uLWVzY2FwZWQgdHJhaWxpbmcgd2hpdGVzcGFjZSwg
Y2FwdHVyaW5nIHNvbWUgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVycyBwcmVjZWRpbmcgdGhlIGxh
dHRlcgorICAgIHJ0cmltID0gbmV3IFJlZ0V4cCggIl4iICsgd2hpdGVzcGFjZSArICIrfCgoPzpe
fFteXFxcXF0pKD86XFxcXC4pKikiICsgd2hpdGVzcGFjZSArICIrJCIsICJnIiApLAorCisgICAg
cmNvbW1hID0gbmV3IFJlZ0V4cCggIl4iICsgd2hpdGVzcGFjZSArICIqLCIgKyB3aGl0ZXNwYWNl
ICsgIioiICksCisgICAgcmNvbWJpbmF0b3JzID0gbmV3IFJlZ0V4cCggIl4iICsgd2hpdGVzcGFj
ZSArICIqKFtcXHgyMFxcdFxcclxcblxcZj4rfl0pIiArIHdoaXRlc3BhY2UgKyAiKiIgKSwKKyAg
ICBycHNldWRvID0gbmV3IFJlZ0V4cCggcHNldWRvcyApLAorCisgICAgLy8gRWFzaWx5LXBhcnNl
YWJsZS9yZXRyaWV2YWJsZSBJRCBvciBUQUcgb3IgQ0xBU1Mgc2VsZWN0b3JzCisgICAgcnF1aWNr
RXhwciA9IC9eKD86IyhbXHdcLV0rKXwoXHcrKXxcLihbXHdcLV0rKSkkLywKKworICAgIHJub3Qg
PSAvXjpub3QvLAorICAgIHJzaWJsaW5nID0gL1tceDIwXHRcclxuXGZdKlsrfl0vLAorICAgIHJl
bmRzV2l0aE5vdCA9IC86bm90XCgkLywKKworICAgIHJoZWFkZXIgPSAvaFxkL2ksCisgICAgcmlu
cHV0cyA9IC9pbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uL2ksCisKKyAgICByYmFja3NsYXNo
ID0gL1xcKD8hXFwpL2csCisKKyAgICBtYXRjaEV4cHIgPSB7CisgICAgICAgICJJRCI6IG5ldyBS
ZWdFeHAoICJeIygiICsgY2hhcmFjdGVyRW5jb2RpbmcgKyAiKSIgKSwKKyAgICAgICAgIkNMQVNT
IjogbmV3IFJlZ0V4cCggIl5cXC4oIiArIGNoYXJhY3RlckVuY29kaW5nICsgIikiICksCisgICAg
ICAgICJOQU1FIjogbmV3IFJlZ0V4cCggIl5cXFtuYW1lPVsnXCJdPygiICsgY2hhcmFjdGVyRW5j
b2RpbmcgKyAiKVsnXCJdP1xcXSIgKSwKKyAgICAgICAgIlRBRyI6IG5ldyBSZWdFeHAoICJeKCIg
KyBjaGFyYWN0ZXJFbmNvZGluZy5yZXBsYWNlKCAidyIsICJ3KiIgKSArICIpIiApLAorICAgICAg
ICAiQVRUUiI6IG5ldyBSZWdFeHAoICJeIiArIGF0dHJpYnV0ZXMgKSwKKyAgICAgICAgIlBTRVVE
TyI6IG5ldyBSZWdFeHAoICJeIiArIHBzZXVkb3MgKSwKKyAgICAgICAgIlBPUyI6IG5ldyBSZWdF
eHAoIHBvcywgImkiICksCisgICAgICAgICJDSElMRCI6IG5ldyBSZWdFeHAoICJeOihvbmx5fG50
aHxmaXJzdHxsYXN0KS1jaGlsZCg/OlxcKCIgKyB3aGl0ZXNwYWNlICsKKyAgICAgICAgICAgICIq
KGV2ZW58b2RkfCgoWystXXwpKFxcZCopbnwpIiArIHdoaXRlc3BhY2UgKyAiKig/OihbKy1dfCki
ICsgd2hpdGVzcGFjZSArCisgICAgICAgICAgICAiKihcXGQrKXwpKSIgKyB3aGl0ZXNwYWNlICsg
IipcXCl8KSIsICJpIiApLAorICAgICAgICAvLyBGb3IgdXNlIGluIGxpYnJhcmllcyBpbXBsZW1l
bnRpbmcgLmlzKCkKKyAgICAgICAgIm5lZWRzQ29udGV4dCI6IG5ldyBSZWdFeHAoICJeIiArIHdo
aXRlc3BhY2UgKyAiKls+K35dfCIgKyBwb3MsICJpIiApCisgICAgfSwKKworICAgIC8vIFN1cHBv
cnQKKworICAgIC8vIFVzZWQgZm9yIHRlc3Rpbmcgc29tZXRoaW5nIG9uIGFuIGVsZW1lbnQKKyAg
ICBhc3NlcnQgPSBmdW5jdGlvbiggZm4gKSB7CisgICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJkaXYiKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJu
IGZuKCBkaXYgKTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgLy8gcmVsZWFzZSBtZW1vcnkg
aW4gSUUKKyAgICAgICAgICAgIGRpdiA9IG51bGw7CisgICAgICAgIH0KKyAgICB9LAorCisgICAg
Ly8gQ2hlY2sgaWYgZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSByZXR1cm5zIG9ubHkgZWxlbWVu
dHMKKyAgICBhc3NlcnRUYWdOYW1lTm9Db21tZW50cyA9IGFzc2VydChmdW5jdGlvbiggZGl2ICkg
eworICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoIiIpICk7
CisgICAgICAgIHJldHVybiAhZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RoOwor
ICAgIH0pLAorCisgICAgLy8gQ2hlY2sgaWYgZ2V0QXR0cmlidXRlIHJldHVybnMgbm9ybWFsaXpl
ZCBocmVmIGF0dHJpYnV0ZXMKKyAgICBhc3NlcnRIcmVmTm90Tm9ybWFsaXplZCA9IGFzc2VydChm
dW5jdGlvbiggZGl2ICkgeworICAgICAgICBkaXYuaW5uZXJIVE1MID0gIjxhIGhyZWY9JyMnPjwv
YT4iOworICAgICAgICByZXR1cm4gZGl2LmZpcnN0Q2hpbGQgJiYgdHlwZW9mIGRpdi5maXJzdENo
aWxkLmdldEF0dHJpYnV0ZSAhPT0gc3RydW5kZWZpbmVkICYmCisgICAgICAgICAgICBkaXYuZmly
c3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKSA9PT0gIiMiOworICAgIH0pLAorCisgICAgLy8g
Q2hlY2sgaWYgYXR0cmlidXRlcyBzaG91bGQgYmUgcmV0cmlldmVkIGJ5IGF0dHJpYnV0ZSBub2Rl
cworICAgIGFzc2VydEF0dHJpYnV0ZXMgPSBhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsKKyAgICAg
ICAgZGl2LmlubmVySFRNTCA9ICI8c2VsZWN0Pjwvc2VsZWN0PiI7CisgICAgICAgIHZhciB0eXBl
ID0gdHlwZW9mIGRpdi5sYXN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJtdWx0aXBsZSIpOworICAgICAg
ICAvLyBJRTggcmV0dXJucyBhIHN0cmluZyBmb3Igc29tZSBhdHRyaWJ1dGVzIGV2ZW4gd2hlbiBu
b3QgcHJlc2VudAorICAgICAgICByZXR1cm4gdHlwZSAhPT0gImJvb2xlYW4iICYmIHR5cGUgIT09
ICJzdHJpbmciOworICAgIH0pLAorCisgICAgLy8gQ2hlY2sgaWYgZ2V0RWxlbWVudHNCeUNsYXNz
TmFtZSBjYW4gYmUgdHJ1c3RlZAorICAgIGFzc2VydFVzYWJsZUNsYXNzTmFtZSA9IGFzc2VydChm
dW5jdGlvbiggZGl2ICkgeworICAgICAgICAvLyBPcGVyYSBjYW4ndCBmaW5kIGEgc2Vjb25kIGNs
YXNzbmFtZSAoaW4gOS42KQorICAgICAgICBkaXYuaW5uZXJIVE1MID0gIjxkaXYgY2xhc3M9J2hp
ZGRlbiBlJz48L2Rpdj48ZGl2IGNsYXNzPSdoaWRkZW4nPjwvZGl2PiI7CisgICAgICAgIGlmICgg
IWRpdi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lIHx8ICFkaXYuZ2V0RWxlbWVudHNCeUNsYXNzTmFt
ZSgiZSIpLmxlbmd0aCApIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIFNhZmFyaSAzLjIgY2FjaGVzIGNsYXNzIGF0dHJpYnV0ZXMgYW5kIGRvZXNu
J3QgY2F0Y2ggY2hhbmdlcworICAgICAgICBkaXYubGFzdENoaWxkLmNsYXNzTmFtZSA9ICJlIjsK
KyAgICAgICAgcmV0dXJuIGRpdi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoID09
PSAyOworICAgIH0pLAorCisgICAgLy8gQ2hlY2sgaWYgZ2V0RWxlbWVudEJ5SWQgcmV0dXJucyBl
bGVtZW50cyBieSBuYW1lCisgICAgLy8gQ2hlY2sgaWYgZ2V0RWxlbWVudHNCeU5hbWUgcHJpdmls
ZWdlcyBmb3JtIGNvbnRyb2xzIG9yIHJldHVybnMgZWxlbWVudHMgYnkgSUQKKyAgICBhc3NlcnRV
c2FibGVOYW1lID0gYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7CisgICAgICAgIC8vIEluamVjdCBj
b250ZW50CisgICAgICAgIGRpdi5pZCA9IGV4cGFuZG8gKyAwOworICAgICAgICBkaXYuaW5uZXJI
VE1MID0gIjxhIG5hbWU9JyIgKyBleHBhbmRvICsgIic+PC9hPjxkaXYgbmFtZT0nIiArIGV4cGFu
ZG8gKyAiJz48L2Rpdj4iOworICAgICAgICBkb2NFbGVtLmluc2VydEJlZm9yZSggZGl2LCBkb2NF
bGVtLmZpcnN0Q2hpbGQgKTsKKworICAgICAgICAvLyBUZXN0CisgICAgICAgIHZhciBwYXNzID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUgJiYKKyAgICAgICAgICAgIC8vIGJ1Z2d5IGJyb3dz
ZXJzIHdpbGwgcmV0dXJuIGZld2VyIHRoYW4gdGhlIGNvcnJlY3QgMgorICAgICAgICAgICAgZG9j
dW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoIGV4cGFuZG8gKS5sZW5ndGggPT09IDIgKworICAgICAg
ICAgICAgLy8gYnVnZ3kgYnJvd3NlcnMgd2lsbCByZXR1cm4gbW9yZSB0aGFuIHRoZSBjb3JyZWN0
IDAKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCBleHBhbmRvICsgMCAp
Lmxlbmd0aDsKKyAgICAgICAgYXNzZXJ0R2V0SWROb3ROYW1lID0gIWRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCBleHBhbmRvICk7CisKKyAgICAgICAgLy8gQ2xlYW51cAorICAgICAgICBkb2NFbGVt
LnJlbW92ZUNoaWxkKCBkaXYgKTsKKworICAgICAgICByZXR1cm4gcGFzczsKKyAgICB9KTsKKwor
Ly8gSWYgc2xpY2UgaXMgbm90IGF2YWlsYWJsZSwgcHJvdmlkZSBhIGJhY2t1cAordHJ5IHsKKyAg
ICBzbGljZS5jYWxsKCBkb2NFbGVtLmNoaWxkTm9kZXMsIDAgKVswXS5ub2RlVHlwZTsKK30gY2F0
Y2ggKCBlICkgeworICAgIHNsaWNlID0gZnVuY3Rpb24oIGkgKSB7CisgICAgICAgIHZhciBlbGVt
LAorICAgICAgICAgICAgcmVzdWx0cyA9IFtdOworICAgICAgICBmb3IgKCA7IChlbGVtID0gdGhp
c1tpXSk7IGkrKyApIHsKKyAgICAgICAgICAgIHJlc3VsdHMucHVzaCggZWxlbSApOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiByZXN1bHRzOworICAgIH07Cit9CisKK2Z1bmN0aW9uIFNpenps
ZSggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7CisgICAgcmVzdWx0cyA9IHJl
c3VsdHMgfHwgW107CisgICAgY29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7CisgICAgdmFy
IG1hdGNoLCBlbGVtLCB4bWwsIG0sCisgICAgICAgIG5vZGVUeXBlID0gY29udGV4dC5ub2RlVHlw
ZTsKKworICAgIGlmICggIXNlbGVjdG9yIHx8IHR5cGVvZiBzZWxlY3RvciAhPT0gInN0cmluZyIg
KSB7CisgICAgICAgIHJldHVybiByZXN1bHRzOworICAgIH0KKworICAgIGlmICggbm9kZVR5cGUg
IT09IDEgJiYgbm9kZVR5cGUgIT09IDkgKSB7CisgICAgICAgIHJldHVybiBbXTsKKyAgICB9CisK
KyAgICB4bWwgPSBpc1hNTCggY29udGV4dCApOworCisgICAgaWYgKCAheG1sICYmICFzZWVkICkg
eworICAgICAgICBpZiAoIChtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKSkgKSB7
CisgICAgICAgICAgICAvLyBTcGVlZC11cDogU2l6emxlKCIjSUQiKQorICAgICAgICAgICAgaWYg
KCAobSA9IG1hdGNoWzFdKSApIHsKKyAgICAgICAgICAgICAgICBpZiAoIG5vZGVUeXBlID09PSA5
ICkgeworICAgICAgICAgICAgICAgICAgICBlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCgg
bSApOworICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBwYXJlbnROb2RlIHRvIGNhdGNoIHdo
ZW4gQmxhY2tiZXJyeSA0LjYgcmV0dXJucworICAgICAgICAgICAgICAgICAgICAvLyBub2RlcyB0
aGF0IGFyZSBubyBsb25nZXIgaW4gdGhlIGRvY3VtZW50ICM2OTYzCisgICAgICAgICAgICAgICAg
ICAgIGlmICggZWxlbSAmJiBlbGVtLnBhcmVudE5vZGUgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgSUUsIE9wZXJhLCBhbmQgV2Via2l0IHJldHVy
biBpdGVtcworICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnkgbmFtZSBpbnN0ZWFkIG9mIElE
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0uaWQgPT09IG0gKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKCBlbGVtICk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0czsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIENvbnRleHQgaXMgbm90IGEgZG9jdW1lbnQK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCBjb250ZXh0Lm93bmVyRG9jdW1lbnQgJiYgKGVsZW0g
PSBjb250ZXh0Lm93bmVyRG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG0gKSkgJiYKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICkgJiYgZWxlbS5pZCA9PT0g
bSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCggZWxlbSApOworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFNwZWVkLXVwOiBTaXp6bGUo
IlRBRyIpCisgICAgICAgICAgICB9IGVsc2UgaWYgKCBtYXRjaFsyXSApIHsKKyAgICAgICAgICAg
ICAgICBwdXNoLmFwcGx5KCByZXN1bHRzLCBzbGljZS5jYWxsKGNvbnRleHQuZ2V0RWxlbWVudHNC
eVRhZ05hbWUoIHNlbGVjdG9yICksIDApICk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dHM7CisKKyAgICAgICAgICAgIC8vIFNwZWVkLXVwOiBTaXp6bGUoIi5DTEFTUyIpCisgICAgICAg
ICAgICB9IGVsc2UgaWYgKCAobSA9IG1hdGNoWzNdKSAmJiBhc3NlcnRVc2FibGVDbGFzc05hbWUg
JiYgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICkgeworICAgICAgICAgICAgICAgIHB1
c2guYXBwbHkoIHJlc3VsdHMsIHNsaWNlLmNhbGwoY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NO
YW1lKCBtICksIDApICk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBBbGwgb3RoZXJzCisgICAgcmV0dXJu
IHNlbGVjdCggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sICIkMSIgKSwgY29udGV4dCwgcmVzdWx0
cywgc2VlZCwgeG1sICk7Cit9CisKK1NpenpsZS5tYXRjaGVzID0gZnVuY3Rpb24oIGV4cHIsIGVs
ZW1lbnRzICkgeworICAgIHJldHVybiBTaXp6bGUoIGV4cHIsIG51bGwsIG51bGwsIGVsZW1lbnRz
ICk7Cit9OworCitTaXp6bGUubWF0Y2hlc1NlbGVjdG9yID0gZnVuY3Rpb24oIGVsZW0sIGV4cHIg
KSB7CisgICAgcmV0dXJuIFNpenpsZSggZXhwciwgbnVsbCwgbnVsbCwgWyBlbGVtIF0gKS5sZW5n
dGggPiAwOworfTsKKworLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZv
ciBpbnB1dCB0eXBlcworZnVuY3Rpb24gY3JlYXRlSW5wdXRQc2V1ZG8oIHR5cGUgKSB7CisgICAg
cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICB2YXIgbmFtZSA9IGVsZW0ubm9kZU5h
bWUudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgcmV0dXJuIG5hbWUgPT09ICJpbnB1dCIgJiYgZWxl
bS50eXBlID09PSB0eXBlOworICAgIH07Cit9CisKKy8vIFJldHVybnMgYSBmdW5jdGlvbiB0byB1
c2UgaW4gcHNldWRvcyBmb3IgYnV0dG9ucworZnVuY3Rpb24gY3JlYXRlQnV0dG9uUHNldWRvKCB0
eXBlICkgeworICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgdmFyIG5hbWUg
PSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7CisgICAgICAgIHJldHVybiAobmFtZSA9PT0g
ImlucHV0IiB8fCBuYW1lID09PSAiYnV0dG9uIikgJiYgZWxlbS50eXBlID09PSB0eXBlOworICAg
IH07Cit9CisKKy8vIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgcG9z
aXRpb25hbHMKK2Z1bmN0aW9uIGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZuICkgeworICAgIHJl
dHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIGFyZ3VtZW50ICkgeworICAgICAgICBhcmd1bWVu
dCA9ICthcmd1bWVudDsKKyAgICAgICAgcmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2Vl
ZCwgbWF0Y2hlcyApIHsKKyAgICAgICAgICAgIHZhciBqLAorICAgICAgICAgICAgICAgIG1hdGNo
SW5kZXhlcyA9IGZuKCBbXSwgc2VlZC5sZW5ndGgsIGFyZ3VtZW50ICksCisgICAgICAgICAgICAg
ICAgaSA9IG1hdGNoSW5kZXhlcy5sZW5ndGg7CisKKyAgICAgICAgICAgIC8vIE1hdGNoIGVsZW1l
bnRzIGZvdW5kIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhlcworICAgICAgICAgICAgd2hpbGUgKCBp
LS0gKSB7CisgICAgICAgICAgICAgICAgaWYgKCBzZWVkWyAoaiA9IG1hdGNoSW5kZXhlc1tpXSkg
XSApIHsKKyAgICAgICAgICAgICAgICAgICAgc2VlZFtqXSA9ICEobWF0Y2hlc1tqXSA9IHNlZWRb
al0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAg
fSk7Cit9CisKKy8qKgorICogVXRpbGl0eSBmdW5jdGlvbiBmb3IgcmV0cmlldmluZyB0aGUgdGV4
dCB2YWx1ZSBvZiBhbiBhcnJheSBvZiBET00gbm9kZXMKKyAqIEBwYXJhbSB7QXJyYXl8RWxlbWVu
dH0gZWxlbQorICovCitnZXRUZXh0ID0gU2l6emxlLmdldFRleHQgPSBmdW5jdGlvbiggZWxlbSAp
IHsKKyAgICB2YXIgbm9kZSwKKyAgICAgICAgcmV0ID0gIiIsCisgICAgICAgIGkgPSAwLAorICAg
ICAgICBub2RlVHlwZSA9IGVsZW0ubm9kZVR5cGU7CisKKyAgICBpZiAoIG5vZGVUeXBlICkgewor
ICAgICAgICBpZiAoIG5vZGVUeXBlID09PSAxIHx8IG5vZGVUeXBlID09PSA5IHx8IG5vZGVUeXBl
ID09PSAxMSApIHsKKyAgICAgICAgICAgIC8vIFVzZSB0ZXh0Q29udGVudCBmb3IgZWxlbWVudHMK
KyAgICAgICAgICAgIC8vIGlubmVyVGV4dCB1c2FnZSByZW1vdmVkIGZvciBjb25zaXN0ZW5jeSBv
ZiBuZXcgbGluZXMgKHNlZSAjMTExNTMpCisgICAgICAgICAgICBpZiAoIHR5cGVvZiBlbGVtLnRl
eHRDb250ZW50ID09PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS50
ZXh0Q29udGVudDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gVHJh
dmVyc2UgaXRzIGNoaWxkcmVuCisgICAgICAgICAgICAgICAgZm9yICggZWxlbSA9IGVsZW0uZmly
c3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7CisgICAgICAgICAgICAg
ICAgICAgIHJldCArPSBnZXRUZXh0KCBlbGVtICk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMyB8fCBub2RlVHlwZSA9
PT0gNCApIHsKKyAgICAgICAgICAgIHJldHVybiBlbGVtLm5vZGVWYWx1ZTsKKyAgICAgICAgfQor
ICAgICAgICAvLyBEbyBub3QgaW5jbHVkZSBjb21tZW50IG9yIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rp
b24gbm9kZXMKKyAgICB9IGVsc2UgeworCisgICAgICAgIC8vIElmIG5vIG5vZGVUeXBlLCB0aGlz
IGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFycmF5CisgICAgICAgIGZvciAoIDsgKG5vZGUgPSBlbGVt
W2ldKTsgaSsrICkgeworICAgICAgICAgICAgLy8gRG8gbm90IHRyYXZlcnNlIGNvbW1lbnQgbm9k
ZXMKKyAgICAgICAgICAgIHJldCArPSBnZXRUZXh0KCBub2RlICk7CisgICAgICAgIH0KKyAgICB9
CisgICAgcmV0dXJuIHJldDsKK307CisKK2lzWE1MID0gU2l6emxlLmlzWE1MID0gZnVuY3Rpb24o
IGVsZW0gKSB7CisgICAgLy8gZG9jdW1lbnRFbGVtZW50IGlzIHZlcmlmaWVkIGZvciBjYXNlcyB3
aGVyZSBpdCBkb2Vzbid0IHlldCBleGlzdAorICAgIC8vIChzdWNoIGFzIGxvYWRpbmcgaWZyYW1l
cyBpbiBJRSAtICM0ODMzKQorICAgIHZhciBkb2N1bWVudEVsZW1lbnQgPSBlbGVtICYmIChlbGVt
Lm93bmVyRG9jdW1lbnQgfHwgZWxlbSkuZG9jdW1lbnRFbGVtZW50OworICAgIHJldHVybiBkb2N1
bWVudEVsZW1lbnQgPyBkb2N1bWVudEVsZW1lbnQubm9kZU5hbWUgIT09ICJIVE1MIiA6IGZhbHNl
OworfTsKKworLy8gRWxlbWVudCBjb250YWlucyBhbm90aGVyCitjb250YWlucyA9IFNpenpsZS5j
b250YWlucyA9IGRvY0VsZW0uY29udGFpbnMgPworICAgIGZ1bmN0aW9uKCBhLCBiICkgeworICAg
ICAgICB2YXIgYWRvd24gPSBhLm5vZGVUeXBlID09PSA5ID8gYS5kb2N1bWVudEVsZW1lbnQgOiBh
LAorICAgICAgICAgICAgYnVwID0gYiAmJiBiLnBhcmVudE5vZGU7CisgICAgICAgIHJldHVybiBh
ID09PSBidXAgfHwgISEoIGJ1cCAmJiBidXAubm9kZVR5cGUgPT09IDEgJiYgYWRvd24uY29udGFp
bnMgJiYgYWRvd24uY29udGFpbnMoYnVwKSApOworICAgIH0gOgorICAgIGRvY0VsZW0uY29tcGFy
ZURvY3VtZW50UG9zaXRpb24gPworICAgIGZ1bmN0aW9uKCBhLCBiICkgeworICAgICAgICByZXR1
cm4gYiAmJiAhISggYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYiApICYgMTYgKTsKKyAgICB9
IDoKKyAgICBmdW5jdGlvbiggYSwgYiApIHsKKyAgICAgICAgd2hpbGUgKCAoYiA9IGIucGFyZW50
Tm9kZSkgKSB7CisgICAgICAgICAgICBpZiAoIGIgPT09IGEgKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH07CisKK1NpenpsZS5hdHRyID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7Cisg
ICAgdmFyIHZhbCwKKyAgICAgICAgeG1sID0gaXNYTUwoIGVsZW0gKTsKKworICAgIGlmICggIXht
bCApIHsKKyAgICAgICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTsKKyAgICB9CisgICAgaWYg
KCAodmFsID0gRXhwci5hdHRySGFuZGxlWyBuYW1lIF0pICkgeworICAgICAgICByZXR1cm4gdmFs
KCBlbGVtICk7CisgICAgfQorICAgIGlmICggeG1sIHx8IGFzc2VydEF0dHJpYnV0ZXMgKSB7Cisg
ICAgICAgIHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApOworICAgIH0KKyAgICB2YWwg
PSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKTsKKyAgICByZXR1cm4gdmFsID8KKyAgICAg
ICAgdHlwZW9mIGVsZW1bIG5hbWUgXSA9PT0gImJvb2xlYW4iID8KKyAgICAgICAgICAgIGVsZW1b
IG5hbWUgXSA/IG5hbWUgOiBudWxsIDoKKyAgICAgICAgICAgIHZhbC5zcGVjaWZpZWQgPyB2YWwu
dmFsdWUgOiBudWxsIDoKKyAgICAgICAgbnVsbDsKK307CisKK0V4cHIgPSBTaXp6bGUuc2VsZWN0
b3JzID0geworCisgICAgLy8gQ2FuIGJlIGFkanVzdGVkIGJ5IHRoZSB1c2VyCisgICAgY2FjaGVM
ZW5ndGg6IDUwLAorCisgICAgY3JlYXRlUHNldWRvOiBtYXJrRnVuY3Rpb24sCisKKyAgICBtYXRj
aDogbWF0Y2hFeHByLAorCisgICAgLy8gSUU2LzcgcmV0dXJuIGEgbW9kaWZpZWQgaHJlZgorICAg
IGF0dHJIYW5kbGU6IGFzc2VydEhyZWZOb3ROb3JtYWxpemVkID8KKyAgICAgICAge30gOgorICAg
ICAgICB7CisgICAgICAgICAgICAiaHJlZiI6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAg
ICAgICAgIHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggImhyZWYiLCAyICk7CisgICAgICAgICAg
ICB9LAorICAgICAgICAgICAgInR5cGUiOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoInR5cGUiKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSwKKworICAgIGZpbmQ6IHsKKyAgICAgICAgIklEIjogYXNzZXJ0R2V0SWROb3ROYW1l
ID8KKyAgICAgICAgICAgIGZ1bmN0aW9uKCBpZCwgY29udGV4dCwgeG1sICkgeworICAgICAgICAg
ICAgICAgIGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09IHN0cnVuZGVmaW5l
ZCAmJiAheG1sICkgeworICAgICAgICAgICAgICAgICAgICB2YXIgbSA9IGNvbnRleHQuZ2V0RWxl
bWVudEJ5SWQoIGlkICk7CisgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHBhcmVudE5vZGUg
dG8gY2F0Y2ggd2hlbiBCbGFja2JlcnJ5IDQuNiByZXR1cm5zCisgICAgICAgICAgICAgICAgICAg
IC8vIG5vZGVzIHRoYXQgYXJlIG5vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQgIzY5NjMKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG0gJiYgbS5wYXJlbnROb2RlID8gW21dIDogW107CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSA6CisgICAgICAgICAgICBmdW5jdGlvbiggaWQs
IGNvbnRleHQsIHhtbCApIHsKKyAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBjb250ZXh0Lmdl
dEVsZW1lbnRCeUlkICE9PSBzdHJ1bmRlZmluZWQgJiYgIXhtbCApIHsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIG0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApOworCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBtID8KKyAgICAgICAgICAgICAgICAgICAgICAgIG0uaWQgPT09IGlk
IHx8IHR5cGVvZiBtLmdldEF0dHJpYnV0ZU5vZGUgIT09IHN0cnVuZGVmaW5lZCAmJiBtLmdldEF0
dHJpYnV0ZU5vZGUoImlkIikudmFsdWUgPT09IGlkID8KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBbbV0gOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCA6CisgICAg
ICAgICAgICAgICAgICAgICAgICBbXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
LAorCisgICAgICAgICJUQUciOiBhc3NlcnRUYWdOYW1lTm9Db21tZW50cyA/CisgICAgICAgICAg
ICBmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkgeworICAgICAgICAgICAgICAgIGlmICggdHlwZW9m
IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IHN0cnVuZGVmaW5lZCApIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyAp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gOgorICAgICAgICAgICAgZnVuY3Rp
b24oIHRhZywgY29udGV4dCApIHsKKyAgICAgICAgICAgICAgICB2YXIgcmVzdWx0cyA9IGNvbnRl
eHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApOworCisgICAgICAgICAgICAgICAgLy8gRmls
dGVyIG91dCBwb3NzaWJsZSBjb21tZW50cworICAgICAgICAgICAgICAgIGlmICggdGFnID09PSAi
KiIgKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtLAorICAgICAgICAgICAgICAgICAg
ICAgICAgdG1wID0gW10sCisgICAgICAgICAgICAgICAgICAgICAgICBpID0gMDsKKworICAgICAg
ICAgICAgICAgICAgICBmb3IgKCA7IChlbGVtID0gcmVzdWx0c1tpXSk7IGkrKyApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0bXAucHVzaCggZWxlbSApOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRtcDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dHM7CisgICAgICAgICAgICB9LAorCisgICAgICAgICJOQU1FIjogYXNzZXJ0VXNhYmxlTmFtZSAm
JiBmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkgeworICAgICAgICAgICAgaWYgKCB0eXBlb2YgY29u
dGV4dC5nZXRFbGVtZW50c0J5TmFtZSAhPT0gc3RydW5kZWZpbmVkICkgeworICAgICAgICAgICAg
ICAgIHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlOYW1lKCBuYW1lICk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0sCisKKyAgICAgICAgIkNMQVNTIjogYXNzZXJ0VXNhYmxlQ2xhc3NOYW1l
ICYmIGZ1bmN0aW9uKCBjbGFzc05hbWUsIGNvbnRleHQsIHhtbCApIHsKKyAgICAgICAgICAgIGlm
ICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAhPT0gc3RydW5kZWZpbmVk
ICYmICF4bWwgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNC
eUNsYXNzTmFtZSggY2xhc3NOYW1lICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
LAorCisgICAgcmVsYXRpdmU6IHsKKyAgICAgICAgIj4iOiB7IGRpcjogInBhcmVudE5vZGUiLCBm
aXJzdDogdHJ1ZSB9LAorICAgICAgICAiICI6IHsgZGlyOiAicGFyZW50Tm9kZSIgfSwKKyAgICAg
ICAgIisiOiB7IGRpcjogInByZXZpb3VzU2libGluZyIsIGZpcnN0OiB0cnVlIH0sCisgICAgICAg
ICJ+IjogeyBkaXI6ICJwcmV2aW91c1NpYmxpbmciIH0KKyAgICB9LAorCisgICAgcHJlRmlsdGVy
OiB7CisgICAgICAgICJBVFRSIjogZnVuY3Rpb24oIG1hdGNoICkgeworICAgICAgICAgICAgbWF0
Y2hbMV0gPSBtYXRjaFsxXS5yZXBsYWNlKCByYmFja3NsYXNoLCAiIiApOworCisgICAgICAgICAg
ICAvLyBNb3ZlIHRoZSBnaXZlbiB2YWx1ZSB0byBtYXRjaFszXSB3aGV0aGVyIHF1b3RlZCBvciB1
bnF1b3RlZAorICAgICAgICAgICAgbWF0Y2hbM10gPSAoIG1hdGNoWzRdIHx8IG1hdGNoWzVdIHx8
ICIiICkucmVwbGFjZSggcmJhY2tzbGFzaCwgIiIgKTsKKworICAgICAgICAgICAgaWYgKCBtYXRj
aFsyXSA9PT0gIn49IiApIHsKKyAgICAgICAgICAgICAgICBtYXRjaFszXSA9ICIgIiArIG1hdGNo
WzNdICsgIiAiOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gbWF0Y2guc2xp
Y2UoIDAsIDQgKTsKKyAgICAgICAgfSwKKworICAgICAgICAiQ0hJTEQiOiBmdW5jdGlvbiggbWF0
Y2ggKSB7CisgICAgICAgICAgICAvKiBtYXRjaGVzIGZyb20gbWF0Y2hFeHByWyJDSElMRCJdCisg
ICAgICAgICAgICAgICAgMSB0eXBlIChvbmx5fG50aHwuLi4pCisgICAgICAgICAgICAgICAgMiBh
cmd1bWVudCAoZXZlbnxvZGR8XGQqfFxkKm4oWystXVxkKyk/fC4uLikKKyAgICAgICAgICAgICAg
ICAzIHhuLWNvbXBvbmVudCBvZiB4bit5IGFyZ3VtZW50IChbKy1dP1xkKm58KQorICAgICAgICAg
ICAgICAgIDQgc2lnbiBvZiB4bi1jb21wb25lbnQKKyAgICAgICAgICAgICAgICA1IHggb2YgeG4t
Y29tcG9uZW50CisgICAgICAgICAgICAgICAgNiBzaWduIG9mIHktY29tcG9uZW50CisgICAgICAg
ICAgICAgICAgNyB5IG9mIHktY29tcG9uZW50CisgICAgICAgICAgICAqLworICAgICAgICAgICAg
bWF0Y2hbMV0gPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpOworCisgICAgICAgICAgICBpZiAoIG1h
dGNoWzFdID09PSAibnRoIiApIHsKKyAgICAgICAgICAgICAgICAvLyBudGgtY2hpbGQgcmVxdWly
ZXMgYXJndW1lbnQKKyAgICAgICAgICAgICAgICBpZiAoICFtYXRjaFsyXSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgU2l6emxlLmVycm9yKCBtYXRjaFswXSApOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIC8vIG51bWVyaWMgeCBhbmQgeSBwYXJhbWV0ZXJzIGZvciBFeHBy
LmZpbHRlci5DSElMRAorICAgICAgICAgICAgICAgIC8vIHJlbWVtYmVyIHRoYXQgZmFsc2UvdHJ1
ZSBjYXN0IHJlc3BlY3RpdmVseSB0byAwLzEKKyAgICAgICAgICAgICAgICBtYXRjaFszXSA9ICso
IG1hdGNoWzNdID8gbWF0Y2hbNF0gKyAobWF0Y2hbNV0gfHwgMSkgOiAyICogKCBtYXRjaFsyXSA9
PT0gImV2ZW4iIHx8IG1hdGNoWzJdID09PSAib2RkIiApICk7CisgICAgICAgICAgICAgICAgbWF0
Y2hbNF0gPSArKCAoIG1hdGNoWzZdICsgbWF0Y2hbN10gKSB8fCBtYXRjaFsyXSA9PT0gIm9kZCIg
KTsKKworICAgICAgICAgICAgLy8gb3RoZXIgdHlwZXMgcHJvaGliaXQgYXJndW1lbnRzCisgICAg
ICAgICAgICB9IGVsc2UgaWYgKCBtYXRjaFsyXSApIHsKKyAgICAgICAgICAgICAgICBTaXp6bGUu
ZXJyb3IoIG1hdGNoWzBdICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBt
YXRjaDsKKyAgICAgICAgfSwKKworICAgICAgICAiUFNFVURPIjogZnVuY3Rpb24oIG1hdGNoICkg
eworICAgICAgICAgICAgdmFyIHVucXVvdGVkLCBleGNlc3M7CisgICAgICAgICAgICBpZiAoIG1h
dGNoRXhwclsiQ0hJTEQiXS50ZXN0KCBtYXRjaFswXSApICkgeworICAgICAgICAgICAgICAgIHJl
dHVybiBudWxsOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIG1hdGNoWzNdICkg
eworICAgICAgICAgICAgICAgIG1hdGNoWzJdID0gbWF0Y2hbM107CisgICAgICAgICAgICB9IGVs
c2UgaWYgKCAodW5xdW90ZWQgPSBtYXRjaFs0XSkgKSB7CisgICAgICAgICAgICAgICAgLy8gT25s
eSBjaGVjayBhcmd1bWVudHMgdGhhdCBjb250YWluIGEgcHNldWRvCisgICAgICAgICAgICAgICAg
aWYgKCBycHNldWRvLnRlc3QodW5xdW90ZWQpICYmCisgICAgICAgICAgICAgICAgICAgIC8vIEdl
dCBleGNlc3MgZnJvbSB0b2tlbml6ZSAocmVjdXJzaXZlbHkpCisgICAgICAgICAgICAgICAgICAg
IChleGNlc3MgPSB0b2tlbml6ZSggdW5xdW90ZWQsIHRydWUgKSkgJiYKKyAgICAgICAgICAgICAg
ICAgICAgLy8gYWR2YW5jZSB0byB0aGUgbmV4dCBjbG9zaW5nIHBhcmVudGhlc2lzCisgICAgICAg
ICAgICAgICAgICAgIChleGNlc3MgPSB1bnF1b3RlZC5pbmRleE9mKCAiKSIsIHVucXVvdGVkLmxl
bmd0aCAtIGV4Y2VzcyApIC0gdW5xdW90ZWQubGVuZ3RoKSApIHsKKworICAgICAgICAgICAgICAg
ICAgICAvLyBleGNlc3MgaXMgYSBuZWdhdGl2ZSBpbmRleAorICAgICAgICAgICAgICAgICAgICB1
bnF1b3RlZCA9IHVucXVvdGVkLnNsaWNlKCAwLCBleGNlc3MgKTsKKyAgICAgICAgICAgICAgICAg
ICAgbWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZSggMCwgZXhjZXNzICk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIG1hdGNoWzJdID0gdW5xdW90ZWQ7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8vIFJldHVybiBvbmx5IGNhcHR1cmVzIG5lZWRlZCBieSB0aGUgcHNl
dWRvIGZpbHRlciBtZXRob2QgKHR5cGUgYW5kIGFyZ3VtZW50KQorICAgICAgICAgICAgcmV0dXJu
IG1hdGNoLnNsaWNlKCAwLCAzICk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgZmlsdGVyOiB7
CisgICAgICAgICJJRCI6IGFzc2VydEdldElkTm90TmFtZSA/CisgICAgICAgICAgICBmdW5jdGlv
biggaWQgKSB7CisgICAgICAgICAgICAgICAgaWQgPSBpZC5yZXBsYWNlKCByYmFja3NsYXNoLCAi
IiApOworICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCJpZCIpID09PSBpZDsKKyAgICAg
ICAgICAgICAgICB9OworICAgICAgICAgICAgfSA6CisgICAgICAgICAgICBmdW5jdGlvbiggaWQg
KSB7CisgICAgICAgICAgICAgICAgaWQgPSBpZC5yZXBsYWNlKCByYmFja3NsYXNoLCAiIiApOwor
ICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIG5vZGUgPSB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlICE9PSBzdHJ1bmRl
ZmluZWQgJiYgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlID09PSBpZDsKKyAgICAgICAgICAgICAgICB9Owor
ICAgICAgICAgICAgfSwKKworICAgICAgICAiVEFHIjogZnVuY3Rpb24oIG5vZGVOYW1lICkgewor
ICAgICAgICAgICAgaWYgKCBub2RlTmFtZSA9PT0gIioiICkgeworICAgICAgICAgICAgICAgIHJl
dHVybiBmdW5jdGlvbigpIHsgcmV0dXJuIHRydWU7IH07CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBub2RlTmFtZSA9IG5vZGVOYW1lLnJlcGxhY2UoIHJiYWNrc2xhc2gsICIiICkudG9Mb3dl
ckNhc2UoKTsKKworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAg
ICAgICAgICAgIHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNh
c2UoKSA9PT0gbm9kZU5hbWU7CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAg
ICJDTEFTUyI6IGZ1bmN0aW9uKCBjbGFzc05hbWUgKSB7CisgICAgICAgICAgICB2YXIgcGF0dGVy
biA9IGNsYXNzQ2FjaGVbIGV4cGFuZG8gXVsgY2xhc3NOYW1lICsgIiAiIF07CisKKyAgICAgICAg
ICAgIHJldHVybiBwYXR0ZXJuIHx8CisgICAgICAgICAgICAgICAgKHBhdHRlcm4gPSBuZXcgUmVn
RXhwKCAiKF58IiArIHdoaXRlc3BhY2UgKyAiKSIgKyBjbGFzc05hbWUgKyAiKCIgKyB3aGl0ZXNw
YWNlICsgInwkKSIgKSkgJiYKKyAgICAgICAgICAgICAgICBjbGFzc0NhY2hlKCBjbGFzc05hbWUs
IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGF0dGVybi50
ZXN0KCBlbGVtLmNsYXNzTmFtZSB8fCAodHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlICE9PSBzdHJ1
bmRlZmluZWQgJiYgZWxlbS5nZXRBdHRyaWJ1dGUoImNsYXNzIikpIHx8ICIiICk7CisgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgIH0sCisKKyAgICAgICAgIkFUVFIiOiBmdW5jdGlvbiggbmFt
ZSwgb3BlcmF0b3IsIGNoZWNrICkgeworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVt
LCBjb250ZXh0ICkgeworICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBTaXp6bGUuYXR0cigg
ZWxlbSwgbmFtZSApOworCisgICAgICAgICAgICAgICAgaWYgKCByZXN1bHQgPT0gbnVsbCApIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdG9yID09PSAiIT0iOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoICFvcGVyYXRvciApIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgcmVzdWx0ICs9ICIiOworCisgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdG9yID09PSAi
PSIgPyByZXN1bHQgPT09IGNoZWNrIDoKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPT09
ICIhPSIgPyByZXN1bHQgIT09IGNoZWNrIDoKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3Ig
PT09ICJePSIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA9PT0gMCA6CisgICAg
ICAgICAgICAgICAgICAgIG9wZXJhdG9yID09PSAiKj0iID8gY2hlY2sgJiYgcmVzdWx0LmluZGV4
T2YoIGNoZWNrICkgPiAtMSA6CisgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID09PSAiJD0i
ID8gY2hlY2sgJiYgcmVzdWx0LnN1YnN0ciggcmVzdWx0Lmxlbmd0aCAtIGNoZWNrLmxlbmd0aCAp
ID09PSBjaGVjayA6CisgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID09PSAifj0iID8gKCAi
ICIgKyByZXN1bHQgKyAiICIgKS5pbmRleE9mKCBjaGVjayApID4gLTEgOgorICAgICAgICAgICAg
ICAgICAgICBvcGVyYXRvciA9PT0gInw9IiA/IHJlc3VsdCA9PT0gY2hlY2sgfHwgcmVzdWx0LnN1
YnN0ciggMCwgY2hlY2subGVuZ3RoICsgMSApID09PSBjaGVjayArICItIiA6CisgICAgICAgICAg
ICAgICAgICAgIGZhbHNlOworICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICAi
Q0hJTEQiOiBmdW5jdGlvbiggdHlwZSwgYXJndW1lbnQsIGZpcnN0LCBsYXN0ICkgeworCisgICAg
ICAgICAgICBpZiAoIHR5cGUgPT09ICJudGgiICkgeworICAgICAgICAgICAgICAgIHJldHVybiBm
dW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGUsIGRpZmYsCisg
ICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7CisKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCBmaXJzdCA9PT0gMSAmJiBsYXN0ID09PSAwICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICBpZiAoIHBhcmVudCApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRpZmYgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggbm9kZSA9IHBhcmVu
dC5maXJzdENoaWxkOyBub2RlOyBub2RlID0gbm9kZS5uZXh0U2libGluZyApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmYrKzsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBlbGVtID09PSBub2RlICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBJbmNvcnBvcmF0
ZSB0aGUgb2Zmc2V0IChvciBjYXN0IHRvIE5hTiksIHRoZW4gY2hlY2sgYWdhaW5zdCBjeWNsZSBz
aXplCisgICAgICAgICAgICAgICAgICAgIGRpZmYgLT0gbGFzdDsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGRpZmYgPT09IGZpcnN0IHx8ICggZGlmZiAlIGZpcnN0ID09PSAwICYmIGRpZmYg
LyBmaXJzdCA+PSAwICk7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAgIHZhciBu
b2RlID0gZWxlbTsKKworICAgICAgICAgICAgICAgIHN3aXRjaCAoIHR5cGUgKSB7CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgIm9ubHkiOgorICAgICAgICAgICAgICAgICAgICBjYXNlICJmaXJz
dCI6CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIChub2RlID0gbm9kZS5wcmV2aW91
c1NpYmxpbmcpICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbm9kZS5ub2Rl
VHlwZSA9PT0gMSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlID09PSAiZmlyc3QiICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gZWxlbTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqLworICAgICAgICAgICAg
ICAgICAgICBjYXNlICJsYXN0IjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggKG5v
ZGUgPSBub2RlLm5leHRTaWJsaW5nKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAg
ICAgIlBTRVVETyI6IGZ1bmN0aW9uKCBwc2V1ZG8sIGFyZ3VtZW50ICkgeworICAgICAgICAgICAg
Ly8gcHNldWRvLWNsYXNzIG5hbWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlCisgICAgICAgICAgICAv
LyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI3BzZXVkby1jbGFzc2VzCisgICAgICAg
ICAgICAvLyBQcmlvcml0aXplIGJ5IGNhc2Ugc2Vuc2l0aXZpdHkgaW4gY2FzZSBjdXN0b20gcHNl
dWRvcyBhcmUgYWRkZWQgd2l0aCB1cHBlcmNhc2UgbGV0dGVycworICAgICAgICAgICAgLy8gUmVt
ZW1iZXIgdGhhdCBzZXRGaWx0ZXJzIGluaGVyaXRzIGZyb20gcHNldWRvcworICAgICAgICAgICAg
dmFyIGFyZ3MsCisgICAgICAgICAgICAgICAgZm4gPSBFeHByLnBzZXVkb3NbIHBzZXVkbyBdIHx8
IEV4cHIuc2V0RmlsdGVyc1sgcHNldWRvLnRvTG93ZXJDYXNlKCkgXSB8fAorICAgICAgICAgICAg
ICAgICAgICBTaXp6bGUuZXJyb3IoICJ1bnN1cHBvcnRlZCBwc2V1ZG86ICIgKyBwc2V1ZG8gKTsK
KworICAgICAgICAgICAgLy8gVGhlIHVzZXIgbWF5IHVzZSBjcmVhdGVQc2V1ZG8gdG8gaW5kaWNh
dGUgdGhhdAorICAgICAgICAgICAgLy8gYXJndW1lbnRzIGFyZSBuZWVkZWQgdG8gY3JlYXRlIHRo
ZSBmaWx0ZXIgZnVuY3Rpb24KKyAgICAgICAgICAgIC8vIGp1c3QgYXMgU2l6emxlIGRvZXMKKyAg
ICAgICAgICAgIGlmICggZm5bIGV4cGFuZG8gXSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Zm4oIGFyZ3VtZW50ICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEJ1dCBtYWlu
dGFpbiBzdXBwb3J0IGZvciBvbGQgc2lnbmF0dXJlcworICAgICAgICAgICAgaWYgKCBmbi5sZW5n
dGggPiAxICkgeworICAgICAgICAgICAgICAgIGFyZ3MgPSBbIHBzZXVkbywgcHNldWRvLCAiIiwg
YXJndW1lbnQgXTsKKyAgICAgICAgICAgICAgICByZXR1cm4gRXhwci5zZXRGaWx0ZXJzLmhhc093
blByb3BlcnR5KCBwc2V1ZG8udG9Mb3dlckNhc2UoKSApID8KKyAgICAgICAgICAgICAgICAgICAg
bWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIGlkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkID0g
Zm4oIHNlZWQsIGFyZ3VtZW50ICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IG1h
dGNoZWQubGVuZ3RoOworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4ID0gaW5kZXhPZi5jYWxsKCBzZWVkLCBtYXRj
aGVkW2ldICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlZFsgaWR4IF0gPSAhKCBt
YXRjaGVzWyBpZHggXSA9IG1hdGNoZWRbaV0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgfSkgOgorICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigg
ZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbiggZWxlbSwgMCwgYXJn
cyApOworICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICByZXR1cm4gZm47CisgICAgICAgIH0KKyAgICB9LAorCisgICAgcHNldWRvczogeworICAgICAg
ICAibm90IjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKKyAgICAgICAgICAg
IC8vIFRyaW0gdGhlIHNlbGVjdG9yIHBhc3NlZCB0byBjb21waWxlCisgICAgICAgICAgICAvLyB0
byBhdm9pZCB0cmVhdGluZyBsZWFkaW5nIGFuZCB0cmFpbGluZworICAgICAgICAgICAgLy8gc3Bh
Y2VzIGFzIGNvbWJpbmF0b3JzCisgICAgICAgICAgICB2YXIgaW5wdXQgPSBbXSwKKyAgICAgICAg
ICAgICAgICByZXN1bHRzID0gW10sCisgICAgICAgICAgICAgICAgbWF0Y2hlciA9IGNvbXBpbGUo
IHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltLCAiJDEiICkgKTsKKworICAgICAgICAgICAgcmV0dXJu
IG1hdGNoZXJbIGV4cGFuZG8gXSA/CisgICAgICAgICAgICAgICAgbWFya0Z1bmN0aW9uKGZ1bmN0
aW9uKCBzZWVkLCBtYXRjaGVzLCBjb250ZXh0LCB4bWwgKSB7CisgICAgICAgICAgICAgICAgICAg
IHZhciBlbGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5tYXRjaGVkID0gbWF0Y2hlcigg
c2VlZCwgbnVsbCwgeG1sLCBbXSApLAorICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHNlZWQu
bGVuZ3RoOworCisgICAgICAgICAgICAgICAgICAgIC8vIE1hdGNoIGVsZW1lbnRzIHVubWF0Y2hl
ZCBieSBgbWF0Y2hlcmAKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIChlbGVtID0gdW5tYXRjaGVkW2ldKSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWVkW2ldID0gIShtYXRjaGVzW2ldID0gZWxlbSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9KSA6CisgICAgICAgICAgICAgICAgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHht
bCApIHsKKyAgICAgICAgICAgICAgICAgICAgaW5wdXRbMF0gPSBlbGVtOworICAgICAgICAgICAg
ICAgICAgICBtYXRjaGVyKCBpbnB1dCwgbnVsbCwgeG1sLCByZXN1bHRzICk7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAhcmVzdWx0cy5wb3AoKTsKKyAgICAgICAgICAgICAgICB9OworICAg
ICAgICB9KSwKKworICAgICAgICAiaGFzIjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWxlY3Rv
ciApIHsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gU2l6emxlKCBzZWxlY3RvciwgZWxlbSApLmxlbmd0aCA+IDA7CisgICAgICAg
ICAgICB9OworICAgICAgICB9KSwKKworICAgICAgICAiY29udGFpbnMiOiBtYXJrRnVuY3Rpb24o
ZnVuY3Rpb24oIHRleHQgKSB7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuICggZWxlbS50ZXh0Q29udGVudCB8fCBlbGVtLmlubmVy
VGV4dCB8fCBnZXRUZXh0KCBlbGVtICkgKS5pbmRleE9mKCB0ZXh0ICkgPiAtMTsKKyAgICAgICAg
ICAgIH07CisgICAgICAgIH0pLAorCisgICAgICAgICJlbmFibGVkIjogZnVuY3Rpb24oIGVsZW0g
KSB7CisgICAgICAgICAgICByZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZmFsc2U7CisgICAgICAg
IH0sCisKKyAgICAgICAgImRpc2FibGVkIjogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAg
ICByZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gdHJ1ZTsKKyAgICAgICAgfSwKKworICAgICAgICAi
Y2hlY2tlZCI6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgLy8gSW4gQ1NTMywgOmNo
ZWNrZWQgc2hvdWxkIHJldHVybiBib3RoIGNoZWNrZWQgYW5kIHNlbGVjdGVkIGVsZW1lbnRzCisg
ICAgICAgICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9y
cy0yMDExMDkyOS8jY2hlY2tlZAorICAgICAgICAgICAgdmFyIG5vZGVOYW1lID0gZWxlbS5ub2Rl
TmFtZS50b0xvd2VyQ2FzZSgpOworICAgICAgICAgICAgcmV0dXJuIChub2RlTmFtZSA9PT0gImlu
cHV0IiAmJiAhIWVsZW0uY2hlY2tlZCkgfHwgKG5vZGVOYW1lID09PSAib3B0aW9uIiAmJiAhIWVs
ZW0uc2VsZWN0ZWQpOworICAgICAgICB9LAorCisgICAgICAgICJzZWxlY3RlZCI6IGZ1bmN0aW9u
KCBlbGVtICkgeworICAgICAgICAgICAgLy8gQWNjZXNzaW5nIHRoaXMgcHJvcGVydHkgbWFrZXMg
c2VsZWN0ZWQtYnktZGVmYXVsdAorICAgICAgICAgICAgLy8gb3B0aW9ucyBpbiBTYWZhcmkgd29y
ayBwcm9wZXJseQorICAgICAgICAgICAgaWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7CisgICAgICAg
ICAgICAgICAgZWxlbS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHJldHVybiBlbGVtLnNlbGVjdGVkID09PSB0cnVlOworICAgICAgICB9LAor
CisgICAgICAgICJwYXJlbnQiOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIHJldHVy
biAhRXhwci5wc2V1ZG9zWyJlbXB0eSJdKCBlbGVtICk7CisgICAgICAgIH0sCisKKyAgICAgICAg
ImVtcHR5IjogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAvLyBodHRwOi8vd3d3Lncz
Lm9yZy9UUi9zZWxlY3RvcnMvI2VtcHR5LXBzZXVkbworICAgICAgICAgICAgLy8gOmVtcHR5IGlz
IG9ubHkgYWZmZWN0ZWQgYnkgZWxlbWVudCBub2RlcyBhbmQgY29udGVudCBub2RlcyhpbmNsdWRp
bmcgdGV4dCgzKSwgY2RhdGEoNCkpLAorICAgICAgICAgICAgLy8gICBub3QgY29tbWVudCwgcHJv
Y2Vzc2luZyBpbnN0cnVjdGlvbnMsIG9yIG90aGVycworICAgICAgICAgICAgLy8gVGhhbmtzIHRv
IERpZWdvIFBlcmluaSBmb3IgdGhlIG5vZGVOYW1lIHNob3J0Y3V0CisgICAgICAgICAgICAvLyAg
IEdyZWF0ZXIgdGhhbiAiQCIgbWVhbnMgYWxwaGEgY2hhcmFjdGVycyAoc3BlY2lmaWNhbGx5IG5v
dCBzdGFydGluZyB3aXRoICIjIiBvciAiPyIpCisgICAgICAgICAgICB2YXIgbm9kZVR5cGU7Cisg
ICAgICAgICAgICBlbGVtID0gZWxlbS5maXJzdENoaWxkOworICAgICAgICAgICAgd2hpbGUgKCBl
bGVtICkgeworICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlTmFtZSA+ICJAIiB8fCAobm9k
ZVR5cGUgPSBlbGVtLm5vZGVUeXBlKSA9PT0gMyB8fCBub2RlVHlwZSA9PT0gNCApIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbGVtID0gZWxlbS5uZXh0U2libGluZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9LAorCisgICAgICAgICJoZWFkZXIiOiBmdW5jdGlv
biggZWxlbSApIHsKKyAgICAgICAgICAgIHJldHVybiByaGVhZGVyLnRlc3QoIGVsZW0ubm9kZU5h
bWUgKTsKKyAgICAgICAgfSwKKworICAgICAgICAidGV4dCI6IGZ1bmN0aW9uKCBlbGVtICkgewor
ICAgICAgICAgICAgdmFyIHR5cGUsIGF0dHI7CisgICAgICAgICAgICAvLyBJRTYgYW5kIDcgd2ls
bCBtYXAgZWxlbS50eXBlIHRvICd0ZXh0JyBmb3IgbmV3IEhUTUw1IHR5cGVzIChzZWFyY2gsIGV0
YykKKyAgICAgICAgICAgIC8vIHVzZSBnZXRBdHRyaWJ1dGUgaW5zdGVhZCB0byB0ZXN0IHRoaXMg
Y2FzZQorICAgICAgICAgICAgcmV0dXJuIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0g
ImlucHV0IiAmJgorICAgICAgICAgICAgICAgICh0eXBlID0gZWxlbS50eXBlKSA9PT0gInRleHQi
ICYmCisgICAgICAgICAgICAgICAgKCAoYXR0ciA9IGVsZW0uZ2V0QXR0cmlidXRlKCJ0eXBlIikp
ID09IG51bGwgfHwgYXR0ci50b0xvd2VyQ2FzZSgpID09PSB0eXBlICk7CisgICAgICAgIH0sCisK
KyAgICAgICAgLy8gSW5wdXQgdHlwZXMKKyAgICAgICAgInJhZGlvIjogY3JlYXRlSW5wdXRQc2V1
ZG8oInJhZGlvIiksCisgICAgICAgICJjaGVja2JveCI6IGNyZWF0ZUlucHV0UHNldWRvKCJjaGVj
a2JveCIpLAorICAgICAgICAiZmlsZSI6IGNyZWF0ZUlucHV0UHNldWRvKCJmaWxlIiksCisgICAg
ICAgICJwYXNzd29yZCI6IGNyZWF0ZUlucHV0UHNldWRvKCJwYXNzd29yZCIpLAorICAgICAgICAi
aW1hZ2UiOiBjcmVhdGVJbnB1dFBzZXVkbygiaW1hZ2UiKSwKKworICAgICAgICAic3VibWl0Ijog
Y3JlYXRlQnV0dG9uUHNldWRvKCJzdWJtaXQiKSwKKyAgICAgICAgInJlc2V0IjogY3JlYXRlQnV0
dG9uUHNldWRvKCJyZXNldCIpLAorCisgICAgICAgICJidXR0b24iOiBmdW5jdGlvbiggZWxlbSAp
IHsKKyAgICAgICAgICAgIHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOwor
ICAgICAgICAgICAgcmV0dXJuIG5hbWUgPT09ICJpbnB1dCIgJiYgZWxlbS50eXBlID09PSAiYnV0
dG9uIiB8fCBuYW1lID09PSAiYnV0dG9uIjsKKyAgICAgICAgfSwKKworICAgICAgICAiaW5wdXQi
OiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIHJldHVybiByaW5wdXRzLnRlc3QoIGVs
ZW0ubm9kZU5hbWUgKTsKKyAgICAgICAgfSwKKworICAgICAgICAiZm9jdXMiOiBmdW5jdGlvbigg
ZWxlbSApIHsKKyAgICAgICAgICAgIHZhciBkb2MgPSBlbGVtLm93bmVyRG9jdW1lbnQ7CisgICAg
ICAgICAgICByZXR1cm4gZWxlbSA9PT0gZG9jLmFjdGl2ZUVsZW1lbnQgJiYgKCFkb2MuaGFzRm9j
dXMgfHwgZG9jLmhhc0ZvY3VzKCkpICYmICEhKGVsZW0udHlwZSB8fCBlbGVtLmhyZWYgfHwgfmVs
ZW0udGFiSW5kZXgpOworICAgICAgICB9LAorCisgICAgICAgICJhY3RpdmUiOiBmdW5jdGlvbigg
ZWxlbSApIHsKKyAgICAgICAgICAgIHJldHVybiBlbGVtID09PSBlbGVtLm93bmVyRG9jdW1lbnQu
YWN0aXZlRWxlbWVudDsKKyAgICAgICAgfSwKKworICAgICAgICAvLyBQb3NpdGlvbmFsIHR5cGVz
CisgICAgICAgICJmaXJzdCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgICByZXR1cm4gWyAwIF07CisgICAgICAgIH0pLAorCisgICAgICAgICJsYXN0Ijog
Y3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7
CisgICAgICAgICAgICByZXR1cm4gWyBsZW5ndGggLSAxIF07CisgICAgICAgIH0pLAorCisgICAg
ICAgICJlcSI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywg
bGVuZ3RoLCBhcmd1bWVudCApIHsKKyAgICAgICAgICAgIHJldHVybiBbIGFyZ3VtZW50IDwgMCA/
IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQgXTsKKyAgICAgICAgfSksCisKKyAgICAgICAg
ImV2ZW4iOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxl
bmd0aCApIHsKKyAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAy
ICkgeworICAgICAgICAgICAgICAgIG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hJbmRleGVzOworICAgICAgICB9KSwKKworICAg
ICAgICAib2RkIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVz
LCBsZW5ndGggKSB7CisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDE7IGkgPCBsZW5ndGg7IGkg
Kz0gMiApIHsKKyAgICAgICAgICAgICAgICBtYXRjaEluZGV4ZXMucHVzaCggaSApOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG1hdGNoSW5kZXhlczsKKyAgICAgICAgfSksCisK
KyAgICAgICAgImx0IjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRl
eGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkgeworICAgICAgICAgICAgZm9yICggdmFyIGkgPSBhcmd1
bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50OyAtLWkgPj0gMDsgKSB7Cisg
ICAgICAgICAgICAgICAgbWF0Y2hJbmRleGVzLnB1c2goIGkgKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiBtYXRjaEluZGV4ZXM7CisgICAgICAgIH0pLAorCisgICAgICAgICJn
dCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3Ro
LCBhcmd1bWVudCApIHsKKyAgICAgICAgICAgIGZvciAoIHZhciBpID0gYXJndW1lbnQgPCAwID8g
YXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudDsgKytpIDwgbGVuZ3RoOyApIHsKKyAgICAgICAg
ICAgICAgICBtYXRjaEluZGV4ZXMucHVzaCggaSApOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIG1hdGNoSW5kZXhlczsKKyAgICAgICAgfSkKKyAgICB9Cit9OworCitmdW5jdGlv
biBzaWJsaW5nQ2hlY2soIGEsIGIsIHJldCApIHsKKyAgICBpZiAoIGEgPT09IGIgKSB7CisgICAg
ICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgdmFyIGN1ciA9IGEubmV4dFNpYmxpbmc7CisK
KyAgICB3aGlsZSAoIGN1ciApIHsKKyAgICAgICAgaWYgKCBjdXIgPT09IGIgKSB7CisgICAgICAg
ICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBjdXIgPSBjdXIubmV4dFNpYmxp
bmc7CisgICAgfQorCisgICAgcmV0dXJuIDE7Cit9CisKK3NvcnRPcmRlciA9IGRvY0VsZW0uY29t
cGFyZURvY3VtZW50UG9zaXRpb24gPworICAgIGZ1bmN0aW9uKCBhLCBiICkgeworICAgICAgICBp
ZiAoIGEgPT09IGIgKSB7CisgICAgICAgICAgICBoYXNEdXBsaWNhdGUgPSB0cnVlOworICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gKCAhYS5jb21wYXJl
RG9jdW1lbnRQb3NpdGlvbiB8fCAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiA/CisgICAgICAg
ICAgICBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIDoKKyAgICAgICAgICAgIGEuY29tcGFyZURv
Y3VtZW50UG9zaXRpb24oYikgJiA0CisgICAgICAgICkgPyAtMSA6IDE7CisgICAgfSA6CisgICAg
ZnVuY3Rpb24oIGEsIGIgKSB7CisgICAgICAgIC8vIFRoZSBub2RlcyBhcmUgaWRlbnRpY2FsLCB3
ZSBjYW4gZXhpdCBlYXJseQorICAgICAgICBpZiAoIGEgPT09IGIgKSB7CisgICAgICAgICAgICBo
YXNEdXBsaWNhdGUgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgLy8g
RmFsbGJhY2sgdG8gdXNpbmcgc291cmNlSW5kZXggKGluIElFKSBpZiBpdCdzIGF2YWlsYWJsZSBv
biBib3RoIG5vZGVzCisgICAgICAgIH0gZWxzZSBpZiAoIGEuc291cmNlSW5kZXggJiYgYi5zb3Vy
Y2VJbmRleCApIHsKKyAgICAgICAgICAgIHJldHVybiBhLnNvdXJjZUluZGV4IC0gYi5zb3VyY2VJ
bmRleDsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBhbCwgYmwsCisgICAgICAgICAgICBhcCA9
IFtdLAorICAgICAgICAgICAgYnAgPSBbXSwKKyAgICAgICAgICAgIGF1cCA9IGEucGFyZW50Tm9k
ZSwKKyAgICAgICAgICAgIGJ1cCA9IGIucGFyZW50Tm9kZSwKKyAgICAgICAgICAgIGN1ciA9IGF1
cDsKKworICAgICAgICAvLyBJZiB0aGUgbm9kZXMgYXJlIHNpYmxpbmdzIChvciBpZGVudGljYWwp
IHdlIGNhbiBkbyBhIHF1aWNrIGNoZWNrCisgICAgICAgIGlmICggYXVwID09PSBidXAgKSB7Cisg
ICAgICAgICAgICByZXR1cm4gc2libGluZ0NoZWNrKCBhLCBiICk7CisKKyAgICAgICAgLy8gSWYg
bm8gcGFyZW50cyB3ZXJlIGZvdW5kIHRoZW4gdGhlIG5vZGVzIGFyZSBkaXNjb25uZWN0ZWQKKyAg
ICAgICAgfSBlbHNlIGlmICggIWF1cCApIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKworICAg
ICAgICB9IGVsc2UgaWYgKCAhYnVwICkgeworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAg
IH0KKworICAgICAgICAvLyBPdGhlcndpc2UgdGhleSdyZSBzb21ld2hlcmUgZWxzZSBpbiB0aGUg
dHJlZSBzbyB3ZSBuZWVkCisgICAgICAgIC8vIHRvIGJ1aWxkIHVwIGEgZnVsbCBsaXN0IG9mIHRo
ZSBwYXJlbnROb2RlcyBmb3IgY29tcGFyaXNvbgorICAgICAgICB3aGlsZSAoIGN1ciApIHsKKyAg
ICAgICAgICAgIGFwLnVuc2hpZnQoIGN1ciApOworICAgICAgICAgICAgY3VyID0gY3VyLnBhcmVu
dE5vZGU7CisgICAgICAgIH0KKworICAgICAgICBjdXIgPSBidXA7CisKKyAgICAgICAgd2hpbGUg
KCBjdXIgKSB7CisgICAgICAgICAgICBicC51bnNoaWZ0KCBjdXIgKTsKKyAgICAgICAgICAgIGN1
ciA9IGN1ci5wYXJlbnROb2RlOworICAgICAgICB9CisKKyAgICAgICAgYWwgPSBhcC5sZW5ndGg7
CisgICAgICAgIGJsID0gYnAubGVuZ3RoOworCisgICAgICAgIC8vIFN0YXJ0IHdhbGtpbmcgZG93
biB0aGUgdHJlZSBsb29raW5nIGZvciBhIGRpc2NyZXBhbmN5CisgICAgICAgIGZvciAoIHZhciBp
ID0gMDsgaSA8IGFsICYmIGkgPCBibDsgaSsrICkgeworICAgICAgICAgICAgaWYgKCBhcFtpXSAh
PT0gYnBbaV0gKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNpYmxpbmdDaGVjayggYXBbaV0s
IGJwW2ldICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBXZSBlbmRl
ZCBzb21lcGxhY2UgdXAgdGhlIHRyZWUgc28gZG8gYSBzaWJsaW5nIGNoZWNrCisgICAgICAgIHJl
dHVybiBpID09PSBhbCA/CisgICAgICAgICAgICBzaWJsaW5nQ2hlY2soIGEsIGJwW2ldLCAtMSAp
IDoKKyAgICAgICAgICAgIHNpYmxpbmdDaGVjayggYXBbaV0sIGIsIDEgKTsKKyAgICB9OworCisv
LyBBbHdheXMgYXNzdW1lIHRoZSBwcmVzZW5jZSBvZiBkdXBsaWNhdGVzIGlmIHNvcnQgZG9lc24n
dAorLy8gcGFzcyB0aGVtIHRvIG91ciBjb21wYXJpc29uIGZ1bmN0aW9uIChhcyBpbiBHb29nbGUg
Q2hyb21lKS4KK1swLCAwXS5zb3J0KCBzb3J0T3JkZXIgKTsKK2Jhc2VIYXNEdXBsaWNhdGUgPSAh
aGFzRHVwbGljYXRlOworCisvLyBEb2N1bWVudCBzb3J0aW5nIGFuZCByZW1vdmluZyBkdXBsaWNh
dGVzCitTaXp6bGUudW5pcXVlU29ydCA9IGZ1bmN0aW9uKCByZXN1bHRzICkgeworICAgIHZhciBl
bGVtLAorICAgICAgICBkdXBsaWNhdGVzID0gW10sCisgICAgICAgIGkgPSAxLAorICAgICAgICBq
ID0gMDsKKworICAgIGhhc0R1cGxpY2F0ZSA9IGJhc2VIYXNEdXBsaWNhdGU7CisgICAgcmVzdWx0
cy5zb3J0KCBzb3J0T3JkZXIgKTsKKworICAgIGlmICggaGFzRHVwbGljYXRlICkgeworICAgICAg
ICBmb3IgKCA7IChlbGVtID0gcmVzdWx0c1tpXSk7IGkrKyApIHsKKyAgICAgICAgICAgIGlmICgg
ZWxlbSA9PT0gcmVzdWx0c1sgaSAtIDEgXSApIHsKKyAgICAgICAgICAgICAgICBqID0gZHVwbGlj
YXRlcy5wdXNoKCBpICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUg
KCBqLS0gKSB7CisgICAgICAgICAgICByZXN1bHRzLnNwbGljZSggZHVwbGljYXRlc1sgaiBdLCAx
ICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0czsKK307CisKK1Npenps
ZS5lcnJvciA9IGZ1bmN0aW9uKCBtc2cgKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCAiU3ludGF4
IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIiArIG1zZyApOworfTsKKworZnVuY3Rp
b24gdG9rZW5pemUoIHNlbGVjdG9yLCBwYXJzZU9ubHkgKSB7CisgICAgdmFyIG1hdGNoZWQsIG1h
dGNoLCB0b2tlbnMsIHR5cGUsCisgICAgICAgIHNvRmFyLCBncm91cHMsIHByZUZpbHRlcnMsCisg
ICAgICAgIGNhY2hlZCA9IHRva2VuQ2FjaGVbIGV4cGFuZG8gXVsgc2VsZWN0b3IgKyAiICIgXTsK
KworICAgIGlmICggY2FjaGVkICkgeworICAgICAgICByZXR1cm4gcGFyc2VPbmx5ID8gMCA6IGNh
Y2hlZC5zbGljZSggMCApOworICAgIH0KKworICAgIHNvRmFyID0gc2VsZWN0b3I7CisgICAgZ3Jv
dXBzID0gW107CisgICAgcHJlRmlsdGVycyA9IEV4cHIucHJlRmlsdGVyOworCisgICAgd2hpbGUg
KCBzb0ZhciApIHsKKworICAgICAgICAvLyBDb21tYSBhbmQgZmlyc3QgcnVuCisgICAgICAgIGlm
ICggIW1hdGNoZWQgfHwgKG1hdGNoID0gcmNvbW1hLmV4ZWMoIHNvRmFyICkpICkgeworICAgICAg
ICAgICAgaWYgKCBtYXRjaCApIHsKKyAgICAgICAgICAgICAgICAvLyBEb24ndCBjb25zdW1lIHRy
YWlsaW5nIGNvbW1hcyBhcyB2YWxpZAorICAgICAgICAgICAgICAgIHNvRmFyID0gc29GYXIuc2xp
Y2UoIG1hdGNoWzBdLmxlbmd0aCApIHx8IHNvRmFyOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZ3JvdXBzLnB1c2goIHRva2VucyA9IFtdICk7CisgICAgICAgIH0KKworICAgICAgICBtYXRj
aGVkID0gZmFsc2U7CisKKyAgICAgICAgLy8gQ29tYmluYXRvcnMKKyAgICAgICAgaWYgKCAobWF0
Y2ggPSByY29tYmluYXRvcnMuZXhlYyggc29GYXIgKSkgKSB7CisgICAgICAgICAgICB0b2tlbnMu
cHVzaCggbWF0Y2hlZCA9IG5ldyBUb2tlbiggbWF0Y2guc2hpZnQoKSApICk7CisgICAgICAgICAg
ICBzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaGVkLmxlbmd0aCApOworCisgICAgICAgICAgICAv
LyBDYXN0IGRlc2NlbmRhbnQgY29tYmluYXRvcnMgdG8gc3BhY2UKKyAgICAgICAgICAgIG1hdGNo
ZWQudHlwZSA9IG1hdGNoWzBdLnJlcGxhY2UoIHJ0cmltLCAiICIgKTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIEZpbHRlcnMKKyAgICAgICAgZm9yICggdHlwZSBpbiBFeHByLmZpbHRlciApIHsK
KyAgICAgICAgICAgIGlmICggKG1hdGNoID0gbWF0Y2hFeHByWyB0eXBlIF0uZXhlYyggc29GYXIg
KSkgJiYgKCFwcmVGaWx0ZXJzWyB0eXBlIF0gfHwKKyAgICAgICAgICAgICAgICAobWF0Y2ggPSBw
cmVGaWx0ZXJzWyB0eXBlIF0oIG1hdGNoICkpKSApIHsKKworICAgICAgICAgICAgICAgIHRva2Vu
cy5wdXNoKCBtYXRjaGVkID0gbmV3IFRva2VuKCBtYXRjaC5zaGlmdCgpICkgKTsKKyAgICAgICAg
ICAgICAgICBzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaGVkLmxlbmd0aCApOworICAgICAgICAg
ICAgICAgIG1hdGNoZWQudHlwZSA9IHR5cGU7CisgICAgICAgICAgICAgICAgbWF0Y2hlZC5tYXRj
aGVzID0gbWF0Y2g7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoICFt
YXRjaGVkICkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAv
LyBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgaW52YWxpZCBleGNlc3MKKyAgICAvLyBpZiB3ZSdy
ZSBqdXN0IHBhcnNpbmcKKyAgICAvLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yIG9yIHJldHVy
biB0b2tlbnMKKyAgICByZXR1cm4gcGFyc2VPbmx5ID8KKyAgICAgICAgc29GYXIubGVuZ3RoIDoK
KyAgICAgICAgc29GYXIgPworICAgICAgICAgICAgU2l6emxlLmVycm9yKCBzZWxlY3RvciApIDoK
KyAgICAgICAgICAgIC8vIENhY2hlIHRoZSB0b2tlbnMKKyAgICAgICAgICAgIHRva2VuQ2FjaGUo
IHNlbGVjdG9yLCBncm91cHMgKS5zbGljZSggMCApOworfQorCitmdW5jdGlvbiBhZGRDb21iaW5h
dG9yKCBtYXRjaGVyLCBjb21iaW5hdG9yLCBiYXNlICkgeworICAgIHZhciBkaXIgPSBjb21iaW5h
dG9yLmRpciwKKyAgICAgICAgY2hlY2tOb25FbGVtZW50cyA9IGJhc2UgJiYgY29tYmluYXRvci5k
aXIgPT09ICJwYXJlbnROb2RlIiwKKyAgICAgICAgZG9uZU5hbWUgPSBkb25lKys7CisKKyAgICBy
ZXR1cm4gY29tYmluYXRvci5maXJzdCA/CisgICAgICAgIC8vIENoZWNrIGFnYWluc3QgY2xvc2Vz
dCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudAorICAgICAgICBmdW5jdGlvbiggZWxlbSwgY29u
dGV4dCwgeG1sICkgeworICAgICAgICAgICAgd2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRpciBdKSAp
IHsKKyAgICAgICAgICAgICAgICBpZiAoIGNoZWNrTm9uRWxlbWVudHMgfHwgZWxlbS5ub2RlVHlw
ZSA9PT0gMSAgKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGVyKCBlbGVtLCBj
b250ZXh0LCB4bWwgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0gOgorCisgICAgICAgIC8vIENoZWNrIGFnYWluc3QgYWxsIGFuY2VzdG9yL3ByZWNlZGluZyBl
bGVtZW50cworICAgICAgICBmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkgeworICAgICAg
ICAgICAgLy8gV2UgY2FuJ3Qgc2V0IGFyYml0cmFyeSBkYXRhIG9uIFhNTCBub2Rlcywgc28gdGhl
eSBkb24ndCBiZW5lZml0IGZyb20gZGlyIGNhY2hpbmcKKyAgICAgICAgICAgIGlmICggIXhtbCAp
IHsKKyAgICAgICAgICAgICAgICB2YXIgY2FjaGUsCisgICAgICAgICAgICAgICAgICAgIGRpcmtl
eSA9IGRpcnJ1bnMgKyAiICIgKyBkb25lTmFtZSArICIgIiwKKyAgICAgICAgICAgICAgICAgICAg
Y2FjaGVka2V5ID0gZGlya2V5ICsgY2FjaGVkcnVuczsKKyAgICAgICAgICAgICAgICB3aGlsZSAo
IChlbGVtID0gZWxlbVsgZGlyIF0pICkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIGNoZWNr
Tm9uRWxlbWVudHMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggKGNhY2hlID0gZWxlbVsgZXhwYW5kbyBdKSA9PT0gY2FjaGVka2V5ICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLnNpenNldDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHR5cGVvZiBjYWNoZSA9PT0gInN0cmluZyIgJiYg
Y2FjaGUuaW5kZXhPZihkaXJrZXkpID09PSAwICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggZWxlbS5zaXpzZXQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlbGVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbVsg
ZXhwYW5kbyBdID0gY2FjaGVka2V5OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
bWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVsZW0uc2l6c2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVsZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVsZW0uc2l6c2V0ID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHdoaWxlICggKGVsZW0gPSBlbGVt
WyBkaXIgXSkgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggY2hlY2tOb25FbGVtZW50cyB8
fCBlbGVtLm5vZGVUeXBlID09PSAxICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBt
YXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZWxlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsK
K30KKworZnVuY3Rpb24gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICkgeworICAgIHJldHVybiBt
YXRjaGVycy5sZW5ndGggPiAxID8KKyAgICAgICAgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHht
bCApIHsKKyAgICAgICAgICAgIHZhciBpID0gbWF0Y2hlcnMubGVuZ3RoOworICAgICAgICAgICAg
d2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAgICAgICAgaWYgKCAhbWF0Y2hlcnNbaV0oIGVsZW0s
IGNvbnRleHQsIHhtbCApICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0gOgorICAgICAgICBtYXRjaGVyc1swXTsKK30KKworZnVuY3Rpb24gY29uZGVu
c2UoIHVubWF0Y2hlZCwgbWFwLCBmaWx0ZXIsIGNvbnRleHQsIHhtbCApIHsKKyAgICB2YXIgZWxl
bSwKKyAgICAgICAgbmV3VW5tYXRjaGVkID0gW10sCisgICAgICAgIGkgPSAwLAorICAgICAgICBs
ZW4gPSB1bm1hdGNoZWQubGVuZ3RoLAorICAgICAgICBtYXBwZWQgPSBtYXAgIT0gbnVsbDsKKwor
ICAgIGZvciAoIDsgaSA8IGxlbjsgaSsrICkgeworICAgICAgICBpZiAoIChlbGVtID0gdW5tYXRj
aGVkW2ldKSApIHsKKyAgICAgICAgICAgIGlmICggIWZpbHRlciB8fCBmaWx0ZXIoIGVsZW0sIGNv
bnRleHQsIHhtbCApICkgeworICAgICAgICAgICAgICAgIG5ld1VubWF0Y2hlZC5wdXNoKCBlbGVt
ICk7CisgICAgICAgICAgICAgICAgaWYgKCBtYXBwZWQgKSB7CisgICAgICAgICAgICAgICAgICAg
IG1hcC5wdXNoKCBpICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIG5ld1VubWF0Y2hlZDsKK30KKworZnVuY3Rpb24gc2V0
TWF0Y2hlciggcHJlRmlsdGVyLCBzZWxlY3RvciwgbWF0Y2hlciwgcG9zdEZpbHRlciwgcG9zdEZp
bmRlciwgcG9zdFNlbGVjdG9yICkgeworICAgIGlmICggcG9zdEZpbHRlciAmJiAhcG9zdEZpbHRl
clsgZXhwYW5kbyBdICkgeworICAgICAgICBwb3N0RmlsdGVyID0gc2V0TWF0Y2hlciggcG9zdEZp
bHRlciApOworICAgIH0KKyAgICBpZiAoIHBvc3RGaW5kZXIgJiYgIXBvc3RGaW5kZXJbIGV4cGFu
ZG8gXSApIHsKKyAgICAgICAgcG9zdEZpbmRlciA9IHNldE1hdGNoZXIoIHBvc3RGaW5kZXIsIHBv
c3RTZWxlY3RvciApOworICAgIH0KKyAgICByZXR1cm4gbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBz
ZWVkLCByZXN1bHRzLCBjb250ZXh0LCB4bWwgKSB7CisgICAgICAgIHZhciB0ZW1wLCBpLCBlbGVt
LAorICAgICAgICAgICAgcHJlTWFwID0gW10sCisgICAgICAgICAgICBwb3N0TWFwID0gW10sCisg
ICAgICAgICAgICBwcmVleGlzdGluZyA9IHJlc3VsdHMubGVuZ3RoLAorCisgICAgICAgICAgICAv
LyBHZXQgaW5pdGlhbCBlbGVtZW50cyBmcm9tIHNlZWQgb3IgY29udGV4dAorICAgICAgICAgICAg
ZWxlbXMgPSBzZWVkIHx8IG11bHRpcGxlQ29udGV4dHMoIHNlbGVjdG9yIHx8ICIqIiwgY29udGV4
dC5ub2RlVHlwZSA/IFsgY29udGV4dCBdIDogY29udGV4dCwgW10gKSwKKworICAgICAgICAgICAg
Ly8gUHJlZmlsdGVyIHRvIGdldCBtYXRjaGVyIGlucHV0LCBwcmVzZXJ2aW5nIGEgbWFwIGZvciBz
ZWVkLXJlc3VsdHMgc3luY2hyb25pemF0aW9uCisgICAgICAgICAgICBtYXRjaGVySW4gPSBwcmVG
aWx0ZXIgJiYgKCBzZWVkIHx8ICFzZWxlY3RvciApID8KKyAgICAgICAgICAgICAgICBjb25kZW5z
ZSggZWxlbXMsIHByZU1hcCwgcHJlRmlsdGVyLCBjb250ZXh0LCB4bWwgKSA6CisgICAgICAgICAg
ICAgICAgZWxlbXMsCisKKyAgICAgICAgICAgIG1hdGNoZXJPdXQgPSBtYXRjaGVyID8KKyAgICAg
ICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgcG9zdEZpbmRlciwgb3IgZmlsdGVyZWQgc2VlZCwg
b3Igbm9uLXNlZWQgcG9zdEZpbHRlciBvciBwcmVleGlzdGluZyByZXN1bHRzLAorICAgICAgICAg
ICAgICAgIHBvc3RGaW5kZXIgfHwgKCBzZWVkID8gcHJlRmlsdGVyIDogcHJlZXhpc3RpbmcgfHwg
cG9zdEZpbHRlciApID8KKworICAgICAgICAgICAgICAgICAgICAvLyAuLi5pbnRlcm1lZGlhdGUg
cHJvY2Vzc2luZyBpcyBuZWNlc3NhcnkKKyAgICAgICAgICAgICAgICAgICAgW10gOgorCisgICAg
ICAgICAgICAgICAgICAgIC8vIC4uLm90aGVyd2lzZSB1c2UgcmVzdWx0cyBkaXJlY3RseQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHRzIDoKKyAgICAgICAgICAgICAgICBtYXRjaGVySW47CisK
KyAgICAgICAgLy8gRmluZCBwcmltYXJ5IG1hdGNoZXMKKyAgICAgICAgaWYgKCBtYXRjaGVyICkg
eworICAgICAgICAgICAgbWF0Y2hlciggbWF0Y2hlckluLCBtYXRjaGVyT3V0LCBjb250ZXh0LCB4
bWwgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEFwcGx5IHBvc3RGaWx0ZXIKKyAgICAgICAg
aWYgKCBwb3N0RmlsdGVyICkgeworICAgICAgICAgICAgdGVtcCA9IGNvbmRlbnNlKCBtYXRjaGVy
T3V0LCBwb3N0TWFwICk7CisgICAgICAgICAgICBwb3N0RmlsdGVyKCB0ZW1wLCBbXSwgY29udGV4
dCwgeG1sICk7CisKKyAgICAgICAgICAgIC8vIFVuLW1hdGNoIGZhaWxpbmcgZWxlbWVudHMgYnkg
bW92aW5nIHRoZW0gYmFjayB0byBtYXRjaGVySW4KKyAgICAgICAgICAgIGkgPSB0ZW1wLmxlbmd0
aDsKKyAgICAgICAgICAgIHdoaWxlICggaS0tICkgeworICAgICAgICAgICAgICAgIGlmICggKGVs
ZW0gPSB0ZW1wW2ldKSApIHsKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hlck91dFsgcG9zdE1h
cFtpXSBdID0gIShtYXRjaGVySW5bIHBvc3RNYXBbaV0gXSA9IGVsZW0pOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICggc2VlZCApIHsK
KyAgICAgICAgICAgIGlmICggcG9zdEZpbmRlciB8fCBwcmVGaWx0ZXIgKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCBwb3N0RmluZGVyICkgeworICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhl
IGZpbmFsIG1hdGNoZXJPdXQgYnkgY29uZGVuc2luZyB0aGlzIGludGVybWVkaWF0ZSBpbnRvIHBv
c3RGaW5kZXIgY29udGV4dHMKKyAgICAgICAgICAgICAgICAgICAgdGVtcCA9IFtdOworICAgICAg
ICAgICAgICAgICAgICBpID0gbWF0Y2hlck91dC5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAg
IHdoaWxlICggaS0tICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoZWxlbSA9IG1h
dGNoZXJPdXRbaV0pICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlc3RvcmUg
bWF0Y2hlckluIHNpbmNlIGVsZW0gaXMgbm90IHlldCBhIGZpbmFsIG1hdGNoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGVtcC5wdXNoKCAobWF0Y2hlckluW2ldID0gZWxlbSkgKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBwb3N0RmluZGVyKCBudWxsLCAobWF0Y2hlck91dCA9IFtdKSwgdGVtcCwgeG1s
ICk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gTW92ZSBtYXRjaGVk
IGVsZW1lbnRzIGZyb20gc2VlZCB0byByZXN1bHRzIHRvIGtlZXAgdGhlbSBzeW5jaHJvbml6ZWQK
KyAgICAgICAgICAgICAgICBpID0gbWF0Y2hlck91dC5sZW5ndGg7CisgICAgICAgICAgICAgICAg
d2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggKGVsZW0gPSBtYXRjaGVy
T3V0W2ldKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgKHRlbXAgPSBwb3N0RmluZGVyID8g
aW5kZXhPZi5jYWxsKCBzZWVkLCBlbGVtICkgOiBwcmVNYXBbaV0pID4gLTEgKSB7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHNlZWRbdGVtcF0gPSAhKHJlc3VsdHNbdGVtcF0gPSBlbGVtKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAvLyBBZGQgZWxlbWVudHMgdG8gcmVzdWx0cywgdGhyb3VnaCBwb3N0RmluZGVy
IGlmIGRlZmluZWQKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1hdGNoZXJPdXQgPSBj
b25kZW5zZSgKKyAgICAgICAgICAgICAgICBtYXRjaGVyT3V0ID09PSByZXN1bHRzID8KKyAgICAg
ICAgICAgICAgICAgICAgbWF0Y2hlck91dC5zcGxpY2UoIHByZWV4aXN0aW5nLCBtYXRjaGVyT3V0
Lmxlbmd0aCApIDoKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hlck91dAorICAgICAgICAgICAg
KTsKKyAgICAgICAgICAgIGlmICggcG9zdEZpbmRlciApIHsKKyAgICAgICAgICAgICAgICBwb3N0
RmluZGVyKCBudWxsLCByZXN1bHRzLCBtYXRjaGVyT3V0LCB4bWwgKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgcHVzaC5hcHBseSggcmVzdWx0cywgbWF0Y2hlck91dCAp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIG1hdGNo
ZXJGcm9tVG9rZW5zKCB0b2tlbnMgKSB7CisgICAgdmFyIGNoZWNrQ29udGV4dCwgbWF0Y2hlciwg
aiwKKyAgICAgICAgbGVuID0gdG9rZW5zLmxlbmd0aCwKKyAgICAgICAgbGVhZGluZ1JlbGF0aXZl
ID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zWzBdLnR5cGUgXSwKKyAgICAgICAgaW1wbGljaXRSZWxh
dGl2ZSA9IGxlYWRpbmdSZWxhdGl2ZSB8fCBFeHByLnJlbGF0aXZlWyIgIl0sCisgICAgICAgIGkg
PSBsZWFkaW5nUmVsYXRpdmUgPyAxIDogMCwKKworICAgICAgICAvLyBUaGUgZm91bmRhdGlvbmFs
IG1hdGNoZXIgZW5zdXJlcyB0aGF0IGVsZW1lbnRzIGFyZSByZWFjaGFibGUgZnJvbSB0b3AtbGV2
ZWwgY29udGV4dChzKQorICAgICAgICBtYXRjaENvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5j
dGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIHJldHVybiBlbGVtID09PSBjaGVja0NvbnRleHQ7
CisgICAgICAgIH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSwKKyAgICAgICAgbWF0Y2hBbnlD
b250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICBy
ZXR1cm4gaW5kZXhPZi5jYWxsKCBjaGVja0NvbnRleHQsIGVsZW0gKSA+IC0xOworICAgICAgICB9
LCBpbXBsaWNpdFJlbGF0aXZlLCB0cnVlICksCisgICAgICAgIG1hdGNoZXJzID0gWyBmdW5jdGlv
biggZWxlbSwgY29udGV4dCwgeG1sICkgeworICAgICAgICAgICAgcmV0dXJuICggIWxlYWRpbmdS
ZWxhdGl2ZSAmJiAoIHhtbCB8fCBjb250ZXh0ICE9PSBvdXRlcm1vc3RDb250ZXh0ICkgKSB8fCAo
CisgICAgICAgICAgICAgICAgKGNoZWNrQ29udGV4dCA9IGNvbnRleHQpLm5vZGVUeXBlID8KKyAg
ICAgICAgICAgICAgICAgICAgbWF0Y2hDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSA6Cisg
ICAgICAgICAgICAgICAgICAgIG1hdGNoQW55Q29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkg
KTsKKyAgICAgICAgfSBdOworCisgICAgZm9yICggOyBpIDwgbGVuOyBpKysgKSB7CisgICAgICAg
IGlmICggKG1hdGNoZXIgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbaV0udHlwZSBdKSApIHsKKyAg
ICAgICAgICAgIG1hdGNoZXJzID0gWyBhZGRDb21iaW5hdG9yKCBlbGVtZW50TWF0Y2hlciggbWF0
Y2hlcnMgKSwgbWF0Y2hlciApIF07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtYXRj
aGVyID0gRXhwci5maWx0ZXJbIHRva2Vuc1tpXS50eXBlIF0uYXBwbHkoIG51bGwsIHRva2Vuc1tp
XS5tYXRjaGVzICk7CisKKyAgICAgICAgICAgIC8vIFJldHVybiBzcGVjaWFsIHVwb24gc2VlaW5n
IGEgcG9zaXRpb25hbCBtYXRjaGVyCisgICAgICAgICAgICBpZiAoIG1hdGNoZXJbIGV4cGFuZG8g
XSApIHsKKyAgICAgICAgICAgICAgICAvLyBGaW5kIHRoZSBuZXh0IHJlbGF0aXZlIG9wZXJhdG9y
IChpZiBhbnkpIGZvciBwcm9wZXIgaGFuZGxpbmcKKyAgICAgICAgICAgICAgICBqID0gKytpOwor
ICAgICAgICAgICAgICAgIGZvciAoIDsgaiA8IGxlbjsgaisrICkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoIEV4cHIucmVsYXRpdmVbIHRva2Vuc1tqXS50eXBlIF0gKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gc2V0TWF0Y2hlcigKKyAgICAgICAgICAgICAg
ICAgICAgaSA+IDEgJiYgZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICksCisgICAgICAgICAgICAg
ICAgICAgIGkgPiAxICYmIHRva2Vucy5zbGljZSggMCwgaSAtIDEgKS5qb2luKCIiKS5yZXBsYWNl
KCBydHJpbSwgIiQxIiApLAorICAgICAgICAgICAgICAgICAgICBtYXRjaGVyLAorICAgICAgICAg
ICAgICAgICAgICBpIDwgaiAmJiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zLnNsaWNlKCBpLCBq
ICkgKSwKKyAgICAgICAgICAgICAgICAgICAgaiA8IGxlbiAmJiBtYXRjaGVyRnJvbVRva2Vucygg
KHRva2VucyA9IHRva2Vucy5zbGljZSggaiApKSApLAorICAgICAgICAgICAgICAgICAgICBqIDwg
bGVuICYmIHRva2Vucy5qb2luKCIiKQorICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBtYXRjaGVycy5wdXNoKCBtYXRjaGVyICk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICk7Cit9CisKK2Z1bmN0aW9u
IG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyAp
IHsKKyAgICB2YXIgYnlTZXQgPSBzZXRNYXRjaGVycy5sZW5ndGggPiAwLAorICAgICAgICBieUVs
ZW1lbnQgPSBlbGVtZW50TWF0Y2hlcnMubGVuZ3RoID4gMCwKKyAgICAgICAgc3VwZXJNYXRjaGVy
ID0gZnVuY3Rpb24oIHNlZWQsIGNvbnRleHQsIHhtbCwgcmVzdWx0cywgZXhwYW5kQ29udGV4dCAp
IHsKKyAgICAgICAgICAgIHZhciBlbGVtLCBqLCBtYXRjaGVyLAorICAgICAgICAgICAgICAgIHNl
dE1hdGNoZWQgPSBbXSwKKyAgICAgICAgICAgICAgICBtYXRjaGVkQ291bnQgPSAwLAorICAgICAg
ICAgICAgICAgIGkgPSAiMCIsCisgICAgICAgICAgICAgICAgdW5tYXRjaGVkID0gc2VlZCAmJiBb
XSwKKyAgICAgICAgICAgICAgICBvdXRlcm1vc3QgPSBleHBhbmRDb250ZXh0ICE9IG51bGwsCisg
ICAgICAgICAgICAgICAgY29udGV4dEJhY2t1cCA9IG91dGVybW9zdENvbnRleHQsCisgICAgICAg
ICAgICAgICAgLy8gV2UgbXVzdCBhbHdheXMgaGF2ZSBlaXRoZXIgc2VlZCBlbGVtZW50cyBvciBj
b250ZXh0CisgICAgICAgICAgICAgICAgZWxlbXMgPSBzZWVkIHx8IGJ5RWxlbWVudCAmJiBFeHBy
LmZpbmRbIlRBRyJdKCAiKiIsIGV4cGFuZENvbnRleHQgJiYgY29udGV4dC5wYXJlbnROb2RlIHx8
IGNvbnRleHQgKSwKKyAgICAgICAgICAgICAgICAvLyBOZXN0ZWQgbWF0Y2hlcnMgc2hvdWxkIHVz
ZSBub24taW50ZWdlciBkaXJydW5zCisgICAgICAgICAgICAgICAgZGlycnVuc1VuaXF1ZSA9IChk
aXJydW5zICs9IGNvbnRleHRCYWNrdXAgPT0gbnVsbCA/IDEgOiBNYXRoLkUpOworCisgICAgICAg
ICAgICBpZiAoIG91dGVybW9zdCApIHsKKyAgICAgICAgICAgICAgICBvdXRlcm1vc3RDb250ZXh0
ID0gY29udGV4dCAhPT0gZG9jdW1lbnQgJiYgY29udGV4dDsKKyAgICAgICAgICAgICAgICBjYWNo
ZWRydW5zID0gc3VwZXJNYXRjaGVyLmVsOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBBZGQgZWxlbWVudHMgcGFzc2luZyBlbGVtZW50TWF0Y2hlcnMgZGlyZWN0bHkgdG8gcmVzdWx0
cworICAgICAgICAgICAgZm9yICggOyAoZWxlbSA9IGVsZW1zW2ldKSAhPSBudWxsOyBpKysgKSB7
CisgICAgICAgICAgICAgICAgaWYgKCBieUVsZW1lbnQgJiYgZWxlbSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgZm9yICggaiA9IDA7IChtYXRjaGVyID0gZWxlbWVudE1hdGNoZXJzW2pdKTsgaisr
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0
LCB4bWwgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goIGVs
ZW0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBp
ZiAoIG91dGVybW9zdCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcnJ1bnMgPSBkaXJy
dW5zVW5pcXVlOworICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkcnVucyA9ICsrc3VwZXJN
YXRjaGVyLmVsOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgLy8gVHJhY2sgdW5tYXRjaGVkIGVsZW1lbnRzIGZvciBzZXQgZmlsdGVy
cworICAgICAgICAgICAgICAgIGlmICggYnlTZXQgKSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IFRoZXkgd2lsbCBoYXZlIGdvbmUgdGhyb3VnaCBhbGwgcG9zc2libGUgbWF0Y2hlcnMKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCAoZWxlbSA9ICFtYXRjaGVyICYmIGVsZW0pICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgbWF0Y2hlZENvdW50LS07CisgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICAvLyBMZW5ndGhlbiB0aGUgYXJyYXkgZm9yIGV2ZXJ5IGVs
ZW1lbnQsIG1hdGNoZWQgb3Igbm90CisgICAgICAgICAgICAgICAgICAgIGlmICggc2VlZCApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHVubWF0Y2hlZC5wdXNoKCBlbGVtICk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC8vIEFwcGx5IHNldCBmaWx0ZXJzIHRvIHVubWF0Y2hlZCBlbGVtZW50cworICAgICAg
ICAgICAgbWF0Y2hlZENvdW50ICs9IGk7CisgICAgICAgICAgICBpZiAoIGJ5U2V0ICYmIGkgIT09
IG1hdGNoZWRDb3VudCApIHsKKyAgICAgICAgICAgICAgICBmb3IgKCBqID0gMDsgKG1hdGNoZXIg
PSBzZXRNYXRjaGVyc1tqXSk7IGorKyApIHsKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcigg
dW5tYXRjaGVkLCBzZXRNYXRjaGVkLCBjb250ZXh0LCB4bWwgKTsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBpZiAoIHNlZWQgKSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IFJlaW50ZWdyYXRlIGVsZW1lbnQgbWF0Y2hlcyB0byBlbGltaW5hdGUgdGhlIG5lZWQgZm9yIHNv
cnRpbmcKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaGVkQ291bnQgPiAwICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCAhKHVubWF0Y2hlZFtpXSB8fCBzZXRNYXRjaGVkW2ldKSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0TWF0Y2hlZFtpXSA9IHBvcC5jYWxsKCByZXN1
bHRzICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8g
RGlzY2FyZCBpbmRleCBwbGFjZWhvbGRlciB2YWx1ZXMgdG8gZ2V0IG9ubHkgYWN0dWFsIG1hdGNo
ZXMKKyAgICAgICAgICAgICAgICAgICAgc2V0TWF0Y2hlZCA9IGNvbmRlbnNlKCBzZXRNYXRjaGVk
ICk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gQWRkIG1hdGNoZXMg
dG8gcmVzdWx0cworICAgICAgICAgICAgICAgIHB1c2guYXBwbHkoIHJlc3VsdHMsIHNldE1hdGNo
ZWQgKTsKKworICAgICAgICAgICAgICAgIC8vIFNlZWRsZXNzIHNldCBtYXRjaGVzIHN1Y2NlZWRp
bmcgbXVsdGlwbGUgc3VjY2Vzc2Z1bCBtYXRjaGVycyBzdGlwdWxhdGUgc29ydGluZworICAgICAg
ICAgICAgICAgIGlmICggb3V0ZXJtb3N0ICYmICFzZWVkICYmIHNldE1hdGNoZWQubGVuZ3RoID4g
MCAmJgorICAgICAgICAgICAgICAgICAgICAoIG1hdGNoZWRDb3VudCArIHNldE1hdGNoZXJzLmxl
bmd0aCApID4gMSApIHsKKworICAgICAgICAgICAgICAgICAgICBTaXp6bGUudW5pcXVlU29ydCgg
cmVzdWx0cyApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLy8gT3ZlcnJpZGUgbWFuaXB1bGF0aW9uIG9mIGdsb2JhbHMgYnkgbmVzdGVkIG1hdGNoZXJz
CisgICAgICAgICAgICBpZiAoIG91dGVybW9zdCApIHsKKyAgICAgICAgICAgICAgICBkaXJydW5z
ID0gZGlycnVuc1VuaXF1ZTsKKyAgICAgICAgICAgICAgICBvdXRlcm1vc3RDb250ZXh0ID0gY29u
dGV4dEJhY2t1cDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHVubWF0Y2hl
ZDsKKyAgICAgICAgfTsKKworICAgIHN1cGVyTWF0Y2hlci5lbCA9IDA7CisgICAgcmV0dXJuIGJ5
U2V0ID8KKyAgICAgICAgbWFya0Z1bmN0aW9uKCBzdXBlck1hdGNoZXIgKSA6CisgICAgICAgIHN1
cGVyTWF0Y2hlcjsKK30KKworY29tcGlsZSA9IFNpenpsZS5jb21waWxlID0gZnVuY3Rpb24oIHNl
bGVjdG9yLCBncm91cCAvKiBJbnRlcm5hbCBVc2UgT25seSAqLyApIHsKKyAgICB2YXIgaSwKKyAg
ICAgICAgc2V0TWF0Y2hlcnMgPSBbXSwKKyAgICAgICAgZWxlbWVudE1hdGNoZXJzID0gW10sCisg
ICAgICAgIGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGVbIGV4cGFuZG8gXVsgc2VsZWN0b3IgKyAiICIg
XTsKKworICAgIGlmICggIWNhY2hlZCApIHsKKyAgICAgICAgLy8gR2VuZXJhdGUgYSBmdW5jdGlv
biBvZiByZWN1cnNpdmUgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2hlY2sgZWFjaCBl
bGVtZW50CisgICAgICAgIGlmICggIWdyb3VwICkgeworICAgICAgICAgICAgZ3JvdXAgPSB0b2tl
bml6ZSggc2VsZWN0b3IgKTsKKyAgICAgICAgfQorICAgICAgICBpID0gZ3JvdXAubGVuZ3RoOwor
ICAgICAgICB3aGlsZSAoIGktLSApIHsKKyAgICAgICAgICAgIGNhY2hlZCA9IG1hdGNoZXJGcm9t
VG9rZW5zKCBncm91cFtpXSApOworICAgICAgICAgICAgaWYgKCBjYWNoZWRbIGV4cGFuZG8gXSAp
IHsKKyAgICAgICAgICAgICAgICBzZXRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZWxlbWVudE1hdGNoZXJzLnB1c2goIGNhY2hl
ZCApOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQ2FjaGUgdGhlIGNv
bXBpbGVkIGZ1bmN0aW9uCisgICAgICAgIGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGUoIHNlbGVjdG9y
LCBtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMoIGVsZW1lbnRNYXRjaGVycywgc2V0TWF0Y2hlcnMg
KSApOworICAgIH0KKyAgICByZXR1cm4gY2FjaGVkOworfTsKKworZnVuY3Rpb24gbXVsdGlwbGVD
b250ZXh0cyggc2VsZWN0b3IsIGNvbnRleHRzLCByZXN1bHRzICkgeworICAgIHZhciBpID0gMCwK
KyAgICAgICAgbGVuID0gY29udGV4dHMubGVuZ3RoOworICAgIGZvciAoIDsgaSA8IGxlbjsgaSsr
ICkgeworICAgICAgICBTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0c1tpXSwgcmVzdWx0cyApOwor
ICAgIH0KKyAgICByZXR1cm4gcmVzdWx0czsKK30KKworZnVuY3Rpb24gc2VsZWN0KCBzZWxlY3Rv
ciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCwgeG1sICkgeworICAgIHZhciBpLCB0b2tlbnMsIHRv
a2VuLCB0eXBlLCBmaW5kLAorICAgICAgICBtYXRjaCA9IHRva2VuaXplKCBzZWxlY3RvciApLAor
ICAgICAgICBqID0gbWF0Y2gubGVuZ3RoOworCisgICAgaWYgKCAhc2VlZCApIHsKKyAgICAgICAg
Ly8gVHJ5IHRvIG1pbmltaXplIG9wZXJhdGlvbnMgaWYgdGhlcmUgaXMgb25seSBvbmUgZ3JvdXAK
KyAgICAgICAgaWYgKCBtYXRjaC5sZW5ndGggPT09IDEgKSB7CisKKyAgICAgICAgICAgIC8vIFRh
a2UgYSBzaG9ydGN1dCBhbmQgc2V0IHRoZSBjb250ZXh0IGlmIHRoZSByb290IHNlbGVjdG9yIGlz
IGFuIElECisgICAgICAgICAgICB0b2tlbnMgPSBtYXRjaFswXSA9IG1hdGNoWzBdLnNsaWNlKCAw
ICk7CisgICAgICAgICAgICBpZiAoIHRva2Vucy5sZW5ndGggPiAyICYmICh0b2tlbiA9IHRva2Vu
c1swXSkudHlwZSA9PT0gIklEIiAmJgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm5vZGVU
eXBlID09PSA5ICYmICF4bWwgJiYKKyAgICAgICAgICAgICAgICAgICAgRXhwci5yZWxhdGl2ZVsg
dG9rZW5zWzFdLnR5cGUgXSApIHsKKworICAgICAgICAgICAgICAgIGNvbnRleHQgPSBFeHByLmZp
bmRbIklEIl0oIHRva2VuLm1hdGNoZXNbMF0ucmVwbGFjZSggcmJhY2tzbGFzaCwgIiIgKSwgY29u
dGV4dCwgeG1sIClbMF07CisgICAgICAgICAgICAgICAgaWYgKCAhY29udGV4dCApIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3Rvci5zbGljZSggdG9rZW5zLnNoaWZ0KCkubGVu
Z3RoICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZldGNoIGEgc2VlZCBzZXQg
Zm9yIHJpZ2h0LXRvLWxlZnQgbWF0Y2hpbmcKKyAgICAgICAgICAgIGZvciAoIGkgPSBtYXRjaEV4
cHJbIlBPUyJdLnRlc3QoIHNlbGVjdG9yICkgPyAtMSA6IHRva2Vucy5sZW5ndGggLSAxOyBpID49
IDA7IGktLSApIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1tpXTsKKworICAgICAg
ICAgICAgICAgIC8vIEFib3J0IGlmIHdlIGhpdCBhIGNvbWJpbmF0b3IKKyAgICAgICAgICAgICAg
ICBpZiAoIEV4cHIucmVsYXRpdmVbICh0eXBlID0gdG9rZW4udHlwZSkgXSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm
ICggKGZpbmQgPSBFeHByLmZpbmRbIHR5cGUgXSkgKSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IFNlYXJjaCwgZXhwYW5kaW5nIGNvbnRleHQgZm9yIGxlYWRpbmcgc2libGluZyBjb21iaW5hdG9y
cworICAgICAgICAgICAgICAgICAgICBpZiAoIChzZWVkID0gZmluZCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRva2VuLm1hdGNoZXNbMF0ucmVwbGFjZSggcmJhY2tzbGFzaCwgIiIgKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJzaWJsaW5nLnRlc3QoIHRva2Vuc1swXS50eXBlICkgJiYg
Y29udGV4dC5wYXJlbnROb2RlIHx8IGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICB4
bWwKKyAgICAgICAgICAgICAgICAgICAgKSkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIElmIHNlZWQgaXMgZW1wdHkgb3Igbm8gdG9rZW5zIHJlbWFpbiwgd2UgY2FuIHJldHVybiBl
YXJseQorICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnNwbGljZSggaSwgMSApOworICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWVkLmxlbmd0aCAmJiB0b2tlbnMuam9p
bigiIik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFzZWxlY3RvciApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwdXNoLmFwcGx5KCByZXN1bHRzLCBzbGljZS5jYWxsKCBz
ZWVkLCAwICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDb21waWxlIGFuZCBleGVjdXRlIGEgZmls
dGVyaW5nIGZ1bmN0aW9uCisgICAgLy8gUHJvdmlkZSBgbWF0Y2hgIHRvIGF2b2lkIHJldG9rZW5p
emF0aW9uIGlmIHdlIG1vZGlmaWVkIHRoZSBzZWxlY3RvciBhYm92ZQorICAgIGNvbXBpbGUoIHNl
bGVjdG9yLCBtYXRjaCApKAorICAgICAgICBzZWVkLAorICAgICAgICBjb250ZXh0LAorICAgICAg
ICB4bWwsCisgICAgICAgIHJlc3VsdHMsCisgICAgICAgIHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9y
ICkKKyAgICApOworICAgIHJldHVybiByZXN1bHRzOworfQorCitpZiAoIGRvY3VtZW50LnF1ZXJ5
U2VsZWN0b3JBbGwgKSB7CisgICAgKGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgZGlzY29ubmVj
dGVkTWF0Y2gsCisgICAgICAgICAgICBvbGRTZWxlY3QgPSBzZWxlY3QsCisgICAgICAgICAgICBy
ZXNjYXBlID0gLyd8XFwvZywKKyAgICAgICAgICAgIHJhdHRyaWJ1dGVRdW90ZXMgPSAvXD1bXHgy
MFx0XHJcblxmXSooW14nIlxdXSopW1x4MjBcdFxyXG5cZl0qXF0vZywKKworICAgICAgICAgICAg
Ly8gcVNhKDpmb2N1cykgcmVwb3J0cyBmYWxzZSB3aGVuIHRydWUgKENocm9tZSAyMSksIG5vIG5l
ZWQgdG8gYWxzbyBhZGQgdG8gYnVnZ3lNYXRjaGVzIHNpbmNlIG1hdGNoZXMgY2hlY2tzIGJ1Z2d5
UVNBCisgICAgICAgICAgICAvLyBBIHN1cHBvcnQgdGVzdCB3b3VsZCByZXF1aXJlIHRvbyBtdWNo
IGNvZGUgKHdvdWxkIGluY2x1ZGUgZG9jdW1lbnQgcmVhZHkpCisgICAgICAgICAgICByYnVnZ3lR
U0EgPSBbICI6Zm9jdXMiIF0sCisKKyAgICAgICAgICAgIC8vIG1hdGNoZXNTZWxlY3Rvcig6YWN0
aXZlKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoSUU5L09wZXJhIDExLjUpCisgICAgICAgICAg
ICAvLyBBIHN1cHBvcnQgdGVzdCB3b3VsZCByZXF1aXJlIHRvbyBtdWNoIGNvZGUgKHdvdWxkIGlu
Y2x1ZGUgZG9jdW1lbnQgcmVhZHkpCisgICAgICAgICAgICAvLyBqdXN0IHNraXAgbWF0Y2hlc1Nl
bGVjdG9yIGZvciA6YWN0aXZlCisgICAgICAgICAgICByYnVnZ3lNYXRjaGVzID0gWyAiOmFjdGl2
ZSIgXSwKKyAgICAgICAgICAgIG1hdGNoZXMgPSBkb2NFbGVtLm1hdGNoZXNTZWxlY3RvciB8fAor
ICAgICAgICAgICAgICAgIGRvY0VsZW0ubW96TWF0Y2hlc1NlbGVjdG9yIHx8CisgICAgICAgICAg
ICAgICAgZG9jRWxlbS53ZWJraXRNYXRjaGVzU2VsZWN0b3IgfHwKKyAgICAgICAgICAgICAgICBk
b2NFbGVtLm9NYXRjaGVzU2VsZWN0b3IgfHwKKyAgICAgICAgICAgICAgICBkb2NFbGVtLm1zTWF0
Y2hlc1NlbGVjdG9yOworCisgICAgICAgIC8vIEJ1aWxkIFFTQSByZWdleAorICAgICAgICAvLyBS
ZWdleCBzdHJhdGVneSBhZG9wdGVkIGZyb20gRGllZ28gUGVyaW5pCisgICAgICAgIGFzc2VydChm
dW5jdGlvbiggZGl2ICkgeworICAgICAgICAgICAgLy8gU2VsZWN0IGlzIHNldCB0byBlbXB0eSBz
dHJpbmcgb24gcHVycG9zZQorICAgICAgICAgICAgLy8gVGhpcyBpcyB0byB0ZXN0IElFJ3MgdHJl
YXRtZW50IG9mIG5vdCBleHBsaWN0bHkKKyAgICAgICAgICAgIC8vIHNldHRpbmcgYSBib29sZWFu
IGNvbnRlbnQgYXR0cmlidXRlLAorICAgICAgICAgICAgLy8gc2luY2UgaXRzIHByZXNlbmNlIHNo
b3VsZCBiZSBlbm91Z2gKKyAgICAgICAgICAgIC8vIGh0dHA6Ly9idWdzLmpxdWVyeS5jb20vdGlj
a2V0LzEyMzU5CisgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0gIjxzZWxlY3Q+PG9wdGlvbiBz
ZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iOworCisgICAgICAgICAgICAvLyBJRTggLSBT
b21lIGJvb2xlYW4gYXR0cmlidXRlcyBhcmUgbm90IHRyZWF0ZWQgY29ycmVjdGx5CisgICAgICAg
ICAgICBpZiAoICFkaXYucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aCApIHsK
KyAgICAgICAgICAgICAgICByYnVnZ3lRU0EucHVzaCggIlxcWyIgKyB3aGl0ZXNwYWNlICsgIioo
PzpjaGVja2VkfGRpc2FibGVkfGlzbWFwfG11bHRpcGxlfHJlYWRvbmx5fHNlbGVjdGVkfHZhbHVl
KSIgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gV2Via2l0L09wZXJhIC0gOmNo
ZWNrZWQgc2hvdWxkIHJldHVybiBzZWxlY3RlZCBvcHRpb24gZWxlbWVudHMKKyAgICAgICAgICAg
IC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5
LyNjaGVja2VkCisgICAgICAgICAgICAvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgKGRvIG5vdCBw
dXQgdGVzdHMgYWZ0ZXIgdGhpcyBvbmUpCisgICAgICAgICAgICBpZiAoICFkaXYucXVlcnlTZWxl
Y3RvckFsbCgiOmNoZWNrZWQiKS5sZW5ndGggKSB7CisgICAgICAgICAgICAgICAgcmJ1Z2d5UVNB
LnB1c2goIjpjaGVja2VkIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAg
IGFzc2VydChmdW5jdGlvbiggZGl2ICkgeworCisgICAgICAgICAgICAvLyBPcGVyYSAxMC0xMi9J
RTkgLSBePSAkPSAqPSBhbmQgZW1wdHkgdmFsdWVzCisgICAgICAgICAgICAvLyBTaG91bGQgbm90
IHNlbGVjdCBhbnl0aGluZworICAgICAgICAgICAgZGl2LmlubmVySFRNTCA9ICI8cCB0ZXN0PScn
PjwvcD4iOworICAgICAgICAgICAgaWYgKCBkaXYucXVlcnlTZWxlY3RvckFsbCgiW3Rlc3RePScn
XSIpLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICByYnVnZ3lRU0EucHVzaCggIlsqXiRdPSIg
KyB3aGl0ZXNwYWNlICsgIiooPzpcIlwifCcnKSIgKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgLy8gRkYgMy41IC0gOmVuYWJsZWQvOmRpc2FibGVkIGFuZCBoaWRkZW4gZWxlbWVudHMg
KGhpZGRlbiBlbGVtZW50cyBhcmUgc3RpbGwgZW5hYmxlZCkKKyAgICAgICAgICAgIC8vIElFOCB0
aHJvd3MgZXJyb3IgaGVyZSAoZG8gbm90IHB1dCB0ZXN0cyBhZnRlciB0aGlzIG9uZSkKKyAgICAg
ICAgICAgIGRpdi5pbm5lckhUTUwgPSAiPGlucHV0IHR5cGU9J2hpZGRlbicvPiI7CisgICAgICAg
ICAgICBpZiAoICFkaXYucXVlcnlTZWxlY3RvckFsbCgiOmVuYWJsZWQiKS5sZW5ndGggKSB7Cisg
ICAgICAgICAgICAgICAgcmJ1Z2d5UVNBLnB1c2goIjplbmFibGVkIiwgIjpkaXNhYmxlZCIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICAvLyByYnVnZ3lRU0EgYWx3YXlz
IGNvbnRhaW5zIDpmb2N1cywgc28gbm8gbmVlZCBmb3IgYSBsZW5ndGggY2hlY2sKKyAgICAgICAg
cmJ1Z2d5UVNBID0gLyogcmJ1Z2d5UVNBLmxlbmd0aCAmJiAqLyBuZXcgUmVnRXhwKCByYnVnZ3lR
U0Euam9pbigifCIpICk7CisKKyAgICAgICAgc2VsZWN0ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBj
b250ZXh0LCByZXN1bHRzLCBzZWVkLCB4bWwgKSB7CisgICAgICAgICAgICAvLyBPbmx5IHVzZSBx
dWVyeVNlbGVjdG9yQWxsIHdoZW4gbm90IGZpbHRlcmluZywKKyAgICAgICAgICAgIC8vIHdoZW4g
dGhpcyBpcyBub3QgeG1sLAorICAgICAgICAgICAgLy8gYW5kIHdoZW4gbm8gUVNBIGJ1Z3MgYXBw
bHkKKyAgICAgICAgICAgIGlmICggIXNlZWQgJiYgIXhtbCAmJiAhcmJ1Z2d5UVNBLnRlc3QoIHNl
bGVjdG9yICkgKSB7CisgICAgICAgICAgICAgICAgdmFyIGdyb3VwcywgaSwKKyAgICAgICAgICAg
ICAgICAgICAgb2xkID0gdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgbmlkID0gZXhwYW5kbywK
KyAgICAgICAgICAgICAgICAgICAgbmV3Q29udGV4dCA9IGNvbnRleHQsCisgICAgICAgICAgICAg
ICAgICAgIG5ld1NlbGVjdG9yID0gY29udGV4dC5ub2RlVHlwZSA9PT0gOSAmJiBzZWxlY3RvcjsK
KworICAgICAgICAgICAgICAgIC8vIHFTQSB3b3JrcyBzdHJhbmdlbHkgb24gRWxlbWVudC1yb290
ZWQgcXVlcmllcworICAgICAgICAgICAgICAgIC8vIFdlIGNhbiB3b3JrIGFyb3VuZCB0aGlzIGJ5
IHNwZWNpZnlpbmcgYW4gZXh0cmEgSUQgb24gdGhlIHJvb3QKKyAgICAgICAgICAgICAgICAvLyBh
bmQgd29ya2luZyB1cCBmcm9tIHRoZXJlIChUaGFua3MgdG8gQW5kcmV3IER1cG9udCBmb3IgdGhl
IHRlY2huaXF1ZSkKKyAgICAgICAgICAgICAgICAvLyBJRSA4IGRvZXNuJ3Qgd29yayBvbiBvYmpl
Y3QgZWxlbWVudHMKKyAgICAgICAgICAgICAgICBpZiAoIGNvbnRleHQubm9kZVR5cGUgPT09IDEg
JiYgY29udGV4dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAib2JqZWN0IiApIHsKKyAgICAg
ICAgICAgICAgICAgICAgZ3JvdXBzID0gdG9rZW5pemUoIHNlbGVjdG9yICk7CisKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCAob2xkID0gY29udGV4dC5nZXRBdHRyaWJ1dGUoImlkIikpICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgbmlkID0gb2xkLnJlcGxhY2UoIHJlc2NhcGUsICJcXCQm
IiApOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC5zZXRBdHRyaWJ1dGUoICJpZCIsIG5pZCApOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIG5pZCA9ICJbaWQ9JyIgKyBuaWQgKyAiJ10gIjsKKwor
ICAgICAgICAgICAgICAgICAgICBpID0gZ3JvdXBzLmxlbmd0aDsKKyAgICAgICAgICAgICAgICAg
ICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBncm91cHNbaV0gPSBu
aWQgKyBncm91cHNbaV0uam9pbigiIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgbmV3Q29udGV4dCA9IHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkgJiYgY29u
dGV4dC5wYXJlbnROb2RlIHx8IGNvbnRleHQ7CisgICAgICAgICAgICAgICAgICAgIG5ld1NlbGVj
dG9yID0gZ3JvdXBzLmpvaW4oIiwiKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBpZiAoIG5ld1NlbGVjdG9yICkgeworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgcHVzaC5hcHBseSggcmVzdWx0cywgc2xpY2UuY2FsbCggbmV3
Q29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5l
d1NlbGVjdG9yCisgICAgICAgICAgICAgICAgICAgICAgICApLCAwICkgKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOworICAgICAgICAgICAgICAgICAgICB9IGNhdGNo
KHFzYUVycm9yKSB7CisgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoICFvbGQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC5yZW1vdmVBdHRyaWJ1dGUoImlkIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHJldHVybiBvbGRTZWxlY3QoIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1
bHRzLCBzZWVkLCB4bWwgKTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoIG1hdGNoZXMgKSB7
CisgICAgICAgICAgICBhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsKKyAgICAgICAgICAgICAgICAv
LyBDaGVjayB0byBzZWUgaWYgaXQncyBwb3NzaWJsZSB0byBkbyBtYXRjaGVzU2VsZWN0b3IKKyAg
ICAgICAgICAgICAgICAvLyBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlIChJRSA5KQorICAgICAgICAg
ICAgICAgIGRpc2Nvbm5lY3RlZE1hdGNoID0gbWF0Y2hlcy5jYWxsKCBkaXYsICJkaXYiICk7CisK
KyAgICAgICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBmYWlsIHdpdGggYW4gZXhjZXB0aW9uCisg
ICAgICAgICAgICAgICAgLy8gR2Vja28gZG9lcyBub3QgZXJyb3IsIHJldHVybnMgZmFsc2UgaW5z
dGVhZAorICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMu
Y2FsbCggZGl2LCAiW3Rlc3QhPScnXTpzaXp6bGUiICk7CisgICAgICAgICAgICAgICAgICAgIHJi
dWdneU1hdGNoZXMucHVzaCggIiE9IiwgcHNldWRvcyApOworICAgICAgICAgICAgICAgIH0gY2F0
Y2ggKCBlICkge30KKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAvLyByYnVnZ3lNYXRj
aGVzIGFsd2F5cyBjb250YWlucyA6YWN0aXZlIGFuZCA6Zm9jdXMsIHNvIG5vIG5lZWQgZm9yIGEg
bGVuZ3RoIGNoZWNrCisgICAgICAgICAgICByYnVnZ3lNYXRjaGVzID0gLyogcmJ1Z2d5TWF0Y2hl
cy5sZW5ndGggJiYgKi8gbmV3IFJlZ0V4cCggcmJ1Z2d5TWF0Y2hlcy5qb2luKCJ8IikgKTsKKwor
ICAgICAgICAgICAgU2l6emxlLm1hdGNoZXNTZWxlY3RvciA9IGZ1bmN0aW9uKCBlbGVtLCBleHBy
ICkgeworICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGF0dHJpYnV0ZSBzZWxlY3Rv
cnMgYXJlIHF1b3RlZAorICAgICAgICAgICAgICAgIGV4cHIgPSBleHByLnJlcGxhY2UoIHJhdHRy
aWJ1dGVRdW90ZXMsICI9JyQxJ10iICk7CisKKyAgICAgICAgICAgICAgICAvLyByYnVnZ3lNYXRj
aGVzIGFsd2F5cyBjb250YWlucyA6YWN0aXZlLCBzbyBubyBuZWVkIGZvciBhbiBleGlzdGVuY2Ug
Y2hlY2sKKyAgICAgICAgICAgICAgICBpZiAoICFpc1hNTCggZWxlbSApICYmICFyYnVnZ3lNYXRj
aGVzLnRlc3QoIGV4cHIgKSAmJiAhcmJ1Z2d5UVNBLnRlc3QoIGV4cHIgKSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXQgPSBtYXRj
aGVzLmNhbGwoIGVsZW0sIGV4cHIgKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSUUg
OSdzIG1hdGNoZXNTZWxlY3RvciByZXR1cm5zIGZhbHNlIG9uIGRpc2Nvbm5lY3RlZCBub2Rlcwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXQgfHwgZGlzY29ubmVjdGVkTWF0Y2ggfHwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXMgd2VsbCwgZGlzY29ubmVjdGVk
IG5vZGVzIGFyZSBzYWlkIHRvIGJlIGluIGEgZG9jdW1lbnQKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gZnJhZ21lbnQgaW4gSUUgOQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbGVtLmRvY3VtZW50ICYmIGVsZW0uZG9jdW1lbnQubm9kZVR5cGUgIT09IDExICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkge30KKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gU2l6emxlKCBleHByLCBudWxsLCBu
dWxsLCBbIGVsZW0gXSApLmxlbmd0aCA+IDA7CisgICAgICAgICAgICB9OworICAgICAgICB9Cisg
ICAgfSkoKTsKK30KKworLy8gRGVwcmVjYXRlZAorRXhwci5wc2V1ZG9zWyJudGgiXSA9IEV4cHIu
cHNldWRvc1siZXEiXTsKKworLy8gQmFjay1jb21wYXQKK2Z1bmN0aW9uIHNldEZpbHRlcnMoKSB7
fQorRXhwci5maWx0ZXJzID0gc2V0RmlsdGVycy5wcm90b3R5cGUgPSBFeHByLnBzZXVkb3M7CitF
eHByLnNldEZpbHRlcnMgPSBuZXcgc2V0RmlsdGVycygpOworCisvLyBPdmVycmlkZSBzaXp6bGUg
YXR0cmlidXRlIHJldHJpZXZhbAorU2l6emxlLmF0dHIgPSBqUXVlcnkuYXR0cjsKK2pRdWVyeS5m
aW5kID0gU2l6emxlOworalF1ZXJ5LmV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzOworalF1ZXJ5LmV4
cHJbIjoiXSA9IGpRdWVyeS5leHByLnBzZXVkb3M7CitqUXVlcnkudW5pcXVlID0gU2l6emxlLnVu
aXF1ZVNvcnQ7CitqUXVlcnkudGV4dCA9IFNpenpsZS5nZXRUZXh0OworalF1ZXJ5LmlzWE1MRG9j
ID0gU2l6emxlLmlzWE1MOworalF1ZXJ5LmNvbnRhaW5zID0gU2l6emxlLmNvbnRhaW5zOworCisK
K30pKCB3aW5kb3cgKTsKK3ZhciBydW50aWwgPSAvVW50aWwkLywKKyAgICBycGFyZW50c3ByZXYg
PSAvXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLywKKyAgICBpc1NpbXBsZSA9IC9eLlte
OiNcW1wuLF0qJC8sCisgICAgcm5lZWRzQ29udGV4dCA9IGpRdWVyeS5leHByLm1hdGNoLm5lZWRz
Q29udGV4dCwKKyAgICAvLyBtZXRob2RzIGd1YXJhbnRlZWQgdG8gcHJvZHVjZSBhIHVuaXF1ZSBz
ZXQgd2hlbiBzdGFydGluZyBmcm9tIGEgdW5pcXVlIHNldAorICAgIGd1YXJhbnRlZWRVbmlxdWUg
PSB7CisgICAgICAgIGNoaWxkcmVuOiB0cnVlLAorICAgICAgICBjb250ZW50czogdHJ1ZSwKKyAg
ICAgICAgbmV4dDogdHJ1ZSwKKyAgICAgICAgcHJldjogdHJ1ZQorICAgIH07CisKK2pRdWVyeS5m
bi5leHRlbmQoeworICAgIGZpbmQ6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKKyAgICAgICAgdmFy
IGksIGwsIGxlbmd0aCwgbiwgciwgcmV0LAorICAgICAgICAgICAgc2VsZiA9IHRoaXM7CisKKyAg
ICAgICAgaWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09ICJzdHJpbmciICkgeworICAgICAgICAgICAg
cmV0dXJuIGpRdWVyeSggc2VsZWN0b3IgKS5maWx0ZXIoZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICAgICAgZm9yICggaSA9IDAsIGwgPSBzZWxmLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuY29udGFpbnMoIHNlbGZbIGkgXSwgdGhpcyApICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldCA9IHRoaXMucHVzaFN0YWNrKCAiIiwgImZpbmQiLCBzZWxlY3RvciApOworCisg
ICAgICAgIGZvciAoIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CisgICAg
ICAgICAgICBsZW5ndGggPSByZXQubGVuZ3RoOworICAgICAgICAgICAgalF1ZXJ5LmZpbmQoIHNl
bGVjdG9yLCB0aGlzW2ldLCByZXQgKTsKKworICAgICAgICAgICAgaWYgKCBpID4gMCApIHsKKyAg
ICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgcmVzdWx0cyBhcmUgdW5pcXVlCisg
ICAgICAgICAgICAgICAgZm9yICggbiA9IGxlbmd0aDsgbiA8IHJldC5sZW5ndGg7IG4rKyApIHsK
KyAgICAgICAgICAgICAgICAgICAgZm9yICggciA9IDA7IHIgPCBsZW5ndGg7IHIrKyApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggcmV0W3JdID09PSByZXRbbl0gKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0LnNwbGljZShuLS0sIDEpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9LAorCisgICAgaGFzOiBmdW5jdGlvbiggdGFy
Z2V0ICkgeworICAgICAgICB2YXIgaSwKKyAgICAgICAgICAgIHRhcmdldHMgPSBqUXVlcnkoIHRh
cmdldCwgdGhpcyApLAorICAgICAgICAgICAgbGVuID0gdGFyZ2V0cy5sZW5ndGg7CisKKyAgICAg
ICAgcmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZm9yICggaSA9
IDA7IGkgPCBsZW47IGkrKyApIHsKKyAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5jb250YWlu
cyggdGhpcywgdGFyZ2V0c1tpXSApICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0s
CisKKyAgICBub3Q6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
cHVzaFN0YWNrKCB3aW5ub3codGhpcywgc2VsZWN0b3IsIGZhbHNlKSwgIm5vdCIsIHNlbGVjdG9y
KTsKKyAgICB9LAorCisgICAgZmlsdGVyOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisgICAgICAg
IHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KHRoaXMsIHNlbGVjdG9yLCB0cnVlKSwgImZp
bHRlciIsIHNlbGVjdG9yICk7CisgICAgfSwKKworICAgIGlzOiBmdW5jdGlvbiggc2VsZWN0b3Ig
KSB7CisgICAgICAgIHJldHVybiAhIXNlbGVjdG9yICYmICgKKyAgICAgICAgICAgIHR5cGVvZiBz
ZWxlY3RvciA9PT0gInN0cmluZyIgPworICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBw
b3NpdGlvbmFsL3JlbGF0aXZlIHNlbGVjdG9yLCBjaGVjayBtZW1iZXJzaGlwIGluIHRoZSByZXR1
cm5lZCBzZXQKKyAgICAgICAgICAgICAgICAvLyBzbyAkKCJwOmZpcnN0IikuaXMoInA6bGFzdCIp
IHdvbid0IHJldHVybiB0cnVlIGZvciBhIGRvYyB3aXRoIHR3byAicCIuCisgICAgICAgICAgICAg
ICAgcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApID8KKyAgICAgICAgICAgICAgICAgICAg
alF1ZXJ5KCBzZWxlY3RvciwgdGhpcy5jb250ZXh0ICkuaW5kZXgoIHRoaXNbMF0gKSA+PSAwIDoK
KyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIHRoaXMgKS5sZW5n
dGggPiAwIDoKKyAgICAgICAgICAgICAgICB0aGlzLmZpbHRlciggc2VsZWN0b3IgKS5sZW5ndGgg
PiAwICk7CisgICAgfSwKKworICAgIGNsb3Nlc3Q6IGZ1bmN0aW9uKCBzZWxlY3RvcnMsIGNvbnRl
eHQgKSB7CisgICAgICAgIHZhciBjdXIsCisgICAgICAgICAgICBpID0gMCwKKyAgICAgICAgICAg
IGwgPSB0aGlzLmxlbmd0aCwKKyAgICAgICAgICAgIHJldCA9IFtdLAorICAgICAgICAgICAgcG9z
ID0gcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvcnMgKSB8fCB0eXBlb2Ygc2VsZWN0b3JzICE9
PSAic3RyaW5nIiA/CisgICAgICAgICAgICAgICAgalF1ZXJ5KCBzZWxlY3RvcnMsIGNvbnRleHQg
fHwgdGhpcy5jb250ZXh0ICkgOgorICAgICAgICAgICAgICAgIDA7CisKKyAgICAgICAgZm9yICgg
OyBpIDwgbDsgaSsrICkgeworICAgICAgICAgICAgY3VyID0gdGhpc1tpXTsKKworICAgICAgICAg
ICAgd2hpbGUgKCBjdXIgJiYgY3VyLm93bmVyRG9jdW1lbnQgJiYgY3VyICE9PSBjb250ZXh0ICYm
IGN1ci5ub2RlVHlwZSAhPT0gMTEgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBwb3MgPyBwb3Mu
aW5kZXgoY3VyKSA+IC0xIDogalF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKGN1ciwgc2VsZWN0
b3JzKSApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goIGN1ciApOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY3Vy
ID0gY3VyLnBhcmVudE5vZGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBy
ZXQgPSByZXQubGVuZ3RoID4gMSA/IGpRdWVyeS51bmlxdWUoIHJldCApIDogcmV0OworCisgICAg
ICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggcmV0LCAiY2xvc2VzdCIsIHNlbGVjdG9ycyApOwor
ICAgIH0sCisKKyAgICAvLyBEZXRlcm1pbmUgdGhlIHBvc2l0aW9uIG9mIGFuIGVsZW1lbnQgd2l0
aGluCisgICAgLy8gdGhlIG1hdGNoZWQgc2V0IG9mIGVsZW1lbnRzCisgICAgaW5kZXg6IGZ1bmN0
aW9uKCBlbGVtICkgeworCisgICAgICAgIC8vIE5vIGFyZ3VtZW50LCByZXR1cm4gaW5kZXggaW4g
cGFyZW50CisgICAgICAgIGlmICggIWVsZW0gKSB7CisgICAgICAgICAgICByZXR1cm4gKCB0aGlz
WzBdICYmIHRoaXNbMF0ucGFyZW50Tm9kZSApID8gdGhpcy5wcmV2QWxsKCkubGVuZ3RoIDogLTE7
CisgICAgICAgIH0KKworICAgICAgICAvLyBpbmRleCBpbiBzZWxlY3RvcgorICAgICAgICBpZiAo
IHR5cGVvZiBlbGVtID09PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgIHJldHVybiBqUXVlcnku
aW5BcnJheSggdGhpc1swXSwgalF1ZXJ5KCBlbGVtICkgKTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIExvY2F0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGRlc2lyZWQgZWxlbWVudAorICAgICAgICBy
ZXR1cm4galF1ZXJ5LmluQXJyYXkoCisgICAgICAgICAgICAvLyBJZiBpdCByZWNlaXZlcyBhIGpR
dWVyeSBvYmplY3QsIHRoZSBmaXJzdCBlbGVtZW50IGlzIHVzZWQKKyAgICAgICAgICAgIGVsZW0u
anF1ZXJ5ID8gZWxlbVswXSA6IGVsZW0sIHRoaXMgKTsKKyAgICB9LAorCisgICAgYWRkOiBmdW5j
dGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7CisgICAgICAgIHZhciBzZXQgPSB0eXBlb2Ygc2Vs
ZWN0b3IgPT09ICJzdHJpbmciID8KKyAgICAgICAgICAgICAgICBqUXVlcnkoIHNlbGVjdG9yLCBj
b250ZXh0ICkgOgorICAgICAgICAgICAgICAgIGpRdWVyeS5tYWtlQXJyYXkoIHNlbGVjdG9yICYm
IHNlbGVjdG9yLm5vZGVUeXBlID8gWyBzZWxlY3RvciBdIDogc2VsZWN0b3IgKSwKKyAgICAgICAg
ICAgIGFsbCA9IGpRdWVyeS5tZXJnZSggdGhpcy5nZXQoKSwgc2V0ICk7CisKKyAgICAgICAgcmV0
dXJuIHRoaXMucHVzaFN0YWNrKCBpc0Rpc2Nvbm5lY3RlZCggc2V0WzBdICkgfHwgaXNEaXNjb25u
ZWN0ZWQoIGFsbFswXSApID8KKyAgICAgICAgICAgIGFsbCA6CisgICAgICAgICAgICBqUXVlcnku
dW5pcXVlKCBhbGwgKSApOworICAgIH0sCisKKyAgICBhZGRCYWNrOiBmdW5jdGlvbiggc2VsZWN0
b3IgKSB7CisgICAgICAgIHJldHVybiB0aGlzLmFkZCggc2VsZWN0b3IgPT0gbnVsbCA/CisgICAg
ICAgICAgICB0aGlzLnByZXZPYmplY3QgOiB0aGlzLnByZXZPYmplY3QuZmlsdGVyKHNlbGVjdG9y
KQorICAgICAgICApOworICAgIH0KK30pOworCitqUXVlcnkuZm4uYW5kU2VsZiA9IGpRdWVyeS5m
bi5hZGRCYWNrOworCisvLyBBIHBhaW5mdWxseSBzaW1wbGUgY2hlY2sgdG8gc2VlIGlmIGFuIGVs
ZW1lbnQgaXMgZGlzY29ubmVjdGVkCisvLyBmcm9tIGEgZG9jdW1lbnQgKHNob3VsZCBiZSBpbXBy
b3ZlZCwgd2hlcmUgZmVhc2libGUpLgorZnVuY3Rpb24gaXNEaXNjb25uZWN0ZWQoIG5vZGUgKSB7
CisgICAgcmV0dXJuICFub2RlIHx8ICFub2RlLnBhcmVudE5vZGUgfHwgbm9kZS5wYXJlbnROb2Rl
Lm5vZGVUeXBlID09PSAxMTsKK30KKworZnVuY3Rpb24gc2libGluZyggY3VyLCBkaXIgKSB7Cisg
ICAgZG8geworICAgICAgICBjdXIgPSBjdXJbIGRpciBdOworICAgIH0gd2hpbGUgKCBjdXIgJiYg
Y3VyLm5vZGVUeXBlICE9PSAxICk7CisKKyAgICByZXR1cm4gY3VyOworfQorCitqUXVlcnkuZWFj
aCh7CisgICAgcGFyZW50OiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgdmFyIHBhcmVudCA9
IGVsZW0ucGFyZW50Tm9kZTsKKyAgICAgICAgcmV0dXJuIHBhcmVudCAmJiBwYXJlbnQubm9kZVR5
cGUgIT09IDExID8gcGFyZW50IDogbnVsbDsKKyAgICB9LAorICAgIHBhcmVudHM6IGZ1bmN0aW9u
KCBlbGVtICkgeworICAgICAgICByZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgInBhcmVudE5vZGUi
ICk7CisgICAgfSwKKyAgICBwYXJlbnRzVW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCAp
IHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sICJwYXJlbnROb2RlIiwgdW50aWwg
KTsKKyAgICB9LAorICAgIG5leHQ6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICByZXR1cm4g
c2libGluZyggZWxlbSwgIm5leHRTaWJsaW5nIiApOworICAgIH0sCisgICAgcHJldjogZnVuY3Rp
b24oIGVsZW0gKSB7CisgICAgICAgIHJldHVybiBzaWJsaW5nKCBlbGVtLCAicHJldmlvdXNTaWJs
aW5nIiApOworICAgIH0sCisgICAgbmV4dEFsbDogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAg
IHJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCAibmV4dFNpYmxpbmciICk7CisgICAgfSwKKyAgICBw
cmV2QWxsOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5kaXIoIGVs
ZW0sICJwcmV2aW91c1NpYmxpbmciICk7CisgICAgfSwKKyAgICBuZXh0VW50aWw6IGZ1bmN0aW9u
KCBlbGVtLCBpLCB1bnRpbCApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sICJu
ZXh0U2libGluZyIsIHVudGlsICk7CisgICAgfSwKKyAgICBwcmV2VW50aWw6IGZ1bmN0aW9uKCBl
bGVtLCBpLCB1bnRpbCApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sICJwcmV2
aW91c1NpYmxpbmciLCB1bnRpbCApOworICAgIH0sCisgICAgc2libGluZ3M6IGZ1bmN0aW9uKCBl
bGVtICkgeworICAgICAgICByZXR1cm4galF1ZXJ5LnNpYmxpbmcoICggZWxlbS5wYXJlbnROb2Rl
IHx8IHt9ICkuZmlyc3RDaGlsZCwgZWxlbSApOworICAgIH0sCisgICAgY2hpbGRyZW46IGZ1bmN0
aW9uKCBlbGVtICkgeworICAgICAgICByZXR1cm4galF1ZXJ5LnNpYmxpbmcoIGVsZW0uZmlyc3RD
aGlsZCApOworICAgIH0sCisgICAgY29udGVudHM6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAg
ICByZXR1cm4galF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiaWZyYW1lIiApID8KKyAgICAgICAgICAg
IGVsZW0uY29udGVudERvY3VtZW50IHx8IGVsZW0uY29udGVudFdpbmRvdy5kb2N1bWVudCA6Cisg
ICAgICAgICAgICBqUXVlcnkubWVyZ2UoIFtdLCBlbGVtLmNoaWxkTm9kZXMgKTsKKyAgICB9Cit9
LCBmdW5jdGlvbiggbmFtZSwgZm4gKSB7CisgICAgalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlv
biggdW50aWwsIHNlbGVjdG9yICkgeworICAgICAgICB2YXIgcmV0ID0galF1ZXJ5Lm1hcCggdGhp
cywgZm4sIHVudGlsICk7CisKKyAgICAgICAgaWYgKCAhcnVudGlsLnRlc3QoIG5hbWUgKSApIHsK
KyAgICAgICAgICAgIHNlbGVjdG9yID0gdW50aWw7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
IHNlbGVjdG9yICYmIHR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgKSB7CisgICAgICAgICAg
ICByZXQgPSBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgcmV0ICk7CisgICAgICAgIH0KKworICAg
ICAgICByZXQgPSB0aGlzLmxlbmd0aCA+IDEgJiYgIWd1YXJhbnRlZWRVbmlxdWVbIG5hbWUgXSA/
IGpRdWVyeS51bmlxdWUoIHJldCApIDogcmV0OworCisgICAgICAgIGlmICggdGhpcy5sZW5ndGgg
PiAxICYmIHJwYXJlbnRzcHJldi50ZXN0KCBuYW1lICkgKSB7CisgICAgICAgICAgICByZXQgPSBy
ZXQucmV2ZXJzZSgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNr
KCByZXQsIG5hbWUsIGNvcmVfc2xpY2UuY2FsbCggYXJndW1lbnRzICkuam9pbigiLCIpICk7Cisg
ICAgfTsKK30pOworCitqUXVlcnkuZXh0ZW5kKHsKKyAgICBmaWx0ZXI6IGZ1bmN0aW9uKCBleHBy
LCBlbGVtcywgbm90ICkgeworICAgICAgICBpZiAoIG5vdCApIHsKKyAgICAgICAgICAgIGV4cHIg
PSAiOm5vdCgiICsgZXhwciArICIpIjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBlbGVt
cy5sZW5ndGggPT09IDEgPworICAgICAgICAgICAgalF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9y
KGVsZW1zWzBdLCBleHByKSA/IFsgZWxlbXNbMF0gXSA6IFtdIDoKKyAgICAgICAgICAgIGpRdWVy
eS5maW5kLm1hdGNoZXMoZXhwciwgZWxlbXMpOworICAgIH0sCisKKyAgICBkaXI6IGZ1bmN0aW9u
KCBlbGVtLCBkaXIsIHVudGlsICkgeworICAgICAgICB2YXIgbWF0Y2hlZCA9IFtdLAorICAgICAg
ICAgICAgY3VyID0gZWxlbVsgZGlyIF07CisKKyAgICAgICAgd2hpbGUgKCBjdXIgJiYgY3VyLm5v
ZGVUeXBlICE9PSA5ICYmICh1bnRpbCA9PT0gdW5kZWZpbmVkIHx8IGN1ci5ub2RlVHlwZSAhPT0g
MSB8fCAhalF1ZXJ5KCBjdXIgKS5pcyggdW50aWwgKSkgKSB7CisgICAgICAgICAgICBpZiAoIGN1
ci5ub2RlVHlwZSA9PT0gMSApIHsKKyAgICAgICAgICAgICAgICBtYXRjaGVkLnB1c2goIGN1ciAp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY3VyID0gY3VyW2Rpcl07CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIG1hdGNoZWQ7CisgICAgfSwKKworICAgIHNpYmxpbmc6IGZ1bmN0aW9u
KCBuLCBlbGVtICkgeworICAgICAgICB2YXIgciA9IFtdOworCisgICAgICAgIGZvciAoIDsgbjsg
biA9IG4ubmV4dFNpYmxpbmcgKSB7CisgICAgICAgICAgICBpZiAoIG4ubm9kZVR5cGUgPT09IDEg
JiYgbiAhPT0gZWxlbSApIHsKKyAgICAgICAgICAgICAgICByLnB1c2goIG4gKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByOworICAgIH0KK30pOworCisvLyBJ
bXBsZW1lbnQgdGhlIGlkZW50aWNhbCBmdW5jdGlvbmFsaXR5IGZvciBmaWx0ZXIgYW5kIG5vdAor
ZnVuY3Rpb24gd2lubm93KCBlbGVtZW50cywgcXVhbGlmaWVyLCBrZWVwICkgeworCisgICAgLy8g
Q2FuJ3QgcGFzcyBudWxsIG9yIHVuZGVmaW5lZCB0byBpbmRleE9mIGluIEZpcmVmb3ggNAorICAg
IC8vIFNldCB0byAwIHRvIHNraXAgc3RyaW5nIGNoZWNrCisgICAgcXVhbGlmaWVyID0gcXVhbGlm
aWVyIHx8IDA7CisKKyAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBxdWFsaWZpZXIgKSApIHsK
KyAgICAgICAgcmV0dXJuIGpRdWVyeS5ncmVwKGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwgaSAp
IHsKKyAgICAgICAgICAgIHZhciByZXRWYWwgPSAhIXF1YWxpZmllci5jYWxsKCBlbGVtLCBpLCBl
bGVtICk7CisgICAgICAgICAgICByZXR1cm4gcmV0VmFsID09PSBrZWVwOworICAgICAgICB9KTsK
KworICAgIH0gZWxzZSBpZiAoIHF1YWxpZmllci5ub2RlVHlwZSApIHsKKyAgICAgICAgcmV0dXJu
IGpRdWVyeS5ncmVwKGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwgaSApIHsKKyAgICAgICAgICAg
IHJldHVybiAoIGVsZW0gPT09IHF1YWxpZmllciApID09PSBrZWVwOworICAgICAgICB9KTsKKwor
ICAgIH0gZWxzZSBpZiAoIHR5cGVvZiBxdWFsaWZpZXIgPT09ICJzdHJpbmciICkgeworICAgICAg
ICB2YXIgZmlsdGVyZWQgPSBqUXVlcnkuZ3JlcChlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7
CisgICAgICAgICAgICByZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0gMTsKKyAgICAgICAgfSk7CisK
KyAgICAgICAgaWYgKCBpc1NpbXBsZS50ZXN0KCBxdWFsaWZpZXIgKSApIHsKKyAgICAgICAgICAg
IHJldHVybiBqUXVlcnkuZmlsdGVyKHF1YWxpZmllciwgZmlsdGVyZWQsICFrZWVwKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHF1YWxpZmllciA9IGpRdWVyeS5maWx0ZXIoIHF1YWxp
ZmllciwgZmlsdGVyZWQgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBqUXVlcnku
Z3JlcChlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7CisgICAgICAgIHJldHVybiAoIGpR
dWVyeS5pbkFycmF5KCBlbGVtLCBxdWFsaWZpZXIgKSA+PSAwICkgPT09IGtlZXA7CisgICAgfSk7
Cit9CitmdW5jdGlvbiBjcmVhdGVTYWZlRnJhZ21lbnQoIGRvY3VtZW50ICkgeworICAgIHZhciBs
aXN0ID0gbm9kZU5hbWVzLnNwbGl0KCAifCIgKSwKKyAgICBzYWZlRnJhZyA9IGRvY3VtZW50LmNy
ZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKworICAgIGlmICggc2FmZUZyYWcuY3JlYXRlRWxlbWVu
dCApIHsKKyAgICAgICAgd2hpbGUgKCBsaXN0Lmxlbmd0aCApIHsKKyAgICAgICAgICAgIHNhZmVG
cmFnLmNyZWF0ZUVsZW1lbnQoCisgICAgICAgICAgICAgICAgbGlzdC5wb3AoKQorICAgICAgICAg
ICAgKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc2FmZUZyYWc7Cit9CisKK3ZhciBu
b2RlTmFtZXMgPSAiYWJicnxhcnRpY2xlfGFzaWRlfGF1ZGlvfGJkaXxjYW52YXN8ZGF0YXxkYXRh
bGlzdHxkZXRhaWxzfGZpZ2NhcHRpb258ZmlndXJlfGZvb3RlcnwiICsKKyAgICAgICAgImhlYWRl
cnxoZ3JvdXB8bWFya3xtZXRlcnxuYXZ8b3V0cHV0fHByb2dyZXNzfHNlY3Rpb258c3VtbWFyeXx0
aW1lfHZpZGVvIiwKKyAgICByaW5saW5lalF1ZXJ5ID0gLyBqUXVlcnlcZCs9Iig/Om51bGx8XGQr
KSIvZywKKyAgICBybGVhZGluZ1doaXRlc3BhY2UgPSAvXlxzKy8sCisgICAgcnhodG1sVGFnID0g
LzwoPyFhcmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgoW1x3
Ol0rKVtePl0qKVwvPi9naSwKKyAgICBydGFnTmFtZSA9IC88KFtcdzpdKykvLAorICAgIHJ0Ym9k
eSA9IC88dGJvZHkvaSwKKyAgICByaHRtbCA9IC88fCYjP1x3KzsvLAorICAgIHJub0lubmVyaHRt
bCA9IC88KD86c2NyaXB0fHN0eWxlfGxpbmspL2ksCisgICAgcm5vY2FjaGUgPSAvPCg/OnNjcmlw
dHxvYmplY3R8ZW1iZWR8b3B0aW9ufHN0eWxlKS9pLAorICAgIHJub3NoaW1jYWNoZSA9IG5ldyBS
ZWdFeHAoIjwoPzoiICsgbm9kZU5hbWVzICsgIilbXFxzLz5dIiwgImkiKSwKKyAgICByY2hlY2th
YmxlVHlwZSA9IC9eKD86Y2hlY2tib3h8cmFkaW8pJC8sCisgICAgLy8gY2hlY2tlZD0iY2hlY2tl
ZCIgb3IgY2hlY2tlZAorICAgIHJjaGVja2VkID0gL2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hl
Y2tlZC4pL2ksCisgICAgcnNjcmlwdFR5cGUgPSAvXC8oamF2YXxlY21hKXNjcmlwdC9pLAorICAg
IHJjbGVhblNjcmlwdCA9IC9eXHMqPCEoPzpcW0NEQVRBXFt8XC1cLSl8W1xdXC1dezJ9PlxzKiQv
ZywKKyAgICB3cmFwTWFwID0geworICAgICAgICBvcHRpb246IFsgMSwgIjxzZWxlY3QgbXVsdGlw
bGU9J211bHRpcGxlJz4iLCAiPC9zZWxlY3Q+IiBdLAorICAgICAgICBsZWdlbmQ6IFsgMSwgIjxm
aWVsZHNldD4iLCAiPC9maWVsZHNldD4iIF0sCisgICAgICAgIHRoZWFkOiBbIDEsICI8dGFibGU+
IiwgIjwvdGFibGU+IiBdLAorICAgICAgICB0cjogWyAyLCAiPHRhYmxlPjx0Ym9keT4iLCAiPC90
Ym9keT48L3RhYmxlPiIgXSwKKyAgICAgICAgdGQ6IFsgMywgIjx0YWJsZT48dGJvZHk+PHRyPiIs
ICI8L3RyPjwvdGJvZHk+PC90YWJsZT4iIF0sCisgICAgICAgIGNvbDogWyAyLCAiPHRhYmxlPjx0
Ym9keT48L3Rib2R5Pjxjb2xncm91cD4iLCAiPC9jb2xncm91cD48L3RhYmxlPiIgXSwKKyAgICAg
ICAgYXJlYTogWyAxLCAiPG1hcD4iLCAiPC9tYXA+IiBdLAorICAgICAgICBfZGVmYXVsdDogWyAw
LCAiIiwgIiIgXQorICAgIH0sCisgICAgc2FmZUZyYWdtZW50ID0gY3JlYXRlU2FmZUZyYWdtZW50
KCBkb2N1bWVudCApLAorICAgIGZyYWdtZW50RGl2ID0gc2FmZUZyYWdtZW50LmFwcGVuZENoaWxk
KCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSApOworCit3cmFwTWFwLm9wdGdyb3VwID0g
d3JhcE1hcC5vcHRpb247Cit3cmFwTWFwLnRib2R5ID0gd3JhcE1hcC50Zm9vdCA9IHdyYXBNYXAu
Y29sZ3JvdXAgPSB3cmFwTWFwLmNhcHRpb24gPSB3cmFwTWFwLnRoZWFkOword3JhcE1hcC50aCA9
IHdyYXBNYXAudGQ7CisKKy8vIElFNi04IGNhbid0IHNlcmlhbGl6ZSBsaW5rLCBzY3JpcHQsIHN0
eWxlLCBvciBhbnkgaHRtbDUgKE5vU2NvcGUpIHRhZ3MsCisvLyB1bmxlc3Mgd3JhcHBlZCBpbiBh
IGRpdiB3aXRoIG5vbi1icmVha2luZyBjaGFyYWN0ZXJzIGluIGZyb250IG9mIGl0LgoraWYgKCAh
alF1ZXJ5LnN1cHBvcnQuaHRtbFNlcmlhbGl6ZSApIHsKKyAgICB3cmFwTWFwLl9kZWZhdWx0ID0g
WyAxLCAiWDxkaXY+IiwgIjwvZGl2PiIgXTsKK30KKworalF1ZXJ5LmZuLmV4dGVuZCh7CisgICAg
dGV4dDogZnVuY3Rpb24oIHZhbHVlICkgeworICAgICAgICByZXR1cm4galF1ZXJ5LmFjY2Vzcygg
dGhpcywgZnVuY3Rpb24oIHZhbHVlICkgeworICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09PSB1
bmRlZmluZWQgPworICAgICAgICAgICAgICAgIGpRdWVyeS50ZXh0KCB0aGlzICkgOgorICAgICAg
ICAgICAgICAgIHRoaXMuZW1wdHkoKS5hcHBlbmQoICggdGhpc1swXSAmJiB0aGlzWzBdLm93bmVy
RG9jdW1lbnQgfHwgZG9jdW1lbnQgKS5jcmVhdGVUZXh0Tm9kZSggdmFsdWUgKSApOworICAgICAg
ICB9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApOworICAgIH0sCisKKyAgICB3cmFw
QWxsOiBmdW5jdGlvbiggaHRtbCApIHsKKyAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbigg
aHRtbCApICkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihpKSB7Cisg
ICAgICAgICAgICAgICAgalF1ZXJ5KHRoaXMpLndyYXBBbGwoIGh0bWwuY2FsbCh0aGlzLCBpKSAp
OworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHRoaXNbMF0gKSB7
CisgICAgICAgICAgICAvLyBUaGUgZWxlbWVudHMgdG8gd3JhcCB0aGUgdGFyZ2V0IGFyb3VuZAor
ICAgICAgICAgICAgdmFyIHdyYXAgPSBqUXVlcnkoIGh0bWwsIHRoaXNbMF0ub3duZXJEb2N1bWVu
dCApLmVxKDApLmNsb25lKHRydWUpOworCisgICAgICAgICAgICBpZiAoIHRoaXNbMF0ucGFyZW50
Tm9kZSApIHsKKyAgICAgICAgICAgICAgICB3cmFwLmluc2VydEJlZm9yZSggdGhpc1swXSApOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICB3cmFwLm1hcChmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgICAgICB2YXIgZWxlbSA9IHRoaXM7CisKKyAgICAgICAgICAgICAgICB3aGlsZSAoIGVs
ZW0uZmlyc3RDaGlsZCAmJiBlbGVtLmZpcnN0Q2hpbGQubm9kZVR5cGUgPT09IDEgKSB7CisgICAg
ICAgICAgICAgICAgICAgIGVsZW0gPSBlbGVtLmZpcnN0Q2hpbGQ7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW07CisgICAgICAgICAgICB9KS5hcHBlbmQo
IHRoaXMgKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0sCisKKyAg
ICB3cmFwSW5uZXI6IGZ1bmN0aW9uKCBodG1sICkgeworICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1
bmN0aW9uKCBodG1sICkgKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9u
KGkpIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkodGhpcykud3JhcElubmVyKCBodG1sLmNhbGwo
dGhpcywgaSkgKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IHRoaXMuZWFjaChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciBzZWxmID0galF1ZXJ5KCB0
aGlzICksCisgICAgICAgICAgICAgICAgY29udGVudHMgPSBzZWxmLmNvbnRlbnRzKCk7CisKKyAg
ICAgICAgICAgIGlmICggY29udGVudHMubGVuZ3RoICkgeworICAgICAgICAgICAgICAgIGNvbnRl
bnRzLndyYXBBbGwoIGh0bWwgKTsKKworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBzZWxmLmFwcGVuZCggaHRtbCApOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAg
ICB9LAorCisgICAgd3JhcDogZnVuY3Rpb24oIGh0bWwgKSB7CisgICAgICAgIHZhciBpc0Z1bmN0
aW9uID0galF1ZXJ5LmlzRnVuY3Rpb24oIGh0bWwgKTsKKworICAgICAgICByZXR1cm4gdGhpcy5l
YWNoKGZ1bmN0aW9uKGkpIHsKKyAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLndyYXBBbGwoIGlz
RnVuY3Rpb24gPyBodG1sLmNhbGwodGhpcywgaSkgOiBodG1sICk7CisgICAgICAgIH0pOworICAg
IH0sCisKKyAgICB1bndyYXA6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5wYXJl
bnQoKS5lYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgaWYgKCAhalF1ZXJ5Lm5vZGVOYW1l
KCB0aGlzLCAiYm9keSIgKSApIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkoIHRoaXMgKS5yZXBs
YWNlV2l0aCggdGhpcy5jaGlsZE5vZGVzICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pLmVu
ZCgpOworICAgIH0sCisKKyAgICBhcHBlbmQ6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4g
dGhpcy5kb21NYW5pcChhcmd1bWVudHMsIHRydWUsIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAg
ICAgICAgaWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExICkg
eworICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQoIGVsZW0gKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSk7CisgICAgfSwKKworICAgIHByZXBlbmQ6IGZ1bmN0aW9uKCkgeworICAg
ICAgICByZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsIHRydWUsIGZ1bmN0aW9uKCBlbGVt
ICkgeworICAgICAgICAgICAgaWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5
cGUgPT09IDExICkgeworICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0
aGlzLmZpcnN0Q2hpbGQgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfSwKKwor
ICAgIGJlZm9yZTogZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICggIWlzRGlzY29ubmVjdGVkKCB0
aGlzWzBdICkgKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMs
IGZhbHNlLCBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICB0aGlzLnBhcmVudE5v
ZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzICk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICggYXJndW1lbnRzLmxlbmd0aCApIHsKKyAgICAgICAgICAgIHZhciBz
ZXQgPSBqUXVlcnkuY2xlYW4oIGFyZ3VtZW50cyApOworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
cHVzaFN0YWNrKCBqUXVlcnkubWVyZ2UoIHNldCwgdGhpcyApLCAiYmVmb3JlIiwgdGhpcy5zZWxl
Y3RvciApOworICAgICAgICB9CisgICAgfSwKKworICAgIGFmdGVyOiBmdW5jdGlvbigpIHsKKyAg
ICAgICAgaWYgKCAhaXNEaXNjb25uZWN0ZWQoIHRoaXNbMF0gKSApIHsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywgZmFsc2UsIGZ1bmN0aW9uKCBlbGVtICkgewor
ICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMu
bmV4dFNpYmxpbmcgKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KCBhcmd1bWVudHMubGVuZ3RoICkgeworICAgICAgICAgICAgdmFyIHNldCA9IGpRdWVyeS5jbGVh
biggYXJndW1lbnRzICk7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVy
eS5tZXJnZSggdGhpcywgc2V0ICksICJhZnRlciIsIHRoaXMuc2VsZWN0b3IgKTsKKyAgICAgICAg
fQorICAgIH0sCisKKyAgICAvLyBrZWVwRGF0YSBpcyBmb3IgaW50ZXJuYWwgdXNlIG9ubHktLWRv
IG5vdCBkb2N1bWVudAorICAgIHJlbW92ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCBrZWVwRGF0YSAp
IHsKKyAgICAgICAgdmFyIGVsZW0sCisgICAgICAgICAgICBpID0gMDsKKworICAgICAgICBmb3Ig
KCA7IChlbGVtID0gdGhpc1tpXSkgIT0gbnVsbDsgaSsrICkgeworICAgICAgICAgICAgaWYgKCAh
c2VsZWN0b3IgfHwgalF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIFsgZWxlbSBdICkubGVuZ3RoICkg
eworICAgICAgICAgICAgICAgIGlmICggIWtlZXBEYXRhICYmIGVsZW0ubm9kZVR5cGUgPT09IDEg
KSB7CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5jbGVhbkRhdGEoIGVsZW0uZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoIioiKSApOworICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY2xlYW5EYXRh
KCBbIGVsZW0gXSApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICgg
ZWxlbS5wYXJlbnROb2RlICkgeworICAgICAgICAgICAgICAgICAgICBlbGVtLnBhcmVudE5vZGUu
cmVtb3ZlQ2hpbGQoIGVsZW0gKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgZW1wdHk6IGZ1
bmN0aW9uKCkgeworICAgICAgICB2YXIgZWxlbSwKKyAgICAgICAgICAgIGkgPSAwOworCisgICAg
ICAgIGZvciAoIDsgKGVsZW0gPSB0aGlzW2ldKSAhPSBudWxsOyBpKysgKSB7CisgICAgICAgICAg
ICAvLyBSZW1vdmUgZWxlbWVudCBub2RlcyBhbmQgcHJldmVudCBtZW1vcnkgbGVha3MKKyAgICAg
ICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKKyAgICAgICAgICAgICAgICBqUXVl
cnkuY2xlYW5EYXRhKCBlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikgKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gUmVtb3ZlIGFueSByZW1haW5pbmcgbm9kZXMKKyAgICAg
ICAgICAgIHdoaWxlICggZWxlbS5maXJzdENoaWxkICkgeworICAgICAgICAgICAgICAgIGVsZW0u
cmVtb3ZlQ2hpbGQoIGVsZW0uZmlyc3RDaGlsZCApOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKworICAgIGNsb25lOiBmdW5jdGlvbigg
ZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7CisgICAgICAgIGRhdGFBbmRFdmVu
dHMgPSBkYXRhQW5kRXZlbnRzID09IG51bGwgPyBmYWxzZSA6IGRhdGFBbmRFdmVudHM7CisgICAg
ICAgIGRlZXBEYXRhQW5kRXZlbnRzID0gZGVlcERhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGRhdGFB
bmRFdmVudHMgOiBkZWVwRGF0YUFuZEV2ZW50czsKKworICAgICAgICByZXR1cm4gdGhpcy5tYXAo
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiBqUXVlcnkuY2xvbmUoIHRoaXMsIGRh
dGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICk7CisgICAgICAgIH0pOworICAgIH0sCisK
KyAgICBodG1sOiBmdW5jdGlvbiggdmFsdWUgKSB7CisgICAgICAgIHJldHVybiBqUXVlcnkuYWNj
ZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7CisgICAgICAgICAgICB2YXIgZWxlbSA9IHRo
aXNbMF0gfHwge30sCisgICAgICAgICAgICAgICAgaSA9IDAsCisgICAgICAgICAgICAgICAgbCA9
IHRoaXMubGVuZ3RoOworCisgICAgICAgICAgICBpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09IDEgPworICAgICAgICAg
ICAgICAgICAgICBlbGVtLmlubmVySFRNTC5yZXBsYWNlKCByaW5saW5lalF1ZXJ5LCAiIiApIDoK
KyAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBTZWUgaWYgd2UgY2FuIHRha2UgYSBzaG9ydGN1dCBhbmQganVzdCB1c2UgaW5uZXJI
VE1MCisgICAgICAgICAgICBpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIgJiYgIXJub0lu
bmVyaHRtbC50ZXN0KCB2YWx1ZSApICYmCisgICAgICAgICAgICAgICAgKCBqUXVlcnkuc3VwcG9y
dC5odG1sU2VyaWFsaXplIHx8ICFybm9zaGltY2FjaGUudGVzdCggdmFsdWUgKSAgKSAmJgorICAg
ICAgICAgICAgICAgICggalF1ZXJ5LnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2UgfHwgIXJsZWFk
aW5nV2hpdGVzcGFjZS50ZXN0KCB2YWx1ZSApICkgJiYKKyAgICAgICAgICAgICAgICAhd3JhcE1h
cFsgKCBydGFnTmFtZS5leGVjKCB2YWx1ZSApIHx8IFsiIiwgIiJdIClbMV0udG9Mb3dlckNhc2Uo
KSBdICkgeworCisgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKCByeGh0bWxU
YWcsICI8JDE+PC8kMj4iICk7CisKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAg
ICAgICAgICBmb3IgKDsgaSA8IGw7IGkrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFJlbW92ZSBlbGVtZW50IG5vZGVzIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrcworICAgICAgICAg
ICAgICAgICAgICAgICAgZWxlbSA9IHRoaXNbaV0gfHwge307CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5LmNsZWFuRGF0YSggZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSggIioiICkg
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmlubmVySFRNTCA9IHZhbHVlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgZWxlbSA9IDA7CisKKyAgICAgICAgICAgICAgICAvLyBJZiB1c2luZyBp
bm5lckhUTUwgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdXNlIHRoZSBmYWxsYmFjayBtZXRob2QKKyAg
ICAgICAgICAgICAgICB9IGNhdGNoKGUpIHt9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmICggZWxlbSApIHsKKyAgICAgICAgICAgICAgICB0aGlzLmVtcHR5KCkuYXBwZW5kKCB2YWx1
ZSApOworICAgICAgICAgICAgfQorICAgICAgICB9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxl
bmd0aCApOworICAgIH0sCisKKyAgICByZXBsYWNlV2l0aDogZnVuY3Rpb24oIHZhbHVlICkgewor
ICAgICAgICBpZiAoICFpc0Rpc2Nvbm5lY3RlZCggdGhpc1swXSApICkgeworICAgICAgICAgICAg
Ly8gTWFrZSBzdXJlIHRoYXQgdGhlIGVsZW1lbnRzIGFyZSByZW1vdmVkIGZyb20gdGhlIERPTSBi
ZWZvcmUgdGhleSBhcmUgaW5zZXJ0ZWQKKyAgICAgICAgICAgIC8vIHRoaXMgY2FuIGhlbHAgZml4
IHJlcGxhY2luZyBhIHBhcmVudCB3aXRoIGNoaWxkIGVsZW1lbnRzCisgICAgICAgICAgICBpZiAo
IGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkgeworICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzLmVhY2goZnVuY3Rpb24oaSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IGpR
dWVyeSh0aGlzKSwgb2xkID0gc2VsZi5odG1sKCk7CisgICAgICAgICAgICAgICAgICAgIHNlbGYu
cmVwbGFjZVdpdGgoIHZhbHVlLmNhbGwoIHRoaXMsIGksIG9sZCApICk7CisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggdHlwZW9mIHZhbHVlICE9
PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGpRdWVyeSggdmFsdWUgKS5k
ZXRhY2goKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IHRoaXMubmV4dFNpYmxpbmcs
CisgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTsKKworICAgICAg
ICAgICAgICAgIGpRdWVyeSggdGhpcyApLnJlbW92ZSgpOworCisgICAgICAgICAgICAgICAgaWYg
KCBuZXh0ICkgeworICAgICAgICAgICAgICAgICAgICBqUXVlcnkobmV4dCkuYmVmb3JlKCB2YWx1
ZSApOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGpRdWVy
eShwYXJlbnQpLmFwcGVuZCggdmFsdWUgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0aGlzLmxlbmd0aCA/CisgICAgICAg
ICAgICB0aGlzLnB1c2hTdGFjayggalF1ZXJ5KGpRdWVyeS5pc0Z1bmN0aW9uKHZhbHVlKSA/IHZh
bHVlKCkgOiB2YWx1ZSksICJyZXBsYWNlV2l0aCIsIHZhbHVlICkgOgorICAgICAgICAgICAgdGhp
czsKKyAgICB9LAorCisgICAgZGV0YWNoOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisgICAgICAg
IHJldHVybiB0aGlzLnJlbW92ZSggc2VsZWN0b3IsIHRydWUgKTsKKyAgICB9LAorCisgICAgZG9t
TWFuaXA6IGZ1bmN0aW9uKCBhcmdzLCB0YWJsZSwgY2FsbGJhY2sgKSB7CisKKyAgICAgICAgLy8g
RmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5cworICAgICAgICBhcmdzID0gW10uY29uY2F0LmFwcGx5
KCBbXSwgYXJncyApOworCisgICAgICAgIHZhciByZXN1bHRzLCBmaXJzdCwgZnJhZ21lbnQsIGlO
b0Nsb25lLAorICAgICAgICAgICAgaSA9IDAsCisgICAgICAgICAgICB2YWx1ZSA9IGFyZ3NbMF0s
CisgICAgICAgICAgICBzY3JpcHRzID0gW10sCisgICAgICAgICAgICBsID0gdGhpcy5sZW5ndGg7
CisKKyAgICAgICAgLy8gV2UgY2FuJ3QgY2xvbmVOb2RlIGZyYWdtZW50cyB0aGF0IGNvbnRhaW4g
Y2hlY2tlZCwgaW4gV2ViS2l0CisgICAgICAgIGlmICggIWpRdWVyeS5zdXBwb3J0LmNoZWNrQ2xv
bmUgJiYgbCA+IDEgJiYgdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiAmJiByY2hlY2tlZC50ZXN0
KCB2YWx1ZSApICkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgICAgICBqUXVlcnkodGhpcykuZG9tTWFuaXAoIGFyZ3MsIHRhYmxlLCBjYWxs
YmFjayApOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIGpRdWVy
eS5pc0Z1bmN0aW9uKHZhbHVlKSApIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVu
Y3Rpb24oaSkgeworICAgICAgICAgICAgICAgIHZhciBzZWxmID0galF1ZXJ5KHRoaXMpOworICAg
ICAgICAgICAgICAgIGFyZ3NbMF0gPSB2YWx1ZS5jYWxsKCB0aGlzLCBpLCB0YWJsZSA/IHNlbGYu
aHRtbCgpIDogdW5kZWZpbmVkICk7CisgICAgICAgICAgICAgICAgc2VsZi5kb21NYW5pcCggYXJn
cywgdGFibGUsIGNhbGxiYWNrICk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmICggdGhpc1swXSApIHsKKyAgICAgICAgICAgIHJlc3VsdHMgPSBqUXVlcnkuYnVpbGRG
cmFnbWVudCggYXJncywgdGhpcywgc2NyaXB0cyApOworICAgICAgICAgICAgZnJhZ21lbnQgPSBy
ZXN1bHRzLmZyYWdtZW50OworICAgICAgICAgICAgZmlyc3QgPSBmcmFnbWVudC5maXJzdENoaWxk
OworCisgICAgICAgICAgICBpZiAoIGZyYWdtZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAxICkg
eworICAgICAgICAgICAgICAgIGZyYWdtZW50ID0gZmlyc3Q7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmICggZmlyc3QgKSB7CisgICAgICAgICAgICAgICAgdGFibGUgPSB0YWJsZSAm
JiBqUXVlcnkubm9kZU5hbWUoIGZpcnN0LCAidHIiICk7CisKKyAgICAgICAgICAgICAgICAvLyBV
c2UgdGhlIG9yaWdpbmFsIGZyYWdtZW50IGZvciB0aGUgbGFzdCBpdGVtIGluc3RlYWQgb2YgdGhl
IGZpcnN0IGJlY2F1c2UgaXQgY2FuIGVuZCB1cAorICAgICAgICAgICAgICAgIC8vIGJlaW5nIGVt
cHRpZWQgaW5jb3JyZWN0bHkgaW4gY2VydGFpbiBzaXR1YXRpb25zICgjODA3MCkuCisgICAgICAg
ICAgICAgICAgLy8gRnJhZ21lbnRzIGZyb20gdGhlIGZyYWdtZW50IGNhY2hlIG11c3QgYWx3YXlz
IGJlIGNsb25lZCBhbmQgbmV2ZXIgdXNlZCBpbiBwbGFjZS4KKyAgICAgICAgICAgICAgICBmb3Ig
KCBpTm9DbG9uZSA9IHJlc3VsdHMuY2FjaGVhYmxlIHx8IGwgLSAxOyBpIDwgbDsgaSsrICkgewor
ICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKAorICAgICAgICAgICAgICAgICAgICAg
ICAgdGFibGUgJiYgalF1ZXJ5Lm5vZGVOYW1lKCB0aGlzW2ldLCAidGFibGUiICkgPworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZpbmRPckFwcGVuZCggdGhpc1tpXSwgInRib2R5IiApIDoK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2ldLAorICAgICAgICAgICAgICAgICAg
ICAgICAgaSA9PT0gaU5vQ2xvbmUgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdt
ZW50IDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY2xvbmUoIGZyYWdtZW50
LCB0cnVlLCB0cnVlICkKKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZpeCAjMTE4MDk6IEF2b2lkIGxlYWtp
bmcgbWVtb3J5CisgICAgICAgICAgICBmcmFnbWVudCA9IGZpcnN0ID0gbnVsbDsKKworICAgICAg
ICAgICAgaWYgKCBzY3JpcHRzLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkuZWFj
aCggc2NyaXB0cywgZnVuY3Rpb24oIGksIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
ICggZWxlbS5zcmMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5hamF4
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5hamF4KHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBlbGVtLnNyYywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHlwZTogIkdFVCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFUeXBlOiAic2NyaXB0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXN5bmM6IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWw6IGZh
bHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhyb3dzIjogdHJ1ZQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXJyb3IoIm5vIGFqYXgi
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5nbG9iYWxFdmFsKCAoIGVsZW0udGV4
dCB8fCBlbGVtLnRleHRDb250ZW50IHx8IGVsZW0uaW5uZXJIVE1MIHx8ICIiICkucmVwbGFjZSgg
cmNsZWFuU2NyaXB0LCAiIiApICk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICBpZiAoIGVsZW0ucGFyZW50Tm9kZSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggZWxlbSApOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9Cit9KTsKKworZnVuY3Rpb24gZmluZE9yQXBwZW5k
KCBlbGVtLCB0YWcgKSB7CisgICAgcmV0dXJuIGVsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRh
ZyApWzBdIHx8IGVsZW0uYXBwZW5kQ2hpbGQoIGVsZW0ub3duZXJEb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCB0YWcgKSApOworfQorCitmdW5jdGlvbiBjbG9uZUNvcHlFdmVudCggc3JjLCBkZXN0ICkg
eworCisgICAgaWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxIHx8ICFqUXVlcnkuaGFzRGF0YSggc3Jj
ICkgKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2YXIgdHlwZSwgaSwgbCwKKyAg
ICAgICAgb2xkRGF0YSA9IGpRdWVyeS5fZGF0YSggc3JjICksCisgICAgICAgIGN1ckRhdGEgPSBq
UXVlcnkuX2RhdGEoIGRlc3QsIG9sZERhdGEgKSwKKyAgICAgICAgZXZlbnRzID0gb2xkRGF0YS5l
dmVudHM7CisKKyAgICBpZiAoIGV2ZW50cyApIHsKKyAgICAgICAgZGVsZXRlIGN1ckRhdGEuaGFu
ZGxlOworICAgICAgICBjdXJEYXRhLmV2ZW50cyA9IHt9OworCisgICAgICAgIGZvciAoIHR5cGUg
aW4gZXZlbnRzICkgeworICAgICAgICAgICAgZm9yICggaSA9IDAsIGwgPSBldmVudHNbIHR5cGUg
XS5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LmFk
ZCggZGVzdCwgdHlwZSwgZXZlbnRzWyB0eXBlIF1bIGkgXSApOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gbWFrZSB0aGUgY2xvbmVkIHB1YmxpYyBkYXRhIG9iamVj
dCBhIGNvcHkgZnJvbSB0aGUgb3JpZ2luYWwKKyAgICBpZiAoIGN1ckRhdGEuZGF0YSApIHsKKyAg
ICAgICAgY3VyRGF0YS5kYXRhID0galF1ZXJ5LmV4dGVuZCgge30sIGN1ckRhdGEuZGF0YSApOwor
ICAgIH0KK30KKworZnVuY3Rpb24gY2xvbmVGaXhBdHRyaWJ1dGVzKCBzcmMsIGRlc3QgKSB7Cisg
ICAgdmFyIG5vZGVOYW1lOworCisgICAgLy8gV2UgZG8gbm90IG5lZWQgdG8gZG8gYW55dGhpbmcg
Zm9yIG5vbi1FbGVtZW50cworICAgIGlmICggZGVzdC5ub2RlVHlwZSAhPT0gMSApIHsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIGNsZWFyQXR0cmlidXRlcyByZW1vdmVzIHRoZSBh
dHRyaWJ1dGVzLCB3aGljaCB3ZSBkb24ndCB3YW50LAorICAgIC8vIGJ1dCBhbHNvIHJlbW92ZXMg
dGhlIGF0dGFjaEV2ZW50IGV2ZW50cywgd2hpY2ggd2UgKmRvKiB3YW50CisgICAgaWYgKCBkZXN0
LmNsZWFyQXR0cmlidXRlcyApIHsKKyAgICAgICAgZGVzdC5jbGVhckF0dHJpYnV0ZXMoKTsKKyAg
ICB9CisKKyAgICAvLyBtZXJnZUF0dHJpYnV0ZXMsIGluIGNvbnRyYXN0LCBvbmx5IG1lcmdlcyBi
YWNrIG9uIHRoZQorICAgIC8vIG9yaWdpbmFsIGF0dHJpYnV0ZXMsIG5vdCB0aGUgZXZlbnRzCisg
ICAgaWYgKCBkZXN0Lm1lcmdlQXR0cmlidXRlcyApIHsKKyAgICAgICAgZGVzdC5tZXJnZUF0dHJp
YnV0ZXMoIHNyYyApOworICAgIH0KKworICAgIG5vZGVOYW1lID0gZGVzdC5ub2RlTmFtZS50b0xv
d2VyQ2FzZSgpOworCisgICAgaWYgKCBub2RlTmFtZSA9PT0gIm9iamVjdCIgKSB7CisgICAgICAg
IC8vIElFNi0xMCBpbXByb3Blcmx5IGNsb25lcyBjaGlsZHJlbiBvZiBvYmplY3QgZWxlbWVudHMg
dXNpbmcgY2xhc3NpZC4KKyAgICAgICAgLy8gSUUxMCB0aHJvd3MgTm9Nb2RpZmljYXRpb25BbGxv
d2VkRXJyb3IgaWYgcGFyZW50IGlzIG51bGwsICMxMjEzMi4KKyAgICAgICAgaWYgKCBkZXN0LnBh
cmVudE5vZGUgKSB7CisgICAgICAgICAgICBkZXN0Lm91dGVySFRNTCA9IHNyYy5vdXRlckhUTUw7
CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGlzIHBhdGggYXBwZWFycyB1bmF2b2lkYWJsZSBm
b3IgSUU5LiBXaGVuIGNsb25pbmcgYW4gb2JqZWN0CisgICAgICAgIC8vIGVsZW1lbnQgaW4gSUU5
LCB0aGUgb3V0ZXJIVE1MIHN0cmF0ZWd5IGFib3ZlIGlzIG5vdCBzdWZmaWNpZW50LgorICAgICAg
ICAvLyBJZiB0aGUgc3JjIGhhcyBpbm5lckhUTUwgYW5kIHRoZSBkZXN0aW5hdGlvbiBkb2VzIG5v
dCwKKyAgICAgICAgLy8gY29weSB0aGUgc3JjLmlubmVySFRNTCBpbnRvIHRoZSBkZXN0LmlubmVy
SFRNTC4gIzEwMzI0CisgICAgICAgIGlmICggalF1ZXJ5LnN1cHBvcnQuaHRtbDVDbG9uZSAmJiAo
c3JjLmlubmVySFRNTCAmJiAhalF1ZXJ5LnRyaW0oZGVzdC5pbm5lckhUTUwpKSApIHsKKyAgICAg
ICAgICAgIGRlc3QuaW5uZXJIVE1MID0gc3JjLmlubmVySFRNTDsKKyAgICAgICAgfQorCisgICAg
fSBlbHNlIGlmICggbm9kZU5hbWUgPT09ICJpbnB1dCIgJiYgcmNoZWNrYWJsZVR5cGUudGVzdCgg
c3JjLnR5cGUgKSApIHsKKyAgICAgICAgLy8gSUU2LTggZmFpbHMgdG8gcGVyc2lzdCB0aGUgY2hl
Y2tlZCBzdGF0ZSBvZiBhIGNsb25lZCBjaGVja2JveAorICAgICAgICAvLyBvciByYWRpbyBidXR0
b24uIFdvcnNlLCBJRTYtNyBmYWlsIHRvIGdpdmUgdGhlIGNsb25lZCBlbGVtZW50CisgICAgICAg
IC8vIGEgY2hlY2tlZCBhcHBlYXJhbmNlIGlmIHRoZSBkZWZhdWx0Q2hlY2tlZCB2YWx1ZSBpc24n
dCBhbHNvIHNldAorCisgICAgICAgIGRlc3QuZGVmYXVsdENoZWNrZWQgPSBkZXN0LmNoZWNrZWQg
PSBzcmMuY2hlY2tlZDsKKworICAgICAgICAvLyBJRTYtNyBnZXQgY29uZnVzZWQgYW5kIGVuZCB1
cCBzZXR0aW5nIHRoZSB2YWx1ZSBvZiBhIGNsb25lZAorICAgICAgICAvLyBjaGVja2JveC9yYWRp
byBidXR0b24gdG8gYW4gZW1wdHkgc3RyaW5nIGluc3RlYWQgb2YgIm9uIgorICAgICAgICBpZiAo
IGRlc3QudmFsdWUgIT09IHNyYy52YWx1ZSApIHsKKyAgICAgICAgICAgIGRlc3QudmFsdWUgPSBz
cmMudmFsdWU7CisgICAgICAgIH0KKworICAgIC8vIElFNi04IGZhaWxzIHRvIHJldHVybiB0aGUg
c2VsZWN0ZWQgb3B0aW9uIHRvIHRoZSBkZWZhdWx0IHNlbGVjdGVkCisgICAgLy8gc3RhdGUgd2hl
biBjbG9uaW5nIG9wdGlvbnMKKyAgICB9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gIm9wdGlvbiIg
KSB7CisgICAgICAgIGRlc3Quc2VsZWN0ZWQgPSBzcmMuZGVmYXVsdFNlbGVjdGVkOworCisgICAg
Ly8gSUU2LTggZmFpbHMgdG8gc2V0IHRoZSBkZWZhdWx0VmFsdWUgdG8gdGhlIGNvcnJlY3QgdmFs
dWUgd2hlbgorICAgIC8vIGNsb25pbmcgb3RoZXIgdHlwZXMgb2YgaW5wdXQgZmllbGRzCisgICAg
fSBlbHNlIGlmICggbm9kZU5hbWUgPT09ICJpbnB1dCIgfHwgbm9kZU5hbWUgPT09ICJ0ZXh0YXJl
YSIgKSB7CisgICAgICAgIGRlc3QuZGVmYXVsdFZhbHVlID0gc3JjLmRlZmF1bHRWYWx1ZTsKKwor
ICAgIC8vIElFIGJsYW5rcyBjb250ZW50cyB3aGVuIGNsb25pbmcgc2NyaXB0cworICAgIH0gZWxz
ZSBpZiAoIG5vZGVOYW1lID09PSAic2NyaXB0IiAmJiBkZXN0LnRleHQgIT09IHNyYy50ZXh0ICkg
eworICAgICAgICBkZXN0LnRleHQgPSBzcmMudGV4dDsKKyAgICB9CisKKyAgICAvLyBFdmVudCBk
YXRhIGdldHMgcmVmZXJlbmNlZCBpbnN0ZWFkIG9mIGNvcGllZCBpZiB0aGUgZXhwYW5kbworICAg
IC8vIGdldHMgY29waWVkIHRvbworICAgIGRlc3QucmVtb3ZlQXR0cmlidXRlKCBqUXVlcnkuZXhw
YW5kbyApOworfQorCitqUXVlcnkuYnVpbGRGcmFnbWVudCA9IGZ1bmN0aW9uKCBhcmdzLCBjb250
ZXh0LCBzY3JpcHRzICkgeworICAgIHZhciBmcmFnbWVudCwgY2FjaGVhYmxlLCBjYWNoZWhpdCwK
KyAgICAgICAgZmlyc3QgPSBhcmdzWyAwIF07CisKKyAgICAvLyBTZXQgY29udGV4dCBmcm9tIHdo
YXQgbWF5IGNvbWUgaW4gYXMgdW5kZWZpbmVkIG9yIGEgalF1ZXJ5IGNvbGxlY3Rpb24gb3IgYSBu
b2RlCisgICAgLy8gVXBkYXRlZCB0byBmaXggIzEyMjY2IHdoZXJlIGFjY2Vzc2luZyBjb250ZXh0
WzBdIGNvdWxkIHRocm93IGFuIGV4Y2VwdGlvbiBpbiBJRTkvMTAgJgorICAgIC8vIGFsc28gZG91
YmxlcyBhcyBmaXggZm9yICM4OTUwIHdoZXJlIHBsYWluIG9iamVjdHMgY2F1c2VkIGNyZWF0ZURv
Y3VtZW50RnJhZ21lbnQgZXhjZXB0aW9uCisgICAgY29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1l
bnQ7CisgICAgY29udGV4dCA9ICFjb250ZXh0Lm5vZGVUeXBlICYmIGNvbnRleHRbMF0gfHwgY29u
dGV4dDsKKyAgICBjb250ZXh0ID0gY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQ7CisK
KyAgICAvLyBPbmx5IGNhY2hlICJzbWFsbCIgKDEvMiBLQikgSFRNTCBzdHJpbmdzIHRoYXQgYXJl
IGFzc29jaWF0ZWQgd2l0aCB0aGUgbWFpbiBkb2N1bWVudAorICAgIC8vIENsb25pbmcgb3B0aW9u
cyBsb3NlcyB0aGUgc2VsZWN0ZWQgc3RhdGUsIHNvIGRvbid0IGNhY2hlIHRoZW0KKyAgICAvLyBJ
RSA2IGRvZXNuJ3QgbGlrZSBpdCB3aGVuIHlvdSBwdXQgPG9iamVjdD4gb3IgPGVtYmVkPiBlbGVt
ZW50cyBpbiBhIGZyYWdtZW50CisgICAgLy8gQWxzbywgV2ViS2l0IGRvZXMgbm90IGNsb25lICdj
aGVja2VkJyBhdHRyaWJ1dGVzIG9uIGNsb25lTm9kZSwgc28gZG9uJ3QgY2FjaGUKKyAgICAvLyBM
YXN0bHksIElFNiw3LDggd2lsbCBub3QgY29ycmVjdGx5IHJldXNlIGNhY2hlZCBmcmFnbWVudHMg
dGhhdCB3ZXJlIGNyZWF0ZWQgZnJvbSB1bmtub3duIGVsZW1zICMxMDUwMQorICAgIGlmICggYXJn
cy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGZpcnN0ID09PSAic3RyaW5nIiAmJiBmaXJzdC5sZW5n
dGggPCA1MTIgJiYgY29udGV4dCA9PT0gZG9jdW1lbnQgJiYKKyAgICAgICAgZmlyc3QuY2hhckF0
KDApID09PSAiPCIgJiYgIXJub2NhY2hlLnRlc3QoIGZpcnN0ICkgJiYKKyAgICAgICAgKGpRdWVy
eS5zdXBwb3J0LmNoZWNrQ2xvbmUgfHwgIXJjaGVja2VkLnRlc3QoIGZpcnN0ICkpICYmCisgICAg
ICAgIChqUXVlcnkuc3VwcG9ydC5odG1sNUNsb25lIHx8ICFybm9zaGltY2FjaGUudGVzdCggZmly
c3QgKSkgKSB7CisKKyAgICAgICAgLy8gTWFyayBjYWNoZWFibGUgYW5kIGxvb2sgZm9yIGEgaGl0
CisgICAgICAgIGNhY2hlYWJsZSA9IHRydWU7CisgICAgICAgIGZyYWdtZW50ID0galF1ZXJ5LmZy
YWdtZW50c1sgZmlyc3QgXTsKKyAgICAgICAgY2FjaGVoaXQgPSBmcmFnbWVudCAhPT0gdW5kZWZp
bmVkOworICAgIH0KKworICAgIGlmICggIWZyYWdtZW50ICkgeworICAgICAgICBmcmFnbWVudCA9
IGNvbnRleHQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOworICAgICAgICBqUXVlcnkuY2xlYW4o
IGFyZ3MsIGNvbnRleHQsIGZyYWdtZW50LCBzY3JpcHRzICk7CisKKyAgICAgICAgLy8gVXBkYXRl
IHRoZSBjYWNoZSwgYnV0IG9ubHkgc3RvcmUgZmFsc2UKKyAgICAgICAgLy8gdW5sZXNzIHRoaXMg
aXMgYSBzZWNvbmQgcGFyc2luZyBvZiB0aGUgc2FtZSBjb250ZW50CisgICAgICAgIGlmICggY2Fj
aGVhYmxlICkgeworICAgICAgICAgICAgalF1ZXJ5LmZyYWdtZW50c1sgZmlyc3QgXSA9IGNhY2hl
aGl0ICYmIGZyYWdtZW50OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHsgZnJhZ21l
bnQ6IGZyYWdtZW50LCBjYWNoZWFibGU6IGNhY2hlYWJsZSB9OworfTsKKworalF1ZXJ5LmZyYWdt
ZW50cyA9IHt9OworCitqUXVlcnkuZWFjaCh7CisgICAgYXBwZW5kVG86ICJhcHBlbmQiLAorICAg
IHByZXBlbmRUbzogInByZXBlbmQiLAorICAgIGluc2VydEJlZm9yZTogImJlZm9yZSIsCisgICAg
aW5zZXJ0QWZ0ZXI6ICJhZnRlciIsCisgICAgcmVwbGFjZUFsbDogInJlcGxhY2VXaXRoIgorfSwg
ZnVuY3Rpb24oIG5hbWUsIG9yaWdpbmFsICkgeworICAgIGpRdWVyeS5mblsgbmFtZSBdID0gZnVu
Y3Rpb24oIHNlbGVjdG9yICkgeworICAgICAgICB2YXIgZWxlbXMsCisgICAgICAgICAgICBpID0g
MCwKKyAgICAgICAgICAgIHJldCA9IFtdLAorICAgICAgICAgICAgaW5zZXJ0ID0galF1ZXJ5KCBz
ZWxlY3RvciApLAorICAgICAgICAgICAgbCA9IGluc2VydC5sZW5ndGgsCisgICAgICAgICAgICBw
YXJlbnQgPSB0aGlzLmxlbmd0aCA9PT0gMSAmJiB0aGlzWzBdLnBhcmVudE5vZGU7CisKKyAgICAg
ICAgaWYgKCAocGFyZW50ID09IG51bGwgfHwgcGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSA9PT0g
MTEgJiYgcGFyZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAxKSAmJiBsID09PSAxICkgeworICAg
ICAgICAgICAgaW5zZXJ0WyBvcmlnaW5hbCBdKCB0aGlzWzBdICk7CisgICAgICAgICAgICByZXR1
cm4gdGhpczsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoIDsgaSA8IGw7IGkr
KyApIHsKKyAgICAgICAgICAgICAgICBlbGVtcyA9ICggaSA+IDAgPyB0aGlzLmNsb25lKHRydWUp
IDogdGhpcyApLmdldCgpOworICAgICAgICAgICAgICAgIGpRdWVyeSggaW5zZXJ0W2ldIClbIG9y
aWdpbmFsIF0oIGVsZW1zICk7CisgICAgICAgICAgICAgICAgcmV0ID0gcmV0LmNvbmNhdCggZWxl
bXMgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNr
KCByZXQsIG5hbWUsIGluc2VydC5zZWxlY3RvciApOworICAgICAgICB9CisgICAgfTsKK30pOwor
CitmdW5jdGlvbiBnZXRBbGwoIGVsZW0gKSB7CisgICAgaWYgKCB0eXBlb2YgZWxlbS5nZXRFbGVt
ZW50c0J5VGFnTmFtZSAhPT0gInVuZGVmaW5lZCIgKSB7CisgICAgICAgIHJldHVybiBlbGVtLmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCAiKiIgKTsKKworICAgIH0gZWxzZSBpZiAoIHR5cGVvZiBlbGVt
LnF1ZXJ5U2VsZWN0b3JBbGwgIT09ICJ1bmRlZmluZWQiICkgeworICAgICAgICByZXR1cm4gZWxl
bS5xdWVyeVNlbGVjdG9yQWxsKCAiKiIgKTsKKworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVy
biBbXTsKKyAgICB9Cit9CisKKy8vIFVzZWQgaW4gY2xlYW4sIGZpeGVzIHRoZSBkZWZhdWx0Q2hl
Y2tlZCBwcm9wZXJ0eQorZnVuY3Rpb24gZml4RGVmYXVsdENoZWNrZWQoIGVsZW0gKSB7CisgICAg
aWYgKCByY2hlY2thYmxlVHlwZS50ZXN0KCBlbGVtLnR5cGUgKSApIHsKKyAgICAgICAgZWxlbS5k
ZWZhdWx0Q2hlY2tlZCA9IGVsZW0uY2hlY2tlZDsKKyAgICB9Cit9CisKK2pRdWVyeS5leHRlbmQo
eworICAgIGNsb25lOiBmdW5jdGlvbiggZWxlbSwgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRF
dmVudHMgKSB7CisgICAgICAgIHZhciBzcmNFbGVtZW50cywKKyAgICAgICAgICAgIGRlc3RFbGVt
ZW50cywKKyAgICAgICAgICAgIGksCisgICAgICAgICAgICBjbG9uZTsKKworICAgICAgICBpZiAo
IGpRdWVyeS5zdXBwb3J0Lmh0bWw1Q2xvbmUgfHwgalF1ZXJ5LmlzWE1MRG9jKGVsZW0pIHx8ICFy
bm9zaGltY2FjaGUudGVzdCggIjwiICsgZWxlbS5ub2RlTmFtZSArICI+IiApICkgeworICAgICAg
ICAgICAgY2xvbmUgPSBlbGVtLmNsb25lTm9kZSggdHJ1ZSApOworCisgICAgICAgIC8vIElFPD04
IGRvZXMgbm90IHByb3Blcmx5IGNsb25lIGRldGFjaGVkLCB1bmtub3duIGVsZW1lbnQgbm9kZXMK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZyYWdtZW50RGl2LmlubmVySFRNTCA9IGVs
ZW0ub3V0ZXJIVE1MOworICAgICAgICAgICAgZnJhZ21lbnREaXYucmVtb3ZlQ2hpbGQoIGNsb25l
ID0gZnJhZ21lbnREaXYuZmlyc3RDaGlsZCApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCAo
IWpRdWVyeS5zdXBwb3J0Lm5vQ2xvbmVFdmVudCB8fCAhalF1ZXJ5LnN1cHBvcnQubm9DbG9uZUNo
ZWNrZWQpICYmCisgICAgICAgICAgICAgICAgKGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgZWxlbS5u
b2RlVHlwZSA9PT0gMTEpICYmICFqUXVlcnkuaXNYTUxEb2MoZWxlbSkgKSB7CisgICAgICAgICAg
ICAvLyBJRSBjb3BpZXMgZXZlbnRzIGJvdW5kIHZpYSBhdHRhY2hFdmVudCB3aGVuIHVzaW5nIGNs
b25lTm9kZS4KKyAgICAgICAgICAgIC8vIENhbGxpbmcgZGV0YWNoRXZlbnQgb24gdGhlIGNsb25l
IHdpbGwgYWxzbyByZW1vdmUgdGhlIGV2ZW50cworICAgICAgICAgICAgLy8gZnJvbSB0aGUgb3Jp
Z2luYWwuIEluIG9yZGVyIHRvIGdldCBhcm91bmQgdGhpcywgd2UgdXNlIHNvbWUKKyAgICAgICAg
ICAgIC8vIHByb3ByaWV0YXJ5IG1ldGhvZHMgdG8gY2xlYXIgdGhlIGV2ZW50cy4gVGhhbmtzIHRv
IE1vb1Rvb2xzCisgICAgICAgICAgICAvLyBndXlzIGZvciB0aGlzIGhvdG5lc3MuCisKKyAgICAg
ICAgICAgIGNsb25lRml4QXR0cmlidXRlcyggZWxlbSwgY2xvbmUgKTsKKworICAgICAgICAgICAg
Ly8gVXNpbmcgU2l6emxlIGhlcmUgaXMgY3Jhenkgc2xvdywgc28gd2UgdXNlIGdldEVsZW1lbnRz
QnlUYWdOYW1lIGluc3RlYWQKKyAgICAgICAgICAgIHNyY0VsZW1lbnRzID0gZ2V0QWxsKCBlbGVt
ICk7CisgICAgICAgICAgICBkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lICk7CisKKyAgICAg
ICAgICAgIC8vIFdlaXJkIGl0ZXJhdGlvbiBiZWNhdXNlIElFIHdpbGwgcmVwbGFjZSB0aGUgbGVu
Z3RoIHByb3BlcnR5CisgICAgICAgICAgICAvLyB3aXRoIGFuIGVsZW1lbnQgaWYgeW91IGFyZSBj
bG9uaW5nIHRoZSBib2R5IGFuZCBvbmUgb2YgdGhlCisgICAgICAgICAgICAvLyBlbGVtZW50cyBv
biB0aGUgcGFnZSBoYXMgYSBuYW1lIG9yIGlkIG9mICJsZW5ndGgiCisgICAgICAgICAgICBmb3Ig
KCBpID0gMDsgc3JjRWxlbWVudHNbaV07ICsraSApIHsKKyAgICAgICAgICAgICAgICAvLyBFbnN1
cmUgdGhhdCB0aGUgZGVzdGluYXRpb24gbm9kZSBpcyBub3QgbnVsbDsgRml4ZXMgIzk1ODcKKyAg
ICAgICAgICAgICAgICBpZiAoIGRlc3RFbGVtZW50c1tpXSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgY2xvbmVGaXhBdHRyaWJ1dGVzKCBzcmNFbGVtZW50c1tpXSwgZGVzdEVsZW1lbnRzW2ldICk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
Ly8gQ29weSB0aGUgZXZlbnRzIGZyb20gdGhlIG9yaWdpbmFsIHRvIHRoZSBjbG9uZQorICAgICAg
ICBpZiAoIGRhdGFBbmRFdmVudHMgKSB7CisgICAgICAgICAgICBjbG9uZUNvcHlFdmVudCggZWxl
bSwgY2xvbmUgKTsKKworICAgICAgICAgICAgaWYgKCBkZWVwRGF0YUFuZEV2ZW50cyApIHsKKyAg
ICAgICAgICAgICAgICBzcmNFbGVtZW50cyA9IGdldEFsbCggZWxlbSApOworICAgICAgICAgICAg
ICAgIGRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUgKTsKKworICAgICAgICAgICAgICAgIGZv
ciAoIGkgPSAwOyBzcmNFbGVtZW50c1tpXTsgKytpICkgeworICAgICAgICAgICAgICAgICAgICBj
bG9uZUNvcHlFdmVudCggc3JjRWxlbWVudHNbaV0sIGRlc3RFbGVtZW50c1tpXSApOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHNyY0VsZW1l
bnRzID0gZGVzdEVsZW1lbnRzID0gbnVsbDsKKworICAgICAgICAvLyBSZXR1cm4gdGhlIGNsb25l
ZCBzZXQKKyAgICAgICAgcmV0dXJuIGNsb25lOworICAgIH0sCisKKyAgICBjbGVhbjogZnVuY3Rp
b24oIGVsZW1zLCBjb250ZXh0LCBmcmFnbWVudCwgc2NyaXB0cyApIHsKKyAgICAgICAgdmFyIGks
IGosIGVsZW0sIHRhZywgd3JhcCwgZGVwdGgsIGRpdiwgaGFzQm9keSwgdGJvZHksIGxlbiwgaGFu
ZGxlU2NyaXB0LCBqc1RhZ3MsCisgICAgICAgICAgICBzYWZlID0gY29udGV4dCA9PT0gZG9jdW1l
bnQgJiYgc2FmZUZyYWdtZW50LAorICAgICAgICAgICAgcmV0ID0gW107CisKKyAgICAgICAgLy8g
RW5zdXJlIHRoYXQgY29udGV4dCBpcyBhIGRvY3VtZW50CisgICAgICAgIGlmICggIWNvbnRleHQg
fHwgdHlwZW9mIGNvbnRleHQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCA9PT0gInVuZGVmaW5lZCIg
KSB7CisgICAgICAgICAgICBjb250ZXh0ID0gZG9jdW1lbnQ7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBVc2UgdGhlIGFscmVhZHktY3JlYXRlZCBzYWZlIGZyYWdtZW50IGlmIGNvbnRleHQgcGVy
bWl0cworICAgICAgICBmb3IgKCBpID0gMDsgKGVsZW0gPSBlbGVtc1tpXSkgIT0gbnVsbDsgaSsr
ICkgeworICAgICAgICAgICAgaWYgKCB0eXBlb2YgZWxlbSA9PT0gIm51bWJlciIgKSB7CisgICAg
ICAgICAgICAgICAgZWxlbSArPSAiIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KCAhZWxlbSApIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgLy8gQ29udmVydCBodG1sIHN0cmluZyBpbnRvIERPTSBub2RlcworICAgICAg
ICAgICAgaWYgKCB0eXBlb2YgZWxlbSA9PT0gInN0cmluZyIgKSB7CisgICAgICAgICAgICAgICAg
aWYgKCAhcmh0bWwudGVzdCggZWxlbSApICkgeworICAgICAgICAgICAgICAgICAgICBlbGVtID0g
Y29udGV4dC5jcmVhdGVUZXh0Tm9kZSggZWxlbSApOworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIEVuc3VyZSBhIHNhZmUgY29udGFpbmVyIGluIHdoaWNo
IHRvIHJlbmRlciB0aGUgaHRtbAorICAgICAgICAgICAgICAgICAgICBzYWZlID0gc2FmZSB8fCBj
cmVhdGVTYWZlRnJhZ21lbnQoIGNvbnRleHQgKTsKKyAgICAgICAgICAgICAgICAgICAgZGl2ID0g
Y29udGV4dC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgICAgICAgICAgICAgc2FmZS5h
cHBlbmRDaGlsZCggZGl2ICk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gRml4ICJYSFRNTCIt
c3R5bGUgdGFncyBpbiBhbGwgYnJvd3NlcnMKKyAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGVs
ZW0ucmVwbGFjZShyeGh0bWxUYWcsICI8JDE+PC8kMj4iKTsKKworICAgICAgICAgICAgICAgICAg
ICAvLyBHbyB0byBodG1sIGFuZCBiYWNrLCB0aGVuIHBlZWwgb2ZmIGV4dHJhIHdyYXBwZXJzCisg
ICAgICAgICAgICAgICAgICAgIHRhZyA9ICggcnRhZ05hbWUuZXhlYyggZWxlbSApIHx8IFsiIiwg
IiJdIClbMV0udG9Mb3dlckNhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgd3JhcCA9IHdyYXBN
YXBbIHRhZyBdIHx8IHdyYXBNYXAuX2RlZmF1bHQ7CisgICAgICAgICAgICAgICAgICAgIGRlcHRo
ID0gd3JhcFswXTsKKyAgICAgICAgICAgICAgICAgICAgZGl2LmlubmVySFRNTCA9IHdyYXBbMV0g
KyBlbGVtICsgd3JhcFsyXTsKKworICAgICAgICAgICAgICAgICAgICAvLyBNb3ZlIHRvIHRoZSBy
aWdodCBkZXB0aAorICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGRlcHRoLS0gKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBkaXYgPSBkaXYubGFzdENoaWxkOworICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIElFJ3MgYXV0b2luc2VydGVk
IDx0Ym9keT4gZnJvbSB0YWJsZSBmcmFnbWVudHMKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAh
alF1ZXJ5LnN1cHBvcnQudGJvZHkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0
cmluZyB3YXMgYSA8dGFibGU+LCAqbWF5KiBoYXZlIHNwdXJpb3VzIDx0Ym9keT4KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGhhc0JvZHkgPSBydGJvZHkudGVzdChlbGVtKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0Ym9keSA9IHRhZyA9PT0gInRhYmxlIiAmJiAhaGFzQm9keSA/Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdi5maXJzdENoaWxkICYmIGRpdi5maXJz
dENoaWxkLmNoaWxkTm9kZXMgOgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFN0cmluZyB3YXMgYSBiYXJlIDx0aGVhZD4gb3IgPHRmb290PgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3cmFwWzFdID09PSAiPHRhYmxlPiIgJiYgIWhhc0JvZHkgPworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2LmNoaWxkTm9kZXMgOgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgW107CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoIGogPSB0Ym9keS5sZW5ndGggLSAxOyBqID49IDAgOyAtLWogKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkubm9kZU5hbWUoIHRib2R5WyBqIF0sICJ0Ym9k
eSIgKSAmJiAhdGJvZHlbIGogXS5jaGlsZE5vZGVzLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGJvZHlbIGogXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCB0Ym9k
eVsgaiBdICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
Ly8gSUUgY29tcGxldGVseSBraWxscyBsZWFkaW5nIHdoaXRlc3BhY2Ugd2hlbiBpbm5lckhUTUwg
aXMgdXNlZAorICAgICAgICAgICAgICAgICAgICBpZiAoICFqUXVlcnkuc3VwcG9ydC5sZWFkaW5n
V2hpdGVzcGFjZSAmJiBybGVhZGluZ1doaXRlc3BhY2UudGVzdCggZWxlbSApICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgZGl2Lmluc2VydEJlZm9yZSggY29udGV4dC5jcmVhdGVUZXh0Tm9k
ZSggcmxlYWRpbmdXaGl0ZXNwYWNlLmV4ZWMoZWxlbSlbMF0gKSwgZGl2LmZpcnN0Q2hpbGQgKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGVsZW0gPSBkaXYu
Y2hpbGROb2RlczsKKworICAgICAgICAgICAgICAgICAgICAvLyBUYWtlIG91dCBvZiBmcmFnbWVu
dCBjb250YWluZXIgKHdlIG5lZWQgYSBmcmVzaCBkaXYgZWFjaCB0aW1lKQorICAgICAgICAgICAg
ICAgICAgICBkaXYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggZGl2ICk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgKSB7
CisgICAgICAgICAgICAgICAgcmV0LnB1c2goIGVsZW0gKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgalF1ZXJ5Lm1lcmdlKCByZXQsIGVsZW0gKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEZpeCAjMTEzNTY6IENsZWFyIGVsZW1lbnRzIGZy
b20gc2FmZUZyYWdtZW50CisgICAgICAgIGlmICggZGl2ICkgeworICAgICAgICAgICAgZWxlbSA9
IGRpdiA9IHNhZmUgPSBudWxsOworICAgICAgICB9CisKKyAgICAgICAgLy8gUmVzZXQgZGVmYXVs
dENoZWNrZWQgZm9yIGFueSByYWRpb3MgYW5kIGNoZWNrYm94ZXMKKyAgICAgICAgLy8gYWJvdXQg
dG8gYmUgYXBwZW5kZWQgdG8gdGhlIERPTSBpbiBJRSA2LzcgKCM4MDYwKQorICAgICAgICBpZiAo
ICFqUXVlcnkuc3VwcG9ydC5hcHBlbmRDaGVja2VkICkgeworICAgICAgICAgICAgZm9yICggaSA9
IDA7IChlbGVtID0gcmV0W2ldKSAhPSBudWxsOyBpKysgKSB7CisgICAgICAgICAgICAgICAgaWYg
KCBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJpbnB1dCIgKSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgZml4RGVmYXVsdENoZWNrZWQoIGVsZW0gKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KCB0eXBlb2YgZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gInVuZGVmaW5lZCIgKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ncmVwKCBlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1l
KCJpbnB1dCIpLCBmaXhEZWZhdWx0Q2hlY2tlZCApOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEFwcGVuZCBlbGVtZW50cyB0byBhIHBy
b3ZpZGVkIGRvY3VtZW50IGZyYWdtZW50CisgICAgICAgIGlmICggZnJhZ21lbnQgKSB7CisgICAg
ICAgICAgICAvLyBTcGVjaWFsIGhhbmRsaW5nIG9mIGVhY2ggc2NyaXB0IGVsZW1lbnQKKyAgICAg
ICAgICAgIGhhbmRsZVNjcmlwdCA9IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAg
IC8vIENoZWNrIGlmIHdlIGNvbnNpZGVyIGl0IGV4ZWN1dGFibGUKKyAgICAgICAgICAgICAgICBp
ZiAoICFlbGVtLnR5cGUgfHwgcnNjcmlwdFR5cGUudGVzdCggZWxlbS50eXBlICkgKSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIERldGFjaCB0aGUgc2NyaXB0IGFuZCBzdG9yZSBpdCBpbiB0aGUg
c2NyaXB0cyBhcnJheSAoaWYgcHJvdmlkZWQpIG9yIHRoZSBmcmFnbWVudAorICAgICAgICAgICAg
ICAgICAgICAvLyBSZXR1cm4gdHJ1dGh5IHRvIGluZGljYXRlIHRoYXQgaXQgaGFzIGJlZW4gaGFu
ZGxlZAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NyaXB0cyA/CisgICAgICAgICAgICAg
ICAgICAgICAgICBzY3JpcHRzLnB1c2goIGVsZW0ucGFyZW50Tm9kZSA/IGVsZW0ucGFyZW50Tm9k
ZS5yZW1vdmVDaGlsZCggZWxlbSApIDogZWxlbSApIDoKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZyYWdtZW50LmFwcGVuZENoaWxkKCBlbGVtICk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfTsKKworICAgICAgICAgICAgZm9yICggaSA9IDA7IChlbGVtID0gcmV0W2ldKSAhPSBu
dWxsOyBpKysgKSB7CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgZG9uZSBhZnRl
ciBoYW5kbGluZyBhbiBleGVjdXRhYmxlIHNjcmlwdAorICAgICAgICAgICAgICAgIGlmICggISgg
alF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAic2NyaXB0IiApICYmIGhhbmRsZVNjcmlwdCggZWxlbSAp
ICkgKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEFwcGVuZCB0byBmcmFnbWVudCBhbmQgaGFu
ZGxlIGVtYmVkZGVkIHNjcmlwdHMKKyAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQuYXBwZW5k
Q2hpbGQoIGVsZW0gKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgZWxlbS5nZXRF
bGVtZW50c0J5VGFnTmFtZSAhPT0gInVuZGVmaW5lZCIgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBoYW5kbGVTY3JpcHQgYWx0ZXJzIHRoZSBET00sIHNvIHVzZSBqUXVlcnkubWVyZ2Ug
dG8gZW5zdXJlIHNuYXBzaG90IGl0ZXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAganNU
YWdzID0galF1ZXJ5LmdyZXAoIGpRdWVyeS5tZXJnZSggW10sIGVsZW0uZ2V0RWxlbWVudHNCeVRh
Z05hbWUoInNjcmlwdCIpICksIGhhbmRsZVNjcmlwdCApOworCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBTcGxpY2UgdGhlIHNjcmlwdHMgaW50byByZXQgYWZ0ZXIgdGhlaXIgZm9ybWVyIGFu
Y2VzdG9yIGFuZCBhZHZhbmNlIG91ciBpbmRleCBiZXlvbmQgdGhlbQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0LnNwbGljZS5hcHBseSggcmV0LCBbaSArIDEsIDBdLmNvbmNhdCgganNUYWdz
ICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0ganNUYWdzLmxlbmd0aDsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiByZXQ7CisgICAgfSwKKworICAgIGNsZWFuRGF0YTogZnVu
Y3Rpb24oIGVsZW1zLCAvKiBpbnRlcm5hbCAqLyBhY2NlcHREYXRhICkgeworICAgICAgICB2YXIg
ZGF0YSwgaWQsIGVsZW0sIHR5cGUsCisgICAgICAgICAgICBpID0gMCwKKyAgICAgICAgICAgIGlu
dGVybmFsS2V5ID0galF1ZXJ5LmV4cGFuZG8sCisgICAgICAgICAgICBjYWNoZSA9IGpRdWVyeS5j
YWNoZSwKKyAgICAgICAgICAgIGRlbGV0ZUV4cGFuZG8gPSBqUXVlcnkuc3VwcG9ydC5kZWxldGVF
eHBhbmRvLAorICAgICAgICAgICAgc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsOworCisg
ICAgICAgIGZvciAoIDsgKGVsZW0gPSBlbGVtc1tpXSkgIT0gbnVsbDsgaSsrICkgeworCisgICAg
ICAgICAgICBpZiAoIGFjY2VwdERhdGEgfHwgalF1ZXJ5LmFjY2VwdERhdGEoIGVsZW0gKSApIHsK
KworICAgICAgICAgICAgICAgIGlkID0gZWxlbVsgaW50ZXJuYWxLZXkgXTsKKyAgICAgICAgICAg
ICAgICBkYXRhID0gaWQgJiYgY2FjaGVbIGlkIF07CisKKyAgICAgICAgICAgICAgICBpZiAoIGRh
dGEgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggZGF0YS5ldmVudHMgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKCB0eXBlIGluIGRhdGEuZXZlbnRzICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggc3BlY2lhbFsgdHlwZSBdICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICk7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgc2hvcnRjdXQgdG8gYXZv
aWQgalF1ZXJ5LmV2ZW50LnJlbW92ZSdzIG92ZXJoZWFkCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJl
bW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBkYXRhLmhhbmRsZSApOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBjYWNoZSBvbmx5IGlmIGl0IHdh
cyBub3QgYWxyZWFkeSByZW1vdmVkIGJ5IGpRdWVyeS5ldmVudC5yZW1vdmUKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCBjYWNoZVsgaWQgXSApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAg
ZGVsZXRlIGNhY2hlWyBpZCBdOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJRSBkb2Vz
IG5vdCBhbGxvdyB1cyB0byBkZWxldGUgZXhwYW5kbyBwcm9wZXJ0aWVzIGZyb20gbm9kZXMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBub3IgZG9lcyBpdCBoYXZlIGEgcmVtb3ZlQXR0cmli
dXRlIGZ1bmN0aW9uIG9uIERvY3VtZW50IG5vZGVzOworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gd2UgbXVzdCBoYW5kbGUgYWxsIG9mIHRoZXNlIGNhc2VzCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGRlbGV0ZUV4cGFuZG8gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVsZXRlIGVsZW1bIGludGVybmFsS2V5IF07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoIGVsZW0ucmVtb3ZlQXR0cmlidXRlICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBpbnRlcm5hbEtleSApOworCisgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1b
IGludGVybmFsS2V5IF0gPSBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZGVsZXRlZElkcy5wdXNoKCBpZCApOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorfSk7CisvLyBMaW1pdCBzY29wZSBwb2xsdXRpb24gZnJvbSBhbnkgZGVwcmVj
YXRlZCBBUEkKKyhmdW5jdGlvbigpIHsKKwordmFyIG1hdGNoZWQsIGJyb3dzZXI7CisKKy8vIFVz
ZSBvZiBqUXVlcnkuYnJvd3NlciBpcyBmcm93bmVkIHVwb24uCisvLyBNb3JlIGRldGFpbHM6IGh0
dHA6Ly9hcGkuanF1ZXJ5LmNvbS9qUXVlcnkuYnJvd3NlcgorLy8galF1ZXJ5LnVhTWF0Y2ggbWFp
bnRhaW5lZCBmb3IgYmFjay1jb21wYXQKK2pRdWVyeS51YU1hdGNoID0gZnVuY3Rpb24oIHVhICkg
eworICAgIHVhID0gdWEudG9Mb3dlckNhc2UoKTsKKworICAgIHZhciBtYXRjaCA9IC8oY2hyb21l
KVsgXC9dKFtcdy5dKykvLmV4ZWMoIHVhICkgfHwKKyAgICAgICAgLyh3ZWJraXQpWyBcL10oW1x3
Ll0rKS8uZXhlYyggdWEgKSB8fAorICAgICAgICAvKG9wZXJhKSg/Oi4qdmVyc2lvbnwpWyBcL10o
W1x3Ll0rKS8uZXhlYyggdWEgKSB8fAorICAgICAgICAvKG1zaWUpIChbXHcuXSspLy5leGVjKCB1
YSApIHx8CisgICAgICAgIHVhLmluZGV4T2YoImNvbXBhdGlibGUiKSA8IDAgJiYgLyhtb3ppbGxh
KSg/Oi4qPyBydjooW1x3Ll0rKXwpLy5leGVjKCB1YSApIHx8CisgICAgICAgIFtdOworCisgICAg
cmV0dXJuIHsKKyAgICAgICAgYnJvd3NlcjogbWF0Y2hbIDEgXSB8fCAiIiwKKyAgICAgICAgdmVy
c2lvbjogbWF0Y2hbIDIgXSB8fCAiMCIKKyAgICB9OworfTsKKworbWF0Y2hlZCA9IGpRdWVyeS51
YU1hdGNoKCBuYXZpZ2F0b3IudXNlckFnZW50ICk7Citicm93c2VyID0ge307CisKK2lmICggbWF0
Y2hlZC5icm93c2VyICkgeworICAgIGJyb3dzZXJbIG1hdGNoZWQuYnJvd3NlciBdID0gdHJ1ZTsK
KyAgICBicm93c2VyLnZlcnNpb24gPSBtYXRjaGVkLnZlcnNpb247Cit9CisKKy8vIENocm9tZSBp
cyBXZWJraXQsIGJ1dCBXZWJraXQgaXMgYWxzbyBTYWZhcmkuCitpZiAoIGJyb3dzZXIuY2hyb21l
ICkgeworICAgIGJyb3dzZXIud2Via2l0ID0gdHJ1ZTsKK30gZWxzZSBpZiAoIGJyb3dzZXIud2Vi
a2l0ICkgeworICAgIGJyb3dzZXIuc2FmYXJpID0gdHJ1ZTsKK30KKworalF1ZXJ5LmJyb3dzZXIg
PSBicm93c2VyOworCitqUXVlcnkuc3ViID0gZnVuY3Rpb24oKSB7CisgICAgZnVuY3Rpb24galF1
ZXJ5U3ViKCBzZWxlY3RvciwgY29udGV4dCApIHsKKyAgICAgICAgcmV0dXJuIG5ldyBqUXVlcnlT
dWIuZm4uaW5pdCggc2VsZWN0b3IsIGNvbnRleHQgKTsKKyAgICB9CisgICAgalF1ZXJ5LmV4dGVu
ZCggdHJ1ZSwgalF1ZXJ5U3ViLCB0aGlzICk7CisgICAgalF1ZXJ5U3ViLnN1cGVyY2xhc3MgPSB0
aGlzOworICAgIGpRdWVyeVN1Yi5mbiA9IGpRdWVyeVN1Yi5wcm90b3R5cGUgPSB0aGlzKCk7Cisg
ICAgalF1ZXJ5U3ViLmZuLmNvbnN0cnVjdG9yID0galF1ZXJ5U3ViOworICAgIGpRdWVyeVN1Yi5z
dWIgPSB0aGlzLnN1YjsKKyAgICBqUXVlcnlTdWIuZm4uaW5pdCA9IGZ1bmN0aW9uIGluaXQoIHNl
bGVjdG9yLCBjb250ZXh0ICkgeworICAgICAgICBpZiAoIGNvbnRleHQgJiYgY29udGV4dCBpbnN0
YW5jZW9mIGpRdWVyeSAmJiAhKGNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnlTdWIpICkgeworICAg
ICAgICAgICAgY29udGV4dCA9IGpRdWVyeVN1YiggY29udGV4dCApOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIGpRdWVyeS5mbi5pbml0LmNhbGwoIHRoaXMsIHNlbGVjdG9yLCBjb250ZXh0
LCByb290alF1ZXJ5U3ViICk7CisgICAgfTsKKyAgICBqUXVlcnlTdWIuZm4uaW5pdC5wcm90b3R5
cGUgPSBqUXVlcnlTdWIuZm47CisgICAgdmFyIHJvb3RqUXVlcnlTdWIgPSBqUXVlcnlTdWIoZG9j
dW1lbnQpOworICAgIHJldHVybiBqUXVlcnlTdWI7Cit9OworCit9KSgpOwordmFyIGN1ckNTUywg
aWZyYW1lLCBpZnJhbWVEb2MsCisgICAgcmFscGhhID0gL2FscGhhXChbXildKlwpL2ksCisgICAg
cm9wYWNpdHkgPSAvb3BhY2l0eT0oW14pXSopLywKKyAgICBycG9zaXRpb24gPSAvXih0b3B8cmln
aHR8Ym90dG9tfGxlZnQpJC8sCisgICAgLy8gc3dhcHBhYmxlIGlmIGRpc3BsYXkgaXMgbm9uZSBv
ciBzdGFydHMgd2l0aCB0YWJsZSBleGNlcHQgInRhYmxlIiwgInRhYmxlLWNlbGwiLCBvciAidGFi
bGUtY2FwdGlvbiIKKyAgICAvLyBzZWUgaGVyZSBmb3IgZGlzcGxheSB2YWx1ZXM6IGh0dHBzOi8v
ZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ1NTL2Rpc3BsYXkKKyAgICByZGlzcGxh
eXN3YXAgPSAvXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sCisgICAgcm1hcmdpbiA9IC9ebWFy
Z2luLywKKyAgICBybnVtc3BsaXQgPSBuZXcgUmVnRXhwKCAiXigiICsgY29yZV9wbnVtICsgIiko
LiopJCIsICJpIiApLAorICAgIHJudW1ub25weCA9IG5ldyBSZWdFeHAoICJeKCIgKyBjb3JlX3Bu
dW0gKyAiKSg/IXB4KVthLXolXSskIiwgImkiICksCisgICAgcnJlbE51bSA9IG5ldyBSZWdFeHAo
ICJeKFstK10pPSgiICsgY29yZV9wbnVtICsgIikiLCAiaSIgKSwKKyAgICBlbGVtZGlzcGxheSA9
IHsgQk9EWTogImJsb2NrIiB9LAorCisgICAgY3NzU2hvdyA9IHsgcG9zaXRpb246ICJhYnNvbHV0
ZSIsIHZpc2liaWxpdHk6ICJoaWRkZW4iLCBkaXNwbGF5OiAiYmxvY2siIH0sCisgICAgY3NzTm9y
bWFsVHJhbnNmb3JtID0geworICAgICAgICBsZXR0ZXJTcGFjaW5nOiAwLAorICAgICAgICBmb250
V2VpZ2h0OiA0MDAKKyAgICB9LAorCisgICAgY3NzRXhwYW5kID0gWyAiVG9wIiwgIlJpZ2h0Iiwg
IkJvdHRvbSIsICJMZWZ0IiBdLAorICAgIGNzc1ByZWZpeGVzID0gWyAiV2Via2l0IiwgIk8iLCAi
TW96IiwgIm1zIiBdLAorCisgICAgZXZlbnRzVG9nZ2xlID0galF1ZXJ5LmZuLnRvZ2dsZTsKKwor
Ly8gcmV0dXJuIGEgY3NzIHByb3BlcnR5IG1hcHBlZCB0byBhIHBvdGVudGlhbGx5IHZlbmRvciBw
cmVmaXhlZCBwcm9wZXJ0eQorZnVuY3Rpb24gdmVuZG9yUHJvcE5hbWUoIHN0eWxlLCBuYW1lICkg
eworCisgICAgLy8gc2hvcnRjdXQgZm9yIG5hbWVzIHRoYXQgYXJlIG5vdCB2ZW5kb3IgcHJlZml4
ZWQKKyAgICBpZiAoIG5hbWUgaW4gc3R5bGUgKSB7CisgICAgICAgIHJldHVybiBuYW1lOworICAg
IH0KKworICAgIC8vIGNoZWNrIGZvciB2ZW5kb3IgcHJlZml4ZWQgbmFtZXMKKyAgICB2YXIgY2Fw
TmFtZSA9IG5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKDEpLAorICAg
ICAgICBvcmlnTmFtZSA9IG5hbWUsCisgICAgICAgIGkgPSBjc3NQcmVmaXhlcy5sZW5ndGg7CisK
KyAgICB3aGlsZSAoIGktLSApIHsKKyAgICAgICAgbmFtZSA9IGNzc1ByZWZpeGVzWyBpIF0gKyBj
YXBOYW1lOworICAgICAgICBpZiAoIG5hbWUgaW4gc3R5bGUgKSB7CisgICAgICAgICAgICByZXR1
cm4gbmFtZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBvcmlnTmFtZTsKK30KKwor
ZnVuY3Rpb24gaXNIaWRkZW4oIGVsZW0sIGVsICkgeworICAgIGVsZW0gPSBlbCB8fCBlbGVtOwor
ICAgIHJldHVybiBqUXVlcnkuY3NzKCBlbGVtLCAiZGlzcGxheSIgKSA9PT0gIm5vbmUiIHx8ICFq
UXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApOworfQorCitmdW5jdGlv
biBzaG93SGlkZSggZWxlbWVudHMsIHNob3cgKSB7CisgICAgdmFyIGVsZW0sIGRpc3BsYXksCisg
ICAgICAgIHZhbHVlcyA9IFtdLAorICAgICAgICBpbmRleCA9IDAsCisgICAgICAgIGxlbmd0aCA9
IGVsZW1lbnRzLmxlbmd0aDsKKworICAgIGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4Kysg
KSB7CisgICAgICAgIGVsZW0gPSBlbGVtZW50c1sgaW5kZXggXTsKKyAgICAgICAgaWYgKCAhZWxl
bS5zdHlsZSApIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHZh
bHVlc1sgaW5kZXggXSA9IGpRdWVyeS5fZGF0YSggZWxlbSwgIm9sZGRpc3BsYXkiICk7CisgICAg
ICAgIGlmICggc2hvdyApIHsKKyAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBpbmxpbmUgZGlzcGxh
eSBvZiB0aGlzIGVsZW1lbnQgdG8gbGVhcm4gaWYgaXQgaXMKKyAgICAgICAgICAgIC8vIGJlaW5n
IGhpZGRlbiBieSBjYXNjYWRlZCBydWxlcyBvciBub3QKKyAgICAgICAgICAgIGlmICggIXZhbHVl
c1sgaW5kZXggXSAmJiBlbGVtLnN0eWxlLmRpc3BsYXkgPT09ICJub25lIiApIHsKKyAgICAgICAg
ICAgICAgICBlbGVtLnN0eWxlLmRpc3BsYXkgPSAiIjsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgLy8gU2V0IGVsZW1lbnRzIHdoaWNoIGhhdmUgYmVlbiBvdmVycmlkZGVuIHdpdGggZGlz
cGxheTogbm9uZQorICAgICAgICAgICAgLy8gaW4gYSBzdHlsZXNoZWV0IHRvIHdoYXRldmVyIHRo
ZSBkZWZhdWx0IGJyb3dzZXIgc3R5bGUgaXMKKyAgICAgICAgICAgIC8vIGZvciBzdWNoIGFuIGVs
ZW1lbnQKKyAgICAgICAgICAgIGlmICggZWxlbS5zdHlsZS5kaXNwbGF5ID09PSAiIiAmJiBpc0hp
ZGRlbiggZWxlbSApICkgeworICAgICAgICAgICAgICAgIHZhbHVlc1sgaW5kZXggXSA9IGpRdWVy
eS5fZGF0YSggZWxlbSwgIm9sZGRpc3BsYXkiLCBjc3NfZGVmYXVsdERpc3BsYXkoZWxlbS5ub2Rl
TmFtZSkgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRp
c3BsYXkgPSBjdXJDU1MoIGVsZW0sICJkaXNwbGF5IiApOworCisgICAgICAgICAgICBpZiAoICF2
YWx1ZXNbIGluZGV4IF0gJiYgZGlzcGxheSAhPT0gIm5vbmUiICkgeworICAgICAgICAgICAgICAg
IGpRdWVyeS5fZGF0YSggZWxlbSwgIm9sZGRpc3BsYXkiLCBkaXNwbGF5ICk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBTZXQgdGhlIGRpc3BsYXkgb2YgbW9zdCBv
ZiB0aGUgZWxlbWVudHMgaW4gYSBzZWNvbmQgbG9vcAorICAgIC8vIHRvIGF2b2lkIHRoZSBjb25z
dGFudCByZWZsb3cKKyAgICBmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsr
ICkgeworICAgICAgICBlbGVtID0gZWxlbWVudHNbIGluZGV4IF07CisgICAgICAgIGlmICggIWVs
ZW0uc3R5bGUgKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoICFzaG93IHx8IGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gIm5vbmUiIHx8IGVsZW0uc3R5bGUu
ZGlzcGxheSA9PT0gIiIgKSB7CisgICAgICAgICAgICBlbGVtLnN0eWxlLmRpc3BsYXkgPSBzaG93
ID8gdmFsdWVzWyBpbmRleCBdIHx8ICIiIDogIm5vbmUiOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIGVsZW1lbnRzOworfQorCitqUXVlcnkuZm4uZXh0ZW5kKHsKKyAgICBjc3M6IGZ1
bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5hY2Nlc3MoIHRo
aXMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHsKKyAgICAgICAgICAgIHJldHVybiB2
YWx1ZSAhPT0gdW5kZWZpbmVkID8KKyAgICAgICAgICAgICAgICBqUXVlcnkuc3R5bGUoIGVsZW0s
IG5hbWUsIHZhbHVlICkgOgorICAgICAgICAgICAgICAgIGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUg
KTsKKyAgICAgICAgfSwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7CisgICAg
fSwKKyAgICBzaG93OiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHNob3dIaWRlKCB0aGlz
LCB0cnVlICk7CisgICAgfSwKKyAgICBoaWRlOiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
IHNob3dIaWRlKCB0aGlzICk7CisgICAgfSwKKyAgICB0b2dnbGU6IGZ1bmN0aW9uKCBzdGF0ZSwg
Zm4yICkgeworICAgICAgICB2YXIgYm9vbCA9IHR5cGVvZiBzdGF0ZSA9PT0gImJvb2xlYW4iOwor
CisgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHN0YXRlICkgJiYgalF1ZXJ5LmlzRnVu
Y3Rpb24oIGZuMiApICkgeworICAgICAgICAgICAgcmV0dXJuIGV2ZW50c1RvZ2dsZS5hcHBseSgg
dGhpcywgYXJndW1lbnRzICk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdGhpcy5lYWNo
KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgaWYgKCBib29sID8gc3RhdGUgOiBpc0hpZGRlbigg
dGhpcyApICkgeworICAgICAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLnNob3coKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkuaGlkZSgpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9Cit9KTsKKworalF1ZXJ5LmV4dGVuZCh7
CisgICAgLy8gQWRkIGluIHN0eWxlIHByb3BlcnR5IGhvb2tzIGZvciBvdmVycmlkaW5nIHRoZSBk
ZWZhdWx0CisgICAgLy8gYmVoYXZpb3Igb2YgZ2V0dGluZyBhbmQgc2V0dGluZyBhIHN0eWxlIHBy
b3BlcnR5CisgICAgY3NzSG9va3M6IHsKKyAgICAgICAgb3BhY2l0eTogeworICAgICAgICAgICAg
Z2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBj
b21wdXRlZCApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGFsd2F5cyBnZXQg
YSBudW1iZXIgYmFjayBmcm9tIG9wYWNpdHkKKyAgICAgICAgICAgICAgICAgICAgdmFyIHJldCA9
IGN1ckNTUyggZWxlbSwgIm9wYWNpdHkiICk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBy
ZXQgPT09ICIiID8gIjEiIDogcmV0OworCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfSwKKworICAgIC8vIEV4Y2x1ZGUgdGhlIGZvbGxvd2luZyBjc3Mg
cHJvcGVydGllcyB0byBhZGQgcHgKKyAgICBjc3NOdW1iZXI6IHsKKyAgICAgICAgImZpbGxPcGFj
aXR5IjogdHJ1ZSwKKyAgICAgICAgImZvbnRXZWlnaHQiOiB0cnVlLAorICAgICAgICAibGluZUhl
aWdodCI6IHRydWUsCisgICAgICAgICJvcGFjaXR5IjogdHJ1ZSwKKyAgICAgICAgIm9ycGhhbnMi
OiB0cnVlLAorICAgICAgICAid2lkb3dzIjogdHJ1ZSwKKyAgICAgICAgInpJbmRleCI6IHRydWUs
CisgICAgICAgICJ6b29tIjogdHJ1ZQorICAgIH0sCisKKyAgICAvLyBBZGQgaW4gcHJvcGVydGll
cyB3aG9zZSBuYW1lcyB5b3Ugd2lzaCB0byBmaXggYmVmb3JlCisgICAgLy8gc2V0dGluZyBvciBn
ZXR0aW5nIHRoZSB2YWx1ZQorICAgIGNzc1Byb3BzOiB7CisgICAgICAgIC8vIG5vcm1hbGl6ZSBm
bG9hdCBjc3MgcHJvcGVydHkKKyAgICAgICAgImZsb2F0IjogalF1ZXJ5LnN1cHBvcnQuY3NzRmxv
YXQgPyAiY3NzRmxvYXQiIDogInN0eWxlRmxvYXQiCisgICAgfSwKKworICAgIC8vIEdldCBhbmQg
c2V0IHRoZSBzdHlsZSBwcm9wZXJ0eSBvbiBhIERPTSBOb2RlCisgICAgc3R5bGU6IGZ1bmN0aW9u
KCBlbGVtLCBuYW1lLCB2YWx1ZSwgZXh0cmEgKSB7CisgICAgICAgIC8vIERvbid0IHNldCBzdHls
ZXMgb24gdGV4dCBhbmQgY29tbWVudCBub2RlcworICAgICAgICBpZiAoICFlbGVtIHx8IGVsZW0u
bm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCB8fCAhZWxlbS5zdHlsZSApIHsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE1ha2Ugc3VyZSB0
aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZQorICAgICAgICB2YXIgcmV0LCB0
eXBlLCBob29rcywKKyAgICAgICAgICAgIG9yaWdOYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggbmFt
ZSApLAorICAgICAgICAgICAgc3R5bGUgPSBlbGVtLnN0eWxlOworCisgICAgICAgIG5hbWUgPSBq
UXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0gfHwgKCBqUXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1l
IF0gPSB2ZW5kb3JQcm9wTmFtZSggc3R5bGUsIG9yaWdOYW1lICkgKTsKKworICAgICAgICAvLyBn
ZXRzIGhvb2sgZm9yIHRoZSBwcmVmaXhlZCB2ZXJzaW9uCisgICAgICAgIC8vIGZvbGxvd2VkIGJ5
IHRoZSB1bnByZWZpeGVkIHZlcnNpb24KKyAgICAgICAgaG9va3MgPSBqUXVlcnkuY3NzSG9va3Nb
IG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07CisKKyAgICAgICAgLy8gQ2hl
Y2sgaWYgd2UncmUgc2V0dGluZyBhIHZhbHVlCisgICAgICAgIGlmICggdmFsdWUgIT09IHVuZGVm
aW5lZCApIHsKKyAgICAgICAgICAgIHR5cGUgPSB0eXBlb2YgdmFsdWU7CisKKyAgICAgICAgICAg
IC8vIGNvbnZlcnQgcmVsYXRpdmUgbnVtYmVyIHN0cmluZ3MgKCs9IG9yIC09KSB0byByZWxhdGl2
ZSBudW1iZXJzLiAjNzM0NQorICAgICAgICAgICAgaWYgKCB0eXBlID09PSAic3RyaW5nIiAmJiAo
cmV0ID0gcnJlbE51bS5leGVjKCB2YWx1ZSApKSApIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9
ICggcmV0WzFdICsgMSApICogcmV0WzJdICsgcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyggZWxlbSwg
bmFtZSApICk7CisgICAgICAgICAgICAgICAgLy8gRml4ZXMgYnVnICM5MjM3CisgICAgICAgICAg
ICAgICAgdHlwZSA9ICJudW1iZXIiOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBN
YWtlIHN1cmUgdGhhdCBOYU4gYW5kIG51bGwgdmFsdWVzIGFyZW4ndCBzZXQuIFNlZTogIzcxMTYK
KyAgICAgICAgICAgIGlmICggdmFsdWUgPT0gbnVsbCB8fCB0eXBlID09PSAibnVtYmVyIiAmJiBp
c05hTiggdmFsdWUgKSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8vIElmIGEgbnVtYmVyIHdhcyBwYXNzZWQgaW4sIGFkZCAncHgnIHRv
IHRoZSAoZXhjZXB0IGZvciBjZXJ0YWluIENTUyBwcm9wZXJ0aWVzKQorICAgICAgICAgICAgaWYg
KCB0eXBlID09PSAibnVtYmVyIiAmJiAhalF1ZXJ5LmNzc051bWJlclsgb3JpZ05hbWUgXSApIHsK
KyAgICAgICAgICAgICAgICB2YWx1ZSArPSAicHgiOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkLCB1c2UgdGhhdCB2YWx1ZSwgb3RoZXJ3aXNl
IGp1c3Qgc2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUKKyAgICAgICAgICAgIGlmICggIWhvb2tzIHx8
ICEoInNldCIgaW4gaG9va3MpIHx8ICh2YWx1ZSA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIGV4
dHJhICkpICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgLy8gV3JhcHBlZCB0byBw
cmV2ZW50IElFIGZyb20gdGhyb3dpbmcgZXJyb3JzIHdoZW4gJ2ludmFsaWQnIHZhbHVlcyBhcmUg
cHJvdmlkZWQKKyAgICAgICAgICAgICAgICAvLyBGaXhlcyBidWcgIzU1MDkKKyAgICAgICAgICAg
ICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBzdHlsZVsgbmFtZSBdID0gdmFsdWU7Cisg
ICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7fQorICAgICAgICAgICAgfQorCisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgbm9u
LWNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmUKKyAgICAgICAgICAgIGlmICggaG9va3MgJiYgImdl
dCIgaW4gaG9va3MgJiYgKHJldCA9IGhvb2tzLmdldCggZWxlbSwgZmFsc2UsIGV4dHJhICkpICE9
PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIGp1c3QgZ2V0IHRoZSB2YWx1ZSBmcm9tIHRo
ZSBzdHlsZSBvYmplY3QKKyAgICAgICAgICAgIHJldHVybiBzdHlsZVsgbmFtZSBdOworICAgICAg
ICB9CisgICAgfSwKKworICAgIGNzczogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIG51bWVyaWMsIGV4
dHJhICkgeworICAgICAgICB2YXIgdmFsLCBudW0sIGhvb2tzLAorICAgICAgICAgICAgb3JpZ05h
bWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lICk7CisKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRo
YXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lCisgICAgICAgIG5hbWUgPSBqUXVl
cnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0gfHwgKCBqUXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0g
PSB2ZW5kb3JQcm9wTmFtZSggZWxlbS5zdHlsZSwgb3JpZ05hbWUgKSApOworCisgICAgICAgIC8v
IGdldHMgaG9vayBmb3IgdGhlIHByZWZpeGVkIHZlcnNpb24KKyAgICAgICAgLy8gZm9sbG93ZWQg
YnkgdGhlIHVucHJlZml4ZWQgdmVyc2lvbgorICAgICAgICBob29rcyA9IGpRdWVyeS5jc3NIb29r
c1sgbmFtZSBdIHx8IGpRdWVyeS5jc3NIb29rc1sgb3JpZ05hbWUgXTsKKworICAgICAgICAvLyBJ
ZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZQor
ICAgICAgICBpZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tzICkgeworICAgICAgICAgICAgdmFs
ID0gaG9va3MuZ2V0KCBlbGVtLCB0cnVlLCBleHRyYSApOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gT3RoZXJ3aXNlLCBpZiBhIHdheSB0byBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGV4aXN0cywg
dXNlIHRoYXQKKyAgICAgICAgaWYgKCB2YWwgPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAg
IHZhbCA9IGN1ckNTUyggZWxlbSwgbmFtZSApOworICAgICAgICB9CisKKyAgICAgICAgLy9jb252
ZXJ0ICJub3JtYWwiIHRvIGNvbXB1dGVkIHZhbHVlCisgICAgICAgIGlmICggdmFsID09PSAibm9y
bWFsIiAmJiBuYW1lIGluIGNzc05vcm1hbFRyYW5zZm9ybSApIHsKKyAgICAgICAgICAgIHZhbCA9
IGNzc05vcm1hbFRyYW5zZm9ybVsgbmFtZSBdOworICAgICAgICB9CisKKyAgICAgICAgLy8gUmV0
dXJuLCBjb252ZXJ0aW5nIHRvIG51bWJlciBpZiBmb3JjZWQgb3IgYSBxdWFsaWZpZXIgd2FzIHBy
b3ZpZGVkIGFuZCB2YWwgbG9va3MgbnVtZXJpYworICAgICAgICBpZiAoIG51bWVyaWMgfHwgZXh0
cmEgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIG51bSA9IHBhcnNlRmxvYXQoIHZhbCAp
OworICAgICAgICAgICAgcmV0dXJuIG51bWVyaWMgfHwgalF1ZXJ5LmlzTnVtZXJpYyggbnVtICkg
PyBudW0gfHwgMCA6IHZhbDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsOworICAgIH0s
CisKKyAgICAvLyBBIG1ldGhvZCBmb3IgcXVpY2tseSBzd2FwcGluZyBpbi9vdXQgQ1NTIHByb3Bl
cnRpZXMgdG8gZ2V0IGNvcnJlY3QgY2FsY3VsYXRpb25zCisgICAgc3dhcDogZnVuY3Rpb24oIGVs
ZW0sIG9wdGlvbnMsIGNhbGxiYWNrICkgeworICAgICAgICB2YXIgcmV0LCBuYW1lLAorICAgICAg
ICAgICAgb2xkID0ge307CisKKyAgICAgICAgLy8gUmVtZW1iZXIgdGhlIG9sZCB2YWx1ZXMsIGFu
ZCBpbnNlcnQgdGhlIG5ldyBvbmVzCisgICAgICAgIGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHsK
KyAgICAgICAgICAgIG9sZFsgbmFtZSBdID0gZWxlbS5zdHlsZVsgbmFtZSBdOworICAgICAgICAg
ICAgZWxlbS5zdHlsZVsgbmFtZSBdID0gb3B0aW9uc1sgbmFtZSBdOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0ID0gY2FsbGJhY2suY2FsbCggZWxlbSApOworCisgICAgICAgIC8vIFJldmVydCB0
aGUgb2xkIHZhbHVlcworICAgICAgICBmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7CisgICAgICAg
ICAgICBlbGVtLnN0eWxlWyBuYW1lIF0gPSBvbGRbIG5hbWUgXTsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiByZXQ7CisgICAgfQorfSk7CisKKy8vIE5PVEU6IFRvIGFueSBmdXR1cmUgbWFp
bnRhaW5lciwgd2UndmUgd2luZG93LmdldENvbXB1dGVkU3R5bGUKKy8vIGJlY2F1c2UganNkb20g
b24gbm9kZS5qcyB3aWxsIGJyZWFrIHdpdGhvdXQgaXQuCitpZiAoIHdpbmRvdy5nZXRDb21wdXRl
ZFN0eWxlICkgeworICAgIGN1ckNTUyA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgeworICAgICAg
ICB2YXIgcmV0LCB3aWR0aCwgbWluV2lkdGgsIG1heFdpZHRoLAorICAgICAgICAgICAgY29tcHV0
ZWQgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggZWxlbSwgbnVsbCApLAorICAgICAgICAgICAg
c3R5bGUgPSBlbGVtLnN0eWxlOworCisgICAgICAgIGlmICggY29tcHV0ZWQgKSB7CisKKyAgICAg
ICAgICAgIC8vIGdldFByb3BlcnR5VmFsdWUgaXMgb25seSBuZWVkZWQgZm9yIC5jc3MoJ2ZpbHRl
cicpIGluIElFOSwgc2VlICMxMjUzNworICAgICAgICAgICAgcmV0ID0gY29tcHV0ZWQuZ2V0UHJv
cGVydHlWYWx1ZSggbmFtZSApIHx8IGNvbXB1dGVkWyBuYW1lIF07CisKKyAgICAgICAgICAgIGlm
ICggcmV0ID09PSAiIiAmJiAhalF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVs
ZW0gKSApIHsKKyAgICAgICAgICAgICAgICByZXQgPSBqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUg
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQSB0cmlidXRlIHRvIHRoZSAiYXdl
c29tZSBoYWNrIGJ5IERlYW4gRWR3YXJkcyIKKyAgICAgICAgICAgIC8vIENocm9tZSA8IDE3IGFu
ZCBTYWZhcmkgNS4wIHVzZXMgImNvbXB1dGVkIHZhbHVlIiBpbnN0ZWFkIG9mICJ1c2VkIHZhbHVl
IiBmb3IgbWFyZ2luLXJpZ2h0CisgICAgICAgICAgICAvLyBTYWZhcmkgNS4xLjcgKGF0IGxlYXN0
KSByZXR1cm5zIHBlcmNlbnRhZ2UgZm9yIGEgbGFyZ2VyIHNldCBvZiB2YWx1ZXMsIGJ1dCB3aWR0
aCBzZWVtcyB0byBiZSByZWxpYWJseSBwaXhlbHMKKyAgICAgICAgICAgIC8vIHRoaXMgaXMgYWdh
aW5zdCB0aGUgQ1NTT00gZHJhZnQgc3BlYzogaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3Nzb20v
I3Jlc29sdmVkLXZhbHVlcworICAgICAgICAgICAgaWYgKCBybnVtbm9ucHgudGVzdCggcmV0ICkg
JiYgcm1hcmdpbi50ZXN0KCBuYW1lICkgKSB7CisgICAgICAgICAgICAgICAgd2lkdGggPSBzdHls
ZS53aWR0aDsKKyAgICAgICAgICAgICAgICBtaW5XaWR0aCA9IHN0eWxlLm1pbldpZHRoOworICAg
ICAgICAgICAgICAgIG1heFdpZHRoID0gc3R5bGUubWF4V2lkdGg7CisKKyAgICAgICAgICAgICAg
ICBzdHlsZS5taW5XaWR0aCA9IHN0eWxlLm1heFdpZHRoID0gc3R5bGUud2lkdGggPSByZXQ7Cisg
ICAgICAgICAgICAgICAgcmV0ID0gY29tcHV0ZWQud2lkdGg7CisKKyAgICAgICAgICAgICAgICBz
dHlsZS53aWR0aCA9IHdpZHRoOworICAgICAgICAgICAgICAgIHN0eWxlLm1pbldpZHRoID0gbWlu
V2lkdGg7CisgICAgICAgICAgICAgICAgc3R5bGUubWF4V2lkdGggPSBtYXhXaWR0aDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXQ7CisgICAgfTsKK30gZWxz
ZSBpZiAoIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jdXJyZW50U3R5bGUgKSB7CisgICAgY3Vy
Q1NTID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7CisgICAgICAgIHZhciBsZWZ0LCByc0xlZnQs
CisgICAgICAgICAgICByZXQgPSBlbGVtLmN1cnJlbnRTdHlsZSAmJiBlbGVtLmN1cnJlbnRTdHls
ZVsgbmFtZSBdLAorICAgICAgICAgICAgc3R5bGUgPSBlbGVtLnN0eWxlOworCisgICAgICAgIC8v
IEF2b2lkIHNldHRpbmcgcmV0IHRvIGVtcHR5IHN0cmluZyBoZXJlCisgICAgICAgIC8vIHNvIHdl
IGRvbid0IGRlZmF1bHQgdG8gYXV0bworICAgICAgICBpZiAoIHJldCA9PSBudWxsICYmIHN0eWxl
ICYmIHN0eWxlWyBuYW1lIF0gKSB7CisgICAgICAgICAgICByZXQgPSBzdHlsZVsgbmFtZSBdOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gRnJvbSB0aGUgYXdlc29tZSBoYWNrIGJ5IERlYW4gRWR3
YXJkcworICAgICAgICAvLyBodHRwOi8vZXJpay5lYWUubmV0L2FyY2hpdmVzLzIwMDcvMDcvMjcv
MTguNTQuMTUvI2NvbW1lbnQtMTAyMjkxCisKKyAgICAgICAgLy8gSWYgd2UncmUgbm90IGRlYWxp
bmcgd2l0aCBhIHJlZ3VsYXIgcGl4ZWwgbnVtYmVyCisgICAgICAgIC8vIGJ1dCBhIG51bWJlciB0
aGF0IGhhcyBhIHdlaXJkIGVuZGluZywgd2UgbmVlZCB0byBjb252ZXJ0IGl0IHRvIHBpeGVscwor
ICAgICAgICAvLyBidXQgbm90IHBvc2l0aW9uIGNzcyBhdHRyaWJ1dGVzLCBhcyB0aG9zZSBhcmUg
cHJvcG9ydGlvbmFsIHRvIHRoZSBwYXJlbnQgZWxlbWVudCBpbnN0ZWFkCisgICAgICAgIC8vIGFu
ZCB3ZSBjYW4ndCBtZWFzdXJlIHRoZSBwYXJlbnQgaW5zdGVhZCBiZWNhdXNlIGl0IG1pZ2h0IHRy
aWdnZXIgYSAic3RhY2tpbmcgZG9sbHMiIHByb2JsZW0KKyAgICAgICAgaWYgKCBybnVtbm9ucHgu
dGVzdCggcmV0ICkgJiYgIXJwb3NpdGlvbi50ZXN0KCBuYW1lICkgKSB7CisKKyAgICAgICAgICAg
IC8vIFJlbWVtYmVyIHRoZSBvcmlnaW5hbCB2YWx1ZXMKKyAgICAgICAgICAgIGxlZnQgPSBzdHls
ZS5sZWZ0OworICAgICAgICAgICAgcnNMZWZ0ID0gZWxlbS5ydW50aW1lU3R5bGUgJiYgZWxlbS5y
dW50aW1lU3R5bGUubGVmdDsKKworICAgICAgICAgICAgLy8gUHV0IGluIHRoZSBuZXcgdmFsdWVz
IHRvIGdldCBhIGNvbXB1dGVkIHZhbHVlIG91dAorICAgICAgICAgICAgaWYgKCByc0xlZnQgKSB7
CisgICAgICAgICAgICAgICAgZWxlbS5ydW50aW1lU3R5bGUubGVmdCA9IGVsZW0uY3VycmVudFN0
eWxlLmxlZnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdHlsZS5sZWZ0ID0gbmFtZSA9
PT0gImZvbnRTaXplIiA/ICIxZW0iIDogcmV0OworICAgICAgICAgICAgcmV0ID0gc3R5bGUucGl4
ZWxMZWZ0ICsgInB4IjsKKworICAgICAgICAgICAgLy8gUmV2ZXJ0IHRoZSBjaGFuZ2VkIHZhbHVl
cworICAgICAgICAgICAgc3R5bGUubGVmdCA9IGxlZnQ7CisgICAgICAgICAgICBpZiAoIHJzTGVm
dCApIHsKKyAgICAgICAgICAgICAgICBlbGVtLnJ1bnRpbWVTdHlsZS5sZWZ0ID0gcnNMZWZ0Owor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJldCA9PT0gIiIgPyAi
YXV0byIgOiByZXQ7CisgICAgfTsKK30KKworZnVuY3Rpb24gc2V0UG9zaXRpdmVOdW1iZXIoIGVs
ZW0sIHZhbHVlLCBzdWJ0cmFjdCApIHsKKyAgICB2YXIgbWF0Y2hlcyA9IHJudW1zcGxpdC5leGVj
KCB2YWx1ZSApOworICAgIHJldHVybiBtYXRjaGVzID8KKyAgICAgICAgICAgIE1hdGgubWF4KCAw
LCBtYXRjaGVzWyAxIF0gLSAoIHN1YnRyYWN0IHx8IDAgKSApICsgKCBtYXRjaGVzWyAyIF0gfHwg
InB4IiApIDoKKyAgICAgICAgICAgIHZhbHVlOworfQorCitmdW5jdGlvbiBhdWdtZW50V2lkdGhP
ckhlaWdodCggZWxlbSwgbmFtZSwgZXh0cmEsIGlzQm9yZGVyQm94ICkgeworICAgIHZhciBpID0g
ZXh0cmEgPT09ICggaXNCb3JkZXJCb3ggPyAiYm9yZGVyIiA6ICJjb250ZW50IiApID8KKyAgICAg
ICAgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIHRoZSByaWdodCBtZWFzdXJlbWVudCwgYXZvaWQgYXVn
bWVudGF0aW9uCisgICAgICAgIDQgOgorICAgICAgICAvLyBPdGhlcndpc2UgaW5pdGlhbGl6ZSBm
b3IgaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBwcm9wZXJ0aWVzCisgICAgICAgIG5hbWUgPT09ICJ3
aWR0aCIgPyAxIDogMCwKKworICAgICAgICB2YWwgPSAwOworCisgICAgZm9yICggOyBpIDwgNDsg
aSArPSAyICkgeworICAgICAgICAvLyBib3RoIGJveCBtb2RlbHMgZXhjbHVkZSBtYXJnaW4sIHNv
IGFkZCBpdCBpZiB3ZSB3YW50IGl0CisgICAgICAgIGlmICggZXh0cmEgPT09ICJtYXJnaW4iICkg
eworICAgICAgICAgICAgLy8gd2UgdXNlIGpRdWVyeS5jc3MgaW5zdGVhZCBvZiBjdXJDU1MgaGVy
ZQorICAgICAgICAgICAgLy8gYmVjYXVzZSBvZiB0aGUgcmVsaWFibGVNYXJnaW5SaWdodCBDU1Mg
aG9vayEKKyAgICAgICAgICAgIHZhbCArPSBqUXVlcnkuY3NzKCBlbGVtLCBleHRyYSArIGNzc0V4
cGFuZFsgaSBdLCB0cnVlICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBGcm9tIHRoaXMgcG9p
bnQgb24gd2UgdXNlIGN1ckNTUyBmb3IgbWF4aW11bSBwZXJmb3JtYW5jZSAocmVsZXZhbnQgaW4g
YW5pbWF0aW9ucykKKyAgICAgICAgaWYgKCBpc0JvcmRlckJveCApIHsKKyAgICAgICAgICAgIC8v
IGJvcmRlci1ib3ggaW5jbHVkZXMgcGFkZGluZywgc28gcmVtb3ZlIGl0IGlmIHdlIHdhbnQgY29u
dGVudAorICAgICAgICAgICAgaWYgKCBleHRyYSA9PT0gImNvbnRlbnQiICkgeworICAgICAgICAg
ICAgICAgIHZhbCAtPSBwYXJzZUZsb2F0KCBjdXJDU1MoIGVsZW0sICJwYWRkaW5nIiArIGNzc0V4
cGFuZFsgaSBdICkgKSB8fCAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBhdCB0
aGlzIHBvaW50LCBleHRyYSBpc24ndCBib3JkZXIgbm9yIG1hcmdpbiwgc28gcmVtb3ZlIGJvcmRl
cgorICAgICAgICAgICAgaWYgKCBleHRyYSAhPT0gIm1hcmdpbiIgKSB7CisgICAgICAgICAgICAg
ICAgdmFsIC09IHBhcnNlRmxvYXQoIGN1ckNTUyggZWxlbSwgImJvcmRlciIgKyBjc3NFeHBhbmRb
IGkgXSArICJXaWR0aCIgKSApIHx8IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAvLyBhdCB0aGlzIHBvaW50LCBleHRyYSBpc24ndCBjb250ZW50LCBzbyBh
ZGQgcGFkZGluZworICAgICAgICAgICAgdmFsICs9IHBhcnNlRmxvYXQoIGN1ckNTUyggZWxlbSwg
InBhZGRpbmciICsgY3NzRXhwYW5kWyBpIF0gKSApIHx8IDA7CisKKyAgICAgICAgICAgIC8vIGF0
IHRoaXMgcG9pbnQsIGV4dHJhIGlzbid0IGNvbnRlbnQgbm9yIHBhZGRpbmcsIHNvIGFkZCBib3Jk
ZXIKKyAgICAgICAgICAgIGlmICggZXh0cmEgIT09ICJwYWRkaW5nIiApIHsKKyAgICAgICAgICAg
ICAgICB2YWwgKz0gcGFyc2VGbG9hdCggY3VyQ1NTKCBlbGVtLCAiYm9yZGVyIiArIGNzc0V4cGFu
ZFsgaSBdICsgIldpZHRoIiApICkgfHwgMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiB2YWw7Cit9CisKK2Z1bmN0aW9uIGdldFdpZHRoT3JIZWlnaHQoIGVs
ZW0sIG5hbWUsIGV4dHJhICkgeworCisgICAgLy8gU3RhcnQgd2l0aCBvZmZzZXQgcHJvcGVydHks
IHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGJvcmRlci1ib3ggdmFsdWUKKyAgICB2YXIgdmFs
ID0gbmFtZSA9PT0gIndpZHRoIiA/IGVsZW0ub2Zmc2V0V2lkdGggOiBlbGVtLm9mZnNldEhlaWdo
dCwKKyAgICAgICAgdmFsdWVJc0JvcmRlckJveCA9IHRydWUsCisgICAgICAgIGlzQm9yZGVyQm94
ID0galF1ZXJ5LnN1cHBvcnQuYm94U2l6aW5nICYmIGpRdWVyeS5jc3MoIGVsZW0sICJib3hTaXpp
bmciICkgPT09ICJib3JkZXItYm94IjsKKworICAgIC8vIHNvbWUgbm9uLWh0bWwgZWxlbWVudHMg
cmV0dXJuIHVuZGVmaW5lZCBmb3Igb2Zmc2V0V2lkdGgsIHNvIGNoZWNrIGZvciBudWxsL3VuZGVm
aW5lZAorICAgIC8vIHN2ZyAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcu
Y2dpP2lkPTY0OTI4NQorICAgIC8vIE1hdGhNTCAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5v
cmcvc2hvd19idWcuY2dpP2lkPTQ5MTY2OAorICAgIGlmICggdmFsIDw9IDAgfHwgdmFsID09IG51
bGwgKSB7CisgICAgICAgIC8vIEZhbGwgYmFjayB0byBjb21wdXRlZCB0aGVuIHVuY29tcHV0ZWQg
Y3NzIGlmIG5lY2Vzc2FyeQorICAgICAgICB2YWwgPSBjdXJDU1MoIGVsZW0sIG5hbWUgKTsKKyAg
ICAgICAgaWYgKCB2YWwgPCAwIHx8IHZhbCA9PSBudWxsICkgeworICAgICAgICAgICAgdmFsID0g
ZWxlbS5zdHlsZVsgbmFtZSBdOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ29tcHV0ZWQgdW5p
dCBpcyBub3QgcGl4ZWxzLiBTdG9wIGhlcmUgYW5kIHJldHVybi4KKyAgICAgICAgaWYgKCBybnVt
bm9ucHgudGVzdCh2YWwpICkgeworICAgICAgICAgICAgcmV0dXJuIHZhbDsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIHdlIG5lZWQgdGhlIGNoZWNrIGZvciBzdHlsZSBpbiBjYXNlIGEgYnJvd3Nl
ciB3aGljaCByZXR1cm5zIHVucmVsaWFibGUgdmFsdWVzCisgICAgICAgIC8vIGZvciBnZXRDb21w
dXRlZFN0eWxlIHNpbGVudGx5IGZhbGxzIGJhY2sgdG8gdGhlIHJlbGlhYmxlIGVsZW0uc3R5bGUK
KyAgICAgICAgdmFsdWVJc0JvcmRlckJveCA9IGlzQm9yZGVyQm94ICYmICggalF1ZXJ5LnN1cHBv
cnQuYm94U2l6aW5nUmVsaWFibGUgfHwgdmFsID09PSBlbGVtLnN0eWxlWyBuYW1lIF0gKTsKKwor
ICAgICAgICAvLyBOb3JtYWxpemUgIiIsIGF1dG8sIGFuZCBwcmVwYXJlIGZvciBleHRyYQorICAg
ICAgICB2YWwgPSBwYXJzZUZsb2F0KCB2YWwgKSB8fCAwOworICAgIH0KKworICAgIC8vIHVzZSB0
aGUgYWN0aXZlIGJveC1zaXppbmcgbW9kZWwgdG8gYWRkL3N1YnRyYWN0IGlycmVsZXZhbnQgc3R5
bGVzCisgICAgcmV0dXJuICggdmFsICsKKyAgICAgICAgYXVnbWVudFdpZHRoT3JIZWlnaHQoCisg
ICAgICAgICAgICBlbGVtLAorICAgICAgICAgICAgbmFtZSwKKyAgICAgICAgICAgIGV4dHJhIHx8
ICggaXNCb3JkZXJCb3ggPyAiYm9yZGVyIiA6ICJjb250ZW50IiApLAorICAgICAgICAgICAgdmFs
dWVJc0JvcmRlckJveAorICAgICAgICApCisgICAgKSArICJweCI7Cit9CisKKworLy8gVHJ5IHRv
IGRldGVybWluZSB0aGUgZGVmYXVsdCBkaXNwbGF5IHZhbHVlIG9mIGFuIGVsZW1lbnQKK2Z1bmN0
aW9uIGNzc19kZWZhdWx0RGlzcGxheSggbm9kZU5hbWUgKSB7CisgICAgaWYgKCBlbGVtZGlzcGxh
eVsgbm9kZU5hbWUgXSApIHsKKyAgICAgICAgcmV0dXJuIGVsZW1kaXNwbGF5WyBub2RlTmFtZSBd
OworICAgIH0KKworICAgIHZhciBlbGVtID0galF1ZXJ5KCAiPCIgKyBub2RlTmFtZSArICI+IiAp
LmFwcGVuZFRvKCBkb2N1bWVudC5ib2R5ICksCisgICAgICAgIGRpc3BsYXkgPSBlbGVtLmNzcygi
ZGlzcGxheSIpOworICAgIGVsZW0ucmVtb3ZlKCk7CisKKyAgICAvLyBJZiB0aGUgc2ltcGxlIHdh
eSBmYWlscywKKyAgICAvLyBnZXQgZWxlbWVudCdzIHJlYWwgZGVmYXVsdCBkaXNwbGF5IGJ5IGF0
dGFjaGluZyBpdCB0byBhIHRlbXAgaWZyYW1lCisgICAgaWYgKCBkaXNwbGF5ID09PSAibm9uZSIg
fHwgZGlzcGxheSA9PT0gIiIgKSB7CisgICAgICAgIC8vIFVzZSB0aGUgYWxyZWFkeS1jcmVhdGVk
IGlmcmFtZSBpZiBwb3NzaWJsZQorICAgICAgICBpZnJhbWUgPSBkb2N1bWVudC5ib2R5LmFwcGVu
ZENoaWxkKAorICAgICAgICAgICAgaWZyYW1lIHx8IGpRdWVyeS5leHRlbmQoIGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImlmcmFtZSIpLCB7CisgICAgICAgICAgICAgICAgZnJhbWVCb3JkZXI6IDAs
CisgICAgICAgICAgICAgICAgd2lkdGg6IDAsCisgICAgICAgICAgICAgICAgaGVpZ2h0OiAwCisg
ICAgICAgICAgICB9KQorICAgICAgICApOworCisgICAgICAgIC8vIENyZWF0ZSBhIGNhY2hlYWJs
ZSBjb3B5IG9mIHRoZSBpZnJhbWUgZG9jdW1lbnQgb24gZmlyc3QgY2FsbC4KKyAgICAgICAgLy8g
SUUgYW5kIE9wZXJhIHdpbGwgYWxsb3cgdXMgdG8gcmV1c2UgdGhlIGlmcmFtZURvYyB3aXRob3V0
IHJlLXdyaXRpbmcgdGhlIGZha2UgSFRNTAorICAgICAgICAvLyBkb2N1bWVudCB0byBpdDsgV2Vi
S2l0ICYgRmlyZWZveCB3b24ndCBhbGxvdyByZXVzaW5nIHRoZSBpZnJhbWUgZG9jdW1lbnQuCisg
ICAgICAgIGlmICggIWlmcmFtZURvYyB8fCAhaWZyYW1lLmNyZWF0ZUVsZW1lbnQgKSB7CisgICAg
ICAgICAgICBpZnJhbWVEb2MgPSAoIGlmcmFtZS5jb250ZW50V2luZG93IHx8IGlmcmFtZS5jb250
ZW50RG9jdW1lbnQgKS5kb2N1bWVudDsKKyAgICAgICAgICAgIGlmcmFtZURvYy53cml0ZSgiPCFk
b2N0eXBlIGh0bWw+PGh0bWw+PGJvZHk+Iik7CisgICAgICAgICAgICBpZnJhbWVEb2MuY2xvc2Uo
KTsKKyAgICAgICAgfQorCisgICAgICAgIGVsZW0gPSBpZnJhbWVEb2MuYm9keS5hcHBlbmRDaGls
ZCggaWZyYW1lRG9jLmNyZWF0ZUVsZW1lbnQobm9kZU5hbWUpICk7CisKKyAgICAgICAgZGlzcGxh
eSA9IGN1ckNTUyggZWxlbSwgImRpc3BsYXkiICk7CisgICAgICAgIGRvY3VtZW50LmJvZHkucmVt
b3ZlQ2hpbGQoIGlmcmFtZSApOworICAgIH0KKworICAgIC8vIFN0b3JlIHRoZSBjb3JyZWN0IGRl
ZmF1bHQgZGlzcGxheQorICAgIGVsZW1kaXNwbGF5WyBub2RlTmFtZSBdID0gZGlzcGxheTsKKwor
ICAgIHJldHVybiBkaXNwbGF5OworfQorCitqUXVlcnkuZWFjaChbICJoZWlnaHQiLCAid2lkdGgi
IF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkgeworICAgIGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdID0g
eworICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCwgZXh0cmEgKSB7CisgICAg
ICAgICAgICBpZiAoIGNvbXB1dGVkICkgeworICAgICAgICAgICAgICAgIC8vIGNlcnRhaW4gZWxl
bWVudHMgY2FuIGhhdmUgZGltZW5zaW9uIGluZm8gaWYgd2UgaW52aXNpYmx5IHNob3cgdGhlbQor
ICAgICAgICAgICAgICAgIC8vIGhvd2V2ZXIsIGl0IG11c3QgaGF2ZSBhIGN1cnJlbnQgZGlzcGxh
eSBzdHlsZSB0aGF0IHdvdWxkIGJlbmVmaXQgZnJvbSB0aGlzCisgICAgICAgICAgICAgICAgaWYg
KCBlbGVtLm9mZnNldFdpZHRoID09PSAwICYmIHJkaXNwbGF5c3dhcC50ZXN0KCBjdXJDU1MoIGVs
ZW0sICJkaXNwbGF5IiApICkgKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnku
c3dhcCggZWxlbSwgY3NzU2hvdywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgbmFtZSwgZXh0cmEgKTsKKyAgICAgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIG5hbWUsIGV4dHJhICk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9LAorCisgICAgICAgIHNldDog
ZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBleHRyYSApIHsKKyAgICAgICAgICAgIHJldHVybiBzZXRQ
b3NpdGl2ZU51bWJlciggZWxlbSwgdmFsdWUsIGV4dHJhID8KKyAgICAgICAgICAgICAgICBhdWdt
ZW50V2lkdGhPckhlaWdodCgKKyAgICAgICAgICAgICAgICAgICAgZWxlbSwKKyAgICAgICAgICAg
ICAgICAgICAgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgZXh0cmEsCisgICAgICAgICAgICAg
ICAgICAgIGpRdWVyeS5zdXBwb3J0LmJveFNpemluZyAmJiBqUXVlcnkuY3NzKCBlbGVtLCAiYm94
U2l6aW5nIiApID09PSAiYm9yZGVyLWJveCIKKyAgICAgICAgICAgICAgICApIDogMAorICAgICAg
ICAgICAgKTsKKyAgICAgICAgfQorICAgIH07Cit9KTsKKworaWYgKCAhalF1ZXJ5LnN1cHBvcnQu
b3BhY2l0eSApIHsKKyAgICBqUXVlcnkuY3NzSG9va3Mub3BhY2l0eSA9IHsKKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7CisgICAgICAgICAgICAvLyBJRSB1c2VzIGZp
bHRlcnMgZm9yIG9wYWNpdHkKKyAgICAgICAgICAgIHJldHVybiByb3BhY2l0eS50ZXN0KCAoY29t
cHV0ZWQgJiYgZWxlbS5jdXJyZW50U3R5bGUgPyBlbGVtLmN1cnJlbnRTdHlsZS5maWx0ZXIgOiBl
bGVtLnN0eWxlLmZpbHRlcikgfHwgIiIgKSA/CisgICAgICAgICAgICAgICAgKCAwLjAxICogcGFy
c2VGbG9hdCggUmVnRXhwLiQxICkgKSArICIiIDoKKyAgICAgICAgICAgICAgICBjb21wdXRlZCA/
ICIxIiA6ICIiOworICAgICAgICB9LAorCisgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZh
bHVlICkgeworICAgICAgICAgICAgdmFyIHN0eWxlID0gZWxlbS5zdHlsZSwKKyAgICAgICAgICAg
ICAgICBjdXJyZW50U3R5bGUgPSBlbGVtLmN1cnJlbnRTdHlsZSwKKyAgICAgICAgICAgICAgICBv
cGFjaXR5ID0galF1ZXJ5LmlzTnVtZXJpYyggdmFsdWUgKSA/ICJhbHBoYShvcGFjaXR5PSIgKyB2
YWx1ZSAqIDEwMCArICIpIiA6ICIiLAorICAgICAgICAgICAgICAgIGZpbHRlciA9IGN1cnJlbnRT
dHlsZSAmJiBjdXJyZW50U3R5bGUuZmlsdGVyIHx8IHN0eWxlLmZpbHRlciB8fCAiIjsKKworICAg
ICAgICAgICAgLy8gSUUgaGFzIHRyb3VibGUgd2l0aCBvcGFjaXR5IGlmIGl0IGRvZXMgbm90IGhh
dmUgbGF5b3V0CisgICAgICAgICAgICAvLyBGb3JjZSBpdCBieSBzZXR0aW5nIHRoZSB6b29tIGxl
dmVsCisgICAgICAgICAgICBzdHlsZS56b29tID0gMTsKKworICAgICAgICAgICAgLy8gaWYgc2V0
dGluZyBvcGFjaXR5IHRvIDEsIGFuZCBubyBvdGhlciBmaWx0ZXJzIGV4aXN0IC0gYXR0ZW1wdCB0
byByZW1vdmUgZmlsdGVyIGF0dHJpYnV0ZSAjNjY1MgorICAgICAgICAgICAgaWYgKCB2YWx1ZSA+
PSAxICYmIGpRdWVyeS50cmltKCBmaWx0ZXIucmVwbGFjZSggcmFscGhhLCAiIiApICkgPT09ICIi
ICYmCisgICAgICAgICAgICAgICAgc3R5bGUucmVtb3ZlQXR0cmlidXRlICkgeworCisgICAgICAg
ICAgICAgICAgLy8gU2V0dGluZyBzdHlsZS5maWx0ZXIgdG8gbnVsbCwgIiIgJiAiICIgc3RpbGwg
bGVhdmUgImZpbHRlcjoiIGluIHRoZSBjc3NUZXh0CisgICAgICAgICAgICAgICAgLy8gaWYgImZp
bHRlcjoiIGlzIHByZXNlbnQgYXQgYWxsLCBjbGVhclR5cGUgaXMgZGlzYWJsZWQsIHdlIHdhbnQg
dG8gYXZvaWQgdGhpcworICAgICAgICAgICAgICAgIC8vIHN0eWxlLnJlbW92ZUF0dHJpYnV0ZSBp
cyBJRSBPbmx5LCBidXQgc28gYXBwYXJlbnRseSBpcyB0aGlzIGNvZGUgcGF0aC4uLgorICAgICAg
ICAgICAgICAgIHN0eWxlLnJlbW92ZUF0dHJpYnV0ZSggImZpbHRlciIgKTsKKworICAgICAgICAg
ICAgICAgIC8vIGlmIHRoZXJlIHRoZXJlIGlzIG5vIGZpbHRlciBzdHlsZSBhcHBsaWVkIGluIGEg
Y3NzIHJ1bGUsIHdlIGFyZSBkb25lCisgICAgICAgICAgICAgICAgaWYgKCBjdXJyZW50U3R5bGUg
JiYgIWN1cnJlbnRTdHlsZS5maWx0ZXIgKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIG90aGVy
d2lzZSwgc2V0IG5ldyBmaWx0ZXIgdmFsdWVzCisgICAgICAgICAgICBzdHlsZS5maWx0ZXIgPSBy
YWxwaGEudGVzdCggZmlsdGVyICkgPworICAgICAgICAgICAgICAgIGZpbHRlci5yZXBsYWNlKCBy
YWxwaGEsIG9wYWNpdHkgKSA6CisgICAgICAgICAgICAgICAgZmlsdGVyICsgIiAiICsgb3BhY2l0
eTsKKyAgICAgICAgfQorICAgIH07Cit9CisKKy8vIFRoZXNlIGhvb2tzIGNhbm5vdCBiZSBhZGRl
ZCB1bnRpbCBET00gcmVhZHkgYmVjYXVzZSB0aGUgc3VwcG9ydCB0ZXN0CisvLyBmb3IgaXQgaXMg
bm90IHJ1biB1bnRpbCBhZnRlciBET00gcmVhZHkKK2pRdWVyeShmdW5jdGlvbigpIHsKKyAgICBp
ZiAoICFqUXVlcnkuc3VwcG9ydC5yZWxpYWJsZU1hcmdpblJpZ2h0ICkgeworICAgICAgICBqUXVl
cnkuY3NzSG9va3MubWFyZ2luUmlnaHQgPSB7CisgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBl
bGVtLCBjb21wdXRlZCApIHsKKyAgICAgICAgICAgICAgICAvLyBXZWJLaXQgQnVnIDEzMzQzIC0g
Z2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHdyb25nIHZhbHVlIGZvciBtYXJnaW4tcmlnaHQKKyAg
ICAgICAgICAgICAgICAvLyBXb3JrIGFyb3VuZCBieSB0ZW1wb3JhcmlseSBzZXR0aW5nIGVsZW1l
bnQgZGlzcGxheSB0byBpbmxpbmUtYmxvY2sKKyAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5
LnN3YXAoIGVsZW0sIHsgImRpc3BsYXkiOiAiaW5saW5lLWJsb2NrIiB9LCBmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCBjb21wdXRlZCApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBjdXJDU1MoIGVsZW0sICJtYXJnaW5SaWdodCIgKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9
OworICAgIH0KKworICAgIC8vIFdlYmtpdCBidWc6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yOTA4NAorICAgIC8vIGdldENvbXB1dGVkU3R5bGUgcmV0dXJucyBwZXJj
ZW50IHdoZW4gc3BlY2lmaWVkIGZvciB0b3AvbGVmdC9ib3R0b20vcmlnaHQKKyAgICAvLyByYXRo
ZXIgdGhhbiBtYWtlIHRoZSBjc3MgbW9kdWxlIGRlcGVuZCBvbiB0aGUgb2Zmc2V0IG1vZHVsZSwg
d2UganVzdCBjaGVjayBmb3IgaXQgaGVyZQorICAgIGlmICggIWpRdWVyeS5zdXBwb3J0LnBpeGVs
UG9zaXRpb24gJiYgalF1ZXJ5LmZuLnBvc2l0aW9uICkgeworICAgICAgICBqUXVlcnkuZWFjaCgg
WyAidG9wIiwgImxlZnQiIF0sIGZ1bmN0aW9uKCBpLCBwcm9wICkgeworICAgICAgICAgICAgalF1
ZXJ5LmNzc0hvb2tzWyBwcm9wIF0gPSB7CisgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigg
ZWxlbSwgY29tcHV0ZWQgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggY29tcHV0ZWQgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmV0ID0gY3VyQ1NTKCBlbGVtLCBwcm9wICk7
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBjdXJDU1MgcmV0dXJucyBwZXJjZW50YWdl
LCBmYWxsYmFjayB0byBvZmZzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBybnVt
bm9ucHgudGVzdCggcmV0ICkgPyBqUXVlcnkoIGVsZW0gKS5wb3NpdGlvbigpWyBwcm9wIF0gKyAi
cHgiIDogcmV0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfTsKKyAgICAgICAgfSk7CisgICAgfQorCit9KTsKKworaWYgKCBqUXVlcnkuZXhw
ciAmJiBqUXVlcnkuZXhwci5maWx0ZXJzICkgeworICAgIGpRdWVyeS5leHByLmZpbHRlcnMuaGlk
ZGVuID0gZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgIHJldHVybiAoIGVsZW0ub2Zmc2V0V2lk
dGggPT09IDAgJiYgZWxlbS5vZmZzZXRIZWlnaHQgPT09IDAgKSB8fCAoIWpRdWVyeS5zdXBwb3J0
LnJlbGlhYmxlSGlkZGVuT2Zmc2V0cyAmJiAoKGVsZW0uc3R5bGUgJiYgZWxlbS5zdHlsZS5kaXNw
bGF5KSB8fCBjdXJDU1MoIGVsZW0sICJkaXNwbGF5IiApKSA9PT0gIm5vbmUiKTsKKyAgICB9Owor
CisgICAgalF1ZXJ5LmV4cHIuZmlsdGVycy52aXNpYmxlID0gZnVuY3Rpb24oIGVsZW0gKSB7Cisg
ICAgICAgIHJldHVybiAhalF1ZXJ5LmV4cHIuZmlsdGVycy5oaWRkZW4oIGVsZW0gKTsKKyAgICB9
OworfQorCisvLyBUaGVzZSBob29rcyBhcmUgdXNlZCBieSBhbmltYXRlIHRvIGV4cGFuZCBwcm9w
ZXJ0aWVzCitqUXVlcnkuZWFjaCh7CisgICAgbWFyZ2luOiAiIiwKKyAgICBwYWRkaW5nOiAiIiwK
KyAgICBib3JkZXI6ICJXaWR0aCIKK30sIGZ1bmN0aW9uKCBwcmVmaXgsIHN1ZmZpeCApIHsKKyAg
ICBqUXVlcnkuY3NzSG9va3NbIHByZWZpeCArIHN1ZmZpeCBdID0geworICAgICAgICBleHBhbmQ6
IGZ1bmN0aW9uKCB2YWx1ZSApIHsKKyAgICAgICAgICAgIHZhciBpLAorCisgICAgICAgICAgICAg
ICAgLy8gYXNzdW1lcyBhIHNpbmdsZSBudW1iZXIgaWYgbm90IGEgc3RyaW5nCisgICAgICAgICAg
ICAgICAgcGFydHMgPSB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciID8gdmFsdWUuc3BsaXQoIiAi
KSA6IFsgdmFsdWUgXSwKKyAgICAgICAgICAgICAgICBleHBhbmRlZCA9IHt9OworCisgICAgICAg
ICAgICBmb3IgKCBpID0gMDsgaSA8IDQ7IGkrKyApIHsKKyAgICAgICAgICAgICAgICBleHBhbmRl
ZFsgcHJlZml4ICsgY3NzRXhwYW5kWyBpIF0gKyBzdWZmaXggXSA9CisgICAgICAgICAgICAgICAg
ICAgIHBhcnRzWyBpIF0gfHwgcGFydHNbIGkgLSAyIF0gfHwgcGFydHNbIDAgXTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGV4cGFuZGVkOworICAgICAgICB9CisgICAgfTsK
KworICAgIGlmICggIXJtYXJnaW4udGVzdCggcHJlZml4ICkgKSB7CisgICAgICAgIGpRdWVyeS5j
c3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0uc2V0ID0gc2V0UG9zaXRpdmVOdW1iZXI7CisgICAg
fQorfSk7Cit2YXIgcjIwID0gLyUyMC9nLAorICAgIHJicmFja2V0ID0gL1xbXF0kLywKKyAgICBy
Q1JMRiA9IC9ccj9cbi9nLAorICAgIHJpbnB1dCA9IC9eKD86Y29sb3J8ZGF0ZXxkYXRldGltZXxk
YXRldGltZS1sb2NhbHxlbWFpbHxoaWRkZW58bW9udGh8bnVtYmVyfHBhc3N3b3JkfHJhbmdlfHNl
YXJjaHx0ZWx8dGV4dHx0aW1lfHVybHx3ZWVrKSQvaSwKKyAgICByc2VsZWN0VGV4dGFyZWEgPSAv
Xig/OnNlbGVjdHx0ZXh0YXJlYSkvaTsKKworalF1ZXJ5LmZuLmV4dGVuZCh7CisgICAgc2VyaWFs
aXplOiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5wYXJhbSggdGhpcy5zZXJp
YWxpemVBcnJheSgpICk7CisgICAgfSwKKyAgICBzZXJpYWxpemVBcnJheTogZnVuY3Rpb24oKSB7
CisgICAgICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbigpeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuZWxlbWVudHMgPyBqUXVlcnkubWFrZUFycmF5KCB0aGlzLmVsZW1lbnRzICkgOiB0aGlz
OworICAgICAgICB9KQorICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uKCl7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5uYW1lICYmICF0aGlzLmRpc2FibGVkICYmCisgICAgICAgICAgICAgICAgKCB0
aGlzLmNoZWNrZWQgfHwgcnNlbGVjdFRleHRhcmVhLnRlc3QoIHRoaXMubm9kZU5hbWUgKSB8fAor
ICAgICAgICAgICAgICAgICAgICByaW5wdXQudGVzdCggdGhpcy50eXBlICkgKTsKKyAgICAgICAg
fSkKKyAgICAgICAgLm1hcChmdW5jdGlvbiggaSwgZWxlbSApeworICAgICAgICAgICAgdmFyIHZh
bCA9IGpRdWVyeSggdGhpcyApLnZhbCgpOworCisgICAgICAgICAgICByZXR1cm4gdmFsID09IG51
bGwgPworICAgICAgICAgICAgICAgIG51bGwgOgorICAgICAgICAgICAgICAgIGpRdWVyeS5pc0Fy
cmF5KCB2YWwgKSA/CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rp
b24oIHZhbCwgaSApeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgbmFtZTogZWxl
bS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCAiXHJcbiIgKSB9OworICAgICAgICAg
ICAgICAgICAgICB9KSA6CisgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogZWxlbS5uYW1lLCB2
YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCAiXHJcbiIgKSB9OworICAgICAgICB9KS5nZXQoKTsK
KyAgICB9Cit9KTsKKworLy9TZXJpYWxpemUgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cyBvciBh
IHNldCBvZgorLy9rZXkvdmFsdWVzIGludG8gYSBxdWVyeSBzdHJpbmcKK2pRdWVyeS5wYXJhbSA9
IGZ1bmN0aW9uKCBhLCB0cmFkaXRpb25hbCApIHsKKyAgICB2YXIgcHJlZml4LAorICAgICAgICBz
ID0gW10sCisgICAgICAgIGFkZCA9IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkgeworICAgICAgICAg
ICAgLy8gSWYgdmFsdWUgaXMgYSBmdW5jdGlvbiwgaW52b2tlIGl0IGFuZCByZXR1cm4gaXRzIHZh
bHVlCisgICAgICAgICAgICB2YWx1ZSA9IGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApID8gdmFs
dWUoKSA6ICggdmFsdWUgPT0gbnVsbCA/ICIiIDogdmFsdWUgKTsKKyAgICAgICAgICAgIHNbIHMu
bGVuZ3RoIF0gPSBlbmNvZGVVUklDb21wb25lbnQoIGtleSApICsgIj0iICsgZW5jb2RlVVJJQ29t
cG9uZW50KCB2YWx1ZSApOworICAgICAgICB9OworCisgICAgLy8gU2V0IHRyYWRpdGlvbmFsIHRv
IHRydWUgZm9yIGpRdWVyeSA8PSAxLjMuMiBiZWhhdmlvci4KKyAgICBpZiAoIHRyYWRpdGlvbmFs
ID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgIHRyYWRpdGlvbmFsID0galF1ZXJ5LmFqYXhTZXR0
aW5ncyAmJiBqUXVlcnkuYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsOworICAgIH0KKworICAgIC8v
IElmIGFuIGFycmF5IHdhcyBwYXNzZWQgaW4sIGFzc3VtZSB0aGF0IGl0IGlzIGFuIGFycmF5IG9m
IGZvcm0gZWxlbWVudHMuCisgICAgaWYgKCBqUXVlcnkuaXNBcnJheSggYSApIHx8ICggYS5qcXVl
cnkgJiYgIWpRdWVyeS5pc1BsYWluT2JqZWN0KCBhICkgKSApIHsKKyAgICAgICAgLy8gU2VyaWFs
aXplIHRoZSBmb3JtIGVsZW1lbnRzCisgICAgICAgIGpRdWVyeS5lYWNoKCBhLCBmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgIGFkZCggdGhpcy5uYW1lLCB0aGlzLnZhbHVlICk7CisgICAgICAgIH0p
OworCisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSWYgdHJhZGl0aW9uYWwsIGVuY29kZSB0aGUg
Im9sZCIgd2F5ICh0aGUgd2F5IDEuMy4yIG9yIG9sZGVyCisgICAgICAgIC8vIGRpZCBpdCksIG90
aGVyd2lzZSBlbmNvZGUgcGFyYW1zIHJlY3Vyc2l2ZWx5LgorICAgICAgICBmb3IgKCBwcmVmaXgg
aW4gYSApIHsKKyAgICAgICAgICAgIGJ1aWxkUGFyYW1zKCBwcmVmaXgsIGFbIHByZWZpeCBdLCB0
cmFkaXRpb25hbCwgYWRkICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBSZXR1cm4gdGhl
IHJlc3VsdGluZyBzZXJpYWxpemF0aW9uCisgICAgcmV0dXJuIHMuam9pbiggIiYiICkucmVwbGFj
ZSggcjIwLCAiKyIgKTsKK307CisKK2Z1bmN0aW9uIGJ1aWxkUGFyYW1zKCBwcmVmaXgsIG9iaiwg
dHJhZGl0aW9uYWwsIGFkZCApIHsKKyAgICB2YXIgbmFtZTsKKworICAgIGlmICggalF1ZXJ5Lmlz
QXJyYXkoIG9iaiApICkgeworICAgICAgICAvLyBTZXJpYWxpemUgYXJyYXkgaXRlbS4KKyAgICAg
ICAgalF1ZXJ5LmVhY2goIG9iaiwgZnVuY3Rpb24oIGksIHYgKSB7CisgICAgICAgICAgICBpZiAo
IHRyYWRpdGlvbmFsIHx8IHJicmFja2V0LnRlc3QoIHByZWZpeCApICkgeworICAgICAgICAgICAg
ICAgIC8vIFRyZWF0IGVhY2ggYXJyYXkgaXRlbSBhcyBhIHNjYWxhci4KKyAgICAgICAgICAgICAg
ICBhZGQoIHByZWZpeCwgdiApOworCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIC8vIElmIGFycmF5IGl0ZW0gaXMgbm9uLXNjYWxhciAoYXJyYXkgb3Igb2JqZWN0KSwgZW5j
b2RlIGl0cworICAgICAgICAgICAgICAgIC8vIG51bWVyaWMgaW5kZXggdG8gcmVzb2x2ZSBkZXNl
cmlhbGl6YXRpb24gYW1iaWd1aXR5IGlzc3Vlcy4KKyAgICAgICAgICAgICAgICAvLyBOb3RlIHRo
YXQgcmFjayAoYXMgb2YgMS4wLjApIGNhbid0IGN1cnJlbnRseSBkZXNlcmlhbGl6ZQorICAgICAg
ICAgICAgICAgIC8vIG5lc3RlZCBhcnJheXMgcHJvcGVybHksIGFuZCBhdHRlbXB0aW5nIHRvIGRv
IHNvIG1heSBjYXVzZQorICAgICAgICAgICAgICAgIC8vIGEgc2VydmVyIGVycm9yLiBQb3NzaWJs
ZSBmaXhlcyBhcmUgdG8gbW9kaWZ5IHJhY2sncworICAgICAgICAgICAgICAgIC8vIGRlc2VyaWFs
aXphdGlvbiBhbGdvcml0aG0gb3IgdG8gcHJvdmlkZSBhbiBvcHRpb24gb3IgZmxhZworICAgICAg
ICAgICAgICAgIC8vIHRvIGZvcmNlIGFycmF5IHNlcmlhbGl6YXRpb24gdG8gYmUgc2hhbGxvdy4K
KyAgICAgICAgICAgICAgICBidWlsZFBhcmFtcyggcHJlZml4ICsgIlsiICsgKCB0eXBlb2YgdiA9
PT0gIm9iamVjdCIgPyBpIDogIiIgKSArICJdIiwgdiwgdHJhZGl0aW9uYWwsIGFkZCApOworICAg
ICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgIH0gZWxzZSBpZiAoICF0cmFkaXRpb25hbCAm
JiBqUXVlcnkudHlwZSggb2JqICkgPT09ICJvYmplY3QiICkgeworICAgICAgICAvLyBTZXJpYWxp
emUgb2JqZWN0IGl0ZW0uCisgICAgICAgIGZvciAoIG5hbWUgaW4gb2JqICkgeworICAgICAgICAg
ICAgYnVpbGRQYXJhbXMoIHByZWZpeCArICJbIiArIG5hbWUgKyAiXSIsIG9ialsgbmFtZSBdLCB0
cmFkaXRpb25hbCwgYWRkICk7CisgICAgICAgIH0KKworICAgIH0gZWxzZSB7CisgICAgICAgIC8v
IFNlcmlhbGl6ZSBzY2FsYXIgaXRlbS4KKyAgICAgICAgYWRkKCBwcmVmaXgsIG9iaiApOworICAg
IH0KK30KK3ZhcgorICAgIC8vIERvY3VtZW50IGxvY2F0aW9uCisgICAgYWpheExvY1BhcnRzLAor
ICAgIGFqYXhMb2NhdGlvbiwKKworICAgIHJoYXNoID0gLyMuKiQvLAorICAgIHJoZWFkZXJzID0g
L14oLio/KTpbIFx0XSooW15cclxuXSopXHI/JC9tZywgLy8gSUUgbGVhdmVzIGFuIFxyIGNoYXJh
Y3RlciBhdCBFT0wKKyAgICAvLyAjNzY1MywgIzgxMjUsICM4MTUyOiBsb2NhbCBwcm90b2NvbCBk
ZXRlY3Rpb24KKyAgICBybG9jYWxQcm90b2NvbCA9IC9eKD86YWJvdXR8YXBwfGFwcFwtc3RvcmFn
ZXwuK1wtZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sCisgICAgcm5vQ29udGVudCA9IC9e
KD86R0VUfEhFQUQpJC8sCisgICAgcnByb3RvY29sID0gL15cL1wvLywKKyAgICBycXVlcnkgPSAv
XD8vLAorICAgIHJzY3JpcHQgPSAvPHNjcmlwdFxiW148XSooPzooPyE8XC9zY3JpcHQ+KTxbXjxd
KikqPFwvc2NyaXB0Pi9naSwKKyAgICBydHMgPSAvKFs/Jl0pXz1bXiZdKi8sCisgICAgcnVybCA9
IC9eKFtcd1wrXC5cLV0rOikoPzpcL1wvKFteXC8/IzpdKikoPzo6KFxkKyl8KXwpLywKKworICAg
IC8vIEtlZXAgYSBjb3B5IG9mIHRoZSBvbGQgbG9hZCBtZXRob2QKKyAgICBfbG9hZCA9IGpRdWVy
eS5mbi5sb2FkLAorCisgICAgLyogUHJlZmlsdGVycworICAgICAqIDEpIFRoZXkgYXJlIHVzZWZ1
bCB0byBpbnRyb2R1Y2UgY3VzdG9tIGRhdGFUeXBlcyAoc2VlIGFqYXgvanNvbnAuanMgZm9yIGFu
IGV4YW1wbGUpCisgICAgICogMikgVGhlc2UgYXJlIGNhbGxlZDoKKyAgICAgKiAgICAtIEJFRk9S
RSBhc2tpbmcgZm9yIGEgdHJhbnNwb3J0CisgICAgICogICAgLSBBRlRFUiBwYXJhbSBzZXJpYWxp
emF0aW9uIChzLmRhdGEgaXMgYSBzdHJpbmcgaWYgcy5wcm9jZXNzRGF0YSBpcyB0cnVlKQorICAg
ICAqIDMpIGtleSBpcyB0aGUgZGF0YVR5cGUKKyAgICAgKiA0KSB0aGUgY2F0Y2hhbGwgc3ltYm9s
ICIqIiBjYW4gYmUgdXNlZAorICAgICAqIDUpIGV4ZWN1dGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJh
bnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGNvbnRpbnVlIGRvd24gdG8gIioiIGlmIG5lZWRlZAor
ICAgICAqLworICAgIHByZWZpbHRlcnMgPSB7fSwKKworICAgIC8qIFRyYW5zcG9ydHMgYmluZGlu
Z3MKKyAgICAgKiAxKSBrZXkgaXMgdGhlIGRhdGFUeXBlCisgICAgICogMikgdGhlIGNhdGNoYWxs
IHN5bWJvbCAiKiIgY2FuIGJlIHVzZWQKKyAgICAgKiAzKSBzZWxlY3Rpb24gd2lsbCBzdGFydCB3
aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBnbyB0byAiKiIgaWYgbmVlZGVkCisgICAg
ICovCisgICAgdHJhbnNwb3J0cyA9IHt9LAorCisgICAgLy8gQXZvaWQgY29tbWVudC1wcm9sb2cg
Y2hhciBzZXF1ZW5jZSAoIzEwMDk4KTsgbXVzdCBhcHBlYXNlIGxpbnQgYW5kIGV2YWRlIGNvbXBy
ZXNzaW9uCisgICAgYWxsVHlwZXMgPSBbIiovIl0gKyBbIioiXTsKKworLy8gIzgxMzgsIElFIG1h
eSB0aHJvdyBhbiBleGNlcHRpb24gd2hlbiBhY2Nlc3NpbmcKKy8vIGEgZmllbGQgZnJvbSB3aW5k
b3cubG9jYXRpb24gaWYgZG9jdW1lbnQuZG9tYWluIGhhcyBiZWVuIHNldAordHJ5IHsKKyAgICBh
amF4TG9jYXRpb24gPSBsb2NhdGlvbi5ocmVmOworfSBjYXRjaCggZSApIHsKKyAgICAvLyBVc2Ug
dGhlIGhyZWYgYXR0cmlidXRlIG9mIGFuIEEgZWxlbWVudAorICAgIC8vIHNpbmNlIElFIHdpbGwg
bW9kaWZ5IGl0IGdpdmVuIGRvY3VtZW50LmxvY2F0aW9uCisgICAgYWpheExvY2F0aW9uID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCggImEiICk7CisgICAgYWpheExvY2F0aW9uLmhyZWYgPSAiIjsK
KyAgICBhamF4TG9jYXRpb24gPSBhamF4TG9jYXRpb24uaHJlZjsKK30KKworLy8gU2VnbWVudCBs
b2NhdGlvbiBpbnRvIHBhcnRzCithamF4TG9jUGFydHMgPSBydXJsLmV4ZWMoIGFqYXhMb2NhdGlv
bi50b0xvd2VyQ2FzZSgpICkgfHwgW107CisKKy8vIEJhc2UgImNvbnN0cnVjdG9yIiBmb3IgalF1
ZXJ5LmFqYXhQcmVmaWx0ZXIgYW5kIGpRdWVyeS5hamF4VHJhbnNwb3J0CitmdW5jdGlvbiBhZGRU
b1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSApIHsKKworICAgIC8vIGRhdGFUeXBl
RXhwcmVzc2lvbiBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gIioiCisgICAgcmV0dXJuIGZ1
bmN0aW9uKCBkYXRhVHlwZUV4cHJlc3Npb24sIGZ1bmMgKSB7CisKKyAgICAgICAgaWYgKCB0eXBl
b2YgZGF0YVR5cGVFeHByZXNzaW9uICE9PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgIGZ1bmMg
PSBkYXRhVHlwZUV4cHJlc3Npb247CisgICAgICAgICAgICBkYXRhVHlwZUV4cHJlc3Npb24gPSAi
KiI7CisgICAgICAgIH0KKworICAgICAgICB2YXIgZGF0YVR5cGUsIGxpc3QsIHBsYWNlQmVmb3Jl
LAorICAgICAgICAgICAgZGF0YVR5cGVzID0gZGF0YVR5cGVFeHByZXNzaW9uLnRvTG93ZXJDYXNl
KCkuc3BsaXQoIGNvcmVfcnNwYWNlICksCisgICAgICAgICAgICBpID0gMCwKKyAgICAgICAgICAg
IGxlbmd0aCA9IGRhdGFUeXBlcy5sZW5ndGg7CisKKyAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5j
dGlvbiggZnVuYyApICkgeworICAgICAgICAgICAgLy8gRm9yIGVhY2ggZGF0YVR5cGUgaW4gdGhl
IGRhdGFUeXBlRXhwcmVzc2lvbgorICAgICAgICAgICAgZm9yICggOyBpIDwgbGVuZ3RoOyBpKysg
KSB7CisgICAgICAgICAgICAgICAgZGF0YVR5cGUgPSBkYXRhVHlwZXNbIGkgXTsKKyAgICAgICAg
ICAgICAgICAvLyBXZSBjb250cm9sIGlmIHdlJ3JlIGFza2VkIHRvIGFkZCBiZWZvcmUKKyAgICAg
ICAgICAgICAgICAvLyBhbnkgZXhpc3RpbmcgZWxlbWVudAorICAgICAgICAgICAgICAgIHBsYWNl
QmVmb3JlID0gL15cKy8udGVzdCggZGF0YVR5cGUgKTsKKyAgICAgICAgICAgICAgICBpZiAoIHBs
YWNlQmVmb3JlICkgeworICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZSA9IGRhdGFUeXBlLnN1
YnN0ciggMSApIHx8ICIqIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGlz
dCA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXTsK
KyAgICAgICAgICAgICAgICAvLyB0aGVuIHdlIGFkZCB0byB0aGUgc3RydWN0dXJlIGFjY29yZGlu
Z2x5CisgICAgICAgICAgICAgICAgbGlzdFsgcGxhY2VCZWZvcmUgPyAidW5zaGlmdCIgOiAicHVz
aCIgXSggZnVuYyApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKK30KKworLy8g
QmFzZSBpbnNwZWN0aW9uIGZ1bmN0aW9uIGZvciBwcmVmaWx0ZXJzIGFuZCB0cmFuc3BvcnRzCitm
dW5jdGlvbiBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlLCBvcHRpb25z
LCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSLAorICAgICAgICBkYXRhVHlwZSAvKiBpbnRlcm5hbCAq
LywgaW5zcGVjdGVkIC8qIGludGVybmFsICovICkgeworCisgICAgZGF0YVR5cGUgPSBkYXRhVHlw
ZSB8fCBvcHRpb25zLmRhdGFUeXBlc1sgMCBdOworICAgIGluc3BlY3RlZCA9IGluc3BlY3RlZCB8
fCB7fTsKKworICAgIGluc3BlY3RlZFsgZGF0YVR5cGUgXSA9IHRydWU7CisKKyAgICB2YXIgc2Vs
ZWN0aW9uLAorICAgICAgICBsaXN0ID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdLAorICAgICAgICBp
ID0gMCwKKyAgICAgICAgbGVuZ3RoID0gbGlzdCA/IGxpc3QubGVuZ3RoIDogMCwKKyAgICAgICAg
ZXhlY3V0ZU9ubHkgPSAoIHN0cnVjdHVyZSA9PT0gcHJlZmlsdGVycyApOworCisgICAgZm9yICgg
OyBpIDwgbGVuZ3RoICYmICggZXhlY3V0ZU9ubHkgfHwgIXNlbGVjdGlvbiApOyBpKysgKSB7Cisg
ICAgICAgIHNlbGVjdGlvbiA9IGxpc3RbIGkgXSggb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBq
cVhIUiApOworICAgICAgICAvLyBJZiB3ZSBnb3QgcmVkaXJlY3RlZCB0byBhbm90aGVyIGRhdGFU
eXBlCisgICAgICAgIC8vIHdlIHRyeSB0aGVyZSBpZiBleGVjdXRpbmcgb25seSBhbmQgbm90IGRv
bmUgYWxyZWFkeQorICAgICAgICBpZiAoIHR5cGVvZiBzZWxlY3Rpb24gPT09ICJzdHJpbmciICkg
eworICAgICAgICAgICAgaWYgKCAhZXhlY3V0ZU9ubHkgfHwgaW5zcGVjdGVkWyBzZWxlY3Rpb24g
XSApIHsKKyAgICAgICAgICAgICAgICBzZWxlY3Rpb24gPSB1bmRlZmluZWQ7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG9wdGlvbnMuZGF0YVR5cGVzLnVuc2hpZnQoIHNl
bGVjdGlvbiApOworICAgICAgICAgICAgICAgIHNlbGVjdGlvbiA9IGluc3BlY3RQcmVmaWx0ZXJz
T3JUcmFuc3BvcnRzKAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBvcHRpb25z
LCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSLCBzZWxlY3Rpb24sIGluc3BlY3RlZCApOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIC8vIElmIHdlJ3JlIG9ubHkgZXhlY3V0aW5n
IG9yIG5vdGhpbmcgd2FzIHNlbGVjdGVkCisgICAgLy8gd2UgdHJ5IHRoZSBjYXRjaGFsbCBkYXRh
VHlwZSBpZiBub3QgZG9uZSBhbHJlYWR5CisgICAgaWYgKCAoIGV4ZWN1dGVPbmx5IHx8ICFzZWxl
Y3Rpb24gKSAmJiAhaW5zcGVjdGVkWyAiKiIgXSApIHsKKyAgICAgICAgc2VsZWN0aW9uID0gaW5z
cGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoCisgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBv
cHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSLCAiKiIsIGluc3BlY3RlZCApOworICAgIH0K
KyAgICAvLyB1bm5lY2Vzc2FyeSB3aGVuIG9ubHkgZXhlY3V0aW5nIChwcmVmaWx0ZXJzKQorICAg
IC8vIGJ1dCBpdCdsbCBiZSBpZ25vcmVkIGJ5IHRoZSBjYWxsZXIgaW4gdGhhdCBjYXNlCisgICAg
cmV0dXJuIHNlbGVjdGlvbjsKK30KKworLy8gQSBzcGVjaWFsIGV4dGVuZCBmb3IgYWpheCBvcHRp
b25zCisvLyB0aGF0IHRha2VzICJmbGF0IiBvcHRpb25zIChub3QgdG8gYmUgZGVlcCBleHRlbmRl
ZCkKKy8vIEZpeGVzICM5ODg3CitmdW5jdGlvbiBhamF4RXh0ZW5kKCB0YXJnZXQsIHNyYyApIHsK
KyAgICB2YXIga2V5LCBkZWVwLAorICAgICAgICBmbGF0T3B0aW9ucyA9IGpRdWVyeS5hamF4U2V0
dGluZ3MuZmxhdE9wdGlvbnMgfHwge307CisgICAgZm9yICgga2V5IGluIHNyYyApIHsKKyAgICAg
ICAgaWYgKCBzcmNbIGtleSBdICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAoIGZsYXRP
cHRpb25zWyBrZXkgXSA/IHRhcmdldCA6ICggZGVlcCB8fCAoIGRlZXAgPSB7fSApICkgKVsga2V5
IF0gPSBzcmNbIGtleSBdOworICAgICAgICB9CisgICAgfQorICAgIGlmICggZGVlcCApIHsKKyAg
ICAgICAgalF1ZXJ5LmV4dGVuZCggdHJ1ZSwgdGFyZ2V0LCBkZWVwICk7CisgICAgfQorfQorCitq
UXVlcnkuZm4ubG9hZCA9IGZ1bmN0aW9uKCB1cmwsIHBhcmFtcywgY2FsbGJhY2sgKSB7CisgICAg
aWYgKCB0eXBlb2YgdXJsICE9PSAic3RyaW5nIiAmJiBfbG9hZCApIHsKKyAgICAgICAgcmV0dXJu
IF9sb2FkLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKKyAgICB9CisKKyAgICAvLyBEb24ndCBk
byBhIHJlcXVlc3QgaWYgbm8gZWxlbWVudHMgYXJlIGJlaW5nIHJlcXVlc3RlZAorICAgIGlmICgg
IXRoaXMubGVuZ3RoICkgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisKKyAgICB2YXIg
c2VsZWN0b3IsIHR5cGUsIHJlc3BvbnNlLAorICAgICAgICBzZWxmID0gdGhpcywKKyAgICAgICAg
b2ZmID0gdXJsLmluZGV4T2YoIiAiKTsKKworICAgIGlmICggb2ZmID49IDAgKSB7CisgICAgICAg
IHNlbGVjdG9yID0gdXJsLnNsaWNlKCBvZmYsIHVybC5sZW5ndGggKTsKKyAgICAgICAgdXJsID0g
dXJsLnNsaWNlKCAwLCBvZmYgKTsKKyAgICB9CisKKyAgICAvLyBJZiBpdCdzIGEgZnVuY3Rpb24K
KyAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBwYXJhbXMgKSApIHsKKworICAgICAgICAvLyBX
ZSBhc3N1bWUgdGhhdCBpdCdzIHRoZSBjYWxsYmFjaworICAgICAgICBjYWxsYmFjayA9IHBhcmFt
czsKKyAgICAgICAgcGFyYW1zID0gdW5kZWZpbmVkOworCisgICAgLy8gT3RoZXJ3aXNlLCBidWls
ZCBhIHBhcmFtIHN0cmluZworICAgIH0gZWxzZSBpZiAoIHBhcmFtcyAmJiB0eXBlb2YgcGFyYW1z
ID09PSAib2JqZWN0IiApIHsKKyAgICAgICAgdHlwZSA9ICJQT1NUIjsKKyAgICB9CisKKyAgICAv
LyBSZXF1ZXN0IHRoZSByZW1vdGUgZG9jdW1lbnQKKyAgICBqUXVlcnkuYWpheCh7CisgICAgICAg
IHVybDogdXJsLAorCisgICAgICAgIC8vIGlmICJ0eXBlIiB2YXJpYWJsZSBpcyB1bmRlZmluZWQs
IHRoZW4gIkdFVCIgbWV0aG9kIHdpbGwgYmUgdXNlZAorICAgICAgICB0eXBlOiB0eXBlLAorICAg
ICAgICBkYXRhVHlwZTogImh0bWwiLAorICAgICAgICBkYXRhOiBwYXJhbXMsCisgICAgICAgIGNv
bXBsZXRlOiBmdW5jdGlvbigganFYSFIsIHN0YXR1cyApIHsKKyAgICAgICAgICAgIGlmICggY2Fs
bGJhY2sgKSB7CisgICAgICAgICAgICAgICAgc2VsZi5lYWNoKCBjYWxsYmFjaywgcmVzcG9uc2Ug
fHwgWyBqcVhIUi5yZXNwb25zZVRleHQsIHN0YXR1cywganFYSFIgXSApOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfSkuZG9uZShmdW5jdGlvbiggcmVzcG9uc2VUZXh0ICkgeworCisg
ICAgICAgIC8vIFNhdmUgcmVzcG9uc2UgZm9yIHVzZSBpbiBjb21wbGV0ZSBjYWxsYmFjaworICAg
ICAgICByZXNwb25zZSA9IGFyZ3VtZW50czsKKworICAgICAgICAvLyBTZWUgaWYgYSBzZWxlY3Rv
ciB3YXMgc3BlY2lmaWVkCisgICAgICAgIHNlbGYuaHRtbCggc2VsZWN0b3IgPworCisgICAgICAg
ICAgICAvLyBDcmVhdGUgYSBkdW1teSBkaXYgdG8gaG9sZCB0aGUgcmVzdWx0cworICAgICAgICAg
ICAgalF1ZXJ5KCI8ZGl2PiIpCisKKyAgICAgICAgICAgICAgICAvLyBpbmplY3QgdGhlIGNvbnRl
bnRzIG9mIHRoZSBkb2N1bWVudCBpbiwgcmVtb3ZpbmcgdGhlIHNjcmlwdHMKKyAgICAgICAgICAg
ICAgICAvLyB0byBhdm9pZCBhbnkgJ1Blcm1pc3Npb24gRGVuaWVkJyBlcnJvcnMgaW4gSUUKKyAg
ICAgICAgICAgICAgICAuYXBwZW5kKCByZXNwb25zZVRleHQucmVwbGFjZSggcnNjcmlwdCwgIiIg
KSApCisKKyAgICAgICAgICAgICAgICAvLyBMb2NhdGUgdGhlIHNwZWNpZmllZCBlbGVtZW50cwor
ICAgICAgICAgICAgICAgIC5maW5kKCBzZWxlY3RvciApIDoKKworICAgICAgICAgICAgLy8gSWYg
bm90LCBqdXN0IGluamVjdCB0aGUgZnVsbCByZXN1bHQKKyAgICAgICAgICAgIHJlc3BvbnNlVGV4
dCApOworCisgICAgfSk7CisKKyAgICByZXR1cm4gdGhpczsKK307CisKKy8vIEF0dGFjaCBhIGJ1
bmNoIG9mIGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgY29tbW9uIEFKQVggZXZlbnRzCitqUXVlcnku
ZWFjaCggImFqYXhTdGFydCBhamF4U3RvcCBhamF4Q29tcGxldGUgYWpheEVycm9yIGFqYXhTdWNj
ZXNzIGFqYXhTZW5kIi5zcGxpdCggIiAiICksIGZ1bmN0aW9uKCBpLCBvICl7CisgICAgalF1ZXJ5
LmZuWyBvIF0gPSBmdW5jdGlvbiggZiApeworICAgICAgICByZXR1cm4gdGhpcy5vbiggbywgZiAp
OworICAgIH07Cit9KTsKKworalF1ZXJ5LmVhY2goIFsgImdldCIsICJwb3N0IiBdLCBmdW5jdGlv
biggaSwgbWV0aG9kICkgeworICAgIGpRdWVyeVsgbWV0aG9kIF0gPSBmdW5jdGlvbiggdXJsLCBk
YXRhLCBjYWxsYmFjaywgdHlwZSApIHsKKyAgICAgICAgLy8gc2hpZnQgYXJndW1lbnRzIGlmIGRh
dGEgYXJndW1lbnQgd2FzIG9taXR0ZWQKKyAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbigg
ZGF0YSApICkgeworICAgICAgICAgICAgdHlwZSA9IHR5cGUgfHwgY2FsbGJhY2s7CisgICAgICAg
ICAgICBjYWxsYmFjayA9IGRhdGE7CisgICAgICAgICAgICBkYXRhID0gdW5kZWZpbmVkOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5hamF4KHsKKyAgICAgICAgICAgIHR5cGU6
IG1ldGhvZCwKKyAgICAgICAgICAgIHVybDogdXJsLAorICAgICAgICAgICAgZGF0YTogZGF0YSwK
KyAgICAgICAgICAgIHN1Y2Nlc3M6IGNhbGxiYWNrLAorICAgICAgICAgICAgZGF0YVR5cGU6IHR5
cGUKKyAgICAgICAgfSk7CisgICAgfTsKK30pOworCitqUXVlcnkuZXh0ZW5kKHsKKworICAgIGdl
dFNjcmlwdDogZnVuY3Rpb24oIHVybCwgY2FsbGJhY2sgKSB7CisgICAgICAgIHJldHVybiBqUXVl
cnkuZ2V0KCB1cmwsIHVuZGVmaW5lZCwgY2FsbGJhY2ssICJzY3JpcHQiICk7CisgICAgfSwKKwor
ICAgIGdldEpTT046IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrICkgeworICAgICAgICBy
ZXR1cm4galF1ZXJ5LmdldCggdXJsLCBkYXRhLCBjYWxsYmFjaywgImpzb24iICk7CisgICAgfSwK
KworICAgIC8vIENyZWF0ZXMgYSBmdWxsIGZsZWRnZWQgc2V0dGluZ3Mgb2JqZWN0IGludG8gdGFy
Z2V0CisgICAgLy8gd2l0aCBib3RoIGFqYXhTZXR0aW5ncyBhbmQgc2V0dGluZ3MgZmllbGRzLgor
ICAgIC8vIElmIHRhcmdldCBpcyBvbWl0dGVkLCB3cml0ZXMgaW50byBhamF4U2V0dGluZ3MuCisg
ICAgYWpheFNldHVwOiBmdW5jdGlvbiggdGFyZ2V0LCBzZXR0aW5ncyApIHsKKyAgICAgICAgaWYg
KCBzZXR0aW5ncyApIHsKKyAgICAgICAgICAgIC8vIEJ1aWxkaW5nIGEgc2V0dGluZ3Mgb2JqZWN0
CisgICAgICAgICAgICBhamF4RXh0ZW5kKCB0YXJnZXQsIGpRdWVyeS5hamF4U2V0dGluZ3MgKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEV4dGVuZGluZyBhamF4U2V0dGluZ3MK
KyAgICAgICAgICAgIHNldHRpbmdzID0gdGFyZ2V0OworICAgICAgICAgICAgdGFyZ2V0ID0galF1
ZXJ5LmFqYXhTZXR0aW5nczsKKyAgICAgICAgfQorICAgICAgICBhamF4RXh0ZW5kKCB0YXJnZXQs
IHNldHRpbmdzICk7CisgICAgICAgIHJldHVybiB0YXJnZXQ7CisgICAgfSwKKworICAgIGFqYXhT
ZXR0aW5nczogeworICAgICAgICB1cmw6IGFqYXhMb2NhdGlvbiwKKyAgICAgICAgaXNMb2NhbDog
cmxvY2FsUHJvdG9jb2wudGVzdCggYWpheExvY1BhcnRzWyAxIF0gKSwKKyAgICAgICAgZ2xvYmFs
OiB0cnVlLAorICAgICAgICB0eXBlOiAiR0VUIiwKKyAgICAgICAgY29udGVudFR5cGU6ICJhcHBs
aWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLAorICAgICAgICBw
cm9jZXNzRGF0YTogdHJ1ZSwKKyAgICAgICAgYXN5bmM6IHRydWUsCisgICAgICAgIC8qCisgICAg
ICAgIHRpbWVvdXQ6IDAsCisgICAgICAgIGRhdGE6IG51bGwsCisgICAgICAgIGRhdGFUeXBlOiBu
dWxsLAorICAgICAgICB1c2VybmFtZTogbnVsbCwKKyAgICAgICAgcGFzc3dvcmQ6IG51bGwsCisg
ICAgICAgIGNhY2hlOiBudWxsLAorICAgICAgICB0aHJvd3M6IGZhbHNlLAorICAgICAgICB0cmFk
aXRpb25hbDogZmFsc2UsCisgICAgICAgIGhlYWRlcnM6IHt9LAorICAgICAgICAqLworCisgICAg
ICAgIGFjY2VwdHM6IHsKKyAgICAgICAgICAgIHhtbDogImFwcGxpY2F0aW9uL3htbCwgdGV4dC94
bWwiLAorICAgICAgICAgICAgaHRtbDogInRleHQvaHRtbCIsCisgICAgICAgICAgICB0ZXh0OiAi
dGV4dC9wbGFpbiIsCisgICAgICAgICAgICBqc29uOiAiYXBwbGljYXRpb24vanNvbiwgdGV4dC9q
YXZhc2NyaXB0IiwKKyAgICAgICAgICAgICIqIjogYWxsVHlwZXMKKyAgICAgICAgfSwKKworICAg
ICAgICBjb250ZW50czogeworICAgICAgICAgICAgeG1sOiAveG1sLywKKyAgICAgICAgICAgIGh0
bWw6IC9odG1sLywKKyAgICAgICAgICAgIGpzb246IC9qc29uLworICAgICAgICB9LAorCisgICAg
ICAgIHJlc3BvbnNlRmllbGRzOiB7CisgICAgICAgICAgICB4bWw6ICJyZXNwb25zZVhNTCIsCisg
ICAgICAgICAgICB0ZXh0OiAicmVzcG9uc2VUZXh0IgorICAgICAgICB9LAorCisgICAgICAgIC8v
IExpc3Qgb2YgZGF0YSBjb252ZXJ0ZXJzCisgICAgICAgIC8vIDEpIGtleSBmb3JtYXQgaXMgInNv
dXJjZV90eXBlIGRlc3RpbmF0aW9uX3R5cGUiIChhIHNpbmdsZSBzcGFjZSBpbi1iZXR3ZWVuKQor
ICAgICAgICAvLyAyKSB0aGUgY2F0Y2hhbGwgc3ltYm9sICIqIiBjYW4gYmUgdXNlZCBmb3Igc291
cmNlX3R5cGUKKyAgICAgICAgY29udmVydGVyczogeworCisgICAgICAgICAgICAvLyBDb252ZXJ0
IGFueXRoaW5nIHRvIHRleHQKKyAgICAgICAgICAgICIqIHRleHQiOiB3aW5kb3cuU3RyaW5nLAor
CisgICAgICAgICAgICAvLyBUZXh0IHRvIGh0bWwgKHRydWUgPSBubyB0cmFuc2Zvcm1hdGlvbikK
KyAgICAgICAgICAgICJ0ZXh0IGh0bWwiOiB0cnVlLAorCisgICAgICAgICAgICAvLyBFdmFsdWF0
ZSB0ZXh0IGFzIGEganNvbiBleHByZXNzaW9uCisgICAgICAgICAgICAidGV4dCBqc29uIjogalF1
ZXJ5LnBhcnNlSlNPTiwKKworICAgICAgICAgICAgLy8gUGFyc2UgdGV4dCBhcyB4bWwKKyAgICAg
ICAgICAgICJ0ZXh0IHhtbCI6IGpRdWVyeS5wYXJzZVhNTAorICAgICAgICB9LAorCisgICAgICAg
IC8vIEZvciBvcHRpb25zIHRoYXQgc2hvdWxkbid0IGJlIGRlZXAgZXh0ZW5kZWQ6CisgICAgICAg
IC8vIHlvdSBjYW4gYWRkIHlvdXIgb3duIGN1c3RvbSBvcHRpb25zIGhlcmUgaWYKKyAgICAgICAg
Ly8gYW5kIHdoZW4geW91IGNyZWF0ZSBvbmUgdGhhdCBzaG91bGRuJ3QgYmUKKyAgICAgICAgLy8g
ZGVlcCBleHRlbmRlZCAoc2VlIGFqYXhFeHRlbmQpCisgICAgICAgIGZsYXRPcHRpb25zOiB7Cisg
ICAgICAgICAgICBjb250ZXh0OiB0cnVlLAorICAgICAgICAgICAgdXJsOiB0cnVlCisgICAgICAg
IH0KKyAgICB9LAorCisgICAgYWpheFByZWZpbHRlcjogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3Bv
cnRzKCBwcmVmaWx0ZXJzICksCisgICAgYWpheFRyYW5zcG9ydDogYWRkVG9QcmVmaWx0ZXJzT3JU
cmFuc3BvcnRzKCB0cmFuc3BvcnRzICksCisKKyAgICAvLyBNYWluIG1ldGhvZAorICAgIGFqYXg6
IGZ1bmN0aW9uKCB1cmwsIG9wdGlvbnMgKSB7CisKKyAgICAgICAgLy8gSWYgdXJsIGlzIGFuIG9i
amVjdCwgc2ltdWxhdGUgcHJlLTEuNSBzaWduYXR1cmUKKyAgICAgICAgaWYgKCB0eXBlb2YgdXJs
ID09PSAib2JqZWN0IiApIHsKKyAgICAgICAgICAgIG9wdGlvbnMgPSB1cmw7CisgICAgICAgICAg
ICB1cmwgPSB1bmRlZmluZWQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBGb3JjZSBvcHRpb25z
IHRvIGJlIGFuIG9iamVjdAorICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKKworICAg
ICAgICB2YXIgLy8gaWZNb2RpZmllZCBrZXkKKyAgICAgICAgICAgIGlmTW9kaWZpZWRLZXksCisg
ICAgICAgICAgICAvLyBSZXNwb25zZSBoZWFkZXJzCisgICAgICAgICAgICByZXNwb25zZUhlYWRl
cnNTdHJpbmcsCisgICAgICAgICAgICByZXNwb25zZUhlYWRlcnMsCisgICAgICAgICAgICAvLyB0
cmFuc3BvcnQKKyAgICAgICAgICAgIHRyYW5zcG9ydCwKKyAgICAgICAgICAgIC8vIHRpbWVvdXQg
aGFuZGxlCisgICAgICAgICAgICB0aW1lb3V0VGltZXIsCisgICAgICAgICAgICAvLyBDcm9zcy1k
b21haW4gZGV0ZWN0aW9uIHZhcnMKKyAgICAgICAgICAgIHBhcnRzLAorICAgICAgICAgICAgLy8g
VG8ga25vdyBpZiBnbG9iYWwgZXZlbnRzIGFyZSB0byBiZSBkaXNwYXRjaGVkCisgICAgICAgICAg
ICBmaXJlR2xvYmFscywKKyAgICAgICAgICAgIC8vIExvb3AgdmFyaWFibGUKKyAgICAgICAgICAg
IGksCisgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIGZpbmFsIG9wdGlvbnMgb2JqZWN0CisgICAg
ICAgICAgICBzID0galF1ZXJ5LmFqYXhTZXR1cCgge30sIG9wdGlvbnMgKSwKKyAgICAgICAgICAg
IC8vIENhbGxiYWNrcyBjb250ZXh0CisgICAgICAgICAgICBjYWxsYmFja0NvbnRleHQgPSBzLmNv
bnRleHQgfHwgcywKKyAgICAgICAgICAgIC8vIENvbnRleHQgZm9yIGdsb2JhbCBldmVudHMKKyAg
ICAgICAgICAgIC8vIEl0J3MgdGhlIGNhbGxiYWNrQ29udGV4dCBpZiBvbmUgd2FzIHByb3ZpZGVk
IGluIHRoZSBvcHRpb25zCisgICAgICAgICAgICAvLyBhbmQgaWYgaXQncyBhIERPTSBub2RlIG9y
IGEgalF1ZXJ5IGNvbGxlY3Rpb24KKyAgICAgICAgICAgIGdsb2JhbEV2ZW50Q29udGV4dCA9IGNh
bGxiYWNrQ29udGV4dCAhPT0gcyAmJgorICAgICAgICAgICAgICAgICggY2FsbGJhY2tDb250ZXh0
Lm5vZGVUeXBlIHx8IGNhbGxiYWNrQ29udGV4dCBpbnN0YW5jZW9mIGpRdWVyeSApID8KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGpRdWVyeSggY2FsbGJhY2tDb250ZXh0ICkgOiBqUXVlcnkuZXZl
bnQsCisgICAgICAgICAgICAvLyBEZWZlcnJlZHMKKyAgICAgICAgICAgIGRlZmVycmVkID0galF1
ZXJ5LkRlZmVycmVkKCksCisgICAgICAgICAgICBjb21wbGV0ZURlZmVycmVkID0galF1ZXJ5LkNh
bGxiYWNrcyggIm9uY2UgbWVtb3J5IiApLAorICAgICAgICAgICAgLy8gU3RhdHVzLWRlcGVuZGVu
dCBjYWxsYmFja3MKKyAgICAgICAgICAgIHN0YXR1c0NvZGUgPSBzLnN0YXR1c0NvZGUgfHwge30s
CisgICAgICAgICAgICAvLyBIZWFkZXJzICh0aGV5IGFyZSBzZW50IGFsbCBhdCBvbmNlKQorICAg
ICAgICAgICAgcmVxdWVzdEhlYWRlcnMgPSB7fSwKKyAgICAgICAgICAgIHJlcXVlc3RIZWFkZXJz
TmFtZXMgPSB7fSwKKyAgICAgICAgICAgIC8vIFRoZSBqcVhIUiBzdGF0ZQorICAgICAgICAgICAg
c3RhdGUgPSAwLAorICAgICAgICAgICAgLy8gRGVmYXVsdCBhYm9ydCBtZXNzYWdlCisgICAgICAg
ICAgICBzdHJBYm9ydCA9ICJjYW5jZWxlZCIsCisgICAgICAgICAgICAvLyBGYWtlIHhocgorICAg
ICAgICAgICAganFYSFIgPSB7CisKKyAgICAgICAgICAgICAgICByZWFkeVN0YXRlOiAwLAorCisg
ICAgICAgICAgICAgICAgLy8gQ2FjaGVzIHRoZSBoZWFkZXIKKyAgICAgICAgICAgICAgICBzZXRS
ZXF1ZXN0SGVhZGVyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmICggIXN0YXRlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxuYW1lID0g
bmFtZS50b0xvd2VyQ2FzZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHJlcXVl
c3RIZWFkZXJzTmFtZXNbIGxuYW1lIF0gPSByZXF1ZXN0SGVhZGVyc05hbWVzWyBsbmFtZSBdIHx8
IG5hbWU7CisgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SGVhZGVyc1sgbmFtZSBdID0g
dmFsdWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXM7CisgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgIC8vIFJhdyBzdHJp
bmcKKyAgICAgICAgICAgICAgICBnZXRBbGxSZXNwb25zZUhlYWRlcnM6IGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUgPT09IDIgPyByZXNwb25zZUhlYWRlcnNT
dHJpbmcgOiBudWxsOworICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAvLyBC
dWlsZHMgaGVhZGVycyBoYXNodGFibGUgaWYgbmVlZGVkCisgICAgICAgICAgICAgICAgZ2V0UmVz
cG9uc2VIZWFkZXI6IGZ1bmN0aW9uKCBrZXkgKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBt
YXRjaDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBzdGF0ZSA9PT0gMiApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggIXJlc3BvbnNlSGVhZGVycyApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXNwb25zZUhlYWRlcnMgPSB7fTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3aGlsZSggKCBtYXRjaCA9IHJoZWFkZXJzLmV4ZWMoIHJlc3BvbnNlSGVhZGVyc1N0
cmluZyApICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlSGVh
ZGVyc1sgbWF0Y2hbMV0udG9Mb3dlckNhc2UoKSBdID0gbWF0Y2hbIDIgXTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICBtYXRjaCA9IHJlc3BvbnNlSGVhZGVyc1sga2V5LnRvTG93ZXJDYXNlKCkg
XTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0
Y2ggPT09IHVuZGVmaW5lZCA/IG51bGwgOiBtYXRjaDsKKyAgICAgICAgICAgICAgICB9LAorCisg
ICAgICAgICAgICAgICAgLy8gT3ZlcnJpZGVzIHJlc3BvbnNlIGNvbnRlbnQtdHlwZSBoZWFkZXIK
KyAgICAgICAgICAgICAgICBvdmVycmlkZU1pbWVUeXBlOiBmdW5jdGlvbiggdHlwZSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCAhc3RhdGUgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzLm1pbWVUeXBlID0gdHlwZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAg
ICAgLy8gQ2FuY2VsIHRoZSByZXF1ZXN0CisgICAgICAgICAgICAgICAgYWJvcnQ6IGZ1bmN0aW9u
KCBzdGF0dXNUZXh0ICkgeworICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0ID0gc3RhdHVz
VGV4dCB8fCBzdHJBYm9ydDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCB0cmFuc3BvcnQgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnQuYWJvcnQoIHN0YXR1c1RleHQgKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkb25lKCAwLCBzdGF0
dXNUZXh0ICk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH07CisKKyAgICAgICAgLy8gQ2FsbGJhY2sgZm9yIHdoZW4gZXZl
cnl0aGluZyBpcyBkb25lCisgICAgICAgIC8vIEl0IGlzIGRlZmluZWQgaGVyZSBiZWNhdXNlIGpz
bGludCBjb21wbGFpbnMgaWYgaXQgaXMgZGVjbGFyZWQKKyAgICAgICAgLy8gYXQgdGhlIGVuZCBv
ZiB0aGUgZnVuY3Rpb24gKHdoaWNoIHdvdWxkIGJlIG1vcmUgbG9naWNhbCBhbmQgcmVhZGFibGUp
CisgICAgICAgIGZ1bmN0aW9uIGRvbmUoIHN0YXR1cywgbmF0aXZlU3RhdHVzVGV4dCwgcmVzcG9u
c2VzLCBoZWFkZXJzICkgeworICAgICAgICAgICAgdmFyIGlzU3VjY2Vzcywgc3VjY2VzcywgZXJy
b3IsIHJlc3BvbnNlLCBtb2RpZmllZCwKKyAgICAgICAgICAgICAgICBzdGF0dXNUZXh0ID0gbmF0
aXZlU3RhdHVzVGV4dDsKKworICAgICAgICAgICAgLy8gQ2FsbGVkIG9uY2UKKyAgICAgICAgICAg
IGlmICggc3RhdGUgPT09IDIgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBTdGF0ZSBpcyAiZG9uZSIgbm93CisgICAgICAgICAgICBz
dGF0ZSA9IDI7CisKKyAgICAgICAgICAgIC8vIENsZWFyIHRpbWVvdXQgaWYgaXQgZXhpc3RzCisg
ICAgICAgICAgICBpZiAoIHRpbWVvdXRUaW1lciApIHsKKyAgICAgICAgICAgICAgICBjbGVhclRp
bWVvdXQoIHRpbWVvdXRUaW1lciApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBE
ZXJlZmVyZW5jZSB0cmFuc3BvcnQgZm9yIGVhcmx5IGdhcmJhZ2UgY29sbGVjdGlvbgorICAgICAg
ICAgICAgLy8gKG5vIG1hdHRlciBob3cgbG9uZyB0aGUganFYSFIgb2JqZWN0IHdpbGwgYmUgdXNl
ZCkKKyAgICAgICAgICAgIHRyYW5zcG9ydCA9IHVuZGVmaW5lZDsKKworICAgICAgICAgICAgLy8g
Q2FjaGUgcmVzcG9uc2UgaGVhZGVycworICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzU3RyaW5n
ID0gaGVhZGVycyB8fCAiIjsKKworICAgICAgICAgICAgLy8gU2V0IHJlYWR5U3RhdGUKKyAgICAg
ICAgICAgIGpxWEhSLnJlYWR5U3RhdGUgPSBzdGF0dXMgPiAwID8gNCA6IDA7CisKKyAgICAgICAg
ICAgIC8vIEdldCByZXNwb25zZSBkYXRhCisgICAgICAgICAgICBpZiAoIHJlc3BvbnNlcyApIHsK
KyAgICAgICAgICAgICAgICByZXNwb25zZSA9IGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhS
LCByZXNwb25zZXMgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSWYgc3VjY2Vz
c2Z1bCwgaGFuZGxlIHR5cGUgY2hhaW5pbmcKKyAgICAgICAgICAgIGlmICggc3RhdHVzID49IDIw
MCAmJiBzdGF0dXMgPCAzMDAgfHwgc3RhdHVzID09PSAzMDQgKSB7CisKKyAgICAgICAgICAgICAg
ICAvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRl
ciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLgorICAgICAgICAgICAgICAgIGlmICggcy5pZk1vZGlm
aWVkICkgeworCisgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9u
c2VIZWFkZXIoIkxhc3QtTW9kaWZpZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBtb2Rp
ZmllZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGlm
TW9kaWZpZWRLZXkgXSA9IG1vZGlmaWVkOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIkV0YWciKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCBtb2RpZmllZCApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGpRdWVyeS5ldGFnWyBpZk1vZGlmaWVkS2V5IF0gPSBtb2RpZmllZDsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIElm
IG5vdCBtb2RpZmllZAorICAgICAgICAgICAgICAgIGlmICggc3RhdHVzID09PSAzMDQgKSB7CisK
KyAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9ICJub3Rtb2RpZmllZCI7CisgICAgICAg
ICAgICAgICAgICAgIGlzU3VjY2VzcyA9IHRydWU7CisKKyAgICAgICAgICAgICAgICAvLyBJZiB3
ZSBoYXZlIGRhdGEKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAgICAg
ICAgIGlzU3VjY2VzcyA9IGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSApOworICAgICAgICAgICAg
ICAgICAgICBzdGF0dXNUZXh0ID0gaXNTdWNjZXNzLnN0YXRlOworICAgICAgICAgICAgICAgICAg
ICBzdWNjZXNzID0gaXNTdWNjZXNzLmRhdGE7CisgICAgICAgICAgICAgICAgICAgIGVycm9yID0g
aXNTdWNjZXNzLmVycm9yOworICAgICAgICAgICAgICAgICAgICBpc1N1Y2Nlc3MgPSAhZXJyb3I7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAvLyBXZSBleHRyYWN0IGVycm9yIGZyb20gc3RhdHVzVGV4dAorICAgICAgICAgICAgICAgIC8v
IHRoZW4gbm9ybWFsaXplIHN0YXR1c1RleHQgYW5kIHN0YXR1cyBmb3Igbm9uLWFib3J0cworICAg
ICAgICAgICAgICAgIGVycm9yID0gc3RhdHVzVGV4dDsKKyAgICAgICAgICAgICAgICBpZiAoICFz
dGF0dXNUZXh0IHx8IHN0YXR1cyApIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9
ICJlcnJvciI7CisgICAgICAgICAgICAgICAgICAgIGlmICggc3RhdHVzIDwgMCApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFNldCBkYXRh
IGZvciB0aGUgZmFrZSB4aHIgb2JqZWN0CisgICAgICAgICAgICBqcVhIUi5zdGF0dXMgPSBzdGF0
dXM7CisgICAgICAgICAgICBqcVhIUi5zdGF0dXNUZXh0ID0gKCBuYXRpdmVTdGF0dXNUZXh0IHx8
IHN0YXR1c1RleHQgKSArICIiOworCisgICAgICAgICAgICAvLyBTdWNjZXNzL0Vycm9yCisgICAg
ICAgICAgICBpZiAoIGlzU3VjY2VzcyApIHsKKyAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZXNv
bHZlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIHN1Y2Nlc3MsIHN0YXR1c1RleHQsIGpxWEhSIF0g
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGVmZXJyZWQucmVqZWN0
V2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0LCBlcnJvciBdICk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tz
CisgICAgICAgICAgICBqcVhIUi5zdGF0dXNDb2RlKCBzdGF0dXNDb2RlICk7CisgICAgICAgICAg
ICBzdGF0dXNDb2RlID0gdW5kZWZpbmVkOworCisgICAgICAgICAgICBpZiAoIGZpcmVHbG9iYWxz
ICkgeworICAgICAgICAgICAgICAgIGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCAiYWpheCIg
KyAoIGlzU3VjY2VzcyA/ICJTdWNjZXNzIiA6ICJFcnJvciIgKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFsganFYSFIsIHMsIGlzU3VjY2VzcyA/IHN1Y2Nlc3MgOiBlcnJvciBdICk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIENvbXBsZXRlCisgICAgICAgICAgICBjb21wbGV0
ZURlZmVycmVkLmZpcmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1RleHQg
XSApOworCisgICAgICAgICAgICBpZiAoIGZpcmVHbG9iYWxzICkgeworICAgICAgICAgICAgICAg
IGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCAiYWpheENvbXBsZXRlIiwgWyBqcVhIUiwgcyBd
ICk7CisgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBnbG9iYWwgQUpBWCBjb3VudGVyCisg
ICAgICAgICAgICAgICAgaWYgKCAhKCAtLWpRdWVyeS5hY3RpdmUgKSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoICJhamF4U3RvcCIgKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBBdHRhY2ggZGVm
ZXJyZWRzCisgICAgICAgIGRlZmVycmVkLnByb21pc2UoIGpxWEhSICk7CisgICAgICAgIGpxWEhS
LnN1Y2Nlc3MgPSBqcVhIUi5kb25lOworICAgICAgICBqcVhIUi5lcnJvciA9IGpxWEhSLmZhaWw7
CisgICAgICAgIGpxWEhSLmNvbXBsZXRlID0gY29tcGxldGVEZWZlcnJlZC5hZGQ7CisKKyAgICAg
ICAgLy8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3MKKyAgICAgICAganFYSFIuc3RhdHVzQ29k
ZSA9IGZ1bmN0aW9uKCBtYXAgKSB7CisgICAgICAgICAgICBpZiAoIG1hcCApIHsKKyAgICAgICAg
ICAgICAgICB2YXIgdG1wOworICAgICAgICAgICAgICAgIGlmICggc3RhdGUgPCAyICkgeworICAg
ICAgICAgICAgICAgICAgICBmb3IgKCB0bXAgaW4gbWFwICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdHVzQ29kZVsgdG1wIF0gPSBbIHN0YXR1c0NvZGVbdG1wXSwgbWFwW3RtcF0gXTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIHRtcCA9IG1hcFsganFYSFIuc3RhdHVzIF07CisgICAgICAgICAgICAgICAg
ICAgIGpxWEhSLmFsd2F5cyggdG1wICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH07CisKKyAgICAgICAgLy8gUmVt
b3ZlIGhhc2ggY2hhcmFjdGVyICgjNzUzMTogYW5kIHN0cmluZyBwcm9tb3Rpb24pCisgICAgICAg
IC8vIEFkZCBwcm90b2NvbCBpZiBub3QgcHJvdmlkZWQgKCM1ODY2OiBJRTcgaXNzdWUgd2l0aCBw
cm90b2NvbC1sZXNzIHVybHMpCisgICAgICAgIC8vIFdlIGFsc28gdXNlIHRoZSB1cmwgcGFyYW1l
dGVyIGlmIGF2YWlsYWJsZQorICAgICAgICBzLnVybCA9ICggKCB1cmwgfHwgcy51cmwgKSArICIi
ICkucmVwbGFjZSggcmhhc2gsICIiICkucmVwbGFjZSggcnByb3RvY29sLCBhamF4TG9jUGFydHNb
IDEgXSArICIvLyIgKTsKKworICAgICAgICAvLyBFeHRyYWN0IGRhdGFUeXBlcyBsaXN0CisgICAg
ICAgIHMuZGF0YVR5cGVzID0galF1ZXJ5LnRyaW0oIHMuZGF0YVR5cGUgfHwgIioiICkudG9Mb3dl
ckNhc2UoKS5zcGxpdCggY29yZV9yc3BhY2UgKTsKKworICAgICAgICAvLyBBIGNyb3NzLWRvbWFp
biByZXF1ZXN0IGlzIGluIG9yZGVyIHdoZW4gd2UgaGF2ZSBhIHByb3RvY29sOmhvc3Q6cG9ydCBt
aXNtYXRjaAorICAgICAgICBpZiAoIHMuY3Jvc3NEb21haW4gPT0gbnVsbCApIHsKKyAgICAgICAg
ICAgIHBhcnRzID0gcnVybC5leGVjKCBzLnVybC50b0xvd2VyQ2FzZSgpICk7CisgICAgICAgICAg
ICBzLmNyb3NzRG9tYWluID0gISEoIHBhcnRzICYmCisgICAgICAgICAgICAgICAgKCBwYXJ0c1sg
MSBdICE9PSBhamF4TG9jUGFydHNbIDEgXSB8fCBwYXJ0c1sgMiBdICE9PSBhamF4TG9jUGFydHNb
IDIgXSB8fAorICAgICAgICAgICAgICAgICAgICAoIHBhcnRzWyAzIF0gfHwgKCBwYXJ0c1sgMSBd
ID09PSAiaHR0cDoiID8gODAgOiA0NDMgKSApICE9CisgICAgICAgICAgICAgICAgICAgICAgICAo
IGFqYXhMb2NQYXJ0c1sgMyBdIHx8ICggYWpheExvY1BhcnRzWyAxIF0gPT09ICJodHRwOiIgPyA4
MCA6IDQ0MyApICkgKQorICAgICAgICAgICAgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENv
bnZlcnQgZGF0YSBpZiBub3QgYWxyZWFkeSBhIHN0cmluZworICAgICAgICBpZiAoIHMuZGF0YSAm
JiBzLnByb2Nlc3NEYXRhICYmIHR5cGVvZiBzLmRhdGEgIT09ICJzdHJpbmciICkgeworICAgICAg
ICAgICAgcy5kYXRhID0galF1ZXJ5LnBhcmFtKCBzLmRhdGEsIHMudHJhZGl0aW9uYWwgKTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIEFwcGx5IHByZWZpbHRlcnMKKyAgICAgICAgaW5zcGVjdFBy
ZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMsIHMsIG9wdGlvbnMsIGpxWEhSICk7CisK
KyAgICAgICAgLy8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYSBwcmVmaWx0ZXIsIHN0
b3AgdGhlcmUKKyAgICAgICAgaWYgKCBzdGF0ZSA9PT0gMiApIHsKKyAgICAgICAgICAgIHJldHVy
biBqcVhIUjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFdlIGNhbiBmaXJlIGdsb2JhbCBldmVu
dHMgYXMgb2Ygbm93IGlmIGFza2VkIHRvCisgICAgICAgIGZpcmVHbG9iYWxzID0gcy5nbG9iYWw7
CisKKyAgICAgICAgLy8gVXBwZXJjYXNlIHRoZSB0eXBlCisgICAgICAgIHMudHlwZSA9IHMudHlw
ZS50b1VwcGVyQ2FzZSgpOworCisgICAgICAgIC8vIERldGVybWluZSBpZiByZXF1ZXN0IGhhcyBj
b250ZW50CisgICAgICAgIHMuaGFzQ29udGVudCA9ICFybm9Db250ZW50LnRlc3QoIHMudHlwZSAp
OworCisgICAgICAgIC8vIFdhdGNoIGZvciBhIG5ldyBzZXQgb2YgcmVxdWVzdHMKKyAgICAgICAg
aWYgKCBmaXJlR2xvYmFscyAmJiBqUXVlcnkuYWN0aXZlKysgPT09IDAgKSB7CisgICAgICAgICAg
ICBqUXVlcnkuZXZlbnQudHJpZ2dlciggImFqYXhTdGFydCIgKTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIE1vcmUgb3B0aW9ucyBoYW5kbGluZyBmb3IgcmVxdWVzdHMgd2l0aCBubyBjb250ZW50
CisgICAgICAgIGlmICggIXMuaGFzQ29udGVudCApIHsKKworICAgICAgICAgICAgLy8gSWYgZGF0
YSBpcyBhdmFpbGFibGUsIGFwcGVuZCBkYXRhIHRvIHVybAorICAgICAgICAgICAgaWYgKCBzLmRh
dGEgKSB7CisgICAgICAgICAgICAgICAgcy51cmwgKz0gKCBycXVlcnkudGVzdCggcy51cmwgKSA/
ICImIiA6ICI/IiApICsgcy5kYXRhOworICAgICAgICAgICAgICAgIC8vICM5NjgyOiByZW1vdmUg
ZGF0YSBzbyB0aGF0IGl0J3Mgbm90IHVzZWQgaW4gYW4gZXZlbnR1YWwgcmV0cnkKKyAgICAgICAg
ICAgICAgICBkZWxldGUgcy5kYXRhOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBH
ZXQgaWZNb2RpZmllZEtleSBiZWZvcmUgYWRkaW5nIHRoZSBhbnRpLWNhY2hlIHBhcmFtZXRlcgor
ICAgICAgICAgICAgaWZNb2RpZmllZEtleSA9IHMudXJsOworCisgICAgICAgICAgICAvLyBBZGQg
YW50aS1jYWNoZSBpbiB1cmwgaWYgbmVlZGVkCisgICAgICAgICAgICBpZiAoIHMuY2FjaGUgPT09
IGZhbHNlICkgeworCisgICAgICAgICAgICAgICAgdmFyIHRzID0galF1ZXJ5Lm5vdygpLAorICAg
ICAgICAgICAgICAgICAgICAvLyB0cnkgcmVwbGFjaW5nIF89IGlmIGl0IGlzIHRoZXJlCisgICAg
ICAgICAgICAgICAgICAgIHJldCA9IHMudXJsLnJlcGxhY2UoIHJ0cywgIiQxXz0iICsgdHMgKTsK
KworICAgICAgICAgICAgICAgIC8vIGlmIG5vdGhpbmcgd2FzIHJlcGxhY2VkLCBhZGQgdGltZXN0
YW1wIHRvIHRoZSBlbmQKKyAgICAgICAgICAgICAgICBzLnVybCA9IHJldCArICggKCByZXQgPT09
IHMudXJsICkgPyAoIHJxdWVyeS50ZXN0KCBzLnVybCApID8gIiYiIDogIj8iICkgKyAiXz0iICsg
dHMgOiAiIiApOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gU2V0IHRo
ZSBjb3JyZWN0IGhlYWRlciwgaWYgZGF0YSBpcyBiZWluZyBzZW50CisgICAgICAgIGlmICggcy5k
YXRhICYmIHMuaGFzQ29udGVudCAmJiBzLmNvbnRlbnRUeXBlICE9PSBmYWxzZSB8fCBvcHRpb25z
LmNvbnRlbnRUeXBlICkgeworICAgICAgICAgICAganFYSFIuc2V0UmVxdWVzdEhlYWRlciggIkNv
bnRlbnQtVHlwZSIsIHMuY29udGVudFR5cGUgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNl
dCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBp
biBpZk1vZGlmaWVkIG1vZGUuCisgICAgICAgIGlmICggcy5pZk1vZGlmaWVkICkgeworICAgICAg
ICAgICAgaWZNb2RpZmllZEtleSA9IGlmTW9kaWZpZWRLZXkgfHwgcy51cmw7CisgICAgICAgICAg
ICBpZiAoIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGlmTW9kaWZpZWRLZXkgXSApIHsKKyAgICAgICAg
ICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCAiSWYtTW9kaWZpZWQtU2luY2UiLCBqUXVl
cnkubGFzdE1vZGlmaWVkWyBpZk1vZGlmaWVkS2V5IF0gKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmICggalF1ZXJ5LmV0YWdbIGlmTW9kaWZpZWRLZXkgXSApIHsKKyAgICAgICAgICAg
ICAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCAiSWYtTm9uZS1NYXRjaCIsIGpRdWVyeS5ldGFn
WyBpZk1vZGlmaWVkS2V5IF0gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IC8vIFNldCB0aGUgQWNjZXB0cyBoZWFkZXIgZm9yIHRoZSBzZXJ2ZXIsIGRlcGVuZGluZyBvbiB0
aGUgZGF0YVR5cGUKKyAgICAgICAganFYSFIuc2V0UmVxdWVzdEhlYWRlcigKKyAgICAgICAgICAg
ICJBY2NlcHQiLAorICAgICAgICAgICAgcy5kYXRhVHlwZXNbIDAgXSAmJiBzLmFjY2VwdHNbIHMu
ZGF0YVR5cGVzWzBdIF0gPworICAgICAgICAgICAgICAgIHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNb
MF0gXSArICggcy5kYXRhVHlwZXNbIDAgXSAhPT0gIioiID8gIiwgIiArIGFsbFR5cGVzICsgIjsg
cT0wLjAxIiA6ICIiICkgOgorICAgICAgICAgICAgICAgIHMuYWNjZXB0c1sgIioiIF0KKyAgICAg
ICAgKTsKKworICAgICAgICAvLyBDaGVjayBmb3IgaGVhZGVycyBvcHRpb24KKyAgICAgICAgZm9y
ICggaSBpbiBzLmhlYWRlcnMgKSB7CisgICAgICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVy
KCBpLCBzLmhlYWRlcnNbIGkgXSApOworICAgICAgICB9CisKKyAgICAgICAgLy8gQWxsb3cgY3Vz
dG9tIGhlYWRlcnMvbWltZXR5cGVzIGFuZCBlYXJseSBhYm9ydAorICAgICAgICBpZiAoIHMuYmVm
b3JlU2VuZCAmJiAoIHMuYmVmb3JlU2VuZC5jYWxsKCBjYWxsYmFja0NvbnRleHQsIGpxWEhSLCBz
ICkgPT09IGZhbHNlIHx8IHN0YXRlID09PSAyICkgKSB7CisgICAgICAgICAgICAgICAgLy8gQWJv
cnQgaWYgbm90IGRvbmUgYWxyZWFkeSBhbmQgcmV0dXJuCisgICAgICAgICAgICAgICAgcmV0dXJu
IGpxWEhSLmFib3J0KCk7CisKKyAgICAgICAgfQorCisgICAgICAgIC8vIGFib3J0aW5nIGlzIG5v
IGxvbmdlciBhIGNhbmNlbGxhdGlvbgorICAgICAgICBzdHJBYm9ydCA9ICJhYm9ydCI7CisKKyAg
ICAgICAgLy8gSW5zdGFsbCBjYWxsYmFja3Mgb24gZGVmZXJyZWRzCisgICAgICAgIGZvciAoIGkg
aW4geyBzdWNjZXNzOiAxLCBlcnJvcjogMSwgY29tcGxldGU6IDEgfSApIHsKKyAgICAgICAgICAg
IGpxWEhSWyBpIF0oIHNbIGkgXSApOworICAgICAgICB9CisKKyAgICAgICAgLy8gR2V0IHRyYW5z
cG9ydAorICAgICAgICB0cmFuc3BvcnQgPSBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cygg
dHJhbnNwb3J0cywgcywgb3B0aW9ucywganFYSFIgKTsKKworICAgICAgICAvLyBJZiBubyB0cmFu
c3BvcnQsIHdlIGF1dG8tYWJvcnQKKyAgICAgICAgaWYgKCAhdHJhbnNwb3J0ICkgeworICAgICAg
ICAgICAgZG9uZSggLTEsICJObyBUcmFuc3BvcnQiICk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBqcVhIUi5yZWFkeVN0YXRlID0gMTsKKyAgICAgICAgICAgIC8vIFNlbmQgZ2xvYmFs
IGV2ZW50CisgICAgICAgICAgICBpZiAoIGZpcmVHbG9iYWxzICkgeworICAgICAgICAgICAgICAg
IGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCAiYWpheFNlbmQiLCBbIGpxWEhSLCBzIF0gKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFRpbWVvdXQKKyAgICAgICAgICAgIGlmICgg
cy5hc3luYyAmJiBzLnRpbWVvdXQgPiAwICkgeworICAgICAgICAgICAgICAgIHRpbWVvdXRUaW1l
ciA9IHNldFRpbWVvdXQoIGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgICAgIGpxWEhSLmFi
b3J0KCAidGltZW91dCIgKTsKKyAgICAgICAgICAgICAgICB9LCBzLnRpbWVvdXQgKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IDE7
CisgICAgICAgICAgICAgICAgdHJhbnNwb3J0LnNlbmQoIHJlcXVlc3RIZWFkZXJzLCBkb25lICk7
CisgICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgLy8gUHJvcGFnYXRl
IGV4Y2VwdGlvbiBhcyBlcnJvciBpZiBub3QgZG9uZQorICAgICAgICAgICAgICAgIGlmICggc3Rh
dGUgPCAyICkgeworICAgICAgICAgICAgICAgICAgICBkb25lKCAtMSwgZSApOworICAgICAgICAg
ICAgICAgIC8vIFNpbXBseSByZXRocm93IG90aGVyd2lzZQorICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGpxWEhSOworICAgIH0sCisK
KyAgICAvLyBDb3VudGVyIGZvciBob2xkaW5nIHRoZSBudW1iZXIgb2YgYWN0aXZlIHF1ZXJpZXMK
KyAgICBhY3RpdmU6IDAsCisKKyAgICAvLyBMYXN0LU1vZGlmaWVkIGhlYWRlciBjYWNoZSBmb3Ig
bmV4dCByZXF1ZXN0CisgICAgbGFzdE1vZGlmaWVkOiB7fSwKKyAgICBldGFnOiB7fQorCit9KTsK
KworLyogSGFuZGxlcyByZXNwb25zZXMgdG8gYW4gYWpheCByZXF1ZXN0OgorICogLSBzZXRzIGFs
bCByZXNwb25zZVhYWCBmaWVsZHMgYWNjb3JkaW5nbHkKKyAqIC0gZmluZHMgdGhlIHJpZ2h0IGRh
dGFUeXBlIChtZWRpYXRlcyBiZXR3ZWVuIGNvbnRlbnQtdHlwZSBhbmQgZXhwZWN0ZWQgZGF0YVR5
cGUpCisgKiAtIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2UKKyAqLworZnVuY3Rp
b24gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApIHsKKworICAgIHZh
ciBjdCwgdHlwZSwgZmluYWxEYXRhVHlwZSwgZmlyc3REYXRhVHlwZSwKKyAgICAgICAgY29udGVu
dHMgPSBzLmNvbnRlbnRzLAorICAgICAgICBkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcywKKyAgICAg
ICAgcmVzcG9uc2VGaWVsZHMgPSBzLnJlc3BvbnNlRmllbGRzOworCisgICAgLy8gRmlsbCByZXNw
b25zZVhYWCBmaWVsZHMKKyAgICBmb3IgKCB0eXBlIGluIHJlc3BvbnNlRmllbGRzICkgeworICAg
ICAgICBpZiAoIHR5cGUgaW4gcmVzcG9uc2VzICkgeworICAgICAgICAgICAganFYSFJbIHJlc3Bv
bnNlRmllbGRzW3R5cGVdIF0gPSByZXNwb25zZXNbIHR5cGUgXTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIFJlbW92ZSBhdXRvIGRhdGFUeXBlIGFuZCBnZXQgY29udGVudC10eXBlIGluIHRo
ZSBwcm9jZXNzCisgICAgd2hpbGUoIGRhdGFUeXBlc1sgMCBdID09PSAiKiIgKSB7CisgICAgICAg
IGRhdGFUeXBlcy5zaGlmdCgpOworICAgICAgICBpZiAoIGN0ID09PSB1bmRlZmluZWQgKSB7Cisg
ICAgICAgICAgICBjdCA9IHMubWltZVR5cGUgfHwganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoICJj
b250ZW50LXR5cGUiICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDaGVjayBpZiB3ZSdy
ZSBkZWFsaW5nIHdpdGggYSBrbm93biBjb250ZW50LXR5cGUKKyAgICBpZiAoIGN0ICkgeworICAg
ICAgICBmb3IgKCB0eXBlIGluIGNvbnRlbnRzICkgeworICAgICAgICAgICAgaWYgKCBjb250ZW50
c1sgdHlwZSBdICYmIGNvbnRlbnRzWyB0eXBlIF0udGVzdCggY3QgKSApIHsKKyAgICAgICAgICAg
ICAgICBkYXRhVHlwZXMudW5zaGlmdCggdHlwZSApOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ2hlY2sgdG8gc2VlIGlm
IHdlIGhhdmUgYSByZXNwb25zZSBmb3IgdGhlIGV4cGVjdGVkIGRhdGFUeXBlCisgICAgaWYgKCBk
YXRhVHlwZXNbIDAgXSBpbiByZXNwb25zZXMgKSB7CisgICAgICAgIGZpbmFsRGF0YVR5cGUgPSBk
YXRhVHlwZXNbIDAgXTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBUcnkgY29udmVydGlibGUg
ZGF0YVR5cGVzCisgICAgICAgIGZvciAoIHR5cGUgaW4gcmVzcG9uc2VzICkgeworICAgICAgICAg
ICAgaWYgKCAhZGF0YVR5cGVzWyAwIF0gfHwgcy5jb252ZXJ0ZXJzWyB0eXBlICsgIiAiICsgZGF0
YVR5cGVzWzBdIF0gKSB7CisgICAgICAgICAgICAgICAgZmluYWxEYXRhVHlwZSA9IHR5cGU7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoICFm
aXJzdERhdGFUeXBlICkgeworICAgICAgICAgICAgICAgIGZpcnN0RGF0YVR5cGUgPSB0eXBlOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIE9yIGp1c3QgdXNlIGZpcnN0IG9u
ZQorICAgICAgICBmaW5hbERhdGFUeXBlID0gZmluYWxEYXRhVHlwZSB8fCBmaXJzdERhdGFUeXBl
OworICAgIH0KKworICAgIC8vIElmIHdlIGZvdW5kIGEgZGF0YVR5cGUKKyAgICAvLyBXZSBhZGQg
dGhlIGRhdGFUeXBlIHRvIHRoZSBsaXN0IGlmIG5lZWRlZAorICAgIC8vIGFuZCByZXR1cm4gdGhl
IGNvcnJlc3BvbmRpbmcgcmVzcG9uc2UKKyAgICBpZiAoIGZpbmFsRGF0YVR5cGUgKSB7CisgICAg
ICAgIGlmICggZmluYWxEYXRhVHlwZSAhPT0gZGF0YVR5cGVzWyAwIF0gKSB7CisgICAgICAgICAg
ICBkYXRhVHlwZXMudW5zaGlmdCggZmluYWxEYXRhVHlwZSApOworICAgICAgICB9CisgICAgICAg
IHJldHVybiByZXNwb25zZXNbIGZpbmFsRGF0YVR5cGUgXTsKKyAgICB9Cit9CisKKy8vIENoYWlu
IGNvbnZlcnNpb25zIGdpdmVuIHRoZSByZXF1ZXN0IGFuZCB0aGUgb3JpZ2luYWwgcmVzcG9uc2UK
K2Z1bmN0aW9uIGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSApIHsKKworICAgIHZhciBjb252LCBj
b252MiwgY3VycmVudCwgdG1wLAorICAgICAgICAvLyBXb3JrIHdpdGggYSBjb3B5IG9mIGRhdGFU
eXBlcyBpbiBjYXNlIHdlIG5lZWQgdG8gbW9kaWZ5IGl0IGZvciBjb252ZXJzaW9uCisgICAgICAg
IGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzLnNsaWNlKCksCisgICAgICAgIHByZXYgPSBkYXRhVHlw
ZXNbIDAgXSwKKyAgICAgICAgY29udmVydGVycyA9IHt9LAorICAgICAgICBpID0gMDsKKworICAg
IC8vIEFwcGx5IHRoZSBkYXRhRmlsdGVyIGlmIHByb3ZpZGVkCisgICAgaWYgKCBzLmRhdGFGaWx0
ZXIgKSB7CisgICAgICAgIHJlc3BvbnNlID0gcy5kYXRhRmlsdGVyKCByZXNwb25zZSwgcy5kYXRh
VHlwZSApOworICAgIH0KKworICAgIC8vIENyZWF0ZSBjb252ZXJ0ZXJzIG1hcCB3aXRoIGxvd2Vy
Y2FzZWQga2V5cworICAgIGlmICggZGF0YVR5cGVzWyAxIF0gKSB7CisgICAgICAgIGZvciAoIGNv
bnYgaW4gcy5jb252ZXJ0ZXJzICkgeworICAgICAgICAgICAgY29udmVydGVyc1sgY29udi50b0xv
d2VyQ2FzZSgpIF0gPSBzLmNvbnZlcnRlcnNbIGNvbnYgXTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8vIENvbnZlcnQgdG8gZWFjaCBzZXF1ZW50aWFsIGRhdGFUeXBlLCB0b2xlcmF0aW5nIGxp
c3QgbW9kaWZpY2F0aW9uCisgICAgZm9yICggOyAoY3VycmVudCA9IGRhdGFUeXBlc1srK2ldKTsg
KSB7CisKKyAgICAgICAgLy8gVGhlcmUncyBvbmx5IHdvcmsgdG8gZG8gaWYgY3VycmVudCBkYXRh
VHlwZSBpcyBub24tYXV0bworICAgICAgICBpZiAoIGN1cnJlbnQgIT09ICIqIiApIHsKKworICAg
ICAgICAgICAgLy8gQ29udmVydCByZXNwb25zZSBpZiBwcmV2IGRhdGFUeXBlIGlzIG5vbi1hdXRv
IGFuZCBkaWZmZXJzIGZyb20gY3VycmVudAorICAgICAgICAgICAgaWYgKCBwcmV2ICE9PSAiKiIg
JiYgcHJldiAhPT0gY3VycmVudCApIHsKKworICAgICAgICAgICAgICAgIC8vIFNlZWsgYSBkaXJl
Y3QgY29udmVydGVyCisgICAgICAgICAgICAgICAgY29udiA9IGNvbnZlcnRlcnNbIHByZXYgKyAi
ICIgKyBjdXJyZW50IF0gfHwgY29udmVydGVyc1sgIiogIiArIGN1cnJlbnQgXTsKKworICAgICAg
ICAgICAgICAgIC8vIElmIG5vbmUgZm91bmQsIHNlZWsgYSBwYWlyCisgICAgICAgICAgICAgICAg
aWYgKCAhY29udiApIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICggY29udjIgaW4gY29udmVy
dGVycyApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgY29udjIgb3V0cHV0cyBj
dXJyZW50CisgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBjb252Mi5zcGxpdCgiICIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0bXBbIDEgXSA9PT0gY3VycmVudCApIHsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHByZXYgY2FuIGJlIGNvbnZlcnRlZCB0
byBhY2NlcHRlZCBpbnB1dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnYgPSBjb252
ZXJ0ZXJzWyBwcmV2ICsgIiAiICsgdG1wWyAwIF0gXSB8fAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb252ZXJ0ZXJzWyAiKiAiICsgdG1wWyAwIF0gXTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIGNvbnYgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIENvbmRlbnNlIGVxdWl2YWxlbmNlIGNvbnZlcnRlcnMKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBjb252ID09PSB0cnVlICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29udiA9IGNvbnZlcnRlcnNbIGNvbnYyIF07CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBpbnNlcnQgdGhlIGludGVybWVk
aWF0ZSBkYXRhVHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KCBjb252ZXJ0ZXJzWyBjb252MiBdICE9PSB0cnVlICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY3VycmVudCA9IHRtcFsgMCBdOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YVR5cGVzLnNwbGljZSggaS0tLCAwLCBjdXJyZW50ICk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAvLyBBcHBseSBjb252ZXJ0ZXIgKGlmIG5vdCBhbiBlcXVpdmFs
ZW5jZSkKKyAgICAgICAgICAgICAgICBpZiAoIGNvbnYgIT09IHRydWUgKSB7CisKKyAgICAgICAg
ICAgICAgICAgICAgLy8gVW5sZXNzIGVycm9ycyBhcmUgYWxsb3dlZCB0byBidWJibGUsIGNhdGNo
IGFuZCByZXR1cm4gdGhlbQorICAgICAgICAgICAgICAgICAgICBpZiAoIGNvbnYgJiYgc1sidGhy
b3dzIl0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IGNvbnYoIHJlc3Bv
bnNlICk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gY29udigg
cmVzcG9uc2UgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKCBlICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHN0YXRlOiAicGFyc2VyZXJyb3IiLCBl
cnJvcjogY29udiA/IGUgOiAiTm8gY29udmVyc2lvbiBmcm9tICIgKyBwcmV2ICsgIiB0byAiICsg
Y3VycmVudCB9OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBV
cGRhdGUgcHJldiBmb3IgbmV4dCBpdGVyYXRpb24KKyAgICAgICAgICAgIHByZXYgPSBjdXJyZW50
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHsgc3RhdGU6ICJzdWNjZXNzIiwgZGF0
YTogcmVzcG9uc2UgfTsKK30KK3ZhciBvbGRDYWxsYmFja3MgPSBbXSwKKyAgICBycXVlc3Rpb24g
PSAvXD8vLAorICAgIHJqc29ucCA9IC8oPSlcPyg/PSZ8JCl8XD9cPy8sCisgICAgbm9uY2UgPSBq
UXVlcnkubm93KCk7CisKKy8vIERlZmF1bHQganNvbnAgc2V0dGluZ3MKK2pRdWVyeS5hamF4U2V0
dXAoeworICAgIGpzb25wOiAiY2FsbGJhY2siLAorICAgIGpzb25wQ2FsbGJhY2s6IGZ1bmN0aW9u
KCkgeworICAgICAgICB2YXIgY2FsbGJhY2sgPSBvbGRDYWxsYmFja3MucG9wKCkgfHwgKCBqUXVl
cnkuZXhwYW5kbyArICJfIiArICggbm9uY2UrKyApICk7CisgICAgICAgIHRoaXNbIGNhbGxiYWNr
IF0gPSB0cnVlOworICAgICAgICByZXR1cm4gY2FsbGJhY2s7CisgICAgfQorfSk7CisKKy8vIERl
dGVjdCwgbm9ybWFsaXplIG9wdGlvbnMgYW5kIGluc3RhbGwgY2FsbGJhY2tzIGZvciBqc29ucCBy
ZXF1ZXN0cworalF1ZXJ5LmFqYXhQcmVmaWx0ZXIoICJqc29uIGpzb25wIiwgZnVuY3Rpb24oIHMs
IG9yaWdpbmFsU2V0dGluZ3MsIGpxWEhSICkgeworCisgICAgdmFyIGNhbGxiYWNrTmFtZSwgb3Zl
cndyaXR0ZW4sIHJlc3BvbnNlQ29udGFpbmVyLAorICAgICAgICBkYXRhID0gcy5kYXRhLAorICAg
ICAgICB1cmwgPSBzLnVybCwKKyAgICAgICAgaGFzQ2FsbGJhY2sgPSBzLmpzb25wICE9PSBmYWxz
ZSwKKyAgICAgICAgcmVwbGFjZUluVXJsID0gaGFzQ2FsbGJhY2sgJiYgcmpzb25wLnRlc3QoIHVy
bCApLAorICAgICAgICByZXBsYWNlSW5EYXRhID0gaGFzQ2FsbGJhY2sgJiYgIXJlcGxhY2VJblVy
bCAmJiB0eXBlb2YgZGF0YSA9PT0gInN0cmluZyIgJiYKKyAgICAgICAgICAgICEoIHMuY29udGVu
dFR5cGUgfHwgIiIgKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQi
KSAmJgorICAgICAgICAgICAgcmpzb25wLnRlc3QoIGRhdGEgKTsKKworICAgIC8vIEhhbmRsZSBp
ZmYgdGhlIGV4cGVjdGVkIGRhdGEgdHlwZSBpcyAianNvbnAiIG9yIHdlIGhhdmUgYSBwYXJhbWV0
ZXIgdG8gc2V0CisgICAgaWYgKCBzLmRhdGFUeXBlc1sgMCBdID09PSAianNvbnAiIHx8IHJlcGxh
Y2VJblVybCB8fCByZXBsYWNlSW5EYXRhICkgeworCisgICAgICAgIC8vIEdldCBjYWxsYmFjayBu
YW1lLCByZW1lbWJlcmluZyBwcmVleGlzdGluZyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggaXQKKyAg
ICAgICAgY2FsbGJhY2tOYW1lID0gcy5qc29ucENhbGxiYWNrID0galF1ZXJ5LmlzRnVuY3Rpb24o
IHMuanNvbnBDYWxsYmFjayApID8KKyAgICAgICAgICAgIHMuanNvbnBDYWxsYmFjaygpIDoKKyAg
ICAgICAgICAgIHMuanNvbnBDYWxsYmFjazsKKyAgICAgICAgb3ZlcndyaXR0ZW4gPSB3aW5kb3db
IGNhbGxiYWNrTmFtZSBdOworCisgICAgICAgIC8vIEluc2VydCBjYWxsYmFjayBpbnRvIHVybCBv
ciBmb3JtIGRhdGEKKyAgICAgICAgaWYgKCByZXBsYWNlSW5VcmwgKSB7CisgICAgICAgICAgICBz
LnVybCA9IHVybC5yZXBsYWNlKCByanNvbnAsICIkMSIgKyBjYWxsYmFja05hbWUgKTsKKyAgICAg
ICAgfSBlbHNlIGlmICggcmVwbGFjZUluRGF0YSApIHsKKyAgICAgICAgICAgIHMuZGF0YSA9IGRh
dGEucmVwbGFjZSggcmpzb25wLCAiJDEiICsgY2FsbGJhY2tOYW1lICk7CisgICAgICAgIH0gZWxz
ZSBpZiAoIGhhc0NhbGxiYWNrICkgeworICAgICAgICAgICAgcy51cmwgKz0gKCBycXVlc3Rpb24u
dGVzdCggdXJsICkgPyAiJiIgOiAiPyIgKSArIHMuanNvbnAgKyAiPSIgKyBjYWxsYmFja05hbWU7
CisgICAgICAgIH0KKworICAgICAgICAvLyBVc2UgZGF0YSBjb252ZXJ0ZXIgdG8gcmV0cmlldmUg
anNvbiBhZnRlciBzY3JpcHQgZXhlY3V0aW9uCisgICAgICAgIHMuY29udmVydGVyc1sic2NyaXB0
IGpzb24iXSA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgaWYgKCAhcmVzcG9uc2VDb250YWlu
ZXIgKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5LmVycm9yKCBjYWxsYmFja05hbWUgKyAiIHdh
cyBub3QgY2FsbGVkIiApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3Bv
bnNlQ29udGFpbmVyWyAwIF07CisgICAgICAgIH07CisKKyAgICAgICAgLy8gZm9yY2UganNvbiBk
YXRhVHlwZQorICAgICAgICBzLmRhdGFUeXBlc1sgMCBdID0gImpzb24iOworCisgICAgICAgIC8v
IEluc3RhbGwgY2FsbGJhY2sKKyAgICAgICAgd2luZG93WyBjYWxsYmFja05hbWUgXSA9IGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgcmVzcG9uc2VDb250YWluZXIgPSBhcmd1bWVudHM7CisgICAg
ICAgIH07CisKKyAgICAgICAgLy8gQ2xlYW4tdXAgZnVuY3Rpb24gKGZpcmVzIGFmdGVyIGNvbnZl
cnRlcnMpCisgICAgICAgIGpxWEhSLmFsd2F5cyhmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIC8v
IFJlc3RvcmUgcHJlZXhpc3RpbmcgdmFsdWUKKyAgICAgICAgICAgIHdpbmRvd1sgY2FsbGJhY2tO
YW1lIF0gPSBvdmVyd3JpdHRlbjsKKworICAgICAgICAgICAgLy8gU2F2ZSBiYWNrIGFzIGZyZWUK
KyAgICAgICAgICAgIGlmICggc1sgY2FsbGJhY2tOYW1lIF0gKSB7CisgICAgICAgICAgICAgICAg
Ly8gbWFrZSBzdXJlIHRoYXQgcmUtdXNpbmcgdGhlIG9wdGlvbnMgZG9lc24ndCBzY3JldyB0aGlu
Z3MgYXJvdW5kCisgICAgICAgICAgICAgICAgcy5qc29ucENhbGxiYWNrID0gb3JpZ2luYWxTZXR0
aW5ncy5qc29ucENhbGxiYWNrOworCisgICAgICAgICAgICAgICAgLy8gc2F2ZSB0aGUgY2FsbGJh
Y2sgbmFtZSBmb3IgZnV0dXJlIHVzZQorICAgICAgICAgICAgICAgIG9sZENhbGxiYWNrcy5wdXNo
KCBjYWxsYmFja05hbWUgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ2FsbCBp
ZiBpdCB3YXMgYSBmdW5jdGlvbiBhbmQgd2UgaGF2ZSBhIHJlc3BvbnNlCisgICAgICAgICAgICBp
ZiAoIHJlc3BvbnNlQ29udGFpbmVyICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBvdmVyd3JpdHRlbiAp
ICkgeworICAgICAgICAgICAgICAgIG92ZXJ3cml0dGVuKCByZXNwb25zZUNvbnRhaW5lclsgMCBd
ICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJlc3BvbnNlQ29udGFpbmVyID0gb3Zl
cndyaXR0ZW4gPSB1bmRlZmluZWQ7CisgICAgICAgIH0pOworCisgICAgICAgIC8vIERlbGVnYXRl
IHRvIHNjcmlwdAorICAgICAgICByZXR1cm4gInNjcmlwdCI7CisgICAgfQorfSk7CisvLyBJbnN0
YWxsIHNjcmlwdCBkYXRhVHlwZQoralF1ZXJ5LmFqYXhTZXR1cCh7CisgICAgYWNjZXB0czogewor
ICAgICAgICBzY3JpcHQ6ICJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQs
IGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCIKKyAgICB9
LAorICAgIGNvbnRlbnRzOiB7CisgICAgICAgIHNjcmlwdDogL2phdmFzY3JpcHR8ZWNtYXNjcmlw
dC8KKyAgICB9LAorICAgIGNvbnZlcnRlcnM6IHsKKyAgICAgICAgInRleHQgc2NyaXB0IjogZnVu
Y3Rpb24oIHRleHQgKSB7CisgICAgICAgICAgICBqUXVlcnkuZ2xvYmFsRXZhbCggdGV4dCApOwor
ICAgICAgICAgICAgcmV0dXJuIHRleHQ7CisgICAgICAgIH0KKyAgICB9Cit9KTsKKworLy8gSGFu
ZGxlIGNhY2hlJ3Mgc3BlY2lhbCBjYXNlIGFuZCBnbG9iYWwKK2pRdWVyeS5hamF4UHJlZmlsdGVy
KCAic2NyaXB0IiwgZnVuY3Rpb24oIHMgKSB7CisgICAgaWYgKCBzLmNhY2hlID09PSB1bmRlZmlu
ZWQgKSB7CisgICAgICAgIHMuY2FjaGUgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKCBzLmNyb3Nz
RG9tYWluICkgeworICAgICAgICBzLnR5cGUgPSAiR0VUIjsKKyAgICAgICAgcy5nbG9iYWwgPSBm
YWxzZTsKKyAgICB9Cit9KTsKKworLy8gQmluZCBzY3JpcHQgdGFnIGhhY2sgdHJhbnNwb3J0Citq
UXVlcnkuYWpheFRyYW5zcG9ydCggInNjcmlwdCIsIGZ1bmN0aW9uKHMpIHsKKworICAgIC8vIFRo
aXMgdHJhbnNwb3J0IG9ubHkgZGVhbHMgd2l0aCBjcm9zcyBkb21haW4gcmVxdWVzdHMKKyAgICBp
ZiAoIHMuY3Jvc3NEb21haW4gKSB7CisKKyAgICAgICAgdmFyIHNjcmlwdCwKKyAgICAgICAgICAg
IGhlYWQgPSBkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCAi
aGVhZCIgKVswXSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7CisKKyAgICAgICAgcmV0dXJu
IHsKKworICAgICAgICAgICAgc2VuZDogZnVuY3Rpb24oIF8sIGNhbGxiYWNrICkgeworCisgICAg
ICAgICAgICAgICAgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggInNjcmlwdCIgKTsK
KworICAgICAgICAgICAgICAgIHNjcmlwdC5hc3luYyA9ICJhc3luYyI7CisKKyAgICAgICAgICAg
ICAgICBpZiAoIHMuc2NyaXB0Q2hhcnNldCApIHsKKyAgICAgICAgICAgICAgICAgICAgc2NyaXB0
LmNoYXJzZXQgPSBzLnNjcmlwdENoYXJzZXQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgc2NyaXB0LnNyYyA9IHMudXJsOworCisgICAgICAgICAgICAgICAgLy8gQXR0YWNo
IGhhbmRsZXJzIGZvciBhbGwgYnJvd3NlcnMKKyAgICAgICAgICAgICAgICBzY3JpcHQub25sb2Fk
ID0gc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCBfLCBpc0Fib3J0ICkgewor
CisgICAgICAgICAgICAgICAgICAgIGlmICggaXNBYm9ydCB8fCAhc2NyaXB0LnJlYWR5U3RhdGUg
fHwgL2xvYWRlZHxjb21wbGV0ZS8udGVzdCggc2NyaXB0LnJlYWR5U3RhdGUgKSApIHsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIG1lbW9yeSBsZWFrIGluIElFCisgICAgICAg
ICAgICAgICAgICAgICAgICBzY3JpcHQub25sb2FkID0gc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5n
ZSA9IG51bGw7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgc2NyaXB0
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGhlYWQgJiYgc2NyaXB0LnBhcmVudE5vZGUg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZC5yZW1vdmVDaGlsZCggc2NyaXB0
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIERlcmVmZXJlbmNlIHRoZSBzY3JpcHQKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlw
dCA9IHVuZGVmaW5lZDsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbGJhY2sgaWYg
bm90IGFib3J0CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFpc0Fib3J0ICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCAyMDAsICJzdWNjZXNzIiApOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgICAgICAvLyBVc2UgaW5zZXJ0QmVmb3JlIGluc3RlYWQgb2Yg
YXBwZW5kQ2hpbGQgIHRvIGNpcmN1bXZlbnQgYW4gSUU2IGJ1Zy4KKyAgICAgICAgICAgICAgICAv
LyBUaGlzIGFyaXNlcyB3aGVuIGEgYmFzZSBub2RlIGlzIHVzZWQgKCMyNzA5IGFuZCAjNDM3OCku
CisgICAgICAgICAgICAgICAgaGVhZC5pbnNlcnRCZWZvcmUoIHNjcmlwdCwgaGVhZC5maXJzdENo
aWxkICk7CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICBhYm9ydDogZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICAgICAgaWYgKCBzY3JpcHQgKSB7CisgICAgICAgICAgICAgICAgICAgIHNj
cmlwdC5vbmxvYWQoIDAsIDEgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH07CisgICAgfQorfSk7Cit2YXIgeGhyQ2FsbGJhY2tzLAorICAgIC8vICM1MjgwOiBJ
bnRlcm5ldCBFeHBsb3JlciB3aWxsIGtlZXAgY29ubmVjdGlvbnMgYWxpdmUgaWYgd2UgZG9uJ3Qg
YWJvcnQgb24gdW5sb2FkCisgICAgeGhyT25VbmxvYWRBYm9ydCA9IHdpbmRvdy5BY3RpdmVYT2Jq
ZWN0ID8gZnVuY3Rpb24oKSB7CisgICAgICAgIC8vIEFib3J0IGFsbCBwZW5kaW5nIHJlcXVlc3Rz
CisgICAgICAgIGZvciAoIHZhciBrZXkgaW4geGhyQ2FsbGJhY2tzICkgeworICAgICAgICAgICAg
eGhyQ2FsbGJhY2tzWyBrZXkgXSggMCwgMSApOworICAgICAgICB9CisgICAgfSA6IGZhbHNlLAor
ICAgIHhocklkID0gMDsKKworLy8gRnVuY3Rpb25zIHRvIGNyZWF0ZSB4aHJzCitmdW5jdGlvbiBj
cmVhdGVTdGFuZGFyZFhIUigpIHsKKyAgICB0cnkgeworICAgICAgICByZXR1cm4gbmV3IHdpbmRv
dy5YTUxIdHRwUmVxdWVzdCgpOworICAgIH0gY2F0Y2goIGUgKSB7fQorfQorCitmdW5jdGlvbiBj
cmVhdGVBY3RpdmVYSFIoKSB7CisgICAgdHJ5IHsKKyAgICAgICAgcmV0dXJuIG5ldyB3aW5kb3cu
QWN0aXZlWE9iamVjdCggIk1pY3Jvc29mdC5YTUxIVFRQIiApOworICAgIH0gY2F0Y2goIGUgKSB7
fQorfQorCisvLyBDcmVhdGUgdGhlIHJlcXVlc3Qgb2JqZWN0CisvLyAoVGhpcyBpcyBzdGlsbCBh
dHRhY2hlZCB0byBhamF4U2V0dGluZ3MgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpCitqUXVl
cnkuYWpheFNldHRpbmdzLnhociA9IHdpbmRvdy5BY3RpdmVYT2JqZWN0ID8KKyAgICAvKiBNaWNy
b3NvZnQgZmFpbGVkIHRvIHByb3Blcmx5CisgICAgICogaW1wbGVtZW50IHRoZSBYTUxIdHRwUmVx
dWVzdCBpbiBJRTcgKGNhbid0IHJlcXVlc3QgbG9jYWwgZmlsZXMpLAorICAgICAqIHNvIHdlIHVz
ZSB0aGUgQWN0aXZlWE9iamVjdCB3aGVuIGl0IGlzIGF2YWlsYWJsZQorICAgICAqIEFkZGl0aW9u
YWxseSBYTUxIdHRwUmVxdWVzdCBjYW4gYmUgZGlzYWJsZWQgaW4gSUU3L0lFOCBzbworICAgICAq
IHdlIG5lZWQgYSBmYWxsYmFjay4KKyAgICAgKi8KKyAgICBmdW5jdGlvbigpIHsKKyAgICAgICAg
cmV0dXJuICF0aGlzLmlzTG9jYWwgJiYgY3JlYXRlU3RhbmRhcmRYSFIoKSB8fCBjcmVhdGVBY3Rp
dmVYSFIoKTsKKyAgICB9IDoKKyAgICAvLyBGb3IgYWxsIG90aGVyIGJyb3dzZXJzLCB1c2UgdGhl
IHN0YW5kYXJkIFhNTEh0dHBSZXF1ZXN0IG9iamVjdAorICAgIGNyZWF0ZVN0YW5kYXJkWEhSOwor
CisvLyBEZXRlcm1pbmUgc3VwcG9ydCBwcm9wZXJ0aWVzCisoZnVuY3Rpb24oIHhociApIHsKKyAg
ICBqUXVlcnkuZXh0ZW5kKCBqUXVlcnkuc3VwcG9ydCwgeworICAgICAgICBhamF4OiAhIXhociwK
KyAgICAgICAgY29yczogISF4aHIgJiYgKCAid2l0aENyZWRlbnRpYWxzIiBpbiB4aHIgKQorICAg
IH0pOworfSkoIGpRdWVyeS5hamF4U2V0dGluZ3MueGhyKCkgKTsKKworLy8gQ3JlYXRlIHRyYW5z
cG9ydCBpZiB0aGUgYnJvd3NlciBjYW4gcHJvdmlkZSBhbiB4aHIKK2lmICggalF1ZXJ5LnN1cHBv
cnQuYWpheCApIHsKKworICAgIGpRdWVyeS5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKCBzICkgewor
ICAgICAgICAvLyBDcm9zcyBkb21haW4gb25seSBhbGxvd2VkIGlmIHN1cHBvcnRlZCB0aHJvdWdo
IFhNTEh0dHBSZXF1ZXN0CisgICAgICAgIGlmICggIXMuY3Jvc3NEb21haW4gfHwgalF1ZXJ5LnN1
cHBvcnQuY29ycyApIHsKKworICAgICAgICAgICAgdmFyIGNhbGxiYWNrOworCisgICAgICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgICAgIHNlbmQ6IGZ1bmN0aW9uKCBoZWFkZXJzLCBjb21w
bGV0ZSApIHsKKworICAgICAgICAgICAgICAgICAgICAvLyBHZXQgYSBuZXcgeGhyCisgICAgICAg
ICAgICAgICAgICAgIHZhciBoYW5kbGUsIGksCisgICAgICAgICAgICAgICAgICAgICAgICB4aHIg
PSBzLnhocigpOworCisgICAgICAgICAgICAgICAgICAgIC8vIE9wZW4gdGhlIHNvY2tldAorICAg
ICAgICAgICAgICAgICAgICAvLyBQYXNzaW5nIG51bGwgdXNlcm5hbWUsIGdlbmVyYXRlcyBhIGxv
Z2luIHBvcHVwIG9uIE9wZXJhICgjMjg2NSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBzLnVz
ZXJuYW1lICkgeworICAgICAgICAgICAgICAgICAgICAgICAgeGhyLm9wZW4oIHMudHlwZSwgcy51
cmwsIHMuYXN5bmMsIHMudXNlcm5hbWUsIHMucGFzc3dvcmQgKTsKKyAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHhoci5vcGVuKCBzLnR5cGUsIHMu
dXJsLCBzLmFzeW5jICk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICAvLyBBcHBseSBjdXN0b20gZmllbGRzIGlmIHByb3ZpZGVkCisgICAgICAgICAgICAgICAg
ICAgIGlmICggcy54aHJGaWVsZHMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBp
IGluIHMueGhyRmllbGRzICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoclsgaSBd
ID0gcy54aHJGaWVsZHNbIGkgXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIE92ZXJyaWRlIG1pbWUgdHlw
ZSBpZiBuZWVkZWQKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBzLm1pbWVUeXBlICYmIHhoci5v
dmVycmlkZU1pbWVUeXBlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgeGhyLm92ZXJyaWRl
TWltZVR5cGUoIHMubWltZVR5cGUgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgIC8vIFgtUmVxdWVzdGVkLVdpdGggaGVhZGVyCisgICAgICAgICAgICAgICAg
ICAgIC8vIEZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNlZWluZyBhcyBjb25kaXRpb25zIGZv
ciBhIHByZWZsaWdodCBhcmUKKyAgICAgICAgICAgICAgICAgICAgLy8gYWtpbiB0byBhIGppZ3Nh
dyBwdXp6bGUsIHdlIHNpbXBseSBuZXZlciBzZXQgaXQgdG8gYmUgc3VyZS4KKyAgICAgICAgICAg
ICAgICAgICAgLy8gKGl0IGNhbiBhbHdheXMgYmUgc2V0IG9uIGEgcGVyLXJlcXVlc3QgYmFzaXMg
b3IgZXZlbiB1c2luZyBhamF4U2V0dXApCisgICAgICAgICAgICAgICAgICAgIC8vIEZvciBzYW1l
LWRvbWFpbiByZXF1ZXN0cywgd29uJ3QgY2hhbmdlIGhlYWRlciBpZiBhbHJlYWR5IHByb3ZpZGVk
LgorICAgICAgICAgICAgICAgICAgICBpZiAoICFzLmNyb3NzRG9tYWluICYmICFoZWFkZXJzWyJY
LVJlcXVlc3RlZC1XaXRoIl0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzWyAi
WC1SZXF1ZXN0ZWQtV2l0aCIgXSA9ICJYTUxIdHRwUmVxdWVzdCI7CisgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBOZWVkIGFuIGV4dHJhIHRyeS9jYXRjaCBm
b3IgY3Jvc3MgZG9tYWluIHJlcXVlc3RzIGluIEZpcmVmb3ggMworICAgICAgICAgICAgICAgICAg
ICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaSBpbiBoZWFkZXJzICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBoZWFk
ZXJzWyBpIF0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfSBjYXRjaCggXyApIHt9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gRG8gc2VuZCB0aGUg
cmVxdWVzdAorICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIG1heSByYWlzZSBhbiBleGNlcHRp
b24gd2hpY2ggaXMgYWN0dWFsbHkKKyAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlZCBpbiBq
UXVlcnkuYWpheCAoc28gbm8gdHJ5L2NhdGNoIGhlcmUpCisgICAgICAgICAgICAgICAgICAgIHho
ci5zZW5kKCAoIHMuaGFzQ29udGVudCAmJiBzLmRhdGEgKSB8fCBudWxsICk7CisKKyAgICAgICAg
ICAgICAgICAgICAgLy8gTGlzdGVuZXIKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBm
dW5jdGlvbiggXywgaXNBYm9ydCApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0
YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVycywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXNwb25zZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sOworCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXJlZm94IHRocm93cyBleGNlcHRpb25zIHdoZW4g
YWNjZXNzaW5nIHByb3BlcnRpZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9mIGFuIHho
ciB3aGVuIGEgbmV0d29yayBlcnJvciBvY2N1cnJlZAorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gaHR0cDovL2hlbHBmdWwua25vYnMtZGlhbHMuY29tL2luZGV4LnBocC9Db21wb25lbnRfcmV0
dXJuZWRfZmFpbHVyZV9jb2RlOl8weDgwMDQwMTExXyhOU19FUlJPUl9OT1RfQVZBSUxBQkxFKQor
ICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFdhcyBuZXZlciBjYWxsZWQgYW5kIGlzIGFib3J0ZWQgb3IgY29tcGxldGUKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNhbGxiYWNrICYmICggaXNBYm9ydCB8fCB4aHIu
cmVhZHlTdGF0ZSA9PT0gNCApICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIE9ubHkgY2FsbGVkIG9uY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fs
bGJhY2sgPSB1bmRlZmluZWQ7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
RG8gbm90IGtlZXAgYXMgYWN0aXZlIGFueW1vcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBoYW5kbGUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0galF1ZXJ5Lm5vb3A7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIHhock9uVW5sb2FkQWJvcnQgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHhockNhbGxiYWNrc1sgaGFuZGxl
IF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBJZiBpdCdzIGFuIGFib3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
aXNBYm9ydCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFib3J0
IGl0IG1hbnVhbGx5IGlmIG5lZWRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCB4aHIucmVhZHlTdGF0ZSAhPT0gNCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB4aHIuYWJvcnQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHhoci5zdGF0dXM7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZUhlYWRlcnMgPSB4aHIu
Z2V0QWxsUmVzcG9uc2VIZWFkZXJzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXNwb25zZXMgPSB7fTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHhtbCA9IHhoci5yZXNwb25zZVhNTDsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gQ29uc3RydWN0IHJlc3BvbnNlIGxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggeG1sICYmIHhtbC5kb2N1bWVudEVsZW1lbnQgLyogIzQ5NTggKi8g
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VzLnht
bCA9IHhtbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiByZXF1ZXN0aW5nIGJpbmFyeSBk
YXRhLCBJRTYtOSB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gb24gYW55IGF0dGVtcHQgdG8gYWNjZXNzIHJlc3BvbnNlVGV4dCAo
IzExNDI2KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZXMudGV4dCA9IHhoci5y
ZXNwb25zZVRleHQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNo
KCBlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXJlZm94IHRocm93cyBhbiBleGNlcHRp
b24gd2hlbiBhY2Nlc3NpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHN0YXR1c1RleHQgZm9yIGZhdWx0eSBjcm9zcy1kb21haW4gcmVxdWVzdHMKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9IHhoci5zdGF0dXNUZXh0OworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCggZSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBub3JtYWxpemUgd2l0aCBXZWJraXQgZ2l2aW5n
IGFuIGVtcHR5IHN0YXR1c1RleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0dXNUZXh0ID0gIiI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpbHRlciBzdGF0
dXMgZm9yIG5vbiBzdGFuZGFyZCBiZWhhdmlvcnMKKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gSWYgdGhlIHJlcXVlc3QgaXMgbG9jYWwgYW5kIHdlIGhhdmUgZGF0YTog
YXNzdW1lIGEgc3VjY2VzcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
KHN1Y2Nlc3Mgd2l0aCBubyBkYXRhIHdvbid0IGdldCBub3RpZmllZCwgdGhhdCdzIHRoZSBiZXN0
IHdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW4gZG8gZ2l2ZW4g
Y3VycmVudCBpbXBsZW1lbnRhdGlvbnMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoICFzdGF0dXMgJiYgcy5pc0xvY2FsICYmICFzLmNyb3NzRG9tYWluICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHJlc3BvbnNlcy50
ZXh0ID8gMjAwIDogNDA0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
SUUgLSAjMTQ1MDogc29tZXRpbWVzIHJldHVybnMgMTIyMyB3aGVuIGl0IHNob3VsZCBiZSAyMDQK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHN0YXR1cyA9
PT0gMTIyMyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
dXMgPSAyMDQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKCBmaXJlZm94QWNjZXNzRXhjZXB0aW9u
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWlzQWJvcnQgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlKCAtMSwgZmlyZWZveEFjY2Vzc0V4
Y2VwdGlvbiApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbCBjb21wbGV0ZSBp
ZiBuZWVkZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmVzcG9uc2VzICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlKCBzdGF0dXMsIHN0YXR1c1RleHQsIHJl
c3BvbnNlcywgcmVzcG9uc2VIZWFkZXJzICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAhcy5hc3lu
YyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHdlJ3JlIGluIHN5bmMgbW9kZSB3
ZSBmaXJlIHRoZSBjYWxsYmFjaworICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTsK
KyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggeGhyLnJlYWR5U3RhdGUgPT09IDQgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAoSUU2ICYgSUU3KSBpZiBpdCdzIGluIGNhY2hl
IGFuZCBoYXMgYmVlbgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0cmlldmVkIGRpcmVj
dGx5IHdlIG5lZWQgdG8gZmlyZSB0aGUgY2FsbGJhY2sKKyAgICAgICAgICAgICAgICAgICAgICAg
IHNldFRpbWVvdXQoIGNhbGxiYWNrLCAwICk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUgPSArK3hocklkOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCB4aHJPblVubG9hZEFib3J0ICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIENyZWF0ZSB0aGUgYWN0aXZlIHhocnMgY2FsbGJhY2tzIGxpc3QgaWYgbmVl
ZGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGF0dGFjaCB0aGUgdW5sb2Fk
IGhhbmRsZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICF4aHJDYWxsYmFja3Mg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhockNhbGxiYWNrcyA9IHt9Owor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIHdpbmRvdyApLnVubG9hZCgg
eGhyT25VbmxvYWRBYm9ydCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdG8gbGlzdCBvZiBhY3RpdmUgeGhycyBjYWxs
YmFja3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHJDYWxsYmFja3NbIGhhbmRsZSBd
ID0gY2FsbGJhY2s7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gY2FsbGJhY2s7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgYWJvcnQ6IGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIGNhbGxiYWNrICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgY2FsbGJhY2soMCwxKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICB9KTsKK30K
K3ZhciBmeE5vdywgdGltZXJJZCwKKyAgICByZnh0eXBlcyA9IC9eKD86dG9nZ2xlfHNob3d8aGlk
ZSkkLywKKyAgICByZnhudW0gPSBuZXcgUmVnRXhwKCAiXig/OihbLStdKT18KSgiICsgY29yZV9w
bnVtICsgIikoW2EteiVdKikkIiwgImkiICksCisgICAgcnJ1biA9IC9xdWV1ZUhvb2tzJC8sCisg
ICAgYW5pbWF0aW9uUHJlZmlsdGVycyA9IFsgZGVmYXVsdFByZWZpbHRlciBdLAorICAgIHR3ZWVu
ZXJzID0geworICAgICAgICAiKiI6IFtmdW5jdGlvbiggcHJvcCwgdmFsdWUgKSB7CisgICAgICAg
ICAgICB2YXIgZW5kLCB1bml0LAorICAgICAgICAgICAgICAgIHR3ZWVuID0gdGhpcy5jcmVhdGVU
d2VlbiggcHJvcCwgdmFsdWUgKSwKKyAgICAgICAgICAgICAgICBwYXJ0cyA9IHJmeG51bS5leGVj
KCB2YWx1ZSApLAorICAgICAgICAgICAgICAgIHRhcmdldCA9IHR3ZWVuLmN1cigpLAorICAgICAg
ICAgICAgICAgIHN0YXJ0ID0gK3RhcmdldCB8fCAwLAorICAgICAgICAgICAgICAgIHNjYWxlID0g
MSwKKyAgICAgICAgICAgICAgICBtYXhJdGVyYXRpb25zID0gMjA7CisKKyAgICAgICAgICAgIGlm
ICggcGFydHMgKSB7CisgICAgICAgICAgICAgICAgZW5kID0gK3BhcnRzWzJdOworICAgICAgICAg
ICAgICAgIHVuaXQgPSBwYXJ0c1szXSB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSA/ICIi
IDogInB4IiApOworCisgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjb21wdXRlIHN0YXJ0
aW5nIHZhbHVlCisgICAgICAgICAgICAgICAgaWYgKCB1bml0ICE9PSAicHgiICYmIHN0YXJ0ICkg
eworICAgICAgICAgICAgICAgICAgICAvLyBJdGVyYXRpdmVseSBhcHByb3hpbWF0ZSBmcm9tIGEg
bm9uemVybyBzdGFydGluZyBwb2ludAorICAgICAgICAgICAgICAgICAgICAvLyBQcmVmZXIgdGhl
IGN1cnJlbnQgcHJvcGVydHksIGJlY2F1c2UgdGhpcyBwcm9jZXNzIHdpbGwgYmUgdHJpdmlhbCBp
ZiBpdCB1c2VzIHRoZSBzYW1lIHVuaXRzCisgICAgICAgICAgICAgICAgICAgIC8vIEZhbGxiYWNr
IHRvIGVuZCBvciBhIHNpbXBsZSBjb25zdGFudAorICAgICAgICAgICAgICAgICAgICBzdGFydCA9
IGpRdWVyeS5jc3MoIHR3ZWVuLmVsZW0sIHByb3AsIHRydWUgKSB8fCBlbmQgfHwgMTsKKworICAg
ICAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBwcmV2
aW91cyBpdGVyYXRpb24gemVyb2VkIG91dCwgZG91YmxlIHVudGlsIHdlIGdldCAqc29tZXRoaW5n
KgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIGEgc3RyaW5nIGZvciBkb3VibGluZyBm
YWN0b3Igc28gd2UgZG9uJ3QgYWNjaWRlbnRhbGx5IHNlZSBzY2FsZSBhcyB1bmNoYW5nZWQgYmVs
b3cKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlID0gc2NhbGUgfHwgIi41IjsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gQWRqdXN0IGFuZCBhcHBseQorICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhcnQgPSBzdGFydCAvIHNjYWxlOworICAgICAgICAgICAgICAgICAgICAgICAg
alF1ZXJ5LnN0eWxlKCB0d2Vlbi5lbGVtLCBwcm9wLCBzdGFydCArIHVuaXQgKTsKKworICAgICAg
ICAgICAgICAgICAgICAvLyBVcGRhdGUgc2NhbGUsIHRvbGVyYXRpbmcgemVybyBvciBOYU4gZnJv
bSB0d2Vlbi5jdXIoKQorICAgICAgICAgICAgICAgICAgICAvLyBBbmQgYnJlYWtpbmcgdGhlIGxv
b3AgaWYgc2NhbGUgaXMgdW5jaGFuZ2VkIG9yIHBlcmZlY3QsIG9yIGlmIHdlJ3ZlIGp1c3QgaGFk
IGVub3VnaAorICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICggc2NhbGUgIT09IChzY2FsZSA9
IHR3ZWVuLmN1cigpIC8gdGFyZ2V0KSAmJiBzY2FsZSAhPT0gMSAmJiAtLW1heEl0ZXJhdGlvbnMg
KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB0d2Vlbi51bml0ID0gdW5p
dDsKKyAgICAgICAgICAgICAgICB0d2Vlbi5zdGFydCA9IHN0YXJ0OworICAgICAgICAgICAgICAg
IC8vIElmIGEgKz0vLT0gdG9rZW4gd2FzIHByb3ZpZGVkLCB3ZSdyZSBkb2luZyBhIHJlbGF0aXZl
IGFuaW1hdGlvbgorICAgICAgICAgICAgICAgIHR3ZWVuLmVuZCA9IHBhcnRzWzFdID8gc3RhcnQg
KyAoIHBhcnRzWzFdICsgMSApICogZW5kIDogZW5kOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIHR3ZWVuOworICAgICAgICB9XQorICAgIH07CisKKy8vIEFuaW1hdGlvbnMgY3Jl
YXRlZCBzeW5jaHJvbm91c2x5IHdpbGwgcnVuIHN5bmNocm9ub3VzbHkKK2Z1bmN0aW9uIGNyZWF0
ZUZ4Tm93KCkgeworICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGZ4Tm93ID0g
dW5kZWZpbmVkOworICAgIH0sIDAgKTsKKyAgICByZXR1cm4gKCBmeE5vdyA9IGpRdWVyeS5ub3co
KSApOworfQorCitmdW5jdGlvbiBjcmVhdGVUd2VlbnMoIGFuaW1hdGlvbiwgcHJvcHMgKSB7Cisg
ICAgalF1ZXJ5LmVhY2goIHByb3BzLCBmdW5jdGlvbiggcHJvcCwgdmFsdWUgKSB7CisgICAgICAg
IHZhciBjb2xsZWN0aW9uID0gKCB0d2VlbmVyc1sgcHJvcCBdIHx8IFtdICkuY29uY2F0KCB0d2Vl
bmVyc1sgIioiIF0gKSwKKyAgICAgICAgICAgIGluZGV4ID0gMCwKKyAgICAgICAgICAgIGxlbmd0
aCA9IGNvbGxlY3Rpb24ubGVuZ3RoOworICAgICAgICBmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBp
bmRleCsrICkgeworICAgICAgICAgICAgaWYgKCBjb2xsZWN0aW9uWyBpbmRleCBdLmNhbGwoIGFu
aW1hdGlvbiwgcHJvcCwgdmFsdWUgKSApIHsKKworICAgICAgICAgICAgICAgIC8vIHdlJ3JlIGRv
bmUgd2l0aCB0aGlzIHByb3BlcnR5CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIEFuaW1hdGlvbiggZWxlbSwg
cHJvcGVydGllcywgb3B0aW9ucyApIHsKKyAgICB2YXIgcmVzdWx0LAorICAgICAgICBpbmRleCA9
IDAsCisgICAgICAgIHR3ZWVuZXJJbmRleCA9IDAsCisgICAgICAgIGxlbmd0aCA9IGFuaW1hdGlv
blByZWZpbHRlcnMubGVuZ3RoLAorICAgICAgICBkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJlZCgp
LmFsd2F5cyggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAvLyBkb24ndCBtYXRjaCBlbGVtIGlu
IHRoZSA6YW5pbWF0ZWQgc2VsZWN0b3IKKyAgICAgICAgICAgIGRlbGV0ZSB0aWNrLmVsZW07Cisg
ICAgICAgIH0pLAorICAgICAgICB0aWNrID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIg
Y3VycmVudFRpbWUgPSBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLAorICAgICAgICAgICAgICAgIHJl
bWFpbmluZyA9IE1hdGgubWF4KCAwLCBhbmltYXRpb24uc3RhcnRUaW1lICsgYW5pbWF0aW9uLmR1
cmF0aW9uIC0gY3VycmVudFRpbWUgKSwKKyAgICAgICAgICAgICAgICAvLyBhcmNoYWljIGNyYXNo
IGJ1ZyB3b24ndCBhbGxvdyB1cyB0byB1c2UgMSAtICggMC41IHx8IDAgKSAoIzEyNDk3KQorICAg
ICAgICAgICAgICAgIHRlbXAgPSByZW1haW5pbmcgLyBhbmltYXRpb24uZHVyYXRpb24gfHwgMCwK
KyAgICAgICAgICAgICAgICBwZXJjZW50ID0gMSAtIHRlbXAsCisgICAgICAgICAgICAgICAgaW5k
ZXggPSAwLAorICAgICAgICAgICAgICAgIGxlbmd0aCA9IGFuaW1hdGlvbi50d2VlbnMubGVuZ3Ro
OworCisgICAgICAgICAgICBmb3IgKCA7IGluZGV4IDwgbGVuZ3RoIDsgaW5kZXgrKyApIHsKKyAg
ICAgICAgICAgICAgICBhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggcGVyY2VudCApOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBb
IGFuaW1hdGlvbiwgcGVyY2VudCwgcmVtYWluaW5nIF0pOworCisgICAgICAgICAgICBpZiAoIHBl
cmNlbnQgPCAxICYmIGxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVtYWluaW5n
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZl
V2l0aCggZWxlbSwgWyBhbmltYXRpb24gXSApOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgYW5pbWF0aW9uID0gZGVmZXJy
ZWQucHJvbWlzZSh7CisgICAgICAgICAgICBlbGVtOiBlbGVtLAorICAgICAgICAgICAgcHJvcHM6
IGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wZXJ0aWVzICksCisgICAgICAgICAgICBvcHRzOiBqUXVl
cnkuZXh0ZW5kKCB0cnVlLCB7IHNwZWNpYWxFYXNpbmc6IHt9IH0sIG9wdGlvbnMgKSwKKyAgICAg
ICAgICAgIG9yaWdpbmFsUHJvcGVydGllczogcHJvcGVydGllcywKKyAgICAgICAgICAgIG9yaWdp
bmFsT3B0aW9uczogb3B0aW9ucywKKyAgICAgICAgICAgIHN0YXJ0VGltZTogZnhOb3cgfHwgY3Jl
YXRlRnhOb3coKSwKKyAgICAgICAgICAgIGR1cmF0aW9uOiBvcHRpb25zLmR1cmF0aW9uLAorICAg
ICAgICAgICAgdHdlZW5zOiBbXSwKKyAgICAgICAgICAgIGNyZWF0ZVR3ZWVuOiBmdW5jdGlvbigg
cHJvcCwgZW5kLCBlYXNpbmcgKSB7CisgICAgICAgICAgICAgICAgdmFyIHR3ZWVuID0galF1ZXJ5
LlR3ZWVuKCBlbGVtLCBhbmltYXRpb24ub3B0cywgcHJvcCwgZW5kLAorICAgICAgICAgICAgICAg
ICAgICAgICAgYW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZ1sgcHJvcCBdIHx8IGFuaW1hdGlv
bi5vcHRzLmVhc2luZyApOworICAgICAgICAgICAgICAgIGFuaW1hdGlvbi50d2VlbnMucHVzaCgg
dHdlZW4gKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHdlZW47CisgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgc3RvcDogZnVuY3Rpb24oIGdvdG9FbmQgKSB7CisgICAgICAgICAgICAgICAg
dmFyIGluZGV4ID0gMCwKKyAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UgYXJlIGdvaW5nIHRv
IHRoZSBlbmQsIHdlIHdhbnQgdG8gcnVuIGFsbCB0aGUgdHdlZW5zCisgICAgICAgICAgICAgICAg
ICAgIC8vIG90aGVyd2lzZSB3ZSBza2lwIHRoaXMgcGFydAorICAgICAgICAgICAgICAgICAgICBs
ZW5ndGggPSBnb3RvRW5kID8gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGggOiAwOworCisgICAgICAg
ICAgICAgICAgZm9yICggOyBpbmRleCA8IGxlbmd0aCA7IGluZGV4KysgKSB7CisgICAgICAgICAg
ICAgICAgICAgIGFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCAxICk7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gcmVzb2x2ZSB3aGVuIHdlIHBsYXllZCB0aGUg
bGFzdCBmcmFtZQorICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSwgcmVqZWN0CisgICAgICAg
ICAgICAgICAgaWYgKCBnb3RvRW5kICkgeworICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5y
ZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApOworICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlamVjdFdpdGgoIGVs
ZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9CisgICAgICAgIH0pLAorICAgICAg
ICBwcm9wcyA9IGFuaW1hdGlvbi5wcm9wczsKKworICAgIHByb3BGaWx0ZXIoIHByb3BzLCBhbmlt
YXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nICk7CisKKyAgICBmb3IgKCA7IGluZGV4IDwgbGVuZ3Ro
IDsgaW5kZXgrKyApIHsKKyAgICAgICAgcmVzdWx0ID0gYW5pbWF0aW9uUHJlZmlsdGVyc1sgaW5k
ZXggXS5jYWxsKCBhbmltYXRpb24sIGVsZW0sIHByb3BzLCBhbmltYXRpb24ub3B0cyApOworICAg
ICAgICBpZiAoIHJlc3VsdCApIHsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBjcmVhdGVUd2VlbnMoIGFuaW1hdGlvbiwgcHJvcHMgKTsKKworICAg
IGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGFuaW1hdGlvbi5vcHRzLnN0YXJ0ICkgKSB7CisgICAg
ICAgIGFuaW1hdGlvbi5vcHRzLnN0YXJ0LmNhbGwoIGVsZW0sIGFuaW1hdGlvbiApOworICAgIH0K
KworICAgIGpRdWVyeS5meC50aW1lcigKKyAgICAgICAgalF1ZXJ5LmV4dGVuZCggdGljaywgewor
ICAgICAgICAgICAgYW5pbTogYW5pbWF0aW9uLAorICAgICAgICAgICAgcXVldWU6IGFuaW1hdGlv
bi5vcHRzLnF1ZXVlLAorICAgICAgICAgICAgZWxlbTogZWxlbQorICAgICAgICB9KQorICAgICk7
CisKKyAgICAvLyBhdHRhY2ggY2FsbGJhY2tzIGZyb20gb3B0aW9ucworICAgIHJldHVybiBhbmlt
YXRpb24ucHJvZ3Jlc3MoIGFuaW1hdGlvbi5vcHRzLnByb2dyZXNzICkKKyAgICAgICAgLmRvbmUo
IGFuaW1hdGlvbi5vcHRzLmRvbmUsIGFuaW1hdGlvbi5vcHRzLmNvbXBsZXRlICkKKyAgICAgICAg
LmZhaWwoIGFuaW1hdGlvbi5vcHRzLmZhaWwgKQorICAgICAgICAuYWx3YXlzKCBhbmltYXRpb24u
b3B0cy5hbHdheXMgKTsKK30KKworZnVuY3Rpb24gcHJvcEZpbHRlciggcHJvcHMsIHNwZWNpYWxF
YXNpbmcgKSB7CisgICAgdmFyIGluZGV4LCBuYW1lLCBlYXNpbmcsIHZhbHVlLCBob29rczsKKwor
ICAgIC8vIGNhbWVsQ2FzZSwgc3BlY2lhbEVhc2luZyBhbmQgZXhwYW5kIGNzc0hvb2sgcGFzcwor
ICAgIGZvciAoIGluZGV4IGluIHByb3BzICkgeworICAgICAgICBuYW1lID0galF1ZXJ5LmNhbWVs
Q2FzZSggaW5kZXggKTsKKyAgICAgICAgZWFzaW5nID0gc3BlY2lhbEVhc2luZ1sgbmFtZSBdOwor
ICAgICAgICB2YWx1ZSA9IHByb3BzWyBpbmRleCBdOworICAgICAgICBpZiAoIGpRdWVyeS5pc0Fy
cmF5KCB2YWx1ZSApICkgeworICAgICAgICAgICAgZWFzaW5nID0gdmFsdWVbIDEgXTsKKyAgICAg
ICAgICAgIHZhbHVlID0gcHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgMCBdOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKCBpbmRleCAhPT0gbmFtZSApIHsKKyAgICAgICAgICAgIHByb3BzWyBuYW1l
IF0gPSB2YWx1ZTsKKyAgICAgICAgICAgIGRlbGV0ZSBwcm9wc1sgaW5kZXggXTsKKyAgICAgICAg
fQorCisgICAgICAgIGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF07CisgICAgICAgIGlm
ICggaG9va3MgJiYgImV4cGFuZCIgaW4gaG9va3MgKSB7CisgICAgICAgICAgICB2YWx1ZSA9IGhv
b2tzLmV4cGFuZCggdmFsdWUgKTsKKyAgICAgICAgICAgIGRlbGV0ZSBwcm9wc1sgbmFtZSBdOwor
CisgICAgICAgICAgICAvLyBub3QgcXVpdGUgJC5leHRlbmQsIHRoaXMgd29udCBvdmVyd3JpdGUg
a2V5cyBhbHJlYWR5IHByZXNlbnQuCisgICAgICAgICAgICAvLyBhbHNvIC0gcmV1c2luZyAnaW5k
ZXgnIGZyb20gYWJvdmUgYmVjYXVzZSB3ZSBoYXZlIHRoZSBjb3JyZWN0ICJuYW1lIgorICAgICAg
ICAgICAgZm9yICggaW5kZXggaW4gdmFsdWUgKSB7CisgICAgICAgICAgICAgICAgaWYgKCAhKCBp
bmRleCBpbiBwcm9wcyApICkgeworICAgICAgICAgICAgICAgICAgICBwcm9wc1sgaW5kZXggXSA9
IHZhbHVlWyBpbmRleCBdOworICAgICAgICAgICAgICAgICAgICBzcGVjaWFsRWFzaW5nWyBpbmRl
eCBdID0gZWFzaW5nOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIHNwZWNpYWxFYXNpbmdbIG5hbWUgXSA9IGVhc2luZzsKKyAg
ICAgICAgfQorICAgIH0KK30KKworalF1ZXJ5LkFuaW1hdGlvbiA9IGpRdWVyeS5leHRlbmQoIEFu
aW1hdGlvbiwgeworCisgICAgdHdlZW5lcjogZnVuY3Rpb24oIHByb3BzLCBjYWxsYmFjayApIHsK
KyAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggcHJvcHMgKSApIHsKKyAgICAgICAgICAg
IGNhbGxiYWNrID0gcHJvcHM7CisgICAgICAgICAgICBwcm9wcyA9IFsgIioiIF07CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBwcm9wcyA9IHByb3BzLnNwbGl0KCIgIik7CisgICAgICAg
IH0KKworICAgICAgICB2YXIgcHJvcCwKKyAgICAgICAgICAgIGluZGV4ID0gMCwKKyAgICAgICAg
ICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDsKKworICAgICAgICBmb3IgKCA7IGluZGV4IDwgbGVu
Z3RoIDsgaW5kZXgrKyApIHsKKyAgICAgICAgICAgIHByb3AgPSBwcm9wc1sgaW5kZXggXTsKKyAg
ICAgICAgICAgIHR3ZWVuZXJzWyBwcm9wIF0gPSB0d2VlbmVyc1sgcHJvcCBdIHx8IFtdOworICAg
ICAgICAgICAgdHdlZW5lcnNbIHByb3AgXS51bnNoaWZ0KCBjYWxsYmFjayApOworICAgICAgICB9
CisgICAgfSwKKworICAgIHByZWZpbHRlcjogZnVuY3Rpb24oIGNhbGxiYWNrLCBwcmVwZW5kICkg
eworICAgICAgICBpZiAoIHByZXBlbmQgKSB7CisgICAgICAgICAgICBhbmltYXRpb25QcmVmaWx0
ZXJzLnVuc2hpZnQoIGNhbGxiYWNrICk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBh
bmltYXRpb25QcmVmaWx0ZXJzLnB1c2goIGNhbGxiYWNrICk7CisgICAgICAgIH0KKyAgICB9Cit9
KTsKKworZnVuY3Rpb24gZGVmYXVsdFByZWZpbHRlciggZWxlbSwgcHJvcHMsIG9wdHMgKSB7Cisg
ICAgdmFyIGluZGV4LCBwcm9wLCB2YWx1ZSwgbGVuZ3RoLCBkYXRhU2hvdywgdG9nZ2xlLCB0d2Vl
biwgaG9va3MsIG9sZGZpcmUsCisgICAgICAgIGFuaW0gPSB0aGlzLAorICAgICAgICBzdHlsZSA9
IGVsZW0uc3R5bGUsCisgICAgICAgIG9yaWcgPSB7fSwKKyAgICAgICAgaGFuZGxlZCA9IFtdLAor
ICAgICAgICBoaWRkZW4gPSBlbGVtLm5vZGVUeXBlICYmIGlzSGlkZGVuKCBlbGVtICk7CisKKyAg
ICAvLyBoYW5kbGUgcXVldWU6IGZhbHNlIHByb21pc2VzCisgICAgaWYgKCAhb3B0cy5xdWV1ZSAp
IHsKKyAgICAgICAgaG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sICJmeCIgKTsKKyAg
ICAgICAgaWYgKCBob29rcy51bnF1ZXVlZCA9PSBudWxsICkgeworICAgICAgICAgICAgaG9va3Mu
dW5xdWV1ZWQgPSAwOworICAgICAgICAgICAgb2xkZmlyZSA9IGhvb2tzLmVtcHR5LmZpcmU7Cisg
ICAgICAgICAgICBob29rcy5lbXB0eS5maXJlID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCAhaG9va3MudW5xdWV1ZWQgKSB7CisgICAgICAgICAgICAgICAgICAgIG9sZGZpcmUo
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgICAg
IGhvb2tzLnVucXVldWVkKys7CisKKyAgICAgICAgYW5pbS5hbHdheXMoZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgICAvLyBkb2luZyB0aGlzIG1ha2VzIHN1cmUgdGhhdCB0aGUgY29tcGxldGUgaGFu
ZGxlciB3aWxsIGJlIGNhbGxlZAorICAgICAgICAgICAgLy8gYmVmb3JlIHRoaXMgY29tcGxldGVz
CisgICAgICAgICAgICBhbmltLmFsd2F5cyhmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBo
b29rcy51bnF1ZXVlZC0tOworICAgICAgICAgICAgICAgIGlmICggIWpRdWVyeS5xdWV1ZSggZWxl
bSwgImZ4IiApLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICAgICAgaG9va3MuZW1wdHkuZmly
ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAg
ICB9CisKKyAgICAvLyBoZWlnaHQvd2lkdGggb3ZlcmZsb3cgcGFzcworICAgIGlmICggZWxlbS5u
b2RlVHlwZSA9PT0gMSAmJiAoICJoZWlnaHQiIGluIHByb3BzIHx8ICJ3aWR0aCIgaW4gcHJvcHMg
KSApIHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgbm90aGluZyBzbmVha3Mgb3V0CisgICAg
ICAgIC8vIFJlY29yZCBhbGwgMyBvdmVyZmxvdyBhdHRyaWJ1dGVzIGJlY2F1c2UgSUUgZG9lcyBu
b3QKKyAgICAgICAgLy8gY2hhbmdlIHRoZSBvdmVyZmxvdyBhdHRyaWJ1dGUgd2hlbiBvdmVyZmxv
d1ggYW5kCisgICAgICAgIC8vIG92ZXJmbG93WSBhcmUgc2V0IHRvIHRoZSBzYW1lIHZhbHVlCisg
ICAgICAgIG9wdHMub3ZlcmZsb3cgPSBbIHN0eWxlLm92ZXJmbG93LCBzdHlsZS5vdmVyZmxvd1gs
IHN0eWxlLm92ZXJmbG93WSBdOworCisgICAgICAgIC8vIFNldCBkaXNwbGF5IHByb3BlcnR5IHRv
IGlubGluZS1ibG9jayBmb3IgaGVpZ2h0L3dpZHRoCisgICAgICAgIC8vIGFuaW1hdGlvbnMgb24g
aW5saW5lIGVsZW1lbnRzIHRoYXQgYXJlIGhhdmluZyB3aWR0aC9oZWlnaHQgYW5pbWF0ZWQKKyAg
ICAgICAgaWYgKCBqUXVlcnkuY3NzKCBlbGVtLCAiZGlzcGxheSIgKSA9PT0gImlubGluZSIgJiYK
KyAgICAgICAgICAgICAgICBqUXVlcnkuY3NzKCBlbGVtLCAiZmxvYXQiICkgPT09ICJub25lIiAp
IHsKKworICAgICAgICAgICAgLy8gaW5saW5lLWxldmVsIGVsZW1lbnRzIGFjY2VwdCBpbmxpbmUt
YmxvY2s7CisgICAgICAgICAgICAvLyBibG9jay1sZXZlbCBlbGVtZW50cyBuZWVkIHRvIGJlIGlu
bGluZSB3aXRoIGxheW91dAorICAgICAgICAgICAgaWYgKCAhalF1ZXJ5LnN1cHBvcnQuaW5saW5l
QmxvY2tOZWVkc0xheW91dCB8fCBjc3NfZGVmYXVsdERpc3BsYXkoIGVsZW0ubm9kZU5hbWUgKSA9
PT0gImlubGluZSIgKSB7CisgICAgICAgICAgICAgICAgc3R5bGUuZGlzcGxheSA9ICJpbmxpbmUt
YmxvY2siOworCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN0eWxlLnpv
b20gPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCBvcHRz
Lm92ZXJmbG93ICkgeworICAgICAgICBzdHlsZS5vdmVyZmxvdyA9ICJoaWRkZW4iOworICAgICAg
ICBpZiAoICFqUXVlcnkuc3VwcG9ydC5zaHJpbmtXcmFwQmxvY2tzICkgeworICAgICAgICAgICAg
YW5pbS5kb25lKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHN0eWxlLm92ZXJmbG93ID0g
b3B0cy5vdmVyZmxvd1sgMCBdOworICAgICAgICAgICAgICAgIHN0eWxlLm92ZXJmbG93WCA9IG9w
dHMub3ZlcmZsb3dbIDEgXTsKKyAgICAgICAgICAgICAgICBzdHlsZS5vdmVyZmxvd1kgPSBvcHRz
Lm92ZXJmbG93WyAyIF07CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKworCisg
ICAgLy8gc2hvdy9oaWRlIHBhc3MKKyAgICBmb3IgKCBpbmRleCBpbiBwcm9wcyApIHsKKyAgICAg
ICAgdmFsdWUgPSBwcm9wc1sgaW5kZXggXTsKKyAgICAgICAgaWYgKCByZnh0eXBlcy5leGVjKCB2
YWx1ZSApICkgeworICAgICAgICAgICAgZGVsZXRlIHByb3BzWyBpbmRleCBdOworICAgICAgICAg
ICAgdG9nZ2xlID0gdG9nZ2xlIHx8IHZhbHVlID09PSAidG9nZ2xlIjsKKyAgICAgICAgICAgIGlm
ICggdmFsdWUgPT09ICggaGlkZGVuID8gImhpZGUiIDogInNob3ciICkgKSB7CisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBoYW5kbGVkLnB1c2go
IGluZGV4ICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBsZW5ndGggPSBoYW5kbGVkLmxlbmd0
aDsKKyAgICBpZiAoIGxlbmd0aCApIHsKKyAgICAgICAgZGF0YVNob3cgPSBqUXVlcnkuX2RhdGEo
IGVsZW0sICJmeHNob3ciICkgfHwgalF1ZXJ5Ll9kYXRhKCBlbGVtLCAiZnhzaG93Iiwge30gKTsK
KyAgICAgICAgaWYgKCAiaGlkZGVuIiBpbiBkYXRhU2hvdyApIHsKKyAgICAgICAgICAgIGhpZGRl
biA9IGRhdGFTaG93LmhpZGRlbjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHN0b3JlIHN0YXRl
IGlmIGl0cyB0b2dnbGUgLSBlbmFibGVzIC5zdG9wKCkudG9nZ2xlKCkgdG8gInJldmVyc2UiCisg
ICAgICAgIGlmICggdG9nZ2xlICkgeworICAgICAgICAgICAgZGF0YVNob3cuaGlkZGVuID0gIWhp
ZGRlbjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIGhpZGRlbiApIHsKKyAgICAgICAgICAgIGpR
dWVyeSggZWxlbSApLnNob3coKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFuaW0u
ZG9uZShmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkoIGVsZW0gKS5oaWRlKCk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBhbmltLmRvbmUoZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICB2YXIgcHJvcDsKKyAgICAgICAgICAgIGpRdWVyeS5yZW1vdmVEYXRh
KCBlbGVtLCAiZnhzaG93IiwgdHJ1ZSApOworICAgICAgICAgICAgZm9yICggcHJvcCBpbiBvcmln
ICkgeworICAgICAgICAgICAgICAgIGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgb3JpZ1sgcHJv
cCBdICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICBmb3IgKCBpbmRleCA9
IDAgOyBpbmRleCA8IGxlbmd0aCA7IGluZGV4KysgKSB7CisgICAgICAgICAgICBwcm9wID0gaGFu
ZGxlZFsgaW5kZXggXTsKKyAgICAgICAgICAgIHR3ZWVuID0gYW5pbS5jcmVhdGVUd2VlbiggcHJv
cCwgaGlkZGVuID8gZGF0YVNob3dbIHByb3AgXSA6IDAgKTsKKyAgICAgICAgICAgIG9yaWdbIHBy
b3AgXSA9IGRhdGFTaG93WyBwcm9wIF0gfHwgalF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wICk7CisK
KyAgICAgICAgICAgIGlmICggISggcHJvcCBpbiBkYXRhU2hvdyApICkgeworICAgICAgICAgICAg
ICAgIGRhdGFTaG93WyBwcm9wIF0gPSB0d2Vlbi5zdGFydDsKKyAgICAgICAgICAgICAgICBpZiAo
IGhpZGRlbiApIHsKKyAgICAgICAgICAgICAgICAgICAgdHdlZW4uZW5kID0gdHdlZW4uc3RhcnQ7
CisgICAgICAgICAgICAgICAgICAgIHR3ZWVuLnN0YXJ0ID0gcHJvcCA9PT0gIndpZHRoIiB8fCBw
cm9wID09PSAiaGVpZ2h0IiA/IDEgOiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KK30KKworZnVuY3Rpb24gVHdlZW4oIGVsZW0sIG9wdGlvbnMs
IHByb3AsIGVuZCwgZWFzaW5nICkgeworICAgIHJldHVybiBuZXcgVHdlZW4ucHJvdG90eXBlLmlu
aXQoIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICk7Cit9CitqUXVlcnkuVHdlZW4g
PSBUd2VlbjsKKworVHdlZW4ucHJvdG90eXBlID0geworICAgIGNvbnN0cnVjdG9yOiBUd2VlbiwK
KyAgICBpbml0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcsIHVu
aXQgKSB7CisgICAgICAgIHRoaXMuZWxlbSA9IGVsZW07CisgICAgICAgIHRoaXMucHJvcCA9IHBy
b3A7CisgICAgICAgIHRoaXMuZWFzaW5nID0gZWFzaW5nIHx8ICJzd2luZyI7CisgICAgICAgIHRo
aXMub3B0aW9ucyA9IG9wdGlvbnM7CisgICAgICAgIHRoaXMuc3RhcnQgPSB0aGlzLm5vdyA9IHRo
aXMuY3VyKCk7CisgICAgICAgIHRoaXMuZW5kID0gZW5kOworICAgICAgICB0aGlzLnVuaXQgPSB1
bml0IHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gIiIgOiAicHgiICk7CisgICAgfSwK
KyAgICBjdXI6IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaG9va3MgPSBUd2Vlbi5wcm9wSG9v
a3NbIHRoaXMucHJvcCBdOworCisgICAgICAgIHJldHVybiBob29rcyAmJiBob29rcy5nZXQgPwor
ICAgICAgICAgICAgaG9va3MuZ2V0KCB0aGlzICkgOgorICAgICAgICAgICAgVHdlZW4ucHJvcEhv
b2tzLl9kZWZhdWx0LmdldCggdGhpcyApOworICAgIH0sCisgICAgcnVuOiBmdW5jdGlvbiggcGVy
Y2VudCApIHsKKyAgICAgICAgdmFyIGVhc2VkLAorICAgICAgICAgICAgaG9va3MgPSBUd2Vlbi5w
cm9wSG9va3NbIHRoaXMucHJvcCBdOworCisgICAgICAgIGlmICggdGhpcy5vcHRpb25zLmR1cmF0
aW9uICkgeworICAgICAgICAgICAgdGhpcy5wb3MgPSBlYXNlZCA9IGpRdWVyeS5lYXNpbmdbIHRo
aXMuZWFzaW5nIF0oCisgICAgICAgICAgICAgICAgcGVyY2VudCwgdGhpcy5vcHRpb25zLmR1cmF0
aW9uICogcGVyY2VudCwgMCwgMSwgdGhpcy5vcHRpb25zLmR1cmF0aW9uCisgICAgICAgICAgICAp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5wb3MgPSBlYXNlZCA9IHBlcmNl
bnQ7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5ub3cgPSAoIHRoaXMuZW5kIC0gdGhpcy5zdGFy
dCApICogZWFzZWQgKyB0aGlzLnN0YXJ0OworCisgICAgICAgIGlmICggdGhpcy5vcHRpb25zLnN0
ZXAgKSB7CisgICAgICAgICAgICB0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKCB0aGlzLmVsZW0sIHRo
aXMubm93LCB0aGlzICk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIGhvb2tzICYmIGhvb2tz
LnNldCApIHsKKyAgICAgICAgICAgIGhvb2tzLnNldCggdGhpcyApOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgVHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LnNldCggdGhpcyApOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KK307CisKK1R3ZWVuLnByb3RvdHlw
ZS5pbml0LnByb3RvdHlwZSA9IFR3ZWVuLnByb3RvdHlwZTsKKworVHdlZW4ucHJvcEhvb2tzID0g
eworICAgIF9kZWZhdWx0OiB7CisgICAgICAgIGdldDogZnVuY3Rpb24oIHR3ZWVuICkgeworICAg
ICAgICAgICAgdmFyIHJlc3VsdDsKKworICAgICAgICAgICAgaWYgKCB0d2Vlbi5lbGVtWyB0d2Vl
bi5wcm9wIF0gIT0gbnVsbCAmJgorICAgICAgICAgICAgICAgICghdHdlZW4uZWxlbS5zdHlsZSB8
fCB0d2Vlbi5lbGVtLnN0eWxlWyB0d2Vlbi5wcm9wIF0gPT0gbnVsbCkgKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgLy8gcGFzc2luZyBhbnkgdmFsdWUgYXMgYSA0dGggcGFyYW1ldGVyIHRvIC5j
c3Mgd2lsbCBhdXRvbWF0aWNhbGx5CisgICAgICAgICAgICAvLyBhdHRlbXB0IGEgcGFyc2VGbG9h
dCBhbmQgZmFsbGJhY2sgdG8gYSBzdHJpbmcgaWYgdGhlIHBhcnNlIGZhaWxzCisgICAgICAgICAg
ICAvLyBzbywgc2ltcGxlIHZhbHVlcyBzdWNoIGFzICIxMHB4IiBhcmUgcGFyc2VkIHRvIEZsb2F0
LgorICAgICAgICAgICAgLy8gY29tcGxleCB2YWx1ZXMgc3VjaCBhcyAicm90YXRlKDFyYWQpIiBh
cmUgcmV0dXJuZWQgYXMgaXMuCisgICAgICAgICAgICByZXN1bHQgPSBqUXVlcnkuY3NzKCB0d2Vl
bi5lbGVtLCB0d2Vlbi5wcm9wLCBmYWxzZSwgIiIgKTsKKyAgICAgICAgICAgIC8vIEVtcHR5IHN0
cmluZ3MsIG51bGwsIHVuZGVmaW5lZCBhbmQgImF1dG8iIGFyZSBjb252ZXJ0ZWQgdG8gMC4KKyAg
ICAgICAgICAgIHJldHVybiAhcmVzdWx0IHx8IHJlc3VsdCA9PT0gImF1dG8iID8gMCA6IHJlc3Vs
dDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7CisgICAgICAg
ICAgICAvLyB1c2Ugc3RlcCBob29rIGZvciBiYWNrIGNvbXBhdCAtIHVzZSBjc3NIb29rIGlmIGl0
cyB0aGVyZSAtIHVzZSAuc3R5bGUgaWYgaXRzCisgICAgICAgICAgICAvLyBhdmFpbGFibGUgYW5k
IHVzZSBwbGFpbiBwcm9wZXJ0aWVzIHdoZXJlIGF2YWlsYWJsZQorICAgICAgICAgICAgaWYgKCBq
UXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdICkgeworICAgICAgICAgICAgICAgIGpRdWVyeS5m
eC5zdGVwWyB0d2Vlbi5wcm9wIF0oIHR3ZWVuICk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCB0
d2Vlbi5lbGVtLnN0eWxlICYmICggdHdlZW4uZWxlbS5zdHlsZVsgalF1ZXJ5LmNzc1Byb3BzWyB0
d2Vlbi5wcm9wIF0gXSAhPSBudWxsIHx8IGpRdWVyeS5jc3NIb29rc1sgdHdlZW4ucHJvcCBdICkg
KSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5LnN0eWxlKCB0d2Vlbi5lbGVtLCB0d2Vlbi5wcm9w
LCB0d2Vlbi5ub3cgKyB0d2Vlbi51bml0ICk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdzsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KK307CisKKy8vIFJlbW92ZSBpbiAyLjAgLSB0aGlzIHN1
cHBvcnRzIElFOCdzIHBhbmljIGJhc2VkIGFwcHJvYWNoCisvLyB0byBzZXR0aW5nIHRoaW5ncyBv
biBkaXNjb25uZWN0ZWQgbm9kZXMKKworVHdlZW4ucHJvcEhvb2tzLnNjcm9sbFRvcCA9IFR3ZWVu
LnByb3BIb29rcy5zY3JvbGxMZWZ0ID0geworICAgIHNldDogZnVuY3Rpb24oIHR3ZWVuICkgewor
ICAgICAgICBpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgJiYgdHdlZW4uZWxlbS5wYXJlbnROb2Rl
ICkgeworICAgICAgICAgICAgdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93Owor
ICAgICAgICB9CisgICAgfQorfTsKKworalF1ZXJ5LmVhY2goWyAidG9nZ2xlIiwgInNob3ciLCAi
aGlkZSIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7CisgICAgdmFyIGNzc0ZuID0galF1ZXJ5LmZu
WyBuYW1lIF07CisgICAgalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2lu
ZywgY2FsbGJhY2sgKSB7CisgICAgICAgIHJldHVybiBzcGVlZCA9PSBudWxsIHx8IHR5cGVvZiBz
cGVlZCA9PT0gImJvb2xlYW4iIHx8CisgICAgICAgICAgICAvLyBzcGVjaWFsIGNoZWNrIGZvciAu
dG9nZ2xlKCBoYW5kbGVyLCBoYW5kbGVyLCAuLi4gKQorICAgICAgICAgICAgKCAhaSAmJiBqUXVl
cnkuaXNGdW5jdGlvbiggc3BlZWQgKSAmJiBqUXVlcnkuaXNGdW5jdGlvbiggZWFzaW5nICkgKSA/
CisgICAgICAgICAgICBjc3NGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICkgOgorICAgICAgICAg
ICAgdGhpcy5hbmltYXRlKCBnZW5GeCggbmFtZSwgdHJ1ZSApLCBzcGVlZCwgZWFzaW5nLCBjYWxs
YmFjayApOworICAgIH07Cit9KTsKKworalF1ZXJ5LmZuLmV4dGVuZCh7CisgICAgZmFkZVRvOiBm
dW5jdGlvbiggc3BlZWQsIHRvLCBlYXNpbmcsIGNhbGxiYWNrICkgeworCisgICAgICAgIC8vIHNo
b3cgYW55IGhpZGRlbiBlbGVtZW50cyBhZnRlciBzZXR0aW5nIG9wYWNpdHkgdG8gMAorICAgICAg
ICByZXR1cm4gdGhpcy5maWx0ZXIoIGlzSGlkZGVuICkuY3NzKCAib3BhY2l0eSIsIDAgKS5zaG93
KCkKKworICAgICAgICAgICAgLy8gYW5pbWF0ZSB0byB0aGUgdmFsdWUgc3BlY2lmaWVkCisgICAg
ICAgICAgICAuZW5kKCkuYW5pbWF0ZSh7IG9wYWNpdHk6IHRvIH0sIHNwZWVkLCBlYXNpbmcsIGNh
bGxiYWNrICk7CisgICAgfSwKKyAgICBhbmltYXRlOiBmdW5jdGlvbiggcHJvcCwgc3BlZWQsIGVh
c2luZywgY2FsbGJhY2sgKSB7CisgICAgICAgIHZhciBlbXB0eSA9IGpRdWVyeS5pc0VtcHR5T2Jq
ZWN0KCBwcm9wICksCisgICAgICAgICAgICBvcHRhbGwgPSBqUXVlcnkuc3BlZWQoIHNwZWVkLCBl
YXNpbmcsIGNhbGxiYWNrICksCisgICAgICAgICAgICBkb0FuaW1hdGlvbiA9IGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgICAgIC8vIE9wZXJhdGUgb24gYSBjb3B5IG9mIHByb3Agc28gcGVyLXBy
b3BlcnR5IGVhc2luZyB3b24ndCBiZSBsb3N0CisgICAgICAgICAgICAgICAgdmFyIGFuaW0gPSBB
bmltYXRpb24oIHRoaXMsIGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wICksIG9wdGFsbCApOworCisg
ICAgICAgICAgICAgICAgLy8gRW1wdHkgYW5pbWF0aW9ucyByZXNvbHZlIGltbWVkaWF0ZWx5Cisg
ICAgICAgICAgICAgICAgaWYgKCBlbXB0eSApIHsKKyAgICAgICAgICAgICAgICAgICAgYW5pbS5z
dG9wKCB0cnVlICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKworICAgICAg
ICByZXR1cm4gZW1wdHkgfHwgb3B0YWxsLnF1ZXVlID09PSBmYWxzZSA/CisgICAgICAgICAgICB0
aGlzLmVhY2goIGRvQW5pbWF0aW9uICkgOgorICAgICAgICAgICAgdGhpcy5xdWV1ZSggb3B0YWxs
LnF1ZXVlLCBkb0FuaW1hdGlvbiApOworICAgIH0sCisgICAgc3RvcDogZnVuY3Rpb24oIHR5cGUs
IGNsZWFyUXVldWUsIGdvdG9FbmQgKSB7CisgICAgICAgIHZhciBzdG9wUXVldWUgPSBmdW5jdGlv
biggaG9va3MgKSB7CisgICAgICAgICAgICB2YXIgc3RvcCA9IGhvb2tzLnN0b3A7CisgICAgICAg
ICAgICBkZWxldGUgaG9va3Muc3RvcDsKKyAgICAgICAgICAgIHN0b3AoIGdvdG9FbmQgKTsKKyAg
ICAgICAgfTsKKworICAgICAgICBpZiAoIHR5cGVvZiB0eXBlICE9PSAic3RyaW5nIiApIHsKKyAg
ICAgICAgICAgIGdvdG9FbmQgPSBjbGVhclF1ZXVlOworICAgICAgICAgICAgY2xlYXJRdWV1ZSA9
IHR5cGU7CisgICAgICAgICAgICB0eXBlID0gdW5kZWZpbmVkOworICAgICAgICB9CisgICAgICAg
IGlmICggY2xlYXJRdWV1ZSAmJiB0eXBlICE9PSBmYWxzZSApIHsKKyAgICAgICAgICAgIHRoaXMu
cXVldWUoIHR5cGUgfHwgImZ4IiwgW10gKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0
aGlzLmVhY2goZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgZGVxdWV1ZSA9IHRydWUsCisg
ICAgICAgICAgICAgICAgaW5kZXggPSB0eXBlICE9IG51bGwgJiYgdHlwZSArICJxdWV1ZUhvb2tz
IiwKKyAgICAgICAgICAgICAgICB0aW1lcnMgPSBqUXVlcnkudGltZXJzLAorICAgICAgICAgICAg
ICAgIGRhdGEgPSBqUXVlcnkuX2RhdGEoIHRoaXMgKTsKKworICAgICAgICAgICAgaWYgKCBpbmRl
eCApIHsKKyAgICAgICAgICAgICAgICBpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXgg
XS5zdG9wICkgeworICAgICAgICAgICAgICAgICAgICBzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0g
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIGZvciAoIGluZGV4IGluIGRhdGEgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggZGF0
YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgJiYgcnJ1bi50ZXN0KCBpbmRleCApICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgc3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJiAodHlw
ZSA9PSBudWxsIHx8IHRpbWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSkgKSB7CisgICAgICAg
ICAgICAgICAgICAgIHRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIGdvdG9FbmQgKTsKKyAgICAg
ICAgICAgICAgICAgICAgZGVxdWV1ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB0aW1l
cnMuc3BsaWNlKCBpbmRleCwgMSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gc3RhcnQgdGhlIG5leHQgaW4gdGhlIHF1ZXVlIGlmIHRoZSBsYXN0
IHN0ZXAgd2Fzbid0IGZvcmNlZAorICAgICAgICAgICAgLy8gdGltZXJzIGN1cnJlbnRseSB3aWxs
IGNhbGwgdGhlaXIgY29tcGxldGUgY2FsbGJhY2tzLCB3aGljaCB3aWxsIGRlcXVldWUKKyAgICAg
ICAgICAgIC8vIGJ1dCBvbmx5IGlmIHRoZXkgd2VyZSBnb3RvRW5kCisgICAgICAgICAgICBpZiAo
IGRlcXVldWUgfHwgIWdvdG9FbmQgKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5LmRlcXVldWUo
IHRoaXMsIHR5cGUgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorfSk7CisK
Ky8vIEdlbmVyYXRlIHBhcmFtZXRlcnMgdG8gY3JlYXRlIGEgc3RhbmRhcmQgYW5pbWF0aW9uCitm
dW5jdGlvbiBnZW5GeCggdHlwZSwgaW5jbHVkZVdpZHRoICkgeworICAgIHZhciB3aGljaCwKKyAg
ICAgICAgYXR0cnMgPSB7IGhlaWdodDogdHlwZSB9LAorICAgICAgICBpID0gMDsKKworICAgIC8v
IGlmIHdlIGluY2x1ZGUgd2lkdGgsIHN0ZXAgdmFsdWUgaXMgMSB0byBkbyBhbGwgY3NzRXhwYW5k
IHZhbHVlcywKKyAgICAvLyBpZiB3ZSBkb24ndCBpbmNsdWRlIHdpZHRoLCBzdGVwIHZhbHVlIGlz
IDIgdG8gc2tpcCBvdmVyIExlZnQgYW5kIFJpZ2h0CisgICAgaW5jbHVkZVdpZHRoID0gaW5jbHVk
ZVdpZHRoPyAxIDogMDsKKyAgICBmb3IoIDsgaSA8IDQgOyBpICs9IDIgLSBpbmNsdWRlV2lkdGgg
KSB7CisgICAgICAgIHdoaWNoID0gY3NzRXhwYW5kWyBpIF07CisgICAgICAgIGF0dHJzWyAibWFy
Z2luIiArIHdoaWNoIF0gPSBhdHRyc1sgInBhZGRpbmciICsgd2hpY2ggXSA9IHR5cGU7CisgICAg
fQorCisgICAgaWYgKCBpbmNsdWRlV2lkdGggKSB7CisgICAgICAgIGF0dHJzLm9wYWNpdHkgPSBh
dHRycy53aWR0aCA9IHR5cGU7CisgICAgfQorCisgICAgcmV0dXJuIGF0dHJzOworfQorCisvLyBH
ZW5lcmF0ZSBzaG9ydGN1dHMgZm9yIGN1c3RvbSBhbmltYXRpb25zCitqUXVlcnkuZWFjaCh7Cisg
ICAgc2xpZGVEb3duOiBnZW5GeCgic2hvdyIpLAorICAgIHNsaWRlVXA6IGdlbkZ4KCJoaWRlIiks
CisgICAgc2xpZGVUb2dnbGU6IGdlbkZ4KCJ0b2dnbGUiKSwKKyAgICBmYWRlSW46IHsgb3BhY2l0
eTogInNob3ciIH0sCisgICAgZmFkZU91dDogeyBvcGFjaXR5OiAiaGlkZSIgfSwKKyAgICBmYWRl
VG9nZ2xlOiB7IG9wYWNpdHk6ICJ0b2dnbGUiIH0KK30sIGZ1bmN0aW9uKCBuYW1lLCBwcm9wcyAp
IHsKKyAgICBqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxs
YmFjayApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuYW5pbWF0ZSggcHJvcHMsIHNwZWVkLCBlYXNp
bmcsIGNhbGxiYWNrICk7CisgICAgfTsKK30pOworCitqUXVlcnkuc3BlZWQgPSBmdW5jdGlvbigg
c3BlZWQsIGVhc2luZywgZm4gKSB7CisgICAgdmFyIG9wdCA9IHNwZWVkICYmIHR5cGVvZiBzcGVl
ZCA9PT0gIm9iamVjdCIgPyBqUXVlcnkuZXh0ZW5kKCB7fSwgc3BlZWQgKSA6IHsKKyAgICAgICAg
Y29tcGxldGU6IGZuIHx8ICFmbiAmJiBlYXNpbmcgfHwKKyAgICAgICAgICAgIGpRdWVyeS5pc0Z1
bmN0aW9uKCBzcGVlZCApICYmIHNwZWVkLAorICAgICAgICBkdXJhdGlvbjogc3BlZWQsCisgICAg
ICAgIGVhc2luZzogZm4gJiYgZWFzaW5nIHx8IGVhc2luZyAmJiAhalF1ZXJ5LmlzRnVuY3Rpb24o
IGVhc2luZyApICYmIGVhc2luZworICAgIH07CisKKyAgICBvcHQuZHVyYXRpb24gPSBqUXVlcnku
Zngub2ZmID8gMCA6IHR5cGVvZiBvcHQuZHVyYXRpb24gPT09ICJudW1iZXIiID8gb3B0LmR1cmF0
aW9uIDoKKyAgICAgICAgb3B0LmR1cmF0aW9uIGluIGpRdWVyeS5meC5zcGVlZHMgPyBqUXVlcnku
Znguc3BlZWRzWyBvcHQuZHVyYXRpb24gXSA6IGpRdWVyeS5meC5zcGVlZHMuX2RlZmF1bHQ7CisK
KyAgICAvLyBub3JtYWxpemUgb3B0LnF1ZXVlIC0gdHJ1ZS91bmRlZmluZWQvbnVsbCAtPiAiZngi
CisgICAgaWYgKCBvcHQucXVldWUgPT0gbnVsbCB8fCBvcHQucXVldWUgPT09IHRydWUgKSB7Cisg
ICAgICAgIG9wdC5xdWV1ZSA9ICJmeCI7CisgICAgfQorCisgICAgLy8gUXVldWVpbmcKKyAgICBv
cHQub2xkID0gb3B0LmNvbXBsZXRlOworCisgICAgb3B0LmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIG9wdC5vbGQgKSApIHsKKyAgICAgICAg
ICAgIG9wdC5vbGQuY2FsbCggdGhpcyApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBvcHQu
cXVldWUgKSB7CisgICAgICAgICAgICBqUXVlcnkuZGVxdWV1ZSggdGhpcywgb3B0LnF1ZXVlICk7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgcmV0dXJuIG9wdDsKK307CisKK2pRdWVyeS5lYXNp
bmcgPSB7CisgICAgbGluZWFyOiBmdW5jdGlvbiggcCApIHsKKyAgICAgICAgcmV0dXJuIHA7Cisg
ICAgfSwKKyAgICBzd2luZzogZnVuY3Rpb24oIHAgKSB7CisgICAgICAgIHJldHVybiAwLjUgLSBN
YXRoLmNvcyggcCpNYXRoLlBJICkgLyAyOworICAgIH0KK307CisKK2pRdWVyeS50aW1lcnMgPSBb
XTsKK2pRdWVyeS5meCA9IFR3ZWVuLnByb3RvdHlwZS5pbml0OworalF1ZXJ5LmZ4LnRpY2sgPSBm
dW5jdGlvbigpIHsKKyAgICB2YXIgdGltZXIsCisgICAgICAgIHRpbWVycyA9IGpRdWVyeS50aW1l
cnMsCisgICAgICAgIGkgPSAwOworCisgICAgZnhOb3cgPSBqUXVlcnkubm93KCk7CisKKyAgICBm
b3IgKCA7IGkgPCB0aW1lcnMubGVuZ3RoOyBpKysgKSB7CisgICAgICAgIHRpbWVyID0gdGltZXJz
WyBpIF07CisgICAgICAgIC8vIENoZWNrcyB0aGUgdGltZXIgaGFzIG5vdCBhbHJlYWR5IGJlZW4g
cmVtb3ZlZAorICAgICAgICBpZiAoICF0aW1lcigpICYmIHRpbWVyc1sgaSBdID09PSB0aW1lciAp
IHsKKyAgICAgICAgICAgIHRpbWVycy5zcGxpY2UoIGktLSwgMSApOworICAgICAgICB9CisgICAg
fQorCisgICAgaWYgKCAhdGltZXJzLmxlbmd0aCApIHsKKyAgICAgICAgalF1ZXJ5LmZ4LnN0b3Ao
KTsKKyAgICB9CisgICAgZnhOb3cgPSB1bmRlZmluZWQ7Cit9OworCitqUXVlcnkuZngudGltZXIg
PSBmdW5jdGlvbiggdGltZXIgKSB7CisgICAgaWYgKCB0aW1lcigpICYmIGpRdWVyeS50aW1lcnMu
cHVzaCggdGltZXIgKSAmJiAhdGltZXJJZCApIHsKKyAgICAgICAgdGltZXJJZCA9IHNldEludGVy
dmFsKCBqUXVlcnkuZngudGljaywgalF1ZXJ5LmZ4LmludGVydmFsICk7CisgICAgfQorfTsKKwor
alF1ZXJ5LmZ4LmludGVydmFsID0gMTM7CisKK2pRdWVyeS5meC5zdG9wID0gZnVuY3Rpb24oKSB7
CisgICAgY2xlYXJJbnRlcnZhbCggdGltZXJJZCApOworICAgIHRpbWVySWQgPSBudWxsOworfTsK
KworalF1ZXJ5LmZ4LnNwZWVkcyA9IHsKKyAgICBzbG93OiA2MDAsCisgICAgZmFzdDogMjAwLAor
ICAgIC8vIERlZmF1bHQgc3BlZWQKKyAgICBfZGVmYXVsdDogNDAwCit9OworCisvLyBCYWNrIENv
bXBhdCA8MS44IGV4dGVuc2lvbiBwb2ludAoralF1ZXJ5LmZ4LnN0ZXAgPSB7fTsKKworaWYgKCBq
UXVlcnkuZXhwciAmJiBqUXVlcnkuZXhwci5maWx0ZXJzICkgeworICAgIGpRdWVyeS5leHByLmZp
bHRlcnMuYW5pbWF0ZWQgPSBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVy
eS5ncmVwKGpRdWVyeS50aW1lcnMsIGZ1bmN0aW9uKCBmbiApIHsKKyAgICAgICAgICAgIHJldHVy
biBlbGVtID09PSBmbi5lbGVtOworICAgICAgICB9KS5sZW5ndGg7CisgICAgfTsKK30KK3ZhciBy
cm9vdCA9IC9eKD86Ym9keXxodG1sKSQvaTsKKworalF1ZXJ5LmZuLm9mZnNldCA9IGZ1bmN0aW9u
KCBvcHRpb25zICkgeworICAgIGlmICggYXJndW1lbnRzLmxlbmd0aCApIHsKKyAgICAgICAgcmV0
dXJuIG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/CisgICAgICAgICAgICB0aGlzIDoKKyAgICAgICAg
ICAgIHRoaXMuZWFjaChmdW5jdGlvbiggaSApIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkub2Zm
c2V0LnNldE9mZnNldCggdGhpcywgb3B0aW9ucywgaSApOworICAgICAgICAgICAgfSk7CisgICAg
fQorCisgICAgdmFyIGRvY0VsZW0sIGJvZHksIHdpbiwgY2xpZW50VG9wLCBjbGllbnRMZWZ0LCBz
Y3JvbGxUb3AsIHNjcm9sbExlZnQsCisgICAgICAgIGJveCA9IHsgdG9wOiAwLCBsZWZ0OiAwIH0s
CisgICAgICAgIGVsZW0gPSB0aGlzWyAwIF0sCisgICAgICAgIGRvYyA9IGVsZW0gJiYgZWxlbS5v
d25lckRvY3VtZW50OworCisgICAgaWYgKCAhZG9jICkgeworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKCAoYm9keSA9IGRvYy5ib2R5KSA9PT0gZWxlbSApIHsKKyAgICAgICAgcmV0
dXJuIGpRdWVyeS5vZmZzZXQuYm9keU9mZnNldCggZWxlbSApOworICAgIH0KKworICAgIGRvY0Vs
ZW0gPSBkb2MuZG9jdW1lbnRFbGVtZW50OworCisgICAgLy8gTWFrZSBzdXJlIGl0J3Mgbm90IGEg
ZGlzY29ubmVjdGVkIERPTSBub2RlCisgICAgaWYgKCAhalF1ZXJ5LmNvbnRhaW5zKCBkb2NFbGVt
LCBlbGVtICkgKSB7CisgICAgICAgIHJldHVybiBib3g7CisgICAgfQorCisgICAgLy8gSWYgd2Ug
ZG9uJ3QgaGF2ZSBnQkNSLCBqdXN0IHVzZSAwLDAgcmF0aGVyIHRoYW4gZXJyb3IKKyAgICAvLyBC
bGFja0JlcnJ5IDUsIGlPUyAzIChvcmlnaW5hbCBpUGhvbmUpCisgICAgaWYgKCB0eXBlb2YgZWxl
bS5nZXRCb3VuZGluZ0NsaWVudFJlY3QgIT09ICJ1bmRlZmluZWQiICkgeworICAgICAgICBib3gg
PSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworICAgIH0KKyAgICB3aW4gPSBnZXRXaW5k
b3coIGRvYyApOworICAgIGNsaWVudFRvcCAgPSBkb2NFbGVtLmNsaWVudFRvcCAgfHwgYm9keS5j
bGllbnRUb3AgIHx8IDA7CisgICAgY2xpZW50TGVmdCA9IGRvY0VsZW0uY2xpZW50TGVmdCB8fCBi
b2R5LmNsaWVudExlZnQgfHwgMDsKKyAgICBzY3JvbGxUb3AgID0gd2luLnBhZ2VZT2Zmc2V0IHx8
IGRvY0VsZW0uc2Nyb2xsVG9wOworICAgIHNjcm9sbExlZnQgPSB3aW4ucGFnZVhPZmZzZXQgfHwg
ZG9jRWxlbS5zY3JvbGxMZWZ0OworICAgIHJldHVybiB7CisgICAgICAgIHRvcDogYm94LnRvcCAg
KyBzY3JvbGxUb3AgIC0gY2xpZW50VG9wLAorICAgICAgICBsZWZ0OiBib3gubGVmdCArIHNjcm9s
bExlZnQgLSBjbGllbnRMZWZ0CisgICAgfTsKK307CisKK2pRdWVyeS5vZmZzZXQgPSB7CisKKyAg
ICBib2R5T2Zmc2V0OiBmdW5jdGlvbiggYm9keSApIHsKKyAgICAgICAgdmFyIHRvcCA9IGJvZHku
b2Zmc2V0VG9wLAorICAgICAgICAgICAgbGVmdCA9IGJvZHkub2Zmc2V0TGVmdDsKKworICAgICAg
ICBpZiAoIGpRdWVyeS5zdXBwb3J0LmRvZXNOb3RJbmNsdWRlTWFyZ2luSW5Cb2R5T2Zmc2V0ICkg
eworICAgICAgICAgICAgdG9wICArPSBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKGJvZHksICJtYXJn
aW5Ub3AiKSApIHx8IDA7CisgICAgICAgICAgICBsZWZ0ICs9IHBhcnNlRmxvYXQoIGpRdWVyeS5j
c3MoYm9keSwgIm1hcmdpbkxlZnQiKSApIHx8IDA7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4geyB0b3A6IHRvcCwgbGVmdDogbGVmdCB9OworICAgIH0sCisKKyAgICBzZXRPZmZzZXQ6IGZ1
bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBpICkgeworICAgICAgICB2YXIgcG9zaXRpb24gPSBqUXVl
cnkuY3NzKCBlbGVtLCAicG9zaXRpb24iICk7CisKKyAgICAgICAgLy8gc2V0IHBvc2l0aW9uIGZp
cnN0LCBpbi1jYXNlIHRvcC9sZWZ0IGFyZSBzZXQgZXZlbiBvbiBzdGF0aWMgZWxlbQorICAgICAg
ICBpZiAoIHBvc2l0aW9uID09PSAic3RhdGljIiApIHsKKyAgICAgICAgICAgIGVsZW0uc3R5bGUu
cG9zaXRpb24gPSAicmVsYXRpdmUiOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGN1ckVsZW0g
PSBqUXVlcnkoIGVsZW0gKSwKKyAgICAgICAgICAgIGN1ck9mZnNldCA9IGN1ckVsZW0ub2Zmc2V0
KCksCisgICAgICAgICAgICBjdXJDU1NUb3AgPSBqUXVlcnkuY3NzKCBlbGVtLCAidG9wIiApLAor
ICAgICAgICAgICAgY3VyQ1NTTGVmdCA9IGpRdWVyeS5jc3MoIGVsZW0sICJsZWZ0IiApLAorICAg
ICAgICAgICAgY2FsY3VsYXRlUG9zaXRpb24gPSAoIHBvc2l0aW9uID09PSAiYWJzb2x1dGUiIHx8
IHBvc2l0aW9uID09PSAiZml4ZWQiICkgJiYgalF1ZXJ5LmluQXJyYXkoImF1dG8iLCBbY3VyQ1NT
VG9wLCBjdXJDU1NMZWZ0XSkgPiAtMSwKKyAgICAgICAgICAgIHByb3BzID0ge30sIGN1clBvc2l0
aW9uID0ge30sIGN1clRvcCwgY3VyTGVmdDsKKworICAgICAgICAvLyBuZWVkIHRvIGJlIGFibGUg
dG8gY2FsY3VsYXRlIHBvc2l0aW9uIGlmIGVpdGhlciB0b3Agb3IgbGVmdCBpcyBhdXRvIGFuZCBw
b3NpdGlvbiBpcyBlaXRoZXIgYWJzb2x1dGUgb3IgZml4ZWQKKyAgICAgICAgaWYgKCBjYWxjdWxh
dGVQb3NpdGlvbiApIHsKKyAgICAgICAgICAgIGN1clBvc2l0aW9uID0gY3VyRWxlbS5wb3NpdGlv
bigpOworICAgICAgICAgICAgY3VyVG9wID0gY3VyUG9zaXRpb24udG9wOworICAgICAgICAgICAg
Y3VyTGVmdCA9IGN1clBvc2l0aW9uLmxlZnQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBjdXJUb3AgPSBwYXJzZUZsb2F0KCBjdXJDU1NUb3AgKSB8fCAwOworICAgICAgICAgICAgY3Vy
TGVmdCA9IHBhcnNlRmxvYXQoIGN1ckNTU0xlZnQgKSB8fCAwOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggb3B0aW9ucyApICkgeworICAgICAgICAgICAgb3B0
aW9ucyA9IG9wdGlvbnMuY2FsbCggZWxlbSwgaSwgY3VyT2Zmc2V0ICk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoIG9wdGlvbnMudG9wICE9IG51bGwgKSB7CisgICAgICAgICAgICBwcm9wcy50
b3AgPSAoIG9wdGlvbnMudG9wIC0gY3VyT2Zmc2V0LnRvcCApICsgY3VyVG9wOworICAgICAgICB9
CisgICAgICAgIGlmICggb3B0aW9ucy5sZWZ0ICE9IG51bGwgKSB7CisgICAgICAgICAgICBwcm9w
cy5sZWZ0ID0gKCBvcHRpb25zLmxlZnQgLSBjdXJPZmZzZXQubGVmdCApICsgY3VyTGVmdDsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICggInVzaW5nIiBpbiBvcHRpb25zICkgeworICAgICAgICAg
ICAgb3B0aW9ucy51c2luZy5jYWxsKCBlbGVtLCBwcm9wcyApOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgY3VyRWxlbS5jc3MoIHByb3BzICk7CisgICAgICAgIH0KKyAgICB9Cit9Owor
CisKK2pRdWVyeS5mbi5leHRlbmQoeworCisgICAgcG9zaXRpb246IGZ1bmN0aW9uKCkgeworICAg
ICAgICBpZiAoICF0aGlzWzBdICkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgdmFyIGVsZW0gPSB0aGlzWzBdLAorCisgICAgICAgIC8vIEdldCAqcmVhbCogb2Zm
c2V0UGFyZW50CisgICAgICAgIG9mZnNldFBhcmVudCA9IHRoaXMub2Zmc2V0UGFyZW50KCksCisK
KyAgICAgICAgLy8gR2V0IGNvcnJlY3Qgb2Zmc2V0cworICAgICAgICBvZmZzZXQgICAgICAgPSB0
aGlzLm9mZnNldCgpLAorICAgICAgICBwYXJlbnRPZmZzZXQgPSBycm9vdC50ZXN0KG9mZnNldFBh
cmVudFswXS5ub2RlTmFtZSkgPyB7IHRvcDogMCwgbGVmdDogMCB9IDogb2Zmc2V0UGFyZW50Lm9m
ZnNldCgpOworCisgICAgICAgIC8vIFN1YnRyYWN0IGVsZW1lbnQgbWFyZ2lucworICAgICAgICAv
LyBub3RlOiB3aGVuIGFuIGVsZW1lbnQgaGFzIG1hcmdpbjogYXV0byB0aGUgb2Zmc2V0TGVmdCBh
bmQgbWFyZ2luTGVmdAorICAgICAgICAvLyBhcmUgdGhlIHNhbWUgaW4gU2FmYXJpIGNhdXNpbmcg
b2Zmc2V0LmxlZnQgdG8gaW5jb3JyZWN0bHkgYmUgMAorICAgICAgICBvZmZzZXQudG9wICAtPSBw
YXJzZUZsb2F0KCBqUXVlcnkuY3NzKGVsZW0sICJtYXJnaW5Ub3AiKSApIHx8IDA7CisgICAgICAg
IG9mZnNldC5sZWZ0IC09IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoZWxlbSwgIm1hcmdpbkxlZnQi
KSApIHx8IDA7CisKKyAgICAgICAgLy8gQWRkIG9mZnNldFBhcmVudCBib3JkZXJzCisgICAgICAg
IHBhcmVudE9mZnNldC50b3AgICs9IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3Mob2Zmc2V0UGFyZW50
WzBdLCAiYm9yZGVyVG9wV2lkdGgiKSApIHx8IDA7CisgICAgICAgIHBhcmVudE9mZnNldC5sZWZ0
ICs9IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3Mob2Zmc2V0UGFyZW50WzBdLCAiYm9yZGVyTGVmdFdp
ZHRoIikgKSB8fCAwOworCisgICAgICAgIC8vIFN1YnRyYWN0IHRoZSB0d28gb2Zmc2V0cworICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgdG9wOiAgb2Zmc2V0LnRvcCAgLSBwYXJlbnRPZmZz
ZXQudG9wLAorICAgICAgICAgICAgbGVmdDogb2Zmc2V0LmxlZnQgLSBwYXJlbnRPZmZzZXQubGVm
dAorICAgICAgICB9OworICAgIH0sCisKKyAgICBvZmZzZXRQYXJlbnQ6IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgb2Zm
c2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQgfHwgZG9jdW1lbnQuYm9keTsKKyAgICAgICAg
ICAgIHdoaWxlICggb2Zmc2V0UGFyZW50ICYmICghcnJvb3QudGVzdChvZmZzZXRQYXJlbnQubm9k
ZU5hbWUpICYmIGpRdWVyeS5jc3Mob2Zmc2V0UGFyZW50LCAicG9zaXRpb24iKSA9PT0gInN0YXRp
YyIpICkgeworICAgICAgICAgICAgICAgIG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5vZmZz
ZXRQYXJlbnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gb2Zmc2V0UGFyZW50
IHx8IGRvY3VtZW50LmJvZHk7CisgICAgICAgIH0pOworICAgIH0KK30pOworCisKKy8vIENyZWF0
ZSBzY3JvbGxMZWZ0IGFuZCBzY3JvbGxUb3AgbWV0aG9kcworalF1ZXJ5LmVhY2goIHtzY3JvbGxM
ZWZ0OiAicGFnZVhPZmZzZXQiLCBzY3JvbGxUb3A6ICJwYWdlWU9mZnNldCJ9LCBmdW5jdGlvbigg
bWV0aG9kLCBwcm9wICkgeworICAgIHZhciB0b3AgPSAvWS8udGVzdCggcHJvcCApOworCisgICAg
alF1ZXJ5LmZuWyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB2YWwgKSB7CisgICAgICAgIHJldHVybiBq
UXVlcnkuYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbWV0aG9kLCB2YWwgKSB7CisgICAg
ICAgICAgICB2YXIgd2luID0gZ2V0V2luZG93KCBlbGVtICk7CisKKyAgICAgICAgICAgIGlmICgg
dmFsID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHdpbiA/IChwcm9w
IGluIHdpbikgPyB3aW5bIHByb3AgXSA6CisgICAgICAgICAgICAgICAgICAgIHdpbi5kb2N1bWVu
dC5kb2N1bWVudEVsZW1lbnRbIG1ldGhvZCBdIDoKKyAgICAgICAgICAgICAgICAgICAgZWxlbVsg
bWV0aG9kIF07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggd2luICkgeworICAg
ICAgICAgICAgICAgIHdpbi5zY3JvbGxUbygKKyAgICAgICAgICAgICAgICAgICAgIXRvcCA/IHZh
bCA6IGpRdWVyeSggd2luICkuc2Nyb2xsTGVmdCgpLAorICAgICAgICAgICAgICAgICAgICAgdG9w
ID8gdmFsIDogalF1ZXJ5KCB3aW4gKS5zY3JvbGxUb3AoKQorICAgICAgICAgICAgICAgICk7CisK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZWxlbVsgbWV0aG9kIF0gPSB2
YWw7CisgICAgICAgICAgICB9CisgICAgICAgIH0sIG1ldGhvZCwgdmFsLCBhcmd1bWVudHMubGVu
Z3RoLCBudWxsICk7CisgICAgfTsKK30pOworCitmdW5jdGlvbiBnZXRXaW5kb3coIGVsZW0gKSB7
CisgICAgcmV0dXJuIGpRdWVyeS5pc1dpbmRvdyggZWxlbSApID8KKyAgICAgICAgZWxlbSA6Cisg
ICAgICAgIGVsZW0ubm9kZVR5cGUgPT09IDkgPworICAgICAgICAgICAgZWxlbS5kZWZhdWx0Vmll
dyB8fCBlbGVtLnBhcmVudFdpbmRvdyA6CisgICAgICAgICAgICBmYWxzZTsKK30KKy8vIENyZWF0
ZSBpbm5lckhlaWdodCwgaW5uZXJXaWR0aCwgaGVpZ2h0LCB3aWR0aCwgb3V0ZXJIZWlnaHQgYW5k
IG91dGVyV2lkdGggbWV0aG9kcworalF1ZXJ5LmVhY2goIHsgSGVpZ2h0OiAiaGVpZ2h0IiwgV2lk
dGg6ICJ3aWR0aCIgfSwgZnVuY3Rpb24oIG5hbWUsIHR5cGUgKSB7CisgICAgalF1ZXJ5LmVhY2go
IHsgcGFkZGluZzogImlubmVyIiArIG5hbWUsIGNvbnRlbnQ6IHR5cGUsICIiOiAib3V0ZXIiICsg
bmFtZSB9LCBmdW5jdGlvbiggZGVmYXVsdEV4dHJhLCBmdW5jTmFtZSApIHsKKyAgICAgICAgLy8g
bWFyZ2luIGlzIG9ubHkgZm9yIG91dGVySGVpZ2h0LCBvdXRlcldpZHRoCisgICAgICAgIGpRdWVy
eS5mblsgZnVuY05hbWUgXSA9IGZ1bmN0aW9uKCBtYXJnaW4sIHZhbHVlICkgeworICAgICAgICAg
ICAgdmFyIGNoYWluYWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggJiYgKCBkZWZhdWx0RXh0cmEgfHwg
dHlwZW9mIG1hcmdpbiAhPT0gImJvb2xlYW4iICksCisgICAgICAgICAgICAgICAgZXh0cmEgPSBk
ZWZhdWx0RXh0cmEgfHwgKCBtYXJnaW4gPT09IHRydWUgfHwgdmFsdWUgPT09IHRydWUgPyAibWFy
Z2luIiA6ICJib3JkZXIiICk7CisKKyAgICAgICAgICAgIHJldHVybiBqUXVlcnkuYWNjZXNzKCB0
aGlzLCBmdW5jdGlvbiggZWxlbSwgdHlwZSwgdmFsdWUgKSB7CisgICAgICAgICAgICAgICAgdmFy
IGRvYzsKKworICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzV2luZG93KCBlbGVtICkgKSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIEFzIG9mIDUvOC8yMDEyIHRoaXMgd2lsbCB5aWVsZCBp
bmNvcnJlY3QgcmVzdWx0cyBmb3IgTW9iaWxlIFNhZmFyaSwgYnV0IHRoZXJlCisgICAgICAgICAg
ICAgICAgICAgIC8vIGlzbid0IGEgd2hvbGUgbG90IHdlIGNhbiBkby4gU2VlIHB1bGwgcmVxdWVz
dCBhdCB0aGlzIFVSTCBmb3IgZGlzY3Vzc2lvbjoKKyAgICAgICAgICAgICAgICAgICAgLy8gaHR0
cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvcHVsbC83NjQKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVsZW0uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyAiY2xpZW50IiArIG5hbWUg
XTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBHZXQgZG9jdW1lbnQg
d2lkdGggb3IgaGVpZ2h0CisgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSA5
ICkgeworICAgICAgICAgICAgICAgICAgICBkb2MgPSBlbGVtLmRvY3VtZW50RWxlbWVudDsKKwor
ICAgICAgICAgICAgICAgICAgICAvLyBFaXRoZXIgc2Nyb2xsW1dpZHRoL0hlaWdodF0gb3Igb2Zm
c2V0W1dpZHRoL0hlaWdodF0gb3IgY2xpZW50W1dpZHRoL0hlaWdodF0sIHdoaWNoZXZlciBpcyBn
cmVhdGVzdAorICAgICAgICAgICAgICAgICAgICAvLyB1bmZvcnR1bmF0ZWx5LCB0aGlzIGNhdXNl
cyBidWcgIzM4MzggaW4gSUU2Lzggb25seSwgYnV0IHRoZXJlIGlzIGN1cnJlbnRseSBubyBnb29k
LCBzbWFsbCB3YXkgdG8gZml4IGl0LgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5t
YXgoCisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmJvZHlbICJzY3JvbGwiICsgbmFtZSBd
LCBkb2NbICJzY3JvbGwiICsgbmFtZSBdLAorICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5i
b2R5WyAib2Zmc2V0IiArIG5hbWUgXSwgZG9jWyAib2Zmc2V0IiArIG5hbWUgXSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRvY1sgImNsaWVudCIgKyBuYW1lIF0KKyAgICAgICAgICAgICAgICAg
ICAgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUg
PT09IHVuZGVmaW5lZCA/CisgICAgICAgICAgICAgICAgICAgIC8vIEdldCB3aWR0aCBvciBoZWln
aHQgb24gdGhlIGVsZW1lbnQsIHJlcXVlc3RpbmcgYnV0IG5vdCBmb3JjaW5nIHBhcnNlRmxvYXQK
KyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmNzcyggZWxlbSwgdHlwZSwgdmFsdWUsIGV4dHJh
ICkgOgorCisgICAgICAgICAgICAgICAgICAgIC8vIFNldCB3aWR0aCBvciBoZWlnaHQgb24gdGhl
IGVsZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnN0eWxlKCBlbGVtLCB0eXBlLCB2
YWx1ZSwgZXh0cmEgKTsKKyAgICAgICAgICAgIH0sIHR5cGUsIGNoYWluYWJsZSA/IG1hcmdpbiA6
IHVuZGVmaW5lZCwgY2hhaW5hYmxlLCBudWxsICk7CisgICAgICAgIH07CisgICAgfSk7Cit9KTsK
Ky8vIEV4cG9zZSBqUXVlcnkgdG8gdGhlIGdsb2JhbCBvYmplY3QKK3dpbmRvdy5qUXVlcnkgPSB3
aW5kb3cuJCA9IGpRdWVyeTsKKworLy8gRXhwb3NlIGpRdWVyeSBhcyBhbiBBTUQgbW9kdWxlLCBi
dXQgb25seSBmb3IgQU1EIGxvYWRlcnMgdGhhdAorLy8gdW5kZXJzdGFuZCB0aGUgaXNzdWVzIHdp
dGggbG9hZGluZyBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBqUXVlcnkKKy8vIGluIGEgcGFnZSB0aGF0
IGFsbCBtaWdodCBjYWxsIGRlZmluZSgpLiBUaGUgbG9hZGVyIHdpbGwgaW5kaWNhdGUKKy8vIHRo
ZXkgaGF2ZSBzcGVjaWFsIGFsbG93YW5jZXMgZm9yIG11bHRpcGxlIGpRdWVyeSB2ZXJzaW9ucyBi
eQorLy8gc3BlY2lmeWluZyBkZWZpbmUuYW1kLmpRdWVyeSA9IHRydWUuIFJlZ2lzdGVyIGFzIGEg
bmFtZWQgbW9kdWxlLAorLy8gc2luY2UgalF1ZXJ5IGNhbiBiZSBjb25jYXRlbmF0ZWQgd2l0aCBv
dGhlciBmaWxlcyB0aGF0IG1heSB1c2UgZGVmaW5lLAorLy8gYnV0IG5vdCB1c2UgYSBwcm9wZXIg
Y29uY2F0ZW5hdGlvbiBzY3JpcHQgdGhhdCB1bmRlcnN0YW5kcyBhbm9ueW1vdXMKKy8vIEFNRCBt
b2R1bGVzLiBBIG5hbWVkIEFNRCBpcyBzYWZlc3QgYW5kIG1vc3Qgcm9idXN0IHdheSB0byByZWdp
c3Rlci4KKy8vIExvd2VyY2FzZSBqcXVlcnkgaXMgdXNlZCBiZWNhdXNlIEFNRCBtb2R1bGUgbmFt
ZXMgYXJlIGRlcml2ZWQgZnJvbQorLy8gZmlsZSBuYW1lcywgYW5kIGpRdWVyeSBpcyBub3JtYWxs
eSBkZWxpdmVyZWQgaW4gYSBsb3dlcmNhc2UgZmlsZSBuYW1lLgorLy8gRG8gdGhpcyBhZnRlciBj
cmVhdGluZyB0aGUgZ2xvYmFsIHNvIHRoYXQgaWYgYW4gQU1EIG1vZHVsZSB3YW50cyB0byBjYWxs
CisvLyBub0NvbmZsaWN0IHRvIGhpZGUgdGhpcyB2ZXJzaW9uIG9mIGpRdWVyeSwgaXQgd2lsbCB3
b3JrLgoraWYgKCB0eXBlb2YgZGVmaW5lID09PSAiZnVuY3Rpb24iICYmIGRlZmluZS5hbWQgJiYg
ZGVmaW5lLmFtZC5qUXVlcnkgKSB7CisgICAgZGVmaW5lKCAianF1ZXJ5IiwgW10sIGZ1bmN0aW9u
ICgpIHsgcmV0dXJuIGpRdWVyeTsgfSApOworfQorCit9KSggd2luZG93ICk7CmRpZmYgLS1naXQg
YS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9mbGln
aHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2pxdWVyeS9qcXVlcnkubWluLmpzIGIvV2Vic2l0
ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvZmxpZ2h0anMtZXhh
bXBsZS1hcHAvY29tcG9uZW50cy9qcXVlcnkvanF1ZXJ5Lm1pbi5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zODgz
Nzc5NTI3OWM1ZWIyODFlOThjZTYwMTc5OThiOTkzMDI2NTE4Ci0tLSAvZGV2L251bGwKKysrIGIv
V2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvZmxpZ2h0
anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9qcXVlcnkvanF1ZXJ5Lm1pbi5qcwpAQCAtMCwwICsx
LDIgQEAKKy8qISBqUXVlcnkgdjEuOC4zIGpxdWVyeS5jb20gfCBqcXVlcnkub3JnL2xpY2Vuc2Ug
Ki8KKyhmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIF8oZSl7dmFyIHQ9TVtlXT17fTtyZXR1cm4gdi5l
YWNoKGUuc3BsaXQoeSksZnVuY3Rpb24oZSxuKXt0W25dPSEwfSksdH1mdW5jdGlvbiBIKGUsbixy
KXtpZihyPT09dCYmZS5ub2RlVHlwZT09PTEpe3ZhciBpPSJkYXRhLSIrbi5yZXBsYWNlKFAsIi0k
MSIpLnRvTG93ZXJDYXNlKCk7cj1lLmdldEF0dHJpYnV0ZShpKTtpZih0eXBlb2Ygcj09InN0cmlu
ZyIpe3RyeXtyPXI9PT0idHJ1ZSI/ITA6cj09PSJmYWxzZSI/ITE6cj09PSJudWxsIj9udWxsOity
KyIiPT09cj8rcjpELnRlc3Qocik/di5wYXJzZUpTT04ocik6cn1jYXRjaChzKXt9di5kYXRhKGUs
bixyKX1lbHNlIHI9dH1yZXR1cm4gcn1mdW5jdGlvbiBCKGUpe3ZhciB0O2Zvcih0IGluIGUpe2lm
KHQ9PT0iZGF0YSImJnYuaXNFbXB0eU9iamVjdChlW3RdKSljb250aW51ZTtpZih0IT09InRvSlNP
TiIpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gZXQoKXtyZXR1cm4hMX1mdW5jdGlvbiB0dCgp
e3JldHVybiEwfWZ1bmN0aW9uIHV0KGUpe3JldHVybiFlfHwhZS5wYXJlbnROb2RlfHxlLnBhcmVu
dE5vZGUubm9kZVR5cGU9PT0xMX1mdW5jdGlvbiBhdChlLHQpe2RvIGU9ZVt0XTt3aGlsZShlJiZl
Lm5vZGVUeXBlIT09MSk7cmV0dXJuIGV9ZnVuY3Rpb24gZnQoZSx0LG4pe3Q9dHx8MDtpZih2Lmlz
RnVuY3Rpb24odCkpcmV0dXJuIHYuZ3JlcChlLGZ1bmN0aW9uKGUscil7dmFyIGk9ISF0LmNhbGwo
ZSxyLGUpO3JldHVybiBpPT09bn0pO2lmKHQubm9kZVR5cGUpcmV0dXJuIHYuZ3JlcChlLGZ1bmN0
aW9uKGUscil7cmV0dXJuIGU9PT10PT09bn0pO2lmKHR5cGVvZiB0PT0ic3RyaW5nIil7dmFyIHI9
di5ncmVwKGUsZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9kZVR5cGU9PT0xfSk7aWYoaXQudGVzdCh0
KSlyZXR1cm4gdi5maWx0ZXIodCxyLCFuKTt0PXYuZmlsdGVyKHQscil9cmV0dXJuIHYuZ3JlcChl
LGZ1bmN0aW9uKGUscil7cmV0dXJuIHYuaW5BcnJheShlLHQpPj0wPT09bn0pfWZ1bmN0aW9uIGx0
KGUpe3ZhciB0PWN0LnNwbGl0KCJ8Iiksbj1lLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtpZihu
LmNyZWF0ZUVsZW1lbnQpd2hpbGUodC5sZW5ndGgpbi5jcmVhdGVFbGVtZW50KHQucG9wKCkpO3Jl
dHVybiBufWZ1bmN0aW9uIEx0KGUsdCl7cmV0dXJuIGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUodClb
MF18fGUuYXBwZW5kQ2hpbGQoZS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCkpfWZ1bmN0
aW9uIEF0KGUsdCl7aWYodC5ub2RlVHlwZSE9PTF8fCF2Lmhhc0RhdGEoZSkpcmV0dXJuO3ZhciBu
LHIsaSxzPXYuX2RhdGEoZSksbz12Ll9kYXRhKHQscyksdT1zLmV2ZW50cztpZih1KXtkZWxldGUg
by5oYW5kbGUsby5ldmVudHM9e307Zm9yKG4gaW4gdSlmb3Iocj0wLGk9dVtuXS5sZW5ndGg7cjxp
O3IrKyl2LmV2ZW50LmFkZCh0LG4sdVtuXVtyXSl9by5kYXRhJiYoby5kYXRhPXYuZXh0ZW5kKHt9
LG8uZGF0YSkpfWZ1bmN0aW9uIE90KGUsdCl7dmFyIG47aWYodC5ub2RlVHlwZSE9PTEpcmV0dXJu
O3QuY2xlYXJBdHRyaWJ1dGVzJiZ0LmNsZWFyQXR0cmlidXRlcygpLHQubWVyZ2VBdHRyaWJ1dGVz
JiZ0Lm1lcmdlQXR0cmlidXRlcyhlKSxuPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxuPT09Im9i
amVjdCI/KHQucGFyZW50Tm9kZSYmKHQub3V0ZXJIVE1MPWUub3V0ZXJIVE1MKSx2LnN1cHBvcnQu
aHRtbDVDbG9uZSYmZS5pbm5lckhUTUwmJiF2LnRyaW0odC5pbm5lckhUTUwpJiYodC5pbm5lckhU
TUw9ZS5pbm5lckhUTUwpKTpuPT09ImlucHV0IiYmRXQudGVzdChlLnR5cGUpPyh0LmRlZmF1bHRD
aGVja2VkPXQuY2hlY2tlZD1lLmNoZWNrZWQsdC52YWx1ZSE9PWUudmFsdWUmJih0LnZhbHVlPWUu
dmFsdWUpKTpuPT09Im9wdGlvbiI/dC5zZWxlY3RlZD1lLmRlZmF1bHRTZWxlY3RlZDpuPT09Imlu
cHV0Inx8bj09PSJ0ZXh0YXJlYSI/dC5kZWZhdWx0VmFsdWU9ZS5kZWZhdWx0VmFsdWU6bj09PSJz
Y3JpcHQiJiZ0LnRleHQhPT1lLnRleHQmJih0LnRleHQ9ZS50ZXh0KSx0LnJlbW92ZUF0dHJpYnV0
ZSh2LmV4cGFuZG8pfWZ1bmN0aW9uIE10KGUpe3JldHVybiB0eXBlb2YgZS5nZXRFbGVtZW50c0J5
VGFnTmFtZSE9InVuZGVmaW5lZCI/ZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOnR5cGVvZiBl
LnF1ZXJ5U2VsZWN0b3JBbGwhPSJ1bmRlZmluZWQiP2UucXVlcnlTZWxlY3RvckFsbCgiKiIpOltd
fWZ1bmN0aW9uIF90KGUpe0V0LnRlc3QoZS50eXBlKSYmKGUuZGVmYXVsdENoZWNrZWQ9ZS5jaGVj
a2VkKX1mdW5jdGlvbiBRdChlLHQpe2lmKHQgaW4gZSlyZXR1cm4gdDt2YXIgbj10LmNoYXJBdCgw
KS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSkscj10LGk9SnQubGVuZ3RoO3doaWxlKGktLSl7dD1K
dFtpXStuO2lmKHQgaW4gZSlyZXR1cm4gdH1yZXR1cm4gcn1mdW5jdGlvbiBHdChlLHQpe3JldHVy
biBlPXR8fGUsdi5jc3MoZSwiZGlzcGxheSIpPT09Im5vbmUifHwhdi5jb250YWlucyhlLm93bmVy
RG9jdW1lbnQsZSl9ZnVuY3Rpb24gWXQoZSx0KXt2YXIgbixyLGk9W10scz0wLG89ZS5sZW5ndGg7
Zm9yKDtzPG87cysrKXtuPWVbc107aWYoIW4uc3R5bGUpY29udGludWU7aVtzXT12Ll9kYXRhKG4s
Im9sZGRpc3BsYXkiKSx0PyghaVtzXSYmbi5zdHlsZS5kaXNwbGF5PT09Im5vbmUiJiYobi5zdHls
ZS5kaXNwbGF5PSIiKSxuLnN0eWxlLmRpc3BsYXk9PT0iIiYmR3QobikmJihpW3NdPXYuX2RhdGEo
biwib2xkZGlzcGxheSIsbm4obi5ub2RlTmFtZSkpKSk6KHI9RHQobiwiZGlzcGxheSIpLCFpW3Nd
JiZyIT09Im5vbmUiJiZ2Ll9kYXRhKG4sIm9sZGRpc3BsYXkiLHIpKX1mb3Iocz0wO3M8bztzKysp
e249ZVtzXTtpZighbi5zdHlsZSljb250aW51ZTtpZighdHx8bi5zdHlsZS5kaXNwbGF5PT09Im5v
bmUifHxuLnN0eWxlLmRpc3BsYXk9PT0iIiluLnN0eWxlLmRpc3BsYXk9dD9pW3NdfHwiIjoibm9u
ZSJ9cmV0dXJuIGV9ZnVuY3Rpb24gWnQoZSx0LG4pe3ZhciByPVJ0LmV4ZWModCk7cmV0dXJuIHI/
TWF0aC5tYXgoMCxyWzFdLShufHwwKSkrKHJbMl18fCJweCIpOnR9ZnVuY3Rpb24gZW4oZSx0LG4s
cil7dmFyIGk9bj09PShyPyJib3JkZXIiOiJjb250ZW50Iik/NDp0PT09IndpZHRoIj8xOjAscz0w
O2Zvcig7aTw0O2krPTIpbj09PSJtYXJnaW4iJiYocys9di5jc3MoZSxuKyR0W2ldLCEwKSkscj8o
bj09PSJjb250ZW50IiYmKHMtPXBhcnNlRmxvYXQoRHQoZSwicGFkZGluZyIrJHRbaV0pKXx8MCks
biE9PSJtYXJnaW4iJiYocy09cGFyc2VGbG9hdChEdChlLCJib3JkZXIiKyR0W2ldKyJXaWR0aCIp
KXx8MCkpOihzKz1wYXJzZUZsb2F0KER0KGUsInBhZGRpbmciKyR0W2ldKSl8fDAsbiE9PSJwYWRk
aW5nIiYmKHMrPXBhcnNlRmxvYXQoRHQoZSwiYm9yZGVyIiskdFtpXSsiV2lkdGgiKSl8fDApKTty
ZXR1cm4gc31mdW5jdGlvbiB0bihlLHQsbil7dmFyIHI9dD09PSJ3aWR0aCI/ZS5vZmZzZXRXaWR0
aDplLm9mZnNldEhlaWdodCxpPSEwLHM9di5zdXBwb3J0LmJveFNpemluZyYmdi5jc3MoZSwiYm94
U2l6aW5nIik9PT0iYm9yZGVyLWJveCI7aWYocjw9MHx8cj09bnVsbCl7cj1EdChlLHQpO2lmKHI8
MHx8cj09bnVsbClyPWUuc3R5bGVbdF07aWYoVXQudGVzdChyKSlyZXR1cm4gcjtpPXMmJih2LnN1
cHBvcnQuYm94U2l6aW5nUmVsaWFibGV8fHI9PT1lLnN0eWxlW3RdKSxyPXBhcnNlRmxvYXQocil8
fDB9cmV0dXJuIHIrZW4oZSx0LG58fChzPyJib3JkZXIiOiJjb250ZW50IiksaSkrInB4In1mdW5j
dGlvbiBubihlKXtpZihXdFtlXSlyZXR1cm4gV3RbZV07dmFyIHQ9digiPCIrZSsiPiIpLmFwcGVu
ZFRvKGkuYm9keSksbj10LmNzcygiZGlzcGxheSIpO3QucmVtb3ZlKCk7aWYobj09PSJub25lInx8
bj09PSIiKXtQdD1pLmJvZHkuYXBwZW5kQ2hpbGQoUHR8fHYuZXh0ZW5kKGkuY3JlYXRlRWxlbWVu
dCgiaWZyYW1lIikse2ZyYW1lQm9yZGVyOjAsd2lkdGg6MCxoZWlnaHQ6MH0pKTtpZighSHR8fCFQ
dC5jcmVhdGVFbGVtZW50KUh0PShQdC5jb250ZW50V2luZG93fHxQdC5jb250ZW50RG9jdW1lbnQp
LmRvY3VtZW50LEh0LndyaXRlKCI8IWRvY3R5cGUgaHRtbD48aHRtbD48Ym9keT4iKSxIdC5jbG9z
ZSgpO3Q9SHQuYm9keS5hcHBlbmRDaGlsZChIdC5jcmVhdGVFbGVtZW50KGUpKSxuPUR0KHQsImRp
c3BsYXkiKSxpLmJvZHkucmVtb3ZlQ2hpbGQoUHQpfXJldHVybiBXdFtlXT1uLG59ZnVuY3Rpb24g
Zm4oZSx0LG4scil7dmFyIGk7aWYodi5pc0FycmF5KHQpKXYuZWFjaCh0LGZ1bmN0aW9uKHQsaSl7
bnx8c24udGVzdChlKT9yKGUsaSk6Zm4oZSsiWyIrKHR5cGVvZiBpPT0ib2JqZWN0Ij90OiIiKSsi
XSIsaSxuLHIpfSk7ZWxzZSBpZighbiYmdi50eXBlKHQpPT09Im9iamVjdCIpZm9yKGkgaW4gdClm
bihlKyJbIitpKyJdIix0W2ldLG4scik7ZWxzZSByKGUsdCl9ZnVuY3Rpb24gQ24oZSl7cmV0dXJu
IGZ1bmN0aW9uKHQsbil7dHlwZW9mIHQhPSJzdHJpbmciJiYobj10LHQ9IioiKTt2YXIgcixpLHMs
bz10LnRvTG93ZXJDYXNlKCkuc3BsaXQoeSksdT0wLGE9by5sZW5ndGg7aWYodi5pc0Z1bmN0aW9u
KG4pKWZvcig7dTxhO3UrKylyPW9bdV0scz0vXlwrLy50ZXN0KHIpLHMmJihyPXIuc3Vic3RyKDEp
fHwiKiIpLGk9ZVtyXT1lW3JdfHxbXSxpW3M/InVuc2hpZnQiOiJwdXNoIl0obil9fWZ1bmN0aW9u
IGtuKGUsbixyLGkscyxvKXtzPXN8fG4uZGF0YVR5cGVzWzBdLG89b3x8e30sb1tzXT0hMDt2YXIg
dSxhPWVbc10sZj0wLGw9YT9hLmxlbmd0aDowLGM9ZT09PVNuO2Zvcig7ZjxsJiYoY3x8IXUpO2Yr
Kyl1PWFbZl0obixyLGkpLHR5cGVvZiB1PT0ic3RyaW5nIiYmKCFjfHxvW3VdP3U9dDoobi5kYXRh
VHlwZXMudW5zaGlmdCh1KSx1PWtuKGUsbixyLGksdSxvKSkpO3JldHVybihjfHwhdSkmJiFvWyIq
Il0mJih1PWtuKGUsbixyLGksIioiLG8pKSx1fWZ1bmN0aW9uIExuKGUsbil7dmFyIHIsaSxzPXYu
YWpheFNldHRpbmdzLmZsYXRPcHRpb25zfHx7fTtmb3IociBpbiBuKW5bcl0hPT10JiYoKHNbcl0/
ZTppfHwoaT17fSkpW3JdPW5bcl0pO2kmJnYuZXh0ZW5kKCEwLGUsaSl9ZnVuY3Rpb24gQW4oZSxu
LHIpe3ZhciBpLHMsbyx1LGE9ZS5jb250ZW50cyxmPWUuZGF0YVR5cGVzLGw9ZS5yZXNwb25zZUZp
ZWxkcztmb3IocyBpbiBsKXMgaW4gciYmKG5bbFtzXV09cltzXSk7d2hpbGUoZlswXT09PSIqIilm
LnNoaWZ0KCksaT09PXQmJihpPWUubWltZVR5cGV8fG4uZ2V0UmVzcG9uc2VIZWFkZXIoImNvbnRl
bnQtdHlwZSIpKTtpZihpKWZvcihzIGluIGEpaWYoYVtzXSYmYVtzXS50ZXN0KGkpKXtmLnVuc2hp
ZnQocyk7YnJlYWt9aWYoZlswXWluIHIpbz1mWzBdO2Vsc2V7Zm9yKHMgaW4gcil7aWYoIWZbMF18
fGUuY29udmVydGVyc1tzKyIgIitmWzBdXSl7bz1zO2JyZWFrfXV8fCh1PXMpfW89b3x8dX1pZihv
KXJldHVybiBvIT09ZlswXSYmZi51bnNoaWZ0KG8pLHJbb119ZnVuY3Rpb24gT24oZSx0KXt2YXIg
bixyLGkscyxvPWUuZGF0YVR5cGVzLnNsaWNlKCksdT1vWzBdLGE9e30sZj0wO2UuZGF0YUZpbHRl
ciYmKHQ9ZS5kYXRhRmlsdGVyKHQsZS5kYXRhVHlwZSkpO2lmKG9bMV0pZm9yKG4gaW4gZS5jb252
ZXJ0ZXJzKWFbbi50b0xvd2VyQ2FzZSgpXT1lLmNvbnZlcnRlcnNbbl07Zm9yKDtpPW9bKytmXTsp
aWYoaSE9PSIqIil7aWYodSE9PSIqIiYmdSE9PWkpe249YVt1KyIgIitpXXx8YVsiKiAiK2ldO2lm
KCFuKWZvcihyIGluIGEpe3M9ci5zcGxpdCgiICIpO2lmKHNbMV09PT1pKXtuPWFbdSsiICIrc1sw
XV18fGFbIiogIitzWzBdXTtpZihuKXtuPT09ITA/bj1hW3JdOmFbcl0hPT0hMCYmKGk9c1swXSxv
LnNwbGljZShmLS0sMCxpKSk7YnJlYWt9fX1pZihuIT09ITApaWYobiYmZVsidGhyb3dzIl0pdD1u
KHQpO2Vsc2UgdHJ5e3Q9bih0KX1jYXRjaChsKXtyZXR1cm57c3RhdGU6InBhcnNlcmVycm9yIixl
cnJvcjpuP2w6Ik5vIGNvbnZlcnNpb24gZnJvbSAiK3UrIiB0byAiK2l9fX11PWl9cmV0dXJue3N0
YXRlOiJzdWNjZXNzIixkYXRhOnR9fWZ1bmN0aW9uIEZuKCl7dHJ5e3JldHVybiBuZXcgZS5YTUxI
dHRwUmVxdWVzdH1jYXRjaCh0KXt9fWZ1bmN0aW9uIEluKCl7dHJ5e3JldHVybiBuZXcgZS5BY3Rp
dmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpfWNhdGNoKHQpe319ZnVuY3Rpb24gJG4oKXty
ZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe3FuPXR9LDApLHFuPXYubm93KCl9ZnVuY3Rpb24g
Sm4oZSx0KXt2LmVhY2godCxmdW5jdGlvbih0LG4pe3ZhciByPShWblt0XXx8W10pLmNvbmNhdChW
blsiKiJdKSxpPTAscz1yLmxlbmd0aDtmb3IoO2k8cztpKyspaWYocltpXS5jYWxsKGUsdCxuKSly
ZXR1cm59KX1mdW5jdGlvbiBLbihlLHQsbil7dmFyIHIsaT0wLHM9MCxvPVhuLmxlbmd0aCx1PXYu
RGVmZXJyZWQoKS5hbHdheXMoZnVuY3Rpb24oKXtkZWxldGUgYS5lbGVtfSksYT1mdW5jdGlvbigp
e3ZhciB0PXFufHwkbigpLG49TWF0aC5tYXgoMCxmLnN0YXJ0VGltZStmLmR1cmF0aW9uLXQpLHI9
bi9mLmR1cmF0aW9ufHwwLGk9MS1yLHM9MCxvPWYudHdlZW5zLmxlbmd0aDtmb3IoO3M8bztzKysp
Zi50d2VlbnNbc10ucnVuKGkpO3JldHVybiB1Lm5vdGlmeVdpdGgoZSxbZixpLG5dKSxpPDEmJm8/
bjoodS5yZXNvbHZlV2l0aChlLFtmXSksITEpfSxmPXUucHJvbWlzZSh7ZWxlbTplLHByb3BzOnYu
ZXh0ZW5kKHt9LHQpLG9wdHM6di5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e319LG4pLG9yaWdp
bmFsUHJvcGVydGllczp0LG9yaWdpbmFsT3B0aW9uczpuLHN0YXJ0VGltZTpxbnx8JG4oKSxkdXJh
dGlvbjpuLmR1cmF0aW9uLHR3ZWVuczpbXSxjcmVhdGVUd2VlbjpmdW5jdGlvbih0LG4scil7dmFy
IGk9di5Ud2VlbihlLGYub3B0cyx0LG4sZi5vcHRzLnNwZWNpYWxFYXNpbmdbdF18fGYub3B0cy5l
YXNpbmcpO3JldHVybiBmLnR3ZWVucy5wdXNoKGkpLGl9LHN0b3A6ZnVuY3Rpb24odCl7dmFyIG49
MCxyPXQ/Zi50d2VlbnMubGVuZ3RoOjA7Zm9yKDtuPHI7bisrKWYudHdlZW5zW25dLnJ1bigxKTty
ZXR1cm4gdD91LnJlc29sdmVXaXRoKGUsW2YsdF0pOnUucmVqZWN0V2l0aChlLFtmLHRdKSx0aGlz
fX0pLGw9Zi5wcm9wcztRbihsLGYub3B0cy5zcGVjaWFsRWFzaW5nKTtmb3IoO2k8bztpKyspe3I9
WG5baV0uY2FsbChmLGUsbCxmLm9wdHMpO2lmKHIpcmV0dXJuIHJ9cmV0dXJuIEpuKGYsbCksdi5p
c0Z1bmN0aW9uKGYub3B0cy5zdGFydCkmJmYub3B0cy5zdGFydC5jYWxsKGUsZiksdi5meC50aW1l
cih2LmV4dGVuZChhLHthbmltOmYscXVldWU6Zi5vcHRzLnF1ZXVlLGVsZW06ZX0pKSxmLnByb2dy
ZXNzKGYub3B0cy5wcm9ncmVzcykuZG9uZShmLm9wdHMuZG9uZSxmLm9wdHMuY29tcGxldGUpLmZh
aWwoZi5vcHRzLmZhaWwpLmFsd2F5cyhmLm9wdHMuYWx3YXlzKX1mdW5jdGlvbiBRbihlLHQpe3Zh
ciBuLHIsaSxzLG87Zm9yKG4gaW4gZSl7cj12LmNhbWVsQ2FzZShuKSxpPXRbcl0scz1lW25dLHYu
aXNBcnJheShzKSYmKGk9c1sxXSxzPWVbbl09c1swXSksbiE9PXImJihlW3JdPXMsZGVsZXRlIGVb
bl0pLG89di5jc3NIb29rc1tyXTtpZihvJiYiZXhwYW5kImluIG8pe3M9by5leHBhbmQocyksZGVs
ZXRlIGVbcl07Zm9yKG4gaW4gcyluIGluIGV8fChlW25dPXNbbl0sdFtuXT1pKX1lbHNlIHRbcl09
aX19ZnVuY3Rpb24gR24oZSx0LG4pe3ZhciByLGkscyxvLHUsYSxmLGwsYyxoPXRoaXMscD1lLnN0
eWxlLGQ9e30sbT1bXSxnPWUubm9kZVR5cGUmJkd0KGUpO24ucXVldWV8fChsPXYuX3F1ZXVlSG9v
a3MoZSwiZngiKSxsLnVucXVldWVkPT1udWxsJiYobC51bnF1ZXVlZD0wLGM9bC5lbXB0eS5maXJl
LGwuZW1wdHkuZmlyZT1mdW5jdGlvbigpe2wudW5xdWV1ZWR8fGMoKX0pLGwudW5xdWV1ZWQrKyxo
LmFsd2F5cyhmdW5jdGlvbigpe2guYWx3YXlzKGZ1bmN0aW9uKCl7bC51bnF1ZXVlZC0tLHYucXVl
dWUoZSwiZngiKS5sZW5ndGh8fGwuZW1wdHkuZmlyZSgpfSl9KSksZS5ub2RlVHlwZT09PTEmJigi
aGVpZ2h0ImluIHR8fCJ3aWR0aCJpbiB0KSYmKG4ub3ZlcmZsb3c9W3Aub3ZlcmZsb3cscC5vdmVy
Zmxvd1gscC5vdmVyZmxvd1ldLHYuY3NzKGUsImRpc3BsYXkiKT09PSJpbmxpbmUiJiZ2LmNzcyhl
LCJmbG9hdCIpPT09Im5vbmUiJiYoIXYuc3VwcG9ydC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0fHxu
bihlLm5vZGVOYW1lKT09PSJpbmxpbmUiP3AuZGlzcGxheT0iaW5saW5lLWJsb2NrIjpwLnpvb209
MSkpLG4ub3ZlcmZsb3cmJihwLm92ZXJmbG93PSJoaWRkZW4iLHYuc3VwcG9ydC5zaHJpbmtXcmFw
QmxvY2tzfHxoLmRvbmUoZnVuY3Rpb24oKXtwLm92ZXJmbG93PW4ub3ZlcmZsb3dbMF0scC5vdmVy
Zmxvd1g9bi5vdmVyZmxvd1sxXSxwLm92ZXJmbG93WT1uLm92ZXJmbG93WzJdfSkpO2ZvcihyIGlu
IHQpe3M9dFtyXTtpZihVbi5leGVjKHMpKXtkZWxldGUgdFtyXSxhPWF8fHM9PT0idG9nZ2xlIjtp
ZihzPT09KGc/ImhpZGUiOiJzaG93IikpY29udGludWU7bS5wdXNoKHIpfX1vPW0ubGVuZ3RoO2lm
KG8pe3U9di5fZGF0YShlLCJmeHNob3ciKXx8di5fZGF0YShlLCJmeHNob3ciLHt9KSwiaGlkZGVu
ImluIHUmJihnPXUuaGlkZGVuKSxhJiYodS5oaWRkZW49IWcpLGc/dihlKS5zaG93KCk6aC5kb25l
KGZ1bmN0aW9uKCl7dihlKS5oaWRlKCl9KSxoLmRvbmUoZnVuY3Rpb24oKXt2YXIgdDt2LnJlbW92
ZURhdGEoZSwiZnhzaG93IiwhMCk7Zm9yKHQgaW4gZCl2LnN0eWxlKGUsdCxkW3RdKX0pO2Zvcihy
PTA7cjxvO3IrKylpPW1bcl0sZj1oLmNyZWF0ZVR3ZWVuKGksZz91W2ldOjApLGRbaV09dVtpXXx8
di5zdHlsZShlLGkpLGkgaW4gdXx8KHVbaV09Zi5zdGFydCxnJiYoZi5lbmQ9Zi5zdGFydCxmLnN0
YXJ0PWk9PT0id2lkdGgifHxpPT09ImhlaWdodCI/MTowKSl9fWZ1bmN0aW9uIFluKGUsdCxuLHIs
aSl7cmV0dXJuIG5ldyBZbi5wcm90b3R5cGUuaW5pdChlLHQsbixyLGkpfWZ1bmN0aW9uIFpuKGUs
dCl7dmFyIG4scj17aGVpZ2h0OmV9LGk9MDt0PXQ/MTowO2Zvcig7aTw0O2krPTItdCluPSR0W2ld
LHJbIm1hcmdpbiIrbl09clsicGFkZGluZyIrbl09ZTtyZXR1cm4gdCYmKHIub3BhY2l0eT1yLndp
ZHRoPWUpLHJ9ZnVuY3Rpb24gdHIoZSl7cmV0dXJuIHYuaXNXaW5kb3coZSk/ZTplLm5vZGVUeXBl
PT09OT9lLmRlZmF1bHRWaWV3fHxlLnBhcmVudFdpbmRvdzohMX12YXIgbixyLGk9ZS5kb2N1bWVu
dCxzPWUubG9jYXRpb24sbz1lLm5hdmlnYXRvcix1PWUualF1ZXJ5LGE9ZS4kLGY9QXJyYXkucHJv
dG90eXBlLnB1c2gsbD1BcnJheS5wcm90b3R5cGUuc2xpY2UsYz1BcnJheS5wcm90b3R5cGUuaW5k
ZXhPZixoPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcscD1PYmplY3QucHJvdG90eXBlLmhhc093
blByb3BlcnR5LGQ9U3RyaW5nLnByb3RvdHlwZS50cmltLHY9ZnVuY3Rpb24oZSx0KXtyZXR1cm4g
bmV3IHYuZm4uaW5pdChlLHQsbil9LG09L1tcLStdPyg/OlxkKlwufClcZCsoPzpbZUVdW1wtK10/
XGQrfCkvLnNvdXJjZSxnPS9cUy8seT0vXHMrLyxiPS9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVG
Rlx4QTBdKyQvZyx3PS9eKD86W14jPF0qKDxbXHdcV10rPilbXj5dKiR8IyhbXHdcLV0qKSQpLyxF
PS9ePChcdyspXHMqXC8/Pig/OjxcL1wxPnwpJC8sUz0vXltcXSw6e31cc10qJC8seD0vKD86Xnw6
fCwpKD86XHMqXFspKy9nLFQ9L1xcKD86WyJcXFwvYmZucnRdfHVbXGRhLWZBLUZdezR9KS9nLE49
LyJbXiJcXFxyXG5dKiJ8dHJ1ZXxmYWxzZXxudWxsfC0/KD86XGRcZCpcLnwpXGQrKD86W2VFXVtc
LStdP1xkK3wpL2csQz0vXi1tcy0vLGs9Ly0oW1xkYS16XSkvZ2ksTD1mdW5jdGlvbihlLHQpe3Jl
dHVybih0KyIiKS50b1VwcGVyQ2FzZSgpfSxBPWZ1bmN0aW9uKCl7aS5hZGRFdmVudExpc3RlbmVy
PyhpLnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLEEsITEpLHYucmVhZHko
KSk6aS5yZWFkeVN0YXRlPT09ImNvbXBsZXRlIiYmKGkuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0
ZWNoYW5nZSIsQSksdi5yZWFkeSgpKX0sTz17fTt2LmZuPXYucHJvdG90eXBlPXtjb25zdHJ1Y3Rv
cjp2LGluaXQ6ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8sdSxhO2lmKCFlKXJldHVybiB0aGlzO2lm
KGUubm9kZVR5cGUpcmV0dXJuIHRoaXMuY29udGV4dD10aGlzWzBdPWUsdGhpcy5sZW5ndGg9MSx0
aGlzO2lmKHR5cGVvZiBlPT0ic3RyaW5nIil7ZS5jaGFyQXQoMCk9PT0iPCImJmUuY2hhckF0KGUu
bGVuZ3RoLTEpPT09Ij4iJiZlLmxlbmd0aD49Mz9zPVtudWxsLGUsbnVsbF06cz13LmV4ZWMoZSk7
aWYocyYmKHNbMV18fCFuKSl7aWYoc1sxXSlyZXR1cm4gbj1uIGluc3RhbmNlb2Ygdj9uWzBdOm4s
YT1uJiZuLm5vZGVUeXBlP24ub3duZXJEb2N1bWVudHx8bjppLGU9di5wYXJzZUhUTUwoc1sxXSxh
LCEwKSxFLnRlc3Qoc1sxXSkmJnYuaXNQbGFpbk9iamVjdChuKSYmdGhpcy5hdHRyLmNhbGwoZSxu
LCEwKSx2Lm1lcmdlKHRoaXMsZSk7bz1pLmdldEVsZW1lbnRCeUlkKHNbMl0pO2lmKG8mJm8ucGFy
ZW50Tm9kZSl7aWYoby5pZCE9PXNbMl0pcmV0dXJuIHIuZmluZChlKTt0aGlzLmxlbmd0aD0xLHRo
aXNbMF09b31yZXR1cm4gdGhpcy5jb250ZXh0PWksdGhpcy5zZWxlY3Rvcj1lLHRoaXN9cmV0dXJu
IW58fG4uanF1ZXJ5PyhufHxyKS5maW5kKGUpOnRoaXMuY29uc3RydWN0b3IobikuZmluZChlKX1y
ZXR1cm4gdi5pc0Z1bmN0aW9uKGUpP3IucmVhZHkoZSk6KGUuc2VsZWN0b3IhPT10JiYodGhpcy5z
ZWxlY3Rvcj1lLnNlbGVjdG9yLHRoaXMuY29udGV4dD1lLmNvbnRleHQpLHYubWFrZUFycmF5KGUs
dGhpcykpfSxzZWxlY3RvcjoiIixqcXVlcnk6IjEuOC4zIixsZW5ndGg6MCxzaXplOmZ1bmN0aW9u
KCl7cmV0dXJuIHRoaXMubGVuZ3RofSx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIGwuY2FsbCh0
aGlzKX0sZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsP3RoaXMudG9BcnJheSgpOmU8MD90
aGlzW3RoaXMubGVuZ3RoK2VdOnRoaXNbZV19LHB1c2hTdGFjazpmdW5jdGlvbihlLHQsbil7dmFy
IHI9di5tZXJnZSh0aGlzLmNvbnN0cnVjdG9yKCksZSk7cmV0dXJuIHIucHJldk9iamVjdD10aGlz
LHIuY29udGV4dD10aGlzLmNvbnRleHQsdD09PSJmaW5kIj9yLnNlbGVjdG9yPXRoaXMuc2VsZWN0
b3IrKHRoaXMuc2VsZWN0b3I/IiAiOiIiKStuOnQmJihyLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3Ir
Ii4iK3QrIigiK24rIikiKSxyfSxlYWNoOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHYuZWFjaCh0aGlz
LGUsdCl9LHJlYWR5OmZ1bmN0aW9uKGUpe3JldHVybiB2LnJlYWR5LnByb21pc2UoKS5kb25lKGUp
LHRoaXN9LGVxOmZ1bmN0aW9uKGUpe3JldHVybiBlPStlLGU9PT0tMT90aGlzLnNsaWNlKGUpOnRo
aXMuc2xpY2UoZSxlKzEpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0
OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0
aGlzLnB1c2hTdGFjayhsLmFwcGx5KHRoaXMsYXJndW1lbnRzKSwic2xpY2UiLGwuY2FsbChhcmd1
bWVudHMpLmpvaW4oIiwiKSl9LG1hcDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2so
di5tYXAodGhpcyxmdW5jdGlvbih0LG4pe3JldHVybiBlLmNhbGwodCxuLHQpfSkpfSxlbmQ6ZnVu
Y3Rpb24oKXtyZXR1cm4gdGhpcy5wcmV2T2JqZWN0fHx0aGlzLmNvbnN0cnVjdG9yKG51bGwpfSxw
dXNoOmYsc29ydDpbXS5zb3J0LHNwbGljZTpbXS5zcGxpY2V9LHYuZm4uaW5pdC5wcm90b3R5cGU9
di5mbix2LmV4dGVuZD12LmZuLmV4dGVuZD1mdW5jdGlvbigpe3ZhciBlLG4scixpLHMsbyx1PWFy
Z3VtZW50c1swXXx8e30sYT0xLGY9YXJndW1lbnRzLmxlbmd0aCxsPSExO3R5cGVvZiB1PT0iYm9v
bGVhbiImJihsPXUsdT1hcmd1bWVudHNbMV18fHt9LGE9MiksdHlwZW9mIHUhPSJvYmplY3QiJiYh
di5pc0Z1bmN0aW9uKHUpJiYodT17fSksZj09PWEmJih1PXRoaXMsLS1hKTtmb3IoO2E8ZjthKysp
aWYoKGU9YXJndW1lbnRzW2FdKSE9bnVsbClmb3IobiBpbiBlKXtyPXVbbl0saT1lW25dO2lmKHU9
PT1pKWNvbnRpbnVlO2wmJmkmJih2LmlzUGxhaW5PYmplY3QoaSl8fChzPXYuaXNBcnJheShpKSkp
PyhzPyhzPSExLG89ciYmdi5pc0FycmF5KHIpP3I6W10pOm89ciYmdi5pc1BsYWluT2JqZWN0KHIp
P3I6e30sdVtuXT12LmV4dGVuZChsLG8saSkpOmkhPT10JiYodVtuXT1pKX1yZXR1cm4gdX0sdi5l
eHRlbmQoe25vQ29uZmxpY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIGUuJD09PXYmJihlLiQ9YSksdCYm
ZS5qUXVlcnk9PT12JiYoZS5qUXVlcnk9dSksdn0saXNSZWFkeTohMSxyZWFkeVdhaXQ6MSxob2xk
UmVhZHk6ZnVuY3Rpb24oZSl7ZT92LnJlYWR5V2FpdCsrOnYucmVhZHkoITApfSxyZWFkeTpmdW5j
dGlvbihlKXtpZihlPT09ITA/LS12LnJlYWR5V2FpdDp2LmlzUmVhZHkpcmV0dXJuO2lmKCFpLmJv
ZHkpcmV0dXJuIHNldFRpbWVvdXQodi5yZWFkeSwxKTt2LmlzUmVhZHk9ITA7aWYoZSE9PSEwJiYt
LXYucmVhZHlXYWl0PjApcmV0dXJuO3IucmVzb2x2ZVdpdGgoaSxbdl0pLHYuZm4udHJpZ2dlciYm
dihpKS50cmlnZ2VyKCJyZWFkeSIpLm9mZigicmVhZHkiKX0saXNGdW5jdGlvbjpmdW5jdGlvbihl
KXtyZXR1cm4gdi50eXBlKGUpPT09ImZ1bmN0aW9uIn0saXNBcnJheTpBcnJheS5pc0FycmF5fHxm
dW5jdGlvbihlKXtyZXR1cm4gdi50eXBlKGUpPT09ImFycmF5In0saXNXaW5kb3c6ZnVuY3Rpb24o
ZSl7cmV0dXJuIGUhPW51bGwmJmU9PWUud2luZG93fSxpc051bWVyaWM6ZnVuY3Rpb24oZSl7cmV0
dXJuIWlzTmFOKHBhcnNlRmxvYXQoZSkpJiZpc0Zpbml0ZShlKX0sdHlwZTpmdW5jdGlvbihlKXty
ZXR1cm4gZT09bnVsbD9TdHJpbmcoZSk6T1toLmNhbGwoZSldfHwib2JqZWN0In0saXNQbGFpbk9i
amVjdDpmdW5jdGlvbihlKXtpZighZXx8di50eXBlKGUpIT09Im9iamVjdCJ8fGUubm9kZVR5cGV8
fHYuaXNXaW5kb3coZSkpcmV0dXJuITE7dHJ5e2lmKGUuY29uc3RydWN0b3ImJiFwLmNhbGwoZSwi
Y29uc3RydWN0b3IiKSYmIXAuY2FsbChlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwiaXNQcm90b3R5
cGVPZiIpKXJldHVybiExfWNhdGNoKG4pe3JldHVybiExfXZhciByO2ZvcihyIGluIGUpO3JldHVy
biByPT09dHx8cC5jYWxsKGUscil9LGlzRW1wdHlPYmplY3Q6ZnVuY3Rpb24oZSl7dmFyIHQ7Zm9y
KHQgaW4gZSlyZXR1cm4hMTtyZXR1cm4hMH0sZXJyb3I6ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVy
cm9yKGUpfSxwYXJzZUhUTUw6ZnVuY3Rpb24oZSx0LG4pe3ZhciByO3JldHVybiFlfHx0eXBlb2Yg
ZSE9InN0cmluZyI/bnVsbDoodHlwZW9mIHQ9PSJib29sZWFuIiYmKG49dCx0PTApLHQ9dHx8aSwo
cj1FLmV4ZWMoZSkpP1t0LmNyZWF0ZUVsZW1lbnQoclsxXSldOihyPXYuYnVpbGRGcmFnbWVudChb
ZV0sdCxuP251bGw6W10pLHYubWVyZ2UoW10sKHIuY2FjaGVhYmxlP3YuY2xvbmUoci5mcmFnbWVu
dCk6ci5mcmFnbWVudCkuY2hpbGROb2RlcykpKX0scGFyc2VKU09OOmZ1bmN0aW9uKHQpe2lmKCF0
fHx0eXBlb2YgdCE9InN0cmluZyIpcmV0dXJuIG51bGw7dD12LnRyaW0odCk7aWYoZS5KU09OJiZl
LkpTT04ucGFyc2UpcmV0dXJuIGUuSlNPTi5wYXJzZSh0KTtpZihTLnRlc3QodC5yZXBsYWNlKFQs
IkAiKS5yZXBsYWNlKE4sIl0iKS5yZXBsYWNlKHgsIiIpKSlyZXR1cm4obmV3IEZ1bmN0aW9uKCJy
ZXR1cm4gIit0KSkoKTt2LmVycm9yKCJJbnZhbGlkIEpTT046ICIrdCl9LHBhcnNlWE1MOmZ1bmN0
aW9uKG4pe3ZhciByLGk7aWYoIW58fHR5cGVvZiBuIT0ic3RyaW5nIilyZXR1cm4gbnVsbDt0cnl7
ZS5ET01QYXJzZXI/KGk9bmV3IERPTVBhcnNlcixyPWkucGFyc2VGcm9tU3RyaW5nKG4sInRleHQv
eG1sIikpOihyPW5ldyBBY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MRE9NIiksci5hc3luYz0i
ZmFsc2UiLHIubG9hZFhNTChuKSl9Y2F0Y2gocyl7cj10fXJldHVybighcnx8IXIuZG9jdW1lbnRF
bGVtZW50fHxyLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwYXJzZXJlcnJvciIpLmxlbmd0aCkmJnYu
ZXJyb3IoIkludmFsaWQgWE1MOiAiK24pLHJ9LG5vb3A6ZnVuY3Rpb24oKXt9LGdsb2JhbEV2YWw6
ZnVuY3Rpb24odCl7dCYmZy50ZXN0KHQpJiYoZS5leGVjU2NyaXB0fHxmdW5jdGlvbih0KXtlLmV2
YWwuY2FsbChlLHQpfSkodCl9LGNhbWVsQ2FzZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNl
KEMsIm1zLSIpLnJlcGxhY2UoayxMKX0sbm9kZU5hbWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5u
b2RlTmFtZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09dC50b0xvd2VyQ2FzZSgpfSxlYWNo
OmZ1bmN0aW9uKGUsbixyKXt2YXIgaSxzPTAsbz1lLmxlbmd0aCx1PW89PT10fHx2LmlzRnVuY3Rp
b24oZSk7aWYocil7aWYodSl7Zm9yKGkgaW4gZSlpZihuLmFwcGx5KGVbaV0scik9PT0hMSlicmVh
a31lbHNlIGZvcig7czxvOylpZihuLmFwcGx5KGVbcysrXSxyKT09PSExKWJyZWFrfWVsc2UgaWYo
dSl7Zm9yKGkgaW4gZSlpZihuLmNhbGwoZVtpXSxpLGVbaV0pPT09ITEpYnJlYWt9ZWxzZSBmb3Io
O3M8bzspaWYobi5jYWxsKGVbc10scyxlW3MrK10pPT09ITEpYnJlYWs7cmV0dXJuIGV9LHRyaW06
ZCYmIWQuY2FsbCgiXHVmZWZmXHUwMGEwIik/ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PW51bGw/IiI6
ZC5jYWxsKGUpfTpmdW5jdGlvbihlKXtyZXR1cm4gZT09bnVsbD8iIjooZSsiIikucmVwbGFjZShi
LCIiKX0sbWFrZUFycmF5OmZ1bmN0aW9uKGUsdCl7dmFyIG4scj10fHxbXTtyZXR1cm4gZSE9bnVs
bCYmKG49di50eXBlKGUpLGUubGVuZ3RoPT1udWxsfHxuPT09InN0cmluZyJ8fG49PT0iZnVuY3Rp
b24ifHxuPT09InJlZ2V4cCJ8fHYuaXNXaW5kb3coZSk/Zi5jYWxsKHIsZSk6di5tZXJnZShyLGUp
KSxyfSxpbkFycmF5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtpZih0KXtpZihjKXJldHVybiBjLmNh
bGwodCxlLG4pO3I9dC5sZW5ndGgsbj1uP248MD9NYXRoLm1heCgwLHIrbik6bjowO2Zvcig7bjxy
O24rKylpZihuIGluIHQmJnRbbl09PT1lKXJldHVybiBufXJldHVybi0xfSxtZXJnZTpmdW5jdGlv
bihlLG4pe3ZhciByPW4ubGVuZ3RoLGk9ZS5sZW5ndGgscz0wO2lmKHR5cGVvZiByPT0ibnVtYmVy
Iilmb3IoO3M8cjtzKyspZVtpKytdPW5bc107ZWxzZSB3aGlsZShuW3NdIT09dCllW2krK109bltz
KytdO3JldHVybiBlLmxlbmd0aD1pLGV9LGdyZXA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9W10s
cz0wLG89ZS5sZW5ndGg7bj0hIW47Zm9yKDtzPG87cysrKXI9ISF0KGVbc10scyksbiE9PXImJmku
cHVzaChlW3NdKTtyZXR1cm4gaX0sbWFwOmZ1bmN0aW9uKGUsbixyKXt2YXIgaSxzLG89W10sdT0w
LGE9ZS5sZW5ndGgsZj1lIGluc3RhbmNlb2Ygdnx8YSE9PXQmJnR5cGVvZiBhPT0ibnVtYmVyIiYm
KGE+MCYmZVswXSYmZVthLTFdfHxhPT09MHx8di5pc0FycmF5KGUpKTtpZihmKWZvcig7dTxhO3Ur
KylpPW4oZVt1XSx1LHIpLGkhPW51bGwmJihvW28ubGVuZ3RoXT1pKTtlbHNlIGZvcihzIGluIGUp
aT1uKGVbc10scyxyKSxpIT1udWxsJiYob1tvLmxlbmd0aF09aSk7cmV0dXJuIG8uY29uY2F0LmFw
cGx5KFtdLG8pfSxndWlkOjEscHJveHk6ZnVuY3Rpb24oZSxuKXt2YXIgcixpLHM7cmV0dXJuIHR5
cGVvZiBuPT0ic3RyaW5nIiYmKHI9ZVtuXSxuPWUsZT1yKSx2LmlzRnVuY3Rpb24oZSk/KGk9bC5j
YWxsKGFyZ3VtZW50cywyKSxzPWZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkobixpLmNvbmNhdChs
LmNhbGwoYXJndW1lbnRzKSkpfSxzLmd1aWQ9ZS5ndWlkPWUuZ3VpZHx8di5ndWlkKysscyk6dH0s
YWNjZXNzOmZ1bmN0aW9uKGUsbixyLGkscyxvLHUpe3ZhciBhLGY9cj09bnVsbCxsPTAsYz1lLmxl
bmd0aDtpZihyJiZ0eXBlb2Ygcj09Im9iamVjdCIpe2ZvcihsIGluIHIpdi5hY2Nlc3MoZSxuLGws
cltsXSwxLG8saSk7cz0xfWVsc2UgaWYoaSE9PXQpe2E9dT09PXQmJnYuaXNGdW5jdGlvbihpKSxm
JiYoYT8oYT1uLG49ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBhLmNhbGwodihlKSxuKX0pOihuLmNh
bGwoZSxpKSxuPW51bGwpKTtpZihuKWZvcig7bDxjO2wrKyluKGVbbF0scixhP2kuY2FsbChlW2xd
LGwsbihlW2xdLHIpKTppLHUpO3M9MX1yZXR1cm4gcz9lOmY/bi5jYWxsKGUpOmM/bihlWzBdLHIp
Om99LG5vdzpmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfX0pLHYucmVhZHku
cHJvbWlzZT1mdW5jdGlvbih0KXtpZighcil7cj12LkRlZmVycmVkKCk7aWYoaS5yZWFkeVN0YXRl
PT09ImNvbXBsZXRlIilzZXRUaW1lb3V0KHYucmVhZHksMSk7ZWxzZSBpZihpLmFkZEV2ZW50TGlz
dGVuZXIpaS5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixBLCExKSxlLmFkZEV2
ZW50TGlzdGVuZXIoImxvYWQiLHYucmVhZHksITEpO2Vsc2V7aS5hdHRhY2hFdmVudCgib25yZWFk
eXN0YXRlY2hhbmdlIixBKSxlLmF0dGFjaEV2ZW50KCJvbmxvYWQiLHYucmVhZHkpO3ZhciBuPSEx
O3RyeXtuPWUuZnJhbWVFbGVtZW50PT1udWxsJiZpLmRvY3VtZW50RWxlbWVudH1jYXRjaChzKXt9
biYmbi5kb1Njcm9sbCYmZnVuY3Rpb24gbygpe2lmKCF2LmlzUmVhZHkpe3RyeXtuLmRvU2Nyb2xs
KCJsZWZ0Iil9Y2F0Y2goZSl7cmV0dXJuIHNldFRpbWVvdXQobyw1MCl9di5yZWFkeSgpfX0oKX19
cmV0dXJuIHIucHJvbWlzZSh0KX0sdi5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rp
b24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0Ii5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsdCl7T1si
W29iamVjdCAiK3QrIl0iXT10LnRvTG93ZXJDYXNlKCl9KSxuPXYoaSk7dmFyIE09e307di5DYWxs
YmFja3M9ZnVuY3Rpb24oZSl7ZT10eXBlb2YgZT09InN0cmluZyI/TVtlXXx8XyhlKTp2LmV4dGVu
ZCh7fSxlKTt2YXIgbixyLGkscyxvLHUsYT1bXSxmPSFlLm9uY2UmJltdLGw9ZnVuY3Rpb24odCl7
bj1lLm1lbW9yeSYmdCxyPSEwLHU9c3x8MCxzPTAsbz1hLmxlbmd0aCxpPSEwO2Zvcig7YSYmdTxv
O3UrKylpZihhW3VdLmFwcGx5KHRbMF0sdFsxXSk9PT0hMSYmZS5zdG9wT25GYWxzZSl7bj0hMTti
cmVha31pPSExLGEmJihmP2YubGVuZ3RoJiZsKGYuc2hpZnQoKSk6bj9hPVtdOmMuZGlzYWJsZSgp
KX0sYz17YWRkOmZ1bmN0aW9uKCl7aWYoYSl7dmFyIHQ9YS5sZW5ndGg7KGZ1bmN0aW9uIHIodCl7
di5lYWNoKHQsZnVuY3Rpb24odCxuKXt2YXIgaT12LnR5cGUobik7aT09PSJmdW5jdGlvbiI/KCFl
LnVuaXF1ZXx8IWMuaGFzKG4pKSYmYS5wdXNoKG4pOm4mJm4ubGVuZ3RoJiZpIT09InN0cmluZyIm
JnIobil9KX0pKGFyZ3VtZW50cyksaT9vPWEubGVuZ3RoOm4mJihzPXQsbChuKSl9cmV0dXJuIHRo
aXN9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiBhJiZ2LmVhY2goYXJndW1lbnRzLGZ1bmN0aW9u
KGUsdCl7dmFyIG47d2hpbGUoKG49di5pbkFycmF5KHQsYSxuKSk+LTEpYS5zcGxpY2UobiwxKSxp
JiYobjw9byYmby0tLG48PXUmJnUtLSl9KSx0aGlzfSxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuIHYu
aW5BcnJheShlLGEpPi0xfSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiBhPVtdLHRoaXN9LGRpc2Fi
bGU6ZnVuY3Rpb24oKXtyZXR1cm4gYT1mPW49dCx0aGlzfSxkaXNhYmxlZDpmdW5jdGlvbigpe3Jl
dHVybiFhfSxsb2NrOmZ1bmN0aW9uKCl7cmV0dXJuIGY9dCxufHxjLmRpc2FibGUoKSx0aGlzfSxs
b2NrZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hZn0sZmlyZVdpdGg6ZnVuY3Rpb24oZSx0KXtyZXR1cm4g
dD10fHxbXSx0PVtlLHQuc2xpY2U/dC5zbGljZSgpOnRdLGEmJighcnx8ZikmJihpP2YucHVzaCh0
KTpsKHQpKSx0aGlzfSxmaXJlOmZ1bmN0aW9uKCl7cmV0dXJuIGMuZmlyZVdpdGgodGhpcyxhcmd1
bWVudHMpLHRoaXN9LGZpcmVkOmZ1bmN0aW9uKCl7cmV0dXJuISFyfX07cmV0dXJuIGN9LHYuZXh0
ZW5kKHtEZWZlcnJlZDpmdW5jdGlvbihlKXt2YXIgdD1bWyJyZXNvbHZlIiwiZG9uZSIsdi5DYWxs
YmFja3MoIm9uY2UgbWVtb3J5IiksInJlc29sdmVkIl0sWyJyZWplY3QiLCJmYWlsIix2LkNhbGxi
YWNrcygib25jZSBtZW1vcnkiKSwicmVqZWN0ZWQiXSxbIm5vdGlmeSIsInByb2dyZXNzIix2LkNh
bGxiYWNrcygibWVtb3J5IildXSxuPSJwZW5kaW5nIixyPXtzdGF0ZTpmdW5jdGlvbigpe3JldHVy
biBufSxhbHdheXM6ZnVuY3Rpb24oKXtyZXR1cm4gaS5kb25lKGFyZ3VtZW50cykuZmFpbChhcmd1
bWVudHMpLHRoaXN9LHRoZW46ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHM7cmV0dXJuIHYuRGVm
ZXJyZWQoZnVuY3Rpb24obil7di5lYWNoKHQsZnVuY3Rpb24odCxyKXt2YXIgcz1yWzBdLG89ZVt0
XTtpW3JbMV1dKHYuaXNGdW5jdGlvbihvKT9mdW5jdGlvbigpe3ZhciBlPW8uYXBwbHkodGhpcyxh
cmd1bWVudHMpO2UmJnYuaXNGdW5jdGlvbihlLnByb21pc2UpP2UucHJvbWlzZSgpLmRvbmUobi5y
ZXNvbHZlKS5mYWlsKG4ucmVqZWN0KS5wcm9ncmVzcyhuLm5vdGlmeSk6bltzKyJXaXRoIl0odGhp
cz09PWk/bjp0aGlzLFtlXSl9Om5bc10pfSksZT1udWxsfSkucHJvbWlzZSgpfSxwcm9taXNlOmZ1
bmN0aW9uKGUpe3JldHVybiBlIT1udWxsP3YuZXh0ZW5kKGUscik6cn19LGk9e307cmV0dXJuIHIu
cGlwZT1yLnRoZW4sdi5lYWNoKHQsZnVuY3Rpb24oZSxzKXt2YXIgbz1zWzJdLHU9c1szXTtyW3Nb
MV1dPW8uYWRkLHUmJm8uYWRkKGZ1bmN0aW9uKCl7bj11fSx0W2VeMV1bMl0uZGlzYWJsZSx0WzJd
WzJdLmxvY2spLGlbc1swXV09by5maXJlLGlbc1swXSsiV2l0aCJdPW8uZmlyZVdpdGh9KSxyLnBy
b21pc2UoaSksZSYmZS5jYWxsKGksaSksaX0sd2hlbjpmdW5jdGlvbihlKXt2YXIgdD0wLG49bC5j
YWxsKGFyZ3VtZW50cykscj1uLmxlbmd0aCxpPXIhPT0xfHxlJiZ2LmlzRnVuY3Rpb24oZS5wcm9t
aXNlKT9yOjAscz1pPT09MT9lOnYuRGVmZXJyZWQoKSxvPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4g
ZnVuY3Rpb24ocil7dFtlXT10aGlzLG5bZV09YXJndW1lbnRzLmxlbmd0aD4xP2wuY2FsbChhcmd1
bWVudHMpOnIsbj09PXU/cy5ub3RpZnlXaXRoKHQsbik6LS1pfHxzLnJlc29sdmVXaXRoKHQsbil9
fSx1LGEsZjtpZihyPjEpe3U9bmV3IEFycmF5KHIpLGE9bmV3IEFycmF5KHIpLGY9bmV3IEFycmF5
KHIpO2Zvcig7dDxyO3QrKyluW3RdJiZ2LmlzRnVuY3Rpb24oblt0XS5wcm9taXNlKT9uW3RdLnBy
b21pc2UoKS5kb25lKG8odCxmLG4pKS5mYWlsKHMucmVqZWN0KS5wcm9ncmVzcyhvKHQsYSx1KSk6
LS1pfXJldHVybiBpfHxzLnJlc29sdmVXaXRoKGYsbikscy5wcm9taXNlKCl9fSksdi5zdXBwb3J0
PWZ1bmN0aW9uKCl7dmFyIHQsbixyLHMsbyx1LGEsZixsLGMsaCxwPWkuY3JlYXRlRWxlbWVudCgi
ZGl2Iik7cC5zZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIsInQiKSxwLmlubmVySFRNTD0iICA8bGlu
ay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94
Jy8+IixuPXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSxyPXAuZ2V0RWxlbWVudHNCeVRhZ05h
bWUoImEiKVswXTtpZighbnx8IXJ8fCFuLmxlbmd0aClyZXR1cm57fTtzPWkuY3JlYXRlRWxlbWVu
dCgic2VsZWN0Iiksbz1zLmFwcGVuZENoaWxkKGkuY3JlYXRlRWxlbWVudCgib3B0aW9uIikpLHU9
cC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKVswXSxyLnN0eWxlLmNzc1RleHQ9InRvcDox
cHg7ZmxvYXQ6bGVmdDtvcGFjaXR5Oi41Iix0PXtsZWFkaW5nV2hpdGVzcGFjZTpwLmZpcnN0Q2hp
bGQubm9kZVR5cGU9PT0zLHRib2R5OiFwLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpLmxl
bmd0aCxodG1sU2VyaWFsaXplOiEhcC5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGluayIpLmxlbmd0
aCxzdHlsZTovdG9wLy50ZXN0KHIuZ2V0QXR0cmlidXRlKCJzdHlsZSIpKSxocmVmTm9ybWFsaXpl
ZDpyLmdldEF0dHJpYnV0ZSgiaHJlZiIpPT09Ii9hIixvcGFjaXR5Oi9eMC41Ly50ZXN0KHIuc3R5
bGUub3BhY2l0eSksY3NzRmxvYXQ6ISFyLnN0eWxlLmNzc0Zsb2F0LGNoZWNrT246dS52YWx1ZT09
PSJvbiIsb3B0U2VsZWN0ZWQ6by5zZWxlY3RlZCxnZXRTZXRBdHRyaWJ1dGU6cC5jbGFzc05hbWUh
PT0idCIsZW5jdHlwZTohIWkuY3JlYXRlRWxlbWVudCgiZm9ybSIpLmVuY3R5cGUsaHRtbDVDbG9u
ZTppLmNyZWF0ZUVsZW1lbnQoIm5hdiIpLmNsb25lTm9kZSghMCkub3V0ZXJIVE1MIT09Ijw6bmF2
PjwvOm5hdj4iLGJveE1vZGVsOmkuY29tcGF0TW9kZT09PSJDU1MxQ29tcGF0IixzdWJtaXRCdWJi
bGVzOiEwLGNoYW5nZUJ1YmJsZXM6ITAsZm9jdXNpbkJ1YmJsZXM6ITEsZGVsZXRlRXhwYW5kbzoh
MCxub0Nsb25lRXZlbnQ6ITAsaW5saW5lQmxvY2tOZWVkc0xheW91dDohMSxzaHJpbmtXcmFwQmxv
Y2tzOiExLHJlbGlhYmxlTWFyZ2luUmlnaHQ6ITAsYm94U2l6aW5nUmVsaWFibGU6ITAscGl4ZWxQ
b3NpdGlvbjohMX0sdS5jaGVja2VkPSEwLHQubm9DbG9uZUNoZWNrZWQ9dS5jbG9uZU5vZGUoITAp
LmNoZWNrZWQscy5kaXNhYmxlZD0hMCx0Lm9wdERpc2FibGVkPSFvLmRpc2FibGVkO3RyeXtkZWxl
dGUgcC50ZXN0fWNhdGNoKGQpe3QuZGVsZXRlRXhwYW5kbz0hMX0hcC5hZGRFdmVudExpc3RlbmVy
JiZwLmF0dGFjaEV2ZW50JiZwLmZpcmVFdmVudCYmKHAuYXR0YWNoRXZlbnQoIm9uY2xpY2siLGg9
ZnVuY3Rpb24oKXt0Lm5vQ2xvbmVFdmVudD0hMX0pLHAuY2xvbmVOb2RlKCEwKS5maXJlRXZlbnQo
Im9uY2xpY2siKSxwLmRldGFjaEV2ZW50KCJvbmNsaWNrIixoKSksdT1pLmNyZWF0ZUVsZW1lbnQo
ImlucHV0IiksdS52YWx1ZT0idCIsdS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIpLHQucmFk
aW9WYWx1ZT11LnZhbHVlPT09InQiLHUuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIp
LHUuc2V0QXR0cmlidXRlKCJuYW1lIiwidCIpLHAuYXBwZW5kQ2hpbGQodSksYT1pLmNyZWF0ZURv
Y3VtZW50RnJhZ21lbnQoKSxhLmFwcGVuZENoaWxkKHAubGFzdENoaWxkKSx0LmNoZWNrQ2xvbmU9
YS5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsdC5hcHBlbmRD
aGVja2VkPXUuY2hlY2tlZCxhLnJlbW92ZUNoaWxkKHUpLGEuYXBwZW5kQ2hpbGQocCk7aWYocC5h
dHRhY2hFdmVudClmb3IobCBpbntzdWJtaXQ6ITAsY2hhbmdlOiEwLGZvY3VzaW46ITB9KWY9Im9u
IitsLGM9ZiBpbiBwLGN8fChwLnNldEF0dHJpYnV0ZShmLCJyZXR1cm47IiksYz10eXBlb2YgcFtm
XT09ImZ1bmN0aW9uIiksdFtsKyJCdWJibGVzIl09YztyZXR1cm4gdihmdW5jdGlvbigpe3ZhciBu
LHIscyxvLHU9InBhZGRpbmc6MDttYXJnaW46MDtib3JkZXI6MDtkaXNwbGF5OmJsb2NrO292ZXJm
bG93OmhpZGRlbjsiLGE9aS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdO2lmKCFhKXJl
dHVybjtuPWkuY3JlYXRlRWxlbWVudCgiZGl2Iiksbi5zdHlsZS5jc3NUZXh0PSJ2aXNpYmlsaXR5
OmhpZGRlbjtib3JkZXI6MDt3aWR0aDowO2hlaWdodDowO3Bvc2l0aW9uOnN0YXRpYzt0b3A6MDtt
YXJnaW4tdG9wOjFweCIsYS5pbnNlcnRCZWZvcmUobixhLmZpcnN0Q2hpbGQpLHI9aS5jcmVhdGVF
bGVtZW50KCJkaXYiKSxuLmFwcGVuZENoaWxkKHIpLHIuaW5uZXJIVE1MPSI8dGFibGU+PHRyPjx0
ZD48L3RkPjx0ZD50PC90ZD48L3RyPjwvdGFibGU+IixzPXIuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
InRkIiksc1swXS5zdHlsZS5jc3NUZXh0PSJwYWRkaW5nOjA7bWFyZ2luOjA7Ym9yZGVyOjA7ZGlz
cGxheTpub25lIixjPXNbMF0ub2Zmc2V0SGVpZ2h0PT09MCxzWzBdLnN0eWxlLmRpc3BsYXk9IiIs
c1sxXS5zdHlsZS5kaXNwbGF5PSJub25lIix0LnJlbGlhYmxlSGlkZGVuT2Zmc2V0cz1jJiZzWzBd
Lm9mZnNldEhlaWdodD09PTAsci5pbm5lckhUTUw9IiIsci5zdHlsZS5jc3NUZXh0PSJib3gtc2l6
aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LXdlYmtpdC1ib3gtc2l6
aW5nOmJvcmRlci1ib3g7cGFkZGluZzoxcHg7Ym9yZGVyOjFweDtkaXNwbGF5OmJsb2NrO3dpZHRo
OjRweDttYXJnaW4tdG9wOjElO3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxJTsiLHQuYm94U2l6aW5n
PXIub2Zmc2V0V2lkdGg9PT00LHQuZG9lc05vdEluY2x1ZGVNYXJnaW5JbkJvZHlPZmZzZXQ9YS5v
ZmZzZXRUb3AhPT0xLGUuZ2V0Q29tcHV0ZWRTdHlsZSYmKHQucGl4ZWxQb3NpdGlvbj0oZS5nZXRD
b21wdXRlZFN0eWxlKHIsbnVsbCl8fHt9KS50b3AhPT0iMSUiLHQuYm94U2l6aW5nUmVsaWFibGU9
KGUuZ2V0Q29tcHV0ZWRTdHlsZShyLG51bGwpfHx7d2lkdGg6IjRweCJ9KS53aWR0aD09PSI0cHgi
LG89aS5jcmVhdGVFbGVtZW50KCJkaXYiKSxvLnN0eWxlLmNzc1RleHQ9ci5zdHlsZS5jc3NUZXh0
PXUsby5zdHlsZS5tYXJnaW5SaWdodD1vLnN0eWxlLndpZHRoPSIwIixyLnN0eWxlLndpZHRoPSIx
cHgiLHIuYXBwZW5kQ2hpbGQobyksdC5yZWxpYWJsZU1hcmdpblJpZ2h0PSFwYXJzZUZsb2F0KChl
LmdldENvbXB1dGVkU3R5bGUobyxudWxsKXx8e30pLm1hcmdpblJpZ2h0KSksdHlwZW9mIHIuc3R5
bGUuem9vbSE9InVuZGVmaW5lZCImJihyLmlubmVySFRNTD0iIixyLnN0eWxlLmNzc1RleHQ9dSsi
d2lkdGg6MXB4O3BhZGRpbmc6MXB4O2Rpc3BsYXk6aW5saW5lO3pvb206MSIsdC5pbmxpbmVCbG9j
a05lZWRzTGF5b3V0PXIub2Zmc2V0V2lkdGg9PT0zLHIuc3R5bGUuZGlzcGxheT0iYmxvY2siLHIu
c3R5bGUub3ZlcmZsb3c9InZpc2libGUiLHIuaW5uZXJIVE1MPSI8ZGl2PjwvZGl2PiIsci5maXJz
dENoaWxkLnN0eWxlLndpZHRoPSI1cHgiLHQuc2hyaW5rV3JhcEJsb2Nrcz1yLm9mZnNldFdpZHRo
IT09MyxuLnN0eWxlLnpvb209MSksYS5yZW1vdmVDaGlsZChuKSxuPXI9cz1vPW51bGx9KSxhLnJl
bW92ZUNoaWxkKHApLG49cj1zPW89dT1hPXA9bnVsbCx0fSgpO3ZhciBEPS8oPzpce1tcc1xTXSpc
fXxcW1tcc1xTXSpcXSkkLyxQPS8oW0EtWl0pL2c7di5leHRlbmQoe2NhY2hlOnt9LGRlbGV0ZWRJ
ZHM6W10sdXVpZDowLGV4cGFuZG86ImpRdWVyeSIrKHYuZm4uanF1ZXJ5K01hdGgucmFuZG9tKCkp
LnJlcGxhY2UoL1xEL2csIiIpLG5vRGF0YTp7ZW1iZWQ6ITAsb2JqZWN0OiJjbHNpZDpEMjdDREI2
RS1BRTZELTExY2YtOTZCOC00NDQ1NTM1NDAwMDAiLGFwcGxldDohMH0saGFzRGF0YTpmdW5jdGlv
bihlKXtyZXR1cm4gZT1lLm5vZGVUeXBlP3YuY2FjaGVbZVt2LmV4cGFuZG9dXTplW3YuZXhwYW5k
b10sISFlJiYhQihlKX0sZGF0YTpmdW5jdGlvbihlLG4scixpKXtpZighdi5hY2NlcHREYXRhKGUp
KXJldHVybjt2YXIgcyxvLHU9di5leHBhbmRvLGE9dHlwZW9mIG49PSJzdHJpbmciLGY9ZS5ub2Rl
VHlwZSxsPWY/di5jYWNoZTplLGM9Zj9lW3VdOmVbdV0mJnU7aWYoKCFjfHwhbFtjXXx8IWkmJiFs
W2NdLmRhdGEpJiZhJiZyPT09dClyZXR1cm47Y3x8KGY/ZVt1XT1jPXYuZGVsZXRlZElkcy5wb3Ao
KXx8di5ndWlkKys6Yz11KSxsW2NdfHwobFtjXT17fSxmfHwobFtjXS50b0pTT049di5ub29wKSk7
aWYodHlwZW9mIG49PSJvYmplY3QifHx0eXBlb2Ygbj09ImZ1bmN0aW9uIilpP2xbY109di5leHRl
bmQobFtjXSxuKTpsW2NdLmRhdGE9di5leHRlbmQobFtjXS5kYXRhLG4pO3JldHVybiBzPWxbY10s
aXx8KHMuZGF0YXx8KHMuZGF0YT17fSkscz1zLmRhdGEpLHIhPT10JiYoc1t2LmNhbWVsQ2FzZShu
KV09ciksYT8obz1zW25dLG89PW51bGwmJihvPXNbdi5jYW1lbENhc2UobildKSk6bz1zLG99LHJl
bW92ZURhdGE6ZnVuY3Rpb24oZSx0LG4pe2lmKCF2LmFjY2VwdERhdGEoZSkpcmV0dXJuO3ZhciBy
LGkscyxvPWUubm9kZVR5cGUsdT1vP3YuY2FjaGU6ZSxhPW8/ZVt2LmV4cGFuZG9dOnYuZXhwYW5k
bztpZighdVthXSlyZXR1cm47aWYodCl7cj1uP3VbYV06dVthXS5kYXRhO2lmKHIpe3YuaXNBcnJh
eSh0KXx8KHQgaW4gcj90PVt0XToodD12LmNhbWVsQ2FzZSh0KSx0IGluIHI/dD1bdF06dD10LnNw
bGl0KCIgIikpKTtmb3IoaT0wLHM9dC5sZW5ndGg7aTxzO2krKylkZWxldGUgclt0W2ldXTtpZigh
KG4/Qjp2LmlzRW1wdHlPYmplY3QpKHIpKXJldHVybn19aWYoIW4pe2RlbGV0ZSB1W2FdLmRhdGE7
aWYoIUIodVthXSkpcmV0dXJufW8/di5jbGVhbkRhdGEoW2VdLCEwKTp2LnN1cHBvcnQuZGVsZXRl
RXhwYW5kb3x8dSE9dS53aW5kb3c/ZGVsZXRlIHVbYV06dVthXT1udWxsfSxfZGF0YTpmdW5jdGlv
bihlLHQsbil7cmV0dXJuIHYuZGF0YShlLHQsbiwhMCl9LGFjY2VwdERhdGE6ZnVuY3Rpb24oZSl7
dmFyIHQ9ZS5ub2RlTmFtZSYmdi5ub0RhdGFbZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXTtyZXR1
cm4hdHx8dCE9PSEwJiZlLmdldEF0dHJpYnV0ZSgiY2xhc3NpZCIpPT09dH19KSx2LmZuLmV4dGVu
ZCh7ZGF0YTpmdW5jdGlvbihlLG4pe3ZhciByLGkscyxvLHUsYT10aGlzWzBdLGY9MCxsPW51bGw7
aWYoZT09PXQpe2lmKHRoaXMubGVuZ3RoKXtsPXYuZGF0YShhKTtpZihhLm5vZGVUeXBlPT09MSYm
IXYuX2RhdGEoYSwicGFyc2VkQXR0cnMiKSl7cz1hLmF0dHJpYnV0ZXM7Zm9yKHU9cy5sZW5ndGg7
Zjx1O2YrKylvPXNbZl0ubmFtZSxvLmluZGV4T2YoImRhdGEtIil8fChvPXYuY2FtZWxDYXNlKG8u
c3Vic3RyaW5nKDUpKSxIKGEsbyxsW29dKSk7di5fZGF0YShhLCJwYXJzZWRBdHRycyIsITApfX1y
ZXR1cm4gbH1yZXR1cm4gdHlwZW9mIGU9PSJvYmplY3QiP3RoaXMuZWFjaChmdW5jdGlvbigpe3Yu
ZGF0YSh0aGlzLGUpfSk6KHI9ZS5zcGxpdCgiLiIsMiksclsxXT1yWzFdPyIuIityWzFdOiIiLGk9
clsxXSsiISIsdi5hY2Nlc3ModGhpcyxmdW5jdGlvbihuKXtpZihuPT09dClyZXR1cm4gbD10aGlz
LnRyaWdnZXJIYW5kbGVyKCJnZXREYXRhIitpLFtyWzBdXSksbD09PXQmJmEmJihsPXYuZGF0YShh
LGUpLGw9SChhLGUsbCkpLGw9PT10JiZyWzFdP3RoaXMuZGF0YShyWzBdKTpsO3JbMV09bix0aGlz
LmVhY2goZnVuY3Rpb24oKXt2YXIgdD12KHRoaXMpO3QudHJpZ2dlckhhbmRsZXIoInNldERhdGEi
K2ksciksdi5kYXRhKHRoaXMsZSxuKSx0LnRyaWdnZXJIYW5kbGVyKCJjaGFuZ2VEYXRhIitpLHIp
fSl9LG51bGwsbixhcmd1bWVudHMubGVuZ3RoPjEsbnVsbCwhMSkpfSxyZW1vdmVEYXRhOmZ1bmN0
aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2LnJlbW92ZURhdGEodGhpcyxlKX0p
fX0pLHYuZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI7aWYoZSlyZXR1cm4gdD0o
dHx8ImZ4IikrInF1ZXVlIixyPXYuX2RhdGEoZSx0KSxuJiYoIXJ8fHYuaXNBcnJheShuKT9yPXYu
X2RhdGEoZSx0LHYubWFrZUFycmF5KG4pKTpyLnB1c2gobikpLHJ8fFtdfSxkZXF1ZXVlOmZ1bmN0
aW9uKGUsdCl7dD10fHwiZngiO3ZhciBuPXYucXVldWUoZSx0KSxyPW4ubGVuZ3RoLGk9bi5zaGlm
dCgpLHM9di5fcXVldWVIb29rcyhlLHQpLG89ZnVuY3Rpb24oKXt2LmRlcXVldWUoZSx0KX07aT09
PSJpbnByb2dyZXNzIiYmKGk9bi5zaGlmdCgpLHItLSksaSYmKHQ9PT0iZngiJiZuLnVuc2hpZnQo
ImlucHJvZ3Jlc3MiKSxkZWxldGUgcy5zdG9wLGkuY2FsbChlLG8scykpLCFyJiZzJiZzLmVtcHR5
LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10KyJxdWV1ZUhvb2tzIjty
ZXR1cm4gdi5fZGF0YShlLG4pfHx2Ll9kYXRhKGUsbix7ZW1wdHk6di5DYWxsYmFja3MoIm9uY2Ug
bWVtb3J5IikuYWRkKGZ1bmN0aW9uKCl7di5yZW1vdmVEYXRhKGUsdCsicXVldWUiLCEwKSx2LnJl
bW92ZURhdGEoZSxuLCEwKX0pfSl9fSksdi5mbi5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGUsbil7
dmFyIHI9MjtyZXR1cm4gdHlwZW9mIGUhPSJzdHJpbmciJiYobj1lLGU9ImZ4IixyLS0pLGFyZ3Vt
ZW50cy5sZW5ndGg8cj92LnF1ZXVlKHRoaXNbMF0sZSk6bj09PXQ/dGhpczp0aGlzLmVhY2goZnVu
Y3Rpb24oKXt2YXIgdD12LnF1ZXVlKHRoaXMsZSxuKTt2Ll9xdWV1ZUhvb2tzKHRoaXMsZSksZT09
PSJmeCImJnRbMF0hPT0iaW5wcm9ncmVzcyImJnYuZGVxdWV1ZSh0aGlzLGUpfSl9LGRlcXVldWU6
ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3YuZGVxdWV1ZSh0aGlzLGUp
fSl9LGRlbGF5OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9di5meD92LmZ4LnNwZWVkc1tlXXx8ZTpl
LHQ9dHx8ImZ4Iix0aGlzLnF1ZXVlKHQsZnVuY3Rpb24odCxuKXt2YXIgcj1zZXRUaW1lb3V0KHQs
ZSk7bi5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHIpfX0pfSxjbGVhclF1ZXVlOmZ1bmN0
aW9uKGUpe3JldHVybiB0aGlzLnF1ZXVlKGV8fCJmeCIsW10pfSxwcm9taXNlOmZ1bmN0aW9uKGUs
bil7dmFyIHIsaT0xLHM9di5EZWZlcnJlZCgpLG89dGhpcyx1PXRoaXMubGVuZ3RoLGE9ZnVuY3Rp
b24oKXstLWl8fHMucmVzb2x2ZVdpdGgobyxbb10pfTt0eXBlb2YgZSE9InN0cmluZyImJihuPWUs
ZT10KSxlPWV8fCJmeCI7d2hpbGUodS0tKXI9di5fZGF0YShvW3VdLGUrInF1ZXVlSG9va3MiKSxy
JiZyLmVtcHR5JiYoaSsrLHIuZW1wdHkuYWRkKGEpKTtyZXR1cm4gYSgpLHMucHJvbWlzZShuKX19
KTt2YXIgaixGLEkscT0vW1x0XHJcbl0vZyxSPS9cci9nLFU9L14oPzpidXR0b258aW5wdXQpJC9p
LHo9L14oPzpidXR0b258aW5wdXR8b2JqZWN0fHNlbGVjdHx0ZXh0YXJlYSkkL2ksVz0vXmEoPzpy
ZWF8KSQvaSxYPS9eKD86YXV0b2ZvY3VzfGF1dG9wbGF5fGFzeW5jfGNoZWNrZWR8Y29udHJvbHN8
ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJl
ZHxzY29wZWR8c2VsZWN0ZWQpJC9pLFY9di5zdXBwb3J0LmdldFNldEF0dHJpYnV0ZTt2LmZuLmV4
dGVuZCh7YXR0cjpmdW5jdGlvbihlLHQpe3JldHVybiB2LmFjY2Vzcyh0aGlzLHYuYXR0cixlLHQs
YXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5l
YWNoKGZ1bmN0aW9uKCl7di5yZW1vdmVBdHRyKHRoaXMsZSl9KX0scHJvcDpmdW5jdGlvbihlLHQp
e3JldHVybiB2LmFjY2Vzcyh0aGlzLHYucHJvcCxlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVt
b3ZlUHJvcDpmdW5jdGlvbihlKXtyZXR1cm4gZT12LnByb3BGaXhbZV18fGUsdGhpcy5lYWNoKGZ1
bmN0aW9uKCl7dHJ5e3RoaXNbZV09dCxkZWxldGUgdGhpc1tlXX1jYXRjaChuKXt9fSl9LGFkZENs
YXNzOmZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLHMsbyx1O2lmKHYuaXNGdW5jdGlvbihlKSlyZXR1
cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3YodGhpcykuYWRkQ2xhc3MoZS5jYWxsKHRoaXMsdCx0
aGlzLmNsYXNzTmFtZSkpfSk7aWYoZSYmdHlwZW9mIGU9PSJzdHJpbmciKXt0PWUuc3BsaXQoeSk7
Zm9yKG49MCxyPXRoaXMubGVuZ3RoO248cjtuKyspe2k9dGhpc1tuXTtpZihpLm5vZGVUeXBlPT09
MSlpZighaS5jbGFzc05hbWUmJnQubGVuZ3RoPT09MSlpLmNsYXNzTmFtZT1lO2Vsc2V7cz0iICIr
aS5jbGFzc05hbWUrIiAiO2ZvcihvPTAsdT10Lmxlbmd0aDtvPHU7bysrKXMuaW5kZXhPZigiICIr
dFtvXSsiICIpPDAmJihzKz10W29dKyIgIik7aS5jbGFzc05hbWU9di50cmltKHMpfX19cmV0dXJu
IHRoaXN9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGUpe3ZhciBuLHIsaSxzLG8sdSxhO2lmKHYuaXNG
dW5jdGlvbihlKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3YodGhpcykucmVtb3ZlQ2xh
c3MoZS5jYWxsKHRoaXMsdCx0aGlzLmNsYXNzTmFtZSkpfSk7aWYoZSYmdHlwZW9mIGU9PSJzdHJp
bmcifHxlPT09dCl7bj0oZXx8IiIpLnNwbGl0KHkpO2Zvcih1PTAsYT10aGlzLmxlbmd0aDt1PGE7
dSsrKXtpPXRoaXNbdV07aWYoaS5ub2RlVHlwZT09PTEmJmkuY2xhc3NOYW1lKXtyPSgiICIraS5j
bGFzc05hbWUrIiAiKS5yZXBsYWNlKHEsIiAiKTtmb3Iocz0wLG89bi5sZW5ndGg7czxvO3MrKyl3
aGlsZShyLmluZGV4T2YoIiAiK25bc10rIiAiKT49MClyPXIucmVwbGFjZSgiICIrbltzXSsiICIs
IiAiKTtpLmNsYXNzTmFtZT1lP3YudHJpbShyKToiIn19fXJldHVybiB0aGlzfSx0b2dnbGVDbGFz
czpmdW5jdGlvbihlLHQpe3ZhciBuPXR5cGVvZiBlLHI9dHlwZW9mIHQ9PSJib29sZWFuIjtyZXR1
cm4gdi5pc0Z1bmN0aW9uKGUpP3RoaXMuZWFjaChmdW5jdGlvbihuKXt2KHRoaXMpLnRvZ2dsZUNs
YXNzKGUuY2FsbCh0aGlzLG4sdGhpcy5jbGFzc05hbWUsdCksdCl9KTp0aGlzLmVhY2goZnVuY3Rp
b24oKXtpZihuPT09InN0cmluZyIpe3ZhciBpLHM9MCxvPXYodGhpcyksdT10LGE9ZS5zcGxpdCh5
KTt3aGlsZShpPWFbcysrXSl1PXI/dTohby5oYXNDbGFzcyhpKSxvW3U/ImFkZENsYXNzIjoicmVt
b3ZlQ2xhc3MiXShpKX1lbHNlIGlmKG49PT0idW5kZWZpbmVkInx8bj09PSJib29sZWFuIil0aGlz
LmNsYXNzTmFtZSYmdi5fZGF0YSh0aGlzLCJfX2NsYXNzTmFtZV9fIix0aGlzLmNsYXNzTmFtZSks
dGhpcy5jbGFzc05hbWU9dGhpcy5jbGFzc05hbWV8fGU9PT0hMT8iIjp2Ll9kYXRhKHRoaXMsIl9f
Y2xhc3NOYW1lX18iKXx8IiJ9KX0saGFzQ2xhc3M6ZnVuY3Rpb24oZSl7dmFyIHQ9IiAiK2UrIiAi
LG49MCxyPXRoaXMubGVuZ3RoO2Zvcig7bjxyO24rKylpZih0aGlzW25dLm5vZGVUeXBlPT09MSYm
KCIgIit0aGlzW25dLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UocSwiICIpLmluZGV4T2YodCk+PTAp
cmV0dXJuITA7cmV0dXJuITF9LHZhbDpmdW5jdGlvbihlKXt2YXIgbixyLGkscz10aGlzWzBdO2lm
KCFhcmd1bWVudHMubGVuZ3RoKXtpZihzKXJldHVybiBuPXYudmFsSG9va3Nbcy50eXBlXXx8di52
YWxIb29rc1tzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLG4mJiJnZXQiaW4gbiYmKHI9bi5nZXQo
cywidmFsdWUiKSkhPT10P3I6KHI9cy52YWx1ZSx0eXBlb2Ygcj09InN0cmluZyI/ci5yZXBsYWNl
KFIsIiIpOnI9PW51bGw/IiI6cik7cmV0dXJufXJldHVybiBpPXYuaXNGdW5jdGlvbihlKSx0aGlz
LmVhY2goZnVuY3Rpb24ocil7dmFyIHMsbz12KHRoaXMpO2lmKHRoaXMubm9kZVR5cGUhPT0xKXJl
dHVybjtpP3M9ZS5jYWxsKHRoaXMscixvLnZhbCgpKTpzPWUscz09bnVsbD9zPSIiOnR5cGVvZiBz
PT0ibnVtYmVyIj9zKz0iIjp2LmlzQXJyYXkocykmJihzPXYubWFwKHMsZnVuY3Rpb24oZSl7cmV0
dXJuIGU9PW51bGw/IiI6ZSsiIn0pKSxuPXYudmFsSG9va3NbdGhpcy50eXBlXXx8di52YWxIb29r
c1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldO2lmKCFufHwhKCJzZXQiaW4gbil8fG4uc2V0
KHRoaXMscywidmFsdWUiKT09PXQpdGhpcy52YWx1ZT1zfSl9fSksdi5leHRlbmQoe3ZhbEhvb2tz
OntvcHRpb246e2dldDpmdW5jdGlvbihlKXt2YXIgdD1lLmF0dHJpYnV0ZXMudmFsdWU7cmV0dXJu
IXR8fHQuc3BlY2lmaWVkP2UudmFsdWU6ZS50ZXh0fX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oZSl7
dmFyIHQsbixyPWUub3B0aW9ucyxpPWUuc2VsZWN0ZWRJbmRleCxzPWUudHlwZT09PSJzZWxlY3Qt
b25lInx8aTwwLG89cz9udWxsOltdLHU9cz9pKzE6ci5sZW5ndGgsYT1pPDA/dTpzP2k6MDtmb3Io
O2E8dTthKyspe249clthXTtpZigobi5zZWxlY3RlZHx8YT09PWkpJiYodi5zdXBwb3J0Lm9wdERp
c2FibGVkPyFuLmRpc2FibGVkOm4uZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpPT09bnVsbCkmJigh
bi5wYXJlbnROb2RlLmRpc2FibGVkfHwhdi5ub2RlTmFtZShuLnBhcmVudE5vZGUsIm9wdGdyb3Vw
IikpKXt0PXYobikudmFsKCk7aWYocylyZXR1cm4gdDtvLnB1c2godCl9fXJldHVybiBvfSxzZXQ6
ZnVuY3Rpb24oZSx0KXt2YXIgbj12Lm1ha2VBcnJheSh0KTtyZXR1cm4gdihlKS5maW5kKCJvcHRp
b24iKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZD12LmluQXJyYXkodih0aGlzKS52YWwo
KSxuKT49MH0pLG4ubGVuZ3RofHwoZS5zZWxlY3RlZEluZGV4PS0xKSxufX19LGF0dHJGbjp7fSxh
dHRyOmZ1bmN0aW9uKGUsbixyLGkpe3ZhciBzLG8sdSxhPWUubm9kZVR5cGU7aWYoIWV8fGE9PT0z
fHxhPT09OHx8YT09PTIpcmV0dXJuO2lmKGkmJnYuaXNGdW5jdGlvbih2LmZuW25dKSlyZXR1cm4g
dihlKVtuXShyKTtpZih0eXBlb2YgZS5nZXRBdHRyaWJ1dGU9PSJ1bmRlZmluZWQiKXJldHVybiB2
LnByb3AoZSxuLHIpO3U9YSE9PTF8fCF2LmlzWE1MRG9jKGUpLHUmJihuPW4udG9Mb3dlckNhc2Uo
KSxvPXYuYXR0ckhvb2tzW25dfHwoWC50ZXN0KG4pP0Y6aikpO2lmKHIhPT10KXtpZihyPT09bnVs
bCl7di5yZW1vdmVBdHRyKGUsbik7cmV0dXJufXJldHVybiBvJiYic2V0ImluIG8mJnUmJihzPW8u
c2V0KGUscixuKSkhPT10P3M6KGUuc2V0QXR0cmlidXRlKG4scisiIikscil9cmV0dXJuIG8mJiJn
ZXQiaW4gbyYmdSYmKHM9by5nZXQoZSxuKSkhPT1udWxsP3M6KHM9ZS5nZXRBdHRyaWJ1dGUobiks
cz09PW51bGw/dDpzKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxzLG89MDtp
Zih0JiZlLm5vZGVUeXBlPT09MSl7cj10LnNwbGl0KHkpO2Zvcig7bzxyLmxlbmd0aDtvKyspaT1y
W29dLGkmJihuPXYucHJvcEZpeFtpXXx8aSxzPVgudGVzdChpKSxzfHx2LmF0dHIoZSxpLCIiKSxl
LnJlbW92ZUF0dHJpYnV0ZShWP2k6bikscyYmbiBpbiBlJiYoZVtuXT0hMSkpfX0sYXR0ckhvb2tz
Ont0eXBlOntzZXQ6ZnVuY3Rpb24oZSx0KXtpZihVLnRlc3QoZS5ub2RlTmFtZSkmJmUucGFyZW50
Tm9kZSl2LmVycm9yKCJ0eXBlIHByb3BlcnR5IGNhbid0IGJlIGNoYW5nZWQiKTtlbHNlIGlmKCF2
LnN1cHBvcnQucmFkaW9WYWx1ZSYmdD09PSJyYWRpbyImJnYubm9kZU5hbWUoZSwiaW5wdXQiKSl7
dmFyIG49ZS52YWx1ZTtyZXR1cm4gZS5zZXRBdHRyaWJ1dGUoInR5cGUiLHQpLG4mJihlLnZhbHVl
PW4pLHR9fX0sdmFsdWU6e2dldDpmdW5jdGlvbihlLHQpe3JldHVybiBqJiZ2Lm5vZGVOYW1lKGUs
ImJ1dHRvbiIpP2ouZ2V0KGUsdCk6dCBpbiBlP2UudmFsdWU6bnVsbH0sc2V0OmZ1bmN0aW9uKGUs
dCxuKXtpZihqJiZ2Lm5vZGVOYW1lKGUsImJ1dHRvbiIpKXJldHVybiBqLnNldChlLHQsbik7ZS52
YWx1ZT10fX19LHByb3BGaXg6e3RhYmluZGV4OiJ0YWJJbmRleCIscmVhZG9ubHk6InJlYWRPbmx5
IiwiZm9yIjoiaHRtbEZvciIsImNsYXNzIjoiY2xhc3NOYW1lIixtYXhsZW5ndGg6Im1heExlbmd0
aCIsY2VsbHNwYWNpbmc6ImNlbGxTcGFjaW5nIixjZWxscGFkZGluZzoiY2VsbFBhZGRpbmciLHJv
d3NwYW46InJvd1NwYW4iLGNvbHNwYW46ImNvbFNwYW4iLHVzZW1hcDoidXNlTWFwIixmcmFtZWJv
cmRlcjoiZnJhbWVCb3JkZXIiLGNvbnRlbnRlZGl0YWJsZToiY29udGVudEVkaXRhYmxlIn0scHJv
cDpmdW5jdGlvbihlLG4scil7dmFyIGkscyxvLHU9ZS5ub2RlVHlwZTtpZighZXx8dT09PTN8fHU9
PT04fHx1PT09MilyZXR1cm47cmV0dXJuIG89dSE9PTF8fCF2LmlzWE1MRG9jKGUpLG8mJihuPXYu
cHJvcEZpeFtuXXx8bixzPXYucHJvcEhvb2tzW25dKSxyIT09dD9zJiYic2V0ImluIHMmJihpPXMu
c2V0KGUscixuKSkhPT10P2k6ZVtuXT1yOnMmJiJnZXQiaW4gcyYmKGk9cy5nZXQoZSxuKSkhPT1u
dWxsP2k6ZVtuXX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciBuPWUu
Z2V0QXR0cmlidXRlTm9kZSgidGFiaW5kZXgiKTtyZXR1cm4gbiYmbi5zcGVjaWZpZWQ/cGFyc2VJ
bnQobi52YWx1ZSwxMCk6ei50ZXN0KGUubm9kZU5hbWUpfHxXLnRlc3QoZS5ub2RlTmFtZSkmJmUu
aHJlZj8wOnR9fX19KSxGPXtnZXQ6ZnVuY3Rpb24oZSxuKXt2YXIgcixpPXYucHJvcChlLG4pO3Jl
dHVybiBpPT09ITB8fHR5cGVvZiBpIT0iYm9vbGVhbiImJihyPWUuZ2V0QXR0cmlidXRlTm9kZShu
KSkmJnIubm9kZVZhbHVlIT09ITE/bi50b0xvd2VyQ2FzZSgpOnR9LHNldDpmdW5jdGlvbihlLHQs
bil7dmFyIHI7cmV0dXJuIHQ9PT0hMT92LnJlbW92ZUF0dHIoZSxuKToocj12LnByb3BGaXhbbl18
fG4sciBpbiBlJiYoZVtyXT0hMCksZS5zZXRBdHRyaWJ1dGUobixuLnRvTG93ZXJDYXNlKCkpKSxu
fX0sVnx8KEk9e25hbWU6ITAsaWQ6ITAsY29vcmRzOiEwfSxqPXYudmFsSG9va3MuYnV0dG9uPXtn
ZXQ6ZnVuY3Rpb24oZSxuKXt2YXIgcjtyZXR1cm4gcj1lLmdldEF0dHJpYnV0ZU5vZGUobiksciYm
KElbbl0/ci52YWx1ZSE9PSIiOnIuc3BlY2lmaWVkKT9yLnZhbHVlOnR9LHNldDpmdW5jdGlvbihl
LHQsbil7dmFyIHI9ZS5nZXRBdHRyaWJ1dGVOb2RlKG4pO3JldHVybiByfHwocj1pLmNyZWF0ZUF0
dHJpYnV0ZShuKSxlLnNldEF0dHJpYnV0ZU5vZGUocikpLHIudmFsdWU9dCsiIn19LHYuZWFjaChb
IndpZHRoIiwiaGVpZ2h0Il0sZnVuY3Rpb24oZSx0KXt2LmF0dHJIb29rc1t0XT12LmV4dGVuZCh2
LmF0dHJIb29rc1t0XSx7c2V0OmZ1bmN0aW9uKGUsbil7aWYobj09PSIiKXJldHVybiBlLnNldEF0
dHJpYnV0ZSh0LCJhdXRvIiksbn19KX0pLHYuYXR0ckhvb2tzLmNvbnRlbnRlZGl0YWJsZT17Z2V0
OmouZ2V0LHNldDpmdW5jdGlvbihlLHQsbil7dD09PSIiJiYodD0iZmFsc2UiKSxqLnNldChlLHQs
bil9fSksdi5zdXBwb3J0LmhyZWZOb3JtYWxpemVkfHx2LmVhY2goWyJocmVmIiwic3JjIiwid2lk
dGgiLCJoZWlnaHQiXSxmdW5jdGlvbihlLG4pe3YuYXR0ckhvb2tzW25dPXYuZXh0ZW5kKHYuYXR0
ckhvb2tzW25dLHtnZXQ6ZnVuY3Rpb24oZSl7dmFyIHI9ZS5nZXRBdHRyaWJ1dGUobiwyKTtyZXR1
cm4gcj09PW51bGw/dDpyfX0pfSksdi5zdXBwb3J0LnN0eWxlfHwodi5hdHRySG9va3Muc3R5bGU9
e2dldDpmdW5jdGlvbihlKXtyZXR1cm4gZS5zdHlsZS5jc3NUZXh0LnRvTG93ZXJDYXNlKCl8fHR9
LHNldDpmdW5jdGlvbihlLHQpe3JldHVybiBlLnN0eWxlLmNzc1RleHQ9dCsiIn19KSx2LnN1cHBv
cnQub3B0U2VsZWN0ZWR8fCh2LnByb3BIb29rcy5zZWxlY3RlZD12LmV4dGVuZCh2LnByb3BIb29r
cy5zZWxlY3RlZCx7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyZW50Tm9kZTtyZXR1cm4gdCYm
KHQuc2VsZWN0ZWRJbmRleCx0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4
KSxudWxsfX0pKSx2LnN1cHBvcnQuZW5jdHlwZXx8KHYucHJvcEZpeC5lbmN0eXBlPSJlbmNvZGlu
ZyIpLHYuc3VwcG9ydC5jaGVja09ufHx2LmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rp
b24oKXt2LnZhbEhvb2tzW3RoaXNdPXtnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0QXR0cmli
dXRlKCJ2YWx1ZSIpPT09bnVsbD8ib24iOmUudmFsdWV9fX0pLHYuZWFjaChbInJhZGlvIiwiY2hl
Y2tib3giXSxmdW5jdGlvbigpe3YudmFsSG9va3NbdGhpc109di5leHRlbmQodi52YWxIb29rc1t0
aGlzXSx7c2V0OmZ1bmN0aW9uKGUsdCl7aWYodi5pc0FycmF5KHQpKXJldHVybiBlLmNoZWNrZWQ9
di5pbkFycmF5KHYoZSkudmFsKCksdCk+PTB9fSl9KTt2YXIgJD0vXig/OnRleHRhcmVhfGlucHV0
fHNlbGVjdCkkL2ksSj0vXihbXlwuXSp8KSg/OlwuKC4rKXwpJC8sSz0vKD86Xnxccylob3Zlcihc
LlxTK3wpXGIvLFE9L15rZXkvLEc9L14oPzptb3VzZXxjb250ZXh0bWVudSl8Y2xpY2svLFk9L14o
Pzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvLFo9ZnVuY3Rpb24oZSl7cmV0dXJuIHYuZXZl
bnQuc3BlY2lhbC5ob3Zlcj9lOmUucmVwbGFjZShLLCJtb3VzZWVudGVyJDEgbW91c2VsZWF2ZSQx
Iil9O3YuZXZlbnQ9e2FkZDpmdW5jdGlvbihlLG4scixpLHMpe3ZhciBvLHUsYSxmLGwsYyxoLHAs
ZCxtLGc7aWYoZS5ub2RlVHlwZT09PTN8fGUubm9kZVR5cGU9PT04fHwhbnx8IXJ8fCEobz12Ll9k
YXRhKGUpKSlyZXR1cm47ci5oYW5kbGVyJiYoZD1yLHI9ZC5oYW5kbGVyLHM9ZC5zZWxlY3Rvciks
ci5ndWlkfHwoci5ndWlkPXYuZ3VpZCsrKSxhPW8uZXZlbnRzLGF8fChvLmV2ZW50cz1hPXt9KSx1
PW8uaGFuZGxlLHV8fChvLmhhbmRsZT11PWZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2Ygdj09InVu
ZGVmaW5lZCJ8fCEhZSYmdi5ldmVudC50cmlnZ2VyZWQ9PT1lLnR5cGU/dDp2LmV2ZW50LmRpc3Bh
dGNoLmFwcGx5KHUuZWxlbSxhcmd1bWVudHMpfSx1LmVsZW09ZSksbj12LnRyaW0oWihuKSkuc3Bs
aXQoIiAiKTtmb3IoZj0wO2Y8bi5sZW5ndGg7ZisrKXtsPUouZXhlYyhuW2ZdKXx8W10sYz1sWzFd
LGg9KGxbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxnPXYuZXZlbnQuc3BlY2lhbFtjXXx8e30s
Yz0ocz9nLmRlbGVnYXRlVHlwZTpnLmJpbmRUeXBlKXx8YyxnPXYuZXZlbnQuc3BlY2lhbFtjXXx8
e30scD12LmV4dGVuZCh7dHlwZTpjLG9yaWdUeXBlOmxbMV0sZGF0YTppLGhhbmRsZXI6cixndWlk
OnIuZ3VpZCxzZWxlY3RvcjpzLG5lZWRzQ29udGV4dDpzJiZ2LmV4cHIubWF0Y2gubmVlZHNDb250
ZXh0LnRlc3QocyksbmFtZXNwYWNlOmguam9pbigiLiIpfSxkKSxtPWFbY107aWYoIW0pe209YVtj
XT1bXSxtLmRlbGVnYXRlQ291bnQ9MDtpZighZy5zZXR1cHx8Zy5zZXR1cC5jYWxsKGUsaSxoLHUp
PT09ITEpZS5hZGRFdmVudExpc3RlbmVyP2UuYWRkRXZlbnRMaXN0ZW5lcihjLHUsITEpOmUuYXR0
YWNoRXZlbnQmJmUuYXR0YWNoRXZlbnQoIm9uIitjLHUpfWcuYWRkJiYoZy5hZGQuY2FsbChlLHAp
LHAuaGFuZGxlci5ndWlkfHwocC5oYW5kbGVyLmd1aWQ9ci5ndWlkKSkscz9tLnNwbGljZShtLmRl
bGVnYXRlQ291bnQrKywwLHApOm0ucHVzaChwKSx2LmV2ZW50Lmdsb2JhbFtjXT0hMH1lPW51bGx9
LGdsb2JhbDp7fSxyZW1vdmU6ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgcyxvLHUsYSxmLGwsYyxo
LHAsZCxtLGc9di5oYXNEYXRhKGUpJiZ2Ll9kYXRhKGUpO2lmKCFnfHwhKGg9Zy5ldmVudHMpKXJl
dHVybjt0PXYudHJpbShaKHR8fCIiKSkuc3BsaXQoIiAiKTtmb3Iocz0wO3M8dC5sZW5ndGg7cysr
KXtvPUouZXhlYyh0W3NdKXx8W10sdT1hPW9bMV0sZj1vWzJdO2lmKCF1KXtmb3IodSBpbiBoKXYu
ZXZlbnQucmVtb3ZlKGUsdSt0W3NdLG4sciwhMCk7Y29udGludWV9cD12LmV2ZW50LnNwZWNpYWxb
dV18fHt9LHU9KHI/cC5kZWxlZ2F0ZVR5cGU6cC5iaW5kVHlwZSl8fHUsZD1oW3VdfHxbXSxsPWQu
bGVuZ3RoLGY9Zj9uZXcgUmVnRXhwKCIoXnxcXC4pIitmLnNwbGl0KCIuIikuc29ydCgpLmpvaW4o
IlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpOm51bGw7Zm9yKGM9MDtjPGQubGVuZ3RoO2MrKylt
PWRbY10sKGl8fGE9PT1tLm9yaWdUeXBlKSYmKCFufHxuLmd1aWQ9PT1tLmd1aWQpJiYoIWZ8fGYu
dGVzdChtLm5hbWVzcGFjZSkpJiYoIXJ8fHI9PT1tLnNlbGVjdG9yfHxyPT09IioqIiYmbS5zZWxl
Y3RvcikmJihkLnNwbGljZShjLS0sMSksbS5zZWxlY3RvciYmZC5kZWxlZ2F0ZUNvdW50LS0scC5y
ZW1vdmUmJnAucmVtb3ZlLmNhbGwoZSxtKSk7ZC5sZW5ndGg9PT0wJiZsIT09ZC5sZW5ndGgmJigo
IXAudGVhcmRvd258fHAudGVhcmRvd24uY2FsbChlLGYsZy5oYW5kbGUpPT09ITEpJiZ2LnJlbW92
ZUV2ZW50KGUsdSxnLmhhbmRsZSksZGVsZXRlIGhbdV0pfXYuaXNFbXB0eU9iamVjdChoKSYmKGRl
bGV0ZSBnLmhhbmRsZSx2LnJlbW92ZURhdGEoZSwiZXZlbnRzIiwhMCkpfSxjdXN0b21FdmVudDp7
Z2V0RGF0YTohMCxzZXREYXRhOiEwLGNoYW5nZURhdGE6ITB9LHRyaWdnZXI6ZnVuY3Rpb24obixy
LHMsbyl7aWYoIXN8fHMubm9kZVR5cGUhPT0zJiZzLm5vZGVUeXBlIT09OCl7dmFyIHUsYSxmLGws
YyxoLHAsZCxtLGcseT1uLnR5cGV8fG4sYj1bXTtpZihZLnRlc3QoeSt2LmV2ZW50LnRyaWdnZXJl
ZCkpcmV0dXJuO3kuaW5kZXhPZigiISIpPj0wJiYoeT15LnNsaWNlKDAsLTEpLGE9ITApLHkuaW5k
ZXhPZigiLiIpPj0wJiYoYj15LnNwbGl0KCIuIikseT1iLnNoaWZ0KCksYi5zb3J0KCkpO2lmKCgh
c3x8di5ldmVudC5jdXN0b21FdmVudFt5XSkmJiF2LmV2ZW50Lmdsb2JhbFt5XSlyZXR1cm47bj10
eXBlb2Ygbj09Im9iamVjdCI/blt2LmV4cGFuZG9dP246bmV3IHYuRXZlbnQoeSxuKTpuZXcgdi5F
dmVudCh5KSxuLnR5cGU9eSxuLmlzVHJpZ2dlcj0hMCxuLmV4Y2x1c2l2ZT1hLG4ubmFtZXNwYWNl
PWIuam9pbigiLiIpLG4ubmFtZXNwYWNlX3JlPW4ubmFtZXNwYWNlP25ldyBSZWdFeHAoIihefFxc
LikiK2Iuam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIik6bnVsbCxoPXkuaW5kZXhPZigi
OiIpPDA/Im9uIit5OiIiO2lmKCFzKXt1PXYuY2FjaGU7Zm9yKGYgaW4gdSl1W2ZdLmV2ZW50cyYm
dVtmXS5ldmVudHNbeV0mJnYuZXZlbnQudHJpZ2dlcihuLHIsdVtmXS5oYW5kbGUuZWxlbSwhMCk7
cmV0dXJufW4ucmVzdWx0PXQsbi50YXJnZXR8fChuLnRhcmdldD1zKSxyPXIhPW51bGw/di5tYWtl
QXJyYXkocik6W10sci51bnNoaWZ0KG4pLHA9di5ldmVudC5zcGVjaWFsW3ldfHx7fTtpZihwLnRy
aWdnZXImJnAudHJpZ2dlci5hcHBseShzLHIpPT09ITEpcmV0dXJuO209W1tzLHAuYmluZFR5cGV8
fHldXTtpZighbyYmIXAubm9CdWJibGUmJiF2LmlzV2luZG93KHMpKXtnPXAuZGVsZWdhdGVUeXBl
fHx5LGw9WS50ZXN0KGcreSk/czpzLnBhcmVudE5vZGU7Zm9yKGM9cztsO2w9bC5wYXJlbnROb2Rl
KW0ucHVzaChbbCxnXSksYz1sO2M9PT0ocy5vd25lckRvY3VtZW50fHxpKSYmbS5wdXNoKFtjLmRl
ZmF1bHRWaWV3fHxjLnBhcmVudFdpbmRvd3x8ZSxnXSl9Zm9yKGY9MDtmPG0ubGVuZ3RoJiYhbi5p
c1Byb3BhZ2F0aW9uU3RvcHBlZCgpO2YrKylsPW1bZl1bMF0sbi50eXBlPW1bZl1bMV0sZD0odi5f
ZGF0YShsLCJldmVudHMiKXx8e30pW24udHlwZV0mJnYuX2RhdGEobCwiaGFuZGxlIiksZCYmZC5h
cHBseShsLHIpLGQ9aCYmbFtoXSxkJiZ2LmFjY2VwdERhdGEobCkmJmQuYXBwbHkmJmQuYXBwbHko
bCxyKT09PSExJiZuLnByZXZlbnREZWZhdWx0KCk7cmV0dXJuIG4udHlwZT15LCFvJiYhbi5pc0Rl
ZmF1bHRQcmV2ZW50ZWQoKSYmKCFwLl9kZWZhdWx0fHxwLl9kZWZhdWx0LmFwcGx5KHMub3duZXJE
b2N1bWVudCxyKT09PSExKSYmKHkhPT0iY2xpY2sifHwhdi5ub2RlTmFtZShzLCJhIikpJiZ2LmFj
Y2VwdERhdGEocykmJmgmJnNbeV0mJih5IT09ImZvY3VzIiYmeSE9PSJibHVyInx8bi50YXJnZXQu
b2Zmc2V0V2lkdGghPT0wKSYmIXYuaXNXaW5kb3cocykmJihjPXNbaF0sYyYmKHNbaF09bnVsbCks
di5ldmVudC50cmlnZ2VyZWQ9eSxzW3ldKCksdi5ldmVudC50cmlnZ2VyZWQ9dCxjJiYoc1toXT1j
KSksbi5yZXN1bHR9cmV0dXJufSxkaXNwYXRjaDpmdW5jdGlvbihuKXtuPXYuZXZlbnQuZml4KG58
fGUuZXZlbnQpO3ZhciByLGkscyxvLHUsYSxmLGMsaCxwLGQ9KHYuX2RhdGEodGhpcywiZXZlbnRz
Iil8fHt9KVtuLnR5cGVdfHxbXSxtPWQuZGVsZWdhdGVDb3VudCxnPWwuY2FsbChhcmd1bWVudHMp
LHk9IW4uZXhjbHVzaXZlJiYhbi5uYW1lc3BhY2UsYj12LmV2ZW50LnNwZWNpYWxbbi50eXBlXXx8
e30sdz1bXTtnWzBdPW4sbi5kZWxlZ2F0ZVRhcmdldD10aGlzO2lmKGIucHJlRGlzcGF0Y2gmJmIu
cHJlRGlzcGF0Y2guY2FsbCh0aGlzLG4pPT09ITEpcmV0dXJuO2lmKG0mJighbi5idXR0b258fG4u
dHlwZSE9PSJjbGljayIpKWZvcihzPW4udGFyZ2V0O3MhPXRoaXM7cz1zLnBhcmVudE5vZGV8fHRo
aXMpaWYocy5kaXNhYmxlZCE9PSEwfHxuLnR5cGUhPT0iY2xpY2siKXt1PXt9LGY9W107Zm9yKHI9
MDtyPG07cisrKWM9ZFtyXSxoPWMuc2VsZWN0b3IsdVtoXT09PXQmJih1W2hdPWMubmVlZHNDb250
ZXh0P3YoaCx0aGlzKS5pbmRleChzKT49MDp2LmZpbmQoaCx0aGlzLG51bGwsW3NdKS5sZW5ndGgp
LHVbaF0mJmYucHVzaChjKTtmLmxlbmd0aCYmdy5wdXNoKHtlbGVtOnMsbWF0Y2hlczpmfSl9ZC5s
ZW5ndGg+bSYmdy5wdXNoKHtlbGVtOnRoaXMsbWF0Y2hlczpkLnNsaWNlKG0pfSk7Zm9yKHI9MDty
PHcubGVuZ3RoJiYhbi5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpO3IrKyl7YT13W3JdLG4uY3VycmVu
dFRhcmdldD1hLmVsZW07Zm9yKGk9MDtpPGEubWF0Y2hlcy5sZW5ndGgmJiFuLmlzSW1tZWRpYXRl
UHJvcGFnYXRpb25TdG9wcGVkKCk7aSsrKXtjPWEubWF0Y2hlc1tpXTtpZih5fHwhbi5uYW1lc3Bh
Y2UmJiFjLm5hbWVzcGFjZXx8bi5uYW1lc3BhY2VfcmUmJm4ubmFtZXNwYWNlX3JlLnRlc3QoYy5u
YW1lc3BhY2UpKW4uZGF0YT1jLmRhdGEsbi5oYW5kbGVPYmo9YyxvPSgodi5ldmVudC5zcGVjaWFs
W2Mub3JpZ1R5cGVdfHx7fSkuaGFuZGxlfHxjLmhhbmRsZXIpLmFwcGx5KGEuZWxlbSxnKSxvIT09
dCYmKG4ucmVzdWx0PW8sbz09PSExJiYobi5wcmV2ZW50RGVmYXVsdCgpLG4uc3RvcFByb3BhZ2F0
aW9uKCkpKX19cmV0dXJuIGIucG9zdERpc3BhdGNoJiZiLnBvc3REaXNwYXRjaC5jYWxsKHRoaXMs
biksbi5yZXN1bHR9LHByb3BzOiJhdHRyQ2hhbmdlIGF0dHJOYW1lIHJlbGF0ZWROb2RlIHNyY0Vs
ZW1lbnQgYWx0S2V5IGJ1YmJsZXMgY2FuY2VsYWJsZSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZXZl
bnRQaGFzZSBtZXRhS2V5IHJlbGF0ZWRUYXJnZXQgc2hpZnRLZXkgdGFyZ2V0IHRpbWVTdGFtcCB2
aWV3IHdoaWNoIi5zcGxpdCgiICIpLGZpeEhvb2tzOnt9LGtleUhvb2tzOntwcm9wczoiY2hhciBj
aGFyQ29kZSBrZXkga2V5Q29kZSIuc3BsaXQoIiAiKSxmaWx0ZXI6ZnVuY3Rpb24oZSx0KXtyZXR1
cm4gZS53aGljaD09bnVsbCYmKGUud2hpY2g9dC5jaGFyQ29kZSE9bnVsbD90LmNoYXJDb2RlOnQu
a2V5Q29kZSksZX19LG1vdXNlSG9va3M6e3Byb3BzOiJidXR0b24gYnV0dG9ucyBjbGllbnRYIGNs
aWVudFkgZnJvbUVsZW1lbnQgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBhZ2VZIHNjcmVlblggc2Ny
ZWVuWSB0b0VsZW1lbnQiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGUsbil7dmFyIHIscyxv
LHU9bi5idXR0b24sYT1uLmZyb21FbGVtZW50O3JldHVybiBlLnBhZ2VYPT1udWxsJiZuLmNsaWVu
dFghPW51bGwmJihyPWUudGFyZ2V0Lm93bmVyRG9jdW1lbnR8fGkscz1yLmRvY3VtZW50RWxlbWVu
dCxvPXIuYm9keSxlLnBhZ2VYPW4uY2xpZW50WCsocyYmcy5zY3JvbGxMZWZ0fHxvJiZvLnNjcm9s
bExlZnR8fDApLShzJiZzLmNsaWVudExlZnR8fG8mJm8uY2xpZW50TGVmdHx8MCksZS5wYWdlWT1u
LmNsaWVudFkrKHMmJnMuc2Nyb2xsVG9wfHxvJiZvLnNjcm9sbFRvcHx8MCktKHMmJnMuY2xpZW50
VG9wfHxvJiZvLmNsaWVudFRvcHx8MCkpLCFlLnJlbGF0ZWRUYXJnZXQmJmEmJihlLnJlbGF0ZWRU
YXJnZXQ9YT09PWUudGFyZ2V0P24udG9FbGVtZW50OmEpLCFlLndoaWNoJiZ1IT09dCYmKGUud2hp
Y2g9dSYxPzE6dSYyPzM6dSY0PzI6MCksZX19LGZpeDpmdW5jdGlvbihlKXtpZihlW3YuZXhwYW5k
b10pcmV0dXJuIGU7dmFyIHQsbixyPWUscz12LmV2ZW50LmZpeEhvb2tzW2UudHlwZV18fHt9LG89
cy5wcm9wcz90aGlzLnByb3BzLmNvbmNhdChzLnByb3BzKTp0aGlzLnByb3BzO2U9di5FdmVudChy
KTtmb3IodD1vLmxlbmd0aDt0OyluPW9bLS10XSxlW25dPXJbbl07cmV0dXJuIGUudGFyZ2V0fHwo
ZS50YXJnZXQ9ci5zcmNFbGVtZW50fHxpKSxlLnRhcmdldC5ub2RlVHlwZT09PTMmJihlLnRhcmdl
dD1lLnRhcmdldC5wYXJlbnROb2RlKSxlLm1ldGFLZXk9ISFlLm1ldGFLZXkscy5maWx0ZXI/cy5m
aWx0ZXIoZSxyKTplfSxzcGVjaWFsOntsb2FkOntub0J1YmJsZTohMH0sZm9jdXM6e2RlbGVnYXRl
VHlwZToiZm9jdXNpbiJ9LGJsdXI6e2RlbGVnYXRlVHlwZToiZm9jdXNvdXQifSxiZWZvcmV1bmxv
YWQ6e3NldHVwOmZ1bmN0aW9uKGUsdCxuKXt2LmlzV2luZG93KHRoaXMpJiYodGhpcy5vbmJlZm9y
ZXVubG9hZD1uKX0sdGVhcmRvd246ZnVuY3Rpb24oZSx0KXt0aGlzLm9uYmVmb3JldW5sb2FkPT09
dCYmKHRoaXMub25iZWZvcmV1bmxvYWQ9bnVsbCl9fX0sc2ltdWxhdGU6ZnVuY3Rpb24oZSx0LG4s
cil7dmFyIGk9di5leHRlbmQobmV3IHYuRXZlbnQsbix7dHlwZTplLGlzU2ltdWxhdGVkOiEwLG9y
aWdpbmFsRXZlbnQ6e319KTtyP3YuZXZlbnQudHJpZ2dlcihpLG51bGwsdCk6di5ldmVudC5kaXNw
YXRjaC5jYWxsKHQsaSksaS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmbi5wcmV2ZW50RGVmYXVsdCgp
fX0sdi5ldmVudC5oYW5kbGU9di5ldmVudC5kaXNwYXRjaCx2LnJlbW92ZUV2ZW50PWkucmVtb3Zl
RXZlbnRMaXN0ZW5lcj9mdW5jdGlvbihlLHQsbil7ZS5yZW1vdmVFdmVudExpc3RlbmVyJiZlLnJl
bW92ZUV2ZW50TGlzdGVuZXIodCxuLCExKX06ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSJvbiIrdDtl
LmRldGFjaEV2ZW50JiYodHlwZW9mIGVbcl09PSJ1bmRlZmluZWQiJiYoZVtyXT1udWxsKSxlLmRl
dGFjaEV2ZW50KHIsbikpfSx2LkV2ZW50PWZ1bmN0aW9uKGUsdCl7aWYoISh0aGlzIGluc3RhbmNl
b2Ygdi5FdmVudCkpcmV0dXJuIG5ldyB2LkV2ZW50KGUsdCk7ZSYmZS50eXBlPyh0aGlzLm9yaWdp
bmFsRXZlbnQ9ZSx0aGlzLnR5cGU9ZS50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWUuZGVm
YXVsdFByZXZlbnRlZHx8ZS5yZXR1cm5WYWx1ZT09PSExfHxlLmdldFByZXZlbnREZWZhdWx0JiZl
LmdldFByZXZlbnREZWZhdWx0KCk/dHQ6ZXQpOnRoaXMudHlwZT1lLHQmJnYuZXh0ZW5kKHRoaXMs
dCksdGhpcy50aW1lU3RhbXA9ZSYmZS50aW1lU3RhbXB8fHYubm93KCksdGhpc1t2LmV4cGFuZG9d
PSEwfSx2LkV2ZW50LnByb3RvdHlwZT17cHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt0aGlzLmlz
RGVmYXVsdFByZXZlbnRlZD10dDt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7aWYoIWUpcmV0dXJu
O2UucHJldmVudERlZmF1bHQ/ZS5wcmV2ZW50RGVmYXVsdCgpOmUucmV0dXJuVmFsdWU9ITF9LHN0
b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9dHQ7dmFy
IGU9dGhpcy5vcmlnaW5hbEV2ZW50O2lmKCFlKXJldHVybjtlLnN0b3BQcm9wYWdhdGlvbiYmZS5z
dG9wUHJvcGFnYXRpb24oKSxlLmNhbmNlbEJ1YmJsZT0hMH0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0
aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD10dCx0aGlz
LnN0b3BQcm9wYWdhdGlvbigpfSxpc0RlZmF1bHRQcmV2ZW50ZWQ6ZXQsaXNQcm9wYWdhdGlvblN0
b3BwZWQ6ZXQsaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6ZXR9LHYuZWFjaCh7bW91c2Vl
bnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9LGZ1bmN0aW9uKGUsdCl7di5l
dmVudC5zcGVjaWFsW2VdPXtkZWxlZ2F0ZVR5cGU6dCxiaW5kVHlwZTp0LGhhbmRsZTpmdW5jdGlv
bihlKXt2YXIgbixyPXRoaXMsaT1lLnJlbGF0ZWRUYXJnZXQscz1lLmhhbmRsZU9iaixvPXMuc2Vs
ZWN0b3I7aWYoIWl8fGkhPT1yJiYhdi5jb250YWlucyhyLGkpKWUudHlwZT1zLm9yaWdUeXBlLG49
cy5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlLnR5cGU9dDtyZXR1cm4gbn19fSksdi5z
dXBwb3J0LnN1Ym1pdEJ1YmJsZXN8fCh2LmV2ZW50LnNwZWNpYWwuc3VibWl0PXtzZXR1cDpmdW5j
dGlvbigpe2lmKHYubm9kZU5hbWUodGhpcywiZm9ybSIpKXJldHVybiExO3YuZXZlbnQuYWRkKHRo
aXMsImNsaWNrLl9zdWJtaXQga2V5cHJlc3MuX3N1Ym1pdCIsZnVuY3Rpb24oZSl7dmFyIG49ZS50
YXJnZXQscj12Lm5vZGVOYW1lKG4sImlucHV0Iil8fHYubm9kZU5hbWUobiwiYnV0dG9uIik/bi5m
b3JtOnQ7ciYmIXYuX2RhdGEociwiX3N1Ym1pdF9hdHRhY2hlZCIpJiYodi5ldmVudC5hZGQociwi
c3VibWl0Ll9zdWJtaXQiLGZ1bmN0aW9uKGUpe2UuX3N1Ym1pdF9idWJibGU9ITB9KSx2Ll9kYXRh
KHIsIl9zdWJtaXRfYXR0YWNoZWQiLCEwKSl9KX0scG9zdERpc3BhdGNoOmZ1bmN0aW9uKGUpe2Uu
X3N1Ym1pdF9idWJibGUmJihkZWxldGUgZS5fc3VibWl0X2J1YmJsZSx0aGlzLnBhcmVudE5vZGUm
JiFlLmlzVHJpZ2dlciYmdi5ldmVudC5zaW11bGF0ZSgic3VibWl0Iix0aGlzLnBhcmVudE5vZGUs
ZSwhMCkpfSx0ZWFyZG93bjpmdW5jdGlvbigpe2lmKHYubm9kZU5hbWUodGhpcywiZm9ybSIpKXJl
dHVybiExO3YuZXZlbnQucmVtb3ZlKHRoaXMsIi5fc3VibWl0Iil9fSksdi5zdXBwb3J0LmNoYW5n
ZUJ1YmJsZXN8fCh2LmV2ZW50LnNwZWNpYWwuY2hhbmdlPXtzZXR1cDpmdW5jdGlvbigpe2lmKCQu
dGVzdCh0aGlzLm5vZGVOYW1lKSl7aWYodGhpcy50eXBlPT09ImNoZWNrYm94Inx8dGhpcy50eXBl
PT09InJhZGlvIil2LmV2ZW50LmFkZCh0aGlzLCJwcm9wZXJ0eWNoYW5nZS5fY2hhbmdlIixmdW5j
dGlvbihlKXtlLm9yaWdpbmFsRXZlbnQucHJvcGVydHlOYW1lPT09ImNoZWNrZWQiJiYodGhpcy5f
anVzdF9jaGFuZ2VkPSEwKX0pLHYuZXZlbnQuYWRkKHRoaXMsImNsaWNrLl9jaGFuZ2UiLGZ1bmN0
aW9uKGUpe3RoaXMuX2p1c3RfY2hhbmdlZCYmIWUuaXNUcmlnZ2VyJiYodGhpcy5fanVzdF9jaGFu
Z2VkPSExKSx2LmV2ZW50LnNpbXVsYXRlKCJjaGFuZ2UiLHRoaXMsZSwhMCl9KTtyZXR1cm4hMX12
LmV2ZW50LmFkZCh0aGlzLCJiZWZvcmVhY3RpdmF0ZS5fY2hhbmdlIixmdW5jdGlvbihlKXt2YXIg
dD1lLnRhcmdldDskLnRlc3QodC5ub2RlTmFtZSkmJiF2Ll9kYXRhKHQsIl9jaGFuZ2VfYXR0YWNo
ZWQiKSYmKHYuZXZlbnQuYWRkKHQsImNoYW5nZS5fY2hhbmdlIixmdW5jdGlvbihlKXt0aGlzLnBh
cmVudE5vZGUmJiFlLmlzU2ltdWxhdGVkJiYhZS5pc1RyaWdnZXImJnYuZXZlbnQuc2ltdWxhdGUo
ImNoYW5nZSIsdGhpcy5wYXJlbnROb2RlLGUsITApfSksdi5fZGF0YSh0LCJfY2hhbmdlX2F0dGFj
aGVkIiwhMCkpfSl9LGhhbmRsZTpmdW5jdGlvbihlKXt2YXIgdD1lLnRhcmdldDtpZih0aGlzIT09
dHx8ZS5pc1NpbXVsYXRlZHx8ZS5pc1RyaWdnZXJ8fHQudHlwZSE9PSJyYWRpbyImJnQudHlwZSE9
PSJjaGVja2JveCIpcmV0dXJuIGUuaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVu
dHMpfSx0ZWFyZG93bjpmdW5jdGlvbigpe3JldHVybiB2LmV2ZW50LnJlbW92ZSh0aGlzLCIuX2No
YW5nZSIpLCEkLnRlc3QodGhpcy5ub2RlTmFtZSl9fSksdi5zdXBwb3J0LmZvY3VzaW5CdWJibGVz
fHx2LmVhY2goe2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0aW9uKGUsdCl7
dmFyIG49MCxyPWZ1bmN0aW9uKGUpe3YuZXZlbnQuc2ltdWxhdGUodCxlLnRhcmdldCx2LmV2ZW50
LmZpeChlKSwhMCl9O3YuZXZlbnQuc3BlY2lhbFt0XT17c2V0dXA6ZnVuY3Rpb24oKXtuKys9PT0w
JiZpLmFkZEV2ZW50TGlzdGVuZXIoZSxyLCEwKX0sdGVhcmRvd246ZnVuY3Rpb24oKXstLW49PT0w
JiZpLnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxyLCEwKX19fSksdi5mbi5leHRlbmQoe29uOmZ1bmN0
aW9uKGUsbixyLGkscyl7dmFyIG8sdTtpZih0eXBlb2YgZT09Im9iamVjdCIpe3R5cGVvZiBuIT0i
c3RyaW5nIiYmKHI9cnx8bixuPXQpO2Zvcih1IGluIGUpdGhpcy5vbih1LG4scixlW3VdLHMpO3Jl
dHVybiB0aGlzfXI9PW51bGwmJmk9PW51bGw/KGk9bixyPW49dCk6aT09bnVsbCYmKHR5cGVvZiBu
PT0ic3RyaW5nIj8oaT1yLHI9dCk6KGk9cixyPW4sbj10KSk7aWYoaT09PSExKWk9ZXQ7ZWxzZSBp
ZighaSlyZXR1cm4gdGhpcztyZXR1cm4gcz09PTEmJihvPWksaT1mdW5jdGlvbihlKXtyZXR1cm4g
digpLm9mZihlKSxvLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0saS5ndWlkPW8uZ3VpZHx8KG8uZ3Vp
ZD12Lmd1aWQrKykpLHRoaXMuZWFjaChmdW5jdGlvbigpe3YuZXZlbnQuYWRkKHRoaXMsZSxpLHIs
bil9KX0sb25lOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLm9uKGUsdCxuLHIsMSl9LG9m
ZjpmdW5jdGlvbihlLG4scil7dmFyIGkscztpZihlJiZlLnByZXZlbnREZWZhdWx0JiZlLmhhbmRs
ZU9iailyZXR1cm4gaT1lLmhhbmRsZU9iaix2KGUuZGVsZWdhdGVUYXJnZXQpLm9mZihpLm5hbWVz
cGFjZT9pLm9yaWdUeXBlKyIuIitpLm5hbWVzcGFjZTppLm9yaWdUeXBlLGkuc2VsZWN0b3IsaS5o
YW5kbGVyKSx0aGlzO2lmKHR5cGVvZiBlPT0ib2JqZWN0Iil7Zm9yKHMgaW4gZSl0aGlzLm9mZihz
LG4sZVtzXSk7cmV0dXJuIHRoaXN9aWYobj09PSExfHx0eXBlb2Ygbj09ImZ1bmN0aW9uIilyPW4s
bj10O3JldHVybiByPT09ITEmJihyPWV0KSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2LmV2ZW50LnJl
bW92ZSh0aGlzLGUscixuKX0pfSxiaW5kOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5vbihl
LG51bGwsdCxuKX0sdW5iaW5kOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMub2ZmKGUsbnVsbCx0
KX0sbGl2ZTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHYodGhpcy5jb250ZXh0KS5vbihlLHRoaXMu
c2VsZWN0b3IsdCxuKSx0aGlzfSxkaWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdih0aGlzLmNvbnRl
eHQpLm9mZihlLHRoaXMuc2VsZWN0b3J8fCIqKiIsdCksdGhpc30sZGVsZWdhdGU6ZnVuY3Rpb24o
ZSx0LG4scil7cmV0dXJuIHRoaXMub24odCxlLG4scil9LHVuZGVsZWdhdGU6ZnVuY3Rpb24oZSx0
LG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT90aGlzLm9mZihlLCIqKiIpOnRoaXMub2Zm
KHQsZXx8IioqIixuKX0sdHJpZ2dlcjpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmVhY2goZnVu
Y3Rpb24oKXt2LmV2ZW50LnRyaWdnZXIoZSx0LHRoaXMpfSl9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0
aW9uKGUsdCl7aWYodGhpc1swXSlyZXR1cm4gdi5ldmVudC50cmlnZ2VyKGUsdCx0aGlzWzBdLCEw
KX0sdG9nZ2xlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cyxuPWUuZ3VpZHx8di5ndWlkKyss
cj0wLGk9ZnVuY3Rpb24obil7dmFyIGk9KHYuX2RhdGEodGhpcywibGFzdFRvZ2dsZSIrZS5ndWlk
KXx8MCklcjtyZXR1cm4gdi5fZGF0YSh0aGlzLCJsYXN0VG9nZ2xlIitlLmd1aWQsaSsxKSxuLnBy
ZXZlbnREZWZhdWx0KCksdFtpXS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fCExfTtpLmd1aWQ9bjt3
aGlsZShyPHQubGVuZ3RoKXRbcisrXS5ndWlkPW47cmV0dXJuIHRoaXMuY2xpY2soaSl9LGhvdmVy
OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMubW91c2VlbnRlcihlKS5tb3VzZWxlYXZlKHR8fGUp
fX0pLHYuZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9s
bCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNl
b3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQg
a2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSxmdW5j
dGlvbihlLHQpe3YuZm5bdF09ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbj09bnVsbCYmKG49ZSxlPW51
bGwpLGFyZ3VtZW50cy5sZW5ndGg+MD90aGlzLm9uKHQsbnVsbCxlLG4pOnRoaXMudHJpZ2dlcih0
KX0sUS50ZXN0KHQpJiYodi5ldmVudC5maXhIb29rc1t0XT12LmV2ZW50LmtleUhvb2tzKSxHLnRl
c3QodCkmJih2LmV2ZW50LmZpeEhvb2tzW3RdPXYuZXZlbnQubW91c2VIb29rcyl9KSxmdW5jdGlv
bihlLHQpe2Z1bmN0aW9uIG50KGUsdCxuLHIpe249bnx8W10sdD10fHxnO3ZhciBpLHMsYSxmLGw9
dC5ub2RlVHlwZTtpZighZXx8dHlwZW9mIGUhPSJzdHJpbmciKXJldHVybiBuO2lmKGwhPT0xJiZs
IT09OSlyZXR1cm5bXTthPW8odCk7aWYoIWEmJiFyKWlmKGk9Ui5leGVjKGUpKWlmKGY9aVsxXSl7
aWYobD09PTkpe3M9dC5nZXRFbGVtZW50QnlJZChmKTtpZighc3x8IXMucGFyZW50Tm9kZSlyZXR1
cm4gbjtpZihzLmlkPT09ZilyZXR1cm4gbi5wdXNoKHMpLG59ZWxzZSBpZih0Lm93bmVyRG9jdW1l
bnQmJihzPXQub3duZXJEb2N1bWVudC5nZXRFbGVtZW50QnlJZChmKSkmJnUodCxzKSYmcy5pZD09
PWYpcmV0dXJuIG4ucHVzaChzKSxufWVsc2V7aWYoaVsyXSlyZXR1cm4gUy5hcHBseShuLHguY2Fs
bCh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpLDApKSxuO2lmKChmPWlbM10pJiZaJiZ0LmdldEVs
ZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIFMuYXBwbHkobix4LmNhbGwodC5nZXRFbGVtZW50c0J5
Q2xhc3NOYW1lKGYpLDApKSxufXJldHVybiB2dChlLnJlcGxhY2UoaiwiJDEiKSx0LG4scixhKX1m
dW5jdGlvbiBydChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49dC5ub2RlTmFtZS50b0xvd2Vy
Q2FzZSgpO3JldHVybiBuPT09ImlucHV0IiYmdC50eXBlPT09ZX19ZnVuY3Rpb24gaXQoZSl7cmV0
dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4obj09
PSJpbnB1dCJ8fG49PT0iYnV0dG9uIikmJnQudHlwZT09PWV9fWZ1bmN0aW9uIHN0KGUpe3JldHVy
biBOKGZ1bmN0aW9uKHQpe3JldHVybiB0PSt0LE4oZnVuY3Rpb24obixyKXt2YXIgaSxzPWUoW10s
bi5sZW5ndGgsdCksbz1zLmxlbmd0aDt3aGlsZShvLS0pbltpPXNbb11dJiYobltpXT0hKHJbaV09
bltpXSkpfSl9KX1mdW5jdGlvbiBvdChlLHQsbil7aWYoZT09PXQpcmV0dXJuIG47dmFyIHI9ZS5u
ZXh0U2libGluZzt3aGlsZShyKXtpZihyPT09dClyZXR1cm4tMTtyPXIubmV4dFNpYmxpbmd9cmV0
dXJuIDF9ZnVuY3Rpb24gdXQoZSx0KXt2YXIgbixyLHMsbyx1LGEsZixsPUxbZF1bZSsiICJdO2lm
KGwpcmV0dXJuIHQ/MDpsLnNsaWNlKDApO3U9ZSxhPVtdLGY9aS5wcmVGaWx0ZXI7d2hpbGUodSl7
aWYoIW58fChyPUYuZXhlYyh1KSkpciYmKHU9dS5zbGljZShyWzBdLmxlbmd0aCl8fHUpLGEucHVz
aChzPVtdKTtuPSExO2lmKHI9SS5leGVjKHUpKXMucHVzaChuPW5ldyBtKHIuc2hpZnQoKSkpLHU9
dS5zbGljZShuLmxlbmd0aCksbi50eXBlPXJbMF0ucmVwbGFjZShqLCIgIik7Zm9yKG8gaW4gaS5m
aWx0ZXIpKHI9SltvXS5leGVjKHUpKSYmKCFmW29dfHwocj1mW29dKHIpKSkmJihzLnB1c2gobj1u
ZXcgbShyLnNoaWZ0KCkpKSx1PXUuc2xpY2Uobi5sZW5ndGgpLG4udHlwZT1vLG4ubWF0Y2hlcz1y
KTtpZighbilicmVha31yZXR1cm4gdD91Lmxlbmd0aDp1P250LmVycm9yKGUpOkwoZSxhKS5zbGlj
ZSgwKX1mdW5jdGlvbiBhdChlLHQscil7dmFyIGk9dC5kaXIscz1yJiZ0LmRpcj09PSJwYXJlbnRO
b2RlIixvPXcrKztyZXR1cm4gdC5maXJzdD9mdW5jdGlvbih0LG4scil7d2hpbGUodD10W2ldKWlm
KHN8fHQubm9kZVR5cGU9PT0xKXJldHVybiBlKHQsbixyKX06ZnVuY3Rpb24odCxyLHUpe2lmKCF1
KXt2YXIgYSxmPWIrIiAiK28rIiAiLGw9ZituO3doaWxlKHQ9dFtpXSlpZihzfHx0Lm5vZGVUeXBl
PT09MSl7aWYoKGE9dFtkXSk9PT1sKXJldHVybiB0LnNpenNldDtpZih0eXBlb2YgYT09InN0cmlu
ZyImJmEuaW5kZXhPZihmKT09PTApe2lmKHQuc2l6c2V0KXJldHVybiB0fWVsc2V7dFtkXT1sO2lm
KGUodCxyLHUpKXJldHVybiB0LnNpenNldD0hMCx0O3Quc2l6c2V0PSExfX19ZWxzZSB3aGlsZSh0
PXRbaV0paWYoc3x8dC5ub2RlVHlwZT09PTEpaWYoZSh0LHIsdSkpcmV0dXJuIHR9fWZ1bmN0aW9u
IGZ0KGUpe3JldHVybiBlLmxlbmd0aD4xP2Z1bmN0aW9uKHQsbixyKXt2YXIgaT1lLmxlbmd0aDt3
aGlsZShpLS0paWYoIWVbaV0odCxuLHIpKXJldHVybiExO3JldHVybiEwfTplWzBdfWZ1bmN0aW9u
IGx0KGUsdCxuLHIsaSl7dmFyIHMsbz1bXSx1PTAsYT1lLmxlbmd0aCxmPXQhPW51bGw7Zm9yKDt1
PGE7dSsrKWlmKHM9ZVt1XSlpZighbnx8bihzLHIsaSkpby5wdXNoKHMpLGYmJnQucHVzaCh1KTty
ZXR1cm4gb31mdW5jdGlvbiBjdChlLHQsbixyLGkscyl7cmV0dXJuIHImJiFyW2RdJiYocj1jdChy
KSksaSYmIWlbZF0mJihpPWN0KGkscykpLE4oZnVuY3Rpb24ocyxvLHUsYSl7dmFyIGYsbCxjLGg9
W10scD1bXSxkPW8ubGVuZ3RoLHY9c3x8ZHQodHx8IioiLHUubm9kZVR5cGU/W3VdOnUsW10pLG09
ZSYmKHN8fCF0KT9sdCh2LGgsZSx1LGEpOnYsZz1uP2l8fChzP2U6ZHx8cik/W106bzptO24mJm4o
bSxnLHUsYSk7aWYocil7Zj1sdChnLHApLHIoZixbXSx1LGEpLGw9Zi5sZW5ndGg7d2hpbGUobC0t
KWlmKGM9ZltsXSlnW3BbbF1dPSEobVtwW2xdXT1jKX1pZihzKXtpZihpfHxlKXtpZihpKXtmPVtd
LGw9Zy5sZW5ndGg7d2hpbGUobC0tKShjPWdbbF0pJiZmLnB1c2gobVtsXT1jKTtpKG51bGwsZz1b
XSxmLGEpfWw9Zy5sZW5ndGg7d2hpbGUobC0tKShjPWdbbF0pJiYoZj1pP1QuY2FsbChzLGMpOmhb
bF0pPi0xJiYoc1tmXT0hKG9bZl09YykpfX1lbHNlIGc9bHQoZz09PW8/Zy5zcGxpY2UoZCxnLmxl
bmd0aCk6ZyksaT9pKG51bGwsbyxnLGEpOlMuYXBwbHkobyxnKX0pfWZ1bmN0aW9uIGh0KGUpe3Zh
ciB0LG4scixzPWUubGVuZ3RoLG89aS5yZWxhdGl2ZVtlWzBdLnR5cGVdLHU9b3x8aS5yZWxhdGl2
ZVsiICJdLGE9bz8xOjAsZj1hdChmdW5jdGlvbihlKXtyZXR1cm4gZT09PXR9LHUsITApLGw9YXQo
ZnVuY3Rpb24oZSl7cmV0dXJuIFQuY2FsbCh0LGUpPi0xfSx1LCEwKSxoPVtmdW5jdGlvbihlLG4s
cil7cmV0dXJuIW8mJihyfHxuIT09Yyl8fCgodD1uKS5ub2RlVHlwZT9mKGUsbixyKTpsKGUsbixy
KSl9XTtmb3IoO2E8czthKyspaWYobj1pLnJlbGF0aXZlW2VbYV0udHlwZV0paD1bYXQoZnQoaCks
bildO2Vsc2V7bj1pLmZpbHRlcltlW2FdLnR5cGVdLmFwcGx5KG51bGwsZVthXS5tYXRjaGVzKTtp
ZihuW2RdKXtyPSsrYTtmb3IoO3I8cztyKyspaWYoaS5yZWxhdGl2ZVtlW3JdLnR5cGVdKWJyZWFr
O3JldHVybiBjdChhPjEmJmZ0KGgpLGE+MSYmZS5zbGljZSgwLGEtMSkuam9pbigiIikucmVwbGFj
ZShqLCIkMSIpLG4sYTxyJiZodChlLnNsaWNlKGEscikpLHI8cyYmaHQoZT1lLnNsaWNlKHIpKSxy
PHMmJmUuam9pbigiIikpfWgucHVzaChuKX1yZXR1cm4gZnQoaCl9ZnVuY3Rpb24gcHQoZSx0KXt2
YXIgcj10Lmxlbmd0aD4wLHM9ZS5sZW5ndGg+MCxvPWZ1bmN0aW9uKHUsYSxmLGwsaCl7dmFyIHAs
ZCx2LG09W10seT0wLHc9IjAiLHg9dSYmW10sVD1oIT1udWxsLE49YyxDPXV8fHMmJmkuZmluZC5U
QUcoIioiLGgmJmEucGFyZW50Tm9kZXx8YSksaz1iKz1OPT1udWxsPzE6TWF0aC5FO1QmJihjPWEh
PT1nJiZhLG49by5lbCk7Zm9yKDsocD1DW3ddKSE9bnVsbDt3Kyspe2lmKHMmJnApe2ZvcihkPTA7
dj1lW2RdO2QrKylpZih2KHAsYSxmKSl7bC5wdXNoKHApO2JyZWFrfVQmJihiPWssbj0rK28uZWwp
fXImJigocD0hdiYmcCkmJnktLSx1JiZ4LnB1c2gocCkpfXkrPXc7aWYociYmdyE9PXkpe2Zvcihk
PTA7dj10W2RdO2QrKyl2KHgsbSxhLGYpO2lmKHUpe2lmKHk+MCl3aGlsZSh3LS0pIXhbd10mJiFt
W3ddJiYobVt3XT1FLmNhbGwobCkpO209bHQobSl9Uy5hcHBseShsLG0pLFQmJiF1JiZtLmxlbmd0
aD4wJiZ5K3QubGVuZ3RoPjEmJm50LnVuaXF1ZVNvcnQobCl9cmV0dXJuIFQmJihiPWssYz1OKSx4
fTtyZXR1cm4gby5lbD0wLHI/TihvKTpvfWZ1bmN0aW9uIGR0KGUsdCxuKXt2YXIgcj0wLGk9dC5s
ZW5ndGg7Zm9yKDtyPGk7cisrKW50KGUsdFtyXSxuKTtyZXR1cm4gbn1mdW5jdGlvbiB2dChlLHQs
bixyLHMpe3ZhciBvLHUsZixsLGMsaD11dChlKSxwPWgubGVuZ3RoO2lmKCFyJiZoLmxlbmd0aD09
PTEpe3U9aFswXT1oWzBdLnNsaWNlKDApO2lmKHUubGVuZ3RoPjImJihmPXVbMF0pLnR5cGU9PT0i
SUQiJiZ0Lm5vZGVUeXBlPT09OSYmIXMmJmkucmVsYXRpdmVbdVsxXS50eXBlXSl7dD1pLmZpbmQu
SUQoZi5tYXRjaGVzWzBdLnJlcGxhY2UoJCwiIiksdCxzKVswXTtpZighdClyZXR1cm4gbjtlPWUu
c2xpY2UodS5zaGlmdCgpLmxlbmd0aCl9Zm9yKG89Si5QT1MudGVzdChlKT8tMTp1Lmxlbmd0aC0x
O28+PTA7by0tKXtmPXVbb107aWYoaS5yZWxhdGl2ZVtsPWYudHlwZV0pYnJlYWs7aWYoYz1pLmZp
bmRbbF0paWYocj1jKGYubWF0Y2hlc1swXS5yZXBsYWNlKCQsIiIpLHoudGVzdCh1WzBdLnR5cGUp
JiZ0LnBhcmVudE5vZGV8fHQscykpe3Uuc3BsaWNlKG8sMSksZT1yLmxlbmd0aCYmdS5qb2luKCIi
KTtpZighZSlyZXR1cm4gUy5hcHBseShuLHguY2FsbChyLDApKSxuO2JyZWFrfX19cmV0dXJuIGEo
ZSxoKShyLHQscyxuLHoudGVzdChlKSksbn1mdW5jdGlvbiBtdCgpe312YXIgbixyLGkscyxvLHUs
YSxmLGwsYyxoPSEwLHA9InVuZGVmaW5lZCIsZD0oInNpemNhY2hlIitNYXRoLnJhbmRvbSgpKS5y
ZXBsYWNlKCIuIiwiIiksbT1TdHJpbmcsZz1lLmRvY3VtZW50LHk9Zy5kb2N1bWVudEVsZW1lbnQs
Yj0wLHc9MCxFPVtdLnBvcCxTPVtdLnB1c2gseD1bXS5zbGljZSxUPVtdLmluZGV4T2Z8fGZ1bmN0
aW9uKGUpe3ZhciB0PTAsbj10aGlzLmxlbmd0aDtmb3IoO3Q8bjt0KyspaWYodGhpc1t0XT09PWUp
cmV0dXJuIHQ7cmV0dXJuLTF9LE49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVtkXT10PT1udWxsfHx0
LGV9LEM9ZnVuY3Rpb24oKXt2YXIgZT17fSx0PVtdO3JldHVybiBOKGZ1bmN0aW9uKG4scil7cmV0
dXJuIHQucHVzaChuKT5pLmNhY2hlTGVuZ3RoJiZkZWxldGUgZVt0LnNoaWZ0KCldLGVbbisiICJd
PXJ9LGUpfSxrPUMoKSxMPUMoKSxBPUMoKSxPPSJbXFx4MjBcXHRcXHJcXG5cXGZdIixNPSIoPzpc
XFxcLnxbLVxcd118W15cXHgwMC1cXHhhMF0pKyIsXz1NLnJlcGxhY2UoInciLCJ3IyIpLEQ9Iihb
Kl4kfCF+XT89KSIsUD0iXFxbIitPKyIqKCIrTSsiKSIrTysiKig/OiIrRCtPKyIqKD86KFsnXCJd
KSgoPzpcXFxcLnxbXlxcXFxdKSo/KVxcM3woIitfKyIpfCl8KSIrTysiKlxcXSIsSD0iOigiK00r
IikoPzpcXCgoPzooWydcIl0pKCg/OlxcXFwufFteXFxcXF0pKj8pXFwyfChbXigpW1xcXV0qfCg/
Oig/OiIrUCsiKXxbXjpdfFxcXFwuKSp8LiopKVxcKXwpIixCPSI6KGV2ZW58b2RkfGVxfGd0fGx0
fG50aHxmaXJzdHxsYXN0KSg/OlxcKCIrTysiKigoPzotXFxkKT9cXGQqKSIrTysiKlxcKXwpKD89
W14tXXwkKSIsaj1uZXcgUmVnRXhwKCJeIitPKyIrfCgoPzpefFteXFxcXF0pKD86XFxcXC4pKiki
K08rIiskIiwiZyIpLEY9bmV3IFJlZ0V4cCgiXiIrTysiKiwiK08rIioiKSxJPW5ldyBSZWdFeHAo
Il4iK08rIiooW1xceDIwXFx0XFxyXFxuXFxmPit+XSkiK08rIioiKSxxPW5ldyBSZWdFeHAoSCks
Uj0vXig/OiMoW1x3XC1dKyl8KFx3Kyl8XC4oW1x3XC1dKykpJC8sVT0vXjpub3QvLHo9L1tceDIw
XHRcclxuXGZdKlsrfl0vLFc9Lzpub3RcKCQvLFg9L2hcZC9pLFY9L2lucHV0fHNlbGVjdHx0ZXh0
YXJlYXxidXR0b24vaSwkPS9cXCg/IVxcKS9nLEo9e0lEOm5ldyBSZWdFeHAoIl4jKCIrTSsiKSIp
LENMQVNTOm5ldyBSZWdFeHAoIl5cXC4oIitNKyIpIiksTkFNRTpuZXcgUmVnRXhwKCJeXFxbbmFt
ZT1bJ1wiXT8oIitNKyIpWydcIl0/XFxdIiksVEFHOm5ldyBSZWdFeHAoIl4oIitNLnJlcGxhY2Uo
InciLCJ3KiIpKyIpIiksQVRUUjpuZXcgUmVnRXhwKCJeIitQKSxQU0VVRE86bmV3IFJlZ0V4cCgi
XiIrSCksUE9TOm5ldyBSZWdFeHAoQiwiaSIpLENISUxEOm5ldyBSZWdFeHAoIl46KG9ubHl8bnRo
fGZpcnN0fGxhc3QpLWNoaWxkKD86XFwoIitPKyIqKGV2ZW58b2RkfCgoWystXXwpKFxcZCopbnwp
IitPKyIqKD86KFsrLV18KSIrTysiKihcXGQrKXwpKSIrTysiKlxcKXwpIiwiaSIpLG5lZWRzQ29u
dGV4dDpuZXcgUmVnRXhwKCJeIitPKyIqWz4rfl18IitCLCJpIil9LEs9ZnVuY3Rpb24oZSl7dmFy
IHQ9Zy5jcmVhdGVFbGVtZW50KCJkaXYiKTt0cnl7cmV0dXJuIGUodCl9Y2F0Y2gobil7cmV0dXJu
ITF9ZmluYWxseXt0PW51bGx9fSxRPUsoZnVuY3Rpb24oZSl7cmV0dXJuIGUuYXBwZW5kQ2hpbGQo
Zy5jcmVhdGVDb21tZW50KCIiKSksIWUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGh9
KSxHPUsoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaW5uZXJIVE1MPSI8YSBocmVmPScjJz48L2E+Iixl
LmZpcnN0Q2hpbGQmJnR5cGVvZiBlLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlIT09cCYmZS5maXJz
dENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpPT09IiMifSksWT1LKGZ1bmN0aW9uKGUpe2UuaW5u
ZXJIVE1MPSI8c2VsZWN0Pjwvc2VsZWN0PiI7dmFyIHQ9dHlwZW9mIGUubGFzdENoaWxkLmdldEF0
dHJpYnV0ZSgibXVsdGlwbGUiKTtyZXR1cm4gdCE9PSJib29sZWFuIiYmdCE9PSJzdHJpbmcifSks
Wj1LKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD0iPGRpdiBjbGFzcz0naGlkZGVuIGUn
PjwvZGl2PjxkaXYgY2xhc3M9J2hpZGRlbic+PC9kaXY+IiwhZS5nZXRFbGVtZW50c0J5Q2xhc3NO
YW1lfHwhZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoPyExOihlLmxhc3RDaGls
ZC5jbGFzc05hbWU9ImUiLGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZSIpLmxlbmd0aD09PTIp
fSksZXQ9SyhmdW5jdGlvbihlKXtlLmlkPWQrMCxlLmlubmVySFRNTD0iPGEgbmFtZT0nIitkKyIn
PjwvYT48ZGl2IG5hbWU9JyIrZCsiJz48L2Rpdj4iLHkuaW5zZXJ0QmVmb3JlKGUseS5maXJzdENo
aWxkKTt2YXIgdD1nLmdldEVsZW1lbnRzQnlOYW1lJiZnLmdldEVsZW1lbnRzQnlOYW1lKGQpLmxl
bmd0aD09PTIrZy5nZXRFbGVtZW50c0J5TmFtZShkKzApLmxlbmd0aDtyZXR1cm4gcj0hZy5nZXRF
bGVtZW50QnlJZChkKSx5LnJlbW92ZUNoaWxkKGUpLHR9KTt0cnl7eC5jYWxsKHkuY2hpbGROb2Rl
cywwKVswXS5ub2RlVHlwZX1jYXRjaCh0dCl7eD1mdW5jdGlvbihlKXt2YXIgdCxuPVtdO2Zvcig7
dD10aGlzW2VdO2UrKyluLnB1c2godCk7cmV0dXJuIG59fW50Lm1hdGNoZXM9ZnVuY3Rpb24oZSx0
KXtyZXR1cm4gbnQoZSxudWxsLG51bGwsdCl9LG50Lm1hdGNoZXNTZWxlY3Rvcj1mdW5jdGlvbihl
LHQpe3JldHVybiBudCh0LG51bGwsbnVsbCxbZV0pLmxlbmd0aD4wfSxzPW50LmdldFRleHQ9ZnVu
Y3Rpb24oZSl7dmFyIHQsbj0iIixyPTAsaT1lLm5vZGVUeXBlO2lmKGkpe2lmKGk9PT0xfHxpPT09
OXx8aT09PTExKXtpZih0eXBlb2YgZS50ZXh0Q29udGVudD09InN0cmluZyIpcmV0dXJuIGUudGV4
dENvbnRlbnQ7Zm9yKGU9ZS5maXJzdENoaWxkO2U7ZT1lLm5leHRTaWJsaW5nKW4rPXMoZSl9ZWxz
ZSBpZihpPT09M3x8aT09PTQpcmV0dXJuIGUubm9kZVZhbHVlfWVsc2UgZm9yKDt0PWVbcl07cisr
KW4rPXModCk7cmV0dXJuIG59LG89bnQuaXNYTUw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZSYmKGUub3du
ZXJEb2N1bWVudHx8ZSkuZG9jdW1lbnRFbGVtZW50O3JldHVybiB0P3Qubm9kZU5hbWUhPT0iSFRN
TCI6ITF9LHU9bnQuY29udGFpbnM9eS5jb250YWlucz9mdW5jdGlvbihlLHQpe3ZhciBuPWUubm9k
ZVR5cGU9PT05P2UuZG9jdW1lbnRFbGVtZW50OmUscj10JiZ0LnBhcmVudE5vZGU7cmV0dXJuIGU9
PT1yfHwhIShyJiZyLm5vZGVUeXBlPT09MSYmbi5jb250YWlucyYmbi5jb250YWlucyhyKSl9Onku
Y29tcGFyZURvY3VtZW50UG9zaXRpb24/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCYmISEoZS5jb21w
YXJlRG9jdW1lbnRQb3NpdGlvbih0KSYxNil9OmZ1bmN0aW9uKGUsdCl7d2hpbGUodD10LnBhcmVu
dE5vZGUpaWYodD09PWUpcmV0dXJuITA7cmV0dXJuITF9LG50LmF0dHI9ZnVuY3Rpb24oZSx0KXt2
YXIgbixyPW8oZSk7cmV0dXJuIHJ8fCh0PXQudG9Mb3dlckNhc2UoKSksKG49aS5hdHRySGFuZGxl
W3RdKT9uKGUpOnJ8fFk/ZS5nZXRBdHRyaWJ1dGUodCk6KG49ZS5nZXRBdHRyaWJ1dGVOb2RlKHQp
LG4/dHlwZW9mIGVbdF09PSJib29sZWFuIj9lW3RdP3Q6bnVsbDpuLnNwZWNpZmllZD9uLnZhbHVl
Om51bGw6bnVsbCl9LGk9bnQuc2VsZWN0b3JzPXtjYWNoZUxlbmd0aDo1MCxjcmVhdGVQc2V1ZG86
TixtYXRjaDpKLGF0dHJIYW5kbGU6Rz97fTp7aHJlZjpmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRB
dHRyaWJ1dGUoImhyZWYiLDIpfSx0eXBlOmZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEF0dHJpYnV0
ZSgidHlwZSIpfX0sZmluZDp7SUQ6cj9mdW5jdGlvbihlLHQsbil7aWYodHlwZW9mIHQuZ2V0RWxl
bWVudEJ5SWQhPT1wJiYhbil7dmFyIHI9dC5nZXRFbGVtZW50QnlJZChlKTtyZXR1cm4gciYmci5w
YXJlbnROb2RlP1tyXTpbXX19OmZ1bmN0aW9uKGUsbixyKXtpZih0eXBlb2Ygbi5nZXRFbGVtZW50
QnlJZCE9PXAmJiFyKXt2YXIgaT1uLmdldEVsZW1lbnRCeUlkKGUpO3JldHVybiBpP2kuaWQ9PT1l
fHx0eXBlb2YgaS5nZXRBdHRyaWJ1dGVOb2RlIT09cCYmaS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIp
LnZhbHVlPT09ZT9baV06dDpbXX19LFRBRzpRP2Z1bmN0aW9uKGUsdCl7aWYodHlwZW9mIHQuZ2V0
RWxlbWVudHNCeVRhZ05hbWUhPT1wKXJldHVybiB0LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpfTpm
dW5jdGlvbihlLHQpe3ZhciBuPXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSk7aWYoZT09PSIqIil7
dmFyIHIsaT1bXSxzPTA7Zm9yKDtyPW5bc107cysrKXIubm9kZVR5cGU9PT0xJiZpLnB1c2gocik7
cmV0dXJuIGl9cmV0dXJuIG59LE5BTUU6ZXQmJmZ1bmN0aW9uKGUsdCl7aWYodHlwZW9mIHQuZ2V0
RWxlbWVudHNCeU5hbWUhPT1wKXJldHVybiB0LmdldEVsZW1lbnRzQnlOYW1lKG5hbWUpfSxDTEFT
UzpaJiZmdW5jdGlvbihlLHQsbil7aWYodHlwZW9mIHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSE9
PXAmJiFuKXJldHVybiB0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZSl9fSxyZWxhdGl2ZTp7Ij4i
OntkaXI6InBhcmVudE5vZGUiLGZpcnN0OiEwfSwiICI6e2RpcjoicGFyZW50Tm9kZSJ9LCIrIjp7
ZGlyOiJwcmV2aW91c1NpYmxpbmciLGZpcnN0OiEwfSwifiI6e2RpcjoicHJldmlvdXNTaWJsaW5n
In19LHByZUZpbHRlcjp7QVRUUjpmdW5jdGlvbihlKXtyZXR1cm4gZVsxXT1lWzFdLnJlcGxhY2Uo
JCwiIiksZVszXT0oZVs0XXx8ZVs1XXx8IiIpLnJlcGxhY2UoJCwiIiksZVsyXT09PSJ+PSImJihl
WzNdPSIgIitlWzNdKyIgIiksZS5zbGljZSgwLDQpfSxDSElMRDpmdW5jdGlvbihlKXtyZXR1cm4g
ZVsxXT1lWzFdLnRvTG93ZXJDYXNlKCksZVsxXT09PSJudGgiPyhlWzJdfHxudC5lcnJvcihlWzBd
KSxlWzNdPSsoZVszXT9lWzRdKyhlWzVdfHwxKToyKihlWzJdPT09ImV2ZW4ifHxlWzJdPT09Im9k
ZCIpKSxlWzRdPSsoZVs2XStlWzddfHxlWzJdPT09Im9kZCIpKTplWzJdJiZudC5lcnJvcihlWzBd
KSxlfSxQU0VVRE86ZnVuY3Rpb24oZSl7dmFyIHQsbjtpZihKLkNISUxELnRlc3QoZVswXSkpcmV0
dXJuIG51bGw7aWYoZVszXSllWzJdPWVbM107ZWxzZSBpZih0PWVbNF0pcS50ZXN0KHQpJiYobj11
dCh0LCEwKSkmJihuPXQuaW5kZXhPZigiKSIsdC5sZW5ndGgtbiktdC5sZW5ndGgpJiYodD10LnNs
aWNlKDAsbiksZVswXT1lWzBdLnNsaWNlKDAsbikpLGVbMl09dDtyZXR1cm4gZS5zbGljZSgwLDMp
fX0sZmlsdGVyOntJRDpyP2Z1bmN0aW9uKGUpe3JldHVybiBlPWUucmVwbGFjZSgkLCIiKSxmdW5j
dGlvbih0KXtyZXR1cm4gdC5nZXRBdHRyaWJ1dGUoImlkIik9PT1lfX06ZnVuY3Rpb24oZSl7cmV0
dXJuIGU9ZS5yZXBsYWNlKCQsIiIpLGZ1bmN0aW9uKHQpe3ZhciBuPXR5cGVvZiB0LmdldEF0dHJp
YnV0ZU5vZGUhPT1wJiZ0LmdldEF0dHJpYnV0ZU5vZGUoImlkIik7cmV0dXJuIG4mJm4udmFsdWU9
PT1lfX0sVEFHOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09IioiP2Z1bmN0aW9uKCl7cmV0dXJuITB9
OihlPWUucmVwbGFjZSgkLCIiKS50b0xvd2VyQ2FzZSgpLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5v
ZGVOYW1lJiZ0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1lfSl9LENMQVNTOmZ1bmN0aW9uKGUp
e3ZhciB0PWtbZF1bZSsiICJdO3JldHVybiB0fHwodD1uZXcgUmVnRXhwKCIoXnwiK08rIikiK2Ur
IigiK08rInwkKSIpKSYmayhlLGZ1bmN0aW9uKGUpe3JldHVybiB0LnRlc3QoZS5jbGFzc05hbWV8
fHR5cGVvZiBlLmdldEF0dHJpYnV0ZSE9PXAmJmUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9
KX0sQVRUUjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKHIsaSl7dmFyIHM9bnQuYXR0
cihyLGUpO3JldHVybiBzPT1udWxsP3Q9PT0iIT0iOnQ/KHMrPSIiLHQ9PT0iPSI/cz09PW46dD09
PSIhPSI/cyE9PW46dD09PSJePSI/biYmcy5pbmRleE9mKG4pPT09MDp0PT09Iio9Ij9uJiZzLmlu
ZGV4T2Yobik+LTE6dD09PSIkPSI/biYmcy5zdWJzdHIocy5sZW5ndGgtbi5sZW5ndGgpPT09bjp0
PT09In49Ij8oIiAiK3MrIiAiKS5pbmRleE9mKG4pPi0xOnQ9PT0ifD0iP3M9PT1ufHxzLnN1YnN0
cigwLG4ubGVuZ3RoKzEpPT09bisiLSI6ITEpOiEwfX0sQ0hJTEQ6ZnVuY3Rpb24oZSx0LG4scil7
cmV0dXJuIGU9PT0ibnRoIj9mdW5jdGlvbihlKXt2YXIgdCxpLHM9ZS5wYXJlbnROb2RlO2lmKG49
PT0xJiZyPT09MClyZXR1cm4hMDtpZihzKXtpPTA7Zm9yKHQ9cy5maXJzdENoaWxkO3Q7dD10Lm5l
eHRTaWJsaW5nKWlmKHQubm9kZVR5cGU9PT0xKXtpKys7aWYoZT09PXQpYnJlYWt9fXJldHVybiBp
LT1yLGk9PT1ufHxpJW49PT0wJiZpL24+PTB9OmZ1bmN0aW9uKHQpe3ZhciBuPXQ7c3dpdGNoKGUp
e2Nhc2Uib25seSI6Y2FzZSJmaXJzdCI6d2hpbGUobj1uLnByZXZpb3VzU2libGluZylpZihuLm5v
ZGVUeXBlPT09MSlyZXR1cm4hMTtpZihlPT09ImZpcnN0IilyZXR1cm4hMDtuPXQ7Y2FzZSJsYXN0
Ijp3aGlsZShuPW4ubmV4dFNpYmxpbmcpaWYobi5ub2RlVHlwZT09PTEpcmV0dXJuITE7cmV0dXJu
ITB9fX0sUFNFVURPOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1pLnBzZXVkb3NbZV18fGkuc2V0Rmls
dGVyc1tlLnRvTG93ZXJDYXNlKCldfHxudC5lcnJvcigidW5zdXBwb3J0ZWQgcHNldWRvOiAiK2Up
O3JldHVybiByW2RdP3IodCk6ci5sZW5ndGg+MT8obj1bZSxlLCIiLHRdLGkuc2V0RmlsdGVycy5o
YXNPd25Qcm9wZXJ0eShlLnRvTG93ZXJDYXNlKCkpP04oZnVuY3Rpb24oZSxuKXt2YXIgaSxzPXIo
ZSx0KSxvPXMubGVuZ3RoO3doaWxlKG8tLSlpPVQuY2FsbChlLHNbb10pLGVbaV09IShuW2ldPXNb
b10pfSk6ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSwwLG4pfSk6cn19LHBzZXVkb3M6e25vdDpOKGZ1
bmN0aW9uKGUpe3ZhciB0PVtdLG49W10scj1hKGUucmVwbGFjZShqLCIkMSIpKTtyZXR1cm4gcltk
XT9OKGZ1bmN0aW9uKGUsdCxuLGkpe3ZhciBzLG89cihlLG51bGwsaSxbXSksdT1lLmxlbmd0aDt3
aGlsZSh1LS0paWYocz1vW3VdKWVbdV09ISh0W3VdPXMpfSk6ZnVuY3Rpb24oZSxpLHMpe3JldHVy
biB0WzBdPWUscih0LG51bGwscyxuKSwhbi5wb3AoKX19KSxoYXM6TihmdW5jdGlvbihlKXtyZXR1
cm4gZnVuY3Rpb24odCl7cmV0dXJuIG50KGUsdCkubGVuZ3RoPjB9fSksY29udGFpbnM6TihmdW5j
dGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuKHQudGV4dENvbnRlbnR8fHQuaW5uZXJU
ZXh0fHxzKHQpKS5pbmRleE9mKGUpPi0xfX0pLGVuYWJsZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUu
ZGlzYWJsZWQ9PT0hMX0sZGlzYWJsZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzYWJsZWQ9PT0h
MH0sY2hlY2tlZDpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0
dXJuIHQ9PT0iaW5wdXQiJiYhIWUuY2hlY2tlZHx8dD09PSJvcHRpb24iJiYhIWUuc2VsZWN0ZWR9
LHNlbGVjdGVkOmZ1bmN0aW9uKGUpe3JldHVybiBlLnBhcmVudE5vZGUmJmUucGFyZW50Tm9kZS5z
ZWxlY3RlZEluZGV4LGUuc2VsZWN0ZWQ9PT0hMH0scGFyZW50OmZ1bmN0aW9uKGUpe3JldHVybiFp
LnBzZXVkb3MuZW1wdHkoZSl9LGVtcHR5OmZ1bmN0aW9uKGUpe3ZhciB0O2U9ZS5maXJzdENoaWxk
O3doaWxlKGUpe2lmKGUubm9kZU5hbWU+IkAifHwodD1lLm5vZGVUeXBlKT09PTN8fHQ9PT00KXJl
dHVybiExO2U9ZS5uZXh0U2libGluZ31yZXR1cm4hMH0saGVhZGVyOmZ1bmN0aW9uKGUpe3JldHVy
biBYLnRlc3QoZS5ub2RlTmFtZSl9LHRleHQ6ZnVuY3Rpb24oZSl7dmFyIHQsbjtyZXR1cm4gZS5u
b2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmKHQ9ZS50eXBlKT09PSJ0ZXh0IiYmKChu
PWUuZ2V0QXR0cmlidXRlKCJ0eXBlIikpPT1udWxsfHxuLnRvTG93ZXJDYXNlKCk9PT10KX0scmFk
aW86cnQoInJhZGlvIiksY2hlY2tib3g6cnQoImNoZWNrYm94IiksZmlsZTpydCgiZmlsZSIpLHBh
c3N3b3JkOnJ0KCJwYXNzd29yZCIpLGltYWdlOnJ0KCJpbWFnZSIpLHN1Ym1pdDppdCgic3VibWl0
IikscmVzZXQ6aXQoInJlc2V0IiksYnV0dG9uOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUu
dG9Mb3dlckNhc2UoKTtyZXR1cm4gdD09PSJpbnB1dCImJmUudHlwZT09PSJidXR0b24ifHx0PT09
ImJ1dHRvbiJ9LGlucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBWLnRlc3QoZS5ub2RlTmFtZSl9LGZv
Y3VzOmZ1bmN0aW9uKGUpe3ZhciB0PWUub3duZXJEb2N1bWVudDtyZXR1cm4gZT09PXQuYWN0aXZl
RWxlbWVudCYmKCF0Lmhhc0ZvY3VzfHx0Lmhhc0ZvY3VzKCkpJiYhIShlLnR5cGV8fGUuaHJlZnx8
fmUudGFiSW5kZXgpfSxhY3RpdmU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1lLm93bmVyRG9jdW1l
bnQuYWN0aXZlRWxlbWVudH0sZmlyc3Q6c3QoZnVuY3Rpb24oKXtyZXR1cm5bMF19KSxsYXN0OnN0
KGZ1bmN0aW9uKGUsdCl7cmV0dXJuW3QtMV19KSxlcTpzdChmdW5jdGlvbihlLHQsbil7cmV0dXJu
W248MD9uK3Q6bl19KSxldmVuOnN0KGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjx0O24rPTIp
ZS5wdXNoKG4pO3JldHVybiBlfSksb2RkOnN0KGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTE7bjx0
O24rPTIpZS5wdXNoKG4pO3JldHVybiBlfSksbHQ6c3QoZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIg
cj1uPDA/bit0Om47LS1yPj0wOyllLnB1c2gocik7cmV0dXJuIGV9KSxndDpzdChmdW5jdGlvbihl
LHQsbil7Zm9yKHZhciByPW48MD9uK3Q6bjsrK3I8dDspZS5wdXNoKHIpO3JldHVybiBlfSl9fSxm
PXkuY29tcGFyZURvY3VtZW50UG9zaXRpb24/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXQ/KGw9
ITAsMCk6KCFlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9ufHwhdC5jb21wYXJlRG9jdW1lbnRQb3Np
dGlvbj9lLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uOmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24o
dCkmNCk/LTE6MX06ZnVuY3Rpb24oZSx0KXtpZihlPT09dClyZXR1cm4gbD0hMCwwO2lmKGUuc291
cmNlSW5kZXgmJnQuc291cmNlSW5kZXgpcmV0dXJuIGUuc291cmNlSW5kZXgtdC5zb3VyY2VJbmRl
eDt2YXIgbixyLGk9W10scz1bXSxvPWUucGFyZW50Tm9kZSx1PXQucGFyZW50Tm9kZSxhPW87aWYo
bz09PXUpcmV0dXJuIG90KGUsdCk7aWYoIW8pcmV0dXJuLTE7aWYoIXUpcmV0dXJuIDE7d2hpbGUo
YSlpLnVuc2hpZnQoYSksYT1hLnBhcmVudE5vZGU7YT11O3doaWxlKGEpcy51bnNoaWZ0KGEpLGE9
YS5wYXJlbnROb2RlO249aS5sZW5ndGgscj1zLmxlbmd0aDtmb3IodmFyIGY9MDtmPG4mJmY8cjtm
KyspaWYoaVtmXSE9PXNbZl0pcmV0dXJuIG90KGlbZl0sc1tmXSk7cmV0dXJuIGY9PT1uP290KGUs
c1tmXSwtMSk6b3QoaVtmXSx0LDEpfSxbMCwwXS5zb3J0KGYpLGg9IWwsbnQudW5pcXVlU29ydD1m
dW5jdGlvbihlKXt2YXIgdCxuPVtdLHI9MSxpPTA7bD1oLGUuc29ydChmKTtpZihsKXtmb3IoO3Q9
ZVtyXTtyKyspdD09PWVbci0xXSYmKGk9bi5wdXNoKHIpKTt3aGlsZShpLS0pZS5zcGxpY2Uobltp
XSwxKX1yZXR1cm4gZX0sbnQuZXJyb3I9ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKCJTeW50
YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiAiK2UpfSxhPW50LmNvbXBpbGU9ZnVu
Y3Rpb24oZSx0KXt2YXIgbixyPVtdLGk9W10scz1BW2RdW2UrIiAiXTtpZighcyl7dHx8KHQ9dXQo
ZSkpLG49dC5sZW5ndGg7d2hpbGUobi0tKXM9aHQodFtuXSksc1tkXT9yLnB1c2gocyk6aS5wdXNo
KHMpO3M9QShlLHB0KGkscikpfXJldHVybiBzfSxnLnF1ZXJ5U2VsZWN0b3JBbGwmJmZ1bmN0aW9u
KCl7dmFyIGUsdD12dCxuPS8nfFxcL2cscj0vXD1bXHgyMFx0XHJcblxmXSooW14nIlxdXSopW1x4
MjBcdFxyXG5cZl0qXF0vZyxpPVsiOmZvY3VzIl0scz1bIjphY3RpdmUiXSx1PXkubWF0Y2hlc1Nl
bGVjdG9yfHx5Lm1vek1hdGNoZXNTZWxlY3Rvcnx8eS53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fHku
b01hdGNoZXNTZWxlY3Rvcnx8eS5tc01hdGNoZXNTZWxlY3RvcjtLKGZ1bmN0aW9uKGUpe2UuaW5u
ZXJIVE1MPSI8c2VsZWN0PjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+Iixl
LnF1ZXJ5U2VsZWN0b3JBbGwoIltzZWxlY3RlZF0iKS5sZW5ndGh8fGkucHVzaCgiXFxbIitPKyIq
KD86Y2hlY2tlZHxkaXNhYmxlZHxpc21hcHxtdWx0aXBsZXxyZWFkb25seXxzZWxlY3RlZHx2YWx1
ZSkiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIjpjaGVja2VkIikubGVuZ3RofHxpLnB1c2goIjpjaGVj
a2VkIil9KSxLKGZ1bmN0aW9uKGUpe2UuaW5uZXJIVE1MPSI8cCB0ZXN0PScnPjwvcD4iLGUucXVl
cnlTZWxlY3RvckFsbCgiW3Rlc3RePScnXSIpLmxlbmd0aCYmaS5wdXNoKCJbKl4kXT0iK08rIioo
PzpcIlwifCcnKSIpLGUuaW5uZXJIVE1MPSI8aW5wdXQgdHlwZT0naGlkZGVuJy8+IixlLnF1ZXJ5
U2VsZWN0b3JBbGwoIjplbmFibGVkIikubGVuZ3RofHxpLnB1c2goIjplbmFibGVkIiwiOmRpc2Fi
bGVkIil9KSxpPW5ldyBSZWdFeHAoaS5qb2luKCJ8IikpLHZ0PWZ1bmN0aW9uKGUscixzLG8sdSl7
aWYoIW8mJiF1JiYhaS50ZXN0KGUpKXt2YXIgYSxmLGw9ITAsYz1kLGg9cixwPXIubm9kZVR5cGU9
PT05JiZlO2lmKHIubm9kZVR5cGU9PT0xJiZyLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkhPT0ib2Jq
ZWN0Iil7YT11dChlKSwobD1yLmdldEF0dHJpYnV0ZSgiaWQiKSk/Yz1sLnJlcGxhY2UobiwiXFwk
JiIpOnIuc2V0QXR0cmlidXRlKCJpZCIsYyksYz0iW2lkPSciK2MrIiddICIsZj1hLmxlbmd0aDt3
aGlsZShmLS0pYVtmXT1jK2FbZl0uam9pbigiIik7aD16LnRlc3QoZSkmJnIucGFyZW50Tm9kZXx8
cixwPWEuam9pbigiLCIpfWlmKHApdHJ5e3JldHVybiBTLmFwcGx5KHMseC5jYWxsKGgucXVlcnlT
ZWxlY3RvckFsbChwKSwwKSksc31jYXRjaCh2KXt9ZmluYWxseXtsfHxyLnJlbW92ZUF0dHJpYnV0
ZSgiaWQiKX19cmV0dXJuIHQoZSxyLHMsbyx1KX0sdSYmKEsoZnVuY3Rpb24odCl7ZT11LmNhbGwo
dCwiZGl2Iik7dHJ5e3UuY2FsbCh0LCJbdGVzdCE9JyddOnNpenpsZSIpLHMucHVzaCgiIT0iLEgp
fWNhdGNoKG4pe319KSxzPW5ldyBSZWdFeHAocy5qb2luKCJ8IikpLG50Lm1hdGNoZXNTZWxlY3Rv
cj1mdW5jdGlvbih0LG4pe249bi5yZXBsYWNlKHIsIj0nJDEnXSIpO2lmKCFvKHQpJiYhcy50ZXN0
KG4pJiYhaS50ZXN0KG4pKXRyeXt2YXIgYT11LmNhbGwodCxuKTtpZihhfHxlfHx0LmRvY3VtZW50
JiZ0LmRvY3VtZW50Lm5vZGVUeXBlIT09MTEpcmV0dXJuIGF9Y2F0Y2goZil7fXJldHVybiBudChu
LG51bGwsbnVsbCxbdF0pLmxlbmd0aD4wfSl9KCksaS5wc2V1ZG9zLm50aD1pLnBzZXVkb3MuZXEs
aS5maWx0ZXJzPW10LnByb3RvdHlwZT1pLnBzZXVkb3MsaS5zZXRGaWx0ZXJzPW5ldyBtdCxudC5h
dHRyPXYuYXR0cix2LmZpbmQ9bnQsdi5leHByPW50LnNlbGVjdG9ycyx2LmV4cHJbIjoiXT12LmV4
cHIucHNldWRvcyx2LnVuaXF1ZT1udC51bmlxdWVTb3J0LHYudGV4dD1udC5nZXRUZXh0LHYuaXNY
TUxEb2M9bnQuaXNYTUwsdi5jb250YWlucz1udC5jb250YWluc30oZSk7dmFyIG50PS9VbnRpbCQv
LHJ0PS9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLGl0PS9eLlteOiNcW1wuLF0qJC8s
c3Q9di5leHByLm1hdGNoLm5lZWRzQ29udGV4dCxvdD17Y2hpbGRyZW46ITAsY29udGVudHM6ITAs
bmV4dDohMCxwcmV2OiEwfTt2LmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihlKXt2YXIgdCxuLHIs
aSxzLG8sdT10aGlzO2lmKHR5cGVvZiBlIT0ic3RyaW5nIilyZXR1cm4gdihlKS5maWx0ZXIoZnVu
Y3Rpb24oKXtmb3IodD0wLG49dS5sZW5ndGg7dDxuO3QrKylpZih2LmNvbnRhaW5zKHVbdF0sdGhp
cykpcmV0dXJuITB9KTtvPXRoaXMucHVzaFN0YWNrKCIiLCJmaW5kIixlKTtmb3IodD0wLG49dGhp
cy5sZW5ndGg7dDxuO3QrKyl7cj1vLmxlbmd0aCx2LmZpbmQoZSx0aGlzW3RdLG8pO2lmKHQ+MClm
b3IoaT1yO2k8by5sZW5ndGg7aSsrKWZvcihzPTA7czxyO3MrKylpZihvW3NdPT09b1tpXSl7by5z
cGxpY2UoaS0tLDEpO2JyZWFrfX1yZXR1cm4gb30saGFzOmZ1bmN0aW9uKGUpe3ZhciB0LG49dihl
LHRoaXMpLHI9bi5sZW5ndGg7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKHQ9MDt0
PHI7dCsrKWlmKHYuY29udGFpbnModGhpcyxuW3RdKSlyZXR1cm4hMH0pfSxub3Q6ZnVuY3Rpb24o
ZSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGZ0KHRoaXMsZSwhMSksIm5vdCIsZSl9LGZpbHRlcjpm
dW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZnQodGhpcyxlLCEwKSwiZmlsdGVyIixl
KX0saXM6ZnVuY3Rpb24oZSl7cmV0dXJuISFlJiYodHlwZW9mIGU9PSJzdHJpbmciP3N0LnRlc3Qo
ZSk/dihlLHRoaXMuY29udGV4dCkuaW5kZXgodGhpc1swXSk+PTA6di5maWx0ZXIoZSx0aGlzKS5s
ZW5ndGg+MDp0aGlzLmZpbHRlcihlKS5sZW5ndGg+MCl9LGNsb3Nlc3Q6ZnVuY3Rpb24oZSx0KXt2
YXIgbixyPTAsaT10aGlzLmxlbmd0aCxzPVtdLG89c3QudGVzdChlKXx8dHlwZW9mIGUhPSJzdHJp
bmciP3YoZSx0fHx0aGlzLmNvbnRleHQpOjA7Zm9yKDtyPGk7cisrKXtuPXRoaXNbcl07d2hpbGUo
biYmbi5vd25lckRvY3VtZW50JiZuIT09dCYmbi5ub2RlVHlwZSE9PTExKXtpZihvP28uaW5kZXgo
bik+LTE6di5maW5kLm1hdGNoZXNTZWxlY3RvcihuLGUpKXtzLnB1c2gobik7YnJlYWt9bj1uLnBh
cmVudE5vZGV9fXJldHVybiBzPXMubGVuZ3RoPjE/di51bmlxdWUocyk6cyx0aGlzLnB1c2hTdGFj
ayhzLCJjbG9zZXN0IixlKX0saW5kZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/dHlwZW9mIGU9PSJz
dHJpbmciP3YuaW5BcnJheSh0aGlzWzBdLHYoZSkpOnYuaW5BcnJheShlLmpxdWVyeT9lWzBdOmUs
dGhpcyk6dGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlP3RoaXMucHJldkFsbCgpLmxlbmd0aDot
MX0sYWRkOmZ1bmN0aW9uKGUsdCl7dmFyIG49dHlwZW9mIGU9PSJzdHJpbmciP3YoZSx0KTp2Lm1h
a2VBcnJheShlJiZlLm5vZGVUeXBlP1tlXTplKSxyPXYubWVyZ2UodGhpcy5nZXQoKSxuKTtyZXR1
cm4gdGhpcy5wdXNoU3RhY2sodXQoblswXSl8fHV0KHJbMF0pP3I6di51bmlxdWUocikpfSxhZGRC
YWNrOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmFkZChlPT1udWxsP3RoaXMucHJldk9iamVjdDp0
aGlzLnByZXZPYmplY3QuZmlsdGVyKGUpKX19KSx2LmZuLmFuZFNlbGY9di5mbi5hZGRCYWNrLHYu
ZWFjaCh7cGFyZW50OmZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyZW50Tm9kZTtyZXR1cm4gdCYmdC5u
b2RlVHlwZSE9PTExP3Q6bnVsbH0scGFyZW50czpmdW5jdGlvbihlKXtyZXR1cm4gdi5kaXIoZSwi
cGFyZW50Tm9kZSIpfSxwYXJlbnRzVW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB2LmRpcihl
LCJwYXJlbnROb2RlIixuKX0sbmV4dDpmdW5jdGlvbihlKXtyZXR1cm4gYXQoZSwibmV4dFNpYmxp
bmciKX0scHJldjpmdW5jdGlvbihlKXtyZXR1cm4gYXQoZSwicHJldmlvdXNTaWJsaW5nIil9LG5l
eHRBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHYuZGlyKGUsIm5leHRTaWJsaW5nIil9LHByZXZBbGw6
ZnVuY3Rpb24oZSl7cmV0dXJuIHYuZGlyKGUsInByZXZpb3VzU2libGluZyIpfSxuZXh0VW50aWw6
ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB2LmRpcihlLCJuZXh0U2libGluZyIsbil9LHByZXZVbnRp
bDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHYuZGlyKGUsInByZXZpb3VzU2libGluZyIsbil9LHNp
YmxpbmdzOmZ1bmN0aW9uKGUpe3JldHVybiB2LnNpYmxpbmcoKGUucGFyZW50Tm9kZXx8e30pLmZp
cnN0Q2hpbGQsZSl9LGNoaWxkcmVuOmZ1bmN0aW9uKGUpe3JldHVybiB2LnNpYmxpbmcoZS5maXJz
dENoaWxkKX0sY29udGVudHM6ZnVuY3Rpb24oZSl7cmV0dXJuIHYubm9kZU5hbWUoZSwiaWZyYW1l
Iik/ZS5jb250ZW50RG9jdW1lbnR8fGUuY29udGVudFdpbmRvdy5kb2N1bWVudDp2Lm1lcmdlKFtd
LGUuY2hpbGROb2Rlcyl9fSxmdW5jdGlvbihlLHQpe3YuZm5bZV09ZnVuY3Rpb24obixyKXt2YXIg
aT12Lm1hcCh0aGlzLHQsbik7cmV0dXJuIG50LnRlc3QoZSl8fChyPW4pLHImJnR5cGVvZiByPT0i
c3RyaW5nIiYmKGk9di5maWx0ZXIocixpKSksaT10aGlzLmxlbmd0aD4xJiYhb3RbZV0/di51bmlx
dWUoaSk6aSx0aGlzLmxlbmd0aD4xJiZydC50ZXN0KGUpJiYoaT1pLnJldmVyc2UoKSksdGhpcy5w
dXNoU3RhY2soaSxlLGwuY2FsbChhcmd1bWVudHMpLmpvaW4oIiwiKSl9fSksdi5leHRlbmQoe2Zp
bHRlcjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIG4mJihlPSI6bm90KCIrZSsiKSIpLHQubGVuZ3Ro
PT09MT92LmZpbmQubWF0Y2hlc1NlbGVjdG9yKHRbMF0sZSk/W3RbMF1dOltdOnYuZmluZC5tYXRj
aGVzKGUsdCl9LGRpcjpmdW5jdGlvbihlLG4scil7dmFyIGk9W10scz1lW25dO3doaWxlKHMmJnMu
bm9kZVR5cGUhPT05JiYocj09PXR8fHMubm9kZVR5cGUhPT0xfHwhdihzKS5pcyhyKSkpcy5ub2Rl
VHlwZT09PTEmJmkucHVzaChzKSxzPXNbbl07cmV0dXJuIGl9LHNpYmxpbmc6ZnVuY3Rpb24oZSx0
KXt2YXIgbj1bXTtmb3IoO2U7ZT1lLm5leHRTaWJsaW5nKWUubm9kZVR5cGU9PT0xJiZlIT09dCYm
bi5wdXNoKGUpO3JldHVybiBufX0pO3ZhciBjdD0iYWJicnxhcnRpY2xlfGFzaWRlfGF1ZGlvfGJk
aXxjYW52YXN8ZGF0YXxkYXRhbGlzdHxkZXRhaWxzfGZpZ2NhcHRpb258ZmlndXJlfGZvb3Rlcnxo
ZWFkZXJ8aGdyb3VwfG1hcmt8bWV0ZXJ8bmF2fG91dHB1dHxwcm9ncmVzc3xzZWN0aW9ufHN1bW1h
cnl8dGltZXx2aWRlbyIsaHQ9LyBqUXVlcnlcZCs9Iig/Om51bGx8XGQrKSIvZyxwdD0vXlxzKy8s
ZHQ9LzwoPyFhcmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgo
W1x3Ol0rKVtePl0qKVwvPi9naSx2dD0vPChbXHc6XSspLyxtdD0vPHRib2R5L2ksZ3Q9Lzx8JiM/
XHcrOy8seXQ9LzwoPzpzY3JpcHR8c3R5bGV8bGluaykvaSxidD0vPCg/OnNjcmlwdHxvYmplY3R8
ZW1iZWR8b3B0aW9ufHN0eWxlKS9pLHd0PW5ldyBSZWdFeHAoIjwoPzoiK2N0KyIpW1xccy8+XSIs
ImkiKSxFdD0vXig/OmNoZWNrYm94fHJhZGlvKSQvLFN0PS9jaGVja2VkXHMqKD86W149XXw9XHMq
LmNoZWNrZWQuKS9pLHh0PS9cLyhqYXZhfGVjbWEpc2NyaXB0L2ksVHQ9L15ccyo8ISg/OlxbQ0RB
VEFcW3xcLVwtKXxbXF1cLV17Mn0+XHMqJC9nLE50PXtvcHRpb246WzEsIjxzZWxlY3QgbXVsdGlw
bGU9J211bHRpcGxlJz4iLCI8L3NlbGVjdD4iXSxsZWdlbmQ6WzEsIjxmaWVsZHNldD4iLCI8L2Zp
ZWxkc2V0PiJdLHRoZWFkOlsxLCI8dGFibGU+IiwiPC90YWJsZT4iXSx0cjpbMiwiPHRhYmxlPjx0
Ym9keT4iLCI8L3Rib2R5PjwvdGFibGU+Il0sdGQ6WzMsIjx0YWJsZT48dGJvZHk+PHRyPiIsIjwv
dHI+PC90Ym9keT48L3RhYmxlPiJdLGNvbDpbMiwiPHRhYmxlPjx0Ym9keT48L3Rib2R5Pjxjb2xn
cm91cD4iLCI8L2NvbGdyb3VwPjwvdGFibGU+Il0sYXJlYTpbMSwiPG1hcD4iLCI8L21hcD4iXSxf
ZGVmYXVsdDpbMCwiIiwiIl19LEN0PWx0KGkpLGt0PUN0LmFwcGVuZENoaWxkKGkuY3JlYXRlRWxl
bWVudCgiZGl2IikpO050Lm9wdGdyb3VwPU50Lm9wdGlvbixOdC50Ym9keT1OdC50Zm9vdD1OdC5j
b2xncm91cD1OdC5jYXB0aW9uPU50LnRoZWFkLE50LnRoPU50LnRkLHYuc3VwcG9ydC5odG1sU2Vy
aWFsaXplfHwoTnQuX2RlZmF1bHQ9WzEsIlg8ZGl2PiIsIjwvZGl2PiJdKSx2LmZuLmV4dGVuZCh7
dGV4dDpmdW5jdGlvbihlKXtyZXR1cm4gdi5hY2Nlc3ModGhpcyxmdW5jdGlvbihlKXtyZXR1cm4g
ZT09PXQ/di50ZXh0KHRoaXMpOnRoaXMuZW1wdHkoKS5hcHBlbmQoKHRoaXNbMF0mJnRoaXNbMF0u
b3duZXJEb2N1bWVudHx8aSkuY3JlYXRlVGV4dE5vZGUoZSkpfSxudWxsLGUsYXJndW1lbnRzLmxl
bmd0aCl9LHdyYXBBbGw6ZnVuY3Rpb24oZSl7aWYodi5pc0Z1bmN0aW9uKGUpKXJldHVybiB0aGlz
LmVhY2goZnVuY3Rpb24odCl7dih0aGlzKS53cmFwQWxsKGUuY2FsbCh0aGlzLHQpKX0pO2lmKHRo
aXNbMF0pe3ZhciB0PXYoZSx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25lKCEwKTt0
aGlzWzBdLnBhcmVudE5vZGUmJnQuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pLHQubWFwKGZ1bmN0aW9u
KCl7dmFyIGU9dGhpczt3aGlsZShlLmZpcnN0Q2hpbGQmJmUuZmlyc3RDaGlsZC5ub2RlVHlwZT09
PTEpZT1lLmZpcnN0Q2hpbGQ7cmV0dXJuIGV9KS5hcHBlbmQodGhpcyl9cmV0dXJuIHRoaXN9LHdy
YXBJbm5lcjpmdW5jdGlvbihlKXtyZXR1cm4gdi5pc0Z1bmN0aW9uKGUpP3RoaXMuZWFjaChmdW5j
dGlvbih0KXt2KHRoaXMpLndyYXBJbm5lcihlLmNhbGwodGhpcyx0KSl9KTp0aGlzLmVhY2goZnVu
Y3Rpb24oKXt2YXIgdD12KHRoaXMpLG49dC5jb250ZW50cygpO24ubGVuZ3RoP24ud3JhcEFsbChl
KTp0LmFwcGVuZChlKX0pfSx3cmFwOmZ1bmN0aW9uKGUpe3ZhciB0PXYuaXNGdW5jdGlvbihlKTty
ZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKG4pe3YodGhpcykud3JhcEFsbCh0P2UuY2FsbCh0aGlz
LG4pOmUpfSl9LHVud3JhcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudCgpLmVhY2goZnVu
Y3Rpb24oKXt2Lm5vZGVOYW1lKHRoaXMsImJvZHkiKXx8dih0aGlzKS5yZXBsYWNlV2l0aCh0aGlz
LmNoaWxkTm9kZXMpfSkuZW5kKCl9LGFwcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1h
bmlwKGFyZ3VtZW50cywhMCxmdW5jdGlvbihlKXsodGhpcy5ub2RlVHlwZT09PTF8fHRoaXMubm9k
ZVR5cGU9PT0xMSkmJnRoaXMuYXBwZW5kQ2hpbGQoZSl9KX0scHJlcGVuZDpmdW5jdGlvbigpe3Jl
dHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywhMCxmdW5jdGlvbihlKXsodGhpcy5ub2RlVHlw
ZT09PTF8fHRoaXMubm9kZVR5cGU9PT0xMSkmJnRoaXMuaW5zZXJ0QmVmb3JlKGUsdGhpcy5maXJz
dENoaWxkKX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtpZighdXQodGhpc1swXSkpcmV0dXJuIHRoaXMu
ZG9tTWFuaXAoYXJndW1lbnRzLCExLGZ1bmN0aW9uKGUpe3RoaXMucGFyZW50Tm9kZS5pbnNlcnRC
ZWZvcmUoZSx0aGlzKX0pO2lmKGFyZ3VtZW50cy5sZW5ndGgpe3ZhciBlPXYuY2xlYW4oYXJndW1l
bnRzKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2sodi5tZXJnZShlLHRoaXMpLCJiZWZvcmUiLHRoaXMu
c2VsZWN0b3IpfX0sYWZ0ZXI6ZnVuY3Rpb24oKXtpZighdXQodGhpc1swXSkpcmV0dXJuIHRoaXMu
ZG9tTWFuaXAoYXJndW1lbnRzLCExLGZ1bmN0aW9uKGUpe3RoaXMucGFyZW50Tm9kZS5pbnNlcnRC
ZWZvcmUoZSx0aGlzLm5leHRTaWJsaW5nKX0pO2lmKGFyZ3VtZW50cy5sZW5ndGgpe3ZhciBlPXYu
Y2xlYW4oYXJndW1lbnRzKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2sodi5tZXJnZSh0aGlzLGUpLCJh
ZnRlciIsdGhpcy5zZWxlY3Rvcil9fSxyZW1vdmU6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTA7Zm9y
KDsobj10aGlzW3JdKSE9bnVsbDtyKyspaWYoIWV8fHYuZmlsdGVyKGUsW25dKS5sZW5ndGgpIXQm
Jm4ubm9kZVR5cGU9PT0xJiYodi5jbGVhbkRhdGEobi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIp
KSx2LmNsZWFuRGF0YShbbl0pKSxuLnBhcmVudE5vZGUmJm4ucGFyZW50Tm9kZS5yZW1vdmVDaGls
ZChuKTtyZXR1cm4gdGhpc30sZW1wdHk6ZnVuY3Rpb24oKXt2YXIgZSx0PTA7Zm9yKDsoZT10aGlz
W3RdKSE9bnVsbDt0Kyspe2Uubm9kZVR5cGU9PT0xJiZ2LmNsZWFuRGF0YShlLmdldEVsZW1lbnRz
QnlUYWdOYW1lKCIqIikpO3doaWxlKGUuZmlyc3RDaGlsZCllLnJlbW92ZUNoaWxkKGUuZmlyc3RD
aGlsZCl9cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9ZT09bnVsbD8h
MTplLHQ9dD09bnVsbD9lOnQsdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdi5jbG9uZSh0aGlz
LGUsdCl9KX0saHRtbDpmdW5jdGlvbihlKXtyZXR1cm4gdi5hY2Nlc3ModGhpcyxmdW5jdGlvbihl
KXt2YXIgbj10aGlzWzBdfHx7fSxyPTAsaT10aGlzLmxlbmd0aDtpZihlPT09dClyZXR1cm4gbi5u
b2RlVHlwZT09PTE/bi5pbm5lckhUTUwucmVwbGFjZShodCwiIik6dDtpZih0eXBlb2YgZT09InN0
cmluZyImJiF5dC50ZXN0KGUpJiYodi5zdXBwb3J0Lmh0bWxTZXJpYWxpemV8fCF3dC50ZXN0KGUp
KSYmKHYuc3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFjZXx8IXB0LnRlc3QoZSkpJiYhTnRbKHZ0LmV4
ZWMoZSl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCldKXtlPWUucmVwbGFjZShkdCwiPCQxPjwv
JDI+Iik7dHJ5e2Zvcig7cjxpO3IrKyluPXRoaXNbcl18fHt9LG4ubm9kZVR5cGU9PT0xJiYodi5j
bGVhbkRhdGEobi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpKSxuLmlubmVySFRNTD1lKTtuPTB9
Y2F0Y2gocyl7fX1uJiZ0aGlzLmVtcHR5KCkuYXBwZW5kKGUpfSxudWxsLGUsYXJndW1lbnRzLmxl
bmd0aCl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKGUpe3JldHVybiB1dCh0aGlzWzBdKT90aGlzLmxl
bmd0aD90aGlzLnB1c2hTdGFjayh2KHYuaXNGdW5jdGlvbihlKT9lKCk6ZSksInJlcGxhY2VXaXRo
IixlKTp0aGlzOnYuaXNGdW5jdGlvbihlKT90aGlzLmVhY2goZnVuY3Rpb24odCl7dmFyIG49dih0
aGlzKSxyPW4uaHRtbCgpO24ucmVwbGFjZVdpdGgoZS5jYWxsKHRoaXMsdCxyKSl9KToodHlwZW9m
IGUhPSJzdHJpbmciJiYoZT12KGUpLmRldGFjaCgpKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIg
dD10aGlzLm5leHRTaWJsaW5nLG49dGhpcy5wYXJlbnROb2RlO3YodGhpcykucmVtb3ZlKCksdD92
KHQpLmJlZm9yZShlKTp2KG4pLmFwcGVuZChlKX0pKX0sZGV0YWNoOmZ1bmN0aW9uKGUpe3JldHVy
biB0aGlzLnJlbW92ZShlLCEwKX0sZG9tTWFuaXA6ZnVuY3Rpb24oZSxuLHIpe2U9W10uY29uY2F0
LmFwcGx5KFtdLGUpO3ZhciBpLHMsbyx1LGE9MCxmPWVbMF0sbD1bXSxjPXRoaXMubGVuZ3RoO2lm
KCF2LnN1cHBvcnQuY2hlY2tDbG9uZSYmYz4xJiZ0eXBlb2YgZj09InN0cmluZyImJlN0LnRlc3Qo
ZikpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3YodGhpcykuZG9tTWFuaXAoZSxuLHIpfSk7
aWYodi5pc0Z1bmN0aW9uKGYpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oaSl7dmFyIHM9dih0
aGlzKTtlWzBdPWYuY2FsbCh0aGlzLGksbj9zLmh0bWwoKTp0KSxzLmRvbU1hbmlwKGUsbixyKX0p
O2lmKHRoaXNbMF0pe2k9di5idWlsZEZyYWdtZW50KGUsdGhpcyxsKSxvPWkuZnJhZ21lbnQscz1v
LmZpcnN0Q2hpbGQsby5jaGlsZE5vZGVzLmxlbmd0aD09PTEmJihvPXMpO2lmKHMpe249biYmdi5u
b2RlTmFtZShzLCJ0ciIpO2Zvcih1PWkuY2FjaGVhYmxlfHxjLTE7YTxjO2ErKylyLmNhbGwobiYm
di5ub2RlTmFtZSh0aGlzW2FdLCJ0YWJsZSIpP0x0KHRoaXNbYV0sInRib2R5Iik6dGhpc1thXSxh
PT09dT9vOnYuY2xvbmUobywhMCwhMCkpfW89cz1udWxsLGwubGVuZ3RoJiZ2LmVhY2gobCxmdW5j
dGlvbihlLHQpe3Quc3JjP3YuYWpheD92LmFqYXgoe3VybDp0LnNyYyx0eXBlOiJHRVQiLGRhdGFU
eXBlOiJzY3JpcHQiLGFzeW5jOiExLGdsb2JhbDohMSwidGhyb3dzIjohMH0pOnYuZXJyb3IoIm5v
IGFqYXgiKTp2Lmdsb2JhbEV2YWwoKHQudGV4dHx8dC50ZXh0Q29udGVudHx8dC5pbm5lckhUTUx8
fCIiKS5yZXBsYWNlKFR0LCIiKSksdC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hp
bGQodCl9KX1yZXR1cm4gdGhpc319KSx2LmJ1aWxkRnJhZ21lbnQ9ZnVuY3Rpb24oZSxuLHIpe3Zh
ciBzLG8sdSxhPWVbMF07cmV0dXJuIG49bnx8aSxuPSFuLm5vZGVUeXBlJiZuWzBdfHxuLG49bi5v
d25lckRvY3VtZW50fHxuLGUubGVuZ3RoPT09MSYmdHlwZW9mIGE9PSJzdHJpbmciJiZhLmxlbmd0
aDw1MTImJm49PT1pJiZhLmNoYXJBdCgwKT09PSI8IiYmIWJ0LnRlc3QoYSkmJih2LnN1cHBvcnQu
Y2hlY2tDbG9uZXx8IVN0LnRlc3QoYSkpJiYodi5zdXBwb3J0Lmh0bWw1Q2xvbmV8fCF3dC50ZXN0
KGEpKSYmKG89ITAscz12LmZyYWdtZW50c1thXSx1PXMhPT10KSxzfHwocz1uLmNyZWF0ZURvY3Vt
ZW50RnJhZ21lbnQoKSx2LmNsZWFuKGUsbixzLHIpLG8mJih2LmZyYWdtZW50c1thXT11JiZzKSks
e2ZyYWdtZW50OnMsY2FjaGVhYmxlOm99fSx2LmZyYWdtZW50cz17fSx2LmVhY2goe2FwcGVuZFRv
OiJhcHBlbmQiLHByZXBlbmRUbzoicHJlcGVuZCIsaW5zZXJ0QmVmb3JlOiJiZWZvcmUiLGluc2Vy
dEFmdGVyOiJhZnRlciIscmVwbGFjZUFsbDoicmVwbGFjZVdpdGgifSxmdW5jdGlvbihlLHQpe3Yu
Zm5bZV09ZnVuY3Rpb24obil7dmFyIHIsaT0wLHM9W10sbz12KG4pLHU9by5sZW5ndGgsYT10aGlz
Lmxlbmd0aD09PTEmJnRoaXNbMF0ucGFyZW50Tm9kZTtpZigoYT09bnVsbHx8YSYmYS5ub2RlVHlw
ZT09PTExJiZhLmNoaWxkTm9kZXMubGVuZ3RoPT09MSkmJnU9PT0xKXJldHVybiBvW3RdKHRoaXNb
MF0pLHRoaXM7Zm9yKDtpPHU7aSsrKXI9KGk+MD90aGlzLmNsb25lKCEwKTp0aGlzKS5nZXQoKSx2
KG9baV0pW3RdKHIpLHM9cy5jb25jYXQocik7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHMsZSxvLnNl
bGVjdG9yKX19KSx2LmV4dGVuZCh7Y2xvbmU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGkscyxvO3Yu
c3VwcG9ydC5odG1sNUNsb25lfHx2LmlzWE1MRG9jKGUpfHwhd3QudGVzdCgiPCIrZS5ub2RlTmFt
ZSsiPiIpP289ZS5jbG9uZU5vZGUoITApOihrdC5pbm5lckhUTUw9ZS5vdXRlckhUTUwsa3QucmVt
b3ZlQ2hpbGQobz1rdC5maXJzdENoaWxkKSk7aWYoKCF2LnN1cHBvcnQubm9DbG9uZUV2ZW50fHwh
di5zdXBwb3J0Lm5vQ2xvbmVDaGVja2VkKSYmKGUubm9kZVR5cGU9PT0xfHxlLm5vZGVUeXBlPT09
MTEpJiYhdi5pc1hNTERvYyhlKSl7T3QoZSxvKSxyPU10KGUpLGk9TXQobyk7Zm9yKHM9MDtyW3Nd
OysrcylpW3NdJiZPdChyW3NdLGlbc10pfWlmKHQpe0F0KGUsbyk7aWYobil7cj1NdChlKSxpPU10
KG8pO2ZvcihzPTA7cltzXTsrK3MpQXQocltzXSxpW3NdKX19cmV0dXJuIHI9aT1udWxsLG99LGNs
ZWFuOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBzLG8sdSxhLGYsbCxjLGgscCxkLG0sZyx5PXQ9PT1p
JiZDdCxiPVtdO2lmKCF0fHx0eXBlb2YgdC5jcmVhdGVEb2N1bWVudEZyYWdtZW50PT0idW5kZWZp
bmVkIil0PWk7Zm9yKHM9MDsodT1lW3NdKSE9bnVsbDtzKyspe3R5cGVvZiB1PT0ibnVtYmVyIiYm
KHUrPSIiKTtpZighdSljb250aW51ZTtpZih0eXBlb2YgdT09InN0cmluZyIpaWYoIWd0LnRlc3Qo
dSkpdT10LmNyZWF0ZVRleHROb2RlKHUpO2Vsc2V7eT15fHxsdCh0KSxjPXQuY3JlYXRlRWxlbWVu
dCgiZGl2IikseS5hcHBlbmRDaGlsZChjKSx1PXUucmVwbGFjZShkdCwiPCQxPjwvJDI+IiksYT0o
dnQuZXhlYyh1KXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKSxmPU50W2FdfHxOdC5fZGVmYXVs
dCxsPWZbMF0sYy5pbm5lckhUTUw9ZlsxXSt1K2ZbMl07d2hpbGUobC0tKWM9Yy5sYXN0Q2hpbGQ7
aWYoIXYuc3VwcG9ydC50Ym9keSl7aD1tdC50ZXN0KHUpLHA9YT09PSJ0YWJsZSImJiFoP2MuZmly
c3RDaGlsZCYmYy5maXJzdENoaWxkLmNoaWxkTm9kZXM6ZlsxXT09PSI8dGFibGU+IiYmIWg/Yy5j
aGlsZE5vZGVzOltdO2ZvcihvPXAubGVuZ3RoLTE7bz49MDstLW8pdi5ub2RlTmFtZShwW29dLCJ0
Ym9keSIpJiYhcFtvXS5jaGlsZE5vZGVzLmxlbmd0aCYmcFtvXS5wYXJlbnROb2RlLnJlbW92ZUNo
aWxkKHBbb10pfSF2LnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2UmJnB0LnRlc3QodSkmJmMuaW5z
ZXJ0QmVmb3JlKHQuY3JlYXRlVGV4dE5vZGUocHQuZXhlYyh1KVswXSksYy5maXJzdENoaWxkKSx1
PWMuY2hpbGROb2RlcyxjLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYyl9dS5ub2RlVHlwZT9iLnB1
c2godSk6di5tZXJnZShiLHUpfWMmJih1PWM9eT1udWxsKTtpZighdi5zdXBwb3J0LmFwcGVuZENo
ZWNrZWQpZm9yKHM9MDsodT1iW3NdKSE9bnVsbDtzKyspdi5ub2RlTmFtZSh1LCJpbnB1dCIpP190
KHUpOnR5cGVvZiB1LmdldEVsZW1lbnRzQnlUYWdOYW1lIT0idW5kZWZpbmVkIiYmdi5ncmVwKHUu
Z2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IiksX3QpO2lmKG4pe209ZnVuY3Rpb24oZSl7aWYo
IWUudHlwZXx8eHQudGVzdChlLnR5cGUpKXJldHVybiByP3IucHVzaChlLnBhcmVudE5vZGU/ZS5w
YXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpOmUpOm4uYXBwZW5kQ2hpbGQoZSl9O2ZvcihzPTA7KHU9
YltzXSkhPW51bGw7cysrKWlmKCF2Lm5vZGVOYW1lKHUsInNjcmlwdCIpfHwhbSh1KSluLmFwcGVu
ZENoaWxkKHUpLHR5cGVvZiB1LmdldEVsZW1lbnRzQnlUYWdOYW1lIT0idW5kZWZpbmVkIiYmKGc9
di5ncmVwKHYubWVyZ2UoW10sdS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IikpLG0pLGIu
c3BsaWNlLmFwcGx5KGIsW3MrMSwwXS5jb25jYXQoZykpLHMrPWcubGVuZ3RoKX1yZXR1cm4gYn0s
Y2xlYW5EYXRhOmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLHMsbz0wLHU9di5leHBhbmRvLGE9di5j
YWNoZSxmPXYuc3VwcG9ydC5kZWxldGVFeHBhbmRvLGw9di5ldmVudC5zcGVjaWFsO2Zvcig7KGk9
ZVtvXSkhPW51bGw7bysrKWlmKHR8fHYuYWNjZXB0RGF0YShpKSl7cj1pW3VdLG49ciYmYVtyXTtp
ZihuKXtpZihuLmV2ZW50cylmb3IocyBpbiBuLmV2ZW50cylsW3NdP3YuZXZlbnQucmVtb3ZlKGks
cyk6di5yZW1vdmVFdmVudChpLHMsbi5oYW5kbGUpO2Fbcl0mJihkZWxldGUgYVtyXSxmP2RlbGV0
ZSBpW3VdOmkucmVtb3ZlQXR0cmlidXRlP2kucmVtb3ZlQXR0cmlidXRlKHUpOmlbdV09bnVsbCx2
LmRlbGV0ZWRJZHMucHVzaChyKSl9fX19KSxmdW5jdGlvbigpe3ZhciBlLHQ7di51YU1hdGNoPWZ1
bmN0aW9uKGUpe2U9ZS50b0xvd2VyQ2FzZSgpO3ZhciB0PS8oY2hyb21lKVsgXC9dKFtcdy5dKykv
LmV4ZWMoZSl8fC8od2Via2l0KVsgXC9dKFtcdy5dKykvLmV4ZWMoZSl8fC8ob3BlcmEpKD86Lip2
ZXJzaW9ufClbIFwvXShbXHcuXSspLy5leGVjKGUpfHwvKG1zaWUpIChbXHcuXSspLy5leGVjKGUp
fHxlLmluZGV4T2YoImNvbXBhdGlibGUiKTwwJiYvKG1vemlsbGEpKD86Lio/IHJ2OihbXHcuXSsp
fCkvLmV4ZWMoZSl8fFtdO3JldHVybnticm93c2VyOnRbMV18fCIiLHZlcnNpb246dFsyXXx8IjAi
fX0sZT12LnVhTWF0Y2goby51c2VyQWdlbnQpLHQ9e30sZS5icm93c2VyJiYodFtlLmJyb3dzZXJd
PSEwLHQudmVyc2lvbj1lLnZlcnNpb24pLHQuY2hyb21lP3Qud2Via2l0PSEwOnQud2Via2l0JiYo
dC5zYWZhcmk9ITApLHYuYnJvd3Nlcj10LHYuc3ViPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4p
e3JldHVybiBuZXcgZS5mbi5pbml0KHQsbil9di5leHRlbmQoITAsZSx0aGlzKSxlLnN1cGVyY2xh
c3M9dGhpcyxlLmZuPWUucHJvdG90eXBlPXRoaXMoKSxlLmZuLmNvbnN0cnVjdG9yPWUsZS5zdWI9
dGhpcy5zdWIsZS5mbi5pbml0PWZ1bmN0aW9uKHIsaSl7cmV0dXJuIGkmJmkgaW5zdGFuY2VvZiB2
JiYhKGkgaW5zdGFuY2VvZiBlKSYmKGk9ZShpKSksdi5mbi5pbml0LmNhbGwodGhpcyxyLGksdCl9
LGUuZm4uaW5pdC5wcm90b3R5cGU9ZS5mbjt2YXIgdD1lKGkpO3JldHVybiBlfX0oKTt2YXIgRHQs
UHQsSHQsQnQ9L2FscGhhXChbXildKlwpL2ksanQ9L29wYWNpdHk9KFteKV0qKS8sRnQ9L14odG9w
fHJpZ2h0fGJvdHRvbXxsZWZ0KSQvLEl0PS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxxdD0v
Xm1hcmdpbi8sUnQ9bmV3IFJlZ0V4cCgiXigiK20rIikoLiopJCIsImkiKSxVdD1uZXcgUmVnRXhw
KCJeKCIrbSsiKSg/IXB4KVthLXolXSskIiwiaSIpLHp0PW5ldyBSZWdFeHAoIl4oWy0rXSk9KCIr
bSsiKSIsImkiKSxXdD17Qk9EWToiYmxvY2sifSxYdD17cG9zaXRpb246ImFic29sdXRlIix2aXNp
YmlsaXR5OiJoaWRkZW4iLGRpc3BsYXk6ImJsb2NrIn0sVnQ9e2xldHRlclNwYWNpbmc6MCxmb250
V2VpZ2h0OjQwMH0sJHQ9WyJUb3AiLCJSaWdodCIsIkJvdHRvbSIsIkxlZnQiXSxKdD1bIldlYmtp
dCIsIk8iLCJNb3oiLCJtcyJdLEt0PXYuZm4udG9nZ2xlO3YuZm4uZXh0ZW5kKHtjc3M6ZnVuY3Rp
b24oZSxuKXtyZXR1cm4gdi5hY2Nlc3ModGhpcyxmdW5jdGlvbihlLG4scil7cmV0dXJuIHIhPT10
P3Yuc3R5bGUoZSxuLHIpOnYuY3NzKGUsbil9LGUsbixhcmd1bWVudHMubGVuZ3RoPjEpfSxzaG93
OmZ1bmN0aW9uKCl7cmV0dXJuIFl0KHRoaXMsITApfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIFl0
KHRoaXMpfSx0b2dnbGU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10eXBlb2YgZT09ImJvb2xlYW4iO3Jl
dHVybiB2LmlzRnVuY3Rpb24oZSkmJnYuaXNGdW5jdGlvbih0KT9LdC5hcHBseSh0aGlzLGFyZ3Vt
ZW50cyk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7KG4/ZTpHdCh0aGlzKSk/dih0aGlzKS5zaG93KCk6
dih0aGlzKS5oaWRlKCl9KX19KSx2LmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpmdW5j
dGlvbihlLHQpe2lmKHQpe3ZhciBuPUR0KGUsIm9wYWNpdHkiKTtyZXR1cm4gbj09PSIiPyIxIjpu
fX19fSxjc3NOdW1iZXI6e2ZpbGxPcGFjaXR5OiEwLGZvbnRXZWlnaHQ6ITAsbGluZUhlaWdodDoh
MCxvcGFjaXR5OiEwLG9ycGhhbnM6ITAsd2lkb3dzOiEwLHpJbmRleDohMCx6b29tOiEwfSxjc3NQ
cm9wczp7ImZsb2F0Ijp2LnN1cHBvcnQuY3NzRmxvYXQ/ImNzc0Zsb2F0Ijoic3R5bGVGbG9hdCJ9
LHN0eWxlOmZ1bmN0aW9uKGUsbixyLGkpe2lmKCFlfHxlLm5vZGVUeXBlPT09M3x8ZS5ub2RlVHlw
ZT09PTh8fCFlLnN0eWxlKXJldHVybjt2YXIgcyxvLHUsYT12LmNhbWVsQ2FzZShuKSxmPWUuc3R5
bGU7bj12LmNzc1Byb3BzW2FdfHwodi5jc3NQcm9wc1thXT1RdChmLGEpKSx1PXYuY3NzSG9va3Nb
bl18fHYuY3NzSG9va3NbYV07aWYocj09PXQpcmV0dXJuIHUmJiJnZXQiaW4gdSYmKHM9dS5nZXQo
ZSwhMSxpKSkhPT10P3M6ZltuXTtvPXR5cGVvZiByLG89PT0ic3RyaW5nIiYmKHM9enQuZXhlYyhy
KSkmJihyPShzWzFdKzEpKnNbMl0rcGFyc2VGbG9hdCh2LmNzcyhlLG4pKSxvPSJudW1iZXIiKTtp
ZihyPT1udWxsfHxvPT09Im51bWJlciImJmlzTmFOKHIpKXJldHVybjtvPT09Im51bWJlciImJiF2
LmNzc051bWJlclthXSYmKHIrPSJweCIpO2lmKCF1fHwhKCJzZXQiaW4gdSl8fChyPXUuc2V0KGUs
cixpKSkhPT10KXRyeXtmW25dPXJ9Y2F0Y2gobCl7fX0sY3NzOmZ1bmN0aW9uKGUsbixyLGkpe3Zh
ciBzLG8sdSxhPXYuY2FtZWxDYXNlKG4pO3JldHVybiBuPXYuY3NzUHJvcHNbYV18fCh2LmNzc1By
b3BzW2FdPVF0KGUuc3R5bGUsYSkpLHU9di5jc3NIb29rc1tuXXx8di5jc3NIb29rc1thXSx1JiYi
Z2V0ImluIHUmJihzPXUuZ2V0KGUsITAsaSkpLHM9PT10JiYocz1EdChlLG4pKSxzPT09Im5vcm1h
bCImJm4gaW4gVnQmJihzPVZ0W25dKSxyfHxpIT09dD8obz1wYXJzZUZsb2F0KHMpLHJ8fHYuaXNO
dW1lcmljKG8pP298fDA6cyk6c30sc3dhcDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxzPXt9O2Zv
cihpIGluIHQpc1tpXT1lLnN0eWxlW2ldLGUuc3R5bGVbaV09dFtpXTtyPW4uY2FsbChlKTtmb3Io
aSBpbiB0KWUuc3R5bGVbaV09c1tpXTtyZXR1cm4gcn19KSxlLmdldENvbXB1dGVkU3R5bGU/RHQ9
ZnVuY3Rpb24odCxuKXt2YXIgcixpLHMsbyx1PWUuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpLGE9
dC5zdHlsZTtyZXR1cm4gdSYmKHI9dS5nZXRQcm9wZXJ0eVZhbHVlKG4pfHx1W25dLHI9PT0iIiYm
IXYuY29udGFpbnModC5vd25lckRvY3VtZW50LHQpJiYocj12LnN0eWxlKHQsbikpLFV0LnRlc3Qo
cikmJnF0LnRlc3QobikmJihpPWEud2lkdGgscz1hLm1pbldpZHRoLG89YS5tYXhXaWR0aCxhLm1p
bldpZHRoPWEubWF4V2lkdGg9YS53aWR0aD1yLHI9dS53aWR0aCxhLndpZHRoPWksYS5taW5XaWR0
aD1zLGEubWF4V2lkdGg9bykpLHJ9OmkuZG9jdW1lbnRFbGVtZW50LmN1cnJlbnRTdHlsZSYmKER0
PWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpPWUuY3VycmVudFN0eWxlJiZlLmN1cnJlbnRTdHlsZVt0
XSxzPWUuc3R5bGU7cmV0dXJuIGk9PW51bGwmJnMmJnNbdF0mJihpPXNbdF0pLFV0LnRlc3QoaSkm
JiFGdC50ZXN0KHQpJiYobj1zLmxlZnQscj1lLnJ1bnRpbWVTdHlsZSYmZS5ydW50aW1lU3R5bGUu
bGVmdCxyJiYoZS5ydW50aW1lU3R5bGUubGVmdD1lLmN1cnJlbnRTdHlsZS5sZWZ0KSxzLmxlZnQ9
dD09PSJmb250U2l6ZSI/IjFlbSI6aSxpPXMucGl4ZWxMZWZ0KyJweCIscy5sZWZ0PW4sciYmKGUu
cnVudGltZVN0eWxlLmxlZnQ9cikpLGk9PT0iIj8iYXV0byI6aX0pLHYuZWFjaChbImhlaWdodCIs
IndpZHRoIl0sZnVuY3Rpb24oZSx0KXt2LmNzc0hvb2tzW3RdPXtnZXQ6ZnVuY3Rpb24oZSxuLHIp
e2lmKG4pcmV0dXJuIGUub2Zmc2V0V2lkdGg9PT0wJiZJdC50ZXN0KER0KGUsImRpc3BsYXkiKSk/
di5zd2FwKGUsWHQsZnVuY3Rpb24oKXtyZXR1cm4gdG4oZSx0LHIpfSk6dG4oZSx0LHIpfSxzZXQ6
ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBadChlLG4scj9lbihlLHQscix2LnN1cHBvcnQuYm94U2l6
aW5nJiZ2LmNzcyhlLCJib3hTaXppbmciKT09PSJib3JkZXItYm94Iik6MCl9fX0pLHYuc3VwcG9y
dC5vcGFjaXR5fHwodi5jc3NIb29rcy5vcGFjaXR5PXtnZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4g
anQudGVzdCgodCYmZS5jdXJyZW50U3R5bGU/ZS5jdXJyZW50U3R5bGUuZmlsdGVyOmUuc3R5bGUu
ZmlsdGVyKXx8IiIpPy4wMSpwYXJzZUZsb2F0KFJlZ0V4cC4kMSkrIiI6dD8iMSI6IiJ9LHNldDpm
dW5jdGlvbihlLHQpe3ZhciBuPWUuc3R5bGUscj1lLmN1cnJlbnRTdHlsZSxpPXYuaXNOdW1lcmlj
KHQpPyJhbHBoYShvcGFjaXR5PSIrdCoxMDArIikiOiIiLHM9ciYmci5maWx0ZXJ8fG4uZmlsdGVy
fHwiIjtuLnpvb209MTtpZih0Pj0xJiZ2LnRyaW0ocy5yZXBsYWNlKEJ0LCIiKSk9PT0iIiYmbi5y
ZW1vdmVBdHRyaWJ1dGUpe24ucmVtb3ZlQXR0cmlidXRlKCJmaWx0ZXIiKTtpZihyJiYhci5maWx0
ZXIpcmV0dXJufW4uZmlsdGVyPUJ0LnRlc3Qocyk/cy5yZXBsYWNlKEJ0LGkpOnMrIiAiK2l9fSks
dihmdW5jdGlvbigpe3Yuc3VwcG9ydC5yZWxpYWJsZU1hcmdpblJpZ2h0fHwodi5jc3NIb29rcy5t
YXJnaW5SaWdodD17Z2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHYuc3dhcChlLHtkaXNwbGF5OiJp
bmxpbmUtYmxvY2sifSxmdW5jdGlvbigpe2lmKHQpcmV0dXJuIER0KGUsIm1hcmdpblJpZ2h0Iil9
KX19KSwhdi5zdXBwb3J0LnBpeGVsUG9zaXRpb24mJnYuZm4ucG9zaXRpb24mJnYuZWFjaChbInRv
cCIsImxlZnQiXSxmdW5jdGlvbihlLHQpe3YuY3NzSG9va3NbdF09e2dldDpmdW5jdGlvbihlLG4p
e2lmKG4pe3ZhciByPUR0KGUsdCk7cmV0dXJuIFV0LnRlc3Qocik/dihlKS5wb3NpdGlvbigpW3Rd
KyJweCI6cn19fX0pfSksdi5leHByJiZ2LmV4cHIuZmlsdGVycyYmKHYuZXhwci5maWx0ZXJzLmhp
ZGRlbj1mdW5jdGlvbihlKXtyZXR1cm4gZS5vZmZzZXRXaWR0aD09PTAmJmUub2Zmc2V0SGVpZ2h0
PT09MHx8IXYuc3VwcG9ydC5yZWxpYWJsZUhpZGRlbk9mZnNldHMmJihlLnN0eWxlJiZlLnN0eWxl
LmRpc3BsYXl8fER0KGUsImRpc3BsYXkiKSk9PT0ibm9uZSJ9LHYuZXhwci5maWx0ZXJzLnZpc2li
bGU9ZnVuY3Rpb24oZSl7cmV0dXJuIXYuZXhwci5maWx0ZXJzLmhpZGRlbihlKX0pLHYuZWFjaCh7
bWFyZ2luOiIiLHBhZGRpbmc6IiIsYm9yZGVyOiJXaWR0aCJ9LGZ1bmN0aW9uKGUsdCl7di5jc3NI
b29rc1tlK3RdPXtleHBhbmQ6ZnVuY3Rpb24obil7dmFyIHIsaT10eXBlb2Ygbj09InN0cmluZyI/
bi5zcGxpdCgiICIpOltuXSxzPXt9O2ZvcihyPTA7cjw0O3IrKylzW2UrJHRbcl0rdF09aVtyXXx8
aVtyLTJdfHxpWzBdO3JldHVybiBzfX0scXQudGVzdChlKXx8KHYuY3NzSG9va3NbZSt0XS5zZXQ9
WnQpfSk7dmFyIHJuPS8lMjAvZyxzbj0vXFtcXSQvLG9uPS9ccj9cbi9nLHVuPS9eKD86Y29sb3J8
ZGF0ZXxkYXRldGltZXxkYXRldGltZS1sb2NhbHxlbWFpbHxoaWRkZW58bW9udGh8bnVtYmVyfHBh
c3N3b3JkfHJhbmdlfHNlYXJjaHx0ZWx8dGV4dHx0aW1lfHVybHx3ZWVrKSQvaSxhbj0vXig/OnNl
bGVjdHx0ZXh0YXJlYSkvaTt2LmZuLmV4dGVuZCh7c2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJu
IHYucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24o
KXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50cz92Lm1ha2VB
cnJheSh0aGlzLmVsZW1lbnRzKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu
bmFtZSYmIXRoaXMuZGlzYWJsZWQmJih0aGlzLmNoZWNrZWR8fGFuLnRlc3QodGhpcy5ub2RlTmFt
ZSl8fHVuLnRlc3QodGhpcy50eXBlKSl9KS5tYXAoZnVuY3Rpb24oZSx0KXt2YXIgbj12KHRoaXMp
LnZhbCgpO3JldHVybiBuPT1udWxsP251bGw6di5pc0FycmF5KG4pP3YubWFwKG4sZnVuY3Rpb24o
ZSxuKXtyZXR1cm57bmFtZTp0Lm5hbWUsdmFsdWU6ZS5yZXBsYWNlKG9uLCJcclxuIil9fSk6e25h
bWU6dC5uYW1lLHZhbHVlOm4ucmVwbGFjZShvbiwiXHJcbiIpfX0pLmdldCgpfX0pLHYucGFyYW09
ZnVuY3Rpb24oZSxuKXt2YXIgcixpPVtdLHM9ZnVuY3Rpb24oZSx0KXt0PXYuaXNGdW5jdGlvbih0
KT90KCk6dD09bnVsbD8iIjp0LGlbaS5sZW5ndGhdPWVuY29kZVVSSUNvbXBvbmVudChlKSsiPSIr
ZW5jb2RlVVJJQ29tcG9uZW50KHQpfTtuPT09dCYmKG49di5hamF4U2V0dGluZ3MmJnYuYWpheFNl
dHRpbmdzLnRyYWRpdGlvbmFsKTtpZih2LmlzQXJyYXkoZSl8fGUuanF1ZXJ5JiYhdi5pc1BsYWlu
T2JqZWN0KGUpKXYuZWFjaChlLGZ1bmN0aW9uKCl7cyh0aGlzLm5hbWUsdGhpcy52YWx1ZSl9KTtl
bHNlIGZvcihyIGluIGUpZm4ocixlW3JdLG4scyk7cmV0dXJuIGkuam9pbigiJiIpLnJlcGxhY2Uo
cm4sIisiKX07dmFyIGxuLGNuLGhuPS8jLiokLyxwbj0vXiguKj8pOlsgXHRdKihbXlxyXG5dKilc
cj8kL21nLGRuPS9eKD86YWJvdXR8YXBwfGFwcFwtc3RvcmFnZXwuK1wtZXh0ZW5zaW9ufGZpbGV8
cmVzfHdpZGdldCk6JC8sdm49L14oPzpHRVR8SEVBRCkkLyxtbj0vXlwvXC8vLGduPS9cPy8seW49
LzxzY3JpcHRcYltePF0qKD86KD8hPFwvc2NyaXB0Pik8W148XSopKjxcL3NjcmlwdD4vZ2ksYm49
LyhbPyZdKV89W14mXSovLHduPS9eKFtcd1wrXC5cLV0rOikoPzpcL1wvKFteXC8/IzpdKikoPzo6
KFxkKyl8KXwpLyxFbj12LmZuLmxvYWQsU249e30seG49e30sVG49WyIqLyJdK1siKiJdO3RyeXtj
bj1zLmhyZWZ9Y2F0Y2goTm4pe2NuPWkuY3JlYXRlRWxlbWVudCgiYSIpLGNuLmhyZWY9IiIsY249
Y24uaHJlZn1sbj13bi5leGVjKGNuLnRvTG93ZXJDYXNlKCkpfHxbXSx2LmZuLmxvYWQ9ZnVuY3Rp
b24oZSxuLHIpe2lmKHR5cGVvZiBlIT0ic3RyaW5nIiYmRW4pcmV0dXJuIEVuLmFwcGx5KHRoaXMs
YXJndW1lbnRzKTtpZighdGhpcy5sZW5ndGgpcmV0dXJuIHRoaXM7dmFyIGkscyxvLHU9dGhpcyxh
PWUuaW5kZXhPZigiICIpO3JldHVybiBhPj0wJiYoaT1lLnNsaWNlKGEsZS5sZW5ndGgpLGU9ZS5z
bGljZSgwLGEpKSx2LmlzRnVuY3Rpb24obik/KHI9bixuPXQpOm4mJnR5cGVvZiBuPT0ib2JqZWN0
IiYmKHM9IlBPU1QiKSx2LmFqYXgoe3VybDplLHR5cGU6cyxkYXRhVHlwZToiaHRtbCIsZGF0YTpu
LGNvbXBsZXRlOmZ1bmN0aW9uKGUsdCl7ciYmdS5lYWNoKHIsb3x8W2UucmVzcG9uc2VUZXh0LHQs
ZV0pfX0pLmRvbmUoZnVuY3Rpb24oZSl7bz1hcmd1bWVudHMsdS5odG1sKGk/digiPGRpdj4iKS5h
cHBlbmQoZS5yZXBsYWNlKHluLCIiKSkuZmluZChpKTplKX0pLHRoaXN9LHYuZWFjaCgiYWpheFN0
YXJ0IGFqYXhTdG9wIGFqYXhDb21wbGV0ZSBhamF4RXJyb3IgYWpheFN1Y2Nlc3MgYWpheFNlbmQi
LnNwbGl0KCIgIiksZnVuY3Rpb24oZSx0KXt2LmZuW3RdPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlz
Lm9uKHQsZSl9fSksdi5lYWNoKFsiZ2V0IiwicG9zdCJdLGZ1bmN0aW9uKGUsbil7dltuXT1mdW5j
dGlvbihlLHIsaSxzKXtyZXR1cm4gdi5pc0Z1bmN0aW9uKHIpJiYocz1zfHxpLGk9cixyPXQpLHYu
YWpheCh7dHlwZTpuLHVybDplLGRhdGE6cixzdWNjZXNzOmksZGF0YVR5cGU6c30pfX0pLHYuZXh0
ZW5kKHtnZXRTY3JpcHQ6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdi5nZXQoZSx0LG4sInNjcmlwdCIp
fSxnZXRKU09OOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdi5nZXQoZSx0LG4sImpzb24iKX0sYWph
eFNldHVwOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/TG4oZSx2LmFqYXhTZXR0aW5ncyk6KHQ9ZSxl
PXYuYWpheFNldHRpbmdzKSxMbihlLHQpLGV9LGFqYXhTZXR0aW5nczp7dXJsOmNuLGlzTG9jYWw6
ZG4udGVzdChsblsxXSksZ2xvYmFsOiEwLHR5cGU6IkdFVCIsY29udGVudFR5cGU6ImFwcGxpY2F0
aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOCIscHJvY2Vzc0RhdGE6ITAs
YXN5bmM6ITAsYWNjZXB0czp7eG1sOiJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sIixodG1sOiJ0
ZXh0L2h0bWwiLHRleHQ6InRleHQvcGxhaW4iLGpzb246ImFwcGxpY2F0aW9uL2pzb24sIHRleHQv
amF2YXNjcmlwdCIsIioiOlRufSxjb250ZW50czp7eG1sOi94bWwvLGh0bWw6L2h0bWwvLGpzb246
L2pzb24vfSxyZXNwb25zZUZpZWxkczp7eG1sOiJyZXNwb25zZVhNTCIsdGV4dDoicmVzcG9uc2VU
ZXh0In0sY29udmVydGVyczp7IiogdGV4dCI6ZS5TdHJpbmcsInRleHQgaHRtbCI6ITAsInRleHQg
anNvbiI6di5wYXJzZUpTT04sInRleHQgeG1sIjp2LnBhcnNlWE1MfSxmbGF0T3B0aW9uczp7Y29u
dGV4dDohMCx1cmw6ITB9fSxhamF4UHJlZmlsdGVyOkNuKFNuKSxhamF4VHJhbnNwb3J0OkNuKHhu
KSxhamF4OmZ1bmN0aW9uKGUsbil7ZnVuY3Rpb24gVChlLG4scyxhKXt2YXIgbCx5LGIsdyxTLFQ9
bjtpZihFPT09MilyZXR1cm47RT0yLHUmJmNsZWFyVGltZW91dCh1KSxvPXQsaT1hfHwiIix4LnJl
YWR5U3RhdGU9ZT4wPzQ6MCxzJiYodz1BbihjLHgscykpO2lmKGU+PTIwMCYmZTwzMDB8fGU9PT0z
MDQpYy5pZk1vZGlmaWVkJiYoUz14LmdldFJlc3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIiks
UyYmKHYubGFzdE1vZGlmaWVkW3JdPVMpLFM9eC5nZXRSZXNwb25zZUhlYWRlcigiRXRhZyIpLFMm
Jih2LmV0YWdbcl09UykpLGU9PT0zMDQ/KFQ9Im5vdG1vZGlmaWVkIixsPSEwKToobD1PbihjLHcp
LFQ9bC5zdGF0ZSx5PWwuZGF0YSxiPWwuZXJyb3IsbD0hYik7ZWxzZXtiPVQ7aWYoIVR8fGUpVD0i
ZXJyb3IiLGU8MCYmKGU9MCl9eC5zdGF0dXM9ZSx4LnN0YXR1c1RleHQ9KG58fFQpKyIiLGw/ZC5y
ZXNvbHZlV2l0aChoLFt5LFQseF0pOmQucmVqZWN0V2l0aChoLFt4LFQsYl0pLHguc3RhdHVzQ29k
ZShnKSxnPXQsZiYmcC50cmlnZ2VyKCJhamF4IisobD8iU3VjY2VzcyI6IkVycm9yIiksW3gsYyxs
P3k6Yl0pLG0uZmlyZVdpdGgoaCxbeCxUXSksZiYmKHAudHJpZ2dlcigiYWpheENvbXBsZXRlIixb
eCxjXSksLS12LmFjdGl2ZXx8di5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpKX10eXBlb2YgZT09
Im9iamVjdCImJihuPWUsZT10KSxuPW58fHt9O3ZhciByLGkscyxvLHUsYSxmLGwsYz12LmFqYXhT
ZXR1cCh7fSxuKSxoPWMuY29udGV4dHx8YyxwPWghPT1jJiYoaC5ub2RlVHlwZXx8aCBpbnN0YW5j
ZW9mIHYpP3YoaCk6di5ldmVudCxkPXYuRGVmZXJyZWQoKSxtPXYuQ2FsbGJhY2tzKCJvbmNlIG1l
bW9yeSIpLGc9Yy5zdGF0dXNDb2RlfHx7fSxiPXt9LHc9e30sRT0wLFM9ImNhbmNlbGVkIix4PXty
ZWFkeVN0YXRlOjAsc2V0UmVxdWVzdEhlYWRlcjpmdW5jdGlvbihlLHQpe2lmKCFFKXt2YXIgbj1l
LnRvTG93ZXJDYXNlKCk7ZT13W25dPXdbbl18fGUsYltlXT10fXJldHVybiB0aGlzfSxnZXRBbGxS
ZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gRT09PTI/aTpudWxsfSxnZXRSZXNwb25z
ZUhlYWRlcjpmdW5jdGlvbihlKXt2YXIgbjtpZihFPT09Mil7aWYoIXMpe3M9e307d2hpbGUobj1w
bi5leGVjKGkpKXNbblsxXS50b0xvd2VyQ2FzZSgpXT1uWzJdfW49c1tlLnRvTG93ZXJDYXNlKCld
fXJldHVybiBuPT09dD9udWxsOm59LG92ZXJyaWRlTWltZVR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJu
IEV8fChjLm1pbWVUeXBlPWUpLHRoaXN9LGFib3J0OmZ1bmN0aW9uKGUpe3JldHVybiBlPWV8fFMs
byYmby5hYm9ydChlKSxUKDAsZSksdGhpc319O2QucHJvbWlzZSh4KSx4LnN1Y2Nlc3M9eC5kb25l
LHguZXJyb3I9eC5mYWlsLHguY29tcGxldGU9bS5hZGQseC5zdGF0dXNDb2RlPWZ1bmN0aW9uKGUp
e2lmKGUpe3ZhciB0O2lmKEU8Milmb3IodCBpbiBlKWdbdF09W2dbdF0sZVt0XV07ZWxzZSB0PWVb
eC5zdGF0dXNdLHguYWx3YXlzKHQpfXJldHVybiB0aGlzfSxjLnVybD0oKGV8fGMudXJsKSsiIiku
cmVwbGFjZShobiwiIikucmVwbGFjZShtbixsblsxXSsiLy8iKSxjLmRhdGFUeXBlcz12LnRyaW0o
Yy5kYXRhVHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLnNwbGl0KHkpLGMuY3Jvc3NEb21haW49PW51
bGwmJihhPXduLmV4ZWMoYy51cmwudG9Mb3dlckNhc2UoKSksYy5jcm9zc0RvbWFpbj0hKCFhfHxh
WzFdPT09bG5bMV0mJmFbMl09PT1sblsyXSYmKGFbM118fChhWzFdPT09Imh0dHA6Ij84MDo0NDMp
KT09KGxuWzNdfHwobG5bMV09PT0iaHR0cDoiPzgwOjQ0MykpKSksYy5kYXRhJiZjLnByb2Nlc3NE
YXRhJiZ0eXBlb2YgYy5kYXRhIT0ic3RyaW5nIiYmKGMuZGF0YT12LnBhcmFtKGMuZGF0YSxjLnRy
YWRpdGlvbmFsKSksa24oU24sYyxuLHgpO2lmKEU9PT0yKXJldHVybiB4O2Y9Yy5nbG9iYWwsYy50
eXBlPWMudHlwZS50b1VwcGVyQ2FzZSgpLGMuaGFzQ29udGVudD0hdm4udGVzdChjLnR5cGUpLGYm
JnYuYWN0aXZlKys9PT0wJiZ2LmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpO2lmKCFjLmhhc0Nv
bnRlbnQpe2MuZGF0YSYmKGMudXJsKz0oZ24udGVzdChjLnVybCk/IiYiOiI/IikrYy5kYXRhLGRl
bGV0ZSBjLmRhdGEpLHI9Yy51cmw7aWYoYy5jYWNoZT09PSExKXt2YXIgTj12Lm5vdygpLEM9Yy51
cmwucmVwbGFjZShibiwiJDFfPSIrTik7Yy51cmw9QysoQz09PWMudXJsPyhnbi50ZXN0KGMudXJs
KT8iJiI6Ij8iKSsiXz0iK046IiIpfX0oYy5kYXRhJiZjLmhhc0NvbnRlbnQmJmMuY29udGVudFR5
cGUhPT0hMXx8bi5jb250ZW50VHlwZSkmJnguc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBl
IixjLmNvbnRlbnRUeXBlKSxjLmlmTW9kaWZpZWQmJihyPXJ8fGMudXJsLHYubGFzdE1vZGlmaWVk
W3JdJiZ4LnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIix2Lmxhc3RNb2RpZmll
ZFtyXSksdi5ldGFnW3JdJiZ4LnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLHYuZXRh
Z1tyXSkpLHguc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IixjLmRhdGFUeXBlc1swXSYmYy5hY2Nl
cHRzW2MuZGF0YVR5cGVzWzBdXT9jLmFjY2VwdHNbYy5kYXRhVHlwZXNbMF1dKyhjLmRhdGFUeXBl
c1swXSE9PSIqIj8iLCAiK1RuKyI7IHE9MC4wMSI6IiIpOmMuYWNjZXB0c1siKiJdKTtmb3IobCBp
biBjLmhlYWRlcnMpeC5zZXRSZXF1ZXN0SGVhZGVyKGwsYy5oZWFkZXJzW2xdKTtpZighYy5iZWZv
cmVTZW5kfHxjLmJlZm9yZVNlbmQuY2FsbChoLHgsYykhPT0hMSYmRSE9PTIpe1M9ImFib3J0Ijtm
b3IobCBpbntzdWNjZXNzOjEsZXJyb3I6MSxjb21wbGV0ZToxfSl4W2xdKGNbbF0pO289a24oeG4s
YyxuLHgpO2lmKCFvKVQoLTEsIk5vIFRyYW5zcG9ydCIpO2Vsc2V7eC5yZWFkeVN0YXRlPTEsZiYm
cC50cmlnZ2VyKCJhamF4U2VuZCIsW3gsY10pLGMuYXN5bmMmJmMudGltZW91dD4wJiYodT1zZXRU
aW1lb3V0KGZ1bmN0aW9uKCl7eC5hYm9ydCgidGltZW91dCIpfSxjLnRpbWVvdXQpKTt0cnl7RT0x
LG8uc2VuZChiLFQpfWNhdGNoKGspe2lmKCEoRTwyKSl0aHJvdyBrO1QoLTEsayl9fXJldHVybiB4
fXJldHVybiB4LmFib3J0KCl9LGFjdGl2ZTowLGxhc3RNb2RpZmllZDp7fSxldGFnOnt9fSk7dmFy
IE1uPVtdLF9uPS9cPy8sRG49Lyg9KVw/KD89JnwkKXxcP1w/LyxQbj12Lm5vdygpO3YuYWpheFNl
dHVwKHtqc29ucDoiY2FsbGJhY2siLGpzb25wQ2FsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgZT1Nbi5w
b3AoKXx8di5leHBhbmRvKyJfIitQbisrO3JldHVybiB0aGlzW2VdPSEwLGV9fSksdi5hamF4UHJl
ZmlsdGVyKCJqc29uIGpzb25wIixmdW5jdGlvbihuLHIsaSl7dmFyIHMsbyx1LGE9bi5kYXRhLGY9
bi51cmwsbD1uLmpzb25wIT09ITEsYz1sJiZEbi50ZXN0KGYpLGg9bCYmIWMmJnR5cGVvZiBhPT0i
c3RyaW5nIiYmIShuLmNvbnRlbnRUeXBlfHwiIikuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ct
Zm9ybS11cmxlbmNvZGVkIikmJkRuLnRlc3QoYSk7aWYobi5kYXRhVHlwZXNbMF09PT0ianNvbnAi
fHxjfHxoKXJldHVybiBzPW4uanNvbnBDYWxsYmFjaz12LmlzRnVuY3Rpb24obi5qc29ucENhbGxi
YWNrKT9uLmpzb25wQ2FsbGJhY2soKTpuLmpzb25wQ2FsbGJhY2ssbz1lW3NdLGM/bi51cmw9Zi5y
ZXBsYWNlKERuLCIkMSIrcyk6aD9uLmRhdGE9YS5yZXBsYWNlKERuLCIkMSIrcyk6bCYmKG4udXJs
Kz0oX24udGVzdChmKT8iJiI6Ij8iKStuLmpzb25wKyI9IitzKSxuLmNvbnZlcnRlcnNbInNjcmlw
dCBqc29uIl09ZnVuY3Rpb24oKXtyZXR1cm4gdXx8di5lcnJvcihzKyIgd2FzIG5vdCBjYWxsZWQi
KSx1WzBdfSxuLmRhdGFUeXBlc1swXT0ianNvbiIsZVtzXT1mdW5jdGlvbigpe3U9YXJndW1lbnRz
fSxpLmFsd2F5cyhmdW5jdGlvbigpe2Vbc109byxuW3NdJiYobi5qc29ucENhbGxiYWNrPXIuanNv
bnBDYWxsYmFjayxNbi5wdXNoKHMpKSx1JiZ2LmlzRnVuY3Rpb24obykmJm8odVswXSksdT1vPXR9
KSwic2NyaXB0In0pLHYuYWpheFNldHVwKHthY2NlcHRzOntzY3JpcHQ6InRleHQvamF2YXNjcmlw
dCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGlj
YXRpb24veC1lY21hc2NyaXB0In0sY29udGVudHM6e3NjcmlwdDovamF2YXNjcmlwdHxlY21hc2Ny
aXB0L30sY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbihlKXtyZXR1cm4gdi5nbG9i
YWxFdmFsKGUpLGV9fX0pLHYuYWpheFByZWZpbHRlcigic2NyaXB0IixmdW5jdGlvbihlKXtlLmNh
Y2hlPT09dCYmKGUuY2FjaGU9ITEpLGUuY3Jvc3NEb21haW4mJihlLnR5cGU9IkdFVCIsZS5nbG9i
YWw9ITEpfSksdi5hamF4VHJhbnNwb3J0KCJzY3JpcHQiLGZ1bmN0aW9uKGUpe2lmKGUuY3Jvc3NE
b21haW4pe3ZhciBuLHI9aS5oZWFkfHxpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF18
fGkuZG9jdW1lbnRFbGVtZW50O3JldHVybntzZW5kOmZ1bmN0aW9uKHMsbyl7bj1pLmNyZWF0ZUVs
ZW1lbnQoInNjcmlwdCIpLG4uYXN5bmM9ImFzeW5jIixlLnNjcmlwdENoYXJzZXQmJihuLmNoYXJz
ZXQ9ZS5zY3JpcHRDaGFyc2V0KSxuLnNyYz1lLnVybCxuLm9ubG9hZD1uLm9ucmVhZHlzdGF0ZWNo
YW5nZT1mdW5jdGlvbihlLGkpe2lmKGl8fCFuLnJlYWR5U3RhdGV8fC9sb2FkZWR8Y29tcGxldGUv
LnRlc3Qobi5yZWFkeVN0YXRlKSluLm9ubG9hZD1uLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLHIm
Jm4ucGFyZW50Tm9kZSYmci5yZW1vdmVDaGlsZChuKSxuPXQsaXx8bygyMDAsInN1Y2Nlc3MiKX0s
ci5pbnNlcnRCZWZvcmUobixyLmZpcnN0Q2hpbGQpfSxhYm9ydDpmdW5jdGlvbigpe24mJm4ub25s
b2FkKDAsMSl9fX19KTt2YXIgSG4sQm49ZS5BY3RpdmVYT2JqZWN0P2Z1bmN0aW9uKCl7Zm9yKHZh
ciBlIGluIEhuKUhuW2VdKDAsMSl9OiExLGpuPTA7di5hamF4U2V0dGluZ3MueGhyPWUuQWN0aXZl
WE9iamVjdD9mdW5jdGlvbigpe3JldHVybiF0aGlzLmlzTG9jYWwmJkZuKCl8fEluKCl9OkZuLGZ1
bmN0aW9uKGUpe3YuZXh0ZW5kKHYuc3VwcG9ydCx7YWpheDohIWUsY29yczohIWUmJiJ3aXRoQ3Jl
ZGVudGlhbHMiaW4gZX0pfSh2LmFqYXhTZXR0aW5ncy54aHIoKSksdi5zdXBwb3J0LmFqYXgmJnYu
YWpheFRyYW5zcG9ydChmdW5jdGlvbihuKXtpZighbi5jcm9zc0RvbWFpbnx8di5zdXBwb3J0LmNv
cnMpe3ZhciByO3JldHVybntzZW5kOmZ1bmN0aW9uKGkscyl7dmFyIG8sdSxhPW4ueGhyKCk7bi51
c2VybmFtZT9hLm9wZW4obi50eXBlLG4udXJsLG4uYXN5bmMsbi51c2VybmFtZSxuLnBhc3N3b3Jk
KTphLm9wZW4obi50eXBlLG4udXJsLG4uYXN5bmMpO2lmKG4ueGhyRmllbGRzKWZvcih1IGluIG4u
eGhyRmllbGRzKWFbdV09bi54aHJGaWVsZHNbdV07bi5taW1lVHlwZSYmYS5vdmVycmlkZU1pbWVU
eXBlJiZhLm92ZXJyaWRlTWltZVR5cGUobi5taW1lVHlwZSksIW4uY3Jvc3NEb21haW4mJiFpWyJY
LVJlcXVlc3RlZC1XaXRoIl0mJihpWyJYLVJlcXVlc3RlZC1XaXRoIl09IlhNTEh0dHBSZXF1ZXN0
Iik7dHJ5e2Zvcih1IGluIGkpYS5zZXRSZXF1ZXN0SGVhZGVyKHUsaVt1XSl9Y2F0Y2goZil7fWEu
c2VuZChuLmhhc0NvbnRlbnQmJm4uZGF0YXx8bnVsbCkscj1mdW5jdGlvbihlLGkpe3ZhciB1LGYs
bCxjLGg7dHJ5e2lmKHImJihpfHxhLnJlYWR5U3RhdGU9PT00KSl7cj10LG8mJihhLm9ucmVhZHlz
dGF0ZWNoYW5nZT12Lm5vb3AsQm4mJmRlbGV0ZSBIbltvXSk7aWYoaSlhLnJlYWR5U3RhdGUhPT00
JiZhLmFib3J0KCk7ZWxzZXt1PWEuc3RhdHVzLGw9YS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSxj
PXt9LGg9YS5yZXNwb25zZVhNTCxoJiZoLmRvY3VtZW50RWxlbWVudCYmKGMueG1sPWgpO3RyeXtj
LnRleHQ9YS5yZXNwb25zZVRleHR9Y2F0Y2gocCl7fXRyeXtmPWEuc3RhdHVzVGV4dH1jYXRjaChw
KXtmPSIifSF1JiZuLmlzTG9jYWwmJiFuLmNyb3NzRG9tYWluP3U9Yy50ZXh0PzIwMDo0MDQ6dT09
PTEyMjMmJih1PTIwNCl9fX1jYXRjaChkKXtpfHxzKC0xLGQpfWMmJnModSxmLGMsbCl9LG4uYXN5
bmM/YS5yZWFkeVN0YXRlPT09ND9zZXRUaW1lb3V0KHIsMCk6KG89KytqbixCbiYmKEhufHwoSG49
e30sdihlKS51bmxvYWQoQm4pKSxIbltvXT1yKSxhLm9ucmVhZHlzdGF0ZWNoYW5nZT1yKTpyKCl9
LGFib3J0OmZ1bmN0aW9uKCl7ciYmcigwLDEpfX19fSk7dmFyIHFuLFJuLFVuPS9eKD86dG9nZ2xl
fHNob3d8aGlkZSkkLyx6bj1uZXcgUmVnRXhwKCJeKD86KFstK10pPXwpKCIrbSsiKShbYS16JV0q
KSQiLCJpIiksV249L3F1ZXVlSG9va3MkLyxYbj1bR25dLFZuPXsiKiI6W2Z1bmN0aW9uKGUsdCl7
dmFyIG4scixpPXRoaXMuY3JlYXRlVHdlZW4oZSx0KSxzPXpuLmV4ZWModCksbz1pLmN1cigpLHU9
K298fDAsYT0xLGY9MjA7aWYocyl7bj0rc1syXSxyPXNbM118fCh2LmNzc051bWJlcltlXT8iIjoi
cHgiKTtpZihyIT09InB4IiYmdSl7dT12LmNzcyhpLmVsZW0sZSwhMCl8fG58fDE7ZG8gYT1hfHwi
LjUiLHUvPWEsdi5zdHlsZShpLmVsZW0sZSx1K3IpO3doaWxlKGEhPT0oYT1pLmN1cigpL28pJiZh
IT09MSYmLS1mKX1pLnVuaXQ9cixpLnN0YXJ0PXUsaS5lbmQ9c1sxXT91KyhzWzFdKzEpKm46bn1y
ZXR1cm4gaX1dfTt2LkFuaW1hdGlvbj12LmV4dGVuZChLbix7dHdlZW5lcjpmdW5jdGlvbihlLHQp
e3YuaXNGdW5jdGlvbihlKT8odD1lLGU9WyIqIl0pOmU9ZS5zcGxpdCgiICIpO3ZhciBuLHI9MCxp
PWUubGVuZ3RoO2Zvcig7cjxpO3IrKyluPWVbcl0sVm5bbl09Vm5bbl18fFtdLFZuW25dLnVuc2hp
ZnQodCl9LHByZWZpbHRlcjpmdW5jdGlvbihlLHQpe3Q/WG4udW5zaGlmdChlKTpYbi5wdXNoKGUp
fX0pLHYuVHdlZW49WW4sWW4ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpZbixpbml0OmZ1bmN0aW9u
KGUsdCxuLHIsaSxzKXt0aGlzLmVsZW09ZSx0aGlzLnByb3A9bix0aGlzLmVhc2luZz1pfHwic3dp
bmciLHRoaXMub3B0aW9ucz10LHRoaXMuc3RhcnQ9dGhpcy5ub3c9dGhpcy5jdXIoKSx0aGlzLmVu
ZD1yLHRoaXMudW5pdD1zfHwodi5jc3NOdW1iZXJbbl0/IiI6InB4Iil9LGN1cjpmdW5jdGlvbigp
e3ZhciBlPVluLnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiBlJiZlLmdldD9lLmdldCh0aGlz
KTpZbi5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KHRoaXMpfSxydW46ZnVuY3Rpb24oZSl7dmFyIHQs
bj1Zbi5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gdGhpcy5vcHRpb25zLmR1cmF0aW9uP3Ro
aXMucG9zPXQ9di5lYXNpbmdbdGhpcy5lYXNpbmddKGUsdGhpcy5vcHRpb25zLmR1cmF0aW9uKmUs
MCwxLHRoaXMub3B0aW9ucy5kdXJhdGlvbik6dGhpcy5wb3M9dD1lLHRoaXMubm93PSh0aGlzLmVu
ZC10aGlzLnN0YXJ0KSp0K3RoaXMuc3RhcnQsdGhpcy5vcHRpb25zLnN0ZXAmJnRoaXMub3B0aW9u
cy5zdGVwLmNhbGwodGhpcy5lbGVtLHRoaXMubm93LHRoaXMpLG4mJm4uc2V0P24uc2V0KHRoaXMp
OlluLnByb3BIb29rcy5fZGVmYXVsdC5zZXQodGhpcyksdGhpc319LFluLnByb3RvdHlwZS5pbml0
LnByb3RvdHlwZT1Zbi5wcm90b3R5cGUsWW4ucHJvcEhvb2tzPXtfZGVmYXVsdDp7Z2V0OmZ1bmN0
aW9uKGUpe3ZhciB0O3JldHVybiBlLmVsZW1bZS5wcm9wXT09bnVsbHx8ISFlLmVsZW0uc3R5bGUm
JmUuZWxlbS5zdHlsZVtlLnByb3BdIT1udWxsPyh0PXYuY3NzKGUuZWxlbSxlLnByb3AsITEsIiIp
LCF0fHx0PT09ImF1dG8iPzA6dCk6ZS5lbGVtW2UucHJvcF19LHNldDpmdW5jdGlvbihlKXt2LmZ4
LnN0ZXBbZS5wcm9wXT92LmZ4LnN0ZXBbZS5wcm9wXShlKTplLmVsZW0uc3R5bGUmJihlLmVsZW0u
c3R5bGVbdi5jc3NQcm9wc1tlLnByb3BdXSE9bnVsbHx8di5jc3NIb29rc1tlLnByb3BdKT92LnN0
eWxlKGUuZWxlbSxlLnByb3AsZS5ub3crZS51bml0KTplLmVsZW1bZS5wcm9wXT1lLm5vd319fSxZ
bi5wcm9wSG9va3Muc2Nyb2xsVG9wPVluLnByb3BIb29rcy5zY3JvbGxMZWZ0PXtzZXQ6ZnVuY3Rp
b24oZSl7ZS5lbGVtLm5vZGVUeXBlJiZlLmVsZW0ucGFyZW50Tm9kZSYmKGUuZWxlbVtlLnByb3Bd
PWUubm93KX19LHYuZWFjaChbInRvZ2dsZSIsInNob3ciLCJoaWRlIl0sZnVuY3Rpb24oZSx0KXt2
YXIgbj12LmZuW3RdO3YuZm5bdF09ZnVuY3Rpb24ocixpLHMpe3JldHVybiByPT1udWxsfHx0eXBl
b2Ygcj09ImJvb2xlYW4ifHwhZSYmdi5pc0Z1bmN0aW9uKHIpJiZ2LmlzRnVuY3Rpb24oaSk/bi5h
cHBseSh0aGlzLGFyZ3VtZW50cyk6dGhpcy5hbmltYXRlKFpuKHQsITApLHIsaSxzKX19KSx2LmZu
LmV4dGVuZCh7ZmFkZVRvOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLmZpbHRlcihHdCku
Y3NzKCJvcGFjaXR5IiwwKS5zaG93KCkuZW5kKCkuYW5pbWF0ZSh7b3BhY2l0eTp0fSxlLG4scil9
LGFuaW1hdGU6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9di5pc0VtcHR5T2JqZWN0KGUpLHM9di5z
cGVlZCh0LG4sciksbz1mdW5jdGlvbigpe3ZhciB0PUtuKHRoaXMsdi5leHRlbmQoe30sZSkscyk7
aSYmdC5zdG9wKCEwKX07cmV0dXJuIGl8fHMucXVldWU9PT0hMT90aGlzLmVhY2gobyk6dGhpcy5x
dWV1ZShzLnF1ZXVlLG8pfSxzdG9wOmZ1bmN0aW9uKGUsbixyKXt2YXIgaT1mdW5jdGlvbihlKXt2
YXIgdD1lLnN0b3A7ZGVsZXRlIGUuc3RvcCx0KHIpfTtyZXR1cm4gdHlwZW9mIGUhPSJzdHJpbmci
JiYocj1uLG49ZSxlPXQpLG4mJmUhPT0hMSYmdGhpcy5xdWV1ZShlfHwiZngiLFtdKSx0aGlzLmVh
Y2goZnVuY3Rpb24oKXt2YXIgdD0hMCxuPWUhPW51bGwmJmUrInF1ZXVlSG9va3MiLHM9di50aW1l
cnMsbz12Ll9kYXRhKHRoaXMpO2lmKG4pb1tuXSYmb1tuXS5zdG9wJiZpKG9bbl0pO2Vsc2UgZm9y
KG4gaW4gbylvW25dJiZvW25dLnN0b3AmJlduLnRlc3QobikmJmkob1tuXSk7Zm9yKG49cy5sZW5n
dGg7bi0tOylzW25dLmVsZW09PT10aGlzJiYoZT09bnVsbHx8c1tuXS5xdWV1ZT09PWUpJiYoc1tu
XS5hbmltLnN0b3AociksdD0hMSxzLnNwbGljZShuLDEpKTsodHx8IXIpJiZ2LmRlcXVldWUodGhp
cyxlKX0pfX0pLHYuZWFjaCh7c2xpZGVEb3duOlpuKCJzaG93Iiksc2xpZGVVcDpabigiaGlkZSIp
LHNsaWRlVG9nZ2xlOlpuKCJ0b2dnbGUiKSxmYWRlSW46e29wYWNpdHk6InNob3cifSxmYWRlT3V0
OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0eToidG9nZ2xlIn19LGZ1bmN0aW9u
KGUsdCl7di5mbltlXT1mdW5jdGlvbihlLG4scil7cmV0dXJuIHRoaXMuYW5pbWF0ZSh0LGUsbixy
KX19KSx2LnNwZWVkPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lJiZ0eXBlb2YgZT09Im9iamVjdCI/
di5leHRlbmQoe30sZSk6e2NvbXBsZXRlOm58fCFuJiZ0fHx2LmlzRnVuY3Rpb24oZSkmJmUsZHVy
YXRpb246ZSxlYXNpbmc6biYmdHx8dCYmIXYuaXNGdW5jdGlvbih0KSYmdH07ci5kdXJhdGlvbj12
LmZ4Lm9mZj8wOnR5cGVvZiByLmR1cmF0aW9uPT0ibnVtYmVyIj9yLmR1cmF0aW9uOnIuZHVyYXRp
b24gaW4gdi5meC5zcGVlZHM/di5meC5zcGVlZHNbci5kdXJhdGlvbl06di5meC5zcGVlZHMuX2Rl
ZmF1bHQ7aWYoci5xdWV1ZT09bnVsbHx8ci5xdWV1ZT09PSEwKXIucXVldWU9ImZ4IjtyZXR1cm4g
ci5vbGQ9ci5jb21wbGV0ZSxyLmNvbXBsZXRlPWZ1bmN0aW9uKCl7di5pc0Z1bmN0aW9uKHIub2xk
KSYmci5vbGQuY2FsbCh0aGlzKSxyLnF1ZXVlJiZ2LmRlcXVldWUodGhpcyxyLnF1ZXVlKX0scn0s
di5lYXNpbmc9e2xpbmVhcjpmdW5jdGlvbihlKXtyZXR1cm4gZX0sc3dpbmc6ZnVuY3Rpb24oZSl7
cmV0dXJuLjUtTWF0aC5jb3MoZSpNYXRoLlBJKS8yfX0sdi50aW1lcnM9W10sdi5meD1Zbi5wcm90
b3R5cGUuaW5pdCx2LmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgZSxuPXYudGltZXJzLHI9MDtxbj12
Lm5vdygpO2Zvcig7cjxuLmxlbmd0aDtyKyspZT1uW3JdLCFlKCkmJm5bcl09PT1lJiZuLnNwbGlj
ZShyLS0sMSk7bi5sZW5ndGh8fHYuZnguc3RvcCgpLHFuPXR9LHYuZngudGltZXI9ZnVuY3Rpb24o
ZSl7ZSgpJiZ2LnRpbWVycy5wdXNoKGUpJiYhUm4mJihSbj1zZXRJbnRlcnZhbCh2LmZ4LnRpY2ss
di5meC5pbnRlcnZhbCkpfSx2LmZ4LmludGVydmFsPTEzLHYuZnguc3RvcD1mdW5jdGlvbigpe2Ns
ZWFySW50ZXJ2YWwoUm4pLFJuPW51bGx9LHYuZnguc3BlZWRzPXtzbG93OjYwMCxmYXN0OjIwMCxf
ZGVmYXVsdDo0MDB9LHYuZnguc3RlcD17fSx2LmV4cHImJnYuZXhwci5maWx0ZXJzJiYodi5leHBy
LmZpbHRlcnMuYW5pbWF0ZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHYuZ3JlcCh2LnRpbWVycyxmdW5j
dGlvbih0KXtyZXR1cm4gZT09PXQuZWxlbX0pLmxlbmd0aH0pO3ZhciBlcj0vXig/OmJvZHl8aHRt
bCkkL2k7di5mbi5vZmZzZXQ9ZnVuY3Rpb24oZSl7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4g
ZT09PXQ/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24odCl7di5vZmZzZXQuc2V0T2Zmc2V0KHRoaXMs
ZSx0KX0pO3ZhciBuLHIsaSxzLG8sdSxhLGY9e3RvcDowLGxlZnQ6MH0sbD10aGlzWzBdLGM9bCYm
bC5vd25lckRvY3VtZW50O2lmKCFjKXJldHVybjtyZXR1cm4ocj1jLmJvZHkpPT09bD92Lm9mZnNl
dC5ib2R5T2Zmc2V0KGwpOihuPWMuZG9jdW1lbnRFbGVtZW50LHYuY29udGFpbnMobixsKT8odHlw
ZW9mIGwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0IT0idW5kZWZpbmVkIiYmKGY9bC5nZXRCb3VuZGlu
Z0NsaWVudFJlY3QoKSksaT10cihjKSxzPW4uY2xpZW50VG9wfHxyLmNsaWVudFRvcHx8MCxvPW4u
Y2xpZW50TGVmdHx8ci5jbGllbnRMZWZ0fHwwLHU9aS5wYWdlWU9mZnNldHx8bi5zY3JvbGxUb3As
YT1pLnBhZ2VYT2Zmc2V0fHxuLnNjcm9sbExlZnQse3RvcDpmLnRvcCt1LXMsbGVmdDpmLmxlZnQr
YS1vfSk6Zil9LHYub2Zmc2V0PXtib2R5T2Zmc2V0OmZ1bmN0aW9uKGUpe3ZhciB0PWUub2Zmc2V0
VG9wLG49ZS5vZmZzZXRMZWZ0O3JldHVybiB2LnN1cHBvcnQuZG9lc05vdEluY2x1ZGVNYXJnaW5J
bkJvZHlPZmZzZXQmJih0Kz1wYXJzZUZsb2F0KHYuY3NzKGUsIm1hcmdpblRvcCIpKXx8MCxuKz1w
YXJzZUZsb2F0KHYuY3NzKGUsIm1hcmdpbkxlZnQiKSl8fDApLHt0b3A6dCxsZWZ0Om59fSxzZXRP
ZmZzZXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXYuY3NzKGUsInBvc2l0aW9uIik7cj09PSJzdGF0
aWMiJiYoZS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKTt2YXIgaT12KGUpLHM9aS5vZmZzZXQo
KSxvPXYuY3NzKGUsInRvcCIpLHU9di5jc3MoZSwibGVmdCIpLGE9KHI9PT0iYWJzb2x1dGUifHxy
PT09ImZpeGVkIikmJnYuaW5BcnJheSgiYXV0byIsW28sdV0pPi0xLGY9e30sbD17fSxjLGg7YT8o
bD1pLnBvc2l0aW9uKCksYz1sLnRvcCxoPWwubGVmdCk6KGM9cGFyc2VGbG9hdChvKXx8MCxoPXBh
cnNlRmxvYXQodSl8fDApLHYuaXNGdW5jdGlvbih0KSYmKHQ9dC5jYWxsKGUsbixzKSksdC50b3Ah
PW51bGwmJihmLnRvcD10LnRvcC1zLnRvcCtjKSx0LmxlZnQhPW51bGwmJihmLmxlZnQ9dC5sZWZ0
LXMubGVmdCtoKSwidXNpbmciaW4gdD90LnVzaW5nLmNhbGwoZSxmKTppLmNzcyhmKX19LHYuZm4u
ZXh0ZW5kKHtwb3NpdGlvbjpmdW5jdGlvbigpe2lmKCF0aGlzWzBdKXJldHVybjt2YXIgZT10aGlz
WzBdLHQ9dGhpcy5vZmZzZXRQYXJlbnQoKSxuPXRoaXMub2Zmc2V0KCkscj1lci50ZXN0KHRbMF0u
bm9kZU5hbWUpP3t0b3A6MCxsZWZ0OjB9OnQub2Zmc2V0KCk7cmV0dXJuIG4udG9wLT1wYXJzZUZs
b2F0KHYuY3NzKGUsIm1hcmdpblRvcCIpKXx8MCxuLmxlZnQtPXBhcnNlRmxvYXQodi5jc3MoZSwi
bWFyZ2luTGVmdCIpKXx8MCxyLnRvcCs9cGFyc2VGbG9hdCh2LmNzcyh0WzBdLCJib3JkZXJUb3BX
aWR0aCIpKXx8MCxyLmxlZnQrPXBhcnNlRmxvYXQodi5jc3ModFswXSwiYm9yZGVyTGVmdFdpZHRo
IikpfHwwLHt0b3A6bi50b3Atci50b3AsbGVmdDpuLmxlZnQtci5sZWZ0fX0sb2Zmc2V0UGFyZW50
OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vZmZzZXRQ
YXJlbnR8fGkuYm9keTt3aGlsZShlJiYhZXIudGVzdChlLm5vZGVOYW1lKSYmdi5jc3MoZSwicG9z
aXRpb24iKT09PSJzdGF0aWMiKWU9ZS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGV8fGkuYm9keX0pfX0p
LHYuZWFjaCh7c2Nyb2xsTGVmdDoicGFnZVhPZmZzZXQiLHNjcm9sbFRvcDoicGFnZVlPZmZzZXQi
fSxmdW5jdGlvbihlLG4pe3ZhciByPS9ZLy50ZXN0KG4pO3YuZm5bZV09ZnVuY3Rpb24oaSl7cmV0
dXJuIHYuYWNjZXNzKHRoaXMsZnVuY3Rpb24oZSxpLHMpe3ZhciBvPXRyKGUpO2lmKHM9PT10KXJl
dHVybiBvP24gaW4gbz9vW25dOm8uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50W2ldOmVbaV07bz9v
LnNjcm9sbFRvKHI/dihvKS5zY3JvbGxMZWZ0KCk6cyxyP3M6dihvKS5zY3JvbGxUb3AoKSk6ZVtp
XT1zfSxlLGksYXJndW1lbnRzLmxlbmd0aCxudWxsKX19KSx2LmVhY2goe0hlaWdodDoiaGVpZ2h0
IixXaWR0aDoid2lkdGgifSxmdW5jdGlvbihlLG4pe3YuZWFjaCh7cGFkZGluZzoiaW5uZXIiK2Us
Y29udGVudDpuLCIiOiJvdXRlciIrZX0sZnVuY3Rpb24ocixpKXt2LmZuW2ldPWZ1bmN0aW9uKGks
cyl7dmFyIG89YXJndW1lbnRzLmxlbmd0aCYmKHJ8fHR5cGVvZiBpIT0iYm9vbGVhbiIpLHU9cnx8
KGk9PT0hMHx8cz09PSEwPyJtYXJnaW4iOiJib3JkZXIiKTtyZXR1cm4gdi5hY2Nlc3ModGhpcyxm
dW5jdGlvbihuLHIsaSl7dmFyIHM7cmV0dXJuIHYuaXNXaW5kb3cobik/bi5kb2N1bWVudC5kb2N1
bWVudEVsZW1lbnRbImNsaWVudCIrZV06bi5ub2RlVHlwZT09PTk/KHM9bi5kb2N1bWVudEVsZW1l
bnQsTWF0aC5tYXgobi5ib2R5WyJzY3JvbGwiK2VdLHNbInNjcm9sbCIrZV0sbi5ib2R5WyJvZmZz
ZXQiK2VdLHNbIm9mZnNldCIrZV0sc1siY2xpZW50IitlXSkpOmk9PT10P3YuY3NzKG4scixpLHUp
OnYuc3R5bGUobixyLGksdSl9LG4sbz9pOnQsbyxudWxsKX19KX0pLGUualF1ZXJ5PWUuJD12LHR5
cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQmJmRlZmluZS5hbWQualF1ZXJ5JiZk
ZWZpbmUoImpxdWVyeSIsW10sZnVuY3Rpb24oKXtyZXR1cm4gdn0pfSkod2luZG93KTsKXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gu
b3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25l
bnRzL211c3RhY2hlL211c3RhY2hlLmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVl
ZG9tZXRlcjIuMS9yZXNvdXJjZXMvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9tdXN0
YWNoZS9tdXN0YWNoZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43Mjg2ZWNmMjk5ZWFjMDkyMzA1OGY2Y2JiODQ2
YjBhM2ZjMmNiZmY5Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9y
Zy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50
cy9tdXN0YWNoZS9tdXN0YWNoZS5qcwpAQCAtMCwwICsxLDYzNSBAQAorLyohCisgKiBtdXN0YWNo
ZS5qcyAtIExvZ2ljLWxlc3Mge3ttdXN0YWNoZX19IHRlbXBsYXRlcyB3aXRoIEphdmFTY3JpcHQK
KyAqIGh0dHA6Ly9naXRodWIuY29tL2phbmwvbXVzdGFjaGUuanMKKyAqLworCisvKmdsb2JhbCBk
ZWZpbmU6IGZhbHNlKi8KKwordmFyIE11c3RhY2hlOworCisvKiEKKyAqIG11c3RhY2hlLmpzIC0g
TG9naWMtbGVzcyB7e211c3RhY2hlfX0gdGVtcGxhdGVzIHdpdGggSmF2YVNjcmlwdAorICogaHR0
cDovL2dpdGh1Yi5jb20vamFubC9tdXN0YWNoZS5qcworICovCisKKy8qZ2xvYmFsIGRlZmluZTog
ZmFsc2UqLworCit2YXIgTXVzdGFjaGU7CisKKyhmdW5jdGlvbiAoZXhwb3J0cykgeworICBpZiAo
dHlwZW9mIG1vZHVsZSAhPT0gInVuZGVmaW5lZCIgJiYgbW9kdWxlLmV4cG9ydHMpIHsKKyAgICBt
b2R1bGUuZXhwb3J0cyA9IGV4cG9ydHM7IC8vIENvbW1vbkpTCisgIH0gZWxzZSBpZiAodHlwZW9m
IGRlZmluZSA9PT0gImZ1bmN0aW9uIikgeworICAgIGRlZmluZShleHBvcnRzKTsgLy8gQU1ECisg
IH0gZWxzZSB7CisgICAgTXVzdGFjaGUgPSBleHBvcnRzOyAvLyA8c2NyaXB0PgorICB9Cit9KChm
dW5jdGlvbiAoKSB7CisKKyAgdmFyIGV4cG9ydHMgPSB7fTsKKworICBleHBvcnRzLm5hbWUgPSAi
bXVzdGFjaGUuanMiOworICBleHBvcnRzLnZlcnNpb24gPSAiMC43LjEiOworICBleHBvcnRzLnRh
Z3MgPSBbInt7IiwgIn19Il07CisKKyAgZXhwb3J0cy5TY2FubmVyID0gU2Nhbm5lcjsKKyAgZXhw
b3J0cy5Db250ZXh0ID0gQ29udGV4dDsKKyAgZXhwb3J0cy5Xcml0ZXIgPSBXcml0ZXI7CisKKyAg
dmFyIHdoaXRlUmUgPSAvXHMqLzsKKyAgdmFyIHNwYWNlUmUgPSAvXHMrLzsKKyAgdmFyIG5vblNw
YWNlUmUgPSAvXFMvOworICB2YXIgZXFSZSA9IC9ccyo9LzsKKyAgdmFyIGN1cmx5UmUgPSAvXHMq
XH0vOworICB2YXIgdGFnUmUgPSAvI3xcXnxcL3w+fFx7fCZ8PXwhLzsKKworICAvLyBXb3JrYXJv
dW5kIGZvciBodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0NPVUNIREItNTc3
CisgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vamFubC9tdXN0YWNoZS5qcy9pc3N1ZXMvMTg5
CisgIGZ1bmN0aW9uIHRlc3RSZShyZSwgc3RyaW5nKSB7CisgICAgcmV0dXJuIFJlZ0V4cC5wcm90
b3R5cGUudGVzdC5jYWxsKHJlLCBzdHJpbmcpOworICB9CisKKyAgZnVuY3Rpb24gaXNXaGl0ZXNw
YWNlKHN0cmluZykgeworICAgIHJldHVybiAhdGVzdFJlKG5vblNwYWNlUmUsIHN0cmluZyk7Cisg
IH0KKworICB2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKG9iaikgewor
ICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gIltvYmpl
Y3QgQXJyYXldIjsKKyAgfTsKKworICBmdW5jdGlvbiBlc2NhcGVSZShzdHJpbmcpIHsKKyAgICBy
ZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1tcLVxbXF17fSgpKis/LixcXFxeJHwjXHNdL2csICJcXCQm
Iik7CisgIH0KKworICB2YXIgZW50aXR5TWFwID0geworICAgICImIjogIiZhbXA7IiwKKyAgICAi
PCI6ICImbHQ7IiwKKyAgICAiPiI6ICImZ3Q7IiwKKyAgICAnIic6ICcmcXVvdDsnLAorICAgICIn
IjogJyYjMzk7JywKKyAgICAiLyI6ICcmI3gyRjsnCisgIH07CisKKyAgZnVuY3Rpb24gZXNjYXBl
SHRtbChzdHJpbmcpIHsKKyAgICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZSgvWyY8PiIn
XC9dL2csIGZ1bmN0aW9uIChzKSB7CisgICAgICByZXR1cm4gZW50aXR5TWFwW3NdOworICAgIH0p
OworICB9CisKKyAgLy8gRXhwb3J0IHRoZSBlc2NhcGluZyBmdW5jdGlvbiBzbyB0aGF0IHRoZSB1
c2VyIG1heSBvdmVycmlkZSBpdC4KKyAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qYW5sL211
c3RhY2hlLmpzL2lzc3Vlcy8yNDQKKyAgZXhwb3J0cy5lc2NhcGUgPSBlc2NhcGVIdG1sOworCisg
IGZ1bmN0aW9uIFNjYW5uZXIoc3RyaW5nKSB7CisgICAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7Cisg
ICAgdGhpcy50YWlsID0gc3RyaW5nOworICAgIHRoaXMucG9zID0gMDsKKyAgfQorCisgIC8qKgor
ICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdGFpbCBpcyBlbXB0eSAoZW5kIG9mIHN0cmluZyku
CisgICAqLworICBTY2FubmVyLnByb3RvdHlwZS5lb3MgPSBmdW5jdGlvbiAoKSB7CisgICAgcmV0
dXJuIHRoaXMudGFpbCA9PT0gIiI7CisgIH07CisKKyAgLyoqCisgICAqIFRyaWVzIHRvIG1hdGNo
IHRoZSBnaXZlbiByZWd1bGFyIGV4cHJlc3Npb24gYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24uCisg
ICAqIFJldHVybnMgdGhlIG1hdGNoZWQgdGV4dCBpZiBpdCBjYW4gbWF0Y2gsIHRoZSBlbXB0eSBz
dHJpbmcgb3RoZXJ3aXNlLgorICAgKi8KKyAgU2Nhbm5lci5wcm90b3R5cGUuc2NhbiA9IGZ1bmN0
aW9uIChyZSkgeworICAgIHZhciBtYXRjaCA9IHRoaXMudGFpbC5tYXRjaChyZSk7CisKKyAgICBp
ZiAobWF0Y2ggJiYgbWF0Y2guaW5kZXggPT09IDApIHsKKyAgICAgIHRoaXMudGFpbCA9IHRoaXMu
dGFpbC5zdWJzdHJpbmcobWF0Y2hbMF0ubGVuZ3RoKTsKKyAgICAgIHRoaXMucG9zICs9IG1hdGNo
WzBdLmxlbmd0aDsKKyAgICAgIHJldHVybiBtYXRjaFswXTsKKyAgICB9CisKKyAgICByZXR1cm4g
IiI7CisgIH07CisKKyAgLyoqCisgICAqIFNraXBzIGFsbCB0ZXh0IHVudGlsIHRoZSBnaXZlbiBy
ZWd1bGFyIGV4cHJlc3Npb24gY2FuIGJlIG1hdGNoZWQuIFJldHVybnMKKyAgICogdGhlIHNraXBw
ZWQgc3RyaW5nLCB3aGljaCBpcyB0aGUgZW50aXJlIHRhaWwgaWYgbm8gbWF0Y2ggY2FuIGJlIG1h
ZGUuCisgICAqLworICBTY2FubmVyLnByb3RvdHlwZS5zY2FuVW50aWwgPSBmdW5jdGlvbiAocmUp
IHsKKyAgICB2YXIgbWF0Y2gsIHBvcyA9IHRoaXMudGFpbC5zZWFyY2gocmUpOworCisgICAgc3dp
dGNoIChwb3MpIHsKKyAgICBjYXNlIC0xOgorICAgICAgbWF0Y2ggPSB0aGlzLnRhaWw7CisgICAg
ICB0aGlzLnBvcyArPSB0aGlzLnRhaWwubGVuZ3RoOworICAgICAgdGhpcy50YWlsID0gIiI7Cisg
ICAgICBicmVhazsKKyAgICBjYXNlIDA6CisgICAgICBtYXRjaCA9ICIiOworICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgIG1hdGNoID0gdGhpcy50YWlsLnN1YnN0cmluZygwLCBwb3Mp
OworICAgICAgdGhpcy50YWlsID0gdGhpcy50YWlsLnN1YnN0cmluZyhwb3MpOworICAgICAgdGhp
cy5wb3MgKz0gcG9zOworICAgIH0KKworICAgIHJldHVybiBtYXRjaDsKKyAgfTsKKworICBmdW5j
dGlvbiBDb250ZXh0KHZpZXcsIHBhcmVudCkgeworICAgIHRoaXMudmlldyA9IHZpZXc7CisgICAg
dGhpcy5wYXJlbnQgPSBwYXJlbnQ7CisgICAgdGhpcy5jbGVhckNhY2hlKCk7CisgIH0KKworICBD
b250ZXh0Lm1ha2UgPSBmdW5jdGlvbiAodmlldykgeworICAgIHJldHVybiAodmlldyBpbnN0YW5j
ZW9mIENvbnRleHQpID8gdmlldyA6IG5ldyBDb250ZXh0KHZpZXcpOworICB9OworCisgIENvbnRl
eHQucHJvdG90eXBlLmNsZWFyQ2FjaGUgPSBmdW5jdGlvbiAoKSB7CisgICAgdGhpcy5fY2FjaGUg
PSB7fTsKKyAgfTsKKworICBDb250ZXh0LnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKHZpZXcp
IHsKKyAgICByZXR1cm4gbmV3IENvbnRleHQodmlldywgdGhpcyk7CisgIH07CisKKyAgQ29udGV4
dC5wcm90b3R5cGUubG9va3VwID0gZnVuY3Rpb24gKG5hbWUpIHsKKyAgICB2YXIgdmFsdWUgPSB0
aGlzLl9jYWNoZVtuYW1lXTsKKworICAgIGlmICghdmFsdWUpIHsKKyAgICAgIGlmIChuYW1lID09
PSAiLiIpIHsKKyAgICAgICAgdmFsdWUgPSB0aGlzLnZpZXc7CisgICAgICB9IGVsc2UgeworICAg
ICAgICB2YXIgY29udGV4dCA9IHRoaXM7CisKKyAgICAgICAgd2hpbGUgKGNvbnRleHQpIHsKKyAg
ICAgICAgICBpZiAobmFtZS5pbmRleE9mKCIuIikgPiAwKSB7CisgICAgICAgICAgICB2YXIgbmFt
ZXMgPSBuYW1lLnNwbGl0KCIuIiksIGkgPSAwOworCisgICAgICAgICAgICB2YWx1ZSA9IGNvbnRl
eHQudmlldzsKKworICAgICAgICAgICAgd2hpbGUgKHZhbHVlICYmIGkgPCBuYW1lcy5sZW5ndGgp
IHsKKyAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVtuYW1lc1tpKytdXTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFsdWUgPSBjb250ZXh0LnZpZXdb
bmFtZV07CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKworICAgICAgICAgIGNvbnRleHQgPSBjb250
ZXh0LnBhcmVudDsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICB0aGlzLl9jYWNoZVtuYW1l
XSA9IHZhbHVlOworICAgIH0KKworICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICJmdW5jdGlvbiIp
IHsKKyAgICAgIHZhbHVlID0gdmFsdWUuY2FsbCh0aGlzLnZpZXcpOworICAgIH0KKworICAgIHJl
dHVybiB2YWx1ZTsKKyAgfTsKKworICBmdW5jdGlvbiBXcml0ZXIoKSB7CisgICAgdGhpcy5jbGVh
ckNhY2hlKCk7CisgIH0KKworICBXcml0ZXIucHJvdG90eXBlLmNsZWFyQ2FjaGUgPSBmdW5jdGlv
biAoKSB7CisgICAgdGhpcy5fY2FjaGUgPSB7fTsKKyAgICB0aGlzLl9wYXJ0aWFsQ2FjaGUgPSB7
fTsKKyAgfTsKKworICBXcml0ZXIucHJvdG90eXBlLmNvbXBpbGUgPSBmdW5jdGlvbiAodGVtcGxh
dGUsIHRhZ3MpIHsKKyAgICB2YXIgZm4gPSB0aGlzLl9jYWNoZVt0ZW1wbGF0ZV07CisKKyAgICBp
ZiAoIWZuKSB7CisgICAgICB2YXIgdG9rZW5zID0gZXhwb3J0cy5wYXJzZSh0ZW1wbGF0ZSwgdGFn
cyk7CisgICAgICBmbiA9IHRoaXMuX2NhY2hlW3RlbXBsYXRlXSA9IHRoaXMuY29tcGlsZVRva2Vu
cyh0b2tlbnMsIHRlbXBsYXRlKTsKKyAgICB9CisKKyAgICByZXR1cm4gZm47CisgIH07CisKKyAg
V3JpdGVyLnByb3RvdHlwZS5jb21waWxlUGFydGlhbCA9IGZ1bmN0aW9uIChuYW1lLCB0ZW1wbGF0
ZSwgdGFncykgeworICAgIHZhciBmbiA9IHRoaXMuY29tcGlsZSh0ZW1wbGF0ZSwgdGFncyk7Cisg
ICAgdGhpcy5fcGFydGlhbENhY2hlW25hbWVdID0gZm47CisgICAgcmV0dXJuIGZuOworICB9Owor
CisgIFdyaXRlci5wcm90b3R5cGUuY29tcGlsZVRva2VucyA9IGZ1bmN0aW9uICh0b2tlbnMsIHRl
bXBsYXRlKSB7CisgICAgdmFyIGZuID0gY29tcGlsZVRva2Vucyh0b2tlbnMpOworICAgIHZhciBz
ZWxmID0gdGhpczsKKworICAgIHJldHVybiBmdW5jdGlvbiAodmlldywgcGFydGlhbHMpIHsKKyAg
ICAgIGlmIChwYXJ0aWFscykgeworICAgICAgICBpZiAodHlwZW9mIHBhcnRpYWxzID09PSAiZnVu
Y3Rpb24iKSB7CisgICAgICAgICAgc2VsZi5fbG9hZFBhcnRpYWwgPSBwYXJ0aWFsczsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIHBhcnRpYWxzKSB7CisgICAg
ICAgICAgICBzZWxmLmNvbXBpbGVQYXJ0aWFsKG5hbWUsIHBhcnRpYWxzW25hbWVdKTsKKyAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgcmV0dXJuIGZuKHNlbGYsIENvbnRl
eHQubWFrZSh2aWV3KSwgdGVtcGxhdGUpOworICAgIH07CisgIH07CisKKyAgV3JpdGVyLnByb3Rv
dHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAodGVtcGxhdGUsIHZpZXcsIHBhcnRpYWxzKSB7CisgICAg
cmV0dXJuIHRoaXMuY29tcGlsZSh0ZW1wbGF0ZSkodmlldywgcGFydGlhbHMpOworICB9OworCisg
IFdyaXRlci5wcm90b3R5cGUuX3NlY3Rpb24gPSBmdW5jdGlvbiAobmFtZSwgY29udGV4dCwgdGV4
dCwgY2FsbGJhY2spIHsKKyAgICB2YXIgdmFsdWUgPSBjb250ZXh0Lmxvb2t1cChuYW1lKTsKKwor
ICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7CisgICAgY2FzZSAib2JqZWN0IjoKKyAgICAgIGlm
IChpc0FycmF5KHZhbHVlKSkgeworICAgICAgICB2YXIgYnVmZmVyID0gIiI7CisKKyAgICAgICAg
Zm9yICh2YXIgaSA9IDAsIGxlbiA9IHZhbHVlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7CisgICAg
ICAgICAgYnVmZmVyICs9IGNhbGxiYWNrKHRoaXMsIGNvbnRleHQucHVzaCh2YWx1ZVtpXSkpOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKKyAgICAgIH0KKworICAgICAgcmV0
dXJuIHZhbHVlID8gY2FsbGJhY2sodGhpcywgY29udGV4dC5wdXNoKHZhbHVlKSkgOiAiIjsKKyAg
ICBjYXNlICJmdW5jdGlvbiI6CisgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICB2YXIgc2Nv
cGVkUmVuZGVyID0gZnVuY3Rpb24gKHRlbXBsYXRlKSB7CisgICAgICAgIHJldHVybiBzZWxmLnJl
bmRlcih0ZW1wbGF0ZSwgY29udGV4dCk7CisgICAgICB9OworCisgICAgICB2YXIgcmVzdWx0ID0g
dmFsdWUuY2FsbChjb250ZXh0LnZpZXcsIHRleHQsIHNjb3BlZFJlbmRlcik7CisgICAgICByZXR1
cm4gcmVzdWx0ICE9IG51bGwgPyByZXN1bHQgOiAiIjsKKyAgICBkZWZhdWx0OgorICAgICAgaWYg
KHZhbHVlKSB7CisgICAgICAgIHJldHVybiBjYWxsYmFjayh0aGlzLCBjb250ZXh0KTsKKyAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gIiI7CisgIH07CisKKyAgV3JpdGVyLnByb3RvdHlwZS5f
aW52ZXJ0ZWQgPSBmdW5jdGlvbiAobmFtZSwgY29udGV4dCwgY2FsbGJhY2spIHsKKyAgICB2YXIg
dmFsdWUgPSBjb250ZXh0Lmxvb2t1cChuYW1lKTsKKworICAgIC8vIFVzZSBKYXZhU2NyaXB0J3Mg
ZGVmaW5pdGlvbiBvZiBmYWxzeS4gSW5jbHVkZSBlbXB0eSBhcnJheXMuCisgICAgLy8gU2VlIGh0
dHBzOi8vZ2l0aHViLmNvbS9qYW5sL211c3RhY2hlLmpzL2lzc3Vlcy8xODYKKyAgICBpZiAoIXZh
bHVlIHx8IChpc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDApKSB7CisgICAgICBy
ZXR1cm4gY2FsbGJhY2sodGhpcywgY29udGV4dCk7CisgICAgfQorCisgICAgcmV0dXJuICIiOwor
ICB9OworCisgIFdyaXRlci5wcm90b3R5cGUuX3BhcnRpYWwgPSBmdW5jdGlvbiAobmFtZSwgY29u
dGV4dCkgeworICAgIGlmICghKG5hbWUgaW4gdGhpcy5fcGFydGlhbENhY2hlKSAmJiB0aGlzLl9s
b2FkUGFydGlhbCkgeworICAgICAgdGhpcy5jb21waWxlUGFydGlhbChuYW1lLCB0aGlzLl9sb2Fk
UGFydGlhbChuYW1lKSk7CisgICAgfQorCisgICAgdmFyIGZuID0gdGhpcy5fcGFydGlhbENhY2hl
W25hbWVdOworCisgICAgcmV0dXJuIGZuID8gZm4oY29udGV4dCkgOiAiIjsKKyAgfTsKKworICBX
cml0ZXIucHJvdG90eXBlLl9uYW1lID0gZnVuY3Rpb24gKG5hbWUsIGNvbnRleHQpIHsKKyAgICB2
YXIgdmFsdWUgPSBjb250ZXh0Lmxvb2t1cChuYW1lKTsKKworICAgIGlmICh0eXBlb2YgdmFsdWUg
PT09ICJmdW5jdGlvbiIpIHsKKyAgICAgIHZhbHVlID0gdmFsdWUuY2FsbChjb250ZXh0LnZpZXcp
OworICAgIH0KKworICAgIHJldHVybiAodmFsdWUgPT0gbnVsbCkgPyAiIiA6IFN0cmluZyh2YWx1
ZSk7CisgIH07CisKKyAgV3JpdGVyLnByb3RvdHlwZS5fZXNjYXBlZCA9IGZ1bmN0aW9uIChuYW1l
LCBjb250ZXh0KSB7CisgICAgcmV0dXJuIGV4cG9ydHMuZXNjYXBlKHRoaXMuX25hbWUobmFtZSwg
Y29udGV4dCkpOworICB9OworCisgIC8qKgorICAgKiBDYWxjdWxhdGVzIHRoZSBib3VuZHMgb2Yg
dGhlIHNlY3Rpb24gcmVwcmVzZW50ZWQgYnkgdGhlIGdpdmVuIGB0b2tlbmAgaW4KKyAgICogdGhl
IG9yaWdpbmFsIHRlbXBsYXRlIGJ5IGRyaWxsaW5nIGRvd24gaW50byBuZXN0ZWQgc2VjdGlvbnMg
dG8gZmluZCB0aGUKKyAgICogbGFzdCB0b2tlbiB0aGF0IGlzIHBhcnQgb2YgdGhhdCBzZWN0aW9u
LiBSZXR1cm5zIGFuIGFycmF5IG9mIFtzdGFydCwgZW5kXS4KKyAgICovCisgIGZ1bmN0aW9uIHNl
Y3Rpb25Cb3VuZHModG9rZW4pIHsKKyAgICB2YXIgc3RhcnQgPSB0b2tlblszXTsKKyAgICB2YXIg
ZW5kID0gc3RhcnQ7CisKKyAgICB2YXIgdG9rZW5zOworICAgIHdoaWxlICgodG9rZW5zID0gdG9r
ZW5bNF0pICYmIHRva2Vucy5sZW5ndGgpIHsKKyAgICAgIHRva2VuID0gdG9rZW5zW3Rva2Vucy5s
ZW5ndGggLSAxXTsKKyAgICAgIGVuZCA9IHRva2VuWzNdOworICAgIH0KKworICAgIHJldHVybiBb
c3RhcnQsIGVuZF07CisgIH0KKworICAvKioKKyAgICogTG93LWxldmVsIGZ1bmN0aW9uIHRoYXQg
Y29tcGlsZXMgdGhlIGdpdmVuIGB0b2tlbnNgIGludG8gYSBmdW5jdGlvbgorICAgKiB0aGF0IGFj
Y2VwdHMgdGhyZWUgYXJndW1lbnRzOiBhIFdyaXRlciwgYSBDb250ZXh0LCBhbmQgdGhlIHRlbXBs
YXRlLgorICAgKi8KKyAgZnVuY3Rpb24gY29tcGlsZVRva2Vucyh0b2tlbnMpIHsKKyAgICB2YXIg
c3ViUmVuZGVycyA9IHt9OworCisgICAgZnVuY3Rpb24gc3ViUmVuZGVyKGksIHRva2VucywgdGVt
cGxhdGUpIHsKKyAgICAgIGlmICghc3ViUmVuZGVyc1tpXSkgeworICAgICAgICB2YXIgZm4gPSBj
b21waWxlVG9rZW5zKHRva2Vucyk7CisgICAgICAgIHN1YlJlbmRlcnNbaV0gPSBmdW5jdGlvbiAo
d3JpdGVyLCBjb250ZXh0KSB7CisgICAgICAgICAgcmV0dXJuIGZuKHdyaXRlciwgY29udGV4dCwg
dGVtcGxhdGUpOworICAgICAgICB9OworICAgICAgfQorCisgICAgICByZXR1cm4gc3ViUmVuZGVy
c1tpXTsKKyAgICB9CisKKyAgICByZXR1cm4gZnVuY3Rpb24gKHdyaXRlciwgY29udGV4dCwgdGVt
cGxhdGUpIHsKKyAgICAgIHZhciBidWZmZXIgPSAiIjsKKyAgICAgIHZhciB0b2tlbiwgc2VjdGlv
blRleHQ7CisKKyAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB0b2tlbnMubGVuZ3RoOyBpIDwg
bGVuOyArK2kpIHsKKyAgICAgICAgdG9rZW4gPSB0b2tlbnNbaV07CisKKyAgICAgICAgc3dpdGNo
ICh0b2tlblswXSkgeworICAgICAgICBjYXNlICIjIjoKKyAgICAgICAgICBzZWN0aW9uVGV4dCA9
IHRlbXBsYXRlLnNsaWNlLmFwcGx5KHRlbXBsYXRlLCBzZWN0aW9uQm91bmRzKHRva2VuKSk7Cisg
ICAgICAgICAgYnVmZmVyICs9IHdyaXRlci5fc2VjdGlvbih0b2tlblsxXSwgY29udGV4dCwgc2Vj
dGlvblRleHQsIHN1YlJlbmRlcihpLCB0b2tlbls0XSwgdGVtcGxhdGUpKTsKKyAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSAiXiI6CisgICAgICAgICAgYnVmZmVyICs9IHdyaXRlci5faW52
ZXJ0ZWQodG9rZW5bMV0sIGNvbnRleHQsIHN1YlJlbmRlcihpLCB0b2tlbls0XSwgdGVtcGxhdGUp
KTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiPiI6CisgICAgICAgICAgYnVmZmVy
ICs9IHdyaXRlci5fcGFydGlhbCh0b2tlblsxXSwgY29udGV4dCk7CisgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgIiYiOgorICAgICAgICAgIGJ1ZmZlciArPSB3cml0ZXIuX25hbWUodG9r
ZW5bMV0sIGNvbnRleHQpOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJuYW1lIjoK
KyAgICAgICAgICBidWZmZXIgKz0gd3JpdGVyLl9lc2NhcGVkKHRva2VuWzFdLCBjb250ZXh0KTsK
KyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAidGV4dCI6CisgICAgICAgICAgYnVmZmVy
ICs9IHRva2VuWzFdOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisKKyAg
ICAgIHJldHVybiBidWZmZXI7CisgICAgfTsKKyAgfQorCisgIC8qKgorICAgKiBGb3JtcyB0aGUg
Z2l2ZW4gYXJyYXkgb2YgYHRva2Vuc2AgaW50byBhIG5lc3RlZCB0cmVlIHN0cnVjdHVyZSB3aGVy
ZQorICAgKiB0b2tlbnMgdGhhdCByZXByZXNlbnQgYSBzZWN0aW9uIGhhdmUgYSBmaWZ0aCBpdGVt
OiBhbiBhcnJheSB0aGF0IGNvbnRhaW5zCisgICAqIGFsbCB0b2tlbnMgaW4gdGhhdCBzZWN0aW9u
LgorICAgKi8KKyAgZnVuY3Rpb24gbmVzdFRva2Vucyh0b2tlbnMpIHsKKyAgICB2YXIgdHJlZSA9
IFtdOworICAgIHZhciBjb2xsZWN0b3IgPSB0cmVlOworICAgIHZhciBzZWN0aW9ucyA9IFtdOwor
ICAgIHZhciB0b2tlbiwgc2VjdGlvbjsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5z
Lmxlbmd0aDsgKytpKSB7CisgICAgICB0b2tlbiA9IHRva2Vuc1tpXTsKKworICAgICAgc3dpdGNo
ICh0b2tlblswXSkgeworICAgICAgY2FzZSAiIyI6CisgICAgICBjYXNlICJeIjoKKyAgICAgICAg
dG9rZW5bNF0gPSBbXTsKKyAgICAgICAgc2VjdGlvbnMucHVzaCh0b2tlbik7CisgICAgICAgIGNv
bGxlY3Rvci5wdXNoKHRva2VuKTsKKyAgICAgICAgY29sbGVjdG9yID0gdG9rZW5bNF07CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSAiLyI6CisgICAgICAgIGlmIChzZWN0aW9ucy5sZW5ndGgg
PT09IDApIHsKKyAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVub3BlbmVkIHNlY3Rpb246ICIg
KyB0b2tlblsxXSk7CisgICAgICAgIH0KKworICAgICAgICBzZWN0aW9uID0gc2VjdGlvbnMucG9w
KCk7CisKKyAgICAgICAgaWYgKHNlY3Rpb25bMV0gIT09IHRva2VuWzFdKSB7CisgICAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJVbmNsb3NlZCBzZWN0aW9uOiAiICsgc2VjdGlvblsxXSk7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoc2VjdGlvbnMubGVuZ3RoID4gMCkgeworICAgICAgICAgIGNv
bGxlY3RvciA9IHNlY3Rpb25zW3NlY3Rpb25zLmxlbmd0aCAtIDFdWzRdOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgIGNvbGxlY3RvciA9IHRyZWU7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBjb2xsZWN0b3IucHVzaCh0b2tlbik7CisgICAg
ICB9CisgICAgfQorCisgICAgLy8gTWFrZSBzdXJlIHRoZXJlIHdlcmUgbm8gb3BlbiBzZWN0aW9u
cyB3aGVuIHdlJ3JlIGRvbmUuCisgICAgc2VjdGlvbiA9IHNlY3Rpb25zLnBvcCgpOworCisgICAg
aWYgKHNlY3Rpb24pIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigiVW5jbG9zZWQgc2VjdGlvbjog
IiArIHNlY3Rpb25bMV0pOworICAgIH0KKworICAgIHJldHVybiB0cmVlOworICB9CisKKyAgLyoq
CisgICAqIENvbWJpbmVzIHRoZSB2YWx1ZXMgb2YgY29uc2VjdXRpdmUgdGV4dCB0b2tlbnMgaW4g
dGhlIGdpdmVuIGB0b2tlbnNgIGFycmF5CisgICAqIHRvIGEgc2luZ2xlIHRva2VuLgorICAgKi8K
KyAgZnVuY3Rpb24gc3F1YXNoVG9rZW5zKHRva2VucykgeworICAgIHZhciB0b2tlbiwgbGFzdFRv
a2VuLCBzcXVhc2hlZFRva2VucyA9IFtdOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tl
bnMubGVuZ3RoOyArK2kpIHsKKyAgICAgIHRva2VuID0gdG9rZW5zW2ldOworCisgICAgICBpZiAo
bGFzdFRva2VuICYmIGxhc3RUb2tlblswXSA9PT0gInRleHQiICYmIHRva2VuWzBdID09PSAidGV4
dCIpIHsKKyAgICAgICAgbGFzdFRva2VuWzFdICs9IHRva2VuWzFdOworICAgICAgICBsYXN0VG9r
ZW5bM10gPSB0b2tlblszXTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxhc3RUb2tlbiA9IHRv
a2VuOworICAgICAgICBzcXVhc2hlZFRva2Vucy5wdXNoKHRva2VuKTsKKyAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gc3F1YXNoZWRUb2tlbnM7CisgIH0KKworICBmdW5jdGlvbiBlc2NhcGVU
YWdzKHRhZ3MpIHsKKyAgICBpZiAodGFncy5sZW5ndGggIT09IDIpIHsKKyAgICAgIHRocm93IG5l
dyBFcnJvcigiSW52YWxpZCB0YWdzOiAiICsgdGFncy5qb2luKCIgIikpOworICAgIH0KKworICAg
IHJldHVybiBbCisgICAgICBuZXcgUmVnRXhwKGVzY2FwZVJlKHRhZ3NbMF0pICsgIlxccyoiKSwK
KyAgICAgIG5ldyBSZWdFeHAoIlxccyoiICsgZXNjYXBlUmUodGFnc1sxXSkpCisgICAgXTsKKyAg
fQorCisgIC8qKgorICAgKiBCcmVha3MgdXAgdGhlIGdpdmVuIGB0ZW1wbGF0ZWAgc3RyaW5nIGlu
dG8gYSB0cmVlIG9mIHRva2VuIG9iamVjdHMuIElmCisgICAqIGB0YWdzYCBpcyBnaXZlbiBoZXJl
IGl0IG11c3QgYmUgYW4gYXJyYXkgd2l0aCB0d28gc3RyaW5nIHZhbHVlczogdGhlCisgICAqIG9w
ZW5pbmcgYW5kIGNsb3NpbmcgdGFncyB1c2VkIGluIHRoZSB0ZW1wbGF0ZSAoZS5nLiBbIjwlIiwg
IiU+Il0pLiBPZgorICAgKiBjb3Vyc2UsIHRoZSBkZWZhdWx0IGlzIHRvIHVzZSBtdXN0YWNoZXMg
KGkuZS4gTXVzdGFjaGUudGFncykuCisgICAqLworICBleHBvcnRzLnBhcnNlID0gZnVuY3Rpb24g
KHRlbXBsYXRlLCB0YWdzKSB7CisgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZSB8fCAnJzsKKyAgICB0
YWdzID0gdGFncyB8fCBleHBvcnRzLnRhZ3M7CisKKyAgICB2YXIgdGFnUmVzID0gZXNjYXBlVGFn
cyh0YWdzKTsKKyAgICB2YXIgc2Nhbm5lciA9IG5ldyBTY2FubmVyKHRlbXBsYXRlKTsKKworICAg
IHZhciB0b2tlbnMgPSBbXSwgICAgICAvLyBCdWZmZXIgdG8gaG9sZCB0aGUgdG9rZW5zCisgICAg
ICAgIHNwYWNlcyA9IFtdLCAgICAgIC8vIEluZGljZXMgb2Ygd2hpdGVzcGFjZSB0b2tlbnMgb24g
dGhlIGN1cnJlbnQgbGluZQorICAgICAgICBoYXNUYWcgPSBmYWxzZSwgICAvLyBJcyB0aGVyZSBh
IHt7dGFnfX0gb24gdGhlIGN1cnJlbnQgbGluZT8KKyAgICAgICAgbm9uU3BhY2UgPSBmYWxzZTsg
Ly8gSXMgdGhlcmUgYSBub24tc3BhY2UgY2hhciBvbiB0aGUgY3VycmVudCBsaW5lPworCisgICAg
Ly8gU3RyaXBzIGFsbCB3aGl0ZXNwYWNlIHRva2VucyBhcnJheSBmb3IgdGhlIGN1cnJlbnQgbGlu
ZQorICAgIC8vIGlmIHRoZXJlIHdhcyBhIHt7I3RhZ319IG9uIGl0IGFuZCBvdGhlcndpc2Ugb25s
eSBzcGFjZS4KKyAgICBmdW5jdGlvbiBzdHJpcFNwYWNlKCkgeworICAgICAgaWYgKGhhc1RhZyAm
JiAhbm9uU3BhY2UpIHsKKyAgICAgICAgd2hpbGUgKHNwYWNlcy5sZW5ndGgpIHsKKyAgICAgICAg
ICB0b2tlbnMuc3BsaWNlKHNwYWNlcy5wb3AoKSwgMSk7CisgICAgICAgIH0KKyAgICAgIH0gZWxz
ZSB7CisgICAgICAgIHNwYWNlcyA9IFtdOworICAgICAgfQorCisgICAgICBoYXNUYWcgPSBmYWxz
ZTsKKyAgICAgIG5vblNwYWNlID0gZmFsc2U7CisgICAgfQorCisgICAgdmFyIHN0YXJ0LCB0eXBl
LCB2YWx1ZSwgY2hyOworCisgICAgd2hpbGUgKCFzY2FubmVyLmVvcygpKSB7CisgICAgICBzdGFy
dCA9IHNjYW5uZXIucG9zOworICAgICAgdmFsdWUgPSBzY2FubmVyLnNjYW5VbnRpbCh0YWdSZXNb
MF0pOworCisgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9
IHZhbHVlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAgICAgY2hyID0gdmFsdWUuY2hh
ckF0KGkpOworCisgICAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjaHIpKSB7CisgICAgICAgICAg
ICBzcGFjZXMucHVzaCh0b2tlbnMubGVuZ3RoKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgbm9uU3BhY2UgPSB0cnVlOworICAgICAgICAgIH0KKworICAgICAgICAgIHRva2Vucy5w
dXNoKFsidGV4dCIsIGNociwgc3RhcnQsIHN0YXJ0ICsgMV0pOworICAgICAgICAgIHN0YXJ0ICs9
IDE7CisKKyAgICAgICAgICBpZiAoY2hyID09PSAiXG4iKSB7CisgICAgICAgICAgICBzdHJpcFNw
YWNlKCk7IC8vIENoZWNrIGZvciB3aGl0ZXNwYWNlIG9uIHRoZSBjdXJyZW50IGxpbmUuCisgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHN0YXJ0ID0gc2Nhbm5lci5wb3M7
CisKKyAgICAgIC8vIE1hdGNoIHRoZSBvcGVuaW5nIHRhZy4KKyAgICAgIGlmICghc2Nhbm5lci5z
Y2FuKHRhZ1Jlc1swXSkpIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGhhc1Rh
ZyA9IHRydWU7CisgICAgICB0eXBlID0gc2Nhbm5lci5zY2FuKHRhZ1JlKSB8fCAibmFtZSI7CisK
KyAgICAgIC8vIFNraXAgYW55IHdoaXRlc3BhY2UgYmV0d2VlbiB0YWcgYW5kIHZhbHVlLgorICAg
ICAgc2Nhbm5lci5zY2FuKHdoaXRlUmUpOworCisgICAgICAvLyBFeHRyYWN0IHRoZSB0YWcgdmFs
dWUuCisgICAgICBpZiAodHlwZSA9PT0gIj0iKSB7CisgICAgICAgIHZhbHVlID0gc2Nhbm5lci5z
Y2FuVW50aWwoZXFSZSk7CisgICAgICAgIHNjYW5uZXIuc2NhbihlcVJlKTsKKyAgICAgICAgc2Nh
bm5lci5zY2FuVW50aWwodGFnUmVzWzFdKTsKKyAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gInsi
KSB7CisgICAgICAgIHZhciBjbG9zZVJlID0gbmV3IFJlZ0V4cCgiXFxzKiIgKyBlc2NhcGVSZSgi
fSIgKyB0YWdzWzFdKSk7CisgICAgICAgIHZhbHVlID0gc2Nhbm5lci5zY2FuVW50aWwoY2xvc2VS
ZSk7CisgICAgICAgIHNjYW5uZXIuc2NhbihjdXJseVJlKTsKKyAgICAgICAgc2Nhbm5lci5zY2Fu
VW50aWwodGFnUmVzWzFdKTsKKyAgICAgICAgdHlwZSA9ICImIjsKKyAgICAgIH0gZWxzZSB7Cisg
ICAgICAgIHZhbHVlID0gc2Nhbm5lci5zY2FuVW50aWwodGFnUmVzWzFdKTsKKyAgICAgIH0KKwor
ICAgICAgLy8gTWF0Y2ggdGhlIGNsb3NpbmcgdGFnLgorICAgICAgaWYgKCFzY2FubmVyLnNjYW4o
dGFnUmVzWzFdKSkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVuY2xvc2VkIHRhZyBhdCAi
ICsgc2Nhbm5lci5wb3MpOworICAgICAgfQorCisgICAgICB0b2tlbnMucHVzaChbdHlwZSwgdmFs
dWUsIHN0YXJ0LCBzY2FubmVyLnBvc10pOworCisgICAgICBpZiAodHlwZSA9PT0gIm5hbWUiIHx8
IHR5cGUgPT09ICJ7IiB8fCB0eXBlID09PSAiJiIpIHsKKyAgICAgICAgbm9uU3BhY2UgPSB0cnVl
OworICAgICAgfQorCisgICAgICAvLyBTZXQgdGhlIHRhZ3MgZm9yIHRoZSBuZXh0IHRpbWUgYXJv
dW5kLgorICAgICAgaWYgKHR5cGUgPT09ICI9IikgeworICAgICAgICB0YWdzID0gdmFsdWUuc3Bs
aXQoc3BhY2VSZSk7CisgICAgICAgIHRhZ1JlcyA9IGVzY2FwZVRhZ3ModGFncyk7CisgICAgICB9
CisgICAgfQorCisgICAgdG9rZW5zID0gc3F1YXNoVG9rZW5zKHRva2Vucyk7CisKKyAgICByZXR1
cm4gbmVzdFRva2Vucyh0b2tlbnMpOworICB9OworCisgIC8vIFRoZSBoaWdoLWxldmVsIGNsZWFy
Q2FjaGUsIGNvbXBpbGUsIGNvbXBpbGVQYXJ0aWFsLCBhbmQgcmVuZGVyIGZ1bmN0aW9ucworICAv
LyB1c2UgdGhpcyBkZWZhdWx0IHdyaXRlci4KKyAgdmFyIF93cml0ZXIgPSBuZXcgV3JpdGVyKCk7
CisKKyAgLyoqCisgICAqIENsZWFycyBhbGwgY2FjaGVkIHRlbXBsYXRlcyBhbmQgcGFydGlhbHMg
aW4gdGhlIGRlZmF1bHQgd3JpdGVyLgorICAgKi8KKyAgZXhwb3J0cy5jbGVhckNhY2hlID0gZnVu
Y3Rpb24gKCkgeworICAgIHJldHVybiBfd3JpdGVyLmNsZWFyQ2FjaGUoKTsKKyAgfTsKKworICAv
KioKKyAgICogQ29tcGlsZXMgdGhlIGdpdmVuIGB0ZW1wbGF0ZWAgdG8gYSByZXVzYWJsZSBmdW5j
dGlvbiB1c2luZyB0aGUgZGVmYXVsdAorICAgKiB3cml0ZXIuCisgICAqLworICBleHBvcnRzLmNv
bXBpbGUgPSBmdW5jdGlvbiAodGVtcGxhdGUsIHRhZ3MpIHsKKyAgICByZXR1cm4gX3dyaXRlci5j
b21waWxlKHRlbXBsYXRlLCB0YWdzKTsKKyAgfTsKKworICAvKioKKyAgICogQ29tcGlsZXMgdGhl
IHBhcnRpYWwgd2l0aCB0aGUgZ2l2ZW4gYG5hbWVgIGFuZCBgdGVtcGxhdGVgIHRvIGEgcmV1c2Fi
bGUKKyAgICogZnVuY3Rpb24gdXNpbmcgdGhlIGRlZmF1bHQgd3JpdGVyLgorICAgKi8KKyAgZXhw
b3J0cy5jb21waWxlUGFydGlhbCA9IGZ1bmN0aW9uIChuYW1lLCB0ZW1wbGF0ZSwgdGFncykgewor
ICAgIHJldHVybiBfd3JpdGVyLmNvbXBpbGVQYXJ0aWFsKG5hbWUsIHRlbXBsYXRlLCB0YWdzKTsK
KyAgfTsKKworICAvKioKKyAgICogQ29tcGlsZXMgdGhlIGdpdmVuIGFycmF5IG9mIHRva2VucyAo
dGhlIG91dHB1dCBvZiBhIHBhcnNlKSB0byBhIHJldXNhYmxlCisgICAqIGZ1bmN0aW9uIHVzaW5n
IHRoZSBkZWZhdWx0IHdyaXRlci4KKyAgICovCisgIGV4cG9ydHMuY29tcGlsZVRva2VucyA9IGZ1
bmN0aW9uICh0b2tlbnMsIHRlbXBsYXRlKSB7CisgICAgcmV0dXJuIF93cml0ZXIuY29tcGlsZVRv
a2Vucyh0b2tlbnMsIHRlbXBsYXRlKTsKKyAgfTsKKworICAvKioKKyAgICogUmVuZGVycyB0aGUg
YHRlbXBsYXRlYCB3aXRoIHRoZSBnaXZlbiBgdmlld2AgYW5kIGBwYXJ0aWFsc2AgdXNpbmcgdGhl
CisgICAqIGRlZmF1bHQgd3JpdGVyLgorICAgKi8KKyAgZXhwb3J0cy5yZW5kZXIgPSBmdW5jdGlv
biAodGVtcGxhdGUsIHZpZXcsIHBhcnRpYWxzKSB7CisgICAgcmV0dXJuIF93cml0ZXIucmVuZGVy
KHRlbXBsYXRlLCB2aWV3LCBwYXJ0aWFscyk7CisgIH07CisKKyAgLy8gVGhpcyBpcyBoZXJlIGZv
ciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIDAuNC54LgorICBleHBvcnRzLnRvX2h0bWwg
PSBmdW5jdGlvbiAodGVtcGxhdGUsIHZpZXcsIHBhcnRpYWxzLCBzZW5kKSB7CisgICAgdmFyIHJl
c3VsdCA9IGV4cG9ydHMucmVuZGVyKHRlbXBsYXRlLCB2aWV3LCBwYXJ0aWFscyk7CisKKyAgICBp
ZiAodHlwZW9mIHNlbmQgPT09ICJmdW5jdGlvbiIpIHsKKyAgICAgIHNlbmQocmVzdWx0KTsKKyAg
ICB9IGVsc2UgeworICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgIH07CisKKyAgcmV0dXJu
IGV4cG9ydHM7CisKK30oKSkpKTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5v
cmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVu
dHMvcmVxdWlyZWpzL3JlcXVpcmUuanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVk
b21ldGVyMi4xL3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL3JlcXVp
cmVqcy9yZXF1aXJlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBlN2I4MWJjNDlmM2FjMjEzZGY0MGU3YTRiYWE3
ZGQyNDg3NzRlZWQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3Jn
L1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRz
L3JlcXVpcmVqcy9yZXF1aXJlLmpzCkBAIC0wLDAgKzEsMTk5MyBAQAorLyoqIHZpbTogZXQ6dHM9
NDpzdz00OnN0cz00CisgKiBAbGljZW5zZSBSZXF1aXJlSlMgMi4xLjIgQ29weXJpZ2h0IChjKSAy
MDEwLTIwMTIsIFRoZSBEb2pvIEZvdW5kYXRpb24gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIEF2
YWlsYWJsZSB2aWEgdGhlIE1JVCBvciBuZXcgQlNEIGxpY2Vuc2UuCisgKiBzZWU6IGh0dHA6Ly9n
aXRodWIuY29tL2pyYnVya2UvcmVxdWlyZWpzIGZvciBkZXRhaWxzCisgKi8KKy8vTm90IHVzaW5n
IHN0cmljdDogdW5ldmVuIHN0cmljdCBzdXBwb3J0IGluIGJyb3dzZXJzLCAjMzkyLCBhbmQgY2F1
c2VzCisvL3Byb2JsZW1zIHdpdGggcmVxdWlyZWpzLmV4ZWMoKS90cmFuc3BpbGVyIHBsdWdpbnMg
dGhhdCBtYXkgbm90IGJlIHN0cmljdC4KKy8qanNsaW50IHJlZ2V4cDogdHJ1ZSwgbm9tZW46IHRy
dWUsIHNsb3BweTogdHJ1ZSAqLworLypnbG9iYWwgd2luZG93LCBuYXZpZ2F0b3IsIGRvY3VtZW50
LCBpbXBvcnRTY3JpcHRzLCBqUXVlcnksIHNldFRpbWVvdXQsIG9wZXJhICovCisKK3ZhciByZXF1
aXJlanMsIHJlcXVpcmUsIGRlZmluZTsKKyhmdW5jdGlvbiAoZ2xvYmFsKSB7CisgICAgdmFyIHJl
cSwgcywgaGVhZCwgYmFzZUVsZW1lbnQsIGRhdGFNYWluLCBzcmMsCisgICAgICAgIGludGVyYWN0
aXZlU2NyaXB0LCBjdXJyZW50bHlBZGRpbmdTY3JpcHQsIG1haW5TY3JpcHQsIHN1YlBhdGgsCisg
ICAgICAgIHZlcnNpb24gPSAnMi4xLjInLAorICAgICAgICBjb21tZW50UmVnRXhwID0gLyhcL1wq
KFtcc1xTXSo/KVwqXC98KFteOl18XilcL1wvKC4qKSQpL21nLAorICAgICAgICBjanNSZXF1aXJl
UmVnRXhwID0gL1teLl1ccypyZXF1aXJlXHMqXChccypbIiddKFteJyJcc10rKVsiJ11ccypcKS9n
LAorICAgICAgICBqc1N1ZmZpeFJlZ0V4cCA9IC9cLmpzJC8sCisgICAgICAgIGN1cnJEaXJSZWdF
eHAgPSAvXlwuXC8vLAorICAgICAgICBvcCA9IE9iamVjdC5wcm90b3R5cGUsCisgICAgICAgIG9z
dHJpbmcgPSBvcC50b1N0cmluZywKKyAgICAgICAgaGFzT3duID0gb3AuaGFzT3duUHJvcGVydHks
CisgICAgICAgIGFwID0gQXJyYXkucHJvdG90eXBlLAorICAgICAgICBhcHMgPSBhcC5zbGljZSwK
KyAgICAgICAgYXBzcCA9IGFwLnNwbGljZSwKKyAgICAgICAgaXNCcm93c2VyID0gISEodHlwZW9m
IHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yICYmIGRvY3VtZW50KSwKKyAgICAg
ICAgaXNXZWJXb3JrZXIgPSAhaXNCcm93c2VyICYmIHR5cGVvZiBpbXBvcnRTY3JpcHRzICE9PSAn
dW5kZWZpbmVkJywKKyAgICAgICAgLy9QUzMgaW5kaWNhdGVzIGxvYWRlZCBhbmQgY29tcGxldGUs
IGJ1dCBuZWVkIHRvIHdhaXQgZm9yIGNvbXBsZXRlCisgICAgICAgIC8vc3BlY2lmaWNhbGx5LiBT
ZXF1ZW5jZSBpcyAnbG9hZGluZycsICdsb2FkZWQnLCBleGVjdXRpb24sCisgICAgICAgIC8vIHRo
ZW4gJ2NvbXBsZXRlJy4gVGhlIFVBIGNoZWNrIGlzIHVuZm9ydHVuYXRlLCBidXQgbm90IHN1cmUg
aG93CisgICAgICAgIC8vdG8gZmVhdHVyZSB0ZXN0IHcvbyBjYXVzaW5nIHBlcmYgaXNzdWVzLgor
ICAgICAgICByZWFkeVJlZ0V4cCA9IGlzQnJvd3NlciAmJiBuYXZpZ2F0b3IucGxhdGZvcm0gPT09
ICdQTEFZU1RBVElPTiAzJyA/CisgICAgICAgICAgICAgICAgICAgICAgL15jb21wbGV0ZSQvIDog
L14oY29tcGxldGV8bG9hZGVkKSQvLAorICAgICAgICBkZWZDb250ZXh0TmFtZSA9ICdfJywKKyAg
ICAgICAgLy9PaCB0aGUgdHJhZ2VkeSwgZGV0ZWN0aW5nIG9wZXJhLiBTZWUgdGhlIHVzYWdlIG9m
IGlzT3BlcmEgZm9yIHJlYXNvbi4KKyAgICAgICAgaXNPcGVyYSA9IHR5cGVvZiBvcGVyYSAhPT0g
J3VuZGVmaW5lZCcgJiYgb3BlcmEudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgT3BlcmFdJywKKyAg
ICAgICAgY29udGV4dHMgPSB7fSwKKyAgICAgICAgY2ZnID0ge30sCisgICAgICAgIGdsb2JhbERl
ZlF1ZXVlID0gW10sCisgICAgICAgIHVzZUludGVyYWN0aXZlID0gZmFsc2U7CisKKyAgICBmdW5j
dGlvbiBpc0Z1bmN0aW9uKGl0KSB7CisgICAgICAgIHJldHVybiBvc3RyaW5nLmNhbGwoaXQpID09
PSAnW29iamVjdCBGdW5jdGlvbl0nOworICAgIH0KKworICAgIGZ1bmN0aW9uIGlzQXJyYXkoaXQp
IHsKKyAgICAgICAgcmV0dXJuIG9zdHJpbmcuY2FsbChpdCkgPT09ICdbb2JqZWN0IEFycmF5XSc7
CisgICAgfQorCisgICAgLyoqCisgICAgICogSGVscGVyIGZ1bmN0aW9uIGZvciBpdGVyYXRpbmcg
b3ZlciBhbiBhcnJheS4gSWYgdGhlIGZ1bmMgcmV0dXJucworICAgICAqIGEgdHJ1ZSB2YWx1ZSwg
aXQgd2lsbCBicmVhayBvdXQgb2YgdGhlIGxvb3AuCisgICAgICovCisgICAgZnVuY3Rpb24gZWFj
aChhcnksIGZ1bmMpIHsKKyAgICAgICAgaWYgKGFyeSkgeworICAgICAgICAgICAgdmFyIGk7Cisg
ICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJ5Lmxlbmd0aDsgaSArPSAxKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGFyeVtpXSAmJiBmdW5jKGFyeVtpXSwgaSwgYXJ5KSkgeworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGl0ZXJh
dGluZyBvdmVyIGFuIGFycmF5IGJhY2t3YXJkcy4gSWYgdGhlIGZ1bmMKKyAgICAgKiByZXR1cm5z
IGEgdHJ1ZSB2YWx1ZSwgaXQgd2lsbCBicmVhayBvdXQgb2YgdGhlIGxvb3AuCisgICAgICovCisg
ICAgZnVuY3Rpb24gZWFjaFJldmVyc2UoYXJ5LCBmdW5jKSB7CisgICAgICAgIGlmIChhcnkpIHsK
KyAgICAgICAgICAgIHZhciBpOworICAgICAgICAgICAgZm9yIChpID0gYXJ5Lmxlbmd0aCAtIDE7
IGkgPiAtMTsgaSAtPSAxKSB7CisgICAgICAgICAgICAgICAgaWYgKGFyeVtpXSAmJiBmdW5jKGFy
eVtpXSwgaSwgYXJ5KSkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBo
YXNQcm9wKG9iaiwgcHJvcCkgeworICAgICAgICByZXR1cm4gaGFzT3duLmNhbGwob2JqLCBwcm9w
KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBnZXRPd24ob2JqLCBwcm9wKSB7CisgICAgICAgIHJl
dHVybiBoYXNQcm9wKG9iaiwgcHJvcCkgJiYgb2JqW3Byb3BdOworICAgIH0KKworICAgIC8qKgor
ICAgICAqIEN5Y2xlcyBvdmVyIHByb3BlcnRpZXMgaW4gYW4gb2JqZWN0IGFuZCBjYWxscyBhIGZ1
bmN0aW9uIGZvciBlYWNoCisgICAgICogcHJvcGVydHkgdmFsdWUuIElmIHRoZSBmdW5jdGlvbiBy
ZXR1cm5zIGEgdHJ1dGh5IHZhbHVlLCB0aGVuIHRoZQorICAgICAqIGl0ZXJhdGlvbiBpcyBzdG9w
cGVkLgorICAgICAqLworICAgIGZ1bmN0aW9uIGVhY2hQcm9wKG9iaiwgZnVuYykgeworICAgICAg
ICB2YXIgcHJvcDsKKyAgICAgICAgZm9yIChwcm9wIGluIG9iaikgeworICAgICAgICAgICAgaWYg
KGhhc1Byb3Aob2JqLCBwcm9wKSkgeworICAgICAgICAgICAgICAgIGlmIChmdW5jKG9ialtwcm9w
XSwgcHJvcCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogU2lt
cGxlIGZ1bmN0aW9uIHRvIG1peCBpbiBwcm9wZXJ0aWVzIGZyb20gc291cmNlIGludG8gdGFyZ2V0
LAorICAgICAqIGJ1dCBvbmx5IGlmIHRhcmdldCBkb2VzIG5vdCBhbHJlYWR5IGhhdmUgYSBwcm9w
ZXJ0eSBvZiB0aGUgc2FtZSBuYW1lLgorICAgICAqLworICAgIGZ1bmN0aW9uIG1peGluKHRhcmdl
dCwgc291cmNlLCBmb3JjZSwgZGVlcFN0cmluZ01peGluKSB7CisgICAgICAgIGlmIChzb3VyY2Up
IHsKKyAgICAgICAgICAgIGVhY2hQcm9wKHNvdXJjZSwgZnVuY3Rpb24gKHZhbHVlLCBwcm9wKSB7
CisgICAgICAgICAgICAgICAgaWYgKGZvcmNlIHx8ICFoYXNQcm9wKHRhcmdldCwgcHJvcCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGRlZXBTdHJpbmdNaXhpbiAmJiB0eXBlb2YgdmFsdWUg
IT09ICdzdHJpbmcnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRhcmdldFtwcm9w
XSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFtwcm9wXSA9IHt9OworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbWl4aW4odGFy
Z2V0W3Byb3BdLCB2YWx1ZSwgZm9yY2UsIGRlZXBTdHJpbmdNaXhpbik7CisgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSB2
YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0pOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0YXJnZXQ7CisgICAgfQorCisgICAg
Ly9TaW1pbGFyIHRvIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLCBidXQgdGhlICd0aGlzJyBvYmpl
Y3QgaXMgc3BlY2lmaWVkCisgICAgLy9maXJzdCwgc2luY2UgaXQgaXMgZWFzaWVyIHRvIHJlYWQv
ZmlndXJlIG91dCB3aGF0ICd0aGlzJyB3aWxsIGJlLgorICAgIGZ1bmN0aW9uIGJpbmQob2JqLCBm
bikgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIGZu
LmFwcGx5KG9iaiwgYXJndW1lbnRzKTsKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlv
biBzY3JpcHRzKCkgeworICAgICAgICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05h
bWUoJ3NjcmlwdCcpOworICAgIH0KKworICAgIC8vQWxsb3cgZ2V0dGluZyBhIGdsb2JhbCB0aGF0
IGV4cHJlc3NlZCBpbgorICAgIC8vZG90IG5vdGF0aW9uLCBsaWtlICdhLmIuYycuCisgICAgZnVu
Y3Rpb24gZ2V0R2xvYmFsKHZhbHVlKSB7CisgICAgICAgIGlmICghdmFsdWUpIHsKKyAgICAgICAg
ICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgfQorICAgICAgICB2YXIgZyA9IGdsb2JhbDsKKyAg
ICAgICAgZWFjaCh2YWx1ZS5zcGxpdCgnLicpLCBmdW5jdGlvbiAocGFydCkgeworICAgICAgICAg
ICAgZyA9IGdbcGFydF07CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gZzsKKyAgICB9CisK
KyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGFuIGVycm9yIHdpdGggYSBwb2ludGVyIHRvIGFu
IFVSTCB3aXRoIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICogQHBhcmFtIHtTdHJpbmd9IGlkIHRo
ZSBlcnJvciBJRCB0aGF0IG1hcHMgdG8gYW4gSUQgb24gYSB3ZWIgcGFnZS4KKyAgICAgKiBAcGFy
YW0ge1N0cmluZ30gbWVzc2FnZSBodW1hbiByZWFkYWJsZSBlcnJvci4KKyAgICAgKiBAcGFyYW0g
e0Vycm9yfSBbZXJyXSB0aGUgb3JpZ2luYWwgZXJyb3IsIGlmIHRoZXJlIGlzIG9uZS4KKyAgICAg
KgorICAgICAqIEByZXR1cm5zIHtFcnJvcn0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBtYWtlRXJy
b3IoaWQsIG1zZywgZXJyLCByZXF1aXJlTW9kdWxlcykgeworICAgICAgICB2YXIgZSA9IG5ldyBF
cnJvcihtc2cgKyAnXG5odHRwOi8vcmVxdWlyZWpzLm9yZy9kb2NzL2Vycm9ycy5odG1sIycgKyBp
ZCk7CisgICAgICAgIGUucmVxdWlyZVR5cGUgPSBpZDsKKyAgICAgICAgZS5yZXF1aXJlTW9kdWxl
cyA9IHJlcXVpcmVNb2R1bGVzOworICAgICAgICBpZiAoZXJyKSB7CisgICAgICAgICAgICBlLm9y
aWdpbmFsRXJyb3IgPSBlcnI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGU7CisgICAgfQor
CisgICAgaWYgKHR5cGVvZiBkZWZpbmUgIT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgIC8vSWYg
YSBkZWZpbmUgaXMgYWxyZWFkeSBpbiBwbGF5IHZpYSBhbm90aGVyIEFNRCBsb2FkZXIsCisgICAg
ICAgIC8vZG8gbm90IG92ZXJ3cml0ZS4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
ICh0eXBlb2YgcmVxdWlyZWpzICE9PSAndW5kZWZpbmVkJykgeworICAgICAgICBpZiAoaXNGdW5j
dGlvbihyZXF1aXJlanMpKSB7CisgICAgICAgICAgICAvL0RvIG5vdCBvdmVyd3JpdGUgYW5kIGV4
aXN0aW5nIHJlcXVpcmVqcyBpbnN0YW5jZS4KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICBjZmcgPSByZXF1aXJlanM7CisgICAgICAgIHJlcXVpcmVqcyA9IHVuZGVmaW5l
ZDsKKyAgICB9CisKKyAgICAvL0FsbG93IGZvciBhIHJlcXVpcmUgY29uZmlnIG9iamVjdAorICAg
IGlmICh0eXBlb2YgcmVxdWlyZSAhPT0gJ3VuZGVmaW5lZCcgJiYgIWlzRnVuY3Rpb24ocmVxdWly
ZSkpIHsKKyAgICAgICAgLy9hc3N1bWUgaXQgaXMgYSBjb25maWcgb2JqZWN0LgorICAgICAgICBj
ZmcgPSByZXF1aXJlOworICAgICAgICByZXF1aXJlID0gdW5kZWZpbmVkOworICAgIH0KKworICAg
IGZ1bmN0aW9uIG5ld0NvbnRleHQoY29udGV4dE5hbWUpIHsKKyAgICAgICAgdmFyIGluQ2hlY2tM
b2FkZWQsIE1vZHVsZSwgY29udGV4dCwgaGFuZGxlcnMsCisgICAgICAgICAgICBjaGVja0xvYWRl
ZFRpbWVvdXRJZCwKKyAgICAgICAgICAgIGNvbmZpZyA9IHsKKyAgICAgICAgICAgICAgICB3YWl0
U2Vjb25kczogNywKKyAgICAgICAgICAgICAgICBiYXNlVXJsOiAnLi8nLAorICAgICAgICAgICAg
ICAgIHBhdGhzOiB7fSwKKyAgICAgICAgICAgICAgICBwa2dzOiB7fSwKKyAgICAgICAgICAgICAg
ICBzaGltOiB7fSwKKyAgICAgICAgICAgICAgICBtYXA6IHt9LAorICAgICAgICAgICAgICAgIGNv
bmZpZzoge30KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICByZWdpc3RyeSA9IHt9LAorICAg
ICAgICAgICAgdW5kZWZFdmVudHMgPSB7fSwKKyAgICAgICAgICAgIGRlZlF1ZXVlID0gW10sCisg
ICAgICAgICAgICBkZWZpbmVkID0ge30sCisgICAgICAgICAgICB1cmxGZXRjaGVkID0ge30sCisg
ICAgICAgICAgICByZXF1aXJlQ291bnRlciA9IDEsCisgICAgICAgICAgICB1bm5vcm1hbGl6ZWRD
b3VudGVyID0gMTsKKworICAgICAgICAvKioKKyAgICAgICAgICogVHJpbXMgdGhlIC4gYW5kIC4u
IGZyb20gYW4gYXJyYXkgb2YgcGF0aCBzZWdtZW50cy4KKyAgICAgICAgICogSXQgd2lsbCBrZWVw
IGEgbGVhZGluZyBwYXRoIHNlZ21lbnQgaWYgYSAuLiB3aWxsIGJlY29tZQorICAgICAgICAgKiB0
aGUgZmlyc3QgcGF0aCBzZWdtZW50LCB0byBoZWxwIHdpdGggbW9kdWxlIG5hbWUgbG9va3VwcywK
KyAgICAgICAgICogd2hpY2ggYWN0IGxpa2UgcGF0aHMsIGJ1dCBjYW4gYmUgcmVtYXBwZWQuIEJ1
dCB0aGUgZW5kIHJlc3VsdCwKKyAgICAgICAgICogYWxsIHBhdGhzIHRoYXQgdXNlIHRoaXMgZnVu
Y3Rpb24gc2hvdWxkIGxvb2sgbm9ybWFsaXplZC4KKyAgICAgICAgICogTk9URTogdGhpcyBtZXRo
b2QgTU9ESUZJRVMgdGhlIGlucHV0IGFycmF5LgorICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBh
cnkgdGhlIGFycmF5IG9mIHBhdGggc2VnbWVudHMuCisgICAgICAgICAqLworICAgICAgICBmdW5j
dGlvbiB0cmltRG90cyhhcnkpIHsKKyAgICAgICAgICAgIHZhciBpLCBwYXJ0OworICAgICAgICAg
ICAgZm9yIChpID0gMDsgYXJ5W2ldOyBpICs9IDEpIHsKKyAgICAgICAgICAgICAgICBwYXJ0ID0g
YXJ5W2ldOworICAgICAgICAgICAgICAgIGlmIChwYXJ0ID09PSAnLicpIHsKKyAgICAgICAgICAg
ICAgICAgICAgYXJ5LnNwbGljZShpLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgaSAtPSAxOwor
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFydCA9PT0gJy4uJykgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoaSA9PT0gMSAmJiAoYXJ5WzJdID09PSAnLi4nIHx8IGFyeVswXSA9PT0gJy4u
JykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vRW5kIG9mIHRoZSBsaW5lLiBLZWVwIGF0
IGxlYXN0IG9uZSBub24tZG90CisgICAgICAgICAgICAgICAgICAgICAgICAvL3BhdGggc2VnbWVu
dCBhdCB0aGUgZnJvbnQgc28gaXQgY2FuIGJlIG1hcHBlZAorICAgICAgICAgICAgICAgICAgICAg
ICAgLy9jb3JyZWN0bHkgdG8gZGlzay4gT3RoZXJ3aXNlLCB0aGVyZSBpcyBsaWtlbHkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vbm8gcGF0aCBtYXBwaW5nIGZvciBhIHBhdGggc3RhcnRpbmcg
d2l0aCAnLi4nLgorICAgICAgICAgICAgICAgICAgICAgICAgLy9UaGlzIGNhbiBzdGlsbCBmYWls
LCBidXQgY2F0Y2hlcyB0aGUgbW9zdCByZWFzb25hYmxlCisgICAgICAgICAgICAgICAgICAgICAg
ICAvL3VzZXMgb2YgLi4KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKGkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBh
cnkuc3BsaWNlKGkgLSAxLCAyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGkgLT0gMjsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBHaXZlbiBhIHJlbGF0aXZlIG1vZHVs
ZSBuYW1lLCBsaWtlIC4vc29tZXRoaW5nLCBub3JtYWxpemUgaXQgdG8KKyAgICAgICAgICogYSBy
ZWFsIG5hbWUgdGhhdCBjYW4gYmUgbWFwcGVkIHRvIGEgcGF0aC4KKyAgICAgICAgICogQHBhcmFt
IHtTdHJpbmd9IG5hbWUgdGhlIHJlbGF0aXZlIG5hbWUKKyAgICAgICAgICogQHBhcmFtIHtTdHJp
bmd9IGJhc2VOYW1lIGEgcmVhbCBuYW1lIHRoYXQgdGhlIG5hbWUgYXJnIGlzIHJlbGF0aXZlCisg
ICAgICAgICAqIHRvLgorICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGFwcGx5TWFwIGFwcGx5
IHRoZSBtYXAgY29uZmlnIHRvIHRoZSB2YWx1ZS4gU2hvdWxkCisgICAgICAgICAqIG9ubHkgYmUg
ZG9uZSBpZiB0aGlzIG5vcm1hbGl6YXRpb24gaXMgZm9yIGEgZGVwZW5kZW5jeSBJRC4KKyAgICAg
ICAgICogQHJldHVybnMge1N0cmluZ30gbm9ybWFsaXplZCBuYW1lCisgICAgICAgICAqLworICAg
ICAgICBmdW5jdGlvbiBub3JtYWxpemUobmFtZSwgYmFzZU5hbWUsIGFwcGx5TWFwKSB7CisgICAg
ICAgICAgICB2YXIgcGtnTmFtZSwgcGtnQ29uZmlnLCBtYXBWYWx1ZSwgbmFtZVBhcnRzLCBpLCBq
LCBuYW1lU2VnbWVudCwKKyAgICAgICAgICAgICAgICBmb3VuZE1hcCwgZm91bmRJLCBmb3VuZFN0
YXJNYXAsIHN0YXJJLAorICAgICAgICAgICAgICAgIGJhc2VQYXJ0cyA9IGJhc2VOYW1lICYmIGJh
c2VOYW1lLnNwbGl0KCcvJyksCisgICAgICAgICAgICAgICAgbm9ybWFsaXplZEJhc2VQYXJ0cyA9
IGJhc2VQYXJ0cywKKyAgICAgICAgICAgICAgICBtYXAgPSBjb25maWcubWFwLAorICAgICAgICAg
ICAgICAgIHN0YXJNYXAgPSBtYXAgJiYgbWFwWycqJ107CisKKyAgICAgICAgICAgIC8vQWRqdXN0
IGFueSByZWxhdGl2ZSBwYXRocy4KKyAgICAgICAgICAgIGlmIChuYW1lICYmIG5hbWUuY2hhckF0
KDApID09PSAnLicpIHsKKyAgICAgICAgICAgICAgICAvL0lmIGhhdmUgYSBiYXNlIG5hbWUsIHRy
eSB0byBub3JtYWxpemUgYWdhaW5zdCBpdCwKKyAgICAgICAgICAgICAgICAvL290aGVyd2lzZSwg
YXNzdW1lIGl0IGlzIGEgdG9wLWxldmVsIHJlcXVpcmUgdGhhdCB3aWxsCisgICAgICAgICAgICAg
ICAgLy9iZSByZWxhdGl2ZSB0byBiYXNlVXJsIGluIHRoZSBlbmQuCisgICAgICAgICAgICAgICAg
aWYgKGJhc2VOYW1lKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChnZXRPd24oY29uZmlnLnBr
Z3MsIGJhc2VOYW1lKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiB0aGUgYmFzZU5h
bWUgaXMgYSBwYWNrYWdlIG5hbWUsIHRoZW4ganVzdCB0cmVhdCBpdCBhcyBvbmUKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vbmFtZSB0byBjb25jYXQgdGhlIG5hbWUgd2l0aC4KKyAgICAgICAg
ICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRCYXNlUGFydHMgPSBiYXNlUGFydHMgPSBbYmFzZU5h
bWVdOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgLy9Db252ZXJ0IGJhc2VOYW1lIHRvIGFycmF5LCBhbmQgbG9wIG9mZiB0aGUgbGFzdCBwYXJ0
LAorICAgICAgICAgICAgICAgICAgICAgICAgLy9zbyB0aGF0IC4gbWF0Y2hlcyB0aGF0ICdkaXJl
Y3RvcnknIGFuZCBub3QgbmFtZSBvZiB0aGUgYmFzZU5hbWUncworICAgICAgICAgICAgICAgICAg
ICAgICAgLy9tb2R1bGUuIEZvciBpbnN0YW5jZSwgYmFzZU5hbWUgb2YgJ29uZS90d28vdGhyZWUn
LCBtYXBzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAvLydvbmUvdHdvL3RocmVlLmpzJywg
YnV0IHdlIHdhbnQgdGhlIGRpcmVjdG9yeSwgJ29uZS90d28nIGZvcgorICAgICAgICAgICAgICAg
ICAgICAgICAgLy90aGlzIG5vcm1hbGl6YXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBu
b3JtYWxpemVkQmFzZVBhcnRzID0gYmFzZVBhcnRzLnNsaWNlKDAsIGJhc2VQYXJ0cy5sZW5ndGgg
LSAxKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIG5hbWUg
PSBub3JtYWxpemVkQmFzZVBhcnRzLmNvbmNhdChuYW1lLnNwbGl0KCcvJykpOworICAgICAgICAg
ICAgICAgICAgICB0cmltRG90cyhuYW1lKTsKKworICAgICAgICAgICAgICAgICAgICAvL1NvbWUg
dXNlIG9mIHBhY2thZ2VzIG1heSB1c2UgYSAuIHBhdGggdG8gcmVmZXJlbmNlIHRoZQorICAgICAg
ICAgICAgICAgICAgICAvLydtYWluJyBtb2R1bGUgbmFtZSwgc28gbm9ybWFsaXplIGZvciB0aGF0
LgorICAgICAgICAgICAgICAgICAgICBwa2dDb25maWcgPSBnZXRPd24oY29uZmlnLnBrZ3MsIChw
a2dOYW1lID0gbmFtZVswXSkpOworICAgICAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5qb2lu
KCcvJyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwa2dDb25maWcgJiYgbmFtZSA9PT0gcGtn
TmFtZSArICcvJyArIHBrZ0NvbmZpZy5tYWluKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBu
YW1lID0gcGtnTmFtZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAobmFtZS5pbmRleE9mKCcuLycpID09PSAwKSB7CisgICAgICAgICAgICAgICAgICAg
IC8vIE5vIGJhc2VOYW1lLCBzbyB0aGlzIGlzIElEIGlzIHJlc29sdmVkIHJlbGF0aXZlCisgICAg
ICAgICAgICAgICAgICAgIC8vIHRvIGJhc2VVcmwsIHB1bGwgb2ZmIHRoZSBsZWFkaW5nIGRvdC4K
KyAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyaW5nKDIpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy9BcHBseSBtYXAgY29uZmln
IGlmIGF2YWlsYWJsZS4KKyAgICAgICAgICAgIGlmIChhcHBseU1hcCAmJiAoYmFzZVBhcnRzIHx8
IHN0YXJNYXApICYmIG1hcCkgeworICAgICAgICAgICAgICAgIG5hbWVQYXJ0cyA9IG5hbWUuc3Bs
aXQoJy8nKTsKKworICAgICAgICAgICAgICAgIGZvciAoaSA9IG5hbWVQYXJ0cy5sZW5ndGg7IGkg
PiAwOyBpIC09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgbmFtZVNlZ21lbnQgPSBuYW1lUGFy
dHMuc2xpY2UoMCwgaSkuam9pbignLycpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChiYXNl
UGFydHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vRmluZCB0aGUgbG9uZ2VzdCBiYXNl
TmFtZSBzZWdtZW50IG1hdGNoIGluIHRoZSBjb25maWcuCisgICAgICAgICAgICAgICAgICAgICAg
ICAvL1NvLCBkbyBqb2lucyBvbiB0aGUgYmlnZ2VzdCB0byBzbWFsbGVzdCBsZW5ndGhzIG9mIGJh
c2VQYXJ0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IGJhc2VQYXJ0cy5sZW5n
dGg7IGogPiAwOyBqIC09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBWYWx1
ZSA9IGdldE93bihtYXAsIGJhc2VQYXJ0cy5zbGljZSgwLCBqKS5qb2luKCcvJykpOworCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy9iYXNlTmFtZSBzZWdtZW50IGhhcyBjb25maWcsIGZp
bmQgaWYgaXQgaGFzIG9uZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3RoaXMg
bmFtZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFwVmFsdWUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwVmFsdWUgPSBnZXRPd24obWFwVmFsdWUsIG5h
bWVTZWdtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcFZhbHVl
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL01hdGNoLCB1cGRhdGUg
bmFtZSB0byB0aGUgbmV3IHZhbHVlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm91bmRNYXAgPSBtYXBWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvdW5kSSA9IGk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZE1hcCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICAvL0NoZWNrIGZvciBhIHN0YXIgbWFwIG1hdGNoLCBidXQganVzdCBob2xkIG9uIHRv
IGl0LAorICAgICAgICAgICAgICAgICAgICAvL2lmIHRoZXJlIGlzIGEgc2hvcnRlciBzZWdtZW50
IG1hdGNoIGxhdGVyIGluIGEgbWF0Y2hpbmcKKyAgICAgICAgICAgICAgICAgICAgLy9jb25maWcs
IHRoZW4gZmF2b3Igb3ZlciB0aGlzIHN0YXIgbWFwLgorICAgICAgICAgICAgICAgICAgICBpZiAo
IWZvdW5kU3Rhck1hcCAmJiBzdGFyTWFwICYmIGdldE93bihzdGFyTWFwLCBuYW1lU2VnbWVudCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kU3Rhck1hcCA9IGdldE93bihzdGFyTWFw
LCBuYW1lU2VnbWVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFySSA9IGk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBp
ZiAoIWZvdW5kTWFwICYmIGZvdW5kU3Rhck1hcCkgeworICAgICAgICAgICAgICAgICAgICBmb3Vu
ZE1hcCA9IGZvdW5kU3Rhck1hcDsKKyAgICAgICAgICAgICAgICAgICAgZm91bmRJID0gc3Rhckk7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGZvdW5kTWFwKSB7Cisg
ICAgICAgICAgICAgICAgICAgIG5hbWVQYXJ0cy5zcGxpY2UoMCwgZm91bmRJLCBmb3VuZE1hcCk7
CisgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lUGFydHMuam9pbignLycpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIG5hbWU7Cisg
ICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiByZW1vdmVTY3JpcHQobmFtZSkgeworICAgICAg
ICAgICAgaWYgKGlzQnJvd3NlcikgeworICAgICAgICAgICAgICAgIGVhY2goc2NyaXB0cygpLCBm
dW5jdGlvbiAoc2NyaXB0Tm9kZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoc2NyaXB0Tm9k
ZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZW1vZHVsZScpID09PSBuYW1lICYmCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Tm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWly
ZWNvbnRleHQnKSA9PT0gY29udGV4dC5jb250ZXh0TmFtZSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgc2NyaXB0Tm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNjcmlwdE5vZGUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IGZ1bmN0aW9uIGhhc1BhdGhGYWxsYmFjayhpZCkgeworICAgICAgICAgICAgdmFyIHBhdGhDb25m
aWcgPSBnZXRPd24oY29uZmlnLnBhdGhzLCBpZCk7CisgICAgICAgICAgICBpZiAocGF0aENvbmZp
ZyAmJiBpc0FycmF5KHBhdGhDb25maWcpICYmIHBhdGhDb25maWcubGVuZ3RoID4gMSkgeworICAg
ICAgICAgICAgICAgIHJlbW92ZVNjcmlwdChpZCk7CisgICAgICAgICAgICAgICAgLy9Qb3Agb2Zm
IHRoZSBmaXJzdCBhcnJheSB2YWx1ZSwgc2luY2UgaXQgZmFpbGVkLCBhbmQKKyAgICAgICAgICAg
ICAgICAvL3JldHJ5CisgICAgICAgICAgICAgICAgcGF0aENvbmZpZy5zaGlmdCgpOworICAgICAg
ICAgICAgICAgIGNvbnRleHQucmVxdWlyZS51bmRlZihpZCk7CisgICAgICAgICAgICAgICAgY29u
dGV4dC5yZXF1aXJlKFtpZF0pOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy9UdXJucyBhIHBsdWdpbiFyZXNvdXJjZSB0
byBbcGx1Z2luLCByZXNvdXJjZV0KKyAgICAgICAgLy93aXRoIHRoZSBwbHVnaW4gYmVpbmcgdW5k
ZWZpbmVkIGlmIHRoZSBuYW1lCisgICAgICAgIC8vZGlkIG5vdCBoYXZlIGEgcGx1Z2luIHByZWZp
eC4KKyAgICAgICAgZnVuY3Rpb24gc3BsaXRQcmVmaXgobmFtZSkgeworICAgICAgICAgICAgdmFy
IHByZWZpeCwKKyAgICAgICAgICAgICAgICBpbmRleCA9IG5hbWUgPyBuYW1lLmluZGV4T2YoJyEn
KSA6IC0xOworICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHsKKyAgICAgICAgICAgICAgICBw
cmVmaXggPSBuYW1lLnN1YnN0cmluZygwLCBpbmRleCk7CisgICAgICAgICAgICAgICAgbmFtZSA9
IG5hbWUuc3Vic3RyaW5nKGluZGV4ICsgMSwgbmFtZS5sZW5ndGgpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIFtwcmVmaXgsIG5hbWVdOworICAgICAgICB9CisKKyAgICAgICAg
LyoqCisgICAgICAgICAqIENyZWF0ZXMgYSBtb2R1bGUgbWFwcGluZyB0aGF0IGluY2x1ZGVzIHBs
dWdpbiBwcmVmaXgsIG1vZHVsZQorICAgICAgICAgKiBuYW1lLCBhbmQgcGF0aC4gSWYgcGFyZW50
TW9kdWxlTWFwIGlzIHByb3ZpZGVkIGl0IHdpbGwKKyAgICAgICAgICogYWxzbyBub3JtYWxpemUg
dGhlIG5hbWUgdmlhIHJlcXVpcmUubm9ybWFsaXplKCkKKyAgICAgICAgICoKKyAgICAgICAgICog
QHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhlIG1vZHVsZSBuYW1lCisgICAgICAgICAqIEBwYXJhbSB7
U3RyaW5nfSBbcGFyZW50TW9kdWxlTWFwXSBwYXJlbnQgbW9kdWxlIG1hcAorICAgICAgICAgKiBm
b3IgdGhlIG1vZHVsZSBuYW1lLCB1c2VkIHRvIHJlc29sdmUgcmVsYXRpdmUgbmFtZXMuCisgICAg
ICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNOb3JtYWxpemVkOiBpcyB0aGUgSUQgYWxyZWFkeSBu
b3JtYWxpemVkLgorICAgICAgICAgKiBUaGlzIGlzIHRydWUgaWYgdGhpcyBjYWxsIGlzIGRvbmUg
Zm9yIGEgZGVmaW5lKCkgbW9kdWxlIElELgorICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGFw
cGx5TWFwOiBhcHBseSB0aGUgbWFwIGNvbmZpZyB0byB0aGUgSUQuCisgICAgICAgICAqIFNob3Vs
ZCBvbmx5IGJlIHRydWUgaWYgdGhpcyBtYXAgaXMgZm9yIGEgZGVwZW5kZW5jeS4KKyAgICAgICAg
ICoKKyAgICAgICAgICogQHJldHVybnMge09iamVjdH0KKyAgICAgICAgICovCisgICAgICAgIGZ1
bmN0aW9uIG1ha2VNb2R1bGVNYXAobmFtZSwgcGFyZW50TW9kdWxlTWFwLCBpc05vcm1hbGl6ZWQs
IGFwcGx5TWFwKSB7CisgICAgICAgICAgICB2YXIgdXJsLCBwbHVnaW5Nb2R1bGUsIHN1ZmZpeCwg
bmFtZVBhcnRzLAorICAgICAgICAgICAgICAgIHByZWZpeCA9IG51bGwsCisgICAgICAgICAgICAg
ICAgcGFyZW50TmFtZSA9IHBhcmVudE1vZHVsZU1hcCA/IHBhcmVudE1vZHVsZU1hcC5uYW1lIDog
bnVsbCwKKyAgICAgICAgICAgICAgICBvcmlnaW5hbE5hbWUgPSBuYW1lLAorICAgICAgICAgICAg
ICAgIGlzRGVmaW5lID0gdHJ1ZSwKKyAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9ICcn
OworCisgICAgICAgICAgICAvL0lmIG5vIG5hbWUsIHRoZW4gaXQgbWVhbnMgaXQgaXMgYSByZXF1
aXJlIGNhbGwsIGdlbmVyYXRlIGFuCisgICAgICAgICAgICAvL2ludGVybmFsIG5hbWUuCisgICAg
ICAgICAgICBpZiAoIW5hbWUpIHsKKyAgICAgICAgICAgICAgICBpc0RlZmluZSA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgIG5hbWUgPSAnX0ByJyArIChyZXF1aXJlQ291bnRlciArPSAxKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgbmFtZVBhcnRzID0gc3BsaXRQcmVmaXgobmFtZSk7
CisgICAgICAgICAgICBwcmVmaXggPSBuYW1lUGFydHNbMF07CisgICAgICAgICAgICBuYW1lID0g
bmFtZVBhcnRzWzFdOworCisgICAgICAgICAgICBpZiAocHJlZml4KSB7CisgICAgICAgICAgICAg
ICAgcHJlZml4ID0gbm9ybWFsaXplKHByZWZpeCwgcGFyZW50TmFtZSwgYXBwbHlNYXApOworICAg
ICAgICAgICAgICAgIHBsdWdpbk1vZHVsZSA9IGdldE93bihkZWZpbmVkLCBwcmVmaXgpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvL0FjY291bnQgZm9yIHJlbGF0aXZlIHBhdGhzIGlm
IHRoZXJlIGlzIGEgYmFzZSBuYW1lLgorICAgICAgICAgICAgaWYgKG5hbWUpIHsKKyAgICAgICAg
ICAgICAgICBpZiAocHJlZml4KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwbHVnaW5Nb2R1
bGUgJiYgcGx1Z2luTW9kdWxlLm5vcm1hbGl6ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Ly9QbHVnaW4gaXMgbG9hZGVkLCB1c2UgaXRzIG5vcm1hbGl6ZSBtZXRob2QuCisgICAgICAgICAg
ICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9IHBsdWdpbk1vZHVsZS5ub3JtYWxpemUobmFt
ZSwgZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bm9ybWFsaXplKG5hbWUsIHBhcmVudE5hbWUsIGFwcGx5TWFwKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSBub3JtYWxpemUobmFtZSwgcGFyZW50TmFtZSwgYXBw
bHlNYXApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgLy9BIHJlZ3VsYXIgbW9kdWxlLgorICAgICAgICAgICAgICAg
ICAgICBub3JtYWxpemVkTmFtZSA9IG5vcm1hbGl6ZShuYW1lLCBwYXJlbnROYW1lLCBhcHBseU1h
cCk7CisKKyAgICAgICAgICAgICAgICAgICAgLy9Ob3JtYWxpemVkIG5hbWUgbWF5IGJlIGEgcGx1
Z2luIElEIGR1ZSB0byBtYXAgY29uZmlnCisgICAgICAgICAgICAgICAgICAgIC8vYXBwbGljYXRp
b24gaW4gbm9ybWFsaXplLiBUaGUgbWFwIGNvbmZpZyB2YWx1ZXMgbXVzdAorICAgICAgICAgICAg
ICAgICAgICAvL2FscmVhZHkgYmUgbm9ybWFsaXplZCwgc28gZG8gbm90IG5lZWQgdG8gcmVkbyB0
aGF0IHBhcnQuCisgICAgICAgICAgICAgICAgICAgIG5hbWVQYXJ0cyA9IHNwbGl0UHJlZml4KG5v
cm1hbGl6ZWROYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0gbmFtZVBhcnRzWzBd
OworICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9IG5hbWVQYXJ0c1sxXTsKKyAg
ICAgICAgICAgICAgICAgICAgaXNOb3JtYWxpemVkID0gdHJ1ZTsKKworICAgICAgICAgICAgICAg
ICAgICB1cmwgPSBjb250ZXh0Lm5hbWVUb1VybChub3JtYWxpemVkTmFtZSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvL0lmIHRoZSBpZCBpcyBhIHBs
dWdpbiBpZCB0aGF0IGNhbm5vdCBiZSBkZXRlcm1pbmVkIGlmIGl0IG5lZWRzCisgICAgICAgICAg
ICAvL25vcm1hbGl6YXRpb24sIHN0YW1wIGl0IHdpdGggYSB1bmlxdWUgSUQgc28gdHdvIG1hdGNo
aW5nIHJlbGF0aXZlCisgICAgICAgICAgICAvL2lkcyB0aGF0IG1heSBjb25mbGljdCBjYW4gYmUg
c2VwYXJhdGUuCisgICAgICAgICAgICBzdWZmaXggPSBwcmVmaXggJiYgIXBsdWdpbk1vZHVsZSAm
JiAhaXNOb3JtYWxpemVkID8KKyAgICAgICAgICAgICAgICAgICAgICdfdW5ub3JtYWxpemVkJyAr
ICh1bm5vcm1hbGl6ZWRDb3VudGVyICs9IDEpIDoKKyAgICAgICAgICAgICAgICAgICAgICcnOwor
CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHByZWZpeDogcHJlZml4LAor
ICAgICAgICAgICAgICAgIG5hbWU6IG5vcm1hbGl6ZWROYW1lLAorICAgICAgICAgICAgICAgIHBh
cmVudE1hcDogcGFyZW50TW9kdWxlTWFwLAorICAgICAgICAgICAgICAgIHVubm9ybWFsaXplZDog
ISFzdWZmaXgsCisgICAgICAgICAgICAgICAgdXJsOiB1cmwsCisgICAgICAgICAgICAgICAgb3Jp
Z2luYWxOYW1lOiBvcmlnaW5hbE5hbWUsCisgICAgICAgICAgICAgICAgaXNEZWZpbmU6IGlzRGVm
aW5lLAorICAgICAgICAgICAgICAgIGlkOiAocHJlZml4ID8KKyAgICAgICAgICAgICAgICAgICAg
ICAgIHByZWZpeCArICchJyArIG5vcm1hbGl6ZWROYW1lIDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG5vcm1hbGl6ZWROYW1lKSArIHN1ZmZpeAorICAgICAgICAgICAgfTsKKyAgICAgICAgfQor
CisgICAgICAgIGZ1bmN0aW9uIGdldE1vZHVsZShkZXBNYXApIHsKKyAgICAgICAgICAgIHZhciBp
ZCA9IGRlcE1hcC5pZCwKKyAgICAgICAgICAgICAgICBtb2QgPSBnZXRPd24ocmVnaXN0cnksIGlk
KTsKKworICAgICAgICAgICAgaWYgKCFtb2QpIHsKKyAgICAgICAgICAgICAgICBtb2QgPSByZWdp
c3RyeVtpZF0gPSBuZXcgY29udGV4dC5Nb2R1bGUoZGVwTWFwKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgcmV0dXJuIG1vZDsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIG9u
KGRlcE1hcCwgbmFtZSwgZm4pIHsKKyAgICAgICAgICAgIHZhciBpZCA9IGRlcE1hcC5pZCwKKyAg
ICAgICAgICAgICAgICBtb2QgPSBnZXRPd24ocmVnaXN0cnksIGlkKTsKKworICAgICAgICAgICAg
aWYgKGhhc1Byb3AoZGVmaW5lZCwgaWQpICYmCisgICAgICAgICAgICAgICAgICAgICghbW9kIHx8
IG1vZC5kZWZpbmVFbWl0Q29tcGxldGUpKSB7CisgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09
ICdkZWZpbmVkJykgeworICAgICAgICAgICAgICAgICAgICBmbihkZWZpbmVkW2lkXSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBnZXRN
b2R1bGUoZGVwTWFwKS5vbihuYW1lLCBmbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBmdW5jdGlvbiBvbkVycm9yKGVyciwgZXJyYmFjaykgeworICAgICAgICAgICAgdmFy
IGlkcyA9IGVyci5yZXF1aXJlTW9kdWxlcywKKyAgICAgICAgICAgICAgICBub3RpZmllZCA9IGZh
bHNlOworCisgICAgICAgICAgICBpZiAoZXJyYmFjaykgeworICAgICAgICAgICAgICAgIGVycmJh
Y2soZXJyKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZWFjaChpZHMs
IGZ1bmN0aW9uIChpZCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgbW9kID0gZ2V0T3duKHJl
Z2lzdHJ5LCBpZCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChtb2QpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vU2V0IGVycm9yIG9uIG1vZHVsZSwgc28gaXQgc2tpcHMgdGltZW91dCBj
aGVja3MuCisgICAgICAgICAgICAgICAgICAgICAgICBtb2QuZXJyb3IgPSBlcnI7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobW9kLmV2ZW50cy5lcnJvcikgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vdGlmaWVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtb2QuZW1pdCgnZXJyb3InLCBlcnIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAg
ICBpZiAoIW5vdGlmaWVkKSB7CisgICAgICAgICAgICAgICAgICAgIHJlcS5vbkVycm9yKGVycik7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEludGVybmFsIG1ldGhvZCB0byB0cmFuc2ZlciBnbG9iYWxRdWV1ZSBp
dGVtcyB0byB0aGlzIGNvbnRleHQncworICAgICAgICAgKiBkZWZRdWV1ZS4KKyAgICAgICAgICov
CisgICAgICAgIGZ1bmN0aW9uIHRha2VHbG9iYWxRdWV1ZSgpIHsKKyAgICAgICAgICAgIC8vUHVz
aCBhbGwgdGhlIGdsb2JhbERlZlF1ZXVlIGl0ZW1zIGludG8gdGhlIGNvbnRleHQncyBkZWZRdWV1
ZQorICAgICAgICAgICAgaWYgKGdsb2JhbERlZlF1ZXVlLmxlbmd0aCkgeworICAgICAgICAgICAg
ICAgIC8vQXJyYXkgc3BsaWNlIGluIHRoZSB2YWx1ZXMgc2luY2UgdGhlIGNvbnRleHQgY29kZSBo
YXMgYQorICAgICAgICAgICAgICAgIC8vbG9jYWwgdmFyIHJlZiB0byBkZWZRdWV1ZSwgc28gY2Fu
bm90IGp1c3QgcmVhc3NpZ24gdGhlIG9uZQorICAgICAgICAgICAgICAgIC8vb24gY29udGV4dC4K
KyAgICAgICAgICAgICAgICBhcHNwLmFwcGx5KGRlZlF1ZXVlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgW2RlZlF1ZXVlLmxlbmd0aCAtIDEsIDBdLmNvbmNhdChnbG9iYWxEZWZRdWV1ZSkp
OworICAgICAgICAgICAgICAgIGdsb2JhbERlZlF1ZXVlID0gW107CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBoYW5kbGVycyA9IHsKKyAgICAgICAgICAgICdyZXF1aXJlJzog
ZnVuY3Rpb24gKG1vZCkgeworICAgICAgICAgICAgICAgIGlmIChtb2QucmVxdWlyZSkgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbW9kLnJlcXVpcmU7CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChtb2QucmVxdWlyZSA9IGNvbnRleHQu
bWFrZVJlcXVpcmUobW9kLm1hcCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0s
CisgICAgICAgICAgICAnZXhwb3J0cyc6IGZ1bmN0aW9uIChtb2QpIHsKKyAgICAgICAgICAgICAg
ICBtb2QudXNpbmdFeHBvcnRzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAobW9kLm1hcC5p
c0RlZmluZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAobW9kLmV4cG9ydHMpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBtb2QuZXhwb3J0czsKKyAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAobW9kLmV4cG9ydHMg
PSBkZWZpbmVkW21vZC5tYXAuaWRdID0ge30pOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICdtb2R1bGUnOiBmdW5j
dGlvbiAobW9kKSB7CisgICAgICAgICAgICAgICAgaWYgKG1vZC5tb2R1bGUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG1vZC5tb2R1bGU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChtb2QubW9kdWxlID0geworICAgICAgICAgICAg
ICAgICAgICAgICAgaWQ6IG1vZC5tYXAuaWQsCisgICAgICAgICAgICAgICAgICAgICAgICB1cmk6
IG1vZC5tYXAudXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnOiBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChjb25maWcuY29uZmlnICYm
IGdldE93bihjb25maWcuY29uZmlnLCBtb2QubWFwLmlkKSkgfHwge307CisgICAgICAgICAgICAg
ICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0czogZGVmaW5lZFtt
b2QubWFwLmlkXQorICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgZnVuY3Rpb24gY2xlYW5SZWdpc3Ry
eShpZCkgeworICAgICAgICAgICAgLy9DbGVhbiB1cCBtYWNoaW5lcnkgdXNlZCBmb3Igd2FpdGlu
ZyBtb2R1bGVzLgorICAgICAgICAgICAgZGVsZXRlIHJlZ2lzdHJ5W2lkXTsKKyAgICAgICAgfQor
CisgICAgICAgIGZ1bmN0aW9uIGJyZWFrQ3ljbGUobW9kLCB0cmFjZWQsIHByb2Nlc3NlZCkgewor
ICAgICAgICAgICAgdmFyIGlkID0gbW9kLm1hcC5pZDsKKworICAgICAgICAgICAgaWYgKG1vZC5l
cnJvcikgeworICAgICAgICAgICAgICAgIG1vZC5lbWl0KCdlcnJvcicsIG1vZC5lcnJvcik7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRyYWNlZFtpZF0gPSB0cnVlOwor
ICAgICAgICAgICAgICAgIGVhY2gobW9kLmRlcE1hcHMsIGZ1bmN0aW9uIChkZXBNYXAsIGkpIHsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIGRlcElkID0gZGVwTWFwLmlkLAorICAgICAgICAgICAg
ICAgICAgICAgICAgZGVwID0gZ2V0T3duKHJlZ2lzdHJ5LCBkZXBJZCk7CisKKyAgICAgICAgICAg
ICAgICAgICAgLy9Pbmx5IGZvcmNlIHRoaW5ncyB0aGF0IGhhdmUgbm90IGNvbXBsZXRlZAorICAg
ICAgICAgICAgICAgICAgICAvL2JlaW5nIGRlZmluZWQsIHNvIHN0aWxsIGluIHRoZSByZWdpc3Ry
eSwKKyAgICAgICAgICAgICAgICAgICAgLy9hbmQgb25seSBpZiBpdCBoYXMgbm90IGJlZW4gbWF0
Y2hlZCB1cAorICAgICAgICAgICAgICAgICAgICAvL2luIHRoZSBtb2R1bGUgYWxyZWFkeS4KKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGRlcCAmJiAhbW9kLmRlcE1hdGNoZWRbaV0gJiYgIXByb2Nl
c3NlZFtkZXBJZF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnZXRPd24odHJhY2Vk
LCBkZXBJZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2QuZGVmaW5lRGVwKGks
IGRlZmluZWRbZGVwSWRdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2QuY2hlY2so
KTsgLy9wYXNzIGZhbHNlPworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVha0N5Y2xlKGRlcCwgdHJhY2VkLCBwcm9jZXNzZWQp
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcHJvY2Vzc2VkW2lkXSA9IHRydWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBjaGVja0xvYWRlZCgp
IHsKKyAgICAgICAgICAgIHZhciBtYXAsIG1vZElkLCBlcnIsIHVzaW5nUGF0aEZhbGxiYWNrLAor
ICAgICAgICAgICAgICAgIHdhaXRJbnRlcnZhbCA9IGNvbmZpZy53YWl0U2Vjb25kcyAqIDEwMDAs
CisgICAgICAgICAgICAgICAgLy9JdCBpcyBwb3NzaWJsZSB0byBkaXNhYmxlIHRoZSB3YWl0IGlu
dGVydmFsIGJ5IHVzaW5nIHdhaXRTZWNvbmRzIG9mIDAuCisgICAgICAgICAgICAgICAgZXhwaXJl
ZCA9IHdhaXRJbnRlcnZhbCAmJiAoY29udGV4dC5zdGFydFRpbWUgKyB3YWl0SW50ZXJ2YWwpIDwg
bmV3IERhdGUoKS5nZXRUaW1lKCksCisgICAgICAgICAgICAgICAgbm9Mb2FkcyA9IFtdLAorICAg
ICAgICAgICAgICAgIHJlcUNhbGxzID0gW10sCisgICAgICAgICAgICAgICAgc3RpbGxMb2FkaW5n
ID0gZmFsc2UsCisgICAgICAgICAgICAgICAgbmVlZEN5Y2xlQ2hlY2sgPSB0cnVlOworCisgICAg
ICAgICAgICAvL0RvIG5vdCBib3RoZXIgaWYgdGhpcyBjYWxsIHdhcyBhIHJlc3VsdCBvZiBhIGN5
Y2xlIGJyZWFrLgorICAgICAgICAgICAgaWYgKGluQ2hlY2tMb2FkZWQpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGluQ2hlY2tMb2FkZWQg
PSB0cnVlOworCisgICAgICAgICAgICAvL0ZpZ3VyZSBvdXQgdGhlIHN0YXRlIG9mIGFsbCB0aGUg
bW9kdWxlcy4KKyAgICAgICAgICAgIGVhY2hQcm9wKHJlZ2lzdHJ5LCBmdW5jdGlvbiAobW9kKSB7
CisgICAgICAgICAgICAgICAgbWFwID0gbW9kLm1hcDsKKyAgICAgICAgICAgICAgICBtb2RJZCA9
IG1hcC5pZDsKKworICAgICAgICAgICAgICAgIC8vU2tpcCB0aGluZ3MgdGhhdCBhcmUgbm90IGVu
YWJsZWQgb3IgaW4gZXJyb3Igc3RhdGUuCisgICAgICAgICAgICAgICAgaWYgKCFtb2QuZW5hYmxl
ZCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgaWYgKCFtYXAuaXNEZWZpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAg
cmVxQ2FsbHMucHVzaChtb2QpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IGlmICghbW9kLmVycm9yKSB7CisgICAgICAgICAgICAgICAgICAgIC8vSWYgdGhlIG1vZHVsZSBz
aG91bGQgYmUgZXhlY3V0ZWQsIGFuZCBpdCBoYXMgbm90CisgICAgICAgICAgICAgICAgICAgIC8v
YmVlbiBpbml0ZWQgYW5kIHRpbWUgaXMgdXAsIHJlbWVtYmVyIGl0LgorICAgICAgICAgICAgICAg
ICAgICBpZiAoIW1vZC5pbml0ZWQgJiYgZXhwaXJlZCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGhhc1BhdGhGYWxsYmFjayhtb2RJZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1c2luZ1BhdGhGYWxsYmFjayA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RpbGxMb2FkaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9Mb2Fkcy5wdXNoKG1vZElkKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVTY3JpcHQobW9kSWQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFtb2QuaW5pdGVk
ICYmIG1vZC5mZXRjaGVkICYmIG1hcC5pc0RlZmluZSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgc3RpbGxMb2FkaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWFw
LnByZWZpeCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vTm8gcmVhc29uIHRvIGtl
ZXAgbG9va2luZyBmb3IgdW5maW5pc2hlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
bG9hZGluZy4gSWYgdGhlIG9ubHkgc3RpbGxMb2FkaW5nIGlzIGEKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvL3BsdWdpbiByZXNvdXJjZSB0aG91Z2gsIGtlZXAgZ29pbmcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy9iZWNhdXNlIGl0IG1heSBiZSB0aGF0IGEgcGx1Z2luIHJl
c291cmNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9pcyB3YWl0aW5nIG9uIGEgbm9u
LXBsdWdpbiBjeWNsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG5lZWRD
eWNsZUNoZWNrID0gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisKKyAgICAg
ICAgICAgIGlmIChleHBpcmVkICYmIG5vTG9hZHMubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAg
Ly9JZiB3YWl0IHRpbWUgZXhwaXJlZCwgdGhyb3cgZXJyb3Igb2YgdW5sb2FkZWQgbW9kdWxlcy4K
KyAgICAgICAgICAgICAgICBlcnIgPSBtYWtlRXJyb3IoJ3RpbWVvdXQnLCAnTG9hZCB0aW1lb3V0
IGZvciBtb2R1bGVzOiAnICsgbm9Mb2FkcywgbnVsbCwgbm9Mb2Fkcyk7CisgICAgICAgICAgICAg
ICAgZXJyLmNvbnRleHROYW1lID0gY29udGV4dC5jb250ZXh0TmFtZTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gb25FcnJvcihlcnIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvL05v
dCBleHBpcmVkLCBjaGVjayBmb3IgYSBjeWNsZS4KKyAgICAgICAgICAgIGlmIChuZWVkQ3ljbGVD
aGVjaykgeworICAgICAgICAgICAgICAgIGVhY2gocmVxQ2FsbHMsIGZ1bmN0aW9uIChtb2QpIHsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWtDeWNsZShtb2QsIHt9LCB7fSk7CisgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vSWYgc3RpbGwgd2FpdGlu
ZyBvbiBsb2FkcywgYW5kIHRoZSB3YWl0aW5nIGxvYWQgaXMgc29tZXRoaW5nCisgICAgICAgICAg
ICAvL290aGVyIHRoYW4gYSBwbHVnaW4gcmVzb3VyY2UsIG9yIHRoZXJlIGFyZSBzdGlsbCBvdXRz
dGFuZGluZworICAgICAgICAgICAgLy9zY3JpcHRzLCB0aGVuIGp1c3QgdHJ5IGJhY2sgbGF0ZXIu
CisgICAgICAgICAgICBpZiAoKCFleHBpcmVkIHx8IHVzaW5nUGF0aEZhbGxiYWNrKSAmJiBzdGls
bExvYWRpbmcpIHsKKyAgICAgICAgICAgICAgICAvL1NvbWV0aGluZyBpcyBzdGlsbCB3YWl0aW5n
IHRvIGxvYWQuIFdhaXQgZm9yIGl0LCBidXQgb25seQorICAgICAgICAgICAgICAgIC8vaWYgYSB0
aW1lb3V0IGlzIG5vdCBhbHJlYWR5IGluIGVmZmVjdC4KKyAgICAgICAgICAgICAgICBpZiAoKGlz
QnJvd3NlciB8fCBpc1dlYldvcmtlcikgJiYgIWNoZWNrTG9hZGVkVGltZW91dElkKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNoZWNrTG9hZGVkVGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0xvYWRlZFRpbWVvdXRJZCA9IDA7
CisgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0xvYWRlZCgpOworICAgICAgICAgICAgICAg
ICAgICB9LCA1MCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpbkNoZWNrTG9hZGVkID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBNb2R1bGUg
PSBmdW5jdGlvbiAobWFwKSB7CisgICAgICAgICAgICB0aGlzLmV2ZW50cyA9IGdldE93bih1bmRl
ZkV2ZW50cywgbWFwLmlkKSB8fCB7fTsKKyAgICAgICAgICAgIHRoaXMubWFwID0gbWFwOworICAg
ICAgICAgICAgdGhpcy5zaGltID0gZ2V0T3duKGNvbmZpZy5zaGltLCBtYXAuaWQpOworICAgICAg
ICAgICAgdGhpcy5kZXBFeHBvcnRzID0gW107CisgICAgICAgICAgICB0aGlzLmRlcE1hcHMgPSBb
XTsKKyAgICAgICAgICAgIHRoaXMuZGVwTWF0Y2hlZCA9IFtdOworICAgICAgICAgICAgdGhpcy5w
bHVnaW5NYXBzID0ge307CisgICAgICAgICAgICB0aGlzLmRlcENvdW50ID0gMDsKKworICAgICAg
ICAgICAgLyogdGhpcy5leHBvcnRzIHRoaXMuZmFjdG9yeQorICAgICAgICAgICAgICAgdGhpcy5k
ZXBNYXBzID0gW10sCisgICAgICAgICAgICAgICB0aGlzLmVuYWJsZWQsIHRoaXMuZmV0Y2hlZAor
ICAgICAgICAgICAgKi8KKyAgICAgICAgfTsKKworICAgICAgICBNb2R1bGUucHJvdG90eXBlID0g
eworICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24gKGRlcE1hcHMsIGZhY3RvcnksIGVycmJhY2ss
IG9wdGlvbnMpIHsKKyAgICAgICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKKwor
ICAgICAgICAgICAgICAgIC8vRG8gbm90IGRvIG1vcmUgaW5pdHMgaWYgYWxyZWFkeSBkb25lLiBD
YW4gaGFwcGVuIGlmIHRoZXJlCisgICAgICAgICAgICAgICAgLy9hcmUgbXVsdGlwbGUgZGVmaW5l
IGNhbGxzIGZvciB0aGUgc2FtZSBtb2R1bGUuIFRoYXQgaXMgbm90CisgICAgICAgICAgICAgICAg
Ly9hIG5vcm1hbCwgY29tbW9uIGNhc2UsIGJ1dCBpdCBpcyBhbHNvIG5vdCB1bmV4cGVjdGVkLgor
ICAgICAgICAgICAgICAgIGlmICh0aGlzLmluaXRlZCkgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdGhpcy5mYWN0b3J5
ID0gZmFjdG9yeTsKKworICAgICAgICAgICAgICAgIGlmIChlcnJiYWNrKSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vUmVnaXN0ZXIgZm9yIGVycm9ycyBvbiB0aGlzIG1vZHVsZS4KKyAgICAgICAg
ICAgICAgICAgICAgdGhpcy5vbignZXJyb3InLCBlcnJiYWNrKTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKHRoaXMuZXZlbnRzLmVycm9yKSB7CisgICAgICAgICAgICAgICAgICAgIC8vSWYg
bm8gZXJyYmFjayBhbHJlYWR5LCBidXQgdGhlcmUgYXJlIGVycm9yIGxpc3RlbmVycworICAgICAg
ICAgICAgICAgICAgICAvL29uIHRoaXMgbW9kdWxlLCBzZXQgdXAgYW4gZXJyYmFjayB0byBwYXNz
IHRvIHRoZSBkZXBzLgorICAgICAgICAgICAgICAgICAgICBlcnJiYWNrID0gYmluZCh0aGlzLCBm
dW5jdGlvbiAoZXJyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9y
JywgZXJyKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgLy9EbyBhIGNvcHkgb2YgdGhlIGRlcGVuZGVuY3kgYXJyYXksIHNvIHRo
YXQKKyAgICAgICAgICAgICAgICAvL3NvdXJjZSBpbnB1dHMgYXJlIG5vdCBtb2RpZmllZC4gRm9y
IGV4YW1wbGUKKyAgICAgICAgICAgICAgICAvLyJzaGltIiBkZXBzIGFyZSBwYXNzZWQgaW4gaGVy
ZSBkaXJlY3RseSwgYW5kCisgICAgICAgICAgICAgICAgLy9kb2luZyBhIGRpcmVjdCBtb2RpZmlj
YXRpb24gb2YgdGhlIGRlcE1hcHMgYXJyYXkKKyAgICAgICAgICAgICAgICAvL3dvdWxkIGFmZmVj
dCB0aGF0IGNvbmZpZy4KKyAgICAgICAgICAgICAgICB0aGlzLmRlcE1hcHMgPSBkZXBNYXBzICYm
IGRlcE1hcHMuc2xpY2UoMCk7CisKKyAgICAgICAgICAgICAgICB0aGlzLmVycmJhY2sgPSBlcnJi
YWNrOworCisgICAgICAgICAgICAgICAgLy9JbmRpY2F0ZSB0aGlzIG1vZHVsZSBoYXMgYmUgaW5p
dGlhbGl6ZWQKKyAgICAgICAgICAgICAgICB0aGlzLmluaXRlZCA9IHRydWU7CisKKyAgICAgICAg
ICAgICAgICB0aGlzLmlnbm9yZSA9IG9wdGlvbnMuaWdub3JlOworCisgICAgICAgICAgICAgICAg
Ly9Db3VsZCBoYXZlIG9wdGlvbiB0byBpbml0IHRoaXMgbW9kdWxlIGluIGVuYWJsZWQgbW9kZSwK
KyAgICAgICAgICAgICAgICAvL29yIGNvdWxkIGhhdmUgYmVlbiBwcmV2aW91c2x5IG1hcmtlZCBh
cyBlbmFibGVkLiBIb3dldmVyLAorICAgICAgICAgICAgICAgIC8vdGhlIGRlcGVuZGVuY2llcyBh
cmUgbm90IGtub3duIHVudGlsIGluaXQgaXMgY2FsbGVkLiBTbworICAgICAgICAgICAgICAgIC8v
aWYgZW5hYmxlZCBwcmV2aW91c2x5LCBub3cgdHJpZ2dlciBkZXBlbmRlbmNpZXMgYXMgZW5hYmxl
ZC4KKyAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5lbmFibGVkIHx8IHRoaXMuZW5hYmxlZCkg
eworICAgICAgICAgICAgICAgICAgICAvL0VuYWJsZSB0aGlzIG1vZHVsZSBhbmQgZGVwZW5kZW5j
aWVzLgorICAgICAgICAgICAgICAgICAgICAvL1dpbGwgY2FsbCB0aGlzLmNoZWNrKCkKKyAgICAg
ICAgICAgICAgICAgICAgdGhpcy5lbmFibGUoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrKCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSwKKworICAgICAgICAgICAgZGVmaW5lRGVwOiBmdW5jdGlvbiAoaSwgZGVwRXhw
b3J0cykgeworICAgICAgICAgICAgICAgIC8vQmVjYXVzZSBvZiBjeWNsZXMsIGRlZmluZWQgY2Fs
bGJhY2sgZm9yIGEgZ2l2ZW4KKyAgICAgICAgICAgICAgICAvL2V4cG9ydCBjYW4gYmUgY2FsbGVk
IG1vcmUgdGhhbiBvbmNlLgorICAgICAgICAgICAgICAgIGlmICghdGhpcy5kZXBNYXRjaGVkW2ld
KSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwTWF0Y2hlZFtpXSA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgIHRoaXMuZGVwQ291bnQgLT0gMTsKKyAgICAgICAgICAgICAgICAgICAg
dGhpcy5kZXBFeHBvcnRzW2ldID0gZGVwRXhwb3J0czsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9LAorCisgICAgICAgICAgICBmZXRjaDogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgICAgIGlmICh0aGlzLmZldGNoZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlzLmZldGNoZWQgPSB0cnVlOwor
CisgICAgICAgICAgICAgICAgY29udGV4dC5zdGFydFRpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGlt
ZSgpOworCisgICAgICAgICAgICAgICAgdmFyIG1hcCA9IHRoaXMubWFwOworCisgICAgICAgICAg
ICAgICAgLy9JZiB0aGUgbWFuYWdlciBpcyBmb3IgYSBwbHVnaW4gbWFuYWdlZCByZXNvdXJjZSwK
KyAgICAgICAgICAgICAgICAvL2FzayB0aGUgcGx1Z2luIHRvIGxvYWQgaXQgbm93LgorICAgICAg
ICAgICAgICAgIGlmICh0aGlzLnNoaW0pIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5t
YWtlUmVxdWlyZSh0aGlzLm1hcCwgeworICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlQnVp
bGRDYWxsYmFjazogdHJ1ZQorICAgICAgICAgICAgICAgICAgICB9KSh0aGlzLnNoaW0uZGVwcyB8
fCBbXSwgYmluZCh0aGlzLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbWFwLnByZWZpeCA/IHRoaXMuY2FsbFBsdWdpbigpIDogdGhpcy5sb2FkKCk7CisgICAg
ICAgICAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAvL1JlZ3VsYXIgZGVwZW5kZW5jeS4KKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG1hcC5wcmVmaXggPyB0aGlzLmNhbGxQbHVnaW4oKSA6IHRoaXMubG9hZCgpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIGxvYWQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgICAgICB2YXIgdXJsID0gdGhpcy5tYXAudXJsOworCisgICAgICAg
ICAgICAgICAgLy9SZWd1bGFyIGRlcGVuZGVuY3kuCisgICAgICAgICAgICAgICAgaWYgKCF1cmxG
ZXRjaGVkW3VybF0pIHsKKyAgICAgICAgICAgICAgICAgICAgdXJsRmV0Y2hlZFt1cmxdID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5sb2FkKHRoaXMubWFwLmlkLCB1cmwpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIC8qKgorICAg
ICAgICAgICAgICogQ2hlY2tzIGlzIHRoZSBtb2R1bGUgaXMgcmVhZHkgdG8gZGVmaW5lIGl0c2Vs
ZiwgYW5kIGlmIHNvLAorICAgICAgICAgICAgICogZGVmaW5lIGl0LgorICAgICAgICAgICAgICov
CisgICAgICAgICAgICBjaGVjazogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIGlmICgh
dGhpcy5lbmFibGVkIHx8IHRoaXMuZW5hYmxpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHZhciBlcnIsIGNqc01v
ZHVsZSwKKyAgICAgICAgICAgICAgICAgICAgaWQgPSB0aGlzLm1hcC5pZCwKKyAgICAgICAgICAg
ICAgICAgICAgZGVwRXhwb3J0cyA9IHRoaXMuZGVwRXhwb3J0cywKKyAgICAgICAgICAgICAgICAg
ICAgZXhwb3J0cyA9IHRoaXMuZXhwb3J0cywKKyAgICAgICAgICAgICAgICAgICAgZmFjdG9yeSA9
IHRoaXMuZmFjdG9yeTsKKworICAgICAgICAgICAgICAgIGlmICghdGhpcy5pbml0ZWQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGhpcy5mZXRjaCgpOworICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAodGhpcy5lcnJvcikgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywg
dGhpcy5lcnJvcik7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5kZWZpbmluZykg
eworICAgICAgICAgICAgICAgICAgICAvL1RoZSBmYWN0b3J5IGNvdWxkIHRyaWdnZXIgYW5vdGhl
ciByZXF1aXJlIGNhbGwKKyAgICAgICAgICAgICAgICAgICAgLy90aGF0IHdvdWxkIHJlc3VsdCBp
biBjaGVja2luZyB0aGlzIG1vZHVsZSB0bworICAgICAgICAgICAgICAgICAgICAvL2RlZmluZSBp
dHNlbGYgYWdhaW4uIElmIGFscmVhZHkgaW4gdGhlIHByb2Nlc3MKKyAgICAgICAgICAgICAgICAg
ICAgLy9vZiBkb2luZyB0aGF0LCBza2lwIHRoaXMgd29yay4KKyAgICAgICAgICAgICAgICAgICAg
dGhpcy5kZWZpbmluZyA9IHRydWU7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVw
Q291bnQgPCAxICYmICF0aGlzLmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChpc0Z1bmN0aW9uKGZhY3RvcnkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9J
ZiB0aGVyZSBpcyBhbiBlcnJvciBsaXN0ZW5lciwgZmF2b3IgcGFzc2luZworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vdG8gdGhhdCBpbnN0ZWFkIG9mIHRocm93aW5nIGFuIGVycm9yLgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmV2ZW50cy5lcnJvcikgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXhwb3J0cyA9IGNvbnRleHQuZXhlY0NiKGlkLCBmYWN0b3J5LCBkZXBF
eHBvcnRzLCBleHBvcnRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRj
aCAoZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSBj
b250ZXh0LmV4ZWNDYihpZCwgZmFjdG9yeSwgZGVwRXhwb3J0cywgZXhwb3J0cyk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHRoaXMubWFwLmlzRGVmaW5lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
SWYgc2V0dGluZyBleHBvcnRzIHZpYSAnbW9kdWxlJyBpcyBpbiBwbGF5LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvL2Zhdm9yIHRoYXQgb3ZlciByZXR1cm4gdmFsdWUgYW5kIGV4
cG9ydHMuIEFmdGVyIHRoYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZmF2
b3IgYSBub24tdW5kZWZpbmVkIHJldHVybiB2YWx1ZSBvdmVyIGV4cG9ydHMgdXNlLgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjanNNb2R1bGUgPSB0aGlzLm1vZHVsZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNqc01vZHVsZSAmJgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNqc01vZHVsZS5leHBvcnRzICE9PSB1bmRlZmlu
ZWQgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL01ha2Ugc3Vy
ZSBpdCBpcyBub3QgYWxyZWFkeSB0aGUgZXhwb3J0cyB2YWx1ZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNqc01vZHVsZS5leHBvcnRzICE9PSB0aGlzLmV4cG9ydHMp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSBjanNNb2R1
bGUuZXhwb3J0czsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChl
eHBvcnRzID09PSB1bmRlZmluZWQgJiYgdGhpcy51c2luZ0V4cG9ydHMpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vZXhwb3J0cyBhbHJlYWR5IHNldCB0aGUgZGVmaW5l
ZCB2YWx1ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSB0
aGlzLmV4cG9ydHM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
ZXJyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyci5yZXF1aXJlTWFwID0g
dGhpcy5tYXA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyci5yZXF1aXJlTW9k
dWxlcyA9IFt0aGlzLm1hcC5pZF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVy
ci5yZXF1aXJlVHlwZSA9ICdkZWZpbmUnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gb25FcnJvcigodGhpcy5lcnJvciA9IGVycikpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvL0p1c3QgYSBsaXRlcmFsIHZhbHVlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXhwb3J0cyA9IGZhY3Rvcnk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwb3J0cyA9IGV4cG9ydHM7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hcC5pc0RlZmluZSAmJiAhdGhpcy5p
Z25vcmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkW2lkXSA9IGV4cG9y
dHM7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxLm9uUmVzb3VyY2VMb2Fk
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5vblJlc291cmNlTG9hZChj
b250ZXh0LCB0aGlzLm1hcCwgdGhpcy5kZXBNYXBzKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vQ2xlYW4gdXAKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZWdpc3RyeVtp
ZF07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5lZCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvL0ZpbmlzaGVkIHRoZSBk
ZWZpbmUgc3RhZ2UuIEFsbG93IGNhbGxpbmcgY2hlY2sgYWdhaW4KKyAgICAgICAgICAgICAgICAg
ICAgLy90byBhbGxvdyBkZWZpbmUgbm90aWZpY2F0aW9ucyBiZWxvdyBpbiB0aGUgY2FzZSBvZiBh
CisgICAgICAgICAgICAgICAgICAgIC8vY3ljbGUuCisgICAgICAgICAgICAgICAgICAgIHRoaXMu
ZGVmaW5pbmcgPSBmYWxzZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kZWZpbmVk
ICYmICF0aGlzLmRlZmluZUVtaXR0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
ZGVmaW5lRW1pdHRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQo
J2RlZmluZWQnLCB0aGlzLmV4cG9ydHMpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5k
ZWZpbmVFbWl0Q29tcGxldGUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICBjYWxsUGx1Z2luOiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgdmFyIG1hcCA9IHRoaXMubWFwLAorICAgICAg
ICAgICAgICAgICAgICBpZCA9IG1hcC5pZCwKKyAgICAgICAgICAgICAgICAgICAgLy9NYXAgYWxy
ZWFkeSBub3JtYWxpemVkIHRoZSBwcmVmaXguCisgICAgICAgICAgICAgICAgICAgIHBsdWdpbk1h
cCA9IG1ha2VNb2R1bGVNYXAobWFwLnByZWZpeCk7CisKKyAgICAgICAgICAgICAgICAvL01hcmsg
dGhpcyBhcyBhIGRlcGVuZGVuY3kgZm9yIHRoaXMgcGx1Z2luLCBzbyBpdAorICAgICAgICAgICAg
ICAgIC8vY2FuIGJlIHRyYWNlZCBmb3IgY3ljbGVzLgorICAgICAgICAgICAgICAgIHRoaXMuZGVw
TWFwcy5wdXNoKHBsdWdpbk1hcCk7CisKKyAgICAgICAgICAgICAgICBvbihwbHVnaW5NYXAsICdk
ZWZpbmVkJywgYmluZCh0aGlzLCBmdW5jdGlvbiAocGx1Z2luKSB7CisgICAgICAgICAgICAgICAg
ICAgIHZhciBsb2FkLCBub3JtYWxpemVkTWFwLCBub3JtYWxpemVkTW9kLAorICAgICAgICAgICAg
ICAgICAgICAgICAgbmFtZSA9IHRoaXMubWFwLm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJlbnROYW1lID0gdGhpcy5tYXAucGFyZW50TWFwID8gdGhpcy5tYXAucGFyZW50TWFwLm5h
bWUgOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxSZXF1aXJlID0gY29udGV4
dC5tYWtlUmVxdWlyZShtYXAucGFyZW50TWFwLCB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZW5hYmxlQnVpbGRDYWxsYmFjazogdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBza2lwTWFwOiB0cnVlCisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAg
ICAgICAgICAgICAvL0lmIGN1cnJlbnQgbWFwIGlzIG5vdCBub3JtYWxpemVkLCB3YWl0IGZvciB0
aGF0CisgICAgICAgICAgICAgICAgICAgIC8vbm9ybWFsaXplZCBuYW1lIHRvIGxvYWQgaW5zdGVh
ZCBvZiBjb250aW51aW5nLgorICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXAudW5ub3Jt
YWxpemVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvL05vcm1hbGl6ZSB0aGUgSUQgaWYg
dGhlIHBsdWdpbiBhbGxvd3MgaXQuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGx1Z2lu
Lm5vcm1hbGl6ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBwbHVnaW4u
bm9ybWFsaXplKG5hbWUsIGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBub3JtYWxpemUobmFtZSwgcGFyZW50TmFtZSwgdHJ1ZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSkgfHwgJyc7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vcHJlZml4IGFuZCBuYW1lIHNob3VsZCBh
bHJlYWR5IGJlIG5vcm1hbGl6ZWQsIG5vIG5lZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
Zm9yIGFwcGx5aW5nIG1hcCBjb25maWcgYWdhaW4gZWl0aGVyLgorICAgICAgICAgICAgICAgICAg
ICAgICAgbm9ybWFsaXplZE1hcCA9IG1ha2VNb2R1bGVNYXAobWFwLnByZWZpeCArICchJyArIG5h
bWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLm1hcC5wYXJlbnRNYXApOworICAgICAgICAgICAgICAgICAgICAgICAgb24obm9ybWFs
aXplZE1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVmaW5lZCcsIGJpbmQodGhp
cywgZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuaW5pdChbXSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsdWU7IH0sIG51bGwsIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmU6IHRydWUKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpOworCisg
ICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBu
b3JtYWxpemVkTWFwLmlkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub3JtYWxpemVk
TW9kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9NYXJrIHRoaXMgYXMgYSBkZXBl
bmRlbmN5IGZvciB0aGlzIHBsdWdpbiwgc28gaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvL2NhbiBiZSB0cmFjZWQgZm9yIGN5Y2xlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLmRlcE1hcHMucHVzaChub3JtYWxpemVkTWFwKTsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh0aGlzLmV2ZW50cy5lcnJvcikgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBub3JtYWxpemVkTW9kLm9uKCdlcnJvcicsIGJpbmQodGhpcywgZnVuY3Rpb24g
KGVycikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdl
cnJvcicsIGVycik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9y
bWFsaXplZE1vZC5lbmFibGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgbG9hZCA9IGJpbmQodGhpcywgZnVuY3Rpb24gKHZhbHVlKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXQoW10sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZh
bHVlOyB9LCBudWxsLCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1
ZQorICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0pOwor
CisgICAgICAgICAgICAgICAgICAgIGxvYWQuZXJyb3IgPSBiaW5kKHRoaXMsIGZ1bmN0aW9uIChl
cnIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdGVkID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBlcnI7CisgICAgICAgICAgICAgICAgICAg
ICAgICBlcnIucmVxdWlyZU1vZHVsZXMgPSBbaWRdOworCisgICAgICAgICAgICAgICAgICAgICAg
ICAvL1JlbW92ZSB0ZW1wIHVubm9ybWFsaXplZCBtb2R1bGVzIGZvciB0aGlzIG1vZHVsZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vc2luY2UgdGhleSB3aWxsIG5ldmVyIGJlIHJlc29sdmVk
IG90aGVyd2lzZSBub3cuCisgICAgICAgICAgICAgICAgICAgICAgICBlYWNoUHJvcChyZWdpc3Ry
eSwgZnVuY3Rpb24gKG1vZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2Qu
bWFwLmlkLmluZGV4T2YoaWQgKyAnX3Vubm9ybWFsaXplZCcpID09PSAwKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNsZWFuUmVnaXN0cnkobW9kLm1hcC5pZCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoZXJyKTsKKyAgICAgICAgICAgICAgICAgICAg
fSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy9BbGxvdyBwbHVnaW5zIHRvIGxvYWQgb3RoZXIg
Y29kZSB3aXRob3V0IGhhdmluZyB0byBrbm93IHRoZQorICAgICAgICAgICAgICAgICAgICAvL2Nv
bnRleHQgb3IgaG93IHRvICdjb21wbGV0ZScgdGhlIGxvYWQuCisgICAgICAgICAgICAgICAgICAg
IGxvYWQuZnJvbVRleHQgPSBiaW5kKHRoaXMsIGZ1bmN0aW9uICh0ZXh0LCB0ZXh0QWx0KSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvKmpzbGludCBldmlsOiB0cnVlICovCisgICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgbW9kdWxlTmFtZSA9IG1hcC5uYW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1vZHVsZU1hcCA9IG1ha2VNb2R1bGVNYXAobW9kdWxlTmFtZSksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGFzSW50ZXJhY3RpdmUgPSB1c2VJbnRlcmFjdGl2ZTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgLy9BcyBvZiAyLjEuMCwgc3VwcG9ydCBqdXN0IHBh
c3NpbmcgdGhlIHRleHQsIHRvIHJlaW5mb3JjZQorICAgICAgICAgICAgICAgICAgICAgICAgLy9m
cm9tVGV4dCBvbmx5IGJlaW5nIGNhbGxlZCBvbmNlIHBlciByZXNvdXJjZS4gU3RpbGwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vc3VwcG9ydCBvbGQgc3R5bGUgb2YgcGFzc2luZyBtb2R1bGVO
YW1lIGJ1dCBkaXNjYXJkCisgICAgICAgICAgICAgICAgICAgICAgICAvL3RoYXQgbW9kdWxlTmFt
ZSBpbiBmYXZvciBvZiB0aGUgaW50ZXJuYWwgcmVmLgorICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHRleHRBbHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dEFs
dDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAg
Ly9UdXJuIG9mZiBpbnRlcmFjdGl2ZSBzY3JpcHQgbWF0Y2hpbmcgZm9yIElFIGZvciBhbnkgZGVm
aW5lCisgICAgICAgICAgICAgICAgICAgICAgICAvL2NhbGxzIGluIHRoZSB0ZXh0LCB0aGVuIHR1
cm4gaXQgYmFjayBvbiBhdCB0aGUgZW5kLgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhh
c0ludGVyYWN0aXZlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlSW50ZXJhY3Rp
dmUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICAgICAgLy9QcmltZSB0aGUgc3lzdGVtIGJ5IGNyZWF0aW5nIGEgbW9kdWxlIGluc3RhbmNl
IGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgLy9pdC4KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGdldE1vZHVsZShtb2R1bGVNYXApOworCisgICAgICAgICAgICAgICAgICAgICAgICAvL1Ry
YW5zZmVyIGFueSBjb25maWcgdG8gdGhpcyBvdGhlciBtb2R1bGUuCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoaGFzUHJvcChjb25maWcuY29uZmlnLCBpZCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25maWcuY29uZmlnW21vZHVsZU5hbWVdID0gY29uZmlnLmNvbmZpZ1tp
ZF07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLmV4ZWModGV4dCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCdmcm9tVGV4dCBldmFsIGZvciAnICsgbW9kdWxlTmFtZSAr
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgZmFpbGVkOiAn
ICsgZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChoYXNJbnRlcmFjdGl2ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVz
ZUludGVyYWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAgICAgLy9NYXJrIHRoaXMgYXMgYSBkZXBlbmRlbmN5IGZvciB0aGUgcGx1
Z2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL3Jlc291cmNlCisgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLmRlcE1hcHMucHVzaChtb2R1bGVNYXApOworCisgICAgICAgICAgICAgICAg
ICAgICAgICAvL1N1cHBvcnQgYW5vbnltb3VzIG1vZHVsZXMuCisgICAgICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LmNvbXBsZXRlTG9hZChtb2R1bGVOYW1lKTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgLy9CaW5kIHRoZSB2YWx1ZSBvZiB0aGF0IG1vZHVsZSB0byB0aGUgdmFsdWUgZm9y
IHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vcmVzb3VyY2UgSUQuCisgICAgICAgICAg
ICAgICAgICAgICAgICBsb2NhbFJlcXVpcmUoW21vZHVsZU5hbWVdLCBsb2FkKTsKKyAgICAgICAg
ICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy9Vc2UgcGFyZW50TmFtZSBo
ZXJlIHNpbmNlIHRoZSBwbHVnaW4ncyBuYW1lIGlzIG5vdCByZWxpYWJsZSwKKyAgICAgICAgICAg
ICAgICAgICAgLy9jb3VsZCBiZSBzb21lIHdlaXJkIHN0cmluZyB3aXRoIG5vIHBhdGggdGhhdCBh
Y3R1YWxseSB3YW50cyB0bworICAgICAgICAgICAgICAgICAgICAvL3JlZmVyZW5jZSB0aGUgcGFy
ZW50TmFtZSdzIHBhdGguCisgICAgICAgICAgICAgICAgICAgIHBsdWdpbi5sb2FkKG1hcC5uYW1l
LCBsb2NhbFJlcXVpcmUsIGxvYWQsIGNvbmZpZyk7CisgICAgICAgICAgICAgICAgfSkpOworCisg
ICAgICAgICAgICAgICAgY29udGV4dC5lbmFibGUocGx1Z2luTWFwLCB0aGlzKTsKKyAgICAgICAg
ICAgICAgICB0aGlzLnBsdWdpbk1hcHNbcGx1Z2luTWFwLmlkXSA9IHBsdWdpbk1hcDsKKyAgICAg
ICAgICAgIH0sCisKKyAgICAgICAgICAgIGVuYWJsZTogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7CisKKyAgICAgICAgICAgICAgICAvL1NldCBmbGFn
IG1lbnRpb25pbmcgdGhhdCB0aGUgbW9kdWxlIGlzIGVuYWJsaW5nLAorICAgICAgICAgICAgICAg
IC8vc28gdGhhdCBpbW1lZGlhdGUgY2FsbHMgdG8gdGhlIGRlZmluZWQgY2FsbGJhY2tzCisgICAg
ICAgICAgICAgICAgLy9mb3IgZGVwZW5kZW5jaWVzIGRvIG5vdCB0cmlnZ2VyIGluYWR2ZXJ0ZW50
IGxvYWQKKyAgICAgICAgICAgICAgICAvL3dpdGggdGhlIGRlcENvdW50IHN0aWxsIGJlaW5nIHpl
cm8uCisgICAgICAgICAgICAgICAgdGhpcy5lbmFibGluZyA9IHRydWU7CisKKyAgICAgICAgICAg
ICAgICAvL0VuYWJsZSBlYWNoIGRlcGVuZGVuY3kKKyAgICAgICAgICAgICAgICBlYWNoKHRoaXMu
ZGVwTWFwcywgYmluZCh0aGlzLCBmdW5jdGlvbiAoZGVwTWFwLCBpKSB7CisgICAgICAgICAgICAg
ICAgICAgIHZhciBpZCwgbW9kLCBoYW5kbGVyOworCisgICAgICAgICAgICAgICAgICAgIGlmICh0
eXBlb2YgZGVwTWFwID09PSAnc3RyaW5nJykgeworICAgICAgICAgICAgICAgICAgICAgICAgLy9E
ZXBlbmRlbmN5IG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB0byBhIGRlcE1hcAorICAgICAgICAgICAg
ICAgICAgICAgICAgLy9hbmQgd2lyZWQgdXAgdG8gdGhpcyBtb2R1bGUuCisgICAgICAgICAgICAg
ICAgICAgICAgICBkZXBNYXAgPSBtYWtlTW9kdWxlTWFwKGRlcE1hcCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMubWFwLmlzRGVmaW5lID8gdGhp
cy5tYXAgOiB0aGlzLm1hcC5wYXJlbnRNYXApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIXRoaXMuc2tpcE1hcCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLmRlcE1hcHNbaV0gPSBkZXBNYXA7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGhh
bmRsZXIgPSBnZXRPd24oaGFuZGxlcnMsIGRlcE1hcC5pZCk7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChoYW5kbGVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5k
ZXBFeHBvcnRzW2ldID0gaGFuZGxlcih0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMuZGVwQ291bnQgKz0gMTsKKworICAgICAgICAgICAgICAgICAgICAgICAgb24o
ZGVwTWFwLCAnZGVmaW5lZCcsIGJpbmQodGhpcywgZnVuY3Rpb24gKGRlcEV4cG9ydHMpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluZURlcChpLCBkZXBFeHBvcnRzKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9KSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmVycmJh
Y2spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbihkZXBNYXAsICdlcnJvcicsIHRo
aXMuZXJyYmFjayk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZCA9IGRlcE1hcC5pZDsKKyAgICAgICAgICAg
ICAgICAgICAgbW9kID0gcmVnaXN0cnlbaWRdOworCisgICAgICAgICAgICAgICAgICAgIC8vU2tp
cCBzcGVjaWFsIG1vZHVsZXMgbGlrZSAncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScKKyAg
ICAgICAgICAgICAgICAgICAgLy9BbHNvLCBkb24ndCBjYWxsIGVuYWJsZSBpZiBpdCBpcyBhbHJl
YWR5IGVuYWJsZWQsCisgICAgICAgICAgICAgICAgICAgIC8vaW1wb3J0YW50IGluIGNpcmN1bGFy
IGRlcGVuZGVuY3kgY2FzZXMuCisgICAgICAgICAgICAgICAgICAgIGlmICghaGFzUHJvcChoYW5k
bGVycywgaWQpICYmIG1vZCAmJiAhbW9kLmVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQuZW5hYmxlKGRlcE1hcCwgdGhpcyk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9KSk7CisKKyAgICAgICAgICAgICAgICAvL0VuYWJsZSBlYWNoIHBs
dWdpbiB0aGF0IGlzIHVzZWQgaW4KKyAgICAgICAgICAgICAgICAvL2EgZGVwZW5kZW5jeQorICAg
ICAgICAgICAgICAgIGVhY2hQcm9wKHRoaXMucGx1Z2luTWFwcywgYmluZCh0aGlzLCBmdW5jdGlv
biAocGx1Z2luTWFwKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBtb2QgPSBnZXRPd24ocmVn
aXN0cnksIHBsdWdpbk1hcC5pZCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChtb2QgJiYgIW1v
ZC5lbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmVuYWJsZShwbHVn
aW5NYXAsIHRoaXMpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSkp
OworCisgICAgICAgICAgICAgICAgdGhpcy5lbmFibGluZyA9IGZhbHNlOworCisgICAgICAgICAg
ICAgICAgdGhpcy5jaGVjaygpOworICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgb246IGZ1
bmN0aW9uIChuYW1lLCBjYikgeworICAgICAgICAgICAgICAgIHZhciBjYnMgPSB0aGlzLmV2ZW50
c1tuYW1lXTsKKyAgICAgICAgICAgICAgICBpZiAoIWNicykgeworICAgICAgICAgICAgICAgICAg
ICBjYnMgPSB0aGlzLmV2ZW50c1tuYW1lXSA9IFtdOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBjYnMucHVzaChjYik7CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICBl
bWl0OiBmdW5jdGlvbiAobmFtZSwgZXZ0KSB7CisgICAgICAgICAgICAgICAgZWFjaCh0aGlzLmV2
ZW50c1tuYW1lXSwgZnVuY3Rpb24gKGNiKSB7CisgICAgICAgICAgICAgICAgICAgIGNiKGV2dCk7
CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdlcnJv
cicpIHsKKyAgICAgICAgICAgICAgICAgICAgLy9Ob3cgdGhhdCB0aGUgZXJyb3IgaGFuZGxlciB3
YXMgdHJpZ2dlcmVkLCByZW1vdmUKKyAgICAgICAgICAgICAgICAgICAgLy90aGUgbGlzdGVuZXJz
LCBzaW5jZSB0aGlzIGJyb2tlbiBNb2R1bGUgaW5zdGFuY2UKKyAgICAgICAgICAgICAgICAgICAg
Ly9jYW4gc3RheSBhcm91bmQgZm9yIGEgd2hpbGUgaW4gdGhlIHJlZ2lzdHJ5LgorICAgICAgICAg
ICAgICAgICAgICBkZWxldGUgdGhpcy5ldmVudHNbbmFtZV07CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIGZ1bmN0aW9uIGNhbGxHZXRNb2R1
bGUoYXJncykgeworICAgICAgICAgICAgLy9Ta2lwIG1vZHVsZXMgYWxyZWFkeSBkZWZpbmVkLgor
ICAgICAgICAgICAgaWYgKCFoYXNQcm9wKGRlZmluZWQsIGFyZ3NbMF0pKSB7CisgICAgICAgICAg
ICAgICAgZ2V0TW9kdWxlKG1ha2VNb2R1bGVNYXAoYXJnc1swXSwgbnVsbCwgdHJ1ZSkpLmluaXQo
YXJnc1sxXSwgYXJnc1syXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBm
dW5jdGlvbiByZW1vdmVMaXN0ZW5lcihub2RlLCBmdW5jLCBuYW1lLCBpZU5hbWUpIHsKKyAgICAg
ICAgICAgIC8vRmF2b3IgZGV0YWNoRXZlbnQgYmVjYXVzZSBvZiBJRTkKKyAgICAgICAgICAgIC8v
aXNzdWUsIHNlZSBhdHRhY2hFdmVudC9hZGRFdmVudExpc3RlbmVyIGNvbW1lbnQgZWxzZXdoZXJl
CisgICAgICAgICAgICAvL2luIHRoaXMgZmlsZS4KKyAgICAgICAgICAgIGlmIChub2RlLmRldGFj
aEV2ZW50ICYmICFpc09wZXJhKSB7CisgICAgICAgICAgICAgICAgLy9Qcm9iYWJseSBJRS4gSWYg
bm90IGl0IHdpbGwgdGhyb3cgYW4gZXJyb3IsIHdoaWNoIHdpbGwgYmUKKyAgICAgICAgICAgICAg
ICAvL3VzZWZ1bCB0byBrbm93LgorICAgICAgICAgICAgICAgIGlmIChpZU5hbWUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZS5kZXRhY2hFdmVudChpZU5hbWUsIGZ1bmMpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbm9kZS5yZW1v
dmVFdmVudExpc3RlbmVyKG5hbWUsIGZ1bmMsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBHaXZlbiBhbiBldmVudCBmcm9tIGEgc2Ny
aXB0IG5vZGUsIGdldCB0aGUgcmVxdWlyZWpzIGluZm8gZnJvbSBpdCwKKyAgICAgICAgICogYW5k
IHRoZW4gcmVtb3ZlcyB0aGUgZXZlbnQgbGlzdGVuZXJzIG9uIHRoZSBub2RlLgorICAgICAgICAg
KiBAcGFyYW0ge0V2ZW50fSBldnQKKyAgICAgICAgICogQHJldHVybnMge09iamVjdH0KKyAgICAg
ICAgICovCisgICAgICAgIGZ1bmN0aW9uIGdldFNjcmlwdERhdGEoZXZ0KSB7CisgICAgICAgICAg
ICAvL1VzaW5nIGN1cnJlbnRUYXJnZXQgaW5zdGVhZCBvZiB0YXJnZXQgZm9yIEZpcmVmb3ggMi4w
J3Mgc2FrZS4gTm90CisgICAgICAgICAgICAvL2FsbCBvbGQgYnJvd3NlcnMgd2lsbCBiZSBzdXBw
b3J0ZWQsIGJ1dCB0aGlzIG9uZSB3YXMgZWFzeSBlbm91Z2gKKyAgICAgICAgICAgIC8vdG8gc3Vw
cG9ydCBhbmQgc3RpbGwgbWFrZXMgc2Vuc2UuCisgICAgICAgICAgICB2YXIgbm9kZSA9IGV2dC5j
dXJyZW50VGFyZ2V0IHx8IGV2dC5zcmNFbGVtZW50OworCisgICAgICAgICAgICAvL1JlbW92ZSB0
aGUgbGlzdGVuZXJzIG9uY2UgaGVyZS4KKyAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKG5vZGUs
IGNvbnRleHQub25TY3JpcHRMb2FkLCAnbG9hZCcsICdvbnJlYWR5c3RhdGVjaGFuZ2UnKTsKKyAg
ICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKG5vZGUsIGNvbnRleHQub25TY3JpcHRFcnJvciwgJ2Vy
cm9yJyk7CisKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgbm9kZTogbm9k
ZSwKKyAgICAgICAgICAgICAgICBpZDogbm9kZSAmJiBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1y
ZXF1aXJlbW9kdWxlJykKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICBmdW5j
dGlvbiBpbnRha2VEZWZpbmVzKCkgeworICAgICAgICAgICAgdmFyIGFyZ3M7CisKKyAgICAgICAg
ICAgIC8vQW55IGRlZmluZWQgbW9kdWxlcyBpbiB0aGUgZ2xvYmFsIHF1ZXVlLCBpbnRha2UgdGhl
bSBub3cuCisgICAgICAgICAgICB0YWtlR2xvYmFsUXVldWUoKTsKKworICAgICAgICAgICAgLy9N
YWtlIHN1cmUgYW55IHJlbWFpbmluZyBkZWZRdWV1ZSBpdGVtcyBnZXQgcHJvcGVybHkgcHJvY2Vz
c2VkLgorICAgICAgICAgICAgd2hpbGUgKGRlZlF1ZXVlLmxlbmd0aCkgeworICAgICAgICAgICAg
ICAgIGFyZ3MgPSBkZWZRdWV1ZS5zaGlmdCgpOworICAgICAgICAgICAgICAgIGlmIChhcmdzWzBd
ID09PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBvbkVycm9yKG1ha2VFcnJv
cignbWlzbWF0Y2gnLCAnTWlzbWF0Y2hlZCBhbm9ueW1vdXMgZGVmaW5lKCkgbW9kdWxlOiAnICsg
YXJnc1thcmdzLmxlbmd0aCAtIDFdKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy9hcmdzIGFyZSBpZCwgZGVwcywgZmFjdG9yeS4gU2hvdWxkIGJlIG5v
cm1hbGl6ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIC8vZGVmaW5lKCkgZnVuY3Rpb24u
CisgICAgICAgICAgICAgICAgICAgIGNhbGxHZXRNb2R1bGUoYXJncyk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29udGV4dCA9IHsKKyAg
ICAgICAgICAgIGNvbmZpZzogY29uZmlnLAorICAgICAgICAgICAgY29udGV4dE5hbWU6IGNvbnRl
eHROYW1lLAorICAgICAgICAgICAgcmVnaXN0cnk6IHJlZ2lzdHJ5LAorICAgICAgICAgICAgZGVm
aW5lZDogZGVmaW5lZCwKKyAgICAgICAgICAgIHVybEZldGNoZWQ6IHVybEZldGNoZWQsCisgICAg
ICAgICAgICBkZWZRdWV1ZTogZGVmUXVldWUsCisgICAgICAgICAgICBNb2R1bGU6IE1vZHVsZSwK
KyAgICAgICAgICAgIG1ha2VNb2R1bGVNYXA6IG1ha2VNb2R1bGVNYXAsCisgICAgICAgICAgICBu
ZXh0VGljazogcmVxLm5leHRUaWNrLAorCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAq
IFNldCBhIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBjb250ZXh0LgorICAgICAgICAgICAgICogQHBh
cmFtIHtPYmplY3R9IGNmZyBjb25maWcgb2JqZWN0IHRvIGludGVncmF0ZS4KKyAgICAgICAgICAg
ICAqLworICAgICAgICAgICAgY29uZmlndXJlOiBmdW5jdGlvbiAoY2ZnKSB7CisgICAgICAgICAg
ICAgICAgLy9NYWtlIHN1cmUgdGhlIGJhc2VVcmwgZW5kcyBpbiBhIHNsYXNoLgorICAgICAgICAg
ICAgICAgIGlmIChjZmcuYmFzZVVybCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoY2ZnLmJh
c2VVcmwuY2hhckF0KGNmZy5iYXNlVXJsLmxlbmd0aCAtIDEpICE9PSAnLycpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNmZy5iYXNlVXJsICs9ICcvJzsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vU2F2ZSBvZmYgdGhlIHBh
dGhzIGFuZCBwYWNrYWdlcyBzaW5jZSB0aGV5IHJlcXVpcmUgc3BlY2lhbCBwcm9jZXNzaW5nLAor
ICAgICAgICAgICAgICAgIC8vdGhleSBhcmUgYWRkaXRpdmUuCisgICAgICAgICAgICAgICAgdmFy
IHBrZ3MgPSBjb25maWcucGtncywKKyAgICAgICAgICAgICAgICAgICAgc2hpbSA9IGNvbmZpZy5z
aGltLAorICAgICAgICAgICAgICAgICAgICBvYmpzID0geworICAgICAgICAgICAgICAgICAgICAg
ICAgcGF0aHM6IHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWc6IHRydWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICBtYXA6IHRydWUKKyAgICAgICAgICAgICAgICAgICAgfTsK
KworICAgICAgICAgICAgICAgIGVhY2hQcm9wKGNmZywgZnVuY3Rpb24gKHZhbHVlLCBwcm9wKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChvYmpzW3Byb3BdKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAocHJvcCA9PT0gJ21hcCcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtaXhpbihjb25maWdbcHJvcF0sIHZhbHVlLCB0cnVlLCB0cnVlKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWl4aW4oY29u
ZmlnW3Byb3BdLCB2YWx1ZSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdb
cHJvcF0gPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0p
OworCisgICAgICAgICAgICAgICAgLy9NZXJnZSBzaGltCisgICAgICAgICAgICAgICAgaWYgKGNm
Zy5zaGltKSB7CisgICAgICAgICAgICAgICAgICAgIGVhY2hQcm9wKGNmZy5zaGltLCBmdW5jdGlv
biAodmFsdWUsIGlkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvL05vcm1hbGl6ZSB0aGUg
c3RydWN0dXJlCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVwczogdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCh2YWx1ZS5leHBvcnRzIHx8IHZhbHVlLmluaXQpICYmICF2YWx1ZS5leHBvcnRzRm4pIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5leHBvcnRzRm4gPSBjb250ZXh0Lm1ha2VT
aGltRXhwb3J0cyh2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICBzaGltW2lkXSA9IHZhbHVlOworICAgICAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgICAgICAgICAgY29uZmlnLnNoaW0gPSBzaGltOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIC8vQWRqdXN0IHBhY2thZ2VzIGlmIG5lY2Vzc2FyeS4KKyAg
ICAgICAgICAgICAgICBpZiAoY2ZnLnBhY2thZ2VzKSB7CisgICAgICAgICAgICAgICAgICAgIGVh
Y2goY2ZnLnBhY2thZ2VzLCBmdW5jdGlvbiAocGtnT2JqKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgbG9jYXRpb247CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZ09iaiA9IHR5
cGVvZiBwa2dPYmogPT09ICdzdHJpbmcnID8geyBuYW1lOiBwa2dPYmogfSA6IHBrZ09iajsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uID0gcGtnT2JqLmxvY2F0aW9uOworCisgICAg
ICAgICAgICAgICAgICAgICAgICAvL0NyZWF0ZSBhIGJyYW5kIG5ldyBvYmplY3Qgb24gcGtncywg
c2luY2UgY3VycmVudFBhY2thZ2VzIGNhbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9iZSBw
YXNzZWQgaW4gYWdhaW4sIGFuZCBjb25maWcucGtncyBpcyB0aGUgaW50ZXJuYWwgdHJhbnNmb3Jt
ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vc3RhdGUgZm9yIGFsbCBwYWNrYWdlIGNvbmZp
Z3MuCisgICAgICAgICAgICAgICAgICAgICAgICBwa2dzW3BrZ09iai5uYW1lXSA9IHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBwa2dPYmoubmFtZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsb2NhdGlvbjogbG9jYXRpb24gfHwgcGtnT2JqLm5hbWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy9SZW1vdmUgbGVhZGluZyBkb3QgaW4gbWFpbiwgc28gbWFp
biBwYXRocyBhcmUgbm9ybWFsaXplZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2Fu
ZCByZW1vdmUgYW55IHRyYWlsaW5nIC5qcywgc2luY2UgZGlmZmVyZW50IHBhY2thZ2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvL2VudnMgaGF2ZSBkaWZmZXJlbnQgY29udmVudGlvbnM6
IHNvbWUgdXNlIGEgbW9kdWxlIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9z
b21lIHVzZSBhIGZpbGUgbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWluOiAo
cGtnT2JqLm1haW4gfHwgJ21haW4nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC5yZXBsYWNlKGN1cnJEaXJSZWdFeHAsICcnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC5yZXBsYWNlKGpzU3VmZml4UmVnRXhwLCAnJykKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH07CisgICAgICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgICAgIC8v
RG9uZSB3aXRoIG1vZGlmaWNhdGlvbnMsIGFzc2luZyBwYWNrYWdlcyBiYWNrIHRvIGNvbnRleHQg
Y29uZmlnCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5wa2dzID0gcGtnczsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvL0lmIHRoZXJlIGFyZSBhbnkgIndhaXRpbmcg
dG8gZXhlY3V0ZSIgbW9kdWxlcyBpbiB0aGUgcmVnaXN0cnksCisgICAgICAgICAgICAgICAgLy91
cGRhdGUgdGhlIG1hcHMgZm9yIHRoZW0sIHNpbmNlIHRoZWlyIGluZm8sIGxpa2UgVVJMcyB0byBs
b2FkLAorICAgICAgICAgICAgICAgIC8vbWF5IGhhdmUgY2hhbmdlZC4KKyAgICAgICAgICAgICAg
ICBlYWNoUHJvcChyZWdpc3RyeSwgZnVuY3Rpb24gKG1vZCwgaWQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy9JZiBtb2R1bGUgYWxyZWFkeSBoYXMgaW5pdCBjYWxsZWQsIHNpbmNlIGl0IGlzIHRv
bworICAgICAgICAgICAgICAgICAgICAvL2xhdGUgdG8gbW9kaWZ5IHRoZW0sIGFuZCBpZ25vcmUg
dW5ub3JtYWxpemVkIG9uZXMKKyAgICAgICAgICAgICAgICAgICAgLy9zaW5jZSB0aGV5IGFyZSB0
cmFuc2llbnQuCisgICAgICAgICAgICAgICAgICAgIGlmICghbW9kLmluaXRlZCAmJiAhbW9kLm1h
cC51bm5vcm1hbGl6ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5tYXAgPSBtYWtl
TW9kdWxlTWFwKGlkKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0p
OworCisgICAgICAgICAgICAgICAgLy9JZiBhIGRlcHMgYXJyYXkgb3IgYSBjb25maWcgY2FsbGJh
Y2sgaXMgc3BlY2lmaWVkLCB0aGVuIGNhbGwKKyAgICAgICAgICAgICAgICAvL3JlcXVpcmUgd2l0
aCB0aG9zZSBhcmdzLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHJlcXVpcmUgaXMgZGVmaW5lZCBhcyBh
CisgICAgICAgICAgICAgICAgLy9jb25maWcgb2JqZWN0IGJlZm9yZSByZXF1aXJlLmpzIGlzIGxv
YWRlZC4KKyAgICAgICAgICAgICAgICBpZiAoY2ZnLmRlcHMgfHwgY2ZnLmNhbGxiYWNrKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVxdWlyZShjZmcuZGVwcyB8fCBbXSwgY2ZnLmNh
bGxiYWNrKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorCisgICAgICAgICAg
ICBtYWtlU2hpbUV4cG9ydHM6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgICAgIGZ1
bmN0aW9uIGZuKCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgcmV0OworICAgICAgICAgICAg
ICAgICAgICBpZiAodmFsdWUuaW5pdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0g
dmFsdWUuaW5pdC5hcHBseShnbG9iYWwsIGFyZ3VtZW50cyk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldCB8fCAodmFsdWUuZXhwb3J0cyAmJiBn
ZXRHbG9iYWwodmFsdWUuZXhwb3J0cykpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICByZXR1cm4gZm47CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICBtYWtlUmVxdWly
ZTogZnVuY3Rpb24gKHJlbE1hcCwgb3B0aW9ucykgeworICAgICAgICAgICAgICAgIG9wdGlvbnMg
PSBvcHRpb25zIHx8IHt9OworCisgICAgICAgICAgICAgICAgZnVuY3Rpb24gbG9jYWxSZXF1aXJl
KGRlcHMsIGNhbGxiYWNrLCBlcnJiYWNrKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBpZCwg
bWFwLCByZXF1aXJlTW9kOworCisgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmVuYWJs
ZUJ1aWxkQ2FsbGJhY2sgJiYgY2FsbGJhY2sgJiYgaXNGdW5jdGlvbihjYWxsYmFjaykpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLl9fcmVxdWlyZUpzQnVpbGQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBk
ZXBzID09PSAnc3RyaW5nJykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rp
b24oY2FsbGJhY2spKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9JbnZhbGlkIGNh
bGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3Io
J3JlcXVpcmVhcmdzJywgJ0ludmFsaWQgcmVxdWlyZSBjYWxsJyksIGVycmJhY2spOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAvL0lmIHJlcXVp
cmV8ZXhwb3J0c3xtb2R1bGUgYXJlIHJlcXVlc3RlZCwgZ2V0IHRoZQorICAgICAgICAgICAgICAg
ICAgICAgICAgLy92YWx1ZSBmb3IgdGhlbSBmcm9tIHRoZSBzcGVjaWFsIGhhbmRsZXJzLiBDYXZl
YXQ6CisgICAgICAgICAgICAgICAgICAgICAgICAvL3RoaXMgb25seSB3b3JrcyB3aGlsZSBtb2R1
bGUgaXMgYmVpbmcgZGVmaW5lZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWxNYXAg
JiYgaGFzUHJvcChoYW5kbGVycywgZGVwcykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gaGFuZGxlcnNbZGVwc10ocmVnaXN0cnlbcmVsTWFwLmlkXSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vU3luY2hyb25vdXMg
YWNjZXNzIHRvIG9uZSBtb2R1bGUuIElmIHJlcXVpcmUuZ2V0IGlzCisgICAgICAgICAgICAgICAg
ICAgICAgICAvL2F2YWlsYWJsZSAoYXMgaW4gdGhlIE5vZGUgYWRhcHRlciksIHByZWZlciB0aGF0
LgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5nZXQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcmVxLmdldChjb250ZXh0LCBkZXBzLCByZWxNYXApOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAvL05vcm1h
bGl6ZSBtb2R1bGUgbmFtZSwgaWYgaXQgY29udGFpbnMgLiBvciAuLgorICAgICAgICAgICAgICAg
ICAgICAgICAgbWFwID0gbWFrZU1vZHVsZU1hcChkZXBzLCByZWxNYXAsIGZhbHNlLCB0cnVlKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gbWFwLmlkOworCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIWhhc1Byb3AoZGVmaW5lZCwgaWQpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdub3Rsb2FkZWQnLCAnTW9kdWxlIG5h
bWUgIicgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkICsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIiBoYXMgbm90IGJlZW4gbG9h
ZGVkIHlldCBmb3IgY29udGV4dDogJyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGV4dE5hbWUgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChyZWxNYXAgPyAnJyA6ICcuIFVzZSByZXF1aXJlKFtdKScpKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmaW5lZFtp
ZF07CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvL0dyYWIg
ZGVmaW5lcyB3YWl0aW5nIGluIHRoZSBnbG9iYWwgcXVldWUuCisgICAgICAgICAgICAgICAgICAg
IGludGFrZURlZmluZXMoKTsKKworICAgICAgICAgICAgICAgICAgICAvL01hcmsgYWxsIHRoZSBk
ZXBlbmRlbmNpZXMgYXMgbmVlZGluZyB0byBiZSBsb2FkZWQuCisgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQubmV4dFRpY2soZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Ly9Tb21lIGRlZmluZXMgY291bGQgaGF2ZSBiZWVuIGFkZGVkIHNpbmNlIHRoZQorICAgICAgICAg
ICAgICAgICAgICAgICAgLy9yZXF1aXJlIGNhbGwsIGNvbGxlY3QgdGhlbS4KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGludGFrZURlZmluZXMoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAg
cmVxdWlyZU1vZCA9IGdldE1vZHVsZShtYWtlTW9kdWxlTWFwKG51bGwsIHJlbE1hcCkpOworCisg
ICAgICAgICAgICAgICAgICAgICAgICAvL1N0b3JlIGlmIG1hcCBjb25maWcgc2hvdWxkIGJlIGFw
cGxpZWQgdG8gdGhpcyByZXF1aXJlCisgICAgICAgICAgICAgICAgICAgICAgICAvL2NhbGwgZm9y
IGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVNb2Quc2tpcE1h
cCA9IG9wdGlvbnMuc2tpcE1hcDsKKworICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZU1v
ZC5pbml0KGRlcHMsIGNhbGxiYWNrLCBlcnJiYWNrLCB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZW5hYmxlZDogdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNoZWNrTG9hZGVkKCk7CisgICAgICAgICAgICAgICAgICAgIH0p
OworCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbFJlcXVpcmU7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgbWl4aW4obG9jYWxSZXF1aXJlLCB7CisgICAgICAg
ICAgICAgICAgICAgIGlzQnJvd3NlcjogaXNCcm93c2VyLAorCisgICAgICAgICAgICAgICAgICAg
IC8qKgorICAgICAgICAgICAgICAgICAgICAgKiBDb252ZXJ0cyBhIG1vZHVsZSBuYW1lICsgLmV4
dGVuc2lvbiBpbnRvIGFuIFVSTCBwYXRoLgorICAgICAgICAgICAgICAgICAgICAgKiAqUmVxdWly
ZXMqIHRoZSB1c2Ugb2YgYSBtb2R1bGUgbmFtZS4gSXQgZG9lcyBub3Qgc3VwcG9ydCB1c2luZwor
ICAgICAgICAgICAgICAgICAgICAgKiBwbGFpbiBVUkxzIGxpa2UgbmFtZVRvVXJsLgorICAgICAg
ICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgdG9Vcmw6IGZ1bmN0aW9uICht
b2R1bGVOYW1lUGx1c0V4dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0g
bW9kdWxlTmFtZVBsdXNFeHQubGFzdEluZGV4T2YoJy4nKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBleHQgPSBudWxsOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXgg
IT09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ID0gbW9kdWxlTmFtZVBs
dXNFeHQuc3Vic3RyaW5nKGluZGV4LCBtb2R1bGVOYW1lUGx1c0V4dC5sZW5ndGgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZU5hbWVQbHVzRXh0ID0gbW9kdWxlTmFtZVBsdXNF
eHQuc3Vic3RyaW5nKDAsIGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQubmFtZVRvVXJsKG5vcm1hbGl6ZSht
b2R1bGVOYW1lUGx1c0V4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlbE1hcCAmJiByZWxNYXAuaWQsIHRydWUpLCBleHQpOworICAgICAgICAgICAg
ICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgICAgIGRlZmluZWQ6IGZ1bmN0aW9uIChpZCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc1Byb3AoZGVmaW5lZCwgbWFrZU1v
ZHVsZU1hcChpZCwgcmVsTWFwLCBmYWxzZSwgdHJ1ZSkuaWQpOworICAgICAgICAgICAgICAgICAg
ICB9LAorCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZDogZnVuY3Rpb24gKGlkKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZCA9IG1ha2VNb2R1bGVNYXAoaWQsIHJlbE1hcCwgZmFs
c2UsIHRydWUpLmlkOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc1Byb3AoZGVm
aW5lZCwgaWQpIHx8IGhhc1Byb3AocmVnaXN0cnksIGlkKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgLy9Pbmx5IGFsbG93IHVu
ZGVmIG9uIHRvcCBsZXZlbCByZXF1aXJlIGNhbGxzCisgICAgICAgICAgICAgICAgaWYgKCFyZWxN
YXApIHsKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxSZXF1aXJlLnVuZGVmID0gZnVuY3Rpb24g
KGlkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvL0JpbmQgYW55IHdhaXRpbmcgZGVmaW5l
KCkgY2FsbHMgdG8gdGhpcyBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgLy9maXgg
Zm9yICM0MDgKKyAgICAgICAgICAgICAgICAgICAgICAgIHRha2VHbG9iYWxRdWV1ZSgpOworCisg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFwID0gbWFrZU1vZHVsZU1hcChpZCwgcmVsTWFw
LCB0cnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2QgPSBnZXRPd24ocmVnaXN0
cnksIGlkKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGRlZmluZWRbaWRdOwor
ICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHVybEZldGNoZWRbbWFwLnVybF07CisgICAg
ICAgICAgICAgICAgICAgICAgICBkZWxldGUgdW5kZWZFdmVudHNbaWRdOworCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAobW9kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9I
b2xkIG9uIHRvIGxpc3RlbmVycyBpbiBjYXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vbW9kdWxlIHdpbGwgYmUgYXR0ZW1wdGVkIHRvIGJlIHJlbG9hZGVkCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy91c2luZyBhIGRpZmZlcmVudCBjb25maWcuCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG1vZC5ldmVudHMuZGVmaW5lZCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bmRlZkV2ZW50c1tpZF0gPSBtb2QuZXZlbnRzOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNs
ZWFuUmVnaXN0cnkoaWQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB9OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBs
b2NhbFJlcXVpcmU7CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAvKioKKyAgICAgICAg
ICAgICAqIENhbGxlZCB0byBlbmFibGUgYSBtb2R1bGUgaWYgaXQgaXMgc3RpbGwgaW4gdGhlIHJl
Z2lzdHJ5CisgICAgICAgICAgICAgKiBhd2FpdGluZyBlbmFibGVtZW50LiBwYXJlbnQgbW9kdWxl
IGlzIHBhc3NlZCBpbiBmb3IgY29udGV4dCwKKyAgICAgICAgICAgICAqIHVzZWQgYnkgdGhlIG9w
dGltaXplci4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgZW5hYmxlOiBmdW5jdGlvbiAo
ZGVwTWFwLCBwYXJlbnQpIHsKKyAgICAgICAgICAgICAgICB2YXIgbW9kID0gZ2V0T3duKHJlZ2lz
dHJ5LCBkZXBNYXAuaWQpOworICAgICAgICAgICAgICAgIGlmIChtb2QpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZ2V0TW9kdWxlKGRlcE1hcCkuZW5hYmxlKCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBJbnRlcm5h
bCBtZXRob2QgdXNlZCBieSBlbnZpcm9ubWVudCBhZGFwdGVycyB0byBjb21wbGV0ZSBhIGxvYWQg
ZXZlbnQuCisgICAgICAgICAgICAgKiBBIGxvYWQgZXZlbnQgY291bGQgYmUgYSBzY3JpcHQgbG9h
ZCBvciBqdXN0IGEgbG9hZCBwYXNzIGZyb20gYSBzeW5jaHJvbm91cworICAgICAgICAgICAgICog
bG9hZCBjYWxsLgorICAgICAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG1vZHVsZU5hbWUgdGhl
IG5hbWUgb2YgdGhlIG1vZHVsZSB0byBwb3RlbnRpYWxseSBjb21wbGV0ZS4KKyAgICAgICAgICAg
ICAqLworICAgICAgICAgICAgY29tcGxldGVMb2FkOiBmdW5jdGlvbiAobW9kdWxlTmFtZSkgewor
ICAgICAgICAgICAgICAgIHZhciBmb3VuZCwgYXJncywgbW9kLAorICAgICAgICAgICAgICAgICAg
ICBzaGltID0gZ2V0T3duKGNvbmZpZy5zaGltLCBtb2R1bGVOYW1lKSB8fCB7fSwKKyAgICAgICAg
ICAgICAgICAgICAgc2hFeHBvcnRzID0gc2hpbS5leHBvcnRzOworCisgICAgICAgICAgICAgICAg
dGFrZUdsb2JhbFF1ZXVlKCk7CisKKyAgICAgICAgICAgICAgICB3aGlsZSAoZGVmUXVldWUubGVu
Z3RoKSB7CisgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBkZWZRdWV1ZS5zaGlmdCgpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoYXJnc1swXSA9PT0gbnVsbCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgYXJnc1swXSA9IG1vZHVsZU5hbWU7CisgICAgICAgICAgICAgICAgICAgICAgICAv
L0lmIGFscmVhZHkgZm91bmQgYW4gYW5vbnltb3VzIG1vZHVsZSBhbmQgYm91bmQgaXQKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vdG8gdGhpcyBuYW1lLCB0aGVuIHRoaXMgaXMgc29tZSBvdGhl
ciBhbm9uIG1vZHVsZQorICAgICAgICAgICAgICAgICAgICAgICAgLy93YWl0aW5nIGZvciBpdHMg
Y29tcGxldGVMb2FkIHRvIGZpcmUuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChhcmdzWzBdID09PSBtb2R1bGVOYW1lKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAvL0ZvdW5kIG1hdGNoaW5nIGRlZmluZSBjYWxsIGZvciB0aGlzIHNj
cmlwdCEKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGNhbGxHZXRNb2R1bGUoYXJncyk7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy9EbyB0aGlzIGFmdGVyIHRoZSBj
eWNsZSBvZiBjYWxsR2V0TW9kdWxlIGluIGNhc2UgdGhlIHJlc3VsdAorICAgICAgICAgICAgICAg
IC8vb2YgdGhvc2UgY2FsbHMvaW5pdCBjYWxscyBjaGFuZ2VzIHRoZSByZWdpc3RyeS4KKyAgICAg
ICAgICAgICAgICBtb2QgPSBnZXRPd24ocmVnaXN0cnksIG1vZHVsZU5hbWUpOworCisgICAgICAg
ICAgICAgICAgaWYgKCFmb3VuZCAmJiAhaGFzUHJvcChkZWZpbmVkLCBtb2R1bGVOYW1lKSAmJiBt
b2QgJiYgIW1vZC5pbml0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5lbmZv
cmNlRGVmaW5lICYmICghc2hFeHBvcnRzIHx8ICFnZXRHbG9iYWwoc2hFeHBvcnRzKSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNQYXRoRmFsbGJhY2sobW9kdWxlTmFtZSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvbkVycm9y
KG1ha2VFcnJvcignbm9kZWZpbmUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ05vIGRlZmluZSBjYWxsIGZvciAnICsgbW9kdWxlTmFtZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9kdWxlTmFtZV0pKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vQSBzY3JpcHQgdGhhdCBkb2VzIG5vdCBjYWxsIGRlZmluZSgpLCBz
byBqdXN0IHNpbXVsYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAvL3RoZSBjYWxsIGZvciBp
dC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxHZXRNb2R1bGUoW21vZHVsZU5hbWUsIChz
aGltLmRlcHMgfHwgW10pLCBzaGltLmV4cG9ydHNGbl0pOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgY2hlY2tMb2FkZWQoKTsKKyAg
ICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICogQ29udmVydHMg
YSBtb2R1bGUgbmFtZSB0byBhIGZpbGUgcGF0aC4gU3VwcG9ydHMgY2FzZXMgd2hlcmUKKyAgICAg
ICAgICAgICAqIG1vZHVsZU5hbWUgbWF5IGFjdHVhbGx5IGJlIGp1c3QgYW4gVVJMLgorICAgICAg
ICAgICAgICogTm90ZSB0aGF0IGl0ICoqZG9lcyBub3QqKiBjYWxsIG5vcm1hbGl6ZSBvbiB0aGUg
bW9kdWxlTmFtZSwKKyAgICAgICAgICAgICAqIGl0IGlzIGFzc3VtZWQgdG8gaGF2ZSBhbHJlYWR5
IGJlZW4gbm9ybWFsaXplZC4gVGhpcyBpcyBhbgorICAgICAgICAgICAgICogaW50ZXJuYWwgQVBJ
LCBub3QgYSBwdWJsaWMgb25lLiBVc2UgdG9VcmwgZm9yIHRoZSBwdWJsaWMgQVBJLgorICAgICAg
ICAgICAgICovCisgICAgICAgICAgICBuYW1lVG9Vcmw6IGZ1bmN0aW9uIChtb2R1bGVOYW1lLCBl
eHQpIHsKKyAgICAgICAgICAgICAgICB2YXIgcGF0aHMsIHBrZ3MsIHBrZywgcGtnUGF0aCwgc3lt
cywgaSwgcGFyZW50TW9kdWxlLCB1cmwsCisgICAgICAgICAgICAgICAgICAgIHBhcmVudFBhdGg7
CisKKyAgICAgICAgICAgICAgICAvL0lmIGEgY29sb24gaXMgaW4gdGhlIFVSTCwgaXQgaW5kaWNh
dGVzIGEgcHJvdG9jb2wgaXMgdXNlZCBhbmQgaXQgaXMganVzdAorICAgICAgICAgICAgICAgIC8v
YW4gVVJMIHRvIGEgZmlsZSwgb3IgaWYgaXQgc3RhcnRzIHdpdGggYSBzbGFzaCwgY29udGFpbnMg
YSBxdWVyeSBhcmcgKGkuZS4gPykKKyAgICAgICAgICAgICAgICAvL29yIGVuZHMgd2l0aCAuanMs
IHRoZW4gYXNzdW1lIHRoZSB1c2VyIG1lYW50IHRvIHVzZSBhbiB1cmwgYW5kIG5vdCBhIG1vZHVs
ZSBpZC4KKyAgICAgICAgICAgICAgICAvL1RoZSBzbGFzaCBpcyBpbXBvcnRhbnQgZm9yIHByb3Rv
Y29sLWxlc3MgVVJMcyBhcyB3ZWxsIGFzIGZ1bGwgcGF0aHMuCisgICAgICAgICAgICAgICAgaWYg
KHJlcS5qc0V4dFJlZ0V4cC50ZXN0KG1vZHVsZU5hbWUpKSB7CisgICAgICAgICAgICAgICAgICAg
IC8vSnVzdCBhIHBsYWluIHBhdGgsIG5vdCBtb2R1bGUgbmFtZSBsb29rdXAsIHNvIGp1c3QgcmV0
dXJuIGl0LgorICAgICAgICAgICAgICAgICAgICAvL0FkZCBleHRlbnNpb24gaWYgaXQgaXMgaW5j
bHVkZWQuIFRoaXMgaXMgYSBiaXQgd29ua3ksIG9ubHkgbm9uLS5qcyB0aGluZ3MgcGFzcworICAg
ICAgICAgICAgICAgICAgICAvL2FuIGV4dGVuc2lvbiwgdGhpcyBtZXRob2QgcHJvYmFibHkgbmVl
ZHMgdG8gYmUgcmV3b3JrZWQuCisgICAgICAgICAgICAgICAgICAgIHVybCA9IG1vZHVsZU5hbWUg
KyAoZXh0IHx8ICcnKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAvL0EgbW9kdWxlIHRoYXQgbmVlZHMgdG8gYmUgY29udmVydGVkIHRvIGEgcGF0aC4KKyAg
ICAgICAgICAgICAgICAgICAgcGF0aHMgPSBjb25maWcucGF0aHM7CisgICAgICAgICAgICAgICAg
ICAgIHBrZ3MgPSBjb25maWcucGtnczsKKworICAgICAgICAgICAgICAgICAgICBzeW1zID0gbW9k
dWxlTmFtZS5zcGxpdCgnLycpOworICAgICAgICAgICAgICAgICAgICAvL0ZvciBlYWNoIG1vZHVs
ZSBuYW1lIHNlZ21lbnQsIHNlZSBpZiB0aGVyZSBpcyBhIHBhdGgKKyAgICAgICAgICAgICAgICAg
ICAgLy9yZWdpc3RlcmVkIGZvciBpdC4gU3RhcnQgd2l0aCBtb3N0IHNwZWNpZmljIG5hbWUKKyAg
ICAgICAgICAgICAgICAgICAgLy9hbmQgd29yayB1cCBmcm9tIGl0LgorICAgICAgICAgICAgICAg
ICAgICBmb3IgKGkgPSBzeW1zLmxlbmd0aDsgaSA+IDA7IGkgLT0gMSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyZW50TW9kdWxlID0gc3ltcy5zbGljZSgwLCBpKS5qb2luKCcvJyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBwa2cgPSBnZXRPd24ocGtncywgcGFyZW50TW9kdWxlKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFBhdGggPSBnZXRPd24ocGF0aHMsIHBhcmVu
dE1vZHVsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50UGF0aCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vSWYgYW4gYXJyYXksIGl0IG1lYW5zIHRoZXJlIGFy
ZSBhIGZldyBjaG9pY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vQ2hvb3NlIHRo
ZSBvbmUgdGhhdCBpcyBkZXNpcmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlz
QXJyYXkocGFyZW50UGF0aCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFy
ZW50UGF0aCA9IHBhcmVudFBhdGhbMF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bXMuc3BsaWNlKDAsIGksIHBhcmVudFBhdGgp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmIChwa2cpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0lm
IG1vZHVsZSBuYW1lIGlzIGp1c3QgdGhlIHBhY2thZ2UgbmFtZSwgdGhlbiBsb29raW5nCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy9mb3IgdGhlIG1haW4gbW9kdWxlLgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChtb2R1bGVOYW1lID09PSBwa2cubmFtZSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwa2dQYXRoID0gcGtnLmxvY2F0aW9uICsgJy8nICsg
cGtnLm1haW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGtnUGF0aCA9IHBrZy5sb2NhdGlvbjsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltcy5z
cGxpY2UoMCwgaSwgcGtnUGF0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICAvL0pvaW4gdGhlIHBhdGggcGFydHMgdG9nZXRoZXIsIHRoZW4gZmln
dXJlIG91dCBpZiBiYXNlVXJsIGlzIG5lZWRlZC4KKyAgICAgICAgICAgICAgICAgICAgdXJsID0g
c3ltcy5qb2luKCcvJyk7CisgICAgICAgICAgICAgICAgICAgIHVybCArPSAoZXh0IHx8ICgvXD8v
LnRlc3QodXJsKSA/ICcnIDogJy5qcycpKTsKKyAgICAgICAgICAgICAgICAgICAgdXJsID0gKHVy
bC5jaGFyQXQoMCkgPT09ICcvJyB8fCB1cmwubWF0Y2goL15bXHdcK1wuXC1dKzovKSA/ICcnIDog
Y29uZmlnLmJhc2VVcmwpICsgdXJsOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIHJldHVybiBjb25maWcudXJsQXJncyA/IHVybCArCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKCh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykg
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcudXJsQXJn
cykgOiB1cmw7CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAvL0RlbGVnYXRlcyB0byBy
ZXEubG9hZC4gQnJva2VuIG91dCBhcyBhIHNlcGFyYXRlIGZ1bmN0aW9uIHRvCisgICAgICAgICAg
ICAvL2FsbG93IG92ZXJyaWRpbmcgaW4gdGhlIG9wdGltaXplci4KKyAgICAgICAgICAgIGxvYWQ6
IGZ1bmN0aW9uIChpZCwgdXJsKSB7CisgICAgICAgICAgICAgICAgcmVxLmxvYWQoY29udGV4dCwg
aWQsIHVybCk7CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAg
ICAqIEV4ZWN1dGVzIGEgbW9kdWxlIGNhbGxhY2sgZnVuY3Rpb24uIEJyb2tlbiBvdXQgYXMgYSBz
ZXBhcmF0ZSBmdW5jdGlvbgorICAgICAgICAgICAgICogc29sZWx5IHRvIGFsbG93IHRoZSBidWls
ZCBzeXN0ZW0gdG8gc2VxdWVuY2UgdGhlIGZpbGVzIGluIHRoZSBidWlsdAorICAgICAgICAgICAg
ICogbGF5ZXIgaW4gdGhlIHJpZ2h0IHNlcXVlbmNlLgorICAgICAgICAgICAgICoKKyAgICAgICAg
ICAgICAqIEBwcml2YXRlCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGV4ZWNDYjogZnVu
Y3Rpb24gKG5hbWUsIGNhbGxiYWNrLCBhcmdzLCBleHBvcnRzKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGNhbGxiYWNrLmFwcGx5KGV4cG9ydHMsIGFyZ3MpOworICAgICAgICAgICAgfSwKKwor
ICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBjYWxsYmFjayBmb3Igc2NyaXB0IGxvYWRz
LCB1c2VkIHRvIGNoZWNrIHN0YXR1cyBvZiBsb2FkaW5nLgorICAgICAgICAgICAgICoKKyAgICAg
ICAgICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2dCB0aGUgZXZlbnQgZnJvbSB0aGUgYnJvd3NlciBm
b3IgdGhlIHNjcmlwdAorICAgICAgICAgICAgICogdGhhdCB3YXMgbG9hZGVkLgorICAgICAgICAg
ICAgICovCisgICAgICAgICAgICBvblNjcmlwdExvYWQ6IGZ1bmN0aW9uIChldnQpIHsKKyAgICAg
ICAgICAgICAgICAvL1VzaW5nIGN1cnJlbnRUYXJnZXQgaW5zdGVhZCBvZiB0YXJnZXQgZm9yIEZp
cmVmb3ggMi4wJ3Mgc2FrZS4gTm90CisgICAgICAgICAgICAgICAgLy9hbGwgb2xkIGJyb3dzZXJz
IHdpbGwgYmUgc3VwcG9ydGVkLCBidXQgdGhpcyBvbmUgd2FzIGVhc3kgZW5vdWdoCisgICAgICAg
ICAgICAgICAgLy90byBzdXBwb3J0IGFuZCBzdGlsbCBtYWtlcyBzZW5zZS4KKyAgICAgICAgICAg
ICAgICBpZiAoZXZ0LnR5cGUgPT09ICdsb2FkJyB8fAorICAgICAgICAgICAgICAgICAgICAgICAg
KHJlYWR5UmVnRXhwLnRlc3QoKGV2dC5jdXJyZW50VGFyZ2V0IHx8IGV2dC5zcmNFbGVtZW50KS5y
ZWFkeVN0YXRlKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy9SZXNldCBpbnRlcmFjdGl2ZSBz
Y3JpcHQgc28gYSBzY3JpcHQgbm9kZSBpcyBub3QgaGVsZCBvbnRvIGZvcgorICAgICAgICAgICAg
ICAgICAgICAvL3RvIGxvbmcuCisgICAgICAgICAgICAgICAgICAgIGludGVyYWN0aXZlU2NyaXB0
ID0gbnVsbDsKKworICAgICAgICAgICAgICAgICAgICAvL1B1bGwgb3V0IHRoZSBuYW1lIG9mIHRo
ZSBtb2R1bGUgYW5kIHRoZSBjb250ZXh0LgorICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9
IGdldFNjcmlwdERhdGEoZXZ0KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jb21wbGV0
ZUxvYWQoZGF0YS5pZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKworICAg
ICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBDYWxsYmFjayBmb3Igc2NyaXB0IGVycm9ycy4K
KyAgICAgICAgICAgICAqLworICAgICAgICAgICAgb25TY3JpcHRFcnJvcjogZnVuY3Rpb24gKGV2
dCkgeworICAgICAgICAgICAgICAgIHZhciBkYXRhID0gZ2V0U2NyaXB0RGF0YShldnQpOworICAg
ICAgICAgICAgICAgIGlmICghaGFzUGF0aEZhbGxiYWNrKGRhdGEuaWQpKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBvbkVycm9yKG1ha2VFcnJvcignc2NyaXB0ZXJyb3InLCAnU2NyaXB0
IGVycm9yJywgZXZ0LCBbZGF0YS5pZF0pKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH07CisKKyAgICAgICAgY29udGV4dC5yZXF1aXJlID0gY29udGV4dC5tYWtl
UmVxdWlyZSgpOworICAgICAgICByZXR1cm4gY29udGV4dDsKKyAgICB9CisKKyAgICAvKioKKyAg
ICAgKiBNYWluIGVudHJ5IHBvaW50LgorICAgICAqCisgICAgICogSWYgdGhlIG9ubHkgYXJndW1l
bnQgdG8gcmVxdWlyZSBpcyBhIHN0cmluZywgdGhlbiB0aGUgbW9kdWxlIHRoYXQKKyAgICAgKiBp
cyByZXByZXNlbnRlZCBieSB0aGF0IHN0cmluZyBpcyBmZXRjaGVkIGZvciB0aGUgYXBwcm9wcmlh
dGUgY29udGV4dC4KKyAgICAgKgorICAgICAqIElmIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBhbiBh
cnJheSwgdGhlbiBpdCB3aWxsIGJlIHRyZWF0ZWQgYXMgYW4gYXJyYXkKKyAgICAgKiBvZiBkZXBl
bmRlbmN5IHN0cmluZyBuYW1lcyB0byBmZXRjaC4gQW4gb3B0aW9uYWwgZnVuY3Rpb24gY2FsbGJh
Y2sgY2FuCisgICAgICogYmUgc3BlY2lmaWVkIHRvIGV4ZWN1dGUgd2hlbiBhbGwgb2YgdGhvc2Ug
ZGVwZW5kZW5jaWVzIGFyZSBhdmFpbGFibGUuCisgICAgICoKKyAgICAgKiBNYWtlIGEgbG9jYWwg
cmVxIHZhcmlhYmxlIHRvIGhlbHAgQ2FqYSBjb21wbGlhbmNlIChpdCBhc3N1bWVzIHRoaW5ncwor
ICAgICAqIG9uIGEgcmVxdWlyZSB0aGF0IGFyZSBub3Qgc3RhbmRhcmRpemVkKSwgYW5kIHRvIGdp
dmUgYSBzaG9ydAorICAgICAqIG5hbWUgZm9yIG1pbmlmaWNhdGlvbi9sb2NhbCBzY29wZSB1c2Uu
CisgICAgICovCisgICAgcmVxID0gcmVxdWlyZWpzID0gZnVuY3Rpb24gKGRlcHMsIGNhbGxiYWNr
LCBlcnJiYWNrLCBvcHRpb25hbCkgeworCisgICAgICAgIC8vRmluZCB0aGUgcmlnaHQgY29udGV4
dCwgdXNlIGRlZmF1bHQKKyAgICAgICAgdmFyIGNvbnRleHQsIGNvbmZpZywKKyAgICAgICAgICAg
IGNvbnRleHROYW1lID0gZGVmQ29udGV4dE5hbWU7CisKKyAgICAgICAgLy8gRGV0ZXJtaW5lIGlm
IGhhdmUgY29uZmlnIG9iamVjdCBpbiB0aGUgY2FsbC4KKyAgICAgICAgaWYgKCFpc0FycmF5KGRl
cHMpICYmIHR5cGVvZiBkZXBzICE9PSAnc3RyaW5nJykgeworICAgICAgICAgICAgLy8gZGVwcyBp
cyBhIGNvbmZpZyBvYmplY3QKKyAgICAgICAgICAgIGNvbmZpZyA9IGRlcHM7CisgICAgICAgICAg
ICBpZiAoaXNBcnJheShjYWxsYmFjaykpIHsKKyAgICAgICAgICAgICAgICAvLyBBZGp1c3QgYXJn
cyBpZiB0aGVyZSBhcmUgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgICAgZGVwcyA9IGNhbGxi
YWNrOworICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZXJyYmFjazsKKyAgICAgICAgICAgICAg
ICBlcnJiYWNrID0gb3B0aW9uYWw7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIGRlcHMgPSBbXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChj
b25maWcgJiYgY29uZmlnLmNvbnRleHQpIHsKKyAgICAgICAgICAgIGNvbnRleHROYW1lID0gY29u
ZmlnLmNvbnRleHQ7CisgICAgICAgIH0KKworICAgICAgICBjb250ZXh0ID0gZ2V0T3duKGNvbnRl
eHRzLCBjb250ZXh0TmFtZSk7CisgICAgICAgIGlmICghY29udGV4dCkgeworICAgICAgICAgICAg
Y29udGV4dCA9IGNvbnRleHRzW2NvbnRleHROYW1lXSA9IHJlcS5zLm5ld0NvbnRleHQoY29udGV4
dE5hbWUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNvbmZpZykgeworICAgICAgICAgICAg
Y29udGV4dC5jb25maWd1cmUoY29uZmlnKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBj
b250ZXh0LnJlcXVpcmUoZGVwcywgY2FsbGJhY2ssIGVycmJhY2spOworICAgIH07CisKKyAgICAv
KioKKyAgICAgKiBTdXBwb3J0IHJlcXVpcmUuY29uZmlnKCkgdG8gbWFrZSBpdCBlYXNpZXIgdG8g
Y29vcGVyYXRlIHdpdGggb3RoZXIKKyAgICAgKiBBTUQgbG9hZGVycyBvbiBnbG9iYWxseSBhZ3Jl
ZWQgbmFtZXMuCisgICAgICovCisgICAgcmVxLmNvbmZpZyA9IGZ1bmN0aW9uIChjb25maWcpIHsK
KyAgICAgICAgcmV0dXJuIHJlcShjb25maWcpOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBF
eGVjdXRlIHNvbWV0aGluZyBhZnRlciB0aGUgY3VycmVudCB0aWNrCisgICAgICogb2YgdGhlIGV2
ZW50IGxvb3AuIE92ZXJyaWRlIGZvciBvdGhlciBlbnZzCisgICAgICogdGhhdCBoYXZlIGEgYmV0
dGVyIHNvbHV0aW9uIHRoYW4gc2V0VGltZW91dC4KKyAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0g
Zm4gZnVuY3Rpb24gdG8gZXhlY3V0ZSBsYXRlci4KKyAgICAgKi8KKyAgICByZXEubmV4dFRpY2sg
PSB0eXBlb2Ygc2V0VGltZW91dCAhPT0gJ3VuZGVmaW5lZCcgPyBmdW5jdGlvbiAoZm4pIHsKKyAg
ICAgICAgc2V0VGltZW91dChmbiwgNCk7CisgICAgfSA6IGZ1bmN0aW9uIChmbikgeyBmbigpOyB9
OworCisgICAgLyoqCisgICAgICogRXhwb3J0IHJlcXVpcmUgYXMgYSBnbG9iYWwsIGJ1dCBvbmx5
IGlmIGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QuCisgICAgICovCisgICAgaWYgKCFyZXF1aXJl
KSB7CisgICAgICAgIHJlcXVpcmUgPSByZXE7CisgICAgfQorCisgICAgcmVxLnZlcnNpb24gPSB2
ZXJzaW9uOworCisgICAgLy9Vc2VkIHRvIGZpbHRlciBvdXQgZGVwZW5kZW5jaWVzIHRoYXQgYXJl
IGFscmVhZHkgcGF0aHMuCisgICAgcmVxLmpzRXh0UmVnRXhwID0gL15cL3w6fFw/fFwuanMkLzsK
KyAgICByZXEuaXNCcm93c2VyID0gaXNCcm93c2VyOworICAgIHMgPSByZXEucyA9IHsKKyAgICAg
ICAgY29udGV4dHM6IGNvbnRleHRzLAorICAgICAgICBuZXdDb250ZXh0OiBuZXdDb250ZXh0Cisg
ICAgfTsKKworICAgIC8vQ3JlYXRlIGRlZmF1bHQgY29udGV4dC4KKyAgICByZXEoe30pOworCisg
ICAgLy9FeHBvcnRzIHNvbWUgY29udGV4dC1zZW5zaXRpdmUgbWV0aG9kcyBvbiBnbG9iYWwgcmVx
dWlyZS4KKyAgICBlYWNoKFsKKyAgICAgICAgJ3RvVXJsJywKKyAgICAgICAgJ3VuZGVmJywKKyAg
ICAgICAgJ2RlZmluZWQnLAorICAgICAgICAnc3BlY2lmaWVkJworICAgIF0sIGZ1bmN0aW9uIChw
cm9wKSB7CisgICAgICAgIC8vUmVmZXJlbmNlIGZyb20gY29udGV4dHMgaW5zdGVhZCBvZiBlYXJs
eSBiaW5kaW5nIHRvIGRlZmF1bHQgY29udGV4dCwKKyAgICAgICAgLy9zbyB0aGF0IGR1cmluZyBi
dWlsZHMsIHRoZSBsYXRlc3QgaW5zdGFuY2Ugb2YgdGhlIGRlZmF1bHQgY29udGV4dAorICAgICAg
ICAvL3dpdGggaXRzIGNvbmZpZyBnZXRzIHVzZWQuCisgICAgICAgIHJlcVtwcm9wXSA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBjdHggPSBjb250ZXh0c1tkZWZDb250ZXh0TmFtZV07
CisgICAgICAgICAgICByZXR1cm4gY3R4LnJlcXVpcmVbcHJvcF0uYXBwbHkoY3R4LCBhcmd1bWVu
dHMpOworICAgICAgICB9OworICAgIH0pOworCisgICAgaWYgKGlzQnJvd3NlcikgeworICAgICAg
ICBoZWFkID0gcy5oZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVsw
XTsKKyAgICAgICAgLy9JZiBCQVNFIHRhZyBpcyBpbiBwbGF5LCB1c2luZyBhcHBlbmRDaGlsZCBp
cyBhIHByb2JsZW0gZm9yIElFNi4KKyAgICAgICAgLy9XaGVuIHRoYXQgYnJvd3NlciBkaWVzLCB0
aGlzIGNhbiBiZSByZW1vdmVkLiBEZXRhaWxzIGluIHRoaXMgalF1ZXJ5IGJ1ZzoKKyAgICAgICAg
Ly9odHRwOi8vZGV2LmpxdWVyeS5jb20vdGlja2V0LzI3MDkKKyAgICAgICAgYmFzZUVsZW1lbnQg
PSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYmFzZScpWzBdOworICAgICAgICBpZiAo
YmFzZUVsZW1lbnQpIHsKKyAgICAgICAgICAgIGhlYWQgPSBzLmhlYWQgPSBiYXNlRWxlbWVudC5w
YXJlbnROb2RlOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQW55IGVycm9y
cyB0aGF0IHJlcXVpcmUgZXhwbGljaXRseSBnZW5lcmF0ZXMgd2lsbCBiZSBwYXNzZWQgdG8gdGhp
cworICAgICAqIGZ1bmN0aW9uLiBJbnRlcmNlcHQvb3ZlcnJpZGUgaXQgaWYgeW91IHdhbnQgY3Vz
dG9tIGVycm9yIGhhbmRsaW5nLgorICAgICAqIEBwYXJhbSB7RXJyb3J9IGVyciB0aGUgZXJyb3Ig
b2JqZWN0LgorICAgICAqLworICAgIHJlcS5vbkVycm9yID0gZnVuY3Rpb24gKGVycikgeworICAg
ICAgICB0aHJvdyBlcnI7CisgICAgfTsKKworICAgIC8qKgorICAgICAqIERvZXMgdGhlIHJlcXVl
c3QgdG8gbG9hZCBhIG1vZHVsZSBmb3IgdGhlIGJyb3dzZXIgY2FzZS4KKyAgICAgKiBNYWtlIHRo
aXMgYSBzZXBhcmF0ZSBmdW5jdGlvbiB0byBhbGxvdyBvdGhlciBlbnZpcm9ubWVudHMKKyAgICAg
KiB0byBvdmVycmlkZSBpdC4KKyAgICAgKgorICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0
IHRoZSByZXF1aXJlIGNvbnRleHQgdG8gZmluZCBzdGF0ZS4KKyAgICAgKiBAcGFyYW0ge1N0cmlu
Z30gbW9kdWxlTmFtZSB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlLgorICAgICAqIEBwYXJhbSB7T2Jq
ZWN0fSB1cmwgdGhlIFVSTCB0byB0aGUgbW9kdWxlLgorICAgICAqLworICAgIHJlcS5sb2FkID0g
ZnVuY3Rpb24gKGNvbnRleHQsIG1vZHVsZU5hbWUsIHVybCkgeworICAgICAgICB2YXIgY29uZmln
ID0gKGNvbnRleHQgJiYgY29udGV4dC5jb25maWcpIHx8IHt9LAorICAgICAgICAgICAgbm9kZTsK
KyAgICAgICAgaWYgKGlzQnJvd3NlcikgeworICAgICAgICAgICAgLy9JbiB0aGUgYnJvd3NlciBz
byB1c2UgYSBzY3JpcHQgdGFnCisgICAgICAgICAgICBub2RlID0gY29uZmlnLnhodG1sID8KKyAg
ICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3Lncz
Lm9yZy8xOTk5L3hodG1sJywgJ2h0bWw6c2NyaXB0JykgOgorICAgICAgICAgICAgICAgICAgICBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKKyAgICAgICAgICAgIG5vZGUudHlwZSA9
IGNvbmZpZy5zY3JpcHRUeXBlIHx8ICd0ZXh0L2phdmFzY3JpcHQnOworICAgICAgICAgICAgbm9k
ZS5jaGFyc2V0ID0gJ3V0Zi04JzsKKyAgICAgICAgICAgIG5vZGUuYXN5bmMgPSB0cnVlOworCisg
ICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlY29udGV4dCcsIGNvbnRl
eHQuY29udGV4dE5hbWUpOworICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtcmVx
dWlyZW1vZHVsZScsIG1vZHVsZU5hbWUpOworCisgICAgICAgICAgICAvL1NldCB1cCBsb2FkIGxp
c3RlbmVyLiBUZXN0IGF0dGFjaEV2ZW50IGZpcnN0IGJlY2F1c2UgSUU5IGhhcworICAgICAgICAg
ICAgLy9hIHN1YnRsZSBpc3N1ZSBpbiBpdHMgYWRkRXZlbnRMaXN0ZW5lciBhbmQgc2NyaXB0IG9u
bG9hZCBmaXJpbmdzCisgICAgICAgICAgICAvL3RoYXQgZG8gbm90IG1hdGNoIHRoZSBiZWhhdmlv
ciBvZiBhbGwgb3RoZXIgYnJvd3NlcnMgd2l0aAorICAgICAgICAgICAgLy9hZGRFdmVudExpc3Rl
bmVyIHN1cHBvcnQsIHdoaWNoIGZpcmUgdGhlIG9ubG9hZCBldmVudCBmb3IgYQorICAgICAgICAg
ICAgLy9zY3JpcHQgcmlnaHQgYWZ0ZXIgdGhlIHNjcmlwdCBleGVjdXRpb24uIFNlZToKKyAgICAg
ICAgICAgIC8vaHR0cHM6Ly9jb25uZWN0Lm1pY3Jvc29mdC5jb20vSUUvZmVlZGJhY2svZGV0YWls
cy82NDgwNTcvc2NyaXB0LW9ubG9hZC1ldmVudC1pcy1ub3QtZmlyZWQtaW1tZWRpYXRlbHktYWZ0
ZXItc2NyaXB0LWV4ZWN1dGlvbgorICAgICAgICAgICAgLy9VTkZPUlRVTkFURUxZIE9wZXJhIGlt
cGxlbWVudHMgYXR0YWNoRXZlbnQgYnV0IGRvZXMgbm90IGZvbGxvdyB0aGUgc2NyaXB0CisgICAg
ICAgICAgICAvL3NjcmlwdCBleGVjdXRpb24gbW9kZS4KKyAgICAgICAgICAgIGlmIChub2RlLmF0
dGFjaEV2ZW50ICYmCisgICAgICAgICAgICAgICAgICAgIC8vQ2hlY2sgaWYgbm9kZS5hdHRhY2hF
dmVudCBpcyBhcnRpZmljaWFsbHkgYWRkZWQgYnkgY3VzdG9tIHNjcmlwdCBvcgorICAgICAgICAg
ICAgICAgICAgICAvL25hdGl2ZWx5IHN1cHBvcnRlZCBieSBicm93c2VyCisgICAgICAgICAgICAg
ICAgICAgIC8vcmVhZCBodHRwczovL2dpdGh1Yi5jb20vanJidXJrZS9yZXF1aXJlanMvaXNzdWVz
LzE4NworICAgICAgICAgICAgICAgICAgICAvL2lmIHdlIGNhbiBOT1QgZmluZCBbbmF0aXZlIGNv
ZGVdIHRoZW4gaXQgbXVzdCBOT1QgbmF0aXZlbHkgc3VwcG9ydGVkLgorICAgICAgICAgICAgICAg
ICAgICAvL2luIElFOCwgbm9kZS5hdHRhY2hFdmVudCBkb2VzIG5vdCBoYXZlIHRvU3RyaW5nKCkK
KyAgICAgICAgICAgICAgICAgICAgLy9Ob3RlIHRoZSB0ZXN0IGZvciAiW25hdGl2ZSBjb2RlIiB3
aXRoIG5vIGNsb3NpbmcgYnJhY2UsIHNlZToKKyAgICAgICAgICAgICAgICAgICAgLy9odHRwczov
L2dpdGh1Yi5jb20vanJidXJrZS9yZXF1aXJlanMvaXNzdWVzLzI3MworICAgICAgICAgICAgICAg
ICAgICAhKG5vZGUuYXR0YWNoRXZlbnQudG9TdHJpbmcgJiYgbm9kZS5hdHRhY2hFdmVudC50b1N0
cmluZygpLmluZGV4T2YoJ1tuYXRpdmUgY29kZScpIDwgMCkgJiYKKyAgICAgICAgICAgICAgICAg
ICAgIWlzT3BlcmEpIHsKKyAgICAgICAgICAgICAgICAvL1Byb2JhYmx5IElFLiBJRSAoYXQgbGVh
c3QgNi04KSBkbyBub3QgZmlyZQorICAgICAgICAgICAgICAgIC8vc2NyaXB0IG9ubG9hZCByaWdo
dCBhZnRlciBleGVjdXRpbmcgdGhlIHNjcmlwdCwgc28KKyAgICAgICAgICAgICAgICAvL3dlIGNh
bm5vdCB0aWUgdGhlIGFub255bW91cyBkZWZpbmUgY2FsbCB0byBhIG5hbWUuCisgICAgICAgICAg
ICAgICAgLy9Ib3dldmVyLCBJRSByZXBvcnRzIHRoZSBzY3JpcHQgYXMgYmVpbmcgaW4gJ2ludGVy
YWN0aXZlJworICAgICAgICAgICAgICAgIC8vcmVhZHlTdGF0ZSBhdCB0aGUgdGltZSBvZiB0aGUg
ZGVmaW5lIGNhbGwuCisgICAgICAgICAgICAgICAgdXNlSW50ZXJhY3RpdmUgPSB0cnVlOworCisg
ICAgICAgICAgICAgICAgbm9kZS5hdHRhY2hFdmVudCgnb25yZWFkeXN0YXRlY2hhbmdlJywgY29u
dGV4dC5vblNjcmlwdExvYWQpOworICAgICAgICAgICAgICAgIC8vSXQgd291bGQgYmUgZ3JlYXQg
dG8gYWRkIGFuIGVycm9yIGhhbmRsZXIgaGVyZSB0byBjYXRjaAorICAgICAgICAgICAgICAgIC8v
NDA0cyBpbiBJRTkrLiBIb3dldmVyLCBvbnJlYWR5c3RhdGVjaGFuZ2Ugd2lsbCBmaXJlIGJlZm9y
ZQorICAgICAgICAgICAgICAgIC8vdGhlIGVycm9yIGhhbmRsZXIsIHNvIHRoYXQgZG9lcyBub3Qg
aGVscC4gSWYgYWRkRXZlbkxpc3RlbmVyCisgICAgICAgICAgICAgICAgLy9pcyB1c2VkLCB0aGVu
IElFIHdpbGwgZmlyZSBlcnJvciBiZWZvcmUgbG9hZCwgYnV0IHdlIGNhbm5vdAorICAgICAgICAg
ICAgICAgIC8vdXNlIHRoYXQgcGF0aHdheSBnaXZlbiB0aGUgY29ubmVjdC5taWNyb3NvZnQuY29t
IGlzc3VlCisgICAgICAgICAgICAgICAgLy9tZW50aW9uZWQgYWJvdmUgYWJvdXQgbm90IGRvaW5n
IHRoZSAnc2NyaXB0IGV4ZWN1dGUsCisgICAgICAgICAgICAgICAgLy90aGVuIGZpcmUgdGhlIHNj
cmlwdCBsb2FkIGV2ZW50IGxpc3RlbmVyIGJlZm9yZSBleGVjdXRlCisgICAgICAgICAgICAgICAg
Ly9uZXh0IHNjcmlwdCcgdGhhdCBvdGhlciBicm93c2VycyBkby4KKyAgICAgICAgICAgICAgICAv
L0Jlc3QgaG9wZTogSUUxMCBmaXhlcyB0aGUgaXNzdWVzLAorICAgICAgICAgICAgICAgIC8vYW5k
IHRoZW4gZGVzdHJveXMgYWxsIGluc3RhbGxzIG9mIElFIDYtOS4KKyAgICAgICAgICAgICAgICAv
L25vZGUuYXR0YWNoRXZlbnQoJ29uZXJyb3InLCBjb250ZXh0Lm9uU2NyaXB0RXJyb3IpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIo
J2xvYWQnLCBjb250ZXh0Lm9uU2NyaXB0TG9hZCwgZmFsc2UpOworICAgICAgICAgICAgICAgIG5v
ZGUuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBjb250ZXh0Lm9uU2NyaXB0RXJyb3IsIGZhbHNl
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5vZGUuc3JjID0gdXJsOworCisgICAgICAg
ICAgICAvL0ZvciBzb21lIGNhY2hlIGNhc2VzIGluIElFIDYtOCwgdGhlIHNjcmlwdCBleGVjdXRl
cyBiZWZvcmUgdGhlIGVuZAorICAgICAgICAgICAgLy9vZiB0aGUgYXBwZW5kQ2hpbGQgZXhlY3V0
aW9uLCBzbyB0byB0aWUgYW4gYW5vbnltb3VzIGRlZmluZQorICAgICAgICAgICAgLy9jYWxsIHRv
IHRoZSBtb2R1bGUgbmFtZSAod2hpY2ggaXMgc3RvcmVkIG9uIHRoZSBub2RlKSwgaG9sZCBvbgor
ICAgICAgICAgICAgLy90byBhIHJlZmVyZW5jZSB0byB0aGlzIG5vZGUsIGJ1dCBjbGVhciBhZnRl
ciB0aGUgRE9NIGluc2VydGlvbi4KKyAgICAgICAgICAgIGN1cnJlbnRseUFkZGluZ1NjcmlwdCA9
IG5vZGU7CisgICAgICAgICAgICBpZiAoYmFzZUVsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICBo
ZWFkLmluc2VydEJlZm9yZShub2RlLCBiYXNlRWxlbWVudCk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQobm9kZSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBjdXJyZW50bHlBZGRpbmdTY3JpcHQgPSBudWxsOworCisgICAgICAgICAg
ICByZXR1cm4gbm9kZTsKKyAgICAgICAgfSBlbHNlIGlmIChpc1dlYldvcmtlcikgeworICAgICAg
ICAgICAgLy9JbiBhIHdlYiB3b3JrZXIsIHVzZSBpbXBvcnRTY3JpcHRzLiBUaGlzIGlzIG5vdCBh
IHZlcnkKKyAgICAgICAgICAgIC8vZWZmaWNpZW50IHVzZSBvZiBpbXBvcnRTY3JpcHRzLCBpbXBv
cnRTY3JpcHRzIHdpbGwgYmxvY2sgdW50aWwKKyAgICAgICAgICAgIC8vaXRzIHNjcmlwdCBpcyBk
b3dubG9hZGVkIGFuZCBldmFsdWF0ZWQuIEhvd2V2ZXIsIGlmIHdlYiB3b3JrZXJzCisgICAgICAg
ICAgICAvL2FyZSBpbiBwbGF5LCB0aGUgZXhwZWN0YXRpb24gdGhhdCBhIGJ1aWxkIGhhcyBiZWVu
IGRvbmUgc28gdGhhdAorICAgICAgICAgICAgLy9vbmx5IG9uZSBzY3JpcHQgbmVlZHMgdG8gYmUg
bG9hZGVkIGFueXdheS4gVGhpcyBtYXkgbmVlZCB0byBiZQorICAgICAgICAgICAgLy9yZWV2YWx1
YXRlZCBpZiBvdGhlciB1c2UgY2FzZXMgYmVjb21lIGNvbW1vbi4KKyAgICAgICAgICAgIGltcG9y
dFNjcmlwdHModXJsKTsKKworICAgICAgICAgICAgLy9BY2NvdW50IGZvciBhbm9ueW1vdXMgbW9k
dWxlcworICAgICAgICAgICAgY29udGV4dC5jb21wbGV0ZUxvYWQobW9kdWxlTmFtZSk7CisgICAg
ICAgIH0KKyAgICB9OworCisgICAgZnVuY3Rpb24gZ2V0SW50ZXJhY3RpdmVTY3JpcHQoKSB7Cisg
ICAgICAgIGlmIChpbnRlcmFjdGl2ZVNjcmlwdCAmJiBpbnRlcmFjdGl2ZVNjcmlwdC5yZWFkeVN0
YXRlID09PSAnaW50ZXJhY3RpdmUnKSB7CisgICAgICAgICAgICByZXR1cm4gaW50ZXJhY3RpdmVT
Y3JpcHQ7CisgICAgICAgIH0KKworICAgICAgICBlYWNoUmV2ZXJzZShzY3JpcHRzKCksIGZ1bmN0
aW9uIChzY3JpcHQpIHsKKyAgICAgICAgICAgIGlmIChzY3JpcHQucmVhZHlTdGF0ZSA9PT0gJ2lu
dGVyYWN0aXZlJykgeworICAgICAgICAgICAgICAgIHJldHVybiAoaW50ZXJhY3RpdmVTY3JpcHQg
PSBzY3JpcHQpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGlu
dGVyYWN0aXZlU2NyaXB0OworICAgIH0KKworICAgIC8vTG9vayBmb3IgYSBkYXRhLW1haW4gc2Ny
aXB0IGF0dHJpYnV0ZSwgd2hpY2ggY291bGQgYWxzbyBhZGp1c3QgdGhlIGJhc2VVcmwuCisgICAg
aWYgKGlzQnJvd3NlcikgeworICAgICAgICAvL0ZpZ3VyZSBvdXQgYmFzZVVybC4gR2V0IGl0IGZy
b20gdGhlIHNjcmlwdCB0YWcgd2l0aCByZXF1aXJlLmpzIGluIGl0LgorICAgICAgICBlYWNoUmV2
ZXJzZShzY3JpcHRzKCksIGZ1bmN0aW9uIChzY3JpcHQpIHsKKyAgICAgICAgICAgIC8vU2V0IHRo
ZSAnaGVhZCcgd2hlcmUgd2UgY2FuIGFwcGVuZCBjaGlsZHJlbiBieQorICAgICAgICAgICAgLy91
c2luZyB0aGUgc2NyaXB0J3MgcGFyZW50LgorICAgICAgICAgICAgaWYgKCFoZWFkKSB7CisgICAg
ICAgICAgICAgICAgaGVhZCA9IHNjcmlwdC5wYXJlbnROb2RlOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvL0xvb2sgZm9yIGEgZGF0YS1tYWluIGF0dHJpYnV0ZSB0byBzZXQgbWFpbiBz
Y3JpcHQgZm9yIHRoZSBwYWdlCisgICAgICAgICAgICAvL3RvIGxvYWQuIElmIGl0IGlzIHRoZXJl
LCB0aGUgcGF0aCB0byBkYXRhIG1haW4gYmVjb21lcyB0aGUKKyAgICAgICAgICAgIC8vYmFzZVVy
bCwgaWYgaXQgaXMgbm90IGFscmVhZHkgc2V0LgorICAgICAgICAgICAgZGF0YU1haW4gPSBzY3Jp
cHQuZ2V0QXR0cmlidXRlKCdkYXRhLW1haW4nKTsKKyAgICAgICAgICAgIGlmIChkYXRhTWFpbikg
eworICAgICAgICAgICAgICAgIC8vU2V0IGZpbmFsIGJhc2VVcmwgaWYgdGhlcmUgaXMgbm90IGFs
cmVhZHkgYW4gZXhwbGljaXQgb25lLgorICAgICAgICAgICAgICAgIGlmICghY2ZnLmJhc2VVcmwp
IHsKKyAgICAgICAgICAgICAgICAgICAgLy9QdWxsIG9mZiB0aGUgZGlyZWN0b3J5IG9mIGRhdGEt
bWFpbiBmb3IgdXNlIGFzIHRoZQorICAgICAgICAgICAgICAgICAgICAvL2Jhc2VVcmwuCisgICAg
ICAgICAgICAgICAgICAgIHNyYyA9IGRhdGFNYWluLnNwbGl0KCcvJyk7CisgICAgICAgICAgICAg
ICAgICAgIG1haW5TY3JpcHQgPSBzcmMucG9wKCk7CisgICAgICAgICAgICAgICAgICAgIHN1YlBh
dGggPSBzcmMubGVuZ3RoID8gc3JjLmpvaW4oJy8nKSAgKyAnLycgOiAnLi8nOworCisgICAgICAg
ICAgICAgICAgICAgIGNmZy5iYXNlVXJsID0gc3ViUGF0aDsKKyAgICAgICAgICAgICAgICAgICAg
ZGF0YU1haW4gPSBtYWluU2NyaXB0OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIC8vU3RyaXAgb2ZmIGFueSB0cmFpbGluZyAuanMgc2luY2UgZGF0YU1haW4gaXMgbm93Cisg
ICAgICAgICAgICAgICAgLy9saWtlIGEgbW9kdWxlIG5hbWUuCisgICAgICAgICAgICAgICAgZGF0
YU1haW4gPSBkYXRhTWFpbi5yZXBsYWNlKGpzU3VmZml4UmVnRXhwLCAnJyk7CisKKyAgICAgICAg
ICAgICAgICAvL1B1dCB0aGUgZGF0YS1tYWluIHNjcmlwdCBpbiB0aGUgZmlsZXMgdG8gbG9hZC4K
KyAgICAgICAgICAgICAgICBjZmcuZGVwcyA9IGNmZy5kZXBzID8gY2ZnLmRlcHMuY29uY2F0KGRh
dGFNYWluKSA6IFtkYXRhTWFpbl07CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhlIGZ1
bmN0aW9uIHRoYXQgaGFuZGxlcyBkZWZpbml0aW9ucyBvZiBtb2R1bGVzLiBEaWZmZXJzIGZyb20K
KyAgICAgKiByZXF1aXJlKCkgaW4gdGhhdCBhIHN0cmluZyBmb3IgdGhlIG1vZHVsZSBzaG91bGQg
YmUgdGhlIGZpcnN0IGFyZ3VtZW50LAorICAgICAqIGFuZCB0aGUgZnVuY3Rpb24gdG8gZXhlY3V0
ZSBhZnRlciBkZXBlbmRlbmNpZXMgYXJlIGxvYWRlZCBzaG91bGQKKyAgICAgKiByZXR1cm4gYSB2
YWx1ZSB0byBkZWZpbmUgdGhlIG1vZHVsZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBmaXJzdCBhcmd1
bWVudCdzCisgICAgICogbmFtZS4KKyAgICAgKi8KKyAgICBkZWZpbmUgPSBmdW5jdGlvbiAobmFt
ZSwgZGVwcywgY2FsbGJhY2spIHsKKyAgICAgICAgdmFyIG5vZGUsIGNvbnRleHQ7CisKKyAgICAg
ICAgLy9BbGxvdyBmb3IgYW5vbnltb3VzIG1vZHVsZXMKKyAgICAgICAgaWYgKHR5cGVvZiBuYW1l
ICE9PSAnc3RyaW5nJykgeworICAgICAgICAgICAgLy9BZGp1c3QgYXJncyBhcHByb3ByaWF0ZWx5
CisgICAgICAgICAgICBjYWxsYmFjayA9IGRlcHM7CisgICAgICAgICAgICBkZXBzID0gbmFtZTsK
KyAgICAgICAgICAgIG5hbWUgPSBudWxsOworICAgICAgICB9CisKKyAgICAgICAgLy9UaGlzIG1v
ZHVsZSBtYXkgbm90IGhhdmUgZGVwZW5kZW5jaWVzCisgICAgICAgIGlmICghaXNBcnJheShkZXBz
KSkgeworICAgICAgICAgICAgY2FsbGJhY2sgPSBkZXBzOworICAgICAgICAgICAgZGVwcyA9IFtd
OworICAgICAgICB9CisKKyAgICAgICAgLy9JZiBubyBuYW1lLCBhbmQgY2FsbGJhY2sgaXMgYSBm
dW5jdGlvbiwgdGhlbiBmaWd1cmUgb3V0IGlmIGl0IGEKKyAgICAgICAgLy9Db21tb25KUyB0aGlu
ZyB3aXRoIGRlcGVuZGVuY2llcy4KKyAgICAgICAgaWYgKCFkZXBzLmxlbmd0aCAmJiBpc0Z1bmN0
aW9uKGNhbGxiYWNrKSkgeworICAgICAgICAgICAgLy9SZW1vdmUgY29tbWVudHMgZnJvbSB0aGUg
Y2FsbGJhY2sgc3RyaW5nLAorICAgICAgICAgICAgLy9sb29rIGZvciByZXF1aXJlIGNhbGxzLCBh
bmQgcHVsbCB0aGVtIGludG8gdGhlIGRlcGVuZGVuY2llcywKKyAgICAgICAgICAgIC8vYnV0IG9u
bHkgaWYgdGhlcmUgYXJlIGZ1bmN0aW9uIGFyZ3MuCisgICAgICAgICAgICBpZiAoY2FsbGJhY2su
bGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2sKKyAgICAgICAgICAgICAgICAgICAg
LnRvU3RyaW5nKCkKKyAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoY29tbWVudFJlZ0V4cCwg
JycpCisgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKGNqc1JlcXVpcmVSZWdFeHAsIGZ1bmN0
aW9uIChtYXRjaCwgZGVwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXBzLnB1c2goZGVw
KTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICAvL01heSBiZSBh
IENvbW1vbkpTIHRoaW5nIGV2ZW4gd2l0aG91dCByZXF1aXJlIGNhbGxzLCBidXQgc3RpbGwKKyAg
ICAgICAgICAgICAgICAvL2NvdWxkIHVzZSBleHBvcnRzLCBhbmQgbW9kdWxlLiBBdm9pZCBkb2lu
ZyBleHBvcnRzIGFuZCBtb2R1bGUKKyAgICAgICAgICAgICAgICAvL3dvcmsgdGhvdWdoIGlmIGl0
IGp1c3QgbmVlZHMgcmVxdWlyZS4KKyAgICAgICAgICAgICAgICAvL1JFUVVJUkVTIHRoZSBmdW5j
dGlvbiB0byBleHBlY3QgdGhlIENvbW1vbkpTIHZhcmlhYmxlcyBpbiB0aGUKKyAgICAgICAgICAg
ICAgICAvL29yZGVyIGxpc3RlZCBiZWxvdy4KKyAgICAgICAgICAgICAgICBkZXBzID0gKGNhbGxi
YWNrLmxlbmd0aCA9PT0gMSA/IFsncmVxdWlyZSddIDogWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAn
bW9kdWxlJ10pLmNvbmNhdChkZXBzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIC8vSWYgaW4gSUUgNi04IGFuZCBoaXQgYW4gYW5vbnltb3VzIGRlZmluZSgpIGNhbGwsIGRv
IHRoZSBpbnRlcmFjdGl2ZQorICAgICAgICAvL3dvcmsuCisgICAgICAgIGlmICh1c2VJbnRlcmFj
dGl2ZSkgeworICAgICAgICAgICAgbm9kZSA9IGN1cnJlbnRseUFkZGluZ1NjcmlwdCB8fCBnZXRJ
bnRlcmFjdGl2ZVNjcmlwdCgpOworICAgICAgICAgICAgaWYgKG5vZGUpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoIW5hbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5vZGUuZ2V0QXR0
cmlidXRlKCdkYXRhLXJlcXVpcmVtb2R1bGUnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgY29udGV4dCA9IGNvbnRleHRzW25vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLXJlcXVp
cmVjb250ZXh0JyldOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy9BbHdh
eXMgc2F2ZSBvZmYgZXZhbHVhdGluZyB0aGUgZGVmIGNhbGwgdW50aWwgdGhlIHNjcmlwdCBvbmxv
YWQgaGFuZGxlci4KKyAgICAgICAgLy9UaGlzIGFsbG93cyBtdWx0aXBsZSBtb2R1bGVzIHRvIGJl
IGluIGEgZmlsZSB3aXRob3V0IHByZW1hdHVyZWx5CisgICAgICAgIC8vdHJhY2luZyBkZXBlbmRl
bmNpZXMsIGFuZCBhbGxvd3MgZm9yIGFub255bW91cyBtb2R1bGUgc3VwcG9ydCwKKyAgICAgICAg
Ly93aGVyZSB0aGUgbW9kdWxlIG5hbWUgaXMgbm90IGtub3duIHVudGlsIHRoZSBzY3JpcHQgb25s
b2FkIGV2ZW50CisgICAgICAgIC8vb2NjdXJzLiBJZiBubyBjb250ZXh0LCB1c2UgdGhlIGdsb2Jh
bCBxdWV1ZSwgYW5kIGdldCBpdCBwcm9jZXNzZWQKKyAgICAgICAgLy9pbiB0aGUgb25zY3JpcHQg
bG9hZCBjYWxsYmFjay4KKyAgICAgICAgKGNvbnRleHQgPyBjb250ZXh0LmRlZlF1ZXVlIDogZ2xv
YmFsRGVmUXVldWUpLnB1c2goW25hbWUsIGRlcHMsIGNhbGxiYWNrXSk7CisgICAgfTsKKworICAg
IGRlZmluZS5hbWQgPSB7CisgICAgICAgIGpRdWVyeTogdHJ1ZQorICAgIH07CisKKworICAgIC8q
KgorICAgICAqIEV4ZWN1dGVzIHRoZSB0ZXh0LiBOb3JtYWxseSBqdXN0IHVzZXMgZXZhbCwgYnV0
IGNhbiBiZSBtb2RpZmllZAorICAgICAqIHRvIHVzZSBhIGJldHRlciwgZW52aXJvbm1lbnQtc3Bl
Y2lmaWMgY2FsbC4gT25seSB1c2VkIGZvciB0cmFuc3BpbGluZworICAgICAqIGxvYWRlciBwbHVn
aW5zLCBub3QgZm9yIHBsYWluIEpTIG1vZHVsZXMuCisgICAgICogQHBhcmFtIHtTdHJpbmd9IHRl
eHQgdGhlIHRleHQgdG8gZXhlY3V0ZS9ldmFsdWF0ZS4KKyAgICAgKi8KKyAgICByZXEuZXhlYyA9
IGZ1bmN0aW9uICh0ZXh0KSB7CisgICAgICAgIC8qanNsaW50IGV2aWw6IHRydWUgKi8KKyAgICAg
ICAgcmV0dXJuIGV2YWwodGV4dCk7CisgICAgfTsKKworICAgIC8vU2V0IHVwIHdpdGggY29uZmln
IGluZm8uCisgICAgcmVxKGNmZyk7Cit9KHRoaXMpKTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jy
b3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUt
YXBwL2luZGV4Lmh0bWwgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4x
L3Jlc291cmNlcy9mbGlnaHRqcy1leGFtcGxlLWFwcC9pbmRleC5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZh
ZDU5ZDYxOTQ2MzdhYzJkYTE2NWQ3ZDc3ZTQ5ODZlMzIyMDIyNDcKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9mbGln
aHRqcy1leGFtcGxlLWFwcC9pbmRleC5odG1sCkBAIC0wLDAgKzEsNjAgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGh0bWw+CisgIDxoZWFkPgorICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICA8
dGl0bGU+RmxpZ2h0IE1haWw8L3RpdGxlPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJl
Zj0iY29tcG9uZW50cy9ib290c3RyYXAvY3NzL2Jvb3RzdHJhcC5taW4uY3NzIj4KKyAgICA8bGlu
ayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNvbXBvbmVudHMvYm9vdHN0cmFwL2Nzcy9ib290c3Ry
YXAtcmVzcG9uc2l2ZS5taW4uY3NzIj4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9
ImFwcC9jc3MvY3VzdG9tLmNzcyI+CisgIDwvaGVhZD4KKworICA8Ym9keT4KKyAgICA8YnI+CisK
KyAgICA8ZGl2IGNsYXNzPSJjb250YWluZXItZmx1aWQiPgorICAgICAgPGRpdiBjbGFzcz0icm93
LWZsdWlkIj4KKyAgICAgICAgPGRpdiBjbGFzcz0ic3BhbjIiPgorICAgICAgICAgIDxkaXYgY2xh
c3M9InNpZGViYXItbmF2Ij4KKworICAgICAgICAgICAgPGJ1dHRvbiBpZD0ibmV3X21haWwiIGNs
YXNzPSJidG4gY29tcG9zZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5OZXc8L2J1dHRvbj4KKwor
ICAgICAgICAgICAgPGJyPjxicj4KKworICAgICAgICAgICAgPHVsIGlkPSJmb2xkZXJzIiBjbGFz
cz0ibmF2IG5hdi1saXN0Ij4KKyAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmb2xkZXItaXRlbSBz
ZWxlY3RlZCIgaWQ9ImluYm94Ij48aSBjbGFzcz0iaWNvbi1mb2xkZXItY2xvc2UiPjwvaT4gSW5i
b3g8L2xpPgorICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvbGRlci1pdGVtIiBpZD0ibGF0ZXIi
PjxpIGNsYXNzPSJpY29uLWZvbGRlci1jbG9zZSI+PC9pPiBMYXRlcjwvbGk+CisgICAgICAgICAg
ICAgIDxsaSBjbGFzcz0iZm9sZGVyLWl0ZW0iIGlkPSJzZW50Ij48aSBjbGFzcz0iaWNvbi1zaGFy
ZS1hbHQiPjwvaT4gU2VudDwvbGk+CisgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9sZGVyLWl0
ZW0iIGlkPSJ0cmFzaCI+PGkgY2xhc3M9Imljb24tdHJhc2giPjwvaT4gVHJhc2g8L2xpPgorICAg
ICAgICAgICAgPC91bD4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisKKyAgICAg
ICAgPGRpdiBpZD0ibWFpbF9wYW5lbCIgY2xhc3M9InNwYW4xMCI+CisKKyAgICAgICAgICA8ZGl2
IGlkPSJtYWlsX2NvbnRyb2xzIiBjbGFzcz0iYnRuLXRvb2xiYXIiIHN0eWxlPSJtYXJnaW46IDAg
MCAxM3B4Ij4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJ0bi1ncm91cCI+CisgICAgICAgICAg
ICAgIDxidXR0b24gaWQ9ImRlbGV0ZV9tYWlsIiBjbGFzcz0iYnRuIG1haWwtYWN0aW9uIiBkaXNh
YmxlZD48aSBjbGFzcz0iaWNvbi10cmFzaCI+PC9pPiBkZWxldGU8L2J1dHRvbj4KKyAgICAgICAg
ICAgICAgPGJ1dHRvbiBpZD0ibW92ZV9tYWlsIiBjbGFzcz0iYnRuIG1haWwtYWN0aW9uIiBkaXNh
YmxlZD48aSBjbGFzcz0iaWNvbi1tb3ZlIj48L2k+IG1vdmU8L2J1dHRvbj4KKyAgICAgICAgICAg
ICAgPGJ1dHRvbiBpZD0iZm9yd2FyZCIgY2xhc3M9ImJ0biBjb21wb3NlIG1haWwtYWN0aW9uIHNp
bmdsZS1pdGVtIiBkaXNhYmxlZD48aSBjbGFzcz0iaWNvbi1hcnJvdy1yaWdodCI+PC9pPiBmb3J3
YXJkPC9idXR0b24+CisgICAgICAgICAgICAgIDxidXR0b24gaWQ9InJlcGx5IiBjbGFzcz0iYnRu
IGNvbXBvc2UgbWFpbC1hY3Rpb24gc2luZ2xlLWl0ZW0iIGRpc2FibGVkPjxpIGNsYXNzPSJpY29u
LXBlbmNpbCI+PC9pPiByZXBseTwvYnV0dG9uPgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAg
ICAgPC9kaXY+CisKKyAgICAgICAgICA8dGFibGUgaWQ9Im1haWxfaXRlbXMiIGNsYXNzPSJoZXJv
LXVuaXQgdGFibGUgdGFibGUtaG92ZXIiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZG
Ij4KKyAgICAgICAgICAgIDx0Ym9keSBpZD0ibWFpbF9pdGVtc19UQiI+CisgICAgICAgICAgICA8
L3Rib2R5PgorICAgICAgICAgIDwvdGFibGU+CisgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+
CisgICAgPC9kaXY+CisKKyAgICA8ZGl2IGlkPSJjb21wb3NlX2JveCIgY2xhc3M9ImNvbXBvc2Ut
Ym94IG1vZGFsIGhpZGUgZmFkZSBpbiI+PC9kaXY+CisKKyAgICA8ZGl2IGlkPSJtb3ZlX3RvX3Nl
bGVjdG9yIiBjbGFzcz0ibW92ZS10by1zZWxlY3RvciBoaWRlIj48L2Rpdj4KKworICAgIDxzY3Jp
cHQgc3JjPSJjb21wb25lbnRzL2pxdWVyeS9qcXVlcnkuanMiPjwvc2NyaXB0PgorICAgIDxzY3Jp
cHQgc3JjPSJjb21wb25lbnRzL2VzNS1zaGltL2VzNS1zaGltLmpzIj48L3NjcmlwdD4KKyAgICA8
c2NyaXB0IHNyYz0iY29tcG9uZW50cy9lczUtc2hpbS9lczUtc2hhbS5qcyI+PC9zY3JpcHQ+Cisg
ICAgPHNjcmlwdCBkYXRhLW1haW49InJlcXVpcmVNYWluLmpzIiBzcmM9ImNvbXBvbmVudHMvcmVx
dWlyZWpzL3JlcXVpcmUuanMiPjwvc2NyaXB0PgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9m
bGlnaHRqcy1leGFtcGxlLWFwcC9rYXJtYS5jb25mLmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNo
Lm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvZmxpZ2h0anMtZXhhbXBsZS1hcHAva2FybWEu
Y29uZi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5lYTg4ZmY5YjgyZThlZDNhNDljNWQ2NDM3YzVkMzA5ZWUyMTVl
YmE1Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9t
ZXRlcjIuMS9yZXNvdXJjZXMvZmxpZ2h0anMtZXhhbXBsZS1hcHAva2FybWEuY29uZi5qcwpAQCAt
MCwwICsxLDU4IEBACisvLyBLYXJtYSBjb25maWd1cmF0aW9uIGZpbGUKKy8vCisvLyBGb3IgYWxs
IGF2YWlsYWJsZSBjb25maWcgb3B0aW9ucyBhbmQgZGVmYXVsdCB2YWx1ZXMsIHNlZToKKy8vIGh0
dHBzOi8vZ2l0aHViLmNvbS9rYXJtYS1ydW5uZXIva2FybWEvYmxvYi9zdGFibGUvbGliL2NvbmZp
Zy5qcyNMNTQKKworCisvLyBiYXNlIHBhdGgsIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJlc29sdmUg
ZmlsZXMgYW5kIGV4Y2x1ZGUKK2Jhc2VQYXRoID0gJyc7CisKKy8vIGxpc3Qgb2YgZmlsZXMgLyBw
YXR0ZXJucyB0byBsb2FkIGluIHRoZSBicm93c2VyCitmaWxlcyA9IFsKKyAgJ2NvbXBvbmVudHMv
ZXM1LXNoaW0vZXM1LXNoaW0uanMnLAorICAnY29tcG9uZW50cy9lczUtc2hpbS9lczUtc2hhbS5q
cycsCisKKyAgLy8gZnJhbWV3b3JrcworICBKQVNNSU5FLAorICBKQVNNSU5FX0FEQVBURVIsCisg
IFJFUVVJUkUsCisgIFJFUVVJUkVfQURBUFRFUiwKKworICAvLyBsb2FkZWQgd2l0aG91dCByZXF1
aXJlCisgICdjb21wb25lbnRzL2pxdWVyeS9qcXVlcnkuanMnLAorICAnY29tcG9uZW50cy9qYXNt
aW5lLWpxdWVyeS9saWIvamFzbWluZS1qcXVlcnkuanMnLAorICAnY29tcG9uZW50cy9qYXNtaW5l
LWZsaWdodC9saWIvamFzbWluZS1mbGlnaHQuanMnLAorCisgIC8vIGxvYWRlZCB3aXRoIHJlcXVp
cmUKKyAge3BhdHRlcm46ICdjb21wb25lbnRzL2ZsaWdodC8qKi8qLmpzJywgaW5jbHVkZWQ6IGZh
bHNlfSwKKyAge3BhdHRlcm46ICdjb21wb25lbnRzL211c3RhY2hlLyoqLyouanMnLCBpbmNsdWRl
ZDogZmFsc2V9LAorICB7cGF0dGVybjogJ2FwcC8qKi8qLmpzJywgaW5jbHVkZWQ6IGZhbHNlfSwK
KyAge3BhdHRlcm46ICd0ZXN0L2ZpeHR1cmVzLyoqLyouaHRtbCcsIGluY2x1ZGVkOiBmYWxzZX0s
CisgIHtwYXR0ZXJuOiAndGVzdC9zcGVjLyoqLyouanMnLCBpbmNsdWRlZDogZmFsc2V9LAorCisg
ICd0ZXN0L3Rlc3QtbWFpbi5qcycKK107CisKKy8vIGxpc3Qgb2YgZmlsZXMgdG8gZXhjbHVkZQor
ZXhjbHVkZSA9IFsKKworXTsKKworLy8gdXNlIGRvdHMgcmVwb3J0ZXIsIGFzIHRyYXZpcyB0ZXJt
aW5hbCBkb2VzIG5vdCBzdXBwb3J0IGVzY2FwaW5nIHNlcXVlbmNlcworcmVwb3J0ZXJzID0gWwor
ICAnZG90cycKK107CisKKy8vIGVuYWJsZSAvIGRpc2FibGUgd2F0Y2hpbmcgZmlsZSBhbmQgZXhl
Y3V0aW5nIHRlc3RzIHdoZW5ldmVyIGFueSBmaWxlIGNoYW5nZXMKKy8vIENMSSAtLWF1dG8td2F0
Y2ggLS1uby1hdXRvLXdhdGNoCithdXRvV2F0Y2ggPSB0cnVlOworCisvLyBzdGFydCB0aGVzZSBi
cm93c2VycworYnJvd3NlcnMgPSBbCisgICdDaHJvbWUnLAorICAnRmlyZWZveCcKK107CisKKy8v
IGF1dG8gcnVuIHRlc3RzIG9uIHN0YXJ0ICh3aGVuIGJyb3dzZXJzIGFyZSBjYXB0dXJlZCkgYW5k
IGV4aXQKKy8vIENMSSAtLXNpbmdsZS1ydW4gLS1uby1zaW5nbGUtcnVuCitzaW5nbGVSdW4gPSBm
YWxzZTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIy
LjEvcmVzb3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL3JlcXVpcmVNYWluLmpzIGIvV2Vic2l0
ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvZmxpZ2h0anMtZXhh
bXBsZS1hcHAvcmVxdWlyZU1haW4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2U4YWE1MTI5OTUxYjRkZjFkNWY2
MjgyMTE2NjQ3MTNlNWM2MTE0MwotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJi
ZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2ZsaWdodGpzLWV4YW1wbGUtYXBwL3Jl
cXVpcmVNYWluLmpzCkBAIC0wLDAgKzEsMjQgQEAKK3JlcXVpcmVqcy5jb25maWcoeworICBiYXNl
VXJsOiAnJywKKyAgcGF0aHM6IHsKKyAgICAnZmxpZ2h0JzogJ2NvbXBvbmVudHMvZmxpZ2h0Jwor
ICB9Cit9KTsKKworcmVxdWlyZSgKKyAgWworICAgICdmbGlnaHQvbGliL2NvbXBvc2UnLAorICAg
ICdmbGlnaHQvbGliL3JlZ2lzdHJ5JywKKyAgICAnZmxpZ2h0L2xpYi9hZHZpY2UnLAorICAgICdm
bGlnaHQvbGliL2xvZ2dlcicsCisgICAgJ2ZsaWdodC90b29scy9kZWJ1Zy9kZWJ1ZycKKyAgXSwK
KworICBmdW5jdGlvbihjb21wb3NlLCByZWdpc3RyeSwgYWR2aWNlLCB3aXRoTG9nZ2luZywgZGVi
dWcpIHsKKyAgICBkZWJ1Zy5lbmFibGUodHJ1ZSk7CisgICAgY29tcG9zZS5taXhpbihyZWdpc3Ry
eSwgW2FkdmljZS53aXRoQWR2aWNlLCB3aXRoTG9nZ2luZ10pOworICAgIHJlcXVpcmUoWydhcHAv
Ym9vdC9wYWdlJ10sIGZ1bmN0aW9uKGluaXRpYWxpemUpIHsKKyAgICAgIGluaXRpYWxpemUoKTsK
KyAgICB9KTsKKyAgfQorKTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcv
U3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2dhdWdlLnBuZyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5j
aC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2dhdWdlLnBuZwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNWZl
YmVmMTY5MjA2YWM3NWNkYWVkMDljOTdhMDE2ZDkwYzIzODdkCkdJVCBiaW5hcnkgcGF0Y2gKbGl0
ZXJhbCAxNTEwMQp6Y21YfVRXbUheRStjYioxSXxUUUU7T0A+MDRnJjxZOzFKd2hnRVAxVXpqMWVX
Y1paK31QSD1ic2MtQzN4dHNpXnUKemY4REVCYnpSbGh1OHZleTJCTT5vcGc9KUVxMDUxISFCOXt6
SkQ9YW1OQz0tI15MJj8oJmxqPClqSkIofmdOM1Z5CnppTCpKQmdxZyM0YjRvY282SDlaanhydiNW
KTBudzE2cUkxRG9WMHw3PWh+P09heXFHSWxjPTFoMl9sMVJlfE85Jgp6bU4rNmlXanRsYkRPTV8r
Jkw5Kk9HI3MxYGooQ0VTO3c1cmFlSnJDOGgjSEZrZSs8ZUNESHg7O0FLSHIpVk1XUkwKenFhTWtg
QE5GXytwflJ1UnFyQmJUUDE5fWo8SztOPkptPmdXdVZxQH5LPHBzTD1SQn54VE5MYD1SMzt6YmFl
O3VlCnpPRFleQW5+OXZ8PWhvQmlzdFRCNTNTLVo+LUEmbyYoaF9EPDhTYEROTC1VMjlePGZOdWRk
JSh2JlE3WGgmOTxwMwp6S35USkBCciF8Qzh0OW5LKFUqJkh2WVdHJlZaZlVFPnA0NT50bT9vJl8o
SE1sPll9WEEmSEtjej1QdWpFUEktfVMKeiQ8eWlpT1codW52Z3Nud0dlPX59OHVnajxPPi1adCZO
TDwrPjshTXNyRnMlRHl7NXxjND89R0QzQFgxKEl6TzteCnpEOy0lYEd+dSRpQmB7YjxlNTtUNWdA
NT8xVVUwIyo7byYkUFoyOUgyTT9wQTRuVSgyfk96JVRPKDJ9WjZUYmVpdQp6cGV1bk9aPDJyVW9H
UkhOR3gob3RpUWQ3YU13cSFJQnx8MkheWld1ZT9XPjhNTSN6antofGd2dCh3a31BZ31tS18KeklI
S1pycW07Mjx5WTg7cW9HaDxadFJwak1wJW59NV9KMUdMYHY2T2FPPEJGI1g5ckR8eTdsXkhOXiZw
ZSNxUG5FCno5ciMoeC1UPyYqNyRuLW0pMlNZPlZTV0olamNWeHJkZElaPSp7TSFCXjdBRDNWcmgw
RFBLMCQwM2d4REEraFJCVwp6JXpaYElPWSZPfVVPU2krQmxUXz1OIX1eJVlTaDBpZSMpMUkhbyZ7
dFpNQztrJHhIX3QkPGFhTUBlJF53PndZfngKeitNKVM+IVEpQX5kLXJGZk9DXz1xYkc2akJHb2RJ
NVpzMVhZdkxoJmQ0Klh9WFNvY09nUF9hPCpkYGp8Km58dUdnCnpSXm9tPUZXbmctQnBRTyFHcTtw
PyNZd2Y3YjJnZjQje1RWUUhqRipkYUxUTE5UXlQ2O203Y3FTM2hCSjJ0S1dzVwp6O3txak5wO0pV
SiZYdDR5SmV8VWRTbXZ4UT8mQHQ3ZTdKcGNRTjR8aF4wRTIlSkxofkVENHZ7IyU8Rjt6cnhHM2oK
ekQ3VllqakJ1aUg2JGlvdnBYWlo+Si1TX2FIflRYOVRoTTBQOVNjVFlnaitNSFNEN31HbCpwfClP
d18tJU1mKUY+CnpVVmdFd2NmX21QKmdYOF89MlFPMU5JVGJ+eXFqQlgrK0RQJF4pVTZnaklIVllw
ZFM0JGY0O0toNFh2WmR4QT5FMwp6aWR4c0pYdU1SNC1MNC1+KWg0THBJZDxaK0xQR15RYH1yOSRB
aU9yQlFiZmBjakZNJX1SUHJmZ3E1I3A0UmpNZkIKelY1PyVVXzRKejZRfSV9eVAxQmdZcmh2KGQt
NngzVlY0aV50PENpS30hR1Z+YjB7NT9AK2s8eld0XilvUj9OY0p2Cno9ZkVacCZZbFcmcXtLI304
cjx8c2tZbVN5ZjhCXmUlYmhVSjgtbndnKldWMis3QGV2YUE8WStoclVCaSFFVnRqMwp6Pmp1fm50
PGspVEtSPTE4TDk7YDR0ZlJDeVhGNFh3Rm1yQG4mR2lqQ3hfPj1uJWlqVkskbihWY3VzUCpvR3Be
O1IKek9oMjwhdTxlWFpWbTBxPDU/Y2xkKHlqZH1iRF4jLUVEQiN4WmMrRChpZDJNIWt3R003NyZR
Ry1RWUY5Y3dvZFhuCnpWTSRQYWg1Ty04RTkpYFdsSGRPdCZyNDFQPSZnRUtGaHV+UCZLKygmdjd+
SGomd3VRVj16dnNxZDtnKVU0Siphewp6PyFLP1JwQ0o8dyNDKFclLTwrKUdfRDh3PUF1PXl4OEdF
M3ckJV5ueil3ZTRyIWJieDtGRXQ1UUhyN3NaU3VnSiQKekt4MyVyZ0pjX0VWfFRGVmxlcX10Wkw8
bGReNjljM1pBYGk2NX5fTXBeQ09WYHgyeGE3ZlVlVSM5UjJwaTR4USs4CnorfEQmbWB4I15YYCt0
Zj84WjxGbyp6MjM4eW5XcGxJbD0jOSlTTWQycXEraHMhY3MoaDxJeFpnSVpKRmFpaE4xUQp6JiN1
PkluN2c8IStZYHVAQDRfTjk4OCh7c2o9T2QhSklnUUx4bDB3QTQhfWtuJENrKT04QSMjWmVEZU4x
IW1JM1cKeihINGsyTUE4VEw0IUM2SlNibjQzVTR4SGdzcEwxbDhrakdsaHZ7KXhYfGk1RUsxNk5F
RlpgV29IV2ZCUE1MZVZVCno4eD9Bc1ImQ3shdW49JSZuWCNOKWhoSyYrKjhSNTdiRWNgaHNJQGEh
ekdzKShTeStmaCRBMEU9JjVOa1FZcXtoOwp6fDVveS1sTjxYI3hjPzUrdEkhV15EISZsbjAkQ0J0
bSNjVihfT0wwc0BEMkk4Vm9HSVA/bk5IKHNzaFJqKlNOdW0KejslYVdkPE9iUl5zfllEeFJgZDM2
eztkLSlXaHc3Q0VwTj9Temx5JD1KYmZ8bytoQVRUIThtTHo2RngjNj9LY0EkCnpTKkB2UVdHXz5l
KmlhZGleRkNjK1VvOGQ3UUR1P2tyIWZeNUZNez5TJHhZOzJAVWc9P0tQa21XbzV1ai08I1lybQp6
dClAfUVXKWZqeGRELUV8PDZmP0tKLUtGc1d0UjQhJllhQyl8M2FBanQzZHI1T1pnXn1qYDlzKGBK
R3F0PnBeMmUKeklQYz42ellVbThEVmlUYTdpbWpCdDVAKUJDKXVkfD4xdSN9VkZRQDBGI0JUX2M2
fXBPSk5RJi1mLUV3PnQoI2B0CnpnaWRYaGNCWCRPODM9UlRtKn1gZ1AxKTM8UVpXVm94VlpNJF89
JW5RYj1rKkd1X2BsTGUzTn15UXtjUWhTQXdvUwp6SkdFMmg9dGZ3UjR1SGJNTFNTIzUqXkJPYlly
b2pkODVPU0Y1eVNIakB3eGx2R0QwUnNranxUeStkKkZQQjhIRUwKelN3P2UmO0pTS3I4WkpDcTwq
cnw5X204WGQyeCFedzl1Vm1ePWIrREplOSklc3sjKDAoRGJDPHs4aSl7MD02VDRICnpLNVpLK2lW
eFYjOCFCaVRrQEZCU3h8Uk1qUEByNihRM1JJN3A4YjIrJXZIYXhRPEduUUx5b3U9ZXtHZGdrXk5E
PQp6QDYqMXF2dEc2VTFrVCY8OypIcHkqT0JJTzxVfG5XeER2MmomVnBSYWQ+IU1LTFJVQE5zeVRL
ZFRmPjMyTTA4ITYKekprJWA8b1gwSikoZ1E8TDxaK3NgPzZINShjdkhYe1o3Y19HeWJAeXJTY1dZ
JEByWT57cCZSRn49dzxyVnZqdmBnCno7cjUmTz1GZnxfQmd0KEFLJFVCUW9lQHglOzU0b2lXKmg7
I3sydjB9ZUNuOE47PUE9enZ+dlRNdld7fjcrQ1k4WAp6QlhYemE7SjlHLTUheGw7aG9qVDliM0Q+
eThgQStHZE5pPm88OTg7KmEmaDg7dHpQZj1Cak98VnhZeVZ1IT5jaj8KeklyJmszQDYkSFAwPX4o
USFtQ0ZPSFNfZjhxJFRReCl1X2A0IVBKKThZQHVEbDhsYC1AeCRNUU9wY3AwMSFwYE03Cnp1SSlL
YiNDSDN7eGpvUTghV3w8KU9pcn5QNUVHQjA9bl5TQkV4fHVzZjA7YTVtN3E4dnl9bUJiVFpSTyM5
JVQqbQp6dHxuaXJhenxKR09WUWRgTk1FRXVlJFdsTiUqfEVvNDQqV3ooWDR1RS0lWkRaO15fKDMl
a0NfK05DJClDYmpgflYKekEhO3ZQdjZsM2FkUDltUCROWT1PQDd1UnxaKjVnM0tLXklWXnFKemhy
TXBtVXI8ZDxgSWV9aUdOTGVsZTIzVm5YCnpUajBqYHZTdkhDQ0JlTGVHdGwjLUhAR3R3V0I+Nl4m
Xnx5VldaMnM+X00ldzhhT2MqR2VBdEhrUFVhOHN1V3lhVwp6VHxCcWUlbiNBUG41JXI2b2xoK2Ix
IVNodT9SP0FWeWA/fE93YUlpZkR9cDZpZyVyK0l3bV5VRzUzJGFpYHhiTmQKekNGWkkha1Z8TGlV
RTZ6cm9+KV54IzF7PkxEZEEoKEdpZilrT2YwIXYpPFooc1FOSkVmUTJJdCRPMiloJTRhKTlaCnpo
TksxP2x7TGJsX3ctK3hCTUo/bWlRczQ8aUpnSzBCSFN8Wl9pPCFTXkZEcXFfMjJZRCozQVItTz4o
KDlNUnBiSQp6KVBAWWxaO0tnMFdoSE9GbnwpTiZRPCppMTx5fEAjK2FHRWRRKUcrcUtVTFoodDhe
ODw4P2dqd156S1hGOTNkJGcKems2R3BaYkowLUg2LVRkTjN+NVlKUlJ3PyQpX2krTihFa1FMJklZ
QmhFMTFkd1V3fWhrWTlhY00qaXZ4VTJHaU0wCnpgUHR7RnRaWFRfemtXdnstU2ZCUz5MeFRjbm9Y
fnx3R3AqOzEjPjAqXkYlKG1rXmgyV2oqVUlqanhPaEJzUGpWbgp6VztabGlsZSVyVmd2LXw3YUEp
PF5XP1k3YWBuLXp8YkdAflJMIzY8S3p3bnpZPElKMTdVRF5PK1hkTUhNZlhmPDIKekQoO1VPPWIx
YXZoSTs+fD1LS3BLWj9TSmJiTDxIQEVtPGhmTzBVViU+Tnx9bXdjWStNe0kzdm9qQFRGaDV3M0dT
CnpnLTI1M3NiTCtIYjhWOU16cVE5QiZDS1Ykd15lVm1pMntOfFJIWj9vcy1BOSpQa0d1eC1JR29U
ck1fUyM0aig7dwp6SWIraVBJQ01gcmF+XiRPUE5YNSpzd0Nee0dBdXYjUWM7dDJaNztCRjQhcGVU
WGdCZzl7aUVYWl5RMH1sNEw8V3MKem0zJGx3QiVOPmBpdXdZR09KbnBDP1RDezJWSjBeKCsoO0ZM
YGBoNUJJQlYmSW44KXFtSiEhTDs5VTBIP3ZydmNsCnolbzVFUGpnO3NoQFZKcStyNEMwPWJgX0Ew
JGtmfX5hcTxUVEZ+XypPI0ZHZClDU2hLe3R0e2AjejlhWiZeUyVzWAp6PmtxezRtcys9TWR1RzBs
YjQlSE50Nzt6ZzFWNjFlNjF1MndEbForSEFEdlZ3NzJqITdfbU95SjdmOUdwcFlAKzcKekF+Y1Uo
NzclZUNfM0lyb0p7PWdOYXgmfUtRcHNLP0BhX29wX3tJV3JAKyo8cEQxTz5fYk9ORVVVZTMpPzB+
eFByCno3Xlp6UVp+Tn5ScmxqYmdyRT9xOTchUEo/TDZLd1g5VEVjOz1aa0VhR1laSj1ZU1VVT0E9
eT9yUzxMTlBHYDc+KAp6NyRqRm1FOSNBOz0hZD9AKit0P3s3dEolP3dzPjw5c29CNTFTS3p2dHMr
blJmTUBKSG98Smd2QGBlcEpmXjMhZXkKel9lQHBtKld8dyo7KzVDMEtTYipIUnFeLXg3cU4zb0Ak
aSRFdl5Pb3UzRkk9QTFVVGZhSTZZPTxaTTJfO1dYXkt5CnpZPHZzK2FHNHVmKmFVa3VoM0pgISFj
VHJVbHo3dG1TeWJOViYqWXhnOGNFVVkrJUBKLV9lczBgd2VMYFpuNilpUQp6X0I0KHRCI1RtMVdN
JGNGd3cyODdhLVElbWRiXnZYR1ptMyhoQH4qNkYjSnY0ZFEpbjJRfjNHOT5lSmwhITRNcXwKeiNC
VT4tVTB5IXU3I3tmbFFQNmshRGZSentQZ1ZVdHMwQGste356WFFjVyhZby1IMj58TFg5MWJPbU5Y
ZDVgKTl6CnopQGw9KG9TYTtIPipRMTd7fDhgJD5IRmhWSD9GV1MzVE9+Zl9oSzBwIWNmJDZ5SWtJ
bFlIQipMKXltQjg5KzxRcwp6e218cz1fPWt3fTxlPD9uZSEwZiVjNnxiMiMzUkA9QXZwayV2JmtO
MSorNUZaPXNNOUQpUEctdk1YSz1vc3RlaXwKeiFLcDVTb0ExMkBAPWlndGA/fXI3ITlWPU8tQF42
SjBaS0B8Rj1MNmhvMFBQSl9PSigrRyZWWEhWZE5WbW0mSl95CnpFKiNTKWtkJWQoYlEydlNLfEZS
UCtVTWtgSmhETzx5YztIWF9zdE1gYnhuWlohVjUjMkBFYU5nSClJJDJgVXE1Owp6dmNtX1c1NU9W
fipkNT8rUkYremZOfCU9TzFVZEBpa1Jvek5fS2ozcWBAb092X0ZlNjZKdHspaG5oaE1ZWHhgakgK
elctdVdgQiMtTnFnbmFOTEkoPTd9Y3JXbXdKNDspdzRBV2JYel5hZzRtQ3BOZDxtdl8qdmQ3RjIp
NSFFcTE3VXQ7CnpialpPWXBZbztALXkwbyZiPDk8bFVHUSVHbVM/c3loeylKMTRoZHB9SVB4TEd8
SXklelIpWXojcjRlMDY0Y150bAp6ai1ZWXhlKz9XZHFCX1cqcUNnbTcyQ3BlSzV1OVR9SlF5KHRz
UUViXz5PXnt8YldqSkI9WCpsX1A0cWVHNF9mfUwKemQhNSt3PG1Jbk1nX0xeblFecGJeai0yJmZi
IT0maTZlfilHPVlBb0BSSGE4OzVANGw3MWdpMG85bVhAaDNHLXVeCnpaano/d2B8QmxlMkdFLX5D
VE0zb0BNVFg9dF9qbyYjMUVpYD85UipeNXFjLSRRNG4jeHo+Z0c9RjNeUFJkYTR7egp6dWgrdHMr
OFAkMDZIVSoyP3lDO25rMXVpc2NRc3EtMWYpS1Qqdyl0Z3kqakp2VTdOSzApeVI7OGtscGwlVld6
bDEKenQ8RTBLLWMxeVVLJWJNRGEjb0NzYihTTTNeVmBzTSZyMDZyZHdWa1Zsfkt7UUF2MWk0dDNj
JHpIU08rKzVTV31ZCnpJPTcoaiVgVGYkRmpTMzctXyRAZmp6NGYoQVQjdH5DMVFfQUpoP0kydVRD
I1VSM0hLRm9lTFgoLSZmR25DdXkqVAp6WGo9JSQlczJMI0BAcnkqKXpNc0VVQ2t8VSNSZ2deakNJ
XnA2MFJRVm1ybXFDXykjXl9wfGwrLT0/OHtEenxFRisKeiptYmJ+aGYxZ0BOMm44PkFoWClZR1Jo
KVhna3VsY21DdnA8bEcyQWlrclgpPHBfWGNIP0B9eGhNQ0YpPnVtZkBBCno7bUtRVjlEPDdEJiN9
SzhVIW4jJFlGMFctey1xTntHdnNJMUxuMGZHbD52SDhMXzt1LW0wN2BAeHZuOHpBQ1kkbwp6TnJ8
Nnw5QUV2YntkU1FqMipYP3oze0FSRkpNfUBreWdvUG9AVW9+ZCRYNjhacTJUQ2lDUFFEbHpKIStP
Pj1+amIKej9eMHckSkVWOEpSLSVodytPK2tFRUs8WjNZfXl3NWNYPmklKyhSUCpObXpNJTB0ZDko
RCVYWGA7bU9YZ29OIXlCCnpqJEoxKUlHSWVZbzdVNW5KK1NFK0Y4anZQTyhEektFenk2e0p5Wjg/
KUo+cipMKXRSNGs+XjRgWmhWMmFgeDMkWgp6cD8zN15oVDh3NFcpVWJHbXlMSmp2I2MlNkNOSzg0
V0Z1VGVGTWNJfShiOTQle15wPjNJb0V9ZWtHWFhEMTRZMjIKeiklIzcrKFU7VkBgI2pfdiR4ZGUm
PHl4Tz9qeUY0UiF6ajs7WFI/ZjZwKHxIWGlXcTxQY2Z9PFNmZVA2LTtBVmtYCnpqcG5edT5NZHxN
aVIyd3NFKDVLKWV4bjExYlheUSZvJSV5R2QrM0VrKypNYFFBeikpM1RaZkB7VkIwSG4jeUh+SAp6
bSFOR3s1NUQxS2Z9SnNGR0Yra1p7WEg8WjU3fW8leUBRaS1IakZyKnVxZEZ9Tip8dSM2ZEUkWWF6
ZU1gMzYrbDAKenBYZWFIKip6QTB1WT03X3FeRD47WkJucHdLWGFobyRASTM2UCFVaG1YPislM2py
U1R8KnhmbCZkQzVKNzQ+QDMmCnplLVI9LUY8YXklbiY9WHNqRGZ1c2k7LVBMYE9DeDNJPXl8LVE8
MX0hbHshSDdqeHFYbi0qLWo3JHArLT9jSXJPfgp6aE44JEg9MG9+dWJKSVVTQXlKU2JAK1NfX3hL
OXwoRVR3VXMoVzNHOURFRSVsJHomOVdaREFBJCtJUitzVVJjIT0Kejd1bSZDRU4yYzw/bEFLdzZL
NC0hZDgxTGtkeHFNMmxyTVk4QENRJTtpZWdOTGs1YGQ0Un1FSjJOOGdJREZKM3oyCno/K3NCUDZo
bnR4RnthcmJleDdnKSF3Q0tfeW51YWxGJGFPcHlGfHhBT0h2Ym88blZhZjQhSFIrYClfOWY7ZSlU
MQp6ZlJpaENvSl83bD91QlFKM253KFBfcGVhZG9VemFEdEB3SFVFYFBzMEZJLTIjdFV3d0JjJkQz
T3JgSCREWSptLU0KemdeVG96N1p+T1pNUyowZD5sdFo4UH08Uk9veT9GKTQ3NW1CZ1RkJlhvbFIz
M1pxWFQ4NXJ1bGtXSVZRPU9hI2hWCnp1fGpiUWQxfjhReFN5bmNVTG1iSVNje0ItI2BlOVMtPGlp
UShuRUZwK1d+WVB1VEZjJjR1ZVFQYHZfPFdhQjJVcAp6ZWojR3IpQjcteGFjMz5RYSElPkt2QmIk
VUd7NVlpIVJsaHlTRnI1Z1QySmtaTHQkalhNR25JYSgyMlBhUmxLJnAKeis+TG08UzlTYlRsfnY7
YWU0SXcpdTAmQUYte0U0eEEpIX1MKFYlS2V4eSYlOUhUWjhNO3Rga1hmT1d7cEpnYnlaCnpURTdJ
IWZVeGRPQFokZGF7JFpGKmgzbnB2d0NEdzY7R3wqeDJGO3FVPjcqIXlxQ3FYbUNYSVolNzk1WjxD
ZSYyZQp6U0taSEQxUXdIM3U2MGYpSiVPWmZeantqV2xebXtpPTZ6ezA1VVk8TnpUQ31BXzh6VzUy
UHh8PDFyaTh0Rl5jNm8KemN6U1JQdndIc2ZhRlBua3Ypc0pvell0fXJ3ay1ZZG83ST49az0ybXE5
bklxfm1QKGg2P15yZ3BaNSE1TF4zc0A/Cnoocjh0fnlpMk5NZm5jfkBvfDchTEQreUM0RVB9Qzlw
b3pXdFlae3k+S2dJRmVhWGBxU253WCt3bFReXzg1cz0mNAp6YVomVn1FSzs7a3tVay1XUnkhRlB5
bEcmOWt0ZCkpVzF7NDdKeChzKnsxbzw+aSU0Yjl1dG5mR2M5a31HYyE2QWcKel4rfmUtcjJwNEBp
Zyg9NlE+JiljTXhNbSl4alNUej90ck18VnZwcWxHP15lc1I5dT1CPmEobCZjc0d2VzghVzkhCno0
KXU9I24kY2oxbUM3TTg3UzJQSUpLNGQzZTRsbFliQHVFb2M2RHNsdnpvN243JloyMGxzbSM+eWdN
QlYpK190ZAp6V2pnd2NUZy1kQTt2RiY0VmF4STFqZT95MVIyTW5wU1YwbHhASlEqeSFsN19HP1JM
OEUydSMtaTMmVnAjcUozamEKelkjKEYlRlowTE1rdiRUPEJvREtvRT5RMUdFJnJxdj9iYXBANiZ1
V3dXeE5lV3ducH5OOD9+NjghU2l3eDkhblFKCnp5NmZ6Rig4elFpWnQ/UVVXUW5PYVdlQXp9aCt8
RSVXbyk3QkFXdi18Pzk9eUFpdUR3UFNIRnAqbTdnZGN0UmlkNQp6V2Rad01UdT0rPUUlVXVVaEwq
amR1fHt7dnhGMjhTSUdDeT9ZM0JaRFUjRXpAQmF7N3tgWVBGbzhhdXVMYykjeGYKejhTfjdvOH4k
UDRAZVNQX2AmIzwpYjw4c256RmRfJC0xJGMpJEIhNmdRYzZNWlpXLSNPbWA0TEYhUiZRWm4kTHNw
Cnp6VmR5ZlEjJUI1bmVCN2JOYkwyT0JVb2ByUEd4Uy15YTRJSkU/eCVtMnZyZWxHTkAyZUcjTjdz
ZmxXVHwoYVY9dgp6Y2VRYGkjOTxsbjVrZTR9eW1AdjwreDFMT1c/SChQWXdhZCg9KW4jcEQlbnU2
NU44NClpKyQ/PyFucF5HKEU2ZXkKekxeTFhYV0s2NFBCK1NgYSgrcm8tI0dgTnxOPFd4ZDN5YlJ9
MVBBfVolSiNuR1VobStgWmxzMSVVWXNKR0w2cX1LCnpoJUk/cylvdUpPPEhSJSU2QVlpVXFKX0N8
V2wkWmdFU0JJTGJQWlc8S1coQWlkIStINmQqTWlRVlVKQ3JQZ2hWRQp6a1RDaGsjKlU4RmVmQDch
Ql94T3VGTW5VcSF4Mn1JLTM3IUxyRHtGMjdnciFEVUcjZFRfZFQ4Pz9HWkkpNCRyKGIKelk8XlQ5
YTgle3w1cnwhKHpOb0RvUFRSNkQ9Tzg/OE9OXyU4WVU7MjZ3Pis0aV5fS2A0PndkPTBFcSp8S14m
eVBOCnoyelF7YUdjYlY+TzE8UGpgWmNHejZ6WUp6dmYzZWMoNU8qaGYhZVI+RzdDSWtBXileZkVz
dD5xSlFpUio3OGd3Zwp6QyRLZFplQTY4ezIxbSh1bEx6QDhgU2JgJD5mTE1BNmVQUVpabWoldUUr
MWVZYiV2X1JteHY4XjJOK1RNTih7Yz4Kek9wR21hYWNPfTlHN05GSFVQZzVHUihPeXtHPSN3N3hC
VjlzQHVWZCgoK0NZVWN7U2hFYS18cWRFaVU0U1M1T1chCnphXzJkU2liTW1GKz09PiViPk8hTipT
UlF6NCtQaENKcFhZeSMjTH1SeUklKj41eiheS1hfYHAhSGNvclJkS1pPcwp6Oyt0T288fGYlP2w3
SGgobllreWBGVjFUX2JJVEdwOFRuQUlOQkNYPTRSXjA5T1k2X0xwWXJXbmlHLSl4R2ZqeGgKeiU3
fU5FI3gldWRIbn1JaykyXmVsdlBINUNvM0tFSGJFe29jJmxAYmpYbUN8X1dEZipmNHV+bHtiYVYz
fllNSHstCnp6ajU8XnY1MGIza2AzU2FAI2gqRXw0JXAqPWduV0Q9YExrdGUobjdJLXAkZjFAa3VQ
e0dTfmtpQU1KNStMPD1KeQp6TjNyQH0+eW0zd2lPRn5INHkkNGZfOTlSNCgpZ2RZUDNBNjVqKHZx
VWVRNHMzbTY4aVEpSSp6VD5WRygyWlg/TysKenRkdmRRY1BsWFBxYVkrZWsmSylYQTRsYEEjQUFl
d1JVamxOPlc9TnsxOFROP2FwaFZTYntnNXBBcDQ2ZUxka3kxCnozYGJBXk9VJjgoRlh3WDslYHIp
YmB2OE9NKyhAd2V5MCl9SEFjI3dIQFgtPlV2SiUkWHdpYmZLNzMhfExvISNpQgp6JElpYVFQISQ+
RSs4QUhOazthPitLRjw3OHFRPk1PQCskZjBiTU5GRE97YFZBWkt3UXY2R3M7a1Z+UTNOPDN8fjcK
emhSNEVJXktyMzY0TzU5KHtrfklCcGVifihmKERYVE89SUhuPih6QEsoaylFP1o7PH1uTWs2bkR1
dUZZUGF4c19GCnpDZ0hXPzlISSlpRlhONzYwKD1Ba2NgOVh4TUNuZiU0UjtSWDUpY2ImNSpRd1co
TEU5YWlTdTI5TGZJZyUoJkg2Zgp6cT1iRTU7KEtwWS0zVnBteFgkbUpNUi0rNGB1KDt7QyZ4NVMq
TXMyI0B6RkNuKTAhSThAN2trbk1ydCFWNjNBP0oKeiNnLShPaWtydis2aTN8TkFzTEtLMXhkLXch
aUZMdmFmZis1NmItbyEtPG5aKGVIJj5qOystKkliIyVpfDhUUik+CnpsVkdOWUA4bUNuJkBNRGFf
flRHVShGZylmUXpjN2dlfnFnd2FNbygtSEhmNVgyZURTTl5pSis8ci1veiEoZGEhUwp6Xkc9cSpx
QlBJUVZwODBNQ28+anVDb3E2aVpJNFU3QGp2ezRUJUkjXjRETVN0aSV8YnYmcTwhRmg7PjslOUp2
fHkKelRqYEJAe3tUSEVEOGB2RE1BPGUmTitGNnpkRzR+RkA4JDJ8KV85Ni1WbkYha3B7Jmo1WF5O
Zl49ZFgoSW8mX3oxCnpoeylvRnR7I0F0bUBsOT5MWDs7fHojSHFpOGBtY3trdUJsb29DdUAmYjlh
YWBEazZ9Yj9eX2ZkcmA4TDdiemgrYgp6QmJAPlBUXilHOyQ9O2VBNXkyZnZuWF5BY1V1SEFvTCtp
PXArYnl9YzttPlFNMyMkME9BV2NVfFdDPVNGcVZsRy0KemtpTH5sfDF0TX1nZ1ItSGt5RHQlU29F
V1BGKTN9KS08QmxeNjRUMnNYJn1PWl5EJj00dVB2TGFQT093MVVqPnNWCnpqT2diMztvfHNvT3I8
NUFlaEVLQEthVDM0Q0hwJF4oaDhENDApTm80OVZVWnwlNERJe2xuVnBpYkJrYFV6WWJReQp6VDZC
PDR3ZlZgNlEmP2MrR0k7MU5xbDlmWSshNSh9TzYlZkVqWV4ydTx8ZDVPQV5IPypJQWNYdWNGLTJV
U0gkWHkKekJWVjg7VHUyZSF0KXZZYmBqQUYxO0leZDwhd1RyPkhSZUdEMS0/bz9GOV4jamN1a1dj
cH1VYEVEb001YU88KEw9Cno8RDdTeVpORUEoekdvSSpKPyp5NEE8ZH1mK0tDcWcpRTcxJiYpVSpY
WHozTHFjPHI5PkEwT0ReVjtpSk9pO1hGSgp6NShOLWVKUkU+TDdxdSVIVmFyUj9RUD4+VzE0eXFy
VG5kRWBKanoyYUUpaWYwVUhudntAOzI+TjFySH4xTTBaX0YKenl2ZHI0KXA0KSp2N0hGWjBKI2xX
SktQYlQrVD9mTnopWlYqRCZ2SCVUSylDbDk1NWM7JFFyOXdnZTdeQXs8YmtoCnpNKFVYJkAkZHh1
X0hwSWcqejxkMFdqXytOZHJBMzJpJVZ4NF58bG1hJitlazdxcjByTzFWITQpdVUmRDZmNDY5Nwp6
JnUhcE1OWVVNUWp7NkhQU0ZCaFg3X1RTTSRka0xvaV5mPGcrR0k5eCtWU0dYaHBKX01BdlpXQyQ1
IUlwT2Rld2MKemd6Pn54cnRmQDc9LVMjVnFNVVNFZSM0eT1WUVlNaHNqZTJHTmJOdXhPK3tXaU8p
TC1wMD5vKXVwdiMwMCgxRFJaCnpDY3BgO0k/Qjclay1idih6TXdxdHMlfl57Xz57PkpuMz1FRkJT
eU9wMTAyNDMjRmorNks2S2VpZm1fQlYkM0ZGKAp6OzxqcXsySypXYEBrSHJKaG4lIyNkSkxgcT1E
PDxEe2YtN3liRypHQTtzI0ZIWSg3WFlBfUhOOE5YTyRpRVl0eUkKemk4WEZUOFpyZVdoRldtZzR9
PTZWeGtWOCMhKGJuKGxpa3o7S0VeXmFnbGR8ZHJnPzR4RXkkS0hWOCp0a3R+clhhCnppPnwwSyQ3
VThsemQrfWtAeFdkTG8wQUltMkQxY0N2WHEwJjd1JTtUPCpaWThMPzlGVlVjSUh8Yz92RSRsNWhI
Swp6JTR5ZWJjI0t9e0VtQW4kMWhEOGR6Yil5LWN3PXYpaHZiNXs2dyViRFFBbTlYUmsjSl5JfmNO
UUM7N2pjdWhRfTcKelp6Zm98OVhJcXhINzJtbG49RilaQmVgWnRsbl4jXylIRzU7VSp3c2hgR2ky
TjhgZTlIXj0qUUNYdDBEME5zfiN4CnozU3R2Nz54TXd2QH1kaEc1VUBzSWZKMj5TVHxrcEBpUW01
KHg8PFokbX09UCVvcG9DMCRNMD9mQzkrYVNrM3t4Mwp6MCQhYlFuN1IocD5MMWV3RH11LW4pdmJ3
Y3NnKVRjOVJ5cU44KSRiZU90WHRYISEyYnUtbTFvP2c/TEFMIUJPYDYKek05Ym5pYDhtanNaUE0h
IUlCeHxkTSt0bCN2WkVnSHs7dk9kUX5jfmFYKHEkbGUjVF9fdDVlfVV7JC1xem05PVI/CnolS3so
VSRWZFFiTSZheiRpVlZGNlhycHp9bzR6cVo/VDYjcyZBUS1gNkFEenxTbTQhI1hNc2RwWH0yVV58
Qk8kZgp6VE1KZVZzZ1p4MG9NLXxZYT9yN01FNCl9WkIxVlFYPEFeNDVjQkUxZG1aJlg+RE42TThr
Jjd0JEBydUtYeHxqR24Kej80PSRSSkV3YDwqZjlCPihZZXw4JlFzPTFmemw1RG5gRV92N2wxSDhC
UlZ7TExfMU5oPGpKOWxpenBnZUE8RV95Cnp4JiVXNzFJbkB8el9ES0NYSyV0SExKY3k5R2ZZR1lF
UWUyPk9odkQ0LWAyUjFRMS1CSmE2Q3U3UXZeZkBga1R7QQp6UzhrM2coX2Z1NTlAMnxNYEpRJG84
ZT9zWWVHRjs2TUM2Rit1fnJuU0F8TUtYPGNheTNEaGREVkcmPTNZX0pUWl4KemcwPlI1VyQqNkd4
YGVpX1R9ZXxSUE8kfG1HZj9GamBjIWw3Zj9lfDFuP3RtXj8tJWckdE07dGh3JUF4K2UoSj5DCnp3
WFhjeElYSnZZKmx2QnI4PkNlVSpqTjE0ZlZIRFQzO3t5N1JpIWM2X3l8UEZYPCZKO2UwaTV2YyRQ
eU5iRWpfcAp6eks1eTRRQ1V7cEZDMiN4X2VwWF5eLVpBN3MlTSM0ZVY5ZmgqWUI2ajF2dzl5X3pe
WTNzUm5UcDFoQ2FLJmNtRnoKelY8YXhXO2omaClsLTNYMEcyOE55SzEoWUtpbGwyMW08X1dwZDxt
QnRXblk4dE8jJW9DKE0qYSNLI3prPEVfSFhWCnpuRlFiRS1iYSE2VTRtdkApUTA3JUpjU3VjM2o0
dzNudHlNQCpYPzUlY3pwUkMlPTFZKF5yI0xiamJERF5ONCs/Ywp6e1EwKVpqVEchZy1EVHBWdT1k
fD15YigxKGhvPEQ9a2BjTHBFVHRERiE+NiRCYjJVcjwzKkVDSUBDcWg7QlcjfUkKeiQpUXpTPzVI
QUZoVUs4JFphUnFmJShQKk5GI0N9MEtRVVQlUFVPSiZzNmhJfGdDbWtsaiF7ck83K2t1O2YhKTBm
Cno2Znc+KEBSOWMlbFZrakRATVohWWVXR0wjRVpYamt6cXlFIzclWDYyJCpNNXlTWHBHU2tydVdZ
Tnx5TjY2Vjd0Rgp6Zk5DXndaSTN2TSU9PWd1M0prJjJlNnlhKFRJXyFVPm10cmg8akhEQ0pgKlIo
c1orczImYUVPLWxNSW9xWmRPeDYKelN9Y1E0UntndiYmVVREPlNpN25CZyR+Pk0kQTkhfXRscyh3
Wmd1RWhYWT1MP2d1Pmw+MGBVREZyUkFlWndrUD4yCnpObnttJk5SN2FrM0JCaygtPkxiQmBMcnRq
bk0laENEc1RzPCN3T1cyVV9GVnRKK2toX1kmTV5JUXJVQ1BKVnN6TQp6Qmp2M3MtYFdGbW9BcHoz
SmA4QWMpIy1kdWsxaEgjSjIhdEgoVllPNj1zQDJVaSZCKUZ5KW5KVURHJndUYWI5azUKel9nOVJz
TSkxTEZrQXdKekd5PmdWemg8JW1gNGpyaWRzTno4SGhAPkZXPE1lRXd9Qjc+ciZXVTtKNi00ODxn
fGk7CnpsUkZ3OyUhS0tSTUlaaCZsTGlFPDwmbWh7YTgyVDxoVyQ0d2RGNDg3bj1YPEErMUxuTXB0
bFU3XlMmVDg8bFI7cwp6dTVvRm4rcX1AJSR4eW9+KiZ2eTsqVz82NkFiPmMhU0MmTzlWdzFSTGdN
eDFFI3VgeCNGfT02ZkM7N3dNQlBXWT8KektVJTd6Pl9UNUxsV24+OyNhJWZNMm4wUCZOe2coN0o5
bFVBRkgjWXtOP1BsYXBDY1ZKZWpXVGBhYTR1dng8UnMhCnpIUnpWJVVnUiVMbXpHYFYrZFMpZ0ZD
KTZGUXBpKXdJKVdzUkZgZktidyQqSCRzb1M9LTF2emVfSnNWYEFEMF5mJAp6TCFvO3psQUNGcEx+
ZkZaQkU3VHI/MjhEbiktYUZnMkorNiMwczhUJkhGRXtzPlZNQTg0ey16b1VPOV8/eFZ9SUIKemhu
fWMpT0pfa1czcX5nTDRSUGpTYG5tWjkqdyNlbzxqPUYrXmY3JGpUe19DfC0wNHd6PEdyailpeyNZ
PjlERWM3CnomJTk0QU1fK2xYQHVDWHEkWGpiYEdoakNaYUx5a1BxOH1JZ0RIYT1LazArO2pybkF9
aEB1aDVIT0c+ZXd2Tkx3NQp6aUB0dkg/fEE5e25TM0NCK2Vle0hsJjQlczFsUEhIVzRjP1J6YV9Q
JU0xTlpxdXFnI0sqS3FSdm1MYVJCaDdyYXcKemUkaTs+KztmNno9eWEyT2h1KHQoVzkySmdXK3Jf
NHFyUFpEQUY5bHskSUt7JFNYaDBBVih7U3pWSEpXO0d9YC1JCnpIfXc/fSYpWkYqJG1KU3RXJmlE
e0B6MWJqcTEtPmFBNDBidElTVz8kLTt2MW41UWBleW1kZiNBNnpQOUBlSHA5Vwp6R3BAaktpcSsh
WjtgPzQkSG9zS3hOS3JnKVhmYkcjKWYjOEA0XyE1cyZqbV5mPGpfS212JWIpZ3JRfEhpWG5CVGMK
eiVeeCREdGI+bnNHJSgtIz5CQVpJZFFAfChXVTJFQGoxOGNkMlFedyZae1pyQ0tud3pjK2lwZj94
eGBZUHs5fSgwCnpIXlUxYmcyPDtiPV5Fclg7JVpwQHFtQERHYGA+fTExPUI/JCpgYUwmI1owUys5
QXpwMDc4Jip2KUB3NiV4VC1pYgp6KFktNVBHei0xUT1ZO1hjaD8lYjNJaCMxTi09PXspNSZXUmNO
WWRfdHRTMCUwQiNMVHZwWj9LdkIhSzMxQVEkPCEKejRRQ2N4VlFDZ0UmJlhzOFdicyp5eFZjPVFI
aVd8TFZwdVNEJF9YcVE5Y3B6QCU/ZiZhejFycEkyK0YjZnMoUlU9CnpnVXt5LWhLJStkSH1vdStX
WVFqZWd7aClGVX5yRDw7fj5lfkwtT243TWZUbnAkN1lwJUA8fG0wM0pwK0glKCRueQp6VENpVi1e
fD94MGczNWswOFQ+azchOHVPPUdhWCteYT1BJXo/UC1ZaExBUm1jX3UrJVBCano7dFRDKSh8eXFR
V1kKekhvMX0xTUVCKyNLdEJzeiM9OUFkPGU0YG98MENVXzNtfUN2N3NlbTVtQ3NTbVE/SVN0LVJ6
aShHTmlJYGhETnUrCnpAJCFvX2R4YllnJVhAVU0tcXJQVU8/QEFIMnplQTxpaEYhSkM9XkVWP2hI
TmZMdylJNjlHMXgjKVMpXk1sTEhQNQp6SHpZfDtGUWRZRkImPk5vZC13ZS1DN0JzIU1RJjk/TjdQ
TVlTND9FKyZYVCNUa1NIbTdFa1pEdj54ajZRSkJ4VVgKejhkdTl2QXlZXjdNd0g4WGlIcEJFMGNh
czVIbi1TX1N1QVp0dGZZUFYpQktIMUVRI31TPW11Yz4rSVNhZjA0czxlCnpPanheUXJ1cTl9dmx3
XlYqfms1YFY4S2V5SEZEWHl7Xz54bEhPI3tjLW84VyR2JDVKVUxVS2hYJVhqQFNMOE54Rgp6PTxC
OzJjdD83K3syTkVnNXpfYCFtJkVnY2Q0ZTtsNmFAQHc7fFFJJiRpIy1ra2Vtb0RKYDBhSTE+bWl6
bjJ1LVcKentMcXN6SG8qVTlGbmooT0poYCtuRGdNRVN7MWZrakQjOG9NfDdQMHR5JWxuTl88QnxK
V2ZyMCpyKkUmOFlzYXwjCnpyRlJpRnNsLTNgOEJQQjFBQEsrSCEzMz9HJWNIKjxBUXZNeDxsJTdk
KkhHUj55K2MwRXM2d0hKakVWVDV5UldwZgp6TiNKIyYkcUJpdVBUTiVCSj0oMHhjcEs5Q2IkNThV
SytDdEJSem87cTl1O0FeZVoxd1RaOEM3d3RRZnhZKUxWKkQKem82ejFMeCsxKTtHbno2S254VlU3
PTB6PzcxNm9fUFRLZFJ0cn4zRX1FSzg+bkMxYTJKVkFeV1hxbmhoaEVWKnltCnpeVktWIUR7al57
UzdEPjx1SDcweld5UFVnQWh9YEUtZjdEPiU3MCQ+MmgpaSYmWXt0MkomSH1rNDl9Uj5AKWNaXgp6
X2s3bSZ5PXV+SDJWOUZ5SytSZmY3MWYhViE5Yip9JjQ8aVJCUXRSJHF1anwlek01WWIqeDMxWHg3
LXpXdk18b1UKekBPdFM0LXY1b3wzVl9Na2RHMS01ZXYtKnVVdEBSPFMqbC1RSGpYMGpuemlPalU8
XkBsSk0pM09ufSpUKkk8JmAyCnowJipGa21Gc2FnPFowejF6VU9BdSN0ejZhRGJodjAkZmY2Mzkp
QTk4ZmJoREdKV2oyYjxeOUE/T3JTY1QkQGdOMgp6XiZwQjI9SFQ4eGVKOSRYPjx4T3VUKSlnRUlX
V29rbTVqUSNOVXBvemlUIzZPazY2N2loNURFSzMhKDxjYjhaQFYKek98RlRJb2hAeWlINXdAWSM5
R2R+VyRicVNWNXxBcFEkcWxWPSVUbTtnWT5AcWwmdVRVY0ZhP2k+emAhUTJrWis7Cnpobll9Y1R1
dER4ZktqfWJQPlpufVMweGtlUXRSUTZafU1zUEZLQjdFTEt3QllFJDZnS0RhYU0lN148YyRKSzt0
fgp6bVEkb009JnxsWlZAPjVzPzYhNHMjeUR+d241WjNMcmwjdiRvPSNhNHVVQjZ6MkVtSWRoQGlX
MV9tNHV1SHZQbWkKejx4QjslT3BYQ3VDc2Y7bmNuWm9DNTAlcGJuQ2BJUERfUHUhcTVLJjN6cEF6
RkckUWNvb2RyenNQQGVNKkIobiZ+CnpwfXM3a2ZvPVdCRiZYSnJ0UUg5T057N05NeVIlU35Dfmcl
dG5AIXhhZWdNY2VMbEppQEdKe1doZmh+Pkwza0NQUgp6LSltSk48T3hLVnFAN3UzOWMoS0B3V0Fp
YVNkUCY+ZHx2VEQqUXJ1U0ZFWEB6RipnPTRHVXBPQjs4Ujl6Yk9MJV4Kej54SEVlSmRRVj1FSWlM
VWhsa3J5IThuSjdiNUFIVld1eDN5UDxKP0M2ZigyKmtuNkdGNENZNiYmISh8b0ZsNCZNCnpKeCZD
R3lPRHs4cH19TUgzWE0/JFVjR0IqMndBfUpTNkZMOXc3cWwqLUlXfTBqO0w4Njt7JUg/cX1LYzx2
eCFSPgp6eUdFb0o3QHRnfFN1fiZnMFZMKDhCeHE0VVJnQSshQmljJXpaZ3Y/O209NHpPSmpnc1cj
RDxvfHNRVHM0RTA5T0gKelNMaTMwaD9kMil6clUmdjN5YHoka1MtamxXSEAmfT9mNG1yejtFemV2
WGNiV3pQfnlDXyUqeHR1JDZpekktV04zCnptXzlkUTVCMiU3YXwmJCZlWClZSTdIeTxuJlBWY2hh
KVd2QGkhQFZEKGVuIXdAe0Y0VTVlIVpAKTdoTSghaHY2eAp6THtOfmQzRDxFOEhhO242R0RsY2pi
ej80QlU+ZVJNZXBvSWJZSz0rcm1lNHtLYCFJYE1OJWQ/SEFLTWBYLUh7MS0KejVTQTd6O3R3VUtA
WlcyMiFrMVA9Y216WWZhPzJRLVpQQUdAaXRxZH05fn1lfEsocTR+UDJucVE3O0hnfWVoemBxCnpo
JjI8emQrXnZ1elVkPEJRVy1qPns3ZG5wUGRiRUc7NVlybkVXWWQxSDd1UlpCNWBsIStVNjY5dDtX
KD0tO0ooYgp6IWV0czYoSTdOO0heUT5Panx4XzskTklxdjB9OEAkMDFvUlNsXjZCKVh4VEBTT3V3
MyliKkBDMyFPflkrVW4wQSsKejVDWV44R31gKDBaVmdvJlJ3ZW08aiVaSWpHVEo/Vm0yJlpaaio1
c3k+UGh6UlZWNEowbEtuS3l2am5qYlRDbVFyCno0O0hRX25Ne1EqPTFpOEpaVUkqWXNpPmNZcSFV
e252K2J7NSNiPjd8MEFyKHYlVSYtLXtXO3xsOWs1U0hHdjhVQQp6T2J8IWttIUpIbEFxZjNDPkxk
TCFMJEhQe1ZhSSErUGhWem1vQXltIXpeakE0USVwbmkzRCMmSi1JeSNtSV9vYl8Kem5KSjs+U3gj
IUFhMWY8Mk9WRjReY2pQVjs7VTBpO2AoOyo2S2EwWC1fPGw0big1UUdDUDtXMEt6RDt5JitaRDd2
CnpmK2leNSgqcSMpZipSaFBVaEVUNipmKlpsVFhmTTwzJUdCeHYzIWN+XmNEQXZAQT5JJEdZWHJk
QU1+UyFzYzAlUgp6Sn1tfXRqcWtUPzl1PmY7YCtiP2hDfT1LNGM4TmotbXJAYGJZYEVAPUgrSnI9
O3t1T0UqUlYydHk0VTZgLS04SjYKeno8VWZPO0RpczVLe3Z+R2QzUXJ4VVdgN3R0e3RkP2whfFV8
ZEFHK0VNfGI+bVgqVWQ1YnBDbV9iPD1yb2VBaFh6CnplfUkpMW55Wkw3ODFKYVR4R0ktKThFZ3U/
WnxqUVliUGlYdUs3Pj4wY1kqJEBFbkMjNGJ5Unc4bEhrYSUxVWVYTQp6Q28+fjRQUGwhbVF0VTcy
JEd0aWhjZVBgUlAxVHthVmhkZGo5ZnYpYkUofnU/ekckRCFKQmQ1X3tvNE5pWGFuQl4KempMKjdx
ZypzclN6NnhDSWsmOUNSNT9DNyspODlMNU9pbVBFPlp6V09GdyUrMT1LclJOZ0UzSXx0KXlLeTF7
UVlXCnpeaj5DUlV5YX16cVdUcWhJSj41Iyk+a2NSUmtPMkZXYGJPfWpAVXAhO2A8Mj9fNUw3ZVhi
TXUmUXJlKGJBRmhgbQp6PnZ0QWQ5UkQ7dDNSXkhrTDFFIVdfP0ZrUDw2JVJ8NVJDJW1XclBrJlZL
IXlHTERebSZBbFg8Ulc2aXBvSlNSZV4KeiZ5LWRhT01iQ1A9SUx2OFQ4eTw8ISFJbTYwUnFxTzt9
K1BQWm9pPHkrQHpTV2dhU3hXX0R8XkApMz1EZXQ4SzRHCnpzWnpyNHRpLUpVbVpIQS1rSj9YNVBP
emdAbHlQNit1YjkpViY7djhqSnxjTnV7Jjs5Tl4oS2RiSTtUOzgxdjFZNQp6UDx4UkdHanIpWCFR
c3ZTKTFQUzI3RT89XmIkRjNrTT1VUWV1c3xoJmlBJmlwTWtmZHg4dV9DRj9+OCZPcUxeSXYKems0
c2ohZCZndFB4WUhjV0omWW9pSSMlUk4/SkM+c2tpNU9QIWspcklMSUZkZzgtcyZMUHBSOTIraHlV
ZmM8UXhxCnp7SlYoOUJUblVYKFpQUFlKO1YycUohNittSCswMTd1KH1sIylQO0VhK2VtTkcoJkhk
PjB0fjwtUVEpWndfNW10RQp6UH5aM1R1WV53Mm5oMGYqXnVjVyUkcm50QUkzTmxpQWhzZjUpOER5
cytyXmc8OTc2fDRheWVAaT9ISTN4SlBROTAKeitzbklmQExFLSk7YkNMKSQma19fJCohfWglKFN2
eDhKb1gmJD1zSHpvUCZ9Uz4xWCNSVGhWfXE7KENRUnsqcyNRCnpQKk5qNjNfJlV7Z2l3N0t5fXA2
bXR2UmxrbXorS3dObmsrSWI4XyY5P0pEckYpfE5QM1Q9ZzJ4eTEjdyVHbENnKwp6WGFNeyMpTT8x
KENBYHVfZEAxZmZYQ05MZEtHZDR1RzdzS1ZqdS1AbXFtPWJCO0Z6bmhub2Byb0Qob3p7VXNTem8K
emdyQUBLPVZzOHtZIU1FMipIZE40JD88SitIZzJMTnxEfGA4VCZrS0E4RzMraDtfcU50WWwqSmUx
c1BxRz5hcSEzCnpZN3pGPndHfE1KdXYlQntjTDVgdmd2JGlsWkNnTk1SMV97RUpuaWNNJXQ7eFdE
b3tmOXdta3VPPFZmang3djslSwp6QDxzSnQkKHRvT1QwdkpMKCNLbExnaUI1Q3hNaENPdHcjaSNq
Z180KUIlXzN9cyohYXB1eG9ja2tkfVRsVTt1QS0KekpKSFVwXjApRXokY1ZnYDgrd3dNS1V2bytI
SD16KTRNTW5LciNhZCkwJigqUjhqZj5GRjZaJE1OamlNYHo7Zj5YCnpxWEo2STBeJWN5KlIwJEdo
cDVfNUcpdVhgQi1zWDRsV31SRHk4bUxMZUsjJlIxRX5AWCtheEVjLU8zKWNIRDBxeAp6PDFkfSZi
ME9iUFZXPGFRNWFDYGN3LX1GdWBRVHQjTz9wamo2KWVnNnB2RVhWeT0pbFN5Q01JJEJtJHZeNyoy
ejYKeml9I0YkPzJzKXx7S2gweTIybiNTMGxuSDBfNHEwQTh+QD1oeEcrWUJ3TkZJY1BVY0RJRXFX
TTh2MWQ7d1d7V2BwCno+WFcqN0pPUUxuUml6PW1TOz1mV2dEeyFkb0hwdGQ+dEA5LTlCKXN5TT5D
cnFrKGdlYTI7bDxIPXd3dCV4KnteVAp6U0Z0WFZnR3R7TTF5c0EtdkMpbXgkNk1PUDxvPVdaRCZA
MDx2O31BbzwtQFNNMHxQT1VGYj1hUEcme3NLU30+NncKellmI0U5PnFMKGsxeElvNW13VkNCPyNa
O0hvOWw/aiN8ZmFmMnUmR1ooIUlwRFk2az5NKGxDeHdOdSFhaEl1QVJoCnphaiZSaEtUQylBK2E8
M1decC00dTx2VWwxRFEwMykra0ViTk17RUZWUzs0UUhrdmd1ZVk5e1pYdmlKNEUwOE84Nwp6ZXFF
WDEmd0w/QFImUGVrQ05ze35fdkpZd3hpWS1aJShOJXJHWEU/cEZXKSNhd2hFWDdVZUZIREQxZkBD
ZU5RZkwKejAkPFhqeV95JlRjdnckNHtqVkshaUxFbjwzZlUrfGQ5diktNmJgUElAdW9aWWN2JnIo
V2lzJXtJa2NmcmowRnwkCnpaeUw9SEcqI3pXeFZQZjVlbVg/NG8lQ01DRC1fb1peMkAqZkIwYWZh
X1AqI0A3RUJWbFZATTYyOCMwcVgxcWM1egp6Kz96OGc7PURGb2VsU1I1YGdIbV48aURTR1g7M19r
SlZ5SllgUm5AMCU5dW1BdG0zR0loWHU1Z2NLaDcpQVZudDcKekBuUEtiK2pzMHFjWTU4IWlyKjRU
VE9wempsJmN5VkIqcF5KYSR4bSl0QH5ZOHh0dE5aRy1seSVlXlF3VHlOc0NrCnpAeGt8clhmKiFO
JGlPSGxDVXN2V3puRUBtdVlOKzVRVjtnXks7czNHKUhDbTImNnFRZjAwKCFIWXRzMGdwUX5Qegp6
NSNRdVBXU0VGOHUoZDRtJS1XTD9rd3R7RDljKCZmQnR0dXlIUTI7dTAheF9EM1h7cWpDaitsQzVz
RERJajdPJl8KeiFse3xSenc/YCsqYi1RaiYxfGB2SEFVUlc7YjBgZTFjSWo2PSQ7NiFOZ2A7RUxI
eUt9KFI3YH5oSzt8PkNTREJiCnpec0Utdmg9b0liN1heZTNAJmlCUTlqam0kUFlTSTh2NVo7fiNJ
KyllS0ppSkQpWUgoJjthdkJXQlNGeG9GdWNiewp6RWF9eUtpYVclbDBYfTZqOUFEaHFaJWJlezR5
UDIkZHQxcEZpb2BkNTtrJStgP1lrVnMmXig1JnN2OX1hOyRFZDkKenFIKVB2TmRQPSVpQj1Rbjc3
dkJ2NCEkM2dzUntJMCROUXc/PShAa1IwQF5lT1UhOHZWI0t+bE5ufjtFVy0pVUZCCno/bm9FRFRT
WlQxQTN5UjxZWWY5QEBAMSFBZFZ7PDtZPXZ0YnR0YTQ/PWhkI2gmYTNPUUVKYD1KO0wwQEglZGI+
Nwp6ZXNYNzt6VCNvRkIrVX1rJnEwNVkxfTJ1OWd2IUZoeCpRMUpFZUpsRTsjaUM9aytWS2Y+OCVf
Ul8+Mis/aVRyYFYKeklLPT1QST9wUUdAcTlMYkV7clp2JmJLMzVmJCtsQVooZn1oJlc7OHdwWTJD
RGN6PTlFR0s1WCMjQSNWVFJTZV9QCnpFQEpkTCRVWTtgMWhfI197Q3ZQSDg3YlVyei1jdXpCK1R1
IUZ8JlFRKip5QVlDZFpvQGJmbFlJa3dxJmFiNntwIQp6WFN7JXF5JlRRJGtUUEVrek4wKkl7K1cq
ZCsodUZaO3Q+USQ7clIxczNwSzJ0MV9ZYnQxX3BsQThoaGleeUpDKEUKem0jNkEkbU1pYVhIKCEr
MDJWQ1M4bHgwKEBKN2MtcWN0TXNvcXVCJXdLZDAoeSExNnt7aTIpOGReak08UTE8UGs1CnpuPURY
RCYtMnxHOU5eSWhrY1BjVismIVZ0OSlmZkw7UCohclBeVkpQe3JyNHhpSnZjbW9qP1hCM29SKEVG
NHE4aAp6V343ayFFN2gzNyl+ZXBkdmZlaTEkdkErT3otR3RtdFkoOGpOdWxwbFUzVldQO2xzT3U4
bFh+bGhSIzZ5WCUrQkQKejU5V30wUEdHa2pXNihnSjNHTkJmKWcwd0hsI2JsO2VofTlUMmwpQFFe
UkV0flMrSiZpe0tyaVVobCo9UTx3IVV0Cno3VD97RFJHSz1lfDRUYWtUeGk0c3k3WGBUVmJtKyFo
dVMqKTk/bkUhOX1Udy12c1l2byh3S2JXMFMqQXZnU2ZjKAp6byZDNnZvSFBITjMmZXkrVi1wKTFM
WkBJUER3T3ZePldSfFJgbHkxRjBMZ2o+Zil8dGpSK2Y7ZiEmaE0mSmdiJCkKemBSWEQ9RHcjYEs4
NFYpbEQ9TXlkemA1dDNTQFBzJVZjOU1ab29ZdjkhM15lMDUkN0dDMHp5K2ZFS0R+WjhIfmFBCno4
eEg8bFh5aloydGlSOShQS0NFQFB7THBWVHEwWFN4c1Q3cG1IJGByPlFBUjUkKE8lSk5oOzg+TT4r
cUdefXBERAp6THBzYUkre24rZ0VEY1h5Q3NscSVycmdLMy10PWp8SVlGUVVlUGl8b3J6TyReTVl0
TV57NWspJTBKZE5FPVMyfEcKenpoJnQ1aCk4cXh2PisoP0B3UHYhbWw2T08rcDhAOXRqbmo0UVVD
X3hwLTZYXz5FQlZBaFVmKj1GVG0xYERHeWcmCnpsekUpQCVzZUlRNnowTDNadCF6S0xxRCYtbDBh
VDg/UkxjWU1eTD56KWJ9UGdAJjQlZ3EmPnpYJXYqaHt2OUFPTwp6LXt9YndGMTxEc2BJOEwzWmdw
dXFUYmheNVU5fjcrXnA2ZG1sSUhJS0JtT0BJKFZMO3tONS1FLTQtcCVIeVJFVG8KejhhRUMpI3Nv
ZkZuSk02PylfMkE2bzJNSSQoUXlvb2AhTEYhQm5jcnlZNi03Z1BMWWtQSkJGKmFOb1BtOSFWPT9X
CnpHSFkoSl4wYyhNITJFeXJWfkxmKk1wfjBNVEtPaD9HYVZjN3VDPkkpbFJBbHdjK3dpMTc4Rn5L
cFVhO29nTkUoYQp6QlVEZnFNbShqbz11P1AmeyVMQ1I0XmUrfmg5cEtBc3BlQWNMPWo4dzEmYlh8
MSpgWVk0Sm4/JDlwKEJoXnEhOGoKejZwSFBtR3pmTD84OD4odWBUNjtBSV49aipXSXshSkoofj1B
TU0xMHR3aThMemh4QClncG08fVpUWGReKU1pNE9sCnpwZGlKUjZTUmg8I0JtYHRLdmdTP0x0JCtn
eV4/N2tSITZSWk1tJU9oKyNAISUocntGaStjdVF3UnJ8SHFTfUV4Qgp6bk8wN2g4OH01LXgrNWpT
eD5Od2FldEhrfGE5YzQhaGw0QWZFQHBDVHM0dFhuM2k0YnNISm5JfU9eK219S0w9fXgKektUbyQw
bTtifFBlOVhXY0RPVVdZa290UmVCV28tVmQjUEJnaldwWE1MeHYjeGRRe2RjYkRgTUpTdUcpSlhY
Xko0CmM3Jk5GYiMjRFhaJDJJRURgPmFyTUdSbzRgbEUlVVI1MjVFPUl7Kkx4CgpsaXRlcmFsIDAK
SGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVk
b21ldGVyMi4xL3Jlc291cmNlcy9nYXVnZUAyeC5wbmcgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gu
b3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9nYXVnZUAyeC5wbmcKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjE1
ZDdjMjRjYmNjNzkyYjU1NmE3MjY0YmVmMjVlOTg5YTQ0OTVjOApHSVQgYmluYXJ5IHBhdGNoCmxp
dGVyYWwgMzM0MDMKemNtYj8+YnlPUXxfYnUpWSNvWT1tUCY3ITxWeD10KDEmUn0tI29nVUNLIU1e
Pyt9KyhuRE5iPXBhRUF+bTVkNWFeCnpgfjgwUlRsZXB+KX5zWVFFQXp9ZT1oPGhVZWZDVjBudTtQ
bTRtQSFFNSkhYEJUUjlDUkI9a1lWZWlqeDY7IX5aZwp6djtweCY8dG5mMXNfOV9xPlM1fF5maDEk
QFV9bkxuV01edCtwPCFXYT8mYjh1TEwzUHhtYCtKZk0kMj5nKmJxQzcKelBKNm5GKXNgOG5BY1Uo
dkc+R3hlRUl9VFBnJSNAc2J1eUJ2YVg0ZHNKdD1eQVgjbTlXaDg5XmJCfksxbjJBZjJVCnpKUzk7
YyY3MkIzUUFqRXpAfFk9cnAqO3VobTB5UjAyZ0tqNjwxUHomTTBubzUqTDhhNmJNJGVwTj0oUmhC
MUBEYwp6T3N+UTY2NzRDU2ghKnd0QDg3ZWJqRkFjXkJkaFVwZDQkRHlaR2VOTCN9ZFYwO0hOPGtf
NFB8U01aPi1UX05Nc3MKelcqWlV6XkI7P0Apfj00Ul9AS1ZedjwlbzAoODVeJGhMQTJ2bVkxelVl
QU1AR1U1e1BnTks2fFgxYmF4YWZIdVYkCnpjY3hZZ0xNPT0wVSZIVj8mRFRJKiNPJlh0MkF0YHV4
WEoyMF83U0NmSjwlIXd2fmxSbnQxQDMrNXpMTWJNVHpyMAp6VyRZaEczajIzZnooaWFubHdYSGl6
eiR8dHBqTTNWU1hqN3NKUWM7ITxsUD8lRnJKSy1xN0tASFRlTU4/UlltciMKekwpQiRUbkNTXyFs
TXVtI1BTX2pAKitPJHI5ZEFmWTJJRkN6R15XV1pnbU95YFBYSkFESVlxVVE5dmVpWmoqT3JHCnph
Y2o/KTRwbGJqK0Ykbzw7IWV+Kj5xcStvT1ZhVSU9VyV3dzxKKUF2WEZDaWR4RVJ3WnZYYTQwamMt
MUJDNFY3Qgp6cEZHYldxbXVecDxCJC0/VVQhUWM0P0VtbF5pRH18b2tBbmY4cFkxPmBXKGk4eilL
anU/Skd5QXRsaENiUkpuaTkKentMUCFEREN9eUBHZyRkNXFSMTVfYzc+U3BHaGU9aV9CTmJidF9U
QnprJXFlTlE8cDk5VVcjI0w5MGwhejdrRzFYCnp3blNpVUR3WiM0N19nSlo2ZDhSS1pJVk1VZG88
KFVyMT9+M1hwSDl8cHdqK19YfUg7TXFhKExNSyMyJkFJNl94fgp6OEsjRko3eHZ2fEZwZ0xPYGpu
K1J1Q0AoI2lsNjRJJnJNeio2T19MeSZAX1RKREY1MTdoeCZPblBaTGtoSSgmQzEKekgpJFl2PnNz
M2V5c2wwXiojbkRFZEZhS0sldmU7fUxAMHI/WClqezYoYFYoNkVOP3hOV3NPKnVKLTsyPDk+NGFx
Cnp6eFY3JFRgcn4tSyQ5V2M+fWZpUiomeFFTUCNzSW50dDd5YkFxckpqV2ohR04hNyM9bzkjVzAz
Z3A2KEEhVWs0bAp6ZGkoV2RaMTR+SylDYm11X0RhMFd3KztFWTMkdHstJkYrZmkkbEZ4ZmVvfVYo
dVApWnlEem1hMik1bkQqTXtlSzYKeisoPi1LMDJYdW57PWc5TEpjNm5OJGVIX3B1Wj0lUEZ8WlE1
VGdZKHEhJS1HWk1pQkVDJWVZYWNaUnw4WEgpSWQpCno2b0hNNjgtU2FYRGRyKjZBc0UtN1cjdDlH
dk9TQHEjUj9+IS0rdVUkPkktZXwrO2g2XmFNZTQ/bkFXMSgrdzUqQAp6KSp6czNmUWdWfU0+S09I
RmVYUzdjSVBtI2xLaWQ4bkZUOSZxPTJEUkBpME9WZX47YmlVU3ZyMz1UVzx2eHNKekQKenlzfXI8
PG9RU0ApOUd4MyttRj92Z29rR1ZRbkd3JT1VcFc/MWk2Pj5DbSErU0U/P31sLUxoaXRjOS05WSFj
RGVkCnpiVztGam5AczAxQkRCbDUtO2FGMTE7UmgkNjZnanFXPyltT3lqMTVpQUwqdkU8NTFkI2JH
b2xaWjQ7N2ZZaE0tTQp6ZSpIb1BQfWhrVmUqWmomYF9RT1pgfkNxPksweG19TkItM3ZobUdPTzg0
KT8pT0coUzxzcXNIQmopPX05dEpII3sKekRvN3MhU3I+P19BI2o5TUVmclJJIVJeUUE4KEZ2WDIl
SyYyPSRPV0tnXn5AayVNaV9CQC1HdzIwXmRkViNRYjYqCnphYzN4QHxGVVpxTXNRd2lKNlQ2N3I3
e0l7NmZiJF8+VkNLd0tKaT1kYG5XXjlvJSFeSGNZeUVuZylRNSUmanwkTAp6Sy1uVEdLNDZOaWM7
X3VqM0ZGR3tecTdVSEJ6fUlFTDllPmt6bmB7Tyt0b2VobHNpfUslb2JxbSpJRFc4V0wqSDUKelN7
UEBScTUkTjs9KHJeUCM3O1ZJPEVTWTlpVGZ7T28jZkxWe0NLX253VEZVVXdhOEQkdCM9QVVMaGAo
T244ODNDCnowd0lIUWt0IWNCPEBoZ19PQnBSajMjYlgraE9TUCZmVFdMemVeeEs2RnpyaEA1cWIm
YiVubEkwaDJLfDJvek1gYAp6QXhGR3JOcXdhJkJlRFJgLUR9TmxmeVZoRXJYJTNwR3tYakV2S0xl
eD0pYmI9TDdANURMOyZEUmBBUXdxUndaVmoKekp+X1FMPiN8KjJXXmxsYXhhU315N2J8UGJNXkx3
WTs4Mk13MH5WPDl7M3huVXp9QnZGKFN2QX1eaEE2VDkxRkBVCno2VyFDTlVQJVVxR2FsQnd7UUJx
WiMkelRZO35FMWNXKFhnX0ozP2JvODZ4YT1yOUk+N01mN0VfbUxXVFZWcmtzOAp6bU1+I2pEU0xD
Tk1hJDRlPSMrOyVDNTJuNi0qVzh0QCpoQ1AkJWQ1QVA8ZzYkZmZyWUpQUy0qTytkbEMjS2NOYGEK
emV9cWR1JUR3V0NBRio5ZHNGUnhPWERUbngtRm93QXBucV5BKSZnN0omNW56c3hGSTBWbUNTfClI
a2JWWDZnQElXCnpTe0FUOHR+aUYmaUx6fHx7MkhyX0twWHhjYXJZaGhTfUohYVVSJmZmV0J7ZyNX
aldZfDgmWX0xYkI4U29aZzRuewp6YlFZfEQrWDdpfmZDXiFkXztIX3U/WEhwc1pldXJEKW5KdlE3
STxkKXAkTnRHY3ZGZnEkRkpjZVVnO2UzfEg4SWgKeiEhK15KY3J1ZUBnMVBOUGhFVTlGTT5MczFE
a2VtaDF9UVVzNCV7a1hzZldnVVFZYTsobHYldWJfTUBOZyYpYyQwCno5LTdNaWg5ej8/b3I4emly
Wm5OfiZnKkt0aX1zKGdkZV5NMDE5JmsjV3J3JCRaLWlhIWlmRGFuVmY8WW9kJkJYMgp6dVJtQVlq
cT1HN2ptczxFMy04QmwwRVVZI3VlRTJXKnM8fmp4MiRebWImS2lDb0A0TmZ5aG50WV93NzstQSNl
LXQKemQtUTAqYXxAI1crYSltej16JjYqR1NicURSVjQzZjJVa3U+KClDKE85dTNBej1BKikxZT1V
PXUzS1U/bVdfelMwCnp7bXl6d1RxPk5QU0wmeVNeZ29MbnNkRFF1eiNWNTwjfHl2P3t0UEhwJSFy
fUtneXc5T0c9U2J9bm85fWxfWDFGdAp6SmlKX3NKWF5YWVM5RnpsMjVNJlJzQXg9RzNCQ1FIQTxx
KXNHXkU4MzhgPipoQHRrSmJ5ITw7bipoNTsmNFdBaCsKemZBfj45Q3M0ISNmKl91WFB7aERDK1hU
K3tqO0hRT2RpOzM0c2ZzMTJvQVRvTlQzZVl4STZiK0E9ViM+O0xKWChaCnplJURqO1NrdnpHVEg0
XllSKV59VTxQYnN0SnB7U1c+cGZBWiRLJVF3aHJnaWcoanBRQlNCQl9ZQTV6anA5e3JjPAp6aEY/
UmwqfTY3eCtzbmxKalImRGJNVjtaaHZtYXxlTTtUNWwjO0twSnpxKHQpcV5ZRTd3PzNvJmR6VGR1
PypkTU0KeihlYFdKRFo/YGF2OzIjIWcyeHJ7dVUoYSlJfi1eLStqRD1KbjJyUyUhNWx+I1FCPDY5
O2wqUXk2aWV1bXFieFNrCnp0MGgocSpvPXRmV3JkTXtiQXBENUp7OXd7ZT1uY2hfP0xlcjdkP0cz
ODxwPXc5azdHWHJVUFBkQV8rZkgmdWFuRAp6V1lZZDFVdCYjekw8cnUyYSp4d1MraVdiPCMhRXhR
XlVINmB1Y3x8PURDdUM/K1d0fX0+MEdebW5BYlZZKTg+WWsKeiZmMipITHdeNE8zIUxDe3J0PXlK
K0Q2ZTZWMEFPVWExdU0xdX5hZFY3MTtRRU5PdjkxZEY2KkVEMGY4fmVqZ0FwCnozX1VaWDQ/KH1U
bzFVQ3MzI152e0pLVWM2PWV6M257NDtRJk40dzBJX3xMaG05c2Y3TmlTeiVJPmZPQTUwK0dFSAp6
Z14mQXA7UnM2PXRwaVVfUGZlLVRFfEl7aFVvS29+UHdWNEgtc0NYMz4mYlRpRU9fdmtTVXtiT0Fs
V0g8PUdsQSYKeiY3MlBNO1hGcUctfVVnZEEyYkJ9bnlRSSFCYyphJFN8SUpHYSs5alRzXz8/YyhM
VkleV2tpaFJLSytCaGozXk1JCnpNc2QwWEdoKmV4e3A/c3pfbUtSN0draHBka1JAfjFAN0BLZ2Em
RWg9LTdKUzkyPT8rTktsQFEzWm85WiYmUSlDYQp6dj5udn5LPTJpczRBQj1pRisxXyNXPTxLUnd1
Y3MjZVJQYUxMfGBLR2BFPHpOZFV5emp5dmkybDNNP00rRC1EcT4KelA/JF9mVygocFV4T24tO3t1
OSo3Kj5QLW8+cz1XK1dAKU1tKkhvUTRYc2BuYW9VaGEpLUZ7I3pPRyRyQExIKjJtCnptP1RzWWtt
REU8bXVMNW1ORGxxSk1VWnc9T0FBZUFHMXhubG0pbC1pM2FrcD1tVFdzfHB1JGh8YCRuKiVvZS1o
Qwp6P3d9RmNhNF4mJEZOaStXQSp2VG9QRV5gOGVYaSV7RFd4WntfU3ktbXglPz0+PGNWM085Qzc4
N3t4UHZfM0o2Oz0KejNFT3BqP25lQUtKYHs4I2kxWllVYDxEfT4hNEVBUFd7fHwkVk1hRXJ7UGE5
fUNSPlZAUWdxTjN4VDxwRkd2bTZPCnpQTj1RYkZUKlIwJEZ0JnRgWDQheEVCbGVxOVA/SXQ0Zkhp
dD5oZUpUUUA/VkgrViRHVkpEQnt1bEVJKU1Oc3BKdAp6b2FvN2EhUyNRWkIwfVJ7U2ZpSy01entj
NHBEUmJoUkwzMkJMQUVReyNDeWRgVUhoYE9Tcj1sa2ghVXFpIXx6O2MKej1VZVhMYW1gaThwVVFY
QDZlLXUmVnVrN01SQGhmYmdFdXJLelFJZ18kSDFUTkBud2pIMHMtX2dFNkkjbGR5bzFoCnp3eGEq
OGpTOUN0X3RlPm1jIUVXbmhpcn07M1Y3TVRgMyY4VnZ4ZUBkRSFPOG4tcFdfRlotdjQke3l3dWZR
fFQ8bQp6JnMpVGUlR2trcVB2cDQmcDNsc3V2I1UxRj9fTHE/RyF3fEVFK194eUh+LXczXyk5ZEcm
JD8mRXZANjVuMUBWMmAKempafX5WaTIjTkltTWtDMD9tISYydm1FdnY+bT5NST9HTV9ka2s8JWhl
N2k/QUFEYTV0SVBpXyk2bzN0aklWMzxXCnpgZWBeJk0xfX1Xb3BtfEhkNXJjMnJicENNLXdeWSNl
cExweW59PiVnS0lyP1RwZmNTayQzUHVVR1VwZGFpTmpnOwp6aSpAdCY+QTc1dz1oWHolcnhmRWQ0
aio4YFhmamo3RVQxejsmfTUhWTAhJEVkenpYSS0rYXxvbUB1YmorZSMjcDIKejsmYmk5Y1NwZH13
MzcrJGtycFFJT0JIY342ZCtYcGRtK1dWYCpaRlRETktDTHdpb1NvO2FCYWlLU3UxSEZaUV5RCnpu
fnxCWUA9MCZBe3U5eFgkNHArP3pheTYtazhtJH1IM3I5UUZgSCt6T01pXnVUUFVtcDQ0aWQjVFJi
U1oxdiRWWAp6YHIrOWNLfnxDY1laZkJ7QFplSVVZcHRSY0RsMEYpZ0RLQElLYElEZEk0Um5IUXNA
dGFyMDxeeU9ta1hBLUVSeTUKejlWN1hXITM3Y2BnNVJxTipOYDYxU21tZV54LUFTWjx3U2xzSiVN
ZyVqQnwldFU7d2M8IWt6amBNRWo8KERWKVIkCnpjTnM7KCsoUyl4aykoMTtmU2lRdCRiV0syRWN2
ajlrNUw1eUZTME9xKVlOcEBZKDx+ST5BZ0codSlnRlVuJUVEeQp6ZF8pXzlJJjY4SHVlR0lwZGlA
bnYhblh4dWRTS3w5JkooRD9qSUZ5UWU/aFNSPjBBO28tY2o1KGgxZXF5SkRCJFgKel4pTkJ+Wl9j
VUBwV3VPVktgaWZmZmleR2h0fGZGNzk/eEY8MW0qPSNsRGtjd0smIXlCUitKfWdfZXVQVk5kVUZa
CnojM3NQa1klX1JPOEZyOEh8S0BAYFF7M1AzUm9KOH5ZS2ZJRWB1WTAoPiUkJj1Sbz9KMlRMYyVQ
OTFAJUg0MUUwZwp6TjdQPnxyaiVxaUN1Nmt4PUx9eT4xeTJtbGkxJFR4KH5wOTI1NW42PXxLeXch
QFM4YEF3R1FRaCQpTks2YUZZazUKei0jXiN2VHptfSV7Vm8/aXQ4e2UjckNuSzVmWUdSMURuaXxT
YEIhZ2MpVWtXNDI0cEBUTzEoTldCdH1hbE1ic2QtCnpaPGRidCQ+QjBUakg1cFpFdmNwbiswNF8l
U29JNUc7WiY9VWRURV4pdUFtS2VpMkheIVhhM21mX1B9M1VrZWAyJgp6TVdDdl91akVpNVZAKkIp
ZVluZlB7bj1rcSFLOF50VDxoUGlmYl5IfVFROHkwcGZ5SDtEM3Fva29OK0EtMUd0PUIKel5vM1Rj
aD1+VWB4eFF2V20kdmRvezk9ZDdvQjdtY3M9eDxZS1pXVz5gUmIkKlV0S1JFMWZUeHM3Y15OYHtn
JjsmCnowdjViS0I5e0F7YWYwVSpROS1yZUFoZk9BdmNATTYhLVV+emZvRFZtIVF9MndmeVJyNyQ8
bUYqXjhOPnZUS0d2aAp6PXVUJEI+K213O1pePWE0PENZO1pJKmJ2Zy05KyNZeUlROztqU0c0Vkxn
UW5LYGlwcFEjYGpPcClfVk5qaU9SeCEKekE9WnJYTGVpKnlzPm9IeXZyQEIxbE9TeC1eUSRDZnBO
RiZ+cUNCZCVjVD5gdjsoNiMlS1hDej51PT07UEchYkpaCnpGPXcmO2IxeHkyQTgpTUctano7Y1V1
JEZELTEreVlMcm9ScGhQel8haXYzSWVZQkQkaClgV2dBVzlLaTVpKjMwMgp6M3p9ZlleSS0ybiVm
R1NUa0NndlI0Sk8+UHBXWihgckJDR3JuNChGe1RaJmh5djNVSTxiMlNiRHR4ZmhPQ2A0LTAKeipR
aCg2ST9OYmNaMksye3JuI2x6QF9fRCZGU0xFaVB4P3A5QWU3IUVTT21BRGdaSWYhZ2Y8emdnenJX
RW4hSlQ5CnpRN0FHaHhtYnZJQXlyeiVeakNDNDlJel4mUU92MFlMP2h9IVF9eHJFQiZVU25EdS1+
QTdxSHB6N2BAc3RvPm4kJAp6UGBsJCliQ343czFvO0tNb2MzRW9iaCp3TU18OSVDe15BZzFKSSY9
MUc/YD47MGVvUSZnMTxBRktAX2RlUlE8QWkKekF6TE1gdUlnOERReCpsPklZcX0tSGMhPjFmd3U4
YGxUKGtzQUQmVV44d3pGT0NUVm09bHV2eDJ4S0A1cGBNMnBLCnood2s9bVEzVyZON3k+XmIhLURW
I2E5K2JuKDE9UyZPQkpheFArTHZ+NWVka0ImKDhXSXVEJktoSlJmRUFBeEE9PQp6OTV+bDxFZFQm
fWN4PGx+bHVOTyM/MXJTZV5odThrNkA8R2k1QmRGRnp2PXw9QFlkQCp5Tm4kfTdlcV5gekUySXIK
emlTJj8xNmFESSt6PS12TnNlbkZscEFxeCZaNU9YajBVS15SOEhrfX0hdXBxJFZZMShlOGBXdTxn
eFg1KClzbVBBCnpiY3dQOzNJRjkhfDhSTy1RN2RZRjVjSWJecHU2VCM9RntVQGBLPjZBRTN1I1c9
eXpUaylmdFBlO2Npc2FGZFRAQwp6aT1Ffl9HaXBoPDYmUEh9UFU8NipBd1Y9MVdxJWJicm9NXn1o
KFZZI0hiTVEpT2xwMTtzYDFuNChEM1cwcCpqKCEKeiZFSkhjYU43ezw5XnYqIyp4P30rVWl1SHo5
OGVXa0okPm5qMGNFQ2gpJkh5VzVrMSVjPlVfQmtuXjtjOTlDTntJCnolezRSYFJ0fjFhI05GP3xk
JFVKanYrNTxOWChrKTRlPkFWPVhreEkyRn5GZ2JudlIwY14qZ04/YV9rdCpJXkJuMgp6QSpEVD43
Z1hMe0pJNGN5KT13KlNjNnpseWlQV1lxXm01dj1XMkt1fXImRkhhe3xDeVNHbUhPV3Z0U1AySTRY
UG8KempETUt5JFFPfGpuQUR7LSlWMnF6PjRybkZCKWJpVlJNLXokYjBNVyY5dyFoI0NDOG9oMnh7
TnIlYUF0ckJGaCZvCnpyI2xLITFpd0ArJlgpNCklVzd6eVVuT3g1ZCF8bmtyNmomeUtVaj1AS197
VmlkQVRfTSlGU2NJMWJ3JChfaCszRQp6PTNoVWU0OG47P2tAajtxPX0oSDtVcntgfV9ePDhLSj17
cXsxVSlecUh+IVUqMGAmU3lKdWJuMlR9X3tZJjxwREMKektHJS1sKmkocmtfeWNVdlFRTFJSX2sx
XlA0N04xfU84flV9ZW4jc095eVk5P149P1Q9RzQmRDtgJE9YeiUrU29mCnpTayZhZ21haDNhenVU
Y3dAQEwkKWgxNDU3M0RLVThxLSotaW1aWkRAe1E4X2tPUD1JP2g3WXc8VSVLUCZffXZvWQp6cDtO
ZWVHWWpLWlRWLW5peCtKQGB6Zk1FWDlZT0haSWllfGBgJXVzJFZ1PTsoWGV4am8mbGZ0bTVFeGM5
e2VjTEwKekZPXj1zQWtEaypGfDhOMkhJKCghVGZ6ZGBCZCQ9PT5UYUUzYihHdmlrci0kU1QpcTgr
Mmpxc1RpWUVqdF9uZyVICnojUkUqWjsmODd1Sz8oc3QxUVdrSHxET2IlclRYaGJCX3BuKXM+YUNT
QE1TVlF5Xm95Kk97UzNkR3hLSFN1TVNTKgp6ZzFrVFk2MH1rJmokKn4/U04zMnRPZ3JXayhlU2Ej
R0oyXk1MQ21kPXQ7c3lTTE45Ny1fZGpjdzRweSFqIWVrTkAKeiQlalFSdz48eXBzRCk/MjErP2VB
RFJIVFhiaFY8KXxEcndHMnBDU3Rtc1JxS2BmOFRMRHdxKXUoTUdXa0pLcmFfCnpwQWk8ZUhze3ZZ
OVAyaVk2WGtCK0ckPmM/ZGtVJH4hb3sxNU1XPExLJEhUNmdFUDAxc216SU5FeyEtMz1gWkslUAp6
TWpIdSk7WTFXeCV7UVBhclk8MXBoXlhfWFp9UkNBfDcwSVQ/ZiZndDUxaTY9KzxZfHUmWXtGTXBH
akhKNHpJSUoKelFZdiQleFYwNm1BfDxPOHo4eUZUZUJWPDUyX2tANUBSJTM5RktiNncwez1fXkxD
Y2tFZUYkNmVmMl5TVkdhKmFRCnomPCRHK2NHUGI7Rl5yTHgyLWNLQVExcip0KT1Cekp4S2hMeWF1
OFRWaUN8NnJEclp6U1dKQyF7dn1ManFFbHg5Ugp6NlZRSntoMFRCUE0/bFc0Z3JUeGBhVCNFYGRk
JlNwPTMtX3EqZEN7O0N4bDhuZHpOaWdgMTE4bTAoIU5iXytQV3wKeiVZUnJ4OX5pREVMZ3tsUEZQ
bFB8ZXwmX29ocndZUyUqYlcoaXstMEMwcUJnQlJLJmolWCo7QT4kMHJiTFZnJCNHCnpLX3ZmfWR1
UkdmQ0k/KT9vVG9ZdT5ibWJSSXB4dH5Id3R9dXZYcT9iVmQoZCp1aTEqfmBIdishMy1OKFB0T0J1
awp6SlRZaEp0PktYWjhoZGVCV3l3YyM5eSM9I1ZyPyYjKUxOYnkjOUFVa1ZVRG5yPERpVHAyKDdY
cklNP350OGVee0wKenJVWTBgJl8+NH5eeCVKUXI0ciRxWG8hT1AtPHVxMT8+YGRuem1IQzFAJXwm
dHtgLSVEQzxxMWotek9zVzxCKEFRCnoqNjA3OzxYSFljNTY3IXxodUw1YHAwRCt2c3IyKDlXQj9+
eEBKSi1XRUdaJVNkbz0mTXVKNWdEMn1KbnNeOG5+dwp6QWhPZntvJUtHUjxASj5ZKjU2d3NNcU5P
TGlIcyZjMykkKmg3WkRmdlI8c3tRMEJsPXRXZnVXXz1YaW08fDVhMVYKemYjfF5FeEBrU0Y9S0V3
JTs7KUdBcWs9eFpPMCNTNlVgPDVyVkhWZ3VJZktTPU8maiVrKkpVZG50cEBpd2VSQVp8CnpOfnth
TWNHcV5hUlpwdHhMSHdTWEB7KGN+bmF7c3tBNGlBKmhWe1htcVZxe34qK2g3LUstYD0tYDIqN1RI
QHcoZQp6KCpAREAtJit8NkM7SUF+OWtWRURwUmhvZ0E7MT1sU0g1eXFQSEsrNmQ/TlBQcHB9clZw
S202N2FfYlp3WC1RfVUKemw2Wk4kaVI4YXBTM2RFSW9aXkFCWHw5ZWw0ezR2fEByVEU3YGxjQ1pB
eFlMfkxyKEV2M348ZTBaWFNGdWNxQHghCnpyPjxqSkF7enplT1pNcz8he296ZV44SyRecXEyJism
cWUwKExGaFFRazAmOShsNkJwRD1eSExtKzY4bmxLXzR0QQp6Nz1wZmlzcF9eWXchelJ4KEVaTT9z
X0syY2p6MlorMHcodz9lV2h2WXpRbHRPcSs/UT0qWX1nN3VhSFJme0FLbSUKejt0UD99REokIWw7
b0pLQEp+azExOU1JMyNkQjgpSXY0eUJVbjZ4Nzs2Plcob3N9VEAmUFY+NkwmUjBiS2pWbHVGCnpk
ckY3TD5gPlRWKHl2ITVaRThFX2NeYHNpeWFoJFBuSUN0WCl9P2M5aX4zLWg+dUtYMmlYcz9UZlpQ
UCQzbWB7cgp6V0RZZkxEbXF4N0VKK3h5PHx4aT0+VFppV2kzVjJoYjVlS2dscUlJQkx4Xk8od1Z6
a3MlNSprcD16RzhKbWxFbUQKeiFBdnJ0S0VMfEIlWSFGX1AyZ2tleH1UbU45QGdSQ3opJktCUm49
ZiVAWjtVX2BlTSlFVH5JWXhWUj5RaGFadyhYCnpFP2UrXl40SFRFPEIoT3EkcHZOOzREJWhPKSto
Q2FQVWdVeXJZN25uJitlayZFZUkkOFJZdUh3RyE3UzNYSEM9WQp6PmkoVFVOODdKMHs0bFA5KjYm
KTteYHlUcF5sO3IrNm1GRDZ1Zk4+cUF5cztONXdgQVdMfEVBdHVeKGA7UDliSncKenZMWiFHOD0o
RSR4Mj1IQityelE0cyt8fmc3M1ZELSgwI2d9T2BtXkA9QmJ4Xks9T2RVYUR7YXxPJjVNbzRyck9n
CnowYUBXQE9rI2E3O042Qnk+MHAtbXQkeSlBQylpcWgwcFdNZFQyQU1kLWhHPk1sTjRkWVc5fX5S
PXhaQHpSZjdUYwp6cTxlenF6ZShvQUVSfndhM0MqUlV5I3dARzhZXiF4KmJ2QFMrVE5Bbl5iVChq
MV9LQTBDIzdDKD57NCVGbmdqcH4Kej9DVjNINXVIZk9Mcj0mXkh6LStMUzVOWTYlenY/TzE+VX1j
LXAqeGo1YGhEc0xXVXF4SE4lVmB8OENXTzslKnZSCnpNUjFsUFYxbFgtUjxJNiNIS1otM3E4WSkz
PENzSDQqX21YUGZzMCR9YCFRYlJUSG5uI3hCOCZyUms0RWg+IUFzTwp6TCZuRmxIPEw1O2NuKkNG
Y19Kd0p3WEJqJFMydlA8UERhPypBK31tKjcyJWVhSiV0MiZxO3ZgQmUtXklKQTFuUX0Kem8qVX0p
TFllayZAJHFTV0p4QktUX0h+YDIjQFEtWVohfEtVcTlUOUIoPi05SW1AQl4zSipabnVtfmBNMShm
a3MwCno5ZTdOSDc3I0lgIU5eJEc1YVEmfkZ7YlJ7cSUqaVc1LWlGYFV9ZU5lTF9lMktpdXx6Vz8w
KmQ7JDtQfGojQlB3ZQp6JGtUX3VEcW5XRVNAJkY+Wm5aYEt6MmFtTFk/bl57diVHVjs7UyFSLWlA
VnJGKDVKQT4hdGRlIXV3cElEVjRQUS0KenJGeFBnIzQ9Jlh2MD1HO0ckWjshMykwe3hYKTIzTFE/
MyZ3NiRvbTMxRDFQanEpaXVSeVkmS1g1WE9hTmQtfXxZCnowSnQ2QClUOUAySzwhc1FXKztKYipi
fXlWR1ByNnBnSDItVHQ4bmxUcDtmfkJxc29BaHZDWW5yKT5gK3F6STEoVwp6RGtvMXJAJTtSeWNt
QVJfekM5T3A/a1FQQllnR2FBLVlKcUJXNVBpWVU2QlJjS1BuMyZLO3Mrb0ZsR0hzakBJK00Kek90
WTh4MSswPEA3ZlNlSWoyKns3dlZ9ViZ2R09fbUopKkpwUzBjQDI4IWlLTjNQMFMpQW1hNUZSLS09
WUtmNik7Cno5SCprPkUmUTB6eXFlK2l4JT9YYSRJR1JHNDV4MGgxZHokeWEpI3dFQDEjJGh6TFVM
QTNhajdxN2FDbEtPZG58QQp6ejJZNFc/Y3MoSmhOSnFCKk1nWDRRNEQkKk1tfEg5I01JJCZMKDd0
aT82O1Y3ekUzT1ZFR3YqTytfbXtzSmdCR0IKenF9eFBpY3dPKz1vfU9xQU87UHp6TWM9ajItSERp
U0pRciUyOVdkUHd0Mm9NdCQ1YXF4c0U8VjFAQih6R3c7LX4qCnpGMVNnYiF8bDBoRHF1UkU9Mm59
OFR5K156Rmo/RkQyNjk3SW8zM35Rc2lCQEk1SWY5XlVWTlFye1JSTHYzY3VMZgp6cj4mdGBANW5w
RVBHTH5qKHg4bD5rZ0dnVzlgK1RoUnYmTHZqT0F7clVtbGVjP2UkZFA5fiZxeW5PQUEwKlkyIykK
enUkM2NWQnRCNCFiN0ooYEsmbVU1ZEtuOENEJE0pJTxJSXFRTU5CVmxuVHE1VDxFdnVZJG1aQjBo
S3p8WDt8aXU7Cno9PXpCdlghQSUhdlA+cE1xfHRMTDBvJD1LIUooJGVOOVMhVE0kIUdjVyNgKkJw
RUJDbExyNVMqY3cxWG1CcDN2Swp6ZHolVlR6TylhNiFiM0hBYTd9QT8xfSRaNWl3YT00T1M/Wjcl
O0Vibm5wOytaZUQ0fjZQcUc/MUF2NktsfEF+KDQKemkxU0xvN2xlbmE2TlAqSSZYdEhmNlE4R2I4
WEQhNGVfXmtpaDchcWVYfFJfRFAmdVBOKlB5Sm5wVkY+OWRmSGxGCnpRPkwqT3BkR2NzOU40UnNH
V2J8Oz1DfTZTdjBDLXFMOFRFYDcpdGlPKnZyezgyeldZY016SCotX3xUOz9aRG4/Rwp6XkNDU3tx
WW05eD8hJm94d2I9bFhPdEJyd2VENGNaTnlaIVdscEg1eVhwNWBTRllMRHkoKDlJNExtajh6Wjd6
N0UKek1JLTFqT1M+Qm1eeUBMPz1iaEhPWHNjbUtFfUY1d2gxcGdVU1IpMGMjVlB4MnIkVH51T3kz
UUE4U0JQQipJYjdRCnprZW97fTthO2NYTEU2JSh0QDU7Rno4c095UkVFPll4I3pKYDFsYylDRlZE
enhtRzxHSGVkSGxgbmRqYzFQcHReOQp6PVRyQFFCV15ARFRTZGJvWUBXYXJnTUZXPSlGez5Raj8o
a2lSWE44YD9NPT1gajlLKjtBeiFxVlZIQTJQKylgWUMKel83KCYhSCtVMGtJNV91MmVaYjM+fE04
UjlmO2JKXikkNmlFeC1lNFFgTW5YZXItJSgmZkh9RiN5JD5wMXlSJEpMCnpyZFJ6c2B2NWYjamgk
a0lfYzhsR24tZjl6bFVfRlAxV15yQnZMRng5cD9gMnIodjBzWHtzOyoxYD55cVFXWVEtNAp6KEVo
JF9PeytUYEVsS3xAOyEoREJUXmxkPXs2UUw9cXV1S3gjYihKWm0pQlZ1RDN9OSMmTF9HMCRTM3dv
RDM3NX0KeiQ5ezdvO0dOeWkxQFd8ITFQVEQjUns4SEtFSGN7QjhnS2dzQ2lYeFJfJmRHQEB0V3FU
NnJubXpzbHUodGNRS2JICno/U35UYClUYXhLRV56TkFDT2VYc1FgYm5hPy1LaihKbi1IaGReISha
VVREVGZUNz02QEJCNCNaRHh9MnpEZGQ9Uwp6M3lXa2t1SXZ0Mjl5TnZ8TT1BIXFTOyY3dzxlXzw4
biVFU312elRoWiVQKk0rcTk5fTQ9a0M0aEJuTS1lZSlwX3YKemhAQ01jSSgremo0cWF5alYmWmgl
RVdHdFlpUnw3fDYxcSpDX0clZnJ7OF9HdlN7fiZfJkNebCNCN305fklGVXBuCnpEdk0pQ1AxS2Nv
V0oyRFo0aiE/VWshQVYtJnhVNj0tMntVayVGJWByciRLbCpHNk9nMlZwNlowcVZUaHdWbURVcgp6
dCRvSUhyV3t4cHJJczhDczA2eyEmTjUzVkJeN3N9SVJwV2k3bCtZbFVPUEMmJDN7OXU3WGQ9UHJ+
VGdxKj9oVSEKekFOeVMkQ1BtPz1MS0B2NmcxU2NlMmZBek9iV29JMXxIeUsoRUsmaUFkWmd+U3My
MnE3RjFAaFZWMytqeiRlTkcoCno8czRhQHlUPnclT0JBbDNTNmU9RmV6PD9jZEomKl5FfVlgXzNA
aC1XJDhiIWpyT2VeUGhrK0d0R0lEdDU3enxSRgp6LT4xX2NIMGZyLXd4R1pAZXM8bytLRjBOaGhn
Pl9DdTZkUTVlNChmQ21lZENCdT5aeWJ0PjcxQWE1KiRvY0JMRj4Kej5xPU1WfE4xamVQQjh+ST9y
UmMlMHlFa0Rpb244PiMjcDlFVlV+P15Ub1VfMDFgYzt2KE83Tk40OW41RndfamVvCnpIUElIazV+
UGYtTHR7TmtDaHRLcUpLPz80RGlOUmJKWXo8SD0+cFpnUGpsUnJpQVZ0ek1nMSUzP3clQzVZTF49
Mwp6U2FQbFUoZ0p0ZjBOPF8zYlk5NjFAdn5BfVglXnR3TW87Iy1gUyhIbWJnX3pHK2VAayVpYyVB
dGF5cXdDKEdaSzIKelcqSno2X19UYXtgS29nSSgjUmpObDh8ZWNYYmh9O3FfeVFPb09gPmUhQnJB
Y0pseiEtXmYma0p1NmBhezhoRkRZCnp6MX5kNjE4eUstN1E0d3Q+LSpIajJaNVRjRFZTb3pEMm5s
JUN9P05vRiRSXkZIcU5qZ0NsaFR5eE4+PyN0fXFJZgp6SC1EZlplTk00bmw1TUloeXJ5UGMmZiUt
Pm1pT2lLYyZeVldLQUtLNSY8b1VeKVpAdTNXbTtsTENQMHEtWEl6XjEKensjcEZ4bjRAODgwNHEk
MWEtcmhrKSlXN0QrR356fDJ4RTM2KWFKWTlKaDJDVWN9MygjSVJtfT0zTEI+ckArMURmCnpzNnZf
Rk8qNEBeKDZHc2dMQm1nP1g5cl4xQnsjPG1OSzFeb0IjfkRkPzNJdGJya21eUHNLNXNlKHJJUDdo
SnZ7NQp6bVR6Q1NQc1BzLVpTckVqSD4jKW5VRypGRlNlJklJKXB0djdsfnJhUXBQdllqOytveFFU
S2UjZ3UwNlltZXlPUnUKenItR3JwJm19eXBGSnlna1ZKPmYzYnJtQ3w5QnQlKTU/ZXIlVWImVXJM
aVdNQkB8UzQ9Q1kzISRpMSYrSz5QbGcoCnpIMlZYWCVPVjJ2JiRpeUgoZHdsO0E/Vj8pYXxsbzt1
cklgeGkmVHtfdDRiTj97XjA+JVZGN0NuU1p6OD01XisoTgp6SnBjKUV2YkdMeU8pN3dSOHN2TWVe
OT51Q00/b2xuaW81ZEp7RFgjUyNjMlF+MUdHVWZ3V1AtbzFBIXRXU15uZkoKems0MDxSTz1CWTB3
cGgjOzllaXMhV05wUnhYTXooNmc9WW42N2tOSEQpdmBjOzhhXkgzc0dOP2BraFpBSCYwd19PCnoo
YjZ4MUgodlF2MD85UXh4VnwpP0g7O1lYRWJmdEJsSyVRNW58Z3NWKFdIVyo+U19jeVYtVEJ8emBV
enltTzNTPAp6Kj8mbHxuNTtaZTM/LXt3V0E0N1BuIyptNU5pTjFOaj4kNjYqJjIxS3NGUHFjPlBp
emVQN0kmfms1ZztLNmEqOVQKemI7cGVBR0RQZ2JTSTlZVXQqdEF3UX5EU2d6OShJb3hxYXZyNUt0
S3JSIUl4YFRgO0xjTnBfI1UyJkp0bS1vZ1hECno0JVQyTzxpSCh6ZTw9N3liamAlK0EtYE5VMGwh
cn5XQ3RVfUh5Y2Z7djVEd0E2SngjMHg1Xz5qbWZvSzNMMTc3Zgp6LUZ9aTJSQj9YLThXa3I1KWh+
OE58M3M3MFV2LXBPRj01Pk8tT3JBY1lvJEpKMFZRQGhrT0dLeUFIdUtncXA2TkMKelUoP2VSP2BE
dj9FQy0lVTAtWjxDYF5qUzY1O3lGZiROVk9VZ24jUj10K1QkJUZZdzA5YkdAOS1mPUMhZEpDc0gt
CnowP0RkU3NVTVZHSTBFKWpOVHA4OEtvQjk2cjAydChQKk5PUHQzN2I2KEVldHtZciE/Qz8+JHlD
UUQ+OzIzbGslPQp6Km4pSXgrSHM1KnppWjIkOU81cj1NYHpVeT9+MmxGaHspQ3k3bWspUj5gVish
RHZuXiFOdmg+IyYqTk0+Z0BpaCYKemo/aFore0dZb2dyKHp9aCQpQSteZ21RZXNXUC09Vk1ibF81
OEBLRkpNfmdhIUAlclRRI0BBZypDaEVWdFpSTEt2CnpAKng/SHVjUHclZEtqKDJGczk5bWlufDQ3
LVMpWERFOExAcipvWkteZ3B7azk9KzxCR254ZlBASG01cExUIV9+fQp6aFU3NWxnVD49OSE1KVNG
Ymtsd1ZzTzROZXBBV1FKR1YxUiZqeCp8aTV0azA4dm9iTVEmYWtycEIyRzAhOFYtPyEKej5HKzRY
X2A1eilienA3WmVtYUA5PTFDelZsaFZBJGlVeXVeR2J5YWk3UF5wME5YQHF+Z2U4YEQjUGxjZjE+
cjJSCnpSQStXJSlESUh4fDZiaklHQlZRM0pHQ1VZWnJ5WkdwUzhzVmlwKGRKPUhVanJjP3E7QlEq
QkNLYjgpPG9Ue1Utagp6UWE7RCpuZz1YP3MkRj9wZjZLIWpqazZDKHJIYUJGU31nMnd5UlJtc2E4
Yk1FO04qJDFQTm1HOyNPQXZ3PUB8YW4KelBNPzs2JnZIa01mM3VxYHs9NSN2NUBwKHdYN2dCaWxg
K3xPY0Y5YEU3clNDaHRDamlLTnhoZ3dYKl47dD1sbGJjCnpxPFJRcmB1U2leZHhMJFRGRFF7Vyg8
TUxiPFRtPVNHXk5OVChAR2g9eXg/bGExSiVjYGFSPGBKQlBYam5yMiRmaAp6X3ooOyEkc3lISVA0
I15ieTIzTCZzeV88YGBzU0JvKGJTbHI/X2NqQU40JFJRWmdGITtGVTdeak9WTVlnZnIhKT4KejY3
OTxqPyszbDxjNERVSCZ8NlVxVk91bjwtKVRGWEFFRnpVczI1NXRMU1d2RiNQV2NfXzZGMmwyb2ot
ZzsjeVRwCno0PzQ2YFBCRU8oZVFYUCpzQDZfQCk7aWNTKkczeXJRd0UjZ0lyeiZqcmcoNTdHUjBi
KHlFR3B8SWZUKm5uYmwtNQp6dik8NCYpWHMxVSVHPzEte3R+R254c1phcjI8TmpTcTJFMzhQI2VH
WTg0JVRKPFA/N0lJXzNJQnNQRjx3cHxQeWEKemVYVEdgazF2U0NTWTBjO1JxNU5jU2dZMFNAUUJA
NE5pVE1zUXJeNCNqYTNUKml9PHwwK2k7aFgqOTdkYlQ5RF5CCnpCYU5ONGNgJFQrXztESCU0cVcy
M2Bhfj8hPlJoPk9LMm8kMCtLRGxAbXQ9R0JoUj5oQFk2KE5pTUBoX3FMX0lNOQp6bmQ/NXRaRXxi
SEFxVDB4TylPSXheUndwRmtKY2BhSXZKUjs0dWhebHdodGd5MmlpdHpPNWtzKXpDezEkYDlhWjIK
elFgQWd2cXIlZSp4U2p+UUxVPzlgNyV0WFRxUTZFV2s7cUN2X2UjQnVOTWlHPSNKZ1NwY3pOX3E+
Kj9fbV9SSChlCnp7eGcpR0pCVzJ7b1Z3TmRUa1g7PmI7WjtmQmgtcTttfmlYMjl4YCZHQT91OHZS
R3dHYW0zWU0jSnFZcVRDOEYrUwp6TTtlRSE+UUVVb3stQ2s9Sm1zOCNBJCFINFlrVlZLWjVqJiZa
b3A1ZkxGV3EzMChNMmtRdX1WNjZ2b159PzdKa3cKemghPyohMjUmbX4wZXJFZWZuRF5rY0cqS3A9
aXowbiFwaEQ7Z19kQF9fYzhnNiglMkF8YTJMdVg5XnFZeHgqc0xfCnpxVmtkR2Vic3hqVT0mPDJf
QGooYU1uUD5eMnZtNXd4SDlGIUNsfXkqPlhOamxWaW5vM1BBSUkreXRANkNKJiFNewp6ZD55RjtD
UFpOMnUmRVV1YTRyQ2Itak1PPjZmdnE5cD1sNUNVYXBWfVdodiZ9Py1JbnFKfC0rUi1YUTU/QStN
SWEKeiVaWGBLSDc5Xmx4IV9hIy1PfVFMMUBjU31RYi10JUpMTXJAU3EoZUpGSzgqQmR1cGRIN1Jy
cX1vNC1yYWFIdmJpCnpwK3U4cU4+ZEp0MFkwY3pVOHVIcWhNNzhIbW8/XjB4JUlvRktKXj9yUkYq
eiZxTFEmcVZea3ZWMTZ7TUxZYmFrOAp6Mj4yM2kwYHtBeFNXSV8zYV5ZUH10OTN9VE5uJjI9P3Mz
STlkdjV7VlBSV0A7SE1ARlZIRW55MkFZKEh1cWpffGMKek94YDUzVjQ0JTgyYjJ0b0A1b0U5K3wt
eyhfWCErSTJmalhaazJ5LSFMTTNNX3AlR0x3IVhuQm84OXZBKnR2Km8pCno/fDdFXnFifE1JMktO
eFQ7RShiX2YxeGlabnE9UXFZTyEjRGw+NHdyPjwjM1JnVHxwQWAkcEJvMGBkTVdoYXQ/ewp6VlVf
NWI/NEdvXzRqJSgpN0x1MklOKFVlXmZaTDwrXzE7dnZoajdsO2dXJCZAdlNkU256M1huR2hGeTRj
S0w2bXQKeko1Qz97eWV1Q2VCMkNoWisxdHNgeChxQ2MzaWApP3thUHZ4QH0hbkZEI3JMZWxFTCRX
cWJvTn14SGZed1RgcG8rCno8Yn1DPVkrWnltK3g4WEBzY3dNdVp9SnV8VHh2U0IwWmZUR3d6U09z
RHAlV25afH1ySSppJUtUQChyaW9iMDFjTgp6aCtaY0N7dVVEOUAjdT4xa0Z0aWcmaGJoY3Z3aitC
Yl9UNUxrbmh0d1RPPjFJeFVGd0lOPChHY3Iyczs7PjcoTn4KemBGYDloYXR8LVlFTGYlZEJ4VWg3
PFMmVlp3SUtIKmJRTE1tUkRJP2d4QFZLelJXYk4qXlpLKG03RWtROGNXNWhwCnpIblFETFcqbG8l
PXlYWlchRCRUKGBEQ2QzVnJydT97UEN8TThOXz9zKEN9dGVEK0Z3MktPbz14VmRiJnRvMkZ4bwp6
OSs/WDUkRSFNYSpMaXNzaiN9P1RPOXtYJjdFKFBBaTNLKDhzPkZVc181KFFsISFnQDJHQ0EpQ3Zt
byFzRWJnbT0KekFiamY0eX1Cek1kNXx1WkZAeFRZKCVDKG5URTdwPCU4NllrPD8kJXwwdzQ3M1V5
SSUxQ3ltd1czOF92JTBuX2Y9CnpPP05xUSpqVnR4UiMpKFRkWm8wPEBtOUV0N3dWPk5McTVNTUcz
JEt7WUk8KWZCfldEVkU2PEt2aChFb1M7IUtnVAp6PHRKUXwxJHZGQyNXeT1TVWswR3ViQUJ9KkNi
N1R9b0B6YWczQiEjKGFxO0otXy1+cmxNRFIpQVNqaHVHQVI3cDkKekxgUWMkIXRVNDVANkl9KHlZ
O0pFazc7OUJzO3RKekFKczRScXhMQ193ZChWcyRXUGltWDlCazZ7IXpCTmBmaDZqCnoqMTBRSjRQ
SX5qYUo0MkZqX1A9ck5CZ0dvZ2pgdHdJMjF9WmJoUyMtT1ZLeiRSdlRaPDd3dyFNRSF7OG01QSVY
bAp6RXRUOUZpMzMwVT8yQXl5JHMxYF5qWE9kdVk8MEhJX3dHZ1VPVHBrdnU9NTUrX3gjb2M/QExl
JXJiVFNKZzIqQU8KenFoP14/aDBPKzhONyE0WC1HJk1wQX1tRihtJSQoNiokaVV2ZD53V0M0YT5Y
QVEyb1dIZFJHJW5NdTRjdFdVdlA3Cno1cTZJNTl5bD5zMWttTnZuQVpxQWhPVSlSKEJjaXp1cEVB
JTRfN3BnUlkyNjVZayRYMCZYJmc/UktJelN5RF5Kegp6dHg8cC1tKEFpUio0WHRAVFoxISQ+ZkRQ
Q0Q4ZkA8VCNLWkkqbytjZ0goNHBTXmJ2UnxaNXxZVHQmUUlCJHhWVWQKeig5eSZTYDEmYHJldCRe
JkpheUIwNEg1bk44bkU3P0RqTHZXcmVvTXE7TWhGV297SygkY0JkMzg7YTF0WSljRjwjCnooOD8x
dFR7OGxnWVRwKFdgMlpReyM9Z2JiVDNkKWNvWU9MUHBtZjJuRkh8cGJ2PnZrQ089MH4mQW9gKiZW
ISU1Zgp6WWRNMlpjIzJ9PmppMkc3SFh0MT1kLXRZYE9PQlk1I2s4aWRYYTUjeGJGXkMxZThKSkFW
X2RgJCNSUytFWDA1RkMKelI9WUdLSCooem4paXc4VlNQYT1SdGZpY2IoaWpERSMwYUdhRklmQyVN
UEVgX2k3ZyNJaGpgSmJ4OGZKMC1kSjgjCnp3JT9mKjRNQyU1RTVCYCVFa2UzQ2hfelg5SElnU184
SiFEPnRLbClFK1JXZ0o5Sm4+PWokNmxKTjh3bF9ga1gwdgp6U1MzWG1yJXIocERecVNNPSh6M1JZ
eGtZb2JDVXRpUS1yYy1KTD0panFXT01YT1JCQnNAbTNkXjlRe3V+dDZjT18KelkzTyYpPko4ZUBu
ZTFacystTCROKUR1QzlrWXwzRmZhSDc+ITMybXFLe29eUGwwTSR2QGIzTlRiR0QyQ3FPMEZ2Cno3
dkVSPiNjUDdUSFN1REZ2LWNiRmZNMmRkNEVGaSZXIVRiUj1HYlg5TzwyfEg4X2N7Tm4mdUI4KiRX
TEdvQCpKUgp6NFVPM0gpcmM2cllCRDx8Y0I/clk1TWBUP3N7RU5KZH1sYyhiYlhZVHlIbSM5Ujgo
RUA2S3NJV0tzfWVLcXFBcl4Keip6dStwQmMpVkgrYzVzaUojdCt7T09jLVJ2Kmo4I3l2fU1mcncz
SEFhRmNrY2NNRWYoTTUjMTJFQFlYKmBoe25oCnpZRDxyN2FlQlB+fENtaXkpPUgkVHlsJWVSLU1u
X3Jfd21nOEtZKjtPcE9AWX5lNHt1TGchIVZyNjk7SnlicH15cQp6ZSE8NVRJbkxFN3A7T29ucW1F
PlJoIylpQ3hhKyRXbVBHcW0mYmAlVWpqdXEzbk1UaXU2MldeXzs4dEA5JHwmeEQKejhqUyhkP0M+
OHJfeWNQNXR4YUt8UHt+ZUp7SGspWlgwZCFAUm1WQCNMemgwVnE+cD18YiVmRVcrJXsrb0E2JjZI
CnpEaUNUSylzK1drSUpjeE95JGQ1b2YyYCZsQWs7aE81bXVQfHk1R3o3NCVvQV5GTVJmKExwXmJf
eSlYUEJZWUlyYAp6PiFJR3JTIV99dFBaS0UqaV53JGhHQGdLLWRgPDlZOU1ARn1uUGNPNjleYnpN
RzYmaUlzRyp1TCs/MmtPYkBDajAKenQ8V3pgb1N0QGMwOUR4TlgodCV0QGlkcSRuWWdYemIwSUAr
dHJ3dUg8QUdBUkpVWDtAX2J+ZFNUIz8/b2FBbURDCnptPlBES15meG5TQWJmeClAZmYjVGx1SjdN
UjcrJjw2RzZITHtaOXQqYVgjaUQxcSp9dHVHK1pNTDMhLWA7bmFZOQp6K2RCKT41RihuVygkN3pn
Nkhya3l0MVoze1ZBUnN3OVBKZWJTOTNrakp7Vm5JSCUqY01HfC1KSzRUYCllYiUrOD0Kel9DPDN9
bjlGU0RCRXg7TUMkVTY0TTViU3x0Wj1SLUIwMDVaMntBRXV7R2hhOSVaTD85R1Z9Ykd2ezZSQkQ9
M31CCnpsNTY4KChLYSRKRzJ1RD0oJHNKS3EmWmpvJi1jcV90Tmx9bD87UnQzRnskLX1SLX4kZExj
eSM3VXVgP3E8cCZVPwp6Wn41YUkrcGtxUyl9Xk50UkMwc1VPPSNaNiROfGpQP0JDc2ZqdGUpVzNA
JCRSUmNvVCNKIV9mVDl2T15ARjxGaEUKemVWOFo7cFg1e2g9elI4MiUoITw7OzBvZHQoSTw8Q282
I1NGNUszb25oWSZwTXU5WXJxYDwkVz9qczRMXzN2fkpWCnp0TFV6PVJ1aj8tSml7NUtVSUwqQER7
MDVgZXcxTy07NG1qYEslVDk0QT9sV1FjXmJfVWtjQ2gkVU51R2hUNGxqKQp6REhMLU1WZ2VWcDdX
UHghezZkam41WnQ+d2A+ZEk7V3V9UWFZOThOek5RYyFIPDBjcDUxfj45OUBGa19UQmN8Uz4KeiE7
fWtGV1phRENSM3FNUGVvKWc2UWs8ZlJpey1QUUp3RXk7WkI0RllQZUooeiNLVDJDRjQoYiNFMGYm
cVI+Jj9HCnp1IT9gYl8yK0J+UW1hIXRpdStiPnstTE1uNntjUi1OWTB8WnZGbWJiJFQ4fCE5OG1F
T2tDNDZPPSpfSUJjdHN6Kwp6Y2BgbHk3R294UEp5P1VzSmR8IXRVOXJwfWwxPUNgTmI7X28yTXpP
V2c5cyM3OHh5SlhvMDZXRUJUfEIyazcteWcKejFeenVDMGlKRExgQWxHRj9CTnNwQ205JGZ1b31r
MUBmZUUxXjErNEIhb2BvU0g2QytfSGdIJjZRTE9+KSNtb0tOCnpKTiFMQForfSpPb0o1OTlYMVU1
MHMmSVF0PjNGa1Q2NEBTZ3E5KVNoS2FOc2pMZz5QcG9jJikzNDM2dX5CWl9TJQp6bTg2R0U+ZGZK
RGxDYng1S1dPQHhITiVHSUhveCZCVHxqPHU7UmxeRipFYzMmbkpyYDgjZjhmSiUxNiM8RmVFKXIK
emtAX1lNUllgPGYmSlo0WUtYeWlscCZvKFYlJk1KPDNfVm1kODE5NzEqcmw2N2RRV1AmPyFDPUxZ
Qj1ZTEx3XkxUCnplbVVMKGU+PFclLWc5JDE5d1heek9LMjRtdGVhQGdmQSZiMU1vSSk8VUZ4RyYp
P3pTdURjdngpQko+ITxgdSFRZAp6RlgyNVpEXm99QHZDXyE/NT09b2VSOTdBK2tzUHdpVVFQdTFX
PW4tdkFoZFkpTntGMERrT3xgMTVFVDFYaS1AWlIKekJlMUY9c3AoZiNaU0RuQFdFRzJoayN8Z2FQ
IVAhLUgjT15YNXV2P3VgfWQ9dTBXK0AoWUlFKTFCQSMjZW1hRiZ7CnpxKVV2ZUZAaGM5PGNTQXdF
OHpAZWlXZ045VylsTShRa0FJSiRuN3NRSE1pcSFydXV+diFkI0BzN007X1hxVldjNwp6QGIoQ1pn
d3g/dSNIbXloQztLTCNefUNwU1dqPjNAbmdiSmhoM31rSG49dz91RURxMjIqPWY/Jis3TkZzIUk2
R2EKejRYLX1+WkZnMHFpUWNRYXo+Tn05SV5zNUhaQVVZNERjXnMte2NNZVFsWWUtaEZWTFRgTDx2
P1VAVlRHKXg8YEF1CnprJnQhfmtqaEs+bT0kcXJoS30hU09ZZWVATGpTcWZCVURRbW1GU3R1K3ct
QH1BX316KGV0RlZOQERDeHJBcl5CNAp6azBGY2Q/fU9XJl5BfE9CTlVuTV8hcnNMX1hRakoqO21X
QHNzYCFxdyhLazVYUjxJWFcoJiF8bFdiUyhNPi1INVAKem96Ql8hVEdLMVBHVThYQilMUGteS0dN
ZTk/ezFqYDU7byl+M1N6ZE53TSNTNFVKSmJHaE91d0NWR0gwLXRyTCRBCnpLWWxmbll8MWJsT0hO
MyZxWn5UR3RGcSh+dT80KThqdGY9YiF7Vj02V0U3UHMjQVRzJjk5Tm4wO35sWjU1TyY0Mwp6RiE/
NVNNS05SJEJJO1F3aEtCM3V7KURoND5xVW9Oay1FNk5wUlQocTNXZyQyK0BBODtoP21Qb0ZDeGpG
KnwlQGQKelFxUzJRcFM2NUljMkRNUi1ARX4hcitFKTUmcVo/SDJ8R3lCcm1JMEl2bVdHfmVRUCs9
SXQkP3UlPjBBT3VBRiYtCnpLYSVKZ1ZAKGJGIzI+UiFfMGxyRjN+UzMyVWREZ1c+I0sjSHk2Izck
USorOGJNdihEPmRRYmRLV0J1QXwkVyR8Zgp6b0ZZYylOeTlNdHtvLUdFYiR7PFcqaU80aFc1RWlT
SXtJRntofHB9SypqS1o8b0JeeztGSEh1UklTSXptNnhqQEwKenJSKkRydWB+TVhWd0xZJDx+JVkh
Wl5VO09wQVYrcGEybCRWTmNZNlYlejRPNXVRY2J3STFNQWQmM2FzKiRTLX1pCnpFZnZFJTUod1Vp
NmRsaCFlPVJNMSVZcUhlZSExVzNqYzctekdeWiNPJlYqVHclYiVESjlTMFU0QkUpVzl4O3pTegp6
VzNkflJEZzReflQwS1MpamdkOXNRTmhHZGh6Uil6aUxyOGpCYGxTejhaIW0hXkgtSWhSM2M/MFla
X01QMF8xJWAKenMpcilLXn4+OVdFe1lIQk01PntLMWAjaDkoYWd4TmswMCVWSCE8SmQkVCpvTkQ5
NnthUlZVcDBQQUV5c0ZEJjVpCnpAdyhUMkg8V0FHbEV1RzVeU3xKVlhlUSV0e1Y/N3w7UXI/fHVr
VncmJFI2eyl7cGNuYlYrWlcpM2s/OWVFYDFXKwp6R2JaeWJvUEVoR3lERGdQMGhwdClnNVRHQ21D
N1dhQlBvdXgqNkhpMkdDS31QVURfQyNGa0VtWE5EcX00dGk2PlAKekdxXjchVzVCYnk2d3FVfWo2
RyVANjI2RTx7YVFzM0ZCKDYodHZzYUtlZSM9aWJ0TFluMVUxdUJxS3hPNzdlekVyCno8LXRCVUFk
RHxgezJyZSpWQ2ExYyhuSThTKzc/QDNRan1+KHh1cGYmYnEpM2dQTClEeHNwRT5NSlFvdHNqZ1c0
eQp6bCpCSkEtPEZGUHFyMXZ4O15ZdnU9K2IzdiMlVkQ+TT9xLTNzdm5+Zz5TQV5qJmNQMn5WV1dZ
LWlPWjg4eGkmIWIKekheWjVAQX56JDIocjBJVEJuK041OT17VVBaI31mbDNVezFAQztNSzRfO1lj
JiktWS1KTCY3UGtsKl5FMGNKYmJeCnpDUSY7eD4ySFZ8QD4xMDdIe3w1Ml5hY1F7YCVjQXpnS1J3
QXBANkpTMyhUUnFAWmdWSUljYT08anRGOU5iSVZsWAp6UHltQ0l1aHhaNEJYaklUdUNiI15sN0h9
bjNJZ2UkPjVKYXRZZmRAcHw0PCEyUFpyeCRVKnl7SiRifEQ+T2NrZnEKenp4TWtUbDA4Tj1gQlR9
dDlMdXFmO1NvSlY3T1RWfGdHRGNzS1pHRys4KUxwJW5qc159WjAhSnM5P0xaNU0wemEtCnpwdU9o
eSNHNVJFanRufFE8R3QwUU5tPCVJcWx9dFYzRDg8TjNoPiZXJWBMbiMlQSF7IUI+KGRTU0NxSHdH
SFIwagp6eTNmZ3clRGM0Z0lFU3h7Ym9gTCUyM3E8ZkJFeWVJVnh7SkUhRHsmYXhwWTFuTnU3VFVt
fHtxQjNHMEVSYDVTTSsKentUcnB6WjI0Y0xSY2tVVzx4ZkZ+U0orY2RfbylJVUlvPTwmPDgrO2c0
YmdPWSZRclpBY1ptJVBOVHdGbXRMSU1XCnpmPVJnakE+d19Me3MpQ3RHN2NeSUN4QUxqVDBuSD0x
ekt7IWxRaDB5YTs9K3N2UCQ0c3RBcmNxYWMkRVpaT3AkQwp6Pk5GNU9nMCV8dyo+Nj8wanQhOT5A
WTRgfmtYTShVVW48ZW8kd1lkLTBUOXlnPnU9WiRQQH4yN0JUNSM2SXJRKU0KemhyM1NHMWU5WGpt
MkEpcy0lT3oyP18hJH48Uzx0cCU3WGtjd1U3eFpDKXpmeCFOdlY2I0pLQC10NVh3Y0JLaEUqCnpk
IXQjKTQ+fFplbihsNnoydio2Jl9DbmJsJmBLPyRxV05OeXxHcklUUldSVUFFN3M0JStDTEs9PnNM
Qko2ZzFQYwp6IWU7VzZNcnw+bnUzIUg3UUVqbT1tb0gyOVoxMUpAXlZCZnR6QTF8RCRSenRCcjNJ
Mit1Wn5fTkBwPmU+QF94X0QKeiZ5YzFVeE40XzhZVys9bENBdlJuVVhgTUB5Vj5gKFB5d0FEYTFt
WXNHdTFgdTJ7eXdhXmAqUW11aV5zRnt4alMyCnpKZHo4Iz1tc2IwaTw/KlBNP040S3FyIWcxdkg5
JSkwTHt8WlZJdDRJaWNBdHEoTWJBKXZCUyY8QjR4aEphUnw5agp6e3hwRylTSTh2S283ZjNtdiNQ
cFkxbENgNHZFc1NyWDdvRCtDQjs9VDJvNmR3b29KOTFrcnN8U09PdkFxPVpePikKekhaJD94d3Fa
IzUxTmpzSiU1RzBXcDgyWXZqbkNfVmRxY3pLX1FpVn1kfEwzTWJCIzc3bjI3QE16VWtvYUUkQm92
Cnpqa3IwZl8xOE9VbiY0b3BKQShwOSNueklBVDA+ajZJPGk/VC0tWTgzOyMtTnZaYjdJZys3Pl9Y
UDhadkxiMUApRwp6V1U/UXZ1R1I/bXs3MyppNlJ5ZThtPFErJUZpTjNgSkIpTE4kUGFkPWQhQDY4
R0ZaY0RzcnNzXi05Y21taWxYemkKenhPRE5edG5iUVB4TlNvXnJLTXVtKGtARSh4cyY9KUVlXm5n
UyY5bHhAcUxjQWEqK0leZGhBN3toaHFBTUI1IUZUCnpoTS17Pl9DakJjOzxMZihPQEctUmlpfXR0
eHVKVDZyRWdUQ2p+ZEh1YlZ4YzVLUVU5YDkoS09qODUhY1V2M3xgPAp6RDVEem9MaVcjYWhMU3Bm
PGZ2QCZ7TUZfQU1BeXRQaWhFfG0rOzZHOHV5ZHk5ZDN0NEFUNUt5KS0+dGoxbChCTEUKemx3Y2A2
YDAldmAzdEh6bDRsQjR3Z3gxenNxbklqSUghYWd1KE5DLXF4PFUraDF+OTBoP2V9S2lmYldPUnpM
MWN9CnpuR0gtZyprX2ROYVJGO2p6dTdtRUsyZTV4PHV3OzFuSkdHbWRUQnliVXF1WWhUYDJIciFI
I0MmKnVmWmpEaDxOZAp6bD1mRTQpfDV4X0orbTZCb1RNTigqOzs+JWticjk2TGBKOGYySkV9ZV9w
JTZ8MyhAJDtlQz02NHEzdE5lYjJUcm0Kens8aF8jRVZDQCsrLWFrXjh8IzEhMyZYUF5ge1ZpMUpM
KHhlMWJncD0+UD1AOUhLeXw4eCUybVk2eFEtTHIyTVZKCnpMME1hK1FGI3NxRFlkIUd5WUZVRWh5
MTJVQjtJX09WfGFVKFdeZWB7YXNXSGs8bm8qZkJoUmVBWks2XjNHemhfZQp6YHQjdmM/RUl5dD56
aTcleGQyRV85KFJOWjN4OTZTdnh7Jk8rKX5ORC1GPzk/N2AhRT8rRmd5TUx6bHYoelA1TC0Kemgr
KTBFJXope0heKCU9dylxVyVrXmNRWClINW1UVE43cCteR3EwJjE/I1RvYzlKPHZkTHkmMlp8SmMx
UXdmbFYtCnpHQEBMTU40YSprciUyUX1TTTtwVSQjTCZAOylhaHh4clhvQ0hKajVMVnVCaDQ8bCFN
REc0azU/UVlKU1o+bz5BWAp6KWJGK3ZgI1J8NShgbTRYXjB1RF5JaVphdGpiQHJVR1NwbW50WUN+
LWZ5NUxYXkImRUpkMVhYKl8leW5QWWlrYmYKeiNGPFItN3wjTl87UFN2PElNTHZmdnM1fVZAVHdU
a3U2UXUrM1lqbkFWKDVNNTI1bTQhXi1IOStYPXA2OT5kM3l4CnorJSZZNGJKcykpZ3tERmpqP2Fv
Qmhwc3s0YygjXzFaZV9paTlzeGk8dmV1RyptY2tgTCkjTElfNHdIZGB4VGgzbQp6VT1ATU5VWV9w
YnZRYGwjKSVtdFAqKkxQem5obD5vNVV4LVFEO0Qha3IyJnVlIUM4ZjApNCRkUXRId0IkUGNMNWQK
enBvMHU7YDU4JV9McFNjLUc8PkJjMzZqYHlZOTZvK1JkZGU5aEdsOWheO3hAVCRpenErenhQei1S
cEhQeThUKnlECnpqXjsxODhMaz1KWkBJbGZOdD5MVnZwMWFFXnRTYzFEKzVDZ24wSlR5TiFWd196
cXtMZV5me3NBKCs0V0lNSTBVbgp6bHMreyZoZUt+LW1OXitUMUotZCZTeW9wbVJmejhpSVUzJmxW
QkZYR0kxYGoxdWc4PjBRYmFocEFLVm1JX3t4djUKekpmYHc+UGcrZHIkNmdnQ2VnLUs7XzEpcDVM
dmZaYFBzQ2RVaSoqbV9WZypObih2cFBiLUN9eTE0Ynd6ZVU8fWxFCno+NUFJTlJLJV5+QDh9KnxV
KndJdXA1RlpOb2gmRUtLfEVAejh1U3JZKiElRSpEIVF0JEhuJClNQS1EJjNyI1F1Zgp6eVNxYVIj
aWVLez9oeEdGcDsmUT4pb2B+YHc4Y0hwO3QqMXhJTlYmR0A8Nl5YQyVnYWQ/NEZxaz4zMDg8a14o
XiYKel5WTy0yP2V5eGZXQmY1antXND9jUFlBKDdfJTNxZjM8UTtvcG0laFJnSCtHWVU0fVpDLXhg
a1ktUlFXZjRMYytfCnpKP2ZDYUtrSihCUkcqWW55Ykd5T2NmOV57cWhxd0BXKCZeeVI/YzNfRz5V
OG9XdCEjJk9Oa3RlbHhJKz1PKkA4Ugp6MXQ3JCVsRTYjS2dEQVJKWTRYelAjbz8rY1gqJXNDd301
SE1JPV92d3pQVGBjVHJFRFNsZDNJVSp0KmFmIz4yJWcKeio3dTc5cUJJPG5QYkxDZ187JXopOClg
MiNhVlR2cjImOSZzNStwc3N0cz1SfjRYO0FPUig2N3gyezlZcV9lSnZBCnpjdiN5SjNKYUJ+aHw2
VUxwMWNsRlgqMTN3Uy1eYTdudzVTdThYSEpra2tPekNBNXF5TkUlfnZgQShnY3wmUHojQAp6aFNB
PWhuaFQtdUJOMilJbH1xdHU5OHEofmlYIzQwNkJEd2xFdVRiIzdpcGFSclJ3fDVaNmhgUkdXeHBD
cWA2Mm0Kem9uIXEjY2l5dGRJJj12Qz1gSFg+cno+QzR4QjFwS3ViWFclOCNAflZeaXE7YnFHaWVp
Un57c3J2VjtyUSU5P319CnpeVUE8bi1WMG5kOWBGKn5OR34qVWE7Z2ZxOGBEanF1JmB7Wjg2R0F4
KWB6YDZudz02OStnP3tLJDl+eG4+JUh0fAp6eGo1R3k0LWhvVmArbURveX1pI2F6N0B5Ryp6MT1I
N1p5cGxzJXYkOEF2QW4oOV9NTHxNTEtNWnppZUFFOzJEVioKendsNm4mUGNgYWpGezFNN3F+ZjAl
c2g7MCt7O3JwSWUqVzdUWWRpWWEreGFtKCV8PSNTSUxuaSRhOT93TGBjfVg5CnpBbnp3bSVrWERk
MjdQfkZZfDApOSQlREVaRz9gM0grZmZxeGUyWTJpRkVGOHxaQWZMVyZSe0FjezF1KzVCeVBiYgp6
PUloNE5iYlA9IXdNaHhmXipKZEt2ZXtCS2B1QEYqR3RRR2QpcEBIfForPjE7diglQFYldSt8WDhP
YnJfWDY1RXkKemt1Njs5JlRxPFVqV096e1hSX14tZ3hXYClld0BhZGZhXk94bWB1UEE0WFNRfWpn
aiZlJTZPJjYybz5kYGRZSXByCno8cUp1c3tNMGZEanJDYktYVmdTTkF4M1k9bSRXdXZxUFhNa2FI
VyMhS3Z6RDdnWCU5bmghbks4akZ5aEw8bU5QIQp6NkRtKkJBPF5sO3lPIXl0SCkmXlUqR1M2YiZ7
fS1ROTM+UW5tQj8/bEUjMUhKUXA2NjtYJUNTYTRwJGZXd2IwbnEKeklmTzNmUEhLI1U5czBSMTNh
JmJQX2NyUWpPPD4+TyZZTHFhKH1DJnhRZU1BckVaQk9ZdHRtTTY8YHQpZDg9N0daCno1TmhHTXBC
PFVOaGQkTU07WWk2KEU5Nk9SNWkmWDtJbExfVTlkZFJIeEZtSE91UzlrZiVUTH1JO3EzVSsyNVZ3
Qwp6by1YT3piRDRYO1BfYlBkeGhjO2BLQjl0ejxzPzZBTGJybVZTeHJaNzxCYH5YZHZvME9RTXUp
TDdEdllKbUd3dVoKellBSGRAeXdDMFFlbmdfe3wwWCpgaDNTXnZULVpMektrYmdsSUFSbnMyJipY
aDR5OTRRUjdvSUdWPWljdip8VCkxCnp0aHZndjhIP0QmJCFYVEMpaFRCQmptfVN0N3IleXY8NmhX
M0NZRDw1Vj9LZHJueDVgUzh6fkJPP3F8OE9OJkg0RQp6PVNTK1MtflN2R3hlUTttbn5hRzQ8QXdi
eGtmTXIxc00xJj1VTUBsIzgmK3s3eXVxPjtZdmVvZHF3ezdrSnktenQKek58O1gze0U+cURVLUow
bnMtRDdgR1JkQVgzcHNvdj8rQX1aMk8kYD5xa0ZqT0pXK19AS0F+KTI1a3MwaFphSzFVCnpLe1BL
fD5oKTBjQX1OcSR5S0FSOTRYR1c7cW5zfF5WZElCT0MhY1dSP2Y9Q1hDVSkpYGYkJE4yT2lxWShP
RFZxSwp6I19ecGRRYmheNGpoYFhiYDtpcjY/XjBXa0NyZUFDVUNrQm8xRX5TX2pCPHw9ZS1+VG45
fXFBWkVNPjZuTlc+aHUKelY9TGUhI08hPTA3cjlGJlVHT2hLb1JIeVlGTFVvXzcmaVJVcyZpQjNY
em4zeUQ/KW96N3JFaTM0YEI1dUYlc3hICnpWTDdzQHRVSFBXSFQ3N1dVS2RxdW5pLVVtYz4jKHg0
UnttUGpJMXwhbH0hNWdSTX4hNyZGZk5UP1JZeFh4PH16Qgp6RyheaSF2Umc5K0A7ZzdhLT1RfSst
bntRfmFSVUA9bXJlRilDN3ZHM2V+dl4meFhFRXQzd34/eSM/fDNHUGpQenQKejcyMSMyPkJPUmw4
P3d0bSRHUjJwNytGVHsyY0hBdG5hNGkySzFrWChsK0BhdGxEN1VKWFBrdFdFIWdrYkJwc1U/Cno/
XyR4RjlLWUU+UlV7YXdxVHdDZzYjKklpMngoRTZpTXglQmMpQThQRE1zQTd3Qy1jYFB8dzYkPk9J
VjdvKU1aMAp6akR2KnswaylNQDw5fGMhfERIMUp7PGc0KHh6KFVUcFI/Pn1BMWRoe3J8VTRyYUNZ
QldWUXpVPVhlWiN4UmVLUnQKend3TlBwajA2QW1AQkRecHR4aChucFJYQ1QxTDVsWl9iSURvS35n
Yz1LTTV4SjRiUiM2ISo1YXJUbSE/VztWUUVNCnp2UDBzSFVWTU50N1BqXkxCIUZsanBPNGc9KUZw
cGZiUmZ3TDdvXmNQdGQhMjEtVzVLZHhrbjVASUVAeUV6Z2sqUgp6bGA2YjxDSiF1JXt4MEJre1lk
cD9zfiN2dGxnWFYpRXpWTmxmVnFJaXVPNW99RHUhaSZ6a3VWckk8V2NCTFJJdUgKem5MIy1IUlll
NTthSCFFKVVRSjhyPUEzeGtoY3ZJOVlBPDEhKnRWYClgUFlrIVBDdlVUTyZZX1A+Q3dAWCFrfVds
CnpJa0YtcCU+SWFnRnNUb3pAVl9wfTV4R3BmNERgX0xaSk9zODlTbk9rUG1iUi0mNjRSY1AmIz94
Ump8ZytaT1U0Uwp6anhnWFpQSipuR1ZgNVMrX2xFazgtWXdZO0lJQisocXFRI0tiZmljYXN1S2xs
ZXFvVWArMVZGd051ST0/fDhXS2IKejRjd0YqJmg0dnxjbEVtJHhoMF9kO2ViOThVZnd3dyZCN01H
PVM4YSpENnwzYl9gdkUze2VWdDhEflkkU194UG5nCnpZRCtHNlg5aj0ybStkZVJkKEE1P3w4MkQy
I08oKEFLMmZKX00pRFQre2dIWjxiZGlXPWNMTFJwPnVfPmhWKzZpYgp6K1E4IVhwJHB2QzBaNDhe
NkBoKE1QeVJoXmR3cilvQ0BTSUtuVmk+fShZeGc2WXt1JGFIMlU9bGZEP0NwdWJ7RSUKenFzYiU8
bmxjKHF5d2xpPyQ7WWNKbzN1VVkjZilSbkNFRSRWcDVRLUMtPEY3OCt+c1hlPGpvbT12Qi0kVWxv
NXM3Cnojfj1gQE43MG19dSZecDR0P18+SVQqKGpNamFUaXVkPDlqfCpHc2J9SXkxRGU0fVZxTCN3
PHg0UDlyQz5oMzIyUwp6LS1IJT97d0RAe29CcjRuYkM7dUxkJmpOKFQ4NUl5QUNvZmdufSpxRkB9
eTw8TUAjTyorZ3JJKEsoQk1RSStHJm0KeilTeVhPZk5QMzhIcUNmNFVhRHQmQ3xjPlFaI05TLV9U
NyojPVkkckRGVFM1K1lpbVRyRH0jY3lrantBZHYqM0JOCnpHPSY8YjI9RlNpOGd4JEBpPFdgY2dC
ciZWWFdaa3Rkcz8xa0pOezloUEtST2stUmQqRnd8MFIlQjVRcy0yPj44QQp6I0xaPjleVWQjVWp4
emJmb3dgNSVqYTh5T0l1S0dfeGgycX1kOURIOStySFA5QTR3M3VxQTkpKVJ9TStGSGg7aE8KenJS
bEFxUj8hQD9gMCFWaEAwa3RsMmh6Tk9WcHhrMEpeWXx5am5XWWA0dk1KUUF0Y3pPRTFXTUJ3QVBS
TG8ld2B7CnpPK3FtYGBQdk9BdDNPTXJKUylsPGFQTlBXOytYZGB5eVo0REg5cmJBVzhUPE1HS3wl
OyNsWDYzV1AxRCVQX04pZQp6KGRLI1lkeiE1SXBmSE9kVEh0PGVZJGFeI0pWSWU1PD8tfS0rfl5G
bVdyM0BBTEpBX2xRPUlqPHh9XjcwQFZvezMKeldCdTBgI0VFVC1XKlUhbV93IzJgYSt6WjF0QzlK
RE92TSlCbG5FRXMhaVZZKXpVZU9gUCFZQmZDOWktUzhKNnZ6CnpgUj5nOTIjSyp8Um1rfEQrVCs4
PigkaDFCcEtKeEJYdVN5Vk9ibzx4SS1kRFVBNGlvelUjMC1hITUxYT5YbDx2Kgp6VH0kKXpASERk
UEQ2Xm5ObyNYYGRuV05PO3VZZDIkYjgrOF5xfjA/ZUskdU82VT9vbyhWR2QoVFJUQWhNPXNqZUUK
eiZmSFV7U3EjKGdnX2o8eEBgVkkxMEh9bFEpd1BCcj9xd3R3JiRkSjIqLT41RkU2PDx1cVp+MGNw
MHNPITtDYSk7CnpLMEF1e3QmIXFRZWJWWGhYbmdDRS09NDE7RyU+I3w8UWpXWiRtIXIzSEQmQUxo
OW9NelclZ3FBe0g1cD9VJnRrewp6PE0tUSVzZXk7PGQ8b35LMTZacjRMT3NwMntWeGtUeHtxfWdZ
JDh9M3VJPngjKTZBRjVuKlM8X1pxPj9eWVpTUGsKelptbyFsWk0+ens/dmMzcVdERn1EdT5jI25N
fTBXcnljQ2RRbnxvX3Uja2Mxe214bCNPWXJXTH1yX2JRUFp1d1A8Cnp2UHlKWSo2NGNtPVloT3g4
R1BgYU02OX5JekV6bjduIUt4I2tqPkVIZURZVHxrT0lMazBrcSlqaXRUYHlvaHlHWQp6PTB4O3Q0
IV8kMGUpTGBoM0VOe1RVb3NmekhmX2szezd5LSlhWihrcjJyN2YxI0h+bWlIRXZ8P2MjMFhhcjd9
KGQKenJ4OUF0NHB0fUQ7LS1sQVZhOyYybHx0bEYmdktiNUA1NzFVQzJ8bDVAe0Q7O24wa0pQP2Re
XmxJPGBlRGQoaHx4CnotRmJRUTExcGhiSFZXVXlhRkg0c0prRHktUW51QStHRC1Wb2A/P3AmPCZ9
fmVvc31NJWRuRytgRjN5NFQqUmtpPgp6KEFTTGdANllPbyNxLS1gK080LVp0QiF4OU4qISp4cjsm
QjBEJSV+RD8pOXdAWDdMYCtZbSZ+O0A1K0pUY1Rmdz0KemAoVktwTm9EMTtaUTR7c1UkaTNfIT1r
MnZkd31FYzR3fWlwR0Jjelg+PWM1cVVhbWpGYj9iKHFIOHVobG07PmpTCnpRVSZ8dExASSFKYV9v
UTBYRChVQlktWmlYTjBGU14kMXF3dCZHUTB5TCFFUkF6TUNGUXNffEtTYnZFcXZYfXJFZgp6P248
TTh3QkRoRnd0SnxOJD1XfHhucHl2N01BRmUlOT4+SGgreEZFRHZLaU5mRHxYVH04R25Qe24/QTtm
ZyE/WXwKej4qe3d1KikxYV9acTFoXkJDaDBCS01OQSNLb2NnbmVrT2NWNmxePmNGQF9NI2t5b3lh
PE1DfnF7T1g7SVZ6bFhvCnojXjN3bzEqJFBfMV8rRS0pKnZ4VktOeVBNKU0kb15LYkFHbThaRVF5
e25IZVl2OG87YUcqdj98YzgwejVYdykzSQp6NWYhWSRoX2Y9cGtrK3doTF5vRDRPNUdgMVB9dWFP
cHxDbTBPZTx2e1h6bCVEOV9ZXnl5M18+OG0oYkQmb0IxbTYKejEjMXJxVWlkT2shXkNBWEY3QW9K
TUBjdWRffmdXdFZJcEhVQXJrQ3JuTmAxT3g9UlJFTFErcUREYnNEVFQkLTVCCnpCZzYmWjA9Iz0t
MlppNV5vdlF2c2pnRnBAIzlxMURkXmVkJGl0V19UMGJ2T0A8PVI7JiRVWlJkYytWMTdLJCs1aAp6
TEE3VGtAJVBoPkE2UElZNHJ+JVVBXyZIKVBARDRUNGpHYnZeXkdRKkV+aFQzMmBvIz49UnYjZipG
bFM9KG5kOUcKej10Sj05ZnQmbnx3Zm5jJkI9Mns4MnUzQUU8Ml5FdFB7XjhQVGg0dDs0Wjc7NVE/
UUFCKEVLfnkhLSprezQ2SUxYCnolU1FUfVMhfENPUWtnO05USk5nVFMxWUU/NmhsYF5TZiRBKF50
IU5uYEplfE02Yl59eW8+VXUkKjg7KHhYfWM+Jgp6QytTQHtxR35SZEt3SW0pSTFEQz03ayhuMGI3
cXhzSjBJRTNqSyt2Mj93UFRMbC13ZSRYS3gxKD9iUFRENiYhfkEKeks0cXdfcmB4R3p3X1lHZUNP
MGQ/ZmBge3AzflREYG9EXn5WNE92Z09pQmZBdF4/OElqSDtsWlNyJjxWPnNRRm1LCno/blcpST90
NDAwSlNFXjs5Z2MlPDhMZDU8bGIpNU4hRUFBVG5EcWR8WEgzWlBlJGBnUW5TZlVVaWB4NDxGNUps
Ywp6K09wJDhpTHtJNG5Sfm45MSljejwzTmN6QCRhak0oSkRtRVJsQndlWCtHcHA8UF5ZKTQmUm94
cnVMKyF7Z2BmV1oKempWbjRaWHZ6eTJmTlhFKTNrMGBEVUhpMndWR2Z9UlEtLWE7Qzx+fkNibVVH
PWo5JHtaPlJOby1WYkJtQ2ZCO1FlCnolWlZ4UTdgVUgrTCZXST9PbyMhPGF0QDd9RkJFMThWa2Zs
VmBpfWU7YGxaWX1qM0hRKGpVQ35velVUbWlSajdRegp6TCh9R142bVJVJF98NSNFKUFAQ1ImKFVg
d2NwaSZ7PVdHNHdzZ0E/ZmIkeGo7NmpFSE5WK2FHQUQqNWNCckZyV2MKejF4U2UyaT9fS3R1eUo4
PTZBRkZkWWJDIVE2e01jMD1NbUkqRlBycG8/UzgxbnByZUgzYkVMP3NLWDlRcDFLdH5yCnpnKE9G
PjxnMSZScTtUNHdINW5RZkVLOXNCOCo0WUErZVBSOD54THkyQ1NudUQpSjBeRz8tflRAKEBwOV8t
aGYwaAp6UDxoaUFFSiN2WnVLQ0F7eVY5NStWK0QxJTBGdGNSSVF3SCQjITJXTkZmX3MjKGdPUGUm
b2lmZ2FoJjh8YlpKWDQKenlVSzw1WHs5c2J5NXFFXlhiJnVTNWJrfCplUyNSdUojNWxteDdXY2dx
I2peTV5CKFhHe3x4NlphNlF2Mz9jVD4pCno4Y3dGWmFNSlk5ZmJ0OyhZU0haSHdeeEskKz09fihN
fTdHbUZJJVlFdGd0VH0jSVUxYT48cmg+dFM0fGkzQVZBNQp6JX10dkRGS0NtcG1vUn43azUwJi1X
NC1RSSYzMXchZ3wydUBzNGBoM1NIPj5leTQoOGQmUnlPQHN1ezFORzwhd2wKelpCKmlYK2BQJUZy
TjN+WmIqMFkzU2tPLSpYNnxyOzVwKFZreHpHU1RrcVhlQzxtNnVRKE01ZmIhUndTYy0taih5Cnom
I1FybWJ9S3BUS2ohdHJ0KDRHVTQle3Y5ZiFWYUYpMWloKV9JXzE+WWZPMGtyPGhEe2R4bGo1MUlD
eCRgNFp+Owp6Mj9hVjRAdU1GbFdVb0pHaTw0YGVjZCFJRWJqQUorKDRmO3k5JDZ4fTFsPyUxdk9J
ckI9Q3t2Nm1EaHZrQChzJD8Keno2dCQkdiU2bDEyS0lJQVI8aTVmViRGMElHMXoyTWAodGFKKk4z
NGsxJnNXPFRRO2JQPjtBKE5kN2QtcnNRU34/CnpIJSt8S2FHZl44STIxMmJNNUQhNzZPRjVrPVNf
JEA7b2V1KnIqamQ1MzFSSDxmUU5qVz8hRTdoJURHenI7P2sobQp6N29NWFIwfmljZ01QOyUrPWhI
ZEA+czwjeWhnP34xTlpBdmZlIXU1UXtvaSpmJTA0Tj0jPVZUPG40eFopTjlQdFIKej5Qc1hmKlQr
ZnErO0dsZGdQRjZfJEF+KjtSbmBPZjwpaGoqbiNQRVk9clkhV2ZtdW8wZkBzJmRaPztHIVRGbkd5
Cnp3S3ZANmkkTGFHSlI/V2FDT2RiLSF6U3E8SWZLRVBwSXFvaXtvSFUmRHdaPHJDTVAkT2IjP3Rr
OUo0TGkxfj9fNgp6PCVkejRCTWNvPW8xXmZkZmBVPT5XJEF+MlY9KiU8Kn5wVUBLKXpQb24zOGA8
ZnxPcV84c3NHYHF1QlBIUTZnI3kKenQ9QWM5Ym1xal5JJCQ9cWtva1dtUTlrc0UwJVdnWmsyUHsq
eGk1THokbzJOWik5MEoxJlN1JXcpVHZeKEo1KjNRCnp4YU1gUFlsJHl3QD9GeldlWktVcndhd3Vx
JUYtZ2FsVzJ0ZXV1Yi1hNHpKeWlQOTB2V2VtRkJANnJNMGkmOW5aRgp6VWx6dG56V3g5b0NDb3xr
Q0pZIz93SzVzXj1pIVdvUllIQHtiPVhoNV9uSklgQWVreHV0NFY0SFJaSnRRbSpIMW0KekkteX4w
OFg8RXU8VVMyQEZlU0JPaCRLelUtZ2cpNzJGdW48RnlXfU5lX3NSUik2YFh+bCRtalJfPD0+IWx8
SHE9Cnopfk4mfSMwYmxOcT9kY3sjRXdhQlgtSmVKQj5Qcn1zdnxHfjZJaWlabWo5eVBaPiVNTzkk
KHZ5Q0xCbiNeK2lBTwp6WlJXYjU5UkdeTU0jUDlNVXtHWlpJQE4qWFQpbiZRUEROP3p7cCg4LWwh
fX1WWV55TGhpZHM8TFk2Yz9gP3w5VSgKeihFZn0+az1sSFcmfUs4VFhHUmJqWWptanhiKCRIKW1y
dE56UzgyTTJ7Rnh6ajRAS3R3YkFhbEwlZDthPXJoNnRfCnpVRTw8UyZ4MWtTS1pMIUFLT0NFQERB
VFpPLV5lWlQ3YHl1QDlJRGtgUjJgd1YkI2hGZClXfXVZT01zXlVLPllRKgp6OXt1KnRhT18kZ1hy
P2JePDFQfE1kUChUMFUwVn4yWG5VaFZ0THd5dF9KMSptNE5sQFNIQEp4bCoxSFhpaVhBb2oKem8z
aFA4e2Zvei0tX3ZmWSRQSWo1eWV1O0xXdShXfVdBc30+YmtUZlpNRXtleEs8VypxY1ctNFdsNE92
Kjh3YHNtCnpxei1yYkJPfl9GJU4qXmIrVT5hMEEpZHYjLTlWIyYtRyh6XmxkX2p7T287enVrUWgk
anArUStRZV5SXkMhK2tLcAp6MH5mRiZqO2k9WGt2MSpHUSR0d3ktZkNmKkFBbHVPYTBsJWQ4YHhW
PldTYi16ciFhbkBPTFpjMFB9cjkoVUVwOzYKeiZzR3R+JEpIeUZLckxkaGRUXztueDBuJXV8MG0t
Ri02YilyRCZLTHswcEwySzQ4ai1eWWlYejdCYHBmOE8rQlZ5Cno9NjJpMTAlNH52RUBPKGlLZEh8
eFY2PGZQdmV9NG1vUEBmeVNEbjZ5YHB4SE56LSYmMGAwQ0V+QXRXU2U9Yzg9dwp6UktaMTk7Um1G
e3VSaGxUM2I7JnVDdkRxbFFTZmJkaDwjZF8xXnhqMlUmYU16a0FAKkE8THN6X2U0K3p1eEZ7KkgK
ekV2fDMwWD4wY3JoR2pvUFR7KHxUTCNsazJKWEZ2SDlRRk0xcGphVmxwXn4rP25gJEx8e0VuLUwo
M2BVLXVZNzxYCnpJRnV6Z29gZ2c/WFplN3dHNmxLWXFaN2E7IWB9THlxS3NuNG9lWCsrIS0melNl
eTl8XkRJRnB4NiVKcDd6ZVZxcAp6JnglVW41YSQyIUJOVDd7TDNGNGlaSiR5U1lucmElblVLSD1p
MERyVz9pdjBDOHU8PVIreW19blA8Pzh5ZFhUWVMKekoqeD9pZ084fEMwO1pSUnBSYHIoQ3hpKXAq
QH5CbEYpUmYzPFVoJDRmOGpPPXFxeWBtaXNmbVd4JlNgd0JpJnN9Cnp0YWcycCEmVEBlZDB0Kmcx
Km57b1F7MzViO3dOa1U2aE5janhBWUYlX3BzZj05SFcpfmo4WTxEUUhvfFV2VjFPUQp6JXxLT2lP
QDk3KnkhT0ZzR1NGVClrOGFwZmYycF9YWVV8djZHIWR4KXZxUiNjdH1tJmRWcj07bzlxayZKMD84
dE8KekgrVkImIVUlbUhgcS19a1Q8aHR5LVR7TmI/bDYlbkc5QmBKODlrKm8qKD5vT2FVLVZVcmw0
Y3YjQ2xPVlg1NjZVCnpsTTErdXN+eylAR0NhX3RFK2Z9IWZ8aklQZGJUS1VGVnteVFE1anVyST0r
MnBIVk9+V01rOVZYLX5UdkQqTHNKNwp6TiZwPUY9SGZsN09Xe29kWDZ+e3tQVVp6X3lCRHRaKX1e
QSt1NWBMPEY+VkpvYih7VzYpcmkqQiUlP0pUa1h4JFkKejM1VyF1OXBmNTJJZ1pWaXdHJDRVbGVk
YDFTLS1GUU9nQyp5T2UkPX5Gc0o2O0VeKFNpYzlWPTVValY7ZmxpMHNOCnpEUUx0QlZzZ2clRj5D
eWxaVn03UExWMW9sR0lqZVBkOEAwaU5nZk5qYiRTcj8lckB1bmJHJSF0JG1gbD5WWE8mMgp6JTc/
YlkqWk9IU1AjLW1obStweEdubGJhSWctdCtaQGhzaXIwNEZ1bm13dXlrSDw7WXVrQGB6KGdmPTsz
dD1EM14KejMhT296Wk5GOCg/O1l3XitWNGF2K3YtcTdoZT1sNSNZNnFoZjRtPENHSmw/P3VKclc4
OVJ3I2RPc2xYPjFxZlVWCnoqODw5Um9BUnkhKn5gTlVJVHhORSFqQGt4Uys5akBtMXp4RDZOfEBo
ME14OyFJZkI+NlReJE4kKnA/S1o/fHUpWQp6N0JIQEdZZ287RGNAXlkwUCsrR2F6MWZLNFZBUk45
S1EhMldHdnZoPmRhT0FUWmNUMkdrJl4/Z1A/MFF7IXs7SVoKekYjN1JyVkJFQGtUVUc1Q0V2NTc0
SD5fOU9FRXtoSWBAdytjdC05fCo8LWFLIXlldWpRPFZCVn14TmhHTjE2M2tgCno0aVNYR3RjdV9t
PFFmWVQ5JWhCd21tfnRCQXlkeCMhVGNKMTs1dnQ4eH5IT2FmMzZRcGdLUXhId19zaTAyTiYoPQp6
VyhIeDgkOC1Rdm1pXkxvXml2UyNEbzJZNzx5Y0x2WHZfUEFCNVlyTXZkbUxOUnt9VS1QSkxPZFNh
emRJKk4qOG4KelolWj1oOC1zciokeW4+PVFYeV9RaCpHT05nYHooUG9rfSQqYFpJTlE4cSp9QmR1
MmROUkQ3NWR2WV47JnR6SShwCnp0QGMjXitjdG4yeUFvdkVffitgbmVvODNvT3k0RlZPZCskTWZ6
fERJU2MmUmFvRDhjeDdBb3c+XjktcyF3MXVvUAp6K05YcVFZIXB3dSNzemU9b29IUz80ZTIqSW5C
KnRLUkRHQ0k1Zmx5T3FqYVoxRDhsNDQ+VVJkTiUraGpCKGFCIzAKemEra0l+cyQ2XiYkd0dzK2pn
dlBUPTMqb1orS1oyZ0FRWV91MSN6LUZNKTUlRTxwTXoqVmwoO0NCUkpQWE5HKyYrCno1a2tPTCpj
RVVSa2BJbiheOzx2dDkkRTxQYSUhT0dDRnc8S0EqPXAkOVV5JV9VI1I7O25MKG5PanUxZitfZXU0
JQp6M1JeX0x6ZlBKV2srSnNTQCNlPlJgY1JFd2lzJTNhcTtXfmItYF5DVnBPXzx1SUlPc3x7OHU+
Smt3PGtOK0NwOEkKeihnUGpeVj5AQHxjT0VyM3BSJHVpUlhUZzBBfWVhcSVPdiR9bEkzbk4jQ3RL
UncmVSQwbkd3b35VKzV1cEx7NWZOCnpjTDNUUkVMKWFmOTheNiRKOX02cSZGVipyS1hGfl4wQF5l
MikySzh3YyhNSyVTZGh3VyZ4JlB0NHlGaGghQDsoRgp6MlVwZyhAUCUyYjAxTiF7VzRvcFRRI3ZO
TSNOPShDZUJBMC0ydWo8TFVmcE5nbXtORldLQkNvN2hvdyZ+QklgansKejtRQUV6T2VteG1xYjhU
UXkxS0lXb1EmfC1sXnstREFkamlyYmlWV0ZlekBnPUhGeSFKYUBpeGo+RjhzfGk9Qng8CnpKe3ta
Kl5lTVFwUUJDamVpOTx1aiZ7YTN1JSNUVSZSTH0yXktfKUFxbVlHcW83WExuZUNmfUtrTEY8NFE1
dH1kWQp6Vm9obGRCMmk8fWxxQmJ0ZWl0WUV7an4jYE5EUE1lSk13YipQfnlFdnd3Q0xyM1Y1Wl5k
bXdUSnd2XlNCRyNPUH0Kej1EYFlxVUBlRWZxNVJFK01aPyZGeHFxO2h4dnAxQk1rRSlARX5xSVpo
WF9vMVJ2UytXYVVBcjt0ZDBFa1F1Jl9ACnpCUTk7cElzO05nNkRaU20tcTRNbVdXREA0SFpaSUB5
SHZuITVKX0pCTWp7amtzaitkUDkqPH1ibDtJXnRoKGtwUAp6Z1dqYlRzcFhybTUmJl5TSF53bio0
bjw/VnhBQSZBMkpKOX1Vcz8ka0UyY0JoKm9YZ19jT2xYOGdnYiZ2ZWxgKyQKelF2cWJgUjQlVjkp
ZXsyb1orZ1FzU34jN04qUHo9UFcxfXBoNF58YTdTaj08IyVDcHBEbUdSbl5ZJk0zbCYpUzBXCnpo
NnpCeyVYO2RucndjbiRlajdCNTtVWX1ScmczdUJmMURHSjhEM2RtNkcjQypTaigwKjZTeW1CbTdL
NGpAI3B7Owp6I31eQjh4X2ZjKml4V3owdnxXO3N0JHk+fVAlR0BIX3hFWmNYeVFKS2VjREdrd3tY
QzdQMjI0XiphTyNxZk9kVj8KelpRXlkobEN2Jm88QGZpcEg9S1JXKz9+VTJWfn1NPFdsOV92bWJX
dXNoK0Naa0ZhcThUKV50Unt5bnomJFFkZ0RKCnpGQkBtbDUxR2o1YE83U2RYfSMkYGkhUXg7XkBS
JTkoX0B2RFVSY1kkQ3BkZjFDfDEhNypVaXJWaFQ8dTY7TmR+dQp6ckVUSk42MFc+N2hSR29WalVU
fXwrTGZ2M29uIXNOe3xue2M3QyttYFFna25SQFVlZX08YTsmdWFibzswRTcwOTwKek42Q3JfQ3RO
bnlIPXBxelhOP0Z9KClgdHo9Y3E8NjFXRWJqREc/dGU5Pj0tNSl7eWlkSiR9PjU1VzIqZipKWjRQ
CnojWTw1Rk9afDBGdn5IJTZEO1kre1loIV81SUxUUyo2ckpARWJEbDE8ZlpwRlJRci1MZTNvN3gw
KTk9Pz1pa1M9QAp6RkE5cklHVldnQlRuRGBpdWEkYn5AYWtTODR7JnpuaWA7RiRTZVZpcWE8c0hD
KylhWSszaFVHez1AQCYkPEcxX3cKeiN0R1RwOHwrZHFocUsoPkoqbjNQVm1GU2R5fTVsMmFkWT5R
JllVMTFPa0g0WSM2bnMmUURYKExJSCV4eTAwJVFoCnpkSzY7ZUBAVTNKKXtKMj5WUyhkWlBGWSZh
TFg8PT1VTTFhKlEyV1RlcT4oQDZWTX45QnBfN35ibnF1SDtMKDJDTwp6ZGt9TklJYCM1QkQwaUEy
UlZzVHE7STRIISN+b0JNclZZd3trX0xIQz9TVEZ8ZGdeKmp2Mn1UbDdPUSZ5NENUNlcKejwwejZA
Z2BDLWVOQEw4fndkQj84RllndVg2anc9dV5YKyRWfEJPKHVOK3t5ZEYjTTlyZXNRdSFnMV9IVj9o
flJzCnpfV2RXd3o8NyRudUlwcyNAUkEtYHFNIXUkayFOVGlLNH1yflNOZ2Y3WW4tWSp4PnI2aSt0
eylPblRJJFRGK3VXPgp6I3QqJmxCMnAmI04lVGdSR1AmRTE9dGg3VntpQHppUXxaYlYxNzBBTDZ4
JChrK1EoO0ExYyhvNTl5TGU2ITdZcmIKejs3OFZtXnpeeVlpdUZRJj5jKEIqTTR7am1lRFBnT2hY
XzY8PjdyKkJEWjRSUEhvQ3M1STJkcyh6ZUFZRWtEI1lGCnp1c2hBb2NieUh2SC04PyhzZXtEcyMw
Qkw/Qj4mTG56SHszYTYtSzkqdy1mejI2cFI2WDQ5REJgcl9udXxWPk5WKQp6cFRYYXZhVmIxN245
Y1hnanIkOTk3fClGTFJ6KUJDS31PNGh0RHpSeFpsPE1ZPnVQZmo0QGNyOS0wQXpaYDU2SiEKekI4
bExYZ0pWZnl1JW5eTkNNKmwmYDApK0JQKSojOTR0NXM5enNZU0Q1KyN5fHZUSmIoUyErJEdqYElf
ZWtpdzxSCno4cCpfak4yO1JRa2Z1emVeTUJ7WWdzZXg+UD8reUptbkZFaEUqWFNqYFlycThyQ01R
UFBOMz1RdzJMWmg2Mlp7fgp6KXJkKTdZd3Y0LSRhN2pPczNNYmpJYmA0dzkoelRhQT5ZTFR1cV9r
SjxQXmcjdzY8WVNXST5ebDA4NlZIcExZLWUKelM3c210c0MkT1VeaEkpbTBCNS1GaUpiWGU8VFhG
PFVuKHIrMkA5VUUlQ09xfWt0Z041KV9hZTwlKnF5Qm5XaXY7CnpCO3klTVpoYkNAWmdkcFIyI2Zy
c28paEhCNTB4cENmNlgjTGYzcUluK2JnM25EYW0rfjU8dnI0ciFsajVQSHFZPAp6e25eS2F3SWp7
YjlFUl5xKUgtbTl8OXVvVVJlUjtzQytyYF8qaGhzb2tQMTFaa0p6JXItfDw9MEVpaWI8ZTw/IXcK
elJqKEleWGZfRXs/NiE5c1lfeG9uJFFUUkk0JThEKCluWH5DbWZ9OEtBNGJ8YCYyVGVEZEdJZklk
diR7NUlmYkleCnp1b0YraGtFY3UqJTJFTmY1LW80JWpSJXwqODZwbTJ5YDZEQkMmWFFjQVUkZz88
PDg1ayMtKEZ0PURHdms9K3IjaAp6Qz97K05DfUojVChYVFUlSnxuMDhOKEM0LTtoKEBuU1hkPDUk
VTVQR1F5RmImSDtpYGlDRnszYDk3QT1BYHBxfTkKenRgOW5vJXBgaEstdipIOUUjZWV0anlUZF9F
c3ZsX0hfbFQ+NVYxeTtsIT1OaERxLXYrNF8hcHRPSGdrK0Mkd3U7CnpeNVFNaGRoMT9PWjYjKDMh
T2EjNVZ3YmxFcHpTRVZWcFJOSHV9I1RzNk57JnpAfCs2YFBTK010TXpWMmYqeGE7fgp6ZGNCfW5V
UXk5aHNWfHFVK1M9Kk9jYjRySDdIPXZAT0hJTVhRRnZhKDw7VXZGdGcjRDFPaXYjJVNgISRFMjZg
R2sKejZsVGtoYkJUeU5pPzFubTtofm4rO1EhbEFNVntgQ1UmKjE3blgockw4RE9fMmpgaUt8anxC
JD97Z1FYfVBIbkBFCno9P1F7WldNc3k4VkcyKkchXk4wMmYxQU42b0F9WCR4Q0ZxXmJuUU81JHRw
RWtnX2pTKzhkS2FNPTh1YnB5cEtBUQp6WjtpQlJiRjlhUmw/K2t0YVRYTHo+K3Z4KDxYQyteUjdE
SXNPNUkkVz1Dc3QxeUtWMXR6Tno/eWJUYn1EMUFaYyYKemVgODZ1UWIwdllIT2RHKm1kJDcoI2d+
TWFRNnFJZGIzV2E/T3dIZn1yckJ1TEklYyMxZEVuWjEkZl4zezhDZzI0Cnp6NGJfb0Jve3cqdDA2
LUBkSTdZU1NrVH5TRER1N2A3Uylvd0c2RndDVEJeJit6Vm5SQF8qPlNDWXFpeUVgPHJ6PQp6a2Aj
d0ElSVJCYEpnRHkjVWVzPHtOfFBjTlNhZ3Z2bF81YnEtPllFdEY2SUJWN353KHchYEVUVmFKalUk
S2dkdjAKemFFZj9GbCtvMDQ+UXtaSzdgWTs+RWtUZmRRTl5rX2x4eEs3MzM7Q2hpSkNXQkE7VUJa
d1Bkd3Y3VDBUfXJLY3F7CnpfXmgtTk9ERXJzcUc3NFdqKVJrcDxYeDcwb2t5M3Y4VjRoXzRxZFN8
PlFlaiteMWBVaj58ZktVblQyP3A7M2lIZAp6UDVGI3liQWdOYEJuOHt5OG5jbSpNU31BN1A0dT5g
Sn1VMWcqOCMqdzlHTjlga21HXzlPYlBvb0l+MUJBaWU1WX4KelY8ZldmYld7OUt2NWhBTEQ7e29y
dUtIZXxaa3huIT9oNjxQaSZWO18paHFJXmszRWR2OEpzcjMyNUE/NCZ1cmBHCnoyP3gxRXhpazJp
THVpRjduaEVpUnc8PVo8ZlpEPWdfUkFqSUMydmc4PnQydllaUlN5fHZxWEFoKURhVyM8OCEwdgp6
dD9JOU9VRjxyNzQ1aWxnPT1tPFF3WE8wMVl6QWItZ3s/YXBSYmdUfXNUJjZnMzJ7Z1I3WVBraXVW
byY/fEU3Pj0KelczKnEoYUAjQzY7X258enhJaXFMRiExJGRoPTZuP3c2ZENKYz59c2gkdnc5bVpU
Xn05R2x9QTlaZDFKNnxGcmx1CnpeVHxrSk14ZVhTR2lNWTw7X05RTTN+akAzayZ4KyNvOFh1MzdC
P1dHdl9ZflIzSk5oJTkkbiNMTWM+fkRHOHomcgp6WGNXUFlVRl5qOzBKeVBxb1p7fm02ZjlwNUlU
ZCtqJVpGQW54YD1GXihgQjZxS3VjOUdwVW5ibWQmMGd0KHZ6dVIKelVxa0pTWl9gcnxWPEZaIzZ3
Vkhkb3QwKCVKITIoYWNeWXI4ZXB3e24jIyl+O2o7ajtVVk1lNStrM3g4WSsoO253CnokZk17KzxC
LX5zOyNjLWJFTGlhOzJzJEphTzM3UDU4PXZIeWlydVRCOyk4JDFiUWZJMSQ1NW89US1KbXNIZyox
cAp6IXYrJkt7OTkoUFZsVypsLXtVZGZ6RmMhbXxIPV9yYUNIKH07fGBMLTFXXmd9PiNPRUxCK3hI
c1Irc1VLLXp4SSgKeip2I2JsJHZ2LUl7cH1lc3JuKjY5PzBhIWQ+Uy1KNHVucSt+en1KQm8raUFa
emNMYlkmWGAzKntye0d8REpITWpnCno3diVsMkU2eiQqVE90Wks1ZHVoMUZFPzJLb3Q1IUNFKldB
VUo1ekJKansqMzR4JG5DWHM8SVIoS3lATntTdUFmcgp6Q2B6MT4/Xl8rbEFSbUNWTHtIRWA5Yzcq
dkhxRSNPKloleVFxRzt+ZmxxI09oOVdYWmJqK08qcHNiTj1vanwzWDIKenskfjtebiZwQEA1fE5Q
RWlAPTdGZHRaaCEzSkxQdnA5dXxrKSE2QC10VG9uQjcpO1NLKyRMRyE4VFlZaFJHNWpiCnp1WTFK
enJwUTY5M0hJeUQpQVhzTDtRQSlZZVk7N1lleFM5KCN3RSgwSUN6OW5rfloxPW9FX3A+amYwbCRi
UkVuKAp6Xm9PPDRDPmcqLSUyJkliLSslWVhlZXc/SWxIWE0lPEFzQ3tedEc7PDc5YXhXKitxdUFD
NFVCRT9aZl9SXmhfMF4Kej9LZmpQTDZFMkBtSm1acjxXdV9nQ09TR05fY2ArPSFvSzJ6P3QyQl9O
d3h0Mm8mOVpsTUNEeUZWYElNQHZwJlo1Cno/fkBseXt4QXgqNk5CT3lQZzshb2wpckRoYiNxbG93
OSFOaGlIdFZKZStJXnNMO0R3YmJFZzZOSlluXnolaWFQQAp6akR8T1VvVSNYSXFJekRSZUllYn07
SnlscExGMDtvNCglfkgoKTY3NjR5VnEmPnNXN3hVKUI5I0goZkI9UUB8JkAKekd2Mz9ZUzdjaUg/
VU89T0A0NUUmWSV0QGs9SzBqK1NVJHN0aV5uPWojUjNOPiZyVkNrejtkcitRQCNecHlXVGg8CnpB
LSN4OVI8Q2A7NksxeHUrVEhSZjV7alBkRWt5RHhIZ0wqUipxfl5lYTY0fV95RHNtJVU5Zzh0Vnhe
WF9INVJXYgp6S1Q4K3d1Kz9LQTExY0M5RTN9LWx1OUwmYjByMUdWb0M7MWFfcDZQeiohNkYpd2FW
T0txbUd0alpSfW4pSmtqX2kKem4laCEqSWhOVGdqc3R0emAxa15gTFRXa1MpZjI3RlQ3KU91Yzwl
en5laFdAWnpQc1QxciZWVjJRbEZ1Ry1pSlF6Cno+PFRvcnwybkNJKTJoYjBQfWJGOEJ3JFVDPGFx
V1NhcEAzN19hTXRIT2gjSz82IUAhdEtFVSZIdns3c3xtakV5egp6JkdXQikwckVQeyM/bXZgaiZG
eih7ZDkhQGBHYGBfdzd5fH1ScGU2M0EjUlc8XmN1MEw9Z14lUVpKaGdDaGBrV04KejNPZUptVlAq
bys+ZzJpXk1ZWWZuZENObD16JExvUGRmaUduTklWMz9PQEVCcnJVZyo1TUQ0QytyZytqP1dPRj5x
CnpGTTxuJCZwM1ctdmxwVnlRa0EqVTJ5PjBRMXBRS1loQk1oWHZTfCNnXnRWY058Qnl2R1E7dTIp
Y3xzb2F1R1pvKQp6ZSZDby1XWjZ6dlc/VjNsMXoqPXRQSmlVR0Y/P3dpKEt1SlRPJGVePHYtc09u
MFBTK3NAMVliIXBDRXtiSkt4WmYKekF2YkJhPmEhakNzSzNSeXMkSjhpMVQ4MHZPdnw0N3RNN2Bk
YitWRHVZMyg+Yit1VEIjKz1tZVdRXmkhWmJOR1gqCnpfdlokKSlzcl51YGk+SkA9KypiUFRFZUpg
YiZtUVk/PXRLdzNyOWxhcGApdVZ4QEVSVVp4aSFzYWdwI24xZlBnZQp6NWswYyFEcikhTW1NPCZx
SFNwYGFHS3ZxLW5WXisoT2xsNnIrOGJMTllwKEkrUm5qcDxQUnJaVkV2T3hDVnpZMz4KejVDM2xK
NS0mTSlKWmdYNWIhK3FUQFpzJElpdnY/YzZeYF53VUZWckhEJC1hRkBtdDAhYWdHejJzYCZAOVk2
WjVOCnpxI1F6d3NyWTd3aShobm9JNjJWN01CWGQkN21zbFhWaHtuSlcxQHs+XmFDXm9rQlVyLUIj
YHtwZV88d3JXcDZETQp6P0ppfGplVVA8Qng2VldaRWw4MHU2Mn5+VDZwMm0teH1+cEhDNlQjYFlO
cSVvdjdGUEYwbEIhMTtfVFpNdX1xcUMKel9BYn40PnJLPnt2JjFYKFohXkxxKF84OylXOFhIVk1g
RU5kaXk+aHhLKHp9VUlmalU0Qz18QHJsaykwJm16Zmc8CnojSjM5QXxLaD0tb21ASHx4WWZfcFpC
bHQ1U2hraGVLPiNPeF97Qm9RIT0wYEFKT0xxfnNtUm10Z19kSX0mXmR6Ugp6dFp4TTlIOyQxNWNT
ZWo2YCh0S1pgOX1URWxTQ1lROVg/eCM5fEpGPGNpVFEzeW1ScXdlKTxCSExxSyo4TEomRHUKenVi
MEh3NjxReVMmQ2RROVdxbzZxVml8eX12fXUyN2hWdER8WTFCJC1rJWIzU0pJNWVHVGk4ZWxPN0Iz
Sk0yUygpCnorVWk5Ukx+NWlmU1g1ZG9seHkkfGxhVkkpSXI5QEdYUzZTPzx0T09oeTNQP3ZDUGlf
cjJye1ZrMEkpaCVtPmFqdgp6WmQ/eWlCXjF6YkZWSlJfVmNGN2B1MkBoaj04XnRWa3RwYDNDaXhQ
SkNhdU44SUc8VmU0bVl+PFVRRjR3SEloKkIKej9AMGhHPlE8WDxUP1N7fEx2QlorblRyQmo2UXV8
UjJ8Ul8wKGZsOGQtbWt3WHVCMmQqIUNib2FXODAoPEVQdFh5CnpoOyNncyp8ZkhfVF94QDh2d3pf
fm1YOHFtTDkkfCNIOEchdGZxKG1eWGBCKSlyTHgmbG8qe2ktcXIlN0IpNThNWQp6SEx+PkhQdzV+
Zk97UEs0RXkwPDQ+WVUzOGtEey07Tll8ZWw0ciRyQDFvVFpxXm5DQn1VQz5KU1J6VUxmdm1JXlMK
eihMVllWVVlrVlB8Nl5HKSlFYkh2ekhKJis2SzsoT2hWU1JuJlYwWmlYdD9fRnhfMjxzN0ZiYG1g
PWNGUVJzWCg1CnpKfn5tSDJ8S353MCY1ZGw2JCU7ZUByd2dkdz4+MUw5N3lmbD9FXlUkN0lKKVBL
QENiVmllZ31oe0opPSY0RDFPPgp6Yj9Ea31KV2ZKVktYWDB9VCVLSSMxbjRzMHIxRGN3VGI/RFg9
bCY5ejZgdG0rOWx5dUtIPz80d29FRkpedmgoeGcKej1SelJAT01fdHMlUXt4biRnens1a2N8JHJS
X0p3MzU7c3lnLUFAblF4NXt8T1pILW1JKGEoVEoyKEdtcnopaHwxCnpuTmgjZjAyXyZ5QEdgTWNp
bCpzbDU4JXNJdn1QcVQqNWU3a1FLPDNIOSokJTwhdnZNfGtZZlVBaD5TV0U2cT59cgp6NX5aKlFN
aShzbSZDPj5xUypAaHd1QmhEKj47fSRKeSUwSn5EMnhVO0hZS3BjTHF3WWc5QlR6Xys8WktmRTBD
Pj8KeilHflQ/K0BSQThiJGRBelcoeVk2bmVlbiZmaE96Kk4/UnVWZk8zeGloYDNxaiRkVjAjOSkw
djwrenY+MkBsSjk5CnpsNz9+ekhZJCR9KEpwQ1YtLXUpSCptfUczMFhjTGdQNXM8RFViTyptOEQz
SyV2KCp9c0U/RC0tYFJaJGo+UGdVQQp6KiZYcF5WUXVVS3spcDs0UTdzN2c9YV4pYHQxe1pDMS1J
JmZLKEM2YTlFSjx9bW44Pk1reVh8ZHJvKzEtXzV9bnkKel9BPVFkYUpTamMlNW1eK2YhanB+Tjw8
OGkob0dWbW9rTD03RXRPbVg2dk0jVCNXOVB4QntmPiErJitfNjZYOHBgCnp5c2h8OCllNCFqMFVA
dlBIYHEtJkF8eDt6cDRvQUQ/UHFuSCN5YDxBSWRXa0Q1QklMTz17QHJ4TEp+TCpqdE5FMwp6WmRW
YnJAV3Y3WWxhaFhkKmNzeG90TWE8dFFDcDgyYW15VnNqIUBMdjNjY0hRPnR5X3ZCO2o8XktxUk9R
PlUzPFIKel5RSm5PYDE9MklOdzF4ckk+eSQmcEs2YXs8amlYOVV3JWh5b0tfcTUoMkUzb00qeVFw
VGVOP0NtWTswS18pN2p0CnptaEV+ajFqZ0s4KXgrZGJ1Z0ZKYHZvbygwUCt6UjwhK2pufDZrOTx0
cH03dk42YlRGbHUhU01GcFEyWVZmNzg0Owp6MHM8TFpVfSFRJUdgKE81UD9wdUVLOyRxKzA9WWc1
UnlTTHYlZDNsPns4Mz1MKllpOyo5WHJycUdFakpvI3d2MEAKekt5KilCPHhzKiViVDN8OWxlVVBe
IUQwOVJiQlk+eVQzXl4jV3cmdXJKRXpOeExaJmcxbDNyeWUlRiVQME9zIUBaCno4aitJSE9pN2lV
JnQlP2srRWlUWHt8TWYlUS16UCVkJk89NVFITlozaXBeYWZhT2Yyel4pdVk4Y2t3b2oxdUsxRgp6
c2kkfCs0XmglYSo+YjZmcllZMXQ0aWM2YXk2IWhzdGU4fFFjYGNpSkFqMXV1MyYxTjkrSjYpbkgy
PjZJUDRzMDEKejJqdGolK1cxX0dqLV4jajMlQTlsYFAhcT4zS0FJKjFpYyR+PWw0Vjl3YT19QCMl
JndqTWBrYVlNbUk0eWt2cXEyCnpFYEklJmExbEdXREtsTUc3ellhX153cj5yVDR8JmxkJUlwUl5F
NlgxdHV9S2g/PThKLTZNLXFJWGVOWkReVmR6Owp6IzAjeiF5RXl7TUN+dzxRPWJEelVIalE+Qyo8
YXJKc1g+WkNoK0NtZmoydno0KX1yWTNNdCEtTShRPmxjRDJqIz4Kem53VFl8PWpWLUc3SWBlUHF2
cmNCLSNtS14oc3JYQ2tOclFSWD9EKUF1TGBUbE5RaFVSViVOdHR5ZD9tTXB0X004Cnp2N2dyZUo3
JVdwYklRSDUmbEEtaUJiZ2RSZGNSQVNNZ1pxWHJLKDM/d3c/NWdyNWNRWFJeamlRdCkhYUlJcUdO
MQp6dkxTaVA/JDU4IXw2bisxOzVVZytxYXpMJHo/eXVMU0l7Nzw1SkRMe1F2dkR2TW9yM3tTQjc9
aXc4O35fK3N7WWYKei1rfjVuJCk4KHFNdntnM1N3ZWo1dzJOKX1YTHtPaiFEOCt0UUZMdCtaNmlN
STU4NDhWeFYjUjFOMkt1dlZQMERsCnpZfXNCNCo9TypfUT05dUdPTF9MSiFJdnp8UDE/dmNIWkRE
QyNSbk9oV3ZyRiVNKFk1eU5HJnRTdllubDhNR1FqPgp6bXhgTjlTJClPO3E9S058M2AyeVE8Q1Qr
IStEZjQpQnwkSzgwXnt6JipUP0ZZbHNaSXB8TD8rLWBaLWF5WmUlKEcKenRpfUgye2Z+O0tNfGVC
KT45fj5VVGMwTSQ9OVlAN3YqKk9xcT40aTQoOE13SjhvRzBnSDdmO3ExWGZaRSZ8VF8tCnpLaUlT
ZDhxLUQ5O08qeWBibnFNPzVCQ1cza00jfSlqPWhqLVMwIT1CYW1MPWBLNzZsTV5wYCV3d1lILSRL
ZD5tWQp6T2pDWCZpX0BEdnZPUH5hZTUqYGVvTjRiTko3NF5AQ0tBXl4pKmo4Iys0MlJ5MDI5IzdF
cXpta2JnTiVmS3A0K2MKelB7MDcjbjN+YHRlVGItQXs+T15scU1Rejs5TXFFTkZlZnoqNmdLVyFe
SSFpUTJhRHdkZXtPYTxZUmBmKDB0Y3t9CnooVTklNGtOYE40QHBnOUE5R3psPWo7aHk1OUpgfmxy
RzI5PSR4PmBZKH0peTgjR2pyWHs/NytIQEhUNVBRYCtaWQp6Tzt+flhGV1A1Sko2NHt3PFk0fT83
ZEt1Km83aG04YkU0REV4VFRmRFBPIXNGN15wLWY9e2hKRV5FJDFTVnF5NFgKelhyTlZEe28xRCli
fEZHdCVjNTA7NnBqc1I9YilMMS1EJjE3eXQ4ZVpYZzZJX0VSOTZxKkpsJlFVZXFSd1NFeHNZCnpC
Umg7ZVJDXmNTaiEkdEJBJkxhSUkjdWQoI0FTczxHXkVRWXBSZlQ2e0VVYVRtOyM+Zk5UVDU9Xz95
Nm1BPEQ2Ugp6PGt5UHl5Vy1sPUg7JlpzKks1P3VYK2VEe1BiN3tFcTxsQUt3KSo+cVEzfj4rVF8x
I2ModkAka3FFUFotQylUdHMKejB6P0taUnUoMiFibGw/U1pOaylyemEybikrckUoK0YkS1JkUlY2
bWteTzhEU1pvSyZ6OVhVfnI1fUNlWF9aIWdyCno2WnU8S3ZHKXRHMVZDfVF5R0Mhe3pPUkx7JjNA
K0RxMEc+fV85VChtKztCRUFrKjduOSUwT0pCZ0J2Wk1IUH1CUQp6VFghRTZIIXtDeSFNWWE7PWZG
UkA2NnBIb3w2XlBCb0JGY2VHIVIlVmlybjYrLWxnbkIwLTV4KkRoZVVWQlVpT0wKek47JUIrV2Jo
OStAaStpaWRKZnxtIXFrMSU1M2lJeE85Tz81Kn40bUU2VWYqYVJsPD99cElDOE9Jb2N4RiV3Rjxx
CnpZOSt6SXVVJiMrR24kPjAoNk12RUxIMX1SaztxMH1ge1pWcXooOyhMPEEkYHs5Mm8mSFU/OCRu
WmNebEIjVCopfQp6OU9GQj5KUkQ5dkVsKzV0MiY7TEkzOEske2U1I3x7JmNNXypFbnhlZFplPTcj
UVkyRVFjanE0bWNUJnpWbUYodnkKemMpSWVKQExfTmVUVG57Qk05TDtJPF9JT0sjM1VaeDVLKj58
RnV2Jmk2YlR3VDl9Vik8aGhzJFVlVXg0I3RiT1J2Cnp8M2VjKSE4KWxGUW8pSnllfmhYNVowKjk3
Q0xPUlEhdmN9V190KlE0O0VndyFxYzZaSVhAWlM1cipiMDlwaFRqfQp6VX57YUJBaiZFTUckU1Ft
Qm9TcChAQT5lPjBPQTw1PW42ZmpjQkB3PkR2OUJLJnFvUShnNj1NRTJOPFJGPSMlcDYKejMtcnE9
RTs3fjl6Q2p7cilYVSVuYVo0b2pCZ0h4akdnMDZvQlFlMjNuKX07WE1FITxwbHBeJllMP34jITZM
PDdtCnp2VGRaamNIcD9vaXp2LXJTK2xDPWdkMThLQXFWPndtWDxxPjtlN19ZKWJ8KUUhNmVGKVRi
bDJoe0RuaXB5MFU1VAp6O3V3NWxrLVdVRWJMJWlSUk82SXRZY01ua1lmcEBzUVUpMnxfdUYjcGUr
b2JoYyZjY2YrOTl+SE9HR1d0WEY0e3wKem1mU1dYJXpMeV5Gcn1QYHFhVUhaKCFwajVJMTQtaj1h
UUdmYXhmZ09yR31VUjI9cE1ITnNUQylGNHBnejNXVjAyCnomfEtwLSRmcV5MakFBQ1YlRz9NOz19
UlF1NUx+XnorYENFMTg7ZnY2M2dubzs7KEZtfjtnNXJVTmV1MH1Nay1VZQp6QH5uPSNvQj1JJDM3
O2htKEZ+QVc+NWt8cihOSmAjUkNReVJGeU8lfjtUcSQ7cEpCWlUpbzBGZWw7YGsmKTRhZHkKem5H
PCg0UWBQOy0xdCp4ZlNVSzRtS2ImVjA+UWckWDh4Ul99XzwzQyRtfX0oNHYzOSFuJiRqJi1uI1Iq
a1p2JUVRCnpTd14zZjh9TGpUMjsjNSs5dXQkPlQ2I3wmQC11VzhvY0BYTHxNMzJJXjY2UVlHRT0l
SlAyNSNDKnM8Q0N4S0FPSQp6KGN2ZEM7cDVgV0o0IyZyaXQ/ZTE/bXFeT0NUcnI2R0soR2doUUJp
MjczOXE2R0xGU0w8ZSY3WTR8WERIUmxYQC0KenRtVklHZkJhQn5CbEk7NTdNMzx9O21scj9qO0Z4
dGspRX44Y2FaPiVBVSptTV84Y2BsV0JhNFlsbjlEdTB9IWlTCnpAbzlRKXg+TWdIdE1ERWRVe1pS
JVg+fi08eiRpWD4tWHJgK0BCMSNJdGM7cHA5O1BKTyVLaGV3NmFRZT4/Nzk+Nwp6ZmRPKE4oIWop
ZGhiYyVzRjdAJHl5SGk7PmNAbUZnWDRDOENVMERrUzxxaW1rO21KWHwrTCo0JiZ2aUtseUQtKiQK
ejFUVV9JWVUwaT8/SV84K18pX3pWPjs3N0RfZ159LUY5Y1gkSGR7XjRzaT0rZFV8bGthVTA0cyNQ
KzsxY0ZzVzYlCnolZ2VRP3hNdShVRytDMkNeXkpIfEBLYXs+TVpJPXIleFVAOCp2U3Y8WERAITdp
JDE+emQlWmAzWnF2T2JuYFFJWQp6PCVAUmZWJHZjRG5gJFUhVFFGRW9WSE02QFU9a21hdTRvYmVK
UntuZFBrYkJ0ekdHMH08NTR4aS09cmgxekh1MysKenZrdzZnbGliWXZoVGFCcncwcHU/aDA+aj9u
X0BMfTtoQj81PG10KSVzMUhnfV9afFpLVkEqYjxDflAoWj4kNWJ+CnojazteXnhDSmVTQy04MC1M
NyVzfnltQGhLKGomY2hgVHowbWFfZD9nd2FgVHJ5KDYlR081c3Z1U2JCdyY1bC0hegp6SW5jeStE
cjBjQDxsbEJheUlibWRYMTQ2Si0jYU9keTM9fVNIR1ZqSj1aP1IrciYkS00mZkJBMVBiclNGTjla
fUgKel5DPHBLZTlGWER7JDBHJmNrJGhOYCNlUH0rZUR+SzlFSlZkKjV3UG5OWiFDaldMPFNXa3ZA
O0RMT2RFOzU7Wmw8CnpJZmh9TXFETiUwYk11RGlVVGgoVVdIPFFIbVBjdV8ldmJDdSglOUwzQyt6
WWpCYSNzWnUyJXI+enNIJDs+JE4kJQp6T3tjXzQoSFMkT1ZORjhkUz92JUswZn5QcHlNeCVHNTZB
XjBOPFRqby0lZnRmdi13RlNGMTtVPXR0XlBIZFV6UHcKenQwT3RnWClockBgO0EkWnJvP1NKKDNI
XkxBeT9fbj9mZDc3KUcxPUI4VU5WbEBVfHxCY0dpeHNjY290entDcX47CnptQUtPeUp7JChRVzNL
fHsrVXledDtlRWw+dDwlTHkhfmBTczEtZVI7YGNKYE9KPHNIUSY4MXNBclRKTkFZJE9AfAp6VnI+
OzRhUVQjISMrbXEoZl5VWlNnWXBWflJoT0puakZ7TFVkZEIhaUhTSkFeI1NoLT89dClnazBBRSoq
I3w8b3EKeiZKQFN+I3d1diR7amxKZDtvdTZ8a3h+b34oWlc4NzZncTU1NHJBdTdRSStyYE5QbXhX
JHomLWtHfWctZEJtY0ZOCnpadllRZDRacGNYVCNqYHI7V2QxKkhAKUwpPCZZaDBgKGomU2lGM0c8
VTZuP2ZudiNOMW0kWHVgVjA8bS0+Mn1kQgp6dVM0dE8jKWl5NWEyQndqbVYhcjt4fWRRVEo0ZzZZ
V2k4QHMlZEV4cl5hMTxYcEMwZTM0ITEjViFJRjV8ZStLcXMKem5jcExUSFZwJDlrYExjeikldSM+
b05VYn4jQTlWM0d4WG81VTtNRmw0P0V5SzI4SnIwKGI2Qjs2Xng5ZmE7JHU5Cnp2SjdIZ3ZWIURS
S2l1NVc1fnh7NCtKdGZIRWNKMn5XQyZsaz1RRkBwbFVWNVEoV24/cXtQKTBvNj5aO3VjTV4xTAp6
XnpSPHBfSVZZdlopJWdCPUhGSk1II043bGd5P3JNO2xkeH13cF5aamxaazA+bTt3YGVfUyElezQ2
PDc/ZXc5akoKenxKRW94NlBARHxITWRoYGtfWSkwO1Jjdi1XK2Vjb1BFQyNqNWx5Z2swOyg1K2VC
WDA3eEQwV0tXIzdmKSZZNkZgCnpRK302a0M3ZnNHSnR3OGF7VzFNa1hASyE0S1lQYER1WXk7QkRD
ND9qYT1gPT1vQSZYbXxNNFlFaT5WQ35vTihnUgp6UShGMlplR2J6MWh2d31AZH0mV3FJZURARCUj
OD99P3chamViSUR+ek45fXtvdWNnfWBfdm9DLTE4bihndn5LMGIKenQ3M3dwZ3BjUnFkeF5iYVRs
O3MzI2khbyY5bmBxTnUxIzVeVlhESjNXWkQ7K1F3I1pyS2MqSGZ5cEJDIU9ieXwrCnotQERHTUg0
M01qelA9JGpqY3pRJU07MT9tSGxTQkRPVlZ9TUJwYzRLcXc1KDshU3oocGY/ck5ZNWF8aGJoUikr
Xwp6Y0czemstdHNxaUFKd1V9Ym1rP2ZWKDJfRl4pcnI2SzVvTmxuWiRNYW93I342MnB5dmlLcE9+
RmJOTi13TmVWWEsKekpFWktrZE17ZVQrZ25RMGFKbTlvLUokZTBGZ2RfeEAlQWw9YE87enNOSTZL
XiErQnZhM3NQXzVYUXJmM2VrVUZmCnpJOUJ7QXVAZXZ8dUZ4YzQ4VXAjYHhtPVNLPVRWT0pUU3R8
bFFZMTlpdio+WHdoQEwzSUo1cFNuKjxrajJacWs2dwp6Y1V0NmIqPHs9PCpFM2d7ZC03YGNrN2Ro
dmIzO3t5bV4jTW90PDw2d2JHeTlAb0F3ZzxqVG84eEk4Y2hRJGJnMVoKeiRMSTlwOXU1WU16RVEw
SkJCMEUoYSUqP2laXkI1eUMlMyU4bHdyMi1NTy1fUG1zZXY0c2h6PihPakMhPCY+LWlOCnoweDk7
VD93bl47MVFQKyomLS11UmRGWShfNmwzUTlpbkQhMXlNWDdvYmdkUjxUXz9tfmh4RypUd3QzT0w8
eDh9VAp6Q2p5VnpDNiUlS3JOLVJrTXtuQ0ArYW9+Q0lgVE9QYCo+elRZQzh0dFl9SDBUZUtaSGNi
JjJDMUdvTC09Q3o3YVgKekhNTlBgRHNHNG5rMGwrN3N1JDFmcEFzaEhjP0h2bVprZG9EPlFDZjJU
ZzdPP2RwNXdIU2I+cmNGPS1JMTJCY2dvCnpnVH1jIytAOCgxZGo5Mz87QSohNTc4NyVvbkVKQm5O
JlNibngpY3cmJW1udjlaKDxtKFIkT15TN28hO3pGaVUldgp6bz5DSjwmJWBXODtLZFk4Z25VT2RR
SDNUKXQpZDA7KWQzfnVEJGBSTTNLfE4oJGxSSGdwRnxmNUA9c2teTjJ5N3sKRzh1fWxGYX1oJVQK
CmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5j
aC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL2xvZ28ucG5nIGIvV2Vic2l0ZXMvYnJvd3Nl
cmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvbG9nby5wbmcKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NTI0YTZjODQxOWUzMDU1NzYwZjQ4MjM0MThjYTRkNGI3NmVlZGRlOApHSVQgYmluYXJ5IHBhdGNo
CmxpdGVyYWwgOTAzNwp6Y21WLVRCZUw5eVApPGg7M0t8TGswMDBlMU5KTFRxMDAydD4wMEVXPTFe
QHM2RnF3WEAwMDAwUGJWWFFuUSpVTjsKemNWVGo2MDZ9RExWcjN2blpERDYrUWV8T2VkMnp7UUpP
QlY5P0AyXktSQ3dDI1Q/dT90KXp2PzV2ZEVlUU5DPGxmCnppJmgxTmlyfDhaTFF6NCpyRzhkSEtl
Ynd8ZW5vQXFwS1dialREUThpRCVQYnw+ciQ3eCl2YTA7TUdHISQxPFIlYQp6MFIpbmVrT1Qtend3
ZDFseXpAR2YkLThnZldiVjl+SjJVNl5KSEpXWm58YmZlZjleZl4/QU5ITnNVWipQaGt8bmkKenwz
Uj55R14xUChAMEJuM0tFWml7an0keXBIP1Z2ai1ze30zQUxsJjVQY20+PnVwJFVrWkBPUzM/QVFm
QHwxUCp4Cno3cUFTRVdMQW1iamVAKHtvWkJ3QU96YGdQJFRGI20xU3JzI0lzb09oJSN6V0p0anVh
cCVAUzROUFFrVFZ1LWEzLQp6O0owbSMmJiNmY185Tj9FITJ6MzlHN0ZYc3k9bnYyPj9+T0peb2Am
VEI5MldKZGBjRTlgTzRRRWFxSm52VzN5bXwKelhwckNxZmAxfFM+eGdyT2Y8Rnt8dWkoKVVUN0Vg
cUBjWG0hPjFIOUEmJTlqbDdsT0E0LWtWOFloZD5PVGk0Jk51CnomcTN8akVPLU4oTShiR3FSU0Rp
Q3hRNV4zUFp6S3tKQE4oalc8SkVgeXF8JXBWTCQ8N0hRUypVa29kYkg2VG9zSwp6Yk5ldVZPWWp1
UUR2WGkzSFhVcmtMe20zYWdUbStHYmtkJUBudWRAbyYrJkFEQDJaNjVQIT1wM2Z9bE13P0VrSXwK
elQ3U1U8MVA+S0ZRMUQ+cHo2QHc/Q1Z+fTcoM3twVStmaCNqMyY4YmJWOVdWZklSbzJeUmdKVTxE
O24pJFVOMVNICnokR3tFYyhLKFIrOT5KcnNBQ0s1UGxgPk9UKXVCYzNSJVNjdSU3RkR8RmV8ZnFt
aCZ7UFZBal5fcHVHbTFyN1Qhawp6dXJnQjVhJF9EQCtJfDdBWm1yQ3BRPDgkUnNSUn40SWYrY3lH
ZCFqdiQmNiUyKHM7cChHOEhVbj5wdjVHNSRpX1QKelg9cD07OEo8UkZSQzs2I3BLRnNHS2FzRWJf
akRCU0tOdEs7ajZnWmpQWHp4PkBVQGc2bXIlMDZgaG5uRTZraExPCnpHUDRPYDMqSUk4IWdLKShk
OEtte1UtTjlpSjtNSGZUPH00PGdWa058MUVlLVI1PytSMSs4bHEwNmd3RWIySjIzOAp6UDZrMlRA
SE4zIzNja25YSEdlUHA5dFI1a3dYUkA2PXc5d3s5PlJIbztNMilXe2F6U0B7Q2luKT9oME1PSSFT
VXIKeiNRdHMpZTNzeTRWYUwwPXlsJGk1dEg9eV8rMG5UPWZfMDIhTm5hfVhXe05NT2oxZDJtbDVe
a0g0WHBoSGs0eH1XCnp4bSQ5NG1+TFM4V1NjSU1EaXFwekpJRDsoK3U1OWJiUUBXUEhwZyNLZD5e
fkspdmdnYlNqdk1YUXh+Y2ctKUQ9Jgp6ez58NDNFTHFCdD5OS0dgJHElSmZ1MHlOQ15pKVpgQnRN
OD5DJEpFaitHdWxKYisrO2wkcSZfezZJZVMxZXs2R24KekdNT1FJUmRqflV1X2pocndFK3YkVjJN
T19KKXIwdzwqY0lFc1RBOUUpOElkbGZPUnNkJCVWZnVoN35nOSFUTDl1CnozQUItZlcmSF8/dU04
TmIpWSVST3heYGZKdTlGLXVDYk1ffHtfYDxtMkNeTnNNUituJEFeVkRoO3IkbjdaV0U4SQp6Pz9K
VXUlbnoodzNtN2NCPjNNfFVSZX0hX2ReTnZFcnUyUnlfLUxLTWcxX29uYV9AcSUpQX1MRXlHM34p
Uj43bSMKenREKXNJdn1ETlRhZVRoaTF5R2dfd15aZVdDbzgpMTZxKVllTUExaXJBNjAkUFdYQkVm
Qj1AQiVaZlR8OVF4b3lQCnokcGl9fihEa2Ztc1M9elJ0JXg3KU47an05YGlKMWRTKEM1dDxUYTJw
ZFpGTko1KFFNVVJ6b0wzdmdgJHtKRTU/dAp6KEJadT5XOUc0TF82bTdXI2grP21nO082XlApcXNt
Sm9YXnFmI0hyYHIqUWdlNF8zLWlIY2NgSEArdjxJS0MzcyMKekVhU3gjTEtXKElleXZwSExQLX59
VkE+cVk5N3phO2puN1dRNUlISEhNT201VW98Pns/V2QlSDROflRBMTYkfEhZCnpTWVNneVooJjdJ
WDQrJk5TVklMTCN+ZXVyYUg2RW1ZODl9VkxqNCQ9NjQ9Xyg2fDgqQD1kQXQ8cWhie0JhTzRlUQp6
KjtQO1NmTmFMNzRvPDFvISsxSjN2ZCo9SU08YHlgQF5yYGxufFNvTHJhTT99MiQ/UDtOdUMhRVok
ZC1aNnQ4ND8KenhoMElONSglYkdtOD9DUFdmQU9WOS0tVUE3OVBrPzZzO3A+eHlOZzt4fWA5Zmgo
OFd6NHp+eVotYjlqRGBYPng1CnpfPktfYzheVylzYVBMUE1MYX5ETlB2LUVjMGYkYCkzK2g0cXwx
YnM7ek5vJkdDV1kocWVoSTdwIWRHTWxNazVMTgp6U0xuRl96eFhxbTR3ZjZjWiN7TUZeQX1FTllq
KzBnWE08U3I5bChETlc8JEdjQ1YmPDBxTEMzK3NnPXg7KUZuKGQKejQmXkM1b0l4eVErMVphZ1lP
fDZHTkA7IStpQGBGUjdEfWRoWnczcnRtTlNURHtKK3hYS1ZFaEB4fThFemMmdVhhCnpxQngoU2lJ
cjNFemEoQ2pRbkY5WGpyfHUtViEpeW9QYitCZE9SQHNxbmQrKFlMRGkmQyo3PXRPRCteV0B0Z0hz
Iwp6ZEJWemdKZWdURkJVeGBNV0w+T3tVKHhMMSVTOzZlM00qUWlVJkxuNXokb3dVb3Y5LVdnX0Fk
c25PRWlaUyE4aj4KemEjbFdmcUAmRkdIY3pMWUQqRG1UUnQ1RHoyZDVpWUZufldIYiZmLXJHKVQ4
WjBeRnlodXI0fjtWND1KQU4ySXBhCnphNTdJcjVGQztwQjt2YXoxRlJSPkJjUEhaWXByM1YmcnZP
dHkjQD5ZdlBNT0QmdDheMkFHXkZKS3BBZHg5MVZpYgp6KkJMQ1E/bmR4ayFIc2hPbmR0IztKMFpj
SEVsWTtHUzY5X3hsIUZkNnBHVSFsdXchbitaZktwMztPZzVwYTxHVU0KeisobypMdFNNeWdGLTF4
NiolM2crTzR5MyNQMDJhIWRlUHVNPDBXOS0jM0xoS3g+YSZ+cUhiVjhRJEk+Xz9zdG1yCnpAaF52
YWNoP0NsWWlFSC14PXJ6WS1tKkNjcG5COzltYUp7dnI7NmBtPVoobCRyMnI/fXBWaDRSZFVtb2Vo
Wk9Zfgp6XmE/Q2xEeH5WKlhoS3lYdWZTP3o2KE4kMlIoemlVa3s/UXxfQTB3MV42N2ZUX2M9fjcp
dGh1MVMmSnAteyRKc0oKek0leEBpdUloSCgxVSZNKD82UWB6TDFjZGcqWi1PMV96cUgoaHdtaj0/
fiMyVUVCSyVPNX50el9DKnF8Sl90bm5wCnowSEJfaW9JXndoZDBleD9SeTRQQTF9b3wjNm10R1co
dStFUjEtaSFKOUZqenk3Q2N3KkMxaD8qWURkPFRmfVF6NAp6V0cyPzBDVjRNJURaV3RrQFg1JWNm
aH5Cb2l9d1gyaEJybmhhQHxvczluRno9Rl98NWR2O18rUXBjbkVQM0JDX04Kenlec2BePXB7MmhZ
Yy1qe2kkb0JuLXc7eU56QWhEUCEpWCtzIV9TR1Bzczx8QVY0KytEMG52dlFVdnI5czA8NSp5Cnow
aCFBR01gbG09YylnfFh2ZTJLS0ZremNRTykhd2dlR3ZtVSNecTxBTWoqMk5DKVRJekU1WlV8VmVR
ZXdlMm9qTgp6Sylfb197NmFUMSNEWjg/N3kyVVlEVGkmbSE8a19VUyFxWEIwVm00blI8VStvTDkq
Z2MrQH13QiUtZyF2ezY4TUIKenNfKG5jVGZKZWx6QGRBMEdSQlApJnUlX15waSMpO0NQZ2Jlentt
QndiT3xDRFNnP1FzPigpYD1vcDsyfmtRM2p0CnpTQilGej9aXyU5Rm1IVjl2MUE7MFZETzlpQ1Fk
WXUzLUUkTldjempATz9+RFVfcSU5fDRBODtkeHx0d1YzR3cmIQp6Kld7bCFqezxYcjItX24+Vl97
K1opMzlwQjN+I3x8VzJiMj9jV0BHKjc+NkR6akdPKCo3JlImPVRhM2ZTPn13VWAKekNwV2pfWGxR
T1drTmJTPnIjN3k7Y3tCTiFFdStCOExnKEdHZz1wVkNxTFB2am5ETmRFJiV2XnJIYW05KXI9cm9i
CnpYWWZsSTZEOTx8czQ7eEZQJVZkcTAyWiVDY3t2M3pAXioqcStQN2x8MXkteUcwXzNsI0FPcGdA
WXVFT0dzdF9TYgp6MlA8O2FWRlh9Pnd3czNkOHpVdUIjI3RsQjA/QTBzPyh3T1dmTk0+OyhvKHI+
MCFXWlFLSlFoO1dQKml6NDwkMXoKenhqKEI2KDNgZH5MJF5ReVElayFrbzFkVDUybGtycVo4Nyla
MjBuITMtOSt7PVNPNSp4XmwlUFZeWHEyKmRvd0FECnorQHZCeyY9NVopYEBuKm9NcWtjK240Tm1k
Q1gmQE8xNGc7a0ctRCRsK2ZMNDFQRXMxSWs0UmxNRkApOXR2WDIjNwp6cmNmPTklQU1AeDI8UVM5
Yzl1S0ghfX1vX1dpVy1CWDVfe0BXeFpOYlEwSSh7OEgxOFhaN1BQYzdsZiF5MGNsUU4KemZwc0ZL
MGVKPTEoZGh0fFJ8MzlnbD1KWUhGWFd9WjM7VkIxU1VDNXtHX2FmcTdCU2tkdGd0elUpYSs2UTRj
YX5lCnp1X01UZyt5RzI7NzN0O0chalRHS0p0cU1RKVdIMHUheng/Qz0yQUhXKl5qfDM8OHleIUJG
Qz0tU1RJPitNVjBASQp6PEdRdVh0TEBCZ0dMdWEjNVZjVnFLNkUoZVB0WkxCRUROelkoeU9Ga2B2
PFNVYG00amFreStLREotczhERHhtWVMKelY2YFYwdmNIaWAxcWtCUHZ0WUhTWFc0fWtOeXQmaDl5
IVJ8JWc9JXBCM1lWSTI/R1hVakQqfD9xXk57TVhGVXR1CnoqQVN3PVBod2FqK3dZRHJ3RSRVdC0l
JEk4KkJpKW1fKEFfX05AdVZARll1SCpEJDR0eWFMVVR4U3tPX0syaUo0Qgp6cj9pR2JaSEpxNjI1
UzxUUyUyfCV7bTVnalU2dkEjNW0me15hMFFSVE9YQWhGeW8/KTtXbigjNkNSUlJhO3dnb0YKel9G
fEg0UUVraX0yPShFbEllNyl2Kl5+ejQ2PDl+NTE2WmsmPnd3KFM8IWx4fnwzV1lwaj1yS1NTUkh8
YUp7NEkjCnotOz9ifGZDaTUhezhEaTI0V20kfWFDbExUT2FraV92VHJraGczYzhWcFRoe1dgcTVp
cDRyNmZQYntAPXRUY1FSegp6NjxUO29EQGIwb148ZjtJakdaTGtMNzsjfi0ldktBVDZHeSZeQnVy
eVBTOENxRnRLVCpsSDdRb2hmX15QYCk1XiQKel9KbUdwVXJFbColN1dFI04/YT4zV0MhVkB3MFo+
PW51cnhrej04K2lLezh1NjhMMTRHUzYmQ1Z0YFJIKmNhc0BRCnp0Vj1icFFtdExeTUNOK2R2Nmhr
UCpuXzhaMUJKRSorPi0/Pk1EVntLIXlISyNWMGc4WGFseXpWI3BZfFpsJVFTOAp6Yj0qOXRGUzh4
QkBUamNoa3l5PW83NjUhYTZUeHojeWY4MiRjTlRzc1VNKVY4YG9VfEg+eVFPMik1dDVDZyZ2fHYK
emNPMXl2RWVuPk1QN1MrWDM5QU9mIW9WQkt1bEBQOEFkfHRlc0ZnejdSanJifCRKK1l+WTxXa15f
OzB3STJsSzB1Cno/cUlwMElfNmFsM2FqTig0ai1Lc3BkfTF1cSYoS2ZRPnYxelpMX3syYCtVXj5D
eyhqIT9kUz1ldDFUVHpSPWs4Zgp6aHFZdiUzemsoS3lyTHt2UytGdV5IR35uMkokVmpiO2F0R2F4
cllUaXZJbnR3PGsjZTNlUkx7OzEjYmNSVVJAeWcKejZtblBHZ2M2a30kP1dNQGxffUVAck5EM31x
bkc+bCRiQShVTSY0fmEhcjxmWXAzWSFGQTN8bV9Ic2Nye2hlaSU/CnooVzd+OHFScGdhZmB0fkdj
UEtRZmtxKGFiYnd7UWZTVSh8aTZDdUB2SS1xJSFwZWxifmw3UEIxZiE5WihFaDZBdQp6Yk8jR0Fu
N2N7ZFFiaVRQJGJPOH1acjxpT1NoMlY2WkQ8aE1SZWZpPXM/OEw5bUNBP3JHN28rem5QRG1VNH1f
TGEKenlMVkhkdTVPLUBwVENsRmErY0RsUUZWc1RYOVNpbj9AUFVVNEgzdF9CaT1iS2hTZ0o8LV4p
di1iWXwzJXluRldzCnpEa31RMUBCSCZXcU49Sm93NTs+Wm87e2pjVGFPNjVfMH1XKSpJITIpSjhW
bGpubiVzV0Y3RXF0UW5iSTFTNzU7egp6N3ArdEdRbG4zdyh8bVdfUUUheCRSU0hsPlArTUN+cHNs
VGxhJnQhKk0rJU1Malc/X241NWdQZUNDZ1hfSStmbT8KenFZNWw5UUBlfCRYUGNXQikzJDkjOFom
Mlo1a1R6OzFPbVNrMDM4JTtOIVA5MFYjPzN8dF5kKFNnU2BPLUp3JkQ+Cno0P15xI0dSeUx1dklo
c1N3eSV4TSFjRzdga2VxOSF6SjFVMW9xcWE4VzZZUitmeUlsejYwKnRjNz5TbWRYczA9NQp6NDdE
QTlKVzs+azdPb1Q3Sk9VbGE9Rld3SnxMQWFrP0FROF5GNE9RMz42dCpGKFJie3paeTN8Mm9rTzMw
ZXpwSVoKelhYYTgoJV5iP2hzfHZReD4+XzRkU3lgeClaM3c4dCpiMlpkMUFofkk5bSRLK0MjZTkt
dDcrKEBRNztIQTZRWlpPCnpgVU5UfG0/YyliZ1EjY0VOLV8xYDc5KHRgYzxufU8qOXdpUGdVVzx0
NTdZIVRAWlU9dT9sRFV6bk57R1JGMSNOPQp6Z0lCY0dZLXczWGpnNG10ei18PU5hSD1APjVBbks9
M0pWXzs9T2JJK1pEZHUlcVBIQ0dLVHMjSTxrWT9Vait9PWMKekkhe2N5OC0rfE5IXno9ZHpmJGJw
WWkkayFMM0lVQktjfiMqNGU5VUNeNyh2WClmKl5BUTh9aVpAOCs4K0lQSGs7Cno3eVIzWihkcCN0
aWs4NVp1Um1DZ2pmTVZldWYwcEM0O1BBUXhEc1pLRj08azsxdSotbShBV0BsKXpoSmlJYjExUAp6
RFJId2RWQ3w1ZVg9fEdqPn1yZFN3dVZ0Y3dZNTNFZCtySWdLb0BgbzFjK35vXldQS2F7dlBFWDw+
QGpGbXBLVWQKekJhUCNaPm4+Q1M9dDtLLSZ+amtyPGxKekIqQHprLXFIWCFjalRHM2wkKkUyNyRx
eDVsc2d0PmJzO31jQEIwaktZCnomMihlKz5KMm57XmtjTXJkJFg5MTZjRWEmQEFsaXhycXVjUTxW
Um9rZiZ2T1deXn4wJmZpVjQ4aHg8Uk5sTGlsXgp6UCt0QURja2V1KkU9KUJ9SkZVZmM+WnQlanBi
e3QkK1dZMlVGSjtJdj95MX1nY347YitYN2RNWkNDQ1YjaXVaTXkKemg4Uzd2ckR3WnpuR30+c3Vm
TmAxe091RUojMlRUSG1JWTBvaEs0ZD42UF81QHdhZChOPl5LZGx2NWhEcnE8fmxHCnpCKHJ2fjBX
OX1wPD5nSFlgMkZ0Ji1oNlk2ME9YT3RrfGhnaHtkeko9TmB7RCRiYmBeXk84KUR3SCsjTl57OFky
YQp6WSRXRVM3RjAka3VVYV8mVkV1bSteI2BoeyooX3cmdVZ9LURNRk4tPXpBTFdpWVlaR1hzT15h
LW1lVHpCWHI3TkwKejNpKmVDPn5+JDw3eWhxWGJwczNaQ2hKU2kxWHB0Uj90WTxHRUQhQTJeUi1i
X3Z7eyUkV2t6VyFmUHp0ODhzcUZ5Cnp2Unt0WjtkXipDdEUwWmw2eVQ2dVYtM09Ce0tMVFIxRmAk
elomVT9UR0JrSnlUU1RHVnJ6PktzMjNgP2tCcEI5cgp6PnV3dnUtbiUpJF9kdkR7PktGSXU0aSpK
OWIpd2YyYz5PN3FmWGM5QjhxISRKbz5xS0t4Ul82ZlZzTDgtKT1tY08KemVAVl44alNJK2hIR2kw
PjJUcTBqRVI/bigxTHBCZ1BNdlJmKE1aVkRPUXhPYGptbWhtOW1qXlRvc1lgVDBITShqCnorSWdh
OWdlVTJlc1JtWCEhN35hc0dVQVFoNyRpKkJqY25fK2RpX0FEVHI+Y2d3bTZqQDJ3KSotaUVjbX0k
UDZvMAp6UXtwO2xZZlpWbDhlUEt3cXc3Ql4qc0l1RHgyb0glYl4rRWROb3w9NVI9NkYzak5iIzk/
RmJyaUV6MW1SdVAqQ3YKelljSD5RMjBibW9paUlGKGhjTWdHSl9ffCsqdmhYSjN9ZytEJlByV0py
ZkxELUI/XzJMM3xiOFg3YGBkbUgjezx7CnpRZ3Zpe3kmNTlZRm9AWU16fGg4RVMpaUBzaytfTXVo
RmBQb1JtZT10d0pLQlhEOExJJEM0KlRKRzJOa3FTKFVJRQp6ckR4ZUgoWDZDYE1AeksoMV9zZERG
bWYjfk57XjYmRSZCe2dBTSZ3QDFSZlB9P3ktMmFldD9CNyhGPUwjN3FmOGcKekxnYDAtNzFRdnE2
eCErcXFZVGtxcjF8dGAhP3ImUVdiMURMVEFGNGZ2UXNpRUsldzFzem1SO1UyWkxBNHFZKClpCnpl
ZmhPTjFCdjUjblhaJSlUbUVhSlQoZlQmWHFlVlJgVHNKdTY0MEFyY3FWYHFqYXFwJTB7PV9tZFUr
YGVtT0ZaJAp6JXRRP3RWVjdQc3deK29RZUpmOVdmY3FebmVlQyZ9MDJabiZvYnNxcGBnUz4pZmQ/
N0VBJjZrQF9zT1hjQSshUTIKelllZW0oNDwzb15fYyl3SzRkVD0mSyFNTyE8JEJobUs1X0I9MFA2
MmFxZGhEQCpFIXRwUGg9SigjcXghcW9nOzR8CnpUS299ZSZeMFJiRVUmO1NYUnohRE0pQUYhezR5
fFl1cW9UQzQofnphWE4pVEl6emRvY1dyVkRYXlpIMEQrOV40UQp6KSVRVzJ6PyRUNj9xdm5uMmlW
SVQmTDU9e1NRRFpNWSEmb2NxUThWIVVeI1gzUCEmYTlwNkt0STNnTFRJYHh3P2wKeklkN3hgU2Nm
YVJQRWpVK2ImOF92M35eenpZNXxzMElZP20/VGhUMnxQeFAxWTNNezg4UXk5ZlJqPysjcGk4N3RI
Cno9bWdlVlFPPSh2XyZNc2xKOWAjNnlMPXdpMmB1IXNpV1ooaTBsPlE/LSNTJEd7OHpITUJxTWwj
PWojTChWdHYxTAp6QGpoKEJmUEIhSyRuOyR+NWkwRmJiXmt6PV9oQWFJUVNsfGJPbEVeeWQyMCtt
UCFvPmBeITd2V3cyfGMralBofkoKelpsPit+aVdVJTBvcXNUeFFHamB3JWw5TUhLYmJpbXg+Mnsp
KDRyc2xsPU8tYTFOY04mdSNoTV8hLVorMGZ7O0w+CnpiWCU9dFh6JllFJCZlXk4zZT1IeHhgU25U
MiN+a0ZHWGQ5ellafGAlKXcqaSVHVGpTKCtGdzw4JjVyfmhMMXNydQp6TisrO0Q4KDZNZjhzfHVX
QTBPNEtsUEgxZDtIbHRzel9kWCs1SVB+OSE2UiooaV9pSTR7ezUyN2ZXIUBuZSRaNCkKelg4Umo2
YmdhPj0jVXFxZSNMbylCVUNCeCtsLTBGZkszc2RTK1MpbyhGYDVXIUJFd2lMb0BIXmNUfHRVYVpt
PjsyCnpiMkFab1NmTEYtUEVQV2wzY2EtT3F4cE9rc0kyVkolZlVifHpAOXpabD4tT1JTKXtvKyFD
PktHaWkqZk1gRDhMQwp6UGQzfWVDN2JaMiEyKj1QI34rKVp7MSsqTTB1PmN2NXtnLWZYVUU3QmZj
ZnozeT9aRDB2NWV+Yj88ZTIqQHhpVl8KejBibEN2KHFJQEpVRllaP0xhU0RoZjhqejNIcCY8P2hK
MHQ4NzJZNXRHMCMlbCs4UH04ITNYZWJRcnsjLVQ1dXwyCnpuenBvJWsoWHlhZWB7aV4+VCZ+VUlG
VEFjbyFJNHFlKHJEKUJlZSpiZzdER2peR2ItPEdzUDVMN3ItPmRyfl9jVAp6Y1lFPzNhI0k4LTZq
b2l0ZGUoPzJAOXA8cm4tOTw0PTNOPDN2ZSN1Sz1fMVNKN3YkZG16RV5VNTVRWC07UGRnMUIKejhh
cHpnZUAkeGc/eXFIZ2I0MHA8Zz4yP2VEN3Y1QkVnQFlKYVlNTThLTztxYk5tQnU9cTNqKGZSQ3Z1
dlZJdkNaCnptPjtBSVNUODlZUTVPOXM7KHg1OV9wMUpXVVZ7Ymk8elgobzViJktaYmFfcEhWJU5l
UGQ4RnMpM3w2I3NNWl5GUAp6Q1VkVmF4OXl5ZV47YSlCY2J+M2M5bXcqXmorUWI9dilUMG0+Z3d7
a0BQKGE2X0ZZNGUxMklOTnVuP3JNJWFMa2kKeldpJkRnSDxvOz1jU3pwdnthb0ZeQHt4UTs2S3NM
Q054P21DYjY2PzAwdEBOWU1AIUQjc159aHtOc2RFQj44MkF7CnooOW5sVFJ4KnxKdUZXeTRXS1NF
Z1dRQ2ZsOC12K3A4MElUN3IjektlY0JJLTVZYDI0RTRrQGF0XiRJTVJTMSNZOQp6QUh+b0t0WSko
Qj5vLXBFZUZqSkBmKTxePys5Z0A3WmQ4MXFpOGpYbylJT2NTIW8ka0s+UV5lZiZzZDRsVGM7Q1AK
ekFmIUE3QnB3NDVGfDQwUmotJFEkOV5KcnRQWFpQfl5IMGFRViFgPSR4I1hOTy08RnFQTENDKSVJ
WDhfQj1vdytwCno2cExDaGh2ZT8kbXZqVVI8aDFRNHZYR0hNXkV3OzlQN1RZI0xIOysle1peMXlP
SEA2KVFCemFuRjx5P19fbDEqUgp6QD8kPjZEOyEpZShle2tLb1NaaVROcU1sS2hAJEhCcXkqbXdz
WX4jND9iUjc5JVRgPVYoYVlYQ09Yd0xtbkIqUSoKekVvNEA+cUllPmk2JkghMT44Z1FCQ1JpWlUp
MWQzZV45cnhJbk9EQDB6NFFpbk1mbW00Q29gSEg/P156aXBGPz55Cno0V3VKam1QWjBUWUVVbkQ5
bVNSPmlzYChGU0p4PyZwZX5aaDdWdTY0TTskXzhOQU40XjU4PihEan09dlBoVE8+MAp6Nyh0NGFp
NWZ7ZGZSKGMzJVItT15EK15XQHRTbmdSTngzUWI8M1ghTy00NDx5NXR1RHZiKXRvQk47RjVUJFlp
alAKekpQUktkZE9JTTBEPHtmKEdacmp0KSYzaURBN1lwN0xWKXo1MjE/K0RNYWgmfEwmOzNTZVVR
fVRCSyh3MFBpdHx5CnpqalJHVGQ8UUFJOXhgUm5TXyVuc2krTCg8UGx1NigmTEpOdDFQWExDZ3xA
I2JCWTkkKmMzP2VFKFVXanZySkV4RAp6TV9SeSp4YFE9fCstMmd5dEtoYzQ5NXZGMU84YDdvWFJ6
a0Q3PEs0JGdzfDh4RjBZQWJ2bihqX2ZVYVBUQW87ZGgKellaeFR4VDJgM2ZaRzsrKkxvXiQrRTAl
PShJelVJVDtLPyozQmpaZiEqYnBxMVhNQFR4UGpjPSYtTXw3ITZDX35HCnpxNC07JlU/a29sSWRf
dDdVfTY3NlNAaWc0aXRoMkEhQGFmMkRlV2VhOWdtWFFqVko5QWRRb05HVFBMdCYhdW4wYwp6X3Aj
Z2xNIVJmZlNwc2E2O2A+eGRPdUJyWHotc2Z6SHVjQiZXMkdjbSVAVzBOd0JxfXVNWWVKeSooYyFN
dUp9SDcKelc+MVQlPkZ5Tys3KihIMXJwTmdUP187PDkwLVN+UUkpTWRSSz14c0Ziakl6ZjtRRShK
al8pQSpmYHlhQFlwdypXCnpleW5mQkJrYlcheXhRU00oI3wlLXVQYnhQJkVqYyNPb1hnKU9ETjFk
Tk9KQik5bC0rNGJ+cCF6QW8/SWIlfD5AMAp6JEB7YGZPVTlHZ0JTS2NDZnBqS2k5ZE1KOE1lezdW
dDZTYkhrITUlQkQxfG9ec29oUnRHY0BKQG96N3JFek16QEAKeiMwMXw1Y0goS09nblAyVXZXIzJv
Tk00a24+cUM9PTw4UU9kaXpYez5oK2lBNjNsZiNxYyNka0lrX2lAM0Q4QmM7CnohZlBUVGppek5V
QypweHFwPE9WOV5xbXl7V3tzPVotMSMlNWFrZXRfRGVReV49T0ZzZSlXLU9FV0g7WnlZRDdYaQp6
Oy0rRShFYDxLRUpXMnBTZV9sYllKeWlpRkkqZUdeJUpVVkJOXlFaaXFafkdlVEQ9MHNqJmV5NFlE
Kj9hc1UpK3MKenApNlFndShEdCFvbDtHfUJmYmFNRnpUTz9Ock0wYyFkUCgyQWQ/VEZGNmA/MjhR
Ril1RzZGMzBgQF4+RHIhej49CnoyO2lhSDxSOTN5WTR6ZUVRJGYhe2pwMHF5Y3xTYXFRKUR8b085
P0tlT1F5XmshQmdyXmlaNVYrMkM+ZndlbUdxUAp6SlgqYDRqYD5pOSpGLWZke08hSGQyYG5WeyYh
eU9RJGFHN24oRDs7MD1WRHJiZygpKjNmITlaMDx5WD5TSEFKWHUKenMhTG4mWWNpWXA/Qlg5NEJO
NGd0QlZCd1JVUlhFKnBVYDxWI0xESEE1RFBhbXFCbSVidmVyZj0wQjklPklFJjAmCnooR3JKaT9j
XldsM213NWlydCU3aHNnSGdQaCUwViVjfEZ3b0pXZ2lRM3QzN0xCME1NUEQ2PndLZEAxTmdOV3dp
Ywp6MkIxTG9FWVBvWWMrY14/QEBmVEU0eDJHe1U7Jl9Pc0JgYCpkPEk9fkZMcnAoI2t6cTdTTWVt
dHhvWkBkRF9DSj0KejJfUj9hMjM4a3xGbTdhRjl4dF59JDZfYW91KD9Re1pxdnw/ZXk7RXl2aU1e
YGx2UHM7K21KfG89Km4pQ3FLQSFFCnpFelZffkF5eDA+d3B5WmlZYyZtX2cpZyE+LWN8OF5ZOSY5
MlVuajdUMVV1ajZfJDcrKFc5TTtiQn1KeyZ5Xzh4MQp6cT5qJEg+OGopaih7UCgoREE4LXM0Sj11
XjtGfWZSPDFDNCR1VSU/KUJpV2FeVH1FbnBGJnJXaDxuUVRkOC1uYzgKenVUYytwOCMoOE94fWpm
N2peQyMlU2E4dyYhUjl5O3t2VCRZc0kkez15M08keU5NWHAjRDtHXil7XmtHOFk2UUZ0CnpKdFR8
M09mdklMLUM3MTBAREM3S1E7NXZNc2dkJChAPTIjKXROMVVPenY1VD9pMGtMUl5KWXNiZlZEcWBf
NWY+VQp6TU51fVk7UTspajtPN0p7Y2Vvflk2fVgpTmlTJVlQQEk1PHhJUlRhfFRtfWBSZmBQTXUx
Z3tuI1puTHlvRkRVIzAKenFaTFgqU0hlRTZAS2IleDU1QWNmMnooWWp3VUNRP3V0ZCV3YXl7TS1z
My0oMU1sd2U+Jm9JME10RnktVVFEazR+CnpCX3NIXm9AVSp1S0xlKzFaeSNOZio8eDkrZSNvb3RF
KFF5dTUpSDRuMjtPaylGLUtFZlR8TCMqKUtYbzJKKy12Qgp6RkE/JWVXe3U/ZXBFQV9lKTwldUhj
TUlVXnNKZU9eKWk+LVFVe1A2SlA0KUUrIU1fe0N2MGFVZ156S2ApY3smWV4KemwkK3hASWFGOXM1
YWpacUxwdXVESyFBNGQtYXxXZjJEaGMyQ3dQLXJCTVlmUlo7PEpUZ0RtTjs7fmUqRFdOb0VUCno8
M2tpPEI4LUtmNkc3OH57UHpJbkw2bzVJeURteTtFWXIxITBxeElmMHUpKmxFZ141S2d1eUxOIz87
b2FZajx4Mwp6dSRXeWsxOT56SztTdCg1UURDTkhpfVU+JHpgK2RNdSgwVn5DUkIhUjdadyYhZXR2
IXl0WXxjQyMjdz0wTU1jITcKelBqNCNqKH0jK1NgX08+P3tpIz40QX1UMl5ycWFeQilVIXRxVFFH
QWUhPkZtTGlLPkp5MSh2QjQwMUtjMiV3RH5FCnooS1dOTE02JH44ajJsQEZoUDBHfkEjRWhYcFFY
Sm1sPztNK2JoS19AQnx+UHhOcng3akBIWmhiWkNmMUl2WG9iTgp6OFFqSk9xNDw3X0A0dFc4LXts
bT13VmUhXl4lUkFnXntnV15aKTtyKXBaXllqOXdXMXFMNHBCP0gxUik/blpPb3YKelAqdW4+RVBx
SGhLWStuSXp5ZWFwdG0wJlYxJjdePWgrfVl9OTcpbHU8dVBAQ01iNjE8MGxxI0c8SlJnZnY7SnN2
CnozPH4yekU9MG9uUUdsfHtDNSpVKjxnVG5HV3g7fGJaSXt2d0A4LXdrb2NWfEJ6VlJ7SzN4QGk4
dGlAe3kpfk9QRQp6NGNtYTtNZUAyRVJFUztIaVRlJGdqTzNJRDN6NmJVNjBwNz4jbUBVUGJ2X15C
THtlREU7YmwoZ2NXalFvVkklT3YKejM5LWdfPnc3Tks0Sl96WmNIWXM0cXYlalNidlRjSjFlI3g8
ei1iUTJIYGJufW5eSX54RWNHJlMkflElRT00NUswCnpBY3NuZE08dGBXZk9Sbn5Nd1Y9KUo2VW9a
ek5kPzFqc3NwUzdUS3NKKXNoamFSZDQwSjYwX3o8SFpscFJsUEZFOwp6QyVNK0FCK3BGI2kpOGpf
KWhAV2Y7Un5YbCVuNTl8QWIkYjFofk1ze3peO15oI35jLTMhWWk1T1hUfGVlOH5OM2IKemYheFZj
I181WnBpb3oqYVRQaEkmK1Uxbks8ezsxa1V8fCVYdT0+cSpxND9UfjBQVUsoQkJ8YHtJNmpaO3pA
LWw3CnpXdCk0e085WCQpOGA0TlQ+cjRsMiRmNyU8czMhTUkmTW5jXj53cld4RyV3cns8TDZGfmEo
KlZzSHpheVFTRmt8WAp6XzV+aE5IfF4/PkdXMCNOWjt4JmZ3RCtlYWl0a3BrdWs2cVVFWU0wOzUz
cz98ZFdxdFJ7Vms5bUBkN3p9SzZpT3gKejdZNjVnM1dVUClTLTxNZlVXUXIqR25PcGwtd1ZEZjtA
RExWYSFneVdSTTBAeT5AOD5DS1M8JWBNOUgzcHN0R0JPCnp4QU5hZStNU1Z6bzF8MHQ5OytVTDhW
ezJDRW95QEY5e35tY3h9ez51Tzl6N0AwMDAwME5rdlhYdTBtamY2QW0rcwoKbGl0ZXJhbCAwCkhj
bVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9t
ZXRlcjIuMS9yZXNvdXJjZXMvbG9nb0AyeC5wbmcgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3Jn
L1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9sb2dvQDJ4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xODY5NTg3
MTA0ZGI1YmU1ZGFiN2JmN2ZmOGNkY2Q5ODUyOTZiZTdlCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJh
bCAxOTMwOQp6Y21hSTdXbXJfLTdkQXt0KlUlalUzPUsrbWNjKEJrM0BJVFlDPUhTJE5EYlgwQzZZ
clVORGVLamJlOVQ+bHl0cXYKei0qZiVuPnZfTXRkXnk5SkohaFlAX2QwOWM+dDZTSVcxeSFfZ2lu
VyRoSzVGQHNpOSY3OTVkMC1GIV53P2Zsbj1NCnptTDktPyk9dzRjWFlBJGRfc1pWYTJ+RStfMytC
WTQ+MXByY1dhTVA7ODBhKE5CIWg7Z09gQHJ5WGNEbVcrWnJkdAp6WVQmcHFqby1aMV9tRlghQjlB
TyskV1E1fmdhV1E/Rl48eG0xMT9eOUc/bTROOyNVfnhXVm1gUE89IWd6JlNXfTEKenNhMVVLcWIt
aF91TzlCMlBOeTB9STZzSChLNDAmKzNoTz5EczFCYEl6MzlwLTBSQS1qRXQ9cURAaWlGP1JYY25U
CnpCS0Jja0VpJFFFMGomdSQtKDE5ZTI0U1hwZm8mPC1NPGZUJlJxTC1HazI0c0c5ZGwpVCFLUj9q
NjMxb0oyWFZgaAp6Vj1iR0VBcHo3JFJBTlIqO3I2UkR0KzJgKyghanFraG4lZWp2OU5pfmskJGEt
UlExUG5WLShOY1J1emElUygpKisKeiRGQ0VwSTVmWEdrVnpTeHcjd3BhSHxKdE9va1RKY0VmPHlV
bV90SU5AcytBdW9+I1h0Oz8kcCQ7VWF4dVpPUUkjCno9fmxjWkFYc3laRllgUlpkJmVYTE1mbUpA
cDg1S19aTEt2QjlXSFZ5c2BBJGNpNHI8RWxscUllPnJFRzt7bEN2NAp6NHBabTQ1UH0jQ0NCOGF+
VlAyRlNIN3N5MmZvV05rK1o+IzEzKlYpNVBZKmRMdyNKJDFqbGNrQnh+eXk8dCEpRXUKem1INWJJ
SGp0fW9UQSVRLXFNO21MSCoxKWQ0bTlzdUF8OXp+QG9ma3w1KVlkOGlYOU9LRU9oTG0tIz9jaXEl
LW4yCnppVnZ1Pzxmd1JYaykwU3xrO2ghTE9MYHF7a1BoeEVySnBSdSNuYy1nc0ZqazFuTX5zenJ6
TVNQO1h6YSFvY2M5eQp6cjRwSzRMU0d7dXhFODFTbn42SCNxWHokcUQtblMrPUAoYGVONiY8QFRi
STFnJSpGO0VVWClJOWpAbER8PWNHe2gKemt5NE4lTUFDZHZsemVjaWZmfTVXVzgraXlyMTVXO1FX
OHx5bUAkVl4tbl94aEFLKTZHRzJ6QWk5SHtVQGRFVkdnCnptNUdyNGkwQDNePlI2IUcxTykrN1lW
O05GKWFOS2EmO0Q0O2ZrJTEkYlk0dHBVVUtBUXdNamYtd3d4JWswNCFGbgp6IUZ0RGpBcjRjQHZ9
ITNGUWZnZX1CYVJQdHcwWE8pYlkpX3N6VjUqfFJ5O0JUWW0zWWwlOCNSPT1OTih4cFA+IWwKekBx
fTF4bzh+e2o2ezY5OT1jWUZqd2pmXyV5YXM4cnBuIWRSMWd0TyV3I0wlT0JYM0I1YGRiNWBYdXAo
b0BCMld8Cnp2cEE8NWdpK3ZNVkE7UmVgTEdRKj94U3wtMXw4YEtjUUUmYHglTVZ6cUwlVGFwYElB
QC1EaUE5RmM7fTV7RjV7Rwp6MH1AfTZSaENTMktEZncleC1YTDwrKTFNZyFuZ1IqdGNQSCYkZ2co
aFVaKTtpcj9aJWtuMHZTU0orSyh7VWdBWioKejZgR0w7YkJTZTxaXlRmZDJUflh7JjxXIWdAMlR9
UDw7b24kckgmJHRELXMtdXVOWj5zQWBoaDFiJmxSMyMkJXc3Cno5dVpYWiFeUiZTd3UhI2FodCti
XilEPjctQ3hHXnVNQCtiZXV+bTJeej1EZlopWWdgeSlwY1dvalJHMTVCQnFnRgp6PW8rfkduIV9P
PTcreTNLYzxUUXhmRCskcGg1dyFYWiZrRUZfNGRoYXlkRF9SaFVFKXtnV3RWZnMyR0JXUVpGKH0K
eiotU31tdUpifEs4YCFXOUFXbClta3JwajYoKzJLNjFGRG9TK05AU1BAfmlGOD93SDdDYmtEeUlr
WUtMRzBgQF5gCnpJMz1oZ0otPkVgMUBiSEFaX1lFWT1gcUkzOEEmWllfRTR4MjJxWFRBVUJzZ2xR
fVlMWmZkXzQrX2ZkLSNvS2xgOAp6WEtfe1F7PUgrVlEpb1p5clZtNnNQNDB9JSpqXl9CbE9UTE1x
Y0FaYitnNEM/YCFfMzN4K3J8R2ZqKkJiYTEzVC0KejVCWEkyJWpNZmVwa1VIaG19WTlLK2VnR1Mp
eTEqNmBNdVlCTTglZEVLTlNIb3dvejh9JWEmWjxJTU9MO3taM2AxCnpoKVpxZ0F8VkU8JnQ8Ozhi
I0d0d15UJlpKPG80YlFvR0lIajMoRmhyZVJOYH5jNDspelRwYV8mOG11ay15d3xlTAp6OHIyZT42
ZVU+WDI8eSU4UlZLVntNfU1ZWFc3ZC16VG0tN31tZTN0PjI4VTg5KzFZU2ZobnwoRSsqfnkheVZx
LVcKendIfmJSdnR0TXYkS2wpKE48aHsqNHpNMW1fbW5pYmh+b1NkVTFBb0A8byRfTGlUNDYjJUpm
VlYyMWw3VTk5UUllCnomVHVEfDZae3FrR3B+ZkxOYjFkb0xzdTA/d0I+NjFzYV43UVZ5PEZyNkM+
WS1hO0JVSWJnTjBGKn02d3Q/eyNIYgp6PDlTYFJvI1RRez87fTgpcGBsaDYtMHFiKDFYRGokYiQl
fCEmS0l6dU13eUF2ZWEwYGVoQFlNfnEySV9fazlaTikKekROXjsrTF9ARTdrI2U8P2g+QHFSR05u
NVh7cTlMcnV3NUstcVVIWCl5RiU0RmBOOEAtY0NoSlJuJT1LYlctTjYjCno2a34lQ0dOKj8kUDBX
ckcmZnJXRTU3QCV9TVB8fUFSc1hwcTlgZ01GU08wbVBnO2RnR2pvX1FsdXVjJUsjYW1JPQp6OH0h
ezs1a3ByS1REb0owODBhKCV1REpaYldBM3BoRjshUGI9JjIxaGplaGNgSzNgZXRTJEFVM3tpYU9S
SVZTSzUKemdXVFdqSXRYZmhvWXNVPkA9RkRII0ZaUjJYQ155ZzE8SWQ0PHczPCQoTUctMCV9ZyR2
YyRXLU9zJistTENeVGw2CnolVmpvZ1FtZXUjIUtTb0xIVDVCVVBUMG9NeiloKHBEbFhweFZfUlJG
PkprOT1zMXd6KSV7T25zZndFLS1GMEBZNQp6d0F1JSYhT3w2N2QzUSQhSGZfNTZWISpiTEpBfVQr
JX1MVyMjMHcwdXJFbHIobmVrem5NUUE0ZUBCJHVUK2Q4VTYKemc4T3E+akR0aV57VDtQWl8wTUNN
e198dldpUCh8WWdMTnZIWVZyYCNHVFk5TVJLaiZRSU9wSzVTR2lqVVBBTGwtCnphfH5MLTl5LT08
ZXNfb34rfF9yS09ZSVNZdDBgT1dtUGAxXmcpfipDQ0ZSSDhgcWJPI1dFYkIkNU5+KS1DRzR3KAp6
el81ZVFYR0MhTi17QllHVl4/R0tZMDImbitgeFg7LS1hI3lYenQjfiphZkZ8T0hfPHkrPlE/VTRf
fkRLK2VneTIKek5XeHxRXllvZjFDO05kVkc8I09Ke3o8PVE+QGpSeHJmN2NzYDdjWmotIU1KfnJC
SmFBN25iRU9DN3Q9Km5TUF8xCnpZMkpCTz4/bzY5dkF1bn11Jj99Sj1MYUBSdWR0YzFRU2RWbHFM
P2ZUKCNwNClDO1FfQll3UUtiR19qST48KkE9Wgp6QnZuIzVWSjFDWXd7dGBJTXNQfTI7X1g+ZUZ4
dGI2LTwmfnpfRH1vOGxuK3I3dyh6Rz1KSXllcSRpV3hyYHMzXjwKejl6SmlHZWNBP2p7I0xXKT4x
IVZmPDJ7P2BWajJCVW5KQENxSUBtSHltZSFfV0FJcVhWM3lYe2hkN3JmKGpZKl9ACnpUITNUczlL
Ujdrb0MqRkMqVzB1IXhsTHtKWWxCdVR1bmBtWnFzTzYyeUkmI0p4Yno4LXpqNUxUUmBmUzFZMm8t
cwp6d005Jj1kNnIqOWkmRylBZz1aRH4yaDFNNVJhK1YjVmVgPUV4NEJKVHR8XmVhTj5nODxKXm80
I3V4YU9PeyFEX3YKei0zJVQoZEFvUEUpc0NrNVVnYVFuWVplWkMhNTx4bF9vSjt+Vy01bEZgNG9Y
eHZTMHVORUVoX0FqPjxuP05YcjlGCnp1UGY0czNiQnt5dGpLUms5cEU4dihOJUt7dGl5MEA2eUlO
KVU3IWBrPkYkd2VzPns3SVN2QXdfZTVTLUYlcCEkdQp6aTJvfmY7eDVBQj1xVHBRc1I3KGMzbHtT
Mys0QFUzIXZvJUJuPXVPT2p8YEZ8SyFsWTxMcE9FdSU1KitiQiYwM1cKenE7N3FWVmdFMDV7bSps
JiMqVFBzSThiNlVsYWU5JFZaSGVMe0s7MUVVN1crT09Cd1phSWQlaiZSdWVidnpwO0NRCnpEYWVX
LUNiLW0kMzNlZS08XytrejUjaFh4bUxFVUBUSmEmYio8JE1XTUExK355TzxScUlRKlo4QENjWHpx
OzFkeQp6QTVEJkZnWTFNV0Y8ZjFnSTs0RUI/LTlnJUFrRUxCNEZwRHpfc0I9WCRDeXRpWCp0Tl9A
cm9Pc0lxfktVbHY/KFUKemclNHtYXy1Wa1Z5cnQlQmtfdHpid0EkaGA1WlJWZFV1JHlyQ2FwMDQ3
OGB8NmJlVE12cFpNbSpodUwoK2toZDV5CnoleUNGWiVxRSg/QW1tVjc8RXNTTWdRQGtrNk85O1hT
Y0c0fkZRbnNGKD1aO3lzMj94TlpOQnl0R2UxbCVhJmUjPAp6RlJTQnNyPkdKc0lNYkdlR19UYCtm
XjI/JilecSE1eU44VFV1UXM+aDQ+YUlpRXVrSjhHIUw1fVpZZlolUmMoNDEKekc5TUJxQTl0ViMm
Zz9uOHFaPnZMPXxPNnBXSEtmeW5wZTRCVCFtNkROMmswNlgtX2VZbnF4YSZTO3ZhbiRmbmlLCnpz
RVExfHckZ09KSWRSKzhrXiE3LSRgJSVPRGdDWnEmYk9VaGl5eG9MPWRmelpIPzZ2NDA3U3ZOQXc7
WCFVYlJyPwp6TzxFUH0qe1BxdCFoPDR2cjEmYXh5N3VBYm47MHhaPCs1RkE+OSR1Jm52VngyK0Yp
KEtKSzNwMEd6eT1mPkAhZXgKekU5JmkzKzg/VUJxYGlxeXdtTVg4I0tRNVk5Izd+VTk1cVA1NnJg
YGArMyMmcChzeEA3en17ND1DKV5jdCs2bkphCnpHakpSWF9OO24jXjRZWmVtNkF1MEBKT3VpYWpj
UGNnWVhjJWhRKnJDaVVzOUg/ZndENjxeM3tBJXNTZ0hzbDVNTgp6Rnc/SHc4Nk9CMSp2STNoKzVP
V0YwbiZ6M1YlO3ZsS0dlSiZKPEkhNFpzRD5ZTC1pWH4jRVlYSnBBR0U2V3p7Ul8KeiUwKEk1Vjx2
fDhNRTt+Q3JOMEllUXQoXk9qQ15AeHBhLWlfWUUtYG0/MEBhX0djNVQ7QnpRKiEmPChuVyZqQDZP
CnotRjd2dW43bFMpKiVeP1duV0xNc3Y5XkJuWXgzKjxKNXY/WkY5bCE9YyFqPWc4Q31WWjlaRGFH
e0pLMjd7IzAoKwp6blk1QWQyUT5HeFZBeGlzOCZvd01GX2pKQk9JUDBCVHVlN2tJMU87RThjPnlZ
SktoJD4xdzhwZnp8eHh6PnVyWGsKem09TStXdkc7JFM4fmh0UihLTj50bSZUcHU/U2w2RCNuKkM3
dXsoYSNpXz9sekt6UWg/Xz91a2p7YSljfGgkQiQpCno1VzQ+WjFwbVdDfEZfeHlnTk9lK0laUEI/
JDNoV1VqWDJYaDZvaiRTLXozNS1fRDJzdTg0PnlBM3cwYD1TZml5TQp6WX5ZWn4mOGAkO1h7SV95
NXtQdSMjTEBpZihUbGFHNGMzQmQzVjQ0bHNlXmVXUll0bmZyODgyQENfSF93ekB9cCsKemFiSEgl
Y143My1sakZGXmM8SylCYzckSVU7aFMtTXluenJsKHopT1FMe140fSF7VFFKdmdYJUgpdEMwPGtV
RFAzCnp0bCFlRV8mMHoyQW1QY3Y/ZVZFbGRCWVIwKFpab3M/M01ueT9BKFdiVVNufFB1N3V1Kj9a
X0hUdUw1ek5CfXI0Vgp6TGtYZUJMO2ZCfSlwYHl0Y3J+ViRFYCtxZXlsLTtKY3VOampqSSZOKChX
TlR2Yn0hUj9Acj1XQEhqWD5rOXNfTHAKeklec3BfV1F5SzVYSV5qTzZCQFQwbiE3b3pLTlBVVnMw
eiY9bEZoV3o0Tlk7RjhHdT53JG1tXk1fVFZSdTVpUXgmCnpJN1J7fXNLQFpTaz9uRyZ6ViV0eVIp
M2p5KTwwbUIpe3UzMWhJI3E5KjEkSWZWSD53SCRyKW1XJHZwcXFxdzdqQAp6bTZ4RyVYRFkodFN1
OD82dCt3bUIwNU47cFFCUXVoP1I3Z2ReZz1wejYqUXw8ZU17RzA1XjlyeCk9WnpWcVdEUzEKeiVS
VHpRTjtZKndhUGRlQTEtRXpLZjB+MVQ4dXRRMkMkTkwzb2Q+NyNlUDNEV29rektac3o+IUxgZXZX
fWlPPWVgCnpocTVsT0xlWn4pO15XaiFlfGQ9WlNUQjFqYm0rM315UkRXVU9GP2RqZnI4SVRUOExG
XkdINlQ+dyl2V0FRKXEoVgp6T3xxdWZZVzlYSipmZ3ZAJE5xLXgpSSt+SFBNQiE8MFNaS05GK3E8
OSRYPGswVVZadzNZK2NWX2tTemNsNzYyXnAKejZ1PzRxMDJhYld6Sz9sUiE1RjZ7LXxXWjBSYzEh
TU52I0VVZipXRmMke1JGSCZHXyglX3ttbXQwQHh5b2E0QWY7CnpvbVk5bSZMen1nRHkkOEZPeFkk
U1B6OTtVJFFyMktSNz4pfDZEbl42OGJrUSVrKTUkVylCanowVU5+fmZxPjcpSgp6ZlQ3aFU7anVw
ak9mfHRUYXhoWHZMbCshZzkxVFRoaWs8aCNOPmhPRWw1JGphIz92ZSRGdmRWJSs3Jjc7Z0VOITYK
emxWMk9JYVJEPDY2RTV7eHR9YnNPdmw7WWlzRFZyRFZTRDxaZVZnK1Q3PUdxUFc/e19fajUoeGxp
YUdBOEVaZ29HCnphWk5pYVNfR2gkcHtuekpCYCtXMmtoZ047U3Q1dXhzTUJAb0NIb2JEUXhhWGQz
JHtEfWVuYEdmdHgxcDZlcn5+TQp6Yl9gYnNSOyEkQEM5V24keHVrJF5AOExrTXtOWEx8RTQjZnJs
NzlEO1dremx+ZiZ6STAmZ1YlWW8hYEMwPGYyUU4KenByOEFQTUFlYnNjX2BZfFpobGBfMTE3TDNK
YzkkI0teN3N6SDkxI0BJbFhETiFmYlQxU3NZMz4zbXN3T2g5fktoCno/d2lZZmhCdj5zPHBicVlw
WUpeYGVJYn49V247OyNmY1EhU3J0V0sldEJkKFRmNW1LTD5gVlVhQG5gWn1CV2Y3KQp6TU9rSkQ9
QGteNjBJQWZ8M0huV2ZudEk1Xmk+KCRJIyUreDBKIXs3fUdwUEhhSXJFSGY9PCt1YHVIXlYhby1M
dSUKenVKPnZHbW95dSVqb2c0RFlPSUNkT29+JEdjJjZ7akYrUGJhS3o5Tkk2eVElSy1kO1EjVVZi
fk4kcjw2XiY+U184CnpBe3N+K1E/IVBoWVVePH1xOWowfk55c3k2UEM7JHpLY0B8dGR9YCZTQUx8
JGhBUkxhdHJgRTg1SjVrczctZiNAQwp6PW0kfTtXUnF8dyRofW98TnZPRz03cVp6ODJRYE0oWjlM
dEdeViMhOG5qK1AremNeQH0kN19hQHMtMWYwS0w8YGgKejJhZURCaHF3NGl1fSNDfDZYK31CYkQk
R1ZhTVlia048a24pe1I/bGo5SCkhNCR8KWhjSm5YIVExPkJhK3dyaEZLCnpvMyphUVVxcUMhVztE
KVpMa19Id1RYbzcwQnBQaW1AJUJLdXFDUTxZTzRZdyhXcj5BWjR5REU1KG1SYDhyVS0jSwp6S2pI
M1YqPVQ2e2JiO1JuXkdBNlBaUmJVZCZ2dWwxNWh7K0pnUzk+Uj81ald8Nm58XikrZUBWIS1TPGRI
ZWxlPCYKemgjTzR+JXlAUmh2P28pdCQoYTF1Jj5kK3FOKFFVM0RYQH4tO0haTz1vPiNDaz8lS180
cU5aVFZtJER2QndKWVZCCnpjJGhVITV6VkIoRF53e3xsfiMkfVRLPiVHKV9CZnR3SUhYLVY0PiZj
ekhlcnktdWI9ZDYoQUFzRGhBVSFYamktbQp6SSVEUEdmQk5fN1pCMkZRLUA2TkE9UVNCPWMoWXdt
Q189az4kJTNjLUMrbDVUU0R7aElAQXU1dSFfQUl3M1o9R2kKelEhM3ZfM0xTUDs0R0QoSmxgKTRI
PzBvXkFRTHVUVjJReThaNF47Nnt0R2xrTTxRcUU5MlRrcDkzcnVXLWs+YT0oCnoqVCpfcCo8IV81
TGJOeDd1ZTxFfGVwPGUyRXtDP0kldUxFQD1WYU5pZXlwOFM+OEl1PnBuXzNHSXxrc2c3JC1CTwp6
RlMrcUw+QTlPM2p2UihuaktzdnZBPXdPIygrWHx5SiNuUX5CM0RzJitPe3VnciUhZyUxTjlnMHFq
MjFmN0cyazwKemg+JERaT3pGemBoOSRZb3JYejFTX3Y2YVMpNHlkNHgtWXczPHg0NGtzSXxfIU54
aXkjIVJqUGxjRyVUJU1XODZgCno/MFR7dHkwbGhieX5TP297XjZNfnxBQn1yRDErZ30rY31HZlR4
WCtZJig/RiUlaGwxME87PUlzKVVZMSRicHopSwp6MX0pcCpnUWJKZj9iSXxnYyFzO14ta2lheGZj
OE9tSHdUTSo9UXB1czUkKExPO0d0RllTNztoKFZgMFgweFc8O0oKemYzWkVJJil1Mn11UChRcDVr
b1V5Ki0kNE1BYDMzVyk4OG80PV9DPWpHam8yP1BxfX1LPm97R2tSVyV6NCs8MU4wCno4UmFxYCh9
P3BMOVVPPVRAJUJCWFY7RDxtRE9jamRRMFRoOGNGdDAwPFFOc0RlRUZ2dVFtJGc1anpeIyF2WlBZ
KQp6enRzM2o7WnJXJTlscDRGYUglRzRDNktlUypxTkplWD41O2x1PDZeZihEN2JCJlVxblV8NG48
MHBBP3BaO1UyKF8KenVRKzFxV0ckfUYlV3t2TyNMaSUrO01uSW8oO1ZvMWdtSSZrYVFTMF5AQTUm
YUkwWnh5JXEoI2YydUNueG59bGBkCnp2NnpYSFNMTmJXV1FMNSNGfClrVFJEVWhOTzVuYk5pfGla
RlBycD9nJCl4Q3tkLWdhSlgmeDUwTX4tZiVaQjZHVAp6clZVOXI0VEYkQjF+TiV6UTJIeSUtTih5
Pnpua3ohdHM4M0pST2s8NWE0aEloRkZHVTNFcWpnViVgNnt9cHA8MGsKekA/V20/em5BTShVZHE1
SzleWmJeUk9LT0JWPTY+U2pXanRIdjNpVWVlR0tBeHlWRHspKWIhOH5aTHBVbEEyVD1MCnp2bUBL
T0dpbGdLKkVmM091bGlQVm1NTihJP0ZoMkllcnZ+JWpJb3FGQmoyaHRMQ2AldWk4Qj9OWTtlcDkr
enooSgp6Zz5kdkVyUnRQcC1vUjMmPmlUMjBYO1k8WXRfYVdFLWhhNS1LR2A4c01ofFNkcHJEeWJ3
QnYpMT84OD5GUTUpVy0KemZXOzdANDJlPlB4S2E0QDYwPWswT2NrO2txYy07RHhKOW9RS0ZwX2dE
b1VrMGlJUCkmPHZhZ2drNmJQQ1F+ZF82CnoyOUk1TmpWLT44Q2dYSzJHO215IXdpeVprYUNnYk0o
cjhvfHd6KT1BPV9zLTE4ZVEhMT4mI3dBcyswbW94aGU2awp6KHg3PERHVWAwQmRLeSVDdDRqUXkx
aHlxZkghPHl0MnxZZEFwNyNaM2UjWjZ2dSpyY2hVbklxPGBsRyhIJGJvV3MKelVHeWB0OVUxWTxY
TDJDWT1qckpIeTE/fnktT1ItSkpDNyVPRkVEbmZXJlBEdm9NUmM2ZFFZdUJCQmo3JEZAUEl2Cnor
NkVvcGEmZU1hWmF8NzBRQ1JsTmh2enV1QDtsNGBEQXUhdEw0XntBKSNHYjM7XmBWLT9NWFBhdn4k
ZjBYMUY0IQp6bShFRmQ1PXljUi1RTkMwMGd6P34zdyVYNFpNOVZmM2gtSGBsPWByWTxYQGp+ZnQ8
OzY2RWNHJXJAUCg3YDdlWD0Kekw/N1VAeXw1UUFVPkN0PCozX255JXh9KSotaGYtTmBoZ05OMiN6
I21jZWcqJHw2YE5TeT5wWUBpT3FjRHJ2VGNSCnpZRDEoR2J3bjVOK3Nua2EqZ3kkNUByVDNPYXBu
PFJzMTR4PE9Wb3tfUT55aypoP1MpdngtaUJmKklaZ05KKmh7MAp6KXtKWSNDN2o7dUJxOXJMYkNQ
bHx3aHBtTXo+VSZQWEREO0RvZTU2U2AlUiUwVFNLLV9rPHxnRkZFa0BGWkp4QlMKejM3cHQ4UXox
N3duYmRuUDA9NztDNW08YSpnJiZrPkBVZzUzUUN9JUVuYiNIfSYyMShUUkltWiY1PjRpRzhxO14o
CnpCeElzYmtrMEsqYE8yTXYtdz5jeit7PntAeSZ5fE1eRUNTcVg2ND5TMiN6JjdjPEprI3o7IThZ
ZFhOYDVaQ3Z4PAp6YXxBVygoO0NNelAqcl98ckAhcHBQcHhKMkVmU3tAKE4pdHsjOHZmR3shWGp5
cjQ9M2xRVStzYigrV2F1PmBVQXIKendWMHtDbGtIWWFObiZ+ZXp5bTJBTCFvdiFtM0ArWUwhJjM3
N0ZuMn5XMnZ2UVo7SU5aKGhwczZ8RSRgbFFOez9jCnotVXYpVF44ZF5tJCpidlcye3MrPmFkVnsp
JW0/aUtiKDEzZipuajVDSzFJV21ZeihJeUZvQTtxOW1TK1pOfTMxfAp6KHspJklmZ1p1VFJ+bFlG
JVBTJFhDRkJgVHZQSWNNOTM/NXVrU19zbGleWGQ5NSMpaWpmYTMhe1FGMlZBRio+Q1IKentZMiEy
dGEqP2l3e3xyMlNaISkpXz1mdnhOP0Y9ZnV0TU47JFVOK0RMTjxRPl4qMDFZZ1ohOTZDU2ImT3hD
b3ZUCnohe3BLdmo4fWlBSnJ0PEF4fms4LXRHaykmb1FzY1IrZTl7aTlFa0Q1Y0hCTkV8SGF8eSFs
WHJKaiR+NS1gSFJeQwp6UGJ0bkhLUSVia3l4az1FQTQlN0puSHp1XyFERz97cFVUezJaKl56Qk1Z
bnlzJUxnWWNDQGlyaSQ8cUM/ISFqXlEKemU9R312I28kSjdQbjstTDU3SCEycUhZaiN4PFQlZ2h6
MitGbkwlK0d0ckZXNVomPU4tV1NKJjB1eSEyXnpST04+Cnp3UF8jaW04ISojZEc7SSgkYF9QZmZv
eVNkX295WkwqOTY2WGImUjYpPGxyTTtZWmxiI280U21VanFPanJWKmF6Pgp6UFFaZHd4RERZTVcx
ZGdhaGxGKVUqa2IxJCs7XmxQRV9qZT09eU1QQ3BhLUl1VCFYT3JOZSUmb0ZINyUlYipjQ3AKekVU
d0FhIzMpXj5vISV3RWNMYlglR2pEd0srMWB7cTR1WnVMR0B7WFd2fm1YO2sxI0p7fDliM3FPcEk2
S1MhQ3paCnphTmZydT94cnFILT9NSjR7aiNmUmckSkN1ZSQmSj53cEktYC0yNjVvRTB2NkFJXnIw
YHZPdG5yVUlwRmZ7PVVaeQp6V2NgP3dnUC1iSUBja1Q8VVJHcyRIMEZmcHdLKDBiISlBaT4wI3lD
ZnE1dmtGbDRiM2haP1FnbFpiQ2Q+TEg1eFYKem19RX5XXk5PTj4pS1JJcj8+K1V7QzExRFlfS2I1
dGpkUHpRb3AtR15yV2pCJnV0QkdlZkFPQWtuSjF1bUVYO0N2CnpNfG9uRjFSJip+Yyp5aURzKVNF
YiE3XyUwd0o2d2VEcD9sKSRGfjI9RVA7Wk1NSG9SZWJpfkAzS21AVkhxSDR6awp6VFNkeGw/Tm1l
I0VzZ1plVFFXNisjel5WfFp4cEg/YypgPEJ4N3B8anEhMD80WUxHLVhESldsa1dAcldxTVFXSk0K
ekNoWChSWTQocWFFbTxYQz5xVTZxXiQwfXJNUXl+TjxEQj98TXVBQmhOQWxtVj4tYCs5a1gjfnVw
QllsM1k7OTQ/Cno/QXxOS3c7SDRPdWJrbUI2MDclKD9EZG1+az8lWHFqNWBnLSp3ZGRERlFURTVg
NE5MSmx1e2RZVFVWe2JaMWcjbgp6eXl1JndRS0d3PHt+b3p3blViJXVAd04rZGBCZ3o+bmQyQyE8
eWZ0KWU4dDlOeT8yN1FxOXlidEgjaWViUW9YPmoKelJsQEgkSDBoPGF3YiZaU1pBNEloJTR6K0tW
QCF6dUExJFljZXdQZlB6a1g4cnElMkdUc0s+PDZXaispMCo4JXw0CnplQHhUPW9wT1ZzMzZDQUZJ
JFp2c0RGcUFgPGJFNCYtRWQ0JWUyI1VRTUYlWVBvSSpXSWk9bWlWTG8qXlYhJFR3Sgp6cTR3PmVF
ZV9SaEIzNSt6N0J7K1ZNfnhseUFxY0NMcCohN0sqbXVoUUx+VllGQlpjRDBQWVJMRXRMZVc+OTNS
Z1oKejtAaEtINWMqZDwpYjA/KStYdTBOR3YjbUxlJCZVdzBVczBhcFV2Nm1yJXVlcz0pKkh+U2Fm
ei1BP2hpJGNEZWRyCnpPbmg0cm1ZVVM8PX0reUkxYGtXdTx0b3VpRzFMJlgrSU58VkpIUSM+bHop
Oz5sZn1hMTswbnxtVk9EQ3xpLXV5PQp6bWpVQGtjMSk8V3spanlIdDJIQlZXPzJzcGlLXzZCI21a
MVlkWipILShPM3tLX0NpK0h3WERPYEpoOzAzQl5oaW4KeihPVG9qJikqYSFhQCMyYitBRldYbksy
UXF3fXl+VmhsTiltcT1oQzhRSl50X2pldUVVblB3RUYxYTFQfFRMKndHCnotPmA+bGxSWmdGYitw
KzQ5MzFKIVVsfGRfP1pzSFg5QkhzQWBzPjZVMCY8QzM7WHI/MDZ3ZyVLTTlJcTJfQU8lOQp6OGJ1
KG5hPT9WQkwhazdAX1R4X2MyKWR1SSM5fHVQVj5kcH15JUVicU9mPVRSd1hgeTRabS1WTE1AbFAk
Rk8ycioKellTTXhaT1JKKD1ldkBzfD0kb0JAX0t4Vm1yYzRuO3lTQX1mQTliOXVMYDhlRXt6P15s
Y3M8K20pMmVXUCl7RFUtCnpZM2JBRXBnITdwIVFgfFM4MjNTKTxkKlFGJEpIaUxrS0g7JClaLU9T
ZWchQTU8ayg8YjNNIXlGRkMoOUhWcFglfAp6e3E5KVpRPFlDcUwxIVAwOUFfVDd5XkRvZHdZZEVF
REB7KG03SHgmfEpvfmV2RXYlaW5sR2IoV2AjeldNWUBzNzYKeldyN29JS1YrajVjPz9kYlVOIzwh
MkFseCRkcyVQSUJ0a3IwT15VNX5mVTQ7ME1zRkV9dms8RHJZc1B2P1ExLVloCnordncpRWElRGZV
YWszdlJaaEctViFRKE9rPnY5N3BOTGdLWHEwb0EwTUcjVT8tMX0mMlVRNktKNXY7cWAqdFpNRgp6
I35EZ0B5dWh2PkpKUlBRckpGfU1zPGRpOVE9dE00Yno/cipKQDZpViV5fXxwPEx7cWorOSNqJkB4
dTZuRntoVU4KejZ9d1ltZlJaXj5Ke3V+ezg8P2RAO3hUd1dKcVVoRlltUFBNXnB1N19pRCo7IWN9
Wisrbno1eTReVChaMC1aIVEtCnp0UU1jSSE8KEdQRTQ1bVRscFlOPDJRPiRPYmJybGlgaEFkb2M0
amxLeHhkUkpAOEZNSGpMTjVBbypYKSphQWEwTQp6SFZgQGVOO1dMVF4rbnZ2bU1wWG0rRGhebXZZ
KTU/SVZPPjsmSEpHN2xIfX17YHJiJnw4P3s4JW1aMndTY2Q4P1AKemtpK0lyKnQ7KUQydnomWjd5
KDl0U21JYDBLMEB+bCFmemVLI0JaU2p4akVGWWwrOTRlc2w3QlhMYE91Sk5PJkI+CnpsQiNVWWN6
WSN0Qnd1aXk/b35Xci1XVERaZXRTTShVYVFeTWE7NHZjT2xCUX1lTD9JelV4PmJxOH5EWkB5IVl8
agp6ZyFKVT00aV43RT9XNFl4NkBSfX5yWXx8dVlhTSlKYUtHVDxIKG1LelAhXj4xRyRXezVtYj5J
XzVYYnd8eW8jJXsKekUzeH5SWjJGc1VIXiNsajJNeDtoOFUhXiFoJiVYMnhYVC1yMkotbnxabD1A
OC0+YilTSWVhank8SUZKbHpVYWJ6CnpJPk0+S1lpY2x9JCFTUDtadFUpYVZ7M1lmWVNyNktLVX5o
MVEremJnX1pfb1pJOSYlRU84OHxtb0AmWD43O0poTwp6KGRhRl5aWUQwYWhMRzk7WGBNYUF1bHNj
VVlCV0d6PDV8XjNXeTZWM2IzLXVyYlIkYWwkZz1GbSNIX0xQdVBjdlUKejQ1S1F3UTRgYWtEfGhl
b2Qkb35EdHVFaUlXflFDVzd3JHpSRy1II0VoSHklelBibSs2LXhBJlNnSUdtPE9WNHhiCnp0Tzg+
IzdSUHlNV2lFSGg9V1VCVjR4ZlJFPXdBfCk4UHokSj5sYk8/LUgxMmVNfGA8Q0pVdm1ReTx1Rzla
KysyJAp6enw+JHFgJjJyNmMme05mR2d+KHBpKE81K0VvJWs0NT8hZj9CcGxDbUM3cjRIJUZyamJs
NDwkZVRGQ0R3UVkkI28KemImZXpGaSthNG8xd3Q7WWAmPzNHO2J7dFNwX196dEZTaGpYblAlMHhZ
YEo2ZXF6QHJ5IXV9T3w0QWRJYXdZbm5qCno7QFQhOFJwYF9qQD92SCRTLTg8ZnpPLUNITXxiX0Na
diFlZXs3fCNRMFNVZ20zfSNNQXZZKjgySGhkcDdeOE9AMQp6NkhIfTxlfDA5O1VGcEgrPz1SYH1y
X0pHRC1MPHQ+Mk97cXJKZDdeJGVJZDhrUTBQbjQhO2MxXiRTdUw1ZEM2VmwKelhsVWpfZUItOTd6
R24rPDI3YGI0YSRUOHRuJj4rdTJsb31uU3BTT0ZoLWhoKjYzYXYxQ2k+OGNWdVUrVHpVeHk+Cnoh
Tn1NezgwIUB5RVdJRjAmVXUqK0g5JDVWY0pxdytzcGhIWV48KCMxVDFtTnpkXjVrfnZeOWRpMVJq
MWpIOW81Vgp6P0liWFlEV2pzTG49NHtVYGN2e19VM2ohLXpJSHdIaHg7T30zMz1Oei1kVHArdmpU
KjVxaWdObFdvWFpfMzBBI20KejM+M2BEWHo9eVM3XlIzYFQtNWtgd3pgYT4qYShNTnJfJVB9KTF1
PDJmQGZjLTwpVCMkc2I4PkQrMmspRnJFMmVLCnpramh1NT9fVUN3dWdgdX16VipMKyY3Kjt7eVRA
SnNEYzZZSlEpTGBHaktKPjJDVW8mSEwoJEVUaDs3Wj9EPUR4awp6dT9Vdm4/TkA1NnNyME1tXi1N
I2wjSjUzWF5WMmo3WX1HYVg8O3BsKnI/RWV5SVVDdnRvKWJ3RiM+PDVGTW5mZyoKekllTUJNVD0k
SUpLSkFkWE55IUpaSUo9PjZ3R0xZSGxLTCZeUypUflVTekdvV2d+PmBxQU9BZk12fkM5UlRDdjE4
CnolPjhKVj96UFJKbGdsPytfQTJVIT9RMjUxWnkyWWBeWSNzUDVkUDFYJEYlPFpuMUE8XmRTZU49
c1d2RiUjJlFyeQp6UksjRTs/OGIwcFRBcXR1IVlhNz1yKmFLUVN8P31iX2FTUypQaUB1P2VfJSZg
cWtzUSFDMERvRkEmRn0xdj5LeysKekN5X2RUKVhufTFeKGY1RFJ2JSghdDZPPXteN1NVWlFwMDFI
RXlUdTVgVGx9NzF9Y2RiNzNfP2IpJGRkTkkqRS1ACnppU1YmPml+RjQzUThKbnclRXxnQVpDVDV6
c2VTX2QlX3xrc0lgYTwyQmVgdyZ2KygqIXBEI3BxI0wtRW0oYz1vVQp6QSYyMlVNTit5bypHJXY5
M2d8TXY9YztMRTx9V2RQJXFOSnFnWndESzVteX5jVXVmbjlYcGxWREhKS202cUtoK1gKejB4amVp
R0hFJUVoSn1+eHN3clZaVzFncURVdUleR19rSS1TbkZzfE92NTVwNmx+bVRXJlY5dERzfDFoWEd0
cElRCnpRKX1zRlpfTTA1ek0pclhSZkdiKGpWYlQ9bWtZSEpkRCkpSk89QytpM1pKPE1pR0lqUXBp
UnhnbzBzMnAoOSlWNwp6bmA3JWNBP1plRF8xPzJHbzxSVmo8RGIldV93bWNVJj5mUnZ4SEk8c1Z+
d0dNOF56ZGU9cDJoP2dgYj5oMTUxeHoKelRUSmRtYEcjd1YjaUdGO1p8JUQ7b3l9Uyt6azZIRW97
TlkrQmwqbT49RTxpTFpiUDxfVV5BWFQxVTZOPFdaNV95CnpNaGclaUdTYyRlUDxTc1Z8QT5HXmla
WUg+VkFSSnQrfTktJno0K1p7c2h9LTlJQHghUSgxQF9kQEJBbkVAc1VhPgp6T21HTWBhbTc2dVlC
PVBvRVlCTV5yZD9gQ1IzYXFrb0o4SiN6eDJ6YC1Fe017VDdJSCV0VWl5KEA0aUs5Ukd2UW8KemNL
cHp3elc+cTBpaG57d1lWRUw8fDVOSXxrJUlWbSZDJkI5eV4oTDxpQD9LVV8yKHc3Yk1Me1NzWWNJ
Km07WGxtCnpiOz9xc2t1K2olSlcld0xAUU5aTDg/NT42Xj1CPU5wTVU7dVF6UHFTcml1QzBPWHUl
anF5Yn1taC1iQyp6dXZGbgp6SzMjSGBOfVQ+Vko7Q0UwJiR7PykpSHxIJER8NkRLaWA7YCUoZSgm
JUdtb3BCMSsmX3BtKD9zdSRPQUNEVjR+c0IKelI1QDFsSzl6dEtUOFclISpscDszSUd5bGVjaFIk
Ui1MdjFDak5UYEt6aU9KeGVAJCYtU2shTT13NlckQU9HTFBTCnokQFktciVqWl9YWFM9TkcheW9N
XlVLRjUhP1BBUnZXbE5VU0ZJbCNlWGB8RkxzUVVoJSQkelk+R0pHaUZSKHZtdAp6TW0hVUlJN0A4
UTJMQWghTTI5RyFzanR8aTZzalo+dmFzMkkqKk8zfUNwM3MmTjsxI0t6RHpqTm90MTkqYHF5fk0K
ejdyOXdDIV4lciMrVWpNeVFycmkjMzMjR09pVEJmX1hQOXhlYG1NKzQ/Q3BNc1BxakZWZVA0KDZk
VlYrbkp1fDBOCnpMdGBNam1Gd05ebV4zd2w2aE1jY2BLdX1vI2JQcUhGMFM7SiZkKF5DezFDPXRw
bmkjN1BKcU5HVkJnNDJlUm5NNQp6KCRUXzAxPyNRdz1ROCkzVm5LNkdEWnJYWkt0UiFFdSFfJldq
TTV+ZFRSdUlDbmd3MXw0Qn1LOWhPYj5FQ256NVoKem5JTDVWOEshKlFrRUEpTHBRYmU0ezxhQllx
dz9uMFBqSDcjbkp2VXwmN0Vlb3Q/dDBzc2t7bUg7MU9rMTdvPDc5CnpxLURuQDN8YCh5RzZJRE9F
Y1M8aCQtWFd5PD9mJGJFdWJpY0tLU0g+ZjVtbT0rbEteTShnWGQyOX4pI2FiN0Y9Wgp6c2JvPnFt
YE9IK0BvP3JUe3ZLJFRvNUhJVjRqUkshKzQoJU9NRFJ1PFJsNyt9ZkFFVUZHPG8pTEFZN2JPISpA
WGsKendCZnk+R1NlSCN2WWVlRiYmPWZhWlFART1ka2VAI25VeW5jO2FHdTVwb0VwTkEtQEY3V0Bi
ZEtIR0UhRHYrS1Z+CnpkTmFHO0pjfF5DVktMbFpVNTsxZlc5Q1ZFdUR2KlJVclp8YzU5eWJURVdO
YFlWZU4pTWlhflN1VXV8Mn0kKFIwLQp6SiFZS3Ihe0ZlcWx9K1VhQn5wSEQwWEpyUGstYiZSUE9D
YiFAbUFoYzlOd2x2bEBgYmMtODREb3kkPVVKYmVjUmIKelZXQ0kqPlphYkFIJFg2fVQoPGJfNEB9
MipVTm8oRit8JVpJQyQwY2U3XylhRmk9YSU4OS1EYyRPZGJ2a05aTkMlCnoyYnUxdDlaZlJDVkFK
NUFUS3QtaVF3JSYzXyZuKFh3RjxfIVRzeVExb2YreDkxUi18REVlbUtrJmp4M0BXfDV8Twp6JWNI
ZH54XjBJSz4zMHBPO3MpX0M3dnlMTTVTfjhCe0RUZ04kTSNifUplUzdyZEhwWUtHR3pZRVkzRFBZ
PH54dDIKekF+REwtdllPY2VIeXVJYzRhaChLRT5gODMzUHpuXmM7SEdtO31yTlFFIU05eipKcUNq
Q0Q+KmVCcnhsVDFTO3tkCnp2R0NZcVh0KFVPIzlHYDJKb1Q2eWV8N2hKQSFJQ0NPTmxSU3VaNE42
KyZydjF3ISVvQWZsVFZfZnlfS2Jydik1eAp6NmZhY2hqTl5QfEo/UFhTKihLQTtKUEJxTnY4JD1G
MkVLRDgmYD87NHY1M2R0SW9URFJVSjdue1ZKJjh4RiphQ0wKem9RO0t0NDtYS0g2YTU1JnNPcDFM
X3VUUkZjbk90IXB+TEJCWHZ4MStkQDcpWEpKe0RzQ3kmPWtqMHFtJjtOZ1hqCnplNTZRQ291b2JC
ITx0K2wxMF8/OzxyNyYlVD9ZaitNUkp1Wj9jZmhkTjswX2ooUzhEViM/JEtYN1lpMmJuQndXWQp6
SVd3bXArd34xJisrZlhYakhtNkJmOTIwI0d2R3wjXnNLWUx3LXRkVU17KVU3PyN1S2BKMVFkYXc8
Qj1mdCtpXj4KejtGQSp6MH5BV0E3aH17fmgrM3NENkwoKWt4X0FRZj5JWnNsNXN2VmMoVFBTaClX
KGU0bGVGJHoqPSozMGM3e2FwCno7aj1LQlI/O216cXp0LWBhUlN0cnZgJHolbk5NdVpmV3o4ME9M
anEoc1J9ZWthTGZZRj51WFcxPCRHbXFielR0cwp6UjJwOGZSYTw/bUhwV0hgJWR3K082UURqO19e
MktPeTs0Ujd0UW9kP0dZNzdgTkF7cyZDflJuTFE5Nj5+Rl5RaGQKei14aHZPXmROJU5LY3lGayhO
SHtXTTdUQldrdVhVMGg7RDRUbHlTNWpVKyVTdWdKI3cqKSRqNXNKNU8kdTc4T1ZACnpCKURmJXAp
WHlZSjg7P3xJMnN4OSNoMUN4PFEzUSZgSFE5SDNeZj1wX3lsNC0mWntnUnB7OGBjKEAmKDRLX3Vh
Swp6XkJCVTMmfSRBMmhDNihESVZBeEJEdTQwPmNHVj9HZV5xUSQjaUdBND5ye01MZTthPSkmcnkm
aSFuRn5pdyNoLUUKem1efmd8VmdzalMrJVdrKHtpN044Vz50NWozSFJuQTVePDFDcC04T1heWSR2
elEqeXpkOT8xdyk4KnlLeWJ3NFN4CnpYbysmKEVseXJ8clo3OGlzUlRWe1FuPTw/bmxEdk9rQWFl
KyhKdXtNPVlKRl56Tk5+MkxfMTtSdEsyZ2dYciMkMwp6eEs9WFlTVHVpXldmbVVPKEBzJiVXTiR2
NDA5MmB8QCpLcEE9R1JuWFdMc1p9P1J9YUpkO0taKTF9S2o5KXxRcXEKei1mbiF5eEx7MChUfkEl
fXhXRWohUFVjS3RsfTQhVzErKWlXd2Z6YXl6RHxDKyNTM2gzc2lRSzB7ez4+dEZsb0E1CnpIZ1k1
OFV5O0ZMMm0qalI9e3pTJjc8P18lcj98b2g2aSt1WF4xQXkmWktWNGZrU21ORU9WMHUxX3FzbWdI
NlkzaAp6JWshKl5EJTklMylXazxoQXEkLUY+Qi0tUl4zI244WXxDbkhVKnJWPWA4dSFGPD4lc0VK
VF9CNkFBNF4/YkY8ZVUKenZydkpwa0JeSypmcHpRc0dJJnU5WG9AckpfbyUqT0xKKHtxZHx6VXow
ckBCPTdhfTYqQ3tkPCtpPyZCOC1zSCtCCnpqbighdDt+JW5IbyN7bEl3e0BJYDV8ZW4+c0hDVlZS
QVpzbnR7YWNFV1dMPzRLKERQSzJPaS12SDFoWFZGU0psNgp6PTlPJkUrOXx6cHZzUVZadDcqKHYl
ckk7ey02RVNGS15CeVIxYGs+YE16ZDEmKGQhcSV5Y2w4RiNPK0tiQDl2OX4KenU1cSgkell4fChr
aXdjQHp0WUhoentPeyVsNHFGPVJzWnt8aktaVnRGdWFyO1YxfF5pQy15X2hYSXdUWkxgTEl3Cnoq
alVOYEIpTT9FWUtEQC1RYkR8UUU2ZylMZGYqUzNkLWMxVXIwM0w8PWVDPiRGOzlsRWcrJEllMEtN
RmlOS0JSJgp6YGh4QXFqbj4zRlo7fXw7WnJvfH5XOEAlNFdXY3o2VFIxeWxmbXcwNGYhP1lzVXIz
MTZuXzVeT2olX3ZpZj1keCoKejhDTDM+bz9fanUlZ1AhNnYocjtiTi0lY0wpbVluTzdYOFNoMiUq
UD52NWJ3eW1sYHR2Kjx+XkgmNztJN0tzS0I0CnpgPD4lOT8pQTRLVXpiN3dUdHMjTjV5Pmx8NCZ3
Sns8dyNqNUpuSz99dV5teWRESD52MUpQUyVsWmNIKlBQWVBLUgp6R2xEI0lBZjtjYXc7ZVAqNWZu
aHApLU9PMChCMkghYSptQklzenM9S3VzPW4tIUQ1Km5CRGpASD5wOGExK1ReajYKeiZpWDVKRDlf
MXdtWkhWZFpsQGR1TEdjalVMN0RkIygodmYwd1FnNChVKklHWjN0P0dkUjxPSXUpWUIpa0JxJXc/
CnpYRnoqQ21sb3NeO241SmgjTyFKV3M9YFdxQSFEMVYtOW0jNzVzOD1EXk59aVdDKD80UkRfejJ5
I0FrPXxUMTteNQp6eFAoTH4lN1dsMnJ5SzBzazJIO25LaEZXP2h6TWx+Q2pHO2lkMnduOTNIQXdo
aD1EPDxqd0pWSElPWStka199VHUKem9OZUtjMmFkbH0yX3ctaStYZF9uJlpIS1JTUiUkRkJjJWwk
RlNkZ201KD1RaTNPcCpqNDlZUTg+UVZMZC1fVnBpCnpeTWtoPl5fYFRCTzZXMEckc3NzdGE+VXFt
cTRWJHVybWFzKll9TiVaUWBxek9BWU0qeW1eMFYxPGdpQWc+fFZzRAp6blRWblU4RklLcktwfEdr
OFVodDY5Um4/RnJzOyNIWTc/azhpP0p9Q2lvKlJzJXpDSGtoR1N2dWA4amFkSzxYPDcKeilgQjVO
QkB7UjhDI25CWiUxP1JANmgweFM3RHFwYShXKip7diUkfF9hNGtLbEZRRXNqKnNFe0hOIS05ZzBa
QH1aCnpNZm1qVCo1PHx+dUFINDslaTlfVGcxTGwwK0FNQ25VcStpKjxRUnJ0ZS1NUkx0YHYjQW5m
K0U7aEQ+JGNQfmVmZwp6QHAlOFZZS0teS3kofXBgQFhHMUVwYVlqXng7RT59SipCLWtDUlUzTCFG
QnFzKHYqZTxoT3JPbl9leW88WCZATkMKejw9amM0TnREM1YtUW56WUlkOW91QkRxcEtAXn48UGY2
PSVHLUlEbG03OXExPGxXJjxndG1fIXRYKVAkaF4qJHVECnpUbHk2VCYqUztTO34xTmRSNEo+VTNg
YSFnKnwlUG5RN0gqP15KZ3B0eEBhQkxWO1VaPTEtKXl0dVNeR3hxSENaZgp6JlYyaE9CPlY5KGl+
bXRkQW5yeCNxMDRve1NrdzFoKipxYncrOyFmRF4xLUFzTGBnRW9sMUhOPiRsWnshcTZTMykKenI9
TVRvVnZsI3NGP28reVVPd2VhYnBFR2ZKbn58XmR9dVJ7b1pxJUV5WWZsMT5valpOJmxvNzchbXxJ
fk9hcylTCnpmISMweDB5ZnBTbUBhPDFmKUNEfFIjQjZaSDxoMmNpREp7TjVidH1pdWRBbXwhO2RU
ejtSflgxREI9ekBmSjN9Nwp6OVRvUyVEME5Sd0RhdlVZcEBpbz52OFE2SGQmUSpwKXREZj5TdWg3
OCQoZjdiJGg8MXlpfn1EanZMVVFNbC1IUFQKeks8TndBTmZjam18N3ExQzF9e256JT5xPTlUfT9S
MC1Ycj1uejdBXlJiVjNUKTBMajlVXjdBdSM/dGwrSTNxNnYzCnorOFB4WSVxKnlRbEtRXmpndWom
eF5oNHB8LUc0TiRidjZ4dmRkaDxKMnJxQEZWRmImaWN+dXY8fDcxKUg4PSNsNQp6K3ttYHpQZX5H
UHZIX3tZd2JwJV5WPlcwXnU0bnFxRXpXMkRLaWtPQ0pMa29TaGo0Z2JPJWptMypgTEszYW96RiMK
elZlez5NPXEhanFzbCokRyl4bFYoajcqYzhJK09FR09qZW9uVkI7SnBvK2x8ZHpjeSg4b3wwZ0RH
Uz4kajgmYVNtCnpXcW99SnVpeG0xVGhpSF9NKk5kRSNoOTVXekFpYWhLVFZJJW9sYUIhXkNMfkpj
Rn1haVVUcG9nXmJhTDUtc1R7aQp6O2dIRDstcWVQK0ZIZ0tEd1hmfkVAZCtUYW1USWlRNT1STTVM
JDVIST9tNXNzbmNCRWc5eyp4KWRZU1g3e3d2KnEKendpSShfKEohJTxHaiNTMD0jUSZUO2BXYSg0
TnQ7TGdANWY1e05NQCVxYHNXRSRQPTgpPXZ4KWZFfGw+TUo9UlpRCnpNMHxkXjxFS3NrQXArblZg
NCZuZzdYdmolTWY5NlFucSU5bXcmIU1tbEY0cGcwaWAkXm1DbzFsP3I8dmlLX194Zgp6aXhzSjM8
fmVOT1ZmPUR5bntmSHgkfV5TWWFYTkZnUGN7aEpYXkIqM01QMSU5MGxGVy0tdWxscXY9YUFAM3Q8
RisKeipvbnEtaWJ8N2d0O0xWUUhmX1J8WnVVUVU2QjY1Vl5TSUQhUHZUPkdoe3Nmej83d2sjQTFG
UD4+eGV5X2owKGJsCnpuIWttZ3BldW89bGU7LS0+OGFScDxyejZsbF5gdXRYMVBsN1R9I3NaWl96
U2ZzXzkrQHd1TTRGTj9QfCQpNEhEawp6ZEktWm1qd0Q8KEUyJFVWQ28xM25DKD1IO0NXPj9CKXRf
bjt7d0dRRG9OQjRxYj5PYWAhR1Vva0xKNWVMU29kUGIKenBBYHF3KTltVTMtYGc4JF9+ITNnUkNP
eVppdnNeMUghRTdeemVTNFg1eHx6elhgQVh1MHFzKlZwKG1mRSF7Rng4CnolQ35vUzk+NEAyKmMo
VTd4ey1iaSF2Yy0zNj5xISVJPVA/U25iRT50bz96KGNNZ09AaXBnJGFQaCY+P3ZJcDYjSwp6ekpJ
YHU/JmR4ZCZeMldqXjJOJVl3eUVCQSYoX1ByJlZLIT9NWDZXWDJ6TyVCcnVrP3o4XjY5dVZtUmZi
dz5peUUKekJtcjBBbjBqNktGbmJUNW0xN19YIW00Z1V0elB7bntGZHljbTgoQHxDM1E0ciVLTEdA
ckdQNVg1PEJyWjJuVkRPCnptPk9yJWxrT0tCajRkSkgtM2xlRjdTOXl5NkJnIXFJczFSUVphT3Z7
LW9fQXsxY3ooMGhWUk5ySFE/SXk3fX12YAp6UUZuJUo3dEJMSThfeFZTdzJqRkViR0EhPl5JJj8m
amh2RUNNPDJ0Zjw0NSloeiVZdW90PyUxPzs1I3A/NSR+b00Kejlwel9sQnc5VT5WN3MjRUgoIUdr
KVJGfjw0P25eNnhfKHw9OTYxPE9GdDd1WkBeUDFzRmE7aHhAIVVlYHpSSWtCCnpxQn47aD0oRzM8
SGs/YlM5SFJDNVVRQ2FPaCZhYXRielVedjNgIXtMYkhpRzt5eTM5cDN1aWwrZiZqJSYxIVQjTwp6
ay1xSnAqZ2RKRDQwX2h+IVJpVD5uRyp+VWQybiNAWS1ea3BMX1FJLUdDbVFDaE93MWBlJUx7Uypl
ODZjcDkwQUEKelNWQ3ltJmglbTVUck93K3khb210Rm8kMD8xd0RmM0NNdyFLQipSU2REO003RUU/
Q3wwd3ZXIS1nRUw0XjY3SW9DCno7O3FASEZgbnFnK3N6YyFLTllmalVLMDdYPV9tWkJldEgqNDxR
Uj1ieSRfYHMmMDJaNDZFdmYjcn4lSmwqcE9Mbwp6RkNDbFN0KWhCU2dYcmRNUn5pWFZeQ3BqaHch
YiNXUUM9Nz4od04+Yz83PV55Z0BsYCltP05HU2Z+ckRVS3FOemAKemBuP1hlSnpkWGtOJWBXTzZ3
QU0mNUhHfmJLb2lkNmF5O2FoMm5VI0tLKWxNSXhZV3x0Xy1uK1BzflEmfVN0ODVECnpvTnI0R3Mz
al8qLSluTEZ3WHRZYitDVGFDfEV0Skd7dlMjOXxFRXZ9Z3V3cipYSCMrcHs0bV5aUnlIRUJBfCR1
PAp6TH1Wd2kjeGgqaklsc0VNe0ZHT1RQdGwjbDdyal9XcDB5d2xUUFZOTnRWdXleVFF+bEEoNFhR
QEhEKXZ5dnp9Q3MKem1qZWdGbVFQP1ZqfCZBRypPaEE3ci01YEUyPGJlMzFMRVp9eiNfIXEoc1J6
ITFZIUtzaV51VDxYODclcT1WfHlxCnpUNzNITHBVQ2hAKkNBYGNsQkBGQWJxbm9ZS2pyWTt5bCMy
bHJRSCo5SClgI2hTMioyOzY5amsqQT97bCooLUwkWQp6en5YYjNSQjNNUzV1Vm9hWX5rRHw2SXU5
eDB9bkJMKnFTWT5YJWlXSEk0SWV2MTZ0alh6Y0N2JldjOUEzN2t9ZzIKejJ3eWQjbW1OTjVFQkk7
eFU/R0RtYH1+MUI8eGtKUWFlNDZLe1hzZ35KbDZ4ZEtBeEwySDEzOG49cjFqPUd1NDYlCnpRVnJs
dz9TQVY/Tz9NcVU7UmZHJkYjTjd6Q25xPWBXX0ZtO2NqWm1QKDlJUyZCIWZ7QnN+WlBRT3chR3Fg
VGNwYgp6UTdwSCtveSpMLSojQUFSJE9NT2JecTdoQUM/UDY8JER+O1M+dVdnSTc0eVJidjZkYl92
ZCYrd1IqYFNQcjw2QnQKemNLSCR3QGUkZD0hbD1HV3tveXtNcDArZmxiNGBgVTEmZi1hI3EzMCVk
SHlje19pfmIhM3tzRWUkdTZVJmw7TU1SCno7MCQoXmBBejVFXzdXVExNa35ga2krailnRjV7ZzJH
eHwjVTU0cCElZChBP0N0X2hHSkZ6aiNWRV9NcD5JdlMkeQp6RmNyVzhofjZgY1EzTCVzTClVSEM2
Qy11fUtXez1pdVNJKEMwNk5PPFJzWj8wJD9meUUtODZCNFpeRkA9JjJCU0QKeihZfFpWT3RqQX1v
fSpLdFFwKkZKVjspXmdfcVEzSjZfMTU1cG1OdnJMXnRnWVFNUm94YGtkVHM9K1FyYT9MS3ZtCnoy
X2ZLUFJMfEotbEtfXkxVa0JyPTk+M3tLVkdxey1ibD4zTFp6YCFzKS0hNzJDe2kkQ2d+ak5QUVNs
Ji1uKmVQLQp6PH1zekhtSUE8MF9FbEFabUN2KDBsfUZPQ2xSZFFvN3MlPjRSb2k9bHtDMWxENkFS
R2ZHKG1UZmoxMkwrY3ZsR00Kem5eSUV1Y0V4MlRwaDQjP0VXYUU0NEUwZ2FiJFJeK2BQYmV6UCUj
YU43Kyp3UEl8PjIhb3ZnVHd7b25Lem9pUEl6CnoxaTViTWlafW5sI2NgI2dyMzlzVEo+YVdub2Y7
bUB4UGojMUU2fjA5WSk+TV4keSskO2Q+IWNlOEgmVTlCO0Q+cAp6I3lCaHQpISZII0Vscm49X0JZ
KjdpQzYtbjwhJkozV2c/KyhpN1c2ZzBEN0teejhJOyUrfSF9JTU4QnxHJjVFN1IKelNHKHFWVEhM
QXpJKTcyS0RPJEk1MnxAKGZvdGdIWiF7Z2d0PEMke3hqRD5ZNHxOMjc/d0JGUitXSFhJc3JAK016
CnpHaylCXmd1eERYeDBmbmA/TG5gfFdqK2wmcHcrdDl6ME05YkZUNzZKbkBzKy1qZGo5PTRuUHZU
PGRoYEZpendaawp6PzhpSmdEKCpObGZZWmpCZUU3UHZVaTdrfU1xR1hiKWQmNi1qQDhEYjdeU2cl
JEcrI01fQW5HSmpFNlp2Y153KHIKekwqQUFnTXZ+dTBkeTUyeT9tNnYjWU4oLWZqKXU1X2ZAR2Jz
RXhrem87TlpUdz5wc3g8aytyfk9DLTJTUzh4SjZ0CnpZP01VPjJ3Snx3JVExJkdnU1hrMjRlMnMk
QWtQXlhBVjlMQldnWlZmVHhHbzkrcWVLM09BSXRCemBRRkVXQUg/aQp6VmJEO2dFWjlEUEUkZTRX
Yn41SHVHM1Z2QTV1alY9bCh3I0MtJDVxVVZPIXhOeiR6WWZBd25IQVk2K0szbDg0SXIKejJQXzdk
MVJ7bjRHTl5EP3MmLTVvOXszIW0kcTV3N18pKlZteWFNRzdYLT1Fa1IjI3hQYyF7JktEbmNaTFVw
UTt1Cnp2UUBAZ0pHOCZ7Xn5eSDdGUU1+QUE2bDR6U1FEMjQmMHQ9M1RBazU7Q2R5IyNVWVc3ZFlr
PilJVnxjVGB4eEYkaQp6NCFfaW9KdWxZM3lOci1sZ1V5enJYbE5qc1NXVDtgPz5qX1AjQGpiUDR8
QCg/dmw9WTtfUWpyIW1hWnMoTz5jZnEKenZQVjQtVX1iRHZ7bj5vNjhBVFdnWjs2bTYwP1dlOSlV
fTVGV31mR1EjdXpsLWJ4YGhvbUY/SGBCSGM5Nmx9ekpUCno8LWNtKFVqIUE2TV5kMGtUKHBWb2kz
NH1WIzkpK2hxJE9iZU1PXnVSRXRVVmpqaDVhelZlRVU9ITVhSW9tKjVLbAp6WTZjcl9HcFBndHMt
KVdBPXVxRTxTIXNtOyQ0LXhYcU1aRmoxITlSdmYrXnE8YFBSMlMtTnNoMkt0MVpgP1NyTSUKelU+
fT5WUXhReEBMKXxmPmQqQUdCcn5lK08xQjhSX2E2YmlmPyRVOEoyNURjfHhUZXJaRz9XZmJxazVq
MXJhOUU5CnpVYTwyTFl3eFMjQFg+OEtoJk0tfUBaJm17V2Q0Y21BUTlhIUZobzRueXEpU180PyZj
cz0pMGJ+NTBDPHIzcCR+eQp6Yn1tIXtBJDBhR3diP3tIO3JncntWVmgjVTIja1ohUk99ZXE+QEM4
akFlXmF6RitoejF7V2F6S3NibDg1N0Vsa0UKemEzX0JWZUpNa1V1UzJsViYqcEVqO1FsR09SdVR4
ZE5Ed2ZWSV99ai1iMXN7PzFKS3k3Tz5QRjs5eGpsRSU9OHE+CnpiUzJ6Xm9Scj1TJCF1Yml5bkEl
Kz5Xfk1gc1FgbjNqWEZTLWdKSSpocWNOPCR6d2NNcmdsN3J8VEUmKmJQTmpgfQp6ZUswenhgfjEr
cXV2am45bE08WTJzejJGeUFRayE9PEZfVFleTWEtfmEpeWYlZHx1MjtmNysyUyRWMGVNcCVuQ3YK
elUrSSNNe1h7e2VrRz5pYEUzbElvWTJvYy1fa3VvXnRZYz5CREpwV3FiIUspUEZyUHVOUEFwNWRY
MypndVNfbEN+CnptP15GUDJuJmlFdGRzWTNGfDZyKTZYTzNnel9qT0FZOSZvJns1PUltQ0E+bF9K
dzx0UyZ5eT5GQHJSRiYoS0l3cgp6TWdQUWhIZEhrMnEheFl5fDdvSVBZTmFFRVN8bDszQHxKSG9R
KnFjdUFHK3h6PUI8ZjNRUShRfDtoR1AmaWBlc2MKekYmRms4Y0BxNk5VRlFqYThxYnFoNH5pJG5R
KXJLe1kqY2YlUkJkUGc7RXlLbnYtNSt5eSg9UGc0TFkpfWRHa1NNCnpJITUlSlA3RztaYWA1Sjdq
SWAwfDJGfHFabH5WUWlMYHZEKWZKSUw4bk84ZFF0KFI/b3tgRThiclg9NGV7bGJ1Tgp6e1VBTX5q
PyQ/SW9OTiVHbWA4WHBoR315Xj5eOSk5YCR+c3JiWV9NJkpvfEE8JEJJLXVGPnNORFcqUm9mc1Ik
bkoKekEpZ3hpOHt8SiY/YVJQcWh+TDZ3YXZBQEhwK2JtS2pXRXAoQnViVHhkNlJaWCtyPDJAJEgy
eSZxeU5wUEZJenF2CnpCN2EqK3BTZ2lFQyVyeklqWE1ZTDhsfWFrc3NyOVVkbFBBbUwqS24/VWhZ
T3QjMFB8dWJeOEIkSD4pKHZZIVY+fAp6SE5HP3gxeCFCWDFrSSNjcGk4ZVFWRXheSiN0RX15N0t4
dXdlRX1VMVlfQHJtNTQ8QlFpVXppUz5QbWZtTkJzcTgKeldrfC02WkJlJGZ3b01xQ21TPGZ5Zzcx
PGkoPjJNV1cmfkx7IWJ+MW5OUUdtPWwjO19ZYFFCeExheiZOfVRsblhUCnpiIX1NPmdDbDV1JkEk
Zz9nKCZ1UmslIz81OUJxblFxR3pkPTVWQyZxeVF0PUdOfiRGYnBlSG5SVmh8X0ExaCFkdgp6V0p+
eWAqUDd+I1EyPi0/Klh7bGZvSE44R3IoV1A8R3UrQ29CRCY9NStVUlotOzJFfkpjfD4tUHhwdXdv
blh2d3gKenpLLVJjOWNmditFIzxVUHd1aHdrbGlgKnZDVll7KHc3MklBQyslZGlRb1IoP2R1fmFL
bUd7PnE2PDQrJF4tZmwtCnorfTV6Y3ZoVzdhPCEyT2pzblg2Yj1IYSFlZWJscSs4Y2xWcWNRelph
YEc9Q3k8cTdQZkN8MGQzZ3htbzY4TWd6Pwp6Rk5xfkQtP3pWKkFlPSRaK0hUfS1VV1l0NVdqKSNu
em0/an5wZWA0fkx3MkhQR3p9dUY+P1A/QjtuUktLZ3Jie0UKejg2OTAwMUhaOE0yUzh0dHYqMGdW
Z2Q5U2o9fXBHaTZ+VilOdEhBcF4xdTR9d0FtVFFvRlN9TVRib1VkVDh3KEpOCnopNlRhNCp7dXtN
ZD5rcjJDcWQxJVhZYWtySXlXazsld2xRQDlrekhibH44aSo5NW19WXBpPSM9Q3M4Umh1ZCswTwp6
dExFc0spKiljYExSKDBfYEUmTHZ0Q3xhT0M+Ynd4aXF7IV5SOz5HK1pAa0Faekwkdm42KV9LbXZI
Ym8+YFpze0kKel9tYlh2Z3JxQ1V2JSRBOD9FZVhzMnh8OW4mMWxqVUZfMm1iPV5nIWVgTFM5KHAz
RCFqaEspYDxqQERfU1FiTWZvCno3NzFKUGR4UUAhcF9XaSQxbF5VZ2JSISpDNiRFUlRSRFh9dDRI
OUM3YX1UMm03K2xGeT1QUGwlREZTPGVFZ1IoZwp6TFRwd3dQcSk+c19sLWc8ZmdpeEZhODBYflo4
YXw+K3ljS0gmUSM5bF93JUAybE1xWWJYJSl9WVpteXtwOGY+e3MKem1SQHdoY35uKWtoLXd4dXJi
VWFZWDtGMUdSVmBYWHdZNGokc2l9JDU+OWkwXztPVGt4Yn10eHEtKndeLXpYWFhJCno4WEt1JE8j
e2BndGZsSmVucjR6VTZSJjE1Um9CJGUhbTI5dXlPbVY4eHtnLVlET3RVbUdNUzdKT09QOFNCXy02
VQp6dGdLbk9iP1p0NDJWXzU1Mn5FfmF3OGJeZTxPQVVyRko5OEReX0RHTk0kNDhqcnsmOTZHezNH
fnhsKUtGQFAtWkAKekkjQj1xe2hCNEt8NnxQPlRERUxDRW5UKlptTSg0SHtkdEo9aFBZJG5lSWNI
QUtAQG5UTURCcWcwKDRLPlJFWGtBCnpJN2wmdzRPbkxkZz45NCReMVNuZylrJSZaRW4jdlloOzlJ
cjMtNkl4Yz9ncWwyPjt3bXhEWUJIRlAxOXkqPzxregp6OXhONUMqPklrM0lMbEJiOXQ2M3hOfnQp
Q3Z4aD5nVnFPJkAxak8tTj1VT3A/UCtnZzEhPGJ8dl8mdVojPT9HOXEKeldWJlModiZJU3cxRFNZ
KFVETkRQb19oUTZeeEwyOFBNSVZjJVIoJW0rX19LN2Q1UnQyQkFKX3JaYWMzbU5qRjdeCno2KWgw
PlNJTSVAWShZOSt0Ml42eUooKnpjc24oZiNkJE50IWteRl5NMyRjbV8qbm5IWEdBe0A1Tl9tbWRu
LT4mcgp6OF8mXnRKKC12d1hsR2w5QyZhUndjeHpaZHpGOWZpYiNfZ3NaV3xCTlpvaEI4YCttPH1K
JHE2YE1HeHhPRkBLTCsKempRNTEmcGgtdCRkTWFZfD0rVHtlX048X3U2JjJMQ1Bhbz5qRVdNbEdf
d1UhUWBTKVZIM3BgXipaRWRxO292eEd5Cno+KWczQmI/d3FjeV9PUlEqc290LThsWl5RUGY2ZHRl
UH1AY3s+PW5MTDxISStMYyteVEQ4d3BhRyZWTlVpV011Rwp6TVB1I1JIa0M/SVg9eTJ5bTZjTVQt
aEM5PUd8Pj9DKDY+KXQ+WmdiWUdPam16KUopZVIxYUBIO0Eoa013ayhiRmQKemhzWno+YVhNQEU/
NXlveGQxMn5TdCElcytBKGtLdkkwcm1GY202fjZ6NjZtI2gkUnFXMzR+YUpCMWJWOUA3Vm1rCnpN
YWtKQG1PZTc+Kmp+d29yMU9UMjxNLT40X2N9ZWtQJU5IeloxeTYtKiU3MnVAOWF0ejdCPFFrY0hk
X3xDPV9KRAp6S2BOIzdVNG95RHYqRW4qIXFpbDs2Nl5PJEVeX18rZ184WCNfeEBZZCEyVnUkSGJv
RXRmbE1gUEVGb1BWN3ModkwKekxDY05HclI5cDFTbzxoPktGan1xI05eNns9RUIyNSh6R3BrOGlI
Mm4rS08wSk9teVZIZFg7aVZ3aWIkVHJBKTMzCnpUV1ByVTZ8d3BqOD9tcyhGcWZ5b1koVm1UPGFT
PmsoY2VkUyVsUyRzdjVuXzdxLTYkXj5zQihXOGZ5KWJQT1NUdAp6OU0/e3B4MFVSenEmQ0ZBaSpH
bFE+MFVgWE80S2lxI087cWZsYGo9eSopcyhgUFRxPSZCVkc1UTxoP3tuZCQ+KT4KelgoNWdVVFA0
VEZOcVomTGp8S2JYTURrdiNlaXRRQWxVWV5NVHpEWDRRVVJOZ1A3U2BkNVVhMzIhWk9xOXNVWCso
Cnowc3JvZXRYWk19M31vYVgtQVJhNUlHcEx6OXQpRHxeSnBhfU0/NVpePGF3NEMwJUJ0b1U+WTx2
IzZNPEA8PTIzUgp6TTtsYyFgc0hiaUZEdXpvRyoqNmJvUjRkYzQ3ZSkxQzZBOzZjRmx1ITZrQGYp
c2ZPKEBxK3FwakBifnUwXkI4ZkkKenw1djA+PEglSClDenZHNmd0dlBAZldMKW49VGhOdkhvI1oq
bX1zbyVWT25TS3tENlAmYn1EUWxranJIJSVuIUNTCnpYcDBKMEwyQTwrVjFXVVIyISMhV1NrWXNC
Z1NPYTx0TXZKSUQlZzBvQSVvMT5MYWdYdjt5Rmp2dH4jSDgyTCtuOwp6NGJhYTlVTkZFI0BnRGMz
LXNmaT5EI1ZIJkNLQEQySj5ePmhUPkYpaHFlJDF0ZmZzI1NwMjgwIXk9UTMoQm4lbFMKeiNFS1Qz
SmhucmY1NUVQRGp4KEhjLVN+dFQ3PUl5TSp+PFpyQkxBSWp3bnV6Pz9oWm1NSjZzSkljTWwoKms4
cWVqCnpgUnA0TzNyRiY2VFQ+KnFoQ1ZYPD5gakdPKFphK3xAIzk+KShMZ0pAMHF1QWg+MDtocWFG
KmZjdVA0TmM3QUFIUgp6Pj5IQ0hKWnomSjtqPj5iKHItNnRrSyoze0hmVFJZaCFyaE40bzdURy1v
c0AydkJ2NCt2dEs2fXd5KXZVcUV+YmwKelZucXduSi08NlZsSTA1MGd+SSpkST98UWpPPTAzPT5u
T3lFNzlTZTZoYkRUeWpwY2VMKT5KMz8+PD49Z08haiMjCnpWJStRRWBXJXlYNjhiWTw4SlorYE1R
KjN9KilSdCZ1YDc/NUU8flpDZGk+NC1gZn4+UEZRMDJ0YFpPY05pWE1tIQp6SHd8T0tGfDhZdnRZ
JUhvZ31sZWg9S18zSUY5ZihBKl5zXkZleiZnWmNvTzVXWlZobTRYST8xPUJeOSpJb3M+UHoKendw
Uj1gY3N7RnpTa2RELTM7RjxlITZOfiNoc0hGQ1Q5X3JvJGAxLTFyKnNMZXk9N3d4NmJzbkhwIzN4
PFIoXm59CnokfFZLKitpI0ZRcVprREh2eUo1eUA3ZVlNbDYoPngkSjtMfnp+NG5sbEd5PlNGSm88
SXZhcXRRekR8LWVgclNuUwp6OUZzdyh6fVcjbTwxUnh8e255NXVwSlpaVC18KW1kUGwyfXd7RVZO
R2BBTzxxWk1eeCNrUko8cTZtRTw3Wnk/N08KelYmRmR2QEVIakJkeHAkVTRSc05CTHQkYHg5IylC
RzJQRC0tPzRCP3MpI0VtanMjdTV4VCl+RVg2YzZFQ0J+SnZuCno5JFFDPDlgekdiYiZJVnh5eDdY
aEFwXzBMNmkpbVN2SCtnWCMmKGJ1PGhTSCtZd2FudiQ1eDVQRG0/eTVJe0MrSwp6MFVycENqX25i
VVJLUX09WCgzR2tBS2pne2xCeVVybWlyM0B5OU49VkkzMHM5PCtnKDUoeVhCbjElYjVRUV8yNikK
enZEUUdzKnpYT21MRVFiUkhzNF5XdSZTcGF0aklSd2htNW17VTB1XjFpVmF9UDFnRUM0Q2xeSkNp
cGswcVF8SjAqCno3Rkh2fkRwRypSND1Ydj9MKSswbHIlJG81aVYpYnNMOE5KV1VpJX5DS3E/YFlV
QkVIPmkqeClBPU04XkRgay1xcAp6QVhBfXpLeEQ/eFRLeW1WYUtEWXlBY1I8VSZMWHBAPHY9WVF5
STAzPzVDWGY5Vz9LcXAzeStUQHNZR01oM21pS2AKajdNWD4leUFeV2J7ezxLVGZgUj1RPXA+QCMw
MDAwME5rdlhYdTBtamZrTGpAJAoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEv
V2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvbWFpbi5j
c3MgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9t
YWluLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xMjZjZGNkYmNhMzQ1NDU3YmE3YWMwYTg0NzcyODQxNDcxNTEy
MDRlCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9t
ZXRlcjIuMS9yZXNvdXJjZXMvbWFpbi5jc3MKQEAgLTAsMCArMSwyODYgQEAKK2JvZHkgeworICAg
IGJhY2tncm91bmQtY29sb3I6IHJnYig0NiwgNTEsIDU1KTsKKyAgICBjb2xvcjogcmdiKDIzNSwg
MjM1LCAyMzUpOworICAgIGZvbnQtZmFtaWx5OiAiSGVsdmV0aWNhIE5ldWUiLCBIZWx2ZXRpY2Es
IFZlcmRhbmEsIHNhbnMtc2VyaWY7Cit9CisKKzo6c2VsZWN0aW9uIHsKKyAgICBjb2xvcjogcmdi
KDQ2LCA1MSwgNTUpOworICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigyMzUsIDIzNSwgMjM1KTsK
K30KKworaDEsCitidXR0b24geworICAgIGZvbnQtZmFtaWx5OiAiRnV0dXJhLU1lZGl1bSIsIEZ1
dHVyYSwgIkhlbHZldGljYSBOZXVlIiwgSGVsdmV0aWNhLCBWZXJkYW5hLCBzYW5zLXNlcmlmOwor
fQorCitjb2RlIHsKKyAgICBmb250LWZhbWlseTogTWVubG8sIE1vbmFjbywgbW9ub3NwYWNlOwor
ICAgIGZvbnQtc2l6ZTogc21hbGxlcjsKK30KKworYnV0dG9uIHsKKyAgICBjdXJzb3I6IHBvaW50
ZXI7Cit9CisKK2hyIHsKKyAgICBib3JkZXI6IDFweCBzb2xpZCByZ2IoMjM1LCAyMzUsIDIzNSk7
CisgICAgd2lkdGg6IDUwJTsKKyAgICBtYXJnaW46IDQwcHggYXV0bzsKK30KKworaW1nIHsKKyAg
ICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOworICAgIC13ZWJraXQtdXNlci1kcmFnOiBub25l
OworfQorCittYWluIHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBwb3NpdGlvbjogYWJzb2x1
dGU7CisgICAgd2lkdGg6IDgwMHB4OworICAgIGhlaWdodDogNjAwcHg7CisgICAgdG9wOiA1MCU7
CisgICAgbGVmdDogNTAlOworICAgIG1hcmdpbi10b3A6IC0zMjFweDsKKyAgICBtYXJnaW4tbGVm
dDogLTQyMXB4OworICAgIHBhZGRpbmc6IDE1cHg7CisgICAgYm9yZGVyOiA2cHggc29saWQgcmdi
KDIzNSwgMjM1LCAyMzUpOworICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7Cit9CisKKyNsb2dvIHsK
KyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgbGVmdDogLTcwcHg7CisgICAgdG9wOiAxMTVw
eDsKKyAgICB3aWR0aDogNzVweDsKKyAgICBoZWlnaHQ6IDQwNnB4OworfQorCitoMSB7CisgICAg
bWFyZ2luLXRvcDogMzBweDsKKyAgICBmb250LXNpemU6IDQwcHg7CisgICAgZm9udC13ZWlnaHQ6
IG5vcm1hbDsKKyAgICBjb2xvcjogcmdiKDIzNSwgMjM1LCAyMzUpOworICAgIHRleHQtYWxpZ246
IGNlbnRlcjsKK30KKworcCB7CisgICAgZm9udC1zaXplOiAxNnB4OworICAgIGxpbmUtaGVpZ2h0
OiAyMXB4OworfQorCithIHsKKyAgICBjb2xvcjogaW5oZXJpdDsKK30KKworLmJ1dHRvbnMgewor
ICAgIG1hcmdpbi10b3A6IDMwcHg7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworfQorCitidXR0
b24geworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKKyAgICBib3JkZXI6IDNweCBzb2xp
ZCByZ2IoMjM1LCAyMzUsIDIzNSk7CisgICAgYm9yZGVyLXJhZGl1czogMTBweDsKKyAgICBtaW4t
d2lkdGg6IDIwMHB4OworICAgIHBhZGRpbmc6IDVweCAyMHB4OworICAgIG1hcmdpbjogMCA0MHB4
OworICAgIGZvbnQtc2l6ZTogMjVweDsKKyAgICBjb2xvcjogcmdiKDIzNSwgMjM1LCAyMzUpOwor
ICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworCisgICAgLXdlYmtpdC11c2VyLXNl
bGVjdDogbm9uZTsKK30KKworYnV0dG9uOmFjdGl2ZSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjog
cmdiKDIzNSwgMjM1LCAyMzUpOworICAgIGNvbG9yOiByZ2IoNDYsIDUxLCA1NSk7CisgICAgYm9y
ZGVyLWNvbG9yOiByZ2IoMjM1LCAyMzUsIDIzNSkgIWltcG9ydGFudDsKK30KKworYnV0dG9uOmZv
Y3VzIHsKKyAgICBvdXRsaW5lOiBub25lOworICAgIGJvcmRlci1jb2xvcjogcmdiKDIzMiwgNzks
IDc5KTsKK30KKworc2VjdGlvbiB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworc2VjdGlvbiA+
IHAgeworICAgIG1hcmdpbjogMTBweCAyMHB4OworfQorCitzZWN0aW9uLnNlbGVjdGVkIHsKKyAg
ICBkaXNwbGF5OiBibG9jazsKK30KKworI3Rlc3RDb250YWluZXIgeworICAgIHBvc2l0aW9uOiBh
YnNvbHV0ZTsKKyAgICB0b3A6IDE1cHg7CisgICAgbGVmdDogMTVweDsKKyAgICB3aWR0aDogODAw
cHg7CisgICAgaGVpZ2h0OiA2MDBweDsKK30KKworc2VjdGlvbiNob21lID4gcCB7CisgICAgbWFy
Z2luOiAwIGF1dG87CisgICAgd2lkdGg6IDcwJTsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cit9
CisKK3NlY3Rpb24jaG9tZSA+IHA6Zmlyc3QtY2hpbGQgeworICAgIG1hcmdpbi10b3A6IDE2MHB4
OworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworc2VjdGlvbiNob21lID4gLnNob3ctYWJv
dXQgeworICAgIG1hcmdpbi10b3A6IDEwMHB4OworfQorCitzZWN0aW9uI2hvbWUgPiAuYnV0dG9u
cyB7CisgICAgbWFyZ2luLXRvcDogODBweDsKK30KKworc2VjdGlvbiNydW5uaW5nID4gI3Byb2dy
ZXNzIHsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgYm90dG9tOiAtNnB4OworICAgIGxl
ZnQ6IDYwcHg7CisgICAgcmlnaHQ6IDYwcHg7CisgICAgaGVpZ2h0OiA2cHg7CisgICAgYmFja2dy
b3VuZC1jb2xvcjogcmdiKDEyOCwgMTI4LCAxMjgpOworICAgIGJvcmRlci1sZWZ0OiA2cHggc29s
aWQgcmdiKDQ2LCA1MSwgNTUpOworICAgIGJvcmRlci1yaWdodDogNnB4IHNvbGlkIHJnYig0Niwg
NTEsIDU1KTsKK30KKworc2VjdGlvbiNydW5uaW5nICNwcm9ncmVzcy1jb21wbGV0ZWQgeworICAg
IHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDA7CisgICAgbGVmdDogMDsKKyAgICBoZWln
aHQ6IDZweDsKKyAgICB3aWR0aDogMDsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjM1LCAy
MzUsIDIzNSk7Cit9CisKK3NlY3Rpb24jcnVubmluZyA+ICNpbmZvIHsKKyAgICBwb3NpdGlvbjog
YWJzb2x1dGU7CisgICAgYm90dG9tOiAtMjVweDsKKyAgICBsZWZ0OiA2MHB4OworICAgIHJpZ2h0
OiA2MHB4OworICAgIGhlaWdodDogMTJweDsKKyAgICBjb2xvcjogcmdiKDEyOCwgMTI4LCAxMjgp
OworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICBmb250LXNpemU6IDEycHg7Cit9CisKK3Nl
Y3Rpb24jc3VtbWFyaXplZC1yZXN1bHRzID4gI3Jlc3VsdC1udW1iZXIsCitzZWN0aW9uI3N1bW1h
cml6ZWQtcmVzdWx0cyA+ICNjb25maWRlbmNlLW51bWJlciB7CisgICAgZm9udC1mYW1pbHk6ICJG
dXR1cmEtQ29uZGVuc2VkTWVkaXVtIiwgRnV0dXJhLCAiSGVsdmV0aWNhIE5ldWUiLCBIZWx2ZXRp
Y2EsIFZlcmRhbmEsIHNhbnMtc2VyaWY7Cit9CisKK3NlY3Rpb24jc3VtbWFyaXplZC1yZXN1bHRz
ID4gI3Jlc3VsdC1udW1iZXIgeworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICBmb250LXNp
emU6IDE0NXB4OworICAgIGxpbmUtaGVpZ2h0OiAxNDVweDsKK30KKworc2VjdGlvbiNzdW1tYXJp
emVkLXJlc3VsdHMgPiAjY29uZmlkZW5jZS1udW1iZXIgeworICAgIHRleHQtYWxpZ246IGNlbnRl
cjsKKyAgICBmb250LXNpemU6IDM2cHg7CisgICAgbGluZS1oZWlnaHQ6IDM2cHg7CisgICAgY29s
b3I6IHJnYigxMjgsIDEyOCwgMTI4KTsKK30KKworc2VjdGlvbiNkZXRhaWxlZC1yZXN1bHRzID4g
dGFibGUgeworICAgIGZsb2F0OiBsZWZ0OworICAgIHdpZHRoOiA1MCU7Cit9CisKK3NlY3Rpb24j
ZGV0YWlsZWQtcmVzdWx0cyA+IC5hcml0aG1ldGljLW1lYW4geworICAgIGNsZWFyOiBib3RoOwor
ICAgIHBhZGRpbmctdG9wOiAzMnB4OworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworc2Vj
dGlvbiNkZXRhaWxlZC1yZXN1bHRzID4gLmFyaXRobWV0aWMtbWVhbiA+IGxhYmVsIHsKKyAgICBm
b250LXdlaWdodDogYm9sZDsKKyAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7CisgICAgY29sb3I6IHJn
YigxMjgsIDEyOCwgMTI4KTsKK30KKworc2VjdGlvbiNkZXRhaWxlZC1yZXN1bHRzID4gLnNob3ct
YWJvdXQgeworICAgIG1hcmdpbi10b3A6IDMwcHg7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOwor
fQorCitzZWN0aW9uI2Fib3V0IGgxIHsKKyAgICBtYXJnaW4tdG9wOiAxMHB4OworICAgIG1hcmdp
bi1ib3R0b206IDBweDsKKyAgICBmb250LXNpemU6IDI1cHg7Cit9CisKK3NlY3Rpb24jYWJvdXQg
Lm5vdGUgeworICAgIGNvbG9yOiByZ2IoMTI4LCAxMjgsIDEyOCk7Cit9CisKK3RhYmxlIHsKKyAg
ICBib3JkZXItc3BhY2luZzogMDsKKyAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOworfQor
Cit0aCwKK3RkIHsKKyAgICBwYWRkaW5nOiA1cHg7Cit9CisKK3RoIHsKKyAgICB0ZXh0LWFsaWdu
OiByaWdodDsKKyAgICBjb2xvcjogcmdiKDEyOCwgMTI4LCAxMjgpOworfQorCisuZ2F1Z2Ugewor
ICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICB3aWR0aDogNzM4cHg7CisgICAgaGVpZ2h0OiA3
OHB4OworICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChnYXVnZS5wbmcpOworICAgIGJhY2tncm91
bmQtc2l6ZTogMTAwJSAxMDAlOworICAgIGJhY2tncm91bmQtcmVwYXQ6IG5vLXJlcGVhdDsKKyAg
ICBtYXJnaW46IDAgYXV0bzsKK30KKworLmdhdWdlID4gLndpbmRvdyB7CisgICAgcG9zaXRpb246
IGFic29sdXRlOworICAgIGxlZnQ6IDA7CisgICAgdG9wOiAzM3B4OworICAgIGJvdHRvbTogMDsK
KyAgICByaWdodDogMDsKKyAgICBvdmVyZmxvdzogaGlkZGVuOworfQorCisuZ2F1Z2UgPiAud2lu
ZG93ID4gLm5lZWRsZSB7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIGxlZnQ6IDM2M3B4
OworICAgIGJvdHRvbTogLTg4cHg7CisgICAgd2lkdGg6IDRweDsKKyAgICBoZWlnaHQ6IDQwMHB4
OworICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigyNDcsIDE0OCwgMjkpOworCisgICAgLXdlYmtp
dC10cmFuc2Zvcm06IHJvdGF0ZSgtNzBkZWcpOworICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdp
bjogMnB4IDQwMHB4OworCisgICAgLW1vei10cmFuc2Zvcm06IHJvdGF0ZSgtNzBkZWcpOworICAg
IC1tb3otdHJhbnNmb3JtLW9yaWdpbjogMnB4IDQwMHB4OworCisgICAgdHJhbnNmb3JtOiByb3Rh
dGUoLTcwZGVnKTsKKyAgICB0cmFuc2Zvcm0tb3JpZ2luOiAycHggNDAwcHg7Cit9CisKK0BtZWRp
YSAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSwgKG1pbi0tbW96LWRldmljZS1w
aXhlbC1yYXRpbzogMiksIChtaW4tcmVzb2x1dGlvbjogMmRwcHgpLCAobWluLXJlc29sdXRpb246
IDE5MmRwaSkgeworICAgICNsb2dvIHsKKyAgICAgICAgY29udGVudDogdXJsKGxvZ29AMngucG5n
KTsgLyogRklYTUU6IFRoaXMgZG9lcyBub3Qgd29yayBpbiBGaXJlZm94LiAqLworICAgIH0KKwor
ICAgIC5nYXVnZSB7CisgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChnYXVnZUAyeC5wbmcp
OworICAgIH0KK30KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRv
bWV0ZXIyLjEvcmVzb3VyY2VzL21haW4uanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1Nw
ZWVkb21ldGVyMi4xL3Jlc291cmNlcy9tYWluLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJhYjg3Nzc0NGJiMTQx
YzA3NDJhNjM3NTQ0N2U0MDE4ZDQ1MWIzNDMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9i
cm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy9tYWluLmpzCkBAIC0wLDAg
KzEsMjQ2IEBACit3aW5kb3cuYmVuY2htYXJrQ2xpZW50ID0geworICAgIGRpc3BsYXlVbml0OiAn
cnVucy9taW4nLAorICAgIGl0ZXJhdGlvbkNvdW50OiAxMCwKKyAgICBzdGVwQ291bnQ6IG51bGws
CisgICAgc3VpdGVzQ291bnQ6IG51bGwsCisgICAgX21lYXN1cmVkVmFsdWVzTGlzdDogW10sCisg
ICAgX2ZpbmlzaGVkVGVzdENvdW50OiAwLAorICAgIF9wcm9ncmVzc0NvbXBsZXRlZDogbnVsbCwK
KyAgICB3aWxsQWRkVGVzdEZyYW1lOiBmdW5jdGlvbiAoZnJhbWUpIHsKKyAgICAgICAgdmFyIG1h
aW4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtYWluJyk7CisgICAgICAgIHZhciBzdHlsZSA9
IGdldENvbXB1dGVkU3R5bGUobWFpbik7CisgICAgICAgIGZyYW1lLnN0eWxlLmxlZnQgPSBtYWlu
Lm9mZnNldExlZnQgKyBwYXJzZUludChzdHlsZS5ib3JkZXJMZWZ0V2lkdGgpICsgcGFyc2VJbnQo
c3R5bGUucGFkZGluZ0xlZnQpICsgJ3B4JzsKKyAgICAgICAgZnJhbWUuc3R5bGUudG9wID0gbWFp
bi5vZmZzZXRUb3AgKyBwYXJzZUludChzdHlsZS5ib3JkZXJUb3BXaWR0aCkgKyBwYXJzZUludChz
dHlsZS5wYWRkaW5nVG9wKSArICdweCc7CisgICAgfSwKKyAgICB3aWxsUnVuVGVzdDogZnVuY3Rp
b24gKHN1aXRlLCB0ZXN0KSB7CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbmZv
JykudGV4dENvbnRlbnQgPSBzdWl0ZS5uYW1lICsgJyAoICcgKyB0aGlzLl9maW5pc2hlZFRlc3RD
b3VudCArICcgLyAnICsgdGhpcy5zdGVwQ291bnQgKyAnICknOworICAgIH0sCisgICAgZGlkUnVu
VGVzdDogZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9maW5pc2hlZFRlc3RDb3VudCsrOwor
ICAgICAgICB0aGlzLl9wcm9ncmVzc0NvbXBsZXRlZC5zdHlsZS53aWR0aCA9ICh0aGlzLl9maW5p
c2hlZFRlc3RDb3VudCAqIDEwMCAvIHRoaXMuc3RlcENvdW50KSArICclJzsKKyAgICB9LAorICAg
IGRpZFJ1blN1aXRlczogZnVuY3Rpb24gKG1lYXN1cmVkVmFsdWVzKSB7CisgICAgICAgIHRoaXMu
X21lYXN1cmVkVmFsdWVzTGlzdC5wdXNoKG1lYXN1cmVkVmFsdWVzKTsKKyAgICB9LAorICAgIHdp
bGxTdGFydEZpcnN0SXRlcmF0aW9uOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX21lYXN1
cmVkVmFsdWVzTGlzdCA9IFtdOworICAgICAgICB0aGlzLl9maW5pc2hlZFRlc3RDb3VudCA9IDA7
CisgICAgICAgIHRoaXMuX3Byb2dyZXNzQ29tcGxldGVkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ3Byb2dyZXNzLWNvbXBsZXRlZCcpOworICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnbG9nby1saW5rJykub25jbGljayA9IGZ1bmN0aW9uIChldmVudCkgeyBldmVudC5wcmV2ZW50
RGVmYXVsdCgpOyByZXR1cm4gZmFsc2U7IH0KKyAgICB9LAorICAgIGRpZEZpbmlzaExhc3RJdGVy
YXRpb246IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xv
Z28tbGluaycpLm9uY2xpY2sgPSBudWxsOworCisgICAgICAgIHZhciByZXN1bHRzID0gdGhpcy5f
Y29tcHV0ZVJlc3VsdHModGhpcy5fbWVhc3VyZWRWYWx1ZXNMaXN0LCB0aGlzLmRpc3BsYXlVbml0
KTsKKworICAgICAgICB0aGlzLl91cGRhdGVHYXVnZU5lZWRsZShyZXN1bHRzLm1lYW4pOworICAg
ICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0LW51bWJlcicpLnRleHRDb250ZW50
ID0gcmVzdWx0cy5mb3JtYXR0ZWRNZWFuOworICAgICAgICBpZiAocmVzdWx0cy5mb3JtYXR0ZWRE
ZWx0YSkKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25maWRlbmNlLW51
bWJlcicpLnRleHRDb250ZW50ID0gJ1x1MDBiMSAnICsgcmVzdWx0cy5mb3JtYXR0ZWREZWx0YTsK
KworICAgICAgICB0aGlzLl9wb3B1bGF0ZURldGFpbGVkUmVzdWx0cyhyZXN1bHRzLmZvcm1hdHRl
ZFZhbHVlcyk7CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHRzLXdpdGgt
c3RhdGlzdGljcycpLnRleHRDb250ZW50ID0gcmVzdWx0cy5mb3JtYXR0ZWRNZWFuQW5kRGVsdGE7
CisKKyAgICAgICAgaWYgKHRoaXMuZGlzcGxheVVuaXQgPT0gJ21zJykgeworICAgICAgICAgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Nob3ctc3VtbWFyeScpLnN0eWxlLmRpc3BsYXkgPSAn
bm9uZSc7CisgICAgICAgICAgICBzaG93UmVzdWx0RGV0YWlscygpOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIHNob3dSZXN1bHRzU3VtbWFyeSgpOworICAgIH0sCisgICAgX2NvbXB1dGVS
ZXN1bHRzOiBmdW5jdGlvbiAobWVhc3VyZWRWYWx1ZXNMaXN0LCBkaXNwbGF5VW5pdCkgeworICAg
ICAgICB2YXIgc3VpdGVzQ291bnQgPSB0aGlzLnN1aXRlc0NvdW50OworICAgICAgICBmdW5jdGlv
biB2YWx1ZUZvclVuaXQobWVhc3VyZWRWYWx1ZXMpIHsKKyAgICAgICAgICAgIGlmIChkaXNwbGF5
VW5pdCA9PSAnbXMnKQorICAgICAgICAgICAgICAgIHJldHVybiBtZWFzdXJlZFZhbHVlcy5nZW9t
ZWFuOworICAgICAgICAgICAgcmV0dXJuIG1lYXN1cmVkVmFsdWVzLnNjb3JlOworICAgICAgICB9
CisKKyAgICAgICAgZnVuY3Rpb24gc2lnRmlnRnJvbVBlcmNlbnREZWx0YShwZXJjZW50RGVsdGEp
IHsKKyAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwoLU1hdGgubG9nKHBlcmNlbnREZWx0YSkv
TWF0aC5sb2coMTApKSArIDM7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0b1NpZ0Zp
Z1ByZWNpc2lvbihudW1iZXIsIHNpZ0ZpZykgeworICAgICAgICAgICAgdmFyIG5vbkRlY2ltYWxE
aWdpdENvdW50ID0gbnVtYmVyIDwgMSA/IDAgOiAoTWF0aC5mbG9vcihNYXRoLmxvZyhudW1iZXIp
L01hdGgubG9nKDEwKSkgKyAxKTsKKyAgICAgICAgICAgIHJldHVybiBudW1iZXIudG9QcmVjaXNp
b24oTWF0aC5tYXgobm9uRGVjaW1hbERpZ2l0Q291bnQsIE1hdGgubWluKDYsIHNpZ0ZpZykpKTsK
KyAgICAgICAgfQorCisgICAgICAgIHZhciB2YWx1ZXMgPSBtZWFzdXJlZFZhbHVlc0xpc3QubWFw
KHZhbHVlRm9yVW5pdCk7CisgICAgICAgIHZhciBzdW0gPSB2YWx1ZXMucmVkdWNlKGZ1bmN0aW9u
IChhLCBiKSB7IHJldHVybiBhICsgYjsgfSwgMCk7CisgICAgICAgIHZhciBhcml0aG1ldGljTWVh
biA9IHN1bSAvIHZhbHVlcy5sZW5ndGg7CisgICAgICAgIHZhciBtZWFuU2lnRmlnID0gNDsKKyAg
ICAgICAgdmFyIGZvcm1hdHRlZERlbHRhOworICAgICAgICB2YXIgZm9ybWF0dGVkUGVyY2VudERl
bHRhOworICAgICAgICBpZiAod2luZG93LlN0YXRpc3RpY3MpIHsKKyAgICAgICAgICAgIHZhciBk
ZWx0YSA9IFN0YXRpc3RpY3MuY29uZmlkZW5jZUludGVydmFsRGVsdGEoMC45NSwgdmFsdWVzLmxl
bmd0aCwgc3VtLCBTdGF0aXN0aWNzLnNxdWFyZVN1bSh2YWx1ZXMpKTsKKyAgICAgICAgICAgIGlm
ICghaXNOYU4oZGVsdGEpKSB7CisgICAgICAgICAgICAgICAgdmFyIHBlcmNlbnREZWx0YSA9IGRl
bHRhICogMTAwIC8gYXJpdGhtZXRpY01lYW47CisgICAgICAgICAgICAgICAgbWVhblNpZ0ZpZyA9
IHNpZ0ZpZ0Zyb21QZXJjZW50RGVsdGEocGVyY2VudERlbHRhKTsKKyAgICAgICAgICAgICAgICBm
b3JtYXR0ZWREZWx0YSA9IHRvU2lnRmlnUHJlY2lzaW9uKGRlbHRhLCAyKTsKKyAgICAgICAgICAg
ICAgICBmb3JtYXR0ZWRQZXJjZW50RGVsdGEgPSB0b1NpZ0ZpZ1ByZWNpc2lvbihwZXJjZW50RGVs
dGEsIDIpICsgJyUnOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdmFyIGZv
cm1hdHRlZE1lYW4gPSB0b1NpZ0ZpZ1ByZWNpc2lvbihhcml0aG1ldGljTWVhbiwgTWF0aC5tYXgo
bWVhblNpZ0ZpZywgMykpOworCisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBmb3JtYXR0
ZWRWYWx1ZXM6IHZhbHVlcy5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRvU2lnRmlnUHJlY2lzaW9uKHZhbHVlLCA0KSArICcgJyArIGRpc3BsYXlVbml0Owor
ICAgICAgICAgICAgfSksCisgICAgICAgICAgICBtZWFuOiBhcml0aG1ldGljTWVhbiwKKyAgICAg
ICAgICAgIGZvcm1hdHRlZE1lYW46IGZvcm1hdHRlZE1lYW4sCisgICAgICAgICAgICBmb3JtYXR0
ZWREZWx0YTogZm9ybWF0dGVkRGVsdGEsCisgICAgICAgICAgICBmb3JtYXR0ZWRNZWFuQW5kRGVs
dGE6IGZvcm1hdHRlZE1lYW4gKyAoZm9ybWF0dGVkRGVsdGEgPyAnIFx4YjEgJyArIGZvcm1hdHRl
ZERlbHRhICsgJyAoJyArIGZvcm1hdHRlZFBlcmNlbnREZWx0YSArICcpJyA6ICcnKSwKKyAgICAg
ICAgfTsKKyAgICB9LAorICAgIF9hZGREZXRhaWxlZFJlc3VsdHNSb3c6IGZ1bmN0aW9uICh0YWJs
ZSwgaXRlcmF0aW9uTnVtYmVyLCB2YWx1ZSkgeworICAgICAgICB2YXIgcm93ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgndHInKTsKKyAgICAgICAgdmFyIHRoID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgndGgnKTsKKyAgICAgICAgdGgudGV4dENvbnRlbnQgPSAnSXRlcmF0aW9uICcgKyAoaXRl
cmF0aW9uTnVtYmVyICsgMSk7CisgICAgICAgIHZhciB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ3RkJyk7CisgICAgICAgIHRkLnRleHRDb250ZW50ID0gdmFsdWU7CisgICAgICAgIHJvdy5h
cHBlbmRDaGlsZCh0aCk7CisgICAgICAgIHJvdy5hcHBlbmRDaGlsZCh0ZCk7CisgICAgICAgIHRh
YmxlLmFwcGVuZENoaWxkKHJvdyk7CisgICAgfSwKKyAgICBfdXBkYXRlR2F1Z2VOZWVkbGU6IGZ1
bmN0aW9uIChycG0pIHsKKyAgICAgICAgdmFyIG5lZWRsZUFuZ2xlID0gTWF0aC5tYXgoMCwgTWF0
aC5taW4ocnBtLCAxNDApKSAtIDcwOworICAgICAgICB2YXIgbmVlZGxlUm90YXRpb25WYWx1ZSA9
ICdyb3RhdGUoJyArIG5lZWRsZUFuZ2xlICsgJ2RlZyknOworCisgICAgICAgIHZhciBnYXVnZU5l
ZWRsZUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc3VtbWFyaXplZC1yZXN1bHRz
ID4gLmdhdWdlIC5uZWVkbGUnKTsKKyAgICAgICAgZ2F1Z2VOZWVkbGVFbGVtZW50LnN0eWxlLnNl
dFByb3BlcnR5KCctd2Via2l0LXRyYW5zZm9ybScsIG5lZWRsZVJvdGF0aW9uVmFsdWUpOworICAg
ICAgICBnYXVnZU5lZWRsZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy1tb3otdHJhbnNmb3Jt
JywgbmVlZGxlUm90YXRpb25WYWx1ZSk7CisgICAgICAgIGdhdWdlTmVlZGxlRWxlbWVudC5zdHls
ZS5zZXRQcm9wZXJ0eSgnLW1zLXRyYW5zZm9ybScsIG5lZWRsZVJvdGF0aW9uVmFsdWUpOworICAg
ICAgICBnYXVnZU5lZWRsZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJ3RyYW5zZm9ybScsIG5l
ZWRsZVJvdGF0aW9uVmFsdWUpOworICAgIH0sCisgICAgX3BvcHVsYXRlRGV0YWlsZWRSZXN1bHRz
OiBmdW5jdGlvbiAoZm9ybWF0dGVkVmFsdWVzKSB7CisgICAgICAgIHZhciByZXN1bHRzVGFibGVz
ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnJlc3VsdHMtdGFibGUnKTsKKyAgICAgICAg
dmFyIGkgPSAwOworICAgICAgICByZXN1bHRzVGFibGVzWzBdLmlubmVySFRNTCA9ICcnOworICAg
ICAgICBmb3IgKDsgaSA8IE1hdGguY2VpbChmb3JtYXR0ZWRWYWx1ZXMubGVuZ3RoIC8gMik7IGkr
KykKKyAgICAgICAgICAgIHRoaXMuX2FkZERldGFpbGVkUmVzdWx0c1JvdyhyZXN1bHRzVGFibGVz
WzBdLCBpLCBmb3JtYXR0ZWRWYWx1ZXNbaV0pOworICAgICAgICByZXN1bHRzVGFibGVzWzFdLmlu
bmVySFRNTCA9ICcnOworICAgICAgICBmb3IgKDsgaSA8IGZvcm1hdHRlZFZhbHVlcy5sZW5ndGg7
IGkrKykKKyAgICAgICAgICAgIHRoaXMuX2FkZERldGFpbGVkUmVzdWx0c1JvdyhyZXN1bHRzVGFi
bGVzWzFdLCBpLCBmb3JtYXR0ZWRWYWx1ZXNbaV0pOworICAgIH0sCisgICAgcHJlcGFyZVVJOiBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwb3BzdGF0ZScs
IGZ1bmN0aW9uIChldmVudCkgeworICAgICAgICAgICAgaWYgKGV2ZW50LnN0YXRlKSB7CisgICAg
ICAgICAgICAgICAgdmFyIHNlY3Rpb25Ub1Nob3cgPSBldmVudC5zdGF0ZS5zZWN0aW9uOworICAg
ICAgICAgICAgICAgIGlmIChzZWN0aW9uVG9TaG93KSB7CisgICAgICAgICAgICAgICAgICAgIHZh
ciBzZWN0aW9ucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ21haW4gPiBzZWN0aW9uJyk7
CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VjdGlvbnMubGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWN0aW9uc1tpXS5pZCA9PT0g
c2VjdGlvblRvU2hvdykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2hvd1Nl
Y3Rpb24oc2VjdGlvblRvU2hvdywgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHNob3dTZWN0
aW9uKCdob21lJywgZmFsc2UpOworICAgICAgICB9LCBmYWxzZSk7CisKKyAgICAgICAgZnVuY3Rp
b24gdXBkYXRlU2NyZWVuU2l6ZSgpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBEZXRlY3Qgd2hl
biB0aGUgd2luZG93IHNpemUgY2hhbmdlcyBkdXJpbmcgdGhlIHRlc3QuCisgICAgICAgICAgICB2
YXIgc2NyZWVuSXNUb29TbWFsbCA9IHdpbmRvdy5pbm5lcldpZHRoIDwgODUwIHx8IHdpbmRvdy5p
bm5lckhlaWdodCA8IDY1MDsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdz
Y3JlZW4tc2l6ZScpLnRleHRDb250ZW50ID0gd2luZG93LmlubmVyV2lkdGggKyAncHggYnkgJyAr
IHdpbmRvdy5pbm5lckhlaWdodCArICdweCc7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnc2NyZWVuLXNpemUtd2FybmluZycpLnN0eWxlLmRpc3BsYXkgPSBzY3JlZW5Jc1Rv
b1NtYWxsID8gbnVsbCA6ICdub25lJzsKKyAgICAgICAgfQorCisgICAgICAgIHdpbmRvdy5hZGRF
dmVudExpc3RlbmVyKCdyZXNpemUnLCB1cGRhdGVTY3JlZW5TaXplKTsKKyAgICAgICAgdXBkYXRl
U2NyZWVuU2l6ZSgpOworICAgIH0KK30KKworZnVuY3Rpb24gZW5hYmxlT25lU3VpdGUoc3VpdGVz
LCBzdWl0ZVRvRW5hYmxlKQoreworICAgIHN1aXRlVG9FbmFibGUgPSBzdWl0ZVRvRW5hYmxlLnRv
TG93ZXJDYXNlKCk7CisgICAgdmFyIGZvdW5kID0gZmFsc2U7CisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBzdWl0ZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdmFyIGN1cnJlbnRTdWl0ZSA9IHN1
aXRlc1tpXTsKKyAgICAgICAgaWYgKGN1cnJlbnRTdWl0ZS5uYW1lLnRvTG93ZXJDYXNlKCkgPT0g
c3VpdGVUb0VuYWJsZSkgeworICAgICAgICAgICAgY3VycmVudFN1aXRlLmRpc2FibGVkID0gZmFs
c2U7CisgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgY3VycmVudFN1aXRlLmRpc2FibGVkID0gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZvdW5k
OworfQorCitmdW5jdGlvbiBzdGFydEJlbmNobWFyaygpIHsKKyAgICBpZiAobG9jYXRpb24uc2Vh
cmNoLmxlbmd0aCA+IDEpIHsKKyAgICAgICAgdmFyIHBhcnRzID0gbG9jYXRpb24uc2VhcmNoLnN1
YnN0cmluZygxKS5zcGxpdCgnJicpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcnRz
Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIga2V5VmFsdWUgPSBwYXJ0c1tpXS5zcGxp
dCgnPScpOworICAgICAgICAgICAgdmFyIGtleSA9IGtleVZhbHVlWzBdOworICAgICAgICAgICAg
dmFyIHZhbHVlID0ga2V5VmFsdWVbMV07CisgICAgICAgICAgICBzd2l0Y2ggKGtleSkgeworICAg
ICAgICAgICAgY2FzZSAndW5pdCc6CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09ICdtcycp
CisgICAgICAgICAgICAgICAgICAgIGJlbmNobWFya0NsaWVudC5kaXNwbGF5VW5pdCA9ICdtcyc7
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9y
KCdJbnZhbGlkIHVuaXQ6ICcgKyB2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlICdpdGVyYXRpb25Db3VudCc6CisgICAgICAgICAgICAgICAgdmFyIHBhcnNl
ZFZhbHVlID0gcGFyc2VJbnQodmFsdWUpOworICAgICAgICAgICAgICAgIGlmICghaXNOYU4ocGFy
c2VkVmFsdWUpKQorICAgICAgICAgICAgICAgICAgICBiZW5jaG1hcmtDbGllbnQuaXRlcmF0aW9u
Q291bnQgPSBwYXJzZWRWYWx1ZTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ludmFsaWQgaXRlcmF0aW9uIGNvdW50OiAnICsgdmFsdWUp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnc3VpdGUnOgorICAg
ICAgICAgICAgICAgIGlmICghZW5hYmxlT25lU3VpdGUoU3VpdGVzLCB2YWx1ZSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgYWxlcnQoJ1N1aXRlICInICsgdmFsdWUgKyAnIiBkb2VzIG5vdCBleGlz
dC4gTm8gdGVzdHMgdG8gcnVuLicpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgdmFyIGVuYWJsZWRTdWl0ZXMgPSBTdWl0ZXMuZmls
dGVyKGZ1bmN0aW9uIChzdWl0ZSkgeyByZXR1cm4gIXN1aXRlLmRpc2FibGVkOyB9KTsKKyAgICB2
YXIgdG90YWxTdWJ0ZXN0c0NvdW50ID0gZW5hYmxlZFN1aXRlcy5yZWR1Y2UoZnVuY3Rpb24gKHRl
c3RzQ291bnQsIHN1aXRlKSB7IHJldHVybiB0ZXN0c0NvdW50ICsgc3VpdGUudGVzdHMubGVuZ3Ro
OyB9LCAwKTsKKyAgICBiZW5jaG1hcmtDbGllbnQuc3RlcENvdW50ID0gYmVuY2htYXJrQ2xpZW50
Lml0ZXJhdGlvbkNvdW50ICogdG90YWxTdWJ0ZXN0c0NvdW50OworICAgIGJlbmNobWFya0NsaWVu
dC5zdWl0ZXNDb3VudCA9IGVuYWJsZWRTdWl0ZXMubGVuZ3RoOworICAgIHZhciBydW5uZXIgPSBu
ZXcgQmVuY2htYXJrUnVubmVyKFN1aXRlcywgYmVuY2htYXJrQ2xpZW50KTsKKyAgICBydW5uZXIu
cnVuTXVsdGlwbGVJdGVyYXRpb25zKGJlbmNobWFya0NsaWVudC5pdGVyYXRpb25Db3VudCk7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworZnVuY3Rpb24gc2hvd1NlY3Rpb24oc2VjdGlvbklkZW50
aWZpZXIsIHB1c2hTdGF0ZSkgeworICAgIHZhciBjdXJyZW50U2VjdGlvbkVsZW1lbnQgPSBkb2N1
bWVudC5xdWVyeVNlbGVjdG9yKCdzZWN0aW9uLnNlbGVjdGVkJyk7CisgICAgY29uc29sZS5hc3Nl
cnQoY3VycmVudFNlY3Rpb25FbGVtZW50KTsKKworICAgIHZhciBuZXdTZWN0aW9uRWxlbWVudCA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNlY3Rpb25JZGVudGlmaWVyKTsKKyAgICBjb25zb2xl
LmFzc2VydChuZXdTZWN0aW9uRWxlbWVudCk7CisKKyAgICBjdXJyZW50U2VjdGlvbkVsZW1lbnQu
Y2xhc3NMaXN0LnJlbW92ZSgnc2VsZWN0ZWQnKTsKKyAgICBuZXdTZWN0aW9uRWxlbWVudC5jbGFz
c0xpc3QuYWRkKCdzZWxlY3RlZCcpOworCisgICAgaWYgKHB1c2hTdGF0ZSkKKyAgICAgICAgaGlz
dG9yeS5wdXNoU3RhdGUoe3NlY3Rpb246IHNlY3Rpb25JZGVudGlmaWVyfSwgZG9jdW1lbnQudGl0
bGUpOworfQorCitmdW5jdGlvbiBzaG93SG9tZSgpIHsKKyAgICBzaG93U2VjdGlvbignaG9tZScs
IHRydWUpOworfQorCitmdW5jdGlvbiBzdGFydFRlc3QoKSB7CisgICAgaWYgKHN0YXJ0QmVuY2ht
YXJrKCkpCisgICAgICAgIHNob3dTZWN0aW9uKCdydW5uaW5nJyk7Cit9CisKK2Z1bmN0aW9uIHNo
b3dSZXN1bHRzU3VtbWFyeSgpIHsKKyAgICBzaG93U2VjdGlvbignc3VtbWFyaXplZC1yZXN1bHRz
JywgdHJ1ZSk7Cit9CisKK2Z1bmN0aW9uIHNob3dSZXN1bHREZXRhaWxzKCkgeworICAgIHNob3dT
ZWN0aW9uKCdkZXRhaWxlZC1yZXN1bHRzJywgdHJ1ZSk7Cit9CisKK2Z1bmN0aW9uIHNob3dBYm91
dCgpIHsKKyAgICBzaG93U2VjdGlvbignYWJvdXQnLCB0cnVlKTsKK30KKword2luZG93LmFkZEV2
ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmdW5jdGlvbiAoKSB7CisgICAgaWYgKGJl
bmNobWFya0NsaWVudC5wcmVwYXJlVUkpCisgICAgICAgIGJlbmNobWFya0NsaWVudC5wcmVwYXJl
VUkoKTsKK30pOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9t
ZXRlcjIuMS9yZXNvdXJjZXMvdGVzdHMuanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1Nw
ZWVkb21ldGVyMi4xL3Jlc291cmNlcy90ZXN0cy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jODI2MWUzNTUwZjFh
MDBlYzgwYTUwNDc4ODA0NTNhODQ0YzYxNWZkCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMv
YnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdGVzdHMuanMKQEAgLTAs
MCArMSw1ODAgQEAKK3ZhciBudW1iZXJPZkl0ZW1zVG9BZGQgPSAxMDA7Cit2YXIgU3VpdGVzID0g
W107Cit2YXIgRU5URVJfS0VZX0NPREUgPSAxMzsKKwordmFyIHRyaWdnZXJFbnRlciA9IGZ1bmN0
aW9uIChlbGVtZW50LCB0eXBlKSB7CisgICAgdmFyIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZl
bnQoJ0V2ZW50cycpOworICAgIGV2ZW50LmluaXRFdmVudCh0eXBlLCB0cnVlLCB0cnVlKTsKKyAg
ICBldmVudC5rZXlDb2RlID0gRU5URVJfS0VZX0NPREU7CisgICAgZXZlbnQud2hpY2ggPSBFTlRF
Ul9LRVlfQ09ERTsKKyAgICBldmVudC5rZXkgPSAnRU5URVInOworICAgIGVsZW1lbnQuZGlzcGF0
Y2hFdmVudChldmVudCk7Cit9CisKK1N1aXRlcy5wdXNoKHsKKyAgICBuYW1lOiAnVmFuaWxsYUpT
LVRvZG9NVkMnLAorICAgIHVybDogJ3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy92YW5pbGxhanMv
aW5kZXguaHRtbCcsCisgICAgcHJlcGFyZTogZnVuY3Rpb24gKHJ1bm5lciwgY29udGVudFdpbmRv
dywgY29udGVudERvY3VtZW50KSB7CisgICAgICAgIHJldHVybiBydW5uZXIud2FpdEZvckVsZW1l
bnQoJy5uZXctdG9kbycpLnRoZW4oZnVuY3Rpb24gKGVsZW1lbnQpIHsKKyAgICAgICAgICAgIGVs
ZW1lbnQuZm9jdXMoKTsKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50OworICAgICAgICB9KTsK
KyAgICB9LAorICAgIHRlc3RzOiBbCisgICAgICAgIG5ldyBCZW5jaG1hcmtUZXN0U3RlcCgnQWRk
aW5nJyArIG51bWJlck9mSXRlbXNUb0FkZCArICdJdGVtcycsIGZ1bmN0aW9uIChuZXdUb2RvLCBj
b250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbnVtYmVyT2ZJdGVtc1RvQWRkOyBpKyspIHsKKyAgICAgICAgICAgICAgICBuZXdU
b2RvLnZhbHVlID0gJ1NvbWV0aGluZyB0byBkbyAnICsgaTsKKyAgICAgICAgICAgICAgICBuZXdU
b2RvLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdjaGFuZ2UnKSk7CisgICAgICAgICAgICAgICAg
dHJpZ2dlckVudGVyKG5ld1RvZG8sICdrZXlwcmVzcycpOworICAgICAgICAgICAgfQorICAgICAg
ICB9KSwKKyAgICAgICAgbmV3IEJlbmNobWFya1Rlc3RTdGVwKCdDb21wbGV0aW5nQWxsSXRlbXMn
LCBmdW5jdGlvbiAobmV3VG9kbywgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7Cisg
ICAgICAgICAgICB2YXIgY2hlY2tib3hlcyA9IGNvbnRlbnREb2N1bWVudC5xdWVyeVNlbGVjdG9y
QWxsKCcudG9nZ2xlJyk7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoZWNrYm94
ZXMubGVuZ3RoOyBpKyspCisgICAgICAgICAgICAgICAgY2hlY2tib3hlc1tpXS5jbGljaygpOwor
ICAgICAgICB9KSwKKyAgICAgICAgbmV3IEJlbmNobWFya1Rlc3RTdGVwKCdEZWxldGluZ0FsbEl0
ZW1zJywgZnVuY3Rpb24gKG5ld1RvZG8sIGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkg
eworICAgICAgICAgICAgdmFyIGRlbGV0ZUJ1dHRvbnMgPSBjb250ZW50RG9jdW1lbnQucXVlcnlT
ZWxlY3RvckFsbCgnLmRlc3Ryb3knKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
ZGVsZXRlQnV0dG9ucy5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgICAgICBkZWxldGVCdXR0b25z
W2ldLmNsaWNrKCk7CisgICAgICAgIH0pLAorICAgIF0KK30pOworCitTdWl0ZXMucHVzaCh7Cisg
ICAgbmFtZTogJ1ZhbmlsbGEtRVMyMDE1LVRvZG9NVkMnLAorICAgIHVybDogJ3RvZG9tdmMvdmFu
aWxsYS1leGFtcGxlcy9lczIwMTUvaW5kZXguaHRtbCcsCisgICAgcHJlcGFyZTogZnVuY3Rpb24g
KHJ1bm5lciwgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7CisgICAgICAgIHJldHVy
biBydW5uZXIud2FpdEZvckVsZW1lbnQoJy5uZXctdG9kbycpLnRoZW4oZnVuY3Rpb24gKGVsZW1l
bnQpIHsKKyAgICAgICAgICAgIGVsZW1lbnQuZm9jdXMoKTsKKyAgICAgICAgICAgIHJldHVybiBl
bGVtZW50OworICAgICAgICB9KTsKKyAgICB9LAorICAgIHRlc3RzOiBbCisgICAgICAgIG5ldyBC
ZW5jaG1hcmtUZXN0U3RlcCgnQWRkaW5nJyArIG51bWJlck9mSXRlbXNUb0FkZCArICdJdGVtcycs
IGZ1bmN0aW9uIChuZXdUb2RvLCBjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpIHsKKyAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZJdGVtc1RvQWRkOyBpKyspIHsK
KyAgICAgICAgICAgICAgICBuZXdUb2RvLnZhbHVlID0gJ1NvbWV0aGluZyB0byBkbyAnICsgaTsK
KyAgICAgICAgICAgICAgICBuZXdUb2RvLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdjaGFuZ2Un
KSk7CisgICAgICAgICAgICAgICAgdHJpZ2dlckVudGVyKG5ld1RvZG8sICdrZXlwcmVzcycpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9KSwKKyAgICAgICAgbmV3IEJlbmNobWFya1Rlc3RTdGVw
KCdDb21wbGV0aW5nQWxsSXRlbXMnLCBmdW5jdGlvbiAocGFyYW1zLCBjb250ZW50V2luZG93LCBj
b250ZW50RG9jdW1lbnQpIHsKKyAgICAgICAgICAgIHZhciBjaGVja2JveGVzID0gY29udGVudERv
Y3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy50b2dnbGUnKTsKKyAgICAgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgY2hlY2tib3hlcy5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgICAgICBjaGVj
a2JveGVzW2ldLmNsaWNrKCk7CisgICAgICAgIH0pLAorICAgICAgICBuZXcgQmVuY2htYXJrVGVz
dFN0ZXAoJ0RlbGV0aW5nSXRlbXMnLCBmdW5jdGlvbiAocGFyYW1zLCBjb250ZW50V2luZG93LCBj
b250ZW50RG9jdW1lbnQpIHsKKyAgICAgICAgICAgIHZhciBkZWxldGVCdXR0b25zID0gY29udGVu
dERvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5kZXN0cm95Jyk7CisgICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGRlbGV0ZUJ1dHRvbnMubGVuZ3RoOyBpKyspCisgICAgICAgICAgICAg
ICAgZGVsZXRlQnV0dG9uc1tpXS5jbGljaygpOworICAgICAgICB9KSwKKyAgICBdCit9KTsKKwor
U3VpdGVzLnB1c2goeworICAgIG5hbWU6ICdWYW5pbGxhLUVTMjAxNS1CYWJlbC1XZWJwYWNrLVRv
ZG9NVkMnLAorICAgIHVybDogJ3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwt
d2VicGFjay9kaXN0L2luZGV4Lmh0bWwnLAorICAgIHByZXBhcmU6IGZ1bmN0aW9uIChydW5uZXIs
IGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkgeworICAgICAgICByZXR1cm4gcnVubmVy
LndhaXRGb3JFbGVtZW50KCcubmV3LXRvZG8nKS50aGVuKGZ1bmN0aW9uIChlbGVtZW50KSB7Cisg
ICAgICAgICAgICBlbGVtZW50LmZvY3VzKCk7CisgICAgICAgICAgICByZXR1cm4gZWxlbWVudDsK
KyAgICAgICAgfSk7CisgICAgfSwKKyAgICB0ZXN0czogWworICAgICAgICBuZXcgQmVuY2htYXJr
VGVzdFN0ZXAoJ0FkZGluZycgKyBudW1iZXJPZkl0ZW1zVG9BZGQgKyAnSXRlbXMnLCBmdW5jdGlv
biAobmV3VG9kbywgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7CisgICAgICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mSXRlbXNUb0FkZDsgaSsrKSB7CisgICAgICAg
ICAgICAgICAgbmV3VG9kby52YWx1ZSA9ICdTb21ldGhpbmcgdG8gZG8gJyArIGk7CisgICAgICAg
ICAgICAgICAgbmV3VG9kby5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hhbmdlJykpOworICAg
ICAgICAgICAgICAgIHRyaWdnZXJFbnRlcihuZXdUb2RvLCAna2V5cHJlc3MnKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSksCisgICAgICAgIG5ldyBCZW5jaG1hcmtUZXN0U3RlcCgnQ29tcGxl
dGluZ0FsbEl0ZW1zJywgZnVuY3Rpb24gKHBhcmFtcywgY29udGVudFdpbmRvdywgY29udGVudERv
Y3VtZW50KSB7CisgICAgICAgICAgICB2YXIgY2hlY2tib3hlcyA9IGNvbnRlbnREb2N1bWVudC5x
dWVyeVNlbGVjdG9yQWxsKCcudG9nZ2xlJyk7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGNoZWNrYm94ZXMubGVuZ3RoOyBpKyspCisgICAgICAgICAgICAgICAgY2hlY2tib3hlc1tp
XS5jbGljaygpOworICAgICAgICB9KSwKKyAgICAgICAgbmV3IEJlbmNobWFya1Rlc3RTdGVwKCdE
ZWxldGluZ0l0ZW1zJywgZnVuY3Rpb24gKHBhcmFtcywgY29udGVudFdpbmRvdywgY29udGVudERv
Y3VtZW50KSB7CisgICAgICAgICAgICB2YXIgZGVsZXRlQnV0dG9ucyA9IGNvbnRlbnREb2N1bWVu
dC5xdWVyeVNlbGVjdG9yQWxsKCcuZGVzdHJveScpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBkZWxldGVCdXR0b25zLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgICAgIGRlbGV0
ZUJ1dHRvbnNbaV0uY2xpY2soKTsKKyAgICAgICAgfSksCisgICAgXQorfSk7CisKK1N1aXRlcy5w
dXNoKHsKKyAgICBuYW1lOiAnUmVhY3QtVG9kb01WQycsCisgICAgdXJsOiAndG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvaW5kZXguaHRtbCcsCisgICAgcHJlcGFyZTogZnVuY3Rp
b24gKHJ1bm5lciwgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7CisgICAgICAgIGNv
bnRlbnRXaW5kb3cuYXBwLlV0aWxzLnN0b3JlID0gZnVuY3Rpb24gKCkge30KKyAgICAgICAgcmV0
dXJuIHJ1bm5lci53YWl0Rm9yRWxlbWVudCgnLm5ldy10b2RvJykudGhlbihmdW5jdGlvbiAoZWxl
bWVudCkgeworICAgICAgICAgICAgZWxlbWVudC5mb2N1cygpOworICAgICAgICAgICAgcmV0dXJu
IGVsZW1lbnQ7CisgICAgICAgIH0pOworICAgIH0sCisgICAgdGVzdHM6IFsKKyAgICAgICAgbmV3
IEJlbmNobWFya1Rlc3RTdGVwKCdBZGRpbmcnICsgbnVtYmVyT2ZJdGVtc1RvQWRkICsgJ0l0ZW1z
JywgZnVuY3Rpb24gKG5ld1RvZG8sIGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkgewor
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkl0ZW1zVG9BZGQ7IGkrKykg
eworICAgICAgICAgICAgICAgIG5ld1RvZG8udmFsdWUgPSAnU29tZXRoaW5nIHRvIGRvICcgKyBp
OworICAgICAgICAgICAgICAgIG5ld1RvZG8uZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2lucHV0
JywgeworICAgICAgICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKKyAgICAgICAgICAgICAgICAg
IGNhbmNlbGFibGU6IHRydWUKKyAgICAgICAgICAgICAgICB9KSk7CisgICAgICAgICAgICAgICAg
dHJpZ2dlckVudGVyKG5ld1RvZG8sICdrZXlkb3duJyk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0pLAorICAgICAgICBuZXcgQmVuY2htYXJrVGVzdFN0ZXAoJ0NvbXBsZXRpbmdBbGxJdGVtcycs
IGZ1bmN0aW9uIChuZXdUb2RvLCBjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpIHsKKyAg
ICAgICAgICAgIHZhciBjaGVja2JveGVzID0gY29udGVudERvY3VtZW50LnF1ZXJ5U2VsZWN0b3JB
bGwoJy50b2dnbGUnKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hlY2tib3hl
cy5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgICAgICBjaGVja2JveGVzW2ldLmNsaWNrKCk7Cisg
ICAgICAgIH0pLAorICAgICAgICBuZXcgQmVuY2htYXJrVGVzdFN0ZXAoJ0RlbGV0aW5nQWxsSXRl
bXMnLCBmdW5jdGlvbiAobmV3VG9kbywgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7
CisgICAgICAgICAgICB2YXIgZGVsZXRlQnV0dG9ucyA9IGNvbnRlbnREb2N1bWVudC5xdWVyeVNl
bGVjdG9yQWxsKCcuZGVzdHJveScpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBk
ZWxldGVCdXR0b25zLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgICAgIGRlbGV0ZUJ1dHRvbnNb
aV0uY2xpY2soKTsKKyAgICAgICAgfSksCisgICAgXQorfSk7CisKK1N1aXRlcy5wdXNoKHsKKyAg
ICBuYW1lOiAnUmVhY3QtUmVkdXgtVG9kb01WQycsCisgICAgdXJsOiAndG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvcmVhY3QtcmVkdXgvZGlzdC9pbmRleC5odG1sJywKKyAgICBwcmVwYXJl
OiBmdW5jdGlvbiAocnVubmVyLCBjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpIHsKKyAg
ICAgICAgcmV0dXJuIHJ1bm5lci53YWl0Rm9yRWxlbWVudCgnLm5ldy10b2RvJykudGhlbihmdW5j
dGlvbiAoZWxlbWVudCkgeworICAgICAgICAgICAgZWxlbWVudC5mb2N1cygpOworICAgICAgICAg
ICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgICAgIH0pOworICAgIH0sCisgICAgdGVzdHM6IFsKKyAg
ICAgICAgbmV3IEJlbmNobWFya1Rlc3RTdGVwKCdBZGRpbmcnICsgbnVtYmVyT2ZJdGVtc1RvQWRk
ICsgJ0l0ZW1zJywgZnVuY3Rpb24gKG5ld1RvZG8sIGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1
bWVudCkgeworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkl0ZW1zVG9B
ZGQ7IGkrKykgeworICAgICAgICAgICAgICAgIG5ld1RvZG8udmFsdWUgPSAnU29tZXRoaW5nIHRv
IGRvICcgKyBpOworICAgICAgICAgICAgICAgIHRyaWdnZXJFbnRlcihuZXdUb2RvLCAna2V5ZG93
bicpOworICAgICAgICAgICAgfQorICAgICAgICB9KSwKKyAgICAgICAgbmV3IEJlbmNobWFya1Rl
c3RTdGVwKCdDb21wbGV0aW5nQWxsSXRlbXMnLCBmdW5jdGlvbiAocGFyYW1zLCBjb250ZW50V2lu
ZG93LCBjb250ZW50RG9jdW1lbnQpIHsKKyAgICAgICAgICAgIHZhciBjaGVja2JveGVzID0gY29u
dGVudERvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy50b2dnbGUnKTsKKyAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgY2hlY2tib3hlcy5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgICAg
ICBjaGVja2JveGVzW2ldLmNsaWNrKCk7CisgICAgICAgIH0pLAorICAgICAgICBuZXcgQmVuY2ht
YXJrVGVzdFN0ZXAoJ0RlbGV0aW5nSXRlbXMnLCBmdW5jdGlvbiAocGFyYW1zLCBjb250ZW50V2lu
ZG93LCBjb250ZW50RG9jdW1lbnQpIHsKKyAgICAgICAgICAgIHZhciBkZWxldGVCdXR0b25zID0g
Y29udGVudERvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5kZXN0cm95Jyk7CisgICAgICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGV0ZUJ1dHRvbnMubGVuZ3RoOyBpKyspCisgICAgICAg
ICAgICAgICAgZGVsZXRlQnV0dG9uc1tpXS5jbGljaygpOworICAgICAgICB9KSwKKyAgICBdCit9
KTsKKworU3VpdGVzLnB1c2goeworICAgIG5hbWU6ICdFbWJlckpTLVRvZG9NVkMnLAorICAgIHVy
bDogJ3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvZGlzdC9pbmRleC5odG1s
JywKKyAgICBwcmVwYXJlOiBmdW5jdGlvbiAocnVubmVyLCBjb250ZW50V2luZG93LCBjb250ZW50
RG9jdW1lbnQpIHsKKyAgICAgICAgcmV0dXJuIHJ1bm5lci53YWl0Rm9yRWxlbWVudCgnI25ldy10
b2RvJykudGhlbihmdW5jdGlvbiAoZWxlbWVudCkgeworICAgICAgICAgICAgZWxlbWVudC5mb2N1
cygpOworICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgICAgIH0pOworICAgIH0sCisg
ICAgdGVzdHM6IFsKKyAgICAgICAgbmV3IEJlbmNobWFya1Rlc3RTdGVwKCdBZGRpbmcnICsgbnVt
YmVyT2ZJdGVtc1RvQWRkICsgJ0l0ZW1zJywgZnVuY3Rpb24gKG5ld1RvZG8sIGNvbnRlbnRXaW5k
b3csIGNvbnRlbnREb2N1bWVudCkgeworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBu
dW1iZXJPZkl0ZW1zVG9BZGQ7IGkrKykgeworICAgICAgICAgICAgICAgIG5ld1RvZG8udmFsdWUg
PSAnU29tZXRoaW5nIHRvIGRvICcgKyBpOworICAgICAgICAgICAgICAgIHRyaWdnZXJFbnRlcihu
ZXdUb2RvLCAna2V5ZG93bicpOworICAgICAgICAgICAgfQorICAgICAgICB9KSwKKyAgICAgICAg
bmV3IEJlbmNobWFya1Rlc3RTdGVwKCdDb21wbGV0aW5nQWxsSXRlbXMnLCBmdW5jdGlvbiAocGFy
YW1zLCBjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpIHsKKyAgICAgICAgICAgIHZhciBj
aGVja2JveGVzID0gY29udGVudERvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy50b2dnbGUnKTsK
KyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hlY2tib3hlcy5sZW5ndGg7IGkrKykK
KyAgICAgICAgICAgICAgICBjaGVja2JveGVzW2ldLmNsaWNrKCk7CisgICAgICAgIH0pLAorICAg
ICAgICBuZXcgQmVuY2htYXJrVGVzdFN0ZXAoJ0RlbGV0aW5nSXRlbXMnLCBmdW5jdGlvbiAocGFy
YW1zLCBjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpIHsKKyAgICAgICAgICAgIHZhciBk
ZWxldGVCdXR0b25zID0gY29udGVudERvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5kZXN0cm95
Jyk7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGV0ZUJ1dHRvbnMubGVuZ3Ro
OyBpKyspCisgICAgICAgICAgICAgICAgZGVsZXRlQnV0dG9uc1tpXS5jbGljaygpOworICAgICAg
ICB9KSwKKyAgICBdCit9KTsKKworU3VpdGVzLnB1c2goeworICAgIG5hbWU6ICdFbWJlckpTLURl
YnVnLVRvZG9NVkMnLAorICAgIHVybDogJ3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2Vt
YmVyanMtZGVidWcvaW5kZXguaHRtbCcsCisgICAgcHJlcGFyZTogZnVuY3Rpb24gKHJ1bm5lciwg
Y29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7CisgICAgICAgIHJldHVybiBydW5uZXIu
d2FpdEZvckVsZW1lbnQoJyNuZXctdG9kbycpLnRoZW4oZnVuY3Rpb24gKGVsZW1lbnQpIHsKKyAg
ICAgICAgICAgIGVsZW1lbnQuZm9jdXMoKTsKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50Owor
ICAgICAgICB9KTsKKyAgICB9LAorICAgIHRlc3RzOiBbCisgICAgICAgIG5ldyBCZW5jaG1hcmtU
ZXN0U3RlcCgnQWRkaW5nJyArIG51bWJlck9mSXRlbXNUb0FkZCArICdJdGVtcycsIGZ1bmN0aW9u
IChuZXdUb2RvLCBjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpIHsKKyAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZJdGVtc1RvQWRkOyBpKyspIHsKKyAgICAgICAg
ICAgICAgICBuZXdUb2RvLnZhbHVlID0gJ1NvbWV0aGluZyB0byBkbyAnICsgaTsKKyAgICAgICAg
ICAgICAgICB0cmlnZ2VyRW50ZXIobmV3VG9kbywgJ2tleWRvd24nKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSksCisgICAgICAgIG5ldyBCZW5jaG1hcmtUZXN0U3RlcCgnQ29tcGxldGluZ0Fs
bEl0ZW1zJywgZnVuY3Rpb24gKHBhcmFtcywgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50
KSB7CisgICAgICAgICAgICB2YXIgY2hlY2tib3hlcyA9IGNvbnRlbnREb2N1bWVudC5xdWVyeVNl
bGVjdG9yQWxsKCcudG9nZ2xlJyk7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNo
ZWNrYm94ZXMubGVuZ3RoOyBpKyspCisgICAgICAgICAgICAgICAgY2hlY2tib3hlc1tpXS5jbGlj
aygpOworICAgICAgICB9KSwKKyAgICAgICAgbmV3IEJlbmNobWFya1Rlc3RTdGVwKCdEZWxldGlu
Z0l0ZW1zJywgZnVuY3Rpb24gKHBhcmFtcywgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50
KSB7CisgICAgICAgICAgICB2YXIgZGVsZXRlQnV0dG9ucyA9IGNvbnRlbnREb2N1bWVudC5xdWVy
eVNlbGVjdG9yQWxsKCcuZGVzdHJveScpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBkZWxldGVCdXR0b25zLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgICAgIGRlbGV0ZUJ1dHRv
bnNbaV0uY2xpY2soKTsKKyAgICAgICAgfSksCisgICAgXQorfSk7CisKK1N1aXRlcy5wdXNoKHsK
KyAgICBuYW1lOiAnQmFja2JvbmVKUy1Ub2RvTVZDJywKKyAgICB1cmw6ICd0b2RvbXZjL2FyY2hp
dGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9pbmRleC5odG1sJywKKyAgICBwcmVwYXJlOiBmdW5j
dGlvbiAocnVubmVyLCBjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpIHsKKyAgICBjb250
ZW50V2luZG93LkJhY2tib25lLnN5bmMgPSBmdW5jdGlvbiAoKSB7fQorICAgICAgICByZXR1cm4g
cnVubmVyLndhaXRGb3JFbGVtZW50KCcjYXBwSXNSZWFkeScpLnRoZW4oZnVuY3Rpb24gKGVsZW1l
bnQpIHsKKyAgICAgICAgICAgIHZhciBuZXdUb2RvID0gY29udGVudERvY3VtZW50LnF1ZXJ5U2Vs
ZWN0b3IoJy5uZXctdG9kbycpOworICAgICAgICAgICAgbmV3VG9kby5mb2N1cygpOworICAgICAg
ICAgICAgcmV0dXJuIG5ld1RvZG87CisgICAgICAgIH0pOworICAgIH0sCisgICAgdGVzdHM6IFsK
KyAgICAgICAgbmV3IEJlbmNobWFya1Rlc3RTdGVwKCdBZGRpbmcnICsgbnVtYmVyT2ZJdGVtc1Rv
QWRkICsgJ0l0ZW1zJywgZnVuY3Rpb24gKG5ld1RvZG8sIGNvbnRlbnRXaW5kb3csIGNvbnRlbnRE
b2N1bWVudCkgeworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkl0ZW1z
VG9BZGQ7IGkrKykgeworICAgICAgICAgICAgICAgIG5ld1RvZG8udmFsdWUgPSAnU29tZXRoaW5n
IHRvIGRvICcgKyBpOworICAgICAgICAgICAgICAgIHRyaWdnZXJFbnRlcihuZXdUb2RvLCAna2V5
cHJlc3MnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSksCisgICAgICAgIG5ldyBCZW5jaG1h
cmtUZXN0U3RlcCgnQ29tcGxldGluZ0FsbEl0ZW1zJywgZnVuY3Rpb24gKG5ld1RvZG8sIGNvbnRl
bnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkgeworICAgICAgICAgICAgdmFyIGNoZWNrYm94ZXMg
PSBjb250ZW50RG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnRvZ2dsZScpOworICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkl0ZW1zVG9BZGQ7IGkrKykKKyAgICAgICAg
ICAgICAgICBjaGVja2JveGVzW2ldLmNsaWNrKCk7CisgICAgICAgIH0pLAorICAgICAgICBuZXcg
QmVuY2htYXJrVGVzdFN0ZXAoJ0RlbGV0aW5nQWxsSXRlbXMnLCBmdW5jdGlvbiAobmV3VG9kbywg
Y29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7CisgICAgICAgICAgICB2YXIgZGVsZXRl
QnV0dG9ucyA9IGNvbnRlbnREb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZGVzdHJveScpOwor
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkl0ZW1zVG9BZGQ7IGkrKykK
KyAgICAgICAgICAgICAgICBkZWxldGVCdXR0b25zW2ldLmNsaWNrKCk7CisgICAgICAgIH0pLAor
ICAgIF0KK30pOworCitTdWl0ZXMucHVzaCh7CisgICAgbmFtZTogJ0FuZ3VsYXJKUy1Ub2RvTVZD
JywKKyAgICB1cmw6ICd0b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvaW5k
ZXguaHRtbCcsCisgICAgcHJlcGFyZTogZnVuY3Rpb24gKHJ1bm5lciwgY29udGVudFdpbmRvdywg
Y29udGVudERvY3VtZW50KSB7CisgICAgICAgIHJldHVybiBydW5uZXIud2FpdEZvckVsZW1lbnQo
JyNuZXctdG9kbycpLnRoZW4oZnVuY3Rpb24gKGVsZW1lbnQpIHsKKyAgICAgICAgICAgIGVsZW1l
bnQuZm9jdXMoKTsKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50OworICAgICAgICB9KTsKKyAg
ICB9LAorICAgIHRlc3RzOiBbCisgICAgICAgIG5ldyBCZW5jaG1hcmtUZXN0U3RlcCgnQWRkaW5n
JyArIG51bWJlck9mSXRlbXNUb0FkZCArICdJdGVtcycsIGZ1bmN0aW9uIChuZXdUb2RvLCBjb250
ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpIHsKKyAgICAgICAgICAgIHZhciBzdWJtaXRFdmVu
dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpOworICAgICAgICAgICAgc3VibWl0RXZl
bnQuaW5pdEV2ZW50KCdzdWJtaXQnLCB0cnVlLCB0cnVlKTsKKyAgICAgICAgICAgIHZhciBpbnB1
dEV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7CisgICAgICAgICAgICBpbnB1
dEV2ZW50LmluaXRFdmVudCgnaW5wdXQnLCB0cnVlLCB0cnVlKTsKKyAgICAgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZJdGVtc1RvQWRkOyBpKyspIHsKKyAgICAgICAgICAgICAg
ICBuZXdUb2RvLnZhbHVlID0gJ1NvbWV0aGluZyB0byBkbyAnICsgaTsKKyAgICAgICAgICAgICAg
ICBuZXdUb2RvLmRpc3BhdGNoRXZlbnQoaW5wdXRFdmVudCk7CisgICAgICAgICAgICAgICAgbmV3
VG9kby5mb3JtLmRpc3BhdGNoRXZlbnQoc3VibWl0RXZlbnQpOworICAgICAgICAgICAgfQorICAg
ICAgICB9KSwKKyAgICAgICAgbmV3IEJlbmNobWFya1Rlc3RTdGVwKCdDb21wbGV0aW5nQWxsSXRl
bXMnLCBmdW5jdGlvbiAobmV3VG9kbywgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7
CisgICAgICAgICAgICB2YXIgY2hlY2tib3hlcyA9IGNvbnRlbnREb2N1bWVudC5xdWVyeVNlbGVj
dG9yQWxsKCcudG9nZ2xlJyk7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoZWNr
Ym94ZXMubGVuZ3RoOyBpKyspCisgICAgICAgICAgICAgICAgY2hlY2tib3hlc1tpXS5jbGljaygp
OworICAgICAgICB9KSwKKyAgICAgICAgbmV3IEJlbmNobWFya1Rlc3RTdGVwKCdEZWxldGluZ0Fs
bEl0ZW1zJywgZnVuY3Rpb24gKG5ld1RvZG8sIGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1bWVu
dCkgeworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkl0ZW1zVG9BZGQ7
IGkrKykKKyAgICAgICAgICAgICAgICBjb250ZW50RG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmRl
c3Ryb3knKS5jbGljaygpOworICAgICAgICB9KSwKKyAgICBdCit9KTsKKworU3VpdGVzLnB1c2go
eworICAgIG5hbWU6ICdBbmd1bGFyMi1UeXBlU2NyaXB0LVRvZG9NVkMnLAorICAgIHVybDogJ3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXIvZGlzdC9pbmRleC5odG1sJywKKyAg
ICBwcmVwYXJlOiBmdW5jdGlvbiAocnVubmVyLCBjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1l
bnQpIHsKKyAgICAgICAgcmV0dXJuIHJ1bm5lci53YWl0Rm9yRWxlbWVudCgnLm5ldy10b2RvJyku
dGhlbihmdW5jdGlvbiAoZWxlbWVudCkgeworICAgICAgICAgICAgZWxlbWVudC5mb2N1cygpOwor
ICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgICAgIH0pOworICAgIH0sCisgICAgdGVz
dHM6IFsKKyAgICAgICAgbmV3IEJlbmNobWFya1Rlc3RTdGVwKCdBZGRpbmcnICsgbnVtYmVyT2ZJ
dGVtc1RvQWRkICsgJ0l0ZW1zJywgZnVuY3Rpb24gKG5ld1RvZG8sIGNvbnRlbnRXaW5kb3csIGNv
bnRlbnREb2N1bWVudCkgeworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJP
Zkl0ZW1zVG9BZGQ7IGkrKykgeworICAgICAgICAgICAgICAgIG5ld1RvZG8udmFsdWUgPSAnU29t
ZXRoaW5nIHRvIGRvICcgKyBpOworICAgICAgICAgICAgICAgIG5ld1RvZG8uZGlzcGF0Y2hFdmVu
dChuZXcgRXZlbnQoJ2lucHV0JywgeworICAgICAgICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwK
KyAgICAgICAgICAgICAgICAgIGNhbmNlbGFibGU6IHRydWUKKyAgICAgICAgICAgICAgICB9KSk7
CisgICAgICAgICAgICAgICAgdHJpZ2dlckVudGVyKG5ld1RvZG8sICdrZXl1cCcpOworICAgICAg
ICAgICAgfQorICAgICAgICB9KSwKKyAgICAgICAgbmV3IEJlbmNobWFya1Rlc3RTdGVwKCdDb21w
bGV0aW5nQWxsSXRlbXMnLCBmdW5jdGlvbiAocGFyYW1zLCBjb250ZW50V2luZG93LCBjb250ZW50
RG9jdW1lbnQpIHsKKyAgICAgICAgICAgIHZhciBjaGVja2JveGVzID0gY29udGVudERvY3VtZW50
LnF1ZXJ5U2VsZWN0b3JBbGwoJy50b2dnbGUnKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgY2hlY2tib3hlcy5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgICAgICBjaGVja2JveGVz
W2ldLmNsaWNrKCk7CisgICAgICAgIH0pLAorICAgICAgICBuZXcgQmVuY2htYXJrVGVzdFN0ZXAo
J0RlbGV0aW5nSXRlbXMnLCBmdW5jdGlvbiAocGFyYW1zLCBjb250ZW50V2luZG93LCBjb250ZW50
RG9jdW1lbnQpIHsKKyAgICAgICAgICAgIHZhciBkZWxldGVCdXR0b25zID0gY29udGVudERvY3Vt
ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5kZXN0cm95Jyk7CisgICAgICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGRlbGV0ZUJ1dHRvbnMubGVuZ3RoOyBpKyspCisgICAgICAgICAgICAgICAgZGVs
ZXRlQnV0dG9uc1tpXS5jbGljaygpOworICAgICAgICB9KSwKKyAgICBdCit9KTsKKworU3VpdGVz
LnB1c2goeworICAgIG5hbWU6ICdWdWVKUy1Ub2RvTVZDJywKKyAgICB1cmw6ICd0b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy92dWVqcy1jbGkvZGlzdC9pbmRleC5odG1sJywKKyAgICBwcmVw
YXJlOiBmdW5jdGlvbiAocnVubmVyLCBjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpIHsK
KyAgICAgICAgcmV0dXJuIHJ1bm5lci53YWl0Rm9yRWxlbWVudCgnLm5ldy10b2RvJykudGhlbihm
dW5jdGlvbiAoZWxlbWVudCkgeworICAgICAgICAgICAgZWxlbWVudC5mb2N1cygpOworICAgICAg
ICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgICAgIH0pOworICAgIH0sCisgICAgdGVzdHM6IFsK
KyAgICAgICAgbmV3IEJlbmNobWFya1Rlc3RTdGVwKCdBZGRpbmcnICsgbnVtYmVyT2ZJdGVtc1Rv
QWRkICsgJ0l0ZW1zJywgZnVuY3Rpb24gKG5ld1RvZG8sIGNvbnRlbnRXaW5kb3csIGNvbnRlbnRE
b2N1bWVudCkgeworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkl0ZW1z
VG9BZGQ7IGkrKykgeworICAgICAgICAgICAgICAgIG5ld1RvZG8udmFsdWUgPSAnU29tZXRoaW5n
IHRvIGRvICcgKyBpOworICAgICAgICAgICAgICAgIG5ld1RvZG8uZGlzcGF0Y2hFdmVudChuZXcg
RXZlbnQoJ2lucHV0JywgeworICAgICAgICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKKyAgICAg
ICAgICAgICAgICAgIGNhbmNlbGFibGU6IHRydWUKKyAgICAgICAgICAgICAgICB9KSk7CisgICAg
ICAgICAgICAgICAgdHJpZ2dlckVudGVyKG5ld1RvZG8sICdrZXl1cCcpOworICAgICAgICAgICAg
fQorICAgICAgICB9KSwKKyAgICAgICAgbmV3IEJlbmNobWFya1Rlc3RTdGVwKCdDb21wbGV0aW5n
QWxsSXRlbXMnLCBmdW5jdGlvbiAobmV3VG9kbywgY29udGVudFdpbmRvdywgY29udGVudERvY3Vt
ZW50KSB7CisgICAgICAgICAgICB2YXIgY2hlY2tib3hlcyA9IGNvbnRlbnREb2N1bWVudC5xdWVy
eVNlbGVjdG9yQWxsKCcudG9nZ2xlJyk7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGNoZWNrYm94ZXMubGVuZ3RoOyBpKyspCisgICAgICAgICAgICAgICAgY2hlY2tib3hlc1tpXS5j
bGljaygpOworICAgICAgICB9KSwKKyAgICAgICAgbmV3IEJlbmNobWFya1Rlc3RTdGVwKCdEZWxl
dGluZ0FsbEl0ZW1zJywgZnVuY3Rpb24gKG5ld1RvZG8sIGNvbnRlbnRXaW5kb3csIGNvbnRlbnRE
b2N1bWVudCkgeworICAgICAgICAgICAgdmFyIGRlbGV0ZUJ1dHRvbnMgPSBjb250ZW50RG9jdW1l
bnQucXVlcnlTZWxlY3RvckFsbCgnLmRlc3Ryb3knKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgZGVsZXRlQnV0dG9ucy5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgICAgICBkZWxl
dGVCdXR0b25zW2ldLmNsaWNrKCk7CisgICAgICAgIH0pLAorICAgIF0KK30pOworCitTdWl0ZXMu
cHVzaCh7CisgICAgbmFtZTogJ2pRdWVyeS1Ub2RvTVZDJywKKyAgICB1cmw6ICd0b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9qcXVlcnkvaW5kZXguaHRtbCcsCisgICAgcHJlcGFyZTogZnVu
Y3Rpb24gKHJ1bm5lciwgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7CisgICAgICAg
IHJldHVybiBydW5uZXIud2FpdEZvckVsZW1lbnQoJyNhcHBJc1JlYWR5JykudGhlbihmdW5jdGlv
biAoZWxlbWVudCkgeworICAgICAgICAgICAgdmFyIG5ld1RvZG8gPSBjb250ZW50RG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ25ldy10b2RvJyk7CisgICAgICAgICAgICBuZXdUb2RvLmZvY3VzKCk7
CisgICAgICAgICAgICByZXR1cm4gbmV3VG9kbzsKKyAgICAgICAgfSk7CisgICAgfSwKKyAgICB0
ZXN0czogWworICAgICAgICBuZXcgQmVuY2htYXJrVGVzdFN0ZXAoJ0FkZGluZycgKyBudW1iZXJP
Zkl0ZW1zVG9BZGQgKyAnSXRlbXMnLCBmdW5jdGlvbiAobmV3VG9kbywgY29udGVudFdpbmRvdywg
Y29udGVudERvY3VtZW50KSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJl
ck9mSXRlbXNUb0FkZDsgaSsrKSB7CisgICAgICAgICAgICAgICAgbmV3VG9kby52YWx1ZSA9ICdT
b21ldGhpbmcgdG8gZG8gJyArIGk7CisgICAgICAgICAgICAgICAgdHJpZ2dlckVudGVyKG5ld1Rv
ZG8sICdrZXl1cCcpOworICAgICAgICAgICAgfQorICAgICAgICB9KSwKKyAgICAgICAgbmV3IEJl
bmNobWFya1Rlc3RTdGVwKCdDb21wbGV0aW5nQWxsSXRlbXMnLCBmdW5jdGlvbiAobmV3VG9kbywg
Y29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7CisgICAgICAgICAgICB2YXIgY2hlY2ti
b3hlcyA9IGNvbnRlbnREb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0b2dnbGUnKTsK
KyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hlY2tib3hlcy5sZW5ndGg7IGkrKykK
KyAgICAgICAgICAgICAgICBjaGVja2JveGVzW2ldLmNsaWNrKCk7CisgICAgICAgIH0pLAorICAg
ICAgICBuZXcgQmVuY2htYXJrVGVzdFN0ZXAoJ0RlbGV0aW5nQWxsSXRlbXMnLCBmdW5jdGlvbiAo
bmV3VG9kbywgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7CisgICAgICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mSXRlbXNUb0FkZDsgaSsrKQorICAgICAgICAgICAg
ICAgIGNvbnRlbnREb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZGVzdHJveScpLmNsaWNrKCk7Cisg
ICAgICAgIH0pLAorICAgIF0KK30pCisKK1N1aXRlcy5wdXNoKHsKKyAgICBuYW1lOiAnUHJlYWN0
LVRvZG9NVkMnLAorICAgIHVybDogJ3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3ByZWFj
dC9kaXN0L2luZGV4Lmh0bWwnLAorICAgIHByZXBhcmU6IGZ1bmN0aW9uIChydW5uZXIsIGNvbnRl
bnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkgeworICAgICAgICByZXR1cm4gcnVubmVyLndhaXRG
b3JFbGVtZW50KCcubmV3LXRvZG8nKS50aGVuKGZ1bmN0aW9uIChlbGVtZW50KSB7CisgICAgICAg
ICAgICBlbGVtZW50LmZvY3VzKCk7CisgICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICAg
ICAgfSk7CisgICAgfSwKKyAgICB0ZXN0czogWworICAgICAgICBuZXcgQmVuY2htYXJrVGVzdFN0
ZXAoJ0FkZGluZycgKyBudW1iZXJPZkl0ZW1zVG9BZGQgKyAnSXRlbXMnLCBmdW5jdGlvbiAobmV3
VG9kbywgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7CisgICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IG51bWJlck9mSXRlbXNUb0FkZDsgaSsrKSB7CisgICAgICAgICAgICAg
ICAgbmV3VG9kby52YWx1ZSA9ICdTb21ldGhpbmcgdG8gZG8gJyArIGk7CisgICAgICAgICAgICAg
ICAgdHJpZ2dlckVudGVyKG5ld1RvZG8sICdrZXlkb3duJyk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0pLAorICAgICAgICBuZXcgQmVuY2htYXJrVGVzdFN0ZXAoJ0NvbXBsZXRpbmdBbGxJdGVt
cycsIGZ1bmN0aW9uIChwYXJhbXMsIGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkgewor
ICAgICAgICAgICAgdmFyIGNoZWNrYm94ZXMgPSBjb250ZW50RG9jdW1lbnQucXVlcnlTZWxlY3Rv
ckFsbCgnLnRvZ2dsZScpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGVja2Jv
eGVzLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgICAgIGNoZWNrYm94ZXNbaV0uY2xpY2soKTsK
KyAgICAgICAgfSksCisgICAgICAgIG5ldyBCZW5jaG1hcmtUZXN0U3RlcCgnRGVsZXRpbmdJdGVt
cycsIGZ1bmN0aW9uIChwYXJhbXMsIGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkgewor
ICAgICAgICAgICAgdmFyIGRlbGV0ZUJ1dHRvbnMgPSBjb250ZW50RG9jdW1lbnQucXVlcnlTZWxl
Y3RvckFsbCgnLmRlc3Ryb3knKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVs
ZXRlQnV0dG9ucy5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgICAgICBkZWxldGVCdXR0b25zW2ld
LmNsaWNrKCk7CisgICAgICAgIH0pLAorICAgIF0KK30pOworCitTdWl0ZXMucHVzaCh7CisgICAg
bmFtZTogJ0luZmVybm8tVG9kb01WQycsCisgICAgdXJsOiAndG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvaW5mZXJuby9pbmRleC5odG1sJywKKyAgICBwcmVwYXJlOiBmdW5jdGlvbiAocnVu
bmVyLCBjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpIHsKKyAgICAgICAgcmV0dXJuIHJ1
bm5lci53YWl0Rm9yRWxlbWVudCgnLm5ldy10b2RvJykudGhlbihmdW5jdGlvbiAoZWxlbWVudCkg
eworICAgICAgICAgICAgZWxlbWVudC5mb2N1cygpOworICAgICAgICAgICAgcmV0dXJuIGVsZW1l
bnQ7CisgICAgICAgIH0pOworICAgIH0sCisgICAgdGVzdHM6IFsKKyAgICAgICAgbmV3IEJlbmNo
bWFya1Rlc3RTdGVwKCdBZGRpbmcnICsgbnVtYmVyT2ZJdGVtc1RvQWRkICsgJ0l0ZW1zJywgZnVu
Y3Rpb24gKG5ld1RvZG8sIGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkgeworICAgICAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkl0ZW1zVG9BZGQ7IGkrKykgeworICAg
ICAgICAgICAgICAgIG5ld1RvZG8udmFsdWUgPSAnU29tZXRoaW5nIHRvIGRvICcgKyBpOworICAg
ICAgICAgICAgICAgIG5ld1RvZG8uZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2NoYW5nZScsIHsK
KyAgICAgICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCisgICAgICAgICAgICAgICAgICBjYW5j
ZWxhYmxlOiB0cnVlCisgICAgICAgICAgICAgICAgfSkpOworICAgICAgICAgICAgICAgIHRyaWdn
ZXJFbnRlcihuZXdUb2RvLCAna2V5ZG93bicpOworICAgICAgICAgICAgfQorICAgICAgICB9KSwK
KyAgICAgICAgbmV3IEJlbmNobWFya1Rlc3RTdGVwKCdDb21wbGV0aW5nQWxsSXRlbXMnLCBmdW5j
dGlvbiAocGFyYW1zLCBjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpIHsKKyAgICAgICAg
ICAgIHZhciBjaGVja2JveGVzID0gY29udGVudERvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy50
b2dnbGUnKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hlY2tib3hlcy5sZW5n
dGg7IGkrKykKKyAgICAgICAgICAgICAgICBjaGVja2JveGVzW2ldLmNsaWNrKCk7CisgICAgICAg
IH0pLAorICAgICAgICBuZXcgQmVuY2htYXJrVGVzdFN0ZXAoJ0RlbGV0aW5nSXRlbXMnLCBmdW5j
dGlvbiAocGFyYW1zLCBjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpIHsKKyAgICAgICAg
ICAgIHZhciBkZWxldGVCdXR0b25zID0gY29udGVudERvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwo
Jy5kZXN0cm95Jyk7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mSXRl
bXNUb0FkZDsgaSsrKQorICAgICAgICAgICAgICAgIGNvbnRlbnREb2N1bWVudC5xdWVyeVNlbGVj
dG9yKCcuZGVzdHJveScpLmNsaWNrKCk7CisgICAgICAgIH0pLAorICAgIF0KK30pOworCitmdW5j
dGlvbiBwcm9jZXNzRWxtV29ya1F1ZXVlKGNvbnRlbnRXaW5kb3cpCit7CisgICAgY29udGVudFdp
bmRvdy5lbG1Xb3JrKCk7CisgICAgdmFyIGNhbGxiYWNrcyA9IGNvbnRlbnRXaW5kb3cuckFGQ2Fs
bGJhY2tMaXN0OworICAgIHZhciBpID0gMDsKKyAgICB3aGlsZSAoaSA8IGNhbGxiYWNrcy5sZW5n
dGgpIHsKKyAgICAgICAgY2FsbGJhY2tzW2ldKCk7CisgICAgICAgIGkrKzsKKyAgICB9CisgICAg
Y29udGVudFdpbmRvdy5yQUZDYWxsYmFja0xpc3QgPSBbXTsKK30KKworU3VpdGVzLnB1c2goewor
ICAgIG5hbWU6ICdFbG0tVG9kb01WQycsCisgICAgdXJsOiAndG9kb212Yy9mdW5jdGlvbmFsLXBy
b2ctZXhhbXBsZXMvZWxtL2luZGV4Lmh0bWwnLAorICAgIHByZXBhcmU6IGZ1bmN0aW9uIChydW5u
ZXIsIGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkgeworICAgICAgICByZXR1cm4gcnVu
bmVyLndhaXRGb3JFbGVtZW50KCcubmV3LXRvZG8nKS50aGVuKGZ1bmN0aW9uIChlbGVtZW50KSB7
CisgICAgICAgICAgICBlbGVtZW50LmZvY3VzKCk7CisgICAgICAgICAgICByZXR1cm4gZWxlbWVu
dDsKKyAgICAgICAgfSk7CisgICAgfSwKKyAgICB0ZXN0czogWworICAgICAgICBuZXcgQmVuY2ht
YXJrVGVzdFN0ZXAoJ0FkZGluZycgKyBudW1iZXJPZkl0ZW1zVG9BZGQgKyAnSXRlbXMnLCBmdW5j
dGlvbiAobmV3VG9kbywgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7CisgICAgICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mSXRlbXNUb0FkZDsgaSsrKSB7CisgICAg
ICAgICAgICAgICAgbmV3VG9kby52YWx1ZSA9ICdTb21ldGhpbmcgdG8gZG8gJyArIGk7CisgICAg
ICAgICAgICAgICAgbmV3VG9kby5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnaW5wdXQnLCB7Cisg
ICAgICAgICAgICAgICAgICBidWJibGVzOiB0cnVlLAorICAgICAgICAgICAgICAgICAgY2FuY2Vs
YWJsZTogdHJ1ZQorICAgICAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgICAgICBwcm9jZXNz
RWxtV29ya1F1ZXVlKGNvbnRlbnRXaW5kb3cpOworICAgICAgICAgICAgICAgIHRyaWdnZXJFbnRl
cihuZXdUb2RvLCAna2V5ZG93bicpOworICAgICAgICAgICAgICAgIHByb2Nlc3NFbG1Xb3JrUXVl
dWUoY29udGVudFdpbmRvdyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pLAorICAgICAgICBu
ZXcgQmVuY2htYXJrVGVzdFN0ZXAoJ0NvbXBsZXRpbmdBbGxJdGVtcycsIGZ1bmN0aW9uIChwYXJh
bXMsIGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkgeworICAgICAgICAgICAgdmFyIGNo
ZWNrYm94ZXMgPSBjb250ZW50RG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnRvZ2dsZScpOwor
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGVja2JveGVzLmxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgICAgICAgY2hlY2tib3hlc1tpXS5jbGljaygpOworICAgICAgICAgICAgICAg
IHByb2Nlc3NFbG1Xb3JrUXVldWUoY29udGVudFdpbmRvdyk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0pLAorICAgICAgICBuZXcgQmVuY2htYXJrVGVzdFN0ZXAoJ0RlbGV0aW5nSXRlbXMnLCBm
dW5jdGlvbiAocGFyYW1zLCBjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpIHsKKyAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZJdGVtc1RvQWRkOyBpKyspIHsKKyAg
ICAgICAgICAgICAgICBjb250ZW50RG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmRlc3Ryb3knKS5j
bGljaygpOworICAgICAgICAgICAgICAgIHByb2Nlc3NFbG1Xb3JrUXVldWUoY29udGVudFdpbmRv
dyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pLAorICAgIF0KK30pOworCitTdWl0ZXMucHVz
aCh7CisgICAgbmFtZTogJ0ZsaWdodC1Ub2RvTVZDJywKKyAgICB1cmw6ICd0b2RvbXZjL2RlcGVu
ZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9pbmRleC5odG1sJywKKyAgICBwcmVwYXJlOiBm
dW5jdGlvbiAocnVubmVyLCBjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpIHsKKyAgICAg
ICAgcmV0dXJuIHJ1bm5lci53YWl0Rm9yRWxlbWVudCgnI2FwcElzUmVhZHknKS50aGVuKGZ1bmN0
aW9uIChlbGVtZW50KSB7CisgICAgICAgICAgICB2YXIgbmV3VG9kbyA9IGNvbnRlbnREb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnbmV3LXRvZG8nKTsKKyAgICAgICAgICAgIG5ld1RvZG8uZm9jdXMo
KTsKKyAgICAgICAgICAgIHJldHVybiBuZXdUb2RvOworICAgICAgICB9KTsKKyAgICB9LAorICAg
IHRlc3RzOiBbCisgICAgICAgIG5ldyBCZW5jaG1hcmtUZXN0U3RlcCgnQWRkaW5nJyArIG51bWJl
ck9mSXRlbXNUb0FkZCArICdJdGVtcycsIGZ1bmN0aW9uIChuZXdUb2RvLCBjb250ZW50V2luZG93
LCBjb250ZW50RG9jdW1lbnQpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVt
YmVyT2ZJdGVtc1RvQWRkOyBpKyspIHsKKyAgICAgICAgICAgICAgICBuZXdUb2RvLnZhbHVlID0g
J1NvbWV0aGluZyB0byBkbyAnICsgaTsKKyAgICAgICAgICAgICAgICB0cmlnZ2VyRW50ZXIobmV3
VG9kbywgJ2tleWRvd24nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSksCisgICAgICAgIG5l
dyBCZW5jaG1hcmtUZXN0U3RlcCgnQ29tcGxldGluZ0FsbEl0ZW1zJywgZnVuY3Rpb24gKHBhcmFt
cywgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7CisgICAgICAgICAgICB2YXIgY2hl
Y2tib3hlcyA9IGNvbnRlbnREb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudG9nZ2xlJyk7Cisg
ICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoZWNrYm94ZXMubGVuZ3RoOyBpKyspCisg
ICAgICAgICAgICAgICAgY2hlY2tib3hlc1tpXS5jbGljaygpOworICAgICAgICB9KSwKKyAgICAg
ICAgbmV3IEJlbmNobWFya1Rlc3RTdGVwKCdEZWxldGluZ0l0ZW1zJywgZnVuY3Rpb24gKHBhcmFt
cywgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7CisgICAgICAgICAgICB2YXIgZGVs
ZXRlQnV0dG9ucyA9IGNvbnRlbnREb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZGVzdHJveScp
OworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWxldGVCdXR0b25zLmxlbmd0aDsg
aSsrKQorICAgICAgICAgICAgICAgIGRlbGV0ZUJ1dHRvbnNbaV0uY2xpY2soKTsKKyAgICAgICAg
fSksCisgICAgXQorfSk7CisKK3ZhciBhY3Rpb25Db3VudCA9IDUwOworU3VpdGVzLnB1c2goewor
ICAgIGRpc2FibGVkOiB0cnVlLAorICAgIG5hbWU6ICdGbGlnaHRKUy1NYWlsQ2xpZW50JywKKyAg
ICB1cmw6ICdmbGlnaHRqcy1leGFtcGxlLWFwcC9pbmRleC5odG1sJywKKyAgICBwcmVwYXJlOiBm
dW5jdGlvbiAocnVubmVyLCBjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpIHsKKyAgICAg
ICAgcmV0dXJuIHJ1bm5lci53YWl0Rm9yRWxlbWVudCgnLnNwYW44JykudGhlbihmdW5jdGlvbiAo
ZWxlbWVudCkgeworICAgICAgICAgICAgZWxlbWVudC5mb2N1cygpOworICAgICAgICAgICAgcmV0
dXJuIGVsZW1lbnQ7CisgICAgICAgIH0pOworICAgIH0sCisgICAgdGVzdHM6IFsKKyAgICAgICAg
bmV3IEJlbmNobWFya1Rlc3RTdGVwKCdPcGVuaW5nVGFicycgKyBhY3Rpb25Db3VudCArICdUaW1l
cycsIGZ1bmN0aW9uIChuZXdUb2RvLCBjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpIHsK
KyAgICAgICAgICAgIGNvbnRlbnREb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5ib3gnKS5jbGlj
aygpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhY3Rpb25Db3VudDsgaSsrKSB7
CisgICAgICAgICAgICAgICAgY29udGVudERvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYXRlcicp
LmNsaWNrKCk7CisgICAgICAgICAgICAgICAgY29udGVudERvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdzZW50JykuY2xpY2soKTsKKyAgICAgICAgICAgICAgICBjb250ZW50RG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ3RyYXNoJykuY2xpY2soKTsKKyAgICAgICAgICAgICAgICBjb250ZW50RG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2luYm94JykuY2xpY2soKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSksCisgICAgICAgIG5ldyBCZW5jaG1hcmtUZXN0U3RlcCgnTW92aW5nRW1haWxzJyArIGFj
dGlvbkNvdW50ICsgJ1RpbWVzJywgZnVuY3Rpb24gKG5ld1RvZG8sIGNvbnRlbnRXaW5kb3csIGNv
bnRlbnREb2N1bWVudCkgeworICAgICAgICAgICAgY29udGVudERvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdpbmJveCcpLmNsaWNrKCk7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFj
dGlvbkNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICBjb250ZW50RG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ21haWxfMjEzOScpLmNsaWNrKCk7CisgICAgICAgICAgICAgICAgY29udGVudERv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb3ZlX21haWwnKS5jbGljaygpOworICAgICAgICAgICAg
ICAgIGNvbnRlbnREb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjbW92ZV90b19zZWxlY3RvciAjbGF0
ZXInKS5jbGljaygpOworICAgICAgICAgICAgICAgIGNvbnRlbnREb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnbGF0ZXInKS5jbGljaygpOworICAgICAgICAgICAgICAgIGNvbnRlbnREb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnbWFpbF8yMTM5JykuY2xpY2soKTsKKyAgICAgICAgICAgICAgICBjb250
ZW50RG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vdmVfbWFpbCcpLmNsaWNrKCk7CisgICAgICAg
ICAgICAgICAgY29udGVudERvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNtb3ZlX3RvX3NlbGVjdG9y
ICN0cmFzaCcpLmNsaWNrKCk7CisgICAgICAgICAgICAgICAgY29udGVudERvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCd0cmFzaCcpLmNsaWNrKCk7CisgICAgICAgICAgICAgICAgY29udGVudERvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdtYWlsXzIxMzknKS5jbGljaygpOworICAgICAgICAgICAgICAg
IGNvbnRlbnREb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW92ZV9tYWlsJykuY2xpY2soKTsKKyAg
ICAgICAgICAgICAgICBjb250ZW50RG9jdW1lbnQucXVlcnlTZWxlY3RvcignI21vdmVfdG9fc2Vs
ZWN0b3IgI2luYm94JykuY2xpY2soKTsKKyAgICAgICAgICAgICAgICBjb250ZW50RG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2luYm94JykuY2xpY2soKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSksCisgICAgICAgIG5ldyBCZW5jaG1hcmtUZXN0U3RlcCgnU2VuZGluZycgKyBhY3Rpb25Db3Vu
dCArICdOZXdFbWFpbHMnLCBmdW5jdGlvbiAobmV3VG9kbywgY29udGVudFdpbmRvdywgY29udGVu
dERvY3VtZW50KSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFjdGlvbkNvdW50
OyBpKyspIHsKKyAgICAgICAgICAgICAgICBjb250ZW50RG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J25ld19tYWlsJykuY2xpY2soKTsKKyAgICAgICAgICAgICAgICBjb250ZW50RG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ3JlY2lwaWVudF9zZWxlY3QnKS5zZWxlY3RlZEluZGV4ID0gMTsKKyAgICAg
ICAgICAgICAgICB2YXIgc3ViamVjdCA9IGNvbnRlbnREb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
Y29tcG9zZV9zdWJqZWN0Jyk7CisgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBjb250ZW50
RG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbXBvc2VfbWVzc2FnZScpOworICAgICAgICAgICAg
ICAgIHN1YmplY3QuZm9jdXMoKTsKKyAgICAgICAgICAgICAgICBjb250ZW50V2luZG93LiQoc3Vi
amVjdCkudHJpZ2dlcigna2V5ZG93bicpOworICAgICAgICAgICAgICAgIGNvbnRlbnRXaW5kb3cu
JChzdWJqZWN0KS50ZXh0KCdIZWxsbycpOworICAgICAgICAgICAgICAgIG1lc3NhZ2UuZm9jdXMo
KTsKKyAgICAgICAgICAgICAgICBjb250ZW50V2luZG93LiQobWVzc2FnZSkudHJpZ2dlcigna2V5
ZG93bicpOworICAgICAgICAgICAgICAgIGNvbnRlbnRXaW5kb3cuJChtZXNzYWdlKS50ZXh0KCdI
ZWxsbyxcblxuVGhpcyBpcyBhIHRlc3QgbWVzc2FnZS5cblxuLSBXZWJLaXR0ZW4nKTsKKyAgICAg
ICAgICAgICAgICBjb250ZW50RG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlbmRfY29tcG9zZWQn
KS5jbGljaygpOworICAgICAgICAgICAgfQorICAgICAgICB9KSwKKyAgICBdCit9KTsKZGlmZiAt
LWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2Vz
L3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXIvUkVBRE1FLm1kIGIvV2Vic2l0
ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhci9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWM4YjlmOGVj
NDAxMjQ2NWQxMjA3MjhlM2U3YTZlZjhmNzAzYzc3NQotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNp
dGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXIvUkVBRE1FLm1kCkBAIC0wLDAgKzEsMTEgQEAKKyMg
U3BlZWRvbWV0ZXIgMi4xOiBBbmd1bGFyIDQgVG9kb01WQyBleGFtcGxlCisKKyMjIFRlc3QgbG9j
YWxseQorCisxLiBgbnBtIGluc3RhbGxgCisyLiBgbnBtIHJ1biBzdGFydC1wcm9kYAorMy4gTmF2
aWdhdGUgdG8gYGh0dHA6Ly9sb2NhbGhvc3Q6NDIwMC9gCisKKyMjIEJ1aWxkIChkbyB0aGlzIGJl
Zm9yZSBjb21taXR0aW5nISkKKworMS4gYG5wbSBydW4gYnVpbGQtcHJvZGAKZGlmZiAtLWdpdCBh
L1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9t
dmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXIvZGlzdC9hc3NldHMvY3NzL3RvZG9tdmMt
YXBwLmNzcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXIvZGlzdC9hc3NldHMvY3Nz
L3RvZG9tdmMtYXBwLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMDRmYmRiZGI0ZWQ0YWZlMDlkNTU0M2RiNTIw
ZGM2YTlkZGQ0MWIyCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9y
Zy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
YW5ndWxhci9kaXN0L2Fzc2V0cy9jc3MvdG9kb212Yy1hcHAuY3NzCkBAIC0wLDAgKzEsMzc2IEBA
CitodG1sLAorYm9keSB7CisgICAgbWFyZ2luOiAwOworICAgIHBhZGRpbmc6IDA7Cit9CisKK2J1
dHRvbiB7CisgICAgbWFyZ2luOiAwOworICAgIHBhZGRpbmc6IDA7CisgICAgYm9yZGVyOiAwOwor
ICAgIGJhY2tncm91bmQ6IG5vbmU7CisgICAgZm9udC1zaXplOiAxMDAlOworICAgIHZlcnRpY2Fs
LWFsaWduOiBiYXNlbGluZTsKKyAgICBmb250LWZhbWlseTogaW5oZXJpdDsKKyAgICBmb250LXdl
aWdodDogaW5oZXJpdDsKKyAgICBjb2xvcjogaW5oZXJpdDsKKyAgICAtd2Via2l0LWFwcGVhcmFu
Y2U6IG5vbmU7CisgICAgYXBwZWFyYW5jZTogbm9uZTsKKyAgICAtd2Via2l0LWZvbnQtc21vb3Ro
aW5nOiBhbnRpYWxpYXNlZDsKKyAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxl
OworfQorCitib2R5IHsKKyAgICBmb250OiAxNHB4ICdIZWx2ZXRpY2EgTmV1ZScsIEhlbHZldGlj
YSwgQXJpYWwsIHNhbnMtc2VyaWY7CisgICAgbGluZS1oZWlnaHQ6IDEuNGVtOworICAgIGJhY2tn
cm91bmQ6ICNmNWY1ZjU7CisgICAgY29sb3I6ICM0ZDRkNGQ7CisgICAgbWluLXdpZHRoOiAyMzBw
eDsKKyAgICBtYXgtd2lkdGg6IDU1MHB4OworICAgIG1hcmdpbjogMCBhdXRvOworICAgIC13ZWJr
aXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOworICAgIC1tb3otb3N4LWZvbnQtc21vb3Ro
aW5nOiBncmF5c2NhbGU7CisgICAgZm9udC13ZWlnaHQ6IDMwMDsKK30KKworOmZvY3VzIHsKKyAg
ICBvdXRsaW5lOiAwOworfQorCisuaGlkZGVuIHsKKyAgICBkaXNwbGF5OiBub25lOworfQorCisu
dG9kb2FwcCB7CisgICAgYmFja2dyb3VuZDogI2ZmZjsKKyAgICBtYXJnaW46IDEzMHB4IDAgNDBw
eCAwOworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBib3gtc2hhZG93OiAwIDJweCA0cHgg
MCByZ2JhKDAsIDAsIDAsIDAuMiksCisgICAgICAgICAgICAgICAgMCAyNXB4IDUwcHggMCByZ2Jh
KDAsIDAsIDAsIDAuMSk7Cit9CisKKy50b2RvYXBwIGlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNl
aG9sZGVyIHsKKyAgICBmb250LXN0eWxlOiBpdGFsaWM7CisgICAgZm9udC13ZWlnaHQ6IDMwMDsK
KyAgICBjb2xvcjogI2U2ZTZlNjsKK30KKworLnRvZG9hcHAgaW5wdXQ6Oi1tb3otcGxhY2Vob2xk
ZXIgeworICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKKyAgICBmb250LXdlaWdodDogMzAwOworICAg
IGNvbG9yOiAjZTZlNmU2OworfQorCisudG9kb2FwcCBpbnB1dDo6aW5wdXQtcGxhY2Vob2xkZXIg
eworICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKKyAgICBmb250LXdlaWdodDogMzAwOworICAgIGNv
bG9yOiAjZTZlNmU2OworfQorCisudG9kb2FwcCBoMSB7CisgICAgcG9zaXRpb246IGFic29sdXRl
OworICAgIHRvcDogLTE1NXB4OworICAgIHdpZHRoOiAxMDAlOworICAgIGZvbnQtc2l6ZTogMTAw
cHg7CisgICAgZm9udC13ZWlnaHQ6IDEwMDsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAg
Y29sb3I6IHJnYmEoMTc1LCA0NywgNDcsIDAuMTUpOworICAgIC13ZWJraXQtdGV4dC1yZW5kZXJp
bmc6IG9wdGltaXplTGVnaWJpbGl0eTsKKyAgICAtbW96LXRleHQtcmVuZGVyaW5nOiBvcHRpbWl6
ZUxlZ2liaWxpdHk7CisgICAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKK30K
KworLm5ldy10b2RvLAorLmVkaXQgeworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBtYXJn
aW46IDA7CisgICAgd2lkdGg6IDEwMCU7CisgICAgZm9udC1zaXplOiAyNHB4OworICAgIGZvbnQt
ZmFtaWx5OiBpbmhlcml0OworICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0OworICAgIGxpbmUtaGVp
Z2h0OiAxLjRlbTsKKyAgICBib3JkZXI6IDA7CisgICAgY29sb3I6IGluaGVyaXQ7CisgICAgcGFk
ZGluZzogNnB4OworICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CisgICAgYm94LXNoYWRvdzog
aW5zZXQgMCAtMXB4IDVweCAwIHJnYmEoMCwgMCwgMCwgMC4yKTsKKyAgICBib3gtc2l6aW5nOiBi
b3JkZXItYm94OworICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOworICAg
IC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7Cit9CisKKy5uZXctdG9kbyB7Cisg
ICAgcGFkZGluZzogMTZweCAxNnB4IDE2cHggNjBweDsKKyAgICBib3JkZXI6IG5vbmU7CisgICAg
YmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjAwMyk7CisgICAgYm94LXNoYWRvdzogaW5zZXQg
MCAtMnB4IDFweCByZ2JhKDAsMCwwLDAuMDMpOworfQorCisubWFpbiB7CisgICAgcG9zaXRpb246
IHJlbGF0aXZlOworICAgIHotaW5kZXg6IDI7CisgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNl
NmU2ZTY7Cit9CisKKy50b2dnbGUtYWxsIHsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAg
Ym9yZGVyOiBub25lOyAvKiBNb2JpbGUgU2FmYXJpICovCisgICAgb3BhY2l0eTogMDsKKyAgICBw
b3NpdGlvbjogYWJzb2x1dGU7Cit9CisKKy50b2dnbGUtYWxsICsgbGFiZWwgeworICAgIHdpZHRo
OiA2MHB4OworICAgIGhlaWdodDogMzRweDsKKyAgICBmb250LXNpemU6IDA7CisgICAgcG9zaXRp
b246IGFic29sdXRlOworICAgIHRvcDogLTUycHg7CisgICAgbGVmdDogLTEzcHg7CisgICAgLXdl
YmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7CisgICAgdHJhbnNmb3JtOiByb3RhdGUoOTBk
ZWcpOworfQorCisudG9nZ2xlLWFsbCArIGxhYmVsOmJlZm9yZSB7CisgICAgY29udGVudDogJ+Kd
ryc7CisgICAgZm9udC1zaXplOiAyMnB4OworICAgIGNvbG9yOiAjZTZlNmU2OworICAgIHBhZGRp
bmc6IDEwcHggMjdweCAxMHB4IDI3cHg7Cit9CisKKy50b2dnbGUtYWxsOmNoZWNrZWQgKyBsYWJl
bDpiZWZvcmUgeworICAgIGNvbG9yOiAjNzM3MzczOworfQorCisudG9kby1saXN0IHsKKyAgICBt
YXJnaW46IDA7CisgICAgcGFkZGluZzogMDsKKyAgICBsaXN0LXN0eWxlOiBub25lOworfQorCisu
dG9kby1saXN0IGxpIHsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgZm9udC1zaXplOiAy
NHB4OworICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWRlZGVkOworfQorCisudG9kby1s
aXN0IGxpOmxhc3QtY2hpbGQgeworICAgIGJvcmRlci1ib3R0b206IG5vbmU7Cit9CisKKy50b2Rv
LWxpc3QgbGkuZWRpdGluZyB7CisgICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKKyAgICBwYWRkaW5n
OiAwOworfQorCisudG9kby1saXN0IGxpLmVkaXRpbmcgLmVkaXQgeworICAgIGRpc3BsYXk6IGJs
b2NrOworICAgIHdpZHRoOiA1MDZweDsKKyAgICBwYWRkaW5nOiAxMnB4IDE2cHg7CisgICAgbWFy
Z2luOiAwIDAgMCA0M3B4OworfQorCisudG9kby1saXN0IGxpLmVkaXRpbmcgLnZpZXcgeworICAg
IGRpc3BsYXk6IG5vbmU7Cit9CisKKy50b2RvLWxpc3QgbGkgLnRvZ2dsZSB7CisgICAgdGV4dC1h
bGlnbjogY2VudGVyOworICAgIHdpZHRoOiA0MHB4OworICAgIC8qIGF1dG8sIHNpbmNlIG5vbi1X
ZWJLaXQgYnJvd3NlcnMgZG9lc24ndCBzdXBwb3J0IGlucHV0IHN0eWxpbmcgKi8KKyAgICBoZWln
aHQ6IGF1dG87CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHRvcDogMDsKKyAgICBib3R0
b206IDA7CisgICAgbWFyZ2luOiBhdXRvIDA7CisgICAgYm9yZGVyOiBub25lOyAvKiBNb2JpbGUg
U2FmYXJpICovCisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOworICAgIGFwcGVhcmFuY2U6
IG5vbmU7Cit9CisKKy50b2RvLWxpc3QgbGkgLnRvZ2dsZSB7CisgICAgb3BhY2l0eTogMDsKK30K
KworLnRvZG8tbGlzdCBsaSAudG9nZ2xlICsgbGFiZWwgeworICAgIC8qCisgICAgICAgIEZpcmVm
b3ggcmVxdWlyZXMgYCNgIHRvIGJlIGVzY2FwZWQgLSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEu
b3JnL3Nob3dfYnVnLmNnaT9pZD05MjI0MzMKKyAgICAgICAgSUUgYW5kIEVkZ2UgcmVxdWlyZXMg
KmV2ZXJ5dGhpbmcqIHRvIGJlIGVzY2FwZWQgdG8gcmVuZGVyLCBzbyB3ZSBkbyB0aGF0IGluc3Rl
YWQgb2YganVzdCB0aGUgYCNgIC0gaHR0cHM6Ly9kZXZlbG9wZXIubWljcm9zb2Z0LmNvbS9lbi11
cy9taWNyb3NvZnQtZWRnZS9wbGF0Zm9ybS9pc3N1ZXMvNzE1NzQ1OS8KKyAgICAqLworICAgIGJh
Y2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsJTNDc3ZnJTIweG1s
bnMlM0QlMjJodHRwJTNBLy93d3cudzMub3JnLzIwMDAvc3ZnJTIyJTIwd2lkdGglM0QlMjI0MCUy
MiUyMGhlaWdodCUzRCUyMjQwJTIyJTIwdmlld0JveCUzRCUyMi0xMCUyMC0xOCUyMDEwMCUyMDEz
NSUyMiUzRSUzQ2NpcmNsZSUyMGN4JTNEJTIyNTAlMjIlMjBjeSUzRCUyMjUwJTIyJTIwciUzRCUy
MjUwJTIyJTIwZmlsbCUzRCUyMm5vbmUlMjIlMjBzdHJva2UlM0QlMjIlMjNlZGVkZWQlMjIlMjBz
dHJva2Utd2lkdGglM0QlMjIzJTIyLyUzRSUzQy9zdmclM0UnKTsKKyAgICBiYWNrZ3JvdW5kLXJl
cGVhdDogbm8tcmVwZWF0OworICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBsZWZ0Owor
fQorCisudG9kby1saXN0IGxpIC50b2dnbGU6Y2hlY2tlZCArIGxhYmVsIHsKKyAgICBiYWNrZ3Jv
dW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LCUzQ3N2ZyUyMHhtbG5zJTNE
JTIyaHR0cCUzQS8vd3d3LnczLm9yZy8yMDAwL3N2ZyUyMiUyMHdpZHRoJTNEJTIyNDAlMjIlMjBo
ZWlnaHQlM0QlMjI0MCUyMiUyMHZpZXdCb3glM0QlMjItMTAlMjAtMTglMjAxMDAlMjAxMzUlMjIl
M0UlM0NjaXJjbGUlMjBjeCUzRCUyMjUwJTIyJTIwY3klM0QlMjI1MCUyMiUyMHIlM0QlMjI1MCUy
MiUyMGZpbGwlM0QlMjJub25lJTIyJTIwc3Ryb2tlJTNEJTIyJTIzYmRkYWQ1JTIyJTIwc3Ryb2tl
LXdpZHRoJTNEJTIyMyUyMi8lM0UlM0NwYXRoJTIwZmlsbCUzRCUyMiUyMzVkYzJhZiUyMiUyMGQl
M0QlMjJNNzIlMjAyNUw0MiUyMDcxJTIwMjclMjA1NmwtNCUyMDQlMjAyMCUyMDIwJTIwMzQtNTJ6
JTIyLyUzRSUzQy9zdmclM0UnKTsKK30KKworLnRvZG8tbGlzdCBsaSBsYWJlbCB7CisgICAgd29y
ZC1icmVhazogYnJlYWstYWxsOworICAgIHBhZGRpbmc6IDE1cHggMTVweCAxNXB4IDYwcHg7Cisg
ICAgZGlzcGxheTogYmxvY2s7CisgICAgbGluZS1oZWlnaHQ6IDEuMjsKKyAgICB0cmFuc2l0aW9u
OiBjb2xvciAwLjRzOworfQorCisudG9kby1saXN0IGxpLmNvbXBsZXRlZCBsYWJlbCB7CisgICAg
Y29sb3I6ICNkOWQ5ZDk7CisgICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Cit9CisK
Ky50b2RvLWxpc3QgbGkgLmRlc3Ryb3kgeworICAgIGRpc3BsYXk6IG5vbmU7CisgICAgcG9zaXRp
b246IGFic29sdXRlOworICAgIHRvcDogMDsKKyAgICByaWdodDogMTBweDsKKyAgICBib3R0b206
IDA7CisgICAgd2lkdGg6IDQwcHg7CisgICAgaGVpZ2h0OiA0MHB4OworICAgIG1hcmdpbjogYXV0
byAwOworICAgIGZvbnQtc2l6ZTogMzBweDsKKyAgICBjb2xvcjogI2NjOWE5YTsKKyAgICBtYXJn
aW4tYm90dG9tOiAxMXB4OworICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMnMgZWFzZS1vdXQ7Cit9
CisKKy50b2RvLWxpc3QgbGkgLmRlc3Ryb3k6aG92ZXIgeworICAgIGNvbG9yOiAjYWY1YjVlOwor
fQorCisudG9kby1saXN0IGxpIC5kZXN0cm95OmFmdGVyIHsKKyAgICBjb250ZW50OiAnw5cnOwor
fQorCisudG9kby1saXN0IGxpOmhvdmVyIC5kZXN0cm95IHsKKyAgICBkaXNwbGF5OiBibG9jazsK
K30KKworLnRvZG8tbGlzdCBsaSAuZWRpdCB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworLnRv
ZG8tbGlzdCBsaS5lZGl0aW5nOmxhc3QtY2hpbGQgeworICAgIG1hcmdpbi1ib3R0b206IC0xcHg7
Cit9CisKKy5mb290ZXIgeworICAgIGNvbG9yOiAjNzc3OworICAgIHBhZGRpbmc6IDEwcHggMTVw
eDsKKyAgICBoZWlnaHQ6IDIwcHg7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgIGJvcmRl
ci10b3A6IDFweCBzb2xpZCAjZTZlNmU2OworfQorCisuZm9vdGVyOmJlZm9yZSB7CisgICAgY29u
dGVudDogJyc7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHJpZ2h0OiAwOworICAgIGJv
dHRvbTogMDsKKyAgICBsZWZ0OiAwOworICAgIGhlaWdodDogNTBweDsKKyAgICBvdmVyZmxvdzog
aGlkZGVuOworICAgIGJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMiksCisg
ICAgICAgICAgICAgICAgMCA4cHggMCAtM3B4ICNmNmY2ZjYsCisgICAgICAgICAgICAgICAgMCA5
cHggMXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLAorICAgICAgICAgICAgICAgIDAgMTZweCAw
IC02cHggI2Y2ZjZmNiwKKyAgICAgICAgICAgICAgICAwIDE3cHggMnB4IC02cHggcmdiYSgwLCAw
LCAwLCAwLjIpOworfQorCisudG9kby1jb3VudCB7CisgICAgZmxvYXQ6IGxlZnQ7CisgICAgdGV4
dC1hbGlnbjogbGVmdDsKK30KKworLnRvZG8tY291bnQgc3Ryb25nIHsKKyAgICBmb250LXdlaWdo
dDogMzAwOworfQorCisuZmlsdGVycyB7CisgICAgbWFyZ2luOiAwOworICAgIHBhZGRpbmc6IDA7
CisgICAgbGlzdC1zdHlsZTogbm9uZTsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgcmln
aHQ6IDA7CisgICAgbGVmdDogMDsKK30KKworLmZpbHRlcnMgbGkgeworICAgIGRpc3BsYXk6IGlu
bGluZTsKK30KKworLmZpbHRlcnMgbGkgYSB7CisgICAgY29sb3I6IGluaGVyaXQ7CisgICAgbWFy
Z2luOiAzcHg7CisgICAgcGFkZGluZzogM3B4IDdweDsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5v
bmU7CisgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CisgICAgYm9yZGVyLXJhZGl1
czogM3B4OworfQorCisuZmlsdGVycyBsaSBhOmhvdmVyIHsKKyAgICBib3JkZXItY29sb3I6IHJn
YmEoMTc1LCA0NywgNDcsIDAuMSk7Cit9CisKKy5maWx0ZXJzIGxpIGEuc2VsZWN0ZWQgeworICAg
IGJvcmRlci1jb2xvcjogcmdiYSgxNzUsIDQ3LCA0NywgMC4yKTsKK30KKworLmNsZWFyLWNvbXBs
ZXRlZCwKK2h0bWwgLmNsZWFyLWNvbXBsZXRlZDphY3RpdmUgeworICAgIGZsb2F0OiByaWdodDsK
KyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgbGluZS1oZWlnaHQ6IDIwcHg7CisgICAgdGV4
dC1kZWNvcmF0aW9uOiBub25lOworICAgIGN1cnNvcjogcG9pbnRlcjsKK30KKworLmNsZWFyLWNv
bXBsZXRlZDpob3ZlciB7CisgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cit9CisKKy5p
bmZvIHsKKyAgICBtYXJnaW46IDY1cHggYXV0byAwOworICAgIGNvbG9yOiAjYmZiZmJmOworICAg
IGZvbnQtc2l6ZTogMTBweDsKKyAgICB0ZXh0LXNoYWRvdzogMCAxcHggMCByZ2JhKDI1NSwgMjU1
LCAyNTUsIDAuNSk7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworfQorCisuaW5mbyBwIHsKKyAg
ICBsaW5lLWhlaWdodDogMTsKK30KKworLmluZm8gYSB7CisgICAgY29sb3I6IGluaGVyaXQ7Cisg
ICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgIGZvbnQtd2VpZ2h0OiA0MDA7Cit9CisKKy5p
bmZvIGE6aG92ZXIgeworICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCisvKgor
ICAgIEhhY2sgdG8gcmVtb3ZlIGJhY2tncm91bmQgZnJvbSBNb2JpbGUgU2FmYXJpLgorICAgIENh
bid0IHVzZSBpdCBnbG9iYWxseSBzaW5jZSBpdCBkZXN0cm95cyBjaGVja2JveGVzIGluIEZpcmVm
b3gKKyovCitAbWVkaWEgc2NyZWVuIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlv
OjApIHsKKyAgICAudG9nZ2xlLWFsbCwKKyAgICAudG9kby1saXN0IGxpIC50b2dnbGUgeworICAg
ICAgICBiYWNrZ3JvdW5kOiBub25lOworICAgIH0KKworICAgIC50b2RvLWxpc3QgbGkgLnRvZ2ds
ZSB7CisgICAgICAgIGhlaWdodDogNDBweDsKKyAgICB9Cit9CisKK0BtZWRpYSAobWF4LXdpZHRo
OiA0MzBweCkgeworICAgIC5mb290ZXIgeworICAgICAgICBoZWlnaHQ6IDUwcHg7CisgICAgfQor
CisgICAgLmZpbHRlcnMgeworICAgICAgICBib3R0b206IDEwcHg7CisgICAgfQorfQpkaWZmIC0t
Z2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhci9kaXN0L2Fzc2V0cy9jc3MvdG9k
b212Yy1jb21tb24uY3NzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIu
MS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhci9kaXN0L2Fz
c2V0cy9jc3MvdG9kb212Yy1jb21tb24uY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRkMjVkM2M4NGFjNmM2YWVm
MjZiOTY4M2EyYmMxMGM2MWY5NjBjOGYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93
c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVy
ZS1leGFtcGxlcy9hbmd1bGFyL2Rpc3QvYXNzZXRzL2Nzcy90b2RvbXZjLWNvbW1vbi5jc3MKQEAg
LTAsMCArMSwxNDEgQEAKK2hyIHsKKyAgICBtYXJnaW46IDIwcHggMDsKKyAgICBib3JkZXI6IDA7
CisgICAgYm9yZGVyLXRvcDogMXB4IGRhc2hlZCAjYzVjNWM1OworICAgIGJvcmRlci1ib3R0b206
IDFweCBkYXNoZWQgI2Y3ZjdmNzsKK30KKworLmxlYXJuIGEgeworICAgIGZvbnQtd2VpZ2h0OiBu
b3JtYWw7CisgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgIGNvbG9yOiAjYjgzZjQ1Owor
fQorCisubGVhcm4gYTpob3ZlciB7CisgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cisg
ICAgY29sb3I6ICM3ODdlN2U7Cit9CisKKy5sZWFybiBoMywKKy5sZWFybiBoNCwKKy5sZWFybiBo
NSB7CisgICAgbWFyZ2luOiAxMHB4IDA7CisgICAgZm9udC13ZWlnaHQ6IDUwMDsKKyAgICBsaW5l
LWhlaWdodDogMS4yOworICAgIGNvbG9yOiAjMDAwOworfQorCisubGVhcm4gaDMgeworICAgIGZv
bnQtc2l6ZTogMjRweDsKK30KKworLmxlYXJuIGg0IHsKKyAgICBmb250LXNpemU6IDE4cHg7Cit9
CisKKy5sZWFybiBoNSB7CisgICAgbWFyZ2luLWJvdHRvbTogMDsKKyAgICBmb250LXNpemU6IDE0
cHg7Cit9CisKKy5sZWFybiB1bCB7CisgICAgcGFkZGluZzogMDsKKyAgICBtYXJnaW46IDAgMCAz
MHB4IDI1cHg7Cit9CisKKy5sZWFybiBsaSB7CisgICAgbGluZS1oZWlnaHQ6IDIwcHg7Cit9CisK
Ky5sZWFybiBwIHsKKyAgICBmb250LXNpemU6IDE1cHg7CisgICAgZm9udC13ZWlnaHQ6IDMwMDsK
KyAgICBsaW5lLWhlaWdodDogMS4zOworICAgIG1hcmdpbi10b3A6IDA7CisgICAgbWFyZ2luLWJv
dHRvbTogMDsKK30KKworI2lzc3VlLWNvdW50IHsKKyAgICBkaXNwbGF5OiBub25lOworfQorCisu
cXVvdGUgeworICAgIGJvcmRlcjogbm9uZTsKKyAgICBtYXJnaW46IDIwcHggMCA2MHB4IDA7Cit9
CisKKy5xdW90ZSBwIHsKKyAgICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKKy5xdW90ZSBwOmJl
Zm9yZSB7CisgICAgY29udGVudDogJ+KAnCc7CisgICAgZm9udC1zaXplOiA1MHB4OworICAgIG9w
YWNpdHk6IC4xNTsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAtMjBweDsKKyAg
ICBsZWZ0OiAzcHg7Cit9CisKKy5xdW90ZSBwOmFmdGVyIHsKKyAgICBjb250ZW50OiAn4oCdJzsK
KyAgICBmb250LXNpemU6IDUwcHg7CisgICAgb3BhY2l0eTogLjE1OworICAgIHBvc2l0aW9uOiBh
YnNvbHV0ZTsKKyAgICBib3R0b206IC00MnB4OworICAgIHJpZ2h0OiAzcHg7Cit9CisKKy5xdW90
ZSBmb290ZXIgeworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICBib3R0b206IC00MHB4Owor
ICAgIHJpZ2h0OiAwOworfQorCisucXVvdGUgZm9vdGVyIGltZyB7CisgICAgYm9yZGVyLXJhZGl1
czogM3B4OworfQorCisucXVvdGUgZm9vdGVyIGEgeworICAgIG1hcmdpbi1sZWZ0OiA1cHg7Cisg
ICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKK30KKworLnNwZWVjaC1idWJibGUgeworICAgIHBv
c2l0aW9uOiByZWxhdGl2ZTsKKyAgICBwYWRkaW5nOiAxMHB4OworICAgIGJhY2tncm91bmQ6IHJn
YmEoMCwgMCwgMCwgLjA0KTsKKyAgICBib3JkZXItcmFkaXVzOiA1cHg7Cit9CisKKy5zcGVlY2gt
YnViYmxlOmFmdGVyIHsKKyAgICBjb250ZW50OiAnJzsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7
CisgICAgdG9wOiAxMDAlOworICAgIHJpZ2h0OiAzMHB4OworICAgIGJvcmRlcjogMTNweCBzb2xp
ZCB0cmFuc3BhcmVudDsKKyAgICBib3JkZXItdG9wLWNvbG9yOiByZ2JhKDAsIDAsIDAsIC4wNCk7
Cit9CisKKy5sZWFybi1iYXIgPiAubGVhcm4geworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAg
ICB3aWR0aDogMjcycHg7CisgICAgdG9wOiA4cHg7CisgICAgbGVmdDogLTMwMHB4OworICAgIHBh
ZGRpbmc6IDEwcHg7CisgICAgYm9yZGVyLXJhZGl1czogNXB4OworICAgIGJhY2tncm91bmQtY29s
b3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgLjYpOworICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IGxl
ZnQ7CisgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogNTAwbXM7Cit9CisKK0BtZWRpYSAobWluLXdp
ZHRoOiA4OTlweCkgeworICAgIC5sZWFybi1iYXIgeworICAgICAgICB3aWR0aDogYXV0bzsKKyAg
ICAgICAgcGFkZGluZy1sZWZ0OiAzMDBweDsKKyAgICB9CisKKyAgICAubGVhcm4tYmFyID4gLmxl
YXJuIHsKKyAgICAgICAgbGVmdDogOHB4OworICAgIH0KK30KZGlmZiAtLWdpdCBhL1dlYnNpdGVz
L2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXIvZGlzdC9mYXZpY29uLmljbyBiL1dlYnNpdGVzL2Jyb3dz
ZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL2FuZ3VsYXIvZGlzdC9mYXZpY29uLmljbwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MDgxYzdjZWFm
MmJlMDhiZjU5MDEwMTU4YzU4NjE3MGQ5ZDJkNTE3CkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCA1
NDMwCnpjbWMoamV7NTQjNnZ2Q29BSTNpKkc1JSRVNyFzQTN3dE1aJGZINlY5Q2A9ZVhHSmJAUjEl
KElfe3ZuWnRwRHs2bgp6NVBse0RteHpCRGJyQj59YDkwZTEybThUKjM2V29lRExBJlNEX2h3e0he
d00hY2xfUldjVkEhSSt4ODdlZTk3NTsKekA0a0RePWJZUG4mcG1HQCgrSlpgcnFRRUt4Vzx9Unpo
V31JIXx1bE49Zm1qVmlAeHtwJGNDYCk1JGEhKVgmVTxECnpGQ3JRdGxQc2tyZX1kQjdvTUNwPiti
bEtOdk41dGc9dUx2dUxudXFSTTtZYypzd2lleHNvaCNYUE51ezlGI2NgRwp6UUxle3lXQShZNig7
Pnl8LWU8Ujc4bHxeYHZINmZ0LW1FclNHfllgVFpGMnFtMT1XPU1OZF4yVjMpbjJ4SWw9flgKemNR
OVZqekhXMzh0eXxyWnorYmtjUigtYylgd2JxQyNsMENGPmZBeTExazwwOShAT28xQjJAMGBQdFpT
a3FLJiR7CnpnRVl9YFdAdHslPzl1NXJGP31ZN09MezMzOGw8TSVLfi0rdzRpSi0yQ18+KkpZI1Ah
JU1WUVlAb3FuSXRwWn0/cwp6IXI/Kmt3dVJ7QUBqZzJDaGxmMF57cSo+OG41SXJ+WVdmKndtc2g3
QjUmRXBIZmQ1QHhWYWomZ3FzZHVpXnNweUwKekJ8a1VvYmxHb083RyhNdUtUZmE5P3BHSDBAUVBe
YiMhbE0xeUhXTGgqMmlxI2BDMVRkcm5PLWQjP09oQFhWMkhLCnpLQXtgZW97LS1eSyZNVzY2TGdz
a3Rmdm4jY0NBYyoofXFzZmhydk9qTUdMRT9gZEhWaXB1MUozS2dyJWc/Y05hOAp6KXBrbUM4REdI
fmZHK2RscnAoNV4tUUJlRXZrT3Z2I3E3TUJWTHRtMm9EXiRsSlp4LS1fPUsmVHRkPS1rcngoQmIK
emNFb0tKZGFAUyElJUBgUC0jIyQ+KnUlVCptaCtRalZAKVFhPU1rMT8jekxrK000dEl0JX13YWdU
ezU8aktFJHpXCnpmXnY3ald+dVVFLSVtQjdeQ0hIOFRMMXxfdXJJfmhLVFRMTzRlO1p3N3J+SSgw
NTJRVCFucT1rM0JLNHJXbntQMQp6bTFiSG16YjNRc0VQZGRPZmVodHMhNCsqaGU8LUowVHBfSCpv
ektEKEkkKnZFSVJjNXZMM2tkQHB7JGtqTUlLUXMKejxwSTAoVnU3JH12PDJmRU5IQ1ZBPVpnRShl
QnA9OWE7X09gQmtmclUtY20/VWRoWVB9K3opaykqNHdRT1cwSzdTCnp4TFY5aDdQZUYyZE92TWct
PkolIXRYQUU7cntAPWJiJW5OVnh2SStDKyR0PyFWSkAwZEBISXlNSlRJe3ZFdzBVbAp6ZShoYSFl
JnFBTmJUTDFabmVObDQ1dD0jT3Q/P0MwTUhqamdZOCUqbUdpc058UzYlZzM7SGx4I2ZNTmNMPDg3
TVcKelo+Nm1vbzFZRD9QIWZKI0piKDQpX2NjNTBYNW4wS29EWWZkUG9MXmlWYGsmb3tMUHlhb3FN
cWs5MndWTSNfTzBsCnowOSQoQS1EK2dWSWxxNFRBJnsxVEBCc1VIYEJtPXIjbCRaNTFKPEEmQmpX
aWJAJHN8Z1pKUXFtYkpRRCVwbXVxcgp6bFJpM3IlbzhJJHM3YmBOZHw2ISp7KUlJWGV2T1F1P1Aj
VHJgKGFfeWFDYFozbXoyJXMwSipWUCFvTXJ5diVhR0oKekolK2hyO0pVUjlOJT1OUVVBY3N4SDFF
dih6PUp3NXgqM1pQXnc2NEI5VDE7ZCRGTiN2fEsze3lPP1UzfXAjfkNYCnpRZXVsNUowUy1rJlFQ
LVdTXnV4VV5sSjlxUEVraWsqTUNobHVqfDtMRXR+I0k4YXRiUm48TkxNVnpZTShQKE1jXgp6Kz1W
Y2YhfGEpRCpiQUokQik+LVUmRjMyK2hmVVAtaUxvPWpnN1hteStXTHE2X3RXdiZgd0RseiNgJilK
cH5pUWYKelpQKXR1Pn1wSUlKS3V3KyQmdH1HUXVxTWQlWj4wP3QlJkJNJlc8b20mYiZ3U15VaTVg
eTBgYktgZHo+b140UF5ZCnopYzZoXmYyUj5YOCp9cXxiYmxBRj9AOyU/Mj4keStjTVFiTntYJCle
Uj52PGolSE9vWEZMM25GLSRBU2l6QXU3TAp6QX5hKUtecWRpS0NUc09NMFBGXiV7Sz1VdTxaRVpr
Qy15cGVCPnROcV81QUJ8ME41VSpkXlQ/WDl7eFFuSlllVXsKem9aTCNvYkk7flBwOTVmMWAlWDNE
JE1oKjReP08/SVR+N0hxbFdndWV6bWc/WWJxfDc+cVEoQHBQSGJFOVY/ZnwoCnorMHhvISNtQE5w
OVBsanN5eEJZLVVBKntVKmxhIzhXejJzT3w0OF8tNXQ4JV8hbj9TJHpsR2UrTkElP3ZteGpTLQp6
SEU1TzNaYXJVPVh9JDc+O09rcChVV1hKeEklR19KLUBJSDslNSNSdCQoV1VYPzYqVXghSVJkJGRM
UDYrU21Qbj0Kejh6am00akdqTjc3MlJ7RkdrWHdjTnY4R0JjWkkjQFkybXtSTkZfdzgoWiVeQSoh
YlMqIX1zNnNoKk5uVVJ5dGt5Cmh1bVc7Kmc3UismfExlZHZjLTxNKWJVRXF0V2Jid1YzaXd9Y3t7
dUV1QDdAM2EKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jy
b3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL2FuZ3VsYXIvZGlzdC9pbmRleC5odG1sIGIvV2Vic2l0ZXMvYnJvd3NlcmJl
bmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvYW5ndWxhci9kaXN0L2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGFjYmUwNGM3MTNlYjQx
N2VmZTRmOTZjNzVjMWRkMTBmNmIxYjgxYwotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jy
b3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL2FuZ3VsYXIvZGlzdC9pbmRleC5odG1sCkBAIC0wLDAgKzEsMTUgQEAKKzwh
ZG9jdHlwZSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgor
ICA8dGl0bGU+QW5ndWxhciA0IFRvZG9NVkMgZXhhbXBsZTwvdGl0bGU+CisgIDxtZXRhIG5hbWU9
InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSI+
CisgIDxsaW5rIHJlbD0iaWNvbiIgdHlwZT0iaW1hZ2UveC1pY29uIiBocmVmPSJmYXZpY29uLmlj
byI+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iYXNzZXRzL2Nzcy90b2RvbXZjLWNv
bW1vbi5jc3MiPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImFzc2V0cy9jc3MvdG9k
b212Yy1hcHAuY3NzIj4KKzxsaW5rIGhyZWY9InN0eWxlcy5kNDFkOGNkOThmMDBiMjA0ZTk4MC5i
dW5kbGUuY3NzIiByZWw9InN0eWxlc2hlZXQiLz48L2hlYWQ+Cis8Ym9keT4KKyAgPGFwcC1yb290
PkxvYWRpbmcuLi48L2FwcC1yb290PgorICA8IS0tIENyZWRpdHM6IEFkZHkgT3NtYW5pIC0tPgor
PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaW5saW5lLjNiN2Y4Y2UyZTZiYzJm
NzdkZDgzLmJ1bmRsZS5qcyI+PC9zY3JpcHQ+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQi
IHNyYz0icG9seWZpbGxzLjNhMmFlZDgyYTBjOWIyNGU2NTg1LmJ1bmRsZS5qcyI+PC9zY3JpcHQ+
PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0idmVuZG9yLjlhMjk2YmJjMTkwOTgz
MGE5MTA2LmJ1bmRsZS5qcyI+PC9zY3JpcHQ+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQi
IHNyYz0ibWFpbi5mMWM1ZDMzYTY5NTBjMzM1MDY0ZC5idW5kbGUuanMiPjwvc2NyaXB0PjwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRv
bWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXIv
ZGlzdC9pbmxpbmUuM2I3ZjhjZTJlNmJjMmY3N2RkODMuYnVuZGxlLmpzIGIvV2Vic2l0ZXMvYnJv
d3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1
cmUtZXhhbXBsZXMvYW5ndWxhci9kaXN0L2lubGluZS4zYjdmOGNlMmU2YmMyZjc3ZGQ4My5idW5k
bGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNDVjOTFiMDFkYWI1ZDBlZTRiNjMxMmQ0ZjJmMWJlZTVmODE3MTZj
ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0
ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXIvZGlz
dC9pbmxpbmUuM2I3ZjhjZTJlNmJjMmY3N2RkODMuYnVuZGxlLmpzCkBAIC0wLDAgKzEgQEAKKyFm
dW5jdGlvbihlKXtmdW5jdGlvbiByKG4pe2lmKHRbbl0pcmV0dXJuIHRbbl0uZXhwb3J0czt2YXIg
bz10W25dPXtpOm4sbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVtuXS5jYWxsKG8uZXhwb3J0cyxv
LG8uZXhwb3J0cyxyKSxvLmw9ITAsby5leHBvcnRzfXZhciBuPXdpbmRvdy53ZWJwYWNrSnNvbnA7
d2luZG93LndlYnBhY2tKc29ucD1mdW5jdGlvbih0LGMsYSl7Zm9yKHZhciB1LGksZixsPTAscz1b
XTtsPHQubGVuZ3RoO2wrKylpPXRbbF0sb1tpXSYmcy5wdXNoKG9baV1bMF0pLG9baV09MDtmb3Io
dSBpbiBjKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjLHUpJiYoZVt1XT1j
W3VdKTtmb3IobiYmbih0LGMsYSk7cy5sZW5ndGg7KXMuc2hpZnQoKSgpO2lmKGEpZm9yKGw9MDts
PGEubGVuZ3RoO2wrKylmPXIoci5zPWFbbF0pO3JldHVybiBmfTt2YXIgdD17fSxvPXs0OjB9O3Iu
ZT1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7Yy5vbmVycm9yPWMub25sb2FkPW51bGwsY2xlYXJU
aW1lb3V0KGEpO3ZhciByPW9bZV07MCE9PXImJihyJiZyWzFdKG5ldyBFcnJvcigiTG9hZGluZyBj
aHVuayAiK2UrIiBmYWlsZWQuIikpLG9bZV09dm9pZCAwKX1pZigwPT09b1tlXSlyZXR1cm4gUHJv
bWlzZS5yZXNvbHZlKCk7aWYob1tlXSlyZXR1cm4gb1tlXVsyXTt2YXIgdD1kb2N1bWVudC5nZXRF
bGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2Ny
aXB0Iik7Yy50eXBlPSJ0ZXh0L2phdmFzY3JpcHQiLGMuY2hhcnNldD0idXRmLTgiLGMuYXN5bmM9
ITAsYy50aW1lb3V0PTEyZTQsci5uYyYmYy5zZXRBdHRyaWJ1dGUoIm5vbmNlIixyLm5jKSxjLnNy
Yz1yLnArIiIrZSsiLiIrezA6IjNhMmFlZDgyYTBjOWIyNGU2NTg1IiwxOiJmMWM1ZDMzYTY5NTBj
MzM1MDY0ZCIsMjoiYTYzMjA1YWU0YjU1YjE4MGI1OGMifVtlXSsiLmNodW5rLmpzIjt2YXIgYT1z
ZXRUaW1lb3V0KG4sMTJlNCk7Yy5vbmVycm9yPWMub25sb2FkPW47dmFyIHU9bmV3IFByb21pc2Uo
ZnVuY3Rpb24ocixuKXtvW2VdPVtyLG5dfSk7cmV0dXJuIG9bZV1bMl09dSx0LmFwcGVuZENoaWxk
KGMpLHV9LHIubT1lLHIuYz10LHIuaT1mdW5jdGlvbihlKXtyZXR1cm4gZX0sci5kPWZ1bmN0aW9u
KGUsbix0KXtyLm8oZSxuKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7Y29uZmlndXJhYmxl
OiExLGVudW1lcmFibGU6ITAsZ2V0OnR9KX0sci5uPWZ1bmN0aW9uKGUpe3ZhciBuPWUmJmUuX19l
c01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBlLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIGV9
O3JldHVybiByLmQobiwiYSIsbiksbn0sci5vPWZ1bmN0aW9uKGUscil7cmV0dXJuIE9iamVjdC5w
cm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpfSxyLnA9IiIsci5vZT1mdW5jdGlvbihl
KXt0aHJvdyBjb25zb2xlLmVycm9yKGUpLGV9fShbXSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
ZmlsZQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIu
MS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhci9kaXN0L21h
aW4uZjFjNWQzM2E2OTUwYzMzNTA2NGQuYnVuZGxlLmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNo
Lm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvYW5ndWxhci9kaXN0L21haW4uZjFjNWQzM2E2OTUwYzMzNTA2NGQuYnVuZGxlLmpzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmVmZGIyYmE0ZTE1YzFiYjYwMDllMmY0NzdlNTBlMmIzNmRlYjZmZGIKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyL2Rpc3QvbWFpbi5mMWM1
ZDMzYTY5NTBjMzM1MDY0ZC5idW5kbGUuanMKQEAgLTAsMCArMSBAQAord2VicGFja0pzb25wKFsx
LDRdLHsiL2ZjVyI6ZnVuY3Rpb24obixsKXtmdW5jdGlvbiB0KG4pe3Rocm93IG5ldyBFcnJvcigi
Q2Fubm90IGZpbmQgbW9kdWxlICciK24rIicuIil9dC5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuW119
LHQucmVzb2x2ZT10LG4uZXhwb3J0cz10LHQuaWQ9Ii9mY1cifSwwOmZ1bmN0aW9uKG4sbCx0KXtu
LmV4cG9ydHM9dCgieDM1YiIpfSwiMUE4MCI6ZnVuY3Rpb24obixsLHQpeyJ1c2Ugc3RyaWN0Ijtm
dW5jdGlvbiB1KG4pe3JldHVybiByLl8xNygwLFsobigpKCksci5fMTgoMCxudWxsLG51bGwsMTEs
ImxpIixbXSxbWzIsImNvbXBsZXRlZCIsbnVsbF1dLG51bGwsbnVsbCxudWxsLG51bGwpKSwobigp
KCksci5fMTkobnVsbCxbIlxuICAgICAgICAiXSkpLChuKCkoKSxyLl8xOCgwLG51bGwsbnVsbCw4
LCJkaXYiLFtbImNsYXNzIiwidmlldyJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobigp
KCksci5fMTkobnVsbCxbIlxuICAgICAgICAgICJdKSksKG4oKSgpLHIuXzE4KDAsbnVsbCxudWxs
LDAsImlucHV0IixbWyJjbGFzcyIsInRvZ2dsZSJdLFsidHlwZSIsImNoZWNrYm94Il1dLFtbOCwi
Y2hlY2tlZCIsMF1dLFtbbnVsbCwiY2xpY2siXV0sZnVuY3Rpb24obixsLHQpe3ZhciB1PSEwLG89
bi5jb21wb25lbnQ7aWYoImNsaWNrIj09PWwpe3U9ITEhPT1vLnRvZ2dsZVRvZG9Db21wbGV0ZShu
LmNvbnRleHQuJGltcGxpY2l0KSYmdX1yZXR1cm4gdX0sbnVsbCxudWxsKSksKG4oKSgpLHIuXzE5
KG51bGwsWyJcbiAgICAgICAgICAiXSkpLChuKCkoKSxyLl8xOCgwLG51bGwsbnVsbCwxLCJsYWJl
bCIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKG4oKSgpLHIuXzE5KG51bGwsWyIiLCIi
XSkpLChuKCkoKSxyLl8xOShudWxsLFsiXG4gICAgICAgICAgIl0pKSwobigpKCksci5fMTgoMCxu
dWxsLG51bGwsMCwiYnV0dG9uIixbWyJjbGFzcyIsImRlc3Ryb3kiXV0sbnVsbCxbW251bGwsImNs
aWNrIl1dLGZ1bmN0aW9uKG4sbCx0KXt2YXIgdT0hMCxvPW4uY29tcG9uZW50O2lmKCJjbGljayI9
PT1sKXt1PSExIT09by5yZW1vdmVUb2RvKG4uY29udGV4dC4kaW1wbGljaXQpJiZ1fXJldHVybiB1
fSxudWxsLG51bGwpKSwobigpKCksci5fMTkobnVsbCxbIlxuICAgICAgICAiXSkpLChuKCkoKSxy
Ll8xOShudWxsLFsiXG4gICAgICAiXSkpXSxudWxsLGZ1bmN0aW9uKG4sbCl7bihsLDAsMCxsLmNv
bnRleHQuJGltcGxpY2l0LmNvbXBsZXRlKSxuKGwsNCwwLGwuY29udGV4dC4kaW1wbGljaXQuY29t
cGxldGUpLG4obCw3LDAsbC5jb250ZXh0LiRpbXBsaWNpdC50aXRsZSl9KX1mdW5jdGlvbiBvKG4p
e3JldHVybiByLl8xNygwLFsobigpKCksci5fMTgoMCxudWxsLG51bGwsNywic2VjdGlvbiIsW1si
Y2xhc3MiLCJtYWluIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChuKCkoKSxyLl8xOShu
dWxsLFsiXG4gICAgIl0pKSwobigpKCksci5fMTgoMCxudWxsLG51bGwsNCwidWwiLFtbImNsYXNz
IiwidG9kby1saXN0Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChuKCkoKSxyLl8xOShu
dWxsLFsiXG4gICAgICAiXSkpLChuKCkoKSxyLl8yMCgxNjc3NzIxNixudWxsLG51bGwsMSxudWxs
LHUpKSxyLl8yMSg4MDI4MTYsbnVsbCwwLGMuaCxbci5fMixyLl8zLHIubV0se25nRm9yT2Y6WzAs
Im5nRm9yT2YiXX0sbnVsbCksKG4oKSgpLHIuXzE5KG51bGwsWyJcbiAgICAiXSkpLChuKCkoKSxy
Ll8xOShudWxsLFsiXG4gICJdKSldLGZ1bmN0aW9uKG4sbCl7bihsLDUsMCxsLmNvbXBvbmVudC50
b2Rvcyl9LG51bGwpfWZ1bmN0aW9uIGUobil7cmV0dXJuIHIuXzE3KDAsWyhuKCkoKSxyLl8xOCgw
LG51bGwsbnVsbCw2LCJmb290ZXIiLFtbImNsYXNzIiwiZm9vdGVyIl1dLG51bGwsbnVsbCxudWxs
LG51bGwsbnVsbCkpLChuKCkoKSxyLl8xOShudWxsLFsiXG4gICAgIl0pKSwobigpKCksci5fMTgo
MCxudWxsLG51bGwsMywic3BhbiIsW1siY2xhc3MiLCJ0b2RvLWNvdW50Il1dLG51bGwsbnVsbCxu
dWxsLG51bGwsbnVsbCkpLChuKCkoKSxyLl8xOCgwLG51bGwsbnVsbCwxLCJzdHJvbmciLFtdLG51
bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChuKCkoKSxyLl8xOShudWxsLFsiIiwiIl0pKSwobigp
KCksci5fMTkobnVsbCxbIiAiLCIgbGVmdCJdKSksKG4oKSgpLHIuXzE5KG51bGwsWyJcbiAgIl0p
KV0sbnVsbCxmdW5jdGlvbihuLGwpe3ZhciB0PWwuY29tcG9uZW50O24obCw0LDAsdC50b2Rvcy5s
ZW5ndGgpLG4obCw1LDAsMT09dC50b2Rvcy5sZW5ndGg/Iml0ZW0iOiJpdGVtcyIpfSl9ZnVuY3Rp
b24gaShuKXtyZXR1cm4gci5fMTcoMCxbKG4oKSgpLHIuXzE4KDAsbnVsbCxudWxsLDIwLCJzZWN0
aW9uIixbWyJjbGFzcyIsInRvZG9hcHAiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKG4o
KSgpLHIuXzE5KG51bGwsWyJcbiAgIl0pKSwobigpKCksci5fMTgoMCxudWxsLG51bGwsMTEsImhl
YWRlciIsW1siY2xhc3MiLCJoZWFkZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKG4o
KSgpLHIuXzE5KG51bGwsWyJcbiAgICAiXSkpLChuKCkoKSxyLl8xOCgwLG51bGwsbnVsbCwxLCJo
MSIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKG4oKSgpLHIuXzE5KG51bGwsWyJUb2Rv
cyJdKSksKG4oKSgpLHIuXzE5KG51bGwsWyJcbiAgICAiXSkpLChuKCkoKSxyLl8xOCgwLG51bGws
bnVsbCw1LCJpbnB1dCIsW1siYXV0b2ZvY3VzIiwiIl0sWyJjbGFzcyIsIm5ldy10b2RvIl0sWyJw
bGFjZWhvbGRlciIsIldoYXQgbmVlZHMgdG8gYmUgZG9uZT8iXV0sW1syLCJuZy11bnRvdWNoZWQi
LG51bGxdLFsyLCJuZy10b3VjaGVkIixudWxsXSxbMiwibmctcHJpc3RpbmUiLG51bGxdLFsyLCJu
Zy1kaXJ0eSIsbnVsbF0sWzIsIm5nLXZhbGlkIixudWxsXSxbMiwibmctaW52YWxpZCIsbnVsbF0s
WzIsIm5nLXBlbmRpbmciLG51bGxdXSxbW251bGwsIm5nTW9kZWxDaGFuZ2UiXSxbbnVsbCwia2V5
dXAuZW50ZXIiXSxbbnVsbCwiaW5wdXQiXSxbbnVsbCwiYmx1ciJdLFtudWxsLCJjb21wb3NpdGlv
bnN0YXJ0Il0sW251bGwsImNvbXBvc2l0aW9uZW5kIl1dLGZ1bmN0aW9uKG4sbCx0KXt2YXIgdT0h
MCxvPW4uY29tcG9uZW50O2lmKCJpbnB1dCI9PT1sKXt1PSExIT09ci5fMjIobiw4KS5faGFuZGxl
SW5wdXQodC50YXJnZXQudmFsdWUpJiZ1fWlmKCJibHVyIj09PWwpe3U9ITEhPT1yLl8yMihuLDgp
Lm9uVG91Y2hlZCgpJiZ1fWlmKCJjb21wb3NpdGlvbnN0YXJ0Ij09PWwpe3U9ITEhPT1yLl8yMihu
LDgpLl9jb21wb3NpdGlvblN0YXJ0KCkmJnV9aWYoImNvbXBvc2l0aW9uZW5kIj09PWwpe3U9ITEh
PT1yLl8yMihuLDgpLl9jb21wb3NpdGlvbkVuZCh0LnRhcmdldC52YWx1ZSkmJnV9aWYoIm5nTW9k
ZWxDaGFuZ2UiPT09bCl7dT0hMSE9PShvLm5ld1RvZG8udGl0bGU9dCkmJnV9aWYoImtleXVwLmVu
dGVyIj09PWwpe3U9ITEhPT1vLmFkZFRvZG8oKSYmdX1yZXR1cm4gdX0sbnVsbCxudWxsKSksci5f
MjEoMTYzODQsbnVsbCwwLGEuZCxbci5fMTIsci5aLFsyLGEuZV1dLG51bGwsbnVsbCksci5fMjMo
MTAyNCxudWxsLGEuZixmdW5jdGlvbihuKXtyZXR1cm5bbl19LFthLmRdKSxyLl8yMSg2NzE3NDQs
bnVsbCwwLGEuZyxbWzgsbnVsbF0sWzgsbnVsbF0sWzgsbnVsbF0sWzIsYS5mXV0se21vZGVsOlsw
LCJtb2RlbCJdfSx7dXBkYXRlOiJuZ01vZGVsQ2hhbmdlIn0pLHIuXzIzKDIwNDgsbnVsbCxhLmgs
bnVsbCxbYS5nXSksci5fMjEoMTYzODQsbnVsbCwwLGEuaSxbYS5oXSxudWxsLG51bGwpLChuKCko
KSxyLl8xOShudWxsLFsiXG4gICJdKSksKG4oKSgpLHIuXzE5KG51bGwsWyJcbiAgIl0pKSwobigp
KCksci5fMjAoMTY3NzcyMTYsbnVsbCxudWxsLDEsbnVsbCxvKSksci5fMjEoMTYzODQsbnVsbCww
LGMuaSxbci5fMixyLl8zXSx7bmdJZjpbMCwibmdJZiJdfSxudWxsKSwobigpKCksci5fMTkobnVs
bCxbIlxuICAiXSkpLChuKCkoKSxyLl8yMCgxNjc3NzIxNixudWxsLG51bGwsMSxudWxsLGUpKSxy
Ll8yMSgxNjM4NCxudWxsLDAsYy5pLFtyLl8yLHIuXzNdLHtuZ0lmOlswLCJuZ0lmIl19LG51bGwp
LChuKCkoKSxyLl8xOShudWxsLFsiXG4iXSkpXSxmdW5jdGlvbihuLGwpe3ZhciB0PWwuY29tcG9u
ZW50O24obCwxMCwwLHQubmV3VG9kby50aXRsZSksbihsLDE2LDAsdC50b2Rvcy5sZW5ndGg+MCks
bihsLDE5LDAsdC50b2Rvcy5sZW5ndGg+MCl9LGZ1bmN0aW9uKG4sbCl7bihsLDcsMCxyLl8yMihs
LDEyKS5uZ0NsYXNzVW50b3VjaGVkLHIuXzIyKGwsMTIpLm5nQ2xhc3NUb3VjaGVkLHIuXzIyKGws
MTIpLm5nQ2xhc3NQcmlzdGluZSxyLl8yMihsLDEyKS5uZ0NsYXNzRGlydHksci5fMjIobCwxMiku
bmdDbGFzc1ZhbGlkLHIuXzIyKGwsMTIpLm5nQ2xhc3NJbnZhbGlkLHIuXzIyKGwsMTIpLm5nQ2xh
c3NQZW5kaW5nKX0pfWZ1bmN0aW9uIGQobil7cmV0dXJuIHIuXzE3KDAsWyhuKCkoKSxyLl8xOCgw
LG51bGwsbnVsbCwyLCJhcHAtcm9vdCIsW10sbnVsbCxudWxsLG51bGwsaSxfKSksci5fMjMoNTEy
LG51bGwsZi5hLGYuYSxbXSksci5fMjEoNDkxNTIsbnVsbCwwLHMuYSxbZi5hXSxudWxsLG51bGwp
XSxudWxsLG51bGwpfXZhciByPXQoIjNqM0siKSxjPXQoIjJKZTgiKSxzPXQoIllXeDQiKSxhPXQo
Ik5WT3MiKSxmPXQoImozZW4iKTt0LmQobCwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gZ30pO3ZhciBw
PVtdLF89ci5fMTYoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6cCxkYXRhOnt9fSksZz1yLl8yNCgi
YXBwLXJvb3QiLHMuYSxkLHt9LHt9LFtdKX0sSWtzcDpmdW5jdGlvbihuLGwsdCl7InVzZSBzdHJp
Y3QiO3QuZChsLCJhIixmdW5jdGlvbigpe3JldHVybiB1fSk7dmFyIHU9ZnVuY3Rpb24oKXtmdW5j
dGlvbiBuKCl7fXJldHVybiBufSgpfSxZV3g0OmZ1bmN0aW9uKG4sbCx0KXsidXNlIHN0cmljdCI7
dmFyIHU9dCgiYUthMyIpLG89dCgiajNlbiIpO3QuZChsLCJhIixmdW5jdGlvbigpe3JldHVybiBl
fSk7dmFyIGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4pe3RoaXMudG9kb0RhdGFTZXJ2aWNlPW4s
dGhpcy5uZXdUb2RvPW5ldyB1LmF9cmV0dXJuIG4ucHJvdG90eXBlLmFkZFRvZG89ZnVuY3Rpb24o
KXt0aGlzLnRvZG9EYXRhU2VydmljZS5hZGRUb2RvKHRoaXMubmV3VG9kbyksdGhpcy5uZXdUb2Rv
PW5ldyB1LmF9LG4ucHJvdG90eXBlLnRvZ2dsZVRvZG9Db21wbGV0ZT1mdW5jdGlvbihuKXt0aGlz
LnRvZG9EYXRhU2VydmljZS50b2dnbGVUb2RvQ29tcGxldGUobil9LG4ucHJvdG90eXBlLnJlbW92
ZVRvZG89ZnVuY3Rpb24obil7dGhpcy50b2RvRGF0YVNlcnZpY2UuZGVsZXRlVG9kb0J5SWQobi5p
ZCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSwidG9kb3MiLHtnZXQ6ZnVuY3Rp
b24oKXtyZXR1cm4gdGhpcy50b2RvRGF0YVNlcnZpY2UuZ2V0QWxsVG9kb3MoKX0sZW51bWVyYWJs
ZTohMCxjb25maWd1cmFibGU6ITB9KSxuLmN0b3JQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7cmV0dXJu
W3t0eXBlOm8uYX1dfSxufSgpfSxhS2EzOmZ1bmN0aW9uKG4sbCx0KXsidXNlIHN0cmljdCI7dC5k
KGwsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KTt2YXIgdT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4o
bil7dm9pZCAwPT09biYmKG49e30pLHRoaXMudGl0bGU9IiIsdGhpcy5jb21wbGV0ZT0hMSxPYmpl
Y3QuYXNzaWduKHRoaXMsbil9cmV0dXJuIG59KCl9LGozZW46ZnVuY3Rpb24obixsLHQpeyJ1c2Ug
c3RyaWN0Ijt0LmQobCwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pO3ZhciB1PWZ1bmN0aW9uKCl7
ZnVuY3Rpb24gbigpe3RoaXMubGFzdElkPTAsdGhpcy50b2Rvcz1bXX1yZXR1cm4gbi5wcm90b3R5
cGUuYWRkVG9kbz1mdW5jdGlvbihuKXtyZXR1cm4gbi5pZHx8KG4uaWQ9Kyt0aGlzLmxhc3RJZCks
dGhpcy50b2Rvcy5wdXNoKG4pLHRoaXN9LG4ucHJvdG90eXBlLmRlbGV0ZVRvZG9CeUlkPWZ1bmN0
aW9uKG4pe3JldHVybiB0aGlzLnRvZG9zPXRoaXMudG9kb3MuZmlsdGVyKGZ1bmN0aW9uKGwpe3Jl
dHVybiBsLmlkIT09bn0pLHRoaXN9LG4ucHJvdG90eXBlLnVwZGF0ZVRvZG9CeUlkPWZ1bmN0aW9u
KG4sbCl7dm9pZCAwPT09bCYmKGw9e30pO3ZhciB0PXRoaXMuZ2V0VG9kb0J5SWQobik7cmV0dXJu
IHQ/KE9iamVjdC5hc3NpZ24odCxsKSx0KTpudWxsfSxuLnByb3RvdHlwZS5nZXRBbGxUb2Rvcz1m
dW5jdGlvbigpe3JldHVybiB0aGlzLnRvZG9zfSxuLnByb3RvdHlwZS5nZXRUb2RvQnlJZD1mdW5j
dGlvbihuKXtyZXR1cm4gdGhpcy50b2Rvcy5maWx0ZXIoZnVuY3Rpb24obCl7cmV0dXJuIGwuaWQ9
PT1ufSkucG9wKCl9LG4ucHJvdG90eXBlLnRvZ2dsZVRvZG9Db21wbGV0ZT1mdW5jdGlvbihuKXty
ZXR1cm4gdGhpcy51cGRhdGVUb2RvQnlJZChuLmlkLHtjb21wbGV0ZTohbi5jb21wbGV0ZX0pfSxu
LmN0b3JQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7cmV0dXJuW119LG59KCl9LGtacWw6ZnVuY3Rpb24o
bixsLHQpeyJ1c2Ugc3RyaWN0Ijt0LmQobCwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pO3ZhciB1
PXtwcm9kdWN0aW9uOiEwfX0sa2tlNjpmdW5jdGlvbihuLGwsdCl7InVzZSBzdHJpY3QiO3ZhciB1
PXQoIjNqM0siKSxvPXQoIklrc3AiKSxlPXQoIllXeDQiKSxpPXQoIjFBODAiKSxkPXQoIjJKZTgi
KSxyPXQoIlFiZG0iKSxjPXQoIk5WT3MiKSxzPXQoIkZ6cm8iKTt0LmQobCwiYSIsZnVuY3Rpb24o
KXtyZXR1cm4gYX0pO3ZhciBhPXUuYihvLmEsW2UuYV0sZnVuY3Rpb24obil7cmV0dXJuIHUuYyhb
dS5kKDUxMix1LmUsdS5mLFtbOCxbaS5hXV0sWzMsdS5lXSx1LmddKSx1LmQoNTEyMCx1LmgsdS5p
LFtbMyx1LmhdXSksdS5kKDQ2MDgsZC5hLGQuYixbdS5oXSksdS5kKDQ2MDgsdS5qLHUuaixbXSks
dS5kKDUxMjAsdS5rLHUubCxbXSksdS5kKDUxMjAsdS5tLHUubixbXSksdS5kKDUxMjAsdS5vLHUu
cCxbXSksdS5kKDQ2MDgsci5iLHIuYyxbZC5jXSksdS5kKDYxNDQsdS5xLG51bGwsW3IuYl0pLHUu
ZCg0NjA4LHIuZCxyLmUsW10pLHUuZCg1MTIwLHIuZixmdW5jdGlvbihuLGwsdCx1KXtyZXR1cm5b
bmV3IHIuZyhuKSxuZXcgci5oKGwpLG5ldyByLmkodCx1KV19LFtkLmMsZC5jLGQuYyxyLmRdKSx1
LmQoNDYwOCxyLmosci5qLFtyLmYsdS5yXSksdS5kKDEzNTY4MCxyLmssci5rLFtkLmNdKSx1LmQo
NDYwOCxyLmwsci5sLFtyLmosci5rXSksdS5kKDYxNDQsdS5zLG51bGwsW3IubF0pLHUuZCg2MTQ0
LHIubSxudWxsLFtyLmtdKSx1LmQoNDYwOCx1LnQsdS50LFt1LnJdKSx1LmQoNDYwOCxyLm4sci5u
LFtkLmNdKSx1LmQoNDYwOCxyLm8sci5vLFtkLmNdKSx1LmQoNDYwOCxjLmEsYy5hLFtdKSx1LmQo
NDYwOCxzLmEscy5hLFtdKSx1LmQoNDYwOCxzLmIscy5jLFtdKSx1LmQoNTEyMCxzLmQscy5lLFtd
KSx1LmQoNDYwOCxzLmYscy5mLFtzLmEscy5iLHMuZF0pLHUuZCg0NjA4LHMuZyxzLmgsW10pLHUu
ZCg1MTIwLHMuaSxzLmosW3MuZixzLmddKSx1LmQoNTEyLGQuZCxkLmQsW10pLHUuZCgxMDI0LHUu
dSxyLnAsW10pLHUuZCgxMDI0LHUudixmdW5jdGlvbihuLGwpe3JldHVybltyLnEobixsKV19LFtb
MixyLnJdLFsyLHUud11dKSx1LmQoNTEyLHUueCx1LngsW1syLHUudl1dKSx1LmQoMTMxNTg0LHUu
eSx1LnksW3Uucix1LnosdS5BLHUudSx1LmUsdS54XSksdS5kKDIwNDgsdS5CLG51bGwsW3UueV0p
LHUuZCg1MTIsdS5DLHUuQyxbdS5CXSksdS5kKDUxMixyLnMsci5zLFtbMyxyLnNdXSksdS5kKDUx
MixjLmIsYy5iLFtdKSx1LmQoNTEyLGMuYyxjLmMsW10pLHUuZCg1MTIscy5rLHMuayxbXSksdS5k
KDUxMixvLmEsby5hLFtdKV0pfSl9LHgzNWI6ZnVuY3Rpb24obixsLHQpeyJ1c2Ugc3RyaWN0IjtP
YmplY3QuZGVmaW5lUHJvcGVydHkobCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHU9dCgi
M2ozSyIpLG89dCgia1pxbCIpLGU9dCgiUWJkbSIpLGk9dCgia2tlNiIpO28uYS5wcm9kdWN0aW9u
JiZ0LmkodS5hKSgpLHQuaShlLmEpKCkuYm9vdHN0cmFwTW9kdWxlRmFjdG9yeShpLmEpfX0sWzBd
KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93
c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVy
ZS1leGFtcGxlcy9hbmd1bGFyL2Rpc3QvcG9seWZpbGxzLjNhMmFlZDgyYTBjOWIyNGU2NTg1LmJ1
bmRsZS5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXIvZGlzdC9wb2x5ZmlsbHMu
M2EyYWVkODJhMGM5YjI0ZTY1ODUuYnVuZGxlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc4MjI4OGRkZmMwNGM0
ZDlhMzk5Y2IzMzVjMTMwYzY1YTA3NGQ4N2MKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9i
cm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9hbmd1bGFyL2Rpc3QvcG9seWZpbGxzLjNhMmFlZDgyYTBjOWIyNGU2NTg1
LmJ1bmRsZS5qcwpAQCAtMCwwICsxLDc4IEBACit3ZWJwYWNrSnNvbnAoWzAsNF0seyIvd2h1Ijpm
dW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZih2b2lkIDA9PWUpdGhyb3cgVHlw
ZUVycm9yKCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgIitlKTtyZXR1cm4gZX19LCIwUmloIjpmdW5j
dGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIk96SXEiKSxvPW4oIkRzNVAiKSxpPW4o
IlIzQVAiKSxhPW4oIkExNkwiKSxjPW4oIjFhQTAiKSx1PW4oInZtU08iKSxzPW4oIjlHcEEiKSxm
PW4oIlVLTSsiKSxsPW4oInpnSXQiKSxwPW4oInFreWMiKSxoPW4oInlZdksiKSx2PW4oImtpYzUi
KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4sZCx5LGcpe3ZhciBrPXJbZV0sbT1rLGI9eT8ic2V0
IjoiYWRkIixfPW0mJm0ucHJvdG90eXBlLHc9e30sVD1mdW5jdGlvbihlKXt2YXIgdD1fW2VdO2ko
XyxlLCJkZWxldGUiPT1lP2Z1bmN0aW9uKGUpe3JldHVybiEoZyYmIWYoZSkpJiZ0LmNhbGwodGhp
cywwPT09ZT8wOmUpfToiaGFzIj09ZT9mdW5jdGlvbihlKXtyZXR1cm4hKGcmJiFmKGUpKSYmdC5j
YWxsKHRoaXMsMD09PWU/MDplKX06ImdldCI9PWU/ZnVuY3Rpb24oZSl7cmV0dXJuIGcmJiFmKGUp
P3ZvaWQgMDp0LmNhbGwodGhpcywwPT09ZT8wOmUpfToiYWRkIj09ZT9mdW5jdGlvbihlKXtyZXR1
cm4gdC5jYWxsKHRoaXMsMD09PWU/MDplKSx0aGlzfTpmdW5jdGlvbihlLG4pe3JldHVybiB0LmNh
bGwodGhpcywwPT09ZT8wOmUsbiksdGhpc30pfTtpZigiZnVuY3Rpb24iPT10eXBlb2YgbSYmKGd8
fF8uZm9yRWFjaCYmIWwoZnVuY3Rpb24oKXsobmV3IG0pLmVudHJpZXMoKS5uZXh0KCl9KSkpe3Zh
ciBPPW5ldyBtLEQ9T1tiXShnP3t9Oi0wLDEpIT1PLEU9bChmdW5jdGlvbigpe08uaGFzKDEpfSks
UD1wKGZ1bmN0aW9uKGUpe25ldyBtKGUpfSksUz0hZyYmbChmdW5jdGlvbigpe2Zvcih2YXIgZT1u
ZXcgbSx0PTU7dC0tOyllW2JdKHQsdCk7cmV0dXJuIWUuaGFzKC0wKX0pO1B8fChtPXQoZnVuY3Rp
b24odCxuKXtzKHQsbSxlKTt2YXIgcj12KG5ldyBrLHQsbSk7cmV0dXJuIHZvaWQgMCE9biYmdShu
LHkscltiXSxyKSxyfSksbS5wcm90b3R5cGU9XyxfLmNvbnN0cnVjdG9yPW0pLChFfHxTKSYmKFQo
ImRlbGV0ZSIpLFQoImhhcyIpLHkmJlQoImdldCIpKSwoU3x8RCkmJlQoYiksZyYmXy5jbGVhciYm
ZGVsZXRlIF8uY2xlYXJ9ZWxzZSBtPWQuZ2V0Q29uc3RydWN0b3IodCxlLHksYiksYShtLnByb3Rv
dHlwZSxuKSxjLk5FRUQ9ITA7cmV0dXJuIGgobSxlKSx3W2VdPW0sbyhvLkcrby5XK28uRioobSE9
ayksdyksZ3x8ZC5zZXRTdHJvbmcobSxlLHkpLG19fSwxOmZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9y
dHM9bigiWFMyNSIpfSwiMWFBMCI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oInVsVFkiKSgibWV0
YSIpLG89bigiVUtNKyIpLGk9bigiV0JjTCIpLGE9bigibERMayIpLmYsYz0wLHU9T2JqZWN0Lmlz
RXh0ZW5zaWJsZXx8ZnVuY3Rpb24oKXtyZXR1cm4hMH0scz0hbigiemdJdCIpKGZ1bmN0aW9uKCl7
cmV0dXJuIHUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSl9KSxmPWZ1bmN0aW9uKGUpe2Eo
ZSxyLHt2YWx1ZTp7aToiTyIrICsrYyx3Ont9fX0pfSxsPWZ1bmN0aW9uKGUsdCl7aWYoIW8oZSkp
cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBlP2U6KCJzdHJpbmciPT10eXBlb2YgZT8iUyI6IlAiKStl
O2lmKCFpKGUscikpe2lmKCF1KGUpKXJldHVybiJGIjtpZighdClyZXR1cm4iRSI7ZihlKX1yZXR1
cm4gZVtyXS5pfSxwPWZ1bmN0aW9uKGUsdCl7aWYoIWkoZSxyKSl7aWYoIXUoZSkpcmV0dXJuITA7
aWYoIXQpcmV0dXJuITE7ZihlKX1yZXR1cm4gZVtyXS53fSxoPWZ1bmN0aW9uKGUpe3JldHVybiBz
JiZ2Lk5FRUQmJnUoZSkmJiFpKGUscikmJmYoZSksZX0sdj1lLmV4cG9ydHM9e0tFWTpyLE5FRUQ6
ITEsZmFzdEtleTpsLGdldFdlYWs6cCxvbkZyZWV6ZTpofX0sIjJwMXEiOmZ1bmN0aW9uKGUsdCxu
KXt2YXIgcj1uKCJsRExrIiksbz1uKCJmVTI1Iik7ZS5leHBvcnRzPW4oImJVcU8iKT9mdW5jdGlv
bihlLHQsbil7cmV0dXJuIHIuZihlLHQsbygxLG4pKX06ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBl
W3RdPW4sZX19LCIydEZOIjpmdW5jdGlvbihlLHQsbil7bigiQ1ZSKyIpLG4oInZtU3UiKSxuKCI0
WlUxIiksbigieXgxVSIpLG4oIlg3YUsiKSxuKCJTUHRVIiksbigiQTUyQiIpLG4oIlB1VGQiKSxu
KCJkbSs3IiksbigiSkczNCIpLG4oIlJ3NEsiKSxuKCI5bUdVIiksbigiYlVZMCIpLG4oIm1UcDci
KSxlLmV4cG9ydHM9bigiN2dYMCIpLlJlZmxlY3R9LCIzcTR1IjpmdW5jdGlvbihlLHQsbil7dmFy
IHI9bigid0NzbyIpLG89bigiRElWUCIpLGk9ci5rZXksYT1yLm1hcCxjPXIuc3RvcmU7ci5leHAo
e2RlbGV0ZU1ldGFkYXRhOmZ1bmN0aW9uKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aDwzP3Zv
aWQgMDppKGFyZ3VtZW50c1syXSkscj1hKG8odCksbiwhMSk7aWYodm9pZCAwPT09cnx8IXIuZGVs
ZXRlKGUpKXJldHVybiExO2lmKHIuc2l6ZSlyZXR1cm4hMDt2YXIgdT1jLmdldCh0KTtyZXR1cm4g
dS5kZWxldGUobiksISF1LnNpemV8fGMuZGVsZXRlKHQpfX0pfSwiNFpVMSI6ZnVuY3Rpb24oZSx0
LG4pe3ZhciByPW4oImxETGsiKSxvPW4oIkRzNVAiKSxpPW4oIkRJVlAiKSxhPW4oInM0ajAiKTtv
KG8uUytvLkYqbigiemdJdCIpKGZ1bmN0aW9uKCl7UmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShyLmYo
e30sMSx7dmFsdWU6MX0pLDEse3ZhbHVlOjJ9KX0pLCJSZWZsZWN0Iix7ZGVmaW5lUHJvcGVydHk6
ZnVuY3Rpb24oZSx0LG4pe2koZSksdD1hKHQsITApLGkobik7dHJ5e3JldHVybiByLmYoZSx0LG4p
LCEwfWNhdGNoKGUpe3JldHVybiExfX19KX0sIjdnWDAiOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5l
eHBvcnRzPXt2ZXJzaW9uOiIyLjQuMCJ9OyJudW1iZXIiPT10eXBlb2YgX19lJiYoX19lPW4pfSwi
N3lsWCI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIkRJVlAiKSxvPW4oInR3eE0iKSxpPW4oIlFL
WG0iKSxhPW4oIm1aT04iKSgiSUVfUFJPVE8iKSxjPWZ1bmN0aW9uKCl7fSx1PSJwcm90b3R5cGUi
LHM9ZnVuY3Rpb24oKXt2YXIgZSx0PW4oImpoeGYiKSgiaWZyYW1lIikscj1pLmxlbmd0aCxvPSI8
IixhPSI+Ijtmb3IodC5zdHlsZS5kaXNwbGF5PSJub25lIixuKCJkMDc1IikuYXBwZW5kQ2hpbGQo
dCksdC5zcmM9ImphdmFzY3JpcHQ6IixlPXQuY29udGVudFdpbmRvdy5kb2N1bWVudCxlLm9wZW4o
KSxlLndyaXRlKG8rInNjcmlwdCIrYSsiZG9jdW1lbnQuRj1PYmplY3QiK28rIi9zY3JpcHQiK2Ep
LGUuY2xvc2UoKSxzPWUuRjtyLS07KWRlbGV0ZSBzW3VdW2lbcl1dO3JldHVybiBzKCl9O2UuZXhw
b3J0cz1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBudWxsIT09ZT8o
Y1t1XT1yKGUpLG49bmV3IGMsY1t1XT1udWxsLG5bYV09ZSk6bj1zKCksdm9pZCAwPT09dD9uOm8o
bix0KX19LCI4RDhIIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigib2VpaCIpLG89TWF0aC5tYXgs
aT1NYXRoLm1pbjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1yKGUpLGU8MD9vKGUr
dCwwKTppKGUsdCl9fSwiOFdiUyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIndDc28iKSxvPW4o
IkRJVlAiKSxpPW4oIktPcmQiKSxhPXIuaGFzLGM9ci5rZXksdT1mdW5jdGlvbihlLHQsbil7aWYo
YShlLHQsbikpcmV0dXJuITA7dmFyIHI9aSh0KTtyZXR1cm4gbnVsbCE9PXImJnUoZSxyLG4pfTty
LmV4cCh7aGFzTWV0YWRhdGE6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdShlLG8odCksYXJndW1lbnRz
Lmxlbmd0aDwzP3ZvaWQgMDpjKGFyZ3VtZW50c1syXSkpfX0pfSwiOUdwQSI6ZnVuY3Rpb24oZSx0
KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4scil7aWYoIShlIGluc3RhbmNlb2YgdCl8fHZvaWQg
MCE9PXImJnIgaW4gZSl0aHJvdyBUeXBlRXJyb3IobisiOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEi
KTtyZXR1cm4gZX19LCI5bUdVIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiRHM1UCIpLG89bigi
RElWUCIpLGk9T2JqZWN0LnByZXZlbnRFeHRlbnNpb25zO3Ioci5TLCJSZWZsZWN0Iix7cHJldmVu
dEV4dGVuc2lvbnM6ZnVuY3Rpb24oZSl7byhlKTt0cnl7cmV0dXJuIGkmJmkoZSksITB9Y2F0Y2go
ZSl7cmV0dXJuITF9fX0pfSwiOXZiMSI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oImJOMXAiKSxv
PW4oImtrQ3ciKSgiaXRlcmF0b3IiKSxpPUFycmF5LnByb3RvdHlwZTtlLmV4cG9ydHM9ZnVuY3Rp
b24oZSl7cmV0dXJuIHZvaWQgMCE9PWUmJihyLkFycmF5PT09ZXx8aVtvXT09PWUpfX0sQTE2TDpm
dW5jdGlvbihlLHQsbil7dmFyIHI9bigiUjNBUCIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7
Zm9yKHZhciBvIGluIHQpcihlLG8sdFtvXSxuKTtyZXR1cm4gZX19LEE1MkI6ZnVuY3Rpb24oZSx0
LG4pe3ZhciByPW4oIng5enYiKSxvPW4oIkRzNVAiKSxpPW4oIkRJVlAiKTtvKG8uUywiUmVmbGVj
dCIse2dldE93blByb3BlcnR5RGVzY3JpcHRvcjpmdW5jdGlvbihlLHQpe3JldHVybiByLmYoaShl
KSx0KX19KX0sQmJ5RjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigib2VpaCIpLG89TWF0aC5taW47
ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBlPjA/byhyKGUpLDkwMDcxOTkyNTQ3NDA5OTEp
OjB9fSxDRW5lOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiT3pJcSIpLG89
bigibERMayIpLGk9bigiYlVxTyIpLGE9bigia2tDdyIpKCJzcGVjaWVzIik7ZS5leHBvcnRzPWZ1
bmN0aW9uKGUpe3ZhciB0PXJbZV07aSYmdCYmIXRbYV0mJm8uZih0LGEse2NvbmZpZ3VyYWJsZToh
MCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319KX19LCJDVlIrIjpmdW5jdGlvbihlLHQsbil7
dmFyIHI9bigiRHM1UCIpLG89bigiWFNPWiIpLGk9bigiRElWUCIpLGE9KG4oIk96SXEiKS5SZWZs
ZWN0fHx7fSkuYXBwbHksYz1GdW5jdGlvbi5hcHBseTtyKHIuUytyLkYqIW4oInpnSXQiKShmdW5j
dGlvbigpe2EoZnVuY3Rpb24oKXt9KX0pLCJSZWZsZWN0Iix7YXBwbHk6ZnVuY3Rpb24oZSx0LG4p
e3ZhciByPW8oZSksdT1pKG4pO3JldHVybiBhP2Eocix0LHUpOmMuY2FsbChyLHQsdSl9fSl9LENo
R3I6ZnVuY3Rpb24oZSx0LG4pe24oInlKMngiKSxuKCIzcTR1IiksbigiTkhhSiIpLG4oInYzaFUi
KSxuKCJ6WkhxIiksbigidnNoNiIpLG4oIjhXYlMiKSxuKCJ5T3RFIiksbigiRVorNSIpLGUuZXhw
b3J0cz1uKCI3Z1gwIikuUmVmbGVjdH0sRElWUDpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiVUtN
KyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZighcihlKSl0aHJvdyBUeXBlRXJyb3IoZSsiIGlz
IG5vdCBhbiBvYmplY3QhIik7cmV0dXJuIGV9fSxEZ2lpOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0
cmljdCI7dmFyIHI9bigibERMayIpLmYsbz1uKCI3eWxYIiksaT1uKCJBMTZMIiksYT1uKCJyRnpZ
IiksYz1uKCI5R3BBIiksdT1uKCIvd2h1Iikscz1uKCJ2bVNPIiksZj1uKCJ1YzJBIiksbD1uKCJL
QjFvIikscD1uKCJDRW5lIiksaD1uKCJiVXFPIiksdj1uKCIxYUEwIikuZmFzdEtleSxkPWg/Il9z
Ijoic2l6ZSIseT1mdW5jdGlvbihlLHQpe3ZhciBuLHI9dih0KTtpZigiRiIhPT1yKXJldHVybiBl
Ll9pW3JdO2ZvcihuPWUuX2Y7bjtuPW4ubilpZihuLms9PXQpcmV0dXJuIG59O2UuZXhwb3J0cz17
Z2V0Q29uc3RydWN0b3I6ZnVuY3Rpb24oZSx0LG4sZil7dmFyIGw9ZShmdW5jdGlvbihlLHIpe2Mo
ZSxsLHQsIl9pIiksZS5faT1vKG51bGwpLGUuX2Y9dm9pZCAwLGUuX2w9dm9pZCAwLGVbZF09MCx2
b2lkIDAhPXImJnMocixuLGVbZl0sZSl9KTtyZXR1cm4gaShsLnByb3RvdHlwZSx7Y2xlYXI6ZnVu
Y3Rpb24oKXtmb3IodmFyIGU9dGhpcyx0PWUuX2ksbj1lLl9mO247bj1uLm4pbi5yPSEwLG4ucCYm
KG4ucD1uLnAubj12b2lkIDApLGRlbGV0ZSB0W24uaV07ZS5fZj1lLl9sPXZvaWQgMCxlW2RdPTB9
LGRlbGV0ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLG49eSh0LGUpO2lmKG4pe3ZhciByPW4ubixv
PW4ucDtkZWxldGUgdC5faVtuLmldLG4ucj0hMCxvJiYoby5uPXIpLHImJihyLnA9byksdC5fZj09
biYmKHQuX2Y9ciksdC5fbD09biYmKHQuX2w9byksdFtkXS0tfXJldHVybiEhbn0sZm9yRWFjaDpm
dW5jdGlvbihlKXtjKHRoaXMsbCwiZm9yRWFjaCIpO2Zvcih2YXIgdCxuPWEoZSxhcmd1bWVudHMu
bGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKTt0PXQ/dC5uOnRoaXMuX2Y7KWZvcihuKHQu
dix0LmssdGhpcyk7dCYmdC5yOyl0PXQucH0saGFzOmZ1bmN0aW9uKGUpe3JldHVybiEheSh0aGlz
LGUpfX0pLGgmJnIobC5wcm90b3R5cGUsInNpemUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdSh0
aGlzW2RdKX19KSxsfSxkZWY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG8saT15KGUsdCk7cmV0dXJu
IGk/aS52PW46KGUuX2w9aT17aTpvPXYodCwhMCksazp0LHY6bixwOnI9ZS5fbCxuOnZvaWQgMCxy
OiExfSxlLl9mfHwoZS5fZj1pKSxyJiYoci5uPWkpLGVbZF0rKywiRiIhPT1vJiYoZS5faVtvXT1p
KSksZX0sZ2V0RW50cnk6eSxzZXRTdHJvbmc6ZnVuY3Rpb24oZSx0LG4pe2YoZSx0LGZ1bmN0aW9u
KGUsdCl7dGhpcy5fdD1lLHRoaXMuX2s9dCx0aGlzLl9sPXZvaWQgMH0sZnVuY3Rpb24oKXtmb3Io
dmFyIGU9dGhpcyx0PWUuX2ssbj1lLl9sO24mJm4ucjspbj1uLnA7cmV0dXJuIGUuX3QmJihlLl9s
PW49bj9uLm46ZS5fdC5fZik/ImtleXMiPT10P2woMCxuLmspOiJ2YWx1ZXMiPT10P2woMCxuLnYp
OmwoMCxbbi5rLG4udl0pOihlLl90PXZvaWQgMCxsKDEpKX0sbj8iZW50cmllcyI6InZhbHVlcyIs
IW4sITApLHAodCl9fX0sRHM1UDpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiT3pJcSIpLG89bigi
N2dYMCIpLGk9bigiMnAxcSIpLGE9bigiUjNBUCIpLGM9bigickZ6WSIpLHU9InByb3RvdHlwZSIs
cz1mdW5jdGlvbihlLHQsbil7dmFyIGYsbCxwLGgsdj1lJnMuRixkPWUmcy5HLHk9ZSZzLlMsZz1l
JnMuUCxrPWUmcy5CLG09ZD9yOnk/clt0XXx8KHJbdF09e30pOihyW3RdfHx7fSlbdV0sYj1kP286
b1t0XXx8KG9bdF09e30pLF89Ylt1XXx8KGJbdV09e30pO2QmJihuPXQpO2ZvcihmIGluIG4pbD0h
diYmbSYmdm9pZCAwIT09bVtmXSxwPShsP206bilbZl0saD1rJiZsP2MocCxyKTpnJiYiZnVuY3Rp
b24iPT10eXBlb2YgcD9jKEZ1bmN0aW9uLmNhbGwscCk6cCxtJiZhKG0sZixwLGUmcy5VKSxiW2Zd
IT1wJiZpKGIsZixoKSxnJiZfW2ZdIT1wJiYoX1tmXT1wKX07ci5jb3JlPW8scy5GPTEscy5HPTIs
cy5TPTQscy5QPTgscy5CPTE2LHMuVz0zMixzLlU9NjQscy5SPTEyOCxlLmV4cG9ydHM9c30sRHVS
MjpmdW5jdGlvbihlLHQpe3ZhciBuO249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKTt0cnl7bj1u
fHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpfHwoMCxldmFsKSgidGhpcyIpfWNhdGNoKGUpeyJv
YmplY3QiPT10eXBlb2Ygd2luZG93JiYobj13aW5kb3cpfWUuZXhwb3J0cz1ufSwiRVorNSI6ZnVu
Y3Rpb24oZSx0LG4pe3ZhciByPW4oIndDc28iKSxvPW4oIkRJVlAiKSxpPW4oIlhTT1oiKSxhPXIu
a2V5LGM9ci5zZXQ7ci5leHAoe21ldGFkYXRhOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9u
KG4scil7YyhlLHQsKHZvaWQgMCE9PXI/bzppKShuKSxhKHIpKX19fSl9LEZyeVI6ZnVuY3Rpb24o
ZSx0LG4pe3ZhciByPW4oIi93aHUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVj
dChyKGUpKX19LElSSjM6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCI3eWxY
Iiksbz1uKCJmVTI1IiksaT1uKCJ5WXZLIiksYT17fTtuKCIycDFxIikoYSxuKCJra0N3IikoIml0
ZXJhdG9yIiksZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGUuZXhwb3J0cz1mdW5jdGlvbihlLHQs
bil7ZS5wcm90b3R5cGU9cihhLHtuZXh0Om8oMSxuKX0pLGkoZSx0KyIgSXRlcmF0b3IiKX19LEpH
MzQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIkRzNVAiKSxvPW4oIkRJVlAiKSxpPU9iamVjdC5p
c0V4dGVuc2libGU7cihyLlMsIlJlZmxlY3QiLHtpc0V4dGVuc2libGU6ZnVuY3Rpb24oZSl7cmV0
dXJuIG8oZSksIWl8fGkoZSl9fSl9LEtCMW86ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rp
b24oZSx0KXtyZXR1cm57dmFsdWU6dCxkb25lOiEhZX19fSxLT3JkOmZ1bmN0aW9uKGUsdCxuKXt2
YXIgcj1uKCJXQmNMIiksbz1uKCJGcnlSIiksaT1uKCJtWk9OIikoIklFX1BST1RPIiksYT1PYmpl
Y3QucHJvdG90eXBlO2UuZXhwb3J0cz1PYmplY3QuZ2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUp
e3JldHVybiBlPW8oZSkscihlLGkpP2VbaV06ImZ1bmN0aW9uIj09dHlwZW9mIGUuY29uc3RydWN0
b3ImJmUgaW5zdGFuY2VvZiBlLmNvbnN0cnVjdG9yP2UuY29uc3RydWN0b3IucHJvdG90eXBlOmUg
aW5zdGFuY2VvZiBPYmplY3Q/YTpudWxsfX0sTGhUYTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigi
ckZ6WSIpLG89bigiUTZOZiIpLGk9bigiRnJ5UiIpLGE9bigiQmJ5RiIpLGM9bigicGxTViIpO2Uu
ZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuPTE9PWUsdT0yPT1lLHM9Mz09ZSxmPTQ9PWUsbD02
PT1lLHA9NT09ZXx8bCxoPXR8fGM7cmV0dXJuIGZ1bmN0aW9uKHQsYyx2KXtmb3IodmFyIGQseSxn
PWkodCksaz1vKGcpLG09cihjLHYsMyksYj1hKGsubGVuZ3RoKSxfPTAsdz1uP2godCxiKTp1P2go
dCwwKTp2b2lkIDA7Yj5fO18rKylpZigocHx8XyBpbiBrKSYmKGQ9a1tfXSx5PW0oZCxfLGcpLGUp
KWlmKG4pd1tfXT15O2Vsc2UgaWYoeSlzd2l0Y2goZSl7Y2FzZSAzOnJldHVybiEwO2Nhc2UgNTpy
ZXR1cm4gZDtjYXNlIDY6cmV0dXJuIF87Y2FzZSAyOncucHVzaChkKX1lbHNlIGlmKGYpcmV0dXJu
ITE7cmV0dXJuIGw/LTE6c3x8Zj9mOnd9fX0sTXN1UTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJp
Y3QiO3ZhciByPW4oIkRnaWkiKTtlLmV4cG9ydHM9bigiMFJpaCIpKCJNYXAiLGZ1bmN0aW9uKGUp
e3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlKHRoaXMsYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3Vt
ZW50c1swXTp2b2lkIDApfX0se2dldDpmdW5jdGlvbihlKXt2YXIgdD1yLmdldEVudHJ5KHRoaXMs
ZSk7cmV0dXJuIHQmJnQudn0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuZGVmKHRoaXMsMD09
PWU/MDplLHQpfX0sciwhMCl9LE5IYUo6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIndDc28iKSxv
PW4oIkRJVlAiKSxpPW4oIktPcmQiKSxhPXIuaGFzLGM9ci5nZXQsdT1yLmtleSxzPWZ1bmN0aW9u
KGUsdCxuKXtpZihhKGUsdCxuKSlyZXR1cm4gYyhlLHQsbik7dmFyIHI9aSh0KTtyZXR1cm4gbnVs
bCE9PXI/cyhlLHIsbik6dm9pZCAwfTtyLmV4cCh7Z2V0TWV0YWRhdGE6ZnVuY3Rpb24oZSx0KXty
ZXR1cm4gcyhlLG8odCksYXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDp1KGFyZ3VtZW50c1syXSkp
fX0pfSxPeklxOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5leHBvcnRzPSJ1bmRlZmluZWQiIT10eXBl
b2Ygd2luZG93JiZ3aW5kb3cuTWF0aD09TWF0aD93aW5kb3c6InVuZGVmaW5lZCIhPXR5cGVvZiBz
ZWxmJiZzZWxmLk1hdGg9PU1hdGg/c2VsZjpGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpOyJudW1i
ZXIiPT10eXBlb2YgX19nJiYoX19nPW4pfSxQSEN4OmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1
bmN0aW9uKGUsdCxuKXt2YXIgcj12b2lkIDA9PT1uO3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAwOnJl
dHVybiByP2UoKTplLmNhbGwobik7Y2FzZSAxOnJldHVybiByP2UodFswXSk6ZS5jYWxsKG4sdFsw
XSk7Y2FzZSAyOnJldHVybiByP2UodFswXSx0WzFdKTplLmNhbGwobix0WzBdLHRbMV0pO2Nhc2Ug
MzpyZXR1cm4gcj9lKHRbMF0sdFsxXSx0WzJdKTplLmNhbGwobix0WzBdLHRbMV0sdFsyXSk7Y2Fz
ZSA0OnJldHVybiByP2UodFswXSx0WzFdLHRbMl0sdFszXSk6ZS5jYWxsKG4sdFswXSx0WzFdLHRb
Ml0sdFszXSl9cmV0dXJuIGUuYXBwbHkobix0KX19LFBIcWg6ZnVuY3Rpb24oZSx0LG4pe3ZhciBy
PW4oIlE2TmYiKSxvPW4oIi93aHUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHIobyhl
KSl9fSxQdVRkOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJEczVQIiksbz1uKCJLT3JkIiksaT1u
KCJESVZQIik7cihyLlMsIlJlZmxlY3QiLHtnZXRQcm90b3R5cGVPZjpmdW5jdGlvbihlKXtyZXR1
cm4gbyhpKGUpKX19KX0sUTZOZjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigieWRENSIpO2UuZXhw
b3J0cz1PYmplY3QoInoiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKT9PYmplY3Q6ZnVuY3Rpb24o
ZSl7cmV0dXJuIlN0cmluZyI9PXIoZSk/ZS5zcGxpdCgiIik6T2JqZWN0KGUpfX0sUUc3dTpmdW5j
dGlvbihlLHQsbil7dmFyIHI9bigidm1TTyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBu
PVtdO3JldHVybiByKGUsITEsbi5wdXNoLG4sdCksbn19LFFLWG06ZnVuY3Rpb24oZSx0KXtlLmV4
cG9ydHM9ImNvbnN0cnVjdG9yLGhhc093blByb3BlcnR5LGlzUHJvdG90eXBlT2YscHJvcGVydHlJ
c0VudW1lcmFibGUsdG9Mb2NhbGVTdHJpbmcsdG9TdHJpbmcsdmFsdWVPZiIuc3BsaXQoIiwiKX0s
UWgxNDpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiUmVHdSIpLG89bigiUUtYbSIpO2UuZXhwb3J0
cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSxvKX19LFIzQVA6ZnVuY3Rpb24o
ZSx0LG4pe3ZhciByPW4oIk96SXEiKSxvPW4oIjJwMXEiKSxpPW4oIldCY0wiKSxhPW4oInVsVFki
KSgic3JjIiksYz0idG9TdHJpbmciLHU9RnVuY3Rpb25bY10scz0oIiIrdSkuc3BsaXQoYyk7bigi
N2dYMCIpLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHUuY2FsbChlKX0sKGUuZXhw
b3J0cz1mdW5jdGlvbihlLHQsbixjKXt2YXIgdT0iZnVuY3Rpb24iPT10eXBlb2Ygbjt1JiYoaShu
LCJuYW1lIil8fG8obiwibmFtZSIsdCkpLGVbdF0hPT1uJiYodSYmKGkobixhKXx8byhuLGEsZVt0
XT8iIitlW3RdOnMuam9pbihTdHJpbmcodCkpKSksZT09PXI/ZVt0XT1uOmM/ZVt0XT9lW3RdPW46
byhlLHQsbik6KGRlbGV0ZSBlW3RdLG8oZSx0LG4pKSl9KShGdW5jdGlvbi5wcm90b3R5cGUsYyxm
dW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzJiZ0aGlzW2FdfHx1LmNhbGwo
dGhpcyl9KX0sUmVHdTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiV0JjTCIpLG89bigiUEhxaCIp
LGk9bigib3Q1cyIpKCExKSxhPW4oIm1aT04iKSgiSUVfUFJPVE8iKTtlLmV4cG9ydHM9ZnVuY3Rp
b24oZSx0KXt2YXIgbixjPW8oZSksdT0wLHM9W107Zm9yKG4gaW4gYyluIT1hJiZyKGMsbikmJnMu
cHVzaChuKTtmb3IoO3QubGVuZ3RoPnU7KXIoYyxuPXRbdSsrXSkmJih+aShzLG4pfHxzLnB1c2go
bikpO3JldHVybiBzfX0sUnc0SzpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiRHM1UCIpO3Ioci5T
LCJSZWZsZWN0Iix7b3duS2V5czpuKCJZVXI3Iil9KX0sU0hlOTpmdW5jdGlvbihlLHQsbil7dmFy
IHI9bigid0MxTiIpLG89bigia2tDdyIpKCJpdGVyYXRvciIpLGk9bigiYk4xcCIpO2UuZXhwb3J0
cz1uKCI3Z1gwIikuZ2V0SXRlcmF0b3JNZXRob2Q9ZnVuY3Rpb24oZSl7aWYodm9pZCAwIT1lKXJl
dHVybiBlW29dfHxlWyJAQGl0ZXJhdG9yIl18fGlbcihlKV19fSxTUHRVOmZ1bmN0aW9uKGUsdCxu
KXtmdW5jdGlvbiByKGUsdCl7dmFyIG4sYyxmPWFyZ3VtZW50cy5sZW5ndGg8Mz9lOmFyZ3VtZW50
c1syXTtyZXR1cm4gcyhlKT09PWY/ZVt0XToobj1vLmYoZSx0KSk/YShuLCJ2YWx1ZSIpP24udmFs
dWU6dm9pZCAwIT09bi5nZXQ/bi5nZXQuY2FsbChmKTp2b2lkIDA6dShjPWkoZSkpP3IoYyx0LGYp
OnZvaWQgMH12YXIgbz1uKCJ4OXp2IiksaT1uKCJLT3JkIiksYT1uKCJXQmNMIiksYz1uKCJEczVQ
IiksdT1uKCJVS00rIikscz1uKCJESVZQIik7YyhjLlMsIlJlZmxlY3QiLHtnZXQ6cn0pfSwiVUtN
KyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIm9iamVjdCI9PXR5
cGVvZiBlP251bGwhPT1lOiJmdW5jdGlvbiI9PXR5cGVvZiBlfX0sIlYzbC8iOmZ1bmN0aW9uKGUs
dCl7ZS5leHBvcnRzPSExfSxWV2dGOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJPeklxIiksbz0i
X19jb3JlLWpzX3NoYXJlZF9fIixpPXJbb118fChyW29dPXt9KTtlLmV4cG9ydHM9ZnVuY3Rpb24o
ZSl7cmV0dXJuIGlbZV18fChpW2VdPXt9KX19LFdCY0w6ZnVuY3Rpb24oZSx0KXt2YXIgbj17fS5o
YXNPd25Qcm9wZXJ0eTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5jYWxsKGUsdCl9
fSxXY08xOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJSZUd1Iiksbz1uKCJRS1htIikuY29uY2F0
KCJsZW5ndGgiLCJwcm90b3R5cGUiKTt0LmY9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1
bmN0aW9uKGUpe3JldHVybiByKGUsbyl9fSxYN2FLOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmlj
dCI7dmFyIHI9bigiRHM1UCIpLG89bigiRElWUCIpLGk9ZnVuY3Rpb24oZSl7dGhpcy5fdD1vKGUp
LHRoaXMuX2k9MDt2YXIgdCxuPXRoaXMuX2s9W107Zm9yKHQgaW4gZSluLnB1c2godCl9O24oIklS
SjMiKShpLCJPYmplY3QiLGZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLG49dC5faztkb3tpZih0Ll9p
Pj1uLmxlbmd0aClyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fXdoaWxlKCEoKGU9blt0Ll9p
KytdKWluIHQuX3QpKTtyZXR1cm57dmFsdWU6ZSxkb25lOiExfX0pLHIoci5TLCJSZWZsZWN0Iix7
ZW51bWVyYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaShlKX19KX0sWE8xUjpmdW5jdGlvbihl
LHQsbil7dmFyIHI9bigieWRENSIpO2UuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihl
KXtyZXR1cm4iQXJyYXkiPT1yKGUpfX0sWFMyNTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3Qi
O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1u
KCIydEZOIiksbz0obi5uKHIpLG4oIkNoR3IiKSksaT0obi5uKG8pLG4oIlpTUjEiKSk7bi5uKGkp
fSxYU09aOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCJmdW5jdGlvbiIh
PXR5cGVvZiBlKXRocm93IFR5cGVFcnJvcihlKyIgaXMgbm90IGEgZnVuY3Rpb24hIik7cmV0dXJu
IGV9fSxYdlVzOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJESVZQIik7ZS5leHBvcnRzPWZ1bmN0
aW9uKGUsdCxuLG8pe3RyeXtyZXR1cm4gbz90KHIobilbMF0sblsxXSk6dChuKX1jYXRjaCh0KXt2
YXIgaT1lLnJldHVybjt0aHJvdyB2b2lkIDAhPT1pJiZyKGkuY2FsbChlKSksdH19fSxZMU4zOmZ1
bmN0aW9uKGUsdCl7dC5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN9LFkxYUE6ZnVuY3Rp
b24oZSx0KXt0LmY9e30ucHJvcGVydHlJc0VudW1lcmFibGV9LFlVcjc6ZnVuY3Rpb24oZSx0LG4p
e3ZhciByPW4oIldjTzEiKSxvPW4oIlkxTjMiKSxpPW4oIkRJVlAiKSxhPW4oIk96SXEiKS5SZWZs
ZWN0O2UuZXhwb3J0cz1hJiZhLm93bktleXN8fGZ1bmN0aW9uKGUpe3ZhciB0PXIuZihpKGUpKSxu
PW8uZjtyZXR1cm4gbj90LmNvbmNhdChuKGUpKTp0fX0sWkRYbTpmdW5jdGlvbihlLHQsbil7InVz
ZSBzdHJpY3QiO3ZhciByLG89bigiTGhUYSIpKDApLGk9bigiUjNBUCIpLGE9bigiMWFBMCIpLGM9
bigib1lkNyIpLHU9bigiZkpTeCIpLHM9bigiVUtNKyIpLGY9YS5nZXRXZWFrLGw9T2JqZWN0Lmlz
RXh0ZW5zaWJsZSxwPXUudWZzdG9yZSxoPXt9LHY9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9u
KCl7cmV0dXJuIGUodGhpcyxhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCl9
fSxkPXtnZXQ6ZnVuY3Rpb24oZSl7aWYocyhlKSl7dmFyIHQ9ZihlKTtyZXR1cm4hMD09PXQ/cCh0
aGlzKS5nZXQoZSk6dD90W3RoaXMuX2ldOnZvaWQgMH19LHNldDpmdW5jdGlvbihlLHQpe3JldHVy
biB1LmRlZih0aGlzLGUsdCl9fSx5PWUuZXhwb3J0cz1uKCIwUmloIikoIldlYWtNYXAiLHYsZCx1
LCEwLCEwKTs3IT0obmV3IHkpLnNldCgoT2JqZWN0LmZyZWV6ZXx8T2JqZWN0KShoKSw3KS5nZXQo
aCkmJihyPXUuZ2V0Q29uc3RydWN0b3IodiksYyhyLnByb3RvdHlwZSxkKSxhLk5FRUQ9ITAsbyhb
ImRlbGV0ZSIsImhhcyIsImdldCIsInNldCJdLGZ1bmN0aW9uKGUpe3ZhciB0PXkucHJvdG90eXBl
LG49dFtlXTtpKHQsZSxmdW5jdGlvbih0LG8pe2lmKHModCkmJiFsKHQpKXt0aGlzLl9mfHwodGhp
cy5fZj1uZXcgcik7dmFyIGk9dGhpcy5fZltlXSh0LG8pO3JldHVybiJzZXQiPT1lP3RoaXM6aX1y
ZXR1cm4gbi5jYWxsKHRoaXMsdCxvKX0pfSkpfSxaU1IxOmZ1bmN0aW9uKGUsdCxuKXsoZnVuY3Rp
b24oZSl7LyoqCisqIEBsaWNlbnNlCisqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorKgorKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
biBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCisqLworIWZ1bmN0aW9uKGUsdCl7dCgp
fSgwLGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQoZSx0KXtmb3IodmFyIG49ZS5s
ZW5ndGgtMTtuPj0wO24tLSkiZnVuY3Rpb24iPT10eXBlb2YgZVtuXSYmKGVbbl09Wm9uZS5jdXJy
ZW50LndyYXAoZVtuXSx0KyJfIituKSk7cmV0dXJuIGV9ZnVuY3Rpb24gbihlLG4pe2Zvcih2YXIg
cj1lLmNvbnN0cnVjdG9yLm5hbWUsbz1mdW5jdGlvbihvKXt2YXIgaT1uW29dLGE9ZVtpXTthJiYo
ZVtpXT1mdW5jdGlvbihlKXt2YXIgbj1mdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHRoaXMsdChh
cmd1bWVudHMscisiLiIraSkpfTtyZXR1cm4gdShuLGUpLG59KGEpKX0saT0wO2k8bi5sZW5ndGg7
aSsrKW8oaSl9ZnVuY3Rpb24gcihlLHQsbil7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihlLHQpO2lmKCFyJiZuKXtPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4s
dCkmJihyPXtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfWlmKHImJnIuY29uZmlndXJh
YmxlKXtkZWxldGUgci53cml0YWJsZSxkZWxldGUgci52YWx1ZTt2YXIgbz1yLmdldCxpPXQuc3Vi
c3RyKDIpLGE9TygiXyIrdCk7ci5zZXQ9ZnVuY3Rpb24odCl7dmFyIG49dGhpcztpZihufHxlIT09
RHx8KG49RCksbil7dmFyIHI9blthXTtpZihyJiZuLnJlbW92ZUV2ZW50TGlzdGVuZXIoaSxyKSwi
ZnVuY3Rpb24iPT10eXBlb2YgdCl7dmFyIG89ZnVuY3Rpb24oZSl7dmFyIG49dC5hcHBseSh0aGlz
LGFyZ3VtZW50cyk7cmV0dXJuIHZvaWQgMD09bnx8bnx8ZS5wcmV2ZW50RGVmYXVsdCgpLG59O25b
YV09byxuLmFkZEV2ZW50TGlzdGVuZXIoaSxvLCExKX1lbHNlIG5bYV09bnVsbH19LHIuZ2V0PWZ1
bmN0aW9uKCl7dmFyIG49dGhpcztpZihufHxlIT09RHx8KG49RCksIW4pcmV0dXJuIG51bGw7aWYo
bi5oYXNPd25Qcm9wZXJ0eShhKSlyZXR1cm4gblthXTtpZihvKXt2YXIgaT1vJiZvLmFwcGx5KHRo
aXMpO2lmKGkpcmV0dXJuIHIuc2V0LmFwcGx5KHRoaXMsW2ldKSwiZnVuY3Rpb24iPT10eXBlb2Yg
bi5yZW1vdmVBdHRyaWJ1dGUmJm4ucmVtb3ZlQXR0cmlidXRlKHQpLGl9cmV0dXJuIG51bGx9LE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShlLHQscil9fWZ1bmN0aW9uIG8oZSx0LG4pe2lmKHQpZm9yKHZh
ciBvPTA7bzx0Lmxlbmd0aDtvKyspcihlLCJvbiIrdFtvXSxuKTtlbHNle3ZhciBpPVtdO2Zvcih2
YXIgYSBpbiBlKSJvbiI9PWEuc3Vic3RyKDAsMikmJmkucHVzaChhKTtmb3IodmFyIGM9MDtjPGku
bGVuZ3RoO2MrKylyKGUsaVtjXSxuKX19ZnVuY3Rpb24gaShlKXt2YXIgbj1EW2VdO2lmKG4pe0Rb
TyhlKV09bixEW2VdPWZ1bmN0aW9uKCl7dmFyIHI9dChhcmd1bWVudHMsZSk7c3dpdGNoKHIubGVu
Z3RoKXtjYXNlIDA6dGhpc1t6XT1uZXcgbjticmVhaztjYXNlIDE6dGhpc1t6XT1uZXcgbihyWzBd
KTticmVhaztjYXNlIDI6dGhpc1t6XT1uZXcgbihyWzBdLHJbMV0pO2JyZWFrO2Nhc2UgMzp0aGlz
W3pdPW5ldyBuKHJbMF0sclsxXSxyWzJdKTticmVhaztjYXNlIDQ6dGhpc1t6XT1uZXcgbihyWzBd
LHJbMV0sclsyXSxyWzNdKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiQXJnIGxpc3Qg
dG9vIGxvbmcuIil9fSx1KERbZV0sbik7dmFyIHIsbz1uZXcgbihmdW5jdGlvbigpe30pO2Zvcihy
IGluIG8pIlhNTEh0dHBSZXF1ZXN0Ij09PWUmJiJyZXNwb25zZUJsb2IiPT09cnx8ZnVuY3Rpb24o
dCl7ImZ1bmN0aW9uIj09dHlwZW9mIG9bdF0/RFtlXS5wcm90b3R5cGVbdF09ZnVuY3Rpb24oKXty
ZXR1cm4gdGhpc1t6XVt0XS5hcHBseSh0aGlzW3pdLGFyZ3VtZW50cyl9Ok9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShEW2VdLnByb3RvdHlwZSx0LHtzZXQ6ZnVuY3Rpb24obil7ImZ1bmN0aW9uIj09dHlw
ZW9mIG4/KHRoaXNbel1bdF09Wm9uZS5jdXJyZW50LndyYXAobixlKyIuIit0KSx1KHRoaXNbel1b
dF0sbikpOnRoaXNbel1bdF09bn0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbel1bdF19fSl9
KHIpO2ZvcihyIGluIG4pInByb3RvdHlwZSIhPT1yJiZuLmhhc093blByb3BlcnR5KHIpJiYoRFtl
XVtyXT1uW3JdKX19ZnVuY3Rpb24gYShlLHQsbil7Zm9yKHZhciByPWU7ciYmIXIuaGFzT3duUHJv
cGVydHkodCk7KXI9T2JqZWN0LmdldFByb3RvdHlwZU9mKHIpOyFyJiZlW3RdJiYocj1lKTt2YXIg
byxpPU8odCk7aWYociYmIShvPXJbaV0pKXtvPXJbaV09clt0XTt2YXIgYT1uKG8saSx0KTtyW3Rd
PWZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcyxhcmd1bWVudHMpfSx1KHJbdF0sbyl9cmV0dXJuIG99
ZnVuY3Rpb24gYyhlLHQsbil7ZnVuY3Rpb24gcihlKXt2YXIgdD1lLmRhdGE7cmV0dXJuIHQuYXJn
c1t0LmNhbGxiYWNrSW5kZXhdPWZ1bmN0aW9uKCl7ZS5pbnZva2UuYXBwbHkodGhpcyxhcmd1bWVu
dHMpfSxvLmFwcGx5KHQudGFyZ2V0LHQuYXJncyksZX12YXIgbz1udWxsO289YShlLHQsZnVuY3Rp
b24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbyl7dmFyIGk9bih0LG8pO2lmKGkuY2FsbGJhY2tJbmRl
eD49MCYmImZ1bmN0aW9uIj09dHlwZW9mIG9baS5jYWxsYmFja0luZGV4XSl7cmV0dXJuIFpvbmUu
Y3VycmVudC5zY2hlZHVsZU1hY3JvVGFzayhpLm5hbWUsb1tpLmNhbGxiYWNrSW5kZXhdLGkscixu
dWxsKX1yZXR1cm4gZS5hcHBseSh0LG8pfX0pfWZ1bmN0aW9uIHUoZSx0KXtlW08oIk9yaWdpbmFs
RGVsZWdhdGUiKV09dH1mdW5jdGlvbiBzKCl7aWYoailyZXR1cm4gWjtqPSEwO3RyeXt2YXIgZT13
aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtlLmluZGV4T2YoIk1TSUUgIik7cmV0dXJuLTE9PT1l
LmluZGV4T2YoIk1TSUUgIikmJi0xPT09ZS5pbmRleE9mKCJUcmlkZW50LyIpJiYtMT09PWUuaW5k
ZXhPZigiRWRnZS8iKXx8KFo9ITApLFp9Y2F0Y2goZSl7fX1mdW5jdGlvbiBmKGUsdCxuKXtmdW5j
dGlvbiByKHQsbil7aWYoIXQpcmV0dXJuITE7dmFyIHI9ITA7biYmdm9pZCAwIT09bi51c2VHbG9i
YWxDYWxsYmFjayYmKHI9bi51c2VHbG9iYWxDYWxsYmFjayk7dmFyIHY9biYmbi52YWxpZGF0ZUhh
bmRsZXIsZz0hMDtuJiZ2b2lkIDAhPT1uLmNoZWNrRHVwbGljYXRlJiYoZz1uLmNoZWNrRHVwbGlj
YXRlKTt2YXIgaz0hMTtuJiZ2b2lkIDAhPT1uLnJldHVyblRhcmdldCYmKGs9bi5yZXR1cm5UYXJn
ZXQpO2Zvcih2YXIgbT10O20mJiFtLmhhc093blByb3BlcnR5KG8pOyltPU9iamVjdC5nZXRQcm90
b3R5cGVPZihtKTtpZighbSYmdFtvXSYmKG09dCksIW0pcmV0dXJuITE7aWYobVtzXSlyZXR1cm4h
MTt2YXIgYixfPXt9LHc9bVtzXT1tW29dLFQ9bVtPKGkpXT1tW2ldLEQ9bVtPKGEpXT1tW2FdLEU9
bVtPKGMpXT1tW2NdO24mJm4ucHJlcGVuZEV2ZW50TGlzdGVuZXJGbk5hbWUmJihiPW1bTyhuLnBy
ZXBlbmRFdmVudExpc3RlbmVyRm5OYW1lKV09bVtuLnByZXBlbmRFdmVudExpc3RlbmVyRm5OYW1l
XSk7dmFyIFA9ZnVuY3Rpb24oZSl7aWYoIV8uaXNFeGlzdGluZylyZXR1cm4gdy5hcHBseShfLnRh
cmdldCxbXy5ldmVudE5hbWUsXy5jYXB0dXJlP3k6ZCxfLm9wdGlvbnNdKX0sUz1mdW5jdGlvbihl
KXtpZighZS5pc1JlbW92ZWQpe3ZhciB0PU1bZS5ldmVudE5hbWVdLG49dm9pZCAwO3QmJihuPXRb
ZS5jYXB0dXJlP0k6Q10pO3ZhciByPW4mJmUudGFyZ2V0W25dO2lmKHIpZm9yKHZhciBvPTA7bzxy
Lmxlbmd0aDtvKyspe3ZhciBpPXJbb107aWYoaT09PWUpe3Iuc3BsaWNlKG8sMSksZS5pc1JlbW92
ZWQ9ITAsMD09PXIubGVuZ3RoJiYoZS5hbGxSZW1vdmVkPSEwLGUudGFyZ2V0W25dPW51bGwpO2Jy
ZWFrfX19aWYoZS5hbGxSZW1vdmVkKXJldHVybiBULmFwcGx5KGUudGFyZ2V0LFtlLmV2ZW50TmFt
ZSxlLmNhcHR1cmU/eTpkLGUub3B0aW9uc10pfSx4PWZ1bmN0aW9uKGUpe3JldHVybiB3LmFwcGx5
KF8udGFyZ2V0LFtfLmV2ZW50TmFtZSxlLmludm9rZSxfLm9wdGlvbnNdKX0sej1mdW5jdGlvbihl
KXtyZXR1cm4gYi5hcHBseShfLnRhcmdldCxbXy5ldmVudE5hbWUsZS5pbnZva2UsXy5vcHRpb25z
XSl9LGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFQuYXBwbHkoZS50YXJnZXQsW2UuZXZlbnROYW1lLGUu
aW52b2tlLGUub3B0aW9uc10pfSxaPXI/UDp4LE49cj9TOmosWD1mdW5jdGlvbihlLHQpe3ZhciBu
PXR5cGVvZiB0O3JldHVybiBuPT09cSYmZS5jYWxsYmFjaz09PXR8fG49PT1IJiZlLm9yaWdpbmFs
RGVsZWdhdGU9PT10fSxCPW4mJm4uY29tcGFyZVRhc2tDYWxsYmFja1ZzRGVsZWdhdGU/bi5jb21w
YXJlVGFza0NhbGxiYWNrVnNEZWxlZ2F0ZTpYLEs9ZnVuY3Rpb24odCxuLG8saSxhLGMpe3JldHVy
biB2b2lkIDA9PT1hJiYoYT0hMSksdm9pZCAwPT09YyYmKGM9ITEpLGZ1bmN0aW9uKCl7dmFyIHU9
dGhpc3x8ZSxzPShab25lLmN1cnJlbnQsYXJndW1lbnRzWzFdKTtpZighcylyZXR1cm4gdC5hcHBs
eSh0aGlzLGFyZ3VtZW50cyk7dmFyIGY9ITE7aWYodHlwZW9mIHMhPT1xKXtpZighcy5oYW5kbGVF
dmVudClyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7Zj0hMH1pZighdnx8dih0LHMsdSxh
cmd1bWVudHMpKXt2YXIgbCxwPWFyZ3VtZW50c1swXSxoPWFyZ3VtZW50c1syXSxkPSExO3ZvaWQg
MD09PWg/bD0hMTohMD09PWg/bD0hMDohMT09PWg/bD0hMToobD0hIWgmJiEhaC5jYXB0dXJlLGQ9
ISFoJiYhIWgub25jZSk7dmFyIHksaz1ab25lLmN1cnJlbnQsbT1NW3BdO2lmKG0peT1tW2w/STpD
XTtlbHNle3ZhciBiPXArQyx3PXArSSxUPVUrYixPPVUrdztNW3BdPXt9LE1bcF1bQ109VCxNW3Bd
W0ldPU8seT1sP086VH12YXIgRD11W3ldLEU9ITE7aWYoRCl7aWYoRT0hMCxnKWZvcih2YXIgUD0w
O1A8RC5sZW5ndGg7UCsrKWlmKEIoRFtQXSxzKSlyZXR1cm59ZWxzZSBEPXVbeV09W107dmFyIFMs
eD11LmNvbnN0cnVjdG9yW0ZdLHo9TFt4XTt6JiYoUz16W3BdKSxTfHwoUz14K24rcCksXy5vcHRp
b25zPWgsZCYmKF8ub3B0aW9ucy5vbmNlPSExKSxfLnRhcmdldD11LF8uY2FwdHVyZT1sLF8uZXZl
bnROYW1lPXAsXy5pc0V4aXN0aW5nPUU7dmFyIGo9cj9SOm51bGwsWj1rLnNjaGVkdWxlRXZlbnRU
YXNrKFMscyxqLG8saSk7cmV0dXJuIGQmJihoLm9uY2U9ITApLFoub3B0aW9ucz1oLFoudGFyZ2V0
PXUsWi5jYXB0dXJlPWwsWi5ldmVudE5hbWU9cCxmJiYoWi5vcmlnaW5hbERlbGVnYXRlPXMpLGM/
RC51bnNoaWZ0KFopOkQucHVzaChaKSxhP3U6dm9pZCAwfX19O3JldHVybiBtW29dPUsodyxmLFos
TixrKSxiJiYobVtwXT1LKGIsaCx6LE4saywhMCkpLG1baV09ZnVuY3Rpb24oKXt2YXIgdCxuPXRo
aXN8fGUscj1hcmd1bWVudHNbMF0sbz1hcmd1bWVudHNbMl07dD12b2lkIDAhPT1vJiYoITA9PT1v
fHwhMSE9PW8mJighIW8mJiEhby5jYXB0dXJlKSk7dmFyIGk9YXJndW1lbnRzWzFdO2lmKCFpKXJl
dHVybiBULmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZighdnx8dihULGksbixhcmd1bWVudHMpKXt2
YXIgYSxjPU1bcl07YyYmKGE9Y1t0P0k6Q10pO3ZhciB1PWEmJm5bYV07aWYodSlmb3IodmFyIHM9
MDtzPHUubGVuZ3RoO3MrKyl7dmFyIGY9dVtzXTtpZihCKGYsaSkpcmV0dXJuIHUuc3BsaWNlKHMs
MSksZi5pc1JlbW92ZWQ9ITAsMD09PXUubGVuZ3RoJiYoZi5hbGxSZW1vdmVkPSEwLG5bYV09bnVs
bCksdm9pZCBmLnpvbmUuY2FuY2VsVGFzayhmKX19fSxtW2FdPWZ1bmN0aW9uKCl7Zm9yKHZhciB0
PXRoaXN8fGUsbj1hcmd1bWVudHNbMF0scj1bXSxvPWwodCxuKSxpPTA7aTxvLmxlbmd0aDtpKysp
e3ZhciBhPW9baV0sYz1hLm9yaWdpbmFsRGVsZWdhdGU/YS5vcmlnaW5hbERlbGVnYXRlOmEuY2Fs
bGJhY2s7ci5wdXNoKGMpfXJldHVybiByfSxtW2NdPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpc3x8ZSxu
PWFyZ3VtZW50c1swXTtpZihuKXt2YXIgcj1NW25dO2lmKHIpe3ZhciBvPXJbQ10sYT1yW0ldLHU9
dFtvXSxzPXRbYV07aWYodSlmb3IodmFyIGY9dS5zbGljZSgpLGw9MDtsPGYubGVuZ3RoO2wrKyl7
dmFyIHA9ZltsXSxoPXAub3JpZ2luYWxEZWxlZ2F0ZT9wLm9yaWdpbmFsRGVsZWdhdGU6cC5jYWxs
YmFjazt0aGlzW2ldLmFwcGx5KHRoaXMsW24saCxwLm9wdGlvbnNdKX1pZihzKWZvcih2YXIgZj1z
LnNsaWNlKCksbD0wO2w8Zi5sZW5ndGg7bCsrKXt2YXIgcD1mW2xdLGg9cC5vcmlnaW5hbERlbGVn
YXRlP3Aub3JpZ2luYWxEZWxlZ2F0ZTpwLmNhbGxiYWNrO3RoaXNbaV0uYXBwbHkodGhpcyxbbixo
LHAub3B0aW9uc10pfX19ZWxzZXtmb3IodmFyIHY9T2JqZWN0LmtleXModCksbD0wO2w8di5sZW5n
dGg7bCsrKXt2YXIgZD12W2xdLHk9QS5leGVjKGQpLGc9eSYmeVsxXTtnJiYicmVtb3ZlTGlzdGVu
ZXIiIT09ZyYmdGhpc1tjXS5hcHBseSh0aGlzLFtnXSl9dGhpc1tjXS5hcHBseSh0aGlzLFsicmVt
b3ZlTGlzdGVuZXIiXSl9fSx1KG1bb10sdyksdShtW2ldLFQpLEUmJnUobVtjXSxFKSxEJiZ1KG1b
YV0sRCksITB9Zm9yKHZhciBvPW4mJm4uYWRkRXZlbnRMaXN0ZW5lckZuTmFtZXx8ImFkZEV2ZW50
TGlzdGVuZXIiLGk9biYmbi5yZW1vdmVFdmVudExpc3RlbmVyRm5OYW1lfHwicmVtb3ZlRXZlbnRM
aXN0ZW5lciIsYT1uJiZuLmxpc3RlbmVyc0ZuTmFtZXx8ImV2ZW50TGlzdGVuZXJzIixjPW4mJm4u
cmVtb3ZlQWxsRm5OYW1lfHwicmVtb3ZlQWxsTGlzdGVuZXJzIixzPU8obyksZj0iLiIrbysiOiIs
cD0icHJlcGVuZExpc3RlbmVyIixoPSIuIitwKyI6Iix2PWZ1bmN0aW9uKGUsdCxuKXtpZighZS5p
c1JlbW92ZWQpe3ZhciByPWUuY2FsbGJhY2s7dHlwZW9mIHI9PT1IJiZyLmhhbmRsZUV2ZW50JiYo
ZS5jYWxsYmFjaz1mdW5jdGlvbihlKXtyZXR1cm4gci5oYW5kbGVFdmVudChlKX0sZS5vcmlnaW5h
bERlbGVnYXRlPXIpLGUuaW52b2tlKGUsdCxbbl0pO3ZhciBvPWUub3B0aW9ucztpZihvJiYib2Jq
ZWN0Ij09dHlwZW9mIG8mJm8ub25jZSl7dmFyIGE9ZS5vcmlnaW5hbERlbGVnYXRlP2Uub3JpZ2lu
YWxEZWxlZ2F0ZTplLmNhbGxiYWNrO3RbaV0uYXBwbHkodCxbbi50eXBlLGEsb10pfX19LGQ9ZnVu
Y3Rpb24odCl7dmFyIG49dGhpc3x8ZSxyPW5bTVt0LnR5cGVdW0NdXTtpZihyKWlmKDE9PT1yLmxl
bmd0aCl2KHJbMF0sbix0KTtlbHNlIGZvcih2YXIgbz1yLnNsaWNlKCksaT0wO2k8by5sZW5ndGg7
aSsrKXYob1tpXSxuLHQpfSx5PWZ1bmN0aW9uKHQpe3ZhciBuPXRoaXN8fGUscj1uW01bdC50eXBl
XVtJXV07aWYocilpZigxPT09ci5sZW5ndGgpdihyWzBdLG4sdCk7ZWxzZSBmb3IodmFyIG89ci5z
bGljZSgpLGk9MDtpPG8ubGVuZ3RoO2krKyl2KG9baV0sbix0KX0sZz1bXSxrPTA7azx0Lmxlbmd0
aDtrKyspZ1trXT1yKHRba10sbik7cmV0dXJuIGd9ZnVuY3Rpb24gbChlLHQpe3ZhciBuPVtdO2Zv
cih2YXIgciBpbiBlKXt2YXIgbz1BLmV4ZWMociksaT1vJiZvWzFdO2lmKGkmJighdHx8aT09PXQp
KXt2YXIgYT1lW3JdO2lmKGEpZm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspbi5wdXNoKGFbY10p
fX1yZXR1cm4gbn0vKioKKyAqIEBsaWNlbnNlCisgKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorICogZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQorICovCitmdW5jdGlv
biBwKGUsdCxuLHIpe2Z1bmN0aW9uIG8odCl7ZnVuY3Rpb24gbigpe3RyeXt0Lmludm9rZS5hcHBs
eSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXsibnVtYmVyIj09dHlwZW9mIHIuaGFuZGxlSWQmJmRl
bGV0ZSBzW3IuaGFuZGxlSWRdfX12YXIgcj10LmRhdGE7cmV0dXJuIHIuYXJnc1swXT1uLHIuaGFu
ZGxlSWQ9Yy5hcHBseShlLHIuYXJncyksIm51bWJlciI9PXR5cGVvZiByLmhhbmRsZUlkJiYoc1ty
LmhhbmRsZUlkXT10KSx0fWZ1bmN0aW9uIGkoZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlLmRh
dGEuaGFuZGxlSWQmJmRlbGV0ZSBzW2UuZGF0YS5oYW5kbGVJZF0sdShlLmRhdGEuaGFuZGxlSWQp
fXZhciBjPW51bGwsdT1udWxsO3QrPXIsbis9cjt2YXIgcz17fTtjPWEoZSx0LGZ1bmN0aW9uKG4p
e3JldHVybiBmdW5jdGlvbihhLGMpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjWzBdKXt2YXIgdT1a
b25lLmN1cnJlbnQscz17aGFuZGxlSWQ6bnVsbCxpc1BlcmlvZGljOiJJbnRlcnZhbCI9PT1yLGRl
bGF5OiJUaW1lb3V0Ij09PXJ8fCJJbnRlcnZhbCI9PT1yP2NbMV18fDA6bnVsbCxhcmdzOmN9LGY9
dS5zY2hlZHVsZU1hY3JvVGFzayh0LGNbMF0scyxvLGkpO2lmKCFmKXJldHVybiBmO3ZhciBsPWYu
ZGF0YS5oYW5kbGVJZDtyZXR1cm4gbCYmbC5yZWYmJmwudW5yZWYmJiJmdW5jdGlvbiI9PXR5cGVv
ZiBsLnJlZiYmImZ1bmN0aW9uIj09dHlwZW9mIGwudW5yZWYmJihmLnJlZj1sLnJlZi5iaW5kKGwp
LGYudW5yZWY9bC51bnJlZi5iaW5kKGwpKSxmfXJldHVybiBuLmFwcGx5KGUsYyl9fSksdT1hKGUs
bixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24obixyKXt2YXIgbz0ibnVtYmVyIj09dHlwZW9m
IHJbMF0/c1tyWzBdXTpyWzBdO28mJiJzdHJpbmciPT10eXBlb2Ygby50eXBlPyJub3RTY2hlZHVs
ZWQiIT09by5zdGF0ZSYmKG8uY2FuY2VsRm4mJm8uZGF0YS5pc1BlcmlvZGljfHwwPT09by5ydW5D
b3VudCkmJm8uem9uZS5jYW5jZWxUYXNrKG8pOnQuYXBwbHkoZSxyKX19KX1mdW5jdGlvbiBoKCl7
T2JqZWN0LmRlZmluZVByb3BlcnR5PWZ1bmN0aW9uKGUsdCxuKXtpZihkKGUsdCkpdGhyb3cgbmV3
IFR5cGVFcnJvcigiQ2Fubm90IGFzc2lnbiB0byByZWFkIG9ubHkgcHJvcGVydHkgJyIrdCsiJyBv
ZiAiK2UpO3ZhciByPW4uY29uZmlndXJhYmxlO3JldHVybiJwcm90b3R5cGUiIT09dCYmKG49eShl
LHQsbikpLGcoZSx0LG4scil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzPWZ1bmN0aW9uKGUsdCl7
cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7T2JqZWN0LmRlZmluZVBy
b3BlcnR5KGUsbix0W25dKX0pLGV9LE9iamVjdC5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4i
b2JqZWN0IiE9dHlwZW9mIHR8fE9iamVjdC5pc0Zyb3plbih0KXx8T2JqZWN0LmtleXModCkuZm9y
RWFjaChmdW5jdGlvbihuKXt0W25dPXkoZSxuLHRbbl0pfSksQihlLHQpfSxPYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yPWZ1bmN0aW9uKGUsdCl7dmFyIG49WChlLHQpO3JldHVybiBkKGUs
dCkmJihuLmNvbmZpZ3VyYWJsZT0hMSksbn19ZnVuY3Rpb24gdihlLHQsbil7dmFyIHI9bi5jb25m
aWd1cmFibGU7cmV0dXJuIG49eShlLHQsbiksZyhlLHQsbixyKX1mdW5jdGlvbiBkKGUsdCl7cmV0
dXJuIGUmJmVbS10mJmVbS11bdF19ZnVuY3Rpb24geShlLHQsbil7cmV0dXJuIG4uY29uZmlndXJh
YmxlPSEwLG4uY29uZmlndXJhYmxlfHwoZVtLXXx8TihlLEsse3dyaXRhYmxlOiEwLHZhbHVlOnt9
fSksZVtLXVt0XT0hMCksbn1mdW5jdGlvbiBnKGUsdCxuLHIpe3RyeXtyZXR1cm4gTihlLHQsbil9
Y2F0Y2goaSl7aWYoIW4uY29uZmlndXJhYmxlKXRocm93IGk7dm9pZCAwPT09cj9kZWxldGUgbi5j
b25maWd1cmFibGU6bi5jb25maWd1cmFibGU9cjt0cnl7cmV0dXJuIE4oZSx0LG4pfWNhdGNoKHIp
e3ZhciBvPW51bGw7dHJ5e289SlNPTi5zdHJpbmdpZnkobil9Y2F0Y2goZSl7bz1vLnRvU3RyaW5n
KCl9Y29uc29sZS5sb2coIkF0dGVtcHRpbmcgdG8gY29uZmlndXJlICciK3QrIicgd2l0aCBkZXNj
cmlwdG9yICciK28rIicgb24gb2JqZWN0ICciK2UrIicgYW5kIGdvdCBlcnJvciwgZ2l2aW5nIHVw
OiAiK3IpfX19LyoqCisgKiBAbGljZW5zZQorICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCisgKgorICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyAqIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKKyAqLworZnVuY3Rpb24g
ayhlLHQpe3ZhciBuPXQuV2ViU29ja2V0O3QuRXZlbnRUYXJnZXR8fGYoZSx0LFtuLnByb3RvdHlw
ZV0pLHQuV2ViU29ja2V0PWZ1bmN0aW9uKGUsdCl7dmFyIHIsaSxhPWFyZ3VtZW50cy5sZW5ndGg+
MT9uZXcgbihlLHQpOm5ldyBuKGUpLGM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihh
LCJvbm1lc3NhZ2UiKTtyZXR1cm4gYyYmITE9PT1jLmNvbmZpZ3VyYWJsZT8ocj1PYmplY3QuY3Jl
YXRlKGEpLGk9YSxbImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwic2Vu
ZCIsImNsb3NlIl0uZm9yRWFjaChmdW5jdGlvbihlKXtyW2VdPWZ1bmN0aW9uKCl7cmV0dXJuIGFb
ZV0uYXBwbHkoYSxhcmd1bWVudHMpfX0pKTpyPWEsbyhyLFsiY2xvc2UiLCJlcnJvciIsIm1lc3Nh
Z2UiLCJvcGVuIl0saSkscn07Zm9yKHZhciByIGluIG4pdC5XZWJTb2NrZXRbcl09bltyXX1mdW5j
dGlvbiBtKGUsdCl7aWYoIVB8fHgpe3ZhciBuPSJ1bmRlZmluZWQiIT10eXBlb2YgV2ViU29ja2V0
O2lmKGIoKSl7aWYoUyl7byh3aW5kb3csdWUsT2JqZWN0LmdldFByb3RvdHlwZU9mKHdpbmRvdykp
LG8oRG9jdW1lbnQucHJvdG90eXBlLHVlKSx2b2lkIDAhPT13aW5kb3cuU1ZHRWxlbWVudCYmbyh3
aW5kb3cuU1ZHRWxlbWVudC5wcm90b3R5cGUsdWUpLG8oRWxlbWVudC5wcm90b3R5cGUsdWUpLG8o
SFRNTEVsZW1lbnQucHJvdG90eXBlLHVlKSxvKEhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLFEp
LG8oSFRNTEZyYW1lU2V0RWxlbWVudC5wcm90b3R5cGUsRy5jb25jYXQocmUpKSxvKEhUTUxCb2R5
RWxlbWVudC5wcm90b3R5cGUsRy5jb25jYXQocmUpKSxvKEhUTUxGcmFtZUVsZW1lbnQucHJvdG90
eXBlLG5lKSxvKEhUTUxJRnJhbWVFbGVtZW50LnByb3RvdHlwZSxuZSk7dmFyIHI9d2luZG93LkhU
TUxNYXJxdWVlRWxlbWVudDtyJiZvKHIucHJvdG90eXBlLG9lKX1vKFhNTEh0dHBSZXF1ZXN0LnBy
b3RvdHlwZSxpZSk7dmFyIGE9dC5YTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0O2EmJm8oYSYmYS5w
cm90b3R5cGUsaWUpLCJ1bmRlZmluZWQiIT10eXBlb2YgSURCSW5kZXgmJihvKElEQkluZGV4LnBy
b3RvdHlwZSxhZSksbyhJREJSZXF1ZXN0LnByb3RvdHlwZSxhZSksbyhJREJPcGVuREJSZXF1ZXN0
LnByb3RvdHlwZSxhZSksbyhJREJEYXRhYmFzZS5wcm90b3R5cGUsYWUpLG8oSURCVHJhbnNhY3Rp
b24ucHJvdG90eXBlLGFlKSxvKElEQkN1cnNvci5wcm90b3R5cGUsYWUpKSxuJiZvKFdlYlNvY2tl
dC5wcm90b3R5cGUsY2UpfWVsc2UgXygpLGkoIlhNTEh0dHBSZXF1ZXN0IiksbiYmayhlLHQpfX1m
dW5jdGlvbiBiKCl7aWYoKFN8fHgpJiYhT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihI
VE1MRWxlbWVudC5wcm90b3R5cGUsIm9uY2xpY2siKSYmInVuZGVmaW5lZCIhPXR5cGVvZiBFbGVt
ZW50KXt2YXIgZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEVsZW1lbnQucHJvdG90
eXBlLCJvbmNsaWNrIik7aWYoZSYmIWUuY29uZmlndXJhYmxlKXJldHVybiExfXZhciB0PU9iamVj
dC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLCJvbnJl
YWR5c3RhdGVjaGFuZ2UiKTtpZih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MSHR0cFJlcXVl
c3QucHJvdG90eXBlLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3Vy
YWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMH19KTt2YXIgbj1uZXcgWE1MSHR0cFJlcXVl
c3Qscj0hIW4ub25yZWFkeXN0YXRlY2hhbmdlO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHko
WE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLHR8fHt9KSxyfU9i
amVjdC5kZWZpbmVQcm9wZXJ0eShYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUsIm9ucmVhZHlzdGF0
ZWNoYW5nZSIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3Jl
dHVybiB0aGlzW08oImZha2VvbnJlYWR5c3RhdGVjaGFuZ2UiKV19LHNldDpmdW5jdGlvbihlKXt0
aGlzW08oImZha2VvbnJlYWR5c3RhdGVjaGFuZ2UiKV09ZX19KTt2YXIgbj1uZXcgWE1MSHR0cFJl
cXVlc3Qsbz1mdW5jdGlvbigpe307bi5vbnJlYWR5c3RhdGVjaGFuZ2U9bzt2YXIgcj1uW08oImZh
a2VvbnJlYWR5c3RhdGVjaGFuZ2UiKV09PT1vO3JldHVybiBuLm9ucmVhZHlzdGF0ZWNoYW5nZT1u
dWxsLHJ9ZnVuY3Rpb24gXygpe2Zvcih2YXIgZT1mdW5jdGlvbihlKXt2YXIgdD11ZVtlXSxuPSJv
biIrdDtzZWxmLmFkZEV2ZW50TGlzdGVuZXIodCxmdW5jdGlvbihlKXt2YXIgdCxyLG89ZS50YXJn
ZXQ7Zm9yKHI9bz9vLmNvbnN0cnVjdG9yLm5hbWUrIi4iK246InVua25vd24uIituO287KW9bbl0m
JiFvW25dW3NlXSYmKHQ9Wm9uZS5jdXJyZW50LndyYXAob1tuXSxyKSx0W3NlXT1vW25dLG9bbl09
dCksbz1vLnBhcmVudEVsZW1lbnR9LCEwKX0sdD0wO3Q8dWUubGVuZ3RoO3QrKyllKHQpfS8qKgor
ICogQGxpY2Vuc2UKKyAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgorICoKKyAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0
IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCisgKi8KK2Z1bmN0aW9uIHcoZSx0KXt2YXIgbj0i
QW5jaG9yLEFyZWEsQXVkaW8sQlIsQmFzZSxCYXNlRm9udCxCb2R5LEJ1dHRvbixDYW52YXMsQ29u
dGVudCxETGlzdCxEaXJlY3RvcnksRGl2LEVtYmVkLEZpZWxkU2V0LEZvbnQsRm9ybSxGcmFtZSxG
cmFtZVNldCxIUixIZWFkLEhlYWRpbmcsSHRtbCxJRnJhbWUsSW1hZ2UsSW5wdXQsS2V5Z2VuLExJ
LExhYmVsLExlZ2VuZCxMaW5rLE1hcCxNYXJxdWVlLE1lZGlhLE1lbnUsTWV0YSxNZXRlcixNb2Qs
T0xpc3QsT2JqZWN0LE9wdEdyb3VwLE9wdGlvbixPdXRwdXQsUGFyYWdyYXBoLFByZSxQcm9ncmVz
cyxRdW90ZSxTY3JpcHQsU2VsZWN0LFNvdXJjZSxTcGFuLFN0eWxlLFRhYmxlQ2FwdGlvbixUYWJs
ZUNlbGwsVGFibGVDb2wsVGFibGUsVGFibGVSb3csVGFibGVTZWN0aW9uLFRleHRBcmVhLFRpdGxl
LFRyYWNrLFVMaXN0LFVua25vd24sVmlkZW8iLHI9IkFwcGxpY2F0aW9uQ2FjaGUsRXZlbnRTb3Vy
Y2UsRmlsZVJlYWRlcixJbnB1dE1ldGhvZENvbnRleHQsTWVkaWFDb250cm9sbGVyLE1lc3NhZ2VQ
b3J0LE5vZGUsUGVyZm9ybWFuY2UsU1ZHRWxlbWVudEluc3RhbmNlLFNoYXJlZFdvcmtlcixUZXh0
VHJhY2ssVGV4dFRyYWNrQ3VlLFRleHRUcmFja0xpc3QsV2ViS2l0TmFtZWRGbG93LFdpbmRvdyxX
b3JrZXIsV29ya2VyR2xvYmFsU2NvcGUsWE1MSHR0cFJlcXVlc3QsWE1MSHR0cFJlcXVlc3RFdmVu
dFRhcmdldCxYTUxIdHRwUmVxdWVzdFVwbG9hZCxJREJSZXF1ZXN0LElEQk9wZW5EQlJlcXVlc3Qs
SURCRGF0YWJhc2UsSURCVHJhbnNhY3Rpb24sSURCQ3Vyc29yLERCSW5kZXgsV2ViU29ja2V0Ii5z
cGxpdCgiLCIpLG89IkV2ZW50VGFyZ2V0IixpPVtdLGE9ZS53dGYsYz1uLnNwbGl0KCIsIik7YT9p
PWMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiJIVE1MIitlKyJFbGVtZW50In0pLmNvbmNhdChyKTpl
W29dP2kucHVzaChvKTppPXI7Zm9yKHZhciB1PWUuX19ab25lX2Rpc2FibGVfSUVfY2hlY2t8fCEx
LGw9ZS5fX1pvbmVfZW5hYmxlX2Nyb3NzX2NvbnRleHRfY2hlY2t8fCExLHA9cygpLGg9Ii5hZGRF
dmVudExpc3RlbmVyOiIsdj0iW29iamVjdCBGdW5jdGlvbldyYXBwZXJdIixkPSJmdW5jdGlvbiBf
X0JST1dTRVJUT09MU19DT05TT0xFX1NBRkVGVU5DKCkgeyBbbmF0aXZlIGNvZGVdIH0iLHk9MDt5
PHVlLmxlbmd0aDt5Kyspe3ZhciBnPXVlW3ldLGs9ZytDLG09ZytJLGI9VStrLF89VSttO01bZ109
e30sTVtnXVtDXT1iLE1bZ11bSV09X31mb3IodmFyIHk9MDt5PG4ubGVuZ3RoO3krKylmb3IodmFy
IHc9Y1t5XSxUPUxbd109e30sTz0wO088dWUubGVuZ3RoO08rKyl7dmFyIGc9dWVbT107VFtnXT13
K2grZ31mb3IodmFyIEQ9ZnVuY3Rpb24oZSx0LG4scil7aWYoIXUmJnApaWYobCl0cnl7dmFyIG89
dC50b1N0cmluZygpO2lmKG89PT12fHxvPT1kKXJldHVybiBlLmFwcGx5KG4sciksITF9Y2F0Y2go
dCl7cmV0dXJuIGUuYXBwbHkobixyKSwhMX1lbHNle3ZhciBvPXQudG9TdHJpbmcoKTtpZihvPT09
dnx8bz09ZClyZXR1cm4gZS5hcHBseShuLHIpLCExfWVsc2UgaWYobCl0cnl7dC50b1N0cmluZygp
fWNhdGNoKHQpe3JldHVybiBlLmFwcGx5KG4sciksITF9cmV0dXJuITB9LEU9W10seT0wO3k8aS5s
ZW5ndGg7eSsrKXt2YXIgUD1lW2lbeV1dO0UucHVzaChQJiZQLnByb3RvdHlwZSl9cmV0dXJuIGYo
ZSxFLHt2YWxpZGF0ZUhhbmRsZXI6RH0pLHQucGF0Y2hFdmVudFRhcmdldD1mLCEwfS8qKgorICog
QGxpY2Vuc2UKKyAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
ICoKKyAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0
dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCisgKi8KK2Z1bmN0aW9uIFQoZSl7aWYoKFN8fHgpJiYi
cmVnaXN0ZXJFbGVtZW50ImluIGUuZG9jdW1lbnQpe3ZhciB0PWRvY3VtZW50LnJlZ2lzdGVyRWxl
bWVudCxuPVsiY3JlYXRlZENhbGxiYWNrIiwiYXR0YWNoZWRDYWxsYmFjayIsImRldGFjaGVkQ2Fs
bGJhY2siLCJhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2siXTtkb2N1bWVudC5yZWdpc3RlckVsZW1l
bnQ9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gciYmci5wcm90b3R5cGUmJm4uZm9yRWFjaChmdW5jdGlv
bihlKXt2YXIgdD0iRG9jdW1lbnQucmVnaXN0ZXJFbGVtZW50OjoiK2U7aWYoci5wcm90b3R5cGUu
aGFzT3duUHJvcGVydHkoZSkpe3ZhciBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
ci5wcm90b3R5cGUsZSk7biYmbi52YWx1ZT8obi52YWx1ZT1ab25lLmN1cnJlbnQud3JhcChuLnZh
bHVlLHQpLHYoci5wcm90b3R5cGUsZSxuKSk6ci5wcm90b3R5cGVbZV09Wm9uZS5jdXJyZW50Lndy
YXAoci5wcm90b3R5cGVbZV0sdCl9ZWxzZSByLnByb3RvdHlwZVtlXSYmKHIucHJvdG90eXBlW2Vd
PVpvbmUuY3VycmVudC53cmFwKHIucHJvdG90eXBlW2VdLHQpKX0pLHQuYXBwbHkoZG9jdW1lbnQs
W2Uscl0pfSx1KGRvY3VtZW50LnJlZ2lzdGVyRWxlbWVudCx0KX19LyoqCisgKiBAbGljZW5zZQor
ICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKyAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1
bGFyLmlvL2xpY2Vuc2UKKyAqLworIWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7YyYmYy5tYXJr
JiZjLm1hcmsoZSl9ZnVuY3Rpb24gbihlLHQpe2MmJmMubWVhc3VyZSYmYy5tZWFzdXJlKGUsdCl9
ZnVuY3Rpb24gcih0KXswPT09aiYmMD09PWQubGVuZ3RoJiYoZVtoXT9lW2hdLnJlc29sdmUoMClb
dl0obyk6ZVtwXShvLDApKSx0JiZkLnB1c2godCl9ZnVuY3Rpb24gbygpe2lmKCF5KXtmb3IoeT0h
MDtkLmxlbmd0aDspe3ZhciBlPWQ7ZD1bXTtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyl7dmFy
IG49ZVt0XTt0cnl7bi56b25lLnJ1blRhc2sobixudWxsLG51bGwpfWNhdGNoKGUpe1Mub25Vbmhh
bmRsZWRFcnJvcihlKX19fXVbYSgiaWdub3JlQ29uc29sZUVycm9yVW5jYXVnaHRFcnJvciIpXTtT
Lm1pY3JvdGFza0RyYWluRG9uZSgpLHk9ITF9fWZ1bmN0aW9uIGkoKXt9ZnVuY3Rpb24gYShlKXty
ZXR1cm4iX196b25lX3N5bWJvbF9fIitlfXZhciBjPWUucGVyZm9ybWFuY2U7aWYodCgiWm9uZSIp
LGUuWm9uZSl0aHJvdyBuZXcgRXJyb3IoIlpvbmUgYWxyZWFkeSBsb2FkZWQuIik7dmFyIHU9ZnVu
Y3Rpb24oKXtmdW5jdGlvbiByKGUsdCl7dGhpcy5fcHJvcGVydGllcz1udWxsLHRoaXMuX3BhcmVu
dD1lLHRoaXMuX25hbWU9dD90Lm5hbWV8fCJ1bm5hbWVkIjoiPHJvb3Q+Iix0aGlzLl9wcm9wZXJ0
aWVzPXQmJnQucHJvcGVydGllc3x8e30sdGhpcy5fem9uZURlbGVnYXRlPW5ldyBmKHRoaXMsdGhp
cy5fcGFyZW50JiZ0aGlzLl9wYXJlbnQuX3pvbmVEZWxlZ2F0ZSx0KX1yZXR1cm4gci5hc3NlcnRa
b25lUGF0Y2hlZD1mdW5jdGlvbigpe2lmKGUuUHJvbWlzZSE9PVAuWm9uZUF3YXJlUHJvbWlzZSl0
aHJvdyBuZXcgRXJyb3IoIlpvbmUuanMgaGFzIGRldGVjdGVkIHRoYXQgWm9uZUF3YXJlUHJvbWlz
ZSBgKHdpbmRvd3xnbG9iYWwpLlByb21pc2VgIGhhcyBiZWVuIG92ZXJ3cml0dGVuLlxuTW9zdCBs
aWtlbHkgY2F1c2UgaXMgdGhhdCBhIFByb21pc2UgcG9seWZpbGwgaGFzIGJlZW4gbG9hZGVkIGFm
dGVyIFpvbmUuanMgKFBvbHlmaWxsaW5nIFByb21pc2UgYXBpIGlzIG5vdCBuZWNlc3Nhcnkgd2hl
biB6b25lLmpzIGlzIGxvYWRlZC4gSWYgeW91IG11c3QgbG9hZCBvbmUsIGRvIHNvIGJlZm9yZSBs
b2FkaW5nIHpvbmUuanMuKSIpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkociwicm9vdCIse2dldDpm
dW5jdGlvbigpe2Zvcih2YXIgZT1yLmN1cnJlbnQ7ZS5wYXJlbnQ7KWU9ZS5wYXJlbnQ7cmV0dXJu
IGV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5
KHIsImN1cnJlbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4geC56b25lfSxlbnVtZXJhYmxlOiEw
LGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJjdXJyZW50VGFzayIs
e2dldDpmdW5jdGlvbigpe3JldHVybiB6fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0p
LHIuX19sb2FkX3BhdGNoPWZ1bmN0aW9uKG8saSl7aWYoUC5oYXNPd25Qcm9wZXJ0eShvKSl0aHJv
dyBFcnJvcigiQWxyZWFkeSBsb2FkZWQgcGF0Y2g6ICIrbyk7aWYoIWVbIl9fWm9uZV9kaXNhYmxl
XyIrb10pe3ZhciBhPSJab25lOiIrbzt0KGEpLFBbb109aShlLHIsUyksbihhLGEpfX0sT2JqZWN0
LmRlZmluZVByb3BlcnR5KHIucHJvdG90eXBlLCJwYXJlbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1
cm4gdGhpcy5fcGFyZW50fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwibmFtZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0
aGlzLl9uYW1lfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHIucHJvdG90eXBlLmdl
dD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldFpvbmVXaXRoKGUpO2lmKHQpcmV0dXJuIHQuX3By
b3BlcnRpZXNbZV19LHIucHJvdG90eXBlLmdldFpvbmVXaXRoPWZ1bmN0aW9uKGUpe2Zvcih2YXIg
dD10aGlzO3Q7KXtpZih0Ll9wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KGUpKXJldHVybiB0O3Q9
dC5fcGFyZW50fXJldHVybiBudWxsfSxyLnByb3RvdHlwZS5mb3JrPWZ1bmN0aW9uKGUpe2lmKCFl
KXRocm93IG5ldyBFcnJvcigiWm9uZVNwZWMgcmVxdWlyZWQhIik7cmV0dXJuIHRoaXMuX3pvbmVE
ZWxlZ2F0ZS5mb3JrKHRoaXMsZSl9LHIucHJvdG90eXBlLndyYXA9ZnVuY3Rpb24oZSx0KXtpZigi
ZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGluZyBmdW5jdGlvbiBn
b3Q6ICIrZSk7dmFyIG49dGhpcy5fem9uZURlbGVnYXRlLmludGVyY2VwdCh0aGlzLGUsdCkscj10
aGlzO3JldHVybiBmdW5jdGlvbigpe3JldHVybiByLnJ1bkd1YXJkZWQobix0aGlzLGFyZ3VtZW50
cyx0KX19LHIucHJvdG90eXBlLnJ1bj1mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT10JiYodD12
b2lkIDApLHZvaWQgMD09PW4mJihuPW51bGwpLHZvaWQgMD09PXImJihyPW51bGwpLHg9e3BhcmVu
dDp4LHpvbmU6dGhpc307dHJ5e3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuaW52b2tlKHRoaXMs
ZSx0LG4scil9ZmluYWxseXt4PXgucGFyZW50fX0sci5wcm90b3R5cGUucnVuR3VhcmRlZD1mdW5j
dGlvbihlLHQsbixyKXt2b2lkIDA9PT10JiYodD1udWxsKSx2b2lkIDA9PT1uJiYobj1udWxsKSx2
b2lkIDA9PT1yJiYocj1udWxsKSx4PXtwYXJlbnQ6eCx6b25lOnRoaXN9O3RyeXt0cnl7cmV0dXJu
IHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnZva2UodGhpcyxlLHQsbixyKX1jYXRjaChlKXtpZih0aGlz
Ll96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcyxlKSl0aHJvdyBlfX1maW5hbGx5e3g9eC5w
YXJlbnR9fSxyLnByb3RvdHlwZS5ydW5UYXNrPWZ1bmN0aW9uKGUsdCxuKXtpZihlLnpvbmUhPXRo
aXMpdGhyb3cgbmV3IEVycm9yKCJBIHRhc2sgY2FuIG9ubHkgYmUgcnVuIGluIHRoZSB6b25lIG9m
IGNyZWF0aW9uISAoQ3JlYXRpb246ICIrKGUuem9uZXx8ZykubmFtZSsiOyBFeGVjdXRpb246ICIr
dGhpcy5uYW1lKyIpIik7aWYoZS5zdGF0ZSE9PWt8fGUudHlwZSE9PUUpe3ZhciByPWUuc3RhdGUh
PV87ciYmZS5fdHJhbnNpdGlvblRvKF8sYiksZS5ydW5Db3VudCsrO3ZhciBvPXo7ej1lLHg9e3Bh
cmVudDp4LHpvbmU6dGhpc307dHJ5e2UudHlwZT09RCYmZS5kYXRhJiYhZS5kYXRhLmlzUGVyaW9k
aWMmJihlLmNhbmNlbEZuPW51bGwpO3RyeXtyZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmludm9r
ZVRhc2sodGhpcyxlLHQsbil9Y2F0Y2goZSl7aWYodGhpcy5fem9uZURlbGVnYXRlLmhhbmRsZUVy
cm9yKHRoaXMsZSkpdGhyb3cgZX19ZmluYWxseXtlLnN0YXRlIT09ayYmZS5zdGF0ZSE9PVQmJihl
LnR5cGU9PUV8fGUuZGF0YSYmZS5kYXRhLmlzUGVyaW9kaWM/ciYmZS5fdHJhbnNpdGlvblRvKGIs
Xyk6KGUucnVuQ291bnQ9MCx0aGlzLl91cGRhdGVUYXNrQ291bnQoZSwtMSksciYmZS5fdHJhbnNp
dGlvblRvKGssXyxrKSkpLHg9eC5wYXJlbnQsej1vfX19LHIucHJvdG90eXBlLnNjaGVkdWxlVGFz
az1mdW5jdGlvbihlKXtpZihlLnpvbmUmJmUuem9uZSE9PXRoaXMpZm9yKHZhciB0PXRoaXM7dDsp
e2lmKHQ9PT1lLnpvbmUpdGhyb3cgRXJyb3IoImNhbiBub3QgcmVzY2hlZHVsZSB0YXNrIHRvICIr
dGhpcy5uYW1lKyIgd2hpY2ggaXMgZGVzY2VuZGFudHMgb2YgdGhlIG9yaWdpbmFsIHpvbmUgIitl
LnpvbmUubmFtZSk7dD10LnBhcmVudH1lLl90cmFuc2l0aW9uVG8obSxrKTt2YXIgbj1bXTtlLl96
b25lRGVsZWdhdGVzPW4sZS5fem9uZT10aGlzO3RyeXtlPXRoaXMuX3pvbmVEZWxlZ2F0ZS5zY2hl
ZHVsZVRhc2sodGhpcyxlKX1jYXRjaCh0KXt0aHJvdyBlLl90cmFuc2l0aW9uVG8oVCxtLGspLHRo
aXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLHQpLHR9cmV0dXJuIGUuX3pvbmVEZWxl
Z2F0ZXM9PT1uJiZ0aGlzLl91cGRhdGVUYXNrQ291bnQoZSwxKSxlLnN0YXRlPT1tJiZlLl90cmFu
c2l0aW9uVG8oYixtKSxlfSxyLnByb3RvdHlwZS5zY2hlZHVsZU1pY3JvVGFzaz1mdW5jdGlvbihl
LHQsbixyKXtyZXR1cm4gdGhpcy5zY2hlZHVsZVRhc2sobmV3IGwoTyxlLHQsbixyLG51bGwpKX0s
ci5wcm90b3R5cGUuc2NoZWR1bGVNYWNyb1Rhc2s9ZnVuY3Rpb24oZSx0LG4scixvKXtyZXR1cm4g
dGhpcy5zY2hlZHVsZVRhc2sobmV3IGwoRCxlLHQsbixyLG8pKX0sci5wcm90b3R5cGUuc2NoZWR1
bGVFdmVudFRhc2s9ZnVuY3Rpb24oZSx0LG4scixvKXtyZXR1cm4gdGhpcy5zY2hlZHVsZVRhc2so
bmV3IGwoRSxlLHQsbixyLG8pKX0sci5wcm90b3R5cGUuY2FuY2VsVGFzaz1mdW5jdGlvbihlKXtp
ZihlLnpvbmUhPXRoaXMpdGhyb3cgbmV3IEVycm9yKCJBIHRhc2sgY2FuIG9ubHkgYmUgY2FuY2Vs
bGVkIGluIHRoZSB6b25lIG9mIGNyZWF0aW9uISAoQ3JlYXRpb246ICIrKGUuem9uZXx8ZykubmFt
ZSsiOyBFeGVjdXRpb246ICIrdGhpcy5uYW1lKyIpIik7ZS5fdHJhbnNpdGlvblRvKHcsYixfKTt0
cnl7dGhpcy5fem9uZURlbGVnYXRlLmNhbmNlbFRhc2sodGhpcyxlKX1jYXRjaCh0KXt0aHJvdyBl
Ll90cmFuc2l0aW9uVG8oVCx3KSx0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcyx0
KSx0fXJldHVybiB0aGlzLl91cGRhdGVUYXNrQ291bnQoZSwtMSksZS5fdHJhbnNpdGlvblRvKGss
dyksZS5ydW5Db3VudD0wLGV9LHIucHJvdG90eXBlLl91cGRhdGVUYXNrQ291bnQ9ZnVuY3Rpb24o
ZSx0KXt2YXIgbj1lLl96b25lRGVsZWdhdGVzOy0xPT10JiYoZS5fem9uZURlbGVnYXRlcz1udWxs
KTtmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyluW3JdLl91cGRhdGVUYXNrQ291bnQoZS50eXBl
LHQpfSxyfSgpO3UuX19zeW1ib2xfXz1hO3ZhciBzPXtuYW1lOiIiLG9uSGFzVGFzazpmdW5jdGlv
bihlLHQsbixyKXtyZXR1cm4gZS5oYXNUYXNrKG4scil9LG9uU2NoZWR1bGVUYXNrOmZ1bmN0aW9u
KGUsdCxuLHIpe3JldHVybiBlLnNjaGVkdWxlVGFzayhuLHIpfSxvbkludm9rZVRhc2s6ZnVuY3Rp
b24oZSx0LG4scixvLGkpe3JldHVybiBlLmludm9rZVRhc2sobixyLG8saSl9LG9uQ2FuY2VsVGFz
azpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gZS5jYW5jZWxUYXNrKG4scil9fSxmPWZ1bmN0aW9u
KCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy5fdGFza0NvdW50cz17bWljcm9UYXNrOjAsbWFjcm9U
YXNrOjAsZXZlbnRUYXNrOjB9LHRoaXMuem9uZT1lLHRoaXMuX3BhcmVudERlbGVnYXRlPXQsdGhp
cy5fZm9ya1pTPW4mJihuJiZuLm9uRm9yaz9uOnQuX2ZvcmtaUyksdGhpcy5fZm9ya0RsZ3Q9biYm
KG4ub25Gb3JrP3Q6dC5fZm9ya0RsZ3QpLHRoaXMuX2ZvcmtDdXJyWm9uZT1uJiYobi5vbkZvcms/
dGhpcy56b25lOnQuem9uZSksdGhpcy5faW50ZXJjZXB0WlM9biYmKG4ub25JbnRlcmNlcHQ/bjp0
Ll9pbnRlcmNlcHRaUyksdGhpcy5faW50ZXJjZXB0RGxndD1uJiYobi5vbkludGVyY2VwdD90OnQu
X2ludGVyY2VwdERsZ3QpLHRoaXMuX2ludGVyY2VwdEN1cnJab25lPW4mJihuLm9uSW50ZXJjZXB0
P3RoaXMuem9uZTp0LnpvbmUpLHRoaXMuX2ludm9rZVpTPW4mJihuLm9uSW52b2tlP246dC5faW52
b2tlWlMpLHRoaXMuX2ludm9rZURsZ3Q9biYmKG4ub25JbnZva2U/dDp0Ll9pbnZva2VEbGd0KSx0
aGlzLl9pbnZva2VDdXJyWm9uZT1uJiYobi5vbkludm9rZT90aGlzLnpvbmU6dC56b25lKSx0aGlz
Ll9oYW5kbGVFcnJvclpTPW4mJihuLm9uSGFuZGxlRXJyb3I/bjp0Ll9oYW5kbGVFcnJvclpTKSx0
aGlzLl9oYW5kbGVFcnJvckRsZ3Q9biYmKG4ub25IYW5kbGVFcnJvcj90OnQuX2hhbmRsZUVycm9y
RGxndCksdGhpcy5faGFuZGxlRXJyb3JDdXJyWm9uZT1uJiYobi5vbkhhbmRsZUVycm9yP3RoaXMu
em9uZTp0LnpvbmUpLHRoaXMuX3NjaGVkdWxlVGFza1pTPW4mJihuLm9uU2NoZWR1bGVUYXNrP246
dC5fc2NoZWR1bGVUYXNrWlMpLHRoaXMuX3NjaGVkdWxlVGFza0RsZ3Q9biYmKG4ub25TY2hlZHVs
ZVRhc2s/dDp0Ll9zY2hlZHVsZVRhc2tEbGd0KSx0aGlzLl9zY2hlZHVsZVRhc2tDdXJyWm9uZT1u
JiYobi5vblNjaGVkdWxlVGFzaz90aGlzLnpvbmU6dC56b25lKSx0aGlzLl9pbnZva2VUYXNrWlM9
biYmKG4ub25JbnZva2VUYXNrP246dC5faW52b2tlVGFza1pTKSx0aGlzLl9pbnZva2VUYXNrRGxn
dD1uJiYobi5vbkludm9rZVRhc2s/dDp0Ll9pbnZva2VUYXNrRGxndCksdGhpcy5faW52b2tlVGFz
a0N1cnJab25lPW4mJihuLm9uSW52b2tlVGFzaz90aGlzLnpvbmU6dC56b25lKSx0aGlzLl9jYW5j
ZWxUYXNrWlM9biYmKG4ub25DYW5jZWxUYXNrP246dC5fY2FuY2VsVGFza1pTKSx0aGlzLl9jYW5j
ZWxUYXNrRGxndD1uJiYobi5vbkNhbmNlbFRhc2s/dDp0Ll9jYW5jZWxUYXNrRGxndCksdGhpcy5f
Y2FuY2VsVGFza0N1cnJab25lPW4mJihuLm9uQ2FuY2VsVGFzaz90aGlzLnpvbmU6dC56b25lKSx0
aGlzLl9oYXNUYXNrWlM9bnVsbCx0aGlzLl9oYXNUYXNrRGxndD1udWxsLHRoaXMuX2hhc1Rhc2tE
bGd0T3duZXI9bnVsbCx0aGlzLl9oYXNUYXNrQ3VyclpvbmU9bnVsbDt2YXIgcj1uJiZuLm9uSGFz
VGFzayxvPXQmJnQuX2hhc1Rhc2taUzsocnx8bykmJih0aGlzLl9oYXNUYXNrWlM9cj9uOnMsdGhp
cy5faGFzVGFza0RsZ3Q9dCx0aGlzLl9oYXNUYXNrRGxndE93bmVyPXRoaXMsdGhpcy5faGFzVGFz
a0N1cnJab25lPWUsbi5vblNjaGVkdWxlVGFza3x8KHRoaXMuX3NjaGVkdWxlVGFza1pTPXMsdGhp
cy5fc2NoZWR1bGVUYXNrRGxndD10LHRoaXMuX3NjaGVkdWxlVGFza0N1cnJab25lPXRoaXMuem9u
ZSksbi5vbkludm9rZVRhc2t8fCh0aGlzLl9pbnZva2VUYXNrWlM9cyx0aGlzLl9pbnZva2VUYXNr
RGxndD10LHRoaXMuX2ludm9rZVRhc2tDdXJyWm9uZT10aGlzLnpvbmUpLG4ub25DYW5jZWxUYXNr
fHwodGhpcy5fY2FuY2VsVGFza1pTPXMsdGhpcy5fY2FuY2VsVGFza0RsZ3Q9dCx0aGlzLl9jYW5j
ZWxUYXNrQ3VyclpvbmU9dGhpcy56b25lKSl9cmV0dXJuIGUucHJvdG90eXBlLmZvcms9ZnVuY3Rp
b24oZSx0KXtyZXR1cm4gdGhpcy5fZm9ya1pTP3RoaXMuX2ZvcmtaUy5vbkZvcmsodGhpcy5fZm9y
a0RsZ3QsdGhpcy56b25lLGUsdCk6bmV3IHUoZSx0KX0sZS5wcm90b3R5cGUuaW50ZXJjZXB0PWZ1
bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5faW50ZXJjZXB0WlM/dGhpcy5faW50ZXJjZXB0WlMu
b25JbnRlcmNlcHQodGhpcy5faW50ZXJjZXB0RGxndCx0aGlzLl9pbnRlcmNlcHRDdXJyWm9uZSxl
LHQsbik6dH0sZS5wcm90b3R5cGUuaW52b2tlPWZ1bmN0aW9uKGUsdCxuLHIsbyl7cmV0dXJuIHRo
aXMuX2ludm9rZVpTP3RoaXMuX2ludm9rZVpTLm9uSW52b2tlKHRoaXMuX2ludm9rZURsZ3QsdGhp
cy5faW52b2tlQ3VyclpvbmUsZSx0LG4scixvKTp0LmFwcGx5KG4scil9LGUucHJvdG90eXBlLmhh
bmRsZUVycm9yPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIXRoaXMuX2hhbmRsZUVycm9yWlN8fHRoaXMu
X2hhbmRsZUVycm9yWlMub25IYW5kbGVFcnJvcih0aGlzLl9oYW5kbGVFcnJvckRsZ3QsdGhpcy5f
aGFuZGxlRXJyb3JDdXJyWm9uZSxlLHQpfSxlLnByb3RvdHlwZS5zY2hlZHVsZVRhc2s9ZnVuY3Rp
b24oZSx0KXt2YXIgbj10O2lmKHRoaXMuX3NjaGVkdWxlVGFza1pTKXRoaXMuX2hhc1Rhc2taUyYm
bi5fem9uZURlbGVnYXRlcy5wdXNoKHRoaXMuX2hhc1Rhc2tEbGd0T3duZXIpLChuPXRoaXMuX3Nj
aGVkdWxlVGFza1pTLm9uU2NoZWR1bGVUYXNrKHRoaXMuX3NjaGVkdWxlVGFza0RsZ3QsdGhpcy5f
c2NoZWR1bGVUYXNrQ3VyclpvbmUsZSx0KSl8fChuPXQpO2Vsc2UgaWYodC5zY2hlZHVsZUZuKXQu
c2NoZWR1bGVGbih0KTtlbHNle2lmKHQudHlwZSE9Tyl0aHJvdyBuZXcgRXJyb3IoIlRhc2sgaXMg
bWlzc2luZyBzY2hlZHVsZUZuLiIpO3IodCl9cmV0dXJuIG59LGUucHJvdG90eXBlLmludm9rZVRh
c2s9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMuX2ludm9rZVRhc2taUz90aGlzLl9pbnZv
a2VUYXNrWlMub25JbnZva2VUYXNrKHRoaXMuX2ludm9rZVRhc2tEbGd0LHRoaXMuX2ludm9rZVRh
c2tDdXJyWm9uZSxlLHQsbixyKTp0LmNhbGxiYWNrLmFwcGx5KG4scil9LGUucHJvdG90eXBlLmNh
bmNlbFRhc2s9ZnVuY3Rpb24oZSx0KXt2YXIgbjtpZih0aGlzLl9jYW5jZWxUYXNrWlMpbj10aGlz
Ll9jYW5jZWxUYXNrWlMub25DYW5jZWxUYXNrKHRoaXMuX2NhbmNlbFRhc2tEbGd0LHRoaXMuX2Nh
bmNlbFRhc2tDdXJyWm9uZSxlLHQpO2Vsc2V7aWYoIXQuY2FuY2VsRm4pdGhyb3cgRXJyb3IoIlRh
c2sgaXMgbm90IGNhbmNlbGFibGUiKTtuPXQuY2FuY2VsRm4odCl9cmV0dXJuIG59LGUucHJvdG90
eXBlLmhhc1Rhc2s9ZnVuY3Rpb24oZSx0KXt0cnl7cmV0dXJuIHRoaXMuX2hhc1Rhc2taUyYmdGhp
cy5faGFzVGFza1pTLm9uSGFzVGFzayh0aGlzLl9oYXNUYXNrRGxndCx0aGlzLl9oYXNUYXNrQ3Vy
clpvbmUsZSx0KX1jYXRjaCh0KXt0aGlzLmhhbmRsZUVycm9yKGUsdCl9fSxlLnByb3RvdHlwZS5f
dXBkYXRlVGFza0NvdW50PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fdGFza0NvdW50cyxyPW5b
ZV0sbz1uW2VdPXIrdDtpZihvPDApdGhyb3cgbmV3IEVycm9yKCJNb3JlIHRhc2tzIGV4ZWN1dGVk
IHRoZW4gd2VyZSBzY2hlZHVsZWQuIik7aWYoMD09cnx8MD09byl7dmFyIGk9e21pY3JvVGFzazpu
Lm1pY3JvVGFzaz4wLG1hY3JvVGFzazpuLm1hY3JvVGFzaz4wLGV2ZW50VGFzazpuLmV2ZW50VGFz
az4wLGNoYW5nZTplfTt0aGlzLmhhc1Rhc2sodGhpcy56b25lLGkpfX0sZX0oKSxsPWZ1bmN0aW9u
KCl7ZnVuY3Rpb24gdChuLHIsbyxpLGEsYyl7dGhpcy5fem9uZT1udWxsLHRoaXMucnVuQ291bnQ9
MCx0aGlzLl96b25lRGVsZWdhdGVzPW51bGwsdGhpcy5fc3RhdGU9Im5vdFNjaGVkdWxlZCIsdGhp
cy50eXBlPW4sdGhpcy5zb3VyY2U9cix0aGlzLmRhdGE9aSx0aGlzLnNjaGVkdWxlRm49YSx0aGlz
LmNhbmNlbEZuPWMsdGhpcy5jYWxsYmFjaz1vO3ZhciB1PXRoaXM7bj09PUUmJmkmJmkuaXNVc2lu
Z0dsb2JhbENhbGxiYWNrP3RoaXMuaW52b2tlPXQuaW52b2tlVGFzazp0aGlzLmludm9rZT1mdW5j
dGlvbigpe3JldHVybiB0Lmludm9rZVRhc2suYXBwbHkoZSxbdSx0aGlzLGFyZ3VtZW50c10pfX1y
ZXR1cm4gdC5pbnZva2VUYXNrPWZ1bmN0aW9uKGUsdCxuKXtlfHwoZT10aGlzKSxqKys7dHJ5e3Jl
dHVybiBlLnJ1bkNvdW50KyssZS56b25lLnJ1blRhc2soZSx0LG4pfWZpbmFsbHl7MT09aiYmbygp
LGotLX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiem9uZSIse2dldDpmdW5j
dGlvbigpe3JldHVybiB0aGlzLl96b25lfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0p
LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwic3RhdGUiLHtnZXQ6ZnVuY3Rpb24o
KXtyZXR1cm4gdGhpcy5fc3RhdGV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5w
cm90b3R5cGUuY2FuY2VsU2NoZWR1bGVSZXF1ZXN0PWZ1bmN0aW9uKCl7dGhpcy5fdHJhbnNpdGlv
blRvKGssbSl9LHQucHJvdG90eXBlLl90cmFuc2l0aW9uVG89ZnVuY3Rpb24oZSx0LG4pe2lmKHRo
aXMuX3N0YXRlIT09dCYmdGhpcy5fc3RhdGUhPT1uKXRocm93IG5ldyBFcnJvcih0aGlzLnR5cGUr
IiAnIit0aGlzLnNvdXJjZSsiJzogY2FuIG5vdCB0cmFuc2l0aW9uIHRvICciK2UrIicsIGV4cGVj
dGluZyBzdGF0ZSAnIit0KyInIisobj8iIG9yICciK24rIiciOiIiKSsiLCB3YXMgJyIrdGhpcy5f
c3RhdGUrIicuIik7dGhpcy5fc3RhdGU9ZSxlPT1rJiYodGhpcy5fem9uZURlbGVnYXRlcz1udWxs
KX0sdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhJiZ2b2lk
IDAhPT10aGlzLmRhdGEuaGFuZGxlSWQ/dGhpcy5kYXRhLmhhbmRsZUlkOk9iamVjdC5wcm90b3R5
cGUudG9TdHJpbmcuY2FsbCh0aGlzKX0sdC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0
dXJue3R5cGU6dGhpcy50eXBlLHN0YXRlOnRoaXMuc3RhdGUsc291cmNlOnRoaXMuc291cmNlLHpv
bmU6dGhpcy56b25lLm5hbWUsaW52b2tlOnRoaXMuaW52b2tlLHNjaGVkdWxlRm46dGhpcy5zY2hl
ZHVsZUZuLGNhbmNlbEZuOnRoaXMuY2FuY2VsRm4scnVuQ291bnQ6dGhpcy5ydW5Db3VudCxjYWxs
YmFjazp0aGlzLmNhbGxiYWNrfX0sdH0oKSxwPWEoInNldFRpbWVvdXQiKSxoPWEoIlByb21pc2Ui
KSx2PWEoInRoZW4iKSxkPVtdLHk9ITEsZz17bmFtZToiTk8gWk9ORSJ9LGs9Im5vdFNjaGVkdWxl
ZCIsbT0ic2NoZWR1bGluZyIsYj0ic2NoZWR1bGVkIixfPSJydW5uaW5nIix3PSJjYW5jZWxpbmci
LFQ9InVua25vd24iLE89Im1pY3JvVGFzayIsRD0ibWFjcm9UYXNrIixFPSJldmVudFRhc2siLFA9
e30sUz17c3ltYm9sOmEsY3VycmVudFpvbmVGcmFtZTpmdW5jdGlvbigpe3JldHVybiB4fSxvblVu
aGFuZGxlZEVycm9yOmksbWljcm90YXNrRHJhaW5Eb25lOmksc2NoZWR1bGVNaWNyb1Rhc2s6cixz
aG93VW5jYXVnaHRFcnJvcjpmdW5jdGlvbigpe3JldHVybiF1W2EoImlnbm9yZUNvbnNvbGVFcnJv
clVuY2F1Z2h0RXJyb3IiKV19LHBhdGNoRXZlbnRUYXJnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX0s
cGF0Y2hPblByb3BlcnRpZXM6aSxwYXRjaE1ldGhvZDpmdW5jdGlvbigpe3JldHVybiBpfX0seD17
cGFyZW50Om51bGwsem9uZTpuZXcgdShudWxsLG51bGwpfSx6PW51bGwsaj0wO24oIlpvbmUiLCJa
b25lIiksZS5ab25lPXV9KCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3d8fCJ1bmRl
ZmluZWQiIT10eXBlb2Ygc2VsZiYmc2VsZnx8ZSk7LyoqCisgKiBAbGljZW5zZQorICogQ29weXJp
Z2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKyAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xp
Y2Vuc2UKKyAqLworWm9uZS5fX2xvYWRfcGF0Y2goIlpvbmVBd2FyZVByb21pc2UiLGZ1bmN0aW9u
KGUsdCxuKXtmdW5jdGlvbiByKGUpe24ub25VbmhhbmRsZWRFcnJvcihlKTt0cnl7dmFyIHI9dFto
KCJ1bmhhbmRsZWRQcm9taXNlUmVqZWN0aW9uSGFuZGxlciIpXTtyJiYiZnVuY3Rpb24iPT10eXBl
b2YgciYmci5hcHBseSh0aGlzLFtlXSl9Y2F0Y2goZSl7fX1mdW5jdGlvbiBvKGUpe3JldHVybiBl
JiZlLnRoZW59ZnVuY3Rpb24gaShlKXtyZXR1cm4gZX1mdW5jdGlvbiBhKGUpe3JldHVybiBELnJl
amVjdChlKX1mdW5jdGlvbiBjKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3RyeXt1KGUsdCxuKX1j
YXRjaCh0KXt1KGUsITEsdCl9fX1mdW5jdGlvbiB1KGUscixvKXt2YXIgaT1PKCk7aWYoZT09PW8p
dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJvbWlzZSByZXNvbHZlZCB3aXRoIGl0c2VsZiIpO2lmKGVb
Z109PT1iKXt2YXIgYT1udWxsO3RyeXsib2JqZWN0IiE9dHlwZW9mIG8mJiJmdW5jdGlvbiIhPXR5
cGVvZiBvfHwoYT1vJiZvLnRoZW4pfWNhdGNoKHQpe3JldHVybiBpKGZ1bmN0aW9uKCl7dShlLCEx
LHQpfSkoKSxlfWlmKHIhPT13JiZvIGluc3RhbmNlb2YgRCYmby5oYXNPd25Qcm9wZXJ0eShnKSYm
by5oYXNPd25Qcm9wZXJ0eShrKSYmb1tnXSE9PWIpcyhvKSx1KGUsb1tnXSxvW2tdKTtlbHNlIGlm
KHIhPT13JiYiZnVuY3Rpb24iPT10eXBlb2YgYSl0cnl7YS5hcHBseShvLFtpKGMoZSxyKSksaShj
KGUsITEpKV0pfWNhdGNoKHQpe2koZnVuY3Rpb24oKXt1KGUsITEsdCl9KSgpfWVsc2V7ZVtnXT1y
O3ZhciBsPWVba107ZVtrXT1vLHI9PT13JiZvIGluc3RhbmNlb2YgRXJyb3ImJihvW2goImN1cnJl
bnRUYXNrIildPXQuY3VycmVudFRhc2spO2Zvcih2YXIgcD0wO3A8bC5sZW5ndGg7KWYoZSxsW3Ar
K10sbFtwKytdLGxbcCsrXSxsW3ArK10pO2lmKDA9PWwubGVuZ3RoJiZyPT13KXtlW2ddPVQ7dHJ5
e3Rocm93IG5ldyBFcnJvcigiVW5jYXVnaHQgKGluIHByb21pc2UpOiAiK28rKG8mJm8uc3RhY2s/
IlxuIitvLnN0YWNrOiIiKSl9Y2F0Y2gocil7dmFyIGQ9cjtkLnJlamVjdGlvbj1vLGQucHJvbWlz
ZT1lLGQuem9uZT10LmN1cnJlbnQsZC50YXNrPXQuY3VycmVudFRhc2ssdi5wdXNoKGQpLG4uc2No
ZWR1bGVNaWNyb1Rhc2soKX19fX1yZXR1cm4gZX1mdW5jdGlvbiBzKGUpe2lmKGVbZ109PT1UKXt0
cnl7dmFyIG49dFtoKCJyZWplY3Rpb25IYW5kbGVkSGFuZGxlciIpXTtuJiYiZnVuY3Rpb24iPT10
eXBlb2YgbiYmbi5hcHBseSh0aGlzLFt7cmVqZWN0aW9uOmVba10scHJvbWlzZTplfV0pfWNhdGNo
KGUpe31lW2ddPXc7Zm9yKHZhciByPTA7cjx2Lmxlbmd0aDtyKyspZT09PXZbcl0ucHJvbWlzZSYm
di5zcGxpY2UociwxKX19ZnVuY3Rpb24gZihlLHQsbixyLG8pe3MoZSk7dmFyIGM9ZVtnXT8iZnVu
Y3Rpb24iPT10eXBlb2Ygcj9yOmk6ImZ1bmN0aW9uIj09dHlwZW9mIG8/bzphO3Quc2NoZWR1bGVN
aWNyb1Rhc2sobSxmdW5jdGlvbigpe3RyeXt1KG4sITAsdC5ydW4oYyx2b2lkIDAsW2Vba11dKSl9
Y2F0Y2goZSl7dShuLCExLGUpfX0pfWZ1bmN0aW9uIGwoZSl7dmFyIHQ9ZS5wcm90b3R5cGUsbj10
LnRoZW47dFt5XT1uLGUucHJvdG90eXBlLnRoZW49ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzO3Jl
dHVybiBuZXcgRChmdW5jdGlvbihlLHQpe24uY2FsbChyLGUsdCl9KS50aGVuKGUsdCl9LGVbUF09
ITB9ZnVuY3Rpb24gcChlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lLmFwcGx5KHRoaXMsYXJn
dW1lbnRzKTtpZih0IGluc3RhbmNlb2YgRClyZXR1cm4gdDt2YXIgbj10LmNvbnN0cnVjdG9yO3Jl
dHVybiBuW1BdfHxsKG4pLHR9fXZhciBoPW4uc3ltYm9sLHY9W10sZD1oKCJQcm9taXNlIikseT1o
KCJ0aGVuIik7bi5vblVuaGFuZGxlZEVycm9yPWZ1bmN0aW9uKGUpe2lmKG4uc2hvd1VuY2F1Z2h0
RXJyb3IoKSl7dmFyIHQ9ZSYmZS5yZWplY3Rpb247dD9jb25zb2xlLmVycm9yKCJVbmhhbmRsZWQg
UHJvbWlzZSByZWplY3Rpb246Iix0IGluc3RhbmNlb2YgRXJyb3I/dC5tZXNzYWdlOnQsIjsgWm9u
ZToiLGUuem9uZS5uYW1lLCI7IFRhc2s6IixlLnRhc2smJmUudGFzay5zb3VyY2UsIjsgVmFsdWU6
Iix0LHQgaW5zdGFuY2VvZiBFcnJvcj90LnN0YWNrOnZvaWQgMCk6Y29uc29sZS5lcnJvcihlKX19
LG4ubWljcm90YXNrRHJhaW5Eb25lPWZ1bmN0aW9uKCl7Zm9yKDt2Lmxlbmd0aDspZm9yKHZhciBl
PWZ1bmN0aW9uKCl7dmFyIGU9di5zaGlmdCgpO3RyeXtlLnpvbmUucnVuR3VhcmRlZChmdW5jdGlv
bigpe3Rocm93IGV9KX1jYXRjaChlKXtyKGUpfX07di5sZW5ndGg7KWUoKX07dmFyIGc9aCgic3Rh
dGUiKSxrPWgoInZhbHVlIiksbT0iUHJvbWlzZS50aGVuIixiPW51bGwsXz0hMCx3PSExLFQ9MCxP
PWZ1bmN0aW9uKCl7dmFyIGU9ITE7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigp
e2V8fChlPSEwLHQuYXBwbHkobnVsbCxhcmd1bWVudHMpKX19fSxEPWZ1bmN0aW9uKCl7ZnVuY3Rp
b24gZSh0KXt2YXIgbj10aGlzO2lmKCEobiBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBFcnJvcigi
TXVzdCBiZSBhbiBpbnN0YW5jZW9mIFByb21pc2UuIik7bltnXT1iLG5ba109W107dHJ5e3QmJnQo
YyhuLF8pLGMobix3KSl9Y2F0Y2goZSl7dShuLCExLGUpfX1yZXR1cm4gZS50b1N0cmluZz1mdW5j
dGlvbigpe3JldHVybiJmdW5jdGlvbiBab25lQXdhcmVQcm9taXNlKCkgeyBbbmF0aXZlIGNvZGVd
IH0ifSxlLnJlc29sdmU9ZnVuY3Rpb24oZSl7cmV0dXJuIHUobmV3IHRoaXMobnVsbCksXyxlKX0s
ZS5yZWplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHUobmV3IHRoaXMobnVsbCksdyxlKX0sZS5yYWNl
PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7YSYmKGE9cihlKSl9ZnVuY3Rpb24gbihlKXthJiYo
YT1pKGUpKX1mb3IodmFyIHIsaSxhPW5ldyB0aGlzKGZ1bmN0aW9uKGUsdCl7bj1bZSx0XSxyPW5b
MF0saT1uWzFdO3ZhciBufSksYz0wLHU9ZTtjPHUubGVuZ3RoO2MrKyl7dmFyIHM9dVtjXTtvKHMp
fHwocz10aGlzLnJlc29sdmUocykpLHMudGhlbih0LG4pfXJldHVybiBhfSxlLmFsbD1mdW5jdGlv
bihlKXtmb3IodmFyIHQsbixyPW5ldyB0aGlzKGZ1bmN0aW9uKGUscil7dD1lLG49cn0pLGk9MCxh
PVtdLGM9MCx1PWU7Yzx1Lmxlbmd0aDtjKyspe3ZhciBzPXVbY107byhzKXx8KHM9dGhpcy5yZXNv
bHZlKHMpKSxzLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe2FbZV09biwtLWl8
fHQoYSl9fShpKSxuKSxpKyt9cmV0dXJuIGl8fHQoYSkscn0sZS5wcm90b3R5cGUudGhlbj1mdW5j
dGlvbihlLG4pe3ZhciByPW5ldyB0aGlzLmNvbnN0cnVjdG9yKG51bGwpLG89dC5jdXJyZW50O3Jl
dHVybiB0aGlzW2ddPT1iP3RoaXNba10ucHVzaChvLHIsZSxuKTpmKHRoaXMsbyxyLGUsbikscn0s
ZS5wcm90b3R5cGUuY2F0Y2g9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudGhlbihudWxsLGUpfSxl
fSgpO0QucmVzb2x2ZT1ELnJlc29sdmUsRC5yZWplY3Q9RC5yZWplY3QsRC5yYWNlPUQucmFjZSxE
LmFsbD1ELmFsbDt2YXIgRT1lW2RdPWUuUHJvbWlzZTtlLlByb21pc2U9RDt2YXIgUD1oKCJ0aGVu
UGF0Y2hlZCIpO2lmKEUpe2woRSk7dmFyIFM9ZS5mZXRjaDsiZnVuY3Rpb24iPT10eXBlb2YgUyYm
KGUuZmV0Y2g9cChTKSl9cmV0dXJuIFByb21pc2VbdC5fX3N5bWJvbF9fKCJ1bmNhdWdodFByb21p
c2VFcnJvcnMiKV09dixEfSk7LyoqCisgKiBAbGljZW5zZQorICogQ29weXJpZ2h0IEdvb2dsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyAqIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKKyAqLwor
dmFyIE89Wm9uZS5fX3N5bWJvbF9fLEQ9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvd3x8
Im9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmfHxlLEU9InVuZGVmaW5lZCIhPXR5cGVvZiBXb3Jr
ZXJHbG9iYWxTY29wZSYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlLFA9ISgibnci
aW4gRCkmJnZvaWQgMCE9PUQucHJvY2VzcyYmIltvYmplY3QgcHJvY2Vzc10iPT09e30udG9TdHJp
bmcuY2FsbChELnByb2Nlc3MpLFM9IVAmJiFFJiYhKCJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93
fHwhd2luZG93LkhUTUxFbGVtZW50KSx4PXZvaWQgMCE9PUQucHJvY2VzcyYmIltvYmplY3QgcHJv
Y2Vzc10iPT09e30udG9TdHJpbmcuY2FsbChELnByb2Nlc3MpJiYhRSYmISgidW5kZWZpbmVkIj09
dHlwZW9mIHdpbmRvd3x8IXdpbmRvdy5IVE1MRWxlbWVudCksej1PKCJvcmlnaW5hbEluc3RhbmNl
Iiksaj0hMSxaPSExOy8qKgorICogQGxpY2Vuc2UKKyAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisgKiBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCisgKi8KK1pvbmUu
X19sb2FkX3BhdGNoKCJ0b1N0cmluZyIsZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQuX196b25lX3N5
bWJvbF9fb3JpZ2luYWxUb1N0cmluZz1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7RnVuY3Rp
b24ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHRo
aXMpe3ZhciB0PXRoaXNbTygiT3JpZ2luYWxEZWxlZ2F0ZSIpXTtpZih0KXJldHVybiJmdW5jdGlv
biI9PXR5cGVvZiB0P3IuYXBwbHkodGhpc1tPKCJPcmlnaW5hbERlbGVnYXRlIildLGFyZ3VtZW50
cyk6T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpO2lmKHRoaXM9PT1Qcm9taXNlKXt2
YXIgbj1lW08oIlByb21pc2UiKV07aWYobilyZXR1cm4gci5hcHBseShuLGFyZ3VtZW50cyl9aWYo
dGhpcz09PUVycm9yKXt2YXIgbz1lW08oIkVycm9yIildO2lmKG8pcmV0dXJuIHIuYXBwbHkobyxh
cmd1bWVudHMpfX1yZXR1cm4gci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O3ZhciBvPU9iamVjdC5w
cm90b3R5cGUudG9TdHJpbmc7T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3Jl
dHVybiB0aGlzIGluc3RhbmNlb2YgUHJvbWlzZT8iW29iamVjdCBQcm9taXNlXSI6by5hcHBseSh0
aGlzLGFyZ3VtZW50cyl9fSk7LyoqCisgKiBAbGljZW5zZQorICogQ29weXJpZ2h0IEdvb2dsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyAqIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKKyAqLwor
dmFyIEk9InRydWUiLEM9ImZhbHNlIixSPXtpc1VzaW5nR2xvYmFsQ2FsbGJhY2s6ITB9LE09e30s
TD17fSxGPSJuYW1lIixxPSJmdW5jdGlvbiIsSD0ib2JqZWN0IixVPSJfX3pvbmVfc3ltYm9sX18i
LEE9L15fX3pvbmVfc3ltYm9sX18oXHcrKSh0cnVlfGZhbHNlKSQvLE49T2JqZWN0W08oImRlZmlu
ZVByb3BlcnR5IildPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxYPU9iamVjdFtPKCJnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IiKV09T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixCPU9iamVj
dC5jcmVhdGUsSz1PKCJ1bmNvbmZpZ3VyYWJsZXMiKSxWPVsiYWJvcnQiLCJhbmltYXRpb25jYW5j
ZWwiLCJhbmltYXRpb25lbmQiLCJhbmltYXRpb25pdGVyYXRpb24iLCJhdXhjbGljayIsImJlZm9y
ZWlucHV0IiwiYmx1ciIsImNhbmNlbCIsImNhbnBsYXkiLCJjYW5wbGF5dGhyb3VnaCIsImNoYW5n
ZSIsImNvbXBvc2l0aW9uc3RhcnQiLCJjb21wb3NpdGlvbnVwZGF0ZSIsImNvbXBvc2l0aW9uZW5k
IiwiY3VlY2hhbmdlIiwiY2xpY2siLCJjbG9zZSIsImNvbnRleHRtZW51IiwiY3VyZWNoYW5nZSIs
ImRibGNsaWNrIiwiZHJhZyIsImRyYWdlbmQiLCJkcmFnZW50ZXIiLCJkcmFnZXhpdCIsImRyYWds
ZWF2ZSIsImRyYWdvdmVyIiwiZHJvcCIsImR1cmF0aW9uY2hhbmdlIiwiZW1wdGllZCIsImVuZGVk
IiwiZXJyb3IiLCJmb2N1cyIsImZvY3VzaW4iLCJmb2N1c291dCIsImdvdHBvaW50ZXJjYXB0dXJl
IiwiaW5wdXQiLCJpbnZhbGlkIiwia2V5ZG93biIsImtleXByZXNzIiwia2V5dXAiLCJsb2FkIiwi
bG9hZHN0YXJ0IiwibG9hZGVkZGF0YSIsImxvYWRlZG1ldGFkYXRhIiwibG9zdHBvaW50ZXJjYXB0
dXJlIiwibW91c2Vkb3duIiwibW91c2VlbnRlciIsIm1vdXNlbGVhdmUiLCJtb3VzZW1vdmUiLCJt
b3VzZW91dCIsIm1vdXNlb3ZlciIsIm1vdXNldXAiLCJtb3VzZXdoZWVsIiwicGF1c2UiLCJwbGF5
IiwicGxheWluZyIsInBvaW50ZXJjYW5jZWwiLCJwb2ludGVyZG93biIsInBvaW50ZXJlbnRlciIs
InBvaW50ZXJsZWF2ZSIsInBvaW50ZXJsb2NrY2hhbmdlIiwibW96cG9pbnRlcmxvY2tjaGFuZ2Ui
LCJ3ZWJraXRwb2ludGVybG9ja2VyY2hhbmdlIiwicG9pbnRlcmxvY2tlcnJvciIsIm1venBvaW50
ZXJsb2NrZXJyb3IiLCJ3ZWJraXRwb2ludGVybG9ja2Vycm9yIiwicG9pbnRlcm1vdmUiLCJwb2lu
dG91dCIsInBvaW50ZXJvdmVyIiwicG9pbnRlcnVwIiwicHJvZ3Jlc3MiLCJyYXRlY2hhbmdlIiwi
cmVzZXQiLCJyZXNpemUiLCJzY3JvbGwiLCJzZWVrZWQiLCJzZWVraW5nIiwic2VsZWN0Iiwic2Vs
ZWN0aW9uY2hhbmdlIiwic2VsZWN0c3RhcnQiLCJzaG93Iiwic29ydCIsInN0YWxsZWQiLCJzdWJt
aXQiLCJzdXNwZW5kIiwidGltZXVwZGF0ZSIsInZvbHVtZWNoYW5nZSIsInRvdWNoY2FuY2VsIiwi
dG91Y2htb3ZlIiwidG91Y2hzdGFydCIsInRyYW5zaXRpb25jYW5jZWwiLCJ0cmFuc2l0aW9uZW5k
Iiwid2FpdGluZyIsIndoZWVsIl0sVz1bImFmdGVyc2NyaXB0ZXhlY3V0ZSIsImJlZm9yZXNjcmlw
dGV4ZWN1dGUiLCJET01Db250ZW50TG9hZGVkIiwiZnVsbHNjcmVlbmNoYW5nZSIsIm1vemZ1bGxz
Y3JlZW5jaGFuZ2UiLCJ3ZWJraXRmdWxsc2NyZWVuY2hhbmdlIiwibXNmdWxsc2NyZWVuY2hhbmdl
IiwiZnVsbHNjcmVlbmVycm9yIiwibW96ZnVsbHNjcmVlbmVycm9yIiwid2Via2l0ZnVsbHNjcmVl
bmVycm9yIiwibXNmdWxsc2NyZWVuZXJyb3IiLCJyZWFkeXN0YXRlY2hhbmdlIl0sRz1bImFic29s
dXRlZGV2aWNlb3JpZW50YXRpb24iLCJhZnRlcmlucHV0IiwiYWZ0ZXJwcmludCIsImFwcGluc3Rh
bGxlZCIsImJlZm9yZWluc3RhbGxwcm9tcHQiLCJiZWZvcmVwcmludCIsImJlZm9yZXVubG9hZCIs
ImRldmljZWxpZ2h0IiwiZGV2aWNlbW90aW9uIiwiZGV2aWNlb3JpZW50YXRpb24iLCJkZXZpY2Vv
cmllbnRhdGlvbmFic29sdXRlIiwiZGV2aWNlcHJveGltaXR5IiwiaGFzaGNoYW5nZSIsImxhbmd1
YWdlY2hhbmdlIiwibWVzc2FnZSIsIm1vemJlZm9yZXBhaW50Iiwib2ZmbGluZSIsIm9ubGluZSIs
InBhaW50IiwicGFnZXNob3ciLCJwYWdlaGlkZSIsInBvcHN0YXRlIiwicmVqZWN0aW9uaGFuZGxl
ZCIsInN0b3JhZ2UiLCJ1bmhhbmRsZWRyZWplY3Rpb24iLCJ1bmxvYWQiLCJ1c2VycHJveGltaXR5
IiwidnJkaXNwbHljb25uZWN0ZWQiLCJ2cmRpc3BsYXlkaXNjb25uZWN0ZWQiLCJ2cmRpc3BsYXlw
cmVzZW50Y2hhbmdlIl0sWT1bImJlZm9yZWNvcHkiLCJiZWZvcmVjdXQiLCJiZWZvcmVwYXN0ZSIs
ImNvcHkiLCJjdXQiLCJwYXN0ZSIsImRyYWdzdGFydCIsImxvYWRlbmQiLCJhbmltYXRpb25zdGFy
dCIsInNlYXJjaCIsInRyYW5zaXRpb25ydW4iLCJ0cmFuc2l0aW9uc3RhcnQiLCJ3ZWJraXRhbmlt
YXRpb25lbmQiLCJ3ZWJraXRhbmltYXRpb25pdGVyYXRpb24iLCJ3ZWJraXRhbmltYXRpb25zdGFy
dCIsIndlYmtpdHRyYW5zaXRpb25lbmQiXSxRPVsiZW5jcnlwdGVkIiwid2FpdGluZ2ZvcmtleSIs
Im1zbmVlZGtleSIsIm1vemludGVycnVwdGJlZ2luIiwibW96aW50ZXJydXB0ZW5kIl0sSj1bImFj
dGl2YXRlIiwiYWZ0ZXJ1cGRhdGUiLCJhcmlhcmVxdWVzdCIsImJlZm9yZWFjdGl2YXRlIiwiYmVm
b3JlZGVhY3RpdmF0ZSIsImJlZm9yZWVkaXRmb2N1cyIsImJlZm9yZXVwZGF0ZSIsImNlbGxjaGFu
Z2UiLCJjb250cm9sc2VsZWN0IiwiZGF0YWF2YWlsYWJsZSIsImRhdGFzZXRjaGFuZ2VkIiwiZGF0
YXNldGNvbXBsZXRlIiwiZXJyb3J1cGRhdGUiLCJmaWx0ZXJjaGFuZ2UiLCJsYXlvdXRjb21wbGV0
ZSIsImxvc2VjYXB0dXJlIiwibW92ZSIsIm1vdmVlbmQiLCJtb3Zlc3RhcnQiLCJwcm9wZXJ0eWNo
YW5nZSIsInJlc2l6ZWVuZCIsInJlc2l6ZXN0YXJ0Iiwicm93ZW50ZXIiLCJyb3dleGl0Iiwicm93
c2RlbGV0ZSIsInJvd3NpbnNlcnRlZCIsImNvbW1hbmQiLCJjb21wYXNzbmVlZHNjYWxpYnJhdGlv
biIsImRlYWN0aXZhdGUiLCJoZWxwIiwibXNjb250ZW50em9vbSIsIm1zbWFuaXB1bGF0aW9uc3Rh
dGVjaGFuZ2VkIiwibXNnZXN0dXJlY2hhbmdlIiwibXNnZXN0dXJlZG91YmxldGFwIiwibXNnZXN0
dXJlZW5kIiwibXNnZXN0dXJlaG9sZCIsIm1zZ2VzdHVyZXN0YXJ0IiwibXNnZXN0dXJldGFwIiwi
bXNnb3Rwb2ludGVyY2FwdHVyZSIsIm1zaW5lcnRpYXN0YXJ0IiwibXNsb3N0cG9pbnRlcmNhcHR1
cmUiLCJtc3BvaW50ZXJjYW5jZWwiLCJtc3BvaW50ZXJkb3duIiwibXNwb2ludGVyZW50ZXIiLCJt
c3BvaW50ZXJob3ZlciIsIm1zcG9pbnRlcmxlYXZlIiwibXNwb2ludGVybW92ZSIsIm1zcG9pbnRl
cm91dCIsIm1zcG9pbnRlcm92ZXIiLCJtc3BvaW50ZXJ1cCIsInBvaW50ZXJvdXQiLCJtc3NpdGVt
b2RlanVtcGxpc3RpdGVtcmVtb3ZlZCIsIm1zdGh1bWJuYWlsY2xpY2siLCJzdG9wIiwic3RvcmFn
ZWNvbW1pdCJdLCQ9WyJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsIndlYmdsY29udGV4dGxvc3QiLCJ3
ZWJnbGNvbnRleHRjcmVhdGlvbmVycm9yIl0sZWU9WyJhdXRvY29tcGxldGUiLCJhdXRvY29tcGxl
dGVlcnJvciJdLHRlPVsidG9nZ2xlIl0sbmU9WyJsb2FkIl0scmU9WyJibHVyIiwiZXJyb3IiLCJm
b2N1cyIsImxvYWQiLCJyZXNpemUiLCJzY3JvbGwiXSxvZT1bImJvdW5jZSIsImZpbmlzaCIsInN0
YXJ0Il0saWU9WyJsb2Fkc3RhcnQiLCJwcm9ncmVzcyIsImFib3J0IiwiZXJyb3IiLCJsb2FkIiwi
cHJvZ3Jlc3MiLCJ0aW1lb3V0IiwibG9hZGVuZCIsInJlYWR5c3RhdGVjaGFuZ2UiXSxhZT1bInVw
Z3JhZGVuZWVkZWQiLCJjb21wbGV0ZSIsImFib3J0Iiwic3VjY2VzcyIsImVycm9yIiwiYmxvY2tl
ZCIsInZlcnNpb25jaGFuZ2UiLCJjbG9zZSJdLGNlPVsiY2xvc2UiLCJlcnJvciIsIm9wZW4iLCJt
ZXNzYWdlIl0sdWU9Vi5jb25jYXQoJCxlZSx0ZSxXLEcsWSxKKSxzZT1PKCJ1bmJvdW5kIik7Lyoq
CisgKiBAbGljZW5zZQorICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKgorICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlU
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUg
YXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKKyAqLworWm9uZS5fX2xvYWRfcGF0Y2goInRp
bWVycyIsZnVuY3Rpb24oZSx0LG4pe3ZhciByPSJzZXQiLG89ImNsZWFyIjtwKGUscixvLCJUaW1l
b3V0IikscChlLHIsbywiSW50ZXJ2YWwiKSxwKGUscixvLCJJbW1lZGlhdGUiKSxwKGUsInJlcXVl
c3QiLCJjYW5jZWwiLCJBbmltYXRpb25GcmFtZSIpLHAoZSwibW96UmVxdWVzdCIsIm1vekNhbmNl
bCIsIkFuaW1hdGlvbkZyYW1lIikscChlLCJ3ZWJraXRSZXF1ZXN0Iiwid2Via2l0Q2FuY2VsIiwi
QW5pbWF0aW9uRnJhbWUiKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJibG9ja2luZyIsZnVuY3Rpb24o
ZSx0LG4pe2Zvcih2YXIgcj1bImFsZXJ0IiwicHJvbXB0IiwiY29uZmlybSJdLG89MDtvPHIubGVu
Z3RoO28rKyl7dmFyIGk9cltvXTthKGUsaSxmdW5jdGlvbihuLHIsbyl7cmV0dXJuIGZ1bmN0aW9u
KHIsaSl7cmV0dXJuIHQuY3VycmVudC5ydW4obixlLGksbyl9fSl9fSksWm9uZS5fX2xvYWRfcGF0
Y2goIkV2ZW50VGFyZ2V0IixmdW5jdGlvbihlLHQsbil7dyhlLG4pO3ZhciByPWUuWE1MSHR0cFJl
cXVlc3RFdmVudFRhcmdldDtyJiZyLnByb3RvdHlwZSYmbi5wYXRjaEV2ZW50VGFyZ2V0KGUsW3Iu
cHJvdG90eXBlXSksaSgiTXV0YXRpb25PYnNlcnZlciIpLGkoIldlYktpdE11dGF0aW9uT2JzZXJ2
ZXIiKSxpKCJGaWxlUmVhZGVyIil9KSxab25lLl9fbG9hZF9wYXRjaCgib25fcHJvcGVydHkiLGZ1
bmN0aW9uKGUsdCxuKXttKG4sZSksaCgpLFQoZSl9KSxab25lLl9fbG9hZF9wYXRjaCgiY2FudmFz
IixmdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5IVE1MQ2FudmFzRWxlbWVudDt2b2lkIDAhPT1yJiZy
LnByb3RvdHlwZSYmci5wcm90b3R5cGUudG9CbG9iJiZjKHIucHJvdG90eXBlLCJ0b0Jsb2IiLGZ1
bmN0aW9uKGUsdCl7cmV0dXJue25hbWU6IkhUTUxDYW52YXNFbGVtZW50LnRvQmxvYiIsdGFyZ2V0
OmUsY2FsbGJhY2tJbmRleDowLGFyZ3M6dH19KX0pLFpvbmUuX19sb2FkX3BhdGNoKCJYSFIiLGZ1
bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGVbb119ZnVu
Y3Rpb24gcihlKXtYTUxIdHRwUmVxdWVzdFt1XT0hMTt2YXIgdD1lLmRhdGEsbj10LnRhcmdldFtj
XSxyPXQudGFyZ2V0W08oImFkZEV2ZW50TGlzdGVuZXIiKV0saT10LnRhcmdldFtPKCJyZW1vdmVF
dmVudExpc3RlbmVyIildO24mJmkuYXBwbHkodC50YXJnZXQsWyJyZWFkeXN0YXRlY2hhbmdlIixu
XSk7dmFyIGE9dC50YXJnZXRbY109ZnVuY3Rpb24oKXt0LnRhcmdldC5yZWFkeVN0YXRlPT09dC50
YXJnZXQuRE9ORSYmIXQuYWJvcnRlZCYmWE1MSHR0cFJlcXVlc3RbdV0mJiJzY2hlZHVsZWQiPT09
ZS5zdGF0ZSYmZS5pbnZva2UoKX07cmV0dXJuIHIuYXBwbHkodC50YXJnZXQsWyJyZWFkeXN0YXRl
Y2hhbmdlIixhXSksdC50YXJnZXRbb118fCh0LnRhcmdldFtvXT1lKSxwLmFwcGx5KHQudGFyZ2V0
LHQuYXJncyksWE1MSHR0cFJlcXVlc3RbdV09ITAsZX1mdW5jdGlvbiBzKCl7fWZ1bmN0aW9uIGYo
ZSl7dmFyIHQ9ZS5kYXRhO3JldHVybiB0LmFib3J0ZWQ9ITAsaC5hcHBseSh0LnRhcmdldCx0LmFy
Z3MpfXZhciBsPWEoZS5YTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUsIm9wZW4iLGZ1bmN0aW9uKCl7
cmV0dXJuIGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbaV09MD09dFsyXSxsLmFwcGx5KGUsdCl9fSks
cD1hKGUuWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLCJzZW5kIixmdW5jdGlvbigpe3JldHVybiBm
dW5jdGlvbihlLG4pe3ZhciBvPXQuY3VycmVudDtpZihlW2ldKXJldHVybiBwLmFwcGx5KGUsbik7
dmFyIGE9e3RhcmdldDplLGlzUGVyaW9kaWM6ITEsZGVsYXk6bnVsbCxhcmdzOm4sYWJvcnRlZDoh
MX07cmV0dXJuIG8uc2NoZWR1bGVNYWNyb1Rhc2soIlhNTEh0dHBSZXF1ZXN0LnNlbmQiLHMsYSxy
LGYpfX0pLGg9YShlLlhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSwiYWJvcnQiLGZ1bmN0aW9uKGUp
e3JldHVybiBmdW5jdGlvbihlLHQpe3ZhciByPW4oZSk7aWYociYmInN0cmluZyI9PXR5cGVvZiBy
LnR5cGUpe2lmKG51bGw9PXIuY2FuY2VsRm58fHIuZGF0YSYmci5kYXRhLmFib3J0ZWQpcmV0dXJu
O3Iuem9uZS5jYW5jZWxUYXNrKHIpfX19KX1yKGUpO3ZhciBvPU8oInhoclRhc2siKSxpPU8oInho
clN5bmMiKSxjPU8oInhockxpc3RlbmVyIiksdT1PKCJ4aHJTY2hlZHVsZWQiKX0pLFpvbmUuX19s
b2FkX3BhdGNoKCJnZW9sb2NhdGlvbiIsZnVuY3Rpb24oZSx0LHIpe2UubmF2aWdhdG9yJiZlLm5h
dmlnYXRvci5nZW9sb2NhdGlvbiYmbihlLm5hdmlnYXRvci5nZW9sb2NhdGlvbixbImdldEN1cnJl
bnRQb3NpdGlvbiIsIndhdGNoUG9zaXRpb24iXSl9KSxab25lLl9fbG9hZF9wYXRjaCgiUHJvbWlz
ZVJlamVjdGlvbkV2ZW50IixmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcih0KXtyZXR1cm4gZnVu
Y3Rpb24obil7bChlLHQpLmZvckVhY2goZnVuY3Rpb24ocil7dmFyIG89ZS5Qcm9taXNlUmVqZWN0
aW9uRXZlbnQ7aWYobyl7dmFyIGk9bmV3IG8odCx7cHJvbWlzZTpuLnByb21pc2UscmVhc29uOm4u
cmVqZWN0aW9ufSk7ci5pbnZva2UoaSl9fSl9fWUuUHJvbWlzZVJlamVjdGlvbkV2ZW50JiYodFtP
KCJ1bmhhbmRsZWRQcm9taXNlUmVqZWN0aW9uSGFuZGxlciIpXT1yKCJ1bmhhbmRsZWRyZWplY3Rp
b24iKSx0W08oInJlamVjdGlvbkhhbmRsZWRIYW5kbGVyIildPXIoInJlamVjdGlvbmhhbmRsZWQi
KSl9KSxab25lLl9fbG9hZF9wYXRjaCgidXRpbCIsZnVuY3Rpb24oZSx0LG4pe24ucGF0Y2hPblBy
b3BlcnRpZXM9byxuLnBhdGNoTWV0aG9kPWF9KX0pfSkuY2FsbCh0LG4oIkR1UjIiKSl9LFp0d0U6
ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJYU09aIiksbz1uKCJVS00rIiks
aT1uKCJQSEN4IiksYT1bXS5zbGljZSxjPXt9LHU9ZnVuY3Rpb24oZSx0LG4pe2lmKCEodCBpbiBj
KSl7Zm9yKHZhciByPVtdLG89MDtvPHQ7bysrKXJbb109ImFbIitvKyJdIjtjW3RdPUZ1bmN0aW9u
KCJGLGEiLCJyZXR1cm4gbmV3IEYoIityLmpvaW4oIiwiKSsiKSIpfXJldHVybiBjW3RdKGUsbil9
O2UuZXhwb3J0cz1GdW5jdGlvbi5iaW5kfHxmdW5jdGlvbihlKXt2YXIgdD1yKHRoaXMpLG49YS5j
YWxsKGFyZ3VtZW50cywxKSxjPWZ1bmN0aW9uKCl7dmFyIHI9bi5jb25jYXQoYS5jYWxsKGFyZ3Vt
ZW50cykpO3JldHVybiB0aGlzIGluc3RhbmNlb2YgYz91KHQsci5sZW5ndGgscik6aSh0LHIsZSl9
O3JldHVybiBvKHQucHJvdG90eXBlKSYmKGMucHJvdG90eXBlPXQucHJvdG90eXBlKSxjfX0sYk4x
cDpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17fX0sYlVZMDpmdW5jdGlvbihlLHQsbil7ZnVuY3Rp
b24gcihlLHQsbil7dmFyIHUscCxoPWFyZ3VtZW50cy5sZW5ndGg8ND9lOmFyZ3VtZW50c1szXSx2
PWkuZihmKGUpLHQpO2lmKCF2KXtpZihsKHA9YShlKSkpcmV0dXJuIHIocCx0LG4saCk7dj1zKDAp
fXJldHVybiBjKHYsInZhbHVlIik/ISghMT09PXYud3JpdGFibGV8fCFsKGgpKSYmKHU9aS5mKGgs
dCl8fHMoMCksdS52YWx1ZT1uLG8uZihoLHQsdSksITApOnZvaWQgMCE9PXYuc2V0JiYodi5zZXQu
Y2FsbChoLG4pLCEwKX12YXIgbz1uKCJsRExrIiksaT1uKCJ4OXp2IiksYT1uKCJLT3JkIiksYz1u
KCJXQmNMIiksdT1uKCJEczVQIikscz1uKCJmVTI1IiksZj1uKCJESVZQIiksbD1uKCJVS00rIik7
dSh1LlMsIlJlZmxlY3QiLHtzZXQ6cn0pfSxiVXFPOmZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9
IW4oInpnSXQiKShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30s
ImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LGJvbzI6ZnVuY3Rpb24oZSx0LG4p
e3ZhciByPW4oIlVLTSsiKSxvPW4oIlhPMVIiKSxpPW4oImtrQ3ciKSgic3BlY2llcyIpO2UuZXhw
b3J0cz1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gbyhlKSYmKHQ9ZS5jb25zdHJ1Y3RvciwiZnVu
Y3Rpb24iIT10eXBlb2YgdHx8dCE9PUFycmF5JiYhbyh0LnByb3RvdHlwZSl8fCh0PXZvaWQgMCks
cih0KSYmbnVsbD09PSh0PXRbaV0pJiYodD12b2lkIDApKSx2b2lkIDA9PT10P0FycmF5OnR9fSxk
MDc1OmZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9bigiT3pJcSIpLmRvY3VtZW50JiZkb2N1bWVu
dC5kb2N1bWVudEVsZW1lbnR9LGRTVXc6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIg
cj1uKCJEZ2lpIik7ZS5leHBvcnRzPW4oIjBSaWgiKSgiU2V0IixmdW5jdGlvbihlKXtyZXR1cm4g
ZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLGFyZ3VtZW50cy5sZW5ndGg+MD9hcmd1bWVudHNbMF06
dm9pZCAwKX19LHthZGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHIuZGVmKHRoaXMsZT0wPT09ZT8wOmUs
ZSl9fSxyKX0sImRtKzciOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJEczVQIik7cihyLlMsIlJl
ZmxlY3QiLHtoYXM6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCBpbiBlfX0pfSxmSlN4OmZ1bmN0aW9u
KGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiQTE2TCIpLG89bigiMWFBMCIpLmdldFdlYWss
aT1uKCJESVZQIiksYT1uKCJVS00rIiksYz1uKCI5R3BBIiksdT1uKCJ2bVNPIikscz1uKCJMaFRh
IiksZj1uKCJXQmNMIiksbD1zKDUpLHA9cyg2KSxoPTAsdj1mdW5jdGlvbihlKXtyZXR1cm4gZS5f
bHx8KGUuX2w9bmV3IGQpfSxkPWZ1bmN0aW9uKCl7dGhpcy5hPVtdfSx5PWZ1bmN0aW9uKGUsdCl7
cmV0dXJuIGwoZS5hLGZ1bmN0aW9uKGUpe3JldHVybiBlWzBdPT09dH0pfTtkLnByb3RvdHlwZT17
Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PXkodGhpcyxlKTtpZih0KXJldHVybiB0WzFdfSxoYXM6ZnVu
Y3Rpb24oZSl7cmV0dXJuISF5KHRoaXMsZSl9LHNldDpmdW5jdGlvbihlLHQpe3ZhciBuPXkodGhp
cyxlKTtuP25bMV09dDp0aGlzLmEucHVzaChbZSx0XSl9LGRlbGV0ZTpmdW5jdGlvbihlKXt2YXIg
dD1wKHRoaXMuYSxmdW5jdGlvbih0KXtyZXR1cm4gdFswXT09PWV9KTtyZXR1cm5+dCYmdGhpcy5h
LnNwbGljZSh0LDEpLCEhfnR9fSxlLmV4cG9ydHM9e2dldENvbnN0cnVjdG9yOmZ1bmN0aW9uKGUs
dCxuLGkpe3ZhciBzPWUoZnVuY3Rpb24oZSxyKXtjKGUscyx0LCJfaSIpLGUuX2k9aCsrLGUuX2w9
dm9pZCAwLHZvaWQgMCE9ciYmdShyLG4sZVtpXSxlKX0pO3JldHVybiByKHMucHJvdG90eXBlLHtk
ZWxldGU6ZnVuY3Rpb24oZSl7aWYoIWEoZSkpcmV0dXJuITE7dmFyIHQ9byhlKTtyZXR1cm4hMD09
PXQ/dih0aGlzKS5kZWxldGUoZSk6dCYmZih0LHRoaXMuX2kpJiZkZWxldGUgdFt0aGlzLl9pXX0s
aGFzOmZ1bmN0aW9uKGUpe2lmKCFhKGUpKXJldHVybiExO3ZhciB0PW8oZSk7cmV0dXJuITA9PT10
P3YodGhpcykuaGFzKGUpOnQmJmYodCx0aGlzLl9pKX19KSxzfSxkZWY6ZnVuY3Rpb24oZSx0LG4p
e3ZhciByPW8oaSh0KSwhMCk7cmV0dXJuITA9PT1yP3YoZSkuc2V0KHQsbik6cltlLl9pXT1uLGV9
LHVmc3RvcmU6dn19LGZVMjU6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXty
ZXR1cm57ZW51bWVyYWJsZTohKDEmZSksY29uZmlndXJhYmxlOiEoMiZlKSx3cml0YWJsZTohKDQm
ZSksdmFsdWU6dH19fSxndkR0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJVS00rIiksbz1uKCJE
SVZQIiksaT1mdW5jdGlvbihlLHQpe2lmKG8oZSksIXIodCkmJm51bGwhPT10KXRocm93IFR5cGVF
cnJvcih0KyI6IGNhbid0IHNldCBhcyBwcm90b3R5cGUhIil9O2UuZXhwb3J0cz17c2V0Ok9iamVj
dC5zZXRQcm90b3R5cGVPZnx8KCJfX3Byb3RvX18iaW57fT9mdW5jdGlvbihlLHQscil7dHJ5e3I9
bigickZ6WSIpKEZ1bmN0aW9uLmNhbGwsbigieDl6diIpLmYoT2JqZWN0LnByb3RvdHlwZSwiX19w
cm90b19fIikuc2V0LDIpLHIoZSxbXSksdD0hKGUgaW5zdGFuY2VvZiBBcnJheSl9Y2F0Y2goZSl7
dD0hMH1yZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4gaShlLG4pLHQ/ZS5fX3Byb3RvX189bjpy
KGUsbiksZX19KHt9LCExKTp2b2lkIDApLGNoZWNrOml9fSxqaHhmOmZ1bmN0aW9uKGUsdCxuKXt2
YXIgcj1uKCJVS00rIiksbz1uKCJPeklxIikuZG9jdW1lbnQsaT1yKG8pJiZyKG8uY3JlYXRlRWxl
bWVudCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBpP28uY3JlYXRlRWxlbWVudChlKTp7
fX19LGtpYzU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIlVLTSsiKSxvPW4oImd2RHQiKS5zZXQ7
ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgaSxhPXQuY29uc3RydWN0b3I7cmV0dXJuIGEh
PT1uJiYiZnVuY3Rpb24iPT10eXBlb2YgYSYmKGk9YS5wcm90b3R5cGUpIT09bi5wcm90b3R5cGUm
JnIoaSkmJm8mJm8oZSxpKSxlfX0sa2tDdzpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiVldnRiIp
KCJ3a3MiKSxvPW4oInVsVFkiKSxpPW4oIk96SXEiKS5TeW1ib2wsYT0iZnVuY3Rpb24iPT10eXBl
b2YgaTsoZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiByW2VdfHwocltlXT1hJiZpW2VdfHwo
YT9pOm8pKCJTeW1ib2wuIitlKSl9KS5zdG9yZT1yfSxsRExrOmZ1bmN0aW9uKGUsdCxuKXt2YXIg
cj1uKCJESVZQIiksbz1uKCJ4WmErIiksaT1uKCJzNGowIiksYT1PYmplY3QuZGVmaW5lUHJvcGVy
dHk7dC5mPW4oImJVcU8iKT9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24oZSx0LG4pe2lm
KHIoZSksdD1pKHQsITApLHIobiksbyl0cnl7cmV0dXJuIGEoZSx0LG4pfWNhdGNoKGUpe31pZigi
Z2V0ImluIG58fCJzZXQiaW4gbil0aHJvdyBUeXBlRXJyb3IoIkFjY2Vzc29ycyBub3Qgc3VwcG9y
dGVkISIpO3JldHVybiJ2YWx1ZSJpbiBuJiYoZVt0XT1uLnZhbHVlKSxlfX0sbVRwNzpmdW5jdGlv
bihlLHQsbil7dmFyIHI9bigiRHM1UCIpLG89bigiZ3ZEdCIpO28mJnIoci5TLCJSZWZsZWN0Iix7
c2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSx0KXtvLmNoZWNrKGUsdCk7dHJ5e3JldHVybiBvLnNl
dChlLHQpLCEwfWNhdGNoKGUpe3JldHVybiExfX19KX0sbVpPTjpmdW5jdGlvbihlLHQsbil7dmFy
IHI9bigiVldnRiIpKCJrZXlzIiksbz1uKCJ1bFRZIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3Jl
dHVybiByW2VdfHwocltlXT1vKGUpKX19LG9ZZDc6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0
Ijt2YXIgcj1uKCJRaDE0Iiksbz1uKCJZMU4zIiksaT1uKCJZMWFBIiksYT1uKCJGcnlSIiksYz1u
KCJRNk5mIiksdT1PYmplY3QuYXNzaWduO2UuZXhwb3J0cz0hdXx8bigiemdJdCIpKGZ1bmN0aW9u
KCl7dmFyIGU9e30sdD17fSxuPVN5bWJvbCgpLHI9ImFiY2RlZmdoaWprbG1ub3BxcnN0IjtyZXR1
cm4gZVtuXT03LHIuc3BsaXQoIiIpLmZvckVhY2goZnVuY3Rpb24oZSl7dFtlXT1lfSksNyE9dSh7
fSxlKVtuXXx8T2JqZWN0LmtleXModSh7fSx0KSkuam9pbigiIikhPXJ9KT9mdW5jdGlvbihlLHQp
e2Zvcih2YXIgbj1hKGUpLHU9YXJndW1lbnRzLmxlbmd0aCxzPTEsZj1vLmYsbD1pLmY7dT5zOylm
b3IodmFyIHAsaD1jKGFyZ3VtZW50c1tzKytdKSx2PWY/cihoKS5jb25jYXQoZihoKSk6cihoKSxk
PXYubGVuZ3RoLHk9MDtkPnk7KWwuY2FsbChoLHA9dlt5KytdKSYmKG5bcF09aFtwXSk7cmV0dXJu
IG59OnV9LG9laWg6ZnVuY3Rpb24oZSx0KXt2YXIgbj1NYXRoLmNlaWwscj1NYXRoLmZsb29yO2Uu
ZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gaXNOYU4oZT0rZSk/MDooZT4wP3I6bikoZSl9fSxv
dDVzOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJQSHFoIiksbz1uKCJCYnlGIiksaT1uKCI4RDhI
Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4sYSl7dmFyIGMsdT1y
KHQpLHM9byh1Lmxlbmd0aCksZj1pKGEscyk7aWYoZSYmbiE9bil7Zm9yKDtzPmY7KWlmKChjPXVb
ZisrXSkhPWMpcmV0dXJuITB9ZWxzZSBmb3IoO3M+ZjtmKyspaWYoKGV8fGYgaW4gdSkmJnVbZl09
PT1uKXJldHVybiBlfHxmfHwwO3JldHVybiFlJiYtMX19fSxwbFNWOmZ1bmN0aW9uKGUsdCxuKXt2
YXIgcj1uKCJib28yIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyhyKGUpKSh0
KX19LHFreWM6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oImtrQ3ciKSgiaXRlcmF0b3IiKSxvPSEx
O3RyeXt2YXIgaT1bN11bcl0oKTtpLnJldHVybj1mdW5jdGlvbigpe289ITB9LEFycmF5LmZyb20o
aSxmdW5jdGlvbigpe3Rocm93IDJ9KX1jYXRjaChlKXt9ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7
aWYoIXQmJiFvKXJldHVybiExO3ZhciBuPSExO3RyeXt2YXIgaT1bN10sYT1pW3JdKCk7YS5uZXh0
PWZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6bj0hMH19LGlbcl09ZnVuY3Rpb24oKXtyZXR1cm4gYX0s
ZShpKX1jYXRjaChlKXt9cmV0dXJuIG59fSxyRnpZOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJY
U09aIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtpZihyKGUpLHZvaWQgMD09PXQpcmV0dXJu
IGU7c3dpdGNoKG4pe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGUuY2FsbCh0LG4p
fTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKG4scil7cmV0dXJuIGUuY2FsbCh0LG4scil9O2Nhc2Ug
MzpyZXR1cm4gZnVuY3Rpb24obixyLG8pe3JldHVybiBlLmNhbGwodCxuLHIsbyl9fXJldHVybiBm
dW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHQsYXJndW1lbnRzKX19fSxzNGowOmZ1bmN0aW9uKGUs
dCxuKXt2YXIgcj1uKCJVS00rIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoIXIoZSkpcmV0
dXJuIGU7dmFyIG4sbztpZih0JiYiZnVuY3Rpb24iPT10eXBlb2Yobj1lLnRvU3RyaW5nKSYmIXIo
bz1uLmNhbGwoZSkpKXJldHVybiBvO2lmKCJmdW5jdGlvbiI9PXR5cGVvZihuPWUudmFsdWVPZikm
JiFyKG89bi5jYWxsKGUpKSlyZXR1cm4gbztpZighdCYmImZ1bmN0aW9uIj09dHlwZW9mKG49ZS50
b1N0cmluZykmJiFyKG89bi5jYWxsKGUpKSlyZXR1cm4gbzt0aHJvdyBUeXBlRXJyb3IoIkNhbid0
IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfX0sdHd4TTpmdW5jdGlvbihlLHQs
bil7dmFyIHI9bigibERMayIpLG89bigiRElWUCIpLGk9bigiUWgxNCIpO2UuZXhwb3J0cz1uKCJi
VXFPIik/T2JqZWN0LmRlZmluZVByb3BlcnRpZXM6ZnVuY3Rpb24oZSx0KXtvKGUpO2Zvcih2YXIg
bixhPWkodCksYz1hLmxlbmd0aCx1PTA7Yz51OylyLmYoZSxuPWFbdSsrXSx0W25dKTtyZXR1cm4g
ZX19LHVjMkE6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJWM2wvIiksbz1u
KCJEczVQIiksaT1uKCJSM0FQIiksYT1uKCIycDFxIiksYz1uKCJXQmNMIiksdT1uKCJiTjFwIiks
cz1uKCJJUkozIiksZj1uKCJ5WXZLIiksbD1uKCJLT3JkIikscD1uKCJra0N3IikoIml0ZXJhdG9y
IiksaD0hKFtdLmtleXMmJiJuZXh0ImluW10ua2V5cygpKSx2PSJrZXlzIixkPSJ2YWx1ZXMiLHk9
ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLGcsayxtLGIp
e3Mobix0LGcpO3ZhciBfLHcsVCxPPWZ1bmN0aW9uKGUpe2lmKCFoJiZlIGluIFMpcmV0dXJuIFNb
ZV07c3dpdGNoKGUpe2Nhc2UgdjpjYXNlIGQ6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBu
KHRoaXMsZSl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLGUpfX0sRD10KyIg
SXRlcmF0b3IiLEU9az09ZCxQPSExLFM9ZS5wcm90b3R5cGUseD1TW3BdfHxTWyJAQGl0ZXJhdG9y
Il18fGsmJlNba10sej14fHxPKGspLGo9az9FP08oImVudHJpZXMiKTp6OnZvaWQgMCxaPSJBcnJh
eSI9PXQ/Uy5lbnRyaWVzfHx4Ong7aWYoWiYmKFQ9bChaLmNhbGwobmV3IGUpKSkhPT1PYmplY3Qu
cHJvdG90eXBlJiYoZihULEQsITApLHJ8fGMoVCxwKXx8YShULHAseSkpLEUmJngmJngubmFtZSE9
PWQmJihQPSEwLHo9ZnVuY3Rpb24oKXtyZXR1cm4geC5jYWxsKHRoaXMpfSksciYmIWJ8fCFoJiYh
UCYmU1twXXx8YShTLHAseiksdVt0XT16LHVbRF09eSxrKWlmKF89e3ZhbHVlczpFP3o6TyhkKSxr
ZXlzOm0/ejpPKHYpLGVudHJpZXM6an0sYilmb3IodyBpbiBfKXcgaW4gU3x8aShTLHcsX1t3XSk7
ZWxzZSBvKG8uUCtvLkYqKGh8fFApLHQsXyk7cmV0dXJuIF99fSx1bFRZOmZ1bmN0aW9uKGUsdCl7
dmFyIG49MCxyPU1hdGgucmFuZG9tKCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiJTeW1i
b2woIi5jb25jYXQodm9pZCAwPT09ZT8iIjplLCIpXyIsKCsrbityKS50b1N0cmluZygzNikpfX0s
djNoVTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiZFNVdyIpLG89bigiUUc3dSIpLGk9bigid0Nz
byIpLGE9bigiRElWUCIpLGM9bigiS09yZCIpLHU9aS5rZXlzLHM9aS5rZXksZj1mdW5jdGlvbihl
LHQpe3ZhciBuPXUoZSx0KSxpPWMoZSk7aWYobnVsbD09PWkpcmV0dXJuIG47dmFyIGE9ZihpLHQp
O3JldHVybiBhLmxlbmd0aD9uLmxlbmd0aD9vKG5ldyByKG4uY29uY2F0KGEpKSk6YTpufTtpLmV4
cCh7Z2V0TWV0YWRhdGFLZXlzOmZ1bmN0aW9uKGUpe3JldHVybiBmKGEoZSksYXJndW1lbnRzLmxl
bmd0aDwyP3ZvaWQgMDpzKGFyZ3VtZW50c1sxXSkpfX0pfSx2bVNPOmZ1bmN0aW9uKGUsdCxuKXt2
YXIgcj1uKCJyRnpZIiksbz1uKCJYdlVzIiksaT1uKCI5dmIxIiksYT1uKCJESVZQIiksYz1uKCJC
YnlGIiksdT1uKCJTSGU5Iikscz17fSxmPXt9LHQ9ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLGws
cCl7dmFyIGgsdixkLHksZz1wP2Z1bmN0aW9uKCl7cmV0dXJuIGV9OnUoZSksaz1yKG4sbCx0PzI6
MSksbT0wO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBnKXRocm93IFR5cGVFcnJvcihlKyIgaXMgbm90
IGl0ZXJhYmxlISIpO2lmKGkoZykpe2ZvcihoPWMoZS5sZW5ndGgpO2g+bTttKyspaWYoKHk9dD9r
KGEodj1lW21dKVswXSx2WzFdKTprKGVbbV0pKT09PXN8fHk9PT1mKXJldHVybiB5fWVsc2UgZm9y
KGQ9Zy5jYWxsKGUpOyEodj1kLm5leHQoKSkuZG9uZTspaWYoKHk9byhkLGssdi52YWx1ZSx0KSk9
PT1zfHx5PT09ZilyZXR1cm4geX07dC5CUkVBSz1zLHQuUkVUVVJOPWZ9LHZtU3U6ZnVuY3Rpb24o
ZSx0LG4pe3ZhciByPW4oIkRzNVAiKSxvPW4oIjd5bFgiKSxpPW4oIlhTT1oiKSxhPW4oIkRJVlAi
KSxjPW4oIlVLTSsiKSx1PW4oInpnSXQiKSxzPW4oIlp0d0UiKSxmPShuKCJPeklxIikuUmVmbGVj
dHx8e30pLmNvbnN0cnVjdCxsPXUoZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiEoZihm
dW5jdGlvbigpe30sW10sZSlpbnN0YW5jZW9mIGUpfSkscD0hdShmdW5jdGlvbigpe2YoZnVuY3Rp
b24oKXt9KX0pO3Ioci5TK3IuRioobHx8cCksIlJlZmxlY3QiLHtjb25zdHJ1Y3Q6ZnVuY3Rpb24o
ZSx0KXtpKGUpLGEodCk7dmFyIG49YXJndW1lbnRzLmxlbmd0aDwzP2U6aShhcmd1bWVudHNbMl0p
O2lmKHAmJiFsKXJldHVybiBmKGUsdCxuKTtpZihlPT1uKXtzd2l0Y2godC5sZW5ndGgpe2Nhc2Ug
MDpyZXR1cm4gbmV3IGU7Y2FzZSAxOnJldHVybiBuZXcgZSh0WzBdKTtjYXNlIDI6cmV0dXJuIG5l
dyBlKHRbMF0sdFsxXSk7Y2FzZSAzOnJldHVybiBuZXcgZSh0WzBdLHRbMV0sdFsyXSk7Y2FzZSA0
OnJldHVybiBuZXcgZSh0WzBdLHRbMV0sdFsyXSx0WzNdKX12YXIgcj1bbnVsbF07cmV0dXJuIHIu
cHVzaC5hcHBseShyLHQpLG5ldyhzLmFwcGx5KGUscikpfXZhciB1PW4ucHJvdG90eXBlLGg9byhj
KHUpP3U6T2JqZWN0LnByb3RvdHlwZSksdj1GdW5jdGlvbi5hcHBseS5jYWxsKGUsaCx0KTtyZXR1
cm4gYyh2KT92Omh9fSl9LHZzaDY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIndDc28iKSxvPW4o
IkRJVlAiKSxpPXIua2V5cyxhPXIua2V5O3IuZXhwKHtnZXRPd25NZXRhZGF0YUtleXM6ZnVuY3Rp
b24oZSl7cmV0dXJuIGkobyhlKSxhcmd1bWVudHMubGVuZ3RoPDI/dm9pZCAwOmEoYXJndW1lbnRz
WzFdKSl9fSl9LHdDMU46ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oInlkRDUiKSxvPW4oImtrQ3ci
KSgidG9TdHJpbmdUYWciKSxpPSJBcmd1bWVudHMiPT1yKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3Vt
ZW50c30oKSksYT1mdW5jdGlvbihlLHQpe3RyeXtyZXR1cm4gZVt0XX1jYXRjaChlKXt9fTtlLmV4
cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQsbixjO3JldHVybiB2b2lkIDA9PT1lPyJVbmRlZmluZWQi
Om51bGw9PT1lPyJOdWxsIjoic3RyaW5nIj09dHlwZW9mKG49YSh0PU9iamVjdChlKSxvKSk/bjpp
P3IodCk6Ik9iamVjdCI9PShjPXIodCkpJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5jYWxsZWU/IkFy
Z3VtZW50cyI6Y319LHdDc286ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIk1zdVEiKSxvPW4oIkRz
NVAiKSxpPW4oIlZXZ0YiKSgibWV0YWRhdGEiKSxhPWkuc3RvcmV8fChpLnN0b3JlPW5ldyhuKCJa
RFhtIikpKSxjPWZ1bmN0aW9uKGUsdCxuKXt2YXIgbz1hLmdldChlKTtpZighbyl7aWYoIW4pcmV0
dXJuO2Euc2V0KGUsbz1uZXcgcil9dmFyIGk9by5nZXQodCk7aWYoIWkpe2lmKCFuKXJldHVybjtv
LnNldCh0LGk9bmV3IHIpfXJldHVybiBpfSx1PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1jKHQsbiwh
MSk7cmV0dXJuIHZvaWQgMCE9PXImJnIuaGFzKGUpfSxzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1j
KHQsbiwhMSk7cmV0dXJuIHZvaWQgMD09PXI/dm9pZCAwOnIuZ2V0KGUpfSxmPWZ1bmN0aW9uKGUs
dCxuLHIpe2MobixyLCEwKS5zZXQoZSx0KX0sbD1mdW5jdGlvbihlLHQpe3ZhciBuPWMoZSx0LCEx
KSxyPVtdO3JldHVybiBuJiZuLmZvckVhY2goZnVuY3Rpb24oZSx0KXtyLnB1c2godCl9KSxyfSxw
PWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lfHwic3ltYm9sIj09dHlwZW9mIGU/ZTpTdHJp
bmcoZSl9LGg9ZnVuY3Rpb24oZSl7byhvLlMsIlJlZmxlY3QiLGUpfTtlLmV4cG9ydHM9e3N0b3Jl
OmEsbWFwOmMsaGFzOnUsZ2V0OnMsc2V0OmYsa2V5czpsLGtleTpwLGV4cDpofX0seDl6djpmdW5j
dGlvbihlLHQsbil7dmFyIHI9bigiWTFhQSIpLG89bigiZlUyNSIpLGk9bigiUEhxaCIpLGE9bigi
czRqMCIpLGM9bigiV0JjTCIpLHU9bigieFphKyIpLHM9T2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcjt0LmY9bigiYlVxTyIpP3M6ZnVuY3Rpb24oZSx0KXtpZihlPWkoZSksdD1hKHQsITAp
LHUpdHJ5e3JldHVybiBzKGUsdCl9Y2F0Y2goZSl7fWlmKGMoZSx0KSlyZXR1cm4gbyghci5mLmNh
bGwoZSx0KSxlW3RdKX19LCJ4WmErIjpmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPSFuKCJiVXFP
IikmJiFuKCJ6Z0l0IikoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5
KG4oImpoeGYiKSgiZGl2IiksImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LHlK
Mng6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIndDc28iKSxvPW4oIkRJVlAiKSxpPXIua2V5LGE9
ci5zZXQ7ci5leHAoe2RlZmluZU1ldGFkYXRhOmZ1bmN0aW9uKGUsdCxuLHIpe2EoZSx0LG8obiks
aShyKSl9fSl9LHlPdEU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIndDc28iKSxvPW4oIkRJVlAi
KSxpPXIuaGFzLGE9ci5rZXk7ci5leHAoe2hhc093bk1ldGFkYXRhOmZ1bmN0aW9uKGUsdCl7cmV0
dXJuIGkoZSxvKHQpLGFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6YShhcmd1bWVudHNbMl0pKX19
KX0seVl2SzpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigibERMayIpLmYsbz1uKCJXQmNMIiksaT1u
KCJra0N3IikoInRvU3RyaW5nVGFnIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtlJiYhbyhl
PW4/ZTplLnByb3RvdHlwZSxpKSYmcihlLGkse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTp0fSl9fSx5
ZEQ1OmZ1bmN0aW9uKGUsdCl7dmFyIG49e30udG9TdHJpbmc7ZS5leHBvcnRzPWZ1bmN0aW9uKGUp
e3JldHVybiBuLmNhbGwoZSkuc2xpY2UoOCwtMSl9fSx5eDFVOmZ1bmN0aW9uKGUsdCxuKXt2YXIg
cj1uKCJEczVQIiksbz1uKCJ4OXp2IikuZixpPW4oIkRJVlAiKTtyKHIuUywiUmVmbGVjdCIse2Rl
bGV0ZVByb3BlcnR5OmZ1bmN0aW9uKGUsdCl7dmFyIG49byhpKGUpLHQpO3JldHVybiEobiYmIW4u
Y29uZmlndXJhYmxlKSYmZGVsZXRlIGVbdF19fSl9LHpaSHE6ZnVuY3Rpb24oZSx0LG4pe3ZhciBy
PW4oIndDc28iKSxvPW4oIkRJVlAiKSxpPXIuZ2V0LGE9ci5rZXk7ci5leHAoe2dldE93bk1ldGFk
YXRhOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkoZSxvKHQpLGFyZ3VtZW50cy5sZW5ndGg8Mz92b2lk
IDA6YShhcmd1bWVudHNbMl0pKX19KX0semdJdDpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5j
dGlvbihlKXt0cnl7cmV0dXJuISFlKCl9Y2F0Y2goZSl7cmV0dXJuITB9fX19LFsxXSk7ClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNo
Lm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvYW5ndWxhci9kaXN0L3N0eWxlcy5kNDFkOGNkOThmMDBiMjA0ZTk4MC5idW5kbGUuY3NzIGIv
V2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212
Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhci9kaXN0L3N0eWxlcy5kNDFkOGNkOThmMDBi
MjA0ZTk4MC5idW5kbGUuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3
NWFkOGMyZTQ4YzUzOTEKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3Bl
ZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3Vs
YXIvZGlzdC92ZW5kb3IuOWEyOTZiYmMxOTA5ODMwYTkxMDYuYnVuZGxlLmpzIGIvV2Vic2l0ZXMv
YnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvYW5ndWxhci9kaXN0L3ZlbmRvci45YTI5NmJiYzE5MDk4MzBhOTEwNi5i
dW5kbGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOGFjZjNhN2Q1Yzg0MGYwZDZiNGQ4Y2JmNWJhNTAyMWY0NWI4
MzVkMAotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRv
bWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXIv
ZGlzdC92ZW5kb3IuOWEyOTZiYmMxOTA5ODMwYTkxMDYuYnVuZGxlLmpzCkBAIC0wLDAgKzEsNjYy
IEBACit3ZWJwYWNrSnNvbnAoWzMsNF0seyIrM2VMIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJp
Y3QiO2Z1bmN0aW9uIHIoKXt0cnl7cmV0dXJuIGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNhdGNo
KHQpe3JldHVybiBhLmVycm9yT2JqZWN0LmU9dCxhLmVycm9yT2JqZWN0fX1mdW5jdGlvbiBvKHQp
e3JldHVybiBpPXQscn12YXIgaSxhPW4oIldoVmMiKTtlLnRyeUNhdGNoPW99LCIrYXl3IjpmdW5j
dGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXtyZXR1cm4gbmV3IGEuU3ViamVj
dH1mdW5jdGlvbiBvKCl7cmV0dXJuIGkubXVsdGljYXN0LmNhbGwodGhpcyxyKS5yZWZDb3VudCgp
fXZhciBpPW4oImVtT3ciKSxhPW4oIkVFcjQiKTtlLnNoYXJlPW99LCIxS1QwIjpmdW5jdGlvbih0
LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oImtrYjAiKTtlLm1lcmdlPXIubWVyZ2VTdGF0aWN9
LCIxcjgrIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2UuaXNBcnJheUxpa2U9ZnVuY3Rp
b24odCl7cmV0dXJuIHQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGh9fSwiMkplOCI6ZnVuY3Rp
b24odCxlLG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQsZSl7cmV0dXJuIHQmJmUuc3RhcnRz
V2l0aCh0KT9lLnN1YnN0cmluZyh0Lmxlbmd0aCk6ZX1mdW5jdGlvbiBvKHQpe3JldHVybiB0LnJl
cGxhY2UoL1wvaW5kZXguaHRtbCQvLCIiKX1mdW5jdGlvbiBpKHQsZSxuKXt2YXIgcj0iPSIrdDtp
ZihlLmluZGV4T2Yocik+LTEpcmV0dXJuIHI7aWYocj1uLmdldFBsdXJhbENhdGVnb3J5KHQpLGUu
aW5kZXhPZihyKT4tMSlyZXR1cm4gcjtpZihlLmluZGV4T2YoIm90aGVyIik+LTEpcmV0dXJuIm90
aGVyIjt0aHJvdyBuZXcgRXJyb3IoJ05vIHBsdXJhbCBtZXNzYWdlIGZvdW5kIGZvciB2YWx1ZSAi
Jyt0KyciJyl9ZnVuY3Rpb24gYSh0LGUpeyJzdHJpbmciPT10eXBlb2YgZSYmKGU9cGFyc2VJbnQo
ZSwxMCkpO3ZhciBuPWUscj1uLnRvU3RyaW5nKCkucmVwbGFjZSgvXlteLl0qXC4/LywiIiksbz1N
YXRoLmZsb29yKE1hdGguYWJzKG4pKSxpPXIubGVuZ3RoLGE9cGFyc2VJbnQociwxMCkscz1wYXJz
ZUludChuLnRvU3RyaW5nKCkucmVwbGFjZSgvXlteLl0qXC4/fDArJC9nLCIiKSwxMCl8fDA7c3dp
dGNoKHQuc3BsaXQoIi0iKVswXS50b0xvd2VyQ2FzZSgpKXtjYXNlImFmIjpjYXNlImFzYSI6Y2Fz
ZSJheiI6Y2FzZSJiZW0iOmNhc2UiYmV6IjpjYXNlImJnIjpjYXNlImJyeCI6Y2FzZSJjZSI6Y2Fz
ZSJjZ2ciOmNhc2UiY2hyIjpjYXNlImNrYiI6Y2FzZSJlZSI6Y2FzZSJlbCI6Y2FzZSJlbyI6Y2Fz
ZSJlcyI6Y2FzZSJldSI6Y2FzZSJmbyI6Y2FzZSJmdXIiOmNhc2UiZ3N3IjpjYXNlImhhIjpjYXNl
ImhhdyI6Y2FzZSJodSI6Y2FzZSJqZ28iOmNhc2Uiam1jIjpjYXNlImthIjpjYXNlImtrIjpjYXNl
ImtraiI6Y2FzZSJrbCI6Y2FzZSJrcyI6Y2FzZSJrc2IiOmNhc2Uia3kiOmNhc2UibGIiOmNhc2Ui
bGciOmNhc2UibWFzIjpjYXNlIm1nbyI6Y2FzZSJtbCI6Y2FzZSJtbiI6Y2FzZSJuYiI6Y2FzZSJu
ZCI6Y2FzZSJuZSI6Y2FzZSJubiI6Y2FzZSJubmgiOmNhc2UibnluIjpjYXNlIm9tIjpjYXNlIm9y
IjpjYXNlIm9zIjpjYXNlInBzIjpjYXNlInJtIjpjYXNlInJvZiI6Y2FzZSJyd2siOmNhc2Uic2Fx
IjpjYXNlInNlaCI6Y2FzZSJzbiI6Y2FzZSJzbyI6Y2FzZSJzcSI6Y2FzZSJ0YSI6Y2FzZSJ0ZSI6
Y2FzZSJ0ZW8iOmNhc2UidGsiOmNhc2UidHIiOmNhc2UidWciOmNhc2UidXoiOmNhc2Uidm8iOmNh
c2UidnVuIjpjYXNlIndhZSI6Y2FzZSJ4b2ciOnJldHVybiAxPT09bj9MLk9uZTpMLk90aGVyO2Nh
c2UiYWsiOmNhc2UibG4iOmNhc2UibWciOmNhc2UicGEiOmNhc2UidGkiOnJldHVybiBuPT09TWF0
aC5mbG9vcihuKSYmbj49MCYmbjw9MT9MLk9uZTpMLk90aGVyO2Nhc2UiYW0iOmNhc2UiYXMiOmNh
c2UiYm4iOmNhc2UiZmEiOmNhc2UiZ3UiOmNhc2UiaGkiOmNhc2Uia24iOmNhc2UibXIiOmNhc2Ui
enUiOnJldHVybiAwPT09b3x8MT09PW4/TC5PbmU6TC5PdGhlcjtjYXNlImFyIjpyZXR1cm4gMD09
PW4/TC5aZXJvOjE9PT1uP0wuT25lOjI9PT1uP0wuVHdvOm4lMTAwPT09TWF0aC5mbG9vcihuJTEw
MCkmJm4lMTAwPj0zJiZuJTEwMDw9MTA/TC5GZXc6biUxMDA9PT1NYXRoLmZsb29yKG4lMTAwKSYm
biUxMDA+PTExJiZuJTEwMDw9OTk/TC5NYW55OkwuT3RoZXI7Y2FzZSJhc3QiOmNhc2UiY2EiOmNh
c2UiZGUiOmNhc2UiZW4iOmNhc2UiZXQiOmNhc2UiZmkiOmNhc2UiZnkiOmNhc2UiZ2wiOmNhc2Ui
aXQiOmNhc2UibmwiOmNhc2Uic3YiOmNhc2Uic3ciOmNhc2UidXIiOmNhc2UieWkiOnJldHVybiAx
PT09byYmMD09PWk/TC5PbmU6TC5PdGhlcjtjYXNlImJlIjpyZXR1cm4gbiUxMD09MSYmbiUxMDAh
PTExP0wuT25lOm4lMTA9PT1NYXRoLmZsb29yKG4lMTApJiZuJTEwPj0yJiZuJTEwPD00JiYhKG4l
MTAwPj0xMiYmbiUxMDA8PTE0KT9MLkZldzpuJTEwPT0wfHxuJTEwPT09TWF0aC5mbG9vcihuJTEw
KSYmbiUxMD49NSYmbiUxMDw9OXx8biUxMDA9PT1NYXRoLmZsb29yKG4lMTAwKSYmbiUxMDA+PTEx
JiZuJTEwMDw9MTQ/TC5NYW55OkwuT3RoZXI7Y2FzZSJiciI6cmV0dXJuIG4lMTA9PTEmJm4lMTAw
IT0xMSYmbiUxMDAhPTcxJiZuJTEwMCE9OTE/TC5PbmU6biUxMD09MiYmbiUxMDAhPTEyJiZuJTEw
MCE9NzImJm4lMTAwIT05Mj9MLlR3bzpuJTEwPT09TWF0aC5mbG9vcihuJTEwKSYmKG4lMTA+PTMm
Jm4lMTA8PTR8fG4lMTA9PTkpJiYhKG4lMTAwPj0xMCYmbiUxMDA8PTE5fHxuJTEwMD49NzAmJm4l
MTAwPD03OXx8biUxMDA+PTkwJiZuJTEwMDw9OTkpP0wuRmV3OjAhPT1uJiZuJTFlNj09MD9MLk1h
bnk6TC5PdGhlcjtjYXNlImJzIjpjYXNlImhyIjpjYXNlInNyIjpyZXR1cm4gMD09PWkmJm8lMTA9
PTEmJm8lMTAwIT0xMXx8YSUxMD09MSYmYSUxMDAhPTExP0wuT25lOjA9PT1pJiZvJTEwPT09TWF0
aC5mbG9vcihvJTEwKSYmbyUxMD49MiYmbyUxMDw9NCYmIShvJTEwMD49MTImJm8lMTAwPD0xNCl8
fGElMTA9PT1NYXRoLmZsb29yKGElMTApJiZhJTEwPj0yJiZhJTEwPD00JiYhKGElMTAwPj0xMiYm
YSUxMDA8PTE0KT9MLkZldzpMLk90aGVyO2Nhc2UiY3MiOmNhc2Uic2siOnJldHVybiAxPT09byYm
MD09PWk/TC5PbmU6bz09PU1hdGguZmxvb3IobykmJm8+PTImJm88PTQmJjA9PT1pP0wuRmV3OjAh
PT1pP0wuTWFueTpMLk90aGVyO2Nhc2UiY3kiOnJldHVybiAwPT09bj9MLlplcm86MT09PW4/TC5P
bmU6Mj09PW4/TC5Ud286Mz09PW4/TC5GZXc6Nj09PW4/TC5NYW55OkwuT3RoZXI7Y2FzZSJkYSI6
cmV0dXJuIDE9PT1ufHwwIT09cyYmKDA9PT1vfHwxPT09byk/TC5PbmU6TC5PdGhlcjtjYXNlImRz
YiI6Y2FzZSJoc2IiOnJldHVybiAwPT09aSYmbyUxMDA9PTF8fGElMTAwPT0xP0wuT25lOjA9PT1p
JiZvJTEwMD09Mnx8YSUxMDA9PTI/TC5Ud286MD09PWkmJm8lMTAwPT09TWF0aC5mbG9vcihvJTEw
MCkmJm8lMTAwPj0zJiZvJTEwMDw9NHx8YSUxMDA9PT1NYXRoLmZsb29yKGElMTAwKSYmYSUxMDA+
PTMmJmElMTAwPD00P0wuRmV3OkwuT3RoZXI7Y2FzZSJmZiI6Y2FzZSJmciI6Y2FzZSJoeSI6Y2Fz
ZSJrYWIiOnJldHVybiAwPT09b3x8MT09PW8/TC5PbmU6TC5PdGhlcjtjYXNlImZpbCI6cmV0dXJu
IDA9PT1pJiYoMT09PW98fDI9PT1vfHwzPT09byl8fDA9PT1pJiZvJTEwIT00JiZvJTEwIT02JiZv
JTEwIT05fHwwIT09aSYmYSUxMCE9NCYmYSUxMCE9NiYmYSUxMCE9OT9MLk9uZTpMLk90aGVyO2Nh
c2UiZ2EiOnJldHVybiAxPT09bj9MLk9uZToyPT09bj9MLlR3bzpuPT09TWF0aC5mbG9vcihuKSYm
bj49MyYmbjw9Nj9MLkZldzpuPT09TWF0aC5mbG9vcihuKSYmbj49NyYmbjw9MTA/TC5NYW55Okwu
T3RoZXI7Y2FzZSJnZCI6cmV0dXJuIDE9PT1ufHwxMT09PW4/TC5PbmU6Mj09PW58fDEyPT09bj9M
LlR3bzpuPT09TWF0aC5mbG9vcihuKSYmKG4+PTMmJm48PTEwfHxuPj0xMyYmbjw9MTkpP0wuRmV3
OkwuT3RoZXI7Y2FzZSJndiI6cmV0dXJuIDA9PT1pJiZvJTEwPT0xP0wuT25lOjA9PT1pJiZvJTEw
PT0yP0wuVHdvOjAhPT1pfHxvJTEwMCE9MCYmbyUxMDAhPTIwJiZvJTEwMCE9NDAmJm8lMTAwIT02
MCYmbyUxMDAhPTgwPzAhPT1pP0wuTWFueTpMLk90aGVyOkwuRmV3O2Nhc2UiaGUiOnJldHVybiAx
PT09byYmMD09PWk/TC5PbmU6Mj09PW8mJjA9PT1pP0wuVHdvOjAhPT1pfHxuPj0wJiZuPD0xMHx8
biUxMCE9MD9MLk90aGVyOkwuTWFueTtjYXNlImlzIjpyZXR1cm4gMD09PXMmJm8lMTA9PTEmJm8l
MTAwIT0xMXx8MCE9PXM/TC5PbmU6TC5PdGhlcjtjYXNlImtzaCI6cmV0dXJuIDA9PT1uP0wuWmVy
bzoxPT09bj9MLk9uZTpMLk90aGVyO2Nhc2Uia3ciOmNhc2UibmFxIjpjYXNlInNlIjpjYXNlInNt
biI6cmV0dXJuIDE9PT1uP0wuT25lOjI9PT1uP0wuVHdvOkwuT3RoZXI7Y2FzZSJsYWciOnJldHVy
biAwPT09bj9MLlplcm86MCE9PW8mJjEhPT1vfHwwPT09bj9MLk90aGVyOkwuT25lO2Nhc2UibHQi
OnJldHVybiBuJTEwIT0xfHxuJTEwMD49MTEmJm4lMTAwPD0xOT9uJTEwPT09TWF0aC5mbG9vcihu
JTEwKSYmbiUxMD49MiYmbiUxMDw9OSYmIShuJTEwMD49MTEmJm4lMTAwPD0xOSk/TC5GZXc6MCE9
PWE/TC5NYW55OkwuT3RoZXI6TC5PbmU7Y2FzZSJsdiI6Y2FzZSJwcmciOnJldHVybiBuJTEwPT0w
fHxuJTEwMD09PU1hdGguZmxvb3IobiUxMDApJiZuJTEwMD49MTEmJm4lMTAwPD0xOXx8Mj09PWkm
JmElMTAwPT09TWF0aC5mbG9vcihhJTEwMCkmJmElMTAwPj0xMSYmYSUxMDA8PTE5P0wuWmVybzpu
JTEwPT0xJiZuJTEwMCE9MTF8fDI9PT1pJiZhJTEwPT0xJiZhJTEwMCE9MTF8fDIhPT1pJiZhJTEw
PT0xP0wuT25lOkwuT3RoZXI7Y2FzZSJtayI6cmV0dXJuIDA9PT1pJiZvJTEwPT0xfHxhJTEwPT0x
P0wuT25lOkwuT3RoZXI7Y2FzZSJtdCI6cmV0dXJuIDE9PT1uP0wuT25lOjA9PT1ufHxuJTEwMD09
PU1hdGguZmxvb3IobiUxMDApJiZuJTEwMD49MiYmbiUxMDA8PTEwP0wuRmV3Om4lMTAwPT09TWF0
aC5mbG9vcihuJTEwMCkmJm4lMTAwPj0xMSYmbiUxMDA8PTE5P0wuTWFueTpMLk90aGVyO2Nhc2Ui
cGwiOnJldHVybiAxPT09byYmMD09PWk/TC5PbmU6MD09PWkmJm8lMTA9PT1NYXRoLmZsb29yKG8l
MTApJiZvJTEwPj0yJiZvJTEwPD00JiYhKG8lMTAwPj0xMiYmbyUxMDA8PTE0KT9MLkZldzowPT09
aSYmMSE9PW8mJm8lMTA9PT1NYXRoLmZsb29yKG8lMTApJiZvJTEwPj0wJiZvJTEwPD0xfHwwPT09
aSYmbyUxMD09PU1hdGguZmxvb3IobyUxMCkmJm8lMTA+PTUmJm8lMTA8PTl8fDA9PT1pJiZvJTEw
MD09PU1hdGguZmxvb3IobyUxMDApJiZvJTEwMD49MTImJm8lMTAwPD0xND9MLk1hbnk6TC5PdGhl
cjtjYXNlInB0IjpyZXR1cm4gbj09PU1hdGguZmxvb3IobikmJm4+PTAmJm48PTImJjIhPT1uP0wu
T25lOkwuT3RoZXI7Y2FzZSJybyI6cmV0dXJuIDE9PT1vJiYwPT09aT9MLk9uZTowIT09aXx8MD09
PW58fDEhPT1uJiZuJTEwMD09PU1hdGguZmxvb3IobiUxMDApJiZuJTEwMD49MSYmbiUxMDA8PTE5
P0wuRmV3OkwuT3RoZXI7Y2FzZSJydSI6Y2FzZSJ1ayI6cmV0dXJuIDA9PT1pJiZvJTEwPT0xJiZv
JTEwMCE9MTE/TC5PbmU6MD09PWkmJm8lMTA9PT1NYXRoLmZsb29yKG8lMTApJiZvJTEwPj0yJiZv
JTEwPD00JiYhKG8lMTAwPj0xMiYmbyUxMDA8PTE0KT9MLkZldzowPT09aSYmbyUxMD09MHx8MD09
PWkmJm8lMTA9PT1NYXRoLmZsb29yKG8lMTApJiZvJTEwPj01JiZvJTEwPD05fHwwPT09aSYmbyUx
MDA9PT1NYXRoLmZsb29yKG8lMTAwKSYmbyUxMDA+PTExJiZvJTEwMDw9MTQ/TC5NYW55OkwuT3Ro
ZXI7Y2FzZSJzaGkiOnJldHVybiAwPT09b3x8MT09PW4/TC5PbmU6bj09PU1hdGguZmxvb3Iobikm
Jm4+PTImJm48PTEwP0wuRmV3OkwuT3RoZXI7Y2FzZSJzaSI6cmV0dXJuIDA9PT1ufHwxPT09bnx8
MD09PW8mJjE9PT1hP0wuT25lOkwuT3RoZXI7Y2FzZSJzbCI6cmV0dXJuIDA9PT1pJiZvJTEwMD09
MT9MLk9uZTowPT09aSYmbyUxMDA9PTI/TC5Ud286MD09PWkmJm8lMTAwPT09TWF0aC5mbG9vcihv
JTEwMCkmJm8lMTAwPj0zJiZvJTEwMDw9NHx8MCE9PWk/TC5GZXc6TC5PdGhlcjtjYXNlInR6bSI6
cmV0dXJuIG49PT1NYXRoLmZsb29yKG4pJiZuPj0wJiZuPD0xfHxuPT09TWF0aC5mbG9vcihuKSYm
bj49MTEmJm48PTk5P0wuT25lOkwuT3RoZXI7ZGVmYXVsdDpyZXR1cm4gTC5PdGhlcn19LyoqCisg
KiBAbGljZW5zZQorICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CisgKgorICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQg
aHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKKyAqIEBwYXJhbSB7P30gY29va2llU3RyCisgKiBA
cGFyYW0gez99IG5hbWUKKyAqIEByZXR1cm4gez99CisgKi8KK2Z1bmN0aW9uIHModCxlKXtlPWVu
Y29kZVVSSUNvbXBvbmVudChlKTtmb3IodmFyIG49MCxyPXQuc3BsaXQoIjsiKTtuPHIubGVuZ3Ro
O24rKyl7dmFyIG89cltuXSxpPW8uaW5kZXhPZigiPSIpLGE9LTE9PWk/W28sIiJdOltvLnNsaWNl
KDAsaSksby5zbGljZShpKzEpXSxzPWFbMF0sdT1hWzFdO2lmKHMudHJpbSgpPT09ZSlyZXR1cm4g
ZGVjb2RlVVJJQ29tcG9uZW50KHUpfXJldHVybiBudWxsfWZ1bmN0aW9uIHUodCl7cmV0dXJuIHQu
bmFtZXx8dHlwZW9mIHR9LyoqCisgKiBAbGljZW5zZQorICogQ29weXJpZ2h0IEdvb2dsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyAqIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKKyAqLworZnVu
Y3Rpb24gYyh0LGUpe3JldHVybiBFcnJvcigiSW52YWxpZFBpcGVBcmd1bWVudDogJyIrZSsiJyBm
b3IgcGlwZSAnIituLmkoVi5YKSh0KSsiJyIpfWZ1bmN0aW9uIGwodCl7cmV0dXJuIHQ/dFswXS50
b1VwcGVyQ2FzZSgpK3Quc3Vic3RyKDEpLnRvTG93ZXJDYXNlKCk6dH1mdW5jdGlvbiBwKHQpe3Jl
dHVybiBmdW5jdGlvbihlLG4pe3ZhciByPXQoZSxuKTtyZXR1cm4gMT09ci5sZW5ndGg/IjAiK3I6
cn19ZnVuY3Rpb24gZih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4gdChlLG4pLnNwbGl0
KCIgIilbMV19fWZ1bmN0aW9uIGQodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQoZSxu
KS5zcGxpdCgiICIpWzBdfX1mdW5jdGlvbiBoKHQsZSxuKXtyZXR1cm4gbmV3IEludGwuRGF0ZVRp
bWVGb3JtYXQoZSxuKS5mb3JtYXQodCkucmVwbGFjZSgvW1x1MjAwZVx1MjAwZl0vZywiIil9ZnVu
Y3Rpb24geSh0KXt2YXIgZT17aG91cjoiMi1kaWdpdCIsaG91cjEyOiExLHRpbWVab25lTmFtZTp0
fTtyZXR1cm4gZnVuY3Rpb24odCxuKXt2YXIgcj1oKHQsbixlKTtyZXR1cm4gcj9yLnN1YnN0cmlu
ZygzKToiIn19ZnVuY3Rpb24gbSh0LGUpe3JldHVybiB0LmhvdXIxMj1lLHR9ZnVuY3Rpb24gZyh0
LGUpe3ZhciBuPXt9O3JldHVybiBuW3RdPTI9PT1lPyIyLWRpZ2l0IjoibnVtZXJpYyIsbn1mdW5j
dGlvbiB2KHQsZSl7dmFyIG49e307cmV0dXJuIG5bdF09ZTw0P2U+MT8ic2hvcnQiOiJuYXJyb3ci
OiJsb25nIixufWZ1bmN0aW9uIF8odCl7cmV0dXJuIHQucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0
dXJuIE9iamVjdC5hc3NpZ24oe30sdCxlKX0se30pfWZ1bmN0aW9uIGIodCl7cmV0dXJuIGZ1bmN0
aW9uKGUsbil7cmV0dXJuIGgoZSxuLHQpfX1mdW5jdGlvbiB3KHQsZSxuKXt2YXIgcj1odFt0XTtp
ZihyKXJldHVybiByKGUsbik7dmFyIG89dCxpPW10LmdldChvKTtpZighaSl7aT1bXTt2YXIgYT12
b2lkIDA7ZHQuZXhlYyh0KTtmb3IodmFyIHM9dDtzOylhPWR0LmV4ZWMocyksYT8oaT1pLmNvbmNh
dChhLnNsaWNlKDEpKSxzPWkucG9wKCkpOihpLnB1c2gocykscz1udWxsKTttdC5zZXQobyxpKX1y
ZXR1cm4gaS5yZWR1Y2UoZnVuY3Rpb24odCxyKXt2YXIgbz15dFtyXTtyZXR1cm4gdCsobz9vKGUs
bik6QyhyKSl9LCIiKX1mdW5jdGlvbiBDKHQpe3JldHVybiInJyI9PT10PyInIjp0LnJlcGxhY2Uo
LyheJ3wnJCkvZywiIikucmVwbGFjZSgvJycvZywiJyIpfWZ1bmN0aW9uIEUodCxlLG4scixvLGks
YSl7aWYodm9pZCAwPT09aSYmKGk9bnVsbCksdm9pZCAwPT09YSYmKGE9ITEpLG51bGw9PW4pcmV0
dXJuIG51bGw7aWYoIm51bWJlciIhPXR5cGVvZihuPSJzdHJpbmciPT10eXBlb2YgbiYmeChuKT8r
bjpuKSl0aHJvdyBjKHQsbik7dmFyIHM9dm9pZCAwLHU9dm9pZCAwLGw9dm9pZCAwO2lmKHIhPT1w
dC5DdXJyZW5jeSYmKHM9MSx1PTAsbD0zKSxvKXt2YXIgcD1vLm1hdGNoKHZ0KTtpZihudWxsPT09
cCl0aHJvdyBuZXcgRXJyb3IobysiIGlzIG5vdCBhIHZhbGlkIGRpZ2l0IGluZm8gZm9yIG51bWJl
ciBwaXBlcyIpO251bGwhPXBbMV0mJihzPU8ocFsxXSkpLG51bGwhPXBbM10mJih1PU8ocFszXSkp
LG51bGwhPXBbNV0mJihsPU8ocFs1XSkpfXJldHVybiBmdC5mb3JtYXQobixlLHIse21pbmltdW1J
bnRlZ2VyRGlnaXRzOnMsbWluaW11bUZyYWN0aW9uRGlnaXRzOnUsbWF4aW11bUZyYWN0aW9uRGln
aXRzOmwsY3VycmVuY3k6aSxjdXJyZW5jeUFzU3ltYm9sOmF9KX1mdW5jdGlvbiBPKHQpe3ZhciBl
PXBhcnNlSW50KHQpO2lmKGlzTmFOKGUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbnRlZ2Vy
IGxpdGVyYWwgd2hlbiBwYXJzaW5nICIrdCk7cmV0dXJuIGV9ZnVuY3Rpb24geCh0KXtyZXR1cm4h
aXNOYU4odC1wYXJzZUZsb2F0KHQpKX1mdW5jdGlvbiBQKHQpe3JldHVybiBudWxsPT10fHwiIj09
PXR9ZnVuY3Rpb24gUyh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIERhdGUmJiFpc05hTih0LnZhbHVl
T2YoKSl9ZnVuY3Rpb24gQSh0KXt2YXIgZT1uZXcgRGF0ZSgwKSxuPTAscj0wLG89dFs4XT9lLnNl
dFVUQ0Z1bGxZZWFyOmUuc2V0RnVsbFllYXIsaT10WzhdP2Uuc2V0VVRDSG91cnM6ZS5zZXRIb3Vy
czt0WzldJiYobj1UKHRbOV0rdFsxMF0pLHI9VCh0WzldK3RbMTFdKSksby5jYWxsKGUsVCh0WzFd
KSxUKHRbMl0pLTEsVCh0WzNdKSk7dmFyIGE9VCh0WzRdfHwiMCIpLW4scz1UKHRbNV18fCIwIikt
cix1PVQodFs2XXx8IjAiKSxjPU1hdGgucm91bmQoMWUzKnBhcnNlRmxvYXQoIjAuIisodFs3XXx8
MCkpKTtyZXR1cm4gaS5jYWxsKGUsYSxzLHUsYyksZX1mdW5jdGlvbiBUKHQpe3JldHVybiBwYXJz
ZUludCh0LDEwKX12YXIgaz1uKCJUVG9PIiksVj1uKCIzajNLIik7bi5kKGUsImIiLGZ1bmN0aW9u
KCl7cmV0dXJuIEh9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gRn0pLG4uZChlLCJlIixm
dW5jdGlvbigpe3JldHVybiBzfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIGt0fSksbi5k
KGUsImgiLGZ1bmN0aW9uKCl7cmV0dXJuIHF9KSxuLmQoZSwiaSIsZnVuY3Rpb24oKXtyZXR1cm4g
Wn0pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBWdH0pLG4uZChlLCJnIixmdW5jdGlvbigp
e3JldHVybiBOdH0pLG4uZChlLCJmIixmdW5jdGlvbigpe3JldHVybiBOfSk7LyoqCisgKiBAbGlj
ZW5zZSBBbmd1bGFyIHY0LjMuMQorICogKGMpIDIwMTAtMjAxNyBHb29nbGUsIEluYy4gaHR0cHM6
Ly9hbmd1bGFyLmlvLworICogTGljZW5zZTogTUlUCisgKi8KKy8qKgorICogQGxpY2Vuc2UKKyAq
IENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxh
ci5pby9saWNlbnNlCisgKi8KK3ZhciBOPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4g
dC5wcm90b3R5cGUuZ2V0QmFzZUhyZWZGcm9tRE9NPWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5v
blBvcFN0YXRlPWZ1bmN0aW9uKHQpe30sdC5wcm90b3R5cGUub25IYXNoQ2hhbmdlPWZ1bmN0aW9u
KHQpe30sdC5wcm90b3R5cGUucGF0aG5hbWU9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLnNlYXJj
aD1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuaGFzaD1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUu
cmVwbGFjZVN0YXRlPWZ1bmN0aW9uKHQsZSxuKXt9LHQucHJvdG90eXBlLnB1c2hTdGF0ZT1mdW5j
dGlvbih0LGUsbil7fSx0LnByb3RvdHlwZS5mb3J3YXJkPWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlw
ZS5iYWNrPWZ1bmN0aW9uKCl7fSx0fSgpLE09KG5ldyBWLkkoIkxvY2F0aW9uIEluaXRpYWxpemVk
IiksZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5wYXRoPWZ1bmN0
aW9uKHQpe30sdC5wcm90b3R5cGUucHJlcGFyZUV4dGVybmFsVXJsPWZ1bmN0aW9uKHQpe30sdC5w
cm90b3R5cGUucHVzaFN0YXRlPWZ1bmN0aW9uKHQsZSxuLHIpe30sdC5wcm90b3R5cGUucmVwbGFj
ZVN0YXRlPWZ1bmN0aW9uKHQsZSxuLHIpe30sdC5wcm90b3R5cGUuZm9yd2FyZD1mdW5jdGlvbigp
e30sdC5wcm90b3R5cGUuYmFjaz1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUub25Qb3BTdGF0ZT1m
dW5jdGlvbih0KXt9LHQucHJvdG90eXBlLmdldEJhc2VIcmVmPWZ1bmN0aW9uKCl7fSx0fSgpKSxq
PW5ldyBWLkkoImFwcEJhc2VIcmVmIiksUj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIG49
dGhpczt0aGlzLl9zdWJqZWN0PW5ldyBWLlYsdGhpcy5fcGxhdGZvcm1TdHJhdGVneT1lO3ZhciBy
PXRoaXMuX3BsYXRmb3JtU3RyYXRlZ3kuZ2V0QmFzZUhyZWYoKTt0aGlzLl9iYXNlSHJlZj10LnN0
cmlwVHJhaWxpbmdTbGFzaChvKHIpKSx0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5Lm9uUG9wU3RhdGUo
ZnVuY3Rpb24odCl7bi5fc3ViamVjdC5lbWl0KHt1cmw6bi5wYXRoKCEwKSxwb3A6ITAsdHlwZTp0
LnR5cGV9KX0pfXJldHVybiB0LnByb3RvdHlwZS5wYXRoPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lk
IDA9PT10JiYodD0hMSksdGhpcy5ub3JtYWxpemUodGhpcy5fcGxhdGZvcm1TdHJhdGVneS5wYXRo
KHQpKX0sdC5wcm90b3R5cGUuaXNDdXJyZW50UGF0aEVxdWFsVG89ZnVuY3Rpb24oZSxuKXtyZXR1
cm4gdm9pZCAwPT09biYmKG49IiIpLHRoaXMucGF0aCgpPT10aGlzLm5vcm1hbGl6ZShlK3Qubm9y
bWFsaXplUXVlcnlQYXJhbXMobikpfSx0LnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oZSl7
cmV0dXJuIHQuc3RyaXBUcmFpbGluZ1NsYXNoKHIodGhpcy5fYmFzZUhyZWYsbyhlKSkpfSx0LnBy
b3RvdHlwZS5wcmVwYXJlRXh0ZXJuYWxVcmw9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiIvIiE9PXRb
MF0mJih0PSIvIit0KSx0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5LnByZXBhcmVFeHRlcm5hbFVybCh0
KX0sdC5wcm90b3R5cGUuZ289ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT0iIiksdGhpcy5f
cGxhdGZvcm1TdHJhdGVneS5wdXNoU3RhdGUobnVsbCwiIix0LGUpfSx0LnByb3RvdHlwZS5yZXBs
YWNlU3RhdGU9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT0iIiksdGhpcy5fcGxhdGZvcm1T
dHJhdGVneS5yZXBsYWNlU3RhdGUobnVsbCwiIix0LGUpfSx0LnByb3RvdHlwZS5mb3J3YXJkPWZ1
bmN0aW9uKCl7dGhpcy5fcGxhdGZvcm1TdHJhdGVneS5mb3J3YXJkKCl9LHQucHJvdG90eXBlLmJh
Y2s9ZnVuY3Rpb24oKXt0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5LmJhY2soKX0sdC5wcm90b3R5cGUu
c3Vic2NyaWJlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUo
e25leHQ6dCxlcnJvcjplLGNvbXBsZXRlOm59KX0sdC5ub3JtYWxpemVRdWVyeVBhcmFtcz1mdW5j
dGlvbih0KXtyZXR1cm4gdCYmIj8iIT09dFswXT8iPyIrdDp0fSx0LmpvaW5XaXRoU2xhc2g9ZnVu
Y3Rpb24odCxlKXtpZigwPT10Lmxlbmd0aClyZXR1cm4gZTtpZigwPT1lLmxlbmd0aClyZXR1cm4g
dDt2YXIgbj0wO3JldHVybiB0LmVuZHNXaXRoKCIvIikmJm4rKyxlLnN0YXJ0c1dpdGgoIi8iKSYm
bisrLDI9PW4/dCtlLnN1YnN0cmluZygxKToxPT1uP3QrZTp0KyIvIitlfSx0LnN0cmlwVHJhaWxp
bmdTbGFzaD1mdW5jdGlvbih0KXt2YXIgZT10Lm1hdGNoKC8jfFw/fCQvKSxuPWUmJmUuaW5kZXh8
fHQubGVuZ3RoLHI9bi0oIi8iPT09dFtuLTFdPzE6MCk7cmV0dXJuIHQuc2xpY2UoMCxyKSt0LnNs
aWNlKG4pfSx0fSgpO1IuZGVjb3JhdG9ycz1be3R5cGU6Vi5EfV0sUi5jdG9yUGFyYW1ldGVycz1m
dW5jdGlvbigpe3JldHVyblt7dHlwZTpNfV19Oy8qKgorICogQGxpY2Vuc2UKKyAqIENvcHlyaWdo
dCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNl
bnNlCisgKi8KK3ZhciBEPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwo
dGhpcyl8fHRoaXM7cmV0dXJuIHIuX3BsYXRmb3JtTG9jYXRpb249ZSxyLl9iYXNlSHJlZj0iIixu
dWxsIT1uJiYoci5fYmFzZUhyZWY9bikscn1yZXR1cm4gay5hKGUsdCksZS5wcm90b3R5cGUub25Q
b3BTdGF0ZT1mdW5jdGlvbih0KXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uUG9wU3RhdGUodCks
dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vbkhhc2hDaGFuZ2UodCl9LGUucHJvdG90eXBlLmdldEJh
c2VIcmVmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Jhc2VIcmVmfSxlLnByb3RvdHlwZS5wYXRo
PWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PSExKTt2YXIgZT10aGlzLl9wbGF0Zm9ybUxvY2F0
aW9uLmhhc2g7cmV0dXJuIG51bGw9PWUmJihlPSIjIiksZS5sZW5ndGg+MD9lLnN1YnN0cmluZygx
KTplfSxlLnByb3RvdHlwZS5wcmVwYXJlRXh0ZXJuYWxVcmw9ZnVuY3Rpb24odCl7dmFyIGU9Ui5q
b2luV2l0aFNsYXNoKHRoaXMuX2Jhc2VIcmVmLHQpO3JldHVybiBlLmxlbmd0aD4wPyIjIitlOmV9
LGUucHJvdG90eXBlLnB1c2hTdGF0ZT1mdW5jdGlvbih0LGUsbixyKXt2YXIgbz10aGlzLnByZXBh
cmVFeHRlcm5hbFVybChuK1Iubm9ybWFsaXplUXVlcnlQYXJhbXMocikpOzA9PW8ubGVuZ3RoJiYo
bz10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnBhdGhuYW1lKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9u
LnB1c2hTdGF0ZSh0LGUsbyl9LGUucHJvdG90eXBlLnJlcGxhY2VTdGF0ZT1mdW5jdGlvbih0LGUs
bixyKXt2YXIgbz10aGlzLnByZXBhcmVFeHRlcm5hbFVybChuK1Iubm9ybWFsaXplUXVlcnlQYXJh
bXMocikpOzA9PW8ubGVuZ3RoJiYobz10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnBhdGhuYW1lKSx0
aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0LGUsbyl9LGUucHJvdG90eXBlLmZv
cndhcmQ9ZnVuY3Rpb24oKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmZvcndhcmQoKX0sZS5wcm90
b3R5cGUuYmFjaz1mdW5jdGlvbigpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uYmFjaygpfSxlfShN
KTtELmRlY29yYXRvcnM9W3t0eXBlOlYuRH1dLEQuY3RvclBhcmFtZXRlcnM9ZnVuY3Rpb24oKXty
ZXR1cm5be3R5cGU6Tn0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOlYuTH0se3R5cGU6
Vi5ILGFyZ3M6W2pdfV19XX07LyoqCisgKiBAbGljZW5zZQorICogQ29weXJpZ2h0IEdvb2dsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyAqIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKKyAqLwor
dmFyIEk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhp
cztpZihyLl9wbGF0Zm9ybUxvY2F0aW9uPWUsbnVsbD09biYmKG49ci5fcGxhdGZvcm1Mb2NhdGlv
bi5nZXRCYXNlSHJlZkZyb21ET00oKSksbnVsbD09bil0aHJvdyBuZXcgRXJyb3IoIk5vIGJhc2Ug
aHJlZiBzZXQuIFBsZWFzZSBwcm92aWRlIGEgdmFsdWUgZm9yIHRoZSBBUFBfQkFTRV9IUkVGIHRv
a2VuIG9yIGFkZCBhIGJhc2UgZWxlbWVudCB0byB0aGUgZG9jdW1lbnQuIik7cmV0dXJuIHIuX2Jh
c2VIcmVmPW4scn1yZXR1cm4gay5hKGUsdCksZS5wcm90b3R5cGUub25Qb3BTdGF0ZT1mdW5jdGlv
bih0KXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uUG9wU3RhdGUodCksdGhpcy5fcGxhdGZvcm1M
b2NhdGlvbi5vbkhhc2hDaGFuZ2UodCl9LGUucHJvdG90eXBlLmdldEJhc2VIcmVmPWZ1bmN0aW9u
KCl7cmV0dXJuIHRoaXMuX2Jhc2VIcmVmfSxlLnByb3RvdHlwZS5wcmVwYXJlRXh0ZXJuYWxVcmw9
ZnVuY3Rpb24odCl7cmV0dXJuIFIuam9pbldpdGhTbGFzaCh0aGlzLl9iYXNlSHJlZix0KX0sZS5w
cm90b3R5cGUucGF0aD1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD0hMSk7dmFyIGU9dGhpcy5f
cGxhdGZvcm1Mb2NhdGlvbi5wYXRobmFtZStSLm5vcm1hbGl6ZVF1ZXJ5UGFyYW1zKHRoaXMuX3Bs
YXRmb3JtTG9jYXRpb24uc2VhcmNoKSxuPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24uaGFzaDtyZXR1
cm4gbiYmdD8iIitlK246ZX0sZS5wcm90b3R5cGUucHVzaFN0YXRlPWZ1bmN0aW9uKHQsZSxuLHIp
e3ZhciBvPXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKG4rUi5ub3JtYWxpemVRdWVyeVBhcmFtcyhy
KSk7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wdXNoU3RhdGUodCxlLG8pfSxlLnByb3RvdHlwZS5y
ZXBsYWNlU3RhdGU9ZnVuY3Rpb24odCxlLG4scil7dmFyIG89dGhpcy5wcmVwYXJlRXh0ZXJuYWxV
cmwobitSLm5vcm1hbGl6ZVF1ZXJ5UGFyYW1zKHIpKTt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnJl
cGxhY2VTdGF0ZSh0LGUsbyl9LGUucHJvdG90eXBlLmZvcndhcmQ9ZnVuY3Rpb24oKXt0aGlzLl9w
bGF0Zm9ybUxvY2F0aW9uLmZvcndhcmQoKX0sZS5wcm90b3R5cGUuYmFjaz1mdW5jdGlvbigpe3Ro
aXMuX3BsYXRmb3JtTG9jYXRpb24uYmFjaygpfSxlfShNKTtJLmRlY29yYXRvcnM9W3t0eXBlOlYu
RH1dLEkuY3RvclBhcmFtZXRlcnM9ZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Tn0se3R5cGU6dm9p
ZCAwLGRlY29yYXRvcnM6W3t0eXBlOlYuTH0se3R5cGU6Vi5ILGFyZ3M6W2pdfV19XX07LyoqCisg
KiBAbGljZW5zZQorICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CisgKgorICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQg
aHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKKyAqLworLyoqCisgKiBAbGljZW5zZQorICogQ29w
eXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKyAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlv
L2xpY2Vuc2UKKyAqLwordmFyIEY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnBy
b3RvdHlwZS5nZXRQbHVyYWxDYXRlZ29yeT1mdW5jdGlvbih0KXt9LHR9KCksSD1mdW5jdGlvbih0
KXtmdW5jdGlvbiBlKGUpe3ZhciBuPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5sb2NhbGU9
ZSxufXJldHVybiBrLmEoZSx0KSxlLnByb3RvdHlwZS5nZXRQbHVyYWxDYXRlZ29yeT1mdW5jdGlv
bih0KXtzd2l0Y2goYSh0aGlzLmxvY2FsZSx0KSl7Y2FzZSBMLlplcm86cmV0dXJuInplcm8iO2Nh
c2UgTC5PbmU6cmV0dXJuIm9uZSI7Y2FzZSBMLlR3bzpyZXR1cm4idHdvIjtjYXNlIEwuRmV3OnJl
dHVybiJmZXciO2Nhc2UgTC5NYW55OnJldHVybiJtYW55IjtkZWZhdWx0OnJldHVybiJvdGhlciJ9
fSxlfShGKTtILmRlY29yYXRvcnM9W3t0eXBlOlYuRH1dLEguY3RvclBhcmFtZXRlcnM9ZnVuY3Rp
b24oKXtyZXR1cm5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOlYuSCxhcmdzOltWLmhd
fV19XX07dmFyIEw9e307TC5aZXJvPTAsTC5PbmU9MSxMLlR3bz0yLEwuRmV3PTMsTC5NYW55PTQs
TC5PdGhlcj01LExbTC5aZXJvXT0iWmVybyIsTFtMLk9uZV09Ik9uZSIsTFtMLlR3b109IlR3byIs
TFtMLkZld109IkZldyIsTFtMLk1hbnldPSJNYW55IixMW0wuT3RoZXJdPSJPdGhlciI7LyoqCisg
KiBAbGljZW5zZQorICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CisgKgorICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQg
aHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKKyAqLwordmFyIEI9ZnVuY3Rpb24oKXtmdW5jdGlv
biB0KHQsZSxuLHIpe3RoaXMuX2l0ZXJhYmxlRGlmZmVycz10LHRoaXMuX2tleVZhbHVlRGlmZmVy
cz1lLHRoaXMuX25nRWw9bix0aGlzLl9yZW5kZXJlcj1yLHRoaXMuX2luaXRpYWxDbGFzc2VzPVtd
fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImtsYXNzIix7c2V0OmZ1
bmN0aW9uKHQpe3RoaXMuX2FwcGx5SW5pdGlhbENsYXNzZXMoITApLHRoaXMuX2luaXRpYWxDbGFz
c2VzPSJzdHJpbmciPT10eXBlb2YgdD90LnNwbGl0KC9ccysvKTpbXSx0aGlzLl9hcHBseUluaXRp
YWxDbGFzc2VzKCExKSx0aGlzLl9hcHBseUNsYXNzZXModGhpcy5fcmF3Q2xhc3MsITEpfSxlbnVt
ZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3Rv
dHlwZSwibmdDbGFzcyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jbGVhbnVwQ2xhc3Nlcyh0aGlz
Ll9yYXdDbGFzcyksdGhpcy5faXRlcmFibGVEaWZmZXI9bnVsbCx0aGlzLl9rZXlWYWx1ZURpZmZl
cj1udWxsLHRoaXMuX3Jhd0NsYXNzPSJzdHJpbmciPT10eXBlb2YgdD90LnNwbGl0KC9ccysvKTp0
LHRoaXMuX3Jhd0NsYXNzJiYobi5pKFYuVykodGhpcy5fcmF3Q2xhc3MpP3RoaXMuX2l0ZXJhYmxl
RGlmZmVyPXRoaXMuX2l0ZXJhYmxlRGlmZmVycy5maW5kKHRoaXMuX3Jhd0NsYXNzKS5jcmVhdGUo
KTp0aGlzLl9rZXlWYWx1ZURpZmZlcj10aGlzLl9rZXlWYWx1ZURpZmZlcnMuZmluZCh0aGlzLl9y
YXdDbGFzcykuY3JlYXRlKCkpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJv
dG90eXBlLm5nRG9DaGVjaz1mdW5jdGlvbigpe2lmKHRoaXMuX2l0ZXJhYmxlRGlmZmVyKXt2YXIg
dD10aGlzLl9pdGVyYWJsZURpZmZlci5kaWZmKHRoaXMuX3Jhd0NsYXNzKTt0JiZ0aGlzLl9hcHBs
eUl0ZXJhYmxlQ2hhbmdlcyh0KX1lbHNlIGlmKHRoaXMuX2tleVZhbHVlRGlmZmVyKXt2YXIgZT10
aGlzLl9rZXlWYWx1ZURpZmZlci5kaWZmKHRoaXMuX3Jhd0NsYXNzKTtlJiZ0aGlzLl9hcHBseUtl
eVZhbHVlQ2hhbmdlcyhlKX19LHQucHJvdG90eXBlLl9jbGVhbnVwQ2xhc3Nlcz1mdW5jdGlvbih0
KXt0aGlzLl9hcHBseUNsYXNzZXModCwhMCksdGhpcy5fYXBwbHlJbml0aWFsQ2xhc3NlcyghMSl9
LHQucHJvdG90eXBlLl9hcHBseUtleVZhbHVlQ2hhbmdlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlz
O3QuZm9yRWFjaEFkZGVkSXRlbShmdW5jdGlvbih0KXtyZXR1cm4gZS5fdG9nZ2xlQ2xhc3ModC5r
ZXksdC5jdXJyZW50VmFsdWUpfSksdC5mb3JFYWNoQ2hhbmdlZEl0ZW0oZnVuY3Rpb24odCl7cmV0
dXJuIGUuX3RvZ2dsZUNsYXNzKHQua2V5LHQuY3VycmVudFZhbHVlKX0pLHQuZm9yRWFjaFJlbW92
ZWRJdGVtKGZ1bmN0aW9uKHQpe3QucHJldmlvdXNWYWx1ZSYmZS5fdG9nZ2xlQ2xhc3ModC5rZXks
ITEpfSl9LHQucHJvdG90eXBlLl9hcHBseUl0ZXJhYmxlQ2hhbmdlcz1mdW5jdGlvbih0KXt2YXIg
ZT10aGlzO3QuZm9yRWFjaEFkZGVkSXRlbShmdW5jdGlvbih0KXtpZigic3RyaW5nIiE9dHlwZW9m
IHQuaXRlbSl0aHJvdyBuZXcgRXJyb3IoIk5nQ2xhc3MgY2FuIG9ubHkgdG9nZ2xlIENTUyBjbGFz
c2VzIGV4cHJlc3NlZCBhcyBzdHJpbmdzLCBnb3QgIituLmkoVi5YKSh0Lml0ZW0pKTtlLl90b2dn
bGVDbGFzcyh0Lml0ZW0sITApfSksdC5mb3JFYWNoUmVtb3ZlZEl0ZW0oZnVuY3Rpb24odCl7cmV0
dXJuIGUuX3RvZ2dsZUNsYXNzKHQuaXRlbSwhMSl9KX0sdC5wcm90b3R5cGUuX2FwcGx5SW5pdGlh
bENsYXNzZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9pbml0aWFsQ2xhc3Nlcy5mb3JF
YWNoKGZ1bmN0aW9uKG4pe3JldHVybiBlLl90b2dnbGVDbGFzcyhuLCF0KX0pfSx0LnByb3RvdHlw
ZS5fYXBwbHlDbGFzc2VzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpczt0JiYoQXJyYXkuaXNBcnJh
eSh0KXx8dCBpbnN0YW5jZW9mIFNldD90LmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIG4uX3Rv
Z2dsZUNsYXNzKHQsIWUpfSk6T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihyKXtudWxs
IT10W3JdJiZuLl90b2dnbGVDbGFzcyhyLCFlKX0pKX0sdC5wcm90b3R5cGUuX3RvZ2dsZUNsYXNz
PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpczsodD10LnRyaW0oKSkmJnQuc3BsaXQoL1xzKy9nKS5m
b3JFYWNoKGZ1bmN0aW9uKHQpe24uX3JlbmRlcmVyLnNldEVsZW1lbnRDbGFzcyhuLl9uZ0VsLm5h
dGl2ZUVsZW1lbnQsdCwhIWUpfSl9LHR9KCk7Qi5kZWNvcmF0b3JzPVt7dHlwZTpWLlksYXJnczpb
e3NlbGVjdG9yOiJbbmdDbGFzc10ifV19XSxCLmN0b3JQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7cmV0
dXJuW3t0eXBlOlYubX0se3R5cGU6Vi5vfSx7dHlwZTpWLlp9LHt0eXBlOlYuXzB9XX0sQi5wcm9w
RGVjb3JhdG9ycz17a2xhc3M6W3t0eXBlOlYuXzEsYXJnczpbImNsYXNzIl19XSxuZ0NsYXNzOlt7
dHlwZTpWLl8xfV19Oy8qKgorICogQGxpY2Vuc2UKKyAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisgKiBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCisgKi8KK3ZhciBV
PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl92aWV3Q29udGFpbmVyUmVmPXQsdGhpcy5f
Y29tcG9uZW50UmVmPW51bGwsdGhpcy5fbW9kdWxlUmVmPW51bGx9cmV0dXJuIHQucHJvdG90eXBl
Lm5nT25DaGFuZ2VzPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY2xlYXIo
KSx0aGlzLl9jb21wb25lbnRSZWY9bnVsbCx0aGlzLm5nQ29tcG9uZW50T3V0bGV0KXt2YXIgZT10
aGlzLm5nQ29tcG9uZW50T3V0bGV0SW5qZWN0b3J8fHRoaXMuX3ZpZXdDb250YWluZXJSZWYucGFy
ZW50SW5qZWN0b3I7aWYodC5uZ0NvbXBvbmVudE91dGxldE5nTW9kdWxlRmFjdG9yeSlpZih0aGlz
Ll9tb2R1bGVSZWYmJnRoaXMuX21vZHVsZVJlZi5kZXN0cm95KCksdGhpcy5uZ0NvbXBvbmVudE91
dGxldE5nTW9kdWxlRmFjdG9yeSl7dmFyIG49ZS5nZXQoVi5nKTt0aGlzLl9tb2R1bGVSZWY9dGhp
cy5uZ0NvbXBvbmVudE91dGxldE5nTW9kdWxlRmFjdG9yeS5jcmVhdGUobi5pbmplY3Rvcil9ZWxz
ZSB0aGlzLl9tb2R1bGVSZWY9bnVsbDt2YXIgcj10aGlzLl9tb2R1bGVSZWY/dGhpcy5fbW9kdWxl
UmVmLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjplLmdldChWLmUpLG89ci5yZXNvbHZlQ29tcG9u
ZW50RmFjdG9yeSh0aGlzLm5nQ29tcG9uZW50T3V0bGV0KTt0aGlzLl9jb21wb25lbnRSZWY9dGhp
cy5fdmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQobyx0aGlzLl92aWV3Q29udGFpbmVy
UmVmLmxlbmd0aCxlLHRoaXMubmdDb21wb25lbnRPdXRsZXRDb250ZW50KX19LHQucHJvdG90eXBl
Lm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fbW9kdWxlUmVmJiZ0aGlzLl9tb2R1bGVSZWYu
ZGVzdHJveSgpfSx0fSgpO1UuZGVjb3JhdG9ycz1be3R5cGU6Vi5ZLGFyZ3M6W3tzZWxlY3Rvcjoi
W25nQ29tcG9uZW50T3V0bGV0XSJ9XX1dLFUuY3RvclBhcmFtZXRlcnM9ZnVuY3Rpb24oKXtyZXR1
cm5be3R5cGU6Vi5fMn1dfSxVLnByb3BEZWNvcmF0b3JzPXtuZ0NvbXBvbmVudE91dGxldDpbe3R5
cGU6Vi5fMX1dLG5nQ29tcG9uZW50T3V0bGV0SW5qZWN0b3I6W3t0eXBlOlYuXzF9XSxuZ0NvbXBv
bmVudE91dGxldENvbnRlbnQ6W3t0eXBlOlYuXzF9XSxuZ0NvbXBvbmVudE91dGxldE5nTW9kdWxl
RmFjdG9yeTpbe3R5cGU6Vi5fMX1dfTsvKioKKyAqIEBsaWNlbnNlCisgKiBDb3B5cmlnaHQgR29v
Z2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorICog
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQor
ICovCit2YXIgRz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dGhpcy4kaW1wbGljaXQ9
dCx0aGlzLm5nRm9yT2Y9ZSx0aGlzLmluZGV4PW4sdGhpcy5jb3VudD1yfXJldHVybiBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImZpcnN0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJu
IDA9PT10aGlzLmluZGV4fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibGFzdCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0
aGlzLmluZGV4PT09dGhpcy5jb3VudC0xfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0p
LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZXZlbiIse2dldDpmdW5jdGlvbigp
e3JldHVybiB0aGlzLmluZGV4JTI9PTB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSks
T2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJvZGQiLHtnZXQ6ZnVuY3Rpb24oKXty
ZXR1cm4hdGhpcy5ldmVufSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHR9KCkscT1m
dW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX3ZpZXdDb250YWluZXI9dCx0aGlzLl90
ZW1wbGF0ZT1lLHRoaXMuX2RpZmZlcnM9bix0aGlzLl9kaWZmZXI9bnVsbH1yZXR1cm4gT2JqZWN0
LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ0ZvclRyYWNrQnkiLHtnZXQ6ZnVuY3Rpb24o
KXtyZXR1cm4gdGhpcy5fdHJhY2tCeUZufSxzZXQ6ZnVuY3Rpb24odCl7bi5pKFYuTykoKSYmbnVs
bCE9dCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQmJmNvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29s
ZS53YXJuKCJ0cmFja0J5IG11c3QgYmUgYSBmdW5jdGlvbiwgYnV0IHJlY2VpdmVkICIrSlNPTi5z
dHJpbmdpZnkodCkrIi4gU2VlIGh0dHBzOi8vYW5ndWxhci5pby9kb2NzL3RzL2xhdGVzdC9hcGkv
Y29tbW9uL2luZGV4L05nRm9yLWRpcmVjdGl2ZS5odG1sIyEjY2hhbmdlLXByb3BhZ2F0aW9uIGZv
ciBtb3JlIGluZm9ybWF0aW9uLiIpLHRoaXMuX3RyYWNrQnlGbj10fSxlbnVtZXJhYmxlOiEwLGNv
bmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibmdGb3JU
ZW1wbGF0ZSIse3NldDpmdW5jdGlvbih0KXt0JiYodGhpcy5fdGVtcGxhdGU9dCl9LGVudW1lcmFi
bGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24o
dCl7aWYoIm5nRm9yT2YiaW4gdCl7dmFyIGU9dC5uZ0Zvck9mLmN1cnJlbnRWYWx1ZTtpZighdGhp
cy5fZGlmZmVyJiZlKXRyeXt0aGlzLl9kaWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKGUpLmNyZWF0
ZSh0aGlzLm5nRm9yVHJhY2tCeSl9Y2F0Y2godCl7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmlu
ZCBhIGRpZmZlciBzdXBwb3J0aW5nIG9iamVjdCAnIitlKyInIG9mIHR5cGUgJyIrdShlKSsiJy4g
TmdGb3Igb25seSBzdXBwb3J0cyBiaW5kaW5nIHRvIEl0ZXJhYmxlcyBzdWNoIGFzIEFycmF5cy4i
KX19fSx0LnByb3RvdHlwZS5uZ0RvQ2hlY2s9ZnVuY3Rpb24oKXtpZih0aGlzLl9kaWZmZXIpe3Zh
ciB0PXRoaXMuX2RpZmZlci5kaWZmKHRoaXMubmdGb3JPZik7dCYmdGhpcy5fYXBwbHlDaGFuZ2Vz
KHQpfX0sdC5wcm90b3R5cGUuX2FwcGx5Q2hhbmdlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49
W107dC5mb3JFYWNoT3BlcmF0aW9uKGZ1bmN0aW9uKHQscixvKXtpZihudWxsPT10LnByZXZpb3Vz
SW5kZXgpe3ZhciBpPWUuX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KGUuX3RlbXBs
YXRlLG5ldyBHKG51bGwsZS5uZ0Zvck9mLC0xLC0xKSxvKSxhPW5ldyB6KHQsaSk7bi5wdXNoKGEp
fWVsc2UgaWYobnVsbD09byllLl92aWV3Q29udGFpbmVyLnJlbW92ZShyKTtlbHNle3ZhciBpPWUu
X3ZpZXdDb250YWluZXIuZ2V0KHIpO2UuX3ZpZXdDb250YWluZXIubW92ZShpLG8pO3ZhciBhPW5l
dyB6KHQsaSk7bi5wdXNoKGEpfX0pO2Zvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKXRoaXMuX3Bl
clZpZXdDaGFuZ2UobltyXS52aWV3LG5bcl0ucmVjb3JkKTtmb3IodmFyIHI9MCxvPXRoaXMuX3Zp
ZXdDb250YWluZXIubGVuZ3RoO3I8bztyKyspe3ZhciBpPXRoaXMuX3ZpZXdDb250YWluZXIuZ2V0
KHIpO2kuY29udGV4dC5pbmRleD1yLGkuY29udGV4dC5jb3VudD1vfXQuZm9yRWFjaElkZW50aXR5
Q2hhbmdlKGZ1bmN0aW9uKHQpe2UuX3ZpZXdDb250YWluZXIuZ2V0KHQuY3VycmVudEluZGV4KS5j
b250ZXh0LiRpbXBsaWNpdD10Lml0ZW19KX0sdC5wcm90b3R5cGUuX3BlclZpZXdDaGFuZ2U9ZnVu
Y3Rpb24odCxlKXt0LmNvbnRleHQuJGltcGxpY2l0PWUuaXRlbX0sdH0oKTtxLmRlY29yYXRvcnM9
W3t0eXBlOlYuWSxhcmdzOlt7c2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0ifV19XSxxLmN0b3JQ
YXJhbWV0ZXJzPWZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlYuXzJ9LHt0eXBlOlYuXzN9LHt0eXBl
OlYubX1dfSxxLnByb3BEZWNvcmF0b3JzPXtuZ0Zvck9mOlt7dHlwZTpWLl8xfV0sbmdGb3JUcmFj
a0J5Olt7dHlwZTpWLl8xfV0sbmdGb3JUZW1wbGF0ZTpbe3R5cGU6Vi5fMX1dfTt2YXIgej1mdW5j
dGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnJlY29yZD10LHRoaXMudmlldz1lfXJldHVybiB0
fSgpLFo9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fdmlld0NvbnRhaW5lcj10LHRo
aXMuX2NvbnRleHQ9bmV3IFksdGhpcy5fdGhlblRlbXBsYXRlUmVmPW51bGwsdGhpcy5fZWxzZVRl
bXBsYXRlUmVmPW51bGwsdGhpcy5fdGhlblZpZXdSZWY9bnVsbCx0aGlzLl9lbHNlVmlld1JlZj1u
dWxsLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZj1lfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHko
dC5wcm90b3R5cGUsIm5nSWYiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY29udGV4dC4kaW1wbGlj
aXQ9dGhpcy5fY29udGV4dC5uZ0lmPXQsdGhpcy5fdXBkYXRlVmlldygpfSxlbnVtZXJhYmxlOiEw
LGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibmdJ
ZlRoZW4iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fdGhlblRlbXBsYXRlUmVmPXQsdGhpcy5fdGhl
blZpZXdSZWY9bnVsbCx0aGlzLl91cGRhdGVWaWV3KCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJh
YmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ0lmRWxzZSIse3Nl
dDpmdW5jdGlvbih0KXt0aGlzLl9lbHNlVGVtcGxhdGVSZWY9dCx0aGlzLl9lbHNlVmlld1JlZj1u
dWxsLHRoaXMuX3VwZGF0ZVZpZXcoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0
LnByb3RvdHlwZS5fdXBkYXRlVmlldz1mdW5jdGlvbigpe3RoaXMuX2NvbnRleHQuJGltcGxpY2l0
P3RoaXMuX3RoZW5WaWV3UmVmfHwodGhpcy5fdmlld0NvbnRhaW5lci5jbGVhcigpLHRoaXMuX2Vs
c2VWaWV3UmVmPW51bGwsdGhpcy5fdGhlblRlbXBsYXRlUmVmJiYodGhpcy5fdGhlblZpZXdSZWY9
dGhpcy5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGhlblRlbXBsYXRl
UmVmLHRoaXMuX2NvbnRleHQpKSk6dGhpcy5fZWxzZVZpZXdSZWZ8fCh0aGlzLl92aWV3Q29udGFp
bmVyLmNsZWFyKCksdGhpcy5fdGhlblZpZXdSZWY9bnVsbCx0aGlzLl9lbHNlVGVtcGxhdGVSZWYm
Jih0aGlzLl9lbHNlVmlld1JlZj10aGlzLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmll
dyh0aGlzLl9lbHNlVGVtcGxhdGVSZWYsdGhpcy5fY29udGV4dCkpKX0sdH0oKTtaLmRlY29yYXRv
cnM9W3t0eXBlOlYuWSxhcmdzOlt7c2VsZWN0b3I6IltuZ0lmXSJ9XX1dLFouY3RvclBhcmFtZXRl
cnM9ZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Vi5fMn0se3R5cGU6Vi5fM31dfSxaLnByb3BEZWNv
cmF0b3JzPXtuZ0lmOlt7dHlwZTpWLl8xfV0sbmdJZlRoZW46W3t0eXBlOlYuXzF9XSxuZ0lmRWxz
ZTpbe3R5cGU6Vi5fMX1dfTt2YXIgWT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLiRpbXBs
aWNpdD1udWxsLHRoaXMubmdJZj1udWxsfXJldHVybiB0fSgpLEs9ZnVuY3Rpb24oKXtmdW5jdGlv
biB0KHQsZSl7dGhpcy5fdmlld0NvbnRhaW5lclJlZj10LHRoaXMuX3RlbXBsYXRlUmVmPWUsdGhp
cy5fY3JlYXRlZD0hMX1yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKCl7dGhpcy5f
Y3JlYXRlZD0hMCx0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlz
Ll90ZW1wbGF0ZVJlZil9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9jcmVh
dGVkPSExLHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY2xlYXIoKX0sdC5wcm90b3R5cGUuZW5mb3Jj
ZVN0YXRlPWZ1bmN0aW9uKHQpe3QmJiF0aGlzLl9jcmVhdGVkP3RoaXMuY3JlYXRlKCk6IXQmJnRo
aXMuX2NyZWF0ZWQmJnRoaXMuZGVzdHJveSgpfSx0fSgpLFc9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0
KCl7dGhpcy5fZGVmYXVsdFVzZWQ9ITEsdGhpcy5fY2FzZUNvdW50PTAsdGhpcy5fbGFzdENhc2VD
aGVja0luZGV4PTAsdGhpcy5fbGFzdENhc2VzTWF0Y2hlZD0hMX1yZXR1cm4gT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ1N3aXRjaCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9u
Z1N3aXRjaD10LDA9PT10aGlzLl9jYXNlQ291bnQmJnRoaXMuX3VwZGF0ZURlZmF1bHRDYXNlcygh
MCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuX2FkZENhc2U9
ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FzZUNvdW50Kyt9LHQucHJvdG90eXBlLl9hZGREZWZh
dWx0PWZ1bmN0aW9uKHQpe3RoaXMuX2RlZmF1bHRWaWV3c3x8KHRoaXMuX2RlZmF1bHRWaWV3cz1b
XSksdGhpcy5fZGVmYXVsdFZpZXdzLnB1c2godCl9LHQucHJvdG90eXBlLl9tYXRjaENhc2U9ZnVu
Y3Rpb24odCl7dmFyIGU9dD09dGhpcy5fbmdTd2l0Y2g7cmV0dXJuIHRoaXMuX2xhc3RDYXNlc01h
dGNoZWQ9dGhpcy5fbGFzdENhc2VzTWF0Y2hlZHx8ZSx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXgr
Kyx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXg9PT10aGlzLl9jYXNlQ291bnQmJih0aGlzLl91cGRh
dGVEZWZhdWx0Q2FzZXMoIXRoaXMuX2xhc3RDYXNlc01hdGNoZWQpLHRoaXMuX2xhc3RDYXNlQ2hl
Y2tJbmRleD0wLHRoaXMuX2xhc3RDYXNlc01hdGNoZWQ9ITEpLGV9LHQucHJvdG90eXBlLl91cGRh
dGVEZWZhdWx0Q2FzZXM9ZnVuY3Rpb24odCl7aWYodGhpcy5fZGVmYXVsdFZpZXdzJiZ0IT09dGhp
cy5fZGVmYXVsdFVzZWQpe3RoaXMuX2RlZmF1bHRVc2VkPXQ7Zm9yKHZhciBlPTA7ZTx0aGlzLl9k
ZWZhdWx0Vmlld3MubGVuZ3RoO2UrKyl7dGhpcy5fZGVmYXVsdFZpZXdzW2VdLmVuZm9yY2VTdGF0
ZSh0KX19fSx0fSgpO1cuZGVjb3JhdG9ycz1be3R5cGU6Vi5ZLGFyZ3M6W3tzZWxlY3RvcjoiW25n
U3dpdGNoXSJ9XX1dLFcuY3RvclBhcmFtZXRlcnM9ZnVuY3Rpb24oKXtyZXR1cm5bXX0sVy5wcm9w
RGVjb3JhdG9ycz17bmdTd2l0Y2g6W3t0eXBlOlYuXzF9XX07dmFyIFE9ZnVuY3Rpb24oKXtmdW5j
dGlvbiB0KHQsZSxuKXt0aGlzLm5nU3dpdGNoPW4sbi5fYWRkQ2FzZSgpLHRoaXMuX3ZpZXc9bmV3
IEsodCxlKX1yZXR1cm4gdC5wcm90b3R5cGUubmdEb0NoZWNrPWZ1bmN0aW9uKCl7dGhpcy5fdmll
dy5lbmZvcmNlU3RhdGUodGhpcy5uZ1N3aXRjaC5fbWF0Y2hDYXNlKHRoaXMubmdTd2l0Y2hDYXNl
KSl9LHR9KCk7US5kZWNvcmF0b3JzPVt7dHlwZTpWLlksYXJnczpbe3NlbGVjdG9yOiJbbmdTd2l0
Y2hDYXNlXSJ9XX1dLFEuY3RvclBhcmFtZXRlcnM9ZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Vi5f
Mn0se3R5cGU6Vi5fM30se3R5cGU6VyxkZWNvcmF0b3JzOlt7dHlwZTpWLl80fV19XX0sUS5wcm9w
RGVjb3JhdG9ycz17bmdTd2l0Y2hDYXNlOlt7dHlwZTpWLl8xfV19O3ZhciBKPWZ1bmN0aW9uKCl7
ZnVuY3Rpb24gdCh0LGUsbil7bi5fYWRkRGVmYXVsdChuZXcgSyh0LGUpKX1yZXR1cm4gdH0oKTtK
LmRlY29yYXRvcnM9W3t0eXBlOlYuWSxhcmdzOlt7c2VsZWN0b3I6IltuZ1N3aXRjaERlZmF1bHRd
In1dfV0sSi5jdG9yUGFyYW1ldGVycz1mdW5jdGlvbigpe3JldHVyblt7dHlwZTpWLl8yfSx7dHlw
ZTpWLl8zfSx7dHlwZTpXLGRlY29yYXRvcnM6W3t0eXBlOlYuXzR9XX1dfTsvKioKKyAqIEBsaWNl
bnNlCisgKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisg
KiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczov
L2FuZ3VsYXIuaW8vbGljZW5zZQorICovCit2YXIgJD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7
dGhpcy5fbG9jYWxpemF0aW9uPXQsdGhpcy5fY2FzZVZpZXdzPXt9fXJldHVybiBPYmplY3QuZGVm
aW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5nUGx1cmFsIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMu
X3N3aXRjaFZhbHVlPXQsdGhpcy5fdXBkYXRlVmlldygpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3Vy
YWJsZTohMH0pLHQucHJvdG90eXBlLmFkZENhc2U9ZnVuY3Rpb24odCxlKXt0aGlzLl9jYXNlVmll
d3NbdF09ZX0sdC5wcm90b3R5cGUuX3VwZGF0ZVZpZXc9ZnVuY3Rpb24oKXt0aGlzLl9jbGVhclZp
ZXdzKCk7dmFyIHQ9T2JqZWN0LmtleXModGhpcy5fY2FzZVZpZXdzKSxlPWkodGhpcy5fc3dpdGNo
VmFsdWUsdCx0aGlzLl9sb2NhbGl6YXRpb24pO3RoaXMuX2FjdGl2YXRlVmlldyh0aGlzLl9jYXNl
Vmlld3NbZV0pfSx0LnByb3RvdHlwZS5fY2xlYXJWaWV3cz1mdW5jdGlvbigpe3RoaXMuX2FjdGl2
ZVZpZXcmJnRoaXMuX2FjdGl2ZVZpZXcuZGVzdHJveSgpfSx0LnByb3RvdHlwZS5fYWN0aXZhdGVW
aWV3PWZ1bmN0aW9uKHQpe3QmJih0aGlzLl9hY3RpdmVWaWV3PXQsdGhpcy5fYWN0aXZlVmlldy5j
cmVhdGUoKSl9LHR9KCk7JC5kZWNvcmF0b3JzPVt7dHlwZTpWLlksYXJnczpbe3NlbGVjdG9yOiJb
bmdQbHVyYWxdIn1dfV0sJC5jdG9yUGFyYW1ldGVycz1mdW5jdGlvbigpe3JldHVyblt7dHlwZTpG
fV19LCQucHJvcERlY29yYXRvcnM9e25nUGx1cmFsOlt7dHlwZTpWLl8xfV19O3ZhciBYPWZ1bmN0
aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt0aGlzLnZhbHVlPXQ7dmFyIG89IWlzTmFOKE51bWJl
cih0KSk7ci5hZGRDYXNlKG8/Ij0iK3Q6dCxuZXcgSyhuLGUpKX1yZXR1cm4gdH0oKTtYLmRlY29y
YXRvcnM9W3t0eXBlOlYuWSxhcmdzOlt7c2VsZWN0b3I6IltuZ1BsdXJhbENhc2VdIn1dfV0sWC5j
dG9yUGFyYW1ldGVycz1mdW5jdGlvbigpe3JldHVyblt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpb
e3R5cGU6Vi5fNSxhcmdzOlsibmdQbHVyYWxDYXNlIl19XX0se3R5cGU6Vi5fM30se3R5cGU6Vi5f
Mn0se3R5cGU6JCxkZWNvcmF0b3JzOlt7dHlwZTpWLl80fV19XX07LyoqCisgKiBAbGljZW5zZQor
ICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKyAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1
bGFyLmlvL2xpY2Vuc2UKKyAqLwordmFyIHR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7
dGhpcy5fZGlmZmVycz10LHRoaXMuX25nRWw9ZSx0aGlzLl9yZW5kZXJlcj1ufXJldHVybiBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5nU3R5bGUiLHtzZXQ6ZnVuY3Rpb24odCl7
dGhpcy5fbmdTdHlsZT10LCF0aGlzLl9kaWZmZXImJnQmJih0aGlzLl9kaWZmZXI9dGhpcy5fZGlm
ZmVycy5maW5kKHQpLmNyZWF0ZSgpKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0
LnByb3RvdHlwZS5uZ0RvQ2hlY2s9ZnVuY3Rpb24oKXtpZih0aGlzLl9kaWZmZXIpe3ZhciB0PXRo
aXMuX2RpZmZlci5kaWZmKHRoaXMuX25nU3R5bGUpO3QmJnRoaXMuX2FwcGx5Q2hhbmdlcyh0KX19
LHQucHJvdG90eXBlLl9hcHBseUNoYW5nZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0LmZvckVh
Y2hSZW1vdmVkSXRlbShmdW5jdGlvbih0KXtyZXR1cm4gZS5fc2V0U3R5bGUodC5rZXksbnVsbCl9
KSx0LmZvckVhY2hBZGRlZEl0ZW0oZnVuY3Rpb24odCl7cmV0dXJuIGUuX3NldFN0eWxlKHQua2V5
LHQuY3VycmVudFZhbHVlKX0pLHQuZm9yRWFjaENoYW5nZWRJdGVtKGZ1bmN0aW9uKHQpe3JldHVy
biBlLl9zZXRTdHlsZSh0LmtleSx0LmN1cnJlbnRWYWx1ZSl9KX0sdC5wcm90b3R5cGUuX3NldFN0
eWxlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5zcGxpdCgiLiIpLHI9blswXSxvPW5bMV07ZT1udWxs
IT1lJiZvPyIiK2UrbzplLHRoaXMuX3JlbmRlcmVyLnNldEVsZW1lbnRTdHlsZSh0aGlzLl9uZ0Vs
Lm5hdGl2ZUVsZW1lbnQscixlKX0sdH0oKTt0dC5kZWNvcmF0b3JzPVt7dHlwZTpWLlksYXJnczpb
e3NlbGVjdG9yOiJbbmdTdHlsZV0ifV19XSx0dC5jdG9yUGFyYW1ldGVycz1mdW5jdGlvbigpe3Jl
dHVyblt7dHlwZTpWLm99LHt0eXBlOlYuWn0se3R5cGU6Vi5fMH1dfSx0dC5wcm9wRGVjb3JhdG9y
cz17bmdTdHlsZTpbe3R5cGU6Vi5fMX1dfTsvKioKKyAqIEBsaWNlbnNlCisgKiBDb3B5cmlnaHQg
R29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
ICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5z
ZQorICovCit2YXIgZXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX3ZpZXdDb250YWlu
ZXJSZWY9dH1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ091dGxl
dENvbnRleHQiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5uZ1RlbXBsYXRlT3V0bGV0Q29udGV4dD10
fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm5nT25DaGFuZ2Vz
PWZ1bmN0aW9uKHQpe3RoaXMuX3ZpZXdSZWYmJnRoaXMuX3ZpZXdDb250YWluZXJSZWYucmVtb3Zl
KHRoaXMuX3ZpZXdDb250YWluZXJSZWYuaW5kZXhPZih0aGlzLl92aWV3UmVmKSksdGhpcy5uZ1Rl
bXBsYXRlT3V0bGV0JiYodGhpcy5fdmlld1JlZj10aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0
ZUVtYmVkZGVkVmlldyh0aGlzLm5nVGVtcGxhdGVPdXRsZXQsdGhpcy5uZ1RlbXBsYXRlT3V0bGV0
Q29udGV4dCkpfSx0fSgpO2V0LmRlY29yYXRvcnM9W3t0eXBlOlYuWSxhcmdzOlt7c2VsZWN0b3I6
IltuZ1RlbXBsYXRlT3V0bGV0XSJ9XX1dLGV0LmN0b3JQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7cmV0
dXJuW3t0eXBlOlYuXzJ9XX0sZXQucHJvcERlY29yYXRvcnM9e25nVGVtcGxhdGVPdXRsZXRDb250
ZXh0Olt7dHlwZTpWLl8xfV0sbmdUZW1wbGF0ZU91dGxldDpbe3R5cGU6Vi5fMX1dLG5nT3V0bGV0
Q29udGV4dDpbe3R5cGU6Vi5fMX1dfTsvKioKKyAqIEBsaWNlbnNlCisgKiBDb3B5cmlnaHQgR29v
Z2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorICog
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQor
ICovCit2YXIgbnQ9W0IsVSxxLFosZXQsdHQsVyxRLEosJCxYXSxydD1mdW5jdGlvbigpe2Z1bmN0
aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmNyZWF0ZVN1YnNjcmlwdGlvbj1mdW5jdGlvbih0
LGUpe3JldHVybiB0LnN1YnNjcmliZSh7bmV4dDplLGVycm9yOmZ1bmN0aW9uKHQpe3Rocm93IHR9
fSl9LHQucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24odCl7dC51bnN1YnNjcmliZSgpfSx0LnBy
b3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7dC51bnN1YnNjcmliZSgpfSx0fSgpLG90PWZ1
bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlU3Vic2NyaXB0
aW9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudGhlbihlLGZ1bmN0aW9uKHQpe3Rocm93IHR9KX0s
dC5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbih0KXt9LHQucHJvdG90eXBlLm9uRGVzdHJveT1m
dW5jdGlvbih0KXt9LHR9KCksaXQ9bmV3IG90LGF0PW5ldyBydCxzdD1mdW5jdGlvbigpe2Z1bmN0
aW9uIHQodCl7dGhpcy5fcmVmPXQsdGhpcy5fbGF0ZXN0VmFsdWU9bnVsbCx0aGlzLl9sYXRlc3RS
ZXR1cm5lZFZhbHVlPW51bGwsdGhpcy5fc3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fb2JqPW51bGws
dGhpcy5fc3RyYXRlZ3k9bnVsbH1yZXR1cm4gdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rp
b24oKXt0aGlzLl9zdWJzY3JpcHRpb24mJnRoaXMuX2Rpc3Bvc2UoKX0sdC5wcm90b3R5cGUudHJh
bnNmb3JtPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9vYmo/dCE9PXRoaXMuX29iaj8odGhpcy5f
ZGlzcG9zZSgpLHRoaXMudHJhbnNmb3JtKHQpKTp0aGlzLl9sYXRlc3RWYWx1ZT09PXRoaXMuX2xh
dGVzdFJldHVybmVkVmFsdWU/dGhpcy5fbGF0ZXN0UmV0dXJuZWRWYWx1ZToodGhpcy5fbGF0ZXN0
UmV0dXJuZWRWYWx1ZT10aGlzLl9sYXRlc3RWYWx1ZSxWLl82LndyYXAodGhpcy5fbGF0ZXN0VmFs
dWUpKToodCYmdGhpcy5fc3Vic2NyaWJlKHQpLHRoaXMuX2xhdGVzdFJldHVybmVkVmFsdWU9dGhp
cy5fbGF0ZXN0VmFsdWUsdGhpcy5fbGF0ZXN0VmFsdWUpfSx0LnByb3RvdHlwZS5fc3Vic2NyaWJl
PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fb2JqPXQsdGhpcy5fc3RyYXRlZ3k9dGhpcy5f
c2VsZWN0U3RyYXRlZ3kodCksdGhpcy5fc3Vic2NyaXB0aW9uPXRoaXMuX3N0cmF0ZWd5LmNyZWF0
ZVN1YnNjcmlwdGlvbih0LGZ1bmN0aW9uKG4pe3JldHVybiBlLl91cGRhdGVMYXRlc3RWYWx1ZSh0
LG4pfSl9LHQucHJvdG90eXBlLl9zZWxlY3RTdHJhdGVneT1mdW5jdGlvbihlKXtpZihuLmkoVi5f
NykoZSkpcmV0dXJuIGl0O2lmKG4uaShWLl84KShlKSlyZXR1cm4gYXQ7dGhyb3cgYyh0LGUpfSx0
LnByb3RvdHlwZS5fZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuX3N0cmF0ZWd5LmRpc3Bvc2UodGhp
cy5fc3Vic2NyaXB0aW9uKSx0aGlzLl9sYXRlc3RWYWx1ZT1udWxsLHRoaXMuX2xhdGVzdFJldHVy
bmVkVmFsdWU9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb249bnVsbCx0aGlzLl9vYmo9bnVsbH0sdC5w
cm90b3R5cGUuX3VwZGF0ZUxhdGVzdFZhbHVlPWZ1bmN0aW9uKHQsZSl7dD09PXRoaXMuX29iaiYm
KHRoaXMuX2xhdGVzdFZhbHVlPWUsdGhpcy5fcmVmLm1hcmtGb3JDaGVjaygpKX0sdH0oKTtzdC5k
ZWNvcmF0b3JzPVt7dHlwZTpWLl85LGFyZ3M6W3tuYW1lOiJhc3luYyIscHVyZTohMX1dfV0sc3Qu
Y3RvclBhcmFtZXRlcnM9ZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Vi5fMTB9XX07LyoqCisgKiBA
bGljZW5zZQorICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg
KgorICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0
cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKKyAqLwordmFyIHV0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24g
dCgpe31yZXR1cm4gdC5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGUpe2lmKCFlKXJldHVy
biBlO2lmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBjKHQsZSk7cmV0dXJuIGUudG9Mb3dlckNh
c2UoKX0sdH0oKTt1dC5kZWNvcmF0b3JzPVt7dHlwZTpWLl85LGFyZ3M6W3tuYW1lOiJsb3dlcmNh
c2UifV19XSx1dC5jdG9yUGFyYW1ldGVycz1mdW5jdGlvbigpe3JldHVybltdfTt2YXIgY3Q9ZnVu
Y3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rp
b24oZSl7aWYoIWUpcmV0dXJuIGU7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IGModCxlKTty
ZXR1cm4gZS5zcGxpdCgvXGIvZykubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBsKHQpfSkuam9pbigi
Iil9LHR9KCk7Y3QuZGVjb3JhdG9ycz1be3R5cGU6Vi5fOSxhcmdzOlt7bmFtZToidGl0bGVjYXNl
In1dfV0sY3QuY3RvclBhcmFtZXRlcnM9ZnVuY3Rpb24oKXtyZXR1cm5bXX07dmFyIGx0PWZ1bmN0
aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9u
KGUpe2lmKCFlKXJldHVybiBlO2lmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBjKHQsZSk7cmV0
dXJuIGUudG9VcHBlckNhc2UoKX0sdH0oKTtsdC5kZWNvcmF0b3JzPVt7dHlwZTpWLl85LGFyZ3M6
W3tuYW1lOiJ1cHBlcmNhc2UifV19XSxsdC5jdG9yUGFyYW1ldGVycz1mdW5jdGlvbigpe3JldHVy
bltdfTt2YXIgcHQ9e307cHQuRGVjaW1hbD0wLHB0LlBlcmNlbnQ9MSxwdC5DdXJyZW5jeT0yLHB0
W3B0LkRlY2ltYWxdPSJEZWNpbWFsIixwdFtwdC5QZXJjZW50XT0iUGVyY2VudCIscHRbcHQuQ3Vy
cmVuY3ldPSJDdXJyZW5jeSI7dmFyIGZ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4g
dC5mb3JtYXQ9ZnVuY3Rpb24odCxlLG4scil7dm9pZCAwPT09ciYmKHI9e30pO3ZhciBvPXIubWlu
aW11bUludGVnZXJEaWdpdHMsaT1yLm1pbmltdW1GcmFjdGlvbkRpZ2l0cyxhPXIubWF4aW11bUZy
YWN0aW9uRGlnaXRzLHM9ci5jdXJyZW5jeSx1PXIuY3VycmVuY3lBc1N5bWJvbCxjPXZvaWQgMCE9
PXUmJnUsbD17bWluaW11bUludGVnZXJEaWdpdHM6byxtaW5pbXVtRnJhY3Rpb25EaWdpdHM6aSxt
YXhpbXVtRnJhY3Rpb25EaWdpdHM6YSxzdHlsZTpwdFtuXS50b0xvd2VyQ2FzZSgpfTtyZXR1cm4g
bj09cHQuQ3VycmVuY3kmJihsLmN1cnJlbmN5PSJzdHJpbmciPT10eXBlb2Ygcz9zOnZvaWQgMCxs
LmN1cnJlbmN5RGlzcGxheT1jPyJzeW1ib2wiOiJjb2RlIiksbmV3IEludGwuTnVtYmVyRm9ybWF0
KGUsbCkuZm9ybWF0KHQpfSx0fSgpLGR0PS8oKD86W155TUxkSGhtc2F6WkV3R2pKJ10rKXwoPzon
KD86W14nXXwnJykqJyl8KD86RSt8eSt8TSt8TCt8ZCt8SCt8aCt8Sit8ait8bSt8cyt8YXx6fFp8
Ryt8dyspKSguKikvLGh0PXt5TU1NZGptczpiKF8oW2coInllYXIiLDEpLHYoIm1vbnRoIiwzKSxn
KCJkYXkiLDEpLGcoImhvdXIiLDEpLGcoIm1pbnV0ZSIsMSksZygic2Vjb25kIiwxKV0pKSx5TWRq
bTpiKF8oW2coInllYXIiLDEpLGcoIm1vbnRoIiwxKSxnKCJkYXkiLDEpLGcoImhvdXIiLDEpLGco
Im1pbnV0ZSIsMSldKSkseU1NTU1FRUVFZDpiKF8oW2coInllYXIiLDEpLHYoIm1vbnRoIiw0KSx2
KCJ3ZWVrZGF5Iiw0KSxnKCJkYXkiLDEpXSkpLHlNTU1NZDpiKF8oW2coInllYXIiLDEpLHYoIm1v
bnRoIiw0KSxnKCJkYXkiLDEpXSkpLHlNTU1kOmIoXyhbZygieWVhciIsMSksdigibW9udGgiLDMp
LGcoImRheSIsMSldKSkseU1kOmIoXyhbZygieWVhciIsMSksZygibW9udGgiLDEpLGcoImRheSIs
MSldKSksam1zOmIoXyhbZygiaG91ciIsMSksZygic2Vjb25kIiwxKSxnKCJtaW51dGUiLDEpXSkp
LGptOmIoXyhbZygiaG91ciIsMSksZygibWludXRlIiwxKV0pKX0seXQ9e3l5eXk6YihnKCJ5ZWFy
Iiw0KSkseXk6YihnKCJ5ZWFyIiwyKSkseTpiKGcoInllYXIiLDEpKSxNTU1NOmIodigibW9udGgi
LDQpKSxNTU06Yih2KCJtb250aCIsMykpLE1NOmIoZygibW9udGgiLDIpKSxNOmIoZygibW9udGgi
LDEpKSxMTExMOmIodigibW9udGgiLDQpKSxMOmIodigibW9udGgiLDEpKSxkZDpiKGcoImRheSIs
MikpLGQ6YihnKCJkYXkiLDEpKSxISDpwKGQoYihtKGcoImhvdXIiLDIpLCExKSkpKSxIOmQoYiht
KGcoImhvdXIiLDEpLCExKSkpLGhoOnAoZChiKG0oZygiaG91ciIsMiksITApKSkpLGg6ZChiKG0o
ZygiaG91ciIsMSksITApKSksamo6YihnKCJob3VyIiwyKSksajpiKGcoImhvdXIiLDEpKSxtbTpw
KGIoZygibWludXRlIiwyKSkpLG06YihnKCJtaW51dGUiLDEpKSxzczpwKGIoZygic2Vjb25kIiwy
KSkpLHM6YihnKCJzZWNvbmQiLDEpKSxzc3M6YihnKCJzZWNvbmQiLDMpKSxFRUVFOmIodigid2Vl
a2RheSIsNCkpLEVFRTpiKHYoIndlZWtkYXkiLDMpKSxFRTpiKHYoIndlZWtkYXkiLDIpKSxFOmIo
digid2Vla2RheSIsMSkpLGE6ZihiKG0oZygiaG91ciIsMSksITApKSksWjp5KCJzaG9ydCIpLHo6
eSgibG9uZyIpLHd3OmIoe30pLHc6Yih7fSksRzpiKHYoImVyYSIsMSkpLEdHOmIodigiZXJhIiwy
KSksR0dHOmIodigiZXJhIiwzKSksR0dHRzpiKHYoImVyYSIsNCkpfSxtdD1uZXcgTWFwLGd0PWZ1
bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5mb3JtYXQ9ZnVuY3Rpb24odCxlLG4pe3Jl
dHVybiB3KG4sdCxlKX0sdH0oKSx2dD0vXihcZCspP1wuKChcZCspKC0oXGQrKSk/KT8kLyxfdD1m
dW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fbG9jYWxlPXR9cmV0dXJuIHQucHJvdG90eXBl
LnRyYW5zZm9ybT1mdW5jdGlvbihlLG4pe3JldHVybiBFKHQsdGhpcy5fbG9jYWxlLGUscHQuRGVj
aW1hbCxuKX0sdH0oKTtfdC5kZWNvcmF0b3JzPVt7dHlwZTpWLl85LGFyZ3M6W3tuYW1lOiJudW1i
ZXIifV19XSxfdC5jdG9yUGFyYW1ldGVycz1mdW5jdGlvbigpe3JldHVyblt7dHlwZTp2b2lkIDAs
ZGVjb3JhdG9yczpbe3R5cGU6Vi5ILGFyZ3M6W1YuaF19XX1dfTt2YXIgYnQ9ZnVuY3Rpb24oKXtm
dW5jdGlvbiB0KHQpe3RoaXMuX2xvY2FsZT10fXJldHVybiB0LnByb3RvdHlwZS50cmFuc2Zvcm09
ZnVuY3Rpb24oZSxuKXtyZXR1cm4gRSh0LHRoaXMuX2xvY2FsZSxlLHB0LlBlcmNlbnQsbil9LHR9
KCk7YnQuZGVjb3JhdG9ycz1be3R5cGU6Vi5fOSxhcmdzOlt7bmFtZToicGVyY2VudCJ9XX1dLGJ0
LmN0b3JQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnZvaWQgMCxkZWNvcmF0b3Jz
Olt7dHlwZTpWLkgsYXJnczpbVi5oXX1dfV19O3ZhciB3dD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQo
dCl7dGhpcy5fbG9jYWxlPXR9cmV0dXJuIHQucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihl
LG4scixvKXtyZXR1cm4gdm9pZCAwPT09biYmKG49IlVTRCIpLHZvaWQgMD09PXImJihyPSExKSxF
KHQsdGhpcy5fbG9jYWxlLGUscHQuQ3VycmVuY3ksbyxuLHIpfSx0fSgpO3d0LmRlY29yYXRvcnM9
W3t0eXBlOlYuXzksYXJnczpbe25hbWU6ImN1cnJlbmN5In1dfV0sd3QuY3RvclBhcmFtZXRlcnM9
ZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOlYuSCxhcmdz
OltWLmhdfV19XX07LyoqCisgKiBAbGljZW5zZQorICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyAqIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKKyAqLwordmFyIEN0
PS9eKFxkezR9KS0/KFxkXGQpLT8oXGRcZCkoPzpUKFxkXGQpKD86Oj8oXGRcZCkoPzo6PyhcZFxk
KSg/OlwuKFxkKykpPyk/KT8oWnwoWystXSkoXGRcZCk6PyhcZFxkKSk/KT8kLyxFdD1mdW5jdGlv
bigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fbG9jYWxlPXR9cmV0dXJuIHQucHJvdG90eXBlLnRyYW5z
Zm9ybT1mdW5jdGlvbihlLG4pe3ZvaWQgMD09PW4mJihuPSJtZWRpdW1EYXRlIik7dmFyIHI7aWYo
UChlKXx8ZSE9PWUpcmV0dXJuIG51bGw7aWYoInN0cmluZyI9PXR5cGVvZiBlJiYoZT1lLnRyaW0o
KSksUyhlKSlyPWU7ZWxzZSBpZih4KGUpKXI9bmV3IERhdGUocGFyc2VGbG9hdChlKSk7ZWxzZSBp
Zigic3RyaW5nIj09dHlwZW9mIGUmJi9eKFxkezR9LVxkezEsMn0tXGR7MSwyfSkkLy50ZXN0KGUp
KXt2YXIgbz1lLnNwbGl0KCItIikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUludCh0LDEw
KX0pLGk9b1swXSxhPW9bMV0scz1vWzJdO3I9bmV3IERhdGUoaSxhLTEscyl9ZWxzZSByPW5ldyBE
YXRlKGUpO2lmKCFTKHIpKXt2YXIgdT12b2lkIDA7aWYoInN0cmluZyIhPXR5cGVvZiBlfHwhKHU9
ZS5tYXRjaChDdCkpKXRocm93IGModCxlKTtyPUEodSl9cmV0dXJuIGd0LmZvcm1hdChyLHRoaXMu
X2xvY2FsZSx0Ll9BTElBU0VTW25dfHxuKX0sdH0oKTtFdC5fQUxJQVNFUz17bWVkaXVtOiJ5TU1N
ZGptcyIsc2hvcnQ6InlNZGptIixmdWxsRGF0ZToieU1NTU1FRUVFZCIsbG9uZ0RhdGU6InlNTU1N
ZCIsbWVkaXVtRGF0ZToieU1NTWQiLHNob3J0RGF0ZToieU1kIixtZWRpdW1UaW1lOiJqbXMiLHNo
b3J0VGltZToiam0ifSxFdC5kZWNvcmF0b3JzPVt7dHlwZTpWLl85LGFyZ3M6W3tuYW1lOiJkYXRl
IixwdXJlOiEwfV19XSxFdC5jdG9yUGFyYW1ldGVycz1mdW5jdGlvbigpe3JldHVyblt7dHlwZTp2
b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6Vi5ILGFyZ3M6W1YuaF19XX1dfTsvKioKKyAqIEBsaWNl
bnNlCisgKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisg
KiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczov
L2FuZ3VsYXIuaW8vbGljZW5zZQorICovCit2YXIgT3Q9LyMvZyx4dD1mdW5jdGlvbigpe2Z1bmN0
aW9uIHQodCl7dGhpcy5fbG9jYWxpemF0aW9uPXR9cmV0dXJuIHQucHJvdG90eXBlLnRyYW5zZm9y
bT1mdW5jdGlvbihlLG4pe2lmKG51bGw9PWUpcmV0dXJuIiI7aWYoIm9iamVjdCIhPXR5cGVvZiBu
fHxudWxsPT09bil0aHJvdyBjKHQsbik7cmV0dXJuIG5baShlLE9iamVjdC5rZXlzKG4pLHRoaXMu
X2xvY2FsaXphdGlvbildLnJlcGxhY2UoT3QsZS50b1N0cmluZygpKX0sdH0oKTt4dC5kZWNvcmF0
b3JzPVt7dHlwZTpWLl85LGFyZ3M6W3tuYW1lOiJpMThuUGx1cmFsIixwdXJlOiEwfV19XSx4dC5j
dG9yUGFyYW1ldGVycz1mdW5jdGlvbigpe3JldHVyblt7dHlwZTpGfV19Oy8qKgorICogQGxpY2Vu
c2UKKyAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAq
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8v
YW5ndWxhci5pby9saWNlbnNlCisgKi8KK3ZhciBQdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9
cmV0dXJuIHQucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihlLG4pe2lmKG51bGw9PWUpcmV0
dXJuIiI7aWYoIm9iamVjdCIhPXR5cGVvZiBufHwic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgYyh0
LG4pO3JldHVybiBuLmhhc093blByb3BlcnR5KGUpP25bZV06bi5oYXNPd25Qcm9wZXJ0eSgib3Ro
ZXIiKT9uLm90aGVyOiIifSx0fSgpO1B0LmRlY29yYXRvcnM9W3t0eXBlOlYuXzksYXJnczpbe25h
bWU6ImkxOG5TZWxlY3QiLHB1cmU6ITB9XX1dLFB0LmN0b3JQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7
cmV0dXJuW119Oy8qKgorICogQGxpY2Vuc2UKKyAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisgKiBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCisgKi8KK3ZhciBTdD1m
dW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5j
dGlvbih0KXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCxudWxsLDIpfSx0fSgpO1N0LmRlY29yYXRv
cnM9W3t0eXBlOlYuXzksYXJnczpbe25hbWU6Impzb24iLHB1cmU6ITF9XX1dLFN0LmN0b3JQYXJh
bWV0ZXJzPWZ1bmN0aW9uKCl7cmV0dXJuW119Oy8qKgorICogQGxpY2Vuc2UKKyAqIENvcHlyaWdo
dCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNl
bnNlCisgKi8KK3ZhciBBdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90
eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihlLG4scil7aWYobnVsbD09ZSlyZXR1cm4gZTtpZighdGhp
cy5zdXBwb3J0cyhlKSl0aHJvdyBjKHQsZSk7cmV0dXJuIGUuc2xpY2UobixyKX0sdC5wcm90b3R5
cGUuc3VwcG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0fHxBcnJheS5p
c0FycmF5KHQpfSx0fSgpO0F0LmRlY29yYXRvcnM9W3t0eXBlOlYuXzksYXJnczpbe25hbWU6InNs
aWNlIixwdXJlOiExfV19XSxBdC5jdG9yUGFyYW1ldGVycz1mdW5jdGlvbigpe3JldHVybltdfTsv
KioKKyAqIEBsaWNlbnNlCisgKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KKyAqCisgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBN
SVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQorICovCit2YXIgVHQ9W3N0LGx0LHV0LFN0
LEF0LF90LGJ0LGN0LHd0LEV0LHh0LFB0XSxrdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0
dXJuIHR9KCk7a3QuZGVjb3JhdG9ycz1be3R5cGU6Vi5FLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W250
LFR0XSxleHBvcnRzOltudCxUdF0scHJvdmlkZXJzOlt7cHJvdmlkZTpGLHVzZUNsYXNzOkh9XX1d
fV0sa3QuY3RvclBhcmFtZXRlcnM9ZnVuY3Rpb24oKXtyZXR1cm5bXX07LyoqCisgKiBAbGljZW5z
ZQorICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICog
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKyAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9h
bmd1bGFyLmlvL2xpY2Vuc2UKKyAqLwordmFyIFZ0PW5ldyBWLkkoIkRvY3VtZW50VG9rZW4iKSxO
dD0iYnJvd3NlciI7bmV3IFYuRigiNC4zLjEiKX0sIjNqM0siOmZ1bmN0aW9uKHQsZSxuKXsidXNl
IHN0cmljdCI7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIoKXtpZighSnIpe3ZhciB0PVFyLlN5bWJv
bDtpZih0JiZ0Lml0ZXJhdG9yKUpyPXQuaXRlcmF0b3I7ZWxzZSBmb3IodmFyIGU9T2JqZWN0Lmdl
dE93blByb3BlcnR5TmFtZXMoTWFwLnByb3RvdHlwZSksbj0wO248ZS5sZW5ndGg7KytuKXt2YXIg
cj1lW25dOyJlbnRyaWVzIiE9PXImJiJzaXplIiE9PXImJk1hcC5wcm90b3R5cGVbcl09PT1NYXAu
cHJvdG90eXBlLmVudHJpZXMmJihKcj1yKX19cmV0dXJuIEpyfWZ1bmN0aW9uIG8odCl7Wm9uZS5j
dXJyZW50LnNjaGVkdWxlTWljcm9UYXNrKCJzY2hlZHVsZU1pY3JvdGFzayIsdCl9ZnVuY3Rpb24g
aSh0LGUpe3JldHVybiB0PT09ZXx8Im51bWJlciI9PXR5cGVvZiB0JiYibnVtYmVyIj09dHlwZW9m
IGUmJmlzTmFOKHQpJiZpc05hTihlKX1mdW5jdGlvbiBhKHQpe2lmKCJzdHJpbmciPT10eXBlb2Yg
dClyZXR1cm4gdDtpZihudWxsPT10KXJldHVybiIiK3Q7aWYodC5vdmVycmlkZGVuTmFtZSlyZXR1
cm4iIit0Lm92ZXJyaWRkZW5OYW1lO2lmKHQubmFtZSlyZXR1cm4iIit0Lm5hbWU7dmFyIGU9dC50
b1N0cmluZygpO2lmKG51bGw9PWUpcmV0dXJuIiIrZTt2YXIgbj1lLmluZGV4T2YoIlxuIik7cmV0
dXJuLTE9PT1uP2U6ZS5zdWJzdHJpbmcoMCxuKX1mdW5jdGlvbiBzKHQpe3JldHVybiJmdW5jdGlv
biI9PXR5cGVvZiB0JiZ0Lmhhc093blByb3BlcnR5KCJhbm5vdGF0aW9uIikmJih0PXQuYW5ub3Rh
dGlvbiksdH1mdW5jdGlvbiB1KHQsZSl7aWYodD09PU9iamVjdHx8dD09PVN0cmluZ3x8dD09PUZ1
bmN0aW9ufHx0PT09TnVtYmVyfHx0PT09QXJyYXkpdGhyb3cgbmV3IEVycm9yKCJDYW4gbm90IHVz
ZSBuYXRpdmUgIithKHQpKyIgYXMgY29uc3RydWN0b3IiKTtpZigiZnVuY3Rpb24iPT10eXBlb2Yg
dClyZXR1cm4gdDtpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgbj10LHI9bi5sZW5ndGgtMSxvPXRb
cl07aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG8pdGhyb3cgbmV3IEVycm9yKCJMYXN0IHBvc2l0aW9u
IG9mIENsYXNzIG1ldGhvZCBhcnJheSBtdXN0IGJlIEZ1bmN0aW9uIGluIGtleSAiK2UrIiB3YXMg
JyIrYShvKSsiJyIpO2lmKHIhPW8ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiTnVtYmVyIG9mIGFu
bm90YXRpb25zICgiK3IrIikgZG9lcyBub3QgbWF0Y2ggbnVtYmVyIG9mIGFyZ3VtZW50cyAoIitv
Lmxlbmd0aCsiKSBpbiB0aGUgZnVuY3Rpb246ICIrYShvKSk7Zm9yKHZhciBpPVtdLHU9MCxjPW4u
bGVuZ3RoLTE7dTxjO3UrKyl7dmFyIGw9W107aS5wdXNoKGwpO3ZhciBwPW5bdV07aWYoQXJyYXku
aXNBcnJheShwKSlmb3IodmFyIGY9MDtmPHAubGVuZ3RoO2YrKylsLnB1c2gocyhwW2ZdKSk7ZWxz
ZSJmdW5jdGlvbiI9PXR5cGVvZiBwP2wucHVzaChzKHApKTpsLnB1c2gocCl9cmV0dXJuIFhyLmRl
ZmluZU1ldGFkYXRhKCJwYXJhbWV0ZXJzIixpLG8pLG99dGhyb3cgbmV3IEVycm9yKCJPbmx5IEZ1
bmN0aW9uIG9yIEFycmF5IGlzIHN1cHBvcnRlZCBpbiBDbGFzcyBkZWZpbml0aW9uIGZvciBrZXkg
JyIrZSsiJyBpcyAnIithKHQpKyInIil9ZnVuY3Rpb24gYyh0KXt2YXIgZT11KHQuaGFzT3duUHJv
cGVydHkoImNvbnN0cnVjdG9yIik/dC5jb25zdHJ1Y3Rvcjp2b2lkIDAsImNvbnN0cnVjdG9yIiks
bj1lLnByb3RvdHlwZTtpZih0Lmhhc093blByb3BlcnR5KCJleHRlbmRzIikpe2lmKCJmdW5jdGlv
biIhPXR5cGVvZiB0LmV4dGVuZHMpdGhyb3cgbmV3IEVycm9yKCJDbGFzcyBkZWZpbml0aW9uICdl
eHRlbmRzJyBwcm9wZXJ0eSBtdXN0IGJlIGEgY29uc3RydWN0b3IgZnVuY3Rpb24gd2FzOiAiK2Eo
dC5leHRlbmRzKSk7ZS5wcm90b3R5cGU9bj1PYmplY3QuY3JlYXRlKHQuZXh0ZW5kcy5wcm90b3R5
cGUpfWZvcih2YXIgciBpbiB0KSJleHRlbmRzIiE9PXImJiJwcm90b3R5cGUiIT09ciYmdC5oYXNP
d25Qcm9wZXJ0eShyKSYmKG5bcl09dSh0W3JdLHIpKTt0aGlzJiZ0aGlzLmFubm90YXRpb25zIGlu
c3RhbmNlb2YgQXJyYXkmJlhyLmRlZmluZU1ldGFkYXRhKCJhbm5vdGF0aW9ucyIsdGhpcy5hbm5v
dGF0aW9ucyxlKTt2YXIgbz1lLm5hbWU7cmV0dXJuIG8mJiJjb25zdHJ1Y3RvciIhPT1vfHwoZS5v
dmVycmlkZGVuTmFtZT0iY2xhc3MiKyRyKyspLGV9ZnVuY3Rpb24gbCh0LGUsbixyKXtmdW5jdGlv
biBvKHQpe2lmKCFYcnx8IVhyLmdldE93bk1ldGFkYXRhKXRocm93InJlZmxlY3QtbWV0YWRhdGEg
c2hpbSBpcyByZXF1aXJlZCB3aGVuIHVzaW5nIGNsYXNzIGRlY29yYXRvcnMiO2lmKHRoaXMgaW5z
dGFuY2VvZiBvKXJldHVybiBpLmNhbGwodGhpcyx0KSx0aGlzO3ZhciBlPW5ldyBvKHQpLG49ImZ1
bmN0aW9uIj09dHlwZW9mIHRoaXMmJkFycmF5LmlzQXJyYXkodGhpcy5hbm5vdGF0aW9ucyk/dGhp
cy5hbm5vdGF0aW9uczpbXTtuLnB1c2goZSk7dmFyIGE9ZnVuY3Rpb24odCl7dmFyIG49WHIuZ2V0
T3duTWV0YWRhdGEoImFubm90YXRpb25zIix0KXx8W107cmV0dXJuIG4ucHVzaChlKSxYci5kZWZp
bmVNZXRhZGF0YSgiYW5ub3RhdGlvbnMiLG4sdCksdH07cmV0dXJuIGEuYW5ub3RhdGlvbnM9bixh
LkNsYXNzPWMsciYmcihhKSxhfXZhciBpPXAoZSk7cmV0dXJuIG4mJihvLnByb3RvdHlwZT1PYmpl
Y3QuY3JlYXRlKG4ucHJvdG90eXBlKSksby5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXty
ZXR1cm4iQCIrdH0sby5hbm5vdGF0aW9uQ2xzPW8sb31mdW5jdGlvbiBwKHQpe3JldHVybiBmdW5j
dGlvbigpe2Zvcih2YXIgZT1bXSxuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW25dPWFyZ3Vt
ZW50c1tuXTtpZih0KXt2YXIgcj10LmFwcGx5KHZvaWQgMCxlKTtmb3IodmFyIG8gaW4gcil0aGlz
W29dPXJbb119fX1mdW5jdGlvbiBmKHQsZSxuKXtmdW5jdGlvbiByKCl7ZnVuY3Rpb24gdCh0LGUs
bil7Zm9yKHZhciByPVhyLmdldE93bk1ldGFkYXRhKCJwYXJhbWV0ZXJzIix0KXx8W107ci5sZW5n
dGg8PW47KXIucHVzaChudWxsKTtyZXR1cm4gcltuXT1yW25dfHxbXSxyW25dLnB1c2goaSksWHIu
ZGVmaW5lTWV0YWRhdGEoInBhcmFtZXRlcnMiLHIsdCksdH1mb3IodmFyIGU9W10sbj0wO248YXJn
dW1lbnRzLmxlbmd0aDtuKyspZVtuXT1hcmd1bWVudHNbbl07aWYodGhpcyBpbnN0YW5jZW9mIHIp
cmV0dXJuIG8uYXBwbHkodGhpcyxlKSx0aGlzO3ZhciBpPW5ldyhyLmJpbmQuYXBwbHkocixbdm9p
ZCAwXS5jb25jYXQoZSkpKTtyZXR1cm4gdC5hbm5vdGF0aW9uPWksdH12YXIgbz1wKGUpO3JldHVy
biBuJiYoci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSkpLHIucHJvdG90eXBl
LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkAiK3R9LHIuYW5ub3RhdGlvbkNscz1yLHJ9ZnVu
Y3Rpb24gZCh0LGUsbil7ZnVuY3Rpb24gcigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMu
bGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTtpZih0aGlzIGluc3RhbmNlb2YgcilyZXR1cm4g
by5hcHBseSh0aGlzLHQpLHRoaXM7dmFyIG49bmV3KHIuYmluZC5hcHBseShyLFt2b2lkIDBdLmNv
bmNhdCh0KSkpO3JldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPVhyLmdldE93bk1ldGFkYXRhKCJw
cm9wTWV0YWRhdGEiLHQuY29uc3RydWN0b3IpfHx7fTtyW2VdPXIuaGFzT3duUHJvcGVydHkoZSkm
JnJbZV18fFtdLHJbZV0udW5zaGlmdChuKSxYci5kZWZpbmVNZXRhZGF0YSgicHJvcE1ldGFkYXRh
IixyLHQuY29uc3RydWN0b3IpfX12YXIgbz1wKGUpO3JldHVybiBuJiYoci5wcm90b3R5cGU9T2Jq
ZWN0LmNyZWF0ZShuLnByb3RvdHlwZSkpLHIucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7
cmV0dXJuIkAiK3R9LHIuYW5ub3RhdGlvbkNscz1yLHJ9LyoqCisgKiBAbGljZW5zZQorICogQ29w
eXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKyAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlv
L2xpY2Vuc2UKKyAqLworZnVuY3Rpb24gaCh0KXtyZXR1cm4gdC5fX2ZvcndhcmRfcmVmX189aCx0
LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcygpKX0sdH1mdW5jdGlvbiB5KHQpe3Jl
dHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0Lmhhc093blByb3BlcnR5KCJfX2ZvcndhcmRfcmVm
X18iKSYmdC5fX2ZvcndhcmRfcmVmX189PT1oP3QoKTp0fWZ1bmN0aW9uIG0odCl7cmV0dXJuIHRb
RW9dfWZ1bmN0aW9uIGcodCl7cmV0dXJuIHRbT29dfWZ1bmN0aW9uIHYodCl7cmV0dXJuIHRbeG9d
fHxffWZ1bmN0aW9uIF8odCl7Zm9yKHZhciBlPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisr
KWVbbi0xXT1hcmd1bWVudHNbbl07dC5lcnJvci5hcHBseSh0LGUpfWZ1bmN0aW9uIGIodCxlKXt2
YXIgbj10KyIgY2F1c2VkIGJ5OiAiKyhlIGluc3RhbmNlb2YgRXJyb3I/ZS5tZXNzYWdlOmUpLHI9
RXJyb3Iobik7cmV0dXJuIHJbT29dPWUscn0vKioKKyAqIEBsaWNlbnNlCisgKiBDb3B5cmlnaHQg
R29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
ICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5z
ZQorICovCitmdW5jdGlvbiB3KHQpe2Zvcih2YXIgZT1bXSxuPTA7bjx0Lmxlbmd0aDsrK24pe2lm
KGUuaW5kZXhPZih0W25dKT4tMSlyZXR1cm4gZS5wdXNoKHRbbl0pLGU7ZS5wdXNoKHRbbl0pfXJl
dHVybiBlfWZ1bmN0aW9uIEModCl7aWYodC5sZW5ndGg+MSl7cmV0dXJuIiAoIit3KHQuc2xpY2Uo
KS5yZXZlcnNlKCkpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gYSh0LnRva2VuKX0pLmpvaW4oIiAt
PiAiKSsiKSJ9cmV0dXJuIiJ9ZnVuY3Rpb24gRSh0LGUsbixyKXt2YXIgbz1bZV0saT1uKG8pLGE9
cj9iKGkscik6RXJyb3IoaSk7cmV0dXJuIGEuYWRkS2V5PU8sYS5rZXlzPW8sYS5pbmplY3RvcnM9
W3RdLGEuY29uc3RydWN0UmVzb2x2aW5nTWVzc2FnZT1uLGFbT29dPXIsYX1mdW5jdGlvbiBPKHQs
ZSl7dGhpcy5pbmplY3RvcnMucHVzaCh0KSx0aGlzLmtleXMucHVzaChlKSx0aGlzLm1lc3NhZ2U9
dGhpcy5jb25zdHJ1Y3RSZXNvbHZpbmdNZXNzYWdlKHRoaXMua2V5cyl9ZnVuY3Rpb24geCh0LGUp
e3JldHVybiBFKHQsZSxmdW5jdGlvbih0KXtyZXR1cm4iTm8gcHJvdmlkZXIgZm9yICIrYSh0WzBd
LnRva2VuKSsiISIrQyh0KX0pfWZ1bmN0aW9uIFAodCxlKXtyZXR1cm4gRSh0LGUsZnVuY3Rpb24o
dCl7cmV0dXJuIkNhbm5vdCBpbnN0YW50aWF0ZSBjeWNsaWMgZGVwZW5kZW5jeSEiK0ModCl9KX1m
dW5jdGlvbiBTKHQsZSxuLHIpe3JldHVybiBFKHQscixmdW5jdGlvbih0KXt2YXIgbj1hKHRbMF0u
dG9rZW4pO3JldHVybiBlLm1lc3NhZ2UrIjogRXJyb3IgZHVyaW5nIGluc3RhbnRpYXRpb24gb2Yg
IituKyIhIitDKHQpKyIuIn0sZSl9ZnVuY3Rpb24gQSh0KXtyZXR1cm4gRXJyb3IoIkludmFsaWQg
cHJvdmlkZXIgLSBvbmx5IGluc3RhbmNlcyBvZiBQcm92aWRlciBhbmQgVHlwZSBhcmUgYWxsb3dl
ZCwgZ290OiAiK3QpfWZ1bmN0aW9uIFQodCxlKXtmb3IodmFyIG49W10scj0wLG89ZS5sZW5ndGg7
cjxvO3IrKyl7dmFyIGk9ZVtyXTtpJiYwIT1pLmxlbmd0aD9uLnB1c2goaS5tYXAoYSkuam9pbigi
ICIpKTpuLnB1c2goIj8iKX1yZXR1cm4gRXJyb3IoIkNhbm5vdCByZXNvbHZlIGFsbCBwYXJhbWV0
ZXJzIGZvciAnIithKHQpKyInKCIrbi5qb2luKCIsICIpKyIpLiBNYWtlIHN1cmUgdGhhdCBhbGwg
dGhlIHBhcmFtZXRlcnMgYXJlIGRlY29yYXRlZCB3aXRoIEluamVjdCBvciBoYXZlIHZhbGlkIHR5
cGUgYW5ub3RhdGlvbnMgYW5kIHRoYXQgJyIrYSh0KSsiJyBpcyBkZWNvcmF0ZWQgd2l0aCBJbmpl
Y3RhYmxlLiIpfWZ1bmN0aW9uIGsodCl7cmV0dXJuIEVycm9yKCJJbmRleCAiK3QrIiBpcyBvdXQt
b2YtYm91bmRzLiIpfWZ1bmN0aW9uIFYodCxlKXtyZXR1cm4gRXJyb3IoIkNhbm5vdCBtaXggbXVs
dGkgcHJvdmlkZXJzIGFuZCByZWd1bGFyIHByb3ZpZGVycywgZ290OiAiK3QrIiAiK2UpfWZ1bmN0
aW9uIE4odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHR9ZnVuY3Rpb24gTSh0KXtyZXR1cm4g
dD90Lm1hcChmdW5jdGlvbih0KXt2YXIgZT10LnR5cGUsbj1lLmFubm90YXRpb25DbHMscj10LmFy
Z3M/dC5hcmdzOltdO3JldHVybiBuZXcobi5iaW5kLmFwcGx5KG4sW3ZvaWQgMF0uY29uY2F0KHIp
KSl9KTpbXX1mdW5jdGlvbiBqKHQpe3ZhciBlPU9iamVjdC5nZXRQcm90b3R5cGVPZih0LnByb3Rv
dHlwZSk7cmV0dXJuKGU/ZS5jb25zdHJ1Y3RvcjpudWxsKXx8T2JqZWN0fWZ1bmN0aW9uIFIodCl7
dmFyIGUsbjtpZih0LnVzZUNsYXNzKXt2YXIgcj15KHQudXNlQ2xhc3MpO2U9am8uZmFjdG9yeShy
KSxuPUIocil9ZWxzZSB0LnVzZUV4aXN0aW5nPyhlPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxuPVtS
by5mcm9tS2V5KFNvLmdldCh0LnVzZUV4aXN0aW5nKSldKTp0LnVzZUZhY3Rvcnk/KGU9dC51c2VG
YWN0b3J5LG49TCh0LnVzZUZhY3RvcnksdC5kZXBzKSk6KGU9ZnVuY3Rpb24oKXtyZXR1cm4gdC51
c2VWYWx1ZX0sbj1Ebyk7cmV0dXJuIG5ldyBGbyhlLG4pfWZ1bmN0aW9uIEQodCl7cmV0dXJuIG5l
dyBJbyhTby5nZXQodC5wcm92aWRlKSxbUih0KV0sdC5tdWx0aXx8ITEpfWZ1bmN0aW9uIEkodCl7
dmFyIGU9SCh0LFtdKSxuPWUubWFwKEQpLHI9RihuLG5ldyBNYXApO3JldHVybiBBcnJheS5mcm9t
KHIudmFsdWVzKCkpfWZ1bmN0aW9uIEYodCxlKXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7
dmFyIHI9dFtuXSxvPWUuZ2V0KHIua2V5LmlkKTtpZihvKXtpZihyLm11bHRpUHJvdmlkZXIhPT1v
Lm11bHRpUHJvdmlkZXIpdGhyb3cgVihvLHIpO2lmKHIubXVsdGlQcm92aWRlcilmb3IodmFyIGk9
MDtpPHIucmVzb2x2ZWRGYWN0b3JpZXMubGVuZ3RoO2krKylvLnJlc29sdmVkRmFjdG9yaWVzLnB1
c2goci5yZXNvbHZlZEZhY3Rvcmllc1tpXSk7ZWxzZSBlLnNldChyLmtleS5pZCxyKX1lbHNle3Zh
ciBhPXZvaWQgMDthPXIubXVsdGlQcm92aWRlcj9uZXcgSW8oci5rZXksci5yZXNvbHZlZEZhY3Rv
cmllcy5zbGljZSgpLHIubXVsdGlQcm92aWRlcik6cixlLnNldChyLmtleS5pZCxhKX19cmV0dXJu
IGV9ZnVuY3Rpb24gSCh0LGUpe3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCl7aWYodCBpbnN0
YW5jZW9mIGtvKWUucHVzaCh7cHJvdmlkZTp0LHVzZUNsYXNzOnR9KTtlbHNlIGlmKHQmJiJvYmpl
Y3QiPT10eXBlb2YgdCYmdm9pZCAwIT09dC5wcm92aWRlKWUucHVzaCh0KTtlbHNle2lmKCEodCBp
bnN0YW5jZW9mIEFycmF5KSl0aHJvdyBBKHQpO0godCxlKX19KSxlfWZ1bmN0aW9uIEwodCxlKXtp
ZihlKXt2YXIgbj1lLm1hcChmdW5jdGlvbih0KXtyZXR1cm5bdF19KTtyZXR1cm4gZS5tYXAoZnVu
Y3Rpb24oZSl7cmV0dXJuIFUodCxlLG4pfSl9cmV0dXJuIEIodCl9ZnVuY3Rpb24gQih0KXt2YXIg
ZT1qby5wYXJhbWV0ZXJzKHQpO2lmKCFlKXJldHVybltdO2lmKGUuc29tZShmdW5jdGlvbih0KXty
ZXR1cm4gbnVsbD09dH0pKXRocm93IFQodCxlKTtyZXR1cm4gZS5tYXAoZnVuY3Rpb24obil7cmV0
dXJuIFUodCxuLGUpfSl9ZnVuY3Rpb24gVSh0LGUsbil7dmFyIHI9bnVsbCxvPSExO2lmKCFBcnJh
eS5pc0FycmF5KGUpKXJldHVybiBlIGluc3RhbmNlb2YgZm8/RyhlLnRva2VuLG8sbnVsbCk6Ryhl
LG8sbnVsbCk7Zm9yKHZhciBpPW51bGwsYT0wO2E8ZS5sZW5ndGg7KythKXt2YXIgcz1lW2FdO3Mg
aW5zdGFuY2VvZiBrbz9yPXM6cyBpbnN0YW5jZW9mIGZvP3I9cy50b2tlbjpzIGluc3RhbmNlb2Yg
aG8/bz0hMDpzIGluc3RhbmNlb2YgbW98fHMgaW5zdGFuY2VvZiBnbz9pPXM6cyBpbnN0YW5jZW9m
IFpyJiYocj1zKX1pZihudWxsIT0ocj15KHIpKSlyZXR1cm4gRyhyLG8saSk7dGhyb3cgVCh0LG4p
fWZ1bmN0aW9uIEcodCxlLG4pe3JldHVybiBuZXcgUm8oU28uZ2V0KHQpLGUsbil9ZnVuY3Rpb24g
cSh0LGUpe2Zvcih2YXIgbj1uZXcgQXJyYXkodC5fcHJvdmlkZXJzLmxlbmd0aCkscj0wO3I8dC5f
cHJvdmlkZXJzLmxlbmd0aDsrK3IpbltyXT1lKHQuZ2V0UHJvdmlkZXJBdEluZGV4KHIpKTtyZXR1
cm4gbn0vKioKKyAqIEBsaWNlbnNlCisgKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqCisgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorICogZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQorICovCisvKioKKyAqIEBsaWNl
bnNlCisgKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisg
KiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczov
L2FuZ3VsYXIuaW8vbGljZW5zZQorICovCitmdW5jdGlvbiB6KHQpe3JldHVybiEhdCYmImZ1bmN0
aW9uIj09dHlwZW9mIHQudGhlbn1mdW5jdGlvbiBaKHQpe3JldHVybiEhdCYmImZ1bmN0aW9uIj09
dHlwZW9mIHQuc3Vic2NyaWJlfWZ1bmN0aW9uIFkoKXtyZXR1cm4iIitLKCkrSygpK0soKX1mdW5j
dGlvbiBLKCl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoOTcrTWF0aC5mbG9vcigyNSpNYXRo
LnJhbmRvbSgpKSl9ZnVuY3Rpb24gVygpe3Rocm93IG5ldyBFcnJvcigiUnVudGltZSBjb21waWxl
ciBpcyBub3QgbG9hZGVkIil9LyoqCisgKiBAbGljZW5zZQorICogQ29weXJpZ2h0IEdvb2dsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyAqIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKKyAqLwor
ZnVuY3Rpb24gUSh0KXt2YXIgZT1FcnJvcigiTm8gY29tcG9uZW50IGZhY3RvcnkgZm91bmQgZm9y
ICIrYSh0KSsiLiBEaWQgeW91IGFkZCBpdCB0byBATmdNb2R1bGUuZW50cnlDb21wb25lbnRzPyIp
O3JldHVybiBlW2VpXT10LGV9ZnVuY3Rpb24gSigpe3ZhciB0PVFyLnd0ZjtyZXR1cm4hKCF0fHwh
KG9pPXQudHJhY2UpKSYmKGlpPW9pLmV2ZW50cywhMCl9ZnVuY3Rpb24gJCh0LGUpe3JldHVybiB2
b2lkIDA9PT1lJiYoZT1udWxsKSxpaS5jcmVhdGVTY29wZSh0LGUpfWZ1bmN0aW9uIFgodCxlKXty
ZXR1cm4gb2kubGVhdmVTY29wZSh0LGUpLGV9ZnVuY3Rpb24gdHQodCxlKXtyZXR1cm4gbnVsbH1m
dW5jdGlvbiBldCh0KXtpZigwPT10Ll9uZXN0aW5nJiYhdC5oYXNQZW5kaW5nTWljcm90YXNrcyYm
IXQuaXNTdGFibGUpdHJ5e3QuX25lc3RpbmcrKyx0Lm9uTWljcm90YXNrRW1wdHkuZW1pdChudWxs
KX1maW5hbGx5e2lmKHQuX25lc3RpbmctLSwhdC5oYXNQZW5kaW5nTWljcm90YXNrcyl0cnl7dC5y
dW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiB0Lm9uU3RhYmxlLmVtaXQobnVsbCl9
KX1maW5hbGx5e3QuaXNTdGFibGU9ITB9fX1mdW5jdGlvbiBudCh0KXt0Ll9pbm5lcj10Ll9pbm5l
ci5mb3JrKHtuYW1lOiJhbmd1bGFyIixwcm9wZXJ0aWVzOntpc0FuZ3VsYXJab25lOiEwfSxvbklu
dm9rZVRhc2s6ZnVuY3Rpb24oZSxuLHIsbyxpLGEpe3RyeXtyZXR1cm4gcnQodCksZS5pbnZva2VU
YXNrKHIsbyxpLGEpfWZpbmFsbHl7b3QodCl9fSxvbkludm9rZTpmdW5jdGlvbihlLG4scixvLGks
YSxzKXt0cnl7cmV0dXJuIHJ0KHQpLGUuaW52b2tlKHIsbyxpLGEscyl9ZmluYWxseXtvdCh0KX19
LG9uSGFzVGFzazpmdW5jdGlvbihlLG4scixvKXtlLmhhc1Rhc2socixvKSxuPT09ciYmKCJtaWNy
b1Rhc2siPT1vLmNoYW5nZT8odC5oYXNQZW5kaW5nTWljcm90YXNrcz1vLm1pY3JvVGFzayxldCh0
KSk6Im1hY3JvVGFzayI9PW8uY2hhbmdlJiYodC5oYXNQZW5kaW5nTWFjcm90YXNrcz1vLm1hY3Jv
VGFzaykpfSxvbkhhbmRsZUVycm9yOmZ1bmN0aW9uKGUsbixyLG8pe3JldHVybiBlLmhhbmRsZUVy
cm9yKHIsbyksdC5vbkVycm9yLmVtaXQobyksITF9fSl9ZnVuY3Rpb24gcnQodCl7dC5fbmVzdGlu
ZysrLHQuaXNTdGFibGUmJih0LmlzU3RhYmxlPSExLHQub25VbnN0YWJsZS5lbWl0KG51bGwpKX1m
dW5jdGlvbiBvdCh0KXt0Ll9uZXN0aW5nLS0sZXQodCl9ZnVuY3Rpb24gaXQodCl7X2k9dH1mdW5j
dGlvbiBhdCgpe2lmKHdpKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGVuYWJsZSBwcm9kIG1vZGUg
YWZ0ZXIgcGxhdGZvcm0gc2V0dXAuIik7Ymk9ITF9ZnVuY3Rpb24gc3QoKXtyZXR1cm4gd2k9ITAs
Yml9ZnVuY3Rpb24gdXQodCl7aWYoZ2kmJiFnaS5kZXN0cm95ZWQmJiFnaS5pbmplY3Rvci5nZXQo
Q2ksITEpKXRocm93IG5ldyBFcnJvcigiVGhlcmUgY2FuIGJlIG9ubHkgb25lIHBsYXRmb3JtLiBE
ZXN0cm95IHRoZSBwcmV2aW91cyBvbmUgdG8gY3JlYXRlIGEgbmV3IG9uZS4iKTtnaT10LmdldChP
aSk7dmFyIGU9dC5nZXQoWW8sbnVsbCk7cmV0dXJuIGUmJmUuZm9yRWFjaChmdW5jdGlvbih0KXty
ZXR1cm4gdCgpfSksZ2l9ZnVuY3Rpb24gY3QodCxlLG4pe3ZvaWQgMD09PW4mJihuPVtdKTt2YXIg
cj1uZXcgWnIoIlBsYXRmb3JtOiAiK2UpO3JldHVybiBmdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYo
ZT1bXSk7dmFyIG89cHQoKTtyZXR1cm4gbyYmIW8uaW5qZWN0b3IuZ2V0KENpLCExKXx8KHQ/dChu
LmNvbmNhdChlKS5jb25jYXQoe3Byb3ZpZGU6cix1c2VWYWx1ZTohMH0pKTp1dChMby5yZXNvbHZl
QW5kQ3JlYXRlKG4uY29uY2F0KGUpLmNvbmNhdCh7cHJvdmlkZTpyLHVzZVZhbHVlOiEwfSkpKSks
bHQocil9fWZ1bmN0aW9uIGx0KHQpe3ZhciBlPXB0KCk7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJO
byBwbGF0Zm9ybSBleGlzdHMhIik7aWYoIWUuaW5qZWN0b3IuZ2V0KHQsbnVsbCkpdGhyb3cgbmV3
IEVycm9yKCJBIHBsYXRmb3JtIHdpdGggYSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBoYXMgYmVl
biBjcmVhdGVkLiBQbGVhc2UgZGVzdHJveSBpdCBmaXJzdC4iKTtyZXR1cm4gZX1mdW5jdGlvbiBw
dCgpe3JldHVybiBnaSYmIWdpLmRlc3Ryb3llZD9naTpudWxsfWZ1bmN0aW9uIGZ0KHQsZSl7dHJ5
e3ZhciBuPWUoKTtyZXR1cm4geihuKT9uLmNhdGNoKGZ1bmN0aW9uKGUpe3Rocm93IHQuaGFuZGxl
RXJyb3IoZSksZX0pOm59Y2F0Y2goZSl7dGhyb3cgdC5oYW5kbGVFcnJvcihlKSxlfX1mdW5jdGlv
biBkdCh0LGUpe3ZhciBuPXQuaW5kZXhPZihlKTtuPi0xJiZ0LnNwbGljZShuLDEpfWZ1bmN0aW9u
IGh0KHQpe3JldHVybiB0LnJlZHVjZShmdW5jdGlvbih0LGUpe3ZhciBuPUFycmF5LmlzQXJyYXko
ZSk/aHQoZSk6ZTtyZXR1cm4gdC5jb25jYXQobil9LFtdKX1mdW5jdGlvbiB5dCh0LGUsbil7aWYo
IXQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCAnIituKyInIGluICciK2UrIiciKTtyZXR1
cm4gdH1mdW5jdGlvbiBtdCh0LGUsbil7dC5jaGlsZE5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7
dCBpbnN0YW5jZW9mIHppJiYoZSh0KSYmbi5wdXNoKHQpLG10KHQsZSxuKSl9KX1mdW5jdGlvbiBn
dCh0LGUsbil7dCBpbnN0YW5jZW9mIHppJiZ0LmNoaWxkTm9kZXMuZm9yRWFjaChmdW5jdGlvbih0
KXtlKHQpJiZuLnB1c2godCksdCBpbnN0YW5jZW9mIHppJiZndCh0LGUsbil9KX1mdW5jdGlvbiB2
dCh0KXtyZXR1cm4gWmkuZ2V0KHQpfHxudWxsfWZ1bmN0aW9uIF90KHQpe1ppLnNldCh0Lm5hdGl2
ZU5vZGUsdCl9ZnVuY3Rpb24gYnQodCl7WmkuZGVsZXRlKHQubmF0aXZlTm9kZSl9LyoqCisgKiBA
bGljZW5zZQorICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg
KgorICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0
cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKKyAqLworZnVuY3Rpb24gd3QodCxlKXt2YXIgbj1DdCh0
KSxyPUN0KGUpO2lmKG4mJnIpcmV0dXJuIEV0KHQsZSx3dCk7dmFyIG89dCYmKCJvYmplY3QiPT10
eXBlb2YgdHx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpLGE9ZSYmKCJvYmplY3QiPT10eXBlb2YgZXx8
ImZ1bmN0aW9uIj09dHlwZW9mIGUpO3JldHVybiEobnx8IW98fHJ8fCFhKXx8aSh0LGUpfWZ1bmN0
aW9uIEN0KHQpe3JldHVybiEheHQodCkmJihBcnJheS5pc0FycmF5KHQpfHwhKHQgaW5zdGFuY2Vv
ZiBNYXApJiZyKClpbiB0KX1mdW5jdGlvbiBFdCh0LGUsbil7Zm9yKHZhciBvPXRbcigpXSgpLGk9
ZVtyKCldKCk7Oyl7dmFyIGE9by5uZXh0KCkscz1pLm5leHQoKTtpZihhLmRvbmUmJnMuZG9uZSly
ZXR1cm4hMDtpZihhLmRvbmV8fHMuZG9uZSlyZXR1cm4hMTtpZighbihhLnZhbHVlLHMudmFsdWUp
KXJldHVybiExfX1mdW5jdGlvbiBPdCh0LGUpe2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciBu
PTA7bjx0Lmxlbmd0aDtuKyspZSh0W25dKTtlbHNlIGZvcih2YXIgbz10W3IoKV0oKSxpPXZvaWQg
MDshKGk9by5uZXh0KCkpLmRvbmU7KWUoaS52YWx1ZSl9ZnVuY3Rpb24geHQodCl7cmV0dXJuIG51
bGwhPT10JiYoImZ1bmN0aW9uIj09dHlwZW9mIHR8fCJvYmplY3QiPT10eXBlb2YgdCl9ZnVuY3Rp
b24gUHQodCxlLG4pe3ZhciByPXQucHJldmlvdXNJbmRleDtpZihudWxsPT09cilyZXR1cm4gcjt2
YXIgbz0wO3JldHVybiBuJiZyPG4ubGVuZ3RoJiYobz1uW3JdKSxyK2Urb31mdW5jdGlvbiBTdCh0
KXtyZXR1cm4gdC5uYW1lfHx0eXBlb2YgdH0vKioKKyAqIEBsaWNlbnNlCisgKiBDb3B5cmlnaHQg
R29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
ICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5z
ZQorICovCisvKioKKyAqIEBsaWNlbnNlCisgKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorICogZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQorICovCitmdW5jdGlvbiBB
dCgpe3JldHVybiBqb30vKioKKyAqIEBsaWNlbnNlCisgKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorICogZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQorICovCitmdW5j
dGlvbiBUdCgpe3JldHVybiB1YX1mdW5jdGlvbiBrdCgpe3JldHVybiBjYX1mdW5jdGlvbiBWdCh0
KXtyZXR1cm4gdHx8ImVuLVVTIn0vKioKKyAqIEBsaWNlbnNlCisgKiBDb3B5cmlnaHQgR29vZ2xl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorICogZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQorICov
CitmdW5jdGlvbiBOdCh0LGUpe3JldHVybiB0Lm5vZGVzW2VdfWZ1bmN0aW9uIE10KHQsZSl7cmV0
dXJuIHQubm9kZXNbZV19ZnVuY3Rpb24ganQodCxlKXtyZXR1cm4gdC5ub2Rlc1tlXX1mdW5jdGlv
biBSdCh0LGUpe3JldHVybiB0Lm5vZGVzW2VdfWZ1bmN0aW9uIER0KHQsZSl7cmV0dXJuIHQubm9k
ZXNbZV19LyoqCisgKiBAbGljZW5zZQorICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCisgKgorICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyAqIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKKyAqLworZnVuY3Rpb24gSXQo
dCxlLG4scil7dmFyIG89IkV4cHJlc3Npb25DaGFuZ2VkQWZ0ZXJJdEhhc0JlZW5DaGVja2VkRXJy
b3I6IEV4cHJlc3Npb24gaGFzIGNoYW5nZWQgYWZ0ZXIgaXQgd2FzIGNoZWNrZWQuIFByZXZpb3Vz
IHZhbHVlOiAnIitlKyInLiBDdXJyZW50IHZhbHVlOiAnIituKyInLiI7cmV0dXJuIHImJihvKz0i
IEl0IHNlZW1zIGxpa2UgdGhlIHZpZXcgaGFzIGJlZW4gY3JlYXRlZCBhZnRlciBpdHMgcGFyZW50
IGFuZCBpdHMgY2hpbGRyZW4gaGF2ZSBiZWVuIGRpcnR5IGNoZWNrZWQuIEhhcyBpdCBiZWVuIGNy
ZWF0ZWQgaW4gYSBjaGFuZ2UgZGV0ZWN0aW9uIGhvb2sgPyIpLEh0KG8sdCl9ZnVuY3Rpb24gRnQo
dCxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIEVycm9yfHwodD1uZXcgRXJyb3IodC50b1N0cmluZygp
KSksTHQodCxlKSx0fWZ1bmN0aW9uIEh0KHQsZSl7dmFyIG49bmV3IEVycm9yKHQpO3JldHVybiBM
dChuLGUpLG59ZnVuY3Rpb24gTHQodCxlKXt0W0VvXT1lLHRbeG9dPWUubG9nRXJyb3IuYmluZChl
KX1mdW5jdGlvbiBCdCh0KXtyZXR1cm4hIW0odCl9ZnVuY3Rpb24gVXQodCl7cmV0dXJuIG5ldyBF
cnJvcigiVmlld0Rlc3Ryb3llZEVycm9yOiBBdHRlbXB0IHRvIHVzZSBhIGRlc3Ryb3llZCB2aWV3
OiAiK3QpfWZ1bmN0aW9uIEd0KHQpe3ZhciBlPV9hLmdldCh0KTtyZXR1cm4gZXx8KGU9YSh0KSsi
XyIrX2Euc2l6ZSxfYS5zZXQodCxlKSksZX1mdW5jdGlvbiBxdCh0KXtyZXR1cm57aWQ6YmEsc3R5
bGVzOnQuc3R5bGVzLGVuY2Fwc3VsYXRpb246dC5lbmNhcHN1bGF0aW9uLGRhdGE6dC5kYXRhfX1m
dW5jdGlvbiB6dCh0KXtpZih0JiZ0LmlkPT09YmEpe3ZhciBlPW51bGwhPXQuZW5jYXBzdWxhdGlv
biYmdC5lbmNhcHN1bGF0aW9uIT09Y28uTm9uZXx8dC5zdHlsZXMubGVuZ3RofHxPYmplY3Qua2V5
cyh0LmRhdGEpLmxlbmd0aDt0LmlkPWU/ImMiK0NhKys6d2F9cmV0dXJuIHQmJnQuaWQ9PT13YSYm
KHQ9bnVsbCksdHx8bnVsbH1mdW5jdGlvbiBadCh0LGUsbixyKXt2YXIgbz10Lm9sZFZhbHVlczty
ZXR1cm4hKCEoMiZ0LnN0YXRlKSYmaShvW2UuYmluZGluZ0luZGV4K25dLHIpKX1mdW5jdGlvbiBZ
dCh0LGUsbixyKXtyZXR1cm4hIVp0KHQsZSxuLHIpJiYodC5vbGRWYWx1ZXNbZS5iaW5kaW5nSW5k
ZXgrbl09ciwhMCl9ZnVuY3Rpb24gS3QodCxlLG4scil7dmFyIG89dC5vbGRWYWx1ZXNbZS5iaW5k
aW5nSW5kZXgrbl07aWYoMSZ0LnN0YXRlfHwhd3QobyxyKSl0aHJvdyBJdChnYS5jcmVhdGVEZWJ1
Z0NvbnRleHQodCxlLmluZGV4KSxvLHIsMCE9KDEmdC5zdGF0ZSkpfWZ1bmN0aW9uIFd0KHQpe2Zv
cih2YXIgZT10O2U7KTImZS5kZWYuZmxhZ3MmJihlLnN0YXRlfD04KSxlPWUudmlld0NvbnRhaW5l
clBhcmVudHx8ZS5wYXJlbnR9ZnVuY3Rpb24gUXQodCxlKXtmb3IodmFyIG49dDtuJiZuIT09ZTsp
bi5zdGF0ZXw9NjQsbj1uLnZpZXdDb250YWluZXJQYXJlbnR8fG4ucGFyZW50fWZ1bmN0aW9uIEp0
KHQsZSxuLHIpe3JldHVybiBXdCgzMzU1NDQzMiZ0LmRlZi5ub2Rlc1tlXS5mbGFncz9NdCh0LGUp
LmNvbXBvbmVudFZpZXc6dCksZ2EuaGFuZGxlRXZlbnQodCxlLG4scil9ZnVuY3Rpb24gJHQodCl7
aWYodC5wYXJlbnQpe3JldHVybiBNdCh0LnBhcmVudCx0LnBhcmVudE5vZGVEZWYuaW5kZXgpfXJl
dHVybiBudWxsfWZ1bmN0aW9uIFh0KHQpe3JldHVybiB0LnBhcmVudD90LnBhcmVudE5vZGVEZWYu
cGFyZW50Om51bGx9ZnVuY3Rpb24gdGUodCxlKXtzd2l0Y2goMjAxMzQ3MDY3JmUuZmxhZ3Mpe2Nh
c2UgMTpyZXR1cm4gTXQodCxlLmluZGV4KS5yZW5kZXJFbGVtZW50O2Nhc2UgMjpyZXR1cm4gTnQo
dCxlLmluZGV4KS5yZW5kZXJUZXh0fX1mdW5jdGlvbiBlZSh0LGUpe3JldHVybiB0P3QrIjoiK2U6
ZX1mdW5jdGlvbiBuZSh0KXtyZXR1cm4hIXQucGFyZW50JiYhISgzMjc2OCZ0LnBhcmVudE5vZGVE
ZWYuZmxhZ3MpfWZ1bmN0aW9uIHJlKHQpe3JldHVybiEoIXQucGFyZW50fHwzMjc2OCZ0LnBhcmVu
dE5vZGVEZWYuZmxhZ3MpfWZ1bmN0aW9uIG9lKHQpe3JldHVybiAxPDx0JTMyfWZ1bmN0aW9uIGll
KHQpe3ZhciBlPXt9LG49MCxyPXt9O3JldHVybiB0JiZ0LmZvckVhY2goZnVuY3Rpb24odCl7dmFy
IG89dFswXSxpPXRbMV07Im51bWJlciI9PXR5cGVvZiBvPyhlW29dPWksbnw9b2UobykpOnJbb109
aX0pLHttYXRjaGVkUXVlcmllczplLHJlZmVyZW5jZXM6cixtYXRjaGVkUXVlcnlJZHM6bn19ZnVu
Y3Rpb24gYWUodCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3ZhciBlLG47cmV0dXJuIEFycmF5
LmlzQXJyYXkodCk/KG49dFswXSxlPXRbMV0pOihuPTAsZT10KSx7ZmxhZ3M6bix0b2tlbjplLHRv
a2VuS2V5Okd0KGUpfX0pfWZ1bmN0aW9uIHNlKHQsZSxuKXt2YXIgcj1uLnJlbmRlclBhcmVudDty
ZXR1cm4gcj8wPT0oMSZyLmZsYWdzKXx8MD09KDMzNTU0NDMyJnIuZmxhZ3MpfHxyLmVsZW1lbnQu
Y29tcG9uZW50UmVuZGVyZXJUeXBlJiZyLmVsZW1lbnQuY29tcG9uZW50UmVuZGVyZXJUeXBlLmVu
Y2Fwc3VsYXRpb249PT1jby5OYXRpdmU/TXQodCxuLnJlbmRlclBhcmVudC5pbmRleCkucmVuZGVy
RWxlbWVudDp2b2lkIDA6ZX1mdW5jdGlvbiB1ZSh0KXt2YXIgZT1FYS5nZXQodCk7cmV0dXJuIGV8
fChlPXQoZnVuY3Rpb24oKXtyZXR1cm4gdmF9KSxlLmZhY3Rvcnk9dCxFYS5zZXQodCxlKSksZX1m
dW5jdGlvbiBjZSh0KXt2YXIgZT1bXTtyZXR1cm4gbGUodCwwLHZvaWQgMCx2b2lkIDAsZSksZX1m
dW5jdGlvbiBsZSh0LGUsbixyLG8pezM9PT1lJiYobj10LnJlbmRlcmVyLnBhcmVudE5vZGUodGUo
dCx0LmRlZi5sYXN0UmVuZGVyUm9vdE5vZGUpKSkscGUodCxlLDAsdC5kZWYubm9kZXMubGVuZ3Ro
LTEsbixyLG8pfWZ1bmN0aW9uIHBlKHQsZSxuLHIsbyxpLGEpe2Zvcih2YXIgcz1uO3M8PXI7cysr
KXt2YXIgdT10LmRlZi5ub2Rlc1tzXTsxMSZ1LmZsYWdzJiZkZSh0LHUsZSxvLGksYSkscys9dS5j
aGlsZENvdW50fX1mdW5jdGlvbiBmZSh0LGUsbixyLG8saSl7Zm9yKHZhciBhPXQ7YSYmIW5lKGEp
OylhPWEucGFyZW50O2Zvcih2YXIgcz1hLnBhcmVudCx1PVh0KGEpLGM9dS5pbmRleCsxLGw9dS5p
bmRleCt1LmNoaWxkQ291bnQscD1jO3A8PWw7cCsrKXt2YXIgZj1zLmRlZi5ub2Rlc1twXTtmLm5n
Q29udGVudEluZGV4PT09ZSYmZGUocyxmLG4scixvLGkpLHArPWYuY2hpbGRDb3VudH1pZighcy5w
YXJlbnQpe3ZhciBkPXQucm9vdC5wcm9qZWN0YWJsZU5vZGVzW2VdO2lmKGQpZm9yKHZhciBwPTA7
cDxkLmxlbmd0aDtwKyspaGUodCxkW3BdLG4scixvLGkpfX1mdW5jdGlvbiBkZSh0LGUsbixyLG8s
aSl7aWYoOCZlLmZsYWdzKWZlKHQsZS5uZ0NvbnRlbnQuaW5kZXgsbixyLG8saSk7ZWxzZXt2YXIg
YT10ZSh0LGUpO2lmKDM9PT1uJiYzMzU1NDQzMiZlLmZsYWdzJiY0OCZlLmJpbmRpbmdGbGFncyl7
aWYoMTYmZS5iaW5kaW5nRmxhZ3MmJmhlKHQsYSxuLHIsbyxpKSwzMiZlLmJpbmRpbmdGbGFncyl7
dmFyIHM9TXQodCxlLmluZGV4KS5jb21wb25lbnRWaWV3O2hlKHMsYSxuLHIsbyxpKX19ZWxzZSBo
ZSh0LGEsbixyLG8saSk7aWYoMTY3NzcyMTYmZS5mbGFncylmb3IodmFyIHU9TXQodCxlLmluZGV4
KS52aWV3Q29udGFpbmVyLl9lbWJlZGRlZFZpZXdzLGM9MDtjPHUubGVuZ3RoO2MrKylsZSh1W2Nd
LG4scixvLGkpOzEmZS5mbGFncyYmIWUuZWxlbWVudC5uYW1lJiZwZSh0LG4sZS5pbmRleCsxLGUu
aW5kZXgrZS5jaGlsZENvdW50LHIsbyxpKX19ZnVuY3Rpb24gaGUodCxlLG4scixvLGkpe3ZhciBh
PXQucmVuZGVyZXI7c3dpdGNoKG4pe2Nhc2UgMTphLmFwcGVuZENoaWxkKHIsZSk7YnJlYWs7Y2Fz
ZSAyOmEuaW5zZXJ0QmVmb3JlKHIsZSxvKTticmVhaztjYXNlIDM6YS5yZW1vdmVDaGlsZChyLGUp
O2JyZWFrO2Nhc2UgMDppLnB1c2goZSl9fWZ1bmN0aW9uIHllKHQpe2lmKCI6Ij09PXRbMF0pe3Zh
ciBlPXQubWF0Y2goT2EpO3JldHVybltlWzFdLGVbMl1dfXJldHVyblsiIix0XX1mdW5jdGlvbiBt
ZSh0KXtmb3IodmFyIGU9MCxuPTA7bjx0Lmxlbmd0aDtuKyspZXw9dFtuXS5mbGFncztyZXR1cm4g
ZX0vKioKKyAqIEBsaWNlbnNlCisgKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqCisgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
biBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorICogZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQorICovCitmdW5jdGlvbiBnZSh0LGUs
bixyLG8saSl7dHw9MTt2YXIgYT1pZShlKSxzPWEubWF0Y2hlZFF1ZXJpZXMsdT1hLnJlZmVyZW5j
ZXM7cmV0dXJue2luZGV4Oi0xLHBhcmVudDpudWxsLHJlbmRlclBhcmVudDpudWxsLGJpbmRpbmdJ
bmRleDotMSxvdXRwdXRJbmRleDotMSxmbGFnczp0LGNoaWxkRmxhZ3M6MCxkaXJlY3RDaGlsZEZs
YWdzOjAsY2hpbGRNYXRjaGVkUXVlcmllczowLG1hdGNoZWRRdWVyaWVzOnMsbWF0Y2hlZFF1ZXJ5
SWRzOmEubWF0Y2hlZFF1ZXJ5SWRzLHJlZmVyZW5jZXM6dSxuZ0NvbnRlbnRJbmRleDpuLGNoaWxk
Q291bnQ6cixiaW5kaW5nczpbXSxiaW5kaW5nRmxhZ3M6MCxvdXRwdXRzOltdLGVsZW1lbnQ6e25z
Om51bGwsbmFtZTpudWxsLGF0dHJzOm51bGwsdGVtcGxhdGU6aT91ZShpKTpudWxsLGNvbXBvbmVu
dFByb3ZpZGVyOm51bGwsY29tcG9uZW50VmlldzpudWxsLGNvbXBvbmVudFJlbmRlcmVyVHlwZTpu
dWxsLHB1YmxpY1Byb3ZpZGVyczpudWxsLGFsbFByb3ZpZGVyczpudWxsLGhhbmRsZUV2ZW50Om98
fHZhfSxwcm92aWRlcjpudWxsLHRleHQ6bnVsbCxxdWVyeTpudWxsLG5nQ29udGVudDpudWxsfX1m
dW5jdGlvbiB2ZSh0LGUsbixyLG8saSxhLHMsdSxjLGwpe3ZvaWQgMD09PWkmJihpPVtdKSx1fHwo
dT12YSk7dmFyIHA9aWUoZSksZj1wLm1hdGNoZWRRdWVyaWVzLGQ9cC5yZWZlcmVuY2VzLGg9cC5t
YXRjaGVkUXVlcnlJZHMseT1udWxsLG09bnVsbDtvJiYoTT15ZShvKSx5PU1bMF0sbT1NWzFdKSxh
PWF8fFtdO2Zvcih2YXIgZz1uZXcgQXJyYXkoYS5sZW5ndGgpLHY9MDt2PGEubGVuZ3RoO3YrKyl7
dmFyIF89YVt2XSxiPV9bMF0sdz1fWzFdLEM9X1syXSxFPXllKHcpLE89RVswXSx4PUVbMV0sUD12
b2lkIDAsUz12b2lkIDA7c3dpdGNoKDE1JmIpe2Nhc2UgNDpTPUM7YnJlYWs7Y2FzZSAxOmNhc2Ug
ODpQPUN9Z1t2XT17ZmxhZ3M6YixuczpPLG5hbWU6eCxub25NaW5pZmllZE5hbWU6eCxzZWN1cml0
eUNvbnRleHQ6UCxzdWZmaXg6U319cz1zfHxbXTtmb3IodmFyIEE9bmV3IEFycmF5KHMubGVuZ3Ro
KSx2PTA7djxzLmxlbmd0aDt2Kyspe3ZhciBUPXNbdl0saz1UWzBdLFY9VFsxXTtBW3ZdPXt0eXBl
OjAsdGFyZ2V0OmssZXZlbnROYW1lOlYscHJvcE5hbWU6bnVsbH19aT1pfHxbXTt2YXIgTj1pLm1h
cChmdW5jdGlvbih0KXt2YXIgZT10WzBdLG49dFsxXSxyPXllKGUpO3JldHVybltyWzBdLHJbMV0s
bl19KTtyZXR1cm4gbD16dChsKSxjJiYodHw9MzM1NTQ0MzIpLHR8PTEse2luZGV4Oi0xLHBhcmVu
dDpudWxsLHJlbmRlclBhcmVudDpudWxsLGJpbmRpbmdJbmRleDotMSxvdXRwdXRJbmRleDotMSxm
bGFnczp0LGNoaWxkRmxhZ3M6MCxkaXJlY3RDaGlsZEZsYWdzOjAsY2hpbGRNYXRjaGVkUXVlcmll
czowLG1hdGNoZWRRdWVyaWVzOmYsbWF0Y2hlZFF1ZXJ5SWRzOmgscmVmZXJlbmNlczpkLG5nQ29u
dGVudEluZGV4Om4sY2hpbGRDb3VudDpyLGJpbmRpbmdzOmcsYmluZGluZ0ZsYWdzOm1lKGcpLG91
dHB1dHM6QSxlbGVtZW50Ontuczp5LG5hbWU6bSxhdHRyczpOLHRlbXBsYXRlOm51bGwsY29tcG9u
ZW50UHJvdmlkZXI6bnVsbCxjb21wb25lbnRWaWV3OmN8fG51bGwsY29tcG9uZW50UmVuZGVyZXJU
eXBlOmwscHVibGljUHJvdmlkZXJzOm51bGwsYWxsUHJvdmlkZXJzOm51bGwsaGFuZGxlRXZlbnQ6
dXx8dmF9LHByb3ZpZGVyOm51bGwsdGV4dDpudWxsLHF1ZXJ5Om51bGwsbmdDb250ZW50Om51bGx9
O3ZhciBNfWZ1bmN0aW9uIF9lKHQsZSxuKXt2YXIgcixvPW4uZWxlbWVudCxpPXQucm9vdC5zZWxl
Y3Rvck9yTm9kZSxhPXQucmVuZGVyZXI7aWYodC5wYXJlbnR8fCFpKXtyPW8ubmFtZT9hLmNyZWF0
ZUVsZW1lbnQoby5uYW1lLG8ubnMpOmEuY3JlYXRlQ29tbWVudCgiIik7dmFyIHM9c2UodCxlLG4p
O3MmJmEuYXBwZW5kQ2hpbGQocyxyKX1lbHNlIHI9YS5zZWxlY3RSb290RWxlbWVudChpKTtpZihv
LmF0dHJzKWZvcih2YXIgdT0wO3U8by5hdHRycy5sZW5ndGg7dSsrKXt2YXIgYz1vLmF0dHJzW3Vd
LGw9Y1swXSxwPWNbMV0sZj1jWzJdO2Euc2V0QXR0cmlidXRlKHIscCxmLGwpfXJldHVybiByfWZ1
bmN0aW9uIGJlKHQsZSxuLHIpe2Zvcih2YXIgbz0wO288bi5vdXRwdXRzLmxlbmd0aDtvKyspe3Zh
ciBpPW4ub3V0cHV0c1tvXSxhPXdlKHQsbi5pbmRleCxlZShpLnRhcmdldCxpLmV2ZW50TmFtZSkp
LHM9aS50YXJnZXQsdT10OyJjb21wb25lbnQiPT09aS50YXJnZXQmJihzPW51bGwsdT1lKTt2YXIg
Yz11LnJlbmRlcmVyLmxpc3RlbihzfHxyLGkuZXZlbnROYW1lLGEpO3QuZGlzcG9zYWJsZXNbbi5v
dXRwdXRJbmRleCtvXT1jfX1mdW5jdGlvbiB3ZSh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3Ry
eXtyZXR1cm4gSnQodCxlLG4scil9Y2F0Y2goZSl7dC5yb290LmVycm9ySGFuZGxlci5oYW5kbGVF
cnJvcihlKX19fWZ1bmN0aW9uIENlKHQsZSxuLHIsbyxpLGEscyx1LGMsbCxwKXt2YXIgZj1lLmJp
bmRpbmdzLmxlbmd0aCxkPSExO3JldHVybiBmPjAmJk9lKHQsZSwwLG4pJiYoZD0hMCksZj4xJiZP
ZSh0LGUsMSxyKSYmKGQ9ITApLGY+MiYmT2UodCxlLDIsbykmJihkPSEwKSxmPjMmJk9lKHQsZSwz
LGkpJiYoZD0hMCksZj40JiZPZSh0LGUsNCxhKSYmKGQ9ITApLGY+NSYmT2UodCxlLDUscykmJihk
PSEwKSxmPjYmJk9lKHQsZSw2LHUpJiYoZD0hMCksZj43JiZPZSh0LGUsNyxjKSYmKGQ9ITApLGY+
OCYmT2UodCxlLDgsbCkmJihkPSEwKSxmPjkmJk9lKHQsZSw5LHApJiYoZD0hMCksZH1mdW5jdGlv
biBFZSh0LGUsbil7Zm9yKHZhciByPSExLG89MDtvPG4ubGVuZ3RoO28rKylPZSh0LGUsbyxuW29d
KSYmKHI9ITApO3JldHVybiByfWZ1bmN0aW9uIE9lKHQsZSxuLHIpe2lmKCFZdCh0LGUsbixyKSly
ZXR1cm4hMTt2YXIgbz1lLmJpbmRpbmdzW25dLGk9TXQodCxlLmluZGV4KSxhPWkucmVuZGVyRWxl
bWVudCxzPW8ubmFtZTtzd2l0Y2goMTUmby5mbGFncyl7Y2FzZSAxOnhlKHQsbyxhLG8ubnMscyxy
KTticmVhaztjYXNlIDI6UGUodCxhLHMscik7YnJlYWs7Y2FzZSA0OlNlKHQsbyxhLHMscik7YnJl
YWs7Y2FzZSA4OkFlKDMzNTU0NDMyJmUuZmxhZ3MmJjMyJm8uZmxhZ3M/aS5jb21wb25lbnRWaWV3
OnQsbyxhLHMscil9cmV0dXJuITB9ZnVuY3Rpb24geGUodCxlLG4scixvLGkpe3ZhciBhPWUuc2Vj
dXJpdHlDb250ZXh0LHM9YT90LnJvb3Quc2FuaXRpemVyLnNhbml0aXplKGEsaSk6aTtzPW51bGwh
PXM/cy50b1N0cmluZygpOm51bGw7dmFyIHU9dC5yZW5kZXJlcjtudWxsIT1pP3Uuc2V0QXR0cmli
dXRlKG4sbyxzLHIpOnUucmVtb3ZlQXR0cmlidXRlKG4sbyxyKX1mdW5jdGlvbiBQZSh0LGUsbixy
KXt2YXIgbz10LnJlbmRlcmVyO3I/by5hZGRDbGFzcyhlLG4pOm8ucmVtb3ZlQ2xhc3MoZSxuKX1m
dW5jdGlvbiBTZSh0LGUsbixyLG8pe3ZhciBpPXQucm9vdC5zYW5pdGl6ZXIuc2FuaXRpemUoeWEu
U1RZTEUsbyk7aWYobnVsbCE9aSl7aT1pLnRvU3RyaW5nKCk7dmFyIGE9ZS5zdWZmaXg7bnVsbCE9
YSYmKGkrPWEpfWVsc2UgaT1udWxsO3ZhciBzPXQucmVuZGVyZXI7bnVsbCE9aT9zLnNldFN0eWxl
KG4scixpKTpzLnJlbW92ZVN0eWxlKG4scil9ZnVuY3Rpb24gQWUodCxlLG4scixvKXt2YXIgaT1l
LnNlY3VyaXR5Q29udGV4dCxhPWk/dC5yb290LnNhbml0aXplci5zYW5pdGl6ZShpLG8pOm87dC5y
ZW5kZXJlci5zZXRQcm9wZXJ0eShuLHIsYSl9ZnVuY3Rpb24gVGUodCxlLG4scil7cmV0dXJue2lu
ZGV4Oi0xLGRlcHM6YWUociksZmxhZ3M6dCx0b2tlbjplLHZhbHVlOm59fWZ1bmN0aW9uIGtlKHQp
e2Zvcih2YXIgZT17fSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5pbmRleD1uLGVb
R3Qoci50b2tlbildPXJ9cmV0dXJue2ZhY3Rvcnk6bnVsbCxwcm92aWRlcnNCeUtleTplLHByb3Zp
ZGVyczp0fX1mdW5jdGlvbiBWZSh0KXtmb3IodmFyIGU9dC5fZGVmLG49dC5fcHJvdmlkZXJzPW5l
dyBBcnJheShlLnByb3ZpZGVycy5sZW5ndGgpLHI9MDtyPGUucHJvdmlkZXJzLmxlbmd0aDtyKysp
e3ZhciBvPWUucHJvdmlkZXJzW3JdO25bcl09NDA5NiZvLmZsYWdzP3hhOk1lKHQsbyl9fWZ1bmN0
aW9uIE5lKHQsZSxuKXtpZih2b2lkIDA9PT1uJiYobj1Dby5USFJPV19JRl9OT1RfRk9VTkQpLDgm
ZS5mbGFncylyZXR1cm4gZS50b2tlbjtpZigyJmUuZmxhZ3MmJihuPW51bGwpLDEmZS5mbGFncyly
ZXR1cm4gdC5fcGFyZW50LmdldChlLnRva2VuLG4pO3ZhciByPWUudG9rZW5LZXk7c3dpdGNoKHIp
e2Nhc2UgUGE6Y2FzZSBTYTpyZXR1cm4gdH12YXIgbz10Ll9kZWYucHJvdmlkZXJzQnlLZXlbcl07
aWYobyl7dmFyIGk9dC5fcHJvdmlkZXJzW28uaW5kZXhdO3JldHVybiBpPT09eGEmJihpPXQuX3By
b3ZpZGVyc1tvLmluZGV4XT1NZSh0LG8pKSxpfXJldHVybiB0Ll9wYXJlbnQuZ2V0KGUudG9rZW4s
bil9ZnVuY3Rpb24gTWUodCxlKXt2YXIgbjtzd2l0Y2goMjAxMzQ3MDY3JmUuZmxhZ3Mpe2Nhc2Ug
NTEyOm49amUodCxlLnZhbHVlLGUuZGVwcyk7YnJlYWs7Y2FzZSAxMDI0Om49UmUodCxlLnZhbHVl
LGUuZGVwcyk7YnJlYWs7Y2FzZSAyMDQ4Om49TmUodCxlLmRlcHNbMF0pO2JyZWFrO2Nhc2UgMjU2
Om49ZS52YWx1ZX1yZXR1cm4gbn1mdW5jdGlvbiBqZSh0LGUsbil7dmFyIHIsbz1uLmxlbmd0aDtz
d2l0Y2gobyl7Y2FzZSAwOnI9bmV3IGU7YnJlYWs7Y2FzZSAxOnI9bmV3IGUoTmUodCxuWzBdKSk7
YnJlYWs7Y2FzZSAyOnI9bmV3IGUoTmUodCxuWzBdKSxOZSh0LG5bMV0pKTticmVhaztjYXNlIDM6
cj1uZXcgZShOZSh0LG5bMF0pLE5lKHQsblsxXSksTmUodCxuWzJdKSk7YnJlYWs7ZGVmYXVsdDpm
b3IodmFyIGk9bmV3IEFycmF5KG8pLGE9MDthPG87YSsrKWlbYV09TmUodCxuW2FdKTtyPW5ldyhl
LmJpbmQuYXBwbHkoZSxbdm9pZCAwXS5jb25jYXQoaSkpKX1yZXR1cm4gcn1mdW5jdGlvbiBSZSh0
LGUsbil7dmFyIHIsbz1uLmxlbmd0aDtzd2l0Y2gobyl7Y2FzZSAwOnI9ZSgpO2JyZWFrO2Nhc2Ug
MTpyPWUoTmUodCxuWzBdKSk7YnJlYWs7Y2FzZSAyOnI9ZShOZSh0LG5bMF0pLE5lKHQsblsxXSkp
O2JyZWFrO2Nhc2UgMzpyPWUoTmUodCxuWzBdKSxOZSh0LG5bMV0pLE5lKHQsblsyXSkpO2JyZWFr
O2RlZmF1bHQ6Zm9yKHZhciBpPUFycmF5KG8pLGE9MDthPG87YSsrKWlbYV09TmUodCxuW2FdKTty
PWUuYXBwbHkodm9pZCAwLGkpfXJldHVybiByfWZ1bmN0aW9uIERlKHQsZSl7Zm9yKHZhciBuPXQu
X2RlZixyPTA7cjxuLnByb3ZpZGVycy5sZW5ndGg7cisrKXtpZigxMzEwNzImbi5wcm92aWRlcnNb
cl0uZmxhZ3Mpe3ZhciBvPXQuX3Byb3ZpZGVyc1tyXTtvJiZvIT09eGEmJm8ubmdPbkRlc3Ryb3ko
KX19fS8qKgorICogQGxpY2Vuc2UKKyAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorICoKKyAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisgKiBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCisgKi8KK2Z1bmN0aW9uIEllKHQs
ZSxuLHIpe3ZhciBvPWUudmlld0NvbnRhaW5lci5fZW1iZWRkZWRWaWV3cztudWxsIT09biYmdm9p
ZCAwIT09bnx8KG49by5sZW5ndGgpLHIudmlld0NvbnRhaW5lclBhcmVudD10LHplKG8sbixyKSxG
ZShlLHIpLGdhLmRpcnR5UGFyZW50UXVlcmllcyhyKSxHZShlLG4+MD9vW24tMV06bnVsbCxyKX1m
dW5jdGlvbiBGZSh0LGUpe3ZhciBuPSR0KGUpO2lmKG4mJm4hPT10JiYhKDE2JmUuc3RhdGUpKXtl
LnN0YXRlfD0xNjt2YXIgcj1uLnRlbXBsYXRlLl9wcm9qZWN0ZWRWaWV3cztyfHwocj1uLnRlbXBs
YXRlLl9wcm9qZWN0ZWRWaWV3cz1bXSksci5wdXNoKGUpLEhlKGUucGFyZW50LmRlZixlLnBhcmVu
dE5vZGVEZWYpfX1mdW5jdGlvbiBIZSh0LGUpe2lmKCEoNCZlLmZsYWdzKSl7dC5ub2RlRmxhZ3N8
PTQsZS5mbGFnc3w9NDtmb3IodmFyIG49ZS5wYXJlbnQ7bjspbi5jaGlsZEZsYWdzfD00LG49bi5w
YXJlbnR9fWZ1bmN0aW9uIExlKHQsZSl7dmFyIG49dC52aWV3Q29udGFpbmVyLl9lbWJlZGRlZFZp
ZXdzO2lmKChudWxsPT1lfHxlPj1uLmxlbmd0aCkmJihlPW4ubGVuZ3RoLTEpLGU8MClyZXR1cm4g
bnVsbDt2YXIgcj1uW2VdO3JldHVybiByLnZpZXdDb250YWluZXJQYXJlbnQ9bnVsbCxaZShuLGUp
LGdhLmRpcnR5UGFyZW50UXVlcmllcyhyKSxxZShyKSxyfWZ1bmN0aW9uIEJlKHQpe2lmKDE2JnQu
c3RhdGUpe3ZhciBlPSR0KHQpO2lmKGUpe3ZhciBuPWUudGVtcGxhdGUuX3Byb2plY3RlZFZpZXdz
O24mJihaZShuLG4uaW5kZXhPZih0KSksZ2EuZGlydHlQYXJlbnRRdWVyaWVzKHQpKX19fWZ1bmN0
aW9uIFVlKHQsZSxuKXt2YXIgcj10LnZpZXdDb250YWluZXIuX2VtYmVkZGVkVmlld3Msbz1yW2Vd
O3JldHVybiBaZShyLGUpLG51bGw9PW4mJihuPXIubGVuZ3RoKSx6ZShyLG4sbyksZ2EuZGlydHlQ
YXJlbnRRdWVyaWVzKG8pLHFlKG8pLEdlKHQsbj4wP3Jbbi0xXTpudWxsLG8pLG99ZnVuY3Rpb24g
R2UodCxlLG4pe3ZhciByPWU/dGUoZSxlLmRlZi5sYXN0UmVuZGVyUm9vdE5vZGUpOnQucmVuZGVy
RWxlbWVudDtsZShuLDIsbi5yZW5kZXJlci5wYXJlbnROb2RlKHIpLG4ucmVuZGVyZXIubmV4dFNp
Ymxpbmcociksdm9pZCAwKX1mdW5jdGlvbiBxZSh0KXtsZSh0LDMsbnVsbCxudWxsLHZvaWQgMCl9
ZnVuY3Rpb24gemUodCxlLG4pe2U+PXQubGVuZ3RoP3QucHVzaChuKTp0LnNwbGljZShlLDAsbil9
ZnVuY3Rpb24gWmUodCxlKXtlPj10Lmxlbmd0aC0xP3QucG9wKCk6dC5zcGxpY2UoZSwxKX1mdW5j
dGlvbiBZZSh0LGUsbixyLG8saSl7cmV0dXJuIG5ldyBUYSh0LGUsbixyLG8saSl9ZnVuY3Rpb24g
S2UodCxlLG4pe3JldHVybiBuZXcgVmEodCxlLG4pfWZ1bmN0aW9uIFdlKHQpe3JldHVybiBuZXcg
TmEodCl9ZnVuY3Rpb24gUWUodCxlKXtyZXR1cm4gbmV3IE1hKHQsZSl9ZnVuY3Rpb24gSmUodCxl
KXtyZXR1cm4gbmV3IGphKHQsZSl9ZnVuY3Rpb24gJGUodCxlKXt2YXIgbj10LmRlZi5ub2Rlc1tl
XTtpZigxJm4uZmxhZ3Mpe3ZhciByPU10KHQsbi5pbmRleCk7cmV0dXJuIG4uZWxlbWVudC50ZW1w
bGF0ZT9yLnRlbXBsYXRlOnIucmVuZGVyRWxlbWVudH1pZigyJm4uZmxhZ3MpcmV0dXJuIE50KHQs
bi5pbmRleCkucmVuZGVyVGV4dDtpZigyMDI0MCZuLmZsYWdzKXJldHVybiBqdCh0LG4uaW5kZXgp
Lmluc3RhbmNlO3Rocm93IG5ldyBFcnJvcigiSWxsZWdhbCBzdGF0ZTogcmVhZCBub2RlVmFsdWUg
Zm9yIG5vZGUgaW5kZXggIitlKX1mdW5jdGlvbiBYZSh0KXtyZXR1cm4gbmV3IFJhKHQucmVuZGVy
ZXIpfWZ1bmN0aW9uIHRuKHQsZSxuLHIpe3JldHVybiBuZXcgRGEodCxlLG4scil9ZnVuY3Rpb24g
ZW4odCxlLG4scixvLGksYSl7dmFyIHM9W107aWYoaSlmb3IodmFyIHUgaW4gaSl7dmFyIGM9aVt1
XSxsPWNbMF0scD1jWzFdO3NbbF09e2ZsYWdzOjgsbmFtZTp1LG5vbk1pbmlmaWVkTmFtZTpwLG5z
Om51bGwsc2VjdXJpdHlDb250ZXh0Om51bGwsc3VmZml4Om51bGx9fXZhciBmPVtdO2lmKGEpZm9y
KHZhciBkIGluIGEpZi5wdXNoKHt0eXBlOjEscHJvcE5hbWU6ZCx0YXJnZXQ6bnVsbCxldmVudE5h
bWU6YVtkXX0pO3JldHVybiB0fD0xNjM4NCxybih0LGUsbixyLHIsbyxzLGYpfWZ1bmN0aW9uIG5u
KHQsZSxuLHIsbyl7cmV0dXJuIHJuKHQsZSwwLG4scixvKX1mdW5jdGlvbiBybih0LGUsbixyLG8s
aSxhLHMpe3ZhciB1PWllKGUpLGM9dS5tYXRjaGVkUXVlcmllcyxsPXUucmVmZXJlbmNlcyxwPXUu
bWF0Y2hlZFF1ZXJ5SWRzO3N8fChzPVtdKSxhfHwoYT1bXSk7dmFyIGY9YWUoaSk7cmV0dXJue2lu
ZGV4Oi0xLHBhcmVudDpudWxsLHJlbmRlclBhcmVudDpudWxsLGJpbmRpbmdJbmRleDotMSxvdXRw
dXRJbmRleDotMSxmbGFnczp0LGNoaWxkRmxhZ3M6MCxkaXJlY3RDaGlsZEZsYWdzOjAsY2hpbGRN
YXRjaGVkUXVlcmllczowLG1hdGNoZWRRdWVyaWVzOmMsbWF0Y2hlZFF1ZXJ5SWRzOnAscmVmZXJl
bmNlczpsLG5nQ29udGVudEluZGV4Oi0xLGNoaWxkQ291bnQ6bixiaW5kaW5nczphLGJpbmRpbmdG
bGFnczptZShhKSxvdXRwdXRzOnMsZWxlbWVudDpudWxsLHByb3ZpZGVyOnt0b2tlbjpyLHZhbHVl
Om8sZGVwczpmfSx0ZXh0Om51bGwscXVlcnk6bnVsbCxuZ0NvbnRlbnQ6bnVsbH19ZnVuY3Rpb24g
b24odCxlKXtyZXR1cm4gNDA5NiZlLmZsYWdzP3FhOnBuKHQsZSl9ZnVuY3Rpb24gYW4odCxlKXtm
b3IodmFyIG49dDtuLnBhcmVudCYmIW5lKG4pOyluPW4ucGFyZW50O3JldHVybiBmbihuLnBhcmVu
dCxYdChuKSwhMCxlLnByb3ZpZGVyLnZhbHVlLGUucHJvdmlkZXIuZGVwcyl9ZnVuY3Rpb24gc24o
dCxlKXt2YXIgbj0oMzI3NjgmZS5mbGFncyk+MCxyPWZuKHQsZS5wYXJlbnQsbixlLnByb3ZpZGVy
LnZhbHVlLGUucHJvdmlkZXIuZGVwcyk7aWYoZS5vdXRwdXRzLmxlbmd0aClmb3IodmFyIG89MDtv
PGUub3V0cHV0cy5sZW5ndGg7bysrKXt2YXIgaT1lLm91dHB1dHNbb10sYT1yW2kucHJvcE5hbWVd
LnN1YnNjcmliZSh1bih0LGUucGFyZW50LmluZGV4LGkuZXZlbnROYW1lKSk7dC5kaXNwb3NhYmxl
c1tlLm91dHB1dEluZGV4K29dPWEudW5zdWJzY3JpYmUuYmluZChhKX1yZXR1cm4gcn1mdW5jdGlv
biB1bih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3RyeXtyZXR1cm4gSnQodCxlLG4scil9Y2F0
Y2goZSl7dC5yb290LmVycm9ySGFuZGxlci5oYW5kbGVFcnJvcihlKX19fWZ1bmN0aW9uIGNuKHQs
ZSxuLHIsbyxpLGEscyx1LGMsbCxwKXt2YXIgZj1qdCh0LGUuaW5kZXgpLGQ9Zi5pbnN0YW5jZSxo
PSExLHk9dm9pZCAwLG09ZS5iaW5kaW5ncy5sZW5ndGg7cmV0dXJuIG0+MCYmWnQodCxlLDAsbikm
JihoPSEwLHk9bW4odCxmLGUsMCxuLHkpKSxtPjEmJlp0KHQsZSwxLHIpJiYoaD0hMCx5PW1uKHQs
ZixlLDEscix5KSksbT4yJiZadCh0LGUsMixvKSYmKGg9ITAseT1tbih0LGYsZSwyLG8seSkpLG0+
MyYmWnQodCxlLDMsaSkmJihoPSEwLHk9bW4odCxmLGUsMyxpLHkpKSxtPjQmJlp0KHQsZSw0LGEp
JiYoaD0hMCx5PW1uKHQsZixlLDQsYSx5KSksbT41JiZadCh0LGUsNSxzKSYmKGg9ITAseT1tbih0
LGYsZSw1LHMseSkpLG0+NiYmWnQodCxlLDYsdSkmJihoPSEwLHk9bW4odCxmLGUsNix1LHkpKSxt
PjcmJlp0KHQsZSw3LGMpJiYoaD0hMCx5PW1uKHQsZixlLDcsYyx5KSksbT44JiZadCh0LGUsOCxs
KSYmKGg9ITAseT1tbih0LGYsZSw4LGwseSkpLG0+OSYmWnQodCxlLDkscCkmJihoPSEwLHk9bW4o
dCxmLGUsOSxwLHkpKSx5JiZkLm5nT25DaGFuZ2VzKHkpLDImdC5zdGF0ZSYmNjU1MzYmZS5mbGFn
cyYmZC5uZ09uSW5pdCgpLDI2MjE0NCZlLmZsYWdzJiZkLm5nRG9DaGVjaygpLGh9ZnVuY3Rpb24g
bG4odCxlLG4pe2Zvcih2YXIgcj1qdCh0LGUuaW5kZXgpLG89ci5pbnN0YW5jZSxpPSExLGE9dm9p
ZCAwLHM9MDtzPG4ubGVuZ3RoO3MrKyladCh0LGUscyxuW3NdKSYmKGk9ITAsYT1tbih0LHIsZSxz
LG5bc10sYSkpO3JldHVybiBhJiZvLm5nT25DaGFuZ2VzKGEpLDImdC5zdGF0ZSYmNjU1MzYmZS5m
bGFncyYmby5uZ09uSW5pdCgpLDI2MjE0NCZlLmZsYWdzJiZvLm5nRG9DaGVjaygpLGl9ZnVuY3Rp
b24gcG4odCxlKXt2YXIgbixyPSg4MTkyJmUuZmxhZ3MpPjAsbz1lLnByb3ZpZGVyO3N3aXRjaCgy
MDEzNDcwNjcmZS5mbGFncyl7Y2FzZSA1MTI6bj1mbih0LGUucGFyZW50LHIsby52YWx1ZSxvLmRl
cHMpO2JyZWFrO2Nhc2UgMTAyNDpuPWRuKHQsZS5wYXJlbnQscixvLnZhbHVlLG8uZGVwcyk7YnJl
YWs7Y2FzZSAyMDQ4Om49aG4odCxlLnBhcmVudCxyLG8uZGVwc1swXSk7YnJlYWs7Y2FzZSAyNTY6
bj1vLnZhbHVlfXJldHVybiBufWZ1bmN0aW9uIGZuKHQsZSxuLHIsbyl7dmFyIGksYT1vLmxlbmd0
aDtzd2l0Y2goYSl7Y2FzZSAwOmk9bmV3IHI7YnJlYWs7Y2FzZSAxOmk9bmV3IHIoaG4odCxlLG4s
b1swXSkpO2JyZWFrO2Nhc2UgMjppPW5ldyByKGhuKHQsZSxuLG9bMF0pLGhuKHQsZSxuLG9bMV0p
KTticmVhaztjYXNlIDM6aT1uZXcgcihobih0LGUsbixvWzBdKSxobih0LGUsbixvWzFdKSxobih0
LGUsbixvWzJdKSk7YnJlYWs7ZGVmYXVsdDpmb3IodmFyIHM9bmV3IEFycmF5KGEpLHU9MDt1PGE7
dSsrKXNbdV09aG4odCxlLG4sb1t1XSk7aT1uZXcoci5iaW5kLmFwcGx5KHIsW3ZvaWQgMF0uY29u
Y2F0KHMpKSl9cmV0dXJuIGl9ZnVuY3Rpb24gZG4odCxlLG4scixvKXt2YXIgaSxhPW8ubGVuZ3Ro
O3N3aXRjaChhKXtjYXNlIDA6aT1yKCk7YnJlYWs7Y2FzZSAxOmk9cihobih0LGUsbixvWzBdKSk7
YnJlYWs7Y2FzZSAyOmk9cihobih0LGUsbixvWzBdKSxobih0LGUsbixvWzFdKSk7YnJlYWs7Y2Fz
ZSAzOmk9cihobih0LGUsbixvWzBdKSxobih0LGUsbixvWzFdKSxobih0LGUsbixvWzJdKSk7YnJl
YWs7ZGVmYXVsdDpmb3IodmFyIHM9QXJyYXkoYSksdT0wO3U8YTt1Kyspc1t1XT1obih0LGUsbixv
W3VdKTtpPXIuYXBwbHkodm9pZCAwLHMpfXJldHVybiBpfWZ1bmN0aW9uIGhuKHQsZSxuLHIsbyl7
aWYodm9pZCAwPT09byYmKG89Q28uVEhST1dfSUZfTk9UX0ZPVU5EKSw4JnIuZmxhZ3MpcmV0dXJu
IHIudG9rZW47dmFyIGk9dDsyJnIuZmxhZ3MmJihvPW51bGwpO3ZhciBhPXIudG9rZW5LZXk7Zm9y
KGE9PT1VYSYmKG49ISghZXx8IWUuZWxlbWVudC5jb21wb25lbnRWaWV3KSksZSYmMSZyLmZsYWdz
JiYobj0hMSxlPWUucGFyZW50KTt0Oyl7aWYoZSlzd2l0Y2goYSl7Y2FzZSBJYTp2YXIgcz15bih0
LGUsbik7cmV0dXJuIFhlKHMpO2Nhc2UgRmE6dmFyIHM9eW4odCxlLG4pO3JldHVybiBzLnJlbmRl
cmVyO2Nhc2UgSGE6cmV0dXJuIG5ldyBOaShNdCh0LGUuaW5kZXgpLnJlbmRlckVsZW1lbnQpO2Nh
c2UgTGE6cmV0dXJuIE10KHQsZS5pbmRleCkudmlld0NvbnRhaW5lcjtjYXNlIEJhOmlmKGUuZWxl
bWVudC50ZW1wbGF0ZSlyZXR1cm4gTXQodCxlLmluZGV4KS50ZW1wbGF0ZTticmVhaztjYXNlIFVh
OnJldHVybiBXZSh5bih0LGUsbikpO2Nhc2UgR2E6cmV0dXJuIEplKHQsZSk7ZGVmYXVsdDp2YXIg
dT0obj9lLmVsZW1lbnQuYWxsUHJvdmlkZXJzOmUuZWxlbWVudC5wdWJsaWNQcm92aWRlcnMpW2Fd
O2lmKHUpe3ZhciBjPWp0KHQsdS5pbmRleCk7cmV0dXJuIGMuaW5zdGFuY2U9PT1xYSYmKGMuaW5z
dGFuY2U9cG4odCx1KSksYy5pbnN0YW5jZX19bj1uZSh0KSxlPVh0KHQpLHQ9dC5wYXJlbnR9dmFy
IGw9aS5yb290LmluamVjdG9yLmdldChyLnRva2VuLHphKTtyZXR1cm4gbCE9PXphfHxvPT09emE/
bDppLnJvb3QubmdNb2R1bGUuaW5qZWN0b3IuZ2V0KHIudG9rZW4sbyl9ZnVuY3Rpb24geW4odCxl
LG4pe3ZhciByO2lmKG4pcj1NdCh0LGUuaW5kZXgpLmNvbXBvbmVudFZpZXc7ZWxzZSBmb3Iocj10
O3IucGFyZW50JiYhbmUocik7KXI9ci5wYXJlbnQ7cmV0dXJuIHJ9ZnVuY3Rpb24gbW4odCxlLG4s
cixvLGkpe2lmKDMyNzY4Jm4uZmxhZ3Mpe3ZhciBhPU10KHQsbi5wYXJlbnQuaW5kZXgpLmNvbXBv
bmVudFZpZXc7MiZhLmRlZi5mbGFncyYmKGEuc3RhdGV8PTgpfXZhciBzPW4uYmluZGluZ3Nbcl0s
dT1zLm5hbWU7aWYoZS5pbnN0YW5jZVt1XT1vLDUyNDI4OCZuLmZsYWdzKXtpPWl8fHt9O3ZhciBj
PXQub2xkVmFsdWVzW24uYmluZGluZ0luZGV4K3JdO2MgaW5zdGFuY2VvZiBZaSYmKGM9Yy53cmFw
cGVkKTtpW24uYmluZGluZ3Nbcl0ubm9uTWluaWZpZWROYW1lXT1uZXcgS2koYyxvLDAhPSgyJnQu
c3RhdGUpKX1yZXR1cm4gdC5vbGRWYWx1ZXNbbi5iaW5kaW5nSW5kZXgrcl09byxpfWZ1bmN0aW9u
IGduKHQsZSl7aWYodC5kZWYubm9kZUZsYWdzJmUpZm9yKHZhciBuPXQuZGVmLm5vZGVzLHI9MDty
PG4ubGVuZ3RoO3IrKyl7dmFyIG89bltyXSxpPW8ucGFyZW50O2ZvcighaSYmby5mbGFncyZlJiZf
bih0LHIsby5mbGFncyZlKSwwPT0oby5jaGlsZEZsYWdzJmUpJiYocis9by5jaGlsZENvdW50KTtp
JiYxJmkuZmxhZ3MmJnI9PT1pLmluZGV4K2kuY2hpbGRDb3VudDspaS5kaXJlY3RDaGlsZEZsYWdz
JmUmJnZuKHQsaSxlKSxpPWkucGFyZW50fX1mdW5jdGlvbiB2bih0LGUsbil7Zm9yKHZhciByPWUu
aW5kZXgrMTtyPD1lLmluZGV4K2UuY2hpbGRDb3VudDtyKyspe3ZhciBvPXQuZGVmLm5vZGVzW3Jd
O28uZmxhZ3MmbiYmX24odCxyLG8uZmxhZ3Mmbikscis9by5jaGlsZENvdW50fX1mdW5jdGlvbiBf
bih0LGUsbil7dmFyIHI9anQodCxlKS5pbnN0YW5jZTtyIT09cWEmJihnYS5zZXRDdXJyZW50Tm9k
ZSh0LGUpLDEwNDg1NzYmbiYmci5uZ0FmdGVyQ29udGVudEluaXQoKSwyMDk3MTUyJm4mJnIubmdB
ZnRlckNvbnRlbnRDaGVja2VkKCksNDE5NDMwNCZuJiZyLm5nQWZ0ZXJWaWV3SW5pdCgpLDgzODg2
MDgmbiYmci5uZ0FmdGVyVmlld0NoZWNrZWQoKSwxMzEwNzImbiYmci5uZ09uRGVzdHJveSgpKX1m
dW5jdGlvbiBibigpe3JldHVybiBuZXcgTWl9ZnVuY3Rpb24gd24odCl7Zm9yKHZhciBlPXQuZGVm
Lm5vZGVNYXRjaGVkUXVlcmllczt0LnBhcmVudCYmcmUodCk7KXt2YXIgbj10LnBhcmVudE5vZGVE
ZWY7dD10LnBhcmVudDtmb3IodmFyIHI9bi5pbmRleCtuLmNoaWxkQ291bnQsbz0wO288PXI7bysr
KXt2YXIgaT10LmRlZi5ub2Rlc1tvXTs2NzEwODg2NCZpLmZsYWdzJiY1MzY4NzA5MTImaS5mbGFn
cyYmKGkucXVlcnkuZmlsdGVySWQmZSk9PT1pLnF1ZXJ5LmZpbHRlcklkJiZEdCh0LG8pLnNldERp
cnR5KCksISgxJmkuZmxhZ3MmJm8raS5jaGlsZENvdW50PG4uaW5kZXgpJiY2NzEwODg2NCZpLmNo
aWxkRmxhZ3MmJjUzNjg3MDkxMiZpLmNoaWxkRmxhZ3N8fChvKz1pLmNoaWxkQ291bnQpfX1pZigx
MzQyMTc3MjgmdC5kZWYubm9kZUZsYWdzKWZvcih2YXIgbz0wO288dC5kZWYubm9kZXMubGVuZ3Ro
O28rKyl7dmFyIGk9dC5kZWYubm9kZXNbb107MTM0MjE3NzI4JmkuZmxhZ3MmJjUzNjg3MDkxMiZp
LmZsYWdzJiZEdCh0LG8pLnNldERpcnR5KCksbys9aS5jaGlsZENvdW50fX1mdW5jdGlvbiBDbih0
LGUpe3ZhciBuPUR0KHQsZS5pbmRleCk7aWYobi5kaXJ0eSl7dmFyIHIsbz12b2lkIDA7aWYoNjcx
MDg4NjQmZS5mbGFncyl7dmFyIGk9ZS5wYXJlbnQucGFyZW50O289RW4odCxpLmluZGV4LGkuaW5k
ZXgraS5jaGlsZENvdW50LGUucXVlcnksW10pLHI9anQodCxlLnBhcmVudC5pbmRleCkuaW5zdGFu
Y2V9ZWxzZSAxMzQyMTc3MjgmZS5mbGFncyYmKG89RW4odCwwLHQuZGVmLm5vZGVzLmxlbmd0aC0x
LGUucXVlcnksW10pLHI9dC5jb21wb25lbnQpO24ucmVzZXQobyk7Zm9yKHZhciBhPWUucXVlcnku
YmluZGluZ3Mscz0hMSx1PTA7dTxhLmxlbmd0aDt1Kyspe3ZhciBjPWFbdV0sbD12b2lkIDA7c3dp
dGNoKGMuYmluZGluZ1R5cGUpe2Nhc2UgMDpsPW4uZmlyc3Q7YnJlYWs7Y2FzZSAxOmw9bixzPSEw
fXJbYy5wcm9wTmFtZV09bH1zJiZuLm5vdGlmeU9uQ2hhbmdlcygpfX1mdW5jdGlvbiBFbih0LGUs
bixyLG8pe2Zvcih2YXIgaT1lO2k8PW47aSsrKXt2YXIgYT10LmRlZi5ub2Rlc1tpXSxzPWEubWF0
Y2hlZFF1ZXJpZXNbci5pZF07aWYobnVsbCE9cyYmby5wdXNoKE9uKHQsYSxzKSksMSZhLmZsYWdz
JiZhLmVsZW1lbnQudGVtcGxhdGUmJihhLmVsZW1lbnQudGVtcGxhdGUubm9kZU1hdGNoZWRRdWVy
aWVzJnIuZmlsdGVySWQpPT09ci5maWx0ZXJJZCl7dmFyIHU9TXQodCxpKTtpZigxNjc3NzIxNiZh
LmZsYWdzKWZvcih2YXIgYz11LnZpZXdDb250YWluZXIuX2VtYmVkZGVkVmlld3MsbD0wO2w8Yy5s
ZW5ndGg7bCsrKXt2YXIgcD1jW2xdLGY9JHQocCk7ZiYmZj09PXUmJkVuKHAsMCxwLmRlZi5ub2Rl
cy5sZW5ndGgtMSxyLG8pfXZhciBkPXUudGVtcGxhdGUuX3Byb2plY3RlZFZpZXdzO2lmKGQpZm9y
KHZhciBsPTA7bDxkLmxlbmd0aDtsKyspe3ZhciBoPWRbbF07RW4oaCwwLGguZGVmLm5vZGVzLmxl
bmd0aC0xLHIsbyl9fShhLmNoaWxkTWF0Y2hlZFF1ZXJpZXMmci5maWx0ZXJJZCkhPT1yLmZpbHRl
cklkJiYoaSs9YS5jaGlsZENvdW50KX1yZXR1cm4gb31mdW5jdGlvbiBPbih0LGUsbil7aWYobnVs
bCE9bil7dmFyIHI9dm9pZCAwO3N3aXRjaChuKXtjYXNlIDE6cj1NdCh0LGUuaW5kZXgpLnJlbmRl
ckVsZW1lbnQ7YnJlYWs7Y2FzZSAwOnI9bmV3IE5pKE10KHQsZS5pbmRleCkucmVuZGVyRWxlbWVu
dCk7YnJlYWs7Y2FzZSAyOnI9TXQodCxlLmluZGV4KS50ZW1wbGF0ZTticmVhaztjYXNlIDM6cj1N
dCh0LGUuaW5kZXgpLnZpZXdDb250YWluZXI7YnJlYWs7Y2FzZSA0OnI9anQodCxlLmluZGV4KS5p
bnN0YW5jZX1yZXR1cm4gcn19ZnVuY3Rpb24geG4odCxlLG4pe3ZhciByPXNlKHQsZSxuKTtpZihy
KXtmZSh0LG4ubmdDb250ZW50LmluZGV4LDEscixudWxsLHZvaWQgMCl9fWZ1bmN0aW9uIFBuKHQs
ZSl7cmV0dXJue3ZhbHVlOnZvaWQgMH19ZnVuY3Rpb24gU24odCxlLG4scixvLGksYSxzLHUsYyxs
LHApe3ZhciBmPWUuYmluZGluZ3MsZD0hMSxoPWYubGVuZ3RoO2lmKGg+MCYmWXQodCxlLDAsbikm
JihkPSEwKSxoPjEmJll0KHQsZSwxLHIpJiYoZD0hMCksaD4yJiZZdCh0LGUsMixvKSYmKGQ9ITAp
LGg+MyYmWXQodCxlLDMsaSkmJihkPSEwKSxoPjQmJll0KHQsZSw0LGEpJiYoZD0hMCksaD41JiZZ
dCh0LGUsNSxzKSYmKGQ9ITApLGg+NiYmWXQodCxlLDYsdSkmJihkPSEwKSxoPjcmJll0KHQsZSw3
LGMpJiYoZD0hMCksaD44JiZZdCh0LGUsOCxsKSYmKGQ9ITApLGg+OSYmWXQodCxlLDkscCkmJihk
PSEwKSxkKXt2YXIgeT1SdCh0LGUuaW5kZXgpLG09dm9pZCAwO3N3aXRjaCgyMDEzNDcwNjcmZS5m
bGFncyl7Y2FzZSAzMjptPW5ldyBBcnJheShmLmxlbmd0aCksaD4wJiYobVswXT1uKSxoPjEmJiht
WzFdPXIpLGg+MiYmKG1bMl09byksaD4zJiYobVszXT1pKSxoPjQmJihtWzRdPWEpLGg+NSYmKG1b
NV09cyksaD42JiYobVs2XT11KSxoPjcmJihtWzddPWMpLGg+OCYmKG1bOF09bCksaD45JiYobVs5
XT1wKTticmVhaztjYXNlIDY0Om09e30saD4wJiYobVtmWzBdLm5hbWVdPW4pLGg+MSYmKG1bZlsx
XS5uYW1lXT1yKSxoPjImJihtW2ZbMl0ubmFtZV09byksaD4zJiYobVtmWzNdLm5hbWVdPWkpLGg+
NCYmKG1bZls0XS5uYW1lXT1hKSxoPjUmJihtW2ZbNV0ubmFtZV09cyksaD42JiYobVtmWzZdLm5h
bWVdPXUpLGg+NyYmKG1bZls3XS5uYW1lXT1jKSxoPjgmJihtW2ZbOF0ubmFtZV09bCksaD45JiYo
bVtmWzldLm5hbWVdPXApO2JyZWFrO2Nhc2UgMTI4OnZhciBnPW47c3dpdGNoKGgpe2Nhc2UgMTpt
PWcudHJhbnNmb3JtKG4pO2JyZWFrO2Nhc2UgMjptPWcudHJhbnNmb3JtKHIpO2JyZWFrO2Nhc2Ug
MzptPWcudHJhbnNmb3JtKHIsbyk7YnJlYWs7Y2FzZSA0Om09Zy50cmFuc2Zvcm0ocixvLGkpO2Jy
ZWFrO2Nhc2UgNTptPWcudHJhbnNmb3JtKHIsbyxpLGEpO2JyZWFrO2Nhc2UgNjptPWcudHJhbnNm
b3JtKHIsbyxpLGEscyk7YnJlYWs7Y2FzZSA3Om09Zy50cmFuc2Zvcm0ocixvLGksYSxzLHUpO2Jy
ZWFrO2Nhc2UgODptPWcudHJhbnNmb3JtKHIsbyxpLGEscyx1LGMpO2JyZWFrO2Nhc2UgOTptPWcu
dHJhbnNmb3JtKHIsbyxpLGEscyx1LGMsbCk7YnJlYWs7Y2FzZSAxMDptPWcudHJhbnNmb3JtKHIs
byxpLGEscyx1LGMsbCxwKX19eS52YWx1ZT1tfXJldHVybiBkfWZ1bmN0aW9uIEFuKHQsZSxuKXtm
b3IodmFyIHI9ZS5iaW5kaW5ncyxvPSExLGk9MDtpPG4ubGVuZ3RoO2krKylZdCh0LGUsaSxuW2ld
KSYmKG89ITApO2lmKG8pe3ZhciBhPVJ0KHQsZS5pbmRleCkscz12b2lkIDA7c3dpdGNoKDIwMTM0
NzA2NyZlLmZsYWdzKXtjYXNlIDMyOnM9bjticmVhaztjYXNlIDY0OnM9e307Zm9yKHZhciBpPTA7
aTxuLmxlbmd0aDtpKyspc1tyW2ldLm5hbWVdPW5baV07YnJlYWs7Y2FzZSAxMjg6dmFyIHU9blsw
XSxjPW4uc2xpY2UoMSk7cz11LnRyYW5zZm9ybS5hcHBseSh1LGMpfWEudmFsdWU9c31yZXR1cm4g
b30vKioKKyAqIEBsaWNlbnNlCisgKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqCisgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
biBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorICogZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQorICovCitmdW5jdGlvbiBUbih0LGUp
e2Zvcih2YXIgbj1uZXcgQXJyYXkoZS5sZW5ndGgtMSkscj0xO3I8ZS5sZW5ndGg7cisrKW5bci0x
XT17ZmxhZ3M6OCxuYW1lOm51bGwsbnM6bnVsbCxub25NaW5pZmllZE5hbWU6bnVsbCxzZWN1cml0
eUNvbnRleHQ6bnVsbCxzdWZmaXg6ZVtyXX07cmV0dXJue2luZGV4Oi0xLHBhcmVudDpudWxsLHJl
bmRlclBhcmVudDpudWxsLGJpbmRpbmdJbmRleDotMSxvdXRwdXRJbmRleDotMSxmbGFnczoyLGNo
aWxkRmxhZ3M6MCxkaXJlY3RDaGlsZEZsYWdzOjAsY2hpbGRNYXRjaGVkUXVlcmllczowLG1hdGNo
ZWRRdWVyaWVzOnt9LG1hdGNoZWRRdWVyeUlkczowLHJlZmVyZW5jZXM6e30sbmdDb250ZW50SW5k
ZXg6dCxjaGlsZENvdW50OjAsYmluZGluZ3M6bixiaW5kaW5nRmxhZ3M6bWUobiksb3V0cHV0czpb
XSxlbGVtZW50Om51bGwscHJvdmlkZXI6bnVsbCx0ZXh0OntwcmVmaXg6ZVswXX0scXVlcnk6bnVs
bCxuZ0NvbnRlbnQ6bnVsbH19ZnVuY3Rpb24ga24odCxlLG4pe3ZhciByLG89dC5yZW5kZXJlcjty
PW8uY3JlYXRlVGV4dChuLnRleHQucHJlZml4KTt2YXIgaT1zZSh0LGUsbik7cmV0dXJuIGkmJm8u
YXBwZW5kQ2hpbGQoaSxyKSx7cmVuZGVyVGV4dDpyfX1mdW5jdGlvbiBWbih0LGUsbixyLG8saSxh
LHMsdSxjLGwscCl7dmFyIGY9ITEsZD1lLmJpbmRpbmdzLGg9ZC5sZW5ndGg7aWYoaD4wJiZZdCh0
LGUsMCxuKSYmKGY9ITApLGg+MSYmWXQodCxlLDEscikmJihmPSEwKSxoPjImJll0KHQsZSwyLG8p
JiYoZj0hMCksaD4zJiZZdCh0LGUsMyxpKSYmKGY9ITApLGg+NCYmWXQodCxlLDQsYSkmJihmPSEw
KSxoPjUmJll0KHQsZSw1LHMpJiYoZj0hMCksaD42JiZZdCh0LGUsNix1KSYmKGY9ITApLGg+NyYm
WXQodCxlLDcsYykmJihmPSEwKSxoPjgmJll0KHQsZSw4LGwpJiYoZj0hMCksaD45JiZZdCh0LGUs
OSxwKSYmKGY9ITApLGYpe3ZhciB5PWUudGV4dC5wcmVmaXg7aD4wJiYoeSs9TW4obixkWzBdKSks
aD4xJiYoeSs9TW4ocixkWzFdKSksaD4yJiYoeSs9TW4obyxkWzJdKSksaD4zJiYoeSs9TW4oaSxk
WzNdKSksaD40JiYoeSs9TW4oYSxkWzRdKSksaD41JiYoeSs9TW4ocyxkWzVdKSksaD42JiYoeSs9
TW4odSxkWzZdKSksaD43JiYoeSs9TW4oYyxkWzddKSksaD44JiYoeSs9TW4obCxkWzhdKSksaD45
JiYoeSs9TW4ocCxkWzldKSk7dmFyIG09TnQodCxlLmluZGV4KS5yZW5kZXJUZXh0O3QucmVuZGVy
ZXIuc2V0VmFsdWUobSx5KX1yZXR1cm4gZn1mdW5jdGlvbiBObih0LGUsbil7Zm9yKHZhciByPWUu
YmluZGluZ3Msbz0hMSxpPTA7aTxuLmxlbmd0aDtpKyspWXQodCxlLGksbltpXSkmJihvPSEwKTtp
ZihvKXtmb3IodmFyIGE9IiIsaT0wO2k8bi5sZW5ndGg7aSsrKWErPU1uKG5baV0scltpXSk7YT1l
LnRleHQucHJlZml4K2E7dmFyIHM9TnQodCxlLmluZGV4KS5yZW5kZXJUZXh0O3QucmVuZGVyZXIu
c2V0VmFsdWUocyxhKX1yZXR1cm4gb31mdW5jdGlvbiBNbih0LGUpe3JldHVybihudWxsIT10P3Qu
dG9TdHJpbmcoKToiIikrZS5zdWZmaXh9LyoqCisgKiBAbGljZW5zZQorICogQ29weXJpZ2h0IEdv
b2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyAq
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UK
KyAqLworZnVuY3Rpb24gam4odCxlLG4scil7Zm9yKHZhciBvPTAsaT0wLGE9MCxzPTAsdT0wLGM9
bnVsbCxsPSExLHA9ITEsZj1udWxsLGQ9MDtkPGUubGVuZ3RoO2QrKyl7Zm9yKDtjJiZkPmMuaW5k
ZXgrYy5jaGlsZENvdW50Oyl7dmFyIGg9Yy5wYXJlbnQ7aCYmKGguY2hpbGRGbGFnc3w9Yy5jaGls
ZEZsYWdzLGguY2hpbGRNYXRjaGVkUXVlcmllc3w9Yy5jaGlsZE1hdGNoZWRRdWVyaWVzKSxjPWh9
dmFyIHk9ZVtkXTt5LmluZGV4PWQseS5wYXJlbnQ9Yyx5LmJpbmRpbmdJbmRleD1vLHkub3V0cHV0
SW5kZXg9aTt2YXIgbT12b2lkIDA7aWYobT1jJiYxJmMuZmxhZ3MmJiFjLmVsZW1lbnQubmFtZT9j
LnJlbmRlclBhcmVudDpjLHkucmVuZGVyUGFyZW50PW0seS5lbGVtZW50KXt2YXIgZz15LmVsZW1l
bnQ7Zy5wdWJsaWNQcm92aWRlcnM9Yz9jLmVsZW1lbnQucHVibGljUHJvdmlkZXJzOk9iamVjdC5j
cmVhdGUobnVsbCksZy5hbGxQcm92aWRlcnM9Zy5wdWJsaWNQcm92aWRlcnMsbD0hMSxwPSExfWlm
KFJuKGMseSxlLmxlbmd0aCksYXw9eS5mbGFncyx1fD15Lm1hdGNoZWRRdWVyeUlkcyx5LmVsZW1l
bnQmJnkuZWxlbWVudC50ZW1wbGF0ZSYmKHV8PXkuZWxlbWVudC50ZW1wbGF0ZS5ub2RlTWF0Y2hl
ZFF1ZXJpZXMpLGM/KGMuY2hpbGRGbGFnc3w9eS5mbGFncyxjLmRpcmVjdENoaWxkRmxhZ3N8PXku
ZmxhZ3MsYy5jaGlsZE1hdGNoZWRRdWVyaWVzfD15Lm1hdGNoZWRRdWVyeUlkcyx5LmVsZW1lbnQm
JnkuZWxlbWVudC50ZW1wbGF0ZSYmKGMuY2hpbGRNYXRjaGVkUXVlcmllc3w9eS5lbGVtZW50LnRl
bXBsYXRlLm5vZGVNYXRjaGVkUXVlcmllcykpOnN8PXkuZmxhZ3Msbys9eS5iaW5kaW5ncy5sZW5n
dGgsaSs9eS5vdXRwdXRzLmxlbmd0aCwhbSYmMyZ5LmZsYWdzJiYoZj15KSwyMDIyNCZ5LmZsYWdz
KXtsfHwobD0hMCxjLmVsZW1lbnQucHVibGljUHJvdmlkZXJzPU9iamVjdC5jcmVhdGUoYy5lbGVt
ZW50LnB1YmxpY1Byb3ZpZGVycyksYy5lbGVtZW50LmFsbFByb3ZpZGVycz1jLmVsZW1lbnQucHVi
bGljUHJvdmlkZXJzKTt2YXIgdj0wIT0oODE5MiZ5LmZsYWdzKSxfPTAhPSgzMjc2OCZ5LmZsYWdz
KTshdnx8Xz9jLmVsZW1lbnQucHVibGljUHJvdmlkZXJzW0d0KHkucHJvdmlkZXIudG9rZW4pXT15
OihwfHwocD0hMCxjLmVsZW1lbnQuYWxsUHJvdmlkZXJzPU9iamVjdC5jcmVhdGUoYy5lbGVtZW50
LnB1YmxpY1Byb3ZpZGVycykpLGMuZWxlbWVudC5hbGxQcm92aWRlcnNbR3QoeS5wcm92aWRlci50
b2tlbildPXkpLF8mJihjLmVsZW1lbnQuY29tcG9uZW50UHJvdmlkZXI9eSl9eS5jaGlsZENvdW50
JiYoYz15KX1mb3IoO2M7KXt2YXIgaD1jLnBhcmVudDtoJiYoaC5jaGlsZEZsYWdzfD1jLmNoaWxk
RmxhZ3MsaC5jaGlsZE1hdGNoZWRRdWVyaWVzfD1jLmNoaWxkTWF0Y2hlZFF1ZXJpZXMpLGM9aH12
YXIgYj1mdW5jdGlvbih0LG4scixvKXtyZXR1cm4gZVtuXS5lbGVtZW50LmhhbmRsZUV2ZW50KHQs
cixvKX07cmV0dXJue2ZhY3Rvcnk6bnVsbCxub2RlRmxhZ3M6YSxyb290Tm9kZUZsYWdzOnMsbm9k
ZU1hdGNoZWRRdWVyaWVzOnUsZmxhZ3M6dCxub2RlczplLHVwZGF0ZURpcmVjdGl2ZXM6bnx8dmEs
dXBkYXRlUmVuZGVyZXI6cnx8dmEsaGFuZGxlRXZlbnQ6Ynx8dmEsYmluZGluZ0NvdW50Om8sb3V0
cHV0Q291bnQ6aSxsYXN0UmVuZGVyUm9vdE5vZGU6Zn19ZnVuY3Rpb24gUm4odCxlLG4pe3ZhciBy
PWUuZWxlbWVudCYmZS5lbGVtZW50LnRlbXBsYXRlO2lmKHIpe2lmKCFyLmxhc3RSZW5kZXJSb290
Tm9kZSl0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgU3RhdGU6IEVtYmVkZGVkIHRlbXBsYXRlcyB3
aXRob3V0IG5vZGVzIGFyZSBub3QgYWxsb3dlZCEiKTtpZihyLmxhc3RSZW5kZXJSb290Tm9kZSYm
MTY3NzcyMTYmci5sYXN0UmVuZGVyUm9vdE5vZGUuZmxhZ3MpdGhyb3cgbmV3IEVycm9yKCJJbGxl
Z2FsIFN0YXRlOiBMYXN0IHJvb3Qgbm9kZSBvZiBhIHRlbXBsYXRlIGNhbid0IGhhdmUgZW1iZWRk
ZWQgdmlld3MsIGF0IGluZGV4ICIrZS5pbmRleCsiISIpfWlmKDIwMjI0JmUuZmxhZ3Mpe2lmKDA9
PSgxJih0P3QuZmxhZ3M6MCkpKXRocm93IG5ldyBFcnJvcigiSWxsZWdhbCBTdGF0ZTogUHJvdmlk
ZXIvRGlyZWN0aXZlIG5vZGVzIG5lZWQgdG8gYmUgY2hpbGRyZW4gb2YgZWxlbWVudHMgb3IgYW5j
aG9ycywgYXQgaW5kZXggIitlLmluZGV4KyIhIil9aWYoZS5xdWVyeSl7aWYoNjcxMDg4NjQmZS5m
bGFncyYmKCF0fHwwPT0oMTYzODQmdC5mbGFncykpKXRocm93IG5ldyBFcnJvcigiSWxsZWdhbCBT
dGF0ZTogQ29udGVudCBRdWVyeSBub2RlcyBuZWVkIHRvIGJlIGNoaWxkcmVuIG9mIGRpcmVjdGl2
ZXMsIGF0IGluZGV4ICIrZS5pbmRleCsiISIpO2lmKDEzNDIxNzcyOCZlLmZsYWdzJiZ0KXRocm93
IG5ldyBFcnJvcigiSWxsZWdhbCBTdGF0ZTogVmlldyBRdWVyeSBub2RlcyBoYXZlIHRvIGJlIHRv
cCBsZXZlbCBub2RlcywgYXQgaW5kZXggIitlLmluZGV4KyIhIil9aWYoZS5jaGlsZENvdW50KXt2
YXIgbz10P3QuaW5kZXgrdC5jaGlsZENvdW50Om4tMTtpZihlLmluZGV4PD1vJiZlLmluZGV4K2Uu
Y2hpbGRDb3VudD5vKXRocm93IG5ldyBFcnJvcigiSWxsZWdhbCBTdGF0ZTogY2hpbGRDb3VudCBv
ZiBub2RlIGxlYWRzIG91dHNpZGUgb2YgcGFyZW50LCBhdCBpbmRleCAiK2UuaW5kZXgrIiEiKX19
ZnVuY3Rpb24gRG4odCxlLG4scil7dmFyIG89SG4odC5yb290LHQucmVuZGVyZXIsdCxlLG4pO3Jl
dHVybiBMbihvLHQuY29tcG9uZW50LHIpLEJuKG8pLG99ZnVuY3Rpb24gSW4odCxlLG4pe3ZhciBy
PUhuKHQsdC5yZW5kZXJlcixudWxsLG51bGwsZSk7cmV0dXJuIExuKHIsbixuKSxCbihyKSxyfWZ1
bmN0aW9uIEZuKHQsZSxuLHIpe3ZhciBvLGk9ZS5lbGVtZW50LmNvbXBvbmVudFJlbmRlcmVyVHlw
ZTtyZXR1cm4gbz1pP3Qucm9vdC5yZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIocixpKTp0
LnJvb3QucmVuZGVyZXIsSG4odC5yb290LG8sdCxlLmVsZW1lbnQuY29tcG9uZW50UHJvdmlkZXIs
bil9ZnVuY3Rpb24gSG4odCxlLG4scixvKXt2YXIgaT1uZXcgQXJyYXkoby5ub2Rlcy5sZW5ndGgp
LGE9by5vdXRwdXRDb3VudD9uZXcgQXJyYXkoby5vdXRwdXRDb3VudCk6bnVsbDtyZXR1cm57ZGVm
Om8scGFyZW50Om4sdmlld0NvbnRhaW5lclBhcmVudDpudWxsLHBhcmVudE5vZGVEZWY6cixjb250
ZXh0Om51bGwsY29tcG9uZW50Om51bGwsbm9kZXM6aSxzdGF0ZToxMyxyb290OnQscmVuZGVyZXI6
ZSxvbGRWYWx1ZXM6bmV3IEFycmF5KG8uYmluZGluZ0NvdW50KSxkaXNwb3NhYmxlczphfX1mdW5j
dGlvbiBMbih0LGUsbil7dC5jb21wb25lbnQ9ZSx0LmNvbnRleHQ9bn1mdW5jdGlvbiBCbih0KXt2
YXIgZTtpZihuZSh0KSl7dmFyIG49dC5wYXJlbnROb2RlRGVmO2U9TXQodC5wYXJlbnQsbi5wYXJl
bnQuaW5kZXgpLnJlbmRlckVsZW1lbnR9Zm9yKHZhciByPXQuZGVmLG89dC5ub2RlcyxpPTA7aTxy
Lm5vZGVzLmxlbmd0aDtpKyspe3ZhciBhPXIubm9kZXNbaV07Z2Euc2V0Q3VycmVudE5vZGUodCxp
KTt2YXIgcz12b2lkIDA7c3dpdGNoKDIwMTM0NzA2NyZhLmZsYWdzKXtjYXNlIDE6dmFyIHU9X2Uo
dCxlLGEpLGM9dm9pZCAwO2lmKDMzNTU0NDMyJmEuZmxhZ3Mpe3ZhciBsPXVlKGEuZWxlbWVudC5j
b21wb25lbnRWaWV3KTtjPWdhLmNyZWF0ZUNvbXBvbmVudFZpZXcodCxhLGwsdSl9YmUodCxjLGEs
dSkscz17cmVuZGVyRWxlbWVudDp1LGNvbXBvbmVudFZpZXc6Yyx2aWV3Q29udGFpbmVyOm51bGws
dGVtcGxhdGU6YS5lbGVtZW50LnRlbXBsYXRlP1FlKHQsYSk6dm9pZCAwfSwxNjc3NzIxNiZhLmZs
YWdzJiYocy52aWV3Q29udGFpbmVyPUtlKHQsYSxzKSk7YnJlYWs7Y2FzZSAyOnM9a24odCxlLGEp
O2JyZWFrO2Nhc2UgNTEyOmNhc2UgMTAyNDpjYXNlIDIwNDg6Y2FzZSAyNTY6dmFyIHA9b24odCxh
KTtzPXtpbnN0YW5jZTpwfTticmVhaztjYXNlIDE2OnZhciBwPWFuKHQsYSk7cz17aW5zdGFuY2U6
cH07YnJlYWs7Y2FzZSAxNjM4NDp2YXIgcD1zbih0LGEpO2lmKHM9e2luc3RhbmNlOnB9LDMyNzY4
JmEuZmxhZ3Mpe0xuKE10KHQsYS5wYXJlbnQuaW5kZXgpLmNvbXBvbmVudFZpZXcscCxwKX1icmVh
aztjYXNlIDMyOmNhc2UgNjQ6Y2FzZSAxMjg6cz1Qbih0LGEpO2JyZWFrO2Nhc2UgNjcxMDg4NjQ6
Y2FzZSAxMzQyMTc3Mjg6cz1ibigpO2JyZWFrO2Nhc2UgODp4bih0LGUsYSkscz12b2lkIDB9b1tp
XT1zfXRyKHQsWmEuQ3JlYXRlVmlld05vZGVzKSxvcih0LDIwMTMyNjU5MiwyNjg0MzU0NTYsMCl9
ZnVuY3Rpb24gVW4odCl7em4odCksZ2EudXBkYXRlRGlyZWN0aXZlcyh0LDEpLGVyKHQsWmEuQ2hl
Y2tOb0NoYW5nZXMpLGdhLnVwZGF0ZVJlbmRlcmVyKHQsMSksdHIodCxaYS5DaGVja05vQ2hhbmdl
cyksdC5zdGF0ZSY9LTk3fWZ1bmN0aW9uIEduKHQpezEmdC5zdGF0ZT8odC5zdGF0ZSY9LTIsdC5z
dGF0ZXw9Mik6dC5zdGF0ZSY9LTMsem4odCksZ2EudXBkYXRlRGlyZWN0aXZlcyh0LDApLGVyKHQs
WmEuQ2hlY2tBbmRVcGRhdGUpLG9yKHQsNjcxMDg4NjQsNTM2ODcwOTEyLDApLGduKHQsMjA5NzE1
MnwoMiZ0LnN0YXRlPzEwNDg1NzY6MCkpLGdhLnVwZGF0ZVJlbmRlcmVyKHQsMCksdHIodCxaYS5D
aGVja0FuZFVwZGF0ZSksb3IodCwxMzQyMTc3MjgsNTM2ODcwOTEyLDApLGduKHQsODM4ODYwOHwo
MiZ0LnN0YXRlPzQxOTQzMDQ6MCkpLDImdC5kZWYuZmxhZ3MmJih0LnN0YXRlJj0tOSksdC5zdGF0
ZSY9LTk3fWZ1bmN0aW9uIHFuKHQsZSxuLHIsbyxpLGEscyx1LGMsbCxwLGYpe3JldHVybiAwPT09
bj9abih0LGUscixvLGksYSxzLHUsYyxsLHAsZik6WW4odCxlLHIpfWZ1bmN0aW9uIHpuKHQpe3Zh
ciBlPXQuZGVmO2lmKDQmZS5ub2RlRmxhZ3MpZm9yKHZhciBuPTA7bjxlLm5vZGVzLmxlbmd0aDtu
Kyspe3ZhciByPWUubm9kZXNbbl07aWYoNCZyLmZsYWdzKXt2YXIgbz1NdCh0LG4pLnRlbXBsYXRl
Ll9wcm9qZWN0ZWRWaWV3cztpZihvKWZvcih2YXIgaT0wO2k8by5sZW5ndGg7aSsrKXt2YXIgYT1v
W2ldO2Euc3RhdGV8PTMyLFF0KGEsdCl9fWVsc2UgMD09KDQmci5jaGlsZEZsYWdzKSYmKG4rPXIu
Y2hpbGRDb3VudCl9fWZ1bmN0aW9uIFpuKHQsZSxuLHIsbyxpLGEscyx1LGMsbCxwKXt2YXIgZj0h
MTtzd2l0Y2goMjAxMzQ3MDY3JmUuZmxhZ3Mpe2Nhc2UgMTpmPUNlKHQsZSxuLHIsbyxpLGEscyx1
LGMsbCxwKTticmVhaztjYXNlIDI6Zj1Wbih0LGUsbixyLG8saSxhLHMsdSxjLGwscCk7YnJlYWs7
Y2FzZSAxNjM4NDpmPWNuKHQsZSxuLHIsbyxpLGEscyx1LGMsbCxwKTticmVhaztjYXNlIDMyOmNh
c2UgNjQ6Y2FzZSAxMjg6Zj1Tbih0LGUsbixyLG8saSxhLHMsdSxjLGwscCl9cmV0dXJuIGZ9ZnVu
Y3Rpb24gWW4odCxlLG4pe3ZhciByPSExO3N3aXRjaCgyMDEzNDcwNjcmZS5mbGFncyl7Y2FzZSAx
OnI9RWUodCxlLG4pO2JyZWFrO2Nhc2UgMjpyPU5uKHQsZSxuKTticmVhaztjYXNlIDE2Mzg0OnI9
bG4odCxlLG4pO2JyZWFrO2Nhc2UgMzI6Y2FzZSA2NDpjYXNlIDEyODpyPUFuKHQsZSxuKX1pZihy
KWZvcih2YXIgbz1lLmJpbmRpbmdzLmxlbmd0aCxpPWUuYmluZGluZ0luZGV4LGE9dC5vbGRWYWx1
ZXMscz0wO3M8bztzKyspYVtpK3NdPW5bc107cmV0dXJuIHJ9ZnVuY3Rpb24gS24odCxlLG4scixv
LGksYSxzLHUsYyxsLHAsZil7cmV0dXJuIDA9PT1uP1duKHQsZSxyLG8saSxhLHMsdSxjLGwscCxm
KTpRbih0LGUsciksITF9ZnVuY3Rpb24gV24odCxlLG4scixvLGksYSxzLHUsYyxsLHApe3ZhciBm
PWUuYmluZGluZ3MubGVuZ3RoO2Y+MCYmS3QodCxlLDAsbiksZj4xJiZLdCh0LGUsMSxyKSxmPjIm
Jkt0KHQsZSwyLG8pLGY+MyYmS3QodCxlLDMsaSksZj40JiZLdCh0LGUsNCxhKSxmPjUmJkt0KHQs
ZSw1LHMpLGY+NiYmS3QodCxlLDYsdSksZj43JiZLdCh0LGUsNyxjKSxmPjgmJkt0KHQsZSw4LGwp
LGY+OSYmS3QodCxlLDkscCl9ZnVuY3Rpb24gUW4odCxlLG4pe2Zvcih2YXIgcj0wO3I8bi5sZW5n
dGg7cisrKUt0KHQsZSxyLG5bcl0pfWZ1bmN0aW9uIEpuKHQsZSl7aWYoRHQodCxlLmluZGV4KS5k
aXJ0eSl0aHJvdyBJdChnYS5jcmVhdGVEZWJ1Z0NvbnRleHQodCxlLmluZGV4KSwiUXVlcnkgIitl
LnF1ZXJ5LmlkKyIgbm90IGRpcnR5IiwiUXVlcnkgIitlLnF1ZXJ5LmlkKyIgZGlydHkiLDAhPSgx
JnQuc3RhdGUpKX1mdW5jdGlvbiAkbih0KXtpZighKDEyOCZ0LnN0YXRlKSl7aWYoZXIodCxaYS5E
ZXN0cm95KSx0cih0LFphLkRlc3Ryb3kpLGduKHQsMTMxMDcyKSx0LmRpc3Bvc2FibGVzKWZvcih2
YXIgZT0wO2U8dC5kaXNwb3NhYmxlcy5sZW5ndGg7ZSsrKXQuZGlzcG9zYWJsZXNbZV0oKTtCZSh0
KSx0LnJlbmRlcmVyLmRlc3Ryb3lOb2RlJiZYbih0KSxuZSh0KSYmdC5yZW5kZXJlci5kZXN0cm95
KCksdC5zdGF0ZXw9MTI4fX1mdW5jdGlvbiBYbih0KXtmb3IodmFyIGU9dC5kZWYubm9kZXMubGVu
Z3RoLG49MDtuPGU7bisrKXt2YXIgcj10LmRlZi5ub2Rlc1tuXTsxJnIuZmxhZ3M/dC5yZW5kZXJl
ci5kZXN0cm95Tm9kZShNdCh0LG4pLnJlbmRlckVsZW1lbnQpOjImci5mbGFncyYmdC5yZW5kZXJl
ci5kZXN0cm95Tm9kZShOdCh0LG4pLnJlbmRlclRleHQpfX1mdW5jdGlvbiB0cih0LGUpe3ZhciBu
PXQuZGVmO2lmKDMzNTU0NDMyJm4ubm9kZUZsYWdzKWZvcih2YXIgcj0wO3I8bi5ub2Rlcy5sZW5n
dGg7cisrKXt2YXIgbz1uLm5vZGVzW3JdOzMzNTU0NDMyJm8uZmxhZ3M/bnIoTXQodCxyKS5jb21w
b25lbnRWaWV3LGUpOjA9PSgzMzU1NDQzMiZvLmNoaWxkRmxhZ3MpJiYocis9by5jaGlsZENvdW50
KX19ZnVuY3Rpb24gZXIodCxlKXt2YXIgbj10LmRlZjtpZigxNjc3NzIxNiZuLm5vZGVGbGFncylm
b3IodmFyIHI9MDtyPG4ubm9kZXMubGVuZ3RoO3IrKyl7dmFyIG89bi5ub2Rlc1tyXTtpZigxNjc3
NzIxNiZvLmZsYWdzKWZvcih2YXIgaT1NdCh0LHIpLnZpZXdDb250YWluZXIuX2VtYmVkZGVkVmll
d3MsYT0wO2E8aS5sZW5ndGg7YSsrKW5yKGlbYV0sZSk7ZWxzZSAwPT0oMTY3NzcyMTYmby5jaGls
ZEZsYWdzKSYmKHIrPW8uY2hpbGRDb3VudCl9fWZ1bmN0aW9uIG5yKHQsZSl7dmFyIG49dC5zdGF0
ZTtzd2l0Y2goZSl7Y2FzZSBaYS5DaGVja05vQ2hhbmdlczowPT0oMTI4Jm4pJiYoMTI9PSgxMiZu
KT9Vbih0KTo2NCZuJiZycih0LFphLkNoZWNrTm9DaGFuZ2VzUHJvamVjdGVkVmlld3MpKTticmVh
aztjYXNlIFphLkNoZWNrTm9DaGFuZ2VzUHJvamVjdGVkVmlld3M6MD09KDEyOCZuKSYmKDMyJm4/
VW4odCk6NjQmbiYmcnIodCxlKSk7YnJlYWs7Y2FzZSBaYS5DaGVja0FuZFVwZGF0ZTowPT0oMTI4
Jm4pJiYoMTI9PSgxMiZuKT9Hbih0KTo2NCZuJiZycih0LFphLkNoZWNrQW5kVXBkYXRlUHJvamVj
dGVkVmlld3MpKTticmVhaztjYXNlIFphLkNoZWNrQW5kVXBkYXRlUHJvamVjdGVkVmlld3M6MD09
KDEyOCZuKSYmKDMyJm4/R24odCk6NjQmbiYmcnIodCxlKSk7YnJlYWs7Y2FzZSBaYS5EZXN0cm95
OiRuKHQpO2JyZWFrO2Nhc2UgWmEuQ3JlYXRlVmlld05vZGVzOkJuKHQpfX1mdW5jdGlvbiBycih0
LGUpe2VyKHQsZSksdHIodCxlKX1mdW5jdGlvbiBvcih0LGUsbixyKXtpZih0LmRlZi5ub2RlRmxh
Z3MmZSYmdC5kZWYubm9kZUZsYWdzJm4pZm9yKHZhciBvPXQuZGVmLm5vZGVzLmxlbmd0aCxpPTA7
aTxvO2krKyl7dmFyIGE9dC5kZWYubm9kZXNbaV07aWYoYS5mbGFncyZlJiZhLmZsYWdzJm4pc3dp
dGNoKGdhLnNldEN1cnJlbnROb2RlKHQsYS5pbmRleCkscil7Y2FzZSAwOkNuKHQsYSk7YnJlYWs7
Y2FzZSAxOkpuKHQsYSl9YS5jaGlsZEZsYWdzJmUmJmEuY2hpbGRGbGFncyZufHwoaSs9YS5jaGls
ZENvdW50KX19ZnVuY3Rpb24gaXIoKXtpZighWWEpe1lhPSEwO3ZhciB0PXN0KCk/c3IoKTphcigp
O2dhLnNldEN1cnJlbnROb2RlPXQuc2V0Q3VycmVudE5vZGUsZ2EuY3JlYXRlUm9vdFZpZXc9dC5j
cmVhdGVSb290VmlldyxnYS5jcmVhdGVFbWJlZGRlZFZpZXc9dC5jcmVhdGVFbWJlZGRlZFZpZXcs
Z2EuY3JlYXRlQ29tcG9uZW50Vmlldz10LmNyZWF0ZUNvbXBvbmVudFZpZXcsZ2EuY3JlYXRlTmdN
b2R1bGVSZWY9dC5jcmVhdGVOZ01vZHVsZVJlZixnYS5vdmVycmlkZVByb3ZpZGVyPXQub3ZlcnJp
ZGVQcm92aWRlcixnYS5jbGVhclByb3ZpZGVyT3ZlcnJpZGVzPXQuY2xlYXJQcm92aWRlck92ZXJy
aWRlcyxnYS5jaGVja0FuZFVwZGF0ZVZpZXc9dC5jaGVja0FuZFVwZGF0ZVZpZXcsZ2EuY2hlY2tO
b0NoYW5nZXNWaWV3PXQuY2hlY2tOb0NoYW5nZXNWaWV3LGdhLmRlc3Ryb3lWaWV3PXQuZGVzdHJv
eVZpZXcsZ2EucmVzb2x2ZURlcD1obixnYS5jcmVhdGVEZWJ1Z0NvbnRleHQ9dC5jcmVhdGVEZWJ1
Z0NvbnRleHQsZ2EuaGFuZGxlRXZlbnQ9dC5oYW5kbGVFdmVudCxnYS51cGRhdGVEaXJlY3RpdmVz
PXQudXBkYXRlRGlyZWN0aXZlcyxnYS51cGRhdGVSZW5kZXJlcj10LnVwZGF0ZVJlbmRlcmVyLGdh
LmRpcnR5UGFyZW50UXVlcmllcz13bn19ZnVuY3Rpb24gYXIoKXtyZXR1cm57c2V0Q3VycmVudE5v
ZGU6ZnVuY3Rpb24oKXt9LGNyZWF0ZVJvb3RWaWV3OnVyLGNyZWF0ZUVtYmVkZGVkVmlldzpEbixj
cmVhdGVDb21wb25lbnRWaWV3OkZuLGNyZWF0ZU5nTW9kdWxlUmVmOnRuLG92ZXJyaWRlUHJvdmlk
ZXI6dmEsY2xlYXJQcm92aWRlck92ZXJyaWRlczp2YSxjaGVja0FuZFVwZGF0ZVZpZXc6R24sY2hl
Y2tOb0NoYW5nZXNWaWV3OlVuLGRlc3Ryb3lWaWV3OiRuLGNyZWF0ZURlYnVnQ29udGV4dDpmdW5j
dGlvbih0LGUpe3JldHVybiBuZXcgdHModCxlKX0saGFuZGxlRXZlbnQ6ZnVuY3Rpb24odCxlLG4s
cil7cmV0dXJuIHQuZGVmLmhhbmRsZUV2ZW50KHQsZSxuLHIpfSx1cGRhdGVEaXJlY3RpdmVzOmZ1
bmN0aW9uKHQsZSl7cmV0dXJuIHQuZGVmLnVwZGF0ZURpcmVjdGl2ZXMoMD09PWU/dnI6X3IsdCl9
LHVwZGF0ZVJlbmRlcmVyOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZGVmLnVwZGF0ZVJlbmRlcmVy
KDA9PT1lP3ZyOl9yLHQpfX19ZnVuY3Rpb24gc3IoKXtyZXR1cm57c2V0Q3VycmVudE5vZGU6RXIs
Y3JlYXRlUm9vdFZpZXc6Y3IsY3JlYXRlRW1iZWRkZWRWaWV3OnByLGNyZWF0ZUNvbXBvbmVudFZp
ZXc6ZnIsY3JlYXRlTmdNb2R1bGVSZWY6ZHIsb3ZlcnJpZGVQcm92aWRlcjpocixjbGVhclByb3Zp
ZGVyT3ZlcnJpZGVzOnlyLGNoZWNrQW5kVXBkYXRlVmlldzpicixjaGVja05vQ2hhbmdlc1ZpZXc6
d3IsZGVzdHJveVZpZXc6Q3IsY3JlYXRlRGVidWdDb250ZXh0OmZ1bmN0aW9uKHQsZSl7cmV0dXJu
IG5ldyB0cyh0LGUpfSxoYW5kbGVFdmVudDpPcix1cGRhdGVEaXJlY3RpdmVzOnhyLHVwZGF0ZVJl
bmRlcmVyOlByfX1mdW5jdGlvbiB1cih0LGUsbixyLG8saSl7cmV0dXJuIEluKGxyKHQsbyxvLmlu
amVjdG9yLmdldChUaSksZSxuKSxyLGkpfWZ1bmN0aW9uIGNyKHQsZSxuLHIsbyxpKXt2YXIgYT1v
LmluamVjdG9yLmdldChUaSkscz1scih0LG8sbmV3IGVzKGEpLGUsbiksdT1tcihyKTtyZXR1cm4g
SXIoV2EuY3JlYXRlLEluLG51bGwsW3MsdSxpXSl9ZnVuY3Rpb24gbHIodCxlLG4scixvKXt2YXIg
aT1lLmluamVjdG9yLmdldChtYSksYT1lLmluamVjdG9yLmdldChQbyk7cmV0dXJue25nTW9kdWxl
OmUsaW5qZWN0b3I6dCxwcm9qZWN0YWJsZU5vZGVzOnIsc2VsZWN0b3JPck5vZGU6byxzYW5pdGl6
ZXI6aSxyZW5kZXJlckZhY3Rvcnk6bixyZW5kZXJlcjpuLmNyZWF0ZVJlbmRlcmVyKG51bGwsbnVs
bCksZXJyb3JIYW5kbGVyOmF9fWZ1bmN0aW9uIHByKHQsZSxuLHIpe3ZhciBvPW1yKG4pO3JldHVy
biBJcihXYS5jcmVhdGUsRG4sbnVsbCxbdCxlLG8scl0pfWZ1bmN0aW9uIGZyKHQsZSxuLHIpe3Zh
ciBvPW1yKG4pO3JldHVybiBJcihXYS5jcmVhdGUsRm4sbnVsbCxbdCxlLG8scl0pfWZ1bmN0aW9u
IGRyKHQsZSxuLHIpe3JldHVybiB0bih0LGUsbixncihyKSl9ZnVuY3Rpb24gaHIodCl7S2Euc2V0
KHQudG9rZW4sdCl9ZnVuY3Rpb24geXIoKXtLYS5jbGVhcigpfWZ1bmN0aW9uIG1yKHQpe2Z1bmN0
aW9uIGUodCl7Zm9yKHZhciBlPVtdLG49bnVsbCxyPTA7cjx0Lm5vZGVzLmxlbmd0aDtyKyspe3Zh
ciBvPXQubm9kZXNbcl07MSZvLmZsYWdzJiYobj1vKSxuJiYzODQwJm8uZmxhZ3MmJkthLmhhcyhv
LnByb3ZpZGVyLnRva2VuKSYmKGUucHVzaChuLmluZGV4KSxuPW51bGwpfXJldHVybiBlfWZ1bmN0
aW9uIG4odCxlKXtmb3IodmFyIG49ZSsxO248dC5ub2Rlcy5sZW5ndGg7bisrKXt2YXIgcj10Lm5v
ZGVzW25dO2lmKDEmci5mbGFncylyZXR1cm47aWYoMzg0MCZyLmZsYWdzKXtyLmZsYWdzfD00MDk2
O3ZhciBvPXIucHJvdmlkZXIsaT1LYS5nZXQoby50b2tlbik7aSYmKHIuZmxhZ3M9LTM4NDEmci5m
bGFnc3xpLmZsYWdzLG8uZGVwcz1hZShpLmRlcHMpLG8udmFsdWU9aS52YWx1ZSl9fX1pZigwPT09
S2Euc2l6ZSlyZXR1cm4gdDt2YXIgcj1lKHQpO2lmKDA9PT1yLmxlbmd0aClyZXR1cm4gdDt0PXQu
ZmFjdG9yeShmdW5jdGlvbigpe3JldHVybiB2YX0pO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysr
KW4odCxyW29dKTtyZXR1cm4gdH1mdW5jdGlvbiBncih0KXtmdW5jdGlvbiBlKHQpe3JldHVybiB0
LnByb3ZpZGVycy5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiEhKDM4NDAmdC5mbGFncykmJkthLmhh
cyh0LnRva2VuKX0pfWZ1bmN0aW9uIG4odCl7Zm9yKHZhciBlPTA7ZTx0LnByb3ZpZGVycy5sZW5n
dGg7ZSsrKXt2YXIgbj10LnByb3ZpZGVyc1tlXTtuLmZsYWdzfD00MDk2O3ZhciByPUthLmdldChu
LnRva2VuKTtyJiYobi5mbGFncz0tMzg0MSZuLmZsYWdzfHIuZmxhZ3Msbi5kZXBzPWFlKHIuZGVw
cyksbi52YWx1ZT1yLnZhbHVlKX19cmV0dXJuIDAhPT1LYS5zaXplJiZlKHQpPyh0PXQuZmFjdG9y
eShmdW5jdGlvbigpe3JldHVybiB2YX0pLG4odCksdCk6dH1mdW5jdGlvbiB2cih0LGUsbixyLG8s
aSxhLHMsdSxjLGwscCxmKXt2YXIgZD10LmRlZi5ub2Rlc1tlXTtyZXR1cm4gcW4odCxkLG4scixv
LGksYSxzLHUsYyxsLHAsZiksMjI0JmQuZmxhZ3M/UnQodCxlKS52YWx1ZTp2b2lkIDB9ZnVuY3Rp
b24gX3IodCxlLG4scixvLGksYSxzLHUsYyxsLHAsZil7dmFyIGQ9dC5kZWYubm9kZXNbZV07cmV0
dXJuIEtuKHQsZCxuLHIsbyxpLGEscyx1LGMsbCxwLGYpLDIyNCZkLmZsYWdzP1J0KHQsZSkudmFs
dWU6dm9pZCAwfWZ1bmN0aW9uIGJyKHQpe3JldHVybiBJcihXYS5kZXRlY3RDaGFuZ2VzLEduLG51
bGwsW3RdKX1mdW5jdGlvbiB3cih0KXtyZXR1cm4gSXIoV2EuY2hlY2tOb0NoYW5nZXMsVW4sbnVs
bCxbdF0pfWZ1bmN0aW9uIENyKHQpe3JldHVybiBJcihXYS5kZXN0cm95LCRuLG51bGwsW3RdKX1m
dW5jdGlvbiBFcih0LGUpe0phPXQsJGE9ZX1mdW5jdGlvbiBPcih0LGUsbixyKXtyZXR1cm4gRXIo
dCxlKSxJcihXYS5oYW5kbGVFdmVudCx0LmRlZi5oYW5kbGVFdmVudCxudWxsLFt0LGUsbixyXSl9
ZnVuY3Rpb24geHIodCxlKXtmdW5jdGlvbiBuKHQsbixyKXtmb3IodmFyIG89W10saT0zO2k8YXJn
dW1lbnRzLmxlbmd0aDtpKyspb1tpLTNdPWFyZ3VtZW50c1tpXTt2YXIgYT10LmRlZi5ub2Rlc1tu
XTtyZXR1cm4gMD09PWU/U3IodCxhLHIsbyk6QXIodCxhLHIsbyksMTYzODQmYS5mbGFncyYmRXIo
dCxOcih0LG4pKSwyMjQmYS5mbGFncz9SdCh0LGEuaW5kZXgpLnZhbHVlOnZvaWQgMH1pZigxMjgm
dC5zdGF0ZSl0aHJvdyBVdChXYVtRYV0pO3JldHVybiBFcih0LE5yKHQsMCkpLHQuZGVmLnVwZGF0
ZURpcmVjdGl2ZXMobix0KX1mdW5jdGlvbiBQcih0LGUpe2Z1bmN0aW9uIG4odCxuLHIpe2Zvcih2
YXIgbz1bXSxpPTM7aTxhcmd1bWVudHMubGVuZ3RoO2krKylvW2ktM109YXJndW1lbnRzW2ldO3Zh
ciBhPXQuZGVmLm5vZGVzW25dO3JldHVybiAwPT09ZT9Tcih0LGEscixvKTpBcih0LGEscixvKSwz
JmEuZmxhZ3MmJkVyKHQsTXIodCxuKSksMjI0JmEuZmxhZ3M/UnQodCxhLmluZGV4KS52YWx1ZTp2
b2lkIDB9aWYoMTI4JnQuc3RhdGUpdGhyb3cgVXQoV2FbUWFdKTtyZXR1cm4gRXIodCxNcih0LDAp
KSx0LmRlZi51cGRhdGVSZW5kZXJlcihuLHQpfWZ1bmN0aW9uIFNyKHQsZSxuLHIpe2lmKHFuLmFw
cGx5KHZvaWQgMCxbdCxlLG5dLmNvbmNhdChyKSkpe3ZhciBvPTE9PT1uP3JbMF06cjtpZigxNjM4
NCZlLmZsYWdzKXtmb3IodmFyIGk9e30sYT0wO2E8ZS5iaW5kaW5ncy5sZW5ndGg7YSsrKXt2YXIg
cz1lLmJpbmRpbmdzW2FdLHU9b1thXTs4JnMuZmxhZ3MmJihpW1RyKHMubm9uTWluaWZpZWROYW1l
KV09VnIodSkpfXZhciBjPWUucGFyZW50LGw9TXQodCxjLmluZGV4KS5yZW5kZXJFbGVtZW50O2lm
KGMuZWxlbWVudC5uYW1lKWZvcih2YXIgcCBpbiBpKXt2YXIgdT1pW3BdO251bGwhPXU/dC5yZW5k
ZXJlci5zZXRBdHRyaWJ1dGUobCxwLHUpOnQucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKGwscCl9
ZWxzZSB0LnJlbmRlcmVyLnNldFZhbHVlKGwsImJpbmRpbmdzPSIrSlNPTi5zdHJpbmdpZnkoaSxu
dWxsLDIpKX19fWZ1bmN0aW9uIEFyKHQsZSxuLHIpe0tuLmFwcGx5KHZvaWQgMCxbdCxlLG5dLmNv
bmNhdChyKSl9ZnVuY3Rpb24gVHIodCl7cmV0dXJuIm5nLXJlZmxlY3QtIisodD1rcih0LnJlcGxh
Y2UoL1skQF0vZywiXyIpKSl9ZnVuY3Rpb24ga3IodCl7cmV0dXJuIHQucmVwbGFjZShYYSxmdW5j
dGlvbigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3Vt
ZW50c1tlXTtyZXR1cm4iLSIrdFsxXS50b0xvd2VyQ2FzZSgpfSl9ZnVuY3Rpb24gVnIodCl7dHJ5
e3JldHVybiBudWxsIT10P3QudG9TdHJpbmcoKS5zbGljZSgwLDMwKTp0fWNhdGNoKHQpe3JldHVy
biJbRVJST1JdIEV4Y2VwdGlvbiB3aGlsZSB0cnlpbmcgdG8gc2VyaWFsaXplIHRoZSB2YWx1ZSJ9
fWZ1bmN0aW9uIE5yKHQsZSl7Zm9yKHZhciBuPWU7bjx0LmRlZi5ub2Rlcy5sZW5ndGg7bisrKXt2
YXIgcj10LmRlZi5ub2Rlc1tuXTtpZigxNjM4NCZyLmZsYWdzJiZyLmJpbmRpbmdzJiZyLmJpbmRp
bmdzLmxlbmd0aClyZXR1cm4gbn1yZXR1cm4gbnVsbH1mdW5jdGlvbiBNcih0LGUpe2Zvcih2YXIg
bj1lO248dC5kZWYubm9kZXMubGVuZ3RoO24rKyl7dmFyIHI9dC5kZWYubm9kZXNbbl07aWYoMyZy
LmZsYWdzJiZyLmJpbmRpbmdzJiZyLmJpbmRpbmdzLmxlbmd0aClyZXR1cm4gbn1yZXR1cm4gbnVs
bH1mdW5jdGlvbiBqcih0LGUpe2Zvcih2YXIgbj0tMSxyPTA7cjw9ZTtyKyspezMmdC5ub2Rlc1ty
XS5mbGFncyYmbisrfXJldHVybiBufWZ1bmN0aW9uIFJyKHQpe2Zvcig7dCYmIW5lKHQpOyl0PXQu
cGFyZW50O3JldHVybiB0LnBhcmVudD9NdCh0LnBhcmVudCxYdCh0KS5pbmRleCk6bnVsbH1mdW5j
dGlvbiBEcih0LGUsbil7Zm9yKHZhciByIGluIGUucmVmZXJlbmNlcyluW3JdPU9uKHQsZSxlLnJl
ZmVyZW5jZXNbcl0pfWZ1bmN0aW9uIElyKHQsZSxuLHIpe3ZhciBvPVFhLGk9SmEsYT0kYTt0cnl7
UWE9dDt2YXIgcz1lLmFwcGx5KG4scik7cmV0dXJuIEphPWksJGE9YSxRYT1vLHN9Y2F0Y2godCl7
aWYoQnQodCl8fCFKYSl0aHJvdyB0O3Rocm93IEZ0KHQsRnIoKSl9fWZ1bmN0aW9uIEZyKCl7cmV0
dXJuIEphP25ldyB0cyhKYSwkYSk6bnVsbH1mdW5jdGlvbiBIcih0LGUsbil7cmV0dXJuIG5ldyBy
cyh0LGUsbil9dmFyIExyPW4oIlRUb08iKSxCcj1uKCJyQ1RmIiksVXI9KG4ubihCciksbigiMUtU
MCIpKSxHcj0obi5uKFVyKSxuKCIrYXl3IikpLHFyPShuLm4oR3IpLG4oIkVFcjQiKSk7bi5uKHFy
KTtuLmQoZSwiQiIsZnVuY3Rpb24oKXtyZXR1cm4gUGl9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXty
ZXR1cm4gYXR9KSxuLmQoZSwiTyIsZnVuY3Rpb24oKXtyZXR1cm4gc3R9KSxuLmQoZSwiUyIsZnVu
Y3Rpb24oKXtyZXR1cm4gY3R9KSxuLmQoZSwidyIsZnVuY3Rpb24oKXtyZXR1cm4gRWl9KSxuLmQo
ZSwiayIsZnVuY3Rpb24oKXtyZXR1cm4gem99KSxuLmQoZSwiUiIsZnVuY3Rpb24oKXtyZXR1cm4g
WW99KSxuLmQoZSwiUSIsZnVuY3Rpb24oKXtyZXR1cm4gS299KSxuLmQoZSwidiIsZnVuY3Rpb24o
KXtyZXR1cm4gR299KSxuLmQoZSwieCIsZnVuY3Rpb24oKXtyZXR1cm4gcW99KSxuLmQoZSwiSyIs
ZnVuY3Rpb24oKXtyZXR1cm4gdnR9KSxuLmQoZSwidCIsZnVuY3Rpb24oKXtyZXR1cm4geWl9KSxu
LmQoZSwiSiIsZnVuY3Rpb24oKXtyZXR1cm4gaXR9KSxuLmQoZSwiaCIsZnVuY3Rpb24oKXtyZXR1
cm4gZmF9KSxuLmQoZSwiQyIsZnVuY3Rpb24oKXtyZXR1cm4gaGF9KSxuLmQoZSwiViIsZnVuY3Rp
b24oKXtyZXR1cm4gZGl9KSxuLmQoZSwidSIsZnVuY3Rpb24oKXtyZXR1cm4gUG99KSxuLmQoZSwi
cSIsZnVuY3Rpb24oKXtyZXR1cm4gbWF9KSxuLmQoZSwiUCIsZnVuY3Rpb24oKXtyZXR1cm4geWF9
KSxuLmQoZSwiXzUiLGZ1bmN0aW9uKCl7cmV0dXJuIHRvfSksbi5kKGUsIlkiLGZ1bmN0aW9uKCl7
cmV0dXJuIG9vfSksbi5kKGUsIl8xIixmdW5jdGlvbigpe3JldHVybiBhb30pLG4uZChlLCJfMTUi
LGZ1bmN0aW9uKCl7cmV0dXJuIHNvfSksbi5kKGUsIl85IixmdW5jdGlvbigpe3JldHVybiBpb30p
LG4uZChlLCJFIixmdW5jdGlvbigpe3JldHVybiB1b30pLG4uZChlLCJNIixmdW5jdGlvbigpe3Jl
dHVybiBjb30pLG4uZChlLCJGIixmdW5jdGlvbigpe3JldHVybiBsb30pLG4uZChlLCJfMTEiLGZ1
bmN0aW9uKCl7cmV0dXJuIGh9KSxuLmQoZSwiQSIsZnVuY3Rpb24oKXtyZXR1cm4gQ299KSxuLmQo
ZSwiSSIsZnVuY3Rpb24oKXtyZXR1cm4gWnJ9KSxuLmQoZSwiSCIsZnVuY3Rpb24oKXtyZXR1cm4g
Zm99KSxuLmQoZSwiTCIsZnVuY3Rpb24oKXtyZXR1cm4gaG99KSxuLmQoZSwiRCIsZnVuY3Rpb24o
KXtyZXR1cm4geW99KSxuLmQoZSwiXzE0IixmdW5jdGlvbigpe3JldHVybiBtb30pLG4uZChlLCJV
IixmdW5jdGlvbigpe3JldHVybiBnb30pLG4uZChlLCJfNCIsZnVuY3Rpb24oKXtyZXR1cm4gdm99
KSxuLmQoZSwiciIsZnVuY3Rpb24oKXtyZXR1cm4gaGl9KSxuLmQoZSwiXzAiLGZ1bmN0aW9uKCl7
cmV0dXJuIEFpfSksbi5kKGUsIl8xMiIsZnVuY3Rpb24oKXtyZXR1cm4gVml9KSxuLmQoZSwicyIs
ZnVuY3Rpb24oKXtyZXR1cm4gVGl9KSxuLmQoZSwiTiIsZnVuY3Rpb24oKXtyZXR1cm4ga2l9KSxu
LmQoZSwiaiIsZnVuY3Rpb24oKXtyZXR1cm4gSm99KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1
cm4gcml9KSxuLmQoZSwiWiIsZnVuY3Rpb24oKXtyZXR1cm4gTml9KSxuLmQoZSwiZyIsZnVuY3Rp
b24oKXtyZXR1cm4gdWl9KSxuLmQoZSwiXzMiLGZ1bmN0aW9uKCl7cmV0dXJuIEhpfSksbi5kKGUs
Il8yIixmdW5jdGlvbigpe3JldHVybiBMaX0pLG4uZChlLCJfMTAiLGZ1bmN0aW9uKCl7cmV0dXJu
IEJpfSksbi5kKGUsIm0iLGZ1bmN0aW9uKCl7cmV0dXJuIG9hfSksbi5kKGUsIm8iLGZ1bmN0aW9u
KCl7cmV0dXJuIGlhfSksbi5kKGUsIl82IixmdW5jdGlvbigpe3JldHVybiBZaX0pLG4uZChlLCJU
IixmdW5jdGlvbigpe3JldHVybiBwYX0pLG4uZChlLCJXIixmdW5jdGlvbigpe3JldHVybiBDdH0p
LG4uZChlLCJ6IixmdW5jdGlvbigpe3JldHVybiBRb30pLG4uZChlLCJmIixmdW5jdGlvbigpe3Jl
dHVybiBhaX0pLG4uZChlLCJHIixmdW5jdGlvbigpe3JldHVybiBRcn0pLG4uZChlLCJfMTMiLGZ1
bmN0aW9uKCl7cmV0dXJuIGl9KSxuLmQoZSwiWCIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pLG4uZChl
LCJfOCIsZnVuY3Rpb24oKXtyZXR1cm4gWn0pLG4uZChlLCJfNyIsZnVuY3Rpb24oKXtyZXR1cm4g
en0pLG4uZChlLCJfMjAiLGZ1bmN0aW9uKCl7cmV0dXJuIGdlfSksbi5kKGUsIl8yNCIsZnVuY3Rp
b24oKXtyZXR1cm4gWWV9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gSHJ9KSxuLmQoZSwi
XzE2IixmdW5jdGlvbigpe3JldHVybiBxdH0pLG4uZChlLCJfMjEiLGZ1bmN0aW9uKCl7cmV0dXJu
IGVufSksbi5kKGUsIl8xOCIsZnVuY3Rpb24oKXtyZXR1cm4gdmV9KSxuLmQoZSwiYyIsZnVuY3Rp
b24oKXtyZXR1cm4ga2V9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gVGV9KSxuLmQoZSwi
XzIyIixmdW5jdGlvbigpe3JldHVybiAkZX0pLG4uZChlLCJfMjMiLGZ1bmN0aW9uKCl7cmV0dXJu
IG5ufSksbi5kKGUsIl8xOSIsZnVuY3Rpb24oKXtyZXR1cm4gVG59KSxuLmQoZSwiXzE3IixmdW5j
dGlvbigpe3JldHVybiBqbn0pLG4uZChlLCJuIixmdW5jdGlvbigpe3JldHVybiBUdH0pLG4uZChl
LCJwIixmdW5jdGlvbigpe3JldHVybiBrdH0pLG4uZChlLCJpIixmdW5jdGlvbigpe3JldHVybiBW
dH0pLG4uZChlLCJ5IixmdW5jdGlvbigpe3JldHVybiBTaX0pLG4uZChlLCJsIixmdW5jdGlvbigp
e3JldHVybiBZfSk7LyoqCisgKiBAbGljZW5zZSBBbmd1bGFyIHY0LjMuMQorICogKGMpIDIwMTAt
MjAxNyBHb29nbGUsIEluYy4gaHR0cHM6Ly9hbmd1bGFyLmlvLworICogTGljZW5zZTogTUlUCisg
Ki8KK3ZhciB6cj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fZGVzYz10fXJldHVybiB0
LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJUb2tlbiAiK3RoaXMuX2Rlc2N9
LHR9KCksWnI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4gdC5jYWxsKHRoaXMsZSl8
fHRoaXN9cmV0dXJuIExyLmEoZSx0KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3Jl
dHVybiJJbmplY3Rpb25Ub2tlbiAiK3RoaXMuX2Rlc2N9LGV9KHpyKSxZcj0idW5kZWZpbmVkIiE9
dHlwZW9mIHdpbmRvdyYmd2luZG93LEtyPSJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmInVuZGVm
aW5lZCIhPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckds
b2JhbFNjb3BlJiZzZWxmLFdyPXZvaWQgMCE9PXQmJnQsUXI9WXJ8fFdyfHxLcixKcj1udWxsLCRy
PTAsWHI9UXIuUmVmbGVjdCx0bz0obmV3IFpyKCJBbmFseXplRm9yRW50cnlDb21wb25lbnRzIiks
ZigiQXR0cmlidXRlIixmdW5jdGlvbih0KXtyZXR1cm57YXR0cmlidXRlTmFtZTp0fX0pKSxlbz1m
dW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHR9KCksbm89KGQoIkNvbnRlbnRDaGlsZHJl
biIsZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9e30pLE9iamVjdC5hc3NpZ24o
e3NlbGVjdG9yOnQsZmlyc3Q6ITEsaXNWaWV3UXVlcnk6ITEsZGVzY2VuZGFudHM6ITF9LGUpfSxl
byksZCgiQ29udGVudENoaWxkIixmdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT17
fSksT2JqZWN0LmFzc2lnbih7c2VsZWN0b3I6dCxmaXJzdDohMCxpc1ZpZXdRdWVyeTohMSxkZXNj
ZW5kYW50czohMH0sZSl9LGVvKSxkKCJWaWV3Q2hpbGRyZW4iLGZ1bmN0aW9uKHQsZSl7cmV0dXJu
IHZvaWQgMD09PWUmJihlPXt9KSxPYmplY3QuYXNzaWduKHtzZWxlY3Rvcjp0LGZpcnN0OiExLGlz
Vmlld1F1ZXJ5OiEwLGRlc2NlbmRhbnRzOiEwfSxlKX0sZW8pLGQoIlZpZXdDaGlsZCIsZnVuY3Rp
b24odCxlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbih7c2VsZWN0b3I6dCxmaXJzdDohMCxpc1ZpZXdR
dWVyeTohMCxkZXNjZW5kYW50czohMH0sZSl9LGVvKSx7fSk7bm8uT25QdXNoPTAsbm8uRGVmYXVs
dD0xLG5vW25vLk9uUHVzaF09Ik9uUHVzaCIsbm9bbm8uRGVmYXVsdF09IkRlZmF1bHQiO3ZhciBy
bz17fTtyby5DaGVja09uY2U9MCxyby5DaGVja2VkPTEscm8uQ2hlY2tBbHdheXM9Mixyby5EZXRh
Y2hlZD0zLHJvLkVycm9yZWQ9NCxyby5EZXN0cm95ZWQ9NSxyb1tyby5DaGVja09uY2VdPSJDaGVj
a09uY2UiLHJvW3JvLkNoZWNrZWRdPSJDaGVja2VkIixyb1tyby5DaGVja0Fsd2F5c109IkNoZWNr
QWx3YXlzIixyb1tyby5EZXRhY2hlZF09IkRldGFjaGVkIixyb1tyby5FcnJvcmVkXT0iRXJyb3Jl
ZCIscm9bcm8uRGVzdHJveWVkXT0iRGVzdHJveWVkIjsvKioKKyAqIEBsaWNlbnNlCisgKiBDb3B5
cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8v
bGljZW5zZQorICovCit2YXIgb289bCgiRGlyZWN0aXZlIixmdW5jdGlvbih0KXtyZXR1cm4gdm9p
ZCAwPT09dCYmKHQ9e30pLHR9KSxpbz0obCgiQ29tcG9uZW50IixmdW5jdGlvbih0KXtyZXR1cm4g
dm9pZCAwPT09dCYmKHQ9e30pLE9iamVjdC5hc3NpZ24oe2NoYW5nZURldGVjdGlvbjpuby5EZWZh
dWx0fSx0KX0sb28pLGwoIlBpcGUiLGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuYXNzaWduKHtw
dXJlOiEwfSx0KX0pKSxhbz1kKCJJbnB1dCIsZnVuY3Rpb24odCl7cmV0dXJue2JpbmRpbmdQcm9w
ZXJ0eU5hbWU6dH19KSxzbz1kKCJPdXRwdXQiLGZ1bmN0aW9uKHQpe3JldHVybntiaW5kaW5nUHJv
cGVydHlOYW1lOnR9fSksdW89KGQoIkhvc3RCaW5kaW5nIixmdW5jdGlvbih0KXtyZXR1cm57aG9z
dFByb3BlcnR5TmFtZTp0fX0pLGQoIkhvc3RMaXN0ZW5lciIsZnVuY3Rpb24odCxlKXtyZXR1cm57
ZXZlbnROYW1lOnQsYXJnczplfX0pLGwoIk5nTW9kdWxlIixmdW5jdGlvbih0KXtyZXR1cm4gdH0p
KSxjbz17fTtjby5FbXVsYXRlZD0wLGNvLk5hdGl2ZT0xLGNvLk5vbmU9Mixjb1tjby5FbXVsYXRl
ZF09IkVtdWxhdGVkIixjb1tjby5OYXRpdmVdPSJOYXRpdmUiLGNvW2NvLk5vbmVdPSJOb25lIjt2
YXIgbG89KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2b2lkIDA9PT10JiYodD17fSksdGhpcy50
ZW1wbGF0ZVVybD10LnRlbXBsYXRlVXJsLHRoaXMudGVtcGxhdGU9dC50ZW1wbGF0ZSx0aGlzLnN0
eWxlVXJscz10LnN0eWxlVXJscyx0aGlzLnN0eWxlcz10LnN0eWxlcyx0aGlzLmVuY2Fwc3VsYXRp
b249dC5lbmNhcHN1bGF0aW9uLHRoaXMuYW5pbWF0aW9ucz10LmFuaW1hdGlvbnMsdGhpcy5pbnRl
cnBvbGF0aW9uPXQuaW50ZXJwb2xhdGlvbn19KCksZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3Ro
aXMuZnVsbD10fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm1ham9y
Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZnVsbC5zcGxpdCgiLiIpWzBdfSxlbnVtZXJh
YmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlw
ZSwibWlub3IiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mdWxsLnNwbGl0KCIuIilbMV19
LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQu
cHJvdG90eXBlLCJwYXRjaCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZ1bGwuc3BsaXQo
Ii4iKS5zbGljZSgyKS5qb2luKCIuIil9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSks
dH0oKSkscG89bmV3IGxvKCI0LjMuMSIpLGZvPWYoIkluamVjdCIsZnVuY3Rpb24odCl7cmV0dXJu
e3Rva2VuOnR9fSksaG89ZigiT3B0aW9uYWwiKSx5bz1sKCJJbmplY3RhYmxlIiksbW89ZigiU2Vs
ZiIpLGdvPWYoIlNraXBTZWxmIiksdm89ZigiSG9zdCIpLF9vPW5ldyBPYmplY3QsYm89X28sd289
ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24o
dCxlKXtpZih2b2lkIDA9PT1lJiYoZT1fbyksZT09PV9vKXRocm93IG5ldyBFcnJvcigiTm8gcHJv
dmlkZXIgZm9yICIrYSh0KSsiISIpO3JldHVybiBlfSx0fSgpLENvPWZ1bmN0aW9uKCl7ZnVuY3Rp
b24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSl7fSx0LnByb3RvdHlw
ZS5nZXQ9ZnVuY3Rpb24odCxlKXt9LHR9KCk7Q28uVEhST1dfSUZfTk9UX0ZPVU5EPV9vLENvLk5V
TEw9bmV3IHdvOy8qKgorICogQGxpY2Vuc2UKKyAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisgKiBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCisgKi8KK3ZhciBFbz0i
bmdEZWJ1Z0NvbnRleHQiLE9vPSJuZ09yaWdpbmFsRXJyb3IiLHhvPSJuZ0Vycm9yTG9nZ2VyIixQ
bz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fY29uc29sZT1jb25zb2xlfXJldHVybiB0
LnByb3RvdHlwZS5oYW5kbGVFcnJvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9maW5kT3JpZ2lu
YWxFcnJvcih0KSxuPXRoaXMuX2ZpbmRDb250ZXh0KHQpLHI9dih0KTtyKHRoaXMuX2NvbnNvbGUs
IkVSUk9SIix0KSxlJiZyKHRoaXMuX2NvbnNvbGUsIk9SSUdJTkFMIEVSUk9SIixlKSxuJiZyKHRo
aXMuX2NvbnNvbGUsIkVSUk9SIENPTlRFWFQiLG4pfSx0LnByb3RvdHlwZS5fZmluZENvbnRleHQ9
ZnVuY3Rpb24odCl7cmV0dXJuIHQ/bSh0KT9tKHQpOnRoaXMuX2ZpbmRDb250ZXh0KGcodCkpOm51
bGx9LHQucHJvdG90eXBlLl9maW5kT3JpZ2luYWxFcnJvcj1mdW5jdGlvbih0KXtmb3IodmFyIGU9
Zyh0KTtlJiZnKGUpOyllPWcoZSk7cmV0dXJuIGV9LHR9KCksU289ZnVuY3Rpb24oKXtmdW5jdGlv
biB0KHQsZSl7aWYodGhpcy50b2tlbj10LHRoaXMuaWQ9ZSwhdCl0aHJvdyBuZXcgRXJyb3IoIlRv
a2VuIG11c3QgYmUgZGVmaW5lZCEiKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJv
dG90eXBlLCJkaXNwbGF5TmFtZSIse2dldDpmdW5jdGlvbigpe3JldHVybiBhKHRoaXMudG9rZW4p
fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQuZ2V0PWZ1bmN0aW9uKHQpe3JldHVy
biBUby5nZXQoeSh0KSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJudW1iZXJPZktleXMiLHtn
ZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVG8ubnVtYmVyT2ZLZXlzfSxlbnVtZXJhYmxlOiEwLGNvbmZp
Z3VyYWJsZTohMH0pLHR9KCksQW89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fYWxsS2V5
cz1uZXcgTWFwfXJldHVybiB0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7aWYodCBpbnN0YW5j
ZW9mIFNvKXJldHVybiB0O2lmKHRoaXMuX2FsbEtleXMuaGFzKHQpKXJldHVybiB0aGlzLl9hbGxL
ZXlzLmdldCh0KTt2YXIgZT1uZXcgU28odCxTby5udW1iZXJPZktleXMpO3JldHVybiB0aGlzLl9h
bGxLZXlzLnNldCh0LGUpLGV9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibnVt
YmVyT2ZLZXlzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FsbEtleXMuc2l6ZX0sZW51
bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0fSgpLFRvPW5ldyBBbyxrbz1GdW5jdGlvbixW
bz0vXmZ1bmN0aW9uXHMrXFMrXChcKVxzKntbXHNcU10rXC5hcHBseVwodGhpcyxccyphcmd1bWVu
dHNcKS8sTm89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX3JlZmxlY3Q9dHx8UXIuUmVm
bGVjdH1yZXR1cm4gdC5wcm90b3R5cGUuaXNSZWZsZWN0aW9uRW5hYmxlZD1mdW5jdGlvbigpe3Jl
dHVybiEwfSx0LnByb3RvdHlwZS5mYWN0b3J5PWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigp
e2Zvcih2YXIgZT1bXSxuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW25dPWFyZ3VtZW50c1tu
XTtyZXR1cm4gbmV3KHQuYmluZC5hcHBseSh0LFt2b2lkIDBdLmNvbmNhdChlKSkpfX0sdC5wcm90
b3R5cGUuX3ppcFR5cGVzQW5kQW5ub3RhdGlvbnM9ZnVuY3Rpb24odCxlKXt2YXIgbjtuPXZvaWQg
MD09PXQ/bmV3IEFycmF5KGUubGVuZ3RoKTpuZXcgQXJyYXkodC5sZW5ndGgpO2Zvcih2YXIgcj0w
O3I8bi5sZW5ndGg7cisrKXZvaWQgMD09PXQ/bltyXT1bXTp0W3JdIT1PYmplY3Q/bltyXT1bdFty
XV06bltyXT1bXSxlJiZudWxsIT1lW3JdJiYobltyXT1uW3JdLmNvbmNhdChlW3JdKSk7cmV0dXJu
IG59LHQucHJvdG90eXBlLl9vd25QYXJhbWV0ZXJzPWZ1bmN0aW9uKHQsZSl7aWYoVm8uZXhlYyh0
LnRvU3RyaW5nKCkpKXJldHVybiBudWxsO2lmKHQucGFyYW1ldGVycyYmdC5wYXJhbWV0ZXJzIT09
ZS5wYXJhbWV0ZXJzKXJldHVybiB0LnBhcmFtZXRlcnM7dmFyIG49dC5jdG9yUGFyYW1ldGVycztp
ZihuJiZuIT09ZS5jdG9yUGFyYW1ldGVycyl7dmFyIHI9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bigp
Om4sbz1yLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC50eXBlfSksaT1yLm1hcChmdW5jdGlv
bih0KXtyZXR1cm4gdCYmTSh0LmRlY29yYXRvcnMpfSk7cmV0dXJuIHRoaXMuX3ppcFR5cGVzQW5k
QW5ub3RhdGlvbnMobyxpKX1pZihudWxsIT10aGlzLl9yZWZsZWN0JiZudWxsIT10aGlzLl9yZWZs
ZWN0LmdldE93bk1ldGFkYXRhKXt2YXIgaT10aGlzLl9yZWZsZWN0LmdldE93bk1ldGFkYXRhKCJw
YXJhbWV0ZXJzIix0KSxvPXRoaXMuX3JlZmxlY3QuZ2V0T3duTWV0YWRhdGEoImRlc2lnbjpwYXJh
bXR5cGVzIix0KTtpZihvfHxpKXJldHVybiB0aGlzLl96aXBUeXBlc0FuZEFubm90YXRpb25zKG8s
aSl9cmV0dXJuIG5ldyBBcnJheSh0Lmxlbmd0aCkuZmlsbCh2b2lkIDApfSx0LnByb3RvdHlwZS5w
YXJhbWV0ZXJzPWZ1bmN0aW9uKHQpe2lmKCFOKHQpKXJldHVybltdO3ZhciBlPWoodCksbj10aGlz
Ll9vd25QYXJhbWV0ZXJzKHQsZSk7cmV0dXJuIG58fGU9PT1PYmplY3R8fChuPXRoaXMucGFyYW1l
dGVycyhlKSksbnx8W119LHQucHJvdG90eXBlLl9vd25Bbm5vdGF0aW9ucz1mdW5jdGlvbih0LGUp
e2lmKHQuYW5ub3RhdGlvbnMmJnQuYW5ub3RhdGlvbnMhPT1lLmFubm90YXRpb25zKXt2YXIgbj10
LmFubm90YXRpb25zO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuJiZuLmFubm90YXRpb25zJiYo
bj1uLmFubm90YXRpb25zKSxufXJldHVybiB0LmRlY29yYXRvcnMmJnQuZGVjb3JhdG9ycyE9PWUu
ZGVjb3JhdG9ycz9NKHQuZGVjb3JhdG9ycyk6dGhpcy5fcmVmbGVjdCYmdGhpcy5fcmVmbGVjdC5n
ZXRPd25NZXRhZGF0YT90aGlzLl9yZWZsZWN0LmdldE93bk1ldGFkYXRhKCJhbm5vdGF0aW9ucyIs
dCk6bnVsbH0sdC5wcm90b3R5cGUuYW5ub3RhdGlvbnM9ZnVuY3Rpb24odCl7aWYoIU4odCkpcmV0
dXJuW107dmFyIGU9aih0KSxuPXRoaXMuX293bkFubm90YXRpb25zKHQsZSl8fFtdO3JldHVybihl
IT09T2JqZWN0P3RoaXMuYW5ub3RhdGlvbnMoZSk6W10pLmNvbmNhdChuKX0sdC5wcm90b3R5cGUu
X293blByb3BNZXRhZGF0YT1mdW5jdGlvbih0LGUpe2lmKHQucHJvcE1ldGFkYXRhJiZ0LnByb3BN
ZXRhZGF0YSE9PWUucHJvcE1ldGFkYXRhKXt2YXIgbj10LnByb3BNZXRhZGF0YTtyZXR1cm4iZnVu
Y3Rpb24iPT10eXBlb2YgbiYmbi5wcm9wTWV0YWRhdGEmJihuPW4ucHJvcE1ldGFkYXRhKSxufWlm
KHQucHJvcERlY29yYXRvcnMmJnQucHJvcERlY29yYXRvcnMhPT1lLnByb3BEZWNvcmF0b3JzKXt2
YXIgcj10LnByb3BEZWNvcmF0b3JzLG89e307cmV0dXJuIE9iamVjdC5rZXlzKHIpLmZvckVhY2go
ZnVuY3Rpb24odCl7b1t0XT1NKHJbdF0pfSksb31yZXR1cm4gdGhpcy5fcmVmbGVjdCYmdGhpcy5f
cmVmbGVjdC5nZXRPd25NZXRhZGF0YT90aGlzLl9yZWZsZWN0LmdldE93bk1ldGFkYXRhKCJwcm9w
TWV0YWRhdGEiLHQpOm51bGx9LHQucHJvdG90eXBlLnByb3BNZXRhZGF0YT1mdW5jdGlvbih0KXtp
ZighTih0KSlyZXR1cm57fTt2YXIgZT1qKHQpLG49e307aWYoZSE9PU9iamVjdCl7dmFyIHI9dGhp
cy5wcm9wTWV0YWRhdGEoZSk7T2JqZWN0LmtleXMocikuZm9yRWFjaChmdW5jdGlvbih0KXtuW3Rd
PXJbdF19KX12YXIgbz10aGlzLl9vd25Qcm9wTWV0YWRhdGEodCxlKTtyZXR1cm4gbyYmT2JqZWN0
LmtleXMobykuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1bXTtuLmhhc093blByb3BlcnR5KHQp
JiZlLnB1c2guYXBwbHkoZSxuW3RdKSxlLnB1c2guYXBwbHkoZSxvW3RdKSxuW3RdPWV9KSxufSx0
LnByb3RvdHlwZS5oYXNMaWZlY3ljbGVIb29rPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQgaW5zdGFu
Y2VvZiBrbyYmZSBpbiB0LnByb3RvdHlwZX0sdC5wcm90b3R5cGUuZ2V0dGVyPWZ1bmN0aW9uKHQp
e3JldHVybiBuZXcgRnVuY3Rpb24oIm8iLCJyZXR1cm4gby4iK3QrIjsiKX0sdC5wcm90b3R5cGUu
c2V0dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRnVuY3Rpb24oIm8iLCJ2IiwicmV0dXJuIG8u
Iit0KyIgPSB2OyIpfSx0LnByb3RvdHlwZS5tZXRob2Q9ZnVuY3Rpb24odCl7dmFyIGU9ImlmICgh
by4iK3QrIikgdGhyb3cgbmV3IEVycm9yKCdcIiIrdCsiXCIgaXMgdW5kZWZpbmVkJyk7XG4gICAg
ICAgIHJldHVybiBvLiIrdCsiLmFwcGx5KG8sIGFyZ3MpOyI7cmV0dXJuIG5ldyBGdW5jdGlvbigi
byIsImFyZ3MiLGUpfSx0LnByb3RvdHlwZS5pbXBvcnRVcmk9ZnVuY3Rpb24odCl7cmV0dXJuIm9i
amVjdCI9PXR5cGVvZiB0JiZ0LmZpbGVQYXRoP3QuZmlsZVBhdGg6Ii4vIithKHQpfSx0LnByb3Rv
dHlwZS5yZXNvdXJjZVVyaT1mdW5jdGlvbih0KXtyZXR1cm4iLi8iK2EodCl9LHQucHJvdG90eXBl
LnJlc29sdmVJZGVudGlmaWVyPWZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiByfSx0LnByb3RvdHlw
ZS5yZXNvbHZlRW51bT1mdW5jdGlvbih0LGUpe3JldHVybiB0W2VdfSx0fSgpLE1vPWZ1bmN0aW9u
KCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnJlZmxlY3Rpb25DYXBhYmlsaXRpZXM9dH1yZXR1cm4gdC5w
cm90b3R5cGUudXBkYXRlQ2FwYWJpbGl0aWVzPWZ1bmN0aW9uKHQpe3RoaXMucmVmbGVjdGlvbkNh
cGFiaWxpdGllcz10fSx0LnByb3RvdHlwZS5mYWN0b3J5PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlz
LnJlZmxlY3Rpb25DYXBhYmlsaXRpZXMuZmFjdG9yeSh0KX0sdC5wcm90b3R5cGUucGFyYW1ldGVy
cz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZWZsZWN0aW9uQ2FwYWJpbGl0aWVzLnBhcmFtZXRl
cnModCl9LHQucHJvdG90eXBlLmFubm90YXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJl
ZmxlY3Rpb25DYXBhYmlsaXRpZXMuYW5ub3RhdGlvbnModCl9LHQucHJvdG90eXBlLnByb3BNZXRh
ZGF0YT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZWZsZWN0aW9uQ2FwYWJpbGl0aWVzLnByb3BN
ZXRhZGF0YSh0KX0sdC5wcm90b3R5cGUuaGFzTGlmZWN5Y2xlSG9vaz1mdW5jdGlvbih0LGUpe3Jl
dHVybiB0aGlzLnJlZmxlY3Rpb25DYXBhYmlsaXRpZXMuaGFzTGlmZWN5Y2xlSG9vayh0LGUpfSx0
LnByb3RvdHlwZS5nZXR0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVmbGVjdGlvbkNhcGFi
aWxpdGllcy5nZXR0ZXIodCl9LHQucHJvdG90eXBlLnNldHRlcj1mdW5jdGlvbih0KXtyZXR1cm4g
dGhpcy5yZWZsZWN0aW9uQ2FwYWJpbGl0aWVzLnNldHRlcih0KX0sdC5wcm90b3R5cGUubWV0aG9k
PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJlZmxlY3Rpb25DYXBhYmlsaXRpZXMubWV0aG9kKHQp
fSx0LnByb3RvdHlwZS5pbXBvcnRVcmk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVmbGVjdGlv
bkNhcGFiaWxpdGllcy5pbXBvcnRVcmkodCl9LHQucHJvdG90eXBlLnJlc291cmNlVXJpPWZ1bmN0
aW9uKHQpe3JldHVybiB0aGlzLnJlZmxlY3Rpb25DYXBhYmlsaXRpZXMucmVzb3VyY2VVcmkodCl9
LHQucHJvdG90eXBlLnJlc29sdmVJZGVudGlmaWVyPWZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiB0
aGlzLnJlZmxlY3Rpb25DYXBhYmlsaXRpZXMucmVzb2x2ZUlkZW50aWZpZXIodCxlLG4scil9LHQu
cHJvdG90eXBlLnJlc29sdmVFbnVtPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMucmVmbGVjdGlv
bkNhcGFiaWxpdGllcy5yZXNvbHZlRW51bSh0LGUpfSx0fSgpLGpvPW5ldyBNbyhuZXcgTm8pLFJv
PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5rZXk9dCx0aGlzLm9wdGlvbmFsPWUs
dGhpcy52aXNpYmlsaXR5PW59cmV0dXJuIHQuZnJvbUtleT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3
IHQoZSwhMSxudWxsKX0sdH0oKSxEbz1bXSxJbz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4p
e3RoaXMua2V5PXQsdGhpcy5yZXNvbHZlZEZhY3Rvcmllcz1lLHRoaXMubXVsdGlQcm92aWRlcj1u
fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInJlc29sdmVkRmFjdG9y
eSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlc29sdmVkRmFjdG9yaWVzWzBdfSxlbnVt
ZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHR9KCksRm89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0
KHQsZSl7dGhpcy5mYWN0b3J5PXQsdGhpcy5kZXBlbmRlbmNpZXM9ZX1yZXR1cm4gdH0oKSxIbz1u
ZXcgT2JqZWN0LExvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5yZXNvbHZlPWZ1
bmN0aW9uKHQpe3JldHVybiBJKHQpfSx0LnJlc29sdmVBbmRDcmVhdGU9ZnVuY3Rpb24oZSxuKXt2
YXIgcj10LnJlc29sdmUoZSk7cmV0dXJuIHQuZnJvbVJlc29sdmVkUHJvdmlkZXJzKHIsbil9LHQu
ZnJvbVJlc29sdmVkUHJvdmlkZXJzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBCbyh0LGUpfSx0
LnByb3RvdHlwZS5wYXJlbnQ9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLnJlc29sdmVBbmRDcmVh
dGVDaGlsZD1mdW5jdGlvbih0KXt9LHQucHJvdG90eXBlLmNyZWF0ZUNoaWxkRnJvbVJlc29sdmVk
PWZ1bmN0aW9uKHQpe30sdC5wcm90b3R5cGUucmVzb2x2ZUFuZEluc3RhbnRpYXRlPWZ1bmN0aW9u
KHQpe30sdC5wcm90b3R5cGUuaW5zdGFudGlhdGVSZXNvbHZlZD1mdW5jdGlvbih0KXt9LHQucHJv
dG90eXBlLmdldD1mdW5jdGlvbih0LGUpe30sdH0oKSxCbz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQo
dCxlKXt0aGlzLl9jb25zdHJ1Y3Rpb25Db3VudGVyPTAsdGhpcy5fcHJvdmlkZXJzPXQsdGhpcy5f
cGFyZW50PWV8fG51bGw7dmFyIG49dC5sZW5ndGg7dGhpcy5rZXlJZHM9bmV3IEFycmF5KG4pLHRo
aXMub2Jqcz1uZXcgQXJyYXkobik7Zm9yKHZhciByPTA7cjxuO3IrKyl0aGlzLmtleUlkc1tyXT10
W3JdLmtleS5pZCx0aGlzLm9ianNbcl09SG99cmV0dXJuIHQucHJvdG90eXBlLmdldD1mdW5jdGlv
bih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT1ibyksdGhpcy5fZ2V0QnlLZXkoU28uZ2V0KHQp
LG51bGwsZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGFyZW50Iix7Z2V0
OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmVudH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFi
bGU6ITB9KSx0LnByb3RvdHlwZS5yZXNvbHZlQW5kQ3JlYXRlQ2hpbGQ9ZnVuY3Rpb24odCl7dmFy
IGU9TG8ucmVzb2x2ZSh0KTtyZXR1cm4gdGhpcy5jcmVhdGVDaGlsZEZyb21SZXNvbHZlZChlKX0s
dC5wcm90b3R5cGUuY3JlYXRlQ2hpbGRGcm9tUmVzb2x2ZWQ9ZnVuY3Rpb24oZSl7dmFyIG49bmV3
IHQoZSk7cmV0dXJuIG4uX3BhcmVudD10aGlzLG59LHQucHJvdG90eXBlLnJlc29sdmVBbmRJbnN0
YW50aWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbnN0YW50aWF0ZVJlc29sdmVkKExvLnJl
c29sdmUoW3RdKVswXSl9LHQucHJvdG90eXBlLmluc3RhbnRpYXRlUmVzb2x2ZWQ9ZnVuY3Rpb24o
dCl7cmV0dXJuIHRoaXMuX2luc3RhbnRpYXRlUHJvdmlkZXIodCl9LHQucHJvdG90eXBlLmdldFBy
b3ZpZGVyQXRJbmRleD1mdW5jdGlvbih0KXtpZih0PDB8fHQ+PXRoaXMuX3Byb3ZpZGVycy5sZW5n
dGgpdGhyb3cgayh0KTtyZXR1cm4gdGhpcy5fcHJvdmlkZXJzW3RdfSx0LnByb3RvdHlwZS5fbmV3
PWZ1bmN0aW9uKHQpe2lmKHRoaXMuX2NvbnN0cnVjdGlvbkNvdW50ZXIrKz50aGlzLl9nZXRNYXhO
dW1iZXJPZk9iamVjdHMoKSl0aHJvdyBQKHRoaXMsdC5rZXkpO3JldHVybiB0aGlzLl9pbnN0YW50
aWF0ZVByb3ZpZGVyKHQpfSx0LnByb3RvdHlwZS5fZ2V0TWF4TnVtYmVyT2ZPYmplY3RzPWZ1bmN0
aW9uKCl7cmV0dXJuIHRoaXMub2Jqcy5sZW5ndGh9LHQucHJvdG90eXBlLl9pbnN0YW50aWF0ZVBy
b3ZpZGVyPWZ1bmN0aW9uKHQpe2lmKHQubXVsdGlQcm92aWRlcil7Zm9yKHZhciBlPW5ldyBBcnJh
eSh0LnJlc29sdmVkRmFjdG9yaWVzLmxlbmd0aCksbj0wO248dC5yZXNvbHZlZEZhY3Rvcmllcy5s
ZW5ndGg7KytuKWVbbl09dGhpcy5faW5zdGFudGlhdGUodCx0LnJlc29sdmVkRmFjdG9yaWVzW25d
KTtyZXR1cm4gZX1yZXR1cm4gdGhpcy5faW5zdGFudGlhdGUodCx0LnJlc29sdmVkRmFjdG9yaWVz
WzBdKX0sdC5wcm90b3R5cGUuX2luc3RhbnRpYXRlPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj10aGlz
LG89ZS5mYWN0b3J5O3RyeXtuPWUuZGVwZW5kZW5jaWVzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4g
ci5fZ2V0QnlSZWZsZWN0aXZlRGVwZW5kZW5jeSh0KX0pfWNhdGNoKGUpe3Rocm93IGUuYWRkS2V5
JiZlLmFkZEtleSh0aGlzLHQua2V5KSxlfXZhciBpO3RyeXtpPW8uYXBwbHkodm9pZCAwLG4pfWNh
dGNoKGUpe3Rocm93IFModGhpcyxlLGUuc3RhY2ssdC5rZXkpfXJldHVybiBpfSx0LnByb3RvdHlw
ZS5fZ2V0QnlSZWZsZWN0aXZlRGVwZW5kZW5jeT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZ2V0
QnlLZXkodC5rZXksdC52aXNpYmlsaXR5LHQub3B0aW9uYWw/bnVsbDpibyl9LHQucHJvdG90eXBl
Ll9nZXRCeUtleT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQ9PT1Vbz90aGlzOmUgaW5zdGFuY2Vv
ZiBtbz90aGlzLl9nZXRCeUtleVNlbGYodCxuKTp0aGlzLl9nZXRCeUtleURlZmF1bHQodCxuLGUp
fSx0LnByb3RvdHlwZS5fZ2V0T2JqQnlLZXlJZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHRo
aXMua2V5SWRzLmxlbmd0aDtlKyspaWYodGhpcy5rZXlJZHNbZV09PT10KXJldHVybiB0aGlzLm9i
anNbZV09PT1IbyYmKHRoaXMub2Jqc1tlXT10aGlzLl9uZXcodGhpcy5fcHJvdmlkZXJzW2VdKSks
dGhpcy5vYmpzW2VdO3JldHVybiBIb30sdC5wcm90b3R5cGUuX3Rocm93T3JOdWxsPWZ1bmN0aW9u
KHQsZSl7aWYoZSE9PWJvKXJldHVybiBlO3Rocm93IHgodGhpcyx0KX0sdC5wcm90b3R5cGUuX2dl
dEJ5S2V5U2VsZj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2dldE9iakJ5S2V5SWQodC5pZCk7
cmV0dXJuIG4hPT1Ibz9uOnRoaXMuX3Rocm93T3JOdWxsKHQsZSl9LHQucHJvdG90eXBlLl9nZXRC
eUtleURlZmF1bHQ9ZnVuY3Rpb24oZSxuLHIpe3ZhciBvO2ZvcihvPXIgaW5zdGFuY2VvZiBnbz90
aGlzLl9wYXJlbnQ6dGhpcztvIGluc3RhbmNlb2YgdDspe3ZhciBpPW8sYT1pLl9nZXRPYmpCeUtl
eUlkKGUuaWQpO2lmKGEhPT1IbylyZXR1cm4gYTtvPWkuX3BhcmVudH1yZXR1cm4gbnVsbCE9PW8/
by5nZXQoZS50b2tlbixuKTp0aGlzLl90aHJvd09yTnVsbChlLG4pfSxPYmplY3QuZGVmaW5lUHJv
cGVydHkodC5wcm90b3R5cGUsImRpc3BsYXlOYW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIlJl
ZmxlY3RpdmVJbmplY3Rvcihwcm92aWRlcnM6IFsiK3EodGhpcyxmdW5jdGlvbih0KXtyZXR1cm4n
ICInK3Qua2V5LmRpc3BsYXlOYW1lKyciICd9KS5qb2luKCIsICIpKyJdKSJ9LGVudW1lcmFibGU6
ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1
cm4gdGhpcy5kaXNwbGF5TmFtZX0sdH0oKSxVbz1Tby5nZXQoQ28pLEdvPW5ldyBacigiQXBwbGlj
YXRpb24gSW5pdGlhbGl6ZXIiKSxxbz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIGU9dGhp
czt0aGlzLmFwcEluaXRzPXQsdGhpcy5pbml0aWFsaXplZD0hMSx0aGlzLl9kb25lPSExLHRoaXMu
X2RvbmVQcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHQsbil7ZS5yZXNvbHZlPXQsZS5yZWpl
Y3Q9bn0pfXJldHVybiB0LnByb3RvdHlwZS5ydW5Jbml0aWFsaXplcnM9ZnVuY3Rpb24oKXt2YXIg
dD10aGlzO2lmKCF0aGlzLmluaXRpYWxpemVkKXt2YXIgZT1bXSxuPWZ1bmN0aW9uKCl7dC5fZG9u
ZT0hMCx0LnJlc29sdmUoKX07aWYodGhpcy5hcHBJbml0cylmb3IodmFyIHI9MDtyPHRoaXMuYXBw
SW5pdHMubGVuZ3RoO3IrKyl7dmFyIG89dGhpcy5hcHBJbml0c1tyXSgpO3oobykmJmUucHVzaChv
KX1Qcm9taXNlLmFsbChlKS50aGVuKGZ1bmN0aW9uKCl7bigpfSkuY2F0Y2goZnVuY3Rpb24oZSl7
dC5yZWplY3QoZSl9KSwwPT09ZS5sZW5ndGgmJm4oKSx0aGlzLmluaXRpYWxpemVkPSEwfX0sT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJkb25lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0
dXJuIHRoaXMuX2RvbmV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRl
ZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJkb25lUHJvbWlzZSIse2dldDpmdW5jdGlvbigpe3Jl
dHVybiB0aGlzLl9kb25lUHJvbWlzZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0
fSgpO3FvLmRlY29yYXRvcnM9W3t0eXBlOnlvfV0scW8uY3RvclBhcmFtZXRlcnM9ZnVuY3Rpb24o
KXtyZXR1cm5be3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6Zm8sYXJnczpbR29dfSx7dHlw
ZTpob31dfV19Oy8qKgorICogQGxpY2Vuc2UKKyAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisgKiBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCisgKi8KK3ZhciB6bz1u
ZXcgWnIoIkFwcElkIiksWm89e3Byb3ZpZGU6em8sdXNlRmFjdG9yeTpZLGRlcHM6W119LFlvPW5l
dyBacigiUGxhdGZvcm0gSW5pdGlhbGl6ZXIiKSxLbz1uZXcgWnIoIlBsYXRmb3JtIElEIiksV289
bmV3IFpyKCJhcHBCb290c3RyYXBMaXN0ZW5lciIpLFFvPShuZXcgWnIoIkFwcGxpY2F0aW9uIFBh
Y2thZ2VzIFJvb3QgVVJMIiksZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3Rv
dHlwZS5sb2c9ZnVuY3Rpb24odCl7Y29uc29sZS5sb2codCl9LHQucHJvdG90eXBlLndhcm49ZnVu
Y3Rpb24odCl7Y29uc29sZS53YXJuKHQpfSx0fSgpKTtRby5kZWNvcmF0b3JzPVt7dHlwZTp5b31d
LFFvLmN0b3JQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7cmV0dXJuW119Oy8qKgorICogQGxpY2Vuc2UK
KyAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5n
dWxhci5pby9saWNlbnNlCisgKi8KK3ZhciBKbz0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7
dGhpcy5uZ01vZHVsZUZhY3Rvcnk9dCx0aGlzLmNvbXBvbmVudEZhY3Rvcmllcz1lfX0oKSxmdW5j
dGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmNvbXBpbGVNb2R1bGVTeW5j
PWZ1bmN0aW9uKHQpe3Rocm93IFcoKX0sdC5wcm90b3R5cGUuY29tcGlsZU1vZHVsZUFzeW5jPWZ1
bmN0aW9uKHQpe3Rocm93IFcoKX0sdC5wcm90b3R5cGUuY29tcGlsZU1vZHVsZUFuZEFsbENvbXBv
bmVudHNTeW5jPWZ1bmN0aW9uKHQpe3Rocm93IFcoKX0sdC5wcm90b3R5cGUuY29tcGlsZU1vZHVs
ZUFuZEFsbENvbXBvbmVudHNBc3luYz1mdW5jdGlvbih0KXt0aHJvdyBXKCl9LHQucHJvdG90eXBl
LmdldE5nQ29udGVudFNlbGVjdG9ycz1mdW5jdGlvbih0KXt0aHJvdyBXKCl9LHQucHJvdG90eXBl
LmNsZWFyQ2FjaGU9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmNsZWFyQ2FjaGVGb3I9ZnVuY3Rp
b24odCl7fSx0fSgpKTtKby5kZWNvcmF0b3JzPVt7dHlwZTp5b31dLEpvLmN0b3JQYXJhbWV0ZXJz
PWZ1bmN0aW9uKCl7cmV0dXJuW119O3ZhciAkbz0obmV3IFpyKCJjb21waWxlck9wdGlvbnMiKSxm
dW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmNyZWF0ZUNvbXBpbGVy
PWZ1bmN0aW9uKHQpe30sdH0oKSksWG89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0
LnByb3RvdHlwZS5sb2NhdGlvbj1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuaW5qZWN0b3I9ZnVu
Y3Rpb24oKXt9LHQucHJvdG90eXBlLmluc3RhbmNlPWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5o
b3N0Vmlldz1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuY2hhbmdlRGV0ZWN0b3JSZWY9ZnVuY3Rp
b24oKXt9LHQucHJvdG90eXBlLmNvbXBvbmVudFR5cGU9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBl
LmRlc3Ryb3k9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt9
LHR9KCksdGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5zZWxl
Y3Rvcj1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuY29tcG9uZW50VHlwZT1mdW5jdGlvbigpe30s
dC5wcm90b3R5cGUubmdDb250ZW50U2VsZWN0b3JzPWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5p
bnB1dHM9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLm91dHB1dHM9ZnVuY3Rpb24oKXt9LHQucHJv
dG90eXBlLmNyZWF0ZT1mdW5jdGlvbih0LGUsbixyKXt9LHR9KCksZWk9Im5nQ29tcG9uZW50Iixu
aT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLnJlc29sdmVDb21w
b25lbnRGYWN0b3J5PWZ1bmN0aW9uKHQpe3Rocm93IFEodCl9LHR9KCkscmk9ZnVuY3Rpb24oKXtm
dW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeT1m
dW5jdGlvbih0KXt9LHR9KCk7cmkuTlVMTD1uZXcgbmk7dmFyIG9pLGlpLGFpPWZ1bmN0aW9uKCl7
ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5fcGFyZW50PWUsdGhpcy5fbmdNb2R1bGU9bix0aGlzLl9m
YWN0b3JpZXM9bmV3IE1hcDtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG89dFtyXTt0
aGlzLl9mYWN0b3JpZXMuc2V0KG8uY29tcG9uZW50VHlwZSxvKX19cmV0dXJuIHQucHJvdG90eXBl
LnJlc29sdmVDb21wb25lbnRGYWN0b3J5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2ZhY3Rvcmll
cy5nZXQodCk7aWYoIWUmJnRoaXMuX3BhcmVudCYmKGU9dGhpcy5fcGFyZW50LnJlc29sdmVDb21w
b25lbnRGYWN0b3J5KHQpKSwhZSl0aHJvdyBRKHQpO3JldHVybiBuZXcgc2koZSx0aGlzLl9uZ01v
ZHVsZSl9LHR9KCksc2k9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0
aGlzKXx8dGhpcztyZXR1cm4gci5mYWN0b3J5PWUsci5uZ01vZHVsZT1uLHJ9cmV0dXJuIExyLmEo
ZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInNlbGVjdG9yIix7Z2V0OmZ1
bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmFjdG9yeS5zZWxlY3Rvcn0sZW51bWVyYWJsZTohMCxjb25m
aWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImNvbXBvbmVu
dFR5cGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mYWN0b3J5LmNvbXBvbmVudFR5cGV9
LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUu
cHJvdG90eXBlLCJuZ0NvbnRlbnRTZWxlY3RvcnMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhp
cy5mYWN0b3J5Lm5nQ29udGVudFNlbGVjdG9yc30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6
ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImlucHV0cyIse2dldDpmdW5j
dGlvbigpe3JldHVybiB0aGlzLmZhY3RvcnkuaW5wdXRzfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3Vy
YWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwib3V0cHV0cyIse2dl
dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZhY3Rvcnkub3V0cHV0c30sZW51bWVyYWJsZTohMCxj
b25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24odCxlLG4scil7cmV0
dXJuIHRoaXMuZmFjdG9yeS5jcmVhdGUodCxlLG4scnx8dGhpcy5uZ01vZHVsZSl9LGV9KHRpKSx1
aT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmluamVjdG9yPWZ1
bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9ZnVuY3Rpb24o
KXt9LHQucHJvdG90eXBlLmluc3RhbmNlPWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5kZXN0cm95
PWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7fSx0fSgpLGNp
PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUubW9kdWxlVHlwZT1m
dW5jdGlvbigpe30sdC5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQpe30sdH0oKSxsaT1KKCks
cGk9bGk/JDpmdW5jdGlvbih0LGUpe3JldHVybiB0dH0sZmk9bGk/WDpmdW5jdGlvbih0LGUpe3Jl
dHVybiBlfSxkaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZvaWQgMD09PWUmJihlPSExKTt2
YXIgbj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uX19pc0FzeW5jPWUsbn1yZXR1cm4gTHIu
YShlLHQpLGUucHJvdG90eXBlLmVtaXQ9ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUubmV4dC5jYWxs
KHRoaXMsZSl9LGUucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbihlLG4scil7dmFyIG8saT1m
dW5jdGlvbih0KXtyZXR1cm4gbnVsbH0sYT1mdW5jdGlvbigpe3JldHVybiBudWxsfTtyZXR1cm4g
ZSYmIm9iamVjdCI9PXR5cGVvZiBlPyhvPXRoaXMuX19pc0FzeW5jP2Z1bmN0aW9uKHQpe3NldFRp
bWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gZS5uZXh0KHQpfSl9OmZ1bmN0aW9uKHQpe2UubmV4dCh0
KX0sZS5lcnJvciYmKGk9dGhpcy5fX2lzQXN5bmM/ZnVuY3Rpb24odCl7c2V0VGltZW91dChmdW5j
dGlvbigpe3JldHVybiBlLmVycm9yKHQpfSl9OmZ1bmN0aW9uKHQpe2UuZXJyb3IodCl9KSxlLmNv
bXBsZXRlJiYoYT10aGlzLl9faXNBc3luYz9mdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24o
KXtyZXR1cm4gZS5jb21wbGV0ZSgpfSl9OmZ1bmN0aW9uKCl7ZS5jb21wbGV0ZSgpfSkpOihvPXRo
aXMuX19pc0FzeW5jP2Z1bmN0aW9uKHQpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gZSh0
KX0pfTpmdW5jdGlvbih0KXtlKHQpfSxuJiYoaT10aGlzLl9faXNBc3luYz9mdW5jdGlvbih0KXtz
ZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG4odCl9KX06ZnVuY3Rpb24odCl7bih0KX0pLHIm
JihhPXRoaXMuX19pc0FzeW5jP2Z1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVy
biByKCl9KX06ZnVuY3Rpb24oKXtyKCl9KSksdC5wcm90b3R5cGUuc3Vic2NyaWJlLmNhbGwodGhp
cyxvLGksYSl9LGV9KHFyLlN1YmplY3QpLGhpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIg
ZT10LmVuYWJsZUxvbmdTdGFja1RyYWNlLG49dm9pZCAwIT09ZSYmZTtpZih0aGlzLmhhc1BlbmRp
bmdNaWNyb3Rhc2tzPSExLHRoaXMuaGFzUGVuZGluZ01hY3JvdGFza3M9ITEsdGhpcy5pc1N0YWJs
ZT0hMCx0aGlzLm9uVW5zdGFibGU9bmV3IGRpKCExKSx0aGlzLm9uTWljcm90YXNrRW1wdHk9bmV3
IGRpKCExKSx0aGlzLm9uU3RhYmxlPW5ldyBkaSghMSksdGhpcy5vbkVycm9yPW5ldyBkaSghMSks
InVuZGVmaW5lZCI9PXR5cGVvZiBab25lKXRocm93IG5ldyBFcnJvcigiQW5ndWxhciByZXF1aXJl
cyBab25lLmpzIHByb2x5ZmlsbC4iKTtab25lLmFzc2VydFpvbmVQYXRjaGVkKCk7dmFyIHI9dGhp
cztyLl9uZXN0aW5nPTAsci5fb3V0ZXI9ci5faW5uZXI9Wm9uZS5jdXJyZW50LFpvbmUud3RmWm9u
ZVNwZWMmJihyLl9pbm5lcj1yLl9pbm5lci5mb3JrKFpvbmUud3RmWm9uZVNwZWMpKSxuJiZab25l
LmxvbmdTdGFja1RyYWNlWm9uZVNwZWMmJihyLl9pbm5lcj1yLl9pbm5lci5mb3JrKFpvbmUubG9u
Z1N0YWNrVHJhY2Vab25lU3BlYykpLG50KHIpfXJldHVybiB0LmlzSW5Bbmd1bGFyWm9uZT1mdW5j
dGlvbigpe3JldHVybiEwPT09Wm9uZS5jdXJyZW50LmdldCgiaXNBbmd1bGFyWm9uZSIpfSx0LmFz
c2VydEluQW5ndWxhclpvbmU9ZnVuY3Rpb24oKXtpZighdC5pc0luQW5ndWxhclpvbmUoKSl0aHJv
dyBuZXcgRXJyb3IoIkV4cGVjdGVkIHRvIGJlIGluIEFuZ3VsYXIgWm9uZSwgYnV0IGl0IGlzIG5v
dCEiKX0sdC5hc3NlcnROb3RJbkFuZ3VsYXJab25lPWZ1bmN0aW9uKCl7aWYodC5pc0luQW5ndWxh
clpvbmUoKSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHRvIG5vdCBiZSBpbiBBbmd1bGFyIFpv
bmUsIGJ1dCBpdCBpcyEiKX0sdC5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlz
Ll9pbm5lci5ydW4odCl9LHQucHJvdG90eXBlLnJ1bkd1YXJkZWQ9ZnVuY3Rpb24odCl7cmV0dXJu
IHRoaXMuX2lubmVyLnJ1bkd1YXJkZWQodCl9LHQucHJvdG90eXBlLnJ1bk91dHNpZGVBbmd1bGFy
PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9vdXRlci5ydW4odCl9LHR9KCkseWk9ZnVuY3Rpb24o
KXtmdW5jdGlvbiB0KHQpe3RoaXMuX25nWm9uZT10LHRoaXMuX3BlbmRpbmdDb3VudD0wLHRoaXMu
X2lzWm9uZVN0YWJsZT0hMCx0aGlzLl9kaWRXb3JrPSExLHRoaXMuX2NhbGxiYWNrcz1bXSx0aGlz
Ll93YXRjaEFuZ3VsYXJFdmVudHMoKX1yZXR1cm4gdC5wcm90b3R5cGUuX3dhdGNoQW5ndWxhckV2
ZW50cz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fbmdab25lLm9uVW5zdGFibGUuc3Vic2Ny
aWJlKHtuZXh0OmZ1bmN0aW9uKCl7dC5fZGlkV29yaz0hMCx0Ll9pc1pvbmVTdGFibGU9ITF9fSks
dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7dC5fbmdab25lLm9uU3Rh
YmxlLnN1YnNjcmliZSh7bmV4dDpmdW5jdGlvbigpe2hpLmFzc2VydE5vdEluQW5ndWxhclpvbmUo
KSxvKGZ1bmN0aW9uKCl7dC5faXNab25lU3RhYmxlPSEwLHQuX3J1bkNhbGxiYWNrc0lmUmVhZHko
KX0pfX0pfSl9LHQucHJvdG90eXBlLmluY3JlYXNlUGVuZGluZ1JlcXVlc3RDb3VudD1mdW5jdGlv
bigpe3JldHVybiB0aGlzLl9wZW5kaW5nQ291bnQrPTEsdGhpcy5fZGlkV29yaz0hMCx0aGlzLl9w
ZW5kaW5nQ291bnR9LHQucHJvdG90eXBlLmRlY3JlYXNlUGVuZGluZ1JlcXVlc3RDb3VudD1mdW5j
dGlvbigpe2lmKHRoaXMuX3BlbmRpbmdDb3VudC09MSx0aGlzLl9wZW5kaW5nQ291bnQ8MCl0aHJv
dyBuZXcgRXJyb3IoInBlbmRpbmcgYXN5bmMgcmVxdWVzdHMgYmVsb3cgemVybyIpO3JldHVybiB0
aGlzLl9ydW5DYWxsYmFja3NJZlJlYWR5KCksdGhpcy5fcGVuZGluZ0NvdW50fSx0LnByb3RvdHlw
ZS5pc1N0YWJsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1pvbmVTdGFibGUmJjA9PXRoaXMu
X3BlbmRpbmdDb3VudCYmIXRoaXMuX25nWm9uZS5oYXNQZW5kaW5nTWFjcm90YXNrc30sdC5wcm90
b3R5cGUuX3J1bkNhbGxiYWNrc0lmUmVhZHk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuaXNT
dGFibGUoKT9vKGZ1bmN0aW9uKCl7Zm9yKDswIT09dC5fY2FsbGJhY2tzLmxlbmd0aDspdC5fY2Fs
bGJhY2tzLnBvcCgpKHQuX2RpZFdvcmspO3QuX2RpZFdvcms9ITF9KTp0aGlzLl9kaWRXb3JrPSEw
fSx0LnByb3RvdHlwZS53aGVuU3RhYmxlPWZ1bmN0aW9uKHQpe3RoaXMuX2NhbGxiYWNrcy5wdXNo
KHQpLHRoaXMuX3J1bkNhbGxiYWNrc0lmUmVhZHkoKX0sdC5wcm90b3R5cGUuZ2V0UGVuZGluZ1Jl
cXVlc3RDb3VudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wZW5kaW5nQ291bnR9LHQucHJvdG90
eXBlLmZpbmRCaW5kaW5ncz1mdW5jdGlvbih0LGUsbil7cmV0dXJuW119LHQucHJvdG90eXBlLmZp
bmRQcm92aWRlcnM9ZnVuY3Rpb24odCxlLG4pe3JldHVybltdfSx0fSgpO3lpLmRlY29yYXRvcnM9
W3t0eXBlOnlvfV0seWkuY3RvclBhcmFtZXRlcnM9ZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6aGl9
XX07dmFyIG1pPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX2FwcGxpY2F0aW9ucz1uZXcg
TWFwLF9pLmFkZFRvV2luZG93KHRoaXMpfXJldHVybiB0LnByb3RvdHlwZS5yZWdpc3RlckFwcGxp
Y2F0aW9uPWZ1bmN0aW9uKHQsZSl7dGhpcy5fYXBwbGljYXRpb25zLnNldCh0LGUpfSx0LnByb3Rv
dHlwZS5nZXRUZXN0YWJpbGl0eT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYXBwbGljYXRpb25z
LmdldCh0KXx8bnVsbH0sdC5wcm90b3R5cGUuZ2V0QWxsVGVzdGFiaWxpdGllcz1mdW5jdGlvbigp
e3JldHVybiBBcnJheS5mcm9tKHRoaXMuX2FwcGxpY2F0aW9ucy52YWx1ZXMoKSl9LHQucHJvdG90
eXBlLmdldEFsbFJvb3RFbGVtZW50cz1mdW5jdGlvbigpe3JldHVybiBBcnJheS5mcm9tKHRoaXMu
X2FwcGxpY2F0aW9ucy5rZXlzKCkpfSx0LnByb3RvdHlwZS5maW5kVGVzdGFiaWxpdHlJblRyZWU9
ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9ITApLF9pLmZpbmRUZXN0YWJpbGl0
eUluVHJlZSh0aGlzLHQsZSl9LHR9KCk7bWkuZGVjb3JhdG9ycz1be3R5cGU6eW99XSxtaS5jdG9y
UGFyYW1ldGVycz1mdW5jdGlvbigpe3JldHVybltdfTt2YXIgZ2ksdmk9ZnVuY3Rpb24oKXtmdW5j
dGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5hZGRUb1dpbmRvdz1mdW5jdGlvbih0KXt9LHQu
cHJvdG90eXBlLmZpbmRUZXN0YWJpbGl0eUluVHJlZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIG51
bGx9LHR9KCksX2k9bmV3IHZpLGJpPSEwLHdpPSExLENpPW5ldyBacigiQWxsb3dNdWx0aXBsZVRv
a2VuIiksRWk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5uYW1lPXQsdGhpcy50b2tl
bj1lfXJldHVybiB0fSgpLE9pPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90
b3R5cGUuYm9vdHN0cmFwTW9kdWxlRmFjdG9yeT1mdW5jdGlvbih0KXt9LHQucHJvdG90eXBlLmJv
b3RzdHJhcE1vZHVsZT1mdW5jdGlvbih0LGUpe30sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0
aW9uKHQpe30sdC5wcm90b3R5cGUuaW5qZWN0b3I9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmRl
c3Ryb3k9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmRlc3Ryb3llZD1mdW5jdGlvbigpe30sdH0o
KSx4aT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZhciBuPXQuY2FsbCh0aGlzKXx8dGhpczty
ZXR1cm4gbi5faW5qZWN0b3I9ZSxuLl9tb2R1bGVzPVtdLG4uX2Rlc3Ryb3lMaXN0ZW5lcnM9W10s
bi5fZGVzdHJveWVkPSExLG59cmV0dXJuIExyLmEoZSx0KSxlLnByb3RvdHlwZS5vbkRlc3Ryb3k9
ZnVuY3Rpb24odCl7dGhpcy5fZGVzdHJveUxpc3RlbmVycy5wdXNoKHQpfSxPYmplY3QuZGVmaW5l
UHJvcGVydHkoZS5wcm90b3R5cGUsImluamVjdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRo
aXMuX2luamVjdG9yfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJu
IHRoaXMuX2Rlc3Ryb3llZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3Rv
dHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7aWYodGhpcy5fZGVzdHJveWVkKXRocm93IG5ldyBFcnJv
cigiVGhlIHBsYXRmb3JtIGhhcyBhbHJlYWR5IGJlZW4gZGVzdHJveWVkISIpO3RoaXMuX21vZHVs
ZXMuc2xpY2UoKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRlc3Ryb3koKX0pLHRoaXMu
X2Rlc3Ryb3lMaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5f
ZGVzdHJveWVkPSEwfSxlLnByb3RvdHlwZS5ib290c3RyYXBNb2R1bGVGYWN0b3J5PWZ1bmN0aW9u
KHQpe3JldHVybiB0aGlzLl9ib290c3RyYXBNb2R1bGVGYWN0b3J5V2l0aFpvbmUodCl9LGUucHJv
dG90eXBlLl9ib290c3RyYXBNb2R1bGVGYWN0b3J5V2l0aFpvbmU9ZnVuY3Rpb24odCxlKXt2YXIg
bj10aGlzO3JldHVybiBlfHwoZT1uZXcgaGkoe2VuYWJsZUxvbmdTdGFja1RyYWNlOnN0KCl9KSks
ZS5ydW4oZnVuY3Rpb24oKXt2YXIgcj1Mby5yZXNvbHZlQW5kQ3JlYXRlKFt7cHJvdmlkZTpoaSx1
c2VWYWx1ZTplfV0sbi5pbmplY3Rvciksbz10LmNyZWF0ZShyKSxpPW8uaW5qZWN0b3IuZ2V0KFBv
LG51bGwpO2lmKCFpKXRocm93IG5ldyBFcnJvcigiTm8gRXJyb3JIYW5kbGVyLiBJcyBwbGF0Zm9y
bSBtb2R1bGUgKEJyb3dzZXJNb2R1bGUpIGluY2x1ZGVkPyIpO3JldHVybiBvLm9uRGVzdHJveShm
dW5jdGlvbigpe3JldHVybiBkdChuLl9tb2R1bGVzLG8pfSksZS5vbkVycm9yLnN1YnNjcmliZSh7
bmV4dDpmdW5jdGlvbih0KXtpLmhhbmRsZUVycm9yKHQpfX0pLGZ0KGksZnVuY3Rpb24oKXt2YXIg
dD1vLmluamVjdG9yLmdldChxbyk7cmV0dXJuIHQucnVuSW5pdGlhbGl6ZXJzKCksdC5kb25lUHJv
bWlzZS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIG4uX21vZHVsZURvQm9vdHN0cmFwKG8pLG99KX0p
fSl9LGUucHJvdG90eXBlLmJvb3RzdHJhcE1vZHVsZT1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lk
IDA9PT1lJiYoZT1bXSksdGhpcy5fYm9vdHN0cmFwTW9kdWxlV2l0aFpvbmUodCxlKX0sZS5wcm90
b3R5cGUuX2Jvb3RzdHJhcE1vZHVsZVdpdGhab25lPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlz
O3JldHVybiB2b2lkIDA9PT1lJiYoZT1bXSksdGhpcy5pbmplY3Rvci5nZXQoJG8pLmNyZWF0ZUNv
bXBpbGVyKEFycmF5LmlzQXJyYXkoZSk/ZTpbZV0pLmNvbXBpbGVNb2R1bGVBc3luYyh0KS50aGVu
KGZ1bmN0aW9uKHQpe3JldHVybiByLl9ib290c3RyYXBNb2R1bGVGYWN0b3J5V2l0aFpvbmUodCxu
KX0pfSxlLnByb3RvdHlwZS5fbW9kdWxlRG9Cb290c3RyYXA9ZnVuY3Rpb24odCl7dmFyIGU9dC5p
bmplY3Rvci5nZXQoUGkpO2lmKHQuX2Jvb3RzdHJhcENvbXBvbmVudHMubGVuZ3RoPjApdC5fYm9v
dHN0cmFwQ29tcG9uZW50cy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmJvb3RzdHJhcCh0
KX0pO2Vsc2V7aWYoIXQuaW5zdGFuY2UubmdEb0Jvb3RzdHJhcCl0aHJvdyBuZXcgRXJyb3IoIlRo
ZSBtb2R1bGUgIithKHQuaW5zdGFuY2UuY29uc3RydWN0b3IpKycgd2FzIGJvb3RzdHJhcHBlZCwg
YnV0IGl0IGRvZXMgbm90IGRlY2xhcmUgIkBOZ01vZHVsZS5ib290c3RyYXAiIGNvbXBvbmVudHMg
bm9yIGEgIm5nRG9Cb290c3RyYXAiIG1ldGhvZC4gUGxlYXNlIGRlZmluZSBvbmUgb2YgdGhlc2Uu
Jyk7dC5pbnN0YW5jZS5uZ0RvQm9vdHN0cmFwKGUpfXRoaXMuX21vZHVsZXMucHVzaCh0KX0sZX0o
T2kpO3hpLmRlY29yYXRvcnM9W3t0eXBlOnlvfV0seGkuY3RvclBhcmFtZXRlcnM9ZnVuY3Rpb24o
KXtyZXR1cm5be3R5cGU6Q299XX07dmFyIFBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1
cm4gdC5wcm90b3R5cGUuYm9vdHN0cmFwPWZ1bmN0aW9uKHQsZSl7fSx0LnByb3RvdHlwZS50aWNr
PWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5jb21wb25lbnRUeXBlcz1mdW5jdGlvbigpe30sdC5w
cm90b3R5cGUuY29tcG9uZW50cz1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuYXR0YWNoVmlldz1m
dW5jdGlvbih0KXt9LHQucHJvdG90eXBlLmRldGFjaFZpZXc9ZnVuY3Rpb24odCl7fSx0LnByb3Rv
dHlwZS52aWV3Q291bnQ9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmlzU3RhYmxlPWZ1bmN0aW9u
KCl7fSx0fSgpLFNpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyLGksYSxzLHUpe3ZhciBjPXQu
Y2FsbCh0aGlzKXx8dGhpcztjLl96b25lPWUsYy5fY29uc29sZT1yLGMuX2luamVjdG9yPWksYy5f
ZXhjZXB0aW9uSGFuZGxlcj1hLGMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1zLGMuX2luaXRT
dGF0dXM9dSxjLl9ib290c3RyYXBMaXN0ZW5lcnM9W10sYy5fcm9vdENvbXBvbmVudHM9W10sYy5f
cm9vdENvbXBvbmVudFR5cGVzPVtdLGMuX3ZpZXdzPVtdLGMuX3J1bm5pbmdUaWNrPSExLGMuX2Vu
Zm9yY2VOb05ld0NoYW5nZXM9ITEsYy5fc3RhYmxlPSEwLGMuX2VuZm9yY2VOb05ld0NoYW5nZXM9
c3QoKSxjLl96b25lLm9uTWljcm90YXNrRW1wdHkuc3Vic2NyaWJlKHtuZXh0OmZ1bmN0aW9uKCl7
Yy5fem9uZS5ydW4oZnVuY3Rpb24oKXtjLnRpY2soKX0pfX0pO3ZhciBsPW5ldyBCci5PYnNlcnZh
YmxlKGZ1bmN0aW9uKHQpe2MuX3N0YWJsZT1jLl96b25lLmlzU3RhYmxlJiYhYy5fem9uZS5oYXNQ
ZW5kaW5nTWFjcm90YXNrcyYmIWMuX3pvbmUuaGFzUGVuZGluZ01pY3JvdGFza3MsYy5fem9uZS5y
dW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3QubmV4dChjLl9zdGFibGUpLHQuY29tcGxldGUo
KX0pfSkscD1uZXcgQnIuT2JzZXJ2YWJsZShmdW5jdGlvbih0KXt2YXIgZT1jLl96b25lLm9uU3Rh
YmxlLnN1YnNjcmliZShmdW5jdGlvbigpe2hpLmFzc2VydE5vdEluQW5ndWxhclpvbmUoKSxvKGZ1
bmN0aW9uKCl7Yy5fc3RhYmxlfHxjLl96b25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzfHxjLl96b25l
Lmhhc1BlbmRpbmdNaWNyb3Rhc2tzfHwoYy5fc3RhYmxlPSEwLHQubmV4dCghMCkpfSl9KSxuPWMu
X3pvbmUub25VbnN0YWJsZS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtoaS5hc3NlcnRJbkFuZ3VsYXJa
b25lKCksYy5fc3RhYmxlJiYoYy5fc3RhYmxlPSExLGMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIo
ZnVuY3Rpb24oKXt0Lm5leHQoITEpfSkpfSk7cmV0dXJuIGZ1bmN0aW9uKCl7ZS51bnN1YnNjcmli
ZSgpLG4udW5zdWJzY3JpYmUoKX19KTtyZXR1cm4gYy5faXNTdGFibGU9bi5pKFVyLm1lcmdlKShs
LEdyLnNoYXJlLmNhbGwocCkpLGN9cmV0dXJuIExyLmEoZSx0KSxlLnByb3RvdHlwZS5hdHRhY2hW
aWV3PWZ1bmN0aW9uKHQpe3ZhciBlPXQ7dGhpcy5fdmlld3MucHVzaChlKSxlLmF0dGFjaFRvQXBw
UmVmKHRoaXMpfSxlLnByb3RvdHlwZS5kZXRhY2hWaWV3PWZ1bmN0aW9uKHQpe3ZhciBlPXQ7ZHQo
dGhpcy5fdmlld3MsZSksZS5kZXRhY2hGcm9tQXBwUmVmKCl9LGUucHJvdG90eXBlLmJvb3RzdHJh
cD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7aWYoIXRoaXMuX2luaXRTdGF0dXMuZG9uZSl0aHJv
dyBuZXcgRXJyb3IoIkNhbm5vdCBib290c3RyYXAgYXMgdGhlcmUgYXJlIHN0aWxsIGFzeW5jaHJv
bm91cyBpbml0aWFsaXplcnMgcnVubmluZy4gQm9vdHN0cmFwIGNvbXBvbmVudHMgaW4gdGhlIGBu
Z0RvQm9vdHN0cmFwYCBtZXRob2Qgb2YgdGhlIHJvb3QgbW9kdWxlLiIpO3ZhciByO3I9dCBpbnN0
YW5jZW9mIHRpP3Q6dGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25l
bnRGYWN0b3J5KHQpLHRoaXMuX3Jvb3RDb21wb25lbnRUeXBlcy5wdXNoKHIuY29tcG9uZW50VHlw
ZSk7dmFyIG89ciBpbnN0YW5jZW9mIHNpP251bGw6dGhpcy5faW5qZWN0b3IuZ2V0KHVpKSxpPWV8
fHIuc2VsZWN0b3IsYT1yLmNyZWF0ZShDby5OVUxMLFtdLGksbyk7YS5vbkRlc3Ryb3koZnVuY3Rp
b24oKXtuLl91bmxvYWRDb21wb25lbnQoYSl9KTt2YXIgcz1hLmluamVjdG9yLmdldCh5aSxudWxs
KTtyZXR1cm4gcyYmYS5pbmplY3Rvci5nZXQobWkpLnJlZ2lzdGVyQXBwbGljYXRpb24oYS5sb2Nh
dGlvbi5uYXRpdmVFbGVtZW50LHMpLHRoaXMuX2xvYWRDb21wb25lbnQoYSksc3QoKSYmdGhpcy5f
Y29uc29sZS5sb2coIkFuZ3VsYXIgaXMgcnVubmluZyBpbiB0aGUgZGV2ZWxvcG1lbnQgbW9kZS4g
Q2FsbCBlbmFibGVQcm9kTW9kZSgpIHRvIGVuYWJsZSB0aGUgcHJvZHVjdGlvbiBtb2RlLiIpLGF9
LGUucHJvdG90eXBlLl9sb2FkQ29tcG9uZW50PWZ1bmN0aW9uKHQpe3RoaXMuYXR0YWNoVmlldyh0
Lmhvc3RWaWV3KSx0aGlzLnRpY2soKSx0aGlzLl9yb290Q29tcG9uZW50cy5wdXNoKHQpLHRoaXMu
X2luamVjdG9yLmdldChXbyxbXSkuY29uY2F0KHRoaXMuX2Jvb3RzdHJhcExpc3RlbmVycykuZm9y
RWFjaChmdW5jdGlvbihlKXtyZXR1cm4gZSh0KX0pfSxlLnByb3RvdHlwZS5fdW5sb2FkQ29tcG9u
ZW50PWZ1bmN0aW9uKHQpe3RoaXMuZGV0YWNoVmlldyh0Lmhvc3RWaWV3KSxkdCh0aGlzLl9yb290
Q29tcG9uZW50cyx0KX0sZS5wcm90b3R5cGUudGljaz1mdW5jdGlvbigpe2lmKHRoaXMuX3J1bm5p
bmdUaWNrKXRocm93IG5ldyBFcnJvcigiQXBwbGljYXRpb25SZWYudGljayBpcyBjYWxsZWQgcmVj
dXJzaXZlbHkiKTt2YXIgdD1lLl90aWNrU2NvcGUoKTt0cnl7dGhpcy5fcnVubmluZ1RpY2s9ITAs
dGhpcy5fdmlld3MuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5kZXRlY3RDaGFuZ2VzKCl9
KSx0aGlzLl9lbmZvcmNlTm9OZXdDaGFuZ2VzJiZ0aGlzLl92aWV3cy5mb3JFYWNoKGZ1bmN0aW9u
KHQpe3JldHVybiB0LmNoZWNrTm9DaGFuZ2VzKCl9KX1jYXRjaCh0KXt0aGlzLl9leGNlcHRpb25I
YW5kbGVyLmhhbmRsZUVycm9yKHQpfWZpbmFsbHl7dGhpcy5fcnVubmluZ1RpY2s9ITEsZmkodCl9
fSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX3ZpZXdzLnNsaWNlKCku
Zm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5kZXN0cm95KCl9KX0sT2JqZWN0LmRlZmluZVBy
b3BlcnR5KGUucHJvdG90eXBlLCJ2aWV3Q291bnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhp
cy5fdmlld3MubGVuZ3RofSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiY29tcG9uZW50VHlwZXMiLHtnZXQ6ZnVuY3Rpb24o
KXtyZXR1cm4gdGhpcy5fcm9vdENvbXBvbmVudFR5cGVzfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3Vy
YWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiY29tcG9uZW50cyIs
e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb290Q29tcG9uZW50c30sZW51bWVyYWJsZToh
MCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImlz
U3RhYmxlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzU3RhYmxlfSxlbnVtZXJhYmxl
OiEwLGNvbmZpZ3VyYWJsZTohMH0pLGV9KFBpKTtTaS5fdGlja1Njb3BlPXBpKCJBcHBsaWNhdGlv
blJlZiN0aWNrKCkiKSxTaS5kZWNvcmF0b3JzPVt7dHlwZTp5b31dLFNpLmN0b3JQYXJhbWV0ZXJz
PWZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmhpfSx7dHlwZTpRb30se3R5cGU6Q299LHt0eXBlOlBv
fSx7dHlwZTpyaX0se3R5cGU6cW99XX07LyoqCisgKiBAbGljZW5zZQorICogQ29weXJpZ2h0IEdv
b2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyAq
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UK
KyAqLworLyoqCisgKiBAbGljZW5zZQorICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCisgKgorICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyAqIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKKyAqLwordmFyIEFpPShmdW5j
dGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixvLGkpe3RoaXMuaWQ9dCx0aGlzLnRlbXBsYXRlVXJs
PWUsdGhpcy5zbG90Q291bnQ9bix0aGlzLmVuY2Fwc3VsYXRpb249cix0aGlzLnN0eWxlcz1vLHRo
aXMuYW5pbWF0aW9ucz1pfX0oKSxmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9dC5wcm90b3R5cGUu
aW5qZWN0b3I9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmNvbXBvbmVudD1mdW5jdGlvbigpe30s
dC5wcm90b3R5cGUucHJvdmlkZXJUb2tlbnM9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLnJlZmVy
ZW5jZXM9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmNvbnRleHQ9ZnVuY3Rpb24oKXt9LHQucHJv
dG90eXBlLnNvdXJjZT1mdW5jdGlvbigpe319KCksZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJl
dHVybiB0LnByb3RvdHlwZS5zZWxlY3RSb290RWxlbWVudD1mdW5jdGlvbih0LGUpe30sdC5wcm90
b3R5cGUuY3JlYXRlRWxlbWVudD1mdW5jdGlvbih0LGUsbil7fSx0LnByb3RvdHlwZS5jcmVhdGVW
aWV3Um9vdD1mdW5jdGlvbih0KXt9LHQucHJvdG90eXBlLmNyZWF0ZVRlbXBsYXRlQW5jaG9yPWZ1
bmN0aW9uKHQsZSl7fSx0LnByb3RvdHlwZS5jcmVhdGVUZXh0PWZ1bmN0aW9uKHQsZSxuKXt9LHQu
cHJvdG90eXBlLnByb2plY3ROb2Rlcz1mdW5jdGlvbih0LGUpe30sdC5wcm90b3R5cGUuYXR0YWNo
Vmlld0FmdGVyPWZ1bmN0aW9uKHQsZSl7fSx0LnByb3RvdHlwZS5kZXRhY2hWaWV3PWZ1bmN0aW9u
KHQpe30sdC5wcm90b3R5cGUuZGVzdHJveVZpZXc9ZnVuY3Rpb24odCxlKXt9LHQucHJvdG90eXBl
Lmxpc3Rlbj1mdW5jdGlvbih0LGUsbil7fSx0LnByb3RvdHlwZS5saXN0ZW5HbG9iYWw9ZnVuY3Rp
b24odCxlLG4pe30sdC5wcm90b3R5cGUuc2V0RWxlbWVudFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxu
KXt9LHQucHJvdG90eXBlLnNldEVsZW1lbnRBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlLG4pe30sdC5w
cm90b3R5cGUuc2V0QmluZGluZ0RlYnVnSW5mbz1mdW5jdGlvbih0LGUsbil7fSx0LnByb3RvdHlw
ZS5zZXRFbGVtZW50Q2xhc3M9ZnVuY3Rpb24odCxlLG4pe30sdC5wcm90b3R5cGUuc2V0RWxlbWVu
dFN0eWxlPWZ1bmN0aW9uKHQsZSxuKXt9LHQucHJvdG90eXBlLmludm9rZUVsZW1lbnRNZXRob2Q9
ZnVuY3Rpb24odCxlLG4pe30sdC5wcm90b3R5cGUuc2V0VGV4dD1mdW5jdGlvbih0LGUpe30sdC5w
cm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbih0LGUsbixyLG8saSxhKXt9LHR9KCkpLFRpPShuZXcg
WnIoIlJlbmRlcmVyMkludGVyY2VwdG9yIiksZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXQucHJv
dG90eXBlLnJlbmRlckNvbXBvbmVudD1mdW5jdGlvbih0KXt9fSgpLGZ1bmN0aW9uKCl7ZnVuY3Rp
b24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlUmVuZGVyZXI9ZnVuY3Rpb24odCxlKXt9
LHQucHJvdG90eXBlLmJlZ2luPWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24o
KXt9LHQucHJvdG90eXBlLndoZW5SZW5kZXJpbmdEb25lPWZ1bmN0aW9uKCl7fSx0fSgpKSxraT17
fTtraS5JbXBvcnRhbnQ9MSxraS5EYXNoQ2FzZT0yLGtpW2tpLkltcG9ydGFudF09IkltcG9ydGFu
dCIsa2lba2kuRGFzaENhc2VdPSJEYXNoQ2FzZSI7dmFyIFZpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24g
dCgpe31yZXR1cm4gdC5wcm90b3R5cGUuZGF0YT1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuZGVz
dHJveT1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuY3JlYXRlRWxlbWVudD1mdW5jdGlvbih0LGUp
e30sdC5wcm90b3R5cGUuY3JlYXRlQ29tbWVudD1mdW5jdGlvbih0KXt9LHQucHJvdG90eXBlLmNy
ZWF0ZVRleHQ9ZnVuY3Rpb24odCl7fSx0LnByb3RvdHlwZS5hcHBlbmRDaGlsZD1mdW5jdGlvbih0
LGUpe30sdC5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlPWZ1bmN0aW9uKHQsZSxuKXt9LHQucHJvdG90
eXBlLnJlbW92ZUNoaWxkPWZ1bmN0aW9uKHQsZSl7fSx0LnByb3RvdHlwZS5zZWxlY3RSb290RWxl
bWVudD1mdW5jdGlvbih0KXt9LHQucHJvdG90eXBlLnBhcmVudE5vZGU9ZnVuY3Rpb24odCl7fSx0
LnByb3RvdHlwZS5uZXh0U2libGluZz1mdW5jdGlvbih0KXt9LHQucHJvdG90eXBlLnNldEF0dHJp
YnV0ZT1mdW5jdGlvbih0LGUsbixyKXt9LHQucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZT1mdW5j
dGlvbih0LGUsbil7fSx0LnByb3RvdHlwZS5hZGRDbGFzcz1mdW5jdGlvbih0LGUpe30sdC5wcm90
b3R5cGUucmVtb3ZlQ2xhc3M9ZnVuY3Rpb24odCxlKXt9LHQucHJvdG90eXBlLnNldFN0eWxlPWZ1
bmN0aW9uKHQsZSxuLHIpe30sdC5wcm90b3R5cGUucmVtb3ZlU3R5bGU9ZnVuY3Rpb24odCxlLG4p
e30sdC5wcm90b3R5cGUuc2V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLG4pe30sdC5wcm90b3R5cGUu
c2V0VmFsdWU9ZnVuY3Rpb24odCxlKXt9LHQucHJvdG90eXBlLmxpc3Rlbj1mdW5jdGlvbih0LGUs
bil7fSx0fSgpLE5pPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLm5hdGl2ZUVsZW1lbnQ9
dH1yZXR1cm4gdH0oKSxNaT0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXQucHJvdG90eXBlLmxv
YWQ9ZnVuY3Rpb24odCl7fX0oKSxuZXcgTWFwLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMu
X2RpcnR5PSEwLHRoaXMuX3Jlc3VsdHM9W10sdGhpcy5fZW1pdHRlcj1uZXcgZGl9cmV0dXJuIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY2hhbmdlcyIse2dldDpmdW5jdGlvbigp
e3JldHVybiB0aGlzLl9lbWl0dGVyfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9i
amVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibGVuZ3RoIix7Z2V0OmZ1bmN0aW9uKCl7
cmV0dXJuIHRoaXMuX3Jlc3VsdHMubGVuZ3RofSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZToh
MH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZmlyc3QiLHtnZXQ6ZnVuY3Rp
b24oKXtyZXR1cm4gdGhpcy5fcmVzdWx0c1swXX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6
ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImxhc3QiLHtnZXQ6ZnVuY3Rp
b24oKXtyZXR1cm4gdGhpcy5fcmVzdWx0c1t0aGlzLmxlbmd0aC0xXX0sZW51bWVyYWJsZTohMCxj
b25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5tYXA9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMu
X3Jlc3VsdHMubWFwKHQpfSx0LnByb3RvdHlwZS5maWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRo
aXMuX3Jlc3VsdHMuZmlsdGVyKHQpfSx0LnByb3RvdHlwZS5maW5kPWZ1bmN0aW9uKHQpe3JldHVy
biB0aGlzLl9yZXN1bHRzLmZpbmQodCl9LHQucHJvdG90eXBlLnJlZHVjZT1mdW5jdGlvbih0LGUp
e3JldHVybiB0aGlzLl9yZXN1bHRzLnJlZHVjZSh0LGUpfSx0LnByb3RvdHlwZS5mb3JFYWNoPWZ1
bmN0aW9uKHQpe3RoaXMuX3Jlc3VsdHMuZm9yRWFjaCh0KX0sdC5wcm90b3R5cGUuc29tZT1mdW5j
dGlvbih0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5zb21lKHQpfSx0LnByb3RvdHlwZS50b0FycmF5
PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuc2xpY2UoKX0sdC5wcm90b3R5cGVbcigp
XT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXN1bHRzW3IoKV0oKX0sdC5wcm90b3R5cGUudG9T
dHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy50b1N0cmluZygpfSx0LnByb3Rv
dHlwZS5yZXNldD1mdW5jdGlvbih0KXt0aGlzLl9yZXN1bHRzPWh0KHQpLHRoaXMuX2RpcnR5PSEx
fSx0LnByb3RvdHlwZS5ub3RpZnlPbkNoYW5nZXM9ZnVuY3Rpb24oKXt0aGlzLl9lbWl0dGVyLmVt
aXQodGhpcyl9LHQucHJvdG90eXBlLnNldERpcnR5PWZ1bmN0aW9uKCl7dGhpcy5fZGlydHk9ITB9
LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZGlydHkiLHtnZXQ6ZnVuY3Rpb24o
KXtyZXR1cm4gdGhpcy5fZGlydHl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdH0o
KSksamk9IiMiLFJpPSJOZ0ZhY3RvcnkiLERpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1
cm4gdH0oKSxJaT17ZmFjdG9yeVBhdGhQcmVmaXg6IiIsZmFjdG9yeVBhdGhTdWZmaXg6Ii5uZ2Zh
Y3RvcnkifSxGaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9jb21waWxlcj10LHRo
aXMuX2NvbmZpZz1lfHxJaX1yZXR1cm4gdC5wcm90b3R5cGUubG9hZD1mdW5jdGlvbih0KXtyZXR1
cm4gdGhpcy5fY29tcGlsZXIgaW5zdGFuY2VvZiBKbz90aGlzLmxvYWRGYWN0b3J5KHQpOnRoaXMu
bG9hZEFuZENvbXBpbGUodCl9LHQucHJvdG90eXBlLmxvYWRBbmRDb21waWxlPWZ1bmN0aW9uKHQp
e3ZhciBlPXRoaXMscj10LnNwbGl0KGppKSxvPXJbMF0saT1yWzFdO3JldHVybiB2b2lkIDA9PT1p
JiYoaT0iZGVmYXVsdCIpLG4oIi9mY1ciKShvKS50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiB0W2ld
fSkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4geXQodCxvLGkpfSkudGhlbihmdW5jdGlvbih0KXty
ZXR1cm4gZS5fY29tcGlsZXIuY29tcGlsZU1vZHVsZUFzeW5jKHQpfSl9LHQucHJvdG90eXBlLmxv
YWRGYWN0b3J5PWZ1bmN0aW9uKHQpe3ZhciBlPXQuc3BsaXQoamkpLHI9ZVswXSxvPWVbMV0saT1S
aTtyZXR1cm4gdm9pZCAwPT09byYmKG89ImRlZmF1bHQiLGk9IiIpLG4oIi9mY1ciKSh0aGlzLl9j
b25maWcuZmFjdG9yeVBhdGhQcmVmaXgrcit0aGlzLl9jb25maWcuZmFjdG9yeVBhdGhTdWZmaXgp
LnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIHRbbytpXX0pLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJu
IHl0KHQscixvKX0pfSx0fSgpO0ZpLmRlY29yYXRvcnM9W3t0eXBlOnlvfV0sRmkuY3RvclBhcmFt
ZXRlcnM9ZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Sm99LHt0eXBlOkRpLGRlY29yYXRvcnM6W3t0
eXBlOmhvfV19XX07LyoqCisgKiBAbGljZW5zZQorICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyAqIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKKyAqLwordmFyIEhp
PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuZWxlbWVudFJlZj1m
dW5jdGlvbigpe30sdC5wcm90b3R5cGUuY3JlYXRlRW1iZWRkZWRWaWV3PWZ1bmN0aW9uKHQpe30s
dH0oKSxMaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmVsZW1l
bnQ9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmluamVjdG9yPWZ1bmN0aW9uKCl7fSx0LnByb3Rv
dHlwZS5wYXJlbnRJbmplY3Rvcj1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rp
b24oKXt9LHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXt9LHQucHJvdG90eXBlLmxlbmd0aD1m
dW5jdGlvbigpe30sdC5wcm90b3R5cGUuY3JlYXRlRW1iZWRkZWRWaWV3PWZ1bmN0aW9uKHQsZSxu
KXt9LHQucHJvdG90eXBlLmNyZWF0ZUNvbXBvbmVudD1mdW5jdGlvbih0LGUsbixyLG8pe30sdC5w
cm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQsZSl7fSx0LnByb3RvdHlwZS5tb3ZlPWZ1bmN0aW9u
KHQsZSl7fSx0LnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKHQpe30sdC5wcm90b3R5cGUucmVt
b3ZlPWZ1bmN0aW9uKHQpe30sdC5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKHQpe30sdH0oKSxC
aT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLm1hcmtGb3JDaGVj
az1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlw
ZS5kZXRlY3RDaGFuZ2VzPWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5jaGVja05vQ2hhbmdlcz1m
dW5jdGlvbigpe30sdC5wcm90b3R5cGUucmVhdHRhY2g9ZnVuY3Rpb24oKXt9LHR9KCksVWk9ZnVu
Y3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3Vt
ZW50cyl8fHRoaXN9cmV0dXJuIExyLmEoZSx0KSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9u
KCl7fSxlLnByb3RvdHlwZS5kZXN0cm95ZWQ9ZnVuY3Rpb24oKXt9LGUucHJvdG90eXBlLm9uRGVz
dHJveT1mdW5jdGlvbih0KXt9LGV9KEJpKSxHaT0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3Jl
dHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9THIuYShlLHQpLGUu
cHJvdG90eXBlLmNvbnRleHQ9ZnVuY3Rpb24oKXt9LGUucHJvdG90eXBlLnJvb3ROb2Rlcz1mdW5j
dGlvbigpe319KFVpKSxmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLm5hbWU9dCx0aGlz
LmNhbGxiYWNrPWV9cmV0dXJuIHR9KCkpLHFpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7
dGhpcy5fZGVidWdDb250ZXh0PW4sdGhpcy5uYXRpdmVOb2RlPXQsZSYmZSBpbnN0YW5jZW9mIHpp
P2UuYWRkQ2hpbGQodGhpcyk6dGhpcy5wYXJlbnQ9bnVsbCx0aGlzLmxpc3RlbmVycz1bXX1yZXR1
cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpbmplY3RvciIse2dldDpmdW5j
dGlvbigpe3JldHVybiB0aGlzLl9kZWJ1Z0NvbnRleHQuaW5qZWN0b3J9LGVudW1lcmFibGU6ITAs
Y29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb21w
b25lbnRJbnN0YW5jZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWJ1Z0NvbnRleHQu
Y29tcG9uZW50fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eSh0LnByb3RvdHlwZSwiY29udGV4dCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlz
Ll9kZWJ1Z0NvbnRleHQuY29udGV4dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxP
YmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInJlZmVyZW5jZXMiLHtnZXQ6ZnVuY3Rp
b24oKXtyZXR1cm4gdGhpcy5fZGVidWdDb250ZXh0LnJlZmVyZW5jZXN9LGVudW1lcmFibGU6ITAs
Y29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwcm92
aWRlclRva2VucyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWJ1Z0NvbnRleHQucHJv
dmlkZXJUb2tlbnN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KHQucHJvdG90eXBlLCJzb3VyY2UiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iRGVw
cmVjYXRlZCBzaW5jZSB2NCJ9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdH0oKSx6
aT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgbz10LmNhbGwodGhpcyxlLG4scil8
fHRoaXM7cmV0dXJuIG8ucHJvcGVydGllcz17fSxvLmF0dHJpYnV0ZXM9e30sby5jbGFzc2VzPXt9
LG8uc3R5bGVzPXt9LG8uY2hpbGROb2Rlcz1bXSxvLm5hdGl2ZUVsZW1lbnQ9ZSxvfXJldHVybiBM
ci5hKGUsdCksZS5wcm90b3R5cGUuYWRkQ2hpbGQ9ZnVuY3Rpb24odCl7dCYmKHRoaXMuY2hpbGRO
b2Rlcy5wdXNoKHQpLHQucGFyZW50PXRoaXMpfSxlLnByb3RvdHlwZS5yZW1vdmVDaGlsZD1mdW5j
dGlvbih0KXt2YXIgZT10aGlzLmNoaWxkTm9kZXMuaW5kZXhPZih0KTstMSE9PWUmJih0LnBhcmVu
dD1udWxsLHRoaXMuY2hpbGROb2Rlcy5zcGxpY2UoZSwxKSl9LGUucHJvdG90eXBlLmluc2VydENo
aWxkcmVuQWZ0ZXI9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9dGhpcy5jaGlsZE5vZGVzLmlu
ZGV4T2YodCk7LTEhPT1yJiYoKG89dGhpcy5jaGlsZE5vZGVzKS5zcGxpY2UuYXBwbHkobyxbcisx
LDBdLmNvbmNhdChlKSksZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QucGFyZW50JiZ0LnBhcmVudC5y
ZW1vdmVDaGlsZCh0KSx0LnBhcmVudD1ufSkpO3ZhciBvfSxlLnByb3RvdHlwZS5pbnNlcnRCZWZv
cmU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLmNoaWxkTm9kZXMuaW5kZXhPZih0KTstMT09PW4/
dGhpcy5hZGRDaGlsZChlKTooZS5wYXJlbnQmJmUucGFyZW50LnJlbW92ZUNoaWxkKGUpLGUucGFy
ZW50PXRoaXMsdGhpcy5jaGlsZE5vZGVzLnNwbGljZShuLDAsZSkpfSxlLnByb3RvdHlwZS5xdWVy
eT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5xdWVyeUFsbCh0KVswXXx8bnVsbH0sZS5wcm90b3R5
cGUucXVlcnlBbGw9ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIG10KHRoaXMsdCxlKSxlfSxl
LnByb3RvdHlwZS5xdWVyeUFsbE5vZGVzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO3JldHVybiBndCh0
aGlzLHQsZSksZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJjaGlsZHJlbiIs
e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkTm9kZXMuZmlsdGVyKGZ1bmN0aW9uKHQp
e3JldHVybiB0IGluc3RhbmNlb2YgZX0pfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0p
LGUucHJvdG90eXBlLnRyaWdnZXJFdmVudEhhbmRsZXI9ZnVuY3Rpb24odCxlKXt0aGlzLmxpc3Rl
bmVycy5mb3JFYWNoKGZ1bmN0aW9uKG4pe24ubmFtZT09dCYmbi5jYWxsYmFjayhlKX0pfSxlfShx
aSksWmk9bmV3IE1hcCxZaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy53cmFwcGVkPXR9
cmV0dXJuIHQud3JhcD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHQoZSl9LHR9KCksS2k9KGZ1bmN0
aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuaGFzV3JhcHBlZFZhbHVlPSExfXQucHJvdG90eXBlLnVu
d3JhcD1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIFlpPyh0aGlzLmhhc1dyYXBwZWRW
YWx1ZT0hMCx0LndyYXBwZWQpOnR9LHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5o
YXNXcmFwcGVkVmFsdWU9ITF9fSgpLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5w
cmV2aW91c1ZhbHVlPXQsdGhpcy5jdXJyZW50VmFsdWU9ZSx0aGlzLmZpcnN0Q2hhbmdlPW59cmV0
dXJuIHQucHJvdG90eXBlLmlzRmlyc3RDaGFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maXJz
dENoYW5nZX0sdH0oKSksV2k9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3Rv
dHlwZS5zdXBwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gQ3QodCl9LHQucHJvdG90eXBlLmNyZWF0
ZT1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgSmkoZXx8dCl9LHR9KCksUWk9ZnVuY3Rpb24odCxl
KXtyZXR1cm4gZX0sSmk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX2xlbmd0aD0wLHRo
aXMuX2NvbGxlY3Rpb249bnVsbCx0aGlzLl9saW5rZWRSZWNvcmRzPW51bGwsdGhpcy5fdW5saW5r
ZWRSZWNvcmRzPW51bGwsdGhpcy5fcHJldmlvdXNJdEhlYWQ9bnVsbCx0aGlzLl9pdEhlYWQ9bnVs
bCx0aGlzLl9pdFRhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPW51bGwsdGhpcy5fYWRkaXRp
b25zVGFpbD1udWxsLHRoaXMuX21vdmVzSGVhZD1udWxsLHRoaXMuX21vdmVzVGFpbD1udWxsLHRo
aXMuX3JlbW92YWxzSGVhZD1udWxsLHRoaXMuX3JlbW92YWxzVGFpbD1udWxsLHRoaXMuX2lkZW50
aXR5Q2hhbmdlc0hlYWQ9bnVsbCx0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGwsdGhpcy5f
dHJhY2tCeUZuPXR8fFFpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUs
ImNvbGxlY3Rpb24iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29sbGVjdGlvbn0sZW51
bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90
b3R5cGUsImxlbmd0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sZW5ndGh9LGVudW1l
cmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZm9yRWFjaEl0ZW09ZnVuY3Rp
b24odCl7dmFyIGU7Zm9yKGU9dGhpcy5faXRIZWFkO251bGwhPT1lO2U9ZS5fbmV4dCl0KGUpfSx0
LnByb3RvdHlwZS5mb3JFYWNoT3BlcmF0aW9uPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9p
dEhlYWQsbj10aGlzLl9yZW1vdmFsc0hlYWQscj0wLG89bnVsbDtlfHxuOyl7dmFyIGk9IW58fGUm
JmUuY3VycmVudEluZGV4PFB0KG4scixvKT9lOm4sYT1QdChpLHIsbykscz1pLmN1cnJlbnRJbmRl
eDtpZihpPT09bilyLS0sbj1uLl9uZXh0UmVtb3ZlZDtlbHNlIGlmKGU9ZS5fbmV4dCxudWxsPT1p
LnByZXZpb3VzSW5kZXgpcisrO2Vsc2V7b3x8KG89W10pO3ZhciB1PWEtcixjPXMtcjtpZih1IT1j
KXtmb3IodmFyIGw9MDtsPHU7bCsrKXt2YXIgcD1sPG8ubGVuZ3RoP29bbF06b1tsXT0wLGY9cCts
O2M8PWYmJmY8dSYmKG9bbF09cCsxKX12YXIgZD1pLnByZXZpb3VzSW5kZXg7b1tkXT1jLXV9fWEh
PT1zJiZ0KGksYSxzKX19LHQucHJvdG90eXBlLmZvckVhY2hQcmV2aW91c0l0ZW09ZnVuY3Rpb24o
dCl7dmFyIGU7Zm9yKGU9dGhpcy5fcHJldmlvdXNJdEhlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0UHJl
dmlvdXMpdChlKX0sdC5wcm90b3R5cGUuZm9yRWFjaEFkZGVkSXRlbT1mdW5jdGlvbih0KXt2YXIg
ZTtmb3IoZT10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dEFkZGVkKXQoZSl9
LHQucHJvdG90eXBlLmZvckVhY2hNb3ZlZEl0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhp
cy5fbW92ZXNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dE1vdmVkKXQoZSl9LHQucHJvdG90eXBlLmZv
ckVhY2hSZW1vdmVkSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9yZW1vdmFsc0hl
YWQ7bnVsbCE9PWU7ZT1lLl9uZXh0UmVtb3ZlZCl0KGUpfSx0LnByb3RvdHlwZS5mb3JFYWNoSWRl
bnRpdHlDaGFuZ2U9ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5faWRlbnRpdHlDaGFuZ2Vz
SGVhZDtudWxsIT09ZTtlPWUuX25leHRJZGVudGl0eUNoYW5nZSl0KGUpfSx0LnByb3RvdHlwZS5k
aWZmPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQmJih0PVtdKSwhQ3QodCkpdGhyb3cgbmV3IEVycm9y
KCJFcnJvciB0cnlpbmcgdG8gZGlmZiAnIithKHQpKyInLiBPbmx5IGFycmF5cyBhbmQgaXRlcmFi
bGVzIGFyZSBhbGxvd2VkIik7cmV0dXJuIHRoaXMuY2hlY2sodCk/dGhpczpudWxsfSx0LnByb3Rv
dHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmNoZWNrPWZ1bmN0aW9uKHQp
e3ZhciBlPXRoaXM7dGhpcy5fcmVzZXQoKTt2YXIgbixyLG8sYT10aGlzLl9pdEhlYWQscz0hMTtp
ZihBcnJheS5pc0FycmF5KHQpKXt0aGlzLl9sZW5ndGg9dC5sZW5ndGg7Zm9yKHZhciB1PTA7dTx0
aGlzLl9sZW5ndGg7dSsrKXI9dFt1XSxvPXRoaXMuX3RyYWNrQnlGbih1LHIpLG51bGwhPT1hJiZp
KGEudHJhY2tCeUlkLG8pPyhzJiYoYT10aGlzLl92ZXJpZnlSZWluc2VydGlvbihhLHIsbyx1KSks
aShhLml0ZW0scil8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKGEscikpOihhPXRoaXMuX21pc21h
dGNoKGEscixvLHUpLHM9ITApLGE9YS5fbmV4dH1lbHNlIG49MCxPdCh0LGZ1bmN0aW9uKHQpe289
ZS5fdHJhY2tCeUZuKG4sdCksbnVsbCE9PWEmJmkoYS50cmFja0J5SWQsbyk/KHMmJihhPWUuX3Zl
cmlmeVJlaW5zZXJ0aW9uKGEsdCxvLG4pKSxpKGEuaXRlbSx0KXx8ZS5fYWRkSWRlbnRpdHlDaGFu
Z2UoYSx0KSk6KGE9ZS5fbWlzbWF0Y2goYSx0LG8sbikscz0hMCksYT1hLl9uZXh0LG4rK30pLHRo
aXMuX2xlbmd0aD1uO3JldHVybiB0aGlzLl90cnVuY2F0ZShhKSx0aGlzLl9jb2xsZWN0aW9uPXQs
dGhpcy5pc0RpcnR5fSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImlzRGlydHki
LHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXRoaXMuX2FkZGl0aW9uc0hlYWR8fG51bGwh
PT10aGlzLl9tb3Zlc0hlYWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR8fG51bGwhPT10aGlz
Ll9pZGVudGl0eUNoYW5nZXNIZWFkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQu
cHJvdG90eXBlLl9yZXNldD1mdW5jdGlvbigpe2lmKHRoaXMuaXNEaXJ0eSl7dmFyIHQ9dm9pZCAw
LGU9dm9pZCAwO2Zvcih0PXRoaXMuX3ByZXZpb3VzSXRIZWFkPXRoaXMuX2l0SGVhZDtudWxsIT09
dDt0PXQuX25leHQpdC5fbmV4dFByZXZpb3VzPXQuX25leHQ7Zm9yKHQ9dGhpcy5fYWRkaXRpb25z
SGVhZDtudWxsIT09dDt0PXQuX25leHRBZGRlZCl0LnByZXZpb3VzSW5kZXg9dC5jdXJyZW50SW5k
ZXg7Zm9yKHRoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHQ9dGhp
cy5fbW92ZXNIZWFkO251bGwhPT10O3Q9ZSl0LnByZXZpb3VzSW5kZXg9dC5jdXJyZW50SW5kZXgs
ZT10Ll9uZXh0TW92ZWQ7dGhpcy5fbW92ZXNIZWFkPXRoaXMuX21vdmVzVGFpbD1udWxsLHRoaXMu
X3JlbW92YWxzSGVhZD10aGlzLl9yZW1vdmFsc1RhaWw9bnVsbCx0aGlzLl9pZGVudGl0eUNoYW5n
ZXNIZWFkPXRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWw9bnVsbH19LHQucHJvdG90eXBlLl9taXNt
YXRjaD1mdW5jdGlvbih0LGUsbixyKXt2YXIgbztyZXR1cm4gbnVsbD09PXQ/bz10aGlzLl9pdFRh
aWw6KG89dC5fcHJldix0aGlzLl9yZW1vdmUodCkpLHQ9bnVsbD09PXRoaXMuX2xpbmtlZFJlY29y
ZHM/bnVsbDp0aGlzLl9saW5rZWRSZWNvcmRzLmdldChuLHIpLG51bGwhPT10PyhpKHQuaXRlbSxl
KXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UodCxlKSx0aGlzLl9tb3ZlQWZ0ZXIodCxvLHIpKToo
dD1udWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fdW5saW5rZWRSZWNvcmRz
LmdldChuLG51bGwpLG51bGwhPT10PyhpKHQuaXRlbSxlKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFu
Z2UodCxlKSx0aGlzLl9yZWluc2VydEFmdGVyKHQsbyxyKSk6dD10aGlzLl9hZGRBZnRlcihuZXcg
JGkoZSxuKSxvLHIpKSx0fSx0LnByb3RvdHlwZS5fdmVyaWZ5UmVpbnNlcnRpb249ZnVuY3Rpb24o
dCxlLG4scil7dmFyIG89bnVsbD09PXRoaXMuX3VubGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX3Vu
bGlua2VkUmVjb3Jkcy5nZXQobixudWxsKTtyZXR1cm4gbnVsbCE9PW8/dD10aGlzLl9yZWluc2Vy
dEFmdGVyKG8sdC5fcHJldixyKTp0LmN1cnJlbnRJbmRleCE9ciYmKHQuY3VycmVudEluZGV4PXIs
dGhpcy5fYWRkVG9Nb3Zlcyh0LHIpKSx0fSx0LnByb3RvdHlwZS5fdHJ1bmNhdGU9ZnVuY3Rpb24o
dCl7Zm9yKDtudWxsIT09dDspe3ZhciBlPXQuX25leHQ7dGhpcy5fYWRkVG9SZW1vdmFscyh0aGlz
Ll91bmxpbmsodCkpLHQ9ZX1udWxsIT09dGhpcy5fdW5saW5rZWRSZWNvcmRzJiZ0aGlzLl91bmxp
bmtlZFJlY29yZHMuY2xlYXIoKSxudWxsIT09dGhpcy5fYWRkaXRpb25zVGFpbCYmKHRoaXMuX2Fk
ZGl0aW9uc1RhaWwuX25leHRBZGRlZD1udWxsKSxudWxsIT09dGhpcy5fbW92ZXNUYWlsJiYodGhp
cy5fbW92ZXNUYWlsLl9uZXh0TW92ZWQ9bnVsbCksbnVsbCE9PXRoaXMuX2l0VGFpbCYmKHRoaXMu
X2l0VGFpbC5fbmV4dD1udWxsKSxudWxsIT09dGhpcy5fcmVtb3ZhbHNUYWlsJiYodGhpcy5fcmVt
b3ZhbHNUYWlsLl9uZXh0UmVtb3ZlZD1udWxsKSxudWxsIT09dGhpcy5faWRlbnRpdHlDaGFuZ2Vz
VGFpbCYmKHRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWwuX25leHRJZGVudGl0eUNoYW5nZT1udWxs
KX0sdC5wcm90b3R5cGUuX3JlaW5zZXJ0QWZ0ZXI9ZnVuY3Rpb24odCxlLG4pe251bGwhPT10aGlz
Ll91bmxpbmtlZFJlY29yZHMmJnRoaXMuX3VubGlua2VkUmVjb3Jkcy5yZW1vdmUodCk7dmFyIHI9
dC5fcHJldlJlbW92ZWQsbz10Ll9uZXh0UmVtb3ZlZDtyZXR1cm4gbnVsbD09PXI/dGhpcy5fcmVt
b3ZhbHNIZWFkPW86ci5fbmV4dFJlbW92ZWQ9byxudWxsPT09bz90aGlzLl9yZW1vdmFsc1RhaWw9
cjpvLl9wcmV2UmVtb3ZlZD1yLHRoaXMuX2luc2VydEFmdGVyKHQsZSxuKSx0aGlzLl9hZGRUb01v
dmVzKHQsbiksdH0sdC5wcm90b3R5cGUuX21vdmVBZnRlcj1mdW5jdGlvbih0LGUsbil7cmV0dXJu
IHRoaXMuX3VubGluayh0KSx0aGlzLl9pbnNlcnRBZnRlcih0LGUsbiksdGhpcy5fYWRkVG9Nb3Zl
cyh0LG4pLHR9LHQucHJvdG90eXBlLl9hZGRBZnRlcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRo
aXMuX2luc2VydEFmdGVyKHQsZSxuKSxudWxsPT09dGhpcy5fYWRkaXRpb25zVGFpbD90aGlzLl9h
ZGRpdGlvbnNUYWlsPXRoaXMuX2FkZGl0aW9uc0hlYWQ9dDp0aGlzLl9hZGRpdGlvbnNUYWlsPXRo
aXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD10LHR9LHQucHJvdG90eXBlLl9pbnNlcnRBZnRl
cj1mdW5jdGlvbih0LGUsbil7dmFyIHI9bnVsbD09PWU/dGhpcy5faXRIZWFkOmUuX25leHQ7cmV0
dXJuIHQuX25leHQ9cix0Ll9wcmV2PWUsbnVsbD09PXI/dGhpcy5faXRUYWlsPXQ6ci5fcHJldj10
LG51bGw9PT1lP3RoaXMuX2l0SGVhZD10OmUuX25leHQ9dCxudWxsPT09dGhpcy5fbGlua2VkUmVj
b3JkcyYmKHRoaXMuX2xpbmtlZFJlY29yZHM9bmV3IHRhKSx0aGlzLl9saW5rZWRSZWNvcmRzLnB1
dCh0KSx0LmN1cnJlbnRJbmRleD1uLHR9LHQucHJvdG90eXBlLl9yZW1vdmU9ZnVuY3Rpb24odCl7
cmV0dXJuIHRoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5fdW5saW5rKHQpKX0sdC5wcm90b3R5cGUu
X3VubGluaz1mdW5jdGlvbih0KXtudWxsIT09dGhpcy5fbGlua2VkUmVjb3JkcyYmdGhpcy5fbGlu
a2VkUmVjb3Jkcy5yZW1vdmUodCk7dmFyIGU9dC5fcHJldixuPXQuX25leHQ7cmV0dXJuIG51bGw9
PT1lP3RoaXMuX2l0SGVhZD1uOmUuX25leHQ9bixudWxsPT09bj90aGlzLl9pdFRhaWw9ZTpuLl9w
cmV2PWUsdH0sdC5wcm90b3R5cGUuX2FkZFRvTW92ZXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5w
cmV2aW91c0luZGV4PT09ZT90OihudWxsPT09dGhpcy5fbW92ZXNUYWlsP3RoaXMuX21vdmVzVGFp
bD10aGlzLl9tb3Zlc0hlYWQ9dDp0aGlzLl9tb3Zlc1RhaWw9dGhpcy5fbW92ZXNUYWlsLl9uZXh0
TW92ZWQ9dCx0KX0sdC5wcm90b3R5cGUuX2FkZFRvUmVtb3ZhbHM9ZnVuY3Rpb24odCl7cmV0dXJu
IG51bGw9PT10aGlzLl91bmxpbmtlZFJlY29yZHMmJih0aGlzLl91bmxpbmtlZFJlY29yZHM9bmV3
IHRhKSx0aGlzLl91bmxpbmtlZFJlY29yZHMucHV0KHQpLHQuY3VycmVudEluZGV4PW51bGwsdC5f
bmV4dFJlbW92ZWQ9bnVsbCxudWxsPT09dGhpcy5fcmVtb3ZhbHNUYWlsPyh0aGlzLl9yZW1vdmFs
c1RhaWw9dGhpcy5fcmVtb3ZhbHNIZWFkPXQsdC5fcHJldlJlbW92ZWQ9bnVsbCk6KHQuX3ByZXZS
ZW1vdmVkPXRoaXMuX3JlbW92YWxzVGFpbCx0aGlzLl9yZW1vdmFsc1RhaWw9dGhpcy5fcmVtb3Zh
bHNUYWlsLl9uZXh0UmVtb3ZlZD10KSx0fSx0LnByb3RvdHlwZS5fYWRkSWRlbnRpdHlDaGFuZ2U9
ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5pdGVtPWUsbnVsbD09PXRoaXMuX2lkZW50aXR5Q2hhbmdl
c1RhaWw/dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD10aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFk
PXQ6dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9u
ZXh0SWRlbnRpdHlDaGFuZ2U9dCx0fSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3Zh
ciB0PVtdO3RoaXMuZm9yRWFjaEl0ZW0oZnVuY3Rpb24oZSl7cmV0dXJuIHQucHVzaChlKX0pO3Zh
ciBlPVtdO3RoaXMuZm9yRWFjaFByZXZpb3VzSXRlbShmdW5jdGlvbih0KXtyZXR1cm4gZS5wdXNo
KHQpfSk7dmFyIG49W107dGhpcy5mb3JFYWNoQWRkZWRJdGVtKGZ1bmN0aW9uKHQpe3JldHVybiBu
LnB1c2godCl9KTt2YXIgcj1bXTt0aGlzLmZvckVhY2hNb3ZlZEl0ZW0oZnVuY3Rpb24odCl7cmV0
dXJuIHIucHVzaCh0KX0pO3ZhciBvPVtdO3RoaXMuZm9yRWFjaFJlbW92ZWRJdGVtKGZ1bmN0aW9u
KHQpe3JldHVybiBvLnB1c2godCl9KTt2YXIgaT1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoSWRlbnRp
dHlDaGFuZ2UoZnVuY3Rpb24odCl7cmV0dXJuIGkucHVzaCh0KX0pLCJjb2xsZWN0aW9uOiAiK3Qu
am9pbigiLCAiKSsiXG5wcmV2aW91czogIitlLmpvaW4oIiwgIikrIlxuYWRkaXRpb25zOiAiK24u
am9pbigiLCAiKSsiXG5tb3ZlczogIityLmpvaW4oIiwgIikrIlxucmVtb3ZhbHM6ICIrby5qb2lu
KCIsICIpKyJcbmlkZW50aXR5Q2hhbmdlczogIitpLmpvaW4oIiwgIikrIlxuIn0sdH0oKSwkaT1m
dW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLml0ZW09dCx0aGlzLnRyYWNrQnlJZD1lLHRo
aXMuY3VycmVudEluZGV4PW51bGwsdGhpcy5wcmV2aW91c0luZGV4PW51bGwsdGhpcy5fbmV4dFBy
ZXZpb3VzPW51bGwsdGhpcy5fcHJldj1udWxsLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wcmV2RHVw
PW51bGwsdGhpcy5fbmV4dER1cD1udWxsLHRoaXMuX3ByZXZSZW1vdmVkPW51bGwsdGhpcy5fbmV4
dFJlbW92ZWQ9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0TW92ZWQ9bnVsbCx0
aGlzLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbH1yZXR1cm4gdC5wcm90b3R5cGUudG9TdHJpbmc9
ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmV2aW91c0luZGV4PT09dGhpcy5jdXJyZW50SW5kZXg/
YSh0aGlzLml0ZW0pOmEodGhpcy5pdGVtKSsiWyIrYSh0aGlzLnByZXZpb3VzSW5kZXgpKyItPiIr
YSh0aGlzLmN1cnJlbnRJbmRleCkrIl0ifSx0fSgpLFhpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgp
e3RoaXMuX2hlYWQ9bnVsbCx0aGlzLl90YWlsPW51bGx9cmV0dXJuIHQucHJvdG90eXBlLmFkZD1m
dW5jdGlvbih0KXtudWxsPT09dGhpcy5faGVhZD8odGhpcy5faGVhZD10aGlzLl90YWlsPXQsdC5f
bmV4dER1cD1udWxsLHQuX3ByZXZEdXA9bnVsbCk6KHRoaXMuX3RhaWwuX25leHREdXA9dCx0Ll9w
cmV2RHVwPXRoaXMuX3RhaWwsdC5fbmV4dER1cD1udWxsLHRoaXMuX3RhaWw9dCl9LHQucHJvdG90
eXBlLmdldD1mdW5jdGlvbih0LGUpe3ZhciBuO2ZvcihuPXRoaXMuX2hlYWQ7bnVsbCE9PW47bj1u
Ll9uZXh0RHVwKWlmKChudWxsPT09ZXx8ZTw9bi5jdXJyZW50SW5kZXgpJiZpKG4udHJhY2tCeUlk
LHQpKXJldHVybiBuO3JldHVybiBudWxsfSx0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCl7
dmFyIGU9dC5fcHJldkR1cCxuPXQuX25leHREdXA7cmV0dXJuIG51bGw9PT1lP3RoaXMuX2hlYWQ9
bjplLl9uZXh0RHVwPW4sbnVsbD09PW4/dGhpcy5fdGFpbD1lOm4uX3ByZXZEdXA9ZSxudWxsPT09
dGhpcy5faGVhZH0sdH0oKSx0YT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLm1hcD1uZXcg
TWFwfXJldHVybiB0LnByb3RvdHlwZS5wdXQ9ZnVuY3Rpb24odCl7dmFyIGU9dC50cmFja0J5SWQs
bj10aGlzLm1hcC5nZXQoZSk7bnx8KG49bmV3IFhpLHRoaXMubWFwLnNldChlLG4pKSxuLmFkZCh0
KX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dCxyPXRoaXMubWFwLmdldChu
KTtyZXR1cm4gcj9yLmdldCh0LGUpOm51bGx9LHQucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbih0
KXt2YXIgZT10LnRyYWNrQnlJZDtyZXR1cm4gdGhpcy5tYXAuZ2V0KGUpLnJlbW92ZSh0KSYmdGhp
cy5tYXAuZGVsZXRlKGUpLHR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaXNF
bXB0eSIse2dldDpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5tYXAuc2l6ZX0sZW51bWVyYWJs
ZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMu
bWFwLmNsZWFyKCl9LHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIl9EdXBs
aWNhdGVNYXAoIithKHRoaXMubWFwKSsiKSJ9LHR9KCksZWE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0
KCl7fXJldHVybiB0LnByb3RvdHlwZS5zdXBwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0
YW5jZW9mIE1hcHx8eHQodCl9LHQucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4g
bmV3IG5hfSx0fSgpLG5hPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX3JlY29yZHM9bmV3
IE1hcCx0aGlzLl9tYXBIZWFkPW51bGwsdGhpcy5fYXBwZW5kQWZ0ZXI9bnVsbCx0aGlzLl9wcmV2
aW91c01hcEhlYWQ9bnVsbCx0aGlzLl9jaGFuZ2VzSGVhZD1udWxsLHRoaXMuX2NoYW5nZXNUYWls
PW51bGwsdGhpcy5fYWRkaXRpb25zSGVhZD1udWxsLHRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCx0
aGlzLl9yZW1vdmFsc0hlYWQ9bnVsbCx0aGlzLl9yZW1vdmFsc1RhaWw9bnVsbH1yZXR1cm4gT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpc0RpcnR5Iix7Z2V0OmZ1bmN0aW9uKCl7
cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fY2hhbmdlc0hl
YWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxl
OiEwfSksdC5wcm90b3R5cGUuZm9yRWFjaEl0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhp
cy5fbWFwSGVhZDtudWxsIT09ZTtlPWUuX25leHQpdChlKX0sdC5wcm90b3R5cGUuZm9yRWFjaFBy
ZXZpb3VzSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9wcmV2aW91c01hcEhlYWQ7
bnVsbCE9PWU7ZT1lLl9uZXh0UHJldmlvdXMpdChlKX0sdC5wcm90b3R5cGUuZm9yRWFjaENoYW5n
ZWRJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX2NoYW5nZXNIZWFkO251bGwhPT1l
O2U9ZS5fbmV4dENoYW5nZWQpdChlKX0sdC5wcm90b3R5cGUuZm9yRWFjaEFkZGVkSXRlbT1mdW5j
dGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1lO2U9ZS5fbmV4
dEFkZGVkKXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hSZW1vdmVkSXRlbT1mdW5jdGlvbih0KXt2
YXIgZTtmb3IoZT10aGlzLl9yZW1vdmFsc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0UmVtb3ZlZCl0
KGUpfSx0LnByb3RvdHlwZS5kaWZmPWZ1bmN0aW9uKHQpe2lmKHQpe2lmKCEodCBpbnN0YW5jZW9m
IE1hcHx8eHQodCkpKXRocm93IG5ldyBFcnJvcigiRXJyb3IgdHJ5aW5nIHRvIGRpZmYgJyIrYSh0
KSsiJy4gT25seSBtYXBzIGFuZCBvYmplY3RzIGFyZSBhbGxvd2VkIil9ZWxzZSB0PW5ldyBNYXA7
cmV0dXJuIHRoaXMuY2hlY2sodCk/dGhpczpudWxsfSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVu
Y3Rpb24oKXt9LHQucHJvdG90eXBlLmNoZWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5f
cmVzZXQoKTt2YXIgbj10aGlzLl9tYXBIZWFkO2lmKHRoaXMuX2FwcGVuZEFmdGVyPW51bGwsdGhp
cy5fZm9yRWFjaCh0LGZ1bmN0aW9uKHQscil7aWYobiYmbi5rZXk9PT1yKWUuX21heWJlQWRkVG9D
aGFuZ2VzKG4sdCksZS5fYXBwZW5kQWZ0ZXI9bixuPW4uX25leHQ7ZWxzZXt2YXIgbz1lLl9nZXRP
ckNyZWF0ZVJlY29yZEZvcktleShyLHQpO249ZS5faW5zZXJ0QmVmb3JlT3JBcHBlbmQobixvKX19
KSxuKXtuLl9wcmV2JiYobi5fcHJldi5fbmV4dD1udWxsKSx0aGlzLl9yZW1vdmFsc0hlYWQ9bjtm
b3IodmFyIHI9bjtudWxsIT09cjtyPXIuX25leHRSZW1vdmVkKXI9PT10aGlzLl9tYXBIZWFkJiYo
dGhpcy5fbWFwSGVhZD1udWxsKSx0aGlzLl9yZWNvcmRzLmRlbGV0ZShyLmtleSksci5fbmV4dFJl
bW92ZWQ9ci5fbmV4dCxyLnByZXZpb3VzVmFsdWU9ci5jdXJyZW50VmFsdWUsci5jdXJyZW50VmFs
dWU9bnVsbCxyLl9wcmV2PW51bGwsci5fbmV4dD1udWxsfXJldHVybiB0aGlzLl9jaGFuZ2VzVGFp
bCYmKHRoaXMuX2NoYW5nZXNUYWlsLl9uZXh0Q2hhbmdlZD1udWxsKSx0aGlzLl9hZGRpdGlvbnNU
YWlsJiYodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPW51bGwpLHRoaXMuaXNEaXJ0eX0s
dC5wcm90b3R5cGUuX2luc2VydEJlZm9yZU9yQXBwZW5kPWZ1bmN0aW9uKHQsZSl7aWYodCl7dmFy
IG49dC5fcHJldjtyZXR1cm4gZS5fbmV4dD10LGUuX3ByZXY9bix0Ll9wcmV2PWUsbiYmKG4uX25l
eHQ9ZSksdD09PXRoaXMuX21hcEhlYWQmJih0aGlzLl9tYXBIZWFkPWUpLHRoaXMuX2FwcGVuZEFm
dGVyPXQsdH1yZXR1cm4gdGhpcy5fYXBwZW5kQWZ0ZXI/KHRoaXMuX2FwcGVuZEFmdGVyLl9uZXh0
PWUsZS5fcHJldj10aGlzLl9hcHBlbmRBZnRlcik6dGhpcy5fbWFwSGVhZD1lLHRoaXMuX2FwcGVu
ZEFmdGVyPWUsbnVsbH0sdC5wcm90b3R5cGUuX2dldE9yQ3JlYXRlUmVjb3JkRm9yS2V5PWZ1bmN0
aW9uKHQsZSl7aWYodGhpcy5fcmVjb3Jkcy5oYXModCkpe3ZhciBuPXRoaXMuX3JlY29yZHMuZ2V0
KHQpO3RoaXMuX21heWJlQWRkVG9DaGFuZ2VzKG4sZSk7dmFyIHI9bi5fcHJldixvPW4uX25leHQ7
cmV0dXJuIHImJihyLl9uZXh0PW8pLG8mJihvLl9wcmV2PXIpLG4uX25leHQ9bnVsbCxuLl9wcmV2
PW51bGwsbn12YXIgaT1uZXcgcmEodCk7cmV0dXJuIHRoaXMuX3JlY29yZHMuc2V0KHQsaSksaS5j
dXJyZW50VmFsdWU9ZSx0aGlzLl9hZGRUb0FkZGl0aW9ucyhpKSxpfSx0LnByb3RvdHlwZS5fcmVz
ZXQ9ZnVuY3Rpb24oKXtpZih0aGlzLmlzRGlydHkpe3ZhciB0PXZvaWQgMDtmb3IodGhpcy5fcHJl
dmlvdXNNYXBIZWFkPXRoaXMuX21hcEhlYWQsdD10aGlzLl9wcmV2aW91c01hcEhlYWQ7bnVsbCE9
PXQ7dD10Ll9uZXh0KXQuX25leHRQcmV2aW91cz10Ll9uZXh0O2Zvcih0PXRoaXMuX2NoYW5nZXNI
ZWFkO251bGwhPT10O3Q9dC5fbmV4dENoYW5nZWQpdC5wcmV2aW91c1ZhbHVlPXQuY3VycmVudFZh
bHVlO2Zvcih0PXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9dDt0PXQuX25leHRBZGRlZCl0LnBy
ZXZpb3VzVmFsdWU9dC5jdXJyZW50VmFsdWU7dGhpcy5fY2hhbmdlc0hlYWQ9dGhpcy5fY2hhbmdl
c1RhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCx0
aGlzLl9yZW1vdmFsc0hlYWQ9bnVsbH19LHQucHJvdG90eXBlLl9tYXliZUFkZFRvQ2hhbmdlcz1m
dW5jdGlvbih0LGUpe2koZSx0LmN1cnJlbnRWYWx1ZSl8fCh0LnByZXZpb3VzVmFsdWU9dC5jdXJy
ZW50VmFsdWUsdC5jdXJyZW50VmFsdWU9ZSx0aGlzLl9hZGRUb0NoYW5nZXModCkpfSx0LnByb3Rv
dHlwZS5fYWRkVG9BZGRpdGlvbnM9ZnVuY3Rpb24odCl7bnVsbD09PXRoaXMuX2FkZGl0aW9uc0hl
YWQ/dGhpcy5fYWRkaXRpb25zSGVhZD10aGlzLl9hZGRpdGlvbnNUYWlsPXQ6KHRoaXMuX2FkZGl0
aW9uc1RhaWwuX25leHRBZGRlZD10LHRoaXMuX2FkZGl0aW9uc1RhaWw9dCl9LHQucHJvdG90eXBl
Ll9hZGRUb0NoYW5nZXM9ZnVuY3Rpb24odCl7bnVsbD09PXRoaXMuX2NoYW5nZXNIZWFkP3RoaXMu
X2NoYW5nZXNIZWFkPXRoaXMuX2NoYW5nZXNUYWlsPXQ6KHRoaXMuX2NoYW5nZXNUYWlsLl9uZXh0
Q2hhbmdlZD10LHRoaXMuX2NoYW5nZXNUYWlsPXQpfSx0LnByb3RvdHlwZS5fZm9yRWFjaD1mdW5j
dGlvbih0LGUpe3QgaW5zdGFuY2VvZiBNYXA/dC5mb3JFYWNoKGUpOk9iamVjdC5rZXlzKHQpLmZv
ckVhY2goZnVuY3Rpb24obil7cmV0dXJuIGUodFtuXSxuKX0pfSx0fSgpLHJhPWZ1bmN0aW9uKCl7
ZnVuY3Rpb24gdCh0KXt0aGlzLmtleT10LHRoaXMucHJldmlvdXNWYWx1ZT1udWxsLHRoaXMuY3Vy
cmVudFZhbHVlPW51bGwsdGhpcy5fbmV4dFByZXZpb3VzPW51bGwsdGhpcy5fbmV4dD1udWxsLHRo
aXMuX3ByZXY9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0UmVtb3ZlZD1udWxs
LHRoaXMuX25leHRDaGFuZ2VkPW51bGx9cmV0dXJuIHR9KCksb2E9ZnVuY3Rpb24oKXtmdW5jdGlv
biB0KHQpe3RoaXMuZmFjdG9yaWVzPXR9cmV0dXJuIHQuY3JlYXRlPWZ1bmN0aW9uKGUsbil7aWYo
bnVsbCE9bil7dmFyIHI9bi5mYWN0b3JpZXMuc2xpY2UoKTtyZXR1cm4gZT1lLmNvbmNhdChyKSxu
ZXcgdChlKX1yZXR1cm4gbmV3IHQoZSl9LHQuZXh0ZW5kPWZ1bmN0aW9uKGUpe3JldHVybntwcm92
aWRlOnQsdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtpZighbil0aHJvdyBuZXcgRXJyb3IoIkNhbm5v
dCBleHRlbmQgSXRlcmFibGVEaWZmZXJzIHdpdGhvdXQgYSBwYXJlbnQgaW5qZWN0b3IiKTtyZXR1
cm4gdC5jcmVhdGUoZSxuKX0sZGVwczpbW3QsbmV3IGdvLG5ldyBob11dfX0sdC5wcm90b3R5cGUu
ZmluZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZhY3Rvcmllcy5maW5kKGZ1bmN0aW9uKGUpe3Jl
dHVybiBlLnN1cHBvcnRzKHQpfSk7aWYobnVsbCE9ZSlyZXR1cm4gZTt0aHJvdyBuZXcgRXJyb3Io
IkNhbm5vdCBmaW5kIGEgZGlmZmVyIHN1cHBvcnRpbmcgb2JqZWN0ICciK3QrIicgb2YgdHlwZSAn
IitTdCh0KSsiJyIpfSx0fSgpLGlhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmZhY3Rv
cmllcz10fXJldHVybiB0LmNyZWF0ZT1mdW5jdGlvbihlLG4pe2lmKG4pe3ZhciByPW4uZmFjdG9y
aWVzLnNsaWNlKCk7ZT1lLmNvbmNhdChyKX1yZXR1cm4gbmV3IHQoZSl9LHQuZXh0ZW5kPWZ1bmN0
aW9uKGUpe3JldHVybntwcm92aWRlOnQsdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtpZighbil0aHJv
dyBuZXcgRXJyb3IoIkNhbm5vdCBleHRlbmQgS2V5VmFsdWVEaWZmZXJzIHdpdGhvdXQgYSBwYXJl
bnQgaW5qZWN0b3IiKTtyZXR1cm4gdC5jcmVhdGUoZSxuKX0sZGVwczpbW3QsbmV3IGdvLG5ldyBo
b11dfX0sdC5wcm90b3R5cGUuZmluZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZhY3Rvcmllcy5m
aW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLnN1cHBvcnRzKHQpfSk7aWYoZSlyZXR1cm4gZTt0aHJv
dyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIGEgZGlmZmVyIHN1cHBvcnRpbmcgb2JqZWN0ICciK3Qr
IiciKX0sdH0oKSxhYT1bbmV3IGVhXSxzYT1bbmV3IFdpXSx1YT1uZXcgb2Eoc2EpLGNhPW5ldyBp
YShhYSksbGE9W3twcm92aWRlOktvLHVzZVZhbHVlOiJ1bmtub3duIn0seGkse3Byb3ZpZGU6T2ks
dXNlRXhpc3Rpbmc6eGl9LHtwcm92aWRlOk1vLHVzZUZhY3Rvcnk6QXQsZGVwczpbXX0sbWksUW9d
LHBhPWN0KG51bGwsImNvcmUiLGxhKSxmYT1uZXcgWnIoIkxvY2FsZUlkIiksZGE9KG5ldyBacigi
VHJhbnNsYXRpb25zIiksbmV3IFpyKCJUcmFuc2xhdGlvbnNGb3JtYXQiKSx7fSk7ZGEuRXJyb3I9
MCxkYS5XYXJuaW5nPTEsZGEuSWdub3JlPTIsZGFbZGEuRXJyb3JdPSJFcnJvciIsZGFbZGEuV2Fy
bmluZ109Ildhcm5pbmciLGRhW2RhLklnbm9yZV09Iklnbm9yZSI7dmFyIGhhPWZ1bmN0aW9uKCl7
ZnVuY3Rpb24gdCh0KXt9cmV0dXJuIHR9KCk7aGEuZGVjb3JhdG9ycz1be3R5cGU6dW8sYXJnczpb
e3Byb3ZpZGVyczpbU2kse3Byb3ZpZGU6UGksdXNlRXhpc3Rpbmc6U2l9LHFvLEpvLFpvLHtwcm92
aWRlOm9hLHVzZUZhY3Rvcnk6VHR9LHtwcm92aWRlOmlhLHVzZUZhY3Rvcnk6a3R9LHtwcm92aWRl
OmZhLHVzZUZhY3Rvcnk6VnQsZGVwczpbW25ldyBmbyhmYSksbmV3IGhvLG5ldyBnb11dfV19XX1d
LGhhLmN0b3JQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlBpfV19O3ZhciB5YT17
fTt5YS5OT05FPTAseWEuSFRNTD0xLHlhLlNUWUxFPTIseWEuU0NSSVBUPTMseWEuVVJMPTQseWEu
UkVTT1VSQ0VfVVJMPTUseWFbeWEuTk9ORV09Ik5PTkUiLHlhW3lhLkhUTUxdPSJIVE1MIix5YVt5
YS5TVFlMRV09IlNUWUxFIix5YVt5YS5TQ1JJUFRdPSJTQ1JJUFQiLHlhW3lhLlVSTF09IlVSTCIs
eWFbeWEuUkVTT1VSQ0VfVVJMXT0iUkVTT1VSQ0VfVVJMIjt2YXIgbWE9ZnVuY3Rpb24oKXtmdW5j
dGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5zYW5pdGl6ZT1mdW5jdGlvbih0LGUpe30sdH0o
KSxnYT0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXQucHJvdG90eXBlLnZpZXc9ZnVuY3Rpb24o
KXt9LHQucHJvdG90eXBlLm5vZGVJbmRleD1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuaW5qZWN0
b3I9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmNvbXBvbmVudD1mdW5jdGlvbigpe30sdC5wcm90
b3R5cGUucHJvdmlkZXJUb2tlbnM9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLnJlZmVyZW5jZXM9
ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmNvbnRleHQ9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBl
LmNvbXBvbmVudFJlbmRlckVsZW1lbnQ9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLnJlbmRlck5v
ZGU9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmxvZ0Vycm9yPWZ1bmN0aW9uKHQpe2Zvcih2YXIg
ZT1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW24tMV09YXJndW1lbnRzW25dfX0oKSx7
c2V0Q3VycmVudE5vZGU6dm9pZCAwLGNyZWF0ZVJvb3RWaWV3OnZvaWQgMCxjcmVhdGVFbWJlZGRl
ZFZpZXc6dm9pZCAwLGNyZWF0ZUNvbXBvbmVudFZpZXc6dm9pZCAwLGNyZWF0ZU5nTW9kdWxlUmVm
OnZvaWQgMCxvdmVycmlkZVByb3ZpZGVyOnZvaWQgMCxjbGVhclByb3ZpZGVyT3ZlcnJpZGVzOnZv
aWQgMCxjaGVja0FuZFVwZGF0ZVZpZXc6dm9pZCAwLGNoZWNrTm9DaGFuZ2VzVmlldzp2b2lkIDAs
ZGVzdHJveVZpZXc6dm9pZCAwLHJlc29sdmVEZXA6dm9pZCAwLGNyZWF0ZURlYnVnQ29udGV4dDp2
b2lkIDAsaGFuZGxlRXZlbnQ6dm9pZCAwLHVwZGF0ZURpcmVjdGl2ZXM6dm9pZCAwLHVwZGF0ZVJl
bmRlcmVyOnZvaWQgMCxkaXJ0eVBhcmVudFF1ZXJpZXM6dm9pZCAwfSksdmE9ZnVuY3Rpb24oKXt9
LF9hPW5ldyBNYXAsYmE9IiQkdW5kZWZpbmVkIix3YT0iJCRlbXB0eSIsQ2E9MCxFYT1uZXcgV2Vh
a01hcCxPYT0vXjooW146XSspOiguKykkLyx4YT1uZXcgT2JqZWN0LFBhPUd0KENvKSxTYT1HdCh1
aSksQWE9bmV3IE9iamVjdCxUYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLG8saSxhKXt2
YXIgcz10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHMuc2VsZWN0b3I9ZSxzLmNvbXBvbmVudFR5
cGU9bixzLl9pbnB1dHM9byxzLl9vdXRwdXRzPWkscy5uZ0NvbnRlbnRTZWxlY3RvcnM9YSxzLnZp
ZXdEZWZGYWN0b3J5PXIsc31yZXR1cm4gTHIuYShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShl
LnByb3RvdHlwZSwiaW5wdXRzIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9W10sZT10aGlzLl9pbnB1
dHM7Zm9yKHZhciBuIGluIGUpe3ZhciByPWVbbl07dC5wdXNoKHtwcm9wTmFtZTpuLHRlbXBsYXRl
TmFtZTpyfSl9cmV0dXJuIHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0
LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJvdXRwdXRzIix7Z2V0OmZ1bmN0aW9uKCl7dmFy
IHQ9W107Zm9yKHZhciBlIGluIHRoaXMuX291dHB1dHMpe3ZhciBuPXRoaXMuX291dHB1dHNbZV07
dC5wdXNoKHtwcm9wTmFtZTplLHRlbXBsYXRlTmFtZTpufSl9cmV0dXJuIHR9LGVudW1lcmFibGU6
ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQsZSxuLHIp
e2lmKCFyKXRocm93IG5ldyBFcnJvcigibmdNb2R1bGUgc2hvdWxkIGJlIHByb3ZpZGVkIik7dmFy
IG89dWUodGhpcy52aWV3RGVmRmFjdG9yeSksaT1vLm5vZGVzWzBdLmVsZW1lbnQuY29tcG9uZW50
UHJvdmlkZXIuaW5kZXgsYT1nYS5jcmVhdGVSb290Vmlldyh0LGV8fFtdLG4sbyxyLEFhKSxzPWp0
KGEsaSkuaW5zdGFuY2U7cmV0dXJuIG4mJmEucmVuZGVyZXIuc2V0QXR0cmlidXRlKE10KGEsMCku
cmVuZGVyRWxlbWVudCwibmctdmVyc2lvbiIscG8uZnVsbCksbmV3IGthKGEsbmV3IE5hKGEpLHMp
fSxlfSh0aSksa2E9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIG89dC5jYWxsKHRo
aXMpfHx0aGlzO3JldHVybiBvLl92aWV3PWUsby5fdmlld1JlZj1uLG8uX2NvbXBvbmVudD1yLG8u
X2VsRGVmPW8uX3ZpZXcuZGVmLm5vZGVzWzBdLG99cmV0dXJuIExyLmEoZSx0KSxPYmplY3QuZGVm
aW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxvY2F0aW9uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJu
IG5ldyBOaShNdCh0aGlzLl92aWV3LHRoaXMuX2VsRGVmLmluZGV4KS5yZW5kZXJFbGVtZW50KX0s
ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5w
cm90b3R5cGUsImluamVjdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBqYSh0aGlzLl92
aWV3LHRoaXMuX2VsRGVmKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImluc3RhbmNlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0
dXJuIHRoaXMuX2NvbXBvbmVudH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImhvc3RWaWV3Iix7Z2V0OmZ1bmN0aW9uKCl7
cmV0dXJuIHRoaXMuX3ZpZXdSZWZ9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJjaGFuZ2VEZXRlY3RvclJlZiIse2dldDpm
dW5jdGlvbigpe3JldHVybiB0aGlzLl92aWV3UmVmfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJs
ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiY29tcG9uZW50VHlwZSIs
e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb21wb25lbnQuY29uc3RydWN0b3J9LGVudW1l
cmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigp
e3RoaXMuX3ZpZXdSZWYuZGVzdHJveSgpfSxlLnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24o
dCl7dGhpcy5fdmlld1JlZi5vbkRlc3Ryb3kodCl9LGV9KFhvKSxWYT1mdW5jdGlvbigpe2Z1bmN0
aW9uIHQodCxlLG4pe3RoaXMuX3ZpZXc9dCx0aGlzLl9lbERlZj1lLHRoaXMuX2RhdGE9bix0aGlz
Ll9lbWJlZGRlZFZpZXdzPVtdfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5
cGUsImVsZW1lbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE5pKHRoaXMuX2RhdGEucmVu
ZGVyRWxlbWVudCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KHQucHJvdG90eXBlLCJpbmplY3RvciIse2dldDpmdW5jdGlvbigpe3JldHVybiBu
ZXcgamEodGhpcy5fdmlldyx0aGlzLl9lbERlZil9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxl
OiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXJlbnRJbmplY3RvciIs
e2dldDpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl92aWV3LGU9dGhpcy5fZWxEZWYucGFyZW50
OyFlJiZ0OyllPVh0KHQpLHQ9dC5wYXJlbnQ7cmV0dXJuIHQ/bmV3IGphKHQsZSk6bmV3IGphKHRo
aXMuX3ZpZXcsbnVsbCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5
cGUuY2xlYXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZW1iZWRkZWRWaWV3cy5sZW5ndGgs
ZT10LTE7ZT49MDtlLS0pe3ZhciBuPUxlKHRoaXMuX2RhdGEsZSk7Z2EuZGVzdHJveVZpZXcobil9
fSx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZW1iZWRkZWRWaWV3c1t0
XTtpZihlKXt2YXIgbj1uZXcgTmEoZSk7cmV0dXJuIG4uYXR0YWNoVG9WaWV3Q29udGFpbmVyUmVm
KHRoaXMpLG59cmV0dXJuIG51bGx9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwi
bGVuZ3RoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VtYmVkZGVkVmlld3MubGVuZ3Ro
fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmNyZWF0ZUVtYmVk
ZGVkVmlldz1mdW5jdGlvbih0LGUsbil7dmFyIHI9dC5jcmVhdGVFbWJlZGRlZFZpZXcoZXx8e30p
O3JldHVybiB0aGlzLmluc2VydChyLG4pLHJ9LHQucHJvdG90eXBlLmNyZWF0ZUNvbXBvbmVudD1m
dW5jdGlvbih0LGUsbixyLG8pe3ZhciBpPW58fHRoaXMucGFyZW50SW5qZWN0b3I7b3x8dCBpbnN0
YW5jZW9mIHNpfHwobz1pLmdldCh1aSkpO3ZhciBhPXQuY3JlYXRlKGkscix2b2lkIDAsbyk7cmV0
dXJuIHRoaXMuaW5zZXJ0KGEuaG9zdFZpZXcsZSksYX0sdC5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0
aW9uKHQsZSl7dmFyIG49dCxyPW4uX3ZpZXc7cmV0dXJuIEllKHRoaXMuX3ZpZXcsdGhpcy5fZGF0
YSxlLHIpLG4uYXR0YWNoVG9WaWV3Q29udGFpbmVyUmVmKHRoaXMpLHR9LHQucHJvdG90eXBlLm1v
dmU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9lbWJlZGRlZFZpZXdzLmluZGV4T2YodC5fdmll
dyk7cmV0dXJuIFVlKHRoaXMuX2RhdGEsbixlKSx0fSx0LnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0
aW9uKHQpe3JldHVybiB0aGlzLl9lbWJlZGRlZFZpZXdzLmluZGV4T2YodC5fdmlldyl9LHQucHJv
dG90eXBlLnJlbW92ZT1mdW5jdGlvbih0KXt2YXIgZT1MZSh0aGlzLl9kYXRhLHQpO2UmJmdhLmRl
c3Ryb3lWaWV3KGUpfSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24odCl7dmFyIGU9TGUodGhp
cy5fZGF0YSx0KTtyZXR1cm4gZT9uZXcgTmEoZSk6bnVsbH0sdH0oKSxOYT1mdW5jdGlvbigpe2Z1
bmN0aW9uIHQodCl7dGhpcy5fdmlldz10LHRoaXMuX3ZpZXdDb250YWluZXJSZWY9bnVsbCx0aGlz
Ll9hcHBSZWY9bnVsbH1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJy
b290Tm9kZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY2UodGhpcy5fdmlldyl9LGVudW1lcmFi
bGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBl
LCJjb250ZXh0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZpZXcuY29udGV4dH0sZW51
bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90
b3R5cGUsImRlc3Ryb3llZCIse2dldDpmdW5jdGlvbigpe3JldHVybiAwIT0oMTI4JnRoaXMuX3Zp
ZXcuc3RhdGUpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm1h
cmtGb3JDaGVjaz1mdW5jdGlvbigpe1d0KHRoaXMuX3ZpZXcpfSx0LnByb3RvdHlwZS5kZXRhY2g9
ZnVuY3Rpb24oKXt0aGlzLl92aWV3LnN0YXRlJj0tNX0sdC5wcm90b3R5cGUuZGV0ZWN0Q2hhbmdl
cz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3ZpZXcucm9vdC5yZW5kZXJlckZhY3Rvcnk7dC5iZWdp
biYmdC5iZWdpbigpLGdhLmNoZWNrQW5kVXBkYXRlVmlldyh0aGlzLl92aWV3KSx0LmVuZCYmdC5l
bmQoKX0sdC5wcm90b3R5cGUuY2hlY2tOb0NoYW5nZXM9ZnVuY3Rpb24oKXtnYS5jaGVja05vQ2hh
bmdlc1ZpZXcodGhpcy5fdmlldyl9LHQucHJvdG90eXBlLnJlYXR0YWNoPWZ1bmN0aW9uKCl7dGhp
cy5fdmlldy5zdGF0ZXw9NH0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMu
X3ZpZXcuZGlzcG9zYWJsZXN8fCh0aGlzLl92aWV3LmRpc3Bvc2FibGVzPVtdKSx0aGlzLl92aWV3
LmRpc3Bvc2FibGVzLnB1c2godCl9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlz
Ll9hcHBSZWY/dGhpcy5fYXBwUmVmLmRldGFjaFZpZXcodGhpcyk6dGhpcy5fdmlld0NvbnRhaW5l
clJlZiYmdGhpcy5fdmlld0NvbnRhaW5lclJlZi5kZXRhY2godGhpcy5fdmlld0NvbnRhaW5lclJl
Zi5pbmRleE9mKHRoaXMpKSxnYS5kZXN0cm95Vmlldyh0aGlzLl92aWV3KX0sdC5wcm90b3R5cGUu
ZGV0YWNoRnJvbUFwcFJlZj1mdW5jdGlvbigpe3RoaXMuX2FwcFJlZj1udWxsLHFlKHRoaXMuX3Zp
ZXcpLGdhLmRpcnR5UGFyZW50UXVlcmllcyh0aGlzLl92aWV3KX0sdC5wcm90b3R5cGUuYXR0YWNo
VG9BcHBSZWY9ZnVuY3Rpb24odCl7aWYodGhpcy5fdmlld0NvbnRhaW5lclJlZil0aHJvdyBuZXcg
RXJyb3IoIlRoaXMgdmlldyBpcyBhbHJlYWR5IGF0dGFjaGVkIHRvIGEgVmlld0NvbnRhaW5lciEi
KTt0aGlzLl9hcHBSZWY9dH0sdC5wcm90b3R5cGUuYXR0YWNoVG9WaWV3Q29udGFpbmVyUmVmPWZ1
bmN0aW9uKHQpe2lmKHRoaXMuX2FwcFJlZil0aHJvdyBuZXcgRXJyb3IoIlRoaXMgdmlldyBpcyBh
bHJlYWR5IGF0dGFjaGVkIGRpcmVjdGx5IHRvIHRoZSBBcHBsaWNhdGlvblJlZiEiKTt0aGlzLl92
aWV3Q29udGFpbmVyUmVmPXR9LHR9KCksTWE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3Zh
ciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fcGFyZW50Vmlldz1lLHIuX2RlZj1uLHJ9
cmV0dXJuIExyLmEoZSx0KSxlLnByb3RvdHlwZS5jcmVhdGVFbWJlZGRlZFZpZXc9ZnVuY3Rpb24o
dCl7cmV0dXJuIG5ldyBOYShnYS5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fcGFyZW50Vmlldyx0
aGlzLl9kZWYsdGhpcy5fZGVmLmVsZW1lbnQudGVtcGxhdGUsdCkpfSxPYmplY3QuZGVmaW5lUHJv
cGVydHkoZS5wcm90b3R5cGUsImVsZW1lbnRSZWYiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3
IE5pKE10KHRoaXMuX3BhcmVudFZpZXcsdGhpcy5fZGVmLmluZGV4KS5yZW5kZXJFbGVtZW50KX0s
ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlfShIaSksamE9ZnVuY3Rpb24oKXtmdW5j
dGlvbiB0KHQsZSl7dGhpcy52aWV3PXQsdGhpcy5lbERlZj1lfXJldHVybiB0LnByb3RvdHlwZS5n
ZXQ9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT1Dby5USFJPV19JRl9OT1RfRk9VTkQpO3Zh
ciBuPSEhdGhpcy5lbERlZiYmMCE9KDMzNTU0NDMyJnRoaXMuZWxEZWYuZmxhZ3MpO3JldHVybiBn
YS5yZXNvbHZlRGVwKHRoaXMudmlldyx0aGlzLmVsRGVmLG4se2ZsYWdzOjAsdG9rZW46dCx0b2tl
bktleTpHdCh0KX0sZSl9LHR9KCksUmE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuZGVs
ZWdhdGU9dH1yZXR1cm4gdC5wcm90b3R5cGUuc2VsZWN0Um9vdEVsZW1lbnQ9ZnVuY3Rpb24odCl7
cmV0dXJuIHRoaXMuZGVsZWdhdGUuc2VsZWN0Um9vdEVsZW1lbnQodCl9LHQucHJvdG90eXBlLmNy
ZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj15ZShlKSxyPW5bMF0sbz1uWzFdLGk9dGhp
cy5kZWxlZ2F0ZS5jcmVhdGVFbGVtZW50KG8scik7cmV0dXJuIHQmJnRoaXMuZGVsZWdhdGUuYXBw
ZW5kQ2hpbGQodCxpKSxpfSx0LnByb3RvdHlwZS5jcmVhdGVWaWV3Um9vdD1mdW5jdGlvbih0KXty
ZXR1cm4gdH0sdC5wcm90b3R5cGUuY3JlYXRlVGVtcGxhdGVBbmNob3I9ZnVuY3Rpb24odCl7dmFy
IGU9dGhpcy5kZWxlZ2F0ZS5jcmVhdGVDb21tZW50KCIiKTtyZXR1cm4gdCYmdGhpcy5kZWxlZ2F0
ZS5hcHBlbmRDaGlsZCh0LGUpLGV9LHQucHJvdG90eXBlLmNyZWF0ZVRleHQ9ZnVuY3Rpb24odCxl
KXt2YXIgbj10aGlzLmRlbGVnYXRlLmNyZWF0ZVRleHQoZSk7cmV0dXJuIHQmJnRoaXMuZGVsZWdh
dGUuYXBwZW5kQ2hpbGQodCxuKSxufSx0LnByb3RvdHlwZS5wcm9qZWN0Tm9kZXM9ZnVuY3Rpb24o
dCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxk
KHQsZVtuXSl9LHQucHJvdG90eXBlLmF0dGFjaFZpZXdBZnRlcj1mdW5jdGlvbih0LGUpe2Zvcih2
YXIgbj10aGlzLmRlbGVnYXRlLnBhcmVudE5vZGUodCkscj10aGlzLmRlbGVnYXRlLm5leHRTaWJs
aW5nKHQpLG89MDtvPGUubGVuZ3RoO28rKyl0aGlzLmRlbGVnYXRlLmluc2VydEJlZm9yZShuLGVb
b10scil9LHQucHJvdG90eXBlLmRldGFjaFZpZXc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0
Lmxlbmd0aDtlKyspe3ZhciBuPXRbZV0scj10aGlzLmRlbGVnYXRlLnBhcmVudE5vZGUobik7dGhp
cy5kZWxlZ2F0ZS5yZW1vdmVDaGlsZChyLG4pfX0sdC5wcm90b3R5cGUuZGVzdHJveVZpZXc9ZnVu
Y3Rpb24odCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl0aGlzLmRlbGVnYXRlLmRlc3Ry
b3lOb2RlKGVbbl0pfSx0LnByb3RvdHlwZS5saXN0ZW49ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0
aGlzLmRlbGVnYXRlLmxpc3Rlbih0LGUsbil9LHQucHJvdG90eXBlLmxpc3Rlbkdsb2JhbD1mdW5j
dGlvbih0LGUsbil7cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHQsZSxuKX0sdC5wcm90b3R5
cGUuc2V0RWxlbWVudFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxuKXt0aGlzLmRlbGVnYXRlLnNldFBy
b3BlcnR5KHQsZSxuKX0sdC5wcm90b3R5cGUuc2V0RWxlbWVudEF0dHJpYnV0ZT1mdW5jdGlvbih0
LGUsbil7dmFyIHI9eWUoZSksbz1yWzBdLGk9clsxXTtudWxsIT1uP3RoaXMuZGVsZWdhdGUuc2V0
QXR0cmlidXRlKHQsaSxuLG8pOnRoaXMuZGVsZWdhdGUucmVtb3ZlQXR0cmlidXRlKHQsaSxvKX0s
dC5wcm90b3R5cGUuc2V0QmluZGluZ0RlYnVnSW5mbz1mdW5jdGlvbih0LGUsbil7fSx0LnByb3Rv
dHlwZS5zZXRFbGVtZW50Q2xhc3M9ZnVuY3Rpb24odCxlLG4pe24/dGhpcy5kZWxlZ2F0ZS5hZGRD
bGFzcyh0LGUpOnRoaXMuZGVsZWdhdGUucmVtb3ZlQ2xhc3ModCxlKX0sdC5wcm90b3R5cGUuc2V0
RWxlbWVudFN0eWxlPWZ1bmN0aW9uKHQsZSxuKXtudWxsIT1uP3RoaXMuZGVsZWdhdGUuc2V0U3R5
bGUodCxlLG4pOnRoaXMuZGVsZWdhdGUucmVtb3ZlU3R5bGUodCxlKX0sdC5wcm90b3R5cGUuaW52
b2tlRWxlbWVudE1ldGhvZD1mdW5jdGlvbih0LGUsbil7dFtlXS5hcHBseSh0LG4pfSx0LnByb3Rv
dHlwZS5zZXRUZXh0PWZ1bmN0aW9uKHQsZSl7dGhpcy5kZWxlZ2F0ZS5zZXRWYWx1ZSh0LGUpfSx0
LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJSZW5kZXJlci5h
bmltYXRlIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQhIil9LHR9KCksRGE9ZnVuY3Rpb24oKXtmdW5j
dGlvbiB0KHQsZSxuLHIpe3RoaXMuX21vZHVsZVR5cGU9dCx0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9i
b290c3RyYXBDb21wb25lbnRzPW4sdGhpcy5fZGVmPXIsdGhpcy5fZGVzdHJveUxpc3RlbmVycz1b
XSx0aGlzLl9kZXN0cm95ZWQ9ITEsVmUodGhpcyl9cmV0dXJuIHQucHJvdG90eXBlLmdldD1mdW5j
dGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT1Dby5USFJPV19JRl9OT1RfRk9VTkQpLE5l
KHRoaXMse3Rva2VuOnQsdG9rZW5LZXk6R3QodCksZmxhZ3M6MH0sZSl9LE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eSh0LnByb3RvdHlwZSwiaW5zdGFuY2UiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhp
cy5nZXQodGhpcy5fbW9kdWxlVHlwZSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSks
T2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb21wb25lbnRGYWN0b3J5UmVzb2x2
ZXIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXQocmkpfSxlbnVtZXJhYmxlOiEwLGNv
bmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaW5qZWN0
b3IiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZW51bWVyYWJsZTohMCxjb25maWd1cmFi
bGU6ITB9KSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7aWYodGhpcy5fZGVzdHJveWVk
KXRocm93IG5ldyBFcnJvcigiVGhlIG5nIG1vZHVsZSAiK2EodGhpcy5pbnN0YW5jZS5jb25zdHJ1
Y3RvcikrIiBoYXMgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZC4iKTt0aGlzLl9kZXN0cm95ZWQ9ITAs
RGUodGhpcywxMzEwNzIpLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbih0
KXtyZXR1cm4gdCgpfSl9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLl9k
ZXN0cm95TGlzdGVuZXJzLnB1c2godCl9LHR9KCksSWE9R3QoQWkpLEZhPUd0KFZpKSxIYT1HdChO
aSksTGE9R3QoTGkpLEJhPUd0KEhpKSxVYT1HdChCaSksR2E9R3QoQ28pLHFhPW5ldyBPYmplY3Qs
emE9e30sWmE9e307WmEuQ3JlYXRlVmlld05vZGVzPTAsWmEuQ2hlY2tOb0NoYW5nZXM9MSxaYS5D
aGVja05vQ2hhbmdlc1Byb2plY3RlZFZpZXdzPTIsWmEuQ2hlY2tBbmRVcGRhdGU9MyxaYS5DaGVj
a0FuZFVwZGF0ZVByb2plY3RlZFZpZXdzPTQsWmEuRGVzdHJveT01LFphW1phLkNyZWF0ZVZpZXdO
b2Rlc109IkNyZWF0ZVZpZXdOb2RlcyIsWmFbWmEuQ2hlY2tOb0NoYW5nZXNdPSJDaGVja05vQ2hh
bmdlcyIsWmFbWmEuQ2hlY2tOb0NoYW5nZXNQcm9qZWN0ZWRWaWV3c109IkNoZWNrTm9DaGFuZ2Vz
UHJvamVjdGVkVmlld3MiLFphW1phLkNoZWNrQW5kVXBkYXRlXT0iQ2hlY2tBbmRVcGRhdGUiLFph
W1phLkNoZWNrQW5kVXBkYXRlUHJvamVjdGVkVmlld3NdPSJDaGVja0FuZFVwZGF0ZVByb2plY3Rl
ZFZpZXdzIixaYVtaYS5EZXN0cm95XT0iRGVzdHJveSI7LyoqCisgKiBAbGljZW5zZQorICogQ29w
eXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKyAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlv
L2xpY2Vuc2UKKyAqLwordmFyIFlhPSExLEthPW5ldyBNYXAsV2E9e307V2EuY3JlYXRlPTAsV2Eu
ZGV0ZWN0Q2hhbmdlcz0xLFdhLmNoZWNrTm9DaGFuZ2VzPTIsV2EuZGVzdHJveT0zLFdhLmhhbmRs
ZUV2ZW50PTQsV2FbV2EuY3JlYXRlXT0iY3JlYXRlIixXYVtXYS5kZXRlY3RDaGFuZ2VzXT0iZGV0
ZWN0Q2hhbmdlcyIsV2FbV2EuY2hlY2tOb0NoYW5nZXNdPSJjaGVja05vQ2hhbmdlcyIsV2FbV2Eu
ZGVzdHJveV09ImRlc3Ryb3kiLFdhW1dhLmhhbmRsZUV2ZW50XT0iaGFuZGxlRXZlbnQiO3ZhciBR
YSxKYSwkYSxYYT0vKFtBLVpdKS9nLHRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMu
dmlldz10LHRoaXMubm9kZUluZGV4PWUsbnVsbD09ZSYmKHRoaXMubm9kZUluZGV4PWU9MCksdGhp
cy5ub2RlRGVmPXQuZGVmLm5vZGVzW2VdO2Zvcih2YXIgbj10aGlzLm5vZGVEZWYscj10O24mJjA9
PSgxJm4uZmxhZ3MpOyluPW4ucGFyZW50O2lmKCFuKWZvcig7IW4mJnI7KW49WHQocikscj1yLnBh
cmVudDt0aGlzLmVsRGVmPW4sdGhpcy5lbFZpZXc9cn1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3Bl
cnR5KHQucHJvdG90eXBlLCJlbE9yQ29tcFZpZXciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTXQo
dGhpcy5lbFZpZXcsdGhpcy5lbERlZi5pbmRleCkuY29tcG9uZW50Vmlld3x8dGhpcy52aWV3fSxl
bnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnBy
b3RvdHlwZSwiaW5qZWN0b3IiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSmUodGhpcy5lbFZpZXcs
dGhpcy5lbERlZil9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb21wb25lbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4g
dGhpcy5lbE9yQ29tcFZpZXcuY29tcG9uZW50fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZToh
MH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY29udGV4dCIse2dldDpmdW5j
dGlvbigpe3JldHVybiB0aGlzLmVsT3JDb21wVmlldy5jb250ZXh0fSxlbnVtZXJhYmxlOiEwLGNv
bmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicHJvdmlk
ZXJUb2tlbnMiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1bXTtpZih0aGlzLmVsRGVmKWZvcih2YXIg
ZT10aGlzLmVsRGVmLmluZGV4KzE7ZTw9dGhpcy5lbERlZi5pbmRleCt0aGlzLmVsRGVmLmNoaWxk
Q291bnQ7ZSsrKXt2YXIgbj10aGlzLmVsVmlldy5kZWYubm9kZXNbZV07MjAyMjQmbi5mbGFncyYm
dC5wdXNoKG4ucHJvdmlkZXIudG9rZW4pLGUrPW4uY2hpbGRDb3VudH1yZXR1cm4gdH0sZW51bWVy
YWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5
cGUsInJlZmVyZW5jZXMiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD17fTtpZih0aGlzLmVsRGVmKXtE
cih0aGlzLmVsVmlldyx0aGlzLmVsRGVmLHQpO2Zvcih2YXIgZT10aGlzLmVsRGVmLmluZGV4KzE7
ZTw9dGhpcy5lbERlZi5pbmRleCt0aGlzLmVsRGVmLmNoaWxkQ291bnQ7ZSsrKXt2YXIgbj10aGlz
LmVsVmlldy5kZWYubm9kZXNbZV07MjAyMjQmbi5mbGFncyYmRHIodGhpcy5lbFZpZXcsbix0KSxl
Kz1uLmNoaWxkQ291bnR9fXJldHVybiB0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0p
LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY29tcG9uZW50UmVuZGVyRWxlbWVu
dCIse2dldDpmdW5jdGlvbigpe3ZhciB0PVJyKHRoaXMuZWxPckNvbXBWaWV3KTtyZXR1cm4gdD90
LnJlbmRlckVsZW1lbnQ6dm9pZCAwfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9i
amVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicmVuZGVyTm9kZSIse2dldDpmdW5jdGlv
bigpe3JldHVybiAyJnRoaXMubm9kZURlZi5mbGFncz90ZSh0aGlzLnZpZXcsdGhpcy5ub2RlRGVm
KTp0ZSh0aGlzLmVsVmlldyx0aGlzLmVsRGVmKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6
ITB9KSx0LnByb3RvdHlwZS5sb2dFcnJvcj1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10sbj0xO248
YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuLTFdPWFyZ3VtZW50c1tuXTt2YXIgcixvOzImdGhpcy5u
b2RlRGVmLmZsYWdzPyhyPXRoaXMudmlldy5kZWYsbz10aGlzLm5vZGVEZWYuaW5kZXgpOihyPXRo
aXMuZWxWaWV3LmRlZixvPXRoaXMuZWxEZWYuaW5kZXgpO3ZhciBpPWpyKHIsbyksYT0tMSxzPWZ1
bmN0aW9uKCl7cmV0dXJuIGErKyxhPT09aT8obj10LmVycm9yKS5iaW5kLmFwcGx5KG4sW3RdLmNv
bmNhdChlKSk6dmE7dmFyIG59O3IuZmFjdG9yeShzKSxhPGkmJih0LmVycm9yKCJJbGxlZ2FsIHN0
YXRlOiB0aGUgVmlld0RlZmluaXRpb25GYWN0b3J5IGRpZCBub3QgY2FsbCB0aGUgbG9nZ2VyISIp
LHQuZXJyb3IuYXBwbHkodCxlKSl9LHR9KCksZXM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3Ro
aXMuZGVsZWdhdGU9dH1yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlUmVuZGVyZXI9ZnVuY3Rpb24o
dCxlKXtyZXR1cm4gbmV3IG5zKHRoaXMuZGVsZWdhdGUuY3JlYXRlUmVuZGVyZXIodCxlKSl9LHQu
cHJvdG90eXBlLmJlZ2luPWZ1bmN0aW9uKCl7dGhpcy5kZWxlZ2F0ZS5iZWdpbiYmdGhpcy5kZWxl
Z2F0ZS5iZWdpbigpfSx0LnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt0aGlzLmRlbGVnYXRlLmVu
ZCYmdGhpcy5kZWxlZ2F0ZS5lbmQoKX0sdC5wcm90b3R5cGUud2hlblJlbmRlcmluZ0RvbmU9ZnVu
Y3Rpb24oKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS53aGVuUmVuZGVyaW5nRG9uZT90aGlzLmRlbGVn
YXRlLndoZW5SZW5kZXJpbmdEb25lKCk6UHJvbWlzZS5yZXNvbHZlKG51bGwpfSx0fSgpLG5zPWZ1
bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmRlbGVnYXRlPXR9cmV0dXJuIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZGF0YSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlz
LmRlbGVnYXRlLmRhdGF9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5
cGUuZGVzdHJveU5vZGU9ZnVuY3Rpb24odCl7YnQodnQodCkpLHRoaXMuZGVsZWdhdGUuZGVzdHJv
eU5vZGUmJnRoaXMuZGVsZWdhdGUuZGVzdHJveU5vZGUodCl9LHQucHJvdG90eXBlLmRlc3Ryb3k9
ZnVuY3Rpb24oKXt0aGlzLmRlbGVnYXRlLmRlc3Ryb3koKX0sdC5wcm90b3R5cGUuY3JlYXRlRWxl
bWVudD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuZGVsZWdhdGUuY3JlYXRlRWxlbWVudCh0LGUp
LHI9RnIoKTtpZihyKXt2YXIgbz1uZXcgemkobixudWxsLHIpO28ubmFtZT10LF90KG8pfXJldHVy
biBufSx0LnByb3RvdHlwZS5jcmVhdGVDb21tZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGVs
ZWdhdGUuY3JlYXRlQ29tbWVudCh0KSxuPUZyKCk7cmV0dXJuIG4mJl90KG5ldyBxaShlLG51bGws
bikpLGV9LHQucHJvdG90eXBlLmNyZWF0ZVRleHQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kZWxl
Z2F0ZS5jcmVhdGVUZXh0KHQpLG49RnIoKTtyZXR1cm4gbiYmX3QobmV3IHFpKGUsbnVsbCxuKSks
ZX0sdC5wcm90b3R5cGUuYXBwZW5kQ2hpbGQ9ZnVuY3Rpb24odCxlKXt2YXIgbj12dCh0KSxyPXZ0
KGUpO24mJnImJm4gaW5zdGFuY2VvZiB6aSYmbi5hZGRDaGlsZChyKSx0aGlzLmRlbGVnYXRlLmFw
cGVuZENoaWxkKHQsZSl9LHQucHJvdG90eXBlLmluc2VydEJlZm9yZT1mdW5jdGlvbih0LGUsbil7
dmFyIHI9dnQodCksbz12dChlKSxpPXZ0KG4pO3ImJm8mJnIgaW5zdGFuY2VvZiB6aSYmci5pbnNl
cnRCZWZvcmUoaSxvKSx0aGlzLmRlbGVnYXRlLmluc2VydEJlZm9yZSh0LGUsbil9LHQucHJvdG90
eXBlLnJlbW92ZUNoaWxkPWZ1bmN0aW9uKHQsZSl7dmFyIG49dnQodCkscj12dChlKTtuJiZyJiZu
IGluc3RhbmNlb2YgemkmJm4ucmVtb3ZlQ2hpbGQociksdGhpcy5kZWxlZ2F0ZS5yZW1vdmVDaGls
ZCh0LGUpfSx0LnByb3RvdHlwZS5zZWxlY3RSb290RWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10
aGlzLmRlbGVnYXRlLnNlbGVjdFJvb3RFbGVtZW50KHQpLG49RnIoKTtyZXR1cm4gbiYmX3QobmV3
IHppKGUsbnVsbCxuKSksZX0sdC5wcm90b3R5cGUuc2V0QXR0cmlidXRlPWZ1bmN0aW9uKHQsZSxu
LHIpe3ZhciBvPXZ0KHQpO2lmKG8mJm8gaW5zdGFuY2VvZiB6aSl7dmFyIGk9cj9yKyI6IitlOmU7
by5hdHRyaWJ1dGVzW2ldPW59dGhpcy5kZWxlZ2F0ZS5zZXRBdHRyaWJ1dGUodCxlLG4scil9LHQu
cHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbil7dmFyIHI9dnQodCk7aWYo
ciYmciBpbnN0YW5jZW9mIHppKXt2YXIgbz1uP24rIjoiK2U6ZTtyLmF0dHJpYnV0ZXNbb109bnVs
bH10aGlzLmRlbGVnYXRlLnJlbW92ZUF0dHJpYnV0ZSh0LGUsbil9LHQucHJvdG90eXBlLmFkZENs
YXNzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dnQodCk7biYmbiBpbnN0YW5jZW9mIHppJiYobi5jbGFz
c2VzW2VdPSEwKSx0aGlzLmRlbGVnYXRlLmFkZENsYXNzKHQsZSl9LHQucHJvdG90eXBlLnJlbW92
ZUNsYXNzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dnQodCk7biYmbiBpbnN0YW5jZW9mIHppJiYobi5j
bGFzc2VzW2VdPSExKSx0aGlzLmRlbGVnYXRlLnJlbW92ZUNsYXNzKHQsZSl9LHQucHJvdG90eXBl
LnNldFN0eWxlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvPXZ0KHQpO28mJm8gaW5zdGFuY2VvZiB6
aSYmKG8uc3R5bGVzW2VdPW4pLHRoaXMuZGVsZWdhdGUuc2V0U3R5bGUodCxlLG4scil9LHQucHJv
dG90eXBlLnJlbW92ZVN0eWxlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj12dCh0KTtyJiZyIGluc3Rh
bmNlb2YgemkmJihyLnN0eWxlc1tlXT1udWxsKSx0aGlzLmRlbGVnYXRlLnJlbW92ZVN0eWxlKHQs
ZSxuKX0sdC5wcm90b3R5cGUuc2V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXZ0KHQp
O3ImJnIgaW5zdGFuY2VvZiB6aSYmKHIucHJvcGVydGllc1tlXT1uKSx0aGlzLmRlbGVnYXRlLnNl
dFByb3BlcnR5KHQsZSxuKX0sdC5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQsZSxuKXtpZigi
c3RyaW5nIiE9dHlwZW9mIHQpe3ZhciByPXZ0KHQpO3ImJnIubGlzdGVuZXJzLnB1c2gobmV3IEdp
KGUsbikpfXJldHVybiB0aGlzLmRlbGVnYXRlLmxpc3Rlbih0LGUsbil9LHQucHJvdG90eXBlLnBh
cmVudE5vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUucGFyZW50Tm9kZSh0KX0s
dC5wcm90b3R5cGUubmV4dFNpYmxpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUu
bmV4dFNpYmxpbmcodCl9LHQucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKHQsZSl7cmV0dXJu
IHRoaXMuZGVsZWdhdGUuc2V0VmFsdWUodCxlKX0sdH0oKSxycz1mdW5jdGlvbih0KXtmdW5jdGlv
biBlKGUsbixyKXt2YXIgbz10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG8ubW9kdWxlVHlwZT1l
LG8uX2Jvb3RzdHJhcENvbXBvbmVudHM9bixvLl9uZ01vZHVsZURlZkZhY3Rvcnk9cixvfXJldHVy
biBMci5hKGUsdCksZS5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQpe2lyKCk7dmFyIGU9dWUo
dGhpcy5fbmdNb2R1bGVEZWZGYWN0b3J5KTtyZXR1cm4gZ2EuY3JlYXRlTmdNb2R1bGVSZWYodGhp
cy5tb2R1bGVUeXBlLHR8fENvLk5VTEwsdGhpcy5fYm9vdHN0cmFwQ29tcG9uZW50cyxlKX0sZX0o
Y2kpfSkuY2FsbChlLG4oIkR1UjIiKSl9LCI3ckI5IjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJp
Y3QiO3ZhciByPW4oInQycXYiKTtlLmZvcmtKb2luPXIuRm9ya0pvaW5PYnNlcnZhYmxlLmNyZWF0
ZX0sQjAwVTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCl7cmV0dXJu
IHQucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY29uY2F0KGUgaW5zdGFuY2VvZiBjLlVu
c3Vic2NyaXB0aW9uRXJyb3I/ZS5lcnJvcnM6ZSl9LFtdKX12YXIgbz1uKCJYYWpvIiksaT1uKCJJ
Q3BnIiksYT1uKCJTS0g2Iikscz1uKCIrM2VMIiksdT1uKCJXaFZjIiksYz1uKCJHSWprIiksbD1m
dW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5jbG9zZWQ9ITEsdGhpcy5fcGFyZW50PW51bGws
dGhpcy5fcGFyZW50cz1udWxsLHRoaXMuX3N1YnNjcmlwdGlvbnM9bnVsbCx0JiYodGhpcy5fdW5z
dWJzY3JpYmU9dCl9cmV0dXJuIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7dmFy
IHQsZT0hMTtpZighdGhpcy5jbG9zZWQpe3ZhciBuPXRoaXMsbD1uLl9wYXJlbnQscD1uLl9wYXJl
bnRzLGY9bi5fdW5zdWJzY3JpYmUsZD1uLl9zdWJzY3JpcHRpb25zO3RoaXMuY2xvc2VkPSEwLHRo
aXMuX3BhcmVudD1udWxsLHRoaXMuX3BhcmVudHM9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb25zPW51
bGw7Zm9yKHZhciBoPS0xLHk9cD9wLmxlbmd0aDowO2w7KWwucmVtb3ZlKHRoaXMpLGw9KytoPHkm
JnBbaF18fG51bGw7aWYoYS5pc0Z1bmN0aW9uKGYpKXt2YXIgbT1zLnRyeUNhdGNoKGYpLmNhbGwo
dGhpcyk7bT09PXUuZXJyb3JPYmplY3QmJihlPSEwLHQ9dHx8KHUuZXJyb3JPYmplY3QuZSBpbnN0
YW5jZW9mIGMuVW5zdWJzY3JpcHRpb25FcnJvcj9yKHUuZXJyb3JPYmplY3QuZS5lcnJvcnMpOlt1
LmVycm9yT2JqZWN0LmVdKSl9aWYoby5pc0FycmF5KGQpKWZvcihoPS0xLHk9ZC5sZW5ndGg7Kyto
PHk7KXt2YXIgZz1kW2hdO2lmKGkuaXNPYmplY3QoZykpe3ZhciBtPXMudHJ5Q2F0Y2goZy51bnN1
YnNjcmliZSkuY2FsbChnKTtpZihtPT09dS5lcnJvck9iamVjdCl7ZT0hMCx0PXR8fFtdO3ZhciB2
PXUuZXJyb3JPYmplY3QuZTt2IGluc3RhbmNlb2YgYy5VbnN1YnNjcmlwdGlvbkVycm9yP3Q9dC5j
b25jYXQocih2LmVycm9ycykpOnQucHVzaCh2KX19fWlmKGUpdGhyb3cgbmV3IGMuVW5zdWJzY3Jp
cHRpb25FcnJvcih0KX19LHQucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXtpZighZXx8ZT09PXQu
RU1QVFkpcmV0dXJuIHQuRU1QVFk7aWYoZT09PXRoaXMpcmV0dXJuIHRoaXM7dmFyIG49ZTtzd2l0
Y2godHlwZW9mIGUpe2Nhc2UiZnVuY3Rpb24iOm49bmV3IHQoZSk7Y2FzZSJvYmplY3QiOmlmKG4u
Y2xvc2VkfHwiZnVuY3Rpb24iIT10eXBlb2Ygbi51bnN1YnNjcmliZSlyZXR1cm4gbjtpZih0aGlz
LmNsb3NlZClyZXR1cm4gbi51bnN1YnNjcmliZSgpLG47aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4u
X2FkZFBhcmVudCl7dmFyIHI9bjtuPW5ldyB0LG4uX3N1YnNjcmlwdGlvbnM9W3JdfWJyZWFrO2Rl
ZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgdGVhcmRvd24gIitlKyIgYWRkZWQg
dG8gU3Vic2NyaXB0aW9uLiIpfXJldHVybih0aGlzLl9zdWJzY3JpcHRpb25zfHwodGhpcy5fc3Vi
c2NyaXB0aW9ucz1bXSkpLnB1c2gobiksbi5fYWRkUGFyZW50KHRoaXMpLG59LHQucHJvdG90eXBl
LnJlbW92ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9zdWJzY3JpcHRpb25zO2lmKGUpe3ZhciBu
PWUuaW5kZXhPZih0KTstMSE9PW4mJmUuc3BsaWNlKG4sMSl9fSx0LnByb3RvdHlwZS5fYWRkUGFy
ZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1lLl9wYXJlbnQscj1lLl9wYXJlbnRzO24mJm4h
PT10P3I/LTE9PT1yLmluZGV4T2YodCkmJnIucHVzaCh0KTp0aGlzLl9wYXJlbnRzPVt0XTp0aGlz
Ll9wYXJlbnQ9dH0sdC5FTVBUWT1mdW5jdGlvbih0KXtyZXR1cm4gdC5jbG9zZWQ9ITAsdH0obmV3
IHQpLHR9KCk7ZS5TdWJzY3JpcHRpb249bH0sQ1VScDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJp
Y3QiO2Z1bmN0aW9uIHIodCxlLG4scil7dmFyIGY9bmV3IGwuSW5uZXJTdWJzY3JpYmVyKHQsbixy
KTtpZihmLmNsb3NlZClyZXR1cm4gbnVsbDtpZihlIGluc3RhbmNlb2YgdS5PYnNlcnZhYmxlKXJl
dHVybiBlLl9pc1NjYWxhcj8oZi5uZXh0KGUudmFsdWUpLGYuY29tcGxldGUoKSxudWxsKTplLnN1
YnNjcmliZShmKTtpZihpLmlzQXJyYXlMaWtlKGUpKXtmb3IodmFyIGQ9MCxoPWUubGVuZ3RoO2Q8
aCYmIWYuY2xvc2VkO2QrKylmLm5leHQoZVtkXSk7Zi5jbG9zZWR8fGYuY29tcGxldGUoKX1lbHNl
e2lmKGEuaXNQcm9taXNlKGUpKXJldHVybiBlLnRoZW4oZnVuY3Rpb24odCl7Zi5jbG9zZWR8fChm
Lm5leHQodCksZi5jb21wbGV0ZSgpKX0sZnVuY3Rpb24odCl7cmV0dXJuIGYuZXJyb3IodCl9KS50
aGVuKG51bGwsZnVuY3Rpb24odCl7by5yb290LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyB0
fSl9KSxmO2lmKGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlW2MuaXRlcmF0b3JdKWZvcih2YXIgeT1l
W2MuaXRlcmF0b3JdKCk7Oyl7dmFyIG09eS5uZXh0KCk7aWYobS5kb25lKXtmLmNvbXBsZXRlKCk7
YnJlYWt9aWYoZi5uZXh0KG0udmFsdWUpLGYuY2xvc2VkKWJyZWFrfWVsc2UgaWYoZSYmImZ1bmN0
aW9uIj09dHlwZW9mIGVbcC5vYnNlcnZhYmxlXSl7dmFyIGc9ZVtwLm9ic2VydmFibGVdKCk7aWYo
ImZ1bmN0aW9uIj09dHlwZW9mIGcuc3Vic2NyaWJlKXJldHVybiBnLnN1YnNjcmliZShuZXcgbC5J
bm5lclN1YnNjcmliZXIodCxuLHIpKTtmLmVycm9yKG5ldyBUeXBlRXJyb3IoIlByb3ZpZGVkIG9i
amVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlIikpfWVs
c2V7dmFyIHY9cy5pc09iamVjdChlKT8iYW4gaW52YWxpZCBvYmplY3QiOiInIitlKyInIixfPSJZ
b3UgcHJvdmlkZWQgIit2KyIgd2hlcmUgYSBzdHJlYW0gd2FzIGV4cGVjdGVkLiBZb3UgY2FuIHBy
b3ZpZGUgYW4gT2JzZXJ2YWJsZSwgUHJvbWlzZSwgQXJyYXksIG9yIEl0ZXJhYmxlLiI7Zi5lcnJv
cihuZXcgVHlwZUVycm9yKF8pKX19cmV0dXJuIG51bGx9dmFyIG89bigiVk9mWiIpLGk9bigiMXI4
KyIpLGE9bigiYVFsNyIpLHM9bigiSUNwZyIpLHU9bigickNUZiIpLGM9bigiY2RtTiIpLGw9bigi
UXFSSyIpLHA9bigibWJWQyIpO2Uuc3Vic2NyaWJlVG9SZXN1bHQ9cn0sRHVSMjpmdW5jdGlvbih0
LGUpe3ZhciBuO249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKTt0cnl7bj1ufHxGdW5jdGlvbigi
cmV0dXJuIHRoaXMiKSgpfHwoMCxldmFsKSgidGhpcyIpfWNhdGNoKHQpeyJvYmplY3QiPT10eXBl
b2Ygd2luZG93JiYobj13aW5kb3cpfXQuZXhwb3J0cz1ufSxFRXI0OmZ1bmN0aW9uKHQsZSxuKXsi
dXNlIHN0cmljdCI7dmFyIHI9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKHQsZSl7ZnVu
Y3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9dH1mb3IodmFyIHIgaW4gZSllLmhhc093blByb3Bl
cnR5KHIpJiYodFtyXT1lW3JdKTt0LnByb3RvdHlwZT1udWxsPT09ZT9PYmplY3QuY3JlYXRlKGUp
OihuLnByb3RvdHlwZT1lLnByb3RvdHlwZSxuZXcgbil9LG89bigickNUZiIpLGk9bigibW1WUyIp
LGE9bigiQjAwVSIpLHM9bigiSVpWdyIpLHU9bigiWkpmOCIpLGM9bigicjhaWSIpLGw9ZnVuY3Rp
b24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlKSx0aGlzLmRlc3RpbmF0aW9uPWV9cmV0
dXJuIHIoZSx0KSxlfShpLlN1YnNjcmliZXIpO2UuU3ViamVjdFN1YnNjcmliZXI9bDt2YXIgcD1m
dW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5jYWxsKHRoaXMpLHRoaXMub2JzZXJ2ZXJzPVtdLHRo
aXMuY2xvc2VkPSExLHRoaXMuaXNTdG9wcGVkPSExLHRoaXMuaGFzRXJyb3I9ITEsdGhpcy50aHJv
d25FcnJvcj1udWxsfXJldHVybiByKGUsdCksZS5wcm90b3R5cGVbYy5yeFN1YnNjcmliZXJdPWZ1
bmN0aW9uKCl7cmV0dXJuIG5ldyBsKHRoaXMpfSxlLnByb3RvdHlwZS5saWZ0PWZ1bmN0aW9uKHQp
e3ZhciBlPW5ldyBmKHRoaXMsdGhpcyk7cmV0dXJuIGUub3BlcmF0b3I9dCxlfSxlLnByb3RvdHlw
ZS5uZXh0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBzLk9iamVjdFVuc3Vi
c2NyaWJlZEVycm9yO2lmKCF0aGlzLmlzU3RvcHBlZClmb3IodmFyIGU9dGhpcy5vYnNlcnZlcnMs
bj1lLmxlbmd0aCxyPWUuc2xpY2UoKSxvPTA7bzxuO28rKylyW29dLm5leHQodCl9LGUucHJvdG90
eXBlLmVycm9yPWZ1bmN0aW9uKHQpe2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBzLk9iamVjdFVu
c3Vic2NyaWJlZEVycm9yO3RoaXMuaGFzRXJyb3I9ITAsdGhpcy50aHJvd25FcnJvcj10LHRoaXMu
aXNTdG9wcGVkPSEwO2Zvcih2YXIgZT10aGlzLm9ic2VydmVycyxuPWUubGVuZ3RoLHI9ZS5zbGlj
ZSgpLG89MDtvPG47bysrKXJbb10uZXJyb3IodCk7dGhpcy5vYnNlcnZlcnMubGVuZ3RoPTB9LGUu
cHJvdG90eXBlLmNvbXBsZXRlPWZ1bmN0aW9uKCl7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IHMu
T2JqZWN0VW5zdWJzY3JpYmVkRXJyb3I7dGhpcy5pc1N0b3BwZWQ9ITA7Zm9yKHZhciB0PXRoaXMu
b2JzZXJ2ZXJzLGU9dC5sZW5ndGgsbj10LnNsaWNlKCkscj0wO3I8ZTtyKyspbltyXS5jb21wbGV0
ZSgpO3RoaXMub2JzZXJ2ZXJzLmxlbmd0aD0wfSxlLnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5j
dGlvbigpe3RoaXMuaXNTdG9wcGVkPSEwLHRoaXMuY2xvc2VkPSEwLHRoaXMub2JzZXJ2ZXJzPW51
bGx9LGUucHJvdG90eXBlLl90cnlTdWJzY3JpYmU9ZnVuY3Rpb24oZSl7aWYodGhpcy5jbG9zZWQp
dGhyb3cgbmV3IHMuT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3I7cmV0dXJuIHQucHJvdG90eXBlLl90
cnlTdWJzY3JpYmUuY2FsbCh0aGlzLGUpfSxlLnByb3RvdHlwZS5fc3Vic2NyaWJlPWZ1bmN0aW9u
KHQpe2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBzLk9iamVjdFVuc3Vic2NyaWJlZEVycm9yO3Jl
dHVybiB0aGlzLmhhc0Vycm9yPyh0LmVycm9yKHRoaXMudGhyb3duRXJyb3IpLGEuU3Vic2NyaXB0
aW9uLkVNUFRZKTp0aGlzLmlzU3RvcHBlZD8odC5jb21wbGV0ZSgpLGEuU3Vic2NyaXB0aW9uLkVN
UFRZKToodGhpcy5vYnNlcnZlcnMucHVzaCh0KSxuZXcgdS5TdWJqZWN0U3Vic2NyaXB0aW9uKHRo
aXMsdCkpfSxlLnByb3RvdHlwZS5hc09ic2VydmFibGU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgby5P
YnNlcnZhYmxlO3JldHVybiB0LnNvdXJjZT10aGlzLHR9LGUuY3JlYXRlPWZ1bmN0aW9uKHQsZSl7
cmV0dXJuIG5ldyBmKHQsZSl9LGV9KG8uT2JzZXJ2YWJsZSk7ZS5TdWJqZWN0PXA7dmFyIGY9ZnVu
Y3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3QuY2FsbCh0aGlzKSx0aGlzLmRlc3RpbmF0aW9uPWUs
dGhpcy5zb3VyY2U9bn1yZXR1cm4gcihlLHQpLGUucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24odCl7
dmFyIGU9dGhpcy5kZXN0aW5hdGlvbjtlJiZlLm5leHQmJmUubmV4dCh0KX0sZS5wcm90b3R5cGUu
ZXJyb3I9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kZXN0aW5hdGlvbjtlJiZlLmVycm9yJiZ0aGlz
LmRlc3RpbmF0aW9uLmVycm9yKHQpfSxlLnByb3RvdHlwZS5jb21wbGV0ZT1mdW5jdGlvbigpe3Zh
ciB0PXRoaXMuZGVzdGluYXRpb247dCYmdC5jb21wbGV0ZSYmdGhpcy5kZXN0aW5hdGlvbi5jb21w
bGV0ZSgpfSxlLnByb3RvdHlwZS5fc3Vic2NyaWJlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNv
dXJjZT90aGlzLnNvdXJjZS5zdWJzY3JpYmUodCk6YS5TdWJzY3JpcHRpb24uRU1QVFl9LGV9KHAp
O2UuQW5vbnltb3VzU3ViamVjdD1mfSxGenJvOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7
LyoqCisgKiBAbGljZW5zZQorICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCisgKgorICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4g
TUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKKyAqLworZnVuY3Rpb24gcih0KXtpZigi
c3RyaW5nIiE9dHlwZW9mIHQpcmV0dXJuIHQ7c3dpdGNoKHQudG9VcHBlckNhc2UoKSl7Y2FzZSJH
RVQiOnJldHVybiBiLkdldDtjYXNlIlBPU1QiOnJldHVybiBiLlBvc3Q7Y2FzZSJQVVQiOnJldHVy
biBiLlB1dDtjYXNlIkRFTEVURSI6cmV0dXJuIGIuRGVsZXRlO2Nhc2UiT1BUSU9OUyI6cmV0dXJu
IGIuT3B0aW9ucztjYXNlIkhFQUQiOnJldHVybiBiLkhlYWQ7Y2FzZSJQQVRDSCI6cmV0dXJuIGIu
UGF0Y2h9dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHJlcXVlc3QgbWV0aG9kLiBUaGUgbWV0aG9k
ICInK3QrJyIgaXMgbm90IHN1cHBvcnRlZC4nKX1mdW5jdGlvbiBvKHQpe3JldHVybiJyZXNwb25z
ZVVSTCJpbiB0P3QucmVzcG9uc2VVUkw6L15YLVJlcXVlc3QtVVJMOi9tLnRlc3QodC5nZXRBbGxS
ZXNwb25zZUhlYWRlcnMoKSk/dC5nZXRSZXNwb25zZUhlYWRlcigiWC1SZXF1ZXN0LVVSTCIpOm51
bGx9ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGU9bmV3IFVpbnQxNkFycmF5KHQubGVuZ3RoKSxuPTAs
cj10Lmxlbmd0aDtuPHI7bisrKWVbbl09dC5jaGFyQ29kZUF0KG4pO3JldHVybiBlLmJ1ZmZlcn0v
KioKKyAqIEBsaWNlbnNlCisgKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KKyAqCisgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBN
SVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQorICogQHBhcmFtIHs/PX0gcmF3UGFyYW1z
CisgKiBAcmV0dXJuIHs/fQorICovCitmdW5jdGlvbiBhKHQpe3ZvaWQgMD09PXQmJih0PSIiKTt2
YXIgZT1uZXcgTWFwO2lmKHQubGVuZ3RoPjApe3Quc3BsaXQoIiYiKS5mb3JFYWNoKGZ1bmN0aW9u
KHQpe3ZhciBuPXQuaW5kZXhPZigiPSIpLHI9LTE9PW4/W3QsIiJdOlt0LnNsaWNlKDAsbiksdC5z
bGljZShuKzEpXSxvPXJbMF0saT1yWzFdLGE9ZS5nZXQobyl8fFtdO2EucHVzaChpKSxlLnNldChv
LGEpfSl9cmV0dXJuIGV9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHQp
LnJlcGxhY2UoLyU0MC9naSwiQCIpLnJlcGxhY2UoLyUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNC9n
aSwiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUzQi9naSwiOyIpLnJlcGxhY2Uo
LyUyQi9naSwiKyIpLnJlcGxhY2UoLyUzRC9naSwiPSIpLnJlcGxhY2UoLyUzRi9naSwiPyIpLnJl
cGxhY2UoLyUyRi9naSwiLyIpfWZ1bmN0aW9uIHUoKXt2YXIgdD0ib2JqZWN0Ij09dHlwZW9mIHdp
bmRvdz93aW5kb3c6e307cmV0dXJuIG51bGw9PT1JJiYoST10W0RdPXt9KSxJfWZ1bmN0aW9uIGMo
dCl7dmFyIGU9bmV3IE47cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7
dmFyIHI9dFtuXTtyJiZBcnJheS5pc0FycmF5KHIpP3IuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1
cm4gZS5hcHBlbmQobix0LnRvU3RyaW5nKCkpfSk6ZS5hcHBlbmQobixyLnRvU3RyaW5nKCkpfSks
ZX0vKioKKyAqIEBsaWNlbnNlCisgKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqCisgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
biBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorICogZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQorICovCitmdW5jdGlvbiBsKHQsZSl7
cmV0dXJuIHQuY3JlYXRlQ29ubmVjdGlvbihlKS5yZXNwb25zZX1mdW5jdGlvbiBwKHQsZSxuLHIp
e3ZhciBvPXQ7cmV0dXJuIGU/by5tZXJnZShuZXcgVyh7bWV0aG9kOmUubWV0aG9kfHxuLHVybDpl
LnVybHx8cixzZWFyY2g6ZS5zZWFyY2gscGFyYW1zOmUucGFyYW1zLGhlYWRlcnM6ZS5oZWFkZXJz
LGJvZHk6ZS5ib2R5LHdpdGhDcmVkZW50aWFsczplLndpdGhDcmVkZW50aWFscyxyZXNwb25zZVR5
cGU6ZS5yZXNwb25zZVR5cGV9KSk6by5tZXJnZShuZXcgVyh7bWV0aG9kOm4sdXJsOnJ9KSl9Lyoq
CisgKiBAbGljZW5zZQorICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKgorICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlU
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUg
YXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKKyAqLworZnVuY3Rpb24gZigpe3JldHVybiBu
ZXcgWX1mdW5jdGlvbiBkKHQsZSl7cmV0dXJuIG5ldyBydCh0LGUpfWZ1bmN0aW9uIGgodCxlKXty
ZXR1cm4gbmV3IG90KHQsZSl9dmFyIHk9bigiVFRvTyIpLG09bigiM2ozSyIpLGc9bigickNUZiIp
LHY9KG4ubihnKSxuKCJRYmRtIikpO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBffSksbi5k
KGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIEt9KSxuLmQoZSwiaCIsZnVuY3Rpb24oKXtyZXR1cm4g
UX0pLG4uZChlLCJnIixmdW5jdGlvbigpe3JldHVybiBXfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7
cmV0dXJuIFN9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gUH0pLG4uZChlLCJpIixmdW5j
dGlvbigpe3JldHVybiBydH0pLG4uZChlLCJrIixmdW5jdGlvbigpe3JldHVybiBpdH0pLG4uZChl
LCJkIixmdW5jdGlvbigpe3JldHVybiBUfSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ9
KSxuLmQoZSwiaiIsZnVuY3Rpb24oKXtyZXR1cm4gZH0pOy8qKgorICogQGxpY2Vuc2UgQW5ndWxh
ciB2NC4zLjEKKyAqIChjKSAyMDEwLTIwMTcgR29vZ2xlLCBJbmMuIGh0dHBzOi8vYW5ndWxhci5p
by8KKyAqIExpY2Vuc2U6IE1JVAorICovCisvKioKKyAqIEBsaWNlbnNlCisgKiBDb3B5cmlnaHQg
R29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
ICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5z
ZQorICovCit2YXIgXz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBl
LmJ1aWxkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdH0sdH0oKTtfLmRlY29y
YXRvcnM9W3t0eXBlOm0uRH1dLF8uY3RvclBhcmFtZXRlcnM9ZnVuY3Rpb24oKXtyZXR1cm5bXX07
dmFyIGI9e307Yi5HZXQ9MCxiLlBvc3Q9MSxiLlB1dD0yLGIuRGVsZXRlPTMsYi5PcHRpb25zPTQs
Yi5IZWFkPTUsYi5QYXRjaD02LGJbYi5HZXRdPSJHZXQiLGJbYi5Qb3N0XT0iUG9zdCIsYltiLlB1
dF09IlB1dCIsYltiLkRlbGV0ZV09IkRlbGV0ZSIsYltiLk9wdGlvbnNdPSJPcHRpb25zIixiW2Iu
SGVhZF09IkhlYWQiLGJbYi5QYXRjaF09IlBhdGNoIjt2YXIgdz17fTt3LlVuc2VudD0wLHcuT3Bl
bj0xLHcuSGVhZGVyc1JlY2VpdmVkPTIsdy5Mb2FkaW5nPTMsdy5Eb25lPTQsdy5DYW5jZWxsZWQ9
NSx3W3cuVW5zZW50XT0iVW5zZW50Iix3W3cuT3Blbl09Ik9wZW4iLHdbdy5IZWFkZXJzUmVjZWl2
ZWRdPSJIZWFkZXJzUmVjZWl2ZWQiLHdbdy5Mb2FkaW5nXT0iTG9hZGluZyIsd1t3LkRvbmVdPSJE
b25lIix3W3cuQ2FuY2VsbGVkXT0iQ2FuY2VsbGVkIjt2YXIgQz17fTtDLkJhc2ljPTAsQy5Db3Jz
PTEsQy5EZWZhdWx0PTIsQy5FcnJvcj0zLEMuT3BhcXVlPTQsQ1tDLkJhc2ljXT0iQmFzaWMiLENb
Qy5Db3JzXT0iQ29ycyIsQ1tDLkRlZmF1bHRdPSJEZWZhdWx0IixDW0MuRXJyb3JdPSJFcnJvciIs
Q1tDLk9wYXF1ZV09Ik9wYXF1ZSI7dmFyIEU9e307RS5OT05FPTAsRS5KU09OPTEsRS5GT1JNPTIs
RS5GT1JNX0RBVEE9MyxFLlRFWFQ9NCxFLkJMT0I9NSxFLkFSUkFZX0JVRkZFUj02LEVbRS5OT05F
XT0iTk9ORSIsRVtFLkpTT05dPSJKU09OIixFW0UuRk9STV09IkZPUk0iLEVbRS5GT1JNX0RBVEFd
PSJGT1JNX0RBVEEiLEVbRS5URVhUXT0iVEVYVCIsRVtFLkJMT0JdPSJCTE9CIixFW0UuQVJSQVlf
QlVGRkVSXT0iQVJSQVlfQlVGRkVSIjt2YXIgTz17fTtPLlRleHQ9MCxPLkpzb249MSxPLkFycmF5
QnVmZmVyPTIsTy5CbG9iPTMsT1tPLlRleHRdPSJUZXh0IixPW08uSnNvbl09Ikpzb24iLE9bTy5B
cnJheUJ1ZmZlcl09IkFycmF5QnVmZmVyIixPW08uQmxvYl09IkJsb2IiO3ZhciB4PWZ1bmN0aW9u
KCl7ZnVuY3Rpb24gdChlKXt2YXIgbj10aGlzO2lmKHRoaXMuX2hlYWRlcnM9bmV3IE1hcCx0aGlz
Ll9ub3JtYWxpemVkTmFtZXM9bmV3IE1hcCxlKXJldHVybiBlIGluc3RhbmNlb2YgdD92b2lkIGUu
Zm9yRWFjaChmdW5jdGlvbih0LGUpe3QuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gbi5hcHBl
bmQoZSx0KX0pfSk6dm9pZCBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBy
PUFycmF5LmlzQXJyYXkoZVt0XSk/ZVt0XTpbZVt0XV07bi5kZWxldGUodCksci5mb3JFYWNoKGZ1
bmN0aW9uKGUpe3JldHVybiBuLmFwcGVuZCh0LGUpfSl9KX1yZXR1cm4gdC5mcm9tUmVzcG9uc2VI
ZWFkZXJTdHJpbmc9ZnVuY3Rpb24oZSl7dmFyIG49bmV3IHQ7cmV0dXJuIGUuc3BsaXQoIlxuIiku
Zm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LmluZGV4T2YoIjoiKTtpZihlPjApe3ZhciByPXQu
c2xpY2UoMCxlKSxvPXQuc2xpY2UoZSsxKS50cmltKCk7bi5zZXQocixvKX19KSxufSx0LnByb3Rv
dHlwZS5hcHBlbmQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLmdldEFsbCh0KTtudWxsPT09bj90
aGlzLnNldCh0LGUpOm4ucHVzaChlKX0sdC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHQpe3Zh
ciBlPXQudG9Mb3dlckNhc2UoKTt0aGlzLl9ub3JtYWxpemVkTmFtZXMuZGVsZXRlKGUpLHRoaXMu
X2hlYWRlcnMuZGVsZXRlKGUpfSx0LnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKHQpe3ZhciBl
PXRoaXM7dGhpcy5faGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKG4scil7cmV0dXJuIHQobixlLl9u
b3JtYWxpemVkTmFtZXMuZ2V0KHIpLGUuX2hlYWRlcnMpfSl9LHQucHJvdG90eXBlLmdldD1mdW5j
dGlvbih0KXt2YXIgZT10aGlzLmdldEFsbCh0KTtyZXR1cm4gbnVsbD09PWU/bnVsbDplLmxlbmd0
aD4wP2VbMF06bnVsbH0sdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9o
ZWFkZXJzLmhhcyh0LnRvTG93ZXJDYXNlKCkpfSx0LnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7
cmV0dXJuIEFycmF5LmZyb20odGhpcy5fbm9ybWFsaXplZE5hbWVzLnZhbHVlcygpKX0sdC5wcm90
b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7QXJyYXkuaXNBcnJheShlKT9lLmxlbmd0aCYmdGhpcy5f
aGVhZGVycy5zZXQodC50b0xvd2VyQ2FzZSgpLFtlLmpvaW4oIiwiKV0pOnRoaXMuX2hlYWRlcnMu
c2V0KHQudG9Mb3dlckNhc2UoKSxbZV0pLHRoaXMubWF5QmVTZXROb3JtYWxpemVkTmFtZSh0KX0s
dC5wcm90b3R5cGUudmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5faGVh
ZGVycy52YWx1ZXMoKSl9LHQucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3ZhciB0PXRoaXMs
ZT17fTtyZXR1cm4gdGhpcy5faGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKG4scil7dmFyIG89W107
bi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBvLnB1c2guYXBwbHkobyx0LnNwbGl0KCIsIikp
fSksZVt0Ll9ub3JtYWxpemVkTmFtZXMuZ2V0KHIpXT1vfSksZX0sdC5wcm90b3R5cGUuZ2V0QWxs
PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhhcyh0KT90aGlzLl9oZWFkZXJzLmdldCh0LnRvTG93
ZXJDYXNlKCkpfHxudWxsOm51bGx9LHQucHJvdG90eXBlLmVudHJpZXM9ZnVuY3Rpb24oKXt0aHJv
dyBuZXcgRXJyb3IoJyJlbnRyaWVzIiBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkIG9uIEhlYWRl
cnMgY2xhc3MnKX0sdC5wcm90b3R5cGUubWF5QmVTZXROb3JtYWxpemVkTmFtZT1mdW5jdGlvbih0
KXt2YXIgZT10LnRvTG93ZXJDYXNlKCk7dGhpcy5fbm9ybWFsaXplZE5hbWVzLmhhcyhlKXx8dGhp
cy5fbm9ybWFsaXplZE5hbWVzLnNldChlLHQpfSx0fSgpLFA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0
KHQpe3ZvaWQgMD09PXQmJih0PXt9KTt2YXIgZT10LmJvZHksbj10LnN0YXR1cyxyPXQuaGVhZGVy
cyxvPXQuc3RhdHVzVGV4dCxpPXQudHlwZSxhPXQudXJsO3RoaXMuYm9keT1udWxsIT1lP2U6bnVs
bCx0aGlzLnN0YXR1cz1udWxsIT1uP246bnVsbCx0aGlzLmhlYWRlcnM9bnVsbCE9cj9yOm51bGws
dGhpcy5zdGF0dXNUZXh0PW51bGwhPW8/bzpudWxsLHRoaXMudHlwZT1udWxsIT1pP2k6bnVsbCx0
aGlzLnVybD1udWxsIT1hP2E6bnVsbH1yZXR1cm4gdC5wcm90b3R5cGUubWVyZ2U9ZnVuY3Rpb24o
ZSl7cmV0dXJuIG5ldyB0KHtib2R5OmUmJm51bGwhPWUuYm9keT9lLmJvZHk6dGhpcy5ib2R5LHN0
YXR1czplJiZudWxsIT1lLnN0YXR1cz9lLnN0YXR1czp0aGlzLnN0YXR1cyxoZWFkZXJzOmUmJm51
bGwhPWUuaGVhZGVycz9lLmhlYWRlcnM6dGhpcy5oZWFkZXJzLHN0YXR1c1RleHQ6ZSYmbnVsbCE9
ZS5zdGF0dXNUZXh0P2Uuc3RhdHVzVGV4dDp0aGlzLnN0YXR1c1RleHQsdHlwZTplJiZudWxsIT1l
LnR5cGU/ZS50eXBlOnRoaXMudHlwZSx1cmw6ZSYmbnVsbCE9ZS51cmw/ZS51cmw6dGhpcy51cmx9
KX0sdH0oKSxTPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gdC5jYWxsKHRoaXMse3N0
YXR1czoyMDAsc3RhdHVzVGV4dDoiT2siLHR5cGU6Qy5EZWZhdWx0LGhlYWRlcnM6bmV3IHh9KXx8
dGhpc31yZXR1cm4geS5hKGUsdCksZX0oUCk7Uy5kZWNvcmF0b3JzPVt7dHlwZTptLkR9XSxTLmN0
b3JQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7cmV0dXJuW119Oy8qKgorICogQGxpY2Vuc2UKKyAqIENv
cHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5p
by9saWNlbnNlCisgKi8KK3ZhciBBPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5w
cm90b3R5cGUuY3JlYXRlQ29ubmVjdGlvbj1mdW5jdGlvbih0KXt9LHR9KCksVD0oZnVuY3Rpb24o
KXtmdW5jdGlvbiB0KCl7fX0oKSxmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJv
dG90eXBlLmNvbmZpZ3VyZVJlcXVlc3Q9ZnVuY3Rpb24odCl7fSx0fSgpKSxrPWZ1bmN0aW9uKHQp
e3JldHVybiB0Pj0yMDAmJnQ8MzAwfSxWPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4g
dC5wcm90b3R5cGUuZW5jb2RlS2V5PWZ1bmN0aW9uKHQpe3JldHVybiBzKHQpfSx0LnByb3RvdHlw
ZS5lbmNvZGVWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gcyh0KX0sdH0oKSxOPWZ1bmN0aW9uKCl7
ZnVuY3Rpb24gdCh0LGUpe3ZvaWQgMD09PXQmJih0PSIiKSx2b2lkIDA9PT1lJiYoZT1uZXcgViks
dGhpcy5yYXdQYXJhbXM9dCx0aGlzLnF1ZXJ5RW5jb2Rlcj1lLHRoaXMucGFyYW1zTWFwPWEodCl9
cmV0dXJuIHQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHQoIiIsdGhpcy5x
dWVyeUVuY29kZXIpO3JldHVybiBlLmFwcGVuZEFsbCh0aGlzKSxlfSx0LnByb3RvdHlwZS5oYXM9
ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucGFyYW1zTWFwLmhhcyh0KX0sdC5wcm90b3R5cGUuZ2V0
PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGFyYW1zTWFwLmdldCh0KTtyZXR1cm4gQXJyYXkuaXNB
cnJheShlKT9lWzBdOm51bGx9LHQucHJvdG90eXBlLmdldEFsbD1mdW5jdGlvbih0KXtyZXR1cm4g
dGhpcy5wYXJhbXNNYXAuZ2V0KHQpfHxbXX0sdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7
aWYodm9pZCAwPT09ZXx8bnVsbD09PWUpcmV0dXJuIHZvaWQgdGhpcy5kZWxldGUodCk7dmFyIG49
dGhpcy5wYXJhbXNNYXAuZ2V0KHQpfHxbXTtuLmxlbmd0aD0wLG4ucHVzaChlKSx0aGlzLnBhcmFt
c01hcC5zZXQodCxuKX0sdC5wcm90b3R5cGUuc2V0QWxsPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7
dC5wYXJhbXNNYXAuZm9yRWFjaChmdW5jdGlvbih0LG4pe3ZhciByPWUucGFyYW1zTWFwLmdldChu
KXx8W107ci5sZW5ndGg9MCxyLnB1c2godFswXSksZS5wYXJhbXNNYXAuc2V0KG4scil9KX0sdC5w
cm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwIT09ZSYmbnVsbCE9PWUpe3Zh
ciBuPXRoaXMucGFyYW1zTWFwLmdldCh0KXx8W107bi5wdXNoKGUpLHRoaXMucGFyYW1zTWFwLnNl
dCh0LG4pfX0sdC5wcm90b3R5cGUuYXBwZW5kQWxsPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dC5w
YXJhbXNNYXAuZm9yRWFjaChmdW5jdGlvbih0LG4pe2Zvcih2YXIgcj1lLnBhcmFtc01hcC5nZXQo
bil8fFtdLG89MDtvPHQubGVuZ3RoOysrbylyLnB1c2godFtvXSk7ZS5wYXJhbXNNYXAuc2V0KG4s
cil9KX0sdC5wcm90b3R5cGUucmVwbGFjZUFsbD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3QucGFy
YW1zTWFwLmZvckVhY2goZnVuY3Rpb24odCxuKXt2YXIgcj1lLnBhcmFtc01hcC5nZXQobil8fFtd
O3IubGVuZ3RoPTA7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDsrK28pci5wdXNoKHRbb10pO2UucGFy
YW1zTWFwLnNldChuLHIpfSl9LHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIHQ9
dGhpcyxlPVtdO3JldHVybiB0aGlzLnBhcmFtc01hcC5mb3JFYWNoKGZ1bmN0aW9uKG4scil7bi5m
b3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiBlLnB1c2godC5xdWVyeUVuY29kZXIuZW5jb2RlS2V5
KHIpKyI9Iit0LnF1ZXJ5RW5jb2Rlci5lbmNvZGVWYWx1ZShuKSl9KX0pLGUuam9pbigiJiIpfSx0
LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7dGhpcy5wYXJhbXNNYXAuZGVsZXRlKHQpfSx0
fSgpLE09ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5qc29uPWZ1
bmN0aW9uKCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0aGlzLl9ib2R5P0pTT04ucGFyc2UodGhp
cy5fYm9keSk6dGhpcy5fYm9keSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP0pTT04ucGFyc2UodGhp
cy50ZXh0KCkpOnRoaXMuX2JvZHl9LHQucHJvdG90eXBlLnRleHQ9ZnVuY3Rpb24odCl7aWYodm9p
ZCAwPT09dCYmKHQ9ImxlZ2FjeSIpLHRoaXMuX2JvZHkgaW5zdGFuY2VvZiBOKXJldHVybiB0aGlz
Ll9ib2R5LnRvU3RyaW5nKCk7aWYodGhpcy5fYm9keSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXN3
aXRjaCh0KXtjYXNlImxlZ2FjeSI6cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVs
bCxuZXcgVWludDE2QXJyYXkodGhpcy5fYm9keSkpO2Nhc2UiaXNvLTg4NTkiOnJldHVybiBTdHJp
bmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbmV3IFVpbnQ4QXJyYXkodGhpcy5fYm9keSkpO2Rl
ZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHZhbHVlIGZvciBlbmNvZGluZ0hpbnQ6ICIr
dCl9cmV0dXJuIG51bGw9PXRoaXMuX2JvZHk/IiI6Im9iamVjdCI9PXR5cGVvZiB0aGlzLl9ib2R5
P0pTT04uc3RyaW5naWZ5KHRoaXMuX2JvZHksbnVsbCwyKTp0aGlzLl9ib2R5LnRvU3RyaW5nKCl9
LHQucHJvdG90eXBlLmFycmF5QnVmZmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JvZHkgaW5z
dGFuY2VvZiBBcnJheUJ1ZmZlcj90aGlzLl9ib2R5OmkodGhpcy50ZXh0KCkpfSx0LnByb3RvdHlw
ZS5ibG9iPWZ1bmN0aW9uKCl7aWYodGhpcy5fYm9keSBpbnN0YW5jZW9mIEJsb2IpcmV0dXJuIHRo
aXMuX2JvZHk7aWYodGhpcy5fYm9keSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXJldHVybiBuZXcg
QmxvYihbdGhpcy5fYm9keV0pO3Rocm93IG5ldyBFcnJvcigiVGhlIHJlcXVlc3QgYm9keSBpc24n
dCBlaXRoZXIgYSBibG9iIG9yIGFuIGFycmF5IGJ1ZmZlciIpfSx0fSgpLGo9ZnVuY3Rpb24odCl7
ZnVuY3Rpb24gZShlKXt2YXIgbj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uX2JvZHk9ZS5i
b2R5LG4uc3RhdHVzPWUuc3RhdHVzLG4ub2s9bi5zdGF0dXM+PTIwMCYmbi5zdGF0dXM8PTI5OSxu
LnN0YXR1c1RleHQ9ZS5zdGF0dXNUZXh0LG4uaGVhZGVycz1lLmhlYWRlcnMsbi50eXBlPWUudHlw
ZSxuLnVybD1lLnVybCxufXJldHVybiB5LmEoZSx0KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5j
dGlvbigpe3JldHVybiJSZXNwb25zZSB3aXRoIHN0YXR1czogIit0aGlzLnN0YXR1cysiICIrdGhp
cy5zdGF0dXNUZXh0KyIgZm9yIFVSTDogIit0aGlzLnVybH0sZX0oTSksUj0wLEQ9Il9fbmdfanNv
bnBfXyIsST1udWxsLEY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlw
ZS5idWlsZD1mdW5jdGlvbih0KXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQi
KTtyZXR1cm4gZS5zcmM9dCxlfSx0LnByb3RvdHlwZS5uZXh0UmVxdWVzdElEPWZ1bmN0aW9uKCl7
cmV0dXJuIl9fcmVxIitSKyt9LHQucHJvdG90eXBlLnJlcXVlc3RDYWxsYmFjaz1mdW5jdGlvbih0
KXtyZXR1cm4gRCsiLiIrdCsiLmZpbmlzaGVkIn0sdC5wcm90b3R5cGUuZXhwb3NlQ29ubmVjdGlv
bj1mdW5jdGlvbih0LGUpe3UoKVt0XT1lfSx0LnByb3RvdHlwZS5yZW1vdmVDb25uZWN0aW9uPWZ1
bmN0aW9uKHQpe3UoKVt0XT1udWxsfSx0LnByb3RvdHlwZS5zZW5kPWZ1bmN0aW9uKHQpe2RvY3Vt
ZW50LmJvZHkuYXBwZW5kQ2hpbGQodCl9LHQucHJvdG90eXBlLmNsZWFudXA9ZnVuY3Rpb24odCl7
dC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9LHR9KCk7Ri5kZWNvcmF0
b3JzPVt7dHlwZTptLkR9XSxGLmN0b3JQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7cmV0dXJuW119Oy8q
KgorICogQGxpY2Vuc2UKKyAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgorICoKKyAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1J
VC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
IGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCisgKi8KK3ZhciBIPSJKU09OUCBpbmplY3Rl
ZCBzY3JpcHQgZGlkIG5vdCBpbnZva2UgY2FsbGJhY2suIixMPSJKU09OUCByZXF1ZXN0cyBtdXN0
IHVzZSBHRVQgcmVxdWVzdCBtZXRob2QuIixCPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1
cm4gdC5wcm90b3R5cGUuZmluaXNoZWQ9ZnVuY3Rpb24odCl7fSx0fSgpLFU9ZnVuY3Rpb24odCl7
ZnVuY3Rpb24gZShlLG4scil7dmFyIG89dC5jYWxsKHRoaXMpfHx0aGlzO2lmKG8uX2RvbT1uLG8u
YmFzZVJlc3BvbnNlT3B0aW9ucz1yLG8uX2ZpbmlzaGVkPSExLGUubWV0aG9kIT09Yi5HZXQpdGhy
b3cgbmV3IFR5cGVFcnJvcihMKTtyZXR1cm4gby5yZXF1ZXN0PWUsby5yZXNwb25zZT1uZXcgZy5P
YnNlcnZhYmxlKGZ1bmN0aW9uKHQpe28ucmVhZHlTdGF0ZT13LkxvYWRpbmc7dmFyIGk9by5faWQ9
bi5uZXh0UmVxdWVzdElEKCk7bi5leHBvc2VDb25uZWN0aW9uKGksbyk7dmFyIGE9bi5yZXF1ZXN0
Q2FsbGJhY2soby5faWQpLHM9ZS51cmw7cy5pbmRleE9mKCI9SlNPTlBfQ0FMTEJBQ0smIik+LTE/
cz1zLnJlcGxhY2UoIj1KU09OUF9DQUxMQkFDSyYiLCI9IithKyImIik6cy5sYXN0SW5kZXhPZigi
PUpTT05QX0NBTExCQUNLIik9PT1zLmxlbmd0aC0iPUpTT05QX0NBTExCQUNLIi5sZW5ndGgmJihz
PXMuc3Vic3RyaW5nKDAscy5sZW5ndGgtIj1KU09OUF9DQUxMQkFDSyIubGVuZ3RoKSsiPSIrYSk7
dmFyIHU9by5fc2NyaXB0PW4uYnVpbGQocyksYz1mdW5jdGlvbihlKXtpZihvLnJlYWR5U3RhdGUh
PT13LkNhbmNlbGxlZCl7aWYoby5yZWFkeVN0YXRlPXcuRG9uZSxuLmNsZWFudXAodSksIW8uX2Zp
bmlzaGVkKXt2YXIgaT1uZXcgUCh7Ym9keTpILHR5cGU6Qy5FcnJvcix1cmw6c30pO3JldHVybiBy
JiYoaT1yLm1lcmdlKGkpKSx2b2lkIHQuZXJyb3IobmV3IGooaSkpfXZhciBhPW5ldyBQKHtib2R5
Om8uX3Jlc3BvbnNlRGF0YSx1cmw6c30pO28uYmFzZVJlc3BvbnNlT3B0aW9ucyYmKGE9by5iYXNl
UmVzcG9uc2VPcHRpb25zLm1lcmdlKGEpKSx0Lm5leHQobmV3IGooYSkpLHQuY29tcGxldGUoKX19
LGw9ZnVuY3Rpb24oZSl7aWYoby5yZWFkeVN0YXRlIT09dy5DYW5jZWxsZWQpe28ucmVhZHlTdGF0
ZT13LkRvbmUsbi5jbGVhbnVwKHUpO3ZhciBpPW5ldyBQKHtib2R5OmUubWVzc2FnZSx0eXBlOkMu
RXJyb3J9KTtyJiYoaT1yLm1lcmdlKGkpKSx0LmVycm9yKG5ldyBqKGkpKX19O3JldHVybiB1LmFk
ZEV2ZW50TGlzdGVuZXIoImxvYWQiLGMpLHUuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGwpLG4u
c2VuZCh1KSxmdW5jdGlvbigpe28ucmVhZHlTdGF0ZT13LkNhbmNlbGxlZCx1LnJlbW92ZUV2ZW50
TGlzdGVuZXIoImxvYWQiLGMpLHUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGwpLG8uX2Rv
bS5jbGVhbnVwKHUpfX0pLG99cmV0dXJuIHkuYShlLHQpLGUucHJvdG90eXBlLmZpbmlzaGVkPWZ1
bmN0aW9uKHQpe3RoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX2RvbS5yZW1vdmVDb25uZWN0aW9uKHRo
aXMuX2lkKSx0aGlzLnJlYWR5U3RhdGUhPT13LkNhbmNlbGxlZCYmKHRoaXMuX3Jlc3BvbnNlRGF0
YT10KX0sZX0oQiksRz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0
LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4geS5hKGUsdCksZX0oQSkscT1mdW5j
dGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBy
Ll9icm93c2VySlNPTlA9ZSxyLl9iYXNlUmVzcG9uc2VPcHRpb25zPW4scn1yZXR1cm4geS5hKGUs
dCksZS5wcm90b3R5cGUuY3JlYXRlQ29ubmVjdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFUo
dCx0aGlzLl9icm93c2VySlNPTlAsdGhpcy5fYmFzZVJlc3BvbnNlT3B0aW9ucyl9LGV9KEcpO3Eu
ZGVjb3JhdG9ycz1be3R5cGU6bS5EfV0scS5jdG9yUGFyYW1ldGVycz1mdW5jdGlvbigpe3JldHVy
blt7dHlwZTpGfSx7dHlwZTpQfV19Oy8qKgorICogQGxpY2Vuc2UKKyAqIENvcHlyaWdodCBHb29n
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisgKiBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCisg
Ki8KK3ZhciB6PS9eXClcXVx9Jyw/XG4vLFo9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt2
YXIgcj10aGlzO3RoaXMucmVxdWVzdD10LHRoaXMucmVzcG9uc2U9bmV3IGcuT2JzZXJ2YWJsZShm
dW5jdGlvbihpKXt2YXIgYT1lLmJ1aWxkKCk7YS5vcGVuKGJbdC5tZXRob2RdLnRvVXBwZXJDYXNl
KCksdC51cmwpLG51bGwhPXQud2l0aENyZWRlbnRpYWxzJiYoYS53aXRoQ3JlZGVudGlhbHM9dC53
aXRoQ3JlZGVudGlhbHMpO3ZhciBzPWZ1bmN0aW9uKCl7dmFyIGU9MTIyMz09PWEuc3RhdHVzPzIw
NDphLnN0YXR1cyxyPW51bGw7MjA0IT09ZSYmInN0cmluZyI9PXR5cGVvZihyPXZvaWQgMD09PWEu
cmVzcG9uc2U/YS5yZXNwb25zZVRleHQ6YS5yZXNwb25zZSkmJihyPXIucmVwbGFjZSh6LCIiKSks
MD09PWUmJihlPXI/MjAwOjApO3ZhciBzPXguZnJvbVJlc3BvbnNlSGVhZGVyU3RyaW5nKGEuZ2V0
QWxsUmVzcG9uc2VIZWFkZXJzKCkpLHU9byhhKXx8dC51cmwsYz1hLnN0YXR1c1RleHR8fCJPSyIs
bD1uZXcgUCh7Ym9keTpyLHN0YXR1czplLGhlYWRlcnM6cyxzdGF0dXNUZXh0OmMsdXJsOnV9KTtu
dWxsIT1uJiYobD1uLm1lcmdlKGwpKTt2YXIgcD1uZXcgaihsKTtpZihwLm9rPWsoZSkscC5vayly
ZXR1cm4gaS5uZXh0KHApLHZvaWQgaS5jb21wbGV0ZSgpO2kuZXJyb3IocCl9LHU9ZnVuY3Rpb24o
dCl7dmFyIGU9bmV3IFAoe2JvZHk6dCx0eXBlOkMuRXJyb3Isc3RhdHVzOmEuc3RhdHVzLHN0YXR1
c1RleHQ6YS5zdGF0dXNUZXh0fSk7bnVsbCE9biYmKGU9bi5tZXJnZShlKSksaS5lcnJvcihuZXcg
aihlKSl9O2lmKHIuc2V0RGV0ZWN0ZWRDb250ZW50VHlwZSh0LGEpLG51bGw9PXQuaGVhZGVycyYm
KHQuaGVhZGVycz1uZXcgeCksdC5oZWFkZXJzLmhhcygiQWNjZXB0Iil8fHQuaGVhZGVycy5hcHBl
bmQoIkFjY2VwdCIsImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIpLHQuaGVhZGVy
cy5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEuc2V0UmVxdWVzdEhlYWRlcihlLHQuam9p
bigiLCIpKX0pLG51bGwhPXQucmVzcG9uc2VUeXBlJiZudWxsIT1hLnJlc3BvbnNlVHlwZSlzd2l0
Y2godC5yZXNwb25zZVR5cGUpe2Nhc2UgTy5BcnJheUJ1ZmZlcjphLnJlc3BvbnNlVHlwZT0iYXJy
YXlidWZmZXIiO2JyZWFrO2Nhc2UgTy5Kc29uOmEucmVzcG9uc2VUeXBlPSJqc29uIjticmVhaztj
YXNlIE8uVGV4dDphLnJlc3BvbnNlVHlwZT0idGV4dCI7YnJlYWs7Y2FzZSBPLkJsb2I6YS5yZXNw
b25zZVR5cGU9ImJsb2IiO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUaGUgc2VsZWN0
ZWQgcmVzcG9uc2VUeXBlIGlzIG5vdCBzdXBwb3J0ZWQiKX1yZXR1cm4gYS5hZGRFdmVudExpc3Rl
bmVyKCJsb2FkIixzKSxhLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIix1KSxhLnNlbmQoci5yZXF1
ZXN0LmdldEJvZHkoKSksZnVuY3Rpb24oKXthLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLHMp
LGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLHUpLGEuYWJvcnQoKX19KX1yZXR1cm4gdC5w
cm90b3R5cGUuc2V0RGV0ZWN0ZWRDb250ZW50VHlwZT1mdW5jdGlvbih0LGUpe2lmKG51bGw9PXQu
aGVhZGVyc3x8bnVsbD09dC5oZWFkZXJzLmdldCgiQ29udGVudC1UeXBlIikpc3dpdGNoKHQuY29u
dGVudFR5cGUpe2Nhc2UgRS5OT05FOmJyZWFrO2Nhc2UgRS5KU09OOmUuc2V0UmVxdWVzdEhlYWRl
cigiY29udGVudC10eXBlIiwiYXBwbGljYXRpb24vanNvbiIpO2JyZWFrO2Nhc2UgRS5GT1JNOmUu
c2V0UmVxdWVzdEhlYWRlcigiY29udGVudC10eXBlIiwiYXBwbGljYXRpb24veC13d3ctZm9ybS11
cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgiKTticmVhaztjYXNlIEUuVEVYVDplLnNldFJlcXVlc3RI
ZWFkZXIoImNvbnRlbnQtdHlwZSIsInRleHQvcGxhaW4iKTticmVhaztjYXNlIEUuQkxPQjp2YXIg
bj10LmJsb2IoKTtuLnR5cGUmJmUuc2V0UmVxdWVzdEhlYWRlcigiY29udGVudC10eXBlIixuLnR5
cGUpfX0sdH0oKSxZPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3ZvaWQgMD09PXQmJih0PSJY
U1JGLVRPS0VOIiksdm9pZCAwPT09ZSYmKGU9IlgtWFNSRi1UT0tFTiIpLHRoaXMuX2Nvb2tpZU5h
bWU9dCx0aGlzLl9oZWFkZXJOYW1lPWV9cmV0dXJuIHQucHJvdG90eXBlLmNvbmZpZ3VyZVJlcXVl
c3Q9ZnVuY3Rpb24odCl7dmFyIGU9bi5pKHYudCkoKS5nZXRDb29raWUodGhpcy5fY29va2llTmFt
ZSk7ZSYmdC5oZWFkZXJzLnNldCh0aGlzLl9oZWFkZXJOYW1lLGUpfSx0fSgpLEs9ZnVuY3Rpb24o
KXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl9icm93c2VyWEhSPXQsdGhpcy5fYmFzZVJlc3BvbnNl
T3B0aW9ucz1lLHRoaXMuX3hzcmZTdHJhdGVneT1ufXJldHVybiB0LnByb3RvdHlwZS5jcmVhdGVD
b25uZWN0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl94c3JmU3RyYXRlZ3kuY29uZmlndXJl
UmVxdWVzdCh0KSxuZXcgWih0LHRoaXMuX2Jyb3dzZXJYSFIsdGhpcy5fYmFzZVJlc3BvbnNlT3B0
aW9ucyl9LHR9KCk7Sy5kZWNvcmF0b3JzPVt7dHlwZTptLkR9XSxLLmN0b3JQYXJhbWV0ZXJzPWZ1
bmN0aW9uKCl7cmV0dXJuW3t0eXBlOl99LHt0eXBlOlB9LHt0eXBlOlR9XX07LyoqCisgKiBAbGlj
ZW5zZQorICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgor
ICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKyAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6
Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKKyAqLwordmFyIFc9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQp
e3ZvaWQgMD09PXQmJih0PXt9KTt2YXIgZT10Lm1ldGhvZCxuPXQuaGVhZGVycyxvPXQuYm9keSxp
PXQudXJsLGE9dC5zZWFyY2gscz10LnBhcmFtcyx1PXQud2l0aENyZWRlbnRpYWxzLGM9dC5yZXNw
b25zZVR5cGU7dGhpcy5tZXRob2Q9bnVsbCE9ZT9yKGUpOm51bGwsdGhpcy5oZWFkZXJzPW51bGwh
PW4/bjpudWxsLHRoaXMuYm9keT1udWxsIT1vP286bnVsbCx0aGlzLnVybD1udWxsIT1pP2k6bnVs
bCx0aGlzLnBhcmFtcz10aGlzLl9tZXJnZVNlYXJjaFBhcmFtcyhzfHxhKSx0aGlzLndpdGhDcmVk
ZW50aWFscz1udWxsIT11P3U6bnVsbCx0aGlzLnJlc3BvbnNlVHlwZT1udWxsIT1jP2M6bnVsbH1y
ZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJzZWFyY2giLHtnZXQ6ZnVu
Y3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJhbXN9LHNldDpmdW5jdGlvbih0KXt0aGlzLnBhcmFtcz10
fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm1lcmdlPWZ1bmN0
aW9uKGUpe3JldHVybiBuZXcgdCh7bWV0aG9kOmUmJm51bGwhPWUubWV0aG9kP2UubWV0aG9kOnRo
aXMubWV0aG9kLGhlYWRlcnM6ZSYmbnVsbCE9ZS5oZWFkZXJzP2UuaGVhZGVyczpuZXcgeCh0aGlz
LmhlYWRlcnMpLGJvZHk6ZSYmbnVsbCE9ZS5ib2R5P2UuYm9keTp0aGlzLmJvZHksdXJsOmUmJm51
bGwhPWUudXJsP2UudXJsOnRoaXMudXJsLHBhcmFtczplJiZ0aGlzLl9tZXJnZVNlYXJjaFBhcmFt
cyhlLnBhcmFtc3x8ZS5zZWFyY2gpLHdpdGhDcmVkZW50aWFsczplJiZudWxsIT1lLndpdGhDcmVk
ZW50aWFscz9lLndpdGhDcmVkZW50aWFsczp0aGlzLndpdGhDcmVkZW50aWFscyxyZXNwb25zZVR5
cGU6ZSYmbnVsbCE9ZS5yZXNwb25zZVR5cGU/ZS5yZXNwb25zZVR5cGU6dGhpcy5yZXNwb25zZVR5
cGV9KX0sdC5wcm90b3R5cGUuX21lcmdlU2VhcmNoUGFyYW1zPWZ1bmN0aW9uKHQpe3JldHVybiB0
P3QgaW5zdGFuY2VvZiBOP3QuY2xvbmUoKToic3RyaW5nIj09dHlwZW9mIHQ/bmV3IE4odCk6dGhp
cy5fcGFyc2VQYXJhbXModCk6dGhpcy5wYXJhbXN9LHQucHJvdG90eXBlLl9wYXJzZVBhcmFtcz1m
dW5jdGlvbih0KXt2YXIgZT10aGlzO3ZvaWQgMD09PXQmJih0PXt9KTt2YXIgbj1uZXcgTjtyZXR1
cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgbz10W3JdO0FycmF5Lmlz
QXJyYXkobyk/by5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9hcHBlbmRQYXJhbShyLHQs
bil9KTplLl9hcHBlbmRQYXJhbShyLG8sbil9KSxufSx0LnByb3RvdHlwZS5fYXBwZW5kUGFyYW09
ZnVuY3Rpb24odCxlLG4peyJzdHJpbmciIT10eXBlb2YgZSYmKGU9SlNPTi5zdHJpbmdpZnkoZSkp
LG4uYXBwZW5kKHQsZSl9LHR9KCksUT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIHQu
Y2FsbCh0aGlzLHttZXRob2Q6Yi5HZXQsaGVhZGVyczpuZXcgeH0pfHx0aGlzfXJldHVybiB5LmEo
ZSx0KSxlfShXKTtRLmRlY29yYXRvcnM9W3t0eXBlOm0uRH1dLFEuY3RvclBhcmFtZXRlcnM9ZnVu
Y3Rpb24oKXtyZXR1cm5bXX07LyoqCisgKiBAbGljZW5zZQorICogQ29weXJpZ2h0IEdvb2dsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyAqIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKKyAqLwor
dmFyIEo9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2YXIgbj10LmNhbGwodGhpcyl8fHRoaXMs
bz1lLnVybDtuLnVybD1lLnVybDt2YXIgaT1lLnBhcmFtc3x8ZS5zZWFyY2g7aWYoaSl7dmFyIGE9
dm9pZCAwO2lmKGE9Im9iamVjdCIhPXR5cGVvZiBpfHxpIGluc3RhbmNlb2YgTj9pLnRvU3RyaW5n
KCk6YyhpKS50b1N0cmluZygpLGEubGVuZ3RoPjApe3ZhciBzPSI/IjstMSE9bi51cmwuaW5kZXhP
ZigiPyIpJiYocz0iJiI9PW4udXJsW24udXJsLmxlbmd0aC0xXT8iIjoiJiIpLG4udXJsPW8rcyth
fX1yZXR1cm4gbi5fYm9keT1lLmJvZHksbi5tZXRob2Q9cihlLm1ldGhvZCksbi5oZWFkZXJzPW5l
dyB4KGUuaGVhZGVycyksbi5jb250ZW50VHlwZT1uLmRldGVjdENvbnRlbnRUeXBlKCksbi53aXRo
Q3JlZGVudGlhbHM9ZS53aXRoQ3JlZGVudGlhbHMsbi5yZXNwb25zZVR5cGU9ZS5yZXNwb25zZVR5
cGUsbn1yZXR1cm4geS5hKGUsdCksZS5wcm90b3R5cGUuZGV0ZWN0Q29udGVudFR5cGU9ZnVuY3Rp
b24oKXtzd2l0Y2godGhpcy5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIikpe2Nhc2UiYXBwbGlj
YXRpb24vanNvbiI6cmV0dXJuIEUuSlNPTjtjYXNlImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJs
ZW5jb2RlZCI6cmV0dXJuIEUuRk9STTtjYXNlIm11bHRpcGFydC9mb3JtLWRhdGEiOnJldHVybiBF
LkZPUk1fREFUQTtjYXNlInRleHQvcGxhaW4iOmNhc2UidGV4dC9odG1sIjpyZXR1cm4gRS5URVhU
O2Nhc2UiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIjpyZXR1cm4gdGhpcy5fYm9keSBpbnN0YW5j
ZW9mIG50P0UuQVJSQVlfQlVGRkVSOkUuQkxPQjtkZWZhdWx0OnJldHVybiB0aGlzLmRldGVjdENv
bnRlbnRUeXBlRnJvbUJvZHkoKX19LGUucHJvdG90eXBlLmRldGVjdENvbnRlbnRUeXBlRnJvbUJv
ZHk9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09dGhpcy5fYm9keT9FLk5PTkU6dGhpcy5fYm9keSBp
bnN0YW5jZW9mIE4/RS5GT1JNOnRoaXMuX2JvZHkgaW5zdGFuY2VvZiB0dD9FLkZPUk1fREFUQTp0
aGlzLl9ib2R5IGluc3RhbmNlb2YgZXQ/RS5CTE9COnRoaXMuX2JvZHkgaW5zdGFuY2VvZiBudD9F
LkFSUkFZX0JVRkZFUjp0aGlzLl9ib2R5JiYib2JqZWN0Ij09dHlwZW9mIHRoaXMuX2JvZHk/RS5K
U09OOkUuVEVYVH0sZS5wcm90b3R5cGUuZ2V0Qm9keT1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLmNv
bnRlbnRUeXBlKXtjYXNlIEUuSlNPTjpjYXNlIEUuRk9STTpyZXR1cm4gdGhpcy50ZXh0KCk7Y2Fz
ZSBFLkZPUk1fREFUQTpyZXR1cm4gdGhpcy5fYm9keTtjYXNlIEUuVEVYVDpyZXR1cm4gdGhpcy50
ZXh0KCk7Y2FzZSBFLkJMT0I6cmV0dXJuIHRoaXMuYmxvYigpO2Nhc2UgRS5BUlJBWV9CVUZGRVI6
cmV0dXJuIHRoaXMuYXJyYXlCdWZmZXIoKTtkZWZhdWx0OnJldHVybiBudWxsfX0sZX0oTSksJD1m
dW5jdGlvbigpe30sWD0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdz93aW5kb3c6JCx0dD1YLkZvcm1E
YXRhfHwkLGV0PVguQmxvYnx8JCxudD1YLkFycmF5QnVmZmVyfHwkLHJ0PWZ1bmN0aW9uKCl7ZnVu
Y3Rpb24gdCh0LGUpe3RoaXMuX2JhY2tlbmQ9dCx0aGlzLl9kZWZhdWx0T3B0aW9ucz1lfXJldHVy
biB0LnByb3RvdHlwZS5yZXF1ZXN0PWZ1bmN0aW9uKHQsZSl7dmFyIG47aWYoInN0cmluZyI9PXR5
cGVvZiB0KW49bCh0aGlzLl9iYWNrZW5kLG5ldyBKKHAodGhpcy5fZGVmYXVsdE9wdGlvbnMsZSxi
LkdldCx0KSkpO2Vsc2V7aWYoISh0IGluc3RhbmNlb2YgSikpdGhyb3cgbmV3IEVycm9yKCJGaXJz
dCBhcmd1bWVudCBtdXN0IGJlIGEgdXJsIHN0cmluZyBvciBSZXF1ZXN0IGluc3RhbmNlLiIpO249
bCh0aGlzLl9iYWNrZW5kLHQpfXJldHVybiBufSx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxl
KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KG5ldyBKKHAodGhpcy5fZGVmYXVsdE9wdGlvbnMsZSxiLkdl
dCx0KSkpfSx0LnByb3RvdHlwZS5wb3N0PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5yZXF1
ZXN0KG5ldyBKKHAodGhpcy5fZGVmYXVsdE9wdGlvbnMubWVyZ2UobmV3IFcoe2JvZHk6ZX0pKSxu
LGIuUG9zdCx0KSkpfSx0LnByb3RvdHlwZS5wdXQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlz
LnJlcXVlc3QobmV3IEoocCh0aGlzLl9kZWZhdWx0T3B0aW9ucy5tZXJnZShuZXcgVyh7Ym9keTpl
fSkpLG4sYi5QdXQsdCkpKX0sdC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJu
IHRoaXMucmVxdWVzdChuZXcgSihwKHRoaXMuX2RlZmF1bHRPcHRpb25zLGUsYi5EZWxldGUsdCkp
KX0sdC5wcm90b3R5cGUucGF0Y2g9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLnJlcXVlc3Qo
bmV3IEoocCh0aGlzLl9kZWZhdWx0T3B0aW9ucy5tZXJnZShuZXcgVyh7Ym9keTplfSkpLG4sYi5Q
YXRjaCx0KSkpfSx0LnByb3RvdHlwZS5oZWFkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMucmVx
dWVzdChuZXcgSihwKHRoaXMuX2RlZmF1bHRPcHRpb25zLGUsYi5IZWFkLHQpKSl9LHQucHJvdG90
eXBlLm9wdGlvbnM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KG5ldyBKKHAodGhp
cy5fZGVmYXVsdE9wdGlvbnMsZSxiLk9wdGlvbnMsdCkpKX0sdH0oKTtydC5kZWNvcmF0b3JzPVt7
dHlwZTptLkR9XSxydC5jdG9yUGFyYW1ldGVycz1mdW5jdGlvbigpe3JldHVyblt7dHlwZTpBfSx7
dHlwZTpXfV19O3ZhciBvdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7cmV0dXJuIHQuY2Fs
bCh0aGlzLGUsbil8fHRoaXN9cmV0dXJuIHkuYShlLHQpLGUucHJvdG90eXBlLnJlcXVlc3Q9ZnVu
Y3Rpb24odCxlKXtpZigic3RyaW5nIj09dHlwZW9mIHQmJih0PW5ldyBKKHAodGhpcy5fZGVmYXVs
dE9wdGlvbnMsZSxiLkdldCx0KSkpLCEodCBpbnN0YW5jZW9mIEopKXRocm93IG5ldyBFcnJvcigi
Rmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHVybCBzdHJpbmcgb3IgUmVxdWVzdCBpbnN0YW5jZS4i
KTtpZih0Lm1ldGhvZCE9PWIuR2V0KXRocm93IG5ldyBFcnJvcigiSlNPTlAgcmVxdWVzdHMgbXVz
dCB1c2UgR0VUIHJlcXVlc3QgbWV0aG9kLiIpO3JldHVybiBsKHRoaXMuX2JhY2tlbmQsdCl9LGV9
KHJ0KTtvdC5kZWNvcmF0b3JzPVt7dHlwZTptLkR9XSxvdC5jdG9yUGFyYW1ldGVycz1mdW5jdGlv
bigpe3JldHVyblt7dHlwZTpBfSx7dHlwZTpXfV19O3ZhciBpdD1mdW5jdGlvbigpe2Z1bmN0aW9u
IHQoKXt9cmV0dXJuIHR9KCk7aXQuZGVjb3JhdG9ycz1be3R5cGU6bS5FLGFyZ3M6W3twcm92aWRl
cnM6W3twcm92aWRlOnJ0LHVzZUZhY3Rvcnk6ZCxkZXBzOltLLFddfSxfLHtwcm92aWRlOlcsdXNl
Q2xhc3M6UX0se3Byb3ZpZGU6UCx1c2VDbGFzczpTfSxLLHtwcm92aWRlOlQsdXNlRmFjdG9yeTpm
fV19XX1dLGl0LmN0b3JQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7cmV0dXJuW119O3ZhciBhdD1mdW5j
dGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHR9KCk7YXQuZGVjb3JhdG9ycz1be3R5cGU6bS5F
LGFyZ3M6W3twcm92aWRlcnM6W3twcm92aWRlOm90LHVzZUZhY3Rvcnk6aCxkZXBzOltHLFddfSxG
LHtwcm92aWRlOlcsdXNlQ2xhc3M6UX0se3Byb3ZpZGU6UCx1c2VDbGFzczpTfSx7cHJvdmlkZTpH
LHVzZUNsYXNzOnF9XX1dfV0sYXQuY3RvclBhcmFtZXRlcnM9ZnVuY3Rpb24oKXtyZXR1cm5bXX07
LyoqCisgKiBAbGljZW5zZQorICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCisgKgorICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4g
TUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKKyAqLworbmV3IG0uRigiNC4zLjEiKX0s
R0lqazpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPXRoaXMmJnRoaXMuX19leHRl
bmRzfHxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPXR9Zm9yKHZh
ciByIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShyKSYmKHRbcl09ZVtyXSk7dC5wcm90b3R5cGU9bnVs
bD09PWU/T2JqZWN0LmNyZWF0ZShlKToobi5wcm90b3R5cGU9ZS5wcm90b3R5cGUsbmV3IG4pfSxv
PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMpLHRoaXMuZXJyb3JzPWU7dmFy
IG49RXJyb3IuY2FsbCh0aGlzLGU/ZS5sZW5ndGgrIiBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVu
c3Vic2NyaXB0aW9uOlxuICAiK2UubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUrMSsiKSAiK3Qu
dG9TdHJpbmcoKX0pLmpvaW4oIlxuICAiKToiIik7dGhpcy5uYW1lPW4ubmFtZT0iVW5zdWJzY3Jp
cHRpb25FcnJvciIsdGhpcy5zdGFjaz1uLnN0YWNrLHRoaXMubWVzc2FnZT1uLm1lc3NhZ2V9cmV0
dXJuIHIoZSx0KSxlfShFcnJvcik7ZS5VbnN1YnNjcmlwdGlvbkVycm9yPW99LElDcGc6ZnVuY3Rp
b24odCxlLG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQpe3JldHVybiBudWxsIT10JiYib2Jq
ZWN0Ij09dHlwZW9mIHR9ZS5pc09iamVjdD1yfSxJWlZ3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0
cmljdCI7dmFyIHI9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24g
bigpe3RoaXMuY29uc3RydWN0b3I9dH1mb3IodmFyIHIgaW4gZSllLmhhc093blByb3BlcnR5KHIp
JiYodFtyXT1lW3JdKTt0LnByb3RvdHlwZT1udWxsPT09ZT9PYmplY3QuY3JlYXRlKGUpOihuLnBy
b3RvdHlwZT1lLnByb3RvdHlwZSxuZXcgbil9LG89ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3Zh
ciBlPXQuY2FsbCh0aGlzLCJvYmplY3QgdW5zdWJzY3JpYmVkIik7dGhpcy5uYW1lPWUubmFtZT0i
T2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IiLHRoaXMuc3RhY2s9ZS5zdGFjayx0aGlzLm1lc3NhZ2U9
ZS5tZXNzYWdlfXJldHVybiByKGUsdCksZX0oRXJyb3IpO2UuT2JqZWN0VW5zdWJzY3JpYmVkRXJy
b3I9b30sTlZPczpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiOy8qKgorICogQGxpY2Vuc2UK
KyAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5n
dWxhci5pby9saWNlbnNlCisgKi8KK2Z1bmN0aW9uIHIodCl7cmV0dXJuIG51bGw9PXR8fDA9PT10
Lmxlbmd0aH1mdW5jdGlvbiBvKHQpe3JldHVybiBudWxsIT10fWZ1bmN0aW9uIGkodCl7dmFyIGU9
bi5pKGouXzcpKHQpP24uaShELmZyb21Qcm9taXNlKSh0KTp0O2lmKCFuLmkoai5fOCkoZSkpdGhy
b3cgbmV3IEVycm9yKCJFeHBlY3RlZCB2YWxpZGF0b3IgdG8gcmV0dXJuIFByb21pc2Ugb3IgT2Jz
ZXJ2YWJsZS4iKTtyZXR1cm4gZX1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIGUubWFwKGZ1bmN0aW9u
KGUpe3JldHVybiBlKHQpfSl9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBlLm1hcChmdW5jdGlvbihl
KXtyZXR1cm4gZSh0KX0pfWZ1bmN0aW9uIHUodCl7dmFyIGU9dC5yZWR1Y2UoZnVuY3Rpb24odCxl
KXtyZXR1cm4gbnVsbCE9ZT9PYmplY3QuYXNzaWduKHt9LHQsZSk6dH0se30pO3JldHVybiAwPT09
T2JqZWN0LmtleXMoZSkubGVuZ3RoP251bGw6ZX1mdW5jdGlvbiBjKCl7cmV0dXJuL2FuZHJvaWQg
KFxkKykvLnRlc3QoKG4uaShGLnQpKCk/bi5pKEYudCkoKS5nZXRVc2VyQWdlbnQoKToiIikudG9M
b3dlckNhc2UoKSl9LyoqCisgKiBAbGljZW5zZQorICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyAqIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKKyAqLworZnVuY3Rp
b24gbCh0KXtyZXR1cm4gdC52YWxpZGF0ZT9mdW5jdGlvbihlKXtyZXR1cm4gdC52YWxpZGF0ZShl
KX06dH1mdW5jdGlvbiBwKHQpe3JldHVybiB0LnZhbGlkYXRlP2Z1bmN0aW9uKGUpe3JldHVybiB0
LnZhbGlkYXRlKGUpfTp0fS8qKgorICogQGxpY2Vuc2UKKyAqIENvcHlyaWdodCBHb29nbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisgKiBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCisgKi8KK2Z1
bmN0aW9uIGYoKXt0aHJvdyBuZXcgRXJyb3IoInVuaW1wbGVtZW50ZWQiKX1mdW5jdGlvbiBkKHQs
ZSl7cmV0dXJuIG51bGw9PXQ/IiIrZTooZSYmIm9iamVjdCI9PXR5cGVvZiBlJiYoZT0iT2JqZWN0
IiksKHQrIjogIitlKS5zbGljZSgwLDUwKSl9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gdC5zcGxpdCgi
OiIpWzBdfWZ1bmN0aW9uIHkodCxlKXtyZXR1cm4gbnVsbD09dD8iIitlOigic3RyaW5nIj09dHlw
ZW9mIGUmJihlPSInIitlKyInIiksZSYmIm9iamVjdCI9PXR5cGVvZiBlJiYoZT0iT2JqZWN0Iiks
KHQrIjogIitlKS5zbGljZSgwLDUwKSl9ZnVuY3Rpb24gbSh0KXtyZXR1cm4gdC5zcGxpdCgiOiIp
WzBdfS8qKgorICogQGxpY2Vuc2UKKyAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorICoKKyAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisgKiBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCisgKi8KK2Z1bmN0aW9uIGcodCxl
KXtyZXR1cm4gZS5wYXRoLmNvbmNhdChbdF0pfWZ1bmN0aW9uIHYodCxlKXt0fHxDKGUsIkNhbm5v
dCBmaW5kIGNvbnRyb2wgd2l0aCIpLGUudmFsdWVBY2Nlc3Nvcnx8QyhlLCJObyB2YWx1ZSBhY2Nl
c3NvciBmb3IgZm9ybSBjb250cm9sIHdpdGgiKSx0LnZhbGlkYXRvcj1xLmNvbXBvc2UoW3QudmFs
aWRhdG9yLGUudmFsaWRhdG9yXSksdC5hc3luY1ZhbGlkYXRvcj1xLmNvbXBvc2VBc3luYyhbdC5h
c3luY1ZhbGlkYXRvcixlLmFzeW5jVmFsaWRhdG9yXSksZS52YWx1ZUFjY2Vzc29yLndyaXRlVmFs
dWUodC52YWx1ZSksZS52YWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25DaGFuZ2UoZnVuY3Rpb24obil7
ZS52aWV3VG9Nb2RlbFVwZGF0ZShuKSx0Lm1hcmtBc0RpcnR5KCksdC5zZXRWYWx1ZShuLHtlbWl0
TW9kZWxUb1ZpZXdDaGFuZ2U6ITF9KX0pLGUudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uVG91Y2hl
ZChmdW5jdGlvbigpe3JldHVybiB0Lm1hcmtBc1RvdWNoZWQoKX0pLHQucmVnaXN0ZXJPbkNoYW5n
ZShmdW5jdGlvbih0LG4pe2UudmFsdWVBY2Nlc3Nvci53cml0ZVZhbHVlKHQpLG4mJmUudmlld1Rv
TW9kZWxVcGRhdGUodCl9KSxlLnZhbHVlQWNjZXNzb3Iuc2V0RGlzYWJsZWRTdGF0ZSYmdC5yZWdp
c3Rlck9uRGlzYWJsZWRDaGFuZ2UoZnVuY3Rpb24odCl7ZS52YWx1ZUFjY2Vzc29yLnNldERpc2Fi
bGVkU3RhdGUodCl9KSxlLl9yYXdWYWxpZGF0b3JzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5yZWdp
c3Rlck9uVmFsaWRhdG9yQ2hhbmdlJiZlLnJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZnVuY3Rp
b24oKXtyZXR1cm4gdC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCl9KX0pLGUuX3Jhd0FzeW5jVmFs
aWRhdG9ycy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UucmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZSYm
ZS5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGZ1bmN0aW9uKCl7cmV0dXJuIHQudXBkYXRlVmFs
dWVBbmRWYWxpZGl0eSgpfSl9KX1mdW5jdGlvbiBfKHQsZSl7ZS52YWx1ZUFjY2Vzc29yLnJlZ2lz
dGVyT25DaGFuZ2UoZnVuY3Rpb24oKXtyZXR1cm4gdyhlKX0pLGUudmFsdWVBY2Nlc3Nvci5yZWdp
c3Rlck9uVG91Y2hlZChmdW5jdGlvbigpe3JldHVybiB3KGUpfSksZS5fcmF3VmFsaWRhdG9ycy5m
b3JFYWNoKGZ1bmN0aW9uKHQpe3QucmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZSYmdC5yZWdpc3Rl
ck9uVmFsaWRhdG9yQ2hhbmdlKG51bGwpfSksZS5fcmF3QXN5bmNWYWxpZGF0b3JzLmZvckVhY2go
ZnVuY3Rpb24odCl7dC5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlJiZ0LnJlZ2lzdGVyT25WYWxp
ZGF0b3JDaGFuZ2UobnVsbCl9KSx0JiZ0Ll9jbGVhckNoYW5nZUZucygpfWZ1bmN0aW9uIGIodCxl
KXtudWxsPT10JiZDKGUsIkNhbm5vdCBmaW5kIGNvbnRyb2wgd2l0aCIpLHQudmFsaWRhdG9yPXEu
Y29tcG9zZShbdC52YWxpZGF0b3IsZS52YWxpZGF0b3JdKSx0LmFzeW5jVmFsaWRhdG9yPXEuY29t
cG9zZUFzeW5jKFt0LmFzeW5jVmFsaWRhdG9yLGUuYXN5bmNWYWxpZGF0b3JdKX1mdW5jdGlvbiB3
KHQpe3JldHVybiBDKHQsIlRoZXJlIGlzIG5vIEZvcm1Db250cm9sIGluc3RhbmNlIGF0dGFjaGVk
IHRvIGZvcm0gY29udHJvbCBlbGVtZW50IHdpdGgiKX1mdW5jdGlvbiBDKHQsZSl7dmFyIG47dGhy
b3cgbj10LnBhdGgubGVuZ3RoPjE/InBhdGg6ICciK3QucGF0aC5qb2luKCIgLT4gIikrIiciOnQu
cGF0aFswXT8ibmFtZTogJyIrdC5wYXRoKyInIjoidW5zcGVjaWZpZWQgbmFtZSBhdHRyaWJ1dGUi
LG5ldyBFcnJvcihlKyIgIituKX1mdW5jdGlvbiBFKHQpe3JldHVybiBudWxsIT10P3EuY29tcG9z
ZSh0Lm1hcChsKSk6bnVsbH1mdW5jdGlvbiBPKHQpe3JldHVybiBudWxsIT10P3EuY29tcG9zZUFz
eW5jKHQubWFwKHApKTpudWxsfWZ1bmN0aW9uIHgodCxlKXtpZighdC5oYXNPd25Qcm9wZXJ0eSgi
bW9kZWwiKSlyZXR1cm4hMTt2YXIgcj10Lm1vZGVsO3JldHVybiEhci5pc0ZpcnN0Q2hhbmdlKCl8
fCFuLmkoai5fMTMpKGUsci5jdXJyZW50VmFsdWUpfWZ1bmN0aW9uIFAodCl7cmV0dXJuIHB0LnNv
bWUoZnVuY3Rpb24oZSl7cmV0dXJuIHQuY29uc3RydWN0b3I9PT1lfSl9ZnVuY3Rpb24gUyh0LGUp
e2lmKCFlKXJldHVybiBudWxsO3ZhciBuPXZvaWQgMCxyPXZvaWQgMCxvPXZvaWQgMDtyZXR1cm4g
ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuY29uc3RydWN0b3I9PT1RP249ZTpQKGUpPyhyJiZDKHQs
Ik1vcmUgdGhhbiBvbmUgYnVpbHQtaW4gdmFsdWUgYWNjZXNzb3IgbWF0Y2hlcyBmb3JtIGNvbnRy
b2wgd2l0aCIpLHI9ZSk6KG8mJkModCwiTW9yZSB0aGFuIG9uZSBjdXN0b20gdmFsdWUgYWNjZXNz
b3IgbWF0Y2hlcyBmb3JtIGNvbnRyb2wgd2l0aCIpLG89ZSl9KSxvfHwocnx8KG58fChDKHQsIk5v
IHZhbGlkIHZhbHVlIGFjY2Vzc29yIGZvciBmb3JtIGNvbnRyb2wgd2l0aCIpLG51bGwpKSl9ZnVu
Y3Rpb24gQSh0LGUsbil7cmV0dXJuIG51bGw9PWU/bnVsbDooZSBpbnN0YW5jZW9mIEFycmF5fHwo
ZT1lLnNwbGl0KG4pKSxlIGluc3RhbmNlb2YgQXJyYXkmJjA9PT1lLmxlbmd0aD9udWxsOmUucmVk
dWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQgaW5zdGFuY2VvZiBFdD90LmNvbnRyb2xzW2VdfHxu
dWxsOnQgaW5zdGFuY2VvZiBPdD90LmF0KGUpfHxudWxsOm51bGx9LHQpKX1mdW5jdGlvbiBUKHQp
e3JldHVybiBBcnJheS5pc0FycmF5KHQpP0UodCk6dHx8bnVsbH1mdW5jdGlvbiBrKHQpe3JldHVy
biBBcnJheS5pc0FycmF5KHQpP08odCk6dHx8bnVsbH1mdW5jdGlvbiBWKHQsZSl7dmFyIG49dC5p
bmRleE9mKGUpO24+LTEmJnQuc3BsaWNlKG4sMSl9ZnVuY3Rpb24gTih0KXtyZXR1cm4hKHQgaW5z
dGFuY2VvZiBCdHx8dCBpbnN0YW5jZW9mIEh0fHx0IGluc3RhbmNlb2YgR3QpfXZhciBNPW4oIlRU
b08iKSxqPW4oIjNqM0siKSxSPW4oIjdyQjkiKSxEPShuLm4oUiksbigiaW9LKyIpKSxJPShuLm4o
RCksbigieEFKcyIpKSxGPShuLm4oSSksbigiUWJkbSIpKTtuLmQoZSwiZiIsZnVuY3Rpb24oKXty
ZXR1cm4gen0pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiBXfSksbi5kKGUsImQiLGZ1bmN0
aW9uKCl7cmV0dXJuIFF9KSxuLmQoZSwiaCIsZnVuY3Rpb24oKXtyZXR1cm4gWH0pLG4uZChlLCJp
IixmdW5jdGlvbigpe3JldHVybiB5dH0pLG4uZChlLCJnIixmdW5jdGlvbigpe3JldHVybiBqdH0p
LG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBsZX0pLG4uZChlLCJiIixmdW5jdGlvbigpe3Jl
dHVybiBjZX0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBldH0pOy8qKgorICogQGxpY2Vu
c2UgQW5ndWxhciB2NC4zLjEKKyAqIChjKSAyMDEwLTIwMTcgR29vZ2xlLCBJbmMuIGh0dHBzOi8v
YW5ndWxhci5pby8KKyAqIExpY2Vuc2U6IE1JVAorICovCisvKioKKyAqIEBsaWNlbnNlCisgKiBD
b3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIu
aW8vbGljZW5zZQorICovCit2YXIgSD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQu
cHJvdG90eXBlLmNvbnRyb2w9ZnVuY3Rpb24oKXt9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnBy
b3RvdHlwZSwidmFsdWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMu
Y29udHJvbC52YWx1ZTpudWxsfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVj
dC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwidmFsaWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1
cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC52YWxpZDpudWxsfSxlbnVtZXJhYmxlOiEwLGNv
bmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaW52YWxp
ZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmludmFs
aWQ6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJv
cGVydHkodC5wcm90b3R5cGUsInBlbmRpbmciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5j
b250cm9sP3RoaXMuY29udHJvbC5wZW5kaW5nOm51bGx9LGVudW1lcmFibGU6ITAsY29uZmlndXJh
YmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJlcnJvcnMiLHtnZXQ6
ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5lcnJvcnM6bnVsbH0s
ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5w
cm90b3R5cGUsInByaXN0aW5lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udHJvbD90
aGlzLmNvbnRyb2wucHJpc3RpbmU6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9
KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImRpcnR5Iix7Z2V0OmZ1bmN0aW9u
KCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZGlydHk6bnVsbH0sZW51bWVyYWJs
ZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUs
InRvdWNoZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJv
bC50b3VjaGVkOm51bGx9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRl
ZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ1bnRvdWNoZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1
cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC51bnRvdWNoZWQ6bnVsbH0sZW51bWVyYWJsZToh
MCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImRp
c2FibGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wu
ZGlzYWJsZWQ6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVm
aW5lUHJvcGVydHkodC5wcm90b3R5cGUsImVuYWJsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4g
dGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5lbmFibGVkOm51bGx9LGVudW1lcmFibGU6ITAsY29u
ZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJzdGF0dXND
aGFuZ2VzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wu
c3RhdHVzQ2hhbmdlczpudWxsfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVj
dC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwidmFsdWVDaGFuZ2VzIix7Z2V0OmZ1bmN0aW9u
KCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudmFsdWVDaGFuZ2VzOm51bGx9LGVu
dW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJv
dG90eXBlLCJwYXRoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGVudW1lcmFibGU6ITAs
Y29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24odCl7dm9pZCAwPT09
dCYmKHQ9dm9pZCAwKSx0aGlzLmNvbnRyb2wmJnRoaXMuY29udHJvbC5yZXNldCh0KX0sdC5wcm90
b3R5cGUuaGFzRXJyb3I9ZnVuY3Rpb24odCxlKXtyZXR1cm4hIXRoaXMuY29udHJvbCYmdGhpcy5j
b250cm9sLmhhc0Vycm9yKHQsZSl9LHQucHJvdG90eXBlLmdldEVycm9yPWZ1bmN0aW9uKHQsZSl7
cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZ2V0RXJyb3IodCxlKTpudWxsfSx0fSgp
LEw9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlz
LGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE0uYShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShl
LnByb3RvdHlwZSwiZm9ybURpcmVjdGl2ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxl
bnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnBy
b3RvdHlwZSwicGF0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxlbnVtZXJhYmxlOiEw
LGNvbmZpZ3VyYWJsZTohMH0pLGV9KEgpLEI9bmV3IGouSSgiTmdWYWxpZGF0b3JzIiksVT1uZXcg
ai5JKCJOZ0FzeW5jVmFsaWRhdG9ycyIpLEc9L14oPz0uezEsMjU0fSQpKD89LnsxLDY0fUApWy0h
IyQlJicqK1wvMC05PT9BLVpeX2BhLXp7fH1+XSsoXC5bLSEjJCUmJyorXC8wLTk9P0EtWl5fYGEt
ent8fX5dKykqQFtBLVphLXowLTldKFtBLVphLXowLTktXXswLDYxfVtBLVphLXowLTldKT8oXC5b
QS1aYS16MC05XShbQS1aYS16MC05LV17MCw2MX1bQS1aYS16MC05XSk/KSokLyxxPWZ1bmN0aW9u
KCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5taW49ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9u
KGUpe2lmKHIoZS52YWx1ZSl8fHIodCkpcmV0dXJuIG51bGw7dmFyIG49cGFyc2VGbG9hdChlLnZh
bHVlKTtyZXR1cm4haXNOYU4obikmJm48dD97bWluOnttaW46dCxhY3R1YWw6ZS52YWx1ZX19Om51
bGx9fSx0Lm1heD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYocihlLnZhbHVlKXx8
cih0KSlyZXR1cm4gbnVsbDt2YXIgbj1wYXJzZUZsb2F0KGUudmFsdWUpO3JldHVybiFpc05hTihu
KSYmbj50P3ttYXg6e21heDp0LGFjdHVhbDplLnZhbHVlfX06bnVsbH19LHQucmVxdWlyZWQ9ZnVu
Y3Rpb24odCl7cmV0dXJuIHIodC52YWx1ZSk/e3JlcXVpcmVkOiEwfTpudWxsfSx0LnJlcXVpcmVk
VHJ1ZT1mdW5jdGlvbih0KXtyZXR1cm4hMD09PXQudmFsdWU/bnVsbDp7cmVxdWlyZWQ6ITB9fSx0
LmVtYWlsPWZ1bmN0aW9uKHQpe3JldHVybiBHLnRlc3QodC52YWx1ZSk/bnVsbDp7ZW1haWw6ITB9
fSx0Lm1pbkxlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYocihlLnZhbHVl
KSlyZXR1cm4gbnVsbDt2YXIgbj1lLnZhbHVlP2UudmFsdWUubGVuZ3RoOjA7cmV0dXJuIG48dD97
bWlubGVuZ3RoOntyZXF1aXJlZExlbmd0aDp0LGFjdHVhbExlbmd0aDpufX06bnVsbH19LHQubWF4
TGVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj1lLnZhbHVlP2UudmFs
dWUubGVuZ3RoOjA7cmV0dXJuIG4+dD97bWF4bGVuZ3RoOntyZXF1aXJlZExlbmd0aDp0LGFjdHVh
bExlbmd0aDpufX06bnVsbH19LHQucGF0dGVybj1mdW5jdGlvbihlKXtpZighZSlyZXR1cm4gdC5u
dWxsVmFsaWRhdG9yO3ZhciBuLG87cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlPyhvPSJeIitlKyIk
IixuPW5ldyBSZWdFeHAobykpOihvPWUudG9TdHJpbmcoKSxuPWUpLGZ1bmN0aW9uKHQpe2lmKHIo
dC52YWx1ZSkpcmV0dXJuIG51bGw7dmFyIGU9dC52YWx1ZTtyZXR1cm4gbi50ZXN0KGUpP251bGw6
e3BhdHRlcm46e3JlcXVpcmVkUGF0dGVybjpvLGFjdHVhbFZhbHVlOmV9fX19LHQubnVsbFZhbGlk
YXRvcj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbH0sdC5jb21wb3NlPWZ1bmN0aW9uKHQpe2lmKCF0
KXJldHVybiBudWxsO3ZhciBlPXQuZmlsdGVyKG8pO3JldHVybiAwPT1lLmxlbmd0aD9udWxsOmZ1
bmN0aW9uKHQpe3JldHVybiB1KGEodCxlKSl9fSx0LmNvbXBvc2VBc3luYz1mdW5jdGlvbih0KXtp
ZighdClyZXR1cm4gbnVsbDt2YXIgZT10LmZpbHRlcihvKTtyZXR1cm4gMD09ZS5sZW5ndGg/bnVs
bDpmdW5jdGlvbih0KXt2YXIgcj1zKHQsZSkubWFwKGkpO3JldHVybiBJLm1hcC5jYWxsKG4uaShS
LmZvcmtKb2luKShyKSx1KX19LHR9KCksej1uZXcgai5JKCJOZ1ZhbHVlQWNjZXNzb3IiKSxaPXtw
cm92aWRlOnosdXNlRXhpc3Rpbmc6bi5pKGouXzExKShmdW5jdGlvbigpe3JldHVybiBZfSksbXVs
dGk6ITB9LFk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fcmVuZGVyZXI9dCx0aGlz
Ll9lbGVtZW50UmVmPWUsdGhpcy5vbkNoYW5nZT1mdW5jdGlvbih0KXt9LHRoaXMub25Ub3VjaGVk
PWZ1bmN0aW9uKCl7fX1yZXR1cm4gdC5wcm90b3R5cGUud3JpdGVWYWx1ZT1mdW5jdGlvbih0KXt0
aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQs
ImNoZWNrZWQiLHQpfSx0LnByb3RvdHlwZS5yZWdpc3Rlck9uQ2hhbmdlPWZ1bmN0aW9uKHQpe3Ro
aXMub25DaGFuZ2U9dH0sdC5wcm90b3R5cGUucmVnaXN0ZXJPblRvdWNoZWQ9ZnVuY3Rpb24odCl7
dGhpcy5vblRvdWNoZWQ9dH0sdC5wcm90b3R5cGUuc2V0RGlzYWJsZWRTdGF0ZT1mdW5jdGlvbih0
KXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1l
bnQsImRpc2FibGVkIix0KX0sdH0oKTtZLmRlY29yYXRvcnM9W3t0eXBlOmouWSxhcmdzOlt7c2Vs
ZWN0b3I6ImlucHV0W3R5cGU9Y2hlY2tib3hdW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1j
aGVja2JveF1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9Y2hlY2tib3hdW25nTW9kZWxdIixob3N0
OnsiKGNoYW5nZSkiOiJvbkNoYW5nZSgkZXZlbnQudGFyZ2V0LmNoZWNrZWQpIiwiKGJsdXIpIjoi
b25Ub3VjaGVkKCkifSxwcm92aWRlcnM6W1pdfV19XSxZLmN0b3JQYXJhbWV0ZXJzPWZ1bmN0aW9u
KCl7cmV0dXJuW3t0eXBlOmouXzEyfSx7dHlwZTpqLlp9XX07LyoqCisgKiBAbGljZW5zZQorICog
Q29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKyAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFy
LmlvL2xpY2Vuc2UKKyAqLwordmFyIEs9e3Byb3ZpZGU6eix1c2VFeGlzdGluZzpuLmkoai5fMTEp
KGZ1bmN0aW9uKCl7cmV0dXJuIFF9KSxtdWx0aTohMH0sVz1uZXcgai5JKCJDb21wb3NpdGlvbkV2
ZW50TW9kZSIpLFE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl9yZW5kZXJlcj10
LHRoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9jb21wb3NpdGlvbk1vZGU9bix0aGlzLm9uQ2hhbmdl
PWZ1bmN0aW9uKHQpe30sdGhpcy5vblRvdWNoZWQ9ZnVuY3Rpb24oKXt9LHRoaXMuX2NvbXBvc2lu
Zz0hMSxudWxsPT10aGlzLl9jb21wb3NpdGlvbk1vZGUmJih0aGlzLl9jb21wb3NpdGlvbk1vZGU9
IWMoKSl9cmV0dXJuIHQucHJvdG90eXBlLndyaXRlVmFsdWU9ZnVuY3Rpb24odCl7dmFyIGU9bnVs
bD09dD8iIjp0O3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0
aXZlRWxlbWVudCwidmFsdWUiLGUpfSx0LnByb3RvdHlwZS5yZWdpc3Rlck9uQ2hhbmdlPWZ1bmN0
aW9uKHQpe3RoaXMub25DaGFuZ2U9dH0sdC5wcm90b3R5cGUucmVnaXN0ZXJPblRvdWNoZWQ9ZnVu
Y3Rpb24odCl7dGhpcy5vblRvdWNoZWQ9dH0sdC5wcm90b3R5cGUuc2V0RGlzYWJsZWRTdGF0ZT1m
dW5jdGlvbih0KXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5h
dGl2ZUVsZW1lbnQsImRpc2FibGVkIix0KX0sdC5wcm90b3R5cGUuX2hhbmRsZUlucHV0PWZ1bmN0
aW9uKHQpeyghdGhpcy5fY29tcG9zaXRpb25Nb2RlfHx0aGlzLl9jb21wb3NpdGlvbk1vZGUmJiF0
aGlzLl9jb21wb3NpbmcpJiZ0aGlzLm9uQ2hhbmdlKHQpfSx0LnByb3RvdHlwZS5fY29tcG9zaXRp
b25TdGFydD1mdW5jdGlvbigpe3RoaXMuX2NvbXBvc2luZz0hMH0sdC5wcm90b3R5cGUuX2NvbXBv
c2l0aW9uRW5kPWZ1bmN0aW9uKHQpe3RoaXMuX2NvbXBvc2luZz0hMSx0aGlzLl9jb21wb3NpdGlv
bk1vZGUmJnRoaXMub25DaGFuZ2UodCl9LHR9KCk7US5kZWNvcmF0b3JzPVt7dHlwZTpqLlksYXJn
czpbe3NlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVd
LHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9y
bUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hd
KVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0iLGhvc3Q6eyIo
aW5wdXQpIjoiX2hhbmRsZUlucHV0KCRldmVudC50YXJnZXQudmFsdWUpIiwiKGJsdXIpIjoib25U
b3VjaGVkKCkiLCIoY29tcG9zaXRpb25zdGFydCkiOiJfY29tcG9zaXRpb25TdGFydCgpIiwiKGNv
bXBvc2l0aW9uZW5kKSI6Il9jb21wb3NpdGlvbkVuZCgkZXZlbnQudGFyZ2V0LnZhbHVlKSJ9LHBy
b3ZpZGVyczpbS119XX1dLFEuY3RvclBhcmFtZXRlcnM9ZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6
ai5fMTJ9LHt0eXBlOmouWn0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmouTH0se3R5
cGU6ai5ILGFyZ3M6W1ddfV19XX07LyoqCisgKiBAbGljZW5zZQorICogQ29weXJpZ2h0IEdvb2ds
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyAqIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKKyAq
LwordmFyIEo9e3Byb3ZpZGU6eix1c2VFeGlzdGluZzpuLmkoai5fMTEpKGZ1bmN0aW9uKCl7cmV0
dXJuICR9KSxtdWx0aTohMH0sJD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9yZW5k
ZXJlcj10LHRoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLm9uQ2hhbmdlPWZ1bmN0aW9uKHQpe30sdGhp
cy5vblRvdWNoZWQ9ZnVuY3Rpb24oKXt9fXJldHVybiB0LnByb3RvdHlwZS53cml0ZVZhbHVlPWZ1
bmN0aW9uKHQpe3ZhciBlPW51bGw9PXQ/IiI6dDt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0
aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsInZhbHVlIixlKX0sdC5wcm90b3R5cGUucmVn
aXN0ZXJPbkNoYW5nZT1mdW5jdGlvbih0KXt0aGlzLm9uQ2hhbmdlPWZ1bmN0aW9uKGUpe3QoIiI9
PWU/bnVsbDpwYXJzZUZsb2F0KGUpKX19LHQucHJvdG90eXBlLnJlZ2lzdGVyT25Ub3VjaGVkPWZ1
bmN0aW9uKHQpe3RoaXMub25Ub3VjaGVkPXR9LHQucHJvdG90eXBlLnNldERpc2FibGVkU3RhdGU9
ZnVuY3Rpb24odCl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudFJlZi5u
YXRpdmVFbGVtZW50LCJkaXNhYmxlZCIsdCl9LHR9KCk7JC5kZWNvcmF0b3JzPVt7dHlwZTpqLlks
YXJnczpbe3NlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1
dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVtuZ01vZGVsXSIs
aG9zdDp7IihjaGFuZ2UpIjoib25DaGFuZ2UoJGV2ZW50LnRhcmdldC52YWx1ZSkiLCIoaW5wdXQp
Ijoib25DaGFuZ2UoJGV2ZW50LnRhcmdldC52YWx1ZSkiLCIoYmx1cikiOiJvblRvdWNoZWQoKSJ9
LHByb3ZpZGVyczpbSl19XX1dLCQuY3RvclBhcmFtZXRlcnM9ZnVuY3Rpb24oKXtyZXR1cm5be3R5
cGU6ai5fMTJ9LHt0eXBlOmouWn1dfTt2YXIgWD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFy
IGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIGUuX3BhcmVudD1udWxsLGUu
bmFtZT1udWxsLGUudmFsdWVBY2Nlc3Nvcj1udWxsLGUuX3Jhd1ZhbGlkYXRvcnM9W10sZS5fcmF3
QXN5bmNWYWxpZGF0b3JzPVtdLGV9cmV0dXJuIE0uYShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShlLnByb3RvdHlwZSwidmFsaWRhdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGYoKX0sZW51
bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90
b3R5cGUsImFzeW5jVmFsaWRhdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGYoKX0sZW51bWVy
YWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS52aWV3VG9Nb2RlbFVwZGF0ZT1m
dW5jdGlvbih0KXt9LGV9KEgpLHR0PXtwcm92aWRlOnosdXNlRXhpc3Rpbmc6bi5pKGouXzExKShm
dW5jdGlvbigpe3JldHVybiBudH0pLG11bHRpOiEwfSxldD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQo
KXt0aGlzLl9hY2Nlc3NvcnM9W119cmV0dXJuIHQucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0LGUp
e3RoaXMuX2FjY2Vzc29ycy5wdXNoKFt0LGVdKX0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9u
KHQpe2Zvcih2YXIgZT10aGlzLl9hY2Nlc3NvcnMubGVuZ3RoLTE7ZT49MDstLWUpaWYodGhpcy5f
YWNjZXNzb3JzW2VdWzFdPT09dClyZXR1cm4gdm9pZCB0aGlzLl9hY2Nlc3NvcnMuc3BsaWNlKGUs
MSl9LHQucHJvdG90eXBlLnNlbGVjdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX2FjY2Vz
c29ycy5mb3JFYWNoKGZ1bmN0aW9uKG4pe2UuX2lzU2FtZUdyb3VwKG4sdCkmJm5bMV0hPT10JiZu
WzFdLmZpcmVVbmNoZWNrKHQudmFsdWUpfSl9LHQucHJvdG90eXBlLl9pc1NhbWVHcm91cD1mdW5j
dGlvbih0LGUpe3JldHVybiEhdFswXS5jb250cm9sJiYodFswXS5fcGFyZW50PT09ZS5fY29udHJv
bC5fcGFyZW50JiZ0WzFdLm5hbWU9PT1lLm5hbWUpfSx0fSgpO2V0LmRlY29yYXRvcnM9W3t0eXBl
OmouRH1dLGV0LmN0b3JQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7cmV0dXJuW119O3ZhciBudD1mdW5j
dGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dGhpcy5fcmVuZGVyZXI9dCx0aGlzLl9lbGVtZW50
UmVmPWUsdGhpcy5fcmVnaXN0cnk9bix0aGlzLl9pbmplY3Rvcj1yLHRoaXMub25DaGFuZ2U9ZnVu
Y3Rpb24oKXt9LHRoaXMub25Ub3VjaGVkPWZ1bmN0aW9uKCl7fX1yZXR1cm4gdC5wcm90b3R5cGUu
bmdPbkluaXQ9ZnVuY3Rpb24oKXt0aGlzLl9jb250cm9sPXRoaXMuX2luamVjdG9yLmdldChYKSx0
aGlzLl9jaGVja05hbWUoKSx0aGlzLl9yZWdpc3RyeS5hZGQodGhpcy5fY29udHJvbCx0aGlzKX0s
dC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9yZWdpc3RyeS5yZW1vdmUo
dGhpcyl9LHQucHJvdG90eXBlLndyaXRlVmFsdWU9ZnVuY3Rpb24odCl7dGhpcy5fc3RhdGU9dD09
PXRoaXMudmFsdWUsdGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudFJlZi5u
YXRpdmVFbGVtZW50LCJjaGVja2VkIix0aGlzLl9zdGF0ZSl9LHQucHJvdG90eXBlLnJlZ2lzdGVy
T25DaGFuZ2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9mbj10LHRoaXMub25DaGFuZ2U9
ZnVuY3Rpb24oKXt0KGUudmFsdWUpLGUuX3JlZ2lzdHJ5LnNlbGVjdChlKX19LHQucHJvdG90eXBl
LmZpcmVVbmNoZWNrPWZ1bmN0aW9uKHQpe3RoaXMud3JpdGVWYWx1ZSh0KX0sdC5wcm90b3R5cGUu
cmVnaXN0ZXJPblRvdWNoZWQ9ZnVuY3Rpb24odCl7dGhpcy5vblRvdWNoZWQ9dH0sdC5wcm90b3R5
cGUuc2V0RGlzYWJsZWRTdGF0ZT1mdW5jdGlvbih0KXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0
eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsImRpc2FibGVkIix0KX0sdC5wcm90b3R5
cGUuX2NoZWNrTmFtZT1mdW5jdGlvbigpe3RoaXMubmFtZSYmdGhpcy5mb3JtQ29udHJvbE5hbWUm
JnRoaXMubmFtZSE9PXRoaXMuZm9ybUNvbnRyb2xOYW1lJiZ0aGlzLl90aHJvd05hbWVFcnJvcigp
LCF0aGlzLm5hbWUmJnRoaXMuZm9ybUNvbnRyb2xOYW1lJiYodGhpcy5uYW1lPXRoaXMuZm9ybUNv
bnRyb2xOYW1lKX0sdC5wcm90b3R5cGUuX3Rocm93TmFtZUVycm9yPWZ1bmN0aW9uKCl7dGhyb3cg
bmV3IEVycm9yKCdcbiAgICAgIElmIHlvdSBkZWZpbmUgYm90aCBhIG5hbWUgYW5kIGEgZm9ybUNv
bnRyb2xOYW1lIGF0dHJpYnV0ZSBvbiB5b3VyIHJhZGlvIGJ1dHRvbiwgdGhlaXIgdmFsdWVzXG4g
ICAgICBtdXN0IG1hdGNoLiBFeDogPGlucHV0IHR5cGU9InJhZGlvIiBmb3JtQ29udHJvbE5hbWU9
ImZvb2QiIG5hbWU9ImZvb2QiPlxuICAgICcpfSx0fSgpO250LmRlY29yYXRvcnM9W3t0eXBlOmou
WSxhcmdzOlt7c2VsZWN0b3I6ImlucHV0W3R5cGU9cmFkaW9dW2Zvcm1Db250cm9sTmFtZV0saW5w
dXRbdHlwZT1yYWRpb11bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9cmFkaW9dW25nTW9kZWxdIixo
b3N0OnsiKGNoYW5nZSkiOiJvbkNoYW5nZSgpIiwiKGJsdXIpIjoib25Ub3VjaGVkKCkifSxwcm92
aWRlcnM6W3R0XX1dfV0sbnQuY3RvclBhcmFtZXRlcnM9ZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6
ai5fMTJ9LHt0eXBlOmouWn0se3R5cGU6ZXR9LHt0eXBlOmouQX1dfSxudC5wcm9wRGVjb3JhdG9y
cz17bmFtZTpbe3R5cGU6ai5fMX1dLGZvcm1Db250cm9sTmFtZTpbe3R5cGU6ai5fMX1dLHZhbHVl
Olt7dHlwZTpqLl8xfV19Oy8qKgorICogQGxpY2Vuc2UKKyAqIENvcHlyaWdodCBHb29nbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisgKiBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCisgKi8KK3Zh
ciBydD17cHJvdmlkZTp6LHVzZUV4aXN0aW5nOm4uaShqLl8xMSkoZnVuY3Rpb24oKXtyZXR1cm4g
b3R9KSxtdWx0aTohMH0sb3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fcmVuZGVy
ZXI9dCx0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5vbkNoYW5nZT1mdW5jdGlvbih0KXt9LHRoaXMu
b25Ub3VjaGVkPWZ1bmN0aW9uKCl7fX1yZXR1cm4gdC5wcm90b3R5cGUud3JpdGVWYWx1ZT1mdW5j
dGlvbih0KXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2
ZUVsZW1lbnQsInZhbHVlIixwYXJzZUZsb2F0KHQpKX0sdC5wcm90b3R5cGUucmVnaXN0ZXJPbkNo
YW5nZT1mdW5jdGlvbih0KXt0aGlzLm9uQ2hhbmdlPWZ1bmN0aW9uKGUpe3QoIiI9PWU/bnVsbDpw
YXJzZUZsb2F0KGUpKX19LHQucHJvdG90eXBlLnJlZ2lzdGVyT25Ub3VjaGVkPWZ1bmN0aW9uKHQp
e3RoaXMub25Ub3VjaGVkPXR9LHQucHJvdG90eXBlLnNldERpc2FibGVkU3RhdGU9ZnVuY3Rpb24o
dCl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVt
ZW50LCJkaXNhYmxlZCIsdCl9LHR9KCk7b3QuZGVjb3JhdG9ycz1be3R5cGU6ai5ZLGFyZ3M6W3tz
ZWxlY3RvcjoiaW5wdXRbdHlwZT1yYW5nZV1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPXJh
bmdlXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1yYW5nZV1bbmdNb2RlbF0iLGhvc3Q6eyIoY2hh
bmdlKSI6Im9uQ2hhbmdlKCRldmVudC50YXJnZXQudmFsdWUpIiwiKGlucHV0KSI6Im9uQ2hhbmdl
KCRldmVudC50YXJnZXQudmFsdWUpIiwiKGJsdXIpIjoib25Ub3VjaGVkKCkifSxwcm92aWRlcnM6
W3J0XX1dfV0sb3QuY3RvclBhcmFtZXRlcnM9ZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6ai5fMTJ9
LHt0eXBlOmouWn1dfTsvKioKKyAqIEBsaWNlbnNlCisgKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorICogZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQorICovCit2YXIg
aXQ9e3Byb3ZpZGU6eix1c2VFeGlzdGluZzpuLmkoai5fMTEpKGZ1bmN0aW9uKCl7cmV0dXJuIGF0
fSksbXVsdGk6ITB9LGF0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX3JlbmRlcmVy
PXQsdGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX29wdGlvbk1hcD1uZXcgTWFwLHRoaXMuX2lkQ291
bnRlcj0wLHRoaXMub25DaGFuZ2U9ZnVuY3Rpb24odCl7fSx0aGlzLm9uVG91Y2hlZD1mdW5jdGlv
bigpe30sdGhpcy5fY29tcGFyZVdpdGg9ai5fMTN9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eSh0LnByb3RvdHlwZSwiY29tcGFyZVdpdGgiLHtzZXQ6ZnVuY3Rpb24odCl7aWYoImZ1bmN0aW9u
IiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCJjb21wYXJlV2l0aCBtdXN0IGJlIGEgZnVuY3Rp
b24sIGJ1dCByZWNlaXZlZCAiK0pTT04uc3RyaW5naWZ5KHQpKTt0aGlzLl9jb21wYXJlV2l0aD10
fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLndyaXRlVmFsdWU9
ZnVuY3Rpb24odCl7dGhpcy52YWx1ZT10O3ZhciBlPXRoaXMuX2dldE9wdGlvbklkKHQpO251bGw9
PWUmJnRoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxl
bWVudCwic2VsZWN0ZWRJbmRleCIsLTEpO3ZhciBuPWQoZSx0KTt0aGlzLl9yZW5kZXJlci5zZXRQ
cm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsInZhbHVlIixuKX0sdC5wcm90
b3R5cGUucmVnaXN0ZXJPbkNoYW5nZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMub25DaGFu
Z2U9ZnVuY3Rpb24obil7ZS52YWx1ZT1uLHQoZS5fZ2V0T3B0aW9uVmFsdWUobikpfX0sdC5wcm90
b3R5cGUucmVnaXN0ZXJPblRvdWNoZWQ9ZnVuY3Rpb24odCl7dGhpcy5vblRvdWNoZWQ9dH0sdC5w
cm90b3R5cGUuc2V0RGlzYWJsZWRTdGF0ZT1mdW5jdGlvbih0KXt0aGlzLl9yZW5kZXJlci5zZXRQ
cm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsImRpc2FibGVkIix0KX0sdC5w
cm90b3R5cGUuX3JlZ2lzdGVyT3B0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuX2lkQ291bnRl
cisrKS50b1N0cmluZygpfSx0LnByb3RvdHlwZS5fZ2V0T3B0aW9uSWQ9ZnVuY3Rpb24odCl7Zm9y
KHZhciBlPTAsbj1BcnJheS5mcm9tKHRoaXMuX29wdGlvbk1hcC5rZXlzKCkpO2U8bi5sZW5ndGg7
ZSsrKXt2YXIgcj1uW2VdO2lmKHRoaXMuX2NvbXBhcmVXaXRoKHRoaXMuX29wdGlvbk1hcC5nZXQo
ciksdCkpcmV0dXJuIHJ9cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLl9nZXRPcHRpb25WYWx1ZT1m
dW5jdGlvbih0KXt2YXIgZT1oKHQpO3JldHVybiB0aGlzLl9vcHRpb25NYXAuaGFzKGUpP3RoaXMu
X29wdGlvbk1hcC5nZXQoZSk6dH0sdH0oKTthdC5kZWNvcmF0b3JzPVt7dHlwZTpqLlksYXJnczpb
e3NlbGVjdG9yOiJzZWxlY3Q6bm90KFttdWx0aXBsZV0pW2Zvcm1Db250cm9sTmFtZV0sc2VsZWN0
Om5vdChbbXVsdGlwbGVdKVtmb3JtQ29udHJvbF0sc2VsZWN0Om5vdChbbXVsdGlwbGVdKVtuZ01v
ZGVsXSIsaG9zdDp7IihjaGFuZ2UpIjoib25DaGFuZ2UoJGV2ZW50LnRhcmdldC52YWx1ZSkiLCIo
Ymx1cikiOiJvblRvdWNoZWQoKSJ9LHByb3ZpZGVyczpbaXRdfV19XSxhdC5jdG9yUGFyYW1ldGVy
cz1mdW5jdGlvbigpe3JldHVyblt7dHlwZTpqLl8xMn0se3R5cGU6ai5afV19LGF0LnByb3BEZWNv
cmF0b3JzPXtjb21wYXJlV2l0aDpbe3R5cGU6ai5fMX1dfTt2YXIgc3Q9ZnVuY3Rpb24oKXtmdW5j
dGlvbiB0KHQsZSxuKXt0aGlzLl9lbGVtZW50PXQsdGhpcy5fcmVuZGVyZXI9ZSx0aGlzLl9zZWxl
Y3Q9bix0aGlzLl9zZWxlY3QmJih0aGlzLmlkPXRoaXMuX3NlbGVjdC5fcmVnaXN0ZXJPcHRpb24o
KSl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibmdWYWx1ZSIse3Nl
dDpmdW5jdGlvbih0KXtudWxsIT10aGlzLl9zZWxlY3QmJih0aGlzLl9zZWxlY3QuX29wdGlvbk1h
cC5zZXQodGhpcy5pZCx0KSx0aGlzLl9zZXRFbGVtZW50VmFsdWUoZCh0aGlzLmlkLHQpKSx0aGlz
Ll9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKX0sZW51bWVyYWJsZTohMCxj
b25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInZhbHVl
Iix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3NldEVsZW1lbnRWYWx1ZSh0KSx0aGlzLl9zZWxlY3Qm
JnRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSl9LGVudW1lcmFibGU6
ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuX3NldEVsZW1lbnRWYWx1ZT1mdW5jdGlv
bih0KXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1l
bnQsInZhbHVlIix0KX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9z
ZWxlY3QmJih0aGlzLl9zZWxlY3QuX29wdGlvbk1hcC5kZWxldGUodGhpcy5pZCksdGhpcy5fc2Vs
ZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9LHR9KCk7c3QuZGVjb3JhdG9ycz1b
e3R5cGU6ai5ZLGFyZ3M6W3tzZWxlY3Rvcjoib3B0aW9uIn1dfV0sc3QuY3RvclBhcmFtZXRlcnM9
ZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6ai5afSx7dHlwZTpqLl8xMn0se3R5cGU6YXQsZGVjb3Jh
dG9yczpbe3R5cGU6ai5MfSx7dHlwZTpqLl80fV19XX0sc3QucHJvcERlY29yYXRvcnM9e25nVmFs
dWU6W3t0eXBlOmouXzEsYXJnczpbIm5nVmFsdWUiXX1dLHZhbHVlOlt7dHlwZTpqLl8xLGFyZ3M6
WyJ2YWx1ZSJdfV19Oy8qKgorICogQGxpY2Vuc2UKKyAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisgKiBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCisgKi8KK3ZhciB1
dD17cHJvdmlkZTp6LHVzZUV4aXN0aW5nOm4uaShqLl8xMSkoZnVuY3Rpb24oKXtyZXR1cm4gY3R9
KSxtdWx0aTohMH0sY3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fcmVuZGVyZXI9
dCx0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fb3B0aW9uTWFwPW5ldyBNYXAsdGhpcy5faWRDb3Vu
dGVyPTAsdGhpcy5vbkNoYW5nZT1mdW5jdGlvbih0KXt9LHRoaXMub25Ub3VjaGVkPWZ1bmN0aW9u
KCl7fSx0aGlzLl9jb21wYXJlV2l0aD1qLl8xM31yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5
KHQucHJvdG90eXBlLCJjb21wYXJlV2l0aCIse3NldDpmdW5jdGlvbih0KXtpZigiZnVuY3Rpb24i
IT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoImNvbXBhcmVXaXRoIG11c3QgYmUgYSBmdW5jdGlv
biwgYnV0IHJlY2VpdmVkICIrSlNPTi5zdHJpbmdpZnkodCkpO3RoaXMuX2NvbXBhcmVXaXRoPXR9
LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUud3JpdGVWYWx1ZT1m
dW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMudmFsdWU9dDt2YXIgbjtpZihBcnJheS5pc0FycmF5
KHQpKXt2YXIgcj10Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZS5fZ2V0T3B0aW9uSWQodCl9KTtu
PWZ1bmN0aW9uKHQsZSl7dC5fc2V0U2VsZWN0ZWQoci5pbmRleE9mKGUudG9TdHJpbmcoKSk+LTEp
fX1lbHNlIG49ZnVuY3Rpb24odCxlKXt0Ll9zZXRTZWxlY3RlZCghMSl9O3RoaXMuX29wdGlvbk1h
cC5mb3JFYWNoKG4pfSx0LnByb3RvdHlwZS5yZWdpc3Rlck9uQ2hhbmdlPWZ1bmN0aW9uKHQpe3Zh
ciBlPXRoaXM7dGhpcy5vbkNoYW5nZT1mdW5jdGlvbihuKXt2YXIgcj1bXTtpZihuLmhhc093blBy
b3BlcnR5KCJzZWxlY3RlZE9wdGlvbnMiKSlmb3IodmFyIG89bi5zZWxlY3RlZE9wdGlvbnMsaT0w
O2k8by5sZW5ndGg7aSsrKXt2YXIgYT1vLml0ZW0oaSkscz1lLl9nZXRPcHRpb25WYWx1ZShhLnZh
bHVlKTtyLnB1c2gocyl9ZWxzZSBmb3IodmFyIG89bi5vcHRpb25zLGk9MDtpPG8ubGVuZ3RoO2kr
Kyl7dmFyIGE9by5pdGVtKGkpO2lmKGEuc2VsZWN0ZWQpe3ZhciBzPWUuX2dldE9wdGlvblZhbHVl
KGEudmFsdWUpO3IucHVzaChzKX19ZS52YWx1ZT1yLHQocil9fSx0LnByb3RvdHlwZS5yZWdpc3Rl
ck9uVG91Y2hlZD1mdW5jdGlvbih0KXt0aGlzLm9uVG91Y2hlZD10fSx0LnByb3RvdHlwZS5zZXRE
aXNhYmxlZFN0YXRlPWZ1bmN0aW9uKHQpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMu
X2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwiZGlzYWJsZWQiLHQpfSx0LnByb3RvdHlwZS5fcmVn
aXN0ZXJPcHRpb249ZnVuY3Rpb24odCl7dmFyIGU9KHRoaXMuX2lkQ291bnRlcisrKS50b1N0cmlu
ZygpO3JldHVybiB0aGlzLl9vcHRpb25NYXAuc2V0KGUsdCksZX0sdC5wcm90b3R5cGUuX2dldE9w
dGlvbklkPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLG49QXJyYXkuZnJvbSh0aGlzLl9vcHRpb25N
YXAua2V5cygpKTtlPG4ubGVuZ3RoO2UrKyl7dmFyIHI9bltlXTtpZih0aGlzLl9jb21wYXJlV2l0
aCh0aGlzLl9vcHRpb25NYXAuZ2V0KHIpLl92YWx1ZSx0KSlyZXR1cm4gcn1yZXR1cm4gbnVsbH0s
dC5wcm90b3R5cGUuX2dldE9wdGlvblZhbHVlPWZ1bmN0aW9uKHQpe3ZhciBlPW0odCk7cmV0dXJu
IHRoaXMuX29wdGlvbk1hcC5oYXMoZSk/dGhpcy5fb3B0aW9uTWFwLmdldChlKS5fdmFsdWU6dH0s
dH0oKTtjdC5kZWNvcmF0b3JzPVt7dHlwZTpqLlksYXJnczpbe3NlbGVjdG9yOiJzZWxlY3RbbXVs
dGlwbGVdW2Zvcm1Db250cm9sTmFtZV0sc2VsZWN0W211bHRpcGxlXVtmb3JtQ29udHJvbF0sc2Vs
ZWN0W211bHRpcGxlXVtuZ01vZGVsXSIsaG9zdDp7IihjaGFuZ2UpIjoib25DaGFuZ2UoJGV2ZW50
LnRhcmdldCkiLCIoYmx1cikiOiJvblRvdWNoZWQoKSJ9LHByb3ZpZGVyczpbdXRdfV19XSxjdC5j
dG9yUGFyYW1ldGVycz1mdW5jdGlvbigpe3JldHVyblt7dHlwZTpqLl8xMn0se3R5cGU6ai5afV19
LGN0LnByb3BEZWNvcmF0b3JzPXtjb21wYXJlV2l0aDpbe3R5cGU6ai5fMX1dfTt2YXIgbHQ9ZnVu
Y3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl9lbGVtZW50PXQsdGhpcy5fcmVuZGVyZXI9
ZSx0aGlzLl9zZWxlY3Q9bix0aGlzLl9zZWxlY3QmJih0aGlzLmlkPXRoaXMuX3NlbGVjdC5fcmVn
aXN0ZXJPcHRpb24odGhpcykpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5
cGUsIm5nVmFsdWUiLHtzZXQ6ZnVuY3Rpb24odCl7bnVsbCE9dGhpcy5fc2VsZWN0JiYodGhpcy5f
dmFsdWU9dCx0aGlzLl9zZXRFbGVtZW50VmFsdWUoeSh0aGlzLmlkLHQpKSx0aGlzLl9zZWxlY3Qu
d3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFi
bGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInZhbHVlIix7c2V0OmZ1
bmN0aW9uKHQpe3RoaXMuX3NlbGVjdD8odGhpcy5fdmFsdWU9dCx0aGlzLl9zZXRFbGVtZW50VmFs
dWUoeSh0aGlzLmlkLHQpKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFs
dWUpKTp0aGlzLl9zZXRFbGVtZW50VmFsdWUodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxl
OiEwfSksdC5wcm90b3R5cGUuX3NldEVsZW1lbnRWYWx1ZT1mdW5jdGlvbih0KXt0aGlzLl9yZW5k
ZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsInZhbHVlIix0KX0s
dC5wcm90b3R5cGUuX3NldFNlbGVjdGVkPWZ1bmN0aW9uKHQpe3RoaXMuX3JlbmRlcmVyLnNldFBy
b3BlcnR5KHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwic2VsZWN0ZWQiLHQpfSx0LnByb3Rv
dHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX3NlbGVjdCYmKHRoaXMuX3NlbGVjdC5f
b3B0aW9uTWFwLmRlbGV0ZSh0aGlzLmlkKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9z
ZWxlY3QudmFsdWUpKX0sdH0oKTtsdC5kZWNvcmF0b3JzPVt7dHlwZTpqLlksYXJnczpbe3NlbGVj
dG9yOiJvcHRpb24ifV19XSxsdC5jdG9yUGFyYW1ldGVycz1mdW5jdGlvbigpe3JldHVyblt7dHlw
ZTpqLlp9LHt0eXBlOmouXzEyfSx7dHlwZTpjdCxkZWNvcmF0b3JzOlt7dHlwZTpqLkx9LHt0eXBl
OmouXzR9XX1dfSxsdC5wcm9wRGVjb3JhdG9ycz17bmdWYWx1ZTpbe3R5cGU6ai5fMSxhcmdzOlsi
bmdWYWx1ZSJdfV0sdmFsdWU6W3t0eXBlOmouXzEsYXJnczpbInZhbHVlIl19XX07dmFyIHB0PVtZ
LG90LCQsYXQsY3QsbnRdLGZ0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9
PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBNLmEoZSx0KSxlLnByb3Rv
dHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe3RoaXMuX2NoZWNrUGFyZW50VHlwZSgpLHRoaXMuZm9y
bURpcmVjdGl2ZS5hZGRGb3JtR3JvdXAodGhpcyl9LGUucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1
bmN0aW9uKCl7dGhpcy5mb3JtRGlyZWN0aXZlJiZ0aGlzLmZvcm1EaXJlY3RpdmUucmVtb3ZlRm9y
bUdyb3VwKHRoaXMpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImNvbnRyb2wi
LHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mb3JtRGlyZWN0aXZlLmdldEZvcm1Hcm91cCh0
aGlzKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVy
dHkoZS5wcm90b3R5cGUsInBhdGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLm5hbWUs
dGhpcy5fcGFyZW50KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVm
aW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZvcm1EaXJlY3RpdmUiLHtnZXQ6ZnVuY3Rpb24oKXty
ZXR1cm4gdGhpcy5fcGFyZW50P3RoaXMuX3BhcmVudC5mb3JtRGlyZWN0aXZlOm51bGx9LGVudW1l
cmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90
eXBlLCJ2YWxpZGF0b3IiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLl92YWxpZGF0b3Jz
KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHko
ZS5wcm90b3R5cGUsImFzeW5jVmFsaWRhdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE8odGhp
cy5fYXN5bmNWYWxpZGF0b3JzKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnBy
b3RvdHlwZS5fY2hlY2tQYXJlbnRUeXBlPWZ1bmN0aW9uKCl7fSxlfShMKSxkdD1mdW5jdGlvbigp
e2Z1bmN0aW9uIHQodCl7dGhpcy5fY2Q9dH1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQu
cHJvdG90eXBlLCJuZ0NsYXNzVW50b3VjaGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlz
Ll9jZC5jb250cm9sJiZ0aGlzLl9jZC5jb250cm9sLnVudG91Y2hlZH0sZW51bWVyYWJsZTohMCxj
b25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5nQ2xh
c3NUb3VjaGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9jZC5jb250cm9sJiZ0aGlz
Ll9jZC5jb250cm9sLnRvdWNoZWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ0NsYXNzUHJpc3RpbmUiLHtnZXQ6ZnVu
Y3Rpb24oKXtyZXR1cm4hIXRoaXMuX2NkLmNvbnRyb2wmJnRoaXMuX2NkLmNvbnRyb2wucHJpc3Rp
bmV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5
KHQucHJvdG90eXBlLCJuZ0NsYXNzRGlydHkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMu
X2NkLmNvbnRyb2wmJnRoaXMuX2NkLmNvbnRyb2wuZGlydHl9LGVudW1lcmFibGU6ITAsY29uZmln
dXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ0NsYXNzVmFs
aWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2NkLmNvbnRyb2wmJnRoaXMuX2NkLmNv
bnRyb2wudmFsaWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ0NsYXNzSW52YWxpZCIse2dldDpmdW5jdGlvbigpe3Jl
dHVybiEhdGhpcy5fY2QuY29udHJvbCYmdGhpcy5fY2QuY29udHJvbC5pbnZhbGlkfSxlbnVtZXJh
YmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlw
ZSwibmdDbGFzc1BlbmRpbmciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2NkLmNvbnRy
b2wmJnRoaXMuX2NkLmNvbnRyb2wucGVuZGluZ30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6
ITB9KSx0fSgpLGh0PXsiW2NsYXNzLm5nLXVudG91Y2hlZF0iOiJuZ0NsYXNzVW50b3VjaGVkIiwi
W2NsYXNzLm5nLXRvdWNoZWRdIjoibmdDbGFzc1RvdWNoZWQiLCJbY2xhc3MubmctcHJpc3RpbmVd
IjoibmdDbGFzc1ByaXN0aW5lIiwiW2NsYXNzLm5nLWRpcnR5XSI6Im5nQ2xhc3NEaXJ0eSIsIltj
bGFzcy5uZy12YWxpZF0iOiJuZ0NsYXNzVmFsaWQiLCJbY2xhc3MubmctaW52YWxpZF0iOiJuZ0Ns
YXNzSW52YWxpZCIsIltjbGFzcy5uZy1wZW5kaW5nXSI6Im5nQ2xhc3NQZW5kaW5nIn0seXQ9ZnVu
Y3Rpb24odCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4gdC5jYWxsKHRoaXMsZSl8fHRoaXN9cmV0dXJu
IE0uYShlLHQpLGV9KGR0KTt5dC5kZWNvcmF0b3JzPVt7dHlwZTpqLlksYXJnczpbe3NlbGVjdG9y
OiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSIsaG9zdDpodH1dfV0s
eXQuY3RvclBhcmFtZXRlcnM9ZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6WCxkZWNvcmF0b3JzOlt7
dHlwZTpqLl8xNH1dfV19O3ZhciBtdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3JldHVybiB0
LmNhbGwodGhpcyxlKXx8dGhpc31yZXR1cm4gTS5hKGUsdCksZX0oZHQpO210LmRlY29yYXRvcnM9
W3t0eXBlOmouWSxhcmdzOlt7c2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFt
ZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9y
bV0iLGhvc3Q6aHR9XX1dLG10LmN0b3JQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBl
OkwsZGVjb3JhdG9yczpbe3R5cGU6ai5fMTR9XX1dfTsvKioKKyAqIEBsaWNlbnNlCisgKiBDb3B5
cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8v
bGljZW5zZQorICovCit2YXIgZ3Q9IlZBTElEIix2dD0iSU5WQUxJRCIsX3Q9IlBFTkRJTkciLGJ0
PSJESVNBQkxFRCIsd3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy52YWxpZGF0b3I9
dCx0aGlzLmFzeW5jVmFsaWRhdG9yPWUsdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlPWZ1bmN0aW9u
KCl7fSx0aGlzLl9wcmlzdGluZT0hMCx0aGlzLl90b3VjaGVkPSExLHRoaXMuX29uRGlzYWJsZWRD
aGFuZ2U9W119cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwidmFsdWUi
LHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmFsdWV9LGVudW1lcmFibGU6ITAsY29uZmln
dXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXJlbnQiLHtn
ZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFyZW50fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3Vy
YWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwic3RhdHVzIix7Z2V0
OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXR1c30sZW51bWVyYWJsZTohMCxjb25maWd1cmFi
bGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInZhbGlkIix7Z2V0OmZ1
bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXR1cz09PWd0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3Vy
YWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaW52YWxpZCIse2dl
dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGF0dXM9PT12dH0sZW51bWVyYWJsZTohMCxjb25m
aWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBlbmRpbmci
LHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhdHVzPT1fdH0sZW51bWVyYWJsZTohMCxj
b25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImRpc2Fi
bGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXR1cz09PWJ0fSxlbnVtZXJhYmxl
OiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwi
ZW5hYmxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGF0dXMhPT1idH0sZW51bWVy
YWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5
cGUsImVycm9ycyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lcnJvcnN9LGVudW1lcmFi
bGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBl
LCJwcmlzdGluZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcmlzdGluZX0sZW51bWVy
YWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5
cGUsImRpcnR5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMucHJpc3RpbmV9LGVudW1lcmFi
bGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBl
LCJ0b3VjaGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RvdWNoZWR9LGVudW1lcmFi
bGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBl
LCJ1bnRvdWNoZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5fdG91Y2hlZH0sZW51bWVy
YWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5
cGUsInZhbHVlQ2hhbmdlcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92YWx1ZUNoYW5n
ZXN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5
KHQucHJvdG90eXBlLCJzdGF0dXNDaGFuZ2VzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu
X3N0YXR1c0NoYW5nZXN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5
cGUuc2V0VmFsaWRhdG9ycz1mdW5jdGlvbih0KXt0aGlzLnZhbGlkYXRvcj1UKHQpfSx0LnByb3Rv
dHlwZS5zZXRBc3luY1ZhbGlkYXRvcnM9ZnVuY3Rpb24odCl7dGhpcy5hc3luY1ZhbGlkYXRvcj1r
KHQpfSx0LnByb3RvdHlwZS5jbGVhclZhbGlkYXRvcnM9ZnVuY3Rpb24oKXt0aGlzLnZhbGlkYXRv
cj1udWxsfSx0LnByb3RvdHlwZS5jbGVhckFzeW5jVmFsaWRhdG9ycz1mdW5jdGlvbigpe3RoaXMu
YXN5bmNWYWxpZGF0b3I9bnVsbH0sdC5wcm90b3R5cGUubWFya0FzVG91Y2hlZD1mdW5jdGlvbih0
KXt2b2lkIDA9PT10JiYodD17fSksdGhpcy5fdG91Y2hlZD0hMCx0aGlzLl9wYXJlbnQmJiF0Lm9u
bHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzVG91Y2hlZCh0KX0sdC5wcm90b3R5cGUubWFya0Fz
VW50b3VjaGVkPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PXt9KSx0aGlzLl90b3VjaGVkPSEx
LHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbih0KXt0Lm1hcmtBc1VudG91Y2hlZCh7b25seVNl
bGY6ITB9KX0pLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRl
VG91Y2hlZCh0KX0sdC5wcm90b3R5cGUubWFya0FzRGlydHk9ZnVuY3Rpb24odCl7dm9pZCAwPT09
dCYmKHQ9e30pLHRoaXMuX3ByaXN0aW5lPSExLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRo
aXMuX3BhcmVudC5tYXJrQXNEaXJ0eSh0KX0sdC5wcm90b3R5cGUubWFya0FzUHJpc3RpbmU9ZnVu
Y3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9e30pLHRoaXMuX3ByaXN0aW5lPSEwLHRoaXMuX2ZvckVh
Y2hDaGlsZChmdW5jdGlvbih0KXt0Lm1hcmtBc1ByaXN0aW5lKHtvbmx5U2VsZjohMH0pfSksdGhp
cy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGluZSh0KX0s
dC5wcm90b3R5cGUubWFya0FzUGVuZGluZz1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD17fSks
dGhpcy5fc3RhdHVzPV90LHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5t
YXJrQXNQZW5kaW5nKHQpfSx0LnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKHQpe3ZvaWQgMD09
PXQmJih0PXt9KSx0aGlzLl9zdGF0dXM9YnQsdGhpcy5fZXJyb3JzPW51bGwsdGhpcy5fZm9yRWFj
aENoaWxkKGZ1bmN0aW9uKHQpe3QuZGlzYWJsZSh7b25seVNlbGY6ITB9KX0pLHRoaXMuX3VwZGF0
ZVZhbHVlKCksITEhPT10LmVtaXRFdmVudCYmKHRoaXMuX3ZhbHVlQ2hhbmdlcy5lbWl0KHRoaXMu
X3ZhbHVlKSx0aGlzLl9zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5fc3RhdHVzKSksdGhpcy5fdXBk
YXRlQW5jZXN0b3JzKCEhdC5vbmx5U2VsZiksdGhpcy5fb25EaXNhYmxlZENoYW5nZS5mb3JFYWNo
KGZ1bmN0aW9uKHQpe3JldHVybiB0KCEwKX0pfSx0LnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24o
dCl7dm9pZCAwPT09dCYmKHQ9e30pLHRoaXMuX3N0YXR1cz1ndCx0aGlzLl9mb3JFYWNoQ2hpbGQo
ZnVuY3Rpb24odCl7dC5lbmFibGUoe29ubHlTZWxmOiEwfSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5k
VmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDp0LmVtaXRFdmVudH0pLHRoaXMuX3VwZGF0
ZUFuY2VzdG9ycyghIXQub25seVNlbGYpLHRoaXMuX29uRGlzYWJsZWRDaGFuZ2UuZm9yRWFjaChm
dW5jdGlvbih0KXtyZXR1cm4gdCghMSl9KX0sdC5wcm90b3R5cGUuX3VwZGF0ZUFuY2VzdG9ycz1m
dW5jdGlvbih0KXt0aGlzLl9wYXJlbnQmJiF0JiYodGhpcy5fcGFyZW50LnVwZGF0ZVZhbHVlQW5k
VmFsaWRpdHkoKSx0aGlzLl9wYXJlbnQuX3VwZGF0ZVByaXN0aW5lKCksdGhpcy5fcGFyZW50Ll91
cGRhdGVUb3VjaGVkKCkpfSx0LnByb3RvdHlwZS5zZXRQYXJlbnQ9ZnVuY3Rpb24odCl7dGhpcy5f
cGFyZW50PXR9LHQucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKHQsZSl7fSx0LnByb3RvdHlw
ZS5wYXRjaFZhbHVlPWZ1bmN0aW9uKHQsZSl7fSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbih0
LGUpe30sdC5wcm90b3R5cGUudXBkYXRlVmFsdWVBbmRWYWxpZGl0eT1mdW5jdGlvbih0KXt2b2lk
IDA9PT10JiYodD17fSksdGhpcy5fc2V0SW5pdGlhbFN0YXR1cygpLHRoaXMuX3VwZGF0ZVZhbHVl
KCksdGhpcy5lbmFibGVkJiYodGhpcy5fY2FuY2VsRXhpc3RpbmdTdWJzY3JpcHRpb24oKSx0aGlz
Ll9lcnJvcnM9dGhpcy5fcnVuVmFsaWRhdG9yKCksdGhpcy5fc3RhdHVzPXRoaXMuX2NhbGN1bGF0
ZVN0YXR1cygpLHRoaXMuX3N0YXR1cyE9PWd0JiZ0aGlzLl9zdGF0dXMhPT1fdHx8dGhpcy5fcnVu
QXN5bmNWYWxpZGF0b3IodC5lbWl0RXZlbnQpKSwhMSE9PXQuZW1pdEV2ZW50JiYodGhpcy5fdmFs
dWVDaGFuZ2VzLmVtaXQodGhpcy5fdmFsdWUpLHRoaXMuX3N0YXR1c0NoYW5nZXMuZW1pdCh0aGlz
Ll9zdGF0dXMpKSx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQudXBkYXRl
VmFsdWVBbmRWYWxpZGl0eSh0KX0sdC5wcm90b3R5cGUuX3VwZGF0ZVRyZWVWYWxpZGl0eT1mdW5j
dGlvbih0KXt2b2lkIDA9PT10JiYodD17ZW1pdEV2ZW50OiEwfSksdGhpcy5fZm9yRWFjaENoaWxk
KGZ1bmN0aW9uKGUpe3JldHVybiBlLl91cGRhdGVUcmVlVmFsaWRpdHkodCl9KSx0aGlzLnVwZGF0
ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDp0LmVtaXRFdmVudH0pfSx0
LnByb3RvdHlwZS5fc2V0SW5pdGlhbFN0YXR1cz1mdW5jdGlvbigpe3RoaXMuX3N0YXR1cz10aGlz
Ll9hbGxDb250cm9sc0Rpc2FibGVkKCk/YnQ6Z3R9LHQucHJvdG90eXBlLl9ydW5WYWxpZGF0b3I9
ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWxpZGF0b3I/dGhpcy52YWxpZGF0b3IodGhpcyk6bnVs
bH0sdC5wcm90b3R5cGUuX3J1bkFzeW5jVmFsaWRhdG9yPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7
aWYodGhpcy5hc3luY1ZhbGlkYXRvcil7dGhpcy5fc3RhdHVzPV90O3ZhciBuPWkodGhpcy5hc3lu
Y1ZhbGlkYXRvcih0aGlzKSk7dGhpcy5fYXN5bmNWYWxpZGF0aW9uU3Vic2NyaXB0aW9uPW4uc3Vi
c2NyaWJlKGZ1bmN0aW9uKG4pe3JldHVybiBlLnNldEVycm9ycyhuLHtlbWl0RXZlbnQ6dH0pfSl9
fSx0LnByb3RvdHlwZS5fY2FuY2VsRXhpc3RpbmdTdWJzY3JpcHRpb249ZnVuY3Rpb24oKXt0aGlz
Ll9hc3luY1ZhbGlkYXRpb25TdWJzY3JpcHRpb24mJnRoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNj
cmlwdGlvbi51bnN1YnNjcmliZSgpfSx0LnByb3RvdHlwZS5zZXRFcnJvcnM9ZnVuY3Rpb24odCxl
KXt2b2lkIDA9PT1lJiYoZT17fSksdGhpcy5fZXJyb3JzPXQsdGhpcy5fdXBkYXRlQ29udHJvbHNF
cnJvcnMoITEhPT1lLmVtaXRFdmVudCl9LHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1
cm4gQSh0aGlzLHQsIi4iKX0sdC5wcm90b3R5cGUuZ2V0RXJyb3I9ZnVuY3Rpb24odCxlKXt2YXIg
bj1lP3RoaXMuZ2V0KGUpOnRoaXM7cmV0dXJuIG4mJm4uX2Vycm9ycz9uLl9lcnJvcnNbdF06bnVs
bH0sdC5wcm90b3R5cGUuaGFzRXJyb3I9ZnVuY3Rpb24odCxlKXtyZXR1cm4hIXRoaXMuZ2V0RXJy
b3IodCxlKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyb290Iix7Z2V0OmZ1
bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXM7dC5fcGFyZW50Oyl0PXQuX3BhcmVudDtyZXR1cm4gdH0s
ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5fdXBkYXRlQ29udHJv
bHNFcnJvcnM9ZnVuY3Rpb24odCl7dGhpcy5fc3RhdHVzPXRoaXMuX2NhbGN1bGF0ZVN0YXR1cygp
LHQmJnRoaXMuX3N0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLl9zdGF0dXMpLHRoaXMuX3BhcmVudCYm
dGhpcy5fcGFyZW50Ll91cGRhdGVDb250cm9sc0Vycm9ycyh0KX0sdC5wcm90b3R5cGUuX2luaXRP
YnNlcnZhYmxlcz1mdW5jdGlvbigpe3RoaXMuX3ZhbHVlQ2hhbmdlcz1uZXcgai5WLHRoaXMuX3N0
YXR1c0NoYW5nZXM9bmV3IGouVn0sdC5wcm90b3R5cGUuX2NhbGN1bGF0ZVN0YXR1cz1mdW5jdGlv
bigpe3JldHVybiB0aGlzLl9hbGxDb250cm9sc0Rpc2FibGVkKCk/YnQ6dGhpcy5fZXJyb3JzP3Z0
OnRoaXMuX2FueUNvbnRyb2xzSGF2ZVN0YXR1cyhfdCk/X3Q6dGhpcy5fYW55Q29udHJvbHNIYXZl
U3RhdHVzKHZ0KT92dDpndH0sdC5wcm90b3R5cGUuX3VwZGF0ZVZhbHVlPWZ1bmN0aW9uKCl7fSx0
LnByb3RvdHlwZS5fZm9yRWFjaENoaWxkPWZ1bmN0aW9uKHQpe30sdC5wcm90b3R5cGUuX2FueUNv
bnRyb2xzPWZ1bmN0aW9uKHQpe30sdC5wcm90b3R5cGUuX2FsbENvbnRyb2xzRGlzYWJsZWQ9ZnVu
Y3Rpb24oKXt9LHQucHJvdG90eXBlLl9hbnlDb250cm9sc0hhdmVTdGF0dXM9ZnVuY3Rpb24odCl7
cmV0dXJuIHRoaXMuX2FueUNvbnRyb2xzKGZ1bmN0aW9uKGUpe3JldHVybiBlLnN0YXR1cz09PXR9
KX0sdC5wcm90b3R5cGUuX2FueUNvbnRyb2xzRGlydHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5f
YW55Q29udHJvbHMoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlydHl9KX0sdC5wcm90b3R5cGUuX2Fu
eUNvbnRyb2xzVG91Y2hlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbnlDb250cm9scyhmdW5j
dGlvbih0KXtyZXR1cm4gdC50b3VjaGVkfSl9LHQucHJvdG90eXBlLl91cGRhdGVQcmlzdGluZT1m
dW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD17fSksdGhpcy5fcHJpc3RpbmU9IXRoaXMuX2FueUNv
bnRyb2xzRGlydHkoKSx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQuX3Vw
ZGF0ZVByaXN0aW5lKHQpfSx0LnByb3RvdHlwZS5fdXBkYXRlVG91Y2hlZD1mdW5jdGlvbih0KXt2
b2lkIDA9PT10JiYodD17fSksdGhpcy5fdG91Y2hlZD10aGlzLl9hbnlDb250cm9sc1RvdWNoZWQo
KSx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZVRvdWNoZWQo
dCl9LHQucHJvdG90eXBlLl9pc0JveGVkVmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIm9iamVjdCI9
PXR5cGVvZiB0JiZudWxsIT09dCYmMj09PU9iamVjdC5rZXlzKHQpLmxlbmd0aCYmInZhbHVlImlu
IHQmJiJkaXNhYmxlZCJpbiB0fSx0LnByb3RvdHlwZS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFu
Z2U9ZnVuY3Rpb24odCl7dGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlPXR9LHR9KCksQ3Q9ZnVuY3Rp
b24odCl7ZnVuY3Rpb24gZShlLG4scil7dm9pZCAwPT09ZSYmKGU9bnVsbCk7dmFyIG89dC5jYWxs
KHRoaXMsVChuKSxrKHIpKXx8dGhpcztyZXR1cm4gby5fb25DaGFuZ2U9W10sby5fYXBwbHlGb3Jt
U3RhdGUoZSksby51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6
ITF9KSxvLl9pbml0T2JzZXJ2YWJsZXMoKSxvfXJldHVybiBNLmEoZSx0KSxlLnByb3RvdHlwZS5z
ZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7dm9pZCAwPT09ZSYmKGU9e30pLHRoaXMu
X3ZhbHVlPXQsdGhpcy5fb25DaGFuZ2UubGVuZ3RoJiYhMSE9PWUuZW1pdE1vZGVsVG9WaWV3Q2hh
bmdlJiZ0aGlzLl9vbkNoYW5nZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KG4uX3ZhbHVl
LCExIT09ZS5lbWl0Vmlld1RvTW9kZWxDaGFuZ2UpfSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlk
aXR5KGUpfSxlLnByb3RvdHlwZS5wYXRjaFZhbHVlPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYm
KGU9e30pLHRoaXMuc2V0VmFsdWUodCxlKX0sZS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24odCxl
KXt2b2lkIDA9PT10JiYodD1udWxsKSx2b2lkIDA9PT1lJiYoZT17fSksdGhpcy5fYXBwbHlGb3Jt
U3RhdGUodCksdGhpcy5tYXJrQXNQcmlzdGluZShlKSx0aGlzLm1hcmtBc1VudG91Y2hlZChlKSx0
aGlzLnNldFZhbHVlKHRoaXMuX3ZhbHVlLGUpfSxlLnByb3RvdHlwZS5fdXBkYXRlVmFsdWU9ZnVu
Y3Rpb24oKXt9LGUucHJvdG90eXBlLl9hbnlDb250cm9scz1mdW5jdGlvbih0KXtyZXR1cm4hMX0s
ZS5wcm90b3R5cGUuX2FsbENvbnRyb2xzRGlzYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5k
aXNhYmxlZH0sZS5wcm90b3R5cGUucmVnaXN0ZXJPbkNoYW5nZT1mdW5jdGlvbih0KXt0aGlzLl9v
bkNoYW5nZS5wdXNoKHQpfSxlLnByb3RvdHlwZS5fY2xlYXJDaGFuZ2VGbnM9ZnVuY3Rpb24oKXt0
aGlzLl9vbkNoYW5nZT1bXSx0aGlzLl9vbkRpc2FibGVkQ2hhbmdlPVtdLHRoaXMuX29uQ29sbGVj
dGlvbkNoYW5nZT1mdW5jdGlvbigpe319LGUucHJvdG90eXBlLnJlZ2lzdGVyT25EaXNhYmxlZENo
YW5nZT1mdW5jdGlvbih0KXt0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLnB1c2godCl9LGUucHJvdG90
eXBlLl9mb3JFYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7fSxlLnByb3RvdHlwZS5fYXBwbHlGb3JtU3Rh
dGU9ZnVuY3Rpb24odCl7dGhpcy5faXNCb3hlZFZhbHVlKHQpPyh0aGlzLl92YWx1ZT10LnZhbHVl
LHQuZGlzYWJsZWQ/dGhpcy5kaXNhYmxlKHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ITF9KTp0aGlz
LmVuYWJsZSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiExfSkpOnRoaXMuX3ZhbHVlPXR9LGV9KHd0
KSxFdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgbz10LmNhbGwodGhpcyxufHxu
dWxsLHJ8fG51bGwpfHx0aGlzO3JldHVybiBvLmNvbnRyb2xzPWUsby5faW5pdE9ic2VydmFibGVz
KCksby5fc2V0VXBDb250cm9scygpLG8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6
ITAsZW1pdEV2ZW50OiExfSksb31yZXR1cm4gTS5hKGUsdCksZS5wcm90b3R5cGUucmVnaXN0ZXJD
b250cm9sPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY29udHJvbHNbdF0/dGhpcy5jb250cm9s
c1t0XToodGhpcy5jb250cm9sc1t0XT1lLGUuc2V0UGFyZW50KHRoaXMpLGUuX3JlZ2lzdGVyT25D
b2xsZWN0aW9uQ2hhbmdlKHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSksZSl9LGUucHJvdG90eXBl
LmFkZENvbnRyb2w9ZnVuY3Rpb24odCxlKXt0aGlzLnJlZ2lzdGVyQ29udHJvbCh0LGUpLHRoaXMu
dXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfSxlLnBy
b3RvdHlwZS5yZW1vdmVDb250cm9sPWZ1bmN0aW9uKHQpe3RoaXMuY29udHJvbHNbdF0mJnRoaXMu
Y29udHJvbHNbdF0uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKGZ1bmN0aW9uKCl7fSksZGVs
ZXRlIHRoaXMuY29udHJvbHNbdF0sdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCksdGhpcy5f
b25Db2xsZWN0aW9uQ2hhbmdlKCl9LGUucHJvdG90eXBlLnNldENvbnRyb2w9ZnVuY3Rpb24odCxl
KXt0aGlzLmNvbnRyb2xzW3RdJiZ0aGlzLmNvbnRyb2xzW3RdLl9yZWdpc3Rlck9uQ29sbGVjdGlv
bkNoYW5nZShmdW5jdGlvbigpe30pLGRlbGV0ZSB0aGlzLmNvbnRyb2xzW3RdLGUmJnRoaXMucmVn
aXN0ZXJDb250cm9sKHQsZSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCksdGhpcy5fb25D
b2xsZWN0aW9uQ2hhbmdlKCl9LGUucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKHQpe3JldHVy
biB0aGlzLmNvbnRyb2xzLmhhc093blByb3BlcnR5KHQpJiZ0aGlzLmNvbnRyb2xzW3RdLmVuYWJs
ZWR9LGUucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpczt2b2lkIDA9
PT1lJiYoZT17fSksdGhpcy5fY2hlY2tBbGxWYWx1ZXNQcmVzZW50KHQpLE9iamVjdC5rZXlzKHQp
LmZvckVhY2goZnVuY3Rpb24ocil7bi5fdGhyb3dJZkNvbnRyb2xNaXNzaW5nKHIpLG4uY29udHJv
bHNbcl0uc2V0VmFsdWUodFtyXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSl9
KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSl9LGUucHJvdG90eXBlLnBhdGNoVmFsdWU9
ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3ZvaWQgMD09PWUmJihlPXt9KSxPYmplY3Qua2V5cyh0
KS5mb3JFYWNoKGZ1bmN0aW9uKHIpe24uY29udHJvbHNbcl0mJm4uY29udHJvbHNbcl0ucGF0Y2hW
YWx1ZSh0W3JdLHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ZS5lbWl0RXZlbnR9KX0pLHRoaXMudXBk
YXRlVmFsdWVBbmRWYWxpZGl0eShlKX0sZS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24odCxlKXt2
b2lkIDA9PT10JiYodD17fSksdm9pZCAwPT09ZSYmKGU9e30pLHRoaXMuX2ZvckVhY2hDaGlsZChm
dW5jdGlvbihuLHIpe24ucmVzZXQodFtyXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmUuZW1pdEV2
ZW50fSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSksdGhpcy5fdXBkYXRlUHJpc3Rp
bmUoZSksdGhpcy5fdXBkYXRlVG91Y2hlZChlKX0sZS5wcm90b3R5cGUuZ2V0UmF3VmFsdWU9ZnVu
Y3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVkdWNlQ2hpbGRyZW4oe30sZnVuY3Rpb24odCxlLG4pe3Jl
dHVybiB0W25dPWUgaW5zdGFuY2VvZiBDdD9lLnZhbHVlOmUuZ2V0UmF3VmFsdWUoKSx0fSl9LGUu
cHJvdG90eXBlLl90aHJvd0lmQ29udHJvbE1pc3Npbmc9ZnVuY3Rpb24odCl7aWYoIU9iamVjdC5r
ZXlzKHRoaXMuY29udHJvbHMpLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlxuICAgICAgICBUaGVy
ZSBhcmUgbm8gZm9ybSBjb250cm9scyByZWdpc3RlcmVkIHdpdGggdGhpcyBncm91cCB5ZXQuICBJ
ZiB5b3UncmUgdXNpbmcgbmdNb2RlbCxcbiAgICAgICAgeW91IG1heSB3YW50IHRvIGNoZWNrIG5l
eHQgdGljayAoZS5nLiB1c2Ugc2V0VGltZW91dCkuXG4gICAgICAiKTtpZighdGhpcy5jb250cm9s
c1t0XSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIGZvcm0gY29udHJvbCB3aXRoIG5hbWU6
ICIrdCsiLiIpfSxlLnByb3RvdHlwZS5fZm9yRWFjaENoaWxkPWZ1bmN0aW9uKHQpe3ZhciBlPXRo
aXM7T2JqZWN0LmtleXModGhpcy5jb250cm9scykuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4g
dChlLmNvbnRyb2xzW25dLG4pfSl9LGUucHJvdG90eXBlLl9zZXRVcENvbnRyb2xzPWZ1bmN0aW9u
KCl7dmFyIHQ9dGhpczt0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oZSl7ZS5zZXRQYXJlbnQo
dCksZS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UodC5fb25Db2xsZWN0aW9uQ2hhbmdlKX0p
fSxlLnByb3RvdHlwZS5fdXBkYXRlVmFsdWU9ZnVuY3Rpb24oKXt0aGlzLl92YWx1ZT10aGlzLl9y
ZWR1Y2VWYWx1ZSgpfSxlLnByb3RvdHlwZS5fYW55Q29udHJvbHM9ZnVuY3Rpb24odCl7dmFyIGU9
dGhpcyxuPSExO3JldHVybiB0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24ocixvKXtuPW58fGUu
Y29udGFpbnMobykmJnQocil9KSxufSxlLnByb3RvdHlwZS5fcmVkdWNlVmFsdWU9ZnVuY3Rpb24o
KXt2YXIgdD10aGlzO3JldHVybiB0aGlzLl9yZWR1Y2VDaGlsZHJlbih7fSxmdW5jdGlvbihlLG4s
cil7cmV0dXJuKG4uZW5hYmxlZHx8dC5kaXNhYmxlZCkmJihlW3JdPW4udmFsdWUpLGV9KX0sZS5w
cm90b3R5cGUuX3JlZHVjZUNoaWxkcmVuPWZ1bmN0aW9uKHQsZSl7dmFyIG49dDtyZXR1cm4gdGhp
cy5fZm9yRWFjaENoaWxkKGZ1bmN0aW9uKHQscil7bj1lKG4sdCxyKX0pLG59LGUucHJvdG90eXBl
Ll9hbGxDb250cm9sc0Rpc2FibGVkPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT1PYmplY3Qua2V5
cyh0aGlzLmNvbnRyb2xzKTt0PGUubGVuZ3RoO3QrKyl7dmFyIG49ZVt0XTtpZih0aGlzLmNvbnRy
b2xzW25dLmVuYWJsZWQpcmV0dXJuITF9cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY29udHJvbHMp
Lmxlbmd0aD4wfHx0aGlzLmRpc2FibGVkfSxlLnByb3RvdHlwZS5fY2hlY2tBbGxWYWx1ZXNQcmVz
ZW50PWZ1bmN0aW9uKHQpe3RoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihlLG4pe2lmKHZvaWQg
MD09PXRbbl0pdGhyb3cgbmV3IEVycm9yKCJNdXN0IHN1cHBseSBhIHZhbHVlIGZvciBmb3JtIGNv
bnRyb2wgd2l0aCBuYW1lOiAnIituKyInLiIpfSl9LGV9KHd0KSxPdD1mdW5jdGlvbih0KXtmdW5j
dGlvbiBlKGUsbixyKXt2YXIgbz10LmNhbGwodGhpcyxufHxudWxsLHJ8fG51bGwpfHx0aGlzO3Jl
dHVybiBvLmNvbnRyb2xzPWUsby5faW5pdE9ic2VydmFibGVzKCksby5fc2V0VXBDb250cm9scygp
LG8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiExfSksb31y
ZXR1cm4gTS5hKGUsdCksZS5wcm90b3R5cGUuYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY29u
dHJvbHNbdF19LGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24odCl7dGhpcy5jb250cm9scy5wdXNo
KHQpLHRoaXMuX3JlZ2lzdGVyQ29udHJvbCh0KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHko
KSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX0sZS5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9u
KHQsZSl7dGhpcy5jb250cm9scy5zcGxpY2UodCwwLGUpLHRoaXMuX3JlZ2lzdGVyQ29udHJvbChl
KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2Uo
KX0sZS5wcm90b3R5cGUucmVtb3ZlQXQ9ZnVuY3Rpb24odCl7dGhpcy5jb250cm9sc1t0XSYmdGhp
cy5jb250cm9sc1t0XS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoZnVuY3Rpb24oKXt9KSx0
aGlzLmNvbnRyb2xzLnNwbGljZSh0LDEpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpLHRo
aXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfSxlLnByb3RvdHlwZS5zZXRDb250cm9sPWZ1bmN0aW9u
KHQsZSl7dGhpcy5jb250cm9sc1t0XSYmdGhpcy5jb250cm9sc1t0XS5fcmVnaXN0ZXJPbkNvbGxl
Y3Rpb25DaGFuZ2UoZnVuY3Rpb24oKXt9KSx0aGlzLmNvbnRyb2xzLnNwbGljZSh0LDEpLGUmJih0
aGlzLmNvbnRyb2xzLnNwbGljZSh0LDAsZSksdGhpcy5fcmVnaXN0ZXJDb250cm9sKGUpKSx0aGlz
LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX0sT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsZW5ndGgiLHtnZXQ6ZnVuY3Rpb24oKXty
ZXR1cm4gdGhpcy5jb250cm9scy5sZW5ndGh9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEw
fSksZS5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3ZvaWQgMD09
PWUmJihlPXt9KSx0aGlzLl9jaGVja0FsbFZhbHVlc1ByZXNlbnQodCksdC5mb3JFYWNoKGZ1bmN0
aW9uKHQscil7bi5fdGhyb3dJZkNvbnRyb2xNaXNzaW5nKHIpLG4uYXQocikuc2V0VmFsdWUodCx7
b25seVNlbGY6ITAsZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5k
VmFsaWRpdHkoZSl9LGUucHJvdG90eXBlLnBhdGNoVmFsdWU9ZnVuY3Rpb24odCxlKXt2YXIgbj10
aGlzO3ZvaWQgMD09PWUmJihlPXt9KSx0LmZvckVhY2goZnVuY3Rpb24odCxyKXtuLmF0KHIpJiZu
LmF0KHIpLnBhdGNoVmFsdWUodCx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSl9
KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSl9LGUucHJvdG90eXBlLnJlc2V0PWZ1bmN0
aW9uKHQsZSl7dm9pZCAwPT09dCYmKHQ9W10pLHZvaWQgMD09PWUmJihlPXt9KSx0aGlzLl9mb3JF
YWNoQ2hpbGQoZnVuY3Rpb24obixyKXtuLnJlc2V0KHRbcl0se29ubHlTZWxmOiEwLGVtaXRFdmVu
dDplLmVtaXRFdmVudH0pfSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGUpLHRoaXMuX3Vw
ZGF0ZVByaXN0aW5lKGUpLHRoaXMuX3VwZGF0ZVRvdWNoZWQoZSl9LGUucHJvdG90eXBlLmdldFJh
d1ZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udHJvbHMubWFwKGZ1bmN0aW9uKHQpe3Jl
dHVybiB0IGluc3RhbmNlb2YgQ3Q/dC52YWx1ZTp0LmdldFJhd1ZhbHVlKCl9KX0sZS5wcm90b3R5
cGUuX3Rocm93SWZDb250cm9sTWlzc2luZz1mdW5jdGlvbih0KXtpZighdGhpcy5jb250cm9scy5s
ZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJcbiAgICAgICAgVGhlcmUgYXJlIG5vIGZvcm0gY29udHJv
bHMgcmVnaXN0ZXJlZCB3aXRoIHRoaXMgYXJyYXkgeWV0LiAgSWYgeW91J3JlIHVzaW5nIG5nTW9k
ZWwsXG4gICAgICAgIHlvdSBtYXkgd2FudCB0byBjaGVjayBuZXh0IHRpY2sgKGUuZy4gdXNlIHNl
dFRpbWVvdXQpLlxuICAgICAgIik7aWYoIXRoaXMuYXQodCkpdGhyb3cgbmV3IEVycm9yKCJDYW5u
b3QgZmluZCBmb3JtIGNvbnRyb2wgYXQgaW5kZXggIit0KX0sZS5wcm90b3R5cGUuX2ZvckVhY2hD
aGlsZD1mdW5jdGlvbih0KXt0aGlzLmNvbnRyb2xzLmZvckVhY2goZnVuY3Rpb24oZSxuKXt0KGUs
bil9KX0sZS5wcm90b3R5cGUuX3VwZGF0ZVZhbHVlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlz
Ll92YWx1ZT10aGlzLmNvbnRyb2xzLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5lbmFibGVk
fHx0LmRpc2FibGVkfSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSl9LGUucHJvdG90
eXBlLl9hbnlDb250cm9scz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jb250cm9scy5zb21lKGZ1
bmN0aW9uKGUpe3JldHVybiBlLmVuYWJsZWQmJnQoZSl9KX0sZS5wcm90b3R5cGUuX3NldFVwQ29u
dHJvbHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihl
KXtyZXR1cm4gdC5fcmVnaXN0ZXJDb250cm9sKGUpfSl9LGUucHJvdG90eXBlLl9jaGVja0FsbFZh
bHVlc1ByZXNlbnQ9ZnVuY3Rpb24odCl7dGhpcy5fZm9yRWFjaENoaWxkKGZ1bmN0aW9uKGUsbil7
aWYodm9pZCAwPT09dFtuXSl0aHJvdyBuZXcgRXJyb3IoIk11c3Qgc3VwcGx5IGEgdmFsdWUgZm9y
IGZvcm0gY29udHJvbCBhdCBpbmRleDogIituKyIuIil9KX0sZS5wcm90b3R5cGUuX2FsbENvbnRy
b2xzRGlzYWJsZWQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPXRoaXMuY29udHJvbHM7dDxlLmxl
bmd0aDt0Kyspe2lmKGVbdF0uZW5hYmxlZClyZXR1cm4hMX1yZXR1cm4gdGhpcy5jb250cm9scy5s
ZW5ndGg+MHx8dGhpcy5kaXNhYmxlZH0sZS5wcm90b3R5cGUuX3JlZ2lzdGVyQ29udHJvbD1mdW5j
dGlvbih0KXt0LnNldFBhcmVudCh0aGlzKSx0Ll9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0
aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UpfSxlfSh3dCkseHQ9e3Byb3ZpZGU6TCx1c2VFeGlzdGlu
ZzpuLmkoai5fMTEpKGZ1bmN0aW9uKCl7cmV0dXJuIFN0fSl9LFB0PVByb21pc2UucmVzb2x2ZShu
dWxsKSxTdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMpfHx0
aGlzO3JldHVybiByLl9zdWJtaXR0ZWQ9ITEsci5uZ1N1Ym1pdD1uZXcgai5WLHIuZm9ybT1uZXcg
RXQoe30sRShlKSxPKG4pKSxyfXJldHVybiBNLmEoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHko
ZS5wcm90b3R5cGUsInN1Ym1pdHRlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdWJt
aXR0ZWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3Bl
cnR5KGUucHJvdG90eXBlLCJmb3JtRGlyZWN0aXZlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRo
aXN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5
KGUucHJvdG90eXBlLCJjb250cm9sIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZm9ybX0s
ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5w
cm90b3R5cGUsInBhdGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sZW51bWVyYWJsZTohMCxj
b25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImNvbnRy
b2xzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZm9ybS5jb250cm9sc30sZW51bWVyYWJs
ZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5hZGRDb250cm9sPWZ1bmN0aW9uKHQp
e3ZhciBlPXRoaXM7UHQudGhlbihmdW5jdGlvbigpe3ZhciBuPWUuX2ZpbmRDb250YWluZXIodC5w
YXRoKTt0Ll9jb250cm9sPW4ucmVnaXN0ZXJDb250cm9sKHQubmFtZSx0LmNvbnRyb2wpLHYodC5j
b250cm9sLHQpLHQuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9
KX0pfSxlLnByb3RvdHlwZS5nZXRDb250cm9sPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmZvcm0u
Z2V0KHQucGF0aCl9LGUucHJvdG90eXBlLnJlbW92ZUNvbnRyb2w9ZnVuY3Rpb24odCl7dmFyIGU9
dGhpcztQdC50aGVuKGZ1bmN0aW9uKCl7dmFyIG49ZS5fZmluZENvbnRhaW5lcih0LnBhdGgpO24m
Jm4ucmVtb3ZlQ29udHJvbCh0Lm5hbWUpfSl9LGUucHJvdG90eXBlLmFkZEZvcm1Hcm91cD1mdW5j
dGlvbih0KXt2YXIgZT10aGlzO1B0LnRoZW4oZnVuY3Rpb24oKXt2YXIgbj1lLl9maW5kQ29udGFp
bmVyKHQucGF0aCkscj1uZXcgRXQoe30pO2Iocix0KSxuLnJlZ2lzdGVyQ29udHJvbCh0Lm5hbWUs
ciksci51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX0pfSxlLnByb3RvdHlw
ZS5yZW1vdmVGb3JtR3JvdXA9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztQdC50aGVuKGZ1bmN0aW9u
KCl7dmFyIG49ZS5fZmluZENvbnRhaW5lcih0LnBhdGgpO24mJm4ucmVtb3ZlQ29udHJvbCh0Lm5h
bWUpfSl9LGUucHJvdG90eXBlLmdldEZvcm1Hcm91cD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5m
b3JtLmdldCh0LnBhdGgpfSxlLnByb3RvdHlwZS51cGRhdGVNb2RlbD1mdW5jdGlvbih0LGUpe3Zh
ciBuPXRoaXM7UHQudGhlbihmdW5jdGlvbigpe24uZm9ybS5nZXQodC5wYXRoKS5zZXRWYWx1ZShl
KX0pfSxlLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbih0KXt0aGlzLmNvbnRyb2wuc2V0VmFs
dWUodCl9LGUucHJvdG90eXBlLm9uU3VibWl0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9zdWJt
aXR0ZWQ9ITAsdGhpcy5uZ1N1Ym1pdC5lbWl0KHQpLCExfSxlLnByb3RvdHlwZS5vblJlc2V0PWZ1
bmN0aW9uKCl7dGhpcy5yZXNldEZvcm0oKX0sZS5wcm90b3R5cGUucmVzZXRGb3JtPWZ1bmN0aW9u
KHQpe3ZvaWQgMD09PXQmJih0PXZvaWQgMCksdGhpcy5mb3JtLnJlc2V0KHQpLHRoaXMuX3N1Ym1p
dHRlZD0hMX0sZS5wcm90b3R5cGUuX2ZpbmRDb250YWluZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQu
cG9wKCksdC5sZW5ndGg/dGhpcy5mb3JtLmdldCh0KTp0aGlzLmZvcm19LGV9KEwpO1N0LmRlY29y
YXRvcnM9W3t0eXBlOmouWSxhcmdzOlt7c2VsZWN0b3I6ImZvcm06bm90KFtuZ05vRm9ybV0pOm5v
dChbZm9ybUdyb3VwXSksbmdGb3JtLFtuZ0Zvcm1dIixwcm92aWRlcnM6W3h0XSxob3N0OnsiKHN1
Ym1pdCkiOiJvblN1Ym1pdCgkZXZlbnQpIiwiKHJlc2V0KSI6Im9uUmVzZXQoKSJ9LG91dHB1dHM6
WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOiJuZ0Zvcm0ifV19XSxTdC5jdG9yUGFyYW1ldGVycz1mdW5j
dGlvbigpe3JldHVyblt7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpqLkx9LHt0eXBlOmou
XzE0fSx7dHlwZTpqLkgsYXJnczpbQl19XX0se3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6
ai5MfSx7dHlwZTpqLl8xNH0se3R5cGU6ai5ILGFyZ3M6W1VdfV19XX07LyoqCisgKiBAbGljZW5z
ZQorICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICog
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKyAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9h
bmd1bGFyLmlvL2xpY2Vuc2UKKyAqLwordmFyIEF0PXtmb3JtQ29udHJvbE5hbWU6J1xuICAgIDxk
aXYgW2Zvcm1Hcm91cF09Im15R3JvdXAiPlxuICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT0i
Zmlyc3ROYW1lIj5cbiAgICA8L2Rpdj5cblxuICAgIEluIHlvdXIgY2xhc3M6XG5cbiAgICB0aGlz
Lm15R3JvdXAgPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgICBmaXJzdE5hbWU6IG5ldyBGb3JtQ29u
dHJvbCgpXG4gICAgfSk7Jyxmb3JtR3JvdXBOYW1lOidcbiAgICA8ZGl2IFtmb3JtR3JvdXBdPSJt
eUdyb3VwIj5cbiAgICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9InBlcnNvbiI+XG4gICAgICAgICAg
PGlucHV0IGZvcm1Db250cm9sTmFtZT0iZmlyc3ROYW1lIj5cbiAgICAgICA8L2Rpdj5cbiAgICA8
L2Rpdj5cblxuICAgIEluIHlvdXIgY2xhc3M6XG5cbiAgICB0aGlzLm15R3JvdXAgPSBuZXcgRm9y
bUdyb3VwKHtcbiAgICAgICBwZXJzb246IG5ldyBGb3JtR3JvdXAoeyBmaXJzdE5hbWU6IG5ldyBG
b3JtQ29udHJvbCgpIH0pXG4gICAgfSk7Jyxmb3JtQXJyYXlOYW1lOidcbiAgICA8ZGl2IFtmb3Jt
R3JvdXBdPSJteUdyb3VwIj5cbiAgICAgIDxkaXYgZm9ybUFycmF5TmFtZT0iY2l0aWVzIj5cbiAg
ICAgICAgPGRpdiAqbmdGb3I9ImxldCBjaXR5IG9mIGNpdHlBcnJheS5jb250cm9sczsgaW5kZXgg
YXMgaSI+XG4gICAgICAgICAgPGlucHV0IFtmb3JtQ29udHJvbE5hbWVdPSJpIj5cbiAgICAgICAg
PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIEluIHlvdXIgY2xhc3M6XG5c
biAgICB0aGlzLmNpdHlBcnJheSA9IG5ldyBGb3JtQXJyYXkoW25ldyBGb3JtQ29udHJvbChcJ1NG
XCcpXSk7XG4gICAgdGhpcy5teUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICBjaXRpZXM6
IHRoaXMuY2l0eUFycmF5XG4gICAgfSk7JyxuZ01vZGVsR3JvdXA6J1xuICAgIDxmb3JtPlxuICAg
ICAgIDxkaXYgbmdNb2RlbEdyb3VwPSJwZXJzb24iPlxuICAgICAgICAgIDxpbnB1dCBbKG5nTW9k
ZWwpXT0icGVyc29uLm5hbWUiIG5hbWU9ImZpcnN0TmFtZSI+XG4gICAgICAgPC9kaXY+XG4gICAg
PC9mb3JtPicsbmdNb2RlbFdpdGhGb3JtR3JvdXA6J1xuICAgIDxkaXYgW2Zvcm1Hcm91cF09Im15
R3JvdXAiPlxuICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9ImZpcnN0TmFtZSI+XG4gICAg
ICAgPGlucHV0IFsobmdNb2RlbCldPSJzaG93TW9yZUNvbnRyb2xzIiBbbmdNb2RlbE9wdGlvbnNd
PSJ7c3RhbmRhbG9uZTogdHJ1ZX0iPlxuICAgIDwvZGl2PlxuICAnfSxUdD1mdW5jdGlvbigpe2Z1
bmN0aW9uIHQoKXt9cmV0dXJuIHQubW9kZWxQYXJlbnRFeGNlcHRpb249ZnVuY3Rpb24oKXt0aHJv
dyBuZXcgRXJyb3IoJ1xuICAgICAgbmdNb2RlbCBjYW5ub3QgYmUgdXNlZCB0byByZWdpc3RlciBm
b3JtIGNvbnRyb2xzIHdpdGggYSBwYXJlbnQgZm9ybUdyb3VwIGRpcmVjdGl2ZS4gIFRyeSB1c2lu
Z1xuICAgICAgZm9ybUdyb3VwXCdzIHBhcnRuZXIgZGlyZWN0aXZlICJmb3JtQ29udHJvbE5hbWUi
IGluc3RlYWQuICBFeGFtcGxlOlxuXG4gICAgICAnK0F0LmZvcm1Db250cm9sTmFtZSsiXG5cbiAg
ICAgIE9yLCBpZiB5b3UnZCBsaWtlIHRvIGF2b2lkIHJlZ2lzdGVyaW5nIHRoaXMgZm9ybSBjb250
cm9sLCBpbmRpY2F0ZSB0aGF0IGl0J3Mgc3RhbmRhbG9uZSBpbiBuZ01vZGVsT3B0aW9uczpcblxu
ICAgICAgRXhhbXBsZTpcblxuICAgICAgIitBdC5uZ01vZGVsV2l0aEZvcm1Hcm91cCl9LHQuZm9y
bUdyb3VwTmFtZUV4Y2VwdGlvbj1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiXG4gICAgICBu
Z01vZGVsIGNhbm5vdCBiZSB1c2VkIHRvIHJlZ2lzdGVyIGZvcm0gY29udHJvbHMgd2l0aCBhIHBh
cmVudCBmb3JtR3JvdXBOYW1lIG9yIGZvcm1BcnJheU5hbWUgZGlyZWN0aXZlLlxuXG4gICAgICBP
cHRpb24gMTogVXNlIGZvcm1Db250cm9sTmFtZSBpbnN0ZWFkIG9mIG5nTW9kZWwgKHJlYWN0aXZl
IHN0cmF0ZWd5KTpcblxuICAgICAgIitBdC5mb3JtR3JvdXBOYW1lKyJcblxuICAgICAgT3B0aW9u
IDI6ICBVcGRhdGUgbmdNb2RlbCdzIHBhcmVudCBiZSBuZ01vZGVsR3JvdXAgKHRlbXBsYXRlLWRy
aXZlbiBzdHJhdGVneSk6XG5cbiAgICAgICIrQXQubmdNb2RlbEdyb3VwKX0sdC5taXNzaW5nTmFt
ZUV4Y2VwdGlvbj1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcignSWYgbmdNb2RlbCBpcyB1c2Vk
IHdpdGhpbiBhIGZvcm0gdGFnLCBlaXRoZXIgdGhlIG5hbWUgYXR0cmlidXRlIG11c3QgYmUgc2V0
IG9yIHRoZSBmb3JtXG4gICAgICBjb250cm9sIG11c3QgYmUgZGVmaW5lZCBhcyBcJ3N0YW5kYWxv
bmVcJyBpbiBuZ01vZGVsT3B0aW9ucy5cblxuICAgICAgRXhhbXBsZSAxOiA8aW5wdXQgWyhuZ01v
ZGVsKV09InBlcnNvbi5maXJzdE5hbWUiIG5hbWU9ImZpcnN0Ij5cbiAgICAgIEV4YW1wbGUgMjog
PGlucHV0IFsobmdNb2RlbCldPSJwZXJzb24uZmlyc3ROYW1lIiBbbmdNb2RlbE9wdGlvbnNdPSJ7
c3RhbmRhbG9uZTogdHJ1ZX0iPicpfSx0Lm1vZGVsR3JvdXBQYXJlbnRFeGNlcHRpb249ZnVuY3Rp
b24oKXt0aHJvdyBuZXcgRXJyb3IoIlxuICAgICAgbmdNb2RlbEdyb3VwIGNhbm5vdCBiZSB1c2Vk
IHdpdGggYSBwYXJlbnQgZm9ybUdyb3VwIGRpcmVjdGl2ZS5cblxuICAgICAgT3B0aW9uIDE6IFVz
ZSBmb3JtR3JvdXBOYW1lIGluc3RlYWQgb2YgbmdNb2RlbEdyb3VwIChyZWFjdGl2ZSBzdHJhdGVn
eSk6XG5cbiAgICAgICIrQXQuZm9ybUdyb3VwTmFtZSsiXG5cbiAgICAgIE9wdGlvbiAyOiAgVXNl
IGEgcmVndWxhciBmb3JtIHRhZyBpbnN0ZWFkIG9mIHRoZSBmb3JtR3JvdXAgZGlyZWN0aXZlICh0
ZW1wbGF0ZS1kcml2ZW4gc3RyYXRlZ3kpOlxuXG4gICAgICAiK0F0Lm5nTW9kZWxHcm91cCl9LHR9
KCksa3Q9e3Byb3ZpZGU6TCx1c2VFeGlzdGluZzpuLmkoai5fMTEpKGZ1bmN0aW9uKCl7cmV0dXJu
IFZ0fSl9LFZ0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBvPXQuY2FsbCh0aGlz
KXx8dGhpcztyZXR1cm4gby5fcGFyZW50PWUsby5fdmFsaWRhdG9ycz1uLG8uX2FzeW5jVmFsaWRh
dG9ycz1yLG99cmV0dXJuIE0uYShlLHQpLGUucHJvdG90eXBlLl9jaGVja1BhcmVudFR5cGU9ZnVu
Y3Rpb24oKXt0aGlzLl9wYXJlbnQgaW5zdGFuY2VvZiBlfHx0aGlzLl9wYXJlbnQgaW5zdGFuY2Vv
ZiBTdHx8VHQubW9kZWxHcm91cFBhcmVudEV4Y2VwdGlvbigpfSxlfShmdCk7VnQuZGVjb3JhdG9y
cz1be3R5cGU6ai5ZLGFyZ3M6W3tzZWxlY3RvcjoiW25nTW9kZWxHcm91cF0iLHByb3ZpZGVyczpb
a3RdLGV4cG9ydEFzOiJuZ01vZGVsR3JvdXAifV19XSxWdC5jdG9yUGFyYW1ldGVycz1mdW5jdGlv
bigpe3JldHVyblt7dHlwZTpMLGRlY29yYXRvcnM6W3t0eXBlOmouXzR9LHt0eXBlOmouVX1dfSx7
dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpqLkx9LHt0eXBlOmouXzE0fSx7dHlwZTpqLkgs
YXJnczpbQl19XX0se3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6ai5MfSx7dHlwZTpqLl8x
NH0se3R5cGU6ai5ILGFyZ3M6W1VdfV19XX0sVnQucHJvcERlY29yYXRvcnM9e25hbWU6W3t0eXBl
OmouXzEsYXJnczpbIm5nTW9kZWxHcm91cCJdfV19Oy8qKgorICogQGxpY2Vuc2UKKyAqIENvcHly
aWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9s
aWNlbnNlCisgKi8KK3ZhciBOdD17cHJvdmlkZTpYLHVzZUV4aXN0aW5nOm4uaShqLl8xMSkoZnVu
Y3Rpb24oKXtyZXR1cm4ganR9KX0sTXQ9UHJvbWlzZS5yZXNvbHZlKG51bGwpLGp0PWZ1bmN0aW9u
KHQpe2Z1bmN0aW9uIGUoZSxuLHIsbyl7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBp
Ll9jb250cm9sPW5ldyBDdCxpLl9yZWdpc3RlcmVkPSExLGkudXBkYXRlPW5ldyBqLlYsaS5fcGFy
ZW50PWUsaS5fcmF3VmFsaWRhdG9ycz1ufHxbXSxpLl9yYXdBc3luY1ZhbGlkYXRvcnM9cnx8W10s
aS52YWx1ZUFjY2Vzc29yPVMoaSxvKSxpfXJldHVybiBNLmEoZSx0KSxlLnByb3RvdHlwZS5uZ09u
Q2hhbmdlcz1mdW5jdGlvbih0KXt0aGlzLl9jaGVja0ZvckVycm9ycygpLHRoaXMuX3JlZ2lzdGVy
ZWR8fHRoaXMuX3NldFVwQ29udHJvbCgpLCJpc0Rpc2FibGVkImluIHQmJnRoaXMuX3VwZGF0ZURp
c2FibGVkKHQpLHgodCx0aGlzLnZpZXdNb2RlbCkmJih0aGlzLl91cGRhdGVWYWx1ZSh0aGlzLm1v
ZGVsKSx0aGlzLnZpZXdNb2RlbD10aGlzLm1vZGVsKX0sZS5wcm90b3R5cGUubmdPbkRlc3Ryb3k9
ZnVuY3Rpb24oKXt0aGlzLmZvcm1EaXJlY3RpdmUmJnRoaXMuZm9ybURpcmVjdGl2ZS5yZW1vdmVD
b250cm9sKHRoaXMpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImNvbnRyb2wi
LHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udHJvbH0sZW51bWVyYWJsZTohMCxjb25m
aWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInBhdGgiLHtn
ZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFyZW50P2codGhpcy5uYW1lLHRoaXMuX3BhcmVu
dCk6W3RoaXMubmFtZV19LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRl
ZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmb3JtRGlyZWN0aXZlIix7Z2V0OmZ1bmN0aW9uKCl7
cmV0dXJuIHRoaXMuX3BhcmVudD90aGlzLl9wYXJlbnQuZm9ybURpcmVjdGl2ZTpudWxsfSxlbnVt
ZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3Rv
dHlwZSwidmFsaWRhdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcy5fcmF3VmFsaWRh
dG9ycyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3Bl
cnR5KGUucHJvdG90eXBlLCJhc3luY1ZhbGlkYXRvciIse2dldDpmdW5jdGlvbigpe3JldHVybiBP
KHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEw
fSksZS5wcm90b3R5cGUudmlld1RvTW9kZWxVcGRhdGU9ZnVuY3Rpb24odCl7dGhpcy52aWV3TW9k
ZWw9dCx0aGlzLnVwZGF0ZS5lbWl0KHQpfSxlLnByb3RvdHlwZS5fc2V0VXBDb250cm9sPWZ1bmN0
aW9uKCl7dGhpcy5faXNTdGFuZGFsb25lKCk/dGhpcy5fc2V0VXBTdGFuZGFsb25lKCk6dGhpcy5m
b3JtRGlyZWN0aXZlLmFkZENvbnRyb2wodGhpcyksdGhpcy5fcmVnaXN0ZXJlZD0hMH0sZS5wcm90
b3R5cGUuX2lzU3RhbmRhbG9uZT1mdW5jdGlvbigpe3JldHVybiF0aGlzLl9wYXJlbnR8fCEoIXRo
aXMub3B0aW9uc3x8IXRoaXMub3B0aW9ucy5zdGFuZGFsb25lKX0sZS5wcm90b3R5cGUuX3NldFVw
U3RhbmRhbG9uZT1mdW5jdGlvbigpe3YodGhpcy5fY29udHJvbCx0aGlzKSx0aGlzLl9jb250cm9s
LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSxlLnByb3RvdHlwZS5fY2hl
Y2tGb3JFcnJvcnM9ZnVuY3Rpb24oKXt0aGlzLl9pc1N0YW5kYWxvbmUoKXx8dGhpcy5fY2hlY2tQ
YXJlbnRUeXBlKCksdGhpcy5fY2hlY2tOYW1lKCl9LGUucHJvdG90eXBlLl9jaGVja1BhcmVudFR5
cGU9ZnVuY3Rpb24oKXshKHRoaXMuX3BhcmVudCBpbnN0YW5jZW9mIFZ0KSYmdGhpcy5fcGFyZW50
IGluc3RhbmNlb2YgZnQ/VHQuZm9ybUdyb3VwTmFtZUV4Y2VwdGlvbigpOnRoaXMuX3BhcmVudCBp
bnN0YW5jZW9mIFZ0fHx0aGlzLl9wYXJlbnQgaW5zdGFuY2VvZiBTdHx8VHQubW9kZWxQYXJlbnRF
eGNlcHRpb24oKX0sZS5wcm90b3R5cGUuX2NoZWNrTmFtZT1mdW5jdGlvbigpe3RoaXMub3B0aW9u
cyYmdGhpcy5vcHRpb25zLm5hbWUmJih0aGlzLm5hbWU9dGhpcy5vcHRpb25zLm5hbWUpLHRoaXMu
X2lzU3RhbmRhbG9uZSgpfHx0aGlzLm5hbWV8fFR0Lm1pc3NpbmdOYW1lRXhjZXB0aW9uKCl9LGUu
cHJvdG90eXBlLl91cGRhdGVWYWx1ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO010LnRoZW4oZnVu
Y3Rpb24oKXtlLmNvbnRyb2wuc2V0VmFsdWUodCx7ZW1pdFZpZXdUb01vZGVsQ2hhbmdlOiExfSl9
KX0sZS5wcm90b3R5cGUuX3VwZGF0ZURpc2FibGVkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10
LmlzRGlzYWJsZWQuY3VycmVudFZhbHVlLHI9IiI9PT1ufHxuJiYiZmFsc2UiIT09bjtNdC50aGVu
KGZ1bmN0aW9uKCl7ciYmIWUuY29udHJvbC5kaXNhYmxlZD9lLmNvbnRyb2wuZGlzYWJsZSgpOiFy
JiZlLmNvbnRyb2wuZGlzYWJsZWQmJmUuY29udHJvbC5lbmFibGUoKX0pfSxlfShYKTtqdC5kZWNv
cmF0b3JzPVt7dHlwZTpqLlksYXJnczpbe3NlbGVjdG9yOiJbbmdNb2RlbF06bm90KFtmb3JtQ29u
dHJvbE5hbWVdKTpub3QoW2Zvcm1Db250cm9sXSkiLHByb3ZpZGVyczpbTnRdLGV4cG9ydEFzOiJu
Z01vZGVsIn1dfV0sanQuY3RvclBhcmFtZXRlcnM9ZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6TCxk
ZWNvcmF0b3JzOlt7dHlwZTpqLkx9LHt0eXBlOmouXzR9XX0se3R5cGU6QXJyYXksZGVjb3JhdG9y
czpbe3R5cGU6ai5MfSx7dHlwZTpqLl8xNH0se3R5cGU6ai5ILGFyZ3M6W0JdfV19LHt0eXBlOkFy
cmF5LGRlY29yYXRvcnM6W3t0eXBlOmouTH0se3R5cGU6ai5fMTR9LHt0eXBlOmouSCxhcmdzOltV
XX1dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpqLkx9LHt0eXBlOmouXzE0fSx7dHlw
ZTpqLkgsYXJnczpbel19XX1dfSxqdC5wcm9wRGVjb3JhdG9ycz17bmFtZTpbe3R5cGU6ai5fMX1d
LGlzRGlzYWJsZWQ6W3t0eXBlOmouXzEsYXJnczpbImRpc2FibGVkIl19XSxtb2RlbDpbe3R5cGU6
ai5fMSxhcmdzOlsibmdNb2RlbCJdfV0sb3B0aW9uczpbe3R5cGU6ai5fMSxhcmdzOlsibmdNb2Rl
bE9wdGlvbnMiXX1dLHVwZGF0ZTpbe3R5cGU6ai5fMTUsYXJnczpbIm5nTW9kZWxDaGFuZ2UiXX1d
fTsvKioKKyAqIEBsaWNlbnNlCisgKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqCisgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
biBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorICogZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQorICovCit2YXIgUnQ9ZnVuY3Rpb24o
KXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LmNvbnRyb2xQYXJlbnRFeGNlcHRpb249ZnVuY3Rpb24o
KXt0aHJvdyBuZXcgRXJyb3IoImZvcm1Db250cm9sTmFtZSBtdXN0IGJlIHVzZWQgd2l0aCBhIHBh
cmVudCBmb3JtR3JvdXAgZGlyZWN0aXZlLiAgWW91J2xsIHdhbnQgdG8gYWRkIGEgZm9ybUdyb3Vw
XG4gICAgICAgZGlyZWN0aXZlIGFuZCBwYXNzIGl0IGFuIGV4aXN0aW5nIEZvcm1Hcm91cCBpbnN0
YW5jZSAoeW91IGNhbiBjcmVhdGUgb25lIGluIHlvdXIgY2xhc3MpLlxuXG4gICAgICBFeGFtcGxl
OlxuXG4gICAgICAiK0F0LmZvcm1Db250cm9sTmFtZSl9LHQubmdNb2RlbEdyb3VwRXhjZXB0aW9u
PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCdmb3JtQ29udHJvbE5hbWUgY2Fubm90IGJlIHVz
ZWQgd2l0aCBhbiBuZ01vZGVsR3JvdXAgcGFyZW50LiBJdCBpcyBvbmx5IGNvbXBhdGlibGUgd2l0
aCBwYXJlbnRzXG4gICAgICAgdGhhdCBhbHNvIGhhdmUgYSAiZm9ybSIgcHJlZml4OiBmb3JtR3Jv
dXBOYW1lLCBmb3JtQXJyYXlOYW1lLCBvciBmb3JtR3JvdXAuXG5cbiAgICAgICBPcHRpb24gMTog
IFVwZGF0ZSB0aGUgcGFyZW50IHRvIGJlIGZvcm1Hcm91cE5hbWUgKHJlYWN0aXZlIGZvcm0gc3Ry
YXRlZ3kpXG5cbiAgICAgICAgJytBdC5mb3JtR3JvdXBOYW1lKyJcblxuICAgICAgICBPcHRpb24g
MjogVXNlIG5nTW9kZWwgaW5zdGVhZCBvZiBmb3JtQ29udHJvbE5hbWUgKHRlbXBsYXRlLWRyaXZl
biBzdHJhdGVneSlcblxuICAgICAgICAiK0F0Lm5nTW9kZWxHcm91cCl9LHQubWlzc2luZ0Zvcm1F
eGNlcHRpb249ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoImZvcm1Hcm91cCBleHBlY3RzIGEg
Rm9ybUdyb3VwIGluc3RhbmNlLiBQbGVhc2UgcGFzcyBvbmUgaW4uXG5cbiAgICAgICBFeGFtcGxl
OlxuXG4gICAgICAgIitBdC5mb3JtQ29udHJvbE5hbWUpfSx0Lmdyb3VwUGFyZW50RXhjZXB0aW9u
PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJmb3JtR3JvdXBOYW1lIG11c3QgYmUgdXNlZCB3
aXRoIGEgcGFyZW50IGZvcm1Hcm91cCBkaXJlY3RpdmUuICBZb3UnbGwgd2FudCB0byBhZGQgYSBm
b3JtR3JvdXBcbiAgICAgIGRpcmVjdGl2ZSBhbmQgcGFzcyBpdCBhbiBleGlzdGluZyBGb3JtR3Jv
dXAgaW5zdGFuY2UgKHlvdSBjYW4gY3JlYXRlIG9uZSBpbiB5b3VyIGNsYXNzKS5cblxuICAgICAg
RXhhbXBsZTpcblxuICAgICAgIitBdC5mb3JtR3JvdXBOYW1lKX0sdC5hcnJheVBhcmVudEV4Y2Vw
dGlvbj1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiZm9ybUFycmF5TmFtZSBtdXN0IGJlIHVz
ZWQgd2l0aCBhIHBhcmVudCBmb3JtR3JvdXAgZGlyZWN0aXZlLiAgWW91J2xsIHdhbnQgdG8gYWRk
IGEgZm9ybUdyb3VwXG4gICAgICAgZGlyZWN0aXZlIGFuZCBwYXNzIGl0IGFuIGV4aXN0aW5nIEZv
cm1Hcm91cCBpbnN0YW5jZSAoeW91IGNhbiBjcmVhdGUgb25lIGluIHlvdXIgY2xhc3MpLlxuXG4g
ICAgICAgIEV4YW1wbGU6XG5cbiAgICAgICAgIitBdC5mb3JtQXJyYXlOYW1lKX0sdC5kaXNhYmxl
ZEF0dHJXYXJuaW5nPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJcbiAgICAgIEl0IGxvb2tzIGxp
a2UgeW91J3JlIHVzaW5nIHRoZSBkaXNhYmxlZCBhdHRyaWJ1dGUgd2l0aCBhIHJlYWN0aXZlIGZv
cm0gZGlyZWN0aXZlLiBJZiB5b3Ugc2V0IGRpc2FibGVkIHRvIHRydWVcbiAgICAgIHdoZW4geW91
IHNldCB1cCB0aGlzIGNvbnRyb2wgaW4geW91ciBjb21wb25lbnQgY2xhc3MsIHRoZSBkaXNhYmxl
ZCBhdHRyaWJ1dGUgd2lsbCBhY3R1YWxseSBiZSBzZXQgaW4gdGhlIERPTSBmb3JcbiAgICAgIHlv
dS4gV2UgcmVjb21tZW5kIHVzaW5nIHRoaXMgYXBwcm9hY2ggdG8gYXZvaWQgJ2NoYW5nZWQgYWZ0
ZXIgY2hlY2tlZCcgZXJyb3JzLlxuICAgICAgIFxuICAgICAgRXhhbXBsZTogXG4gICAgICBmb3Jt
ID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICAgIGZpcnN0OiBuZXcgRm9ybUNvbnRyb2woe3ZhbHVl
OiAnTmFuY3knLCBkaXNhYmxlZDogdHJ1ZX0sIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgICAg
ICBsYXN0OiBuZXcgRm9ybUNvbnRyb2woJ0RyZXcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKVxuICAg
ICAgfSk7XG4gICAgIil9LHR9KCksRHQ9e3Byb3ZpZGU6WCx1c2VFeGlzdGluZzpuLmkoai5fMTEp
KGZ1bmN0aW9uKCl7cmV0dXJuIEl0fSl9LEl0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIp
e3ZhciBvPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gby51cGRhdGU9bmV3IGouVixvLl9yYXdW
YWxpZGF0b3JzPWV8fFtdLG8uX3Jhd0FzeW5jVmFsaWRhdG9ycz1ufHxbXSxvLnZhbHVlQWNjZXNz
b3I9UyhvLHIpLG99cmV0dXJuIE0uYShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3Rv
dHlwZSwiaXNEaXNhYmxlZCIse3NldDpmdW5jdGlvbih0KXtSdC5kaXNhYmxlZEF0dHJXYXJuaW5n
KCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUubmdPbkNoYW5n
ZXM9ZnVuY3Rpb24odCl7dGhpcy5faXNDb250cm9sQ2hhbmdlZCh0KSYmKHYodGhpcy5mb3JtLHRo
aXMpLHRoaXMuY29udHJvbC5kaXNhYmxlZCYmdGhpcy52YWx1ZUFjY2Vzc29yLnNldERpc2FibGVk
U3RhdGUmJnRoaXMudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlKCEwKSx0aGlzLmZvcm0u
dXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSkpLHgodCx0aGlzLnZpZXdNb2Rl
bCkmJih0aGlzLmZvcm0uc2V0VmFsdWUodGhpcy5tb2RlbCksdGhpcy52aWV3TW9kZWw9dGhpcy5t
b2RlbCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwicGF0aCIse2dldDpmdW5j
dGlvbigpe3JldHVybltdfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwidmFsaWRhdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0
dXJuIEUodGhpcy5fcmF3VmFsaWRhdG9ycyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEw
fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhc3luY1ZhbGlkYXRvciIse2dl
dDpmdW5jdGlvbigpe3JldHVybiBPKHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycyl9LGVudW1lcmFi
bGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBl
LCJjb250cm9sIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZm9ybX0sZW51bWVyYWJsZToh
MCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS52aWV3VG9Nb2RlbFVwZGF0ZT1mdW5jdGlv
bih0KXt0aGlzLnZpZXdNb2RlbD10LHRoaXMudXBkYXRlLmVtaXQodCl9LGUucHJvdG90eXBlLl9p
c0NvbnRyb2xDaGFuZ2VkPWZ1bmN0aW9uKHQpe3JldHVybiB0Lmhhc093blByb3BlcnR5KCJmb3Jt
Iil9LGV9KFgpO0l0LmRlY29yYXRvcnM9W3t0eXBlOmouWSxhcmdzOlt7c2VsZWN0b3I6Iltmb3Jt
Q29udHJvbF0iLHByb3ZpZGVyczpbRHRdLGV4cG9ydEFzOiJuZ0Zvcm0ifV19XSxJdC5jdG9yUGFy
YW1ldGVycz1mdW5jdGlvbigpe3JldHVyblt7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpq
Lkx9LHt0eXBlOmouXzE0fSx7dHlwZTpqLkgsYXJnczpbQl19XX0se3R5cGU6QXJyYXksZGVjb3Jh
dG9yczpbe3R5cGU6ai5MfSx7dHlwZTpqLl8xNH0se3R5cGU6ai5ILGFyZ3M6W1VdfV19LHt0eXBl
OkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOmouTH0se3R5cGU6ai5fMTR9LHt0eXBlOmouSCxhcmdz
Olt6XX1dfV19LEl0LnByb3BEZWNvcmF0b3JzPXtmb3JtOlt7dHlwZTpqLl8xLGFyZ3M6WyJmb3Jt
Q29udHJvbCJdfV0sbW9kZWw6W3t0eXBlOmouXzEsYXJnczpbIm5nTW9kZWwiXX1dLHVwZGF0ZTpb
e3R5cGU6ai5fMTUsYXJnczpbIm5nTW9kZWxDaGFuZ2UiXX1dLGlzRGlzYWJsZWQ6W3t0eXBlOmou
XzEsYXJnczpbImRpc2FibGVkIl19XX07LyoqCisgKiBAbGljZW5zZQorICogQ29weXJpZ2h0IEdv
b2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyAq
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UK
KyAqLwordmFyIEZ0PXtwcm92aWRlOkwsdXNlRXhpc3Rpbmc6bi5pKGouXzExKShmdW5jdGlvbigp
e3JldHVybiBIdH0pfSxIdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxs
KHRoaXMpfHx0aGlzO3JldHVybiByLl92YWxpZGF0b3JzPWUsci5fYXN5bmNWYWxpZGF0b3JzPW4s
ci5fc3VibWl0dGVkPSExLHIuZGlyZWN0aXZlcz1bXSxyLmZvcm09bnVsbCxyLm5nU3VibWl0PW5l
dyBqLlYscn1yZXR1cm4gTS5hKGUsdCksZS5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24o
dCl7dGhpcy5fY2hlY2tGb3JtUHJlc2VudCgpLHQuaGFzT3duUHJvcGVydHkoImZvcm0iKSYmKHRo
aXMuX3VwZGF0ZVZhbGlkYXRvcnMoKSx0aGlzLl91cGRhdGVEb21WYWx1ZSgpLHRoaXMuX3VwZGF0
ZVJlZ2lzdHJhdGlvbnMoKSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwic3Vi
bWl0dGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N1Ym1pdHRlZH0sZW51bWVyYWJs
ZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUs
ImZvcm1EaXJlY3RpdmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZW51bWVyYWJsZToh
MCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImNv
bnRyb2wiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mb3JtfSxlbnVtZXJhYmxlOiEwLGNv
bmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwicGF0aCIs
e2dldDpmdW5jdGlvbigpe3JldHVybltdfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0p
LGUucHJvdG90eXBlLmFkZENvbnRyb2w9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5mb3JtLmdldCh0
LnBhdGgpO3JldHVybiB2KGUsdCksZS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6
ITF9KSx0aGlzLmRpcmVjdGl2ZXMucHVzaCh0KSxlfSxlLnByb3RvdHlwZS5nZXRDb250cm9sPWZ1
bmN0aW9uKHQpe3JldHVybiB0aGlzLmZvcm0uZ2V0KHQucGF0aCl9LGUucHJvdG90eXBlLnJlbW92
ZUNvbnRyb2w9ZnVuY3Rpb24odCl7Vih0aGlzLmRpcmVjdGl2ZXMsdCl9LGUucHJvdG90eXBlLmFk
ZEZvcm1Hcm91cD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZvcm0uZ2V0KHQucGF0aCk7YihlLHQp
LGUudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9LGUucHJvdG90eXBlLnJl
bW92ZUZvcm1Hcm91cD1mdW5jdGlvbih0KXt9LGUucHJvdG90eXBlLmdldEZvcm1Hcm91cD1mdW5j
dGlvbih0KXtyZXR1cm4gdGhpcy5mb3JtLmdldCh0LnBhdGgpfSxlLnByb3RvdHlwZS5hZGRGb3Jt
QXJyYXk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5mb3JtLmdldCh0LnBhdGgpO2IoZSx0KSxlLnVw
ZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSxlLnByb3RvdHlwZS5yZW1vdmVG
b3JtQXJyYXk9ZnVuY3Rpb24odCl7fSxlLnByb3RvdHlwZS5nZXRGb3JtQXJyYXk9ZnVuY3Rpb24o
dCl7cmV0dXJuIHRoaXMuZm9ybS5nZXQodC5wYXRoKX0sZS5wcm90b3R5cGUudXBkYXRlTW9kZWw9
ZnVuY3Rpb24odCxlKXt0aGlzLmZvcm0uZ2V0KHQucGF0aCkuc2V0VmFsdWUoZSl9LGUucHJvdG90
eXBlLm9uU3VibWl0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9zdWJtaXR0ZWQ9ITAsdGhpcy5u
Z1N1Ym1pdC5lbWl0KHQpLCExfSxlLnByb3RvdHlwZS5vblJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5y
ZXNldEZvcm0oKX0sZS5wcm90b3R5cGUucmVzZXRGb3JtPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQm
Jih0PXZvaWQgMCksdGhpcy5mb3JtLnJlc2V0KHQpLHRoaXMuX3N1Ym1pdHRlZD0hMX0sZS5wcm90
b3R5cGUuX3VwZGF0ZURvbVZhbHVlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmRpcmVjdGl2
ZXMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbj10LmZvcm0uZ2V0KGUucGF0aCk7ZS5fY29udHJv
bCE9PW4mJihfKGUuX2NvbnRyb2wsZSksbiYmdihuLGUpLGUuX2NvbnRyb2w9bil9KSx0aGlzLmZv
cm0uX3VwZGF0ZVRyZWVWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9LGUucHJvdG90eXBlLl91cGRh
dGVSZWdpc3RyYXRpb25zPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmZvcm0uX3JlZ2lzdGVy
T25Db2xsZWN0aW9uQ2hhbmdlKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX3VwZGF0ZURvbVZhbHVlKCl9
KSx0aGlzLl9vbGRGb3JtJiZ0aGlzLl9vbGRGb3JtLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5n
ZShmdW5jdGlvbigpe30pLHRoaXMuX29sZEZvcm09dGhpcy5mb3JtfSxlLnByb3RvdHlwZS5fdXBk
YXRlVmFsaWRhdG9ycz1mdW5jdGlvbigpe3ZhciB0PUUodGhpcy5fdmFsaWRhdG9ycyk7dGhpcy5m
b3JtLnZhbGlkYXRvcj1xLmNvbXBvc2UoW3RoaXMuZm9ybS52YWxpZGF0b3IsdF0pO3ZhciBlPU8o
dGhpcy5fYXN5bmNWYWxpZGF0b3JzKTt0aGlzLmZvcm0uYXN5bmNWYWxpZGF0b3I9cS5jb21wb3Nl
QXN5bmMoW3RoaXMuZm9ybS5hc3luY1ZhbGlkYXRvcixlXSl9LGUucHJvdG90eXBlLl9jaGVja0Zv
cm1QcmVzZW50PWZ1bmN0aW9uKCl7dGhpcy5mb3JtfHxSdC5taXNzaW5nRm9ybUV4Y2VwdGlvbigp
fSxlfShMKTtIdC5kZWNvcmF0b3JzPVt7dHlwZTpqLlksYXJnczpbe3NlbGVjdG9yOiJbZm9ybUdy
b3VwXSIscHJvdmlkZXJzOltGdF0saG9zdDp7IihzdWJtaXQpIjoib25TdWJtaXQoJGV2ZW50KSIs
IihyZXNldCkiOiJvblJlc2V0KCkifSxleHBvcnRBczoibmdGb3JtIn1dfV0sSHQuY3RvclBhcmFt
ZXRlcnM9ZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6ai5M
fSx7dHlwZTpqLl8xNH0se3R5cGU6ai5ILGFyZ3M6W0JdfV19LHt0eXBlOkFycmF5LGRlY29yYXRv
cnM6W3t0eXBlOmouTH0se3R5cGU6ai5fMTR9LHt0eXBlOmouSCxhcmdzOltVXX1dfV19LEh0LnBy
b3BEZWNvcmF0b3JzPXtmb3JtOlt7dHlwZTpqLl8xLGFyZ3M6WyJmb3JtR3JvdXAiXX1dLG5nU3Vi
bWl0Olt7dHlwZTpqLl8xNX1dfTsvKioKKyAqIEBsaWNlbnNlCisgKiBDb3B5cmlnaHQgR29vZ2xl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorICogZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQorICov
Cit2YXIgTHQ9e3Byb3ZpZGU6TCx1c2VFeGlzdGluZzpuLmkoai5fMTEpKGZ1bmN0aW9uKCl7cmV0
dXJuIEJ0fSl9LEJ0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBvPXQuY2FsbCh0
aGlzKXx8dGhpcztyZXR1cm4gby5fcGFyZW50PWUsby5fdmFsaWRhdG9ycz1uLG8uX2FzeW5jVmFs
aWRhdG9ycz1yLG99cmV0dXJuIE0uYShlLHQpLGUucHJvdG90eXBlLl9jaGVja1BhcmVudFR5cGU9
ZnVuY3Rpb24oKXtOKHRoaXMuX3BhcmVudCkmJlJ0Lmdyb3VwUGFyZW50RXhjZXB0aW9uKCl9LGV9
KGZ0KTtCdC5kZWNvcmF0b3JzPVt7dHlwZTpqLlksYXJnczpbe3NlbGVjdG9yOiJbZm9ybUdyb3Vw
TmFtZV0iLHByb3ZpZGVyczpbTHRdfV19XSxCdC5jdG9yUGFyYW1ldGVycz1mdW5jdGlvbigpe3Jl
dHVyblt7dHlwZTpMLGRlY29yYXRvcnM6W3t0eXBlOmouTH0se3R5cGU6ai5fNH0se3R5cGU6ai5V
fV19LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOmouTH0se3R5cGU6ai5fMTR9LHt0eXBl
OmouSCxhcmdzOltCXX1dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpqLkx9LHt0eXBl
OmouXzE0fSx7dHlwZTpqLkgsYXJnczpbVV19XX1dfSxCdC5wcm9wRGVjb3JhdG9ycz17bmFtZTpb
e3R5cGU6ai5fMSxhcmdzOlsiZm9ybUdyb3VwTmFtZSJdfV19O3ZhciBVdD17cHJvdmlkZTpMLHVz
ZUV4aXN0aW5nOm4uaShqLl8xMSkoZnVuY3Rpb24oKXtyZXR1cm4gR3R9KX0sR3Q9ZnVuY3Rpb24o
dCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIG89dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBvLl9w
YXJlbnQ9ZSxvLl92YWxpZGF0b3JzPW4sby5fYXN5bmNWYWxpZGF0b3JzPXIsb31yZXR1cm4gTS5h
KGUsdCksZS5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt0aGlzLl9jaGVja1BhcmVudFR5
cGUoKSx0aGlzLmZvcm1EaXJlY3RpdmUuYWRkRm9ybUFycmF5KHRoaXMpfSxlLnByb3RvdHlwZS5u
Z09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuZm9ybURpcmVjdGl2ZSYmdGhpcy5mb3JtRGlyZWN0
aXZlLnJlbW92ZUZvcm1BcnJheSh0aGlzKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90
eXBlLCJjb250cm9sIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZm9ybURpcmVjdGl2ZS5n
ZXRGb3JtQXJyYXkodGhpcyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0
LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmb3JtRGlyZWN0aXZlIix7Z2V0OmZ1bmN0aW9u
KCl7cmV0dXJuIHRoaXMuX3BhcmVudD90aGlzLl9wYXJlbnQuZm9ybURpcmVjdGl2ZTpudWxsfSxl
bnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnBy
b3RvdHlwZSwicGF0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiBnKHRoaXMubmFtZSx0aGlzLl9w
YXJlbnQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShlLnByb3RvdHlwZSwidmFsaWRhdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEUodGhp
cy5fdmFsaWRhdG9ycyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRl
ZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhc3luY1ZhbGlkYXRvciIse2dldDpmdW5jdGlvbigp
e3JldHVybiBPKHRoaXMuX2FzeW5jVmFsaWRhdG9ycyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJh
YmxlOiEwfSksZS5wcm90b3R5cGUuX2NoZWNrUGFyZW50VHlwZT1mdW5jdGlvbigpe04odGhpcy5f
cGFyZW50KSYmUnQuYXJyYXlQYXJlbnRFeGNlcHRpb24oKX0sZX0oTCk7R3QuZGVjb3JhdG9ycz1b
e3R5cGU6ai5ZLGFyZ3M6W3tzZWxlY3RvcjoiW2Zvcm1BcnJheU5hbWVdIixwcm92aWRlcnM6W1V0
XX1dfV0sR3QuY3RvclBhcmFtZXRlcnM9ZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6TCxkZWNvcmF0
b3JzOlt7dHlwZTpqLkx9LHt0eXBlOmouXzR9LHt0eXBlOmouVX1dfSx7dHlwZTpBcnJheSxkZWNv
cmF0b3JzOlt7dHlwZTpqLkx9LHt0eXBlOmouXzE0fSx7dHlwZTpqLkgsYXJnczpbQl19XX0se3R5
cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6ai5MfSx7dHlwZTpqLl8xNH0se3R5cGU6ai5ILGFy
Z3M6W1VdfV19XX0sR3QucHJvcERlY29yYXRvcnM9e25hbWU6W3t0eXBlOmouXzEsYXJnczpbImZv
cm1BcnJheU5hbWUiXX1dfTsvKioKKyAqIEBsaWNlbnNlCisgKiBDb3B5cmlnaHQgR29vZ2xlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorICogZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQorICovCit2
YXIgcXQ9e3Byb3ZpZGU6WCx1c2VFeGlzdGluZzpuLmkoai5fMTEpKGZ1bmN0aW9uKCl7cmV0dXJu
IHp0fSl9LHp0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsbyl7dmFyIGk9dC5jYWxsKHRo
aXMpfHx0aGlzO3JldHVybiBpLl9hZGRlZD0hMSxpLnVwZGF0ZT1uZXcgai5WLGkuX3BhcmVudD1l
LGkuX3Jhd1ZhbGlkYXRvcnM9bnx8W10saS5fcmF3QXN5bmNWYWxpZGF0b3JzPXJ8fFtdLGkudmFs
dWVBY2Nlc3Nvcj1TKGksbyksaX1yZXR1cm4gTS5hKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5
KGUucHJvdG90eXBlLCJpc0Rpc2FibGVkIix7c2V0OmZ1bmN0aW9uKHQpe1J0LmRpc2FibGVkQXR0
cldhcm5pbmcoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5u
Z09uQ2hhbmdlcz1mdW5jdGlvbih0KXt0aGlzLl9hZGRlZHx8dGhpcy5fc2V0VXBDb250cm9sKCks
eCh0LHRoaXMudmlld01vZGVsKSYmKHRoaXMudmlld01vZGVsPXRoaXMubW9kZWwsdGhpcy5mb3Jt
RGlyZWN0aXZlLnVwZGF0ZU1vZGVsKHRoaXMsdGhpcy5tb2RlbCkpfSxlLnByb3RvdHlwZS5uZ09u
RGVzdHJveT1mdW5jdGlvbigpe3RoaXMuZm9ybURpcmVjdGl2ZSYmdGhpcy5mb3JtRGlyZWN0aXZl
LnJlbW92ZUNvbnRyb2wodGhpcyl9LGUucHJvdG90eXBlLnZpZXdUb01vZGVsVXBkYXRlPWZ1bmN0
aW9uKHQpe3RoaXMudmlld01vZGVsPXQsdGhpcy51cGRhdGUuZW1pdCh0KX0sT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KGUucHJvdG90eXBlLCJwYXRoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcodGhp
cy5uYW1lLHRoaXMuX3BhcmVudCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmb3JtRGlyZWN0aXZlIix7Z2V0OmZ1bmN0
aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmVudD90aGlzLl9wYXJlbnQuZm9ybURpcmVjdGl2ZTpudWxs
fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShl
LnByb3RvdHlwZSwidmFsaWRhdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcy5fcmF3
VmFsaWRhdG9ycyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KGUucHJvdG90eXBlLCJhc3luY1ZhbGlkYXRvciIse2dldDpmdW5jdGlvbigpe3Jl
dHVybiBPKHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJh
YmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJjb250cm9sIix7Z2V0
OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRyb2x9LGVudW1lcmFibGU6ITAsY29uZmlndXJh
YmxlOiEwfSksZS5wcm90b3R5cGUuX2NoZWNrUGFyZW50VHlwZT1mdW5jdGlvbigpeyEodGhpcy5f
cGFyZW50IGluc3RhbmNlb2YgQnQpJiZ0aGlzLl9wYXJlbnQgaW5zdGFuY2VvZiBmdD9SdC5uZ01v
ZGVsR3JvdXBFeGNlcHRpb24oKTp0aGlzLl9wYXJlbnQgaW5zdGFuY2VvZiBCdHx8dGhpcy5fcGFy
ZW50IGluc3RhbmNlb2YgSHR8fHRoaXMuX3BhcmVudCBpbnN0YW5jZW9mIEd0fHxSdC5jb250cm9s
UGFyZW50RXhjZXB0aW9uKCl9LGUucHJvdG90eXBlLl9zZXRVcENvbnRyb2w9ZnVuY3Rpb24oKXt0
aGlzLl9jaGVja1BhcmVudFR5cGUoKSx0aGlzLl9jb250cm9sPXRoaXMuZm9ybURpcmVjdGl2ZS5h
ZGRDb250cm9sKHRoaXMpLHRoaXMuY29udHJvbC5kaXNhYmxlZCYmdGhpcy52YWx1ZUFjY2Vzc29y
LnNldERpc2FibGVkU3RhdGUmJnRoaXMudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlKCEw
KSx0aGlzLl9hZGRlZD0hMH0sZX0oWCk7enQuZGVjb3JhdG9ycz1be3R5cGU6ai5ZLGFyZ3M6W3tz
ZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLHByb3ZpZGVyczpbcXRdfV19XSx6dC5jdG9yUGFy
YW1ldGVycz1mdW5jdGlvbigpe3JldHVyblt7dHlwZTpMLGRlY29yYXRvcnM6W3t0eXBlOmouTH0s
e3R5cGU6ai5fNH0se3R5cGU6ai5VfV19LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOmou
TH0se3R5cGU6ai5fMTR9LHt0eXBlOmouSCxhcmdzOltCXX1dfSx7dHlwZTpBcnJheSxkZWNvcmF0
b3JzOlt7dHlwZTpqLkx9LHt0eXBlOmouXzE0fSx7dHlwZTpqLkgsYXJnczpbVV19XX0se3R5cGU6
QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6ai5MfSx7dHlwZTpqLl8xNH0se3R5cGU6ai5ILGFyZ3M6
W3pdfV19XX0senQucHJvcERlY29yYXRvcnM9e25hbWU6W3t0eXBlOmouXzEsYXJnczpbImZvcm1D
b250cm9sTmFtZSJdfV0sbW9kZWw6W3t0eXBlOmouXzEsYXJnczpbIm5nTW9kZWwiXX1dLHVwZGF0
ZTpbe3R5cGU6ai5fMTUsYXJnczpbIm5nTW9kZWxDaGFuZ2UiXX1dLGlzRGlzYWJsZWQ6W3t0eXBl
OmouXzEsYXJnczpbImRpc2FibGVkIl19XX07LyoqCisgKiBAbGljZW5zZQorICogQ29weXJpZ2h0
IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
KyAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vu
c2UKKyAqLwordmFyIFp0PXtwcm92aWRlOkIsdXNlRXhpc3Rpbmc6bi5pKGouXzExKShmdW5jdGlv
bigpe3JldHVybiBLdH0pLG11bHRpOiEwfSxZdD17cHJvdmlkZTpCLHVzZUV4aXN0aW5nOm4uaShq
Ll8xMSkoZnVuY3Rpb24oKXtyZXR1cm4gV3R9KSxtdWx0aTohMH0sS3Q9ZnVuY3Rpb24oKXtmdW5j
dGlvbiB0KCl7fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInJlcXVp
cmVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlcXVpcmVkfSxzZXQ6ZnVuY3Rpb24o
dCl7dGhpcy5fcmVxdWlyZWQ9bnVsbCE9dCYmITEhPT10JiYiIit0IT0iZmFsc2UiLHRoaXMuX29u
Q2hhbmdlJiZ0aGlzLl9vbkNoYW5nZSgpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0p
LHQucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJlcXVpcmVkP3Eu
cmVxdWlyZWQodCk6bnVsbH0sdC5wcm90b3R5cGUucmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZT1m
dW5jdGlvbih0KXt0aGlzLl9vbkNoYW5nZT10fSx0fSgpO0t0LmRlY29yYXRvcnM9W3t0eXBlOmou
WSxhcmdzOlt7c2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNv
bnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6
bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixwcm92aWRlcnM6W1p0XSxo
b3N0OnsiW2F0dHIucmVxdWlyZWRdIjoncmVxdWlyZWQgPyAiIiA6IG51bGwnfX1dfV0sS3QuY3Rv
clBhcmFtZXRlcnM9ZnVuY3Rpb24oKXtyZXR1cm5bXX0sS3QucHJvcERlY29yYXRvcnM9e3JlcXVp
cmVkOlt7dHlwZTpqLl8xfV19O3ZhciBXdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJu
IG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gTS5hKGUsdCks
ZS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVxdWlyZWQ/cS5y
ZXF1aXJlZFRydWUodCk6bnVsbH0sZX0oS3QpO1d0LmRlY29yYXRvcnM9W3t0eXBlOmouWSxhcmdz
Olt7c2VsZWN0b3I6ImlucHV0W3R5cGU9Y2hlY2tib3hdW3JlcXVpcmVkXVtmb3JtQ29udHJvbE5h
bWVdLGlucHV0W3R5cGU9Y2hlY2tib3hdW3JlcXVpcmVkXVtmb3JtQ29udHJvbF0saW5wdXRbdHlw
ZT1jaGVja2JveF1bcmVxdWlyZWRdW25nTW9kZWxdIixwcm92aWRlcnM6W1l0XSxob3N0OnsiW2F0
dHIucmVxdWlyZWRdIjoncmVxdWlyZWQgPyAiIiA6IG51bGwnfX1dfV0sV3QuY3RvclBhcmFtZXRl
cnM9ZnVuY3Rpb24oKXtyZXR1cm5bXX07dmFyIFF0PXtwcm92aWRlOkIsdXNlRXhpc3Rpbmc6bi5p
KGouXzExKShmdW5jdGlvbigpe3JldHVybiBKdH0pLG11bHRpOiEwfSxKdD1mdW5jdGlvbigpe2Z1
bmN0aW9uIHQoKXt9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZW1h
aWwiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZW5hYmxlZD0iIj09PXR8fCEwPT09dHx8InRydWUi
PT09dCx0aGlzLl9vbkNoYW5nZSYmdGhpcy5fb25DaGFuZ2UoKX0sZW51bWVyYWJsZTohMCxjb25m
aWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhp
cy5fZW5hYmxlZD9xLmVtYWlsKHQpOm51bGx9LHQucHJvdG90eXBlLnJlZ2lzdGVyT25WYWxpZGF0
b3JDaGFuZ2U9ZnVuY3Rpb24odCl7dGhpcy5fb25DaGFuZ2U9dH0sdH0oKTtKdC5kZWNvcmF0b3Jz
PVt7dHlwZTpqLlksYXJnczpbe3NlbGVjdG9yOiJbZW1haWxdW2Zvcm1Db250cm9sTmFtZV0sW2Vt
YWlsXVtmb3JtQ29udHJvbF0sW2VtYWlsXVtuZ01vZGVsXSIscHJvdmlkZXJzOltRdF19XX1dLEp0
LmN0b3JQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7cmV0dXJuW119LEp0LnByb3BEZWNvcmF0b3JzPXtl
bWFpbDpbe3R5cGU6ai5fMX1dfTt2YXIgJHQ9e3Byb3ZpZGU6Qix1c2VFeGlzdGluZzpuLmkoai5f
MTEpKGZ1bmN0aW9uKCl7cmV0dXJuIFh0fSksbXVsdGk6ITB9LFh0PWZ1bmN0aW9uKCl7ZnVuY3Rp
b24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24odCl7Im1pbmxl
bmd0aCJpbiB0JiYodGhpcy5fY3JlYXRlVmFsaWRhdG9yKCksdGhpcy5fb25DaGFuZ2UmJnRoaXMu
X29uQ2hhbmdlKCkpfSx0LnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gbnVs
bD09dGhpcy5taW5sZW5ndGg/bnVsbDp0aGlzLl92YWxpZGF0b3IodCl9LHQucHJvdG90eXBlLnJl
Z2lzdGVyT25WYWxpZGF0b3JDaGFuZ2U9ZnVuY3Rpb24odCl7dGhpcy5fb25DaGFuZ2U9dH0sdC5w
cm90b3R5cGUuX2NyZWF0ZVZhbGlkYXRvcj1mdW5jdGlvbigpe3RoaXMuX3ZhbGlkYXRvcj1xLm1p
bkxlbmd0aChwYXJzZUludCh0aGlzLm1pbmxlbmd0aCwxMCkpfSx0fSgpO1h0LmRlY29yYXRvcnM9
W3t0eXBlOmouWSxhcmdzOlt7c2VsZWN0b3I6IlttaW5sZW5ndGhdW2Zvcm1Db250cm9sTmFtZV0s
W21pbmxlbmd0aF1bZm9ybUNvbnRyb2xdLFttaW5sZW5ndGhdW25nTW9kZWxdIixwcm92aWRlcnM6
WyR0XSxob3N0OnsiW2F0dHIubWlubGVuZ3RoXSI6Im1pbmxlbmd0aCA/IG1pbmxlbmd0aCA6IG51
bGwifX1dfV0sWHQuY3RvclBhcmFtZXRlcnM9ZnVuY3Rpb24oKXtyZXR1cm5bXX0sWHQucHJvcERl
Y29yYXRvcnM9e21pbmxlbmd0aDpbe3R5cGU6ai5fMX1dfTt2YXIgdGU9e3Byb3ZpZGU6Qix1c2VF
eGlzdGluZzpuLmkoai5fMTEpKGZ1bmN0aW9uKCl7cmV0dXJuIGVlfSksbXVsdGk6ITB9LGVlPWZ1
bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVu
Y3Rpb24odCl7Im1heGxlbmd0aCJpbiB0JiYodGhpcy5fY3JlYXRlVmFsaWRhdG9yKCksdGhpcy5f
b25DaGFuZ2UmJnRoaXMuX29uQ2hhbmdlKCkpfSx0LnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlv
bih0KXtyZXR1cm4gbnVsbCE9dGhpcy5tYXhsZW5ndGg/dGhpcy5fdmFsaWRhdG9yKHQpOm51bGx9
LHQucHJvdG90eXBlLnJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2U9ZnVuY3Rpb24odCl7dGhpcy5f
b25DaGFuZ2U9dH0sdC5wcm90b3R5cGUuX2NyZWF0ZVZhbGlkYXRvcj1mdW5jdGlvbigpe3RoaXMu
X3ZhbGlkYXRvcj1xLm1heExlbmd0aChwYXJzZUludCh0aGlzLm1heGxlbmd0aCwxMCkpfSx0fSgp
O2VlLmRlY29yYXRvcnM9W3t0eXBlOmouWSxhcmdzOlt7c2VsZWN0b3I6IlttYXhsZW5ndGhdW2Zv
cm1Db250cm9sTmFtZV0sW21heGxlbmd0aF1bZm9ybUNvbnRyb2xdLFttYXhsZW5ndGhdW25nTW9k
ZWxdIixwcm92aWRlcnM6W3RlXSxob3N0OnsiW2F0dHIubWF4bGVuZ3RoXSI6Im1heGxlbmd0aCA/
IG1heGxlbmd0aCA6IG51bGwifX1dfV0sZWUuY3RvclBhcmFtZXRlcnM9ZnVuY3Rpb24oKXtyZXR1
cm5bXX0sZWUucHJvcERlY29yYXRvcnM9e21heGxlbmd0aDpbe3R5cGU6ai5fMX1dfTt2YXIgbmU9
e3Byb3ZpZGU6Qix1c2VFeGlzdGluZzpuLmkoai5fMTEpKGZ1bmN0aW9uKCl7cmV0dXJuIHJlfSks
bXVsdGk6ITB9LHJlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUu
bmdPbkNoYW5nZXM9ZnVuY3Rpb24odCl7InBhdHRlcm4iaW4gdCYmKHRoaXMuX2NyZWF0ZVZhbGlk
YXRvcigpLHRoaXMuX29uQ2hhbmdlJiZ0aGlzLl9vbkNoYW5nZSgpKX0sdC5wcm90b3R5cGUudmFs
aWRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRvcih0KX0sdC5wcm90b3R5cGUu
cmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZT1mdW5jdGlvbih0KXt0aGlzLl9vbkNoYW5nZT10fSx0
LnByb3RvdHlwZS5fY3JlYXRlVmFsaWRhdG9yPWZ1bmN0aW9uKCl7dGhpcy5fdmFsaWRhdG9yPXEu
cGF0dGVybih0aGlzLnBhdHRlcm4pfSx0fSgpO3JlLmRlY29yYXRvcnM9W3t0eXBlOmouWSxhcmdz
Olt7c2VsZWN0b3I6IltwYXR0ZXJuXVtmb3JtQ29udHJvbE5hbWVdLFtwYXR0ZXJuXVtmb3JtQ29u
dHJvbF0sW3BhdHRlcm5dW25nTW9kZWxdIixwcm92aWRlcnM6W25lXSxob3N0OnsiW2F0dHIucGF0
dGVybl0iOiJwYXR0ZXJuID8gcGF0dGVybiA6IG51bGwifX1dfV0scmUuY3RvclBhcmFtZXRlcnM9
ZnVuY3Rpb24oKXtyZXR1cm5bXX0scmUucHJvcERlY29yYXRvcnM9e3BhdHRlcm46W3t0eXBlOmou
XzF9XX07LyoqCisgKiBAbGljZW5zZQorICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCisgKgorICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyAqIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKKyAqLwordmFyIG9lPWZ1bmN0
aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuZ3JvdXA9ZnVuY3Rpb24odCxl
KXt2b2lkIDA9PT1lJiYoZT1udWxsKTt2YXIgbj10aGlzLl9yZWR1Y2VDb250cm9scyh0KSxyPW51
bGwhPWU/ZS52YWxpZGF0b3I6bnVsbCxvPW51bGwhPWU/ZS5hc3luY1ZhbGlkYXRvcjpudWxsO3Jl
dHVybiBuZXcgRXQobixyLG8pfSx0LnByb3RvdHlwZS5jb250cm9sPWZ1bmN0aW9uKHQsZSxuKXty
ZXR1cm4gbmV3IEN0KHQsZSxuKX0sdC5wcm90b3R5cGUuYXJyYXk9ZnVuY3Rpb24odCxlLG4pe3Zh
ciByPXRoaXMsbz10Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gci5fY3JlYXRlQ29udHJvbCh0KX0p
O3JldHVybiBuZXcgT3QobyxlLG4pfSx0LnByb3RvdHlwZS5fcmVkdWNlQ29udHJvbHM9ZnVuY3Rp
b24odCl7dmFyIGU9dGhpcyxuPXt9O3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0
aW9uKHIpe25bcl09ZS5fY3JlYXRlQ29udHJvbCh0W3JdKX0pLG59LHQucHJvdG90eXBlLl9jcmVh
dGVDb250cm9sPWZ1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiBDdHx8dCBpbnN0YW5jZW9mIEV0
fHx0IGluc3RhbmNlb2YgT3QpcmV0dXJuIHQ7aWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIGU9dFsw
XSxuPXQubGVuZ3RoPjE/dFsxXTpudWxsLHI9dC5sZW5ndGg+Mj90WzJdOm51bGw7cmV0dXJuIHRo
aXMuY29udHJvbChlLG4scil9cmV0dXJuIHRoaXMuY29udHJvbCh0KX0sdH0oKTtvZS5kZWNvcmF0
b3JzPVt7dHlwZTpqLkR9XSxvZS5jdG9yUGFyYW1ldGVycz1mdW5jdGlvbigpe3JldHVybltdfTsv
KioKKyAqIEBsaWNlbnNlCisgKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KKyAqCisgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBN
SVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQorICovCit2YXIgaWU9KG5ldyBqLkYoIjQu
My4xIiksZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0fSgpKTtpZS5kZWNvcmF0b3Jz
PVt7dHlwZTpqLlksYXJnczpbe3NlbGVjdG9yOiJmb3JtOm5vdChbbmdOb0Zvcm1dKTpub3QoW25n
TmF0aXZlVmFsaWRhdGVdKSIsaG9zdDp7bm92YWxpZGF0ZToiIn19XX1dLGllLmN0b3JQYXJhbWV0
ZXJzPWZ1bmN0aW9uKCl7cmV0dXJuW119Oy8qKgorICogQGxpY2Vuc2UKKyAqIENvcHlyaWdodCBH
b29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisg
KiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNl
CisgKi8KK3ZhciBhZT1baWUsc3QsbHQsUSwkLG90LFksYXQsY3QsbnQseXQsbXQsS3QsWHQsZWUs
cmUsV3QsSnRdLHNlPVtqdCxWdCxTdF0sdWU9W0l0LEh0LHp0LEJ0LEd0XSxjZT1mdW5jdGlvbigp
e2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHR9KCk7Y2UuZGVjb3JhdG9ycz1be3R5cGU6ai5FLGFyZ3M6
W3tkZWNsYXJhdGlvbnM6YWUsZXhwb3J0czphZX1dfV0sY2UuY3RvclBhcmFtZXRlcnM9ZnVuY3Rp
b24oKXtyZXR1cm5bXX07LyoqCisgKiBAbGljZW5zZQorICogQ29weXJpZ2h0IEdvb2dsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyAqIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKKyAqLwordmFy
IGxlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdH0oKTtsZS5kZWNvcmF0b3JzPVt7
dHlwZTpqLkUsYXJnczpbe2RlY2xhcmF0aW9uczpzZSxwcm92aWRlcnM6W2V0XSxleHBvcnRzOltj
ZSxzZV19XX1dLGxlLmN0b3JQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7cmV0dXJuW119O3ZhciBwZT1m
dW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHR9KCk7cGUuZGVjb3JhdG9ycz1be3R5cGU6
ai5FLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W3VlXSxwcm92aWRlcnM6W29lLGV0XSxleHBvcnRzOltj
ZSx1ZV19XX1dLHBlLmN0b3JQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7cmV0dXJuW119fSxRYmRtOmZ1
bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe3JldHVybiBEfWZ1bmN0aW9u
IG8odCl7RHx8KEQ9dCl9ZnVuY3Rpb24gaSgpe3JldHVybiB6fHwoej1kb2N1bWVudC5xdWVyeVNl
bGVjdG9yKCJiYXNlIikpP3ouZ2V0QXR0cmlidXRlKCJocmVmIik6bnVsbH1mdW5jdGlvbiBhKHQp
e3JldHVybiBHfHwoRz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikpLEcuc2V0QXR0cmlidXRl
KCJocmVmIix0KSwiLyI9PT1HLnBhdGhuYW1lLmNoYXJBdCgwKT9HLnBhdGhuYW1lOiIvIitHLnBh
dGhuYW1lfS8qKgorICogQGxpY2Vuc2UKKyAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgorICoKKyAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisgKiBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCisgKiBAcmV0dXJuIHs/fQor
ICovCitmdW5jdGlvbiBzKCl7cmV0dXJuISF3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGV9ZnVuY3Rp
b24gdSh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7bi5nZXQoai54KS5kb25lUHJvbWlzZS50aGVu
KGZ1bmN0aW9uKCl7dmFyIG49cigpO0FycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShuLnF1ZXJ5
U2VsZWN0b3JBbGwoZSwic3R5bGVbbmctdHJhbnNpdGlvbl0iKSkuZmlsdGVyKGZ1bmN0aW9uKGUp
e3JldHVybiBuLmdldEF0dHJpYnV0ZShlLCJuZy10cmFuc2l0aW9uIik9PT10fSkuZm9yRWFjaChm
dW5jdGlvbih0KXtyZXR1cm4gbi5yZW1vdmUodCl9KX0pfX0vKioKKyAqIEBsaWNlbnNlCisgKiBD
b3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIu
aW8vbGljZW5zZQorICovCitmdW5jdGlvbiBjKHQsZSl7WHx8KGouRy5uZz1YPWouRy5uZ3x8e30p
LFhbdF09ZX1mdW5jdGlvbiBsKHQpe3JldHVybiBuLmkoai5LKSh0KX1mdW5jdGlvbiBwKHQsZSl7
dmFyIG49KHR8fFtdKS5jb25jYXQoZXx8W10pO3JldHVybiBjKGV0LGwpLGMobnQsT2JqZWN0LmFz
c2lnbih7fSx0dCxmKG58fFtdKSkpLGZ1bmN0aW9uKCl7cmV0dXJuIGx9fWZ1bmN0aW9uIGYodCl7
cmV0dXJuIHQucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbZS5uYW1lXT1lLnRva2VuLHR9
LHt9KX1mdW5jdGlvbiBkKHQpe3JldHVybiBodC5yZXBsYWNlKHB0LHQpfWZ1bmN0aW9uIGgodCl7
cmV0dXJuIGR0LnJlcGxhY2UocHQsdCl9ZnVuY3Rpb24geSh0LGUsbil7Zm9yKHZhciByPTA7cjxl
Lmxlbmd0aDtyKyspe3ZhciBvPWVbcl07QXJyYXkuaXNBcnJheShvKT95KHQsbyxuKToobz1vLnJl
cGxhY2UocHQsdCksbi5wdXNoKG8pKX1yZXR1cm4gbn1mdW5jdGlvbiBtKHQpe3JldHVybiBmdW5j
dGlvbihlKXshMT09PXQoZSkmJihlLnByZXZlbnREZWZhdWx0KCksZS5yZXR1cm5WYWx1ZT0hMSl9
fWZ1bmN0aW9uIGcodCxlKXtpZih0LmNoYXJDb2RlQXQoMCk9PT1ndCl0aHJvdyBuZXcgRXJyb3Io
IkZvdW5kIHRoZSBzeW50aGV0aWMgIitlKyIgIit0KycuIFBsZWFzZSBpbmNsdWRlIGVpdGhlciAi
QnJvd3NlckFuaW1hdGlvbnNNb2R1bGUiIG9yICJOb29wQW5pbWF0aW9uc01vZHVsZSIgaW4geW91
ciBhcHBsaWNhdGlvbi4nKX1mdW5jdGlvbiB2KHQpe3JldHVybiB0PVN0cmluZyh0KSx0Lm1hdGNo
KEF0KXx8dC5tYXRjaChUdCk/dDoobi5pKGouTykoKSYmcigpLmxvZygiV0FSTklORzogc2FuaXRp
emluZyB1bnNhZmUgVVJMIHZhbHVlICIrdCsiIChzZWUgaHR0cDovL2cuY28vbmcvc2VjdXJpdHkj
eHNzKSIpLCJ1bnNhZmU6Iit0KX1mdW5jdGlvbiBfKHQpe3JldHVybiB0PVN0cmluZyh0KSx0LnNw
bGl0KCIsIikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB2KHQudHJpbSgpKX0pLmpvaW4oIiwgIil9
ZnVuY3Rpb24gYigpe2lmKGt0KXJldHVybiBrdDtWdD1yKCk7dmFyIHQ9VnQuY3JlYXRlRWxlbWVu
dCgidGVtcGxhdGUiKTtpZigiY29udGVudCJpbiB0KXJldHVybiB0O3ZhciBlPVZ0LmNyZWF0ZUh0
bWxEb2N1bWVudCgpO2lmKG51bGw9PShrdD1WdC5xdWVyeVNlbGVjdG9yKGUsImJvZHkiKSkpe3Zh
ciBuPVZ0LmNyZWF0ZUVsZW1lbnQoImh0bWwiLGUpO2t0PVZ0LmNyZWF0ZUVsZW1lbnQoImJvZHki
LGUpLFZ0LmFwcGVuZENoaWxkKG4sa3QpLFZ0LmFwcGVuZENoaWxkKGUsbil9cmV0dXJuIGt0fWZ1
bmN0aW9uIHcodCl7Zm9yKHZhciBlPXt9LG49MCxyPXQuc3BsaXQoIiwiKTtuPHIubGVuZ3RoO24r
Kyl7ZVtyW25dXT0hMH1yZXR1cm4gZX1mdW5jdGlvbiBDKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFy
Z3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO2Zvcih2YXIgbj17fSxyPTAsbz10
O3I8by5sZW5ndGg7cisrKXt2YXIgaT1vW3JdO2Zvcih2YXIgYSBpbiBpKWkuaGFzT3duUHJvcGVy
dHkoYSkmJihuW2FdPSEwKX1yZXR1cm4gbn1mdW5jdGlvbiBFKHQsZSl7aWYoZSYmVnQuY29udGFp
bnModCxlKSl0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBzYW5pdGl6ZSBodG1sIGJlY2F1c2Ug
dGhlIGVsZW1lbnQgaXMgY2xvYmJlcmVkOiAiK1Z0LmdldE91dGVySFRNTCh0KSk7cmV0dXJuIGV9
ZnVuY3Rpb24gTyh0KXtyZXR1cm4gdC5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZShxdCxm
dW5jdGlvbih0KXtyZXR1cm4iJiMiKygxMDI0Kih0LmNoYXJDb2RlQXQoMCktNTUyOTYpKyh0LmNo
YXJDb2RlQXQoMSktNTYzMjApKzY1NTM2KSsiOyJ9KS5yZXBsYWNlKHp0LGZ1bmN0aW9uKHQpe3Jl
dHVybiImIyIrdC5jaGFyQ29kZUF0KDApKyI7In0pLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxh
Y2UoLz4vZywiJmd0OyIpfWZ1bmN0aW9uIHgodCl7VnQuYXR0cmlidXRlTWFwKHQpLmZvckVhY2go
ZnVuY3Rpb24oZSxuKXsieG1sbnM6bnMxIiE9PW4mJjAhPT1uLmluZGV4T2YoIm5zMToiKXx8VnQu
cmVtb3ZlQXR0cmlidXRlKHQsbil9KTtmb3IodmFyIGU9MCxuPVZ0LmNoaWxkTm9kZXNBc0xpc3Qo
dCk7ZTxuLmxlbmd0aDtlKyspe3ZhciByPW5bZV07VnQuaXNFbGVtZW50Tm9kZShyKSYmeChyKX19
ZnVuY3Rpb24gUCh0LGUpe3RyeXt2YXIgcj1iKCksbz1lP1N0cmluZyhlKToiIixpPTUsYT1vO2Rv
e2lmKDA9PT1pKXRocm93IG5ldyBFcnJvcigiRmFpbGVkIHRvIHNhbml0aXplIGh0bWwgYmVjYXVz
ZSB0aGUgaW5wdXQgaXMgdW5zdGFibGUiKTtpLS0sbz1hLFZ0LnNldElubmVySFRNTChyLG8pLHQu
ZG9jdW1lbnRNb2RlJiZ4KHIpLGE9VnQuZ2V0SW5uZXJIVE1MKHIpfXdoaWxlKG8hPT1hKTtmb3Io
dmFyIHM9bmV3IEd0LHU9cy5zYW5pdGl6ZUNoaWxkcmVuKFZ0LmdldFRlbXBsYXRlQ29udGVudChy
KXx8ciksYz1WdC5nZXRUZW1wbGF0ZUNvbnRlbnQocil8fHIsbD0wLHA9VnQuY2hpbGROb2Rlc0Fz
TGlzdChjKTtsPHAubGVuZ3RoO2wrKyl7dmFyIGY9cFtsXTtWdC5yZW1vdmVDaGlsZChjLGYpfXJl
dHVybiBuLmkoai5PKSgpJiZzLnNhbml0aXplZFNvbWV0aGluZyYmVnQubG9nKCJXQVJOSU5HOiBz
YW5pdGl6aW5nIEhUTUwgc3RyaXBwZWQgc29tZSBjb250ZW50IChzZWUgaHR0cDovL2cuY28vbmcv
c2VjdXJpdHkjeHNzKS4iKSx1fWNhdGNoKHQpe3Rocm93IGt0PW51bGwsdH19ZnVuY3Rpb24gUyh0
KXtmb3IodmFyIGU9ITAsbj0hMCxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBvPXQuY2hhckF0KHIp
OyInIj09PW8mJm4/ZT0hZTonIic9PT1vJiZlJiYobj0hbil9cmV0dXJuIGUmJm59ZnVuY3Rpb24g
QSh0KXtpZighKHQ9U3RyaW5nKHQpLnRyaW0oKSkpcmV0dXJuIiI7dmFyIGU9dC5tYXRjaChYdCk7
cmV0dXJuIGUmJnYoZVsxXSk9PT1lWzFdfHx0Lm1hdGNoKCR0KSYmUyh0KT90OihuLmkoai5PKSgp
JiZyKCkubG9nKCJXQVJOSU5HOiBzYW5pdGl6aW5nIHVuc2FmZSBzdHlsZSB2YWx1ZSAiK3QrIiAo
c2VlIGh0dHA6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcykuIiksInVuc2FmZSIpfWZ1bmN0aW9uIFQo
KXtxLm1ha2VDdXJyZW50KCksSi5pbml0KCl9ZnVuY3Rpb24gaygpe3JldHVybiBuZXcgai51fWZ1
bmN0aW9uIFYoKXtyZXR1cm4gZG9jdW1lbnR9dmFyIE49bigiVFRvTyIpLE09bigiMkplOCIpLGo9
bigiM2ozSyIpO24uZChlLCJzIixmdW5jdGlvbigpe3JldHVybiBwZX0pLG4uZChlLCJhIixmdW5j
dGlvbigpe3JldHVybiBsZX0pLG4uZChlLCJuIixmdW5jdGlvbigpe3JldHVybiBLfSksbi5kKGUs
Im8iLGZ1bmN0aW9uKCl7cmV0dXJuICR9KSxuLmQoZSwiciIsZnVuY3Rpb24oKXtyZXR1cm4gcnR9
KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gaXR9KSxuLmQoZSwiaiIsZnVuY3Rpb24oKXty
ZXR1cm4gYXR9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gQ3R9KSxuLmQoZSwiZSIsZnVu
Y3Rpb24oKXtyZXR1cm4gRXR9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gdGV9KSxuLmQo
ZSwidCIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pLG4uZChlLCJsIixmdW5jdGlvbigpe3JldHVybiB5
dH0pLG4uZChlLCJnIixmdW5jdGlvbigpe3JldHVybiBidH0pLG4uZChlLCJpIixmdW5jdGlvbigp
e3JldHVybiBPdH0pLG4uZChlLCJoIixmdW5jdGlvbigpe3JldHVybiBTdH0pLG4uZChlLCJrIixm
dW5jdGlvbigpe3JldHVybiBjdH0pLG4uZChlLCJtIixmdW5jdGlvbigpe3JldHVybiB1dH0pLG4u
ZChlLCJwIixmdW5jdGlvbigpe3JldHVybiBrfSksbi5kKGUsInEiLGZ1bmN0aW9uKCl7cmV0dXJu
IHB9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gZWV9KTsvKioKKyAqIEBsaWNlbnNlIEFu
Z3VsYXIgdjQuMy4xCisgKiAoYykgMjAxMC0yMDE3IEdvb2dsZSwgSW5jLiBodHRwczovL2FuZ3Vs
YXIuaW8vCisgKiBMaWNlbnNlOiBNSVQKKyAqLworLyoqCisgKiBAbGljZW5zZQorICogQ29weXJp
Z2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKyAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xp
Y2Vuc2UKKyAqLwordmFyIFIsRD1udWxsLEk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5y
ZXNvdXJjZUxvYWRlclR5cGU9bnVsbH1yZXR1cm4gdC5wcm90b3R5cGUuaGFzUHJvcGVydHk9ZnVu
Y3Rpb24odCxlKXt9LHQucHJvdG90eXBlLnNldFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxuKXt9LHQu
cHJvdG90eXBlLmdldFByb3BlcnR5PWZ1bmN0aW9uKHQsZSl7fSx0LnByb3RvdHlwZS5pbnZva2U9
ZnVuY3Rpb24odCxlLG4pe30sdC5wcm90b3R5cGUubG9nRXJyb3I9ZnVuY3Rpb24odCl7fSx0LnBy
b3RvdHlwZS5sb2c9ZnVuY3Rpb24odCl7fSx0LnByb3RvdHlwZS5sb2dHcm91cD1mdW5jdGlvbih0
KXt9LHQucHJvdG90eXBlLmxvZ0dyb3VwRW5kPWZ1bmN0aW9uKCl7fSxPYmplY3QuZGVmaW5lUHJv
cGVydHkodC5wcm90b3R5cGUsImF0dHJUb1Byb3BNYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4g
dGhpcy5fYXR0clRvUHJvcE1hcH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2F0dHJUb1Byb3BNYXA9
dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5jb250YWlucz1m
dW5jdGlvbih0LGUpe30sdC5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24odCl7fSx0LnByb3RvdHlw
ZS5xdWVyeVNlbGVjdG9yPWZ1bmN0aW9uKHQsZSl7fSx0LnByb3RvdHlwZS5xdWVyeVNlbGVjdG9y
QWxsPWZ1bmN0aW9uKHQsZSl7fSx0LnByb3RvdHlwZS5vbj1mdW5jdGlvbih0LGUsbil7fSx0LnBy
b3RvdHlwZS5vbkFuZENhbmNlbD1mdW5jdGlvbih0LGUsbil7fSx0LnByb3RvdHlwZS5kaXNwYXRj
aEV2ZW50PWZ1bmN0aW9uKHQsZSl7fSx0LnByb3RvdHlwZS5jcmVhdGVNb3VzZUV2ZW50PWZ1bmN0
aW9uKHQpe30sdC5wcm90b3R5cGUuY3JlYXRlRXZlbnQ9ZnVuY3Rpb24odCl7fSx0LnByb3RvdHlw
ZS5wcmV2ZW50RGVmYXVsdD1mdW5jdGlvbih0KXt9LHQucHJvdG90eXBlLmlzUHJldmVudGVkPWZ1
bmN0aW9uKHQpe30sdC5wcm90b3R5cGUuZ2V0SW5uZXJIVE1MPWZ1bmN0aW9uKHQpe30sdC5wcm90
b3R5cGUuZ2V0VGVtcGxhdGVDb250ZW50PWZ1bmN0aW9uKHQpe30sdC5wcm90b3R5cGUuZ2V0T3V0
ZXJIVE1MPWZ1bmN0aW9uKHQpe30sdC5wcm90b3R5cGUubm9kZU5hbWU9ZnVuY3Rpb24odCl7fSx0
LnByb3RvdHlwZS5ub2RlVmFsdWU9ZnVuY3Rpb24odCl7fSx0LnByb3RvdHlwZS50eXBlPWZ1bmN0
aW9uKHQpe30sdC5wcm90b3R5cGUuY29udGVudD1mdW5jdGlvbih0KXt9LHQucHJvdG90eXBlLmZp
cnN0Q2hpbGQ9ZnVuY3Rpb24odCl7fSx0LnByb3RvdHlwZS5uZXh0U2libGluZz1mdW5jdGlvbih0
KXt9LHQucHJvdG90eXBlLnBhcmVudEVsZW1lbnQ9ZnVuY3Rpb24odCl7fSx0LnByb3RvdHlwZS5j
aGlsZE5vZGVzPWZ1bmN0aW9uKHQpe30sdC5wcm90b3R5cGUuY2hpbGROb2Rlc0FzTGlzdD1mdW5j
dGlvbih0KXt9LHQucHJvdG90eXBlLmNsZWFyTm9kZXM9ZnVuY3Rpb24odCl7fSx0LnByb3RvdHlw
ZS5hcHBlbmRDaGlsZD1mdW5jdGlvbih0LGUpe30sdC5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ9ZnVu
Y3Rpb24odCxlKXt9LHQucHJvdG90eXBlLnJlcGxhY2VDaGlsZD1mdW5jdGlvbih0LGUsbil7fSx0
LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCl7fSx0LnByb3RvdHlwZS5pbnNlcnRCZWZvcmU9
ZnVuY3Rpb24odCxlLG4pe30sdC5wcm90b3R5cGUuaW5zZXJ0QWxsQmVmb3JlPWZ1bmN0aW9uKHQs
ZSxuKXt9LHQucHJvdG90eXBlLmluc2VydEFmdGVyPWZ1bmN0aW9uKHQsZSxuKXt9LHQucHJvdG90
eXBlLnNldElubmVySFRNTD1mdW5jdGlvbih0LGUpe30sdC5wcm90b3R5cGUuZ2V0VGV4dD1mdW5j
dGlvbih0KXt9LHQucHJvdG90eXBlLnNldFRleHQ9ZnVuY3Rpb24odCxlKXt9LHQucHJvdG90eXBl
LmdldFZhbHVlPWZ1bmN0aW9uKHQpe30sdC5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24odCxl
KXt9LHQucHJvdG90eXBlLmdldENoZWNrZWQ9ZnVuY3Rpb24odCl7fSx0LnByb3RvdHlwZS5zZXRD
aGVja2VkPWZ1bmN0aW9uKHQsZSl7fSx0LnByb3RvdHlwZS5jcmVhdGVDb21tZW50PWZ1bmN0aW9u
KHQpe30sdC5wcm90b3R5cGUuY3JlYXRlVGVtcGxhdGU9ZnVuY3Rpb24odCl7fSx0LnByb3RvdHlw
ZS5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKHQsZSl7fSx0LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50
TlM9ZnVuY3Rpb24odCxlLG4pe30sdC5wcm90b3R5cGUuY3JlYXRlVGV4dE5vZGU9ZnVuY3Rpb24o
dCxlKXt9LHQucHJvdG90eXBlLmNyZWF0ZVNjcmlwdFRhZz1mdW5jdGlvbih0LGUsbil7fSx0LnBy
b3RvdHlwZS5jcmVhdGVTdHlsZUVsZW1lbnQ9ZnVuY3Rpb24odCxlKXt9LHQucHJvdG90eXBlLmNy
ZWF0ZVNoYWRvd1Jvb3Q9ZnVuY3Rpb24odCl7fSx0LnByb3RvdHlwZS5nZXRTaGFkb3dSb290PWZ1
bmN0aW9uKHQpe30sdC5wcm90b3R5cGUuZ2V0SG9zdD1mdW5jdGlvbih0KXt9LHQucHJvdG90eXBl
LmdldERpc3RyaWJ1dGVkTm9kZXM9ZnVuY3Rpb24odCl7fSx0LnByb3RvdHlwZS5jbG9uZT1mdW5j
dGlvbih0KXt9LHQucHJvdG90eXBlLmdldEVsZW1lbnRzQnlDbGFzc05hbWU9ZnVuY3Rpb24odCxl
KXt9LHQucHJvdG90eXBlLmdldEVsZW1lbnRzQnlUYWdOYW1lPWZ1bmN0aW9uKHQsZSl7fSx0LnBy
b3RvdHlwZS5jbGFzc0xpc3Q9ZnVuY3Rpb24odCl7fSx0LnByb3RvdHlwZS5hZGRDbGFzcz1mdW5j
dGlvbih0LGUpe30sdC5wcm90b3R5cGUucmVtb3ZlQ2xhc3M9ZnVuY3Rpb24odCxlKXt9LHQucHJv
dG90eXBlLmhhc0NsYXNzPWZ1bmN0aW9uKHQsZSl7fSx0LnByb3RvdHlwZS5zZXRTdHlsZT1mdW5j
dGlvbih0LGUsbil7fSx0LnByb3RvdHlwZS5yZW1vdmVTdHlsZT1mdW5jdGlvbih0LGUpe30sdC5w
cm90b3R5cGUuZ2V0U3R5bGU9ZnVuY3Rpb24odCxlKXt9LHQucHJvdG90eXBlLmhhc1N0eWxlPWZ1
bmN0aW9uKHQsZSxuKXt9LHQucHJvdG90eXBlLnRhZ05hbWU9ZnVuY3Rpb24odCl7fSx0LnByb3Rv
dHlwZS5hdHRyaWJ1dGVNYXA9ZnVuY3Rpb24odCl7fSx0LnByb3RvdHlwZS5oYXNBdHRyaWJ1dGU9
ZnVuY3Rpb24odCxlKXt9LHQucHJvdG90eXBlLmhhc0F0dHJpYnV0ZU5TPWZ1bmN0aW9uKHQsZSxu
KXt9LHQucHJvdG90eXBlLmdldEF0dHJpYnV0ZT1mdW5jdGlvbih0LGUpe30sdC5wcm90b3R5cGUu
Z2V0QXR0cmlidXRlTlM9ZnVuY3Rpb24odCxlLG4pe30sdC5wcm90b3R5cGUuc2V0QXR0cmlidXRl
PWZ1bmN0aW9uKHQsZSxuKXt9LHQucHJvdG90eXBlLnNldEF0dHJpYnV0ZU5TPWZ1bmN0aW9uKHQs
ZSxuLHIpe30sdC5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKHQsZSl7fSx0LnBy
b3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGVOUz1mdW5jdGlvbih0LGUsbil7fSx0LnByb3RvdHlwZS50
ZW1wbGF0ZUF3YXJlUm9vdD1mdW5jdGlvbih0KXt9LHQucHJvdG90eXBlLmNyZWF0ZUh0bWxEb2N1
bWVudD1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0PWZ1bmN0
aW9uKHQpe30sdC5wcm90b3R5cGUuZ2V0VGl0bGU9ZnVuY3Rpb24odCl7fSx0LnByb3RvdHlwZS5z
ZXRUaXRsZT1mdW5jdGlvbih0LGUpe30sdC5wcm90b3R5cGUuZWxlbWVudE1hdGNoZXM9ZnVuY3Rp
b24odCxlKXt9LHQucHJvdG90eXBlLmlzVGVtcGxhdGVFbGVtZW50PWZ1bmN0aW9uKHQpe30sdC5w
cm90b3R5cGUuaXNUZXh0Tm9kZT1mdW5jdGlvbih0KXt9LHQucHJvdG90eXBlLmlzQ29tbWVudE5v
ZGU9ZnVuY3Rpb24odCl7fSx0LnByb3RvdHlwZS5pc0VsZW1lbnROb2RlPWZ1bmN0aW9uKHQpe30s
dC5wcm90b3R5cGUuaGFzU2hhZG93Um9vdD1mdW5jdGlvbih0KXt9LHQucHJvdG90eXBlLmlzU2hh
ZG93Um9vdD1mdW5jdGlvbih0KXt9LHQucHJvdG90eXBlLmltcG9ydEludG9Eb2M9ZnVuY3Rpb24o
dCl7fSx0LnByb3RvdHlwZS5hZG9wdE5vZGU9ZnVuY3Rpb24odCl7fSx0LnByb3RvdHlwZS5nZXRI
cmVmPWZ1bmN0aW9uKHQpe30sdC5wcm90b3R5cGUuZ2V0RXZlbnRLZXk9ZnVuY3Rpb24odCl7fSx0
LnByb3RvdHlwZS5yZXNvbHZlQW5kU2V0SHJlZj1mdW5jdGlvbih0LGUsbil7fSx0LnByb3RvdHlw
ZS5zdXBwb3J0c0RPTUV2ZW50cz1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuc3VwcG9ydHNOYXRp
dmVTaGFkb3dET009ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmdldEdsb2JhbEV2ZW50VGFyZ2V0
PWZ1bmN0aW9uKHQsZSl7fSx0LnByb3RvdHlwZS5nZXRIaXN0b3J5PWZ1bmN0aW9uKCl7fSx0LnBy
b3RvdHlwZS5nZXRMb2NhdGlvbj1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuZ2V0QmFzZUhyZWY9
ZnVuY3Rpb24odCl7fSx0LnByb3RvdHlwZS5yZXNldEJhc2VFbGVtZW50PWZ1bmN0aW9uKCl7fSx0
LnByb3RvdHlwZS5nZXRVc2VyQWdlbnQ9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLnNldERhdGE9
ZnVuY3Rpb24odCxlLG4pe30sdC5wcm90b3R5cGUuZ2V0Q29tcHV0ZWRTdHlsZT1mdW5jdGlvbih0
KXt9LHQucHJvdG90eXBlLmdldERhdGE9ZnVuY3Rpb24odCxlKXt9LHQucHJvdG90eXBlLnN1cHBv
cnRzV2ViQW5pbWF0aW9uPWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5wZXJmb3JtYW5jZU5vdz1m
dW5jdGlvbigpe30sdC5wcm90b3R5cGUuZ2V0QW5pbWF0aW9uUHJlZml4PWZ1bmN0aW9uKCl7fSx0
LnByb3RvdHlwZS5nZXRUcmFuc2l0aW9uRW5kPWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5zdXBw
b3J0c0FuaW1hdGlvbj1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuc3VwcG9ydHNDb29raWVzPWZ1
bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5nZXRDb29raWU9ZnVuY3Rpb24odCl7fSx0LnByb3RvdHlw
ZS5zZXRDb29raWU9ZnVuY3Rpb24odCxlKXt9LHR9KCksRj1mdW5jdGlvbih0KXtmdW5jdGlvbiBl
KCl7dmFyIGU9dC5jYWxsKHRoaXMpfHx0aGlzO2UuX2FuaW1hdGlvblByZWZpeD1udWxsLGUuX3Ry
YW5zaXRpb25FbmQ9bnVsbDt0cnl7dmFyIG49ZS5jcmVhdGVFbGVtZW50KCJkaXYiLGRvY3VtZW50
KTtpZihudWxsIT1lLmdldFN0eWxlKG4sImFuaW1hdGlvbk5hbWUiKSllLl9hbmltYXRpb25QcmVm
aXg9IiI7ZWxzZSBmb3IodmFyIHI9WyJXZWJraXQiLCJNb3oiLCJPIiwibXMiXSxvPTA7bzxyLmxl
bmd0aDtvKyspaWYobnVsbCE9ZS5nZXRTdHlsZShuLHJbb10rIkFuaW1hdGlvbk5hbWUiKSl7ZS5f
YW5pbWF0aW9uUHJlZml4PSItIityW29dLnRvTG93ZXJDYXNlKCkrIi0iO2JyZWFrfXZhciBpPXtX
ZWJraXRUcmFuc2l0aW9uOiJ3ZWJraXRUcmFuc2l0aW9uRW5kIixNb3pUcmFuc2l0aW9uOiJ0cmFu
c2l0aW9uZW5kIixPVHJhbnNpdGlvbjoib1RyYW5zaXRpb25FbmQgb3RyYW5zaXRpb25lbmQiLHRy
YW5zaXRpb246InRyYW5zaXRpb25lbmQifTtPYmplY3Qua2V5cyhpKS5mb3JFYWNoKGZ1bmN0aW9u
KHQpe251bGwhPWUuZ2V0U3R5bGUobix0KSYmKGUuX3RyYW5zaXRpb25FbmQ9aVt0XSl9KX1jYXRj
aCh0KXtlLl9hbmltYXRpb25QcmVmaXg9bnVsbCxlLl90cmFuc2l0aW9uRW5kPW51bGx9cmV0dXJu
IGV9cmV0dXJuIE4uYShlLHQpLGUucHJvdG90eXBlLmdldERpc3RyaWJ1dGVkTm9kZXM9ZnVuY3Rp
b24odCl7cmV0dXJuIHQuZ2V0RGlzdHJpYnV0ZWROb2RlcygpfSxlLnByb3RvdHlwZS5yZXNvbHZl
QW5kU2V0SHJlZj1mdW5jdGlvbih0LGUsbil7dC5ocmVmPW51bGw9PW4/ZTplKyIvLi4vIitufSxl
LnByb3RvdHlwZS5zdXBwb3J0c0RPTUV2ZW50cz1mdW5jdGlvbigpe3JldHVybiEwfSxlLnByb3Rv
dHlwZS5zdXBwb3J0c05hdGl2ZVNoYWRvd0RPTT1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9
PXR5cGVvZiBkb2N1bWVudC5ib2R5LmNyZWF0ZVNoYWRvd1Jvb3R9LGUucHJvdG90eXBlLmdldEFu
aW1hdGlvblByZWZpeD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbmltYXRpb25QcmVmaXg/dGhp
cy5fYW5pbWF0aW9uUHJlZml4OiIifSxlLnByb3RvdHlwZS5nZXRUcmFuc2l0aW9uRW5kPWZ1bmN0
aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25FbmQ/dGhpcy5fdHJhbnNpdGlvbkVuZDoiIn0s
ZS5wcm90b3R5cGUuc3VwcG9ydHNBbmltYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9dGhp
cy5fYW5pbWF0aW9uUHJlZml4JiZudWxsIT10aGlzLl90cmFuc2l0aW9uRW5kfSxlfShJKSxIPXtj
bGFzczoiY2xhc3NOYW1lIixpbm5lckh0bWw6ImlubmVySFRNTCIscmVhZG9ubHk6InJlYWRPbmx5
Iix0YWJpbmRleDoidGFiSW5kZXgifSxMPTMsQj17IlxiIjoiQmFja3NwYWNlIiwiXHQiOiJUYWIi
LCJ/IjoiRGVsZXRlIiwiGyI6IkVzY2FwZSIsRGVsOiJEZWxldGUiLEVzYzoiRXNjYXBlIixMZWZ0
OiJBcnJvd0xlZnQiLFJpZ2h0OiJBcnJvd1JpZ2h0IixVcDoiQXJyb3dVcCIsRG93bjoiQXJyb3dE
b3duIixNZW51OiJDb250ZXh0TWVudSIsU2Nyb2xsOiJTY3JvbGxMb2NrIixXaW46Ik9TIn0sVT17
QToiMSIsQjoiMiIsQzoiMyIsRDoiNCIsRToiNSIsRjoiNiIsRzoiNyIsSDoiOCIsSToiOSIsSjoi
KiIsSzoiKyIsTToiLSIsTjoiLiIsTzoiLyIsImAiOiIwIiwiwpAiOiJOdW1Mb2NrIn07ai5HLk5v
ZGUmJihSPWouRy5Ob2RlLnByb3RvdHlwZS5jb250YWluc3x8ZnVuY3Rpb24odCl7cmV0dXJuISEo
MTYmdGhpcy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0KSl9KTt2YXIgRyxxPWZ1bmN0aW9uKHQp
e2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0
aGlzfXJldHVybiBOLmEoZSx0KSxlLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbih0KXt0aHJvdyBu
ZXcgRXJyb3IoInBhcnNlIG5vdCBpbXBsZW1lbnRlZCIpfSxlLm1ha2VDdXJyZW50PWZ1bmN0aW9u
KCl7byhuZXcgZSl9LGUucHJvdG90eXBlLmhhc1Byb3BlcnR5PWZ1bmN0aW9uKHQsZSl7cmV0dXJu
IGUgaW4gdH0sZS5wcm90b3R5cGUuc2V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLG4pe3RbZV09bn0s
ZS5wcm90b3R5cGUuZ2V0UHJvcGVydHk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFtlXX0sZS5wcm90
b3R5cGUuaW52b2tlPWZ1bmN0aW9uKHQsZSxuKXt0W2VdLmFwcGx5KHQsbil9LGUucHJvdG90eXBl
LmxvZ0Vycm9yPWZ1bmN0aW9uKHQpe3dpbmRvdy5jb25zb2xlJiYoY29uc29sZS5lcnJvcj9jb25z
b2xlLmVycm9yKHQpOmNvbnNvbGUubG9nKHQpKX0sZS5wcm90b3R5cGUubG9nPWZ1bmN0aW9uKHQp
e3dpbmRvdy5jb25zb2xlJiZ3aW5kb3cuY29uc29sZS5sb2cmJndpbmRvdy5jb25zb2xlLmxvZyh0
KX0sZS5wcm90b3R5cGUubG9nR3JvdXA9ZnVuY3Rpb24odCl7d2luZG93LmNvbnNvbGUmJndpbmRv
dy5jb25zb2xlLmdyb3VwJiZ3aW5kb3cuY29uc29sZS5ncm91cCh0KX0sZS5wcm90b3R5cGUubG9n
R3JvdXBFbmQ9ZnVuY3Rpb24oKXt3aW5kb3cuY29uc29sZSYmd2luZG93LmNvbnNvbGUuZ3JvdXBF
bmQmJndpbmRvdy5jb25zb2xlLmdyb3VwRW5kKCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnBy
b3RvdHlwZSwiYXR0clRvUHJvcE1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiBIfSxlbnVtZXJh
YmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKHQs
ZSl7cmV0dXJuIFIuY2FsbCh0LGUpfSxlLnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yPWZ1bmN0aW9u
KHQsZSl7cmV0dXJuIHQucXVlcnlTZWxlY3RvcihlKX0sZS5wcm90b3R5cGUucXVlcnlTZWxlY3Rv
ckFsbD1mdW5jdGlvbih0LGUpe3JldHVybiB0LnF1ZXJ5U2VsZWN0b3JBbGwoZSl9LGUucHJvdG90
eXBlLm9uPWZ1bmN0aW9uKHQsZSxuKXt0LmFkZEV2ZW50TGlzdGVuZXIoZSxuLCExKX0sZS5wcm90
b3R5cGUub25BbmRDYW5jZWw9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0LmFkZEV2ZW50TGlzdGVu
ZXIoZSxuLCExKSxmdW5jdGlvbigpe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLG4sITEpfX0sZS5w
cm90b3R5cGUuZGlzcGF0Y2hFdmVudD1mdW5jdGlvbih0LGUpe3QuZGlzcGF0Y2hFdmVudChlKX0s
ZS5wcm90b3R5cGUuY3JlYXRlTW91c2VFdmVudD1mdW5jdGlvbih0KXt2YXIgZT1kb2N1bWVudC5j
cmVhdGVFdmVudCgiTW91c2VFdmVudCIpO3JldHVybiBlLmluaXRFdmVudCh0LCEwLCEwKSxlfSxl
LnByb3RvdHlwZS5jcmVhdGVFdmVudD1mdW5jdGlvbih0KXt2YXIgZT1kb2N1bWVudC5jcmVhdGVF
dmVudCgiRXZlbnQiKTtyZXR1cm4gZS5pbml0RXZlbnQodCwhMCwhMCksZX0sZS5wcm90b3R5cGUu
cHJldmVudERlZmF1bHQ9ZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpLHQucmV0dXJuVmFs
dWU9ITF9LGUucHJvdG90eXBlLmlzUHJldmVudGVkPWZ1bmN0aW9uKHQpe3JldHVybiB0LmRlZmF1
bHRQcmV2ZW50ZWR8fG51bGwhPXQucmV0dXJuVmFsdWUmJiF0LnJldHVyblZhbHVlfSxlLnByb3Rv
dHlwZS5nZXRJbm5lckhUTUw9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaW5uZXJIVE1MfSxlLnByb3Rv
dHlwZS5nZXRUZW1wbGF0ZUNvbnRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuImNvbnRlbnQiaW4gdCYm
dCBpbnN0YW5jZW9mIEhUTUxUZW1wbGF0ZUVsZW1lbnQ/dC5jb250ZW50Om51bGx9LGUucHJvdG90
eXBlLmdldE91dGVySFRNTD1mdW5jdGlvbih0KXtyZXR1cm4gdC5vdXRlckhUTUx9LGUucHJvdG90
eXBlLm5vZGVOYW1lPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGVOYW1lfSxlLnByb3RvdHlwZS5u
b2RlVmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIHQubm9kZVZhbHVlfSxlLnByb3RvdHlwZS50eXBl
PWZ1bmN0aW9uKHQpe3JldHVybiB0LnR5cGV9LGUucHJvdG90eXBlLmNvbnRlbnQ9ZnVuY3Rpb24o
dCl7cmV0dXJuIHRoaXMuaGFzUHJvcGVydHkodCwiY29udGVudCIpP3QuY29udGVudDp0fSxlLnBy
b3RvdHlwZS5maXJzdENoaWxkPWZ1bmN0aW9uKHQpe3JldHVybiB0LmZpcnN0Q2hpbGR9LGUucHJv
dG90eXBlLm5leHRTaWJsaW5nPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm5leHRTaWJsaW5nfSxlLnBy
b3RvdHlwZS5wYXJlbnRFbGVtZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0LnBhcmVudE5vZGV9LGUu
cHJvdG90eXBlLmNoaWxkTm9kZXM9ZnVuY3Rpb24odCl7cmV0dXJuIHQuY2hpbGROb2Rlc30sZS5w
cm90b3R5cGUuY2hpbGROb2Rlc0FzTGlzdD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5jaGlsZE5v
ZGVzLG49bmV3IEFycmF5KGUubGVuZ3RoKSxyPTA7cjxlLmxlbmd0aDtyKyspbltyXT1lW3JdO3Jl
dHVybiBufSxlLnByb3RvdHlwZS5jbGVhck5vZGVzPWZ1bmN0aW9uKHQpe2Zvcig7dC5maXJzdENo
aWxkOyl0LnJlbW92ZUNoaWxkKHQuZmlyc3RDaGlsZCl9LGUucHJvdG90eXBlLmFwcGVuZENoaWxk
PWZ1bmN0aW9uKHQsZSl7dC5hcHBlbmRDaGlsZChlKX0sZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ9
ZnVuY3Rpb24odCxlKXt0LnJlbW92ZUNoaWxkKGUpfSxlLnByb3RvdHlwZS5yZXBsYWNlQ2hpbGQ9
ZnVuY3Rpb24odCxlLG4pe3QucmVwbGFjZUNoaWxkKGUsbil9LGUucHJvdG90eXBlLnJlbW92ZT1m
dW5jdGlvbih0KXtyZXR1cm4gdC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQo
dCksdH0sZS5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlPWZ1bmN0aW9uKHQsZSxuKXt0Lmluc2VydEJl
Zm9yZShuLGUpfSxlLnByb3RvdHlwZS5pbnNlcnRBbGxCZWZvcmU9ZnVuY3Rpb24odCxlLG4pe24u
Zm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gdC5pbnNlcnRCZWZvcmUobixlKX0pfSxlLnByb3Rv
dHlwZS5pbnNlcnRBZnRlcj1mdW5jdGlvbih0LGUsbil7dC5pbnNlcnRCZWZvcmUobixlLm5leHRT
aWJsaW5nKX0sZS5wcm90b3R5cGUuc2V0SW5uZXJIVE1MPWZ1bmN0aW9uKHQsZSl7dC5pbm5lckhU
TUw9ZX0sZS5wcm90b3R5cGUuZ2V0VGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gdC50ZXh0Q29udGVu
dH0sZS5wcm90b3R5cGUuc2V0VGV4dD1mdW5jdGlvbih0LGUpe3QudGV4dENvbnRlbnQ9ZX0sZS5w
cm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWV9LGUucHJvdG90eXBl
LnNldFZhbHVlPWZ1bmN0aW9uKHQsZSl7dC52YWx1ZT1lfSxlLnByb3RvdHlwZS5nZXRDaGVja2Vk
PWZ1bmN0aW9uKHQpe3JldHVybiB0LmNoZWNrZWR9LGUucHJvdG90eXBlLnNldENoZWNrZWQ9ZnVu
Y3Rpb24odCxlKXt0LmNoZWNrZWQ9ZX0sZS5wcm90b3R5cGUuY3JlYXRlQ29tbWVudD1mdW5jdGlv
bih0KXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlQ29tbWVudCh0KX0sZS5wcm90b3R5cGUuY3JlYXRl
VGVtcGxhdGU9ZnVuY3Rpb24odCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxh
dGUiKTtyZXR1cm4gZS5pbm5lckhUTUw9dCxlfSxlLnByb3RvdHlwZS5jcmVhdGVFbGVtZW50PWZ1
bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPWRvY3VtZW50KSxlLmNyZWF0ZUVsZW1l
bnQodCl9LGUucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnROUz1mdW5jdGlvbih0LGUsbil7cmV0dXJu
IHZvaWQgMD09PW4mJihuPWRvY3VtZW50KSxuLmNyZWF0ZUVsZW1lbnROUyh0LGUpfSxlLnByb3Rv
dHlwZS5jcmVhdGVUZXh0Tm9kZT1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT1k
b2N1bWVudCksZS5jcmVhdGVUZXh0Tm9kZSh0KX0sZS5wcm90b3R5cGUuY3JlYXRlU2NyaXB0VGFn
PWZ1bmN0aW9uKHQsZSxuKXt2b2lkIDA9PT1uJiYobj1kb2N1bWVudCk7dmFyIHI9bi5jcmVhdGVF
bGVtZW50KCJTQ1JJUFQiKTtyZXR1cm4gci5zZXRBdHRyaWJ1dGUodCxlKSxyfSxlLnByb3RvdHlw
ZS5jcmVhdGVTdHlsZUVsZW1lbnQ9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT1kb2N1bWVu
dCk7dmFyIG49ZS5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3JldHVybiB0aGlzLmFwcGVuZENoaWxk
KG4sdGhpcy5jcmVhdGVUZXh0Tm9kZSh0KSksbn0sZS5wcm90b3R5cGUuY3JlYXRlU2hhZG93Um9v
dD1mdW5jdGlvbih0KXtyZXR1cm4gdC5jcmVhdGVTaGFkb3dSb290KCl9LGUucHJvdG90eXBlLmdl
dFNoYWRvd1Jvb3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc2hhZG93Um9vdH0sZS5wcm90b3R5cGUu
Z2V0SG9zdD1mdW5jdGlvbih0KXtyZXR1cm4gdC5ob3N0fSxlLnByb3RvdHlwZS5jbG9uZT1mdW5j
dGlvbih0KXtyZXR1cm4gdC5jbG9uZU5vZGUoITApfSxlLnByb3RvdHlwZS5nZXRFbGVtZW50c0J5
Q2xhc3NOYW1lPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShl
KX0sZS5wcm90b3R5cGUuZ2V0RWxlbWVudHNCeVRhZ05hbWU9ZnVuY3Rpb24odCxlKXtyZXR1cm4g
dC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKX0sZS5wcm90b3R5cGUuY2xhc3NMaXN0PWZ1bmN0aW9u
KHQpe3JldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LmNsYXNzTGlzdCwwKX0sZS5w
cm90b3R5cGUuYWRkQ2xhc3M9ZnVuY3Rpb24odCxlKXt0LmNsYXNzTGlzdC5hZGQoZSl9LGUucHJv
dG90eXBlLnJlbW92ZUNsYXNzPWZ1bmN0aW9uKHQsZSl7dC5jbGFzc0xpc3QucmVtb3ZlKGUpfSxl
LnByb3RvdHlwZS5oYXNDbGFzcz1mdW5jdGlvbih0LGUpe3JldHVybiB0LmNsYXNzTGlzdC5jb250
YWlucyhlKX0sZS5wcm90b3R5cGUuc2V0U3R5bGU9ZnVuY3Rpb24odCxlLG4pe3Quc3R5bGVbZV09
bn0sZS5wcm90b3R5cGUucmVtb3ZlU3R5bGU9ZnVuY3Rpb24odCxlKXt0LnN0eWxlW2VdPSIifSxl
LnByb3RvdHlwZS5nZXRTdHlsZT1mdW5jdGlvbih0LGUpe3JldHVybiB0LnN0eWxlW2VdfSxlLnBy
b3RvdHlwZS5oYXNTdHlsZT1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcy5nZXRTdHlsZSh0LGUp
fHwiIjtyZXR1cm4gbj9yPT1uOnIubGVuZ3RoPjB9LGUucHJvdG90eXBlLnRhZ05hbWU9ZnVuY3Rp
b24odCl7cmV0dXJuIHQudGFnTmFtZX0sZS5wcm90b3R5cGUuYXR0cmlidXRlTWFwPWZ1bmN0aW9u
KHQpe2Zvcih2YXIgZT1uZXcgTWFwLG49dC5hdHRyaWJ1dGVzLHI9MDtyPG4ubGVuZ3RoO3IrKyl7
dmFyIG89bltyXTtlLnNldChvLm5hbWUsby52YWx1ZSl9cmV0dXJuIGV9LGUucHJvdG90eXBlLmhh
c0F0dHJpYnV0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0Lmhhc0F0dHJpYnV0ZShlKX0sZS5wcm90
b3R5cGUuaGFzQXR0cmlidXRlTlM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0Lmhhc0F0dHJpYnV0
ZU5TKGUsbil9LGUucHJvdG90eXBlLmdldEF0dHJpYnV0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0
LmdldEF0dHJpYnV0ZShlKX0sZS5wcm90b3R5cGUuZ2V0QXR0cmlidXRlTlM9ZnVuY3Rpb24odCxl
LG4pe3JldHVybiB0LmdldEF0dHJpYnV0ZU5TKGUsbil9LGUucHJvdG90eXBlLnNldEF0dHJpYnV0
ZT1mdW5jdGlvbih0LGUsbil7dC5zZXRBdHRyaWJ1dGUoZSxuKX0sZS5wcm90b3R5cGUuc2V0QXR0
cmlidXRlTlM9ZnVuY3Rpb24odCxlLG4scil7dC5zZXRBdHRyaWJ1dGVOUyhlLG4scil9LGUucHJv
dG90eXBlLnJlbW92ZUF0dHJpYnV0ZT1mdW5jdGlvbih0LGUpe3QucmVtb3ZlQXR0cmlidXRlKGUp
fSxlLnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGVOUz1mdW5jdGlvbih0LGUsbil7dC5yZW1vdmVB
dHRyaWJ1dGVOUyhlLG4pfSxlLnByb3RvdHlwZS50ZW1wbGF0ZUF3YXJlUm9vdD1mdW5jdGlvbih0
KXtyZXR1cm4gdGhpcy5pc1RlbXBsYXRlRWxlbWVudCh0KT90aGlzLmNvbnRlbnQodCk6dH0sZS5w
cm90b3R5cGUuY3JlYXRlSHRtbERvY3VtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50Lmlt
cGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiZmFrZVRpdGxlIil9LGUucHJvdG90eXBl
LmdldEJvdW5kaW5nQ2xpZW50UmVjdD1mdW5jdGlvbih0KXt0cnl7cmV0dXJuIHQuZ2V0Qm91bmRp
bmdDbGllbnRSZWN0KCl9Y2F0Y2godCl7cmV0dXJue3RvcDowLGJvdHRvbTowLGxlZnQ6MCxyaWdo
dDowLHdpZHRoOjAsaGVpZ2h0OjB9fX0sZS5wcm90b3R5cGUuZ2V0VGl0bGU9ZnVuY3Rpb24odCl7
cmV0dXJuIGRvY3VtZW50LnRpdGxlfSxlLnByb3RvdHlwZS5zZXRUaXRsZT1mdW5jdGlvbih0LGUp
e2RvY3VtZW50LnRpdGxlPWV8fCIifSxlLnByb3RvdHlwZS5lbGVtZW50TWF0Y2hlcz1mdW5jdGlv
bih0LGUpe3JldHVybiB0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQmJih0Lm1hdGNoZXMmJnQubWF0
Y2hlcyhlKXx8dC5tc01hdGNoZXNTZWxlY3RvciYmdC5tc01hdGNoZXNTZWxlY3RvcihlKXx8dC53
ZWJraXRNYXRjaGVzU2VsZWN0b3ImJnQud2Via2l0TWF0Y2hlc1NlbGVjdG9yKGUpKX0sZS5wcm90
b3R5cGUuaXNUZW1wbGF0ZUVsZW1lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBI
VE1MRWxlbWVudCYmIlRFTVBMQVRFIj09dC5ub2RlTmFtZX0sZS5wcm90b3R5cGUuaXNUZXh0Tm9k
ZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFfSxlLnByb3Rv
dHlwZS5pc0NvbW1lbnROb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGVUeXBlPT09Tm9kZS5D
T01NRU5UX05PREV9LGUucHJvdG90eXBlLmlzRWxlbWVudE5vZGU9ZnVuY3Rpb24odCl7cmV0dXJu
IHQubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERX0sZS5wcm90b3R5cGUuaGFzU2hhZG93Um9v
dD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dC5zaGFkb3dSb290JiZ0IGluc3RhbmNlb2YgSFRN
TEVsZW1lbnR9LGUucHJvdG90eXBlLmlzU2hhZG93Um9vdD1mdW5jdGlvbih0KXtyZXR1cm4gdCBp
bnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnR9LGUucHJvdG90eXBlLmltcG9ydEludG9Eb2M9ZnVu
Y3Rpb24odCl7cmV0dXJuIGRvY3VtZW50LmltcG9ydE5vZGUodGhpcy50ZW1wbGF0ZUF3YXJlUm9v
dCh0KSwhMCl9LGUucHJvdG90eXBlLmFkb3B0Tm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gZG9jdW1l
bnQuYWRvcHROb2RlKHQpfSxlLnByb3RvdHlwZS5nZXRIcmVmPWZ1bmN0aW9uKHQpe3JldHVybiB0
LmhyZWZ9LGUucHJvdG90eXBlLmdldEV2ZW50S2V5PWZ1bmN0aW9uKHQpe3ZhciBlPXQua2V5O2lm
KG51bGw9PWUpe2lmKG51bGw9PShlPXQua2V5SWRlbnRpZmllcikpcmV0dXJuIlVuaWRlbnRpZmll
ZCI7ZS5zdGFydHNXaXRoKCJVKyIpJiYoZT1TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGUu
c3Vic3RyaW5nKDIpLDE2KSksdC5sb2NhdGlvbj09PUwmJlUuaGFzT3duUHJvcGVydHkoZSkmJihl
PVVbZV0pKX1yZXR1cm4gQltlXXx8ZX0sZS5wcm90b3R5cGUuZ2V0R2xvYmFsRXZlbnRUYXJnZXQ9
ZnVuY3Rpb24odCxlKXtyZXR1cm4id2luZG93Ij09PWU/d2luZG93OiJkb2N1bWVudCI9PT1lP2Rv
Y3VtZW50OiJib2R5Ij09PWU/ZG9jdW1lbnQuYm9keTpudWxsfSxlLnByb3RvdHlwZS5nZXRIaXN0
b3J5PWZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5oaXN0b3J5fSxlLnByb3RvdHlwZS5nZXRMb2Nh
dGlvbj1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cubG9jYXRpb259LGUucHJvdG90eXBlLmdldEJh
c2VIcmVmPWZ1bmN0aW9uKHQpe3ZhciBlPWkoKTtyZXR1cm4gbnVsbD09ZT9udWxsOmEoZSl9LGUu
cHJvdG90eXBlLnJlc2V0QmFzZUVsZW1lbnQ9ZnVuY3Rpb24oKXt6PW51bGx9LGUucHJvdG90eXBl
LmdldFVzZXJBZ2VudD1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2Vu
dH0sZS5wcm90b3R5cGUuc2V0RGF0YT1mdW5jdGlvbih0LGUsbil7dGhpcy5zZXRBdHRyaWJ1dGUo
dCwiZGF0YS0iK2Usbil9LGUucHJvdG90eXBlLmdldERhdGE9ZnVuY3Rpb24odCxlKXtyZXR1cm4g
dGhpcy5nZXRBdHRyaWJ1dGUodCwiZGF0YS0iK2UpfSxlLnByb3RvdHlwZS5nZXRDb21wdXRlZFN0
eWxlPWZ1bmN0aW9uKHQpe3JldHVybiBnZXRDb21wdXRlZFN0eWxlKHQpfSxlLnByb3RvdHlwZS5z
dXBwb3J0c1dlYkFuaW1hdGlvbj1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBF
bGVtZW50LnByb3RvdHlwZS5hbmltYXRlfSxlLnByb3RvdHlwZS5wZXJmb3JtYW5jZU5vdz1mdW5j
dGlvbigpe3JldHVybiB3aW5kb3cucGVyZm9ybWFuY2UmJndpbmRvdy5wZXJmb3JtYW5jZS5ub3c/
d2luZG93LnBlcmZvcm1hbmNlLm5vdygpOihuZXcgRGF0ZSkuZ2V0VGltZSgpfSxlLnByb3RvdHlw
ZS5zdXBwb3J0c0Nvb2tpZXM9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sZS5wcm90b3R5cGUuZ2V0Q29v
a2llPWZ1bmN0aW9uKHQpe3JldHVybiBuLmkoTS5lKShkb2N1bWVudC5jb29raWUsdCl9LGUucHJv
dG90eXBlLnNldENvb2tpZT1mdW5jdGlvbih0LGUpe2RvY3VtZW50LmNvb2tpZT1lbmNvZGVVUklD
b21wb25lbnQodCkrIj0iK2VuY29kZVVSSUNvbXBvbmVudChlKX0sZX0oRiksej1udWxsLFo9TS5j
LFk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2YXIgbj10LmNhbGwodGhpcyl8fHRoaXM7cmV0
dXJuIG4uX2RvYz1lLG4uX2luaXQoKSxufXJldHVybiBOLmEoZSx0KSxlLnByb3RvdHlwZS5faW5p
dD1mdW5jdGlvbigpe3RoaXMuX2xvY2F0aW9uPXIoKS5nZXRMb2NhdGlvbigpLHRoaXMuX2hpc3Rv
cnk9cigpLmdldEhpc3RvcnkoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJs
b2NhdGlvbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sb2NhdGlvbn0sZW51bWVyYWJs
ZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5nZXRCYXNlSHJlZkZyb21ET009ZnVu
Y3Rpb24oKXtyZXR1cm4gcigpLmdldEJhc2VIcmVmKHRoaXMuX2RvYyl9LGUucHJvdG90eXBlLm9u
UG9wU3RhdGU9ZnVuY3Rpb24odCl7cigpLmdldEdsb2JhbEV2ZW50VGFyZ2V0KHRoaXMuX2RvYywi
d2luZG93IikuYWRkRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLHQsITEpfSxlLnByb3RvdHlwZS5v
bkhhc2hDaGFuZ2U9ZnVuY3Rpb24odCl7cigpLmdldEdsb2JhbEV2ZW50VGFyZ2V0KHRoaXMuX2Rv
Yywid2luZG93IikuYWRkRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsdCwhMSl9LE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwicGF0aG5hbWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1
cm4gdGhpcy5fbG9jYXRpb24ucGF0aG5hbWV9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9sb2NhdGlv
bi5wYXRobmFtZT10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShlLnByb3RvdHlwZSwic2VhcmNoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRo
aXMuX2xvY2F0aW9uLnNlYXJjaH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImhhc2giLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1
cm4gdGhpcy5fbG9jYXRpb24uaGFzaH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxl
LnByb3RvdHlwZS5wdXNoU3RhdGU9ZnVuY3Rpb24odCxlLG4pe3MoKT90aGlzLl9oaXN0b3J5LnB1
c2hTdGF0ZSh0LGUsbik6dGhpcy5fbG9jYXRpb24uaGFzaD1ufSxlLnByb3RvdHlwZS5yZXBsYWNl
U3RhdGU9ZnVuY3Rpb24odCxlLG4pe3MoKT90aGlzLl9oaXN0b3J5LnJlcGxhY2VTdGF0ZSh0LGUs
bik6dGhpcy5fbG9jYXRpb24uaGFzaD1ufSxlLnByb3RvdHlwZS5mb3J3YXJkPWZ1bmN0aW9uKCl7
dGhpcy5faGlzdG9yeS5mb3J3YXJkKCl9LGUucHJvdG90eXBlLmJhY2s9ZnVuY3Rpb24oKXt0aGlz
Ll9oaXN0b3J5LmJhY2soKX0sZX0oTS5mKTtZLmRlY29yYXRvcnM9W3t0eXBlOmouRH1dLFkuY3Rv
clBhcmFtZXRlcnM9ZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0
eXBlOmouSCxhcmdzOltaXX1dfV19Oy8qKgorICogQGxpY2Vuc2UKKyAqIENvcHlyaWdodCBHb29n
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisgKiBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCisg
Ki8KK3ZhciBLPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9kb2M9dCx0aGlzLl9kb209
cigpfXJldHVybiB0LnByb3RvdHlwZS5hZGRUYWc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAw
PT09ZSYmKGU9ITEpLHQ/dGhpcy5fZ2V0T3JDcmVhdGVFbGVtZW50KHQsZSk6bnVsbH0sdC5wcm90
b3R5cGUuYWRkVGFncz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJuIHZvaWQgMD09PWUm
JihlPSExKSx0P3QucmVkdWNlKGZ1bmN0aW9uKHQscil7cmV0dXJuIHImJnQucHVzaChuLl9nZXRP
ckNyZWF0ZUVsZW1lbnQocixlKSksdH0sW10pOltdfSx0LnByb3RvdHlwZS5nZXRUYWc9ZnVuY3Rp
b24odCl7cmV0dXJuIHQ/dGhpcy5fZG9tLnF1ZXJ5U2VsZWN0b3IodGhpcy5fZG9jLCJtZXRhWyIr
dCsiXSIpOm51bGx9LHQucHJvdG90eXBlLmdldFRhZ3M9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJu
W107dmFyIGU9dGhpcy5fZG9tLnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5fZG9jLCJtZXRhWyIrdCsi
XSIpO3JldHVybiBlP1tdLnNsaWNlLmNhbGwoZSk6W119LHQucHJvdG90eXBlLnVwZGF0ZVRhZz1m
dW5jdGlvbih0LGUpe2lmKCF0KXJldHVybiBudWxsO2U9ZXx8dGhpcy5fcGFyc2VTZWxlY3Rvcih0
KTt2YXIgbj10aGlzLmdldFRhZyhlKTtyZXR1cm4gbj90aGlzLl9zZXRNZXRhRWxlbWVudEF0dHJp
YnV0ZXModCxuKTp0aGlzLl9nZXRPckNyZWF0ZUVsZW1lbnQodCwhMCl9LHQucHJvdG90eXBlLnJl
bW92ZVRhZz1mdW5jdGlvbih0KXt0aGlzLnJlbW92ZVRhZ0VsZW1lbnQodGhpcy5nZXRUYWcodCkp
fSx0LnByb3RvdHlwZS5yZW1vdmVUYWdFbGVtZW50PWZ1bmN0aW9uKHQpe3QmJnRoaXMuX2RvbS5y
ZW1vdmUodCl9LHQucHJvdG90eXBlLl9nZXRPckNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24odCxlKXtp
Zih2b2lkIDA9PT1lJiYoZT0hMSksIWUpe3ZhciBuPXRoaXMuX3BhcnNlU2VsZWN0b3IodCkscj10
aGlzLmdldFRhZyhuKTtpZihyJiZ0aGlzLl9jb250YWluc0F0dHJpYnV0ZXModCxyKSlyZXR1cm4g
cn12YXIgbz10aGlzLl9kb20uY3JlYXRlRWxlbWVudCgibWV0YSIpO3RoaXMuX3NldE1ldGFFbGVt
ZW50QXR0cmlidXRlcyh0LG8pO3ZhciBpPXRoaXMuX2RvbS5nZXRFbGVtZW50c0J5VGFnTmFtZSh0
aGlzLl9kb2MsImhlYWQiKVswXTtyZXR1cm4gdGhpcy5fZG9tLmFwcGVuZENoaWxkKGksbyksb30s
dC5wcm90b3R5cGUuX3NldE1ldGFFbGVtZW50QXR0cmlidXRlcz1mdW5jdGlvbih0LGUpe3ZhciBu
PXRoaXM7cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24ocil7cmV0dXJuIG4u
X2RvbS5zZXRBdHRyaWJ1dGUoZSxyLHRbcl0pfSksZX0sdC5wcm90b3R5cGUuX3BhcnNlU2VsZWN0
b3I9ZnVuY3Rpb24odCl7dmFyIGU9dC5uYW1lPyJuYW1lIjoicHJvcGVydHkiO3JldHVybiBlKyc9
IicrdFtlXSsnIid9LHQucHJvdG90eXBlLl9jb250YWluc0F0dHJpYnV0ZXM9ZnVuY3Rpb24odCxl
KXt2YXIgbj10aGlzO3JldHVybiBPYmplY3Qua2V5cyh0KS5ldmVyeShmdW5jdGlvbihyKXtyZXR1
cm4gbi5fZG9tLmdldEF0dHJpYnV0ZShlLHIpPT09dFtyXX0pfSx0fSgpO0suZGVjb3JhdG9ycz1b
e3R5cGU6ai5EfV0sSy5jdG9yUGFyYW1ldGVycz1mdW5jdGlvbigpe3JldHVyblt7dHlwZTp2b2lk
IDAsZGVjb3JhdG9yczpbe3R5cGU6ai5ILGFyZ3M6W1pdfV19XX07LyoqCisgKiBAbGljZW5zZQor
ICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKyAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1
bGFyLmlvL2xpY2Vuc2UKKyAqLwordmFyIFc9bmV3IGouSSgiVFJBTlNJVElPTl9JRCIpLFE9W3tw
cm92aWRlOmoudix1c2VGYWN0b3J5OnUsZGVwczpbVyxaLGouQV0sbXVsdGk6ITB9XSxKPWZ1bmN0
aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5pbml0PWZ1bmN0aW9uKCl7bi5pKGouSikobmV3
IHQpfSx0LnByb3RvdHlwZS5hZGRUb1dpbmRvdz1mdW5jdGlvbih0KXtqLkcuZ2V0QW5ndWxhclRl
c3RhYmlsaXR5PWZ1bmN0aW9uKGUsbil7dm9pZCAwPT09biYmKG49ITApO3ZhciByPXQuZmluZFRl
c3RhYmlsaXR5SW5UcmVlKGUsbik7aWYobnVsbD09cil0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5v
dCBmaW5kIHRlc3RhYmlsaXR5IGZvciBlbGVtZW50LiIpO3JldHVybiByfSxqLkcuZ2V0QWxsQW5n
dWxhclRlc3RhYmlsaXRpZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdC5nZXRBbGxUZXN0YWJpbGl0aWVz
KCl9LGouRy5nZXRBbGxBbmd1bGFyUm9vdEVsZW1lbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZ2V0
QWxsUm9vdEVsZW1lbnRzKCl9O3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlPWouRy5nZXRBbGxBbmd1
bGFyVGVzdGFiaWxpdGllcygpLG49ZS5sZW5ndGgscj0hMSxvPWZ1bmN0aW9uKGUpe3I9cnx8ZSww
PT0tLW4mJnQocil9O2UuZm9yRWFjaChmdW5jdGlvbih0KXt0LndoZW5TdGFibGUobyl9KX07ai5H
LmZyYW1ld29ya1N0YWJpbGl6ZXJzfHwoai5HLmZyYW1ld29ya1N0YWJpbGl6ZXJzPVtdKSxqLkcu
ZnJhbWV3b3JrU3RhYmlsaXplcnMucHVzaChlKX0sdC5wcm90b3R5cGUuZmluZFRlc3RhYmlsaXR5
SW5UcmVlPWZ1bmN0aW9uKHQsZSxuKXtpZihudWxsPT1lKXJldHVybiBudWxsO3ZhciBvPXQuZ2V0
VGVzdGFiaWxpdHkoZSk7cmV0dXJuIG51bGwhPW8/bzpuP3IoKS5pc1NoYWRvd1Jvb3QoZSk/dGhp
cy5maW5kVGVzdGFiaWxpdHlJblRyZWUodCxyKCkuZ2V0SG9zdChlKSwhMCk6dGhpcy5maW5kVGVz
dGFiaWxpdHlJblRyZWUodCxyKCkucGFyZW50RWxlbWVudChlKSwhMCk6bnVsbH0sdH0oKSwkPWZ1
bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9kb2M9dH1yZXR1cm4gdC5wcm90b3R5cGUuZ2V0
VGl0bGU9ZnVuY3Rpb24oKXtyZXR1cm4gcigpLmdldFRpdGxlKHRoaXMuX2RvYyl9LHQucHJvdG90
eXBlLnNldFRpdGxlPWZ1bmN0aW9uKHQpe3IoKS5zZXRUaXRsZSh0aGlzLl9kb2MsdCl9LHR9KCk7
JC5kZWNvcmF0b3JzPVt7dHlwZTpqLkR9XSwkLmN0b3JQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7cmV0
dXJuW3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpqLkgsYXJnczpbWl19XX1dfTt2YXIg
WCx0dD17QXBwbGljYXRpb25SZWY6ai5CLE5nWm9uZTpqLnJ9LGV0PSJwcm9iZSIsbnQ9ImNvcmVU
b2tlbnMiLHJ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMubmFtZT10LHRoaXMudG9r
ZW49ZX1yZXR1cm4gdH0oKSxvdD1be3Byb3ZpZGU6ai52LHVzZUZhY3Rvcnk6cCxkZXBzOltbcnQs
bmV3IGouTF0sW2oudyxuZXcgai5MXV0sbXVsdGk6ITB9XSxpdD1uZXcgai5JKCJFdmVudE1hbmFn
ZXJQbHVnaW5zIiksYXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dmFyIG49dGhpczt0aGlz
Ll96b25lPWUsdGhpcy5fZXZlbnROYW1lVG9QbHVnaW49bmV3IE1hcCx0LmZvckVhY2goZnVuY3Rp
b24odCl7cmV0dXJuIHQubWFuYWdlcj1ufSksdGhpcy5fcGx1Z2lucz10LnNsaWNlKCkucmV2ZXJz
ZSgpfXJldHVybiB0LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSxuKXty
ZXR1cm4gdGhpcy5fZmluZFBsdWdpbkZvcihlKS5hZGRFdmVudExpc3RlbmVyKHQsZSxuKX0sdC5w
cm90b3R5cGUuYWRkR2xvYmFsRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRo
aXMuX2ZpbmRQbHVnaW5Gb3IoZSkuYWRkR2xvYmFsRXZlbnRMaXN0ZW5lcih0LGUsbil9LHQucHJv
dG90eXBlLmdldFpvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fem9uZX0sdC5wcm90b3R5cGUu
X2ZpbmRQbHVnaW5Gb3I9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZXZlbnROYW1lVG9QbHVnaW4u
Z2V0KHQpO2lmKGUpcmV0dXJuIGU7Zm9yKHZhciBuPXRoaXMuX3BsdWdpbnMscj0wO3I8bi5sZW5n
dGg7cisrKXt2YXIgbz1uW3JdO2lmKG8uc3VwcG9ydHModCkpcmV0dXJuIHRoaXMuX2V2ZW50TmFt
ZVRvUGx1Z2luLnNldCh0LG8pLG99dGhyb3cgbmV3IEVycm9yKCJObyBldmVudCBtYW5hZ2VyIHBs
dWdpbiBmb3VuZCBmb3IgZXZlbnQgIit0KX0sdH0oKTthdC5kZWNvcmF0b3JzPVt7dHlwZTpqLkR9
XSxhdC5jdG9yUGFyYW1ldGVycz1mdW5jdGlvbigpe3JldHVyblt7dHlwZTpBcnJheSxkZWNvcmF0
b3JzOlt7dHlwZTpqLkgsYXJnczpbaXRdfV19LHt0eXBlOmoucn1dfTt2YXIgc3Q9ZnVuY3Rpb24o
KXtmdW5jdGlvbiB0KHQpe3RoaXMuX2RvYz10fXJldHVybiB0LnByb3RvdHlwZS5zdXBwb3J0cz1m
dW5jdGlvbih0KXt9LHQucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24odCxlLG4p
e30sdC5wcm90b3R5cGUuYWRkR2xvYmFsRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUsbil7dmFy
IG89cigpLmdldEdsb2JhbEV2ZW50VGFyZ2V0KHRoaXMuX2RvYyx0KTtpZighbyl0aHJvdyBuZXcg
RXJyb3IoIlVuc3VwcG9ydGVkIGV2ZW50IHRhcmdldCAiK28rIiBmb3IgZXZlbnQgIitlKTtyZXR1
cm4gdGhpcy5hZGRFdmVudExpc3RlbmVyKG8sZSxuKX0sdH0oKSx1dD1mdW5jdGlvbigpe2Z1bmN0
aW9uIHQoKXt0aGlzLl9zdHlsZXNTZXQ9bmV3IFNldH1yZXR1cm4gdC5wcm90b3R5cGUuYWRkU3R5
bGVzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1uZXcgU2V0O3QuZm9yRWFjaChmdW5jdGlvbih0
KXtlLl9zdHlsZXNTZXQuaGFzKHQpfHwoZS5fc3R5bGVzU2V0LmFkZCh0KSxuLmFkZCh0KSl9KSx0
aGlzLm9uU3R5bGVzQWRkZWQobil9LHQucHJvdG90eXBlLm9uU3R5bGVzQWRkZWQ9ZnVuY3Rpb24o
dCl7fSx0LnByb3RvdHlwZS5nZXRBbGxTdHlsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gQXJyYXkuZnJv
bSh0aGlzLl9zdHlsZXNTZXQpfSx0fSgpO3V0LmRlY29yYXRvcnM9W3t0eXBlOmouRH1dLHV0LmN0
b3JQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7cmV0dXJuW119O3ZhciBjdD1mdW5jdGlvbih0KXtmdW5j
dGlvbiBlKGUpe3ZhciBuPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fZG9jPWUsbi5faG9z
dE5vZGVzPW5ldyBTZXQsbi5fc3R5bGVOb2Rlcz1uZXcgU2V0LG4uX2hvc3ROb2Rlcy5hZGQoZS5o
ZWFkKSxufXJldHVybiBOLmEoZSx0KSxlLnByb3RvdHlwZS5fYWRkU3R5bGVzVG9Ib3N0PWZ1bmN0
aW9uKHQsZSl7dmFyIG49dGhpczt0LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIHI9bi5fZG9jLmNy
ZWF0ZUVsZW1lbnQoInN0eWxlIik7ci50ZXh0Q29udGVudD10LG4uX3N0eWxlTm9kZXMuYWRkKGUu
YXBwZW5kQ2hpbGQocikpfSl9LGUucHJvdG90eXBlLmFkZEhvc3Q9ZnVuY3Rpb24odCl7dGhpcy5f
YWRkU3R5bGVzVG9Ib3N0KHRoaXMuX3N0eWxlc1NldCx0KSx0aGlzLl9ob3N0Tm9kZXMuYWRkKHQp
fSxlLnByb3RvdHlwZS5yZW1vdmVIb3N0PWZ1bmN0aW9uKHQpe3RoaXMuX2hvc3ROb2Rlcy5kZWxl
dGUodCl9LGUucHJvdG90eXBlLm9uU3R5bGVzQWRkZWQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0
aGlzLl9ob3N0Tm9kZXMuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gZS5fYWRkU3R5bGVzVG9I
b3N0KHQsbil9KX0sZS5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9zdHls
ZU5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHIoKS5yZW1vdmUodCl9KX0sZX0odXQp
O2N0LmRlY29yYXRvcnM9W3t0eXBlOmouRH1dLGN0LmN0b3JQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7
cmV0dXJuW3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpqLkgsYXJnczpbWl19XX1dfTsv
KioKKyAqIEBsaWNlbnNlCisgKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KKyAqCisgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBN
SVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQorICovCit2YXIgbHQ9e3N2ZzoiaHR0cDov
L3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1s
Iix4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3Lncz
Lm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3ht
bG5zLyJ9LHB0PS8lQ09NUCUvZyxmdD0iJUNPTVAlIixkdD0iX25naG9zdC0iK2Z0LGh0PSJfbmdj
b250ZW50LSIrZnQseXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5ldmVudE1hbmFn
ZXI9dCx0aGlzLnNoYXJlZFN0eWxlc0hvc3Q9ZSx0aGlzLnJlbmRlcmVyQnlDb21wSWQ9bmV3IE1h
cCx0aGlzLmRlZmF1bHRSZW5kZXJlcj1uZXcgbXQodCl9cmV0dXJuIHQucHJvdG90eXBlLmNyZWF0
ZVJlbmRlcmVyPWZ1bmN0aW9uKHQsZSl7aWYoIXR8fCFlKXJldHVybiB0aGlzLmRlZmF1bHRSZW5k
ZXJlcjtzd2l0Y2goZS5lbmNhcHN1bGF0aW9uKXtjYXNlIGouTS5FbXVsYXRlZDp2YXIgbj10aGlz
LnJlbmRlcmVyQnlDb21wSWQuZ2V0KGUuaWQpO3JldHVybiBufHwobj1uZXcgdnQodGhpcy5ldmVu
dE1hbmFnZXIsdGhpcy5zaGFyZWRTdHlsZXNIb3N0LGUpLHRoaXMucmVuZGVyZXJCeUNvbXBJZC5z
ZXQoZS5pZCxuKSksbi5hcHBseVRvSG9zdCh0KSxuO2Nhc2Ugai5NLk5hdGl2ZTpyZXR1cm4gbmV3
IF90KHRoaXMuZXZlbnRNYW5hZ2VyLHRoaXMuc2hhcmVkU3R5bGVzSG9zdCx0LGUpO2RlZmF1bHQ6
aWYoIXRoaXMucmVuZGVyZXJCeUNvbXBJZC5oYXMoZS5pZCkpe3ZhciByPXkoZS5pZCxlLnN0eWxl
cyxbXSk7dGhpcy5zaGFyZWRTdHlsZXNIb3N0LmFkZFN0eWxlcyhyKSx0aGlzLnJlbmRlcmVyQnlD
b21wSWQuc2V0KGUuaWQsdGhpcy5kZWZhdWx0UmVuZGVyZXIpfXJldHVybiB0aGlzLmRlZmF1bHRS
ZW5kZXJlcn19LHQucHJvdG90eXBlLmJlZ2luPWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5lbmQ9
ZnVuY3Rpb24oKXt9LHR9KCk7eXQuZGVjb3JhdG9ycz1be3R5cGU6ai5EfV0seXQuY3RvclBhcmFt
ZXRlcnM9ZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6YXR9LHt0eXBlOmN0fV19O3ZhciBtdD1mdW5j
dGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5ldmVudE1hbmFnZXI9dCx0aGlzLmRhdGE9T2JqZWN0
LmNyZWF0ZShudWxsKX1yZXR1cm4gdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe30sdC5w
cm90b3R5cGUuY3JlYXRlRWxlbWVudD1mdW5jdGlvbih0LGUpe3JldHVybiBlP2RvY3VtZW50LmNy
ZWF0ZUVsZW1lbnROUyhsdFtlXSx0KTpkb2N1bWVudC5jcmVhdGVFbGVtZW50KHQpfSx0LnByb3Rv
dHlwZS5jcmVhdGVDb21tZW50PWZ1bmN0aW9uKHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVDb21t
ZW50KHQpfSx0LnByb3RvdHlwZS5jcmVhdGVUZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBkb2N1bWVu
dC5jcmVhdGVUZXh0Tm9kZSh0KX0sdC5wcm90b3R5cGUuYXBwZW5kQ2hpbGQ9ZnVuY3Rpb24odCxl
KXt0LmFwcGVuZENoaWxkKGUpfSx0LnByb3RvdHlwZS5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24odCxl
LG4pe3QmJnQuaW5zZXJ0QmVmb3JlKGUsbil9LHQucHJvdG90eXBlLnJlbW92ZUNoaWxkPWZ1bmN0
aW9uKHQsZSl7dCYmdC5yZW1vdmVDaGlsZChlKX0sdC5wcm90b3R5cGUuc2VsZWN0Um9vdEVsZW1l
bnQ9ZnVuY3Rpb24odCl7dmFyIGU9InN0cmluZyI9PXR5cGVvZiB0P2RvY3VtZW50LnF1ZXJ5U2Vs
ZWN0b3IodCk6dDtpZighZSl0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzZWxlY3RvciAiJyt0KyciIGRp
ZCBub3QgbWF0Y2ggYW55IGVsZW1lbnRzJyk7cmV0dXJuIGUudGV4dENvbnRlbnQ9IiIsZX0sdC5w
cm90b3R5cGUucGFyZW50Tm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5wYXJlbnROb2RlfSx0LnBy
b3RvdHlwZS5uZXh0U2libGluZz1mdW5jdGlvbih0KXtyZXR1cm4gdC5uZXh0U2libGluZ30sdC5w
cm90b3R5cGUuc2V0QXR0cmlidXRlPWZ1bmN0aW9uKHQsZSxuLHIpe2lmKHIpe2U9cisiOiIrZTt2
YXIgbz1sdFtyXTtvP3Quc2V0QXR0cmlidXRlTlMobyxlLG4pOnQuc2V0QXR0cmlidXRlKGUsbil9
ZWxzZSB0LnNldEF0dHJpYnV0ZShlLG4pfSx0LnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGU9ZnVu
Y3Rpb24odCxlLG4pe2lmKG4pe3ZhciByPWx0W25dO3I/dC5yZW1vdmVBdHRyaWJ1dGVOUyhyLGUp
OnQucmVtb3ZlQXR0cmlidXRlKG4rIjoiK2UpfWVsc2UgdC5yZW1vdmVBdHRyaWJ1dGUoZSl9LHQu
cHJvdG90eXBlLmFkZENsYXNzPWZ1bmN0aW9uKHQsZSl7dC5jbGFzc0xpc3QuYWRkKGUpfSx0LnBy
b3RvdHlwZS5yZW1vdmVDbGFzcz1mdW5jdGlvbih0LGUpe3QuY2xhc3NMaXN0LnJlbW92ZShlKX0s
dC5wcm90b3R5cGUuc2V0U3R5bGU9ZnVuY3Rpb24odCxlLG4scil7ciZqLk4uRGFzaENhc2U/dC5z
dHlsZS5zZXRQcm9wZXJ0eShlLG4sciZqLk4uSW1wb3J0YW50PyJpbXBvcnRhbnQiOiIiKTp0LnN0
eWxlW2VdPW59LHQucHJvdG90eXBlLnJlbW92ZVN0eWxlPWZ1bmN0aW9uKHQsZSxuKXtuJmouTi5E
YXNoQ2FzZT90LnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpOnQuc3R5bGVbZV09IiJ9LHQucHJvdG90
eXBlLnNldFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxuKXtnKGUsInByb3BlcnR5IiksdFtlXT1ufSx0
LnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3Qubm9kZVZhbHVlPWV9LHQucHJvdG90
eXBlLmxpc3Rlbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGcoZSwibGlzdGVuZXIiKSwic3RyaW5n
Ij09dHlwZW9mIHQ/dGhpcy5ldmVudE1hbmFnZXIuYWRkR2xvYmFsRXZlbnRMaXN0ZW5lcih0LGUs
bShuKSk6dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0LGUsbShuKSl9LHR9KCks
Z3Q9IkAiLmNoYXJDb2RlQXQoMCksdnQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFy
IG89dC5jYWxsKHRoaXMsZSl8fHRoaXM7by5jb21wb25lbnQ9cjt2YXIgaT15KHIuaWQsci5zdHls
ZXMsW10pO3JldHVybiBuLmFkZFN0eWxlcyhpKSxvLmNvbnRlbnRBdHRyPWQoci5pZCksby5ob3N0
QXR0cj1oKHIuaWQpLG99cmV0dXJuIE4uYShlLHQpLGUucHJvdG90eXBlLmFwcGx5VG9Ib3N0PWZ1
bmN0aW9uKGUpe3QucHJvdG90eXBlLnNldEF0dHJpYnV0ZS5jYWxsKHRoaXMsZSx0aGlzLmhvc3RB
dHRyLCIiKX0sZS5wcm90b3R5cGUuY3JlYXRlRWxlbWVudD1mdW5jdGlvbihlLG4pe3ZhciByPXQu
cHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQuY2FsbCh0aGlzLGUsbik7cmV0dXJuIHQucHJvdG90eXBl
LnNldEF0dHJpYnV0ZS5jYWxsKHRoaXMscix0aGlzLmNvbnRlbnRBdHRyLCIiKSxyfSxlfShtdCks
X3Q9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixvKXt2YXIgaT10LmNhbGwodGhpcyxlKXx8
dGhpcztpLnNoYXJlZFN0eWxlc0hvc3Q9bixpLmhvc3RFbD1yLGkuY29tcG9uZW50PW8saS5zaGFk
b3dSb290PXIuY3JlYXRlU2hhZG93Um9vdCgpLGkuc2hhcmVkU3R5bGVzSG9zdC5hZGRIb3N0KGku
c2hhZG93Um9vdCk7Zm9yKHZhciBhPXkoby5pZCxvLnN0eWxlcyxbXSkscz0wO3M8YS5sZW5ndGg7
cysrKXt2YXIgdT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3UudGV4dENvbnRlbnQ9
YVtzXSxpLnNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQodSl9cmV0dXJuIGl9cmV0dXJuIE4uYShlLHQp
LGUucHJvdG90eXBlLm5vZGVPclNoYWRvd1Jvb3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT10aGlz
Lmhvc3RFbD90aGlzLnNoYWRvd1Jvb3Q6dH0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigp
e3RoaXMuc2hhcmVkU3R5bGVzSG9zdC5yZW1vdmVIb3N0KHRoaXMuc2hhZG93Um9vdCl9LGUucHJv
dG90eXBlLmFwcGVuZENoaWxkPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHQucHJvdG90eXBlLmFwcGVu
ZENoaWxkLmNhbGwodGhpcyx0aGlzLm5vZGVPclNoYWRvd1Jvb3QoZSksbil9LGUucHJvdG90eXBl
Lmluc2VydEJlZm9yZT1mdW5jdGlvbihlLG4scil7cmV0dXJuIHQucHJvdG90eXBlLmluc2VydEJl
Zm9yZS5jYWxsKHRoaXMsdGhpcy5ub2RlT3JTaGFkb3dSb290KGUpLG4scil9LGUucHJvdG90eXBl
LnJlbW92ZUNoaWxkPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHQucHJvdG90eXBlLnJlbW92ZUNoaWxk
LmNhbGwodGhpcyx0aGlzLm5vZGVPclNoYWRvd1Jvb3QoZSksbil9LGUucHJvdG90eXBlLnBhcmVu
dE5vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubm9kZU9yU2hhZG93Um9vdCh0LnByb3RvdHlw
ZS5wYXJlbnROb2RlLmNhbGwodGhpcyx0aGlzLm5vZGVPclNoYWRvd1Jvb3QoZSkpKX0sZX0obXQp
LGJ0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuIHQuY2FsbCh0aGlzLGUpfHx0aGlz
fXJldHVybiBOLmEoZSx0KSxlLnByb3RvdHlwZS5zdXBwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4h
MH0sZS5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQu
YWRkRXZlbnRMaXN0ZW5lcihlLG4sITEpLGZ1bmN0aW9uKCl7cmV0dXJuIHQucmVtb3ZlRXZlbnRM
aXN0ZW5lcihlLG4sITEpfX0sZX0oc3QpO2J0LmRlY29yYXRvcnM9W3t0eXBlOmouRH1dLGJ0LmN0
b3JQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7
dHlwZTpqLkgsYXJnczpbWl19XX1dfTsvKioKKyAqIEBsaWNlbnNlCisgKiBDb3B5cmlnaHQgR29v
Z2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorICog
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQor
ICovCit2YXIgd3Q9e3BhbjohMCxwYW5zdGFydDohMCxwYW5tb3ZlOiEwLHBhbmVuZDohMCxwYW5j
YW5jZWw6ITAscGFubGVmdDohMCxwYW5yaWdodDohMCxwYW51cDohMCxwYW5kb3duOiEwLHBpbmNo
OiEwLHBpbmNoc3RhcnQ6ITAscGluY2htb3ZlOiEwLHBpbmNoZW5kOiEwLHBpbmNoY2FuY2VsOiEw
LHBpbmNoaW46ITAscGluY2hvdXQ6ITAscHJlc3M6ITAscHJlc3N1cDohMCxyb3RhdGU6ITAscm90
YXRlc3RhcnQ6ITAscm90YXRlbW92ZTohMCxyb3RhdGVlbmQ6ITAscm90YXRlY2FuY2VsOiEwLHN3
aXBlOiEwLHN3aXBlbGVmdDohMCxzd2lwZXJpZ2h0OiEwLHN3aXBldXA6ITAsc3dpcGVkb3duOiEw
LHRhcDohMH0sQ3Q9bmV3IGouSSgiSGFtbWVyR2VzdHVyZUNvbmZpZyIpLEV0PWZ1bmN0aW9uKCl7
ZnVuY3Rpb24gdCgpe3RoaXMuZXZlbnRzPVtdLHRoaXMub3ZlcnJpZGVzPXt9fXJldHVybiB0LnBy
b3RvdHlwZS5idWlsZEhhbW1lcj1mdW5jdGlvbih0KXt2YXIgZT1uZXcgSGFtbWVyKHQpO2UuZ2V0
KCJwaW5jaCIpLnNldCh7ZW5hYmxlOiEwfSksZS5nZXQoInJvdGF0ZSIpLnNldCh7ZW5hYmxlOiEw
fSk7Zm9yKHZhciBuIGluIHRoaXMub3ZlcnJpZGVzKWUuZ2V0KG4pLnNldCh0aGlzLm92ZXJyaWRl
c1tuXSk7cmV0dXJuIGV9LHR9KCk7RXQuZGVjb3JhdG9ycz1be3R5cGU6ai5EfV0sRXQuY3RvclBh
cmFtZXRlcnM9ZnVuY3Rpb24oKXtyZXR1cm5bXX07dmFyIE90PWZ1bmN0aW9uKHQpe2Z1bmN0aW9u
IGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gci5fY29uZmlnPW4scn1y
ZXR1cm4gTi5hKGUsdCksZS5wcm90b3R5cGUuc3VwcG9ydHM9ZnVuY3Rpb24odCl7aWYoIXd0Lmhh
c093blByb3BlcnR5KHQudG9Mb3dlckNhc2UoKSkmJiF0aGlzLmlzQ3VzdG9tRXZlbnQodCkpcmV0
dXJuITE7aWYoIXdpbmRvdy5IYW1tZXIpdGhyb3cgbmV3IEVycm9yKCJIYW1tZXIuanMgaXMgbm90
IGxvYWRlZCwgY2FuIG5vdCBiaW5kICIrdCsiIGV2ZW50Iik7cmV0dXJuITB9LGUucHJvdG90eXBl
LmFkZEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMsbz10aGlzLm1hbmFn
ZXIuZ2V0Wm9uZSgpO3JldHVybiBlPWUudG9Mb3dlckNhc2UoKSxvLnJ1bk91dHNpZGVBbmd1bGFy
KGZ1bmN0aW9uKCl7dmFyIGk9ci5fY29uZmlnLmJ1aWxkSGFtbWVyKHQpLGE9ZnVuY3Rpb24odCl7
by5ydW5HdWFyZGVkKGZ1bmN0aW9uKCl7bih0KX0pfTtyZXR1cm4gaS5vbihlLGEpLGZ1bmN0aW9u
KCl7cmV0dXJuIGkub2ZmKGUsYSl9fSl9LGUucHJvdG90eXBlLmlzQ3VzdG9tRXZlbnQ9ZnVuY3Rp
b24odCl7cmV0dXJuIHRoaXMuX2NvbmZpZy5ldmVudHMuaW5kZXhPZih0KT4tMX0sZX0oc3QpO090
LmRlY29yYXRvcnM9W3t0eXBlOmouRH1dLE90LmN0b3JQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7cmV0
dXJuW3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpqLkgsYXJnczpbWl19XX0se3R5cGU6
RXQsZGVjb3JhdG9yczpbe3R5cGU6ai5ILGFyZ3M6W0N0XX1dfV19Oy8qKgorICogQGxpY2Vuc2UK
KyAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5n
dWxhci5pby9saWNlbnNlCisgKi8KK3ZhciB4dD1bImFsdCIsImNvbnRyb2wiLCJtZXRhIiwic2hp
ZnQiXSxQdD17YWx0OmZ1bmN0aW9uKHQpe3JldHVybiB0LmFsdEtleX0sY29udHJvbDpmdW5jdGlv
bih0KXtyZXR1cm4gdC5jdHJsS2V5fSxtZXRhOmZ1bmN0aW9uKHQpe3JldHVybiB0Lm1ldGFLZXl9
LHNoaWZ0OmZ1bmN0aW9uKHQpe3JldHVybiB0LnNoaWZ0S2V5fX0sU3Q9ZnVuY3Rpb24odCl7ZnVu
Y3Rpb24gZShlKXtyZXR1cm4gdC5jYWxsKHRoaXMsZSl8fHRoaXN9cmV0dXJuIE4uYShlLHQpLGUu
cHJvdG90eXBlLnN1cHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT1lLnBhcnNlRXZlbnRO
YW1lKHQpfSxlLnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsbixvKXt2YXIg
aT1lLnBhcnNlRXZlbnROYW1lKG4pLGE9ZS5ldmVudENhbGxiYWNrKGkuZnVsbEtleSxvLHRoaXMu
bWFuYWdlci5nZXRab25lKCkpO3JldHVybiB0aGlzLm1hbmFnZXIuZ2V0Wm9uZSgpLnJ1bk91dHNp
ZGVBbmd1bGFyKGZ1bmN0aW9uKCl7cmV0dXJuIHIoKS5vbkFuZENhbmNlbCh0LGkuZG9tRXZlbnRO
YW1lLGEpfSl9LGUucGFyc2VFdmVudE5hbWU9ZnVuY3Rpb24odCl7dmFyIG49dC50b0xvd2VyQ2Fz
ZSgpLnNwbGl0KCIuIikscj1uLnNoaWZ0KCk7aWYoMD09PW4ubGVuZ3RofHwia2V5ZG93biIhPT1y
JiYia2V5dXAiIT09cilyZXR1cm4gbnVsbDt2YXIgbz1lLl9ub3JtYWxpemVLZXkobi5wb3AoKSks
aT0iIjtpZih4dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uaW5kZXhPZih0KTtlPi0xJiYo
bi5zcGxpY2UoZSwxKSxpKz10KyIuIil9KSxpKz1vLDAhPW4ubGVuZ3RofHwwPT09by5sZW5ndGgp
cmV0dXJuIG51bGw7dmFyIGE9e307cmV0dXJuIGEuZG9tRXZlbnROYW1lPXIsYS5mdWxsS2V5PWks
YX0sZS5nZXRFdmVudEZ1bGxLZXk9ZnVuY3Rpb24odCl7dmFyIGU9IiIsbj1yKCkuZ2V0RXZlbnRL
ZXkodCk7cmV0dXJuIG49bi50b0xvd2VyQ2FzZSgpLCIgIj09PW4/bj0ic3BhY2UiOiIuIj09PW4m
JihuPSJkb3QiKSx4dC5mb3JFYWNoKGZ1bmN0aW9uKHIpe2lmKHIhPW4peygwLFB0W3JdKSh0KSYm
KGUrPXIrIi4iKX19KSxlKz1ufSxlLmV2ZW50Q2FsbGJhY2s9ZnVuY3Rpb24odCxuLHIpe3JldHVy
biBmdW5jdGlvbihvKXtlLmdldEV2ZW50RnVsbEtleShvKT09PXQmJnIucnVuR3VhcmRlZChmdW5j
dGlvbigpe3JldHVybiBuKG8pfSl9fSxlLl9ub3JtYWxpemVLZXk9ZnVuY3Rpb24odCl7c3dpdGNo
KHQpe2Nhc2UiZXNjIjpyZXR1cm4iZXNjYXBlIjtkZWZhdWx0OnJldHVybiB0fX0sZX0oc3QpO1N0
LmRlY29yYXRvcnM9W3t0eXBlOmouRH1dLFN0LmN0b3JQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7cmV0
dXJuW3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpqLkgsYXJnczpbWl19XX1dfTsvKioK
KyAqIEBsaWNlbnNlCisgKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqCisgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBh
dCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQorICovCit2YXIgQXQ9L14oPzooPzpodHRwcz98
bWFpbHRvfGZ0cHx0ZWx8ZmlsZSk6fFteJjpcLz8jXSooPzpbXC8/I118JCkpL2dpLFR0PS9eZGF0
YTooPzppbWFnZVwvKD86Ym1wfGdpZnxqcGVnfGpwZ3xwbmd8dGlmZnx3ZWJwKXx2aWRlb1wvKD86
bXBlZ3xtcDR8b2dnfHdlYm0pfGF1ZGlvXC8oPzptcDN8b2dhfG9nZ3xvcHVzKSk7YmFzZTY0LFth
LXowLTkrXC9dKz0qJC9pLGt0PW51bGwsVnQ9bnVsbCxOdD13KCJhcmVhLGJyLGNvbCxocixpbWcs
d2JyIiksTXQ9dygiY29sZ3JvdXAsZGQsZHQsbGkscCx0Ym9keSx0ZCx0Zm9vdCx0aCx0aGVhZCx0
ciIpLGp0PXcoInJwLHJ0IiksUnQ9QyhqdCxNdCksRHQ9QyhNdCx3KCJhZGRyZXNzLGFydGljbGUs
YXNpZGUsYmxvY2txdW90ZSxjYXB0aW9uLGNlbnRlcixkZWwsZGV0YWlscyxkaWFsb2csZGlyLGRp
dixkbCxmaWd1cmUsZmlnY2FwdGlvbixmb290ZXIsaDEsaDIsaDMsaDQsaDUsaDYsaGVhZGVyLGhn
cm91cCxocixpbnMsbWFpbixtYXAsbWVudSxuYXYsb2wscHJlLHNlY3Rpb24sc3VtbWFyeSx0YWJs
ZSx1bCIpKSxJdD1DKGp0LHcoImEsYWJicixhY3JvbnltLGF1ZGlvLGIsYmRpLGJkbyxiaWcsYnIs
Y2l0ZSxjb2RlLGRlbCxkZm4sZW0sZm9udCxpLGltZyxpbnMsa2JkLGxhYmVsLG1hcCxtYXJrLHBp
Y3R1cmUscSxydWJ5LHJwLHJ0LHMsc2FtcCxzbWFsbCxzb3VyY2Usc3BhbixzdHJpa2Usc3Ryb25n
LHN1YixzdXAsdGltZSx0cmFjayx0dCx1LHZhcix2aWRlbyIpKSxGdD1DKE50LER0LEl0LFJ0KSxI
dD13KCJiYWNrZ3JvdW5kLGNpdGUsaHJlZixpdGVtdHlwZSxsb25nZGVzYyxwb3N0ZXIsc3JjLHhs
aW5rOmhyZWYiKSxMdD13KCJzcmNzZXQiKSxCdD13KCJhYmJyLGFjY2Vzc2tleSxhbGlnbixhbHQs
YXV0b3BsYXksYXhpcyxiZ2NvbG9yLGJvcmRlcixjZWxscGFkZGluZyxjZWxsc3BhY2luZyxjbGFz
cyxjbGVhcixjb2xvcixjb2xzLGNvbHNwYW4sY29tcGFjdCxjb250cm9scyxjb29yZHMsZGF0ZXRp
bWUsZGVmYXVsdCxkaXIsZG93bmxvYWQsZmFjZSxoZWFkZXJzLGhlaWdodCxoaWRkZW4saHJlZmxh
bmcsaHNwYWNlLGlzbWFwLGl0ZW1zY29wZSxpdGVtcHJvcCxraW5kLGxhYmVsLGxhbmcsbGFuZ3Vh
Z2UsbG9vcCxtZWRpYSxtdXRlZCxub2hyZWYsbm93cmFwLG9wZW4scHJlbG9hZCxyZWwscmV2LHJv
bGUscm93cyxyb3dzcGFuLHJ1bGVzLHNjb3BlLHNjcm9sbGluZyxzaGFwZSxzaXplLHNpemVzLHNw
YW4sc3JjbGFuZyxzdGFydCxzdW1tYXJ5LHRhYmluZGV4LHRhcmdldCx0aXRsZSx0cmFuc2xhdGUs
dHlwZSx1c2VtYXAsdmFsaWduLHZhbHVlLHZzcGFjZSx3aWR0aCIpLFV0PUMoSHQsTHQsQnQpLEd0
PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuc2FuaXRpemVkU29tZXRoaW5nPSExLHRoaXMu
YnVmPVtdfXJldHVybiB0LnByb3RvdHlwZS5zYW5pdGl6ZUNoaWxkcmVuPWZ1bmN0aW9uKHQpe2Zv
cih2YXIgZT10LmZpcnN0Q2hpbGQ7ZTspaWYoVnQuaXNFbGVtZW50Tm9kZShlKT90aGlzLnN0YXJ0
RWxlbWVudChlKTpWdC5pc1RleHROb2RlKGUpP3RoaXMuY2hhcnMoVnQubm9kZVZhbHVlKGUpKTp0
aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMCxWdC5maXJzdENoaWxkKGUpKWU9VnQuZmlyc3RDaGls
ZChlKTtlbHNlIGZvcig7ZTspe1Z0LmlzRWxlbWVudE5vZGUoZSkmJnRoaXMuZW5kRWxlbWVudChl
KTt2YXIgbj1FKGUsVnQubmV4dFNpYmxpbmcoZSkpO2lmKG4pe2U9bjticmVha31lPUUoZSxWdC5w
YXJlbnRFbGVtZW50KGUpKX1yZXR1cm4gdGhpcy5idWYuam9pbigiIil9LHQucHJvdG90eXBlLnN0
YXJ0RWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49VnQubm9kZU5hbWUodCkudG9Mb3dl
ckNhc2UoKTtpZighRnQuaGFzT3duUHJvcGVydHkobikpcmV0dXJuIHZvaWQodGhpcy5zYW5pdGl6
ZWRTb21ldGhpbmc9ITApO3RoaXMuYnVmLnB1c2goIjwiKSx0aGlzLmJ1Zi5wdXNoKG4pLFZ0LmF0
dHJpYnV0ZU1hcCh0KS5mb3JFYWNoKGZ1bmN0aW9uKHQsbil7dmFyIHI9bi50b0xvd2VyQ2FzZSgp
O2lmKCFVdC5oYXNPd25Qcm9wZXJ0eShyKSlyZXR1cm4gdm9pZChlLnNhbml0aXplZFNvbWV0aGlu
Zz0hMCk7SHRbcl0mJih0PXYodCkpLEx0W3JdJiYodD1fKHQpKSxlLmJ1Zi5wdXNoKCIgIiksZS5i
dWYucHVzaChuKSxlLmJ1Zi5wdXNoKCc9IicpLGUuYnVmLnB1c2goTyh0KSksZS5idWYucHVzaCgn
IicpfSksdGhpcy5idWYucHVzaCgiPiIpfSx0LnByb3RvdHlwZS5lbmRFbGVtZW50PWZ1bmN0aW9u
KHQpe3ZhciBlPVZ0Lm5vZGVOYW1lKHQpLnRvTG93ZXJDYXNlKCk7RnQuaGFzT3duUHJvcGVydHko
ZSkmJiFOdC5oYXNPd25Qcm9wZXJ0eShlKSYmKHRoaXMuYnVmLnB1c2goIjwvIiksdGhpcy5idWYu
cHVzaChlKSx0aGlzLmJ1Zi5wdXNoKCI+IikpfSx0LnByb3RvdHlwZS5jaGFycz1mdW5jdGlvbih0
KXt0aGlzLmJ1Zi5wdXNoKE8odCkpfSx0fSgpLHF0PS9bXHVEODAwLVx1REJGRl1bXHVEQzAwLVx1
REZGRl0vZyx6dD0vKFteXCMtfiB8IV0pL2csWnQ9IlstLC5cIiclXyEjIGEtekEtWjAtOV0rIixZ
dD0iKD86bWF0cml4fHRyYW5zbGF0ZXxzY2FsZXxyb3RhdGV8c2tld3xwZXJzcGVjdGl2ZSkoPzpY
fFl8M2QpPyIsS3Q9Iig/OnJnYnxoc2wpYT8iLFd0PSIoPzpyZXBlYXRpbmctKT8oPzpsaW5lYXJ8
cmFkaWFsKS1ncmFkaWVudCIsUXQ9Iig/OmNhbGN8YXR0cikiLEp0PSJcXChbLTAtOS4lLCAjYS16
QS1aXStcXCkiLCR0PW5ldyBSZWdFeHAoIl4oIitadCsifCg/OiIrWXQrInwiK0t0KyJ8IitXdCsi
fCIrUXQrIikiK0p0KyIpJCIsImciKSxYdD0vXnVybFwoKFteKV0rKVwpJC8sdGU9ZnVuY3Rpb24o
KXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5zYW5pdGl6ZT1mdW5jdGlvbih0LGUp
e30sdC5wcm90b3R5cGUuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWw9ZnVuY3Rpb24odCl7fSx0LnBy
b3RvdHlwZS5ieXBhc3NTZWN1cml0eVRydXN0U3R5bGU9ZnVuY3Rpb24odCl7fSx0LnByb3RvdHlw
ZS5ieXBhc3NTZWN1cml0eVRydXN0U2NyaXB0PWZ1bmN0aW9uKHQpe30sdC5wcm90b3R5cGUuYnlw
YXNzU2VjdXJpdHlUcnVzdFVybD1mdW5jdGlvbih0KXt9LHQucHJvdG90eXBlLmJ5cGFzc1NlY3Vy
aXR5VHJ1c3RSZXNvdXJjZVVybD1mdW5jdGlvbih0KXt9LHR9KCksZWU9ZnVuY3Rpb24odCl7ZnVu
Y3Rpb24gZShlKXt2YXIgbj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uX2RvYz1lLG59cmV0
dXJuIE4uYShlLHQpLGUucHJvdG90eXBlLnNhbml0aXplPWZ1bmN0aW9uKHQsZSl7aWYobnVsbD09
ZSlyZXR1cm4gbnVsbDtzd2l0Y2godCl7Y2FzZSBqLlAuTk9ORTpyZXR1cm4gZTtjYXNlIGouUC5I
VE1MOnJldHVybiBlIGluc3RhbmNlb2YgcmU/ZS5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlv
blNlY3VyaXR5Oih0aGlzLmNoZWNrTm90U2FmZVZhbHVlKGUsIkhUTUwiKSxQKHRoaXMuX2RvYyxT
dHJpbmcoZSkpKTtjYXNlIGouUC5TVFlMRTpyZXR1cm4gZSBpbnN0YW5jZW9mIG9lP2UuY2hhbmdp
bmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eToodGhpcy5jaGVja05vdFNhZmVWYWx1ZShl
LCJTdHlsZSIpLEEoZSkpO2Nhc2Ugai5QLlNDUklQVDppZihlIGluc3RhbmNlb2YgaWUpcmV0dXJu
IGUuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eTt0aHJvdyB0aGlzLmNoZWNr
Tm90U2FmZVZhbHVlKGUsIlNjcmlwdCIpLG5ldyBFcnJvcigidW5zYWZlIHZhbHVlIHVzZWQgaW4g
YSBzY3JpcHQgY29udGV4dCIpO2Nhc2Ugai5QLlVSTDpyZXR1cm4gZSBpbnN0YW5jZW9mIHNlfHxl
IGluc3RhbmNlb2YgYWU/ZS5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5Oih0
aGlzLmNoZWNrTm90U2FmZVZhbHVlKGUsIlVSTCIpLHYoU3RyaW5nKGUpKSk7Y2FzZSBqLlAuUkVT
T1VSQ0VfVVJMOmlmKGUgaW5zdGFuY2VvZiBzZSlyZXR1cm4gZS5jaGFuZ2luZ1RoaXNCcmVha3NB
cHBsaWNhdGlvblNlY3VyaXR5O3Rocm93IHRoaXMuY2hlY2tOb3RTYWZlVmFsdWUoZSwiUmVzb3Vy
Y2VVUkwiKSxuZXcgRXJyb3IoInVuc2FmZSB2YWx1ZSB1c2VkIGluIGEgcmVzb3VyY2UgVVJMIGNv
bnRleHQgKHNlZSBodHRwOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpIik7ZGVmYXVsdDp0aHJvdyBu
ZXcgRXJyb3IoIlVuZXhwZWN0ZWQgU2VjdXJpdHlDb250ZXh0ICIrdCsiIChzZWUgaHR0cDovL2cu
Y28vbmcvc2VjdXJpdHkjeHNzKSIpfX0sZS5wcm90b3R5cGUuY2hlY2tOb3RTYWZlVmFsdWU9ZnVu
Y3Rpb24odCxlKXtpZih0IGluc3RhbmNlb2YgbmUpdGhyb3cgbmV3IEVycm9yKCJSZXF1aXJlZCBh
IHNhZmUgIitlKyIsIGdvdCBhICIrdC5nZXRUeXBlTmFtZSgpKyIgKHNlZSBodHRwOi8vZy5jby9u
Zy9zZWN1cml0eSN4c3MpIil9LGUucHJvdG90eXBlLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sPWZ1
bmN0aW9uKHQpe3JldHVybiBuZXcgcmUodCl9LGUucHJvdG90eXBlLmJ5cGFzc1NlY3VyaXR5VHJ1
c3RTdHlsZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG9lKHQpfSxlLnByb3RvdHlwZS5ieXBhc3NT
ZWN1cml0eVRydXN0U2NyaXB0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaWUodCl9LGUucHJvdG90
eXBlLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmw9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBhZSh0KX0s
ZS5wcm90b3R5cGUuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsPWZ1bmN0aW9uKHQpe3Jl
dHVybiBuZXcgc2UodCl9LGV9KHRlKTtlZS5kZWNvcmF0b3JzPVt7dHlwZTpqLkR9XSxlZS5jdG9y
UGFyYW1ldGVycz1mdW5jdGlvbigpe3JldHVyblt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5
cGU6ai5ILGFyZ3M6W1pdfV19XX07dmFyIG5lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlz
LmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk9dH1yZXR1cm4gdC5wcm90b3R5
cGUuZ2V0VHlwZU5hbWU9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9u
KCl7cmV0dXJuIlNhZmVWYWx1ZSBtdXN0IHVzZSBbcHJvcGVydHldPWJpbmRpbmc6ICIrdGhpcy5j
aGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5KyIgKHNlZSBodHRwOi8vZy5jby9u
Zy9zZWN1cml0eSN4c3MpIn0sdH0oKSxyZT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJu
IG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gTi5hKGUsdCks
ZS5wcm90b3R5cGUuZ2V0VHlwZU5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4iSFRNTCJ9LGV9KG5lKSxv
ZT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMs
YXJndW1lbnRzKXx8dGhpc31yZXR1cm4gTi5hKGUsdCksZS5wcm90b3R5cGUuZ2V0VHlwZU5hbWU9
ZnVuY3Rpb24oKXtyZXR1cm4iU3R5bGUifSxlfShuZSksaWU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24g
ZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJu
IE4uYShlLHQpLGUucHJvdG90eXBlLmdldFR5cGVOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIlNjcmlw
dCJ9LGV9KG5lKSxhZT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0
LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gTi5hKGUsdCksZS5wcm90b3R5cGUu
Z2V0VHlwZU5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4iVVJMIn0sZX0obmUpLHNlPWZ1bmN0aW9uKHQp
e2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0
aGlzfXJldHVybiBOLmEoZSx0KSxlLnByb3RvdHlwZS5nZXRUeXBlTmFtZT1mdW5jdGlvbigpe3Jl
dHVybiJSZXNvdXJjZVVSTCJ9LGV9KG5lKSx1ZT1be3Byb3ZpZGU6ai5RLHVzZVZhbHVlOk0uZ30s
e3Byb3ZpZGU6ai5SLHVzZVZhbHVlOlQsbXVsdGk6ITB9LHtwcm92aWRlOk0uZix1c2VDbGFzczpZ
fSx7cHJvdmlkZTpaLHVzZUZhY3Rvcnk6VixkZXBzOltdfV0sY2U9W3twcm92aWRlOmoucSx1c2VF
eGlzdGluZzp0ZX0se3Byb3ZpZGU6dGUsdXNlQ2xhc3M6ZWV9XSxsZT1uLmkoai5TKShqLlQsImJy
b3dzZXIiLHVlKSxwZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7aWYodCl0aHJvdyBuZXcgRXJy
b3IoIkJyb3dzZXJNb2R1bGUgaGFzIGFscmVhZHkgYmVlbiBsb2FkZWQuIElmIHlvdSBuZWVkIGFj
Y2VzcyB0byBjb21tb24gZGlyZWN0aXZlcyBzdWNoIGFzIE5nSWYgYW5kIE5nRm9yIGZyb20gYSBs
YXp5IGxvYWRlZCBtb2R1bGUsIGltcG9ydCBDb21tb25Nb2R1bGUgaW5zdGVhZC4iKX1yZXR1cm4g
dC53aXRoU2VydmVyVHJhbnNpdGlvbj1mdW5jdGlvbihlKXtyZXR1cm57bmdNb2R1bGU6dCxwcm92
aWRlcnM6W3twcm92aWRlOmouayx1c2VWYWx1ZTplLmFwcElkfSx7cHJvdmlkZTpXLHVzZUV4aXN0
aW5nOmoua30sUV19fSx0fSgpO3BlLmRlY29yYXRvcnM9W3t0eXBlOmouRSxhcmdzOlt7cHJvdmlk
ZXJzOltjZSx7cHJvdmlkZTpqLnUsdXNlRmFjdG9yeTprLGRlcHM6W119LHtwcm92aWRlOml0LHVz
ZUNsYXNzOmJ0LG11bHRpOiEwfSx7cHJvdmlkZTppdCx1c2VDbGFzczpTdCxtdWx0aTohMH0se3By
b3ZpZGU6aXQsdXNlQ2xhc3M6T3QsbXVsdGk6ITB9LHtwcm92aWRlOkN0LHVzZUNsYXNzOkV0fSx5
dCx7cHJvdmlkZTpqLnMsdXNlRXhpc3Rpbmc6eXR9LHtwcm92aWRlOnV0LHVzZUV4aXN0aW5nOmN0
fSxjdCxqLnQsYXQsb3QsSywkXSxleHBvcnRzOltNLmQsai5DXX1dfV0scGUuY3RvclBhcmFtZXRl
cnM9ZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6cGUsZGVjb3JhdG9yczpbe3R5cGU6ai5MfSx7dHlw
ZTpqLlV9XX1dfTsvKioKKyAqIEBsaWNlbnNlCisgKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorICogZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQorICovCit2YXIgZmU9
InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvd3x8e30sZGU9ZnVuY3Rpb24oKXtmdW5j
dGlvbiB0KHQsZSl7dGhpcy5tc1BlclRpY2s9dCx0aGlzLm51bVRpY2tzPWV9cmV0dXJuIHR9KCk7
KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmFwcFJlZj10LmluamVjdG9yLmdldChqLkIp
fXQucHJvdG90eXBlLnRpbWVDaGFuZ2VEZXRlY3Rpb249ZnVuY3Rpb24odCl7dmFyIGU9dCYmdC5y
ZWNvcmQsbj0iQ2hhbmdlIERldGVjdGlvbiIsbz1udWxsIT1mZS5jb25zb2xlLnByb2ZpbGU7ZSYm
byYmZmUuY29uc29sZS5wcm9maWxlKG4pO2Zvcih2YXIgaT1yKCkucGVyZm9ybWFuY2VOb3coKSxh
PTA7YTw1fHxyKCkucGVyZm9ybWFuY2VOb3coKS1pPDUwMDspdGhpcy5hcHBSZWYudGljaygpLGEr
Kzt2YXIgcz1yKCkucGVyZm9ybWFuY2VOb3coKTtlJiZvJiZmZS5jb25zb2xlLnByb2ZpbGVFbmQo
bik7dmFyIHU9KHMtaSkvYTtyZXR1cm4gZmUuY29uc29sZS5sb2coInJhbiAiK2ErIiBjaGFuZ2Ug
ZGV0ZWN0aW9uIGN5Y2xlcyIpLGZlLmNvbnNvbGUubG9nKHUudG9GaXhlZCgyKSsiIG1zIHBlciBj
aGVjayIpLG5ldyBkZSh1LGEpfX0pKCksZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXQuYWxsPWZ1
bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiEwfX0sdC5jc3M9ZnVuY3Rpb24odCl7
cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lLm5hdGl2ZUVsZW1lbnQmJnIoKS5lbGVt
ZW50TWF0Y2hlcyhlLm5hdGl2ZUVsZW1lbnQsdCl9fSx0LmRpcmVjdGl2ZT1mdW5jdGlvbih0KXty
ZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuLTEhPT1lLnByb3ZpZGVyVG9rZW5zLmluZGV4T2YodCl9
fX0oKSxuZXcgai5GKCI0LjMuMSIpfSxRcVJLOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7
dmFyIHI9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbigpe3Ro
aXMuY29uc3RydWN0b3I9dH1mb3IodmFyIHIgaW4gZSllLmhhc093blByb3BlcnR5KHIpJiYodFty
XT1lW3JdKTt0LnByb3RvdHlwZT1udWxsPT09ZT9PYmplY3QuY3JlYXRlKGUpOihuLnByb3RvdHlw
ZT1lLnByb3RvdHlwZSxuZXcgbil9LG89bigibW1WUyIpLGk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24g
ZShlLG4scil7dC5jYWxsKHRoaXMpLHRoaXMucGFyZW50PWUsdGhpcy5vdXRlclZhbHVlPW4sdGhp
cy5vdXRlckluZGV4PXIsdGhpcy5pbmRleD0wfXJldHVybiByKGUsdCksZS5wcm90b3R5cGUuX25l
eHQ9ZnVuY3Rpb24odCl7dGhpcy5wYXJlbnQubm90aWZ5TmV4dCh0aGlzLm91dGVyVmFsdWUsdCx0
aGlzLm91dGVySW5kZXgsdGhpcy5pbmRleCsrLHRoaXMpfSxlLnByb3RvdHlwZS5fZXJyb3I9ZnVu
Y3Rpb24odCl7dGhpcy5wYXJlbnQubm90aWZ5RXJyb3IodCx0aGlzKSx0aGlzLnVuc3Vic2NyaWJl
KCl9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMucGFyZW50Lm5vdGlmeUNv
bXBsZXRlKHRoaXMpLHRoaXMudW5zdWJzY3JpYmUoKX0sZX0oby5TdWJzY3JpYmVyKTtlLklubmVy
U3Vic2NyaWJlcj1pfSxSUlZ2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9dGhp
cyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3Ry
dWN0b3I9dH1mb3IodmFyIHIgaW4gZSllLmhhc093blByb3BlcnR5KHIpJiYodFtyXT1lW3JdKTt0
LnByb3RvdHlwZT1udWxsPT09ZT9PYmplY3QuY3JlYXRlKGUpOihuLnByb3RvdHlwZT1lLnByb3Rv
dHlwZSxuZXcgbil9LG89bigickNUZiIpLGk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3Qu
Y2FsbCh0aGlzKSx0aGlzLnZhbHVlPWUsdGhpcy5zY2hlZHVsZXI9bix0aGlzLl9pc1NjYWxhcj0h
MCxuJiYodGhpcy5faXNTY2FsYXI9ITEpfXJldHVybiByKGUsdCksZS5jcmVhdGU9ZnVuY3Rpb24o
dCxuKXtyZXR1cm4gbmV3IGUodCxuKX0sZS5kaXNwYXRjaD1mdW5jdGlvbih0KXt2YXIgZT10LmRv
bmUsbj10LnZhbHVlLHI9dC5zdWJzY3JpYmVyO2lmKGUpcmV0dXJuIHZvaWQgci5jb21wbGV0ZSgp
O3IubmV4dChuKSxyLmNsb3NlZHx8KHQuZG9uZT0hMCx0aGlzLnNjaGVkdWxlKHQpKX0sZS5wcm90
b3R5cGUuX3N1YnNjcmliZT1mdW5jdGlvbih0KXt2YXIgbj10aGlzLnZhbHVlLHI9dGhpcy5zY2hl
ZHVsZXI7aWYocilyZXR1cm4gci5zY2hlZHVsZShlLmRpc3BhdGNoLDAse2RvbmU6ITEsdmFsdWU6
bixzdWJzY3JpYmVyOnR9KTt0Lm5leHQobiksdC5jbG9zZWR8fHQuY29tcGxldGUoKX0sZX0oby5P
YnNlcnZhYmxlKTtlLlNjYWxhck9ic2VydmFibGU9aX0sU0tINjpmdW5jdGlvbih0LGUsbil7InVz
ZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHR9ZS5pc0Z1
bmN0aW9uPXJ9LFRUb086ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQs
ZSl7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9dH1vKHQsZSksdC5wcm90b3R5cGU9bnVs
bD09PWU/T2JqZWN0LmNyZWF0ZShlKToobi5wcm90b3R5cGU9ZS5wcm90b3R5cGUsbmV3IG4pfWUu
YT1yOy8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29y
cG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCitMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hl
IExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlCit0
aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBv
YnRhaW4gYSBjb3B5IG9mIHRoZQorTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGlj
ZW5zZXMvTElDRU5TRS0yLjAKKworVEhJUyBDT0RFIElTIFBST1ZJREVEIE9OIEFOICpBUyBJUyog
QkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorS0lORCwgRUlU
SEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBBTlkg
SU1QTElFRAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSwKK01FUkNIQU5UQUJMSVRZIE9SIE5PTi1JTkZSSU5HRU1FTlQu
CisKK1NlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1
YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucworYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNl
bnNlLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KK3ZhciBvPU9iamVjdC5zZXRQcm90b3R5cGVP
Znx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbih0LGUpe3QuX19wcm90
b19fPWV9fHxmdW5jdGlvbih0LGUpe2Zvcih2YXIgbiBpbiBlKWUuaGFzT3duUHJvcGVydHkobikm
Jih0W25dPWVbbl0pfTtPYmplY3QuYXNzaWdufSxWT2ZaOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0
cmljdCI7KGZ1bmN0aW9uKHQpe3ZhciBuPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5k
b3cscj0idW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJiJ1bmRlZmluZWQiIT10eXBlb2YgV29ya2Vy
R2xvYmFsU2NvcGUmJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmc2VsZixvPXZv
aWQgMCE9PXQmJnQsaT1ufHxvfHxyO2Uucm9vdD1pLGZ1bmN0aW9uKCl7aWYoIWkpdGhyb3cgbmV3
IEVycm9yKCJSeEpTIGNvdWxkIG5vdCBmaW5kIGFueSBnbG9iYWwgY29udGV4dCAod2luZG93LCBz
ZWxmLCBnbG9iYWwpIil9KCl9KS5jYWxsKGUsbigiRHVSMiIpKX0sV2hWYzpmdW5jdGlvbih0LGUs
bil7InVzZSBzdHJpY3QiO2UuZXJyb3JPYmplY3Q9e2U6e319fSxYYWpvOmZ1bmN0aW9uKHQsZSxu
KXsidXNlIHN0cmljdCI7ZS5pc0FycmF5PUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHQpe3JldHVy
biB0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RofX0sWWg4UTpmdW5jdGlvbih0LGUsbil7InVz
ZSBzdHJpY3QiO3ZhciByPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbih0LGUpe2Z1bmN0
aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPXR9Zm9yKHZhciByIGluIGUpZS5oYXNPd25Qcm9wZXJ0
eShyKSYmKHRbcl09ZVtyXSk7dC5wcm90b3R5cGU9bnVsbD09PWU/T2JqZWN0LmNyZWF0ZShlKToo
bi5wcm90b3R5cGU9ZS5wcm90b3R5cGUsbmV3IG4pfSxvPW4oInJDVGYiKSxpPW4oIlJSVnYiKSxh
PW4oImpCRUYiKSxzPW4oImZXYlAiKSx1PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt0LmNh
bGwodGhpcyksdGhpcy5hcnJheT1lLHRoaXMuc2NoZWR1bGVyPW4sbnx8MSE9PWUubGVuZ3RofHwo
dGhpcy5faXNTY2FsYXI9ITAsdGhpcy52YWx1ZT1lWzBdKX1yZXR1cm4gcihlLHQpLGUuY3JlYXRl
PWZ1bmN0aW9uKHQsbil7cmV0dXJuIG5ldyBlKHQsbil9LGUub2Y9ZnVuY3Rpb24oKXtmb3IodmFy
IHQ9W10sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFtuLTBdPWFyZ3VtZW50c1tuXTt2YXIg
cj10W3QubGVuZ3RoLTFdO3MuaXNTY2hlZHVsZXIocik/dC5wb3AoKTpyPW51bGw7dmFyIG89dC5s
ZW5ndGg7cmV0dXJuIG8+MT9uZXcgZSh0LHIpOjE9PT1vP25ldyBpLlNjYWxhck9ic2VydmFibGUo
dFswXSxyKTpuZXcgYS5FbXB0eU9ic2VydmFibGUocil9LGUuZGlzcGF0Y2g9ZnVuY3Rpb24odCl7
dmFyIGU9dC5hcnJheSxuPXQuaW5kZXgscj10LmNvdW50LG89dC5zdWJzY3JpYmVyO2lmKG4+PXIp
cmV0dXJuIHZvaWQgby5jb21wbGV0ZSgpO28ubmV4dChlW25dKSxvLmNsb3NlZHx8KHQuaW5kZXg9
bisxLHRoaXMuc2NoZWR1bGUodCkpfSxlLnByb3RvdHlwZS5fc3Vic2NyaWJlPWZ1bmN0aW9uKHQp
e3ZhciBuPXRoaXMuYXJyYXkscj1uLmxlbmd0aCxvPXRoaXMuc2NoZWR1bGVyO2lmKG8pcmV0dXJu
IG8uc2NoZWR1bGUoZS5kaXNwYXRjaCwwLHthcnJheTpuLGluZGV4OjAsY291bnQ6cixzdWJzY3Jp
YmVyOnR9KTtmb3IodmFyIGk9MDtpPHImJiF0LmNsb3NlZDtpKyspdC5uZXh0KG5baV0pO3QuY29t
cGxldGUoKX0sZX0oby5PYnNlcnZhYmxlKTtlLkFycmF5T2JzZXJ2YWJsZT11fSxaSmY4OmZ1bmN0
aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0
aW9uKHQsZSl7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9dH1mb3IodmFyIHIgaW4gZSll
Lmhhc093blByb3BlcnR5KHIpJiYodFtyXT1lW3JdKTt0LnByb3RvdHlwZT1udWxsPT09ZT9PYmpl
Y3QuY3JlYXRlKGUpOihuLnByb3RvdHlwZT1lLnByb3RvdHlwZSxuZXcgbil9LG89bigiQjAwVSIp
LGk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3QuY2FsbCh0aGlzKSx0aGlzLnN1YmplY3Q9
ZSx0aGlzLnN1YnNjcmliZXI9bix0aGlzLmNsb3NlZD0hMX1yZXR1cm4gcihlLHQpLGUucHJvdG90
eXBlLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuY2xvc2VkKXt0aGlzLmNsb3NlZD0h
MDt2YXIgdD10aGlzLnN1YmplY3QsZT10Lm9ic2VydmVycztpZih0aGlzLnN1YmplY3Q9bnVsbCxl
JiYwIT09ZS5sZW5ndGgmJiF0LmlzU3RvcHBlZCYmIXQuY2xvc2VkKXt2YXIgbj1lLmluZGV4T2Yo
dGhpcy5zdWJzY3JpYmVyKTstMSE9PW4mJmUuc3BsaWNlKG4sMSl9fX0sZX0oby5TdWJzY3JpcHRp
b24pO2UuU3ViamVjdFN1YnNjcmlwdGlvbj1pfSxhUWw3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0
cmljdCI7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQuc3Vic2Ny
aWJlJiYiZnVuY3Rpb24iPT10eXBlb2YgdC50aGVufWUuaXNQcm9taXNlPXJ9LGNidVg6ZnVuY3Rp
b24odCxlLG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQpe3JldHVybiB2b2lkIDA9PT10JiYo
dD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpLHRoaXMubGlmdChuZXcgcyh0KSl9dmFyIG89dGhp
cyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3Ry
dWN0b3I9dH1mb3IodmFyIHIgaW4gZSllLmhhc093blByb3BlcnR5KHIpJiYodFtyXT1lW3JdKTt0
LnByb3RvdHlwZT1udWxsPT09ZT9PYmplY3QuY3JlYXRlKGUpOihuLnByb3RvdHlwZT1lLnByb3Rv
dHlwZSxuZXcgbil9LGk9bigid0FrRCIpLGE9bigiQ1VScCIpO2UubWVyZ2VBbGw9cjt2YXIgcz1m
dW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5jb25jdXJyZW50PXR9cmV0dXJuIHQucHJvdG90
eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IHUodCx0aGlzLmNv
bmN1cnJlbnQpKX0sdH0oKTtlLk1lcmdlQWxsT3BlcmF0b3I9czt2YXIgdT1mdW5jdGlvbih0KXtm
dW5jdGlvbiBlKGUsbil7dC5jYWxsKHRoaXMsZSksdGhpcy5jb25jdXJyZW50PW4sdGhpcy5oYXND
b21wbGV0ZWQ9ITEsdGhpcy5idWZmZXI9W10sdGhpcy5hY3RpdmU9MH1yZXR1cm4gbyhlLHQpLGUu
cHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3RoaXMuYWN0aXZlPHRoaXMuY29uY3VycmVudD8o
dGhpcy5hY3RpdmUrKyx0aGlzLmFkZChhLnN1YnNjcmliZVRvUmVzdWx0KHRoaXMsdCkpKTp0aGlz
LmJ1ZmZlci5wdXNoKHQpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLmhh
c0NvbXBsZXRlZD0hMCwwPT09dGhpcy5hY3RpdmUmJjA9PT10aGlzLmJ1ZmZlci5sZW5ndGgmJnRo
aXMuZGVzdGluYXRpb24uY29tcGxldGUoKX0sZS5wcm90b3R5cGUubm90aWZ5Q29tcGxldGU9ZnVu
Y3Rpb24odCl7dmFyIGU9dGhpcy5idWZmZXI7dGhpcy5yZW1vdmUodCksdGhpcy5hY3RpdmUtLSxl
Lmxlbmd0aD4wP3RoaXMuX25leHQoZS5zaGlmdCgpKTowPT09dGhpcy5hY3RpdmUmJnRoaXMuaGFz
Q29tcGxldGVkJiZ0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9LGV9KGkuT3V0ZXJTdWJzY3Jp
YmVyKTtlLk1lcmdlQWxsU3Vic2NyaWJlcj11fSxjZG1OOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0
cmljdCI7ZnVuY3Rpb24gcih0KXt2YXIgZT10LlN5bWJvbDtpZigiZnVuY3Rpb24iPT10eXBlb2Yg
ZSlyZXR1cm4gZS5pdGVyYXRvcnx8KGUuaXRlcmF0b3I9ZSgiaXRlcmF0b3IgcG9seWZpbGwiKSks
ZS5pdGVyYXRvcjt2YXIgbj10LlNldDtpZihuJiYiZnVuY3Rpb24iPT10eXBlb2YobmV3IG4pWyJA
QGl0ZXJhdG9yIl0pcmV0dXJuIkBAaXRlcmF0b3IiO3ZhciByPXQuTWFwO2lmKHIpZm9yKHZhciBv
PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHIucHJvdG90eXBlKSxpPTA7aTxvLmxlbmd0aDsr
K2kpe3ZhciBhPW9baV07aWYoImVudHJpZXMiIT09YSYmInNpemUiIT09YSYmci5wcm90b3R5cGVb
YV09PT1yLnByb3RvdHlwZS5lbnRyaWVzKXJldHVybiBhfXJldHVybiJAQGl0ZXJhdG9yIn12YXIg
bz1uKCJWT2ZaIik7ZS5zeW1ib2xJdGVyYXRvclBvbnlmaWxsPXIsZS5pdGVyYXRvcj1yKG8ucm9v
dCksZS4kJGl0ZXJhdG9yPWUuaXRlcmF0b3J9LGVtT3c6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3Ry
aWN0IjtmdW5jdGlvbiByKHQsZSl7dmFyIG47aWYobj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ1
bmN0aW9uKCl7cmV0dXJuIHR9LCJmdW5jdGlvbiI9PXR5cGVvZiBlKXJldHVybiB0aGlzLmxpZnQo
bmV3IGkobixlKSk7dmFyIHI9T2JqZWN0LmNyZWF0ZSh0aGlzLG8uY29ubmVjdGFibGVPYnNlcnZh
YmxlRGVzY3JpcHRvcik7cmV0dXJuIHIuc291cmNlPXRoaXMsci5zdWJqZWN0RmFjdG9yeT1uLHJ9
dmFyIG89bigic0lZTyIpO2UubXVsdGljYXN0PXI7dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0
KHQsZSl7dGhpcy5zdWJqZWN0RmFjdG9yeT10LHRoaXMuc2VsZWN0b3I9ZX1yZXR1cm4gdC5wcm90
b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuc2VsZWN0b3Iscj10aGlzLnN1Ympl
Y3RGYWN0b3J5KCksbz1uKHIpLnN1YnNjcmliZSh0KTtyZXR1cm4gby5hZGQoZS5zdWJzY3JpYmUo
cikpLG99LHR9KCk7ZS5NdWx0aWNhc3RPcGVyYXRvcj1pfSxmV2JQOmZ1bmN0aW9uKHQsZSxuKXsi
dXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIHQu
c2NoZWR1bGV9ZS5pc1NjaGVkdWxlcj1yfSxoWUJZOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmlj
dCI7ZnVuY3Rpb24gcih0KXt2YXIgZT10LnZhbHVlLG49dC5zdWJzY3JpYmVyO24uY2xvc2VkfHwo
bi5uZXh0KGUpLG4uY29tcGxldGUoKSl9ZnVuY3Rpb24gbyh0KXt2YXIgZT10LmVycixuPXQuc3Vi
c2NyaWJlcjtuLmNsb3NlZHx8bi5lcnJvcihlKX12YXIgaT10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8
ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fWZvcih2YXIgciBp
biBlKWUuaGFzT3duUHJvcGVydHkocikmJih0W3JdPWVbcl0pO3QucHJvdG90eXBlPW51bGw9PT1l
P09iamVjdC5jcmVhdGUoZSk6KG4ucHJvdG90eXBlPWUucHJvdG90eXBlLG5ldyBuKX0sYT1uKCJW
T2ZaIikscz1uKCJyQ1RmIiksdT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dC5jYWxsKHRo
aXMpLHRoaXMucHJvbWlzZT1lLHRoaXMuc2NoZWR1bGVyPW59cmV0dXJuIGkoZSx0KSxlLmNyZWF0
ZT1mdW5jdGlvbih0LG4pe3JldHVybiBuZXcgZSh0LG4pfSxlLnByb3RvdHlwZS5fc3Vic2NyaWJl
PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10aGlzLnByb21pc2UsaT10aGlzLnNjaGVkdWxlcjtp
ZihudWxsPT1pKXRoaXMuX2lzU2NhbGFyP3QuY2xvc2VkfHwodC5uZXh0KHRoaXMudmFsdWUpLHQu
Y29tcGxldGUoKSk6bi50aGVuKGZ1bmN0aW9uKG4pe2UudmFsdWU9bixlLl9pc1NjYWxhcj0hMCx0
LmNsb3NlZHx8KHQubmV4dChuKSx0LmNvbXBsZXRlKCkpfSxmdW5jdGlvbihlKXt0LmNsb3NlZHx8
dC5lcnJvcihlKX0pLnRoZW4obnVsbCxmdW5jdGlvbih0KXthLnJvb3Quc2V0VGltZW91dChmdW5j
dGlvbigpe3Rocm93IHR9KX0pO2Vsc2UgaWYodGhpcy5faXNTY2FsYXIpe2lmKCF0LmNsb3NlZCly
ZXR1cm4gaS5zY2hlZHVsZShyLDAse3ZhbHVlOnRoaXMudmFsdWUsc3Vic2NyaWJlcjp0fSl9ZWxz
ZSBuLnRoZW4oZnVuY3Rpb24obil7ZS52YWx1ZT1uLGUuX2lzU2NhbGFyPSEwLHQuY2xvc2VkfHx0
LmFkZChpLnNjaGVkdWxlKHIsMCx7dmFsdWU6bixzdWJzY3JpYmVyOnR9KSl9LGZ1bmN0aW9uKGUp
e3QuY2xvc2VkfHx0LmFkZChpLnNjaGVkdWxlKG8sMCx7ZXJyOmUsc3Vic2NyaWJlcjp0fSkpfSku
dGhlbihudWxsLGZ1bmN0aW9uKHQpe2Eucm9vdC5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cg
dH0pfSl9LGV9KHMuT2JzZXJ2YWJsZSk7ZS5Qcm9taXNlT2JzZXJ2YWJsZT11fSwiaW9LKyI6ZnVu
Y3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJoWUJZIik7ZS5mcm9tUHJvbWlzZT1y
LlByb21pc2VPYnNlcnZhYmxlLmNyZWF0ZX0sakJFRjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJp
Y3QiO3ZhciByPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4o
KXt0aGlzLmNvbnN0cnVjdG9yPXR9Zm9yKHZhciByIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShyKSYm
KHRbcl09ZVtyXSk7dC5wcm90b3R5cGU9bnVsbD09PWU/T2JqZWN0LmNyZWF0ZShlKToobi5wcm90
b3R5cGU9ZS5wcm90b3R5cGUsbmV3IG4pfSxvPW4oInJDVGYiKSxpPWZ1bmN0aW9uKHQpe2Z1bmN0
aW9uIGUoZSl7dC5jYWxsKHRoaXMpLHRoaXMuc2NoZWR1bGVyPWV9cmV0dXJuIHIoZSx0KSxlLmNy
ZWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGUodCl9LGUuZGlzcGF0Y2g9ZnVuY3Rpb24odCl7
dC5zdWJzY3JpYmVyLmNvbXBsZXRlKCl9LGUucHJvdG90eXBlLl9zdWJzY3JpYmU9ZnVuY3Rpb24o
dCl7dmFyIG49dGhpcy5zY2hlZHVsZXI7aWYobilyZXR1cm4gbi5zY2hlZHVsZShlLmRpc3BhdGNo
LDAse3N1YnNjcmliZXI6dH0pO3QuY29tcGxldGUoKX0sZX0oby5PYnNlcnZhYmxlKTtlLkVtcHR5
T2JzZXJ2YWJsZT1pfSxra2IwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24g
cigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2UtMF09YXJndW1l
bnRzW2VdO3JldHVybiB0aGlzLmxpZnQuY2FsbChvLmFwcGx5KHZvaWQgMCxbdGhpc10uY29uY2F0
KHQpKSl9ZnVuY3Rpb24gbygpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2Ur
Kyl0W2UtMF09YXJndW1lbnRzW2VdO3ZhciBuPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxyPW51
bGwsbz10W3QubGVuZ3RoLTFdO3JldHVybiB1LmlzU2NoZWR1bGVyKG8pPyhyPXQucG9wKCksdC5s
ZW5ndGg+MSYmIm51bWJlciI9PXR5cGVvZiB0W3QubGVuZ3RoLTFdJiYobj10LnBvcCgpKSk6Im51
bWJlciI9PXR5cGVvZiBvJiYobj10LnBvcCgpKSxudWxsPT09ciYmMT09PXQubGVuZ3RoJiZ0WzBd
aW5zdGFuY2VvZiBpLk9ic2VydmFibGU/dFswXTpuZXcgYS5BcnJheU9ic2VydmFibGUodCxyKS5s
aWZ0KG5ldyBzLk1lcmdlQWxsT3BlcmF0b3IobikpfXZhciBpPW4oInJDVGYiKSxhPW4oIlloOFEi
KSxzPW4oImNidVgiKSx1PW4oImZXYlAiKTtlLm1lcmdlPXIsZS5tZXJnZVN0YXRpYz1vfSxsSHNC
OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0LGUsbil7aWYodCl7aWYo
dCBpbnN0YW5jZW9mIG8uU3Vic2NyaWJlcilyZXR1cm4gdDtpZih0W2kucnhTdWJzY3JpYmVyXSly
ZXR1cm4gdFtpLnJ4U3Vic2NyaWJlcl0oKX1yZXR1cm4gdHx8ZXx8bj9uZXcgby5TdWJzY3JpYmVy
KHQsZSxuKTpuZXcgby5TdWJzY3JpYmVyKGEuZW1wdHkpfXZhciBvPW4oIm1tVlMiKSxpPW4oInI4
WlkiKSxhPW4oInlyb3UiKTtlLnRvU3Vic2NyaWJlcj1yfSxtYlZDOmZ1bmN0aW9uKHQsZSxuKXsi
dXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0KXt2YXIgZSxuPXQuU3ltYm9sO3JldHVybiJmdW5jdGlv
biI9PXR5cGVvZiBuP24ub2JzZXJ2YWJsZT9lPW4ub2JzZXJ2YWJsZTooZT1uKCJvYnNlcnZhYmxl
Iiksbi5vYnNlcnZhYmxlPWUpOmU9IkBAb2JzZXJ2YWJsZSIsZX12YXIgbz1uKCJWT2ZaIik7ZS5n
ZXRTeW1ib2xPYnNlcnZhYmxlPXIsZS5vYnNlcnZhYmxlPXIoby5yb290KSxlLiQkb2JzZXJ2YWJs
ZT1lLm9ic2VydmFibGV9LG1tVlM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj10
aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBuKCl7dGhpcy5jb25z
dHJ1Y3Rvcj10fWZvcih2YXIgciBpbiBlKWUuaGFzT3duUHJvcGVydHkocikmJih0W3JdPWVbcl0p
O3QucHJvdG90eXBlPW51bGw9PT1lP09iamVjdC5jcmVhdGUoZSk6KG4ucHJvdG90eXBlPWUucHJv
dG90eXBlLG5ldyBuKX0sbz1uKCJTS0g2IiksaT1uKCJCMDBVIiksYT1uKCJ5cm91Iikscz1uKCJy
OFpZIiksdT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4scixvKXtzd2l0Y2godC5jYWxsKHRoaXMp
LHRoaXMuc3luY0Vycm9yVmFsdWU9bnVsbCx0aGlzLnN5bmNFcnJvclRocm93bj0hMSx0aGlzLnN5
bmNFcnJvclRocm93YWJsZT0hMSx0aGlzLmlzU3RvcHBlZD0hMSxhcmd1bWVudHMubGVuZ3RoKXtj
YXNlIDA6dGhpcy5kZXN0aW5hdGlvbj1hLmVtcHR5O2JyZWFrO2Nhc2UgMTppZighbil7dGhpcy5k
ZXN0aW5hdGlvbj1hLmVtcHR5O2JyZWFrfWlmKCJvYmplY3QiPT10eXBlb2Ygbil7biBpbnN0YW5j
ZW9mIGU/KHRoaXMuZGVzdGluYXRpb249bix0aGlzLmRlc3RpbmF0aW9uLmFkZCh0aGlzKSk6KHRo
aXMuc3luY0Vycm9yVGhyb3dhYmxlPSEwLHRoaXMuZGVzdGluYXRpb249bmV3IGModGhpcyxuKSk7
YnJlYWt9ZGVmYXVsdDp0aGlzLnN5bmNFcnJvclRocm93YWJsZT0hMCx0aGlzLmRlc3RpbmF0aW9u
PW5ldyBjKHRoaXMsbixyLG8pfX1yZXR1cm4gcihlLHQpLGUucHJvdG90eXBlW3MucnhTdWJzY3Jp
YmVyXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxlLmNyZWF0ZT1mdW5jdGlvbih0LG4scil7dmFy
IG89bmV3IGUodCxuLHIpO3JldHVybiBvLnN5bmNFcnJvclRocm93YWJsZT0hMSxvfSxlLnByb3Rv
dHlwZS5uZXh0PWZ1bmN0aW9uKHQpe3RoaXMuaXNTdG9wcGVkfHx0aGlzLl9uZXh0KHQpfSxlLnBy
b3RvdHlwZS5lcnJvcj1mdW5jdGlvbih0KXt0aGlzLmlzU3RvcHBlZHx8KHRoaXMuaXNTdG9wcGVk
PSEwLHRoaXMuX2Vycm9yKHQpKX0sZS5wcm90b3R5cGUuY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlz
LmlzU3RvcHBlZHx8KHRoaXMuaXNTdG9wcGVkPSEwLHRoaXMuX2NvbXBsZXRlKCkpfSxlLnByb3Rv
dHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbigpe3RoaXMuY2xvc2VkfHwodGhpcy5pc1N0b3BwZWQ9
ITAsdC5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKSl9LGUucHJvdG90eXBlLl9uZXh0
PWZ1bmN0aW9uKHQpe3RoaXMuZGVzdGluYXRpb24ubmV4dCh0KX0sZS5wcm90b3R5cGUuX2Vycm9y
PWZ1bmN0aW9uKHQpe3RoaXMuZGVzdGluYXRpb24uZXJyb3IodCksdGhpcy51bnN1YnNjcmliZSgp
fSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLmRlc3RpbmF0aW9uLmNvbXBs
ZXRlKCksdGhpcy51bnN1YnNjcmliZSgpfSxlLnByb3RvdHlwZS5fdW5zdWJzY3JpYmVBbmRSZWN5
Y2xlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXQuX3BhcmVudCxuPXQuX3BhcmVudHM7cmV0dXJu
IHRoaXMuX3BhcmVudD1udWxsLHRoaXMuX3BhcmVudHM9bnVsbCx0aGlzLnVuc3Vic2NyaWJlKCks
dGhpcy5jbG9zZWQ9ITEsdGhpcy5pc1N0b3BwZWQ9ITEsdGhpcy5fcGFyZW50PWUsdGhpcy5fcGFy
ZW50cz1uLHRoaXN9LGV9KGkuU3Vic2NyaXB0aW9uKTtlLlN1YnNjcmliZXI9dTt2YXIgYz1mdW5j
dGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3QuY2FsbCh0aGlzKSx0aGlzLl9wYXJlbnRTdWJz
Y3JpYmVyPWU7dmFyIHMsdT10aGlzO28uaXNGdW5jdGlvbihuKT9zPW46biYmKHM9bi5uZXh0LHI9
bi5lcnJvcixpPW4uY29tcGxldGUsbiE9PWEuZW1wdHkmJih1PU9iamVjdC5jcmVhdGUobiksby5p
c0Z1bmN0aW9uKHUudW5zdWJzY3JpYmUpJiZ0aGlzLmFkZCh1LnVuc3Vic2NyaWJlLmJpbmQodSkp
LHUudW5zdWJzY3JpYmU9dGhpcy51bnN1YnNjcmliZS5iaW5kKHRoaXMpKSksdGhpcy5fY29udGV4
dD11LHRoaXMuX25leHQ9cyx0aGlzLl9lcnJvcj1yLHRoaXMuX2NvbXBsZXRlPWl9cmV0dXJuIHIo
ZSx0KSxlLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmlzU3RvcHBlZCYmdGhp
cy5fbmV4dCl7dmFyIGU9dGhpcy5fcGFyZW50U3Vic2NyaWJlcjtlLnN5bmNFcnJvclRocm93YWJs
ZT90aGlzLl9fdHJ5T3JTZXRFcnJvcihlLHRoaXMuX25leHQsdCkmJnRoaXMudW5zdWJzY3JpYmUo
KTp0aGlzLl9fdHJ5T3JVbnN1Yih0aGlzLl9uZXh0LHQpfX0sZS5wcm90b3R5cGUuZXJyb3I9ZnVu
Y3Rpb24odCl7aWYoIXRoaXMuaXNTdG9wcGVkKXt2YXIgZT10aGlzLl9wYXJlbnRTdWJzY3JpYmVy
O2lmKHRoaXMuX2Vycm9yKWUuc3luY0Vycm9yVGhyb3dhYmxlPyh0aGlzLl9fdHJ5T3JTZXRFcnJv
cihlLHRoaXMuX2Vycm9yLHQpLHRoaXMudW5zdWJzY3JpYmUoKSk6KHRoaXMuX190cnlPclVuc3Vi
KHRoaXMuX2Vycm9yLHQpLHRoaXMudW5zdWJzY3JpYmUoKSk7ZWxzZXtpZighZS5zeW5jRXJyb3JU
aHJvd2FibGUpdGhyb3cgdGhpcy51bnN1YnNjcmliZSgpLHQ7ZS5zeW5jRXJyb3JWYWx1ZT10LGUu
c3luY0Vycm9yVGhyb3duPSEwLHRoaXMudW5zdWJzY3JpYmUoKX19fSxlLnByb3RvdHlwZS5jb21w
bGV0ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYoIXRoaXMuaXNTdG9wcGVkKXt2YXIgZT10aGlz
Ll9wYXJlbnRTdWJzY3JpYmVyO2lmKHRoaXMuX2NvbXBsZXRlKXt2YXIgbj1mdW5jdGlvbigpe3Jl
dHVybiB0Ll9jb21wbGV0ZS5jYWxsKHQuX2NvbnRleHQpfTtlLnN5bmNFcnJvclRocm93YWJsZT8o
dGhpcy5fX3RyeU9yU2V0RXJyb3IoZSxuKSx0aGlzLnVuc3Vic2NyaWJlKCkpOih0aGlzLl9fdHJ5
T3JVbnN1YihuKSx0aGlzLnVuc3Vic2NyaWJlKCkpfWVsc2UgdGhpcy51bnN1YnNjcmliZSgpfX0s
ZS5wcm90b3R5cGUuX190cnlPclVuc3ViPWZ1bmN0aW9uKHQsZSl7dHJ5e3QuY2FsbCh0aGlzLl9j
b250ZXh0LGUpfWNhdGNoKHQpe3Rocm93IHRoaXMudW5zdWJzY3JpYmUoKSx0fX0sZS5wcm90b3R5
cGUuX190cnlPclNldEVycm9yPWZ1bmN0aW9uKHQsZSxuKXt0cnl7ZS5jYWxsKHRoaXMuX2NvbnRl
eHQsbil9Y2F0Y2goZSl7cmV0dXJuIHQuc3luY0Vycm9yVmFsdWU9ZSx0LnN5bmNFcnJvclRocm93
bj0hMCwhMH1yZXR1cm4hMX0sZS5wcm90b3R5cGUuX3Vuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7dmFy
IHQ9dGhpcy5fcGFyZW50U3Vic2NyaWJlcjt0aGlzLl9jb250ZXh0PW51bGwsdGhpcy5fcGFyZW50
U3Vic2NyaWJlcj1udWxsLHQudW5zdWJzY3JpYmUoKX0sZX0odSl9LHI4Wlk6ZnVuY3Rpb24odCxl
LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJWT2ZaIiksbz1yLnJvb3QuU3ltYm9sO2UucnhTdWJz
Y3JpYmVyPSJmdW5jdGlvbiI9PXR5cGVvZiBvJiYiZnVuY3Rpb24iPT10eXBlb2Ygby5mb3I/by5m
b3IoInJ4U3Vic2NyaWJlciIpOiJAQHJ4U3Vic2NyaWJlciIsZS4kJHJ4U3Vic2NyaWJlcj1lLnJ4
U3Vic2NyaWJlcn0sckNUZjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIlZP
ZloiKSxvPW4oImxIc0IiKSxpPW4oIm1iVkMiKSxhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0
aGlzLl9pc1NjYWxhcj0hMSx0JiYodGhpcy5fc3Vic2NyaWJlPXQpfXJldHVybiB0LnByb3RvdHlw
ZS5saWZ0PWZ1bmN0aW9uKGUpe3ZhciBuPW5ldyB0O3JldHVybiBuLnNvdXJjZT10aGlzLG4ub3Bl
cmF0b3I9ZSxufSx0LnByb3RvdHlwZS5zdWJzY3JpYmU9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRo
aXMub3BlcmF0b3IsaT1vLnRvU3Vic2NyaWJlcih0LGUsbik7aWYocj9yLmNhbGwoaSx0aGlzLnNv
dXJjZSk6aS5hZGQodGhpcy5zb3VyY2U/dGhpcy5fc3Vic2NyaWJlKGkpOnRoaXMuX3RyeVN1YnNj
cmliZShpKSksaS5zeW5jRXJyb3JUaHJvd2FibGUmJihpLnN5bmNFcnJvclRocm93YWJsZT0hMSxp
LnN5bmNFcnJvclRocm93bikpdGhyb3cgaS5zeW5jRXJyb3JWYWx1ZTtyZXR1cm4gaX0sdC5wcm90
b3R5cGUuX3RyeVN1YnNjcmliZT1mdW5jdGlvbih0KXt0cnl7cmV0dXJuIHRoaXMuX3N1YnNjcmli
ZSh0KX1jYXRjaChlKXt0LnN5bmNFcnJvclRocm93bj0hMCx0LnN5bmNFcnJvclZhbHVlPWUsdC5l
cnJvcihlKX19LHQucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO2lm
KGV8fChyLnJvb3QuUngmJnIucm9vdC5SeC5jb25maWcmJnIucm9vdC5SeC5jb25maWcuUHJvbWlz
ZT9lPXIucm9vdC5SeC5jb25maWcuUHJvbWlzZTpyLnJvb3QuUHJvbWlzZSYmKGU9ci5yb290LlBy
b21pc2UpKSwhZSl0aHJvdyBuZXcgRXJyb3IoIm5vIFByb21pc2UgaW1wbCBmb3VuZCIpO3JldHVy
biBuZXcgZShmdW5jdGlvbihlLHIpe3ZhciBvO289bi5zdWJzY3JpYmUoZnVuY3Rpb24oZSl7aWYo
byl0cnl7dChlKX1jYXRjaCh0KXtyKHQpLG8udW5zdWJzY3JpYmUoKX1lbHNlIHQoZSl9LHIsZSl9
KX0sdC5wcm90b3R5cGUuX3N1YnNjcmliZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zb3VyY2Uu
c3Vic2NyaWJlKHQpfSx0LnByb3RvdHlwZVtpLm9ic2VydmFibGVdPWZ1bmN0aW9uKCl7cmV0dXJu
IHRoaXN9LHQuY3JlYXRlPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdChlKX0sdH0oKTtlLk9ic2Vy
dmFibGU9YX0sc0lZTzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPXRoaXMmJnRo
aXMuX19leHRlbmRzfHxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9y
PXR9Zm9yKHZhciByIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShyKSYmKHRbcl09ZVtyXSk7dC5wcm90
b3R5cGU9bnVsbD09PWU/T2JqZWN0LmNyZWF0ZShlKToobi5wcm90b3R5cGU9ZS5wcm90b3R5cGUs
bmV3IG4pfSxvPW4oIkVFcjQiKSxpPW4oInJDVGYiKSxhPW4oIm1tVlMiKSxzPW4oIkIwMFUiKSx1
PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt0LmNhbGwodGhpcyksdGhpcy5zb3VyY2U9ZSx0
aGlzLnN1YmplY3RGYWN0b3J5PW4sdGhpcy5fcmVmQ291bnQ9MCx0aGlzLl9pc0NvbXBsZXRlPSEx
fXJldHVybiByKGUsdCksZS5wcm90b3R5cGUuX3N1YnNjcmliZT1mdW5jdGlvbih0KXtyZXR1cm4g
dGhpcy5nZXRTdWJqZWN0KCkuc3Vic2NyaWJlKHQpfSxlLnByb3RvdHlwZS5nZXRTdWJqZWN0PWZ1
bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc3ViamVjdDtyZXR1cm4gdCYmIXQuaXNTdG9wcGVkfHwodGhp
cy5fc3ViamVjdD10aGlzLnN1YmplY3RGYWN0b3J5KCkpLHRoaXMuX3N1YmplY3R9LGUucHJvdG90
eXBlLmNvbm5lY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jb25uZWN0aW9uO3JldHVybiB0fHwo
dGhpcy5faXNDb21wbGV0ZT0hMSx0PXRoaXMuX2Nvbm5lY3Rpb249bmV3IHMuU3Vic2NyaXB0aW9u
LHQuYWRkKHRoaXMuc291cmNlLnN1YnNjcmliZShuZXcgbCh0aGlzLmdldFN1YmplY3QoKSx0aGlz
KSkpLHQuY2xvc2VkPyh0aGlzLl9jb25uZWN0aW9uPW51bGwsdD1zLlN1YnNjcmlwdGlvbi5FTVBU
WSk6dGhpcy5fY29ubmVjdGlvbj10KSx0fSxlLnByb3RvdHlwZS5yZWZDb3VudD1mdW5jdGlvbigp
e3JldHVybiB0aGlzLmxpZnQobmV3IHAodGhpcykpfSxlfShpLk9ic2VydmFibGUpO2UuQ29ubmVj
dGFibGVPYnNlcnZhYmxlPXU7dmFyIGM9dS5wcm90b3R5cGU7ZS5jb25uZWN0YWJsZU9ic2VydmFi
bGVEZXNjcmlwdG9yPXtvcGVyYXRvcjp7dmFsdWU6bnVsbH0sX3JlZkNvdW50Ont2YWx1ZTowLHdy
aXRhYmxlOiEwfSxfc3ViamVjdDp7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0sX2Nvbm5lY3Rpb246
e3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9LF9zdWJzY3JpYmU6e3ZhbHVlOmMuX3N1YnNjcmliZX0s
X2lzQ29tcGxldGU6e3ZhbHVlOmMuX2lzQ29tcGxldGUsd3JpdGFibGU6ITB9LGdldFN1YmplY3Q6
e3ZhbHVlOmMuZ2V0U3ViamVjdH0sY29ubmVjdDp7dmFsdWU6Yy5jb25uZWN0fSxyZWZDb3VudDp7
dmFsdWU6Yy5yZWZDb3VudH19O3ZhciBsPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt0LmNh
bGwodGhpcyxlKSx0aGlzLmNvbm5lY3RhYmxlPW59cmV0dXJuIHIoZSx0KSxlLnByb3RvdHlwZS5f
ZXJyb3I9ZnVuY3Rpb24oZSl7dGhpcy5fdW5zdWJzY3JpYmUoKSx0LnByb3RvdHlwZS5fZXJyb3Iu
Y2FsbCh0aGlzLGUpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLmNvbm5l
Y3RhYmxlLl9pc0NvbXBsZXRlPSEwLHRoaXMuX3Vuc3Vic2NyaWJlKCksdC5wcm90b3R5cGUuX2Nv
bXBsZXRlLmNhbGwodGhpcyl9LGUucHJvdG90eXBlLl91bnN1YnNjcmliZT1mdW5jdGlvbigpe3Zh
ciB0PXRoaXMuY29ubmVjdGFibGU7aWYodCl7dGhpcy5jb25uZWN0YWJsZT1udWxsO3ZhciBlPXQu
X2Nvbm5lY3Rpb247dC5fcmVmQ291bnQ9MCx0Ll9zdWJqZWN0PW51bGwsdC5fY29ubmVjdGlvbj1u
dWxsLGUmJmUudW5zdWJzY3JpYmUoKX19LGV9KG8uU3ViamVjdFN1YnNjcmliZXIpLHA9ZnVuY3Rp
b24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuY29ubmVjdGFibGU9dH1yZXR1cm4gdC5wcm90b3R5cGUu
Y2FsbD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuY29ubmVjdGFibGU7bi5fcmVmQ291bnQrKzt2
YXIgcj1uZXcgZih0LG4pLG89ZS5zdWJzY3JpYmUocik7cmV0dXJuIHIuY2xvc2VkfHwoci5jb25u
ZWN0aW9uPW4uY29ubmVjdCgpKSxvfSx0fSgpLGY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4p
e3QuY2FsbCh0aGlzLGUpLHRoaXMuY29ubmVjdGFibGU9bn1yZXR1cm4gcihlLHQpLGUucHJvdG90
eXBlLl91bnN1YnNjcmliZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY29ubmVjdGFibGU7aWYoIXQp
cmV0dXJuIHZvaWQodGhpcy5jb25uZWN0aW9uPW51bGwpO3RoaXMuY29ubmVjdGFibGU9bnVsbDt2
YXIgZT10Ll9yZWZDb3VudDtpZihlPD0wKXJldHVybiB2b2lkKHRoaXMuY29ubmVjdGlvbj1udWxs
KTtpZih0Ll9yZWZDb3VudD1lLTEsZT4xKXJldHVybiB2b2lkKHRoaXMuY29ubmVjdGlvbj1udWxs
KTt2YXIgbj10aGlzLmNvbm5lY3Rpb24scj10Ll9jb25uZWN0aW9uO3RoaXMuY29ubmVjdGlvbj1u
dWxsLCFyfHxuJiZyIT09bnx8ci51bnN1YnNjcmliZSgpfSxlfShhLlN1YnNjcmliZXIpfSx0MnF2
OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9dGhpcyYmdGhpcy5fX2V4dGVuZHN8
fGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9dH1mb3IodmFyIHIg
aW4gZSllLmhhc093blByb3BlcnR5KHIpJiYodFtyXT1lW3JdKTt0LnByb3RvdHlwZT1udWxsPT09
ZT9PYmplY3QuY3JlYXRlKGUpOihuLnByb3RvdHlwZT1lLnByb3RvdHlwZSxuZXcgbil9LG89bigi
ckNUZiIpLGk9bigiakJFRiIpLGE9bigiWGFqbyIpLHM9bigiQ1VScCIpLHU9bigid0FrRCIpLGM9
ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3QuY2FsbCh0aGlzKSx0aGlzLnNvdXJjZXM9ZSx0
aGlzLnJlc3VsdFNlbGVjdG9yPW59cmV0dXJuIHIoZSx0KSxlLmNyZWF0ZT1mdW5jdGlvbigpe2Zv
cih2YXIgdD1bXSxuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W24tMF09YXJndW1lbnRzW25d
O2lmKG51bGw9PT10fHwwPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbmV3IGkuRW1wdHlPYnNl
cnZhYmxlO3ZhciByPW51bGw7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRbdC5sZW5ndGgtMV0m
JihyPXQucG9wKCkpLDE9PT10Lmxlbmd0aCYmYS5pc0FycmF5KHRbMF0pJiYodD10WzBdKSwwPT09
dC5sZW5ndGg/bmV3IGkuRW1wdHlPYnNlcnZhYmxlOm5ldyBlKHQscil9LGUucHJvdG90eXBlLl9z
dWJzY3JpYmU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBsKHQsdGhpcy5zb3VyY2VzLHRoaXMucmVz
dWx0U2VsZWN0b3IpfSxlfShvLk9ic2VydmFibGUpO2UuRm9ya0pvaW5PYnNlcnZhYmxlPWM7dmFy
IGw9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dC5jYWxsKHRoaXMsZSksdGhpcy5zb3Vy
Y2VzPW4sdGhpcy5yZXN1bHRTZWxlY3Rvcj1yLHRoaXMuY29tcGxldGVkPTAsdGhpcy5oYXZlVmFs
dWVzPTA7dmFyIG89bi5sZW5ndGg7dGhpcy50b3RhbD1vLHRoaXMudmFsdWVzPW5ldyBBcnJheShv
KTtmb3IodmFyIGk9MDtpPG87aSsrKXt2YXIgYT1uW2ldLHU9cy5zdWJzY3JpYmVUb1Jlc3VsdCh0
aGlzLGEsbnVsbCxpKTt1JiYodS5vdXRlckluZGV4PWksdGhpcy5hZGQodSkpfX1yZXR1cm4gcihl
LHQpLGUucHJvdG90eXBlLm5vdGlmeU5leHQ9ZnVuY3Rpb24odCxlLG4scixvKXt0aGlzLnZhbHVl
c1tuXT1lLG8uX2hhc1ZhbHVlfHwoby5faGFzVmFsdWU9ITAsdGhpcy5oYXZlVmFsdWVzKyspfSxl
LnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRlc3RpbmF0
aW9uLG49dGhpcyxyPW4uaGF2ZVZhbHVlcyxvPW4ucmVzdWx0U2VsZWN0b3IsaT1uLnZhbHVlcyxh
PWkubGVuZ3RoO2lmKCF0Ll9oYXNWYWx1ZSlyZXR1cm4gdm9pZCBlLmNvbXBsZXRlKCk7aWYoKyt0
aGlzLmNvbXBsZXRlZD09PWEpe2lmKHI9PT1hKXt2YXIgcz1vP28uYXBwbHkodGhpcyxpKTppO2Uu
bmV4dChzKX1lLmNvbXBsZXRlKCl9fSxlfSh1Lk91dGVyU3Vic2NyaWJlcil9LHdBa0Q6ZnVuY3Rp
b24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rp
b24odCxlKXtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fWZvcih2YXIgciBpbiBlKWUu
aGFzT3duUHJvcGVydHkocikmJih0W3JdPWVbcl0pO3QucHJvdG90eXBlPW51bGw9PT1lP09iamVj
dC5jcmVhdGUoZSk6KG4ucHJvdG90eXBlPWUucHJvdG90eXBlLG5ldyBuKX0sbz1uKCJtbVZTIiks
aT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJu
IHIoZSx0KSxlLnByb3RvdHlwZS5ub3RpZnlOZXh0PWZ1bmN0aW9uKHQsZSxuLHIsbyl7dGhpcy5k
ZXN0aW5hdGlvbi5uZXh0KGUpfSxlLnByb3RvdHlwZS5ub3RpZnlFcnJvcj1mdW5jdGlvbih0LGUp
e3RoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9LGUucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlPWZ1
bmN0aW9uKHQpe3RoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX0sZX0oby5TdWJzY3JpYmVyKTtl
Lk91dGVyU3Vic2NyaWJlcj1pfSx4QUpzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVu
Y3Rpb24gcih0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3Io
ImFyZ3VtZW50IGlzIG5vdCBhIGZ1bmN0aW9uLiBBcmUgeW91IGxvb2tpbmcgZm9yIGBtYXBUbygp
YD8iKTtyZXR1cm4gdGhpcy5saWZ0KG5ldyBhKHQsZSkpfXZhciBvPXRoaXMmJnRoaXMuX19leHRl
bmRzfHxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPXR9Zm9yKHZh
ciByIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShyKSYmKHRbcl09ZVtyXSk7dC5wcm90b3R5cGU9bnVs
bD09PWU/T2JqZWN0LmNyZWF0ZShlKToobi5wcm90b3R5cGU9ZS5wcm90b3R5cGUsbmV3IG4pfSxp
PW4oIm1tVlMiKTtlLm1hcD1yO3ZhciBhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMu
cHJvamVjdD10LHRoaXMudGhpc0FyZz1lfXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9u
KHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBzKHQsdGhpcy5wcm9qZWN0LHRoaXMudGhpc0Fy
ZykpfSx0fSgpO2UuTWFwT3BlcmF0b3I9YTt2YXIgcz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUs
bixyKXt0LmNhbGwodGhpcyxlKSx0aGlzLnByb2plY3Q9bix0aGlzLmNvdW50PTAsdGhpcy50aGlz
QXJnPXJ8fHRoaXN9cmV0dXJuIG8oZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt2
YXIgZTt0cnl7ZT10aGlzLnByb2plY3QuY2FsbCh0aGlzLnRoaXNBcmcsdCx0aGlzLmNvdW50Kysp
fWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9dGhpcy5kZXN0
aW5hdGlvbi5uZXh0KGUpfSxlfShpLlN1YnNjcmliZXIpfSx5cm91OmZ1bmN0aW9uKHQsZSxuKXsi
dXNlIHN0cmljdCI7ZS5lbXB0eT17Y2xvc2VkOiEwLG5leHQ6ZnVuY3Rpb24odCl7fSxlcnJvcjpm
dW5jdGlvbih0KXt0aHJvdyB0fSxjb21wbGV0ZTpmdW5jdGlvbigpe319fX0pOwpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcv
U3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2Fu
Z3VsYXIva2FybWEuY29uZi5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0
ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXIva2Fy
bWEuY29uZi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NGI0Y2Q1YWNhYjI5OTY4MDQ0ZmM1NzQ4ZmE1M2RkOTdk
MjEyMjlkCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVl
ZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxh
ci9rYXJtYS5jb25mLmpzCkBAIC0wLDAgKzEsNDQgQEAKKy8vIEthcm1hIGNvbmZpZ3VyYXRpb24g
ZmlsZSwgc2VlIGxpbmsgZm9yIG1vcmUgaW5mb3JtYXRpb24KKy8vIGh0dHBzOi8va2FybWEtcnVu
bmVyLmdpdGh1Yi5pby8wLjEzL2NvbmZpZy9jb25maWd1cmF0aW9uLWZpbGUuaHRtbAorCittb2R1
bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjb25maWcpIHsKKyAgY29uZmlnLnNldCh7CisgICAgYmFz
ZVBhdGg6ICcnLAorICAgIGZyYW1ld29ya3M6IFsnamFzbWluZScsICdAYW5ndWxhci9jbGknXSwK
KyAgICBwbHVnaW5zOiBbCisgICAgICByZXF1aXJlKCdrYXJtYS1qYXNtaW5lJyksCisgICAgICBy
ZXF1aXJlKCdrYXJtYS1jaHJvbWUtbGF1bmNoZXInKSwKKyAgICAgIHJlcXVpcmUoJ2thcm1hLWph
c21pbmUtaHRtbC1yZXBvcnRlcicpLAorICAgICAgcmVxdWlyZSgna2FybWEtY292ZXJhZ2UtaXN0
YW5idWwtcmVwb3J0ZXInKSwKKyAgICAgIHJlcXVpcmUoJ0Bhbmd1bGFyL2NsaS9wbHVnaW5zL2th
cm1hJykKKyAgICBdLAorICAgIGNsaWVudDp7CisgICAgICBjbGVhckNvbnRleHQ6IGZhbHNlIC8v
IGxlYXZlIEphc21pbmUgU3BlYyBSdW5uZXIgb3V0cHV0IHZpc2libGUgaW4gYnJvd3NlcgorICAg
IH0sCisgICAgZmlsZXM6IFsKKyAgICAgIHsgcGF0dGVybjogJy4vc3JjL3Rlc3QudHMnLCB3YXRj
aGVkOiBmYWxzZSB9CisgICAgXSwKKyAgICBwcmVwcm9jZXNzb3JzOiB7CisgICAgICAnLi9zcmMv
dGVzdC50cyc6IFsnQGFuZ3VsYXIvY2xpJ10KKyAgICB9LAorICAgIG1pbWU6IHsKKyAgICAgICd0
ZXh0L3gtdHlwZXNjcmlwdCc6IFsndHMnLCd0c3gnXQorICAgIH0sCisgICAgY292ZXJhZ2VJc3Rh
bmJ1bFJlcG9ydGVyOiB7CisgICAgICByZXBvcnRzOiBbICdodG1sJywgJ2xjb3Zvbmx5JyBdLAor
ICAgICAgZml4V2VicGFja1NvdXJjZVBhdGhzOiB0cnVlCisgICAgfSwKKyAgICBhbmd1bGFyQ2xp
OiB7CisgICAgICBlbnZpcm9ubWVudDogJ2RldicKKyAgICB9LAorICAgIHJlcG9ydGVyczogY29u
ZmlnLmFuZ3VsYXJDbGkgJiYgY29uZmlnLmFuZ3VsYXJDbGkuY29kZUNvdmVyYWdlCisgICAgICAg
ICAgICAgID8gWydwcm9ncmVzcycsICdjb3ZlcmFnZS1pc3RhbmJ1bCddCisgICAgICAgICAgICAg
IDogWydwcm9ncmVzcycsICdramh0bWwnXSwKKyAgICBwb3J0OiA5ODc2LAorICAgIGNvbG9yczog
dHJ1ZSwKKyAgICBsb2dMZXZlbDogY29uZmlnLkxPR19JTkZPLAorICAgIGF1dG9XYXRjaDogdHJ1
ZSwKKyAgICBicm93c2VyczogWydDaHJvbWUnXSwKKyAgICBzaW5nbGVSdW46IGZhbHNlCisgIH0p
OworfTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIy
LjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXIvcHJvdHJh
Y3Rvci5jb25mLmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9y
ZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhci9wcm90cmFjdG9y
LmNvbmYuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMWM1ZTFlNWE0NGVhNDg4NzA0MzQ0MGYyYzZjYWUzZTdmNzk3
Y2I2ZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRv
bWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXIv
cHJvdHJhY3Rvci5jb25mLmpzCkBAIC0wLDAgKzEsMzAgQEAKKy8vIFByb3RyYWN0b3IgY29uZmln
dXJhdGlvbiBmaWxlLCBzZWUgbGluayBmb3IgbW9yZSBpbmZvcm1hdGlvbgorLy8gaHR0cHM6Ly9n
aXRodWIuY29tL2FuZ3VsYXIvcHJvdHJhY3Rvci9ibG9iL21hc3Rlci9saWIvY29uZmlnLnRzCisK
K2NvbnN0IHsgU3BlY1JlcG9ydGVyIH0gPSByZXF1aXJlKCdqYXNtaW5lLXNwZWMtcmVwb3J0ZXIn
KTsKKworZXhwb3J0cy5jb25maWcgPSB7CisgIGFsbFNjcmlwdHNUaW1lb3V0OiAxMTAwMCwKKyAg
c3BlY3M6IFsKKyAgICAnLi9lMmUvKiovKi5lMmUtc3BlYy50cycKKyAgXSwKKyAgY2FwYWJpbGl0
aWVzOiB7CisgICAgJ2Jyb3dzZXJOYW1lJzogJ2Nocm9tZScKKyAgfSwKKyAgZGlyZWN0Q29ubmVj
dDogdHJ1ZSwKKyAgYmFzZVVybDogJ2h0dHA6Ly9sb2NhbGhvc3Q6NDIwMC8nLAorICBmcmFtZXdv
cms6ICdqYXNtaW5lJywKKyAgamFzbWluZU5vZGVPcHRzOiB7CisgICAgc2hvd0NvbG9yczogdHJ1
ZSwKKyAgICBkZWZhdWx0VGltZW91dEludGVydmFsOiAzMDAwMCwKKyAgICBwcmludDogZnVuY3Rp
b24oKSB7fQorICB9LAorICBiZWZvcmVMYXVuY2g6IGZ1bmN0aW9uKCkgeworICAgIHJlcXVpcmUo
J3RzLW5vZGUnKS5yZWdpc3Rlcih7CisgICAgICBwcm9qZWN0OiAnZTJlL3RzY29uZmlnLmUyZS5q
c29uJworICAgIH0pOworICB9LAorICBvblByZXBhcmUoKSB7CisgICAgamFzbWluZS5nZXRFbnYo
KS5hZGRSZXBvcnRlcihuZXcgU3BlY1JlcG9ydGVyKHsgc3BlYzogeyBkaXNwbGF5U3RhY2t0cmFj
ZTogdHJ1ZSB9IH0pKTsKKyAgfQorfTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5j
aC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL2FuZ3VsYXIvc3JjL2FwcC9hcHAuY29tcG9uZW50Lmh0bWwgYi9XZWJzaXRlcy9icm93c2Vy
YmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9hbmd1bGFyL3NyYy9hcHAvYXBwLmNvbXBvbmVudC5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlh
NWE1Njg3MzI1ZGJjNzI3NWE3NGMwMmJmZTgwMTg0NDNhNmI3Y2IKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2Rv
bXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyL3NyYy9hcHAvYXBwLmNvbXBvbmVudC5o
dG1sCkBAIC0wLDAgKzEsMjAgQEAKKzxzZWN0aW9uIGNsYXNzPSJ0b2RvYXBwIj4KKyAgPGhlYWRl
ciBjbGFzcz0iaGVhZGVyIj4KKyAgICA8aDE+VG9kb3M8L2gxPgorICAgIDxpbnB1dCBjbGFzcz0i
bmV3LXRvZG8iIHBsYWNlaG9sZGVyPSJXaGF0IG5lZWRzIHRvIGJlIGRvbmU/IiBhdXRvZm9jdXM9
IiIgWyhuZ01vZGVsKV09Im5ld1RvZG8udGl0bGUiIChrZXl1cC5lbnRlcik9ImFkZFRvZG8oKSI+
CisgIDwvaGVhZGVyPgorICA8c2VjdGlvbiBjbGFzcz0ibWFpbiIgKm5nSWY9InRvZG9zLmxlbmd0
aCA+IDAiPgorICAgIDx1bCBjbGFzcz0idG9kby1saXN0Ij4KKyAgICAgIDxsaSAqbmdGb3I9Imxl
dCB0b2RvIG9mIHRvZG9zIiBbY2xhc3MuY29tcGxldGVkXT0idG9kby5jb21wbGV0ZSI+CisgICAg
ICAgIDxkaXYgY2xhc3M9InZpZXciPgorICAgICAgICAgIDxpbnB1dCBjbGFzcz0idG9nZ2xlIiB0
eXBlPSJjaGVja2JveCIgKGNsaWNrKT0idG9nZ2xlVG9kb0NvbXBsZXRlKHRvZG8pIiBbY2hlY2tl
ZF09InRvZG8uY29tcGxldGUiPgorICAgICAgICAgIDxsYWJlbD57e3RvZG8udGl0bGV9fTwvbGFi
ZWw+CisgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZGVzdHJveSIgKGNsaWNrKT0icmVtb3ZlVG9k
byh0b2RvKSI+PC9idXR0b24+CisgICAgICAgIDwvZGl2PgorICAgICAgPC9saT4KKyAgICA8L3Vs
PgorICA8L3NlY3Rpb24+CisgIDxmb290ZXIgY2xhc3M9ImZvb3RlciIgKm5nSWY9InRvZG9zLmxl
bmd0aCA+IDAiPgorICAgIDxzcGFuIGNsYXNzPSJ0b2RvLWNvdW50Ij48c3Ryb25nPnt7dG9kb3Mu
bGVuZ3RofX08L3N0cm9uZz4ge3t0b2Rvcy5sZW5ndGggPT0gMSA/ICdpdGVtJyA6ICdpdGVtcyd9
fSBsZWZ0PC9zcGFuPgorICA8L2Zvb3Rlcj4KKzwvc2VjdGlvbj4KXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21l
dGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyL3Ny
Yy9hcHAvYXBwLmNvbXBvbmVudC5zcGVjLnRzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9T
cGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5n
dWxhci9zcmMvYXBwL2FwcC5jb21wb25lbnQuc3BlYy50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOGU5NTI1ZTlk
MzA3N2NmN2I3MzFmOTY4M2RiOWEwM2Q0M2I0OGU2Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0
ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhci9zcmMvYXBwL2FwcC5jb21wb25lbnQuc3BlYy50cwpA
QCAtMCwwICsxLDM4IEBACisvKiB0c2xpbnQ6ZGlzYWJsZTpuby11bnVzZWQtdmFyaWFibGUgKi8K
KworaW1wb3J0IHsgVGVzdEJlZCwgYXN5bmMgfSBmcm9tICdAYW5ndWxhci9jb3JlL3Rlc3Rpbmcn
OworaW1wb3J0IHsgQXBwQ29tcG9uZW50IH0gZnJvbSAnLi9hcHAuY29tcG9uZW50JzsKK2ltcG9y
dCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnOworaW1wb3J0IHsgVG9kbyB9
IGZyb20gJy4vdG9kbyc7CisKK2Rlc2NyaWJlKCdBcHBDb21wb25lbnQnLCAoKSA9PiB7CisgIGJl
Zm9yZUVhY2goKCkgPT4geworICAgIFRlc3RCZWQuY29uZmlndXJlVGVzdGluZ01vZHVsZSh7Cisg
ICAgICBpbXBvcnRzOiBbCisgICAgICAgIEZvcm1zTW9kdWxlCisgICAgICBdLAorICAgICAgZGVj
bGFyYXRpb25zOiBbCisgICAgICAgIEFwcENvbXBvbmVudAorICAgICAgXSwKKyAgICB9KTsKKyAg
fSk7CisKKyAgaXQoJ3Nob3VsZCBjcmVhdGUgdGhlIGFwcCcsIGFzeW5jKCgpID0+IHsKKyAgICBs
ZXQgZml4dHVyZSA9IFRlc3RCZWQuY3JlYXRlQ29tcG9uZW50KEFwcENvbXBvbmVudCk7CisgICAg
bGV0IGFwcCA9IGZpeHR1cmUuZGVidWdFbGVtZW50LmNvbXBvbmVudEluc3RhbmNlOworICAgIGV4
cGVjdChhcHApLnRvQmVUcnV0aHkoKTsKKyAgfSkpOworCisgIGl0KGBzaG91bGQgaGF2ZSBhIG5l
d1RvZG8gdG9kb2AsIGFzeW5jKCgpID0+IHsKKyAgICBsZXQgZml4dHVyZSA9IFRlc3RCZWQuY3Jl
YXRlQ29tcG9uZW50KEFwcENvbXBvbmVudCk7CisgICAgbGV0IGFwcCA9IGZpeHR1cmUuZGVidWdF
bGVtZW50LmNvbXBvbmVudEluc3RhbmNlOworICAgIGV4cGVjdChhcHAubmV3VG9kbyBpbnN0YW5j
ZW9mIFRvZG8pLnRvQmVUcnV0aHkoKQorICB9KSk7CisKKyAgaXQoJ3Nob3VsZCBkaXNwbGF5ICJU
b2RvcyIgaW4gaDEgdGFnJywgYXN5bmMoKCkgPT4geworICAgIGxldCBmaXh0dXJlID0gVGVzdEJl
ZC5jcmVhdGVDb21wb25lbnQoQXBwQ29tcG9uZW50KTsKKyAgICBmaXh0dXJlLmRldGVjdENoYW5n
ZXMoKTsKKyAgICBsZXQgY29tcGlsZWQgPSBmaXh0dXJlLmRlYnVnRWxlbWVudC5uYXRpdmVFbGVt
ZW50OworICAgIGV4cGVjdChjb21waWxlZC5xdWVyeVNlbGVjdG9yKCdoMScpLnRleHRDb250ZW50
KS50b0NvbnRhaW4oJ1RvZG9zJyk7CisgIH0pKTsKK30pOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMv
YnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvYW5ndWxhci9zcmMvYXBwL2FwcC5jb21wb25lbnQudHMgYi9XZWJzaXRl
cy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hp
dGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyL3NyYy9hcHAvYXBwLmNvbXBvbmVudC50cwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4xZWEwZDgwNjc5OTFkOWVkMzcyNmU1Yzg1ZWI4ODQxMjk5OGNmMTllCi0tLSAvZGV2L251
bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhci9zcmMvYXBwL2FwcC5jb21w
b25lbnQudHMKQEAgLTAsMCArMSwzNCBAQAoraW1wb3J0IHtDb21wb25lbnR9IGZyb20gJ0Bhbmd1
bGFyL2NvcmUnOworaW1wb3J0IHtUb2RvfSBmcm9tICcuL3RvZG8nOworaW1wb3J0IHtUb2RvRGF0
YVNlcnZpY2V9IGZyb20gJy4vdG9kby1kYXRhLnNlcnZpY2UnOworCitAQ29tcG9uZW50KHsKKyAg
c2VsZWN0b3I6ICdhcHAtcm9vdCcsCisgIHRlbXBsYXRlVXJsOiAnLi9hcHAuY29tcG9uZW50Lmh0
bWwnLAorICBwcm92aWRlcnM6IFtUb2RvRGF0YVNlcnZpY2VdCit9KQorZXhwb3J0IGNsYXNzIEFw
cENvbXBvbmVudCB7CisKKyAgbmV3VG9kbzogVG9kbyA9IG5ldyBUb2RvKCk7CisKKyAgY29uc3Ry
dWN0b3IocHJpdmF0ZSB0b2RvRGF0YVNlcnZpY2U6IFRvZG9EYXRhU2VydmljZSkgeworICB9CisK
KyAgYWRkVG9kbygpIHsKKyAgICB0aGlzLnRvZG9EYXRhU2VydmljZS5hZGRUb2RvKHRoaXMubmV3
VG9kbyk7CisgICAgdGhpcy5uZXdUb2RvID0gbmV3IFRvZG8oKTsKKyAgfQorCisgIHRvZ2dsZVRv
ZG9Db21wbGV0ZSh0b2RvKSB7CisgICAgdGhpcy50b2RvRGF0YVNlcnZpY2UudG9nZ2xlVG9kb0Nv
bXBsZXRlKHRvZG8pOworICB9CisKKyAgcmVtb3ZlVG9kbyh0b2RvKSB7CisgICAgdGhpcy50b2Rv
RGF0YVNlcnZpY2UuZGVsZXRlVG9kb0J5SWQodG9kby5pZCk7CisgIH0KKworICBnZXQgdG9kb3Mo
KSB7CisgICAgcmV0dXJuIHRoaXMudG9kb0RhdGFTZXJ2aWNlLmdldEFsbFRvZG9zKCk7CisgIH0K
KworfQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIu
MS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhci9zcmMvYXBw
L2FwcC5tb2R1bGUudHMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4x
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyL3NyYy9hcHAv
YXBwLm1vZHVsZS50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42N2FlNDkxMTliYWE2MzJkM2M5MmE3NDM2NGVkZGI2
YTMyY2JkZDhlCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9T
cGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5n
dWxhci9zcmMvYXBwL2FwcC5tb2R1bGUudHMKQEAgLTAsMCArMSwyMCBAQAoraW1wb3J0IHsgQnJv
d3Nlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInOworaW1wb3J0IHsg
TmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJzsKK2ltcG9ydCB7IEZvcm1zTW9kdWxlIH0g
ZnJvbSAnQGFuZ3VsYXIvZm9ybXMnOworaW1wb3J0IHsgSHR0cE1vZHVsZSB9IGZyb20gJ0Bhbmd1
bGFyL2h0dHAnOworCitpbXBvcnQgeyBBcHBDb21wb25lbnQgfSBmcm9tICcuL2FwcC5jb21wb25l
bnQnOworCitATmdNb2R1bGUoeworICBkZWNsYXJhdGlvbnM6IFsKKyAgICBBcHBDb21wb25lbnQK
KyAgXSwKKyAgaW1wb3J0czogWworICAgIEJyb3dzZXJNb2R1bGUsCisgICAgRm9ybXNNb2R1bGUs
CisgICAgSHR0cE1vZHVsZQorICBdLAorICBwcm92aWRlcnM6IFtdLAorICBib290c3RyYXA6IFtB
cHBDb21wb25lbnRdCit9KQorZXhwb3J0IGNsYXNzIEFwcE1vZHVsZSB7IH0KZGlmZiAtLWdpdCBh
L1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9t
dmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXIvc3JjL2FwcC90b2RvLWRhdGEuc2Vydmlj
ZS5zcGVjLnRzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhci9zcmMvYXBwL3RvZG8t
ZGF0YS5zZXJ2aWNlLnNwZWMudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWExNWRiOWI1YmE5YjYxZmNlNjBjODU1
OTAxY2FiNzc5NDhhYmU4ZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5j
aC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL2FuZ3VsYXIvc3JjL2FwcC90b2RvLWRhdGEuc2VydmljZS5zcGVjLnRzCkBAIC0wLDAgKzEs
MTA2IEBACitpbXBvcnQge1Rlc3RCZWQsIGFzeW5jLCBpbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2Nv
cmUvdGVzdGluZyc7CitpbXBvcnQge1RvZG99IGZyb20gJy4vdG9kbyc7CitpbXBvcnQge1RvZG9E
YXRhU2VydmljZX0gZnJvbSAnLi90b2RvLWRhdGEuc2VydmljZSc7CisKK2Rlc2NyaWJlKCdUb2Rv
RGF0YVNlcnZpY2UnLCAoKSA9PiB7CisgIGJlZm9yZUVhY2goKCkgPT4geworICAgIFRlc3RCZWQu
Y29uZmlndXJlVGVzdGluZ01vZHVsZSh7CisgICAgICBwcm92aWRlcnM6IFtUb2RvRGF0YVNlcnZp
Y2VdCisgICAgfSk7CisgIH0pOworCisgIGl0KCdzaG91bGQgLi4uJywgaW5qZWN0KFtUb2RvRGF0
YVNlcnZpY2VdLCAoc2VydmljZTogVG9kb0RhdGFTZXJ2aWNlKSA9PiB7CisgICAgZXhwZWN0KHNl
cnZpY2UpLnRvQmVUcnV0aHkoKTsKKyAgfSkpOworCisgIGRlc2NyaWJlKCcjZ2V0QWxsVG9kb3Mo
KScsICgpID0+IHsKKworICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IGFycmF5IGJ5IGRl
ZmF1bHQnLCBpbmplY3QoW1RvZG9EYXRhU2VydmljZV0sIChzZXJ2aWNlOiBUb2RvRGF0YVNlcnZp
Y2UpID0+IHsKKyAgICAgIGV4cGVjdChzZXJ2aWNlLmdldEFsbFRvZG9zKCkpLnRvRXF1YWwoW10p
OworICAgIH0pKTsKKworICAgIGl0KCdzaG91bGQgcmV0dXJuIGFsbCB0b2RvcycsIGluamVjdChb
VG9kb0RhdGFTZXJ2aWNlXSwgKHNlcnZpY2U6IFRvZG9EYXRhU2VydmljZSkgPT4geworICAgICAg
bGV0IHRvZG8xID0gbmV3IFRvZG8oe3RpdGxlOiAnSGVsbG8gMScsIGNvbXBsZXRlOiBmYWxzZX0p
OworICAgICAgbGV0IHRvZG8yID0gbmV3IFRvZG8oe3RpdGxlOiAnSGVsbG8gMicsIGNvbXBsZXRl
OiB0cnVlfSk7CisgICAgICBzZXJ2aWNlLmFkZFRvZG8odG9kbzEpOworICAgICAgc2VydmljZS5h
ZGRUb2RvKHRvZG8yKTsKKyAgICAgIGV4cGVjdChzZXJ2aWNlLmdldEFsbFRvZG9zKCkpLnRvRXF1
YWwoW3RvZG8xLCB0b2RvMl0pOworICAgIH0pKTsKKworICB9KTsKKworICBkZXNjcmliZSgnI3Nh
dmUodG9kbyknLCAoKSA9PiB7CisKKyAgICBpdCgnc2hvdWxkIGF1dG9tYXRpY2FsbHkgYXNzaWdu
IGFuIGluY3JlbWVudGluZyBpZCcsIGluamVjdChbVG9kb0RhdGFTZXJ2aWNlXSwgKHNlcnZpY2U6
IFRvZG9EYXRhU2VydmljZSkgPT4geworICAgICAgbGV0IHRvZG8xID0gbmV3IFRvZG8oe3RpdGxl
OiAnSGVsbG8gMScsIGNvbXBsZXRlOiBmYWxzZX0pOworICAgICAgbGV0IHRvZG8yID0gbmV3IFRv
ZG8oe3RpdGxlOiAnSGVsbG8gMicsIGNvbXBsZXRlOiB0cnVlfSk7CisgICAgICBzZXJ2aWNlLmFk
ZFRvZG8odG9kbzEpOworICAgICAgc2VydmljZS5hZGRUb2RvKHRvZG8yKTsKKyAgICAgIGV4cGVj
dChzZXJ2aWNlLmdldFRvZG9CeUlkKDEpKS50b0VxdWFsKHRvZG8xKTsKKyAgICAgIGV4cGVjdChz
ZXJ2aWNlLmdldFRvZG9CeUlkKDIpKS50b0VxdWFsKHRvZG8yKTsKKyAgICB9KSk7CisKKyAgfSk7
CisKKyAgZGVzY3JpYmUoJyNkZWxldGVUb2RvQnlJZChpZCknLCAoKSA9PiB7CisKKyAgICBpdCgn
c2hvdWxkIHJlbW92ZSB0b2RvIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgaWQnLCBpbmplY3QoW1Rv
ZG9EYXRhU2VydmljZV0sIChzZXJ2aWNlOiBUb2RvRGF0YVNlcnZpY2UpID0+IHsKKyAgICAgIGxl
dCB0b2RvMSA9IG5ldyBUb2RvKHt0aXRsZTogJ0hlbGxvIDEnLCBjb21wbGV0ZTogZmFsc2V9KTsK
KyAgICAgIGxldCB0b2RvMiA9IG5ldyBUb2RvKHt0aXRsZTogJ0hlbGxvIDInLCBjb21wbGV0ZTog
dHJ1ZX0pOworICAgICAgc2VydmljZS5hZGRUb2RvKHRvZG8xKTsKKyAgICAgIHNlcnZpY2UuYWRk
VG9kbyh0b2RvMik7CisgICAgICBleHBlY3Qoc2VydmljZS5nZXRBbGxUb2RvcygpKS50b0VxdWFs
KFt0b2RvMSwgdG9kbzJdKTsKKyAgICAgIHNlcnZpY2UuZGVsZXRlVG9kb0J5SWQoMSk7CisgICAg
ICBleHBlY3Qoc2VydmljZS5nZXRBbGxUb2RvcygpKS50b0VxdWFsKFt0b2RvMl0pOworICAgICAg
c2VydmljZS5kZWxldGVUb2RvQnlJZCgyKTsKKyAgICAgIGV4cGVjdChzZXJ2aWNlLmdldEFsbFRv
ZG9zKCkpLnRvRXF1YWwoW10pOworICAgIH0pKTsKKworICAgIGl0KCdzaG91bGQgbm90IHJlbW92
aW5nIGFueXRoaW5nIGlmIHRvZG8gd2l0aCBjb3JyZXNwb25kaW5nIGlkIGlzIG5vdCBmb3VuZCcs
IGluamVjdChbVG9kb0RhdGFTZXJ2aWNlXSwgKHNlcnZpY2U6IFRvZG9EYXRhU2VydmljZSkgPT4g
eworICAgICAgbGV0IHRvZG8xID0gbmV3IFRvZG8oe3RpdGxlOiAnSGVsbG8gMScsIGNvbXBsZXRl
OiBmYWxzZX0pOworICAgICAgbGV0IHRvZG8yID0gbmV3IFRvZG8oe3RpdGxlOiAnSGVsbG8gMics
IGNvbXBsZXRlOiB0cnVlfSk7CisgICAgICBzZXJ2aWNlLmFkZFRvZG8odG9kbzEpOworICAgICAg
c2VydmljZS5hZGRUb2RvKHRvZG8yKTsKKyAgICAgIGV4cGVjdChzZXJ2aWNlLmdldEFsbFRvZG9z
KCkpLnRvRXF1YWwoW3RvZG8xLCB0b2RvMl0pOworICAgICAgc2VydmljZS5kZWxldGVUb2RvQnlJ
ZCgzKTsKKyAgICAgIGV4cGVjdChzZXJ2aWNlLmdldEFsbFRvZG9zKCkpLnRvRXF1YWwoW3RvZG8x
LCB0b2RvMl0pOworICAgIH0pKTsKKworICB9KTsKKworICBkZXNjcmliZSgnI3VwZGF0ZVRvZG9C
eUlkKGlkLCB2YWx1ZXMpJywgKCkgPT4geworCisgICAgaXQoJ3Nob3VsZCByZXR1cm4gdG9kbyB3
aXRoIHRoZSBjb3JyZXNwb25kaW5nIGlkIGFuZCB1cGRhdGVkIGRhdGEnLCBpbmplY3QoW1RvZG9E
YXRhU2VydmljZV0sIChzZXJ2aWNlOiBUb2RvRGF0YVNlcnZpY2UpID0+IHsKKyAgICAgIGxldCB0
b2RvID0gbmV3IFRvZG8oe3RpdGxlOiAnSGVsbG8gMScsIGNvbXBsZXRlOiBmYWxzZX0pOworICAg
ICAgc2VydmljZS5hZGRUb2RvKHRvZG8pOworICAgICAgbGV0IHVwZGF0ZWRUb2RvID0gc2Vydmlj
ZS51cGRhdGVUb2RvQnlJZCgxLCB7CisgICAgICAgIHRpdGxlOiAnbmV3IHRpdGxlJworICAgICAg
fSk7CisgICAgICBleHBlY3QodXBkYXRlZFRvZG8udGl0bGUpLnRvRXF1YWwoJ25ldyB0aXRsZScp
OworICAgIH0pKTsKKworICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgaWYgdG9kbyBpcyBub3Qg
Zm91bmQnLCBpbmplY3QoW1RvZG9EYXRhU2VydmljZV0sIChzZXJ2aWNlOiBUb2RvRGF0YVNlcnZp
Y2UpID0+IHsKKyAgICAgIGxldCB0b2RvID0gbmV3IFRvZG8oe3RpdGxlOiAnSGVsbG8gMScsIGNv
bXBsZXRlOiBmYWxzZX0pOworICAgICAgc2VydmljZS5hZGRUb2RvKHRvZG8pOworICAgICAgbGV0
IHVwZGF0ZWRUb2RvID0gc2VydmljZS51cGRhdGVUb2RvQnlJZCgyLCB7CisgICAgICAgIHRpdGxl
OiAnbmV3IHRpdGxlJworICAgICAgfSk7CisgICAgICBleHBlY3QodXBkYXRlZFRvZG8pLnRvRXF1
YWwobnVsbCk7CisgICAgfSkpOworCisgIH0pOworCisgIGRlc2NyaWJlKCcjdG9nZ2xlVG9kb0Nv
bXBsZXRlKHRvZG8pJywgKCkgPT4geworCisgICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHVwZGF0
ZWQgdG9kbyB3aXRoIGludmVyc2UgY29tcGxldGUgc3RhdHVzJywgaW5qZWN0KFtUb2RvRGF0YVNl
cnZpY2VdLCAoc2VydmljZTogVG9kb0RhdGFTZXJ2aWNlKSA9PiB7CisgICAgICBsZXQgdG9kbyA9
IG5ldyBUb2RvKHt0aXRsZTogJ0hlbGxvIDEnLCBjb21wbGV0ZTogZmFsc2V9KTsKKyAgICAgIHNl
cnZpY2UuYWRkVG9kbyh0b2RvKTsKKyAgICAgIGxldCB1cGRhdGVkVG9kbyA9IHNlcnZpY2UudG9n
Z2xlVG9kb0NvbXBsZXRlKHRvZG8pOworICAgICAgZXhwZWN0KHVwZGF0ZWRUb2RvLmNvbXBsZXRl
KS50b0VxdWFsKHRydWUpOworICAgICAgc2VydmljZS50b2dnbGVUb2RvQ29tcGxldGUodG9kbyk7
CisgICAgICBleHBlY3QodXBkYXRlZFRvZG8uY29tcGxldGUpLnRvRXF1YWwoZmFsc2UpOworICAg
IH0pKTsKKworICB9KTsKKworfSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0t
Z2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhci9zcmMvYXBwL3RvZG8tZGF0YS5z
ZXJ2aWNlLnRzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhci9zcmMvYXBwL3RvZG8t
ZGF0YS5zZXJ2aWNlLnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUwOWUzN2Q1ZDQ2NjUzYjQ5YmJiZWJhM2QxNDUx
YzZlOWYzOTVjNzkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3Jn
L1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9h
bmd1bGFyL3NyYy9hcHAvdG9kby1kYXRhLnNlcnZpY2UudHMKQEAgLTAsMCArMSw2MyBAQAoraW1w
b3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJzsKK2ltcG9ydCB7VG9kb30gZnJv
bSAnLi90b2RvJzsKKworQEluamVjdGFibGUoKQorZXhwb3J0IGNsYXNzIFRvZG9EYXRhU2Vydmlj
ZSB7CisKKyAgLy8gUGxhY2Vob2xkZXIgZm9yIGxhc3QgaWQgc28gd2UgY2FuIHNpbXVsYXRlCisg
IC8vIGF1dG9tYXRpYyBpbmNyZW1lbnRpbmcgb2YgaWQncworICBsYXN0SWQ6IG51bWJlciA9IDA7
CisKKyAgLy8gUGxhY2Vob2xkZXIgZm9yIHRvZG8ncworICB0b2RvczogVG9kb1tdID0gW107CisK
KyAgY29uc3RydWN0b3IoKSB7CisgIH0KKworICAvLyBTaW11bGF0ZSBQT1NUIC90b2RvcworICBh
ZGRUb2RvKHRvZG86IFRvZG8pOiBUb2RvRGF0YVNlcnZpY2UgeworICAgIGlmICghdG9kby5pZCkg
eworICAgICAgdG9kby5pZCA9ICsrdGhpcy5sYXN0SWQ7CisgICAgfQorICAgIHRoaXMudG9kb3Mu
cHVzaCh0b2RvKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8vIFNpbXVsYXRlIERFTEVU
RSAvdG9kb3MvOmlkCisgIGRlbGV0ZVRvZG9CeUlkKGlkOiBudW1iZXIpOiBUb2RvRGF0YVNlcnZp
Y2UgeworICAgIHRoaXMudG9kb3MgPSB0aGlzLnRvZG9zCisgICAgICAuZmlsdGVyKHRvZG8gPT4g
dG9kby5pZCAhPT0gaWQpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLy8gU2ltdWxhdGUg
UFVUIC90b2Rvcy86aWQKKyAgdXBkYXRlVG9kb0J5SWQoaWQ6IG51bWJlciwgdmFsdWVzOiBPYmpl
Y3QgPSB7fSk6IFRvZG8geworICAgIGxldCB0b2RvID0gdGhpcy5nZXRUb2RvQnlJZChpZCk7Cisg
ICAgaWYgKCF0b2RvKSB7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgT2JqZWN0LmFz
c2lnbih0b2RvLCB2YWx1ZXMpOworICAgIHJldHVybiB0b2RvOworICB9CisKKyAgLy8gU2ltdWxh
dGUgR0VUIC90b2RvcworICBnZXRBbGxUb2RvcygpOiBUb2RvW10geworICAgIHJldHVybiB0aGlz
LnRvZG9zOworICB9CisKKyAgLy8gU2ltdWxhdGUgR0VUIC90b2Rvcy86aWQKKyAgZ2V0VG9kb0J5
SWQoaWQ6IG51bWJlcik6IFRvZG8geworICAgIHJldHVybiB0aGlzLnRvZG9zCisgICAgICAuZmls
dGVyKHRvZG8gPT4gdG9kby5pZCA9PT0gaWQpCisgICAgICAucG9wKCk7CisgIH0KKworICAvLyBU
b2dnbGUgdG9kbyBjb21wbGV0ZQorICB0b2dnbGVUb2RvQ29tcGxldGUodG9kbzogVG9kbyl7Cisg
ICAgbGV0IHVwZGF0ZWRUb2RvID0gdGhpcy51cGRhdGVUb2RvQnlJZCh0b2RvLmlkLCB7CisgICAg
ICBjb21wbGV0ZTogIXRvZG8uY29tcGxldGUKKyAgICB9KTsKKyAgICByZXR1cm4gdXBkYXRlZFRv
ZG87CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1dl
YnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXIvc3JjL2FwcC90b2RvLnNwZWMudHMgYi9XZWJz
aXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyL3NyYy9hcHAvdG9kby5zcGVjLnRzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjVhNTRhZGQzNDgyYzg3MzRlZTk2NWE0M2EyMTExOGY2NjNhZmQzOTgKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyL3NyYy9hcHAvdG9kby5zcGVj
LnRzCkBAIC0wLDAgKzEsMTYgQEAKK2ltcG9ydCB7VG9kb30gZnJvbSAnLi90b2RvJzsKKworZGVz
Y3JpYmUoJ1RvZG8nLCAoKSA9PiB7CisgIGl0KCdzaG91bGQgY3JlYXRlIGFuIGluc3RhbmNlJywg
KCkgPT4geworICAgIGV4cGVjdChuZXcgVG9kbygpKS50b0JlVHJ1dGh5KCk7CisgIH0pOworCisg
IGl0KCdzaG91bGQgYWNjZXB0IHZhbHVlcyBpbiB0aGUgY29uc3RydWN0b3InLCAoKSA9PiB7Cisg
ICAgbGV0IHRvZG8gPSBuZXcgVG9kbyh7CisgICAgICB0aXRsZTogJ2hlbGxvJywKKyAgICAgIGNv
bXBsZXRlOiB0cnVlCisgICAgfSk7CisgICAgZXhwZWN0KHRvZG8udGl0bGUpLnRvRXF1YWwoJ2hl
bGxvJyk7CisgICAgZXhwZWN0KHRvZG8uY29tcGxldGUpLnRvRXF1YWwodHJ1ZSk7CisgIH0pOwor
fSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJv
d3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1
cmUtZXhhbXBsZXMvYW5ndWxhci9zcmMvYXBwL3RvZG8udHMgYi9XZWJzaXRlcy9icm93c2VyYmVu
Y2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9hbmd1bGFyL3NyYy9hcHAvdG9kby50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMWQwYTc2OGI3Nzk4NGI5
NzM1OTM3NDA4ZTdiYjZjNjg1NDg3NzdkCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJv
d3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1
cmUtZXhhbXBsZXMvYW5ndWxhci9zcmMvYXBwL3RvZG8udHMKQEAgLTAsMCArMSw5IEBACitleHBv
cnQgY2xhc3MgVG9kbyB7CisgIGlkOiBudW1iZXI7CisgIHRpdGxlOiBzdHJpbmcgPSAnJzsKKyAg
Y29tcGxldGU6IGJvb2xlYW4gPSBmYWxzZTsKKworICBjb25zdHJ1Y3Rvcih2YWx1ZXM6IE9iamVj
dCA9IHt9KSB7CisgICAgT2JqZWN0LmFzc2lnbih0aGlzLCB2YWx1ZXMpOworICB9Cit9ClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNo
Lm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvYW5ndWxhci9zcmMvYXNzZXRzL2Nzcy90b2RvbXZjLWFwcC5jc3MgYi9XZWJzaXRlcy9icm93
c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVy
ZS1leGFtcGxlcy9hbmd1bGFyL3NyYy9hc3NldHMvY3NzL3RvZG9tdmMtYXBwLmNzcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5lMDRmYmRiZGI0ZWQ0YWZlMDlkNTU0M2RiNTIwZGM2YTlkZGQ0MWIyCi0tLSAvZGV2L251
bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhci9zcmMvYXNzZXRzL2Nzcy90
b2RvbXZjLWFwcC5jc3MKQEAgLTAsMCArMSwzNzYgQEAKK2h0bWwsCitib2R5IHsKKyAgICBtYXJn
aW46IDA7CisgICAgcGFkZGluZzogMDsKK30KKworYnV0dG9uIHsKKyAgICBtYXJnaW46IDA7Cisg
ICAgcGFkZGluZzogMDsKKyAgICBib3JkZXI6IDA7CisgICAgYmFja2dyb3VuZDogbm9uZTsKKyAg
ICBmb250LXNpemU6IDEwMCU7CisgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgIGZv
bnQtZmFtaWx5OiBpbmhlcml0OworICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0OworICAgIGNvbG9y
OiBpbmhlcml0OworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKKyAgICBhcHBlYXJhbmNl
OiBub25lOworICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOworICAgIC1t
b3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7Cit9CisKK2JvZHkgeworICAgIGZvbnQ6
IDE0cHggJ0hlbHZldGljYSBOZXVlJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsKKyAg
ICBsaW5lLWhlaWdodDogMS40ZW07CisgICAgYmFja2dyb3VuZDogI2Y1ZjVmNTsKKyAgICBjb2xv
cjogIzRkNGQ0ZDsKKyAgICBtaW4td2lkdGg6IDIzMHB4OworICAgIG1heC13aWR0aDogNTUwcHg7
CisgICAgbWFyZ2luOiAwIGF1dG87CisgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFs
aWFzZWQ7CisgICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTsKKyAgICBmb250
LXdlaWdodDogMzAwOworfQorCis6Zm9jdXMgeworICAgIG91dGxpbmU6IDA7Cit9CisKKy5oaWRk
ZW4geworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisKKy50b2RvYXBwIHsKKyAgICBiYWNrZ3JvdW5k
OiAjZmZmOworICAgIG1hcmdpbjogMTMwcHggMCA0MHB4IDA7CisgICAgcG9zaXRpb246IHJlbGF0
aXZlOworICAgIGJveC1zaGFkb3c6IDAgMnB4IDRweCAwIHJnYmEoMCwgMCwgMCwgMC4yKSwKKyAg
ICAgICAgICAgICAgICAwIDI1cHggNTBweCAwIHJnYmEoMCwgMCwgMCwgMC4xKTsKK30KKworLnRv
ZG9hcHAgaW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIgeworICAgIGZvbnQtc3R5bGU6
IGl0YWxpYzsKKyAgICBmb250LXdlaWdodDogMzAwOworICAgIGNvbG9yOiAjZTZlNmU2OworfQor
CisudG9kb2FwcCBpbnB1dDo6LW1vei1wbGFjZWhvbGRlciB7CisgICAgZm9udC1zdHlsZTogaXRh
bGljOworICAgIGZvbnQtd2VpZ2h0OiAzMDA7CisgICAgY29sb3I6ICNlNmU2ZTY7Cit9CisKKy50
b2RvYXBwIGlucHV0OjppbnB1dC1wbGFjZWhvbGRlciB7CisgICAgZm9udC1zdHlsZTogaXRhbGlj
OworICAgIGZvbnQtd2VpZ2h0OiAzMDA7CisgICAgY29sb3I6ICNlNmU2ZTY7Cit9CisKKy50b2Rv
YXBwIGgxIHsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAtMTU1cHg7CisgICAg
d2lkdGg6IDEwMCU7CisgICAgZm9udC1zaXplOiAxMDBweDsKKyAgICBmb250LXdlaWdodDogMTAw
OworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICBjb2xvcjogcmdiYSgxNzUsIDQ3LCA0Nywg
MC4xNSk7CisgICAgLXdlYmtpdC10ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5Owor
ICAgIC1tb3otdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKKyAgICB0ZXh0LXJl
bmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OworfQorCisubmV3LXRvZG8sCisuZWRpdCB7Cisg
ICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIG1hcmdpbjogMDsKKyAgICB3aWR0aDogMTAwJTsK
KyAgICBmb250LXNpemU6IDI0cHg7CisgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CisgICAgZm9u
dC13ZWlnaHQ6IGluaGVyaXQ7CisgICAgbGluZS1oZWlnaHQ6IDEuNGVtOworICAgIGJvcmRlcjog
MDsKKyAgICBjb2xvcjogaW5oZXJpdDsKKyAgICBwYWRkaW5nOiA2cHg7CisgICAgYm9yZGVyOiAx
cHggc29saWQgIzk5OTsKKyAgICBib3gtc2hhZG93OiBpbnNldCAwIC0xcHggNXB4IDAgcmdiYSgw
LCAwLCAwLCAwLjIpOworICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CisgICAgLXdlYmtpdC1m
b250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CisgICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6
IGdyYXlzY2FsZTsKK30KKworLm5ldy10b2RvIHsKKyAgICBwYWRkaW5nOiAxNnB4IDE2cHggMTZw
eCA2MHB4OworICAgIGJvcmRlcjogbm9uZTsKKyAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAs
IDAuMDAzKTsKKyAgICBib3gtc2hhZG93OiBpbnNldCAwIC0ycHggMXB4IHJnYmEoMCwwLDAsMC4w
Myk7Cit9CisKKy5tYWluIHsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgei1pbmRleDog
MjsKKyAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2U2ZTZlNjsKK30KKworLnRvZ2dsZS1hbGwg
eworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICBib3JkZXI6IG5vbmU7IC8qIE1vYmlsZSBT
YWZhcmkgKi8KKyAgICBvcGFjaXR5OiAwOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKK30KKwor
LnRvZ2dsZS1hbGwgKyBsYWJlbCB7CisgICAgd2lkdGg6IDYwcHg7CisgICAgaGVpZ2h0OiAzNHB4
OworICAgIGZvbnQtc2l6ZTogMDsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAt
NTJweDsKKyAgICBsZWZ0OiAtMTNweDsKKyAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDkw
ZGVnKTsKKyAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7Cit9CisKKy50b2dnbGUtYWxsICsg
bGFiZWw6YmVmb3JlIHsKKyAgICBjb250ZW50OiAn4p2vJzsKKyAgICBmb250LXNpemU6IDIycHg7
CisgICAgY29sb3I6ICNlNmU2ZTY7CisgICAgcGFkZGluZzogMTBweCAyN3B4IDEwcHggMjdweDsK
K30KKworLnRvZ2dsZS1hbGw6Y2hlY2tlZCArIGxhYmVsOmJlZm9yZSB7CisgICAgY29sb3I6ICM3
MzczNzM7Cit9CisKKy50b2RvLWxpc3QgeworICAgIG1hcmdpbjogMDsKKyAgICBwYWRkaW5nOiAw
OworICAgIGxpc3Qtc3R5bGU6IG5vbmU7Cit9CisKKy50b2RvLWxpc3QgbGkgeworICAgIHBvc2l0
aW9uOiByZWxhdGl2ZTsKKyAgICBmb250LXNpemU6IDI0cHg7CisgICAgYm9yZGVyLWJvdHRvbTog
MXB4IHNvbGlkICNlZGVkZWQ7Cit9CisKKy50b2RvLWxpc3QgbGk6bGFzdC1jaGlsZCB7CisgICAg
Ym9yZGVyLWJvdHRvbTogbm9uZTsKK30KKworLnRvZG8tbGlzdCBsaS5lZGl0aW5nIHsKKyAgICBi
b3JkZXItYm90dG9tOiBub25lOworICAgIHBhZGRpbmc6IDA7Cit9CisKKy50b2RvLWxpc3QgbGku
ZWRpdGluZyAuZWRpdCB7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgd2lkdGg6IDUwNnB4Owor
ICAgIHBhZGRpbmc6IDEycHggMTZweDsKKyAgICBtYXJnaW46IDAgMCAwIDQzcHg7Cit9CisKKy50
b2RvLWxpc3QgbGkuZWRpdGluZyAudmlldyB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworLnRv
ZG8tbGlzdCBsaSAudG9nZ2xlIHsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgd2lkdGg6
IDQwcHg7CisgICAgLyogYXV0bywgc2luY2Ugbm9uLVdlYktpdCBicm93c2VycyBkb2Vzbid0IHN1
cHBvcnQgaW5wdXQgc3R5bGluZyAqLworICAgIGhlaWdodDogYXV0bzsKKyAgICBwb3NpdGlvbjog
YWJzb2x1dGU7CisgICAgdG9wOiAwOworICAgIGJvdHRvbTogMDsKKyAgICBtYXJnaW46IGF1dG8g
MDsKKyAgICBib3JkZXI6IG5vbmU7IC8qIE1vYmlsZSBTYWZhcmkgKi8KKyAgICAtd2Via2l0LWFw
cGVhcmFuY2U6IG5vbmU7CisgICAgYXBwZWFyYW5jZTogbm9uZTsKK30KKworLnRvZG8tbGlzdCBs
aSAudG9nZ2xlIHsKKyAgICBvcGFjaXR5OiAwOworfQorCisudG9kby1saXN0IGxpIC50b2dnbGUg
KyBsYWJlbCB7CisgICAgLyoKKyAgICAgICAgRmlyZWZveCByZXF1aXJlcyBgI2AgdG8gYmUgZXNj
YXBlZCAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTkyMjQz
MworICAgICAgICBJRSBhbmQgRWRnZSByZXF1aXJlcyAqZXZlcnl0aGluZyogdG8gYmUgZXNjYXBl
ZCB0byByZW5kZXIsIHNvIHdlIGRvIHRoYXQgaW5zdGVhZCBvZiBqdXN0IHRoZSBgI2AgLSBodHRw
czovL2RldmVsb3Blci5taWNyb3NvZnQuY29tL2VuLXVzL21pY3Jvc29mdC1lZGdlL3BsYXRmb3Jt
L2lzc3Vlcy83MTU3NDU5LworICAgICovCisgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRh
OmltYWdlL3N2Zyt4bWw7dXRmOCwlM0NzdmclMjB4bWxucyUzRCUyMmh0dHAlM0EvL3d3dy53My5v
cmcvMjAwMC9zdmclMjIlMjB3aWR0aCUzRCUyMjQwJTIyJTIwaGVpZ2h0JTNEJTIyNDAlMjIlMjB2
aWV3Qm94JTNEJTIyLTEwJTIwLTE4JTIwMTAwJTIwMTM1JTIyJTNFJTNDY2lyY2xlJTIwY3glM0Ql
MjI1MCUyMiUyMGN5JTNEJTIyNTAlMjIlMjByJTNEJTIyNTAlMjIlMjBmaWxsJTNEJTIybm9uZSUy
MiUyMHN0cm9rZSUzRCUyMiUyM2VkZWRlZCUyMiUyMHN0cm9rZS13aWR0aCUzRCUyMjMlMjIvJTNF
JTNDL3N2ZyUzRScpOworICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CisgICAgYmFj
a2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGxlZnQ7Cit9CisKKy50b2RvLWxpc3QgbGkgLnRvZ2ds
ZTpjaGVja2VkICsgbGFiZWwgeworICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFn
ZS9zdmcreG1sO3V0ZjgsJTNDc3ZnJTIweG1sbnMlM0QlMjJodHRwJTNBLy93d3cudzMub3JnLzIw
MDAvc3ZnJTIyJTIwd2lkdGglM0QlMjI0MCUyMiUyMGhlaWdodCUzRCUyMjQwJTIyJTIwdmlld0Jv
eCUzRCUyMi0xMCUyMC0xOCUyMDEwMCUyMDEzNSUyMiUzRSUzQ2NpcmNsZSUyMGN4JTNEJTIyNTAl
MjIlMjBjeSUzRCUyMjUwJTIyJTIwciUzRCUyMjUwJTIyJTIwZmlsbCUzRCUyMm5vbmUlMjIlMjBz
dHJva2UlM0QlMjIlMjNiZGRhZDUlMjIlMjBzdHJva2Utd2lkdGglM0QlMjIzJTIyLyUzRSUzQ3Bh
dGglMjBmaWxsJTNEJTIyJTIzNWRjMmFmJTIyJTIwZCUzRCUyMk03MiUyMDI1TDQyJTIwNzElMjAy
NyUyMDU2bC00JTIwNCUyMDIwJTIwMjAlMjAzNC01MnolMjIvJTNFJTNDL3N2ZyUzRScpOworfQor
CisudG9kby1saXN0IGxpIGxhYmVsIHsKKyAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7CisgICAg
cGFkZGluZzogMTVweCAxNXB4IDE1cHggNjBweDsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBs
aW5lLWhlaWdodDogMS4yOworICAgIHRyYW5zaXRpb246IGNvbG9yIDAuNHM7Cit9CisKKy50b2Rv
LWxpc3QgbGkuY29tcGxldGVkIGxhYmVsIHsKKyAgICBjb2xvcjogI2Q5ZDlkOTsKKyAgICB0ZXh0
LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsKK30KKworLnRvZG8tbGlzdCBsaSAuZGVzdHJveSB7
CisgICAgZGlzcGxheTogbm9uZTsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAw
OworICAgIHJpZ2h0OiAxMHB4OworICAgIGJvdHRvbTogMDsKKyAgICB3aWR0aDogNDBweDsKKyAg
ICBoZWlnaHQ6IDQwcHg7CisgICAgbWFyZ2luOiBhdXRvIDA7CisgICAgZm9udC1zaXplOiAzMHB4
OworICAgIGNvbG9yOiAjY2M5YTlhOworICAgIG1hcmdpbi1ib3R0b206IDExcHg7CisgICAgdHJh
bnNpdGlvbjogY29sb3IgMC4ycyBlYXNlLW91dDsKK30KKworLnRvZG8tbGlzdCBsaSAuZGVzdHJv
eTpob3ZlciB7CisgICAgY29sb3I6ICNhZjViNWU7Cit9CisKKy50b2RvLWxpc3QgbGkgLmRlc3Ry
b3k6YWZ0ZXIgeworICAgIGNvbnRlbnQ6ICfDlyc7Cit9CisKKy50b2RvLWxpc3QgbGk6aG92ZXIg
LmRlc3Ryb3kgeworICAgIGRpc3BsYXk6IGJsb2NrOworfQorCisudG9kby1saXN0IGxpIC5lZGl0
IHsKKyAgICBkaXNwbGF5OiBub25lOworfQorCisudG9kby1saXN0IGxpLmVkaXRpbmc6bGFzdC1j
aGlsZCB7CisgICAgbWFyZ2luLWJvdHRvbTogLTFweDsKK30KKworLmZvb3RlciB7CisgICAgY29s
b3I6ICM3Nzc7CisgICAgcGFkZGluZzogMTBweCAxNXB4OworICAgIGhlaWdodDogMjBweDsKKyAg
ICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlNmU2ZTY7
Cit9CisKKy5mb290ZXI6YmVmb3JlIHsKKyAgICBjb250ZW50OiAnJzsKKyAgICBwb3NpdGlvbjog
YWJzb2x1dGU7CisgICAgcmlnaHQ6IDA7CisgICAgYm90dG9tOiAwOworICAgIGxlZnQ6IDA7Cisg
ICAgaGVpZ2h0OiA1MHB4OworICAgIG92ZXJmbG93OiBoaWRkZW47CisgICAgYm94LXNoYWRvdzog
MCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwKKyAgICAgICAgICAgICAgICAwIDhweCAwIC0z
cHggI2Y2ZjZmNiwKKyAgICAgICAgICAgICAgICAwIDlweCAxcHggLTNweCByZ2JhKDAsIDAsIDAs
IDAuMiksCisgICAgICAgICAgICAgICAgMCAxNnB4IDAgLTZweCAjZjZmNmY2LAorICAgICAgICAg
ICAgICAgIDAgMTdweCAycHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMik7Cit9CisKKy50b2RvLWNv
dW50IHsKKyAgICBmbG9hdDogbGVmdDsKKyAgICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCisudG9k
by1jb3VudCBzdHJvbmcgeworICAgIGZvbnQtd2VpZ2h0OiAzMDA7Cit9CisKKy5maWx0ZXJzIHsK
KyAgICBtYXJnaW46IDA7CisgICAgcGFkZGluZzogMDsKKyAgICBsaXN0LXN0eWxlOiBub25lOwor
ICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICByaWdodDogMDsKKyAgICBsZWZ0OiAwOworfQor
CisuZmlsdGVycyBsaSB7CisgICAgZGlzcGxheTogaW5saW5lOworfQorCisuZmlsdGVycyBsaSBh
IHsKKyAgICBjb2xvcjogaW5oZXJpdDsKKyAgICBtYXJnaW46IDNweDsKKyAgICBwYWRkaW5nOiAz
cHggN3B4OworICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICBib3JkZXI6IDFweCBzb2xp
ZCB0cmFuc3BhcmVudDsKKyAgICBib3JkZXItcmFkaXVzOiAzcHg7Cit9CisKKy5maWx0ZXJzIGxp
IGE6aG92ZXIgeworICAgIGJvcmRlci1jb2xvcjogcmdiYSgxNzUsIDQ3LCA0NywgMC4xKTsKK30K
KworLmZpbHRlcnMgbGkgYS5zZWxlY3RlZCB7CisgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE3NSwg
NDcsIDQ3LCAwLjIpOworfQorCisuY2xlYXItY29tcGxldGVkLAoraHRtbCAuY2xlYXItY29tcGxl
dGVkOmFjdGl2ZSB7CisgICAgZmxvYXQ6IHJpZ2h0OworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsK
KyAgICBsaW5lLWhlaWdodDogMjBweDsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgICAg
Y3Vyc29yOiBwb2ludGVyOworfQorCisuY2xlYXItY29tcGxldGVkOmhvdmVyIHsKKyAgICB0ZXh0
LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKworLmluZm8geworICAgIG1hcmdpbjogNjVweCBh
dXRvIDA7CisgICAgY29sb3I6ICNiZmJmYmY7CisgICAgZm9udC1zaXplOiAxMHB4OworICAgIHRl
eHQtc2hhZG93OiAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKKyAgICB0ZXh0LWFs
aWduOiBjZW50ZXI7Cit9CisKKy5pbmZvIHAgeworICAgIGxpbmUtaGVpZ2h0OiAxOworfQorCisu
aW5mbyBhIHsKKyAgICBjb2xvcjogaW5oZXJpdDsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7
CisgICAgZm9udC13ZWlnaHQ6IDQwMDsKK30KKworLmluZm8gYTpob3ZlciB7CisgICAgdGV4dC1k
ZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cit9CisKKy8qCisgICAgSGFjayB0byByZW1vdmUgYmFja2dy
b3VuZCBmcm9tIE1vYmlsZSBTYWZhcmkuCisgICAgQ2FuJ3QgdXNlIGl0IGdsb2JhbGx5IHNpbmNl
IGl0IGRlc3Ryb3lzIGNoZWNrYm94ZXMgaW4gRmlyZWZveAorKi8KK0BtZWRpYSBzY3JlZW4gYW5k
ICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MCkgeworICAgIC50b2dnbGUtYWxsLAor
ICAgIC50b2RvLWxpc3QgbGkgLnRvZ2dsZSB7CisgICAgICAgIGJhY2tncm91bmQ6IG5vbmU7Cisg
ICAgfQorCisgICAgLnRvZG8tbGlzdCBsaSAudG9nZ2xlIHsKKyAgICAgICAgaGVpZ2h0OiA0MHB4
OworICAgIH0KK30KKworQG1lZGlhIChtYXgtd2lkdGg6IDQzMHB4KSB7CisgICAgLmZvb3RlciB7
CisgICAgICAgIGhlaWdodDogNTBweDsKKyAgICB9CisKKyAgICAuZmlsdGVycyB7CisgICAgICAg
IGJvdHRvbTogMTBweDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVu
Y2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9hbmd1bGFyL3NyYy9hc3NldHMvY3NzL3RvZG9tdmMtY29tbW9uLmNzcyBiL1dlYnNpdGVz
L2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXIvc3JjL2Fzc2V0cy9jc3MvdG9kb212Yy1jb21tb24uY3Nz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjRkMjVkM2M4NGFjNmM2YWVmMjZiOTY4M2EyYmMxMGM2MWY5NjBjOGYKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4x
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyL3NyYy9hc3Nl
dHMvY3NzL3RvZG9tdmMtY29tbW9uLmNzcwpAQCAtMCwwICsxLDE0MSBAQAoraHIgeworICAgIG1h
cmdpbjogMjBweCAwOworICAgIGJvcmRlcjogMDsKKyAgICBib3JkZXItdG9wOiAxcHggZGFzaGVk
ICNjNWM1YzU7CisgICAgYm9yZGVyLWJvdHRvbTogMXB4IGRhc2hlZCAjZjdmN2Y3OworfQorCisu
bGVhcm4gYSB7CisgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgICB0ZXh0LWRlY29yYXRpb246
IG5vbmU7CisgICAgY29sb3I6ICNiODNmNDU7Cit9CisKKy5sZWFybiBhOmhvdmVyIHsKKyAgICB0
ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgICBjb2xvcjogIzc4N2U3ZTsKK30KKworLmxl
YXJuIGgzLAorLmxlYXJuIGg0LAorLmxlYXJuIGg1IHsKKyAgICBtYXJnaW46IDEwcHggMDsKKyAg
ICBmb250LXdlaWdodDogNTAwOworICAgIGxpbmUtaGVpZ2h0OiAxLjI7CisgICAgY29sb3I6ICMw
MDA7Cit9CisKKy5sZWFybiBoMyB7CisgICAgZm9udC1zaXplOiAyNHB4OworfQorCisubGVhcm4g
aDQgeworICAgIGZvbnQtc2l6ZTogMThweDsKK30KKworLmxlYXJuIGg1IHsKKyAgICBtYXJnaW4t
Ym90dG9tOiAwOworICAgIGZvbnQtc2l6ZTogMTRweDsKK30KKworLmxlYXJuIHVsIHsKKyAgICBw
YWRkaW5nOiAwOworICAgIG1hcmdpbjogMCAwIDMwcHggMjVweDsKK30KKworLmxlYXJuIGxpIHsK
KyAgICBsaW5lLWhlaWdodDogMjBweDsKK30KKworLmxlYXJuIHAgeworICAgIGZvbnQtc2l6ZTog
MTVweDsKKyAgICBmb250LXdlaWdodDogMzAwOworICAgIGxpbmUtaGVpZ2h0OiAxLjM7CisgICAg
bWFyZ2luLXRvcDogMDsKKyAgICBtYXJnaW4tYm90dG9tOiAwOworfQorCisjaXNzdWUtY291bnQg
eworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisKKy5xdW90ZSB7CisgICAgYm9yZGVyOiBub25lOwor
ICAgIG1hcmdpbjogMjBweCAwIDYwcHggMDsKK30KKworLnF1b3RlIHAgeworICAgIGZvbnQtc3R5
bGU6IGl0YWxpYzsKK30KKworLnF1b3RlIHA6YmVmb3JlIHsKKyAgICBjb250ZW50OiAn4oCcJzsK
KyAgICBmb250LXNpemU6IDUwcHg7CisgICAgb3BhY2l0eTogLjE1OworICAgIHBvc2l0aW9uOiBh
YnNvbHV0ZTsKKyAgICB0b3A6IC0yMHB4OworICAgIGxlZnQ6IDNweDsKK30KKworLnF1b3RlIHA6
YWZ0ZXIgeworICAgIGNvbnRlbnQ6ICfigJ0nOworICAgIGZvbnQtc2l6ZTogNTBweDsKKyAgICBv
cGFjaXR5OiAuMTU7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIGJvdHRvbTogLTQycHg7
CisgICAgcmlnaHQ6IDNweDsKK30KKworLnF1b3RlIGZvb3RlciB7CisgICAgcG9zaXRpb246IGFi
c29sdXRlOworICAgIGJvdHRvbTogLTQwcHg7CisgICAgcmlnaHQ6IDA7Cit9CisKKy5xdW90ZSBm
b290ZXIgaW1nIHsKKyAgICBib3JkZXItcmFkaXVzOiAzcHg7Cit9CisKKy5xdW90ZSBmb290ZXIg
YSB7CisgICAgbWFyZ2luLWxlZnQ6IDVweDsKKyAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwor
fQorCisuc3BlZWNoLWJ1YmJsZSB7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIHBhZGRp
bmc6IDEwcHg7CisgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAuMDQpOworICAgIGJvcmRl
ci1yYWRpdXM6IDVweDsKK30KKworLnNwZWVjaC1idWJibGU6YWZ0ZXIgeworICAgIGNvbnRlbnQ6
ICcnOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDEwMCU7CisgICAgcmlnaHQ6
IDMwcHg7CisgICAgYm9yZGVyOiAxM3B4IHNvbGlkIHRyYW5zcGFyZW50OworICAgIGJvcmRlci10
b3AtY29sb3I6IHJnYmEoMCwgMCwgMCwgLjA0KTsKK30KKworLmxlYXJuLWJhciA+IC5sZWFybiB7
CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHdpZHRoOiAyNzJweDsKKyAgICB0b3A6IDhw
eDsKKyAgICBsZWZ0OiAtMzAwcHg7CisgICAgcGFkZGluZzogMTBweDsKKyAgICBib3JkZXItcmFk
aXVzOiA1cHg7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAuNik7
CisgICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogbGVmdDsKKyAgICB0cmFuc2l0aW9uLWR1cmF0aW9u
OiA1MDBtczsKK30KKworQG1lZGlhIChtaW4td2lkdGg6IDg5OXB4KSB7CisgICAgLmxlYXJuLWJh
ciB7CisgICAgICAgIHdpZHRoOiBhdXRvOworICAgICAgICBwYWRkaW5nLWxlZnQ6IDMwMHB4Owor
ICAgIH0KKworICAgIC5sZWFybi1iYXIgPiAubGVhcm4geworICAgICAgICBsZWZ0OiA4cHg7Cisg
ICAgfQorfQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRl
cjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhci9zcmMv
ZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LnByb2QudHMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gu
b3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9hbmd1bGFyL3NyYy9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQucHJvZC50cwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4zNjEyMDczYmMzMWNkNGMxZjVkNmNiYjAwMzE4NTIxZTlhNjFiZDhhCi0tLSAvZGV2L251bGwK
KysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhci9zcmMvZW52aXJvbm1lbnRzL2Vu
dmlyb25tZW50LnByb2QudHMKQEAgLTAsMCArMSwzIEBACitleHBvcnQgY29uc3QgZW52aXJvbm1l
bnQgPSB7CisgIHByb2R1Y3Rpb246IHRydWUKK307CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93
c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVy
ZS1leGFtcGxlcy9hbmd1bGFyL3NyYy9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQudHMgYi9XZWJz
aXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyL3NyYy9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQu
dHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZjc3NzgxZDVhNjA5ZDAwYTI3ZWVjMDJmNDhkZDUxNzJlMjA3ZGExZAot
LS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIy
LjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXIvc3JjL2Vu
dmlyb25tZW50cy9lbnZpcm9ubWVudC50cwpAQCAtMCwwICsxLDggQEAKKy8vIFRoZSBmaWxlIGNv
bnRlbnRzIGZvciB0aGUgY3VycmVudCBlbnZpcm9ubWVudCB3aWxsIG92ZXJ3cml0ZSB0aGVzZSBk
dXJpbmcgYnVpbGQuCisvLyBUaGUgYnVpbGQgc3lzdGVtIGRlZmF1bHRzIHRvIHRoZSBkZXYgZW52
aXJvbm1lbnQgd2hpY2ggdXNlcyBgZW52aXJvbm1lbnQudHNgLCBidXQgaWYgeW91IGRvCisvLyBg
bmcgYnVpbGQgLXByb2RgIHRoZW4gYGVudmlyb25tZW50LnByb2QudHNgIHdpbGwgYmUgdXNlZCBp
bnN0ZWFkLgorLy8gVGhlIGxpc3Qgb2Ygd2hpY2ggZW52IG1hcHMgdG8gd2hpY2ggZmlsZSBjYW4g
YmUgZm91bmQgaW4gYC5hbmd1bGFyLWNsaS5qc29uYC4KKworZXhwb3J0IGNvbnN0IGVudmlyb25t
ZW50ID0geworICBwcm9kdWN0aW9uOiBmYWxzZQorfTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jy
b3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL2FuZ3VsYXIvc3JjL2Zhdmljb24uaWNvIGIvV2Vic2l0ZXMvYnJvd3NlcmJl
bmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvYW5ndWxhci9zcmMvZmF2aWNvbi5pY28KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODA4MWM3Y2VhZjJiZTA4
YmY1OTAxMDE1OGM1ODYxNzBkOWQyZDUxNwpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgNTQzMAp6
Y21jKGplezU0IzZ2dkNvQUkzaSpHNSUkVTchc0Ezd3RNWiRmSDZWOUNgPWVYR0piQFIxJShJX3t2
blp0cER7Nm4KejVQbHtEbXh6QkRickI+fWA5MGUxMm04VCozNldvZURMQSZTRF9od3tIXndNIWNs
X1JXY1ZBIUkreDg3ZWU5NzU7CnpANGtEXj1iWVBuJnBtR0AoK0paYHJxUUVLeFc8fVJ6aFd9SSF8
dWxOPWZtalZpQHh7cCRjQ2ApNSRhISlYJlU8RAp6RkNyUXRsUHNrcmV9ZEI3b01DcD4rYmxLTnZO
NXRnPXVMdnVMbnVxUk07WWMqc3dpZXhzb2gjWFBOdXs5RiNjYEcKelFMZXt5V0EoWTYoOz55fC1l
PFI3OGx8XmB2SDZmdC1tRXJTR35ZYFRaRjJxbTE9Vz1NTmReMlYzKW4yeElsPX5YCnpjUTlWanpI
VzM4dHl8clp6K2JrY1IoLWMpYHdicUMjbDBDRj5mQXkxMWs8MDkoQE9vMUIyQDBgUHRaU2txSyYk
ewp6Z0VZfWBXQHR7JT85dTVyRj99WTdPTHszMzhsPE0lS34tK3c0aUotMkNfPipKWSNQISVNVlFZ
QG9xbkl0cFp9P3MKeiFyPyprd3VSe0FAamcyQ2hsZjBee3EqPjhuNUlyfllXZip3bXNoN0I1JkVw
SGZkNUB4VmFqJmdxc2R1aV5zcHlMCnpCfGtVb2JsR29PN0coTXVLVGZhOT9wR0gwQFFQXmIjIWxN
MXlIV0xoKjJpcSNgQzFUZHJuTy1kIz9PaEBYVjJISwp6S0F7YGVvey0tXksmTVc2Nkxnc2t0ZnZu
I2NDQWMqKH1xc2ZocnZPak1HTEU/YGRIVmlwdTFKM0tnciVnP2NOYTgKeilwa21DOERHSH5mRytk
bHJwKDVeLVFCZUV2a092diNxN01CVkx0bTJvRF4kbEpaeC0tXz1LJlR0ZD0ta3J4KEJiCnpjRW9L
SmRhQFMhJSVAYFAtIyMkPip1JVQqbWgrUWpWQClRYT1NazE/I3pMaytNNHRJdCV9d2FnVHs1PGpL
RSR6Vwp6Zl52N2pXfnVVRS0lbUI3XkNISDhUTDF8X3VySX5oS1RUTE80ZTtadzdyfkkoMDUyUVQh
bnE9azNCSzRyV257UDEKem0xYkhtemIzUXNFUGRkT2ZlaHRzITQrKmhlPC1KMFRwX0gqb3pLRChJ
JCp2RUlSYzV2TDNrZEBweyRrak1JS1FzCno8cEkwKFZ1NyR9djwyZkVOSENWQT1aZ0UoZUJwPTlh
O19PYEJrZnJVLWNtP1VkaFlQfSt6KWspKjR3UU9XMEs3Uwp6eExWOWg3UGVGMmRPdk1nLT5KJSF0
WEFFO3J7QD1iYiVuTlZ4dkkrQyskdD8hVkpAMGRASEl5TUpUSXt2RXcwVWwKemUoaGEhZSZxQU5i
VEwxWm5lTmw0NXQ9I090Pz9DME1IampnWTglKm1HaXNOfFM2JWczO0hseCNmTU5jTDw4N01XCnpa
PjZtb28xWUQ/UCFmSiNKYig0KV9jYzUwWDVuMEtvRFlmZFBvTF5pVmBrJm97TFB5YW9xTXFrOTJ3
Vk0jX08wbAp6MDkkKEEtRCtnVklscTRUQSZ7MVRAQnNVSGBCbT1yI2wkWjUxSjxBJkJqV2liQCRz
fGdaSlFxbWJKUUQlcG11cXIKemxSaTNyJW84SSRzN2JgTmR8NiEqeylJSVhldk9RdT9QI1RyYChh
X3lhQ2BaM216MiVzMEoqVlAhb01yeXYlYUdKCnpKJStocjtKVVI5TiU9TlFVQWNzeEgxRXYoej1K
dzV4KjNaUF53NjRCOVQxO2QkRk4jdnxLM3t5Tz9VM31wI35DWAp6UWV1bDVKMFMtayZRUC1XU151
eFVebEo5cVBFa2lrKk1DaGx1anw7TEV0fiNJOGF0YlJuPE5MTVZ6WU0oUChNY14Keis9VmNmIXxh
KUQqYkFKJEIpPi1VJkYzMitoZlVQLWlMbz1qZzdYbXkrV0xxNl90V3YmYHdEbHojYCYpSnB+aVFm
CnpaUCl0dT59cElJSkt1dyskJnR9R1F1cU1kJVo+MD90JSZCTSZXPG9tJmImd1NeVWk1YHkwYGJL
YGR6Pm9eNFBeWQp6KWM2aF5mMlI+WDgqfXF8YmJsQUY/QDslPzI+JHkrY01RYk57WCQpXlI+djxq
JUhPb1hGTDNuRi0kQVNpekF1N0wKekF+YSlLXnFkaUtDVHNPTTBQRl4le0s9VXU8WkVaa0MteXBl
Qj50TnFfNUFCfDBONVUqZF5UP1g5e3hRbkpZZVV7CnpvWkwjb2JJO35QcDk1ZjFgJVgzRCRNaCo0
Xj9PP0lUfjdIcWxXZ3Vlem1nP1licXw3PnFRKEBwUEhiRTlWP2Z8KAp6KzB4byEjbUBOcDlQbGpz
eXhCWS1VQSp7VSpsYSM4V3oyc098NDhfLTV0OCVfIW4/UyR6bEdlK05BJT92bXhqUy0KekhFNU8z
WmFyVT1YfSQ3PjtPa3AoVVdYSnhJJUdfSi1ASUg7JTUjUnQkKFdVWD82KlV4IUlSZCRkTFA2K1Nt
UG49Cno4emptNGpHak43NzJSe0ZHa1h3Y052OEdCY1pJI0BZMm17Uk5GX3c4KFolXkEqIWJTKiF9
czZzaCpOblVSeXRreQpodW1XOypnN1IrJnxMZWR2Yy08TSliVUVxdFdiYndWM2l3fWN7e3VFdUA3
QDNhCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2Vy
YmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9hbmd1bGFyL3NyYy9pbmRleC5odG1sIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9y
Zy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
YW5ndWxhci9zcmMvaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MzczZDk0NDk3YjE5NDI0MjFhY2Qx
OGM1MzY3OWVlMDYwMDgyMjdjCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJl
bmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvYW5ndWxhci9zcmMvaW5kZXguaHRtbApAQCAtMCwwICsxLDE1IEBACis8IWRvY3R5cGUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxl
PkFuZ3VsYXIgNCBUb2RvTVZDIGV4YW1wbGU8L3RpdGxlPgorICA8bWV0YSBuYW1lPSJ2aWV3cG9y
dCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgorICA8bGlu
ayByZWw9Imljb24iIHR5cGU9ImltYWdlL3gtaWNvbiIgaHJlZj0iZmF2aWNvbi5pY28iPgorICA8
bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImFzc2V0cy9jc3MvdG9kb212Yy1jb21tb24uY3Nz
Ij4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJhc3NldHMvY3NzL3RvZG9tdmMtYXBw
LmNzcyI+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgPGFwcC1yb290PkxvYWRpbmcuLi48L2FwcC1yb290
PgorICA8IS0tIENyZWRpdHM6IEFkZHkgT3NtYW5pIC0tPgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhci9zcmMvbWFpbi50cyBiL1dl
YnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXIvc3JjL21haW4udHMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTlj
YTFjYWY4Y2VlYmViNDMyYmJmMDJiNmEyYjE4Mzc4NjUzZmJkMAotLS0gL2Rldi9udWxsCisrKyBi
L1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9t
dmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXIvc3JjL21haW4udHMKQEAgLTAsMCArMSwx
MSBAQAoraW1wb3J0IHsgZW5hYmxlUHJvZE1vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJzsKK2lt
cG9ydCB7IHBsYXRmb3JtQnJvd3NlckR5bmFtaWMgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1i
cm93c2VyLWR5bmFtaWMnOworCitpbXBvcnQgeyBBcHBNb2R1bGUgfSBmcm9tICcuL2FwcC9hcHAu
bW9kdWxlJzsKK2ltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSAnLi9lbnZpcm9ubWVudHMvZW52
aXJvbm1lbnQnOworCitpZiAoZW52aXJvbm1lbnQucHJvZHVjdGlvbikgeworICBlbmFibGVQcm9k
TW9kZSgpOworfQorCitwbGF0Zm9ybUJyb3dzZXJEeW5hbWljKCkuYm9vdHN0cmFwTW9kdWxlKEFw
cE1vZHVsZSk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21l
dGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyL3Ny
Yy9wb2x5ZmlsbHMudHMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4x
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyL3NyYy9wb2x5
ZmlsbHMudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNTNiZGFmMWI4NjQyNGRmNTIzMDU5NmY4MzUyZTc4ZTRhNGRl
NjZmNQotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRv
bWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXIv
c3JjL3BvbHlmaWxscy50cwpAQCAtMCwwICsxLDY4IEBACisvKioKKyAqIFRoaXMgZmlsZSBpbmNs
dWRlcyBwb2x5ZmlsbHMgbmVlZGVkIGJ5IEFuZ3VsYXIgYW5kIGlzIGxvYWRlZCBiZWZvcmUgdGhl
IGFwcC4KKyAqIFlvdSBjYW4gYWRkIHlvdXIgb3duIGV4dHJhIHBvbHlmaWxscyB0byB0aGlzIGZp
bGUuCisgKgorICogVGhpcyBmaWxlIGlzIGRpdmlkZWQgaW50byAyIHNlY3Rpb25zOgorICogICAx
LiBCcm93c2VyIHBvbHlmaWxscy4gVGhlc2UgYXJlIGFwcGxpZWQgYmVmb3JlIGxvYWRpbmcgWm9u
ZUpTIGFuZCBhcmUgc29ydGVkIGJ5IGJyb3dzZXJzLgorICogICAyLiBBcHBsaWNhdGlvbiBpbXBv
cnRzLiBGaWxlcyBpbXBvcnRlZCBhZnRlciBab25lSlMgdGhhdCBzaG91bGQgYmUgbG9hZGVkIGJl
Zm9yZSB5b3VyIG1haW4KKyAqICAgICAgZmlsZS4KKyAqCisgKiBUaGUgY3VycmVudCBzZXR1cCBp
cyBmb3Igc28tY2FsbGVkICJldmVyZ3JlZW4iIGJyb3dzZXJzOyB0aGUgbGFzdCB2ZXJzaW9ucyBv
ZiBicm93c2VycyB0aGF0CisgKiBhdXRvbWF0aWNhbGx5IHVwZGF0ZSB0aGVtc2VsdmVzLiBUaGlz
IGluY2x1ZGVzIFNhZmFyaSA+PSAxMCwgQ2hyb21lID49IDU1IChpbmNsdWRpbmcgT3BlcmEpLAor
ICogRWRnZSA+PSAxMyBvbiB0aGUgZGVza3RvcCwgYW5kIGlPUyAxMCBhbmQgQ2hyb21lIG9uIG1v
YmlsZS4KKyAqCisgKiBMZWFybiBtb3JlIGluIGh0dHBzOi8vYW5ndWxhci5pby9kb2NzL3RzL2xh
dGVzdC9ndWlkZS9icm93c2VyLXN1cHBvcnQuaHRtbAorICovCisKKy8qKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEJST1dTRVIgUE9MWUZJTExTCisgKi8KKwor
LyoqIElFOSwgSUUxMCBhbmQgSUUxMSByZXF1aXJlcyBhbGwgb2YgdGhlIGZvbGxvd2luZyBwb2x5
ZmlsbHMuICoqLworLy8gaW1wb3J0ICdjb3JlLWpzL2VzNi9zeW1ib2wnOworLy8gaW1wb3J0ICdj
b3JlLWpzL2VzNi9vYmplY3QnOworLy8gaW1wb3J0ICdjb3JlLWpzL2VzNi9mdW5jdGlvbic7Cisv
LyBpbXBvcnQgJ2NvcmUtanMvZXM2L3BhcnNlLWludCc7CisvLyBpbXBvcnQgJ2NvcmUtanMvZXM2
L3BhcnNlLWZsb2F0JzsKKy8vIGltcG9ydCAnY29yZS1qcy9lczYvbnVtYmVyJzsKKy8vIGltcG9y
dCAnY29yZS1qcy9lczYvbWF0aCc7CisvLyBpbXBvcnQgJ2NvcmUtanMvZXM2L3N0cmluZyc7Cisv
LyBpbXBvcnQgJ2NvcmUtanMvZXM2L2RhdGUnOworLy8gaW1wb3J0ICdjb3JlLWpzL2VzNi9hcnJh
eSc7CisvLyBpbXBvcnQgJ2NvcmUtanMvZXM2L3JlZ2V4cCc7CisvLyBpbXBvcnQgJ2NvcmUtanMv
ZXM2L21hcCc7CisvLyBpbXBvcnQgJ2NvcmUtanMvZXM2L3NldCc7CisKKy8qKiBJRTEwIGFuZCBJ
RTExIHJlcXVpcmVzIHRoZSBmb2xsb3dpbmcgZm9yIE5nQ2xhc3Mgc3VwcG9ydCBvbiBTVkcgZWxl
bWVudHMgKi8KKy8vIGltcG9ydCAnY2xhc3NsaXN0LmpzJzsgIC8vIFJ1biBgbnBtIGluc3RhbGwg
LS1zYXZlIGNsYXNzbGlzdC5qc2AuCisKKy8qKiBJRTEwIGFuZCBJRTExIHJlcXVpcmVzIHRoZSBm
b2xsb3dpbmcgdG8gc3VwcG9ydCBgQGFuZ3VsYXIvYW5pbWF0aW9uYC4gKi8KKy8vIGltcG9ydCAn
d2ViLWFuaW1hdGlvbnMtanMnOyAgLy8gUnVuIGBucG0gaW5zdGFsbCAtLXNhdmUgd2ViLWFuaW1h
dGlvbnMtanNgLgorCisKKy8qKiBFdmVyZ3JlZW4gYnJvd3NlcnMgcmVxdWlyZSB0aGVzZS4gKiov
CitpbXBvcnQgJ2NvcmUtanMvZXM2L3JlZmxlY3QnOworaW1wb3J0ICdjb3JlLWpzL2VzNy9yZWZs
ZWN0JzsKKworCisvKiogQUxMIEZpcmVmb3ggYnJvd3NlcnMgcmVxdWlyZSB0aGUgZm9sbG93aW5n
IHRvIHN1cHBvcnQgYEBhbmd1bGFyL2FuaW1hdGlvbmAuICoqLworLy8gaW1wb3J0ICd3ZWItYW5p
bWF0aW9ucy1qcyc7ICAvLyBSdW4gYG5wbSBpbnN0YWxsIC0tc2F2ZSB3ZWItYW5pbWF0aW9ucy1q
c2AuCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisg
KiBab25lIEpTIGlzIHJlcXVpcmVkIGJ5IEFuZ3VsYXIgaXRzZWxmLgorICovCitpbXBvcnQgJ3pv
bmUuanMvZGlzdC96b25lJzsgIC8vIEluY2x1ZGVkIHdpdGggQW5ndWxhciBDTEkuCisKKworCisv
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBUFBMSUNBVElP
TiBJTVBPUlRTCisgKi8KKworLyoqCisgKiBEYXRlLCBjdXJyZW5jeSwgZGVjaW1hbCBhbmQgcGVy
Y2VudCBwaXBlcy4KKyAqIE5lZWRlZCBmb3I6IEFsbCBidXQgQ2hyb21lLCBGaXJlZm94LCBFZGdl
LCBJRTExIGFuZCBTYWZhcmkgMTAKKyAqLworLy8gaW1wb3J0ICdpbnRsJzsgIC8vIFJ1biBgbnBt
IGluc3RhbGwgLS1zYXZlIGludGxgLgpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNo
Lm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvYW5ndWxhci9zcmMvc3R5bGVzLmNzcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3Bl
ZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3Vs
YXIvc3JjL3N0eWxlcy5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTBkNGVlMDA3MmNlM2ZjNDE4MTJmOGFmOTEw
MjE5ZjllZWEzYzNkZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5v
cmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L2FuZ3VsYXIvc3JjL3N0eWxlcy5jc3MKQEAgLTAsMCArMSBAQAorLyogWW91IGNhbiBhZGQgZ2xv
YmFsIHN0eWxlcyB0byB0aGlzIGZpbGUsIGFuZCBhbHNvIGltcG9ydCBvdGhlciBzdHlsZSBmaWxl
cyAqLwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIu
MS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhci9zcmMvdGVz
dC50cyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2Vz
L3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXIvc3JjL3Rlc3QudHMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOWJmNzIyNjdlOWIxYWRhNGY0NmZmNmE3NzI5ZWY1ZjI3MmY3Yzk0NwotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXIvc3JjL3Rlc3QudHMKQEAg
LTAsMCArMSwzMiBAQAorLy8gVGhpcyBmaWxlIGlzIHJlcXVpcmVkIGJ5IGthcm1hLmNvbmYuanMg
YW5kIGxvYWRzIHJlY3Vyc2l2ZWx5IGFsbCB0aGUgLnNwZWMgYW5kIGZyYW1ld29yayBmaWxlcwor
CitpbXBvcnQgJ3pvbmUuanMvZGlzdC9sb25nLXN0YWNrLXRyYWNlLXpvbmUnOworaW1wb3J0ICd6
b25lLmpzL2Rpc3QvcHJveHkuanMnOworaW1wb3J0ICd6b25lLmpzL2Rpc3Qvc3luYy10ZXN0JzsK
K2ltcG9ydCAnem9uZS5qcy9kaXN0L2phc21pbmUtcGF0Y2gnOworaW1wb3J0ICd6b25lLmpzL2Rp
c3QvYXN5bmMtdGVzdCc7CitpbXBvcnQgJ3pvbmUuanMvZGlzdC9mYWtlLWFzeW5jLXRlc3QnOwor
aW1wb3J0IHsgZ2V0VGVzdEJlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvdGVzdGluZyc7CitpbXBv
cnQgeworICBCcm93c2VyRHluYW1pY1Rlc3RpbmdNb2R1bGUsCisgIHBsYXRmb3JtQnJvd3NlckR5
bmFtaWNUZXN0aW5nCit9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXItZHluYW1pYy90
ZXN0aW5nJzsKKworLy8gVW5mb3J0dW5hdGVseSB0aGVyZSdzIG5vIHR5cGluZyBmb3IgdGhlIGBf
X2thcm1hX19gIHZhcmlhYmxlLiBKdXN0IGRlY2xhcmUgaXQgYXMgYW55LgorZGVjbGFyZSB2YXIg
X19rYXJtYV9fOiBhbnk7CitkZWNsYXJlIHZhciByZXF1aXJlOiBhbnk7CisKKy8vIFByZXZlbnQg
S2FybWEgZnJvbSBydW5uaW5nIHByZW1hdHVyZWx5LgorX19rYXJtYV9fLmxvYWRlZCA9IGZ1bmN0
aW9uICgpIHt9OworCisvLyBGaXJzdCwgaW5pdGlhbGl6ZSB0aGUgQW5ndWxhciB0ZXN0aW5nIGVu
dmlyb25tZW50LgorZ2V0VGVzdEJlZCgpLmluaXRUZXN0RW52aXJvbm1lbnQoCisgIEJyb3dzZXJE
eW5hbWljVGVzdGluZ01vZHVsZSwKKyAgcGxhdGZvcm1Ccm93c2VyRHluYW1pY1Rlc3RpbmcoKQor
KTsKKy8vIFRoZW4gd2UgZmluZCBhbGwgdGhlIHRlc3RzLgorY29uc3QgY29udGV4dCA9IHJlcXVp
cmUuY29udGV4dCgnLi8nLCB0cnVlLCAvXC5zcGVjXC50cyQvKTsKKy8vIEFuZCBsb2FkIHRoZSBt
b2R1bGVzLgorY29udGV4dC5rZXlzKCkubWFwKGNvbnRleHQpOworLy8gRmluYWxseSwgc3RhcnQg
S2FybWEgdG8gcnVuIHRoZSB0ZXN0cy4KK19fa2FybWFfXy5zdGFydCgpOwpkaWZmIC0tZ2l0IGEv
V2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212
Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhci9zcmMvdHlwaW5ncy5kLnRzIGIvV2Vic2l0
ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhci9zcmMvdHlwaW5ncy5kLnRzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVm
NWM3YmQ2MjA1NzkyOTZhMTI5MGIxYTBiMDRjOTZkNzJlNTdiYzYKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2Rv
bXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyL3NyYy90eXBpbmdzLmQudHMKQEAgLTAs
MCArMSw1IEBACisvKiBTeXN0ZW1KUyBtb2R1bGUgZGVmaW5pdGlvbiAqLworZGVjbGFyZSB2YXIg
bW9kdWxlOiBOb2RlTW9kdWxlOworaW50ZXJmYWNlIE5vZGVNb2R1bGUgeworICBpZDogc3RyaW5n
OworfQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIu
MS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2luZGV4
Lmh0bWwgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvaW5kZXguaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mNTUzOWRlZWY4N2RjMGJhZGQ2MWNjZmU2M2RkYjU1NTdiYjUxOTY4Ci0tLSAvZGV2
L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2luZGV4Lmh0bWwK
QEAgLTAsMCArMSwyMSBAQAorPCFkb2N0eXBlIGh0bWw+Cis8aHRtbCBsYW5nPSJlbiIgZGF0YS1m
cmFtZXdvcms9ImFuZ3VsYXJqcyI+CisgICAgPGhlYWQ+CisgICAgICAgIDxtZXRhIGNoYXJzZXQ9
InV0Zi04Ij4KKyAgICAgICAgPHRpdGxlPkFuZ3VsYXIgMS42LjUgVG9kb01WQyBleGFtcGxlPC90
aXRsZT4KKyAgICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJub2RlX21vZHVsZXMv
dG9kb212Yy1jb21tb24vYmFzZS5jc3MiPgorICAgICAgICA8bGluayByZWw9InN0eWxlc2hlZXQi
IGhyZWY9Im5vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvaW5kZXguY3NzIj4KKyAgICAgICAg
PHN0eWxlPltuZy1jbG9ha10geyBkaXNwbGF5OiBub25lOyB9PC9zdHlsZT4KKyAgICA8L2hlYWQ+
CisgICAgPGJvZHkgbmctYXBwPSJ0b2RvbXZjIj4KKyAgICAgICAgPG5nLXZpZXcgLz4KKyAgICAg
ICAgPHNjcmlwdCBzcmM9Im5vZGVfbW9kdWxlcy9hbmd1bGFyL2FuZ3VsYXIubWluLmpzIj48L3Nj
cmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9Im5vZGVfbW9kdWxlcy9hbmd1bGFyLXJvdXRlL2Fu
Z3VsYXItcm91dGUubWluLmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9Im5vZGVf
bW9kdWxlcy9hbmd1bGFyLXJlc291cmNlL2FuZ3VsYXItcmVzb3VyY2UubWluLmpzIj48L3Njcmlw
dD4KKyAgICAgICAgPHNjcmlwdCBzcmM9ImpzL2FwcC5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxz
Y3JpcHQgc3JjPSJqcy9jb250cm9sbGVycy90b2RvQ3RybC5qcyI+PC9zY3JpcHQ+CisgICAgICAg
IDxzY3JpcHQgc3JjPSJqcy9zZXJ2aWNlcy90b2RvU3RvcmFnZS5qcyI+PC9zY3JpcHQ+CisgICAg
ICAgIDxzY3JpcHQgc3JjPSJqcy9kaXJlY3RpdmVzL3RvZG9Gb2N1cy5qcyI+PC9zY3JpcHQ+Cisg
ICAgICAgIDxzY3JpcHQgc3JjPSJqcy9kaXJlY3RpdmVzL3RvZG9Fc2NhcGUuanMiPjwvc2NyaXB0
PgorICAgIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5j
aC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL2FuZ3VsYXJqcy9qcy9hcHAuanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVk
b21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFy
anMvanMvYXBwLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVmMzBlYTNhMTE5OTUxMDk4NDUwYTU2ZGFkOTcxZWE0
MTEyOWNkYTIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1Nw
ZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1
bGFyanMvanMvYXBwLmpzCkBAIC0wLDAgKzEsMzIgQEAKKy8qZ2xvYmFsIGFuZ3VsYXIgKi8KKwor
LyoqCisgKiBUaGUgbWFpbiBUb2RvTVZDIGFwcCBtb2R1bGUKKyAqCisgKiBAdHlwZSB7YW5ndWxh
ci5Nb2R1bGV9CisgKi8KK2FuZ3VsYXIubW9kdWxlKCd0b2RvbXZjJywgWyduZ1JvdXRlJywgJ25n
UmVzb3VyY2UnXSkKKyAgICAuY29uZmlnKGZ1bmN0aW9uICgkcm91dGVQcm92aWRlcikgeworICAg
ICAgICAndXNlIHN0cmljdCc7CisKKyAgICAgICAgdmFyIHJvdXRlQ29uZmlnID0geworICAgICAg
ICAgICAgY29udHJvbGxlcjogJ1RvZG9DdHJsJywKKyAgICAgICAgICAgIHRlbXBsYXRlVXJsOiAn
dG9kb212Yy1pbmRleC5odG1sJywKKyAgICAgICAgICAgIHJlc29sdmU6IHsKKyAgICAgICAgICAg
ICAgICBzdG9yZTogZnVuY3Rpb24gKHRvZG9TdG9yYWdlKSB7CisgICAgICAgICAgICAgICAgICAg
IC8vIEdldCB0aGUgY29ycmVjdCBtb2R1bGUgKEFQSSBvciBsb2NhbFN0b3JhZ2UpLgorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdG9kb1N0b3JhZ2UudGhlbihmdW5jdGlvbiAobW9kdWxlKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZ2V0KCk7IC8vIEZldGNoIHRoZSB0b2Rv
IHJlY29yZHMgaW4gdGhlIGJhY2tncm91bmQuCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbW9kdWxlOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgJHJvdXRlUHJvdmlkZXIKKyAgICAg
ICAgICAgIC53aGVuKCcvJywgcm91dGVDb25maWcpCisgICAgICAgICAgICAud2hlbignLzpzdGF0
dXMnLCByb3V0ZUNvbmZpZykKKyAgICAgICAgICAgIC5vdGhlcndpc2UoeworICAgICAgICAgICAg
ICAgIHJlZGlyZWN0VG86ICcvJworICAgICAgICAgICAgfSk7CisgICAgfSk7CmRpZmYgLS1naXQg
YS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2Rv
bXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvanMvY29udHJvbGxlcnMvdG9kb0N0
cmwuanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvanMvY29udHJvbGxlcnMv
dG9kb0N0cmwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTM5ZDVhZWM4YzI0MzQxZGIwMzZjZTBhNTBjNDE2ZTEy
MjcyZjVmYQotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3Bl
ZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3Vs
YXJqcy9qcy9jb250cm9sbGVycy90b2RvQ3RybC5qcwpAQCAtMCwwICsxLDEyNiBAQAorLypnbG9i
YWwgYW5ndWxhciAqLworCisvKioKKyAqIFRoZSBtYWluIGNvbnRyb2xsZXIgZm9yIHRoZSBhcHAu
IFRoZSBjb250cm9sbGVyOgorICogLSByZXRyaWV2ZXMgYW5kIHBlcnNpc3RzIHRoZSBtb2RlbCB2
aWEgdGhlIHRvZG9TdG9yYWdlIHNlcnZpY2UKKyAqIC0gZXhwb3NlcyB0aGUgbW9kZWwgdG8gdGhl
IHRlbXBsYXRlIGFuZCBwcm92aWRlcyBldmVudCBoYW5kbGVycworICovCithbmd1bGFyLm1vZHVs
ZSgndG9kb212YycpCisgICAgLmNvbnRyb2xsZXIoJ1RvZG9DdHJsJywgZnVuY3Rpb24gVG9kb0N0
cmwoJHNjb3BlLCAkcm91dGVQYXJhbXMsICRmaWx0ZXIsIHN0b3JlKSB7CisgICAgICAgICd1c2Ug
c3RyaWN0JzsKKworICAgICAgICB2YXIgdG9kb3MgPSAkc2NvcGUudG9kb3MgPSBzdG9yZS50b2Rv
czsKKworICAgICAgICAkc2NvcGUubmV3VG9kbyA9ICcnOworICAgICAgICAkc2NvcGUuZWRpdGVk
VG9kbyA9IG51bGw7CisgICAgICAgICRzY29wZS5zdGF0dXMgPSAnJzsKKworICAgICAgICAkc2Nv
cGUuJHdhdGNoKCd0b2RvcycsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICRzY29wZS5yZW1h
aW5pbmdDb3VudCA9ICRmaWx0ZXIoJ2ZpbHRlcicpKHRvZG9zLCB7IGNvbXBsZXRlZDogZmFsc2Ug
fSkubGVuZ3RoOworICAgICAgICAgICAgJHNjb3BlLmNvbXBsZXRlZENvdW50ID0gdG9kb3MubGVu
Z3RoIC0gJHNjb3BlLnJlbWFpbmluZ0NvdW50OworICAgICAgICAgICAgJHNjb3BlLmFsbENoZWNr
ZWQgPSAhJHNjb3BlLnJlbWFpbmluZ0NvdW50OworICAgICAgICB9LCB0cnVlKTsKKworICAgICAg
ICAvLyBNb25pdG9yIHRoZSBjdXJyZW50IHJvdXRlIGZvciBjaGFuZ2VzIGFuZCBhZGp1c3QgdGhl
IGZpbHRlciBhY2NvcmRpbmdseS4KKyAgICAgICAgJHNjb3BlLiRvbignJHJvdXRlQ2hhbmdlU3Vj
Y2VzcycsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBzdGF0dXMgPSAkc2NvcGUuc3Rh
dHVzID0gJHJvdXRlUGFyYW1zLnN0YXR1cyB8fCAnJzsKKyAgICAgICAgICAgICRzY29wZS5zdGF0
dXNGaWx0ZXIgPSAoc3RhdHVzID09PSAnYWN0aXZlJykgPworICAgICAgICAgICAgICAgIHsgY29t
cGxldGVkOiBmYWxzZSB9IDogKHN0YXR1cyA9PT0gJ2NvbXBsZXRlZCcpID8KKyAgICAgICAgICAg
ICAgICB7IGNvbXBsZXRlZDogdHJ1ZSB9IDoge307CisgICAgICAgIH0pOworCisgICAgICAgICRz
Y29wZS5hZGRUb2RvID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIG5ld1RvZG8gPSB7
CisgICAgICAgICAgICAgICAgdGl0bGU6ICRzY29wZS5uZXdUb2RvLnRyaW0oKSwKKyAgICAgICAg
ICAgICAgICBjb21wbGV0ZWQ6IGZhbHNlCisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBp
ZiAoIW5ld1RvZG8udGl0bGUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICRzY29wZS5zYXZpbmcgPSB0cnVlOworICAgICAgICAgICAgc3Rv
cmUuaW5zZXJ0KG5ld1RvZG8pCisgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gc3VjY2Vz
cygpIHsKKyAgICAgICAgICAgICAgICAgICAgJHNjb3BlLm5ld1RvZG8gPSAnJzsKKyAgICAgICAg
ICAgICAgICB9KQorICAgICAgICAgICAgICAgIC5maW5hbGx5KGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgICAgICAgICAgJHNjb3BlLnNhdmluZyA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0p
OworICAgICAgICB9OworCisgICAgICAgICRzY29wZS5lZGl0VG9kbyA9IGZ1bmN0aW9uICh0b2Rv
KSB7CisgICAgICAgICAgICAkc2NvcGUuZWRpdGVkVG9kbyA9IHRvZG87CisgICAgICAgICAgICAv
LyBDbG9uZSB0aGUgb3JpZ2luYWwgdG9kbyB0byByZXN0b3JlIGl0IG9uIGRlbWFuZC4KKyAgICAg
ICAgICAgICRzY29wZS5vcmlnaW5hbFRvZG8gPSBhbmd1bGFyLmV4dGVuZCh7fSwgdG9kbyk7Cisg
ICAgICAgIH07CisKKyAgICAgICAgJHNjb3BlLnNhdmVFZGl0cyA9IGZ1bmN0aW9uICh0b2RvLCBl
dmVudCkgeworICAgICAgICAgICAgLy8gQmx1ciBldmVudHMgYXJlIGF1dG9tYXRpY2FsbHkgdHJp
Z2dlcmVkIGFmdGVyIHRoZSBmb3JtIHN1Ym1pdCBldmVudC4KKyAgICAgICAgICAgIC8vIFRoaXMg
ZG9lcyBzb21lIHVuZm9ydHVuYXRlIGxvZ2ljIGhhbmRsaW5nIHRvIHByZXZlbnQgc2F2aW5nIHR3
aWNlLgorICAgICAgICAgICAgaWYgKGV2ZW50ID09PSAnYmx1cicgJiYgJHNjb3BlLnNhdmVFdmVu
dCA9PT0gJ3N1Ym1pdCcpIHsKKyAgICAgICAgICAgICAgICAkc2NvcGUuc2F2ZUV2ZW50ID0gbnVs
bDsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICRzY29wZS5zYXZlRXZlbnQgPSBldmVudDsKKworICAgICAgICAgICAgaWYgKCRzY29wZS5yZXZl
cnRlZCkgeworICAgICAgICAgICAgICAgIC8vIFRvZG8gZWRpdHMgd2VyZSByZXZlcnRlZC0tIGRv
bid0IHNhdmUuCisgICAgICAgICAgICAgICAgJHNjb3BlLnJldmVydGVkID0gbnVsbDsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRvZG8udGl0
bGUgPSB0b2RvLnRpdGxlLnRyaW0oKTsKKworICAgICAgICAgICAgaWYgKHRvZG8udGl0bGUgPT09
ICRzY29wZS5vcmlnaW5hbFRvZG8udGl0bGUpIHsKKyAgICAgICAgICAgICAgICAkc2NvcGUuZWRp
dGVkVG9kbyA9IG51bGw7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBzdG9yZVt0b2RvLnRpdGxlID8gJ3B1dCcgOiAnZGVsZXRlJ10odG9kbykK
KyAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiBzdWNjZXNzKCkge30sIGZ1bmN0aW9uIGVy
cm9yKCkgeworICAgICAgICAgICAgICAgICAgICB0b2RvLnRpdGxlID0gJHNjb3BlLm9yaWdpbmFs
VG9kby50aXRsZTsKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIC5maW5hbGx5
KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmVkaXRlZFRvZG8gPSBu
dWxsOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9OworCisgICAgICAgICRzY29wZS5y
ZXZlcnRFZGl0cyA9IGZ1bmN0aW9uICh0b2RvKSB7CisgICAgICAgICAgICB0b2Rvc1t0b2Rvcy5p
bmRleE9mKHRvZG8pXSA9ICRzY29wZS5vcmlnaW5hbFRvZG87CisgICAgICAgICAgICAkc2NvcGUu
ZWRpdGVkVG9kbyA9IG51bGw7CisgICAgICAgICAgICAkc2NvcGUub3JpZ2luYWxUb2RvID0gbnVs
bDsKKyAgICAgICAgICAgICRzY29wZS5yZXZlcnRlZCA9IHRydWU7CisgICAgICAgIH07CisKKyAg
ICAgICAgJHNjb3BlLnJlbW92ZVRvZG8gPSBmdW5jdGlvbiAodG9kbykgeworICAgICAgICAgICAg
c3RvcmUuZGVsZXRlKHRvZG8pOworICAgICAgICB9OworCisgICAgICAgICRzY29wZS5zYXZlVG9k
byA9IGZ1bmN0aW9uICh0b2RvKSB7CisgICAgICAgICAgICBzdG9yZS5wdXQodG9kbyk7CisgICAg
ICAgIH07CisKKyAgICAgICAgJHNjb3BlLnRvZ2dsZUNvbXBsZXRlZCA9IGZ1bmN0aW9uICh0b2Rv
LCBjb21wbGV0ZWQpIHsKKyAgICAgICAgICAgIGlmIChhbmd1bGFyLmlzRGVmaW5lZChjb21wbGV0
ZWQpKSB7CisgICAgICAgICAgICAgICAgdG9kby5jb21wbGV0ZWQgPSBjb21wbGV0ZWQ7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBzdG9yZS5wdXQodG9kbywgdG9kb3MuaW5kZXhPZih0b2Rv
KSkKKyAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiBzdWNjZXNzKCkge30sIGZ1bmN0aW9u
IGVycm9yKCkgeworICAgICAgICAgICAgICAgICAgICB0b2RvLmNvbXBsZXRlZCA9ICF0b2RvLmNv
bXBsZXRlZDsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfTsKKworICAgICAgICAkc2Nv
cGUuY2xlYXJDb21wbGV0ZWRUb2RvcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHN0b3Jl
LmNsZWFyQ29tcGxldGVkKCk7CisgICAgICAgIH07CisKKyAgICAgICAgJHNjb3BlLm1hcmtBbGwg
PSBmdW5jdGlvbiAoY29tcGxldGVkKSB7CisgICAgICAgICAgICB0b2Rvcy5mb3JFYWNoKGZ1bmN0
aW9uICh0b2RvKSB7CisgICAgICAgICAgICAgICAgaWYgKHRvZG8uY29tcGxldGVkICE9PSBjb21w
bGV0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgJHNjb3BlLnRvZ2dsZUNvbXBsZXRlZCh0b2Rv
LCBjb21wbGV0ZWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAg
ICB9OworICAgIH0pOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVl
ZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxh
cmpzL2pzL2RpcmVjdGl2ZXMvdG9kb0VzY2FwZS5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5v
cmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L2FuZ3VsYXJqcy9qcy9kaXJlY3RpdmVzL3RvZG9Fc2NhcGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTQ0YjUy
YzVmMzViNzcyNjliOTdjZDY2ZDBhOGMxZDU5YTk5MjI5YwotLS0gL2Rldi9udWxsCisrKyBiL1dl
YnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9qcy9kaXJlY3RpdmVzL3RvZG9Fc2NhcGUu
anMKQEAgLTAsMCArMSwyNCBAQAorLypnbG9iYWwgYW5ndWxhciAqLworCisvKioKKyAqIERpcmVj
dGl2ZSB0aGF0IGV4ZWN1dGVzIGFuIGV4cHJlc3Npb24gd2hlbiB0aGUgZWxlbWVudCBpdCBpcyBh
cHBsaWVkIHRvIGdldHMKKyAqIGFuIGBlc2NhcGVgIGtleWRvd24gZXZlbnQuCisgKi8KK2FuZ3Vs
YXIubW9kdWxlKCd0b2RvbXZjJykKKyAgICAuZGlyZWN0aXZlKCd0b2RvRXNjYXBlJywgZnVuY3Rp
b24gKCkgeworICAgICAgICAndXNlIHN0cmljdCc7CisKKyAgICAgICAgdmFyIEVTQ0FQRV9LRVkg
PSAyNzsKKworICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHNjb3BlLCBlbGVtLCBhdHRycykgewor
ICAgICAgICAgICAgZWxlbS5iaW5kKCdrZXlkb3duJywgZnVuY3Rpb24gKGV2ZW50KSB7CisgICAg
ICAgICAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IEVTQ0FQRV9LRVkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgc2NvcGUuJGFwcGx5KGF0dHJzLnRvZG9Fc2NhcGUpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBzY29wZS4kb24oJyRkZXN0cm95
JywgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIGVsZW0udW5iaW5kKCdrZXlkb3duJyk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfTsKKyAgICB9KTsKZGlmZiAtLWdpdCBhL1dlYnNp
dGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9qcy9kaXJlY3RpdmVzL3RvZG9Gb2N1cy5qcyBi
L1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9t
dmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9qcy9kaXJlY3RpdmVzL3RvZG9Gb2N1
cy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5lMWU2YzIxYzkwMGU2MmExNGJjZmI1NmY1YTI1Yjg3YzRjOTZiOWYy
Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRl
cjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2pz
L2RpcmVjdGl2ZXMvdG9kb0ZvY3VzLmpzCkBAIC0wLDAgKzEsMjAgQEAKKy8qZ2xvYmFsIGFuZ3Vs
YXIgKi8KKworLyoqCisgKiBEaXJlY3RpdmUgdGhhdCBwbGFjZXMgZm9jdXMgb24gdGhlIGVsZW1l
bnQgaXQgaXMgYXBwbGllZCB0byB3aGVuIHRoZQorICogZXhwcmVzc2lvbiBpdCBiaW5kcyB0byBl
dmFsdWF0ZXMgdG8gdHJ1ZQorICovCithbmd1bGFyLm1vZHVsZSgndG9kb212YycpCisgICAgLmRp
cmVjdGl2ZSgndG9kb0ZvY3VzJywgZnVuY3Rpb24gdG9kb0ZvY3VzKCR0aW1lb3V0KSB7CisgICAg
ICAgICd1c2Ugc3RyaWN0JzsKKworICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHNjb3BlLCBlbGVt
LCBhdHRycykgeworICAgICAgICAgICAgc2NvcGUuJHdhdGNoKGF0dHJzLnRvZG9Gb2N1cywgZnVu
Y3Rpb24gKG5ld1ZhbCkgeworICAgICAgICAgICAgICAgIGlmIChuZXdWYWwpIHsKKyAgICAgICAg
ICAgICAgICAgICAgJHRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgZWxlbVswXS5mb2N1cygpOworICAgICAgICAgICAgICAgICAgICB9LCAwLCBmYWxzZSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH07CisgICAgfSk7CmRp
ZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvanMvc2VydmljZXMv
dG9kb1N0b3JhZ2UuanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4x
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvanMvc2Vy
dmljZXMvdG9kb1N0b3JhZ2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjY4ZTU5NjI4ZDFkMTZmZjBhY2Y1YTE3
MmRlMWE5MzQwODYwYWMxYwotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5j
aC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL2FuZ3VsYXJqcy9qcy9zZXJ2aWNlcy90b2RvU3RvcmFnZS5qcwpAQCAtMCwwICsxLDk2IEBA
CisvKmdsb2JhbCBhbmd1bGFyICovCisKKy8qKgorICogU2VydmljZXMgdGhhdCBwZXJzaXN0cyBh
bmQgcmV0cmlldmVzIHRvZG9zIGZyb20gbWVtb3J5IG9yIGEgYmFja2VuZCBBUEkKKyAqIGlmIGF2
YWlsYWJsZS4KKyAqCisgKiBUaGV5IGJvdGggZm9sbG93IHRoZSBzYW1lIEFQSSwgcmV0dXJuaW5n
IHByb21pc2VzIGZvciBhbGwgY2hhbmdlcyB0byB0aGUKKyAqIG1vZGVsLgorICovCithbmd1bGFy
Lm1vZHVsZSgndG9kb212YycpCisgICAgLmZhY3RvcnkoJ3RvZG9TdG9yYWdlJywgZnVuY3Rpb24g
KCRodHRwLCAkaW5qZWN0b3IpIHsKKyAgICAgICAgJ3VzZSBzdHJpY3QnOworICAgICAgICByZXR1
cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHJldHVy
biAkaW5qZWN0b3IuZ2V0KCdsb2NhbENhY2hlJyk7CisgICAgICAgIH0pOworICAgIH0pCisKKyAg
ICAuZmFjdG9yeSgnbG9jYWxDYWNoZScsIGZ1bmN0aW9uICgkcSkgeworICAgICAgICAndXNlIHN0
cmljdCc7CisKKyAgICAgICAgdmFyIFNUT1JBR0VfSUQgPSAndG9kb3MtYW5ndWxhcmpzJzsKKwor
ICAgICAgICB2YXIgc3RvcmUgPSB7CisgICAgICAgICAgICB0b2RvczogW10sCisgICAgICAgICAg
ICBjYWNoZTogW10sCisKKyAgICAgICAgICAgIF9nZXRGcm9tTG9jYWxDYWNoZTogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgICAgIC8vIHJldHVybiBKU09OLnBhcnNlKHRoaXMuY2FjaGVbU1RP
UkFHRV9JRF0gfHwgJ1tdJyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFtdOworICAgICAgICAg
ICAgfSwKKworICAgICAgICAgICAgX3NhdmVUb0xvY2FsQ2FjaGU6IGZ1bmN0aW9uICh0b2Rvcykg
eworICAgICAgICAgICAgICAgIC8vIHRoaXMuY2FjaGVbU1RPUkFHRV9JRF0gPSBKU09OLnN0cmlu
Z2lmeSh0b2Rvcyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfSwKKwor
ICAgICAgICAgICAgY2xlYXJDb21wbGV0ZWQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAg
ICB2YXIgZGVmZXJyZWQgPSAkcS5kZWZlcigpOworCisgICAgICAgICAgICAgICAgdmFyIGluY29t
cGxldGVUb2RvcyA9IHN0b3JlLnRvZG9zLmZpbHRlcihmdW5jdGlvbiAodG9kbykgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gIXRvZG8uY29tcGxldGVkOworICAgICAgICAgICAgICAgIH0p
OworCisgICAgICAgICAgICAgICAgYW5ndWxhci5jb3B5KGluY29tcGxldGVUb2Rvcywgc3RvcmUu
dG9kb3MpOworCisgICAgICAgICAgICAgICAgc3RvcmUuX3NhdmVUb0xvY2FsQ2FjaGUoc3RvcmUu
dG9kb3MpOworICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmUoc3RvcmUudG9kb3MpOwor
CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVkLnByb21pc2U7CisgICAgICAgICAgICB9
LAorCisgICAgICAgICAgICBkZWxldGU6IGZ1bmN0aW9uICh0b2RvKSB7CisgICAgICAgICAgICAg
ICAgdmFyIGRlZmVycmVkID0gJHEuZGVmZXIoKTsKKworICAgICAgICAgICAgICAgIHN0b3JlLnRv
ZG9zLnNwbGljZShzdG9yZS50b2Rvcy5pbmRleE9mKHRvZG8pLCAxKTsKKworICAgICAgICAgICAg
ICAgIHN0b3JlLl9zYXZlVG9Mb2NhbENhY2hlKHN0b3JlLnRvZG9zKTsKKyAgICAgICAgICAgICAg
ICBkZWZlcnJlZC5yZXNvbHZlKHN0b3JlLnRvZG9zKTsKKworICAgICAgICAgICAgICAgIHJldHVy
biBkZWZlcnJlZC5wcm9taXNlOworICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgZ2V0OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgdmFyIGRlZmVycmVkID0gJHEuZGVmZXIoKTsK
KworICAgICAgICAgICAgICAgIGFuZ3VsYXIuY29weShzdG9yZS5fZ2V0RnJvbUxvY2FsQ2FjaGUo
KSwgc3RvcmUudG9kb3MpOworICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmUoc3RvcmUu
dG9kb3MpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVkLnByb21pc2U7CisgICAg
ICAgICAgICB9LAorCisgICAgICAgICAgICBpbnNlcnQ6IGZ1bmN0aW9uICh0b2RvKSB7CisgICAg
ICAgICAgICAgICAgdmFyIGRlZmVycmVkID0gJHEuZGVmZXIoKTsKKworICAgICAgICAgICAgICAg
IHN0b3JlLnRvZG9zLnB1c2godG9kbyk7CisKKyAgICAgICAgICAgICAgICBzdG9yZS5fc2F2ZVRv
TG9jYWxDYWNoZShzdG9yZS50b2Rvcyk7CisgICAgICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2
ZShzdG9yZS50b2Rvcyk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVmZXJyZWQucHJvbWlz
ZTsKKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIHB1dDogZnVuY3Rpb24gKHRvZG8sIGlu
ZGV4KSB7CisgICAgICAgICAgICAgICAgdmFyIGRlZmVycmVkID0gJHEuZGVmZXIoKTsKKworICAg
ICAgICAgICAgICAgIHN0b3JlLnRvZG9zW2luZGV4XSA9IHRvZG87CisKKyAgICAgICAgICAgICAg
ICBzdG9yZS5fc2F2ZVRvTG9jYWxDYWNoZShzdG9yZS50b2Rvcyk7CisgICAgICAgICAgICAgICAg
ZGVmZXJyZWQucmVzb2x2ZShzdG9yZS50b2Rvcyk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZGVmZXJyZWQucHJvbWlzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBy
ZXR1cm4gc3RvcmU7CisgICAgfSk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gu
b3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9hbmd1bGFyanMvcmVhZG1lLm1kIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9t
ZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpz
L3JlYWRtZS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NzdjYTQ4OTY1YjFhOTkwNjNhZWQ1ZDg3Y2E4MmU3YWMy
Y2FmNDRkCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVl
ZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxh
cmpzL3JlYWRtZS5tZApAQCAtMCwwICsxLDExIEBACisjIFNwZWVkb21ldGVyIDIuMTogQW5ndWxh
ciAxLjYuNSBUb2RvTVZDIGV4YW1wbGUKKworIyMgVGVzdCBsb2NhbGx5CisKKzEuIGBucG0gaW5z
dGFsbGAKKzIuIFJ1biBhIGxvY2FsIHNlcnZlciBmcm9tIHRoaXMgZGlyZWN0b3J5LiAoWW91IGNv
dWxkIHVzZSBbYG5wbSBpIC1nIGh0dHAtc2VydmVyYF0oaHR0cHM6Ly9naXRodWIuY29tL2luZGV4
emVyby9odHRwLXNlcnZlcikuKQorMy4gT3BlbiB0aGUgVVJMIHBvaW50aW5nIHRvIHRoZSBsb2Nh
bCBzZXJ2ZXIgaW4geW91ciB3ZWIgYnJvd3NlciBvZiBjaG9pY2UuCisKKyMjIEJ1aWxkCisKK1Ro
ZXJlIGlzIG5vIGJ1aWxkIHN0ZXAgZm9yIHRoaXMgZXhhbXBsZS4KZGlmZiAtLWdpdCBhL1dlYnNp
dGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy90b2RvbXZjLWluZGV4Lmh0bWwgYi9XZWJzaXRl
cy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hp
dGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvdG9kb212Yy1pbmRleC5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmIzY2JiYjJlOTExY2M5ZWZlMTVjYzIxMTQ0NDE5Mjg2ZTk0YmNjOTcKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90
b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvdG9kb212Yy1pbmRleC5odG1s
CkBAIC0wLDAgKzEsNTIgQEAKKzxzZWN0aW9uIGlkPSJ0b2RvYXBwIiBjbGFzcz0idG9kb2FwcCI+
CisgICAgPGhlYWRlciBpZD0iaGVhZGVyIj4KKyAgICAgICAgPGgxPnRvZG9zPC9oMT4KKyAgICAg
ICAgPGZvcm0gaWQ9InRvZG8tZm9ybSIgY2xhc3M9InRvZG8tZm9ybSIgbmctc3VibWl0PSJhZGRU
b2RvKCkiPgorICAgICAgICAgICAgPGlucHV0IGlkPSJuZXctdG9kbyIgY2xhc3M9Im5ldy10b2Rv
IiBwbGFjZWhvbGRlcj0iV2hhdCBuZWVkcyB0byBiZSBkb25lPyIgbmctbW9kZWw9Im5ld1RvZG8i
IG5nLWRpc2FibGVkPSJzYXZpbmciIGF1dG9mb2N1cz4KKyAgICAgICAgPC9mb3JtPgorICAgIDwv
aGVhZGVyPgorICAgIDxzZWN0aW9uIGlkPSJtYWluIiBjbGFzcz0ibWFpbiIgbmctc2hvdz0idG9k
b3MubGVuZ3RoIiBuZy1jbG9haz4KKyAgICAgICAgPGlucHV0IGlkPSJ0b2dnbGUtYWxsIiBjbGFz
cz0idG9nZ2xlLWFsbCIgdHlwZT0iY2hlY2tib3giIG5nLW1vZGVsPSJhbGxDaGVja2VkIiBuZy1j
bGljaz0ibWFya0FsbChhbGxDaGVja2VkKSI+CisgICAgICAgIDxsYWJlbCBmb3I9InRvZ2dsZS1h
bGwiPk1hcmsgYWxsIGFzIGNvbXBsZXRlPC9sYWJlbD4KKyAgICAgICAgPHVsIGlkPSJ0b2RvLWxp
c3QiIGNsYXNzPSJ0b2RvLWxpc3QiPgorICAgICAgICAgICAgPGxpIG5nLXJlcGVhdD0idG9kbyBp
biB0b2RvcyB8IGZpbHRlcjpzdGF0dXNGaWx0ZXIgdHJhY2sgYnkgJGluZGV4IiBuZy1jbGFzcz0i
e2NvbXBsZXRlZDogdG9kby5jb21wbGV0ZWQsIGVkaXRpbmc6IHRvZG8gPT0gZWRpdGVkVG9kb30i
PgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZpZXciPgorICAgICAgICAgICAgICAgICAg
ICA8aW5wdXQgY2xhc3M9InRvZ2dsZSIgdHlwZT0iY2hlY2tib3giIG5nLW1vZGVsPSJ0b2RvLmNv
bXBsZXRlZCIgbmctY2hhbmdlPSJ0b2dnbGVDb21wbGV0ZWQodG9kbykiPgorICAgICAgICAgICAg
ICAgICAgICA8bGFiZWwgbmctZGJsY2xpY2s9ImVkaXRUb2RvKHRvZG8pIj57e3RvZG8udGl0bGV9
fTwvbGFiZWw+CisgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRlc3Ryb3kiIG5n
LWNsaWNrPSJyZW1vdmVUb2RvKHRvZG8pIj48L2J1dHRvbj4KKyAgICAgICAgICAgICAgICA8L2Rp
dj4KKyAgICAgICAgICAgICAgICA8Zm9ybSBuZy1zdWJtaXQ9InNhdmVFZGl0cyh0b2RvLCAnc3Vi
bWl0JykiPgorICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImVkaXQiIG5nLXRyaW09
ImZhbHNlIiBuZy1tb2RlbD0idG9kby50aXRsZSIgdG9kby1lc2NhcGU9InJldmVydEVkaXRzKHRv
ZG8pIiBuZy1ibHVyPSJzYXZlRWRpdHModG9kbywgJ2JsdXInKSIKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRvZG8tZm9jdXM9InRvZG8gPT0gZWRpdGVkVG9kbyI+CisgICAgICAgICAgICAgICAg
PC9mb3JtPgorICAgICAgICAgICAgPC9saT4KKyAgICAgICAgPC91bD4KKyAgICA8L3NlY3Rpb24+
CisgICAgPGZvb3RlciBpZD0iZm9vdGVyIiBjbGFzcz0iZm9vdGVyIiBuZy1zaG93PSJ0b2Rvcy5s
ZW5ndGgiIG5nLWNsb2FrPgorICAgICAgICA8c3BhbiBpZD0idG9kby1jb3VudCIgY2xhc3M9InRv
ZG8tY291bnQiPjxzdHJvbmc+e3tyZW1haW5pbmdDb3VudH19PC9zdHJvbmc+CisgICAgICAgICAg
ICA8bmctcGx1cmFsaXplIGNvdW50PSJyZW1haW5pbmdDb3VudCIgd2hlbj0ieyBvbmU6ICdpdGVt
IGxlZnQnLCBvdGhlcjogJ2l0ZW1zIGxlZnQnIH0iPjwvbmctcGx1cmFsaXplPgorICAgICAgICA8
L3NwYW4+CisgICAgICAgIDx1bCBpZD0iZmlsdGVycyIgY2xhc3M9ImZpbHRlcnMiPgorICAgICAg
ICAgICAgPGxpPgorICAgICAgICAgICAgICAgIDxhIG5nLWNsYXNzPSJ7c2VsZWN0ZWQ6IHN0YXR1
cyA9PSAnJ30gIiBocmVmPSIjLyI+QWxsPC9hPgorICAgICAgICAgICAgPC9saT4KKyAgICAgICAg
ICAgIDxsaT4KKyAgICAgICAgICAgICAgICA8YSBuZy1jbGFzcz0ie3NlbGVjdGVkOiBzdGF0dXMg
PT0gJ2FjdGl2ZSd9IiBocmVmPSIjL2FjdGl2ZSI+QWN0aXZlPC9hPgorICAgICAgICAgICAgPC9s
aT4KKyAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgICA8YSBuZy1jbGFzcz0ie3NlbGVj
dGVkOiBzdGF0dXMgPT0gJ2NvbXBsZXRlZCd9IiBocmVmPSIjL2NvbXBsZXRlZCI+Q29tcGxldGVk
PC9hPgorICAgICAgICAgICAgPC9saT4KKyAgICAgICAgPC91bD4KKyAgICAgICAgPGJ1dHRvbiBp
ZD0iY2xlYXItY29tcGxldGVkIiBjbGFzcz0iY2xlYXItY29tcGxldGVkIiBuZy1jbGljaz0iY2xl
YXJDb21wbGV0ZWRUb2RvcygpIiBuZy1zaG93PSJjb21wbGV0ZWRDb3VudCI+Q2xlYXIgY29tcGxl
dGVkPC9idXR0b24+CisgICAgPC9mb290ZXI+Cis8L3NlY3Rpb24+Cis8Zm9vdGVyIGlkPSJpbmZv
IiBjbGFzcz0iaW5mbyI+CisgICAgPHA+RG91YmxlLWNsaWNrIHRvIGVkaXQgYSB0b2RvPC9wPgor
ICAgIDxwPkNyZWRpdHM6CisgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vdHdpdHRlci5jb20vY2J1
cmdkb3JmIj5DaHJpc3RvcGggQnVyZ2RvcmY8L2E+LAorICAgICAgICA8YSBocmVmPSJodHRwOi8v
ZXJpY2JpZGVsbWFuLmNvbSI+RXJpYyBCaWRlbG1hbjwvYT4sCisgICAgICAgIDxhIGhyZWY9Imh0
dHA6Ly9qYWNvYm11bW0uY29tIj5KYWNvYiBNdW1tPC9hPiBhbmQKKyAgICAgICAgPGEgaHJlZj0i
aHR0cDovL2Jsb2cuaWdvcm1pbmFyLmNvbSI+SWdvciBNaW5hcjwvYT4KKyAgICA8L3A+CisgICAg
PHA+UGFydCBvZiA8YSBocmVmPSJodHRwOi8vdG9kb212Yy5jb20iPlRvZG9NVkM8L2E+PC9wPgor
PC9mb290ZXI+CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21l
dGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9p
bmRleC5odG1sIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvaW5kZXguaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4yMmVkOWNjZmI4MDExZjk3Yzg0MjRkNzk0NmYzNTYyMWFjNDZhNDNkCi0tLSAv
ZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9y
ZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvaW5kZXguaHRt
bApAQCAtMCwwICsxLDY0IEBACis8IWRvY3R5cGUgaHRtbD4KKzxodG1sIGxhbmc9ImVuIiBkYXRh
LWZyYW1ld29yaz0iYmFja2JvbmVqcyI+CisgICAgPGhlYWQ+CisgICAgICAgIDxtZXRhIGNoYXJz
ZXQ9InV0Zi04Ij4KKyAgICAgICAgPHRpdGxlPkJhY2tib25lLmpzIFRvZG9NVkMgZXhhbXBsZTwv
dGl0bGU+CisgICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ibm9kZV9tb2R1bGVz
L3RvZG9tdmMtY29tbW9uL2Jhc2UuY3NzIj4KKyAgICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0
IiBocmVmPSJub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL2luZGV4LmNzcyI+CisgICAgPC9o
ZWFkPgorICAgIDxib2R5PgorICAgICAgICA8c2VjdGlvbiBjbGFzcz0idG9kb2FwcCI+CisgICAg
ICAgICAgICA8aGVhZGVyIGNsYXNzPSJoZWFkZXIiPgorICAgICAgICAgICAgICAgIDxoMT50b2Rv
czwvaDE+CisgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJuZXctdG9kbyIgcGxhY2Vob2xk
ZXI9IldoYXQgbmVlZHMgdG8gYmUgZG9uZT8iIGF1dG9mb2N1cz4KKyAgICAgICAgICAgIDwvaGVh
ZGVyPgorICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9Im1haW4iPgorICAgICAgICAgICAgICAg
IDxpbnB1dCBjbGFzcz0idG9nZ2xlLWFsbCIgaWQ9InRvZ2dsZS1hbGwiIHR5cGU9ImNoZWNrYm94
Ij4KKyAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJ0b2dnbGUtYWxsIj5NYXJrIGFsbCBhcyBj
b21wbGV0ZTwvbGFiZWw+CisgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJ0b2RvLWxpc3QiPjwv
dWw+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgICAgICA8Zm9vdGVyIGNsYXNzPSJm
b290ZXIiPjwvZm9vdGVyPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDxmb290ZXIgY2xh
c3M9ImluZm8iPgorICAgICAgICAgICAgPHA+RG91YmxlLWNsaWNrIHRvIGVkaXQgYSB0b2RvPC9w
PgorICAgICAgICAgICAgPHA+V3JpdHRlbiBieSA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20v
YWRkeW9zbWFuaSI+QWRkeSBPc21hbmk8L2E+PC9wPgorICAgICAgICAgICAgPHA+UGFydCBvZiA8
YSBocmVmPSJodHRwOi8vdG9kb212Yy5jb20iPlRvZG9NVkM8L2E+PC9wPgorICAgICAgICA8L2Zv
b3Rlcj4KKyAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L3RlbXBsYXRlIiBpZD0iaXRlbS10ZW1w
bGF0ZSI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2aWV3Ij4KKyAgICAgICAgICAgICAgICA8
aW5wdXQgY2xhc3M9InRvZ2dsZSIgdHlwZT0iY2hlY2tib3giIDwlPSBjb21wbGV0ZWQgPyAnY2hl
Y2tlZCcgOiAnJyAlPj4KKyAgICAgICAgICAgICAgICA8bGFiZWw+PCUtIHRpdGxlICU+PC9sYWJl
bD4KKyAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJkZXN0cm95Ij48L2J1dHRvbj4KKyAg
ICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJlZGl0IiB2YWx1ZT0i
PCUtIHRpdGxlICU+Ij4KKyAgICAgICAgPC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgdHlwZT0i
dGV4dC90ZW1wbGF0ZSIgaWQ9InN0YXRzLXRlbXBsYXRlIj4KKyAgICAgICAgICAgIDxzcGFuIGNs
YXNzPSJ0b2RvLWNvdW50Ij48c3Ryb25nPjwlPSByZW1haW5pbmcgJT48L3N0cm9uZz4gPCU9IHJl
bWFpbmluZyA9PT0gMSA/ICdpdGVtJyA6ICdpdGVtcycgJT4gbGVmdDwvc3Bhbj4KKyAgICAgICAg
ICAgIDx1bCBjbGFzcz0iZmlsdGVycyI+CisgICAgICAgICAgICAgICAgPGxpPgorICAgICAgICAg
ICAgICAgICAgICA8YSBjbGFzcz0ic2VsZWN0ZWQiIGhyZWY9IiMvIj5BbGw8L2E+CisgICAgICAg
ICAgICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgICAgICAg
IDxhIGhyZWY9IiMvYWN0aXZlIj5BY3RpdmU8L2E+CisgICAgICAgICAgICAgICAgPC9saT4KKyAg
ICAgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMvY29tcGxl
dGVkIj5Db21wbGV0ZWQ8L2E+CisgICAgICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgIDwv
dWw+CisgICAgICAgICAgICA8JSBpZiAoY29tcGxldGVkKSB7ICU+CisgICAgICAgICAgICA8YnV0
dG9uIGNsYXNzPSJjbGVhci1jb21wbGV0ZWQiPkNsZWFyIGNvbXBsZXRlZDwvYnV0dG9uPgorICAg
ICAgICAgICAgPCUgfSAlPgorICAgICAgICA8L3NjcmlwdD4KKyAgICAgICAgPCEtLSA8c2NyaXB0
IHNyYz0ibm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuanMiPjwvc2NyaXB0PiAtLT4K
KyAgICAgICAgPHNjcmlwdCBzcmM9Im5vZGVfbW9kdWxlcy9qcXVlcnkvZGlzdC9qcXVlcnkubWlu
LmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9Im5vZGVfbW9kdWxlcy91bmRlcnNj
b3JlL3VuZGVyc2NvcmUtbWluLmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9Im5v
ZGVfbW9kdWxlcy9iYWNrYm9uZS9iYWNrYm9uZS1taW4uanMiPjwvc2NyaXB0PgorICAgICAgICA8
c2NyaXB0IHNyYz0ianMvYmFja2JvbmUuc3luYy5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3Jp
cHQgc3JjPSJqcy9tb2RlbHMvdG9kby5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3Jj
PSJqcy9jb2xsZWN0aW9ucy90b2Rvcy5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3Jj
PSJqcy92aWV3cy90b2RvLXZpZXcuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0i
anMvdmlld3MvYXBwLXZpZXcuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0ianMv
cm91dGVycy9yb3V0ZXIuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0ianMvYXBw
LmpzIj48L3NjcmlwdD4KKyAgICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9XZWJzaXRl
cy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hp
dGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9qcy9hcHAuanMgYi9XZWJzaXRlcy9icm93c2VyYmVu
Y2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9iYWNrYm9uZS9qcy9hcHAuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGM0YmRlMzYzYTMxZThlMzgzYmJm
Mjc2ZmM0Y2NiMTFlZGEyNjNkYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJi
ZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL2JhY2tib25lL2pzL2FwcC5qcwpAQCAtMCwwICsxLDE2IEBACisvKmdsb2JhbCAkICov
CisvKmpzaGludCB1bnVzZWQ6ZmFsc2UgKi8KK3ZhciBhcHAgPSBhcHAgfHwge307Cit2YXIgRU5U
RVJfS0VZID0gMTM7Cit2YXIgRVNDX0tFWSA9IDI3OworCiskKGZ1bmN0aW9uICgpIHsKKyAgICAn
dXNlIHN0cmljdCc7CisKKyAgICAvLyBraWNrIHRoaW5ncyBvZmYgYnkgY3JlYXRpbmcgdGhlIGBB
cHBgCisgICAgd2luZG93LmFwcFZpZXcgPSBuZXcgYXBwLkFwcFZpZXcoKTsKKworICAgIHZhciBk
dW1teU5vZGVUb05vdGlmeUFwcElzUmVhZHkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYn
KTsKKyAgICBkdW1teU5vZGVUb05vdGlmeUFwcElzUmVhZHkuaWQgPSAnYXBwSXNSZWFkeSc7Cisg
ICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkdW1teU5vZGVUb05vdGlmeUFwcElzUmVhZHkp
OworfSk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVy
Mi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9qcy9i
YWNrYm9uZS5zeW5jLmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIu
MS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvanMvYmFj
a2JvbmUuc3luYy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mOGUzYzY3ZWRkYjc5YTUxNzNjNWFjZWQxNTNmNGVi
YzM2YjZhMmFiCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9T
cGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFj
a2JvbmUvanMvYmFja2JvbmUuc3luYy5qcwpAQCAtMCwwICsxLDExOCBAQAorQmFja2JvbmUuc3lu
YyA9IGZ1bmN0aW9uKG1ldGhvZCwgbW9kZWwsIG9wdGlvbnMpIHsKKworICAvLyB3ZSBuZWVkIHRv
IG1ha2Ugc3VyZSB3ZSBpbml0aWFsaXplIGEgc3RvcmUsIGluIHRoaXMgY2FzZQorICAvLyB3ZSB3
aWxsIGp1c3QgdXNlIGEgSlMgb2JqZWN0LgorICB2YXIgY2FjaGUgPSB7fTsKKyAgCisgIC8vIFRo
ZSBzaXplIHdpbGwgYmUgcHJpbWFyaWx5IHVzZWQgdG8gYXNzaWduIGlkcyB0byBuZXdseSAKKyAg
Ly8gY3JlYXRlZCBtb2RlbHMuIEVhY2ggdGltZSBhIG5ldyBtb2RlbCBpcyBjcmVhdGVkLCB0aGUg
c2l6ZSAKKyAgLy8gd2lsbCBiZSBpbmNyZW1lbnRlZC4KKyAgdmFyIHNpemUgID0gMDsKKworICAv
LyBzaW5jZSB3ZSBuZWVkIHRvIGNyZWF0ZSBhIHN0b3JlIGZvciB0aGUgbW9kZWxzL2NvbGxlY3Rp
b25zCisgIC8vIHdlIGFyZSBhY3R1YWxseSBnb2luZyB0byBpbnZva2UgdGhlIG91dGVyIGZ1bmN0
aW9uIHdoaWNoIHdpbGwKKyAgLy8gcmV0dXJuIHRoaXMgZnVuY3Rpb24gYmVsb3cgYXMgdGhlIEJh
Y2tib25lLnN5bmMgdGhhdCB3aWxsCisgIC8vIGFjdHVhbGx5IGJlIHVzZWQuCisgIHJldHVybiBm
dW5jdGlvbihtZXRob2QsIG1vZGVsLCBvcHRpb25zKSB7CisKKyAgICAvLyBjcmVhdGUgYSBuZXcg
ZGVmZXJyZWQgb2JqZWN0LiBzdGFuZGFyZCBzeW5jIHJldHVybnMgdGhlICQuYWpheAorICAgIC8v
IHJlcXVlc3QsIHdoaWNoIGludGVybmFsbHkgcmV0dXJucyBhIGRlZmVycmVkLiBJdCdzIGltcG9y
dGFudCB0bworICAgIC8vIGRvIHRoaXMgc28gdGhhdCBwZW9wbGUgY2FuIGNoYWluIG9uIGZldGNo
IHVzaW5nIHRoZSBzdGFuZGFyZCAudGhlbi8uZmFpbAorICAgIC8vIHN5bnRheCwgcmF0aGVyIHRo
YW4ganVzdCB0aGUgc3VjY2Vzcy9lcnJvciBjYWxsYmFja3MuCisgICAgdmFyIGRlZmVycmVkID0g
JC5EZWZlcnJlZCgpOworICAgIAorICAgIC8vIHdoZW4gY3JlYXRpbmcgYSBuZXcgbW9kZWwuLi4K
KyAgICBpZiAobWV0aG9kID09PSAiY3JlYXRlIikgeworCisgICAgICAvLyBmaXJzdCBhc3NpZ24g
aXQgYW4gaWQuIFRoZSBzZXJ2ZXIgd291bGQgdHJhZGl0aW9uYWxseSBkbyB0aGlzLgorICAgICAg
bW9kZWwuaWQgPSBzaXplOworICAgICAgLy8gc3RvcmUgaXQgaW4gb3VyIGNhY2hlCisgICAgICBj
YWNoZVttb2RlbC5pZF0gPSBtb2RlbDsKKyAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBpbmNyZW1lbnQg
dGhlIG51bWJlciBvZiBtb2RlbHMgd2Ugbm93IGhhdmUuCisgICAgICBzaXplICs9IDE7CisKKyAg
ICAgIC8vIGlmIGEgc3VjY2VzcyBjYWxsYmFjayB3YXMgcHJvdmlkZWQsIGV4ZWN1dGUgaXQuCisg
ICAgICBpZiAob3B0aW9ucy5zdWNjZXNzKSB7CisgICAgICAgIG9wdGlvbnMuc3VjY2Vzcyhtb2Rl
bCwgbW9kZWwudG9KU09OKCksIG9wdGlvbnMpOworICAgICAgfQorCisgICAgICAvLyByZXNvbHZl
IHRoZSBkZWZlcnJlZC4KKyAgICAgIGRlZmVycmVkLnJlc29sdmUobW9kZWwpOworCisgICAgLy8g
d2UgYXJlIHVwZGF0aW5nIGEgbW9kZWwKKyAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PT0gInVwZGF0
ZSIpIHsKKyAgICAgIAorICAgICAgLy8gYXMgbG9uZyBhcyB0aGUgbW9kZWwgYWN0dWFsbHkgZXhp
c3RzIGluIG91ciBzdG9yZQorICAgICAgaWYgKGNhY2hlW21vZGVsLmlkXSkgeworICAgICAgICAK
KyAgICAgICAgLy8gb3ZlcndyaXRlIHdoYXQgaXMgY3VycmVudGx5IGluIHRoZSBzdG9yZSB3aXRo
IHRoaXMgbW9kZWwuCisgICAgICAgIGNhY2hlW21vZGVsLmlkXSA9IG1vZGVsOworCisgICAgICAg
IC8vIGlmIGEgc3VjY2VzcyBjYWxsYmFjayB3YXMgcHJvdmlkZWQsIGV4ZWN1dGUgaXQuCisgICAg
ICAgIGlmIChvcHRpb25zLnN1Y2Nlc3MpIHsKKyAgICAgICAgICBvcHRpb25zLnN1Y2Nlc3MobW9k
ZWwsIG1vZGVsLnRvSlNPTigpLCBvcHRpb25zKTsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmVy
cmVkLnJlc29sdmUobW9kZWwpOworICAgICAgCisgICAgICAvLyBpZiB0aGlzIG1vZGVsIGRvZXNu
J3QgZXhpc3QgeWV0LCB3ZSBjYW4ndCB1cGRhdGUgaXQKKyAgICAgIH0gZWxzZSB7CisgICAgICAg
IAorICAgICAgICBpZiAob3B0aW9ucy5lcnJvcikgeworICAgICAgICAgIG9wdGlvbnMuZXJyb3Io
bW9kZWwsICJNb2RlbCBub3QgZm91bmQiKTsKKyAgICAgICAgfQorICAgICAgICBkZWZlcnJlZC5y
ZWplY3QobW9kZWwpOworICAgICAgfQorCisgICAgLy8gaWYgd2UncmUgdHJ5aW5nIHRvIHJlYWQg
YSBtb2RlbC4uLgorICAgIH0gZWxzZSBpZiAobWV0aG9kID09PSAicmVhZCIpIHsKKyAgICAgIAor
ICAgICAgLy8gYXMgbG9uZyBhcyBpdCBleGlzdHMKKyAgICAgIGlmIChjYWNoZVttb2RlbC5pZF0p
IHsKKyAgICAgICAgCisgICAgICAgIC8vIGlmIGEgc3VjY2VzcyBjYWxsYmFjayB3YXMgcHJvdmlk
ZWQsIGV4ZWN1dGUgaXQuCisgICAgICAgIGlmIChvcHRpb25zLnN1Y2Nlc3MpIHsKKyAgICAgICAg
ICBvcHRpb25zLnN1Y2Nlc3MobW9kZWwsIGNhY2hlW21vZGVsLmlkXS50b0pTT04oKSwgb3B0aW9u
cyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIHJlc29sdmUgCisgICAgICAgIGRl
ZmVycmVkLnJlc29sdmUobW9kZWwpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG9wdGlv
bnMuZXJyb3IpIHsKKyAgICAgICAgICBvcHRpb25zLmVycm9yKG1vZGVsLCAiTW9kZWwgbm90IGZv
dW5kIik7CisgICAgICAgIH0KKyAgICAgICAgZGVmZXJyZWQucmVqZWN0KG1vZGVsKTsKKyAgICAg
IH0KKyAgICAgIAorICAgIC8vIGlmIHdlJ3JlIGRlbGV0aW5nIGEgbW9kZWwuLi4KKyAgICB9IGVs
c2UgaWYgKG1ldGhvZCA9PT0gImRlbGV0ZSIpIHsKKyAgICAgIAorICAgICAgLy8gZmlyc3QgbWFr
ZSBzdXJlIGl0IGV4aXN0cyBpbiB0aGUgY2FjaGUKKyAgICAgIGlmIChjYWNoZVttb2RlbC5pZF0p
IHsKKyAgICAgICAgCisgICAgICAgIC8vIHRoZW4gcmVtb3ZlIGl0IGZyb20gdGhlIGNhY2hlCisg
ICAgICAgIGRlbGV0ZSBjYWNoZVttb2RlbC5pZF07CisgICAgICAgIAorICAgICAgICAvLyBhbmQg
dHJpZ2dlciB0aGUgc3VjY2VzcyBjYWxsYmFjay4gTm90ZSB3ZSdyZSBwYXNzaW5nIGFuIAorICAg
ICAgICAvLyBlbXB0eSBvYmplY3QgYXMgdGhlIHNlY29uZCBhcmd1bWVudCwgYmVjYXVzZSBhIGRl
bGV0aW9uIAorICAgICAgICAvLyB3b3VsZCByZXN1bHQgaW4gYW4gZW1wdHkgcmV0dXJuIGZyb20g
dGhlIHNlcnZlci4KKyAgICAgICAgaWYgKG9wdGlvbnMuc3VjY2VzcykgeworICAgICAgICAgIG9w
dGlvbnMuc3VjY2Vzcyhtb2RlbCwge30sIG9wdGlvbnMpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICAvLyByZXNvbHZlIHRoZSBkZWZlcnJlZAorICAgICAgICBkZWZlcnJlZC5yZXNvbHZl
KG1vZGVsKTsKKyAgICAgICAgCisgICAgICAvLyBvdGhlcndpc2UsIGVycm9yIHRoYXQgdGhlIG1v
ZGVsIGRvZXNuJ3QgZXhpc3QuCisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAob3B0aW9ucy5l
cnJvcikgeworICAgICAgICAgIG9wdGlvbnMuZXJyb3IobW9kZWwsICJNb2RlbCBub3QgZm91bmQi
KTsKKyAgICAgICAgfQorICAgICAgICBkZWZlcnJlZC5yZWplY3QobW9kZWwpOworICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiBkZWZlcnJlZC5wcm9taXNlKCk7ICAKKyAgfQorICAKK30oKTsK
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2Vy
YmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9iYWNrYm9uZS9qcy9jb2xsZWN0aW9ucy90b2Rvcy5qcyBiL1dlYnNpdGVzL2Jyb3dz
ZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL2JhY2tib25lL2pzL2NvbGxlY3Rpb25zL3RvZG9zLmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY4
ZjVkMzExMTMzNTg4ZDg3NjhjYWYyZjBkZWY0ZTJhNDgzOGViMzMKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2Rv
bXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9qcy9jb2xsZWN0aW9ucy90b2Rvcy5q
cwpAQCAtMCwwICsxLDM5IEBACisvKmdsb2JhbCBCYWNrYm9uZSAqLwordmFyIGFwcCA9IGFwcCB8
fCB7fTsKKworKGZ1bmN0aW9uICgpIHsKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICAvLyBUb2Rv
IENvbGxlY3Rpb24KKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0KKworCisgICAgdmFyIFRvZG9zID0g
QmFja2JvbmUuQ29sbGVjdGlvbi5leHRlbmQoeworICAgICAgICAvLyBSZWZlcmVuY2UgdG8gdGhp
cyBjb2xsZWN0aW9uJ3MgbW9kZWwuCisgICAgICAgIG1vZGVsOiBhcHAuVG9kbywKKworICAgICAg
ICAvLyBTYXZlIGFsbCBvZiB0aGUgdG9kbyBpdGVtcyB1bmRlciB0aGlzIGV4YW1wbGUncyBuYW1l
c3BhY2UuCisKKyAgICAgICAgLy8gRmlsdGVyIGRvd24gdGhlIGxpc3Qgb2YgYWxsIHRvZG8gaXRl
bXMgdGhhdCBhcmUgZmluaXNoZWQuCisgICAgICAgIGNvbXBsZXRlZDogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMud2hlcmUoe2NvbXBsZXRlZDogdHJ1ZX0pOworICAgICAg
ICB9LAorCisgICAgICAgIC8vIEZpbHRlciBkb3duIHRoZSBsaXN0IHRvIG9ubHkgdG9kbyBpdGVt
cyB0aGF0IGFyZSBzdGlsbCBub3QgZmluaXNoZWQuCisgICAgICAgIHJlbWFpbmluZzogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMud2hlcmUoe2NvbXBsZXRlZDogZmFsc2V9
KTsKKyAgICAgICAgfSwKKworICAgICAgICAvLyBXZSBrZWVwIHRoZSBUb2RvcyBpbiBzZXF1ZW50
aWFsIG9yZGVyLCBkZXNwaXRlIGJlaW5nIHNhdmVkIGJ5IHVub3JkZXJlZAorICAgICAgICAvLyBH
VUlEIGluIHRoZSBkYXRhYmFzZS4gVGhpcyBnZW5lcmF0ZXMgdGhlIG5leHQgb3JkZXIgbnVtYmVy
IGZvciBuZXcgaXRlbXMuCisgICAgICAgIG5leHRPcmRlcjogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMubGVuZ3RoID8gdGhpcy5sYXN0KCkuZ2V0KCdvcmRlcicpICsgMSA6
IDE7CisgICAgICAgIH0sCisKKyAgICAgICAgLy8gVG9kb3MgYXJlIHNvcnRlZCBieSB0aGVpciBv
cmlnaW5hbCBpbnNlcnRpb24gb3JkZXIuCisgICAgICAgIGNvbXBhcmF0b3I6ICdvcmRlcicKKyAg
ICB9KTsKKworICAgIC8vIENyZWF0ZSBvdXIgZ2xvYmFsIGNvbGxlY3Rpb24gb2YgKipUb2Rvcyoq
LgorICAgIGFwcC50b2RvcyA9IG5ldyBUb2RvcygpOworfSkoKTsKZGlmZiAtLWdpdCBhL1dlYnNp
dGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL2JhY2tib25lL2pzL21vZGVscy90b2RvLmpzIGIvV2Vic2l0ZXMv
YnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvanMvbW9kZWxzL3RvZG8uanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGYz
ZmRlM2UyNmZiMWI3MTY4MjRhMDg4MjA0NmIwYWZmZjMxZmMxYgotLS0gL2Rldi9udWxsCisrKyBi
L1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9t
dmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2JhY2tib25lL2pzL21vZGVscy90b2RvLmpzCkBAIC0w
LDAgKzEsMjYgQEAKKy8qZ2xvYmFsIEJhY2tib25lICovCit2YXIgYXBwID0gYXBwIHx8IHt9Owor
CisoZnVuY3Rpb24gKCkgeworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIC8vIFRvZG8gTW9kZWwK
KyAgICAvLyAtLS0tLS0tLS0tCisKKyAgICAvLyBPdXIgYmFzaWMgKipUb2RvKiogbW9kZWwgaGFz
IGB0aXRsZWAsIGBvcmRlcmAsIGFuZCBgY29tcGxldGVkYCBhdHRyaWJ1dGVzLgorICAgIGFwcC5U
b2RvID0gQmFja2JvbmUuTW9kZWwuZXh0ZW5kKHsKKyAgICAgICAgLy8gRGVmYXVsdCBhdHRyaWJ1
dGVzIGZvciB0aGUgdG9kbworICAgICAgICAvLyBhbmQgZW5zdXJlIHRoYXQgZWFjaCB0b2RvIGNy
ZWF0ZWQgaGFzIGB0aXRsZWAgYW5kIGBjb21wbGV0ZWRgIGtleXMuCisgICAgICAgIGRlZmF1bHRz
OiB7CisgICAgICAgICAgICB0aXRsZTogJycsCisgICAgICAgICAgICBjb21wbGV0ZWQ6IGZhbHNl
CisgICAgICAgIH0sCisKKyAgICAgICAgLy8gVG9nZ2xlIHRoZSBgY29tcGxldGVkYCBzdGF0ZSBv
ZiB0aGlzIHRvZG8gaXRlbS4KKyAgICAgICAgdG9nZ2xlOiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICB0aGlzLnNhdmUoeworICAgICAgICAgICAgICAgIGNvbXBsZXRlZDogIXRoaXMuZ2V0KCdj
b21wbGV0ZWQnKQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9KTsKK30pKCk7CmRp
ZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9qcy9yb3V0ZXJzL3Jv
dXRlci5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2JhY2tib25lL2pzL3JvdXRlcnMvcm91
dGVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjU5MzdlOWZmMDM3ODQzYTA3NTIzNmVmMDMyNTFjYjExZDkyMWQ5
YmMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21l
dGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9q
cy9yb3V0ZXJzL3JvdXRlci5qcwpAQCAtMCwwICsxLDI2IEBACisvKmdsb2JhbCBCYWNrYm9uZSAq
LwordmFyIGFwcCA9IGFwcCB8fCB7fTsKKworKGZ1bmN0aW9uICgpIHsKKyAgICAndXNlIHN0cmlj
dCc7CisKKyAgICAvLyBUb2RvIFJvdXRlcgorICAgIC8vIC0tLS0tLS0tLS0KKyAgICB2YXIgVG9k
b1JvdXRlciA9IEJhY2tib25lLlJvdXRlci5leHRlbmQoeworICAgICAgICByb3V0ZXM6IHsKKyAg
ICAgICAgICAgICcqZmlsdGVyJzogJ3NldEZpbHRlcicKKyAgICAgICAgfSwKKworICAgICAgICBz
ZXRGaWx0ZXI6IGZ1bmN0aW9uIChwYXJhbSkgeworICAgICAgICAgICAgLy8gU2V0IHRoZSBjdXJy
ZW50IGZpbHRlciB0byBiZSB1c2VkCisgICAgICAgICAgICBhcHAuVG9kb0ZpbHRlciA9IHBhcmFt
IHx8ICcnOworCisgICAgICAgICAgICAvLyBUcmlnZ2VyIGEgY29sbGVjdGlvbiBmaWx0ZXIgZXZl
bnQsIGNhdXNpbmcgaGlkaW5nL3VuaGlkaW5nCisgICAgICAgICAgICAvLyBvZiBUb2RvIHZpZXcg
aXRlbXMKKyAgICAgICAgICAgIGFwcC50b2Rvcy50cmlnZ2VyKCdmaWx0ZXInKTsKKyAgICAgICAg
fQorICAgIH0pOworCisgICAgYXBwLlRvZG9Sb3V0ZXIgPSBuZXcgVG9kb1JvdXRlcigpOworICAg
IEJhY2tib25lLmhpc3Rvcnkuc3RhcnQoKTsKK30pKCk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9i
cm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9iYWNrYm9uZS9qcy92aWV3cy9hcHAtdmlldy5qcyBiL1dlYnNpdGVzL2Jy
b3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL2JhY2tib25lL2pzL3ZpZXdzL2FwcC12aWV3LmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM0
MjUyZmM5Y2IyMjY0ZjZkMzY0NDlkZTNiMmEyODUzZmQ4ZTk1ZmIKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2Rv
bXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9qcy92aWV3cy9hcHAtdmlldy5qcwpA
QCAtMCwwICsxLDEzMSBAQAorLypnbG9iYWwgQmFja2JvbmUsIGpRdWVyeSwgXywgRU5URVJfS0VZ
ICovCit2YXIgYXBwID0gYXBwIHx8IHt9OworCisoZnVuY3Rpb24gKCQpIHsKKyAgICAndXNlIHN0
cmljdCc7CisKKyAgICAvLyBUaGUgQXBwbGljYXRpb24KKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0K
KworICAgIC8vIE91ciBvdmVyYWxsICoqQXBwVmlldyoqIGlzIHRoZSB0b3AtbGV2ZWwgcGllY2Ug
b2YgVUkuCisgICAgYXBwLkFwcFZpZXcgPSBCYWNrYm9uZS5WaWV3LmV4dGVuZCh7CisKKyAgICAg
ICAgLy8gSW5zdGVhZCBvZiBnZW5lcmF0aW5nIGEgbmV3IGVsZW1lbnQsIGJpbmQgdG8gdGhlIGV4
aXN0aW5nIHNrZWxldG9uIG9mCisgICAgICAgIC8vIHRoZSBBcHAgYWxyZWFkeSBwcmVzZW50IGlu
IHRoZSBIVE1MLgorICAgICAgICBlbDogJy50b2RvYXBwJywKKworICAgICAgICAvLyBPdXIgdGVt
cGxhdGUgZm9yIHRoZSBsaW5lIG9mIHN0YXRpc3RpY3MgYXQgdGhlIGJvdHRvbSBvZiB0aGUgYXBw
LgorICAgICAgICBzdGF0c1RlbXBsYXRlOiBfLnRlbXBsYXRlKCQoJyNzdGF0cy10ZW1wbGF0ZScp
Lmh0bWwoKSksCisKKyAgICAgICAgLy8gRGVsZWdhdGVkIGV2ZW50cyBmb3IgY3JlYXRpbmcgbmV3
IGl0ZW1zLCBhbmQgY2xlYXJpbmcgY29tcGxldGVkIG9uZXMuCisgICAgICAgIGV2ZW50czogewor
ICAgICAgICAgICAgJ2tleXByZXNzIC5uZXctdG9kbyc6ICdjcmVhdGVPbkVudGVyJywKKyAgICAg
ICAgICAgICdjbGljayAuY2xlYXItY29tcGxldGVkJzogJ2NsZWFyQ29tcGxldGVkJywKKyAgICAg
ICAgICAgICdjbGljayAudG9nZ2xlLWFsbCc6ICd0b2dnbGVBbGxDb21wbGV0ZScKKyAgICAgICAg
fSwKKworICAgICAgICAvLyBBdCBpbml0aWFsaXphdGlvbiB3ZSBiaW5kIHRvIHRoZSByZWxldmFu
dCBldmVudHMgb24gdGhlIGBUb2Rvc2AKKyAgICAgICAgLy8gY29sbGVjdGlvbiwgd2hlbiBpdGVt
cyBhcmUgYWRkZWQgb3IgY2hhbmdlZC4gS2ljayB0aGluZ3Mgb2ZmIGJ5CisgICAgICAgIC8vIGxv
YWRpbmcgYW55IHByZWV4aXN0aW5nIHRvZG9zIHRoYXQgbWlnaHQgYmUgc2F2ZWQgaW4gKmxvY2Fs
U3RvcmFnZSouCisgICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHRoaXMuYWxsQ2hlY2tib3ggPSB0aGlzLiQoJy50b2dnbGUtYWxsJylbMF07CisgICAgICAgICAg
ICB0aGlzLiRpbnB1dCA9IHRoaXMuJCgnLm5ldy10b2RvJyk7CisgICAgICAgICAgICB0aGlzLiRm
b290ZXIgPSB0aGlzLiQoJy5mb290ZXInKTsKKyAgICAgICAgICAgIHRoaXMuJG1haW4gPSB0aGlz
LiQoJy5tYWluJyk7CisgICAgICAgICAgICB0aGlzLiRsaXN0ID0gJCgnLnRvZG8tbGlzdCcpOwor
CisgICAgICAgICAgICB0aGlzLmxpc3RlblRvKGFwcC50b2RvcywgJ2FkZCcsIHRoaXMuYWRkT25l
KTsKKyAgICAgICAgICAgIHRoaXMubGlzdGVuVG8oYXBwLnRvZG9zLCAncmVzZXQnLCB0aGlzLmFk
ZEFsbCk7CisgICAgICAgICAgICB0aGlzLmxpc3RlblRvKGFwcC50b2RvcywgJ2NoYW5nZTpjb21w
bGV0ZWQnLCB0aGlzLmZpbHRlck9uZSk7CisgICAgICAgICAgICB0aGlzLmxpc3RlblRvKGFwcC50
b2RvcywgJ2ZpbHRlcicsIHRoaXMuZmlsdGVyQWxsKTsKKyAgICAgICAgICAgIHRoaXMubGlzdGVu
VG8oYXBwLnRvZG9zLCAnYWxsJywgXy5kZWJvdW5jZSh0aGlzLnJlbmRlciwgMCkpOworCisgICAg
ICAgICAgICAvLyBTdXBwcmVzc2VzICdhZGQnIGV2ZW50cyB3aXRoIHtyZXNldDogdHJ1ZX0gYW5k
IHByZXZlbnRzIHRoZSBhcHAgdmlldworICAgICAgICAgICAgLy8gZnJvbSBiZWluZyByZS1yZW5k
ZXJlZCBmb3IgZXZlcnkgbW9kZWwuIE9ubHkgcmVuZGVycyB3aGVuIHRoZSAncmVzZXQnCisgICAg
ICAgICAgICAvLyBldmVudCBpcyB0cmlnZ2VyZWQgYXQgdGhlIGVuZCBvZiB0aGUgZmV0Y2guCisg
ICAgICAgICAgICBhcHAudG9kb3MuZmV0Y2goe3Jlc2V0OiB0cnVlfSk7CisgICAgICAgIH0sCisK
KyAgICAgICAgLy8gUmUtcmVuZGVyaW5nIHRoZSBBcHAganVzdCBtZWFucyByZWZyZXNoaW5nIHRo
ZSBzdGF0aXN0aWNzIC0tIHRoZSByZXN0CisgICAgICAgIC8vIG9mIHRoZSBhcHAgZG9lc24ndCBj
aGFuZ2UuCisgICAgICAgIHJlbmRlcjogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIGNv
bXBsZXRlZCA9IGFwcC50b2Rvcy5jb21wbGV0ZWQoKS5sZW5ndGg7CisgICAgICAgICAgICB2YXIg
cmVtYWluaW5nID0gYXBwLnRvZG9zLnJlbWFpbmluZygpLmxlbmd0aDsKKworICAgICAgICAgICAg
aWYgKGFwcC50b2Rvcy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICB0aGlzLiRtYWluLnNob3co
KTsKKyAgICAgICAgICAgICAgICB0aGlzLiRmb290ZXIuc2hvdygpOworCisgICAgICAgICAgICAg
ICAgdGhpcy4kZm9vdGVyLmh0bWwodGhpcy5zdGF0c1RlbXBsYXRlKHsKKyAgICAgICAgICAgICAg
ICAgICAgY29tcGxldGVkOiBjb21wbGV0ZWQsCisgICAgICAgICAgICAgICAgICAgIHJlbWFpbmlu
ZzogcmVtYWluaW5nCisgICAgICAgICAgICAgICAgfSkpOworCisgICAgICAgICAgICAgICAgdGhp
cy4kKCcuZmlsdGVycyBsaSBhJykKKyAgICAgICAgICAgICAgICAgICAgLnJlbW92ZUNsYXNzKCdz
ZWxlY3RlZCcpCisgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoJ1tocmVmPSIjLycgKyAoYXBw
LlRvZG9GaWx0ZXIgfHwgJycpICsgJyJdJykKKyAgICAgICAgICAgICAgICAgICAgLmFkZENsYXNz
KCdzZWxlY3RlZCcpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlz
LiRtYWluLmhpZGUoKTsKKyAgICAgICAgICAgICAgICB0aGlzLiRmb290ZXIuaGlkZSgpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICB0aGlzLmFsbENoZWNrYm94LmNoZWNrZWQgPSAhcmVt
YWluaW5nOworICAgICAgICB9LAorCisgICAgICAgIC8vIEFkZCBhIHNpbmdsZSB0b2RvIGl0ZW0g
dG8gdGhlIGxpc3QgYnkgY3JlYXRpbmcgYSB2aWV3IGZvciBpdCwgYW5kCisgICAgICAgIC8vIGFw
cGVuZGluZyBpdHMgZWxlbWVudCB0byB0aGUgYDx1bD5gLgorICAgICAgICBhZGRPbmU6IGZ1bmN0
aW9uICh0b2RvKSB7CisgICAgICAgICAgICB2YXIgdmlldyA9IG5ldyBhcHAuVG9kb1ZpZXcoeyBt
b2RlbDogdG9kbyB9KTsKKyAgICAgICAgICAgIHRoaXMuJGxpc3QuYXBwZW5kKHZpZXcucmVuZGVy
KCkuZWwpOworICAgICAgICB9LAorCisgICAgICAgIC8vIEFkZCBhbGwgaXRlbXMgaW4gdGhlICoq
VG9kb3MqKiBjb2xsZWN0aW9uIGF0IG9uY2UuCisgICAgICAgIGFkZEFsbDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgdGhpcy4kbGlzdC5odG1sKCcnKTsKKyAgICAgICAgICAgIGFwcC50b2Rv
cy5lYWNoKHRoaXMuYWRkT25lLCB0aGlzKTsKKyAgICAgICAgfSwKKworICAgICAgICBmaWx0ZXJP
bmU6IGZ1bmN0aW9uICh0b2RvKSB7CisgICAgICAgICAgICB0b2RvLnRyaWdnZXIoJ3Zpc2libGUn
KTsKKyAgICAgICAgfSwKKworICAgICAgICBmaWx0ZXJBbGw6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIGFwcC50b2Rvcy5lYWNoKHRoaXMuZmlsdGVyT25lLCB0aGlzKTsKKyAgICAgICAgfSwK
KworICAgICAgICAvLyBHZW5lcmF0ZSB0aGUgYXR0cmlidXRlcyBmb3IgYSBuZXcgVG9kbyBpdGVt
LgorICAgICAgICBuZXdBdHRyaWJ1dGVzOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4geworICAgICAgICAgICAgICAgIHRpdGxlOiB0aGlzLiRpbnB1dC52YWwoKS50cmltKCksCisg
ICAgICAgICAgICAgICAgb3JkZXI6IGFwcC50b2Rvcy5uZXh0T3JkZXIoKSwKKyAgICAgICAgICAg
ICAgICBjb21wbGV0ZWQ6IGZhbHNlCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAg
ICAgIC8vIElmIHlvdSBoaXQgcmV0dXJuIGluIHRoZSBtYWluIGlucHV0IGZpZWxkLCBjcmVhdGUg
bmV3ICoqVG9kbyoqIG1vZGVsLAorICAgICAgICAvLyBwZXJzaXN0aW5nIGl0IHRvICptZW1vcnkq
LgorICAgICAgICBjcmVhdGVPbkVudGVyOiBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAgaWYg
KGUud2hpY2ggPT09IEVOVEVSX0tFWSAmJiB0aGlzLiRpbnB1dC52YWwoKS50cmltKCkpIHsKKyAg
ICAgICAgICAgICAgICBhcHAudG9kb3MuY3JlYXRlKHRoaXMubmV3QXR0cmlidXRlcygpKTsKKyAg
ICAgICAgICAgICAgICB0aGlzLiRpbnB1dC52YWwoJycpOworICAgICAgICAgICAgfQorICAgICAg
ICB9LAorCisgICAgICAgIC8vIENsZWFyIGFsbCBjb21wbGV0ZWQgdG9kbyBpdGVtcywgZGVzdHJv
eWluZyB0aGVpciBtb2RlbHMuCisgICAgICAgIGNsZWFyQ29tcGxldGVkOiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICBfLmludm9rZShhcHAudG9kb3MuY29tcGxldGVkKCksICdkZXN0cm95Jyk7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0sCisKKyAgICAgICAgdG9nZ2xl
QWxsQ29tcGxldGU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBjb21wbGV0ZWQgPSB0
aGlzLmFsbENoZWNrYm94LmNoZWNrZWQ7CisKKyAgICAgICAgICAgIGFwcC50b2Rvcy5lYWNoKGZ1
bmN0aW9uICh0b2RvKSB7CisgICAgICAgICAgICAgICAgdG9kby5zYXZlKHsKKyAgICAgICAgICAg
ICAgICAgICAgY29tcGxldGVkOiBjb21wbGV0ZWQKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICB9CisgICAgfSk7Cit9KShqUXVlcnkpOwpkaWZmIC0tZ2l0IGEv
V2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212
Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvanMvdmlld3MvdG9kby12aWV3LmpzIGIv
V2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212
Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvanMvdmlld3MvdG9kby12aWV3LmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmJiM2I0MDQzZmY2ZTA3NzFhZGIwM2UyMDIwNjg0MTViNzMwM2JmZWQKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jl
c291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9qcy92aWV3cy90
b2RvLXZpZXcuanMKQEAgLTAsMCArMSwxMjMgQEAKKy8qZ2xvYmFsIEJhY2tib25lLCBqUXVlcnks
IF8sIEVOVEVSX0tFWSwgRVNDX0tFWSAqLwordmFyIGFwcCA9IGFwcCB8fCB7fTsKKworKGZ1bmN0
aW9uICgkKSB7CisgICAgJ3VzZSBzdHJpY3QnOworCisgICAgLy8gVG9kbyBJdGVtIFZpZXcKKyAg
ICAvLyAtLS0tLS0tLS0tLS0tLQorCisgICAgLy8gVGhlIERPTSBlbGVtZW50IGZvciBhIHRvZG8g
aXRlbS4uLgorICAgIGFwcC5Ub2RvVmlldyA9IEJhY2tib25lLlZpZXcuZXh0ZW5kKHsKKyAgICAg
ICAgLy8uLi4gaXMgYSBsaXN0IHRhZy4KKyAgICAgICAgdGFnTmFtZTogICdsaScsCisKKyAgICAg
ICAgLy8gQ2FjaGUgdGhlIHRlbXBsYXRlIGZ1bmN0aW9uIGZvciBhIHNpbmdsZSBpdGVtLgorICAg
ICAgICB0ZW1wbGF0ZTogXy50ZW1wbGF0ZSgkKCcjaXRlbS10ZW1wbGF0ZScpLmh0bWwoKSksCisK
KyAgICAgICAgLy8gVGhlIERPTSBldmVudHMgc3BlY2lmaWMgdG8gYW4gaXRlbS4KKyAgICAgICAg
ZXZlbnRzOiB7CisgICAgICAgICAgICAnY2xpY2sgLnRvZ2dsZSc6ICd0b2dnbGVDb21wbGV0ZWQn
LAorICAgICAgICAgICAgJ2RibGNsaWNrIGxhYmVsJzogJ2VkaXQnLAorICAgICAgICAgICAgJ2Ns
aWNrIC5kZXN0cm95JzogJ2NsZWFyJywKKyAgICAgICAgICAgICdrZXlwcmVzcyAuZWRpdCc6ICd1
cGRhdGVPbkVudGVyJywKKyAgICAgICAgICAgICdrZXlkb3duIC5lZGl0JzogJ3JldmVydE9uRXNj
YXBlJywKKyAgICAgICAgICAgICdibHVyIC5lZGl0JzogJ2Nsb3NlJworICAgICAgICB9LAorCisg
ICAgICAgIC8vIFRoZSBUb2RvVmlldyBsaXN0ZW5zIGZvciBjaGFuZ2VzIHRvIGl0cyBtb2RlbCwg
cmUtcmVuZGVyaW5nLiBTaW5jZQorICAgICAgICAvLyB0aGVyZSdzIGEgb25lLXRvLW9uZSBjb3Jy
ZXNwb25kZW5jZSBiZXR3ZWVuIGEgKipUb2RvKiogYW5kIGEKKyAgICAgICAgLy8gKipUb2RvVmll
dyoqIGluIHRoaXMgYXBwLCB3ZSBzZXQgYSBkaXJlY3QgcmVmZXJlbmNlIG9uIHRoZSBtb2RlbCBm
b3IKKyAgICAgICAgLy8gY29udmVuaWVuY2UuCisgICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHRoaXMubGlzdGVuVG8odGhpcy5tb2RlbCwgJ2NoYW5nZScsIHRo
aXMucmVuZGVyKTsKKyAgICAgICAgICAgIHRoaXMubGlzdGVuVG8odGhpcy5tb2RlbCwgJ2Rlc3Ry
b3knLCB0aGlzLnJlbW92ZSk7CisgICAgICAgICAgICB0aGlzLmxpc3RlblRvKHRoaXMubW9kZWws
ICd2aXNpYmxlJywgdGhpcy50b2dnbGVWaXNpYmxlKTsKKyAgICAgICAgfSwKKworICAgICAgICAv
LyBSZS1yZW5kZXIgdGhlIHRpdGxlcyBvZiB0aGUgdG9kbyBpdGVtLgorICAgICAgICByZW5kZXI6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIC8vIEJhY2tib25lIExvY2FsU3RvcmFnZSBpcyBh
ZGRpbmcgYGlkYCBhdHRyaWJ1dGUgaW5zdGFudGx5IGFmdGVyCisgICAgICAgICAgICAvLyBjcmVh
dGluZyBhIG1vZGVsLiAgVGhpcyBjYXVzZXMgb3VyIFRvZG9WaWV3IHRvIHJlbmRlciB0d2ljZS4g
T25jZQorICAgICAgICAgICAgLy8gYWZ0ZXIgY3JlYXRpbmcgYSBtb2RlbCBhbmQgb25jZSBvbiBg
aWRgIGNoYW5nZS4gIFdlIHdhbnQgdG8KKyAgICAgICAgICAgIC8vIGZpbHRlciBvdXQgdGhlIHNl
Y29uZCByZWR1bmRhbnQgcmVuZGVyLCB3aGljaCBpcyBjYXVzZWQgYnkgdGhpcworICAgICAgICAg
ICAgLy8gYGlkYCBjaGFuZ2UuICBJdCdzIGtub3duIEJhY2tib25lIExvY2FsU3RvcmFnZSBidWcs
IHRoZXJlZm9yZQorICAgICAgICAgICAgLy8gd2UndmUgdG8gY3JlYXRlIGEgd29ya2Fyb3VuZC4K
KyAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YXN0ZWpzL3RvZG9tdmMvaXNzdWVz
LzQ2OQorICAgICAgICAgICAgaWYgKHRoaXMubW9kZWwuY2hhbmdlZC5pZCAhPT0gdW5kZWZpbmVk
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICB0aGlzLiRlbC5odG1sKHRoaXMudGVtcGxhdGUodGhpcy5tb2RlbC50b0pTT04oKSkpOworICAg
ICAgICAgICAgdGhpcy4kZWwudG9nZ2xlQ2xhc3MoJ2NvbXBsZXRlZCcsIHRoaXMubW9kZWwuZ2V0
KCdjb21wbGV0ZWQnKSk7CisgICAgICAgICAgICB0aGlzLnRvZ2dsZVZpc2libGUoKTsKKyAgICAg
ICAgICAgIHRoaXMuJGlucHV0ID0gdGhpcy4kKCcuZWRpdCcpOworICAgICAgICAgICAgcmV0dXJu
IHRoaXM7CisgICAgICAgIH0sCisKKyAgICAgICAgdG9nZ2xlVmlzaWJsZTogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgdGhpcy4kZWwudG9nZ2xlQ2xhc3MoJ2hpZGRlbicsIHRoaXMuaXNIaWRk
ZW4oKSk7CisgICAgICAgIH0sCisKKyAgICAgICAgaXNIaWRkZW46IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLm1vZGVsLmdldCgnY29tcGxldGVkJykgPworICAgICAgICAg
ICAgICAgIGFwcC5Ub2RvRmlsdGVyID09PSAnYWN0aXZlJyA6CisgICAgICAgICAgICAgICAgYXBw
LlRvZG9GaWx0ZXIgPT09ICdjb21wbGV0ZWQnOworICAgICAgICB9LAorCisgICAgICAgIC8vIFRv
Z2dsZSB0aGUgYCJjb21wbGV0ZWQiYCBzdGF0ZSBvZiB0aGUgbW9kZWwuCisgICAgICAgIHRvZ2ds
ZUNvbXBsZXRlZDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdGhpcy5tb2RlbC50b2dnbGUo
KTsKKyAgICAgICAgfSwKKworICAgICAgICAvLyBTd2l0Y2ggdGhpcyB2aWV3IGludG8gYCJlZGl0
aW5nImAgbW9kZSwgZGlzcGxheWluZyB0aGUgaW5wdXQgZmllbGQuCisgICAgICAgIGVkaXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHRoaXMuJGVsLmFkZENsYXNzKCdlZGl0aW5nJyk7Cisg
ICAgICAgICAgICB0aGlzLiRpbnB1dC5mb2N1cygpOworICAgICAgICB9LAorCisgICAgICAgIC8v
IENsb3NlIHRoZSBgImVkaXRpbmciYCBtb2RlLCBzYXZpbmcgY2hhbmdlcyB0byB0aGUgdG9kby4K
KyAgICAgICAgY2xvc2U6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRo
aXMuJGlucHV0LnZhbCgpOworICAgICAgICAgICAgdmFyIHRyaW1tZWRWYWx1ZSA9IHZhbHVlLnRy
aW0oKTsKKworICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBoYW5kbGUgYmx1ciBldmVu
dHMgZnJvbSBhbiBpdGVtIHRoYXQgaXMgbm8KKyAgICAgICAgICAgIC8vIGxvbmdlciBiZWluZyBl
ZGl0ZWQuIFJlbHlpbmcgb24gdGhlIENTUyBjbGFzcyBoZXJlIGhhcyB0aGUKKyAgICAgICAgICAg
IC8vIGJlbmVmaXQgb2YgdXMgbm90IGhhdmluZyB0byBtYWludGFpbiBzdGF0ZSBpbiB0aGUgRE9N
IGFuZCB0aGUKKyAgICAgICAgICAgIC8vIEphdmFTY3JpcHQgbG9naWMuCisgICAgICAgICAgICBp
ZiAoIXRoaXMuJGVsLmhhc0NsYXNzKCdlZGl0aW5nJykpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0cmltbWVkVmFsdWUpIHsKKyAg
ICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNhdmUoeyB0aXRsZTogdHJpbW1lZFZhbHVlIH0pOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLmNsZWFyKCk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHRoaXMuJGVsLnJlbW92ZUNsYXNzKCdlZGl0aW5nJyk7
CisgICAgICAgIH0sCisKKyAgICAgICAgLy8gSWYgeW91IGhpdCBgZW50ZXJgLCB3ZSdyZSB0aHJv
dWdoIGVkaXRpbmcgdGhlIGl0ZW0uCisgICAgICAgIHVwZGF0ZU9uRW50ZXI6IGZ1bmN0aW9uIChl
KSB7CisgICAgICAgICAgICBpZiAoZS53aGljaCA9PT0gRU5URVJfS0VZKSB7CisgICAgICAgICAg
ICAgICAgdGhpcy5jbG9zZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9LAorCisgICAgICAg
IC8vIElmIHlvdSdyZSBwcmVzc2luZyBgZXNjYXBlYCB3ZSByZXZlcnQgeW91ciBjaGFuZ2UgYnkg
c2ltcGx5IGxlYXZpbmcKKyAgICAgICAgLy8gdGhlIGBlZGl0aW5nYCBzdGF0ZS4KKyAgICAgICAg
cmV2ZXJ0T25Fc2NhcGU6IGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICBpZiAoZS53aGljaCA9
PT0gRVNDX0tFWSkgeworICAgICAgICAgICAgICAgIHRoaXMuJGVsLnJlbW92ZUNsYXNzKCdlZGl0
aW5nJyk7CisgICAgICAgICAgICAgICAgLy8gQWxzbyByZXNldCB0aGUgaGlkZGVuIGlucHV0IGJh
Y2sgdG8gdGhlIG9yaWdpbmFsIHZhbHVlLgorICAgICAgICAgICAgICAgIHRoaXMuJGlucHV0LnZh
bCh0aGlzLm1vZGVsLmdldCgndGl0bGUnKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisK
KyAgICAgICAgLy8gUmVtb3ZlIHRoZSBpdGVtLCBkZXN0cm95IHRoZSBtb2RlbCBmcm9tICpsb2Nh
bFN0b3JhZ2UqIGFuZCBkZWxldGUgaXRzIHZpZXcuCisgICAgICAgIGNsZWFyOiBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICB0aGlzLm1vZGVsLmRlc3Ryb3koKTsKKyAgICAgICAgfQorICAgIH0p
OworfSkoalF1ZXJ5KTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3Bl
ZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2JhY2ti
b25lL3JlYWRtZS5tZCBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEv
cmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2JhY2tib25lL3JlYWRtZS5t
ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4wYTRjMDBiY2QzYWY0ODM4ODFhZjBhOThhMmVhMjViYjg1MDI0MzViCi0t
LSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIu
MS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvcmVhZG1l
Lm1kCkBAIC0wLDAgKzEsMTEgQEAKKyMgU3BlZWRvbWV0ZXIgMi4xOiBCYWNrYm9uZS5qcyBUb2Rv
TVZDIGV4YW1wbGUKKworIyMgVGVzdCBsb2NhbGx5CisKKzEuIFJ1biBgbnBtIGluc3RhbGxgIHRv
IGluc3RhbGwgdGhlIGRlcGVuZGVuY2llcy4KKzIuIFJ1biBhIGxvY2FsIHNlcnZlciBmcm9tIHRo
aXMgZGlyZWN0b3J5LiAoWW91IGNvdWxkIHVzZSBbYG5wbSBpIC1nIGh0dHAtc2VydmVyYF0oaHR0
cHM6Ly9naXRodWIuY29tL2luZGV4emVyby9odHRwLXNlcnZlcikuKQorMy4gT3BlbiB0aGUgVVJM
IHBvaW50aW5nIHRvIHRoZSBsb2NhbCBzZXJ2ZXIgaW4geW91ciB3ZWIgYnJvd3NlciBvZiBjaG9p
Y2UuCisKKyMjIEJ1aWxkCisKK1RoZXJlIGlzIG5vIGJ1aWxkIHN0ZXAgZm9yIHRoaXMgZXhhbXBs
ZS4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93
c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVy
ZS1leGFtcGxlcy9lbWJlcmpzLWRlYnVnL2Fzc2V0cy90b2RvbXZjLmpzIGIvV2Vic2l0ZXMvYnJv
d3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1
cmUtZXhhbXBsZXMvZW1iZXJqcy1kZWJ1Zy9hc3NldHMvdG9kb212Yy5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43
ZDRkZmIzNmM3MWFkNDZlMGVkNGIxZDRhNTJkN2ZlN2ViNjJlMDA0Ci0tLSAvZGV2L251bGwKKysr
IGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9k
b212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy1kZWJ1Zy9hc3NldHMvdG9kb212Yy5q
cwpAQCAtMCwwICsxLDEyNjAgQEAKKyJ1c2Ugc3RyaWN0IjsKKworLyoganNoaW50IGlnbm9yZTpz
dGFydCAqLworCisKKworLyoganNoaW50IGlnbm9yZTplbmQgKi8KKworZGVmaW5lKCd0b2RvbXZj
L2FwcCcsIFsnZXhwb3J0cycsICdlbWJlcicsICd0b2RvbXZjL3Jlc29sdmVyJywgJ2VtYmVyLWxv
YWQtaW5pdGlhbGl6ZXJzJywgJ3RvZG9tdmMvY29uZmlnL2Vudmlyb25tZW50J10sIGZ1bmN0aW9u
IChleHBvcnRzLCBfZW1iZXIsIF90b2RvbXZjUmVzb2x2ZXIsIF9lbWJlckxvYWRJbml0aWFsaXpl
cnMsIF90b2RvbXZjQ29uZmlnRW52aXJvbm1lbnQpIHsKKworICAgIHZhciBBcHAgPSB1bmRlZmlu
ZWQ7CisKKyAgICBfZW1iZXJbJ2RlZmF1bHQnXS5NT0RFTF9GQUNUT1JZX0lOSkVDVElPTlMgPSB0
cnVlOworCisgICAgQXBwID0gX2VtYmVyWydkZWZhdWx0J10uQXBwbGljYXRpb24uZXh0ZW5kKHsK
KyAgICAgICAgbW9kdWxlUHJlZml4OiBfdG9kb212Y0NvbmZpZ0Vudmlyb25tZW50WydkZWZhdWx0
J10ubW9kdWxlUHJlZml4LAorICAgICAgICBwb2RNb2R1bGVQcmVmaXg6IF90b2RvbXZjQ29uZmln
RW52aXJvbm1lbnRbJ2RlZmF1bHQnXS5wb2RNb2R1bGVQcmVmaXgsCisgICAgICAgIFJlc29sdmVy
OiBfdG9kb212Y1Jlc29sdmVyWydkZWZhdWx0J10KKyAgICB9KTsKKworICAgICgwLCBfZW1iZXJM
b2FkSW5pdGlhbGl6ZXJzWydkZWZhdWx0J10pKEFwcCwgX3RvZG9tdmNDb25maWdFbnZpcm9ubWVu
dFsnZGVmYXVsdCddLm1vZHVsZVByZWZpeCk7CisKKyAgICBleHBvcnRzWydkZWZhdWx0J10gPSBB
cHA7Cit9KTsKK2RlZmluZSgndG9kb212Yy9jb21wb25lbnRzL2FwcC12ZXJzaW9uJywgWydleHBv
cnRzJywgJ2VtYmVyLWNsaS1hcHAtdmVyc2lvbi9jb21wb25lbnRzL2FwcC12ZXJzaW9uJywgJ3Rv
ZG9tdmMvY29uZmlnL2Vudmlyb25tZW50J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJDbGlB
cHBWZXJzaW9uQ29tcG9uZW50c0FwcFZlcnNpb24sIF90b2RvbXZjQ29uZmlnRW52aXJvbm1lbnQp
IHsKKworICB2YXIgbmFtZSA9IF90b2RvbXZjQ29uZmlnRW52aXJvbm1lbnRbJ2RlZmF1bHQnXS5B
UFAubmFtZTsKKyAgdmFyIHZlcnNpb24gPSBfdG9kb212Y0NvbmZpZ0Vudmlyb25tZW50WydkZWZh
dWx0J10uQVBQLnZlcnNpb247CisKKyAgZXhwb3J0c1snZGVmYXVsdCddID0gX2VtYmVyQ2xpQXBw
VmVyc2lvbkNvbXBvbmVudHNBcHBWZXJzaW9uWydkZWZhdWx0J10uZXh0ZW5kKHsKKyAgICB2ZXJz
aW9uOiB2ZXJzaW9uLAorICAgIG5hbWU6IG5hbWUKKyAgfSk7Cit9KTsKK2RlZmluZSgndG9kb212
Yy9jb21wb25lbnRzL3RvZG8taXRlbScsIFsnZXhwb3J0cycsICdlbWJlciddLCBmdW5jdGlvbiAo
ZXhwb3J0cywgX2VtYmVyKSB7CisgICAgZXhwb3J0c1snZGVmYXVsdCddID0gX2VtYmVyWydkZWZh
dWx0J10uQ29tcG9uZW50LmV4dGVuZCh7CisgICAgICAgIHJlcG86IF9lbWJlclsnZGVmYXVsdCdd
LmluamVjdC5zZXJ2aWNlKCksCisgICAgICAgIHRhZ05hbWU6ICdsaScsCisgICAgICAgIGVkaXRp
bmc6IGZhbHNlLAorICAgICAgICBjbGFzc05hbWVCaW5kaW5nczogWyd0b2RvLmNvbXBsZXRlZCcs
ICdlZGl0aW5nJ10sCisKKyAgICAgICAgYWN0aW9uczogeworICAgICAgICAgICAgc3RhcnRFZGl0
aW5nOiBmdW5jdGlvbiBzdGFydEVkaXRpbmcoKSB7CisgICAgICAgICAgICAgICAgdGhpcy5nZXQo
J29uU3RhcnRFZGl0JykoKTsKKyAgICAgICAgICAgICAgICB0aGlzLnNldCgnZWRpdGluZycsIHRy
dWUpOworICAgICAgICAgICAgICAgIF9lbWJlclsnZGVmYXVsdCddLnJ1bi5zY2hlZHVsZU9uY2Uo
J2FmdGVyUmVuZGVyJywgdGhpcywgJ2ZvY3VzSW5wdXQnKTsKKyAgICAgICAgICAgIH0sCisKKyAg
ICAgICAgICAgIGRvbmVFZGl0aW5nOiBmdW5jdGlvbiBkb25lRWRpdGluZyh0b2RvVGl0bGUpIHsK
KyAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZ2V0KCdlZGl0aW5nJykpIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
X2VtYmVyWydkZWZhdWx0J10uaXNCbGFuayh0b2RvVGl0bGUpKSB7CisgICAgICAgICAgICAgICAg
ICAgIHRoaXMuc2VuZCgncmVtb3ZlVG9kbycpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KCd0b2RvLnRpdGxlJywgdG9kb1RpdGxlLnRyaW0o
KSk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KCdlZGl0aW5nJywgZmFsc2UpOworICAg
ICAgICAgICAgICAgICAgICB0aGlzLmdldCgnb25FbmRFZGl0JykoKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICBoYW5kbGVLZXlkb3duOiBmdW5jdGlv
biBoYW5kbGVLZXlkb3duKGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAx
MykgeworICAgICAgICAgICAgICAgICAgICBlLnRhcmdldC5ibHVyKCk7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmIChlLmtleUNvZGUgPT09IDI3KSB7CisgICAgICAgICAgICAgICAgICAgIHRo
aXMuc2V0KCdlZGl0aW5nJywgZmFsc2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0sCisKKyAgICAgICAgICAgIHRvZ2dsZUNvbXBsZXRlZDogZnVuY3Rpb24gdG9nZ2xlQ29tcGxl
dGVkKGUpIHsKKyAgICAgICAgICAgICAgICB2YXIgdG9kbyA9IHRoaXMuZ2V0KCd0b2RvJyk7Cisg
ICAgICAgICAgICAgICAgX2VtYmVyWydkZWZhdWx0J10uc2V0KHRvZG8sICdjb21wbGV0ZWQnLCBl
LnRhcmdldC5jaGVja2VkKTsKKyAgICAgICAgICAgICAgICB0aGlzLmdldCgncmVwbycpLnBlcnNp
c3QoKTsKKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIHJlbW92ZVRvZG86IGZ1bmN0aW9u
IHJlbW92ZVRvZG8oKSB7CisgICAgICAgICAgICAgICAgdGhpcy5nZXQoJ3JlcG8nKVsnZGVsZXRl
J10odGhpcy5nZXQoJ3RvZG8nKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisKKyAgICAg
ICAgZm9jdXNJbnB1dDogZnVuY3Rpb24gZm9jdXNJbnB1dCgpIHsKKyAgICAgICAgICAgIHRoaXMu
ZWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dC5lZGl0JykuZm9jdXMoKTsKKyAgICAgICAgfQor
ICAgIH0pOworfSk7CitkZWZpbmUoJ3RvZG9tdmMvY29tcG9uZW50cy90b2RvLWxpc3QnLCBbJ2V4
cG9ydHMnLCAnZW1iZXInXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlcikgeworICAgIGV4cG9y
dHNbJ2RlZmF1bHQnXSA9IF9lbWJlclsnZGVmYXVsdCddLkNvbXBvbmVudC5leHRlbmQoeworICAg
ICAgICByZXBvOiBfZW1iZXJbJ2RlZmF1bHQnXS5pbmplY3Quc2VydmljZSgpLAorICAgICAgICB0
YWdOYW1lOiAnc2VjdGlvbicsCisgICAgICAgIGVsZW1lbnRJZDogJ21haW4nLAorICAgICAgICBj
YW5Ub2dnbGU6IHRydWUsCisgICAgICAgIGFsbENvbXBsZXRlZDogX2VtYmVyWydkZWZhdWx0J10u
Y29tcHV0ZWQoJ3RvZG9zLkBlYWNoLmNvbXBsZXRlZCcsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLmdldCgndG9kb3MnKS5pc0V2ZXJ5KCdjb21wbGV0ZWQnKTsKKyAgICAg
ICAgfSksCisKKyAgICAgICAgYWN0aW9uczogeworICAgICAgICAgICAgZW5hYmxlVG9nZ2xlOiBm
dW5jdGlvbiBlbmFibGVUb2dnbGUoKSB7CisgICAgICAgICAgICAgICAgdGhpcy5zZXQoJ2NhblRv
Z2dsZScsIHRydWUpOworICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgZGlzYWJsZVRvZ2ds
ZTogZnVuY3Rpb24gZGlzYWJsZVRvZ2dsZSgpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnNldCgn
Y2FuVG9nZ2xlJywgZmFsc2UpOworICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgdG9nZ2xl
QWxsOiBmdW5jdGlvbiB0b2dnbGVBbGwoKSB7CisgICAgICAgICAgICAgICAgdmFyIGFsbENvbXBs
ZXRlZCA9IHRoaXMuZ2V0KCdhbGxDb21wbGV0ZWQnKTsKKyAgICAgICAgICAgICAgICB0aGlzLmdl
dCgndG9kb3MnKS5mb3JFYWNoKGZ1bmN0aW9uICh0b2RvKSB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBfZW1iZXJbJ2RlZmF1bHQnXS5zZXQodG9kbywgJ2NvbXBsZXRlZCcsICFhbGxDb21w
bGV0ZWQpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHRoaXMuZ2V0KCdy
ZXBvJykucGVyc2lzdCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7Cit9KTsK
K2RlZmluZSgndG9kb212Yy9jb250cm9sbGVycy9hY3RpdmUnLCBbJ2V4cG9ydHMnLCAnZW1iZXIn
XSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlcikgeworICAgIGV4cG9ydHNbJ2RlZmF1bHQnXSA9
IF9lbWJlclsnZGVmYXVsdCddLkNvbnRyb2xsZXIuZXh0ZW5kKHsKKyAgICAgICAgdG9kb3M6IF9l
bWJlclsnZGVmYXVsdCddLmNvbXB1dGVkLmZpbHRlckJ5KCdtb2RlbCcsICdjb21wbGV0ZWQnLCBm
YWxzZSkKKyAgICB9KTsKK30pOworZGVmaW5lKCd0b2RvbXZjL2NvbnRyb2xsZXJzL2FwcGxpY2F0
aW9uJywgWydleHBvcnRzJywgJ2VtYmVyJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXIpIHsK
KyAgICBleHBvcnRzWydkZWZhdWx0J10gPSBfZW1iZXJbJ2RlZmF1bHQnXS5Db250cm9sbGVyLmV4
dGVuZCh7CisgICAgICAgIHJlcG86IF9lbWJlclsnZGVmYXVsdCddLmluamVjdC5zZXJ2aWNlKCks
CisgICAgICAgIHJlbWFpbmluZzogX2VtYmVyWydkZWZhdWx0J10uY29tcHV0ZWQuZmlsdGVyQnko
J21vZGVsJywgJ2NvbXBsZXRlZCcsIGZhbHNlKSwKKyAgICAgICAgY29tcGxldGVkOiBfZW1iZXJb
J2RlZmF1bHQnXS5jb21wdXRlZC5maWx0ZXJCeSgnbW9kZWwnLCAnY29tcGxldGVkJyksCisgICAg
ICAgIGFjdGlvbnM6IHsKKyAgICAgICAgICAgIGNyZWF0ZVRvZG86IGZ1bmN0aW9uIGNyZWF0ZVRv
ZG8oZSkgeworICAgICAgICAgICAgICAgIGlmIChlLmtleUNvZGUgPT09IDEzICYmICFfZW1iZXJb
J2RlZmF1bHQnXS5pc0JsYW5rKGUudGFyZ2V0LnZhbHVlKSkgeworICAgICAgICAgICAgICAgICAg
ICB0aGlzLmdldCgncmVwbycpLmFkZCh7IHRpdGxlOiBlLnRhcmdldC52YWx1ZS50cmltKCksIGNv
bXBsZXRlZDogZmFsc2UgfSk7CisgICAgICAgICAgICAgICAgICAgIGUudGFyZ2V0LnZhbHVlID0g
Jyc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgY2xl
YXJDb21wbGV0ZWQ6IGZ1bmN0aW9uIGNsZWFyQ29tcGxldGVkKCkgeworICAgICAgICAgICAgICAg
IHRoaXMuZ2V0KCdtb2RlbCcpLnJlbW92ZU9iamVjdHModGhpcy5nZXQoJ2NvbXBsZXRlZCcpKTsK
KyAgICAgICAgICAgICAgICB0aGlzLmdldCgncmVwbycpLnBlcnNpc3QoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0pOworfSk7CitkZWZpbmUoJ3RvZG9tdmMvY29udHJvbGxlcnMv
Y29tcGxldGVkJywgWydleHBvcnRzJywgJ2VtYmVyJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1i
ZXIpIHsKKyAgICBleHBvcnRzWydkZWZhdWx0J10gPSBfZW1iZXJbJ2RlZmF1bHQnXS5Db250cm9s
bGVyLmV4dGVuZCh7CisgICAgICAgIHRvZG9zOiBfZW1iZXJbJ2RlZmF1bHQnXS5jb21wdXRlZC5m
aWx0ZXJCeSgnbW9kZWwnLCAnY29tcGxldGVkJywgdHJ1ZSkKKyAgICB9KTsKK30pOworZGVmaW5l
KCd0b2RvbXZjL2hlbHBlcnMvZ3QnLCBbJ2V4cG9ydHMnLCAnZW1iZXInXSwgZnVuY3Rpb24gKGV4
cG9ydHMsIF9lbWJlcikgeworICAgIHZhciBfc2xpY2VkVG9BcnJheSA9IChmdW5jdGlvbiAoKSB7
IGZ1bmN0aW9uIHNsaWNlSXRlcmF0b3IoYXJyLCBpKSB7IHZhciBfYXJyID0gW107IHZhciBfbiA9
IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX2UgPSB1bmRlZmluZWQ7IHRyeSB7IGZvciAodmFy
IF9pID0gYXJyW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkp
LmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5s
ZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJy
OyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pWydyZXR1cm4nXSkgX2lbJ3JldHVybidd
KCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfSByZXR1
cm4gZnVuY3Rpb24gKGFyciwgaSkgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IHJldHVybiBh
cnI7IH0gZWxzZSBpZiAoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChhcnIpKSB7IHJldHVybiBz
bGljZUl0ZXJhdG9yKGFyciwgaSk7IH0gZWxzZSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFs
aWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UnKTsgfSB9OyB9
KSgpOworCisgICAgZXhwb3J0cy5ndCA9IGd0OworCisgICAgZnVuY3Rpb24gZ3QoX3JlZiAvKiwg
aGFzaCovKSB7CisgICAgICAgIHZhciBfcmVmMiA9IF9zbGljZWRUb0FycmF5KF9yZWYsIDIpOwor
CisgICAgICAgIHZhciBuMSA9IF9yZWYyWzBdOworICAgICAgICB2YXIgbjIgPSBfcmVmMlsxXTsK
KworICAgICAgICByZXR1cm4gbjEgPiBuMjsKKyAgICB9CisKKyAgICBleHBvcnRzWydkZWZhdWx0
J10gPSBfZW1iZXJbJ2RlZmF1bHQnXS5IZWxwZXIuaGVscGVyKGd0KTsKK30pOworZGVmaW5lKCd0
b2RvbXZjL2hlbHBlcnMvcGx1cmFsaXplJywgWydleHBvcnRzJywgJ2VtYmVyJywgJ2VtYmVyLWlu
ZmxlY3RvciddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyLCBfZW1iZXJJbmZsZWN0b3IpIHsK
KyAgICB2YXIgX3NsaWNlZFRvQXJyYXkgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBzbGljZUl0
ZXJhdG9yKGFyciwgaSkgeyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBm
YWxzZTsgdmFyIF9lID0gdW5kZWZpbmVkOyB0cnkgeyBmb3IgKHZhciBfaSA9IGFycltTeW1ib2wu
aXRlcmF0b3JdKCksIF9zOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVl
KSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVh
azsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5
IHsgaWYgKCFfbiAmJiBfaVsncmV0dXJuJ10pIF9pWydyZXR1cm4nXSgpOyB9IGZpbmFsbHkgeyBp
ZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH0gcmV0dXJuIGZ1bmN0aW9uIChhcnIs
IGkpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgeyByZXR1cm4gYXJyOyB9IGVsc2UgaWYgKFN5
bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoYXJyKSkgeyByZXR1cm4gc2xpY2VJdGVyYXRvcihhcnIs
IGkpOyB9IGVsc2UgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGF0dGVtcHQgdG8gZGVz
dHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlJyk7IH0gfTsgfSkoKTsKKworICAgIGV4cG9y
dHMucGx1cmFsaXplSGVscGVyID0gcGx1cmFsaXplSGVscGVyOworCisgICAgZnVuY3Rpb24gcGx1
cmFsaXplSGVscGVyKF9yZWYgLyosIGhhc2gqLykgeworICAgICAgICB2YXIgX3JlZjIgPSBfc2xp
Y2VkVG9BcnJheShfcmVmLCAyKTsKKworICAgICAgICB2YXIgc2luZ3VsYXIgPSBfcmVmMlswXTsK
KyAgICAgICAgdmFyIGNvdW50ID0gX3JlZjJbMV07CisKKyAgICAgICAgcmV0dXJuIGNvdW50ID09
PSAxID8gc2luZ3VsYXIgOiAoMCwgX2VtYmVySW5mbGVjdG9yLnBsdXJhbGl6ZSkoc2luZ3VsYXIp
OworICAgIH0KKworICAgIGV4cG9ydHNbJ2RlZmF1bHQnXSA9IF9lbWJlclsnZGVmYXVsdCddLkhl
bHBlci5oZWxwZXIocGx1cmFsaXplSGVscGVyKTsKK30pOworZGVmaW5lKCd0b2RvbXZjL2hlbHBl
cnMvc2luZ3VsYXJpemUnLCBbJ2V4cG9ydHMnLCAnZW1iZXItaW5mbGVjdG9yL2xpYi9oZWxwZXJz
L3Npbmd1bGFyaXplJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJJbmZsZWN0b3JMaWJIZWxw
ZXJzU2luZ3VsYXJpemUpIHsKKyAgZXhwb3J0c1snZGVmYXVsdCddID0gX2VtYmVySW5mbGVjdG9y
TGliSGVscGVyc1Npbmd1bGFyaXplWydkZWZhdWx0J107Cit9KTsKK2RlZmluZSgndG9kb212Yy9p
bml0aWFsaXplcnMvYXBwLXZlcnNpb24nLCBbJ2V4cG9ydHMnLCAnZW1iZXItY2xpLWFwcC12ZXJz
aW9uL2luaXRpYWxpemVyLWZhY3RvcnknLCAndG9kb212Yy9jb25maWcvZW52aXJvbm1lbnQnXSwg
ZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlckNsaUFwcFZlcnNpb25Jbml0aWFsaXplckZhY3Rvcnks
IF90b2RvbXZjQ29uZmlnRW52aXJvbm1lbnQpIHsKKyAgZXhwb3J0c1snZGVmYXVsdCddID0gewor
ICAgIG5hbWU6ICdBcHAgVmVyc2lvbicsCisgICAgaW5pdGlhbGl6ZTogKDAsIF9lbWJlckNsaUFw
cFZlcnNpb25Jbml0aWFsaXplckZhY3RvcnlbJ2RlZmF1bHQnXSkoX3RvZG9tdmNDb25maWdFbnZp
cm9ubWVudFsnZGVmYXVsdCddLkFQUC5uYW1lLCBfdG9kb212Y0NvbmZpZ0Vudmlyb25tZW50Wydk
ZWZhdWx0J10uQVBQLnZlcnNpb24pCisgIH07Cit9KTsKK2RlZmluZSgndG9kb212Yy9pbml0aWFs
aXplcnMvY29udGFpbmVyLWRlYnVnLWFkYXB0ZXInLCBbJ2V4cG9ydHMnLCAnZW1iZXItcmVzb2x2
ZXIvY29udGFpbmVyLWRlYnVnLWFkYXB0ZXInXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlclJl
c29sdmVyQ29udGFpbmVyRGVidWdBZGFwdGVyKSB7CisgIGV4cG9ydHNbJ2RlZmF1bHQnXSA9IHsK
KyAgICBuYW1lOiAnY29udGFpbmVyLWRlYnVnLWFkYXB0ZXInLAorCisgICAgaW5pdGlhbGl6ZTog
ZnVuY3Rpb24gaW5pdGlhbGl6ZSgpIHsKKyAgICAgIHZhciBhcHAgPSBhcmd1bWVudHNbMV0gfHwg
YXJndW1lbnRzWzBdOworCisgICAgICBhcHAucmVnaXN0ZXIoJ2NvbnRhaW5lci1kZWJ1Zy1hZGFw
dGVyOm1haW4nLCBfZW1iZXJSZXNvbHZlckNvbnRhaW5lckRlYnVnQWRhcHRlclsnZGVmYXVsdCdd
KTsKKyAgICAgIGFwcC5pbmplY3QoJ2NvbnRhaW5lci1kZWJ1Zy1hZGFwdGVyOm1haW4nLCAnbmFt
ZXNwYWNlJywgJ2FwcGxpY2F0aW9uOm1haW4nKTsKKyAgICB9CisgIH07Cit9KTsKK2RlZmluZSgn
dG9kb212Yy9pbml0aWFsaXplcnMvZXhwb3J0LWFwcGxpY2F0aW9uLWdsb2JhbCcsIFsnZXhwb3J0
cycsICdlbWJlcicsICd0b2RvbXZjL2NvbmZpZy9lbnZpcm9ubWVudCddLCBmdW5jdGlvbiAoZXhw
b3J0cywgX2VtYmVyLCBfdG9kb212Y0NvbmZpZ0Vudmlyb25tZW50KSB7CisgIGV4cG9ydHMuaW5p
dGlhbGl6ZSA9IGluaXRpYWxpemU7CisKKyAgZnVuY3Rpb24gaW5pdGlhbGl6ZSgpIHsKKyAgICB2
YXIgYXBwbGljYXRpb24gPSBhcmd1bWVudHNbMV0gfHwgYXJndW1lbnRzWzBdOworICAgIGlmIChf
dG9kb212Y0NvbmZpZ0Vudmlyb25tZW50WydkZWZhdWx0J10uZXhwb3J0QXBwbGljYXRpb25HbG9i
YWwgIT09IGZhbHNlKSB7CisgICAgICB2YXIgdGhlR2xvYmFsOworICAgICAgaWYgKHR5cGVvZiB3
aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgIHRoZUdsb2JhbCA9IHdpbmRvdzsKKyAg
ICAgIH0gZWxzZSBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAg
dGhlR2xvYmFsID0gZ2xvYmFsOworICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3Vu
ZGVmaW5lZCcpIHsKKyAgICAgICAgdGhlR2xvYmFsID0gc2VsZjsKKyAgICAgIH0gZWxzZSB7Cisg
ICAgICAgIC8vIG5vIHJlYXNvbmFibGUgZ2xvYmFsLCBqdXN0IGJhaWwKKyAgICAgICAgcmV0dXJu
OworICAgICAgfQorCisgICAgICB2YXIgdmFsdWUgPSBfdG9kb212Y0NvbmZpZ0Vudmlyb25tZW50
WydkZWZhdWx0J10uZXhwb3J0QXBwbGljYXRpb25HbG9iYWw7CisgICAgICB2YXIgZ2xvYmFsTmFt
ZTsKKworICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHsKKyAgICAgICAgZ2xv
YmFsTmFtZSA9IHZhbHVlOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZ2xvYmFsTmFtZSA9IF9l
bWJlclsnZGVmYXVsdCddLlN0cmluZy5jbGFzc2lmeShfdG9kb212Y0NvbmZpZ0Vudmlyb25tZW50
WydkZWZhdWx0J10ubW9kdWxlUHJlZml4KTsKKyAgICAgIH0KKworICAgICAgaWYgKCF0aGVHbG9i
YWxbZ2xvYmFsTmFtZV0pIHsKKyAgICAgICAgdGhlR2xvYmFsW2dsb2JhbE5hbWVdID0gYXBwbGlj
YXRpb247CisKKyAgICAgICAgYXBwbGljYXRpb24ucmVvcGVuKHsKKyAgICAgICAgICB3aWxsRGVz
dHJveTogZnVuY3Rpb24gd2lsbERlc3Ryb3koKSB7CisgICAgICAgICAgICB0aGlzLl9zdXBlci5h
cHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgICAgICAgICAgZGVsZXRlIHRoZUdsb2JhbFtnbG9i
YWxOYW1lXTsKKyAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgfQorICAgIH0KKyAgfQor
CisgIGV4cG9ydHNbJ2RlZmF1bHQnXSA9IHsKKyAgICBuYW1lOiAnZXhwb3J0LWFwcGxpY2F0aW9u
LWdsb2JhbCcsCisKKyAgICBpbml0aWFsaXplOiBpbml0aWFsaXplCisgIH07Cit9KTsKK2RlZmlu
ZSgndG9kb212Yy9pbnN0YW5jZS1pbml0aWFsaXplcnMvZ2xvYmFsJywgWydleHBvcnRzJ10sIGZ1
bmN0aW9uIChleHBvcnRzKSB7CisgIGV4cG9ydHMuaW5pdGlhbGl6ZSA9IGluaXRpYWxpemU7Cisg
IC8vIGFwcC9pbnN0YW5jZS1pbml0aWFsaXplcnMvZ2xvYmFsLmpzCisKKyAgZnVuY3Rpb24gaW5p
dGlhbGl6ZShhcHBsaWNhdGlvbikgeworICAgIHdpbmRvdy5BcHAgPSBhcHBsaWNhdGlvbjsgLy8g
b3Igd2luZG93LldoYXRldmVyCisgIH0KKworICBleHBvcnRzWydkZWZhdWx0J10gPSB7CisgICAg
bmFtZTogJ2dsb2JhbCcsCisgICAgaW5pdGlhbGl6ZTogaW5pdGlhbGl6ZQorICB9OworfSk7Citk
ZWZpbmUoJ3RvZG9tdmMvcmVzb2x2ZXInLCBbJ2V4cG9ydHMnLCAnZW1iZXItcmVzb2x2ZXInXSwg
ZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlclJlc29sdmVyKSB7CisgIGV4cG9ydHNbJ2RlZmF1bHQn
XSA9IF9lbWJlclJlc29sdmVyWydkZWZhdWx0J107Cit9KTsKK2RlZmluZSgndG9kb212Yy9yb3V0
ZXInLCBbJ2V4cG9ydHMnLCAnZW1iZXInLCAndG9kb212Yy9jb25maWcvZW52aXJvbm1lbnQnXSwg
ZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlciwgX3RvZG9tdmNDb25maWdFbnZpcm9ubWVudCkgewor
CisgICAgdmFyIFJvdXRlciA9IF9lbWJlclsnZGVmYXVsdCddLlJvdXRlci5leHRlbmQoeworICAg
ICAgICBsb2NhdGlvbjogX3RvZG9tdmNDb25maWdFbnZpcm9ubWVudFsnZGVmYXVsdCddLmxvY2F0
aW9uVHlwZQorICAgIH0pOworCisgICAgUm91dGVyLm1hcChmdW5jdGlvbiAoKSB7CisgICAgICAg
IHRoaXMucm91dGUoJ2FjdGl2ZScpOworICAgICAgICB0aGlzLnJvdXRlKCdjb21wbGV0ZWQnKTsK
KyAgICB9KTsKKworICAgIGV4cG9ydHNbJ2RlZmF1bHQnXSA9IFJvdXRlcjsKK30pOworZGVmaW5l
KCd0b2RvbXZjL3JvdXRlcy9hcHBsaWNhdGlvbicsIFsnZXhwb3J0cycsICdlbWJlciddLCBmdW5j
dGlvbiAoZXhwb3J0cywgX2VtYmVyKSB7CisgICAgZXhwb3J0c1snZGVmYXVsdCddID0gX2VtYmVy
WydkZWZhdWx0J10uUm91dGUuZXh0ZW5kKHsKKyAgICAgICAgcmVwbzogX2VtYmVyWydkZWZhdWx0
J10uaW5qZWN0LnNlcnZpY2UoKSwKKyAgICAgICAgbW9kZWw6IGZ1bmN0aW9uIG1vZGVsKCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCdyZXBvJykuZmluZEFsbCgpOworICAgICAgICB9
CisgICAgfSk7Cit9KTsKK2RlZmluZSgndG9kb212Yy9zZXJ2aWNlcy9hamF4JywgWydleHBvcnRz
JywgJ2VtYmVyLWFqYXgvc2VydmljZXMvYWpheCddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVy
QWpheFNlcnZpY2VzQWpheCkgeworICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ2Rl
ZmF1bHQnLCB7CisgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICBnZXQ6IGZ1bmN0aW9uIGdldCgp
IHsKKyAgICAgIHJldHVybiBfZW1iZXJBamF4U2VydmljZXNBamF4WydkZWZhdWx0J107CisgICAg
fQorICB9KTsKK30pOworZGVmaW5lKCd0b2RvbXZjL3NlcnZpY2VzL21lbW9yeScsIFsnZXhwb3J0
cyddLCBmdW5jdGlvbiAoZXhwb3J0cykgeworICAoZnVuY3Rpb24gKHJvb3QpIHsKKyAgICB2YXIg
bG9jYWxTdG9yYWdlTWVtb3J5ID0ge307CisgICAgdmFyIGNhY2hlID0ge307CisKKyAgICAvKioK
KyAgICAgKiBudW1iZXIgb2Ygc3RvcmVkIGl0ZW1zLgorICAgICAqLworICAgIGxvY2FsU3RvcmFn
ZU1lbW9yeS5sZW5ndGggPSAwOworCisgICAgLyoqCisgICAgICogcmV0dXJucyBpdGVtIGZvciBw
YXNzZWQga2V5LCBvciBudWxsCisgICAgICoKKyAgICAgKiBAcGFyYSB7U3RyaW5nfSBrZXkKKyAg
ICAgKiAgICAgICBuYW1lIG9mIGl0ZW0gdG8gYmUgcmV0dXJuZWQKKyAgICAgKiBAcmV0dXJucyB7
U3RyaW5nfG51bGx9CisgICAgICovCisgICAgbG9jYWxTdG9yYWdlTWVtb3J5LmdldEl0ZW0gPSBm
dW5jdGlvbiAoa2V5KSB7CisgICAgICByZXR1cm4gY2FjaGVba2V5XSB8fCBudWxsOworICAgIH07
CisKKyAgICAvKioKKyAgICAgKiBzZXRzIGl0ZW0gZm9yIGtleSB0byBwYXNzZWQgdmFsdWUsIGFz
IFN0cmluZworICAgICAqCisgICAgICogQHBhcmEge1N0cmluZ30ga2V5CisgICAgICogICAgICAg
bmFtZSBvZiBpdGVtIHRvIGJlIHNldAorICAgICAqIEBwYXJhIHtTdHJpbmd9IHZhbHVlCisgICAg
ICogICAgICAgdmFsdWUsIHdpbGwgYWx3YXlzIGJlIHR1cm5lZCBpbnRvIGEgU3RyaW5nCisgICAg
ICogQHJldHVybnMge3VuZGVmaW5lZH0KKyAgICAgKi8KKyAgICBsb2NhbFN0b3JhZ2VNZW1vcnku
c2V0SXRlbSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7CisgICAgICBpZiAodHlwZW9mIHZhbHVl
ID09PSAndW5kZWZpbmVkJykgeworICAgICAgICBsb2NhbFN0b3JhZ2VNZW1vcnkucmVtb3ZlSXRl
bShrZXkpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFjYWNoZS5oYXNPd25Qcm9wZXJ0
eShrZXkpKSB7CisgICAgICAgICAgbG9jYWxTdG9yYWdlTWVtb3J5Lmxlbmd0aCsrOworICAgICAg
ICB9CisKKyAgICAgICAgY2FjaGVba2V5XSA9ICcnICsgdmFsdWU7CisgICAgICB9CisgICAgfTsK
KworICAgIC8qKgorICAgICAqIHJlbW92ZXMgaXRlbSBmb3IgcGFzc2VkIGtleQorICAgICAqCisg
ICAgICogQHBhcmEge1N0cmluZ30ga2V5CisgICAgICogICAgICAgbmFtZSBvZiBpdGVtIHRvIGJl
IHJlbW92ZWQKKyAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQorICAgICAqLworICAgIGxvY2Fs
U3RvcmFnZU1lbW9yeS5yZW1vdmVJdGVtID0gZnVuY3Rpb24gKGtleSkgeworICAgICAgaWYgKGNh
Y2hlLmhhc093blByb3BlcnR5KGtleSkpIHsKKyAgICAgICAgZGVsZXRlIGNhY2hlW2tleV07Cisg
ICAgICAgIGxvY2FsU3RvcmFnZU1lbW9yeS5sZW5ndGgtLTsKKyAgICAgIH0KKyAgICB9OworCisg
ICAgLyoqCisgICAgICogcmV0dXJucyBuYW1lIG9mIGtleSBhdCBwYXNzZWQgaW5kZXgKKyAgICAg
KgorICAgICAqIEBwYXJhIHtOdW1iZXJ9IGluZGV4CisgICAgICogICAgICAgUG9zaXRpb24gZm9y
IGtleSB0byBiZSByZXR1cm5lZCAoc3RhcnRzIGF0IDApCisgICAgICogQHJldHVybnMge1N0cmlu
Z3xudWxsfQorICAgICAqLworICAgIGxvY2FsU3RvcmFnZU1lbW9yeS5rZXkgPSBmdW5jdGlvbiAo
aW5kZXgpIHsKKyAgICAgIHJldHVybiBPYmplY3Qua2V5cyhjYWNoZSlbaW5kZXhdIHx8IG51bGw7
CisgICAgfTsKKworICAgIC8qKgorICAgICAqIHJlbW92ZXMgYWxsIHN0b3JlZCBpdGVtcyBhbmQg
c2V0cyBsZW5ndGggdG8gMAorICAgICAqCisgICAgICogQHJldHVybnMge3VuZGVmaW5lZH0KKyAg
ICAgKi8KKyAgICBsb2NhbFN0b3JhZ2VNZW1vcnkuY2xlYXIgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICBjYWNoZSA9IHt9OworICAgICAgbG9jYWxTdG9yYWdlTWVtb3J5Lmxlbmd0aCA9IDA7CisgICAg
fTsKKworICAgIHJvb3QubG9jYWxTdG9yYWdlTWVtb3J5ID0gbG9jYWxTdG9yYWdlTWVtb3J5Owor
ICB9KSh3aW5kb3cpOworfSk7CitkZWZpbmUoJ3RvZG9tdmMvc2VydmljZXMvcmVwbycsIFsnZXhw
b3J0cycsICdlbWJlcicsICd0b2RvbXZjL3NlcnZpY2VzL21lbW9yeSddLCBmdW5jdGlvbiAoZXhw
b3J0cywgX2VtYmVyLCBfdG9kb212Y1NlcnZpY2VzTWVtb3J5KSB7CisgICAgZXhwb3J0c1snZGVm
YXVsdCddID0gX2VtYmVyWydkZWZhdWx0J10uU2VydmljZS5leHRlbmQoeworICAgICAgICBsYXN0
SWQ6IDAsCisgICAgICAgIGRhdGE6IG51bGwsCisgICAgICAgIGZpbmRBbGw6IGZ1bmN0aW9uIGZp
bmRBbGwoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoJ2RhdGEnKSB8fCB0aGlzLnNl
dCgnZGF0YScsIEpTT04ucGFyc2Uod2luZG93LmxvY2FsU3RvcmFnZU1lbW9yeS5nZXRJdGVtKCd0
b2RvcycpIHx8ICdbXScpKTsKKyAgICAgICAgfSwKKworICAgICAgICBhZGQ6IGZ1bmN0aW9uIGFk
ZChhdHRycykgeworICAgICAgICAgICAgdmFyIHRvZG8gPSBPYmplY3QuYXNzaWduKHsgaWQ6IHRo
aXMuaW5jcmVtZW50UHJvcGVydHkoJ2xhc3RJZCcpIH0sIGF0dHJzKTsKKyAgICAgICAgICAgIHRo
aXMuZ2V0KCdkYXRhJykucHVzaE9iamVjdCh0b2RvKTsKKyAgICAgICAgICAgIHRoaXMucGVyc2lz
dCgpOworICAgICAgICAgICAgcmV0dXJuIHRvZG87CisgICAgICAgIH0sCisKKyAgICAgICAgJ2Rl
bGV0ZSc6IGZ1bmN0aW9uIF9kZWxldGUodG9kbykgeworICAgICAgICAgICAgdGhpcy5nZXQoJ2Rh
dGEnKS5yZW1vdmVPYmplY3QodG9kbyk7CisgICAgICAgICAgICB0aGlzLnBlcnNpc3QoKTsKKyAg
ICAgICAgfSwKKworICAgICAgICBwZXJzaXN0OiBmdW5jdGlvbiBwZXJzaXN0KCkgeworICAgICAg
ICAgICAgd2luZG93LmxvY2FsU3RvcmFnZU1lbW9yeS5zZXRJdGVtKCd0b2RvcycsIEpTT04uc3Ry
aW5naWZ5KHRoaXMuZ2V0KCdkYXRhJykpKTsKKyAgICAgICAgfQorICAgIH0pOworfSk7CitkZWZp
bmUoInRvZG9tdmMvdGVtcGxhdGVzL2FjdGl2ZSIsIFsiZXhwb3J0cyJdLCBmdW5jdGlvbiAoZXhw
b3J0cykgeworICBleHBvcnRzWyJkZWZhdWx0Il0gPSBFbWJlci5IVE1MQmFycy50ZW1wbGF0ZSgo
ZnVuY3Rpb24gKCkgeworICAgIHJldHVybiB7CisgICAgICBtZXRhOiB7CisgICAgICAgICJmcmFn
bWVudFJlYXNvbiI6IHsKKyAgICAgICAgICAibmFtZSI6ICJtaXNzaW5nLXdyYXBwZXIiLAorICAg
ICAgICAgICJwcm9ibGVtcyI6IFsid3JvbmctdHlwZSJdCisgICAgICAgIH0sCisgICAgICAgICJy
ZXZpc2lvbiI6ICJFbWJlckAyLjYuMiIsCisgICAgICAgICJsb2MiOiB7CisgICAgICAgICAgInNv
dXJjZSI6IG51bGwsCisgICAgICAgICAgInN0YXJ0IjogeworICAgICAgICAgICAgImxpbmUiOiAx
LAorICAgICAgICAgICAgImNvbHVtbiI6IDAKKyAgICAgICAgICB9LAorICAgICAgICAgICJlbmQi
OiB7CisgICAgICAgICAgICAibGluZSI6IDEsCisgICAgICAgICAgICAiY29sdW1uIjogMjUKKyAg
ICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJtb2R1bGVOYW1lIjogInRvZG9tdmMvdGVt
cGxhdGVzL2FjdGl2ZS5oYnMiCisgICAgICB9LAorICAgICAgaXNFbXB0eTogZmFsc2UsCisgICAg
ICBhcml0eTogMCwKKyAgICAgIGNhY2hlZEZyYWdtZW50OiBudWxsLAorICAgICAgaGFzUmVuZGVy
ZWQ6IGZhbHNlLAorICAgICAgYnVpbGRGcmFnbWVudDogZnVuY3Rpb24gYnVpbGRGcmFnbWVudChk
b20pIHsKKyAgICAgICAgdmFyIGVsMCA9IGRvbS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Cisg
ICAgICAgIHZhciBlbDEgPSBkb20uY3JlYXRlQ29tbWVudCgiIik7CisgICAgICAgIGRvbS5hcHBl
bmRDaGlsZChlbDAsIGVsMSk7CisgICAgICAgIHJldHVybiBlbDA7CisgICAgICB9LAorICAgICAg
YnVpbGRSZW5kZXJOb2RlczogZnVuY3Rpb24gYnVpbGRSZW5kZXJOb2Rlcyhkb20sIGZyYWdtZW50
LCBjb250ZXh0dWFsRWxlbWVudCkgeworICAgICAgICB2YXIgbW9ycGhzID0gbmV3IEFycmF5KDEp
OworICAgICAgICBtb3JwaHNbMF0gPSBkb20uY3JlYXRlTW9ycGhBdChmcmFnbWVudCwgMCwgMCwg
Y29udGV4dHVhbEVsZW1lbnQpOworICAgICAgICBkb20uaW5zZXJ0Qm91bmRhcnkoZnJhZ21lbnQs
IDApOworICAgICAgICBkb20uaW5zZXJ0Qm91bmRhcnkoZnJhZ21lbnQsIG51bGwpOworICAgICAg
ICByZXR1cm4gbW9ycGhzOworICAgICAgfSwKKyAgICAgIHN0YXRlbWVudHM6IFtbImlubGluZSIs
ICJ0b2RvLWxpc3QiLCBbXSwgWyJ0b2RvcyIsIFsic3ViZXhwciIsICJAbXV0IiwgW1siZ2V0Iiwg
InRvZG9zIiwgWyJsb2MiLCBbbnVsbCwgWzEsIDE4XSwgWzEsIDIzXV1dXV0sIFtdLCBbXV1dLCBb
ImxvYyIsIFtudWxsLCBbMSwgMF0sIFsxLCAyNV1dXV1dLAorICAgICAgbG9jYWxzOiBbXSwKKyAg
ICAgIHRlbXBsYXRlczogW10KKyAgICB9OworICB9KSgpKTsKK30pOworZGVmaW5lKCJ0b2RvbXZj
L3RlbXBsYXRlcy9hcHBsaWNhdGlvbiIsIFsiZXhwb3J0cyJdLCBmdW5jdGlvbiAoZXhwb3J0cykg
eworICBleHBvcnRzWyJkZWZhdWx0Il0gPSBFbWJlci5IVE1MQmFycy50ZW1wbGF0ZSgoZnVuY3Rp
b24gKCkgeworICAgIHZhciBjaGlsZDAgPSAoZnVuY3Rpb24gKCkgeworICAgICAgdmFyIGNoaWxk
MCA9IChmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgbWV0YTogewor
ICAgICAgICAgICAgImZyYWdtZW50UmVhc29uIjogZmFsc2UsCisgICAgICAgICAgICAicmV2aXNp
b24iOiAiRW1iZXJAMi42LjIiLAorICAgICAgICAgICAgImxvYyI6IHsKKyAgICAgICAgICAgICAg
InNvdXJjZSI6IG51bGwsCisgICAgICAgICAgICAgICJzdGFydCI6IHsKKyAgICAgICAgICAgICAg
ICAibGluZSI6IDExLAorICAgICAgICAgICAgICAgICJjb2x1bW4iOiAxNAorICAgICAgICAgICAg
ICB9LAorICAgICAgICAgICAgICAiZW5kIjogeworICAgICAgICAgICAgICAgICJsaW5lIjogMTEs
CisgICAgICAgICAgICAgICAgImNvbHVtbiI6IDYwCisgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0sCisgICAgICAgICAgICAibW9kdWxlTmFtZSI6ICJ0b2RvbXZjL3RlbXBsYXRlcy9hcHBs
aWNhdGlvbi5oYnMiCisgICAgICAgICAgfSwKKyAgICAgICAgICBpc0VtcHR5OiBmYWxzZSwKKyAg
ICAgICAgICBhcml0eTogMCwKKyAgICAgICAgICBjYWNoZWRGcmFnbWVudDogbnVsbCwKKyAgICAg
ICAgICBoYXNSZW5kZXJlZDogZmFsc2UsCisgICAgICAgICAgYnVpbGRGcmFnbWVudDogZnVuY3Rp
b24gYnVpbGRGcmFnbWVudChkb20pIHsKKyAgICAgICAgICAgIHZhciBlbDAgPSBkb20uY3JlYXRl
RG9jdW1lbnRGcmFnbWVudCgpOworICAgICAgICAgICAgdmFyIGVsMSA9IGRvbS5jcmVhdGVUZXh0
Tm9kZSgiQWxsIik7CisgICAgICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwwLCBlbDEpOworICAg
ICAgICAgICAgcmV0dXJuIGVsMDsKKyAgICAgICAgICB9LAorICAgICAgICAgIGJ1aWxkUmVuZGVy
Tm9kZXM6IGZ1bmN0aW9uIGJ1aWxkUmVuZGVyTm9kZXMoKSB7CisgICAgICAgICAgICByZXR1cm4g
W107CisgICAgICAgICAgfSwKKyAgICAgICAgICBzdGF0ZW1lbnRzOiBbXSwKKyAgICAgICAgICBs
b2NhbHM6IFtdLAorICAgICAgICAgIHRlbXBsYXRlczogW10KKyAgICAgICAgfTsKKyAgICAgIH0p
KCk7CisgICAgICB2YXIgY2hpbGQxID0gKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICBtZXRhOiB7CisgICAgICAgICAgICAiZnJhZ21lbnRSZWFzb24iOiBmYWxzZSwK
KyAgICAgICAgICAgICJyZXZpc2lvbiI6ICJFbWJlckAyLjYuMiIsCisgICAgICAgICAgICAibG9j
IjogeworICAgICAgICAgICAgICAic291cmNlIjogbnVsbCwKKyAgICAgICAgICAgICAgInN0YXJ0
IjogeworICAgICAgICAgICAgICAgICJsaW5lIjogMTIsCisgICAgICAgICAgICAgICAgImNvbHVt
biI6IDE0CisgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICJlbmQiOiB7CisgICAgICAg
ICAgICAgICAgImxpbmUiOiAxMiwKKyAgICAgICAgICAgICAgICAiY29sdW1uIjogNjQKKyAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJtb2R1bGVOYW1lIjogInRv
ZG9tdmMvdGVtcGxhdGVzL2FwcGxpY2F0aW9uLmhicyIKKyAgICAgICAgICB9LAorICAgICAgICAg
IGlzRW1wdHk6IGZhbHNlLAorICAgICAgICAgIGFyaXR5OiAwLAorICAgICAgICAgIGNhY2hlZEZy
YWdtZW50OiBudWxsLAorICAgICAgICAgIGhhc1JlbmRlcmVkOiBmYWxzZSwKKyAgICAgICAgICBi
dWlsZEZyYWdtZW50OiBmdW5jdGlvbiBidWlsZEZyYWdtZW50KGRvbSkgeworICAgICAgICAgICAg
dmFyIGVsMCA9IGRvbS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisgICAgICAgICAgICB2YXIg
ZWwxID0gZG9tLmNyZWF0ZVRleHROb2RlKCJBY3RpdmUiKTsKKyAgICAgICAgICAgIGRvbS5hcHBl
bmRDaGlsZChlbDAsIGVsMSk7CisgICAgICAgICAgICByZXR1cm4gZWwwOworICAgICAgICAgIH0s
CisgICAgICAgICAgYnVpbGRSZW5kZXJOb2RlczogZnVuY3Rpb24gYnVpbGRSZW5kZXJOb2Rlcygp
IHsKKyAgICAgICAgICAgIHJldHVybiBbXTsKKyAgICAgICAgICB9LAorICAgICAgICAgIHN0YXRl
bWVudHM6IFtdLAorICAgICAgICAgIGxvY2FsczogW10sCisgICAgICAgICAgdGVtcGxhdGVzOiBb
XQorICAgICAgICB9OworICAgICAgfSkoKTsKKyAgICAgIHZhciBjaGlsZDIgPSAoZnVuY3Rpb24g
KCkgeworICAgICAgICByZXR1cm4geworICAgICAgICAgIG1ldGE6IHsKKyAgICAgICAgICAgICJm
cmFnbWVudFJlYXNvbiI6IGZhbHNlLAorICAgICAgICAgICAgInJldmlzaW9uIjogIkVtYmVyQDIu
Ni4yIiwKKyAgICAgICAgICAgICJsb2MiOiB7CisgICAgICAgICAgICAgICJzb3VyY2UiOiBudWxs
LAorICAgICAgICAgICAgICAic3RhcnQiOiB7CisgICAgICAgICAgICAgICAgImxpbmUiOiAxMywK
KyAgICAgICAgICAgICAgICAiY29sdW1uIjogMTQKKyAgICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgICAgImVuZCI6IHsKKyAgICAgICAgICAgICAgICAibGluZSI6IDEzLAorICAgICAgICAgICAg
ICAgICJjb2x1bW4iOiA3MAorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAg
ICAgICAgIm1vZHVsZU5hbWUiOiAidG9kb212Yy90ZW1wbGF0ZXMvYXBwbGljYXRpb24uaGJzIgor
ICAgICAgICAgIH0sCisgICAgICAgICAgaXNFbXB0eTogZmFsc2UsCisgICAgICAgICAgYXJpdHk6
IDAsCisgICAgICAgICAgY2FjaGVkRnJhZ21lbnQ6IG51bGwsCisgICAgICAgICAgaGFzUmVuZGVy
ZWQ6IGZhbHNlLAorICAgICAgICAgIGJ1aWxkRnJhZ21lbnQ6IGZ1bmN0aW9uIGJ1aWxkRnJhZ21l
bnQoZG9tKSB7CisgICAgICAgICAgICB2YXIgZWwwID0gZG9tLmNyZWF0ZURvY3VtZW50RnJhZ21l
bnQoKTsKKyAgICAgICAgICAgIHZhciBlbDEgPSBkb20uY3JlYXRlVGV4dE5vZGUoIkNvbXBsZXRl
ZCIpOworICAgICAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVsMCwgZWwxKTsKKyAgICAgICAgICAg
IHJldHVybiBlbDA7CisgICAgICAgICAgfSwKKyAgICAgICAgICBidWlsZFJlbmRlck5vZGVzOiBm
dW5jdGlvbiBidWlsZFJlbmRlck5vZGVzKCkgeworICAgICAgICAgICAgcmV0dXJuIFtdOworICAg
ICAgICAgIH0sCisgICAgICAgICAgc3RhdGVtZW50czogW10sCisgICAgICAgICAgbG9jYWxzOiBb
XSwKKyAgICAgICAgICB0ZW1wbGF0ZXM6IFtdCisgICAgICAgIH07CisgICAgICB9KSgpOworICAg
ICAgdmFyIGNoaWxkMyA9IChmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB7CisgICAgICAg
ICAgbWV0YTogeworICAgICAgICAgICAgImZyYWdtZW50UmVhc29uIjogZmFsc2UsCisgICAgICAg
ICAgICAicmV2aXNpb24iOiAiRW1iZXJAMi42LjIiLAorICAgICAgICAgICAgImxvYyI6IHsKKyAg
ICAgICAgICAgICAgInNvdXJjZSI6IG51bGwsCisgICAgICAgICAgICAgICJzdGFydCI6IHsKKyAg
ICAgICAgICAgICAgICAibGluZSI6IDE1LAorICAgICAgICAgICAgICAgICJjb2x1bW4iOiA4Cisg
ICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICJlbmQiOiB7CisgICAgICAgICAgICAgICAg
ImxpbmUiOiAxNywKKyAgICAgICAgICAgICAgICAiY29sdW1uIjogOAorICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgIm1vZHVsZU5hbWUiOiAidG9kb212Yy90ZW1w
bGF0ZXMvYXBwbGljYXRpb24uaGJzIgorICAgICAgICAgIH0sCisgICAgICAgICAgaXNFbXB0eTog
ZmFsc2UsCisgICAgICAgICAgYXJpdHk6IDAsCisgICAgICAgICAgY2FjaGVkRnJhZ21lbnQ6IG51
bGwsCisgICAgICAgICAgaGFzUmVuZGVyZWQ6IGZhbHNlLAorICAgICAgICAgIGJ1aWxkRnJhZ21l
bnQ6IGZ1bmN0aW9uIGJ1aWxkRnJhZ21lbnQoZG9tKSB7CisgICAgICAgICAgICB2YXIgZWwwID0g
ZG9tLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKyAgICAgICAgICAgIHZhciBlbDEgPSBkb20u
Y3JlYXRlVGV4dE5vZGUoIiAgICAgICAgICAiKTsKKyAgICAgICAgICAgIGRvbS5hcHBlbmRDaGls
ZChlbDAsIGVsMSk7CisgICAgICAgICAgICB2YXIgZWwxID0gZG9tLmNyZWF0ZUVsZW1lbnQoImJ1
dHRvbiIpOworICAgICAgICAgICAgZG9tLnNldEF0dHJpYnV0ZShlbDEsICJpZCIsICJjbGVhci1j
b21wbGV0ZWQiKTsKKyAgICAgICAgICAgIHZhciBlbDIgPSBkb20uY3JlYXRlVGV4dE5vZGUoIkNs
ZWFyIGNvbXBsZXRlZCIpOworICAgICAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVsMSwgZWwyKTsK
KyAgICAgICAgICAgIGRvbS5hcHBlbmRDaGlsZChlbDAsIGVsMSk7CisgICAgICAgICAgICB2YXIg
ZWwxID0gZG9tLmNyZWF0ZVRleHROb2RlKCJcbiIpOworICAgICAgICAgICAgZG9tLmFwcGVuZENo
aWxkKGVsMCwgZWwxKTsKKyAgICAgICAgICAgIHJldHVybiBlbDA7CisgICAgICAgICAgfSwKKyAg
ICAgICAgICBidWlsZFJlbmRlck5vZGVzOiBmdW5jdGlvbiBidWlsZFJlbmRlck5vZGVzKGRvbSwg
ZnJhZ21lbnQsIGNvbnRleHR1YWxFbGVtZW50KSB7CisgICAgICAgICAgICB2YXIgZWxlbWVudDAg
PSBkb20uY2hpbGRBdChmcmFnbWVudCwgWzFdKTsKKyAgICAgICAgICAgIHZhciBtb3JwaHMgPSBu
ZXcgQXJyYXkoMSk7CisgICAgICAgICAgICBtb3JwaHNbMF0gPSBkb20uY3JlYXRlQXR0ck1vcnBo
KGVsZW1lbnQwLCAnb25jbGljaycpOworICAgICAgICAgICAgcmV0dXJuIG1vcnBoczsKKyAgICAg
ICAgICB9LAorICAgICAgICAgIHN0YXRlbWVudHM6IFtbImF0dHJpYnV0ZSIsICJvbmNsaWNrIiwg
WyJzdWJleHByIiwgImFjdGlvbiIsIFsiY2xlYXJDb21wbGV0ZWQiXSwgW10sIFsibG9jIiwgW251
bGwsIFsxNiwgNDddLCBbMTYsIDc0XV1dXV1dLAorICAgICAgICAgIGxvY2FsczogW10sCisgICAg
ICAgICAgdGVtcGxhdGVzOiBbXQorICAgICAgICB9OworICAgICAgfSkoKTsKKyAgICAgIHJldHVy
biB7CisgICAgICAgIG1ldGE6IHsKKyAgICAgICAgICAiZnJhZ21lbnRSZWFzb24iOiBmYWxzZSwK
KyAgICAgICAgICAicmV2aXNpb24iOiAiRW1iZXJAMi42LjIiLAorICAgICAgICAgICJsb2MiOiB7
CisgICAgICAgICAgICAic291cmNlIjogbnVsbCwKKyAgICAgICAgICAgICJzdGFydCI6IHsKKyAg
ICAgICAgICAgICAgImxpbmUiOiA3LAorICAgICAgICAgICAgICAiY29sdW1uIjogNAorICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgICJlbmQiOiB7CisgICAgICAgICAgICAgICJsaW5lIjogMTks
CisgICAgICAgICAgICAgICJjb2x1bW4iOiA0CisgICAgICAgICAgICB9CisgICAgICAgICAgfSwK
KyAgICAgICAgICAibW9kdWxlTmFtZSI6ICJ0b2RvbXZjL3RlbXBsYXRlcy9hcHBsaWNhdGlvbi5o
YnMiCisgICAgICAgIH0sCisgICAgICAgIGlzRW1wdHk6IGZhbHNlLAorICAgICAgICBhcml0eTog
MCwKKyAgICAgICAgY2FjaGVkRnJhZ21lbnQ6IG51bGwsCisgICAgICAgIGhhc1JlbmRlcmVkOiBm
YWxzZSwKKyAgICAgICAgYnVpbGRGcmFnbWVudDogZnVuY3Rpb24gYnVpbGRGcmFnbWVudChkb20p
IHsKKyAgICAgICAgICB2YXIgZWwwID0gZG9tLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKyAg
ICAgICAgICB2YXIgZWwxID0gZG9tLmNyZWF0ZVRleHROb2RlKCIgICAgICAiKTsKKyAgICAgICAg
ICBkb20uYXBwZW5kQ2hpbGQoZWwwLCBlbDEpOworICAgICAgICAgIHZhciBlbDEgPSBkb20uY3Jl
YXRlRWxlbWVudCgiZm9vdGVyIik7CisgICAgICAgICAgZG9tLnNldEF0dHJpYnV0ZShlbDEsICJp
ZCIsICJmb290ZXIiKTsKKyAgICAgICAgICB2YXIgZWwyID0gZG9tLmNyZWF0ZVRleHROb2RlKCJc
biAgICAgICAgIik7CisgICAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVsMSwgZWwyKTsKKyAgICAg
ICAgICB2YXIgZWwyID0gZG9tLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICAgICAgICBkb20u
c2V0QXR0cmlidXRlKGVsMiwgImlkIiwgInRvZG8tY291bnQiKTsKKyAgICAgICAgICB2YXIgZWwz
ID0gZG9tLmNyZWF0ZUVsZW1lbnQoInN0cm9uZyIpOworICAgICAgICAgIHZhciBlbDQgPSBkb20u
Y3JlYXRlQ29tbWVudCgiIik7CisgICAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVsMywgZWw0KTsK
KyAgICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwyLCBlbDMpOworICAgICAgICAgIHZhciBlbDMg
PSBkb20uY3JlYXRlVGV4dE5vZGUoIiAiKTsKKyAgICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwy
LCBlbDMpOworICAgICAgICAgIHZhciBlbDMgPSBkb20uY3JlYXRlQ29tbWVudCgiIik7CisgICAg
ICAgICAgZG9tLmFwcGVuZENoaWxkKGVsMiwgZWwzKTsKKyAgICAgICAgICB2YXIgZWwzID0gZG9t
LmNyZWF0ZVRleHROb2RlKCIgbGVmdCIpOworICAgICAgICAgIGRvbS5hcHBlbmRDaGlsZChlbDIs
IGVsMyk7CisgICAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVsMSwgZWwyKTsKKyAgICAgICAgICB2
YXIgZWwyID0gZG9tLmNyZWF0ZVRleHROb2RlKCJcbiAgICAgICAgIik7CisgICAgICAgICAgZG9t
LmFwcGVuZENoaWxkKGVsMSwgZWwyKTsKKyAgICAgICAgICB2YXIgZWwyID0gZG9tLmNyZWF0ZUVs
ZW1lbnQoInVsIik7CisgICAgICAgICAgZG9tLnNldEF0dHJpYnV0ZShlbDIsICJpZCIsICJmaWx0
ZXJzIik7CisgICAgICAgICAgdmFyIGVsMyA9IGRvbS5jcmVhdGVUZXh0Tm9kZSgiXG4gICAgICAg
ICAgIik7CisgICAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVsMiwgZWwzKTsKKyAgICAgICAgICB2
YXIgZWwzID0gZG9tLmNyZWF0ZUVsZW1lbnQoImxpIik7CisgICAgICAgICAgdmFyIGVsNCA9IGRv
bS5jcmVhdGVDb21tZW50KCIiKTsKKyAgICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwzLCBlbDQp
OworICAgICAgICAgIGRvbS5hcHBlbmRDaGlsZChlbDIsIGVsMyk7CisgICAgICAgICAgdmFyIGVs
MyA9IGRvbS5jcmVhdGVUZXh0Tm9kZSgiXG4gICAgICAgICAgIik7CisgICAgICAgICAgZG9tLmFw
cGVuZENoaWxkKGVsMiwgZWwzKTsKKyAgICAgICAgICB2YXIgZWwzID0gZG9tLmNyZWF0ZUVsZW1l
bnQoImxpIik7CisgICAgICAgICAgdmFyIGVsNCA9IGRvbS5jcmVhdGVDb21tZW50KCIiKTsKKyAg
ICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwzLCBlbDQpOworICAgICAgICAgIGRvbS5hcHBlbmRD
aGlsZChlbDIsIGVsMyk7CisgICAgICAgICAgdmFyIGVsMyA9IGRvbS5jcmVhdGVUZXh0Tm9kZSgi
XG4gICAgICAgICAgIik7CisgICAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVsMiwgZWwzKTsKKyAg
ICAgICAgICB2YXIgZWwzID0gZG9tLmNyZWF0ZUVsZW1lbnQoImxpIik7CisgICAgICAgICAgdmFy
IGVsNCA9IGRvbS5jcmVhdGVDb21tZW50KCIiKTsKKyAgICAgICAgICBkb20uYXBwZW5kQ2hpbGQo
ZWwzLCBlbDQpOworICAgICAgICAgIGRvbS5hcHBlbmRDaGlsZChlbDIsIGVsMyk7CisgICAgICAg
ICAgdmFyIGVsMyA9IGRvbS5jcmVhdGVUZXh0Tm9kZSgiXG4gICAgICAgICIpOworICAgICAgICAg
IGRvbS5hcHBlbmRDaGlsZChlbDIsIGVsMyk7CisgICAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVs
MSwgZWwyKTsKKyAgICAgICAgICB2YXIgZWwyID0gZG9tLmNyZWF0ZVRleHROb2RlKCJcbiIpOwor
ICAgICAgICAgIGRvbS5hcHBlbmRDaGlsZChlbDEsIGVsMik7CisgICAgICAgICAgdmFyIGVsMiA9
IGRvbS5jcmVhdGVDb21tZW50KCIiKTsKKyAgICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwxLCBl
bDIpOworICAgICAgICAgIHZhciBlbDIgPSBkb20uY3JlYXRlVGV4dE5vZGUoIiAgICAgICIpOwor
ICAgICAgICAgIGRvbS5hcHBlbmRDaGlsZChlbDEsIGVsMik7CisgICAgICAgICAgZG9tLmFwcGVu
ZENoaWxkKGVsMCwgZWwxKTsKKyAgICAgICAgICB2YXIgZWwxID0gZG9tLmNyZWF0ZVRleHROb2Rl
KCJcbiIpOworICAgICAgICAgIGRvbS5hcHBlbmRDaGlsZChlbDAsIGVsMSk7CisgICAgICAgICAg
cmV0dXJuIGVsMDsKKyAgICAgICAgfSwKKyAgICAgICAgYnVpbGRSZW5kZXJOb2RlczogZnVuY3Rp
b24gYnVpbGRSZW5kZXJOb2Rlcyhkb20sIGZyYWdtZW50LCBjb250ZXh0dWFsRWxlbWVudCkgewor
ICAgICAgICAgIHZhciBlbGVtZW50MSA9IGRvbS5jaGlsZEF0KGZyYWdtZW50LCBbMV0pOworICAg
ICAgICAgIHZhciBlbGVtZW50MiA9IGRvbS5jaGlsZEF0KGVsZW1lbnQxLCBbMV0pOworICAgICAg
ICAgIHZhciBlbGVtZW50MyA9IGRvbS5jaGlsZEF0KGVsZW1lbnQxLCBbM10pOworICAgICAgICAg
IHZhciBtb3JwaHMgPSBuZXcgQXJyYXkoNik7CisgICAgICAgICAgbW9ycGhzWzBdID0gZG9tLmNy
ZWF0ZU1vcnBoQXQoZG9tLmNoaWxkQXQoZWxlbWVudDIsIFswXSksIDAsIDApOworICAgICAgICAg
IG1vcnBoc1sxXSA9IGRvbS5jcmVhdGVNb3JwaEF0KGVsZW1lbnQyLCAyLCAyKTsKKyAgICAgICAg
ICBtb3JwaHNbMl0gPSBkb20uY3JlYXRlTW9ycGhBdChkb20uY2hpbGRBdChlbGVtZW50MywgWzFd
KSwgMCwgMCk7CisgICAgICAgICAgbW9ycGhzWzNdID0gZG9tLmNyZWF0ZU1vcnBoQXQoZG9tLmNo
aWxkQXQoZWxlbWVudDMsIFszXSksIDAsIDApOworICAgICAgICAgIG1vcnBoc1s0XSA9IGRvbS5j
cmVhdGVNb3JwaEF0KGRvbS5jaGlsZEF0KGVsZW1lbnQzLCBbNV0pLCAwLCAwKTsKKyAgICAgICAg
ICBtb3JwaHNbNV0gPSBkb20uY3JlYXRlTW9ycGhBdChlbGVtZW50MSwgNSwgNSk7CisgICAgICAg
ICAgcmV0dXJuIG1vcnBoczsKKyAgICAgICAgfSwKKyAgICAgICAgc3RhdGVtZW50czogW1siY29u
dGVudCIsICJyZW1haW5pbmcubGVuZ3RoIiwgWyJsb2MiLCBbbnVsbCwgWzksIDM4XSwgWzksIDU4
XV1dXSwgWyJpbmxpbmUiLCAicGx1cmFsaXplIiwgWyJpdGVtIiwgWyJnZXQiLCAicmVtYWluaW5n
Lmxlbmd0aCIsIFsibG9jIiwgW251bGwsIFs5LCA4N10sIFs5LCAxMDNdXV1dXSwgW10sIFsibG9j
IiwgW251bGwsIFs5LCA2OF0sIFs5LCAxMDVdXV1dLCBbImJsb2NrIiwgImxpbmstdG8iLCBbImlu
ZGV4Il0sIFsiYWN0aXZlQ2xhc3MiLCAic2VsZWN0ZWQiXSwgMCwgbnVsbCwgWyJsb2MiLCBbbnVs
bCwgWzExLCAxNF0sIFsxMSwgNzJdXV1dLCBbImJsb2NrIiwgImxpbmstdG8iLCBbImFjdGl2ZSJd
LCBbImFjdGl2ZUNsYXNzIiwgInNlbGVjdGVkIl0sIDEsIG51bGwsIFsibG9jIiwgW251bGwsIFsx
MiwgMTRdLCBbMTIsIDc2XV1dXSwgWyJibG9jayIsICJsaW5rLXRvIiwgWyJjb21wbGV0ZWQiXSwg
WyJhY3RpdmVDbGFzcyIsICJzZWxlY3RlZCJdLCAyLCBudWxsLCBbImxvYyIsIFtudWxsLCBbMTMs
IDE0XSwgWzEzLCA4Ml1dXV0sIFsiYmxvY2siLCAiaWYiLCBbWyJnZXQiLCAiY29tcGxldGVkLmxl
bmd0aCIsIFsibG9jIiwgW251bGwsIFsxNSwgMTRdLCBbMTUsIDMwXV1dXV0sIFtdLCAzLCBudWxs
LCBbImxvYyIsIFtudWxsLCBbMTUsIDhdLCBbMTcsIDE1XV1dXV0sCisgICAgICAgIGxvY2Fsczog
W10sCisgICAgICAgIHRlbXBsYXRlczogW2NoaWxkMCwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkM10K
KyAgICAgIH07CisgICAgfSkoKTsKKyAgICByZXR1cm4geworICAgICAgbWV0YTogeworICAgICAg
ICAiZnJhZ21lbnRSZWFzb24iOiB7CisgICAgICAgICAgIm5hbWUiOiAibWlzc2luZy13cmFwcGVy
IiwKKyAgICAgICAgICAicHJvYmxlbXMiOiBbIm11bHRpcGxlLW5vZGVzIl0KKyAgICAgICAgfSwK
KyAgICAgICAgInJldmlzaW9uIjogIkVtYmVyQDIuNi4yIiwKKyAgICAgICAgImxvYyI6IHsKKyAg
ICAgICAgICAic291cmNlIjogbnVsbCwKKyAgICAgICAgICAic3RhcnQiOiB7CisgICAgICAgICAg
ICAibGluZSI6IDEsCisgICAgICAgICAgICAiY29sdW1uIjogMAorICAgICAgICAgIH0sCisgICAg
ICAgICAgImVuZCI6IHsKKyAgICAgICAgICAgICJsaW5lIjogMjksCisgICAgICAgICAgICAiY29s
dW1uIjogOQorICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgIm1vZHVsZU5hbWUiOiAi
dG9kb212Yy90ZW1wbGF0ZXMvYXBwbGljYXRpb24uaGJzIgorICAgICAgfSwKKyAgICAgIGlzRW1w
dHk6IGZhbHNlLAorICAgICAgYXJpdHk6IDAsCisgICAgICBjYWNoZWRGcmFnbWVudDogbnVsbCwK
KyAgICAgIGhhc1JlbmRlcmVkOiBmYWxzZSwKKyAgICAgIGJ1aWxkRnJhZ21lbnQ6IGZ1bmN0aW9u
IGJ1aWxkRnJhZ21lbnQoZG9tKSB7CisgICAgICAgIHZhciBlbDAgPSBkb20uY3JlYXRlRG9jdW1l
bnRGcmFnbWVudCgpOworICAgICAgICB2YXIgZWwxID0gZG9tLmNyZWF0ZUVsZW1lbnQoInNlY3Rp
b24iKTsKKyAgICAgICAgZG9tLnNldEF0dHJpYnV0ZShlbDEsICJpZCIsICJ0b2RvYXBwIik7Cisg
ICAgICAgIHZhciBlbDIgPSBkb20uY3JlYXRlVGV4dE5vZGUoIlxuICAiKTsKKyAgICAgICAgZG9t
LmFwcGVuZENoaWxkKGVsMSwgZWwyKTsKKyAgICAgICAgdmFyIGVsMiA9IGRvbS5jcmVhdGVFbGVt
ZW50KCJoZWFkZXIiKTsKKyAgICAgICAgZG9tLnNldEF0dHJpYnV0ZShlbDIsICJpZCIsICJoZWFk
ZXIiKTsKKyAgICAgICAgdmFyIGVsMyA9IGRvbS5jcmVhdGVUZXh0Tm9kZSgiXG4gICAgIik7Cisg
ICAgICAgIGRvbS5hcHBlbmRDaGlsZChlbDIsIGVsMyk7CisgICAgICAgIHZhciBlbDMgPSBkb20u
Y3JlYXRlRWxlbWVudCgiaDEiKTsKKyAgICAgICAgdmFyIGVsNCA9IGRvbS5jcmVhdGVUZXh0Tm9k
ZSgidG9kb3MiKTsKKyAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVsMywgZWw0KTsKKyAgICAgICAg
ZG9tLmFwcGVuZENoaWxkKGVsMiwgZWwzKTsKKyAgICAgICAgdmFyIGVsMyA9IGRvbS5jcmVhdGVU
ZXh0Tm9kZSgiXG4gICAgIik7CisgICAgICAgIGRvbS5hcHBlbmRDaGlsZChlbDIsIGVsMyk7Cisg
ICAgICAgIHZhciBlbDMgPSBkb20uY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKKyAgICAgICAgZG9t
LnNldEF0dHJpYnV0ZShlbDMsICJ0eXBlIiwgInRleHQiKTsKKyAgICAgICAgZG9tLnNldEF0dHJp
YnV0ZShlbDMsICJpZCIsICJuZXctdG9kbyIpOworICAgICAgICBkb20uc2V0QXR0cmlidXRlKGVs
MywgInBsYWNlaG9sZGVyIiwgIldoYXQgbmVlZHMgdG8gYmUgZG9uZT8iKTsKKyAgICAgICAgZG9t
LnNldEF0dHJpYnV0ZShlbDMsICJhdXRvZm9jdXMiLCAiIik7CisgICAgICAgIGRvbS5hcHBlbmRD
aGlsZChlbDIsIGVsMyk7CisgICAgICAgIHZhciBlbDMgPSBkb20uY3JlYXRlVGV4dE5vZGUoIlxu
ICAiKTsKKyAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVsMiwgZWwzKTsKKyAgICAgICAgZG9tLmFw
cGVuZENoaWxkKGVsMSwgZWwyKTsKKyAgICAgICAgdmFyIGVsMiA9IGRvbS5jcmVhdGVUZXh0Tm9k
ZSgiXG4gICAgIik7CisgICAgICAgIGRvbS5hcHBlbmRDaGlsZChlbDEsIGVsMik7CisgICAgICAg
IHZhciBlbDIgPSBkb20uY3JlYXRlQ29tbWVudCgiIik7CisgICAgICAgIGRvbS5hcHBlbmRDaGls
ZChlbDEsIGVsMik7CisgICAgICAgIHZhciBlbDIgPSBkb20uY3JlYXRlVGV4dE5vZGUoIlxuIik7
CisgICAgICAgIGRvbS5hcHBlbmRDaGlsZChlbDEsIGVsMik7CisgICAgICAgIHZhciBlbDIgPSBk
b20uY3JlYXRlQ29tbWVudCgiIik7CisgICAgICAgIGRvbS5hcHBlbmRDaGlsZChlbDEsIGVsMik7
CisgICAgICAgIGRvbS5hcHBlbmRDaGlsZChlbDAsIGVsMSk7CisgICAgICAgIHZhciBlbDEgPSBk
b20uY3JlYXRlVGV4dE5vZGUoIlxuIik7CisgICAgICAgIGRvbS5hcHBlbmRDaGlsZChlbDAsIGVs
MSk7CisgICAgICAgIHZhciBlbDEgPSBkb20uY3JlYXRlRWxlbWVudCgiZm9vdGVyIik7CisgICAg
ICAgIGRvbS5zZXRBdHRyaWJ1dGUoZWwxLCAiaWQiLCAiaW5mbyIpOworICAgICAgICB2YXIgZWwy
ID0gZG9tLmNyZWF0ZVRleHROb2RlKCJcbiAgIik7CisgICAgICAgIGRvbS5hcHBlbmRDaGlsZChl
bDEsIGVsMik7CisgICAgICAgIHZhciBlbDIgPSBkb20uY3JlYXRlRWxlbWVudCgicCIpOworICAg
ICAgICB2YXIgZWwzID0gZG9tLmNyZWF0ZVRleHROb2RlKCJEb3VibGUtY2xpY2sgdG8gZWRpdCBh
IHRvZG8iKTsKKyAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVsMiwgZWwzKTsKKyAgICAgICAgZG9t
LmFwcGVuZENoaWxkKGVsMSwgZWwyKTsKKyAgICAgICAgdmFyIGVsMiA9IGRvbS5jcmVhdGVUZXh0
Tm9kZSgiXG4gICIpOworICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwxLCBlbDIpOworICAgICAg
ICB2YXIgZWwyID0gZG9tLmNyZWF0ZUVsZW1lbnQoInAiKTsKKyAgICAgICAgdmFyIGVsMyA9IGRv
bS5jcmVhdGVUZXh0Tm9kZSgiXG4gICAgQ3JlYXRlZCBieVxuICAgICIpOworICAgICAgICBkb20u
YXBwZW5kQ2hpbGQoZWwyLCBlbDMpOworICAgICAgICB2YXIgZWwzID0gZG9tLmNyZWF0ZUVsZW1l
bnQoImEiKTsKKyAgICAgICAgZG9tLnNldEF0dHJpYnV0ZShlbDMsICJocmVmIiwgImh0dHA6Ly9n
aXRodWIuY29tL2NpYmVybm94Iik7CisgICAgICAgIHZhciBlbDQgPSBkb20uY3JlYXRlVGV4dE5v
ZGUoIk1pZ3VlbCBDYW1iYSIpOworICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwzLCBlbDQpOwor
ICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwyLCBlbDMpOworICAgICAgICB2YXIgZWwzID0gZG9t
LmNyZWF0ZVRleHROb2RlKCIsXG4gICAgIik7CisgICAgICAgIGRvbS5hcHBlbmRDaGlsZChlbDIs
IGVsMyk7CisgICAgICAgIHZhciBlbDMgPSBkb20uY3JlYXRlRWxlbWVudCgiYSIpOworICAgICAg
ICBkb20uc2V0QXR0cmlidXRlKGVsMywgImhyZWYiLCAiaHR0cDovL2dpdGh1Yi5jb20vYWRkeW9z
bWFuaSIpOworICAgICAgICB2YXIgZWw0ID0gZG9tLmNyZWF0ZVRleHROb2RlKCJBZGR5IE9zbWFu
aSIpOworICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwzLCBlbDQpOworICAgICAgICBkb20uYXBw
ZW5kQ2hpbGQoZWwyLCBlbDMpOworICAgICAgICB2YXIgZWwzID0gZG9tLmNyZWF0ZVRleHROb2Rl
KCJcbiAgIik7CisgICAgICAgIGRvbS5hcHBlbmRDaGlsZChlbDIsIGVsMyk7CisgICAgICAgIGRv
bS5hcHBlbmRDaGlsZChlbDEsIGVsMik7CisgICAgICAgIHZhciBlbDIgPSBkb20uY3JlYXRlVGV4
dE5vZGUoIlxuICAiKTsKKyAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVsMSwgZWwyKTsKKyAgICAg
ICAgdmFyIGVsMiA9IGRvbS5jcmVhdGVFbGVtZW50KCJwIik7CisgICAgICAgIHZhciBlbDMgPSBk
b20uY3JlYXRlVGV4dE5vZGUoIlBhcnQgb2YgIik7CisgICAgICAgIGRvbS5hcHBlbmRDaGlsZChl
bDIsIGVsMyk7CisgICAgICAgIHZhciBlbDMgPSBkb20uY3JlYXRlRWxlbWVudCgiYSIpOworICAg
ICAgICBkb20uc2V0QXR0cmlidXRlKGVsMywgImhyZWYiLCAiaHR0cDovL3RvZG9tdmMuY29tIik7
CisgICAgICAgIHZhciBlbDQgPSBkb20uY3JlYXRlVGV4dE5vZGUoIlRvZG9NVkMiKTsKKyAgICAg
ICAgZG9tLmFwcGVuZENoaWxkKGVsMywgZWw0KTsKKyAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVs
MiwgZWwzKTsKKyAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVsMSwgZWwyKTsKKyAgICAgICAgdmFy
IGVsMiA9IGRvbS5jcmVhdGVUZXh0Tm9kZSgiXG4iKTsKKyAgICAgICAgZG9tLmFwcGVuZENoaWxk
KGVsMSwgZWwyKTsKKyAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVsMCwgZWwxKTsKKyAgICAgICAg
cmV0dXJuIGVsMDsKKyAgICAgIH0sCisgICAgICBidWlsZFJlbmRlck5vZGVzOiBmdW5jdGlvbiBi
dWlsZFJlbmRlck5vZGVzKGRvbSwgZnJhZ21lbnQsIGNvbnRleHR1YWxFbGVtZW50KSB7CisgICAg
ICAgIHZhciBlbGVtZW50NCA9IGRvbS5jaGlsZEF0KGZyYWdtZW50LCBbMF0pOworICAgICAgICB2
YXIgZWxlbWVudDUgPSBkb20uY2hpbGRBdChlbGVtZW50NCwgWzEsIDNdKTsKKyAgICAgICAgdmFy
IG1vcnBocyA9IG5ldyBBcnJheSgzKTsKKyAgICAgICAgbW9ycGhzWzBdID0gZG9tLmNyZWF0ZUF0
dHJNb3JwaChlbGVtZW50NSwgJ29ua2V5ZG93bicpOworICAgICAgICBtb3JwaHNbMV0gPSBkb20u
Y3JlYXRlTW9ycGhBdChlbGVtZW50NCwgMywgMyk7CisgICAgICAgIG1vcnBoc1syXSA9IGRvbS5j
cmVhdGVNb3JwaEF0KGVsZW1lbnQ0LCA1LCA1KTsKKyAgICAgICAgcmV0dXJuIG1vcnBoczsKKyAg
ICAgIH0sCisgICAgICBzdGF0ZW1lbnRzOiBbWyJhdHRyaWJ1dGUiLCAib25rZXlkb3duIiwgWyJz
dWJleHByIiwgImFjdGlvbiIsIFsiY3JlYXRlVG9kbyJdLCBbXSwgWyJsb2MiLCBbbnVsbCwgWzQs
IDQ3XSwgWzQsIDcwXV1dXV0sIFsiY29udGVudCIsICJvdXRsZXQiLCBbImxvYyIsIFtudWxsLCBb
NiwgNF0sIFs2LCAxNF1dXV0sIFsiYmxvY2siLCAiaWYiLCBbWyJzdWJleHByIiwgImd0IiwgW1si
Z2V0IiwgIm1vZGVsLmxlbmd0aCIsIFsibG9jIiwgW251bGwsIFs3LCAxNF0sIFs3LCAyNl1dXV0s
IDBdLCBbXSwgWyJsb2MiLCBbbnVsbCwgWzcsIDEwXSwgWzcsIDI5XV1dXV0sIFtdLCAwLCBudWxs
LCBbImxvYyIsIFtudWxsLCBbNywgNF0sIFsxOSwgMTFdXV1dXSwKKyAgICAgIGxvY2FsczogW10s
CisgICAgICB0ZW1wbGF0ZXM6IFtjaGlsZDBdCisgICAgfTsKKyAgfSkoKSk7Cit9KTsKK2RlZmlu
ZSgidG9kb212Yy90ZW1wbGF0ZXMvY29tcGxldGVkIiwgWyJleHBvcnRzIl0sIGZ1bmN0aW9uIChl
eHBvcnRzKSB7CisgIGV4cG9ydHNbImRlZmF1bHQiXSA9IEVtYmVyLkhUTUxCYXJzLnRlbXBsYXRl
KChmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuIHsKKyAgICAgIG1ldGE6IHsKKyAgICAgICAgImZy
YWdtZW50UmVhc29uIjogeworICAgICAgICAgICJuYW1lIjogIm1pc3Npbmctd3JhcHBlciIsCisg
ICAgICAgICAgInByb2JsZW1zIjogWyJ3cm9uZy10eXBlIl0KKyAgICAgICAgfSwKKyAgICAgICAg
InJldmlzaW9uIjogIkVtYmVyQDIuNi4yIiwKKyAgICAgICAgImxvYyI6IHsKKyAgICAgICAgICAi
c291cmNlIjogbnVsbCwKKyAgICAgICAgICAic3RhcnQiOiB7CisgICAgICAgICAgICAibGluZSI6
IDEsCisgICAgICAgICAgICAiY29sdW1uIjogMAorICAgICAgICAgIH0sCisgICAgICAgICAgImVu
ZCI6IHsKKyAgICAgICAgICAgICJsaW5lIjogMSwKKyAgICAgICAgICAgICJjb2x1bW4iOiAyNQor
ICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgIm1vZHVsZU5hbWUiOiAidG9kb212Yy90
ZW1wbGF0ZXMvY29tcGxldGVkLmhicyIKKyAgICAgIH0sCisgICAgICBpc0VtcHR5OiBmYWxzZSwK
KyAgICAgIGFyaXR5OiAwLAorICAgICAgY2FjaGVkRnJhZ21lbnQ6IG51bGwsCisgICAgICBoYXNS
ZW5kZXJlZDogZmFsc2UsCisgICAgICBidWlsZEZyYWdtZW50OiBmdW5jdGlvbiBidWlsZEZyYWdt
ZW50KGRvbSkgeworICAgICAgICB2YXIgZWwwID0gZG9tLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQo
KTsKKyAgICAgICAgdmFyIGVsMSA9IGRvbS5jcmVhdGVDb21tZW50KCIiKTsKKyAgICAgICAgZG9t
LmFwcGVuZENoaWxkKGVsMCwgZWwxKTsKKyAgICAgICAgcmV0dXJuIGVsMDsKKyAgICAgIH0sCisg
ICAgICBidWlsZFJlbmRlck5vZGVzOiBmdW5jdGlvbiBidWlsZFJlbmRlck5vZGVzKGRvbSwgZnJh
Z21lbnQsIGNvbnRleHR1YWxFbGVtZW50KSB7CisgICAgICAgIHZhciBtb3JwaHMgPSBuZXcgQXJy
YXkoMSk7CisgICAgICAgIG1vcnBoc1swXSA9IGRvbS5jcmVhdGVNb3JwaEF0KGZyYWdtZW50LCAw
LCAwLCBjb250ZXh0dWFsRWxlbWVudCk7CisgICAgICAgIGRvbS5pbnNlcnRCb3VuZGFyeShmcmFn
bWVudCwgMCk7CisgICAgICAgIGRvbS5pbnNlcnRCb3VuZGFyeShmcmFnbWVudCwgbnVsbCk7Cisg
ICAgICAgIHJldHVybiBtb3JwaHM7CisgICAgICB9LAorICAgICAgc3RhdGVtZW50czogW1siaW5s
aW5lIiwgInRvZG8tbGlzdCIsIFtdLCBbInRvZG9zIiwgWyJzdWJleHByIiwgIkBtdXQiLCBbWyJn
ZXQiLCAidG9kb3MiLCBbImxvYyIsIFtudWxsLCBbMSwgMThdLCBbMSwgMjNdXV1dXSwgW10sIFtd
XV0sIFsibG9jIiwgW251bGwsIFsxLCAwXSwgWzEsIDI1XV1dXV0sCisgICAgICBsb2NhbHM6IFtd
LAorICAgICAgdGVtcGxhdGVzOiBbXQorICAgIH07CisgIH0pKCkpOworfSk7CitkZWZpbmUoInRv
ZG9tdmMvdGVtcGxhdGVzL2NvbXBvbmVudHMvdG9kby1pdGVtIiwgWyJleHBvcnRzIl0sIGZ1bmN0
aW9uIChleHBvcnRzKSB7CisgIGV4cG9ydHNbImRlZmF1bHQiXSA9IEVtYmVyLkhUTUxCYXJzLnRl
bXBsYXRlKChmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuIHsKKyAgICAgIG1ldGE6IHsKKyAgICAg
ICAgImZyYWdtZW50UmVhc29uIjogeworICAgICAgICAgICJuYW1lIjogIm1pc3Npbmctd3JhcHBl
ciIsCisgICAgICAgICAgInByb2JsZW1zIjogWyJtdWx0aXBsZS1ub2RlcyJdCisgICAgICAgIH0s
CisgICAgICAgICJyZXZpc2lvbiI6ICJFbWJlckAyLjYuMiIsCisgICAgICAgICJsb2MiOiB7Cisg
ICAgICAgICAgInNvdXJjZSI6IG51bGwsCisgICAgICAgICAgInN0YXJ0IjogeworICAgICAgICAg
ICAgImxpbmUiOiAxLAorICAgICAgICAgICAgImNvbHVtbiI6IDAKKyAgICAgICAgICB9LAorICAg
ICAgICAgICJlbmQiOiB7CisgICAgICAgICAgICAibGluZSI6IDYsCisgICAgICAgICAgICAiY29s
dW1uIjogMTUzCisgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICAibW9kdWxlTmFtZSI6
ICJ0b2RvbXZjL3RlbXBsYXRlcy9jb21wb25lbnRzL3RvZG8taXRlbS5oYnMiCisgICAgICB9LAor
ICAgICAgaXNFbXB0eTogZmFsc2UsCisgICAgICBhcml0eTogMCwKKyAgICAgIGNhY2hlZEZyYWdt
ZW50OiBudWxsLAorICAgICAgaGFzUmVuZGVyZWQ6IGZhbHNlLAorICAgICAgYnVpbGRGcmFnbWVu
dDogZnVuY3Rpb24gYnVpbGRGcmFnbWVudChkb20pIHsKKyAgICAgICAgdmFyIGVsMCA9IGRvbS5j
cmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisgICAgICAgIHZhciBlbDEgPSBkb20uY3JlYXRlRWxl
bWVudCgiZGl2Iik7CisgICAgICAgIGRvbS5zZXRBdHRyaWJ1dGUoZWwxLCAiY2xhc3MiLCAidmll
dyIpOworICAgICAgICB2YXIgZWwyID0gZG9tLmNyZWF0ZVRleHROb2RlKCJcbiAgIik7CisgICAg
ICAgIGRvbS5hcHBlbmRDaGlsZChlbDEsIGVsMik7CisgICAgICAgIHZhciBlbDIgPSBkb20uY3Jl
YXRlRWxlbWVudCgiaW5wdXQiKTsKKyAgICAgICAgZG9tLnNldEF0dHJpYnV0ZShlbDIsICJ0eXBl
IiwgImNoZWNrYm94Iik7CisgICAgICAgIGRvbS5zZXRBdHRyaWJ1dGUoZWwyLCAiY2xhc3MiLCAi
dG9nZ2xlIik7CisgICAgICAgIGRvbS5hcHBlbmRDaGlsZChlbDEsIGVsMik7CisgICAgICAgIHZh
ciBlbDIgPSBkb20uY3JlYXRlVGV4dE5vZGUoIlxuICAiKTsKKyAgICAgICAgZG9tLmFwcGVuZENo
aWxkKGVsMSwgZWwyKTsKKyAgICAgICAgdmFyIGVsMiA9IGRvbS5jcmVhdGVFbGVtZW50KCJsYWJl
bCIpOworICAgICAgICB2YXIgZWwzID0gZG9tLmNyZWF0ZUNvbW1lbnQoIiIpOworICAgICAgICBk
b20uYXBwZW5kQ2hpbGQoZWwyLCBlbDMpOworICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwxLCBl
bDIpOworICAgICAgICB2YXIgZWwyID0gZG9tLmNyZWF0ZVRleHROb2RlKCJcbiAgIik7CisgICAg
ICAgIGRvbS5hcHBlbmRDaGlsZChlbDEsIGVsMik7CisgICAgICAgIHZhciBlbDIgPSBkb20uY3Jl
YXRlRWxlbWVudCgiYnV0dG9uIik7CisgICAgICAgIGRvbS5zZXRBdHRyaWJ1dGUoZWwyLCAiY2xh
c3MiLCAiZGVzdHJveSIpOworICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwxLCBlbDIpOworICAg
ICAgICB2YXIgZWwyID0gZG9tLmNyZWF0ZVRleHROb2RlKCJcbiIpOworICAgICAgICBkb20uYXBw
ZW5kQ2hpbGQoZWwxLCBlbDIpOworICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwwLCBlbDEpOwor
ICAgICAgICB2YXIgZWwxID0gZG9tLmNyZWF0ZVRleHROb2RlKCJcbiIpOworICAgICAgICBkb20u
YXBwZW5kQ2hpbGQoZWwwLCBlbDEpOworICAgICAgICB2YXIgZWwxID0gZG9tLmNyZWF0ZUVsZW1l
bnQoImlucHV0Iik7CisgICAgICAgIGRvbS5zZXRBdHRyaWJ1dGUoZWwxLCAidHlwZSIsICJ0ZXh0
Iik7CisgICAgICAgIGRvbS5zZXRBdHRyaWJ1dGUoZWwxLCAiY2xhc3MiLCAiZWRpdCIpOworICAg
ICAgICBkb20uc2V0QXR0cmlidXRlKGVsMSwgImF1dG9mb2N1cyIsICIiKTsKKyAgICAgICAgZG9t
LmFwcGVuZENoaWxkKGVsMCwgZWwxKTsKKyAgICAgICAgcmV0dXJuIGVsMDsKKyAgICAgIH0sCisg
ICAgICBidWlsZFJlbmRlck5vZGVzOiBmdW5jdGlvbiBidWlsZFJlbmRlck5vZGVzKGRvbSwgZnJh
Z21lbnQsIGNvbnRleHR1YWxFbGVtZW50KSB7CisgICAgICAgIHZhciBlbGVtZW50MCA9IGRvbS5j
aGlsZEF0KGZyYWdtZW50LCBbMF0pOworICAgICAgICB2YXIgZWxlbWVudDEgPSBkb20uY2hpbGRB
dChlbGVtZW50MCwgWzFdKTsKKyAgICAgICAgaWYgKHRoaXMuY2FjaGVkRnJhZ21lbnQpIHsKKyAg
ICAgICAgICBkb20ucmVwYWlyQ2xvbmVkTm9kZShlbGVtZW50MSwgW10sIHRydWUpOworICAgICAg
ICB9CisgICAgICAgIHZhciBlbGVtZW50MiA9IGRvbS5jaGlsZEF0KGVsZW1lbnQwLCBbM10pOwor
ICAgICAgICB2YXIgZWxlbWVudDMgPSBkb20uY2hpbGRBdChlbGVtZW50MCwgWzVdKTsKKyAgICAg
ICAgdmFyIGVsZW1lbnQ0ID0gZG9tLmNoaWxkQXQoZnJhZ21lbnQsIFsyXSk7CisgICAgICAgIHZh
ciBtb3JwaHMgPSBuZXcgQXJyYXkoOCk7CisgICAgICAgIG1vcnBoc1swXSA9IGRvbS5jcmVhdGVB
dHRyTW9ycGgoZWxlbWVudDEsICdjaGVja2VkJyk7CisgICAgICAgIG1vcnBoc1sxXSA9IGRvbS5j
cmVhdGVBdHRyTW9ycGgoZWxlbWVudDEsICdvbmNoYW5nZScpOworICAgICAgICBtb3JwaHNbMl0g
PSBkb20uY3JlYXRlQXR0ck1vcnBoKGVsZW1lbnQyLCAnb25kYmxjbGljaycpOworICAgICAgICBt
b3JwaHNbM10gPSBkb20uY3JlYXRlTW9ycGhBdChlbGVtZW50MiwgMCwgMCk7CisgICAgICAgIG1v
cnBoc1s0XSA9IGRvbS5jcmVhdGVBdHRyTW9ycGgoZWxlbWVudDMsICdvbmNsaWNrJyk7CisgICAg
ICAgIG1vcnBoc1s1XSA9IGRvbS5jcmVhdGVBdHRyTW9ycGgoZWxlbWVudDQsICd2YWx1ZScpOwor
ICAgICAgICBtb3JwaHNbNl0gPSBkb20uY3JlYXRlQXR0ck1vcnBoKGVsZW1lbnQ0LCAnb25ibHVy
Jyk7CisgICAgICAgIG1vcnBoc1s3XSA9IGRvbS5jcmVhdGVBdHRyTW9ycGgoZWxlbWVudDQsICdv
bmtleWRvd24nKTsKKyAgICAgICAgcmV0dXJuIG1vcnBoczsKKyAgICAgIH0sCisgICAgICBzdGF0
ZW1lbnRzOiBbWyJhdHRyaWJ1dGUiLCAiY2hlY2tlZCIsIFsiZ2V0IiwgInRvZG8uY29tcGxldGVk
IiwgWyJsb2MiLCBbbnVsbCwgWzIsIDUwXSwgWzIsIDY0XV1dXV0sIFsiYXR0cmlidXRlIiwgIm9u
Y2hhbmdlIiwgWyJzdWJleHByIiwgImFjdGlvbiIsIFsidG9nZ2xlQ29tcGxldGVkIl0sIFtdLCBb
ImxvYyIsIFtudWxsLCBbMiwgNzZdLCBbMiwgMTA0XV1dXV0sIFsiYXR0cmlidXRlIiwgIm9uZGJs
Y2xpY2siLCBbInN1YmV4cHIiLCAiYWN0aW9uIiwgWyJzdGFydEVkaXRpbmciXSwgW10sIFsibG9j
IiwgW251bGwsIFszLCAyMF0sIFszLCA0NV1dXV1dLCBbImNvbnRlbnQiLCAidG9kby50aXRsZSIs
IFsibG9jIiwgW251bGwsIFszLCA0Nl0sIFszLCA2MF1dXV0sIFsiYXR0cmlidXRlIiwgIm9uY2xp
Y2siLCBbInN1YmV4cHIiLCAiYWN0aW9uIiwgWyJyZW1vdmVUb2RvIl0sIFtdLCBbImxvYyIsIFtu
dWxsLCBbNCwgMThdLCBbNCwgNDFdXV1dXSwgWyJhdHRyaWJ1dGUiLCAidmFsdWUiLCBbImdldCIs
ICJ0b2RvLnRpdGxlIiwgWyJsb2MiLCBbbnVsbCwgWzYsIDQwXSwgWzYsIDUwXV1dXV0sIFsiYXR0
cmlidXRlIiwgIm9uYmx1ciIsIFsic3ViZXhwciIsICJhY3Rpb24iLCBbImRvbmVFZGl0aW5nIl0s
IFsidmFsdWUiLCAidGFyZ2V0LnZhbHVlIl0sIFsibG9jIiwgW251bGwsIFs2LCA2MF0sIFs2LCAx
MDVdXV1dXSwgWyJhdHRyaWJ1dGUiLCAib25rZXlkb3duIiwgWyJzdWJleHByIiwgImFjdGlvbiIs
IFsiaGFuZGxlS2V5ZG93biJdLCBbXSwgWyJsb2MiLCBbbnVsbCwgWzYsIDExNl0sIFs2LCAxNDJd
XV1dXV0sCisgICAgICBsb2NhbHM6IFtdLAorICAgICAgdGVtcGxhdGVzOiBbXQorICAgIH07Cisg
IH0pKCkpOworfSk7CitkZWZpbmUoInRvZG9tdmMvdGVtcGxhdGVzL2NvbXBvbmVudHMvdG9kby1s
aXN0IiwgWyJleHBvcnRzIl0sIGZ1bmN0aW9uIChleHBvcnRzKSB7CisgIGV4cG9ydHNbImRlZmF1
bHQiXSA9IEVtYmVyLkhUTUxCYXJzLnRlbXBsYXRlKChmdW5jdGlvbiAoKSB7CisgICAgdmFyIGNo
aWxkMCA9IChmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgY2hpbGQwID0gKGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICBtZXRhOiB7CisgICAgICAgICAgICAiZnJhZ21l
bnRSZWFzb24iOiBmYWxzZSwKKyAgICAgICAgICAgICJyZXZpc2lvbiI6ICJFbWJlckAyLjYuMiIs
CisgICAgICAgICAgICAibG9jIjogeworICAgICAgICAgICAgICAic291cmNlIjogbnVsbCwKKyAg
ICAgICAgICAgICAgInN0YXJ0IjogeworICAgICAgICAgICAgICAgICJsaW5lIjogMiwKKyAgICAg
ICAgICAgICAgICAiY29sdW1uIjogMgorICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAi
ZW5kIjogeworICAgICAgICAgICAgICAgICJsaW5lIjogNCwKKyAgICAgICAgICAgICAgICAiY29s
dW1uIjogMgorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgIm1v
ZHVsZU5hbWUiOiAidG9kb212Yy90ZW1wbGF0ZXMvY29tcG9uZW50cy90b2RvLWxpc3QuaGJzIgor
ICAgICAgICAgIH0sCisgICAgICAgICAgaXNFbXB0eTogZmFsc2UsCisgICAgICAgICAgYXJpdHk6
IDAsCisgICAgICAgICAgY2FjaGVkRnJhZ21lbnQ6IG51bGwsCisgICAgICAgICAgaGFzUmVuZGVy
ZWQ6IGZhbHNlLAorICAgICAgICAgIGJ1aWxkRnJhZ21lbnQ6IGZ1bmN0aW9uIGJ1aWxkRnJhZ21l
bnQoZG9tKSB7CisgICAgICAgICAgICB2YXIgZWwwID0gZG9tLmNyZWF0ZURvY3VtZW50RnJhZ21l
bnQoKTsKKyAgICAgICAgICAgIHZhciBlbDEgPSBkb20uY3JlYXRlVGV4dE5vZGUoIiAgICAiKTsK
KyAgICAgICAgICAgIGRvbS5hcHBlbmRDaGlsZChlbDAsIGVsMSk7CisgICAgICAgICAgICB2YXIg
ZWwxID0gZG9tLmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7CisgICAgICAgICAgICBkb20uc2V0QXR0
cmlidXRlKGVsMSwgInR5cGUiLCAiY2hlY2tib3giKTsKKyAgICAgICAgICAgIGRvbS5zZXRBdHRy
aWJ1dGUoZWwxLCAiaWQiLCAidG9nZ2xlLWFsbCIpOworICAgICAgICAgICAgZG9tLmFwcGVuZENo
aWxkKGVsMCwgZWwxKTsKKyAgICAgICAgICAgIHZhciBlbDEgPSBkb20uY3JlYXRlVGV4dE5vZGUo
IlxuIik7CisgICAgICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwwLCBlbDEpOworICAgICAgICAg
ICAgcmV0dXJuIGVsMDsKKyAgICAgICAgICB9LAorICAgICAgICAgIGJ1aWxkUmVuZGVyTm9kZXM6
IGZ1bmN0aW9uIGJ1aWxkUmVuZGVyTm9kZXMoZG9tLCBmcmFnbWVudCwgY29udGV4dHVhbEVsZW1l
bnQpIHsKKyAgICAgICAgICAgIHZhciBlbGVtZW50MCA9IGRvbS5jaGlsZEF0KGZyYWdtZW50LCBb
MV0pOworICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGVkRnJhZ21lbnQpIHsKKyAgICAgICAgICAg
ICAgZG9tLnJlcGFpckNsb25lZE5vZGUoZWxlbWVudDAsIFtdLCB0cnVlKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHZhciBtb3JwaHMgPSBuZXcgQXJyYXkoMik7CisgICAgICAgICAgICBt
b3JwaHNbMF0gPSBkb20uY3JlYXRlQXR0ck1vcnBoKGVsZW1lbnQwLCAnY2hlY2tlZCcpOworICAg
ICAgICAgICAgbW9ycGhzWzFdID0gZG9tLmNyZWF0ZUF0dHJNb3JwaChlbGVtZW50MCwgJ29uY2hh
bmdlJyk7CisgICAgICAgICAgICByZXR1cm4gbW9ycGhzOworICAgICAgICAgIH0sCisgICAgICAg
ICAgc3RhdGVtZW50czogW1siYXR0cmlidXRlIiwgImNoZWNrZWQiLCBbImdldCIsICJhbGxDb21w
bGV0ZWQiLCBbImxvYyIsIFtudWxsLCBbMywgNTNdLCBbMywgNjVdXV1dXSwgWyJhdHRyaWJ1dGUi
LCAib25jaGFuZ2UiLCBbInN1YmV4cHIiLCAiYWN0aW9uIiwgWyJ0b2dnbGVBbGwiXSwgW10sIFsi
bG9jIiwgW251bGwsIFszLCA3N10sIFszLCA5OV1dXV1dXSwKKyAgICAgICAgICBsb2NhbHM6IFtd
LAorICAgICAgICAgIHRlbXBsYXRlczogW10KKyAgICAgICAgfTsKKyAgICAgIH0pKCk7CisgICAg
ICB2YXIgY2hpbGQxID0gKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICBtZXRhOiB7CisgICAgICAgICAgICAiZnJhZ21lbnRSZWFzb24iOiBmYWxzZSwKKyAgICAgICAg
ICAgICJyZXZpc2lvbiI6ICJFbWJlckAyLjYuMiIsCisgICAgICAgICAgICAibG9jIjogeworICAg
ICAgICAgICAgICAic291cmNlIjogbnVsbCwKKyAgICAgICAgICAgICAgInN0YXJ0IjogeworICAg
ICAgICAgICAgICAgICJsaW5lIjogNiwKKyAgICAgICAgICAgICAgICAiY29sdW1uIjogNAorICAg
ICAgICAgICAgICB9LAorICAgICAgICAgICAgICAiZW5kIjogeworICAgICAgICAgICAgICAgICJs
aW5lIjogOCwKKyAgICAgICAgICAgICAgICAiY29sdW1uIjogNAorICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9LAorICAgICAgICAgICAgIm1vZHVsZU5hbWUiOiAidG9kb212Yy90ZW1wbGF0
ZXMvY29tcG9uZW50cy90b2RvLWxpc3QuaGJzIgorICAgICAgICAgIH0sCisgICAgICAgICAgaXNF
bXB0eTogZmFsc2UsCisgICAgICAgICAgYXJpdHk6IDEsCisgICAgICAgICAgY2FjaGVkRnJhZ21l
bnQ6IG51bGwsCisgICAgICAgICAgaGFzUmVuZGVyZWQ6IGZhbHNlLAorICAgICAgICAgIGJ1aWxk
RnJhZ21lbnQ6IGZ1bmN0aW9uIGJ1aWxkRnJhZ21lbnQoZG9tKSB7CisgICAgICAgICAgICB2YXIg
ZWwwID0gZG9tLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKyAgICAgICAgICAgIHZhciBlbDEg
PSBkb20uY3JlYXRlVGV4dE5vZGUoIiAgICAgICIpOworICAgICAgICAgICAgZG9tLmFwcGVuZENo
aWxkKGVsMCwgZWwxKTsKKyAgICAgICAgICAgIHZhciBlbDEgPSBkb20uY3JlYXRlQ29tbWVudCgi
Iik7CisgICAgICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwwLCBlbDEpOworICAgICAgICAgICAg
dmFyIGVsMSA9IGRvbS5jcmVhdGVUZXh0Tm9kZSgiXG4iKTsKKyAgICAgICAgICAgIGRvbS5hcHBl
bmRDaGlsZChlbDAsIGVsMSk7CisgICAgICAgICAgICByZXR1cm4gZWwwOworICAgICAgICAgIH0s
CisgICAgICAgICAgYnVpbGRSZW5kZXJOb2RlczogZnVuY3Rpb24gYnVpbGRSZW5kZXJOb2Rlcyhk
b20sIGZyYWdtZW50LCBjb250ZXh0dWFsRWxlbWVudCkgeworICAgICAgICAgICAgdmFyIG1vcnBo
cyA9IG5ldyBBcnJheSgxKTsKKyAgICAgICAgICAgIG1vcnBoc1swXSA9IGRvbS5jcmVhdGVNb3Jw
aEF0KGZyYWdtZW50LCAxLCAxLCBjb250ZXh0dWFsRWxlbWVudCk7CisgICAgICAgICAgICByZXR1
cm4gbW9ycGhzOworICAgICAgICAgIH0sCisgICAgICAgICAgc3RhdGVtZW50czogW1siaW5saW5l
IiwgInRvZG8taXRlbSIsIFtdLCBbInRvZG8iLCBbInN1YmV4cHIiLCAiQG11dCIsIFtbImdldCIs
ICJ0b2RvIiwgWyJsb2MiLCBbbnVsbCwgWzcsIDIzXSwgWzcsIDI3XV1dXV0sIFtdLCBbXV0sICJv
blN0YXJ0RWRpdCIsIFsic3ViZXhwciIsICJhY3Rpb24iLCBbImRpc2FibGVUb2dnbGUiXSwgW10s
IFsibG9jIiwgW251bGwsIFs3LCA0MF0sIFs3LCA2NF1dXV0sICJvbkVuZEVkaXQiLCBbInN1YmV4
cHIiLCAiYWN0aW9uIiwgWyJlbmFibGVUb2dnbGUiXSwgW10sIFsibG9jIiwgW251bGwsIFs3LCA3
NV0sIFs3LCA5OF1dXV1dLCBbImxvYyIsIFtudWxsLCBbNywgNl0sIFs3LCAxMDBdXV1dXSwKKyAg
ICAgICAgICBsb2NhbHM6IFsidG9kbyJdLAorICAgICAgICAgIHRlbXBsYXRlczogW10KKyAgICAg
ICAgfTsKKyAgICAgIH0pKCk7CisgICAgICByZXR1cm4geworICAgICAgICBtZXRhOiB7CisgICAg
ICAgICAgImZyYWdtZW50UmVhc29uIjogeworICAgICAgICAgICAgIm5hbWUiOiAibWlzc2luZy13
cmFwcGVyIiwKKyAgICAgICAgICAgICJwcm9ibGVtcyI6IFsid3JvbmctdHlwZSIsICJtdWx0aXBs
ZS1ub2RlcyJdCisgICAgICAgICAgfSwKKyAgICAgICAgICAicmV2aXNpb24iOiAiRW1iZXJAMi42
LjIiLAorICAgICAgICAgICJsb2MiOiB7CisgICAgICAgICAgICAic291cmNlIjogbnVsbCwKKyAg
ICAgICAgICAgICJzdGFydCI6IHsKKyAgICAgICAgICAgICAgImxpbmUiOiAxLAorICAgICAgICAg
ICAgICAiY29sdW1uIjogMAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJlbmQiOiB7Cisg
ICAgICAgICAgICAgICJsaW5lIjogMTAsCisgICAgICAgICAgICAgICJjb2x1bW4iOiAwCisgICAg
ICAgICAgICB9CisgICAgICAgICAgfSwKKyAgICAgICAgICAibW9kdWxlTmFtZSI6ICJ0b2RvbXZj
L3RlbXBsYXRlcy9jb21wb25lbnRzL3RvZG8tbGlzdC5oYnMiCisgICAgICAgIH0sCisgICAgICAg
IGlzRW1wdHk6IGZhbHNlLAorICAgICAgICBhcml0eTogMCwKKyAgICAgICAgY2FjaGVkRnJhZ21l
bnQ6IG51bGwsCisgICAgICAgIGhhc1JlbmRlcmVkOiBmYWxzZSwKKyAgICAgICAgYnVpbGRGcmFn
bWVudDogZnVuY3Rpb24gYnVpbGRGcmFnbWVudChkb20pIHsKKyAgICAgICAgICB2YXIgZWwwID0g
ZG9tLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKyAgICAgICAgICB2YXIgZWwxID0gZG9tLmNy
ZWF0ZUNvbW1lbnQoIiIpOworICAgICAgICAgIGRvbS5hcHBlbmRDaGlsZChlbDAsIGVsMSk7Cisg
ICAgICAgICAgdmFyIGVsMSA9IGRvbS5jcmVhdGVUZXh0Tm9kZSgiICAiKTsKKyAgICAgICAgICBk
b20uYXBwZW5kQ2hpbGQoZWwwLCBlbDEpOworICAgICAgICAgIHZhciBlbDEgPSBkb20uY3JlYXRl
RWxlbWVudCgidWwiKTsKKyAgICAgICAgICBkb20uc2V0QXR0cmlidXRlKGVsMSwgImlkIiwgInRv
ZG8tbGlzdCIpOworICAgICAgICAgIGRvbS5zZXRBdHRyaWJ1dGUoZWwxLCAiY2xhc3MiLCAidG9k
by1saXN0Iik7CisgICAgICAgICAgdmFyIGVsMiA9IGRvbS5jcmVhdGVUZXh0Tm9kZSgiXG4iKTsK
KyAgICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwxLCBlbDIpOworICAgICAgICAgIHZhciBlbDIg
PSBkb20uY3JlYXRlQ29tbWVudCgiIik7CisgICAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVsMSwg
ZWwyKTsKKyAgICAgICAgICB2YXIgZWwyID0gZG9tLmNyZWF0ZVRleHROb2RlKCIgICIpOworICAg
ICAgICAgIGRvbS5hcHBlbmRDaGlsZChlbDEsIGVsMik7CisgICAgICAgICAgZG9tLmFwcGVuZENo
aWxkKGVsMCwgZWwxKTsKKyAgICAgICAgICB2YXIgZWwxID0gZG9tLmNyZWF0ZVRleHROb2RlKCJc
biIpOworICAgICAgICAgIGRvbS5hcHBlbmRDaGlsZChlbDAsIGVsMSk7CisgICAgICAgICAgcmV0
dXJuIGVsMDsKKyAgICAgICAgfSwKKyAgICAgICAgYnVpbGRSZW5kZXJOb2RlczogZnVuY3Rpb24g
YnVpbGRSZW5kZXJOb2Rlcyhkb20sIGZyYWdtZW50LCBjb250ZXh0dWFsRWxlbWVudCkgeworICAg
ICAgICAgIHZhciBtb3JwaHMgPSBuZXcgQXJyYXkoMik7CisgICAgICAgICAgbW9ycGhzWzBdID0g
ZG9tLmNyZWF0ZU1vcnBoQXQoZnJhZ21lbnQsIDAsIDAsIGNvbnRleHR1YWxFbGVtZW50KTsKKyAg
ICAgICAgICBtb3JwaHNbMV0gPSBkb20uY3JlYXRlTW9ycGhBdChkb20uY2hpbGRBdChmcmFnbWVu
dCwgWzJdKSwgMSwgMSk7CisgICAgICAgICAgZG9tLmluc2VydEJvdW5kYXJ5KGZyYWdtZW50LCAw
KTsKKyAgICAgICAgICByZXR1cm4gbW9ycGhzOworICAgICAgICB9LAorICAgICAgICBzdGF0ZW1l
bnRzOiBbWyJibG9jayIsICJpZiIsIFtbImdldCIsICJjYW5Ub2dnbGUiLCBbImxvYyIsIFtudWxs
LCBbMiwgOF0sIFsyLCAxN11dXV1dLCBbXSwgMCwgbnVsbCwgWyJsb2MiLCBbbnVsbCwgWzIsIDJd
LCBbNCwgOV1dXV0sIFsiYmxvY2siLCAiZWFjaCIsIFtbImdldCIsICJ0b2RvcyIsIFsibG9jIiwg
W251bGwsIFs2LCAxMl0sIFs2LCAxN11dXV1dLCBbXSwgMSwgbnVsbCwgWyJsb2MiLCBbbnVsbCwg
WzYsIDRdLCBbOCwgMTNdXV1dXSwKKyAgICAgICAgbG9jYWxzOiBbXSwKKyAgICAgICAgdGVtcGxh
dGVzOiBbY2hpbGQwLCBjaGlsZDFdCisgICAgICB9OworICAgIH0pKCk7CisgICAgcmV0dXJuIHsK
KyAgICAgIG1ldGE6IHsKKyAgICAgICAgImZyYWdtZW50UmVhc29uIjogeworICAgICAgICAgICJu
YW1lIjogIm1pc3Npbmctd3JhcHBlciIsCisgICAgICAgICAgInByb2JsZW1zIjogWyJ3cm9uZy10
eXBlIl0KKyAgICAgICAgfSwKKyAgICAgICAgInJldmlzaW9uIjogIkVtYmVyQDIuNi4yIiwKKyAg
ICAgICAgImxvYyI6IHsKKyAgICAgICAgICAic291cmNlIjogbnVsbCwKKyAgICAgICAgICAic3Rh
cnQiOiB7CisgICAgICAgICAgICAibGluZSI6IDEsCisgICAgICAgICAgICAiY29sdW1uIjogMAor
ICAgICAgICAgIH0sCisgICAgICAgICAgImVuZCI6IHsKKyAgICAgICAgICAgICJsaW5lIjogMTEs
CisgICAgICAgICAgICAiY29sdW1uIjogMAorICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAg
ICAgIm1vZHVsZU5hbWUiOiAidG9kb212Yy90ZW1wbGF0ZXMvY29tcG9uZW50cy90b2RvLWxpc3Qu
aGJzIgorICAgICAgfSwKKyAgICAgIGlzRW1wdHk6IGZhbHNlLAorICAgICAgYXJpdHk6IDAsCisg
ICAgICBjYWNoZWRGcmFnbWVudDogbnVsbCwKKyAgICAgIGhhc1JlbmRlcmVkOiBmYWxzZSwKKyAg
ICAgIGJ1aWxkRnJhZ21lbnQ6IGZ1bmN0aW9uIGJ1aWxkRnJhZ21lbnQoZG9tKSB7CisgICAgICAg
IHZhciBlbDAgPSBkb20uY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOworICAgICAgICB2YXIgZWwx
ID0gZG9tLmNyZWF0ZUNvbW1lbnQoIiIpOworICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwwLCBl
bDEpOworICAgICAgICByZXR1cm4gZWwwOworICAgICAgfSwKKyAgICAgIGJ1aWxkUmVuZGVyTm9k
ZXM6IGZ1bmN0aW9uIGJ1aWxkUmVuZGVyTm9kZXMoZG9tLCBmcmFnbWVudCwgY29udGV4dHVhbEVs
ZW1lbnQpIHsKKyAgICAgICAgdmFyIG1vcnBocyA9IG5ldyBBcnJheSgxKTsKKyAgICAgICAgbW9y
cGhzWzBdID0gZG9tLmNyZWF0ZU1vcnBoQXQoZnJhZ21lbnQsIDAsIDAsIGNvbnRleHR1YWxFbGVt
ZW50KTsKKyAgICAgICAgZG9tLmluc2VydEJvdW5kYXJ5KGZyYWdtZW50LCAwKTsKKyAgICAgICAg
ZG9tLmluc2VydEJvdW5kYXJ5KGZyYWdtZW50LCBudWxsKTsKKyAgICAgICAgcmV0dXJuIG1vcnBo
czsKKyAgICAgIH0sCisgICAgICBzdGF0ZW1lbnRzOiBbWyJibG9jayIsICJpZiIsIFtbImdldCIs
ICJ0b2Rvcy5sZW5ndGgiLCBbImxvYyIsIFtudWxsLCBbMSwgNl0sIFsxLCAxOF1dXV1dLCBbXSwg
MCwgbnVsbCwgWyJsb2MiLCBbbnVsbCwgWzEsIDBdLCBbMTAsIDddXV1dXSwKKyAgICAgIGxvY2Fs
czogW10sCisgICAgICB0ZW1wbGF0ZXM6IFtjaGlsZDBdCisgICAgfTsKKyAgfSkoKSk7Cit9KTsK
K2RlZmluZSgidG9kb212Yy90ZW1wbGF0ZXMvaW5kZXgiLCBbImV4cG9ydHMiXSwgZnVuY3Rpb24g
KGV4cG9ydHMpIHsKKyAgZXhwb3J0c1siZGVmYXVsdCJdID0gRW1iZXIuSFRNTEJhcnMudGVtcGxh
dGUoKGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgY2hpbGQwID0gKGZ1bmN0aW9uICgpIHsKKyAgICAg
IHJldHVybiB7CisgICAgICAgIG1ldGE6IHsKKyAgICAgICAgICAiZnJhZ21lbnRSZWFzb24iOiB7
CisgICAgICAgICAgICAibmFtZSI6ICJtaXNzaW5nLXdyYXBwZXIiLAorICAgICAgICAgICAgInBy
b2JsZW1zIjogWyJ3cm9uZy10eXBlIl0KKyAgICAgICAgICB9LAorICAgICAgICAgICJyZXZpc2lv
biI6ICJFbWJlckAyLjYuMiIsCisgICAgICAgICAgImxvYyI6IHsKKyAgICAgICAgICAgICJzb3Vy
Y2UiOiBudWxsLAorICAgICAgICAgICAgInN0YXJ0IjogeworICAgICAgICAgICAgICAibGluZSI6
IDEsCisgICAgICAgICAgICAgICJjb2x1bW4iOiAwCisgICAgICAgICAgICB9LAorICAgICAgICAg
ICAgImVuZCI6IHsKKyAgICAgICAgICAgICAgImxpbmUiOiAzLAorICAgICAgICAgICAgICAiY29s
dW1uIjogMAorICAgICAgICAgICAgfQorICAgICAgICAgIH0sCisgICAgICAgICAgIm1vZHVsZU5h
bWUiOiAidG9kb212Yy90ZW1wbGF0ZXMvaW5kZXguaGJzIgorICAgICAgICB9LAorICAgICAgICBp
c0VtcHR5OiBmYWxzZSwKKyAgICAgICAgYXJpdHk6IDAsCisgICAgICAgIGNhY2hlZEZyYWdtZW50
OiBudWxsLAorICAgICAgICBoYXNSZW5kZXJlZDogZmFsc2UsCisgICAgICAgIGJ1aWxkRnJhZ21l
bnQ6IGZ1bmN0aW9uIGJ1aWxkRnJhZ21lbnQoZG9tKSB7CisgICAgICAgICAgdmFyIGVsMCA9IGRv
bS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisgICAgICAgICAgdmFyIGVsMSA9IGRvbS5jcmVh
dGVUZXh0Tm9kZSgiICAiKTsKKyAgICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwwLCBlbDEpOwor
ICAgICAgICAgIHZhciBlbDEgPSBkb20uY3JlYXRlQ29tbWVudCgiIik7CisgICAgICAgICAgZG9t
LmFwcGVuZENoaWxkKGVsMCwgZWwxKTsKKyAgICAgICAgICB2YXIgZWwxID0gZG9tLmNyZWF0ZVRl
eHROb2RlKCJcbiIpOworICAgICAgICAgIGRvbS5hcHBlbmRDaGlsZChlbDAsIGVsMSk7CisgICAg
ICAgICAgcmV0dXJuIGVsMDsKKyAgICAgICAgfSwKKyAgICAgICAgYnVpbGRSZW5kZXJOb2Rlczog
ZnVuY3Rpb24gYnVpbGRSZW5kZXJOb2Rlcyhkb20sIGZyYWdtZW50LCBjb250ZXh0dWFsRWxlbWVu
dCkgeworICAgICAgICAgIHZhciBtb3JwaHMgPSBuZXcgQXJyYXkoMSk7CisgICAgICAgICAgbW9y
cGhzWzBdID0gZG9tLmNyZWF0ZU1vcnBoQXQoZnJhZ21lbnQsIDEsIDEsIGNvbnRleHR1YWxFbGVt
ZW50KTsKKyAgICAgICAgICByZXR1cm4gbW9ycGhzOworICAgICAgICB9LAorICAgICAgICBzdGF0
ZW1lbnRzOiBbWyJpbmxpbmUiLCAidG9kby1saXN0IiwgW10sIFsidG9kb3MiLCBbInN1YmV4cHIi
LCAiQG11dCIsIFtbImdldCIsICJtb2RlbCIsIFsibG9jIiwgW251bGwsIFsyLCAyMF0sIFsyLCAy
NV1dXV1dLCBbXSwgW11dXSwgWyJsb2MiLCBbbnVsbCwgWzIsIDJdLCBbMiwgMjddXV1dXSwKKyAg
ICAgICAgbG9jYWxzOiBbXSwKKyAgICAgICAgdGVtcGxhdGVzOiBbXQorICAgICAgfTsKKyAgICB9
KSgpOworICAgIHJldHVybiB7CisgICAgICBtZXRhOiB7CisgICAgICAgICJmcmFnbWVudFJlYXNv
biI6IHsKKyAgICAgICAgICAibmFtZSI6ICJtaXNzaW5nLXdyYXBwZXIiLAorICAgICAgICAgICJw
cm9ibGVtcyI6IFsid3JvbmctdHlwZSJdCisgICAgICAgIH0sCisgICAgICAgICJyZXZpc2lvbiI6
ICJFbWJlckAyLjYuMiIsCisgICAgICAgICJsb2MiOiB7CisgICAgICAgICAgInNvdXJjZSI6IG51
bGwsCisgICAgICAgICAgInN0YXJ0IjogeworICAgICAgICAgICAgImxpbmUiOiAxLAorICAgICAg
ICAgICAgImNvbHVtbiI6IDAKKyAgICAgICAgICB9LAorICAgICAgICAgICJlbmQiOiB7CisgICAg
ICAgICAgICAibGluZSI6IDQsCisgICAgICAgICAgICAiY29sdW1uIjogMAorICAgICAgICAgIH0K
KyAgICAgICAgfSwKKyAgICAgICAgIm1vZHVsZU5hbWUiOiAidG9kb212Yy90ZW1wbGF0ZXMvaW5k
ZXguaGJzIgorICAgICAgfSwKKyAgICAgIGlzRW1wdHk6IGZhbHNlLAorICAgICAgYXJpdHk6IDAs
CisgICAgICBjYWNoZWRGcmFnbWVudDogbnVsbCwKKyAgICAgIGhhc1JlbmRlcmVkOiBmYWxzZSwK
KyAgICAgIGJ1aWxkRnJhZ21lbnQ6IGZ1bmN0aW9uIGJ1aWxkRnJhZ21lbnQoZG9tKSB7CisgICAg
ICAgIHZhciBlbDAgPSBkb20uY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOworICAgICAgICB2YXIg
ZWwxID0gZG9tLmNyZWF0ZUNvbW1lbnQoIiIpOworICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWww
LCBlbDEpOworICAgICAgICByZXR1cm4gZWwwOworICAgICAgfSwKKyAgICAgIGJ1aWxkUmVuZGVy
Tm9kZXM6IGZ1bmN0aW9uIGJ1aWxkUmVuZGVyTm9kZXMoZG9tLCBmcmFnbWVudCwgY29udGV4dHVh
bEVsZW1lbnQpIHsKKyAgICAgICAgdmFyIG1vcnBocyA9IG5ldyBBcnJheSgxKTsKKyAgICAgICAg
bW9ycGhzWzBdID0gZG9tLmNyZWF0ZU1vcnBoQXQoZnJhZ21lbnQsIDAsIDAsIGNvbnRleHR1YWxF
bGVtZW50KTsKKyAgICAgICAgZG9tLmluc2VydEJvdW5kYXJ5KGZyYWdtZW50LCAwKTsKKyAgICAg
ICAgZG9tLmluc2VydEJvdW5kYXJ5KGZyYWdtZW50LCBudWxsKTsKKyAgICAgICAgcmV0dXJuIG1v
cnBoczsKKyAgICAgIH0sCisgICAgICBzdGF0ZW1lbnRzOiBbWyJibG9jayIsICJpZiIsIFtbImdl
dCIsICJtb2RlbC5sZW5ndGgiLCBbImxvYyIsIFtudWxsLCBbMSwgNl0sIFsxLCAxOF1dXV1dLCBb
XSwgMCwgbnVsbCwgWyJsb2MiLCBbbnVsbCwgWzEsIDBdLCBbMywgN11dXV1dLAorICAgICAgbG9j
YWxzOiBbXSwKKyAgICAgIHRlbXBsYXRlczogW2NoaWxkMF0KKyAgICB9OworICB9KSgpKTsKK30p
OworLyoganNoaW50IGlnbm9yZTpzdGFydCAqLworCisKKworLyoganNoaW50IGlnbm9yZTplbmQg
Ki8KKworLyoganNoaW50IGlnbm9yZTpzdGFydCAqLworCitkZWZpbmUoJ3RvZG9tdmMvY29uZmln
L2Vudmlyb25tZW50JywgWydlbWJlciddLCBmdW5jdGlvbihFbWJlcikgeworICB2YXIgcHJlZml4
ID0gJ3RvZG9tdmMnOworLyoganNoaW50IGlnbm9yZTpzdGFydCAqLworCit0cnkgeworICB2YXIg
bWV0YU5hbWUgPSBwcmVmaXggKyAnL2NvbmZpZy9lbnZpcm9ubWVudCc7CisgIHZhciByYXdDb25m
aWcgPSBFbWJlclsnZGVmYXVsdCddLiQoJ21ldGFbbmFtZT0iJyArIG1ldGFOYW1lICsgJyJdJyku
YXR0cignY29udGVudCcpOworICB2YXIgY29uZmlnID0gSlNPTi5wYXJzZSh1bmVzY2FwZShyYXdD
b25maWcpKTsKKworICByZXR1cm4geyAnZGVmYXVsdCc6IGNvbmZpZyB9OworfQorY2F0Y2goZXJy
KSB7CisgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IHJlYWQgY29uZmlnIGZyb20gbWV0YSB0
YWcgd2l0aCBuYW1lICInICsgbWV0YU5hbWUgKyAnIi4nKTsKK30KKworLyoganNoaW50IGlnbm9y
ZTplbmQgKi8KKworfSk7CisKKy8qIGpzaGludCBpZ25vcmU6ZW5kICovCisKKy8qIGpzaGludCBp
Z25vcmU6c3RhcnQgKi8KKworaWYgKCFydW5uaW5nVGVzdHMpIHsKKyAgcmVxdWlyZSgidG9kb212
Yy9hcHAiKVsiZGVmYXVsdCJdLmNyZWF0ZSh7Im5hbWUiOiJ0b2RvbXZjIiwidmVyc2lvbiI6IjAu
MC4wKyJ9KTsKK30KKworLyoganNoaW50IGlnbm9yZTplbmQgKi8KKy8vIyBzb3VyY2VNYXBwaW5n
VVJMPXRvZG9tdmMubWFwCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1Nw
ZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJl
cmpzLWRlYnVnL2Fzc2V0cy92ZW5kb3IuY3NzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9T
cGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1i
ZXJqcy1kZWJ1Zy9hc3NldHMvdmVuZG9yLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYzljYzFiODAzNzJiYTYy
ZDhiOGUyNzQ2YWMwOGE1NjJlZDU1ZjE0Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJv
d3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1
cmUtZXhhbXBsZXMvZW1iZXJqcy1kZWJ1Zy9hc3NldHMvdmVuZG9yLmNzcwpAQCAtMCwwICsxLDM3
NiBAQAoraHRtbCwKK2JvZHkgeworICAgIG1hcmdpbjogMDsKKyAgICBwYWRkaW5nOiAwOworfQor
CitidXR0b24geworICAgIG1hcmdpbjogMDsKKyAgICBwYWRkaW5nOiAwOworICAgIGJvcmRlcjog
MDsKKyAgICBiYWNrZ3JvdW5kOiBub25lOworICAgIGZvbnQtc2l6ZTogMTAwJTsKKyAgICB2ZXJ0
aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CisgICAgZm9u
dC13ZWlnaHQ6IGluaGVyaXQ7CisgICAgY29sb3I6IGluaGVyaXQ7CisgICAgLXdlYmtpdC1hcHBl
YXJhbmNlOiBub25lOworICAgIGFwcGVhcmFuY2U6IG5vbmU7CisgICAgLXdlYmtpdC1mb250LXNt
b290aGluZzogYW50aWFsaWFzZWQ7CisgICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlz
Y2FsZTsKK30KKworYm9keSB7CisgICAgZm9udDogMTRweCAnSGVsdmV0aWNhIE5ldWUnLCBIZWx2
ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOworICAgIGxpbmUtaGVpZ2h0OiAxLjRlbTsKKyAgICBi
YWNrZ3JvdW5kOiAjZjVmNWY1OworICAgIGNvbG9yOiAjNGQ0ZDRkOworICAgIG1pbi13aWR0aDog
MjMwcHg7CisgICAgbWF4LXdpZHRoOiA1NTBweDsKKyAgICBtYXJnaW46IDAgYXV0bzsKKyAgICAt
d2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKKyAgICAtbW96LW9zeC1mb250LXNt
b290aGluZzogZ3JheXNjYWxlOworICAgIGZvbnQtd2VpZ2h0OiAzMDA7Cit9CisKKzpmb2N1cyB7
CisgICAgb3V0bGluZTogMDsKK30KKworLmhpZGRlbiB7CisgICAgZGlzcGxheTogbm9uZTsKK30K
KworI3RvZG9hcHAgeworICAgIGJhY2tncm91bmQ6ICNmZmY7CisgICAgbWFyZ2luOiAxMzBweCAw
IDQwcHggMDsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgYm94LXNoYWRvdzogMCAycHgg
NHB4IDAgcmdiYSgwLCAwLCAwLCAwLjIpLAorICAgICAgICAgICAgICAgIDAgMjVweCA1MHB4IDAg
cmdiYSgwLCAwLCAwLCAwLjEpOworfQorCisjdG9kb2FwcCBpbnB1dDo6LXdlYmtpdC1pbnB1dC1w
bGFjZWhvbGRlciB7CisgICAgZm9udC1zdHlsZTogaXRhbGljOworICAgIGZvbnQtd2VpZ2h0OiAz
MDA7CisgICAgY29sb3I6ICNlNmU2ZTY7Cit9CisKKyN0b2RvYXBwIGlucHV0OjotbW96LXBsYWNl
aG9sZGVyIHsKKyAgICBmb250LXN0eWxlOiBpdGFsaWM7CisgICAgZm9udC13ZWlnaHQ6IDMwMDsK
KyAgICBjb2xvcjogI2U2ZTZlNjsKK30KKworI3RvZG9hcHAgaW5wdXQ6OmlucHV0LXBsYWNlaG9s
ZGVyIHsKKyAgICBmb250LXN0eWxlOiBpdGFsaWM7CisgICAgZm9udC13ZWlnaHQ6IDMwMDsKKyAg
ICBjb2xvcjogI2U2ZTZlNjsKK30KKworI3RvZG9hcHAgaDEgeworICAgIHBvc2l0aW9uOiBhYnNv
bHV0ZTsKKyAgICB0b3A6IC0xNTVweDsKKyAgICB3aWR0aDogMTAwJTsKKyAgICBmb250LXNpemU6
IDEwMHB4OworICAgIGZvbnQtd2VpZ2h0OiAxMDA7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOwor
ICAgIGNvbG9yOiByZ2JhKDE3NSwgNDcsIDQ3LCAwLjE1KTsKKyAgICAtd2Via2l0LXRleHQtcmVu
ZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7CisgICAgLW1vei10ZXh0LXJlbmRlcmluZzogb3B0
aW1pemVMZWdpYmlsaXR5OworICAgIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7
Cit9CisKKyNuZXctdG9kbywKKy5lZGl0IHsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAg
bWFyZ2luOiAwOworICAgIHdpZHRoOiAxMDAlOworICAgIGZvbnQtc2l6ZTogMjRweDsKKyAgICBm
b250LWZhbWlseTogaW5oZXJpdDsKKyAgICBmb250LXdlaWdodDogaW5oZXJpdDsKKyAgICBsaW5l
LWhlaWdodDogMS40ZW07CisgICAgYm9yZGVyOiAwOworICAgIGNvbG9yOiBpbmhlcml0OworICAg
IHBhZGRpbmc6IDZweDsKKyAgICBib3JkZXI6IDFweCBzb2xpZCAjOTk5OworICAgIGJveC1zaGFk
b3c6IGluc2V0IDAgLTFweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMik7CisgICAgYm94LXNpemlu
ZzogYm9yZGVyLWJveDsKKyAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsK
KyAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOworfQorCisjbmV3LXRvZG8g
eworICAgIHBhZGRpbmc6IDE2cHggMTZweCAxNnB4IDYwcHg7CisgICAgYm9yZGVyOiBub25lOwor
ICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4wMDMpOworICAgIGJveC1zaGFkb3c6IGlu
c2V0IDAgLTJweCAxcHggcmdiYSgwLDAsMCwwLjAzKTsKK30KKworI21haW4geworICAgIHBvc2l0
aW9uOiByZWxhdGl2ZTsKKyAgICB6LWluZGV4OiAyOworICAgIGJvcmRlci10b3A6IDFweCBzb2xp
ZCAjZTZlNmU2OworfQorCisjdG9nZ2xlLWFsbCB7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOwor
ICAgIGJvcmRlcjogbm9uZTsgLyogTW9iaWxlIFNhZmFyaSAqLworICAgIG9wYWNpdHk6IDA7Cisg
ICAgcG9zaXRpb246IGFic29sdXRlOworfQorCisjdG9nZ2xlLWFsbCArIGxhYmVsIHsKKyAgICB3
aWR0aDogNjBweDsKKyAgICBoZWlnaHQ6IDM0cHg7CisgICAgZm9udC1zaXplOiAwOworICAgIHBv
c2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IC01MnB4OworICAgIGxlZnQ6IC0xM3B4OworICAg
IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOworICAgIHRyYW5zZm9ybTogcm90YXRl
KDkwZGVnKTsKK30KKworI3RvZ2dsZS1hbGwgKyBsYWJlbDpiZWZvcmUgeworICAgIGNvbnRlbnQ6
ICfina8nOworICAgIGZvbnQtc2l6ZTogMjJweDsKKyAgICBjb2xvcjogI2U2ZTZlNjsKKyAgICBw
YWRkaW5nOiAxMHB4IDI3cHggMTBweCAyN3B4OworfQorCisjdG9nZ2xlLWFsbDpjaGVja2VkICsg
bGFiZWw6YmVmb3JlIHsKKyAgICBjb2xvcjogIzczNzM3MzsKK30KKworI3RvZG8tbGlzdCB7Cisg
ICAgbWFyZ2luOiAwOworICAgIHBhZGRpbmc6IDA7CisgICAgbGlzdC1zdHlsZTogbm9uZTsKK30K
KworI3RvZG8tbGlzdCBsaSB7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIGZvbnQtc2l6
ZTogMjRweDsKKyAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VkZWRlZDsKK30KKworI3Rv
ZG8tbGlzdCBsaTpsYXN0LWNoaWxkIHsKKyAgICBib3JkZXItYm90dG9tOiBub25lOworfQorCisj
dG9kby1saXN0IGxpLmVkaXRpbmcgeworICAgIGJvcmRlci1ib3R0b206IG5vbmU7CisgICAgcGFk
ZGluZzogMDsKK30KKworI3RvZG8tbGlzdCBsaS5lZGl0aW5nIC5lZGl0IHsKKyAgICBkaXNwbGF5
OiBibG9jazsKKyAgICB3aWR0aDogNTA2cHg7CisgICAgcGFkZGluZzogMTJweCAxNnB4OworICAg
IG1hcmdpbjogMCAwIDAgNDNweDsKK30KKworI3RvZG8tbGlzdCBsaS5lZGl0aW5nIC52aWV3IHsK
KyAgICBkaXNwbGF5OiBub25lOworfQorCisjdG9kby1saXN0IGxpIC50b2dnbGUgeworICAgIHRl
eHQtYWxpZ246IGNlbnRlcjsKKyAgICB3aWR0aDogNDBweDsKKyAgICAvKiBhdXRvLCBzaW5jZSBu
b24tV2ViS2l0IGJyb3dzZXJzIGRvZXNuJ3Qgc3VwcG9ydCBpbnB1dCBzdHlsaW5nICovCisgICAg
aGVpZ2h0OiBhdXRvOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDA7CisgICAg
Ym90dG9tOiAwOworICAgIG1hcmdpbjogYXV0byAwOworICAgIGJvcmRlcjogbm9uZTsgLyogTW9i
aWxlIFNhZmFyaSAqLworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKKyAgICBhcHBlYXJh
bmNlOiBub25lOworfQorCisjdG9kby1saXN0IGxpIC50b2dnbGUgeworICAgIG9wYWNpdHk6IDA7
Cit9CisKKyN0b2RvLWxpc3QgbGkgLnRvZ2dsZSArIGxhYmVsIHsKKyAgICAvKgorICAgICAgICBG
aXJlZm94IHJlcXVpcmVzIGAjYCB0byBiZSBlc2NhcGVkIC0gaHR0cHM6Ly9idWd6aWxsYS5tb3pp
bGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTIyNDMzCisgICAgICAgIElFIGFuZCBFZGdlIHJlcXVp
cmVzICpldmVyeXRoaW5nKiB0byBiZSBlc2NhcGVkIHRvIHJlbmRlciwgc28gd2UgZG8gdGhhdCBp
bnN0ZWFkIG9mIGp1c3QgdGhlIGAjYCAtIGh0dHBzOi8vZGV2ZWxvcGVyLm1pY3Jvc29mdC5jb20v
ZW4tdXMvbWljcm9zb2Z0LWVkZ2UvcGxhdGZvcm0vaXNzdWVzLzcxNTc0NTkvCisgICAgKi8KKyAg
ICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LCUzQ3N2ZyUy
MHhtbG5zJTNEJTIyaHR0cCUzQS8vd3d3LnczLm9yZy8yMDAwL3N2ZyUyMiUyMHdpZHRoJTNEJTIy
NDAlMjIlMjBoZWlnaHQlM0QlMjI0MCUyMiUyMHZpZXdCb3glM0QlMjItMTAlMjAtMTglMjAxMDAl
MjAxMzUlMjIlM0UlM0NjaXJjbGUlMjBjeCUzRCUyMjUwJTIyJTIwY3klM0QlMjI1MCUyMiUyMHIl
M0QlMjI1MCUyMiUyMGZpbGwlM0QlMjJub25lJTIyJTIwc3Ryb2tlJTNEJTIyJTIzZWRlZGVkJTIy
JTIwc3Ryb2tlLXdpZHRoJTNEJTIyMyUyMi8lM0UlM0Mvc3ZnJTNFJyk7CisgICAgYmFja2dyb3Vu
ZC1yZXBlYXQ6IG5vLXJlcGVhdDsKKyAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgbGVm
dDsKK30KKworI3RvZG8tbGlzdCBsaSAudG9nZ2xlOmNoZWNrZWQgKyBsYWJlbCB7CisgICAgYmFj
a2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCwlM0NzdmclMjB4bWxu
cyUzRCUyMmh0dHAlM0EvL3d3dy53My5vcmcvMjAwMC9zdmclMjIlMjB3aWR0aCUzRCUyMjQwJTIy
JTIwaGVpZ2h0JTNEJTIyNDAlMjIlMjB2aWV3Qm94JTNEJTIyLTEwJTIwLTE4JTIwMTAwJTIwMTM1
JTIyJTNFJTNDY2lyY2xlJTIwY3glM0QlMjI1MCUyMiUyMGN5JTNEJTIyNTAlMjIlMjByJTNEJTIy
NTAlMjIlMjBmaWxsJTNEJTIybm9uZSUyMiUyMHN0cm9rZSUzRCUyMiUyM2JkZGFkNSUyMiUyMHN0
cm9rZS13aWR0aCUzRCUyMjMlMjIvJTNFJTNDcGF0aCUyMGZpbGwlM0QlMjIlMjM1ZGMyYWYlMjIl
MjBkJTNEJTIyTTcyJTIwMjVMNDIlMjA3MSUyMDI3JTIwNTZsLTQlMjA0JTIwMjAlMjAyMCUyMDM0
LTUyeiUyMi8lM0UlM0Mvc3ZnJTNFJyk7Cit9CisKKyN0b2RvLWxpc3QgbGkgbGFiZWwgeworICAg
IHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsKKyAgICBwYWRkaW5nOiAxNXB4IDE1cHggMTVweCA2MHB4
OworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIGxpbmUtaGVpZ2h0OiAxLjI7CisgICAgdHJhbnNp
dGlvbjogY29sb3IgMC40czsKK30KKworI3RvZG8tbGlzdCBsaS5jb21wbGV0ZWQgbGFiZWwgewor
ICAgIGNvbG9yOiAjZDlkOWQ5OworICAgIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOwor
fQorCisjdG9kby1saXN0IGxpIC5kZXN0cm95IHsKKyAgICBkaXNwbGF5OiBub25lOworICAgIHBv
c2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDA7CisgICAgcmlnaHQ6IDEwcHg7CisgICAgYm90
dG9tOiAwOworICAgIHdpZHRoOiA0MHB4OworICAgIGhlaWdodDogNDBweDsKKyAgICBtYXJnaW46
IGF1dG8gMDsKKyAgICBmb250LXNpemU6IDMwcHg7CisgICAgY29sb3I6ICNjYzlhOWE7CisgICAg
bWFyZ2luLWJvdHRvbTogMTFweDsKKyAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjJzIGVhc2Utb3V0
OworfQorCisjdG9kby1saXN0IGxpIC5kZXN0cm95OmhvdmVyIHsKKyAgICBjb2xvcjogI2FmNWI1
ZTsKK30KKworI3RvZG8tbGlzdCBsaSAuZGVzdHJveTphZnRlciB7CisgICAgY29udGVudDogJ8OX
JzsKK30KKworI3RvZG8tbGlzdCBsaTpob3ZlciAuZGVzdHJveSB7CisgICAgZGlzcGxheTogYmxv
Y2s7Cit9CisKKyN0b2RvLWxpc3QgbGkgLmVkaXQgeworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisK
KyN0b2RvLWxpc3QgbGkuZWRpdGluZzpsYXN0LWNoaWxkIHsKKyAgICBtYXJnaW4tYm90dG9tOiAt
MXB4OworfQorCisjZm9vdGVyIHsKKyAgICBjb2xvcjogIzc3NzsKKyAgICBwYWRkaW5nOiAxMHB4
IDE1cHg7CisgICAgaGVpZ2h0OiAyMHB4OworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICBi
b3JkZXItdG9wOiAxcHggc29saWQgI2U2ZTZlNjsKK30KKworI2Zvb3RlcjpiZWZvcmUgeworICAg
IGNvbnRlbnQ6ICcnOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICByaWdodDogMDsKKyAg
ICBib3R0b206IDA7CisgICAgbGVmdDogMDsKKyAgICBoZWlnaHQ6IDUwcHg7CisgICAgb3ZlcmZs
b3c6IGhpZGRlbjsKKyAgICBib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjIp
LAorICAgICAgICAgICAgICAgIDAgOHB4IDAgLTNweCAjZjZmNmY2LAorICAgICAgICAgICAgICAg
IDAgOXB4IDFweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwKKyAgICAgICAgICAgICAgICAwIDE2
cHggMCAtNnB4ICNmNmY2ZjYsCisgICAgICAgICAgICAgICAgMCAxN3B4IDJweCAtNnB4IHJnYmEo
MCwgMCwgMCwgMC4yKTsKK30KKworI3RvZG8tY291bnQgeworICAgIGZsb2F0OiBsZWZ0OworICAg
IHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKyN0b2RvLWNvdW50IHN0cm9uZyB7CisgICAgZm9udC13
ZWlnaHQ6IDMwMDsKK30KKworI2ZpbHRlcnMgeworICAgIG1hcmdpbjogMDsKKyAgICBwYWRkaW5n
OiAwOworICAgIGxpc3Qtc3R5bGU6IG5vbmU7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAg
IHJpZ2h0OiAwOworICAgIGxlZnQ6IDA7Cit9CisKKyNmaWx0ZXJzIGxpIHsKKyAgICBkaXNwbGF5
OiBpbmxpbmU7Cit9CisKKyNmaWx0ZXJzIGxpIGEgeworICAgIGNvbG9yOiBpbmhlcml0OworICAg
IG1hcmdpbjogM3B4OworICAgIHBhZGRpbmc6IDNweCA3cHg7CisgICAgdGV4dC1kZWNvcmF0aW9u
OiBub25lOworICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OworICAgIGJvcmRlci1y
YWRpdXM6IDNweDsKK30KKworI2ZpbHRlcnMgbGkgYTpob3ZlciB7CisgICAgYm9yZGVyLWNvbG9y
OiByZ2JhKDE3NSwgNDcsIDQ3LCAwLjEpOworfQorCisjZmlsdGVycyBsaSBhLnNlbGVjdGVkIHsK
KyAgICBib3JkZXItY29sb3I6IHJnYmEoMTc1LCA0NywgNDcsIDAuMik7Cit9CisKKyNjbGVhci1j
b21wbGV0ZWQsCitodG1sICNjbGVhci1jb21wbGV0ZWQ6YWN0aXZlIHsKKyAgICBmbG9hdDogcmln
aHQ7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIGxpbmUtaGVpZ2h0OiAyMHB4OworICAg
IHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICBjdXJzb3I6IHBvaW50ZXI7Cit9CisKKyNjbGVh
ci1jb21wbGV0ZWQ6aG92ZXIgeworICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQor
CisjaW5mbyB7CisgICAgbWFyZ2luOiA2NXB4IGF1dG8gMDsKKyAgICBjb2xvcjogI2JmYmZiZjsK
KyAgICBmb250LXNpemU6IDEwcHg7CisgICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgcmdiYSgyNTUs
IDI1NSwgMjU1LCAwLjUpOworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworI2luZm8gcCB7
CisgICAgbGluZS1oZWlnaHQ6IDE7Cit9CisKKyNpbmZvIGEgeworICAgIGNvbG9yOiBpbmhlcml0
OworICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICBmb250LXdlaWdodDogNDAwOworfQor
CisjaW5mbyBhOmhvdmVyIHsKKyAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKwor
LyoKKyAgICBIYWNrIHRvIHJlbW92ZSBiYWNrZ3JvdW5kIGZyb20gTW9iaWxlIFNhZmFyaS4KKyAg
ICBDYW4ndCB1c2UgaXQgZ2xvYmFsbHkgc2luY2UgaXQgZGVzdHJveXMgY2hlY2tib3hlcyBpbiBG
aXJlZm94CisqLworQG1lZGlhIHNjcmVlbiBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1y
YXRpbzowKSB7CisgICAgI3RvZ2dsZS1hbGwsCisgICAgI3RvZG8tbGlzdCBsaSAudG9nZ2xlIHsK
KyAgICAgICAgYmFja2dyb3VuZDogbm9uZTsKKyAgICB9CisKKyAgICAjdG9kby1saXN0IGxpIC50
b2dnbGUgeworICAgICAgICBoZWlnaHQ6IDQwcHg7CisgICAgfQorfQorCitAbWVkaWEgKG1heC13
aWR0aDogNDMwcHgpIHsKKyAgICAjZm9vdGVyIHsKKyAgICAgICAgaGVpZ2h0OiA1MHB4OworICAg
IH0KKworICAgICNmaWx0ZXJzIHsKKyAgICAgICAgYm90dG9tOiAxMHB4OworICAgIH0KK30KZGlm
ZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMtZGVidWcvYXNzZXRzL3Zl
bmRvci5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMtZGVidWcvYXNzZXRzL3Zl
bmRvci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi41NGQ3MTAxNGE4MTcxZTg5ZWU2MDAzMGYyYzExYTYwYmE1Njc3
NGEwCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9t
ZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy1k
ZWJ1Zy9hc3NldHMvdmVuZG9yLmpzCkBAIC0wLDAgKzEsNjYxMjEgQEAKKy8qIGpzaGludCBpZ25v
cmU6c3RhcnQgKi8KKword2luZG93LkVtYmVyRU5WID0geyJGRUFUVVJFUyI6e319OwordmFyIHJ1
bm5pbmdUZXN0cyA9IGZhbHNlOworCisKKworLyoganNoaW50IGlnbm9yZTplbmQgKi8KKworO3Zh
ciBsb2FkZXIsIGRlZmluZSwgcmVxdWlyZU1vZHVsZSwgcmVxdWlyZSwgcmVxdWlyZWpzOworCiso
ZnVuY3Rpb24gKGdsb2JhbCkgeworICAndXNlIHN0cmljdCc7CisKKyAgdmFyIGhlaW1kYWxsID0g
Z2xvYmFsLmhlaW1kYWxsOworCisgIGZ1bmN0aW9uIGRpY3QoKSB7CisgICAgdmFyIG9iaiA9IE9i
amVjdC5jcmVhdGUobnVsbCk7CisgICAgb2JqWydfXyddID0gdW5kZWZpbmVkOworICAgIGRlbGV0
ZSBvYmpbJ19fJ107CisgICAgcmV0dXJuIG9iajsKKyAgfQorCisgIC8vIFNhdmUgb2ZmIHRoZSBv
cmlnaW5hbCB2YWx1ZXMgb2YgdGhlc2UgZ2xvYmFscywgc28gd2UgY2FuIHJlc3RvcmUgdGhlbSBp
ZiBzb21lb25lIGFza3MgdXMgdG8KKyAgdmFyIG9sZEdsb2JhbHMgPSB7CisgICAgbG9hZGVyOiBs
b2FkZXIsCisgICAgZGVmaW5lOiBkZWZpbmUsCisgICAgcmVxdWlyZU1vZHVsZTogcmVxdWlyZU1v
ZHVsZSwKKyAgICByZXF1aXJlOiByZXF1aXJlLAorICAgIHJlcXVpcmVqczogcmVxdWlyZWpzCisg
IH07CisKKyAgcmVxdWlyZWpzID0gcmVxdWlyZSA9IHJlcXVpcmVNb2R1bGUgPSBmdW5jdGlvbiAo
bmFtZSkgeworICAgIHZhciBwZW5kaW5nID0gW107CisgICAgdmFyIG1vZCA9IGZpbmRNb2R1bGUo
bmFtZSwgJyhyZXF1aXJlKScsIHBlbmRpbmcpOworCisgICAgZm9yICh2YXIgaSA9IHBlbmRpbmcu
bGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgIHBlbmRpbmdbaV0uZXhwb3J0cygpOwor
ICAgIH0KKworICAgIHJldHVybiBtb2QubW9kdWxlLmV4cG9ydHM7CisgIH07CisKKyAgbG9hZGVy
ID0geworICAgIG5vQ29uZmxpY3Q6IGZ1bmN0aW9uIChhbGlhc2VzKSB7CisgICAgICB2YXIgb2xk
TmFtZSwgbmV3TmFtZTsKKworICAgICAgZm9yIChvbGROYW1lIGluIGFsaWFzZXMpIHsKKyAgICAg
ICAgaWYgKGFsaWFzZXMuaGFzT3duUHJvcGVydHkob2xkTmFtZSkpIHsKKyAgICAgICAgICBpZiAo
b2xkR2xvYmFscy5oYXNPd25Qcm9wZXJ0eShvbGROYW1lKSkgeworICAgICAgICAgICAgbmV3TmFt
ZSA9IGFsaWFzZXNbb2xkTmFtZV07CisKKyAgICAgICAgICAgIGdsb2JhbFtuZXdOYW1lXSA9IGds
b2JhbFtvbGROYW1lXTsKKyAgICAgICAgICAgIGdsb2JhbFtvbGROYW1lXSA9IG9sZEdsb2JhbHNb
b2xkTmFtZV07CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9Owor
CisgIHZhciBfaXNBcnJheTsKKyAgaWYgKCFBcnJheS5pc0FycmF5KSB7CisgICAgX2lzQXJyYXkg
PSBmdW5jdGlvbiAoeCkgeworICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcu
Y2FsbCh4KSA9PT0gJ1tvYmplY3QgQXJyYXldJzsKKyAgICB9OworICB9IGVsc2UgeworICAgIF9p
c0FycmF5ID0gQXJyYXkuaXNBcnJheTsKKyAgfQorCisgIHZhciByZWdpc3RyeSA9IGRpY3QoKTsK
KyAgdmFyIHNlZW4gPSBkaWN0KCk7CisKKyAgdmFyIHV1aWQgPSAwOworCisgIGZ1bmN0aW9uIHVu
c3VwcG9ydGVkTW9kdWxlKGxlbmd0aCkgeworICAgIHRocm93IG5ldyBFcnJvcignYW4gdW5zdXBw
b3J0ZWQgbW9kdWxlIHdhcyBkZWZpbmVkLCBleHBlY3RlZCBgZGVmaW5lKG5hbWUsIGRlcHMsIG1v
ZHVsZSlgIGluc3RlYWQgZ290OiBgJyArIGxlbmd0aCArICdgIGFyZ3VtZW50cyB0byBkZWZpbmVg
Jyk7CisgIH0KKworICB2YXIgZGVmYXVsdERlcHMgPSBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdt
b2R1bGUnXTsKKworICBmdW5jdGlvbiBNb2R1bGUobmFtZSwgZGVwcywgY2FsbGJhY2ssIGFsaWFz
KSB7CisgICAgdGhpcy5pZCA9IHV1aWQrKzsKKyAgICB0aGlzLm5hbWUgPSBuYW1lOworICAgIHRo
aXMuZGVwcyA9ICFkZXBzLmxlbmd0aCAmJiBjYWxsYmFjay5sZW5ndGggPyBkZWZhdWx0RGVwcyA6
IGRlcHM7CisgICAgdGhpcy5tb2R1bGUgPSB7IGV4cG9ydHM6IHt9IH07CisgICAgdGhpcy5jYWxs
YmFjayA9IGNhbGxiYWNrOworICAgIHRoaXMuaGFzRXhwb3J0c0FzRGVwID0gZmFsc2U7CisgICAg
dGhpcy5pc0FsaWFzID0gYWxpYXM7CisgICAgdGhpcy5yZWlmaWVkID0gbmV3IEFycmF5KGRlcHMu
bGVuZ3RoKTsKKworICAgIC8qCisgICAgICAgRWFjaCBtb2R1bGUgbm9ybWFsbHkgcGFzc2VzIHRo
cm91Z2ggdGhlc2Ugc3RhdGVzLCBpbiBvcmRlcjoKKyAgICAgICAgIG5ldyAgICAgICA6IGluaXRp
YWwgc3RhdGUKKyAgICAgICAgIHBlbmRpbmcgICA6IHRoaXMgbW9kdWxlIGlzIHNjaGVkdWxlZCB0
byBiZSBleGVjdXRlZAorICAgICAgICAgcmVpZnlpbmcgIDogdGhpcyBtb2R1bGUncyBkZXBlbmRl
bmNpZXMgYXJlIGJlaW5nIGV4ZWN1dGVkCisgICAgICAgICByZWlmaWVkICAgOiB0aGlzIG1vZHVs
ZSdzIGRlcGVuZGVuY2llcyBmaW5pc2hlZCBleGVjdXRpbmcgc3VjY2Vzc2Z1bGx5CisgICAgICAg
ICBlcnJvcmVkICAgOiB0aGlzIG1vZHVsZSdzIGRlcGVuZGVuY2llcyBmYWlsZWQgdG8gZXhlY3V0
ZQorICAgICAgICAgZmluYWxpemVkIDogdGhpcyBtb2R1bGUgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5
CisgICAgICovCisgICAgdGhpcy5zdGF0ZSA9ICduZXcnOworICB9CisKKyAgTW9kdWxlLnByb3Rv
dHlwZS5tYWtlRGVmYXVsdEV4cG9ydCA9IGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgZXhwb3J0cyA9
IHRoaXMubW9kdWxlLmV4cG9ydHM7CisgICAgaWYgKGV4cG9ydHMgIT09IG51bGwgJiYgKHR5cGVv
ZiBleHBvcnRzID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgZXhwb3J0cyA9PT0gJ2Z1bmN0aW9uJykg
JiYgZXhwb3J0c1snZGVmYXVsdCddID09PSB1bmRlZmluZWQgJiYgT2JqZWN0LmlzRXh0ZW5zaWJs
ZShleHBvcnRzKSkgeworICAgICAgZXhwb3J0c1snZGVmYXVsdCddID0gZXhwb3J0czsKKyAgICB9
CisgIH07CisKKyAgTW9kdWxlLnByb3RvdHlwZS5leHBvcnRzID0gZnVuY3Rpb24gKCkgeworICAg
IC8vIGlmIGZpbmFsaXplZCwgdGhlcmUgaXMgbm8gd29yayB0byBkby4gSWYgcmVpZnlpbmcsIHRo
ZXJlIGlzIGEKKyAgICAvLyBjaXJjdWxhciBkZXBlbmRlbmN5IHNvIHdlIG11c3QgcmV0dXJuIG91
ciAocGFydGlhbCkgZXhwb3J0cy4KKyAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ2ZpbmFsaXplZCcg
fHwgdGhpcy5zdGF0ZSA9PT0gJ3JlaWZ5aW5nJykgeworICAgICAgcmV0dXJuIHRoaXMubW9kdWxl
LmV4cG9ydHM7CisgICAgfQorCisgICAgaWYgKGxvYWRlci53cmFwTW9kdWxlcykgeworICAgICAg
dGhpcy5jYWxsYmFjayA9IGxvYWRlci53cmFwTW9kdWxlcyh0aGlzLm5hbWUsIHRoaXMuY2FsbGJh
Y2spOworICAgIH0KKworICAgIHRoaXMucmVpZnkoKTsKKworICAgIHZhciByZXN1bHQgPSB0aGlz
LmNhbGxiYWNrLmFwcGx5KHRoaXMsIHRoaXMucmVpZmllZCk7CisgICAgdGhpcy5zdGF0ZSA9ICdm
aW5hbGl6ZWQnOworCisgICAgaWYgKCEodGhpcy5oYXNFeHBvcnRzQXNEZXAgJiYgcmVzdWx0ID09
PSB1bmRlZmluZWQpKSB7CisgICAgICB0aGlzLm1vZHVsZS5leHBvcnRzID0gcmVzdWx0OworICAg
IH0KKyAgICB0aGlzLm1ha2VEZWZhdWx0RXhwb3J0KCk7CisgICAgcmV0dXJuIHRoaXMubW9kdWxl
LmV4cG9ydHM7CisgIH07CisKKyAgTW9kdWxlLnByb3RvdHlwZS51bnNlZSA9IGZ1bmN0aW9uICgp
IHsKKyAgICB0aGlzLnN0YXRlID0gJ25ldyc7CisgICAgdGhpcy5tb2R1bGUgPSB7IGV4cG9ydHM6
IHt9IH07CisgIH07CisKKyAgTW9kdWxlLnByb3RvdHlwZS5yZWlmeSA9IGZ1bmN0aW9uICgpIHsK
KyAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ3JlaWZpZWQnKSB7CisgICAgICByZXR1cm47CisgICAg
fQorICAgIHRoaXMuc3RhdGUgPSAncmVpZnlpbmcnOworICAgIHRyeSB7CisgICAgICB0aGlzLnJl
aWZpZWQgPSB0aGlzLl9yZWlmeSgpOworICAgICAgdGhpcy5zdGF0ZSA9ICdyZWlmaWVkJzsKKyAg
ICB9IGZpbmFsbHkgeworICAgICAgaWYgKHRoaXMuc3RhdGUgPT09ICdyZWlmeWluZycpIHsKKyAg
ICAgICAgdGhpcy5zdGF0ZSA9ICdlcnJvcmVkJzsKKyAgICAgIH0KKyAgICB9CisgIH07CisKKyAg
TW9kdWxlLnByb3RvdHlwZS5fcmVpZnkgPSBmdW5jdGlvbiAoKSB7CisgICAgdmFyIHJlaWZpZWQg
PSB0aGlzLnJlaWZpZWQuc2xpY2UoKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlaWZpZWQu
bGVuZ3RoOyBpKyspIHsKKyAgICAgIHZhciBtb2QgPSByZWlmaWVkW2ldOworICAgICAgcmVpZmll
ZFtpXSA9IG1vZC5leHBvcnRzID8gbW9kLmV4cG9ydHMgOiBtb2QubW9kdWxlLmV4cG9ydHMoKTsK
KyAgICB9CisgICAgcmV0dXJuIHJlaWZpZWQ7CisgIH07CisKKyAgTW9kdWxlLnByb3RvdHlwZS5m
aW5kRGVwcyA9IGZ1bmN0aW9uIChwZW5kaW5nKSB7CisgICAgaWYgKHRoaXMuc3RhdGUgIT09ICdu
ZXcnKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgdGhpcy5zdGF0ZSA9ICdwZW5kaW5n
JzsKKworICAgIHZhciBkZXBzID0gdGhpcy5kZXBzOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBkZXBzLmxlbmd0aDsgaSsrKSB7CisgICAgICB2YXIgZGVwID0gZGVwc1tpXTsKKyAgICAgIHZh
ciBlbnRyeSA9IHRoaXMucmVpZmllZFtpXSA9IHsgZXhwb3J0czogdW5kZWZpbmVkLCBtb2R1bGU6
IHVuZGVmaW5lZCB9OworICAgICAgaWYgKGRlcCA9PT0gJ2V4cG9ydHMnKSB7CisgICAgICAgIHRo
aXMuaGFzRXhwb3J0c0FzRGVwID0gdHJ1ZTsKKyAgICAgICAgZW50cnkuZXhwb3J0cyA9IHRoaXMu
bW9kdWxlLmV4cG9ydHM7CisgICAgICB9IGVsc2UgaWYgKGRlcCA9PT0gJ3JlcXVpcmUnKSB7Cisg
ICAgICAgIGVudHJ5LmV4cG9ydHMgPSB0aGlzLm1ha2VSZXF1aXJlKCk7CisgICAgICB9IGVsc2Ug
aWYgKGRlcCA9PT0gJ21vZHVsZScpIHsKKyAgICAgICAgZW50cnkuZXhwb3J0cyA9IHRoaXMubW9k
dWxlOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZW50cnkubW9kdWxlID0gZmluZE1vZHVsZShy
ZXNvbHZlKGRlcCwgdGhpcy5uYW1lKSwgdGhpcy5uYW1lLCBwZW5kaW5nKTsKKyAgICAgIH0KKyAg
ICB9CisgIH07CisKKyAgTW9kdWxlLnByb3RvdHlwZS5tYWtlUmVxdWlyZSA9IGZ1bmN0aW9uICgp
IHsKKyAgICB2YXIgbmFtZSA9IHRoaXMubmFtZTsKKyAgICB2YXIgciA9IGZ1bmN0aW9uIChkZXAp
IHsKKyAgICAgIHJldHVybiByZXF1aXJlKHJlc29sdmUoZGVwLCBuYW1lKSk7CisgICAgfTsKKyAg
ICByWydkZWZhdWx0J10gPSByOworICAgIHIuaGFzID0gZnVuY3Rpb24gKGRlcCkgeworICAgICAg
cmV0dXJuIGhhcyhyZXNvbHZlKGRlcCwgbmFtZSkpOworICAgIH07CisgICAgcmV0dXJuIHI7Cisg
IH07CisKKyAgZGVmaW5lID0gZnVuY3Rpb24gKG5hbWUsIGRlcHMsIGNhbGxiYWNrKSB7CisgICAg
dmFyIG1vZHVsZSA9IHJlZ2lzdHJ5W25hbWVdOworCisgICAgLy8gSWYgYSBtb2R1bGUgZm9yIHRo
aXMgbmFtZSBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQgYW5kIGlzIGluIGFueSBzdGF0ZQorICAg
IC8vIG90aGVyIHRoYW4gYG5ld2AgKG1lYW5pbmcgaXQgaGFzIGJlZW4gb3IgaXMgY3VycmVudGx5
IGJlaW5nIHJlcXVpcmVkKSwKKyAgICAvLyB0aGVuIHdlIHJldHVybiBlYXJseSB0byBhdm9pZCBy
ZWRlZmluaXRpb24uCisgICAgaWYgKG1vZHVsZSAmJiBtb2R1bGUuc3RhdGUgIT09ICduZXcnKSB7
CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7
CisgICAgICB1bnN1cHBvcnRlZE1vZHVsZShhcmd1bWVudHMubGVuZ3RoKTsKKyAgICB9CisKKyAg
ICBpZiAoIV9pc0FycmF5KGRlcHMpKSB7CisgICAgICBjYWxsYmFjayA9IGRlcHM7CisgICAgICBk
ZXBzID0gW107CisgICAgfQorCisgICAgaWYgKGNhbGxiYWNrIGluc3RhbmNlb2YgQWxpYXMpIHsK
KyAgICAgIHJlZ2lzdHJ5W25hbWVdID0gbmV3IE1vZHVsZShjYWxsYmFjay5uYW1lLCBkZXBzLCBj
YWxsYmFjaywgdHJ1ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJlZ2lzdHJ5W25hbWVdID0gbmV3
IE1vZHVsZShuYW1lLCBkZXBzLCBjYWxsYmFjaywgZmFsc2UpOworICAgIH0KKyAgfTsKKworICAv
LyB3ZSBkb24ndCBzdXBwb3J0IGFsbCBvZiBBTUQKKyAgLy8gZGVmaW5lLmFtZCA9IHt9OworCisg
IGZ1bmN0aW9uIEFsaWFzKHBhdGgpIHsKKyAgICB0aGlzLm5hbWUgPSBwYXRoOworICB9CisKKyAg
ZGVmaW5lLmFsaWFzID0gZnVuY3Rpb24gKHBhdGgsIHRhcmdldCkgeworICAgIGlmIChhcmd1bWVu
dHMubGVuZ3RoID09PSAyKSB7CisgICAgICByZXR1cm4gZGVmaW5lKHRhcmdldCwgbmV3IEFsaWFz
KHBhdGgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gbmV3IEFsaWFzKHBhdGgpOworICB9OworCisg
IGZ1bmN0aW9uIG1pc3NpbmdNb2R1bGUobmFtZSwgcmVmZXJyZXIpIHsKKyAgICB0aHJvdyBuZXcg
RXJyb3IoJ0NvdWxkIG5vdCBmaW5kIG1vZHVsZSBgJyArIG5hbWUgKyAnYCBpbXBvcnRlZCBmcm9t
IGAnICsgcmVmZXJyZXIgKyAnYCcpOworICB9CisKKyAgZnVuY3Rpb24gZmluZE1vZHVsZShuYW1l
LCByZWZlcnJlciwgcGVuZGluZykgeworICAgIHZhciBtb2QgPSByZWdpc3RyeVtuYW1lXSB8fCBy
ZWdpc3RyeVtuYW1lICsgJy9pbmRleCddOworCisgICAgd2hpbGUgKG1vZCAmJiBtb2QuaXNBbGlh
cykgeworICAgICAgbW9kID0gcmVnaXN0cnlbbW9kLm5hbWVdOworICAgIH0KKworICAgIGlmICgh
bW9kKSB7CisgICAgICBtaXNzaW5nTW9kdWxlKG5hbWUsIHJlZmVycmVyKTsKKyAgICB9CisKKyAg
ICBpZiAocGVuZGluZyAmJiBtb2Quc3RhdGUgIT09ICdwZW5kaW5nJyAmJiBtb2Quc3RhdGUgIT09
ICdmaW5hbGl6ZWQnKSB7CisgICAgICBtb2QuZmluZERlcHMocGVuZGluZyk7CisgICAgICBwZW5k
aW5nLnB1c2gobW9kKTsKKyAgICB9CisgICAgcmV0dXJuIG1vZDsKKyAgfQorCisgIGZ1bmN0aW9u
IHJlc29sdmUoY2hpbGQsIG5hbWUpIHsKKyAgICBpZiAoY2hpbGQuY2hhckF0KDApICE9PSAnLicp
IHsKKyAgICAgIHJldHVybiBjaGlsZDsKKyAgICB9CisKKyAgICB2YXIgcGFydHMgPSBjaGlsZC5z
cGxpdCgnLycpOworICAgIHZhciBuYW1lUGFydHMgPSBuYW1lLnNwbGl0KCcvJyk7CisgICAgdmFy
IHBhcmVudEJhc2UgPSBuYW1lUGFydHMuc2xpY2UoMCwgLTEpOworCisgICAgZm9yICh2YXIgaSA9
IDAsIGwgPSBwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKKyAgICAgIHZhciBwYXJ0ID0gcGFy
dHNbaV07CisKKyAgICAgIGlmIChwYXJ0ID09PSAnLi4nKSB7CisgICAgICAgIGlmIChwYXJlbnRC
YXNlLmxlbmd0aCA9PT0gMCkgeworICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGFj
Y2VzcyBwYXJlbnQgbW9kdWxlIG9mIHJvb3QnKTsKKyAgICAgICAgfQorICAgICAgICBwYXJlbnRC
YXNlLnBvcCgpOworICAgICAgfSBlbHNlIGlmIChwYXJ0ID09PSAnLicpIHsKKyAgICAgICAgY29u
dGludWU7CisgICAgICB9IGVsc2UgeworICAgICAgICBwYXJlbnRCYXNlLnB1c2gocGFydCk7Cisg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHBhcmVudEJhc2Uuam9pbignLycpOworICB9CisK
KyAgZnVuY3Rpb24gaGFzKG5hbWUpIHsKKyAgICByZXR1cm4gISEocmVnaXN0cnlbbmFtZV0gfHwg
cmVnaXN0cnlbbmFtZSArICcvaW5kZXgnXSk7CisgIH0KKworICByZXF1aXJlanMuZW50cmllcyA9
IHJlcXVpcmVqcy5fZWFrX3NlZW4gPSByZWdpc3RyeTsKKyAgcmVxdWlyZWpzLmhhcyA9IGhhczsK
KyAgcmVxdWlyZWpzLnVuc2VlID0gZnVuY3Rpb24gKG1vZHVsZU5hbWUpIHsKKyAgICBmaW5kTW9k
dWxlKG1vZHVsZU5hbWUsICcodW5zZWUpJywgZmFsc2UpLnVuc2VlKCk7CisgIH07CisKKyAgcmVx
dWlyZWpzLmNsZWFyID0gZnVuY3Rpb24gKCkgeworICAgIHJlcXVpcmVqcy5lbnRyaWVzID0gcmVx
dWlyZWpzLl9lYWtfc2VlbiA9IHJlZ2lzdHJ5ID0gZGljdCgpOworICAgIHNlZW4gPSBkaWN0KCk7
CisgIH07CisKKyAgLy8gVGhpcyBjb2RlIHByaW1lcyB0aGUgSlMgZW5naW5lIGZvciBnb29kIHBl
cmZvcm1hbmNlIGJ5IHdhcm1pbmcgdGhlCisgIC8vIEpJVCBjb21waWxlciBmb3IgdGhlc2UgZnVu
Y3Rpb25zLgorICBkZWZpbmUoJ2ZvbycsIGZ1bmN0aW9uICgpIHt9KTsKKyAgZGVmaW5lKCdmb28v
YmFyJywgW10sIGZ1bmN0aW9uICgpIHt9KTsKKyAgZGVmaW5lKCdmb28vYXNkZicsIFsnbW9kdWxl
JywgJ2V4cG9ydHMnLCAncmVxdWlyZSddLCBmdW5jdGlvbiAobW9kdWxlLCBleHBvcnRzLCByZXF1
aXJlKSB7CisgICAgaWYgKHJlcXVpcmUuaGFzKCdmb28vYmFyJykpIHsKKyAgICAgIHJlcXVpcmUo
J2Zvby9iYXInKTsKKyAgICB9CisgIH0pOworICBkZWZpbmUoJ2Zvby9iYXonLCBbXSwgZGVmaW5l
LmFsaWFzKCdmb28nKSk7CisgIGRlZmluZSgnZm9vL3F1eicsIGRlZmluZS5hbGlhcygnZm9vJykp
OworICBkZWZpbmUuYWxpYXMoJ2ZvbycsICdmb28vcXV4Jyk7CisgIGRlZmluZSgnZm9vL2Jhcics
IFsnZm9vJywgJy4vcXV6JywgJy4vYmF6JywgJy4vYXNkZicsICcuL2JhcicsICcuLi9mb28nXSwg
ZnVuY3Rpb24gKCkge30pOworICBkZWZpbmUoJ2Zvby9tYWluJywgWydmb28vYmFyJ10sIGZ1bmN0
aW9uICgpIHt9KTsKKworICByZXF1aXJlKCdmb28vbWFpbicpOworICByZXF1aXJlLnVuc2VlKCdm
b28vYmFyJyk7CisKKyAgcmVxdWlyZWpzLmNsZWFyKCk7CisKKyAgaWYgKHR5cGVvZiBleHBvcnRz
ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhw
b3J0cykgeworICAgIG1vZHVsZS5leHBvcnRzID0geyByZXF1aXJlOiByZXF1aXJlLCBkZWZpbmU6
IGRlZmluZSB9OworICB9Cit9KSh0aGlzKTsKKzsvKiEKKyAqIGpRdWVyeSBKYXZhU2NyaXB0IExp
YnJhcnkgdjIuMi40CisgKiBodHRwOi8vanF1ZXJ5LmNvbS8KKyAqCisgKiBJbmNsdWRlcyBTaXp6
bGUuanMKKyAqIGh0dHA6Ly9zaXp6bGVqcy5jb20vCisgKgorICogQ29weXJpZ2h0IGpRdWVyeSBG
b3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMKKyAqIFJlbGVhc2VkIHVuZGVyIHRoZSBN
SVQgbGljZW5zZQorICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQorICoKKyAqIERhdGU6IDIw
MTYtMDUtMjBUMTc6MjNaCisgKi8KKworKGZ1bmN0aW9uKCBnbG9iYWwsIGZhY3RvcnkgKSB7CisK
KyAgICBpZiAoIHR5cGVvZiBtb2R1bGUgPT09ICJvYmplY3QiICYmIHR5cGVvZiBtb2R1bGUuZXhw
b3J0cyA9PT0gIm9iamVjdCIgKSB7CisgICAgICAgIC8vIEZvciBDb21tb25KUyBhbmQgQ29tbW9u
SlMtbGlrZSBlbnZpcm9ubWVudHMgd2hlcmUgYSBwcm9wZXIgYHdpbmRvd2AKKyAgICAgICAgLy8g
aXMgcHJlc2VudCwgZXhlY3V0ZSB0aGUgZmFjdG9yeSBhbmQgZ2V0IGpRdWVyeS4KKyAgICAgICAg
Ly8gRm9yIGVudmlyb25tZW50cyB0aGF0IGRvIG5vdCBoYXZlIGEgYHdpbmRvd2Agd2l0aCBhIGBk
b2N1bWVudGAKKyAgICAgICAgLy8gKHN1Y2ggYXMgTm9kZS5qcyksIGV4cG9zZSBhIGZhY3Rvcnkg
YXMgbW9kdWxlLmV4cG9ydHMuCisgICAgICAgIC8vIFRoaXMgYWNjZW50dWF0ZXMgdGhlIG5lZWQg
Zm9yIHRoZSBjcmVhdGlvbiBvZiBhIHJlYWwgYHdpbmRvd2AuCisgICAgICAgIC8vIGUuZy4gdmFy
IGpRdWVyeSA9IHJlcXVpcmUoImpxdWVyeSIpKHdpbmRvdyk7CisgICAgICAgIC8vIFNlZSB0aWNr
ZXQgIzE0NTQ5IGZvciBtb3JlIGluZm8uCisgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZ2xvYmFs
LmRvY3VtZW50ID8KKyAgICAgICAgICAgIGZhY3RvcnkoIGdsb2JhbCwgdHJ1ZSApIDoKKyAgICAg
ICAgICAgIGZ1bmN0aW9uKCB3ICkgeworICAgICAgICAgICAgICAgIGlmICggIXcuZG9jdW1lbnQg
KSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvciggImpRdWVyeSByZXF1aXJl
cyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnQiICk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWN0b3J5KCB3ICk7CisgICAgICAgICAgICB9OworICAgIH0gZWxz
ZSB7CisgICAgICAgIGZhY3RvcnkoIGdsb2JhbCApOworICAgIH0KKworLy8gUGFzcyB0aGlzIGlm
IHdpbmRvdyBpcyBub3QgZGVmaW5lZCB5ZXQKK30odHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5l
ZCIgPyB3aW5kb3cgOiB0aGlzLCBmdW5jdGlvbiggd2luZG93LCBub0dsb2JhbCApIHsKKworLy8g
U3VwcG9ydDogRmlyZWZveCAxOCsKKy8vIENhbid0IGJlIGluIHN0cmljdCBtb2RlLCBzZXZlcmFs
IGxpYnMgaW5jbHVkaW5nIEFTUC5ORVQgdHJhY2UKKy8vIHRoZSBzdGFjayB2aWEgYXJndW1lbnRz
LmNhbGxlci5jYWxsZWUgYW5kIEZpcmVmb3ggZGllcyBpZgorLy8geW91IHRyeSB0byB0cmFjZSB0
aHJvdWdoICJ1c2Ugc3RyaWN0IiBjYWxsIGNoYWlucy4gKCMxMzMzNSkKKy8vInVzZSBzdHJpY3Qi
OwordmFyIGFyciA9IFtdOworCit2YXIgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7CisKK3Zh
ciBzbGljZSA9IGFyci5zbGljZTsKKwordmFyIGNvbmNhdCA9IGFyci5jb25jYXQ7CisKK3ZhciBw
dXNoID0gYXJyLnB1c2g7CisKK3ZhciBpbmRleE9mID0gYXJyLmluZGV4T2Y7CisKK3ZhciBjbGFz
czJ0eXBlID0ge307CisKK3ZhciB0b1N0cmluZyA9IGNsYXNzMnR5cGUudG9TdHJpbmc7CisKK3Zh
ciBoYXNPd24gPSBjbGFzczJ0eXBlLmhhc093blByb3BlcnR5OworCit2YXIgc3VwcG9ydCA9IHt9
OworCisKKwordmFyCisgICAgdmVyc2lvbiA9ICIyLjIuNCIsCisKKyAgICAvLyBEZWZpbmUgYSBs
b2NhbCBjb3B5IG9mIGpRdWVyeQorICAgIGpRdWVyeSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29u
dGV4dCApIHsKKworICAgICAgICAvLyBUaGUgalF1ZXJ5IG9iamVjdCBpcyBhY3R1YWxseSBqdXN0
IHRoZSBpbml0IGNvbnN0cnVjdG9yICdlbmhhbmNlZCcKKyAgICAgICAgLy8gTmVlZCBpbml0IGlm
IGpRdWVyeSBpcyBjYWxsZWQgKGp1c3QgYWxsb3cgZXJyb3IgdG8gYmUgdGhyb3duIGlmIG5vdCBp
bmNsdWRlZCkKKyAgICAgICAgcmV0dXJuIG5ldyBqUXVlcnkuZm4uaW5pdCggc2VsZWN0b3IsIGNv
bnRleHQgKTsKKyAgICB9LAorCisgICAgLy8gU3VwcG9ydDogQW5kcm9pZDw0LjEKKyAgICAvLyBN
YWtlIHN1cmUgd2UgdHJpbSBCT00gYW5kIE5CU1AKKyAgICBydHJpbSA9IC9eW1xzXHVGRUZGXHhB
MF0rfFtcc1x1RkVGRlx4QTBdKyQvZywKKworICAgIC8vIE1hdGNoZXMgZGFzaGVkIHN0cmluZyBm
b3IgY2FtZWxpemluZworICAgIHJtc1ByZWZpeCA9IC9eLW1zLS8sCisgICAgcmRhc2hBbHBoYSA9
IC8tKFtcZGEtel0pL2dpLAorCisgICAgLy8gVXNlZCBieSBqUXVlcnkuY2FtZWxDYXNlIGFzIGNh
bGxiYWNrIHRvIHJlcGxhY2UoKQorICAgIGZjYW1lbENhc2UgPSBmdW5jdGlvbiggYWxsLCBsZXR0
ZXIgKSB7CisgICAgICAgIHJldHVybiBsZXR0ZXIudG9VcHBlckNhc2UoKTsKKyAgICB9OworCitq
UXVlcnkuZm4gPSBqUXVlcnkucHJvdG90eXBlID0geworCisgICAgLy8gVGhlIGN1cnJlbnQgdmVy
c2lvbiBvZiBqUXVlcnkgYmVpbmcgdXNlZAorICAgIGpxdWVyeTogdmVyc2lvbiwKKworICAgIGNv
bnN0cnVjdG9yOiBqUXVlcnksCisKKyAgICAvLyBTdGFydCB3aXRoIGFuIGVtcHR5IHNlbGVjdG9y
CisgICAgc2VsZWN0b3I6ICIiLAorCisgICAgLy8gVGhlIGRlZmF1bHQgbGVuZ3RoIG9mIGEgalF1
ZXJ5IG9iamVjdCBpcyAwCisgICAgbGVuZ3RoOiAwLAorCisgICAgdG9BcnJheTogZnVuY3Rpb24o
KSB7CisgICAgICAgIHJldHVybiBzbGljZS5jYWxsKCB0aGlzICk7CisgICAgfSwKKworICAgIC8v
IEdldCB0aGUgTnRoIGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgZWxlbWVudCBzZXQgT1IKKyAgICAv
LyBHZXQgdGhlIHdob2xlIG1hdGNoZWQgZWxlbWVudCBzZXQgYXMgYSBjbGVhbiBhcnJheQorICAg
IGdldDogZnVuY3Rpb24oIG51bSApIHsKKyAgICAgICAgcmV0dXJuIG51bSAhPSBudWxsID8KKwor
ICAgICAgICAgICAgLy8gUmV0dXJuIGp1c3QgdGhlIG9uZSBlbGVtZW50IGZyb20gdGhlIHNldAor
ICAgICAgICAgICAgKCBudW0gPCAwID8gdGhpc1sgbnVtICsgdGhpcy5sZW5ndGggXSA6IHRoaXNb
IG51bSBdICkgOgorCisgICAgICAgICAgICAvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyBpbiBh
IGNsZWFuIGFycmF5CisgICAgICAgICAgICBzbGljZS5jYWxsKCB0aGlzICk7CisgICAgfSwKKwor
ICAgIC8vIFRha2UgYW4gYXJyYXkgb2YgZWxlbWVudHMgYW5kIHB1c2ggaXQgb250byB0aGUgc3Rh
Y2sKKyAgICAvLyAocmV0dXJuaW5nIHRoZSBuZXcgbWF0Y2hlZCBlbGVtZW50IHNldCkKKyAgICBw
dXNoU3RhY2s6IGZ1bmN0aW9uKCBlbGVtcyApIHsKKworICAgICAgICAvLyBCdWlsZCBhIG5ldyBq
UXVlcnkgbWF0Y2hlZCBlbGVtZW50IHNldAorICAgICAgICB2YXIgcmV0ID0galF1ZXJ5Lm1lcmdl
KCB0aGlzLmNvbnN0cnVjdG9yKCksIGVsZW1zICk7CisKKyAgICAgICAgLy8gQWRkIHRoZSBvbGQg
b2JqZWN0IG9udG8gdGhlIHN0YWNrIChhcyBhIHJlZmVyZW5jZSkKKyAgICAgICAgcmV0LnByZXZP
YmplY3QgPSB0aGlzOworICAgICAgICByZXQuY29udGV4dCA9IHRoaXMuY29udGV4dDsKKworICAg
ICAgICAvLyBSZXR1cm4gdGhlIG5ld2x5LWZvcm1lZCBlbGVtZW50IHNldAorICAgICAgICByZXR1
cm4gcmV0OworICAgIH0sCisKKyAgICAvLyBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGV2ZXJ5IGVs
ZW1lbnQgaW4gdGhlIG1hdGNoZWQgc2V0LgorICAgIGVhY2g6IGZ1bmN0aW9uKCBjYWxsYmFjayAp
IHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5lYWNoKCB0aGlzLCBjYWxsYmFjayApOworICAgIH0s
CisKKyAgICBtYXA6IGZ1bmN0aW9uKCBjYWxsYmFjayApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
cHVzaFN0YWNrKCBqUXVlcnkubWFwKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgaSApIHsKKyAgICAg
ICAgICAgIHJldHVybiBjYWxsYmFjay5jYWxsKCBlbGVtLCBpLCBlbGVtICk7CisgICAgICAgIH0g
KSApOworICAgIH0sCisKKyAgICBzbGljZTogZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0
aGlzLnB1c2hTdGFjayggc2xpY2UuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApICk7CisgICAgfSwK
KworICAgIGZpcnN0OiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZXEoIDAgKTsK
KyAgICB9LAorCisgICAgbGFzdDogZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLmVx
KCAtMSApOworICAgIH0sCisKKyAgICBlcTogZnVuY3Rpb24oIGkgKSB7CisgICAgICAgIHZhciBs
ZW4gPSB0aGlzLmxlbmd0aCwKKyAgICAgICAgICAgIGogPSAraSArICggaSA8IDAgPyBsZW4gOiAw
ICk7CisgICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggaiA+PSAwICYmIGogPCBsZW4gPyBb
IHRoaXNbIGogXSBdIDogW10gKTsKKyAgICB9LAorCisgICAgZW5kOiBmdW5jdGlvbigpIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMucHJldk9iamVjdCB8fCB0aGlzLmNvbnN0cnVjdG9yKCk7CisgICAg
fSwKKworICAgIC8vIEZvciBpbnRlcm5hbCB1c2Ugb25seS4KKyAgICAvLyBCZWhhdmVzIGxpa2Ug
YW4gQXJyYXkncyBtZXRob2QsIG5vdCBsaWtlIGEgalF1ZXJ5IG1ldGhvZC4KKyAgICBwdXNoOiBw
dXNoLAorICAgIHNvcnQ6IGFyci5zb3J0LAorICAgIHNwbGljZTogYXJyLnNwbGljZQorfTsKKwor
alF1ZXJ5LmV4dGVuZCA9IGpRdWVyeS5mbi5leHRlbmQgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIg
b3B0aW9ucywgbmFtZSwgc3JjLCBjb3B5LCBjb3B5SXNBcnJheSwgY2xvbmUsCisgICAgICAgIHRh
cmdldCA9IGFyZ3VtZW50c1sgMCBdIHx8IHt9LAorICAgICAgICBpID0gMSwKKyAgICAgICAgbGVu
Z3RoID0gYXJndW1lbnRzLmxlbmd0aCwKKyAgICAgICAgZGVlcCA9IGZhbHNlOworCisgICAgLy8g
SGFuZGxlIGEgZGVlcCBjb3B5IHNpdHVhdGlvbgorICAgIGlmICggdHlwZW9mIHRhcmdldCA9PT0g
ImJvb2xlYW4iICkgeworICAgICAgICBkZWVwID0gdGFyZ2V0OworCisgICAgICAgIC8vIFNraXAg
dGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXQKKyAgICAgICAgdGFyZ2V0ID0gYXJndW1lbnRzWyBp
IF0gfHwge307CisgICAgICAgIGkrKzsKKyAgICB9CisKKyAgICAvLyBIYW5kbGUgY2FzZSB3aGVu
IHRhcmdldCBpcyBhIHN0cmluZyBvciBzb21ldGhpbmcgKHBvc3NpYmxlIGluIGRlZXAgY29weSkK
KyAgICBpZiAoIHR5cGVvZiB0YXJnZXQgIT09ICJvYmplY3QiICYmICFqUXVlcnkuaXNGdW5jdGlv
biggdGFyZ2V0ICkgKSB7CisgICAgICAgIHRhcmdldCA9IHt9OworICAgIH0KKworICAgIC8vIEV4
dGVuZCBqUXVlcnkgaXRzZWxmIGlmIG9ubHkgb25lIGFyZ3VtZW50IGlzIHBhc3NlZAorICAgIGlm
ICggaSA9PT0gbGVuZ3RoICkgeworICAgICAgICB0YXJnZXQgPSB0aGlzOworICAgICAgICBpLS07
CisgICAgfQorCisgICAgZm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7CisKKyAgICAgICAgLy8g
T25seSBkZWFsIHdpdGggbm9uLW51bGwvdW5kZWZpbmVkIHZhbHVlcworICAgICAgICBpZiAoICgg
b3B0aW9ucyA9IGFyZ3VtZW50c1sgaSBdICkgIT0gbnVsbCApIHsKKworICAgICAgICAgICAgLy8g
RXh0ZW5kIHRoZSBiYXNlIG9iamVjdAorICAgICAgICAgICAgZm9yICggbmFtZSBpbiBvcHRpb25z
ICkgeworICAgICAgICAgICAgICAgIHNyYyA9IHRhcmdldFsgbmFtZSBdOworICAgICAgICAgICAg
ICAgIGNvcHkgPSBvcHRpb25zWyBuYW1lIF07CisKKyAgICAgICAgICAgICAgICAvLyBQcmV2ZW50
IG5ldmVyLWVuZGluZyBsb29wCisgICAgICAgICAgICAgICAgaWYgKCB0YXJnZXQgPT09IGNvcHkg
KSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIC8vIFJlY3Vyc2UgaWYgd2UncmUgbWVyZ2luZyBwbGFpbiBvYmplY3Rz
IG9yIGFycmF5cworICAgICAgICAgICAgICAgIGlmICggZGVlcCAmJiBjb3B5ICYmICggalF1ZXJ5
LmlzUGxhaW5PYmplY3QoIGNvcHkgKSB8fAorICAgICAgICAgICAgICAgICAgICAoIGNvcHlJc0Fy
cmF5ID0galF1ZXJ5LmlzQXJyYXkoIGNvcHkgKSApICkgKSB7CisKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCBjb3B5SXNBcnJheSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlJc0Fy
cmF5ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBjbG9uZSA9IHNyYyAmJiBqUXVl
cnkuaXNBcnJheSggc3JjICkgPyBzcmMgOiBbXTsKKworICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmUgPSBzcmMgJiYgalF1ZXJ5LmlzUGxh
aW5PYmplY3QoIHNyYyApID8gc3JjIDoge307CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICAvLyBOZXZlciBtb3ZlIG9yaWdpbmFsIG9iamVjdHMsIGNsb25lIHRo
ZW0KKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0WyBuYW1lIF0gPSBqUXVlcnkuZXh0ZW5kKCBk
ZWVwLCBjbG9uZSwgY29weSApOworCisgICAgICAgICAgICAgICAgLy8gRG9uJ3QgYnJpbmcgaW4g
dW5kZWZpbmVkIHZhbHVlcworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGNvcHkgIT09IHVu
ZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0WyBuYW1lIF0gPSBjb3B5Owor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vIFJldHVybiB0aGUgbW9kaWZpZWQgb2JqZWN0CisgICAgcmV0dXJuIHRhcmdldDsKK307CisK
K2pRdWVyeS5leHRlbmQoIHsKKworICAgIC8vIFVuaXF1ZSBmb3IgZWFjaCBjb3B5IG9mIGpRdWVy
eSBvbiB0aGUgcGFnZQorICAgIGV4cGFuZG86ICJqUXVlcnkiICsgKCB2ZXJzaW9uICsgTWF0aC5y
YW5kb20oKSApLnJlcGxhY2UoIC9cRC9nLCAiIiApLAorCisgICAgLy8gQXNzdW1lIGpRdWVyeSBp
cyByZWFkeSB3aXRob3V0IHRoZSByZWFkeSBtb2R1bGUKKyAgICBpc1JlYWR5OiB0cnVlLAorCisg
ICAgZXJyb3I6IGZ1bmN0aW9uKCBtc2cgKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvciggbXNn
ICk7CisgICAgfSwKKworICAgIG5vb3A6IGZ1bmN0aW9uKCkge30sCisKKyAgICBpc0Z1bmN0aW9u
OiBmdW5jdGlvbiggb2JqICkgeworICAgICAgICByZXR1cm4galF1ZXJ5LnR5cGUoIG9iaiApID09
PSAiZnVuY3Rpb24iOworICAgIH0sCisKKyAgICBpc0FycmF5OiBBcnJheS5pc0FycmF5LAorCisg
ICAgaXNXaW5kb3c6IGZ1bmN0aW9uKCBvYmogKSB7CisgICAgICAgIHJldHVybiBvYmogIT0gbnVs
bCAmJiBvYmogPT09IG9iai53aW5kb3c7CisgICAgfSwKKworICAgIGlzTnVtZXJpYzogZnVuY3Rp
b24oIG9iaiApIHsKKworICAgICAgICAvLyBwYXJzZUZsb2F0IE5hTnMgbnVtZXJpYy1jYXN0IGZh
bHNlIHBvc2l0aXZlcyAobnVsbHx0cnVlfGZhbHNlfCIiKQorICAgICAgICAvLyAuLi5idXQgbWlz
aW50ZXJwcmV0cyBsZWFkaW5nLW51bWJlciBzdHJpbmdzLCBwYXJ0aWN1bGFybHkgaGV4IGxpdGVy
YWxzICgiMHguLi4iKQorICAgICAgICAvLyBzdWJ0cmFjdGlvbiBmb3JjZXMgaW5maW5pdGllcyB0
byBOYU4KKyAgICAgICAgLy8gYWRkaW5nIDEgY29ycmVjdHMgbG9zcyBvZiBwcmVjaXNpb24gZnJv
bSBwYXJzZUZsb2F0ICgjMTUxMDApCisgICAgICAgIHZhciByZWFsU3RyaW5nT2JqID0gb2JqICYm
IG9iai50b1N0cmluZygpOworICAgICAgICByZXR1cm4gIWpRdWVyeS5pc0FycmF5KCBvYmogKSAm
JiAoIHJlYWxTdHJpbmdPYmogLSBwYXJzZUZsb2F0KCByZWFsU3RyaW5nT2JqICkgKyAxICkgPj0g
MDsKKyAgICB9LAorCisgICAgaXNQbGFpbk9iamVjdDogZnVuY3Rpb24oIG9iaiApIHsKKyAgICAg
ICAgdmFyIGtleTsKKworICAgICAgICAvLyBOb3QgcGxhaW4gb2JqZWN0czoKKyAgICAgICAgLy8g
LSBBbnkgb2JqZWN0IG9yIHZhbHVlIHdob3NlIGludGVybmFsIFtbQ2xhc3NdXSBwcm9wZXJ0eSBp
cyBub3QgIltvYmplY3QgT2JqZWN0XSIKKyAgICAgICAgLy8gLSBET00gbm9kZXMKKyAgICAgICAg
Ly8gLSB3aW5kb3cKKyAgICAgICAgaWYgKCBqUXVlcnkudHlwZSggb2JqICkgIT09ICJvYmplY3Qi
IHx8IG9iai5ub2RlVHlwZSB8fCBqUXVlcnkuaXNXaW5kb3coIG9iaiApICkgeworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgLy8gTm90IG93biBjb25zdHJ1
Y3RvciBwcm9wZXJ0eSBtdXN0IGJlIE9iamVjdAorICAgICAgICBpZiAoIG9iai5jb25zdHJ1Y3Rv
ciAmJgorICAgICAgICAgICAgICAgICFoYXNPd24uY2FsbCggb2JqLCAiY29uc3RydWN0b3IiICkg
JiYKKyAgICAgICAgICAgICAgICAhaGFzT3duLmNhbGwoIG9iai5jb25zdHJ1Y3Rvci5wcm90b3R5
cGUgfHwge30sICJpc1Byb3RvdHlwZU9mIiApICkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisKKyAgICAgICAgLy8gT3duIHByb3BlcnRpZXMgYXJlIGVudW1lcmF0ZWQg
Zmlyc3RseSwgc28gdG8gc3BlZWQgdXAsCisgICAgICAgIC8vIGlmIGxhc3Qgb25lIGlzIG93biwg
dGhlbiBhbGwgcHJvcGVydGllcyBhcmUgb3duCisgICAgICAgIGZvciAoIGtleSBpbiBvYmogKSB7
fQorCisgICAgICAgIHJldHVybiBrZXkgPT09IHVuZGVmaW5lZCB8fCBoYXNPd24uY2FsbCggb2Jq
LCBrZXkgKTsKKyAgICB9LAorCisgICAgaXNFbXB0eU9iamVjdDogZnVuY3Rpb24oIG9iaiApIHsK
KyAgICAgICAgdmFyIG5hbWU7CisgICAgICAgIGZvciAoIG5hbWUgaW4gb2JqICkgeworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0sCisKKyAgICB0eXBlOiBmdW5jdGlvbiggb2JqICkgeworICAgICAgICBpZiAoIG9iaiA9PSBu
dWxsICkgeworICAgICAgICAgICAgcmV0dXJuIG9iaiArICIiOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gU3VwcG9ydDogQW5kcm9pZDw0LjAsIGlPUzw2IChmdW5jdGlvbmlzaCBSZWdFeHApCisg
ICAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSAib2JqZWN0IiB8fCB0eXBlb2Ygb2JqID09PSAi
ZnVuY3Rpb24iID8KKyAgICAgICAgICAgIGNsYXNzMnR5cGVbIHRvU3RyaW5nLmNhbGwoIG9iaiAp
IF0gfHwgIm9iamVjdCIgOgorICAgICAgICAgICAgdHlwZW9mIG9iajsKKyAgICB9LAorCisgICAg
Ly8gRXZhbHVhdGVzIGEgc2NyaXB0IGluIGEgZ2xvYmFsIGNvbnRleHQKKyAgICBnbG9iYWxFdmFs
OiBmdW5jdGlvbiggY29kZSApIHsKKyAgICAgICAgdmFyIHNjcmlwdCwKKyAgICAgICAgICAgIGlu
ZGlyZWN0ID0gZXZhbDsKKworICAgICAgICBjb2RlID0galF1ZXJ5LnRyaW0oIGNvZGUgKTsKKwor
ICAgICAgICBpZiAoIGNvZGUgKSB7CisKKyAgICAgICAgICAgIC8vIElmIHRoZSBjb2RlIGluY2x1
ZGVzIGEgdmFsaWQsIHByb2xvZ3VlIHBvc2l0aW9uCisgICAgICAgICAgICAvLyBzdHJpY3QgbW9k
ZSBwcmFnbWEsIGV4ZWN1dGUgY29kZSBieSBpbmplY3RpbmcgYQorICAgICAgICAgICAgLy8gc2Ny
aXB0IHRhZyBpbnRvIHRoZSBkb2N1bWVudC4KKyAgICAgICAgICAgIGlmICggY29kZS5pbmRleE9m
KCAidXNlIHN0cmljdCIgKSA9PT0gMSApIHsKKyAgICAgICAgICAgICAgICBzY3JpcHQgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCAic2NyaXB0IiApOworICAgICAgICAgICAgICAgIHNjcmlwdC50
ZXh0ID0gY29kZTsKKyAgICAgICAgICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKCBz
Y3JpcHQgKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBzY3JpcHQgKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisKKyAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIGF2b2lkIHRoZSBET00gbm9k
ZSBjcmVhdGlvbiwgaW5zZXJ0aW9uCisgICAgICAgICAgICAgICAgLy8gYW5kIHJlbW92YWwgYnkg
dXNpbmcgYW4gaW5kaXJlY3QgZ2xvYmFsIGV2YWwKKworICAgICAgICAgICAgICAgIGluZGlyZWN0
KCBjb2RlICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9LAorCisgICAgLy8gQ29u
dmVydCBkYXNoZWQgdG8gY2FtZWxDYXNlOyB1c2VkIGJ5IHRoZSBjc3MgYW5kIGRhdGEgbW9kdWxl
cworICAgIC8vIFN1cHBvcnQ6IElFOS0xMSsKKyAgICAvLyBNaWNyb3NvZnQgZm9yZ290IHRvIGh1
bXAgdGhlaXIgdmVuZG9yIHByZWZpeCAoIzk1NzIpCisgICAgY2FtZWxDYXNlOiBmdW5jdGlvbigg
c3RyaW5nICkgeworICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoIHJtc1ByZWZpeCwgIm1z
LSIgKS5yZXBsYWNlKCByZGFzaEFscGhhLCBmY2FtZWxDYXNlICk7CisgICAgfSwKKworICAgIG5v
ZGVOYW1lOiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsKKyAgICAgICAgcmV0dXJuIGVsZW0ubm9k
ZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lLnRvTG93ZXJDYXNl
KCk7CisgICAgfSwKKworICAgIGVhY2g6IGZ1bmN0aW9uKCBvYmosIGNhbGxiYWNrICkgeworICAg
ICAgICB2YXIgbGVuZ3RoLCBpID0gMDsKKworICAgICAgICBpZiAoIGlzQXJyYXlMaWtlKCBvYmog
KSApIHsKKyAgICAgICAgICAgIGxlbmd0aCA9IG9iai5sZW5ndGg7CisgICAgICAgICAgICBmb3Ig
KCA7IGkgPCBsZW5ndGg7IGkrKyApIHsKKyAgICAgICAgICAgICAgICBpZiAoIGNhbGxiYWNrLmNh
bGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSApID09PSBmYWxzZSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgZm9yICggaSBpbiBvYmogKSB7CisgICAgICAgICAgICAgICAg
aWYgKCBjYWxsYmFjay5jYWxsKCBvYmpbIGkgXSwgaSwgb2JqWyBpIF0gKSA9PT0gZmFsc2UgKSB7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBvYmo7CisgICAgfSwKKworICAgIC8v
IFN1cHBvcnQ6IEFuZHJvaWQ8NC4xCisgICAgdHJpbTogZnVuY3Rpb24oIHRleHQgKSB7CisgICAg
ICAgIHJldHVybiB0ZXh0ID09IG51bGwgPworICAgICAgICAgICAgIiIgOgorICAgICAgICAgICAg
KCB0ZXh0ICsgIiIgKS5yZXBsYWNlKCBydHJpbSwgIiIgKTsKKyAgICB9LAorCisgICAgLy8gcmVz
dWx0cyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seQorICAgIG1ha2VBcnJheTogZnVuY3Rpb24o
IGFyciwgcmVzdWx0cyApIHsKKyAgICAgICAgdmFyIHJldCA9IHJlc3VsdHMgfHwgW107CisKKyAg
ICAgICAgaWYgKCBhcnIgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIGlmICggaXNBcnJheUxpa2Uo
IE9iamVjdCggYXJyICkgKSApIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkubWVyZ2UoIHJldCwK
KyAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGFyciA9PT0gInN0cmluZyIgPworICAgICAgICAg
ICAgICAgICAgICBbIGFyciBdIDogYXJyCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHVzaC5jYWxsKCByZXQsIGFyciApOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9LAorCisgICAg
aW5BcnJheTogZnVuY3Rpb24oIGVsZW0sIGFyciwgaSApIHsKKyAgICAgICAgcmV0dXJuIGFyciA9
PSBudWxsID8gLTEgOiBpbmRleE9mLmNhbGwoIGFyciwgZWxlbSwgaSApOworICAgIH0sCisKKyAg
ICBtZXJnZTogZnVuY3Rpb24oIGZpcnN0LCBzZWNvbmQgKSB7CisgICAgICAgIHZhciBsZW4gPSAr
c2Vjb25kLmxlbmd0aCwKKyAgICAgICAgICAgIGogPSAwLAorICAgICAgICAgICAgaSA9IGZpcnN0
Lmxlbmd0aDsKKworICAgICAgICBmb3IgKCA7IGogPCBsZW47IGorKyApIHsKKyAgICAgICAgICAg
IGZpcnN0WyBpKysgXSA9IHNlY29uZFsgaiBdOworICAgICAgICB9CisKKyAgICAgICAgZmlyc3Qu
bGVuZ3RoID0gaTsKKworICAgICAgICByZXR1cm4gZmlyc3Q7CisgICAgfSwKKworICAgIGdyZXA6
IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGludmVydCApIHsKKyAgICAgICAgdmFyIGNhbGxi
YWNrSW52ZXJzZSwKKyAgICAgICAgICAgIG1hdGNoZXMgPSBbXSwKKyAgICAgICAgICAgIGkgPSAw
LAorICAgICAgICAgICAgbGVuZ3RoID0gZWxlbXMubGVuZ3RoLAorICAgICAgICAgICAgY2FsbGJh
Y2tFeHBlY3QgPSAhaW52ZXJ0OworCisgICAgICAgIC8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCBv
bmx5IHNhdmluZyB0aGUgaXRlbXMKKyAgICAgICAgLy8gdGhhdCBwYXNzIHRoZSB2YWxpZGF0b3Ig
ZnVuY3Rpb24KKyAgICAgICAgZm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7CisgICAgICAgICAg
ICBjYWxsYmFja0ludmVyc2UgPSAhY2FsbGJhY2soIGVsZW1zWyBpIF0sIGkgKTsKKyAgICAgICAg
ICAgIGlmICggY2FsbGJhY2tJbnZlcnNlICE9PSBjYWxsYmFja0V4cGVjdCApIHsKKyAgICAgICAg
ICAgICAgICBtYXRjaGVzLnB1c2goIGVsZW1zWyBpIF0gKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiBtYXRjaGVzOworICAgIH0sCisKKyAgICAvLyBhcmcgaXMg
Zm9yIGludGVybmFsIHVzYWdlIG9ubHkKKyAgICBtYXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJh
Y2ssIGFyZyApIHsKKyAgICAgICAgdmFyIGxlbmd0aCwgdmFsdWUsCisgICAgICAgICAgICBpID0g
MCwKKyAgICAgICAgICAgIHJldCA9IFtdOworCisgICAgICAgIC8vIEdvIHRocm91Z2ggdGhlIGFy
cmF5LCB0cmFuc2xhdGluZyBlYWNoIG9mIHRoZSBpdGVtcyB0byB0aGVpciBuZXcgdmFsdWVzCisg
ICAgICAgIGlmICggaXNBcnJheUxpa2UoIGVsZW1zICkgKSB7CisgICAgICAgICAgICBsZW5ndGgg
PSBlbGVtcy5sZW5ndGg7CisgICAgICAgICAgICBmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHsK
KyAgICAgICAgICAgICAgICB2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTsK
KworICAgICAgICAgICAgICAgIGlmICggdmFsdWUgIT0gbnVsbCApIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0LnB1c2goIHZhbHVlICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorCisgICAgICAgIC8vIEdvIHRocm91Z2ggZXZlcnkga2V5IG9uIHRoZSBvYmplY3QsCisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKCBpIGluIGVsZW1zICkgeworICAgICAgICAg
ICAgICAgIHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApOworCisgICAgICAg
ICAgICAgICAgaWYgKCB2YWx1ZSAhPSBudWxsICkgeworICAgICAgICAgICAgICAgICAgICByZXQu
cHVzaCggdmFsdWUgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICAvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzCisgICAgICAgIHJldHVy
biBjb25jYXQuYXBwbHkoIFtdLCByZXQgKTsKKyAgICB9LAorCisgICAgLy8gQSBnbG9iYWwgR1VJ
RCBjb3VudGVyIGZvciBvYmplY3RzCisgICAgZ3VpZDogMSwKKworICAgIC8vIEJpbmQgYSBmdW5j
dGlvbiB0byBhIGNvbnRleHQsIG9wdGlvbmFsbHkgcGFydGlhbGx5IGFwcGx5aW5nIGFueQorICAg
IC8vIGFyZ3VtZW50cy4KKyAgICBwcm94eTogZnVuY3Rpb24oIGZuLCBjb250ZXh0ICkgeworICAg
ICAgICB2YXIgdG1wLCBhcmdzLCBwcm94eTsKKworICAgICAgICBpZiAoIHR5cGVvZiBjb250ZXh0
ID09PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgIHRtcCA9IGZuWyBjb250ZXh0IF07CisgICAg
ICAgICAgICBjb250ZXh0ID0gZm47CisgICAgICAgICAgICBmbiA9IHRtcDsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIFF1aWNrIGNoZWNrIHRvIGRldGVybWluZSBpZiB0YXJnZXQgaXMgY2FsbGFi
bGUsIGluIHRoZSBzcGVjCisgICAgICAgIC8vIHRoaXMgdGhyb3dzIGEgVHlwZUVycm9yLCBidXQg
d2Ugd2lsbCBqdXN0IHJldHVybiB1bmRlZmluZWQuCisgICAgICAgIGlmICggIWpRdWVyeS5pc0Z1
bmN0aW9uKCBmbiApICkgeworICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIFNpbXVsYXRlZCBiaW5kCisgICAgICAgIGFyZ3MgPSBzbGljZS5jYWxs
KCBhcmd1bWVudHMsIDIgKTsKKyAgICAgICAgcHJveHkgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgIHJldHVybiBmbi5hcHBseSggY29udGV4dCB8fCB0aGlzLCBhcmdzLmNvbmNhdCggc2xpY2Uu
Y2FsbCggYXJndW1lbnRzICkgKSApOworICAgICAgICB9OworCisgICAgICAgIC8vIFNldCB0aGUg
Z3VpZCBvZiB1bmlxdWUgaGFuZGxlciB0byB0aGUgc2FtZSBvZiBvcmlnaW5hbCBoYW5kbGVyLCBz
byBpdCBjYW4gYmUgcmVtb3ZlZAorICAgICAgICBwcm94eS5ndWlkID0gZm4uZ3VpZCA9IGZuLmd1
aWQgfHwgalF1ZXJ5Lmd1aWQrKzsKKworICAgICAgICByZXR1cm4gcHJveHk7CisgICAgfSwKKwor
ICAgIG5vdzogRGF0ZS5ub3csCisKKyAgICAvLyBqUXVlcnkuc3VwcG9ydCBpcyBub3QgdXNlZCBp
biBDb3JlIGJ1dCBvdGhlciBwcm9qZWN0cyBhdHRhY2ggdGhlaXIKKyAgICAvLyBwcm9wZXJ0aWVz
IHRvIGl0IHNvIGl0IG5lZWRzIHRvIGV4aXN0LgorICAgIHN1cHBvcnQ6IHN1cHBvcnQKK30gKTsK
KworLy8gSlNIaW50IHdvdWxkIGVycm9yIG9uIHRoaXMgY29kZSBkdWUgdG8gdGhlIFN5bWJvbCBu
b3QgYmVpbmcgZGVmaW5lZCBpbiBFUzUuCisvLyBEZWZpbmluZyB0aGlzIGdsb2JhbCBpbiAuanNo
aW50cmMgd291bGQgY3JlYXRlIGEgZGFuZ2VyIG9mIHVzaW5nIHRoZSBnbG9iYWwKKy8vIHVuZ3Vh
cmRlZCBpbiBhbm90aGVyIHBsYWNlLCBpdCBzZWVtcyBzYWZlciB0byBqdXN0IGRpc2FibGUgSlNI
aW50IGZvciB0aGVzZQorLy8gdGhyZWUgbGluZXMuCisvKiBqc2hpbnQgaWdub3JlOiBzdGFydCAq
LworaWYgKCB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICkgeworICAgIGpRdWVyeS5mblsg
U3ltYm9sLml0ZXJhdG9yIF0gPSBhcnJbIFN5bWJvbC5pdGVyYXRvciBdOworfQorLyoganNoaW50
IGlnbm9yZTogZW5kICovCisKKy8vIFBvcHVsYXRlIHRoZSBjbGFzczJ0eXBlIG1hcAoralF1ZXJ5
LmVhY2goICJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAg
T2JqZWN0IEVycm9yIFN5bWJvbCIuc3BsaXQoICIgIiApLAorZnVuY3Rpb24oIGksIG5hbWUgKSB7
CisgICAgY2xhc3MydHlwZVsgIltvYmplY3QgIiArIG5hbWUgKyAiXSIgXSA9IG5hbWUudG9Mb3dl
ckNhc2UoKTsKK30gKTsKKworZnVuY3Rpb24gaXNBcnJheUxpa2UoIG9iaiApIHsKKworICAgIC8v
IFN1cHBvcnQ6IGlPUyA4LjIgKG5vdCByZXByb2R1Y2libGUgaW4gc2ltdWxhdG9yKQorICAgIC8v
IGBpbmAgY2hlY2sgdXNlZCB0byBwcmV2ZW50IEpJVCBlcnJvciAoZ2gtMjE0NSkKKyAgICAvLyBo
YXNPd24gaXNuJ3QgdXNlZCBoZXJlIGR1ZSB0byBmYWxzZSBuZWdhdGl2ZXMKKyAgICAvLyByZWdh
cmRpbmcgTm9kZWxpc3QgbGVuZ3RoIGluIElFCisgICAgdmFyIGxlbmd0aCA9ICEhb2JqICYmICJs
ZW5ndGgiIGluIG9iaiAmJiBvYmoubGVuZ3RoLAorICAgICAgICB0eXBlID0galF1ZXJ5LnR5cGUo
IG9iaiApOworCisgICAgaWYgKCB0eXBlID09PSAiZnVuY3Rpb24iIHx8IGpRdWVyeS5pc1dpbmRv
dyggb2JqICkgKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHlwZSA9PT0gImFycmF5IiB8fCBsZW5ndGggPT09IDAgfHwKKyAgICAgICAgdHlwZW9mIGxlbmd0
aCA9PT0gIm51bWJlciIgJiYgbGVuZ3RoID4gMCAmJiAoIGxlbmd0aCAtIDEgKSBpbiBvYmo7Cit9
Cit2YXIgU2l6emxlID0KKy8qIQorICogU2l6emxlIENTUyBTZWxlY3RvciBFbmdpbmUgdjIuMi4x
CisgKiBodHRwOi8vc2l6emxlanMuY29tLworICoKKyAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRh
dGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzCisgKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxp
Y2Vuc2UKKyAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2UKKyAqCisgKiBEYXRlOiAyMDE1LTEw
LTE3CisgKi8KKyhmdW5jdGlvbiggd2luZG93ICkgeworCit2YXIgaSwKKyAgICBzdXBwb3J0LAor
ICAgIEV4cHIsCisgICAgZ2V0VGV4dCwKKyAgICBpc1hNTCwKKyAgICB0b2tlbml6ZSwKKyAgICBj
b21waWxlLAorICAgIHNlbGVjdCwKKyAgICBvdXRlcm1vc3RDb250ZXh0LAorICAgIHNvcnRJbnB1
dCwKKyAgICBoYXNEdXBsaWNhdGUsCisKKyAgICAvLyBMb2NhbCBkb2N1bWVudCB2YXJzCisgICAg
c2V0RG9jdW1lbnQsCisgICAgZG9jdW1lbnQsCisgICAgZG9jRWxlbSwKKyAgICBkb2N1bWVudElz
SFRNTCwKKyAgICByYnVnZ3lRU0EsCisgICAgcmJ1Z2d5TWF0Y2hlcywKKyAgICBtYXRjaGVzLAor
ICAgIGNvbnRhaW5zLAorCisgICAgLy8gSW5zdGFuY2Utc3BlY2lmaWMgZGF0YQorICAgIGV4cGFu
ZG8gPSAic2l6emxlIiArIDEgKiBuZXcgRGF0ZSgpLAorICAgIHByZWZlcnJlZERvYyA9IHdpbmRv
dy5kb2N1bWVudCwKKyAgICBkaXJydW5zID0gMCwKKyAgICBkb25lID0gMCwKKyAgICBjbGFzc0Nh
Y2hlID0gY3JlYXRlQ2FjaGUoKSwKKyAgICB0b2tlbkNhY2hlID0gY3JlYXRlQ2FjaGUoKSwKKyAg
ICBjb21waWxlckNhY2hlID0gY3JlYXRlQ2FjaGUoKSwKKyAgICBzb3J0T3JkZXIgPSBmdW5jdGlv
biggYSwgYiApIHsKKyAgICAgICAgaWYgKCBhID09PSBiICkgeworICAgICAgICAgICAgaGFzRHVw
bGljYXRlID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9LAorCisg
ICAgLy8gR2VuZXJhbC1wdXJwb3NlIGNvbnN0YW50cworICAgIE1BWF9ORUdBVElWRSA9IDEgPDwg
MzEsCisKKyAgICAvLyBJbnN0YW5jZSBtZXRob2RzCisgICAgaGFzT3duID0gKHt9KS5oYXNPd25Q
cm9wZXJ0eSwKKyAgICBhcnIgPSBbXSwKKyAgICBwb3AgPSBhcnIucG9wLAorICAgIHB1c2hfbmF0
aXZlID0gYXJyLnB1c2gsCisgICAgcHVzaCA9IGFyci5wdXNoLAorICAgIHNsaWNlID0gYXJyLnNs
aWNlLAorICAgIC8vIFVzZSBhIHN0cmlwcGVkLWRvd24gaW5kZXhPZiBhcyBpdCdzIGZhc3RlciB0
aGFuIG5hdGl2ZQorICAgIC8vIGh0dHA6Ly9qc3BlcmYuY29tL3Rob3ItaW5kZXhvZi12cy1mb3Iv
NQorICAgIGluZGV4T2YgPSBmdW5jdGlvbiggbGlzdCwgZWxlbSApIHsKKyAgICAgICAgdmFyIGkg
PSAwLAorICAgICAgICAgICAgbGVuID0gbGlzdC5sZW5ndGg7CisgICAgICAgIGZvciAoIDsgaSA8
IGxlbjsgaSsrICkgeworICAgICAgICAgICAgaWYgKCBsaXN0W2ldID09PSBlbGVtICkgeworICAg
ICAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHJldHVybiAtMTsKKyAgICB9LAorCisgICAgYm9vbGVhbnMgPSAiY2hlY2tlZHxzZWxlY3RlZHxh
c3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlz
bWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWQiLAorCisgICAg
Ly8gUmVndWxhciBleHByZXNzaW9ucworCisgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvY3Nz
My1zZWxlY3RvcnMvI3doaXRlc3BhY2UKKyAgICB3aGl0ZXNwYWNlID0gIltcXHgyMFxcdFxcclxc
blxcZl0iLAorCisgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEvc3luZGF0YS5odG1s
I3ZhbHVlLWRlZi1pZGVudGlmaWVyCisgICAgaWRlbnRpZmllciA9ICIoPzpcXFxcLnxbXFx3LV18
W15cXHgwMC1cXHhhMF0pKyIsCisKKyAgICAvLyBBdHRyaWJ1dGUgc2VsZWN0b3JzOiBodHRwOi8v
d3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2F0dHJpYnV0ZS1zZWxlY3RvcnMKKyAgICBhdHRyaWJ1
dGVzID0gIlxcWyIgKyB3aGl0ZXNwYWNlICsgIiooIiArIGlkZW50aWZpZXIgKyAiKSg/OiIgKyB3
aGl0ZXNwYWNlICsKKyAgICAgICAgLy8gT3BlcmF0b3IgKGNhcHR1cmUgMikKKyAgICAgICAgIioo
WypeJHwhfl0/PSkiICsgd2hpdGVzcGFjZSArCisgICAgICAgIC8vICJBdHRyaWJ1dGUgdmFsdWVz
IG11c3QgYmUgQ1NTIGlkZW50aWZpZXJzIFtjYXB0dXJlIDVdIG9yIHN0cmluZ3MgW2NhcHR1cmUg
MyBvciBjYXB0dXJlIDRdIgorICAgICAgICAiKig/OicoKD86XFxcXC58W15cXFxcJ10pKiknfFwi
KCg/OlxcXFwufFteXFxcXFwiXSkqKVwifCgiICsgaWRlbnRpZmllciArICIpKXwpIiArIHdoaXRl
c3BhY2UgKworICAgICAgICAiKlxcXSIsCisKKyAgICBwc2V1ZG9zID0gIjooIiArIGlkZW50aWZp
ZXIgKyAiKSg/OlxcKCgiICsKKyAgICAgICAgLy8gVG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygc2Vs
ZWN0b3JzIG5lZWRpbmcgdG9rZW5pemUgaW4gdGhlIHByZUZpbHRlciwgcHJlZmVyIGFyZ3VtZW50
czoKKyAgICAgICAgLy8gMS4gcXVvdGVkIChjYXB0dXJlIDM7IGNhcHR1cmUgNCBvciBjYXB0dXJl
IDUpCisgICAgICAgICIoJygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58W15cXFxc
XCJdKSopXCIpfCIgKworICAgICAgICAvLyAyLiBzaW1wbGUgKGNhcHR1cmUgNikKKyAgICAgICAg
IigoPzpcXFxcLnxbXlxcXFwoKVtcXF1dfCIgKyBhdHRyaWJ1dGVzICsgIikqKXwiICsKKyAgICAg
ICAgLy8gMy4gYW55dGhpbmcgZWxzZSAoY2FwdHVyZSAyKQorICAgICAgICAiLioiICsKKyAgICAg
ICAgIilcXCl8KSIsCisKKyAgICAvLyBMZWFkaW5nIGFuZCBub24tZXNjYXBlZCB0cmFpbGluZyB3
aGl0ZXNwYWNlLCBjYXB0dXJpbmcgc29tZSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHByZWNl
ZGluZyB0aGUgbGF0dGVyCisgICAgcndoaXRlc3BhY2UgPSBuZXcgUmVnRXhwKCB3aGl0ZXNwYWNl
ICsgIisiLCAiZyIgKSwKKyAgICBydHJpbSA9IG5ldyBSZWdFeHAoICJeIiArIHdoaXRlc3BhY2Ug
KyAiK3woKD86XnxbXlxcXFxdKSg/OlxcXFwuKSopIiArIHdoaXRlc3BhY2UgKyAiKyQiLCAiZyIg
KSwKKworICAgIHJjb21tYSA9IG5ldyBSZWdFeHAoICJeIiArIHdoaXRlc3BhY2UgKyAiKiwiICsg
d2hpdGVzcGFjZSArICIqIiApLAorICAgIHJjb21iaW5hdG9ycyA9IG5ldyBSZWdFeHAoICJeIiAr
IHdoaXRlc3BhY2UgKyAiKihbPit+XXwiICsgd2hpdGVzcGFjZSArICIpIiArIHdoaXRlc3BhY2Ug
KyAiKiIgKSwKKworICAgIHJhdHRyaWJ1dGVRdW90ZXMgPSBuZXcgUmVnRXhwKCAiPSIgKyB3aGl0
ZXNwYWNlICsgIiooW15cXF0nXCJdKj8pIiArIHdoaXRlc3BhY2UgKyAiKlxcXSIsICJnIiApLAor
CisgICAgcnBzZXVkbyA9IG5ldyBSZWdFeHAoIHBzZXVkb3MgKSwKKyAgICByaWRlbnRpZmllciA9
IG5ldyBSZWdFeHAoICJeIiArIGlkZW50aWZpZXIgKyAiJCIgKSwKKworICAgIG1hdGNoRXhwciA9
IHsKKyAgICAgICAgIklEIjogbmV3IFJlZ0V4cCggIl4jKCIgKyBpZGVudGlmaWVyICsgIikiICks
CisgICAgICAgICJDTEFTUyI6IG5ldyBSZWdFeHAoICJeXFwuKCIgKyBpZGVudGlmaWVyICsgIiki
ICksCisgICAgICAgICJUQUciOiBuZXcgUmVnRXhwKCAiXigiICsgaWRlbnRpZmllciArICJ8Wypd
KSIgKSwKKyAgICAgICAgIkFUVFIiOiBuZXcgUmVnRXhwKCAiXiIgKyBhdHRyaWJ1dGVzICksCisg
ICAgICAgICJQU0VVRE8iOiBuZXcgUmVnRXhwKCAiXiIgKyBwc2V1ZG9zICksCisgICAgICAgICJD
SElMRCI6IG5ldyBSZWdFeHAoICJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hp
bGR8b2YtdHlwZSkoPzpcXCgiICsgd2hpdGVzcGFjZSArCisgICAgICAgICAgICAiKihldmVufG9k
ZHwoKFsrLV18KShcXGQqKW58KSIgKyB3aGl0ZXNwYWNlICsgIiooPzooWystXXwpIiArIHdoaXRl
c3BhY2UgKworICAgICAgICAgICAgIiooXFxkKyl8KSkiICsgd2hpdGVzcGFjZSArICIqXFwpfCki
LCAiaSIgKSwKKyAgICAgICAgImJvb2wiOiBuZXcgUmVnRXhwKCAiXig/OiIgKyBib29sZWFucyAr
ICIpJCIsICJpIiApLAorICAgICAgICAvLyBGb3IgdXNlIGluIGxpYnJhcmllcyBpbXBsZW1lbnRp
bmcgLmlzKCkKKyAgICAgICAgLy8gV2UgdXNlIHRoaXMgZm9yIFBPUyBtYXRjaGluZyBpbiBgc2Vs
ZWN0YAorICAgICAgICAibmVlZHNDb250ZXh0IjogbmV3IFJlZ0V4cCggIl4iICsgd2hpdGVzcGFj
ZSArICIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXCgiICsK
KyAgICAgICAgICAgIHdoaXRlc3BhY2UgKyAiKigoPzotXFxkKT9cXGQqKSIgKyB3aGl0ZXNwYWNl
ICsgIipcXCl8KSg/PVteLV18JCkiLCAiaSIgKQorICAgIH0sCisKKyAgICByaW5wdXRzID0gL14o
PzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSwKKyAgICByaGVhZGVyID0gL15oXGQk
L2ksCisKKyAgICBybmF0aXZlID0gL15bXntdK1x7XHMqXFtuYXRpdmUgXHcvLAorCisgICAgLy8g
RWFzaWx5LXBhcnNlYWJsZS9yZXRyaWV2YWJsZSBJRCBvciBUQUcgb3IgQ0xBU1Mgc2VsZWN0b3Jz
CisgICAgcnF1aWNrRXhwciA9IC9eKD86IyhbXHctXSspfChcdyspfFwuKFtcdy1dKykpJC8sCisK
KyAgICByc2libGluZyA9IC9bK35dLywKKyAgICByZXNjYXBlID0gLyd8XFwvZywKKworICAgIC8v
IENTUyBlc2NhcGVzIGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL3N5bmRhdGEuaHRtbCNlc2Nh
cGVkLWNoYXJhY3RlcnMKKyAgICBydW5lc2NhcGUgPSBuZXcgUmVnRXhwKCAiXFxcXChbXFxkYS1m
XXsxLDZ9IiArIHdoaXRlc3BhY2UgKyAiP3woIiArIHdoaXRlc3BhY2UgKyAiKXwuKSIsICJpZyIg
KSwKKyAgICBmdW5lc2NhcGUgPSBmdW5jdGlvbiggXywgZXNjYXBlZCwgZXNjYXBlZFdoaXRlc3Bh
Y2UgKSB7CisgICAgICAgIHZhciBoaWdoID0gIjB4IiArIGVzY2FwZWQgLSAweDEwMDAwOworICAg
ICAgICAvLyBOYU4gbWVhbnMgbm9uLWNvZGVwb2ludAorICAgICAgICAvLyBTdXBwb3J0OiBGaXJl
Zm94PDI0CisgICAgICAgIC8vIFdvcmthcm91bmQgZXJyb25lb3VzIG51bWVyaWMgaW50ZXJwcmV0
YXRpb24gb2YgKyIweCIKKyAgICAgICAgcmV0dXJuIGhpZ2ggIT09IGhpZ2ggfHwgZXNjYXBlZFdo
aXRlc3BhY2UgPworICAgICAgICAgICAgZXNjYXBlZCA6CisgICAgICAgICAgICBoaWdoIDwgMCA/
CisgICAgICAgICAgICAgICAgLy8gQk1QIGNvZGVwb2ludAorICAgICAgICAgICAgICAgIFN0cmlu
Zy5mcm9tQ2hhckNvZGUoIGhpZ2ggKyAweDEwMDAwICkgOgorICAgICAgICAgICAgICAgIC8vIFN1
cHBsZW1lbnRhbCBQbGFuZSBjb2RlcG9pbnQgKHN1cnJvZ2F0ZSBwYWlyKQorICAgICAgICAgICAg
ICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggPj4gMTAgfCAweEQ4MDAsIGhpZ2ggJiAweDNG
RiB8IDB4REMwMCApOworICAgIH0sCisKKyAgICAvLyBVc2VkIGZvciBpZnJhbWVzCisgICAgLy8g
U2VlIHNldERvY3VtZW50KCkKKyAgICAvLyBSZW1vdmluZyB0aGUgZnVuY3Rpb24gd3JhcHBlciBj
YXVzZXMgYSAiUGVybWlzc2lvbiBEZW5pZWQiCisgICAgLy8gZXJyb3IgaW4gSUUKKyAgICB1bmxv
YWRIYW5kbGVyID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHNldERvY3VtZW50KCk7CisgICAgfTsK
KworLy8gT3B0aW1pemUgZm9yIHB1c2guYXBwbHkoIF8sIE5vZGVMaXN0ICkKK3RyeSB7CisgICAg
cHVzaC5hcHBseSgKKyAgICAgICAgKGFyciA9IHNsaWNlLmNhbGwoIHByZWZlcnJlZERvYy5jaGls
ZE5vZGVzICkpLAorICAgICAgICBwcmVmZXJyZWREb2MuY2hpbGROb2RlcworICAgICk7CisgICAg
Ly8gU3VwcG9ydDogQW5kcm9pZDw0LjAKKyAgICAvLyBEZXRlY3Qgc2lsZW50bHkgZmFpbGluZyBw
dXNoLmFwcGx5CisgICAgYXJyWyBwcmVmZXJyZWREb2MuY2hpbGROb2Rlcy5sZW5ndGggXS5ub2Rl
VHlwZTsKK30gY2F0Y2ggKCBlICkgeworICAgIHB1c2ggPSB7IGFwcGx5OiBhcnIubGVuZ3RoID8K
KworICAgICAgICAvLyBMZXZlcmFnZSBzbGljZSBpZiBwb3NzaWJsZQorICAgICAgICBmdW5jdGlv
biggdGFyZ2V0LCBlbHMgKSB7CisgICAgICAgICAgICBwdXNoX25hdGl2ZS5hcHBseSggdGFyZ2V0
LCBzbGljZS5jYWxsKGVscykgKTsKKyAgICAgICAgfSA6CisKKyAgICAgICAgLy8gU3VwcG9ydDog
SUU8OQorICAgICAgICAvLyBPdGhlcndpc2UgYXBwZW5kIGRpcmVjdGx5CisgICAgICAgIGZ1bmN0
aW9uKCB0YXJnZXQsIGVscyApIHsKKyAgICAgICAgICAgIHZhciBqID0gdGFyZ2V0Lmxlbmd0aCwK
KyAgICAgICAgICAgICAgICBpID0gMDsKKyAgICAgICAgICAgIC8vIENhbid0IHRydXN0IE5vZGVM
aXN0Lmxlbmd0aAorICAgICAgICAgICAgd2hpbGUgKCAodGFyZ2V0W2orK10gPSBlbHNbaSsrXSkg
KSB7fQorICAgICAgICAgICAgdGFyZ2V0Lmxlbmd0aCA9IGogLSAxOworICAgICAgICB9CisgICAg
fTsKK30KKworZnVuY3Rpb24gU2l6emxlKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2Vl
ZCApIHsKKyAgICB2YXIgbSwgaSwgZWxlbSwgbmlkLCBuaWRzZWxlY3QsIG1hdGNoLCBncm91cHMs
IG5ld1NlbGVjdG9yLAorICAgICAgICBuZXdDb250ZXh0ID0gY29udGV4dCAmJiBjb250ZXh0Lm93
bmVyRG9jdW1lbnQsCisKKyAgICAgICAgLy8gbm9kZVR5cGUgZGVmYXVsdHMgdG8gOSwgc2luY2Ug
Y29udGV4dCBkZWZhdWx0cyB0byBkb2N1bWVudAorICAgICAgICBub2RlVHlwZSA9IGNvbnRleHQg
PyBjb250ZXh0Lm5vZGVUeXBlIDogOTsKKworICAgIHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdOwor
CisgICAgLy8gUmV0dXJuIGVhcmx5IGZyb20gY2FsbHMgd2l0aCBpbnZhbGlkIHNlbGVjdG9yIG9y
IGNvbnRleHQKKyAgICBpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gInN0cmluZyIgfHwgIXNlbGVj
dG9yIHx8CisgICAgICAgIG5vZGVUeXBlICE9PSAxICYmIG5vZGVUeXBlICE9PSA5ICYmIG5vZGVU
eXBlICE9PSAxMSApIHsKKworICAgICAgICByZXR1cm4gcmVzdWx0czsKKyAgICB9CisKKyAgICAv
LyBUcnkgdG8gc2hvcnRjdXQgZmluZCBvcGVyYXRpb25zIChhcyBvcHBvc2VkIHRvIGZpbHRlcnMp
IGluIEhUTUwgZG9jdW1lbnRzCisgICAgaWYgKCAhc2VlZCApIHsKKworICAgICAgICBpZiAoICgg
Y29udGV4dCA/IGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0IDogcHJlZmVycmVkRG9j
ICkgIT09IGRvY3VtZW50ICkgeworICAgICAgICAgICAgc2V0RG9jdW1lbnQoIGNvbnRleHQgKTsK
KyAgICAgICAgfQorICAgICAgICBjb250ZXh0ID0gY29udGV4dCB8fCBkb2N1bWVudDsKKworICAg
ICAgICBpZiAoIGRvY3VtZW50SXNIVE1MICkgeworCisgICAgICAgICAgICAvLyBJZiB0aGUgc2Vs
ZWN0b3IgaXMgc3VmZmljaWVudGx5IHNpbXBsZSwgdHJ5IHVzaW5nIGEgImdldCpCeSoiIERPTSBt
ZXRob2QKKyAgICAgICAgICAgIC8vIChleGNlcHRpbmcgRG9jdW1lbnRGcmFnbWVudCBjb250ZXh0
LCB3aGVyZSB0aGUgbWV0aG9kcyBkb24ndCBleGlzdCkKKyAgICAgICAgICAgIGlmICggbm9kZVR5
cGUgIT09IDExICYmIChtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKSkgKSB7CisK
KyAgICAgICAgICAgICAgICAvLyBJRCBzZWxlY3RvcgorICAgICAgICAgICAgICAgIGlmICggKG0g
PSBtYXRjaFsxXSkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gRG9jdW1lbnQgY29udGV4
dAorICAgICAgICAgICAgICAgICAgICBpZiAoIG5vZGVUeXBlID09PSA5ICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCAoZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKSkg
KSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBJRSwgT3BlcmEs
IFdlYmtpdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IGlkZW50aWZ5IHZl
cnNpb25zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2V0RWxlbWVudEJ5SWQgY2Fu
IG1hdGNoIGVsZW1lbnRzIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggZWxlbS5pZCA9PT0gbSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0cy5wdXNoKCBlbGVtICk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiByZXN1bHRzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgLy8gRWxlbWVudCBjb250ZXh0CisgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElFLCBPcGVyYSwgV2Vi
a2l0CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBpZGVudGlmeSB2ZXJzaW9ucwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2V0RWxlbWVudEJ5SWQgY2FuIG1hdGNoIGVsZW1l
bnRzIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBu
ZXdDb250ZXh0ICYmIChlbGVtID0gbmV3Q29udGV4dC5nZXRFbGVtZW50QnlJZCggbSApKSAmJgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICkgJiYK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmlkID09PSBtICkgeworCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKCBlbGVtICk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFR5cGUgc2VsZWN0
b3IKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBtYXRjaFsyXSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgcHVzaC5hcHBseSggcmVzdWx0cywgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFt
ZSggc2VsZWN0b3IgKSApOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKKwor
ICAgICAgICAgICAgICAgIC8vIENsYXNzIHNlbGVjdG9yCisgICAgICAgICAgICAgICAgfSBlbHNl
IGlmICggKG0gPSBtYXRjaFszXSkgJiYgc3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYm
CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApIHsK
KworICAgICAgICAgICAgICAgICAgICBwdXNoLmFwcGx5KCByZXN1bHRzLCBjb250ZXh0LmdldEVs
ZW1lbnRzQnlDbGFzc05hbWUoIG0gKSApOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0czsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
IFRha2UgYWR2YW50YWdlIG9mIHF1ZXJ5U2VsZWN0b3JBbGwKKyAgICAgICAgICAgIGlmICggc3Vw
cG9ydC5xc2EgJiYKKyAgICAgICAgICAgICAgICAhY29tcGlsZXJDYWNoZVsgc2VsZWN0b3IgKyAi
ICIgXSAmJgorICAgICAgICAgICAgICAgICghcmJ1Z2d5UVNBIHx8ICFyYnVnZ3lRU0EudGVzdCgg
c2VsZWN0b3IgKSkgKSB7CisKKyAgICAgICAgICAgICAgICBpZiAoIG5vZGVUeXBlICE9PSAxICkg
eworICAgICAgICAgICAgICAgICAgICBuZXdDb250ZXh0ID0gY29udGV4dDsKKyAgICAgICAgICAg
ICAgICAgICAgbmV3U2VsZWN0b3IgPSBzZWxlY3RvcjsKKworICAgICAgICAgICAgICAgIC8vIHFT
QSBsb29rcyBvdXRzaWRlIEVsZW1lbnQgY29udGV4dCwgd2hpY2ggaXMgbm90IHdoYXQgd2Ugd2Fu
dAorICAgICAgICAgICAgICAgIC8vIFRoYW5rcyB0byBBbmRyZXcgRHVwb250IGZvciB0aGlzIHdv
cmthcm91bmQgdGVjaG5pcXVlCisgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogSUUgPD04Cisg
ICAgICAgICAgICAgICAgLy8gRXhjbHVkZSBvYmplY3QgZWxlbWVudHMKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKCBjb250ZXh0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICJvYmplY3Qi
ICkgeworCisgICAgICAgICAgICAgICAgICAgIC8vIENhcHR1cmUgdGhlIGNvbnRleHQgSUQsIHNl
dHRpbmcgaXQgZmlyc3QgaWYgbmVjZXNzYXJ5CisgICAgICAgICAgICAgICAgICAgIGlmICggKG5p
ZCA9IGNvbnRleHQuZ2V0QXR0cmlidXRlKCAiaWQiICkpICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgbmlkID0gbmlkLnJlcGxhY2UoIHJlc2NhcGUsICJcXCQmIiApOworICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5zZXRBdHRy
aWJ1dGUoICJpZCIsIChuaWQgPSBleHBhbmRvKSApOworICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgLy8gUHJlZml4IGV2ZXJ5IHNlbGVjdG9yIGluIHRoZSBsaXN0
CisgICAgICAgICAgICAgICAgICAgIGdyb3VwcyA9IHRva2VuaXplKCBzZWxlY3RvciApOworICAg
ICAgICAgICAgICAgICAgICBpID0gZ3JvdXBzLmxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAg
bmlkc2VsZWN0ID0gcmlkZW50aWZpZXIudGVzdCggbmlkICkgPyAiIyIgKyBuaWQgOiAiW2lkPSci
ICsgbmlkICsgIiddIjsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBncm91cHNbaV0gPSBuaWRzZWxlY3QgKyAiICIgKyB0b1NlbGVj
dG9yKCBncm91cHNbaV0gKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBuZXdTZWxlY3RvciA9IGdyb3Vwcy5qb2luKCAiLCIgKTsKKworICAgICAgICAgICAgICAg
ICAgICAvLyBFeHBhbmQgY29udGV4dCBmb3Igc2libGluZyBzZWxlY3RvcnMKKyAgICAgICAgICAg
ICAgICAgICAgbmV3Q29udGV4dCA9IHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkgJiYgdGVzdENv
bnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8CisgICAgICAgICAgICAgICAgICAgICAgICBj
b250ZXh0OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICggbmV3U2Vs
ZWN0b3IgKSB7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBwdXNoLmFwcGx5KCByZXN1bHRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5l
d0NvbnRleHQucXVlcnlTZWxlY3RvckFsbCggbmV3U2VsZWN0b3IgKQorICAgICAgICAgICAgICAg
ICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOworICAg
ICAgICAgICAgICAgICAgICB9IGNhdGNoICggcXNhRXJyb3IgKSB7CisgICAgICAgICAgICAgICAg
ICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG5pZCA9PT0gZXhw
YW5kbyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlbW92ZUF0dHJp
YnV0ZSggImlkIiApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgLy8gQWxsIG90aGVycworICAgIHJldHVybiBzZWxlY3QoIHNlbGVjdG9yLnJlcGxh
Y2UoIHJ0cmltLCAiJDEiICksIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKTsKK30KKworLyoqCisg
KiBDcmVhdGUga2V5LXZhbHVlIGNhY2hlcyBvZiBsaW1pdGVkIHNpemUKKyAqIEByZXR1cm5zIHtm
dW5jdGlvbihzdHJpbmcsIG9iamVjdCl9IFJldHVybnMgdGhlIE9iamVjdCBkYXRhIGFmdGVyIHN0
b3JpbmcgaXQgb24gaXRzZWxmIHdpdGgKKyAqICBwcm9wZXJ0eSBuYW1lIHRoZSAoc3BhY2Utc3Vm
Zml4ZWQpIHN0cmluZyBhbmQgKGlmIHRoZSBjYWNoZSBpcyBsYXJnZXIgdGhhbiBFeHByLmNhY2hl
TGVuZ3RoKQorICogIGRlbGV0aW5nIHRoZSBvbGRlc3QgZW50cnkKKyAqLworZnVuY3Rpb24gY3Jl
YXRlQ2FjaGUoKSB7CisgICAgdmFyIGtleXMgPSBbXTsKKworICAgIGZ1bmN0aW9uIGNhY2hlKCBr
ZXksIHZhbHVlICkgeworICAgICAgICAvLyBVc2UgKGtleSArICIgIikgdG8gYXZvaWQgY29sbGlz
aW9uIHdpdGggbmF0aXZlIHByb3RvdHlwZSBwcm9wZXJ0aWVzIChzZWUgSXNzdWUgIzE1NykKKyAg
ICAgICAgaWYgKCBrZXlzLnB1c2goIGtleSArICIgIiApID4gRXhwci5jYWNoZUxlbmd0aCApIHsK
KyAgICAgICAgICAgIC8vIE9ubHkga2VlcCB0aGUgbW9zdCByZWNlbnQgZW50cmllcworICAgICAg
ICAgICAgZGVsZXRlIGNhY2hlWyBrZXlzLnNoaWZ0KCkgXTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gKGNhY2hlWyBrZXkgKyAiICIgXSA9IHZhbHVlKTsKKyAgICB9CisgICAgcmV0dXJuIGNh
Y2hlOworfQorCisvKioKKyAqIE1hcmsgYSBmdW5jdGlvbiBmb3Igc3BlY2lhbCB1c2UgYnkgU2l6
emxlCisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gbWFyaworICovCitm
dW5jdGlvbiBtYXJrRnVuY3Rpb24oIGZuICkgeworICAgIGZuWyBleHBhbmRvIF0gPSB0cnVlOwor
ICAgIHJldHVybiBmbjsKK30KKworLyoqCisgKiBTdXBwb3J0IHRlc3RpbmcgdXNpbmcgYW4gZWxl
bWVudAorICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gUGFzc2VkIHRoZSBjcmVhdGVkIGRpdiBhbmQg
ZXhwZWN0cyBhIGJvb2xlYW4gcmVzdWx0CisgKi8KK2Z1bmN0aW9uIGFzc2VydCggZm4gKSB7Cisg
ICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworCisgICAgdHJ5IHsK
KyAgICAgICAgcmV0dXJuICEhZm4oIGRpdiApOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIC8vIFJlbW92ZSBmcm9tIGl0
cyBwYXJlbnQgYnkgZGVmYXVsdAorICAgICAgICBpZiAoIGRpdi5wYXJlbnROb2RlICkgeworICAg
ICAgICAgICAgZGl2LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGRpdiApOworICAgICAgICB9Cisg
ICAgICAgIC8vIHJlbGVhc2UgbWVtb3J5IGluIElFCisgICAgICAgIGRpdiA9IG51bGw7CisgICAg
fQorfQorCisvKioKKyAqIEFkZHMgdGhlIHNhbWUgaGFuZGxlciBmb3IgYWxsIG9mIHRoZSBzcGVj
aWZpZWQgYXR0cnMKKyAqIEBwYXJhbSB7U3RyaW5nfSBhdHRycyBQaXBlLXNlcGFyYXRlZCBsaXN0
IG9mIGF0dHJpYnV0ZXMKKyAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgVGhlIG1ldGhvZCB0
aGF0IHdpbGwgYmUgYXBwbGllZAorICovCitmdW5jdGlvbiBhZGRIYW5kbGUoIGF0dHJzLCBoYW5k
bGVyICkgeworICAgIHZhciBhcnIgPSBhdHRycy5zcGxpdCgifCIpLAorICAgICAgICBpID0gYXJy
Lmxlbmd0aDsKKworICAgIHdoaWxlICggaS0tICkgeworICAgICAgICBFeHByLmF0dHJIYW5kbGVb
IGFycltpXSBdID0gaGFuZGxlcjsKKyAgICB9Cit9CisKKy8qKgorICogQ2hlY2tzIGRvY3VtZW50
IG9yZGVyIG9mIHR3byBzaWJsaW5ncworICogQHBhcmFtIHtFbGVtZW50fSBhCisgKiBAcGFyYW0g
e0VsZW1lbnR9IGIKKyAqIEByZXR1cm5zIHtOdW1iZXJ9IFJldHVybnMgbGVzcyB0aGFuIDAgaWYg
YSBwcmVjZWRlcyBiLCBncmVhdGVyIHRoYW4gMCBpZiBhIGZvbGxvd3MgYgorICovCitmdW5jdGlv
biBzaWJsaW5nQ2hlY2soIGEsIGIgKSB7CisgICAgdmFyIGN1ciA9IGIgJiYgYSwKKyAgICAgICAg
ZGlmZiA9IGN1ciAmJiBhLm5vZGVUeXBlID09PSAxICYmIGIubm9kZVR5cGUgPT09IDEgJiYKKyAg
ICAgICAgICAgICggfmIuc291cmNlSW5kZXggfHwgTUFYX05FR0FUSVZFICkgLQorICAgICAgICAg
ICAgKCB+YS5zb3VyY2VJbmRleCB8fCBNQVhfTkVHQVRJVkUgKTsKKworICAgIC8vIFVzZSBJRSBz
b3VyY2VJbmRleCBpZiBhdmFpbGFibGUgb24gYm90aCBub2RlcworICAgIGlmICggZGlmZiApIHsK
KyAgICAgICAgcmV0dXJuIGRpZmY7CisgICAgfQorCisgICAgLy8gQ2hlY2sgaWYgYiBmb2xsb3dz
IGEKKyAgICBpZiAoIGN1ciApIHsKKyAgICAgICAgd2hpbGUgKCAoY3VyID0gY3VyLm5leHRTaWJs
aW5nKSApIHsKKyAgICAgICAgICAgIGlmICggY3VyID09PSBiICkgeworICAgICAgICAgICAgICAg
IHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBhID8gMSA6IC0xOworfQorCisvKioKKyAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4g
cHNldWRvcyBmb3IgaW5wdXQgdHlwZXMKKyAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlCisgKi8KK2Z1
bmN0aW9uIGNyZWF0ZUlucHV0UHNldWRvKCB0eXBlICkgeworICAgIHJldHVybiBmdW5jdGlvbigg
ZWxlbSApIHsKKyAgICAgICAgdmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7
CisgICAgICAgIHJldHVybiBuYW1lID09PSAiaW5wdXQiICYmIGVsZW0udHlwZSA9PT0gdHlwZTsK
KyAgICB9OworfQorCisvKioKKyAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRv
cyBmb3IgYnV0dG9ucworICogQHBhcmFtIHtTdHJpbmd9IHR5cGUKKyAqLworZnVuY3Rpb24gY3Jl
YXRlQnV0dG9uUHNldWRvKCB0eXBlICkgeworICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsK
KyAgICAgICAgdmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7CisgICAgICAg
IHJldHVybiAobmFtZSA9PT0gImlucHV0IiB8fCBuYW1lID09PSAiYnV0dG9uIikgJiYgZWxlbS50
eXBlID09PSB0eXBlOworICAgIH07Cit9CisKKy8qKgorICogUmV0dXJucyBhIGZ1bmN0aW9uIHRv
IHVzZSBpbiBwc2V1ZG9zIGZvciBwb3NpdGlvbmFscworICogQHBhcmFtIHtGdW5jdGlvbn0gZm4K
KyAqLworZnVuY3Rpb24gY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZm4gKSB7CisgICAgcmV0dXJu
IG1hcmtGdW5jdGlvbihmdW5jdGlvbiggYXJndW1lbnQgKSB7CisgICAgICAgIGFyZ3VtZW50ID0g
K2FyZ3VtZW50OworICAgICAgICByZXR1cm4gbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBt
YXRjaGVzICkgeworICAgICAgICAgICAgdmFyIGosCisgICAgICAgICAgICAgICAgbWF0Y2hJbmRl
eGVzID0gZm4oIFtdLCBzZWVkLmxlbmd0aCwgYXJndW1lbnQgKSwKKyAgICAgICAgICAgICAgICBp
ID0gbWF0Y2hJbmRleGVzLmxlbmd0aDsKKworICAgICAgICAgICAgLy8gTWF0Y2ggZWxlbWVudHMg
Zm91bmQgYXQgdGhlIHNwZWNpZmllZCBpbmRleGVzCisgICAgICAgICAgICB3aGlsZSAoIGktLSAp
IHsKKyAgICAgICAgICAgICAgICBpZiAoIHNlZWRbIChqID0gbWF0Y2hJbmRleGVzW2ldKSBdICkg
eworICAgICAgICAgICAgICAgICAgICBzZWVkW2pdID0gIShtYXRjaGVzW2pdID0gc2VlZFtqXSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9KTsK
K30KKworLyoqCisgKiBDaGVja3MgYSBub2RlIGZvciB2YWxpZGl0eSBhcyBhIFNpenpsZSBjb250
ZXh0CisgKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0PX0gY29udGV4dAorICogQHJldHVybnMge0Vs
ZW1lbnR8T2JqZWN0fEJvb2xlYW59IFRoZSBpbnB1dCBub2RlIGlmIGFjY2VwdGFibGUsIG90aGVy
d2lzZSBhIGZhbHN5IHZhbHVlCisgKi8KK2Z1bmN0aW9uIHRlc3RDb250ZXh0KCBjb250ZXh0ICkg
eworICAgIHJldHVybiBjb250ZXh0ICYmIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdO
YW1lICE9PSAidW5kZWZpbmVkIiAmJiBjb250ZXh0OworfQorCisvLyBFeHBvc2Ugc3VwcG9ydCB2
YXJzIGZvciBjb252ZW5pZW5jZQorc3VwcG9ydCA9IFNpenpsZS5zdXBwb3J0ID0ge307CisKKy8q
KgorICogRGV0ZWN0cyBYTUwgbm9kZXMKKyAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IGVsZW0g
QW4gZWxlbWVudCBvciBhIGRvY3VtZW50CisgKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZmYg
ZWxlbSBpcyBhIG5vbi1IVE1MIFhNTCBub2RlCisgKi8KK2lzWE1MID0gU2l6emxlLmlzWE1MID0g
ZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgLy8gZG9jdW1lbnRFbGVtZW50IGlzIHZlcmlmaWVkIGZv
ciBjYXNlcyB3aGVyZSBpdCBkb2Vzbid0IHlldCBleGlzdAorICAgIC8vIChzdWNoIGFzIGxvYWRp
bmcgaWZyYW1lcyBpbiBJRSAtICM0ODMzKQorICAgIHZhciBkb2N1bWVudEVsZW1lbnQgPSBlbGVt
ICYmIChlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSkuZG9jdW1lbnRFbGVtZW50OworICAgIHJl
dHVybiBkb2N1bWVudEVsZW1lbnQgPyBkb2N1bWVudEVsZW1lbnQubm9kZU5hbWUgIT09ICJIVE1M
IiA6IGZhbHNlOworfTsKKworLyoqCisgKiBTZXRzIGRvY3VtZW50LXJlbGF0ZWQgdmFyaWFibGVz
IG9uY2UgYmFzZWQgb24gdGhlIGN1cnJlbnQgZG9jdW1lbnQKKyAqIEBwYXJhbSB7RWxlbWVudHxP
YmplY3R9IFtkb2NdIEFuIGVsZW1lbnQgb3IgZG9jdW1lbnQgb2JqZWN0IHRvIHVzZSB0byBzZXQg
dGhlIGRvY3VtZW50CisgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjdXJyZW50IGRv
Y3VtZW50CisgKi8KK3NldERvY3VtZW50ID0gU2l6emxlLnNldERvY3VtZW50ID0gZnVuY3Rpb24o
IG5vZGUgKSB7CisgICAgdmFyIGhhc0NvbXBhcmUsIHBhcmVudCwKKyAgICAgICAgZG9jID0gbm9k
ZSA/IG5vZGUub3duZXJEb2N1bWVudCB8fCBub2RlIDogcHJlZmVycmVkRG9jOworCisgICAgLy8g
UmV0dXJuIGVhcmx5IGlmIGRvYyBpcyBpbnZhbGlkIG9yIGFscmVhZHkgc2VsZWN0ZWQKKyAgICBp
ZiAoIGRvYyA9PT0gZG9jdW1lbnQgfHwgZG9jLm5vZGVUeXBlICE9PSA5IHx8ICFkb2MuZG9jdW1l
bnRFbGVtZW50ICkgeworICAgICAgICByZXR1cm4gZG9jdW1lbnQ7CisgICAgfQorCisgICAgLy8g
VXBkYXRlIGdsb2JhbCB2YXJpYWJsZXMKKyAgICBkb2N1bWVudCA9IGRvYzsKKyAgICBkb2NFbGVt
ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OworICAgIGRvY3VtZW50SXNIVE1MID0gIWlzWE1M
KCBkb2N1bWVudCApOworCisgICAgLy8gU3VwcG9ydDogSUUgOS0xMSwgRWRnZQorICAgIC8vIEFj
Y2Vzc2luZyBpZnJhbWUgZG9jdW1lbnRzIGFmdGVyIHVubG9hZCB0aHJvd3MgInBlcm1pc3Npb24g
ZGVuaWVkIiBlcnJvcnMgKGpRdWVyeSAjMTM5MzYpCisgICAgaWYgKCAocGFyZW50ID0gZG9jdW1l
bnQuZGVmYXVsdFZpZXcpICYmIHBhcmVudC50b3AgIT09IHBhcmVudCApIHsKKyAgICAgICAgLy8g
U3VwcG9ydDogSUUgMTEKKyAgICAgICAgaWYgKCBwYXJlbnQuYWRkRXZlbnRMaXN0ZW5lciApIHsK
KyAgICAgICAgICAgIHBhcmVudC5hZGRFdmVudExpc3RlbmVyKCAidW5sb2FkIiwgdW5sb2FkSGFu
ZGxlciwgZmFsc2UgKTsKKworICAgICAgICAvLyBTdXBwb3J0OiBJRSA5IC0gMTAgb25seQorICAg
ICAgICB9IGVsc2UgaWYgKCBwYXJlbnQuYXR0YWNoRXZlbnQgKSB7CisgICAgICAgICAgICBwYXJl
bnQuYXR0YWNoRXZlbnQoICJvbnVubG9hZCIsIHVubG9hZEhhbmRsZXIgKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8qIEF0dHJpYnV0ZXMKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyAgICAv
LyBTdXBwb3J0OiBJRTw4CisgICAgLy8gVmVyaWZ5IHRoYXQgZ2V0QXR0cmlidXRlIHJlYWxseSBy
ZXR1cm5zIGF0dHJpYnV0ZXMgYW5kIG5vdCBwcm9wZXJ0aWVzCisgICAgLy8gKGV4Y2VwdGluZyBJ
RTggYm9vbGVhbnMpCisgICAgc3VwcG9ydC5hdHRyaWJ1dGVzID0gYXNzZXJ0KGZ1bmN0aW9uKCBk
aXYgKSB7CisgICAgICAgIGRpdi5jbGFzc05hbWUgPSAiaSI7CisgICAgICAgIHJldHVybiAhZGl2
LmdldEF0dHJpYnV0ZSgiY2xhc3NOYW1lIik7CisgICAgfSk7CisKKyAgICAvKiBnZXRFbGVtZW50
KHMpQnkqCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisgICAgLy8gQ2hlY2sgaWYgZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoIioiKSByZXR1cm5zIG9ubHkgZWxlbWVudHMKKyAgICBzdXBwb3J0LmdldEVs
ZW1lbnRzQnlUYWdOYW1lID0gYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7CisgICAgICAgIGRpdi5h
cHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgiIikgKTsKKyAgICAgICAgcmV0dXJu
ICFkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGg7CisgICAgfSk7CisKKyAgICAv
LyBTdXBwb3J0OiBJRTw5CisgICAgc3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lID0gcm5h
dGl2ZS50ZXN0KCBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICk7CisKKyAgICAvLyBT
dXBwb3J0OiBJRTwxMAorICAgIC8vIENoZWNrIGlmIGdldEVsZW1lbnRCeUlkIHJldHVybnMgZWxl
bWVudHMgYnkgbmFtZQorICAgIC8vIFRoZSBicm9rZW4gZ2V0RWxlbWVudEJ5SWQgbWV0aG9kcyBk
b24ndCBwaWNrIHVwIHByb2dyYW1hdGljYWxseS1zZXQgbmFtZXMsCisgICAgLy8gc28gdXNlIGEg
cm91bmRhYm91dCBnZXRFbGVtZW50c0J5TmFtZSB0ZXN0CisgICAgc3VwcG9ydC5nZXRCeUlkID0g
YXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7CisgICAgICAgIGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGRp
diApLmlkID0gZXhwYW5kbzsKKyAgICAgICAgcmV0dXJuICFkb2N1bWVudC5nZXRFbGVtZW50c0J5
TmFtZSB8fCAhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoIGV4cGFuZG8gKS5sZW5ndGg7Cisg
ICAgfSk7CisKKyAgICAvLyBJRCBmaW5kIGFuZCBmaWx0ZXIKKyAgICBpZiAoIHN1cHBvcnQuZ2V0
QnlJZCApIHsKKyAgICAgICAgRXhwci5maW5kWyJJRCJdID0gZnVuY3Rpb24oIGlkLCBjb250ZXh0
ICkgeworICAgICAgICAgICAgaWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0g
InVuZGVmaW5lZCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7CisgICAgICAgICAgICAgICAgdmFyIG0g
PSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApOworICAgICAgICAgICAgICAgIHJldHVybiBt
ID8gWyBtIF0gOiBbXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgRXhwci5m
aWx0ZXJbIklEIl0gPSBmdW5jdGlvbiggaWQgKSB7CisgICAgICAgICAgICB2YXIgYXR0cklkID0g
aWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTsKKyAgICAgICAgICAgIHJldHVybiBm
dW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5nZXRBdHRyaWJ1
dGUoImlkIikgPT09IGF0dHJJZDsKKyAgICAgICAgICAgIH07CisgICAgICAgIH07CisgICAgfSBl
bHNlIHsKKyAgICAgICAgLy8gU3VwcG9ydDogSUU2LzcKKyAgICAgICAgLy8gZ2V0RWxlbWVudEJ5
SWQgaXMgbm90IHJlbGlhYmxlIGFzIGEgZmluZCBzaG9ydGN1dAorICAgICAgICBkZWxldGUgRXhw
ci5maW5kWyJJRCJdOworCisgICAgICAgIEV4cHIuZmlsdGVyWyJJRCJdID0gIGZ1bmN0aW9uKCBp
ZCApIHsKKyAgICAgICAgICAgIHZhciBhdHRySWQgPSBpZC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1
bmVzY2FwZSApOworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAg
ICAgICAgICAgIHZhciBub2RlID0gdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSAhPT0gInVu
ZGVmaW5lZCIgJiYKKyAgICAgICAgICAgICAgICAgICAgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCJp
ZCIpOworICAgICAgICAgICAgICAgIHJldHVybiBub2RlICYmIG5vZGUudmFsdWUgPT09IGF0dHJJ
ZDsKKyAgICAgICAgICAgIH07CisgICAgICAgIH07CisgICAgfQorCisgICAgLy8gVGFnCisgICAg
RXhwci5maW5kWyJUQUciXSA9IHN1cHBvcnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPworICAgICAg
ICBmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkgeworICAgICAgICAgICAgaWYgKCB0eXBlb2YgY29u
dGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gInVuZGVmaW5lZCIgKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApOworCisgICAg
ICAgICAgICAvLyBEb2N1bWVudEZyYWdtZW50IG5vZGVzIGRvbid0IGhhdmUgZ0VCVE4KKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoIHN1cHBvcnQucXNhICkgeworICAgICAgICAgICAgICAgIHJldHVy
biBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRhZyApOworICAgICAgICAgICAgfQorICAgICAg
ICB9IDoKKworICAgICAgICBmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkgeworICAgICAgICAgICAg
dmFyIGVsZW0sCisgICAgICAgICAgICAgICAgdG1wID0gW10sCisgICAgICAgICAgICAgICAgaSA9
IDAsCisgICAgICAgICAgICAgICAgLy8gQnkgaGFwcHkgY29pbmNpZGVuY2UsIGEgKGJyb2tlbikg
Z0VCVE4gYXBwZWFycyBvbiBEb2N1bWVudEZyYWdtZW50IG5vZGVzIHRvbworICAgICAgICAgICAg
ICAgIHJlc3VsdHMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgKTsKKworICAg
ICAgICAgICAgLy8gRmlsdGVyIG91dCBwb3NzaWJsZSBjb21tZW50cworICAgICAgICAgICAgaWYg
KCB0YWcgPT09ICIqIiApIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoIChlbGVtID0gcmVzdWx0
c1tpKytdKSApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAx
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgdG1wLnB1c2goIGVsZW0gKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVy
biB0bXA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKKyAgICAg
ICAgfTsKKworICAgIC8vIENsYXNzCisgICAgRXhwci5maW5kWyJDTEFTUyJdID0gc3VwcG9ydC5n
ZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmIGZ1bmN0aW9uKCBjbGFzc05hbWUsIGNvbnRleHQgKSB7
CisgICAgICAgIGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAhPT0g
InVuZGVmaW5lZCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7CisgICAgICAgICAgICByZXR1cm4gY29u
dGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBjbGFzc05hbWUgKTsKKyAgICAgICAgfQorICAg
IH07CisKKyAgICAvKiBRU0EvbWF0Y2hlc1NlbGVjdG9yCisgICAgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwor
CisgICAgLy8gUVNBIGFuZCBtYXRjaGVzU2VsZWN0b3Igc3VwcG9ydAorCisgICAgLy8gbWF0Y2hl
c1NlbGVjdG9yKDphY3RpdmUpIHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChJRTkvT3BlcmEgMTEu
NSkKKyAgICByYnVnZ3lNYXRjaGVzID0gW107CisKKyAgICAvLyBxU2EoOmZvY3VzKSByZXBvcnRz
IGZhbHNlIHdoZW4gdHJ1ZSAoQ2hyb21lIDIxKQorICAgIC8vIFdlIGFsbG93IHRoaXMgYmVjYXVz
ZSBvZiBhIGJ1ZyBpbiBJRTgvOSB0aGF0IHRocm93cyBhbiBlcnJvcgorICAgIC8vIHdoZW5ldmVy
IGBkb2N1bWVudC5hY3RpdmVFbGVtZW50YCBpcyBhY2Nlc3NlZCBvbiBhbiBpZnJhbWUKKyAgICAv
LyBTbywgd2UgYWxsb3cgOmZvY3VzIHRvIHBhc3MgdGhyb3VnaCBRU0EgYWxsIHRoZSB0aW1lIHRv
IGF2b2lkIHRoZSBJRSBlcnJvcgorICAgIC8vIFNlZSBodHRwOi8vYnVncy5qcXVlcnkuY29tL3Rp
Y2tldC8xMzM3OAorICAgIHJidWdneVFTQSA9IFtdOworCisgICAgaWYgKCAoc3VwcG9ydC5xc2Eg
PSBybmF0aXZlLnRlc3QoIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwgKSkgKSB7CisgICAgICAg
IC8vIEJ1aWxkIFFTQSByZWdleAorICAgICAgICAvLyBSZWdleCBzdHJhdGVneSBhZG9wdGVkIGZy
b20gRGllZ28gUGVyaW5pCisgICAgICAgIGFzc2VydChmdW5jdGlvbiggZGl2ICkgeworICAgICAg
ICAgICAgLy8gU2VsZWN0IGlzIHNldCB0byBlbXB0eSBzdHJpbmcgb24gcHVycG9zZQorICAgICAg
ICAgICAgLy8gVGhpcyBpcyB0byB0ZXN0IElFJ3MgdHJlYXRtZW50IG9mIG5vdCBleHBsaWNpdGx5
CisgICAgICAgICAgICAvLyBzZXR0aW5nIGEgYm9vbGVhbiBjb250ZW50IGF0dHJpYnV0ZSwKKyAg
ICAgICAgICAgIC8vIHNpbmNlIGl0cyBwcmVzZW5jZSBzaG91bGQgYmUgZW5vdWdoCisgICAgICAg
ICAgICAvLyBodHRwOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMjM1OQorICAgICAgICAgICAg
ZG9jRWxlbS5hcHBlbmRDaGlsZCggZGl2ICkuaW5uZXJIVE1MID0gIjxhIGlkPSciICsgZXhwYW5k
byArICInPjwvYT4iICsKKyAgICAgICAgICAgICAgICAiPHNlbGVjdCBpZD0nIiArIGV4cGFuZG8g
KyAiLVxyXFwnIG1zYWxsb3djYXB0dXJlPScnPiIgKworICAgICAgICAgICAgICAgICI8b3B0aW9u
IHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PiI7CisKKyAgICAgICAgICAgIC8vIFN1cHBv
cnQ6IElFOCwgT3BlcmEgMTEtMTIuMTYKKyAgICAgICAgICAgIC8vIE5vdGhpbmcgc2hvdWxkIGJl
IHNlbGVjdGVkIHdoZW4gZW1wdHkgc3RyaW5ncyBmb2xsb3cgXj0gb3IgJD0gb3IgKj0KKyAgICAg
ICAgICAgIC8vIFRoZSB0ZXN0IGF0dHJpYnV0ZSBtdXN0IGJlIHVua25vd24gaW4gT3BlcmEgYnV0
ICJzYWZlIiBmb3IgV2luUlQKKyAgICAgICAgICAgIC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5j
b20vZW4tdXMvbGlicmFyeS9pZS9oaDQ2NTM4OC5hc3B4I2F0dHJpYnV0ZV9zZWN0aW9uCisgICAg
ICAgICAgICBpZiAoIGRpdi5xdWVyeVNlbGVjdG9yQWxsKCJbbXNhbGxvd2NhcHR1cmVePScnXSIp
Lmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICByYnVnZ3lRU0EucHVzaCggIlsqXiRdPSIgKyB3
aGl0ZXNwYWNlICsgIiooPzonJ3xcIlwiKSIgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLy8gU3VwcG9ydDogSUU4CisgICAgICAgICAgICAvLyBCb29sZWFuIGF0dHJpYnV0ZXMgYW5k
ICJ2YWx1ZSIgYXJlIG5vdCB0cmVhdGVkIGNvcnJlY3RseQorICAgICAgICAgICAgaWYgKCAhZGl2
LnF1ZXJ5U2VsZWN0b3JBbGwoIltzZWxlY3RlZF0iKS5sZW5ndGggKSB7CisgICAgICAgICAgICAg
ICAgcmJ1Z2d5UVNBLnB1c2goICJcXFsiICsgd2hpdGVzcGFjZSArICIqKD86dmFsdWV8IiArIGJv
b2xlYW5zICsgIikiICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFN1cHBvcnQ6
IENocm9tZTwyOSwgQW5kcm9pZDw0LjQsIFNhZmFyaTw3LjArLCBpT1M8Ny4wKywgUGhhbnRvbUpT
PDEuOS44KworICAgICAgICAgICAgaWYgKCAhZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoICJbaWR+PSIg
KyBleHBhbmRvICsgIi1dIiApLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICByYnVnZ3lRU0Eu
cHVzaCgifj0iKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gV2Via2l0L09wZXJh
IC0gOmNoZWNrZWQgc2hvdWxkIHJldHVybiBzZWxlY3RlZCBvcHRpb24gZWxlbWVudHMKKyAgICAg
ICAgICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIw
MTEwOTI5LyNjaGVja2VkCisgICAgICAgICAgICAvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgYW5k
IHdpbGwgbm90IHNlZSBsYXRlciB0ZXN0cworICAgICAgICAgICAgaWYgKCAhZGl2LnF1ZXJ5U2Vs
ZWN0b3JBbGwoIjpjaGVja2VkIikubGVuZ3RoICkgeworICAgICAgICAgICAgICAgIHJidWdneVFT
QS5wdXNoKCI6Y2hlY2tlZCIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTdXBw
b3J0OiBTYWZhcmkgOCssIGlPUyA4KworICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjg1MQorICAgICAgICAgICAgLy8gSW4tcGFnZSBgc2Vs
ZWN0b3IjaWQgc2liaW5nLWNvbWJpbmF0b3Igc2VsZWN0b3JgIGZhaWxzCisgICAgICAgICAgICBp
ZiAoICFkaXYucXVlcnlTZWxlY3RvckFsbCggImEjIiArIGV4cGFuZG8gKyAiKyoiICkubGVuZ3Ro
ICkgeworICAgICAgICAgICAgICAgIHJidWdneVFTQS5wdXNoKCIuIy4rWyt+XSIpOworICAgICAg
ICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICBhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsK
KyAgICAgICAgICAgIC8vIFN1cHBvcnQ6IFdpbmRvd3MgOCBOYXRpdmUgQXBwcworICAgICAgICAg
ICAgLy8gVGhlIHR5cGUgYW5kIG5hbWUgYXR0cmlidXRlcyBhcmUgcmVzdHJpY3RlZCBkdXJpbmcg
LmlubmVySFRNTCBhc3NpZ25tZW50CisgICAgICAgICAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJpbnB1dCIpOworICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCAi
dHlwZSIsICJoaWRkZW4iICk7CisgICAgICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoIGlucHV0ICku
c2V0QXR0cmlidXRlKCAibmFtZSIsICJEIiApOworCisgICAgICAgICAgICAvLyBTdXBwb3J0OiBJ
RTgKKyAgICAgICAgICAgIC8vIEVuZm9yY2UgY2FzZS1zZW5zaXRpdml0eSBvZiBuYW1lIGF0dHJp
YnV0ZQorICAgICAgICAgICAgaWYgKCBkaXYucXVlcnlTZWxlY3RvckFsbCgiW25hbWU9ZF0iKS5s
ZW5ndGggKSB7CisgICAgICAgICAgICAgICAgcmJ1Z2d5UVNBLnB1c2goICJuYW1lIiArIHdoaXRl
c3BhY2UgKyAiKlsqXiR8IX5dPz0iICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
IEZGIDMuNSAtIDplbmFibGVkLzpkaXNhYmxlZCBhbmQgaGlkZGVuIGVsZW1lbnRzIChoaWRkZW4g
ZWxlbWVudHMgYXJlIHN0aWxsIGVuYWJsZWQpCisgICAgICAgICAgICAvLyBJRTggdGhyb3dzIGVy
cm9yIGhlcmUgYW5kIHdpbGwgbm90IHNlZSBsYXRlciB0ZXN0cworICAgICAgICAgICAgaWYgKCAh
ZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoIjplbmFibGVkIikubGVuZ3RoICkgeworICAgICAgICAgICAg
ICAgIHJidWdneVFTQS5wdXNoKCAiOmVuYWJsZWQiLCAiOmRpc2FibGVkIiApOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBPcGVyYSAxMC0xMSBkb2VzIG5vdCB0aHJvdyBvbiBwb3N0
LWNvbW1hIGludmFsaWQgcHNldWRvcworICAgICAgICAgICAgZGl2LnF1ZXJ5U2VsZWN0b3JBbGwo
IiosOngiKTsKKyAgICAgICAgICAgIHJidWdneVFTQS5wdXNoKCIsLio6Iik7CisgICAgICAgIH0p
OworICAgIH0KKworICAgIGlmICggKHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yID0gcm5hdGl2ZS50
ZXN0KCAobWF0Y2hlcyA9IGRvY0VsZW0ubWF0Y2hlcyB8fAorICAgICAgICBkb2NFbGVtLndlYmtp
dE1hdGNoZXNTZWxlY3RvciB8fAorICAgICAgICBkb2NFbGVtLm1vek1hdGNoZXNTZWxlY3RvciB8
fAorICAgICAgICBkb2NFbGVtLm9NYXRjaGVzU2VsZWN0b3IgfHwKKyAgICAgICAgZG9jRWxlbS5t
c01hdGNoZXNTZWxlY3RvcikgKSkgKSB7CisKKyAgICAgICAgYXNzZXJ0KGZ1bmN0aW9uKCBkaXYg
KSB7CisgICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgaXQncyBwb3NzaWJsZSB0byBkbyBt
YXRjaGVzU2VsZWN0b3IKKyAgICAgICAgICAgIC8vIG9uIGEgZGlzY29ubmVjdGVkIG5vZGUgKElF
IDkpCisgICAgICAgICAgICBzdXBwb3J0LmRpc2Nvbm5lY3RlZE1hdGNoID0gbWF0Y2hlcy5jYWxs
KCBkaXYsICJkaXYiICk7CisKKyAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIGZhaWwgd2l0aCBh
biBleGNlcHRpb24KKyAgICAgICAgICAgIC8vIEdlY2tvIGRvZXMgbm90IGVycm9yLCByZXR1cm5z
IGZhbHNlIGluc3RlYWQKKyAgICAgICAgICAgIG1hdGNoZXMuY2FsbCggZGl2LCAiW3MhPScnXTp4
IiApOworICAgICAgICAgICAgcmJ1Z2d5TWF0Y2hlcy5wdXNoKCAiIT0iLCBwc2V1ZG9zICk7Cisg
ICAgICAgIH0pOworICAgIH0KKworICAgIHJidWdneVFTQSA9IHJidWdneVFTQS5sZW5ndGggJiYg
bmV3IFJlZ0V4cCggcmJ1Z2d5UVNBLmpvaW4oInwiKSApOworICAgIHJidWdneU1hdGNoZXMgPSBy
YnVnZ3lNYXRjaGVzLmxlbmd0aCAmJiBuZXcgUmVnRXhwKCByYnVnZ3lNYXRjaGVzLmpvaW4oInwi
KSApOworCisgICAgLyogQ29udGFpbnMKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgICAgaGFzQ29t
cGFyZSA9IHJuYXRpdmUudGVzdCggZG9jRWxlbS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiApOwor
CisgICAgLy8gRWxlbWVudCBjb250YWlucyBhbm90aGVyCisgICAgLy8gUHVycG9zZWZ1bGx5IHNl
bGYtZXhjbHVzaXZlCisgICAgLy8gQXMgaW4sIGFuIGVsZW1lbnQgZG9lcyBub3QgY29udGFpbiBp
dHNlbGYKKyAgICBjb250YWlucyA9IGhhc0NvbXBhcmUgfHwgcm5hdGl2ZS50ZXN0KCBkb2NFbGVt
LmNvbnRhaW5zICkgPworICAgICAgICBmdW5jdGlvbiggYSwgYiApIHsKKyAgICAgICAgICAgIHZh
ciBhZG93biA9IGEubm9kZVR5cGUgPT09IDkgPyBhLmRvY3VtZW50RWxlbWVudCA6IGEsCisgICAg
ICAgICAgICAgICAgYnVwID0gYiAmJiBiLnBhcmVudE5vZGU7CisgICAgICAgICAgICByZXR1cm4g
YSA9PT0gYnVwIHx8ICEhKCBidXAgJiYgYnVwLm5vZGVUeXBlID09PSAxICYmICgKKyAgICAgICAg
ICAgICAgICBhZG93bi5jb250YWlucyA/CisgICAgICAgICAgICAgICAgICAgIGFkb3duLmNvbnRh
aW5zKCBidXAgKSA6CisgICAgICAgICAgICAgICAgICAgIGEuY29tcGFyZURvY3VtZW50UG9zaXRp
b24gJiYgYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYnVwICkgJiAxNgorICAgICAgICAgICAg
KSk7CisgICAgICAgIH0gOgorICAgICAgICBmdW5jdGlvbiggYSwgYiApIHsKKyAgICAgICAgICAg
IGlmICggYiApIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoIChiID0gYi5wYXJlbnROb2RlKSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBiID09PSBhICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH07CisKKyAgICAvKiBTb3J0aW5nCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisgICAgLy8gRG9j
dW1lbnQgb3JkZXIgc29ydGluZworICAgIHNvcnRPcmRlciA9IGhhc0NvbXBhcmUgPworICAgIGZ1
bmN0aW9uKCBhLCBiICkgeworCisgICAgICAgIC8vIEZsYWcgZm9yIGR1cGxpY2F0ZSByZW1vdmFs
CisgICAgICAgIGlmICggYSA9PT0gYiApIHsKKyAgICAgICAgICAgIGhhc0R1cGxpY2F0ZSA9IHRy
dWU7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNvcnQg
b24gbWV0aG9kIGV4aXN0ZW5jZSBpZiBvbmx5IG9uZSBpbnB1dCBoYXMgY29tcGFyZURvY3VtZW50
UG9zaXRpb24KKyAgICAgICAgdmFyIGNvbXBhcmUgPSAhYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlv
biAtICFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uOworICAgICAgICBpZiAoIGNvbXBhcmUgKSB7
CisgICAgICAgICAgICByZXR1cm4gY29tcGFyZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENh
bGN1bGF0ZSBwb3NpdGlvbiBpZiBib3RoIGlucHV0cyBiZWxvbmcgdG8gdGhlIHNhbWUgZG9jdW1l
bnQKKyAgICAgICAgY29tcGFyZSA9ICggYS5vd25lckRvY3VtZW50IHx8IGEgKSA9PT0gKCBiLm93
bmVyRG9jdW1lbnQgfHwgYiApID8KKyAgICAgICAgICAgIGEuY29tcGFyZURvY3VtZW50UG9zaXRp
b24oIGIgKSA6CisKKyAgICAgICAgICAgIC8vIE90aGVyd2lzZSB3ZSBrbm93IHRoZXkgYXJlIGRp
c2Nvbm5lY3RlZAorICAgICAgICAgICAgMTsKKworICAgICAgICAvLyBEaXNjb25uZWN0ZWQgbm9k
ZXMKKyAgICAgICAgaWYgKCBjb21wYXJlICYgMSB8fAorICAgICAgICAgICAgKCFzdXBwb3J0LnNv
cnREZXRhY2hlZCAmJiBiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBhICkgPT09IGNvbXBhcmUp
ICkgeworCisgICAgICAgICAgICAvLyBDaG9vc2UgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBpcyBy
ZWxhdGVkIHRvIG91ciBwcmVmZXJyZWQgZG9jdW1lbnQKKyAgICAgICAgICAgIGlmICggYSA9PT0g
ZG9jdW1lbnQgfHwgYS5vd25lckRvY3VtZW50ID09PSBwcmVmZXJyZWREb2MgJiYgY29udGFpbnMo
cHJlZmVycmVkRG9jLCBhKSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoIGIgPT09IGRvY3VtZW50IHx8IGIub3duZXJEb2N1bWVu
dCA9PT0gcHJlZmVycmVkRG9jICYmIGNvbnRhaW5zKHByZWZlcnJlZERvYywgYikgKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE1h
aW50YWluIG9yaWdpbmFsIG9yZGVyCisgICAgICAgICAgICByZXR1cm4gc29ydElucHV0ID8KKyAg
ICAgICAgICAgICAgICAoIGluZGV4T2YoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZiggc29ydElu
cHV0LCBiICkgKSA6CisgICAgICAgICAgICAgICAgMDsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiBjb21wYXJlICYgNCA/IC0xIDogMTsKKyAgICB9IDoKKyAgICBmdW5jdGlvbiggYSwgYiAp
IHsKKyAgICAgICAgLy8gRXhpdCBlYXJseSBpZiB0aGUgbm9kZXMgYXJlIGlkZW50aWNhbAorICAg
ICAgICBpZiAoIGEgPT09IGIgKSB7CisgICAgICAgICAgICBoYXNEdXBsaWNhdGUgPSB0cnVlOwor
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICB2YXIgY3VyLAorICAg
ICAgICAgICAgaSA9IDAsCisgICAgICAgICAgICBhdXAgPSBhLnBhcmVudE5vZGUsCisgICAgICAg
ICAgICBidXAgPSBiLnBhcmVudE5vZGUsCisgICAgICAgICAgICBhcCA9IFsgYSBdLAorICAgICAg
ICAgICAgYnAgPSBbIGIgXTsKKworICAgICAgICAvLyBQYXJlbnRsZXNzIG5vZGVzIGFyZSBlaXRo
ZXIgZG9jdW1lbnRzIG9yIGRpc2Nvbm5lY3RlZAorICAgICAgICBpZiAoICFhdXAgfHwgIWJ1cCAp
IHsKKyAgICAgICAgICAgIHJldHVybiBhID09PSBkb2N1bWVudCA/IC0xIDoKKyAgICAgICAgICAg
ICAgICBiID09PSBkb2N1bWVudCA/IDEgOgorICAgICAgICAgICAgICAgIGF1cCA/IC0xIDoKKyAg
ICAgICAgICAgICAgICBidXAgPyAxIDoKKyAgICAgICAgICAgICAgICBzb3J0SW5wdXQgPworICAg
ICAgICAgICAgICAgICggaW5kZXhPZiggc29ydElucHV0LCBhICkgLSBpbmRleE9mKCBzb3J0SW5w
dXQsIGIgKSApIDoKKyAgICAgICAgICAgICAgICAwOworCisgICAgICAgIC8vIElmIHRoZSBub2Rl
cyBhcmUgc2libGluZ3MsIHdlIGNhbiBkbyBhIHF1aWNrIGNoZWNrCisgICAgICAgIH0gZWxzZSBp
ZiAoIGF1cCA9PT0gYnVwICkgeworICAgICAgICAgICAgcmV0dXJuIHNpYmxpbmdDaGVjayggYSwg
YiApOworICAgICAgICB9CisKKyAgICAgICAgLy8gT3RoZXJ3aXNlIHdlIG5lZWQgZnVsbCBsaXN0
cyBvZiB0aGVpciBhbmNlc3RvcnMgZm9yIGNvbXBhcmlzb24KKyAgICAgICAgY3VyID0gYTsKKyAg
ICAgICAgd2hpbGUgKCAoY3VyID0gY3VyLnBhcmVudE5vZGUpICkgeworICAgICAgICAgICAgYXAu
dW5zaGlmdCggY3VyICk7CisgICAgICAgIH0KKyAgICAgICAgY3VyID0gYjsKKyAgICAgICAgd2hp
bGUgKCAoY3VyID0gY3VyLnBhcmVudE5vZGUpICkgeworICAgICAgICAgICAgYnAudW5zaGlmdCgg
Y3VyICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBXYWxrIGRvd24gdGhlIHRyZWUgbG9va2lu
ZyBmb3IgYSBkaXNjcmVwYW5jeQorICAgICAgICB3aGlsZSAoIGFwW2ldID09PSBicFtpXSApIHsK
KyAgICAgICAgICAgIGkrKzsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBpID8KKyAgICAg
ICAgICAgIC8vIERvIGEgc2libGluZyBjaGVjayBpZiB0aGUgbm9kZXMgaGF2ZSBhIGNvbW1vbiBh
bmNlc3RvcgorICAgICAgICAgICAgc2libGluZ0NoZWNrKCBhcFtpXSwgYnBbaV0gKSA6CisKKyAg
ICAgICAgICAgIC8vIE90aGVyd2lzZSBub2RlcyBpbiBvdXIgZG9jdW1lbnQgc29ydCBmaXJzdAor
ICAgICAgICAgICAgYXBbaV0gPT09IHByZWZlcnJlZERvYyA/IC0xIDoKKyAgICAgICAgICAgIGJw
W2ldID09PSBwcmVmZXJyZWREb2MgPyAxIDoKKyAgICAgICAgICAgIDA7CisgICAgfTsKKworICAg
IHJldHVybiBkb2N1bWVudDsKK307CisKK1NpenpsZS5tYXRjaGVzID0gZnVuY3Rpb24oIGV4cHIs
IGVsZW1lbnRzICkgeworICAgIHJldHVybiBTaXp6bGUoIGV4cHIsIG51bGwsIG51bGwsIGVsZW1l
bnRzICk7Cit9OworCitTaXp6bGUubWF0Y2hlc1NlbGVjdG9yID0gZnVuY3Rpb24oIGVsZW0sIGV4
cHIgKSB7CisgICAgLy8gU2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkCisgICAgaWYgKCAoIGVs
ZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkgIT09IGRvY3VtZW50ICkgeworICAgICAgICBzZXRE
b2N1bWVudCggZWxlbSApOworICAgIH0KKworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGF0dHJpYnV0
ZSBzZWxlY3RvcnMgYXJlIHF1b3RlZAorICAgIGV4cHIgPSBleHByLnJlcGxhY2UoIHJhdHRyaWJ1
dGVRdW90ZXMsICI9JyQxJ10iICk7CisKKyAgICBpZiAoIHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9y
ICYmIGRvY3VtZW50SXNIVE1MICYmCisgICAgICAgICFjb21waWxlckNhY2hlWyBleHByICsgIiAi
IF0gJiYKKyAgICAgICAgKCAhcmJ1Z2d5TWF0Y2hlcyB8fCAhcmJ1Z2d5TWF0Y2hlcy50ZXN0KCBl
eHByICkgKSAmJgorICAgICAgICAoICFyYnVnZ3lRU0EgICAgIHx8ICFyYnVnZ3lRU0EudGVzdCgg
ZXhwciApICkgKSB7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHZhciByZXQgPSBtYXRj
aGVzLmNhbGwoIGVsZW0sIGV4cHIgKTsKKworICAgICAgICAgICAgLy8gSUUgOSdzIG1hdGNoZXNT
ZWxlY3RvciByZXR1cm5zIGZhbHNlIG9uIGRpc2Nvbm5lY3RlZCBub2RlcworICAgICAgICAgICAg
aWYgKCByZXQgfHwgc3VwcG9ydC5kaXNjb25uZWN0ZWRNYXRjaCB8fAorICAgICAgICAgICAgICAg
ICAgICAvLyBBcyB3ZWxsLCBkaXNjb25uZWN0ZWQgbm9kZXMgYXJlIHNhaWQgdG8gYmUgaW4gYSBk
b2N1bWVudAorICAgICAgICAgICAgICAgICAgICAvLyBmcmFnbWVudCBpbiBJRSA5CisgICAgICAg
ICAgICAgICAgICAgIGVsZW0uZG9jdW1lbnQgJiYgZWxlbS5kb2N1bWVudC5ub2RlVHlwZSAhPT0g
MTEgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBjYXRjaCAoZSkge30KKyAgICB9CisKKyAgICByZXR1cm4gU2l6emxlKCBleHByLCBkb2N1
bWVudCwgbnVsbCwgWyBlbGVtIF0gKS5sZW5ndGggPiAwOworfTsKKworU2l6emxlLmNvbnRhaW5z
ID0gZnVuY3Rpb24oIGNvbnRleHQsIGVsZW0gKSB7CisgICAgLy8gU2V0IGRvY3VtZW50IHZhcnMg
aWYgbmVlZGVkCisgICAgaWYgKCAoIGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0ICkg
IT09IGRvY3VtZW50ICkgeworICAgICAgICBzZXREb2N1bWVudCggY29udGV4dCApOworICAgIH0K
KyAgICByZXR1cm4gY29udGFpbnMoIGNvbnRleHQsIGVsZW0gKTsKK307CisKK1NpenpsZS5hdHRy
ID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7CisgICAgLy8gU2V0IGRvY3VtZW50IHZhcnMgaWYg
bmVlZGVkCisgICAgaWYgKCAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkgIT09IGRvY3Vt
ZW50ICkgeworICAgICAgICBzZXREb2N1bWVudCggZWxlbSApOworICAgIH0KKworICAgIHZhciBm
biA9IEV4cHIuYXR0ckhhbmRsZVsgbmFtZS50b0xvd2VyQ2FzZSgpIF0sCisgICAgICAgIC8vIERv
bid0IGdldCBmb29sZWQgYnkgT2JqZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzIChqUXVlcnkgIzEz
ODA3KQorICAgICAgICB2YWwgPSBmbiAmJiBoYXNPd24uY2FsbCggRXhwci5hdHRySGFuZGxlLCBu
YW1lLnRvTG93ZXJDYXNlKCkgKSA/CisgICAgICAgICAgICBmbiggZWxlbSwgbmFtZSwgIWRvY3Vt
ZW50SXNIVE1MICkgOgorICAgICAgICAgICAgdW5kZWZpbmVkOworCisgICAgcmV0dXJuIHZhbCAh
PT0gdW5kZWZpbmVkID8KKyAgICAgICAgdmFsIDoKKyAgICAgICAgc3VwcG9ydC5hdHRyaWJ1dGVz
IHx8ICFkb2N1bWVudElzSFRNTCA/CisgICAgICAgICAgICBlbGVtLmdldEF0dHJpYnV0ZSggbmFt
ZSApIDoKKyAgICAgICAgICAgICh2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUobmFtZSkpICYm
IHZhbC5zcGVjaWZpZWQgPworICAgICAgICAgICAgICAgIHZhbC52YWx1ZSA6CisgICAgICAgICAg
ICAgICAgbnVsbDsKK307CisKK1NpenpsZS5lcnJvciA9IGZ1bmN0aW9uKCBtc2cgKSB7CisgICAg
dGhyb3cgbmV3IEVycm9yKCAiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjog
IiArIG1zZyApOworfTsKKworLyoqCisgKiBEb2N1bWVudCBzb3J0aW5nIGFuZCByZW1vdmluZyBk
dXBsaWNhdGVzCisgKiBAcGFyYW0ge0FycmF5TGlrZX0gcmVzdWx0cworICovCitTaXp6bGUudW5p
cXVlU29ydCA9IGZ1bmN0aW9uKCByZXN1bHRzICkgeworICAgIHZhciBlbGVtLAorICAgICAgICBk
dXBsaWNhdGVzID0gW10sCisgICAgICAgIGogPSAwLAorICAgICAgICBpID0gMDsKKworICAgIC8v
IFVubGVzcyB3ZSAqa25vdyogd2UgY2FuIGRldGVjdCBkdXBsaWNhdGVzLCBhc3N1bWUgdGhlaXIg
cHJlc2VuY2UKKyAgICBoYXNEdXBsaWNhdGUgPSAhc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzOwor
ICAgIHNvcnRJbnB1dCA9ICFzdXBwb3J0LnNvcnRTdGFibGUgJiYgcmVzdWx0cy5zbGljZSggMCAp
OworICAgIHJlc3VsdHMuc29ydCggc29ydE9yZGVyICk7CisKKyAgICBpZiAoIGhhc0R1cGxpY2F0
ZSApIHsKKyAgICAgICAgd2hpbGUgKCAoZWxlbSA9IHJlc3VsdHNbaSsrXSkgKSB7CisgICAgICAg
ICAgICBpZiAoIGVsZW0gPT09IHJlc3VsdHNbIGkgXSApIHsKKyAgICAgICAgICAgICAgICBqID0g
ZHVwbGljYXRlcy5wdXNoKCBpICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
d2hpbGUgKCBqLS0gKSB7CisgICAgICAgICAgICByZXN1bHRzLnNwbGljZSggZHVwbGljYXRlc1sg
aiBdLCAxICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDbGVhciBpbnB1dCBhZnRlciBz
b3J0aW5nIHRvIHJlbGVhc2Ugb2JqZWN0cworICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20v
anF1ZXJ5L3NpenpsZS9wdWxsLzIyNQorICAgIHNvcnRJbnB1dCA9IG51bGw7CisKKyAgICByZXR1
cm4gcmVzdWx0czsKK307CisKKy8qKgorICogVXRpbGl0eSBmdW5jdGlvbiBmb3IgcmV0cmlldmlu
ZyB0aGUgdGV4dCB2YWx1ZSBvZiBhbiBhcnJheSBvZiBET00gbm9kZXMKKyAqIEBwYXJhbSB7QXJy
YXl8RWxlbWVudH0gZWxlbQorICovCitnZXRUZXh0ID0gU2l6emxlLmdldFRleHQgPSBmdW5jdGlv
biggZWxlbSApIHsKKyAgICB2YXIgbm9kZSwKKyAgICAgICAgcmV0ID0gIiIsCisgICAgICAgIGkg
PSAwLAorICAgICAgICBub2RlVHlwZSA9IGVsZW0ubm9kZVR5cGU7CisKKyAgICBpZiAoICFub2Rl
VHlwZSApIHsKKyAgICAgICAgLy8gSWYgbm8gbm9kZVR5cGUsIHRoaXMgaXMgZXhwZWN0ZWQgdG8g
YmUgYW4gYXJyYXkKKyAgICAgICAgd2hpbGUgKCAobm9kZSA9IGVsZW1baSsrXSkgKSB7CisgICAg
ICAgICAgICAvLyBEbyBub3QgdHJhdmVyc2UgY29tbWVudCBub2RlcworICAgICAgICAgICAgcmV0
ICs9IGdldFRleHQoIG5vZGUgKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoIG5vZGVUeXBl
ID09PSAxIHx8IG5vZGVUeXBlID09PSA5IHx8IG5vZGVUeXBlID09PSAxMSApIHsKKyAgICAgICAg
Ly8gVXNlIHRleHRDb250ZW50IGZvciBlbGVtZW50cworICAgICAgICAvLyBpbm5lclRleHQgdXNh
Z2UgcmVtb3ZlZCBmb3IgY29uc2lzdGVuY3kgb2YgbmV3IGxpbmVzIChqUXVlcnkgIzExMTUzKQor
ICAgICAgICBpZiAoIHR5cGVvZiBlbGVtLnRleHRDb250ZW50ID09PSAic3RyaW5nIiApIHsKKyAg
ICAgICAgICAgIHJldHVybiBlbGVtLnRleHRDb250ZW50OworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgLy8gVHJhdmVyc2UgaXRzIGNoaWxkcmVuCisgICAgICAgICAgICBmb3IgKCBlbGVt
ID0gZWxlbS5maXJzdENoaWxkOyBlbGVtOyBlbGVtID0gZWxlbS5uZXh0U2libGluZyApIHsKKyAg
ICAgICAgICAgICAgICByZXQgKz0gZ2V0VGV4dCggZWxlbSApOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfSBlbHNlIGlmICggbm9kZVR5cGUgPT09IDMgfHwgbm9kZVR5cGUgPT09IDQg
KSB7CisgICAgICAgIHJldHVybiBlbGVtLm5vZGVWYWx1ZTsKKyAgICB9CisgICAgLy8gRG8gbm90
IGluY2x1ZGUgY29tbWVudCBvciBwcm9jZXNzaW5nIGluc3RydWN0aW9uIG5vZGVzCisKKyAgICBy
ZXR1cm4gcmV0OworfTsKKworRXhwciA9IFNpenpsZS5zZWxlY3RvcnMgPSB7CisKKyAgICAvLyBD
YW4gYmUgYWRqdXN0ZWQgYnkgdGhlIHVzZXIKKyAgICBjYWNoZUxlbmd0aDogNTAsCisKKyAgICBj
cmVhdGVQc2V1ZG86IG1hcmtGdW5jdGlvbiwKKworICAgIG1hdGNoOiBtYXRjaEV4cHIsCisKKyAg
ICBhdHRySGFuZGxlOiB7fSwKKworICAgIGZpbmQ6IHt9LAorCisgICAgcmVsYXRpdmU6IHsKKyAg
ICAgICAgIj4iOiB7IGRpcjogInBhcmVudE5vZGUiLCBmaXJzdDogdHJ1ZSB9LAorICAgICAgICAi
ICI6IHsgZGlyOiAicGFyZW50Tm9kZSIgfSwKKyAgICAgICAgIisiOiB7IGRpcjogInByZXZpb3Vz
U2libGluZyIsIGZpcnN0OiB0cnVlIH0sCisgICAgICAgICJ+IjogeyBkaXI6ICJwcmV2aW91c1Np
YmxpbmciIH0KKyAgICB9LAorCisgICAgcHJlRmlsdGVyOiB7CisgICAgICAgICJBVFRSIjogZnVu
Y3Rpb24oIG1hdGNoICkgeworICAgICAgICAgICAgbWF0Y2hbMV0gPSBtYXRjaFsxXS5yZXBsYWNl
KCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApOworCisgICAgICAgICAgICAvLyBNb3ZlIHRoZSBnaXZl
biB2YWx1ZSB0byBtYXRjaFszXSB3aGV0aGVyIHF1b3RlZCBvciB1bnF1b3RlZAorICAgICAgICAg
ICAgbWF0Y2hbM10gPSAoIG1hdGNoWzNdIHx8IG1hdGNoWzRdIHx8IG1hdGNoWzVdIHx8ICIiICku
cmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTsKKworICAgICAgICAgICAgaWYgKCBtYXRj
aFsyXSA9PT0gIn49IiApIHsKKyAgICAgICAgICAgICAgICBtYXRjaFszXSA9ICIgIiArIG1hdGNo
WzNdICsgIiAiOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gbWF0Y2guc2xp
Y2UoIDAsIDQgKTsKKyAgICAgICAgfSwKKworICAgICAgICAiQ0hJTEQiOiBmdW5jdGlvbiggbWF0
Y2ggKSB7CisgICAgICAgICAgICAvKiBtYXRjaGVzIGZyb20gbWF0Y2hFeHByWyJDSElMRCJdCisg
ICAgICAgICAgICAgICAgMSB0eXBlIChvbmx5fG50aHwuLi4pCisgICAgICAgICAgICAgICAgMiB3
aGF0IChjaGlsZHxvZi10eXBlKQorICAgICAgICAgICAgICAgIDMgYXJndW1lbnQgKGV2ZW58b2Rk
fFxkKnxcZCpuKFsrLV1cZCspP3wuLi4pCisgICAgICAgICAgICAgICAgNCB4bi1jb21wb25lbnQg
b2YgeG4reSBhcmd1bWVudCAoWystXT9cZCpufCkKKyAgICAgICAgICAgICAgICA1IHNpZ24gb2Yg
eG4tY29tcG9uZW50CisgICAgICAgICAgICAgICAgNiB4IG9mIHhuLWNvbXBvbmVudAorICAgICAg
ICAgICAgICAgIDcgc2lnbiBvZiB5LWNvbXBvbmVudAorICAgICAgICAgICAgICAgIDggeSBvZiB5
LWNvbXBvbmVudAorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1hdGNoWzFdID0gbWF0Y2hb
MV0udG9Mb3dlckNhc2UoKTsKKworICAgICAgICAgICAgaWYgKCBtYXRjaFsxXS5zbGljZSggMCwg
MyApID09PSAibnRoIiApIHsKKyAgICAgICAgICAgICAgICAvLyBudGgtKiByZXF1aXJlcyBhcmd1
bWVudAorICAgICAgICAgICAgICAgIGlmICggIW1hdGNoWzNdICkgeworICAgICAgICAgICAgICAg
ICAgICBTaXp6bGUuZXJyb3IoIG1hdGNoWzBdICk7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgLy8gbnVtZXJpYyB4IGFuZCB5IHBhcmFtZXRlcnMgZm9yIEV4cHIuZmlsdGVy
LkNISUxECisgICAgICAgICAgICAgICAgLy8gcmVtZW1iZXIgdGhhdCBmYWxzZS90cnVlIGNhc3Qg
cmVzcGVjdGl2ZWx5IHRvIDAvMQorICAgICAgICAgICAgICAgIG1hdGNoWzRdID0gKyggbWF0Y2hb
NF0gPyBtYXRjaFs1XSArIChtYXRjaFs2XSB8fCAxKSA6IDIgKiAoIG1hdGNoWzNdID09PSAiZXZl
biIgfHwgbWF0Y2hbM10gPT09ICJvZGQiICkgKTsKKyAgICAgICAgICAgICAgICBtYXRjaFs1XSA9
ICsoICggbWF0Y2hbN10gKyBtYXRjaFs4XSApIHx8IG1hdGNoWzNdID09PSAib2RkIiApOworCisg
ICAgICAgICAgICAvLyBvdGhlciB0eXBlcyBwcm9oaWJpdCBhcmd1bWVudHMKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAoIG1hdGNoWzNdICkgeworICAgICAgICAgICAgICAgIFNpenpsZS5lcnJvcigg
bWF0Y2hbMF0gKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIG1hdGNoOwor
ICAgICAgICB9LAorCisgICAgICAgICJQU0VVRE8iOiBmdW5jdGlvbiggbWF0Y2ggKSB7CisgICAg
ICAgICAgICB2YXIgZXhjZXNzLAorICAgICAgICAgICAgICAgIHVucXVvdGVkID0gIW1hdGNoWzZd
ICYmIG1hdGNoWzJdOworCisgICAgICAgICAgICBpZiAoIG1hdGNoRXhwclsiQ0hJTEQiXS50ZXN0
KCBtYXRjaFswXSApICkgeworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBBY2NlcHQgcXVvdGVkIGFyZ3VtZW50cyBhcy1pcworICAg
ICAgICAgICAgaWYgKCBtYXRjaFszXSApIHsKKyAgICAgICAgICAgICAgICBtYXRjaFsyXSA9IG1h
dGNoWzRdIHx8IG1hdGNoWzVdIHx8ICIiOworCisgICAgICAgICAgICAvLyBTdHJpcCBleGNlc3Mg
Y2hhcmFjdGVycyBmcm9tIHVucXVvdGVkIGFyZ3VtZW50cworICAgICAgICAgICAgfSBlbHNlIGlm
ICggdW5xdW90ZWQgJiYgcnBzZXVkby50ZXN0KCB1bnF1b3RlZCApICYmCisgICAgICAgICAgICAg
ICAgLy8gR2V0IGV4Y2VzcyBmcm9tIHRva2VuaXplIChyZWN1cnNpdmVseSkKKyAgICAgICAgICAg
ICAgICAoZXhjZXNzID0gdG9rZW5pemUoIHVucXVvdGVkLCB0cnVlICkpICYmCisgICAgICAgICAg
ICAgICAgLy8gYWR2YW5jZSB0byB0aGUgbmV4dCBjbG9zaW5nIHBhcmVudGhlc2lzCisgICAgICAg
ICAgICAgICAgKGV4Y2VzcyA9IHVucXVvdGVkLmluZGV4T2YoICIpIiwgdW5xdW90ZWQubGVuZ3Ro
IC0gZXhjZXNzICkgLSB1bnF1b3RlZC5sZW5ndGgpICkgeworCisgICAgICAgICAgICAgICAgLy8g
ZXhjZXNzIGlzIGEgbmVnYXRpdmUgaW5kZXgKKyAgICAgICAgICAgICAgICBtYXRjaFswXSA9IG1h
dGNoWzBdLnNsaWNlKCAwLCBleGNlc3MgKTsKKyAgICAgICAgICAgICAgICBtYXRjaFsyXSA9IHVu
cXVvdGVkLnNsaWNlKCAwLCBleGNlc3MgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ly8gUmV0dXJuIG9ubHkgY2FwdHVyZXMgbmVlZGVkIGJ5IHRoZSBwc2V1ZG8gZmlsdGVyIG1ldGhv
ZCAodHlwZSBhbmQgYXJndW1lbnQpCisgICAgICAgICAgICByZXR1cm4gbWF0Y2guc2xpY2UoIDAs
IDMgKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBmaWx0ZXI6IHsKKworICAgICAgICAiVEFH
IjogZnVuY3Rpb24oIG5vZGVOYW1lU2VsZWN0b3IgKSB7CisgICAgICAgICAgICB2YXIgbm9kZU5h
bWUgPSBub2RlTmFtZVNlbGVjdG9yLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICkudG9M
b3dlckNhc2UoKTsKKyAgICAgICAgICAgIHJldHVybiBub2RlTmFtZVNlbGVjdG9yID09PSAiKiIg
PworICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCkgeyByZXR1cm4gdHJ1ZTsgfSA6CisgICAgICAg
ICAgICAgICAgZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
bGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbm9kZU5hbWU7
CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICAiQ0xBU1MiOiBmdW5j
dGlvbiggY2xhc3NOYW1lICkgeworICAgICAgICAgICAgdmFyIHBhdHRlcm4gPSBjbGFzc0NhY2hl
WyBjbGFzc05hbWUgKyAiICIgXTsKKworICAgICAgICAgICAgcmV0dXJuIHBhdHRlcm4gfHwKKyAg
ICAgICAgICAgICAgICAocGF0dGVybiA9IG5ldyBSZWdFeHAoICIoXnwiICsgd2hpdGVzcGFjZSAr
ICIpIiArIGNsYXNzTmFtZSArICIoIiArIHdoaXRlc3BhY2UgKyAifCQpIiApKSAmJgorICAgICAg
ICAgICAgICAgIGNsYXNzQ2FjaGUoIGNsYXNzTmFtZSwgZnVuY3Rpb24oIGVsZW0gKSB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QoIHR5cGVvZiBlbGVtLmNsYXNzTmFt
ZSA9PT0gInN0cmluZyIgJiYgZWxlbS5jbGFzc05hbWUgfHwgdHlwZW9mIGVsZW0uZ2V0QXR0cmli
dXRlICE9PSAidW5kZWZpbmVkIiAmJiBlbGVtLmdldEF0dHJpYnV0ZSgiY2xhc3MiKSB8fCAiIiAp
OworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9LAorCisgICAgICAgICJBVFRSIjogZnVu
Y3Rpb24oIG5hbWUsIG9wZXJhdG9yLCBjaGVjayApIHsKKyAgICAgICAgICAgIHJldHVybiBmdW5j
dGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gU2l6emxlLmF0dHIo
IGVsZW0sIG5hbWUgKTsKKworICAgICAgICAgICAgICAgIGlmICggcmVzdWx0ID09IG51bGwgKSB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRvciA9PT0gIiE9IjsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCAhb3BlcmF0b3IgKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIHJlc3VsdCArPSAiIjsKKworICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRvciA9PT0g
Ij0iID8gcmVzdWx0ID09PSBjaGVjayA6CisgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID09
PSAiIT0iID8gcmVzdWx0ICE9PSBjaGVjayA6CisgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9y
ID09PSAiXj0iID8gY2hlY2sgJiYgcmVzdWx0LmluZGV4T2YoIGNoZWNrICkgPT09IDAgOgorICAg
ICAgICAgICAgICAgICAgICBvcGVyYXRvciA9PT0gIio9IiA/IGNoZWNrICYmIHJlc3VsdC5pbmRl
eE9mKCBjaGVjayApID4gLTEgOgorICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA9PT0gIiQ9
IiA/IGNoZWNrICYmIHJlc3VsdC5zbGljZSggLWNoZWNrLmxlbmd0aCApID09PSBjaGVjayA6Cisg
ICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID09PSAifj0iID8gKCAiICIgKyByZXN1bHQucmVw
bGFjZSggcndoaXRlc3BhY2UsICIgIiApICsgIiAiICkuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDoK
KyAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPT09ICJ8PSIgPyByZXN1bHQgPT09IGNoZWNr
IHx8IHJlc3VsdC5zbGljZSggMCwgY2hlY2subGVuZ3RoICsgMSApID09PSBjaGVjayArICItIiA6
CisgICAgICAgICAgICAgICAgICAgIGZhbHNlOworICAgICAgICAgICAgfTsKKyAgICAgICAgfSwK
KworICAgICAgICAiQ0hJTEQiOiBmdW5jdGlvbiggdHlwZSwgd2hhdCwgYXJndW1lbnQsIGZpcnN0
LCBsYXN0ICkgeworICAgICAgICAgICAgdmFyIHNpbXBsZSA9IHR5cGUuc2xpY2UoIDAsIDMgKSAh
PT0gIm50aCIsCisgICAgICAgICAgICAgICAgZm9yd2FyZCA9IHR5cGUuc2xpY2UoIC00ICkgIT09
ICJsYXN0IiwKKyAgICAgICAgICAgICAgICBvZlR5cGUgPSB3aGF0ID09PSAib2YtdHlwZSI7CisK
KyAgICAgICAgICAgIHJldHVybiBmaXJzdCA9PT0gMSAmJiBsYXN0ID09PSAwID8KKworICAgICAg
ICAgICAgICAgIC8vIFNob3J0Y3V0IGZvciA6bnRoLSoobikKKyAgICAgICAgICAgICAgICBmdW5j
dGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEhZWxlbS5wYXJlbnRO
b2RlOworICAgICAgICAgICAgICAgIH0gOgorCisgICAgICAgICAgICAgICAgZnVuY3Rpb24oIGVs
ZW0sIGNvbnRleHQsIHhtbCApIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNhY2hlLCB1bmlx
dWVDYWNoZSwgb3V0ZXJDYWNoZSwgbm9kZSwgbm9kZUluZGV4LCBzdGFydCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRpciA9IHNpbXBsZSAhPT0gZm9yd2FyZCA/ICJuZXh0U2libGluZyIgOiAi
cHJldmlvdXNTaWJsaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IGVsZW0u
cGFyZW50Tm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBvZlR5cGUgJiYgZWxl
bS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgdXNlQ2Fj
aGUgPSAheG1sICYmICFvZlR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBkaWZmID0gZmFs
c2U7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBwYXJlbnQgKSB7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIDooZmlyc3R8bGFzdHxvbmx5KS0oY2hpbGR8b2YtdHlwZSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggc2ltcGxlICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdoaWxlICggZGlyICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlID0gZWxlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCAobm9k
ZSA9IG5vZGVbIGRpciBdKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggb2ZUeXBlID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUgOgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV2ZXJzZSBkaXJlY3Rp
b24gZm9yIDpvbmx5LSogKGlmIHdlIGhhdmVuJ3QgeWV0IGRvbmUgc28pCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gZGlyID0gdHlwZSA9PT0gIm9ubHkiICYmICFzdGFy
dCAmJiAibmV4dFNpYmxpbmciOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBbIGZvcndhcmQgPyBwYXJl
bnQuZmlyc3RDaGlsZCA6IHBhcmVudC5sYXN0Q2hpbGQgXTsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gbm9uLXhtbCA6bnRoLWNoaWxkKC4uLikgc3RvcmVzIGNhY2hlIGRhdGEgb24gYHBh
cmVudGAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZm9yd2FyZCAmJiB1c2VDYWNoZSAp
IHsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlZWsgYGVsZW1gIGZyb20gYSBw
cmV2aW91c2x5LWNhY2hlZCBpbmRleAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Li4uaW4gYSBnemlwLWZyaWVuZGx5IHdheQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGUgPSBwYXJlbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZXJDYWNoZSA9IG5v
ZGVbIGV4cGFuZG8gXSB8fCAobm9kZVsgZXhwYW5kbyBdID0ge30pOworCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogSUUgPDkgb25seQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBn
aC0xNzA5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZUNhY2hlID0gb3V0ZXJD
YWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSk7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjYWNoZSA9IHVuaXF1ZUNhY2hlWyB0eXBlIF0gfHwgW107CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ID0gY2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBj
YWNoZVsgMSBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmYgPSBub2RlSW5kZXgg
JiYgY2FjaGVbIDIgXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZUlu
ZGV4ICYmIHBhcmVudC5jaGlsZE5vZGVzWyBub2RlSW5kZXggXTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdoaWxlICggKG5vZGUgPSArK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVb
IGRpciBdIHx8CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmFsbGJhY2sg
dG8gc2Vla2luZyBgZWxlbWAgZnJvbSB0aGUgc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGRpZmYgPSBub2RlSW5kZXggPSAwKSB8fCBzdGFydC5wb3AoKSkgKSB7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiBmb3VuZCwgY2FjaGUgaW5kZXhl
cyBvbiBgcGFyZW50YCBhbmQgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBub2RlLm5vZGVUeXBlID09PSAxICYmICsrZGlmZiAmJiBub2RlID09PSBlbGVtICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlQ2FjaGVbIHR5cGUgXSA9
IFsgZGlycnVucywgbm9kZUluZGV4LCBkaWZmIF07CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2UgcHJldmlvdXNseS1jYWNo
ZWQgZWxlbWVudCBpbmRleCBpZiBhdmFpbGFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIHVzZUNhY2hlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAu
Li5pbiBhIGd6aXAtZnJpZW5kbHkgd2F5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGUgPSBlbGVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRlckNhY2hl
ID0gbm9kZVsgZXhwYW5kbyBdIHx8IChub2RlWyBleHBhbmRvIF0gPSB7fSk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogSUUgPDkgb25seQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0
aWVzIChqUXVlcnkgZ2gtMTcwOSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5p
cXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSk7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUgPSB1bmlxdWVDYWNoZVsg
dHlwZSBdIHx8IFtdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgg
PSBjYWNoZVsgMCBdID09PSBkaXJydW5zICYmIGNhY2hlWyAxIF07CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRpZmYgPSBub2RlSW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8geG1sIDpudGgtY2hpbGQo
Li4uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yIDpudGgtbGFzdC1jaGlsZCgu
Li4pIG9yIDpudGgoLWxhc3QpPy1vZi10eXBlKC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGRpZmYgPT09IGZhbHNlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBVc2UgdGhlIHNhbWUgbG9vcCBhcyBhYm92ZSB0byBzZWVrIGBlbGVtYCBmcm9tIHRo
ZSBzdGFydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIChub2RlID0g
Kytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGRpZmYgPSBub2RlSW5kZXggPSAwKSB8fCBzdGFydC5wb3AoKSkg
KSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKCBvZlR5cGUg
PworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUubm9kZU5hbWUu
dG9Mb3dlckNhc2UoKSA9PT0gbmFtZSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZS5ub2RlVHlwZSA9PT0gMSApICYmCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKytkaWZmICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gQ2FjaGUgdGhlIGluZGV4IG9mIGVhY2ggZW5jb3VudGVyZWQgZWxl
bWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdXNlQ2Fj
aGUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dGVy
Q2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHwgKG5vZGVbIGV4cGFuZG8gXSA9IHt9KTsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBJRSA8
OSBvbmx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERl
ZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWVDYWNoZSA9IG91dGVy
Q2FjaGVbIG5vZGUudW5pcXVlSUQgXSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9KTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWVDYWNoZVsg
dHlwZSBdID0gWyBkaXJydW5zLCBkaWZmIF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBub2RlID09PSBlbGVtICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluY29y
cG9yYXRlIHRoZSBvZmZzZXQsIHRoZW4gY2hlY2sgYWdhaW5zdCBjeWNsZSBzaXplCisgICAgICAg
ICAgICAgICAgICAgICAgICBkaWZmIC09IGxhc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZGlmZiA9PT0gZmlyc3QgfHwgKCBkaWZmICUgZmlyc3QgPT09IDAgJiYgZGlmZiAvIGZp
cnN0ID49IDAgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH07Cisg
ICAgICAgIH0sCisKKyAgICAgICAgIlBTRVVETyI6IGZ1bmN0aW9uKCBwc2V1ZG8sIGFyZ3VtZW50
ICkgeworICAgICAgICAgICAgLy8gcHNldWRvLWNsYXNzIG5hbWVzIGFyZSBjYXNlLWluc2Vuc2l0
aXZlCisgICAgICAgICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI3BzZXVk
by1jbGFzc2VzCisgICAgICAgICAgICAvLyBQcmlvcml0aXplIGJ5IGNhc2Ugc2Vuc2l0aXZpdHkg
aW4gY2FzZSBjdXN0b20gcHNldWRvcyBhcmUgYWRkZWQgd2l0aCB1cHBlcmNhc2UgbGV0dGVycwor
ICAgICAgICAgICAgLy8gUmVtZW1iZXIgdGhhdCBzZXRGaWx0ZXJzIGluaGVyaXRzIGZyb20gcHNl
dWRvcworICAgICAgICAgICAgdmFyIGFyZ3MsCisgICAgICAgICAgICAgICAgZm4gPSBFeHByLnBz
ZXVkb3NbIHBzZXVkbyBdIHx8IEV4cHIuc2V0RmlsdGVyc1sgcHNldWRvLnRvTG93ZXJDYXNlKCkg
XSB8fAorICAgICAgICAgICAgICAgICAgICBTaXp6bGUuZXJyb3IoICJ1bnN1cHBvcnRlZCBwc2V1
ZG86ICIgKyBwc2V1ZG8gKTsKKworICAgICAgICAgICAgLy8gVGhlIHVzZXIgbWF5IHVzZSBjcmVh
dGVQc2V1ZG8gdG8gaW5kaWNhdGUgdGhhdAorICAgICAgICAgICAgLy8gYXJndW1lbnRzIGFyZSBu
ZWVkZWQgdG8gY3JlYXRlIHRoZSBmaWx0ZXIgZnVuY3Rpb24KKyAgICAgICAgICAgIC8vIGp1c3Qg
YXMgU2l6emxlIGRvZXMKKyAgICAgICAgICAgIGlmICggZm5bIGV4cGFuZG8gXSApIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZm4oIGFyZ3VtZW50ICk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC8vIEJ1dCBtYWludGFpbiBzdXBwb3J0IGZvciBvbGQgc2lnbmF0dXJlcworICAgICAg
ICAgICAgaWYgKCBmbi5sZW5ndGggPiAxICkgeworICAgICAgICAgICAgICAgIGFyZ3MgPSBbIHBz
ZXVkbywgcHNldWRvLCAiIiwgYXJndW1lbnQgXTsKKyAgICAgICAgICAgICAgICByZXR1cm4gRXhw
ci5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KCBwc2V1ZG8udG9Mb3dlckNhc2UoKSApID8KKyAg
ICAgICAgICAgICAgICAgICAgbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlkeCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtYXRjaGVkID0gZm4oIHNlZWQsIGFyZ3VtZW50ICksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaSA9IG1hdGNoZWQubGVuZ3RoOworICAgICAgICAgICAgICAgICAgICAgICAg
d2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4ID0gaW5kZXhP
Ziggc2VlZCwgbWF0Y2hlZFtpXSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZWRb
IGlkeCBdID0gISggbWF0Y2hlc1sgaWR4IF0gPSBtYXRjaGVkW2ldICk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pIDoKKyAgICAgICAgICAgICAgICAg
ICAgZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm4o
IGVsZW0sIDAsIGFyZ3MgKTsKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgcmV0dXJuIGZuOworICAgICAgICB9CisgICAgfSwKKworICAgIHBzZXVk
b3M6IHsKKyAgICAgICAgLy8gUG90ZW50aWFsbHkgY29tcGxleCBwc2V1ZG9zCisgICAgICAgICJu
b3QiOiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlbGVjdG9yICkgeworICAgICAgICAgICAgLy8g
VHJpbSB0aGUgc2VsZWN0b3IgcGFzc2VkIHRvIGNvbXBpbGUKKyAgICAgICAgICAgIC8vIHRvIGF2
b2lkIHRyZWF0aW5nIGxlYWRpbmcgYW5kIHRyYWlsaW5nCisgICAgICAgICAgICAvLyBzcGFjZXMg
YXMgY29tYmluYXRvcnMKKyAgICAgICAgICAgIHZhciBpbnB1dCA9IFtdLAorICAgICAgICAgICAg
ICAgIHJlc3VsdHMgPSBbXSwKKyAgICAgICAgICAgICAgICBtYXRjaGVyID0gY29tcGlsZSggc2Vs
ZWN0b3IucmVwbGFjZSggcnRyaW0sICIkMSIgKSApOworCisgICAgICAgICAgICByZXR1cm4gbWF0
Y2hlclsgZXhwYW5kbyBdID8KKyAgICAgICAgICAgICAgICBtYXJrRnVuY3Rpb24oZnVuY3Rpb24o
IHNlZWQsIG1hdGNoZXMsIGNvbnRleHQsIHhtbCApIHsKKyAgICAgICAgICAgICAgICAgICAgdmFy
IGVsZW0sCisgICAgICAgICAgICAgICAgICAgICAgICB1bm1hdGNoZWQgPSBtYXRjaGVyKCBzZWVk
LCBudWxsLCB4bWwsIFtdICksCisgICAgICAgICAgICAgICAgICAgICAgICBpID0gc2VlZC5sZW5n
dGg7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gTWF0Y2ggZWxlbWVudHMgdW5tYXRjaGVkIGJ5
IGBtYXRjaGVyYAorICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGktLSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggKGVsZW0gPSB1bm1hdGNoZWRbaV0pICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlZWRbaV0gPSAhKG1hdGNoZXNbaV0gPSBlbGVtKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0pIDoKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkg
eworICAgICAgICAgICAgICAgICAgICBpbnB1dFswXSA9IGVsZW07CisgICAgICAgICAgICAgICAg
ICAgIG1hdGNoZXIoIGlucHV0LCBudWxsLCB4bWwsIHJlc3VsdHMgKTsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gRG9uJ3Qga2VlcCB0aGUgZWxlbWVudCAoaXNzdWUgIzI5OSkKKyAgICAgICAgICAg
ICAgICAgICAgaW5wdXRbMF0gPSBudWxsOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gIXJl
c3VsdHMucG9wKCk7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgfSksCisKKyAgICAgICAg
ImhhcyI6IG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisgICAgICAgICAgICBy
ZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNpenpsZSgg
c2VsZWN0b3IsIGVsZW0gKS5sZW5ndGggPiAwOworICAgICAgICAgICAgfTsKKyAgICAgICAgfSks
CisKKyAgICAgICAgImNvbnRhaW5zIjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCB0ZXh0ICkgewor
ICAgICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTsK
KyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gKCBlbGVtLnRleHRDb250ZW50IHx8IGVsZW0uaW5uZXJUZXh0IHx8IGdldFRleHQoIGVs
ZW0gKSApLmluZGV4T2YoIHRleHQgKSA+IC0xOworICAgICAgICAgICAgfTsKKyAgICAgICAgfSks
CisKKyAgICAgICAgLy8gIldoZXRoZXIgYW4gZWxlbWVudCBpcyByZXByZXNlbnRlZCBieSBhIDps
YW5nKCkgc2VsZWN0b3IKKyAgICAgICAgLy8gaXMgYmFzZWQgc29sZWx5IG9uIHRoZSBlbGVtZW50
J3MgbGFuZ3VhZ2UgdmFsdWUKKyAgICAgICAgLy8gYmVpbmcgZXF1YWwgdG8gdGhlIGlkZW50aWZp
ZXIgQywKKyAgICAgICAgLy8gb3IgYmVnaW5uaW5nIHdpdGggdGhlIGlkZW50aWZpZXIgQyBpbW1l
ZGlhdGVseSBmb2xsb3dlZCBieSAiLSIuCisgICAgICAgIC8vIFRoZSBtYXRjaGluZyBvZiBDIGFn
YWluc3QgdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZSBpcyBwZXJmb3JtZWQgY2FzZS1pbnNl
bnNpdGl2ZWx5LgorICAgICAgICAvLyBUaGUgaWRlbnRpZmllciBDIGRvZXMgbm90IGhhdmUgdG8g
YmUgYSB2YWxpZCBsYW5ndWFnZSBuYW1lLiIKKyAgICAgICAgLy8gaHR0cDovL3d3dy53My5vcmcv
VFIvc2VsZWN0b3JzLyNsYW5nLXBzZXVkbworICAgICAgICAibGFuZyI6IG1hcmtGdW5jdGlvbigg
ZnVuY3Rpb24oIGxhbmcgKSB7CisgICAgICAgICAgICAvLyBsYW5nIHZhbHVlIG11c3QgYmUgYSB2
YWxpZCBpZGVudGlmaWVyCisgICAgICAgICAgICBpZiAoICFyaWRlbnRpZmllci50ZXN0KGxhbmcg
fHwgIiIpICkgeworICAgICAgICAgICAgICAgIFNpenpsZS5lcnJvciggInVuc3VwcG9ydGVkIGxh
bmc6ICIgKyBsYW5nICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsYW5nID0gbGFuZy5y
ZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7CisgICAgICAgICAg
ICByZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgdmFyIGVsZW1MYW5n
OworICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAoZWxlbUxh
bmcgPSBkb2N1bWVudElzSFRNTCA/CisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmxhbmcg
OgorICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5nZXRBdHRyaWJ1dGUoInhtbDpsYW5nIikg
fHwgZWxlbS5nZXRBdHRyaWJ1dGUoImxhbmciKSkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW1MYW5nID0gZWxlbUxhbmcudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlbGVtTGFuZyA9PT0gbGFuZyB8fCBlbGVtTGFuZy5pbmRleE9mKCBsYW5n
ICsgIi0iICkgPT09IDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
IHdoaWxlICggKGVsZW0gPSBlbGVtLnBhcmVudE5vZGUpICYmIGVsZW0ubm9kZVR5cGUgPT09IDEg
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9OworICAgICAg
ICB9KSwKKworICAgICAgICAvLyBNaXNjZWxsYW5lb3VzCisgICAgICAgICJ0YXJnZXQiOiBmdW5j
dGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIHZhciBoYXNoID0gd2luZG93LmxvY2F0aW9uICYm
IHdpbmRvdy5sb2NhdGlvbi5oYXNoOworICAgICAgICAgICAgcmV0dXJuIGhhc2ggJiYgaGFzaC5z
bGljZSggMSApID09PSBlbGVtLmlkOworICAgICAgICB9LAorCisgICAgICAgICJyb290IjogZnVu
Y3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICByZXR1cm4gZWxlbSA9PT0gZG9jRWxlbTsKKyAg
ICAgICAgfSwKKworICAgICAgICAiZm9jdXMiOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAg
ICAgIHJldHVybiBlbGVtID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmICghZG9jdW1lbnQu
aGFzRm9jdXMgfHwgZG9jdW1lbnQuaGFzRm9jdXMoKSkgJiYgISEoZWxlbS50eXBlIHx8IGVsZW0u
aHJlZiB8fCB+ZWxlbS50YWJJbmRleCk7CisgICAgICAgIH0sCisKKyAgICAgICAgLy8gQm9vbGVh
biBwcm9wZXJ0aWVzCisgICAgICAgICJlbmFibGVkIjogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAg
ICAgICAgICByZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZmFsc2U7CisgICAgICAgIH0sCisKKyAg
ICAgICAgImRpc2FibGVkIjogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICByZXR1cm4g
ZWxlbS5kaXNhYmxlZCA9PT0gdHJ1ZTsKKyAgICAgICAgfSwKKworICAgICAgICAiY2hlY2tlZCI6
IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgLy8gSW4gQ1NTMywgOmNoZWNrZWQgc2hv
dWxkIHJldHVybiBib3RoIGNoZWNrZWQgYW5kIHNlbGVjdGVkIGVsZW1lbnRzCisgICAgICAgICAg
ICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDky
OS8jY2hlY2tlZAorICAgICAgICAgICAgdmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZS50b0xv
d2VyQ2FzZSgpOworICAgICAgICAgICAgcmV0dXJuIChub2RlTmFtZSA9PT0gImlucHV0IiAmJiAh
IWVsZW0uY2hlY2tlZCkgfHwgKG5vZGVOYW1lID09PSAib3B0aW9uIiAmJiAhIWVsZW0uc2VsZWN0
ZWQpOworICAgICAgICB9LAorCisgICAgICAgICJzZWxlY3RlZCI6IGZ1bmN0aW9uKCBlbGVtICkg
eworICAgICAgICAgICAgLy8gQWNjZXNzaW5nIHRoaXMgcHJvcGVydHkgbWFrZXMgc2VsZWN0ZWQt
YnktZGVmYXVsdAorICAgICAgICAgICAgLy8gb3B0aW9ucyBpbiBTYWZhcmkgd29yayBwcm9wZXJs
eQorICAgICAgICAgICAgaWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7CisgICAgICAgICAgICAgICAg
ZWxlbS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHJldHVybiBlbGVtLnNlbGVjdGVkID09PSB0cnVlOworICAgICAgICB9LAorCisgICAgICAg
IC8vIENvbnRlbnRzCisgICAgICAgICJlbXB0eSI6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAg
ICAgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNlbXB0eS1wc2V1ZG8KKyAg
ICAgICAgICAgIC8vIDplbXB0eSBpcyBuZWdhdGVkIGJ5IGVsZW1lbnQgKDEpIG9yIGNvbnRlbnQg
bm9kZXMgKHRleHQ6IDM7IGNkYXRhOiA0OyBlbnRpdHkgcmVmOiA1KSwKKyAgICAgICAgICAgIC8v
ICAgYnV0IG5vdCBieSBvdGhlcnMgKGNvbW1lbnQ6IDg7IHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb246
IDc7IGV0Yy4pCisgICAgICAgICAgICAvLyBub2RlVHlwZSA8IDYgd29ya3MgYmVjYXVzZSBhdHRy
aWJ1dGVzICgyKSBkbyBub3QgYXBwZWFyIGFzIGNoaWxkcmVuCisgICAgICAgICAgICBmb3IgKCBl
bGVtID0gZWxlbS5maXJzdENoaWxkOyBlbGVtOyBlbGVtID0gZWxlbS5uZXh0U2libGluZyApIHsK
KyAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPCA2ICkgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0sCisKKyAgICAgICAgInBhcmVudCI6
IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgcmV0dXJuICFFeHByLnBzZXVkb3NbImVt
cHR5Il0oIGVsZW0gKTsKKyAgICAgICAgfSwKKworICAgICAgICAvLyBFbGVtZW50L2lucHV0IHR5
cGVzCisgICAgICAgICJoZWFkZXIiOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIHJl
dHVybiByaGVhZGVyLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTsKKyAgICAgICAgfSwKKworICAgICAg
ICAiaW5wdXQiOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIHJldHVybiByaW5wdXRz
LnRlc3QoIGVsZW0ubm9kZU5hbWUgKTsKKyAgICAgICAgfSwKKworICAgICAgICAiYnV0dG9uIjog
ZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICB2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUu
dG9Mb3dlckNhc2UoKTsKKyAgICAgICAgICAgIHJldHVybiBuYW1lID09PSAiaW5wdXQiICYmIGVs
ZW0udHlwZSA9PT0gImJ1dHRvbiIgfHwgbmFtZSA9PT0gImJ1dHRvbiI7CisgICAgICAgIH0sCisK
KyAgICAgICAgInRleHQiOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIHZhciBhdHRy
OworICAgICAgICAgICAgcmV0dXJuIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gImlu
cHV0IiAmJgorICAgICAgICAgICAgICAgIGVsZW0udHlwZSA9PT0gInRleHQiICYmCisKKyAgICAg
ICAgICAgICAgICAvLyBTdXBwb3J0OiBJRTw4CisgICAgICAgICAgICAgICAgLy8gTmV3IEhUTUw1
IGF0dHJpYnV0ZSB2YWx1ZXMgKGUuZy4sICJzZWFyY2giKSBhcHBlYXIgd2l0aCBlbGVtLnR5cGUg
PT09ICJ0ZXh0IgorICAgICAgICAgICAgICAgICggKGF0dHIgPSBlbGVtLmdldEF0dHJpYnV0ZSgi
dHlwZSIpKSA9PSBudWxsIHx8IGF0dHIudG9Mb3dlckNhc2UoKSA9PT0gInRleHQiICk7CisgICAg
ICAgIH0sCisKKyAgICAgICAgLy8gUG9zaXRpb24taW4tY29sbGVjdGlvbgorICAgICAgICAiZmly
c3QiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcmV0
dXJuIFsgMCBdOworICAgICAgICB9KSwKKworICAgICAgICAibGFzdCI6IGNyZWF0ZVBvc2l0aW9u
YWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkgeworICAgICAgICAgICAg
cmV0dXJuIFsgbGVuZ3RoIC0gMSBdOworICAgICAgICB9KSwKKworICAgICAgICAiZXEiOiBjcmVh
dGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1l
bnQgKSB7CisgICAgICAgICAgICByZXR1cm4gWyBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxl
bmd0aCA6IGFyZ3VtZW50IF07CisgICAgICAgIH0pLAorCisgICAgICAgICJldmVuIjogY3JlYXRl
UG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7CisgICAg
ICAgICAgICB2YXIgaSA9IDA7CisgICAgICAgICAgICBmb3IgKCA7IGkgPCBsZW5ndGg7IGkgKz0g
MiApIHsKKyAgICAgICAgICAgICAgICBtYXRjaEluZGV4ZXMucHVzaCggaSApOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIG1hdGNoSW5kZXhlczsKKyAgICAgICAgfSksCisKKyAg
ICAgICAgIm9kZCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhl
cywgbGVuZ3RoICkgeworICAgICAgICAgICAgdmFyIGkgPSAxOworICAgICAgICAgICAgZm9yICgg
OyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7CisgICAgICAgICAgICAgICAgbWF0Y2hJbmRleGVzLnB1
c2goIGkgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBtYXRjaEluZGV4ZXM7
CisgICAgICAgIH0pLAorCisgICAgICAgICJsdCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVu
Y3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHsKKyAgICAgICAgICAgIHZh
ciBpID0gYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudDsKKyAgICAg
ICAgICAgIGZvciAoIDsgLS1pID49IDA7ICkgeworICAgICAgICAgICAgICAgIG1hdGNoSW5kZXhl
cy5wdXNoKCBpICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hJbmRl
eGVzOworICAgICAgICB9KSwKKworICAgICAgICAiZ3QiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRv
KGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7CisgICAgICAgICAg
ICB2YXIgaSA9IGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQ7Cisg
ICAgICAgICAgICBmb3IgKCA7ICsraSA8IGxlbmd0aDsgKSB7CisgICAgICAgICAgICAgICAgbWF0
Y2hJbmRleGVzLnB1c2goIGkgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBt
YXRjaEluZGV4ZXM7CisgICAgICAgIH0pCisgICAgfQorfTsKKworRXhwci5wc2V1ZG9zWyJudGgi
XSA9IEV4cHIucHNldWRvc1siZXEiXTsKKworLy8gQWRkIGJ1dHRvbi9pbnB1dCB0eXBlIHBzZXVk
b3MKK2ZvciAoIGkgaW4geyByYWRpbzogdHJ1ZSwgY2hlY2tib3g6IHRydWUsIGZpbGU6IHRydWUs
IHBhc3N3b3JkOiB0cnVlLCBpbWFnZTogdHJ1ZSB9ICkgeworICAgIEV4cHIucHNldWRvc1sgaSBd
ID0gY3JlYXRlSW5wdXRQc2V1ZG8oIGkgKTsKK30KK2ZvciAoIGkgaW4geyBzdWJtaXQ6IHRydWUs
IHJlc2V0OiB0cnVlIH0gKSB7CisgICAgRXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVCdXR0b25Q
c2V1ZG8oIGkgKTsKK30KKworLy8gRWFzeSBBUEkgZm9yIGNyZWF0aW5nIG5ldyBzZXRGaWx0ZXJz
CitmdW5jdGlvbiBzZXRGaWx0ZXJzKCkge30KK3NldEZpbHRlcnMucHJvdG90eXBlID0gRXhwci5m
aWx0ZXJzID0gRXhwci5wc2V1ZG9zOworRXhwci5zZXRGaWx0ZXJzID0gbmV3IHNldEZpbHRlcnMo
KTsKKwordG9rZW5pemUgPSBTaXp6bGUudG9rZW5pemUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIHBh
cnNlT25seSApIHsKKyAgICB2YXIgbWF0Y2hlZCwgbWF0Y2gsIHRva2VucywgdHlwZSwKKyAgICAg
ICAgc29GYXIsIGdyb3VwcywgcHJlRmlsdGVycywKKyAgICAgICAgY2FjaGVkID0gdG9rZW5DYWNo
ZVsgc2VsZWN0b3IgKyAiICIgXTsKKworICAgIGlmICggY2FjaGVkICkgeworICAgICAgICByZXR1
cm4gcGFyc2VPbmx5ID8gMCA6IGNhY2hlZC5zbGljZSggMCApOworICAgIH0KKworICAgIHNvRmFy
ID0gc2VsZWN0b3I7CisgICAgZ3JvdXBzID0gW107CisgICAgcHJlRmlsdGVycyA9IEV4cHIucHJl
RmlsdGVyOworCisgICAgd2hpbGUgKCBzb0ZhciApIHsKKworICAgICAgICAvLyBDb21tYSBhbmQg
Zmlyc3QgcnVuCisgICAgICAgIGlmICggIW1hdGNoZWQgfHwgKG1hdGNoID0gcmNvbW1hLmV4ZWMo
IHNvRmFyICkpICkgeworICAgICAgICAgICAgaWYgKCBtYXRjaCApIHsKKyAgICAgICAgICAgICAg
ICAvLyBEb24ndCBjb25zdW1lIHRyYWlsaW5nIGNvbW1hcyBhcyB2YWxpZAorICAgICAgICAgICAg
ICAgIHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoWzBdLmxlbmd0aCApIHx8IHNvRmFyOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZ3JvdXBzLnB1c2goICh0b2tlbnMgPSBbXSkgKTsKKyAg
ICAgICAgfQorCisgICAgICAgIG1hdGNoZWQgPSBmYWxzZTsKKworICAgICAgICAvLyBDb21iaW5h
dG9ycworICAgICAgICBpZiAoIChtYXRjaCA9IHJjb21iaW5hdG9ycy5leGVjKCBzb0ZhciApKSAp
IHsKKyAgICAgICAgICAgIG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpOworICAgICAgICAgICAgdG9r
ZW5zLnB1c2goeworICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaGVkLAorICAgICAgICAgICAg
ICAgIC8vIENhc3QgZGVzY2VuZGFudCBjb21iaW5hdG9ycyB0byBzcGFjZQorICAgICAgICAgICAg
ICAgIHR5cGU6IG1hdGNoWzBdLnJlcGxhY2UoIHJ0cmltLCAiICIgKQorICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICBzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaGVkLmxlbmd0aCApOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRmlsdGVycworICAgICAgICBmb3IgKCB0eXBlIGluIEV4cHIu
ZmlsdGVyICkgeworICAgICAgICAgICAgaWYgKCAobWF0Y2ggPSBtYXRjaEV4cHJbIHR5cGUgXS5l
eGVjKCBzb0ZhciApKSAmJiAoIXByZUZpbHRlcnNbIHR5cGUgXSB8fAorICAgICAgICAgICAgICAg
IChtYXRjaCA9IHByZUZpbHRlcnNbIHR5cGUgXSggbWF0Y2ggKSkpICkgeworICAgICAgICAgICAg
ICAgIG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpOworICAgICAgICAgICAgICAgIHRva2Vucy5wdXNo
KHsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoZWQsCisgICAgICAgICAgICAgICAg
ICAgIHR5cGU6IHR5cGUsCisgICAgICAgICAgICAgICAgICAgIG1hdGNoZXM6IG1hdGNoCisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgc29GYXIgPSBzb0Zhci5zbGljZSggbWF0
Y2hlZC5sZW5ndGggKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICgg
IW1hdGNoZWQgKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBpbnZhbGlkIGV4Y2VzcworICAgIC8vIGlmIHdl
J3JlIGp1c3QgcGFyc2luZworICAgIC8vIE90aGVyd2lzZSwgdGhyb3cgYW4gZXJyb3Igb3IgcmV0
dXJuIHRva2VucworICAgIHJldHVybiBwYXJzZU9ubHkgPworICAgICAgICBzb0Zhci5sZW5ndGgg
OgorICAgICAgICBzb0ZhciA/CisgICAgICAgICAgICBTaXp6bGUuZXJyb3IoIHNlbGVjdG9yICkg
OgorICAgICAgICAgICAgLy8gQ2FjaGUgdGhlIHRva2VucworICAgICAgICAgICAgdG9rZW5DYWNo
ZSggc2VsZWN0b3IsIGdyb3VwcyApLnNsaWNlKCAwICk7Cit9OworCitmdW5jdGlvbiB0b1NlbGVj
dG9yKCB0b2tlbnMgKSB7CisgICAgdmFyIGkgPSAwLAorICAgICAgICBsZW4gPSB0b2tlbnMubGVu
Z3RoLAorICAgICAgICBzZWxlY3RvciA9ICIiOworICAgIGZvciAoIDsgaSA8IGxlbjsgaSsrICkg
eworICAgICAgICBzZWxlY3RvciArPSB0b2tlbnNbaV0udmFsdWU7CisgICAgfQorICAgIHJldHVy
biBzZWxlY3RvcjsKK30KKworZnVuY3Rpb24gYWRkQ29tYmluYXRvciggbWF0Y2hlciwgY29tYmlu
YXRvciwgYmFzZSApIHsKKyAgICB2YXIgZGlyID0gY29tYmluYXRvci5kaXIsCisgICAgICAgIGNo
ZWNrTm9uRWxlbWVudHMgPSBiYXNlICYmIGRpciA9PT0gInBhcmVudE5vZGUiLAorICAgICAgICBk
b25lTmFtZSA9IGRvbmUrKzsKKworICAgIHJldHVybiBjb21iaW5hdG9yLmZpcnN0ID8KKyAgICAg
ICAgLy8gQ2hlY2sgYWdhaW5zdCBjbG9zZXN0IGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50Cisg
ICAgICAgIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7CisgICAgICAgICAgICB3aGls
ZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkgeworICAgICAgICAgICAgICAgIGlmICggZWxlbS5u
b2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9IDoKKworICAgICAgICAvLyBDaGVjayBhZ2FpbnN0
IGFsbCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudHMKKyAgICAgICAgZnVuY3Rpb24oIGVsZW0s
IGNvbnRleHQsIHhtbCApIHsKKyAgICAgICAgICAgIHZhciBvbGRDYWNoZSwgdW5pcXVlQ2FjaGUs
IG91dGVyQ2FjaGUsCisgICAgICAgICAgICAgICAgbmV3Q2FjaGUgPSBbIGRpcnJ1bnMsIGRvbmVO
YW1lIF07CisKKyAgICAgICAgICAgIC8vIFdlIGNhbid0IHNldCBhcmJpdHJhcnkgZGF0YSBvbiBY
TUwgbm9kZXMsIHNvIHRoZXkgZG9uJ3QgYmVuZWZpdCBmcm9tIGNvbWJpbmF0b3IgY2FjaGluZwor
ICAgICAgICAgICAgaWYgKCB4bWwgKSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKCAoZWxlbSA9
IGVsZW1bIGRpciBdKSApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBl
ID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICB3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50
cyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dGVyQ2FjaGUgPSBlbGVtWyBleHBhbmRv
IF0gfHwgKGVsZW1bIGV4cGFuZG8gXSA9IHt9KTsKKworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gU3VwcG9ydDogSUUgPDkgb25seQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVmZW5k
IGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpCisgICAgICAgICAg
ICAgICAgICAgICAgICB1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIGVsZW0udW5pcXVlSUQgXSB8
fCAob3V0ZXJDYWNoZVsgZWxlbS51bmlxdWVJRCBdID0ge30pOworCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIChvbGRDYWNoZSA9IHVuaXF1ZUNhY2hlWyBkaXIgXSkgJiYKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvbGRDYWNoZVsgMCBdID09PSBkaXJydW5zICYmIG9sZENhY2hl
WyAxIF0gPT09IGRvbmVOYW1lICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
QXNzaWduIHRvIG5ld0NhY2hlIHNvIHJlc3VsdHMgYmFjay1wcm9wYWdhdGUgdG8gcHJldmlvdXMg
ZWxlbWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG5ld0NhY2hlWyAy
IF0gPSBvbGRDYWNoZVsgMiBdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV1c2UgbmV3Y2FjaGUgc28gcmVzdWx0cyBi
YWNrLXByb3BhZ2F0ZSB0byBwcmV2aW91cyBlbGVtZW50cworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuaXF1ZUNhY2hlWyBkaXIgXSA9IG5ld0NhY2hlOworCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gQSBtYXRjaCBtZWFucyB3ZSdyZSBkb25lOyBhIGZhaWwgbWVhbnMgd2Ug
aGF2ZSB0byBrZWVwIGNoZWNraW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAo
bmV3Q2FjaGVbIDIgXSA9IG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApKSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9OworfQor
CitmdW5jdGlvbiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSB7CisgICAgcmV0dXJuIG1hdGNo
ZXJzLmxlbmd0aCA+IDEgPworICAgICAgICBmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkg
eworICAgICAgICAgICAgdmFyIGkgPSBtYXRjaGVycy5sZW5ndGg7CisgICAgICAgICAgICB3aGls
ZSAoIGktLSApIHsKKyAgICAgICAgICAgICAgICBpZiAoICFtYXRjaGVyc1tpXSggZWxlbSwgY29u
dGV4dCwgeG1sICkgKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfSA6CisgICAgICAgIG1hdGNoZXJzWzBdOworfQorCitmdW5jdGlvbiBtdWx0aXBsZUNv
bnRleHRzKCBzZWxlY3RvciwgY29udGV4dHMsIHJlc3VsdHMgKSB7CisgICAgdmFyIGkgPSAwLAor
ICAgICAgICBsZW4gPSBjb250ZXh0cy5sZW5ndGg7CisgICAgZm9yICggOyBpIDwgbGVuOyBpKysg
KSB7CisgICAgICAgIFNpenpsZSggc2VsZWN0b3IsIGNvbnRleHRzW2ldLCByZXN1bHRzICk7Cisg
ICAgfQorICAgIHJldHVybiByZXN1bHRzOworfQorCitmdW5jdGlvbiBjb25kZW5zZSggdW5tYXRj
aGVkLCBtYXAsIGZpbHRlciwgY29udGV4dCwgeG1sICkgeworICAgIHZhciBlbGVtLAorICAgICAg
ICBuZXdVbm1hdGNoZWQgPSBbXSwKKyAgICAgICAgaSA9IDAsCisgICAgICAgIGxlbiA9IHVubWF0
Y2hlZC5sZW5ndGgsCisgICAgICAgIG1hcHBlZCA9IG1hcCAhPSBudWxsOworCisgICAgZm9yICgg
OyBpIDwgbGVuOyBpKysgKSB7CisgICAgICAgIGlmICggKGVsZW0gPSB1bm1hdGNoZWRbaV0pICkg
eworICAgICAgICAgICAgaWYgKCAhZmlsdGVyIHx8IGZpbHRlciggZWxlbSwgY29udGV4dCwgeG1s
ICkgKSB7CisgICAgICAgICAgICAgICAgbmV3VW5tYXRjaGVkLnB1c2goIGVsZW0gKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIG1hcHBlZCApIHsKKyAgICAgICAgICAgICAgICAgICAgbWFwLnB1c2go
IGkgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gbmV3VW5tYXRjaGVkOworfQorCitmdW5jdGlvbiBzZXRNYXRjaGVyKCBw
cmVGaWx0ZXIsIHNlbGVjdG9yLCBtYXRjaGVyLCBwb3N0RmlsdGVyLCBwb3N0RmluZGVyLCBwb3N0
U2VsZWN0b3IgKSB7CisgICAgaWYgKCBwb3N0RmlsdGVyICYmICFwb3N0RmlsdGVyWyBleHBhbmRv
IF0gKSB7CisgICAgICAgIHBvc3RGaWx0ZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmlsdGVyICk7Cisg
ICAgfQorICAgIGlmICggcG9zdEZpbmRlciAmJiAhcG9zdEZpbmRlclsgZXhwYW5kbyBdICkgewor
ICAgICAgICBwb3N0RmluZGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9y
ICk7CisgICAgfQorICAgIHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIHJlc3Vs
dHMsIGNvbnRleHQsIHhtbCApIHsKKyAgICAgICAgdmFyIHRlbXAsIGksIGVsZW0sCisgICAgICAg
ICAgICBwcmVNYXAgPSBbXSwKKyAgICAgICAgICAgIHBvc3RNYXAgPSBbXSwKKyAgICAgICAgICAg
IHByZWV4aXN0aW5nID0gcmVzdWx0cy5sZW5ndGgsCisKKyAgICAgICAgICAgIC8vIEdldCBpbml0
aWFsIGVsZW1lbnRzIGZyb20gc2VlZCBvciBjb250ZXh0CisgICAgICAgICAgICBlbGVtcyA9IHNl
ZWQgfHwgbXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IgfHwgIioiLCBjb250ZXh0Lm5vZGVUeXBl
ID8gWyBjb250ZXh0IF0gOiBjb250ZXh0LCBbXSApLAorCisgICAgICAgICAgICAvLyBQcmVmaWx0
ZXIgdG8gZ2V0IG1hdGNoZXIgaW5wdXQsIHByZXNlcnZpbmcgYSBtYXAgZm9yIHNlZWQtcmVzdWx0
cyBzeW5jaHJvbml6YXRpb24KKyAgICAgICAgICAgIG1hdGNoZXJJbiA9IHByZUZpbHRlciAmJiAo
IHNlZWQgfHwgIXNlbGVjdG9yICkgPworICAgICAgICAgICAgICAgIGNvbmRlbnNlKCBlbGVtcywg
cHJlTWFwLCBwcmVGaWx0ZXIsIGNvbnRleHQsIHhtbCApIDoKKyAgICAgICAgICAgICAgICBlbGVt
cywKKworICAgICAgICAgICAgbWF0Y2hlck91dCA9IG1hdGNoZXIgPworICAgICAgICAgICAgICAg
IC8vIElmIHdlIGhhdmUgYSBwb3N0RmluZGVyLCBvciBmaWx0ZXJlZCBzZWVkLCBvciBub24tc2Vl
ZCBwb3N0RmlsdGVyIG9yIHByZWV4aXN0aW5nIHJlc3VsdHMsCisgICAgICAgICAgICAgICAgcG9z
dEZpbmRlciB8fCAoIHNlZWQgPyBwcmVGaWx0ZXIgOiBwcmVleGlzdGluZyB8fCBwb3N0RmlsdGVy
ICkgPworCisgICAgICAgICAgICAgICAgICAgIC8vIC4uLmludGVybWVkaWF0ZSBwcm9jZXNzaW5n
IGlzIG5lY2Vzc2FyeQorICAgICAgICAgICAgICAgICAgICBbXSA6CisKKyAgICAgICAgICAgICAg
ICAgICAgLy8gLi4ub3RoZXJ3aXNlIHVzZSByZXN1bHRzIGRpcmVjdGx5CisgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdHMgOgorICAgICAgICAgICAgICAgIG1hdGNoZXJJbjsKKworICAgICAgICAv
LyBGaW5kIHByaW1hcnkgbWF0Y2hlcworICAgICAgICBpZiAoIG1hdGNoZXIgKSB7CisgICAgICAg
ICAgICBtYXRjaGVyKCBtYXRjaGVySW4sIG1hdGNoZXJPdXQsIGNvbnRleHQsIHhtbCApOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gQXBwbHkgcG9zdEZpbHRlcgorICAgICAgICBpZiAoIHBvc3RG
aWx0ZXIgKSB7CisgICAgICAgICAgICB0ZW1wID0gY29uZGVuc2UoIG1hdGNoZXJPdXQsIHBvc3RN
YXAgKTsKKyAgICAgICAgICAgIHBvc3RGaWx0ZXIoIHRlbXAsIFtdLCBjb250ZXh0LCB4bWwgKTsK
KworICAgICAgICAgICAgLy8gVW4tbWF0Y2ggZmFpbGluZyBlbGVtZW50cyBieSBtb3ZpbmcgdGhl
bSBiYWNrIHRvIG1hdGNoZXJJbgorICAgICAgICAgICAgaSA9IHRlbXAubGVuZ3RoOworICAgICAg
ICAgICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAgICAgICAgaWYgKCAoZWxlbSA9IHRlbXBb
aV0pICkgeworICAgICAgICAgICAgICAgICAgICBtYXRjaGVyT3V0WyBwb3N0TWFwW2ldIF0gPSAh
KG1hdGNoZXJJblsgcG9zdE1hcFtpXSBdID0gZWxlbSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCBzZWVkICkgeworICAgICAgICAg
ICAgaWYgKCBwb3N0RmluZGVyIHx8IHByZUZpbHRlciApIHsKKyAgICAgICAgICAgICAgICBpZiAo
IHBvc3RGaW5kZXIgKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgZmluYWwgbWF0
Y2hlck91dCBieSBjb25kZW5zaW5nIHRoaXMgaW50ZXJtZWRpYXRlIGludG8gcG9zdEZpbmRlciBj
b250ZXh0cworICAgICAgICAgICAgICAgICAgICB0ZW1wID0gW107CisgICAgICAgICAgICAgICAg
ICAgIGkgPSBtYXRjaGVyT3V0Lmxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBp
LS0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIChlbGVtID0gbWF0Y2hlck91dFtp
XSkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVzdG9yZSBtYXRjaGVySW4g
c2luY2UgZWxlbSBpcyBub3QgeWV0IGEgZmluYWwgbWF0Y2gKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0ZW1wLnB1c2goIChtYXRjaGVySW5baV0gPSBlbGVtKSApOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IHBvc3RGaW5kZXIoIG51bGwsIChtYXRjaGVyT3V0ID0gW10pLCB0ZW1wLCB4bWwgKTsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBNb3ZlIG1hdGNoZWQgZWxlbWVudHMg
ZnJvbSBzZWVkIHRvIHJlc3VsdHMgdG8ga2VlcCB0aGVtIHN5bmNocm9uaXplZAorICAgICAgICAg
ICAgICAgIGkgPSBtYXRjaGVyT3V0Lmxlbmd0aDsKKyAgICAgICAgICAgICAgICB3aGlsZSAoIGkt
LSApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAoZWxlbSA9IG1hdGNoZXJPdXRbaV0pICYm
CisgICAgICAgICAgICAgICAgICAgICAgICAodGVtcCA9IHBvc3RGaW5kZXIgPyBpbmRleE9mKCBz
ZWVkLCBlbGVtICkgOiBwcmVNYXBbaV0pID4gLTEgKSB7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHNlZWRbdGVtcF0gPSAhKHJlc3VsdHNbdGVtcF0gPSBlbGVtKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAvLyBB
ZGQgZWxlbWVudHMgdG8gcmVzdWx0cywgdGhyb3VnaCBwb3N0RmluZGVyIGlmIGRlZmluZWQKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1hdGNoZXJPdXQgPSBjb25kZW5zZSgKKyAgICAg
ICAgICAgICAgICBtYXRjaGVyT3V0ID09PSByZXN1bHRzID8KKyAgICAgICAgICAgICAgICAgICAg
bWF0Y2hlck91dC5zcGxpY2UoIHByZWV4aXN0aW5nLCBtYXRjaGVyT3V0Lmxlbmd0aCApIDoKKyAg
ICAgICAgICAgICAgICAgICAgbWF0Y2hlck91dAorICAgICAgICAgICAgKTsKKyAgICAgICAgICAg
IGlmICggcG9zdEZpbmRlciApIHsKKyAgICAgICAgICAgICAgICBwb3N0RmluZGVyKCBudWxsLCBy
ZXN1bHRzLCBtYXRjaGVyT3V0LCB4bWwgKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgcHVzaC5hcHBseSggcmVzdWx0cywgbWF0Y2hlck91dCApOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIG1hdGNoZXJGcm9tVG9rZW5zKCB0
b2tlbnMgKSB7CisgICAgdmFyIGNoZWNrQ29udGV4dCwgbWF0Y2hlciwgaiwKKyAgICAgICAgbGVu
ID0gdG9rZW5zLmxlbmd0aCwKKyAgICAgICAgbGVhZGluZ1JlbGF0aXZlID0gRXhwci5yZWxhdGl2
ZVsgdG9rZW5zWzBdLnR5cGUgXSwKKyAgICAgICAgaW1wbGljaXRSZWxhdGl2ZSA9IGxlYWRpbmdS
ZWxhdGl2ZSB8fCBFeHByLnJlbGF0aXZlWyIgIl0sCisgICAgICAgIGkgPSBsZWFkaW5nUmVsYXRp
dmUgPyAxIDogMCwKKworICAgICAgICAvLyBUaGUgZm91bmRhdGlvbmFsIG1hdGNoZXIgZW5zdXJl
cyB0aGF0IGVsZW1lbnRzIGFyZSByZWFjaGFibGUgZnJvbSB0b3AtbGV2ZWwgY29udGV4dChzKQor
ICAgICAgICBtYXRjaENvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHsK
KyAgICAgICAgICAgIHJldHVybiBlbGVtID09PSBjaGVja0NvbnRleHQ7CisgICAgICAgIH0sIGlt
cGxpY2l0UmVsYXRpdmUsIHRydWUgKSwKKyAgICAgICAgbWF0Y2hBbnlDb250ZXh0ID0gYWRkQ29t
YmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICByZXR1cm4gaW5kZXhPZigg
Y2hlY2tDb250ZXh0LCBlbGVtICkgPiAtMTsKKyAgICAgICAgfSwgaW1wbGljaXRSZWxhdGl2ZSwg
dHJ1ZSApLAorICAgICAgICBtYXRjaGVycyA9IFsgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHht
bCApIHsKKyAgICAgICAgICAgIHZhciByZXQgPSAoICFsZWFkaW5nUmVsYXRpdmUgJiYgKCB4bWwg
fHwgY29udGV4dCAhPT0gb3V0ZXJtb3N0Q29udGV4dCApICkgfHwgKAorICAgICAgICAgICAgICAg
IChjaGVja0NvbnRleHQgPSBjb250ZXh0KS5ub2RlVHlwZSA/CisgICAgICAgICAgICAgICAgICAg
IG1hdGNoQ29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgOgorICAgICAgICAgICAgICAgICAg
ICBtYXRjaEFueUNvbnRleHQoIGVsZW0sIGNvbnRleHQsIHhtbCApICk7CisgICAgICAgICAgICAv
LyBBdm9pZCBoYW5naW5nIG9udG8gZWxlbWVudCAoaXNzdWUgIzI5OSkKKyAgICAgICAgICAgIGNo
ZWNrQ29udGV4dCA9IG51bGw7CisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9IF07
CisKKyAgICBmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsKKyAgICAgICAgaWYgKCAobWF0Y2hlciA9
IEV4cHIucmVsYXRpdmVbIHRva2Vuc1tpXS50eXBlIF0pICkgeworICAgICAgICAgICAgbWF0Y2hl
cnMgPSBbIGFkZENvbWJpbmF0b3IoZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICksIG1hdGNoZXIp
IF07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtYXRjaGVyID0gRXhwci5maWx0ZXJb
IHRva2Vuc1tpXS50eXBlIF0uYXBwbHkoIG51bGwsIHRva2Vuc1tpXS5tYXRjaGVzICk7CisKKyAg
ICAgICAgICAgIC8vIFJldHVybiBzcGVjaWFsIHVwb24gc2VlaW5nIGEgcG9zaXRpb25hbCBtYXRj
aGVyCisgICAgICAgICAgICBpZiAoIG1hdGNoZXJbIGV4cGFuZG8gXSApIHsKKyAgICAgICAgICAg
ICAgICAvLyBGaW5kIHRoZSBuZXh0IHJlbGF0aXZlIG9wZXJhdG9yIChpZiBhbnkpIGZvciBwcm9w
ZXIgaGFuZGxpbmcKKyAgICAgICAgICAgICAgICBqID0gKytpOworICAgICAgICAgICAgICAgIGZv
ciAoIDsgaiA8IGxlbjsgaisrICkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIEV4cHIucmVs
YXRpdmVbIHRva2Vuc1tqXS50eXBlIF0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICByZXR1cm4gc2V0TWF0Y2hlcigKKyAgICAgICAgICAgICAgICAgICAgaSA+IDEgJiYgZWxl
bWVudE1hdGNoZXIoIG1hdGNoZXJzICksCisgICAgICAgICAgICAgICAgICAgIGkgPiAxICYmIHRv
U2VsZWN0b3IoCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcHJlY2VkaW5nIHRv
a2VuIHdhcyBhIGRlc2NlbmRhbnQgY29tYmluYXRvciwgaW5zZXJ0IGFuIGltcGxpY2l0IGFueS1l
bGVtZW50IGAqYAorICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnNsaWNlKCAwLCBpIC0g
MSApLmNvbmNhdCh7IHZhbHVlOiB0b2tlbnNbIGkgLSAyIF0udHlwZSA9PT0gIiAiID8gIioiIDog
IiIgfSkKKyAgICAgICAgICAgICAgICAgICAgKS5yZXBsYWNlKCBydHJpbSwgIiQxIiApLAorICAg
ICAgICAgICAgICAgICAgICBtYXRjaGVyLAorICAgICAgICAgICAgICAgICAgICBpIDwgaiAmJiBt
YXRjaGVyRnJvbVRva2VucyggdG9rZW5zLnNsaWNlKCBpLCBqICkgKSwKKyAgICAgICAgICAgICAg
ICAgICAgaiA8IGxlbiAmJiBtYXRjaGVyRnJvbVRva2VucyggKHRva2VucyA9IHRva2Vucy5zbGlj
ZSggaiApKSApLAorICAgICAgICAgICAgICAgICAgICBqIDwgbGVuICYmIHRvU2VsZWN0b3IoIHRv
a2VucyApCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1h
dGNoZXJzLnB1c2goIG1hdGNoZXIgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBl
bGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKTsKK30KKworZnVuY3Rpb24gbWF0Y2hlckZyb21Hcm91
cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkgeworICAgIHZhciBieVNl
dCA9IHNldE1hdGNoZXJzLmxlbmd0aCA+IDAsCisgICAgICAgIGJ5RWxlbWVudCA9IGVsZW1lbnRN
YXRjaGVycy5sZW5ndGggPiAwLAorICAgICAgICBzdXBlck1hdGNoZXIgPSBmdW5jdGlvbiggc2Vl
ZCwgY29udGV4dCwgeG1sLCByZXN1bHRzLCBvdXRlcm1vc3QgKSB7CisgICAgICAgICAgICB2YXIg
ZWxlbSwgaiwgbWF0Y2hlciwKKyAgICAgICAgICAgICAgICBtYXRjaGVkQ291bnQgPSAwLAorICAg
ICAgICAgICAgICAgIGkgPSAiMCIsCisgICAgICAgICAgICAgICAgdW5tYXRjaGVkID0gc2VlZCAm
JiBbXSwKKyAgICAgICAgICAgICAgICBzZXRNYXRjaGVkID0gW10sCisgICAgICAgICAgICAgICAg
Y29udGV4dEJhY2t1cCA9IG91dGVybW9zdENvbnRleHQsCisgICAgICAgICAgICAgICAgLy8gV2Ug
bXVzdCBhbHdheXMgaGF2ZSBlaXRoZXIgc2VlZCBlbGVtZW50cyBvciBvdXRlcm1vc3QgY29udGV4
dAorICAgICAgICAgICAgICAgIGVsZW1zID0gc2VlZCB8fCBieUVsZW1lbnQgJiYgRXhwci5maW5k
WyJUQUciXSggIioiLCBvdXRlcm1vc3QgKSwKKyAgICAgICAgICAgICAgICAvLyBVc2UgaW50ZWdl
ciBkaXJydW5zIGlmZiB0aGlzIGlzIHRoZSBvdXRlcm1vc3QgbWF0Y2hlcgorICAgICAgICAgICAg
ICAgIGRpcnJ1bnNVbmlxdWUgPSAoZGlycnVucyArPSBjb250ZXh0QmFja3VwID09IG51bGwgPyAx
IDogTWF0aC5yYW5kb20oKSB8fCAwLjEpLAorICAgICAgICAgICAgICAgIGxlbiA9IGVsZW1zLmxl
bmd0aDsKKworICAgICAgICAgICAgaWYgKCBvdXRlcm1vc3QgKSB7CisgICAgICAgICAgICAgICAg
b3V0ZXJtb3N0Q29udGV4dCA9IGNvbnRleHQgPT09IGRvY3VtZW50IHx8IGNvbnRleHQgfHwgb3V0
ZXJtb3N0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBBZGQgZWxlbWVudHMgcGFz
c2luZyBlbGVtZW50TWF0Y2hlcnMgZGlyZWN0bHkgdG8gcmVzdWx0cworICAgICAgICAgICAgLy8g
U3VwcG9ydDogSUU8OSwgU2FmYXJpCisgICAgICAgICAgICAvLyBUb2xlcmF0ZSBOb2RlTGlzdCBw
cm9wZXJ0aWVzIChJRTogImxlbmd0aCI7IFNhZmFyaTogPG51bWJlcj4pIG1hdGNoaW5nIGVsZW1l
bnRzIGJ5IGlkCisgICAgICAgICAgICBmb3IgKCA7IGkgIT09IGxlbiAmJiAoZWxlbSA9IGVsZW1z
W2ldKSAhPSBudWxsOyBpKysgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBieUVsZW1lbnQgJiYg
ZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgaiA9IDA7CisgICAgICAgICAgICAgICAgICAg
IGlmICggIWNvbnRleHQgJiYgZWxlbS5vd25lckRvY3VtZW50ICE9PSBkb2N1bWVudCApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHNldERvY3VtZW50KCBlbGVtICk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB4bWwgPSAhZG9jdW1lbnRJc0hUTUw7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCAobWF0Y2hlciA9IGVsZW1lbnRNYXRjaGVyc1tq
KytdKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbWF0Y2hlciggZWxlbSwgY29u
dGV4dCB8fCBkb2N1bWVudCwgeG1sKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHRzLnB1c2goIGVsZW0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBpZiAoIG91dGVybW9zdCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gVHJhY2sgdW5tYXRjaGVkIGVsZW1lbnRz
IGZvciBzZXQgZmlsdGVycworICAgICAgICAgICAgICAgIGlmICggYnlTZXQgKSB7CisgICAgICAg
ICAgICAgICAgICAgIC8vIFRoZXkgd2lsbCBoYXZlIGdvbmUgdGhyb3VnaCBhbGwgcG9zc2libGUg
bWF0Y2hlcnMKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAoZWxlbSA9ICFtYXRjaGVyICYmIGVs
ZW0pICkgeworICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZENvdW50LS07CisgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBMZW5ndGhlbiB0aGUgYXJy
YXkgZm9yIGV2ZXJ5IGVsZW1lbnQsIG1hdGNoZWQgb3Igbm90CisgICAgICAgICAgICAgICAgICAg
IGlmICggc2VlZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVubWF0Y2hlZC5wdXNoKCBl
bGVtICk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIC8vIGBpYCBpcyBub3cgdGhlIGNvdW50IG9mIGVsZW1lbnRz
IHZpc2l0ZWQgYWJvdmUsIGFuZCBhZGRpbmcgaXQgdG8gYG1hdGNoZWRDb3VudGAKKyAgICAgICAg
ICAgIC8vIG1ha2VzIHRoZSBsYXR0ZXIgbm9ubmVnYXRpdmUuCisgICAgICAgICAgICBtYXRjaGVk
Q291bnQgKz0gaTsKKworICAgICAgICAgICAgLy8gQXBwbHkgc2V0IGZpbHRlcnMgdG8gdW5tYXRj
aGVkIGVsZW1lbnRzCisgICAgICAgICAgICAvLyBOT1RFOiBUaGlzIGNhbiBiZSBza2lwcGVkIGlm
IHRoZXJlIGFyZSBubyB1bm1hdGNoZWQgZWxlbWVudHMgKGkuZS4sIGBtYXRjaGVkQ291bnRgCisg
ICAgICAgICAgICAvLyBlcXVhbHMgYGlgKSwgdW5sZXNzIHdlIGRpZG4ndCB2aXNpdCBfYW55XyBl
bGVtZW50cyBpbiB0aGUgYWJvdmUgbG9vcCBiZWNhdXNlIHdlIGhhdmUKKyAgICAgICAgICAgIC8v
IG5vIGVsZW1lbnQgbWF0Y2hlcnMgYW5kIG5vIHNlZWQuCisgICAgICAgICAgICAvLyBJbmNyZW1l
bnRpbmcgYW4gaW5pdGlhbGx5LXN0cmluZyAiMCIgYGlgIGFsbG93cyBgaWAgdG8gcmVtYWluIGEg
c3RyaW5nIG9ubHkgaW4gdGhhdAorICAgICAgICAgICAgLy8gY2FzZSwgd2hpY2ggd2lsbCByZXN1
bHQgaW4gYSAiMDAiIGBtYXRjaGVkQ291bnRgIHRoYXQgZGlmZmVycyBmcm9tIGBpYCBidXQgaXMg
YWxzbworICAgICAgICAgICAgLy8gbnVtZXJpY2FsbHkgemVyby4KKyAgICAgICAgICAgIGlmICgg
YnlTZXQgJiYgaSAhPT0gbWF0Y2hlZENvdW50ICkgeworICAgICAgICAgICAgICAgIGogPSAwOwor
ICAgICAgICAgICAgICAgIHdoaWxlICggKG1hdGNoZXIgPSBzZXRNYXRjaGVyc1tqKytdKSApIHsK
KyAgICAgICAgICAgICAgICAgICAgbWF0Y2hlciggdW5tYXRjaGVkLCBzZXRNYXRjaGVkLCBjb250
ZXh0LCB4bWwgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIHNl
ZWQgKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFJlaW50ZWdyYXRlIGVsZW1lbnQgbWF0Y2hl
cyB0byBlbGltaW5hdGUgdGhlIG5lZWQgZm9yIHNvcnRpbmcKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCBtYXRjaGVkQ291bnQgPiAwICkgeworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUg
KCBpLS0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhKHVubWF0Y2hlZFtp
XSB8fCBzZXRNYXRjaGVkW2ldKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2V0TWF0Y2hlZFtpXSA9IHBvcC5jYWxsKCByZXN1bHRzICk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gRGlzY2FyZCBpbmRleCBwbGFjZWhvbGRlciB2
YWx1ZXMgdG8gZ2V0IG9ubHkgYWN0dWFsIG1hdGNoZXMKKyAgICAgICAgICAgICAgICAgICAgc2V0
TWF0Y2hlZCA9IGNvbmRlbnNlKCBzZXRNYXRjaGVkICk7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgLy8gQWRkIG1hdGNoZXMgdG8gcmVzdWx0cworICAgICAgICAgICAgICAg
IHB1c2guYXBwbHkoIHJlc3VsdHMsIHNldE1hdGNoZWQgKTsKKworICAgICAgICAgICAgICAgIC8v
IFNlZWRsZXNzIHNldCBtYXRjaGVzIHN1Y2NlZWRpbmcgbXVsdGlwbGUgc3VjY2Vzc2Z1bCBtYXRj
aGVycyBzdGlwdWxhdGUgc29ydGluZworICAgICAgICAgICAgICAgIGlmICggb3V0ZXJtb3N0ICYm
ICFzZWVkICYmIHNldE1hdGNoZWQubGVuZ3RoID4gMCAmJgorICAgICAgICAgICAgICAgICAgICAo
IG1hdGNoZWRDb3VudCArIHNldE1hdGNoZXJzLmxlbmd0aCApID4gMSApIHsKKworICAgICAgICAg
ICAgICAgICAgICBTaXp6bGUudW5pcXVlU29ydCggcmVzdWx0cyApOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gT3ZlcnJpZGUgbWFuaXB1bGF0aW9u
IG9mIGdsb2JhbHMgYnkgbmVzdGVkIG1hdGNoZXJzCisgICAgICAgICAgICBpZiAoIG91dGVybW9z
dCApIHsKKyAgICAgICAgICAgICAgICBkaXJydW5zID0gZGlycnVuc1VuaXF1ZTsKKyAgICAgICAg
ICAgICAgICBvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dEJhY2t1cDsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgcmV0dXJuIHVubWF0Y2hlZDsKKyAgICAgICAgfTsKKworICAgIHJldHVy
biBieVNldCA/CisgICAgICAgIG1hcmtGdW5jdGlvbiggc3VwZXJNYXRjaGVyICkgOgorICAgICAg
ICBzdXBlck1hdGNoZXI7Cit9CisKK2NvbXBpbGUgPSBTaXp6bGUuY29tcGlsZSA9IGZ1bmN0aW9u
KCBzZWxlY3RvciwgbWF0Y2ggLyogSW50ZXJuYWwgVXNlIE9ubHkgKi8gKSB7CisgICAgdmFyIGks
CisgICAgICAgIHNldE1hdGNoZXJzID0gW10sCisgICAgICAgIGVsZW1lbnRNYXRjaGVycyA9IFtd
LAorICAgICAgICBjYWNoZWQgPSBjb21waWxlckNhY2hlWyBzZWxlY3RvciArICIgIiBdOworCisg
ICAgaWYgKCAhY2FjaGVkICkgeworICAgICAgICAvLyBHZW5lcmF0ZSBhIGZ1bmN0aW9uIG9mIHJl
Y3Vyc2l2ZSBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB0byBjaGVjayBlYWNoIGVsZW1lbnQK
KyAgICAgICAgaWYgKCAhbWF0Y2ggKSB7CisgICAgICAgICAgICBtYXRjaCA9IHRva2VuaXplKCBz
ZWxlY3RvciApOworICAgICAgICB9CisgICAgICAgIGkgPSBtYXRjaC5sZW5ndGg7CisgICAgICAg
IHdoaWxlICggaS0tICkgeworICAgICAgICAgICAgY2FjaGVkID0gbWF0Y2hlckZyb21Ub2tlbnMo
IG1hdGNoW2ldICk7CisgICAgICAgICAgICBpZiAoIGNhY2hlZFsgZXhwYW5kbyBdICkgeworICAg
ICAgICAgICAgICAgIHNldE1hdGNoZXJzLnB1c2goIGNhY2hlZCApOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBDYWNoZSB0aGUgY29tcGlsZWQg
ZnVuY3Rpb24KKyAgICAgICAgY2FjaGVkID0gY29tcGlsZXJDYWNoZSggc2VsZWN0b3IsIG1hdGNo
ZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyApICk7CisK
KyAgICAgICAgLy8gU2F2ZSBzZWxlY3RvciBhbmQgdG9rZW5pemF0aW9uCisgICAgICAgIGNhY2hl
ZC5zZWxlY3RvciA9IHNlbGVjdG9yOworICAgIH0KKyAgICByZXR1cm4gY2FjaGVkOworfTsKKwor
LyoqCisgKiBBIGxvdy1sZXZlbCBzZWxlY3Rpb24gZnVuY3Rpb24gdGhhdCB3b3JrcyB3aXRoIFNp
enpsZSdzIGNvbXBpbGVkCisgKiAgc2VsZWN0b3IgZnVuY3Rpb25zCisgKiBAcGFyYW0ge1N0cmlu
Z3xGdW5jdGlvbn0gc2VsZWN0b3IgQSBzZWxlY3RvciBvciBhIHByZS1jb21waWxlZAorICogIHNl
bGVjdG9yIGZ1bmN0aW9uIGJ1aWx0IHdpdGggU2l6emxlLmNvbXBpbGUKKyAqIEBwYXJhbSB7RWxl
bWVudH0gY29udGV4dAorICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdHNdCisgKiBAcGFyYW0ge0Fy
cmF5fSBbc2VlZF0gQSBzZXQgb2YgZWxlbWVudHMgdG8gbWF0Y2ggYWdhaW5zdAorICovCitzZWxl
Y3QgPSBTaXp6bGUuc2VsZWN0ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRz
LCBzZWVkICkgeworICAgIHZhciBpLCB0b2tlbnMsIHRva2VuLCB0eXBlLCBmaW5kLAorICAgICAg
ICBjb21waWxlZCA9IHR5cGVvZiBzZWxlY3RvciA9PT0gImZ1bmN0aW9uIiAmJiBzZWxlY3RvciwK
KyAgICAgICAgbWF0Y2ggPSAhc2VlZCAmJiB0b2tlbml6ZSggKHNlbGVjdG9yID0gY29tcGlsZWQu
c2VsZWN0b3IgfHwgc2VsZWN0b3IpICk7CisKKyAgICByZXN1bHRzID0gcmVzdWx0cyB8fCBbXTsK
KworICAgIC8vIFRyeSB0byBtaW5pbWl6ZSBvcGVyYXRpb25zIGlmIHRoZXJlIGlzIG9ubHkgb25l
IHNlbGVjdG9yIGluIHRoZSBsaXN0IGFuZCBubyBzZWVkCisgICAgLy8gKHRoZSBsYXR0ZXIgb2Yg
d2hpY2ggZ3VhcmFudGVlcyB1cyBjb250ZXh0KQorICAgIGlmICggbWF0Y2gubGVuZ3RoID09PSAx
ICkgeworCisgICAgICAgIC8vIFJlZHVjZSBjb250ZXh0IGlmIHRoZSBsZWFkaW5nIGNvbXBvdW5k
IHNlbGVjdG9yIGlzIGFuIElECisgICAgICAgIHRva2VucyA9IG1hdGNoWzBdID0gbWF0Y2hbMF0u
c2xpY2UoIDAgKTsKKyAgICAgICAgaWYgKCB0b2tlbnMubGVuZ3RoID4gMiAmJiAodG9rZW4gPSB0
b2tlbnNbMF0pLnR5cGUgPT09ICJJRCIgJiYKKyAgICAgICAgICAgICAgICBzdXBwb3J0LmdldEJ5
SWQgJiYgY29udGV4dC5ub2RlVHlwZSA9PT0gOSAmJiBkb2N1bWVudElzSFRNTCAmJgorICAgICAg
ICAgICAgICAgIEV4cHIucmVsYXRpdmVbIHRva2Vuc1sxXS50eXBlIF0gKSB7CisKKyAgICAgICAg
ICAgIGNvbnRleHQgPSAoIEV4cHIuZmluZFsiSUQiXSggdG9rZW4ubWF0Y2hlc1swXS5yZXBsYWNl
KHJ1bmVzY2FwZSwgZnVuZXNjYXBlKSwgY29udGV4dCApIHx8IFtdIClbMF07CisgICAgICAgICAg
ICBpZiAoICFjb250ZXh0ICkgeworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOworCisg
ICAgICAgICAgICAvLyBQcmVjb21waWxlZCBtYXRjaGVycyB3aWxsIHN0aWxsIHZlcmlmeSBhbmNl
c3RyeSwgc28gc3RlcCB1cCBhIGxldmVsCisgICAgICAgICAgICB9IGVsc2UgaWYgKCBjb21waWxl
ZCApIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0ID0gY29udGV4dC5wYXJlbnROb2RlOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBzZWxlY3RvciA9IHNlbGVjdG9yLnNsaWNlKCB0b2tl
bnMuc2hpZnQoKS52YWx1ZS5sZW5ndGggKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZldGNo
IGEgc2VlZCBzZXQgZm9yIHJpZ2h0LXRvLWxlZnQgbWF0Y2hpbmcKKyAgICAgICAgaSA9IG1hdGNo
RXhwclsibmVlZHNDb250ZXh0Il0udGVzdCggc2VsZWN0b3IgKSA/IDAgOiB0b2tlbnMubGVuZ3Ro
OworICAgICAgICB3aGlsZSAoIGktLSApIHsKKyAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2ld
OworCisgICAgICAgICAgICAvLyBBYm9ydCBpZiB3ZSBoaXQgYSBjb21iaW5hdG9yCisgICAgICAg
ICAgICBpZiAoIEV4cHIucmVsYXRpdmVbICh0eXBlID0gdG9rZW4udHlwZSkgXSApIHsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICggKGZpbmQg
PSBFeHByLmZpbmRbIHR5cGUgXSkgKSB7CisgICAgICAgICAgICAgICAgLy8gU2VhcmNoLCBleHBh
bmRpbmcgY29udGV4dCBmb3IgbGVhZGluZyBzaWJsaW5nIGNvbWJpbmF0b3JzCisgICAgICAgICAg
ICAgICAgaWYgKCAoc2VlZCA9IGZpbmQoCisgICAgICAgICAgICAgICAgICAgIHRva2VuLm1hdGNo
ZXNbMF0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKSwKKyAgICAgICAgICAgICAgICAg
ICAgcnNpYmxpbmcudGVzdCggdG9rZW5zWzBdLnR5cGUgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4
dC5wYXJlbnROb2RlICkgfHwgY29udGV4dAorICAgICAgICAgICAgICAgICkpICkgeworCisgICAg
ICAgICAgICAgICAgICAgIC8vIElmIHNlZWQgaXMgZW1wdHkgb3Igbm8gdG9rZW5zIHJlbWFpbiwg
d2UgY2FuIHJldHVybiBlYXJseQorICAgICAgICAgICAgICAgICAgICB0b2tlbnMuc3BsaWNlKCBp
LCAxICk7CisgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yID0gc2VlZC5sZW5ndGggJiYgdG9T
ZWxlY3RvciggdG9rZW5zICk7CisgICAgICAgICAgICAgICAgICAgIGlmICggIXNlbGVjdG9yICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaC5hcHBseSggcmVzdWx0cywgc2VlZCApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDb21waWxlIGFuZCBleGVj
dXRlIGEgZmlsdGVyaW5nIGZ1bmN0aW9uIGlmIG9uZSBpcyBub3QgcHJvdmlkZWQKKyAgICAvLyBQ
cm92aWRlIGBtYXRjaGAgdG8gYXZvaWQgcmV0b2tlbml6YXRpb24gaWYgd2UgbW9kaWZpZWQgdGhl
IHNlbGVjdG9yIGFib3ZlCisgICAgKCBjb21waWxlZCB8fCBjb21waWxlKCBzZWxlY3RvciwgbWF0
Y2ggKSApKAorICAgICAgICBzZWVkLAorICAgICAgICBjb250ZXh0LAorICAgICAgICAhZG9jdW1l
bnRJc0hUTUwsCisgICAgICAgIHJlc3VsdHMsCisgICAgICAgICFjb250ZXh0IHx8IHJzaWJsaW5n
LnRlc3QoIHNlbGVjdG9yICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8
IGNvbnRleHQKKyAgICApOworICAgIHJldHVybiByZXN1bHRzOworfTsKKworLy8gT25lLXRpbWUg
YXNzaWdubWVudHMKKworLy8gU29ydCBzdGFiaWxpdHkKK3N1cHBvcnQuc29ydFN0YWJsZSA9IGV4
cGFuZG8uc3BsaXQoIiIpLnNvcnQoIHNvcnRPcmRlciApLmpvaW4oIiIpID09PSBleHBhbmRvOwor
CisvLyBTdXBwb3J0OiBDaHJvbWUgMTQtMzUrCisvLyBBbHdheXMgYXNzdW1lIGR1cGxpY2F0ZXMg
aWYgdGhleSBhcmVuJ3QgcGFzc2VkIHRvIHRoZSBjb21wYXJpc29uIGZ1bmN0aW9uCitzdXBwb3J0
LmRldGVjdER1cGxpY2F0ZXMgPSAhIWhhc0R1cGxpY2F0ZTsKKworLy8gSW5pdGlhbGl6ZSBhZ2Fp
bnN0IHRoZSBkZWZhdWx0IGRvY3VtZW50CitzZXREb2N1bWVudCgpOworCisvLyBTdXBwb3J0OiBX
ZWJraXQ8NTM3LjMyIC0gU2FmYXJpIDYuMC4zL0Nocm9tZSAyNSAoZml4ZWQgaW4gQ2hyb21lIDI3
KQorLy8gRGV0YWNoZWQgbm9kZXMgY29uZm91bmRpbmdseSBmb2xsb3cgKmVhY2ggb3RoZXIqCitz
dXBwb3J0LnNvcnREZXRhY2hlZCA9IGFzc2VydChmdW5jdGlvbiggZGl2MSApIHsKKyAgICAvLyBT
aG91bGQgcmV0dXJuIDEsIGJ1dCByZXR1cm5zIDQgKGZvbGxvd2luZykKKyAgICByZXR1cm4gZGl2
MS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikg
KSAmIDE7Cit9KTsKKworLy8gU3VwcG9ydDogSUU8OAorLy8gUHJldmVudCBhdHRyaWJ1dGUvcHJv
cGVydHkgImludGVycG9sYXRpb24iCisvLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVz
L2xpYnJhcnkvbXM1MzY0MjklMjhWUy44NSUyOS5hc3B4CitpZiAoICFhc3NlcnQoZnVuY3Rpb24o
IGRpdiApIHsKKyAgICBkaXYuaW5uZXJIVE1MID0gIjxhIGhyZWY9JyMnPjwvYT4iOworICAgIHJl
dHVybiBkaXYuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKSA9PT0gIiMiIDsKK30pICkg
eworICAgIGFkZEhhbmRsZSggInR5cGV8aHJlZnxoZWlnaHR8d2lkdGgiLCBmdW5jdGlvbiggZWxl
bSwgbmFtZSwgaXNYTUwgKSB7CisgICAgICAgIGlmICggIWlzWE1MICkgeworICAgICAgICAgICAg
cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lLCBuYW1lLnRvTG93ZXJDYXNlKCkgPT09ICJ0
eXBlIiA/IDEgOiAyICk7CisgICAgICAgIH0KKyAgICB9KTsKK30KKworLy8gU3VwcG9ydDogSUU8
OQorLy8gVXNlIGRlZmF1bHRWYWx1ZSBpbiBwbGFjZSBvZiBnZXRBdHRyaWJ1dGUoInZhbHVlIikK
K2lmICggIXN1cHBvcnQuYXR0cmlidXRlcyB8fCAhYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7Cisg
ICAgZGl2LmlubmVySFRNTCA9ICI8aW5wdXQvPiI7CisgICAgZGl2LmZpcnN0Q2hpbGQuc2V0QXR0
cmlidXRlKCAidmFsdWUiLCAiIiApOworICAgIHJldHVybiBkaXYuZmlyc3RDaGlsZC5nZXRBdHRy
aWJ1dGUoICJ2YWx1ZSIgKSA9PT0gIiI7Cit9KSApIHsKKyAgICBhZGRIYW5kbGUoICJ2YWx1ZSIs
IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHsKKyAgICAgICAgaWYgKCAhaXNYTUwgJiYg
ZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAiaW5wdXQiICkgeworICAgICAgICAgICAg
cmV0dXJuIGVsZW0uZGVmYXVsdFZhbHVlOworICAgICAgICB9CisgICAgfSk7Cit9CisKKy8vIFN1
cHBvcnQ6IElFPDkKKy8vIFVzZSBnZXRBdHRyaWJ1dGVOb2RlIHRvIGZldGNoIGJvb2xlYW5zIHdo
ZW4gZ2V0QXR0cmlidXRlIGxpZXMKK2lmICggIWFzc2VydChmdW5jdGlvbiggZGl2ICkgeworICAg
IHJldHVybiBkaXYuZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpID09IG51bGw7Cit9KSApIHsKKyAg
ICBhZGRIYW5kbGUoIGJvb2xlYW5zLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7Cisg
ICAgICAgIHZhciB2YWw7CisgICAgICAgIGlmICggIWlzWE1MICkgeworICAgICAgICAgICAgcmV0
dXJuIGVsZW1bIG5hbWUgXSA9PT0gdHJ1ZSA/IG5hbWUudG9Mb3dlckNhc2UoKSA6CisgICAgICAg
ICAgICAgICAgICAgICh2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKSkgJiYgdmFs
LnNwZWNpZmllZCA/CisgICAgICAgICAgICAgICAgICAgIHZhbC52YWx1ZSA6CisgICAgICAgICAg
ICAgICAgbnVsbDsKKyAgICAgICAgfQorICAgIH0pOworfQorCityZXR1cm4gU2l6emxlOworCit9
KSggd2luZG93ICk7CisKKworCitqUXVlcnkuZmluZCA9IFNpenpsZTsKK2pRdWVyeS5leHByID0g
U2l6emxlLnNlbGVjdG9yczsKK2pRdWVyeS5leHByWyAiOiIgXSA9IGpRdWVyeS5leHByLnBzZXVk
b3M7CitqUXVlcnkudW5pcXVlU29ydCA9IGpRdWVyeS51bmlxdWUgPSBTaXp6bGUudW5pcXVlU29y
dDsKK2pRdWVyeS50ZXh0ID0gU2l6emxlLmdldFRleHQ7CitqUXVlcnkuaXNYTUxEb2MgPSBTaXp6
bGUuaXNYTUw7CitqUXVlcnkuY29udGFpbnMgPSBTaXp6bGUuY29udGFpbnM7CisKKworCit2YXIg
ZGlyID0gZnVuY3Rpb24oIGVsZW0sIGRpciwgdW50aWwgKSB7CisgICAgdmFyIG1hdGNoZWQgPSBb
XSwKKyAgICAgICAgdHJ1bmNhdGUgPSB1bnRpbCAhPT0gdW5kZWZpbmVkOworCisgICAgd2hpbGUg
KCAoIGVsZW0gPSBlbGVtWyBkaXIgXSApICYmIGVsZW0ubm9kZVR5cGUgIT09IDkgKSB7CisgICAg
ICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKKyAgICAgICAgICAgIGlmICggdHJ1bmNh
dGUgJiYgalF1ZXJ5KCBlbGVtICkuaXMoIHVudGlsICkgKSB7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtYXRjaGVkLnB1c2goIGVsZW0gKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbWF0Y2hlZDsKK307CisKKwordmFyIHNpYmxpbmdz
ID0gZnVuY3Rpb24oIG4sIGVsZW0gKSB7CisgICAgdmFyIG1hdGNoZWQgPSBbXTsKKworICAgIGZv
ciAoIDsgbjsgbiA9IG4ubmV4dFNpYmxpbmcgKSB7CisgICAgICAgIGlmICggbi5ub2RlVHlwZSA9
PT0gMSAmJiBuICE9PSBlbGVtICkgeworICAgICAgICAgICAgbWF0Y2hlZC5wdXNoKCBuICk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbWF0Y2hlZDsKK307CisKKwordmFyIHJuZWVk
c0NvbnRleHQgPSBqUXVlcnkuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQ7CisKK3ZhciByc2luZ2xl
VGFnID0gKCAvXjwoW1x3LV0rKVxzKlwvPz4oPzo8XC9cMT58KSQvICk7CisKKworCit2YXIgcmlz
U2ltcGxlID0gL14uW146I1xbXC4sXSokLzsKKworLy8gSW1wbGVtZW50IHRoZSBpZGVudGljYWwg
ZnVuY3Rpb25hbGl0eSBmb3IgZmlsdGVyIGFuZCBub3QKK2Z1bmN0aW9uIHdpbm5vdyggZWxlbWVu
dHMsIHF1YWxpZmllciwgbm90ICkgeworICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHF1YWxp
ZmllciApICkgeworICAgICAgICByZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlv
biggZWxlbSwgaSApIHsKKyAgICAgICAgICAgIC8qIGpzaGludCAtVzAxOCAqLworICAgICAgICAg
ICAgcmV0dXJuICEhcXVhbGlmaWVyLmNhbGwoIGVsZW0sIGksIGVsZW0gKSAhPT0gbm90OworICAg
ICAgICB9ICk7CisKKyAgICB9CisKKyAgICBpZiAoIHF1YWxpZmllci5ub2RlVHlwZSApIHsKKyAg
ICAgICAgcmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7Cisg
ICAgICAgICAgICByZXR1cm4gKCBlbGVtID09PSBxdWFsaWZpZXIgKSAhPT0gbm90OworICAgICAg
ICB9ICk7CisKKyAgICB9CisKKyAgICBpZiAoIHR5cGVvZiBxdWFsaWZpZXIgPT09ICJzdHJpbmci
ICkgeworICAgICAgICBpZiAoIHJpc1NpbXBsZS50ZXN0KCBxdWFsaWZpZXIgKSApIHsKKyAgICAg
ICAgICAgIHJldHVybiBqUXVlcnkuZmlsdGVyKCBxdWFsaWZpZXIsIGVsZW1lbnRzLCBub3QgKTsK
KyAgICAgICAgfQorCisgICAgICAgIHF1YWxpZmllciA9IGpRdWVyeS5maWx0ZXIoIHF1YWxpZmll
ciwgZWxlbWVudHMgKTsKKyAgICB9CisKKyAgICByZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRz
LCBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgcmV0dXJuICggaW5kZXhPZi5jYWxsKCBxdWFs
aWZpZXIsIGVsZW0gKSA+IC0xICkgIT09IG5vdDsKKyAgICB9ICk7Cit9CisKK2pRdWVyeS5maWx0
ZXIgPSBmdW5jdGlvbiggZXhwciwgZWxlbXMsIG5vdCApIHsKKyAgICB2YXIgZWxlbSA9IGVsZW1z
WyAwIF07CisKKyAgICBpZiAoIG5vdCApIHsKKyAgICAgICAgZXhwciA9ICI6bm90KCIgKyBleHBy
ICsgIikiOworICAgIH0KKworICAgIHJldHVybiBlbGVtcy5sZW5ndGggPT09IDEgJiYgZWxlbS5u
b2RlVHlwZSA9PT0gMSA/CisgICAgICAgIGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggZWxl
bSwgZXhwciApID8gWyBlbGVtIF0gOiBbXSA6CisgICAgICAgIGpRdWVyeS5maW5kLm1hdGNoZXMo
IGV4cHIsIGpRdWVyeS5ncmVwKCBlbGVtcywgZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAg
ICByZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0gMTsKKyAgICAgICAgfSApICk7Cit9OworCitqUXVl
cnkuZm4uZXh0ZW5kKCB7CisgICAgZmluZDogZnVuY3Rpb24oIHNlbGVjdG9yICkgeworICAgICAg
ICB2YXIgaSwKKyAgICAgICAgICAgIGxlbiA9IHRoaXMubGVuZ3RoLAorICAgICAgICAgICAgcmV0
ID0gW10sCisgICAgICAgICAgICBzZWxmID0gdGhpczsKKworICAgICAgICBpZiAoIHR5cGVvZiBz
ZWxlY3RvciAhPT0gInN0cmluZyIgKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3Rh
Y2soIGpRdWVyeSggc2VsZWN0b3IgKS5maWx0ZXIoIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ICAgIGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
ICggalF1ZXJ5LmNvbnRhaW5zKCBzZWxmWyBpIF0sIHRoaXMgKSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSApICk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKCBp
ID0gMDsgaSA8IGxlbjsgaSsrICkgeworICAgICAgICAgICAgalF1ZXJ5LmZpbmQoIHNlbGVjdG9y
LCBzZWxmWyBpIF0sIHJldCApOworICAgICAgICB9CisKKyAgICAgICAgLy8gTmVlZGVkIGJlY2F1
c2UgJCggc2VsZWN0b3IsIGNvbnRleHQgKSBiZWNvbWVzICQoIGNvbnRleHQgKS5maW5kKCBzZWxl
Y3RvciApCisgICAgICAgIHJldCA9IHRoaXMucHVzaFN0YWNrKCBsZW4gPiAxID8galF1ZXJ5LnVu
aXF1ZSggcmV0ICkgOiByZXQgKTsKKyAgICAgICAgcmV0LnNlbGVjdG9yID0gdGhpcy5zZWxlY3Rv
ciA/IHRoaXMuc2VsZWN0b3IgKyAiICIgKyBzZWxlY3RvciA6IHNlbGVjdG9yOworICAgICAgICBy
ZXR1cm4gcmV0OworICAgIH0sCisgICAgZmlsdGVyOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7Cisg
ICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KCB0aGlzLCBzZWxlY3RvciB8fCBb
XSwgZmFsc2UgKSApOworICAgIH0sCisgICAgbm90OiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7Cisg
ICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KCB0aGlzLCBzZWxlY3RvciB8fCBb
XSwgdHJ1ZSApICk7CisgICAgfSwKKyAgICBpczogZnVuY3Rpb24oIHNlbGVjdG9yICkgeworICAg
ICAgICByZXR1cm4gISF3aW5ub3coCisgICAgICAgICAgICB0aGlzLAorCisgICAgICAgICAgICAv
LyBJZiB0aGlzIGlzIGEgcG9zaXRpb25hbC9yZWxhdGl2ZSBzZWxlY3RvciwgY2hlY2sgbWVtYmVy
c2hpcCBpbiB0aGUgcmV0dXJuZWQgc2V0CisgICAgICAgICAgICAvLyBzbyAkKCJwOmZpcnN0Iiku
aXMoInA6bGFzdCIpIHdvbid0IHJldHVybiB0cnVlIGZvciBhIGRvYyB3aXRoIHR3byAicCIuCisg
ICAgICAgICAgICB0eXBlb2Ygc2VsZWN0b3IgPT09ICJzdHJpbmciICYmIHJuZWVkc0NvbnRleHQu
dGVzdCggc2VsZWN0b3IgKSA/CisgICAgICAgICAgICAgICAgalF1ZXJ5KCBzZWxlY3RvciApIDoK
KyAgICAgICAgICAgICAgICBzZWxlY3RvciB8fCBbXSwKKyAgICAgICAgICAgIGZhbHNlCisgICAg
ICAgICkubGVuZ3RoOworICAgIH0KK30gKTsKKworCisvLyBJbml0aWFsaXplIGEgalF1ZXJ5IG9i
amVjdAorCisKKy8vIEEgY2VudHJhbCByZWZlcmVuY2UgdG8gdGhlIHJvb3QgalF1ZXJ5KGRvY3Vt
ZW50KQordmFyIHJvb3RqUXVlcnksCisKKyAgICAvLyBBIHNpbXBsZSB3YXkgdG8gY2hlY2sgZm9y
IEhUTUwgc3RyaW5ncworICAgIC8vIFByaW9yaXRpemUgI2lkIG92ZXIgPHRhZz4gdG8gYXZvaWQg
WFNTIHZpYSBsb2NhdGlvbi5oYXNoICgjOTUyMSkKKyAgICAvLyBTdHJpY3QgSFRNTCByZWNvZ25p
dGlvbiAoIzExMjkwOiBtdXN0IHN0YXJ0IHdpdGggPCkKKyAgICBycXVpY2tFeHByID0gL14oPzpc
cyooPFtcd1xXXSs+KVtePl0qfCMoW1x3LV0qKSkkLywKKworICAgIGluaXQgPSBqUXVlcnkuZm4u
aW5pdCA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcm9vdCApIHsKKyAgICAgICAgdmFy
IG1hdGNoLCBlbGVtOworCisgICAgICAgIC8vIEhBTkRMRTogJCgiIiksICQobnVsbCksICQodW5k
ZWZpbmVkKSwgJChmYWxzZSkKKyAgICAgICAgaWYgKCAhc2VsZWN0b3IgKSB7CisgICAgICAgICAg
ICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE1ldGhvZCBpbml0KCkgYWNj
ZXB0cyBhbiBhbHRlcm5hdGUgcm9vdGpRdWVyeQorICAgICAgICAvLyBzbyBtaWdyYXRlIGNhbiBz
dXBwb3J0IGpRdWVyeS5zdWIgKGdoLTIxMDEpCisgICAgICAgIHJvb3QgPSByb290IHx8IHJvb3Rq
UXVlcnk7CisKKyAgICAgICAgLy8gSGFuZGxlIEhUTUwgc3RyaW5ncworICAgICAgICBpZiAoIHR5
cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgKSB7CisgICAgICAgICAgICBpZiAoIHNlbGVjdG9y
WyAwIF0gPT09ICI8IiAmJgorICAgICAgICAgICAgICAgIHNlbGVjdG9yWyBzZWxlY3Rvci5sZW5n
dGggLSAxIF0gPT09ICI+IiAmJgorICAgICAgICAgICAgICAgIHNlbGVjdG9yLmxlbmd0aCA+PSAz
ICkgeworCisgICAgICAgICAgICAgICAgLy8gQXNzdW1lIHRoYXQgc3RyaW5ncyB0aGF0IHN0YXJ0
IGFuZCBlbmQgd2l0aCA8PiBhcmUgSFRNTCBhbmQgc2tpcCB0aGUgcmVnZXggY2hlY2sKKyAgICAg
ICAgICAgICAgICBtYXRjaCA9IFsgbnVsbCwgc2VsZWN0b3IsIG51bGwgXTsKKworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2Vs
ZWN0b3IgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTWF0Y2ggaHRtbCBvciBt
YWtlIHN1cmUgbm8gY29udGV4dCBpcyBzcGVjaWZpZWQgZm9yICNpZAorICAgICAgICAgICAgaWYg
KCBtYXRjaCAmJiAoIG1hdGNoWyAxIF0gfHwgIWNvbnRleHQgKSApIHsKKworICAgICAgICAgICAg
ICAgIC8vIEhBTkRMRTogJChodG1sKSAtPiAkKGFycmF5KQorICAgICAgICAgICAgICAgIGlmICgg
bWF0Y2hbIDEgXSApIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHQgaW5z
dGFuY2VvZiBqUXVlcnkgPyBjb250ZXh0WyAwIF0gOiBjb250ZXh0OworCisgICAgICAgICAgICAg
ICAgICAgIC8vIE9wdGlvbiB0byBydW4gc2NyaXB0cyBpcyB0cnVlIGZvciBiYWNrLWNvbXBhdAor
ICAgICAgICAgICAgICAgICAgICAvLyBJbnRlbnRpb25hbGx5IGxldCB0aGUgZXJyb3IgYmUgdGhy
b3duIGlmIHBhcnNlSFRNTCBpcyBub3QgcHJlc2VudAorICAgICAgICAgICAgICAgICAgICBqUXVl
cnkubWVyZ2UoIHRoaXMsIGpRdWVyeS5wYXJzZUhUTUwoCisgICAgICAgICAgICAgICAgICAgICAg
ICBtYXRjaFsgMSBdLAorICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCAmJiBjb250ZXh0
Lm5vZGVUeXBlID8gY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgOiBkb2N1bWVudCwK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRydWUKKyAgICAgICAgICAgICAgICAgICAgKSApOwor
CisgICAgICAgICAgICAgICAgICAgIC8vIEhBTkRMRTogJChodG1sLCBwcm9wcykKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCByc2luZ2xlVGFnLnRlc3QoIG1hdGNoWyAxIF0gKSAmJiBqUXVlcnku
aXNQbGFpbk9iamVjdCggY29udGV4dCApICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9y
ICggbWF0Y2ggaW4gY29udGV4dCApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFByb3BlcnRpZXMgb2YgY29udGV4dCBhcmUgY2FsbGVkIGFzIG1ldGhvZHMgaWYgcG9zc2libGUK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB0aGlz
WyBtYXRjaCBdICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbIG1h
dGNoIF0oIGNvbnRleHRbIG1hdGNoIF0gKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIC4uLmFuZCBvdGhlcndpc2Ugc2V0IGFzIGF0dHJpYnV0ZXMKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
LmF0dHIoIG1hdGNoLCBjb250ZXh0WyBtYXRjaCBdICk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisKKyAgICAgICAgICAgICAgICAv
LyBIQU5ETEU6ICQoI2lkKQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggbWF0Y2hbIDIgXSApOworCisg
ICAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IEJsYWNrYmVycnkgNC42CisgICAgICAgICAg
ICAgICAgICAgIC8vIGdFQklEIHJldHVybnMgbm9kZXMgbm8gbG9uZ2VyIGluIHRoZSBkb2N1bWVu
dCAoIzY5NjMpCisgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbSAmJiBlbGVtLnBhcmVudE5v
ZGUgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluamVjdCB0aGUgZWxlbWVudCBk
aXJlY3RseSBpbnRvIHRoZSBqUXVlcnkgb2JqZWN0CisgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLmxlbmd0aCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzWyAwIF0gPSBlbGVt
OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250
ZXh0ID0gZG9jdW1lbnQ7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0b3IgPSBzZWxl
Y3RvcjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAvLyBIQU5ETEU6ICQoZXhwciwgJCguLi4pKQorICAgICAgICAgICAg
fSBlbHNlIGlmICggIWNvbnRleHQgfHwgY29udGV4dC5qcXVlcnkgKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuICggY29udGV4dCB8fCByb290ICkuZmluZCggc2VsZWN0b3IgKTsKKworICAgICAg
ICAgICAgLy8gSEFORExFOiAkKGV4cHIsIGNvbnRleHQpCisgICAgICAgICAgICAvLyAod2hpY2gg
aXMganVzdCBlcXVpdmFsZW50IHRvOiAkKGNvbnRleHQpLmZpbmQoZXhwcikKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IoIGNvbnRl
eHQgKS5maW5kKCBzZWxlY3RvciApOworICAgICAgICAgICAgfQorCisgICAgICAgIC8vIEhBTkRM
RTogJChET01FbGVtZW50KQorICAgICAgICB9IGVsc2UgaWYgKCBzZWxlY3Rvci5ub2RlVHlwZSAp
IHsKKyAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IHRoaXNbIDAgXSA9IHNlbGVjdG9yOworICAg
ICAgICAgICAgdGhpcy5sZW5ndGggPSAxOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisKKyAg
ICAgICAgLy8gSEFORExFOiAkKGZ1bmN0aW9uKQorICAgICAgICAvLyBTaG9ydGN1dCBmb3IgZG9j
dW1lbnQgcmVhZHkKKyAgICAgICAgfSBlbHNlIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHNlbGVj
dG9yICkgKSB7CisgICAgICAgICAgICByZXR1cm4gcm9vdC5yZWFkeSAhPT0gdW5kZWZpbmVkID8K
KyAgICAgICAgICAgICAgICByb290LnJlYWR5KCBzZWxlY3RvciApIDoKKworICAgICAgICAgICAg
ICAgIC8vIEV4ZWN1dGUgaW1tZWRpYXRlbHkgaWYgcmVhZHkgaXMgbm90IHByZXNlbnQKKyAgICAg
ICAgICAgICAgICBzZWxlY3RvciggalF1ZXJ5ICk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
IHNlbGVjdG9yLnNlbGVjdG9yICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICB0aGlzLnNl
bGVjdG9yID0gc2VsZWN0b3Iuc2VsZWN0b3I7CisgICAgICAgICAgICB0aGlzLmNvbnRleHQgPSBz
ZWxlY3Rvci5jb250ZXh0OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5tYWtl
QXJyYXkoIHNlbGVjdG9yLCB0aGlzICk7CisgICAgfTsKKworLy8gR2l2ZSB0aGUgaW5pdCBmdW5j
dGlvbiB0aGUgalF1ZXJ5IHByb3RvdHlwZSBmb3IgbGF0ZXIgaW5zdGFudGlhdGlvbgoraW5pdC5w
cm90b3R5cGUgPSBqUXVlcnkuZm47CisKKy8vIEluaXRpYWxpemUgY2VudHJhbCByZWZlcmVuY2UK
K3Jvb3RqUXVlcnkgPSBqUXVlcnkoIGRvY3VtZW50ICk7CisKKwordmFyIHJwYXJlbnRzcHJldiA9
IC9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLAorCisgICAgLy8gTWV0aG9kcyBndWFy
YW50ZWVkIHRvIHByb2R1Y2UgYSB1bmlxdWUgc2V0IHdoZW4gc3RhcnRpbmcgZnJvbSBhIHVuaXF1
ZSBzZXQKKyAgICBndWFyYW50ZWVkVW5pcXVlID0geworICAgICAgICBjaGlsZHJlbjogdHJ1ZSwK
KyAgICAgICAgY29udGVudHM6IHRydWUsCisgICAgICAgIG5leHQ6IHRydWUsCisgICAgICAgIHBy
ZXY6IHRydWUKKyAgICB9OworCitqUXVlcnkuZm4uZXh0ZW5kKCB7CisgICAgaGFzOiBmdW5jdGlv
biggdGFyZ2V0ICkgeworICAgICAgICB2YXIgdGFyZ2V0cyA9IGpRdWVyeSggdGFyZ2V0LCB0aGlz
ICksCisgICAgICAgICAgICBsID0gdGFyZ2V0cy5sZW5ndGg7CisKKyAgICAgICAgcmV0dXJuIHRo
aXMuZmlsdGVyKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciBpID0gMDsKKyAgICAgICAg
ICAgIGZvciAoIDsgaSA8IGw7IGkrKyApIHsKKyAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5j
b250YWlucyggdGhpcywgdGFyZ2V0c1sgaSBdICkgKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSAp
OworICAgIH0sCisKKyAgICBjbG9zZXN0OiBmdW5jdGlvbiggc2VsZWN0b3JzLCBjb250ZXh0ICkg
eworICAgICAgICB2YXIgY3VyLAorICAgICAgICAgICAgaSA9IDAsCisgICAgICAgICAgICBsID0g
dGhpcy5sZW5ndGgsCisgICAgICAgICAgICBtYXRjaGVkID0gW10sCisgICAgICAgICAgICBwb3Mg
PSBybmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9ycyApIHx8IHR5cGVvZiBzZWxlY3RvcnMgIT09
ICJzdHJpbmciID8KKyAgICAgICAgICAgICAgICBqUXVlcnkoIHNlbGVjdG9ycywgY29udGV4dCB8
fCB0aGlzLmNvbnRleHQgKSA6CisgICAgICAgICAgICAgICAgMDsKKworICAgICAgICBmb3IgKCA7
IGkgPCBsOyBpKysgKSB7CisgICAgICAgICAgICBmb3IgKCBjdXIgPSB0aGlzWyBpIF07IGN1ciAm
JiBjdXIgIT09IGNvbnRleHQ7IGN1ciA9IGN1ci5wYXJlbnROb2RlICkgeworCisgICAgICAgICAg
ICAgICAgLy8gQWx3YXlzIHNraXAgZG9jdW1lbnQgZnJhZ21lbnRzCisgICAgICAgICAgICAgICAg
aWYgKCBjdXIubm9kZVR5cGUgPCAxMSAmJiAoIHBvcyA/CisgICAgICAgICAgICAgICAgICAgIHBv
cy5pbmRleCggY3VyICkgPiAtMSA6CisKKyAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgcGFz
cyBub24tZWxlbWVudHMgdG8gU2l6emxlCisgICAgICAgICAgICAgICAgICAgIGN1ci5ub2RlVHlw
ZSA9PT0gMSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmZpbmQubWF0Y2hlc1Nl
bGVjdG9yKCBjdXIsIHNlbGVjdG9ycyApICkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgbWF0
Y2hlZC5wdXNoKCBjdXIgKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRoaXMu
cHVzaFN0YWNrKCBtYXRjaGVkLmxlbmd0aCA+IDEgPyBqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hl
ZCApIDogbWF0Y2hlZCApOworICAgIH0sCisKKyAgICAvLyBEZXRlcm1pbmUgdGhlIHBvc2l0aW9u
IG9mIGFuIGVsZW1lbnQgd2l0aGluIHRoZSBzZXQKKyAgICBpbmRleDogZnVuY3Rpb24oIGVsZW0g
KSB7CisKKyAgICAgICAgLy8gTm8gYXJndW1lbnQsIHJldHVybiBpbmRleCBpbiBwYXJlbnQKKyAg
ICAgICAgaWYgKCAhZWxlbSApIHsKKyAgICAgICAgICAgIHJldHVybiAoIHRoaXNbIDAgXSAmJiB0
aGlzWyAwIF0ucGFyZW50Tm9kZSApID8gdGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGggOiAt
MTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEluZGV4IGluIHNlbGVjdG9yCisgICAgICAgIGlm
ICggdHlwZW9mIGVsZW0gPT09ICJzdHJpbmciICkgeworICAgICAgICAgICAgcmV0dXJuIGluZGV4
T2YuY2FsbCggalF1ZXJ5KCBlbGVtICksIHRoaXNbIDAgXSApOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gTG9jYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZGVzaXJlZCBlbGVtZW50CisgICAgICAg
IHJldHVybiBpbmRleE9mLmNhbGwoIHRoaXMsCisKKyAgICAgICAgICAgIC8vIElmIGl0IHJlY2Vp
dmVzIGEgalF1ZXJ5IG9iamVjdCwgdGhlIGZpcnN0IGVsZW1lbnQgaXMgdXNlZAorICAgICAgICAg
ICAgZWxlbS5qcXVlcnkgPyBlbGVtWyAwIF0gOiBlbGVtCisgICAgICAgICk7CisgICAgfSwKKwor
ICAgIGFkZDogZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkgeworICAgICAgICByZXR1cm4g
dGhpcy5wdXNoU3RhY2soCisgICAgICAgICAgICBqUXVlcnkudW5pcXVlU29ydCgKKyAgICAgICAg
ICAgICAgICBqUXVlcnkubWVyZ2UoIHRoaXMuZ2V0KCksIGpRdWVyeSggc2VsZWN0b3IsIGNvbnRl
eHQgKSApCisgICAgICAgICAgICApCisgICAgICAgICk7CisgICAgfSwKKworICAgIGFkZEJhY2s6
IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuYWRkKCBzZWxlY3Rv
ciA9PSBudWxsID8KKyAgICAgICAgICAgIHRoaXMucHJldk9iamVjdCA6IHRoaXMucHJldk9iamVj
dC5maWx0ZXIoIHNlbGVjdG9yICkKKyAgICAgICAgKTsKKyAgICB9Cit9ICk7CisKK2Z1bmN0aW9u
IHNpYmxpbmcoIGN1ciwgZGlyICkgeworICAgIHdoaWxlICggKCBjdXIgPSBjdXJbIGRpciBdICkg
JiYgY3VyLm5vZGVUeXBlICE9PSAxICkge30KKyAgICByZXR1cm4gY3VyOworfQorCitqUXVlcnku
ZWFjaCggeworICAgIHBhcmVudDogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgIHZhciBwYXJl
bnQgPSBlbGVtLnBhcmVudE5vZGU7CisgICAgICAgIHJldHVybiBwYXJlbnQgJiYgcGFyZW50Lm5v
ZGVUeXBlICE9PSAxMSA/IHBhcmVudCA6IG51bGw7CisgICAgfSwKKyAgICBwYXJlbnRzOiBmdW5j
dGlvbiggZWxlbSApIHsKKyAgICAgICAgcmV0dXJuIGRpciggZWxlbSwgInBhcmVudE5vZGUiICk7
CisgICAgfSwKKyAgICBwYXJlbnRzVW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHsK
KyAgICAgICAgcmV0dXJuIGRpciggZWxlbSwgInBhcmVudE5vZGUiLCB1bnRpbCApOworICAgIH0s
CisgICAgbmV4dDogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgIHJldHVybiBzaWJsaW5nKCBl
bGVtLCAibmV4dFNpYmxpbmciICk7CisgICAgfSwKKyAgICBwcmV2OiBmdW5jdGlvbiggZWxlbSAp
IHsKKyAgICAgICAgcmV0dXJuIHNpYmxpbmcoIGVsZW0sICJwcmV2aW91c1NpYmxpbmciICk7Cisg
ICAgfSwKKyAgICBuZXh0QWxsOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgcmV0dXJuIGRp
ciggZWxlbSwgIm5leHRTaWJsaW5nIiApOworICAgIH0sCisgICAgcHJldkFsbDogZnVuY3Rpb24o
IGVsZW0gKSB7CisgICAgICAgIHJldHVybiBkaXIoIGVsZW0sICJwcmV2aW91c1NpYmxpbmciICk7
CisgICAgfSwKKyAgICBuZXh0VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHsKKyAg
ICAgICAgcmV0dXJuIGRpciggZWxlbSwgIm5leHRTaWJsaW5nIiwgdW50aWwgKTsKKyAgICB9LAor
ICAgIHByZXZVbnRpbDogZnVuY3Rpb24oIGVsZW0sIGksIHVudGlsICkgeworICAgICAgICByZXR1
cm4gZGlyKCBlbGVtLCAicHJldmlvdXNTaWJsaW5nIiwgdW50aWwgKTsKKyAgICB9LAorICAgIHNp
YmxpbmdzOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgcmV0dXJuIHNpYmxpbmdzKCAoIGVs
ZW0ucGFyZW50Tm9kZSB8fCB7fSApLmZpcnN0Q2hpbGQsIGVsZW0gKTsKKyAgICB9LAorICAgIGNo
aWxkcmVuOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgcmV0dXJuIHNpYmxpbmdzKCBlbGVt
LmZpcnN0Q2hpbGQgKTsKKyAgICB9LAorICAgIGNvbnRlbnRzOiBmdW5jdGlvbiggZWxlbSApIHsK
KyAgICAgICAgcmV0dXJuIGVsZW0uY29udGVudERvY3VtZW50IHx8IGpRdWVyeS5tZXJnZSggW10s
IGVsZW0uY2hpbGROb2RlcyApOworICAgIH0KK30sIGZ1bmN0aW9uKCBuYW1lLCBmbiApIHsKKyAg
ICBqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCB1bnRpbCwgc2VsZWN0b3IgKSB7CisgICAg
ICAgIHZhciBtYXRjaGVkID0galF1ZXJ5Lm1hcCggdGhpcywgZm4sIHVudGlsICk7CisKKyAgICAg
ICAgaWYgKCBuYW1lLnNsaWNlKCAtNSApICE9PSAiVW50aWwiICkgeworICAgICAgICAgICAgc2Vs
ZWN0b3IgPSB1bnRpbDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggc2VsZWN0b3IgJiYgdHlw
ZW9mIHNlbGVjdG9yID09PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgIG1hdGNoZWQgPSBqUXVl
cnkuZmlsdGVyKCBzZWxlY3RvciwgbWF0Y2hlZCApOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KCB0aGlzLmxlbmd0aCA+IDEgKSB7CisKKyAgICAgICAgICAgIC8vIFJlbW92ZSBkdXBsaWNhdGVz
CisgICAgICAgICAgICBpZiAoICFndWFyYW50ZWVkVW5pcXVlWyBuYW1lIF0gKSB7CisgICAgICAg
ICAgICAgICAgalF1ZXJ5LnVuaXF1ZVNvcnQoIG1hdGNoZWQgKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgLy8gUmV2ZXJzZSBvcmRlciBmb3IgcGFyZW50cyogYW5kIHByZXYtZGVyaXZh
dGl2ZXMKKyAgICAgICAgICAgIGlmICggcnBhcmVudHNwcmV2LnRlc3QoIG5hbWUgKSApIHsKKyAg
ICAgICAgICAgICAgICBtYXRjaGVkLnJldmVyc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggbWF0Y2hlZCApOworICAgIH07Cit9
ICk7Cit2YXIgcm5vdHdoaXRlID0gKCAvXFMrL2cgKTsKKworCisKKy8vIENvbnZlcnQgU3RyaW5n
LWZvcm1hdHRlZCBvcHRpb25zIGludG8gT2JqZWN0LWZvcm1hdHRlZCBvbmVzCitmdW5jdGlvbiBj
cmVhdGVPcHRpb25zKCBvcHRpb25zICkgeworICAgIHZhciBvYmplY3QgPSB7fTsKKyAgICBqUXVl
cnkuZWFjaCggb3B0aW9ucy5tYXRjaCggcm5vdHdoaXRlICkgfHwgW10sIGZ1bmN0aW9uKCBfLCBm
bGFnICkgeworICAgICAgICBvYmplY3RbIGZsYWcgXSA9IHRydWU7CisgICAgfSApOworICAgIHJl
dHVybiBvYmplY3Q7Cit9CisKKy8qCisgKiBDcmVhdGUgYSBjYWxsYmFjayBsaXN0IHVzaW5nIHRo
ZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoKKyAqCisgKiAgb3B0aW9uczogYW4gb3B0aW9uYWwgbGlz
dCBvZiBzcGFjZS1zZXBhcmF0ZWQgb3B0aW9ucyB0aGF0IHdpbGwgY2hhbmdlIGhvdworICogICAg
ICAgICAgdGhlIGNhbGxiYWNrIGxpc3QgYmVoYXZlcyBvciBhIG1vcmUgdHJhZGl0aW9uYWwgb3B0
aW9uIG9iamVjdAorICoKKyAqIEJ5IGRlZmF1bHQgYSBjYWxsYmFjayBsaXN0IHdpbGwgYWN0IGxp
a2UgYW4gZXZlbnQgY2FsbGJhY2sgbGlzdCBhbmQgY2FuIGJlCisgKiAiZmlyZWQiIG11bHRpcGxl
IHRpbWVzLgorICoKKyAqIFBvc3NpYmxlIG9wdGlvbnM6CisgKgorICogIG9uY2U6ICAgICAgICAg
ICB3aWxsIGVuc3VyZSB0aGUgY2FsbGJhY2sgbGlzdCBjYW4gb25seSBiZSBmaXJlZCBvbmNlIChs
aWtlIGEgRGVmZXJyZWQpCisgKgorICogIG1lbW9yeTogICAgICAgICB3aWxsIGtlZXAgdHJhY2sg
b2YgcHJldmlvdXMgdmFsdWVzIGFuZCB3aWxsIGNhbGwgYW55IGNhbGxiYWNrIGFkZGVkCisgKiAg
ICAgICAgICAgICAgICAgIGFmdGVyIHRoZSBsaXN0IGhhcyBiZWVuIGZpcmVkIHJpZ2h0IGF3YXkg
d2l0aCB0aGUgbGF0ZXN0ICJtZW1vcml6ZWQiCisgKiAgICAgICAgICAgICAgICAgIHZhbHVlcyAo
bGlrZSBhIERlZmVycmVkKQorICoKKyAqICB1bmlxdWU6ICAgICAgICAgd2lsbCBlbnN1cmUgYSBj
YWxsYmFjayBjYW4gb25seSBiZSBhZGRlZCBvbmNlIChubyBkdXBsaWNhdGUgaW4gdGhlIGxpc3Qp
CisgKgorICogIHN0b3BPbkZhbHNlOiAgICBpbnRlcnJ1cHQgY2FsbGluZ3Mgd2hlbiBhIGNhbGxi
YWNrIHJldHVybnMgZmFsc2UKKyAqCisgKi8KK2pRdWVyeS5DYWxsYmFja3MgPSBmdW5jdGlvbigg
b3B0aW9ucyApIHsKKworICAgIC8vIENvbnZlcnQgb3B0aW9ucyBmcm9tIFN0cmluZy1mb3JtYXR0
ZWQgdG8gT2JqZWN0LWZvcm1hdHRlZCBpZiBuZWVkZWQKKyAgICAvLyAod2UgY2hlY2sgaW4gY2Fj
aGUgZmlyc3QpCisgICAgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb25zID09PSAic3RyaW5nIiA/Cisg
ICAgICAgIGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSA6CisgICAgICAgIGpRdWVyeS5leHRlbmQo
IHt9LCBvcHRpb25zICk7CisKKyAgICB2YXIgLy8gRmxhZyB0byBrbm93IGlmIGxpc3QgaXMgY3Vy
cmVudGx5IGZpcmluZworICAgICAgICBmaXJpbmcsCisKKyAgICAgICAgLy8gTGFzdCBmaXJlIHZh
bHVlIGZvciBub24tZm9yZ2V0dGFibGUgbGlzdHMKKyAgICAgICAgbWVtb3J5LAorCisgICAgICAg
IC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IHdhcyBhbHJlYWR5IGZpcmVkCisgICAgICAgIGZpcmVk
LAorCisgICAgICAgIC8vIEZsYWcgdG8gcHJldmVudCBmaXJpbmcKKyAgICAgICAgbG9ja2VkLAor
CisgICAgICAgIC8vIEFjdHVhbCBjYWxsYmFjayBsaXN0CisgICAgICAgIGxpc3QgPSBbXSwKKwor
ICAgICAgICAvLyBRdWV1ZSBvZiBleGVjdXRpb24gZGF0YSBmb3IgcmVwZWF0YWJsZSBsaXN0cwor
ICAgICAgICBxdWV1ZSA9IFtdLAorCisgICAgICAgIC8vIEluZGV4IG9mIGN1cnJlbnRseSBmaXJp
bmcgY2FsbGJhY2sgKG1vZGlmaWVkIGJ5IGFkZC9yZW1vdmUgYXMgbmVlZGVkKQorICAgICAgICBm
aXJpbmdJbmRleCA9IC0xLAorCisgICAgICAgIC8vIEZpcmUgY2FsbGJhY2tzCisgICAgICAgIGZp
cmUgPSBmdW5jdGlvbigpIHsKKworICAgICAgICAgICAgLy8gRW5mb3JjZSBzaW5nbGUtZmlyaW5n
CisgICAgICAgICAgICBsb2NrZWQgPSBvcHRpb25zLm9uY2U7CisKKyAgICAgICAgICAgIC8vIEV4
ZWN1dGUgY2FsbGJhY2tzIGZvciBhbGwgcGVuZGluZyBleGVjdXRpb25zLAorICAgICAgICAgICAg
Ly8gcmVzcGVjdGluZyBmaXJpbmdJbmRleCBvdmVycmlkZXMgYW5kIHJ1bnRpbWUgY2hhbmdlcwor
ICAgICAgICAgICAgZmlyZWQgPSBmaXJpbmcgPSB0cnVlOworICAgICAgICAgICAgZm9yICggOyBx
dWV1ZS5sZW5ndGg7IGZpcmluZ0luZGV4ID0gLTEgKSB7CisgICAgICAgICAgICAgICAgbWVtb3J5
ID0gcXVldWUuc2hpZnQoKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoICsrZmlyaW5nSW5kZXgg
PCBsaXN0Lmxlbmd0aCApIHsKKworICAgICAgICAgICAgICAgICAgICAvLyBSdW4gY2FsbGJhY2sg
YW5kIGNoZWNrIGZvciBlYXJseSB0ZXJtaW5hdGlvbgorICAgICAgICAgICAgICAgICAgICBpZiAo
IGxpc3RbIGZpcmluZ0luZGV4IF0uYXBwbHkoIG1lbW9yeVsgMCBdLCBtZW1vcnlbIDEgXSApID09
PSBmYWxzZSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zdG9wT25GYWxzZSAp
IHsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSnVtcCB0byBlbmQgYW5kIGZvcmdldCB0
aGUgZGF0YSBzbyAuYWRkIGRvZXNuJ3QgcmUtZmlyZQorICAgICAgICAgICAgICAgICAgICAgICAg
ZmlyaW5nSW5kZXggPSBsaXN0Lmxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9y
eSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBGb3JnZXQgdGhlIGRhdGEgaWYgd2UncmUgZG9u
ZSB3aXRoIGl0CisgICAgICAgICAgICBpZiAoICFvcHRpb25zLm1lbW9yeSApIHsKKyAgICAgICAg
ICAgICAgICBtZW1vcnkgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZmly
aW5nID0gZmFsc2U7CisKKyAgICAgICAgICAgIC8vIENsZWFuIHVwIGlmIHdlJ3JlIGRvbmUgZmly
aW5nIGZvciBnb29kCisgICAgICAgICAgICBpZiAoIGxvY2tlZCApIHsKKworICAgICAgICAgICAg
ICAgIC8vIEtlZXAgYW4gZW1wdHkgbGlzdCBpZiB3ZSBoYXZlIGRhdGEgZm9yIGZ1dHVyZSBhZGQg
Y2FsbHMKKyAgICAgICAgICAgICAgICBpZiAoIG1lbW9yeSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgbGlzdCA9IFtdOworCisgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB0aGlzIG9iamVj
dCBpcyBzcGVudAorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IGxpc3QgPSAiIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0s
CisKKyAgICAgICAgLy8gQWN0dWFsIENhbGxiYWNrcyBvYmplY3QKKyAgICAgICAgc2VsZiA9IHsK
KworICAgICAgICAgICAgLy8gQWRkIGEgY2FsbGJhY2sgb3IgYSBjb2xsZWN0aW9uIG9mIGNhbGxi
YWNrcyB0byB0aGUgbGlzdAorICAgICAgICAgICAgYWRkOiBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIGxpc3QgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2
ZSBtZW1vcnkgZnJvbSBhIHBhc3QgcnVuLCB3ZSBzaG91bGQgZmlyZSBhZnRlciBhZGRpbmcKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCBtZW1vcnkgJiYgIWZpcmluZyApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZpcmluZ0luZGV4ID0gbGlzdC5sZW5ndGggLSAxOworICAgICAgICAgICAg
ICAgICAgICAgICAgcXVldWUucHVzaCggbWVtb3J5ICk7CisgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICAoIGZ1bmN0aW9uIGFkZCggYXJncyApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGpRdWVyeS5lYWNoKCBhcmdzLCBmdW5jdGlvbiggXywgYXJnICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGFyZyAp
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFvcHRpb25zLnVuaXF1
ZSB8fCAhc2VsZi5oYXMoIGFyZyApICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGlzdC5wdXNoKCBhcmcgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGFyZyAmJiBhcmcubGVu
Z3RoICYmIGpRdWVyeS50eXBlKCBhcmcgKSAhPT0gInN0cmluZyIgKSB7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gSW5zcGVjdCByZWN1cnNpdmVseQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhZGQoIGFyZyApOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsKKyAgICAgICAgICAgICAgICAgICAg
fSApKCBhcmd1bWVudHMgKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIG1lbW9yeSAmJiAh
ZmlyaW5nICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZmlyZSgpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
OworICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgLy8gUmVtb3ZlIGEgY2FsbGJhY2sgZnJv
bSB0aGUgbGlzdAorICAgICAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
ICAgICBqUXVlcnkuZWFjaCggYXJndW1lbnRzLCBmdW5jdGlvbiggXywgYXJnICkgeworICAgICAg
ICAgICAgICAgICAgICB2YXIgaW5kZXg7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlICggKCBp
bmRleCA9IGpRdWVyeS5pbkFycmF5KCBhcmcsIGxpc3QsIGluZGV4ICkgKSA+IC0xICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgbGlzdC5zcGxpY2UoIGluZGV4LCAxICk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBmaXJpbmcgaW5kZXhlcworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBpbmRleCA8PSBmaXJpbmdJbmRleCApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmaXJpbmdJbmRleC0tOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSApOworICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzOworICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgLy8gQ2hlY2sgaWYg
YSBnaXZlbiBjYWxsYmFjayBpcyBpbiB0aGUgbGlzdC4KKyAgICAgICAgICAgIC8vIElmIG5vIGFy
Z3VtZW50IGlzIGdpdmVuLCByZXR1cm4gd2hldGhlciBvciBub3QgbGlzdCBoYXMgY2FsbGJhY2tz
IGF0dGFjaGVkLgorICAgICAgICAgICAgaGFzOiBmdW5jdGlvbiggZm4gKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZuID8KKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmluQXJyYXkoIGZu
LCBsaXN0ICkgPiAtMSA6CisgICAgICAgICAgICAgICAgICAgIGxpc3QubGVuZ3RoID4gMDsKKyAg
ICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIC8vIFJlbW92ZSBhbGwgY2FsbGJhY2tzIGZyb20g
dGhlIGxpc3QKKyAgICAgICAgICAgIGVtcHR5OiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIGxpc3QgKSB7CisgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBbXTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9LAor
CisgICAgICAgICAgICAvLyBEaXNhYmxlIC5maXJlIGFuZCAuYWRkCisgICAgICAgICAgICAvLyBB
Ym9ydCBhbnkgY3VycmVudC9wZW5kaW5nIGV4ZWN1dGlvbnMKKyAgICAgICAgICAgIC8vIENsZWFy
IGFsbCBjYWxsYmFja3MgYW5kIHZhbHVlcworICAgICAgICAgICAgZGlzYWJsZTogZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICAgICAgbG9ja2VkID0gcXVldWUgPSBbXTsKKyAgICAgICAgICAgICAg
ICBsaXN0ID0gbWVtb3J5ID0gIiI7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
ICAgICAgICB9LAorICAgICAgICAgICAgZGlzYWJsZWQ6IGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgICAgIHJldHVybiAhbGlzdDsKKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIC8vIERp
c2FibGUgLmZpcmUKKyAgICAgICAgICAgIC8vIEFsc28gZGlzYWJsZSAuYWRkIHVubGVzcyB3ZSBo
YXZlIG1lbW9yeSAoc2luY2UgaXQgd291bGQgaGF2ZSBubyBlZmZlY3QpCisgICAgICAgICAgICAv
LyBBYm9ydCBhbnkgcGVuZGluZyBleGVjdXRpb25zCisgICAgICAgICAgICBsb2NrOiBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgICAgICBsb2NrZWQgPSBxdWV1ZSA9IFtdOworICAgICAgICAgICAg
ICAgIGlmICggIW1lbW9yeSApIHsKKyAgICAgICAgICAgICAgICAgICAgbGlzdCA9IG1lbW9yeSA9
ICIiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICBsb2NrZWQ6IGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgICAgIHJldHVybiAhIWxvY2tlZDsKKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIC8v
IENhbGwgYWxsIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBjb250ZXh0IGFuZCBhcmd1bWVudHMK
KyAgICAgICAgICAgIGZpcmVXaXRoOiBmdW5jdGlvbiggY29udGV4dCwgYXJncyApIHsKKyAgICAg
ICAgICAgICAgICBpZiAoICFsb2NrZWQgKSB7CisgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBh
cmdzIHx8IFtdOworICAgICAgICAgICAgICAgICAgICBhcmdzID0gWyBjb250ZXh0LCBhcmdzLnNs
aWNlID8gYXJncy5zbGljZSgpIDogYXJncyBdOworICAgICAgICAgICAgICAgICAgICBxdWV1ZS5w
dXNoKCBhcmdzICk7CisgICAgICAgICAgICAgICAgICAgIGlmICggIWZpcmluZyApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZpcmUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0s
CisKKyAgICAgICAgICAgIC8vIENhbGwgYWxsIHRoZSBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4g
YXJndW1lbnRzCisgICAgICAgICAgICBmaXJlOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg
ICBzZWxmLmZpcmVXaXRoKCB0aGlzLCBhcmd1bWVudHMgKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gdGhpczsKKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIC8vIFRvIGtub3cgaWYgdGhl
IGNhbGxiYWNrcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxsZWQgYXQgbGVhc3Qgb25jZQorICAgICAg
ICAgICAgZmlyZWQ6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHJldHVybiAhIWZpcmVk
OworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgcmV0dXJuIHNlbGY7Cit9OworCisK
K2pRdWVyeS5leHRlbmQoIHsKKworICAgIERlZmVycmVkOiBmdW5jdGlvbiggZnVuYyApIHsKKyAg
ICAgICAgdmFyIHR1cGxlcyA9IFsKKworICAgICAgICAgICAgICAgIC8vIGFjdGlvbiwgYWRkIGxp
c3RlbmVyLCBsaXN0ZW5lciBsaXN0LCBmaW5hbCBzdGF0ZQorICAgICAgICAgICAgICAgIFsgInJl
c29sdmUiLCAiZG9uZSIsIGpRdWVyeS5DYWxsYmFja3MoICJvbmNlIG1lbW9yeSIgKSwgInJlc29s
dmVkIiBdLAorICAgICAgICAgICAgICAgIFsgInJlamVjdCIsICJmYWlsIiwgalF1ZXJ5LkNhbGxi
YWNrcyggIm9uY2UgbWVtb3J5IiApLCAicmVqZWN0ZWQiIF0sCisgICAgICAgICAgICAgICAgWyAi
bm90aWZ5IiwgInByb2dyZXNzIiwgalF1ZXJ5LkNhbGxiYWNrcyggIm1lbW9yeSIgKSBdCisgICAg
ICAgICAgICBdLAorICAgICAgICAgICAgc3RhdGUgPSAicGVuZGluZyIsCisgICAgICAgICAgICBw
cm9taXNlID0geworICAgICAgICAgICAgICAgIHN0YXRlOiBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0YXRlOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAg
ICAgICAgYWx3YXlzOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQu
ZG9uZSggYXJndW1lbnRzICkuZmFpbCggYXJndW1lbnRzICk7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgdGhlbjog
ZnVuY3Rpb24oIC8qIGZuRG9uZSwgZm5GYWlsLCBmblByb2dyZXNzICovICkgeworICAgICAgICAg
ICAgICAgICAgICB2YXIgZm5zID0gYXJndW1lbnRzOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4galF1ZXJ5LkRlZmVycmVkKCBmdW5jdGlvbiggbmV3RGVmZXIgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggaSwgdHVwbGUgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZuID0galF1ZXJ5LmlzRnVuY3Rpb24oIGZu
c1sgaSBdICkgJiYgZm5zWyBpIF07CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBk
ZWZlcnJlZFsgZG9uZSB8IGZhaWwgfCBwcm9ncmVzcyBdIGZvciBmb3J3YXJkaW5nIGFjdGlvbnMg
dG8gbmV3RGVmZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZFsgdHVwbGVb
IDEgXSBdKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IHJldHVybmVkID0gZm4gJiYgZm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJldHVybmVkICYmIGpRdWVyeS5pc0Z1bmN0aW9u
KCByZXR1cm5lZC5wcm9taXNlICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm5lZC5wcm9taXNlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAucHJvZ3Jlc3MoIG5ld0RlZmVyLm5vdGlmeSApCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLmRvbmUoIG5ld0RlZmVyLnJlc29sdmUgKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mYWlsKCBuZXdEZWZlci5yZWplY3QgKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5ld0RlZmVyWyB0dXBsZVsgMCBdICsgIldpdGgiIF0oCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyA9PT0gcHJvbWlzZSA/
IG5ld0RlZmVyLnByb21pc2UoKSA6IHRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm4gPyBbIHJldHVybmVkIF0gOiBhcmd1bWVudHMKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9ICk7CisgICAgICAgICAgICAgICAgICAgICAgICBmbnMgPSBudWxsOworICAgICAgICAg
ICAgICAgICAgICB9ICkucHJvbWlzZSgpOworICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAg
ICAgICAgICAvLyBHZXQgYSBwcm9taXNlIGZvciB0aGlzIGRlZmVycmVkCisgICAgICAgICAgICAg
ICAgLy8gSWYgb2JqIGlzIHByb3ZpZGVkLCB0aGUgcHJvbWlzZSBhc3BlY3QgaXMgYWRkZWQgdG8g
dGhlIG9iamVjdAorICAgICAgICAgICAgICAgIHByb21pc2U6IGZ1bmN0aW9uKCBvYmogKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmogIT0gbnVsbCA/IGpRdWVyeS5leHRlbmQoIG9i
aiwgcHJvbWlzZSApIDogcHJvbWlzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
LAorICAgICAgICAgICAgZGVmZXJyZWQgPSB7fTsKKworICAgICAgICAvLyBLZWVwIHBpcGUgZm9y
IGJhY2stY29tcGF0CisgICAgICAgIHByb21pc2UucGlwZSA9IHByb21pc2UudGhlbjsKKworICAg
ICAgICAvLyBBZGQgbGlzdC1zcGVjaWZpYyBtZXRob2RzCisgICAgICAgIGpRdWVyeS5lYWNoKCB0
dXBsZXMsIGZ1bmN0aW9uKCBpLCB0dXBsZSApIHsKKyAgICAgICAgICAgIHZhciBsaXN0ID0gdHVw
bGVbIDIgXSwKKyAgICAgICAgICAgICAgICBzdGF0ZVN0cmluZyA9IHR1cGxlWyAzIF07CisKKyAg
ICAgICAgICAgIC8vIHByb21pc2VbIGRvbmUgfCBmYWlsIHwgcHJvZ3Jlc3MgXSA9IGxpc3QuYWRk
CisgICAgICAgICAgICBwcm9taXNlWyB0dXBsZVsgMSBdIF0gPSBsaXN0LmFkZDsKKworICAgICAg
ICAgICAgLy8gSGFuZGxlIHN0YXRlCisgICAgICAgICAgICBpZiAoIHN0YXRlU3RyaW5nICkgewor
ICAgICAgICAgICAgICAgIGxpc3QuYWRkKCBmdW5jdGlvbigpIHsKKworICAgICAgICAgICAgICAg
ICAgICAvLyBzdGF0ZSA9IFsgcmVzb2x2ZWQgfCByZWplY3RlZCBdCisgICAgICAgICAgICAgICAg
ICAgIHN0YXRlID0gc3RhdGVTdHJpbmc7CisKKyAgICAgICAgICAgICAgICAvLyBbIHJlamVjdF9s
aXN0IHwgcmVzb2x2ZV9saXN0IF0uZGlzYWJsZTsgcHJvZ3Jlc3NfbGlzdC5sb2NrCisgICAgICAg
ICAgICAgICAgfSwgdHVwbGVzWyBpIF4gMSBdWyAyIF0uZGlzYWJsZSwgdHVwbGVzWyAyIF1bIDIg
XS5sb2NrICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGRlZmVycmVkWyByZXNv
bHZlIHwgcmVqZWN0IHwgbm90aWZ5IF0KKyAgICAgICAgICAgIGRlZmVycmVkWyB0dXBsZVsgMCBd
IF0gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBkZWZlcnJlZFsgdHVwbGVbIDAgXSAr
ICJXaXRoIiBdKCB0aGlzID09PSBkZWZlcnJlZCA/IHByb21pc2UgOiB0aGlzLCBhcmd1bWVudHMg
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH07CisgICAgICAg
ICAgICBkZWZlcnJlZFsgdHVwbGVbIDAgXSArICJXaXRoIiBdID0gbGlzdC5maXJlV2l0aDsKKyAg
ICAgICAgfSApOworCisgICAgICAgIC8vIE1ha2UgdGhlIGRlZmVycmVkIGEgcHJvbWlzZQorICAg
ICAgICBwcm9taXNlLnByb21pc2UoIGRlZmVycmVkICk7CisKKyAgICAgICAgLy8gQ2FsbCBnaXZl
biBmdW5jIGlmIGFueQorICAgICAgICBpZiAoIGZ1bmMgKSB7CisgICAgICAgICAgICBmdW5jLmNh
bGwoIGRlZmVycmVkLCBkZWZlcnJlZCApOworICAgICAgICB9CisKKyAgICAgICAgLy8gQWxsIGRv
bmUhCisgICAgICAgIHJldHVybiBkZWZlcnJlZDsKKyAgICB9LAorCisgICAgLy8gRGVmZXJyZWQg
aGVscGVyCisgICAgd2hlbjogZnVuY3Rpb24oIHN1Ym9yZGluYXRlIC8qICwgLi4uLCBzdWJvcmRp
bmF0ZU4gKi8gKSB7CisgICAgICAgIHZhciBpID0gMCwKKyAgICAgICAgICAgIHJlc29sdmVWYWx1
ZXMgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSwKKyAgICAgICAgICAgIGxlbmd0aCA9IHJlc29s
dmVWYWx1ZXMubGVuZ3RoLAorCisgICAgICAgICAgICAvLyB0aGUgY291bnQgb2YgdW5jb21wbGV0
ZWQgc3Vib3JkaW5hdGVzCisgICAgICAgICAgICByZW1haW5pbmcgPSBsZW5ndGggIT09IDEgfHwK
KyAgICAgICAgICAgICAgICAoIHN1Ym9yZGluYXRlICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBzdWJv
cmRpbmF0ZS5wcm9taXNlICkgKSA/IGxlbmd0aCA6IDAsCisKKyAgICAgICAgICAgIC8vIHRoZSBt
YXN0ZXIgRGVmZXJyZWQuCisgICAgICAgICAgICAvLyBJZiByZXNvbHZlVmFsdWVzIGNvbnNpc3Qg
b2Ygb25seSBhIHNpbmdsZSBEZWZlcnJlZCwganVzdCB1c2UgdGhhdC4KKyAgICAgICAgICAgIGRl
ZmVycmVkID0gcmVtYWluaW5nID09PSAxID8gc3Vib3JkaW5hdGUgOiBqUXVlcnkuRGVmZXJyZWQo
KSwKKworICAgICAgICAgICAgLy8gVXBkYXRlIGZ1bmN0aW9uIGZvciBib3RoIHJlc29sdmUgYW5k
IHByb2dyZXNzIHZhbHVlcworICAgICAgICAgICAgdXBkYXRlRnVuYyA9IGZ1bmN0aW9uKCBpLCBj
b250ZXh0cywgdmFsdWVzICkgeworICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiggdmFs
dWUgKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHRzWyBpIF0gPSB0aGlzOworICAgICAg
ICAgICAgICAgICAgICB2YWx1ZXNbIGkgXSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gc2xpY2Uu
Y2FsbCggYXJndW1lbnRzICkgOiB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWx1
ZXMgPT09IHByb2dyZXNzVmFsdWVzICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJy
ZWQubm90aWZ5V2l0aCggY29udGV4dHMsIHZhbHVlcyApOworICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKCAhKCAtLXJlbWFpbmluZyApICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGNvbnRleHRzLCB2YWx1ZXMgKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9LAorCisgICAgICAgICAg
ICBwcm9ncmVzc1ZhbHVlcywgcHJvZ3Jlc3NDb250ZXh0cywgcmVzb2x2ZUNvbnRleHRzOworCisg
ICAgICAgIC8vIEFkZCBsaXN0ZW5lcnMgdG8gRGVmZXJyZWQgc3Vib3JkaW5hdGVzOyB0cmVhdCBv
dGhlcnMgYXMgcmVzb2x2ZWQKKyAgICAgICAgaWYgKCBsZW5ndGggPiAxICkgeworICAgICAgICAg
ICAgcHJvZ3Jlc3NWYWx1ZXMgPSBuZXcgQXJyYXkoIGxlbmd0aCApOworICAgICAgICAgICAgcHJv
Z3Jlc3NDb250ZXh0cyA9IG5ldyBBcnJheSggbGVuZ3RoICk7CisgICAgICAgICAgICByZXNvbHZl
Q29udGV4dHMgPSBuZXcgQXJyYXkoIGxlbmd0aCApOworICAgICAgICAgICAgZm9yICggOyBpIDwg
bGVuZ3RoOyBpKysgKSB7CisgICAgICAgICAgICAgICAgaWYgKCByZXNvbHZlVmFsdWVzWyBpIF0g
JiYgalF1ZXJ5LmlzRnVuY3Rpb24oIHJlc29sdmVWYWx1ZXNbIGkgXS5wcm9taXNlICkgKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHJlc29sdmVWYWx1ZXNbIGkgXS5wcm9taXNlKCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC5wcm9ncmVzcyggdXBkYXRlRnVuYyggaSwgcHJvZ3Jlc3NDb250ZXh0
cywgcHJvZ3Jlc3NWYWx1ZXMgKSApCisgICAgICAgICAgICAgICAgICAgICAgICAuZG9uZSggdXBk
YXRlRnVuYyggaSwgcmVzb2x2ZUNvbnRleHRzLCByZXNvbHZlVmFsdWVzICkgKQorICAgICAgICAg
ICAgICAgICAgICAgICAgLmZhaWwoIGRlZmVycmVkLnJlamVjdCApOworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC0tcmVtYWluaW5nOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHdlJ3JlIG5v
dCB3YWl0aW5nIG9uIGFueXRoaW5nLCByZXNvbHZlIHRoZSBtYXN0ZXIKKyAgICAgICAgaWYgKCAh
cmVtYWluaW5nICkgeworICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZVdpdGgoIHJlc29sdmVD
b250ZXh0cywgcmVzb2x2ZVZhbHVlcyApOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRl
ZmVycmVkLnByb21pc2UoKTsKKyAgICB9Cit9ICk7CisKKworLy8gVGhlIGRlZmVycmVkIHVzZWQg
b24gRE9NIHJlYWR5Cit2YXIgcmVhZHlMaXN0OworCitqUXVlcnkuZm4ucmVhZHkgPSBmdW5jdGlv
biggZm4gKSB7CisKKyAgICAvLyBBZGQgdGhlIGNhbGxiYWNrCisgICAgalF1ZXJ5LnJlYWR5LnBy
b21pc2UoKS5kb25lKCBmbiApOworCisgICAgcmV0dXJuIHRoaXM7Cit9OworCitqUXVlcnkuZXh0
ZW5kKCB7CisKKyAgICAvLyBJcyB0aGUgRE9NIHJlYWR5IHRvIGJlIHVzZWQ/IFNldCB0byB0cnVl
IG9uY2UgaXQgb2NjdXJzLgorICAgIGlzUmVhZHk6IGZhbHNlLAorCisgICAgLy8gQSBjb3VudGVy
IHRvIHRyYWNrIGhvdyBtYW55IGl0ZW1zIHRvIHdhaXQgZm9yIGJlZm9yZQorICAgIC8vIHRoZSBy
ZWFkeSBldmVudCBmaXJlcy4gU2VlICM2NzgxCisgICAgcmVhZHlXYWl0OiAxLAorCisgICAgLy8g
SG9sZCAob3IgcmVsZWFzZSkgdGhlIHJlYWR5IGV2ZW50CisgICAgaG9sZFJlYWR5OiBmdW5jdGlv
biggaG9sZCApIHsKKyAgICAgICAgaWYgKCBob2xkICkgeworICAgICAgICAgICAgalF1ZXJ5LnJl
YWR5V2FpdCsrOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgalF1ZXJ5LnJlYWR5KCB0
cnVlICk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgLy8gSGFuZGxlIHdoZW4gdGhlIERPTSBp
cyByZWFkeQorICAgIHJlYWR5OiBmdW5jdGlvbiggd2FpdCApIHsKKworICAgICAgICAvLyBBYm9y
dCBpZiB0aGVyZSBhcmUgcGVuZGluZyBob2xkcyBvciB3ZSdyZSBhbHJlYWR5IHJlYWR5CisgICAg
ICAgIGlmICggd2FpdCA9PT0gdHJ1ZSA/IC0talF1ZXJ5LnJlYWR5V2FpdCA6IGpRdWVyeS5pc1Jl
YWR5ICkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gUmVt
ZW1iZXIgdGhhdCB0aGUgRE9NIGlzIHJlYWR5CisgICAgICAgIGpRdWVyeS5pc1JlYWR5ID0gdHJ1
ZTsKKworICAgICAgICAvLyBJZiBhIG5vcm1hbCBET00gUmVhZHkgZXZlbnQgZmlyZWQsIGRlY3Jl
bWVudCwgYW5kIHdhaXQgaWYgbmVlZCBiZQorICAgICAgICBpZiAoIHdhaXQgIT09IHRydWUgJiYg
LS1qUXVlcnkucmVhZHlXYWl0ID4gMCApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIElmIHRoZXJlIGFyZSBmdW5jdGlvbnMgYm91bmQsIHRvIGV4ZWN1dGUK
KyAgICAgICAgcmVhZHlMaXN0LnJlc29sdmVXaXRoKCBkb2N1bWVudCwgWyBqUXVlcnkgXSApOwor
CisgICAgICAgIC8vIFRyaWdnZXIgYW55IGJvdW5kIHJlYWR5IGV2ZW50cworICAgICAgICBpZiAo
IGpRdWVyeS5mbi50cmlnZ2VySGFuZGxlciApIHsKKyAgICAgICAgICAgIGpRdWVyeSggZG9jdW1l
bnQgKS50cmlnZ2VySGFuZGxlciggInJlYWR5IiApOworICAgICAgICAgICAgalF1ZXJ5KCBkb2N1
bWVudCApLm9mZiggInJlYWR5IiApOworICAgICAgICB9CisgICAgfQorfSApOworCisvKioKKyAq
IFRoZSByZWFkeSBldmVudCBoYW5kbGVyIGFuZCBzZWxmIGNsZWFudXAgbWV0aG9kCisgKi8KK2Z1
bmN0aW9uIGNvbXBsZXRlZCgpIHsKKyAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCAi
RE9NQ29udGVudExvYWRlZCIsIGNvbXBsZXRlZCApOworICAgIHdpbmRvdy5yZW1vdmVFdmVudExp
c3RlbmVyKCAibG9hZCIsIGNvbXBsZXRlZCApOworICAgIGpRdWVyeS5yZWFkeSgpOworfQorCitq
UXVlcnkucmVhZHkucHJvbWlzZSA9IGZ1bmN0aW9uKCBvYmogKSB7CisgICAgaWYgKCAhcmVhZHlM
aXN0ICkgeworCisgICAgICAgIHJlYWR5TGlzdCA9IGpRdWVyeS5EZWZlcnJlZCgpOworCisgICAg
ICAgIC8vIENhdGNoIGNhc2VzIHdoZXJlICQoZG9jdW1lbnQpLnJlYWR5KCkgaXMgY2FsbGVkCisg
ICAgICAgIC8vIGFmdGVyIHRoZSBicm93c2VyIGV2ZW50IGhhcyBhbHJlYWR5IG9jY3VycmVkLgor
ICAgICAgICAvLyBTdXBwb3J0OiBJRTktMTAgb25seQorICAgICAgICAvLyBPbGRlciBJRSBzb21l
dGltZXMgc2lnbmFscyAiaW50ZXJhY3RpdmUiIHRvbyBzb29uCisgICAgICAgIGlmICggZG9jdW1l
bnQucmVhZHlTdGF0ZSA9PT0gImNvbXBsZXRlIiB8fAorICAgICAgICAgICAgKCBkb2N1bWVudC5y
ZWFkeVN0YXRlICE9PSAibG9hZGluZyIgJiYgIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kb1Nj
cm9sbCApICkgeworCisgICAgICAgICAgICAvLyBIYW5kbGUgaXQgYXN5bmNocm9ub3VzbHkgdG8g
YWxsb3cgc2NyaXB0cyB0aGUgb3Bwb3J0dW5pdHkgdG8gZGVsYXkgcmVhZHkKKyAgICAgICAgICAg
IHdpbmRvdy5zZXRUaW1lb3V0KCBqUXVlcnkucmVhZHkgKTsKKworICAgICAgICB9IGVsc2Ugewor
CisgICAgICAgICAgICAvLyBVc2UgdGhlIGhhbmR5IGV2ZW50IGNhbGxiYWNrCisgICAgICAgICAg
ICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCAiRE9NQ29udGVudExvYWRlZCIsIGNvbXBsZXRl
ZCApOworCisgICAgICAgICAgICAvLyBBIGZhbGxiYWNrIHRvIHdpbmRvdy5vbmxvYWQsIHRoYXQg
d2lsbCBhbHdheXMgd29yaworICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoICJs
b2FkIiwgY29tcGxldGVkICk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlYWR5TGlz
dC5wcm9taXNlKCBvYmogKTsKK307CisKKy8vIEtpY2sgb2ZmIHRoZSBET00gcmVhZHkgY2hlY2sg
ZXZlbiBpZiB0aGUgdXNlciBkb2VzIG5vdAoralF1ZXJ5LnJlYWR5LnByb21pc2UoKTsKKworCisK
KworLy8gTXVsdGlmdW5jdGlvbmFsIG1ldGhvZCB0byBnZXQgYW5kIHNldCB2YWx1ZXMgb2YgYSBj
b2xsZWN0aW9uCisvLyBUaGUgdmFsdWUvcyBjYW4gb3B0aW9uYWxseSBiZSBleGVjdXRlZCBpZiBp
dCdzIGEgZnVuY3Rpb24KK3ZhciBhY2Nlc3MgPSBmdW5jdGlvbiggZWxlbXMsIGZuLCBrZXksIHZh
bHVlLCBjaGFpbmFibGUsIGVtcHR5R2V0LCByYXcgKSB7CisgICAgdmFyIGkgPSAwLAorICAgICAg
ICBsZW4gPSBlbGVtcy5sZW5ndGgsCisgICAgICAgIGJ1bGsgPSBrZXkgPT0gbnVsbDsKKworICAg
IC8vIFNldHMgbWFueSB2YWx1ZXMKKyAgICBpZiAoIGpRdWVyeS50eXBlKCBrZXkgKSA9PT0gIm9i
amVjdCIgKSB7CisgICAgICAgIGNoYWluYWJsZSA9IHRydWU7CisgICAgICAgIGZvciAoIGkgaW4g
a2V5ICkgeworICAgICAgICAgICAgYWNjZXNzKCBlbGVtcywgZm4sIGksIGtleVsgaSBdLCB0cnVl
LCBlbXB0eUdldCwgcmF3ICk7CisgICAgICAgIH0KKworICAgIC8vIFNldHMgb25lIHZhbHVlCisg
ICAgfSBlbHNlIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgY2hhaW5hYmxl
ID0gdHJ1ZTsKKworICAgICAgICBpZiAoICFqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHsK
KyAgICAgICAgICAgIHJhdyA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIGJ1bGsg
KSB7CisKKyAgICAgICAgICAgIC8vIEJ1bGsgb3BlcmF0aW9ucyBydW4gYWdhaW5zdCB0aGUgZW50
aXJlIHNldAorICAgICAgICAgICAgaWYgKCByYXcgKSB7CisgICAgICAgICAgICAgICAgZm4uY2Fs
bCggZWxlbXMsIHZhbHVlICk7CisgICAgICAgICAgICAgICAgZm4gPSBudWxsOworCisgICAgICAg
ICAgICAvLyAuLi5leGNlcHQgd2hlbiBleGVjdXRpbmcgZnVuY3Rpb24gdmFsdWVzCisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJ1bGsgPSBmbjsKKyAgICAgICAgICAgICAg
ICBmbiA9IGZ1bmN0aW9uKCBlbGVtLCBrZXksIHZhbHVlICkgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gYnVsay5jYWxsKCBqUXVlcnkoIGVsZW0gKSwgdmFsdWUgKTsKKyAgICAgICAgICAg
ICAgICB9OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCBmbiApIHsK
KyAgICAgICAgICAgIGZvciAoIDsgaSA8IGxlbjsgaSsrICkgeworICAgICAgICAgICAgICAgIGZu
KAorICAgICAgICAgICAgICAgICAgICBlbGVtc1sgaSBdLCBrZXksIHJhdyA/CisgICAgICAgICAg
ICAgICAgICAgIHZhbHVlIDoKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUuY2FsbCggZWxlbXNb
IGkgXSwgaSwgZm4oIGVsZW1zWyBpIF0sIGtleSApICkKKyAgICAgICAgICAgICAgICApOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGNoYWluYWJsZSA/Cisg
ICAgICAgIGVsZW1zIDoKKworICAgICAgICAvLyBHZXRzCisgICAgICAgIGJ1bGsgPworICAgICAg
ICAgICAgZm4uY2FsbCggZWxlbXMgKSA6CisgICAgICAgICAgICBsZW4gPyBmbiggZWxlbXNbIDAg
XSwga2V5ICkgOiBlbXB0eUdldDsKK307Cit2YXIgYWNjZXB0RGF0YSA9IGZ1bmN0aW9uKCBvd25l
ciApIHsKKworICAgIC8vIEFjY2VwdHMgb25seToKKyAgICAvLyAgLSBOb2RlCisgICAgLy8gICAg
LSBOb2RlLkVMRU1FTlRfTk9ERQorICAgIC8vICAgIC0gTm9kZS5ET0NVTUVOVF9OT0RFCisgICAg
Ly8gIC0gT2JqZWN0CisgICAgLy8gICAgLSBBbnkKKyAgICAvKiBqc2hpbnQgLVcwMTggKi8KKyAg
ICByZXR1cm4gb3duZXIubm9kZVR5cGUgPT09IDEgfHwgb3duZXIubm9kZVR5cGUgPT09IDkgfHwg
ISggK293bmVyLm5vZGVUeXBlICk7Cit9OworCisKKworCitmdW5jdGlvbiBEYXRhKCkgeworICAg
IHRoaXMuZXhwYW5kbyA9IGpRdWVyeS5leHBhbmRvICsgRGF0YS51aWQrKzsKK30KKworRGF0YS51
aWQgPSAxOworCitEYXRhLnByb3RvdHlwZSA9IHsKKworICAgIHJlZ2lzdGVyOiBmdW5jdGlvbigg
b3duZXIsIGluaXRpYWwgKSB7CisgICAgICAgIHZhciB2YWx1ZSA9IGluaXRpYWwgfHwge307CisK
KyAgICAgICAgLy8gSWYgaXQgaXMgYSBub2RlIHVubGlrZWx5IHRvIGJlIHN0cmluZ2lmeS1lZCBv
ciBsb29wZWQgb3ZlcgorICAgICAgICAvLyB1c2UgcGxhaW4gYXNzaWdubWVudAorICAgICAgICBp
ZiAoIG93bmVyLm5vZGVUeXBlICkgeworICAgICAgICAgICAgb3duZXJbIHRoaXMuZXhwYW5kbyBd
ID0gdmFsdWU7CisKKyAgICAgICAgLy8gT3RoZXJ3aXNlIHNlY3VyZSBpdCBpbiBhIG5vbi1lbnVt
ZXJhYmxlLCBub24td3JpdGFibGUgcHJvcGVydHkKKyAgICAgICAgLy8gY29uZmlndXJhYmlsaXR5
IG11c3QgYmUgdHJ1ZSB0byBhbGxvdyB0aGUgcHJvcGVydHkgdG8gYmUKKyAgICAgICAgLy8gZGVs
ZXRlZCB3aXRoIHRoZSBkZWxldGUgb3BlcmF0b3IKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggb3duZXIsIHRoaXMuZXhwYW5kbywgeworICAgICAg
ICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKKyAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwK
KyAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICAgICAgICAgIH0gKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gb3duZXJbIHRoaXMuZXhwYW5kbyBdOworICAgIH0sCisg
ICAgY2FjaGU6IGZ1bmN0aW9uKCBvd25lciApIHsKKworICAgICAgICAvLyBXZSBjYW4gYWNjZXB0
IGRhdGEgZm9yIG5vbi1lbGVtZW50IG5vZGVzIGluIG1vZGVybiBicm93c2VycywKKyAgICAgICAg
Ly8gYnV0IHdlIHNob3VsZCBub3QsIHNlZSAjODMzNS4KKyAgICAgICAgLy8gQWx3YXlzIHJldHVy
biBhbiBlbXB0eSBvYmplY3QuCisgICAgICAgIGlmICggIWFjY2VwdERhdGEoIG93bmVyICkgKSB7
CisgICAgICAgICAgICByZXR1cm4ge307CisgICAgICAgIH0KKworICAgICAgICAvLyBDaGVjayBp
ZiB0aGUgb3duZXIgb2JqZWN0IGFscmVhZHkgaGFzIGEgY2FjaGUKKyAgICAgICAgdmFyIHZhbHVl
ID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdOworCisgICAgICAgIC8vIElmIG5vdCwgY3JlYXRlIG9u
ZQorICAgICAgICBpZiAoICF2YWx1ZSApIHsKKyAgICAgICAgICAgIHZhbHVlID0ge307CisKKyAg
ICAgICAgICAgIC8vIFdlIGNhbiBhY2NlcHQgZGF0YSBmb3Igbm9uLWVsZW1lbnQgbm9kZXMgaW4g
bW9kZXJuIGJyb3dzZXJzLAorICAgICAgICAgICAgLy8gYnV0IHdlIHNob3VsZCBub3QsIHNlZSAj
ODMzNS4KKyAgICAgICAgICAgIC8vIEFsd2F5cyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0LgorICAg
ICAgICAgICAgaWYgKCBhY2NlcHREYXRhKCBvd25lciApICkgeworCisgICAgICAgICAgICAgICAg
Ly8gSWYgaXQgaXMgYSBub2RlIHVubGlrZWx5IHRvIGJlIHN0cmluZ2lmeS1lZCBvciBsb29wZWQg
b3ZlcgorICAgICAgICAgICAgICAgIC8vIHVzZSBwbGFpbiBhc3NpZ25tZW50CisgICAgICAgICAg
ICAgICAgaWYgKCBvd25lci5ub2RlVHlwZSApIHsKKyAgICAgICAgICAgICAgICAgICAgb3duZXJb
IHRoaXMuZXhwYW5kbyBdID0gdmFsdWU7CisKKyAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2Ug
c2VjdXJlIGl0IGluIGEgbm9uLWVudW1lcmFibGUgcHJvcGVydHkKKyAgICAgICAgICAgICAgICAv
LyBjb25maWd1cmFibGUgbXVzdCBiZSB0cnVlIHRvIGFsbG93IHRoZSBwcm9wZXJ0eSB0byBiZQor
ICAgICAgICAgICAgICAgIC8vIGRlbGV0ZWQgd2hlbiBkYXRhIGlzIHJlbW92ZWQKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoIG93bmVyLCB0aGlzLmV4cGFuZG8sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVl
OiB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
ICAgICAgICAgICAgICAgICB9ICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0sCisgICAgc2V0OiBmdW5j
dGlvbiggb3duZXIsIGRhdGEsIHZhbHVlICkgeworICAgICAgICB2YXIgcHJvcCwKKyAgICAgICAg
ICAgIGNhY2hlID0gdGhpcy5jYWNoZSggb3duZXIgKTsKKworICAgICAgICAvLyBIYW5kbGU6IFsg
b3duZXIsIGtleSwgdmFsdWUgXSBhcmdzCisgICAgICAgIGlmICggdHlwZW9mIGRhdGEgPT09ICJz
dHJpbmciICkgeworICAgICAgICAgICAgY2FjaGVbIGRhdGEgXSA9IHZhbHVlOworCisgICAgICAg
IC8vIEhhbmRsZTogWyBvd25lciwgeyBwcm9wZXJ0aWVzIH0gXSBhcmdzCisgICAgICAgIH0gZWxz
ZSB7CisKKyAgICAgICAgICAgIC8vIENvcHkgdGhlIHByb3BlcnRpZXMgb25lLWJ5LW9uZSB0byB0
aGUgY2FjaGUgb2JqZWN0CisgICAgICAgICAgICBmb3IgKCBwcm9wIGluIGRhdGEgKSB7CisgICAg
ICAgICAgICAgICAgY2FjaGVbIHByb3AgXSA9IGRhdGFbIHByb3AgXTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gY2FjaGU7CisgICAgfSwKKyAgICBnZXQ6IGZ1bmN0
aW9uKCBvd25lciwga2V5ICkgeworICAgICAgICByZXR1cm4ga2V5ID09PSB1bmRlZmluZWQgPwor
ICAgICAgICAgICAgdGhpcy5jYWNoZSggb3duZXIgKSA6CisgICAgICAgICAgICBvd25lclsgdGhp
cy5leHBhbmRvIF0gJiYgb3duZXJbIHRoaXMuZXhwYW5kbyBdWyBrZXkgXTsKKyAgICB9LAorICAg
IGFjY2VzczogZnVuY3Rpb24oIG93bmVyLCBrZXksIHZhbHVlICkgeworICAgICAgICB2YXIgc3Rv
cmVkOworCisgICAgICAgIC8vIEluIGNhc2VzIHdoZXJlIGVpdGhlcjoKKyAgICAgICAgLy8KKyAg
ICAgICAgLy8gICAxLiBObyBrZXkgd2FzIHNwZWNpZmllZAorICAgICAgICAvLyAgIDIuIEEgc3Ry
aW5nIGtleSB3YXMgc3BlY2lmaWVkLCBidXQgbm8gdmFsdWUgcHJvdmlkZWQKKyAgICAgICAgLy8K
KyAgICAgICAgLy8gVGFrZSB0aGUgInJlYWQiIHBhdGggYW5kIGFsbG93IHRoZSBnZXQgbWV0aG9k
IHRvIGRldGVybWluZQorICAgICAgICAvLyB3aGljaCB2YWx1ZSB0byByZXR1cm4sIHJlc3BlY3Rp
dmVseSBlaXRoZXI6CisgICAgICAgIC8vCisgICAgICAgIC8vICAgMS4gVGhlIGVudGlyZSBjYWNo
ZSBvYmplY3QKKyAgICAgICAgLy8gICAyLiBUaGUgZGF0YSBzdG9yZWQgYXQgdGhlIGtleQorICAg
ICAgICAvLworICAgICAgICBpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8CisgICAgICAgICAgICAg
ICAgKCAoIGtleSAmJiB0eXBlb2Yga2V5ID09PSAic3RyaW5nIiApICYmIHZhbHVlID09PSB1bmRl
ZmluZWQgKSApIHsKKworICAgICAgICAgICAgc3RvcmVkID0gdGhpcy5nZXQoIG93bmVyLCBrZXkg
KTsKKworICAgICAgICAgICAgcmV0dXJuIHN0b3JlZCAhPT0gdW5kZWZpbmVkID8KKyAgICAgICAg
ICAgICAgICBzdG9yZWQgOiB0aGlzLmdldCggb3duZXIsIGpRdWVyeS5jYW1lbENhc2UoIGtleSAp
ICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBXaGVuIHRoZSBrZXkgaXMgbm90IGEgc3RyaW5n
LCBvciBib3RoIGEga2V5IGFuZCB2YWx1ZQorICAgICAgICAvLyBhcmUgc3BlY2lmaWVkLCBzZXQg
b3IgZXh0ZW5kIChleGlzdGluZyBvYmplY3RzKSB3aXRoIGVpdGhlcjoKKyAgICAgICAgLy8KKyAg
ICAgICAgLy8gICAxLiBBbiBvYmplY3Qgb2YgcHJvcGVydGllcworICAgICAgICAvLyAgIDIuIEEg
a2V5IGFuZCB2YWx1ZQorICAgICAgICAvLworICAgICAgICB0aGlzLnNldCggb3duZXIsIGtleSwg
dmFsdWUgKTsKKworICAgICAgICAvLyBTaW5jZSB0aGUgInNldCIgcGF0aCBjYW4gaGF2ZSB0d28g
cG9zc2libGUgZW50cnkgcG9pbnRzCisgICAgICAgIC8vIHJldHVybiB0aGUgZXhwZWN0ZWQgZGF0
YSBiYXNlZCBvbiB3aGljaCBwYXRoIHdhcyB0YWtlblsqXQorICAgICAgICByZXR1cm4gdmFsdWUg
IT09IHVuZGVmaW5lZCA/IHZhbHVlIDoga2V5OworICAgIH0sCisgICAgcmVtb3ZlOiBmdW5jdGlv
biggb3duZXIsIGtleSApIHsKKyAgICAgICAgdmFyIGksIG5hbWUsIGNhbWVsLAorICAgICAgICAg
ICAgY2FjaGUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07CisKKyAgICAgICAgaWYgKCBjYWNoZSA9
PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKCBrZXkgPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIHRoaXMucmVnaXN0ZXIo
IG93bmVyICk7CisKKyAgICAgICAgfSBlbHNlIHsKKworICAgICAgICAgICAgLy8gU3VwcG9ydCBh
cnJheSBvciBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGtleXMKKyAgICAgICAgICAgIGlmICgg
alF1ZXJ5LmlzQXJyYXkoIGtleSApICkgeworCisgICAgICAgICAgICAgICAgLy8gSWYgIm5hbWUi
IGlzIGFuIGFycmF5IG9mIGtleXMuLi4KKyAgICAgICAgICAgICAgICAvLyBXaGVuIGRhdGEgaXMg
aW5pdGlhbGx5IGNyZWF0ZWQsIHZpYSAoImtleSIsICJ2YWwiKSBzaWduYXR1cmUsCisgICAgICAg
ICAgICAgICAgLy8ga2V5cyB3aWxsIGJlIGNvbnZlcnRlZCB0byBjYW1lbENhc2UuCisgICAgICAg
ICAgICAgICAgLy8gU2luY2UgdGhlcmUgaXMgbm8gd2F5IHRvIHRlbGwgX2hvd18gYSBrZXkgd2Fz
IGFkZGVkLCByZW1vdmUKKyAgICAgICAgICAgICAgICAvLyBib3RoIHBsYWluIGtleSBhbmQgY2Ft
ZWxDYXNlIGtleS4gIzEyNzg2CisgICAgICAgICAgICAgICAgLy8gVGhpcyB3aWxsIG9ubHkgcGVu
YWxpemUgdGhlIGFycmF5IGFyZ3VtZW50IHBhdGguCisgICAgICAgICAgICAgICAgbmFtZSA9IGtl
eS5jb25jYXQoIGtleS5tYXAoIGpRdWVyeS5jYW1lbENhc2UgKSApOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBjYW1lbCA9IGpRdWVyeS5jYW1lbENhc2UoIGtleSApOwor
CisgICAgICAgICAgICAgICAgLy8gVHJ5IHRoZSBzdHJpbmcgYXMgYSBrZXkgYmVmb3JlIGFueSBt
YW5pcHVsYXRpb24KKyAgICAgICAgICAgICAgICBpZiAoIGtleSBpbiBjYWNoZSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgbmFtZSA9IFsga2V5LCBjYW1lbCBdOworICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgYSBrZXkgd2l0aCB0aGUgc3BhY2Vz
IGV4aXN0cywgdXNlIGl0LgorICAgICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIGNyZWF0
ZSBhbiBhcnJheSBieSBtYXRjaGluZyBub24td2hpdGVzcGFjZQorICAgICAgICAgICAgICAgICAg
ICBuYW1lID0gY2FtZWw7CisgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lIGluIGNhY2hl
ID8KKyAgICAgICAgICAgICAgICAgICAgICAgIFsgbmFtZSBdIDogKCBuYW1lLm1hdGNoKCBybm90
d2hpdGUgKSB8fCBbXSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaSA9IG5hbWUubGVuZ3RoOworCisgICAgICAgICAgICB3aGlsZSAoIGktLSApIHsK
KyAgICAgICAgICAgICAgICBkZWxldGUgY2FjaGVbIG5hbWVbIGkgXSBdOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgLy8gUmVtb3ZlIHRoZSBleHBhbmRvIGlmIHRoZXJlJ3Mg
bm8gbW9yZSBkYXRhCisgICAgICAgIGlmICgga2V5ID09PSB1bmRlZmluZWQgfHwgalF1ZXJ5Lmlz
RW1wdHlPYmplY3QoIGNhY2hlICkgKSB7CisKKyAgICAgICAgICAgIC8vIFN1cHBvcnQ6IENocm9t
ZSA8PSAzNS00NSsKKyAgICAgICAgICAgIC8vIFdlYmtpdCAmIEJsaW5rIHBlcmZvcm1hbmNlIHN1
ZmZlcnMgd2hlbiBkZWxldGluZyBwcm9wZXJ0aWVzCisgICAgICAgICAgICAvLyBmcm9tIERPTSBu
b2Rlcywgc28gc2V0IHRvIHVuZGVmaW5lZCBpbnN0ZWFkCisgICAgICAgICAgICAvLyBodHRwczov
L2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mzc4NjA3CisgICAg
ICAgICAgICBpZiAoIG93bmVyLm5vZGVUeXBlICkgeworICAgICAgICAgICAgICAgIG93bmVyWyB0
aGlzLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgZGVsZXRlIG93bmVyWyB0aGlzLmV4cGFuZG8gXTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0sCisgICAgaGFzRGF0YTogZnVuY3Rpb24oIG93bmVyICkgeworICAgICAg
ICB2YXIgY2FjaGUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07CisgICAgICAgIHJldHVybiBjYWNo
ZSAhPT0gdW5kZWZpbmVkICYmICFqUXVlcnkuaXNFbXB0eU9iamVjdCggY2FjaGUgKTsKKyAgICB9
Cit9OwordmFyIGRhdGFQcml2ID0gbmV3IERhdGEoKTsKKwordmFyIGRhdGFVc2VyID0gbmV3IERh
dGEoKTsKKworCisKKy8vICBJbXBsZW1lbnRhdGlvbiBTdW1tYXJ5CisvLworLy8gIDEuIEVuZm9y
Y2UgQVBJIHN1cmZhY2UgYW5kIHNlbWFudGljIGNvbXBhdGliaWxpdHkgd2l0aCAxLjkueCBicmFu
Y2gKKy8vICAyLiBJbXByb3ZlIHRoZSBtb2R1bGUncyBtYWludGFpbmFiaWxpdHkgYnkgcmVkdWNp
bmcgdGhlIHN0b3JhZ2UKKy8vICAgICAgcGF0aHMgdG8gYSBzaW5nbGUgbWVjaGFuaXNtLgorLy8g
IDMuIFVzZSB0aGUgc2FtZSBzaW5nbGUgbWVjaGFuaXNtIHRvIHN1cHBvcnQgInByaXZhdGUiIGFu
ZCAidXNlciIgZGF0YS4KKy8vICA0LiBfTmV2ZXJfIGV4cG9zZSAicHJpdmF0ZSIgZGF0YSB0byB1
c2VyIGNvZGUgKFRPRE86IERyb3AgX2RhdGEsIF9yZW1vdmVEYXRhKQorLy8gIDUuIEF2b2lkIGV4
cG9zaW5nIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb24gdXNlciBvYmplY3RzIChlZy4gZXhwYW5k
byBwcm9wZXJ0aWVzKQorLy8gIDYuIFByb3ZpZGUgYSBjbGVhciBwYXRoIGZvciBpbXBsZW1lbnRh
dGlvbiB1cGdyYWRlIHRvIFdlYWtNYXAgaW4gMjAxNAorCit2YXIgcmJyYWNlID0gL14oPzpce1tc
d1xXXSpcfXxcW1tcd1xXXSpcXSkkLywKKyAgICBybXVsdGlEYXNoID0gL1tBLVpdL2c7CisKK2Z1
bmN0aW9uIGRhdGFBdHRyKCBlbGVtLCBrZXksIGRhdGEgKSB7CisgICAgdmFyIG5hbWU7CisKKyAg
ICAvLyBJZiBub3RoaW5nIHdhcyBmb3VuZCBpbnRlcm5hbGx5LCB0cnkgdG8gZmV0Y2ggYW55Cisg
ICAgLy8gZGF0YSBmcm9tIHRoZSBIVE1MNSBkYXRhLSogYXR0cmlidXRlCisgICAgaWYgKCBkYXRh
ID09PSB1bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKKyAgICAgICAgbmFtZSA9
ICJkYXRhLSIgKyBrZXkucmVwbGFjZSggcm11bHRpRGFzaCwgIi0kJiIgKS50b0xvd2VyQ2FzZSgp
OworICAgICAgICBkYXRhID0gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKTsKKworICAgICAgICBp
ZiAoIHR5cGVvZiBkYXRhID09PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAg
ICAgICAgICAgICAgZGF0YSA9IGRhdGEgPT09ICJ0cnVlIiA/IHRydWUgOgorICAgICAgICAgICAg
ICAgICAgICBkYXRhID09PSAiZmFsc2UiID8gZmFsc2UgOgorICAgICAgICAgICAgICAgICAgICBk
YXRhID09PSAibnVsbCIgPyBudWxsIDoKKworICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IGNv
bnZlcnQgdG8gYSBudW1iZXIgaWYgaXQgZG9lc24ndCBjaGFuZ2UgdGhlIHN0cmluZworICAgICAg
ICAgICAgICAgICAgICArZGF0YSArICIiID09PSBkYXRhID8gK2RhdGEgOgorICAgICAgICAgICAg
ICAgICAgICByYnJhY2UudGVzdCggZGF0YSApID8galF1ZXJ5LnBhcnNlSlNPTiggZGF0YSApIDoK
KyAgICAgICAgICAgICAgICAgICAgZGF0YTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKCBlICkge30K
KworICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIHNldCB0aGUgZGF0YSBzbyBpdCBpc24ndCBj
aGFuZ2VkIGxhdGVyCisgICAgICAgICAgICBkYXRhVXNlci5zZXQoIGVsZW0sIGtleSwgZGF0YSAp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGF0YSA9IHVuZGVmaW5lZDsKKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gZGF0YTsKK30KKworalF1ZXJ5LmV4dGVuZCggeworICAg
IGhhc0RhdGE6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICByZXR1cm4gZGF0YVVzZXIuaGFz
RGF0YSggZWxlbSApIHx8IGRhdGFQcml2Lmhhc0RhdGEoIGVsZW0gKTsKKyAgICB9LAorCisgICAg
ZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEgKSB7CisgICAgICAgIHJldHVybiBkYXRh
VXNlci5hY2Nlc3MoIGVsZW0sIG5hbWUsIGRhdGEgKTsKKyAgICB9LAorCisgICAgcmVtb3ZlRGF0
YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7CisgICAgICAgIGRhdGFVc2VyLnJlbW92ZSggZWxl
bSwgbmFtZSApOworICAgIH0sCisKKyAgICAvLyBUT0RPOiBOb3cgdGhhdCBhbGwgY2FsbHMgdG8g
X2RhdGEgYW5kIF9yZW1vdmVEYXRhIGhhdmUgYmVlbiByZXBsYWNlZAorICAgIC8vIHdpdGggZGly
ZWN0IGNhbGxzIHRvIGRhdGFQcml2IG1ldGhvZHMsIHRoZXNlIGNhbiBiZSBkZXByZWNhdGVkLgor
ICAgIF9kYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHsKKyAgICAgICAgcmV0dXJu
IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgbmFtZSwgZGF0YSApOworICAgIH0sCisKKyAgICBfcmVt
b3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7CisgICAgICAgIGRhdGFQcml2LnJlbW92
ZSggZWxlbSwgbmFtZSApOworICAgIH0KK30gKTsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworICAg
IGRhdGE6IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkgeworICAgICAgICB2YXIgaSwgbmFtZSwgZGF0
YSwKKyAgICAgICAgICAgIGVsZW0gPSB0aGlzWyAwIF0sCisgICAgICAgICAgICBhdHRycyA9IGVs
ZW0gJiYgZWxlbS5hdHRyaWJ1dGVzOworCisgICAgICAgIC8vIEdldHMgYWxsIHZhbHVlcworICAg
ICAgICBpZiAoIGtleSA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgaWYgKCB0aGlzLmxl
bmd0aCApIHsKKyAgICAgICAgICAgICAgICBkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtICk7CisK
KyAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgIWRhdGFQcml2Lmdl
dCggZWxlbSwgImhhc0RhdGFBdHRycyIgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgaSA9IGF0
dHJzLmxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElFMTErCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBUaGUgYXR0cnMgZWxlbWVudHMgY2FuIGJlIG51bGwgKCMxNDg5NCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggYXR0cnNbIGkgXSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuYW1lID0gYXR0cnNbIGkgXS5uYW1lOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggbmFtZS5pbmRleE9mKCAiZGF0YS0iICkgPT09IDAgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lLnNsaWNlKCA1
ICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUF0dHIoIGVsZW0sIG5h
bWUsIGRhdGFbIG5hbWUgXSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBkYXRhUHJpdi5zZXQoIGVsZW0sICJoYXNEYXRhQXR0cnMiLCB0cnVlICk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gZGF0YTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIFNldHMgbXVsdGlwbGUgdmFsdWVzCisgICAgICAgIGlm
ICggdHlwZW9mIGtleSA9PT0gIm9iamVjdCIgKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5l
YWNoKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBkYXRhVXNlci5zZXQoIHRoaXMsIGtl
eSApOworICAgICAgICAgICAgfSApOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGFjY2Vz
cyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkgeworICAgICAgICAgICAgdmFyIGRhdGEsIGNhbWVs
S2V5OworCisgICAgICAgICAgICAvLyBUaGUgY2FsbGluZyBqUXVlcnkgb2JqZWN0IChlbGVtZW50
IG1hdGNoZXMpIGlzIG5vdCBlbXB0eQorICAgICAgICAgICAgLy8gKGFuZCB0aGVyZWZvcmUgaGFz
IGFuIGVsZW1lbnQgYXBwZWFycyBhdCB0aGlzWyAwIF0pIGFuZCB0aGUKKyAgICAgICAgICAgIC8v
IGB2YWx1ZWAgcGFyYW1ldGVyIHdhcyBub3QgdW5kZWZpbmVkLiBBbiBlbXB0eSBqUXVlcnkgb2Jq
ZWN0CisgICAgICAgICAgICAvLyB3aWxsIHJlc3VsdCBpbiBgdW5kZWZpbmVkYCBmb3IgZWxlbSA9
IHRoaXNbIDAgXSB3aGljaCB3aWxsCisgICAgICAgICAgICAvLyB0aHJvdyBhbiBleGNlcHRpb24g
aWYgYW4gYXR0ZW1wdCB0byByZWFkIGEgZGF0YSBjYWNoZSBpcyBtYWRlLgorICAgICAgICAgICAg
aWYgKCBlbGVtICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSB7CisKKyAgICAgICAgICAgICAgICAv
LyBBdHRlbXB0IHRvIGdldCBkYXRhIGZyb20gdGhlIGNhY2hlCisgICAgICAgICAgICAgICAgLy8g
d2l0aCB0aGUga2V5IGFzLWlzCisgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFVc2VyLmdldCgg
ZWxlbSwga2V5ICkgfHwKKworICAgICAgICAgICAgICAgICAgICAvLyBUcnkgdG8gZmluZCBkYXNo
ZWQga2V5IGlmIGl0IGV4aXN0cyAoZ2gtMjc3OSkKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhp
cyBpcyBmb3IgMi4yLnggb25seQorICAgICAgICAgICAgICAgICAgICBkYXRhVXNlci5nZXQoIGVs
ZW0sIGtleS5yZXBsYWNlKCBybXVsdGlEYXNoLCAiLSQmIiApLnRvTG93ZXJDYXNlKCkgKTsKKwor
ICAgICAgICAgICAgICAgIGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZGF0YTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBjYW1lbEtleSA9IGpRdWVyeS5jYW1lbENhc2UoIGtleSApOworCisgICAgICAgICAgICAgICAg
Ly8gQXR0ZW1wdCB0byBnZXQgZGF0YSBmcm9tIHRoZSBjYWNoZQorICAgICAgICAgICAgICAgIC8v
IHdpdGggdGhlIGtleSBjYW1lbGl6ZWQKKyAgICAgICAgICAgICAgICBkYXRhID0gZGF0YVVzZXIu
Z2V0KCBlbGVtLCBjYW1lbEtleSApOworICAgICAgICAgICAgICAgIGlmICggZGF0YSAhPT0gdW5k
ZWZpbmVkICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBBdHRlbXB0IHRvICJkaXNjb3ZlciIgdGhlIGRh
dGEgaW4KKyAgICAgICAgICAgICAgICAvLyBIVE1MNSBjdXN0b20gZGF0YS0qIGF0dHJzCisgICAg
ICAgICAgICAgICAgZGF0YSA9IGRhdGFBdHRyKCBlbGVtLCBjYW1lbEtleSwgdW5kZWZpbmVkICk7
CisgICAgICAgICAgICAgICAgaWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBkYXRhOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIC8vIFdlIHRyaWVkIHJlYWxseSBoYXJkLCBidXQgdGhlIGRhdGEgZG9lc24ndCBleGlzdC4K
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
IFNldCB0aGUgZGF0YS4uLgorICAgICAgICAgICAgY2FtZWxLZXkgPSBqUXVlcnkuY2FtZWxDYXNl
KCBrZXkgKTsKKyAgICAgICAgICAgIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CisKKyAgICAgICAg
ICAgICAgICAvLyBGaXJzdCwgYXR0ZW1wdCB0byBzdG9yZSBhIGNvcHkgb3IgcmVmZXJlbmNlIG9m
IGFueQorICAgICAgICAgICAgICAgIC8vIGRhdGEgdGhhdCBtaWdodCd2ZSBiZWVuIHN0b3JlIHdp
dGggYSBjYW1lbENhc2VkIGtleS4KKyAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGRhdGFVc2Vy
LmdldCggdGhpcywgY2FtZWxLZXkgKTsKKworICAgICAgICAgICAgICAgIC8vIEZvciBIVE1MNSBk
YXRhLSogYXR0cmlidXRlIGludGVyb3AsIHdlIGhhdmUgdG8KKyAgICAgICAgICAgICAgICAvLyBz
dG9yZSBwcm9wZXJ0eSBuYW1lcyB3aXRoIGRhc2hlcyBpbiBhIGNhbWVsQ2FzZSBmb3JtLgorICAg
ICAgICAgICAgICAgIC8vIFRoaXMgbWlnaHQgbm90IGFwcGx5IHRvIGFsbCBwcm9wZXJ0aWVzLi4u
KgorICAgICAgICAgICAgICAgIGRhdGFVc2VyLnNldCggdGhpcywgY2FtZWxLZXksIHZhbHVlICk7
CisKKyAgICAgICAgICAgICAgICAvLyAqLi4uIEluIHRoZSBjYXNlIG9mIHByb3BlcnRpZXMgdGhh
dCBtaWdodCBfYWN0dWFsbHlfCisgICAgICAgICAgICAgICAgLy8gaGF2ZSBkYXNoZXMsIHdlIG5l
ZWQgdG8gYWxzbyBzdG9yZSBhIGNvcHkgb2YgdGhhdAorICAgICAgICAgICAgICAgIC8vIHVuY2hh
bmdlZCBwcm9wZXJ0eS4KKyAgICAgICAgICAgICAgICBpZiAoIGtleS5pbmRleE9mKCAiLSIgKSA+
IC0xICYmIGRhdGEgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YVVz
ZXIuc2V0KCB0aGlzLCBrZXksIHZhbHVlICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfSApOworICAgICAgICB9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEsIG51
bGwsIHRydWUgKTsKKyAgICB9LAorCisgICAgcmVtb3ZlRGF0YTogZnVuY3Rpb24oIGtleSApIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBkYXRh
VXNlci5yZW1vdmUoIHRoaXMsIGtleSApOworICAgICAgICB9ICk7CisgICAgfQorfSApOworCisK
K2pRdWVyeS5leHRlbmQoIHsKKyAgICBxdWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGRhdGEg
KSB7CisgICAgICAgIHZhciBxdWV1ZTsKKworICAgICAgICBpZiAoIGVsZW0gKSB7CisgICAgICAg
ICAgICB0eXBlID0gKCB0eXBlIHx8ICJmeCIgKSArICJxdWV1ZSI7CisgICAgICAgICAgICBxdWV1
ZSA9IGRhdGFQcml2LmdldCggZWxlbSwgdHlwZSApOworCisgICAgICAgICAgICAvLyBTcGVlZCB1
cCBkZXF1ZXVlIGJ5IGdldHRpbmcgb3V0IHF1aWNrbHkgaWYgdGhpcyBpcyBqdXN0IGEgbG9va3Vw
CisgICAgICAgICAgICBpZiAoIGRhdGEgKSB7CisgICAgICAgICAgICAgICAgaWYgKCAhcXVldWUg
fHwgalF1ZXJ5LmlzQXJyYXkoIGRhdGEgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgcXVldWUg
PSBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIHR5cGUsIGpRdWVyeS5tYWtlQXJyYXkoIGRhdGEgKSAp
OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHF1ZXVlLnB1
c2goIGRhdGEgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gcXVldWUgfHwgW107CisgICAgICAgIH0KKyAgICB9LAorCisgICAgZGVxdWV1ZTog
ZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7CisgICAgICAgIHR5cGUgPSB0eXBlIHx8ICJmeCI7CisK
KyAgICAgICAgdmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCBlbGVtLCB0eXBlICksCisgICAgICAg
ICAgICBzdGFydExlbmd0aCA9IHF1ZXVlLmxlbmd0aCwKKyAgICAgICAgICAgIGZuID0gcXVldWUu
c2hpZnQoKSwKKyAgICAgICAgICAgIGhvb2tzID0galF1ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVtLCB0
eXBlICksCisgICAgICAgICAgICBuZXh0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAg
alF1ZXJ5LmRlcXVldWUoIGVsZW0sIHR5cGUgKTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAg
Ly8gSWYgdGhlIGZ4IHF1ZXVlIGlzIGRlcXVldWVkLCBhbHdheXMgcmVtb3ZlIHRoZSBwcm9ncmVz
cyBzZW50aW5lbAorICAgICAgICBpZiAoIGZuID09PSAiaW5wcm9ncmVzcyIgKSB7CisgICAgICAg
ICAgICBmbiA9IHF1ZXVlLnNoaWZ0KCk7CisgICAgICAgICAgICBzdGFydExlbmd0aC0tOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKCBmbiApIHsKKworICAgICAgICAgICAgLy8gQWRkIGEgcHJv
Z3Jlc3Mgc2VudGluZWwgdG8gcHJldmVudCB0aGUgZnggcXVldWUgZnJvbSBiZWluZworICAgICAg
ICAgICAgLy8gYXV0b21hdGljYWxseSBkZXF1ZXVlZAorICAgICAgICAgICAgaWYgKCB0eXBlID09
PSAiZngiICkgeworICAgICAgICAgICAgICAgIHF1ZXVlLnVuc2hpZnQoICJpbnByb2dyZXNzIiAp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBDbGVhciB1cCB0aGUgbGFzdCBxdWV1
ZSBzdG9wIGZ1bmN0aW9uCisgICAgICAgICAgICBkZWxldGUgaG9va3Muc3RvcDsKKyAgICAgICAg
ICAgIGZuLmNhbGwoIGVsZW0sIG5leHQsIGhvb2tzICk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoICFzdGFydExlbmd0aCAmJiBob29rcyApIHsKKyAgICAgICAgICAgIGhvb2tzLmVtcHR5LmZp
cmUoKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICAvLyBOb3QgcHVibGljIC0gZ2VuZXJhdGUg
YSBxdWV1ZUhvb2tzIG9iamVjdCwgb3IgcmV0dXJuIHRoZSBjdXJyZW50IG9uZQorICAgIF9xdWV1
ZUhvb2tzOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHsKKyAgICAgICAgdmFyIGtleSA9IHR5cGUg
KyAicXVldWVIb29rcyI7CisgICAgICAgIHJldHVybiBkYXRhUHJpdi5nZXQoIGVsZW0sIGtleSAp
IHx8IGRhdGFQcml2LmFjY2VzcyggZWxlbSwga2V5LCB7CisgICAgICAgICAgICBlbXB0eTogalF1
ZXJ5LkNhbGxiYWNrcyggIm9uY2UgbWVtb3J5IiApLmFkZCggZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICAgICAgZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBbIHR5cGUgKyAicXVldWUiLCBrZXkgXSAp
OworICAgICAgICAgICAgfSApCisgICAgICAgIH0gKTsKKyAgICB9Cit9ICk7CisKK2pRdWVyeS5m
bi5leHRlbmQoIHsKKyAgICBxdWV1ZTogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7CisgICAgICAg
IHZhciBzZXR0ZXIgPSAyOworCisgICAgICAgIGlmICggdHlwZW9mIHR5cGUgIT09ICJzdHJpbmci
ICkgeworICAgICAgICAgICAgZGF0YSA9IHR5cGU7CisgICAgICAgICAgICB0eXBlID0gImZ4IjsK
KyAgICAgICAgICAgIHNldHRlci0tOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBhcmd1bWVu
dHMubGVuZ3RoIDwgc2V0dGVyICkgeworICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5xdWV1ZSgg
dGhpc1sgMCBdLCB0eXBlICk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZGF0YSA9PT0g
dW5kZWZpbmVkID8KKyAgICAgICAgICAgIHRoaXMgOgorICAgICAgICAgICAgdGhpcy5lYWNoKCBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgcXVldWUgPSBqUXVlcnkucXVldWUoIHRo
aXMsIHR5cGUsIGRhdGEgKTsKKworICAgICAgICAgICAgICAgIC8vIEVuc3VyZSBhIGhvb2tzIGZv
ciB0aGlzIHF1ZXVlCisgICAgICAgICAgICAgICAgalF1ZXJ5Ll9xdWV1ZUhvb2tzKCB0aGlzLCB0
eXBlICk7CisKKyAgICAgICAgICAgICAgICBpZiAoIHR5cGUgPT09ICJmeCIgJiYgcXVldWVbIDAg
XSAhPT0gImlucHJvZ3Jlc3MiICkgeworICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZGVxdWV1
ZSggdGhpcywgdHlwZSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gKTsKKyAg
ICB9LAorICAgIGRlcXVldWU6IGZ1bmN0aW9uKCB0eXBlICkgeworICAgICAgICByZXR1cm4gdGhp
cy5lYWNoKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0
eXBlICk7CisgICAgICAgIH0gKTsKKyAgICB9LAorICAgIGNsZWFyUXVldWU6IGZ1bmN0aW9uKCB0
eXBlICkgeworICAgICAgICByZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSB8fCAiZngiLCBbXSApOwor
ICAgIH0sCisKKyAgICAvLyBHZXQgYSBwcm9taXNlIHJlc29sdmVkIHdoZW4gcXVldWVzIG9mIGEg
Y2VydGFpbiB0eXBlCisgICAgLy8gYXJlIGVtcHRpZWQgKGZ4IGlzIHRoZSB0eXBlIGJ5IGRlZmF1
bHQpCisgICAgcHJvbWlzZTogZnVuY3Rpb24oIHR5cGUsIG9iaiApIHsKKyAgICAgICAgdmFyIHRt
cCwKKyAgICAgICAgICAgIGNvdW50ID0gMSwKKyAgICAgICAgICAgIGRlZmVyID0galF1ZXJ5LkRl
ZmVycmVkKCksCisgICAgICAgICAgICBlbGVtZW50cyA9IHRoaXMsCisgICAgICAgICAgICBpID0g
dGhpcy5sZW5ndGgsCisgICAgICAgICAgICByZXNvbHZlID0gZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICAgICAgaWYgKCAhKCAtLWNvdW50ICkgKSB7CisgICAgICAgICAgICAgICAgICAgIGRlZmVy
LnJlc29sdmVXaXRoKCBlbGVtZW50cywgWyBlbGVtZW50cyBdICk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfTsKKworICAgICAgICBpZiAoIHR5cGVvZiB0eXBlICE9PSAic3RyaW5n
IiApIHsKKyAgICAgICAgICAgIG9iaiA9IHR5cGU7CisgICAgICAgICAgICB0eXBlID0gdW5kZWZp
bmVkOworICAgICAgICB9CisgICAgICAgIHR5cGUgPSB0eXBlIHx8ICJmeCI7CisKKyAgICAgICAg
d2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAgICB0bXAgPSBkYXRhUHJpdi5nZXQoIGVsZW1lbnRz
WyBpIF0sIHR5cGUgKyAicXVldWVIb29rcyIgKTsKKyAgICAgICAgICAgIGlmICggdG1wICYmIHRt
cC5lbXB0eSApIHsKKyAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgICAgIHRt
cC5lbXB0eS5hZGQoIHJlc29sdmUgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICByZXNvbHZlKCk7CisgICAgICAgIHJldHVybiBkZWZlci5wcm9taXNlKCBvYmogKTsKKyAgICB9
Cit9ICk7Cit2YXIgcG51bSA9ICggL1srLV0/KD86XGQqXC58KVxkKyg/OltlRV1bKy1dP1xkK3wp
LyApLnNvdXJjZTsKKwordmFyIHJjc3NOdW0gPSBuZXcgUmVnRXhwKCAiXig/OihbKy1dKT18KSgi
ICsgcG51bSArICIpKFthLXolXSopJCIsICJpIiApOworCisKK3ZhciBjc3NFeHBhbmQgPSBbICJU
b3AiLCAiUmlnaHQiLCAiQm90dG9tIiwgIkxlZnQiIF07CisKK3ZhciBpc0hpZGRlbiA9IGZ1bmN0
aW9uKCBlbGVtLCBlbCApIHsKKworICAgICAgICAvLyBpc0hpZGRlbiBtaWdodCBiZSBjYWxsZWQg
ZnJvbSBqUXVlcnkjZmlsdGVyIGZ1bmN0aW9uOworICAgICAgICAvLyBpbiB0aGF0IGNhc2UsIGVs
ZW1lbnQgd2lsbCBiZSBzZWNvbmQgYXJndW1lbnQKKyAgICAgICAgZWxlbSA9IGVsIHx8IGVsZW07
CisgICAgICAgIHJldHVybiBqUXVlcnkuY3NzKCBlbGVtLCAiZGlzcGxheSIgKSA9PT0gIm5vbmUi
IHx8CisgICAgICAgICAgICAhalF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVs
ZW0gKTsKKyAgICB9OworCisKKworZnVuY3Rpb24gYWRqdXN0Q1NTKCBlbGVtLCBwcm9wLCB2YWx1
ZVBhcnRzLCB0d2VlbiApIHsKKyAgICB2YXIgYWRqdXN0ZWQsCisgICAgICAgIHNjYWxlID0gMSwK
KyAgICAgICAgbWF4SXRlcmF0aW9ucyA9IDIwLAorICAgICAgICBjdXJyZW50VmFsdWUgPSB0d2Vl
biA/CisgICAgICAgICAgICBmdW5jdGlvbigpIHsgcmV0dXJuIHR3ZWVuLmN1cigpOyB9IDoKKyAg
ICAgICAgICAgIGZ1bmN0aW9uKCkgeyByZXR1cm4galF1ZXJ5LmNzcyggZWxlbSwgcHJvcCwgIiIg
KTsgfSwKKyAgICAgICAgaW5pdGlhbCA9IGN1cnJlbnRWYWx1ZSgpLAorICAgICAgICB1bml0ID0g
dmFsdWVQYXJ0cyAmJiB2YWx1ZVBhcnRzWyAzIF0gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9w
IF0gPyAiIiA6ICJweCIgKSwKKworICAgICAgICAvLyBTdGFydGluZyB2YWx1ZSBjb21wdXRhdGlv
biBpcyByZXF1aXJlZCBmb3IgcG90ZW50aWFsIHVuaXQgbWlzbWF0Y2hlcworICAgICAgICBpbml0
aWFsSW5Vbml0ID0gKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gfHwgdW5pdCAhPT0gInB4IiAm
JiAraW5pdGlhbCApICYmCisgICAgICAgICAgICByY3NzTnVtLmV4ZWMoIGpRdWVyeS5jc3MoIGVs
ZW0sIHByb3AgKSApOworCisgICAgaWYgKCBpbml0aWFsSW5Vbml0ICYmIGluaXRpYWxJblVuaXRb
IDMgXSAhPT0gdW5pdCApIHsKKworICAgICAgICAvLyBUcnVzdCB1bml0cyByZXBvcnRlZCBieSBq
UXVlcnkuY3NzCisgICAgICAgIHVuaXQgPSB1bml0IHx8IGluaXRpYWxJblVuaXRbIDMgXTsKKwor
ICAgICAgICAvLyBNYWtlIHN1cmUgd2UgdXBkYXRlIHRoZSB0d2VlbiBwcm9wZXJ0aWVzIGxhdGVy
IG9uCisgICAgICAgIHZhbHVlUGFydHMgPSB2YWx1ZVBhcnRzIHx8IFtdOworCisgICAgICAgIC8v
IEl0ZXJhdGl2ZWx5IGFwcHJveGltYXRlIGZyb20gYSBub256ZXJvIHN0YXJ0aW5nIHBvaW50Cisg
ICAgICAgIGluaXRpYWxJblVuaXQgPSAraW5pdGlhbCB8fCAxOworCisgICAgICAgIGRvIHsKKwor
ICAgICAgICAgICAgLy8gSWYgcHJldmlvdXMgaXRlcmF0aW9uIHplcm9lZCBvdXQsIGRvdWJsZSB1
bnRpbCB3ZSBnZXQgKnNvbWV0aGluZyouCisgICAgICAgICAgICAvLyBVc2Ugc3RyaW5nIGZvciBk
b3VibGluZyBzbyB3ZSBkb24ndCBhY2NpZGVudGFsbHkgc2VlIHNjYWxlIGFzIHVuY2hhbmdlZCBi
ZWxvdworICAgICAgICAgICAgc2NhbGUgPSBzY2FsZSB8fCAiLjUiOworCisgICAgICAgICAgICAv
LyBBZGp1c3QgYW5kIGFwcGx5CisgICAgICAgICAgICBpbml0aWFsSW5Vbml0ID0gaW5pdGlhbElu
VW5pdCAvIHNjYWxlOworICAgICAgICAgICAgalF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBpbml0
aWFsSW5Vbml0ICsgdW5pdCApOworCisgICAgICAgIC8vIFVwZGF0ZSBzY2FsZSwgdG9sZXJhdGlu
ZyB6ZXJvIG9yIE5hTiBmcm9tIHR3ZWVuLmN1cigpCisgICAgICAgIC8vIEJyZWFrIHRoZSBsb29w
IGlmIHNjYWxlIGlzIHVuY2hhbmdlZCBvciBwZXJmZWN0LCBvciBpZiB3ZSd2ZSBqdXN0IGhhZCBl
bm91Z2guCisgICAgICAgIH0gd2hpbGUgKAorICAgICAgICAgICAgc2NhbGUgIT09ICggc2NhbGUg
PSBjdXJyZW50VmFsdWUoKSAvIGluaXRpYWwgKSAmJiBzY2FsZSAhPT0gMSAmJiAtLW1heEl0ZXJh
dGlvbnMKKyAgICAgICAgKTsKKyAgICB9CisKKyAgICBpZiAoIHZhbHVlUGFydHMgKSB7CisgICAg
ICAgIGluaXRpYWxJblVuaXQgPSAraW5pdGlhbEluVW5pdCB8fCAraW5pdGlhbCB8fCAwOworCisg
ICAgICAgIC8vIEFwcGx5IHJlbGF0aXZlIG9mZnNldCAoKz0vLT0pIGlmIHNwZWNpZmllZAorICAg
ICAgICBhZGp1c3RlZCA9IHZhbHVlUGFydHNbIDEgXSA/CisgICAgICAgICAgICBpbml0aWFsSW5V
bml0ICsgKCB2YWx1ZVBhcnRzWyAxIF0gKyAxICkgKiB2YWx1ZVBhcnRzWyAyIF0gOgorICAgICAg
ICAgICAgK3ZhbHVlUGFydHNbIDIgXTsKKyAgICAgICAgaWYgKCB0d2VlbiApIHsKKyAgICAgICAg
ICAgIHR3ZWVuLnVuaXQgPSB1bml0OworICAgICAgICAgICAgdHdlZW4uc3RhcnQgPSBpbml0aWFs
SW5Vbml0OworICAgICAgICAgICAgdHdlZW4uZW5kID0gYWRqdXN0ZWQ7CisgICAgICAgIH0KKyAg
ICB9CisgICAgcmV0dXJuIGFkanVzdGVkOworfQordmFyIHJjaGVja2FibGVUeXBlID0gKCAvXig/
OmNoZWNrYm94fHJhZGlvKSQvaSApOworCit2YXIgcnRhZ05hbWUgPSAoIC88KFtcdzotXSspLyAp
OworCit2YXIgcnNjcmlwdFR5cGUgPSAoIC9eJHxcLyg/OmphdmF8ZWNtYSlzY3JpcHQvaSApOwor
CisKKworLy8gV2UgaGF2ZSB0byBjbG9zZSB0aGVzZSB0YWdzIHRvIHN1cHBvcnQgWEhUTUwgKCMx
MzIwMCkKK3ZhciB3cmFwTWFwID0geworCisgICAgLy8gU3VwcG9ydDogSUU5CisgICAgb3B0aW9u
OiBbIDEsICI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+IiwgIjwvc2VsZWN0PiIgXSwKKwor
ICAgIC8vIFhIVE1MIHBhcnNlcnMgZG8gbm90IG1hZ2ljYWxseSBpbnNlcnQgZWxlbWVudHMgaW4g
dGhlCisgICAgLy8gc2FtZSB3YXkgdGhhdCB0YWcgc291cCBwYXJzZXJzIGRvLiBTbyB3ZSBjYW5u
b3Qgc2hvcnRlbgorICAgIC8vIHRoaXMgYnkgb21pdHRpbmcgPHRib2R5PiBvciBvdGhlciByZXF1
aXJlZCBlbGVtZW50cy4KKyAgICB0aGVhZDogWyAxLCAiPHRhYmxlPiIsICI8L3RhYmxlPiIgXSwK
KyAgICBjb2w6IFsgMiwgIjx0YWJsZT48Y29sZ3JvdXA+IiwgIjwvY29sZ3JvdXA+PC90YWJsZT4i
IF0sCisgICAgdHI6IFsgMiwgIjx0YWJsZT48dGJvZHk+IiwgIjwvdGJvZHk+PC90YWJsZT4iIF0s
CisgICAgdGQ6IFsgMywgIjx0YWJsZT48dGJvZHk+PHRyPiIsICI8L3RyPjwvdGJvZHk+PC90YWJs
ZT4iIF0sCisKKyAgICBfZGVmYXVsdDogWyAwLCAiIiwgIiIgXQorfTsKKworLy8gU3VwcG9ydDog
SUU5Cit3cmFwTWFwLm9wdGdyb3VwID0gd3JhcE1hcC5vcHRpb247CisKK3dyYXBNYXAudGJvZHkg
PSB3cmFwTWFwLnRmb290ID0gd3JhcE1hcC5jb2xncm91cCA9IHdyYXBNYXAuY2FwdGlvbiA9IHdy
YXBNYXAudGhlYWQ7Cit3cmFwTWFwLnRoID0gd3JhcE1hcC50ZDsKKworCitmdW5jdGlvbiBnZXRB
bGwoIGNvbnRleHQsIHRhZyApIHsKKworICAgIC8vIFN1cHBvcnQ6IElFOS0xMSsKKyAgICAvLyBV
c2UgdHlwZW9mIHRvIGF2b2lkIHplcm8tYXJndW1lbnQgbWV0aG9kIGludm9jYXRpb24gb24gaG9z
dCBvYmplY3RzICgjMTUxNTEpCisgICAgdmFyIHJldCA9IHR5cGVvZiBjb250ZXh0LmdldEVsZW1l
bnRzQnlUYWdOYW1lICE9PSAidW5kZWZpbmVkIiA/CisgICAgICAgICAgICBjb250ZXh0LmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCB0YWcgfHwgIioiICkgOgorICAgICAgICAgICAgdHlwZW9mIGNvbnRl
eHQucXVlcnlTZWxlY3RvckFsbCAhPT0gInVuZGVmaW5lZCIgPworICAgICAgICAgICAgICAgIGNv
bnRleHQucXVlcnlTZWxlY3RvckFsbCggdGFnIHx8ICIqIiApIDoKKyAgICAgICAgICAgIFtdOwor
CisgICAgcmV0dXJuIHRhZyA9PT0gdW5kZWZpbmVkIHx8IHRhZyAmJiBqUXVlcnkubm9kZU5hbWUo
IGNvbnRleHQsIHRhZyApID8KKyAgICAgICAgalF1ZXJ5Lm1lcmdlKCBbIGNvbnRleHQgXSwgcmV0
ICkgOgorICAgICAgICByZXQ7Cit9CisKKworLy8gTWFyayBzY3JpcHRzIGFzIGhhdmluZyBhbHJl
YWR5IGJlZW4gZXZhbHVhdGVkCitmdW5jdGlvbiBzZXRHbG9iYWxFdmFsKCBlbGVtcywgcmVmRWxl
bWVudHMgKSB7CisgICAgdmFyIGkgPSAwLAorICAgICAgICBsID0gZWxlbXMubGVuZ3RoOworCisg
ICAgZm9yICggOyBpIDwgbDsgaSsrICkgeworICAgICAgICBkYXRhUHJpdi5zZXQoCisgICAgICAg
ICAgICBlbGVtc1sgaSBdLAorICAgICAgICAgICAgImdsb2JhbEV2YWwiLAorICAgICAgICAgICAg
IXJlZkVsZW1lbnRzIHx8IGRhdGFQcml2LmdldCggcmVmRWxlbWVudHNbIGkgXSwgImdsb2JhbEV2
YWwiICkKKyAgICAgICAgKTsKKyAgICB9Cit9CisKKwordmFyIHJodG1sID0gLzx8JiM/XHcrOy87
CisKK2Z1bmN0aW9uIGJ1aWxkRnJhZ21lbnQoIGVsZW1zLCBjb250ZXh0LCBzY3JpcHRzLCBzZWxl
Y3Rpb24sIGlnbm9yZWQgKSB7CisgICAgdmFyIGVsZW0sIHRtcCwgdGFnLCB3cmFwLCBjb250YWlu
cywgaiwKKyAgICAgICAgZnJhZ21lbnQgPSBjb250ZXh0LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQo
KSwKKyAgICAgICAgbm9kZXMgPSBbXSwKKyAgICAgICAgaSA9IDAsCisgICAgICAgIGwgPSBlbGVt
cy5sZW5ndGg7CisKKyAgICBmb3IgKCA7IGkgPCBsOyBpKysgKSB7CisgICAgICAgIGVsZW0gPSBl
bGVtc1sgaSBdOworCisgICAgICAgIGlmICggZWxlbSB8fCBlbGVtID09PSAwICkgeworCisgICAg
ICAgICAgICAvLyBBZGQgbm9kZXMgZGlyZWN0bHkKKyAgICAgICAgICAgIGlmICggalF1ZXJ5LnR5
cGUoIGVsZW0gKSA9PT0gIm9iamVjdCIgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBTdXBwb3J0
OiBBbmRyb2lkPDQuMSwgUGhhbnRvbUpTPDIKKyAgICAgICAgICAgICAgICAvLyBwdXNoLmFwcGx5
KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0CisgICAgICAgICAgICAgICAg
alF1ZXJ5Lm1lcmdlKCBub2RlcywgZWxlbS5ub2RlVHlwZSA/IFsgZWxlbSBdIDogZWxlbSApOwor
CisgICAgICAgICAgICAvLyBDb252ZXJ0IG5vbi1odG1sIGludG8gYSB0ZXh0IG5vZGUKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoICFyaHRtbC50ZXN0KCBlbGVtICkgKSB7CisgICAgICAgICAgICAg
ICAgbm9kZXMucHVzaCggY29udGV4dC5jcmVhdGVUZXh0Tm9kZSggZWxlbSApICk7CisKKyAgICAg
ICAgICAgIC8vIENvbnZlcnQgaHRtbCBpbnRvIERPTSBub2RlcworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICB0bXAgPSB0bXAgfHwgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGNv
bnRleHQuY3JlYXRlRWxlbWVudCggImRpdiIgKSApOworCisgICAgICAgICAgICAgICAgLy8gRGVz
ZXJpYWxpemUgYSBzdGFuZGFyZCByZXByZXNlbnRhdGlvbgorICAgICAgICAgICAgICAgIHRhZyA9
ICggcnRhZ05hbWUuZXhlYyggZWxlbSApIHx8IFsgIiIsICIiIF0gKVsgMSBdLnRvTG93ZXJDYXNl
KCk7CisgICAgICAgICAgICAgICAgd3JhcCA9IHdyYXBNYXBbIHRhZyBdIHx8IHdyYXBNYXAuX2Rl
ZmF1bHQ7CisgICAgICAgICAgICAgICAgdG1wLmlubmVySFRNTCA9IHdyYXBbIDEgXSArIGpRdWVy
eS5odG1sUHJlZmlsdGVyKCBlbGVtICkgKyB3cmFwWyAyIF07CisKKyAgICAgICAgICAgICAgICAv
LyBEZXNjZW5kIHRocm91Z2ggd3JhcHBlcnMgdG8gdGhlIHJpZ2h0IGNvbnRlbnQKKyAgICAgICAg
ICAgICAgICBqID0gd3JhcFsgMCBdOworICAgICAgICAgICAgICAgIHdoaWxlICggai0tICkgewor
ICAgICAgICAgICAgICAgICAgICB0bXAgPSB0bXAubGFzdENoaWxkOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4xLCBQaGFudG9tSlM8
MgorICAgICAgICAgICAgICAgIC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24g
YW5jaWVudCBXZWJLaXQKKyAgICAgICAgICAgICAgICBqUXVlcnkubWVyZ2UoIG5vZGVzLCB0bXAu
Y2hpbGROb2RlcyApOworCisgICAgICAgICAgICAgICAgLy8gUmVtZW1iZXIgdGhlIHRvcC1sZXZl
bCBjb250YWluZXIKKyAgICAgICAgICAgICAgICB0bXAgPSBmcmFnbWVudC5maXJzdENoaWxkOwor
CisgICAgICAgICAgICAgICAgLy8gRW5zdXJlIHRoZSBjcmVhdGVkIG5vZGVzIGFyZSBvcnBoYW5l
ZCAoIzEyMzkyKQorICAgICAgICAgICAgICAgIHRtcC50ZXh0Q29udGVudCA9ICIiOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gUmVtb3ZlIHdyYXBwZXIgZnJvbSBm
cmFnbWVudAorICAgIGZyYWdtZW50LnRleHRDb250ZW50ID0gIiI7CisKKyAgICBpID0gMDsKKyAg
ICB3aGlsZSAoICggZWxlbSA9IG5vZGVzWyBpKysgXSApICkgeworCisgICAgICAgIC8vIFNraXAg
ZWxlbWVudHMgYWxyZWFkeSBpbiB0aGUgY29udGV4dCBjb2xsZWN0aW9uICh0cmFjLTQwODcpCisg
ICAgICAgIGlmICggc2VsZWN0aW9uICYmIGpRdWVyeS5pbkFycmF5KCBlbGVtLCBzZWxlY3Rpb24g
KSA+IC0xICkgeworICAgICAgICAgICAgaWYgKCBpZ25vcmVkICkgeworICAgICAgICAgICAgICAg
IGlnbm9yZWQucHVzaCggZWxlbSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIH0KKworICAgICAgICBjb250YWlucyA9IGpRdWVyeS5jb250YWlucyggZWxl
bS5vd25lckRvY3VtZW50LCBlbGVtICk7CisKKyAgICAgICAgLy8gQXBwZW5kIHRvIGZyYWdtZW50
CisgICAgICAgIHRtcCA9IGdldEFsbCggZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGVsZW0gKSwgInNj
cmlwdCIgKTsKKworICAgICAgICAvLyBQcmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5
CisgICAgICAgIGlmICggY29udGFpbnMgKSB7CisgICAgICAgICAgICBzZXRHbG9iYWxFdmFsKCB0
bXAgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENhcHR1cmUgZXhlY3V0YWJsZXMKKyAgICAg
ICAgaWYgKCBzY3JpcHRzICkgeworICAgICAgICAgICAgaiA9IDA7CisgICAgICAgICAgICB3aGls
ZSAoICggZWxlbSA9IHRtcFsgaisrIF0gKSApIHsKKyAgICAgICAgICAgICAgICBpZiAoIHJzY3Jp
cHRUeXBlLnRlc3QoIGVsZW0udHlwZSB8fCAiIiApICkgeworICAgICAgICAgICAgICAgICAgICBz
Y3JpcHRzLnB1c2goIGVsZW0gKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZnJhZ21lbnQ7Cit9CisKKworKCBmdW5jdGlv
bigpIHsKKyAgICB2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50
KCksCisgICAgICAgIGRpdiA9IGZyYWdtZW50LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCAiZGl2IiApICksCisgICAgICAgIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCggImlucHV0IiApOworCisgICAgLy8gU3VwcG9ydDogQW5kcm9pZCA0LjAtNC4zLCBTYWZhcmk8
PTUuMQorICAgIC8vIENoZWNrIHN0YXRlIGxvc3QgaWYgdGhlIG5hbWUgaXMgc2V0ICgjMTEyMTcp
CisgICAgLy8gU3VwcG9ydDogV2luZG93cyBXZWIgQXBwcyAoV1dBKQorICAgIC8vIGBuYW1lYCBh
bmQgYHR5cGVgIG11c3QgdXNlIC5zZXRBdHRyaWJ1dGUgZm9yIFdXQSAoIzE0OTAxKQorICAgIGlu
cHV0LnNldEF0dHJpYnV0ZSggInR5cGUiLCAicmFkaW8iICk7CisgICAgaW5wdXQuc2V0QXR0cmli
dXRlKCAiY2hlY2tlZCIsICJjaGVja2VkIiApOworICAgIGlucHV0LnNldEF0dHJpYnV0ZSggIm5h
bWUiLCAidCIgKTsKKworICAgIGRpdi5hcHBlbmRDaGlsZCggaW5wdXQgKTsKKworICAgIC8vIFN1
cHBvcnQ6IFNhZmFyaTw9NS4xLCBBbmRyb2lkPDQuMgorICAgIC8vIE9sZGVyIFdlYktpdCBkb2Vz
bid0IGNsb25lIGNoZWNrZWQgc3RhdGUgY29ycmVjdGx5IGluIGZyYWdtZW50cworICAgIHN1cHBv
cnQuY2hlY2tDbG9uZSA9IGRpdi5jbG9uZU5vZGUoIHRydWUgKS5jbG9uZU5vZGUoIHRydWUgKS5s
YXN0Q2hpbGQuY2hlY2tlZDsKKworICAgIC8vIFN1cHBvcnQ6IElFPD0xMSsKKyAgICAvLyBNYWtl
IHN1cmUgdGV4dGFyZWEgKGFuZCBjaGVja2JveCkgZGVmYXVsdFZhbHVlIGlzIHByb3Blcmx5IGNs
b25lZAorICAgIGRpdi5pbm5lckhUTUwgPSAiPHRleHRhcmVhPng8L3RleHRhcmVhPiI7CisgICAg
c3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCA9ICEhZGl2LmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGls
ZC5kZWZhdWx0VmFsdWU7Cit9ICkoKTsKKworCit2YXIKKyAgICBya2V5RXZlbnQgPSAvXmtleS8s
CisgICAgcm1vdXNlRXZlbnQgPSAvXig/Om1vdXNlfHBvaW50ZXJ8Y29udGV4dG1lbnV8ZHJhZ3xk
cm9wKXxjbGljay8sCisgICAgcnR5cGVuYW1lc3BhY2UgPSAvXihbXi5dKikoPzpcLiguKyl8KS87
CisKK2Z1bmN0aW9uIHJldHVyblRydWUoKSB7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Z1bmN0
aW9uIHJldHVybkZhbHNlKCkgeworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gU3VwcG9ydDog
SUU5CisvLyBTZWUgIzEzMzkzIGZvciBtb3JlIGluZm8KK2Z1bmN0aW9uIHNhZmVBY3RpdmVFbGVt
ZW50KCkgeworICAgIHRyeSB7CisgICAgICAgIHJldHVybiBkb2N1bWVudC5hY3RpdmVFbGVtZW50
OworICAgIH0gY2F0Y2ggKCBlcnIgKSB7IH0KK30KKworZnVuY3Rpb24gb24oIGVsZW0sIHR5cGVz
LCBzZWxlY3RvciwgZGF0YSwgZm4sIG9uZSApIHsKKyAgICB2YXIgb3JpZ0ZuLCB0eXBlOworCisg
ICAgLy8gVHlwZXMgY2FuIGJlIGEgbWFwIG9mIHR5cGVzL2hhbmRsZXJzCisgICAgaWYgKCB0eXBl
b2YgdHlwZXMgPT09ICJvYmplY3QiICkgeworCisgICAgICAgIC8vICggdHlwZXMtT2JqZWN0LCBz
ZWxlY3RvciwgZGF0YSApCisgICAgICAgIGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSAic3RyaW5n
IiApIHsKKworICAgICAgICAgICAgLy8gKCB0eXBlcy1PYmplY3QsIGRhdGEgKQorICAgICAgICAg
ICAgZGF0YSA9IGRhdGEgfHwgc2VsZWN0b3I7CisgICAgICAgICAgICBzZWxlY3RvciA9IHVuZGVm
aW5lZDsKKyAgICAgICAgfQorICAgICAgICBmb3IgKCB0eXBlIGluIHR5cGVzICkgeworICAgICAg
ICAgICAgb24oIGVsZW0sIHR5cGUsIHNlbGVjdG9yLCBkYXRhLCB0eXBlc1sgdHlwZSBdLCBvbmUg
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZWxlbTsKKyAgICB9CisKKyAgICBpZiAoIGRh
dGEgPT0gbnVsbCAmJiBmbiA9PSBudWxsICkgeworCisgICAgICAgIC8vICggdHlwZXMsIGZuICkK
KyAgICAgICAgZm4gPSBzZWxlY3RvcjsKKyAgICAgICAgZGF0YSA9IHNlbGVjdG9yID0gdW5kZWZp
bmVkOworICAgIH0gZWxzZSBpZiAoIGZuID09IG51bGwgKSB7CisgICAgICAgIGlmICggdHlwZW9m
IHNlbGVjdG9yID09PSAic3RyaW5nIiApIHsKKworICAgICAgICAgICAgLy8gKCB0eXBlcywgc2Vs
ZWN0b3IsIGZuICkKKyAgICAgICAgICAgIGZuID0gZGF0YTsKKyAgICAgICAgICAgIGRhdGEgPSB1
bmRlZmluZWQ7CisgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgIC8vICggdHlwZXMsIGRh
dGEsIGZuICkKKyAgICAgICAgICAgIGZuID0gZGF0YTsKKyAgICAgICAgICAgIGRhdGEgPSBzZWxl
Y3RvcjsKKyAgICAgICAgICAgIHNlbGVjdG9yID0gdW5kZWZpbmVkOworICAgICAgICB9CisgICAg
fQorICAgIGlmICggZm4gPT09IGZhbHNlICkgeworICAgICAgICBmbiA9IHJldHVybkZhbHNlOwor
ICAgIH0gZWxzZSBpZiAoICFmbiApIHsKKyAgICAgICAgcmV0dXJuIGVsZW07CisgICAgfQorCisg
ICAgaWYgKCBvbmUgPT09IDEgKSB7CisgICAgICAgIG9yaWdGbiA9IGZuOworICAgICAgICBmbiA9
IGZ1bmN0aW9uKCBldmVudCApIHsKKworICAgICAgICAgICAgLy8gQ2FuIHVzZSBhbiBlbXB0eSBz
ZXQsIHNpbmNlIGV2ZW50IGNvbnRhaW5zIHRoZSBpbmZvCisgICAgICAgICAgICBqUXVlcnkoKS5v
ZmYoIGV2ZW50ICk7CisgICAgICAgICAgICByZXR1cm4gb3JpZ0ZuLmFwcGx5KCB0aGlzLCBhcmd1
bWVudHMgKTsKKyAgICAgICAgfTsKKworICAgICAgICAvLyBVc2Ugc2FtZSBndWlkIHNvIGNhbGxl
ciBjYW4gcmVtb3ZlIHVzaW5nIG9yaWdGbgorICAgICAgICBmbi5ndWlkID0gb3JpZ0ZuLmd1aWQg
fHwgKCBvcmlnRm4uZ3VpZCA9IGpRdWVyeS5ndWlkKysgKTsKKyAgICB9CisgICAgcmV0dXJuIGVs
ZW0uZWFjaCggZnVuY3Rpb24oKSB7CisgICAgICAgIGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsIHR5
cGVzLCBmbiwgZGF0YSwgc2VsZWN0b3IgKTsKKyAgICB9ICk7Cit9CisKKy8qCisgKiBIZWxwZXIg
ZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBldmVudHMgLS0gbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBp
bnRlcmZhY2UuCisgKiBQcm9wcyB0byBEZWFuIEVkd2FyZHMnIGFkZEV2ZW50IGxpYnJhcnkgZm9y
IG1hbnkgb2YgdGhlIGlkZWFzLgorICovCitqUXVlcnkuZXZlbnQgPSB7CisKKyAgICBnbG9iYWw6
IHt9LAorCisgICAgYWRkOiBmdW5jdGlvbiggZWxlbSwgdHlwZXMsIGhhbmRsZXIsIGRhdGEsIHNl
bGVjdG9yICkgeworCisgICAgICAgIHZhciBoYW5kbGVPYmpJbiwgZXZlbnRIYW5kbGUsIHRtcCwK
KyAgICAgICAgICAgIGV2ZW50cywgdCwgaGFuZGxlT2JqLAorICAgICAgICAgICAgc3BlY2lhbCwg
aGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBlLAorICAgICAgICAgICAgZWxlbURh
dGEgPSBkYXRhUHJpdi5nZXQoIGVsZW0gKTsKKworICAgICAgICAvLyBEb24ndCBhdHRhY2ggZXZl
bnRzIHRvIG5vRGF0YSBvciB0ZXh0L2NvbW1lbnQgbm9kZXMgKGJ1dCBhbGxvdyBwbGFpbiBvYmpl
Y3RzKQorICAgICAgICBpZiAoICFlbGVtRGF0YSApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIENhbGxlciBjYW4gcGFzcyBpbiBhbiBvYmplY3Qgb2YgY3Vz
dG9tIGRhdGEgaW4gbGlldSBvZiB0aGUgaGFuZGxlcgorICAgICAgICBpZiAoIGhhbmRsZXIuaGFu
ZGxlciApIHsKKyAgICAgICAgICAgIGhhbmRsZU9iakluID0gaGFuZGxlcjsKKyAgICAgICAgICAg
IGhhbmRsZXIgPSBoYW5kbGVPYmpJbi5oYW5kbGVyOworICAgICAgICAgICAgc2VsZWN0b3IgPSBo
YW5kbGVPYmpJbi5zZWxlY3RvcjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE1ha2Ugc3VyZSB0
aGF0IHRoZSBoYW5kbGVyIGhhcyBhIHVuaXF1ZSBJRCwgdXNlZCB0byBmaW5kL3JlbW92ZSBpdCBs
YXRlcgorICAgICAgICBpZiAoICFoYW5kbGVyLmd1aWQgKSB7CisgICAgICAgICAgICBoYW5kbGVy
Lmd1aWQgPSBqUXVlcnkuZ3VpZCsrOworICAgICAgICB9CisKKyAgICAgICAgLy8gSW5pdCB0aGUg
ZWxlbWVudCdzIGV2ZW50IHN0cnVjdHVyZSBhbmQgbWFpbiBoYW5kbGVyLCBpZiB0aGlzIGlzIHRo
ZSBmaXJzdAorICAgICAgICBpZiAoICEoIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyApICkgewor
ICAgICAgICAgICAgZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzID0ge307CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKCAhKCBldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZSApICkgeworICAgICAg
ICAgICAgZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgPSBmdW5jdGlvbiggZSApIHsKKwor
ICAgICAgICAgICAgICAgIC8vIERpc2NhcmQgdGhlIHNlY29uZCBldmVudCBvZiBhIGpRdWVyeS5l
dmVudC50cmlnZ2VyKCkgYW5kCisgICAgICAgICAgICAgICAgLy8gd2hlbiBhbiBldmVudCBpcyBj
YWxsZWQgYWZ0ZXIgYSBwYWdlIGhhcyB1bmxvYWRlZAorICAgICAgICAgICAgICAgIHJldHVybiB0
eXBlb2YgalF1ZXJ5ICE9PSAidW5kZWZpbmVkIiAmJiBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICE9
PSBlLnR5cGUgPworICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQuZGlzcGF0Y2guYXBw
bHkoIGVsZW0sIGFyZ3VtZW50cyApIDogdW5kZWZpbmVkOworICAgICAgICAgICAgfTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIEhhbmRsZSBtdWx0aXBsZSBldmVudHMgc2VwYXJhdGVkIGJ5IGEg
c3BhY2UKKyAgICAgICAgdHlwZXMgPSAoIHR5cGVzIHx8ICIiICkubWF0Y2goIHJub3R3aGl0ZSAp
IHx8IFsgIiIgXTsKKyAgICAgICAgdCA9IHR5cGVzLmxlbmd0aDsKKyAgICAgICAgd2hpbGUgKCB0
LS0gKSB7CisgICAgICAgICAgICB0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1sgdCBd
ICkgfHwgW107CisgICAgICAgICAgICB0eXBlID0gb3JpZ1R5cGUgPSB0bXBbIDEgXTsKKyAgICAg
ICAgICAgIG5hbWVzcGFjZXMgPSAoIHRtcFsgMiBdIHx8ICIiICkuc3BsaXQoICIuIiApLnNvcnQo
KTsKKworICAgICAgICAgICAgLy8gVGhlcmUgKm11c3QqIGJlIGEgdHlwZSwgbm8gYXR0YWNoaW5n
IG5hbWVzcGFjZS1vbmx5IGhhbmRsZXJzCisgICAgICAgICAgICBpZiAoICF0eXBlICkgeworICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBJ
ZiBldmVudCBjaGFuZ2VzIGl0cyB0eXBlLCB1c2UgdGhlIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMg
Zm9yIHRoZSBjaGFuZ2VkIHR5cGUKKyAgICAgICAgICAgIHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQu
c3BlY2lhbFsgdHlwZSBdIHx8IHt9OworCisgICAgICAgICAgICAvLyBJZiBzZWxlY3RvciBkZWZp
bmVkLCBkZXRlcm1pbmUgc3BlY2lhbCBldmVudCBhcGkgdHlwZSwgb3RoZXJ3aXNlIGdpdmVuIHR5
cGUKKyAgICAgICAgICAgIHR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUg
OiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTsKKworICAgICAgICAgICAgLy8gVXBkYXRlIHNw
ZWNpYWwgYmFzZWQgb24gbmV3bHkgcmVzZXQgdHlwZQorICAgICAgICAgICAgc3BlY2lhbCA9IGpR
dWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307CisKKyAgICAgICAgICAgIC8vIGhhbmRs
ZU9iaiBpcyBwYXNzZWQgdG8gYWxsIGV2ZW50IGhhbmRsZXJzCisgICAgICAgICAgICBoYW5kbGVP
YmogPSBqUXVlcnkuZXh0ZW5kKCB7CisgICAgICAgICAgICAgICAgdHlwZTogdHlwZSwKKyAgICAg
ICAgICAgICAgICBvcmlnVHlwZTogb3JpZ1R5cGUsCisgICAgICAgICAgICAgICAgZGF0YTogZGF0
YSwKKyAgICAgICAgICAgICAgICBoYW5kbGVyOiBoYW5kbGVyLAorICAgICAgICAgICAgICAgIGd1
aWQ6IGhhbmRsZXIuZ3VpZCwKKyAgICAgICAgICAgICAgICBzZWxlY3Rvcjogc2VsZWN0b3IsCisg
ICAgICAgICAgICAgICAgbmVlZHNDb250ZXh0OiBzZWxlY3RvciAmJiBqUXVlcnkuZXhwci5tYXRj
aC5uZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSwKKyAgICAgICAgICAgICAgICBuYW1lc3Bh
Y2U6IG5hbWVzcGFjZXMuam9pbiggIi4iICkKKyAgICAgICAgICAgIH0sIGhhbmRsZU9iakluICk7
CisKKyAgICAgICAgICAgIC8vIEluaXQgdGhlIGV2ZW50IGhhbmRsZXIgcXVldWUgaWYgd2UncmUg
dGhlIGZpcnN0CisgICAgICAgICAgICBpZiAoICEoIGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0g
KSApIHsKKyAgICAgICAgICAgICAgICBoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdID0gW107Cisg
ICAgICAgICAgICAgICAgaGFuZGxlcnMuZGVsZWdhdGVDb3VudCA9IDA7CisKKyAgICAgICAgICAg
ICAgICAvLyBPbmx5IHVzZSBhZGRFdmVudExpc3RlbmVyIGlmIHRoZSBzcGVjaWFsIGV2ZW50cyBo
YW5kbGVyIHJldHVybnMgZmFsc2UKKyAgICAgICAgICAgICAgICBpZiAoICFzcGVjaWFsLnNldHVw
IHx8CisgICAgICAgICAgICAgICAgICAgIHNwZWNpYWwuc2V0dXAuY2FsbCggZWxlbSwgZGF0YSwg
bmFtZXNwYWNlcywgZXZlbnRIYW5kbGUgKSA9PT0gZmFsc2UgKSB7CisKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCBlbGVtLmFkZEV2ZW50TGlzdGVuZXIgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBlbGVtLmFkZEV2ZW50TGlzdGVuZXIoIHR5cGUsIGV2ZW50SGFuZGxlICk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmICggc3BlY2lhbC5hZGQgKSB7CisgICAgICAgICAgICAgICAgc3BlY2lhbC5hZGQu
Y2FsbCggZWxlbSwgaGFuZGxlT2JqICk7CisKKyAgICAgICAgICAgICAgICBpZiAoICFoYW5kbGVP
YmouaGFuZGxlci5ndWlkICkgeworICAgICAgICAgICAgICAgICAgICBoYW5kbGVPYmouaGFuZGxl
ci5ndWlkID0gaGFuZGxlci5ndWlkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gQWRkIHRvIHRoZSBlbGVtZW50J3MgaGFuZGxlciBsaXN0LCBkZWxl
Z2F0ZXMgaW4gZnJvbnQKKyAgICAgICAgICAgIGlmICggc2VsZWN0b3IgKSB7CisgICAgICAgICAg
ICAgICAgaGFuZGxlcnMuc3BsaWNlKCBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50KyssIDAsIGhhbmRs
ZU9iaiApOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBoYW5kbGVycy5w
dXNoKCBoYW5kbGVPYmogKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gS2VlcCB0
cmFjayBvZiB3aGljaCBldmVudHMgaGF2ZSBldmVyIGJlZW4gdXNlZCwgZm9yIGV2ZW50IG9wdGlt
aXphdGlvbgorICAgICAgICAgICAgalF1ZXJ5LmV2ZW50Lmdsb2JhbFsgdHlwZSBdID0gdHJ1ZTsK
KyAgICAgICAgfQorCisgICAgfSwKKworICAgIC8vIERldGFjaCBhbiBldmVudCBvciBzZXQgb2Yg
ZXZlbnRzIGZyb20gYW4gZWxlbWVudAorICAgIHJlbW92ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGVz
LCBoYW5kbGVyLCBzZWxlY3RvciwgbWFwcGVkVHlwZXMgKSB7CisKKyAgICAgICAgdmFyIGosIG9y
aWdDb3VudCwgdG1wLAorICAgICAgICAgICAgZXZlbnRzLCB0LCBoYW5kbGVPYmosCisgICAgICAg
ICAgICBzcGVjaWFsLCBoYW5kbGVycywgdHlwZSwgbmFtZXNwYWNlcywgb3JpZ1R5cGUsCisgICAg
ICAgICAgICBlbGVtRGF0YSA9IGRhdGFQcml2Lmhhc0RhdGEoIGVsZW0gKSAmJiBkYXRhUHJpdi5n
ZXQoIGVsZW0gKTsKKworICAgICAgICBpZiAoICFlbGVtRGF0YSB8fCAhKCBldmVudHMgPSBlbGVt
RGF0YS5ldmVudHMgKSApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIE9uY2UgZm9yIGVhY2ggdHlwZS5uYW1lc3BhY2UgaW4gdHlwZXM7IHR5cGUgbWF5IGJl
IG9taXR0ZWQKKyAgICAgICAgdHlwZXMgPSAoIHR5cGVzIHx8ICIiICkubWF0Y2goIHJub3R3aGl0
ZSApIHx8IFsgIiIgXTsKKyAgICAgICAgdCA9IHR5cGVzLmxlbmd0aDsKKyAgICAgICAgd2hpbGUg
KCB0LS0gKSB7CisgICAgICAgICAgICB0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1sg
dCBdICkgfHwgW107CisgICAgICAgICAgICB0eXBlID0gb3JpZ1R5cGUgPSB0bXBbIDEgXTsKKyAg
ICAgICAgICAgIG5hbWVzcGFjZXMgPSAoIHRtcFsgMiBdIHx8ICIiICkuc3BsaXQoICIuIiApLnNv
cnQoKTsKKworICAgICAgICAgICAgLy8gVW5iaW5kIGFsbCBldmVudHMgKG9uIHRoaXMgbmFtZXNw
YWNlLCBpZiBwcm92aWRlZCkgZm9yIHRoZSBlbGVtZW50CisgICAgICAgICAgICBpZiAoICF0eXBl
ICkgeworICAgICAgICAgICAgICAgIGZvciAoIHR5cGUgaW4gZXZlbnRzICkgeworICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICsgdHlwZXNbIHQgXSwg
aGFuZGxlciwgc2VsZWN0b3IsIHRydWUgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNwZWNpYWwgPSBq
UXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9OworICAgICAgICAgICAgdHlwZSA9ICgg
c2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0
eXBlOworICAgICAgICAgICAgaGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSB8fCBbXTsKKyAgICAg
ICAgICAgIHRtcCA9IHRtcFsgMiBdICYmCisgICAgICAgICAgICAgICAgbmV3IFJlZ0V4cCggIihe
fFxcLikiICsgbmFtZXNwYWNlcy5qb2luKCAiXFwuKD86LipcXC58KSIgKSArICIoXFwufCQpIiAp
OworCisgICAgICAgICAgICAvLyBSZW1vdmUgbWF0Y2hpbmcgZXZlbnRzCisgICAgICAgICAgICBv
cmlnQ291bnQgPSBqID0gaGFuZGxlcnMubGVuZ3RoOworICAgICAgICAgICAgd2hpbGUgKCBqLS0g
KSB7CisgICAgICAgICAgICAgICAgaGFuZGxlT2JqID0gaGFuZGxlcnNbIGogXTsKKworICAgICAg
ICAgICAgICAgIGlmICggKCBtYXBwZWRUeXBlcyB8fCBvcmlnVHlwZSA9PT0gaGFuZGxlT2JqLm9y
aWdUeXBlICkgJiYKKyAgICAgICAgICAgICAgICAgICAgKCAhaGFuZGxlciB8fCBoYW5kbGVyLmd1
aWQgPT09IGhhbmRsZU9iai5ndWlkICkgJiYKKyAgICAgICAgICAgICAgICAgICAgKCAhdG1wIHx8
IHRtcC50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSAmJgorICAgICAgICAgICAgICAgICAg
ICAoICFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gaGFuZGxlT2JqLnNlbGVjdG9yIHx8CisgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxlY3RvciA9PT0gIioqIiAmJiBoYW5kbGVPYmouc2VsZWN0
b3IgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnMuc3BsaWNlKCBqLCAxICk7CisK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCBoYW5kbGVPYmouc2VsZWN0b3IgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LS07CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCBzcGVjaWFsLnJlbW92ZSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHNwZWNpYWwucmVtb3ZlLmNhbGwoIGVsZW0sIGhhbmRsZU9i
aiApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBSZW1vdmUgZ2VuZXJpYyBldmVudCBoYW5kbGVyIGlmIHdl
IHJlbW92ZWQgc29tZXRoaW5nIGFuZCBubyBtb3JlIGhhbmRsZXJzIGV4aXN0CisgICAgICAgICAg
ICAvLyAoYXZvaWRzIHBvdGVudGlhbCBmb3IgZW5kbGVzcyByZWN1cnNpb24gZHVyaW5nIHJlbW92
YWwgb2Ygc3BlY2lhbCBldmVudCBoYW5kbGVycykKKyAgICAgICAgICAgIGlmICggb3JpZ0NvdW50
ICYmICFoYW5kbGVycy5sZW5ndGggKSB7CisgICAgICAgICAgICAgICAgaWYgKCAhc3BlY2lhbC50
ZWFyZG93biB8fAorICAgICAgICAgICAgICAgICAgICBzcGVjaWFsLnRlYXJkb3duLmNhbGwoIGVs
ZW0sIG5hbWVzcGFjZXMsIGVsZW1EYXRhLmhhbmRsZSApID09PSBmYWxzZSApIHsKKworICAgICAg
ICAgICAgICAgICAgICBqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGVsZW1EYXRhLmhh
bmRsZSApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGRlbGV0ZSBldmVu
dHNbIHR5cGUgXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFJlbW92
ZSBkYXRhIGFuZCB0aGUgZXhwYW5kbyBpZiBpdCdzIG5vIGxvbmdlciB1c2VkCisgICAgICAgIGlm
ICggalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGV2ZW50cyApICkgeworICAgICAgICAgICAgZGF0YVBy
aXYucmVtb3ZlKCBlbGVtLCAiaGFuZGxlIGV2ZW50cyIgKTsKKyAgICAgICAgfQorICAgIH0sCisK
KyAgICBkaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50ICkgeworCisgICAgICAgIC8vIE1ha2UgYSB3
cml0YWJsZSBqUXVlcnkuRXZlbnQgZnJvbSB0aGUgbmF0aXZlIGV2ZW50IG9iamVjdAorICAgICAg
ICBldmVudCA9IGpRdWVyeS5ldmVudC5maXgoIGV2ZW50ICk7CisKKyAgICAgICAgdmFyIGksIGos
IHJldCwgbWF0Y2hlZCwgaGFuZGxlT2JqLAorICAgICAgICAgICAgaGFuZGxlclF1ZXVlID0gW10s
CisgICAgICAgICAgICBhcmdzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzICksCisgICAgICAgICAg
ICBoYW5kbGVycyA9ICggZGF0YVByaXYuZ2V0KCB0aGlzLCAiZXZlbnRzIiApIHx8IHt9IClbIGV2
ZW50LnR5cGUgXSB8fCBbXSwKKyAgICAgICAgICAgIHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3Bl
Y2lhbFsgZXZlbnQudHlwZSBdIHx8IHt9OworCisgICAgICAgIC8vIFVzZSB0aGUgZml4LWVkIGpR
dWVyeS5FdmVudCByYXRoZXIgdGhhbiB0aGUgKHJlYWQtb25seSkgbmF0aXZlIGV2ZW50CisgICAg
ICAgIGFyZ3NbIDAgXSA9IGV2ZW50OworICAgICAgICBldmVudC5kZWxlZ2F0ZVRhcmdldCA9IHRo
aXM7CisKKyAgICAgICAgLy8gQ2FsbCB0aGUgcHJlRGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBl
ZCB0eXBlLCBhbmQgbGV0IGl0IGJhaWwgaWYgZGVzaXJlZAorICAgICAgICBpZiAoIHNwZWNpYWwu
cHJlRGlzcGF0Y2ggJiYgc3BlY2lhbC5wcmVEaXNwYXRjaC5jYWxsKCB0aGlzLCBldmVudCApID09
PSBmYWxzZSApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IERldGVybWluZSBoYW5kbGVycworICAgICAgICBoYW5kbGVyUXVldWUgPSBqUXVlcnkuZXZlbnQu
aGFuZGxlcnMuY2FsbCggdGhpcywgZXZlbnQsIGhhbmRsZXJzICk7CisKKyAgICAgICAgLy8gUnVu
IGRlbGVnYXRlcyBmaXJzdDsgdGhleSBtYXkgd2FudCB0byBzdG9wIHByb3BhZ2F0aW9uIGJlbmVh
dGggdXMKKyAgICAgICAgaSA9IDA7CisgICAgICAgIHdoaWxlICggKCBtYXRjaGVkID0gaGFuZGxl
clF1ZXVlWyBpKysgXSApICYmICFldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkgeworICAg
ICAgICAgICAgZXZlbnQuY3VycmVudFRhcmdldCA9IG1hdGNoZWQuZWxlbTsKKworICAgICAgICAg
ICAgaiA9IDA7CisgICAgICAgICAgICB3aGlsZSAoICggaGFuZGxlT2JqID0gbWF0Y2hlZC5oYW5k
bGVyc1sgaisrIF0gKSAmJgorICAgICAgICAgICAgICAgICFldmVudC5pc0ltbWVkaWF0ZVByb3Bh
Z2F0aW9uU3RvcHBlZCgpICkgeworCisgICAgICAgICAgICAgICAgLy8gVHJpZ2dlcmVkIGV2ZW50
IG11c3QgZWl0aGVyIDEpIGhhdmUgbm8gbmFtZXNwYWNlLCBvciAyKSBoYXZlIG5hbWVzcGFjZShz
KQorICAgICAgICAgICAgICAgIC8vIGEgc3Vic2V0IG9yIGVxdWFsIHRvIHRob3NlIGluIHRoZSBi
b3VuZCBldmVudCAoYm90aCBjYW4gaGF2ZSBubyBuYW1lc3BhY2UpLgorICAgICAgICAgICAgICAg
IGlmICggIWV2ZW50LnJuYW1lc3BhY2UgfHwgZXZlbnQucm5hbWVzcGFjZS50ZXN0KCBoYW5kbGVP
YmoubmFtZXNwYWNlICkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgZXZlbnQuaGFuZGxlT2Jq
ID0gaGFuZGxlT2JqOworICAgICAgICAgICAgICAgICAgICBldmVudC5kYXRhID0gaGFuZGxlT2Jq
LmRhdGE7CisKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gKCAoIGpRdWVyeS5ldmVudC5zcGVj
aWFsWyBoYW5kbGVPYmoub3JpZ1R5cGUgXSB8fCB7fSApLmhhbmRsZSB8fAorICAgICAgICAgICAg
ICAgICAgICAgICAgaGFuZGxlT2JqLmhhbmRsZXIgKS5hcHBseSggbWF0Y2hlZC5lbGVtLCBhcmdz
ICk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCByZXQgIT09IHVuZGVmaW5lZCApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggKCBldmVudC5yZXN1bHQgPSByZXQgKSA9PT0gZmFs
c2UgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIENhbGwg
dGhlIHBvc3REaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGUKKyAgICAgICAgaWYgKCBz
cGVjaWFsLnBvc3REaXNwYXRjaCApIHsKKyAgICAgICAgICAgIHNwZWNpYWwucG9zdERpc3BhdGNo
LmNhbGwoIHRoaXMsIGV2ZW50ICk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZXZlbnQu
cmVzdWx0OworICAgIH0sCisKKyAgICBoYW5kbGVyczogZnVuY3Rpb24oIGV2ZW50LCBoYW5kbGVy
cyApIHsKKyAgICAgICAgdmFyIGksIG1hdGNoZXMsIHNlbCwgaGFuZGxlT2JqLAorICAgICAgICAg
ICAgaGFuZGxlclF1ZXVlID0gW10sCisgICAgICAgICAgICBkZWxlZ2F0ZUNvdW50ID0gaGFuZGxl
cnMuZGVsZWdhdGVDb3VudCwKKyAgICAgICAgICAgIGN1ciA9IGV2ZW50LnRhcmdldDsKKworICAg
ICAgICAvLyBTdXBwb3J0IChhdCBsZWFzdCk6IENocm9tZSwgSUU5CisgICAgICAgIC8vIEZpbmQg
ZGVsZWdhdGUgaGFuZGxlcnMKKyAgICAgICAgLy8gQmxhY2staG9sZSBTVkcgPHVzZT4gaW5zdGFu
Y2UgdHJlZXMgKCMxMzE4MCkKKyAgICAgICAgLy8KKyAgICAgICAgLy8gU3VwcG9ydDogRmlyZWZv
eDw9NDIrCisgICAgICAgIC8vIEF2b2lkIG5vbi1sZWZ0LWNsaWNrIGluIEZGIGJ1dCBkb24ndCBi
bG9jayBJRSByYWRpbyBldmVudHMgKCMzODYxLCBnaC0yMzQzKQorICAgICAgICBpZiAoIGRlbGVn
YXRlQ291bnQgJiYgY3VyLm5vZGVUeXBlICYmCisgICAgICAgICAgICAoIGV2ZW50LnR5cGUgIT09
ICJjbGljayIgfHwgaXNOYU4oIGV2ZW50LmJ1dHRvbiApIHx8IGV2ZW50LmJ1dHRvbiA8IDEgKSAp
IHsKKworICAgICAgICAgICAgZm9yICggOyBjdXIgIT09IHRoaXM7IGN1ciA9IGN1ci5wYXJlbnRO
b2RlIHx8IHRoaXMgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBEb24ndCBjaGVjayBub24tZWxl
bWVudHMgKCMxMzIwOCkKKyAgICAgICAgICAgICAgICAvLyBEb24ndCBwcm9jZXNzIGNsaWNrcyBv
biBkaXNhYmxlZCBlbGVtZW50cyAoIzY5MTEsICM4MTY1LCAjMTEzODIsICMxMTc2NCkKKyAgICAg
ICAgICAgICAgICBpZiAoIGN1ci5ub2RlVHlwZSA9PT0gMSAmJiAoIGN1ci5kaXNhYmxlZCAhPT0g
dHJ1ZSB8fCBldmVudC50eXBlICE9PSAiY2xpY2siICkgKSB7CisgICAgICAgICAgICAgICAgICAg
IG1hdGNoZXMgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBkZWxl
Z2F0ZUNvdW50OyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPYmogPSBo
YW5kbGVyc1sgaSBdOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBjb25mbGlj
dCB3aXRoIE9iamVjdC5wcm90b3R5cGUgcHJvcGVydGllcyAoIzEzMjAzKQorICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsID0gaGFuZGxlT2JqLnNlbGVjdG9yICsgIiAiOworCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIG1hdGNoZXNbIHNlbCBdID09PSB1bmRlZmluZWQgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlc1sgc2VsIF0gPSBoYW5kbGVPYmoubmVlZHND
b250ZXh0ID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCBzZWwsIHRo
aXMgKS5pbmRleCggY3VyICkgPiAtMSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5maW5kKCBzZWwsIHRoaXMsIG51bGwsIFsgY3VyIF0gKS5sZW5ndGg7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1hdGNoZXNb
IHNlbCBdICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMucHVzaCggaGFu
ZGxlT2JqICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaGVzLmxlbmd0aCApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGhhbmRsZXJRdWV1ZS5wdXNoKCB7IGVsZW06IGN1ciwgaGFuZGxlcnM6
IG1hdGNoZXMgfSApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQWRkIHRoZSByZW1haW5pbmcg
KGRpcmVjdGx5LWJvdW5kKSBoYW5kbGVycworICAgICAgICBpZiAoIGRlbGVnYXRlQ291bnQgPCBo
YW5kbGVycy5sZW5ndGggKSB7CisgICAgICAgICAgICBoYW5kbGVyUXVldWUucHVzaCggeyBlbGVt
OiB0aGlzLCBoYW5kbGVyczogaGFuZGxlcnMuc2xpY2UoIGRlbGVnYXRlQ291bnQgKSB9ICk7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gaGFuZGxlclF1ZXVlOworICAgIH0sCisKKyAgICAv
LyBJbmNsdWRlcyBzb21lIGV2ZW50IHByb3BzIHNoYXJlZCBieSBLZXlFdmVudCBhbmQgTW91c2VF
dmVudAorICAgIHByb3BzOiAoICJhbHRLZXkgYnViYmxlcyBjYW5jZWxhYmxlIGN0cmxLZXkgY3Vy
cmVudFRhcmdldCBkZXRhaWwgZXZlbnRQaGFzZSAiICsKKyAgICAgICAgIm1ldGFLZXkgcmVsYXRl
ZFRhcmdldCBzaGlmdEtleSB0YXJnZXQgdGltZVN0YW1wIHZpZXcgd2hpY2giICkuc3BsaXQoICIg
IiApLAorCisgICAgZml4SG9va3M6IHt9LAorCisgICAga2V5SG9va3M6IHsKKyAgICAgICAgcHJv
cHM6ICJjaGFyIGNoYXJDb2RlIGtleSBrZXlDb2RlIi5zcGxpdCggIiAiICksCisgICAgICAgIGZp
bHRlcjogZnVuY3Rpb24oIGV2ZW50LCBvcmlnaW5hbCApIHsKKworICAgICAgICAgICAgLy8gQWRk
IHdoaWNoIGZvciBrZXkgZXZlbnRzCisgICAgICAgICAgICBpZiAoIGV2ZW50LndoaWNoID09IG51
bGwgKSB7CisgICAgICAgICAgICAgICAgZXZlbnQud2hpY2ggPSBvcmlnaW5hbC5jaGFyQ29kZSAh
PSBudWxsID8gb3JpZ2luYWwuY2hhckNvZGUgOiBvcmlnaW5hbC5rZXlDb2RlOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICByZXR1cm4gZXZlbnQ7CisgICAgICAgIH0KKyAgICB9LAorCisg
ICAgbW91c2VIb29rczogeworICAgICAgICBwcm9wczogKCAiYnV0dG9uIGJ1dHRvbnMgY2xpZW50
WCBjbGllbnRZIG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSAiICsKKyAgICAgICAgICAgICJz
Y3JlZW5YIHNjcmVlblkgdG9FbGVtZW50IiApLnNwbGl0KCAiICIgKSwKKyAgICAgICAgZmlsdGVy
OiBmdW5jdGlvbiggZXZlbnQsIG9yaWdpbmFsICkgeworICAgICAgICAgICAgdmFyIGV2ZW50RG9j
LCBkb2MsIGJvZHksCisgICAgICAgICAgICAgICAgYnV0dG9uID0gb3JpZ2luYWwuYnV0dG9uOwor
CisgICAgICAgICAgICAvLyBDYWxjdWxhdGUgcGFnZVgvWSBpZiBtaXNzaW5nIGFuZCBjbGllbnRY
L1kgYXZhaWxhYmxlCisgICAgICAgICAgICBpZiAoIGV2ZW50LnBhZ2VYID09IG51bGwgJiYgb3Jp
Z2luYWwuY2xpZW50WCAhPSBudWxsICkgeworICAgICAgICAgICAgICAgIGV2ZW50RG9jID0gZXZl
bnQudGFyZ2V0Lm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQ7CisgICAgICAgICAgICAgICAgZG9j
ID0gZXZlbnREb2MuZG9jdW1lbnRFbGVtZW50OworICAgICAgICAgICAgICAgIGJvZHkgPSBldmVu
dERvYy5ib2R5OworCisgICAgICAgICAgICAgICAgZXZlbnQucGFnZVggPSBvcmlnaW5hbC5jbGll
bnRYICsKKyAgICAgICAgICAgICAgICAgICAgKCBkb2MgJiYgZG9jLnNjcm9sbExlZnQgfHwgYm9k
eSAmJiBib2R5LnNjcm9sbExlZnQgfHwgMCApIC0KKyAgICAgICAgICAgICAgICAgICAgKCBkb2Mg
JiYgZG9jLmNsaWVudExlZnQgfHwgYm9keSAmJiBib2R5LmNsaWVudExlZnQgfHwgMCApOworICAg
ICAgICAgICAgICAgIGV2ZW50LnBhZ2VZID0gb3JpZ2luYWwuY2xpZW50WSArCisgICAgICAgICAg
ICAgICAgICAgICggZG9jICYmIGRvYy5zY3JvbGxUb3AgIHx8IGJvZHkgJiYgYm9keS5zY3JvbGxU
b3AgIHx8IDAgKSAtCisgICAgICAgICAgICAgICAgICAgICggZG9jICYmIGRvYy5jbGllbnRUb3Ag
IHx8IGJvZHkgJiYgYm9keS5jbGllbnRUb3AgIHx8IDAgKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gQWRkIHdoaWNoIGZvciBjbGljazogMSA9PT0gbGVmdDsgMiA9PT0gbWlkZGxl
OyAzID09PSByaWdodAorICAgICAgICAgICAgLy8gTm90ZTogYnV0dG9uIGlzIG5vdCBub3JtYWxp
emVkLCBzbyBkb24ndCB1c2UgaXQKKyAgICAgICAgICAgIGlmICggIWV2ZW50LndoaWNoICYmIGJ1
dHRvbiAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgIGV2ZW50LndoaWNoID0gKCBi
dXR0b24gJiAxID8gMSA6ICggYnV0dG9uICYgMiA/IDMgOiAoIGJ1dHRvbiAmIDQgPyAyIDogMCAp
ICkgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGV2ZW50OworICAgICAg
ICB9CisgICAgfSwKKworICAgIGZpeDogZnVuY3Rpb24oIGV2ZW50ICkgeworICAgICAgICBpZiAo
IGV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdICkgeworICAgICAgICAgICAgcmV0dXJuIGV2ZW50Owor
ICAgICAgICB9CisKKyAgICAgICAgLy8gQ3JlYXRlIGEgd3JpdGFibGUgY29weSBvZiB0aGUgZXZl
bnQgb2JqZWN0IGFuZCBub3JtYWxpemUgc29tZSBwcm9wZXJ0aWVzCisgICAgICAgIHZhciBpLCBw
cm9wLCBjb3B5LAorICAgICAgICAgICAgdHlwZSA9IGV2ZW50LnR5cGUsCisgICAgICAgICAgICBv
cmlnaW5hbEV2ZW50ID0gZXZlbnQsCisgICAgICAgICAgICBmaXhIb29rID0gdGhpcy5maXhIb29r
c1sgdHlwZSBdOworCisgICAgICAgIGlmICggIWZpeEhvb2sgKSB7CisgICAgICAgICAgICB0aGlz
LmZpeEhvb2tzWyB0eXBlIF0gPSBmaXhIb29rID0KKyAgICAgICAgICAgICAgICBybW91c2VFdmVu
dC50ZXN0KCB0eXBlICkgPyB0aGlzLm1vdXNlSG9va3MgOgorICAgICAgICAgICAgICAgIHJrZXlF
dmVudC50ZXN0KCB0eXBlICkgPyB0aGlzLmtleUhvb2tzIDoKKyAgICAgICAgICAgICAgICB7fTsK
KyAgICAgICAgfQorICAgICAgICBjb3B5ID0gZml4SG9vay5wcm9wcyA/IHRoaXMucHJvcHMuY29u
Y2F0KCBmaXhIb29rLnByb3BzICkgOiB0aGlzLnByb3BzOworCisgICAgICAgIGV2ZW50ID0gbmV3
IGpRdWVyeS5FdmVudCggb3JpZ2luYWxFdmVudCApOworCisgICAgICAgIGkgPSBjb3B5Lmxlbmd0
aDsKKyAgICAgICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAgICBwcm9wID0gY29weVsgaSBd
OworICAgICAgICAgICAgZXZlbnRbIHByb3AgXSA9IG9yaWdpbmFsRXZlbnRbIHByb3AgXTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIFN1cHBvcnQ6IENvcmRvdmEgMi41IChXZWJLaXQpICgjMTMy
NTUpCisgICAgICAgIC8vIEFsbCBldmVudHMgc2hvdWxkIGhhdmUgYSB0YXJnZXQ7IENvcmRvdmEg
ZGV2aWNlcmVhZHkgZG9lc24ndAorICAgICAgICBpZiAoICFldmVudC50YXJnZXQgKSB7CisgICAg
ICAgICAgICBldmVudC50YXJnZXQgPSBkb2N1bWVudDsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IFN1cHBvcnQ6IFNhZmFyaSA2LjArLCBDaHJvbWU8MjgKKyAgICAgICAgLy8gVGFyZ2V0IHNob3Vs
ZCBub3QgYmUgYSB0ZXh0IG5vZGUgKCM1MDQsICMxMzE0MykKKyAgICAgICAgaWYgKCBldmVudC50
YXJnZXQubm9kZVR5cGUgPT09IDMgKSB7CisgICAgICAgICAgICBldmVudC50YXJnZXQgPSBldmVu
dC50YXJnZXQucGFyZW50Tm9kZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmaXhIb29r
LmZpbHRlciA/IGZpeEhvb2suZmlsdGVyKCBldmVudCwgb3JpZ2luYWxFdmVudCApIDogZXZlbnQ7
CisgICAgfSwKKworICAgIHNwZWNpYWw6IHsKKyAgICAgICAgbG9hZDogeworCisgICAgICAgICAg
ICAvLyBQcmV2ZW50IHRyaWdnZXJlZCBpbWFnZS5sb2FkIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRv
IHdpbmRvdy5sb2FkCisgICAgICAgICAgICBub0J1YmJsZTogdHJ1ZQorICAgICAgICB9LAorICAg
ICAgICBmb2N1czogeworCisgICAgICAgICAgICAvLyBGaXJlIG5hdGl2ZSBldmVudCBpZiBwb3Nz
aWJsZSBzbyBibHVyL2ZvY3VzIHNlcXVlbmNlIGlzIGNvcnJlY3QKKyAgICAgICAgICAgIHRyaWdn
ZXI6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGlmICggdGhpcyAhPT0gc2FmZUFjdGl2
ZUVsZW1lbnQoKSAmJiB0aGlzLmZvY3VzICkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmZv
Y3VzKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgZGVsZWdhdGVUeXBlOiAiZm9jdXNpbiIK
KyAgICAgICAgfSwKKyAgICAgICAgYmx1cjogeworICAgICAgICAgICAgdHJpZ2dlcjogZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICAgICAgaWYgKCB0aGlzID09PSBzYWZlQWN0aXZlRWxlbWVudCgp
ICYmIHRoaXMuYmx1ciApIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5ibHVyKCk7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9LAorICAgICAgICAgICAgZGVsZWdhdGVUeXBlOiAiZm9jdXNvdXQiCisgICAgICAgIH0s
CisgICAgICAgIGNsaWNrOiB7CisKKyAgICAgICAgICAgIC8vIEZvciBjaGVja2JveCwgZmlyZSBu
YXRpdmUgZXZlbnQgc28gY2hlY2tlZCBzdGF0ZSB3aWxsIGJlIHJpZ2h0CisgICAgICAgICAgICB0
cmlnZ2VyOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBpZiAoIHRoaXMudHlwZSA9PT0g
ImNoZWNrYm94IiAmJiB0aGlzLmNsaWNrICYmIGpRdWVyeS5ub2RlTmFtZSggdGhpcywgImlucHV0
IiApICkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmNsaWNrKCk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAor
CisgICAgICAgICAgICAvLyBGb3IgY3Jvc3MtYnJvd3NlciBjb25zaXN0ZW5jeSwgZG9uJ3QgZmly
ZSBuYXRpdmUgLmNsaWNrKCkgb24gbGlua3MKKyAgICAgICAgICAgIF9kZWZhdWx0OiBmdW5jdGlv
biggZXZlbnQgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5ub2RlTmFtZSggZXZl
bnQudGFyZ2V0LCAiYSIgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKworICAgICAgICBi
ZWZvcmV1bmxvYWQ6IHsKKyAgICAgICAgICAgIHBvc3REaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50
ICkgeworCisgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogRmlyZWZveCAyMCsKKyAgICAgICAg
ICAgICAgICAvLyBGaXJlZm94IGRvZXNuJ3QgYWxlcnQgaWYgdGhlIHJldHVyblZhbHVlIGZpZWxk
IGlzIG5vdCBzZXQuCisgICAgICAgICAgICAgICAgaWYgKCBldmVudC5yZXN1bHQgIT09IHVuZGVm
aW5lZCAmJiBldmVudC5vcmlnaW5hbEV2ZW50ICkgeworICAgICAgICAgICAgICAgICAgICBldmVu
dC5vcmlnaW5hbEV2ZW50LnJldHVyblZhbHVlID0gZXZlbnQucmVzdWx0OworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK307CisKK2pRdWVyeS5yZW1v
dmVFdmVudCA9IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBoYW5kbGUgKSB7CisKKyAgICAvLyBUaGlz
ICJpZiIgaXMgbmVlZGVkIGZvciBwbGFpbiBvYmplY3RzCisgICAgaWYgKCBlbGVtLnJlbW92ZUV2
ZW50TGlzdGVuZXIgKSB7CisgICAgICAgIGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwg
aGFuZGxlICk7CisgICAgfQorfTsKKworalF1ZXJ5LkV2ZW50ID0gZnVuY3Rpb24oIHNyYywgcHJv
cHMgKSB7CisKKyAgICAvLyBBbGxvdyBpbnN0YW50aWF0aW9uIHdpdGhvdXQgdGhlICduZXcnIGtl
eXdvcmQKKyAgICBpZiAoICEoIHRoaXMgaW5zdGFuY2VvZiBqUXVlcnkuRXZlbnQgKSApIHsKKyAg
ICAgICAgcmV0dXJuIG5ldyBqUXVlcnkuRXZlbnQoIHNyYywgcHJvcHMgKTsKKyAgICB9CisKKyAg
ICAvLyBFdmVudCBvYmplY3QKKyAgICBpZiAoIHNyYyAmJiBzcmMudHlwZSApIHsKKyAgICAgICAg
dGhpcy5vcmlnaW5hbEV2ZW50ID0gc3JjOworICAgICAgICB0aGlzLnR5cGUgPSBzcmMudHlwZTsK
KworICAgICAgICAvLyBFdmVudHMgYnViYmxpbmcgdXAgdGhlIGRvY3VtZW50IG1heSBoYXZlIGJl
ZW4gbWFya2VkIGFzIHByZXZlbnRlZAorICAgICAgICAvLyBieSBhIGhhbmRsZXIgbG93ZXIgZG93
biB0aGUgdHJlZTsgcmVmbGVjdCB0aGUgY29ycmVjdCB2YWx1ZS4KKyAgICAgICAgdGhpcy5pc0Rl
ZmF1bHRQcmV2ZW50ZWQgPSBzcmMuZGVmYXVsdFByZXZlbnRlZCB8fAorICAgICAgICAgICAgICAg
IHNyYy5kZWZhdWx0UHJldmVudGVkID09PSB1bmRlZmluZWQgJiYKKworICAgICAgICAgICAgICAg
IC8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4wCisgICAgICAgICAgICAgICAgc3JjLnJldHVyblZhbHVl
ID09PSBmYWxzZSA/CisgICAgICAgICAgICByZXR1cm5UcnVlIDoKKyAgICAgICAgICAgIHJldHVy
bkZhbHNlOworCisgICAgLy8gRXZlbnQgdHlwZQorICAgIH0gZWxzZSB7CisgICAgICAgIHRoaXMu
dHlwZSA9IHNyYzsKKyAgICB9CisKKyAgICAvLyBQdXQgZXhwbGljaXRseSBwcm92aWRlZCBwcm9w
ZXJ0aWVzIG9udG8gdGhlIGV2ZW50IG9iamVjdAorICAgIGlmICggcHJvcHMgKSB7CisgICAgICAg
IGpRdWVyeS5leHRlbmQoIHRoaXMsIHByb3BzICk7CisgICAgfQorCisgICAgLy8gQ3JlYXRlIGEg
dGltZXN0YW1wIGlmIGluY29taW5nIGV2ZW50IGRvZXNuJ3QgaGF2ZSBvbmUKKyAgICB0aGlzLnRp
bWVTdGFtcCA9IHNyYyAmJiBzcmMudGltZVN0YW1wIHx8IGpRdWVyeS5ub3coKTsKKworICAgIC8v
IE1hcmsgaXQgYXMgZml4ZWQKKyAgICB0aGlzWyBqUXVlcnkuZXhwYW5kbyBdID0gdHJ1ZTsKK307
CisKKy8vIGpRdWVyeS5FdmVudCBpcyBiYXNlZCBvbiBET00zIEV2ZW50cyBhcyBzcGVjaWZpZWQg
YnkgdGhlIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgQmluZGluZworLy8gaHR0cDovL3d3dy53My5vcmcv
VFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMtMjAwMzAzMzEvZWNtYS1zY3JpcHQtYmluZGlu
Zy5odG1sCitqUXVlcnkuRXZlbnQucHJvdG90eXBlID0geworICAgIGNvbnN0cnVjdG9yOiBqUXVl
cnkuRXZlbnQsCisgICAgaXNEZWZhdWx0UHJldmVudGVkOiByZXR1cm5GYWxzZSwKKyAgICBpc1By
b3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UsCisgICAgaXNJbW1lZGlhdGVQcm9wYWdhdGlv
blN0b3BwZWQ6IHJldHVybkZhbHNlLAorICAgIGlzU2ltdWxhdGVkOiBmYWxzZSwKKworICAgIHBy
ZXZlbnREZWZhdWx0OiBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGUgPSB0aGlzLm9yaWdpbmFs
RXZlbnQ7CisKKyAgICAgICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSByZXR1cm5UcnVlOwor
CisgICAgICAgIGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHsKKyAgICAgICAgICAgIGUu
cHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgfQorICAgIH0sCisgICAgc3RvcFByb3BhZ2F0aW9u
OiBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7CisKKyAg
ICAgICAgdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7CisKKyAgICAgICAg
aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkgeworICAgICAgICAgICAgZS5zdG9wUHJvcGFn
YXRpb24oKTsKKyAgICAgICAgfQorICAgIH0sCisgICAgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9u
OiBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7CisKKyAg
ICAgICAgdGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7CisK
KyAgICAgICAgaWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkgeworICAgICAgICAgICAgZS5z
dG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuc3Rv
cFByb3BhZ2F0aW9uKCk7CisgICAgfQorfTsKKworLy8gQ3JlYXRlIG1vdXNlZW50ZXIvbGVhdmUg
ZXZlbnRzIHVzaW5nIG1vdXNlb3Zlci9vdXQgYW5kIGV2ZW50LXRpbWUgY2hlY2tzCisvLyBzbyB0
aGF0IGV2ZW50IGRlbGVnYXRpb24gd29ya3MgaW4galF1ZXJ5LgorLy8gRG8gdGhlIHNhbWUgZm9y
IHBvaW50ZXJlbnRlci9wb2ludGVybGVhdmUgYW5kIHBvaW50ZXJvdmVyL3BvaW50ZXJvdXQKKy8v
CisvLyBTdXBwb3J0OiBTYWZhcmkgNyBvbmx5CisvLyBTYWZhcmkgc2VuZHMgbW91c2VlbnRlciB0
b28gb2Z0ZW47IHNlZToKKy8vIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNz
dWVzL2RldGFpbD9pZD00NzAyNTgKKy8vIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGJ1ZyAo
aXQgZXhpc3RlZCBpbiBvbGRlciBDaHJvbWUgdmVyc2lvbnMgYXMgd2VsbCkuCitqUXVlcnkuZWFj
aCggeworICAgIG1vdXNlZW50ZXI6ICJtb3VzZW92ZXIiLAorICAgIG1vdXNlbGVhdmU6ICJtb3Vz
ZW91dCIsCisgICAgcG9pbnRlcmVudGVyOiAicG9pbnRlcm92ZXIiLAorICAgIHBvaW50ZXJsZWF2
ZTogInBvaW50ZXJvdXQiCit9LCBmdW5jdGlvbiggb3JpZywgZml4ICkgeworICAgIGpRdWVyeS5l
dmVudC5zcGVjaWFsWyBvcmlnIF0gPSB7CisgICAgICAgIGRlbGVnYXRlVHlwZTogZml4LAorICAg
ICAgICBiaW5kVHlwZTogZml4LAorCisgICAgICAgIGhhbmRsZTogZnVuY3Rpb24oIGV2ZW50ICkg
eworICAgICAgICAgICAgdmFyIHJldCwKKyAgICAgICAgICAgICAgICB0YXJnZXQgPSB0aGlzLAor
ICAgICAgICAgICAgICAgIHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0LAorICAgICAgICAg
ICAgICAgIGhhbmRsZU9iaiA9IGV2ZW50LmhhbmRsZU9iajsKKworICAgICAgICAgICAgLy8gRm9y
IG1vdXNlZW50ZXIvbGVhdmUgY2FsbCB0aGUgaGFuZGxlciBpZiByZWxhdGVkIGlzIG91dHNpZGUg
dGhlIHRhcmdldC4KKyAgICAgICAgICAgIC8vIE5COiBObyByZWxhdGVkVGFyZ2V0IGlmIHRoZSBt
b3VzZSBsZWZ0L2VudGVyZWQgdGhlIGJyb3dzZXIgd2luZG93CisgICAgICAgICAgICBpZiAoICFy
ZWxhdGVkIHx8ICggcmVsYXRlZCAhPT0gdGFyZ2V0ICYmICFqUXVlcnkuY29udGFpbnMoIHRhcmdl
dCwgcmVsYXRlZCApICkgKSB7CisgICAgICAgICAgICAgICAgZXZlbnQudHlwZSA9IGhhbmRsZU9i
ai5vcmlnVHlwZTsKKyAgICAgICAgICAgICAgICByZXQgPSBoYW5kbGVPYmouaGFuZGxlci5hcHBs
eSggdGhpcywgYXJndW1lbnRzICk7CisgICAgICAgICAgICAgICAgZXZlbnQudHlwZSA9IGZpeDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KKyAgICB9
OworfSApOworCitqUXVlcnkuZm4uZXh0ZW5kKCB7CisgICAgb246IGZ1bmN0aW9uKCB0eXBlcywg
c2VsZWN0b3IsIGRhdGEsIGZuICkgeworICAgICAgICByZXR1cm4gb24oIHRoaXMsIHR5cGVzLCBz
ZWxlY3RvciwgZGF0YSwgZm4gKTsKKyAgICB9LAorICAgIG9uZTogZnVuY3Rpb24oIHR5cGVzLCBz
ZWxlY3RvciwgZGF0YSwgZm4gKSB7CisgICAgICAgIHJldHVybiBvbiggdGhpcywgdHlwZXMsIHNl
bGVjdG9yLCBkYXRhLCBmbiwgMSApOworICAgIH0sCisgICAgb2ZmOiBmdW5jdGlvbiggdHlwZXMs
IHNlbGVjdG9yLCBmbiApIHsKKyAgICAgICAgdmFyIGhhbmRsZU9iaiwgdHlwZTsKKyAgICAgICAg
aWYgKCB0eXBlcyAmJiB0eXBlcy5wcmV2ZW50RGVmYXVsdCAmJiB0eXBlcy5oYW5kbGVPYmogKSB7
CisKKyAgICAgICAgICAgIC8vICggZXZlbnQgKSAgZGlzcGF0Y2hlZCBqUXVlcnkuRXZlbnQKKyAg
ICAgICAgICAgIGhhbmRsZU9iaiA9IHR5cGVzLmhhbmRsZU9iajsKKyAgICAgICAgICAgIGpRdWVy
eSggdHlwZXMuZGVsZWdhdGVUYXJnZXQgKS5vZmYoCisgICAgICAgICAgICAgICAgaGFuZGxlT2Jq
Lm5hbWVzcGFjZSA/CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9iai5vcmlnVHlwZSArICIu
IiArIGhhbmRsZU9iai5uYW1lc3BhY2UgOgorICAgICAgICAgICAgICAgICAgICBoYW5kbGVPYmou
b3JpZ1R5cGUsCisgICAgICAgICAgICAgICAgaGFuZGxlT2JqLnNlbGVjdG9yLAorICAgICAgICAg
ICAgICAgIGhhbmRsZU9iai5oYW5kbGVyCisgICAgICAgICAgICApOworICAgICAgICAgICAgcmV0
dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCB0eXBlb2YgdHlwZXMgPT09ICJvYmpl
Y3QiICkgeworCisgICAgICAgICAgICAvLyAoIHR5cGVzLW9iamVjdCBbLCBzZWxlY3Rvcl0gKQor
ICAgICAgICAgICAgZm9yICggdHlwZSBpbiB0eXBlcyApIHsKKyAgICAgICAgICAgICAgICB0aGlz
Lm9mZiggdHlwZSwgc2VsZWN0b3IsIHR5cGVzWyB0eXBlIF0gKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIGlmICggc2VsZWN0b3Ig
PT09IGZhbHNlIHx8IHR5cGVvZiBzZWxlY3RvciA9PT0gImZ1bmN0aW9uIiApIHsKKworICAgICAg
ICAgICAgLy8gKCB0eXBlcyBbLCBmbl0gKQorICAgICAgICAgICAgZm4gPSBzZWxlY3RvcjsKKyAg
ICAgICAgICAgIHNlbGVjdG9yID0gdW5kZWZpbmVkOworICAgICAgICB9CisgICAgICAgIGlmICgg
Zm4gPT09IGZhbHNlICkgeworICAgICAgICAgICAgZm4gPSByZXR1cm5GYWxzZTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGpR
dWVyeS5ldmVudC5yZW1vdmUoIHRoaXMsIHR5cGVzLCBmbiwgc2VsZWN0b3IgKTsKKyAgICAgICAg
fSApOworICAgIH0KK30gKTsKKworCit2YXIKKyAgICByeGh0bWxUYWcgPSAvPCg/IWFyZWF8YnJ8
Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXHc6LV0rKVtePl0qKVwv
Pi9naSwKKworICAgIC8vIFN1cHBvcnQ6IElFIDEwLTExLCBFZGdlIDEwMjQwKworICAgIC8vIElu
IElFL0VkZ2UgdXNpbmcgcmVnZXggZ3JvdXBzIGhlcmUgY2F1c2VzIHNldmVyZSBzbG93ZG93bnMu
CisgICAgLy8gU2VlIGh0dHBzOi8vY29ubmVjdC5taWNyb3NvZnQuY29tL0lFL2ZlZWRiYWNrL2Rl
dGFpbHMvMTczNjUxMi8KKyAgICBybm9Jbm5lcmh0bWwgPSAvPHNjcmlwdHw8c3R5bGV8PGxpbmsv
aSwKKworICAgIC8vIGNoZWNrZWQ9ImNoZWNrZWQiIG9yIGNoZWNrZWQKKyAgICByY2hlY2tlZCA9
IC9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLAorICAgIHJzY3JpcHRUeXBlTWFz
a2VkID0gL150cnVlXC8oLiopLywKKyAgICByY2xlYW5TY3JpcHQgPSAvXlxzKjwhKD86XFtDREFU
QVxbfC0tKXwoPzpcXVxdfC0tKT5ccyokL2c7CisKKy8vIE1hbmlwdWxhdGluZyB0YWJsZXMgcmVx
dWlyZXMgYSB0Ym9keQorZnVuY3Rpb24gbWFuaXB1bGF0aW9uVGFyZ2V0KCBlbGVtLCBjb250ZW50
ICkgeworICAgIHJldHVybiBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJ0YWJsZSIgKSAmJgorICAg
ICAgICBqUXVlcnkubm9kZU5hbWUoIGNvbnRlbnQubm9kZVR5cGUgIT09IDExID8gY29udGVudCA6
IGNvbnRlbnQuZmlyc3RDaGlsZCwgInRyIiApID8KKworICAgICAgICBlbGVtLmdldEVsZW1lbnRz
QnlUYWdOYW1lKCAidGJvZHkiIClbIDAgXSB8fAorICAgICAgICAgICAgZWxlbS5hcHBlbmRDaGls
ZCggZWxlbS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJ0Ym9keSIgKSApIDoKKyAgICAg
ICAgZWxlbTsKK30KKworLy8gUmVwbGFjZS9yZXN0b3JlIHRoZSB0eXBlIGF0dHJpYnV0ZSBvZiBz
Y3JpcHQgZWxlbWVudHMgZm9yIHNhZmUgRE9NIG1hbmlwdWxhdGlvbgorZnVuY3Rpb24gZGlzYWJs
ZVNjcmlwdCggZWxlbSApIHsKKyAgICBlbGVtLnR5cGUgPSAoIGVsZW0uZ2V0QXR0cmlidXRlKCAi
dHlwZSIgKSAhPT0gbnVsbCApICsgIi8iICsgZWxlbS50eXBlOworICAgIHJldHVybiBlbGVtOwor
fQorZnVuY3Rpb24gcmVzdG9yZVNjcmlwdCggZWxlbSApIHsKKyAgICB2YXIgbWF0Y2ggPSByc2Ny
aXB0VHlwZU1hc2tlZC5leGVjKCBlbGVtLnR5cGUgKTsKKworICAgIGlmICggbWF0Y2ggKSB7Cisg
ICAgICAgIGVsZW0udHlwZSA9IG1hdGNoWyAxIF07CisgICAgfSBlbHNlIHsKKyAgICAgICAgZWxl
bS5yZW1vdmVBdHRyaWJ1dGUoICJ0eXBlIiApOworICAgIH0KKworICAgIHJldHVybiBlbGVtOwor
fQorCitmdW5jdGlvbiBjbG9uZUNvcHlFdmVudCggc3JjLCBkZXN0ICkgeworICAgIHZhciBpLCBs
LCB0eXBlLCBwZGF0YU9sZCwgcGRhdGFDdXIsIHVkYXRhT2xkLCB1ZGF0YUN1ciwgZXZlbnRzOwor
CisgICAgaWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxICkgeworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgLy8gMS4gQ29weSBwcml2YXRlIGRhdGE6IGV2ZW50cywgaGFuZGxlcnMsIGV0Yy4K
KyAgICBpZiAoIGRhdGFQcml2Lmhhc0RhdGEoIHNyYyApICkgeworICAgICAgICBwZGF0YU9sZCA9
IGRhdGFQcml2LmFjY2Vzcyggc3JjICk7CisgICAgICAgIHBkYXRhQ3VyID0gZGF0YVByaXYuc2V0
KCBkZXN0LCBwZGF0YU9sZCApOworICAgICAgICBldmVudHMgPSBwZGF0YU9sZC5ldmVudHM7CisK
KyAgICAgICAgaWYgKCBldmVudHMgKSB7CisgICAgICAgICAgICBkZWxldGUgcGRhdGFDdXIuaGFu
ZGxlOworICAgICAgICAgICAgcGRhdGFDdXIuZXZlbnRzID0ge307CisKKyAgICAgICAgICAgIGZv
ciAoIHR5cGUgaW4gZXZlbnRzICkgeworICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwLCBsID0g
ZXZlbnRzWyB0eXBlIF0ubGVuZ3RoOyBpIDwgbDsgaSsrICkgeworICAgICAgICAgICAgICAgICAg
ICBqUXVlcnkuZXZlbnQuYWRkKCBkZXN0LCB0eXBlLCBldmVudHNbIHR5cGUgXVsgaSBdICk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
Ly8gMi4gQ29weSB1c2VyIGRhdGEKKyAgICBpZiAoIGRhdGFVc2VyLmhhc0RhdGEoIHNyYyApICkg
eworICAgICAgICB1ZGF0YU9sZCA9IGRhdGFVc2VyLmFjY2Vzcyggc3JjICk7CisgICAgICAgIHVk
YXRhQ3VyID0galF1ZXJ5LmV4dGVuZCgge30sIHVkYXRhT2xkICk7CisKKyAgICAgICAgZGF0YVVz
ZXIuc2V0KCBkZXN0LCB1ZGF0YUN1ciApOworICAgIH0KK30KKworLy8gRml4IElFIGJ1Z3MsIHNl
ZSBzdXBwb3J0IHRlc3RzCitmdW5jdGlvbiBmaXhJbnB1dCggc3JjLCBkZXN0ICkgeworICAgIHZh
ciBub2RlTmFtZSA9IGRlc3Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKKworICAgIC8vIEZhaWxz
IHRvIHBlcnNpc3QgdGhlIGNoZWNrZWQgc3RhdGUgb2YgYSBjbG9uZWQgY2hlY2tib3ggb3IgcmFk
aW8gYnV0dG9uLgorICAgIGlmICggbm9kZU5hbWUgPT09ICJpbnB1dCIgJiYgcmNoZWNrYWJsZVR5
cGUudGVzdCggc3JjLnR5cGUgKSApIHsKKyAgICAgICAgZGVzdC5jaGVja2VkID0gc3JjLmNoZWNr
ZWQ7CisKKyAgICAvLyBGYWlscyB0byByZXR1cm4gdGhlIHNlbGVjdGVkIG9wdGlvbiB0byB0aGUg
ZGVmYXVsdCBzZWxlY3RlZCBzdGF0ZSB3aGVuIGNsb25pbmcgb3B0aW9ucworICAgIH0gZWxzZSBp
ZiAoIG5vZGVOYW1lID09PSAiaW5wdXQiIHx8IG5vZGVOYW1lID09PSAidGV4dGFyZWEiICkgewor
ICAgICAgICBkZXN0LmRlZmF1bHRWYWx1ZSA9IHNyYy5kZWZhdWx0VmFsdWU7CisgICAgfQorfQor
CitmdW5jdGlvbiBkb21NYW5pcCggY29sbGVjdGlvbiwgYXJncywgY2FsbGJhY2ssIGlnbm9yZWQg
KSB7CisKKyAgICAvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzCisgICAgYXJncyA9IGNvbmNh
dC5hcHBseSggW10sIGFyZ3MgKTsKKworICAgIHZhciBmcmFnbWVudCwgZmlyc3QsIHNjcmlwdHMs
IGhhc1NjcmlwdHMsIG5vZGUsIGRvYywKKyAgICAgICAgaSA9IDAsCisgICAgICAgIGwgPSBjb2xs
ZWN0aW9uLmxlbmd0aCwKKyAgICAgICAgaU5vQ2xvbmUgPSBsIC0gMSwKKyAgICAgICAgdmFsdWUg
PSBhcmdzWyAwIF0sCisgICAgICAgIGlzRnVuY3Rpb24gPSBqUXVlcnkuaXNGdW5jdGlvbiggdmFs
dWUgKTsKKworICAgIC8vIFdlIGNhbid0IGNsb25lTm9kZSBmcmFnbWVudHMgdGhhdCBjb250YWlu
IGNoZWNrZWQsIGluIFdlYktpdAorICAgIGlmICggaXNGdW5jdGlvbiB8fAorICAgICAgICAgICAg
KCBsID4gMSAmJiB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciICYmCisgICAgICAgICAgICAgICAg
IXN1cHBvcnQuY2hlY2tDbG9uZSAmJiByY2hlY2tlZC50ZXN0KCB2YWx1ZSApICkgKSB7CisgICAg
ICAgIHJldHVybiBjb2xsZWN0aW9uLmVhY2goIGZ1bmN0aW9uKCBpbmRleCApIHsKKyAgICAgICAg
ICAgIHZhciBzZWxmID0gY29sbGVjdGlvbi5lcSggaW5kZXggKTsKKyAgICAgICAgICAgIGlmICgg
aXNGdW5jdGlvbiApIHsKKyAgICAgICAgICAgICAgICBhcmdzWyAwIF0gPSB2YWx1ZS5jYWxsKCB0
aGlzLCBpbmRleCwgc2VsZi5odG1sKCkgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRv
bU1hbmlwKCBzZWxmLCBhcmdzLCBjYWxsYmFjaywgaWdub3JlZCApOworICAgICAgICB9ICk7Cisg
ICAgfQorCisgICAgaWYgKCBsICkgeworICAgICAgICBmcmFnbWVudCA9IGJ1aWxkRnJhZ21lbnQo
IGFyZ3MsIGNvbGxlY3Rpb25bIDAgXS5vd25lckRvY3VtZW50LCBmYWxzZSwgY29sbGVjdGlvbiwg
aWdub3JlZCApOworICAgICAgICBmaXJzdCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7CisKKyAgICAg
ICAgaWYgKCBmcmFnbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSApIHsKKyAgICAgICAgICAg
IGZyYWdtZW50ID0gZmlyc3Q7CisgICAgICAgIH0KKworICAgICAgICAvLyBSZXF1aXJlIGVpdGhl
ciBuZXcgY29udGVudCBvciBhbiBpbnRlcmVzdCBpbiBpZ25vcmVkIGVsZW1lbnRzIHRvIGludm9r
ZSB0aGUgY2FsbGJhY2sKKyAgICAgICAgaWYgKCBmaXJzdCB8fCBpZ25vcmVkICkgeworICAgICAg
ICAgICAgc2NyaXB0cyA9IGpRdWVyeS5tYXAoIGdldEFsbCggZnJhZ21lbnQsICJzY3JpcHQiICks
IGRpc2FibGVTY3JpcHQgKTsKKyAgICAgICAgICAgIGhhc1NjcmlwdHMgPSBzY3JpcHRzLmxlbmd0
aDsKKworICAgICAgICAgICAgLy8gVXNlIHRoZSBvcmlnaW5hbCBmcmFnbWVudCBmb3IgdGhlIGxh
c3QgaXRlbQorICAgICAgICAgICAgLy8gaW5zdGVhZCBvZiB0aGUgZmlyc3QgYmVjYXVzZSBpdCBj
YW4gZW5kIHVwCisgICAgICAgICAgICAvLyBiZWluZyBlbXB0aWVkIGluY29ycmVjdGx5IGluIGNl
cnRhaW4gc2l0dWF0aW9ucyAoIzgwNzApLgorICAgICAgICAgICAgZm9yICggOyBpIDwgbDsgaSsr
ICkgeworICAgICAgICAgICAgICAgIG5vZGUgPSBmcmFnbWVudDsKKworICAgICAgICAgICAgICAg
IGlmICggaSAhPT0gaU5vQ2xvbmUgKSB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBqUXVl
cnkuY2xvbmUoIG5vZGUsIHRydWUsIHRydWUgKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBL
ZWVwIHJlZmVyZW5jZXMgdG8gY2xvbmVkIHNjcmlwdHMgZm9yIGxhdGVyIHJlc3RvcmF0aW9uCisg
ICAgICAgICAgICAgICAgICAgIGlmICggaGFzU2NyaXB0cyApIHsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gU3VwcG9ydDogQW5kcm9pZDw0LjEsIFBoYW50b21KUzwyCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2ll
bnQgV2ViS2l0CisgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkubWVyZ2UoIHNjcmlwdHMs
IGdldEFsbCggbm9kZSwgInNjcmlwdCIgKSApOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbCggY29sbGVjdGlv
blsgaSBdLCBub2RlLCBpICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggaGFz
U2NyaXB0cyApIHsKKyAgICAgICAgICAgICAgICBkb2MgPSBzY3JpcHRzWyBzY3JpcHRzLmxlbmd0
aCAtIDEgXS5vd25lckRvY3VtZW50OworCisgICAgICAgICAgICAgICAgLy8gUmVlbmFibGUgc2Ny
aXB0cworICAgICAgICAgICAgICAgIGpRdWVyeS5tYXAoIHNjcmlwdHMsIHJlc3RvcmVTY3JpcHQg
KTsKKworICAgICAgICAgICAgICAgIC8vIEV2YWx1YXRlIGV4ZWN1dGFibGUgc2NyaXB0cyBvbiBm
aXJzdCBkb2N1bWVudCBpbnNlcnRpb24KKyAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8
IGhhc1NjcmlwdHM7IGkrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IHNjcmlwdHNb
IGkgXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCByc2NyaXB0VHlwZS50ZXN0KCBub2RlLnR5
cGUgfHwgIiIgKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgIWRhdGFQcml2LmFjY2Vzcygg
bm9kZSwgImdsb2JhbEV2YWwiICkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5j
b250YWlucyggZG9jLCBub2RlICkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
bm9kZS5zcmMgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPcHRpb25hbCBB
SkFYIGRlcGVuZGVuY3ksIGJ1dCB3b24ndCBydW4gc2NyaXB0cyBpZiBub3QgcHJlc2VudAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5Ll9ldmFsVXJsICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuX2V2YWxVcmwoIG5vZGUuc3JjICk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZ2xvYmFsRXZhbCggbm9k
ZS50ZXh0Q29udGVudC5yZXBsYWNlKCByY2xlYW5TY3JpcHQsICIiICkgKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBjb2xsZWN0aW9u
OworfQorCitmdW5jdGlvbiByZW1vdmUoIGVsZW0sIHNlbGVjdG9yLCBrZWVwRGF0YSApIHsKKyAg
ICB2YXIgbm9kZSwKKyAgICAgICAgbm9kZXMgPSBzZWxlY3RvciA/IGpRdWVyeS5maWx0ZXIoIHNl
bGVjdG9yLCBlbGVtICkgOiBlbGVtLAorICAgICAgICBpID0gMDsKKworICAgIGZvciAoIDsgKCBu
b2RlID0gbm9kZXNbIGkgXSApICE9IG51bGw7IGkrKyApIHsKKyAgICAgICAgaWYgKCAha2VlcERh
dGEgJiYgbm9kZS5ub2RlVHlwZSA9PT0gMSApIHsKKyAgICAgICAgICAgIGpRdWVyeS5jbGVhbkRh
dGEoIGdldEFsbCggbm9kZSApICk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIG5vZGUucGFy
ZW50Tm9kZSApIHsKKyAgICAgICAgICAgIGlmICgga2VlcERhdGEgJiYgalF1ZXJ5LmNvbnRhaW5z
KCBub2RlLm93bmVyRG9jdW1lbnQsIG5vZGUgKSApIHsKKyAgICAgICAgICAgICAgICBzZXRHbG9i
YWxFdmFsKCBnZXRBbGwoIG5vZGUsICJzY3JpcHQiICkgKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggbm9kZSApOworICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIGVsZW07Cit9CisKK2pRdWVyeS5leHRlbmQoIHsKKyAgICBodG1s
UHJlZmlsdGVyOiBmdW5jdGlvbiggaHRtbCApIHsKKyAgICAgICAgcmV0dXJuIGh0bWwucmVwbGFj
ZSggcnhodG1sVGFnLCAiPCQxPjwvJDI+IiApOworICAgIH0sCisKKyAgICBjbG9uZTogZnVuY3Rp
b24oIGVsZW0sIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkgeworICAgICAgICB2
YXIgaSwgbCwgc3JjRWxlbWVudHMsIGRlc3RFbGVtZW50cywKKyAgICAgICAgICAgIGNsb25lID0g
ZWxlbS5jbG9uZU5vZGUoIHRydWUgKSwKKyAgICAgICAgICAgIGluUGFnZSA9IGpRdWVyeS5jb250
YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICk7CisKKyAgICAgICAgLy8gRml4IElFIGNs
b25pbmcgaXNzdWVzCisgICAgICAgIGlmICggIXN1cHBvcnQubm9DbG9uZUNoZWNrZWQgJiYgKCBl
bGVtLm5vZGVUeXBlID09PSAxIHx8IGVsZW0ubm9kZVR5cGUgPT09IDExICkgJiYKKyAgICAgICAg
ICAgICAgICAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7CisKKyAgICAgICAgICAgIC8vIFdl
IGVzY2hldyBTaXp6bGUgaGVyZSBmb3IgcGVyZm9ybWFuY2UgcmVhc29uczogaHR0cDovL2pzcGVy
Zi5jb20vZ2V0YWxsLXZzLXNpenpsZS8yCisgICAgICAgICAgICBkZXN0RWxlbWVudHMgPSBnZXRB
bGwoIGNsb25lICk7CisgICAgICAgICAgICBzcmNFbGVtZW50cyA9IGdldEFsbCggZWxlbSApOwor
CisgICAgICAgICAgICBmb3IgKCBpID0gMCwgbCA9IHNyY0VsZW1lbnRzLmxlbmd0aDsgaSA8IGw7
IGkrKyApIHsKKyAgICAgICAgICAgICAgICBmaXhJbnB1dCggc3JjRWxlbWVudHNbIGkgXSwgZGVz
dEVsZW1lbnRzWyBpIF0gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8v
IENvcHkgdGhlIGV2ZW50cyBmcm9tIHRoZSBvcmlnaW5hbCB0byB0aGUgY2xvbmUKKyAgICAgICAg
aWYgKCBkYXRhQW5kRXZlbnRzICkgeworICAgICAgICAgICAgaWYgKCBkZWVwRGF0YUFuZEV2ZW50
cyApIHsKKyAgICAgICAgICAgICAgICBzcmNFbGVtZW50cyA9IHNyY0VsZW1lbnRzIHx8IGdldEFs
bCggZWxlbSApOworICAgICAgICAgICAgICAgIGRlc3RFbGVtZW50cyA9IGRlc3RFbGVtZW50cyB8
fCBnZXRBbGwoIGNsb25lICk7CisKKyAgICAgICAgICAgICAgICBmb3IgKCBpID0gMCwgbCA9IHNy
Y0VsZW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgY2xv
bmVDb3B5RXZlbnQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjbG9u
ZUNvcHlFdmVudCggZWxlbSwgY2xvbmUgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIC8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3RvcnkKKyAgICAgICAgZGVz
dEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSwgInNjcmlwdCIgKTsKKyAgICAgICAgaWYgKCBkZXN0
RWxlbWVudHMubGVuZ3RoID4gMCApIHsKKyAgICAgICAgICAgIHNldEdsb2JhbEV2YWwoIGRlc3RF
bGVtZW50cywgIWluUGFnZSAmJiBnZXRBbGwoIGVsZW0sICJzY3JpcHQiICkgKTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIFJldHVybiB0aGUgY2xvbmVkIHNldAorICAgICAgICByZXR1cm4gY2xv
bmU7CisgICAgfSwKKworICAgIGNsZWFuRGF0YTogZnVuY3Rpb24oIGVsZW1zICkgeworICAgICAg
ICB2YXIgZGF0YSwgZWxlbSwgdHlwZSwKKyAgICAgICAgICAgIHNwZWNpYWwgPSBqUXVlcnkuZXZl
bnQuc3BlY2lhbCwKKyAgICAgICAgICAgIGkgPSAwOworCisgICAgICAgIGZvciAoIDsgKCBlbGVt
ID0gZWxlbXNbIGkgXSApICE9PSB1bmRlZmluZWQ7IGkrKyApIHsKKyAgICAgICAgICAgIGlmICgg
YWNjZXB0RGF0YSggZWxlbSApICkgeworICAgICAgICAgICAgICAgIGlmICggKCBkYXRhID0gZWxl
bVsgZGF0YVByaXYuZXhwYW5kbyBdICkgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggZGF0
YS5ldmVudHMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB0eXBlIGluIGRhdGEu
ZXZlbnRzICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc3BlY2lhbFsgdHlw
ZSBdICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQucmVt
b3ZlKCBlbGVtLCB0eXBlICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlz
IGlzIGEgc2hvcnRjdXQgdG8gYXZvaWQgalF1ZXJ5LmV2ZW50LnJlbW92ZSdzIG92ZXJoZWFkCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBkYXRhLmhhbmRsZSAp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIFN1cHBv
cnQ6IENocm9tZSA8PSAzNS00NSsKKyAgICAgICAgICAgICAgICAgICAgLy8gQXNzaWduIHVuZGVm
aW5lZCBpbnN0ZWFkIG9mIHVzaW5nIGRlbGV0ZSwgc2VlIERhdGEjcmVtb3ZlCisgICAgICAgICAg
ICAgICAgICAgIGVsZW1bIGRhdGFQcml2LmV4cGFuZG8gXSA9IHVuZGVmaW5lZDsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCBlbGVtWyBkYXRhVXNlci5leHBhbmRvIF0g
KSB7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogQ2hyb21lIDw9IDM1LTQ1Kwor
ICAgICAgICAgICAgICAgICAgICAvLyBBc3NpZ24gdW5kZWZpbmVkIGluc3RlYWQgb2YgdXNpbmcg
ZGVsZXRlLCBzZWUgRGF0YSNyZW1vdmUKKyAgICAgICAgICAgICAgICAgICAgZWxlbVsgZGF0YVVz
ZXIuZXhwYW5kbyBdID0gdW5kZWZpbmVkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KK30gKTsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworCisgICAg
Ly8gS2VlcCBkb21NYW5pcCBleHBvc2VkIHVudGlsIDMuMCAoZ2gtMjIyNSkKKyAgICBkb21NYW5p
cDogZG9tTWFuaXAsCisKKyAgICBkZXRhY2g6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKKyAgICAg
ICAgcmV0dXJuIHJlbW92ZSggdGhpcywgc2VsZWN0b3IsIHRydWUgKTsKKyAgICB9LAorCisgICAg
cmVtb3ZlOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisgICAgICAgIHJldHVybiByZW1vdmUoIHRo
aXMsIHNlbGVjdG9yICk7CisgICAgfSwKKworICAgIHRleHQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHsK
KyAgICAgICAgcmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkgeworICAgICAg
ICAgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPworICAgICAgICAgICAgICAgIGpRdWVy
eS50ZXh0KCB0aGlzICkgOgorICAgICAgICAgICAgICAgIHRoaXMuZW1wdHkoKS5lYWNoKCBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8
IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLnRleHRDb250ZW50ID0gdmFsdWU7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9ICk7CisgICAgICAgIH0sIG51bGwsIHZhbHVlLCBh
cmd1bWVudHMubGVuZ3RoICk7CisgICAgfSwKKworICAgIGFwcGVuZDogZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSAp
IHsKKyAgICAgICAgICAgIGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBl
ID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkgeworICAgICAgICAgICAgICAgIHZhciB0
YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTsKKyAgICAgICAgICAgICAg
ICB0YXJnZXQuYXBwZW5kQ2hpbGQoIGVsZW0gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSAp
OworICAgIH0sCisKKyAgICBwcmVwZW5kOiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGRv
bU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAg
aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMu
bm9kZVR5cGUgPT09IDkgKSB7CisgICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IG1hbmlwdWxh
dGlvblRhcmdldCggdGhpcywgZWxlbSApOworICAgICAgICAgICAgICAgIHRhcmdldC5pbnNlcnRC
ZWZvcmUoIGVsZW0sIHRhcmdldC5maXJzdENoaWxkICk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0gKTsKKyAgICB9LAorCisgICAgYmVmb3JlOiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
IGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAg
ICAgaWYgKCB0aGlzLnBhcmVudE5vZGUgKSB7CisgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnRO
b2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcyApOworICAgICAgICAgICAgfQorICAgICAgICB9
ICk7CisgICAgfSwKKworICAgIGFmdGVyOiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGRv
bU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAg
aWYgKCB0aGlzLnBhcmVudE5vZGUgKSB7CisgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnROb2Rl
Lmluc2VydEJlZm9yZSggZWxlbSwgdGhpcy5uZXh0U2libGluZyApOworICAgICAgICAgICAgfQor
ICAgICAgICB9ICk7CisgICAgfSwKKworICAgIGVtcHR5OiBmdW5jdGlvbigpIHsKKyAgICAgICAg
dmFyIGVsZW0sCisgICAgICAgICAgICBpID0gMDsKKworICAgICAgICBmb3IgKCA7ICggZWxlbSA9
IHRoaXNbIGkgXSApICE9IG51bGw7IGkrKyApIHsKKyAgICAgICAgICAgIGlmICggZWxlbS5ub2Rl
VHlwZSA9PT0gMSApIHsKKworICAgICAgICAgICAgICAgIC8vIFByZXZlbnQgbWVtb3J5IGxlYWtz
CisgICAgICAgICAgICAgICAgalF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBlbGVtLCBmYWxzZSAp
ICk7CisKKyAgICAgICAgICAgICAgICAvLyBSZW1vdmUgYW55IHJlbWFpbmluZyBub2RlcworICAg
ICAgICAgICAgICAgIGVsZW0udGV4dENvbnRlbnQgPSAiIjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0sCisKKyAgICBjbG9uZTogZnVuY3Rp
b24oIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkgeworICAgICAgICBkYXRhQW5k
RXZlbnRzID0gZGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZmFsc2UgOiBkYXRhQW5kRXZlbnRzOwor
ICAgICAgICBkZWVwRGF0YUFuZEV2ZW50cyA9IGRlZXBEYXRhQW5kRXZlbnRzID09IG51bGwgPyBk
YXRhQW5kRXZlbnRzIDogZGVlcERhdGFBbmRFdmVudHM7CisKKyAgICAgICAgcmV0dXJuIHRoaXMu
bWFwKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHJldHVybiBqUXVlcnkuY2xvbmUoIHRoaXMs
IGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICk7CisgICAgICAgIH0gKTsKKyAgICB9
LAorCisgICAgaHRtbDogZnVuY3Rpb24oIHZhbHVlICkgeworICAgICAgICByZXR1cm4gYWNjZXNz
KCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7CisgICAgICAgICAgICB2YXIgZWxlbSA9IHRoaXNb
IDAgXSB8fCB7fSwKKyAgICAgICAgICAgICAgICBpID0gMCwKKyAgICAgICAgICAgICAgICBsID0g
dGhpcy5sZW5ndGg7CisKKyAgICAgICAgICAgIGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCAmJiBl
bGVtLm5vZGVUeXBlID09PSAxICkgeworICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLmlubmVy
SFRNTDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiB0YWtl
IGEgc2hvcnRjdXQgYW5kIGp1c3QgdXNlIGlubmVySFRNTAorICAgICAgICAgICAgaWYgKCB0eXBl
b2YgdmFsdWUgPT09ICJzdHJpbmciICYmICFybm9Jbm5lcmh0bWwudGVzdCggdmFsdWUgKSAmJgor
ICAgICAgICAgICAgICAgICF3cmFwTWFwWyAoIHJ0YWdOYW1lLmV4ZWMoIHZhbHVlICkgfHwgWyAi
IiwgIiIgXSApWyAxIF0udG9Mb3dlckNhc2UoKSBdICkgeworCisgICAgICAgICAgICAgICAgdmFs
dWUgPSBqUXVlcnkuaHRtbFByZWZpbHRlciggdmFsdWUgKTsKKworICAgICAgICAgICAgICAgIHRy
eSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoIDsgaSA8IGw7IGkrKyApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVsZW0gPSB0aGlzWyBpIF0gfHwge307CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFJlbW92ZSBlbGVtZW50IG5vZGVzIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFr
cworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxl
bSwgZmFsc2UgKSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uaW5uZXJIVE1M
ID0gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICBlbGVtID0gMDsKKworICAgICAgICAgICAgICAgIC8v
IElmIHVzaW5nIGlubmVySFRNTCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB1c2UgdGhlIGZhbGxiYWNr
IG1ldGhvZAorICAgICAgICAgICAgICAgIH0gY2F0Y2ggKCBlICkge30KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKCBlbGVtICkgeworICAgICAgICAgICAgICAgIHRoaXMuZW1wdHko
KS5hcHBlbmQoIHZhbHVlICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sIG51bGwsIHZhbHVl
LCBhcmd1bWVudHMubGVuZ3RoICk7CisgICAgfSwKKworICAgIHJlcGxhY2VXaXRoOiBmdW5jdGlv
bigpIHsKKyAgICAgICAgdmFyIGlnbm9yZWQgPSBbXTsKKworICAgICAgICAvLyBNYWtlIHRoZSBj
aGFuZ2VzLCByZXBsYWNpbmcgZWFjaCBub24taWdub3JlZCBjb250ZXh0IGVsZW1lbnQgd2l0aCB0
aGUgbmV3IGNvbnRlbnQKKyAgICAgICAgcmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMs
IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50
Tm9kZTsKKworICAgICAgICAgICAgaWYgKCBqUXVlcnkuaW5BcnJheSggdGhpcywgaWdub3JlZCAp
IDwgMCApIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIHRoaXMg
KSApOworICAgICAgICAgICAgICAgIGlmICggcGFyZW50ICkgeworICAgICAgICAgICAgICAgICAg
ICBwYXJlbnQucmVwbGFjZUNoaWxkKCBlbGVtLCB0aGlzICk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgIC8vIEZvcmNlIGNhbGxiYWNrIGludm9jYXRpb24KKyAg
ICAgICAgfSwgaWdub3JlZCApOworICAgIH0KK30gKTsKKworalF1ZXJ5LmVhY2goIHsKKyAgICBh
cHBlbmRUbzogImFwcGVuZCIsCisgICAgcHJlcGVuZFRvOiAicHJlcGVuZCIsCisgICAgaW5zZXJ0
QmVmb3JlOiAiYmVmb3JlIiwKKyAgICBpbnNlcnRBZnRlcjogImFmdGVyIiwKKyAgICByZXBsYWNl
QWxsOiAicmVwbGFjZVdpdGgiCit9LCBmdW5jdGlvbiggbmFtZSwgb3JpZ2luYWwgKSB7CisgICAg
alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisgICAgICAgIHZhciBl
bGVtcywKKyAgICAgICAgICAgIHJldCA9IFtdLAorICAgICAgICAgICAgaW5zZXJ0ID0galF1ZXJ5
KCBzZWxlY3RvciApLAorICAgICAgICAgICAgbGFzdCA9IGluc2VydC5sZW5ndGggLSAxLAorICAg
ICAgICAgICAgaSA9IDA7CisKKyAgICAgICAgZm9yICggOyBpIDw9IGxhc3Q7IGkrKyApIHsKKyAg
ICAgICAgICAgIGVsZW1zID0gaSA9PT0gbGFzdCA/IHRoaXMgOiB0aGlzLmNsb25lKCB0cnVlICk7
CisgICAgICAgICAgICBqUXVlcnkoIGluc2VydFsgaSBdIClbIG9yaWdpbmFsIF0oIGVsZW1zICk7
CisKKyAgICAgICAgICAgIC8vIFN1cHBvcnQ6IFF0V2ViS2l0CisgICAgICAgICAgICAvLyAuZ2V0
KCkgYmVjYXVzZSBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzCisgICAgICAgICAgICBw
dXNoLmFwcGx5KCByZXQsIGVsZW1zLmdldCgpICk7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gdGhpcy5wdXNoU3RhY2soIHJldCApOworICAgIH07Cit9ICk7CisKKwordmFyIGlmcmFtZSwK
KyAgICBlbGVtZGlzcGxheSA9IHsKKworICAgICAgICAvLyBTdXBwb3J0OiBGaXJlZm94CisgICAg
ICAgIC8vIFdlIGhhdmUgdG8gcHJlLWRlZmluZSB0aGVzZSB2YWx1ZXMgZm9yIEZGICgjMTAyMjcp
CisgICAgICAgIEhUTUw6ICJibG9jayIsCisgICAgICAgIEJPRFk6ICJibG9jayIKKyAgICB9Owor
CisvKioKKyAqIFJldHJpZXZlIHRoZSBhY3R1YWwgZGlzcGxheSBvZiBhIGVsZW1lbnQKKyAqIEBw
YXJhbSB7U3RyaW5nfSBuYW1lIG5vZGVOYW1lIG9mIHRoZSBlbGVtZW50CisgKiBAcGFyYW0ge09i
amVjdH0gZG9jIERvY3VtZW50IG9iamVjdAorICovCisKKy8vIENhbGxlZCBvbmx5IGZyb20gd2l0
aGluIGRlZmF1bHREaXNwbGF5CitmdW5jdGlvbiBhY3R1YWxEaXNwbGF5KCBuYW1lLCBkb2MgKSB7
CisgICAgdmFyIGVsZW0gPSBqUXVlcnkoIGRvYy5jcmVhdGVFbGVtZW50KCBuYW1lICkgKS5hcHBl
bmRUbyggZG9jLmJvZHkgKSwKKworICAgICAgICBkaXNwbGF5ID0galF1ZXJ5LmNzcyggZWxlbVsg
MCBdLCAiZGlzcGxheSIgKTsKKworICAgIC8vIFdlIGRvbid0IGhhdmUgYW55IGRhdGEgc3RvcmVk
IG9uIHRoZSBlbGVtZW50LAorICAgIC8vIHNvIHVzZSAiZGV0YWNoIiBtZXRob2QgYXMgZmFzdCB3
YXkgdG8gZ2V0IHJpZCBvZiB0aGUgZWxlbWVudAorICAgIGVsZW0uZGV0YWNoKCk7CisKKyAgICBy
ZXR1cm4gZGlzcGxheTsKK30KKworLyoqCisgKiBUcnkgdG8gZGV0ZXJtaW5lIHRoZSBkZWZhdWx0
IGRpc3BsYXkgdmFsdWUgb2YgYW4gZWxlbWVudAorICogQHBhcmFtIHtTdHJpbmd9IG5vZGVOYW1l
CisgKi8KK2Z1bmN0aW9uIGRlZmF1bHREaXNwbGF5KCBub2RlTmFtZSApIHsKKyAgICB2YXIgZG9j
ID0gZG9jdW1lbnQsCisgICAgICAgIGRpc3BsYXkgPSBlbGVtZGlzcGxheVsgbm9kZU5hbWUgXTsK
KworICAgIGlmICggIWRpc3BsYXkgKSB7CisgICAgICAgIGRpc3BsYXkgPSBhY3R1YWxEaXNwbGF5
KCBub2RlTmFtZSwgZG9jICk7CisKKyAgICAgICAgLy8gSWYgdGhlIHNpbXBsZSB3YXkgZmFpbHMs
IHJlYWQgZnJvbSBpbnNpZGUgYW4gaWZyYW1lCisgICAgICAgIGlmICggZGlzcGxheSA9PT0gIm5v
bmUiIHx8ICFkaXNwbGF5ICkgeworCisgICAgICAgICAgICAvLyBVc2UgdGhlIGFscmVhZHktY3Jl
YXRlZCBpZnJhbWUgaWYgcG9zc2libGUKKyAgICAgICAgICAgIGlmcmFtZSA9ICggaWZyYW1lIHx8
IGpRdWVyeSggIjxpZnJhbWUgZnJhbWVib3JkZXI9JzAnIHdpZHRoPScwJyBoZWlnaHQ9JzAnLz4i
ICkgKQorICAgICAgICAgICAgICAgIC5hcHBlbmRUbyggZG9jLmRvY3VtZW50RWxlbWVudCApOwor
CisgICAgICAgICAgICAvLyBBbHdheXMgd3JpdGUgYSBuZXcgSFRNTCBza2VsZXRvbiBzbyBXZWJr
aXQgYW5kIEZpcmVmb3ggZG9uJ3QgY2hva2Ugb24gcmV1c2UKKyAgICAgICAgICAgIGRvYyA9IGlm
cmFtZVsgMCBdLmNvbnRlbnREb2N1bWVudDsKKworICAgICAgICAgICAgLy8gU3VwcG9ydDogSUUK
KyAgICAgICAgICAgIGRvYy53cml0ZSgpOworICAgICAgICAgICAgZG9jLmNsb3NlKCk7CisKKyAg
ICAgICAgICAgIGRpc3BsYXkgPSBhY3R1YWxEaXNwbGF5KCBub2RlTmFtZSwgZG9jICk7CisgICAg
ICAgICAgICBpZnJhbWUuZGV0YWNoKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBTdG9yZSB0
aGUgY29ycmVjdCBkZWZhdWx0IGRpc3BsYXkKKyAgICAgICAgZWxlbWRpc3BsYXlbIG5vZGVOYW1l
IF0gPSBkaXNwbGF5OworICAgIH0KKworICAgIHJldHVybiBkaXNwbGF5OworfQordmFyIHJtYXJn
aW4gPSAoIC9ebWFyZ2luLyApOworCit2YXIgcm51bW5vbnB4ID0gbmV3IFJlZ0V4cCggIl4oIiAr
IHBudW0gKyAiKSg/IXB4KVthLXolXSskIiwgImkiICk7CisKK3ZhciBnZXRTdHlsZXMgPSBmdW5j
dGlvbiggZWxlbSApIHsKKworICAgICAgICAvLyBTdXBwb3J0OiBJRTw9MTErLCBGaXJlZm94PD0z
MCsgKCMxNTA5OCwgIzE0MTUwKQorICAgICAgICAvLyBJRSB0aHJvd3Mgb24gZWxlbWVudHMgY3Jl
YXRlZCBpbiBwb3B1cHMKKyAgICAgICAgLy8gRkYgbWVhbndoaWxlIHRocm93cyBvbiBmcmFtZSBl
bGVtZW50cyB0aHJvdWdoICJkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlIgorICAgICAgICB2
YXIgdmlldyA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldzsKKworICAgICAgICBpZiAo
ICF2aWV3IHx8ICF2aWV3Lm9wZW5lciApIHsKKyAgICAgICAgICAgIHZpZXcgPSB3aW5kb3c7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gdmlldy5nZXRDb21wdXRlZFN0eWxlKCBlbGVtICk7
CisgICAgfTsKKwordmFyIHN3YXAgPSBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgY2FsbGJhY2ss
IGFyZ3MgKSB7CisgICAgdmFyIHJldCwgbmFtZSwKKyAgICAgICAgb2xkID0ge307CisKKyAgICAv
LyBSZW1lbWJlciB0aGUgb2xkIHZhbHVlcywgYW5kIGluc2VydCB0aGUgbmV3IG9uZXMKKyAgICBm
b3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7CisgICAgICAgIG9sZFsgbmFtZSBdID0gZWxlbS5zdHls
ZVsgbmFtZSBdOworICAgICAgICBlbGVtLnN0eWxlWyBuYW1lIF0gPSBvcHRpb25zWyBuYW1lIF07
CisgICAgfQorCisgICAgcmV0ID0gY2FsbGJhY2suYXBwbHkoIGVsZW0sIGFyZ3MgfHwgW10gKTsK
KworICAgIC8vIFJldmVydCB0aGUgb2xkIHZhbHVlcworICAgIGZvciAoIG5hbWUgaW4gb3B0aW9u
cyApIHsKKyAgICAgICAgZWxlbS5zdHlsZVsgbmFtZSBdID0gb2xkWyBuYW1lIF07CisgICAgfQor
CisgICAgcmV0dXJuIHJldDsKK307CisKKwordmFyIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50
LmRvY3VtZW50RWxlbWVudDsKKworCisKKyggZnVuY3Rpb24oKSB7CisgICAgdmFyIHBpeGVsUG9z
aXRpb25WYWwsIGJveFNpemluZ1JlbGlhYmxlVmFsLCBwaXhlbE1hcmdpblJpZ2h0VmFsLCByZWxp
YWJsZU1hcmdpbkxlZnRWYWwsCisgICAgICAgIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoICJkaXYiICksCisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJk
aXYiICk7CisKKyAgICAvLyBGaW5pc2ggZWFybHkgaW4gbGltaXRlZCAobm9uLWJyb3dzZXIpIGVu
dmlyb25tZW50cworICAgIGlmICggIWRpdi5zdHlsZSApIHsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIFN1cHBvcnQ6IElFOS0xMSsKKyAgICAvLyBTdHlsZSBvZiBjbG9uZWQgZWxl
bWVudCBhZmZlY3RzIHNvdXJjZSBlbGVtZW50IGNsb25lZCAoIzg5MDgpCisgICAgZGl2LnN0eWxl
LmJhY2tncm91bmRDbGlwID0gImNvbnRlbnQtYm94IjsKKyAgICBkaXYuY2xvbmVOb2RlKCB0cnVl
ICkuc3R5bGUuYmFja2dyb3VuZENsaXAgPSAiIjsKKyAgICBzdXBwb3J0LmNsZWFyQ2xvbmVTdHls
ZSA9IGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9PT0gImNvbnRlbnQtYm94IjsKKworICAgIGNv
bnRhaW5lci5zdHlsZS5jc3NUZXh0ID0gImJvcmRlcjowO3dpZHRoOjhweDtoZWlnaHQ6MDt0b3A6
MDtsZWZ0Oi05OTk5cHg7IiArCisgICAgICAgICJwYWRkaW5nOjA7bWFyZ2luLXRvcDoxcHg7cG9z
aXRpb246YWJzb2x1dGUiOworICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCggZGl2ICk7CisKKyAg
ICAvLyBFeGVjdXRpbmcgYm90aCBwaXhlbFBvc2l0aW9uICYgYm94U2l6aW5nUmVsaWFibGUgdGVz
dHMgcmVxdWlyZSBvbmx5IG9uZSBsYXlvdXQKKyAgICAvLyBzbyB0aGV5J3JlIGV4ZWN1dGVkIGF0
IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSB0aGUgc2Vjb25kIGNvbXB1dGF0aW9uLgorICAgIGZ1bmN0
aW9uIGNvbXB1dGVTdHlsZVRlc3RzKCkgeworICAgICAgICBkaXYuc3R5bGUuY3NzVGV4dCA9CisK
KyAgICAgICAgICAgIC8vIFN1cHBvcnQ6IEZpcmVmb3g8MjksIEFuZHJvaWQgMi4zCisgICAgICAg
ICAgICAvLyBWZW5kb3ItcHJlZml4IGJveC1zaXppbmcKKyAgICAgICAgICAgICItd2Via2l0LWJv
eC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5n
OmJvcmRlci1ib3g7IiArCisgICAgICAgICAgICAicG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpi
bG9jazsiICsKKyAgICAgICAgICAgICJtYXJnaW46YXV0bztib3JkZXI6MXB4O3BhZGRpbmc6MXB4
OyIgKworICAgICAgICAgICAgInRvcDoxJTt3aWR0aDo1MCUiOworICAgICAgICBkaXYuaW5uZXJI
VE1MID0gIiI7CisgICAgICAgIGRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZCggY29udGFpbmVy
ICk7CisKKyAgICAgICAgdmFyIGRpdlN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoIGRp
diApOworICAgICAgICBwaXhlbFBvc2l0aW9uVmFsID0gZGl2U3R5bGUudG9wICE9PSAiMSUiOwor
ICAgICAgICByZWxpYWJsZU1hcmdpbkxlZnRWYWwgPSBkaXZTdHlsZS5tYXJnaW5MZWZ0ID09PSAi
MnB4IjsKKyAgICAgICAgYm94U2l6aW5nUmVsaWFibGVWYWwgPSBkaXZTdHlsZS53aWR0aCA9PT0g
IjRweCI7CisKKyAgICAgICAgLy8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seQorICAg
ICAgICAvLyBTb21lIHN0eWxlcyBjb21lIGJhY2sgd2l0aCBwZXJjZW50YWdlIHZhbHVlcywgZXZl
biB0aG91Z2ggdGhleSBzaG91bGRuJ3QKKyAgICAgICAgZGl2LnN0eWxlLm1hcmdpblJpZ2h0ID0g
IjUwJSI7CisgICAgICAgIHBpeGVsTWFyZ2luUmlnaHRWYWwgPSBkaXZTdHlsZS5tYXJnaW5SaWdo
dCA9PT0gIjRweCI7CisKKyAgICAgICAgZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKCBjb250
YWluZXIgKTsKKyAgICB9CisKKyAgICBqUXVlcnkuZXh0ZW5kKCBzdXBwb3J0LCB7CisgICAgICAg
IHBpeGVsUG9zaXRpb246IGZ1bmN0aW9uKCkgeworCisgICAgICAgICAgICAvLyBUaGlzIHRlc3Qg
aXMgZXhlY3V0ZWQgb25seSBvbmNlIGJ1dCB3ZSBzdGlsbCBkbyBtZW1vaXppbmcKKyAgICAgICAg
ICAgIC8vIHNpbmNlIHdlIGNhbiB1c2UgdGhlIGJveFNpemluZ1JlbGlhYmxlIHByZS1jb21wdXRp
bmcuCisgICAgICAgICAgICAvLyBObyBuZWVkIHRvIGNoZWNrIGlmIHRoZSB0ZXN0IHdhcyBhbHJl
YWR5IHBlcmZvcm1lZCwgdGhvdWdoLgorICAgICAgICAgICAgY29tcHV0ZVN0eWxlVGVzdHMoKTsK
KyAgICAgICAgICAgIHJldHVybiBwaXhlbFBvc2l0aW9uVmFsOworICAgICAgICB9LAorICAgICAg
ICBib3hTaXppbmdSZWxpYWJsZTogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpZiAoIGJveFNp
emluZ1JlbGlhYmxlVmFsID09IG51bGwgKSB7CisgICAgICAgICAgICAgICAgY29tcHV0ZVN0eWxl
VGVzdHMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBib3hTaXppbmdSZWxp
YWJsZVZhbDsKKyAgICAgICAgfSwKKyAgICAgICAgcGl4ZWxNYXJnaW5SaWdodDogZnVuY3Rpb24o
KSB7CisKKyAgICAgICAgICAgIC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wLTQuMworICAgICAgICAg
ICAgLy8gV2UncmUgY2hlY2tpbmcgZm9yIGJveFNpemluZ1JlbGlhYmxlVmFsIGhlcmUgaW5zdGVh
ZCBvZiBwaXhlbE1hcmdpblJpZ2h0VmFsCisgICAgICAgICAgICAvLyBzaW5jZSB0aGF0IGNvbXBy
ZXNzZXMgYmV0dGVyIGFuZCB0aGV5J3JlIGNvbXB1dGVkIHRvZ2V0aGVyIGFueXdheS4KKyAgICAg
ICAgICAgIGlmICggYm94U2l6aW5nUmVsaWFibGVWYWwgPT0gbnVsbCApIHsKKyAgICAgICAgICAg
ICAgICBjb21wdXRlU3R5bGVUZXN0cygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuIHBpeGVsTWFyZ2luUmlnaHRWYWw7CisgICAgICAgIH0sCisgICAgICAgIHJlbGlhYmxlTWFy
Z2luTGVmdDogZnVuY3Rpb24oKSB7CisKKyAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElFIDw9OCBv
bmx5LCBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5LCBGaXJlZm94IDw9MyAtIDM3CisgICAgICAgICAg
ICBpZiAoIGJveFNpemluZ1JlbGlhYmxlVmFsID09IG51bGwgKSB7CisgICAgICAgICAgICAgICAg
Y29tcHV0ZVN0eWxlVGVzdHMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBy
ZWxpYWJsZU1hcmdpbkxlZnRWYWw7CisgICAgICAgIH0sCisgICAgICAgIHJlbGlhYmxlTWFyZ2lu
UmlnaHQ6IGZ1bmN0aW9uKCkgeworCisgICAgICAgICAgICAvLyBTdXBwb3J0OiBBbmRyb2lkIDIu
MworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZGl2IHdpdGggZXhwbGljaXQgd2lkdGggYW5kIG5v
IG1hcmdpbi1yaWdodCBpbmNvcnJlY3RseQorICAgICAgICAgICAgLy8gZ2V0cyBjb21wdXRlZCBt
YXJnaW4tcmlnaHQgYmFzZWQgb24gd2lkdGggb2YgY29udGFpbmVyLiAoIzMzMzMpCisgICAgICAg
ICAgICAvLyBXZWJLaXQgQnVnIDEzMzQzIC0gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHdyb25n
IHZhbHVlIGZvciBtYXJnaW4tcmlnaHQKKyAgICAgICAgICAgIC8vIFRoaXMgc3VwcG9ydCBmdW5j
dGlvbiBpcyBvbmx5IGV4ZWN1dGVkIG9uY2Ugc28gbm8gbWVtb2l6aW5nIGlzIG5lZWRlZC4KKyAg
ICAgICAgICAgIHZhciByZXQsCisgICAgICAgICAgICAgICAgbWFyZ2luRGl2ID0gZGl2LmFwcGVu
ZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiZGl2IiApICk7CisKKyAgICAgICAgICAg
IC8vIFJlc2V0IENTUzogYm94LXNpemluZzsgZGlzcGxheTsgbWFyZ2luOyBib3JkZXI7IHBhZGRp
bmcKKyAgICAgICAgICAgIG1hcmdpbkRpdi5zdHlsZS5jc3NUZXh0ID0gZGl2LnN0eWxlLmNzc1Rl
eHQgPQorCisgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogQW5kcm9pZCAyLjMKKyAgICAgICAg
ICAgICAgICAvLyBWZW5kb3ItcHJlZml4IGJveC1zaXppbmcKKyAgICAgICAgICAgICAgICAiLXdl
YmtpdC1ib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JveC1zaXppbmc6Y29udGVudC1ib3g7IiArCisg
ICAgICAgICAgICAgICAgImRpc3BsYXk6YmxvY2s7bWFyZ2luOjA7Ym9yZGVyOjA7cGFkZGluZzow
IjsKKyAgICAgICAgICAgIG1hcmdpbkRpdi5zdHlsZS5tYXJnaW5SaWdodCA9IG1hcmdpbkRpdi5z
dHlsZS53aWR0aCA9ICIwIjsKKyAgICAgICAgICAgIGRpdi5zdHlsZS53aWR0aCA9ICIxcHgiOwor
ICAgICAgICAgICAgZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKCBjb250YWluZXIgKTsKKwor
ICAgICAgICAgICAgcmV0ID0gIXBhcnNlRmxvYXQoIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBt
YXJnaW5EaXYgKS5tYXJnaW5SaWdodCApOworCisgICAgICAgICAgICBkb2N1bWVudEVsZW1lbnQu
cmVtb3ZlQ2hpbGQoIGNvbnRhaW5lciApOworICAgICAgICAgICAgZGl2LnJlbW92ZUNoaWxkKCBt
YXJnaW5EaXYgKTsKKworICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQorICAgIH0g
KTsKK30gKSgpOworCisKK2Z1bmN0aW9uIGN1ckNTUyggZWxlbSwgbmFtZSwgY29tcHV0ZWQgKSB7
CisgICAgdmFyIHdpZHRoLCBtaW5XaWR0aCwgbWF4V2lkdGgsIHJldCwKKyAgICAgICAgc3R5bGUg
PSBlbGVtLnN0eWxlOworCisgICAgY29tcHV0ZWQgPSBjb21wdXRlZCB8fCBnZXRTdHlsZXMoIGVs
ZW0gKTsKKyAgICByZXQgPSBjb21wdXRlZCA/IGNvbXB1dGVkLmdldFByb3BlcnR5VmFsdWUoIG5h
bWUgKSB8fCBjb21wdXRlZFsgbmFtZSBdIDogdW5kZWZpbmVkOworCisgICAgLy8gU3VwcG9ydDog
T3BlcmEgMTIuMXggb25seQorICAgIC8vIEZhbGwgYmFjayB0byBzdHlsZSBldmVuIHdpdGhvdXQg
Y29tcHV0ZWQKKyAgICAvLyBjb21wdXRlZCBpcyB1bmRlZmluZWQgZm9yIGVsZW1zIG9uIGRvY3Vt
ZW50IGZyYWdtZW50cworICAgIGlmICggKCByZXQgPT09ICIiIHx8IHJldCA9PT0gdW5kZWZpbmVk
ICkgJiYgIWpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICkgKSB7Cisg
ICAgICAgIHJldCA9IGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSApOworICAgIH0KKworICAgIC8v
IFN1cHBvcnQ6IElFOQorICAgIC8vIGdldFByb3BlcnR5VmFsdWUgaXMgb25seSBuZWVkZWQgZm9y
IC5jc3MoJ2ZpbHRlcicpICgjMTI1MzcpCisgICAgaWYgKCBjb21wdXRlZCApIHsKKworICAgICAg
ICAvLyBBIHRyaWJ1dGUgdG8gdGhlICJhd2Vzb21lIGhhY2sgYnkgRGVhbiBFZHdhcmRzIgorICAg
ICAgICAvLyBBbmRyb2lkIEJyb3dzZXIgcmV0dXJucyBwZXJjZW50YWdlIGZvciBzb21lIHZhbHVl
cywKKyAgICAgICAgLy8gYnV0IHdpZHRoIHNlZW1zIHRvIGJlIHJlbGlhYmx5IHBpeGVscy4KKyAg
ICAgICAgLy8gVGhpcyBpcyBhZ2FpbnN0IHRoZSBDU1NPTSBkcmFmdCBzcGVjOgorICAgICAgICAv
LyBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3NvbS8jcmVzb2x2ZWQtdmFsdWVzCisgICAgICAg
IGlmICggIXN1cHBvcnQucGl4ZWxNYXJnaW5SaWdodCgpICYmIHJudW1ub25weC50ZXN0KCByZXQg
KSAmJiBybWFyZ2luLnRlc3QoIG5hbWUgKSApIHsKKworICAgICAgICAgICAgLy8gUmVtZW1iZXIg
dGhlIG9yaWdpbmFsIHZhbHVlcworICAgICAgICAgICAgd2lkdGggPSBzdHlsZS53aWR0aDsKKyAg
ICAgICAgICAgIG1pbldpZHRoID0gc3R5bGUubWluV2lkdGg7CisgICAgICAgICAgICBtYXhXaWR0
aCA9IHN0eWxlLm1heFdpZHRoOworCisgICAgICAgICAgICAvLyBQdXQgaW4gdGhlIG5ldyB2YWx1
ZXMgdG8gZ2V0IGEgY29tcHV0ZWQgdmFsdWUgb3V0CisgICAgICAgICAgICBzdHlsZS5taW5XaWR0
aCA9IHN0eWxlLm1heFdpZHRoID0gc3R5bGUud2lkdGggPSByZXQ7CisgICAgICAgICAgICByZXQg
PSBjb21wdXRlZC53aWR0aDsKKworICAgICAgICAgICAgLy8gUmV2ZXJ0IHRoZSBjaGFuZ2VkIHZh
bHVlcworICAgICAgICAgICAgc3R5bGUud2lkdGggPSB3aWR0aDsKKyAgICAgICAgICAgIHN0eWxl
Lm1pbldpZHRoID0gbWluV2lkdGg7CisgICAgICAgICAgICBzdHlsZS5tYXhXaWR0aCA9IG1heFdp
ZHRoOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJldCAhPT0gdW5kZWZpbmVkID8K
KworICAgICAgICAvLyBTdXBwb3J0OiBJRTktMTErCisgICAgICAgIC8vIElFIHJldHVybnMgeklu
ZGV4IHZhbHVlIGFzIGFuIGludGVnZXIuCisgICAgICAgIHJldCArICIiIDoKKyAgICAgICAgcmV0
OworfQorCisKK2Z1bmN0aW9uIGFkZEdldEhvb2tJZiggY29uZGl0aW9uRm4sIGhvb2tGbiApIHsK
KworICAgIC8vIERlZmluZSB0aGUgaG9vaywgd2UnbGwgY2hlY2sgb24gdGhlIGZpcnN0IHJ1biBp
ZiBpdCdzIHJlYWxseSBuZWVkZWQuCisgICAgcmV0dXJuIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgIGlmICggY29uZGl0aW9uRm4oKSApIHsKKworICAgICAgICAgICAg
ICAgIC8vIEhvb2sgbm90IG5lZWRlZCAob3IgaXQncyBub3QgcG9zc2libGUgdG8gdXNlIGl0IGR1
ZQorICAgICAgICAgICAgICAgIC8vIHRvIG1pc3NpbmcgZGVwZW5kZW5jeSksIHJlbW92ZSBpdC4K
KyAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5nZXQ7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBIb29rIG5lZWRlZDsgcmVkZWZpbmUg
aXQgc28gdGhhdCB0aGUgc3VwcG9ydCB0ZXN0IGlzIG5vdCBleGVjdXRlZCBhZ2Fpbi4KKyAgICAg
ICAgICAgIHJldHVybiAoIHRoaXMuZ2V0ID0gaG9va0ZuICkuYXBwbHkoIHRoaXMsIGFyZ3VtZW50
cyApOworICAgICAgICB9CisgICAgfTsKK30KKworCit2YXIKKworICAgIC8vIFN3YXBwYWJsZSBp
ZiBkaXNwbGF5IGlzIG5vbmUgb3Igc3RhcnRzIHdpdGggdGFibGUKKyAgICAvLyBleGNlcHQgInRh
YmxlIiwgInRhYmxlLWNlbGwiLCBvciAidGFibGUtY2FwdGlvbiIKKyAgICAvLyBTZWUgaGVyZSBm
b3IgZGlzcGxheSB2YWx1ZXM6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2Rv
Y3MvQ1NTL2Rpc3BsYXkKKyAgICByZGlzcGxheXN3YXAgPSAvXihub25lfHRhYmxlKD8hLWNbZWFd
KS4rKS8sCisKKyAgICBjc3NTaG93ID0geyBwb3NpdGlvbjogImFic29sdXRlIiwgdmlzaWJpbGl0
eTogImhpZGRlbiIsIGRpc3BsYXk6ICJibG9jayIgfSwKKyAgICBjc3NOb3JtYWxUcmFuc2Zvcm0g
PSB7CisgICAgICAgIGxldHRlclNwYWNpbmc6ICIwIiwKKyAgICAgICAgZm9udFdlaWdodDogIjQw
MCIKKyAgICB9LAorCisgICAgY3NzUHJlZml4ZXMgPSBbICJXZWJraXQiLCAiTyIsICJNb3oiLCAi
bXMiIF0sCisgICAgZW1wdHlTdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJkaXYiICku
c3R5bGU7CisKKy8vIFJldHVybiBhIGNzcyBwcm9wZXJ0eSBtYXBwZWQgdG8gYSBwb3RlbnRpYWxs
eSB2ZW5kb3IgcHJlZml4ZWQgcHJvcGVydHkKK2Z1bmN0aW9uIHZlbmRvclByb3BOYW1lKCBuYW1l
ICkgeworCisgICAgLy8gU2hvcnRjdXQgZm9yIG5hbWVzIHRoYXQgYXJlIG5vdCB2ZW5kb3IgcHJl
Zml4ZWQKKyAgICBpZiAoIG5hbWUgaW4gZW1wdHlTdHlsZSApIHsKKyAgICAgICAgcmV0dXJuIG5h
bWU7CisgICAgfQorCisgICAgLy8gQ2hlY2sgZm9yIHZlbmRvciBwcmVmaXhlZCBuYW1lcworICAg
IHZhciBjYXBOYW1lID0gbmFtZVsgMCBdLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKCAxICks
CisgICAgICAgIGkgPSBjc3NQcmVmaXhlcy5sZW5ndGg7CisKKyAgICB3aGlsZSAoIGktLSApIHsK
KyAgICAgICAgbmFtZSA9IGNzc1ByZWZpeGVzWyBpIF0gKyBjYXBOYW1lOworICAgICAgICBpZiAo
IG5hbWUgaW4gZW1wdHlTdHlsZSApIHsKKyAgICAgICAgICAgIHJldHVybiBuYW1lOworICAgICAg
ICB9CisgICAgfQorfQorCitmdW5jdGlvbiBzZXRQb3NpdGl2ZU51bWJlciggZWxlbSwgdmFsdWUs
IHN1YnRyYWN0ICkgeworCisgICAgLy8gQW55IHJlbGF0aXZlICgrLy0pIHZhbHVlcyBoYXZlIGFs
cmVhZHkgYmVlbgorICAgIC8vIG5vcm1hbGl6ZWQgYXQgdGhpcyBwb2ludAorICAgIHZhciBtYXRj
aGVzID0gcmNzc051bS5leGVjKCB2YWx1ZSApOworICAgIHJldHVybiBtYXRjaGVzID8KKworICAg
ICAgICAvLyBHdWFyZCBhZ2FpbnN0IHVuZGVmaW5lZCAic3VidHJhY3QiLCBlLmcuLCB3aGVuIHVz
ZWQgYXMgaW4gY3NzSG9va3MKKyAgICAgICAgTWF0aC5tYXgoIDAsIG1hdGNoZXNbIDIgXSAtICgg
c3VidHJhY3QgfHwgMCApICkgKyAoIG1hdGNoZXNbIDMgXSB8fCAicHgiICkgOgorICAgICAgICB2
YWx1ZTsKK30KKworZnVuY3Rpb24gYXVnbWVudFdpZHRoT3JIZWlnaHQoIGVsZW0sIG5hbWUsIGV4
dHJhLCBpc0JvcmRlckJveCwgc3R5bGVzICkgeworICAgIHZhciBpID0gZXh0cmEgPT09ICggaXNC
b3JkZXJCb3ggPyAiYm9yZGVyIiA6ICJjb250ZW50IiApID8KKworICAgICAgICAvLyBJZiB3ZSBh
bHJlYWR5IGhhdmUgdGhlIHJpZ2h0IG1lYXN1cmVtZW50LCBhdm9pZCBhdWdtZW50YXRpb24KKyAg
ICAgICAgNCA6CisKKyAgICAgICAgLy8gT3RoZXJ3aXNlIGluaXRpYWxpemUgZm9yIGhvcml6b250
YWwgb3IgdmVydGljYWwgcHJvcGVydGllcworICAgICAgICBuYW1lID09PSAid2lkdGgiID8gMSA6
IDAsCisKKyAgICAgICAgdmFsID0gMDsKKworICAgIGZvciAoIDsgaSA8IDQ7IGkgKz0gMiApIHsK
KworICAgICAgICAvLyBCb3RoIGJveCBtb2RlbHMgZXhjbHVkZSBtYXJnaW4sIHNvIGFkZCBpdCBp
ZiB3ZSB3YW50IGl0CisgICAgICAgIGlmICggZXh0cmEgPT09ICJtYXJnaW4iICkgeworICAgICAg
ICAgICAgdmFsICs9IGpRdWVyeS5jc3MoIGVsZW0sIGV4dHJhICsgY3NzRXhwYW5kWyBpIF0sIHRy
dWUsIHN0eWxlcyApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBpc0JvcmRlckJveCApIHsK
KworICAgICAgICAgICAgLy8gYm9yZGVyLWJveCBpbmNsdWRlcyBwYWRkaW5nLCBzbyByZW1vdmUg
aXQgaWYgd2Ugd2FudCBjb250ZW50CisgICAgICAgICAgICBpZiAoIGV4dHJhID09PSAiY29udGVu
dCIgKSB7CisgICAgICAgICAgICAgICAgdmFsIC09IGpRdWVyeS5jc3MoIGVsZW0sICJwYWRkaW5n
IiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgZXh0cmEgaXNuJ3QgYm9yZGVyIG5vciBtYXJnaW4s
IHNvIHJlbW92ZSBib3JkZXIKKyAgICAgICAgICAgIGlmICggZXh0cmEgIT09ICJtYXJnaW4iICkg
eworICAgICAgICAgICAgICAgIHZhbCAtPSBqUXVlcnkuY3NzKCBlbGVtLCAiYm9yZGVyIiArIGNz
c0V4cGFuZFsgaSBdICsgIldpZHRoIiwgdHJ1ZSwgc3R5bGVzICk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIGV4dHJhIGlz
bid0IGNvbnRlbnQsIHNvIGFkZCBwYWRkaW5nCisgICAgICAgICAgICB2YWwgKz0galF1ZXJ5LmNz
cyggZWxlbSwgInBhZGRpbmciICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApOworCisg
ICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCBleHRyYSBpc24ndCBjb250ZW50IG5vciBwYWRk
aW5nLCBzbyBhZGQgYm9yZGVyCisgICAgICAgICAgICBpZiAoIGV4dHJhICE9PSAicGFkZGluZyIg
KSB7CisgICAgICAgICAgICAgICAgdmFsICs9IGpRdWVyeS5jc3MoIGVsZW0sICJib3JkZXIiICsg
Y3NzRXhwYW5kWyBpIF0gKyAiV2lkdGgiLCB0cnVlLCBzdHlsZXMgKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB2YWw7Cit9CisKK2Z1bmN0aW9uIGdldFdp
ZHRoT3JIZWlnaHQoIGVsZW0sIG5hbWUsIGV4dHJhICkgeworCisgICAgLy8gU3RhcnQgd2l0aCBv
ZmZzZXQgcHJvcGVydHksIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGJvcmRlci1ib3ggdmFs
dWUKKyAgICB2YXIgdmFsdWVJc0JvcmRlckJveCA9IHRydWUsCisgICAgICAgIHZhbCA9IG5hbWUg
PT09ICJ3aWR0aCIgPyBlbGVtLm9mZnNldFdpZHRoIDogZWxlbS5vZmZzZXRIZWlnaHQsCisgICAg
ICAgIHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApLAorICAgICAgICBpc0JvcmRlckJveCA9IGpR
dWVyeS5jc3MoIGVsZW0sICJib3hTaXppbmciLCBmYWxzZSwgc3R5bGVzICkgPT09ICJib3JkZXIt
Ym94IjsKKworICAgIC8vIFNvbWUgbm9uLWh0bWwgZWxlbWVudHMgcmV0dXJuIHVuZGVmaW5lZCBm
b3Igb2Zmc2V0V2lkdGgsIHNvIGNoZWNrIGZvciBudWxsL3VuZGVmaW5lZAorICAgIC8vIHN2ZyAt
IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY0OTI4NQorICAg
IC8vIE1hdGhNTCAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lk
PTQ5MTY2OAorICAgIGlmICggdmFsIDw9IDAgfHwgdmFsID09IG51bGwgKSB7CisKKyAgICAgICAg
Ly8gRmFsbCBiYWNrIHRvIGNvbXB1dGVkIHRoZW4gdW5jb21wdXRlZCBjc3MgaWYgbmVjZXNzYXJ5
CisgICAgICAgIHZhbCA9IGN1ckNTUyggZWxlbSwgbmFtZSwgc3R5bGVzICk7CisgICAgICAgIGlm
ICggdmFsIDwgMCB8fCB2YWwgPT0gbnVsbCApIHsKKyAgICAgICAgICAgIHZhbCA9IGVsZW0uc3R5
bGVbIG5hbWUgXTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENvbXB1dGVkIHVuaXQgaXMgbm90
IHBpeGVscy4gU3RvcCBoZXJlIGFuZCByZXR1cm4uCisgICAgICAgIGlmICggcm51bW5vbnB4LnRl
c3QoIHZhbCApICkgeworICAgICAgICAgICAgcmV0dXJuIHZhbDsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIENoZWNrIGZvciBzdHlsZSBpbiBjYXNlIGEgYnJvd3NlciB3aGljaCByZXR1cm5zIHVu
cmVsaWFibGUgdmFsdWVzCisgICAgICAgIC8vIGZvciBnZXRDb21wdXRlZFN0eWxlIHNpbGVudGx5
IGZhbGxzIGJhY2sgdG8gdGhlIHJlbGlhYmxlIGVsZW0uc3R5bGUKKyAgICAgICAgdmFsdWVJc0Jv
cmRlckJveCA9IGlzQm9yZGVyQm94ICYmCisgICAgICAgICAgICAoIHN1cHBvcnQuYm94U2l6aW5n
UmVsaWFibGUoKSB8fCB2YWwgPT09IGVsZW0uc3R5bGVbIG5hbWUgXSApOworCisgICAgICAgIC8v
IE5vcm1hbGl6ZSAiIiwgYXV0bywgYW5kIHByZXBhcmUgZm9yIGV4dHJhCisgICAgICAgIHZhbCA9
IHBhcnNlRmxvYXQoIHZhbCApIHx8IDA7CisgICAgfQorCisgICAgLy8gVXNlIHRoZSBhY3RpdmUg
Ym94LXNpemluZyBtb2RlbCB0byBhZGQvc3VidHJhY3QgaXJyZWxldmFudCBzdHlsZXMKKyAgICBy
ZXR1cm4gKCB2YWwgKworICAgICAgICBhdWdtZW50V2lkdGhPckhlaWdodCgKKyAgICAgICAgICAg
IGVsZW0sCisgICAgICAgICAgICBuYW1lLAorICAgICAgICAgICAgZXh0cmEgfHwgKCBpc0JvcmRl
ckJveCA/ICJib3JkZXIiIDogImNvbnRlbnQiICksCisgICAgICAgICAgICB2YWx1ZUlzQm9yZGVy
Qm94LAorICAgICAgICAgICAgc3R5bGVzCisgICAgICAgICkKKyAgICApICsgInB4IjsKK30KKwor
ZnVuY3Rpb24gc2hvd0hpZGUoIGVsZW1lbnRzLCBzaG93ICkgeworICAgIHZhciBkaXNwbGF5LCBl
bGVtLCBoaWRkZW4sCisgICAgICAgIHZhbHVlcyA9IFtdLAorICAgICAgICBpbmRleCA9IDAsCisg
ICAgICAgIGxlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aDsKKworICAgIGZvciAoIDsgaW5kZXggPCBs
ZW5ndGg7IGluZGV4KysgKSB7CisgICAgICAgIGVsZW0gPSBlbGVtZW50c1sgaW5kZXggXTsKKyAg
ICAgICAgaWYgKCAhZWxlbS5zdHlsZSApIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisKKyAgICAgICAgdmFsdWVzWyBpbmRleCBdID0gZGF0YVByaXYuZ2V0KCBlbGVtLCAib2xk
ZGlzcGxheSIgKTsKKyAgICAgICAgZGlzcGxheSA9IGVsZW0uc3R5bGUuZGlzcGxheTsKKyAgICAg
ICAgaWYgKCBzaG93ICkgeworCisgICAgICAgICAgICAvLyBSZXNldCB0aGUgaW5saW5lIGRpc3Bs
YXkgb2YgdGhpcyBlbGVtZW50IHRvIGxlYXJuIGlmIGl0IGlzCisgICAgICAgICAgICAvLyBiZWlu
ZyBoaWRkZW4gYnkgY2FzY2FkZWQgcnVsZXMgb3Igbm90CisgICAgICAgICAgICBpZiAoICF2YWx1
ZXNbIGluZGV4IF0gJiYgZGlzcGxheSA9PT0gIm5vbmUiICkgeworICAgICAgICAgICAgICAgIGVs
ZW0uc3R5bGUuZGlzcGxheSA9ICIiOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBT
ZXQgZWxlbWVudHMgd2hpY2ggaGF2ZSBiZWVuIG92ZXJyaWRkZW4gd2l0aCBkaXNwbGF5OiBub25l
CisgICAgICAgICAgICAvLyBpbiBhIHN0eWxlc2hlZXQgdG8gd2hhdGV2ZXIgdGhlIGRlZmF1bHQg
YnJvd3NlciBzdHlsZSBpcworICAgICAgICAgICAgLy8gZm9yIHN1Y2ggYW4gZWxlbWVudAorICAg
ICAgICAgICAgaWYgKCBlbGVtLnN0eWxlLmRpc3BsYXkgPT09ICIiICYmIGlzSGlkZGVuKCBlbGVt
ICkgKSB7CisgICAgICAgICAgICAgICAgdmFsdWVzWyBpbmRleCBdID0gZGF0YVByaXYuYWNjZXNz
KAorICAgICAgICAgICAgICAgICAgICBlbGVtLAorICAgICAgICAgICAgICAgICAgICAib2xkZGlz
cGxheSIsCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHREaXNwbGF5KCBlbGVtLm5vZGVOYW1l
ICkKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgaGlkZGVuID0gaXNIaWRkZW4oIGVsZW0gKTsKKworICAgICAgICAgICAgaWYg
KCBkaXNwbGF5ICE9PSAibm9uZSIgfHwgIWhpZGRlbiApIHsKKyAgICAgICAgICAgICAgICBkYXRh
UHJpdi5zZXQoCisgICAgICAgICAgICAgICAgICAgIGVsZW0sCisgICAgICAgICAgICAgICAgICAg
ICJvbGRkaXNwbGF5IiwKKyAgICAgICAgICAgICAgICAgICAgaGlkZGVuID8gZGlzcGxheSA6IGpR
dWVyeS5jc3MoIGVsZW0sICJkaXNwbGF5IiApCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFNldCB0aGUgZGlzcGxheSBvZiBtb3N0
IG9mIHRoZSBlbGVtZW50cyBpbiBhIHNlY29uZCBsb29wCisgICAgLy8gdG8gYXZvaWQgdGhlIGNv
bnN0YW50IHJlZmxvdworICAgIGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4
KysgKSB7CisgICAgICAgIGVsZW0gPSBlbGVtZW50c1sgaW5kZXggXTsKKyAgICAgICAgaWYgKCAh
ZWxlbS5zdHlsZSApIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAg
IGlmICggIXNob3cgfHwgZWxlbS5zdHlsZS5kaXNwbGF5ID09PSAibm9uZSIgfHwgZWxlbS5zdHls
ZS5kaXNwbGF5ID09PSAiIiApIHsKKyAgICAgICAgICAgIGVsZW0uc3R5bGUuZGlzcGxheSA9IHNo
b3cgPyB2YWx1ZXNbIGluZGV4IF0gfHwgIiIgOiAibm9uZSI7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gZWxlbWVudHM7Cit9CisKK2pRdWVyeS5leHRlbmQoIHsKKworICAgIC8vIEFk
ZCBpbiBzdHlsZSBwcm9wZXJ0eSBob29rcyBmb3Igb3ZlcnJpZGluZyB0aGUgZGVmYXVsdAorICAg
IC8vIGJlaGF2aW9yIG9mIGdldHRpbmcgYW5kIHNldHRpbmcgYSBzdHlsZSBwcm9wZXJ0eQorICAg
IGNzc0hvb2tzOiB7CisgICAgICAgIG9wYWNpdHk6IHsKKyAgICAgICAgICAgIGdldDogZnVuY3Rp
b24oIGVsZW0sIGNvbXB1dGVkICkgeworICAgICAgICAgICAgICAgIGlmICggY29tcHV0ZWQgKSB7
CisKKyAgICAgICAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGFsd2F5cyBnZXQgYSBudW1iZXIg
YmFjayBmcm9tIG9wYWNpdHkKKyAgICAgICAgICAgICAgICAgICAgdmFyIHJldCA9IGN1ckNTUygg
ZWxlbSwgIm9wYWNpdHkiICk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQgPT09ICIi
ID8gIjEiIDogcmV0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0sCisKKyAgICAvLyBEb24ndCBhdXRvbWF0aWNhbGx5IGFkZCAicHgiIHRvIHRoZXNl
IHBvc3NpYmx5LXVuaXRsZXNzIHByb3BlcnRpZXMKKyAgICBjc3NOdW1iZXI6IHsKKyAgICAgICAg
ImFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50IjogdHJ1ZSwKKyAgICAgICAgImNvbHVtbkNvdW50Ijog
dHJ1ZSwKKyAgICAgICAgImZpbGxPcGFjaXR5IjogdHJ1ZSwKKyAgICAgICAgImZsZXhHcm93Ijog
dHJ1ZSwKKyAgICAgICAgImZsZXhTaHJpbmsiOiB0cnVlLAorICAgICAgICAiZm9udFdlaWdodCI6
IHRydWUsCisgICAgICAgICJsaW5lSGVpZ2h0IjogdHJ1ZSwKKyAgICAgICAgIm9wYWNpdHkiOiB0
cnVlLAorICAgICAgICAib3JkZXIiOiB0cnVlLAorICAgICAgICAib3JwaGFucyI6IHRydWUsCisg
ICAgICAgICJ3aWRvd3MiOiB0cnVlLAorICAgICAgICAiekluZGV4IjogdHJ1ZSwKKyAgICAgICAg
Inpvb20iOiB0cnVlCisgICAgfSwKKworICAgIC8vIEFkZCBpbiBwcm9wZXJ0aWVzIHdob3NlIG5h
bWVzIHlvdSB3aXNoIHRvIGZpeCBiZWZvcmUKKyAgICAvLyBzZXR0aW5nIG9yIGdldHRpbmcgdGhl
IHZhbHVlCisgICAgY3NzUHJvcHM6IHsKKyAgICAgICAgImZsb2F0IjogImNzc0Zsb2F0IgorICAg
IH0sCisKKyAgICAvLyBHZXQgYW5kIHNldCB0aGUgc3R5bGUgcHJvcGVydHkgb24gYSBET00gTm9k
ZQorICAgIHN0eWxlOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUsIGV4dHJhICkgeworCisg
ICAgICAgIC8vIERvbid0IHNldCBzdHlsZXMgb24gdGV4dCBhbmQgY29tbWVudCBub2RlcworICAg
ICAgICBpZiAoICFlbGVtIHx8IGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9
PT0gOCB8fCAhZWxlbS5zdHlsZSApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQg
bmFtZQorICAgICAgICB2YXIgcmV0LCB0eXBlLCBob29rcywKKyAgICAgICAgICAgIG9yaWdOYW1l
ID0galF1ZXJ5LmNhbWVsQ2FzZSggbmFtZSApLAorICAgICAgICAgICAgc3R5bGUgPSBlbGVtLnN0
eWxlOworCisgICAgICAgIG5hbWUgPSBqUXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0gfHwKKyAg
ICAgICAgICAgICggalF1ZXJ5LmNzc1Byb3BzWyBvcmlnTmFtZSBdID0gdmVuZG9yUHJvcE5hbWUo
IG9yaWdOYW1lICkgfHwgb3JpZ05hbWUgKTsKKworICAgICAgICAvLyBHZXRzIGhvb2sgZm9yIHRo
ZSBwcmVmaXhlZCB2ZXJzaW9uLCB0aGVuIHVucHJlZml4ZWQgdmVyc2lvbgorICAgICAgICBob29r
cyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdIHx8IGpRdWVyeS5jc3NIb29rc1sgb3JpZ05hbWUg
XTsKKworICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSBzZXR0aW5nIGEgdmFsdWUKKyAgICAgICAg
aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgdHlwZSA9IHR5cGVvZiB2
YWx1ZTsKKworICAgICAgICAgICAgLy8gQ29udmVydCAiKz0iIG9yICItPSIgdG8gcmVsYXRpdmUg
bnVtYmVycyAoIzczNDUpCisgICAgICAgICAgICBpZiAoIHR5cGUgPT09ICJzdHJpbmciICYmICgg
cmV0ID0gcmNzc051bS5leGVjKCB2YWx1ZSApICkgJiYgcmV0WyAxIF0gKSB7CisgICAgICAgICAg
ICAgICAgdmFsdWUgPSBhZGp1c3RDU1MoIGVsZW0sIG5hbWUsIHJldCApOworCisgICAgICAgICAg
ICAgICAgLy8gRml4ZXMgYnVnICM5MjM3CisgICAgICAgICAgICAgICAgdHlwZSA9ICJudW1iZXIi
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBudWxsIGFu
ZCBOYU4gdmFsdWVzIGFyZW4ndCBzZXQgKCM3MTE2KQorICAgICAgICAgICAgaWYgKCB2YWx1ZSA9
PSBudWxsIHx8IHZhbHVlICE9PSB2YWx1ZSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIElmIGEgbnVtYmVyIHdhcyBwYXNzZWQgaW4s
IGFkZCB0aGUgdW5pdCAoZXhjZXB0IGZvciBjZXJ0YWluIENTUyBwcm9wZXJ0aWVzKQorICAgICAg
ICAgICAgaWYgKCB0eXBlID09PSAibnVtYmVyIiApIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSAr
PSByZXQgJiYgcmV0WyAzIF0gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBvcmlnTmFtZSBdID8gIiIg
OiAicHgiICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElFOS0x
MSsKKyAgICAgICAgICAgIC8vIGJhY2tncm91bmQtKiBwcm9wcyBhZmZlY3Qgb3JpZ2luYWwgY2xv
bmUncyB2YWx1ZXMKKyAgICAgICAgICAgIGlmICggIXN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlICYm
IHZhbHVlID09PSAiIiAmJiBuYW1lLmluZGV4T2YoICJiYWNrZ3JvdW5kIiApID09PSAwICkgewor
ICAgICAgICAgICAgICAgIHN0eWxlWyBuYW1lIF0gPSAiaW5oZXJpdCI7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQsIHVzZSB0aGF0IHZhbHVl
LCBvdGhlcndpc2UganVzdCBzZXQgdGhlIHNwZWNpZmllZCB2YWx1ZQorICAgICAgICAgICAgaWYg
KCAhaG9va3MgfHwgISggInNldCIgaW4gaG9va3MgKSB8fAorICAgICAgICAgICAgICAgICggdmFs
dWUgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHsK
KworICAgICAgICAgICAgICAgIHN0eWxlWyBuYW1lIF0gPSB2YWx1ZTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAvLyBJZiBhIGhvb2sgd2FzIHByb3Zp
ZGVkIGdldCB0aGUgbm9uLWNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmUKKyAgICAgICAgICAgIGlm
ICggaG9va3MgJiYgImdldCIgaW4gaG9va3MgJiYKKyAgICAgICAgICAgICAgICAoIHJldCA9IGhv
b2tzLmdldCggZWxlbSwgZmFsc2UsIGV4dHJhICkgKSAhPT0gdW5kZWZpbmVkICkgeworCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8g
T3RoZXJ3aXNlIGp1c3QgZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBzdHlsZSBvYmplY3QKKyAgICAg
ICAgICAgIHJldHVybiBzdHlsZVsgbmFtZSBdOworICAgICAgICB9CisgICAgfSwKKworICAgIGNz
czogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGV4dHJhLCBzdHlsZXMgKSB7CisgICAgICAgIHZhciB2
YWwsIG51bSwgaG9va3MsCisgICAgICAgICAgICBvcmlnTmFtZSA9IGpRdWVyeS5jYW1lbENhc2Uo
IG5hbWUgKTsKKworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGgg
dGhlIHJpZ2h0IG5hbWUKKyAgICAgICAgbmFtZSA9IGpRdWVyeS5jc3NQcm9wc1sgb3JpZ05hbWUg
XSB8fAorICAgICAgICAgICAgKCBqUXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0gPSB2ZW5kb3JQ
cm9wTmFtZSggb3JpZ05hbWUgKSB8fCBvcmlnTmFtZSApOworCisgICAgICAgIC8vIFRyeSBwcmVm
aXhlZCBuYW1lIGZvbGxvd2VkIGJ5IHRoZSB1bnByZWZpeGVkIG5hbWUKKyAgICAgICAgaG9va3Mg
PSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07
CisKKyAgICAgICAgLy8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIGNvbXB1dGVkIHZh
bHVlIGZyb20gdGhlcmUKKyAgICAgICAgaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29rcyApIHsK
KyAgICAgICAgICAgIHZhbCA9IGhvb2tzLmdldCggZWxlbSwgdHJ1ZSwgZXh0cmEgKTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIE90aGVyd2lzZSwgaWYgYSB3YXkgdG8gZ2V0IHRoZSBjb21wdXRl
ZCB2YWx1ZSBleGlzdHMsIHVzZSB0aGF0CisgICAgICAgIGlmICggdmFsID09PSB1bmRlZmluZWQg
KSB7CisgICAgICAgICAgICB2YWwgPSBjdXJDU1MoIGVsZW0sIG5hbWUsIHN0eWxlcyApOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gQ29udmVydCAibm9ybWFsIiB0byBjb21wdXRlZCB2YWx1ZQor
ICAgICAgICBpZiAoIHZhbCA9PT0gIm5vcm1hbCIgJiYgbmFtZSBpbiBjc3NOb3JtYWxUcmFuc2Zv
cm0gKSB7CisgICAgICAgICAgICB2YWwgPSBjc3NOb3JtYWxUcmFuc2Zvcm1bIG5hbWUgXTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIE1ha2UgbnVtZXJpYyBpZiBmb3JjZWQgb3IgYSBxdWFsaWZp
ZXIgd2FzIHByb3ZpZGVkIGFuZCB2YWwgbG9va3MgbnVtZXJpYworICAgICAgICBpZiAoIGV4dHJh
ID09PSAiIiB8fCBleHRyYSApIHsKKyAgICAgICAgICAgIG51bSA9IHBhcnNlRmxvYXQoIHZhbCAp
OworICAgICAgICAgICAgcmV0dXJuIGV4dHJhID09PSB0cnVlIHx8IGlzRmluaXRlKCBudW0gKSA/
IG51bSB8fCAwIDogdmFsOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWw7CisgICAgfQor
fSApOworCitqUXVlcnkuZWFjaCggWyAiaGVpZ2h0IiwgIndpZHRoIiBdLCBmdW5jdGlvbiggaSwg
bmFtZSApIHsKKyAgICBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSA9IHsKKyAgICAgICAgZ2V0OiBm
dW5jdGlvbiggZWxlbSwgY29tcHV0ZWQsIGV4dHJhICkgeworICAgICAgICAgICAgaWYgKCBjb21w
dXRlZCApIHsKKworICAgICAgICAgICAgICAgIC8vIENlcnRhaW4gZWxlbWVudHMgY2FuIGhhdmUg
ZGltZW5zaW9uIGluZm8gaWYgd2UgaW52aXNpYmx5IHNob3cgdGhlbQorICAgICAgICAgICAgICAg
IC8vIGJ1dCBpdCBtdXN0IGhhdmUgYSBjdXJyZW50IGRpc3BsYXkgc3R5bGUgdGhhdCB3b3VsZCBi
ZW5lZml0CisgICAgICAgICAgICAgICAgcmV0dXJuIHJkaXNwbGF5c3dhcC50ZXN0KCBqUXVlcnku
Y3NzKCBlbGVtLCAiZGlzcGxheSIgKSApICYmCisgICAgICAgICAgICAgICAgICAgIGVsZW0ub2Zm
c2V0V2lkdGggPT09IDAgPworICAgICAgICAgICAgICAgICAgICAgICAgc3dhcCggZWxlbSwgY3Nz
U2hvdywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdl
dFdpZHRoT3JIZWlnaHQoIGVsZW0sIG5hbWUsIGV4dHJhICk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9ICkgOgorICAgICAgICAgICAgICAgICAgICAgICAgZ2V0V2lkdGhPckhlaWdodCggZWxl
bSwgbmFtZSwgZXh0cmEgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKworICAgICAgICBz
ZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSB7CisgICAgICAgICAgICB2YXIgbWF0
Y2hlcywKKyAgICAgICAgICAgICAgICBzdHlsZXMgPSBleHRyYSAmJiBnZXRTdHlsZXMoIGVsZW0g
KSwKKyAgICAgICAgICAgICAgICBzdWJ0cmFjdCA9IGV4dHJhICYmIGF1Z21lbnRXaWR0aE9ySGVp
Z2h0KAorICAgICAgICAgICAgICAgICAgICBlbGVtLAorICAgICAgICAgICAgICAgICAgICBuYW1l
LAorICAgICAgICAgICAgICAgICAgICBleHRyYSwKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5
LmNzcyggZWxlbSwgImJveFNpemluZyIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gImJvcmRlci1ib3gi
LAorICAgICAgICAgICAgICAgICAgICBzdHlsZXMKKyAgICAgICAgICAgICAgICApOworCisgICAg
ICAgICAgICAvLyBDb252ZXJ0IHRvIHBpeGVscyBpZiB2YWx1ZSBhZGp1c3RtZW50IGlzIG5lZWRl
ZAorICAgICAgICAgICAgaWYgKCBzdWJ0cmFjdCAmJiAoIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMo
IHZhbHVlICkgKSAmJgorICAgICAgICAgICAgICAgICggbWF0Y2hlc1sgMyBdIHx8ICJweCIgKSAh
PT0gInB4IiApIHsKKworICAgICAgICAgICAgICAgIGVsZW0uc3R5bGVbIG5hbWUgXSA9IHZhbHVl
OworICAgICAgICAgICAgICAgIHZhbHVlID0galF1ZXJ5LmNzcyggZWxlbSwgbmFtZSApOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gc2V0UG9zaXRpdmVOdW1iZXIoIGVsZW0s
IHZhbHVlLCBzdWJ0cmFjdCApOworICAgICAgICB9CisgICAgfTsKK30gKTsKKworalF1ZXJ5LmNz
c0hvb2tzLm1hcmdpbkxlZnQgPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucmVsaWFibGVNYXJnaW5M
ZWZ0LAorICAgIGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHsKKyAgICAgICAgaWYgKCBjb21w
dXRlZCApIHsKKyAgICAgICAgICAgIHJldHVybiAoIHBhcnNlRmxvYXQoIGN1ckNTUyggZWxlbSwg
Im1hcmdpbkxlZnQiICkgKSB8fAorICAgICAgICAgICAgICAgIGVsZW0uZ2V0Qm91bmRpbmdDbGll
bnRSZWN0KCkubGVmdCAtCisgICAgICAgICAgICAgICAgICAgIHN3YXAoIGVsZW0sIHsgbWFyZ2lu
TGVmdDogMCB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
bGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7CisgICAgICAgICAgICAgICAgICAgIH0g
KQorICAgICAgICAgICAgICAgICkgKyAicHgiOworICAgICAgICB9CisgICAgfQorKTsKKworLy8g
U3VwcG9ydDogQW5kcm9pZCAyLjMKK2pRdWVyeS5jc3NIb29rcy5tYXJnaW5SaWdodCA9IGFkZEdl
dEhvb2tJZiggc3VwcG9ydC5yZWxpYWJsZU1hcmdpblJpZ2h0LAorICAgIGZ1bmN0aW9uKCBlbGVt
LCBjb21wdXRlZCApIHsKKyAgICAgICAgaWYgKCBjb21wdXRlZCApIHsKKyAgICAgICAgICAgIHJl
dHVybiBzd2FwKCBlbGVtLCB7ICJkaXNwbGF5IjogImlubGluZS1ibG9jayIgfSwKKyAgICAgICAg
ICAgICAgICBjdXJDU1MsIFsgZWxlbSwgIm1hcmdpblJpZ2h0IiBdICk7CisgICAgICAgIH0KKyAg
ICB9CispOworCisvLyBUaGVzZSBob29rcyBhcmUgdXNlZCBieSBhbmltYXRlIHRvIGV4cGFuZCBw
cm9wZXJ0aWVzCitqUXVlcnkuZWFjaCggeworICAgIG1hcmdpbjogIiIsCisgICAgcGFkZGluZzog
IiIsCisgICAgYm9yZGVyOiAiV2lkdGgiCit9LCBmdW5jdGlvbiggcHJlZml4LCBzdWZmaXggKSB7
CisgICAgalF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXSA9IHsKKyAgICAgICAgZXhw
YW5kOiBmdW5jdGlvbiggdmFsdWUgKSB7CisgICAgICAgICAgICB2YXIgaSA9IDAsCisgICAgICAg
ICAgICAgICAgZXhwYW5kZWQgPSB7fSwKKworICAgICAgICAgICAgICAgIC8vIEFzc3VtZXMgYSBz
aW5nbGUgbnVtYmVyIGlmIG5vdCBhIHN0cmluZworICAgICAgICAgICAgICAgIHBhcnRzID0gdHlw
ZW9mIHZhbHVlID09PSAic3RyaW5nIiA/IHZhbHVlLnNwbGl0KCAiICIgKSA6IFsgdmFsdWUgXTsK
KworICAgICAgICAgICAgZm9yICggOyBpIDwgNDsgaSsrICkgeworICAgICAgICAgICAgICAgIGV4
cGFuZGVkWyBwcmVmaXggKyBjc3NFeHBhbmRbIGkgXSArIHN1ZmZpeCBdID0KKyAgICAgICAgICAg
ICAgICAgICAgcGFydHNbIGkgXSB8fCBwYXJ0c1sgaSAtIDIgXSB8fCBwYXJ0c1sgMCBdOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gZXhwYW5kZWQ7CisgICAgICAgIH0KKyAg
ICB9OworCisgICAgaWYgKCAhcm1hcmdpbi50ZXN0KCBwcmVmaXggKSApIHsKKyAgICAgICAgalF1
ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXS5zZXQgPSBzZXRQb3NpdGl2ZU51bWJlcjsK
KyAgICB9Cit9ICk7CisKK2pRdWVyeS5mbi5leHRlbmQoIHsKKyAgICBjc3M6IGZ1bmN0aW9uKCBu
YW1lLCB2YWx1ZSApIHsKKyAgICAgICAgcmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVs
ZW0sIG5hbWUsIHZhbHVlICkgeworICAgICAgICAgICAgdmFyIHN0eWxlcywgbGVuLAorICAgICAg
ICAgICAgICAgIG1hcCA9IHt9LAorICAgICAgICAgICAgICAgIGkgPSAwOworCisgICAgICAgICAg
ICBpZiAoIGpRdWVyeS5pc0FycmF5KCBuYW1lICkgKSB7CisgICAgICAgICAgICAgICAgc3R5bGVz
ID0gZ2V0U3R5bGVzKCBlbGVtICk7CisgICAgICAgICAgICAgICAgbGVuID0gbmFtZS5sZW5ndGg7
CisKKyAgICAgICAgICAgICAgICBmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsKKyAgICAgICAgICAg
ICAgICAgICAgbWFwWyBuYW1lWyBpIF0gXSA9IGpRdWVyeS5jc3MoIGVsZW0sIG5hbWVbIGkgXSwg
ZmFsc2UsIHN0eWxlcyApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJl
dHVybiBtYXA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZSAhPT0g
dW5kZWZpbmVkID8KKyAgICAgICAgICAgICAgICBqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUsIHZh
bHVlICkgOgorICAgICAgICAgICAgICAgIGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKTsKKyAgICAg
ICAgfSwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7CisgICAgfSwKKyAgICBz
aG93OiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHNob3dIaWRlKCB0aGlzLCB0cnVlICk7
CisgICAgfSwKKyAgICBoaWRlOiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHNob3dIaWRl
KCB0aGlzICk7CisgICAgfSwKKyAgICB0b2dnbGU6IGZ1bmN0aW9uKCBzdGF0ZSApIHsKKyAgICAg
ICAgaWYgKCB0eXBlb2Ygc3RhdGUgPT09ICJib29sZWFuIiApIHsKKyAgICAgICAgICAgIHJldHVy
biBzdGF0ZSA/IHRoaXMuc2hvdygpIDogdGhpcy5oaWRlKCk7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGlmICggaXNIaWRk
ZW4oIHRoaXMgKSApIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkoIHRoaXMgKS5zaG93KCk7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLmhpZGUo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSApOworICAgIH0KK30gKTsKKworCitmdW5jdGlv
biBUd2VlbiggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKSB7CisgICAgcmV0dXJu
IG5ldyBUd2Vlbi5wcm90b3R5cGUuaW5pdCggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNp
bmcgKTsKK30KK2pRdWVyeS5Ud2VlbiA9IFR3ZWVuOworCitUd2Vlbi5wcm90b3R5cGUgPSB7Cisg
ICAgY29uc3RydWN0b3I6IFR3ZWVuLAorICAgIGluaXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25z
LCBwcm9wLCBlbmQsIGVhc2luZywgdW5pdCApIHsKKyAgICAgICAgdGhpcy5lbGVtID0gZWxlbTsK
KyAgICAgICAgdGhpcy5wcm9wID0gcHJvcDsKKyAgICAgICAgdGhpcy5lYXNpbmcgPSBlYXNpbmcg
fHwgalF1ZXJ5LmVhc2luZy5fZGVmYXVsdDsKKyAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9u
czsKKyAgICAgICAgdGhpcy5zdGFydCA9IHRoaXMubm93ID0gdGhpcy5jdXIoKTsKKyAgICAgICAg
dGhpcy5lbmQgPSBlbmQ7CisgICAgICAgIHRoaXMudW5pdCA9IHVuaXQgfHwgKCBqUXVlcnkuY3Nz
TnVtYmVyWyBwcm9wIF0gPyAiIiA6ICJweCIgKTsKKyAgICB9LAorICAgIGN1cjogZnVuY3Rpb24o
KSB7CisgICAgICAgIHZhciBob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07CisK
KyAgICAgICAgcmV0dXJuIGhvb2tzICYmIGhvb2tzLmdldCA/CisgICAgICAgICAgICBob29rcy5n
ZXQoIHRoaXMgKSA6CisgICAgICAgICAgICBUd2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KCB0
aGlzICk7CisgICAgfSwKKyAgICBydW46IGZ1bmN0aW9uKCBwZXJjZW50ICkgeworICAgICAgICB2
YXIgZWFzZWQsCisgICAgICAgICAgICBob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9w
IF07CisKKyAgICAgICAgaWYgKCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKSB7CisgICAgICAgICAg
ICB0aGlzLnBvcyA9IGVhc2VkID0galF1ZXJ5LmVhc2luZ1sgdGhpcy5lYXNpbmcgXSgKKyAgICAg
ICAgICAgICAgICBwZXJjZW50LCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKiBwZXJjZW50LCAwLCAx
LCB0aGlzLm9wdGlvbnMuZHVyYXRpb24KKyAgICAgICAgICAgICk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICB0aGlzLnBvcyA9IGVhc2VkID0gcGVyY2VudDsKKyAgICAgICAgfQorICAg
ICAgICB0aGlzLm5vdyA9ICggdGhpcy5lbmQgLSB0aGlzLnN0YXJ0ICkgKiBlYXNlZCArIHRoaXMu
c3RhcnQ7CisKKyAgICAgICAgaWYgKCB0aGlzLm9wdGlvbnMuc3RlcCApIHsKKyAgICAgICAgICAg
IHRoaXMub3B0aW9ucy5zdGVwLmNhbGwoIHRoaXMuZWxlbSwgdGhpcy5ub3csIHRoaXMgKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICggaG9va3MgJiYgaG9va3Muc2V0ICkgeworICAgICAgICAg
ICAgaG9va3Muc2V0KCB0aGlzICk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBUd2Vl
bi5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KCB0aGlzICk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRoaXM7CisgICAgfQorfTsKKworVHdlZW4ucHJvdG90eXBlLmluaXQucHJvdG90eXBlID0g
VHdlZW4ucHJvdG90eXBlOworCitUd2Vlbi5wcm9wSG9va3MgPSB7CisgICAgX2RlZmF1bHQ6IHsK
KyAgICAgICAgZ2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7CisgICAgICAgICAgICB2YXIgcmVzdWx0
OworCisgICAgICAgICAgICAvLyBVc2UgYSBwcm9wZXJ0eSBvbiB0aGUgZWxlbWVudCBkaXJlY3Rs
eSB3aGVuIGl0IGlzIG5vdCBhIERPTSBlbGVtZW50LAorICAgICAgICAgICAgLy8gb3Igd2hlbiB0
aGVyZSBpcyBubyBtYXRjaGluZyBzdHlsZSBwcm9wZXJ0eSB0aGF0IGV4aXN0cy4KKyAgICAgICAg
ICAgIGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSAhPT0gMSB8fAorICAgICAgICAgICAgICAgIHR3
ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSAhPSBudWxsICYmIHR3ZWVuLmVsZW0uc3R5bGVbIHR3ZWVu
LnByb3AgXSA9PSBudWxsICkgeworICAgICAgICAgICAgICAgIHJldHVybiB0d2Vlbi5lbGVtWyB0
d2Vlbi5wcm9wIF07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFBhc3NpbmcgYW4g
ZW1wdHkgc3RyaW5nIGFzIGEgM3JkIHBhcmFtZXRlciB0byAuY3NzIHdpbGwgYXV0b21hdGljYWxs
eQorICAgICAgICAgICAgLy8gYXR0ZW1wdCBhIHBhcnNlRmxvYXQgYW5kIGZhbGxiYWNrIHRvIGEg
c3RyaW5nIGlmIHRoZSBwYXJzZSBmYWlscy4KKyAgICAgICAgICAgIC8vIFNpbXBsZSB2YWx1ZXMg
c3VjaCBhcyAiMTBweCIgYXJlIHBhcnNlZCB0byBGbG9hdDsKKyAgICAgICAgICAgIC8vIGNvbXBs
ZXggdmFsdWVzIHN1Y2ggYXMgInJvdGF0ZSgxcmFkKSIgYXJlIHJldHVybmVkIGFzLWlzLgorICAg
ICAgICAgICAgcmVzdWx0ID0galF1ZXJ5LmNzcyggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwgIiIg
KTsKKworICAgICAgICAgICAgLy8gRW1wdHkgc3RyaW5ncywgbnVsbCwgdW5kZWZpbmVkIGFuZCAi
YXV0byIgYXJlIGNvbnZlcnRlZCB0byAwLgorICAgICAgICAgICAgcmV0dXJuICFyZXN1bHQgfHwg
cmVzdWx0ID09PSAiYXV0byIgPyAwIDogcmVzdWx0OworICAgICAgICB9LAorICAgICAgICBzZXQ6
IGZ1bmN0aW9uKCB0d2VlbiApIHsKKworICAgICAgICAgICAgLy8gVXNlIHN0ZXAgaG9vayBmb3Ig
YmFjayBjb21wYXQuCisgICAgICAgICAgICAvLyBVc2UgY3NzSG9vayBpZiBpdHMgdGhlcmUuCisg
ICAgICAgICAgICAvLyBVc2UgLnN0eWxlIGlmIGF2YWlsYWJsZSBhbmQgdXNlIHBsYWluIHByb3Bl
cnRpZXMgd2hlcmUgYXZhaWxhYmxlLgorICAgICAgICAgICAgaWYgKCBqUXVlcnkuZnguc3RlcFsg
dHdlZW4ucHJvcCBdICkgeworICAgICAgICAgICAgICAgIGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5w
cm9wIF0oIHR3ZWVuICk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCB0d2Vlbi5lbGVtLm5vZGVU
eXBlID09PSAxICYmCisgICAgICAgICAgICAgICAgKCB0d2Vlbi5lbGVtLnN0eWxlWyBqUXVlcnku
Y3NzUHJvcHNbIHR3ZWVuLnByb3AgXSBdICE9IG51bGwgfHwKKyAgICAgICAgICAgICAgICAgICAg
alF1ZXJ5LmNzc0hvb2tzWyB0d2Vlbi5wcm9wIF0gKSApIHsKKyAgICAgICAgICAgICAgICBqUXVl
cnkuc3R5bGUoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIHR3ZWVuLm5vdyArIHR3ZWVuLnVuaXQg
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdHdlZW4uZWxlbVsgdHdl
ZW4ucHJvcCBdID0gdHdlZW4ubm93OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
fTsKKworLy8gU3VwcG9ydDogSUU5CisvLyBQYW5pYyBiYXNlZCBhcHByb2FjaCB0byBzZXR0aW5n
IHRoaW5ncyBvbiBkaXNjb25uZWN0ZWQgbm9kZXMKK1R3ZWVuLnByb3BIb29rcy5zY3JvbGxUb3Ag
PSBUd2Vlbi5wcm9wSG9va3Muc2Nyb2xsTGVmdCA9IHsKKyAgICBzZXQ6IGZ1bmN0aW9uKCB0d2Vl
biApIHsKKyAgICAgICAgaWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlICYmIHR3ZWVuLmVsZW0ucGFy
ZW50Tm9kZSApIHsKKyAgICAgICAgICAgIHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVu
Lm5vdzsKKyAgICAgICAgfQorICAgIH0KK307CisKK2pRdWVyeS5lYXNpbmcgPSB7CisgICAgbGlu
ZWFyOiBmdW5jdGlvbiggcCApIHsKKyAgICAgICAgcmV0dXJuIHA7CisgICAgfSwKKyAgICBzd2lu
ZzogZnVuY3Rpb24oIHAgKSB7CisgICAgICAgIHJldHVybiAwLjUgLSBNYXRoLmNvcyggcCAqIE1h
dGguUEkgKSAvIDI7CisgICAgfSwKKyAgICBfZGVmYXVsdDogInN3aW5nIgorfTsKKworalF1ZXJ5
LmZ4ID0gVHdlZW4ucHJvdG90eXBlLmluaXQ7CisKKy8vIEJhY2sgQ29tcGF0IDwxLjggZXh0ZW5z
aW9uIHBvaW50CitqUXVlcnkuZnguc3RlcCA9IHt9OworCisKKworCit2YXIKKyAgICBmeE5vdywg
dGltZXJJZCwKKyAgICByZnh0eXBlcyA9IC9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLywKKyAgICBy
cnVuID0gL3F1ZXVlSG9va3MkLzsKKworLy8gQW5pbWF0aW9ucyBjcmVhdGVkIHN5bmNocm9ub3Vz
bHkgd2lsbCBydW4gc3luY2hyb25vdXNseQorZnVuY3Rpb24gY3JlYXRlRnhOb3coKSB7CisgICAg
d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkgeworICAgICAgICBmeE5vdyA9IHVuZGVmaW5l
ZDsKKyAgICB9ICk7CisgICAgcmV0dXJuICggZnhOb3cgPSBqUXVlcnkubm93KCkgKTsKK30KKwor
Ly8gR2VuZXJhdGUgcGFyYW1ldGVycyB0byBjcmVhdGUgYSBzdGFuZGFyZCBhbmltYXRpb24KK2Z1
bmN0aW9uIGdlbkZ4KCB0eXBlLCBpbmNsdWRlV2lkdGggKSB7CisgICAgdmFyIHdoaWNoLAorICAg
ICAgICBpID0gMCwKKyAgICAgICAgYXR0cnMgPSB7IGhlaWdodDogdHlwZSB9OworCisgICAgLy8g
SWYgd2UgaW5jbHVkZSB3aWR0aCwgc3RlcCB2YWx1ZSBpcyAxIHRvIGRvIGFsbCBjc3NFeHBhbmQg
dmFsdWVzLAorICAgIC8vIG90aGVyd2lzZSBzdGVwIHZhbHVlIGlzIDIgdG8gc2tpcCBvdmVyIExl
ZnQgYW5kIFJpZ2h0CisgICAgaW5jbHVkZVdpZHRoID0gaW5jbHVkZVdpZHRoID8gMSA6IDA7Cisg
ICAgZm9yICggOyBpIDwgNCA7IGkgKz0gMiAtIGluY2x1ZGVXaWR0aCApIHsKKyAgICAgICAgd2hp
Y2ggPSBjc3NFeHBhbmRbIGkgXTsKKyAgICAgICAgYXR0cnNbICJtYXJnaW4iICsgd2hpY2ggXSA9
IGF0dHJzWyAicGFkZGluZyIgKyB3aGljaCBdID0gdHlwZTsKKyAgICB9CisKKyAgICBpZiAoIGlu
Y2x1ZGVXaWR0aCApIHsKKyAgICAgICAgYXR0cnMub3BhY2l0eSA9IGF0dHJzLndpZHRoID0gdHlw
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gYXR0cnM7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZVR3ZWVu
KCB2YWx1ZSwgcHJvcCwgYW5pbWF0aW9uICkgeworICAgIHZhciB0d2VlbiwKKyAgICAgICAgY29s
bGVjdGlvbiA9ICggQW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gfHwgW10gKS5jb25jYXQoIEFu
aW1hdGlvbi50d2VlbmVyc1sgIioiIF0gKSwKKyAgICAgICAgaW5kZXggPSAwLAorICAgICAgICBs
ZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aDsKKyAgICBmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBp
bmRleCsrICkgeworICAgICAgICBpZiAoICggdHdlZW4gPSBjb2xsZWN0aW9uWyBpbmRleCBdLmNh
bGwoIGFuaW1hdGlvbiwgcHJvcCwgdmFsdWUgKSApICkgeworCisgICAgICAgICAgICAvLyBXZSdy
ZSBkb25lIHdpdGggdGhpcyBwcm9wZXJ0eQorICAgICAgICAgICAgcmV0dXJuIHR3ZWVuOworICAg
ICAgICB9CisgICAgfQorfQorCitmdW5jdGlvbiBkZWZhdWx0UHJlZmlsdGVyKCBlbGVtLCBwcm9w
cywgb3B0cyApIHsKKyAgICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovCisgICAgdmFyIHBy
b3AsIHZhbHVlLCB0b2dnbGUsIHR3ZWVuLCBob29rcywgb2xkZmlyZSwgZGlzcGxheSwgY2hlY2tE
aXNwbGF5LAorICAgICAgICBhbmltID0gdGhpcywKKyAgICAgICAgb3JpZyA9IHt9LAorICAgICAg
ICBzdHlsZSA9IGVsZW0uc3R5bGUsCisgICAgICAgIGhpZGRlbiA9IGVsZW0ubm9kZVR5cGUgJiYg
aXNIaWRkZW4oIGVsZW0gKSwKKyAgICAgICAgZGF0YVNob3cgPSBkYXRhUHJpdi5nZXQoIGVsZW0s
ICJmeHNob3ciICk7CisKKyAgICAvLyBIYW5kbGUgcXVldWU6IGZhbHNlIHByb21pc2VzCisgICAg
aWYgKCAhb3B0cy5xdWV1ZSApIHsKKyAgICAgICAgaG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3Mo
IGVsZW0sICJmeCIgKTsKKyAgICAgICAgaWYgKCBob29rcy51bnF1ZXVlZCA9PSBudWxsICkgewor
ICAgICAgICAgICAgaG9va3MudW5xdWV1ZWQgPSAwOworICAgICAgICAgICAgb2xkZmlyZSA9IGhv
b2tzLmVtcHR5LmZpcmU7CisgICAgICAgICAgICBob29rcy5lbXB0eS5maXJlID0gZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICAgICAgaWYgKCAhaG9va3MudW5xdWV1ZWQgKSB7CisgICAgICAgICAg
ICAgICAgICAgIG9sZGZpcmUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Owor
ICAgICAgICB9CisgICAgICAgIGhvb2tzLnVucXVldWVkKys7CisKKyAgICAgICAgYW5pbS5hbHdh
eXMoIGZ1bmN0aW9uKCkgeworCisgICAgICAgICAgICAvLyBFbnN1cmUgdGhlIGNvbXBsZXRlIGhh
bmRsZXIgaXMgY2FsbGVkIGJlZm9yZSB0aGlzIGNvbXBsZXRlcworICAgICAgICAgICAgYW5pbS5h
bHdheXMoIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGhvb2tzLnVucXVldWVkLS07Cisg
ICAgICAgICAgICAgICAgaWYgKCAhalF1ZXJ5LnF1ZXVlKCBlbGVtLCAiZngiICkubGVuZ3RoICkg
eworICAgICAgICAgICAgICAgICAgICBob29rcy5lbXB0eS5maXJlKCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSApOworICAgICAgICB9ICk7CisgICAgfQorCisgICAgLy8gSGVp
Z2h0L3dpZHRoIG92ZXJmbG93IHBhc3MKKyAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYg
KCAiaGVpZ2h0IiBpbiBwcm9wcyB8fCAid2lkdGgiIGluIHByb3BzICkgKSB7CisKKyAgICAgICAg
Ly8gTWFrZSBzdXJlIHRoYXQgbm90aGluZyBzbmVha3Mgb3V0CisgICAgICAgIC8vIFJlY29yZCBh
bGwgMyBvdmVyZmxvdyBhdHRyaWJ1dGVzIGJlY2F1c2UgSUU5LTEwIGRvIG5vdAorICAgICAgICAv
LyBjaGFuZ2UgdGhlIG92ZXJmbG93IGF0dHJpYnV0ZSB3aGVuIG92ZXJmbG93WCBhbmQKKyAgICAg
ICAgLy8gb3ZlcmZsb3dZIGFyZSBzZXQgdG8gdGhlIHNhbWUgdmFsdWUKKyAgICAgICAgb3B0cy5v
dmVyZmxvdyA9IFsgc3R5bGUub3ZlcmZsb3csIHN0eWxlLm92ZXJmbG93WCwgc3R5bGUub3ZlcmZs
b3dZIF07CisKKyAgICAgICAgLy8gU2V0IGRpc3BsYXkgcHJvcGVydHkgdG8gaW5saW5lLWJsb2Nr
IGZvciBoZWlnaHQvd2lkdGgKKyAgICAgICAgLy8gYW5pbWF0aW9ucyBvbiBpbmxpbmUgZWxlbWVu
dHMgdGhhdCBhcmUgaGF2aW5nIHdpZHRoL2hlaWdodCBhbmltYXRlZAorICAgICAgICBkaXNwbGF5
ID0galF1ZXJ5LmNzcyggZWxlbSwgImRpc3BsYXkiICk7CisKKyAgICAgICAgLy8gVGVzdCBkZWZh
dWx0IGRpc3BsYXkgaWYgZGlzcGxheSBpcyBjdXJyZW50bHkgIm5vbmUiCisgICAgICAgIGNoZWNr
RGlzcGxheSA9IGRpc3BsYXkgPT09ICJub25lIiA/CisgICAgICAgICAgICBkYXRhUHJpdi5nZXQo
IGVsZW0sICJvbGRkaXNwbGF5IiApIHx8IGRlZmF1bHREaXNwbGF5KCBlbGVtLm5vZGVOYW1lICkg
OiBkaXNwbGF5OworCisgICAgICAgIGlmICggY2hlY2tEaXNwbGF5ID09PSAiaW5saW5lIiAmJiBq
UXVlcnkuY3NzKCBlbGVtLCAiZmxvYXQiICkgPT09ICJub25lIiApIHsKKyAgICAgICAgICAgIHN0
eWxlLmRpc3BsYXkgPSAiaW5saW5lLWJsb2NrIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
ICggb3B0cy5vdmVyZmxvdyApIHsKKyAgICAgICAgc3R5bGUub3ZlcmZsb3cgPSAiaGlkZGVuIjsK
KyAgICAgICAgYW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgc3R5bGUub3Zl
cmZsb3cgPSBvcHRzLm92ZXJmbG93WyAwIF07CisgICAgICAgICAgICBzdHlsZS5vdmVyZmxvd1gg
PSBvcHRzLm92ZXJmbG93WyAxIF07CisgICAgICAgICAgICBzdHlsZS5vdmVyZmxvd1kgPSBvcHRz
Lm92ZXJmbG93WyAyIF07CisgICAgICAgIH0gKTsKKyAgICB9CisKKyAgICAvLyBzaG93L2hpZGUg
cGFzcworICAgIGZvciAoIHByb3AgaW4gcHJvcHMgKSB7CisgICAgICAgIHZhbHVlID0gcHJvcHNb
IHByb3AgXTsKKyAgICAgICAgaWYgKCByZnh0eXBlcy5leGVjKCB2YWx1ZSApICkgeworICAgICAg
ICAgICAgZGVsZXRlIHByb3BzWyBwcm9wIF07CisgICAgICAgICAgICB0b2dnbGUgPSB0b2dnbGUg
fHwgdmFsdWUgPT09ICJ0b2dnbGUiOworICAgICAgICAgICAgaWYgKCB2YWx1ZSA9PT0gKCBoaWRk
ZW4gPyAiaGlkZSIgOiAic2hvdyIgKSApIHsKKworICAgICAgICAgICAgICAgIC8vIElmIHRoZXJl
IGlzIGRhdGFTaG93IGxlZnQgb3ZlciBmcm9tIGEgc3RvcHBlZCBoaWRlIG9yIHNob3cKKyAgICAg
ICAgICAgICAgICAvLyBhbmQgd2UgYXJlIGdvaW5nIHRvIHByb2NlZWQgd2l0aCBzaG93LCB3ZSBz
aG91bGQgcHJldGVuZCB0byBiZSBoaWRkZW4KKyAgICAgICAgICAgICAgICBpZiAoIHZhbHVlID09
PSAic2hvdyIgJiYgZGF0YVNob3cgJiYgZGF0YVNob3dbIHByb3AgXSAhPT0gdW5kZWZpbmVkICkg
eworICAgICAgICAgICAgICAgICAgICBoaWRkZW4gPSB0cnVlOworICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9yaWdbIHByb3AgXSA9IGRhdGFTaG93ICYmIGRh
dGFTaG93WyBwcm9wIF0gfHwgalF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wICk7CisKKyAgICAgICAg
Ly8gQW55IG5vbi1meCB2YWx1ZSBzdG9wcyB1cyBmcm9tIHJlc3RvcmluZyB0aGUgb3JpZ2luYWwg
ZGlzcGxheSB2YWx1ZQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGlzcGxheSA9IHVu
ZGVmaW5lZDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICggIWpRdWVyeS5pc0VtcHR5T2Jq
ZWN0KCBvcmlnICkgKSB7CisgICAgICAgIGlmICggZGF0YVNob3cgKSB7CisgICAgICAgICAgICBp
ZiAoICJoaWRkZW4iIGluIGRhdGFTaG93ICkgeworICAgICAgICAgICAgICAgIGhpZGRlbiA9IGRh
dGFTaG93LmhpZGRlbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGRhdGFTaG93ID0gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCAiZnhzaG93Iiwge30gKTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIFN0b3JlIHN0YXRlIGlmIGl0cyB0b2dnbGUgLSBlbmFibGVz
IC5zdG9wKCkudG9nZ2xlKCkgdG8gInJldmVyc2UiCisgICAgICAgIGlmICggdG9nZ2xlICkgewor
ICAgICAgICAgICAgZGF0YVNob3cuaGlkZGVuID0gIWhpZGRlbjsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoIGhpZGRlbiApIHsKKyAgICAgICAgICAgIGpRdWVyeSggZWxlbSApLnNob3coKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFuaW0uZG9uZSggZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICAgICAgalF1ZXJ5KCBlbGVtICkuaGlkZSgpOworICAgICAgICAgICAgfSApOworICAg
ICAgICB9CisgICAgICAgIGFuaW0uZG9uZSggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIg
cHJvcDsKKworICAgICAgICAgICAgZGF0YVByaXYucmVtb3ZlKCBlbGVtLCAiZnhzaG93IiApOwor
ICAgICAgICAgICAgZm9yICggcHJvcCBpbiBvcmlnICkgeworICAgICAgICAgICAgICAgIGpRdWVy
eS5zdHlsZSggZWxlbSwgcHJvcCwgb3JpZ1sgcHJvcCBdICk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gKTsKKyAgICAgICAgZm9yICggcHJvcCBpbiBvcmlnICkgeworICAgICAgICAgICAgdHdl
ZW4gPSBjcmVhdGVUd2VlbiggaGlkZGVuID8gZGF0YVNob3dbIHByb3AgXSA6IDAsIHByb3AsIGFu
aW0gKTsKKworICAgICAgICAgICAgaWYgKCAhKCBwcm9wIGluIGRhdGFTaG93ICkgKSB7CisgICAg
ICAgICAgICAgICAgZGF0YVNob3dbIHByb3AgXSA9IHR3ZWVuLnN0YXJ0OworICAgICAgICAgICAg
ICAgIGlmICggaGlkZGVuICkgeworICAgICAgICAgICAgICAgICAgICB0d2Vlbi5lbmQgPSB0d2Vl
bi5zdGFydDsKKyAgICAgICAgICAgICAgICAgICAgdHdlZW4uc3RhcnQgPSBwcm9wID09PSAid2lk
dGgiIHx8IHByb3AgPT09ICJoZWlnaHQiID8gMSA6IDA7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAvLyBJZiB0aGlzIGlzIGEgbm9vcCBsaWtlIC5o
aWRlKCkuaGlkZSgpLCByZXN0b3JlIGFuIG92ZXJ3cml0dGVuIGRpc3BsYXkgdmFsdWUKKyAgICB9
IGVsc2UgaWYgKCAoIGRpc3BsYXkgPT09ICJub25lIiA/IGRlZmF1bHREaXNwbGF5KCBlbGVtLm5v
ZGVOYW1lICkgOiBkaXNwbGF5ICkgPT09ICJpbmxpbmUiICkgeworICAgICAgICBzdHlsZS5kaXNw
bGF5ID0gZGlzcGxheTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHByb3BGaWx0ZXIoIHByb3BzLCBz
cGVjaWFsRWFzaW5nICkgeworICAgIHZhciBpbmRleCwgbmFtZSwgZWFzaW5nLCB2YWx1ZSwgaG9v
a3M7CisKKyAgICAvLyBjYW1lbENhc2UsIHNwZWNpYWxFYXNpbmcgYW5kIGV4cGFuZCBjc3NIb29r
IHBhc3MKKyAgICBmb3IgKCBpbmRleCBpbiBwcm9wcyApIHsKKyAgICAgICAgbmFtZSA9IGpRdWVy
eS5jYW1lbENhc2UoIGluZGV4ICk7CisgICAgICAgIGVhc2luZyA9IHNwZWNpYWxFYXNpbmdbIG5h
bWUgXTsKKyAgICAgICAgdmFsdWUgPSBwcm9wc1sgaW5kZXggXTsKKyAgICAgICAgaWYgKCBqUXVl
cnkuaXNBcnJheSggdmFsdWUgKSApIHsKKyAgICAgICAgICAgIGVhc2luZyA9IHZhbHVlWyAxIF07
CisgICAgICAgICAgICB2YWx1ZSA9IHByb3BzWyBpbmRleCBdID0gdmFsdWVbIDAgXTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmICggaW5kZXggIT09IG5hbWUgKSB7CisgICAgICAgICAgICBwcm9w
c1sgbmFtZSBdID0gdmFsdWU7CisgICAgICAgICAgICBkZWxldGUgcHJvcHNbIGluZGV4IF07Cisg
ICAgICAgIH0KKworICAgICAgICBob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdOworICAg
ICAgICBpZiAoIGhvb2tzICYmICJleHBhbmQiIGluIGhvb2tzICkgeworICAgICAgICAgICAgdmFs
dWUgPSBob29rcy5leHBhbmQoIHZhbHVlICk7CisgICAgICAgICAgICBkZWxldGUgcHJvcHNbIG5h
bWUgXTsKKworICAgICAgICAgICAgLy8gTm90IHF1aXRlICQuZXh0ZW5kLCB0aGlzIHdvbid0IG92
ZXJ3cml0ZSBleGlzdGluZyBrZXlzLgorICAgICAgICAgICAgLy8gUmV1c2luZyAnaW5kZXgnIGJl
Y2F1c2Ugd2UgaGF2ZSB0aGUgY29ycmVjdCAibmFtZSIKKyAgICAgICAgICAgIGZvciAoIGluZGV4
IGluIHZhbHVlICkgeworICAgICAgICAgICAgICAgIGlmICggISggaW5kZXggaW4gcHJvcHMgKSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgcHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgaW5kZXggXTsK
KyAgICAgICAgICAgICAgICAgICAgc3BlY2lhbEVhc2luZ1sgaW5kZXggXSA9IGVhc2luZzsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBzcGVjaWFsRWFzaW5nWyBuYW1lIF0gPSBlYXNpbmc7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK2Z1bmN0aW9uIEFuaW1hdGlvbiggZWxlbSwgcHJvcGVydGllcywgb3B0aW9ucyApIHsKKyAg
ICB2YXIgcmVzdWx0LAorICAgICAgICBzdG9wcGVkLAorICAgICAgICBpbmRleCA9IDAsCisgICAg
ICAgIGxlbmd0aCA9IEFuaW1hdGlvbi5wcmVmaWx0ZXJzLmxlbmd0aCwKKyAgICAgICAgZGVmZXJy
ZWQgPSBqUXVlcnkuRGVmZXJyZWQoKS5hbHdheXMoIGZ1bmN0aW9uKCkgeworCisgICAgICAgICAg
ICAvLyBEb24ndCBtYXRjaCBlbGVtIGluIHRoZSA6YW5pbWF0ZWQgc2VsZWN0b3IKKyAgICAgICAg
ICAgIGRlbGV0ZSB0aWNrLmVsZW07CisgICAgICAgIH0gKSwKKyAgICAgICAgdGljayA9IGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgaWYgKCBzdG9wcGVkICkgeworICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBjdXJyZW50VGltZSA9
IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCksCisgICAgICAgICAgICAgICAgcmVtYWluaW5nID0gTWF0
aC5tYXgoIDAsIGFuaW1hdGlvbi5zdGFydFRpbWUgKyBhbmltYXRpb24uZHVyYXRpb24gLSBjdXJy
ZW50VGltZSApLAorCisgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogQW5kcm9pZCAyLjMKKyAg
ICAgICAgICAgICAgICAvLyBBcmNoYWljIGNyYXNoIGJ1ZyB3b24ndCBhbGxvdyB1cyB0byB1c2Ug
YDEgLSAoIDAuNSB8fCAwIClgICgjMTI0OTcpCisgICAgICAgICAgICAgICAgdGVtcCA9IHJlbWFp
bmluZyAvIGFuaW1hdGlvbi5kdXJhdGlvbiB8fCAwLAorICAgICAgICAgICAgICAgIHBlcmNlbnQg
PSAxIC0gdGVtcCwKKyAgICAgICAgICAgICAgICBpbmRleCA9IDAsCisgICAgICAgICAgICAgICAg
bGVuZ3RoID0gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGg7CisKKyAgICAgICAgICAgIGZvciAoIDsg
aW5kZXggPCBsZW5ndGggOyBpbmRleCsrICkgeworICAgICAgICAgICAgICAgIGFuaW1hdGlvbi50
d2VlbnNbIGluZGV4IF0ucnVuKCBwZXJjZW50ICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBwZXJjZW50LCByZW1h
aW5pbmcgXSApOworCisgICAgICAgICAgICBpZiAoIHBlcmNlbnQgPCAxICYmIGxlbmd0aCApIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gcmVtYWluaW5nOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24g
XSApOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSwKKyAgICAgICAgYW5pbWF0aW9uID0gZGVmZXJyZWQucHJvbWlzZSggeworICAgICAgICAg
ICAgZWxlbTogZWxlbSwKKyAgICAgICAgICAgIHByb3BzOiBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJv
cGVydGllcyApLAorICAgICAgICAgICAgb3B0czogalF1ZXJ5LmV4dGVuZCggdHJ1ZSwgeworICAg
ICAgICAgICAgICAgIHNwZWNpYWxFYXNpbmc6IHt9LAorICAgICAgICAgICAgICAgIGVhc2luZzog
alF1ZXJ5LmVhc2luZy5fZGVmYXVsdAorICAgICAgICAgICAgfSwgb3B0aW9ucyApLAorICAgICAg
ICAgICAgb3JpZ2luYWxQcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzLAorICAgICAgICAgICAgb3JpZ2lu
YWxPcHRpb25zOiBvcHRpb25zLAorICAgICAgICAgICAgc3RhcnRUaW1lOiBmeE5vdyB8fCBjcmVh
dGVGeE5vdygpLAorICAgICAgICAgICAgZHVyYXRpb246IG9wdGlvbnMuZHVyYXRpb24sCisgICAg
ICAgICAgICB0d2VlbnM6IFtdLAorICAgICAgICAgICAgY3JlYXRlVHdlZW46IGZ1bmN0aW9uKCBw
cm9wLCBlbmQgKSB7CisgICAgICAgICAgICAgICAgdmFyIHR3ZWVuID0galF1ZXJ5LlR3ZWVuKCBl
bGVtLCBhbmltYXRpb24ub3B0cywgcHJvcCwgZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAg
YW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZ1sgcHJvcCBdIHx8IGFuaW1hdGlvbi5vcHRzLmVh
c2luZyApOworICAgICAgICAgICAgICAgIGFuaW1hdGlvbi50d2VlbnMucHVzaCggdHdlZW4gKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHdlZW47CisgICAgICAgICAgICB9LAorICAgICAgICAg
ICAgc3RvcDogZnVuY3Rpb24oIGdvdG9FbmQgKSB7CisgICAgICAgICAgICAgICAgdmFyIGluZGV4
ID0gMCwKKworICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgZ29pbmcgdG8gdGhlIGVu
ZCwgd2Ugd2FudCB0byBydW4gYWxsIHRoZSB0d2VlbnMKKyAgICAgICAgICAgICAgICAgICAgLy8g
b3RoZXJ3aXNlIHdlIHNraXAgdGhpcyBwYXJ0CisgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9
IGdvdG9FbmQgPyBhbmltYXRpb24udHdlZW5zLmxlbmd0aCA6IDA7CisgICAgICAgICAgICAgICAg
aWYgKCBzdG9wcGVkICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3RvcHBlZCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgZm9yICggOyBpbmRleCA8IGxlbmd0aCA7IGluZGV4KysgKSB7CisgICAgICAgICAgICAg
ICAgICAgIGFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCAxICk7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgLy8gUmVzb2x2ZSB3aGVuIHdlIHBsYXllZCB0aGUgbGFz
dCBmcmFtZTsgb3RoZXJ3aXNlLCByZWplY3QKKyAgICAgICAgICAgICAgICBpZiAoIGdvdG9FbmQg
KSB7CisgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5p
bWF0aW9uLCAxLCAwIF0gKTsKKyAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZVdp
dGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZWplY3RXaXRoKCBlbGVtLCBbIGFu
aW1hdGlvbiwgZ290b0VuZCBdICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzOworICAgICAgICAgICAgfQorICAgICAgICB9ICksCisgICAgICAgIHByb3Bz
ID0gYW5pbWF0aW9uLnByb3BzOworCisgICAgcHJvcEZpbHRlciggcHJvcHMsIGFuaW1hdGlvbi5v
cHRzLnNwZWNpYWxFYXNpbmcgKTsKKworICAgIGZvciAoIDsgaW5kZXggPCBsZW5ndGggOyBpbmRl
eCsrICkgeworICAgICAgICByZXN1bHQgPSBBbmltYXRpb24ucHJlZmlsdGVyc1sgaW5kZXggXS5j
YWxsKCBhbmltYXRpb24sIGVsZW0sIHByb3BzLCBhbmltYXRpb24ub3B0cyApOworICAgICAgICBp
ZiAoIHJlc3VsdCApIHsKKyAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHJlc3Vs
dC5zdG9wICkgKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5Ll9xdWV1ZUhvb2tzKCBhbmltYXRp
b24uZWxlbSwgYW5pbWF0aW9uLm9wdHMucXVldWUgKS5zdG9wID0KKyAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5LnByb3h5KCByZXN1bHQuc3RvcCwgcmVzdWx0ICk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfQorCisgICAgalF1ZXJ5
Lm1hcCggcHJvcHMsIGNyZWF0ZVR3ZWVuLCBhbmltYXRpb24gKTsKKworICAgIGlmICggalF1ZXJ5
LmlzRnVuY3Rpb24oIGFuaW1hdGlvbi5vcHRzLnN0YXJ0ICkgKSB7CisgICAgICAgIGFuaW1hdGlv
bi5vcHRzLnN0YXJ0LmNhbGwoIGVsZW0sIGFuaW1hdGlvbiApOworICAgIH0KKworICAgIGpRdWVy
eS5meC50aW1lcigKKyAgICAgICAgalF1ZXJ5LmV4dGVuZCggdGljaywgeworICAgICAgICAgICAg
ZWxlbTogZWxlbSwKKyAgICAgICAgICAgIGFuaW06IGFuaW1hdGlvbiwKKyAgICAgICAgICAgIHF1
ZXVlOiBhbmltYXRpb24ub3B0cy5xdWV1ZQorICAgICAgICB9ICkKKyAgICApOworCisgICAgLy8g
YXR0YWNoIGNhbGxiYWNrcyBmcm9tIG9wdGlvbnMKKyAgICByZXR1cm4gYW5pbWF0aW9uLnByb2dy
ZXNzKCBhbmltYXRpb24ub3B0cy5wcm9ncmVzcyApCisgICAgICAgIC5kb25lKCBhbmltYXRpb24u
b3B0cy5kb25lLCBhbmltYXRpb24ub3B0cy5jb21wbGV0ZSApCisgICAgICAgIC5mYWlsKCBhbmlt
YXRpb24ub3B0cy5mYWlsICkKKyAgICAgICAgLmFsd2F5cyggYW5pbWF0aW9uLm9wdHMuYWx3YXlz
ICk7Cit9CisKK2pRdWVyeS5BbmltYXRpb24gPSBqUXVlcnkuZXh0ZW5kKCBBbmltYXRpb24sIHsK
KyAgICB0d2VlbmVyczogeworICAgICAgICAiKiI6IFsgZnVuY3Rpb24oIHByb3AsIHZhbHVlICkg
eworICAgICAgICAgICAgdmFyIHR3ZWVuID0gdGhpcy5jcmVhdGVUd2VlbiggcHJvcCwgdmFsdWUg
KTsKKyAgICAgICAgICAgIGFkanVzdENTUyggdHdlZW4uZWxlbSwgcHJvcCwgcmNzc051bS5leGVj
KCB2YWx1ZSApLCB0d2VlbiApOworICAgICAgICAgICAgcmV0dXJuIHR3ZWVuOworICAgICAgICB9
IF0KKyAgICB9LAorCisgICAgdHdlZW5lcjogZnVuY3Rpb24oIHByb3BzLCBjYWxsYmFjayApIHsK
KyAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggcHJvcHMgKSApIHsKKyAgICAgICAgICAg
IGNhbGxiYWNrID0gcHJvcHM7CisgICAgICAgICAgICBwcm9wcyA9IFsgIioiIF07CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBwcm9wcyA9IHByb3BzLm1hdGNoKCBybm90d2hpdGUgKTsK
KyAgICAgICAgfQorCisgICAgICAgIHZhciBwcm9wLAorICAgICAgICAgICAgaW5kZXggPSAwLAor
ICAgICAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoOworCisgICAgICAgIGZvciAoIDsgaW5k
ZXggPCBsZW5ndGggOyBpbmRleCsrICkgeworICAgICAgICAgICAgcHJvcCA9IHByb3BzWyBpbmRl
eCBdOworICAgICAgICAgICAgQW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gPSBBbmltYXRpb24u
dHdlZW5lcnNbIHByb3AgXSB8fCBbXTsKKyAgICAgICAgICAgIEFuaW1hdGlvbi50d2VlbmVyc1sg
cHJvcCBdLnVuc2hpZnQoIGNhbGxiYWNrICk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgcHJl
ZmlsdGVyczogWyBkZWZhdWx0UHJlZmlsdGVyIF0sCisKKyAgICBwcmVmaWx0ZXI6IGZ1bmN0aW9u
KCBjYWxsYmFjaywgcHJlcGVuZCApIHsKKyAgICAgICAgaWYgKCBwcmVwZW5kICkgeworICAgICAg
ICAgICAgQW5pbWF0aW9uLnByZWZpbHRlcnMudW5zaGlmdCggY2FsbGJhY2sgKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIEFuaW1hdGlvbi5wcmVmaWx0ZXJzLnB1c2goIGNhbGxiYWNr
ICk7CisgICAgICAgIH0KKyAgICB9Cit9ICk7CisKK2pRdWVyeS5zcGVlZCA9IGZ1bmN0aW9uKCBz
cGVlZCwgZWFzaW5nLCBmbiApIHsKKyAgICB2YXIgb3B0ID0gc3BlZWQgJiYgdHlwZW9mIHNwZWVk
ID09PSAib2JqZWN0IiA/IGpRdWVyeS5leHRlbmQoIHt9LCBzcGVlZCApIDogeworICAgICAgICBj
b21wbGV0ZTogZm4gfHwgIWZuICYmIGVhc2luZyB8fAorICAgICAgICAgICAgalF1ZXJ5LmlzRnVu
Y3Rpb24oIHNwZWVkICkgJiYgc3BlZWQsCisgICAgICAgIGR1cmF0aW9uOiBzcGVlZCwKKyAgICAg
ICAgZWFzaW5nOiBmbiAmJiBlYXNpbmcgfHwgZWFzaW5nICYmICFqUXVlcnkuaXNGdW5jdGlvbigg
ZWFzaW5nICkgJiYgZWFzaW5nCisgICAgfTsKKworICAgIG9wdC5kdXJhdGlvbiA9IGpRdWVyeS5m
eC5vZmYgPyAwIDogdHlwZW9mIG9wdC5kdXJhdGlvbiA9PT0gIm51bWJlciIgPworICAgICAgICBv
cHQuZHVyYXRpb24gOiBvcHQuZHVyYXRpb24gaW4galF1ZXJ5LmZ4LnNwZWVkcyA/CisgICAgICAg
ICAgICBqUXVlcnkuZnguc3BlZWRzWyBvcHQuZHVyYXRpb24gXSA6IGpRdWVyeS5meC5zcGVlZHMu
X2RlZmF1bHQ7CisKKyAgICAvLyBOb3JtYWxpemUgb3B0LnF1ZXVlIC0gdHJ1ZS91bmRlZmluZWQv
bnVsbCAtPiAiZngiCisgICAgaWYgKCBvcHQucXVldWUgPT0gbnVsbCB8fCBvcHQucXVldWUgPT09
IHRydWUgKSB7CisgICAgICAgIG9wdC5xdWV1ZSA9ICJmeCI7CisgICAgfQorCisgICAgLy8gUXVl
dWVpbmcKKyAgICBvcHQub2xkID0gb3B0LmNvbXBsZXRlOworCisgICAgb3B0LmNvbXBsZXRlID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIG9wdC5vbGQgKSAp
IHsKKyAgICAgICAgICAgIG9wdC5vbGQuY2FsbCggdGhpcyApOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKCBvcHQucXVldWUgKSB7CisgICAgICAgICAgICBqUXVlcnkuZGVxdWV1ZSggdGhpcywg
b3B0LnF1ZXVlICk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgcmV0dXJuIG9wdDsKK307CisK
K2pRdWVyeS5mbi5leHRlbmQoIHsKKyAgICBmYWRlVG86IGZ1bmN0aW9uKCBzcGVlZCwgdG8sIGVh
c2luZywgY2FsbGJhY2sgKSB7CisKKyAgICAgICAgLy8gU2hvdyBhbnkgaGlkZGVuIGVsZW1lbnRz
IGFmdGVyIHNldHRpbmcgb3BhY2l0eSB0byAwCisgICAgICAgIHJldHVybiB0aGlzLmZpbHRlcigg
aXNIaWRkZW4gKS5jc3MoICJvcGFjaXR5IiwgMCApLnNob3coKQorCisgICAgICAgICAgICAvLyBB
bmltYXRlIHRvIHRoZSB2YWx1ZSBzcGVjaWZpZWQKKyAgICAgICAgICAgIC5lbmQoKS5hbmltYXRl
KCB7IG9wYWNpdHk6IHRvIH0sIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7CisgICAgfSwKKyAg
ICBhbmltYXRlOiBmdW5jdGlvbiggcHJvcCwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7Cisg
ICAgICAgIHZhciBlbXB0eSA9IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBwcm9wICksCisgICAgICAg
ICAgICBvcHRhbGwgPSBqUXVlcnkuc3BlZWQoIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICksCisg
ICAgICAgICAgICBkb0FuaW1hdGlvbiA9IGZ1bmN0aW9uKCkgeworCisgICAgICAgICAgICAgICAg
Ly8gT3BlcmF0ZSBvbiBhIGNvcHkgb2YgcHJvcCBzbyBwZXItcHJvcGVydHkgZWFzaW5nIHdvbid0
IGJlIGxvc3QKKyAgICAgICAgICAgICAgICB2YXIgYW5pbSA9IEFuaW1hdGlvbiggdGhpcywgalF1
ZXJ5LmV4dGVuZCgge30sIHByb3AgKSwgb3B0YWxsICk7CisKKyAgICAgICAgICAgICAgICAvLyBF
bXB0eSBhbmltYXRpb25zLCBvciBmaW5pc2hpbmcgcmVzb2x2ZXMgaW1tZWRpYXRlbHkKKyAgICAg
ICAgICAgICAgICBpZiAoIGVtcHR5IHx8IGRhdGFQcml2LmdldCggdGhpcywgImZpbmlzaCIgKSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgYW5pbS5zdG9wKCB0cnVlICk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGRvQW5pbWF0aW9uLmZpbmlzaCA9IGRv
QW5pbWF0aW9uOworCisgICAgICAgIHJldHVybiBlbXB0eSB8fCBvcHRhbGwucXVldWUgPT09IGZh
bHNlID8KKyAgICAgICAgICAgIHRoaXMuZWFjaCggZG9BbmltYXRpb24gKSA6CisgICAgICAgICAg
ICB0aGlzLnF1ZXVlKCBvcHRhbGwucXVldWUsIGRvQW5pbWF0aW9uICk7CisgICAgfSwKKyAgICBz
dG9wOiBmdW5jdGlvbiggdHlwZSwgY2xlYXJRdWV1ZSwgZ290b0VuZCApIHsKKyAgICAgICAgdmFy
IHN0b3BRdWV1ZSA9IGZ1bmN0aW9uKCBob29rcyApIHsKKyAgICAgICAgICAgIHZhciBzdG9wID0g
aG9va3Muc3RvcDsKKyAgICAgICAgICAgIGRlbGV0ZSBob29rcy5zdG9wOworICAgICAgICAgICAg
c3RvcCggZ290b0VuZCApOworICAgICAgICB9OworCisgICAgICAgIGlmICggdHlwZW9mIHR5cGUg
IT09ICJzdHJpbmciICkgeworICAgICAgICAgICAgZ290b0VuZCA9IGNsZWFyUXVldWU7CisgICAg
ICAgICAgICBjbGVhclF1ZXVlID0gdHlwZTsKKyAgICAgICAgICAgIHR5cGUgPSB1bmRlZmluZWQ7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBjbGVhclF1ZXVlICYmIHR5cGUgIT09IGZhbHNlICkg
eworICAgICAgICAgICAgdGhpcy5xdWV1ZSggdHlwZSB8fCAiZngiLCBbXSApOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2
YXIgZGVxdWV1ZSA9IHRydWUsCisgICAgICAgICAgICAgICAgaW5kZXggPSB0eXBlICE9IG51bGwg
JiYgdHlwZSArICJxdWV1ZUhvb2tzIiwKKyAgICAgICAgICAgICAgICB0aW1lcnMgPSBqUXVlcnku
dGltZXJzLAorICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKTsKKwor
ICAgICAgICAgICAgaWYgKCBpbmRleCApIHsKKyAgICAgICAgICAgICAgICBpZiAoIGRhdGFbIGlu
ZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICkgeworICAgICAgICAgICAgICAgICAgICBzdG9w
UXVldWUoIGRhdGFbIGluZGV4IF0gKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIGZvciAoIGluZGV4IGluIGRhdGEgKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmICggZGF0YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgJiYg
cnJ1bi50ZXN0KCBpbmRleCApICkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RvcFF1ZXVl
KCBkYXRhWyBpbmRleCBdICk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoIGluZGV4ID0gdGltZXJzLmxl
bmd0aDsgaW5kZXgtLTsgKSB7CisgICAgICAgICAgICAgICAgaWYgKCB0aW1lcnNbIGluZGV4IF0u
ZWxlbSA9PT0gdGhpcyAmJgorICAgICAgICAgICAgICAgICAgICAoIHR5cGUgPT0gbnVsbCB8fCB0
aW1lcnNbIGluZGV4IF0ucXVldWUgPT09IHR5cGUgKSApIHsKKworICAgICAgICAgICAgICAgICAg
ICB0aW1lcnNbIGluZGV4IF0uYW5pbS5zdG9wKCBnb3RvRW5kICk7CisgICAgICAgICAgICAgICAg
ICAgIGRlcXVldWUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgdGltZXJzLnNwbGljZSgg
aW5kZXgsIDEgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIFN0YXJ0IHRoZSBuZXh0IGluIHRoZSBxdWV1ZSBpZiB0aGUgbGFzdCBzdGVwIHdhc24n
dCBmb3JjZWQuCisgICAgICAgICAgICAvLyBUaW1lcnMgY3VycmVudGx5IHdpbGwgY2FsbCB0aGVp
ciBjb21wbGV0ZSBjYWxsYmFja3MsIHdoaWNoCisgICAgICAgICAgICAvLyB3aWxsIGRlcXVldWUg
YnV0IG9ubHkgaWYgdGhleSB3ZXJlIGdvdG9FbmQuCisgICAgICAgICAgICBpZiAoIGRlcXVldWUg
fHwgIWdvdG9FbmQgKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5
cGUgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSApOworICAgIH0sCisgICAgZmluaXNoOiBm
dW5jdGlvbiggdHlwZSApIHsKKyAgICAgICAgaWYgKCB0eXBlICE9PSBmYWxzZSApIHsKKyAgICAg
ICAgICAgIHR5cGUgPSB0eXBlIHx8ICJmeCI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRo
aXMuZWFjaCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgaW5kZXgsCisgICAgICAgICAg
ICAgICAgZGF0YSA9IGRhdGFQcml2LmdldCggdGhpcyApLAorICAgICAgICAgICAgICAgIHF1ZXVl
ID0gZGF0YVsgdHlwZSArICJxdWV1ZSIgXSwKKyAgICAgICAgICAgICAgICBob29rcyA9IGRhdGFb
IHR5cGUgKyAicXVldWVIb29rcyIgXSwKKyAgICAgICAgICAgICAgICB0aW1lcnMgPSBqUXVlcnku
dGltZXJzLAorICAgICAgICAgICAgICAgIGxlbmd0aCA9IHF1ZXVlID8gcXVldWUubGVuZ3RoIDog
MDsKKworICAgICAgICAgICAgLy8gRW5hYmxlIGZpbmlzaGluZyBmbGFnIG9uIHByaXZhdGUgZGF0
YQorICAgICAgICAgICAgZGF0YS5maW5pc2ggPSB0cnVlOworCisgICAgICAgICAgICAvLyBFbXB0
eSB0aGUgcXVldWUgZmlyc3QKKyAgICAgICAgICAgIGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwg
W10gKTsKKworICAgICAgICAgICAgaWYgKCBob29rcyAmJiBob29rcy5zdG9wICkgeworICAgICAg
ICAgICAgICAgIGhvb2tzLnN0b3AuY2FsbCggdGhpcywgdHJ1ZSApOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvLyBMb29rIGZvciBhbnkgYWN0aXZlIGFuaW1hdGlvbnMsIGFuZCBmaW5p
c2ggdGhlbQorICAgICAgICAgICAgZm9yICggaW5kZXggPSB0aW1lcnMubGVuZ3RoOyBpbmRleC0t
OyApIHsKKyAgICAgICAgICAgICAgICBpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlz
ICYmIHRpbWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgdGltZXJzWyBpbmRleCBdLmFuaW0uc3RvcCggdHJ1ZSApOworICAgICAgICAgICAgICAgICAg
ICB0aW1lcnMuc3BsaWNlKCBpbmRleCwgMSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gTG9vayBmb3IgYW55IGFuaW1hdGlvbnMgaW4gdGhlIG9s
ZCBxdWV1ZSBhbmQgZmluaXNoIHRoZW0KKyAgICAgICAgICAgIGZvciAoIGluZGV4ID0gMDsgaW5k
ZXggPCBsZW5ndGg7IGluZGV4KysgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBxdWV1ZVsgaW5k
ZXggXSAmJiBxdWV1ZVsgaW5kZXggXS5maW5pc2ggKSB7CisgICAgICAgICAgICAgICAgICAgIHF1
ZXVlWyBpbmRleCBdLmZpbmlzaC5jYWxsKCB0aGlzICk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBUdXJuIG9mZiBmaW5pc2hpbmcgZmxhZworICAg
ICAgICAgICAgZGVsZXRlIGRhdGEuZmluaXNoOworICAgICAgICB9ICk7CisgICAgfQorfSApOwor
CitqUXVlcnkuZWFjaCggWyAidG9nZ2xlIiwgInNob3ciLCAiaGlkZSIgXSwgZnVuY3Rpb24oIGks
IG5hbWUgKSB7CisgICAgdmFyIGNzc0ZuID0galF1ZXJ5LmZuWyBuYW1lIF07CisgICAgalF1ZXJ5
LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7CisgICAg
ICAgIHJldHVybiBzcGVlZCA9PSBudWxsIHx8IHR5cGVvZiBzcGVlZCA9PT0gImJvb2xlYW4iID8K
KyAgICAgICAgICAgIGNzc0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSA6CisgICAgICAgICAg
ICB0aGlzLmFuaW1hdGUoIGdlbkZ4KCBuYW1lLCB0cnVlICksIHNwZWVkLCBlYXNpbmcsIGNhbGxi
YWNrICk7CisgICAgfTsKK30gKTsKKworLy8gR2VuZXJhdGUgc2hvcnRjdXRzIGZvciBjdXN0b20g
YW5pbWF0aW9ucworalF1ZXJ5LmVhY2goIHsKKyAgICBzbGlkZURvd246IGdlbkZ4KCAic2hvdyIg
KSwKKyAgICBzbGlkZVVwOiBnZW5GeCggImhpZGUiICksCisgICAgc2xpZGVUb2dnbGU6IGdlbkZ4
KCAidG9nZ2xlIiApLAorICAgIGZhZGVJbjogeyBvcGFjaXR5OiAic2hvdyIgfSwKKyAgICBmYWRl
T3V0OiB7IG9wYWNpdHk6ICJoaWRlIiB9LAorICAgIGZhZGVUb2dnbGU6IHsgb3BhY2l0eTogInRv
Z2dsZSIgfQorfSwgZnVuY3Rpb24oIG5hbWUsIHByb3BzICkgeworICAgIGpRdWVyeS5mblsgbmFt
ZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkgeworICAgICAgICByZXR1
cm4gdGhpcy5hbmltYXRlKCBwcm9wcywgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTsKKyAgICB9
OworfSApOworCitqUXVlcnkudGltZXJzID0gW107CitqUXVlcnkuZngudGljayA9IGZ1bmN0aW9u
KCkgeworICAgIHZhciB0aW1lciwKKyAgICAgICAgaSA9IDAsCisgICAgICAgIHRpbWVycyA9IGpR
dWVyeS50aW1lcnM7CisKKyAgICBmeE5vdyA9IGpRdWVyeS5ub3coKTsKKworICAgIGZvciAoIDsg
aSA8IHRpbWVycy5sZW5ndGg7IGkrKyApIHsKKyAgICAgICAgdGltZXIgPSB0aW1lcnNbIGkgXTsK
KworICAgICAgICAvLyBDaGVja3MgdGhlIHRpbWVyIGhhcyBub3QgYWxyZWFkeSBiZWVuIHJlbW92
ZWQKKyAgICAgICAgaWYgKCAhdGltZXIoKSAmJiB0aW1lcnNbIGkgXSA9PT0gdGltZXIgKSB7Cisg
ICAgICAgICAgICB0aW1lcnMuc3BsaWNlKCBpLS0sIDEgKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmICggIXRpbWVycy5sZW5ndGggKSB7CisgICAgICAgIGpRdWVyeS5meC5zdG9wKCk7Cisg
ICAgfQorICAgIGZ4Tm93ID0gdW5kZWZpbmVkOworfTsKKworalF1ZXJ5LmZ4LnRpbWVyID0gZnVu
Y3Rpb24oIHRpbWVyICkgeworICAgIGpRdWVyeS50aW1lcnMucHVzaCggdGltZXIgKTsKKyAgICBp
ZiAoIHRpbWVyKCkgKSB7CisgICAgICAgIGpRdWVyeS5meC5zdGFydCgpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGpRdWVyeS50aW1lcnMucG9wKCk7CisgICAgfQorfTsKKworalF1ZXJ5LmZ4Lmlu
dGVydmFsID0gMTM7CitqUXVlcnkuZnguc3RhcnQgPSBmdW5jdGlvbigpIHsKKyAgICBpZiAoICF0
aW1lcklkICkgeworICAgICAgICB0aW1lcklkID0gd2luZG93LnNldEludGVydmFsKCBqUXVlcnku
ZngudGljaywgalF1ZXJ5LmZ4LmludGVydmFsICk7CisgICAgfQorfTsKKworalF1ZXJ5LmZ4LnN0
b3AgPSBmdW5jdGlvbigpIHsKKyAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCggdGltZXJJZCApOwor
CisgICAgdGltZXJJZCA9IG51bGw7Cit9OworCitqUXVlcnkuZnguc3BlZWRzID0geworICAgIHNs
b3c6IDYwMCwKKyAgICBmYXN0OiAyMDAsCisKKyAgICAvLyBEZWZhdWx0IHNwZWVkCisgICAgX2Rl
ZmF1bHQ6IDQwMAorfTsKKworCisvLyBCYXNlZCBvZmYgb2YgdGhlIHBsdWdpbiBieSBDbGludCBI
ZWxmZXJzLCB3aXRoIHBlcm1pc3Npb24uCisvLyBodHRwOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8y
MDEwMDMyNDAxNDc0Ny9odHRwOi8vYmxpbmRzaWduYWxzLmNvbS9pbmRleC5waHAvMjAwOS8wNy9q
cXVlcnktZGVsYXkvCitqUXVlcnkuZm4uZGVsYXkgPSBmdW5jdGlvbiggdGltZSwgdHlwZSApIHsK
KyAgICB0aW1lID0galF1ZXJ5LmZ4ID8galF1ZXJ5LmZ4LnNwZWVkc1sgdGltZSBdIHx8IHRpbWUg
OiB0aW1lOworICAgIHR5cGUgPSB0eXBlIHx8ICJmeCI7CisKKyAgICByZXR1cm4gdGhpcy5xdWV1
ZSggdHlwZSwgZnVuY3Rpb24oIG5leHQsIGhvb2tzICkgeworICAgICAgICB2YXIgdGltZW91dCA9
IHdpbmRvdy5zZXRUaW1lb3V0KCBuZXh0LCB0aW1lICk7CisgICAgICAgIGhvb2tzLnN0b3AgPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQoIHRpbWVvdXQgKTsK
KyAgICAgICAgfTsKKyAgICB9ICk7Cit9OworCisKKyggZnVuY3Rpb24oKSB7CisgICAgdmFyIGlu
cHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImlucHV0IiApLAorICAgICAgICBzZWxlY3Qg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAic2VsZWN0IiApLAorICAgICAgICBvcHQgPSBzZWxl
Y3QuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJvcHRpb24iICkgKTsKKwor
ICAgIGlucHV0LnR5cGUgPSAiY2hlY2tib3giOworCisgICAgLy8gU3VwcG9ydDogaU9TPD01LjEs
IEFuZHJvaWQ8PTQuMisKKyAgICAvLyBEZWZhdWx0IHZhbHVlIGZvciBhIGNoZWNrYm94IHNob3Vs
ZCBiZSAib24iCisgICAgc3VwcG9ydC5jaGVja09uID0gaW5wdXQudmFsdWUgIT09ICIiOworCisg
ICAgLy8gU3VwcG9ydDogSUU8PTExKworICAgIC8vIE11c3QgYWNjZXNzIHNlbGVjdGVkSW5kZXgg
dG8gbWFrZSBkZWZhdWx0IG9wdGlvbnMgc2VsZWN0CisgICAgc3VwcG9ydC5vcHRTZWxlY3RlZCA9
IG9wdC5zZWxlY3RlZDsKKworICAgIC8vIFN1cHBvcnQ6IEFuZHJvaWQ8PTIuMworICAgIC8vIE9w
dGlvbnMgaW5zaWRlIGRpc2FibGVkIHNlbGVjdHMgYXJlIGluY29ycmVjdGx5IG1hcmtlZCBhcyBk
aXNhYmxlZAorICAgIHNlbGVjdC5kaXNhYmxlZCA9IHRydWU7CisgICAgc3VwcG9ydC5vcHREaXNh
YmxlZCA9ICFvcHQuZGlzYWJsZWQ7CisKKyAgICAvLyBTdXBwb3J0OiBJRTw9MTErCisgICAgLy8g
QW4gaW5wdXQgbG9zZXMgaXRzIHZhbHVlIGFmdGVyIGJlY29taW5nIGEgcmFkaW8KKyAgICBpbnB1
dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJpbnB1dCIgKTsKKyAgICBpbnB1dC52YWx1ZSA9
ICJ0IjsKKyAgICBpbnB1dC50eXBlID0gInJhZGlvIjsKKyAgICBzdXBwb3J0LnJhZGlvVmFsdWUg
PSBpbnB1dC52YWx1ZSA9PT0gInQiOworfSApKCk7CisKKwordmFyIGJvb2xIb29rLAorICAgIGF0
dHJIYW5kbGUgPSBqUXVlcnkuZXhwci5hdHRySGFuZGxlOworCitqUXVlcnkuZm4uZXh0ZW5kKCB7
CisgICAgYXR0cjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkgeworICAgICAgICByZXR1cm4gYWNj
ZXNzKCB0aGlzLCBqUXVlcnkuYXR0ciwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAx
ICk7CisgICAgfSwKKworICAgIHJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBuYW1lICkgeworICAgICAg
ICByZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGpRdWVyeS5yZW1v
dmVBdHRyKCB0aGlzLCBuYW1lICk7CisgICAgICAgIH0gKTsKKyAgICB9Cit9ICk7CisKK2pRdWVy
eS5leHRlbmQoIHsKKyAgICBhdHRyOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7Cisg
ICAgICAgIHZhciByZXQsIGhvb2tzLAorICAgICAgICAgICAgblR5cGUgPSBlbGVtLm5vZGVUeXBl
OworCisgICAgICAgIC8vIERvbid0IGdldC9zZXQgYXR0cmlidXRlcyBvbiB0ZXh0LCBjb21tZW50
IGFuZCBhdHRyaWJ1dGUgbm9kZXMKKyAgICAgICAgaWYgKCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9
PT0gOCB8fCBuVHlwZSA9PT0gMiApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIEZhbGxiYWNrIHRvIHByb3Agd2hlbiBhdHRyaWJ1dGVzIGFyZSBub3Qgc3Vw
cG9ydGVkCisgICAgICAgIGlmICggdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlID09PSAidW5kZWZp
bmVkIiApIHsKKyAgICAgICAgICAgIHJldHVybiBqUXVlcnkucHJvcCggZWxlbSwgbmFtZSwgdmFs
dWUgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEFsbCBhdHRyaWJ1dGVzIGFyZSBsb3dlcmNh
c2UKKyAgICAgICAgLy8gR3JhYiBuZWNlc3NhcnkgaG9vayBpZiBvbmUgaXMgZGVmaW5lZAorICAg
ICAgICBpZiAoIG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHsKKyAg
ICAgICAgICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7CisgICAgICAgICAgICBob29rcyA9
IGpRdWVyeS5hdHRySG9va3NbIG5hbWUgXSB8fAorICAgICAgICAgICAgICAgICggalF1ZXJ5LmV4
cHIubWF0Y2guYm9vbC50ZXN0KCBuYW1lICkgPyBib29sSG9vayA6IHVuZGVmaW5lZCApOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAg
ICAgaWYgKCB2YWx1ZSA9PT0gbnVsbCApIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkucmVtb3Zl
QXR0ciggZWxlbSwgbmFtZSApOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKCBob29rcyAmJiAic2V0IiBpbiBob29rcyAmJgorICAgICAg
ICAgICAgICAgICggcmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApICkgIT09IHVu
ZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgdmFsdWUgKyAiIiApOworICAg
ICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBob29rcyAm
JiAiZ2V0IiBpbiBob29rcyAmJiAoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApICkgIT09
IG51bGwgKSB7CisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9CisKKyAgICAgICAg
cmV0ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgbmFtZSApOworCisgICAgICAgIC8vIE5vbi1l
eGlzdGVudCBhdHRyaWJ1dGVzIHJldHVybiBudWxsLCB3ZSBub3JtYWxpemUgdG8gdW5kZWZpbmVk
CisgICAgICAgIHJldHVybiByZXQgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IHJldDsKKyAgICB9LAor
CisgICAgYXR0ckhvb2tzOiB7CisgICAgICAgIHR5cGU6IHsKKyAgICAgICAgICAgIHNldDogZnVu
Y3Rpb24oIGVsZW0sIHZhbHVlICkgeworICAgICAgICAgICAgICAgIGlmICggIXN1cHBvcnQucmFk
aW9WYWx1ZSAmJiB2YWx1ZSA9PT0gInJhZGlvIiAmJgorICAgICAgICAgICAgICAgICAgICBqUXVl
cnkubm9kZU5hbWUoIGVsZW0sICJpbnB1dCIgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgdmFy
IHZhbCA9IGVsZW0udmFsdWU7CisgICAgICAgICAgICAgICAgICAgIGVsZW0uc2V0QXR0cmlidXRl
KCAidHlwZSIsIHZhbHVlICk7CisgICAgICAgICAgICAgICAgICAgIGlmICggdmFsICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgZWxlbS52YWx1ZSA9IHZhbDsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSwKKworICAgIHJlbW92ZUF0dHI6IGZ1
bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKKyAgICAgICAgdmFyIG5hbWUsIHByb3BOYW1lLAorICAg
ICAgICAgICAgaSA9IDAsCisgICAgICAgICAgICBhdHRyTmFtZXMgPSB2YWx1ZSAmJiB2YWx1ZS5t
YXRjaCggcm5vdHdoaXRlICk7CisKKyAgICAgICAgaWYgKCBhdHRyTmFtZXMgJiYgZWxlbS5ub2Rl
VHlwZSA9PT0gMSApIHsKKyAgICAgICAgICAgIHdoaWxlICggKCBuYW1lID0gYXR0ck5hbWVzWyBp
KysgXSApICkgeworICAgICAgICAgICAgICAgIHByb3BOYW1lID0galF1ZXJ5LnByb3BGaXhbIG5h
bWUgXSB8fCBuYW1lOworCisgICAgICAgICAgICAgICAgLy8gQm9vbGVhbiBhdHRyaWJ1dGVzIGdl
dCBzcGVjaWFsIHRyZWF0bWVudCAoIzEwODcwKQorICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5
LmV4cHIubWF0Y2guYm9vbC50ZXN0KCBuYW1lICkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAg
Ly8gU2V0IGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgdG8gZmFsc2UKKyAgICAgICAgICAgICAgICAg
ICAgZWxlbVsgcHJvcE5hbWUgXSA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBuYW1lICk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9Cit9ICk7CisKKy8vIEhvb2tzIGZvciBib29sZWFuIGF0dHJpYnV0ZXMK
K2Jvb2xIb29rID0geworICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkgewor
ICAgICAgICBpZiAoIHZhbHVlID09PSBmYWxzZSApIHsKKworICAgICAgICAgICAgLy8gUmVtb3Zl
IGJvb2xlYW4gYXR0cmlidXRlcyB3aGVuIHNldCB0byBmYWxzZQorICAgICAgICAgICAgalF1ZXJ5
LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCBuYW1lICk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIG5hbWU7CisgICAgfQorfTsKK2pRdWVyeS5lYWNoKCBqUXVlcnkuZXhwci5tYXRjaC5ib29s
LnNvdXJjZS5tYXRjaCggL1x3Ky9nICksIGZ1bmN0aW9uKCBpLCBuYW1lICkgeworICAgIHZhciBn
ZXR0ZXIgPSBhdHRySGFuZGxlWyBuYW1lIF0gfHwgalF1ZXJ5LmZpbmQuYXR0cjsKKworICAgIGF0
dHJIYW5kbGVbIG5hbWUgXSA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHsKKyAgICAg
ICAgdmFyIHJldCwgaGFuZGxlOworICAgICAgICBpZiAoICFpc1hNTCApIHsKKworICAgICAgICAg
ICAgLy8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcCBieSB0ZW1wb3JhcmlseSByZW1vdmluZyB0aGlz
IGZ1bmN0aW9uIGZyb20gdGhlIGdldHRlcgorICAgICAgICAgICAgaGFuZGxlID0gYXR0ckhhbmRs
ZVsgbmFtZSBdOworICAgICAgICAgICAgYXR0ckhhbmRsZVsgbmFtZSBdID0gcmV0OworICAgICAg
ICAgICAgcmV0ID0gZ2V0dGVyKCBlbGVtLCBuYW1lLCBpc1hNTCApICE9IG51bGwgPworICAgICAg
ICAgICAgICAgIG5hbWUudG9Mb3dlckNhc2UoKSA6CisgICAgICAgICAgICAgICAgbnVsbDsKKyAg
ICAgICAgICAgIGF0dHJIYW5kbGVbIG5hbWUgXSA9IGhhbmRsZTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gcmV0OworICAgIH07Cit9ICk7CisKKworCisKK3ZhciByZm9jdXNhYmxlID0gL14o
PzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSwKKyAgICByY2xpY2thYmxlID0gL14o
PzphfGFyZWEpJC9pOworCitqUXVlcnkuZm4uZXh0ZW5kKCB7CisgICAgcHJvcDogZnVuY3Rpb24o
IG5hbWUsIHZhbHVlICkgeworICAgICAgICByZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkucHJv
cCwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7CisgICAgfSwKKworICAgIHJl
bW92ZVByb3A6IGZ1bmN0aW9uKCBuYW1lICkgeworICAgICAgICByZXR1cm4gdGhpcy5lYWNoKCBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzWyBqUXVlcnkucHJvcEZpeFsgbmFt
ZSBdIHx8IG5hbWUgXTsKKyAgICAgICAgfSApOworICAgIH0KK30gKTsKKworalF1ZXJ5LmV4dGVu
ZCggeworICAgIHByb3A6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHsKKyAgICAgICAg
dmFyIHJldCwgaG9va3MsCisgICAgICAgICAgICBuVHlwZSA9IGVsZW0ubm9kZVR5cGU7CisKKyAg
ICAgICAgLy8gRG9uJ3QgZ2V0L3NldCBwcm9wZXJ0aWVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0
dHJpYnV0ZSBub2RlcworICAgICAgICBpZiAoIG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8
IG5UeXBlID09PSAyICkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKCBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7CisKKyAg
ICAgICAgICAgIC8vIEZpeCBuYW1lIGFuZCBhdHRhY2ggaG9va3MKKyAgICAgICAgICAgIG5hbWUg
PSBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7CisgICAgICAgICAgICBob29rcyA9IGpR
dWVyeS5wcm9wSG9va3NbIG5hbWUgXTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggdmFsdWUg
IT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIGlmICggaG9va3MgJiYgInNldCIgaW4gaG9v
a3MgJiYKKyAgICAgICAgICAgICAgICAoIHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5h
bWUgKSApICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuICggZWxlbVsgbmFtZSBdID0gdmFsdWUg
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggaG9va3MgJiYgImdldCIgaW4gaG9va3MgJiYg
KCByZXQgPSBob29rcy5nZXQoIGVsZW0sIG5hbWUgKSApICE9PSBudWxsICkgeworICAgICAgICAg
ICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBlbGVtWyBuYW1lIF07
CisgICAgfSwKKworICAgIHByb3BIb29rczogeworICAgICAgICB0YWJJbmRleDogeworICAgICAg
ICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKKworICAgICAgICAgICAgICAgIC8vIGVsZW0u
dGFiSW5kZXggZG9lc24ndCBhbHdheXMgcmV0dXJuIHRoZQorICAgICAgICAgICAgICAgIC8vIGNv
cnJlY3QgdmFsdWUgd2hlbiBpdCBoYXNuJ3QgYmVlbiBleHBsaWNpdGx5IHNldAorICAgICAgICAg
ICAgICAgIC8vIGh0dHA6Ly9mbHVpZHByb2plY3Qub3JnL2Jsb2cvMjAwOC8wMS8wOS9nZXR0aW5n
LXNldHRpbmctYW5kLXJlbW92aW5nLXRhYmluZGV4LXZhbHVlcy13aXRoLWphdmFzY3JpcHQvCisg
ICAgICAgICAgICAgICAgLy8gVXNlIHByb3BlciBhdHRyaWJ1dGUgcmV0cmlldmFsKCMxMjA3MikK
KyAgICAgICAgICAgICAgICB2YXIgdGFiaW5kZXggPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCAi
dGFiaW5kZXgiICk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdGFiaW5kZXggPworICAgICAg
ICAgICAgICAgICAgICBwYXJzZUludCggdGFiaW5kZXgsIDEwICkgOgorICAgICAgICAgICAgICAg
ICAgICByZm9jdXNhYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSB8fAorICAgICAgICAgICAgICAg
ICAgICAgICAgcmNsaWNrYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgJiYgZWxlbS5ocmVmID8K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDoKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0sCisKKyAgICBwcm9wRml4
OiB7CisgICAgICAgICJmb3IiOiAiaHRtbEZvciIsCisgICAgICAgICJjbGFzcyI6ICJjbGFzc05h
bWUiCisgICAgfQorfSApOworCisvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHkKKy8vIEFjY2Vzc2lu
ZyB0aGUgc2VsZWN0ZWRJbmRleCBwcm9wZXJ0eQorLy8gZm9yY2VzIHRoZSBicm93c2VyIHRvIHJl
c3BlY3Qgc2V0dGluZyBzZWxlY3RlZAorLy8gb24gdGhlIG9wdGlvbgorLy8gVGhlIGdldHRlciBl
bnN1cmVzIGEgZGVmYXVsdCBvcHRpb24gaXMgc2VsZWN0ZWQKKy8vIHdoZW4gaW4gYW4gb3B0Z3Jv
dXAKK2lmICggIXN1cHBvcnQub3B0U2VsZWN0ZWQgKSB7CisgICAgalF1ZXJ5LnByb3BIb29rcy5z
ZWxlY3RlZCA9IHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAg
IHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7CisgICAgICAgICAgICBpZiAoIHBhcmVudCAm
JiBwYXJlbnQucGFyZW50Tm9kZSApIHsKKyAgICAgICAgICAgICAgICBwYXJlbnQucGFyZW50Tm9k
ZS5zZWxlY3RlZEluZGV4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG51bGw7
CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAg
ICB2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlOworICAgICAgICAgICAgaWYgKCBwYXJlbnQg
KSB7CisgICAgICAgICAgICAgICAgcGFyZW50LnNlbGVjdGVkSW5kZXg7CisKKyAgICAgICAgICAg
ICAgICBpZiAoIHBhcmVudC5wYXJlbnROb2RlICkgeworICAgICAgICAgICAgICAgICAgICBwYXJl
bnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH07Cit9CisKK2pRdWVyeS5lYWNoKCBbCisgICAgInRhYklu
ZGV4IiwKKyAgICAicmVhZE9ubHkiLAorICAgICJtYXhMZW5ndGgiLAorICAgICJjZWxsU3BhY2lu
ZyIsCisgICAgImNlbGxQYWRkaW5nIiwKKyAgICAicm93U3BhbiIsCisgICAgImNvbFNwYW4iLAor
ICAgICJ1c2VNYXAiLAorICAgICJmcmFtZUJvcmRlciIsCisgICAgImNvbnRlbnRFZGl0YWJsZSIK
K10sIGZ1bmN0aW9uKCkgeworICAgIGpRdWVyeS5wcm9wRml4WyB0aGlzLnRvTG93ZXJDYXNlKCkg
XSA9IHRoaXM7Cit9ICk7CisKKworCisKK3ZhciByY2xhc3MgPSAvW1x0XHJcblxmXS9nOworCitm
dW5jdGlvbiBnZXRDbGFzcyggZWxlbSApIHsKKyAgICByZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUg
JiYgZWxlbS5nZXRBdHRyaWJ1dGUoICJjbGFzcyIgKSB8fCAiIjsKK30KKworalF1ZXJ5LmZuLmV4
dGVuZCggeworICAgIGFkZENsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7CisgICAgICAgIHZhciBj
bGFzc2VzLCBlbGVtLCBjdXIsIGN1clZhbHVlLCBjbGF6eiwgaiwgZmluYWxWYWx1ZSwKKyAgICAg
ICAgICAgIGkgPSAwOworCisgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkg
KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaiApIHsKKyAgICAg
ICAgICAgICAgICBqUXVlcnkoIHRoaXMgKS5hZGRDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwg
Z2V0Q2xhc3MoIHRoaXMgKSApICk7CisgICAgICAgICAgICB9ICk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIgJiYgdmFsdWUgKSB7CisgICAgICAg
ICAgICBjbGFzc2VzID0gdmFsdWUubWF0Y2goIHJub3R3aGl0ZSApIHx8IFtdOworCisgICAgICAg
ICAgICB3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7CisgICAgICAgICAgICAgICAg
Y3VyVmFsdWUgPSBnZXRDbGFzcyggZWxlbSApOworICAgICAgICAgICAgICAgIGN1ciA9IGVsZW0u
bm9kZVR5cGUgPT09IDEgJiYKKyAgICAgICAgICAgICAgICAgICAgKCAiICIgKyBjdXJWYWx1ZSAr
ICIgIiApLnJlcGxhY2UoIHJjbGFzcywgIiAiICk7CisKKyAgICAgICAgICAgICAgICBpZiAoIGN1
ciApIHsKKyAgICAgICAgICAgICAgICAgICAgaiA9IDA7CisgICAgICAgICAgICAgICAgICAgIHdo
aWxlICggKCBjbGF6eiA9IGNsYXNzZXNbIGorKyBdICkgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGN1ci5pbmRleE9mKCAiICIgKyBjbGF6eiArICIgIiApIDwgMCApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjdXIgKz0gY2xhenogKyAiICI7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICAvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5n
LgorICAgICAgICAgICAgICAgICAgICBmaW5hbFZhbHVlID0galF1ZXJ5LnRyaW0oIGN1ciApOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoICJjbGFzcyIsIGZpbmFsVmFs
dWUgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0sCisKKyAgICBy
ZW1vdmVDbGFzczogZnVuY3Rpb24oIHZhbHVlICkgeworICAgICAgICB2YXIgY2xhc3NlcywgZWxl
bSwgY3VyLCBjdXJWYWx1ZSwgY2xhenosIGosIGZpbmFsVmFsdWUsCisgICAgICAgICAgICBpID0g
MDsKKworICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkgeworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGogKSB7CisgICAgICAgICAgICAgICAg
alF1ZXJ5KCB0aGlzICkucmVtb3ZlQ2xhc3MoIHZhbHVlLmNhbGwoIHRoaXMsIGosIGdldENsYXNz
KCB0aGlzICkgKSApOworICAgICAgICAgICAgfSApOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KCAhYXJndW1lbnRzLmxlbmd0aCApIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmF0dHIoICJj
bGFzcyIsICIiICk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHR5cGVvZiB2YWx1ZSA9PT0g
InN0cmluZyIgJiYgdmFsdWUgKSB7CisgICAgICAgICAgICBjbGFzc2VzID0gdmFsdWUubWF0Y2go
IHJub3R3aGl0ZSApIHx8IFtdOworCisgICAgICAgICAgICB3aGlsZSAoICggZWxlbSA9IHRoaXNb
IGkrKyBdICkgKSB7CisgICAgICAgICAgICAgICAgY3VyVmFsdWUgPSBnZXRDbGFzcyggZWxlbSAp
OworCisgICAgICAgICAgICAgICAgLy8gVGhpcyBleHByZXNzaW9uIGlzIGhlcmUgZm9yIGJldHRl
ciBjb21wcmVzc2liaWxpdHkgKHNlZSBhZGRDbGFzcykKKyAgICAgICAgICAgICAgICBjdXIgPSBl
bGVtLm5vZGVUeXBlID09PSAxICYmCisgICAgICAgICAgICAgICAgICAgICggIiAiICsgY3VyVmFs
dWUgKyAiICIgKS5yZXBsYWNlKCByY2xhc3MsICIgIiApOworCisgICAgICAgICAgICAgICAgaWYg
KCBjdXIgKSB7CisgICAgICAgICAgICAgICAgICAgIGogPSAwOworICAgICAgICAgICAgICAgICAg
ICB3aGlsZSAoICggY2xhenogPSBjbGFzc2VzWyBqKysgXSApICkgeworCisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBSZW1vdmUgKmFsbCogaW5zdGFuY2VzCisgICAgICAgICAgICAgICAgICAg
ICAgICB3aGlsZSAoIGN1ci5pbmRleE9mKCAiICIgKyBjbGF6eiArICIgIiApID4gLTEgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyID0gY3VyLnJlcGxhY2UoICIgIiArIGNsYXp6
ICsgIiAiLCAiICIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgYXNzaWduIGlmIGRpZmZlcmVu
dCB0byBhdm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuCisgICAgICAgICAgICAgICAgICAgIGZpbmFs
VmFsdWUgPSBqUXVlcnkudHJpbSggY3VyICk7CisgICAgICAgICAgICAgICAgICAgIGlmICggY3Vy
VmFsdWUgIT09IGZpbmFsVmFsdWUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnNl
dEF0dHJpYnV0ZSggImNsYXNzIiwgZmluYWxWYWx1ZSApOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIHRoaXM7CisgICAgfSwKKworICAgIHRvZ2dsZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUs
IHN0YXRlVmFsICkgeworICAgICAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTsKKworICAgICAg
ICBpZiAoIHR5cGVvZiBzdGF0ZVZhbCA9PT0gImJvb2xlYW4iICYmIHR5cGUgPT09ICJzdHJpbmci
ICkgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRlVmFsID8gdGhpcy5hZGRDbGFzcyggdmFsdWUg
KSA6IHRoaXMucmVtb3ZlQ2xhc3MoIHZhbHVlICk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
IGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
ZWFjaCggZnVuY3Rpb24oIGkgKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkudG9n
Z2xlQ2xhc3MoCisgICAgICAgICAgICAgICAgICAgIHZhbHVlLmNhbGwoIHRoaXMsIGksIGdldENs
YXNzKCB0aGlzICksIHN0YXRlVmFsICksCisgICAgICAgICAgICAgICAgICAgIHN0YXRlVmFsCisg
ICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0gKTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdmFyIGNsYXNzTmFt
ZSwgaSwgc2VsZiwgY2xhc3NOYW1lczsKKworICAgICAgICAgICAgaWYgKCB0eXBlID09PSAic3Ry
aW5nIiApIHsKKworICAgICAgICAgICAgICAgIC8vIFRvZ2dsZSBpbmRpdmlkdWFsIGNsYXNzIG5h
bWVzCisgICAgICAgICAgICAgICAgaSA9IDA7CisgICAgICAgICAgICAgICAgc2VsZiA9IGpRdWVy
eSggdGhpcyApOworICAgICAgICAgICAgICAgIGNsYXNzTmFtZXMgPSB2YWx1ZS5tYXRjaCggcm5v
dHdoaXRlICkgfHwgW107CisKKyAgICAgICAgICAgICAgICB3aGlsZSAoICggY2xhc3NOYW1lID0g
Y2xhc3NOYW1lc1sgaSsrIF0gKSApIHsKKworICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBl
YWNoIGNsYXNzTmFtZSBnaXZlbiwgc3BhY2Ugc2VwYXJhdGVkIGxpc3QKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCBzZWxmLmhhc0NsYXNzKCBjbGFzc05hbWUgKSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYucmVtb3ZlQ2xhc3MoIGNsYXNzTmFtZSApOworICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGRDbGFzcyggY2xh
c3NOYW1lICk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIFRvZ2dsZSB3aG9sZSBjbGFzcyBuYW1lCisgICAgICAgICAgICB9IGVsc2Ug
aWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGUgPT09ICJib29sZWFuIiApIHsKKyAgICAg
ICAgICAgICAgICBjbGFzc05hbWUgPSBnZXRDbGFzcyggdGhpcyApOworICAgICAgICAgICAgICAg
IGlmICggY2xhc3NOYW1lICkgeworCisgICAgICAgICAgICAgICAgICAgIC8vIFN0b3JlIGNsYXNz
TmFtZSBpZiBzZXQKKyAgICAgICAgICAgICAgICAgICAgZGF0YVByaXYuc2V0KCB0aGlzLCAiX19j
bGFzc05hbWVfXyIsIGNsYXNzTmFtZSApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIC8vIElmIHRoZSBlbGVtZW50IGhhcyBhIGNsYXNzIG5hbWUgb3IgaWYgd2UncmUgcGFz
c2VkIGBmYWxzZWAsCisgICAgICAgICAgICAgICAgLy8gdGhlbiByZW1vdmUgdGhlIHdob2xlIGNs
YXNzbmFtZSAoaWYgdGhlcmUgd2FzIG9uZSwgdGhlIGFib3ZlIHNhdmVkIGl0KS4KKyAgICAgICAg
ICAgICAgICAvLyBPdGhlcndpc2UgYnJpbmcgYmFjayB3aGF0ZXZlciB3YXMgcHJldmlvdXNseSBz
YXZlZCAoaWYgYW55dGhpbmcpLAorICAgICAgICAgICAgICAgIC8vIGZhbGxpbmcgYmFjayB0byB0
aGUgZW1wdHkgc3RyaW5nIGlmIG5vdGhpbmcgd2FzIHN0b3JlZC4KKyAgICAgICAgICAgICAgICBp
ZiAoIHRoaXMuc2V0QXR0cmlidXRlICkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEF0
dHJpYnV0ZSggImNsYXNzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZSB8fCB2
YWx1ZSA9PT0gZmFsc2UgPworICAgICAgICAgICAgICAgICAgICAgICAgIiIgOgorICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YVByaXYuZ2V0KCB0aGlzLCAiX19jbGFzc05hbWVfXyIgKSB8fCAi
IgorICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSApOworICAgIH0sCisKKyAgICBoYXNDbGFzczogZnVuY3Rpb24oIHNlbGVj
dG9yICkgeworICAgICAgICB2YXIgY2xhc3NOYW1lLCBlbGVtLAorICAgICAgICAgICAgaSA9IDA7
CisKKyAgICAgICAgY2xhc3NOYW1lID0gIiAiICsgc2VsZWN0b3IgKyAiICI7CisgICAgICAgIHdo
aWxlICggKCBlbGVtID0gdGhpc1sgaSsrIF0gKSApIHsKKyAgICAgICAgICAgIGlmICggZWxlbS5u
b2RlVHlwZSA9PT0gMSAmJgorICAgICAgICAgICAgICAgICggIiAiICsgZ2V0Q2xhc3MoIGVsZW0g
KSArICIgIiApLnJlcGxhY2UoIHJjbGFzcywgIiAiICkKKyAgICAgICAgICAgICAgICAgICAgLmlu
ZGV4T2YoIGNsYXNzTmFtZSApID4gLTEKKyAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KK30gKTsKKworCisKKwordmFyIHJyZXR1cm4gPSAvXHIvZywKKyAgICBy
c3BhY2VzID0gL1tceDIwXHRcclxuXGZdKy9nOworCitqUXVlcnkuZm4uZXh0ZW5kKCB7CisgICAg
dmFsOiBmdW5jdGlvbiggdmFsdWUgKSB7CisgICAgICAgIHZhciBob29rcywgcmV0LCBpc0Z1bmN0
aW9uLAorICAgICAgICAgICAgZWxlbSA9IHRoaXNbIDAgXTsKKworICAgICAgICBpZiAoICFhcmd1
bWVudHMubGVuZ3RoICkgeworICAgICAgICAgICAgaWYgKCBlbGVtICkgeworICAgICAgICAgICAg
ICAgIGhvb2tzID0galF1ZXJ5LnZhbEhvb2tzWyBlbGVtLnR5cGUgXSB8fAorICAgICAgICAgICAg
ICAgICAgICBqUXVlcnkudmFsSG9va3NbIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdOwor
CisgICAgICAgICAgICAgICAgaWYgKCBob29rcyAmJgorICAgICAgICAgICAgICAgICAgICAiZ2V0
IiBpbiBob29rcyAmJgorICAgICAgICAgICAgICAgICAgICAoIHJldCA9IGhvb2tzLmdldCggZWxl
bSwgInZhbHVlIiApICkgIT09IHVuZGVmaW5lZAorICAgICAgICAgICAgICAgICkgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIHJldCA9IGVsZW0udmFsdWU7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9m
IHJldCA9PT0gInN0cmluZyIgPworCisgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBtb3N0
IGNvbW1vbiBzdHJpbmcgY2FzZXMKKyAgICAgICAgICAgICAgICAgICAgcmV0LnJlcGxhY2UoIHJy
ZXR1cm4sICIiICkgOgorCisgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBjYXNlcyB3aGVy
ZSB2YWx1ZSBpcyBudWxsL3VuZGVmIG9yIG51bWJlcgorICAgICAgICAgICAgICAgICAgICByZXQg
PT0gbnVsbCA/ICIiIDogcmV0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBpc0Z1bmN0aW9uID0galF1ZXJ5LmlzRnVuY3Rpb24oIHZh
bHVlICk7CisKKyAgICAgICAgcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7CisgICAg
ICAgICAgICB2YXIgdmFsOworCisgICAgICAgICAgICBpZiAoIHRoaXMubm9kZVR5cGUgIT09IDEg
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoIGlzRnVuY3Rpb24gKSB7CisgICAgICAgICAgICAgICAgdmFsID0gdmFsdWUuY2FsbCgg
dGhpcywgaSwgalF1ZXJ5KCB0aGlzICkudmFsKCkgKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgdmFsID0gdmFsdWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC8vIFRyZWF0IG51bGwvdW5kZWZpbmVkIGFzICIiOyBjb252ZXJ0IG51bWJlcnMgdG8gc3RyaW5n
CisgICAgICAgICAgICBpZiAoIHZhbCA9PSBudWxsICkgeworICAgICAgICAgICAgICAgIHZhbCA9
ICIiOworCisgICAgICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2YgdmFsID09PSAibnVtYmVyIiAp
IHsKKyAgICAgICAgICAgICAgICB2YWwgKz0gIiI7CisKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
IGpRdWVyeS5pc0FycmF5KCB2YWwgKSApIHsKKyAgICAgICAgICAgICAgICB2YWwgPSBqUXVlcnku
bWFwKCB2YWwsIGZ1bmN0aW9uKCB2YWx1ZSApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHZhbHVlID09IG51bGwgPyAiIiA6IHZhbHVlICsgIiI7CisgICAgICAgICAgICAgICAgfSApOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBob29rcyA9IGpRdWVyeS52YWxIb29rc1sgdGhp
cy50eXBlIF0gfHwgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkg
XTsKKworICAgICAgICAgICAgLy8gSWYgc2V0IHJldHVybnMgdW5kZWZpbmVkLCBmYWxsIGJhY2sg
dG8gbm9ybWFsIHNldHRpbmcKKyAgICAgICAgICAgIGlmICggIWhvb2tzIHx8ICEoICJzZXQiIGlu
IGhvb2tzICkgfHwgaG9va3Muc2V0KCB0aGlzLCB2YWwsICJ2YWx1ZSIgKSA9PT0gdW5kZWZpbmVk
ICkgeworICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWw7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gKTsKKyAgICB9Cit9ICk7CisKK2pRdWVyeS5leHRlbmQoIHsKKyAgICB2YWxIb29r
czogeworICAgICAgICBvcHRpb246IHsKKyAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0g
KSB7CisKKyAgICAgICAgICAgICAgICB2YXIgdmFsID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwg
InZhbHVlIiApOworICAgICAgICAgICAgICAgIHJldHVybiB2YWwgIT0gbnVsbCA/CisgICAgICAg
ICAgICAgICAgICAgIHZhbCA6CisKKyAgICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogSUUx
MC0xMSsKKyAgICAgICAgICAgICAgICAgICAgLy8gb3B0aW9uLnRleHQgdGhyb3dzIGV4Y2VwdGlv
bnMgKCMxNDY4NiwgIzE0ODU4KQorICAgICAgICAgICAgICAgICAgICAvLyBTdHJpcCBhbmQgY29s
bGFwc2Ugd2hpdGVzcGFjZQorICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2h0bWwuc3Bl
Yy53aGF0d2cub3JnLyNzdHJpcC1hbmQtY29sbGFwc2Utd2hpdGVzcGFjZQorICAgICAgICAgICAg
ICAgICAgICBqUXVlcnkudHJpbSggalF1ZXJ5LnRleHQoIGVsZW0gKSApLnJlcGxhY2UoIHJzcGFj
ZXMsICIgIiApOworICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBzZWxlY3Q6IHsK
KyAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgdmFy
IHZhbHVlLCBvcHRpb24sCisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBlbGVtLm9wdGlv
bnMsCisgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gZWxlbS5zZWxlY3RlZEluZGV4LAorICAg
ICAgICAgICAgICAgICAgICBvbmUgPSBlbGVtLnR5cGUgPT09ICJzZWxlY3Qtb25lIiB8fCBpbmRl
eCA8IDAsCisgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IG9uZSA/IG51bGwgOiBbXSwKKyAg
ICAgICAgICAgICAgICAgICAgbWF4ID0gb25lID8gaW5kZXggKyAxIDogb3B0aW9ucy5sZW5ndGgs
CisgICAgICAgICAgICAgICAgICAgIGkgPSBpbmRleCA8IDAgPworICAgICAgICAgICAgICAgICAg
ICAgICAgbWF4IDoKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uZSA/IGluZGV4IDogMDsKKwor
ICAgICAgICAgICAgICAgIC8vIExvb3AgdGhyb3VnaCBhbGwgdGhlIHNlbGVjdGVkIG9wdGlvbnMK
KyAgICAgICAgICAgICAgICBmb3IgKCA7IGkgPCBtYXg7IGkrKyApIHsKKyAgICAgICAgICAgICAg
ICAgICAgb3B0aW9uID0gb3B0aW9uc1sgaSBdOworCisgICAgICAgICAgICAgICAgICAgIC8vIElF
OC05IGRvZXNuJ3QgdXBkYXRlIHNlbGVjdGVkIGFmdGVyIGZvcm0gcmVzZXQgKCMyNTUxKQorICAg
ICAgICAgICAgICAgICAgICBpZiAoICggb3B0aW9uLnNlbGVjdGVkIHx8IGkgPT09IGluZGV4ICkg
JiYKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IHJldHVybiBvcHRpb25z
IHRoYXQgYXJlIGRpc2FibGVkIG9yIGluIGEgZGlzYWJsZWQgb3B0Z3JvdXAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoIHN1cHBvcnQub3B0RGlzYWJsZWQgPworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAhb3B0aW9uLmRpc2FibGVkIDogb3B0aW9uLmdldEF0dHJpYnV0ZSgg
ImRpc2FibGVkIiApID09PSBudWxsICkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
ICFvcHRpb24ucGFyZW50Tm9kZS5kaXNhYmxlZCB8fAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAhalF1ZXJ5Lm5vZGVOYW1lKCBvcHRpb24ucGFyZW50Tm9kZSwgIm9wdGdyb3VwIiAp
ICkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgc3BlY2lmaWMgdmFs
dWUgZm9yIHRoZSBvcHRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0galF1ZXJ5
KCBvcHRpb24gKS52YWwoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3Qg
bmVlZCBhbiBhcnJheSBmb3Igb25lIHNlbGVjdHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggb25lICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gTXVs
dGktU2VsZWN0cyByZXR1cm4gYW4gYXJyYXkKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVl
cy5wdXNoKCB2YWx1ZSApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlczsKKyAgICAgICAgICAgIH0sCisKKyAg
ICAgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgeworICAgICAgICAgICAgICAg
IHZhciBvcHRpb25TZXQsIG9wdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IGVs
ZW0ub3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0galF1ZXJ5Lm1ha2VBcnJh
eSggdmFsdWUgKSwKKyAgICAgICAgICAgICAgICAgICAgaSA9IG9wdGlvbnMubGVuZ3RoOworCisg
ICAgICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAgICAgICAgICAgIG9wdGlv
biA9IG9wdGlvbnNbIGkgXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBvcHRpb24uc2VsZWN0
ZWQgPQorICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmluQXJyYXkoIGpRdWVyeS52YWxI
b29rcy5vcHRpb24uZ2V0KCBvcHRpb24gKSwgdmFsdWVzICkgPiAtMQorICAgICAgICAgICAgICAg
ICAgICApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvblNldCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAv
LyBGb3JjZSBicm93c2VycyB0byBiZWhhdmUgY29uc2lzdGVudGx5IHdoZW4gbm9uLW1hdGNoaW5n
IHZhbHVlIGlzIHNldAorICAgICAgICAgICAgICAgIGlmICggIW9wdGlvblNldCApIHsKKyAgICAg
ICAgICAgICAgICAgICAgZWxlbS5zZWxlY3RlZEluZGV4ID0gLTE7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZXM7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9Cit9ICk7CisKKy8vIFJhZGlvcyBhbmQgY2hlY2tib3hlcyBnZXR0ZXIvc2V0dGVy
CitqUXVlcnkuZWFjaCggWyAicmFkaW8iLCAiY2hlY2tib3giIF0sIGZ1bmN0aW9uKCkgeworICAg
IGpRdWVyeS52YWxIb29rc1sgdGhpcyBdID0geworICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVt
LCB2YWx1ZSApIHsKKyAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzQXJyYXkoIHZhbHVlICkgKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuICggZWxlbS5jaGVja2VkID0galF1ZXJ5LmluQXJyYXko
IGpRdWVyeSggZWxlbSApLnZhbCgpLCB2YWx1ZSApID4gLTEgKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH07CisgICAgaWYgKCAhc3VwcG9ydC5jaGVja09uICkgeworICAgICAgICBq
UXVlcnkudmFsSG9va3NbIHRoaXMgXS5nZXQgPSBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAg
ICAgIHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggInZhbHVlIiApID09PSBudWxsID8gIm9uIiA6
IGVsZW0udmFsdWU7CisgICAgICAgIH07CisgICAgfQorfSApOworCisKKworCisvLyBSZXR1cm4g
alF1ZXJ5IGZvciBhdHRyaWJ1dGVzLW9ubHkgaW5jbHVzaW9uCisKKwordmFyIHJmb2N1c01vcnBo
ID0gL14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvOworCitqUXVlcnkuZXh0ZW5kKCBq
UXVlcnkuZXZlbnQsIHsKKworICAgIHRyaWdnZXI6IGZ1bmN0aW9uKCBldmVudCwgZGF0YSwgZWxl
bSwgb25seUhhbmRsZXJzICkgeworCisgICAgICAgIHZhciBpLCBjdXIsIHRtcCwgYnViYmxlVHlw
ZSwgb250eXBlLCBoYW5kbGUsIHNwZWNpYWwsCisgICAgICAgICAgICBldmVudFBhdGggPSBbIGVs
ZW0gfHwgZG9jdW1lbnQgXSwKKyAgICAgICAgICAgIHR5cGUgPSBoYXNPd24uY2FsbCggZXZlbnQs
ICJ0eXBlIiApID8gZXZlbnQudHlwZSA6IGV2ZW50LAorICAgICAgICAgICAgbmFtZXNwYWNlcyA9
IGhhc093bi5jYWxsKCBldmVudCwgIm5hbWVzcGFjZSIgKSA/IGV2ZW50Lm5hbWVzcGFjZS5zcGxp
dCggIi4iICkgOiBbXTsKKworICAgICAgICBjdXIgPSB0bXAgPSBlbGVtID0gZWxlbSB8fCBkb2N1
bWVudDsKKworICAgICAgICAvLyBEb24ndCBkbyBldmVudHMgb24gdGV4dCBhbmQgY29tbWVudCBu
b2RlcworICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9
PT0gOCApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGZv
Y3VzL2JsdXIgbW9ycGhzIHRvIGZvY3VzaW4vb3V0OyBlbnN1cmUgd2UncmUgbm90IGZpcmluZyB0
aGVtIHJpZ2h0IG5vdworICAgICAgICBpZiAoIHJmb2N1c01vcnBoLnRlc3QoIHR5cGUgKyBqUXVl
cnkuZXZlbnQudHJpZ2dlcmVkICkgKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBpZiAoIHR5cGUuaW5kZXhPZiggIi4iICkgPiAtMSApIHsKKworICAgICAgICAg
ICAgLy8gTmFtZXNwYWNlZCB0cmlnZ2VyOyBjcmVhdGUgYSByZWdleHAgdG8gbWF0Y2ggZXZlbnQg
dHlwZSBpbiBoYW5kbGUoKQorICAgICAgICAgICAgbmFtZXNwYWNlcyA9IHR5cGUuc3BsaXQoICIu
IiApOworICAgICAgICAgICAgdHlwZSA9IG5hbWVzcGFjZXMuc2hpZnQoKTsKKyAgICAgICAgICAg
IG5hbWVzcGFjZXMuc29ydCgpOworICAgICAgICB9CisgICAgICAgIG9udHlwZSA9IHR5cGUuaW5k
ZXhPZiggIjoiICkgPCAwICYmICJvbiIgKyB0eXBlOworCisgICAgICAgIC8vIENhbGxlciBjYW4g
cGFzcyBpbiBhIGpRdWVyeS5FdmVudCBvYmplY3QsIE9iamVjdCwgb3IganVzdCBhbiBldmVudCB0
eXBlIHN0cmluZworICAgICAgICBldmVudCA9IGV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdID8KKyAg
ICAgICAgICAgIGV2ZW50IDoKKyAgICAgICAgICAgIG5ldyBqUXVlcnkuRXZlbnQoIHR5cGUsIHR5
cGVvZiBldmVudCA9PT0gIm9iamVjdCIgJiYgZXZlbnQgKTsKKworICAgICAgICAvLyBUcmlnZ2Vy
IGJpdG1hc2s6ICYgMSBmb3IgbmF0aXZlIGhhbmRsZXJzOyAmIDIgZm9yIGpRdWVyeSAoYWx3YXlz
IHRydWUpCisgICAgICAgIGV2ZW50LmlzVHJpZ2dlciA9IG9ubHlIYW5kbGVycyA/IDIgOiAzOwor
ICAgICAgICBldmVudC5uYW1lc3BhY2UgPSBuYW1lc3BhY2VzLmpvaW4oICIuIiApOworICAgICAg
ICBldmVudC5ybmFtZXNwYWNlID0gZXZlbnQubmFtZXNwYWNlID8KKyAgICAgICAgICAgIG5ldyBS
ZWdFeHAoICIoXnxcXC4pIiArIG5hbWVzcGFjZXMuam9pbiggIlxcLig/Oi4qXFwufCkiICkgKyAi
KFxcLnwkKSIgKSA6CisgICAgICAgICAgICBudWxsOworCisgICAgICAgIC8vIENsZWFuIHVwIHRo
ZSBldmVudCBpbiBjYXNlIGl0IGlzIGJlaW5nIHJldXNlZAorICAgICAgICBldmVudC5yZXN1bHQg
PSB1bmRlZmluZWQ7CisgICAgICAgIGlmICggIWV2ZW50LnRhcmdldCApIHsKKyAgICAgICAgICAg
IGV2ZW50LnRhcmdldCA9IGVsZW07CisgICAgICAgIH0KKworICAgICAgICAvLyBDbG9uZSBhbnkg
aW5jb21pbmcgZGF0YSBhbmQgcHJlcGVuZCB0aGUgZXZlbnQsIGNyZWF0aW5nIHRoZSBoYW5kbGVy
IGFyZyBsaXN0CisgICAgICAgIGRhdGEgPSBkYXRhID09IG51bGwgPworICAgICAgICAgICAgWyBl
dmVudCBdIDoKKyAgICAgICAgICAgIGpRdWVyeS5tYWtlQXJyYXkoIGRhdGEsIFsgZXZlbnQgXSAp
OworCisgICAgICAgIC8vIEFsbG93IHNwZWNpYWwgZXZlbnRzIHRvIGRyYXcgb3V0c2lkZSB0aGUg
bGluZXMKKyAgICAgICAgc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwg
e307CisgICAgICAgIGlmICggIW9ubHlIYW5kbGVycyAmJiBzcGVjaWFsLnRyaWdnZXIgJiYgc3Bl
Y2lhbC50cmlnZ2VyLmFwcGx5KCBlbGVtLCBkYXRhICkgPT09IGZhbHNlICkgeworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gRGV0ZXJtaW5lIGV2ZW50IHByb3Bh
Z2F0aW9uIHBhdGggaW4gYWR2YW5jZSwgcGVyIFczQyBldmVudHMgc3BlYyAoIzk5NTEpCisgICAg
ICAgIC8vIEJ1YmJsZSB1cCB0byBkb2N1bWVudCwgdGhlbiB0byB3aW5kb3c7IHdhdGNoIGZvciBh
IGdsb2JhbCBvd25lckRvY3VtZW50IHZhciAoIzk3MjQpCisgICAgICAgIGlmICggIW9ubHlIYW5k
bGVycyAmJiAhc3BlY2lhbC5ub0J1YmJsZSAmJiAhalF1ZXJ5LmlzV2luZG93KCBlbGVtICkgKSB7
CisKKyAgICAgICAgICAgIGJ1YmJsZVR5cGUgPSBzcGVjaWFsLmRlbGVnYXRlVHlwZSB8fCB0eXBl
OworICAgICAgICAgICAgaWYgKCAhcmZvY3VzTW9ycGgudGVzdCggYnViYmxlVHlwZSArIHR5cGUg
KSApIHsKKyAgICAgICAgICAgICAgICBjdXIgPSBjdXIucGFyZW50Tm9kZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGZvciAoIDsgY3VyOyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHsKKyAg
ICAgICAgICAgICAgICBldmVudFBhdGgucHVzaCggY3VyICk7CisgICAgICAgICAgICAgICAgdG1w
ID0gY3VyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBPbmx5IGFkZCB3aW5kb3cg
aWYgd2UgZ290IHRvIGRvY3VtZW50IChlLmcuLCBub3QgcGxhaW4gb2JqIG9yIGRldGFjaGVkIERP
TSkKKyAgICAgICAgICAgIGlmICggdG1wID09PSAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBkb2N1
bWVudCApICkgeworICAgICAgICAgICAgICAgIGV2ZW50UGF0aC5wdXNoKCB0bXAuZGVmYXVsdFZp
ZXcgfHwgdG1wLnBhcmVudFdpbmRvdyB8fCB3aW5kb3cgKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIC8vIEZpcmUgaGFuZGxlcnMgb24gdGhlIGV2ZW50IHBhdGgKKyAgICAg
ICAgaSA9IDA7CisgICAgICAgIHdoaWxlICggKCBjdXIgPSBldmVudFBhdGhbIGkrKyBdICkgJiYg
IWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7CisKKyAgICAgICAgICAgIGV2ZW50LnR5
cGUgPSBpID4gMSA/CisgICAgICAgICAgICAgICAgYnViYmxlVHlwZSA6CisgICAgICAgICAgICAg
ICAgc3BlY2lhbC5iaW5kVHlwZSB8fCB0eXBlOworCisgICAgICAgICAgICAvLyBqUXVlcnkgaGFu
ZGxlcgorICAgICAgICAgICAgaGFuZGxlID0gKCBkYXRhUHJpdi5nZXQoIGN1ciwgImV2ZW50cyIg
KSB8fCB7fSApWyBldmVudC50eXBlIF0gJiYKKyAgICAgICAgICAgICAgICBkYXRhUHJpdi5nZXQo
IGN1ciwgImhhbmRsZSIgKTsKKyAgICAgICAgICAgIGlmICggaGFuZGxlICkgeworICAgICAgICAg
ICAgICAgIGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC8vIE5hdGl2ZSBoYW5kbGVyCisgICAgICAgICAgICBoYW5kbGUgPSBvbnR5cGUgJiYg
Y3VyWyBvbnR5cGUgXTsKKyAgICAgICAgICAgIGlmICggaGFuZGxlICYmIGhhbmRsZS5hcHBseSAm
JiBhY2NlcHREYXRhKCBjdXIgKSApIHsKKyAgICAgICAgICAgICAgICBldmVudC5yZXN1bHQgPSBo
YW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApOworICAgICAgICAgICAgICAgIGlmICggZXZlbnQucmVz
dWx0ID09PSBmYWxzZSApIHsKKyAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1
bHQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgZXZlbnQudHlwZSA9IHR5cGU7CisKKyAgICAgICAgLy8gSWYgbm9ib2R5IHByZXZlbnRlZCB0
aGUgZGVmYXVsdCBhY3Rpb24sIGRvIGl0IG5vdworICAgICAgICBpZiAoICFvbmx5SGFuZGxlcnMg
JiYgIWV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpICkgeworCisgICAgICAgICAgICBpZiAoICgg
IXNwZWNpYWwuX2RlZmF1bHQgfHwKKyAgICAgICAgICAgICAgICBzcGVjaWFsLl9kZWZhdWx0LmFw
cGx5KCBldmVudFBhdGgucG9wKCksIGRhdGEgKSA9PT0gZmFsc2UgKSAmJgorICAgICAgICAgICAg
ICAgIGFjY2VwdERhdGEoIGVsZW0gKSApIHsKKworICAgICAgICAgICAgICAgIC8vIENhbGwgYSBu
YXRpdmUgRE9NIG1ldGhvZCBvbiB0aGUgdGFyZ2V0IHdpdGggdGhlIHNhbWUgbmFtZSBuYW1lIGFz
IHRoZSBldmVudC4KKyAgICAgICAgICAgICAgICAvLyBEb24ndCBkbyBkZWZhdWx0IGFjdGlvbnMg
b24gd2luZG93LCB0aGF0J3Mgd2hlcmUgZ2xvYmFsIHZhcmlhYmxlcyBiZSAoIzYxNzApCisgICAg
ICAgICAgICAgICAgaWYgKCBvbnR5cGUgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIGVsZW1bIHR5cGUg
XSApICYmICFqUXVlcnkuaXNXaW5kb3coIGVsZW0gKSApIHsKKworICAgICAgICAgICAgICAgICAg
ICAvLyBEb24ndCByZS10cmlnZ2VyIGFuIG9uRk9PIGV2ZW50IHdoZW4gd2UgY2FsbCBpdHMgRk9P
KCkgbWV0aG9kCisgICAgICAgICAgICAgICAgICAgIHRtcCA9IGVsZW1bIG9udHlwZSBdOworCisg
ICAgICAgICAgICAgICAgICAgIGlmICggdG1wICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ZWxlbVsgb250eXBlIF0gPSBudWxsOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgLy8gUHJldmVudCByZS10cmlnZ2VyaW5nIG9mIHRoZSBzYW1lIGV2ZW50LCBz
aW5jZSB3ZSBhbHJlYWR5IGJ1YmJsZWQgaXQgYWJvdmUKKyAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHR5cGU7CisgICAgICAgICAgICAgICAgICAgIGVsZW1bIHR5
cGUgXSgpOworICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdW5k
ZWZpbmVkOworCisgICAgICAgICAgICAgICAgICAgIGlmICggdG1wICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgZWxlbVsgb250eXBlIF0gPSB0bXA7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gZXZlbnQucmVzdWx0OworICAgIH0sCisKKyAgICAvLyBQaWdneWJhY2sgb24gYSBkb25v
ciBldmVudCB0byBzaW11bGF0ZSBhIGRpZmZlcmVudCBvbmUKKyAgICAvLyBVc2VkIG9ubHkgZm9y
IGBmb2N1cyhpbiB8IG91dClgIGV2ZW50cworICAgIHNpbXVsYXRlOiBmdW5jdGlvbiggdHlwZSwg
ZWxlbSwgZXZlbnQgKSB7CisgICAgICAgIHZhciBlID0galF1ZXJ5LmV4dGVuZCgKKyAgICAgICAg
ICAgIG5ldyBqUXVlcnkuRXZlbnQoKSwKKyAgICAgICAgICAgIGV2ZW50LAorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsCisgICAgICAgICAgICAgICAgaXNTaW11bGF0
ZWQ6IHRydWUKKyAgICAgICAgICAgIH0KKyAgICAgICAgKTsKKworICAgICAgICBqUXVlcnkuZXZl
bnQudHJpZ2dlciggZSwgbnVsbCwgZWxlbSApOworICAgIH0KKworfSApOworCitqUXVlcnkuZm4u
ZXh0ZW5kKCB7CisKKyAgICB0cmlnZ2VyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBqUXVlcnkuZXZl
bnQudHJpZ2dlciggdHlwZSwgZGF0YSwgdGhpcyApOworICAgICAgICB9ICk7CisgICAgfSwKKyAg
ICB0cmlnZ2VySGFuZGxlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7CisgICAgICAgIHZhciBl
bGVtID0gdGhpc1sgMCBdOworICAgICAgICBpZiAoIGVsZW0gKSB7CisgICAgICAgICAgICByZXR1
cm4galF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIGVsZW0sIHRydWUgKTsKKyAgICAg
ICAgfQorICAgIH0KK30gKTsKKworCitqUXVlcnkuZWFjaCggKCAiYmx1ciBmb2N1cyBmb2N1c2lu
IGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgIiArCisg
ICAgIm1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2Vl
bnRlciBtb3VzZWxlYXZlICIgKworICAgICJjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtl
eXByZXNzIGtleXVwIGVycm9yIGNvbnRleHRtZW51IiApLnNwbGl0KCAiICIgKSwKKyAgICBmdW5j
dGlvbiggaSwgbmFtZSApIHsKKworICAgIC8vIEhhbmRsZSBldmVudCBiaW5kaW5nCisgICAgalF1
ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggZGF0YSwgZm4gKSB7CisgICAgICAgIHJldHVybiBh
cmd1bWVudHMubGVuZ3RoID4gMCA/CisgICAgICAgICAgICB0aGlzLm9uKCBuYW1lLCBudWxsLCBk
YXRhLCBmbiApIDoKKyAgICAgICAgICAgIHRoaXMudHJpZ2dlciggbmFtZSApOworICAgIH07Cit9
ICk7CisKK2pRdWVyeS5mbi5leHRlbmQoIHsKKyAgICBob3ZlcjogZnVuY3Rpb24oIGZuT3Zlciwg
Zm5PdXQgKSB7CisgICAgICAgIHJldHVybiB0aGlzLm1vdXNlZW50ZXIoIGZuT3ZlciApLm1vdXNl
bGVhdmUoIGZuT3V0IHx8IGZuT3ZlciApOworICAgIH0KK30gKTsKKworCisKKworc3VwcG9ydC5m
b2N1c2luID0gIm9uZm9jdXNpbiIgaW4gd2luZG93OworCisKKy8vIFN1cHBvcnQ6IEZpcmVmb3gK
Ky8vIEZpcmVmb3ggZG9lc24ndCBoYXZlIGZvY3VzKGluIHwgb3V0KSBldmVudHMKKy8vIFJlbGF0
ZWQgdGlja2V0IC0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Njg3Nzg3CisvLworLy8gU3VwcG9ydDogQ2hyb21lLCBTYWZhcmkKKy8vIGZvY3VzKGluIHwgb3V0
KSBldmVudHMgZmlyZSBhZnRlciBmb2N1cyAmIGJsdXIgZXZlbnRzLAorLy8gd2hpY2ggaXMgc3Bl
YyB2aW9sYXRpb24gLSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2
ZW50cy1mb2N1c2V2ZW50LWV2ZW50LW9yZGVyCisvLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8v
Y29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NDk4NTcKK2lmICgg
IXN1cHBvcnQuZm9jdXNpbiApIHsKKyAgICBqUXVlcnkuZWFjaCggeyBmb2N1czogImZvY3VzaW4i
LCBibHVyOiAiZm9jdXNvdXQiIH0sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7CisKKyAgICAgICAg
Ly8gQXR0YWNoIGEgc2luZ2xlIGNhcHR1cmluZyBoYW5kbGVyIG9uIHRoZSBkb2N1bWVudCB3aGls
ZSBzb21lb25lIHdhbnRzIGZvY3VzaW4vZm9jdXNvdXQKKyAgICAgICAgdmFyIGhhbmRsZXIgPSBm
dW5jdGlvbiggZXZlbnQgKSB7CisgICAgICAgICAgICBqUXVlcnkuZXZlbnQuc2ltdWxhdGUoIGZp
eCwgZXZlbnQudGFyZ2V0LCBqUXVlcnkuZXZlbnQuZml4KCBldmVudCApICk7CisgICAgICAgIH07
CisKKyAgICAgICAgalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGZpeCBdID0geworICAgICAgICAgICAg
c2V0dXA6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHZhciBkb2MgPSB0aGlzLm93bmVy
RG9jdW1lbnQgfHwgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgYXR0YWNoZXMgPSBkYXRhUHJp
di5hY2Nlc3MoIGRvYywgZml4ICk7CisKKyAgICAgICAgICAgICAgICBpZiAoICFhdHRhY2hlcyAp
IHsKKyAgICAgICAgICAgICAgICAgICAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoIG9yaWcsIGhhbmRs
ZXIsIHRydWUgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZGF0YVByaXYu
YWNjZXNzKCBkb2MsIGZpeCwgKCBhdHRhY2hlcyB8fCAwICkgKyAxICk7CisgICAgICAgICAgICB9
LAorICAgICAgICAgICAgdGVhcmRvd246IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHZh
ciBkb2MgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcywKKyAgICAgICAgICAgICAgICAgICAg
YXR0YWNoZXMgPSBkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4ICkgLSAxOworCisgICAgICAgICAg
ICAgICAgaWYgKCAhYXR0YWNoZXMgKSB7CisgICAgICAgICAgICAgICAgICAgIGRvYy5yZW1vdmVF
dmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7CisgICAgICAgICAgICAgICAgICAg
IGRhdGFQcml2LnJlbW92ZSggZG9jLCBmaXggKTsKKworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXgsIGF0dGFjaGVz
ICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0g
KTsKK30KK3ZhciBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbjsKKwordmFyIG5vbmNlID0galF1
ZXJ5Lm5vdygpOworCit2YXIgcnF1ZXJ5ID0gKCAvXD8vICk7CisKKworCisvLyBTdXBwb3J0OiBB
bmRyb2lkIDIuMworLy8gV29ya2Fyb3VuZCBmYWlsdXJlIHRvIHN0cmluZy1jYXN0IG51bGwgaW5w
dXQKK2pRdWVyeS5wYXJzZUpTT04gPSBmdW5jdGlvbiggZGF0YSApIHsKKyAgICByZXR1cm4gSlNP
Ti5wYXJzZSggZGF0YSArICIiICk7Cit9OworCisKKy8vIENyb3NzLWJyb3dzZXIgeG1sIHBhcnNp
bmcKK2pRdWVyeS5wYXJzZVhNTCA9IGZ1bmN0aW9uKCBkYXRhICkgeworICAgIHZhciB4bWw7Cisg
ICAgaWYgKCAhZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gInN0cmluZyIgKSB7CisgICAgICAgIHJl
dHVybiBudWxsOworICAgIH0KKworICAgIC8vIFN1cHBvcnQ6IElFOQorICAgIHRyeSB7CisgICAg
ICAgIHhtbCA9ICggbmV3IHdpbmRvdy5ET01QYXJzZXIoKSApLnBhcnNlRnJvbVN0cmluZyggZGF0
YSwgInRleHQveG1sIiApOworICAgIH0gY2F0Y2ggKCBlICkgeworICAgICAgICB4bWwgPSB1bmRl
ZmluZWQ7CisgICAgfQorCisgICAgaWYgKCAheG1sIHx8IHhtbC5nZXRFbGVtZW50c0J5VGFnTmFt
ZSggInBhcnNlcmVycm9yIiApLmxlbmd0aCApIHsKKyAgICAgICAgalF1ZXJ5LmVycm9yKCAiSW52
YWxpZCBYTUw6ICIgKyBkYXRhICk7CisgICAgfQorICAgIHJldHVybiB4bWw7Cit9OworCisKK3Zh
cgorICAgIHJoYXNoID0gLyMuKiQvLAorICAgIHJ0cyA9IC8oWz8mXSlfPVteJl0qLywKKyAgICBy
aGVhZGVycyA9IC9eKC4qPyk6WyBcdF0qKFteXHJcbl0qKSQvbWcsCisKKyAgICAvLyAjNzY1Mywg
IzgxMjUsICM4MTUyOiBsb2NhbCBwcm90b2NvbCBkZXRlY3Rpb24KKyAgICBybG9jYWxQcm90b2Nv
bCA9IC9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRn
ZXQpOiQvLAorICAgIHJub0NvbnRlbnQgPSAvXig/OkdFVHxIRUFEKSQvLAorICAgIHJwcm90b2Nv
bCA9IC9eXC9cLy8sCisKKyAgICAvKiBQcmVmaWx0ZXJzCisgICAgICogMSkgVGhleSBhcmUgdXNl
ZnVsIHRvIGludHJvZHVjZSBjdXN0b20gZGF0YVR5cGVzIChzZWUgYWpheC9qc29ucC5qcyBmb3Ig
YW4gZXhhbXBsZSkKKyAgICAgKiAyKSBUaGVzZSBhcmUgY2FsbGVkOgorICAgICAqICAgIC0gQkVG
T1JFIGFza2luZyBmb3IgYSB0cmFuc3BvcnQKKyAgICAgKiAgICAtIEFGVEVSIHBhcmFtIHNlcmlh
bGl6YXRpb24gKHMuZGF0YSBpcyBhIHN0cmluZyBpZiBzLnByb2Nlc3NEYXRhIGlzIHRydWUpCisg
ICAgICogMykga2V5IGlzIHRoZSBkYXRhVHlwZQorICAgICAqIDQpIHRoZSBjYXRjaGFsbCBzeW1i
b2wgIioiIGNhbiBiZSB1c2VkCisgICAgICogNSkgZXhlY3V0aW9uIHdpbGwgc3RhcnQgd2l0aCB0
cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gY29udGludWUgZG93biB0byAiKiIgaWYgbmVlZGVk
CisgICAgICovCisgICAgcHJlZmlsdGVycyA9IHt9LAorCisgICAgLyogVHJhbnNwb3J0cyBiaW5k
aW5ncworICAgICAqIDEpIGtleSBpcyB0aGUgZGF0YVR5cGUKKyAgICAgKiAyKSB0aGUgY2F0Y2hh
bGwgc3ltYm9sICIqIiBjYW4gYmUgdXNlZAorICAgICAqIDMpIHNlbGVjdGlvbiB3aWxsIHN0YXJ0
IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGdvIHRvICIqIiBpZiBuZWVkZWQKKyAg
ICAgKi8KKyAgICB0cmFuc3BvcnRzID0ge30sCisKKyAgICAvLyBBdm9pZCBjb21tZW50LXByb2xv
ZyBjaGFyIHNlcXVlbmNlICgjMTAwOTgpOyBtdXN0IGFwcGVhc2UgbGludCBhbmQgZXZhZGUgY29t
cHJlc3Npb24KKyAgICBhbGxUeXBlcyA9ICIqLyIuY29uY2F0KCAiKiIgKSwKKworICAgIC8vIEFu
Y2hvciB0YWcgZm9yIHBhcnNpbmcgdGhlIGRvY3VtZW50IG9yaWdpbgorICAgIG9yaWdpbkFuY2hv
ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJhIiApOworICAgIG9yaWdpbkFuY2hvci5ocmVm
ID0gbG9jYXRpb24uaHJlZjsKKworLy8gQmFzZSAiY29uc3RydWN0b3IiIGZvciBqUXVlcnkuYWph
eFByZWZpbHRlciBhbmQgalF1ZXJ5LmFqYXhUcmFuc3BvcnQKK2Z1bmN0aW9uIGFkZFRvUHJlZmls
dGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlICkgeworCisgICAgLy8gZGF0YVR5cGVFeHByZXNz
aW9uIGlzIG9wdGlvbmFsIGFuZCBkZWZhdWx0cyB0byAiKiIKKyAgICByZXR1cm4gZnVuY3Rpb24o
IGRhdGFUeXBlRXhwcmVzc2lvbiwgZnVuYyApIHsKKworICAgICAgICBpZiAoIHR5cGVvZiBkYXRh
VHlwZUV4cHJlc3Npb24gIT09ICJzdHJpbmciICkgeworICAgICAgICAgICAgZnVuYyA9IGRhdGFU
eXBlRXhwcmVzc2lvbjsKKyAgICAgICAgICAgIGRhdGFUeXBlRXhwcmVzc2lvbiA9ICIqIjsKKyAg
ICAgICAgfQorCisgICAgICAgIHZhciBkYXRhVHlwZSwKKyAgICAgICAgICAgIGkgPSAwLAorICAg
ICAgICAgICAgZGF0YVR5cGVzID0gZGF0YVR5cGVFeHByZXNzaW9uLnRvTG93ZXJDYXNlKCkubWF0
Y2goIHJub3R3aGl0ZSApIHx8IFtdOworCisgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24o
IGZ1bmMgKSApIHsKKworICAgICAgICAgICAgLy8gRm9yIGVhY2ggZGF0YVR5cGUgaW4gdGhlIGRh
dGFUeXBlRXhwcmVzc2lvbgorICAgICAgICAgICAgd2hpbGUgKCAoIGRhdGFUeXBlID0gZGF0YVR5
cGVzWyBpKysgXSApICkgeworCisgICAgICAgICAgICAgICAgLy8gUHJlcGVuZCBpZiByZXF1ZXN0
ZWQKKyAgICAgICAgICAgICAgICBpZiAoIGRhdGFUeXBlWyAwIF0gPT09ICIrIiApIHsKKyAgICAg
ICAgICAgICAgICAgICAgZGF0YVR5cGUgPSBkYXRhVHlwZS5zbGljZSggMSApIHx8ICIqIjsKKyAg
ICAgICAgICAgICAgICAgICAgKCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRh
dGFUeXBlIF0gfHwgW10gKS51bnNoaWZ0KCBmdW5jICk7CisKKyAgICAgICAgICAgICAgICAvLyBP
dGhlcndpc2UgYXBwZW5kCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgKCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwg
W10gKS5wdXNoKCBmdW5jICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfTsKK30KKworLy8gQmFzZSBpbnNwZWN0aW9uIGZ1bmN0aW9uIGZvciBwcmVm
aWx0ZXJzIGFuZCB0cmFuc3BvcnRzCitmdW5jdGlvbiBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNw
b3J0cyggc3RydWN0dXJlLCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICkgeworCisg
ICAgdmFyIGluc3BlY3RlZCA9IHt9LAorICAgICAgICBzZWVraW5nVHJhbnNwb3J0ID0gKCBzdHJ1
Y3R1cmUgPT09IHRyYW5zcG9ydHMgKTsKKworICAgIGZ1bmN0aW9uIGluc3BlY3QoIGRhdGFUeXBl
ICkgeworICAgICAgICB2YXIgc2VsZWN0ZWQ7CisgICAgICAgIGluc3BlY3RlZFsgZGF0YVR5cGUg
XSA9IHRydWU7CisgICAgICAgIGpRdWVyeS5lYWNoKCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwg
W10sIGZ1bmN0aW9uKCBfLCBwcmVmaWx0ZXJPckZhY3RvcnkgKSB7CisgICAgICAgICAgICB2YXIg
ZGF0YVR5cGVPclRyYW5zcG9ydCA9IHByZWZpbHRlck9yRmFjdG9yeSggb3B0aW9ucywgb3JpZ2lu
YWxPcHRpb25zLCBqcVhIUiApOworICAgICAgICAgICAgaWYgKCB0eXBlb2YgZGF0YVR5cGVPclRy
YW5zcG9ydCA9PT0gInN0cmluZyIgJiYKKyAgICAgICAgICAgICAgICAhc2Vla2luZ1RyYW5zcG9y
dCAmJiAhaW5zcGVjdGVkWyBkYXRhVHlwZU9yVHJhbnNwb3J0IF0gKSB7CisKKyAgICAgICAgICAg
ICAgICBvcHRpb25zLmRhdGFUeXBlcy51bnNoaWZ0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7Cisg
ICAgICAgICAgICAgICAgaW5zcGVjdCggZGF0YVR5cGVPclRyYW5zcG9ydCApOworICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIHNlZWtpbmdUcmFu
c3BvcnQgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEoIHNlbGVjdGVkID0gZGF0YVR5cGVP
clRyYW5zcG9ydCApOworICAgICAgICAgICAgfQorICAgICAgICB9ICk7CisgICAgICAgIHJldHVy
biBzZWxlY3RlZDsKKyAgICB9CisKKyAgICByZXR1cm4gaW5zcGVjdCggb3B0aW9ucy5kYXRhVHlw
ZXNbIDAgXSApIHx8ICFpbnNwZWN0ZWRbICIqIiBdICYmIGluc3BlY3QoICIqIiApOworfQorCisv
LyBBIHNwZWNpYWwgZXh0ZW5kIGZvciBhamF4IG9wdGlvbnMKKy8vIHRoYXQgdGFrZXMgImZsYXQi
IG9wdGlvbnMgKG5vdCB0byBiZSBkZWVwIGV4dGVuZGVkKQorLy8gRml4ZXMgIzk4ODcKK2Z1bmN0
aW9uIGFqYXhFeHRlbmQoIHRhcmdldCwgc3JjICkgeworICAgIHZhciBrZXksIGRlZXAsCisgICAg
ICAgIGZsYXRPcHRpb25zID0galF1ZXJ5LmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9ucyB8fCB7fTsK
KworICAgIGZvciAoIGtleSBpbiBzcmMgKSB7CisgICAgICAgIGlmICggc3JjWyBrZXkgXSAhPT0g
dW5kZWZpbmVkICkgeworICAgICAgICAgICAgKCBmbGF0T3B0aW9uc1sga2V5IF0gPyB0YXJnZXQg
OiAoIGRlZXAgfHwgKCBkZWVwID0ge30gKSApIClbIGtleSBdID0gc3JjWyBrZXkgXTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBpZiAoIGRlZXAgKSB7CisgICAgICAgIGpRdWVyeS5leHRlbmQoIHRy
dWUsIHRhcmdldCwgZGVlcCApOworICAgIH0KKworICAgIHJldHVybiB0YXJnZXQ7Cit9CisKKy8q
IEhhbmRsZXMgcmVzcG9uc2VzIHRvIGFuIGFqYXggcmVxdWVzdDoKKyAqIC0gZmluZHMgdGhlIHJp
Z2h0IGRhdGFUeXBlIChtZWRpYXRlcyBiZXR3ZWVuIGNvbnRlbnQtdHlwZSBhbmQgZXhwZWN0ZWQg
ZGF0YVR5cGUpCisgKiAtIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2UKKyAqLwor
ZnVuY3Rpb24gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApIHsKKwor
ICAgIHZhciBjdCwgdHlwZSwgZmluYWxEYXRhVHlwZSwgZmlyc3REYXRhVHlwZSwKKyAgICAgICAg
Y29udGVudHMgPSBzLmNvbnRlbnRzLAorICAgICAgICBkYXRhVHlwZXMgPSBzLmRhdGFUeXBlczsK
KworICAgIC8vIFJlbW92ZSBhdXRvIGRhdGFUeXBlIGFuZCBnZXQgY29udGVudC10eXBlIGluIHRo
ZSBwcm9jZXNzCisgICAgd2hpbGUgKCBkYXRhVHlwZXNbIDAgXSA9PT0gIioiICkgeworICAgICAg
ICBkYXRhVHlwZXMuc2hpZnQoKTsKKyAgICAgICAgaWYgKCBjdCA9PT0gdW5kZWZpbmVkICkgewor
ICAgICAgICAgICAgY3QgPSBzLm1pbWVUeXBlIHx8IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCAi
Q29udGVudC1UeXBlIiApOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ2hlY2sgaWYgd2Un
cmUgZGVhbGluZyB3aXRoIGEga25vd24gY29udGVudC10eXBlCisgICAgaWYgKCBjdCApIHsKKyAg
ICAgICAgZm9yICggdHlwZSBpbiBjb250ZW50cyApIHsKKyAgICAgICAgICAgIGlmICggY29udGVu
dHNbIHR5cGUgXSAmJiBjb250ZW50c1sgdHlwZSBdLnRlc3QoIGN0ICkgKSB7CisgICAgICAgICAg
ICAgICAgZGF0YVR5cGVzLnVuc2hpZnQoIHR5cGUgKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIENoZWNrIHRvIHNlZSBp
ZiB3ZSBoYXZlIGEgcmVzcG9uc2UgZm9yIHRoZSBleHBlY3RlZCBkYXRhVHlwZQorICAgIGlmICgg
ZGF0YVR5cGVzWyAwIF0gaW4gcmVzcG9uc2VzICkgeworICAgICAgICBmaW5hbERhdGFUeXBlID0g
ZGF0YVR5cGVzWyAwIF07CisgICAgfSBlbHNlIHsKKworICAgICAgICAvLyBUcnkgY29udmVydGli
bGUgZGF0YVR5cGVzCisgICAgICAgIGZvciAoIHR5cGUgaW4gcmVzcG9uc2VzICkgeworICAgICAg
ICAgICAgaWYgKCAhZGF0YVR5cGVzWyAwIF0gfHwgcy5jb252ZXJ0ZXJzWyB0eXBlICsgIiAiICsg
ZGF0YVR5cGVzWyAwIF0gXSApIHsKKyAgICAgICAgICAgICAgICBmaW5hbERhdGFUeXBlID0gdHlw
ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
ICggIWZpcnN0RGF0YVR5cGUgKSB7CisgICAgICAgICAgICAgICAgZmlyc3REYXRhVHlwZSA9IHR5
cGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBPciBqdXN0IHVzZSBm
aXJzdCBvbmUKKyAgICAgICAgZmluYWxEYXRhVHlwZSA9IGZpbmFsRGF0YVR5cGUgfHwgZmlyc3RE
YXRhVHlwZTsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBmb3VuZCBhIGRhdGFUeXBlCisgICAgLy8g
V2UgYWRkIHRoZSBkYXRhVHlwZSB0byB0aGUgbGlzdCBpZiBuZWVkZWQKKyAgICAvLyBhbmQgcmV0
dXJuIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlCisgICAgaWYgKCBmaW5hbERhdGFUeXBlICkg
eworICAgICAgICBpZiAoIGZpbmFsRGF0YVR5cGUgIT09IGRhdGFUeXBlc1sgMCBdICkgeworICAg
ICAgICAgICAgZGF0YVR5cGVzLnVuc2hpZnQoIGZpbmFsRGF0YVR5cGUgKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gcmVzcG9uc2VzWyBmaW5hbERhdGFUeXBlIF07CisgICAgfQorfQorCisv
KiBDaGFpbiBjb252ZXJzaW9ucyBnaXZlbiB0aGUgcmVxdWVzdCBhbmQgdGhlIG9yaWdpbmFsIHJl
c3BvbnNlCisgKiBBbHNvIHNldHMgdGhlIHJlc3BvbnNlWFhYIGZpZWxkcyBvbiB0aGUganFYSFIg
aW5zdGFuY2UKKyAqLworZnVuY3Rpb24gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNlLCBqcVhIUiwg
aXNTdWNjZXNzICkgeworICAgIHZhciBjb252MiwgY3VycmVudCwgY29udiwgdG1wLCBwcmV2LAor
ICAgICAgICBjb252ZXJ0ZXJzID0ge30sCisKKyAgICAgICAgLy8gV29yayB3aXRoIGEgY29weSBv
ZiBkYXRhVHlwZXMgaW4gY2FzZSB3ZSBuZWVkIHRvIG1vZGlmeSBpdCBmb3IgY29udmVyc2lvbgor
ICAgICAgICBkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcy5zbGljZSgpOworCisgICAgLy8gQ3JlYXRl
IGNvbnZlcnRlcnMgbWFwIHdpdGggbG93ZXJjYXNlZCBrZXlzCisgICAgaWYgKCBkYXRhVHlwZXNb
IDEgXSApIHsKKyAgICAgICAgZm9yICggY29udiBpbiBzLmNvbnZlcnRlcnMgKSB7CisgICAgICAg
ICAgICBjb252ZXJ0ZXJzWyBjb252LnRvTG93ZXJDYXNlKCkgXSA9IHMuY29udmVydGVyc1sgY29u
diBdOworICAgICAgICB9CisgICAgfQorCisgICAgY3VycmVudCA9IGRhdGFUeXBlcy5zaGlmdCgp
OworCisgICAgLy8gQ29udmVydCB0byBlYWNoIHNlcXVlbnRpYWwgZGF0YVR5cGUKKyAgICB3aGls
ZSAoIGN1cnJlbnQgKSB7CisKKyAgICAgICAgaWYgKCBzLnJlc3BvbnNlRmllbGRzWyBjdXJyZW50
IF0gKSB7CisgICAgICAgICAgICBqcVhIUlsgcy5yZXNwb25zZUZpZWxkc1sgY3VycmVudCBdIF0g
PSByZXNwb25zZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEFwcGx5IHRoZSBkYXRhRmlsdGVy
IGlmIHByb3ZpZGVkCisgICAgICAgIGlmICggIXByZXYgJiYgaXNTdWNjZXNzICYmIHMuZGF0YUZp
bHRlciApIHsKKyAgICAgICAgICAgIHJlc3BvbnNlID0gcy5kYXRhRmlsdGVyKCByZXNwb25zZSwg
cy5kYXRhVHlwZSApOworICAgICAgICB9CisKKyAgICAgICAgcHJldiA9IGN1cnJlbnQ7CisgICAg
ICAgIGN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTsKKworICAgICAgICBpZiAoIGN1cnJlbnQg
KSB7CisKKyAgICAgICAgLy8gVGhlcmUncyBvbmx5IHdvcmsgdG8gZG8gaWYgY3VycmVudCBkYXRh
VHlwZSBpcyBub24tYXV0bworICAgICAgICAgICAgaWYgKCBjdXJyZW50ID09PSAiKiIgKSB7CisK
KyAgICAgICAgICAgICAgICBjdXJyZW50ID0gcHJldjsKKworICAgICAgICAgICAgLy8gQ29udmVy
dCByZXNwb25zZSBpZiBwcmV2IGRhdGFUeXBlIGlzIG5vbi1hdXRvIGFuZCBkaWZmZXJzIGZyb20g
Y3VycmVudAorICAgICAgICAgICAgfSBlbHNlIGlmICggcHJldiAhPT0gIioiICYmIHByZXYgIT09
IGN1cnJlbnQgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBTZWVrIGEgZGlyZWN0IGNvbnZlcnRl
cgorICAgICAgICAgICAgICAgIGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgIiAiICsgY3VycmVu
dCBdIHx8IGNvbnZlcnRlcnNbICIqICIgKyBjdXJyZW50IF07CisKKyAgICAgICAgICAgICAgICAv
LyBJZiBub25lIGZvdW5kLCBzZWVrIGEgcGFpcgorICAgICAgICAgICAgICAgIGlmICggIWNvbnYg
KSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoIGNvbnYyIGluIGNvbnZlcnRlcnMgKSB7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGNvbnYyIG91dHB1dHMgY3VycmVudAorICAg
ICAgICAgICAgICAgICAgICAgICAgdG1wID0gY29udjIuc3BsaXQoICIgIiApOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCB0bXBbIDEgXSA9PT0gY3VycmVudCApIHsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIElmIHByZXYgY2FuIGJlIGNvbnZlcnRlZCB0byBhY2NlcHRl
ZCBpbnB1dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnYgPSBjb252ZXJ0ZXJzWyBw
cmV2ICsgIiAiICsgdG1wWyAwIF0gXSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb252ZXJ0ZXJzWyAiKiAiICsgdG1wWyAwIF0gXTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGNvbnYgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Q29uZGVuc2UgZXF1aXZhbGVuY2UgY29udmVydGVycworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIGNvbnYgPT09IHRydWUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb252ID0gY29udmVydGVyc1sgY29udjIgXTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIGluc2VydCB0aGUgaW50ZXJtZWRpYXRlIGRh
dGFUeXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGNvbnZl
cnRlcnNbIGNvbnYyIF0gIT09IHRydWUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjdXJyZW50ID0gdG1wWyAwIF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhVHlwZXMudW5zaGlmdCggdG1wWyAxIF0gKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAvLyBBcHBseSBjb252ZXJ0ZXIgKGlmIG5vdCBhbiBlcXVpdmFsZW5jZSkKKyAgICAgICAg
ICAgICAgICBpZiAoIGNvbnYgIT09IHRydWUgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgLy8g
VW5sZXNzIGVycm9ycyBhcmUgYWxsb3dlZCB0byBidWJibGUsIGNhdGNoIGFuZCByZXR1cm4gdGhl
bQorICAgICAgICAgICAgICAgICAgICBpZiAoIGNvbnYgJiYgcy50aHJvd3MgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7CisgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gY29udiggcmVzcG9uc2UgKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKCBlICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlOiAi
cGFyc2VyZXJyb3IiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogY29u
diA/IGUgOiAiTm8gY29udmVyc2lvbiBmcm9tICIgKyBwcmV2ICsgIiB0byAiICsgY3VycmVudAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4geyBzdGF0ZTogInN1Y2Nlc3MiLCBkYXRh
OiByZXNwb25zZSB9OworfQorCitqUXVlcnkuZXh0ZW5kKCB7CisKKyAgICAvLyBDb3VudGVyIGZv
ciBob2xkaW5nIHRoZSBudW1iZXIgb2YgYWN0aXZlIHF1ZXJpZXMKKyAgICBhY3RpdmU6IDAsCisK
KyAgICAvLyBMYXN0LU1vZGlmaWVkIGhlYWRlciBjYWNoZSBmb3IgbmV4dCByZXF1ZXN0CisgICAg
bGFzdE1vZGlmaWVkOiB7fSwKKyAgICBldGFnOiB7fSwKKworICAgIGFqYXhTZXR0aW5nczogewor
ICAgICAgICB1cmw6IGxvY2F0aW9uLmhyZWYsCisgICAgICAgIHR5cGU6ICJHRVQiLAorICAgICAg
ICBpc0xvY2FsOiBybG9jYWxQcm90b2NvbC50ZXN0KCBsb2NhdGlvbi5wcm90b2NvbCApLAorICAg
ICAgICBnbG9iYWw6IHRydWUsCisgICAgICAgIHByb2Nlc3NEYXRhOiB0cnVlLAorICAgICAgICBh
c3luYzogdHJ1ZSwKKyAgICAgICAgY29udGVudFR5cGU6ICJhcHBsaWNhdGlvbi94LXd3dy1mb3Jt
LXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLAorICAgICAgICAvKgorICAgICAgICB0aW1lb3V0
OiAwLAorICAgICAgICBkYXRhOiBudWxsLAorICAgICAgICBkYXRhVHlwZTogbnVsbCwKKyAgICAg
ICAgdXNlcm5hbWU6IG51bGwsCisgICAgICAgIHBhc3N3b3JkOiBudWxsLAorICAgICAgICBjYWNo
ZTogbnVsbCwKKyAgICAgICAgdGhyb3dzOiBmYWxzZSwKKyAgICAgICAgdHJhZGl0aW9uYWw6IGZh
bHNlLAorICAgICAgICBoZWFkZXJzOiB7fSwKKyAgICAgICAgKi8KKworICAgICAgICBhY2NlcHRz
OiB7CisgICAgICAgICAgICAiKiI6IGFsbFR5cGVzLAorICAgICAgICAgICAgdGV4dDogInRleHQv
cGxhaW4iLAorICAgICAgICAgICAgaHRtbDogInRleHQvaHRtbCIsCisgICAgICAgICAgICB4bWw6
ICJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sIiwKKyAgICAgICAgICAgIGpzb246ICJhcHBsaWNh
dGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHQiCisgICAgICAgIH0sCisKKyAgICAgICAgY29udGVu
dHM6IHsKKyAgICAgICAgICAgIHhtbDogL1xieG1sXGIvLAorICAgICAgICAgICAgaHRtbDogL1xi
aHRtbC8sCisgICAgICAgICAgICBqc29uOiAvXGJqc29uXGIvCisgICAgICAgIH0sCisKKyAgICAg
ICAgcmVzcG9uc2VGaWVsZHM6IHsKKyAgICAgICAgICAgIHhtbDogInJlc3BvbnNlWE1MIiwKKyAg
ICAgICAgICAgIHRleHQ6ICJyZXNwb25zZVRleHQiLAorICAgICAgICAgICAganNvbjogInJlc3Bv
bnNlSlNPTiIKKyAgICAgICAgfSwKKworICAgICAgICAvLyBEYXRhIGNvbnZlcnRlcnMKKyAgICAg
ICAgLy8gS2V5cyBzZXBhcmF0ZSBzb3VyY2UgKG9yIGNhdGNoYWxsICIqIikgYW5kIGRlc3RpbmF0
aW9uIHR5cGVzIHdpdGggYSBzaW5nbGUgc3BhY2UKKyAgICAgICAgY29udmVydGVyczogeworCisg
ICAgICAgICAgICAvLyBDb252ZXJ0IGFueXRoaW5nIHRvIHRleHQKKyAgICAgICAgICAgICIqIHRl
eHQiOiBTdHJpbmcsCisKKyAgICAgICAgICAgIC8vIFRleHQgdG8gaHRtbCAodHJ1ZSA9IG5vIHRy
YW5zZm9ybWF0aW9uKQorICAgICAgICAgICAgInRleHQgaHRtbCI6IHRydWUsCisKKyAgICAgICAg
ICAgIC8vIEV2YWx1YXRlIHRleHQgYXMgYSBqc29uIGV4cHJlc3Npb24KKyAgICAgICAgICAgICJ0
ZXh0IGpzb24iOiBqUXVlcnkucGFyc2VKU09OLAorCisgICAgICAgICAgICAvLyBQYXJzZSB0ZXh0
IGFzIHhtbAorICAgICAgICAgICAgInRleHQgeG1sIjogalF1ZXJ5LnBhcnNlWE1MCisgICAgICAg
IH0sCisKKyAgICAgICAgLy8gRm9yIG9wdGlvbnMgdGhhdCBzaG91bGRuJ3QgYmUgZGVlcCBleHRl
bmRlZDoKKyAgICAgICAgLy8geW91IGNhbiBhZGQgeW91ciBvd24gY3VzdG9tIG9wdGlvbnMgaGVy
ZSBpZgorICAgICAgICAvLyBhbmQgd2hlbiB5b3UgY3JlYXRlIG9uZSB0aGF0IHNob3VsZG4ndCBi
ZQorICAgICAgICAvLyBkZWVwIGV4dGVuZGVkIChzZWUgYWpheEV4dGVuZCkKKyAgICAgICAgZmxh
dE9wdGlvbnM6IHsKKyAgICAgICAgICAgIHVybDogdHJ1ZSwKKyAgICAgICAgICAgIGNvbnRleHQ6
IHRydWUKKyAgICAgICAgfQorICAgIH0sCisKKyAgICAvLyBDcmVhdGVzIGEgZnVsbCBmbGVkZ2Vk
IHNldHRpbmdzIG9iamVjdCBpbnRvIHRhcmdldAorICAgIC8vIHdpdGggYm90aCBhamF4U2V0dGlu
Z3MgYW5kIHNldHRpbmdzIGZpZWxkcy4KKyAgICAvLyBJZiB0YXJnZXQgaXMgb21pdHRlZCwgd3Jp
dGVzIGludG8gYWpheFNldHRpbmdzLgorICAgIGFqYXhTZXR1cDogZnVuY3Rpb24oIHRhcmdldCwg
c2V0dGluZ3MgKSB7CisgICAgICAgIHJldHVybiBzZXR0aW5ncyA/CisKKyAgICAgICAgICAgIC8v
IEJ1aWxkaW5nIGEgc2V0dGluZ3Mgb2JqZWN0CisgICAgICAgICAgICBhamF4RXh0ZW5kKCBhamF4
RXh0ZW5kKCB0YXJnZXQsIGpRdWVyeS5hamF4U2V0dGluZ3MgKSwgc2V0dGluZ3MgKSA6CisKKyAg
ICAgICAgICAgIC8vIEV4dGVuZGluZyBhamF4U2V0dGluZ3MKKyAgICAgICAgICAgIGFqYXhFeHRl
bmQoIGpRdWVyeS5hamF4U2V0dGluZ3MsIHRhcmdldCApOworICAgIH0sCisKKyAgICBhamF4UHJl
ZmlsdGVyOiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMgKSwKKyAgICBh
amF4VHJhbnNwb3J0OiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMgKSwK
KworICAgIC8vIE1haW4gbWV0aG9kCisgICAgYWpheDogZnVuY3Rpb24oIHVybCwgb3B0aW9ucyAp
IHsKKworICAgICAgICAvLyBJZiB1cmwgaXMgYW4gb2JqZWN0LCBzaW11bGF0ZSBwcmUtMS41IHNp
Z25hdHVyZQorICAgICAgICBpZiAoIHR5cGVvZiB1cmwgPT09ICJvYmplY3QiICkgeworICAgICAg
ICAgICAgb3B0aW9ucyA9IHVybDsKKyAgICAgICAgICAgIHVybCA9IHVuZGVmaW5lZDsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIEZvcmNlIG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0CisgICAgICAg
IG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OworCisgICAgICAgIHZhciB0cmFuc3BvcnQsCisKKyAg
ICAgICAgICAgIC8vIFVSTCB3aXRob3V0IGFudGktY2FjaGUgcGFyYW0KKyAgICAgICAgICAgIGNh
Y2hlVVJMLAorCisgICAgICAgICAgICAvLyBSZXNwb25zZSBoZWFkZXJzCisgICAgICAgICAgICBy
ZXNwb25zZUhlYWRlcnNTdHJpbmcsCisgICAgICAgICAgICByZXNwb25zZUhlYWRlcnMsCisKKyAg
ICAgICAgICAgIC8vIHRpbWVvdXQgaGFuZGxlCisgICAgICAgICAgICB0aW1lb3V0VGltZXIsCisK
KyAgICAgICAgICAgIC8vIFVybCBjbGVhbnVwIHZhcgorICAgICAgICAgICAgdXJsQW5jaG9yLAor
CisgICAgICAgICAgICAvLyBUbyBrbm93IGlmIGdsb2JhbCBldmVudHMgYXJlIHRvIGJlIGRpc3Bh
dGNoZWQKKyAgICAgICAgICAgIGZpcmVHbG9iYWxzLAorCisgICAgICAgICAgICAvLyBMb29wIHZh
cmlhYmxlCisgICAgICAgICAgICBpLAorCisgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIGZpbmFs
IG9wdGlvbnMgb2JqZWN0CisgICAgICAgICAgICBzID0galF1ZXJ5LmFqYXhTZXR1cCgge30sIG9w
dGlvbnMgKSwKKworICAgICAgICAgICAgLy8gQ2FsbGJhY2tzIGNvbnRleHQKKyAgICAgICAgICAg
IGNhbGxiYWNrQ29udGV4dCA9IHMuY29udGV4dCB8fCBzLAorCisgICAgICAgICAgICAvLyBDb250
ZXh0IGZvciBnbG9iYWwgZXZlbnRzIGlzIGNhbGxiYWNrQ29udGV4dCBpZiBpdCBpcyBhIERPTSBu
b2RlIG9yIGpRdWVyeSBjb2xsZWN0aW9uCisgICAgICAgICAgICBnbG9iYWxFdmVudENvbnRleHQg
PSBzLmNvbnRleHQgJiYKKyAgICAgICAgICAgICAgICAoIGNhbGxiYWNrQ29udGV4dC5ub2RlVHlw
ZSB8fCBjYWxsYmFja0NvbnRleHQuanF1ZXJ5ICkgPworICAgICAgICAgICAgICAgICAgICBqUXVl
cnkoIGNhbGxiYWNrQ29udGV4dCApIDoKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50
LAorCisgICAgICAgICAgICAvLyBEZWZlcnJlZHMKKyAgICAgICAgICAgIGRlZmVycmVkID0galF1
ZXJ5LkRlZmVycmVkKCksCisgICAgICAgICAgICBjb21wbGV0ZURlZmVycmVkID0galF1ZXJ5LkNh
bGxiYWNrcyggIm9uY2UgbWVtb3J5IiApLAorCisgICAgICAgICAgICAvLyBTdGF0dXMtZGVwZW5k
ZW50IGNhbGxiYWNrcworICAgICAgICAgICAgc3RhdHVzQ29kZSA9IHMuc3RhdHVzQ29kZSB8fCB7
fSwKKworICAgICAgICAgICAgLy8gSGVhZGVycyAodGhleSBhcmUgc2VudCBhbGwgYXQgb25jZSkK
KyAgICAgICAgICAgIHJlcXVlc3RIZWFkZXJzID0ge30sCisgICAgICAgICAgICByZXF1ZXN0SGVh
ZGVyc05hbWVzID0ge30sCisKKyAgICAgICAgICAgIC8vIFRoZSBqcVhIUiBzdGF0ZQorICAgICAg
ICAgICAgc3RhdGUgPSAwLAorCisgICAgICAgICAgICAvLyBEZWZhdWx0IGFib3J0IG1lc3NhZ2UK
KyAgICAgICAgICAgIHN0ckFib3J0ID0gImNhbmNlbGVkIiwKKworICAgICAgICAgICAgLy8gRmFr
ZSB4aHIKKyAgICAgICAgICAgIGpxWEhSID0geworICAgICAgICAgICAgICAgIHJlYWR5U3RhdGU6
IDAsCisKKyAgICAgICAgICAgICAgICAvLyBCdWlsZHMgaGVhZGVycyBoYXNodGFibGUgaWYgbmVl
ZGVkCisgICAgICAgICAgICAgICAgZ2V0UmVzcG9uc2VIZWFkZXI6IGZ1bmN0aW9uKCBrZXkgKSB7
CisgICAgICAgICAgICAgICAgICAgIHZhciBtYXRjaDsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCBzdGF0ZSA9PT0gMiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXJlc3BvbnNl
SGVhZGVycyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZUhlYWRlcnMg
PSB7fTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoICggbWF0Y2ggPSByaGVh
ZGVycy5leGVjKCByZXNwb25zZUhlYWRlcnNTdHJpbmcgKSApICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXNwb25zZUhlYWRlcnNbIG1hdGNoWyAxIF0udG9Mb3dlckNhc2Uo
KSBdID0gbWF0Y2hbIDIgXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IHJlc3Bv
bnNlSGVhZGVyc1sga2V5LnRvTG93ZXJDYXNlKCkgXTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2ggPT0gbnVsbCA/IG51bGwgOiBtYXRjaDsK
KyAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgLy8gUmF3IHN0cmluZworICAg
ICAgICAgICAgICAgIGdldEFsbFJlc3BvbnNlSGVhZGVyczogZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBzdGF0ZSA9PT0gMiA/IHJlc3BvbnNlSGVhZGVyc1N0cmluZyA6
IG51bGw7CisgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgIC8vIENhY2hlcyB0
aGUgaGVhZGVyCisgICAgICAgICAgICAgICAgc2V0UmVxdWVzdEhlYWRlcjogZnVuY3Rpb24oIG5h
bWUsIHZhbHVlICkgeworICAgICAgICAgICAgICAgICAgICB2YXIgbG5hbWUgPSBuYW1lLnRvTG93
ZXJDYXNlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICggIXN0YXRlICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgbmFtZSA9IHJlcXVlc3RIZWFkZXJzTmFtZXNbIGxuYW1lIF0gPSByZXF1
ZXN0SGVhZGVyc05hbWVzWyBsbmFtZSBdIHx8IG5hbWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXF1ZXN0SGVhZGVyc1sgbmFtZSBdID0gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgfSwKKwor
ICAgICAgICAgICAgICAgIC8vIE92ZXJyaWRlcyByZXNwb25zZSBjb250ZW50LXR5cGUgaGVhZGVy
CisgICAgICAgICAgICAgICAgb3ZlcnJpZGVNaW1lVHlwZTogZnVuY3Rpb24oIHR5cGUgKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICggIXN0YXRlICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcy5taW1lVHlwZSA9IHR5cGU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAg
ICAgIC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzCisgICAgICAgICAgICAgICAgc3RhdHVz
Q29kZTogZnVuY3Rpb24oIG1hcCApIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGU7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICggbWFwICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBzdGF0ZSA8IDIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggY29k
ZSBpbiBtYXAgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGF6eS1h
ZGQgdGhlIG5ldyBjYWxsYmFjayBpbiBhIHdheSB0aGF0IHByZXNlcnZlcyBvbGQgb25lcworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNDb2RlWyBjb2RlIF0gPSBbIHN0YXR1
c0NvZGVbIGNvZGUgXSwgbWFwWyBjb2RlIF0gXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gRXhlY3V0ZSB0aGUgYXBwcm9wcmlhdGUgY2FsbGJhY2tzCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAganFYSFIuYWx3YXlzKCBtYXBbIGpxWEhSLnN0YXR1cyBdICk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgfSwKKworICAgICAg
ICAgICAgICAgIC8vIENhbmNlbCB0aGUgcmVxdWVzdAorICAgICAgICAgICAgICAgIGFib3J0OiBm
dW5jdGlvbiggc3RhdHVzVGV4dCApIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGZpbmFsVGV4
dCA9IHN0YXR1c1RleHQgfHwgc3RyQWJvcnQ7CisgICAgICAgICAgICAgICAgICAgIGlmICggdHJh
bnNwb3J0ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0LmFib3J0KCBmaW5h
bFRleHQgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkb25l
KCAwLCBmaW5hbFRleHQgKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKworICAgICAgICAvLyBBdHRhY2ggZGVmZXJy
ZWRzCisgICAgICAgIGRlZmVycmVkLnByb21pc2UoIGpxWEhSICkuY29tcGxldGUgPSBjb21wbGV0
ZURlZmVycmVkLmFkZDsKKyAgICAgICAganFYSFIuc3VjY2VzcyA9IGpxWEhSLmRvbmU7CisgICAg
ICAgIGpxWEhSLmVycm9yID0ganFYSFIuZmFpbDsKKworICAgICAgICAvLyBSZW1vdmUgaGFzaCBj
aGFyYWN0ZXIgKCM3NTMxOiBhbmQgc3RyaW5nIHByb21vdGlvbikKKyAgICAgICAgLy8gQWRkIHBy
b3RvY29sIGlmIG5vdCBwcm92aWRlZCAocHJlZmlsdGVycyBtaWdodCBleHBlY3QgaXQpCisgICAg
ICAgIC8vIEhhbmRsZSBmYWxzeSB1cmwgaW4gdGhlIHNldHRpbmdzIG9iamVjdCAoIzEwMDkzOiBj
b25zaXN0ZW5jeSB3aXRoIG9sZCBzaWduYXR1cmUpCisgICAgICAgIC8vIFdlIGFsc28gdXNlIHRo
ZSB1cmwgcGFyYW1ldGVyIGlmIGF2YWlsYWJsZQorICAgICAgICBzLnVybCA9ICggKCB1cmwgfHwg
cy51cmwgfHwgbG9jYXRpb24uaHJlZiApICsgIiIgKS5yZXBsYWNlKCByaGFzaCwgIiIgKQorICAg
ICAgICAgICAgLnJlcGxhY2UoIHJwcm90b2NvbCwgbG9jYXRpb24ucHJvdG9jb2wgKyAiLy8iICk7
CisKKyAgICAgICAgLy8gQWxpYXMgbWV0aG9kIG9wdGlvbiB0byB0eXBlIGFzIHBlciB0aWNrZXQg
IzEyMDA0CisgICAgICAgIHMudHlwZSA9IG9wdGlvbnMubWV0aG9kIHx8IG9wdGlvbnMudHlwZSB8
fCBzLm1ldGhvZCB8fCBzLnR5cGU7CisKKyAgICAgICAgLy8gRXh0cmFjdCBkYXRhVHlwZXMgbGlz
dAorICAgICAgICBzLmRhdGFUeXBlcyA9IGpRdWVyeS50cmltKCBzLmRhdGFUeXBlIHx8ICIqIiAp
LnRvTG93ZXJDYXNlKCkubWF0Y2goIHJub3R3aGl0ZSApIHx8IFsgIiIgXTsKKworICAgICAgICAv
LyBBIGNyb3NzLWRvbWFpbiByZXF1ZXN0IGlzIGluIG9yZGVyIHdoZW4gdGhlIG9yaWdpbiBkb2Vz
bid0IG1hdGNoIHRoZSBjdXJyZW50IG9yaWdpbi4KKyAgICAgICAgaWYgKCBzLmNyb3NzRG9tYWlu
ID09IG51bGwgKSB7CisgICAgICAgICAgICB1cmxBbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCAiYSIgKTsKKworICAgICAgICAgICAgLy8gU3VwcG9ydDogSUU4LTExKworICAgICAgICAg
ICAgLy8gSUUgdGhyb3dzIGV4Y2VwdGlvbiBpZiB1cmwgaXMgbWFsZm9ybWVkLCBlLmcuIGh0dHA6
Ly9leGFtcGxlLmNvbTo4MHgvCisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHVy
bEFuY2hvci5ocmVmID0gcy51cmw7CisKKyAgICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBJRTgt
MTErCisgICAgICAgICAgICAgICAgLy8gQW5jaG9yJ3MgaG9zdCBwcm9wZXJ0eSBpc24ndCBjb3Jy
ZWN0bHkgc2V0IHdoZW4gcy51cmwgaXMgcmVsYXRpdmUKKyAgICAgICAgICAgICAgICB1cmxBbmNo
b3IuaHJlZiA9IHVybEFuY2hvci5ocmVmOworICAgICAgICAgICAgICAgIHMuY3Jvc3NEb21haW4g
PSBvcmlnaW5BbmNob3IucHJvdG9jb2wgKyAiLy8iICsgb3JpZ2luQW5jaG9yLmhvc3QgIT09Cisg
ICAgICAgICAgICAgICAgICAgIHVybEFuY2hvci5wcm90b2NvbCArICIvLyIgKyB1cmxBbmNob3Iu
aG9zdDsKKyAgICAgICAgICAgIH0gY2F0Y2ggKCBlICkgeworCisgICAgICAgICAgICAgICAgLy8g
SWYgdGhlcmUgaXMgYW4gZXJyb3IgcGFyc2luZyB0aGUgVVJMLCBhc3N1bWUgaXQgaXMgY3Jvc3NE
b21haW4sCisgICAgICAgICAgICAgICAgLy8gaXQgY2FuIGJlIHJlamVjdGVkIGJ5IHRoZSB0cmFu
c3BvcnQgaWYgaXQgaXMgaW52YWxpZAorICAgICAgICAgICAgICAgIHMuY3Jvc3NEb21haW4gPSB0
cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQ29udmVydCBkYXRh
IGlmIG5vdCBhbHJlYWR5IGEgc3RyaW5nCisgICAgICAgIGlmICggcy5kYXRhICYmIHMucHJvY2Vz
c0RhdGEgJiYgdHlwZW9mIHMuZGF0YSAhPT0gInN0cmluZyIgKSB7CisgICAgICAgICAgICBzLmRh
dGEgPSBqUXVlcnkucGFyYW0oIHMuZGF0YSwgcy50cmFkaXRpb25hbCApOworICAgICAgICB9CisK
KyAgICAgICAgLy8gQXBwbHkgcHJlZmlsdGVycworICAgICAgICBpbnNwZWN0UHJlZmlsdGVyc09y
VHJhbnNwb3J0cyggcHJlZmlsdGVycywgcywgb3B0aW9ucywganFYSFIgKTsKKworICAgICAgICAv
LyBJZiByZXF1ZXN0IHdhcyBhYm9ydGVkIGluc2lkZSBhIHByZWZpbHRlciwgc3RvcCB0aGVyZQor
ICAgICAgICBpZiAoIHN0YXRlID09PSAyICkgeworICAgICAgICAgICAgcmV0dXJuIGpxWEhSOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gV2UgY2FuIGZpcmUgZ2xvYmFsIGV2ZW50cyBhcyBvZiBu
b3cgaWYgYXNrZWQgdG8KKyAgICAgICAgLy8gRG9uJ3QgZmlyZSBldmVudHMgaWYgalF1ZXJ5LmV2
ZW50IGlzIHVuZGVmaW5lZCBpbiBhbiBBTUQtdXNhZ2Ugc2NlbmFyaW8gKCMxNTExOCkKKyAgICAg
ICAgZmlyZUdsb2JhbHMgPSBqUXVlcnkuZXZlbnQgJiYgcy5nbG9iYWw7CisKKyAgICAgICAgLy8g
V2F0Y2ggZm9yIGEgbmV3IHNldCBvZiByZXF1ZXN0cworICAgICAgICBpZiAoIGZpcmVHbG9iYWxz
ICYmIGpRdWVyeS5hY3RpdmUrKyA9PT0gMCApIHsKKyAgICAgICAgICAgIGpRdWVyeS5ldmVudC50
cmlnZ2VyKCAiYWpheFN0YXJ0IiApOworICAgICAgICB9CisKKyAgICAgICAgLy8gVXBwZXJjYXNl
IHRoZSB0eXBlCisgICAgICAgIHMudHlwZSA9IHMudHlwZS50b1VwcGVyQ2FzZSgpOworCisgICAg
ICAgIC8vIERldGVybWluZSBpZiByZXF1ZXN0IGhhcyBjb250ZW50CisgICAgICAgIHMuaGFzQ29u
dGVudCA9ICFybm9Db250ZW50LnRlc3QoIHMudHlwZSApOworCisgICAgICAgIC8vIFNhdmUgdGhl
IFVSTCBpbiBjYXNlIHdlJ3JlIHRveWluZyB3aXRoIHRoZSBJZi1Nb2RpZmllZC1TaW5jZQorICAg
ICAgICAvLyBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIgbGF0ZXIgb24KKyAgICAgICAgY2Fj
aGVVUkwgPSBzLnVybDsKKworICAgICAgICAvLyBNb3JlIG9wdGlvbnMgaGFuZGxpbmcgZm9yIHJl
cXVlc3RzIHdpdGggbm8gY29udGVudAorICAgICAgICBpZiAoICFzLmhhc0NvbnRlbnQgKSB7CisK
KyAgICAgICAgICAgIC8vIElmIGRhdGEgaXMgYXZhaWxhYmxlLCBhcHBlbmQgZGF0YSB0byB1cmwK
KyAgICAgICAgICAgIGlmICggcy5kYXRhICkgeworICAgICAgICAgICAgICAgIGNhY2hlVVJMID0g
KCBzLnVybCArPSAoIHJxdWVyeS50ZXN0KCBjYWNoZVVSTCApID8gIiYiIDogIj8iICkgKyBzLmRh
dGEgKTsKKworICAgICAgICAgICAgICAgIC8vICM5NjgyOiByZW1vdmUgZGF0YSBzbyB0aGF0IGl0
J3Mgbm90IHVzZWQgaW4gYW4gZXZlbnR1YWwgcmV0cnkKKyAgICAgICAgICAgICAgICBkZWxldGUg
cy5kYXRhOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBBZGQgYW50aS1jYWNoZSBp
biB1cmwgaWYgbmVlZGVkCisgICAgICAgICAgICBpZiAoIHMuY2FjaGUgPT09IGZhbHNlICkgewor
ICAgICAgICAgICAgICAgIHMudXJsID0gcnRzLnRlc3QoIGNhY2hlVVJMICkgPworCisgICAgICAg
ICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGFscmVhZHkgYSAnXycgcGFyYW1ldGVyLCBzZXQg
aXRzIHZhbHVlCisgICAgICAgICAgICAgICAgICAgIGNhY2hlVVJMLnJlcGxhY2UoIHJ0cywgIiQx
Xz0iICsgbm9uY2UrKyApIDoKKworICAgICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UgYWRk
IG9uZSB0byB0aGUgZW5kCisgICAgICAgICAgICAgICAgICAgIGNhY2hlVVJMICsgKCBycXVlcnku
dGVzdCggY2FjaGVVUkwgKSA/ICImIiA6ICI/IiApICsgIl89IiArIG5vbmNlKys7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNl
IGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLgorICAg
ICAgICBpZiAoIHMuaWZNb2RpZmllZCApIHsKKyAgICAgICAgICAgIGlmICggalF1ZXJ5Lmxhc3RN
b2RpZmllZFsgY2FjaGVVUkwgXSApIHsKKyAgICAgICAgICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0
SGVhZGVyKCAiSWYtTW9kaWZpZWQtU2luY2UiLCBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVS
TCBdICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIGpRdWVyeS5ldGFnWyBjYWNo
ZVVSTCBdICkgeworICAgICAgICAgICAgICAgIGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoICJJZi1O
b25lLU1hdGNoIiwgalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIC8vIFNldCB0aGUgY29ycmVjdCBoZWFkZXIsIGlmIGRhdGEgaXMg
YmVpbmcgc2VudAorICAgICAgICBpZiAoIHMuZGF0YSAmJiBzLmhhc0NvbnRlbnQgJiYgcy5jb250
ZW50VHlwZSAhPT0gZmFsc2UgfHwgb3B0aW9ucy5jb250ZW50VHlwZSApIHsKKyAgICAgICAgICAg
IGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoICJDb250ZW50LVR5cGUiLCBzLmNvbnRlbnRUeXBlICk7
CisgICAgICAgIH0KKworICAgICAgICAvLyBTZXQgdGhlIEFjY2VwdHMgaGVhZGVyIGZvciB0aGUg
c2VydmVyLCBkZXBlbmRpbmcgb24gdGhlIGRhdGFUeXBlCisgICAgICAgIGpxWEhSLnNldFJlcXVl
c3RIZWFkZXIoCisgICAgICAgICAgICAiQWNjZXB0IiwKKyAgICAgICAgICAgIHMuZGF0YVR5cGVz
WyAwIF0gJiYgcy5hY2NlcHRzWyBzLmRhdGFUeXBlc1sgMCBdIF0gPworICAgICAgICAgICAgICAg
IHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbIDAgXSBdICsKKyAgICAgICAgICAgICAgICAgICAgKCBz
LmRhdGFUeXBlc1sgMCBdICE9PSAiKiIgPyAiLCAiICsgYWxsVHlwZXMgKyAiOyBxPTAuMDEiIDog
IiIgKSA6CisgICAgICAgICAgICAgICAgcy5hY2NlcHRzWyAiKiIgXQorICAgICAgICApOworCisg
ICAgICAgIC8vIENoZWNrIGZvciBoZWFkZXJzIG9wdGlvbgorICAgICAgICBmb3IgKCBpIGluIHMu
aGVhZGVycyApIHsKKyAgICAgICAgICAgIGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIGksIHMuaGVh
ZGVyc1sgaSBdICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBBbGxvdyBjdXN0b20gaGVhZGVy
cy9taW1ldHlwZXMgYW5kIGVhcmx5IGFib3J0CisgICAgICAgIGlmICggcy5iZWZvcmVTZW5kICYm
CisgICAgICAgICAgICAoIHMuYmVmb3JlU2VuZC5jYWxsKCBjYWxsYmFja0NvbnRleHQsIGpxWEhS
LCBzICkgPT09IGZhbHNlIHx8IHN0YXRlID09PSAyICkgKSB7CisKKyAgICAgICAgICAgIC8vIEFi
b3J0IGlmIG5vdCBkb25lIGFscmVhZHkgYW5kIHJldHVybgorICAgICAgICAgICAgcmV0dXJuIGpx
WEhSLmFib3J0KCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBBYm9ydGluZyBpcyBubyBsb25n
ZXIgYSBjYW5jZWxsYXRpb24KKyAgICAgICAgc3RyQWJvcnQgPSAiYWJvcnQiOworCisgICAgICAg
IC8vIEluc3RhbGwgY2FsbGJhY2tzIG9uIGRlZmVycmVkcworICAgICAgICBmb3IgKCBpIGluIHsg
c3VjY2VzczogMSwgZXJyb3I6IDEsIGNvbXBsZXRlOiAxIH0gKSB7CisgICAgICAgICAgICBqcVhI
UlsgaSBdKCBzWyBpIF0gKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEdldCB0cmFuc3BvcnQK
KyAgICAgICAgdHJhbnNwb3J0ID0gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5z
cG9ydHMsIHMsIG9wdGlvbnMsIGpxWEhSICk7CisKKyAgICAgICAgLy8gSWYgbm8gdHJhbnNwb3J0
LCB3ZSBhdXRvLWFib3J0CisgICAgICAgIGlmICggIXRyYW5zcG9ydCApIHsKKyAgICAgICAgICAg
IGRvbmUoIC0xLCAiTm8gVHJhbnNwb3J0IiApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAganFYSFIucmVhZHlTdGF0ZSA9IDE7CisKKyAgICAgICAgICAgIC8vIFNlbmQgZ2xvYmFsIGV2
ZW50CisgICAgICAgICAgICBpZiAoIGZpcmVHbG9iYWxzICkgeworICAgICAgICAgICAgICAgIGds
b2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCAiYWpheFNlbmQiLCBbIGpxWEhSLCBzIF0gKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNp
ZGUgYWpheFNlbmQsIHN0b3AgdGhlcmUKKyAgICAgICAgICAgIGlmICggc3RhdGUgPT09IDIgKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGpxWEhSOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBUaW1lb3V0CisgICAgICAgICAgICBpZiAoIHMuYXN5bmMgJiYgcy50aW1lb3V0ID4g
MCApIHsKKyAgICAgICAgICAgICAgICB0aW1lb3V0VGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCgg
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIGpxWEhSLmFib3J0KCAidGltZW91dCIg
KTsKKyAgICAgICAgICAgICAgICB9LCBzLnRpbWVvdXQgKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IDE7CisgICAgICAgICAgICAg
ICAgdHJhbnNwb3J0LnNlbmQoIHJlcXVlc3RIZWFkZXJzLCBkb25lICk7CisgICAgICAgICAgICB9
IGNhdGNoICggZSApIHsKKworICAgICAgICAgICAgICAgIC8vIFByb3BhZ2F0ZSBleGNlcHRpb24g
YXMgZXJyb3IgaWYgbm90IGRvbmUKKyAgICAgICAgICAgICAgICBpZiAoIHN0YXRlIDwgMiApIHsK
KyAgICAgICAgICAgICAgICAgICAgZG9uZSggLTEsIGUgKTsKKworICAgICAgICAgICAgICAgIC8v
IFNpbXBseSByZXRocm93IG90aGVyd2lzZQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgLy8gQ2FsbGJhY2sgZm9yIHdoZW4gZXZlcnl0aGluZyBp
cyBkb25lCisgICAgICAgIGZ1bmN0aW9uIGRvbmUoIHN0YXR1cywgbmF0aXZlU3RhdHVzVGV4dCwg
cmVzcG9uc2VzLCBoZWFkZXJzICkgeworICAgICAgICAgICAgdmFyIGlzU3VjY2Vzcywgc3VjY2Vz
cywgZXJyb3IsIHJlc3BvbnNlLCBtb2RpZmllZCwKKyAgICAgICAgICAgICAgICBzdGF0dXNUZXh0
ID0gbmF0aXZlU3RhdHVzVGV4dDsKKworICAgICAgICAgICAgLy8gQ2FsbGVkIG9uY2UKKyAgICAg
ICAgICAgIGlmICggc3RhdGUgPT09IDIgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTdGF0ZSBpcyAiZG9uZSIgbm93CisgICAgICAg
ICAgICBzdGF0ZSA9IDI7CisKKyAgICAgICAgICAgIC8vIENsZWFyIHRpbWVvdXQgaWYgaXQgZXhp
c3RzCisgICAgICAgICAgICBpZiAoIHRpbWVvdXRUaW1lciApIHsKKyAgICAgICAgICAgICAgICB3
aW5kb3cuY2xlYXJUaW1lb3V0KCB0aW1lb3V0VGltZXIgKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gRGVyZWZlcmVuY2UgdHJhbnNwb3J0IGZvciBlYXJseSBnYXJiYWdlIGNvbGxl
Y3Rpb24KKyAgICAgICAgICAgIC8vIChubyBtYXR0ZXIgaG93IGxvbmcgdGhlIGpxWEhSIG9iamVj
dCB3aWxsIGJlIHVzZWQpCisgICAgICAgICAgICB0cmFuc3BvcnQgPSB1bmRlZmluZWQ7CisKKyAg
ICAgICAgICAgIC8vIENhY2hlIHJlc3BvbnNlIGhlYWRlcnMKKyAgICAgICAgICAgIHJlc3BvbnNl
SGVhZGVyc1N0cmluZyA9IGhlYWRlcnMgfHwgIiI7CisKKyAgICAgICAgICAgIC8vIFNldCByZWFk
eVN0YXRlCisgICAgICAgICAgICBqcVhIUi5yZWFkeVN0YXRlID0gc3RhdHVzID4gMCA/IDQgOiAw
OworCisgICAgICAgICAgICAvLyBEZXRlcm1pbmUgaWYgc3VjY2Vzc2Z1bAorICAgICAgICAgICAg
aXNTdWNjZXNzID0gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDAgfHwgc3RhdHVzID09PSAz
MDQ7CisKKyAgICAgICAgICAgIC8vIEdldCByZXNwb25zZSBkYXRhCisgICAgICAgICAgICBpZiAo
IHJlc3BvbnNlcyApIHsKKyAgICAgICAgICAgICAgICByZXNwb25zZSA9IGFqYXhIYW5kbGVSZXNw
b25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLy8gQ29udmVydCBubyBtYXR0ZXIgd2hhdCAodGhhdCB3YXkgcmVzcG9uc2VYWFggZmllbGRz
IGFyZSBhbHdheXMgc2V0KQorICAgICAgICAgICAgcmVzcG9uc2UgPSBhamF4Q29udmVydCggcywg
cmVzcG9uc2UsIGpxWEhSLCBpc1N1Y2Nlc3MgKTsKKworICAgICAgICAgICAgLy8gSWYgc3VjY2Vz
c2Z1bCwgaGFuZGxlIHR5cGUgY2hhaW5pbmcKKyAgICAgICAgICAgIGlmICggaXNTdWNjZXNzICkg
eworCisgICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQvb3Ig
SWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS4KKyAgICAgICAgICAg
ICAgICBpZiAoIHMuaWZNb2RpZmllZCApIHsKKyAgICAgICAgICAgICAgICAgICAgbW9kaWZpZWQg
PSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggIkxhc3QtTW9kaWZpZWQiICk7CisgICAgICAgICAg
ICAgICAgICAgIGlmICggbW9kaWZpZWQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqUXVl
cnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdID0gbW9kaWZpZWQ7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhl
YWRlciggImV0YWciICk7CisgICAgICAgICAgICAgICAgICAgIGlmICggbW9kaWZpZWQgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSA9IG1vZGlmaWVk
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgLy8gaWYgbm8gY29udGVudAorICAgICAgICAgICAgICAgIGlmICggc3RhdHVzID09PSAy
MDQgfHwgcy50eXBlID09PSAiSEVBRCIgKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1c1Rl
eHQgPSAibm9jb250ZW50IjsKKworICAgICAgICAgICAgICAgIC8vIGlmIG5vdCBtb2RpZmllZAor
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHN0YXR1cyA9PT0gMzA0ICkgeworICAgICAgICAg
ICAgICAgICAgICBzdGF0dXNUZXh0ID0gIm5vdG1vZGlmaWVkIjsKKworICAgICAgICAgICAgICAg
IC8vIElmIHdlIGhhdmUgZGF0YSwgbGV0J3MgY29udmVydCBpdAorICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1c1RleHQgPSByZXNwb25zZS5zdGF0ZTsK
KyAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHJlc3BvbnNlLmRhdGE7CisgICAgICAgICAg
ICAgICAgICAgIGVycm9yID0gcmVzcG9uc2UuZXJyb3I7CisgICAgICAgICAgICAgICAgICAgIGlz
U3VjY2VzcyA9ICFlcnJvcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ug
eworCisgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCBlcnJvciBmcm9tIHN0YXR1c1RleHQgYW5k
IG5vcm1hbGl6ZSBmb3Igbm9uLWFib3J0cworICAgICAgICAgICAgICAgIGVycm9yID0gc3RhdHVz
VGV4dDsKKyAgICAgICAgICAgICAgICBpZiAoIHN0YXR1cyB8fCAhc3RhdHVzVGV4dCApIHsKKyAg
ICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9ICJlcnJvciI7CisgICAgICAgICAgICAgICAg
ICAgIGlmICggc3RhdHVzIDwgMCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9
IDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIFNldCBkYXRhIGZvciB0aGUgZmFrZSB4aHIgb2JqZWN0Cisg
ICAgICAgICAgICBqcVhIUi5zdGF0dXMgPSBzdGF0dXM7CisgICAgICAgICAgICBqcVhIUi5zdGF0
dXNUZXh0ID0gKCBuYXRpdmVTdGF0dXNUZXh0IHx8IHN0YXR1c1RleHQgKSArICIiOworCisgICAg
ICAgICAgICAvLyBTdWNjZXNzL0Vycm9yCisgICAgICAgICAgICBpZiAoIGlzU3VjY2VzcyApIHsK
KyAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBb
IHN1Y2Nlc3MsIHN0YXR1c1RleHQsIGpxWEhSIF0gKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgZGVmZXJyZWQucmVqZWN0V2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpx
WEhSLCBzdGF0dXNUZXh0LCBlcnJvciBdICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzCisgICAgICAgICAgICBqcVhIUi5zdGF0dXND
b2RlKCBzdGF0dXNDb2RlICk7CisgICAgICAgICAgICBzdGF0dXNDb2RlID0gdW5kZWZpbmVkOwor
CisgICAgICAgICAgICBpZiAoIGZpcmVHbG9iYWxzICkgeworICAgICAgICAgICAgICAgIGdsb2Jh
bEV2ZW50Q29udGV4dC50cmlnZ2VyKCBpc1N1Y2Nlc3MgPyAiYWpheFN1Y2Nlc3MiIDogImFqYXhF
cnJvciIsCisgICAgICAgICAgICAgICAgICAgIFsganFYSFIsIHMsIGlzU3VjY2VzcyA/IHN1Y2Nl
c3MgOiBlcnJvciBdICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIENvbXBsZXRl
CisgICAgICAgICAgICBjb21wbGV0ZURlZmVycmVkLmZpcmVXaXRoKCBjYWxsYmFja0NvbnRleHQs
IFsganFYSFIsIHN0YXR1c1RleHQgXSApOworCisgICAgICAgICAgICBpZiAoIGZpcmVHbG9iYWxz
ICkgeworICAgICAgICAgICAgICAgIGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCAiYWpheENv
bXBsZXRlIiwgWyBqcVhIUiwgcyBdICk7CisKKyAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhl
IGdsb2JhbCBBSkFYIGNvdW50ZXIKKyAgICAgICAgICAgICAgICBpZiAoICEoIC0talF1ZXJ5LmFj
dGl2ZSApICkgeworICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlciggImFq
YXhTdG9wIiApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiBqcVhIUjsKKyAgICB9LAorCisgICAgZ2V0SlNPTjogZnVuY3Rpb24o
IHVybCwgZGF0YSwgY2FsbGJhY2sgKSB7CisgICAgICAgIHJldHVybiBqUXVlcnkuZ2V0KCB1cmws
IGRhdGEsIGNhbGxiYWNrLCAianNvbiIgKTsKKyAgICB9LAorCisgICAgZ2V0U2NyaXB0OiBmdW5j
dGlvbiggdXJsLCBjYWxsYmFjayApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5nZXQoIHVybCwg
dW5kZWZpbmVkLCBjYWxsYmFjaywgInNjcmlwdCIgKTsKKyAgICB9Cit9ICk7CisKK2pRdWVyeS5l
YWNoKCBbICJnZXQiLCAicG9zdCIgXSwgZnVuY3Rpb24oIGksIG1ldGhvZCApIHsKKyAgICBqUXVl
cnlbIG1ldGhvZCBdID0gZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2ssIHR5cGUgKSB7CisK
KyAgICAgICAgLy8gU2hpZnQgYXJndW1lbnRzIGlmIGRhdGEgYXJndW1lbnQgd2FzIG9taXR0ZWQK
KyAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggZGF0YSApICkgeworICAgICAgICAgICAg
dHlwZSA9IHR5cGUgfHwgY2FsbGJhY2s7CisgICAgICAgICAgICBjYWxsYmFjayA9IGRhdGE7Cisg
ICAgICAgICAgICBkYXRhID0gdW5kZWZpbmVkOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGhl
IHVybCBjYW4gYmUgYW4gb3B0aW9ucyBvYmplY3QgKHdoaWNoIHRoZW4gbXVzdCBoYXZlIC51cmwp
CisgICAgICAgIHJldHVybiBqUXVlcnkuYWpheCggalF1ZXJ5LmV4dGVuZCggeworICAgICAgICAg
ICAgdXJsOiB1cmwsCisgICAgICAgICAgICB0eXBlOiBtZXRob2QsCisgICAgICAgICAgICBkYXRh
VHlwZTogdHlwZSwKKyAgICAgICAgICAgIGRhdGE6IGRhdGEsCisgICAgICAgICAgICBzdWNjZXNz
OiBjYWxsYmFjaworICAgICAgICB9LCBqUXVlcnkuaXNQbGFpbk9iamVjdCggdXJsICkgJiYgdXJs
ICkgKTsKKyAgICB9OworfSApOworCisKK2pRdWVyeS5fZXZhbFVybCA9IGZ1bmN0aW9uKCB1cmwg
KSB7CisgICAgcmV0dXJuIGpRdWVyeS5hamF4KCB7CisgICAgICAgIHVybDogdXJsLAorCisgICAg
ICAgIC8vIE1ha2UgdGhpcyBleHBsaWNpdCwgc2luY2UgdXNlciBjYW4gb3ZlcnJpZGUgdGhpcyB0
aHJvdWdoIGFqYXhTZXR1cCAoIzExMjY0KQorICAgICAgICB0eXBlOiAiR0VUIiwKKyAgICAgICAg
ZGF0YVR5cGU6ICJzY3JpcHQiLAorICAgICAgICBhc3luYzogZmFsc2UsCisgICAgICAgIGdsb2Jh
bDogZmFsc2UsCisgICAgICAgICJ0aHJvd3MiOiB0cnVlCisgICAgfSApOworfTsKKworCitqUXVl
cnkuZm4uZXh0ZW5kKCB7CisgICAgd3JhcEFsbDogZnVuY3Rpb24oIGh0bWwgKSB7CisgICAgICAg
IHZhciB3cmFwOworCisgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGh0bWwgKSApIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkgeworICAgICAgICAg
ICAgICAgIGpRdWVyeSggdGhpcyApLndyYXBBbGwoIGh0bWwuY2FsbCggdGhpcywgaSApICk7Cisg
ICAgICAgICAgICB9ICk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHRoaXNbIDAgXSApIHsK
KworICAgICAgICAgICAgLy8gVGhlIGVsZW1lbnRzIHRvIHdyYXAgdGhlIHRhcmdldCBhcm91bmQK
KyAgICAgICAgICAgIHdyYXAgPSBqUXVlcnkoIGh0bWwsIHRoaXNbIDAgXS5vd25lckRvY3VtZW50
ICkuZXEoIDAgKS5jbG9uZSggdHJ1ZSApOworCisgICAgICAgICAgICBpZiAoIHRoaXNbIDAgXS5w
YXJlbnROb2RlICkgeworICAgICAgICAgICAgICAgIHdyYXAuaW5zZXJ0QmVmb3JlKCB0aGlzWyAw
IF0gKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgd3JhcC5tYXAoIGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgICAgIHZhciBlbGVtID0gdGhpczsKKworICAgICAgICAgICAgICAgIHdo
aWxlICggZWxlbS5maXJzdEVsZW1lbnRDaGlsZCApIHsKKyAgICAgICAgICAgICAgICAgICAgZWxl
bSA9IGVsZW0uZmlyc3RFbGVtZW50Q2hpbGQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVsZW07CisgICAgICAgICAgICB9ICkuYXBwZW5kKCB0aGlzICk7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgd3JhcElubmVy
OiBmdW5jdGlvbiggaHRtbCApIHsKKyAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggaHRt
bCApICkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7Cisg
ICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkud3JhcElubmVyKCBodG1sLmNhbGwoIHRoaXMs
IGkgKSApOworICAgICAgICAgICAgfSApOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRo
aXMuZWFjaCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgc2VsZiA9IGpRdWVyeSggdGhp
cyApLAorICAgICAgICAgICAgICAgIGNvbnRlbnRzID0gc2VsZi5jb250ZW50cygpOworCisgICAg
ICAgICAgICBpZiAoIGNvbnRlbnRzLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICBjb250ZW50
cy53cmFwQWxsKCBodG1sICk7CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgc2VsZi5hcHBlbmQoIGh0bWwgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSApOworICAg
IH0sCisKKyAgICB3cmFwOiBmdW5jdGlvbiggaHRtbCApIHsKKyAgICAgICAgdmFyIGlzRnVuY3Rp
b24gPSBqUXVlcnkuaXNGdW5jdGlvbiggaHRtbCApOworCisgICAgICAgIHJldHVybiB0aGlzLmVh
Y2goIGZ1bmN0aW9uKCBpICkgeworICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkud3JhcEFsbCgg
aXNGdW5jdGlvbiA/IGh0bWwuY2FsbCggdGhpcywgaSApIDogaHRtbCApOworICAgICAgICB9ICk7
CisgICAgfSwKKworICAgIHVud3JhcDogZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlz
LnBhcmVudCgpLmVhY2goIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgaWYgKCAhalF1ZXJ5Lm5v
ZGVOYW1lKCB0aGlzLCAiYm9keSIgKSApIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkoIHRoaXMg
KS5yZXBsYWNlV2l0aCggdGhpcy5jaGlsZE5vZGVzICk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0gKS5lbmQoKTsKKyAgICB9Cit9ICk7CisKKworalF1ZXJ5LmV4cHIuZmlsdGVycy5oaWRkZW4g
PSBmdW5jdGlvbiggZWxlbSApIHsKKyAgICByZXR1cm4gIWpRdWVyeS5leHByLmZpbHRlcnMudmlz
aWJsZSggZWxlbSApOworfTsKK2pRdWVyeS5leHByLmZpbHRlcnMudmlzaWJsZSA9IGZ1bmN0aW9u
KCBlbGVtICkgeworCisgICAgLy8gU3VwcG9ydDogT3BlcmEgPD0gMTIuMTIKKyAgICAvLyBPcGVy
YSByZXBvcnRzIG9mZnNldFdpZHRocyBhbmQgb2Zmc2V0SGVpZ2h0cyBsZXNzIHRoYW4gemVybyBv
biBzb21lIGVsZW1lbnRzCisgICAgLy8gVXNlIE9SIGluc3RlYWQgb2YgQU5EIGFzIHRoZSBlbGVt
ZW50IGlzIG5vdCB2aXNpYmxlIGlmIGVpdGhlciBpcyB0cnVlCisgICAgLy8gU2VlIHRpY2tldHMg
IzEwNDA2IGFuZCAjMTMxMzIKKyAgICByZXR1cm4gZWxlbS5vZmZzZXRXaWR0aCA+IDAgfHwgZWxl
bS5vZmZzZXRIZWlnaHQgPiAwIHx8IGVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggPiAwOwor
fTsKKworCisKKwordmFyIHIyMCA9IC8lMjAvZywKKyAgICByYnJhY2tldCA9IC9cW1xdJC8sCisg
ICAgckNSTEYgPSAvXHI/XG4vZywKKyAgICByc3VibWl0dGVyVHlwZXMgPSAvXig/OnN1Ym1pdHxi
dXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksCisgICAgcnN1Ym1pdHRhYmxlID0gL14oPzppbnB1
dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pOworCitmdW5jdGlvbiBidWlsZFBhcmFtcyggcHJl
Zml4LCBvYmosIHRyYWRpdGlvbmFsLCBhZGQgKSB7CisgICAgdmFyIG5hbWU7CisKKyAgICBpZiAo
IGpRdWVyeS5pc0FycmF5KCBvYmogKSApIHsKKworICAgICAgICAvLyBTZXJpYWxpemUgYXJyYXkg
aXRlbS4KKyAgICAgICAgalF1ZXJ5LmVhY2goIG9iaiwgZnVuY3Rpb24oIGksIHYgKSB7CisgICAg
ICAgICAgICBpZiAoIHRyYWRpdGlvbmFsIHx8IHJicmFja2V0LnRlc3QoIHByZWZpeCApICkgewor
CisgICAgICAgICAgICAgICAgLy8gVHJlYXQgZWFjaCBhcnJheSBpdGVtIGFzIGEgc2NhbGFyLgor
ICAgICAgICAgICAgICAgIGFkZCggcHJlZml4LCB2ICk7CisKKyAgICAgICAgICAgIH0gZWxzZSB7
CisKKyAgICAgICAgICAgICAgICAvLyBJdGVtIGlzIG5vbi1zY2FsYXIgKGFycmF5IG9yIG9iamVj
dCksIGVuY29kZSBpdHMgbnVtZXJpYyBpbmRleC4KKyAgICAgICAgICAgICAgICBidWlsZFBhcmFt
cygKKyAgICAgICAgICAgICAgICAgICAgcHJlZml4ICsgIlsiICsgKCB0eXBlb2YgdiA9PT0gIm9i
amVjdCIgJiYgdiAhPSBudWxsID8gaSA6ICIiICkgKyAiXSIsCisgICAgICAgICAgICAgICAgICAg
IHYsCisgICAgICAgICAgICAgICAgICAgIHRyYWRpdGlvbmFsLAorICAgICAgICAgICAgICAgICAg
ICBhZGQKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgfQorICAgICAgICB9ICk7CisK
KyAgICB9IGVsc2UgaWYgKCAhdHJhZGl0aW9uYWwgJiYgalF1ZXJ5LnR5cGUoIG9iaiApID09PSAi
b2JqZWN0IiApIHsKKworICAgICAgICAvLyBTZXJpYWxpemUgb2JqZWN0IGl0ZW0uCisgICAgICAg
IGZvciAoIG5hbWUgaW4gb2JqICkgeworICAgICAgICAgICAgYnVpbGRQYXJhbXMoIHByZWZpeCAr
ICJbIiArIG5hbWUgKyAiXSIsIG9ialsgbmFtZSBdLCB0cmFkaXRpb25hbCwgYWRkICk7CisgICAg
ICAgIH0KKworICAgIH0gZWxzZSB7CisKKyAgICAgICAgLy8gU2VyaWFsaXplIHNjYWxhciBpdGVt
LgorICAgICAgICBhZGQoIHByZWZpeCwgb2JqICk7CisgICAgfQorfQorCisvLyBTZXJpYWxpemUg
YW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cyBvciBhIHNldCBvZgorLy8ga2V5L3ZhbHVlcyBpbnRv
IGEgcXVlcnkgc3RyaW5nCitqUXVlcnkucGFyYW0gPSBmdW5jdGlvbiggYSwgdHJhZGl0aW9uYWwg
KSB7CisgICAgdmFyIHByZWZpeCwKKyAgICAgICAgcyA9IFtdLAorICAgICAgICBhZGQgPSBmdW5j
dGlvbigga2V5LCB2YWx1ZSApIHsKKworICAgICAgICAgICAgLy8gSWYgdmFsdWUgaXMgYSBmdW5j
dGlvbiwgaW52b2tlIGl0IGFuZCByZXR1cm4gaXRzIHZhbHVlCisgICAgICAgICAgICB2YWx1ZSA9
IGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApID8gdmFsdWUoKSA6ICggdmFsdWUgPT0gbnVsbCA/
ICIiIDogdmFsdWUgKTsKKyAgICAgICAgICAgIHNbIHMubGVuZ3RoIF0gPSBlbmNvZGVVUklDb21w
b25lbnQoIGtleSApICsgIj0iICsgZW5jb2RlVVJJQ29tcG9uZW50KCB2YWx1ZSApOworICAgICAg
ICB9OworCisgICAgLy8gU2V0IHRyYWRpdGlvbmFsIHRvIHRydWUgZm9yIGpRdWVyeSA8PSAxLjMu
MiBiZWhhdmlvci4KKyAgICBpZiAoIHRyYWRpdGlvbmFsID09PSB1bmRlZmluZWQgKSB7CisgICAg
ICAgIHRyYWRpdGlvbmFsID0galF1ZXJ5LmFqYXhTZXR0aW5ncyAmJiBqUXVlcnkuYWpheFNldHRp
bmdzLnRyYWRpdGlvbmFsOworICAgIH0KKworICAgIC8vIElmIGFuIGFycmF5IHdhcyBwYXNzZWQg
aW4sIGFzc3VtZSB0aGF0IGl0IGlzIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMuCisgICAgaWYg
KCBqUXVlcnkuaXNBcnJheSggYSApIHx8ICggYS5qcXVlcnkgJiYgIWpRdWVyeS5pc1BsYWluT2Jq
ZWN0KCBhICkgKSApIHsKKworICAgICAgICAvLyBTZXJpYWxpemUgdGhlIGZvcm0gZWxlbWVudHMK
KyAgICAgICAgalF1ZXJ5LmVhY2goIGEsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgYWRkKCB0
aGlzLm5hbWUsIHRoaXMudmFsdWUgKTsKKyAgICAgICAgfSApOworCisgICAgfSBlbHNlIHsKKwor
ICAgICAgICAvLyBJZiB0cmFkaXRpb25hbCwgZW5jb2RlIHRoZSAib2xkIiB3YXkgKHRoZSB3YXkg
MS4zLjIgb3Igb2xkZXIKKyAgICAgICAgLy8gZGlkIGl0KSwgb3RoZXJ3aXNlIGVuY29kZSBwYXJh
bXMgcmVjdXJzaXZlbHkuCisgICAgICAgIGZvciAoIHByZWZpeCBpbiBhICkgeworICAgICAgICAg
ICAgYnVpbGRQYXJhbXMoIHByZWZpeCwgYVsgcHJlZml4IF0sIHRyYWRpdGlvbmFsLCBhZGQgKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFJldHVybiB0aGUgcmVzdWx0aW5nIHNlcmlhbGl6
YXRpb24KKyAgICByZXR1cm4gcy5qb2luKCAiJiIgKS5yZXBsYWNlKCByMjAsICIrIiApOworfTsK
KworalF1ZXJ5LmZuLmV4dGVuZCggeworICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24oKSB7CisgICAg
ICAgIHJldHVybiBqUXVlcnkucGFyYW0oIHRoaXMuc2VyaWFsaXplQXJyYXkoKSApOworICAgIH0s
CisgICAgc2VyaWFsaXplQXJyYXk6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5t
YXAoIGZ1bmN0aW9uKCkgeworCisgICAgICAgICAgICAvLyBDYW4gYWRkIHByb3BIb29rIGZvciAi
ZWxlbWVudHMiIHRvIGZpbHRlciBvciBhZGQgZm9ybSBlbGVtZW50cworICAgICAgICAgICAgdmFy
IGVsZW1lbnRzID0galF1ZXJ5LnByb3AoIHRoaXMsICJlbGVtZW50cyIgKTsKKyAgICAgICAgICAg
IHJldHVybiBlbGVtZW50cyA/IGpRdWVyeS5tYWtlQXJyYXkoIGVsZW1lbnRzICkgOiB0aGlzOwor
ICAgICAgICB9ICkKKyAgICAgICAgLmZpbHRlciggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2
YXIgdHlwZSA9IHRoaXMudHlwZTsKKworICAgICAgICAgICAgLy8gVXNlIC5pcyggIjpkaXNhYmxl
ZCIgKSBzbyB0aGF0IGZpZWxkc2V0W2Rpc2FibGVkXSB3b3JrcworICAgICAgICAgICAgcmV0dXJu
IHRoaXMubmFtZSAmJiAhalF1ZXJ5KCB0aGlzICkuaXMoICI6ZGlzYWJsZWQiICkgJiYKKyAgICAg
ICAgICAgICAgICByc3VibWl0dGFibGUudGVzdCggdGhpcy5ub2RlTmFtZSApICYmICFyc3VibWl0
dGVyVHlwZXMudGVzdCggdHlwZSApICYmCisgICAgICAgICAgICAgICAgKCB0aGlzLmNoZWNrZWQg
fHwgIXJjaGVja2FibGVUeXBlLnRlc3QoIHR5cGUgKSApOworICAgICAgICB9ICkKKyAgICAgICAg
Lm1hcCggZnVuY3Rpb24oIGksIGVsZW0gKSB7CisgICAgICAgICAgICB2YXIgdmFsID0galF1ZXJ5
KCB0aGlzICkudmFsKCk7CisKKyAgICAgICAgICAgIHJldHVybiB2YWwgPT0gbnVsbCA/CisgICAg
ICAgICAgICAgICAgbnVsbCA6CisgICAgICAgICAgICAgICAgalF1ZXJ5LmlzQXJyYXkoIHZhbCAp
ID8KKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1
ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCAiXHJcbiIgKSB9OworICAgICAgICAgICAgICAgICAgICB9
ICkgOgorICAgICAgICAgICAgICAgICAgICB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5y
ZXBsYWNlKCByQ1JMRiwgIlxyXG4iICkgfTsKKyAgICAgICAgfSApLmdldCgpOworICAgIH0KK30g
KTsKKworCitqUXVlcnkuYWpheFNldHRpbmdzLnhociA9IGZ1bmN0aW9uKCkgeworICAgIHRyeSB7
CisgICAgICAgIHJldHVybiBuZXcgd2luZG93LlhNTEh0dHBSZXF1ZXN0KCk7CisgICAgfSBjYXRj
aCAoIGUgKSB7fQorfTsKKwordmFyIHhoclN1Y2Nlc3NTdGF0dXMgPSB7CisKKyAgICAgICAgLy8g
RmlsZSBwcm90b2NvbCBhbHdheXMgeWllbGRzIHN0YXR1cyBjb2RlIDAsIGFzc3VtZSAyMDAKKyAg
ICAgICAgMDogMjAwLAorCisgICAgICAgIC8vIFN1cHBvcnQ6IElFOQorICAgICAgICAvLyAjMTQ1
MDogc29tZXRpbWVzIElFIHJldHVybnMgMTIyMyB3aGVuIGl0IHNob3VsZCBiZSAyMDQKKyAgICAg
ICAgMTIyMzogMjA0CisgICAgfSwKKyAgICB4aHJTdXBwb3J0ZWQgPSBqUXVlcnkuYWpheFNldHRp
bmdzLnhocigpOworCitzdXBwb3J0LmNvcnMgPSAhIXhoclN1cHBvcnRlZCAmJiAoICJ3aXRoQ3Jl
ZGVudGlhbHMiIGluIHhoclN1cHBvcnRlZCApOworc3VwcG9ydC5hamF4ID0geGhyU3VwcG9ydGVk
ID0gISF4aHJTdXBwb3J0ZWQ7CisKK2pRdWVyeS5hamF4VHJhbnNwb3J0KCBmdW5jdGlvbiggb3B0
aW9ucyApIHsKKyAgICB2YXIgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2s7CisKKyAgICAvLyBDcm9z
cyBkb21haW4gb25seSBhbGxvd2VkIGlmIHN1cHBvcnRlZCB0aHJvdWdoIFhNTEh0dHBSZXF1ZXN0
CisgICAgaWYgKCBzdXBwb3J0LmNvcnMgfHwgeGhyU3VwcG9ydGVkICYmICFvcHRpb25zLmNyb3Nz
RG9tYWluICkgeworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgc2VuZDogZnVuY3Rpb24o
IGhlYWRlcnMsIGNvbXBsZXRlICkgeworICAgICAgICAgICAgICAgIHZhciBpLAorICAgICAgICAg
ICAgICAgICAgICB4aHIgPSBvcHRpb25zLnhocigpOworCisgICAgICAgICAgICAgICAgeGhyLm9w
ZW4oCisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMudHlwZSwKKyAgICAgICAgICAgICAgICAg
ICAgb3B0aW9ucy51cmwsCisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuYXN5bmMsCisgICAg
ICAgICAgICAgICAgICAgIG9wdGlvbnMudXNlcm5hbWUsCisgICAgICAgICAgICAgICAgICAgIG9w
dGlvbnMucGFzc3dvcmQKKyAgICAgICAgICAgICAgICApOworCisgICAgICAgICAgICAgICAgLy8g
QXBwbHkgY3VzdG9tIGZpZWxkcyBpZiBwcm92aWRlZAorICAgICAgICAgICAgICAgIGlmICggb3B0
aW9ucy54aHJGaWVsZHMgKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoIGkgaW4gb3B0aW9u
cy54aHJGaWVsZHMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB4aHJbIGkgXSA9IG9wdGlv
bnMueGhyRmllbGRzWyBpIF07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAvLyBPdmVycmlkZSBtaW1lIHR5cGUgaWYgbmVlZGVkCisg
ICAgICAgICAgICAgICAgaWYgKCBvcHRpb25zLm1pbWVUeXBlICYmIHhoci5vdmVycmlkZU1pbWVU
eXBlICkgeworICAgICAgICAgICAgICAgICAgICB4aHIub3ZlcnJpZGVNaW1lVHlwZSggb3B0aW9u
cy5taW1lVHlwZSApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFgt
UmVxdWVzdGVkLVdpdGggaGVhZGVyCisgICAgICAgICAgICAgICAgLy8gRm9yIGNyb3NzLWRvbWFp
biByZXF1ZXN0cywgc2VlaW5nIGFzIGNvbmRpdGlvbnMgZm9yIGEgcHJlZmxpZ2h0IGFyZQorICAg
ICAgICAgICAgICAgIC8vIGFraW4gdG8gYSBqaWdzYXcgcHV6emxlLCB3ZSBzaW1wbHkgbmV2ZXIg
c2V0IGl0IHRvIGJlIHN1cmUuCisgICAgICAgICAgICAgICAgLy8gKGl0IGNhbiBhbHdheXMgYmUg
c2V0IG9uIGEgcGVyLXJlcXVlc3QgYmFzaXMgb3IgZXZlbiB1c2luZyBhamF4U2V0dXApCisgICAg
ICAgICAgICAgICAgLy8gRm9yIHNhbWUtZG9tYWluIHJlcXVlc3RzLCB3b24ndCBjaGFuZ2UgaGVh
ZGVyIGlmIGFscmVhZHkgcHJvdmlkZWQuCisgICAgICAgICAgICAgICAgaWYgKCAhb3B0aW9ucy5j
cm9zc0RvbWFpbiAmJiAhaGVhZGVyc1sgIlgtUmVxdWVzdGVkLVdpdGgiIF0gKSB7CisgICAgICAg
ICAgICAgICAgICAgIGhlYWRlcnNbICJYLVJlcXVlc3RlZC1XaXRoIiBdID0gIlhNTEh0dHBSZXF1
ZXN0IjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBTZXQgaGVhZGVy
cworICAgICAgICAgICAgICAgIGZvciAoIGkgaW4gaGVhZGVycyApIHsKKyAgICAgICAgICAgICAg
ICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoIGksIGhlYWRlcnNbIGkgXSApOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIENhbGxiYWNrCisgICAgICAgICAgICAgICAg
Y2FsbGJhY2sgPSBmdW5jdGlvbiggdHlwZSApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjYWxsYmFjayApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGVycm9yQ2FsbGJhY2sgPSB4
aHIub25sb2FkID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLm9uZXJyb3Ig
PSB4aHIub25hYm9ydCA9IHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsOworCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlID09PSAiYWJvcnQiICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB4aHIuYWJvcnQoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKCB0eXBlID09PSAiZXJyb3IiICkgeworCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElFOQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBPbiBhIG1hbnVhbCBuYXRpdmUgYWJvcnQsIElFOSB0aHJvd3MKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXJyb3JzIG9uIGFueSBwcm9wZXJ0eSBhY2Nl
c3MgdGhhdCBpcyBub3QgcmVhZHlTdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIHR5cGVvZiB4aHIuc3RhdHVzICE9PSAibnVtYmVyIiApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlKCAwLCAiZXJyb3IiICk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb21wbGV0ZSgKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEZpbGU6IHByb3RvY29sIGFsd2F5cyB5aWVsZHMgc3RhdHVzIDA7IHNlZSAjODYw
NSwgIzE0MjA3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLnN0
YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIuc3RhdHVz
VGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlKAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyU3VjY2Vzc1N0YXR1c1sgeGhyLnN0YXR1cyBd
IHx8IHhoci5zdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIu
c3RhdHVzVGV4dCwKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3Vw
cG9ydDogSUU5IG9ubHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElF
OSBoYXMgbm8gWEhSMiBidXQgdGhyb3dzIG9uIGJpbmFyeSAodHJhYy0xMTQyNikKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvciBYSFIyIG5vbi10ZXh0LCBsZXQgdGhl
IGNhbGxlciBoYW5kbGUgaXQgKGdoLTI0OTgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoIHhoci5yZXNwb25zZVR5cGUgfHwgInRleHQiICkgIT09ICJ0ZXh0IiAgfHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiB4aHIucmVzcG9uc2VUZXh0
ICE9PSAic3RyaW5nIiA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eyBiaW5hcnk6IHhoci5yZXNwb25zZSB9IDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7IHRleHQ6IHhoci5yZXNwb25zZVRleHQgfSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgLy8gTGlzdGVuIHRvIGV2ZW50cworICAg
ICAgICAgICAgICAgIHhoci5vbmxvYWQgPSBjYWxsYmFjaygpOworICAgICAgICAgICAgICAgIGVy
cm9yQ2FsbGJhY2sgPSB4aHIub25lcnJvciA9IGNhbGxiYWNrKCAiZXJyb3IiICk7CisKKyAgICAg
ICAgICAgICAgICAvLyBTdXBwb3J0OiBJRTkKKyAgICAgICAgICAgICAgICAvLyBVc2Ugb25yZWFk
eXN0YXRlY2hhbmdlIHRvIHJlcGxhY2Ugb25hYm9ydAorICAgICAgICAgICAgICAgIC8vIHRvIGhh
bmRsZSB1bmNhdWdodCBhYm9ydHMKKyAgICAgICAgICAgICAgICBpZiAoIHhoci5vbmFib3J0ICE9
PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgICAgIHhoci5vbmFib3J0ID0gZXJyb3JD
YWxsYmFjazsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB4
aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIENoZWNrIHJlYWR5U3RhdGUgYmVmb3JlIHRpbWVvdXQgYXMgaXQgY2hhbmdlcwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB4aHIucmVhZHlTdGF0ZSA9PT0gNCApIHsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFsbG93IG9uZXJyb3IgdG8gYmUgY2FsbGVk
IGZpcnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ1dCB0aGF0IHdpbGwgbm90
IGhhbmRsZSBhIG5hdGl2ZSBhYm9ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFs
c28sIHNhdmUgZXJyb3JDYWxsYmFjayB0byBhIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gYXMgeGhyLm9uZXJyb3IgY2Fubm90IGJlIGFjY2Vzc2VkCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNhbGxiYWNrICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JDYWxsYmFjaygpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSApOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgYWJvcnQgY2FsbGJhY2sK
KyAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrKCAiYWJvcnQiICk7CisKKyAgICAg
ICAgICAgICAgICB0cnkgeworCisgICAgICAgICAgICAgICAgICAgIC8vIERvIHNlbmQgdGhlIHJl
cXVlc3QgKHRoaXMgbWF5IHJhaXNlIGFuIGV4Y2VwdGlvbikKKyAgICAgICAgICAgICAgICAgICAg
eGhyLnNlbmQoIG9wdGlvbnMuaGFzQ29udGVudCAmJiBvcHRpb25zLmRhdGEgfHwgbnVsbCApOwor
ICAgICAgICAgICAgICAgIH0gY2F0Y2ggKCBlICkgeworCisgICAgICAgICAgICAgICAgICAgIC8v
ICMxNDY4MzogT25seSByZXRocm93IGlmIHRoaXMgaGFzbid0IGJlZW4gbm90aWZpZWQgYXMgYW4g
ZXJyb3IgeWV0CisgICAgICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2sgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgYWJvcnQ6IGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2sgKSB7CisgICAgICAgICAgICAgICAg
ICAgIGNhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9OworICAgIH0KK30gKTsKKworCisKKworLy8gSW5zdGFsbCBzY3JpcHQgZGF0YVR5cGUKK2pR
dWVyeS5hamF4U2V0dXAoIHsKKyAgICBhY2NlcHRzOiB7CisgICAgICAgIHNjcmlwdDogInRleHQv
amF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgIiArCisgICAgICAgICAgICAiYXBw
bGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0IgorICAgIH0sCisg
ICAgY29udGVudHM6IHsKKyAgICAgICAgc2NyaXB0OiAvXGIoPzpqYXZhfGVjbWEpc2NyaXB0XGIv
CisgICAgfSwKKyAgICBjb252ZXJ0ZXJzOiB7CisgICAgICAgICJ0ZXh0IHNjcmlwdCI6IGZ1bmN0
aW9uKCB0ZXh0ICkgeworICAgICAgICAgICAgalF1ZXJ5Lmdsb2JhbEV2YWwoIHRleHQgKTsKKyAg
ICAgICAgICAgIHJldHVybiB0ZXh0OworICAgICAgICB9CisgICAgfQorfSApOworCisvLyBIYW5k
bGUgY2FjaGUncyBzcGVjaWFsIGNhc2UgYW5kIGNyb3NzRG9tYWluCitqUXVlcnkuYWpheFByZWZp
bHRlciggInNjcmlwdCIsIGZ1bmN0aW9uKCBzICkgeworICAgIGlmICggcy5jYWNoZSA9PT0gdW5k
ZWZpbmVkICkgeworICAgICAgICBzLmNhY2hlID0gZmFsc2U7CisgICAgfQorICAgIGlmICggcy5j
cm9zc0RvbWFpbiApIHsKKyAgICAgICAgcy50eXBlID0gIkdFVCI7CisgICAgfQorfSApOworCisv
LyBCaW5kIHNjcmlwdCB0YWcgaGFjayB0cmFuc3BvcnQKK2pRdWVyeS5hamF4VHJhbnNwb3J0KCAi
c2NyaXB0IiwgZnVuY3Rpb24oIHMgKSB7CisKKyAgICAvLyBUaGlzIHRyYW5zcG9ydCBvbmx5IGRl
YWxzIHdpdGggY3Jvc3MgZG9tYWluIHJlcXVlc3RzCisgICAgaWYgKCBzLmNyb3NzRG9tYWluICkg
eworICAgICAgICB2YXIgc2NyaXB0LCBjYWxsYmFjazsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAg
ICAgICAgIHNlbmQ6IGZ1bmN0aW9uKCBfLCBjb21wbGV0ZSApIHsKKyAgICAgICAgICAgICAgICBz
Y3JpcHQgPSBqUXVlcnkoICI8c2NyaXB0PiIgKS5wcm9wKCB7CisgICAgICAgICAgICAgICAgICAg
IGNoYXJzZXQ6IHMuc2NyaXB0Q2hhcnNldCwKKyAgICAgICAgICAgICAgICAgICAgc3JjOiBzLnVy
bAorICAgICAgICAgICAgICAgIH0gKS5vbigKKyAgICAgICAgICAgICAgICAgICAgImxvYWQgZXJy
b3IiLAorICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uKCBldnQgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQucmVtb3ZlKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjYWxsYmFjayA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGV2
dCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZSggZXZ0LnR5cGUgPT09
ICJlcnJvciIgPyA0MDQgOiAyMDAsIGV2dC50eXBlICk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICApOworCisgICAgICAg
ICAgICAgICAgLy8gVXNlIG5hdGl2ZSBET00gbWFuaXB1bGF0aW9uIHRvIGF2b2lkIG91ciBkb21N
YW5pcCBBSkFYIHRyaWNrZXJ5CisgICAgICAgICAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRD
aGlsZCggc2NyaXB0WyAwIF0gKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBhYm9ydDog
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgaWYgKCBjYWxsYmFjayApIHsKKyAgICAgICAg
ICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH07CisgICAgfQorfSApOworCisKKworCit2YXIgb2xkQ2FsbGJhY2tzID0gW10s
CisgICAgcmpzb25wID0gLyg9KVw/KD89JnwkKXxcP1w/LzsKKworLy8gRGVmYXVsdCBqc29ucCBz
ZXR0aW5ncworalF1ZXJ5LmFqYXhTZXR1cCggeworICAgIGpzb25wOiAiY2FsbGJhY2siLAorICAg
IGpzb25wQ2FsbGJhY2s6IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgY2FsbGJhY2sgPSBvbGRD
YWxsYmFja3MucG9wKCkgfHwgKCBqUXVlcnkuZXhwYW5kbyArICJfIiArICggbm9uY2UrKyApICk7
CisgICAgICAgIHRoaXNbIGNhbGxiYWNrIF0gPSB0cnVlOworICAgICAgICByZXR1cm4gY2FsbGJh
Y2s7CisgICAgfQorfSApOworCisvLyBEZXRlY3QsIG5vcm1hbGl6ZSBvcHRpb25zIGFuZCBpbnN0
YWxsIGNhbGxiYWNrcyBmb3IganNvbnAgcmVxdWVzdHMKK2pRdWVyeS5hamF4UHJlZmlsdGVyKCAi
anNvbiBqc29ucCIsIGZ1bmN0aW9uKCBzLCBvcmlnaW5hbFNldHRpbmdzLCBqcVhIUiApIHsKKwor
ICAgIHZhciBjYWxsYmFja05hbWUsIG92ZXJ3cml0dGVuLCByZXNwb25zZUNvbnRhaW5lciwKKyAg
ICAgICAganNvblByb3AgPSBzLmpzb25wICE9PSBmYWxzZSAmJiAoIHJqc29ucC50ZXN0KCBzLnVy
bCApID8KKyAgICAgICAgICAgICJ1cmwiIDoKKyAgICAgICAgICAgIHR5cGVvZiBzLmRhdGEgPT09
ICJzdHJpbmciICYmCisgICAgICAgICAgICAgICAgKCBzLmNvbnRlbnRUeXBlIHx8ICIiICkKKyAg
ICAgICAgICAgICAgICAgICAgLmluZGV4T2YoICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVu
Y29kZWQiICkgPT09IDAgJiYKKyAgICAgICAgICAgICAgICByanNvbnAudGVzdCggcy5kYXRhICkg
JiYgImRhdGEiCisgICAgICAgICk7CisKKyAgICAvLyBIYW5kbGUgaWZmIHRoZSBleHBlY3RlZCBk
YXRhIHR5cGUgaXMgImpzb25wIiBvciB3ZSBoYXZlIGEgcGFyYW1ldGVyIHRvIHNldAorICAgIGlm
ICgganNvblByb3AgfHwgcy5kYXRhVHlwZXNbIDAgXSA9PT0gImpzb25wIiApIHsKKworICAgICAg
ICAvLyBHZXQgY2FsbGJhY2sgbmFtZSwgcmVtZW1iZXJpbmcgcHJlZXhpc3RpbmcgdmFsdWUgYXNz
b2NpYXRlZCB3aXRoIGl0CisgICAgICAgIGNhbGxiYWNrTmFtZSA9IHMuanNvbnBDYWxsYmFjayA9
IGpRdWVyeS5pc0Z1bmN0aW9uKCBzLmpzb25wQ2FsbGJhY2sgKSA/CisgICAgICAgICAgICBzLmpz
b25wQ2FsbGJhY2soKSA6CisgICAgICAgICAgICBzLmpzb25wQ2FsbGJhY2s7CisKKyAgICAgICAg
Ly8gSW5zZXJ0IGNhbGxiYWNrIGludG8gdXJsIG9yIGZvcm0gZGF0YQorICAgICAgICBpZiAoIGpz
b25Qcm9wICkgeworICAgICAgICAgICAgc1sganNvblByb3AgXSA9IHNbIGpzb25Qcm9wIF0ucmVw
bGFjZSggcmpzb25wLCAiJDEiICsgY2FsbGJhY2tOYW1lICk7CisgICAgICAgIH0gZWxzZSBpZiAo
IHMuanNvbnAgIT09IGZhbHNlICkgeworICAgICAgICAgICAgcy51cmwgKz0gKCBycXVlcnkudGVz
dCggcy51cmwgKSA/ICImIiA6ICI/IiApICsgcy5qc29ucCArICI9IiArIGNhbGxiYWNrTmFtZTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIFVzZSBkYXRhIGNvbnZlcnRlciB0byByZXRyaWV2ZSBq
c29uIGFmdGVyIHNjcmlwdCBleGVjdXRpb24KKyAgICAgICAgcy5jb252ZXJ0ZXJzWyAic2NyaXB0
IGpzb24iIF0gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGlmICggIXJlc3BvbnNlQ29udGFp
bmVyICkgeworICAgICAgICAgICAgICAgIGpRdWVyeS5lcnJvciggY2FsbGJhY2tOYW1lICsgIiB3
YXMgbm90IGNhbGxlZCIgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXNw
b25zZUNvbnRhaW5lclsgMCBdOworICAgICAgICB9OworCisgICAgICAgIC8vIEZvcmNlIGpzb24g
ZGF0YVR5cGUKKyAgICAgICAgcy5kYXRhVHlwZXNbIDAgXSA9ICJqc29uIjsKKworICAgICAgICAv
LyBJbnN0YWxsIGNhbGxiYWNrCisgICAgICAgIG92ZXJ3cml0dGVuID0gd2luZG93WyBjYWxsYmFj
a05hbWUgXTsKKyAgICAgICAgd2luZG93WyBjYWxsYmFja05hbWUgXSA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgcmVzcG9uc2VDb250YWluZXIgPSBhcmd1bWVudHM7CisgICAgICAgIH07CisK
KyAgICAgICAgLy8gQ2xlYW4tdXAgZnVuY3Rpb24gKGZpcmVzIGFmdGVyIGNvbnZlcnRlcnMpCisg
ICAgICAgIGpxWEhSLmFsd2F5cyggZnVuY3Rpb24oKSB7CisKKyAgICAgICAgICAgIC8vIElmIHBy
ZXZpb3VzIHZhbHVlIGRpZG4ndCBleGlzdCAtIHJlbW92ZSBpdAorICAgICAgICAgICAgaWYgKCBv
dmVyd3JpdHRlbiA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgIGpRdWVyeSggd2lu
ZG93ICkucmVtb3ZlUHJvcCggY2FsbGJhY2tOYW1lICk7CisKKyAgICAgICAgICAgIC8vIE90aGVy
d2lzZSByZXN0b3JlIHByZWV4aXN0aW5nIHZhbHVlCisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBvdmVyd3JpdHRlbjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gU2F2ZSBiYWNrIGFzIGZyZWUKKyAgICAgICAgICAg
IGlmICggc1sgY2FsbGJhY2tOYW1lIF0gKSB7CisKKyAgICAgICAgICAgICAgICAvLyBNYWtlIHN1
cmUgdGhhdCByZS11c2luZyB0aGUgb3B0aW9ucyBkb2Vzbid0IHNjcmV3IHRoaW5ncyBhcm91bmQK
KyAgICAgICAgICAgICAgICBzLmpzb25wQ2FsbGJhY2sgPSBvcmlnaW5hbFNldHRpbmdzLmpzb25w
Q2FsbGJhY2s7CisKKyAgICAgICAgICAgICAgICAvLyBTYXZlIHRoZSBjYWxsYmFjayBuYW1lIGZv
ciBmdXR1cmUgdXNlCisgICAgICAgICAgICAgICAgb2xkQ2FsbGJhY2tzLnB1c2goIGNhbGxiYWNr
TmFtZSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBDYWxsIGlmIGl0IHdhcyBh
IGZ1bmN0aW9uIGFuZCB3ZSBoYXZlIGEgcmVzcG9uc2UKKyAgICAgICAgICAgIGlmICggcmVzcG9u
c2VDb250YWluZXIgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIG92ZXJ3cml0dGVuICkgKSB7CisgICAg
ICAgICAgICAgICAgb3ZlcndyaXR0ZW4oIHJlc3BvbnNlQ29udGFpbmVyWyAwIF0gKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcmVzcG9uc2VDb250YWluZXIgPSBvdmVyd3JpdHRlbiA9
IHVuZGVmaW5lZDsKKyAgICAgICAgfSApOworCisgICAgICAgIC8vIERlbGVnYXRlIHRvIHNjcmlw
dAorICAgICAgICByZXR1cm4gInNjcmlwdCI7CisgICAgfQorfSApOworCisKKworCisvLyBBcmd1
bWVudCAiZGF0YSIgc2hvdWxkIGJlIHN0cmluZyBvZiBodG1sCisvLyBjb250ZXh0IChvcHRpb25h
bCk6IElmIHNwZWNpZmllZCwgdGhlIGZyYWdtZW50IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGlzIGNv
bnRleHQsCisvLyBkZWZhdWx0cyB0byBkb2N1bWVudAorLy8ga2VlcFNjcmlwdHMgKG9wdGlvbmFs
KTogSWYgdHJ1ZSwgd2lsbCBpbmNsdWRlIHNjcmlwdHMgcGFzc2VkIGluIHRoZSBodG1sIHN0cmlu
ZworalF1ZXJ5LnBhcnNlSFRNTCA9IGZ1bmN0aW9uKCBkYXRhLCBjb250ZXh0LCBrZWVwU2NyaXB0
cyApIHsKKyAgICBpZiAoICFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSAic3RyaW5nIiApIHsKKyAg
ICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIGlmICggdHlwZW9mIGNvbnRleHQgPT09ICJi
b29sZWFuIiApIHsKKyAgICAgICAga2VlcFNjcmlwdHMgPSBjb250ZXh0OworICAgICAgICBjb250
ZXh0ID0gZmFsc2U7CisgICAgfQorICAgIGNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50Owor
CisgICAgdmFyIHBhcnNlZCA9IHJzaW5nbGVUYWcuZXhlYyggZGF0YSApLAorICAgICAgICBzY3Jp
cHRzID0gIWtlZXBTY3JpcHRzICYmIFtdOworCisgICAgLy8gU2luZ2xlIHRhZworICAgIGlmICgg
cGFyc2VkICkgeworICAgICAgICByZXR1cm4gWyBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIHBhcnNl
ZFsgMSBdICkgXTsKKyAgICB9CisKKyAgICBwYXJzZWQgPSBidWlsZEZyYWdtZW50KCBbIGRhdGEg
XSwgY29udGV4dCwgc2NyaXB0cyApOworCisgICAgaWYgKCBzY3JpcHRzICYmIHNjcmlwdHMubGVu
Z3RoICkgeworICAgICAgICBqUXVlcnkoIHNjcmlwdHMgKS5yZW1vdmUoKTsKKyAgICB9CisKKyAg
ICByZXR1cm4galF1ZXJ5Lm1lcmdlKCBbXSwgcGFyc2VkLmNoaWxkTm9kZXMgKTsKK307CisKKwor
Ly8gS2VlcCBhIGNvcHkgb2YgdGhlIG9sZCBsb2FkIG1ldGhvZAordmFyIF9sb2FkID0galF1ZXJ5
LmZuLmxvYWQ7CisKKy8qKgorICogTG9hZCBhIHVybCBpbnRvIGEgcGFnZQorICovCitqUXVlcnku
Zm4ubG9hZCA9IGZ1bmN0aW9uKCB1cmwsIHBhcmFtcywgY2FsbGJhY2sgKSB7CisgICAgaWYgKCB0
eXBlb2YgdXJsICE9PSAic3RyaW5nIiAmJiBfbG9hZCApIHsKKyAgICAgICAgcmV0dXJuIF9sb2Fk
LmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKKyAgICB9CisKKyAgICB2YXIgc2VsZWN0b3IsIHR5
cGUsIHJlc3BvbnNlLAorICAgICAgICBzZWxmID0gdGhpcywKKyAgICAgICAgb2ZmID0gdXJsLmlu
ZGV4T2YoICIgIiApOworCisgICAgaWYgKCBvZmYgPiAtMSApIHsKKyAgICAgICAgc2VsZWN0b3Ig
PSBqUXVlcnkudHJpbSggdXJsLnNsaWNlKCBvZmYgKSApOworICAgICAgICB1cmwgPSB1cmwuc2xp
Y2UoIDAsIG9mZiApOworICAgIH0KKworICAgIC8vIElmIGl0J3MgYSBmdW5jdGlvbgorICAgIGlm
ICggalF1ZXJ5LmlzRnVuY3Rpb24oIHBhcmFtcyApICkgeworCisgICAgICAgIC8vIFdlIGFzc3Vt
ZSB0aGF0IGl0J3MgdGhlIGNhbGxiYWNrCisgICAgICAgIGNhbGxiYWNrID0gcGFyYW1zOworICAg
ICAgICBwYXJhbXMgPSB1bmRlZmluZWQ7CisKKyAgICAvLyBPdGhlcndpc2UsIGJ1aWxkIGEgcGFy
YW0gc3RyaW5nCisgICAgfSBlbHNlIGlmICggcGFyYW1zICYmIHR5cGVvZiBwYXJhbXMgPT09ICJv
YmplY3QiICkgeworICAgICAgICB0eXBlID0gIlBPU1QiOworICAgIH0KKworICAgIC8vIElmIHdl
IGhhdmUgZWxlbWVudHMgdG8gbW9kaWZ5LCBtYWtlIHRoZSByZXF1ZXN0CisgICAgaWYgKCBzZWxm
Lmxlbmd0aCA+IDAgKSB7CisgICAgICAgIGpRdWVyeS5hamF4KCB7CisgICAgICAgICAgICB1cmw6
IHVybCwKKworICAgICAgICAgICAgLy8gSWYgInR5cGUiIHZhcmlhYmxlIGlzIHVuZGVmaW5lZCwg
dGhlbiAiR0VUIiBtZXRob2Qgd2lsbCBiZSB1c2VkLgorICAgICAgICAgICAgLy8gTWFrZSB2YWx1
ZSBvZiB0aGlzIGZpZWxkIGV4cGxpY2l0IHNpbmNlCisgICAgICAgICAgICAvLyB1c2VyIGNhbiBv
dmVycmlkZSBpdCB0aHJvdWdoIGFqYXhTZXR1cCBtZXRob2QKKyAgICAgICAgICAgIHR5cGU6IHR5
cGUgfHwgIkdFVCIsCisgICAgICAgICAgICBkYXRhVHlwZTogImh0bWwiLAorICAgICAgICAgICAg
ZGF0YTogcGFyYW1zCisgICAgICAgIH0gKS5kb25lKCBmdW5jdGlvbiggcmVzcG9uc2VUZXh0ICkg
eworCisgICAgICAgICAgICAvLyBTYXZlIHJlc3BvbnNlIGZvciB1c2UgaW4gY29tcGxldGUgY2Fs
bGJhY2sKKyAgICAgICAgICAgIHJlc3BvbnNlID0gYXJndW1lbnRzOworCisgICAgICAgICAgICBz
ZWxmLmh0bWwoIHNlbGVjdG9yID8KKworICAgICAgICAgICAgICAgIC8vIElmIGEgc2VsZWN0b3Ig
d2FzIHNwZWNpZmllZCwgbG9jYXRlIHRoZSByaWdodCBlbGVtZW50cyBpbiBhIGR1bW15IGRpdgor
ICAgICAgICAgICAgICAgIC8vIEV4Y2x1ZGUgc2NyaXB0cyB0byBhdm9pZCBJRSAnUGVybWlzc2lv
biBEZW5pZWQnIGVycm9ycworICAgICAgICAgICAgICAgIGpRdWVyeSggIjxkaXY+IiApLmFwcGVu
ZCggalF1ZXJ5LnBhcnNlSFRNTCggcmVzcG9uc2VUZXh0ICkgKS5maW5kKCBzZWxlY3RvciApIDoK
KworICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSB1c2UgdGhlIGZ1bGwgcmVzdWx0CisgICAg
ICAgICAgICAgICAgcmVzcG9uc2VUZXh0ICk7CisKKyAgICAgICAgLy8gSWYgdGhlIHJlcXVlc3Qg
c3VjY2VlZHMsIHRoaXMgZnVuY3Rpb24gZ2V0cyAiZGF0YSIsICJzdGF0dXMiLCAianFYSFIiCisg
ICAgICAgIC8vIGJ1dCB0aGV5IGFyZSBpZ25vcmVkIGJlY2F1c2UgcmVzcG9uc2Ugd2FzIHNldCBh
Ym92ZS4KKyAgICAgICAgLy8gSWYgaXQgZmFpbHMsIHRoaXMgZnVuY3Rpb24gZ2V0cyAianFYSFIi
LCAic3RhdHVzIiwgImVycm9yIgorICAgICAgICB9ICkuYWx3YXlzKCBjYWxsYmFjayAmJiBmdW5j
dGlvbigganFYSFIsIHN0YXR1cyApIHsKKyAgICAgICAgICAgIHNlbGYuZWFjaCggZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkoIHRoaXMsIHJlc3BvbnNlIHx8IFsg
anFYSFIucmVzcG9uc2VUZXh0LCBzdGF0dXMsIGpxWEhSIF0gKTsKKyAgICAgICAgICAgIH0gKTsK
KyAgICAgICAgfSApOworICAgIH0KKworICAgIHJldHVybiB0aGlzOworfTsKKworCisKKworLy8g
QXR0YWNoIGEgYnVuY2ggb2YgZnVuY3Rpb25zIGZvciBoYW5kbGluZyBjb21tb24gQUpBWCBldmVu
dHMKK2pRdWVyeS5lYWNoKCBbCisgICAgImFqYXhTdGFydCIsCisgICAgImFqYXhTdG9wIiwKKyAg
ICAiYWpheENvbXBsZXRlIiwKKyAgICAiYWpheEVycm9yIiwKKyAgICAiYWpheFN1Y2Nlc3MiLAor
ICAgICJhamF4U2VuZCIKK10sIGZ1bmN0aW9uKCBpLCB0eXBlICkgeworICAgIGpRdWVyeS5mblsg
dHlwZSBdID0gZnVuY3Rpb24oIGZuICkgeworICAgICAgICByZXR1cm4gdGhpcy5vbiggdHlwZSwg
Zm4gKTsKKyAgICB9OworfSApOworCisKKworCitqUXVlcnkuZXhwci5maWx0ZXJzLmFuaW1hdGVk
ID0gZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgcmV0dXJuIGpRdWVyeS5ncmVwKCBqUXVlcnkudGlt
ZXJzLCBmdW5jdGlvbiggZm4gKSB7CisgICAgICAgIHJldHVybiBlbGVtID09PSBmbi5lbGVtOwor
ICAgIH0gKS5sZW5ndGg7Cit9OworCisKKworCisvKioKKyAqIEdldHMgYSB3aW5kb3cgZnJvbSBh
biBlbGVtZW50CisgKi8KK2Z1bmN0aW9uIGdldFdpbmRvdyggZWxlbSApIHsKKyAgICByZXR1cm4g
alF1ZXJ5LmlzV2luZG93KCBlbGVtICkgPyBlbGVtIDogZWxlbS5ub2RlVHlwZSA9PT0gOSAmJiBl
bGVtLmRlZmF1bHRWaWV3OworfQorCitqUXVlcnkub2Zmc2V0ID0geworICAgIHNldE9mZnNldDog
ZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGkgKSB7CisgICAgICAgIHZhciBjdXJQb3NpdGlvbiwg
Y3VyTGVmdCwgY3VyQ1NTVG9wLCBjdXJUb3AsIGN1ck9mZnNldCwgY3VyQ1NTTGVmdCwgY2FsY3Vs
YXRlUG9zaXRpb24sCisgICAgICAgICAgICBwb3NpdGlvbiA9IGpRdWVyeS5jc3MoIGVsZW0sICJw
b3NpdGlvbiIgKSwKKyAgICAgICAgICAgIGN1ckVsZW0gPSBqUXVlcnkoIGVsZW0gKSwKKyAgICAg
ICAgICAgIHByb3BzID0ge307CisKKyAgICAgICAgLy8gU2V0IHBvc2l0aW9uIGZpcnN0LCBpbi1j
YXNlIHRvcC9sZWZ0IGFyZSBzZXQgZXZlbiBvbiBzdGF0aWMgZWxlbQorICAgICAgICBpZiAoIHBv
c2l0aW9uID09PSAic3RhdGljIiApIHsKKyAgICAgICAgICAgIGVsZW0uc3R5bGUucG9zaXRpb24g
PSAicmVsYXRpdmUiOworICAgICAgICB9CisKKyAgICAgICAgY3VyT2Zmc2V0ID0gY3VyRWxlbS5v
ZmZzZXQoKTsKKyAgICAgICAgY3VyQ1NTVG9wID0galF1ZXJ5LmNzcyggZWxlbSwgInRvcCIgKTsK
KyAgICAgICAgY3VyQ1NTTGVmdCA9IGpRdWVyeS5jc3MoIGVsZW0sICJsZWZ0IiApOworICAgICAg
ICBjYWxjdWxhdGVQb3NpdGlvbiA9ICggcG9zaXRpb24gPT09ICJhYnNvbHV0ZSIgfHwgcG9zaXRp
b24gPT09ICJmaXhlZCIgKSAmJgorICAgICAgICAgICAgKCBjdXJDU1NUb3AgKyBjdXJDU1NMZWZ0
ICkuaW5kZXhPZiggImF1dG8iICkgPiAtMTsKKworICAgICAgICAvLyBOZWVkIHRvIGJlIGFibGUg
dG8gY2FsY3VsYXRlIHBvc2l0aW9uIGlmIGVpdGhlcgorICAgICAgICAvLyB0b3Agb3IgbGVmdCBp
cyBhdXRvIGFuZCBwb3NpdGlvbiBpcyBlaXRoZXIgYWJzb2x1dGUgb3IgZml4ZWQKKyAgICAgICAg
aWYgKCBjYWxjdWxhdGVQb3NpdGlvbiApIHsKKyAgICAgICAgICAgIGN1clBvc2l0aW9uID0gY3Vy
RWxlbS5wb3NpdGlvbigpOworICAgICAgICAgICAgY3VyVG9wID0gY3VyUG9zaXRpb24udG9wOwor
ICAgICAgICAgICAgY3VyTGVmdCA9IGN1clBvc2l0aW9uLmxlZnQ7CisKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGN1clRvcCA9IHBhcnNlRmxvYXQoIGN1ckNTU1RvcCApIHx8IDA7Cisg
ICAgICAgICAgICBjdXJMZWZ0ID0gcGFyc2VGbG9hdCggY3VyQ1NTTGVmdCApIHx8IDA7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBvcHRpb25zICkgKSB7CisK
KyAgICAgICAgICAgIC8vIFVzZSBqUXVlcnkuZXh0ZW5kIGhlcmUgdG8gYWxsb3cgbW9kaWZpY2F0
aW9uIG9mIGNvb3JkaW5hdGVzIGFyZ3VtZW50IChnaC0xODQ4KQorICAgICAgICAgICAgb3B0aW9u
cyA9IG9wdGlvbnMuY2FsbCggZWxlbSwgaSwgalF1ZXJ5LmV4dGVuZCgge30sIGN1ck9mZnNldCAp
ICk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIG9wdGlvbnMudG9wICE9IG51bGwgKSB7Cisg
ICAgICAgICAgICBwcm9wcy50b3AgPSAoIG9wdGlvbnMudG9wIC0gY3VyT2Zmc2V0LnRvcCApICsg
Y3VyVG9wOworICAgICAgICB9CisgICAgICAgIGlmICggb3B0aW9ucy5sZWZ0ICE9IG51bGwgKSB7
CisgICAgICAgICAgICBwcm9wcy5sZWZ0ID0gKCBvcHRpb25zLmxlZnQgLSBjdXJPZmZzZXQubGVm
dCApICsgY3VyTGVmdDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggInVzaW5nIiBpbiBvcHRp
b25zICkgeworICAgICAgICAgICAgb3B0aW9ucy51c2luZy5jYWxsKCBlbGVtLCBwcm9wcyApOwor
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjdXJFbGVtLmNzcyggcHJvcHMgKTsKKyAg
ICAgICAgfQorICAgIH0KK307CisKK2pRdWVyeS5mbi5leHRlbmQoIHsKKyAgICBvZmZzZXQ6IGZ1
bmN0aW9uKCBvcHRpb25zICkgeworICAgICAgICBpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7Cisg
ICAgICAgICAgICByZXR1cm4gb3B0aW9ucyA9PT0gdW5kZWZpbmVkID8KKyAgICAgICAgICAgICAg
ICB0aGlzIDoKKyAgICAgICAgICAgICAgICB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkgeworICAg
ICAgICAgICAgICAgICAgICBqUXVlcnkub2Zmc2V0LnNldE9mZnNldCggdGhpcywgb3B0aW9ucywg
aSApOworICAgICAgICAgICAgICAgIH0gKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBkb2NF
bGVtLCB3aW4sCisgICAgICAgICAgICBlbGVtID0gdGhpc1sgMCBdLAorICAgICAgICAgICAgYm94
ID0geyB0b3A6IDAsIGxlZnQ6IDAgfSwKKyAgICAgICAgICAgIGRvYyA9IGVsZW0gJiYgZWxlbS5v
d25lckRvY3VtZW50OworCisgICAgICAgIGlmICggIWRvYyApIHsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGRvY0VsZW0gPSBkb2MuZG9jdW1lbnRFbGVtZW50Owor
CisgICAgICAgIC8vIE1ha2Ugc3VyZSBpdCdzIG5vdCBhIGRpc2Nvbm5lY3RlZCBET00gbm9kZQor
ICAgICAgICBpZiAoICFqUXVlcnkuY29udGFpbnMoIGRvY0VsZW0sIGVsZW0gKSApIHsKKyAgICAg
ICAgICAgIHJldHVybiBib3g7CisgICAgICAgIH0KKworICAgICAgICBib3ggPSBlbGVtLmdldEJv
dW5kaW5nQ2xpZW50UmVjdCgpOworICAgICAgICB3aW4gPSBnZXRXaW5kb3coIGRvYyApOworICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgdG9wOiBib3gudG9wICsgd2luLnBhZ2VZT2Zmc2V0
IC0gZG9jRWxlbS5jbGllbnRUb3AsCisgICAgICAgICAgICBsZWZ0OiBib3gubGVmdCArIHdpbi5w
YWdlWE9mZnNldCAtIGRvY0VsZW0uY2xpZW50TGVmdAorICAgICAgICB9OworICAgIH0sCisKKyAg
ICBwb3NpdGlvbjogZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICggIXRoaXNbIDAgXSApIHsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBvZmZzZXRQYXJlbnQs
IG9mZnNldCwKKyAgICAgICAgICAgIGVsZW0gPSB0aGlzWyAwIF0sCisgICAgICAgICAgICBwYXJl
bnRPZmZzZXQgPSB7IHRvcDogMCwgbGVmdDogMCB9OworCisgICAgICAgIC8vIEZpeGVkIGVsZW1l
bnRzIGFyZSBvZmZzZXQgZnJvbSB3aW5kb3cgKHBhcmVudE9mZnNldCA9IHt0b3A6MCwgbGVmdDog
MH0sCisgICAgICAgIC8vIGJlY2F1c2UgaXQgaXMgaXRzIG9ubHkgb2Zmc2V0IHBhcmVudAorICAg
ICAgICBpZiAoIGpRdWVyeS5jc3MoIGVsZW0sICJwb3NpdGlvbiIgKSA9PT0gImZpeGVkIiApIHsK
KworICAgICAgICAgICAgLy8gQXNzdW1lIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBpcyB0aGVyZSB3
aGVuIGNvbXB1dGVkIHBvc2l0aW9uIGlzIGZpeGVkCisgICAgICAgICAgICBvZmZzZXQgPSBlbGVt
LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworCisgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAg
ICAgIC8vIEdldCAqcmVhbCogb2Zmc2V0UGFyZW50CisgICAgICAgICAgICBvZmZzZXRQYXJlbnQg
PSB0aGlzLm9mZnNldFBhcmVudCgpOworCisgICAgICAgICAgICAvLyBHZXQgY29ycmVjdCBvZmZz
ZXRzCisgICAgICAgICAgICBvZmZzZXQgPSB0aGlzLm9mZnNldCgpOworICAgICAgICAgICAgaWYg
KCAhalF1ZXJ5Lm5vZGVOYW1lKCBvZmZzZXRQYXJlbnRbIDAgXSwgImh0bWwiICkgKSB7CisgICAg
ICAgICAgICAgICAgcGFyZW50T2Zmc2V0ID0gb2Zmc2V0UGFyZW50Lm9mZnNldCgpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAvLyBBZGQgb2Zmc2V0UGFyZW50IGJvcmRlcnMKKyAgICAg
ICAgICAgIHBhcmVudE9mZnNldC50b3AgKz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50WyAwIF0s
ICJib3JkZXJUb3BXaWR0aCIsIHRydWUgKTsKKyAgICAgICAgICAgIHBhcmVudE9mZnNldC5sZWZ0
ICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudFsgMCBdLCAiYm9yZGVyTGVmdFdpZHRoIiwgdHJ1
ZSApOworICAgICAgICB9CisKKyAgICAgICAgLy8gU3VidHJhY3QgcGFyZW50IG9mZnNldHMgYW5k
IGVsZW1lbnQgbWFyZ2lucworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgdG9wOiBvZmZz
ZXQudG9wIC0gcGFyZW50T2Zmc2V0LnRvcCAtIGpRdWVyeS5jc3MoIGVsZW0sICJtYXJnaW5Ub3Ai
LCB0cnVlICksCisgICAgICAgICAgICBsZWZ0OiBvZmZzZXQubGVmdCAtIHBhcmVudE9mZnNldC5s
ZWZ0IC0galF1ZXJ5LmNzcyggZWxlbSwgIm1hcmdpbkxlZnQiLCB0cnVlICkKKyAgICAgICAgfTsK
KyAgICB9LAorCisgICAgLy8gVGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gZG9jdW1lbnRFbGVtZW50
IGluIHRoZSBmb2xsb3dpbmcgY2FzZXM6CisgICAgLy8gMSkgRm9yIHRoZSBlbGVtZW50IGluc2lk
ZSB0aGUgaWZyYW1lIHdpdGhvdXQgb2Zmc2V0UGFyZW50LCB0aGlzIG1ldGhvZCB3aWxsIHJldHVy
bgorICAgIC8vICAgIGRvY3VtZW50RWxlbWVudCBvZiB0aGUgcGFyZW50IHdpbmRvdworICAgIC8v
IDIpIEZvciB0aGUgaGlkZGVuIG9yIGRldGFjaGVkIGVsZW1lbnQKKyAgICAvLyAzKSBGb3IgYm9k
eSBvciBodG1sIGVsZW1lbnQsIGkuZS4gaW4gY2FzZSBvZiB0aGUgaHRtbCBub2RlIC0gaXQgd2ls
bCByZXR1cm4gaXRzZWxmCisgICAgLy8KKyAgICAvLyBidXQgdGhvc2UgZXhjZXB0aW9ucyB3ZXJl
IG5ldmVyIHByZXNlbnRlZCBhcyBhIHJlYWwgbGlmZSB1c2UtY2FzZXMKKyAgICAvLyBhbmQgbWln
aHQgYmUgY29uc2lkZXJlZCBhcyBtb3JlIHByZWZlcmFibGUgcmVzdWx0cy4KKyAgICAvLworICAg
IC8vIFRoaXMgbG9naWMsIGhvd2V2ZXIsIGlzIG5vdCBndWFyYW50ZWVkIGFuZCBjYW4gY2hhbmdl
IGF0IGFueSBwb2ludCBpbiB0aGUgZnV0dXJlCisgICAgb2Zmc2V0UGFyZW50OiBmdW5jdGlvbigp
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZh
ciBvZmZzZXRQYXJlbnQgPSB0aGlzLm9mZnNldFBhcmVudDsKKworICAgICAgICAgICAgd2hpbGUg
KCBvZmZzZXRQYXJlbnQgJiYgalF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCAicG9zaXRpb24iICkg
PT09ICJzdGF0aWMiICkgeworICAgICAgICAgICAgICAgIG9mZnNldFBhcmVudCA9IG9mZnNldFBh
cmVudC5vZmZzZXRQYXJlbnQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBv
ZmZzZXRQYXJlbnQgfHwgZG9jdW1lbnRFbGVtZW50OworICAgICAgICB9ICk7CisgICAgfQorfSAp
OworCisvLyBDcmVhdGUgc2Nyb2xsTGVmdCBhbmQgc2Nyb2xsVG9wIG1ldGhvZHMKK2pRdWVyeS5l
YWNoKCB7IHNjcm9sbExlZnQ6ICJwYWdlWE9mZnNldCIsIHNjcm9sbFRvcDogInBhZ2VZT2Zmc2V0
IiB9LCBmdW5jdGlvbiggbWV0aG9kLCBwcm9wICkgeworICAgIHZhciB0b3AgPSAicGFnZVlPZmZz
ZXQiID09PSBwcm9wOworCisgICAgalF1ZXJ5LmZuWyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB2YWwg
KSB7CisgICAgICAgIHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBtZXRob2Qs
IHZhbCApIHsKKyAgICAgICAgICAgIHZhciB3aW4gPSBnZXRXaW5kb3coIGVsZW0gKTsKKworICAg
ICAgICAgICAgaWYgKCB2YWwgPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gd2luID8gd2luWyBwcm9wIF0gOiBlbGVtWyBtZXRob2QgXTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKCB3aW4gKSB7CisgICAgICAgICAgICAgICAgd2luLnNjcm9sbFRvKAor
ICAgICAgICAgICAgICAgICAgICAhdG9wID8gdmFsIDogd2luLnBhZ2VYT2Zmc2V0LAorICAgICAg
ICAgICAgICAgICAgICB0b3AgPyB2YWwgOiB3aW4ucGFnZVlPZmZzZXQKKyAgICAgICAgICAgICAg
ICApOworCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVsZW1bIG1ldGhv
ZCBdID0gdmFsOworICAgICAgICAgICAgfQorICAgICAgICB9LCBtZXRob2QsIHZhbCwgYXJndW1l
bnRzLmxlbmd0aCApOworICAgIH07Cit9ICk7CisKKy8vIFN1cHBvcnQ6IFNhZmFyaTw3LTgrLCBD
aHJvbWU8MzctNDQrCisvLyBBZGQgdGhlIHRvcC9sZWZ0IGNzc0hvb2tzIHVzaW5nIGpRdWVyeS5m
bi5wb3NpdGlvbgorLy8gV2Via2l0IGJ1ZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTI5MDg0CisvLyBCbGluayBidWc6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3Av
Y2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0yMjkyODAKKy8vIGdldENvbXB1dGVkU3R5bGUgcmV0
dXJucyBwZXJjZW50IHdoZW4gc3BlY2lmaWVkIGZvciB0b3AvbGVmdC9ib3R0b20vcmlnaHQ7Cisv
LyByYXRoZXIgdGhhbiBtYWtlIHRoZSBjc3MgbW9kdWxlIGRlcGVuZCBvbiB0aGUgb2Zmc2V0IG1v
ZHVsZSwganVzdCBjaGVjayBmb3IgaXQgaGVyZQoralF1ZXJ5LmVhY2goIFsgInRvcCIsICJsZWZ0
IiBdLCBmdW5jdGlvbiggaSwgcHJvcCApIHsKKyAgICBqUXVlcnkuY3NzSG9va3NbIHByb3AgXSA9
IGFkZEdldEhvb2tJZiggc3VwcG9ydC5waXhlbFBvc2l0aW9uLAorICAgICAgICBmdW5jdGlvbigg
ZWxlbSwgY29tcHV0ZWQgKSB7CisgICAgICAgICAgICBpZiAoIGNvbXB1dGVkICkgeworICAgICAg
ICAgICAgICAgIGNvbXB1dGVkID0gY3VyQ1NTKCBlbGVtLCBwcm9wICk7CisKKyAgICAgICAgICAg
ICAgICAvLyBJZiBjdXJDU1MgcmV0dXJucyBwZXJjZW50YWdlLCBmYWxsYmFjayB0byBvZmZzZXQK
KyAgICAgICAgICAgICAgICByZXR1cm4gcm51bW5vbnB4LnRlc3QoIGNvbXB1dGVkICkgPworICAg
ICAgICAgICAgICAgICAgICBqUXVlcnkoIGVsZW0gKS5wb3NpdGlvbigpWyBwcm9wIF0gKyAicHgi
IDoKKyAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWQ7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICApOworfSApOworCisKKy8vIENyZWF0ZSBpbm5lckhlaWdodCwgaW5uZXJXaWR0aCwg
aGVpZ2h0LCB3aWR0aCwgb3V0ZXJIZWlnaHQgYW5kIG91dGVyV2lkdGggbWV0aG9kcworalF1ZXJ5
LmVhY2goIHsgSGVpZ2h0OiAiaGVpZ2h0IiwgV2lkdGg6ICJ3aWR0aCIgfSwgZnVuY3Rpb24oIG5h
bWUsIHR5cGUgKSB7CisgICAgalF1ZXJ5LmVhY2goIHsgcGFkZGluZzogImlubmVyIiArIG5hbWUs
IGNvbnRlbnQ6IHR5cGUsICIiOiAib3V0ZXIiICsgbmFtZSB9LAorICAgICAgICBmdW5jdGlvbigg
ZGVmYXVsdEV4dHJhLCBmdW5jTmFtZSApIHsKKworICAgICAgICAvLyBNYXJnaW4gaXMgb25seSBm
b3Igb3V0ZXJIZWlnaHQsIG91dGVyV2lkdGgKKyAgICAgICAgalF1ZXJ5LmZuWyBmdW5jTmFtZSBd
ID0gZnVuY3Rpb24oIG1hcmdpbiwgdmFsdWUgKSB7CisgICAgICAgICAgICB2YXIgY2hhaW5hYmxl
ID0gYXJndW1lbnRzLmxlbmd0aCAmJiAoIGRlZmF1bHRFeHRyYSB8fCB0eXBlb2YgbWFyZ2luICE9
PSAiYm9vbGVhbiIgKSwKKyAgICAgICAgICAgICAgICBleHRyYSA9IGRlZmF1bHRFeHRyYSB8fCAo
IG1hcmdpbiA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gdHJ1ZSA/ICJtYXJnaW4iIDogImJvcmRlciIg
KTsKKworICAgICAgICAgICAgcmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIHR5
cGUsIHZhbHVlICkgeworICAgICAgICAgICAgICAgIHZhciBkb2M7CisKKyAgICAgICAgICAgICAg
ICBpZiAoIGpRdWVyeS5pc1dpbmRvdyggZWxlbSApICkgeworCisgICAgICAgICAgICAgICAgICAg
IC8vIEFzIG9mIDUvOC8yMDEyIHRoaXMgd2lsbCB5aWVsZCBpbmNvcnJlY3QgcmVzdWx0cyBmb3Ig
TW9iaWxlIFNhZmFyaSwgYnV0IHRoZXJlCisgICAgICAgICAgICAgICAgICAgIC8vIGlzbid0IGEg
d2hvbGUgbG90IHdlIGNhbiBkby4gU2VlIHB1bGwgcmVxdWVzdCBhdCB0aGlzIFVSTCBmb3IgZGlz
Y3Vzc2lvbjoKKyAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2pxdWVy
eS9qcXVlcnkvcHVsbC83NjQKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0uZG9jdW1l
bnQuZG9jdW1lbnRFbGVtZW50WyAiY2xpZW50IiArIG5hbWUgXTsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAvLyBHZXQgZG9jdW1lbnQgd2lkdGggb3IgaGVpZ2h0CisgICAg
ICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSA5ICkgeworICAgICAgICAgICAgICAg
ICAgICBkb2MgPSBlbGVtLmRvY3VtZW50RWxlbWVudDsKKworICAgICAgICAgICAgICAgICAgICAv
LyBFaXRoZXIgc2Nyb2xsW1dpZHRoL0hlaWdodF0gb3Igb2Zmc2V0W1dpZHRoL0hlaWdodF0gb3Ig
Y2xpZW50W1dpZHRoL0hlaWdodF0sCisgICAgICAgICAgICAgICAgICAgIC8vIHdoaWNoZXZlciBp
cyBncmVhdGVzdAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgoCisgICAgICAg
ICAgICAgICAgICAgICAgICBlbGVtLmJvZHlbICJzY3JvbGwiICsgbmFtZSBdLCBkb2NbICJzY3Jv
bGwiICsgbmFtZSBdLAorICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5ib2R5WyAib2Zmc2V0
IiArIG5hbWUgXSwgZG9jWyAib2Zmc2V0IiArIG5hbWUgXSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRvY1sgImNsaWVudCIgKyBuYW1lIF0KKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5l
ZCA/CisKKyAgICAgICAgICAgICAgICAgICAgLy8gR2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUg
ZWxlbWVudCwgcmVxdWVzdGluZyBidXQgbm90IGZvcmNpbmcgcGFyc2VGbG9hdAorICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkuY3NzKCBlbGVtLCB0eXBlLCBleHRyYSApIDoKKworICAgICAgICAg
ICAgICAgICAgICAvLyBTZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50CisgICAgICAg
ICAgICAgICAgICAgIGpRdWVyeS5zdHlsZSggZWxlbSwgdHlwZSwgdmFsdWUsIGV4dHJhICk7Cisg
ICAgICAgICAgICB9LCB0eXBlLCBjaGFpbmFibGUgPyBtYXJnaW4gOiB1bmRlZmluZWQsIGNoYWlu
YWJsZSwgbnVsbCApOworICAgICAgICB9OworICAgIH0gKTsKK30gKTsKKworCitqUXVlcnkuZm4u
ZXh0ZW5kKCB7CisKKyAgICBiaW5kOiBmdW5jdGlvbiggdHlwZXMsIGRhdGEsIGZuICkgeworICAg
ICAgICByZXR1cm4gdGhpcy5vbiggdHlwZXMsIG51bGwsIGRhdGEsIGZuICk7CisgICAgfSwKKyAg
ICB1bmJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZm4gKSB7CisgICAgICAgIHJldHVybiB0aGlzLm9m
ZiggdHlwZXMsIG51bGwsIGZuICk7CisgICAgfSwKKworICAgIGRlbGVnYXRlOiBmdW5jdGlvbigg
c2VsZWN0b3IsIHR5cGVzLCBkYXRhLCBmbiApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMub24oIHR5
cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKTsKKyAgICB9LAorICAgIHVuZGVsZWdhdGU6IGZ1bmN0
aW9uKCBzZWxlY3RvciwgdHlwZXMsIGZuICkgeworCisgICAgICAgIC8vICggbmFtZXNwYWNlICkg
b3IgKCBzZWxlY3RvciwgdHlwZXMgWywgZm5dICkKKyAgICAgICAgcmV0dXJuIGFyZ3VtZW50cy5s
ZW5ndGggPT09IDEgPworICAgICAgICAgICAgdGhpcy5vZmYoIHNlbGVjdG9yLCAiKioiICkgOgor
ICAgICAgICAgICAgdGhpcy5vZmYoIHR5cGVzLCBzZWxlY3RvciB8fCAiKioiLCBmbiApOworICAg
IH0sCisgICAgc2l6ZTogZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLmxlbmd0aDsK
KyAgICB9Cit9ICk7CisKK2pRdWVyeS5mbi5hbmRTZWxmID0galF1ZXJ5LmZuLmFkZEJhY2s7CisK
KworCisKKy8vIFJlZ2lzdGVyIGFzIGEgbmFtZWQgQU1EIG1vZHVsZSwgc2luY2UgalF1ZXJ5IGNh
biBiZSBjb25jYXRlbmF0ZWQgd2l0aCBvdGhlcgorLy8gZmlsZXMgdGhhdCBtYXkgdXNlIGRlZmlu
ZSwgYnV0IG5vdCB2aWEgYSBwcm9wZXIgY29uY2F0ZW5hdGlvbiBzY3JpcHQgdGhhdAorLy8gdW5k
ZXJzdGFuZHMgYW5vbnltb3VzIEFNRCBtb2R1bGVzLiBBIG5hbWVkIEFNRCBpcyBzYWZlc3QgYW5k
IG1vc3Qgcm9idXN0CisvLyB3YXkgdG8gcmVnaXN0ZXIuIExvd2VyY2FzZSBqcXVlcnkgaXMgdXNl
ZCBiZWNhdXNlIEFNRCBtb2R1bGUgbmFtZXMgYXJlCisvLyBkZXJpdmVkIGZyb20gZmlsZSBuYW1l
cywgYW5kIGpRdWVyeSBpcyBub3JtYWxseSBkZWxpdmVyZWQgaW4gYSBsb3dlcmNhc2UKKy8vIGZp
bGUgbmFtZS4gRG8gdGhpcyBhZnRlciBjcmVhdGluZyB0aGUgZ2xvYmFsIHNvIHRoYXQgaWYgYW4g
QU1EIG1vZHVsZSB3YW50cworLy8gdG8gY2FsbCBub0NvbmZsaWN0IHRvIGhpZGUgdGhpcyB2ZXJz
aW9uIG9mIGpRdWVyeSwgaXQgd2lsbCB3b3JrLgorCisvLyBOb3RlIHRoYXQgZm9yIG1heGltdW0g
cG9ydGFiaWxpdHksIGxpYnJhcmllcyB0aGF0IGFyZSBub3QgalF1ZXJ5IHNob3VsZAorLy8gZGVj
bGFyZSB0aGVtc2VsdmVzIGFzIGFub255bW91cyBtb2R1bGVzLCBhbmQgYXZvaWQgc2V0dGluZyBh
IGdsb2JhbCBpZiBhbgorLy8gQU1EIGxvYWRlciBpcyBwcmVzZW50LiBqUXVlcnkgaXMgYSBzcGVj
aWFsIGNhc2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUKKy8vIGh0dHBzOi8vZ2l0aHViLmNv
bS9qcmJ1cmtlL3JlcXVpcmVqcy93aWtpL1VwZGF0aW5nLWV4aXN0aW5nLWxpYnJhcmllcyN3aWtp
LWFub24KKworaWYgKCB0eXBlb2YgZGVmaW5lID09PSAiZnVuY3Rpb24iICYmIGRlZmluZS5hbWQg
KSB7CisgICAgZGVmaW5lKCAianF1ZXJ5IiwgW10sIGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1
cm4galF1ZXJ5OworICAgIH0gKTsKK30KKworCisKK3ZhcgorCisgICAgLy8gTWFwIG92ZXIgalF1
ZXJ5IGluIGNhc2Ugb2Ygb3ZlcndyaXRlCisgICAgX2pRdWVyeSA9IHdpbmRvdy5qUXVlcnksCisK
KyAgICAvLyBNYXAgb3ZlciB0aGUgJCBpbiBjYXNlIG9mIG92ZXJ3cml0ZQorICAgIF8kID0gd2lu
ZG93LiQ7CisKK2pRdWVyeS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oIGRlZXAgKSB7CisgICAgaWYg
KCB3aW5kb3cuJCA9PT0galF1ZXJ5ICkgeworICAgICAgICB3aW5kb3cuJCA9IF8kOworICAgIH0K
KworICAgIGlmICggZGVlcCAmJiB3aW5kb3cualF1ZXJ5ID09PSBqUXVlcnkgKSB7CisgICAgICAg
IHdpbmRvdy5qUXVlcnkgPSBfalF1ZXJ5OworICAgIH0KKworICAgIHJldHVybiBqUXVlcnk7Cit9
OworCisvLyBFeHBvc2UgalF1ZXJ5IGFuZCAkIGlkZW50aWZpZXJzLCBldmVuIGluIEFNRAorLy8g
KCM3MTAyI2NvbW1lbnQ6MTAsIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L3B1bGwv
NTU3KQorLy8gYW5kIENvbW1vbkpTIGZvciBicm93c2VyIGVtdWxhdG9ycyAoIzEzNTY2KQoraWYg
KCAhbm9HbG9iYWwgKSB7CisgICAgd2luZG93LmpRdWVyeSA9IHdpbmRvdy4kID0galF1ZXJ5Owor
fQorCityZXR1cm4galF1ZXJ5OworfSkpOworCis7OyhmdW5jdGlvbigpIHsKKy8qIQorICogQG92
ZXJ2aWV3ICBFbWJlciAtIEphdmFTY3JpcHQgQXBwbGljYXRpb24gRnJhbWV3b3JrCisgKiBAY29w
eXJpZ2h0IENvcHlyaWdodCAyMDExLTIwMTYgVGlsZGUgSW5jLiBhbmQgY29udHJpYnV0b3JzCisg
KiAgICAgICAgICAgIFBvcnRpb25zIENvcHlyaWdodCAyMDA2LTIwMTEgU3Ryb2JlIEluYy4KKyAq
ICAgICAgICAgICAgUG9ydGlvbnMgQ29weXJpZ2h0IDIwMDgtMjAxMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBAbGljZW5zZSAgIExpY2Vuc2VkIHVuZGVyIE1JVCBsaWNlbnNl
CisgKiAgICAgICAgICAgIFNlZSBodHRwczovL3Jhdy5naXRodWIuY29tL2VtYmVyanMvZW1iZXIu
anMvbWFzdGVyL0xJQ0VOU0UKKyAqIEB2ZXJzaW9uICAgMi42LjIKKyAqLworCit2YXIgZW5pZmVk
LCByZXF1aXJlTW9kdWxlLCByZXF1aXJlLCBFbWJlcjsKK3ZhciBtYWluQ29udGV4dCA9IHRoaXM7
CisKKyhmdW5jdGlvbigpIHsKKyAgdmFyIGlzTm9kZSA9IHR5cGVvZiB3aW5kb3cgPT09ICd1bmRl
ZmluZWQnICYmCisgICAgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHt9LnRvU3Ry
aW5nLmNhbGwocHJvY2VzcykgPT09ICdbb2JqZWN0IHByb2Nlc3NdJzsKKworICBpZiAoIWlzTm9k
ZSkgeworICAgIEVtYmVyID0gdGhpcy5FbWJlciA9IHRoaXMuRW1iZXIgfHwge307CisgIH0KKwor
ICBpZiAodHlwZW9mIEVtYmVyID09PSAndW5kZWZpbmVkJykgeyBFbWJlciA9IHt9OyB9CisKKyAg
aWYgKHR5cGVvZiBFbWJlci5fX2xvYWRlciA9PT0gJ3VuZGVmaW5lZCcpIHsKKyAgICB2YXIgcmVn
aXN0cnkgPSB7fTsKKyAgICB2YXIgc2VlbiA9IHt9OworCisgICAgZW5pZmVkID0gZnVuY3Rpb24o
bmFtZSwgZGVwcywgY2FsbGJhY2spIHsKKyAgICAgIHZhciB2YWx1ZSA9IHsgfTsKKworICAgICAg
aWYgKCFjYWxsYmFjaykgeworICAgICAgICB2YWx1ZS5kZXBzID0gW107CisgICAgICAgIHZhbHVl
LmNhbGxiYWNrID0gZGVwczsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHZhbHVlLmRlcHMgPSBk
ZXBzOworICAgICAgICB2YWx1ZS5jYWxsYmFjayA9IGNhbGxiYWNrOworICAgICAgfQorCisgICAg
ICByZWdpc3RyeVtuYW1lXSA9IHZhbHVlOworICAgIH07CisKKyAgICByZXF1aXJlID0gcmVxdWly
ZU1vZHVsZSA9IGZ1bmN0aW9uKG5hbWUpIHsKKyAgICAgIHJldHVybiBpbnRlcm5hbFJlcXVpcmUo
bmFtZSwgbnVsbCk7CisgICAgfTsKKworICAgIC8vIHNldHVwIGByZXF1aXJlYCBtb2R1bGUKKyAg
ICByZXF1aXJlWydkZWZhdWx0J10gPSByZXF1aXJlOworCisgICAgcmVxdWlyZS5oYXMgPSBmdW5j
dGlvbiByZWdpc3RyeUhhcyhtb2R1bGVOYW1lKSB7CisgICAgICByZXR1cm4gISFyZWdpc3RyeVtt
b2R1bGVOYW1lXSB8fCAhIXJlZ2lzdHJ5W21vZHVsZU5hbWUgKyAnL2luZGV4J107CisgICAgfTsK
KworICAgIGZ1bmN0aW9uIG1pc3NpbmdNb2R1bGUobmFtZSwgcmVmZXJyZXJOYW1lKSB7CisgICAg
ICBpZiAocmVmZXJyZXJOYW1lKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90
IGZpbmQgbW9kdWxlICcgKyBuYW1lICsgJyByZXF1aXJlZCBieTogJyArIHJlZmVycmVyTmFtZSk7
CisgICAgICB9IGVsc2UgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5k
IG1vZHVsZSAnICsgbmFtZSk7CisgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gaW50ZXJu
YWxSZXF1aXJlKF9uYW1lLCByZWZlcnJlck5hbWUpIHsKKyAgICAgIHZhciBuYW1lID0gX25hbWU7
CisgICAgICB2YXIgbW9kID0gcmVnaXN0cnlbbmFtZV07CisKKyAgICAgIGlmICghbW9kKSB7Cisg
ICAgICAgIG5hbWUgPSBuYW1lICsgJy9pbmRleCc7CisgICAgICAgIG1vZCA9IHJlZ2lzdHJ5W25h
bWVdOworICAgICAgfQorCisgICAgICB2YXIgZXhwb3J0cyA9IHNlZW5bbmFtZV07CisKKyAgICAg
IGlmIChleHBvcnRzICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgcmV0dXJuIGV4cG9ydHM7Cisg
ICAgICB9CisKKyAgICAgIGV4cG9ydHMgPSBzZWVuW25hbWVdID0ge307CisKKyAgICAgIGlmICgh
bW9kKSB7CisgICAgICAgIG1pc3NpbmdNb2R1bGUoX25hbWUsIHJlZmVycmVyTmFtZSk7CisgICAg
ICB9CisKKyAgICAgIHZhciBkZXBzID0gbW9kLmRlcHM7CisgICAgICB2YXIgY2FsbGJhY2sgPSBt
b2QuY2FsbGJhY2s7CisgICAgICB2YXIgbGVuZ3RoID0gZGVwcy5sZW5ndGg7CisgICAgICB2YXIg
cmVpZmllZCA9IG5ldyBBcnJheShsZW5ndGgpOworCisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmIChkZXBzW2ldID09PSAnZXhwb3J0cycpIHsKKyAg
ICAgICAgICByZWlmaWVkW2ldID0gZXhwb3J0czsKKyAgICAgICAgfSBlbHNlIGlmIChkZXBzW2ld
ID09PSAncmVxdWlyZScpIHsKKyAgICAgICAgICByZWlmaWVkW2ldID0gcmVxdWlyZTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICByZWlmaWVkW2ldID0gaW50ZXJuYWxSZXF1aXJlKGRlcHNb
aV0sIG5hbWUpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGNhbGxiYWNrLmFwcGx5KHRo
aXMsIHJlaWZpZWQpOworCisgICAgICByZXR1cm4gZXhwb3J0czsKKyAgICB9CisKKyAgICByZXF1
aXJlTW9kdWxlLl9lYWtfc2VlbiA9IHJlZ2lzdHJ5OworCisgICAgRW1iZXIuX19sb2FkZXIgPSB7
CisgICAgICBkZWZpbmU6IGVuaWZlZCwKKyAgICAgIHJlcXVpcmU6IHJlcXVpcmUsCisgICAgICBy
ZWdpc3RyeTogcmVnaXN0cnkKKyAgICB9OworICB9IGVsc2UgeworICAgIGVuaWZlZCA9IEVtYmVy
Ll9fbG9hZGVyLmRlZmluZTsKKyAgICByZXF1aXJlID0gcmVxdWlyZU1vZHVsZSA9IEVtYmVyLl9f
bG9hZGVyLnJlcXVpcmU7CisgIH0KK30pKCk7CisKK2VuaWZlZCgnYmFja2J1cm5lcicsIFsnZXhw
b3J0cycsICdiYWNrYnVybmVyL3V0aWxzJywgJ2JhY2tidXJuZXIvcGxhdGZvcm0nLCAnYmFja2J1
cm5lci9iaW5hcnktc2VhcmNoJywgJ2JhY2tidXJuZXIvZGVmZXJyZWQtYWN0aW9uLXF1ZXVlcydd
LCBmdW5jdGlvbiAoZXhwb3J0cywgX2JhY2tidXJuZXJVdGlscywgX2JhY2tidXJuZXJQbGF0Zm9y
bSwgX2JhY2tidXJuZXJCaW5hcnlTZWFyY2gsIF9iYWNrYnVybmVyRGVmZXJyZWRBY3Rpb25RdWV1
ZXMpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIGV4cG9ydHMuZGVmYXVsdCA9IEJhY2tidXJuZXI7
CisKKyAgZnVuY3Rpb24gQmFja2J1cm5lcihxdWV1ZU5hbWVzLCBvcHRpb25zKSB7CisgICAgdGhp
cy5xdWV1ZU5hbWVzID0gcXVldWVOYW1lczsKKyAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8
IHt9OworICAgIGlmICghdGhpcy5vcHRpb25zLmRlZmF1bHRRdWV1ZSkgeworICAgICAgdGhpcy5v
cHRpb25zLmRlZmF1bHRRdWV1ZSA9IHF1ZXVlTmFtZXNbMF07CisgICAgfQorICAgIHRoaXMuaW5z
dGFuY2VTdGFjayA9IFtdOworICAgIHRoaXMuX2RlYm91bmNlZXMgPSBbXTsKKyAgICB0aGlzLl90
aHJvdHRsZXJzID0gW107CisgICAgdGhpcy5fZXZlbnRDYWxsYmFja3MgPSB7CisgICAgICBlbmQ6
IFtdLAorICAgICAgYmVnaW46IFtdCisgICAgfTsKKworICAgIHZhciBfdGhpcyA9IHRoaXM7Cisg
ICAgdGhpcy5fYm91bmRDbGVhckl0ZW1zID0gZnVuY3Rpb24gKCkgeworICAgICAgY2xlYXJJdGVt
cygpOworICAgIH07CisKKyAgICB0aGlzLl90aW1lclRpbWVvdXRJZCA9IHVuZGVmaW5lZDsKKyAg
ICB0aGlzLl90aW1lcnMgPSBbXTsKKworICAgIHRoaXMuX3BsYXRmb3JtID0gdGhpcy5vcHRpb25z
Ll9wbGF0Zm9ybSB8fCBfYmFja2J1cm5lclBsYXRmb3JtLmRlZmF1bHQ7CisKKyAgICB0aGlzLl9i
b3VuZFJ1bkV4cGlyZWRUaW1lcnMgPSBmdW5jdGlvbiAoKSB7CisgICAgICBfdGhpcy5fcnVuRXhw
aXJlZFRpbWVycygpOworICAgIH07CisgIH0KKworICBCYWNrYnVybmVyLnByb3RvdHlwZSA9IHsK
KyAgICBiZWdpbjogZnVuY3Rpb24gKCkgeworICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlv
bnM7CisgICAgICB2YXIgb25CZWdpbiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5vbkJlZ2luOworICAg
ICAgdmFyIHByZXZpb3VzSW5zdGFuY2UgPSB0aGlzLmN1cnJlbnRJbnN0YW5jZTsKKworICAgICAg
aWYgKHByZXZpb3VzSW5zdGFuY2UpIHsKKyAgICAgICAgdGhpcy5pbnN0YW5jZVN0YWNrLnB1c2go
cHJldmlvdXNJbnN0YW5jZSk7CisgICAgICB9CisKKyAgICAgIHRoaXMuY3VycmVudEluc3RhbmNl
ID0gbmV3IF9iYWNrYnVybmVyRGVmZXJyZWRBY3Rpb25RdWV1ZXMuZGVmYXVsdCh0aGlzLnF1ZXVl
TmFtZXMsIG9wdGlvbnMpOworICAgICAgdGhpcy5fdHJpZ2dlcignYmVnaW4nLCB0aGlzLmN1cnJl
bnRJbnN0YW5jZSwgcHJldmlvdXNJbnN0YW5jZSk7CisgICAgICBpZiAob25CZWdpbikgeworICAg
ICAgICBvbkJlZ2luKHRoaXMuY3VycmVudEluc3RhbmNlLCBwcmV2aW91c0luc3RhbmNlKTsKKyAg
ICAgIH0KKyAgICB9LAorCisgICAgZW5kOiBmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgb3B0aW9u
cyA9IHRoaXMub3B0aW9uczsKKyAgICAgIHZhciBvbkVuZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5v
bkVuZDsKKyAgICAgIHZhciBjdXJyZW50SW5zdGFuY2UgPSB0aGlzLmN1cnJlbnRJbnN0YW5jZTsK
KyAgICAgIHZhciBuZXh0SW5zdGFuY2UgPSBudWxsOworCisgICAgICAvLyBQcmV2ZW50IGRvdWJs
ZS1maW5hbGx5IGJ1ZyBpbiBTYWZhcmkgNi4wLjIgYW5kIGlPUyA2CisgICAgICAvLyBUaGlzIGJ1
ZyBhcHBlYXJzIHRvIGJlIHJlc29sdmVkIGluIFNhZmFyaSA2LjAuNSBhbmQgaU9TIDcKKyAgICAg
IHZhciBmaW5hbGx5QWxyZWFkeUNhbGxlZCA9IGZhbHNlOworICAgICAgdHJ5IHsKKyAgICAgICAg
Y3VycmVudEluc3RhbmNlLmZsdXNoKCk7CisgICAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAo
IWZpbmFsbHlBbHJlYWR5Q2FsbGVkKSB7CisgICAgICAgICAgZmluYWxseUFscmVhZHlDYWxsZWQg
PSB0cnVlOworCisgICAgICAgICAgdGhpcy5jdXJyZW50SW5zdGFuY2UgPSBudWxsOworCisgICAg
ICAgICAgaWYgKHRoaXMuaW5zdGFuY2VTdGFjay5sZW5ndGgpIHsKKyAgICAgICAgICAgIG5leHRJ
bnN0YW5jZSA9IHRoaXMuaW5zdGFuY2VTdGFjay5wb3AoKTsKKyAgICAgICAgICAgIHRoaXMuY3Vy
cmVudEluc3RhbmNlID0gbmV4dEluc3RhbmNlOworICAgICAgICAgIH0KKyAgICAgICAgICB0aGlz
Ll90cmlnZ2VyKCdlbmQnLCBjdXJyZW50SW5zdGFuY2UsIG5leHRJbnN0YW5jZSk7CisgICAgICAg
ICAgaWYgKG9uRW5kKSB7CisgICAgICAgICAgICBvbkVuZChjdXJyZW50SW5zdGFuY2UsIG5leHRJ
bnN0YW5jZSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKworICAg
IC8qKgorICAgICBUcmlnZ2VyIGFuIGV2ZW50LiBTdXBwb3J0cyB1cCB0byB0d28gYXJndW1lbnRz
LiBEZXNpZ25lZCBhcm91bmQKKyAgICAgdHJpZ2dlcmluZyB0cmFuc2l0aW9uIGV2ZW50cyBmcm9t
IG9uZSBydW4gbG9vcCBpbnN0YW5jZSB0byB0aGUKKyAgICAgbmV4dCwgd2hpY2ggcmVxdWlyZXMg
YW4gYXJndW1lbnQgZm9yIHRoZSBmaXJzdCBpbnN0YW5jZSBhbmQgdGhlbgorICAgICBhbiBhcmd1
bWVudCBmb3IgdGhlIG5leHQgaW5zdGFuY2UuCisgICAgICBAcHJpdmF0ZQorICAgICBAbWV0aG9k
IF90cmlnZ2VyCisgICAgIEBwYXJhbSB7U3RyaW5nfSBldmVudE5hbWUKKyAgICAgQHBhcmFtIHth
bnl9IGFyZzEKKyAgICAgQHBhcmFtIHthbnl9IGFyZzIKKyAgICAgKi8KKyAgICBfdHJpZ2dlcjog
ZnVuY3Rpb24gKGV2ZW50TmFtZSwgYXJnMSwgYXJnMikgeworICAgICAgdmFyIGNhbGxiYWNrcyA9
IHRoaXMuX2V2ZW50Q2FsbGJhY2tzW2V2ZW50TmFtZV07CisgICAgICBpZiAoY2FsbGJhY2tzKSB7
CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7Cisg
ICAgICAgICAgY2FsbGJhY2tzW2ldKGFyZzEsIGFyZzIpOworICAgICAgICB9CisgICAgICB9Cisg
ICAgfSwKKworICAgIG9uOiBmdW5jdGlvbiAoZXZlbnROYW1lLCBjYWxsYmFjaykgeworICAgICAg
aWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykgeworICAgICAgICB0aHJvdyBuZXcg
VHlwZUVycm9yKCdDYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24nKTsKKyAgICAgIH0KKyAgICAg
IHZhciBjYWxsYmFja3MgPSB0aGlzLl9ldmVudENhbGxiYWNrc1tldmVudE5hbWVdOworICAgICAg
aWYgKGNhbGxiYWNrcykgeworICAgICAgICBjYWxsYmFja3MucHVzaChjYWxsYmFjayk7CisgICAg
ICB9IGVsc2UgeworICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3Qgb24oKSBldmVu
dCAiJyArIGV2ZW50TmFtZSArICciIGJlY2F1c2UgaXQgZG9lcyBub3QgZXhpc3QnKTsKKyAgICAg
IH0KKyAgICB9LAorCisgICAgb2ZmOiBmdW5jdGlvbiAoZXZlbnROYW1lLCBjYWxsYmFjaykgewor
ICAgICAgaWYgKGV2ZW50TmFtZSkgeworICAgICAgICB2YXIgY2FsbGJhY2tzID0gdGhpcy5fZXZl
bnRDYWxsYmFja3NbZXZlbnROYW1lXTsKKyAgICAgICAgdmFyIGNhbGxiYWNrRm91bmQgPSBmYWxz
ZTsKKyAgICAgICAgaWYgKCFjYWxsYmFja3MpIHJldHVybjsKKyAgICAgICAgaWYgKGNhbGxiYWNr
KSB7CisgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgICAgIGlmIChjYWxsYmFja3NbaV0gPT09IGNhbGxiYWNrKSB7CisgICAgICAg
ICAgICAgIGNhbGxiYWNrRm91bmQgPSB0cnVlOworICAgICAgICAgICAgICBjYWxsYmFja3Muc3Bs
aWNlKGksIDEpOworICAgICAgICAgICAgICBpLS07CisgICAgICAgICAgICB9CisgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGlmICghY2FsbGJhY2tGb3VuZCkgeworICAgICAgICAgIHRo
cm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBvZmYoKSBjYWxsYmFjayB0aGF0IGRvZXMgbm90IGV4
aXN0Jyk7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHRocm93IG5ldyBUeXBl
RXJyb3IoJ0Nhbm5vdCBvZmYoKSBldmVudCAiJyArIGV2ZW50TmFtZSArICciIGJlY2F1c2UgaXQg
ZG9lcyBub3QgZXhpc3QnKTsKKyAgICAgIH0KKyAgICB9LAorCisgICAgcnVuOiBmdW5jdGlvbiAo
KSAvKiB0YXJnZXQsIG1ldGhvZCwgYXJncyAqL3sKKyAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVu
dHMubGVuZ3RoOworICAgICAgdmFyIG1ldGhvZCwgdGFyZ2V0LCBhcmdzOworCisgICAgICBpZiAo
bGVuZ3RoID09PSAxKSB7CisgICAgICAgIG1ldGhvZCA9IGFyZ3VtZW50c1swXTsKKyAgICAgICAg
dGFyZ2V0ID0gbnVsbDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHRhcmdldCA9IGFyZ3VtZW50
c1swXTsKKyAgICAgICAgbWV0aG9kID0gYXJndW1lbnRzWzFdOworICAgICAgfQorCisgICAgICBp
ZiAoX2JhY2tidXJuZXJVdGlscy5pc1N0cmluZyhtZXRob2QpKSB7CisgICAgICAgIG1ldGhvZCA9
IHRhcmdldFttZXRob2RdOworICAgICAgfQorCisgICAgICBpZiAobGVuZ3RoID4gMikgeworICAg
ICAgICBhcmdzID0gbmV3IEFycmF5KGxlbmd0aCAtIDIpOworICAgICAgICBmb3IgKHZhciBpID0g
MCwgbCA9IGxlbmd0aCAtIDI7IGkgPCBsOyBpKyspIHsKKyAgICAgICAgICBhcmdzW2ldID0gYXJn
dW1lbnRzW2kgKyAyXTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgYXJncyA9
IFtdOworICAgICAgfQorCisgICAgICB2YXIgb25FcnJvciA9IGdldE9uRXJyb3IodGhpcy5vcHRp
b25zKTsKKworICAgICAgdGhpcy5iZWdpbigpOworCisgICAgICAvLyBndWFyZCBhZ2FpbnN0IFNh
ZmFyaSA2J3MgZG91YmxlLWZpbmFsbHkgYnVnCisgICAgICB2YXIgZGlkRmluYWxseSA9IGZhbHNl
OworCisgICAgICBpZiAob25FcnJvcikgeworICAgICAgICB0cnkgeworICAgICAgICAgIHJldHVy
biBtZXRob2QuYXBwbHkodGFyZ2V0LCBhcmdzKTsKKyAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsK
KyAgICAgICAgICBvbkVycm9yKGVycm9yKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAg
ICBpZiAoIWRpZEZpbmFsbHkpIHsKKyAgICAgICAgICAgIGRpZEZpbmFsbHkgPSB0cnVlOworICAg
ICAgICAgICAgdGhpcy5lbmQoKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0gZWxz
ZSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgcmV0dXJuIG1ldGhvZC5hcHBseSh0YXJnZXQs
IGFyZ3MpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgIGlmICghZGlkRmluYWxseSkg
eworICAgICAgICAgICAgZGlkRmluYWxseSA9IHRydWU7CisgICAgICAgICAgICB0aGlzLmVuZCgp
OworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisKKyAgICAvKgorICAg
ICAgSm9pbiB0aGUgcGFzc2VkIG1ldGhvZCB3aXRoIGFuIGV4aXN0aW5nIHF1ZXVlIGFuZCBleGVj
dXRlIGltbWVkaWF0ZWx5LAorICAgICAgaWYgdGhlcmUgaXNuJ3Qgb25lIHVzZSBgQmFja2J1cm5l
ciNydW5gLgorICAgICAgIFRoZSBqb2luIG1ldGhvZCBpcyBsaWtlIHRoZSBydW4gbWV0aG9kIGV4
Y2VwdCB0aGF0IGl0IHdpbGwgc2NoZWR1bGUgaW50bworICAgICAgYW4gZXhpc3RpbmcgcXVldWUg
aWYgb25lIGFscmVhZHkgZXhpc3RzLiBJbiBlaXRoZXIgY2FzZSwgdGhlIGpvaW4gbWV0aG9kIHdp
bGwKKyAgICAgIGltbWVkaWF0ZWx5IGV4ZWN1dGUgdGhlIHBhc3NlZCBpbiBmdW5jdGlvbiBhbmQg
cmV0dXJuIGl0cyByZXN1bHQuCisgICAgICAgQG1ldGhvZCBqb2luCisgICAgICBAcGFyYW0ge09i
amVjdH0gdGFyZ2V0CisgICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBtZXRob2QgVGhlIG1ldGhvZCB0
byBiZSBleGVjdXRlZAorICAgICAgQHBhcmFtIHthbnl9IGFyZ3MgVGhlIG1ldGhvZCBhcmd1bWVu
dHMKKyAgICAgIEByZXR1cm4gbWV0aG9kIHJlc3VsdAorICAgICovCisgICAgam9pbjogZnVuY3Rp
b24gKCkgLyogdGFyZ2V0LCBtZXRob2QsIGFyZ3MgKi97CisgICAgICBpZiAoIXRoaXMuY3VycmVu
dEluc3RhbmNlKSB7CisgICAgICAgIHJldHVybiB0aGlzLnJ1bi5hcHBseSh0aGlzLCBhcmd1bWVu
dHMpOworICAgICAgfQorCisgICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsKKyAg
ICAgIHZhciBtZXRob2QsIHRhcmdldDsKKworICAgICAgaWYgKGxlbmd0aCA9PT0gMSkgeworICAg
ICAgICBtZXRob2QgPSBhcmd1bWVudHNbMF07CisgICAgICAgIHRhcmdldCA9IG51bGw7CisgICAg
ICB9IGVsc2UgeworICAgICAgICB0YXJnZXQgPSBhcmd1bWVudHNbMF07CisgICAgICAgIG1ldGhv
ZCA9IGFyZ3VtZW50c1sxXTsKKyAgICAgIH0KKworICAgICAgaWYgKF9iYWNrYnVybmVyVXRpbHMu
aXNTdHJpbmcobWV0aG9kKSkgeworICAgICAgICBtZXRob2QgPSB0YXJnZXRbbWV0aG9kXTsKKyAg
ICAgIH0KKworICAgICAgaWYgKGxlbmd0aCA9PT0gMSkgeworICAgICAgICByZXR1cm4gbWV0aG9k
KCk7CisgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gMikgeworICAgICAgICByZXR1cm4gbWV0
aG9kLmNhbGwodGFyZ2V0KTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHZhciBhcmdzID0gbmV3
IEFycmF5KGxlbmd0aCAtIDIpOworICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGxlbmd0aCAt
IDI7IGkgPCBsOyBpKyspIHsKKyAgICAgICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2kgKyAyXTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gbWV0aG9kLmFwcGx5KHRhcmdldCwgYXJncyk7Cisg
ICAgICB9CisgICAgfSwKKworICAgIC8qCisgICAgICBEZWZlciB0aGUgcGFzc2VkIGZ1bmN0aW9u
IHRvIHJ1biBpbnNpZGUgdGhlIHNwZWNpZmllZCBxdWV1ZS4KKyAgICAgICBAbWV0aG9kIGRlZmVy
CisgICAgICBAcGFyYW0ge1N0cmluZ30gcXVldWVOYW1lCisgICAgICBAcGFyYW0ge09iamVjdH0g
dGFyZ2V0CisgICAgICBAcGFyYW0ge0Z1bmN0aW9ufFN0cmluZ30gbWV0aG9kIFRoZSBtZXRob2Qg
b3IgbWV0aG9kIG5hbWUgdG8gYmUgZXhlY3V0ZWQKKyAgICAgIEBwYXJhbSB7YW55fSBhcmdzIFRo
ZSBtZXRob2QgYXJndW1lbnRzCisgICAgICBAcmV0dXJuIG1ldGhvZCByZXN1bHQKKyAgICAqLwor
ICAgIGRlZmVyOiBmdW5jdGlvbiAocXVldWVOYW1lIC8qICwgdGFyZ2V0LCBtZXRob2QsIGFyZ3Mg
Ki8pIHsKKyAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOworICAgICAgdmFyIG1l
dGhvZCwgdGFyZ2V0LCBhcmdzOworCisgICAgICBpZiAobGVuZ3RoID09PSAyKSB7CisgICAgICAg
IG1ldGhvZCA9IGFyZ3VtZW50c1sxXTsKKyAgICAgICAgdGFyZ2V0ID0gbnVsbDsKKyAgICAgIH0g
ZWxzZSB7CisgICAgICAgIHRhcmdldCA9IGFyZ3VtZW50c1sxXTsKKyAgICAgICAgbWV0aG9kID0g
YXJndW1lbnRzWzJdOworICAgICAgfQorCisgICAgICBpZiAoX2JhY2tidXJuZXJVdGlscy5pc1N0
cmluZyhtZXRob2QpKSB7CisgICAgICAgIG1ldGhvZCA9IHRhcmdldFttZXRob2RdOworICAgICAg
fQorCisgICAgICB2YXIgc3RhY2sgPSB0aGlzLkRFQlVHID8gbmV3IEVycm9yKCkgOiB1bmRlZmlu
ZWQ7CisKKyAgICAgIGlmIChsZW5ndGggPiAzKSB7CisgICAgICAgIGFyZ3MgPSBuZXcgQXJyYXko
bGVuZ3RoIC0gMyk7CisgICAgICAgIGZvciAodmFyIGkgPSAzOyBpIDwgbGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgICBhcmdzW2kgLSAzXSA9IGFyZ3VtZW50c1tpXTsKKyAgICAgICAgfQorICAgICAg
fSBlbHNlIHsKKyAgICAgICAgYXJncyA9IHVuZGVmaW5lZDsKKyAgICAgIH0KKworICAgICAgaWYg
KCF0aGlzLmN1cnJlbnRJbnN0YW5jZSkgeworICAgICAgICBjcmVhdGVBdXRvcnVuKHRoaXMpOwor
ICAgICAgfQorICAgICAgcmV0dXJuIHRoaXMuY3VycmVudEluc3RhbmNlLnNjaGVkdWxlKHF1ZXVl
TmFtZSwgdGFyZ2V0LCBtZXRob2QsIGFyZ3MsIGZhbHNlLCBzdGFjayk7CisgICAgfSwKKworICAg
IGRlZmVyT25jZTogZnVuY3Rpb24gKHF1ZXVlTmFtZSAvKiAsIHRhcmdldCwgbWV0aG9kLCBhcmdz
ICovKSB7CisgICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsKKyAgICAgIHZhciBt
ZXRob2QsIHRhcmdldCwgYXJnczsKKworICAgICAgaWYgKGxlbmd0aCA9PT0gMikgeworICAgICAg
ICBtZXRob2QgPSBhcmd1bWVudHNbMV07CisgICAgICAgIHRhcmdldCA9IG51bGw7CisgICAgICB9
IGVsc2UgeworICAgICAgICB0YXJnZXQgPSBhcmd1bWVudHNbMV07CisgICAgICAgIG1ldGhvZCA9
IGFyZ3VtZW50c1syXTsKKyAgICAgIH0KKworICAgICAgaWYgKF9iYWNrYnVybmVyVXRpbHMuaXNT
dHJpbmcobWV0aG9kKSkgeworICAgICAgICBtZXRob2QgPSB0YXJnZXRbbWV0aG9kXTsKKyAgICAg
IH0KKworICAgICAgdmFyIHN0YWNrID0gdGhpcy5ERUJVRyA/IG5ldyBFcnJvcigpIDogdW5kZWZp
bmVkOworCisgICAgICBpZiAobGVuZ3RoID4gMykgeworICAgICAgICBhcmdzID0gbmV3IEFycmF5
KGxlbmd0aCAtIDMpOworICAgICAgICBmb3IgKHZhciBpID0gMzsgaSA8IGxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgYXJnc1tpIC0gM10gPSBhcmd1bWVudHNbaV07CisgICAgICAgIH0KKyAgICAg
IH0gZWxzZSB7CisgICAgICAgIGFyZ3MgPSB1bmRlZmluZWQ7CisgICAgICB9CisKKyAgICAgIGlm
ICghdGhpcy5jdXJyZW50SW5zdGFuY2UpIHsKKyAgICAgICAgY3JlYXRlQXV0b3J1bih0aGlzKTsK
KyAgICAgIH0KKyAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRJbnN0YW5jZS5zY2hlZHVsZShxdWV1
ZU5hbWUsIHRhcmdldCwgbWV0aG9kLCBhcmdzLCB0cnVlLCBzdGFjayk7CisgICAgfSwKKworICAg
IHNldFRpbWVvdXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciBsID0gYXJndW1lbnRzLmxlbmd0
aDsKKyAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGwpOworCisgICAgICBmb3IgKHZhciB4ID0g
MDsgeCA8IGw7IHgrKykgeworICAgICAgICBhcmdzW3hdID0gYXJndW1lbnRzW3hdOworICAgICAg
fQorCisgICAgICB2YXIgbGVuZ3RoID0gYXJncy5sZW5ndGgsCisgICAgICAgICAgbWV0aG9kLAor
ICAgICAgICAgIHdhaXQsCisgICAgICAgICAgdGFyZ2V0LAorICAgICAgICAgIG1ldGhvZE9yVGFy
Z2V0LAorICAgICAgICAgIG1ldGhvZE9yV2FpdCwKKyAgICAgICAgICBtZXRob2RPckFyZ3M7CisK
KyAgICAgIGlmIChsZW5ndGggPT09IDApIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfSBlbHNl
IGlmIChsZW5ndGggPT09IDEpIHsKKyAgICAgICAgbWV0aG9kID0gYXJncy5zaGlmdCgpOworICAg
ICAgICB3YWl0ID0gMDsKKyAgICAgIH0gZWxzZSBpZiAobGVuZ3RoID09PSAyKSB7CisgICAgICAg
IG1ldGhvZE9yVGFyZ2V0ID0gYXJnc1swXTsKKyAgICAgICAgbWV0aG9kT3JXYWl0ID0gYXJnc1sx
XTsKKworICAgICAgICBpZiAoX2JhY2tidXJuZXJVdGlscy5pc0Z1bmN0aW9uKG1ldGhvZE9yV2Fp
dCkgfHwgX2JhY2tidXJuZXJVdGlscy5pc0Z1bmN0aW9uKG1ldGhvZE9yVGFyZ2V0W21ldGhvZE9y
V2FpdF0pKSB7CisgICAgICAgICAgdGFyZ2V0ID0gYXJncy5zaGlmdCgpOworICAgICAgICAgIG1l
dGhvZCA9IGFyZ3Muc2hpZnQoKTsKKyAgICAgICAgICB3YWl0ID0gMDsKKyAgICAgICAgfSBlbHNl
IGlmIChfYmFja2J1cm5lclV0aWxzLmlzQ29lcmNhYmxlTnVtYmVyKG1ldGhvZE9yV2FpdCkpIHsK
KyAgICAgICAgICBtZXRob2QgPSBhcmdzLnNoaWZ0KCk7CisgICAgICAgICAgd2FpdCA9IGFyZ3Mu
c2hpZnQoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBtZXRob2QgPSBhcmdzLnNoaWZ0
KCk7CisgICAgICAgICAgd2FpdCA9IDA7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAg
ICAgIHZhciBsYXN0ID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdOworCisgICAgICAgIGlmIChfYmFj
a2J1cm5lclV0aWxzLmlzQ29lcmNhYmxlTnVtYmVyKGxhc3QpKSB7CisgICAgICAgICAgd2FpdCA9
IGFyZ3MucG9wKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgd2FpdCA9IDA7CisgICAg
ICAgIH0KKworICAgICAgICBtZXRob2RPclRhcmdldCA9IGFyZ3NbMF07CisgICAgICAgIG1ldGhv
ZE9yQXJncyA9IGFyZ3NbMV07CisKKyAgICAgICAgaWYgKF9iYWNrYnVybmVyVXRpbHMuaXNGdW5j
dGlvbihtZXRob2RPckFyZ3MpIHx8IF9iYWNrYnVybmVyVXRpbHMuaXNTdHJpbmcobWV0aG9kT3JB
cmdzKSAmJiBtZXRob2RPclRhcmdldCAhPT0gbnVsbCAmJiBtZXRob2RPckFyZ3MgaW4gbWV0aG9k
T3JUYXJnZXQpIHsKKyAgICAgICAgICB0YXJnZXQgPSBhcmdzLnNoaWZ0KCk7CisgICAgICAgICAg
bWV0aG9kID0gYXJncy5zaGlmdCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIG1ldGhv
ZCA9IGFyZ3Muc2hpZnQoKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICB2YXIgZXhlY3V0
ZUF0ID0gRGF0ZS5ub3coKSArIHBhcnNlSW50KHdhaXQgIT09IHdhaXQgPyAwIDogd2FpdCwgMTAp
OworCisgICAgICBpZiAoX2JhY2tidXJuZXJVdGlscy5pc1N0cmluZyhtZXRob2QpKSB7CisgICAg
ICAgIG1ldGhvZCA9IHRhcmdldFttZXRob2RdOworICAgICAgfQorCisgICAgICB2YXIgb25FcnJv
ciA9IGdldE9uRXJyb3IodGhpcy5vcHRpb25zKTsKKworICAgICAgZnVuY3Rpb24gZm4oKSB7Cisg
ICAgICAgIGlmIChvbkVycm9yKSB7CisgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIG1ldGhv
ZC5hcHBseSh0YXJnZXQsIGFyZ3MpOworICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAg
ICAgIG9uRXJyb3IoZSk7CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAg
IG1ldGhvZC5hcHBseSh0YXJnZXQsIGFyZ3MpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAg
IHJldHVybiB0aGlzLl9zZXRUaW1lb3V0KGZuLCBleGVjdXRlQXQpOworICAgIH0sCisKKyAgICBf
c2V0VGltZW91dDogZnVuY3Rpb24gKGZuLCBleGVjdXRlQXQpIHsKKyAgICAgIGlmICh0aGlzLl90
aW1lcnMubGVuZ3RoID09PSAwKSB7CisgICAgICAgIHRoaXMuX3RpbWVycy5wdXNoKGV4ZWN1dGVB
dCwgZm4pOworICAgICAgICB0aGlzLl9pbnN0YWxsVGltZXJUaW1lb3V0KCk7CisgICAgICAgIHJl
dHVybiBmbjsKKyAgICAgIH0KKworICAgICAgLy8gZmluZCBwb3NpdGlvbiB0byBpbnNlcnQKKyAg
ICAgIHZhciBpID0gX2JhY2tidXJuZXJCaW5hcnlTZWFyY2guZGVmYXVsdChleGVjdXRlQXQsIHRo
aXMuX3RpbWVycyk7CisKKyAgICAgIHRoaXMuX3RpbWVycy5zcGxpY2UoaSwgMCwgZXhlY3V0ZUF0
LCBmbik7CisKKyAgICAgIC8vIHdlIHNob3VsZCBiZSB0aGUgbmV3IGVhcmxpZXN0IHRpbWVyIGlm
IGkgPT0gMAorICAgICAgaWYgKGkgPT09IDApIHsKKyAgICAgICAgdGhpcy5fcmVpbnN0YWxsVGlt
ZXJUaW1lb3V0KCk7CisgICAgICB9CisKKyAgICAgIHJldHVybiBmbjsKKyAgICB9LAorCisgICAg
dGhyb3R0bGU6IGZ1bmN0aW9uICh0YXJnZXQsIG1ldGhvZCAvKiAsIGFyZ3MsIHdhaXQsIFtpbW1l
ZGlhdGVdICovKSB7CisgICAgICB2YXIgYmFja2J1cm5lciA9IHRoaXM7CisgICAgICB2YXIgYXJn
cyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNb
aV07CisgICAgICB9CisgICAgICB2YXIgaW1tZWRpYXRlID0gYXJncy5wb3AoKTsKKyAgICAgIHZh
ciB3YWl0LCB0aHJvdHRsZXIsIGluZGV4LCB0aW1lcjsKKworICAgICAgaWYgKF9iYWNrYnVybmVy
VXRpbHMuaXNOdW1iZXIoaW1tZWRpYXRlKSB8fCBfYmFja2J1cm5lclV0aWxzLmlzU3RyaW5nKGlt
bWVkaWF0ZSkpIHsKKyAgICAgICAgd2FpdCA9IGltbWVkaWF0ZTsKKyAgICAgICAgaW1tZWRpYXRl
ID0gdHJ1ZTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHdhaXQgPSBhcmdzLnBvcCgpOworICAg
ICAgfQorCisgICAgICB3YWl0ID0gcGFyc2VJbnQod2FpdCwgMTApOworCisgICAgICBpbmRleCA9
IGZpbmRUaHJvdHRsZXIodGFyZ2V0LCBtZXRob2QsIHRoaXMuX3Rocm90dGxlcnMpOworICAgICAg
aWYgKGluZGV4ID4gLTEpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Rocm90dGxlcnNbaW5kZXhd
OworICAgICAgfSAvLyB0aHJvdHRsZWQKKworICAgICAgdGltZXIgPSB0aGlzLl9wbGF0Zm9ybS5z
ZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCFpbW1lZGlhdGUpIHsKKyAgICAg
ICAgICBiYWNrYnVybmVyLnJ1bi5hcHBseShiYWNrYnVybmVyLCBhcmdzKTsKKyAgICAgICAgfQor
ICAgICAgICB2YXIgaW5kZXggPSBmaW5kVGhyb3R0bGVyKHRhcmdldCwgbWV0aG9kLCBiYWNrYnVy
bmVyLl90aHJvdHRsZXJzKTsKKyAgICAgICAgaWYgKGluZGV4ID4gLTEpIHsKKyAgICAgICAgICBi
YWNrYnVybmVyLl90aHJvdHRsZXJzLnNwbGljZShpbmRleCwgMSk7CisgICAgICAgIH0KKyAgICAg
IH0sIHdhaXQpOworCisgICAgICBpZiAoaW1tZWRpYXRlKSB7CisgICAgICAgIHRoaXMucnVuLmFw
cGx5KHRoaXMsIGFyZ3MpOworICAgICAgfQorCisgICAgICB0aHJvdHRsZXIgPSBbdGFyZ2V0LCBt
ZXRob2QsIHRpbWVyXTsKKworICAgICAgdGhpcy5fdGhyb3R0bGVycy5wdXNoKHRocm90dGxlcik7
CisKKyAgICAgIHJldHVybiB0aHJvdHRsZXI7CisgICAgfSwKKworICAgIGRlYm91bmNlOiBmdW5j
dGlvbiAodGFyZ2V0LCBtZXRob2QgLyogLCBhcmdzLCB3YWl0LCBbaW1tZWRpYXRlXSAqLykgewor
ICAgICAgdmFyIGJhY2tidXJuZXIgPSB0aGlzOworICAgICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXko
YXJndW1lbnRzLmxlbmd0aCk7CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5s
ZW5ndGg7IGkrKykgeworICAgICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2ldOworICAgICAgfQor
CisgICAgICB2YXIgaW1tZWRpYXRlID0gYXJncy5wb3AoKTsKKyAgICAgIHZhciB3YWl0LCBpbmRl
eCwgZGVib3VuY2VlLCB0aW1lcjsKKworICAgICAgaWYgKF9iYWNrYnVybmVyVXRpbHMuaXNOdW1i
ZXIoaW1tZWRpYXRlKSB8fCBfYmFja2J1cm5lclV0aWxzLmlzU3RyaW5nKGltbWVkaWF0ZSkpIHsK
KyAgICAgICAgd2FpdCA9IGltbWVkaWF0ZTsKKyAgICAgICAgaW1tZWRpYXRlID0gZmFsc2U7Cisg
ICAgICB9IGVsc2UgeworICAgICAgICB3YWl0ID0gYXJncy5wb3AoKTsKKyAgICAgIH0KKworICAg
ICAgd2FpdCA9IHBhcnNlSW50KHdhaXQsIDEwKTsKKyAgICAgIC8vIFJlbW92ZSBkZWJvdW5jZWUK
KyAgICAgIGluZGV4ID0gZmluZERlYm91bmNlZSh0YXJnZXQsIG1ldGhvZCwgdGhpcy5fZGVib3Vu
Y2Vlcyk7CisKKyAgICAgIGlmIChpbmRleCA+IC0xKSB7CisgICAgICAgIGRlYm91bmNlZSA9IHRo
aXMuX2RlYm91bmNlZXNbaW5kZXhdOworICAgICAgICB0aGlzLl9kZWJvdW5jZWVzLnNwbGljZShp
bmRleCwgMSk7CisgICAgICAgIHRoaXMuX3BsYXRmb3JtLmNsZWFyVGltZW91dChkZWJvdW5jZWVb
Ml0pOworICAgICAgfQorCisgICAgICB0aW1lciA9IHRoaXMuX3BsYXRmb3JtLnNldFRpbWVvdXQo
ZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoIWltbWVkaWF0ZSkgeworICAgICAgICAgIGJhY2ti
dXJuZXIucnVuLmFwcGx5KGJhY2tidXJuZXIsIGFyZ3MpOworICAgICAgICB9CisgICAgICAgIHZh
ciBpbmRleCA9IGZpbmREZWJvdW5jZWUodGFyZ2V0LCBtZXRob2QsIGJhY2tidXJuZXIuX2RlYm91
bmNlZXMpOworICAgICAgICBpZiAoaW5kZXggPiAtMSkgeworICAgICAgICAgIGJhY2tidXJuZXIu
X2RlYm91bmNlZXMuc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgICAgfQorICAgICAgfSwgd2FpdCk7
CisKKyAgICAgIGlmIChpbW1lZGlhdGUgJiYgaW5kZXggPT09IC0xKSB7CisgICAgICAgIGJhY2ti
dXJuZXIucnVuLmFwcGx5KGJhY2tidXJuZXIsIGFyZ3MpOworICAgICAgfQorCisgICAgICBkZWJv
dW5jZWUgPSBbdGFyZ2V0LCBtZXRob2QsIHRpbWVyXTsKKworICAgICAgYmFja2J1cm5lci5fZGVi
b3VuY2Vlcy5wdXNoKGRlYm91bmNlZSk7CisKKyAgICAgIHJldHVybiBkZWJvdW5jZWU7CisgICAg
fSwKKworICAgIGNhbmNlbFRpbWVyczogZnVuY3Rpb24gKCkgeworICAgICAgX2JhY2tidXJuZXJV
dGlscy5lYWNoKHRoaXMuX3Rocm90dGxlcnMsIHRoaXMuX2JvdW5kQ2xlYXJJdGVtcyk7CisgICAg
ICB0aGlzLl90aHJvdHRsZXJzID0gW107CisKKyAgICAgIF9iYWNrYnVybmVyVXRpbHMuZWFjaCh0
aGlzLl9kZWJvdW5jZWVzLCB0aGlzLl9ib3VuZENsZWFySXRlbXMpOworICAgICAgdGhpcy5fZGVi
b3VuY2VlcyA9IFtdOworCisgICAgICB0aGlzLl9jbGVhclRpbWVyVGltZW91dCgpOworICAgICAg
dGhpcy5fdGltZXJzID0gW107CisKKyAgICAgIGlmICh0aGlzLl9hdXRvcnVuKSB7CisgICAgICAg
IHRoaXMuX3BsYXRmb3JtLmNsZWFyVGltZW91dCh0aGlzLl9hdXRvcnVuKTsKKyAgICAgICAgdGhp
cy5fYXV0b3J1biA9IG51bGw7CisgICAgICB9CisgICAgfSwKKworICAgIGhhc1RpbWVyczogZnVu
Y3Rpb24gKCkgeworICAgICAgcmV0dXJuICEhdGhpcy5fdGltZXJzLmxlbmd0aCB8fCAhIXRoaXMu
X2RlYm91bmNlZXMubGVuZ3RoIHx8ICEhdGhpcy5fdGhyb3R0bGVycy5sZW5ndGggfHwgdGhpcy5f
YXV0b3J1bjsKKyAgICB9LAorCisgICAgY2FuY2VsOiBmdW5jdGlvbiAodGltZXIpIHsKKyAgICAg
IHZhciB0aW1lclR5cGUgPSB0eXBlb2YgdGltZXI7CisKKyAgICAgIGlmICh0aW1lciAmJiB0aW1l
clR5cGUgPT09ICdvYmplY3QnICYmIHRpbWVyLnF1ZXVlICYmIHRpbWVyLm1ldGhvZCkgeworICAg
ICAgICAvLyB3ZSdyZSBjYW5jZWxsaW5nIGEgZGVmZXJPbmNlCisgICAgICAgIHJldHVybiB0aW1l
ci5xdWV1ZS5jYW5jZWwodGltZXIpOworICAgICAgfSBlbHNlIGlmICh0aW1lclR5cGUgPT09ICdm
dW5jdGlvbicpIHsKKyAgICAgICAgLy8gd2UncmUgY2FuY2VsbGluZyBhIHNldFRpbWVvdXQKKyAg
ICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLl90aW1lcnMubGVuZ3RoOyBpIDwgbDsgaSAr
PSAyKSB7CisgICAgICAgICAgaWYgKHRoaXMuX3RpbWVyc1tpICsgMV0gPT09IHRpbWVyKSB7Cisg
ICAgICAgICAgICB0aGlzLl90aW1lcnMuc3BsaWNlKGksIDIpOyAvLyByZW1vdmUgdGhlIHR3byBl
bGVtZW50cworICAgICAgICAgICAgaWYgKGkgPT09IDApIHsKKyAgICAgICAgICAgICAgdGhpcy5f
cmVpbnN0YWxsVGltZXJUaW1lb3V0KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSBpZiAoT2JqZWN0
LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRpbWVyKSA9PT0gJ1tvYmplY3QgQXJyYXldJykgewor
ICAgICAgICAvLyB3ZSdyZSBjYW5jZWxsaW5nIGEgdGhyb3R0bGUgb3IgZGVib3VuY2UKKyAgICAg
ICAgcmV0dXJuIHRoaXMuX2NhbmNlbEl0ZW0oZmluZFRocm90dGxlciwgdGhpcy5fdGhyb3R0bGVy
cywgdGltZXIpIHx8IHRoaXMuX2NhbmNlbEl0ZW0oZmluZERlYm91bmNlZSwgdGhpcy5fZGVib3Vu
Y2VlcywgdGltZXIpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuOyAvLyB0aW1lciB3
YXMgbnVsbCBvciBub3QgYSB0aW1lcgorICAgICAgfQorICAgIH0sCisKKyAgICBfY2FuY2VsSXRl
bTogZnVuY3Rpb24gKGZpbmRNZXRob2QsIGFycmF5LCB0aW1lcikgeworICAgICAgdmFyIGl0ZW0s
IGluZGV4OworCisgICAgICBpZiAodGltZXIubGVuZ3RoIDwgMykgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICB9CisKKyAgICAgIGluZGV4ID0gZmluZE1ldGhvZCh0aW1lclswXSwgdGlt
ZXJbMV0sIGFycmF5KTsKKworICAgICAgaWYgKGluZGV4ID4gLTEpIHsKKworICAgICAgICBpdGVt
ID0gYXJyYXlbaW5kZXhdOworCisgICAgICAgIGlmIChpdGVtWzJdID09PSB0aW1lclsyXSkgewor
ICAgICAgICAgIGFycmF5LnNwbGljZShpbmRleCwgMSk7CisgICAgICAgICAgdGhpcy5fcGxhdGZv
cm0uY2xlYXJUaW1lb3V0KHRpbWVyWzJdKTsKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgfQorCisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSwKKworICAgIF9ydW5F
eHBpcmVkVGltZXJzOiBmdW5jdGlvbiAoKSB7CisgICAgICB0aGlzLl90aW1lclRpbWVvdXRJZCA9
IHVuZGVmaW5lZDsKKyAgICAgIHRoaXMucnVuKHRoaXMsIHRoaXMuX3NjaGVkdWxlRXhwaXJlZFRp
bWVycyk7CisgICAgfSwKKworICAgIF9zY2hlZHVsZUV4cGlyZWRUaW1lcnM6IGZ1bmN0aW9uICgp
IHsKKyAgICAgIHZhciBuID0gRGF0ZS5ub3coKTsKKyAgICAgIHZhciB0aW1lcnMgPSB0aGlzLl90
aW1lcnM7CisgICAgICB2YXIgaSA9IDA7CisgICAgICB2YXIgbCA9IHRpbWVycy5sZW5ndGg7Cisg
ICAgICBmb3IgKDsgaSA8IGw7IGkgKz0gMikgeworICAgICAgICB2YXIgZXhlY3V0ZUF0ID0gdGlt
ZXJzW2ldOworICAgICAgICB2YXIgZm4gPSB0aW1lcnNbaSArIDFdOworICAgICAgICBpZiAoZXhl
Y3V0ZUF0IDw9IG4pIHsKKyAgICAgICAgICB0aGlzLnNjaGVkdWxlKHRoaXMub3B0aW9ucy5kZWZh
dWx0UXVldWUsIG51bGwsIGZuKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgfQorICAgICAgdGltZXJzLnNwbGljZSgwLCBpKTsKKyAgICAgIHRo
aXMuX2luc3RhbGxUaW1lclRpbWVvdXQoKTsKKyAgICB9LAorCisgICAgX3JlaW5zdGFsbFRpbWVy
VGltZW91dDogZnVuY3Rpb24gKCkgeworICAgICAgdGhpcy5fY2xlYXJUaW1lclRpbWVvdXQoKTsK
KyAgICAgIHRoaXMuX2luc3RhbGxUaW1lclRpbWVvdXQoKTsKKyAgICB9LAorCisgICAgX2NsZWFy
VGltZXJUaW1lb3V0OiBmdW5jdGlvbiAoKSB7CisgICAgICBpZiAoIXRoaXMuX3RpbWVyVGltZW91
dElkKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIHRoaXMuX3BsYXRmb3JtLmNs
ZWFyVGltZW91dCh0aGlzLl90aW1lclRpbWVvdXRJZCk7CisgICAgICB0aGlzLl90aW1lclRpbWVv
dXRJZCA9IHVuZGVmaW5lZDsKKyAgICB9LAorCisgICAgX2luc3RhbGxUaW1lclRpbWVvdXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgIGlmICghdGhpcy5fdGltZXJzLmxlbmd0aCkgeworICAgICAgICBy
ZXR1cm47CisgICAgICB9CisgICAgICB2YXIgbWluRXhwaXJlc0F0ID0gdGhpcy5fdGltZXJzWzBd
OworICAgICAgdmFyIG4gPSBEYXRlLm5vdygpOworICAgICAgdmFyIHdhaXQgPSBNYXRoLm1heCgw
LCBtaW5FeHBpcmVzQXQgLSBuKTsKKyAgICAgIHRoaXMuX3RpbWVyVGltZW91dElkID0gdGhpcy5f
cGxhdGZvcm0uc2V0VGltZW91dCh0aGlzLl9ib3VuZFJ1bkV4cGlyZWRUaW1lcnMsIHdhaXQpOwor
ICAgIH0KKyAgfTsKKworICBCYWNrYnVybmVyLnByb3RvdHlwZS5zY2hlZHVsZSA9IEJhY2tidXJu
ZXIucHJvdG90eXBlLmRlZmVyOworICBCYWNrYnVybmVyLnByb3RvdHlwZS5zY2hlZHVsZU9uY2Ug
PSBCYWNrYnVybmVyLnByb3RvdHlwZS5kZWZlck9uY2U7CisgIEJhY2tidXJuZXIucHJvdG90eXBl
LmxhdGVyID0gQmFja2J1cm5lci5wcm90b3R5cGUuc2V0VGltZW91dDsKKworICBmdW5jdGlvbiBn
ZXRPbkVycm9yKG9wdGlvbnMpIHsKKyAgICByZXR1cm4gb3B0aW9ucy5vbkVycm9yIHx8IG9wdGlv
bnMub25FcnJvclRhcmdldCAmJiBvcHRpb25zLm9uRXJyb3JUYXJnZXRbb3B0aW9ucy5vbkVycm9y
TWV0aG9kXTsKKyAgfQorCisgIGZ1bmN0aW9uIGNyZWF0ZUF1dG9ydW4oYmFja2J1cm5lcikgewor
ICAgIGJhY2tidXJuZXIuYmVnaW4oKTsKKyAgICBiYWNrYnVybmVyLl9hdXRvcnVuID0gYmFja2J1
cm5lci5fcGxhdGZvcm0uc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CisgICAgICBiYWNrYnVybmVy
Ll9hdXRvcnVuID0gbnVsbDsKKyAgICAgIGJhY2tidXJuZXIuZW5kKCk7CisgICAgfSk7CisgIH0K
KworICBmdW5jdGlvbiBmaW5kRGVib3VuY2VlKHRhcmdldCwgbWV0aG9kLCBkZWJvdW5jZWVzKSB7
CisgICAgcmV0dXJuIGZpbmRJdGVtKHRhcmdldCwgbWV0aG9kLCBkZWJvdW5jZWVzKTsKKyAgfQor
CisgIGZ1bmN0aW9uIGZpbmRUaHJvdHRsZXIodGFyZ2V0LCBtZXRob2QsIHRocm90dGxlcnMpIHsK
KyAgICByZXR1cm4gZmluZEl0ZW0odGFyZ2V0LCBtZXRob2QsIHRocm90dGxlcnMpOworICB9CisK
KyAgZnVuY3Rpb24gZmluZEl0ZW0odGFyZ2V0LCBtZXRob2QsIGNvbGxlY3Rpb24pIHsKKyAgICB2
YXIgaXRlbTsKKyAgICB2YXIgaW5kZXggPSAtMTsKKworICAgIGZvciAodmFyIGkgPSAwLCBsID0g
Y29sbGVjdGlvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHsKKyAgICAgIGl0ZW0gPSBjb2xsZWN0aW9u
W2ldOworICAgICAgaWYgKGl0ZW1bMF0gPT09IHRhcmdldCAmJiBpdGVtWzFdID09PSBtZXRob2Qp
IHsKKyAgICAgICAgaW5kZXggPSBpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gaW5kZXg7CisgIH0KKworICBmdW5jdGlvbiBjbGVhckl0ZW1zKGl0ZW0pIHsK
KyAgICB0aGlzLl9wbGF0Zm9ybS5jbGVhclRpbWVvdXQoaXRlbVsyXSk7CisgIH0KK30pOworZW5p
ZmVkKCJiYWNrYnVybmVyL2JpbmFyeS1zZWFyY2giLCBbImV4cG9ydHMiXSwgZnVuY3Rpb24gKGV4
cG9ydHMpIHsKKyAgInVzZSBzdHJpY3QiOworCisgIGV4cG9ydHMuZGVmYXVsdCA9IGJpbmFyeVNl
YXJjaDsKKworICBmdW5jdGlvbiBiaW5hcnlTZWFyY2godGltZSwgdGltZXJzKSB7CisgICAgdmFy
IHN0YXJ0ID0gMDsKKyAgICB2YXIgZW5kID0gdGltZXJzLmxlbmd0aCAtIDI7CisgICAgdmFyIG1p
ZGRsZSwgbDsKKworICAgIHdoaWxlIChzdGFydCA8IGVuZCkgeworICAgICAgLy8gc2luY2UgdGlt
ZXJzIGlzIGFuIGFycmF5IG9mIHBhaXJzICdsJyB3aWxsIGFsd2F5cworICAgICAgLy8gYmUgYW4g
aW50ZWdlcgorICAgICAgbCA9IChlbmQgLSBzdGFydCkgLyAyOworCisgICAgICAvLyBjb21wZW5z
YXRlIGZvciB0aGUgaW5kZXggaW4gY2FzZSBldmVuIG51bWJlcgorICAgICAgLy8gb2YgcGFpcnMg
aW5zaWRlIHRpbWVycworICAgICAgbWlkZGxlID0gc3RhcnQgKyBsIC0gbCAlIDI7CisKKyAgICAg
IGlmICh0aW1lID49IHRpbWVyc1ttaWRkbGVdKSB7CisgICAgICAgIHN0YXJ0ID0gbWlkZGxlICsg
MjsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGVuZCA9IG1pZGRsZTsKKyAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gdGltZSA+PSB0aW1lcnNbc3RhcnRdID8gc3RhcnQgKyAyIDogc3RhcnQ7
CisgIH0KK30pOworZW5pZmVkKCdiYWNrYnVybmVyL2RlZmVycmVkLWFjdGlvbi1xdWV1ZXMnLCBb
J2V4cG9ydHMnLCAnYmFja2J1cm5lci91dGlscycsICdiYWNrYnVybmVyL3F1ZXVlJ10sIGZ1bmN0
aW9uIChleHBvcnRzLCBfYmFja2J1cm5lclV0aWxzLCBfYmFja2J1cm5lclF1ZXVlKSB7CisgICd1
c2Ugc3RyaWN0JzsKKworICBleHBvcnRzLmRlZmF1bHQgPSBEZWZlcnJlZEFjdGlvblF1ZXVlczsK
KworICBmdW5jdGlvbiBEZWZlcnJlZEFjdGlvblF1ZXVlcyhxdWV1ZU5hbWVzLCBvcHRpb25zKSB7
CisgICAgdmFyIHF1ZXVlcyA9IHRoaXMucXVldWVzID0ge307CisgICAgdGhpcy5xdWV1ZU5hbWVz
ID0gcXVldWVOYW1lcyA9IHF1ZXVlTmFtZXMgfHwgW107CisKKyAgICB0aGlzLm9wdGlvbnMgPSBv
cHRpb25zOworCisgICAgX2JhY2tidXJuZXJVdGlscy5lYWNoKHF1ZXVlTmFtZXMsIGZ1bmN0aW9u
IChxdWV1ZU5hbWUpIHsKKyAgICAgIHF1ZXVlc1txdWV1ZU5hbWVdID0gbmV3IF9iYWNrYnVybmVy
UXVldWUuZGVmYXVsdChxdWV1ZU5hbWUsIG9wdGlvbnNbcXVldWVOYW1lXSwgb3B0aW9ucyk7Cisg
ICAgfSk7CisgIH0KKworICBmdW5jdGlvbiBub1N1Y2hRdWV1ZShuYW1lKSB7CisgICAgdGhyb3cg
bmV3IEVycm9yKCdZb3UgYXR0ZW1wdGVkIHRvIHNjaGVkdWxlIGFuIGFjdGlvbiBpbiBhIHF1ZXVl
ICgnICsgbmFtZSArICcpIHRoYXQgZG9lc25cJ3QgZXhpc3QnKTsKKyAgfQorCisgIGZ1bmN0aW9u
IG5vU3VjaE1ldGhvZChuYW1lKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgYXR0ZW1wdGVk
IHRvIHNjaGVkdWxlIGFuIGFjdGlvbiBpbiBhIHF1ZXVlICgnICsgbmFtZSArICcpIGZvciBhIG1l
dGhvZCB0aGF0IGRvZXNuXCd0IGV4aXN0Jyk7CisgIH0KKworICBEZWZlcnJlZEFjdGlvblF1ZXVl
cy5wcm90b3R5cGUgPSB7CisgICAgc2NoZWR1bGU6IGZ1bmN0aW9uIChuYW1lLCB0YXJnZXQsIG1l
dGhvZCwgYXJncywgb25jZUZsYWcsIHN0YWNrKSB7CisgICAgICB2YXIgcXVldWVzID0gdGhpcy5x
dWV1ZXM7CisgICAgICB2YXIgcXVldWUgPSBxdWV1ZXNbbmFtZV07CisKKyAgICAgIGlmICghcXVl
dWUpIHsKKyAgICAgICAgbm9TdWNoUXVldWUobmFtZSk7CisgICAgICB9CisKKyAgICAgIGlmICgh
bWV0aG9kKSB7CisgICAgICAgIG5vU3VjaE1ldGhvZChuYW1lKTsKKyAgICAgIH0KKworICAgICAg
aWYgKG9uY2VGbGFnKSB7CisgICAgICAgIHJldHVybiBxdWV1ZS5wdXNoVW5pcXVlKHRhcmdldCwg
bWV0aG9kLCBhcmdzLCBzdGFjayk7CisgICAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gcXVl
dWUucHVzaCh0YXJnZXQsIG1ldGhvZCwgYXJncywgc3RhY2spOworICAgICAgfQorICAgIH0sCisK
KyAgICBmbHVzaDogZnVuY3Rpb24gKCkgeworICAgICAgdmFyIHF1ZXVlcyA9IHRoaXMucXVldWVz
OworICAgICAgdmFyIHF1ZXVlTmFtZXMgPSB0aGlzLnF1ZXVlTmFtZXM7CisgICAgICB2YXIgcXVl
dWVOYW1lLCBxdWV1ZTsKKyAgICAgIHZhciBxdWV1ZU5hbWVJbmRleCA9IDA7CisgICAgICB2YXIg
bnVtYmVyT2ZRdWV1ZXMgPSBxdWV1ZU5hbWVzLmxlbmd0aDsKKworICAgICAgd2hpbGUgKHF1ZXVl
TmFtZUluZGV4IDwgbnVtYmVyT2ZRdWV1ZXMpIHsKKyAgICAgICAgcXVldWVOYW1lID0gcXVldWVO
YW1lc1txdWV1ZU5hbWVJbmRleF07CisgICAgICAgIHF1ZXVlID0gcXVldWVzW3F1ZXVlTmFtZV07
CisKKyAgICAgICAgdmFyIG51bWJlck9mUXVldWVJdGVtcyA9IHF1ZXVlLl9xdWV1ZS5sZW5ndGg7
CisKKyAgICAgICAgaWYgKG51bWJlck9mUXVldWVJdGVtcyA9PT0gMCkgeworICAgICAgICAgIHF1
ZXVlTmFtZUluZGV4Kys7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcXVldWUuZmx1c2go
ZmFsc2UgLyogYXN5bmMgKi8pOworICAgICAgICAgIHF1ZXVlTmFtZUluZGV4ID0gMDsKKyAgICAg
ICAgfQorICAgICAgfQorICAgIH0KKyAgfTsKK30pOworZW5pZmVkKCdiYWNrYnVybmVyL3BsYXRm
b3JtJywgWydleHBvcnRzJ10sIGZ1bmN0aW9uIChleHBvcnRzKSB7CisgICd1c2Ugc3RyaWN0JzsK
KworICB2YXIgR2xvYmFsQ29udGV4dDsKKworICAvKiBnbG9iYWwgc2VsZiAqLworICBpZiAodHlw
ZW9mIHNlbGYgPT09ICdvYmplY3QnKSB7CisgICAgR2xvYmFsQ29udGV4dCA9IHNlbGY7CisKKyAg
ICAvKiBnbG9iYWwgZ2xvYmFsICovCisgIH0gZWxzZSBpZiAodHlwZW9mIGdsb2JhbCA9PT0gJ29i
amVjdCcpIHsKKyAgICAgIEdsb2JhbENvbnRleHQgPSBnbG9iYWw7CisKKyAgICAgIC8qIGdsb2Jh
bCB3aW5kb3cgKi8KKyAgICB9IGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSB7
CisgICAgICAgIEdsb2JhbENvbnRleHQgPSB3aW5kb3c7CisgICAgICB9IGVsc2UgeworICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoJ25vIGdsb2JhbDogYHNlbGZgLCBgZ2xvYmFsYCBub3IgYHdpbmRv
d2Agd2FzIGZvdW5kJyk7CisgICAgICB9CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gR2xvYmFsQ29u
dGV4dDsKK30pOworZW5pZmVkKCdiYWNrYnVybmVyL3F1ZXVlJywgWydleHBvcnRzJywgJ2JhY2ti
dXJuZXIvdXRpbHMnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9iYWNrYnVybmVyVXRpbHMpIHsKKyAg
J3VzZSBzdHJpY3QnOworCisgIGV4cG9ydHMuZGVmYXVsdCA9IFF1ZXVlOworCisgIGZ1bmN0aW9u
IFF1ZXVlKG5hbWUsIG9wdGlvbnMsIGdsb2JhbE9wdGlvbnMpIHsKKyAgICB0aGlzLm5hbWUgPSBu
YW1lOworICAgIHRoaXMuZ2xvYmFsT3B0aW9ucyA9IGdsb2JhbE9wdGlvbnMgfHwge307CisgICAg
dGhpcy5vcHRpb25zID0gb3B0aW9uczsKKyAgICB0aGlzLl9xdWV1ZSA9IFtdOworICAgIHRoaXMu
dGFyZ2V0UXVldWVzID0ge307CisgICAgdGhpcy5fcXVldWVCZWluZ0ZsdXNoZWQgPSB1bmRlZmlu
ZWQ7CisgIH0KKworICBRdWV1ZS5wcm90b3R5cGUgPSB7CisgICAgcHVzaDogZnVuY3Rpb24gKHRh
cmdldCwgbWV0aG9kLCBhcmdzLCBzdGFjaykgeworICAgICAgdmFyIHF1ZXVlID0gdGhpcy5fcXVl
dWU7CisgICAgICBxdWV1ZS5wdXNoKHRhcmdldCwgbWV0aG9kLCBhcmdzLCBzdGFjayk7CisKKyAg
ICAgIHJldHVybiB7CisgICAgICAgIHF1ZXVlOiB0aGlzLAorICAgICAgICB0YXJnZXQ6IHRhcmdl
dCwKKyAgICAgICAgbWV0aG9kOiBtZXRob2QKKyAgICAgIH07CisgICAgfSwKKworICAgIHB1c2hV
bmlxdWVXaXRob3V0R3VpZDogZnVuY3Rpb24gKHRhcmdldCwgbWV0aG9kLCBhcmdzLCBzdGFjaykg
eworICAgICAgdmFyIHF1ZXVlID0gdGhpcy5fcXVldWU7CisKKyAgICAgIGZvciAodmFyIGkgPSAw
LCBsID0gcXVldWUubGVuZ3RoOyBpIDwgbDsgaSArPSA0KSB7CisgICAgICAgIHZhciBjdXJyZW50
VGFyZ2V0ID0gcXVldWVbaV07CisgICAgICAgIHZhciBjdXJyZW50TWV0aG9kID0gcXVldWVbaSAr
IDFdOworCisgICAgICAgIGlmIChjdXJyZW50VGFyZ2V0ID09PSB0YXJnZXQgJiYgY3VycmVudE1l
dGhvZCA9PT0gbWV0aG9kKSB7CisgICAgICAgICAgcXVldWVbaSArIDJdID0gYXJnczsgLy8gcmVw
bGFjZSBhcmdzCisgICAgICAgICAgcXVldWVbaSArIDNdID0gc3RhY2s7IC8vIHJlcGxhY2Ugc3Rh
Y2sKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgcXVldWUu
cHVzaCh0YXJnZXQsIG1ldGhvZCwgYXJncywgc3RhY2spOworICAgIH0sCisKKyAgICB0YXJnZXRR
dWV1ZTogZnVuY3Rpb24gKHRhcmdldFF1ZXVlLCB0YXJnZXQsIG1ldGhvZCwgYXJncywgc3RhY2sp
IHsKKyAgICAgIHZhciBxdWV1ZSA9IHRoaXMuX3F1ZXVlOworCisgICAgICBmb3IgKHZhciBpID0g
MCwgbCA9IHRhcmdldFF1ZXVlLmxlbmd0aDsgaSA8IGw7IGkgKz0gMikgeworICAgICAgICB2YXIg
Y3VycmVudE1ldGhvZCA9IHRhcmdldFF1ZXVlW2ldOworICAgICAgICB2YXIgY3VycmVudEluZGV4
ID0gdGFyZ2V0UXVldWVbaSArIDFdOworCisgICAgICAgIGlmIChjdXJyZW50TWV0aG9kID09PSBt
ZXRob2QpIHsKKyAgICAgICAgICBxdWV1ZVtjdXJyZW50SW5kZXggKyAyXSA9IGFyZ3M7IC8vIHJl
cGxhY2UgYXJncworICAgICAgICAgIHF1ZXVlW2N1cnJlbnRJbmRleCArIDNdID0gc3RhY2s7IC8v
IHJlcGxhY2Ugc3RhY2sKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgIH0KKwor
ICAgICAgdGFyZ2V0UXVldWUucHVzaChtZXRob2QsIHF1ZXVlLnB1c2godGFyZ2V0LCBtZXRob2Qs
IGFyZ3MsIHN0YWNrKSAtIDQpOworICAgIH0sCisKKyAgICBwdXNoVW5pcXVlV2l0aEd1aWQ6IGZ1
bmN0aW9uIChndWlkLCB0YXJnZXQsIG1ldGhvZCwgYXJncywgc3RhY2spIHsKKyAgICAgIHZhciBo
YXNMb2NhbFF1ZXVlID0gdGhpcy50YXJnZXRRdWV1ZXNbZ3VpZF07CisKKyAgICAgIGlmIChoYXNM
b2NhbFF1ZXVlKSB7CisgICAgICAgIHRoaXMudGFyZ2V0UXVldWUoaGFzTG9jYWxRdWV1ZSwgdGFy
Z2V0LCBtZXRob2QsIGFyZ3MsIHN0YWNrKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHRoaXMu
dGFyZ2V0UXVldWVzW2d1aWRdID0gW21ldGhvZCwgdGhpcy5fcXVldWUucHVzaCh0YXJnZXQsIG1l
dGhvZCwgYXJncywgc3RhY2spIC0gNF07CisgICAgICB9CisKKyAgICAgIHJldHVybiB7CisgICAg
ICAgIHF1ZXVlOiB0aGlzLAorICAgICAgICB0YXJnZXQ6IHRhcmdldCwKKyAgICAgICAgbWV0aG9k
OiBtZXRob2QKKyAgICAgIH07CisgICAgfSwKKworICAgIHB1c2hVbmlxdWU6IGZ1bmN0aW9uICh0
YXJnZXQsIG1ldGhvZCwgYXJncywgc3RhY2spIHsKKyAgICAgIHZhciBLRVkgPSB0aGlzLmdsb2Jh
bE9wdGlvbnMuR1VJRF9LRVk7CisKKyAgICAgIGlmICh0YXJnZXQgJiYgS0VZKSB7CisgICAgICAg
IHZhciBndWlkID0gdGFyZ2V0W0tFWV07CisgICAgICAgIGlmIChndWlkKSB7CisgICAgICAgICAg
cmV0dXJuIHRoaXMucHVzaFVuaXF1ZVdpdGhHdWlkKGd1aWQsIHRhcmdldCwgbWV0aG9kLCBhcmdz
LCBzdGFjayk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgdGhpcy5wdXNoVW5pcXVlV2l0
aG91dEd1aWQodGFyZ2V0LCBtZXRob2QsIGFyZ3MsIHN0YWNrKTsKKworICAgICAgcmV0dXJuIHsK
KyAgICAgICAgcXVldWU6IHRoaXMsCisgICAgICAgIHRhcmdldDogdGFyZ2V0LAorICAgICAgICBt
ZXRob2Q6IG1ldGhvZAorICAgICAgfTsKKyAgICB9LAorCisgICAgaW52b2tlOiBmdW5jdGlvbiAo
dGFyZ2V0LCBtZXRob2QsIGFyZ3MsIF8sIF9lcnJvclJlY29yZGVkRm9yU3RhY2spIHsKKyAgICAg
IGlmIChhcmdzICYmIGFyZ3MubGVuZ3RoID4gMCkgeworICAgICAgICBtZXRob2QuYXBwbHkodGFy
Z2V0LCBhcmdzKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIG1ldGhvZC5jYWxsKHRhcmdldCk7
CisgICAgICB9CisgICAgfSwKKworICAgIGludm9rZVdpdGhPbkVycm9yOiBmdW5jdGlvbiAodGFy
Z2V0LCBtZXRob2QsIGFyZ3MsIG9uRXJyb3IsIGVycm9yUmVjb3JkZWRGb3JTdGFjaykgeworICAg
ICAgdHJ5IHsKKyAgICAgICAgaWYgKGFyZ3MgJiYgYXJncy5sZW5ndGggPiAwKSB7CisgICAgICAg
ICAgbWV0aG9kLmFwcGx5KHRhcmdldCwgYXJncyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgbWV0aG9kLmNhbGwodGFyZ2V0KTsKKyAgICAgICAgfQorICAgICAgfSBjYXRjaCAoZXJyb3Ip
IHsKKyAgICAgICAgb25FcnJvcihlcnJvciwgZXJyb3JSZWNvcmRlZEZvclN0YWNrKTsKKyAgICAg
IH0KKyAgICB9LAorCisgICAgZmx1c2g6IGZ1bmN0aW9uIChzeW5jKSB7CisgICAgICB2YXIgcXVl
dWUgPSB0aGlzLl9xdWV1ZTsKKyAgICAgIHZhciBsZW5ndGggPSBxdWV1ZS5sZW5ndGg7CisKKyAg
ICAgIGlmIChsZW5ndGggPT09IDApIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorCisgICAg
ICB2YXIgZ2xvYmFsT3B0aW9ucyA9IHRoaXMuZ2xvYmFsT3B0aW9uczsKKyAgICAgIHZhciBvcHRp
b25zID0gdGhpcy5vcHRpb25zOworICAgICAgdmFyIGJlZm9yZSA9IG9wdGlvbnMgJiYgb3B0aW9u
cy5iZWZvcmU7CisgICAgICB2YXIgYWZ0ZXIgPSBvcHRpb25zICYmIG9wdGlvbnMuYWZ0ZXI7Cisg
ICAgICB2YXIgb25FcnJvciA9IGdsb2JhbE9wdGlvbnMub25FcnJvciB8fCBnbG9iYWxPcHRpb25z
Lm9uRXJyb3JUYXJnZXQgJiYgZ2xvYmFsT3B0aW9ucy5vbkVycm9yVGFyZ2V0W2dsb2JhbE9wdGlv
bnMub25FcnJvck1ldGhvZF07CisgICAgICB2YXIgdGFyZ2V0LCBtZXRob2QsIGFyZ3MsIGVycm9y
UmVjb3JkZWRGb3JTdGFjazsKKyAgICAgIHZhciBpbnZva2UgPSBvbkVycm9yID8gdGhpcy5pbnZv
a2VXaXRoT25FcnJvciA6IHRoaXMuaW52b2tlOworCisgICAgICB0aGlzLnRhcmdldFF1ZXVlcyA9
IE9iamVjdC5jcmVhdGUobnVsbCk7CisgICAgICB2YXIgcXVldWVJdGVtcyA9IHRoaXMuX3F1ZXVl
QmVpbmdGbHVzaGVkID0gdGhpcy5fcXVldWUuc2xpY2UoKTsKKyAgICAgIHRoaXMuX3F1ZXVlID0g
W107CisKKyAgICAgIGlmIChiZWZvcmUpIHsKKyAgICAgICAgYmVmb3JlKCk7CisgICAgICB9CisK
KyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDQpIHsKKyAgICAgICAgdGFy
Z2V0ID0gcXVldWVJdGVtc1tpXTsKKyAgICAgICAgbWV0aG9kID0gcXVldWVJdGVtc1tpICsgMV07
CisgICAgICAgIGFyZ3MgPSBxdWV1ZUl0ZW1zW2kgKyAyXTsKKyAgICAgICAgZXJyb3JSZWNvcmRl
ZEZvclN0YWNrID0gcXVldWVJdGVtc1tpICsgM107IC8vIERlYnVnZ2luZyBhc3Npc3RhbmNlCisK
KyAgICAgICAgaWYgKF9iYWNrYnVybmVyVXRpbHMuaXNTdHJpbmcobWV0aG9kKSkgeworICAgICAg
ICAgIG1ldGhvZCA9IHRhcmdldFttZXRob2RdOworICAgICAgICB9CisKKyAgICAgICAgLy8gbWV0
aG9kIGNvdWxkIGhhdmUgYmVlbiBudWxsaWZpZWQgLyBjYW5jZWxlZCBkdXJpbmcgZmx1c2gKKyAg
ICAgICAgaWYgKG1ldGhvZCkgeworICAgICAgICAgIC8vCisgICAgICAgICAgLy8gICAgKiogQXR0
ZW50aW9uIGludHJlcGlkIGRldmVsb3BlciAqKgorICAgICAgICAgIC8vCisgICAgICAgICAgLy8g
ICAgVG8gZmluZCBvdXQgdGhlIHN0YWNrIG9mIHRoaXMgdGFzayB3aGVuIGl0IHdhcyBzY2hlZHVs
ZWQgb250bworICAgICAgICAgIC8vICAgIHRoZSBydW4gbG9vcCwgYWRkIHRoZSBmb2xsb3dpbmcg
dG8geW91ciBhcHAuanM6CisgICAgICAgICAgLy8KKyAgICAgICAgICAvLyAgICBFbWJlci5ydW4u
YmFja2J1cm5lci5ERUJVRyA9IHRydWU7IC8vIE5PVEU6IFRoaXMgc2xvd3MgeW91ciBhcHAsIGRv
bid0IGxlYXZlIGl0IG9uIGluIHByb2R1Y3Rpb24uCisgICAgICAgICAgLy8KKyAgICAgICAgICAv
LyAgICBPbmNlIHRoYXQgaXMgaW4gcGxhY2UsIHdoZW4geW91IGFyZSBhdCBhIGJyZWFrcG9pbnQg
YW5kIG5hdmlnYXRlCisgICAgICAgICAgLy8gICAgaGVyZSBpbiB0aGUgc3RhY2sgZXhwbG9yZXIs
IHlvdSBjYW4gbG9vayBhdCBgZXJyb3JSZWNvcmRlZEZvclN0YWNrLnN0YWNrYCwKKyAgICAgICAg
ICAvLyAgICB3aGljaCB3aWxsIGJlIHRoZSBjYXB0dXJlZCBzdGFjayB3aGVuIHRoaXMgam9iIHdh
cyBzY2hlZHVsZWQuCisgICAgICAgICAgLy8KKyAgICAgICAgICBpbnZva2UodGFyZ2V0LCBtZXRo
b2QsIGFyZ3MsIG9uRXJyb3IsIGVycm9yUmVjb3JkZWRGb3JTdGFjayk7CisgICAgICAgIH0KKyAg
ICAgIH0KKworICAgICAgaWYgKGFmdGVyKSB7CisgICAgICAgIGFmdGVyKCk7CisgICAgICB9CisK
KyAgICAgIHRoaXMuX3F1ZXVlQmVpbmdGbHVzaGVkID0gdW5kZWZpbmVkOworCisgICAgICBpZiAo
c3luYyAhPT0gZmFsc2UgJiYgdGhpcy5fcXVldWUubGVuZ3RoID4gMCkgeworICAgICAgICAvLyBj
aGVjayBpZiBuZXcgaXRlbXMgaGF2ZSBiZWVuIGFkZGVkCisgICAgICAgIHRoaXMuZmx1c2godHJ1
ZSk7CisgICAgICB9CisgICAgfSwKKworICAgIGNhbmNlbDogZnVuY3Rpb24gKGFjdGlvblRvQ2Fu
Y2VsKSB7CisgICAgICB2YXIgcXVldWUgPSB0aGlzLl9xdWV1ZSwKKyAgICAgICAgICBjdXJyZW50
VGFyZ2V0LAorICAgICAgICAgIGN1cnJlbnRNZXRob2QsCisgICAgICAgICAgaSwKKyAgICAgICAg
ICBsOworICAgICAgdmFyIHRhcmdldCA9IGFjdGlvblRvQ2FuY2VsLnRhcmdldDsKKyAgICAgIHZh
ciBtZXRob2QgPSBhY3Rpb25Ub0NhbmNlbC5tZXRob2Q7CisgICAgICB2YXIgR1VJRF9LRVkgPSB0
aGlzLmdsb2JhbE9wdGlvbnMuR1VJRF9LRVk7CisKKyAgICAgIGlmIChHVUlEX0tFWSAmJiB0aGlz
LnRhcmdldFF1ZXVlcyAmJiB0YXJnZXQpIHsKKyAgICAgICAgdmFyIHRhcmdldFF1ZXVlID0gdGhp
cy50YXJnZXRRdWV1ZXNbdGFyZ2V0W0dVSURfS0VZXV07CisKKyAgICAgICAgaWYgKHRhcmdldFF1
ZXVlKSB7CisgICAgICAgICAgZm9yIChpID0gMCwgbCA9IHRhcmdldFF1ZXVlLmxlbmd0aDsgaSA8
IGw7IGkrKykgeworICAgICAgICAgICAgaWYgKHRhcmdldFF1ZXVlW2ldID09PSBtZXRob2QpIHsK
KyAgICAgICAgICAgICAgdGFyZ2V0UXVldWUuc3BsaWNlKGksIDEpOworICAgICAgICAgICAgfQor
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBmb3IgKGkgPSAwLCBsID0g
cXVldWUubGVuZ3RoOyBpIDwgbDsgaSArPSA0KSB7CisgICAgICAgIGN1cnJlbnRUYXJnZXQgPSBx
dWV1ZVtpXTsKKyAgICAgICAgY3VycmVudE1ldGhvZCA9IHF1ZXVlW2kgKyAxXTsKKworICAgICAg
ICBpZiAoY3VycmVudFRhcmdldCA9PT0gdGFyZ2V0ICYmIGN1cnJlbnRNZXRob2QgPT09IG1ldGhv
ZCkgeworICAgICAgICAgIHF1ZXVlLnNwbGljZShpLCA0KTsKKyAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICAvLyBpZiBub3QgZm91bmQgaW4gY3VycmVu
dCBxdWV1ZQorICAgICAgLy8gY291bGQgYmUgaW4gdGhlIHF1ZXVlIHRoYXQgaXMgYmVpbmcgZmx1
c2hlZAorICAgICAgcXVldWUgPSB0aGlzLl9xdWV1ZUJlaW5nRmx1c2hlZDsKKworICAgICAgaWYg
KCFxdWV1ZSkgeworICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICAgIGZvciAoaSA9IDAs
IGwgPSBxdWV1ZS5sZW5ndGg7IGkgPCBsOyBpICs9IDQpIHsKKyAgICAgICAgY3VycmVudFRhcmdl
dCA9IHF1ZXVlW2ldOworICAgICAgICBjdXJyZW50TWV0aG9kID0gcXVldWVbaSArIDFdOworCisg
ICAgICAgIGlmIChjdXJyZW50VGFyZ2V0ID09PSB0YXJnZXQgJiYgY3VycmVudE1ldGhvZCA9PT0g
bWV0aG9kKSB7CisgICAgICAgICAgLy8gZG9uJ3QgbWVzcyB3aXRoIGFycmF5IGR1cmluZyBmbHVz
aAorICAgICAgICAgIC8vIGp1c3QgbnVsbGlmeSB0aGUgbWV0aG9kCisgICAgICAgICAgcXVldWVb
aSArIDFdID0gbnVsbDsKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAg
fQorICAgIH0KKyAgfTsKK30pOworZW5pZmVkKCdiYWNrYnVybmVyL3V0aWxzJywgWydleHBvcnRz
J10sIGZ1bmN0aW9uIChleHBvcnRzKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICBleHBvcnRzLmVh
Y2ggPSBlYWNoOworICBleHBvcnRzLmlzU3RyaW5nID0gaXNTdHJpbmc7CisgIGV4cG9ydHMuaXNG
dW5jdGlvbiA9IGlzRnVuY3Rpb247CisgIGV4cG9ydHMuaXNOdW1iZXIgPSBpc051bWJlcjsKKyAg
ZXhwb3J0cy5pc0NvZXJjYWJsZU51bWJlciA9IGlzQ29lcmNhYmxlTnVtYmVyOworICB2YXIgTlVN
QkVSID0gL1xkKy87CisKKyAgZnVuY3Rpb24gZWFjaChjb2xsZWN0aW9uLCBjYWxsYmFjaykgewor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sbGVjdGlvbi5sZW5ndGg7IGkrKykgeworICAgICAg
Y2FsbGJhY2soY29sbGVjdGlvbltpXSk7CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gaXNTdHJp
bmcoc3VzcGVjdCkgeworICAgIHJldHVybiB0eXBlb2Ygc3VzcGVjdCA9PT0gJ3N0cmluZyc7Cisg
IH0KKworICBmdW5jdGlvbiBpc0Z1bmN0aW9uKHN1c3BlY3QpIHsKKyAgICByZXR1cm4gdHlwZW9m
IHN1c3BlY3QgPT09ICdmdW5jdGlvbic7CisgIH0KKworICBmdW5jdGlvbiBpc051bWJlcihzdXNw
ZWN0KSB7CisgICAgcmV0dXJuIHR5cGVvZiBzdXNwZWN0ID09PSAnbnVtYmVyJzsKKyAgfQorCisg
IGZ1bmN0aW9uIGlzQ29lcmNhYmxlTnVtYmVyKG51bWJlcikgeworICAgIHJldHVybiBpc051bWJl
cihudW1iZXIpIHx8IE5VTUJFUi50ZXN0KG51bWJlcik7CisgIH0KK30pOworZW5pZmVkKCdjb250
YWluZXIvY29udGFpbmVyJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2NvcmUnLCAnZW1iZXIt
bWV0YWwvZGVidWcnLCAnZW1iZXItbWV0YWwvZGljdGlvbmFyeScsICdlbWJlci1tZXRhbC9mZWF0
dXJlcycsICdjb250YWluZXIvb3duZXInLCAnZW1iZXItcnVudGltZS9taXhpbnMvY29udGFpbmVy
X3Byb3h5JywgJ2VtYmVyLW1ldGFsL3N5bWJvbCddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVy
TWV0YWxDb3JlLCBfZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJNZXRhbERpY3Rpb25hcnksIF9lbWJl
ck1ldGFsRmVhdHVyZXMsIF9jb250YWluZXJPd25lciwgX2VtYmVyUnVudGltZU1peGluc0NvbnRh
aW5lcl9wcm94eSwgX2VtYmVyTWV0YWxTeW1ib2wpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIHZh
ciBDT05UQUlORVJfT1ZFUlJJREUgPSBfZW1iZXJNZXRhbFN5bWJvbC5kZWZhdWx0KCdDT05UQUlO
RVJfT1ZFUlJJREUnKTsKKworICAvKioKKyAgIEEgY29udGFpbmVyIHVzZWQgdG8gaW5zdGFudGlh
dGUgYW5kIGNhY2hlIG9iamVjdHMuCisgIAorICAgRXZlcnkgYENvbnRhaW5lcmAgbXVzdCBiZSBh
c3NvY2lhdGVkIHdpdGggYSBgUmVnaXN0cnlgLCB3aGljaCBpcyByZWZlcmVuY2VkCisgICB0byBk
ZXRlcm1pbmUgdGhlIGZhY3RvcnkgYW5kIG9wdGlvbnMgdGhhdCBzaG91bGQgYmUgdXNlZCB0byBp
bnN0YW50aWF0ZQorICAgb2JqZWN0cy4KKyAgCisgICBUaGUgcHVibGljIEFQSSBmb3IgYENvbnRh
aW5lcmAgaXMgc3RpbGwgaW4gZmx1eCBhbmQgc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkCisgICBz
dGFibGUuCisgIAorICAgQHByaXZhdGUKKyAgIEBjbGFzcyBDb250YWluZXIKKyAgICovCisgIGZ1
bmN0aW9uIENvbnRhaW5lcihyZWdpc3RyeSwgb3B0aW9ucykgeworICAgIHRoaXMucmVnaXN0cnkg
PSByZWdpc3RyeTsKKyAgICB0aGlzLm93bmVyID0gb3B0aW9ucyAmJiBvcHRpb25zLm93bmVyID8g
b3B0aW9ucy5vd25lciA6IG51bGw7CisgICAgdGhpcy5jYWNoZSA9IF9lbWJlck1ldGFsRGljdGlv
bmFyeS5kZWZhdWx0KG9wdGlvbnMgJiYgb3B0aW9ucy5jYWNoZSA/IG9wdGlvbnMuY2FjaGUgOiBu
dWxsKTsKKyAgICB0aGlzLmZhY3RvcnlDYWNoZSA9IF9lbWJlck1ldGFsRGljdGlvbmFyeS5kZWZh
dWx0KG9wdGlvbnMgJiYgb3B0aW9ucy5mYWN0b3J5Q2FjaGUgPyBvcHRpb25zLmZhY3RvcnlDYWNo
ZSA6IG51bGwpOworICAgIHRoaXMudmFsaWRhdGlvbkNhY2hlID0gX2VtYmVyTWV0YWxEaWN0aW9u
YXJ5LmRlZmF1bHQob3B0aW9ucyAmJiBvcHRpb25zLnZhbGlkYXRpb25DYWNoZSA/IG9wdGlvbnMu
dmFsaWRhdGlvbkNhY2hlIDogbnVsbCk7CisgICAgdGhpcy5fZmFrZUNvbnRhaW5lclRvSW5qZWN0
ID0gX2VtYmVyUnVudGltZU1peGluc0NvbnRhaW5lcl9wcm94eS5idWlsZEZha2VDb250YWluZXJX
aXRoRGVwcmVjYXRpb25zKHRoaXMpOworICAgIHRoaXNbQ09OVEFJTkVSX09WRVJSSURFXSA9IHVu
ZGVmaW5lZDsKKyAgfQorCisgIENvbnRhaW5lci5wcm90b3R5cGUgPSB7CisgICAgLyoqCisgICAg
IEBwcml2YXRlCisgICAgIEBwcm9wZXJ0eSBvd25lcgorICAgICBAdHlwZSBPYmplY3QKKyAgICAg
Ki8KKyAgICBvd25lcjogbnVsbCwKKworICAgIC8qKgorICAgICBAcHJpdmF0ZQorICAgICBAcHJv
cGVydHkgcmVnaXN0cnkKKyAgICAgQHR5cGUgUmVnaXN0cnkKKyAgICAgQHNpbmNlIDEuMTEuMAor
ICAgICAqLworICAgIHJlZ2lzdHJ5OiBudWxsLAorCisgICAgLyoqCisgICAgIEBwcml2YXRlCisg
ICAgIEBwcm9wZXJ0eSBjYWNoZQorICAgICBAdHlwZSBJbmhlcml0aW5nRGljdAorICAgICAqLwor
ICAgIGNhY2hlOiBudWxsLAorCisgICAgLyoqCisgICAgIEBwcml2YXRlCisgICAgIEBwcm9wZXJ0
eSBmYWN0b3J5Q2FjaGUKKyAgICAgQHR5cGUgSW5oZXJpdGluZ0RpY3QKKyAgICAgKi8KKyAgICBm
YWN0b3J5Q2FjaGU6IG51bGwsCisKKyAgICAvKioKKyAgICAgQHByaXZhdGUKKyAgICAgQHByb3Bl
cnR5IHZhbGlkYXRpb25DYWNoZQorICAgICBAdHlwZSBJbmhlcml0aW5nRGljdAorICAgICAqLwor
ICAgIHZhbGlkYXRpb25DYWNoZTogbnVsbCwKKworICAgIC8qKgorICAgICBHaXZlbiBhIGZ1bGxO
YW1lIHJldHVybiBhIGNvcnJlc3BvbmRpbmcgaW5zdGFuY2UuCisgICAgICBUaGUgZGVmYXVsdCBi
ZWhhdmlvdXIgaXMgZm9yIGxvb2t1cCB0byByZXR1cm4gYSBzaW5nbGV0b24gaW5zdGFuY2UuCisg
ICAgIFRoZSBzaW5nbGV0b24gaXMgc2NvcGVkIHRvIHRoZSBjb250YWluZXIsIGFsbG93aW5nIG11
bHRpcGxlIGNvbnRhaW5lcnMKKyAgICAgdG8gYWxsIGhhdmUgdGhlaXIgb3duIGxvY2FsbHkgc2Nv
cGVkIHNpbmdsZXRvbnMuCisgICAgICBgYGBqYXZhc2NyaXB0CisgICAgIHZhciByZWdpc3RyeSA9
IG5ldyBSZWdpc3RyeSgpOworICAgICB2YXIgY29udGFpbmVyID0gcmVnaXN0cnkuY29udGFpbmVy
KCk7CisgICAgICByZWdpc3RyeS5yZWdpc3RlcignYXBpOnR3aXR0ZXInLCBUd2l0dGVyKTsKKyAg
ICAgIHZhciB0d2l0dGVyID0gY29udGFpbmVyLmxvb2t1cCgnYXBpOnR3aXR0ZXInKTsKKyAgICAg
IHR3aXR0ZXIgaW5zdGFuY2VvZiBUd2l0dGVyOyAvLyA9PiB0cnVlCisgICAgICAvLyBieSBkZWZh
dWx0IHRoZSBjb250YWluZXIgd2lsbCByZXR1cm4gc2luZ2xldG9ucworICAgICB2YXIgdHdpdHRl
cjIgPSBjb250YWluZXIubG9va3VwKCdhcGk6dHdpdHRlcicpOworICAgICB0d2l0dGVyMiBpbnN0
YW5jZW9mIFR3aXR0ZXI7IC8vID0+IHRydWUKKyAgICAgIHR3aXR0ZXIgPT09IHR3aXR0ZXIyOyAv
Lz0+IHRydWUKKyAgICAgYGBgCisgICAgICBJZiBzaW5nbGV0b25zIGFyZSBub3Qgd2FudGVkLCBh
biBvcHRpb25hbCBmbGFnIGNhbiBiZSBwcm92aWRlZCBhdCBsb29rdXAuCisgICAgICBgYGBqYXZh
c2NyaXB0CisgICAgIHZhciByZWdpc3RyeSA9IG5ldyBSZWdpc3RyeSgpOworICAgICB2YXIgY29u
dGFpbmVyID0gcmVnaXN0cnkuY29udGFpbmVyKCk7CisgICAgICByZWdpc3RyeS5yZWdpc3Rlcign
YXBpOnR3aXR0ZXInLCBUd2l0dGVyKTsKKyAgICAgIHZhciB0d2l0dGVyID0gY29udGFpbmVyLmxv
b2t1cCgnYXBpOnR3aXR0ZXInLCB7IHNpbmdsZXRvbjogZmFsc2UgfSk7CisgICAgIHZhciB0d2l0
dGVyMiA9IGNvbnRhaW5lci5sb29rdXAoJ2FwaTp0d2l0dGVyJywgeyBzaW5nbGV0b246IGZhbHNl
IH0pOworICAgICAgdHdpdHRlciA9PT0gdHdpdHRlcjI7IC8vPT4gZmFsc2UKKyAgICAgYGBgCisg
ICAgICBAcHJpdmF0ZQorICAgICBAbWV0aG9kIGxvb2t1cAorICAgICBAcGFyYW0ge1N0cmluZ30g
ZnVsbE5hbWUKKyAgICAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXQorICAgICBAcGFyYW0ge1N0
cmluZ30gW29wdGlvbnMuc291cmNlXSBUaGUgZnVsbG5hbWUgb2YgdGhlIHJlcXVlc3Qgc291cmNl
ICh1c2VkIGZvciBsb2NhbCBsb29rdXApCisgICAgIEByZXR1cm4ge2FueX0KKyAgICAgKi8KKyAg
ICBsb29rdXA6IGZ1bmN0aW9uIChmdWxsTmFtZSwgb3B0aW9ucykgeworICAgICAgX2VtYmVyTWV0
YWxEZWJ1Zy5hc3NlcnQoJ2Z1bGxOYW1lIG11c3QgYmUgYSBwcm9wZXIgZnVsbCBuYW1lJywgdGhp
cy5yZWdpc3RyeS52YWxpZGF0ZUZ1bGxOYW1lKGZ1bGxOYW1lKSk7CisgICAgICByZXR1cm4gbG9v
a3VwKHRoaXMsIHRoaXMucmVnaXN0cnkubm9ybWFsaXplKGZ1bGxOYW1lKSwgb3B0aW9ucyk7Cisg
ICAgfSwKKworICAgIC8qKgorICAgICBHaXZlbiBhIGZ1bGxOYW1lLCByZXR1cm4gdGhlIGNvcnJl
c3BvbmRpbmcgZmFjdG9yeS4KKyAgICAgIEBwcml2YXRlCisgICAgIEBtZXRob2QgbG9va3VwRmFj
dG9yeQorICAgICBAcGFyYW0ge1N0cmluZ30gZnVsbE5hbWUKKyAgICAgQHBhcmFtIHtPYmplY3R9
IFtvcHRpb25zXQorICAgICBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuc291cmNlXSBUaGUgZnVs
bG5hbWUgb2YgdGhlIHJlcXVlc3Qgc291cmNlICh1c2VkIGZvciBsb2NhbCBsb29rdXApCisgICAg
IEByZXR1cm4ge2FueX0KKyAgICAgKi8KKyAgICBsb29rdXBGYWN0b3J5OiBmdW5jdGlvbiAoZnVs
bE5hbWUsIG9wdGlvbnMpIHsKKyAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdmdWxsTmFt
ZSBtdXN0IGJlIGEgcHJvcGVyIGZ1bGwgbmFtZScsIHRoaXMucmVnaXN0cnkudmFsaWRhdGVGdWxs
TmFtZShmdWxsTmFtZSkpOworICAgICAgcmV0dXJuIGZhY3RvcnlGb3IodGhpcywgdGhpcy5yZWdp
c3RyeS5ub3JtYWxpemUoZnVsbE5hbWUpLCBvcHRpb25zKTsKKyAgICB9LAorCisgICAgLyoqCisg
ICAgIEEgZGVwdGggZmlyc3QgdHJhdmVyc2FsLCBkZXN0cm95aW5nIHRoZSBjb250YWluZXIsIGl0
cyBkZXNjZW5kYW50IGNvbnRhaW5lcnMgYW5kIGFsbAorICAgICB0aGVpciBtYW5hZ2VkIG9iamVj
dHMuCisgICAgICBAcHJpdmF0ZQorICAgICBAbWV0aG9kIGRlc3Ryb3kKKyAgICAgKi8KKyAgICBk
ZXN0cm95OiBmdW5jdGlvbiAoKSB7CisgICAgICBlYWNoRGVzdHJveWFibGUodGhpcywgZnVuY3Rp
b24gKGl0ZW0pIHsKKyAgICAgICAgaWYgKGl0ZW0uZGVzdHJveSkgeworICAgICAgICAgIGl0ZW0u
ZGVzdHJveSgpOworICAgICAgICB9CisgICAgICB9KTsKKworICAgICAgdGhpcy5pc0Rlc3Ryb3ll
ZCA9IHRydWU7CisgICAgfSwKKworICAgIC8qKgorICAgICBDbGVhciBlaXRoZXIgdGhlIGVudGly
ZSBjYWNoZSBvciBqdXN0IHRoZSBjYWNoZSBmb3IgYSBwYXJ0aWN1bGFyIGtleS4KKyAgICAgIEBw
cml2YXRlCisgICAgIEBtZXRob2QgcmVzZXQKKyAgICAgQHBhcmFtIHtTdHJpbmd9IGZ1bGxOYW1l
IG9wdGlvbmFsIGtleSB0byByZXNldDsgaWYgbWlzc2luZywgcmVzZXRzIGV2ZXJ5dGhpbmcKKyAg
ICAgKi8KKyAgICByZXNldDogZnVuY3Rpb24gKGZ1bGxOYW1lKSB7CisgICAgICBpZiAoYXJndW1l
bnRzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgcmVzZXRNZW1iZXIodGhpcywgdGhpcy5yZWdpc3Ry
eS5ub3JtYWxpemUoZnVsbE5hbWUpKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJlc2V0Q2Fj
aGUodGhpcyk7CisgICAgICB9CisgICAgfSwKKworICAgIC8qKgorICAgICBSZXR1cm5zIGFuIG9i
amVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHByb3ZpZGUgYW4gb3duZXIgdG8gYQorICAgICBtYW51
YWxseSBjcmVhdGVkIGluc3RhbmNlLgorICAgICAgQHByaXZhdGUKKyAgICAgQG1ldGhvZCBvd25l
ckluamVjdGlvbgorICAgICBAcmV0dXJucyB7IE9iamVjdCB9CisgICAgKi8KKyAgICBvd25lcklu
amVjdGlvbjogZnVuY3Rpb24gKCkgeworICAgICAgdmFyIF9yZWY7CisKKyAgICAgIHJldHVybiBf
cmVmID0ge30sIF9yZWZbX2NvbnRhaW5lck93bmVyLk9XTkVSXSA9IHRoaXMub3duZXIsIF9yZWY7
CisgICAgfQorICB9OworCisgIGZ1bmN0aW9uIGlzU2luZ2xldG9uKGNvbnRhaW5lciwgZnVsbE5h
bWUpIHsKKyAgICByZXR1cm4gY29udGFpbmVyLnJlZ2lzdHJ5LmdldE9wdGlvbihmdWxsTmFtZSwg
J3NpbmdsZXRvbicpICE9PSBmYWxzZTsKKyAgfQorCisgIGZ1bmN0aW9uIGxvb2t1cChjb250YWlu
ZXIsIGZ1bGxOYW1lKSB7CisgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDIg
fHwgYXJndW1lbnRzWzJdID09PSB1bmRlZmluZWQgPyB7fSA6IGFyZ3VtZW50c1syXTsKKworICAg
IGlmIChvcHRpb25zLnNvdXJjZSkgeworICAgICAgZnVsbE5hbWUgPSBjb250YWluZXIucmVnaXN0
cnkuZXhwYW5kTG9jYWxMb29rdXAoZnVsbE5hbWUsIG9wdGlvbnMpOworCisgICAgICAvLyBpZiBl
eHBhbmRMb2NhbExvb2t1cCByZXR1cm5zIGZhbHNleSwgd2UgZG8gbm90IHN1cHBvcnQgbG9jYWwg
bG9va3VwCisgICAgICBpZiAoIWZ1bGxOYW1lKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAoY29udGFpbmVyLmNhY2hlW2Z1bGxOYW1lXSAhPT0gdW5kZWZpbmVk
ICYmIG9wdGlvbnMuc2luZ2xldG9uICE9PSBmYWxzZSkgeworICAgICAgcmV0dXJuIGNvbnRhaW5l
ci5jYWNoZVtmdWxsTmFtZV07CisgICAgfQorCisgICAgdmFyIHZhbHVlID0gaW5zdGFudGlhdGUo
Y29udGFpbmVyLCBmdWxsTmFtZSk7CisKKyAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgewor
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpc1NpbmdsZXRvbihjb250YWluZXIsIGZ1
bGxOYW1lKSAmJiBvcHRpb25zLnNpbmdsZXRvbiAhPT0gZmFsc2UpIHsKKyAgICAgIGNvbnRhaW5l
ci5jYWNoZVtmdWxsTmFtZV0gPSB2YWx1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gdmFsdWU7Cisg
IH0KKworICBmdW5jdGlvbiBtYXJrSW5qZWN0aW9uc0FzRHluYW1pYyhpbmplY3Rpb25zKSB7Cisg
ICAgaW5qZWN0aW9ucy5fZHluYW1pYyA9IHRydWU7CisgIH0KKworICBmdW5jdGlvbiBhcmVJbmpl
Y3Rpb25zRHluYW1pYyhpbmplY3Rpb25zKSB7CisgICAgcmV0dXJuICEhaW5qZWN0aW9ucy5fZHlu
YW1pYzsKKyAgfQorCisgIGZ1bmN0aW9uIGJ1aWxkSW5qZWN0aW9ucygpIC8qIGNvbnRhaW5lciwg
Li4uaW5qZWN0aW9ucyAqL3sKKyAgICB2YXIgaGFzaCA9IHt9OworCisgICAgaWYgKGFyZ3VtZW50
cy5sZW5ndGggPiAxKSB7CisgICAgICB2YXIgY29udGFpbmVyID0gYXJndW1lbnRzWzBdOworICAg
ICAgdmFyIGluamVjdGlvbnMgPSBbXTsKKyAgICAgIHZhciBpbmplY3Rpb247CisKKyAgICAgIGZv
ciAodmFyIGkgPSAxLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykgeworICAgICAg
ICBpZiAoYXJndW1lbnRzW2ldKSB7CisgICAgICAgICAgaW5qZWN0aW9ucyA9IGluamVjdGlvbnMu
Y29uY2F0KGFyZ3VtZW50c1tpXSk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgY29udGFp
bmVyLnJlZ2lzdHJ5LnZhbGlkYXRlSW5qZWN0aW9ucyhpbmplY3Rpb25zKTsKKworICAgICAgZm9y
IChpID0gMCwgbCA9IGluamVjdGlvbnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CisgICAgICAgIGlu
amVjdGlvbiA9IGluamVjdGlvbnNbaV07CisgICAgICAgIGhhc2hbaW5qZWN0aW9uLnByb3BlcnR5
XSA9IGxvb2t1cChjb250YWluZXIsIGluamVjdGlvbi5mdWxsTmFtZSk7CisgICAgICAgIGlmICgh
aXNTaW5nbGV0b24oY29udGFpbmVyLCBpbmplY3Rpb24uZnVsbE5hbWUpKSB7CisgICAgICAgICAg
bWFya0luamVjdGlvbnNBc0R5bmFtaWMoaGFzaCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gaGFzaDsKKyAgfQorCisgIGZ1bmN0aW9uIGZhY3RvcnlGb3IoY29udGFp
bmVyLCBmdWxsTmFtZSkgeworICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA8PSAy
IHx8IGFyZ3VtZW50c1syXSA9PT0gdW5kZWZpbmVkID8ge30gOiBhcmd1bWVudHNbMl07CisKKyAg
ICB2YXIgcmVnaXN0cnkgPSBjb250YWluZXIucmVnaXN0cnk7CisKKyAgICBpZiAob3B0aW9ucy5z
b3VyY2UpIHsKKyAgICAgIGZ1bGxOYW1lID0gcmVnaXN0cnkuZXhwYW5kTG9jYWxMb29rdXAoZnVs
bE5hbWUsIG9wdGlvbnMpOworCisgICAgICAvLyBpZiBleHBhbmRMb2NhbExvb2t1cCByZXR1cm5z
IGZhbHNleSwgd2UgZG8gbm90IHN1cHBvcnQgbG9jYWwgbG9va3VwCisgICAgICBpZiAoIWZ1bGxO
YW1lKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICB9CisKKyAgICB2YXIgY2FjaGUg
PSBjb250YWluZXIuZmFjdG9yeUNhY2hlOworICAgIGlmIChjYWNoZVtmdWxsTmFtZV0pIHsKKyAg
ICAgIHJldHVybiBjYWNoZVtmdWxsTmFtZV07CisgICAgfQorICAgIHZhciBmYWN0b3J5ID0gcmVn
aXN0cnkucmVzb2x2ZShmdWxsTmFtZSk7CisgICAgaWYgKGZhY3RvcnkgPT09IHVuZGVmaW5lZCkg
eworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZhciB0eXBlID0gZnVsbE5hbWUuc3BsaXQo
JzonKVswXTsKKyAgICBpZiAoIWZhY3RvcnkgfHwgdHlwZW9mIGZhY3RvcnkuZXh0ZW5kICE9PSAn
ZnVuY3Rpb24nIHx8ICFfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5NT0RFTF9GQUNUT1JZX0lOSkVD
VElPTlMgJiYgdHlwZSA9PT0gJ21vZGVsJykgeworICAgICAgaWYgKGZhY3RvcnkgJiYgdHlwZW9m
IGZhY3RvcnkuX29uTG9va3VwID09PSAnZnVuY3Rpb24nKSB7CisgICAgICAgIGZhY3RvcnkuX29u
TG9va3VwKGZ1bGxOYW1lKTsKKyAgICAgIH0KKworICAgICAgLy8gVE9ETzogdGhpbmsgYWJvdXQg
YSAnc2FmZScgbWVyZ2Ugc3R5bGUgZXh0ZW5zaW9uCisgICAgICAvLyBmb3Igbm93IGp1c3QgZmFs
bGJhY2sgdG8gY3JlYXRlIHRpbWUgaW5qZWN0aW9uCisgICAgICBjYWNoZVtmdWxsTmFtZV0gPSBm
YWN0b3J5OworICAgICAgcmV0dXJuIGZhY3Rvcnk7CisgICAgfSBlbHNlIHsKKyAgICAgIHZhciBp
bmplY3Rpb25zID0gaW5qZWN0aW9uc0Zvcihjb250YWluZXIsIGZ1bGxOYW1lKTsKKyAgICAgIHZh
ciBmYWN0b3J5SW5qZWN0aW9ucyA9IGZhY3RvcnlJbmplY3Rpb25zRm9yKGNvbnRhaW5lciwgZnVs
bE5hbWUpOworICAgICAgdmFyIGNhY2hlYWJsZSA9ICFhcmVJbmplY3Rpb25zRHluYW1pYyhpbmpl
Y3Rpb25zKSAmJiAhYXJlSW5qZWN0aW9uc0R5bmFtaWMoZmFjdG9yeUluamVjdGlvbnMpOworCisg
ICAgICBmYWN0b3J5SW5qZWN0aW9ucy5fdG9TdHJpbmcgPSByZWdpc3RyeS5tYWtlVG9TdHJpbmco
ZmFjdG9yeSwgZnVsbE5hbWUpOworCisgICAgICB2YXIgaW5qZWN0ZWRGYWN0b3J5ID0gZmFjdG9y
eS5leHRlbmQoaW5qZWN0aW9ucyk7CisKKyAgICAgIC8vIFRPRE8gLSByZW1vdmUgYWxsIGBjb250
YWluZXJgIGluamVjdGlvbnMgd2hlbiBFbWJlciByZWFjaGVzIHYzLjAuMAorICAgICAgaW5qZWN0
RGVwcmVjYXRlZENvbnRhaW5lcihpbmplY3RlZEZhY3RvcnkucHJvdG90eXBlLCBjb250YWluZXIp
OworICAgICAgaW5qZWN0ZWRGYWN0b3J5LnJlb3BlbkNsYXNzKGZhY3RvcnlJbmplY3Rpb25zKTsK
KworICAgICAgaWYgKGZhY3RvcnkgJiYgdHlwZW9mIGZhY3RvcnkuX29uTG9va3VwID09PSAnZnVu
Y3Rpb24nKSB7CisgICAgICAgIGZhY3RvcnkuX29uTG9va3VwKGZ1bGxOYW1lKTsKKyAgICAgIH0K
KworICAgICAgaWYgKGNhY2hlYWJsZSkgeworICAgICAgICBjYWNoZVtmdWxsTmFtZV0gPSBpbmpl
Y3RlZEZhY3Rvcnk7CisgICAgICB9CisKKyAgICAgIHJldHVybiBpbmplY3RlZEZhY3Rvcnk7Cisg
ICAgfQorICB9CisKKyAgZnVuY3Rpb24gaW5qZWN0aW9uc0Zvcihjb250YWluZXIsIGZ1bGxOYW1l
KSB7CisgICAgdmFyIHJlZ2lzdHJ5ID0gY29udGFpbmVyLnJlZ2lzdHJ5OworICAgIHZhciBzcGxp
dE5hbWUgPSBmdWxsTmFtZS5zcGxpdCgnOicpOworICAgIHZhciB0eXBlID0gc3BsaXROYW1lWzBd
OworCisgICAgdmFyIGluamVjdGlvbnMgPSBidWlsZEluamVjdGlvbnMoY29udGFpbmVyLCByZWdp
c3RyeS5nZXRUeXBlSW5qZWN0aW9ucyh0eXBlKSwgcmVnaXN0cnkuZ2V0SW5qZWN0aW9ucyhmdWxs
TmFtZSkpOworICAgIGluamVjdGlvbnMuX2RlYnVnQ29udGFpbmVyS2V5ID0gZnVsbE5hbWU7CisK
KyAgICBfY29udGFpbmVyT3duZXIuc2V0T3duZXIoaW5qZWN0aW9ucywgY29udGFpbmVyLm93bmVy
KTsKKworICAgIHJldHVybiBpbmplY3Rpb25zOworICB9CisKKyAgZnVuY3Rpb24gZmFjdG9yeUlu
amVjdGlvbnNGb3IoY29udGFpbmVyLCBmdWxsTmFtZSkgeworICAgIHZhciByZWdpc3RyeSA9IGNv
bnRhaW5lci5yZWdpc3RyeTsKKyAgICB2YXIgc3BsaXROYW1lID0gZnVsbE5hbWUuc3BsaXQoJzon
KTsKKyAgICB2YXIgdHlwZSA9IHNwbGl0TmFtZVswXTsKKworICAgIHZhciBmYWN0b3J5SW5qZWN0
aW9ucyA9IGJ1aWxkSW5qZWN0aW9ucyhjb250YWluZXIsIHJlZ2lzdHJ5LmdldEZhY3RvcnlUeXBl
SW5qZWN0aW9ucyh0eXBlKSwgcmVnaXN0cnkuZ2V0RmFjdG9yeUluamVjdGlvbnMoZnVsbE5hbWUp
KTsKKyAgICBmYWN0b3J5SW5qZWN0aW9ucy5fZGVidWdDb250YWluZXJLZXkgPSBmdWxsTmFtZTsK
KworICAgIHJldHVybiBmYWN0b3J5SW5qZWN0aW9uczsKKyAgfQorCisgIGZ1bmN0aW9uIGluc3Rh
bnRpYXRlKGNvbnRhaW5lciwgZnVsbE5hbWUpIHsKKyAgICB2YXIgZmFjdG9yeSA9IGZhY3RvcnlG
b3IoY29udGFpbmVyLCBmdWxsTmFtZSk7CisgICAgdmFyIGxhenlJbmplY3Rpb25zLCB2YWxpZGF0
aW9uQ2FjaGU7CisKKyAgICBpZiAoY29udGFpbmVyLnJlZ2lzdHJ5LmdldE9wdGlvbihmdWxsTmFt
ZSwgJ2luc3RhbnRpYXRlJykgPT09IGZhbHNlKSB7CisgICAgICByZXR1cm4gZmFjdG9yeTsKKyAg
ICB9CisKKyAgICBpZiAoZmFjdG9yeSkgeworICAgICAgaWYgKHR5cGVvZiBmYWN0b3J5LmNyZWF0
ZSAhPT0gJ2Z1bmN0aW9uJykgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBj
cmVhdGUgYW4gaW5zdGFuY2Ugb2YgXCcnICsgZnVsbE5hbWUgKyAnXCcuICcgKyAnTW9zdCBsaWtl
bHkgYW4gaW1wcm9wZXJseSBkZWZpbmVkIGNsYXNzIG9yIGFuIGludmFsaWQgbW9kdWxlIGV4cG9y
dC4nKTsKKyAgICAgIH0KKworICAgICAgdmFsaWRhdGlvbkNhY2hlID0gY29udGFpbmVyLnZhbGlk
YXRpb25DYWNoZTsKKworICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5ydW5JbkRlYnVnKGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQgYWxsIGxhenkgaW5qZWN0aW9ucyBhcmUgdmFs
aWQgYXQgaW5zdGFudGlhdGlvbiB0aW1lCisgICAgICAgIGlmICghdmFsaWRhdGlvbkNhY2hlW2Z1
bGxOYW1lXSAmJiB0eXBlb2YgZmFjdG9yeS5fbGF6eUluamVjdGlvbnMgPT09ICdmdW5jdGlvbicp
IHsKKyAgICAgICAgICBsYXp5SW5qZWN0aW9ucyA9IGZhY3RvcnkuX2xhenlJbmplY3Rpb25zKCk7
CisgICAgICAgICAgbGF6eUluamVjdGlvbnMgPSBjb250YWluZXIucmVnaXN0cnkubm9ybWFsaXpl
SW5qZWN0aW9uc0hhc2gobGF6eUluamVjdGlvbnMpOworCisgICAgICAgICAgY29udGFpbmVyLnJl
Z2lzdHJ5LnZhbGlkYXRlSW5qZWN0aW9ucyhsYXp5SW5qZWN0aW9ucyk7CisgICAgICAgIH0KKyAg
ICAgIH0pOworCisgICAgICB2YWxpZGF0aW9uQ2FjaGVbZnVsbE5hbWVdID0gdHJ1ZTsKKworICAg
ICAgdmFyIG9iaiA9IHVuZGVmaW5lZDsKKworICAgICAgaWYgKHR5cGVvZiBmYWN0b3J5LmV4dGVu
ZCA9PT0gJ2Z1bmN0aW9uJykgeworICAgICAgICAvLyBhc3N1bWUgdGhlIGZhY3Rvcnkgd2FzIGV4
dGVuZGFibGUgYW5kIGlzIGFscmVhZHkgaW5qZWN0ZWQKKyAgICAgICAgb2JqID0gZmFjdG9yeS5j
cmVhdGUoKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIC8vIGFzc3VtZSB0aGUgZmFjdG9yeSB3
YXMgZXh0ZW5kYWJsZQorICAgICAgICAvLyB0byBjcmVhdGUgdGltZSBpbmplY3Rpb25zCisgICAg
ICAgIC8vIFRPRE86IHN1cHBvcnQgbmV3J2luZyBmb3IgaW5zdGFudGlhdGlvbiBhbmQgbWVyZ2Ug
aW5qZWN0aW9ucyBmb3IgcHVyZSBKUyBGdW5jdGlvbnMKKyAgICAgICAgdmFyIGluamVjdGlvbnMg
PSBpbmplY3Rpb25zRm9yKGNvbnRhaW5lciwgZnVsbE5hbWUpOworCisgICAgICAgIC8vIEVuc3Vy
ZSB0aGF0IGEgY29udGFpbmVyIGlzIGF2YWlsYWJsZSB0byBhbiBvYmplY3QgZHVyaW5nIGluc3Rh
bnRpYXRpb24uCisgICAgICAgIC8vIFRPRE8gLSByZW1vdmUgd2hlbiBFbWJlciByZWFjaGVzIHYz
LjAuMAorICAgICAgICAvLyBUaGlzICJmYWtlIiBjb250YWluZXIgd2lsbCBiZSByZXBsYWNlZCBh
ZnRlciBpbnN0YW50aWF0aW9uIHdpdGggYQorICAgICAgICAvLyBwcm9wZXJ0eSB0aGF0IHJhaXNl
cyBkZXByZWNhdGlvbnMgZXZlcnkgdGltZSBpdCBpcyBhY2Nlc3NlZC4KKyAgICAgICAgaW5qZWN0
aW9ucy5jb250YWluZXIgPSBjb250YWluZXIuX2Zha2VDb250YWluZXJUb0luamVjdDsKKyAgICAg
ICAgb2JqID0gZmFjdG9yeS5jcmVhdGUoaW5qZWN0aW9ucyk7CisKKyAgICAgICAgLy8gVE9ETyAt
IHJlbW92ZSB3aGVuIEVtYmVyIHJlYWNoZXMgdjMuMC4wCisgICAgICAgIGlmICghT2JqZWN0Lmlz
RnJvemVuKG9iaikgJiYgJ2NvbnRhaW5lcicgaW4gb2JqKSB7CisgICAgICAgICAgaW5qZWN0RGVw
cmVjYXRlZENvbnRhaW5lcihvYmosIGNvbnRhaW5lcik7CisgICAgICAgIH0KKyAgICAgIH0KKwor
ICAgICAgcmV0dXJuIG9iajsKKyAgICB9CisgIH0KKworICAvLyBUT0RPIC0gcmVtb3ZlIHdoZW4g
RW1iZXIgcmVhY2hlcyB2My4wLjAKKyAgZnVuY3Rpb24gaW5qZWN0RGVwcmVjYXRlZENvbnRhaW5l
cihvYmplY3QsIGNvbnRhaW5lcikgeworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3Qs
ICdjb250YWluZXInLCB7CisgICAgICBjb25maWd1cmFibGU6IHRydWUsCisgICAgICBlbnVtZXJh
YmxlOiBmYWxzZSwKKyAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICBfZW1iZXJNZXRh
bERlYnVnLmRlcHJlY2F0ZSgnVXNpbmcgdGhlIGluamVjdGVkIGBjb250YWluZXJgIGlzIGRlcHJl
Y2F0ZWQuIFBsZWFzZSB1c2UgdGhlIGBnZXRPd25lcmAgaGVscGVyIGluc3RlYWQgdG8gYWNjZXNz
IHRoZSBvd25lciBvZiB0aGlzIG9iamVjdC4nLCBmYWxzZSwgeyBpZDogJ2VtYmVyLWFwcGxpY2F0
aW9uLmluamVjdGVkLWNvbnRhaW5lcicsIHVudGlsOiAnMy4wLjAnLCB1cmw6ICdodHRwOi8vZW1i
ZXJqcy5jb20vZGVwcmVjYXRpb25zL3YyLngjdG9jX2luamVjdGVkLWNvbnRhaW5lci1hY2Nlc3Mn
IH0pOworICAgICAgICByZXR1cm4gdGhpc1tDT05UQUlORVJfT1ZFUlJJREVdIHx8IGNvbnRhaW5l
cjsKKyAgICAgIH0sCisKKyAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgIF9l
bWJlck1ldGFsRGVidWcuZGVwcmVjYXRlKCdQcm92aWRpbmcgdGhlIGBjb250YWluZXJgIHByb3Bl
cnR5IHRvICcgKyB0aGlzICsgJyBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIGBFbWJlci5zZXRP
d25lcmAgb3IgYG93bmVyLm93bmVySW5qZWN0aW9uKClgIGluc3RlYWQgdG8gcHJvdmlkZSBhbiBv
d25lciB0byB0aGUgaW5zdGFuY2UgYmVpbmcgY3JlYXRlZC4nLCBmYWxzZSwgeyBpZDogJ2VtYmVy
LWFwcGxpY2F0aW9uLmluamVjdGVkLWNvbnRhaW5lcicsIHVudGlsOiAnMy4wLjAnLCB1cmw6ICdo
dHRwOi8vZW1iZXJqcy5jb20vZGVwcmVjYXRpb25zL3YyLngjdG9jX2luamVjdGVkLWNvbnRhaW5l
ci1hY2Nlc3MnIH0pOworCisgICAgICAgIHRoaXNbQ09OVEFJTkVSX09WRVJSSURFXSA9IHZhbHVl
OworCisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIGZ1
bmN0aW9uIGVhY2hEZXN0cm95YWJsZShjb250YWluZXIsIGNhbGxiYWNrKSB7CisgICAgdmFyIGNh
Y2hlID0gY29udGFpbmVyLmNhY2hlOworICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoY2FjaGUp
OworICAgIHZhciBrZXksIHZhbHVlOworCisgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBrZXlzLmxl
bmd0aDsgaSA8IGw7IGkrKykgeworICAgICAga2V5ID0ga2V5c1tpXTsKKyAgICAgIHZhbHVlID0g
Y2FjaGVba2V5XTsKKworICAgICAgaWYgKGNvbnRhaW5lci5yZWdpc3RyeS5nZXRPcHRpb24oa2V5
LCAnaW5zdGFudGlhdGUnKSAhPT0gZmFsc2UpIHsKKyAgICAgICAgY2FsbGJhY2sodmFsdWUpOwor
ICAgICAgfQorICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIHJlc2V0Q2FjaGUoY29udGFpbmVyKSB7
CisgICAgZWFjaERlc3Ryb3lhYmxlKGNvbnRhaW5lciwgZnVuY3Rpb24gKHZhbHVlKSB7CisgICAg
ICBpZiAodmFsdWUuZGVzdHJveSkgeworICAgICAgICB2YWx1ZS5kZXN0cm95KCk7CisgICAgICB9
CisgICAgfSk7CisKKyAgICBjb250YWluZXIuY2FjaGUuZGljdCA9IF9lbWJlck1ldGFsRGljdGlv
bmFyeS5kZWZhdWx0KG51bGwpOworICB9CisKKyAgZnVuY3Rpb24gcmVzZXRNZW1iZXIoY29udGFp
bmVyLCBmdWxsTmFtZSkgeworICAgIHZhciBtZW1iZXIgPSBjb250YWluZXIuY2FjaGVbZnVsbE5h
bWVdOworCisgICAgZGVsZXRlIGNvbnRhaW5lci5mYWN0b3J5Q2FjaGVbZnVsbE5hbWVdOworCisg
ICAgaWYgKG1lbWJlcikgeworICAgICAgZGVsZXRlIGNvbnRhaW5lci5jYWNoZVtmdWxsTmFtZV07
CisKKyAgICAgIGlmIChtZW1iZXIuZGVzdHJveSkgeworICAgICAgICBtZW1iZXIuZGVzdHJveSgp
OworICAgICAgfQorICAgIH0KKyAgfQorCisgIGV4cG9ydHMuZGVmYXVsdCA9IENvbnRhaW5lcjsK
K30pOworZW5pZmVkKCdjb250YWluZXIvaW5kZXgnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwv
Y29yZScsICdjb250YWluZXIvcmVnaXN0cnknLCAnY29udGFpbmVyL2NvbnRhaW5lcicsICdjb250
YWluZXIvb3duZXInXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsQ29yZSwgX2NvbnRh
aW5lclJlZ2lzdHJ5LCBfY29udGFpbmVyQ29udGFpbmVyLCBfY29udGFpbmVyT3duZXIpIHsKKyAg
J3VzZSBzdHJpY3QnOworCisgIC8qCisgIFB1YmxpYyBBUEkgZm9yIHRoZSBjb250YWluZXIgaXMg
c3RpbGwgaW4gZmx1eC4KKyAgVGhlIHB1YmxpYyBBUEksIHNwZWNpZmllZCBvbiB0aGUgYXBwbGlj
YXRpb24gbmFtZXNwYWNlIHNob3VsZCBiZSBjb25zaWRlcmVkIHRoZSBzdGFibGUgQVBJLgorICAv
LyBAbW9kdWxlIGNvbnRhaW5lcgorICAgIEBwcml2YXRlCisgICovCisKKyAgLyoKKyAgIEZsYWcg
dG8gZW5hYmxlL2Rpc2FibGUgbW9kZWwgZmFjdG9yeSBpbmplY3Rpb25zIChkaXNhYmxlZCBieSBk
ZWZhdWx0KS4KKyAgIElmIG1vZGVsIGZhY3RvcnkgaW5qZWN0aW9ucyBhcmUgZW5hYmxlZCwgbW9k
ZWxzIHNob3VsZCBub3QgYmUKKyAgIGFjY2Vzc2VkIGdsb2JhbGx5IChvbmx5IHRocm91Z2ggYGNv
bnRhaW5lci5sb29rdXBGYWN0b3J5KCdtb2RlbDptb2RlbE5hbWUnKSlgKTsKKyAgKi8KKyAgX2Vt
YmVyTWV0YWxDb3JlLmRlZmF1bHQuTU9ERUxfRkFDVE9SWV9JTkpFQ1RJT05TID0gZmFsc2U7CisK
KyAgaWYgKF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LkVOViAmJiB0eXBlb2YgX2VtYmVyTWV0YWxD
b3JlLmRlZmF1bHQuRU5WLk1PREVMX0ZBQ1RPUllfSU5KRUNUSU9OUyAhPT0gJ3VuZGVmaW5lZCcp
IHsKKyAgICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5NT0RFTF9GQUNUT1JZX0lOSkVDVElPTlMg
PSAhIV9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LkVOVi5NT0RFTF9GQUNUT1JZX0lOSkVDVElPTlM7
CisgIH0KKworICBleHBvcnRzLlJlZ2lzdHJ5ID0gX2NvbnRhaW5lclJlZ2lzdHJ5LmRlZmF1bHQ7
CisgIGV4cG9ydHMuQ29udGFpbmVyID0gX2NvbnRhaW5lckNvbnRhaW5lci5kZWZhdWx0OworICBl
eHBvcnRzLmdldE93bmVyID0gX2NvbnRhaW5lck93bmVyLmdldE93bmVyOworICBleHBvcnRzLnNl
dE93bmVyID0gX2NvbnRhaW5lck93bmVyLnNldE93bmVyOworfSk7CitlbmlmZWQoJ2NvbnRhaW5l
ci9vd25lcicsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9zeW1ib2wnXSwgZnVuY3Rpb24gKGV4
cG9ydHMsIF9lbWJlck1ldGFsU3ltYm9sKSB7CisgIC8qKgorICBAbW9kdWxlIGVtYmVyCisgIEBz
dWJtb2R1bGUgZW1iZXItcnVudGltZQorICAqLworCisgICd1c2Ugc3RyaWN0JzsKKworICBleHBv
cnRzLmdldE93bmVyID0gZ2V0T3duZXI7CisgIGV4cG9ydHMuc2V0T3duZXIgPSBzZXRPd25lcjsK
KyAgdmFyIE9XTkVSID0gX2VtYmVyTWV0YWxTeW1ib2wuZGVmYXVsdCgnT1dORVInKTsKKworICBl
eHBvcnRzLk9XTkVSID0gT1dORVI7CisgIC8qKgorICAgIEZyYW1ld29yayBvYmplY3RzIGluIGFu
IEVtYmVyIGFwcGxpY2F0aW9uIChjb21wb25lbnRzLCBzZXJ2aWNlcywgcm91dGVzLCBldGMuKQor
ICAgIGFyZSBjcmVhdGVkIHZpYSBhIGZhY3RvcnkgYW5kIGRlcGVuZGVuY3kgaW5qZWN0aW9uIHN5
c3RlbS4gRWFjaCBvZiB0aGVzZQorICAgIG9iamVjdHMgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9m
IGFuICJvd25lciIsIHdoaWNoIGhhbmRsZWQgaXRzCisgICAgaW5zdGFudGlhdGlvbiBhbmQgbWFu
YWdlcyBpdHMgbGlmZXRpbWUuCisgIAorICAgIGBnZXRPd25lcmAgZmV0Y2hlcyB0aGUgb3duZXIg
b2JqZWN0IHJlc3BvbnNpYmxlIGZvciBhbiBpbnN0YW5jZS4gVGhpcyBjYW4KKyAgICBiZSB1c2Vk
IHRvIGxvb2t1cCBvciByZXNvbHZlIG90aGVyIGNsYXNzIGluc3RhbmNlcywgb3IgcmVnaXN0ZXIg
bmV3IGZhY3RvcmllcworICAgIGludG8gdGhlIG93bmVyLgorICAKKyAgICBGb3IgZXhhbXBsZSwg
dGhpcyBjb21wb25lbnQgZHluYW1pY2FsbHkgbG9va3MgdXAgYSBzZXJ2aWNlIGJhc2VkIG9uIHRo
ZQorICAgIGBhdWRpb1R5cGVgIHBhc3NlZCBhcyBhbiBhdHRyaWJ1dGU6CisgIAorICAgIGBgYAor
ICAgIC8vIGFwcC9jb21wb25lbnRzL3BsYXktYXVkaW8uanMKKyAgICBpbXBvcnQgRW1iZXIgZnJv
bSAnZW1iZXInOworICAKKyAgICAvLyBVc2FnZToKKyAgICAvLworICAgIC8vICAge3twbGF5LWF1
ZGlvIGF1ZGlvVHlwZT1tb2RlbC5hdWRpb1R5cGUgYXVkaW9GaWxlPW1vZGVsLmZpbGV9fQorICAg
IC8vCisgICAgZXhwb3J0IGRlZmF1bHQgRW1iZXIuQ29tcG9uZW50LmV4dGVuZCh7CisgICAgICBh
dWRpb1NlcnZpY2U6IEVtYmVyLmNvbXB1dGVkKCdhdWRpb1R5cGUnLCBmdW5jdGlvbigpIHsKKyAg
ICAgICAgbGV0IG93bmVyID0gRW1iZXIuZ2V0T3duZXIodGhpcyk7CisgICAgICAgIHJldHVybiBv
d25lci5sb29rdXAoYHNlcnZpY2U6JHt0aGlzLmdldCgnYXVkaW9UeXBlJyl9YCk7CisgICAgICB9
KSwKKyAgICAgIGNsaWNrKCkgeworICAgICAgICBsZXQgcGxheWVyID0gdGhpcy5nZXQoJ2F1ZGlv
U2VydmljZScpOworICAgICAgICBwbGF5ZXIucGxheSh0aGlzLmdldCgnYXVkaW9GaWxlJykpOwor
ICAgICAgfQorICAgIH0pOworICAgIGBgYAorICAKKyAgICBAbWV0aG9kIGdldE93bmVyCisgICAg
QHBhcmFtIHtPYmplY3R9IG9iamVjdCBBbiBvYmplY3Qgd2l0aCBhbiBvd25lci4KKyAgICBAcmV0
dXJuIHtPYmplY3R9IEFuIG93bmVyIG9iamVjdC4KKyAgICBAZm9yIEVtYmVyCisgICAgQHB1Ymxp
YworICAqLworCisgIGZ1bmN0aW9uIGdldE93bmVyKG9iamVjdCkgeworICAgIHJldHVybiBvYmpl
Y3RbT1dORVJdOworICB9CisKKyAgLyoqCisgICAgYHNldE93bmVyYCBmb3JjZXMgYSBuZXcgb3du
ZXIgb24gYSBnaXZlbiBvYmplY3QgaW5zdGFuY2UuIFRoaXMgaXMgcHJpbWFyaWx5CisgICAgdXNl
ZnVsIGluIHNvbWUgdGVzdGluZyBjYXNlcy4KKyAgCisgICAgQG1ldGhvZCBzZXRPd25lcgorICAg
IEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgQW4gb2JqZWN0IHdpdGggYW4gb3duZXIuCisgICAgQHJl
dHVybiB7T2JqZWN0fSBBbiBvd25lciBvYmplY3QuCisgICAgQGZvciBFbWJlcgorICAgIEBwdWJs
aWMKKyAgKi8KKworICBmdW5jdGlvbiBzZXRPd25lcihvYmplY3QsIG93bmVyKSB7CisgICAgb2Jq
ZWN0W09XTkVSXSA9IG93bmVyOworICB9Cit9KTsKK2VuaWZlZCgnY29udGFpbmVyL3JlZ2lzdHJ5
JywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2ZlYXR1cmVzJywgJ2VtYmVyLW1ldGFsL2RlYnVn
JywgJ2VtYmVyLW1ldGFsL2RpY3Rpb25hcnknLCAnZW1iZXItbWV0YWwvZW1wdHlfb2JqZWN0Jywg
J2VtYmVyLW1ldGFsL2Fzc2lnbicsICdjb250YWluZXIvY29udGFpbmVyJywgJ2VtYmVyLW1ldGFs
L3V0aWxzJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbEZlYXR1cmVzLCBfZW1iZXJN
ZXRhbERlYnVnLCBfZW1iZXJNZXRhbERpY3Rpb25hcnksIF9lbWJlck1ldGFsRW1wdHlfb2JqZWN0
LCBfZW1iZXJNZXRhbEFzc2lnbiwgX2NvbnRhaW5lckNvbnRhaW5lciwgX2VtYmVyTWV0YWxVdGls
cykgeworICAndXNlIHN0cmljdCc7CisKKyAgZXhwb3J0cy5wcml2YXRpemUgPSBwcml2YXRpemU7
CisKKyAgdmFyIFZBTElEX0ZVTExfTkFNRV9SRUdFWFAgPSAvXlteOl0rOlteOl0rJC87CisKKyAg
LyoqCisgICBBIHJlZ2lzdHJ5IHVzZWQgdG8gc3RvcmUgZmFjdG9yeSBhbmQgb3B0aW9uIGluZm9y
bWF0aW9uIGtleWVkCisgICBieSB0eXBlLgorICAKKyAgIEEgYFJlZ2lzdHJ5YCBzdG9yZXMgdGhl
IGZhY3RvcnkgYW5kIG9wdGlvbiBpbmZvcm1hdGlvbiBuZWVkZWQgYnkgYQorICAgYENvbnRhaW5l
cmAgdG8gaW5zdGFudGlhdGUgYW5kIGNhY2hlIG9iamVjdHMuCisgIAorICAgVGhlIEFQSSBmb3Ig
YFJlZ2lzdHJ5YCBpcyBzdGlsbCBpbiBmbHV4IGFuZCBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQg
c3RhYmxlLgorICAKKyAgIEBwcml2YXRlCisgICBAY2xhc3MgUmVnaXN0cnkKKyAgIEBzaW5jZSAx
LjExLjAKKyAgKi8KKyAgZnVuY3Rpb24gUmVnaXN0cnkob3B0aW9ucykgeworICAgIHRoaXMuZmFs
bGJhY2sgPSBvcHRpb25zICYmIG9wdGlvbnMuZmFsbGJhY2sgPyBvcHRpb25zLmZhbGxiYWNrIDog
bnVsbDsKKworICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMucmVzb2x2ZXIpIHsKKyAgICAgIHRo
aXMucmVzb2x2ZXIgPSBvcHRpb25zLnJlc29sdmVyOworCisgICAgICBpZiAodHlwZW9mIHRoaXMu
cmVzb2x2ZXIgPT09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgZGVwcmVjYXRlUmVzb2x2ZXJGdW5j
dGlvbih0aGlzKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICB0aGlzLnJlZ2lzdHJhdGlvbnMgPSBf
ZW1iZXJNZXRhbERpY3Rpb25hcnkuZGVmYXVsdChvcHRpb25zICYmIG9wdGlvbnMucmVnaXN0cmF0
aW9ucyA/IG9wdGlvbnMucmVnaXN0cmF0aW9ucyA6IG51bGwpOworCisgICAgdGhpcy5fdHlwZUlu
amVjdGlvbnMgPSBfZW1iZXJNZXRhbERpY3Rpb25hcnkuZGVmYXVsdChudWxsKTsKKyAgICB0aGlz
Ll9pbmplY3Rpb25zID0gX2VtYmVyTWV0YWxEaWN0aW9uYXJ5LmRlZmF1bHQobnVsbCk7CisgICAg
dGhpcy5fZmFjdG9yeVR5cGVJbmplY3Rpb25zID0gX2VtYmVyTWV0YWxEaWN0aW9uYXJ5LmRlZmF1
bHQobnVsbCk7CisgICAgdGhpcy5fZmFjdG9yeUluamVjdGlvbnMgPSBfZW1iZXJNZXRhbERpY3Rp
b25hcnkuZGVmYXVsdChudWxsKTsKKworICAgIHRoaXMuX2xvY2FsTG9va3VwQ2FjaGUgPSBuZXcg
X2VtYmVyTWV0YWxFbXB0eV9vYmplY3QuZGVmYXVsdCgpOworICAgIHRoaXMuX25vcm1hbGl6ZUNh
Y2hlID0gX2VtYmVyTWV0YWxEaWN0aW9uYXJ5LmRlZmF1bHQobnVsbCk7CisgICAgdGhpcy5fcmVz
b2x2ZUNhY2hlID0gX2VtYmVyTWV0YWxEaWN0aW9uYXJ5LmRlZmF1bHQobnVsbCk7CisgICAgdGhp
cy5fZmFpbENhY2hlID0gX2VtYmVyTWV0YWxEaWN0aW9uYXJ5LmRlZmF1bHQobnVsbCk7CisKKyAg
ICB0aGlzLl9vcHRpb25zID0gX2VtYmVyTWV0YWxEaWN0aW9uYXJ5LmRlZmF1bHQobnVsbCk7Cisg
ICAgdGhpcy5fdHlwZU9wdGlvbnMgPSBfZW1iZXJNZXRhbERpY3Rpb25hcnkuZGVmYXVsdChudWxs
KTsKKyAgfQorCisgIFJlZ2lzdHJ5LnByb3RvdHlwZSA9IHsKKyAgICAvKioKKyAgICAgQSBiYWNr
dXAgcmVnaXN0cnkgZm9yIHJlc29sdmluZyByZWdpc3RyYXRpb25zIHdoZW4gbm8gbWF0Y2hlcyBj
YW4gYmUgZm91bmQuCisgICAgICBAcHJpdmF0ZQorICAgICBAcHJvcGVydHkgZmFsbGJhY2sKKyAg
ICAgQHR5cGUgUmVnaXN0cnkKKyAgICAgKi8KKyAgICBmYWxsYmFjazogbnVsbCwKKworICAgIC8q
KgorICAgICBBbiBvYmplY3QgdGhhdCBoYXMgYSBgcmVzb2x2ZWAgbWV0aG9kIHRoYXQgcmVzb2x2
ZXMgYSBuYW1lLgorICAgICAgQHByaXZhdGUKKyAgICAgQHByb3BlcnR5IHJlc29sdmVyCisgICAg
IEB0eXBlIFJlc29sdmVyCisgICAgICovCisgICAgcmVzb2x2ZXI6IG51bGwsCisKKyAgICAvKioK
KyAgICAgQHByaXZhdGUKKyAgICAgQHByb3BlcnR5IHJlZ2lzdHJhdGlvbnMKKyAgICAgQHR5cGUg
SW5oZXJpdGluZ0RpY3QKKyAgICAgKi8KKyAgICByZWdpc3RyYXRpb25zOiBudWxsLAorCisgICAg
LyoqCisgICAgIEBwcml2YXRlCisgICAgICBAcHJvcGVydHkgX3R5cGVJbmplY3Rpb25zCisgICAg
IEB0eXBlIEluaGVyaXRpbmdEaWN0CisgICAgICovCisgICAgX3R5cGVJbmplY3Rpb25zOiBudWxs
LAorCisgICAgLyoqCisgICAgIEBwcml2YXRlCisgICAgICBAcHJvcGVydHkgX2luamVjdGlvbnMK
KyAgICAgQHR5cGUgSW5oZXJpdGluZ0RpY3QKKyAgICAgKi8KKyAgICBfaW5qZWN0aW9uczogbnVs
bCwKKworICAgIC8qKgorICAgICBAcHJpdmF0ZQorICAgICAgQHByb3BlcnR5IF9mYWN0b3J5VHlw
ZUluamVjdGlvbnMKKyAgICAgQHR5cGUgSW5oZXJpdGluZ0RpY3QKKyAgICAgKi8KKyAgICBfZmFj
dG9yeVR5cGVJbmplY3Rpb25zOiBudWxsLAorCisgICAgLyoqCisgICAgIEBwcml2YXRlCisgICAg
ICBAcHJvcGVydHkgX2ZhY3RvcnlJbmplY3Rpb25zCisgICAgIEB0eXBlIEluaGVyaXRpbmdEaWN0
CisgICAgICovCisgICAgX2ZhY3RvcnlJbmplY3Rpb25zOiBudWxsLAorCisgICAgLyoqCisgICAg
IEBwcml2YXRlCisgICAgICBAcHJvcGVydHkgX25vcm1hbGl6ZUNhY2hlCisgICAgIEB0eXBlIElu
aGVyaXRpbmdEaWN0CisgICAgICovCisgICAgX25vcm1hbGl6ZUNhY2hlOiBudWxsLAorCisgICAg
LyoqCisgICAgIEBwcml2YXRlCisgICAgICBAcHJvcGVydHkgX3Jlc29sdmVDYWNoZQorICAgICBA
dHlwZSBJbmhlcml0aW5nRGljdAorICAgICAqLworICAgIF9yZXNvbHZlQ2FjaGU6IG51bGwsCisK
KyAgICAvKioKKyAgICAgQHByaXZhdGUKKyAgICAgIEBwcm9wZXJ0eSBfb3B0aW9ucworICAgICBA
dHlwZSBJbmhlcml0aW5nRGljdAorICAgICAqLworICAgIF9vcHRpb25zOiBudWxsLAorCisgICAg
LyoqCisgICAgIEBwcml2YXRlCisgICAgICBAcHJvcGVydHkgX3R5cGVPcHRpb25zCisgICAgIEB0
eXBlIEluaGVyaXRpbmdEaWN0CisgICAgICovCisgICAgX3R5cGVPcHRpb25zOiBudWxsLAorCisg
ICAgLyoqCisgICAgIENyZWF0ZXMgYSBjb250YWluZXIgYmFzZWQgb24gdGhpcyByZWdpc3RyeS4K
KyAgICAgIEBwcml2YXRlCisgICAgIEBtZXRob2QgY29udGFpbmVyCisgICAgIEBwYXJhbSB7T2Jq
ZWN0fSBvcHRpb25zCisgICAgIEByZXR1cm4ge0NvbnRhaW5lcn0gY3JlYXRlZCBjb250YWluZXIK
KyAgICAgKi8KKyAgICBjb250YWluZXI6IGZ1bmN0aW9uIChvcHRpb25zKSB7CisgICAgICByZXR1
cm4gbmV3IF9jb250YWluZXJDb250YWluZXIuZGVmYXVsdCh0aGlzLCBvcHRpb25zKTsKKyAgICB9
LAorCisgICAgLyoqCisgICAgIFJlZ2lzdGVycyBhIGZhY3RvcnkgZm9yIGxhdGVyIGluamVjdGlv
bi4KKyAgICAgIEV4YW1wbGU6CisgICAgICBgYGBqYXZhc2NyaXB0CisgICAgIHZhciByZWdpc3Ry
eSA9IG5ldyBSZWdpc3RyeSgpOworICAgICAgcmVnaXN0cnkucmVnaXN0ZXIoJ21vZGVsOnVzZXIn
LCBQZXJzb24sIHtzaW5nbGV0b246IGZhbHNlIH0pOworICAgICByZWdpc3RyeS5yZWdpc3Rlcign
ZnJ1aXQ6ZmF2b3JpdGUnLCBPcmFuZ2UpOworICAgICByZWdpc3RyeS5yZWdpc3RlcignY29tbXVu
aWNhdGlvbjptYWluJywgRW1haWwsIHtzaW5nbGV0b246IGZhbHNlfSk7CisgICAgIGBgYAorICAg
ICAgQHByaXZhdGUKKyAgICAgQG1ldGhvZCByZWdpc3RlcgorICAgICBAcGFyYW0ge1N0cmluZ30g
ZnVsbE5hbWUKKyAgICAgQHBhcmFtIHtGdW5jdGlvbn0gZmFjdG9yeQorICAgICBAcGFyYW0ge09i
amVjdH0gb3B0aW9ucworICAgICAqLworICAgIHJlZ2lzdGVyOiBmdW5jdGlvbiAoZnVsbE5hbWUs
IGZhY3RvcnkpIHsKKyAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA8PSAyIHx8
IGFyZ3VtZW50c1syXSA9PT0gdW5kZWZpbmVkID8ge30gOiBhcmd1bWVudHNbMl07CisKKyAgICAg
IF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdmdWxsTmFtZSBtdXN0IGJlIGEgcHJvcGVyIGZ1bGwg
bmFtZScsIHRoaXMudmFsaWRhdGVGdWxsTmFtZShmdWxsTmFtZSkpOworCisgICAgICBpZiAoZmFj
dG9yeSA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0F0dGVt
cHRpbmcgdG8gcmVnaXN0ZXIgYW4gdW5rbm93biBmYWN0b3J5OiBgJyArIGZ1bGxOYW1lICsgJ2An
KTsKKyAgICAgIH0KKworICAgICAgdmFyIG5vcm1hbGl6ZWROYW1lID0gdGhpcy5ub3JtYWxpemUo
ZnVsbE5hbWUpOworCisgICAgICBpZiAodGhpcy5fcmVzb2x2ZUNhY2hlW25vcm1hbGl6ZWROYW1l
XSkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCByZS1yZWdpc3RlcjogYCcgKyBm
dWxsTmFtZSArICdgLCBhcyBpdCBoYXMgYWxyZWFkeSBiZWVuIHJlc29sdmVkLicpOworICAgICAg
fQorCisgICAgICBkZWxldGUgdGhpcy5fZmFpbENhY2hlW25vcm1hbGl6ZWROYW1lXTsKKyAgICAg
IHRoaXMucmVnaXN0cmF0aW9uc1tub3JtYWxpemVkTmFtZV0gPSBmYWN0b3J5OworICAgICAgdGhp
cy5fb3B0aW9uc1tub3JtYWxpemVkTmFtZV0gPSBvcHRpb25zOworICAgIH0sCisKKyAgICAvKioK
KyAgICAgVW5yZWdpc3RlciBhIGZ1bGxOYW1lCisgICAgICBgYGBqYXZhc2NyaXB0CisgICAgIHZh
ciByZWdpc3RyeSA9IG5ldyBSZWdpc3RyeSgpOworICAgICByZWdpc3RyeS5yZWdpc3RlcignbW9k
ZWw6dXNlcicsIFVzZXIpOworICAgICAgcmVnaXN0cnkucmVzb2x2ZSgnbW9kZWw6dXNlcicpLmNy
ZWF0ZSgpIGluc3RhbmNlb2YgVXNlciAvLz0+IHRydWUKKyAgICAgIHJlZ2lzdHJ5LnVucmVnaXN0
ZXIoJ21vZGVsOnVzZXInKQorICAgICByZWdpc3RyeS5yZXNvbHZlKCdtb2RlbDp1c2VyJykgPT09
IHVuZGVmaW5lZCAvLz0+IHRydWUKKyAgICAgYGBgCisgICAgICBAcHJpdmF0ZQorICAgICBAbWV0
aG9kIHVucmVnaXN0ZXIKKyAgICAgQHBhcmFtIHtTdHJpbmd9IGZ1bGxOYW1lCisgICAgICovCisg
ICAgdW5yZWdpc3RlcjogZnVuY3Rpb24gKGZ1bGxOYW1lKSB7CisgICAgICBfZW1iZXJNZXRhbERl
YnVnLmFzc2VydCgnZnVsbE5hbWUgbXVzdCBiZSBhIHByb3BlciBmdWxsIG5hbWUnLCB0aGlzLnZh
bGlkYXRlRnVsbE5hbWUoZnVsbE5hbWUpKTsKKworICAgICAgdmFyIG5vcm1hbGl6ZWROYW1lID0g
dGhpcy5ub3JtYWxpemUoZnVsbE5hbWUpOworCisgICAgICB0aGlzLl9sb2NhbExvb2t1cENhY2hl
ID0gbmV3IF9lbWJlck1ldGFsRW1wdHlfb2JqZWN0LmRlZmF1bHQoKTsKKworICAgICAgZGVsZXRl
IHRoaXMucmVnaXN0cmF0aW9uc1tub3JtYWxpemVkTmFtZV07CisgICAgICBkZWxldGUgdGhpcy5f
cmVzb2x2ZUNhY2hlW25vcm1hbGl6ZWROYW1lXTsKKyAgICAgIGRlbGV0ZSB0aGlzLl9mYWlsQ2Fj
aGVbbm9ybWFsaXplZE5hbWVdOworICAgICAgZGVsZXRlIHRoaXMuX29wdGlvbnNbbm9ybWFsaXpl
ZE5hbWVdOworICAgIH0sCisKKyAgICAvKioKKyAgICAgR2l2ZW4gYSBmdWxsTmFtZSByZXR1cm4g
dGhlIGNvcnJlc3BvbmRpbmcgZmFjdG9yeS4KKyAgICAgIEJ5IGRlZmF1bHQgYHJlc29sdmVgIHdp
bGwgcmV0cmlldmUgdGhlIGZhY3RvcnkgZnJvbQorICAgICB0aGUgcmVnaXN0cnkuCisgICAgICBg
YGBqYXZhc2NyaXB0CisgICAgIHZhciByZWdpc3RyeSA9IG5ldyBSZWdpc3RyeSgpOworICAgICBy
ZWdpc3RyeS5yZWdpc3RlcignYXBpOnR3aXR0ZXInLCBUd2l0dGVyKTsKKyAgICAgIHJlZ2lzdHJ5
LnJlc29sdmUoJ2FwaTp0d2l0dGVyJykgLy8gPT4gVHdpdHRlcgorICAgICBgYGAKKyAgICAgIE9w
dGlvbmFsbHkgdGhlIHJlZ2lzdHJ5IGNhbiBiZSBwcm92aWRlZCB3aXRoIGEgY3VzdG9tIHJlc29s
dmVyLgorICAgICBJZiBwcm92aWRlZCwgYHJlc29sdmVgIHdpbGwgZmlyc3QgcHJvdmlkZSB0aGUg
Y3VzdG9tIHJlc29sdmVyCisgICAgIHRoZSBvcHBvcnR1bml0eSB0byByZXNvbHZlIHRoZSBmdWxs
TmFtZSwgb3RoZXJ3aXNlIGl0IHdpbGwgZmFsbGJhY2sKKyAgICAgdG8gdGhlIHJlZ2lzdHJ5Lgor
ICAgICAgYGBgamF2YXNjcmlwdAorICAgICB2YXIgcmVnaXN0cnkgPSBuZXcgUmVnaXN0cnkoKTsK
KyAgICAgcmVnaXN0cnkucmVzb2x2ZXIgPSBmdW5jdGlvbihmdWxsTmFtZSkgeworICAgICAgICAv
LyBsb29rdXAgdmlhIHRoZSBtb2R1bGUgc3lzdGVtIG9mIGNob2ljZQorICAgICAgfTsKKyAgICAg
IC8vIHRoZSB0d2l0dGVyIGZhY3RvcnkgaXMgYWRkZWQgdG8gdGhlIG1vZHVsZSBzeXN0ZW0KKyAg
ICAgcmVnaXN0cnkucmVzb2x2ZSgnYXBpOnR3aXR0ZXInKSAvLyA9PiBUd2l0dGVyCisgICAgIGBg
YAorICAgICAgQHByaXZhdGUKKyAgICAgQG1ldGhvZCByZXNvbHZlCisgICAgIEBwYXJhbSB7U3Ry
aW5nfSBmdWxsTmFtZQorICAgICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdCisgICAgIEBwYXJh
bSB7U3RyaW5nfSBbb3B0aW9ucy5zb3VyY2VdIHRoZSBmdWxsbmFtZSBvZiB0aGUgcmVxdWVzdCBz
b3VyY2UgKHVzZWQgZm9yIGxvY2FsIGxvb2t1cHMpCisgICAgIEByZXR1cm4ge0Z1bmN0aW9ufSBm
dWxsTmFtZSdzIGZhY3RvcnkKKyAgICAgKi8KKyAgICByZXNvbHZlOiBmdW5jdGlvbiAoZnVsbE5h
bWUsIG9wdGlvbnMpIHsKKyAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdmdWxsTmFtZSBt
dXN0IGJlIGEgcHJvcGVyIGZ1bGwgbmFtZScsIHRoaXMudmFsaWRhdGVGdWxsTmFtZShmdWxsTmFt
ZSkpOworICAgICAgdmFyIGZhY3RvcnkgPSByZXNvbHZlKHRoaXMsIHRoaXMubm9ybWFsaXplKGZ1
bGxOYW1lKSwgb3B0aW9ucyk7CisgICAgICBpZiAoZmFjdG9yeSA9PT0gdW5kZWZpbmVkICYmIHRo
aXMuZmFsbGJhY2spIHsKKyAgICAgICAgdmFyIF9mYWxsYmFjazsKKworICAgICAgICBmYWN0b3J5
ID0gKF9mYWxsYmFjayA9IHRoaXMuZmFsbGJhY2spLnJlc29sdmUuYXBwbHkoX2ZhbGxiYWNrLCBh
cmd1bWVudHMpOworICAgICAgfQorICAgICAgcmV0dXJuIGZhY3Rvcnk7CisgICAgfSwKKworICAg
IC8qKgorICAgICBBIGhvb2sgdGhhdCBjYW4gYmUgdXNlZCB0byBkZXNjcmliZSBob3cgdGhlIHJl
c29sdmVyIHdpbGwKKyAgICAgYXR0ZW1wdCB0byBmaW5kIHRoZSBmYWN0b3J5LgorICAgICAgRm9y
IGV4YW1wbGUsIHRoZSBkZWZhdWx0IEVtYmVyIGAuZGVzY3JpYmVgIHJldHVybnMgdGhlIGZ1bGwK
KyAgICAgY2xhc3MgbmFtZSAoaW5jbHVkaW5nIG5hbWVzcGFjZSkgd2hlcmUgRW1iZXIncyByZXNv
bHZlciBleHBlY3RzCisgICAgIHRvIGZpbmQgdGhlIGBmdWxsTmFtZWAuCisgICAgICBAcHJpdmF0
ZQorICAgICBAbWV0aG9kIGRlc2NyaWJlCisgICAgIEBwYXJhbSB7U3RyaW5nfSBmdWxsTmFtZQor
ICAgICBAcmV0dXJuIHtzdHJpbmd9IGRlc2NyaWJlZCBmdWxsTmFtZQorICAgICAqLworICAgIGRl
c2NyaWJlOiBmdW5jdGlvbiAoZnVsbE5hbWUpIHsKKyAgICAgIGlmICh0aGlzLnJlc29sdmVyICYm
IHRoaXMucmVzb2x2ZXIubG9va3VwRGVzY3JpcHRpb24pIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
cmVzb2x2ZXIubG9va3VwRGVzY3JpcHRpb24oZnVsbE5hbWUpOworICAgICAgfSBlbHNlIGlmICh0
aGlzLmZhbGxiYWNrKSB7CisgICAgICAgIHJldHVybiB0aGlzLmZhbGxiYWNrLmRlc2NyaWJlKGZ1
bGxOYW1lKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBmdWxsTmFtZTsKKyAgICAg
IH0KKyAgICB9LAorCisgICAgLyoqCisgICAgIEEgaG9vayB0byBlbmFibGUgY3VzdG9tIGZ1bGxO
YW1lIG5vcm1hbGl6YXRpb24gYmVoYXZpb3VyCisgICAgICBAcHJpdmF0ZQorICAgICBAbWV0aG9k
IG5vcm1hbGl6ZUZ1bGxOYW1lCisgICAgIEBwYXJhbSB7U3RyaW5nfSBmdWxsTmFtZQorICAgICBA
cmV0dXJuIHtzdHJpbmd9IG5vcm1hbGl6ZWQgZnVsbE5hbWUKKyAgICAgKi8KKyAgICBub3JtYWxp
emVGdWxsTmFtZTogZnVuY3Rpb24gKGZ1bGxOYW1lKSB7CisgICAgICBpZiAodGhpcy5yZXNvbHZl
ciAmJiB0aGlzLnJlc29sdmVyLm5vcm1hbGl6ZSkgeworICAgICAgICByZXR1cm4gdGhpcy5yZXNv
bHZlci5ub3JtYWxpemUoZnVsbE5hbWUpOworICAgICAgfSBlbHNlIGlmICh0aGlzLmZhbGxiYWNr
KSB7CisgICAgICAgIHJldHVybiB0aGlzLmZhbGxiYWNrLm5vcm1hbGl6ZUZ1bGxOYW1lKGZ1bGxO
YW1lKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBmdWxsTmFtZTsKKyAgICAgIH0K
KyAgICB9LAorCisgICAgLyoqCisgICAgIE5vcm1hbGl6ZSBhIGZ1bGxOYW1lIGJhc2VkIG9uIHRo
ZSBhcHBsaWNhdGlvbidzIGNvbnZlbnRpb25zCisgICAgICBAcHJpdmF0ZQorICAgICBAbWV0aG9k
IG5vcm1hbGl6ZQorICAgICBAcGFyYW0ge1N0cmluZ30gZnVsbE5hbWUKKyAgICAgQHJldHVybiB7
c3RyaW5nfSBub3JtYWxpemVkIGZ1bGxOYW1lCisgICAgICovCisgICAgbm9ybWFsaXplOiBmdW5j
dGlvbiAoZnVsbE5hbWUpIHsKKyAgICAgIHJldHVybiB0aGlzLl9ub3JtYWxpemVDYWNoZVtmdWxs
TmFtZV0gfHwgKHRoaXMuX25vcm1hbGl6ZUNhY2hlW2Z1bGxOYW1lXSA9IHRoaXMubm9ybWFsaXpl
RnVsbE5hbWUoZnVsbE5hbWUpKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgIEBtZXRob2QgbWFr
ZVRvU3RyaW5nCisgICAgICBAcHJpdmF0ZQorICAgICBAcGFyYW0ge2FueX0gZmFjdG9yeQorICAg
ICBAcGFyYW0ge3N0cmluZ30gZnVsbE5hbWUKKyAgICAgQHJldHVybiB7ZnVuY3Rpb259IHRvU3Ry
aW5nIGZ1bmN0aW9uCisgICAgICovCisgICAgbWFrZVRvU3RyaW5nOiBmdW5jdGlvbiAoZmFjdG9y
eSwgZnVsbE5hbWUpIHsKKyAgICAgIGlmICh0aGlzLnJlc29sdmVyICYmIHRoaXMucmVzb2x2ZXIu
bWFrZVRvU3RyaW5nKSB7CisgICAgICAgIHJldHVybiB0aGlzLnJlc29sdmVyLm1ha2VUb1N0cmlu
ZyhmYWN0b3J5LCBmdWxsTmFtZSk7CisgICAgICB9IGVsc2UgaWYgKHRoaXMuZmFsbGJhY2spIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuZmFsbGJhY2subWFrZVRvU3RyaW5nKGZhY3RvcnksIGZ1bGxO
YW1lKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBmYWN0b3J5LnRvU3RyaW5nKCk7
CisgICAgICB9CisgICAgfSwKKworICAgIC8qKgorICAgICBHaXZlbiBhIGZ1bGxOYW1lIGNoZWNr
IGlmIHRoZSBjb250YWluZXIgaXMgYXdhcmUgb2YgaXRzIGZhY3RvcnkKKyAgICAgb3Igc2luZ2xl
dG9uIGluc3RhbmNlLgorICAgICAgQHByaXZhdGUKKyAgICAgQG1ldGhvZCBoYXMKKyAgICAgQHBh
cmFtIHtTdHJpbmd9IGZ1bGxOYW1lCisgICAgIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10KKyAg
ICAgQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLnNvdXJjZV0gdGhlIGZ1bGxuYW1lIG9mIHRoZSBy
ZXF1ZXN0IHNvdXJjZSAodXNlZCBmb3IgbG9jYWwgbG9va3VwcykKKyAgICAgQHJldHVybiB7Qm9v
bGVhbn0KKyAgICAgKi8KKyAgICBoYXM6IGZ1bmN0aW9uIChmdWxsTmFtZSwgb3B0aW9ucykgewor
ICAgICAgaWYgKCF0aGlzLmlzVmFsaWRGdWxsTmFtZShmdWxsTmFtZSkpIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgfQorCisgICAgICB2YXIgc291cmNlID0gdW5kZWZpbmVkOworCisg
ICAgICBzb3VyY2UgPSBvcHRpb25zICYmIG9wdGlvbnMuc291cmNlICYmIHRoaXMubm9ybWFsaXpl
KG9wdGlvbnMuc291cmNlKTsKKworICAgICAgcmV0dXJuIGhhcyh0aGlzLCB0aGlzLm5vcm1hbGl6
ZShmdWxsTmFtZSksIHNvdXJjZSk7CisgICAgfSwKKworICAgIC8qKgorICAgICBBbGxvdyByZWdp
c3RlcmluZyBvcHRpb25zIGZvciBhbGwgZmFjdG9yaWVzIG9mIGEgdHlwZS4KKyAgICAgIGBgYGph
dmFzY3JpcHQKKyAgICAgdmFyIHJlZ2lzdHJ5ID0gbmV3IFJlZ2lzdHJ5KCk7CisgICAgIHZhciBj
b250YWluZXIgPSByZWdpc3RyeS5jb250YWluZXIoKTsKKyAgICAgIC8vIGlmIGFsbCBvZiB0eXBl
IGBjb25uZWN0aW9uYCBtdXN0IG5vdCBiZSBzaW5nbGV0b25zCisgICAgIHJlZ2lzdHJ5Lm9wdGlv
bnNGb3JUeXBlKCdjb25uZWN0aW9uJywgeyBzaW5nbGV0b246IGZhbHNlIH0pOworICAgICAgcmVn
aXN0cnkucmVnaXN0ZXIoJ2Nvbm5lY3Rpb246dHdpdHRlcicsIFR3aXR0ZXJDb25uZWN0aW9uKTsK
KyAgICAgcmVnaXN0cnkucmVnaXN0ZXIoJ2Nvbm5lY3Rpb246ZmFjZWJvb2snLCBGYWNlYm9va0Nv
bm5lY3Rpb24pOworICAgICAgdmFyIHR3aXR0ZXIgPSBjb250YWluZXIubG9va3VwKCdjb25uZWN0
aW9uOnR3aXR0ZXInKTsKKyAgICAgdmFyIHR3aXR0ZXIyID0gY29udGFpbmVyLmxvb2t1cCgnY29u
bmVjdGlvbjp0d2l0dGVyJyk7CisgICAgICB0d2l0dGVyID09PSB0d2l0dGVyMjsgLy8gPT4gZmFs
c2UKKyAgICAgIHZhciBmYWNlYm9vayA9IGNvbnRhaW5lci5sb29rdXAoJ2Nvbm5lY3Rpb246ZmFj
ZWJvb2snKTsKKyAgICAgdmFyIGZhY2Vib29rMiA9IGNvbnRhaW5lci5sb29rdXAoJ2Nvbm5lY3Rp
b246ZmFjZWJvb2snKTsKKyAgICAgIGZhY2Vib29rID09PSBmYWNlYm9vazI7IC8vID0+IGZhbHNl
CisgICAgIGBgYAorICAgICAgQHByaXZhdGUKKyAgICAgQG1ldGhvZCBvcHRpb25zRm9yVHlwZQor
ICAgICBAcGFyYW0ge1N0cmluZ30gdHlwZQorICAgICBAcGFyYW0ge09iamVjdH0gb3B0aW9ucwor
ICAgICAqLworICAgIG9wdGlvbnNGb3JUeXBlOiBmdW5jdGlvbiAodHlwZSwgb3B0aW9ucykgewor
ICAgICAgdGhpcy5fdHlwZU9wdGlvbnNbdHlwZV0gPSBvcHRpb25zOworICAgIH0sCisKKyAgICBn
ZXRPcHRpb25zRm9yVHlwZTogZnVuY3Rpb24gKHR5cGUpIHsKKyAgICAgIHZhciBvcHRpb25zRm9y
VHlwZSA9IHRoaXMuX3R5cGVPcHRpb25zW3R5cGVdOworICAgICAgaWYgKG9wdGlvbnNGb3JUeXBl
ID09PSB1bmRlZmluZWQgJiYgdGhpcy5mYWxsYmFjaykgeworICAgICAgICBvcHRpb25zRm9yVHlw
ZSA9IHRoaXMuZmFsbGJhY2suZ2V0T3B0aW9uc0ZvclR5cGUodHlwZSk7CisgICAgICB9CisgICAg
ICByZXR1cm4gb3B0aW9uc0ZvclR5cGU7CisgICAgfSwKKworICAgIC8qKgorICAgICBAcHJpdmF0
ZQorICAgICBAbWV0aG9kIG9wdGlvbnMKKyAgICAgQHBhcmFtIHtTdHJpbmd9IGZ1bGxOYW1lCisg
ICAgIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zCisgICAgICovCisgICAgb3B0aW9uczogZnVuY3Rp
b24gKGZ1bGxOYW1lKSB7CisgICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPD0g
MSB8fCBhcmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IHt9IDogYXJndW1lbnRzWzFdOworCisg
ICAgICB2YXIgbm9ybWFsaXplZE5hbWUgPSB0aGlzLm5vcm1hbGl6ZShmdWxsTmFtZSk7CisgICAg
ICB0aGlzLl9vcHRpb25zW25vcm1hbGl6ZWROYW1lXSA9IG9wdGlvbnM7CisgICAgfSwKKworICAg
IGdldE9wdGlvbnM6IGZ1bmN0aW9uIChmdWxsTmFtZSkgeworICAgICAgdmFyIG5vcm1hbGl6ZWRO
YW1lID0gdGhpcy5ub3JtYWxpemUoZnVsbE5hbWUpOworICAgICAgdmFyIG9wdGlvbnMgPSB0aGlz
Ll9vcHRpb25zW25vcm1hbGl6ZWROYW1lXTsKKyAgICAgIGlmIChvcHRpb25zID09PSB1bmRlZmlu
ZWQgJiYgdGhpcy5mYWxsYmFjaykgeworICAgICAgICBvcHRpb25zID0gdGhpcy5mYWxsYmFjay5n
ZXRPcHRpb25zKGZ1bGxOYW1lKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBvcHRpb25zOworICAg
IH0sCisKKyAgICBnZXRPcHRpb246IGZ1bmN0aW9uIChmdWxsTmFtZSwgb3B0aW9uTmFtZSkgewor
ICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLl9vcHRpb25zW2Z1bGxOYW1lXTsKKworICAgICAgaWYg
KG9wdGlvbnMgJiYgb3B0aW9uc1tvcHRpb25OYW1lXSAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAg
IHJldHVybiBvcHRpb25zW29wdGlvbk5hbWVdOworICAgICAgfQorCisgICAgICB2YXIgdHlwZSA9
IGZ1bGxOYW1lLnNwbGl0KCc6JylbMF07CisgICAgICBvcHRpb25zID0gdGhpcy5fdHlwZU9wdGlv
bnNbdHlwZV07CisKKyAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnNbb3B0aW9uTmFtZV0gIT09
IHVuZGVmaW5lZCkgeworICAgICAgICByZXR1cm4gb3B0aW9uc1tvcHRpb25OYW1lXTsKKyAgICAg
IH0gZWxzZSBpZiAodGhpcy5mYWxsYmFjaykgeworICAgICAgICByZXR1cm4gdGhpcy5mYWxsYmFj
ay5nZXRPcHRpb24oZnVsbE5hbWUsIG9wdGlvbk5hbWUpOworICAgICAgfQorICAgIH0sCisKKyAg
ICAvKioKKyAgICAgVXNlZCBvbmx5IHZpYSBgaW5qZWN0aW9uYC4KKyAgICAgIFByb3ZpZGVzIGEg
c3BlY2lhbGl6ZWQgZm9ybSBvZiBpbmplY3Rpb24sIHNwZWNpZmljYWxseSBlbmFibGluZworICAg
ICBhbGwgb2JqZWN0cyBvZiBvbmUgdHlwZSB0byBiZSBpbmplY3RlZCB3aXRoIGEgcmVmZXJlbmNl
IHRvIGFub3RoZXIKKyAgICAgb2JqZWN0LgorICAgICAgRm9yIGV4YW1wbGUsIHByb3ZpZGVkIGVh
Y2ggb2JqZWN0IG9mIHR5cGUgYGNvbnRyb2xsZXJgIG5lZWRlZCBhIGByb3V0ZXJgLgorICAgICBv
bmUgd291bGQgZG8gdGhlIGZvbGxvd2luZzoKKyAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgdmFy
IHJlZ2lzdHJ5ID0gbmV3IFJlZ2lzdHJ5KCk7CisgICAgIHZhciBjb250YWluZXIgPSByZWdpc3Ry
eS5jb250YWluZXIoKTsKKyAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyKCdyb3V0ZXI6bWFpbicsIFJv
dXRlcik7CisgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyKCdjb250cm9sbGVyOnVzZXInLCBVc2VyQ29u
dHJvbGxlcik7CisgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyKCdjb250cm9sbGVyOnBvc3QnLCBQb3N0
Q29udHJvbGxlcik7CisgICAgICByZWdpc3RyeS50eXBlSW5qZWN0aW9uKCdjb250cm9sbGVyJywg
J3JvdXRlcicsICdyb3V0ZXI6bWFpbicpOworICAgICAgdmFyIHVzZXIgPSBjb250YWluZXIubG9v
a3VwKCdjb250cm9sbGVyOnVzZXInKTsKKyAgICAgdmFyIHBvc3QgPSBjb250YWluZXIubG9va3Vw
KCdjb250cm9sbGVyOnBvc3QnKTsKKyAgICAgIHVzZXIucm91dGVyIGluc3RhbmNlb2YgUm91dGVy
OyAvLz0+IHRydWUKKyAgICAgcG9zdC5yb3V0ZXIgaW5zdGFuY2VvZiBSb3V0ZXI7IC8vPT4gdHJ1
ZQorICAgICAgLy8gYm90aCBjb250cm9sbGVycyBzaGFyZSB0aGUgc2FtZSByb3V0ZXIKKyAgICAg
dXNlci5yb3V0ZXIgPT09IHBvc3Qucm91dGVyOyAvLz0+IHRydWUKKyAgICAgYGBgCisgICAgICBA
cHJpdmF0ZQorICAgICBAbWV0aG9kIHR5cGVJbmplY3Rpb24KKyAgICAgQHBhcmFtIHtTdHJpbmd9
IHR5cGUKKyAgICAgQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5CisgICAgIEBwYXJhbSB7U3RyaW5n
fSBmdWxsTmFtZQorICAgICAqLworICAgIHR5cGVJbmplY3Rpb246IGZ1bmN0aW9uICh0eXBlLCBw
cm9wZXJ0eSwgZnVsbE5hbWUpIHsKKyAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdmdWxs
TmFtZSBtdXN0IGJlIGEgcHJvcGVyIGZ1bGwgbmFtZScsIHRoaXMudmFsaWRhdGVGdWxsTmFtZShm
dWxsTmFtZSkpOworCisgICAgICB2YXIgZnVsbE5hbWVUeXBlID0gZnVsbE5hbWUuc3BsaXQoJzon
KVswXTsKKyAgICAgIGlmIChmdWxsTmFtZVR5cGUgPT09IHR5cGUpIHsKKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCdDYW5ub3QgaW5qZWN0IGEgYCcgKyBmdWxsTmFtZSArICdgIG9uIG90aGVyICcg
KyB0eXBlICsgJyhzKS4nKTsKKyAgICAgIH0KKworICAgICAgdmFyIGluamVjdGlvbnMgPSB0aGlz
Ll90eXBlSW5qZWN0aW9uc1t0eXBlXSB8fCAodGhpcy5fdHlwZUluamVjdGlvbnNbdHlwZV0gPSBb
XSk7CisKKyAgICAgIGluamVjdGlvbnMucHVzaCh7CisgICAgICAgIHByb3BlcnR5OiBwcm9wZXJ0
eSwKKyAgICAgICAgZnVsbE5hbWU6IGZ1bGxOYW1lCisgICAgICB9KTsKKyAgICB9LAorCisgICAg
LyoqCisgICAgIERlZmluZXMgaW5qZWN0aW9uIHJ1bGVzLgorICAgICAgVGhlc2UgcnVsZXMgYXJl
IHVzZWQgdG8gaW5qZWN0IGRlcGVuZGVuY2llcyBvbnRvIG9iamVjdHMgd2hlbiB0aGV5CisgICAg
IGFyZSBpbnN0YW50aWF0ZWQuCisgICAgICBUd28gZm9ybXMgb2YgaW5qZWN0aW9ucyBhcmUgcG9z
c2libGU6CisgICAgICAqIEluamVjdGluZyBvbmUgZnVsbE5hbWUgb24gYW5vdGhlciBmdWxsTmFt
ZQorICAgICAqIEluamVjdGluZyBvbmUgZnVsbE5hbWUgb24gYSB0eXBlCisgICAgICBFeGFtcGxl
OgorICAgICAgYGBgamF2YXNjcmlwdAorICAgICB2YXIgcmVnaXN0cnkgPSBuZXcgUmVnaXN0cnko
KTsKKyAgICAgdmFyIGNvbnRhaW5lciA9IHJlZ2lzdHJ5LmNvbnRhaW5lcigpOworICAgICAgcmVn
aXN0cnkucmVnaXN0ZXIoJ3NvdXJjZTptYWluJywgU291cmNlKTsKKyAgICAgcmVnaXN0cnkucmVn
aXN0ZXIoJ21vZGVsOnVzZXInLCBVc2VyKTsKKyAgICAgcmVnaXN0cnkucmVnaXN0ZXIoJ21vZGVs
OnBvc3QnLCBQb3N0KTsKKyAgICAgIC8vIGluamVjdGluZyBvbmUgZnVsbE5hbWUgb24gYW5vdGhl
ciBmdWxsTmFtZQorICAgICAvLyBlZy4gZWFjaCB1c2VyIG1vZGVsIGdldHMgYSBwb3N0IG1vZGVs
CisgICAgIHJlZ2lzdHJ5LmluamVjdGlvbignbW9kZWw6dXNlcicsICdwb3N0JywgJ21vZGVsOnBv
c3QnKTsKKyAgICAgIC8vIGluamVjdGluZyBvbmUgZnVsbE5hbWUgb24gYW5vdGhlciB0eXBlCisg
ICAgIHJlZ2lzdHJ5LmluamVjdGlvbignbW9kZWwnLCAnc291cmNlJywgJ3NvdXJjZTptYWluJyk7
CisgICAgICB2YXIgdXNlciA9IGNvbnRhaW5lci5sb29rdXAoJ21vZGVsOnVzZXInKTsKKyAgICAg
dmFyIHBvc3QgPSBjb250YWluZXIubG9va3VwKCdtb2RlbDpwb3N0Jyk7CisgICAgICB1c2VyLnNv
dXJjZSBpbnN0YW5jZW9mIFNvdXJjZTsgLy89PiB0cnVlCisgICAgIHBvc3Quc291cmNlIGluc3Rh
bmNlb2YgU291cmNlOyAvLz0+IHRydWUKKyAgICAgIHVzZXIucG9zdCBpbnN0YW5jZW9mIFBvc3Q7
IC8vPT4gdHJ1ZQorICAgICAgLy8gYW5kIGJvdGggbW9kZWxzIHNoYXJlIHRoZSBzYW1lIHNvdXJj
ZQorICAgICB1c2VyLnNvdXJjZSA9PT0gcG9zdC5zb3VyY2U7IC8vPT4gdHJ1ZQorICAgICBgYGAK
KyAgICAgIEBwcml2YXRlCisgICAgIEBtZXRob2QgaW5qZWN0aW9uCisgICAgIEBwYXJhbSB7U3Ry
aW5nfSBmYWN0b3J5TmFtZQorICAgICBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHkKKyAgICAgQHBh
cmFtIHtTdHJpbmd9IGluamVjdGlvbk5hbWUKKyAgICAgKi8KKyAgICBpbmplY3Rpb246IGZ1bmN0
aW9uIChmdWxsTmFtZSwgcHJvcGVydHksIGluamVjdGlvbk5hbWUpIHsKKyAgICAgIHRoaXMudmFs
aWRhdGVGdWxsTmFtZShpbmplY3Rpb25OYW1lKTsKKyAgICAgIHZhciBub3JtYWxpemVkSW5qZWN0
aW9uTmFtZSA9IHRoaXMubm9ybWFsaXplKGluamVjdGlvbk5hbWUpOworCisgICAgICBpZiAoZnVs
bE5hbWUuaW5kZXhPZignOicpID09PSAtMSkgeworICAgICAgICByZXR1cm4gdGhpcy50eXBlSW5q
ZWN0aW9uKGZ1bGxOYW1lLCBwcm9wZXJ0eSwgbm9ybWFsaXplZEluamVjdGlvbk5hbWUpOworICAg
ICAgfQorCisgICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnZnVsbE5hbWUgbXVzdCBiZSBh
IHByb3BlciBmdWxsIG5hbWUnLCB0aGlzLnZhbGlkYXRlRnVsbE5hbWUoZnVsbE5hbWUpKTsKKyAg
ICAgIHZhciBub3JtYWxpemVkTmFtZSA9IHRoaXMubm9ybWFsaXplKGZ1bGxOYW1lKTsKKworICAg
ICAgdmFyIGluamVjdGlvbnMgPSB0aGlzLl9pbmplY3Rpb25zW25vcm1hbGl6ZWROYW1lXSB8fCAo
dGhpcy5faW5qZWN0aW9uc1tub3JtYWxpemVkTmFtZV0gPSBbXSk7CisKKyAgICAgIGluamVjdGlv
bnMucHVzaCh7CisgICAgICAgIHByb3BlcnR5OiBwcm9wZXJ0eSwKKyAgICAgICAgZnVsbE5hbWU6
IG5vcm1hbGl6ZWRJbmplY3Rpb25OYW1lCisgICAgICB9KTsKKyAgICB9LAorCisgICAgLyoqCisg
ICAgIFVzZWQgb25seSB2aWEgYGZhY3RvcnlJbmplY3Rpb25gLgorICAgICAgUHJvdmlkZXMgYSBz
cGVjaWFsaXplZCBmb3JtIG9mIGluamVjdGlvbiwgc3BlY2lmaWNhbGx5IGVuYWJsaW5nCisgICAg
IGFsbCBmYWN0b3J5IG9mIG9uZSB0eXBlIHRvIGJlIGluamVjdGVkIHdpdGggYSByZWZlcmVuY2Ug
dG8gYW5vdGhlcgorICAgICBvYmplY3QuCisgICAgICBGb3IgZXhhbXBsZSwgcHJvdmlkZWQgZWFj
aCBmYWN0b3J5IG9mIHR5cGUgYG1vZGVsYCBuZWVkZWQgYSBgc3RvcmVgLgorICAgICBvbmUgd291
bGQgZG8gdGhlIGZvbGxvd2luZzoKKyAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgdmFyIHJlZ2lz
dHJ5ID0gbmV3IFJlZ2lzdHJ5KCk7CisgICAgICByZWdpc3RyeS5yZWdpc3Rlcignc3RvcmU6bWFp
bicsIFNvbWVTdG9yZSk7CisgICAgICByZWdpc3RyeS5mYWN0b3J5VHlwZUluamVjdGlvbignbW9k
ZWwnLCAnc3RvcmUnLCAnc3RvcmU6bWFpbicpOworICAgICAgdmFyIHN0b3JlID0gcmVnaXN0cnku
bG9va3VwKCdzdG9yZTptYWluJyk7CisgICAgIHZhciBVc2VyRmFjdG9yeSA9IHJlZ2lzdHJ5Lmxv
b2t1cEZhY3RvcnkoJ21vZGVsOnVzZXInKTsKKyAgICAgIFVzZXJGYWN0b3J5LnN0b3JlIGluc3Rh
bmNlb2YgU29tZVN0b3JlOyAvLz0+IHRydWUKKyAgICAgYGBgCisgICAgICBAcHJpdmF0ZQorICAg
ICBAbWV0aG9kIGZhY3RvcnlUeXBlSW5qZWN0aW9uCisgICAgIEBwYXJhbSB7U3RyaW5nfSB0eXBl
CisgICAgIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eQorICAgICBAcGFyYW0ge1N0cmluZ30gZnVs
bE5hbWUKKyAgICAgKi8KKyAgICBmYWN0b3J5VHlwZUluamVjdGlvbjogZnVuY3Rpb24gKHR5cGUs
IHByb3BlcnR5LCBmdWxsTmFtZSkgeworICAgICAgdmFyIGluamVjdGlvbnMgPSB0aGlzLl9mYWN0
b3J5VHlwZUluamVjdGlvbnNbdHlwZV0gfHwgKHRoaXMuX2ZhY3RvcnlUeXBlSW5qZWN0aW9uc1t0
eXBlXSA9IFtdKTsKKworICAgICAgaW5qZWN0aW9ucy5wdXNoKHsKKyAgICAgICAgcHJvcGVydHk6
IHByb3BlcnR5LAorICAgICAgICBmdWxsTmFtZTogdGhpcy5ub3JtYWxpemUoZnVsbE5hbWUpCisg
ICAgICB9KTsKKyAgICB9LAorCisgICAgLyoqCisgICAgIERlZmluZXMgZmFjdG9yeSBpbmplY3Rp
b24gcnVsZXMuCisgICAgICBTaW1pbGFyIHRvIHJlZ3VsYXIgaW5qZWN0aW9uIHJ1bGVzLCBidXQg
YXJlIHJ1biBhZ2FpbnN0IGZhY3RvcmllcywgdmlhCisgICAgIGBSZWdpc3RyeSNsb29rdXBGYWN0
b3J5YC4KKyAgICAgIFRoZXNlIHJ1bGVzIGFyZSB1c2VkIHRvIGluamVjdCBvYmplY3RzIG9udG8g
ZmFjdG9yaWVzIHdoZW4gdGhleQorICAgICBhcmUgbG9va2VkIHVwLgorICAgICAgVHdvIGZvcm1z
IG9mIGluamVjdGlvbnMgYXJlIHBvc3NpYmxlOgorICAgICAgKiBJbmplY3Rpbmcgb25lIGZ1bGxO
YW1lIG9uIGFub3RoZXIgZnVsbE5hbWUKKyAgICAgKiBJbmplY3Rpbmcgb25lIGZ1bGxOYW1lIG9u
IGEgdHlwZQorICAgICAgRXhhbXBsZToKKyAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgdmFyIHJl
Z2lzdHJ5ID0gbmV3IFJlZ2lzdHJ5KCk7CisgICAgIHZhciBjb250YWluZXIgPSByZWdpc3RyeS5j
b250YWluZXIoKTsKKyAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyKCdzdG9yZTptYWluJywgU3RvcmUp
OworICAgICByZWdpc3RyeS5yZWdpc3Rlcignc3RvcmU6c2Vjb25kYXJ5JywgT3RoZXJTdG9yZSk7
CisgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyKCdtb2RlbDp1c2VyJywgVXNlcik7CisgICAgIHJlZ2lz
dHJ5LnJlZ2lzdGVyKCdtb2RlbDpwb3N0JywgUG9zdCk7CisgICAgICAvLyBpbmplY3Rpbmcgb25l
IGZ1bGxOYW1lIG9uIGFub3RoZXIgdHlwZQorICAgICByZWdpc3RyeS5mYWN0b3J5SW5qZWN0aW9u
KCdtb2RlbCcsICdzdG9yZScsICdzdG9yZTptYWluJyk7CisgICAgICAvLyBpbmplY3Rpbmcgb25l
IGZ1bGxOYW1lIG9uIGFub3RoZXIgZnVsbE5hbWUKKyAgICAgcmVnaXN0cnkuZmFjdG9yeUluamVj
dGlvbignbW9kZWw6cG9zdCcsICdzZWNvbmRhcnlTdG9yZScsICdzdG9yZTpzZWNvbmRhcnknKTsK
KyAgICAgIHZhciBVc2VyRmFjdG9yeSA9IGNvbnRhaW5lci5sb29rdXBGYWN0b3J5KCdtb2RlbDp1
c2VyJyk7CisgICAgIHZhciBQb3N0RmFjdG9yeSA9IGNvbnRhaW5lci5sb29rdXBGYWN0b3J5KCdt
b2RlbDpwb3N0Jyk7CisgICAgIHZhciBzdG9yZSA9IGNvbnRhaW5lci5sb29rdXAoJ3N0b3JlOm1h
aW4nKTsKKyAgICAgIFVzZXJGYWN0b3J5LnN0b3JlIGluc3RhbmNlb2YgU3RvcmU7IC8vPT4gdHJ1
ZQorICAgICBVc2VyRmFjdG9yeS5zZWNvbmRhcnlTdG9yZSBpbnN0YW5jZW9mIE90aGVyU3RvcmU7
IC8vPT4gZmFsc2UKKyAgICAgIFBvc3RGYWN0b3J5LnN0b3JlIGluc3RhbmNlb2YgU3RvcmU7IC8v
PT4gdHJ1ZQorICAgICBQb3N0RmFjdG9yeS5zZWNvbmRhcnlTdG9yZSBpbnN0YW5jZW9mIE90aGVy
U3RvcmU7IC8vPT4gdHJ1ZQorICAgICAgLy8gYW5kIGJvdGggbW9kZWxzIHNoYXJlIHRoZSBzYW1l
IHNvdXJjZSBpbnN0YW5jZQorICAgICBVc2VyRmFjdG9yeS5zdG9yZSA9PT0gUG9zdEZhY3Rvcnku
c3RvcmU7IC8vPT4gdHJ1ZQorICAgICBgYGAKKyAgICAgIEBwcml2YXRlCisgICAgIEBtZXRob2Qg
ZmFjdG9yeUluamVjdGlvbgorICAgICBAcGFyYW0ge1N0cmluZ30gZmFjdG9yeU5hbWUKKyAgICAg
QHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5CisgICAgIEBwYXJhbSB7U3RyaW5nfSBpbmplY3Rpb25O
YW1lCisgICAgICovCisgICAgZmFjdG9yeUluamVjdGlvbjogZnVuY3Rpb24gKGZ1bGxOYW1lLCBw
cm9wZXJ0eSwgaW5qZWN0aW9uTmFtZSkgeworICAgICAgdmFyIG5vcm1hbGl6ZWROYW1lID0gdGhp
cy5ub3JtYWxpemUoZnVsbE5hbWUpOworICAgICAgdmFyIG5vcm1hbGl6ZWRJbmplY3Rpb25OYW1l
ID0gdGhpcy5ub3JtYWxpemUoaW5qZWN0aW9uTmFtZSk7CisKKyAgICAgIHRoaXMudmFsaWRhdGVG
dWxsTmFtZShpbmplY3Rpb25OYW1lKTsKKworICAgICAgaWYgKGZ1bGxOYW1lLmluZGV4T2YoJzon
KSA9PT0gLTEpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZmFjdG9yeVR5cGVJbmplY3Rpb24obm9y
bWFsaXplZE5hbWUsIHByb3BlcnR5LCBub3JtYWxpemVkSW5qZWN0aW9uTmFtZSk7CisgICAgICB9
CisKKyAgICAgIHZhciBpbmplY3Rpb25zID0gdGhpcy5fZmFjdG9yeUluamVjdGlvbnNbbm9ybWFs
aXplZE5hbWVdIHx8ICh0aGlzLl9mYWN0b3J5SW5qZWN0aW9uc1tub3JtYWxpemVkTmFtZV0gPSBb
XSk7CisKKyAgICAgIGluamVjdGlvbnMucHVzaCh7CisgICAgICAgIHByb3BlcnR5OiBwcm9wZXJ0
eSwKKyAgICAgICAgZnVsbE5hbWU6IG5vcm1hbGl6ZWRJbmplY3Rpb25OYW1lCisgICAgICB9KTsK
KyAgICB9LAorCisgICAgLyoqCisgICAgIEBwcml2YXRlCisgICAgIEBtZXRob2Qga25vd25Gb3JU
eXBlCisgICAgIEBwYXJhbSB7U3RyaW5nfSB0eXBlIHRoZSB0eXBlIHRvIGl0ZXJhdGUgb3Zlcgor
ICAgICovCisgICAga25vd25Gb3JUeXBlOiBmdW5jdGlvbiAodHlwZSkgeworICAgICAgdmFyIGZh
bGxiYWNrS25vd24gPSB1bmRlZmluZWQsCisgICAgICAgICAgcmVzb2x2ZXJLbm93biA9IHVuZGVm
aW5lZDsKKworICAgICAgdmFyIGxvY2FsS25vd24gPSBfZW1iZXJNZXRhbERpY3Rpb25hcnkuZGVm
YXVsdChudWxsKTsKKyAgICAgIHZhciByZWdpc3RlcmVkTmFtZXMgPSBPYmplY3Qua2V5cyh0aGlz
LnJlZ2lzdHJhdGlvbnMpOworICAgICAgZm9yICh2YXIgaW5kZXggPSAwLCBfbGVuZ3RoID0gcmVn
aXN0ZXJlZE5hbWVzLmxlbmd0aDsgaW5kZXggPCBfbGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAg
IHZhciBmdWxsTmFtZSA9IHJlZ2lzdGVyZWROYW1lc1tpbmRleF07CisgICAgICAgIHZhciBpdGVt
VHlwZSA9IGZ1bGxOYW1lLnNwbGl0KCc6JylbMF07CisKKyAgICAgICAgaWYgKGl0ZW1UeXBlID09
PSB0eXBlKSB7CisgICAgICAgICAgbG9jYWxLbm93bltmdWxsTmFtZV0gPSB0cnVlOworICAgICAg
ICB9CisgICAgICB9CisKKyAgICAgIGlmICh0aGlzLmZhbGxiYWNrKSB7CisgICAgICAgIGZhbGxi
YWNrS25vd24gPSB0aGlzLmZhbGxiYWNrLmtub3duRm9yVHlwZSh0eXBlKTsKKyAgICAgIH0KKwor
ICAgICAgaWYgKHRoaXMucmVzb2x2ZXIgJiYgdGhpcy5yZXNvbHZlci5rbm93bkZvclR5cGUpIHsK
KyAgICAgICAgcmVzb2x2ZXJLbm93biA9IHRoaXMucmVzb2x2ZXIua25vd25Gb3JUeXBlKHR5cGUp
OworICAgICAgfQorCisgICAgICByZXR1cm4gX2VtYmVyTWV0YWxBc3NpZ24uZGVmYXVsdCh7fSwg
ZmFsbGJhY2tLbm93biwgbG9jYWxLbm93biwgcmVzb2x2ZXJLbm93bik7CisgICAgfSwKKworICAg
IHZhbGlkYXRlRnVsbE5hbWU6IGZ1bmN0aW9uIChmdWxsTmFtZSkgeworICAgICAgaWYgKCF0aGlz
LmlzVmFsaWRGdWxsTmFtZShmdWxsTmFtZSkpIHsKKyAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJv
cignSW52YWxpZCBGdWxsbmFtZSwgZXhwZWN0ZWQ6IGB0eXBlOm5hbWVgIGdvdDogJyArIGZ1bGxO
YW1lKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHRydWU7CisgICAgfSwKKworICAgIGlzVmFs
aWRGdWxsTmFtZTogZnVuY3Rpb24gKGZ1bGxOYW1lKSB7CisgICAgICByZXR1cm4gISFWQUxJRF9G
VUxMX05BTUVfUkVHRVhQLnRlc3QoZnVsbE5hbWUpOworICAgIH0sCisKKyAgICB2YWxpZGF0ZUlu
amVjdGlvbnM6IGZ1bmN0aW9uIChpbmplY3Rpb25zKSB7CisgICAgICBpZiAoIWluamVjdGlvbnMp
IHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorCisgICAgICB2YXIgZnVsbE5hbWU7CisKKyAg
ICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBpbmplY3Rpb25zLmxlbmd0aDsgaSA8IGxlbmd0
aDsgaSsrKSB7CisgICAgICAgIGZ1bGxOYW1lID0gaW5qZWN0aW9uc1tpXS5mdWxsTmFtZTsKKwor
ICAgICAgICBpZiAoIXRoaXMuaGFzKGZ1bGxOYW1lKSkgeworICAgICAgICAgIHRocm93IG5ldyBF
cnJvcignQXR0ZW1wdGluZyB0byBpbmplY3QgYW4gdW5rbm93biBpbmplY3Rpb246IGAnICsgZnVs
bE5hbWUgKyAnYCcpOworICAgICAgICB9CisgICAgICB9CisgICAgfSwKKworICAgIG5vcm1hbGl6
ZUluamVjdGlvbnNIYXNoOiBmdW5jdGlvbiAoaGFzaCkgeworICAgICAgdmFyIGluamVjdGlvbnMg
PSBbXTsKKworICAgICAgZm9yICh2YXIga2V5IGluIGhhc2gpIHsKKyAgICAgICAgaWYgKGhhc2gu
aGFzT3duUHJvcGVydHkoa2V5KSkgeworICAgICAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0
KCdFeHBlY3RlZCBhIHByb3BlciBmdWxsIG5hbWUsIGdpdmVuIFwnJyArIGhhc2hba2V5XSArICdc
JycsIHRoaXMudmFsaWRhdGVGdWxsTmFtZShoYXNoW2tleV0pKTsKKworICAgICAgICAgIGluamVj
dGlvbnMucHVzaCh7CisgICAgICAgICAgICBwcm9wZXJ0eToga2V5LAorICAgICAgICAgICAgZnVs
bE5hbWU6IGhhc2hba2V5XQorICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICB9CisKKyAg
ICAgIHJldHVybiBpbmplY3Rpb25zOworICAgIH0sCisKKyAgICBnZXRJbmplY3Rpb25zOiBmdW5j
dGlvbiAoZnVsbE5hbWUpIHsKKyAgICAgIHZhciBpbmplY3Rpb25zID0gdGhpcy5faW5qZWN0aW9u
c1tmdWxsTmFtZV0gfHwgW107CisgICAgICBpZiAodGhpcy5mYWxsYmFjaykgeworICAgICAgICBp
bmplY3Rpb25zID0gaW5qZWN0aW9ucy5jb25jYXQodGhpcy5mYWxsYmFjay5nZXRJbmplY3Rpb25z
KGZ1bGxOYW1lKSk7CisgICAgICB9CisgICAgICByZXR1cm4gaW5qZWN0aW9uczsKKyAgICB9LAor
CisgICAgZ2V0VHlwZUluamVjdGlvbnM6IGZ1bmN0aW9uICh0eXBlKSB7CisgICAgICB2YXIgaW5q
ZWN0aW9ucyA9IHRoaXMuX3R5cGVJbmplY3Rpb25zW3R5cGVdIHx8IFtdOworICAgICAgaWYgKHRo
aXMuZmFsbGJhY2spIHsKKyAgICAgICAgaW5qZWN0aW9ucyA9IGluamVjdGlvbnMuY29uY2F0KHRo
aXMuZmFsbGJhY2suZ2V0VHlwZUluamVjdGlvbnModHlwZSkpOworICAgICAgfQorICAgICAgcmV0
dXJuIGluamVjdGlvbnM7CisgICAgfSwKKworICAgIGdldEZhY3RvcnlJbmplY3Rpb25zOiBmdW5j
dGlvbiAoZnVsbE5hbWUpIHsKKyAgICAgIHZhciBpbmplY3Rpb25zID0gdGhpcy5fZmFjdG9yeUlu
amVjdGlvbnNbZnVsbE5hbWVdIHx8IFtdOworICAgICAgaWYgKHRoaXMuZmFsbGJhY2spIHsKKyAg
ICAgICAgaW5qZWN0aW9ucyA9IGluamVjdGlvbnMuY29uY2F0KHRoaXMuZmFsbGJhY2suZ2V0RmFj
dG9yeUluamVjdGlvbnMoZnVsbE5hbWUpKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBpbmplY3Rp
b25zOworICAgIH0sCisKKyAgICBnZXRGYWN0b3J5VHlwZUluamVjdGlvbnM6IGZ1bmN0aW9uICh0
eXBlKSB7CisgICAgICB2YXIgaW5qZWN0aW9ucyA9IHRoaXMuX2ZhY3RvcnlUeXBlSW5qZWN0aW9u
c1t0eXBlXSB8fCBbXTsKKyAgICAgIGlmICh0aGlzLmZhbGxiYWNrKSB7CisgICAgICAgIGluamVj
dGlvbnMgPSBpbmplY3Rpb25zLmNvbmNhdCh0aGlzLmZhbGxiYWNrLmdldEZhY3RvcnlUeXBlSW5q
ZWN0aW9ucyh0eXBlKSk7CisgICAgICB9CisgICAgICByZXR1cm4gaW5qZWN0aW9uczsKKyAgICB9
CisgIH07CisKKyAgZnVuY3Rpb24gZGVwcmVjYXRlUmVzb2x2ZXJGdW5jdGlvbihyZWdpc3RyeSkg
eworICAgIF9lbWJlck1ldGFsRGVidWcuZGVwcmVjYXRlKCdQYXNzaW5nIGEgYHJlc29sdmVyYCBm
dW5jdGlvbiBpbnRvIGEgUmVnaXN0cnkgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHBhc3MgaW4gYSBS
ZXNvbHZlciBvYmplY3Qgd2l0aCBhIGByZXNvbHZlYCBtZXRob2QuJywgZmFsc2UsIHsgaWQ6ICdl
bWJlci1hcHBsaWNhdGlvbi5yZWdpc3RyeS1yZXNvbHZlci1hcy1mdW5jdGlvbicsIHVudGlsOiAn
My4wLjAnLCB1cmw6ICdodHRwOi8vZW1iZXJqcy5jb20vZGVwcmVjYXRpb25zL3YyLngjdG9jX3Jl
Z2lzdHJ5LXJlc29sdmVyLWFzLWZ1bmN0aW9uJyB9KTsKKyAgICByZWdpc3RyeS5yZXNvbHZlciA9
IHsKKyAgICAgIHJlc29sdmU6IHJlZ2lzdHJ5LnJlc29sdmVyCisgICAgfTsKKyAgfQorCisgIC8q
KgorICAgIEdpdmVuIGEgZnVsbE5hbWUgYW5kIGEgc291cmNlIGZ1bGxOYW1lIHJldHVybnMgdGhl
IGZ1bGx5IHJlc29sdmVkCisgICAgZnVsbE5hbWUuIFVzZWQgdG8gYWxsb3cgZm9yIGxvY2FsIGxv
b2t1cC4KKyAgICAgYGBgamF2YXNjcmlwdAorICAgIHZhciByZWdpc3RyeSA9IG5ldyBSZWdpc3Ry
eSgpOworICAgICAvLyB0aGUgdHdpdHRlciBmYWN0b3J5IGlzIGFkZGVkIHRvIHRoZSBtb2R1bGUg
c3lzdGVtCisgICAgcmVnaXN0cnkuZXhwYW5kTG9jYWxMb29rdXAoJ2NvbXBvbmVudDpwb3N0LXRp
dGxlJywgeyBzb3VyY2U6ICd0ZW1wbGF0ZTpwb3N0JyB9KSAvLyA9PiBjb21wb25lbnQ6cG9zdC9w
b3N0LXRpdGxlCisgICAgYGBgCisgICAgIEBwcml2YXRlCisgICAgQG1ldGhvZCBleHBhbmRMb2Nh
bExvb2t1cAorICAgIEBwYXJhbSB7U3RyaW5nfSBmdWxsTmFtZQorICAgIEBwYXJhbSB7T2JqZWN0
fSBbb3B0aW9uc10KKyAgICBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuc291cmNlXSB0aGUgZnVs
bG5hbWUgb2YgdGhlIHJlcXVlc3Qgc291cmNlICh1c2VkIGZvciBsb2NhbCBsb29rdXBzKQorICAg
IEByZXR1cm4ge1N0cmluZ30gZnVsbE5hbWUKKyAgKi8KKyAgUmVnaXN0cnkucHJvdG90eXBlLmV4
cGFuZExvY2FsTG9va3VwID0gZnVuY3Rpb24gUmVnaXN0cnlfZXhwYW5kTG9jYWxMb29rdXAoZnVs
bE5hbWUsIG9wdGlvbnMpIHsKKyAgICBpZiAodGhpcy5yZXNvbHZlciAmJiB0aGlzLnJlc29sdmVy
LmV4cGFuZExvY2FsTG9va3VwKSB7CisgICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnZnVs
bE5hbWUgbXVzdCBiZSBhIHByb3BlciBmdWxsIG5hbWUnLCB0aGlzLnZhbGlkYXRlRnVsbE5hbWUo
ZnVsbE5hbWUpKTsKKyAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdvcHRpb25zLnNvdXJj
ZSBtdXN0IGJlIHByb3ZpZGVkIHRvIGV4cGFuZExvY2FsTG9va3VwJywgb3B0aW9ucyAmJiBvcHRp
b25zLnNvdXJjZSk7CisgICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnb3B0aW9ucy5zb3Vy
Y2UgbXVzdCBiZSBhIHByb3BlciBmdWxsIG5hbWUnLCB0aGlzLnZhbGlkYXRlRnVsbE5hbWUob3B0
aW9ucy5zb3VyY2UpKTsKKworICAgICAgdmFyIG5vcm1hbGl6ZWRGdWxsTmFtZSA9IHRoaXMubm9y
bWFsaXplKGZ1bGxOYW1lKTsKKyAgICAgIHZhciBub3JtYWxpemVkU291cmNlID0gdGhpcy5ub3Jt
YWxpemUob3B0aW9ucy5zb3VyY2UpOworCisgICAgICByZXR1cm4gZXhwYW5kTG9jYWxMb29rdXAo
dGhpcywgbm9ybWFsaXplZEZ1bGxOYW1lLCBub3JtYWxpemVkU291cmNlKTsKKyAgICB9IGVsc2Ug
aWYgKHRoaXMuZmFsbGJhY2spIHsKKyAgICAgIHJldHVybiB0aGlzLmZhbGxiYWNrLmV4cGFuZExv
Y2FsTG9va3VwKGZ1bGxOYW1lLCBvcHRpb25zKTsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJu
IG51bGw7CisgICAgfQorICB9OworCisgIGZ1bmN0aW9uIGV4cGFuZExvY2FsTG9va3VwKHJlZ2lz
dHJ5LCBub3JtYWxpemVkTmFtZSwgbm9ybWFsaXplZFNvdXJjZSkgeworICAgIHZhciBjYWNoZSA9
IHJlZ2lzdHJ5Ll9sb2NhbExvb2t1cENhY2hlOworICAgIHZhciBub3JtYWxpemVkTmFtZUNhY2hl
ID0gY2FjaGVbbm9ybWFsaXplZE5hbWVdOworCisgICAgaWYgKCFub3JtYWxpemVkTmFtZUNhY2hl
KSB7CisgICAgICBub3JtYWxpemVkTmFtZUNhY2hlID0gY2FjaGVbbm9ybWFsaXplZE5hbWVdID0g
bmV3IF9lbWJlck1ldGFsRW1wdHlfb2JqZWN0LmRlZmF1bHQoKTsKKyAgICB9CisKKyAgICB2YXIg
Y2FjaGVkID0gbm9ybWFsaXplZE5hbWVDYWNoZVtub3JtYWxpemVkU291cmNlXTsKKworICAgIGlm
IChjYWNoZWQgIT09IHVuZGVmaW5lZCkgeworICAgICAgcmV0dXJuIGNhY2hlZDsKKyAgICB9CisK
KyAgICB2YXIgZXhwYW5kZWQgPSByZWdpc3RyeS5yZXNvbHZlci5leHBhbmRMb2NhbExvb2t1cChu
b3JtYWxpemVkTmFtZSwgbm9ybWFsaXplZFNvdXJjZSk7CisKKyAgICByZXR1cm4gbm9ybWFsaXpl
ZE5hbWVDYWNoZVtub3JtYWxpemVkU291cmNlXSA9IGV4cGFuZGVkOworICB9CisKKyAgZnVuY3Rp
b24gcmVzb2x2ZShyZWdpc3RyeSwgbm9ybWFsaXplZE5hbWUsIG9wdGlvbnMpIHsKKyAgICBpZiAo
b3B0aW9ucyAmJiBvcHRpb25zLnNvdXJjZSkgeworICAgICAgLy8gd2hlbiBgc291cmNlYCBpcyBw
cm92aWRlZCBleHBhbmQgbm9ybWFsaXplZE5hbWUKKyAgICAgIC8vIGFuZCBzb3VyY2UgaW50byB0
aGUgZnVsbCBub3JtYWxpemVkTmFtZQorICAgICAgbm9ybWFsaXplZE5hbWUgPSByZWdpc3RyeS5l
eHBhbmRMb2NhbExvb2t1cChub3JtYWxpemVkTmFtZSwgb3B0aW9ucyk7CisKKyAgICAgIC8vIGlm
IGV4cGFuZExvY2FsTG9va3VwIHJldHVybnMgZmFsc2V5LCB3ZSBkbyBub3Qgc3VwcG9ydCBsb2Nh
bCBsb29rdXAKKyAgICAgIGlmICghbm9ybWFsaXplZE5hbWUpIHsKKyAgICAgICAgcmV0dXJuOwor
ICAgICAgfQorICAgIH0KKworICAgIHZhciBjYWNoZWQgPSByZWdpc3RyeS5fcmVzb2x2ZUNhY2hl
W25vcm1hbGl6ZWROYW1lXTsKKyAgICBpZiAoY2FjaGVkICE9PSB1bmRlZmluZWQpIHsKKyAgICAg
IHJldHVybiBjYWNoZWQ7CisgICAgfQorICAgIGlmIChyZWdpc3RyeS5fZmFpbENhY2hlW25vcm1h
bGl6ZWROYW1lXSkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZhciByZXNvbHZlZCA9
IHVuZGVmaW5lZDsKKworICAgIGlmIChyZWdpc3RyeS5yZXNvbHZlcikgeworICAgICAgcmVzb2x2
ZWQgPSByZWdpc3RyeS5yZXNvbHZlci5yZXNvbHZlKG5vcm1hbGl6ZWROYW1lKTsKKyAgICB9CisK
KyAgICBpZiAocmVzb2x2ZWQgPT09IHVuZGVmaW5lZCkgeworICAgICAgcmVzb2x2ZWQgPSByZWdp
c3RyeS5yZWdpc3RyYXRpb25zW25vcm1hbGl6ZWROYW1lXTsKKyAgICB9CisKKyAgICBpZiAocmVz
b2x2ZWQgPT09IHVuZGVmaW5lZCkgeworICAgICAgcmVnaXN0cnkuX2ZhaWxDYWNoZVtub3JtYWxp
emVkTmFtZV0gPSB0cnVlOworICAgIH0gZWxzZSB7CisgICAgICByZWdpc3RyeS5fcmVzb2x2ZUNh
Y2hlW25vcm1hbGl6ZWROYW1lXSA9IHJlc29sdmVkOworICAgIH0KKworICAgIHJldHVybiByZXNv
bHZlZDsKKyAgfQorCisgIGZ1bmN0aW9uIGhhcyhyZWdpc3RyeSwgZnVsbE5hbWUsIHNvdXJjZSkg
eworICAgIHJldHVybiByZWdpc3RyeS5yZXNvbHZlKGZ1bGxOYW1lLCB7IHNvdXJjZTogc291cmNl
IH0pICE9PSB1bmRlZmluZWQ7CisgIH0KKworICB2YXIgcHJpdmF0ZU5hbWVzID0gX2VtYmVyTWV0
YWxEaWN0aW9uYXJ5LmRlZmF1bHQobnVsbCk7CisgIHZhciBwcml2YXRlU3VmZml4ID0gTWF0aC5m
bG9vcihNYXRoLnJhbmRvbSgpICogbmV3IERhdGUoKSkgKyAnJzsKKworICBmdW5jdGlvbiBwcml2
YXRpemUoX3JlZikgeworICAgIHZhciBmdWxsTmFtZSA9IF9yZWZbMF07CisKKyAgICB2YXIgbmFt
ZSA9IHByaXZhdGVOYW1lc1tmdWxsTmFtZV07CisgICAgaWYgKG5hbWUpIHsKKyAgICAgIHJldHVy
biBuYW1lOworICAgIH0KKworICAgIHZhciBfZnVsbE5hbWUkc3BsaXQgPSBmdWxsTmFtZS5zcGxp
dCgnOicpOworCisgICAgdmFyIHR5cGUgPSBfZnVsbE5hbWUkc3BsaXRbMF07CisgICAgdmFyIHJh
d05hbWUgPSBfZnVsbE5hbWUkc3BsaXRbMV07CisKKyAgICByZXR1cm4gcHJpdmF0ZU5hbWVzW2Z1
bGxOYW1lXSA9IF9lbWJlck1ldGFsVXRpbHMuaW50ZXJuKHR5cGUgKyAnOicgKyByYXdOYW1lICsg
Jy0nICsgcHJpdmF0ZVN1ZmZpeCk7CisgIH0KKworICBleHBvcnRzLmRlZmF1bHQgPSBSZWdpc3Ry
eTsKK30pOworZW5pZmVkKCdkYWctbWFwJywgWydleHBvcnRzJywgJ3ZlcnRleCcsICd2aXNpdCdd
LCBmdW5jdGlvbiAoZXhwb3J0cywgX3ZlcnRleCwgX3Zpc2l0KSB7CisgICd1c2Ugc3RyaWN0JzsK
KworICBleHBvcnRzLmRlZmF1bHQgPSBEQUc7CisKKyAgLyoqCisgICAqIERBRyBzdGFuZHMgZm9y
IERpcmVjdGVkIGFjeWNsaWMgZ3JhcGguCisgICAqCisgICAqIEl0IGlzIHVzZWQgdG8gYnVpbGQg
YSBncmFwaCBvZiBkZXBlbmRlbmNpZXMgY2hlY2tpbmcgdGhhdCB0aGVyZSBpc24ndCBjaXJjdWxh
cgorICAgKiBkZXBlbmRlbmNpZXMuIHAuZSBSZWdpc3RlcmluZyBpbml0aWFsaXplcnMgd2l0aCBh
IGNlcnRhaW4gcHJlY2VkZW5jZSBvcmRlci4KKyAgICoKKyAgICogQGNsYXNzIERBRworICAgKiBA
Y29uc3RydWN0b3IKKyAgICovCisKKyAgZnVuY3Rpb24gREFHKCkgeworICAgIHRoaXMubmFtZXMg
PSBbXTsKKyAgICB0aGlzLnZlcnRpY2VzID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKKyAgfQorCisg
IC8qKgorICAgKiBBZGRzIGEgdmVydGV4IGVudHJ5IHRvIHRoZSBncmFwaCB1bmxlc3MgaXQgaXMg
YWxyZWFkeSBhZGRlZC4KKyAgICoKKyAgICogQHByaXZhdGUKKyAgICogQG1ldGhvZCBhZGQKKyAg
ICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIHZlcnRleCB0byBhZGQKKyAg
ICovCisgIERBRy5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKG5hbWUpIHsKKyAgICBpZiAoIW5h
bWUpIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigiQ2FuJ3QgYWRkIFZlcnRleCB3aXRob3V0IG5h
bWUiKTsKKyAgICB9CisgICAgaWYgKHRoaXMudmVydGljZXNbbmFtZV0gIT09IHVuZGVmaW5lZCkg
eworICAgICAgcmV0dXJuIHRoaXMudmVydGljZXNbbmFtZV07CisgICAgfQorICAgIHZhciB2ZXJ0
ZXggPSBuZXcgX3ZlcnRleC5kZWZhdWx0KG5hbWUpOworICAgIHRoaXMudmVydGljZXNbbmFtZV0g
PSB2ZXJ0ZXg7CisgICAgdGhpcy5uYW1lcy5wdXNoKG5hbWUpOworICAgIHJldHVybiB2ZXJ0ZXg7
CisgIH07CisKKyAgLyoqCisgICAqIEFkZHMgYSB2ZXJ0ZXggdG8gdGhlIGdyYXBoIGFuZCBzZXRz
IGl0cyB2YWx1ZS4KKyAgICoKKyAgICogQHByaXZhdGUKKyAgICogQG1ldGhvZCBtYXAKKyAgICog
QHBhcmFtIHtTdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIHZlcnRleC4KKyAgICogQHBhcmFt
ICAgICAgICAgdmFsdWUgVGhlIHZhbHVlIHRvIHB1dCBpbiB0aGUgdmVydGV4LgorICAgKi8KKyAg
REFHLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHsKKyAgICB0aGlzLmFk
ZChuYW1lKS52YWx1ZSA9IHZhbHVlOworICB9OworCisgIC8qKgorICAgKiBDb25uZWN0cyB0aGUg
dmVydGljZXMgd2l0aCB0aGUgZ2l2ZW4gbmFtZXMsIGFkZGluZyB0aGVtIHRvIHRoZSBncmFwaCBp
ZgorICAgKiBuZWNlc3NhcnksIG9ubHkgaWYgdGhpcyBkb2VzIG5vdCBwcm9kdWNlIGlzIGFueSBj
aXJjdWxhciBkZXBlbmRlbmN5LgorICAgKgorICAgKiBAcHJpdmF0ZQorICAgKiBAbWV0aG9kIGFk
ZEVkZ2UKKyAgICogQHBhcmFtIHtTdHJpbmd9IGZyb21OYW1lIFRoZSBuYW1lIHRoZSB2ZXJ0ZXgg
d2hlcmUgdGhlIGVkZ2Ugc3RhcnRzLgorICAgKiBAcGFyYW0ge1N0cmluZ30gdG9OYW1lIFRoZSBu
YW1lIHRoZSB2ZXJ0ZXggd2hlcmUgdGhlIGVkZ2UgZW5kcy4KKyAgICovCisgIERBRy5wcm90b3R5
cGUuYWRkRWRnZSA9IGZ1bmN0aW9uIChmcm9tTmFtZSwgdG9OYW1lKSB7CisgICAgaWYgKCFmcm9t
TmFtZSB8fCAhdG9OYW1lIHx8IGZyb21OYW1lID09PSB0b05hbWUpIHsKKyAgICAgIHJldHVybjsK
KyAgICB9CisgICAgdmFyIGZyb20gPSB0aGlzLmFkZChmcm9tTmFtZSk7CisgICAgdmFyIHRvID0g
dGhpcy5hZGQodG9OYW1lKTsKKyAgICBpZiAodG8uaW5jb21pbmcuaGFzT3duUHJvcGVydHkoZnJv
bU5hbWUpKSB7CisgICAgICByZXR1cm47CisgICAgfQorICAgIGZ1bmN0aW9uIGNoZWNrQ3ljbGUo
dmVydGV4LCBwYXRoKSB7CisgICAgICBpZiAodmVydGV4Lm5hbWUgPT09IHRvTmFtZSkgeworICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoImN5Y2xlIGRldGVjdGVkOiAiICsgdG9OYW1lICsgIiA8LSAi
ICsgcGF0aC5qb2luKCIgPC0gIikpOworICAgICAgfQorICAgIH0KKyAgICBfdmlzaXQuZGVmYXVs
dChmcm9tLCBjaGVja0N5Y2xlKTsKKyAgICBmcm9tLmhhc091dGdvaW5nID0gdHJ1ZTsKKyAgICB0
by5pbmNvbWluZ1tmcm9tTmFtZV0gPSBmcm9tOworICAgIHRvLmluY29taW5nTmFtZXMucHVzaChm
cm9tTmFtZSk7CisgIH07CisKKyAgLyoqCisgICAqIFZpc2l0cyBhbGwgdGhlIHZlcnRleCBvZiB0
aGUgZ3JhcGggY2FsbGluZyB0aGUgZ2l2ZW4gZnVuY3Rpb24gd2l0aCBlYWNoIG9uZSwKKyAgICog
ZW5zdXJpbmcgdGhhdCB0aGUgdmVydGljZXMgYXJlIHZpc2l0ZWQgcmVzcGVjdGluZyB0aGVpciBw
cmVjZWRlbmNlLgorICAgKgorICAgKiBAbWV0aG9kICB0b3Bzb3J0CisgICAqIEBwYXJhbSB7RnVu
Y3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBiZSBpbnZva2VkIG9uIGVhY2ggdmVydGV4LgorICAg
Ki8KKyAgREFHLnByb3RvdHlwZS50b3Bzb3J0ID0gZnVuY3Rpb24gKGZuKSB7CisgICAgdmFyIHZp
c2l0ZWQgPSB7fTsKKyAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzOworICAgIHZhciBu
YW1lcyA9IHRoaXMubmFtZXM7CisgICAgdmFyIGxlbiA9IG5hbWVzLmxlbmd0aDsKKyAgICB2YXIg
aSwgdmVydGV4OworCisgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICB2ZXJ0
ZXggPSB2ZXJ0aWNlc1tuYW1lc1tpXV07CisgICAgICBpZiAoIXZlcnRleC5oYXNPdXRnb2luZykg
eworICAgICAgICBfdmlzaXQuZGVmYXVsdCh2ZXJ0ZXgsIGZuLCB2aXNpdGVkKTsKKyAgICAgIH0K
KyAgICB9CisgIH07CisKKyAgLyoqCisgICAqIEFkZHMgYSB2ZXJ0ZXggd2l0aCB0aGUgZ2l2ZW4g
bmFtZSBhbmQgdmFsdWUgdG8gdGhlIGdyYXBoIGFuZCBqb2lucyBpdCB3aXRoIHRoZQorICAgKiB2
ZXJ0aWNlcyByZWZlcmVuY2VkIGluIF9iZWZvcmVfIGFuZCBfYWZ0ZXJfLiBJZiB0aGVyZSBpc24n
dCB2ZXJ0aWNlcyB3aXRoIHRob3NlCisgICAqIG5hbWVzLCB0aGV5IGFyZSBhZGRlZCB0b28uCisg
ICAqCisgICAqIElmIGVpdGhlciBfYmVmb3JlXyBvciBfYWZ0ZXJfIGFyZSBmYWxzeS9lbXB0eSwg
dGhlIGFkZGVkIHZlcnRleCB3aWxsIG5vdCBoYXZlCisgICAqIGFuIGluY29taW5nL291dGdvaW5n
IGVkZ2UuCisgICAqCisgICAqIEBtZXRob2QgYWRkRWRnZXMKKyAgICogQHBhcmFtIHtTdHJpbmd9
IG5hbWUgVGhlIG5hbWUgb2YgdGhlIHZlcnRleCB0byBiZSBhZGRlZC4KKyAgICogQHBhcmFtICAg
ICAgICAgdmFsdWUgVGhlIHZhbHVlIG9mIHRoYXQgdmVydGV4LgorICAgKiBAcGFyYW0gICAgICAg
IGJlZm9yZSBBbiBzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5ncyB3aXRoIHRoZSBuYW1lcyBvZiB0
aGUgdmVydGljZXMgYmVmb3JlCisgICAqICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIHRoaXMg
dmVydGV4IG11c3QgYmUgdmlzaXRlZC4KKyAgICogQHBhcmFtICAgICAgICAgYWZ0ZXIgQW4gc3Ry
aW5nIG9yIGFycmF5IG9mIHN0cmluZ3Mgd2l0aCB0aGUgbmFtZXMgb2YgdGhlIHZlcnRleCBhZnRl
cgorICAgKiAgICAgICAgICAgICAgICAgICAgICB3aGljaCB0aGlzIHZlcnRleCBtdXN0IGJlIHZp
c2l0ZWQuCisgICAqCisgICAqLworICBEQUcucHJvdG90eXBlLmFkZEVkZ2VzID0gZnVuY3Rpb24g
KG5hbWUsIHZhbHVlLCBiZWZvcmUsIGFmdGVyKSB7CisgICAgdmFyIGk7CisgICAgdGhpcy5tYXAo
bmFtZSwgdmFsdWUpOworICAgIGlmIChiZWZvcmUpIHsKKyAgICAgIGlmICh0eXBlb2YgYmVmb3Jl
ID09PSAnc3RyaW5nJykgeworICAgICAgICB0aGlzLmFkZEVkZ2UobmFtZSwgYmVmb3JlKTsKKyAg
ICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBiZWZvcmUubGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgICB0aGlzLmFkZEVkZ2UobmFtZSwgYmVmb3JlW2ldKTsKKyAgICAgICAgfQor
ICAgICAgfQorICAgIH0KKyAgICBpZiAoYWZ0ZXIpIHsKKyAgICAgIGlmICh0eXBlb2YgYWZ0ZXIg
PT09ICdzdHJpbmcnKSB7CisgICAgICAgIHRoaXMuYWRkRWRnZShhZnRlciwgbmFtZSk7CisgICAg
ICB9IGVsc2UgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYWZ0ZXIubGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgICB0aGlzLmFkZEVkZ2UoYWZ0ZXJbaV0sIG5hbWUpOworICAgICAgICB9CisgICAg
ICB9CisgICAgfQorICB9OworfSk7CitlbmlmZWQoJ2RhZy1tYXAudW1kJywgWydleHBvcnRzJywg
J2RhZy1tYXAvcGxhdGZvcm0nLCAnZGFnLW1hcCddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2RhZ01h
cFBsYXRmb3JtLCBfZGFnTWFwKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICAvKiBnbG9iYWwgZGVm
aW5lOnRydWUgbW9kdWxlOnRydWUgd2luZG93OiB0cnVlICovCisgIGlmICh0eXBlb2YgZGVmaW5l
ID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHsKKyAgICBkZWZpbmUoZnVuY3Rpb24gKCkg
eworICAgICAgcmV0dXJuIF9kYWdNYXAuZGVmYXVsdDsKKyAgICB9KTsKKyAgfSBlbHNlIGlmICh0
eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykgeworICAgIG1v
ZHVsZS5leHBvcnRzID0gX2RhZ01hcC5kZWZhdWx0OworICB9IGVsc2UgaWYgKHR5cGVvZiBfZGFn
TWFwUGxhdGZvcm0uZGVmYXVsdCAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICBfZGFnTWFwUGxhdGZv
cm0uZGVmYXVsdFsnREFHJ10gPSBfZGFnTWFwLmRlZmF1bHQ7CisgIH0KK30pOworZW5pZmVkKCdk
YWctbWFwL3BsYXRmb3JtJywgWydleHBvcnRzJ10sIGZ1bmN0aW9uIChleHBvcnRzKSB7CisgICd1
c2Ugc3RyaWN0JzsKKworICB2YXIgcGxhdGZvcm07CisKKyAgLyogZ2xvYmFsIHNlbGYgKi8KKyAg
aWYgKHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JykgeworICAgIHBsYXRmb3JtID0gc2VsZjsKKwor
ICAgIC8qIGdsb2JhbCBnbG9iYWwgKi8KKyAgfSBlbHNlIGlmICh0eXBlb2YgZ2xvYmFsID09PSAn
b2JqZWN0JykgeworICAgICAgcGxhdGZvcm0gPSBnbG9iYWw7CisgICAgfSBlbHNlIHsKKyAgICAg
IHRocm93IG5ldyBFcnJvcignbm8gZ2xvYmFsOiBgc2VsZmAgb3IgYGdsb2JhbGAgZm91bmQnKTsK
KyAgICB9CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gcGxhdGZvcm07Cit9KTsKK2VuaWZlZCgiZG9t
LWhlbHBlciIsIFsiZXhwb3J0cyIsICJodG1sYmFycy1ydW50aW1lL21vcnBoIiwgIm1vcnBoLWF0
dHIiLCAiZG9tLWhlbHBlci9idWlsZC1odG1sLWRvbSIsICJkb20taGVscGVyL2NsYXNzZXMiLCAi
ZG9tLWhlbHBlci9wcm9wIl0sIGZ1bmN0aW9uIChleHBvcnRzLCBfaHRtbGJhcnNSdW50aW1lTW9y
cGgsIF9tb3JwaEF0dHIsIF9kb21IZWxwZXJCdWlsZEh0bWxEb20sIF9kb21IZWxwZXJDbGFzc2Vz
LCBfZG9tSGVscGVyUHJvcCkgeworICAvKmdsb2JhbHMgbW9kdWxlLCBVUkwqLworCisgICJ1c2Ug
c3RyaWN0IjsKKworICB2YXIgZG9jID0gdHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJyA/
IGZhbHNlIDogZG9jdW1lbnQ7CisKKyAgdmFyIGRlbGV0ZXNCbGFua1RleHROb2RlcyA9IGRvYyAm
JiAoZnVuY3Rpb24gKGRvY3VtZW50KSB7CisgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdkaXYnKTsKKyAgICBlbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKCcnKSk7CisgICAgdmFyIGNsb25lZEVsZW1lbnQgPSBlbGVtZW50LmNsb25lTm9k
ZSh0cnVlKTsKKyAgICByZXR1cm4gY2xvbmVkRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0g
MDsKKyAgfSkoZG9jKTsKKworICB2YXIgaWdub3Jlc0NoZWNrZWRBdHRyaWJ1dGUgPSBkb2MgJiYg
KGZ1bmN0aW9uIChkb2N1bWVudCkgeworICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnaW5wdXQnKTsKKyAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnY2hlY2tlZCcsICdj
aGVja2VkJyk7CisgICAgdmFyIGNsb25lZEVsZW1lbnQgPSBlbGVtZW50LmNsb25lTm9kZShmYWxz
ZSk7CisgICAgcmV0dXJuICFjbG9uZWRFbGVtZW50LmNoZWNrZWQ7CisgIH0pKGRvYyk7CisKKyAg
dmFyIGNhblJlbW92ZVN2Z1ZpZXdCb3hBdHRyaWJ1dGUgPSBkb2MgJiYgKGRvYy5jcmVhdGVFbGVt
ZW50TlMgPyAoZnVuY3Rpb24gKGRvY3VtZW50KSB7CisgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50TlMoX2RvbUhlbHBlckJ1aWxkSHRtbERvbS5zdmdOYW1lc3BhY2UsICdz
dmcnKTsKKyAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgndmlld0JveCcsICcwIDAgMTAwIDEwMCcp
OworICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCd2aWV3Qm94Jyk7CisgICAgcmV0dXJuICFl
bGVtZW50LmdldEF0dHJpYnV0ZSgndmlld0JveCcpOworICB9KShkb2MpIDogdHJ1ZSk7CisKKyAg
dmFyIGNhbkNsb25lID0gZG9jICYmIChmdW5jdGlvbiAoZG9jdW1lbnQpIHsKKyAgICB2YXIgZWxl
bWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgIGVsZW1lbnQuYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJyAnKSk7CisgICAgZWxlbWVudC5hcHBlbmRD
aGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnICcpKTsKKyAgICB2YXIgY2xvbmVkRWxlbWVu
dCA9IGVsZW1lbnQuY2xvbmVOb2RlKHRydWUpOworICAgIHJldHVybiBjbG9uZWRFbGVtZW50LmNo
aWxkTm9kZXNbMF0ubm9kZVZhbHVlID09PSAnICc7CisgIH0pKGRvYyk7CisKKyAgLy8gVGhpcyBp
cyBub3QgdGhlIG5hbWVzcGFjZSBvZiB0aGUgZWxlbWVudCwgYnV0IG9mCisgIC8vIHRoZSBlbGVt
ZW50cyBpbnNpZGUgdGhhdCBlbGVtZW50cy4KKyAgZnVuY3Rpb24gaW50ZXJpb3JOYW1lc3BhY2Uo
ZWxlbWVudCkgeworICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQubmFtZXNwYWNlVVJJID09PSBf
ZG9tSGVscGVyQnVpbGRIdG1sRG9tLnN2Z05hbWVzcGFjZSAmJiAhX2RvbUhlbHBlckJ1aWxkSHRt
bERvbS5zdmdIVE1MSW50ZWdyYXRpb25Qb2ludHNbZWxlbWVudC50YWdOYW1lXSkgeworICAgICAg
cmV0dXJuIF9kb21IZWxwZXJCdWlsZEh0bWxEb20uc3ZnTmFtZXNwYWNlOworICAgIH0gZWxzZSB7
CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgIH0KKworICAvLyBUaGUgSFRNTCBzcGVjIGFs
bG93cyBmb3IgIm9taXR0ZWQgc3RhcnQgdGFncyIuIFRoZXNlIHRhZ3MgYXJlIG9wdGlvbmFsCisg
IC8vIHdoZW4gdGhlaXIgaW50ZW5kZWQgY2hpbGQgaXMgdGhlIGZpcnN0IHRoaW5nIGluIHRoZSBw
YXJlbnQgdGFnLiBGb3IKKyAgLy8gZXhhbXBsZSwgdGhpcyBpcyBhIHRib2R5IHN0YXJ0IHRhZzoK
KyAgLy8KKyAgLy8gPHRhYmxlPgorICAvLyAgIDx0Ym9keT4KKyAgLy8gICAgIDx0cj4KKyAgLy8K
KyAgLy8gVGhlIHRib2R5IG1heSBiZSBvbWl0dGVkLCBhbmQgdGhlIGJyb3dzZXIgd2lsbCBhY2Nl
cHQgYW5kIHJlbmRlcjoKKyAgLy8KKyAgLy8gPHRhYmxlPgorICAvLyAgIDx0cj4KKyAgLy8KKyAg
Ly8gSG93ZXZlciwgdGhlIG9taXR0ZWQgc3RhcnQgdGFnIHdpbGwgc3RpbGwgYmUgYWRkZWQgdG8g
dGhlIERPTS4gSGVyZQorICAvLyB3ZSB0ZXN0IHRoZSBzdHJpbmcgYW5kIGNvbnRleHQgdG8gc2Vl
IGlmIHRoZSBicm93c2VyIGlzIGFib3V0IHRvCisgIC8vIHBlcmZvcm0gdGhpcyBjbGVhbnVwLgor
ICAvLworICAvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13
b3JrL211bHRpcGFnZS9zeW50YXguaHRtbCNvcHRpb25hbC10YWdzCisgIC8vIGRlc2NyaWJlcyB3
aGljaCB0YWdzIGFyZSBvbWl0dGFibGUuIFRoZSBzcGVjIGZvciB0Ym9keSBhbmQgY29sZ3JvdXAK
KyAgLy8gZXhwbGFpbnMgdGhpcyBiZWhhdmlvcjoKKyAgLy8KKyAgLy8gaHR0cDovL3d3dy53aGF0
d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdGFibGVzLmh0bWwj
dGhlLXRib2R5LWVsZW1lbnQKKyAgLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1h
cHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdGFibGVzLmh0bWwjdGhlLWNvbGdyb3VwLWVsZW1l
bnQKKyAgLy8KKworICB2YXIgb21pdHRlZFN0YXJ0VGFnQ2hpbGRUZXN0ID0gLzwoW1x3Ol0rKS87
CisgIGZ1bmN0aW9uIGRldGVjdE9taXR0ZWRTdGFydFRhZyhzdHJpbmcsIGNvbnRleHR1YWxFbGVt
ZW50KSB7CisgICAgLy8gT21pdHRlZCBzdGFydCB0YWdzIGFyZSBvbmx5IGluc2lkZSB0YWJsZSB0
YWdzLgorICAgIGlmIChjb250ZXh0dWFsRWxlbWVudC50YWdOYW1lID09PSAnVEFCTEUnKSB7Cisg
ICAgICB2YXIgb21pdHRlZFN0YXJ0VGFnQ2hpbGRNYXRjaCA9IG9taXR0ZWRTdGFydFRhZ0NoaWxk
VGVzdC5leGVjKHN0cmluZyk7CisgICAgICBpZiAob21pdHRlZFN0YXJ0VGFnQ2hpbGRNYXRjaCkg
eworICAgICAgICB2YXIgb21pdHRlZFN0YXJ0VGFnQ2hpbGQgPSBvbWl0dGVkU3RhcnRUYWdDaGls
ZE1hdGNoWzFdOworICAgICAgICAvLyBJdCBpcyBhbHJlYWR5IGFzc2VydGVkIHRoYXQgdGhlIGNv
bnRleHR1YWwgZWxlbWVudCBpcyBhIHRhYmxlCisgICAgICAgIC8vIGFuZCBub3QgdGhlIHByb3Bl
ciBzdGFydCB0YWcuIEp1c3Qgc2VlIGlmIGEgdGFnIHdhcyBvbWl0dGVkLgorICAgICAgICByZXR1
cm4gb21pdHRlZFN0YXJ0VGFnQ2hpbGQgPT09ICd0cicgfHwgb21pdHRlZFN0YXJ0VGFnQ2hpbGQg
PT09ICdjb2wnOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIGJ1aWxkU1ZHRE9N
KGh0bWwsIGRvbSkgeworICAgIHZhciBkaXYgPSBkb20uZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
ZGl2Jyk7CisgICAgZGl2LmlubmVySFRNTCA9ICc8c3ZnPicgKyBodG1sICsgJzwvc3ZnPic7Cisg
ICAgcmV0dXJuIGRpdi5maXJzdENoaWxkLmNoaWxkTm9kZXM7CisgIH0KKworICB2YXIgZ3VpZCA9
IDE7CisKKyAgZnVuY3Rpb24gRWxlbWVudE1vcnBoKGVsZW1lbnQsIGRvbSwgbmFtZXNwYWNlKSB7
CisgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDsKKyAgICB0aGlzLmRvbSA9IGRvbTsKKyAgICB0
aGlzLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTsKKyAgICB0aGlzLmd1aWQgPSAiZWxlbWVudCIgKyBn
dWlkKys7CisKKyAgICB0aGlzLl9zdGF0ZSA9IHVuZGVmaW5lZDsKKyAgICB0aGlzLmlzRGlydHkg
PSB0cnVlOworICB9CisKKyAgRWxlbWVudE1vcnBoLnByb3RvdHlwZS5nZXRTdGF0ZSA9IGZ1bmN0
aW9uICgpIHsKKyAgICBpZiAoIXRoaXMuX3N0YXRlKSB7CisgICAgICB0aGlzLl9zdGF0ZSA9IHt9
OworICAgIH0KKworICAgIHJldHVybiB0aGlzLl9zdGF0ZTsKKyAgfTsKKworICBFbGVtZW50TW9y
cGgucHJvdG90eXBlLnNldFN0YXRlID0gZnVuY3Rpb24gKG5ld1N0YXRlKSB7CisgICAgLypqc2hp
bnQgLVcwOTMgKi8KKworICAgIHJldHVybiB0aGlzLl9zdGF0ZSA9IG5ld1N0YXRlOworICB9Owor
CisgIC8vIHJlbmRlckFuZENsZWFudXAgY2FsbHMgYGNsZWFyYCBvbiBhbGwgaXRlbXMgaW4gdGhl
IG1vcnBoIG1hcAorICAvLyBqdXN0IGJlZm9yZSBjYWxsaW5nIGBkZXN0cm95YCBvbiB0aGUgbW9y
cGguCisgIC8vCisgIC8vIEFzIGEgZnV0dXJlIHJlZmFjdG9yIHRoaXMgY291bGQgYmUgY2hhbmdl
ZCB0byBzZXQgdGhlIHByb3BlcnR5CisgIC8vIGJhY2sgdG8gaXRzIG9yaWdpbmFsL2RlZmF1bHQg
dmFsdWUuCisgIEVsZW1lbnRNb3JwaC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7fTsK
KworICBFbGVtZW50TW9ycGgucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7CisgICAg
dGhpcy5lbGVtZW50ID0gbnVsbDsKKyAgICB0aGlzLmRvbSA9IG51bGw7CisgIH07CisKKyAgLyoK
KyAgICogQSBjbGFzcyB3cmFwcGluZyBET00gZnVuY3Rpb25zIHRvIGFkZHJlc3MgZW52aXJvbm1l
bnQgY29tcGF0aWJpbGl0eSwKKyAgICogbmFtZXNwYWNlcywgY29udGV4dHVhbCBlbGVtZW50cyBm
b3IgbW9ycGggdW4tZXNjYXBlZCBjb250ZW50CisgICAqIGluc2VydGlvbi4KKyAgICoKKyAgICog
V2hlbiBlbnRlcmluZyBhIHRlbXBsYXRlLCBhIERPTUhlbHBlciBzaG91bGQgYmUgcGFzc2VkOgor
ICAgKgorICAgKiAgIHRlbXBsYXRlKGNvbnRleHQsIHsgaG9va3M6IGhvb2tzLCBkb206IG5ldyBE
T01IZWxwZXIoKSB9KTsKKyAgICoKKyAgICogVE9ETzogc3VwcG9ydCBmb3JlaWduT2JqZWN0IGFz
IGEgcGFzc2VkIGNvbnRleHR1YWwgZWxlbWVudC4gSXQgaGFzCisgICAqIGEgbmFtZXNwYWNlIChz
dmcpIHRoYXQgZG9lcyBub3QgbWF0Y2ggaXRzIGludGVybmFsIG5hbWVzcGFjZQorICAgKiAoeGh0
bWwpLgorICAgKgorICAgKiBAY2xhc3MgRE9NSGVscGVyCisgICAqIEBjb25zdHJ1Y3RvcgorICAg
KiBAcGFyYW0ge0hUTUxEb2N1bWVudH0gX2RvY3VtZW50IFRoZSBkb2N1bWVudCBET00gbWV0aG9k
cyBhcmUgcHJveGllZCB0bworICAgKi8KKyAgZnVuY3Rpb24gRE9NSGVscGVyKF9kb2N1bWVudCkg
eworICAgIHRoaXMuZG9jdW1lbnQgPSBfZG9jdW1lbnQgfHwgZG9jdW1lbnQ7CisgICAgaWYgKCF0
aGlzLmRvY3VtZW50KSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoIkEgZG9jdW1lbnQgb2JqZWN0
IG11c3QgYmUgcGFzc2VkIHRvIHRoZSBET01IZWxwZXIsIG9yIGF2YWlsYWJsZSBvbiB0aGUgZ2xv
YmFsIHNjb3BlIik7CisgICAgfQorICAgIHRoaXMuY2FuQ2xvbmUgPSBjYW5DbG9uZTsKKyAgICB0
aGlzLm5hbWVzcGFjZSA9IG51bGw7CisKKyAgICBpbnN0YWxsRW52aXJvbm1lbnRTcGVjaWZpY01l
dGhvZHModGhpcyk7CisgIH0KKworICB2YXIgcHJvdG90eXBlID0gRE9NSGVscGVyLnByb3RvdHlw
ZTsKKyAgcHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRE9NSGVscGVyOworCisgIHByb3RvdHlwZS5n
ZXRFbGVtZW50QnlJZCA9IGZ1bmN0aW9uIChpZCwgcm9vdE5vZGUpIHsKKyAgICByb290Tm9kZSA9
IHJvb3ROb2RlIHx8IHRoaXMuZG9jdW1lbnQ7CisgICAgcmV0dXJuIHJvb3ROb2RlLmdldEVsZW1l
bnRCeUlkKGlkKTsKKyAgfTsKKworICBwcm90b3R5cGUuaW5zZXJ0QmVmb3JlID0gZnVuY3Rpb24g
KGVsZW1lbnQsIGNoaWxkRWxlbWVudCwgcmVmZXJlbmNlQ2hpbGQpIHsKKyAgICByZXR1cm4gZWxl
bWVudC5pbnNlcnRCZWZvcmUoY2hpbGRFbGVtZW50LCByZWZlcmVuY2VDaGlsZCk7CisgIH07CisK
KyAgcHJvdG90eXBlLmFwcGVuZENoaWxkID0gZnVuY3Rpb24gKGVsZW1lbnQsIGNoaWxkRWxlbWVu
dCkgeworICAgIHJldHVybiBlbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkRWxlbWVudCk7CisgIH07
CisKKyAgdmFyIGl0ZW1BdDsKKworICAvLyBJdCBhcHBlYXJzIHRoYXQgc29tZXRpbWVzLCBpbiB5
ZXQgdG8gYmUgaXRlbnRpZmllZCBzY2VuYXJpb3MgUGhhbnRvbUpTIDIuMAorICAvLyBjcmFzaGVz
IG9uIGNoaWxkTm9kZXMuaXRlbShpbmRleCksIGJ1dCB3b3JrcyBhcyBleHBlY3RlZCB3aXRoIGNo
aWxkTm9kZXNbaW5kZXhdOworICAvLworICAvLyBBbHRob3VnaCBpdCB3b3VsZCBiZSBuaWNlIHRv
IG1vdmUgdG8gY2hpbGROb2Rlc1tpbmRleF0gaW4gYWxsIHNjZW5hcmlvcywKKyAgLy8gdGhpcyB3
b3VsZCByZXF1aXJlIFNpbXBsZURPTSB0byBtYWludGFpbiB0aGUgY2hpbGROb2RlcyBhcnJheS4g
VGhpcyB3b3VsZCBiZQorICAvLyBxdWl0ZSBjb3N0bHksIGluIGJvdGggZGV2IHRpbWUgYW5kIHJ1
bnRpbWUuCisgIC8vCisgIC8vIFNvIGluc3RlYWQsIHdlIGNob29zZSB0aGUgYmVzdCBwb3NzaWJs
ZSBtZXRob2QgYW5kIGNhbGwgaXQgYSBkYXkuCisgIC8vCisgIC8qZ2xvYmFsIG5hdmlnYXRvciAq
LworICBpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVz
ZXJBZ2VudC5pbmRleE9mKCdQaGFudG9tSlMnKSkgeworICAgIGl0ZW1BdCA9IGZ1bmN0aW9uIChu
b2RlcywgaW5kZXgpIHsKKyAgICAgIHJldHVybiBub2Rlc1tpbmRleF07CisgICAgfTsKKyAgfSBl
bHNlIHsKKyAgICBpdGVtQXQgPSBmdW5jdGlvbiAobm9kZXMsIGluZGV4KSB7CisgICAgICByZXR1
cm4gbm9kZXMuaXRlbShpbmRleCk7CisgICAgfTsKKyAgfQorCisgIHByb3RvdHlwZS5jaGlsZEF0
ID0gZnVuY3Rpb24gKGVsZW1lbnQsIGluZGljZXMpIHsKKyAgICB2YXIgY2hpbGQgPSBlbGVtZW50
OworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSsrKSB7CisgICAg
ICBjaGlsZCA9IGl0ZW1BdChjaGlsZC5jaGlsZE5vZGVzLCBpbmRpY2VzW2ldKTsKKyAgICB9CisK
KyAgICByZXR1cm4gY2hpbGQ7CisgIH07CisKKyAgLy8gTm90ZSB0byBhIEZlbGxvdyBJbXBsZW1l
bnRvcjoKKyAgLy8gQWhoLCBhY2Nlc3NpbmcgYSBjaGlsZCBub2RlIGF0IGFuIGluZGV4LiBTZWVt
cyBsaWtlIGl0IHNob3VsZCBiZSBzbyBzaW1wbGUsCisgIC8vIGRvZXNuJ3QgaXQ/IFVuZm9ydHVu
YXRlbHksIHRoaXMgcGFydGljdWxhciBtZXRob2QgaGFzIGNhdXNlZCB1cyBhIHN1cnByaXNpbmcK
KyAgLy8gYW1vdW50IG9mIHBhaW4uIEFzIHlvdSdsbCBub3RlIGJlbG93LCB0aGlzIG1ldGhvZCBo
YXMgYmVlbiBtb2RpZmllZCB0byB3YWxrCisgIC8vIHRoZSBsaW5rZWQgbGlzdCBvZiBjaGlsZCBu
b2RlcyByYXRoZXIgdGhhbiBhY2Nlc3MgdGhlIGNoaWxkIGJ5IGluZGV4CisgIC8vIGRpcmVjdGx5
LCBldmVuIHRob3VnaCB0aGVyZSBhcmUgdHdvICgyKSBBUElzIGluIHRoZSBET00gdGhhdCBkbyB0
aGlzIGZvciB1cy4KKyAgLy8gSWYgeW91J3JlIHRoaW5raW5nIHRvIHlvdXJzZWxmLCAiV2hhdCBh
biBvdmVyc2lnaHQhIFdoYXQgYW4gb3Bwb3J0dW5pdHkgdG8KKyAgLy8gb3B0aW1pemUgdGhpcyBj
b2RlISIgdGhlbiB0byB5b3UgSSBzYXk6IHN0b3AhIEZvciBJIGhhdmUgYSB0YWxlIHRvIHRlbGwu
CisgIC8vCisgIC8vIEZpcnN0LCB0aGlzIGNvZGUgbXVzdCBiZSBjb21wYXRpYmxlIHdpdGggc2lt
cGxlLWRvbSBmb3IgcmVuZGVyaW5nIG9uIHRoZQorICAvLyBzZXJ2ZXIgd2hlcmUgdGhlcmUgaXMg
bm8gcmVhbCBET00uIFByZXZpb3VzbHksIHdlIGFjY2Vzc2VkIGEgY2hpbGQgbm9kZQorICAvLyBk
aXJlY3RseSB2aWEgYGVsZW1lbnQuY2hpbGROb2Rlc1tpbmRleF1gLiBXaGlsZSB3ZSAqY291bGQq
IGluIHRoZW9yeSBkbyBhCisgIC8vIGZ1bGwtZmlkZWxpdHkgc2ltdWxhdGlvbiBvZiBhIGxpdmUg
YGNoaWxkTm9kZXNgIGFycmF5LCB0aGlzIGlzIHNsb3csCisgIC8vIGNvbXBsaWNhdGVkIGFuZCBl
cnJvci1wcm9uZS4KKyAgLy8KKyAgLy8gIk5vIHByb2JsZW0sIiB3ZSB0aG91Z2h0LCAid2UnbGwg
anVzdCB1c2UgdGhlIHNpbWlsYXIKKyAgLy8gYGNoaWxkTm9kZXMuaXRlbShpbmRleClgIEFQSS4i
IFRoZW4sIHdlIGNvdWxkIGp1c3QgaW1wbGVtZW50IG91ciBvd24gYGl0ZW1gCisgIC8vIG1ldGhv
ZCBpbiBzaW1wbGUtZG9tIGFuZCB3YWxrIHRoZSBjaGlsZCBub2RlIGxpbmtlZCBsaXN0IHRoZXJl
LCBhbGxvd2luZworICAvLyB1cyB0byByZXRhaW4gdGhlIHBlcmZvcm1hbmNlIGFkdmFudGFnZXMg
b2YgdGhlIChzdXJlbHkgb3B0aW1pemVkKSBgaXRlbSgpYAorICAvLyBBUEkgaW4gdGhlIGJyb3dz
ZXIuCisgIC8vCisgIC8vIFVuZm9ydHVuYXRlbHksIGFuIGVudGVycHJpc2luZyBzb3VsIG5hbWVk
IFNhbXkgQWx6YWhyYW5pIGRpc2NvdmVyZWQgdGhhdCBpbgorICAvLyBJRTgsIGFjY2Vzc2luZyBh
biBpdGVtIG91dC1vZi1ib3VuZHMgdmlhIGBpdGVtKClgIGNhdXNlcyBhbiBleGNlcHRpb24gd2hl
cmUKKyAgLy8gb3RoZXIgYnJvd3NlcnMgcmV0dXJuIG51bGwuIFRoaXMgbmVjZXNzaXRhdGVkIGEu
Li4gY2hlY2sgb2YKKyAgLy8gYGNoaWxkTm9kZXMubGVuZ3RoYCwgYnJpbmdpbmcgdXMgYmFjayBh
cm91bmQgdG8gaGF2aW5nIHRvIHN1cHBvcnQgYQorICAvLyBmdWxsLWZpZGVsaXR5IGBjaGlsZE5v
ZGVzYCBhcnJheSEKKyAgLy8KKyAgLy8gV29yc3Qgb2YgYWxsLCBLcmlzIFNlbGRlbiBpbnZlc3Rp
Z2F0ZWQgaG93IGJyb3dzZXJzIGFyZSBhY3R1YWx5IGltcGxlbWVudGVkCisgIC8vIGFuZCBkaXNj
b3ZlcmVkIHRoYXQgdGhleSdyZSBhbGwgbGlua2VkIGxpc3RzIHVuZGVyIHRoZSBob29kIGFueXdh
eS4gQWNjZXNzaW5nCisgIC8vIGBjaGlsZE5vZGVzYCByZXF1aXJlcyB0aGVtIHRvIGFsbG9jYXRl
IGEgbmV3IGxpdmUgY29sbGVjdGlvbiBiYWNrZWQgYnkgdGhhdAorICAvLyBsaW5rZWQgbGlzdCwg
d2hpY2ggaXMgaXRzZWxmIGEgcmF0aGVyIGV4cGVuc2l2ZSBvcGVyYXRpb24uIE91ciBhc3N1bWVk
CisgIC8vIG9wdGltaXphdGlvbiBoYWQgYmFja2ZpcmVkISBUaGF0IGlzIHRoZSBkYW5nZXIgb2Yg
bWFnaWNhbCB0aGlua2luZyBhYm91dAorICAvLyB0aGUgcGVyZm9ybWFuY2Ugb2YgbmF0aXZlIGlt
cGxlbWVudGF0aW9ucy4KKyAgLy8KKyAgLy8gQW5kIHRoaXMsIG15IGZyaWVuZHMsIGlzIHdoeSB0
aGUgZm9sbG93aW5nIGltcGxlbWVudGF0aW9uIGp1c3Qgd2Fsa3MgdGhlCisgIC8vIGxpbmtlZCBs
aXN0LCBhcyBzdXJwcmlzZWQgYXMgdGhhdCBtYXkgbWFrZSB5b3UuIFBsZWFzZSBlbnN1cmUgeW91
IHVuZGVyc3RhbmQKKyAgLy8gdGhlIGFib3ZlIGJlZm9yZSBjaGFuZ2luZyB0aGlzIGFuZCBzdWJt
aXR0aW5nIGEgUFIuCisgIC8vCisgIC8vIFRvbSBEYWxlLCBKYW51YXJ5IDE4dGgsIDIwMTUsIFBv
cnRsYW5kIE9SCisgIHByb3RvdHlwZS5jaGlsZEF0SW5kZXggPSBmdW5jdGlvbiAoZWxlbWVudCwg
aW5kZXgpIHsKKyAgICB2YXIgbm9kZSA9IGVsZW1lbnQuZmlyc3RDaGlsZDsKKworICAgIGZvciAo
dmFyIGlkeCA9IDA7IG5vZGUgJiYgaWR4IDwgaW5kZXg7IGlkeCsrKSB7CisgICAgICBub2RlID0g
bm9kZS5uZXh0U2libGluZzsKKyAgICB9CisKKyAgICByZXR1cm4gbm9kZTsKKyAgfTsKKworICBw
cm90b3R5cGUuYXBwZW5kVGV4dCA9IGZ1bmN0aW9uIChlbGVtZW50LCB0ZXh0KSB7CisgICAgcmV0
dXJuIGVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0
KSk7CisgIH07CisKKyAgcHJvdG90eXBlLnNldEF0dHJpYnV0ZSA9IGZ1bmN0aW9uIChlbGVtZW50
LCBuYW1lLCB2YWx1ZSkgeworICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIFN0cmluZyh2
YWx1ZSkpOworICB9OworCisgIHByb3RvdHlwZS5nZXRBdHRyaWJ1dGUgPSBmdW5jdGlvbiAoZWxl
bWVudCwgbmFtZSkgeworICAgIHJldHVybiBlbGVtZW50LmdldEF0dHJpYnV0ZShuYW1lKTsKKyAg
fTsKKworICBwcm90b3R5cGUuc2V0QXR0cmlidXRlTlMgPSBmdW5jdGlvbiAoZWxlbWVudCwgbmFt
ZXNwYWNlLCBuYW1lLCB2YWx1ZSkgeworICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlTlMobmFtZXNw
YWNlLCBuYW1lLCBTdHJpbmcodmFsdWUpKTsKKyAgfTsKKworICBwcm90b3R5cGUuZ2V0QXR0cmli
dXRlTlMgPSBmdW5jdGlvbiAoZWxlbWVudCwgbmFtZXNwYWNlLCBuYW1lKSB7CisgICAgcmV0dXJu
IGVsZW1lbnQuZ2V0QXR0cmlidXRlTlMobmFtZXNwYWNlLCBuYW1lKTsKKyAgfTsKKworICBpZiAo
Y2FuUmVtb3ZlU3ZnVmlld0JveEF0dHJpYnV0ZSkgeworICAgIHByb3RvdHlwZS5yZW1vdmVBdHRy
aWJ1dGUgPSBmdW5jdGlvbiAoZWxlbWVudCwgbmFtZSkgeworICAgICAgZWxlbWVudC5yZW1vdmVB
dHRyaWJ1dGUobmFtZSk7CisgICAgfTsKKyAgfSBlbHNlIHsKKyAgICBwcm90b3R5cGUucmVtb3Zl
QXR0cmlidXRlID0gZnVuY3Rpb24gKGVsZW1lbnQsIG5hbWUpIHsKKyAgICAgIGlmIChlbGVtZW50
LnRhZ05hbWUgPT09ICdzdmcnICYmIG5hbWUgPT09ICd2aWV3Qm94JykgeworICAgICAgICBlbGVt
ZW50LnNldEF0dHJpYnV0ZShuYW1lLCBudWxsKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGVs
ZW1lbnQucmVtb3ZlQXR0cmlidXRlKG5hbWUpOworICAgICAgfQorICAgIH07CisgIH0KKworICBw
cm90b3R5cGUuc2V0UHJvcGVydHlTdHJpY3QgPSBmdW5jdGlvbiAoZWxlbWVudCwgbmFtZSwgdmFs
dWUpIHsKKyAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgeworICAgICAgdmFsdWUgPSBudWxs
OworICAgIH0KKworICAgIGlmICh2YWx1ZSA9PT0gbnVsbCAmJiAobmFtZSA9PT0gJ3ZhbHVlJyB8
fCBuYW1lID09PSAndHlwZScgfHwgbmFtZSA9PT0gJ3NyYycpKSB7CisgICAgICB2YWx1ZSA9ICcn
OworICAgIH0KKworICAgIGVsZW1lbnRbbmFtZV0gPSB2YWx1ZTsKKyAgfTsKKworICBwcm90b3R5
cGUuZ2V0UHJvcGVydHlTdHJpY3QgPSBmdW5jdGlvbiAoZWxlbWVudCwgbmFtZSkgeworICAgIHJl
dHVybiBlbGVtZW50W25hbWVdOworICB9OworCisgIHByb3RvdHlwZS5zZXRQcm9wZXJ0eSA9IGZ1
bmN0aW9uIChlbGVtZW50LCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlKSB7CisgICAgaWYgKGVsZW1l
bnQubmFtZXNwYWNlVVJJID09PSBfZG9tSGVscGVyQnVpbGRIdG1sRG9tLnN2Z05hbWVzcGFjZSkg
eworICAgICAgaWYgKF9kb21IZWxwZXJQcm9wLmlzQXR0clJlbW92YWxWYWx1ZSh2YWx1ZSkpIHsK
KyAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7CisgICAgICB9IGVsc2Ugewor
ICAgICAgICBpZiAobmFtZXNwYWNlKSB7CisgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGVO
UyhuYW1lc3BhY2UsIG5hbWUsIHZhbHVlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBl
bGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgdmFyIF9ub3JtYWxpemVQcm9wZXJ0eSA9IF9kb21IZWxwZXJQcm9w
Lm5vcm1hbGl6ZVByb3BlcnR5KGVsZW1lbnQsIG5hbWUpOworCisgICAgICB2YXIgbm9ybWFsaXpl
ZCA9IF9ub3JtYWxpemVQcm9wZXJ0eS5ub3JtYWxpemVkOworICAgICAgdmFyIHR5cGUgPSBfbm9y
bWFsaXplUHJvcGVydHkudHlwZTsKKworICAgICAgaWYgKHR5cGUgPT09ICdwcm9wJykgeworICAg
ICAgICBlbGVtZW50W25vcm1hbGl6ZWRdID0gdmFsdWU7CisgICAgICB9IGVsc2UgeworICAgICAg
ICBpZiAoX2RvbUhlbHBlclByb3AuaXNBdHRyUmVtb3ZhbFZhbHVlKHZhbHVlKSkgeworICAgICAg
ICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKG5hbWUpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgIGlmIChuYW1lc3BhY2UgJiYgZWxlbWVudC5zZXRBdHRyaWJ1dGVOUykgeworICAgICAg
ICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhuYW1lc3BhY2UsIG5hbWUsIHZhbHVlKTsKKyAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUobmFtZSwg
dmFsdWUpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfTsKKwor
ICBpZiAoZG9jICYmIGRvYy5jcmVhdGVFbGVtZW50TlMpIHsKKyAgICAvLyBPbmx5IG9wdCBpbnRv
IG5hbWVzcGFjZSBkZXRlY3Rpb24gaWYgYSBjb250ZXh0dWFsRWxlbWVudAorICAgIC8vIGlzIHBh
c3NlZC4KKyAgICBwcm90b3R5cGUuY3JlYXRlRWxlbWVudCA9IGZ1bmN0aW9uICh0YWdOYW1lLCBj
b250ZXh0dWFsRWxlbWVudCkgeworICAgICAgdmFyIG5hbWVzcGFjZSA9IHRoaXMubmFtZXNwYWNl
OworICAgICAgaWYgKGNvbnRleHR1YWxFbGVtZW50KSB7CisgICAgICAgIGlmICh0YWdOYW1lID09
PSAnc3ZnJykgeworICAgICAgICAgIG5hbWVzcGFjZSA9IF9kb21IZWxwZXJCdWlsZEh0bWxEb20u
c3ZnTmFtZXNwYWNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIG5hbWVzcGFjZSA9IGlu
dGVyaW9yTmFtZXNwYWNlKGNvbnRleHR1YWxFbGVtZW50KTsKKyAgICAgICAgfQorICAgICAgfQor
ICAgICAgaWYgKG5hbWVzcGFjZSkgeworICAgICAgICByZXR1cm4gdGhpcy5kb2N1bWVudC5jcmVh
dGVFbGVtZW50TlMobmFtZXNwYWNlLCB0YWdOYW1lKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAg
IHJldHVybiB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7CisgICAgICB9Cisg
ICAgfTsKKyAgICBwcm90b3R5cGUuc2V0QXR0cmlidXRlTlMgPSBmdW5jdGlvbiAoZWxlbWVudCwg
bmFtZXNwYWNlLCBuYW1lLCB2YWx1ZSkgeworICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhu
YW1lc3BhY2UsIG5hbWUsIFN0cmluZyh2YWx1ZSkpOworICAgIH07CisgIH0gZWxzZSB7CisgICAg
cHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbiAodGFnTmFtZSkgeworICAgICAgcmV0
dXJuIHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTsKKyAgICB9OworICAgIHBy
b3RvdHlwZS5zZXRBdHRyaWJ1dGVOUyA9IGZ1bmN0aW9uIChlbGVtZW50LCBuYW1lc3BhY2UsIG5h
bWUsIHZhbHVlKSB7CisgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCBTdHJpbmcodmFs
dWUpKTsKKyAgICB9OworICB9CisKKyAgcHJvdG90eXBlLmFkZENsYXNzZXMgPSBfZG9tSGVscGVy
Q2xhc3Nlcy5hZGRDbGFzc2VzOworICBwcm90b3R5cGUucmVtb3ZlQ2xhc3NlcyA9IF9kb21IZWxw
ZXJDbGFzc2VzLnJlbW92ZUNsYXNzZXM7CisKKyAgcHJvdG90eXBlLnNldE5hbWVzcGFjZSA9IGZ1
bmN0aW9uIChucykgeworICAgIHRoaXMubmFtZXNwYWNlID0gbnM7CisgIH07CisKKyAgcHJvdG90
eXBlLmRldGVjdE5hbWVzcGFjZSA9IGZ1bmN0aW9uIChlbGVtZW50KSB7CisgICAgdGhpcy5uYW1l
c3BhY2UgPSBpbnRlcmlvck5hbWVzcGFjZShlbGVtZW50KTsKKyAgfTsKKworICBwcm90b3R5cGUu
Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCA9IGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4gdGhpcy5k
b2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisgIH07CisKKyAgcHJvdG90eXBlLmNy
ZWF0ZVRleHROb2RlID0gZnVuY3Rpb24gKHRleHQpIHsKKyAgICByZXR1cm4gdGhpcy5kb2N1bWVu
dC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KTsKKyAgfTsKKworICBwcm90b3R5cGUuY3JlYXRlQ29tbWVu
dCA9IGZ1bmN0aW9uICh0ZXh0KSB7CisgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnQuY3JlYXRlQ29t
bWVudCh0ZXh0KTsKKyAgfTsKKworICBwcm90b3R5cGUucmVwYWlyQ2xvbmVkTm9kZSA9IGZ1bmN0
aW9uIChlbGVtZW50LCBibGFua0NoaWxkVGV4dE5vZGVzLCBpc0NoZWNrZWQpIHsKKyAgICBpZiAo
ZGVsZXRlc0JsYW5rVGV4dE5vZGVzICYmIGJsYW5rQ2hpbGRUZXh0Tm9kZXMubGVuZ3RoID4gMCkg
eworICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGJsYW5rQ2hpbGRUZXh0Tm9kZXMubGVuZ3Ro
OyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgdmFyIHRleHROb2RlID0gdGhpcy5kb2N1bWVudC5j
cmVhdGVUZXh0Tm9kZSgnJyksCisgICAgICAgICAgICBvZmZzZXQgPSBibGFua0NoaWxkVGV4dE5v
ZGVzW2ldLAorICAgICAgICAgICAgYmVmb3JlID0gdGhpcy5jaGlsZEF0SW5kZXgoZWxlbWVudCwg
b2Zmc2V0KTsKKyAgICAgICAgaWYgKGJlZm9yZSkgeworICAgICAgICAgIGVsZW1lbnQuaW5zZXJ0
QmVmb3JlKHRleHROb2RlLCBiZWZvcmUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGVs
ZW1lbnQuYXBwZW5kQ2hpbGQodGV4dE5vZGUpOworICAgICAgICB9CisgICAgICB9CisgICAgfQor
ICAgIGlmIChpZ25vcmVzQ2hlY2tlZEF0dHJpYnV0ZSAmJiBpc0NoZWNrZWQpIHsKKyAgICAgIGVs
ZW1lbnQuc2V0QXR0cmlidXRlKCdjaGVja2VkJywgJ2NoZWNrZWQnKTsKKyAgICB9CisgIH07CisK
KyAgcHJvdG90eXBlLmNsb25lTm9kZSA9IGZ1bmN0aW9uIChlbGVtZW50LCBkZWVwKSB7CisgICAg
dmFyIGNsb25lID0gZWxlbWVudC5jbG9uZU5vZGUoISFkZWVwKTsKKyAgICByZXR1cm4gY2xvbmU7
CisgIH07CisKKyAgcHJvdG90eXBlLkF0dHJNb3JwaENsYXNzID0gX21vcnBoQXR0ci5kZWZhdWx0
OworCisgIHByb3RvdHlwZS5jcmVhdGVBdHRyTW9ycGggPSBmdW5jdGlvbiAoZWxlbWVudCwgYXR0
ck5hbWUsIG5hbWVzcGFjZSkgeworICAgIHJldHVybiB0aGlzLkF0dHJNb3JwaENsYXNzLmNyZWF0
ZShlbGVtZW50LCBhdHRyTmFtZSwgdGhpcywgbmFtZXNwYWNlKTsKKyAgfTsKKworICBwcm90b3R5
cGUuRWxlbWVudE1vcnBoQ2xhc3MgPSBFbGVtZW50TW9ycGg7CisKKyAgcHJvdG90eXBlLmNyZWF0
ZUVsZW1lbnRNb3JwaCA9IGZ1bmN0aW9uIChlbGVtZW50LCBuYW1lc3BhY2UpIHsKKyAgICByZXR1
cm4gbmV3IHRoaXMuRWxlbWVudE1vcnBoQ2xhc3MoZWxlbWVudCwgdGhpcywgbmFtZXNwYWNlKTsK
KyAgfTsKKworICBwcm90b3R5cGUuY3JlYXRlVW5zYWZlQXR0ck1vcnBoID0gZnVuY3Rpb24gKGVs
ZW1lbnQsIGF0dHJOYW1lLCBuYW1lc3BhY2UpIHsKKyAgICB2YXIgbW9ycGggPSB0aGlzLmNyZWF0
ZUF0dHJNb3JwaChlbGVtZW50LCBhdHRyTmFtZSwgbmFtZXNwYWNlKTsKKyAgICBtb3JwaC5lc2Nh
cGVkID0gZmFsc2U7CisgICAgcmV0dXJuIG1vcnBoOworICB9OworCisgIHByb3RvdHlwZS5Nb3Jw
aENsYXNzID0gX2h0bWxiYXJzUnVudGltZU1vcnBoLmRlZmF1bHQ7CisKKyAgcHJvdG90eXBlLmNy
ZWF0ZU1vcnBoID0gZnVuY3Rpb24gKHBhcmVudCwgc3RhcnQsIGVuZCwgY29udGV4dHVhbEVsZW1l
bnQpIHsKKyAgICBpZiAoY29udGV4dHVhbEVsZW1lbnQgJiYgY29udGV4dHVhbEVsZW1lbnQubm9k
ZVR5cGUgPT09IDExKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBwYXNzIGEgZnJh
Z21lbnQgYXMgdGhlIGNvbnRleHR1YWwgZWxlbWVudCB0byBjcmVhdGVNb3JwaCIpOworICAgIH0K
KworICAgIGlmICghY29udGV4dHVhbEVsZW1lbnQgJiYgcGFyZW50ICYmIHBhcmVudC5ub2RlVHlw
ZSA9PT0gMSkgeworICAgICAgY29udGV4dHVhbEVsZW1lbnQgPSBwYXJlbnQ7CisgICAgfQorICAg
IHZhciBtb3JwaCA9IG5ldyB0aGlzLk1vcnBoQ2xhc3ModGhpcywgY29udGV4dHVhbEVsZW1lbnQp
OworICAgIG1vcnBoLmZpcnN0Tm9kZSA9IHN0YXJ0OworICAgIG1vcnBoLmxhc3ROb2RlID0gZW5k
OworICAgIHJldHVybiBtb3JwaDsKKyAgfTsKKworICBwcm90b3R5cGUuY3JlYXRlRnJhZ21lbnRN
b3JwaCA9IGZ1bmN0aW9uIChjb250ZXh0dWFsRWxlbWVudCkgeworICAgIGlmIChjb250ZXh0dWFs
RWxlbWVudCAmJiBjb250ZXh0dWFsRWxlbWVudC5ub2RlVHlwZSA9PT0gMTEpIHsKKyAgICAgIHRo
cm93IG5ldyBFcnJvcigiQ2Fubm90IHBhc3MgYSBmcmFnbWVudCBhcyB0aGUgY29udGV4dHVhbCBl
bGVtZW50IHRvIGNyZWF0ZU1vcnBoIik7CisgICAgfQorCisgICAgdmFyIGZyYWdtZW50ID0gdGhp
cy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisgICAgcmV0dXJuIF9odG1sYmFyc1J1bnRpbWVN
b3JwaC5kZWZhdWx0LmNyZWF0ZSh0aGlzLCBjb250ZXh0dWFsRWxlbWVudCwgZnJhZ21lbnQpOwor
ICB9OworCisgIHByb3RvdHlwZS5yZXBsYWNlQ29udGVudFdpdGhNb3JwaCA9IGZ1bmN0aW9uIChl
bGVtZW50KSB7CisgICAgdmFyIGZpcnN0Q2hpbGQgPSBlbGVtZW50LmZpcnN0Q2hpbGQ7CisKKyAg
ICBpZiAoIWZpcnN0Q2hpbGQpIHsKKyAgICAgIHZhciBjb21tZW50ID0gdGhpcy5jcmVhdGVDb21t
ZW50KCcnKTsKKyAgICAgIHRoaXMuYXBwZW5kQ2hpbGQoZWxlbWVudCwgY29tbWVudCk7CisgICAg
ICByZXR1cm4gX2h0bWxiYXJzUnVudGltZU1vcnBoLmRlZmF1bHQuY3JlYXRlKHRoaXMsIGVsZW1l
bnQsIGNvbW1lbnQpOworICAgIH0gZWxzZSB7CisgICAgICB2YXIgbW9ycGggPSBfaHRtbGJhcnNS
dW50aW1lTW9ycGguZGVmYXVsdC5hdHRhY2godGhpcywgZWxlbWVudCwgZmlyc3RDaGlsZCwgZWxl
bWVudC5sYXN0Q2hpbGQpOworICAgICAgbW9ycGguY2xlYXIoKTsKKyAgICAgIHJldHVybiBtb3Jw
aDsKKyAgICB9CisgIH07CisKKyAgcHJvdG90eXBlLmNyZWF0ZVVuc2FmZU1vcnBoID0gZnVuY3Rp
b24gKHBhcmVudCwgc3RhcnQsIGVuZCwgY29udGV4dHVhbEVsZW1lbnQpIHsKKyAgICB2YXIgbW9y
cGggPSB0aGlzLmNyZWF0ZU1vcnBoKHBhcmVudCwgc3RhcnQsIGVuZCwgY29udGV4dHVhbEVsZW1l
bnQpOworICAgIG1vcnBoLnBhcnNlVGV4dEFzSFRNTCA9IHRydWU7CisgICAgcmV0dXJuIG1vcnBo
OworICB9OworCisgIC8vIFRoaXMgaGVscGVyIGlzIGp1c3QgdG8ga2VlcCB0aGUgdGVtcGxhdGVz
IGdvb2QgbG9va2luZywKKyAgLy8gcGFzc2luZyBpbnRlZ2VycyBpbnN0ZWFkIG9mIGVsZW1lbnQg
cmVmZXJlbmNlcy4KKyAgcHJvdG90eXBlLmNyZWF0ZU1vcnBoQXQgPSBmdW5jdGlvbiAocGFyZW50
LCBzdGFydEluZGV4LCBlbmRJbmRleCwgY29udGV4dHVhbEVsZW1lbnQpIHsKKyAgICB2YXIgc2lu
Z2xlID0gc3RhcnRJbmRleCA9PT0gZW5kSW5kZXg7CisgICAgdmFyIHN0YXJ0ID0gdGhpcy5jaGls
ZEF0SW5kZXgocGFyZW50LCBzdGFydEluZGV4KTsKKyAgICB2YXIgZW5kID0gc2luZ2xlID8gc3Rh
cnQgOiB0aGlzLmNoaWxkQXRJbmRleChwYXJlbnQsIGVuZEluZGV4KTsKKyAgICByZXR1cm4gdGhp
cy5jcmVhdGVNb3JwaChwYXJlbnQsIHN0YXJ0LCBlbmQsIGNvbnRleHR1YWxFbGVtZW50KTsKKyAg
fTsKKworICBwcm90b3R5cGUuY3JlYXRlVW5zYWZlTW9ycGhBdCA9IGZ1bmN0aW9uIChwYXJlbnQs
IHN0YXJ0SW5kZXgsIGVuZEluZGV4LCBjb250ZXh0dWFsRWxlbWVudCkgeworICAgIHZhciBtb3Jw
aCA9IHRoaXMuY3JlYXRlTW9ycGhBdChwYXJlbnQsIHN0YXJ0SW5kZXgsIGVuZEluZGV4LCBjb250
ZXh0dWFsRWxlbWVudCk7CisgICAgbW9ycGgucGFyc2VUZXh0QXNIVE1MID0gdHJ1ZTsKKyAgICBy
ZXR1cm4gbW9ycGg7CisgIH07CisKKyAgcHJvdG90eXBlLmluc2VydE1vcnBoQmVmb3JlID0gZnVu
Y3Rpb24gKGVsZW1lbnQsIHJlZmVyZW5jZUNoaWxkLCBjb250ZXh0dWFsRWxlbWVudCkgeworICAg
IHZhciBpbnNlcnRpb24gPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoJycpOworICAgIGVs
ZW1lbnQuaW5zZXJ0QmVmb3JlKGluc2VydGlvbiwgcmVmZXJlbmNlQ2hpbGQpOworICAgIHJldHVy
biB0aGlzLmNyZWF0ZU1vcnBoKGVsZW1lbnQsIGluc2VydGlvbiwgaW5zZXJ0aW9uLCBjb250ZXh0
dWFsRWxlbWVudCk7CisgIH07CisKKyAgcHJvdG90eXBlLmFwcGVuZE1vcnBoID0gZnVuY3Rpb24g
KGVsZW1lbnQsIGNvbnRleHR1YWxFbGVtZW50KSB7CisgICAgdmFyIGluc2VydGlvbiA9IHRoaXMu
ZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgnJyk7CisgICAgZWxlbWVudC5hcHBlbmRDaGlsZChpbnNl
cnRpb24pOworICAgIHJldHVybiB0aGlzLmNyZWF0ZU1vcnBoKGVsZW1lbnQsIGluc2VydGlvbiwg
aW5zZXJ0aW9uLCBjb250ZXh0dWFsRWxlbWVudCk7CisgIH07CisKKyAgcHJvdG90eXBlLmluc2Vy
dEJvdW5kYXJ5ID0gZnVuY3Rpb24gKGZyYWdtZW50LCBpbmRleCkgeworICAgIC8vIHRoaXMgd2ls
bCBhbHdheXMgYmUgbnVsbCBvciBmaXJzdENoaWxkCisgICAgdmFyIGNoaWxkID0gaW5kZXggPT09
IG51bGwgPyBudWxsIDogdGhpcy5jaGlsZEF0SW5kZXgoZnJhZ21lbnQsIGluZGV4KTsKKyAgICB0
aGlzLmluc2VydEJlZm9yZShmcmFnbWVudCwgdGhpcy5jcmVhdGVUZXh0Tm9kZSgnJyksIGNoaWxk
KTsKKyAgfTsKKworICBwcm90b3R5cGUuc2V0TW9ycGhIVE1MID0gZnVuY3Rpb24gKG1vcnBoLCBo
dG1sKSB7CisgICAgbW9ycGguc2V0SFRNTChodG1sKTsKKyAgfTsKKworICBwcm90b3R5cGUucGFy
c2VIVE1MID0gZnVuY3Rpb24gKGh0bWwsIGNvbnRleHR1YWxFbGVtZW50KSB7CisgICAgdmFyIGNo
aWxkTm9kZXM7CisKKyAgICBpZiAoaW50ZXJpb3JOYW1lc3BhY2UoY29udGV4dHVhbEVsZW1lbnQp
ID09PSBfZG9tSGVscGVyQnVpbGRIdG1sRG9tLnN2Z05hbWVzcGFjZSkgeworICAgICAgY2hpbGRO
b2RlcyA9IGJ1aWxkU1ZHRE9NKGh0bWwsIHRoaXMpOworICAgIH0gZWxzZSB7CisgICAgICB2YXIg
bm9kZXMgPSBfZG9tSGVscGVyQnVpbGRIdG1sRG9tLmJ1aWxkSFRNTERPTShodG1sLCBjb250ZXh0
dWFsRWxlbWVudCwgdGhpcyk7CisgICAgICBpZiAoZGV0ZWN0T21pdHRlZFN0YXJ0VGFnKGh0bWws
IGNvbnRleHR1YWxFbGVtZW50KSkgeworICAgICAgICB2YXIgbm9kZSA9IG5vZGVzWzBdOworICAg
ICAgICB3aGlsZSAobm9kZSAmJiBub2RlLm5vZGVUeXBlICE9PSAxKSB7CisgICAgICAgICAgbm9k
ZSA9IG5vZGUubmV4dFNpYmxpbmc7CisgICAgICAgIH0KKyAgICAgICAgY2hpbGROb2RlcyA9IG5v
ZGUuY2hpbGROb2RlczsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGNoaWxkTm9kZXMgPSBub2Rl
czsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDb3B5IG5vZGUgbGlzdCB0byBhIGZyYWdtZW50
LgorICAgIHZhciBmcmFnbWVudCA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVu
dCgpOworCisgICAgaWYgKGNoaWxkTm9kZXMgJiYgY2hpbGROb2Rlcy5sZW5ndGggPiAwKSB7Cisg
ICAgICB2YXIgY3VycmVudE5vZGUgPSBjaGlsZE5vZGVzWzBdOworCisgICAgICAvLyBXZSBwcmVw
ZW5kIGFuIDxvcHRpb24+IHRvIDxzZWxlY3Q+IGJveGVzIHRvIGFic29yYiBhbnkgYnJvd3NlciBi
dWdzCisgICAgICAvLyByZWxhdGVkIHRvIGF1dG8tc2VsZWN0IGJlaGF2aW9yLiBTa2lwIHBhc3Qg
aXQuCisgICAgICBpZiAoY29udGV4dHVhbEVsZW1lbnQudGFnTmFtZSA9PT0gJ1NFTEVDVCcpIHsK
KyAgICAgICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5uZXh0U2libGluZzsKKyAgICAgIH0K
KworICAgICAgd2hpbGUgKGN1cnJlbnROb2RlKSB7CisgICAgICAgIHZhciB0ZW1wTm9kZSA9IGN1
cnJlbnROb2RlOworICAgICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLm5leHRTaWJsaW5n
OworCisgICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKHRlbXBOb2RlKTsKKyAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gZnJhZ21lbnQ7CisgIH07CisKKyAgdmFyIG5vZGVVUkw7CisgIHZh
ciBwYXJzaW5nTm9kZTsKKworICBmdW5jdGlvbiBpbnN0YWxsRW52aXJvbm1lbnRTcGVjaWZpY01l
dGhvZHMoZG9tSGVscGVyKSB7CisgICAgdmFyIHByb3RvY29sID0gYnJvd3NlclByb3RvY29sRm9y
VVJMLmNhbGwoZG9tSGVscGVyLCAnZm9vYmFyOmJheicpOworCisgICAgLy8gVGVzdCB0byBzZWUg
aWYgb3VyIERPTSBpbXBsZW1lbnRhdGlvbiBwYXJzZXMKKyAgICAvLyBhbmQgbm9ybWFsaXplcyBV
UkxzLgorICAgIGlmIChwcm90b2NvbCA9PT0gJ2Zvb2JhcjonKSB7CisgICAgICAvLyBTd2FwIGlu
IHRoZSBtZXRob2QgdGhhdCBkb2Vzbid0IGRvIHRoaXMgdGVzdCBub3cgdGhhdAorICAgICAgLy8g
d2Uga25vdyBpdCB3b3Jrcy4KKyAgICAgIGRvbUhlbHBlci5wcm90b2NvbEZvclVSTCA9IGJyb3dz
ZXJQcm90b2NvbEZvclVSTDsKKyAgICB9IGVsc2UgaWYgKHR5cGVvZiBVUkwgPT09ICdvYmplY3Qn
KSB7CisgICAgICAvLyBVUkwgZ2xvYmFsbHkgcHJvdmlkZWQsIGxpa2VseSBmcm9tIEZhc3RCb290
J3Mgc2FuZGJveAorICAgICAgbm9kZVVSTCA9IFVSTDsKKyAgICAgIGRvbUhlbHBlci5wcm90b2Nv
bEZvclVSTCA9IG5vZGVQcm90b2NvbEZvclVSTDsKKyAgICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1
bGUgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUucmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJykg
eworICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSBuZWVkIHRvIGZhbGwgYmFjayB0byBvdXIgb3duIFVS
TCBwYXJzaW5nLgorICAgICAgLy8gR2xvYmFsIGByZXF1aXJlYCBpcyBzaGFkb3dlZCBieSBFbWJl
cidzIGxvYWRlciBzbyB3ZSBoYXZlIHRvIHVzZSB0aGUgZnVsbHkKKyAgICAgIC8vIHF1YWxpZmll
ZCBgbW9kdWxlLnJlcXVpcmVgLgorICAgICAgbm9kZVVSTCA9IG1vZHVsZS5yZXF1aXJlKCd1cmwn
KTsKKyAgICAgIGRvbUhlbHBlci5wcm90b2NvbEZvclVSTCA9IG5vZGVQcm90b2NvbEZvclVSTDsK
KyAgICB9IGVsc2UgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCJET00gSGVscGVyIGNvdWxkIG5v
dCBmaW5kIHZhbGlkIFVSTCBwYXJzaW5nIG1lY2hhbmlzbSIpOworICAgIH0KKworICAgIC8vIEEg
U2ltcGxlRE9NLXNwZWNpZmljIGV4dGVuc2lvbiB0aGF0IGFsbG93cyB1cyB0byBwbGFjZSBIVE1M
IGRpcmVjdGx5CisgICAgLy8gaW50byB0aGUgRE9NIHRyZWUsIGZvciB3aGVuIHRoZSBvdXRwdXQg
dGFyZ2V0IGlzIGFsd2F5cyBzZXJpYWxpemVkIEhUTUwuCisgICAgaWYgKGRvbUhlbHBlci5kb2N1
bWVudC5jcmVhdGVSYXdIVE1MU2VjdGlvbikgeworICAgICAgZG9tSGVscGVyLnNldE1vcnBoSFRN
TCA9IG5vZGVTZXRNb3JwaEhUTUw7CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gbm9kZVNldE1v
cnBoSFRNTChtb3JwaCwgaHRtbCkgeworICAgIHZhciBzZWN0aW9uID0gdGhpcy5kb2N1bWVudC5j
cmVhdGVSYXdIVE1MU2VjdGlvbihodG1sKTsKKyAgICBtb3JwaC5zZXROb2RlKHNlY3Rpb24pOwor
ICB9CisKKyAgZnVuY3Rpb24gYnJvd3NlclByb3RvY29sRm9yVVJMKHVybCkgeworICAgIGlmICgh
cGFyc2luZ05vZGUpIHsKKyAgICAgIHBhcnNpbmdOb2RlID0gdGhpcy5kb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdhJyk7CisgICAgfQorCisgICAgcGFyc2luZ05vZGUuaHJlZiA9IHVybDsKKyAgICBy
ZXR1cm4gcGFyc2luZ05vZGUucHJvdG9jb2w7CisgIH0KKworICBmdW5jdGlvbiBub2RlUHJvdG9j
b2xGb3JVUkwodXJsKSB7CisgICAgdmFyIHByb3RvY29sID0gbm9kZVVSTC5wYXJzZSh1cmwpLnBy
b3RvY29sOworICAgIHJldHVybiBwcm90b2NvbCA9PT0gbnVsbCA/ICc6JyA6IHByb3RvY29sOwor
ICB9CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gRE9NSGVscGVyOworfSk7CitlbmlmZWQoJ2RvbS1o
ZWxwZXIvYnVpbGQtaHRtbC1kb20nLCBbJ2V4cG9ydHMnXSwgZnVuY3Rpb24gKGV4cG9ydHMpIHsK
KyAgLyogZ2xvYmFsIFhNTFNlcmlhbGl6ZXI6ZmFsc2UgKi8KKyAgJ3VzZSBzdHJpY3QnOworCisg
IHZhciBzdmdIVE1MSW50ZWdyYXRpb25Qb2ludHMgPSB7IGZvcmVpZ25PYmplY3Q6IDEsIGRlc2M6
IDEsIHRpdGxlOiAxIH07CisgIGV4cG9ydHMuc3ZnSFRNTEludGVncmF0aW9uUG9pbnRzID0gc3Zn
SFRNTEludGVncmF0aW9uUG9pbnRzOworICB2YXIgc3ZnTmFtZXNwYWNlID0gJ2h0dHA6Ly93d3cu
dzMub3JnLzIwMDAvc3ZnJzsKKworICBleHBvcnRzLnN2Z05hbWVzcGFjZSA9IHN2Z05hbWVzcGFj
ZTsKKyAgdmFyIGRvYyA9IHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcgPyBmYWxzZSA6
IGRvY3VtZW50OworCisgIC8vIFNhZmFyaSBkb2VzIG5vdCBsaWtlIHVzaW5nIGlubmVySFRNTCBv
biBTVkcgSFRNTCBpbnRlZ3JhdGlvbgorICAvLyBwb2ludHMgKGRlc2MvdGl0bGUvZm9yZWlnbk9i
amVjdCkuCisgIHZhciBuZWVkc0ludGVncmF0aW9uUG9pbnRGaXggPSBkb2MgJiYgKGZ1bmN0aW9u
IChkb2N1bWVudCkgeworICAgIGlmIChkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMgPT09IHVuZGVm
aW5lZCkgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBJbiBGRiB0aXRsZSB3aWxsIG5v
dCBhY2NlcHQgaW5uZXJIVE1MLgorICAgIHZhciB0ZXN0RWwgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50TlMoc3ZnTmFtZXNwYWNlLCAndGl0bGUnKTsKKyAgICB0ZXN0RWwuaW5uZXJIVE1MID0gIjxk
aXY+PC9kaXY+IjsKKyAgICByZXR1cm4gdGVzdEVsLmNoaWxkTm9kZXMubGVuZ3RoID09PSAwIHx8
IHRlc3RFbC5jaGlsZE5vZGVzWzBdLm5vZGVUeXBlICE9PSAxOworICB9KShkb2MpOworCisgIC8v
IEludGVybmV0IEV4cGxvcmVyIHByaW9yIHRvIDkgZG9lcyBub3QgYWxsb3cgc2V0dGluZyBpbm5l
ckhUTUwgaWYgdGhlIGZpcnN0IGVsZW1lbnQKKyAgLy8gaXMgYSAiemVyby1zY29wZSIgZWxlbWVu
dC4gVGhpcyBwcm9ibGVtIGNhbiBiZSB3b3JrZWQgYXJvdW5kIGJ5IG1ha2luZworICAvLyB0aGUg
Zmlyc3Qgbm9kZSBhbiBpbnZpc2libGUgdGV4dCBub2RlLiBXZSwgbGlrZSBNb2Rlcm5penIsIHVz
ZSAmc2h5OworICB2YXIgbmVlZHNTaHkgPSBkb2MgJiYgKGZ1bmN0aW9uIChkb2N1bWVudCkgewor
ICAgIHZhciB0ZXN0RWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICB0ZXN0
RWwuaW5uZXJIVE1MID0gIjxkaXY+PC9kaXY+IjsKKyAgICB0ZXN0RWwuZmlyc3RDaGlsZC5pbm5l
ckhUTUwgPSAiPHNjcmlwdD48XC9zY3JpcHQ+IjsKKyAgICByZXR1cm4gdGVzdEVsLmZpcnN0Q2hp
bGQuaW5uZXJIVE1MID09PSAnJzsKKyAgfSkoZG9jKTsKKworICAvLyBJRSA4IChhbmQgbGlrZWx5
IGVhcmxpZXIpIGxpa2VzIHRvIG1vdmUgd2hpdGVzcGFjZSBwcmVjZWVkaW5nCisgIC8vIGEgc2Ny
aXB0IHRhZyB0byBhcHBlYXIgYWZ0ZXIgaXQuIFRoaXMgbWVhbnMgdGhhdCB3ZSBjYW4KKyAgLy8g
YWNjaWRlbnRhbGx5IHJlbW92ZSB3aGl0ZXNwYWNlIHdoZW4gdXBkYXRpbmcgYSBtb3JwaC4KKyAg
dmFyIG1vdmVzV2hpdGVzcGFjZSA9IGRvYyAmJiAoZnVuY3Rpb24gKGRvY3VtZW50KSB7CisgICAg
dmFyIHRlc3RFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgIHRlc3RFbC5p
bm5lckhUTUwgPSAiVGVzdDogPHNjcmlwdCB0eXBlPSd0ZXh0L3gtcGxhY2Vob2xkZXInPjxcL3Nj
cmlwdD5WYWx1ZSI7CisgICAgcmV0dXJuIHRlc3RFbC5jaGlsZE5vZGVzWzBdLm5vZGVWYWx1ZSA9
PT0gJ1Rlc3Q6JyAmJiB0ZXN0RWwuY2hpbGROb2Rlc1syXS5ub2RlVmFsdWUgPT09ICcgVmFsdWUn
OworICB9KShkb2MpOworCisgIHZhciB0YWdOYW1lc1JlcXVpcmluZ0lubmVySFRNTEZpeCA9IGRv
YyAmJiAoZnVuY3Rpb24gKGRvY3VtZW50KSB7CisgICAgdmFyIHRhZ05hbWVzUmVxdWlyaW5nSW5u
ZXJIVE1MRml4OworICAgIC8vIElFIDkgYW5kIGVhcmxpZXIgZG9uJ3QgYWxsb3cgdXMgdG8gc2V0
IGlubmVySFRNTCBvbiBjb2wsIGNvbGdyb3VwLCBmcmFtZXNldCwKKyAgICAvLyBodG1sLCBzdHls
ZSwgdGFibGUsIHRib2R5LCB0Zm9vdCwgdGhlYWQsIHRpdGxlLCB0ci4gRGV0ZWN0IHRoaXMgYW5k
IGFkZAorICAgIC8vIHRoZW0gdG8gYW4gaW5pdGlhbCBsaXN0IG9mIGNvcnJlY3RlZCB0YWdzLgor
ICAgIC8vCisgICAgLy8gSGVyZSB3ZSBhcmUgb25seSBkZWFsaW5nIHdpdGggdGhlIG9uZXMgd2hp
Y2ggY2FuIGhhdmUgY2hpbGQgbm9kZXMuCisgICAgLy8KKyAgICB2YXIgdGFibGVOZWVkc0lubmVy
SFRNTEZpeDsKKyAgICB2YXIgdGFibGVJbm5lckhUTUxUZXN0RWxlbWVudCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ3RhYmxlJyk7CisgICAgdHJ5IHsKKyAgICAgIHRhYmxlSW5uZXJIVE1MVGVz
dEVsZW1lbnQuaW5uZXJIVE1MID0gJzx0Ym9keT48L3Rib2R5Pic7CisgICAgfSBjYXRjaCAoZSkg
e30gZmluYWxseSB7CisgICAgICB0YWJsZU5lZWRzSW5uZXJIVE1MRml4ID0gdGFibGVJbm5lckhU
TUxUZXN0RWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMDsKKyAgICB9CisgICAgaWYgKHRh
YmxlTmVlZHNJbm5lckhUTUxGaXgpIHsKKyAgICAgIHRhZ05hbWVzUmVxdWlyaW5nSW5uZXJIVE1M
Rml4ID0geworICAgICAgICBjb2xncm91cDogWyd0YWJsZSddLAorICAgICAgICB0YWJsZTogW10s
CisgICAgICAgIHRib2R5OiBbJ3RhYmxlJ10sCisgICAgICAgIHRmb290OiBbJ3RhYmxlJ10sCisg
ICAgICAgIHRoZWFkOiBbJ3RhYmxlJ10sCisgICAgICAgIHRyOiBbJ3RhYmxlJywgJ3Rib2R5J10K
KyAgICAgIH07CisgICAgfQorCisgICAgLy8gSUUgOCBkb2Vzbid0IGFsbG93IHNldHRpbmcgaW5u
ZXJIVE1MIG9uIGEgc2VsZWN0IHRhZy4gRGV0ZWN0IHRoaXMgYW5kCisgICAgLy8gYWRkIGl0IHRv
IHRoZSBsaXN0IG9mIGNvcnJlY3RlZCB0YWdzLgorICAgIC8vCisgICAgdmFyIHNlbGVjdElubmVy
SFRNTFRlc3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2VsZWN0Jyk7CisgICAg
c2VsZWN0SW5uZXJIVE1MVGVzdEVsZW1lbnQuaW5uZXJIVE1MID0gJzxvcHRpb24+PC9vcHRpb24+
JzsKKyAgICBpZiAoIXNlbGVjdElubmVySFRNTFRlc3RFbGVtZW50LmNoaWxkTm9kZXNbMF0pIHsK
KyAgICAgIHRhZ05hbWVzUmVxdWlyaW5nSW5uZXJIVE1MRml4ID0gdGFnTmFtZXNSZXF1aXJpbmdJ
bm5lckhUTUxGaXggfHwge307CisgICAgICB0YWdOYW1lc1JlcXVpcmluZ0lubmVySFRNTEZpeC5z
ZWxlY3QgPSBbXTsKKyAgICB9CisgICAgcmV0dXJuIHRhZ05hbWVzUmVxdWlyaW5nSW5uZXJIVE1M
Rml4OworICB9KShkb2MpOworCisgIGZ1bmN0aW9uIHNjcmlwdFNhZmVJbm5lckhUTUwoZWxlbWVu
dCwgaHRtbCkgeworICAgIC8vIHdpdGhvdXQgYSBsZWFkaW5nIHRleHQgbm9kZSwgSUUgd2lsbCBk
cm9wIGEgbGVhZGluZyBzY3JpcHQgdGFnLgorICAgIGh0bWwgPSAnJnNoeTsnICsgaHRtbDsKKwor
ICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gaHRtbDsKKworICAgIHZhciBub2RlcyA9IGVsZW1lbnQu
Y2hpbGROb2RlczsKKworICAgIC8vIExvb2sgZm9yICZzaHk7IHRvIHJlbW92ZSBpdC4KKyAgICB2
YXIgc2h5RWxlbWVudCA9IG5vZGVzWzBdOworICAgIHdoaWxlIChzaHlFbGVtZW50Lm5vZGVUeXBl
ID09PSAxICYmICFzaHlFbGVtZW50Lm5vZGVOYW1lKSB7CisgICAgICBzaHlFbGVtZW50ID0gc2h5
RWxlbWVudC5maXJzdENoaWxkOworICAgIH0KKyAgICAvLyBBdCB0aGlzIHBvaW50IGl0J3MgdGhl
IGFjdHVhbCB1bmljb2RlIGNoYXJhY3Rlci4KKyAgICBpZiAoc2h5RWxlbWVudC5ub2RlVHlwZSA9
PT0gMyAmJiBzaHlFbGVtZW50Lm5vZGVWYWx1ZS5jaGFyQXQoMCkgPT09ICJcdTAwQUQiKSB7Cisg
ICAgICB2YXIgbmV3VmFsdWUgPSBzaHlFbGVtZW50Lm5vZGVWYWx1ZS5zbGljZSgxKTsKKyAgICAg
IGlmIChuZXdWYWx1ZS5sZW5ndGgpIHsKKyAgICAgICAgc2h5RWxlbWVudC5ub2RlVmFsdWUgPSBz
aHlFbGVtZW50Lm5vZGVWYWx1ZS5zbGljZSgxKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHNo
eUVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzaHlFbGVtZW50KTsKKyAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gbm9kZXM7CisgIH0KKworICBmdW5jdGlvbiBidWlsZERPTVdpdGhG
aXgoaHRtbCwgY29udGV4dHVhbEVsZW1lbnQpIHsKKyAgICB2YXIgdGFnTmFtZSA9IGNvbnRleHR1
YWxFbGVtZW50LnRhZ05hbWU7CisKKyAgICAvLyBGaXJlZm94IHZlcnNpb25zIDwgMTEgZG8gbm90
IGhhdmUgc3VwcG9ydCBmb3IgZWxlbWVudC5vdXRlckhUTUwuCisgICAgdmFyIG91dGVySFRNTCA9
IGNvbnRleHR1YWxFbGVtZW50Lm91dGVySFRNTCB8fCBuZXcgWE1MU2VyaWFsaXplcigpLnNlcmlh
bGl6ZVRvU3RyaW5nKGNvbnRleHR1YWxFbGVtZW50KTsKKyAgICBpZiAoIW91dGVySFRNTCkgewor
ICAgICAgdGhyb3cgIkNhbid0IHNldCBpbm5lckhUTUwgb24gIiArIHRhZ05hbWUgKyAiIGluIHRo
aXMgYnJvd3NlciI7CisgICAgfQorCisgICAgaHRtbCA9IGZpeFNlbGVjdChodG1sLCBjb250ZXh0
dWFsRWxlbWVudCk7CisKKyAgICB2YXIgd3JhcHBpbmdUYWdzID0gdGFnTmFtZXNSZXF1aXJpbmdJ
bm5lckhUTUxGaXhbdGFnTmFtZS50b0xvd2VyQ2FzZSgpXTsKKworICAgIHZhciBzdGFydFRhZyA9
IG91dGVySFRNTC5tYXRjaChuZXcgUmVnRXhwKCI8IiArIHRhZ05hbWUgKyAiKFtePl0qKT4iLCAn
aScpKVswXTsKKyAgICB2YXIgZW5kVGFnID0gJzwvJyArIHRhZ05hbWUgKyAnPic7CisKKyAgICB2
YXIgd3JhcHBlZEhUTUwgPSBbc3RhcnRUYWcsIGh0bWwsIGVuZFRhZ107CisKKyAgICB2YXIgaSA9
IHdyYXBwaW5nVGFncy5sZW5ndGg7CisgICAgdmFyIHdyYXBwZWREZXB0aCA9IDEgKyBpOworICAg
IHdoaWxlIChpLS0pIHsKKyAgICAgIHdyYXBwZWRIVE1MLnVuc2hpZnQoJzwnICsgd3JhcHBpbmdU
YWdzW2ldICsgJz4nKTsKKyAgICAgIHdyYXBwZWRIVE1MLnB1c2goJzwvJyArIHdyYXBwaW5nVGFn
c1tpXSArICc+Jyk7CisgICAgfQorCisgICAgdmFyIHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdkaXYnKTsKKyAgICBzY3JpcHRTYWZlSW5uZXJIVE1MKHdyYXBwZXIsIHdyYXBwZWRI
VE1MLmpvaW4oJycpKTsKKyAgICB2YXIgZWxlbWVudCA9IHdyYXBwZXI7CisgICAgd2hpbGUgKHdy
YXBwZWREZXB0aC0tKSB7CisgICAgICBlbGVtZW50ID0gZWxlbWVudC5maXJzdENoaWxkOworICAg
ICAgd2hpbGUgKGVsZW1lbnQgJiYgZWxlbWVudC5ub2RlVHlwZSAhPT0gMSkgeworICAgICAgICBl
bGVtZW50ID0gZWxlbWVudC5uZXh0U2libGluZzsKKyAgICAgIH0KKyAgICB9CisgICAgd2hpbGUg
KGVsZW1lbnQgJiYgZWxlbWVudC50YWdOYW1lICE9PSB0YWdOYW1lKSB7CisgICAgICBlbGVtZW50
ID0gZWxlbWVudC5uZXh0U2libGluZzsKKyAgICB9CisgICAgcmV0dXJuIGVsZW1lbnQgPyBlbGVt
ZW50LmNoaWxkTm9kZXMgOiBbXTsKKyAgfQorCisgIHZhciBidWlsZERPTTsKKyAgaWYgKG5lZWRz
U2h5KSB7CisgICAgYnVpbGRET00gPSBmdW5jdGlvbiBidWlsZERPTShodG1sLCBjb250ZXh0dWFs
RWxlbWVudCwgZG9tKSB7CisgICAgICBodG1sID0gZml4U2VsZWN0KGh0bWwsIGNvbnRleHR1YWxF
bGVtZW50KTsKKworICAgICAgY29udGV4dHVhbEVsZW1lbnQgPSBkb20uY2xvbmVOb2RlKGNvbnRl
eHR1YWxFbGVtZW50LCBmYWxzZSk7CisgICAgICBzY3JpcHRTYWZlSW5uZXJIVE1MKGNvbnRleHR1
YWxFbGVtZW50LCBodG1sKTsKKyAgICAgIHJldHVybiBjb250ZXh0dWFsRWxlbWVudC5jaGlsZE5v
ZGVzOworICAgIH07CisgIH0gZWxzZSB7CisgICAgYnVpbGRET00gPSBmdW5jdGlvbiBidWlsZERP
TShodG1sLCBjb250ZXh0dWFsRWxlbWVudCwgZG9tKSB7CisgICAgICBodG1sID0gZml4U2VsZWN0
KGh0bWwsIGNvbnRleHR1YWxFbGVtZW50KTsKKworICAgICAgY29udGV4dHVhbEVsZW1lbnQgPSBk
b20uY2xvbmVOb2RlKGNvbnRleHR1YWxFbGVtZW50LCBmYWxzZSk7CisgICAgICBjb250ZXh0dWFs
RWxlbWVudC5pbm5lckhUTUwgPSBodG1sOworICAgICAgcmV0dXJuIGNvbnRleHR1YWxFbGVtZW50
LmNoaWxkTm9kZXM7CisgICAgfTsKKyAgfQorCisgIGZ1bmN0aW9uIGZpeFNlbGVjdChodG1sLCBj
b250ZXh0dWFsRWxlbWVudCkgeworICAgIGlmIChjb250ZXh0dWFsRWxlbWVudC50YWdOYW1lID09
PSAnU0VMRUNUJykgeworICAgICAgaHRtbCA9ICI8b3B0aW9uPjwvb3B0aW9uPiIgKyBodG1sOwor
ICAgIH0KKworICAgIHJldHVybiBodG1sOworICB9CisKKyAgdmFyIGJ1aWxkSUVTYWZlRE9NOwor
ICBpZiAodGFnTmFtZXNSZXF1aXJpbmdJbm5lckhUTUxGaXggfHwgbW92ZXNXaGl0ZXNwYWNlKSB7
CisgICAgYnVpbGRJRVNhZmVET00gPSBmdW5jdGlvbiBidWlsZElFU2FmZURPTShodG1sLCBjb250
ZXh0dWFsRWxlbWVudCwgZG9tKSB7CisgICAgICAvLyBNYWtlIGEgbGlzdCBvZiB0aGUgbGVhZGlu
ZyB0ZXh0IG9uIHNjcmlwdCBub2Rlcy4gSW5jbHVkZQorICAgICAgLy8gc2NyaXB0IHRhZ3Mgd2l0
aG91dCBhbnkgd2hpdGVzcGFjZSBmb3IgZWFzaWVyIHByb2Nlc3NpbmcgbGF0ZXIuCisgICAgICB2
YXIgc3BhY2VzQmVmb3JlID0gW107CisgICAgICB2YXIgc3BhY2VzQWZ0ZXIgPSBbXTsKKyAgICAg
IGlmICh0eXBlb2YgaHRtbCA9PT0gJ3N0cmluZycpIHsKKyAgICAgICAgaHRtbCA9IGh0bWwucmVw
bGFjZSgvKFxzKikoPHNjcmlwdCkvZywgZnVuY3Rpb24gKG1hdGNoLCBzcGFjZXMsIHRhZykgewor
ICAgICAgICAgIHNwYWNlc0JlZm9yZS5wdXNoKHNwYWNlcyk7CisgICAgICAgICAgcmV0dXJuIHRh
ZzsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaHRtbCA9IGh0bWwucmVwbGFjZSgvKDxcL3Njcmlw
dD4pKFxzKikvZywgZnVuY3Rpb24gKG1hdGNoLCB0YWcsIHNwYWNlcykgeworICAgICAgICAgIHNw
YWNlc0FmdGVyLnB1c2goc3BhY2VzKTsKKyAgICAgICAgICByZXR1cm4gdGFnOworICAgICAgICB9
KTsKKyAgICAgIH0KKworICAgICAgLy8gRmV0Y2ggbm9kZXMKKyAgICAgIHZhciBub2RlczsKKyAg
ICAgIGlmICh0YWdOYW1lc1JlcXVpcmluZ0lubmVySFRNTEZpeFtjb250ZXh0dWFsRWxlbWVudC50
YWdOYW1lLnRvTG93ZXJDYXNlKCldKSB7CisgICAgICAgIC8vIGJ1aWxkRE9NV2l0aEZpeCB1c2Vz
IHN0cmluZyB3cmFwcGVycyBmb3IgcHJvYmxlbWF0aWMgaW5uZXJIVE1MLgorICAgICAgICBub2Rl
cyA9IGJ1aWxkRE9NV2l0aEZpeChodG1sLCBjb250ZXh0dWFsRWxlbWVudCk7CisgICAgICB9IGVs
c2UgeworICAgICAgICBub2RlcyA9IGJ1aWxkRE9NKGh0bWwsIGNvbnRleHR1YWxFbGVtZW50LCBk
b20pOworICAgICAgfQorCisgICAgICAvLyBCdWlsZCBhIGxpc3Qgb2Ygc2NyaXB0IHRhZ3MsIHRo
ZSBub2RlcyB0aGVtc2VsdmVzIHdpbGwgYmUKKyAgICAgIC8vIG11dGF0ZWQgYXMgd2UgYWRkIHRl
c3Qgbm9kZXMuCisgICAgICB2YXIgaSwgaiwgbm9kZSwgbm9kZVNjcmlwdE5vZGVzOworICAgICAg
dmFyIHNjcmlwdE5vZGVzID0gW107CisgICAgICBmb3IgKGkgPSAwOyBpIDwgbm9kZXMubGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgbm9kZSA9IG5vZGVzW2ldOworICAgICAgICBpZiAobm9kZS5ub2Rl
VHlwZSAhPT0gMSkgeworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlm
IChub2RlLnRhZ05hbWUgPT09ICdTQ1JJUFQnKSB7CisgICAgICAgICAgc2NyaXB0Tm9kZXMucHVz
aChub2RlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBub2RlU2NyaXB0Tm9kZXMgPSBu
b2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKTsKKyAgICAgICAgICBmb3IgKGogPSAw
OyBqIDwgbm9kZVNjcmlwdE5vZGVzLmxlbmd0aDsgaisrKSB7CisgICAgICAgICAgICBzY3JpcHRO
b2Rlcy5wdXNoKG5vZGVTY3JpcHROb2Rlc1tqXSk7CisgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICB9CisKKyAgICAgIC8vIFdhbGsgdGhlIHNjcmlwdCB0YWdzIGFuZCBwdXQgYmFjayB0aGVp
ciBsZWFkaW5nIHRleHQgbm9kZXMuCisgICAgICB2YXIgc2NyaXB0Tm9kZSwgdGV4dE5vZGUsIHNw
YWNlQmVmb3JlLCBzcGFjZUFmdGVyOworICAgICAgZm9yIChpID0gMDsgaSA8IHNjcmlwdE5vZGVz
Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgIHNjcmlwdE5vZGUgPSBzY3JpcHROb2Rlc1tpXTsKKyAg
ICAgICAgc3BhY2VCZWZvcmUgPSBzcGFjZXNCZWZvcmVbaV07CisgICAgICAgIGlmIChzcGFjZUJl
Zm9yZSAmJiBzcGFjZUJlZm9yZS5sZW5ndGggPiAwKSB7CisgICAgICAgICAgdGV4dE5vZGUgPSBk
b20uZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoc3BhY2VCZWZvcmUpOworICAgICAgICAgIHNjcmlw
dE5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGV4dE5vZGUsIHNjcmlwdE5vZGUpOworICAg
ICAgICB9CisKKyAgICAgICAgc3BhY2VBZnRlciA9IHNwYWNlc0FmdGVyW2ldOworICAgICAgICBp
ZiAoc3BhY2VBZnRlciAmJiBzcGFjZUFmdGVyLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICB0ZXh0
Tm9kZSA9IGRvbS5kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzcGFjZUFmdGVyKTsKKyAgICAgICAg
ICBzY3JpcHROb2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRleHROb2RlLCBzY3JpcHROb2Rl
Lm5leHRTaWJsaW5nKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICByZXR1cm4gbm9kZXM7
CisgICAgfTsKKyAgfSBlbHNlIHsKKyAgICBidWlsZElFU2FmZURPTSA9IGJ1aWxkRE9NOworICB9
CisKKyAgdmFyIGJ1aWxkSFRNTERPTTsKKyAgaWYgKG5lZWRzSW50ZWdyYXRpb25Qb2ludEZpeCkg
eworICAgIGV4cG9ydHMuYnVpbGRIVE1MRE9NID0gYnVpbGRIVE1MRE9NID0gZnVuY3Rpb24gYnVp
bGRIVE1MRE9NKGh0bWwsIGNvbnRleHR1YWxFbGVtZW50LCBkb20pIHsKKyAgICAgIGlmIChzdmdI
VE1MSW50ZWdyYXRpb25Qb2ludHNbY29udGV4dHVhbEVsZW1lbnQudGFnTmFtZV0pIHsKKyAgICAg
ICAgcmV0dXJuIGJ1aWxkSUVTYWZlRE9NKGh0bWwsIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rp
dicpLCBkb20pOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGJ1aWxkSUVTYWZlRE9N
KGh0bWwsIGNvbnRleHR1YWxFbGVtZW50LCBkb20pOworICAgICAgfQorICAgIH07CisgIH0gZWxz
ZSB7CisgICAgZXhwb3J0cy5idWlsZEhUTUxET00gPSBidWlsZEhUTUxET00gPSBidWlsZElFU2Fm
ZURPTTsKKyAgfQorCisgIGV4cG9ydHMuYnVpbGRIVE1MRE9NID0gYnVpbGRIVE1MRE9NOworfSk7
CitlbmlmZWQoJ2RvbS1oZWxwZXIvY2xhc3NlcycsIFsnZXhwb3J0cyddLCBmdW5jdGlvbiAoZXhw
b3J0cykgeworICAndXNlIHN0cmljdCc7CisKKyAgdmFyIGRvYyA9IHR5cGVvZiBkb2N1bWVudCA9
PT0gJ3VuZGVmaW5lZCcgPyBmYWxzZSA6IGRvY3VtZW50OworCisgIC8vIFBoYW50b21KUyBoYXMg
YSBicm9rZW4gY2xhc3NMaXN0LiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2FyaXlhL3BoYW50b21q
cy9pc3N1ZXMvMTI3ODIKKyAgdmFyIGNhbkNsYXNzTGlzdCA9IGRvYyAmJiAoZnVuY3Rpb24gKCkg
eworICAgIHZhciBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgaWYgKCFk
LmNsYXNzTGlzdCkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBkLmNsYXNzTGlz
dC5hZGQoJ2JvbycpOworICAgIGQuY2xhc3NMaXN0LmFkZCgnYm9vJywgJ2JheicpOworICAgIHJl
dHVybiBkLmNsYXNzTmFtZSA9PT0gJ2JvbyBiYXonOworICB9KSgpOworCisgIGZ1bmN0aW9uIGJ1
aWxkQ2xhc3NMaXN0KGVsZW1lbnQpIHsKKyAgICB2YXIgY2xhc3NTdHJpbmcgPSBlbGVtZW50Lmdl
dEF0dHJpYnV0ZSgnY2xhc3MnKSB8fCAnJzsKKyAgICByZXR1cm4gY2xhc3NTdHJpbmcgIT09ICcn
ICYmIGNsYXNzU3RyaW5nICE9PSAnICcgPyBjbGFzc1N0cmluZy5zcGxpdCgnICcpIDogW107Cisg
IH0KKworICBmdW5jdGlvbiBpbnRlcnNlY3QoY29udGFpbmluZ0FycmF5LCB2YWx1ZXNBcnJheSkg
eworICAgIHZhciBjb250YWluaW5nSW5kZXggPSAwOworICAgIHZhciBjb250YWluaW5nTGVuZ3Ro
ID0gY29udGFpbmluZ0FycmF5Lmxlbmd0aDsKKyAgICB2YXIgdmFsdWVzSW5kZXggPSAwOworICAg
IHZhciB2YWx1ZXNMZW5ndGggPSB2YWx1ZXNBcnJheS5sZW5ndGg7CisKKyAgICB2YXIgaW50ZXJz
ZWN0aW9uID0gbmV3IEFycmF5KHZhbHVlc0xlbmd0aCk7CisKKyAgICAvLyBUT0RPOiByZXdyaXRl
IHRoaXMgbG9vcCBpbiBhbiBvcHRpbWFsIG1hbm5lcgorICAgIGZvciAoOyBjb250YWluaW5nSW5k
ZXggPCBjb250YWluaW5nTGVuZ3RoOyBjb250YWluaW5nSW5kZXgrKykgeworICAgICAgdmFsdWVz
SW5kZXggPSAwOworICAgICAgZm9yICg7IHZhbHVlc0luZGV4IDwgdmFsdWVzTGVuZ3RoOyB2YWx1
ZXNJbmRleCsrKSB7CisgICAgICAgIGlmICh2YWx1ZXNBcnJheVt2YWx1ZXNJbmRleF0gPT09IGNv
bnRhaW5pbmdBcnJheVtjb250YWluaW5nSW5kZXhdKSB7CisgICAgICAgICAgaW50ZXJzZWN0aW9u
W3ZhbHVlc0luZGV4XSA9IGNvbnRhaW5pbmdJbmRleDsKKyAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBpbnRlcnNlY3Rpb247CisgIH0KKwor
ICBmdW5jdGlvbiBhZGRDbGFzc2VzVmlhQXR0cmlidXRlKGVsZW1lbnQsIGNsYXNzTmFtZXMpIHsK
KyAgICB2YXIgZXhpc3RpbmdDbGFzc2VzID0gYnVpbGRDbGFzc0xpc3QoZWxlbWVudCk7CisKKyAg
ICB2YXIgaW5kZXhlcyA9IGludGVyc2VjdChleGlzdGluZ0NsYXNzZXMsIGNsYXNzTmFtZXMpOwor
ICAgIHZhciBkaWRDaGFuZ2UgPSBmYWxzZTsKKworICAgIGZvciAodmFyIGkgPSAwLCBsID0gY2xh
c3NOYW1lcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKKyAgICAgIGlmIChpbmRleGVzW2ldID09PSB1
bmRlZmluZWQpIHsKKyAgICAgICAgZGlkQ2hhbmdlID0gdHJ1ZTsKKyAgICAgICAgZXhpc3RpbmdD
bGFzc2VzLnB1c2goY2xhc3NOYW1lc1tpXSk7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKGRp
ZENoYW5nZSkgeworICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgZXhpc3RpbmdD
bGFzc2VzLmxlbmd0aCA+IDAgPyBleGlzdGluZ0NsYXNzZXMuam9pbignICcpIDogJycpOworICAg
IH0KKyAgfQorCisgIGZ1bmN0aW9uIHJlbW92ZUNsYXNzZXNWaWFBdHRyaWJ1dGUoZWxlbWVudCwg
Y2xhc3NOYW1lcykgeworICAgIHZhciBleGlzdGluZ0NsYXNzZXMgPSBidWlsZENsYXNzTGlzdChl
bGVtZW50KTsKKworICAgIHZhciBpbmRleGVzID0gaW50ZXJzZWN0KGNsYXNzTmFtZXMsIGV4aXN0
aW5nQ2xhc3Nlcyk7CisgICAgdmFyIGRpZENoYW5nZSA9IGZhbHNlOworICAgIHZhciBuZXdDbGFz
c2VzID0gW107CisKKyAgICBmb3IgKHZhciBpID0gMCwgbCA9IGV4aXN0aW5nQ2xhc3Nlcy5sZW5n
dGg7IGkgPCBsOyBpKyspIHsKKyAgICAgIGlmIChpbmRleGVzW2ldID09PSB1bmRlZmluZWQpIHsK
KyAgICAgICAgbmV3Q2xhc3Nlcy5wdXNoKGV4aXN0aW5nQ2xhc3Nlc1tpXSk7CisgICAgICB9IGVs
c2UgeworICAgICAgICBkaWRDaGFuZ2UgPSB0cnVlOworICAgICAgfQorICAgIH0KKworICAgIGlm
IChkaWRDaGFuZ2UpIHsKKyAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdjbGFzcycsIG5ld0Ns
YXNzZXMubGVuZ3RoID4gMCA/IG5ld0NsYXNzZXMuam9pbignICcpIDogJycpOworICAgIH0KKyAg
fQorCisgIHZhciBhZGRDbGFzc2VzLCByZW1vdmVDbGFzc2VzOworICBpZiAoY2FuQ2xhc3NMaXN0
KSB7CisgICAgZXhwb3J0cy5hZGRDbGFzc2VzID0gYWRkQ2xhc3NlcyA9IGZ1bmN0aW9uIGFkZENs
YXNzZXMoZWxlbWVudCwgY2xhc3NOYW1lcykgeworICAgICAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0
KSB7CisgICAgICAgIGlmIChjbGFzc05hbWVzLmxlbmd0aCA9PT0gMSkgeworICAgICAgICAgIGVs
ZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWVzWzBdKTsKKyAgICAgICAgfSBlbHNlIGlmIChj
bGFzc05hbWVzLmxlbmd0aCA9PT0gMikgeworICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFk
ZChjbGFzc05hbWVzWzBdLCBjbGFzc05hbWVzWzFdKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQuYXBwbHkoZWxlbWVudC5jbGFzc0xpc3QsIGNsYXNz
TmFtZXMpOworICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICBhZGRDbGFzc2VzVmlh
QXR0cmlidXRlKGVsZW1lbnQsIGNsYXNzTmFtZXMpOworICAgICAgfQorICAgIH07CisgICAgZXhw
b3J0cy5yZW1vdmVDbGFzc2VzID0gcmVtb3ZlQ2xhc3NlcyA9IGZ1bmN0aW9uIHJlbW92ZUNsYXNz
ZXMoZWxlbWVudCwgY2xhc3NOYW1lcykgeworICAgICAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0KSB7
CisgICAgICAgIGlmIChjbGFzc05hbWVzLmxlbmd0aCA9PT0gMSkgeworICAgICAgICAgIGVsZW1l
bnQuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWVzWzBdKTsKKyAgICAgICAgfSBlbHNlIGlmIChj
bGFzc05hbWVzLmxlbmd0aCA9PT0gMikgeworICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJl
bW92ZShjbGFzc05hbWVzWzBdLCBjbGFzc05hbWVzWzFdKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUuYXBwbHkoZWxlbWVudC5jbGFzc0xpc3Qs
IGNsYXNzTmFtZXMpOworICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICByZW1vdmVD
bGFzc2VzVmlhQXR0cmlidXRlKGVsZW1lbnQsIGNsYXNzTmFtZXMpOworICAgICAgfQorICAgIH07
CisgIH0gZWxzZSB7CisgICAgZXhwb3J0cy5hZGRDbGFzc2VzID0gYWRkQ2xhc3NlcyA9IGFkZENs
YXNzZXNWaWFBdHRyaWJ1dGU7CisgICAgZXhwb3J0cy5yZW1vdmVDbGFzc2VzID0gcmVtb3ZlQ2xh
c3NlcyA9IHJlbW92ZUNsYXNzZXNWaWFBdHRyaWJ1dGU7CisgIH0KKworICBleHBvcnRzLmFkZENs
YXNzZXMgPSBhZGRDbGFzc2VzOworICBleHBvcnRzLnJlbW92ZUNsYXNzZXMgPSByZW1vdmVDbGFz
c2VzOworfSk7CitlbmlmZWQoJ2RvbS1oZWxwZXIvcHJvcCcsIFsnZXhwb3J0cyddLCBmdW5jdGlv
biAoZXhwb3J0cykgeworICAndXNlIHN0cmljdCc7CisKKyAgZXhwb3J0cy5pc0F0dHJSZW1vdmFs
VmFsdWUgPSBpc0F0dHJSZW1vdmFsVmFsdWU7CisgIGV4cG9ydHMubm9ybWFsaXplUHJvcGVydHkg
PSBub3JtYWxpemVQcm9wZXJ0eTsKKworICBmdW5jdGlvbiBpc0F0dHJSZW1vdmFsVmFsdWUodmFs
dWUpIHsKKyAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZDsK
KyAgfQorCisgIC8qCisgICAqCisgICAqIEBtZXRob2Qgbm9ybWFsaXplUHJvcGVydHkKKyAgICog
QHBhcmFtIGVsZW1lbnQge0hUTUxFbGVtZW50fQorICAgKiBAcGFyYW0gc2xvdE5hbWUge1N0cmlu
Z30KKyAgICogQHJldHVybnMge09iamVjdH0geyBuYW1lLCB0eXBlIH0KKyAgICovCisKKyAgZnVu
Y3Rpb24gbm9ybWFsaXplUHJvcGVydHkoZWxlbWVudCwgc2xvdE5hbWUpIHsKKyAgICB2YXIgdHlw
ZSwgbm9ybWFsaXplZDsKKworICAgIGlmIChzbG90TmFtZSBpbiBlbGVtZW50KSB7CisgICAgICBu
b3JtYWxpemVkID0gc2xvdE5hbWU7CisgICAgICB0eXBlID0gJ3Byb3AnOworICAgIH0gZWxzZSB7
CisgICAgICB2YXIgbG93ZXIgPSBzbG90TmFtZS50b0xvd2VyQ2FzZSgpOworICAgICAgaWYgKGxv
d2VyIGluIGVsZW1lbnQpIHsKKyAgICAgICAgdHlwZSA9ICdwcm9wJzsKKyAgICAgICAgbm9ybWFs
aXplZCA9IGxvd2VyOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdHlwZSA9ICdhdHRyJzsKKyAg
ICAgICAgbm9ybWFsaXplZCA9IHNsb3ROYW1lOworICAgICAgfQorICAgIH0KKworICAgIGlmICh0
eXBlID09PSAncHJvcCcgJiYgKG5vcm1hbGl6ZWQudG9Mb3dlckNhc2UoKSA9PT0gJ3N0eWxlJyB8
fCBwcmVmZXJBdHRyKGVsZW1lbnQudGFnTmFtZSwgbm9ybWFsaXplZCkpKSB7CisgICAgICB0eXBl
ID0gJ2F0dHInOworICAgIH0KKworICAgIHJldHVybiB7IG5vcm1hbGl6ZWQ6IG5vcm1hbGl6ZWQs
IHR5cGU6IHR5cGUgfTsKKyAgfQorCisgIC8vIHByb3BlcnRpZXMgdGhhdCBNVVNUIGJlIHNldCBh
cyBhdHRyaWJ1dGVzLCBkdWUgdG86CisgIC8vICogYnJvd3NlciBidWcKKyAgLy8gKiBzdHJhbmdl
IHNwZWMgb3V0bGllcgorICB2YXIgQVRUUl9PVkVSUklERVMgPSB7CisKKyAgICAvLyBwaGFudG9t
anMgPCAyLjAgbGV0cyB5b3Ugc2V0IGl0IGFzIGEgcHJvcCBidXQgd29uJ3QgcmVmbGVjdCBpdAor
ICAgIC8vIGJhY2sgdG8gdGhlIGF0dHJpYnV0ZS4gYnV0dG9uLmdldEF0dHJpYnV0ZSgndHlwZScp
ID09PSBudWxsCisgICAgQlVUVE9OOiB7IHR5cGU6IHRydWUsIGZvcm06IHRydWUgfSwKKworICAg
IElOUFVUOiB7CisgICAgICAvLyBUT0RPOiByZW1vdmUgd2hlbiBJRTggaXMgZHJvcGVkCisgICAg
ICAvLyBTb21lIHZlcnNpb25zIG9mIElFIChJRTgpIHRocm93IGFuIGV4Y2VwdGlvbiB3aGVuIHNl
dHRpbmcKKyAgICAgIC8vIGBpbnB1dC5saXN0ID0gJ3NvbWVzdHJpbmcnYDoKKyAgICAgIC8vIGh0
dHBzOi8vZ2l0aHViLmNvbS9lbWJlcmpzL2VtYmVyLmpzL2lzc3Vlcy8xMDkwOAorICAgICAgLy8g
aHR0cHM6Ly9naXRodWIuY29tL2VtYmVyanMvZW1iZXIuanMvaXNzdWVzLzExMzY0CisgICAgICBs
aXN0OiB0cnVlLAorICAgICAgLy8gU29tZSB2ZXJzaW9uIG9mIElFIChsaWtlIElFOSkgYWN0dWFs
bHkgdGhyb3cgYW4gZXhjZXB0aW9uCisgICAgICAvLyBpZiB5b3Ugc2V0IGlucHV0LnR5cGUgPSAn
c29tZXRoaW5nLXVua25vd24nCisgICAgICB0eXBlOiB0cnVlLAorICAgICAgZm9ybTogdHJ1ZSwK
KyAgICAgIC8vIENocm9tZSA0Ni4wLjI0NjQuMDogJ2F1dG9jb3JyZWN0JyBpbiBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdpbnB1dCcpID09PSBmYWxzZQorICAgICAgLy8gU2FmYXJpIDguMC43OiAn
YXV0b2NvcnJlY3QnIGluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JykgPT09IGZhbHNl
CisgICAgICAvLyBNb2JpbGUgU2FmYXJpIChpT1MgOC40IHNpbXVsYXRvcik6ICdhdXRvY29ycmVj
dCcgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKSA9PT0gdHJ1ZQorICAgICAgYXV0
b2NvcnJlY3Q6IHRydWUKKyAgICB9LAorCisgICAgLy8gZWxlbWVudC5mb3JtIGlzIGFjdHVhbGx5
IGEgbGVnaXRpbWF0ZSByZWFkT25seSBwcm9wZXJ0eSwgdGhhdCBpcyB0byBiZQorICAgIC8vIG11
dGF0ZWQsIGJ1dCBtdXN0IGJlIG11dGF0ZWQgYnkgc2V0QXR0cmlidXRlLi4uCisgICAgU0VMRUNU
OiB7IGZvcm06IHRydWUgfSwKKyAgICBPUFRJT046IHsgZm9ybTogdHJ1ZSB9LAorICAgIFRFWFRB
UkVBOiB7IGZvcm06IHRydWUgfSwKKyAgICBMQUJFTDogeyBmb3JtOiB0cnVlIH0sCisgICAgRklF
TERTRVQ6IHsgZm9ybTogdHJ1ZSB9LAorICAgIExFR0VORDogeyBmb3JtOiB0cnVlIH0sCisgICAg
T0JKRUNUOiB7IGZvcm06IHRydWUgfQorICB9OworCisgIGZ1bmN0aW9uIHByZWZlckF0dHIodGFn
TmFtZSwgcHJvcE5hbWUpIHsKKyAgICB2YXIgdGFnID0gQVRUUl9PVkVSUklERVNbdGFnTmFtZS50
b1VwcGVyQ2FzZSgpXTsKKyAgICByZXR1cm4gdGFnICYmIHRhZ1twcm9wTmFtZS50b0xvd2VyQ2Fz
ZSgpXSB8fCBmYWxzZTsKKyAgfQorfSk7CitlbmlmZWQoJ2VtYmVyLWFwcGxpY2F0aW9uL2luZGV4
JywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2NvcmUnLCAnZW1iZXItbWV0YWwvZmVhdHVyZXMn
LCAnZW1iZXItcnVudGltZS9zeXN0ZW0vbGF6eV9sb2FkJywgJ2VtYmVyLWFwcGxpY2F0aW9uL3N5
c3RlbS9yZXNvbHZlcicsICdlbWJlci1hcHBsaWNhdGlvbi9zeXN0ZW0vYXBwbGljYXRpb24nLCAn
ZW1iZXItYXBwbGljYXRpb24vc3lzdGVtL2FwcGxpY2F0aW9uLWluc3RhbmNlJywgJ2VtYmVyLWFw
cGxpY2F0aW9uL3N5c3RlbS9lbmdpbmUnLCAnZW1iZXItYXBwbGljYXRpb24vc3lzdGVtL2VuZ2lu
ZS1pbnN0YW5jZSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxDb3JlLCBfZW1iZXJN
ZXRhbEZlYXR1cmVzLCBfZW1iZXJSdW50aW1lU3lzdGVtTGF6eV9sb2FkLCBfZW1iZXJBcHBsaWNh
dGlvblN5c3RlbVJlc29sdmVyLCBfZW1iZXJBcHBsaWNhdGlvblN5c3RlbUFwcGxpY2F0aW9uLCBf
ZW1iZXJBcHBsaWNhdGlvblN5c3RlbUFwcGxpY2F0aW9uSW5zdGFuY2UsIF9lbWJlckFwcGxpY2F0
aW9uU3lzdGVtRW5naW5lLCBfZW1iZXJBcHBsaWNhdGlvblN5c3RlbUVuZ2luZUluc3RhbmNlKSB7
CisgICd1c2Ugc3RyaWN0JzsKKworICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5BcHBsaWNhdGlv
biA9IF9lbWJlckFwcGxpY2F0aW9uU3lzdGVtQXBwbGljYXRpb24uZGVmYXVsdDsKKyAgX2VtYmVy
TWV0YWxDb3JlLmRlZmF1bHQuUmVzb2x2ZXIgPSBfZW1iZXJBcHBsaWNhdGlvblN5c3RlbVJlc29s
dmVyLlJlc29sdmVyOworICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5EZWZhdWx0UmVzb2x2ZXIg
PSBfZW1iZXJBcHBsaWNhdGlvblN5c3RlbVJlc29sdmVyLmRlZmF1bHQ7CisKKyAgX2VtYmVyUnVu
dGltZVN5c3RlbUxhenlfbG9hZC5ydW5Mb2FkSG9va3MoJ0VtYmVyLkFwcGxpY2F0aW9uJywgX2Vt
YmVyQXBwbGljYXRpb25TeXN0ZW1BcHBsaWNhdGlvbi5kZWZhdWx0KTsKK30pOworCisvKioKK0Bt
b2R1bGUgZW1iZXIKK0BzdWJtb2R1bGUgZW1iZXItYXBwbGljYXRpb24KKyovCisKKy8vIEV4cG9z
ZSBgRW5naW5lSW5zdGFuY2VgIGFuZCBgQXBwbGljYXRpb25JbnN0YW5jZWAgZm9yIGVhc3kgb3Zl
cnJpZGluZy4KKy8vIFJlYW5hbHl6ZSB3aGV0aGVyIHRvIGNvbnRpbnVlIGV4cG9zaW5nIHRoZXNl
IGFmdGVyIGZlYXR1cmUgZmxhZyBpcyByZW1vdmVkLgorZW5pZmVkKCdlbWJlci1hcHBsaWNhdGlv
bi9zeXN0ZW0vYXBwbGljYXRpb24taW5zdGFuY2UnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwv
ZGVidWcnLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0JywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5
X3NldCcsICdlbWJlci1tZXRhbC9zeW1ib2wnLCAnZW1iZXItbWV0YWwvcnVuX2xvb3AnLCAnZW1i
ZXItbWV0YWwvY29tcHV0ZWQnLCAnZW1iZXItcnVudGltZS9taXhpbnMvcmVnaXN0cnlfcHJveHkn
LCAnZW1iZXItbWV0YWwvYXNzaWduJywgJ2VtYmVyLW1ldGFsL2Vudmlyb25tZW50JywgJ2VtYmVy
LXJ1bnRpbWUvZXh0L3JzdnAnLCAnZW1iZXItdmlld3Mvc3lzdGVtL2pxdWVyeScsICdlbWJlci1h
cHBsaWNhdGlvbi9zeXN0ZW0vZW5naW5lLWluc3RhbmNlJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBf
ZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJNZXRhbFByb3BlcnR5X2dldCwgX2VtYmVyTWV0YWxQcm9w
ZXJ0eV9zZXQsIF9lbWJlck1ldGFsU3ltYm9sLCBfZW1iZXJNZXRhbFJ1bl9sb29wLCBfZW1iZXJN
ZXRhbENvbXB1dGVkLCBfZW1iZXJSdW50aW1lTWl4aW5zUmVnaXN0cnlfcHJveHksIF9lbWJlck1l
dGFsQXNzaWduLCBfZW1iZXJNZXRhbEVudmlyb25tZW50LCBfZW1iZXJSdW50aW1lRXh0UnN2cCwg
X2VtYmVyVmlld3NTeXN0ZW1KcXVlcnksIF9lbWJlckFwcGxpY2F0aW9uU3lzdGVtRW5naW5lSW5z
dGFuY2UpIHsKKyAgLyoqCisgIEBtb2R1bGUgZW1iZXIKKyAgQHN1Ym1vZHVsZSBlbWJlci1hcHBs
aWNhdGlvbgorICAqLworCisgICd1c2Ugc3RyaWN0JzsKKworICB2YXIgSU5URVJOQUxfQk9PVF9P
UFRJT05TID0gX2VtYmVyTWV0YWxTeW1ib2wuZGVmYXVsdCgnSU5URVJOQUxfQk9PVF9PUFRJT05T
Jyk7CisKKyAgZXhwb3J0cy5JTlRFUk5BTF9CT09UX09QVElPTlMgPSBJTlRFUk5BTF9CT09UX09Q
VElPTlM7CisgIHZhciBCb290T3B0aW9ucyA9IHVuZGVmaW5lZDsKKworICAvKioKKyAgICBUaGUg
YEFwcGxpY2F0aW9uSW5zdGFuY2VgIGVuY2Fwc3VsYXRlcyBhbGwgb2YgdGhlIHN0YXRlZnVsIGFz
cGVjdHMgb2YgYQorICAgIHJ1bm5pbmcgYEFwcGxpY2F0aW9uYC4KKyAgCisgICAgQXQgYSBoaWdo
LWxldmVsLCB3ZSBicmVhayBhcHBsaWNhdGlvbiBib290IGludG8gdHdvIGRpc3RpbmN0IHBoYXNl
czoKKyAgCisgICAgKiBEZWZpbml0aW9uIHRpbWUsIHdoZXJlIGFsbCBvZiB0aGUgY2xhc3Nlcywg
dGVtcGxhdGVzLCBhbmQgb3RoZXIKKyAgICAgIGRlcGVuZGVuY2llcyBhcmUgbG9hZGVkICh0eXBp
Y2FsbHkgaW4gdGhlIGJyb3dzZXIpLgorICAgICogUnVuIHRpbWUsIHdoZXJlIHdlIGJlZ2luIGV4
ZWN1dGluZyB0aGUgYXBwbGljYXRpb24gb25jZSBldmVyeXRoaW5nCisgICAgICBoYXMgbG9hZGVk
LgorICAKKyAgICBEZWZpbml0aW9uIHRpbWUgY2FuIGJlIGV4cGVuc2l2ZSBhbmQgb25seSBuZWVk
cyB0byBoYXBwZW4gb25jZSBzaW5jZSBpdCBpcworICAgIGFuIGlkZW1wb3RlbnQgb3BlcmF0aW9u
LiBGb3IgZXhhbXBsZSwgYmV0d2VlbiB0ZXN0IHJ1bnMgYW5kIEZhc3RCb290CisgICAgcmVxdWVz
dHMsIHRoZSBhcHBsaWNhdGlvbiBzdGF5cyB0aGUgc2FtZS4gSXQgaXMgb25seSB0aGUgc3RhdGUg
dGhhdCB3ZSB3YW50CisgICAgdG8gcmVzZXQuCisgIAorICAgIFRoYXQgc3RhdGUgaXMgd2hhdCB0
aGUgYEFwcGxpY2F0aW9uSW5zdGFuY2VgIG1hbmFnZXM6IGl0IGlzIHJlc3BvbnNpYmxlIGZvcgor
ICAgIGNyZWF0aW5nIHRoZSBjb250YWluZXIgdGhhdCBjb250YWlucyBhbGwgYXBwbGljYXRpb24g
c3RhdGUsIGFuZCBkaXNwb3Npbmcgb2YKKyAgICBpdCBvbmNlIHRoZSBwYXJ0aWN1bGFyIHRlc3Qg
cnVuIG9yIEZhc3RCb290IHJlcXVlc3QgaGFzIGZpbmlzaGVkLgorICAKKyAgICBAcHVibGljCisg
ICAgQGNsYXNzIEVtYmVyLkFwcGxpY2F0aW9uSW5zdGFuY2UKKyAgICBAZXh0ZW5kcyBFbWJlci5F
bmdpbmVJbnN0YW5jZQorICAqLworCisgIHZhciBBcHBsaWNhdGlvbkluc3RhbmNlID0gX2VtYmVy
QXBwbGljYXRpb25TeXN0ZW1FbmdpbmVJbnN0YW5jZS5kZWZhdWx0LmV4dGVuZCh7CisgICAgLyoq
CisgICAgICBUaGUgYEFwcGxpY2F0aW9uYCBmb3Igd2hpY2ggdGhpcyBpcyBhbiBpbnN0YW5jZS4K
KyAgICAgICBAcHJvcGVydHkge0VtYmVyLkFwcGxpY2F0aW9ufSBhcHBsaWNhdGlvbgorICAgICAg
QHByaXZhdGUKKyAgICAqLworICAgIGFwcGxpY2F0aW9uOiBudWxsLAorCisgICAgLyoqCisgICAg
ICBUaGUgRE9NIGV2ZW50cyBmb3Igd2hpY2ggdGhlIGV2ZW50IGRpc3BhdGNoZXIgc2hvdWxkIGxp
c3Rlbi4KKyAgICAgICBCeSBkZWZhdWx0LCB0aGUgYXBwbGljYXRpb24ncyBgRW1iZXIuRXZlbnRE
aXNwYXRjaGVyYCBsaXN0ZW5zCisgICAgICBmb3IgYSBzZXQgb2Ygc3RhbmRhcmQgRE9NIGV2ZW50
cywgc3VjaCBhcyBgbW91c2Vkb3duYCBhbmQKKyAgICAgIGBrZXl1cGAsIGFuZCBkZWxlZ2F0ZXMg
dGhlbSB0byB5b3VyIGFwcGxpY2F0aW9uJ3MgYEVtYmVyLlZpZXdgCisgICAgICBpbnN0YW5jZXMu
CisgICAgICAgQHByaXZhdGUKKyAgICAgIEBwcm9wZXJ0eSB7T2JqZWN0fSBjdXN0b21FdmVudHMK
KyAgICAqLworICAgIGN1c3RvbUV2ZW50czogbnVsbCwKKworICAgIC8qKgorICAgICAgVGhlIHJv
b3QgRE9NIGVsZW1lbnQgb2YgdGhlIEFwcGxpY2F0aW9uIGFzIGFuIGVsZW1lbnQgb3IgYQorICAg
ICAgW2pRdWVyeS1jb21wYXRpYmxlIHNlbGVjdG9yCisgICAgICBzdHJpbmddKGh0dHA6Ly9hcGku
anF1ZXJ5LmNvbS9jYXRlZ29yeS9zZWxlY3RvcnMvKS4KKyAgICAgICBAcHJpdmF0ZQorICAgICAg
QHByb3BlcnR5IHtTdHJpbmd8RE9NRWxlbWVudH0gcm9vdEVsZW1lbnQKKyAgICAqLworICAgIHJv
b3RFbGVtZW50OiBudWxsLAorCisgICAgaW5pdDogZnVuY3Rpb24gKCkgeworICAgICAgdGhpcy5f
c3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKworICAgICAgLy8gUmVnaXN0ZXIgdGhpcyBp
bnN0YW5jZSBpbiB0aGUgcGVyLWluc3RhbmNlIHJlZ2lzdHJ5LgorICAgICAgLy8KKyAgICAgIC8v
IFdoeSBkbyB3ZSBuZWVkIHRvIHJlZ2lzdGVyIHRoZSBpbnN0YW5jZSBpbiB0aGUgZmlyc3QgcGxh
Y2U/CisgICAgICAvLyBCZWNhdXNlIHdlIG5lZWQgYSBnb29kIHdheSBmb3IgdGhlIHJvb3Qgcm91
dGUgKGEuay5hIEFwcGxpY2F0aW9uUm91dGUpCisgICAgICAvLyB0byBub3RpZnkgdXMgd2hlbiBp
dCBoYXMgY3JlYXRlZCB0aGUgcm9vdC1tb3N0IHZpZXcuIFRoYXQgdmlldyBpcyB0aGVuCisgICAg
ICAvLyBhcHBlbmRlZCB0byB0aGUgcm9vdEVsZW1lbnQsIGluIHRoZSBjYXNlIG9mIGFwcHMsIHRv
IHRoZSBmaXh0dXJlIGhhcm5lc3MKKyAgICAgIC8vIGluIHRlc3RzLCBvciByZW5kZXJlZCB0byBh
IHN0cmluZyBpbiB0aGUgY2FzZSBvZiBGYXN0Qm9vdC4KKyAgICAgIHRoaXMucmVnaXN0ZXIoJy1h
cHBsaWNhdGlvbi1pbnN0YW5jZTptYWluJywgdGhpcywgeyBpbnN0YW50aWF0ZTogZmFsc2UgfSk7
CisKKyAgICAgIHRoaXMuX2Jvb3RlZCA9IGZhbHNlOworICAgIH0sCisKKyAgICAvKioKKyAgICAg
IEluaXRpYWxpemUgdGhlIGBFbWJlci5BcHBsaWNhdGlvbkluc3RhbmNlYCBhbmQgcmV0dXJuIGEg
cHJvbWlzZSB0aGF0IHJlc29sdmVzCisgICAgICB3aXRoIHRoZSBpbnN0YW5jZSBpdHNlbGYgd2hl
biB0aGUgYm9vdCBwcm9jZXNzIGlzIGNvbXBsZXRlLgorICAgICAgIFRoZSBwcmltYXJ5IHRhc2sg
aGVyZSBpcyB0byBydW4gYW55IHJlZ2lzdGVyZWQgaW5zdGFuY2UgaW5pdGlhbGl6ZXJzLgorICAg
ICAgIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvbiBgQm9vdE9wdGlvbnNgIGZvciB0aGUgb3B0aW9u
cyBpdCB0YWtlcy4KKyAgICAgICBAcHJpdmF0ZQorICAgICAgQG1ldGhvZCBib290CisgICAgICBA
cGFyYW0gb3B0aW9ucworICAgICAgQHJldHVybiB7UHJvbWlzZTxFbWJlci5BcHBsaWNhdGlvbklu
c3RhbmNlLEVycm9yPn0KKyAgICAqLworICAgIGJvb3Q6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHZh
ciBfdGhpcyA9IHRoaXM7CisKKyAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA8
PSAwIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8ge30gOiBhcmd1bWVudHNbMF07CisK
KyAgICAgIGlmICh0aGlzLl9ib290UHJvbWlzZSkgeworICAgICAgICByZXR1cm4gdGhpcy5fYm9v
dFByb21pc2U7CisgICAgICB9CisKKyAgICAgIHRoaXMuX2Jvb3RQcm9taXNlID0gbmV3IF9lbWJl
clJ1bnRpbWVFeHRSc3ZwLmRlZmF1bHQuUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkgeworICAg
ICAgICByZXR1cm4gcmVzb2x2ZShfdGhpcy5fYm9vdFN5bmMob3B0aW9ucykpOworICAgICAgfSk7
CisKKyAgICAgIHJldHVybiB0aGlzLl9ib290UHJvbWlzZTsKKyAgICB9LAorCisgICAgLyoqCisg
ICAgICBVbmZvcnR1bmF0ZWx5LCBhIGxvdCBvZiBleGlzdGluZyBjb2RlIGFzc3VtZXMgYm9vdGlu
ZyBhbiBpbnN0YW5jZSBpcworICAgICAgc3luY2hyb25vdXMg4oCTIHNwZWNpZmljYWxseSwgYSBs
b3Qgb2YgdGVzdHMgYXNzdW1lcyB0aGUgbGFzdCBjYWxsIHRvCisgICAgICBgYXBwLmFkdmFuY2VS
ZWFkaW5lc3MoKWAgb3IgYGFwcC5yZXNldCgpYCB3aWxsIHJlc3VsdCBpbiBhIG5ldyBpbnN0YW5j
ZQorICAgICAgYmVpbmcgZnVsbHktYm9vdGVkIHdoZW4gdGhlIGN1cnJlbnQgcnVubG9vcCBjb21w
bGV0ZXMuCisgICAgICAgV2Ugd291bGQgbGlrZSBuZXcgY29kZSAobGlrZSB0aGUgYHZpc2l0YCBB
UEkpIHRvIHN0b3AgbWFraW5nIHRoaXMgYXNzdW1wdGlvbiwKKyAgICAgIHNvIHdlIGNyZWF0ZWQg
dGhlIGFzeW5jaHJvbm91cyB2ZXJzaW9uIGFib3ZlIHRoYXQgcmV0dXJucyBhIHByb21pc2UuIEJ1
dCB1bnRpbAorICAgICAgd2UgaGF2ZSBtaWdyYXRlZCBhbGwgdGhlIGNvZGUsIHdlIHdvdWxkIGhh
dmUgdG8gZXhwb3NlIHRoaXMgbWV0aG9kIGZvciB1c2UKKyAgICAgICppbnRlcm5hbGx5KiBpbiBw
bGFjZXMgd2hlcmUgd2UgbmVlZCB0byBib290IGFuIGluc3RhbmNlIHN5bmNocm9ub3VzbHkuCisg
ICAgICAgQHByaXZhdGUKKyAgICAqLworICAgIF9ib290U3luYzogZnVuY3Rpb24gKG9wdGlvbnMp
IHsKKyAgICAgIGlmICh0aGlzLl9ib290ZWQpIHsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
ICB9CisKKyAgICAgIG9wdGlvbnMgPSBuZXcgQm9vdE9wdGlvbnMob3B0aW9ucyk7CisKKyAgICAg
IHZhciByZWdpc3RyeSA9IHRoaXMuX19yZWdpc3RyeV9fOworCisgICAgICByZWdpc3RyeS5yZWdp
c3RlcignLWVudmlyb25tZW50Om1haW4nLCBvcHRpb25zLnRvRW52aXJvbm1lbnQoKSwgeyBpbnN0
YW50aWF0ZTogZmFsc2UgfSk7CisgICAgICByZWdpc3RyeS5pbmplY3Rpb24oJ3ZpZXcnLCAnX2Vu
dmlyb25tZW50JywgJy1lbnZpcm9ubWVudDptYWluJyk7CisgICAgICByZWdpc3RyeS5pbmplY3Rp
b24oJ3JvdXRlJywgJ19lbnZpcm9ubWVudCcsICctZW52aXJvbm1lbnQ6bWFpbicpOworCisgICAg
ICByZWdpc3RyeS5yZWdpc3Rlcignc2VydmljZTotZG9jdW1lbnQnLCBvcHRpb25zLmRvY3VtZW50
LCB7IGluc3RhbnRpYXRlOiBmYWxzZSB9KTsKKworICAgICAgaWYgKG9wdGlvbnMuaXNJbnRlcmFj
dGl2ZSkgeworICAgICAgICByZWdpc3RyeS5pbmplY3Rpb24oJ3ZpZXcnLCAncmVuZGVyZXInLCAn
cmVuZGVyZXI6LWRvbScpOworICAgICAgICByZWdpc3RyeS5pbmplY3Rpb24oJ2NvbXBvbmVudCcs
ICdyZW5kZXJlcicsICdyZW5kZXJlcjotZG9tJyk7CisgICAgICB9IGVsc2UgeworICAgICAgICBy
ZWdpc3RyeS5pbmplY3Rpb24oJ3ZpZXcnLCAncmVuZGVyZXInLCAncmVuZGVyZXI6LWluZXJ0Jyk7
CisgICAgICAgIHJlZ2lzdHJ5LmluamVjdGlvbignY29tcG9uZW50JywgJ3JlbmRlcmVyJywgJ3Jl
bmRlcmVyOi1pbmVydCcpOworICAgICAgfQorCisgICAgICBpZiAob3B0aW9ucy5yb290RWxlbWVu
dCkgeworICAgICAgICB0aGlzLnJvb3RFbGVtZW50ID0gb3B0aW9ucy5yb290RWxlbWVudDsKKyAg
ICAgIH0gZWxzZSB7CisgICAgICAgIHRoaXMucm9vdEVsZW1lbnQgPSB0aGlzLmFwcGxpY2F0aW9u
LnJvb3RFbGVtZW50OworICAgICAgfQorCisgICAgICBpZiAob3B0aW9ucy5sb2NhdGlvbikgewor
ICAgICAgICB2YXIgcm91dGVyID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdy
b3V0ZXInKTsKKyAgICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQuc2V0KHJvdXRlciwgJ2xv
Y2F0aW9uJywgb3B0aW9ucy5sb2NhdGlvbik7CisgICAgICB9CisKKyAgICAgIHRoaXMuYXBwbGlj
YXRpb24ucnVuSW5zdGFuY2VJbml0aWFsaXplcnModGhpcyk7CisKKyAgICAgIGlmIChvcHRpb25z
LmlzSW50ZXJhY3RpdmUpIHsKKyAgICAgICAgdGhpcy5zZXR1cEV2ZW50RGlzcGF0Y2hlcigpOwor
ICAgICAgfQorCisgICAgICB0aGlzLl9ib290ZWQgPSB0cnVlOworCisgICAgICByZXR1cm4gdGhp
czsKKyAgICB9LAorCisgICAgcm91dGVyOiBfZW1iZXJNZXRhbENvbXB1dGVkLmNvbXB1dGVkKGZ1
bmN0aW9uICgpIHsKKyAgICAgIHJldHVybiB0aGlzLmxvb2t1cCgncm91dGVyOm1haW4nKTsKKyAg
ICB9KS5yZWFkT25seSgpLAorCisgICAgLyoqCisgICAgICBUaGlzIGhvb2sgaXMgY2FsbGVkIGJ5
IHRoZSByb290LW1vc3QgUm91dGUgKGEuay5hLiB0aGUgQXBwbGljYXRpb25Sb3V0ZSkKKyAgICAg
IHdoZW4gaXQgaGFzIGZpbmlzaGVkIGNyZWF0aW5nIHRoZSByb290IFZpZXcuIEJ5IGRlZmF1bHQs
IHdlIHNpbXBseSB0YWtlIHRoZQorICAgICAgdmlldyBhbmQgYXBwZW5kIGl0IHRvIHRoZSBgcm9v
dEVsZW1lbnRgIHNwZWNpZmllZCBvbiB0aGUgQXBwbGljYXRpb24uCisgICAgICAgSW4gY2FzZXMg
bGlrZSBGYXN0Qm9vdCBhbmQgdGVzdGluZywgd2UgY2FuIG92ZXJyaWRlIHRoaXMgaG9vayBhbmQg
aW1wbGVtZW50CisgICAgICBjdXN0b20gYmVoYXZpb3IsIHN1Y2ggYXMgc2VyaWFsaXppbmcgdG8g
YSBzdHJpbmcgYW5kIHNlbmRpbmcgb3ZlciBhbiBIVFRQCisgICAgICBzb2NrZXQgcmF0aGVyIHRo
YW4gYXBwZW5kaW5nIHRvIERPTS4KKyAgICAgICBAcGFyYW0gdmlldyB7RW1iZXIuVmlld30gdGhl
IHJvb3QtbW9zdCB2aWV3CisgICAgICBAcHJpdmF0ZQorICAgICovCisgICAgZGlkQ3JlYXRlUm9v
dFZpZXc6IGZ1bmN0aW9uICh2aWV3KSB7CisgICAgICB2aWV3LmFwcGVuZFRvKHRoaXMucm9vdEVs
ZW1lbnQpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgIFRlbGxzIHRoZSByb3V0ZXIgdG8gc3Rh
cnQgcm91dGluZy4gVGhlIHJvdXRlciB3aWxsIGFzayB0aGUgbG9jYXRpb24gZm9yIHRoZQorICAg
ICAgY3VycmVudCBVUkwgb2YgdGhlIHBhZ2UgdG8gZGV0ZXJtaW5lIHRoZSBpbml0aWFsIFVSTCB0
byBzdGFydCByb3V0aW5nIHRvLgorICAgICAgVG8gc3RhcnQgdGhlIGFwcCBhdCBhIHNwZWNpZmlj
IFVSTCwgY2FsbCBgaGFuZGxlVVJMYCBpbnN0ZWFkLgorICAgICAgIEBwcml2YXRlCisgICAgKi8K
KyAgICBzdGFydFJvdXRpbmc6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciByb3V0ZXIgPSBfZW1i
ZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ3JvdXRlcicpOworICAgICAgcm91dGVyLnN0
YXJ0Um91dGluZygpOworICAgICAgdGhpcy5fZGlkU2V0dXBSb3V0ZXIgPSB0cnVlOworICAgIH0s
CisKKyAgICAvKioKKyAgICAgIEBwcml2YXRlCisgICAgICAgU2V0cyB1cCB0aGUgcm91dGVyLCBp
bml0aWFsaXppbmcgdGhlIGNoaWxkIHJvdXRlciBhbmQgY29uZmlndXJpbmcgdGhlCisgICAgICBs
b2NhdGlvbiBiZWZvcmUgcm91dGluZyBiZWdpbnMuCisgICAgICAgQmVjYXVzZSBzZXR1cCBzaG91
bGQgb25seSBvY2N1ciBvbmNlLCBtdWx0aXBsZSBjYWxscyB0byBgc2V0dXBSb3V0ZXJgCisgICAg
ICBiZXlvbmQgdGhlIGZpcnN0IGNhbGwgaGF2ZSBubyBlZmZlY3QuCisgICAgKi8KKyAgICBzZXR1
cFJvdXRlcjogZnVuY3Rpb24gKCkgeworICAgICAgaWYgKHRoaXMuX2RpZFNldHVwUm91dGVyKSB7
CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIHRoaXMuX2RpZFNldHVwUm91dGVyID0g
dHJ1ZTsKKworICAgICAgdmFyIHJvdXRlciA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0
aGlzLCAncm91dGVyJyk7CisgICAgICByb3V0ZXIuc2V0dXBSb3V0ZXIoKTsKKyAgICB9LAorCisg
ICAgLyoqCisgICAgICBEaXJlY3RzIHRoZSByb3V0ZXIgdG8gcm91dGUgdG8gYSBwYXJ0aWN1bGFy
IFVSTC4gVGhpcyBpcyB1c2VmdWwgaW4gdGVzdHMsCisgICAgICBmb3IgZXhhbXBsZSwgdG8gdGVs
bCB0aGUgYXBwIHRvIHN0YXJ0IGF0IGEgcGFydGljdWxhciBVUkwuCisgICAgICAgQHBhcmFtIHVy
bCB7U3RyaW5nfSB0aGUgVVJMIHRoZSByb3V0ZXIgc2hvdWxkIHJvdXRlIHRvCisgICAgICBAcHJp
dmF0ZQorICAgICovCisgICAgaGFuZGxlVVJMOiBmdW5jdGlvbiAodXJsKSB7CisgICAgICB2YXIg
cm91dGVyID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdyb3V0ZXInKTsKKwor
ICAgICAgdGhpcy5zZXR1cFJvdXRlcigpOworICAgICAgcmV0dXJuIHJvdXRlci5oYW5kbGVVUkwo
dXJsKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICBAcHJpdmF0ZQorICAgICovCisgICAgc2V0
dXBFdmVudERpc3BhdGNoZXI6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciBkaXNwYXRjaGVyID0g
dGhpcy5sb29rdXAoJ2V2ZW50X2Rpc3BhdGNoZXI6bWFpbicpOworICAgICAgdmFyIGFwcGxpY2F0
aW9uQ3VzdG9tRXZlbnRzID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMuYXBwbGlj
YXRpb24sICdjdXN0b21FdmVudHMnKTsKKyAgICAgIHZhciBpbnN0YW5jZUN1c3RvbUV2ZW50cyA9
IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnY3VzdG9tRXZlbnRzJyk7CisKKyAg
ICAgIHZhciBjdXN0b21FdmVudHMgPSBfZW1iZXJNZXRhbEFzc2lnbi5kZWZhdWx0KHt9LCBhcHBs
aWNhdGlvbkN1c3RvbUV2ZW50cywgaW5zdGFuY2VDdXN0b21FdmVudHMpOworICAgICAgZGlzcGF0
Y2hlci5zZXR1cChjdXN0b21FdmVudHMsIHRoaXMucm9vdEVsZW1lbnQpOworCisgICAgICByZXR1
cm4gZGlzcGF0Y2hlcjsKKyAgICB9LAorCisgICAgLyoqCisgICAgICBSZXR1cm5zIHRoZSBjdXJy
ZW50IFVSTCBvZiB0aGUgYXBwIGluc3RhbmNlLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHlvdXIKKyAg
ICAgIGFwcCBkb2VzIG5vdCB1cGRhdGUgdGhlIGJyb3dzZXJzIFVSTCBiYXIgKGkuZS4gaXQgdXNl
cyB0aGUgYCdub25lJ2AKKyAgICAgIGxvY2F0aW9uIGFkYXB0ZXIpLgorICAgICAgIEBwdWJsaWMK
KyAgICAgIEByZXR1cm4ge1N0cmluZ30gdGhlIGN1cnJlbnQgVVJMCisgICAgKi8KKyAgICBnZXRV
Ukw6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciByb3V0ZXIgPSBfZW1iZXJNZXRhbFByb3BlcnR5
X2dldC5nZXQodGhpcywgJ3JvdXRlcicpOworICAgICAgcmV0dXJuIF9lbWJlck1ldGFsUHJvcGVy
dHlfZ2V0LmdldChyb3V0ZXIsICd1cmwnKTsKKyAgICB9LAorCisgICAgLy8gYGluc3RhbmNlLnZp
c2l0KHVybClgIHNob3VsZCBldmVudHVhbGx5IHJlcGxhY2UgYGluc3RhbmNlLmhhbmRsZVVSTCgp
YDsKKyAgICAvLyB0aGUgdGVzdCBoZWxwZXJzIGNhbiBwcm9iYWJseSBiZSBzd2l0Y2hlZCB0byB1
c2UgdGhpcyBpbXBsZW1lbnRhdGlvbiB0b28KKworICAgIC8qKgorICAgICAgTmF2aWdhdGUgdGhl
IGluc3RhbmNlIHRvIGEgcGFydGljdWxhciBVUkwuIFRoaXMgaXMgdXNlZnVsIGluIHRlc3RzLCBm
b3IKKyAgICAgIGV4YW1wbGUsIG9yIHRvIHRlbGwgdGhlIGFwcCB0byBzdGFydCBhdCBhIHBhcnRp
Y3VsYXIgVVJMLiBUaGlzIG1ldGhvZAorICAgICAgcmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNv
bHZlcyB3aXRoIHRoZSBhcHAgaW5zdGFuY2Ugd2hlbiB0aGUgdHJhbnNpdGlvbgorICAgICAgaXMg
Y29tcGxldGUsIG9yIHJlamVjdHMgaWYgdGhlIHRyYW5zaW9uIHdhcyBhYm9ydGVkIGR1ZSB0byBh
biBlcnJvci4KKyAgICAgICBAcHVibGljCisgICAgICBAcGFyYW0gdXJsIHtTdHJpbmd9IHRoZSBk
ZXN0aW5hdGlvbiBVUkwKKyAgICAgIEByZXR1cm4ge1Byb21pc2V9CisgICAgKi8KKyAgICB2aXNp
dDogZnVuY3Rpb24gKHVybCkgeworICAgICAgdmFyIF90aGlzMiA9IHRoaXM7CisKKyAgICAgIHRo
aXMuc2V0dXBSb3V0ZXIoKTsKKworICAgICAgdmFyIHJvdXRlciA9IF9lbWJlck1ldGFsUHJvcGVy
dHlfZ2V0LmdldCh0aGlzLCAncm91dGVyJyk7CisKKyAgICAgIHZhciBoYW5kbGVSZXNvbHZlID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICAvLyBSZXNvbHZlIG9ubHkgYWZ0ZXIgcmVuZGVyaW5nIGlz
IGNvbXBsZXRlCisgICAgICAgIHJldHVybiBuZXcgX2VtYmVyUnVudGltZUV4dFJzdnAuZGVmYXVs
dC5Qcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7CisgICAgICAgICAgLy8gVE9ETzogd2h5IGlz
IHRoaXMgbmVjZXNzYXJ5PyBTaG91bGRuJ3QgJ2FjdGlvbnMnIHF1ZXVlIGJlIGVub3VnaD8KKyAg
ICAgICAgICAvLyBBbHNvLCBhcmVuJ3QgcHJvaW1zZXMgc3VwcG9zZWQgdG8gYmUgYXN5bmMgYW55
d2F5PworICAgICAgICAgIF9lbWJlck1ldGFsUnVuX2xvb3AuZGVmYXVsdC5uZXh0KG51bGwsIHJl
c29sdmUsIF90aGlzMik7CisgICAgICAgIH0pOworICAgICAgfTsKKworICAgICAgdmFyIGhhbmRs
ZVJlamVjdCA9IGZ1bmN0aW9uIChlcnJvcikgeworICAgICAgICBpZiAoZXJyb3IuZXJyb3IpIHsK
KyAgICAgICAgICB0aHJvdyBlcnJvci5lcnJvcjsKKyAgICAgICAgfSBlbHNlIGlmIChlcnJvci5u
YW1lID09PSAnVHJhbnNpdGlvbkFib3J0ZWQnICYmIHJvdXRlci5yb3V0ZXIuYWN0aXZlVHJhbnNp
dGlvbikgeworICAgICAgICAgIHJldHVybiByb3V0ZXIucm91dGVyLmFjdGl2ZVRyYW5zaXRpb24u
dGhlbihoYW5kbGVSZXNvbHZlLCBoYW5kbGVSZWplY3QpOworICAgICAgICB9IGVsc2UgaWYgKGVy
cm9yLm5hbWUgPT09ICdUcmFuc2l0aW9uQWJvcnRlZCcpIHsKKyAgICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoZXJyb3IubWVzc2FnZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdGhyb3cg
ZXJyb3I7CisgICAgICAgIH0KKyAgICAgIH07CisKKyAgICAgIHZhciBsb2NhdGlvbiA9IF9lbWJl
ck1ldGFsUHJvcGVydHlfZ2V0LmdldChyb3V0ZXIsICdsb2NhdGlvbicpOworCisgICAgICAvLyBL
ZWVwcyB0aGUgbG9jYXRpb24gYWRhcHRlcidzIGludGVybmFsIFVSTCBpbi1zeW5jCisgICAgICBs
b2NhdGlvbi5zZXRVUkwodXJsKTsKKworICAgICAgLy8gZ2V0VVJMIHJldHVybnMgdGhlIHNldCB1
cmwgd2l0aCB0aGUgcm9vdFVSTCBzdHJpcHBlZCBvZmYKKyAgICAgIHJldHVybiByb3V0ZXIuaGFu
ZGxlVVJMKGxvY2F0aW9uLmdldFVSTCgpKS50aGVuKGhhbmRsZVJlc29sdmUsIGhhbmRsZVJlamVj
dCk7CisgICAgfQorICB9KTsKKworICAvKioKKyAgICBBIGxpc3Qgb2YgYm9vdC10aW1lIGNvbmZp
Z3VyYXRpb24gb3B0aW9ucyBmb3IgY3VzdG9taXppbmcgdGhlIGJlaGF2aW9yIG9mCisgICAgYW4g
YEVtYmVyLkFwcGxpY2F0aW9uSW5zdGFuY2VgLgorICAKKyAgICBUaGlzIGlzIGFuIGludGVyZmFj
ZSBjbGFzcyB0aGF0IGV4aXN0cyBwdXJlbHkgdG8gZG9jdW1lbnQgdGhlIGF2YWlsYWJsZQorICAg
IG9wdGlvbnM7IHlvdSBkbyBub3QgbmVlZCB0byBjb25zdHJ1Y3QgaXQgbWFudWFsbHkuIFNpbXBs
eSBwYXNzIGEgcmVndWxhcgorICAgIEphdmFTY3JpcHQgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGRl
c2lyZWQgb3B0aW9ucyBpbnRvIG1ldGhvZHMgdGhhdCByZXF1aXJlCisgICAgb25lIG9mIHRoZXNl
IG9wdGlvbnMgb2JqZWN0OgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgTXlBcHAudmlzaXQo
Ii8iLCB7IGxvY2F0aW9uOiAibm9uZSIsIHJvb3RFbGVtZW50OiAiI2NvbnRhaW5lciIgfSk7Cisg
ICAgYGBgCisgIAorICAgIE5vdCBhbGwgY29tYmluYXRpb25zIG9mIHRoZSBzdXBwb3J0ZWQgb3B0
aW9ucyBhcmUgdmFsaWQuIFNlZSB0aGUgZG9jdW1lbnRhdGlvbgorICAgIG9uIGBFbWJlci5BcHBs
aWNhdGlvbiN2aXNpdGAgZm9yIHRoZSBzdXBwb3J0ZWQgY29uZmlndXJhdGlvbnMuCisgIAorICAg
IEludGVybmFsLCBleHBlcmltZW50YWwgb3Igb3RoZXJ3aXNlIHVuc3RhYmxlIGZsYWdzIGFyZSBt
YXJrZWQgYXMgcHJpdmF0ZS4KKyAgCisgICAgQGNsYXNzIEJvb3RPcHRpb25zCisgICAgQG5hbWVz
cGFjZSBFbWJlci5BcHBsaWNhdGlvbkluc3RhbmNlCisgICAgQHB1YmxpYworICAqLworICBCb290
T3B0aW9ucyA9IGZ1bmN0aW9uIEJvb3RPcHRpb25zKCkgeworICAgIHZhciBvcHRpb25zID0gYXJn
dW1lbnRzLmxlbmd0aCA8PSAwIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8ge30gOiBh
cmd1bWVudHNbMF07CisKKyAgICAvKioKKyAgICAgIFByb3ZpZGUgYSBzcGVjaWZpYyBpbnN0YW5j
ZSBvZiBqUXVlcnkuIFRoaXMgaXMgdXNlZnVsIGluIGNvbmp1bmN0aW9uIHdpdGgKKyAgICAgIHRo
ZSBgZG9jdW1lbnRgIG9wdGlvbiwgYXMgaXQgYWxsb3dzIHlvdSB0byB1c2UgYSBjb3B5IG9mIGBq
UXVlcnlgIHRoYXQgaXMKKyAgICAgIGFwcHJvcHJpYXRlbHkgYm91bmQgdG8gdGhlIGZvcmVpZ24g
YGRvY3VtZW50YCAoZS5nLiBhIGpzZG9tKS4KKyAgICAgICBUaGlzIGlzIGhpZ2hseSBleHBlcmlt
ZW50YWwgYW5kIHN1cHBvcnQgdmVyeSBpbmNvbXBsZXRlIGF0IHRoZSBtb21lbnQuCisgICAgICAg
QHByb3BlcnR5IGpRdWVyeQorICAgICAgQHR5cGUgT2JqZWN0CisgICAgICBAZGVmYXVsdCBhdXRv
LWRldGVjdGVkCisgICAgICBAcHJpdmF0ZQorICAgICovCisgICAgdGhpcy5qUXVlcnkgPSBfZW1i
ZXJWaWV3c1N5c3RlbUpxdWVyeS5kZWZhdWx0OyAvLyBUaGlzIGRlZmF1bHQgaXMgb3ZlcnJpZGFi
bGUgYmVsb3cKKworICAgIC8qKgorICAgICAgSW50ZXJhY3RpdmUgbW9kZTogd2hldGhlciB3ZSBu
ZWVkIHRvIHNldCB1cCBldmVudCBkZWxlZ2F0aW9uIGFuZCBpbnZva2UKKyAgICAgIGxpZmVjeWNs
ZSBjYWxsYmFja3Mgb24gQ29tcG9uZW50cy4KKyAgICAgICBAcHJvcGVydHkgaXNJbnRlcmFjdGl2
ZQorICAgICAgQHR5cGUgYm9vbGVhbgorICAgICAgQGRlZmF1bHQgYXV0by1kZXRlY3RlZAorICAg
ICAgQHByaXZhdGUKKyAgICAqLworICAgIHRoaXMuaXNJbnRlcmFjdGl2ZSA9IF9lbWJlck1ldGFs
RW52aXJvbm1lbnQuZGVmYXVsdC5oYXNET007IC8vIFRoaXMgZGVmYXVsdCBpcyBvdmVycmlkYWJs
ZSBiZWxvdworCisgICAgLyoqCisgICAgICBSdW4gaW4gYSBmdWxsIGJyb3dzZXIgZW52aXJvbm1l
bnQuCisgICAgICAgV2hlbiB0aGlzIGZsYWcgaXMgc2V0IHRvIGBmYWxzZWAsIGl0IHdpbGwgZGlz
YWJsZSBtb3N0IGJyb3dzZXItc3BlY2lmaWMKKyAgICAgIGFuZCBpbnRlcmFjdGl2ZSBmZWF0dXJl
cy4gU3BlY2lmaWNhbGx5OgorICAgICAgICogSXQgZG9lcyBub3QgdXNlIGBqUXVlcnlgIHRvIGFw
cGVuZCB0aGUgcm9vdCB2aWV3OyB0aGUgYHJvb3RFbGVtZW50YAorICAgICAgICAoZWl0aGVyIHNw
ZWNpZmllZCBhcyBhIHN1YnNlcXVlbnQgb3B0aW9uIG9yIG9uIHRoZSBhcHBsaWNhdGlvbiBpdHNl
bGYpCisgICAgICAgIG11c3QgYWxyZWFkeSBiZSBhbiBgRWxlbWVudGAgaW4gdGhlIGdpdmVuIGBk
b2N1bWVudGAgKGFzIG9wcG9zZWQgdG8gYQorICAgICAgICBzdHJpbmcgc2VsZWN0b3IpLgorICAg
ICAgICogSXQgZG9lcyBub3Qgc2V0IHVwIGFuIGBFdmVudERpc3BhdGNoZXJgLgorICAgICAgICog
SXQgZG9lcyBub3QgcnVuIGFueSBgQ29tcG9uZW50YCBsaWZlY3ljbGUgaG9va3MgKHN1Y2ggYXMg
YGRpZEluc2VydEVsZW1lbnRgKS4KKyAgICAgICAqIEl0IHNldHMgdGhlIGBsb2NhdGlvbmAgb3B0
aW9uIHRvIGAibm9uZSJgLiAoSWYgeW91IHdvdWxkIGxpa2UgdG8gdXNlCisgICAgICAgIHRoZSBs
b2NhdGlvbiBhZGFwdGVyIHNwZWNpZmllZCBpbiB0aGUgYXBwJ3Mgcm91dGVyIGluc3RlYWQsIHlv
dSBjYW4gYWxzbworICAgICAgICBzcGVjaWZ5IGB7IGxvY2F0aW9uOiBudWxsIH1gIHRvIHNwZWNp
ZmljYWxseSBvcHQtb3V0LikKKyAgICAgICBAcHJvcGVydHkgaXNCcm93c2VyCisgICAgICBAdHlw
ZSBib29sZWFuCisgICAgICBAZGVmYXVsdCBhdXRvLWRldGVjdGVkCisgICAgICBAcHVibGljCisg
ICAgKi8KKyAgICBpZiAob3B0aW9ucy5pc0Jyb3dzZXIgIT09IHVuZGVmaW5lZCkgeworICAgICAg
dGhpcy5pc0Jyb3dzZXIgPSAhIW9wdGlvbnMuaXNCcm93c2VyOworICAgIH0gZWxzZSB7CisgICAg
ICB0aGlzLmlzQnJvd3NlciA9IF9lbWJlck1ldGFsRW52aXJvbm1lbnQuZGVmYXVsdC5oYXNET007
CisgICAgfQorCisgICAgaWYgKCF0aGlzLmlzQnJvd3NlcikgeworICAgICAgdGhpcy5qUXVlcnkg
PSBudWxsOworICAgICAgdGhpcy5pc0ludGVyYWN0aXZlID0gZmFsc2U7CisgICAgICB0aGlzLmxv
Y2F0aW9uID0gJ25vbmUnOworICAgIH0KKworICAgIC8qKgorICAgICAgRGlzYWJsZSByZW5kZXJp
bmcgY29tcGxldGVseS4KKyAgICAgICBXaGVuIHRoaXMgZmxhZyBpcyBzZXQgdG8gYHRydWVgLCBp
dCB3aWxsIGRpc2FibGUgdGhlIGVudGlyZSByZW5kZXJpbmcKKyAgICAgIHBpcGVsaW5lLiBFc3Nl
bnRpYWxseSwgdGhpcyBwdXRzIHRoZSBhcHAgaW50byAicm91dGluZy1vbmx5IiBtb2RlLiBObwor
ICAgICAgdGVtcGxhdGVzIHdpbGwgYmUgcmVuZGVyZWQsIGFuZCBubyBDb21wb25lbnRzIHdpbGwg
YmUgY3JlYXRlZC4KKyAgICAgICBAcHJvcGVydHkgc2hvdWxkUmVuZGVyCisgICAgICBAdHlwZSBi
b29sZWFuCisgICAgICBAZGVmYXVsdCB0cnVlCisgICAgICBAcHVibGljCisgICAgKi8KKyAgICBp
ZiAob3B0aW9ucy5zaG91bGRSZW5kZXIgIT09IHVuZGVmaW5lZCkgeworICAgICAgdGhpcy5zaG91
bGRSZW5kZXIgPSAhIW9wdGlvbnMuc2hvdWxkUmVuZGVyOworICAgIH0gZWxzZSB7CisgICAgICB0
aGlzLnNob3VsZFJlbmRlciA9IHRydWU7CisgICAgfQorCisgICAgaWYgKCF0aGlzLnNob3VsZFJl
bmRlcikgeworICAgICAgdGhpcy5qUXVlcnkgPSBudWxsOworICAgICAgdGhpcy5pc0ludGVyYWN0
aXZlID0gZmFsc2U7CisgICAgfQorCisgICAgLyoqCisgICAgICBJZiBwcmVzZW50LCByZW5kZXIg
aW50byB0aGUgZ2l2ZW4gYERvY3VtZW50YCBvYmplY3QgaW5zdGVhZCBvZiB0aGUKKyAgICAgIGds
b2JhbCBgd2luZG93LmRvY3VtZW50YCBvYmplY3QuCisgICAgICAgSW4gcHJhY3RpY2UsIHRoaXMg
aXMgb25seSB1c2VmdWwgaW4gbm9uLWJyb3dzZXIgZW52aXJvbm1lbnQgb3IgaW4KKyAgICAgIG5v
bi1pbnRlcmFjdGl2ZSBtb2RlLCBiZWNhdXNlIEVtYmVyJ3MgYGpRdWVyeWAgZGVwZW5kZW5jeSBp
cworICAgICAgaW1wbGljaXRseSBib3VuZCB0byB0aGUgY3VycmVudCBkb2N1bWVudCwgY2F1c2lu
ZyBldmVudCBkZWxlZ2F0aW9uCisgICAgICB0byBub3Qgd29yayBwcm9wZXJseSB3aGVuIHRoZSBh
cHAgaXMgcmVuZGVyZWQgaW50byBhIGZvcmVpZ24KKyAgICAgIGRvY3VtZW50IG9iamVjdCAoc3Vj
aCBhcyBhbiBpZnJhbWUncyBgY29udGVudERvY3VtZW50YCkuCisgICAgICAgSW4gbm9uLWJyb3dz
ZXIgbW9kZSwgdGhpcyBjb3VsZCBiZSBhICJgRG9jdW1lbnRgLWxpa2UiIG9iamVjdCBhcworICAg
ICAgRW1iZXIgb25seSBpbnRlcmFjdCB3aXRoIGEgc21hbGwgc3Vic2V0IG9mIHRoZSBET00gQVBJ
IGluIG5vbi0KKyAgICAgIGludGVyYWN0aXZlIG1vZGUuIFdoaWxlIHRoZSBleGFjdCByZXF1aXJl
bWVudHMgaGF2ZSBub3QgeWV0IGJlZW4KKyAgICAgIGZvcm1hbGl6ZWQsIHRoZSBgU2ltcGxlRE9N
YCBsaWJyYXJ5J3MgaW1wbGVtZW50YXRpb24gaXMga25vd24gdG8KKyAgICAgIHdvcmsuCisgICAg
ICAgQHByb3BlcnR5IGRvY3VtZW50CisgICAgICBAdHlwZSBEb2N1bWVudAorICAgICAgQGRlZmF1
bHQgdGhlIGdsb2JhbCBgZG9jdW1lbnRgIG9iamVjdAorICAgICAgQHB1YmxpYworICAgICovCisg
ICAgaWYgKG9wdGlvbnMuZG9jdW1lbnQpIHsKKyAgICAgIHRoaXMuZG9jdW1lbnQgPSBvcHRpb25z
LmRvY3VtZW50OworICAgIH0gZWxzZSB7CisgICAgICB0aGlzLmRvY3VtZW50ID0gdHlwZW9mIGRv
Y3VtZW50ICE9PSAndW5kZWZpbmVkJyA/IGRvY3VtZW50IDogbnVsbDsKKyAgICB9CisKKyAgICAv
KioKKyAgICAgIElmIHByZXNlbnQsIG92ZXJyaWRlcyB0aGUgYXBwbGljYXRpb24ncyBgcm9vdEVs
ZW1lbnRgIHByb3BlcnR5IG9uCisgICAgICB0aGUgaW5zdGFuY2UuIFRoaXMgaXMgdXNlZnVsIGZv
ciB0ZXN0aW5nIGVudmlyb25tZW50LCB3aGVyZSB5b3UKKyAgICAgIG1pZ2h0IHdhbnQgdG8gYXBw
ZW5kIHRoZSByb290IHZpZXcgdG8gYSBmaXh0dXJlIGFyZWEuCisgICAgICAgSW4gbm9uLWJyb3dz
ZXIgbW9kZSwgYmVjYXVzZSBFbWJlciBkb2VzIG5vdCBoYXZlIGFjY2VzcyB0byBqUXVlcnksCisg
ICAgICB0aGlzIG9wdGlvbnMgbXVzdCBiZSBzcGVjaWZpZWQgYXMgYSBET00gYEVsZW1lbnRgIG9i
amVjdCBpbnN0ZWFkIG9mCisgICAgICBhIHNlbGVjdG9yIHN0cmluZy4KKyAgICAgICBTZWUgdGhl
IGRvY3VtZW50YXRpb24gb24gYEVtYmVyLkFwcGxpY2F0aW9uc2AncyBgcm9vdEVsZW1lbnRgIGZv
cgorICAgICAgZGV0YWlscy4KKyAgICAgICBAcHJvcGVydHkgcm9vdEVsZW1lbnQKKyAgICAgIEB0
eXBlIFN0cmluZ3xFbGVtZW50CisgICAgICBAZGVmYXVsdCBudWxsCisgICAgICBAcHVibGljCisg
ICAgICovCisgICAgaWYgKG9wdGlvbnMucm9vdEVsZW1lbnQpIHsKKyAgICAgIHRoaXMucm9vdEVs
ZW1lbnQgPSBvcHRpb25zLnJvb3RFbGVtZW50OworICAgIH0KKworICAgIC8vIFNldCB0aGVzZSBv
cHRpb25zIGxhc3QgdG8gZ2l2ZSB0aGUgdXNlciBhIGNoYW5jZSB0byBvdmVycmlkZSB0aGUKKyAg
ICAvLyBkZWZhdWx0cyBmcm9tIHRoZSAiY29tYm8iIG9wdGlvbnMgbGlrZSBgaXNCcm93c2VyYCAo
YWx0aG91Z2ggaW4KKyAgICAvLyBwcmFjdGljZSwgdGhlIHJlc3VsdGluZyBjb21iaW5hdGlvbiBp
cyBwcm9iYWJseSBpbnZhbGlkKQorCisgICAgLyoqCisgICAgICBJZiBwcmVzZW50LCBvdmVycmlk
ZXMgdGhlIHJvdXRlcidzIGBsb2NhdGlvbmAgcHJvcGVydHkgd2l0aCB0aGlzCisgICAgICB2YWx1
ZS4gVGhpcyBpcyB1c2VmdWwgZm9yIGVudmlyb25tZW50cyB3aGVyZSB0cnlpbmcgdG8gbW9kaWZ5
IHRoZQorICAgICAgVVJMIHdvdWxkIGJlIGluYXBwcm9wcmlhdGUuCisgICAgICAgQHByb3BlcnR5
IGxvY2F0aW9uCisgICAgICBAdHlwZSBzdHJpbmcKKyAgICAgIEBkZWZhdWx0IG51bGwKKyAgICAg
IEBwdWJsaWMKKyAgICAqLworICAgIGlmIChvcHRpb25zLmxvY2F0aW9uICE9PSB1bmRlZmluZWQp
IHsKKyAgICAgIHRoaXMubG9jYXRpb24gPSBvcHRpb25zLmxvY2F0aW9uOworICAgIH0KKworICAg
IGlmIChvcHRpb25zLmpRdWVyeSAhPT0gdW5kZWZpbmVkKSB7CisgICAgICB0aGlzLmpRdWVyeSA9
IG9wdGlvbnMualF1ZXJ5OworICAgIH0KKworICAgIGlmIChvcHRpb25zLmlzSW50ZXJhY3RpdmUg
IT09IHVuZGVmaW5lZCkgeworICAgICAgdGhpcy5pc0ludGVyYWN0aXZlID0gISFvcHRpb25zLmlz
SW50ZXJhY3RpdmU7CisgICAgfQorICB9OworCisgIEJvb3RPcHRpb25zLnByb3RvdHlwZS50b0Vu
dmlyb25tZW50ID0gZnVuY3Rpb24gKCkgeworICAgIHZhciBlbnYgPSBfZW1iZXJNZXRhbEFzc2ln
bi5kZWZhdWx0KHt9LCBfZW1iZXJNZXRhbEVudmlyb25tZW50LmRlZmF1bHQpOworICAgIC8vIEZv
ciBjb21wYXRpYmlsaXR5IHdpdGggZXhpc3RpbmcgY29kZQorICAgIGVudi5oYXNET00gPSB0aGlz
LmlzQnJvd3NlcjsKKyAgICBlbnYub3B0aW9ucyA9IHRoaXM7CisgICAgcmV0dXJuIGVudjsKKyAg
fTsKKworICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQXBwbGljYXRpb25JbnN0YW5jZS5wcm90b3R5
cGUsICdjb250YWluZXInLCB7CisgICAgY29uZmlndXJhYmxlOiB0cnVlLAorICAgIGVudW1lcmFi
bGU6IGZhbHNlLAorICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgdmFyIGluc3RhbmNlID0g
dGhpczsKKyAgICAgIHJldHVybiB7CisgICAgICAgIGxvb2t1cDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgIF9lbWJlck1ldGFsRGVidWcuZGVwcmVjYXRlKCdVc2luZyBgQXBwbGljYXRpb25JbnN0
YW5jZS5jb250YWluZXIubG9va3VwYCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIGBBcHBsaWNh
dGlvbkluc3RhbmNlLmxvb2t1cGAgaW5zdGVhZC4nLCBmYWxzZSwgeworICAgICAgICAgICAgaWQ6
ICdlbWJlci1hcHBsaWNhdGlvbi5hcHAtaW5zdGFuY2UtY29udGFpbmVyJywKKyAgICAgICAgICAg
IHVudGlsOiAnMy4wLjAnLAorICAgICAgICAgICAgdXJsOiAnaHR0cDovL2VtYmVyanMuY29tL2Rl
cHJlY2F0aW9ucy92Mi54LyN0b2NfZW1iZXItYXBwbGljYXRpb25pbnN0YW5jZS1jb250YWluZXIn
CisgICAgICAgICAgfSk7CisgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmxvb2t1cC5hcHBseShp
bnN0YW5jZSwgYXJndW1lbnRzKTsKKyAgICAgICAgfQorICAgICAgfTsKKyAgICB9CisgIH0pOwor
CisgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcHBsaWNhdGlvbkluc3RhbmNlLnByb3RvdHlwZSwg
J3JlZ2lzdHJ5JywgeworICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKKyAgICBlbnVtZXJhYmxlOiBm
YWxzZSwKKyAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHJldHVybiBfZW1iZXJSdW50aW1l
TWl4aW5zUmVnaXN0cnlfcHJveHkuYnVpbGRGYWtlUmVnaXN0cnlXaXRoRGVwcmVjYXRpb25zKHRo
aXMsICdBcHBsaWNhdGlvbkluc3RhbmNlJyk7CisgICAgfQorICB9KTsKKworICBleHBvcnRzLmRl
ZmF1bHQgPSBBcHBsaWNhdGlvbkluc3RhbmNlOworfSk7CitlbmlmZWQoJ2VtYmVyLWFwcGxpY2F0
aW9uL3N5c3RlbS9hcHBsaWNhdGlvbicsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbCcsICdlbWJl
ci1tZXRhbC9kZWJ1ZycsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQnLCAnZW1iZXItcnVudGlt
ZS9zeXN0ZW0vbGF6eV9sb2FkJywgJ2VtYmVyLW1ldGFsL3J1bl9sb29wJywgJ2VtYmVyLXJ1bnRp
bWUvY29udHJvbGxlcnMvY29udHJvbGxlcicsICdlbWJlci1odG1sYmFycy9zeXN0ZW0vZG9tLWhl
bHBlcicsICdlbWJlci1tZXRhbC12aWV3cycsICdlbWJlci1odG1sYmFycy90ZW1wbGF0ZXMvdG9w
LWxldmVsLXZpZXcnLCAnZW1iZXItcm91dGluZy12aWV3cy92aWV3cy9vdXRsZXQnLCAnZW1iZXIt
dmlld3Mvdmlld3MvdmlldycsICdlbWJlci12aWV3cy9zeXN0ZW0vZXZlbnRfZGlzcGF0Y2hlcics
ICdlbWJlci12aWV3cy9zeXN0ZW0vanF1ZXJ5JywgJ2VtYmVyLXJvdXRpbmcvc3lzdGVtL3JvdXRl
JywgJ2VtYmVyLXJvdXRpbmcvc3lzdGVtL3JvdXRlcicsICdlbWJlci1yb3V0aW5nL2xvY2F0aW9u
L2hhc2hfbG9jYXRpb24nLCAnZW1iZXItcm91dGluZy9sb2NhdGlvbi9oaXN0b3J5X2xvY2F0aW9u
JywgJ2VtYmVyLXJvdXRpbmcvbG9jYXRpb24vYXV0b19sb2NhdGlvbicsICdlbWJlci1yb3V0aW5n
L2xvY2F0aW9uL25vbmVfbG9jYXRpb24nLCAnZW1iZXItcm91dGluZy9zeXN0ZW0vY2FjaGUnLCAn
ZW1iZXItYXBwbGljYXRpb24vc3lzdGVtL2FwcGxpY2F0aW9uLWluc3RhbmNlJywgJ2VtYmVyLXZp
ZXdzL3ZpZXdzL3RleHRfZmllbGQnLCAnZW1iZXItdmlld3Mvdmlld3MvdGV4dF9hcmVhJywgJ2Vt
YmVyLXZpZXdzL3ZpZXdzL2NoZWNrYm94JywgJ2VtYmVyLXJvdXRpbmctdmlld3MvY29tcG9uZW50
cy9saW5rLXRvJywgJ2VtYmVyLXJvdXRpbmcvc2VydmljZXMvcm91dGluZycsICdlbWJlci1leHRl
bnNpb24tc3VwcG9ydC9jb250YWluZXJfZGVidWdfYWRhcHRlcicsICdlbWJlci1ydW50aW1lL21p
eGlucy9yZWdpc3RyeV9wcm94eScsICdjb250YWluZXIvcmVnaXN0cnknLCAnZW1iZXItbWV0YWwv
ZW52aXJvbm1lbnQnLCAnZW1iZXItcnVudGltZS9leHQvcnN2cCcsICdlbWJlci1hcHBsaWNhdGlv
bi9zeXN0ZW0vZW5naW5lJywgJ3JlcXVpcmUnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1l
dGFsLCBfZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJNZXRhbFByb3BlcnR5X2dldCwgX2VtYmVyUnVu
dGltZVN5c3RlbUxhenlfbG9hZCwgX2VtYmVyTWV0YWxSdW5fbG9vcCwgX2VtYmVyUnVudGltZUNv
bnRyb2xsZXJzQ29udHJvbGxlciwgX2VtYmVySHRtbGJhcnNTeXN0ZW1Eb21IZWxwZXIsIF9lbWJl
ck1ldGFsVmlld3MsIF9lbWJlckh0bWxiYXJzVGVtcGxhdGVzVG9wTGV2ZWxWaWV3LCBfZW1iZXJS
b3V0aW5nVmlld3NWaWV3c091dGxldCwgX2VtYmVyVmlld3NWaWV3c1ZpZXcsIF9lbWJlclZpZXdz
U3lzdGVtRXZlbnRfZGlzcGF0Y2hlciwgX2VtYmVyVmlld3NTeXN0ZW1KcXVlcnksIF9lbWJlclJv
dXRpbmdTeXN0ZW1Sb3V0ZSwgX2VtYmVyUm91dGluZ1N5c3RlbVJvdXRlciwgX2VtYmVyUm91dGlu
Z0xvY2F0aW9uSGFzaF9sb2NhdGlvbiwgX2VtYmVyUm91dGluZ0xvY2F0aW9uSGlzdG9yeV9sb2Nh
dGlvbiwgX2VtYmVyUm91dGluZ0xvY2F0aW9uQXV0b19sb2NhdGlvbiwgX2VtYmVyUm91dGluZ0xv
Y2F0aW9uTm9uZV9sb2NhdGlvbiwgX2VtYmVyUm91dGluZ1N5c3RlbUNhY2hlLCBfZW1iZXJBcHBs
aWNhdGlvblN5c3RlbUFwcGxpY2F0aW9uSW5zdGFuY2UsIF9lbWJlclZpZXdzVmlld3NUZXh0X2Zp
ZWxkLCBfZW1iZXJWaWV3c1ZpZXdzVGV4dF9hcmVhLCBfZW1iZXJWaWV3c1ZpZXdzQ2hlY2tib3gs
IF9lbWJlclJvdXRpbmdWaWV3c0NvbXBvbmVudHNMaW5rVG8sIF9lbWJlclJvdXRpbmdTZXJ2aWNl
c1JvdXRpbmcsIF9lbWJlckV4dGVuc2lvblN1cHBvcnRDb250YWluZXJfZGVidWdfYWRhcHRlciwg
X2VtYmVyUnVudGltZU1peGluc1JlZ2lzdHJ5X3Byb3h5LCBfY29udGFpbmVyUmVnaXN0cnksIF9l
bWJlck1ldGFsRW52aXJvbm1lbnQsIF9lbWJlclJ1bnRpbWVFeHRSc3ZwLCBfZW1iZXJBcHBsaWNh
dGlvblN5c3RlbUVuZ2luZSwgX3JlcXVpcmUyKSB7CisgIC8qKgorICBAbW9kdWxlIGVtYmVyCisg
IEBzdWJtb2R1bGUgZW1iZXItYXBwbGljYXRpb24KKyAgKi8KKyAgJ3VzZSBzdHJpY3QnOworCisg
IGV4cG9ydHMuX3Jlc2V0TGVnYWN5QWRkb25XYXJuaW5ncyA9IF9yZXNldExlZ2FjeUFkZG9uV2Fy
bmluZ3M7CisKKyAgdmFyIF90ZW1wbGF0ZU9iamVjdCA9IF90YWdnZWRUZW1wbGF0ZUxpdGVyYWxM
b29zZShbJy1idWNrZXQtY2FjaGU6bWFpbiddLCBbJy1idWNrZXQtY2FjaGU6bWFpbiddKSwKKyAg
ICAgIF90ZW1wbGF0ZU9iamVjdDIgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsTG9vc2UoWyd0ZW1w
bGF0ZTpjb21wb25lbnRzLy1kZWZhdWx0J10sIFsndGVtcGxhdGU6Y29tcG9uZW50cy8tZGVmYXVs
dCddKTsKKworICBmdW5jdGlvbiBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsTG9vc2Uoc3RyaW5ncywg
cmF3KSB7IHN0cmluZ3MucmF3ID0gcmF3OyByZXR1cm4gc3RyaW5nczsgfQorCisgIHZhciBsaWJy
YXJpZXNSZWdpc3RlcmVkID0gZmFsc2U7CisKKyAgdmFyIHdhcm5lZEFib3V0TGVnYWN5Vmlld0Fk
ZG9uID0gZmFsc2U7CisgIHZhciB3YXJuZWRBYm91dExlZ2FjeUNvbnRyb2xsZXJBZGRvbiA9IGZh
bHNlOworCisgIC8vIEZvciB0ZXN0aW5nCisKKyAgZnVuY3Rpb24gX3Jlc2V0TGVnYWN5QWRkb25X
YXJuaW5ncygpIHsKKyAgICB3YXJuZWRBYm91dExlZ2FjeVZpZXdBZGRvbiA9IGZhbHNlOworICAg
IHdhcm5lZEFib3V0TGVnYWN5Q29udHJvbGxlckFkZG9uID0gZmFsc2U7CisgIH0KKworICAvKioK
KyAgICBBbiBpbnN0YW5jZSBvZiBgRW1iZXIuQXBwbGljYXRpb25gIGlzIHRoZSBzdGFydGluZyBw
b2ludCBmb3IgZXZlcnkgRW1iZXIKKyAgICBhcHBsaWNhdGlvbi4gSXQgaGVscHMgdG8gaW5zdGFu
dGlhdGUsIGluaXRpYWxpemUgYW5kIGNvb3JkaW5hdGUgdGhlIG1hbnkKKyAgICBvYmplY3RzIHRo
YXQgbWFrZSB1cCB5b3VyIGFwcC4KKyAgCisgICAgRWFjaCBFbWJlciBhcHAgaGFzIG9uZSBhbmQg
b25seSBvbmUgYEVtYmVyLkFwcGxpY2F0aW9uYCBvYmplY3QuIEluIGZhY3QsIHRoZQorICAgIHZl
cnkgZmlyc3QgdGhpbmcgeW91IHNob3VsZCBkbyBpbiB5b3VyIGFwcGxpY2F0aW9uIGlzIGNyZWF0
ZSB0aGUgaW5zdGFuY2U6CisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAgICB3aW5kb3cuQXBwID0g
RW1iZXIuQXBwbGljYXRpb24uY3JlYXRlKCk7CisgICAgYGBgCisgIAorICAgIFR5cGljYWxseSwg
dGhlIGFwcGxpY2F0aW9uIG9iamVjdCBpcyB0aGUgb25seSBnbG9iYWwgdmFyaWFibGUuIEFsbCBv
dGhlcgorICAgIGNsYXNzZXMgaW4geW91ciBhcHAgc2hvdWxkIGJlIHByb3BlcnRpZXMgb24gdGhl
IGBFbWJlci5BcHBsaWNhdGlvbmAgaW5zdGFuY2UsCisgICAgd2hpY2ggaGlnaGxpZ2h0cyBpdHMg
Zmlyc3Qgcm9sZTogYSBnbG9iYWwgbmFtZXNwYWNlLgorICAKKyAgICBGb3IgZXhhbXBsZSwgaWYg
eW91IGRlZmluZSBhIHZpZXcgY2xhc3MsIGl0IG1pZ2h0IGxvb2sgbGlrZSB0aGlzOgorICAKKyAg
ICBgYGBqYXZhc2NyaXB0CisgICAgQXBwLk15VmlldyA9IEVtYmVyLlZpZXcuZXh0ZW5kKCk7Cisg
ICAgYGBgCisgIAorICAgIEJ5IGRlZmF1bHQsIGNhbGxpbmcgYEVtYmVyLkFwcGxpY2F0aW9uLmNy
ZWF0ZSgpYCB3aWxsIGF1dG9tYXRpY2FsbHkgaW5pdGlhbGl6ZQorICAgIHlvdXIgYXBwbGljYXRp
b24gYnkgY2FsbGluZyB0aGUgYEVtYmVyLkFwcGxpY2F0aW9uLmluaXRpYWxpemUoKWAgbWV0aG9k
LiBJZgorICAgIHlvdSBuZWVkIHRvIGRlbGF5IGluaXRpYWxpemF0aW9uLCB5b3UgY2FuIGNhbGwg
eW91ciBhcHAncyBgZGVmZXJSZWFkaW5lc3MoKWAKKyAgICBtZXRob2QuIFdoZW4geW91IGFyZSBy
ZWFkeSBmb3IgeW91ciBhcHAgdG8gYmUgaW5pdGlhbGl6ZWQsIGNhbGwgaXRzCisgICAgYGFkdmFu
Y2VSZWFkaW5lc3MoKWAgbWV0aG9kLgorICAKKyAgICBZb3UgY2FuIGRlZmluZSBhIGByZWFkeWAg
bWV0aG9kIG9uIHRoZSBgRW1iZXIuQXBwbGljYXRpb25gIGluc3RhbmNlLCB3aGljaAorICAgIHdp
bGwgYmUgcnVuIGJ5IEVtYmVyIHdoZW4gdGhlIGFwcGxpY2F0aW9uIGlzIGluaXRpYWxpemVkLgor
ICAKKyAgICBCZWNhdXNlIGBFbWJlci5BcHBsaWNhdGlvbmAgaW5oZXJpdHMgZnJvbSBgRW1iZXIu
TmFtZXNwYWNlYCwgYW55IGNsYXNzZXMKKyAgICB5b3UgY3JlYXRlIHdpbGwgaGF2ZSB1c2VmdWwg
c3RyaW5nIHJlcHJlc2VudGF0aW9ucyB3aGVuIGNhbGxpbmcgYHRvU3RyaW5nKClgLgorICAgIFNl
ZSB0aGUgYEVtYmVyLk5hbWVzcGFjZWAgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlv
bi4KKyAgCisgICAgV2hpbGUgeW91IGNhbiB0aGluayBvZiB5b3VyIGBFbWJlci5BcHBsaWNhdGlv
bmAgYXMgYSBjb250YWluZXIgdGhhdCBob2xkcyB0aGUKKyAgICBvdGhlciBjbGFzc2VzIGluIHlv
dXIgYXBwbGljYXRpb24sIHRoZXJlIGFyZSBzZXZlcmFsIG90aGVyIHJlc3BvbnNpYmlsaXRpZXMK
KyAgICBnb2luZyBvbiB1bmRlci10aGUtaG9vZCB0aGF0IHlvdSBtYXkgd2FudCB0byB1bmRlcnN0
YW5kLgorICAKKyAgICAjIyMgRXZlbnQgRGVsZWdhdGlvbgorICAKKyAgICBFbWJlciB1c2VzIGEg
dGVjaG5pcXVlIGNhbGxlZCBfZXZlbnQgZGVsZWdhdGlvbl8uIFRoaXMgYWxsb3dzIHRoZSBmcmFt
ZXdvcmsKKyAgICB0byBzZXQgdXAgYSBnbG9iYWwsIHNoYXJlZCBldmVudCBsaXN0ZW5lciBpbnN0
ZWFkIG9mIHJlcXVpcmluZyBlYWNoIHZpZXcgdG8KKyAgICBkbyBpdCBtYW51YWxseS4gRm9yIGV4
YW1wbGUsIGluc3RlYWQgb2YgZWFjaCB2aWV3IHJlZ2lzdGVyaW5nIGl0cyBvd24KKyAgICBgbW91
c2Vkb3duYCBsaXN0ZW5lciBvbiBpdHMgYXNzb2NpYXRlZCBlbGVtZW50LCBFbWJlciBzZXRzIHVw
IGEgYG1vdXNlZG93bmAKKyAgICBsaXN0ZW5lciBvbiB0aGUgYGJvZHlgLgorICAKKyAgICBJZiBh
IGBtb3VzZWRvd25gIGV2ZW50IG9jY3VycywgRW1iZXIgd2lsbCBsb29rIGF0IHRoZSB0YXJnZXQg
b2YgdGhlIGV2ZW50IGFuZAorICAgIHN0YXJ0IHdhbGtpbmcgdXAgdGhlIERPTSBub2RlIHRyZWUs
IGZpbmRpbmcgY29ycmVzcG9uZGluZyB2aWV3cyBhbmQgaW52b2tpbmcKKyAgICB0aGVpciBgbW91
c2VEb3duYCBtZXRob2QgYXMgaXQgZ29lcy4KKyAgCisgICAgYEVtYmVyLkFwcGxpY2F0aW9uYCBo
YXMgYSBudW1iZXIgb2YgZGVmYXVsdCBldmVudHMgdGhhdCBpdCBsaXN0ZW5zIGZvciwgYXMKKyAg
ICB3ZWxsIGFzIGEgbWFwcGluZyBmcm9tIGxvd2VyY2FzZSBldmVudHMgdG8gY2FtZWwtY2FzZWQg
dmlldyBtZXRob2QgbmFtZXMuIEZvcgorICAgIGV4YW1wbGUsIHRoZSBga2V5cHJlc3NgIGV2ZW50
IGNhdXNlcyB0aGUgYGtleVByZXNzYCBtZXRob2Qgb24gdGhlIHZpZXcgdG8gYmUKKyAgICBjYWxs
ZWQsIHRoZSBgZGJsY2xpY2tgIGV2ZW50IGNhdXNlcyBgZG91YmxlQ2xpY2tgIHRvIGJlIGNhbGxl
ZCwgYW5kIHNvIG9uLgorICAKKyAgICBJZiB0aGVyZSBpcyBhIGJ1YmJsaW5nIGJyb3dzZXIgZXZl
bnQgdGhhdCBFbWJlciBkb2VzIG5vdCBsaXN0ZW4gZm9yIGJ5CisgICAgZGVmYXVsdCwgeW91IGNh
biBzcGVjaWZ5IGN1c3RvbSBldmVudHMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgdmlldyBtZXRo
b2QKKyAgICBuYW1lcyBieSBzZXR0aW5nIHRoZSBhcHBsaWNhdGlvbidzIGBjdXN0b21FdmVudHNg
IHByb3BlcnR5OgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgdmFyIEFwcCA9IEVtYmVyLkFw
cGxpY2F0aW9uLmNyZWF0ZSh7CisgICAgICBjdXN0b21FdmVudHM6IHsKKyAgICAgICAgLy8gYWRk
IHN1cHBvcnQgZm9yIHRoZSBwYXN0ZSBldmVudAorICAgICAgICBwYXN0ZTogJ3Bhc3RlJworICAg
ICAgfQorICAgIH0pOworICAgIGBgYAorICAKKyAgICBUbyBwcmV2ZW50IEVtYmVyIGZyb20gc2V0
dGluZyB1cCBhIGxpc3RlbmVyIGZvciBhIGRlZmF1bHQgZXZlbnQsCisgICAgc3BlY2lmeSB0aGUg
ZXZlbnQgbmFtZSB3aXRoIGEgYG51bGxgIHZhbHVlIGluIHRoZSBgY3VzdG9tRXZlbnRzYAorICAg
IHByb3BlcnR5OgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgdmFyIEFwcCA9IEVtYmVyLkFw
cGxpY2F0aW9uLmNyZWF0ZSh7CisgICAgICBjdXN0b21FdmVudHM6IHsKKyAgICAgICAgLy8gcHJl
dmVudCBsaXN0ZW5lcnMgZm9yIG1vdXNlZW50ZXIvbW91c2VsZWF2ZSBldmVudHMKKyAgICAgICAg
bW91c2VlbnRlcjogbnVsbCwKKyAgICAgICAgbW91c2VsZWF2ZTogbnVsbAorICAgICAgfQorICAg
IH0pOworICAgIGBgYAorICAKKyAgICBCeSBkZWZhdWx0LCB0aGUgYXBwbGljYXRpb24gc2V0cyB1
cCB0aGVzZSBldmVudCBsaXN0ZW5lcnMgb24gdGhlIGRvY3VtZW50CisgICAgYm9keS4gSG93ZXZl
ciwgaW4gY2FzZXMgd2hlcmUgeW91IGFyZSBlbWJlZGRpbmcgYW4gRW1iZXIgYXBwbGljYXRpb24g
aW5zaWRlCisgICAgYW4gZXhpc3RpbmcgcGFnZSwgeW91IG1heSB3YW50IGl0IHRvIHNldCB1cCB0
aGUgbGlzdGVuZXJzIG9uIGFuIGVsZW1lbnQKKyAgICBpbnNpZGUgdGhlIGJvZHkuCisgIAorICAg
IEZvciBleGFtcGxlLCBpZiBvbmx5IGV2ZW50cyBpbnNpZGUgYSBET00gZWxlbWVudCB3aXRoIHRo
ZSBJRCBvZiBgZW1iZXItYXBwYAorICAgIHNob3VsZCBiZSBkZWxlZ2F0ZWQsIHNldCB5b3VyIGFw
cGxpY2F0aW9uJ3MgYHJvb3RFbGVtZW50YCBwcm9wZXJ0eToKKyAgCisgICAgYGBgamF2YXNjcmlw
dAorICAgIHZhciBBcHAgPSBFbWJlci5BcHBsaWNhdGlvbi5jcmVhdGUoeworICAgICAgcm9vdEVs
ZW1lbnQ6ICcjZW1iZXItYXBwJworICAgIH0pOworICAgIGBgYAorICAKKyAgICBUaGUgYHJvb3RF
bGVtZW50YCBjYW4gYmUgZWl0aGVyIGEgRE9NIGVsZW1lbnQgb3IgYSBqUXVlcnktY29tcGF0aWJs
ZSBzZWxlY3RvcgorICAgIHN0cmluZy4gTm90ZSB0aGF0ICp2aWV3cyBhcHBlbmRlZCB0byB0aGUg
RE9NIG91dHNpZGUgdGhlIHJvb3QgZWxlbWVudCB3aWxsCisgICAgbm90IHJlY2VpdmUgZXZlbnRz
LiogSWYgeW91IHNwZWNpZnkgYSBjdXN0b20gcm9vdCBlbGVtZW50LCBtYWtlIHN1cmUgeW91IG9u
bHkKKyAgICBhcHBlbmQgdmlld3MgaW5zaWRlIGl0IQorICAKKyAgICBUbyBsZWFybiBtb3JlIGFi
b3V0IHRoZSBldmVudHMgRW1iZXIgY29tcG9uZW50cyB1c2UsIHNlZQorICAgIFtjb21wb25lbnRz
L2hhbmRsaW5nLWV2ZW50c10oaHR0cHM6Ly9ndWlkZXMuZW1iZXJqcy5jb20vdjIuNi4wL2NvbXBv
bmVudHMvaGFuZGxpbmctZXZlbnRzLyN0b2NfZXZlbnQtbmFtZXMpLgorICAKKyAgICAjIyMgSW5p
dGlhbGl6ZXJzCisgIAorICAgIExpYnJhcmllcyBvbiB0b3Agb2YgRW1iZXIgY2FuIGFkZCBpbml0
aWFsaXplcnMsIGxpa2Ugc286CisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAgICBFbWJlci5BcHBs
aWNhdGlvbi5pbml0aWFsaXplcih7CisgICAgICBuYW1lOiAnYXBpLWFkYXB0ZXInLAorICAKKyAg
ICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGFwcGxpY2F0aW9uKSB7CisgICAgICAgIGFwcGxpY2F0
aW9uLnJlZ2lzdGVyKCdhcGktYWRhcHRlcjptYWluJywgQXBpQWRhcHRlcik7CisgICAgICB9Cisg
ICAgfSk7CisgICAgYGBgCisgIAorICAgIEluaXRpYWxpemVycyBwcm92aWRlIGFuIG9wcG9ydHVu
aXR5IHRvIGFjY2VzcyB0aGUgaW50ZXJuYWwgcmVnaXN0cnksIHdoaWNoCisgICAgb3JnYW5pemVz
IHRoZSBkaWZmZXJlbnQgY29tcG9uZW50cyBvZiBhbiBFbWJlciBhcHBsaWNhdGlvbi4gQWRkaXRp
b25hbGx5CisgICAgdGhleSBwcm92aWRlIGEgY2hhbmNlIHRvIGFjY2VzcyB0aGUgaW5zdGFudGlh
dGVkIGFwcGxpY2F0aW9uLiBCZXlvbmQKKyAgICBiZWluZyB1c2VkIGZvciBsaWJyYXJpZXMsIGlu
aXRpYWxpemVycyBhcmUgYWxzbyBhIGdyZWF0IHdheSB0byBvcmdhbml6ZQorICAgIGRlcGVuZGVu
Y3kgaW5qZWN0aW9uIG9yIHNldHVwIGluIHlvdXIgb3duIGFwcGxpY2F0aW9uLgorICAKKyAgICAj
IyMgUm91dGluZworICAKKyAgICBJbiBhZGRpdGlvbiB0byBjcmVhdGluZyB5b3VyIGFwcGxpY2F0
aW9uJ3Mgcm91dGVyLCBgRW1iZXIuQXBwbGljYXRpb25gIGlzCisgICAgYWxzbyByZXNwb25zaWJs
ZSBmb3IgdGVsbGluZyB0aGUgcm91dGVyIHdoZW4gdG8gc3RhcnQgcm91dGluZy4gVHJhbnNpdGlv
bnMKKyAgICBiZXR3ZWVuIHJvdXRlcyBjYW4gYmUgbG9nZ2VkIHdpdGggdGhlIGBMT0dfVFJBTlNJ
VElPTlNgIGZsYWcsIGFuZCBtb3JlCisgICAgZGV0YWlsZWQgaW50cmEtdHJhbnNpdGlvbiBsb2dn
aW5nIGNhbiBiZSBsb2dnZWQgd2l0aAorICAgIHRoZSBgTE9HX1RSQU5TSVRJT05TX0lOVEVSTkFM
YCBmbGFnOgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgdmFyIEFwcCA9IEVtYmVyLkFwcGxp
Y2F0aW9uLmNyZWF0ZSh7CisgICAgICBMT0dfVFJBTlNJVElPTlM6IHRydWUsIC8vIGJhc2ljIGxv
Z2dpbmcgb2Ygc3VjY2Vzc2Z1bCB0cmFuc2l0aW9ucworICAgICAgTE9HX1RSQU5TSVRJT05TX0lO
VEVSTkFMOiB0cnVlIC8vIGRldGFpbGVkIGxvZ2dpbmcgb2YgYWxsIHJvdXRpbmcgc3RlcHMKKyAg
ICB9KTsKKyAgICBgYGAKKyAgCisgICAgQnkgZGVmYXVsdCwgdGhlIHJvdXRlciB3aWxsIGJlZ2lu
IHRyeWluZyB0byB0cmFuc2xhdGUgdGhlIGN1cnJlbnQgVVJMIGludG8KKyAgICBhcHBsaWNhdGlv
biBzdGF0ZSBvbmNlIHRoZSBicm93c2VyIGVtaXRzIHRoZSBgRE9NQ29udGVudFJlYWR5YCBldmVu
dC4gSWYgeW91CisgICAgbmVlZCB0byBkZWZlciByb3V0aW5nLCB5b3UgY2FuIGNhbGwgdGhlIGFw
cGxpY2F0aW9uJ3MgYGRlZmVyUmVhZGluZXNzKClgCisgICAgbWV0aG9kLiBPbmNlIHJvdXRpbmcg
Y2FuIGJlZ2luLCBjYWxsIHRoZSBgYWR2YW5jZVJlYWRpbmVzcygpYCBtZXRob2QuCisgIAorICAg
IElmIHRoZXJlIGlzIGFueSBzZXR1cCByZXF1aXJlZCBiZWZvcmUgcm91dGluZyBiZWdpbnMsIHlv
dSBjYW4gaW1wbGVtZW50IGEKKyAgICBgcmVhZHkoKWAgbWV0aG9kIG9uIHlvdXIgYXBwIHRoYXQg
d2lsbCBiZSBpbnZva2VkIGltbWVkaWF0ZWx5IGJlZm9yZSByb3V0aW5nCisgICAgYmVnaW5zLgor
ICAKKyAgICBAY2xhc3MgQXBwbGljYXRpb24KKyAgICBAbmFtZXNwYWNlIEVtYmVyCisgICAgQGV4
dGVuZHMgRW1iZXIuRW5naW5lCisgICAgQHVzZXMgUmVnaXN0cnlQcm94eU1peGluCisgICAgQHB1
YmxpYworICAqLworCisgIHZhciBBcHBsaWNhdGlvbiA9IF9lbWJlckFwcGxpY2F0aW9uU3lzdGVt
RW5naW5lLmRlZmF1bHQuZXh0ZW5kKHsKKyAgICBfc3VwcHJlc3NEZWZlcnJlZERlcHJlY2F0aW9u
OiB0cnVlLAorCisgICAgLyoqCisgICAgICBUaGUgcm9vdCBET00gZWxlbWVudCBvZiB0aGUgQXBw
bGljYXRpb24uIFRoaXMgY2FuIGJlIHNwZWNpZmllZCBhcyBhbgorICAgICAgZWxlbWVudCBvciBh
CisgICAgICBbalF1ZXJ5LWNvbXBhdGlibGUgc2VsZWN0b3Igc3RyaW5nXShodHRwOi8vYXBpLmpx
dWVyeS5jb20vY2F0ZWdvcnkvc2VsZWN0b3JzLykuCisgICAgICAgVGhpcyBpcyB0aGUgZWxlbWVu
dCB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBBcHBsaWNhdGlvbidzLAorICAgICAgYGV2ZW50
RGlzcGF0Y2hlcmAsIHdoaWNoIHNldHMgdXAgdGhlIGxpc3RlbmVycyBmb3IgZXZlbnQgZGVsZWdh
dGlvbi4gRXZlcnkKKyAgICAgIHZpZXcgaW4geW91ciBhcHBsaWNhdGlvbiBzaG91bGQgYmUgYSBj
aGlsZCBvZiB0aGUgZWxlbWVudCB5b3Ugc3BlY2lmeSBoZXJlLgorICAgICAgIEBwcm9wZXJ0eSBy
b290RWxlbWVudAorICAgICAgQHR5cGUgRE9NRWxlbWVudAorICAgICAgQGRlZmF1bHQgJ2JvZHkn
CisgICAgICBAcHVibGljCisgICAgKi8KKyAgICByb290RWxlbWVudDogJ2JvZHknLAorCisgICAg
LyoqCisgICAgICBUaGUgYEVtYmVyLkV2ZW50RGlzcGF0Y2hlcmAgcmVzcG9uc2libGUgZm9yIGRl
bGVnYXRpbmcgZXZlbnRzIHRvIHRoaXMKKyAgICAgIGFwcGxpY2F0aW9uJ3Mgdmlld3MuCisgICAg
ICAgVGhlIGV2ZW50IGRpc3BhdGNoZXIgaXMgY3JlYXRlZCBieSB0aGUgYXBwbGljYXRpb24gYXQg
aW5pdGlhbGl6YXRpb24gdGltZQorICAgICAgYW5kIHNldHMgdXAgZXZlbnQgbGlzdGVuZXJzIG9u
IHRoZSBET00gZWxlbWVudCBkZXNjcmliZWQgYnkgdGhlCisgICAgICBhcHBsaWNhdGlvbidzIGBy
b290RWxlbWVudGAgcHJvcGVydHkuCisgICAgICAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBg
RW1iZXIuRXZlbnREaXNwYXRjaGVyYCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICBAcHJv
cGVydHkgZXZlbnREaXNwYXRjaGVyCisgICAgICBAdHlwZSBFbWJlci5FdmVudERpc3BhdGNoZXIK
KyAgICAgIEBkZWZhdWx0IG51bGwKKyAgICAgIEBwdWJsaWMKKyAgICAqLworICAgIGV2ZW50RGlz
cGF0Y2hlcjogbnVsbCwKKworICAgIC8qKgorICAgICAgVGhlIERPTSBldmVudHMgZm9yIHdoaWNo
IHRoZSBldmVudCBkaXNwYXRjaGVyIHNob3VsZCBsaXN0ZW4uCisgICAgICAgQnkgZGVmYXVsdCwg
dGhlIGFwcGxpY2F0aW9uJ3MgYEVtYmVyLkV2ZW50RGlzcGF0Y2hlcmAgbGlzdGVucworICAgICAg
Zm9yIGEgc2V0IG9mIHN0YW5kYXJkIERPTSBldmVudHMsIHN1Y2ggYXMgYG1vdXNlZG93bmAgYW5k
CisgICAgICBga2V5dXBgLCBhbmQgZGVsZWdhdGVzIHRoZW0gdG8geW91ciBhcHBsaWNhdGlvbidz
IGBFbWJlci5WaWV3YAorICAgICAgaW5zdGFuY2VzLgorICAgICAgIElmIHlvdSB3b3VsZCBsaWtl
IGFkZGl0aW9uYWwgYnViYmxpbmcgZXZlbnRzIHRvIGJlIGRlbGVnYXRlZCB0byB5b3VyCisgICAg
ICB2aWV3cywgc2V0IHlvdXIgYEVtYmVyLkFwcGxpY2F0aW9uYCdzIGBjdXN0b21FdmVudHNgIHBy
b3BlcnR5CisgICAgICB0byBhIGhhc2ggY29udGFpbmluZyB0aGUgRE9NIGV2ZW50IG5hbWUgYXMg
dGhlIGtleSBhbmQgdGhlCisgICAgICBjb3JyZXNwb25kaW5nIHZpZXcgbWV0aG9kIG5hbWUgYXMg
dGhlIHZhbHVlLiBTZXR0aW5nIGFuIGV2ZW50IHRvCisgICAgICBhIHZhbHVlIG9mIGBudWxsYCB3
aWxsIHByZXZlbnQgYSBkZWZhdWx0IGV2ZW50IGxpc3RlbmVyIGZyb20gYmVpbmcKKyAgICAgIGFk
ZGVkIGZvciB0aGF0IGV2ZW50LgorICAgICAgIFRvIGFkZCBuZXcgZXZlbnRzIHRvIGJlIGxpc3Rl
bmVkIHRvOgorICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgIHZhciBBcHAgPSBFbWJlci5BcHBs
aWNhdGlvbi5jcmVhdGUoeworICAgICAgICBjdXN0b21FdmVudHM6IHsKKyAgICAgICAgICAvLyBh
ZGQgc3VwcG9ydCBmb3IgdGhlIHBhc3RlIGV2ZW50CisgICAgICAgICAgcGFzdGU6ICdwYXN0ZScK
KyAgICAgICAgfQorICAgICAgfSk7CisgICAgICBgYGAKKyAgICAgICBUbyBwcmV2ZW50IGRlZmF1
bHQgZXZlbnRzIGZyb20gYmVpbmcgbGlzdGVuZWQgdG86CisgICAgICAgYGBgamF2YXNjcmlwdAor
ICAgICAgdmFyIEFwcCA9IEVtYmVyLkFwcGxpY2F0aW9uLmNyZWF0ZSh7CisgICAgICAgIGN1c3Rv
bUV2ZW50czogeworICAgICAgICAgIC8vIHJlbW92ZSBzdXBwb3J0IGZvciBtb3VzZWVudGVyIC8g
bW91c2VsZWF2ZSBldmVudHMKKyAgICAgICAgICBtb3VzZWVudGVyOiBudWxsLAorICAgICAgICAg
IG1vdXNlbGVhdmU6IG51bGwKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgICBgYGAKKyAgICAg
IEBwcm9wZXJ0eSBjdXN0b21FdmVudHMKKyAgICAgIEB0eXBlIE9iamVjdAorICAgICAgQGRlZmF1
bHQgbnVsbAorICAgICAgQHB1YmxpYworICAgICovCisgICAgY3VzdG9tRXZlbnRzOiBudWxsLAor
CisgICAgLyoqCisgICAgICBXaGV0aGVyIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgYXV0b21hdGlj
YWxseSBzdGFydCByb3V0aW5nIGFuZCByZW5kZXIKKyAgICAgIHRlbXBsYXRlcyB0byB0aGUgYHJv
b3RFbGVtZW50YCBvbiBET00gcmVhZHkuIFdoaWxlIGRlZmF1bHQgYnkgdHJ1ZSwKKyAgICAgIG90
aGVyIGVudmlyb25tZW50cyBzdWNoIGFzIEZhc3RCb290IG9yIGEgdGVzdGluZyBoYXJuZXNzIGNh
biBzZXQgdGhpcworICAgICAgcHJvcGVydHkgdG8gYGZhbHNlYCBhbmQgY29udHJvbCB0aGUgcHJl
Y2lzZSB0aW1pbmcgYW5kIGJlaGF2aW9yIG9mIHRoZSBib290CisgICAgICBwcm9jZXNzLgorICAg
ICAgIEBwcm9wZXJ0eSBhdXRvYm9vdAorICAgICAgQHR5cGUgQm9vbGVhbgorICAgICAgQGRlZmF1
bHQgdHJ1ZQorICAgICAgQHByaXZhdGUKKyAgICAqLworICAgIGF1dG9ib290OiB0cnVlLAorCisg
ICAgLyoqCisgICAgICBXaGV0aGVyIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgYmUgY29uZmlndXJl
ZCBmb3IgdGhlIGxlZ2FjeSAiZ2xvYmFscyBtb2RlIi4KKyAgICAgIFVuZGVyIHRoaXMgbW9kZSwg
dGhlIEFwcGxpY2F0aW9uIG9iamVjdCBzZXJ2ZXMgYXMgYSBnbG9iYWwgbmFtZXNwYWNlIGZvciBh
bGwKKyAgICAgIGNsYXNzZXMuCisgICAgICAgYGBgamF2YXNjcmlwdAorICAgICAgdmFyIEFwcCA9
IEVtYmVyLkFwcGxpY2F0aW9uLmNyZWF0ZSh7CisgICAgICAgIC4uLgorICAgICAgfSk7CisgICAg
ICAgQXBwLlJvdXRlci5yZW9wZW4oeworICAgICAgICBsb2NhdGlvbjogJ25vbmUnCisgICAgICB9
KTsKKyAgICAgICBBcHAuUm91dGVyLm1hcCh7CisgICAgICAgIC4uLgorICAgICAgfSk7CisgICAg
ICAgQXBwLk15Q29tcG9uZW50ID0gRW1iZXIuQ29tcG9uZW50LmV4dGVuZCh7CisgICAgICAgIC4u
LgorICAgICAgfSk7CisgICAgICBgYGAKKyAgICAgICBUaGlzIGZsYWcgYWxzbyBleHBvc2VzIG90
aGVyIGludGVybmFsIEFQSXMgdGhhdCBhc3N1bWVzIHRoZSBleGlzdGVuY2Ugb2YKKyAgICAgIGEg
c3BlY2lhbCAiZGVmYXVsdCBpbnN0YW5jZSIsIGxpa2UgYEFwcC5fX2NvbnRhaW5lcl9fLmxvb2t1
cCguLi4pYC4KKyAgICAgICBUaGlzIG9wdGlvbiBpcyBjdXJyZW50bHkgbm90IGNvbmZpZ3VyYWJs
ZSwgaXRzIHZhbHVlIGlzIGRlcml2ZWQgZnJvbQorICAgICAgdGhlIGBhdXRvYm9vdGAgZmxhZyDi
gJMgZGlzYWJsaW5nIGBhdXRvYm9vdGAgYWxzbyBpbXBsaWVzIG9wdGluZy1vdXQgb2YKKyAgICAg
IGdsb2JhbHMgbW9kZSBzdXBwb3J0LCBhbHRob3VnaCB0aGV5IGFyZSB1bHRpbWF0ZWx5IG9ydGhv
Z29uYWwgY29uY2VybnMuCisgICAgICAgU29tZSBvZiB0aGUgZ2xvYmFsIG1vZGVzIGZlYXR1cmVz
IGFyZSBhbHJlYWR5IGRlcHJlY2F0ZWQgaW4gMS54LiBUaGUKKyAgICAgIGV4aXN0ZW5jZSBvZiB0
aGlzIGZsYWcgaXMgdG8gdW50YW5nbGUgdGhlIGdsb2JhbHMgbW9kZSBjb2RlIHBhdGhzIGZyb20K
KyAgICAgIHRoZSBhdXRvYm9vdCBjb2RlIHBhdGhzLCBzbyB0aGF0IHRoZXNlIGxlZ2FjeSBmZWF0
dXJlcyBjYW4gYmUgcmV2aWV3ZWQKKyAgICAgIGZvciBkZXByZWNhdGlvbi9yZW1vdmFsIHNlcGFy
YXRlbHkuCisgICAgICAgRm9yY2luZyB0aGUgKGF1dG9ib290PXRydWUsIF9nbG9iYWxzTW9kZT1m
YWxzZSkgaGVyZSBhbmQgcnVubmluZyB0aGUgdGVzdHMKKyAgICAgIHdvdWxkIHJldmVhbCBhbGwg
dGhlIHBsYWNlcyB3aGVyZSB3ZSBhcmUgc3RpbGwgcmVseWluZyBvbiB0aGVzZSBsZWdhY3kKKyAg
ICAgIGJlaGF2aW9yIGludGVybmFsbHkgKG1vc3RseSBqdXN0IHRlc3RzKS4KKyAgICAgICBAcHJv
cGVydHkgX2dsb2JhbHNNb2RlCisgICAgICBAdHlwZSBCb29sZWFuCisgICAgICBAZGVmYXVsdCB0
cnVlCisgICAgICBAcHJpdmF0ZQorICAgICovCisgICAgX2dsb2JhbHNNb2RlOiB0cnVlLAorCisg
ICAgaW5pdDogZnVuY3Rpb24gKG9wdGlvbnMpIHsKKyAgICAgIHRoaXMuX3N1cGVyLmFwcGx5KHRo
aXMsIGFyZ3VtZW50cyk7CisKKyAgICAgIGlmICghdGhpcy4kKSB7CisgICAgICAgIHRoaXMuJCA9
IF9lbWJlclZpZXdzU3lzdGVtSnF1ZXJ5LmRlZmF1bHQ7CisgICAgICB9CisKKyAgICAgIHJlZ2lz
dGVyTGlicmFyaWVzKCk7CisgICAgICBsb2dMaWJyYXJ5VmVyc2lvbnMoKTsKKworICAgICAgLy8g
U3RhcnQgb2ZmIHRoZSBudW1iZXIgb2YgZGVmZXJyYWxzIGF0IDEuIFRoaXMgd2lsbCBiZSBkZWNy
ZW1lbnRlZCBieQorICAgICAgLy8gdGhlIEFwcGxpY2F0aW9uJ3Mgb3duIGBib290YCBtZXRob2Qu
CisgICAgICB0aGlzLl9yZWFkaW5lc3NEZWZlcnJhbHMgPSAxOworICAgICAgdGhpcy5fYm9vdGVk
ID0gZmFsc2U7CisKKyAgICAgIHRoaXMuYXV0b2Jvb3QgPSB0aGlzLl9nbG9iYWxzTW9kZSA9ICEh
dGhpcy5hdXRvYm9vdDsKKworICAgICAgaWYgKHRoaXMuX2dsb2JhbHNNb2RlKSB7CisgICAgICAg
IHRoaXMuX3ByZXBhcmVGb3JHbG9iYWxzTW9kZSgpOworICAgICAgfQorCisgICAgICBpZiAodGhp
cy5hdXRvYm9vdCkgeworICAgICAgICB0aGlzLndhaXRGb3JET01SZWFkeSgpOworICAgICAgfQor
ICAgIH0sCisKKyAgICAvKioKKyAgICAgIENyZWF0ZSBhbiBBcHBsaWNhdGlvbkluc3RhbmNlIGZv
ciB0aGlzIGFwcGxpY2F0aW9uLgorICAgICAgIEBwcml2YXRlCisgICAgICBAbWV0aG9kIGJ1aWxk
SW5zdGFuY2UKKyAgICAgIEByZXR1cm4ge0VtYmVyLkFwcGxpY2F0aW9uSW5zdGFuY2V9IHRoZSBh
cHBsaWNhdGlvbiBpbnN0YW5jZQorICAgICovCisgICAgYnVpbGRJbnN0YW5jZTogZnVuY3Rpb24g
KCkgeworICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDAgfHwgYXJndW1l
bnRzWzBdID09PSB1bmRlZmluZWQgPyB7fSA6IGFyZ3VtZW50c1swXTsKKworICAgICAgb3B0aW9u
cy5iYXNlID0gdGhpczsKKyAgICAgIG9wdGlvbnMuYXBwbGljYXRpb24gPSB0aGlzOworICAgICAg
cmV0dXJuIF9lbWJlckFwcGxpY2F0aW9uU3lzdGVtQXBwbGljYXRpb25JbnN0YW5jZS5kZWZhdWx0
LmNyZWF0ZShvcHRpb25zKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICBFbmFibGUgdGhlIGxl
Z2FjeSBnbG9iYWxzIG1vZGUgYnkgYWxsb3dpbmcgdGhpcyBhcHBsaWNhdGlvbiB0byBhY3QKKyAg
ICAgIGFzIGEgZ2xvYmFsIG5hbWVzcGFjZS4gU2VlIHRoZSBkb2NzIG9uIHRoZSBgX2dsb2JhbHNN
b2RlYCBwcm9wZXJ0eQorICAgICAgZm9yIGRldGFpbHMuCisgICAgICAgTW9zdCBvZiB0aGVzZSBm
ZWF0dXJlcyBhcmUgYWxyZWFkeSBkZXByZWNhdGVkIGluIDEueCwgc28gd2UgY2FuCisgICAgICBz
dG9wIHVzaW5nIHRoZW0gaW50ZXJuYWxseSBhbmQgdHJ5IHRvIHJlbW92ZSB0aGVtLgorICAgICAg
IEBwcml2YXRlCisgICAgICBAbWV0aG9kIF9wcmVwYXJlRm9yR2xvYmFsc01vZGUKKyAgICAqLwor
ICAgIF9wcmVwYXJlRm9yR2xvYmFsc01vZGU6IGZ1bmN0aW9uICgpIHsKKyAgICAgIC8vIENyZWF0
ZSBzdWJjbGFzcyBvZiBFbWJlci5Sb3V0ZXIgZm9yIHRoaXMgQXBwbGljYXRpb24gaW5zdGFuY2Uu
CisgICAgICAvLyBUaGlzIGlzIHRvIGVuc3VyZSB0aGF0IHNvbWVvbmUgcmVvcGVuaW5nIGBBcHAu
Um91dGVyYCBkb2VzIG5vdAorICAgICAgLy8gdGFtcGVyIHdpdGggdGhlIGRlZmF1bHQgYEVtYmVy
LlJvdXRlcmAuCisgICAgICB0aGlzLlJvdXRlciA9ICh0aGlzLlJvdXRlciB8fCBfZW1iZXJSb3V0
aW5nU3lzdGVtUm91dGVyLmRlZmF1bHQpLmV4dGVuZCgpOworCisgICAgICB0aGlzLl9idWlsZERl
cHJlY2F0ZWRJbnN0YW5jZSgpOworICAgIH0sCisKKyAgICAvKgorICAgICAgQnVpbGQgdGhlIGRl
cHJlY2F0ZWQgaW5zdGFuY2UgZm9yIGxlZ2FjeSBnbG9iYWxzIG1vZGUgc3VwcG9ydC4KKyAgICAg
IENhbGxlZCB3aGVuIGNyZWF0aW5nIGFuZCByZXNldHRpbmcgdGhlIGFwcGxpY2F0aW9uLgorICAg
ICAgIFRoaXMgaXMgb3J0aG9nb25hbCB0byBhdXRvYm9vdDogdGhlIGRlcHJlY2F0ZWQgaW5zdGFu
Y2UgbmVlZHMgdG8KKyAgICAgIGJlIGNyZWF0ZWQgYXQgQXBwbGljYXRpb24gY29uc3RydWN0aW9u
IChub3QgYm9vdCkgdGltZSB0byBleHBvc2UKKyAgICAgIEFwcC5fX2NvbnRhaW5lcl9fIGFuZCB0
aGUgZ2xvYmFsIEVtYmVyLlZpZXcudmlld3MgcmVnaXN0cnkuIElmCisgICAgICBhdXRvYm9vdCBz
ZWVzIHRoYXQgdGhpcyBpbnN0YW5jZSBleGlzdHMsIGl0IHdpbGwgY29udGludWUgYm9vdGluZwor
ICAgICAgaXQgdG8gYXZvaWQgZG9pbmcgdW5uY2Vzc2FyeSB3b3JrIChhcyBvcHBvc2VkIHRvIGJ1
aWxkaW5nIGEgbmV3CisgICAgICBpbnN0YW5jZSBhdCBib290IHRpbWUpLCBidXQgdGhleSBhcmUg
b3RoZXJ3aXNlIHVucmVsYXRlZC4KKyAgICAgICBAcHJpdmF0ZQorICAgICAgQG1ldGhvZCBfYnVp
bGREZXByZWNhdGVkSW5zdGFuY2UKKyAgICAqLworICAgIF9idWlsZERlcHJlY2F0ZWRJbnN0YW5j
ZTogZnVuY3Rpb24gKCkgeworICAgICAgLy8gQnVpbGQgYSBkZWZhdWx0IGluc3RhbmNlCisgICAg
ICB2YXIgaW5zdGFuY2UgPSB0aGlzLmJ1aWxkSW5zdGFuY2UoKTsKKworICAgICAgLy8gTGVnYWN5
IHN1cHBvcnQgZm9yIEFwcC5fX2NvbnRhaW5lcl9fIGFuZCBvdGhlciBnbG9iYWwgbWV0aG9kcwor
ICAgICAgLy8gb24gQXBwIHRoYXQgcmVseSBvbiBhIHNpbmdsZSwgZGVmYXVsdCBpbnN0YW5jZS4K
KyAgICAgIHRoaXMuX19kZXByZWNhdGVkSW5zdGFuY2VfXyA9IGluc3RhbmNlOworICAgICAgdGhp
cy5fX2NvbnRhaW5lcl9fID0gaW5zdGFuY2UuX19jb250YWluZXJfXzsKKworICAgICAgLy8gRm9y
IHRoZSBkZWZhdWx0IGluc3RhbmNlIG9ubHksIHNldCB0aGUgdmlldyByZWdpc3RyeSB0byB0aGUg
Z2xvYmFsCisgICAgICAvLyBFbWJlci5WaWV3LnZpZXdzIGhhc2ggZm9yIGJhY2t3YXJkcy1jb21w
YXRpYmlsaXR5LgorICAgICAgX2VtYmVyVmlld3NWaWV3c1ZpZXcuZGVmYXVsdC52aWV3cyA9IGlu
c3RhbmNlLmxvb2t1cCgnLXZpZXctcmVnaXN0cnk6bWFpbicpOworICAgIH0sCisKKyAgICAvKioK
KyAgICAgIEF1dG9tYXRpY2FsbHkga2ljay1vZmYgdGhlIGJvb3QgcHJvY2VzcyBmb3IgdGhlIGFw
cGxpY2F0aW9uIG9uY2UgdGhlCisgICAgICBET00gaGFzIGJlY29tZSByZWFkeS4KKyAgICAgICBU
aGUgaW5pdGlhbGl6YXRpb24gaXRzZWxmIGlzIHNjaGVkdWxlZCBvbiB0aGUgYWN0aW9ucyBxdWV1
ZSB3aGljaAorICAgICAgZW5zdXJlcyB0aGF0IGNvZGUtbG9hZGluZyBmaW5pc2hlcyBiZWZvcmUg
Ym9vdGluZy4KKyAgICAgICBJZiB5b3UgYXJlIGFzeW5jaHJvbm91c2x5IGxvYWRpbmcgY29kZSwg
eW91IHNob3VsZCBjYWxsIGBkZWZlclJlYWRpbmVzcygpYAorICAgICAgdG8gZGVmZXIgYm9vdGlu
ZywgYW5kIHRoZW4gY2FsbCBgYWR2YW5jZVJlYWRpbmVzcygpYCBvbmNlIGFsbCBvZiB5b3VyIGNv
ZGUKKyAgICAgIGhhcyBmaW5pc2hlZCBsb2FkaW5nLgorICAgICAgIEBwcml2YXRlCisgICAgICBA
bWV0aG9kIHdhaXRGb3JET01SZWFkeQorICAgICovCisgICAgd2FpdEZvckRPTVJlYWR5OiBmdW5j
dGlvbiAoKSB7CisgICAgICBpZiAoIXRoaXMuJCB8fCB0aGlzLiQuaXNSZWFkeSkgeworICAgICAg
ICBfZW1iZXJNZXRhbFJ1bl9sb29wLmRlZmF1bHQuc2NoZWR1bGUoJ2FjdGlvbnMnLCB0aGlzLCAn
ZG9tUmVhZHknKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHRoaXMuJCgpLnJlYWR5KF9lbWJl
ck1ldGFsUnVuX2xvb3AuZGVmYXVsdC5iaW5kKHRoaXMsICdkb21SZWFkeScpKTsKKyAgICAgIH0K
KyAgICB9LAorCisgICAgLyoqCisgICAgICBUaGlzIGlzIHRoZSBhdXRvYm9vdCBmbG93OgorICAg
ICAgIDEuIEJvb3QgdGhlIGFwcCBieSBjYWxsaW5nIGB0aGlzLmJvb3QoKWAKKyAgICAgIDIuIENy
ZWF0ZSBhbiBpbnN0YW5jZSAob3IgdXNlIHRoZSBgX19kZXByZWNhdGVkSW5zdGFuY2VfX2AgaW4g
Z2xvYmFscyBtb2RlKQorICAgICAgMy4gQm9vdCB0aGUgaW5zdGFuY2UgYnkgY2FsbGluZyBgaW5z
dGFuY2UuYm9vdCgpYAorICAgICAgNC4gSW52b2tlIHRoZSBgQXBwLnJlYWR5KClgIGNhbGxiYWNr
CisgICAgICA1LiBLaWNrLW9mZiByb3V0aW5nIG9uIHRoZSBpbnN0YW5jZQorICAgICAgIElkZWFs
bHksIHRoaXMgaXMgYWxsIHdlIHdvdWxkIG5lZWQgdG8gZG86CisgICAgICAgYGBgamF2YXNjcmlw
dAorICAgICAgX2F1dG9Cb290KCkgeworICAgICAgICB0aGlzLmJvb3QoKS50aGVuKCgpID0+IHsK
KyAgICAgICAgICBsZXQgaW5zdGFuY2UgPSAodGhpcy5fZ2xvYmFsc01vZGUpID8gdGhpcy5fX2Rl
cHJlY2F0ZWRJbnN0YW5jZV9fIDogdGhpcy5idWlsZEluc3RhbmNlKCk7CisgICAgICAgICAgcmV0
dXJuIGluc3RhbmNlLmJvb3QoKTsKKyAgICAgICAgfSkudGhlbigoaW5zdGFuY2UpID0+IHsKKyAg
ICAgICAgICBBcHAucmVhZHkoKTsKKyAgICAgICAgICBpbnN0YW5jZS5zdGFydFJvdXRpbmcoKTsK
KyAgICAgICAgfSk7CisgICAgICB9CisgICAgICBgYGAKKyAgICAgICBVbmZvcnR1bmF0ZWx5LCB3
ZSBjYW5ub3QgYWN0dWFsbHkgd3JpdGUgdGhpcyBiZWNhdXNlIHdlIG5lZWQgdG8gcGFydGljaXBh
dGUKKyAgICAgIGluIHRoZSAic3luY2hyb25vdXMiIGJvb3QgcHJvY2Vzcy4gV2hpbGUgdGhlIGNv
ZGUgYWJvdmUgd291bGQgd29yayBmaW5lIG9uCisgICAgICB0aGUgaW5pdGlhbCBib290IChpLmUu
IERPTSByZWFkeSksIHdoZW4gYEFwcC5yZXNldCgpYCBpcyBjYWxsZWQsIHdlIG5lZWQgdG8KKyAg
ICAgIGJvb3QgYSBuZXcgaW5zdGFuY2Ugc3luY2hyb25vdXNseSAoc2VlIHRoZSBkb2N1bWVudGF0
aW9uIG9uIGBfYm9vdFN5bmMoKWAKKyAgICAgIGZvciBkZXRhaWxzKS4KKyAgICAgICBCZWNhdXNl
IG9mIHRoaXMgcmVzdHJpY3Rpb24sIHRoZSBhY3R1YWwgbG9naWMgb2YgdGhpcyBtZXRob2QgaXMg
bG9jYXRlZAorICAgICAgaW5zaWRlIGBkaWRCZWNvbWVSZWFkeSgpYC4KKyAgICAgICBAcHJpdmF0
ZQorICAgICAgQG1ldGhvZCBkb21SZWFkeQorICAgICovCisgICAgZG9tUmVhZHk6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSB7CisgICAgICAgIHJldHVybjsKKyAg
ICAgIH0KKworICAgICAgdGhpcy5fYm9vdFN5bmMoKTsKKworICAgICAgLy8gQ29udGludWVzIHRv
IGBkaWRCZWNvbWVSZWFkeWAKKyAgICB9LAorCisgICAgLyoqCisgICAgICBVc2UgdGhpcyB0byBk
ZWZlciByZWFkaW5lc3MgdW50aWwgc29tZSBjb25kaXRpb24gaXMgdHJ1ZS4KKyAgICAgICBFeGFt
cGxlOgorICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgIHZhciBBcHAgPSBFbWJlci5BcHBsaWNh
dGlvbi5jcmVhdGUoKTsKKyAgICAgICBBcHAuZGVmZXJSZWFkaW5lc3MoKTsKKyAgICAgICAvLyBF
bWJlci4kIGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBqUXVlcnkgb2JqZWN0L2Z1bmN0aW9uCisgICAg
ICBFbWJlci4kLmdldEpTT04oJy9hdXRoLXRva2VuJywgZnVuY3Rpb24odG9rZW4pIHsKKyAgICAg
ICAgQXBwLnRva2VuID0gdG9rZW47CisgICAgICAgIEFwcC5hZHZhbmNlUmVhZGluZXNzKCk7Cisg
ICAgICB9KTsKKyAgICAgIGBgYAorICAgICAgIFRoaXMgYWxsb3dzIHlvdSB0byBwZXJmb3JtIGFz
eW5jaHJvbm91cyBzZXR1cCBsb2dpYyBhbmQgZGVmZXIKKyAgICAgIGJvb3RpbmcgeW91ciBhcHBs
aWNhdGlvbiB1bnRpbCB0aGUgc2V0dXAgaGFzIGZpbmlzaGVkLgorICAgICAgIEhvd2V2ZXIsIGlm
IHRoZSBzZXR1cCByZXF1aXJlcyBhIGxvYWRpbmcgVUksIGl0IG1pZ2h0IGJlIGJldHRlcgorICAg
ICAgdG8gdXNlIHRoZSByb3V0ZXIgZm9yIHRoaXMgcHVycG9zZS4KKyAgICAgICBAbWV0aG9kIGRl
ZmVyUmVhZGluZXNzCisgICAgICBAcHVibGljCisgICAgKi8KKyAgICBkZWZlclJlYWRpbmVzczog
ZnVuY3Rpb24gKCkgeworICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1lvdSBtdXN0IGNh
bGwgZGVmZXJSZWFkaW5lc3Mgb24gYW4gaW5zdGFuY2Ugb2YgRW1iZXIuQXBwbGljYXRpb24nLCB0
aGlzIGluc3RhbmNlb2YgQXBwbGljYXRpb24pOworICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3Nl
cnQoJ1lvdSBjYW5ub3QgZGVmZXIgcmVhZGluZXNzIHNpbmNlIHRoZSBgcmVhZHkoKWAgaG9vayBo
YXMgYWxyZWFkeSBiZWVuIGNhbGxlZC4nLCB0aGlzLl9yZWFkaW5lc3NEZWZlcnJhbHMgPiAwKTsK
KyAgICAgIHRoaXMuX3JlYWRpbmVzc0RlZmVycmFscysrOworICAgIH0sCisKKyAgICAvKioKKyAg
ICAgIENhbGwgYGFkdmFuY2VSZWFkaW5lc3NgIGFmdGVyIGFueSBhc3luY2hyb25vdXMgc2V0dXAg
bG9naWMgaGFzIGNvbXBsZXRlZC4KKyAgICAgIEVhY2ggY2FsbCB0byBgZGVmZXJSZWFkaW5lc3Ng
IG11c3QgYmUgbWF0Y2hlZCBieSBhIGNhbGwgdG8gYGFkdmFuY2VSZWFkaW5lc3NgCisgICAgICBv
ciB0aGUgYXBwbGljYXRpb24gd2lsbCBuZXZlciBiZWNvbWUgcmVhZHkgYW5kIHJvdXRpbmcgd2ls
bCBub3QgYmVnaW4uCisgICAgICAgQG1ldGhvZCBhZHZhbmNlUmVhZGluZXNzCisgICAgICBAc2Vl
IHtFbWJlci5BcHBsaWNhdGlvbiNkZWZlclJlYWRpbmVzc30KKyAgICAgIEBwdWJsaWMKKyAgICAq
LworICAgIGFkdmFuY2VSZWFkaW5lc3M6IGZ1bmN0aW9uICgpIHsKKyAgICAgIF9lbWJlck1ldGFs
RGVidWcuYXNzZXJ0KCdZb3UgbXVzdCBjYWxsIGFkdmFuY2VSZWFkaW5lc3Mgb24gYW4gaW5zdGFu
Y2Ugb2YgRW1iZXIuQXBwbGljYXRpb24nLCB0aGlzIGluc3RhbmNlb2YgQXBwbGljYXRpb24pOwor
ICAgICAgdGhpcy5fcmVhZGluZXNzRGVmZXJyYWxzLS07CisKKyAgICAgIGlmICh0aGlzLl9yZWFk
aW5lc3NEZWZlcnJhbHMgPT09IDApIHsKKyAgICAgICAgX2VtYmVyTWV0YWxSdW5fbG9vcC5kZWZh
dWx0Lm9uY2UodGhpcywgdGhpcy5kaWRCZWNvbWVSZWFkeSk7CisgICAgICB9CisgICAgfSwKKwor
ICAgIC8qKgorICAgICAgSW5pdGlhbGl6ZSB0aGUgYXBwbGljYXRpb24gYW5kIHJldHVybiBhIHBy
b21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBgRW1iZXIuQXBwbGljYXRpb25gCisgICAgICBv
YmplY3Qgd2hlbiB0aGUgYm9vdCBwcm9jZXNzIGlzIGNvbXBsZXRlLgorICAgICAgIFJ1biBhbnkg
YXBwbGljYXRpb24gaW5pdGlhbGl6ZXJzIGFuZCBydW4gdGhlIGFwcGxpY2F0aW9uIGxvYWQgaG9v
ay4gVGhlc2UgaG9va3MgbWF5CisgICAgICBjaG9vc2UgdG8gZGVmZXIgcmVhZGluZXNzLiBGb3Ig
ZXhhbXBsZSwgYW4gYXV0aGVudGljYXRpb24gaG9vayBtaWdodCB3YW50IHRvIGRlZmVyCisgICAg
ICByZWFkaW5lc3MgdW50aWwgdGhlIGF1dGggdG9rZW4gaGFzIGJlZW4gcmV0cmlldmVkLgorICAg
ICAgIEJ5IGRlZmF1bHQsIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IG9uICJE
T00gcmVhZHkiOyBob3dldmVyLCBpZiBhdXRvYm9vdAorICAgICAgaXMgZGlzYWJsZWQsIHRoaXMg
aXMgYXV0b21hdGljYWxseSBjYWxsZWQgd2hlbiB0aGUgZmlyc3QgYXBwbGljYXRpb24gaW5zdGFu
Y2UgaXMKKyAgICAgIGNyZWF0ZWQgdmlhIGB2aXNpdGAuCisgICAgICAgQHByaXZhdGUKKyAgICAg
IEBtZXRob2QgYm9vdAorICAgICAgQHJldHVybiB7UHJvbWlzZTxFbWJlci5BcHBsaWNhdGlvbixF
cnJvcj59CisgICAgKi8KKyAgICBib290OiBmdW5jdGlvbiAoKSB7CisgICAgICBpZiAodGhpcy5f
Ym9vdFByb21pc2UpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2Jvb3RQcm9taXNlOworICAgICAg
fQorCisgICAgICB0cnkgeworICAgICAgICB0aGlzLl9ib290U3luYygpOworICAgICAgfSBjYXRj
aCAoXykgeworICAgICAgICAvLyBJZ25vcmUgdGggZXJyb3I6IGluIHRoZSBhc3luY2hyb25vdXMg
Ym9vdCBwYXRoLCB0aGUgZXJyb3IgaXMgYWxyZWFkeSByZWZsZWN0ZWQKKyAgICAgICAgLy8gaW4g
dGhlIHByb21pc2UgcmVqZWN0aW9uCisgICAgICB9CisKKyAgICAgIHJldHVybiB0aGlzLl9ib290
UHJvbWlzZTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICBVbmZvcnR1bmF0ZWx5LCBhIGxvdCBv
ZiBleGlzdGluZyBjb2RlIGFzc3VtZXMgdGhlIGJvb3RpbmcgcHJvY2VzcyBpcworICAgICAgInN5
bmNocm9ub3VzIi4gU3BlY2lmaWNhbGx5LCBhIGxvdCBvZiB0ZXN0cyBhc3N1bWVzIHRoZSBsYXN0
IGNhbGwgdG8KKyAgICAgIGBhcHAuYWR2YW5jZVJlYWRpbmVzcygpYCBvciBgYXBwLnJlc2V0KClg
IHdpbGwgcmVzdWx0IGluIHRoZSBhcHAgYmVpbmcKKyAgICAgIGZ1bGx5LWJvb3RlZCB3aGVuIHRo
ZSBjdXJyZW50IHJ1bmxvb3AgY29tcGxldGVzLgorICAgICAgIFdlIHdvdWxkIGxpa2UgbmV3IGNv
ZGUgKGxpa2UgdGhlIGB2aXNpdGAgQVBJKSB0byBzdG9wIG1ha2luZyB0aGlzIGFzc3VtcHRpb24s
CisgICAgICBzbyB3ZSBjcmVhdGVkIHRoZSBhc3luY2hyb25vdXMgdmVyc2lvbiBhYm92ZSB0aGF0
IHJldHVybnMgYSBwcm9taXNlLiBCdXQgdW50aWwKKyAgICAgIHdlIGhhdmUgbWlncmF0ZWQgYWxs
IHRoZSBjb2RlLCB3ZSB3b3VsZCBoYXZlIHRvIGV4cG9zZSB0aGlzIG1ldGhvZCBmb3IgdXNlCisg
ICAgICAqaW50ZXJuYWxseSogaW4gcGxhY2VzIHdoZXJlIHdlIG5lZWQgdG8gYm9vdCBhbiBhcHAg
InN5bmNocm9ub3VzbHkiLgorICAgICAgIEBwcml2YXRlCisgICAgKi8KKyAgICBfYm9vdFN5bmM6
IGZ1bmN0aW9uICgpIHsKKyAgICAgIGlmICh0aGlzLl9ib290ZWQpIHsKKyAgICAgICAgcmV0dXJu
OworICAgICAgfQorCisgICAgICBpZiAoX2VtYmVyTWV0YWwuZGVmYXVsdC5FTlYuX0VOQUJMRV9M
RUdBQ1lfVklFV19TVVBQT1JUICYmICF3YXJuZWRBYm91dExlZ2FjeVZpZXdBZGRvbikgeworICAg
ICAgICBfZW1iZXJNZXRhbERlYnVnLmRlcHJlY2F0ZSgnU3VwcG9ydCBmb3IgdGhlIGBlbWJlci1s
ZWdhY3ktdmlld3NgIGFkZG9uIHdpbGwgZW5kIHNvb24sIHBsZWFzZSByZW1vdmUgaXQgZnJvbSB5
b3VyIGFwcGxpY2F0aW9uLicsIGZhbHNlLCB7IGlkOiAnZW1iZXItbGVnYWN5LXZpZXdzJywgdW50
aWw6ICcyLjYuMCcsIHVybDogJ2h0dHA6Ly9lbWJlcmpzLmNvbS9kZXByZWNhdGlvbnMvdjEueC8j
dG9jX2VtYmVyLXZpZXcnIH0pOworCisgICAgICAgIHdhcm5lZEFib3V0TGVnYWN5Vmlld0FkZG9u
ID0gdHJ1ZTsKKyAgICAgIH0KKworICAgICAgaWYgKF9lbWJlck1ldGFsLmRlZmF1bHQuRU5WLl9F
TkFCTEVfTEVHQUNZX0NPTlRST0xMRVJfU1VQUE9SVCAmJiAhd2FybmVkQWJvdXRMZWdhY3lDb250
cm9sbGVyQWRkb24pIHsKKyAgICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy53YXJuKCdTdXBwb3J0IGZv
ciB0aGUgYGVtYmVyLWxlZ2FjeS1jb250cm9sbGVyc2AgaGFzIGJlZW4gcmVtb3ZlZCwgcGxlYXNl
IHJlbW92ZSBpdCBmcm9tIHlvdXIgYXBwbGljYXRpb24uJywgZmFsc2UsIHsgaWQ6ICdlbWJlci1s
ZWdhY3ktY29udHJvbGxlcnMnLCB1cmw6ICdodHRwOi8vZW1iZXJqcy5jb20vZGVwcmVjYXRpb25z
L3YxLngvI3RvY19vYmplY3Rjb250cm9sbGVyJyB9KTsKKworICAgICAgICB3YXJuZWRBYm91dExl
Z2FjeUNvbnRyb2xsZXJBZGRvbiA9IHRydWU7CisgICAgICB9CisKKyAgICAgIC8vIEV2ZW4gdGhv
dWdoIHRoaXMgcmV0dXJucyBzeW5jaHJvbm91c2x5LCB3ZSBzdGlsbCBuZWVkIHRvIG1ha2Ugc3Vy
ZSB0aGUKKyAgICAgIC8vIGJvb3QgcHJvbWlzZSBleGlzdHMgZm9yIGJvb2sta2VlcGluZyBwdXJw
b3NlczogaWYgYW55dGhpbmcgd2VudCB3cm9uZyBpbgorICAgICAgLy8gdGhlIGJvb3QgcHJvY2Vz
cywgd2UgbmVlZCB0byBzdG9yZSB0aGUgZXJyb3IgYXMgYSByZWplY3Rpb24gb24gdGhlIGJvb3QK
KyAgICAgIC8vIHByb21pc2Ugc28gdGhhdCBhIGZ1dHVyZSBjYWxsZXIgb2YgYGJvb3QoKWAgY2Fu
IHRlbGwgd2hhdCBmYWlsZWQuCisgICAgICB2YXIgZGVmZXIgPSB0aGlzLl9ib290UmVzb2x2ZXIg
PSBuZXcgX2VtYmVyUnVudGltZUV4dFJzdnAuZGVmYXVsdC5kZWZlcigpOworICAgICAgdGhpcy5f
Ym9vdFByb21pc2UgPSBkZWZlci5wcm9taXNlOworCisgICAgICB0cnkgeworICAgICAgICB0aGlz
LnJ1bkluaXRpYWxpemVycygpOworICAgICAgICBfZW1iZXJSdW50aW1lU3lzdGVtTGF6eV9sb2Fk
LnJ1bkxvYWRIb29rcygnYXBwbGljYXRpb24nLCB0aGlzKTsKKyAgICAgICAgdGhpcy5hZHZhbmNl
UmVhZGluZXNzKCk7CisgICAgICAgIC8vIENvbnRpbnVlcyB0byBgZGlkQmVjb21lUmVhZHlgCisg
ICAgICB9IGNhdGNoIChlcnJvcikgeworICAgICAgICAvLyBGb3IgdGhlIGFzeW5jaHJvbm91cyBi
b290IHBhdGgKKyAgICAgICAgZGVmZXIucmVqZWN0KGVycm9yKTsKKworICAgICAgICAvLyBGb3Ig
dGhlIHN5bmNocm9ub3VzIGJvb3QgcGF0aAorICAgICAgICB0aHJvdyBlcnJvcjsKKyAgICAgIH0K
KyAgICB9LAorCisgICAgLyoqCisgICAgICBSZXNldCB0aGUgYXBwbGljYXRpb24uIFRoaXMgaXMg
dHlwaWNhbGx5IHVzZWQgb25seSBpbiB0ZXN0cy4gSXQgY2xlYW5zIHVwCisgICAgICB0aGUgYXBw
bGljYXRpb24gaW4gdGhlIGZvbGxvd2luZyBvcmRlcjoKKyAgICAgICAxLiBEZWFjdGl2YXRlIGV4
aXN0aW5nIHJvdXRlcworICAgICAgMi4gRGVzdHJveSBhbGwgb2JqZWN0cyBpbiB0aGUgY29udGFp
bmVyCisgICAgICAzLiBDcmVhdGUgYSBuZXcgYXBwbGljYXRpb24gY29udGFpbmVyCisgICAgICA0
LiBSZS1yb3V0ZSB0byB0aGUgZXhpc3RpbmcgdXJsCisgICAgICAgVHlwaWNhbCBFeGFtcGxlOgor
ICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgIHZhciBBcHA7CisgICAgICAgcnVuKGZ1bmN0aW9u
KCkgeworICAgICAgICBBcHAgPSBFbWJlci5BcHBsaWNhdGlvbi5jcmVhdGUoKTsKKyAgICAgIH0p
OworICAgICAgIG1vZHVsZSgnYWNjZXB0YW5jZSB0ZXN0JywgeworICAgICAgICBzZXR1cDogZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgQXBwLnJlc2V0KCk7CisgICAgICAgIH0KKyAgICAgIH0pOwor
ICAgICAgIHRlc3QoJ2ZpcnN0IHRlc3QnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgLy8gQXBwIGlz
IGZyZXNobHkgcmVzZXQKKyAgICAgIH0pOworICAgICAgIHRlc3QoJ3NlY29uZCB0ZXN0JywgZnVu
Y3Rpb24oKSB7CisgICAgICAgIC8vIEFwcCBpcyBhZ2FpbiBmcmVzaGx5IHJlc2V0CisgICAgICB9
KTsKKyAgICAgIGBgYAorICAgICAgIEFkdmFuY2VkIEV4YW1wbGU6CisgICAgICAgT2NjYXNpb25h
bGx5IHlvdSBtYXkgd2FudCB0byBwcmV2ZW50IHRoZSBhcHAgZnJvbSBpbml0aWFsaXppbmcgZHVy
aW5nCisgICAgICBzZXR1cC4gVGhpcyBjb3VsZCBlbmFibGUgZXh0cmEgY29uZmlndXJhdGlvbiwg
b3IgZW5hYmxlIGFzc2VydGluZyBwcmlvcgorICAgICAgdG8gdGhlIGFwcCBiZWNvbWluZyByZWFk
eS4KKyAgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICB2YXIgQXBwOworICAgICAgIHJ1bihmdW5j
dGlvbigpIHsKKyAgICAgICAgQXBwID0gRW1iZXIuQXBwbGljYXRpb24uY3JlYXRlKCk7CisgICAg
ICB9KTsKKyAgICAgICBtb2R1bGUoJ2FjY2VwdGFuY2UgdGVzdCcsIHsKKyAgICAgICAgc2V0dXA6
IGZ1bmN0aW9uKCkgeworICAgICAgICAgIHJ1bihmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIEFw
cC5yZXNldCgpOworICAgICAgICAgICAgQXBwLmRlZmVyUmVhZGluZXNzKCk7CisgICAgICAgICAg
fSk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgICAgIHRlc3QoJ2ZpcnN0IHRlc3QnLCBmdW5j
dGlvbigpIHsKKyAgICAgICAgb2sodHJ1ZSwgJ3NvbWV0aGluZyBiZWZvcmUgYXBwIGlzIGluaXRp
YWxpemVkJyk7CisgICAgICAgICBydW4oZnVuY3Rpb24oKSB7CisgICAgICAgICAgQXBwLmFkdmFu
Y2VSZWFkaW5lc3MoKTsKKyAgICAgICAgfSk7CisgICAgICAgICBvayh0cnVlLCAnc29tZXRoaW5n
IGFmdGVyIGFwcCBpcyBpbml0aWFsaXplZCcpOworICAgICAgfSk7CisgICAgICBgYGAKKyAgICAg
ICBAbWV0aG9kIHJlc2V0CisgICAgICBAcHVibGljCisgICAgKi8KKyAgICByZXNldDogZnVuY3Rp
b24gKCkgeworICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ0NhbGxpbmcgcmVzZXQoKSBv
biBpbnN0YW5jZXMgb2YgYEVtYmVyLkFwcGxpY2F0aW9uYCBpcyBub3RcbiAgICAgICAgICAgIHN1
cHBvcnRlZCB3aGVuIGdsb2JhbHMgbW9kZSBpcyBkaXNhYmxlZDsgY2FsbCBgdmlzaXQoKWAgdG9c
biAgICAgICAgICAgIGNyZWF0ZSBuZXcgYEVtYmVyLkFwcGxpY2F0aW9uSW5zdGFuY2VgcyBhbmQg
ZGlzcG9zZSB0aGVtXG4gICAgICAgICAgICB2aWEgdGhlaXIgYGRlc3Ryb3koKWAgbWV0aG9kIGlu
c3RlYWQuJywgdGhpcy5fZ2xvYmFsc01vZGUgJiYgdGhpcy5hdXRvYm9vdCk7CisKKyAgICAgIHZh
ciBpbnN0YW5jZSA9IHRoaXMuX19kZXByZWNhdGVkSW5zdGFuY2VfXzsKKworICAgICAgdGhpcy5f
cmVhZGluZXNzRGVmZXJyYWxzID0gMTsKKyAgICAgIHRoaXMuX2Jvb3RQcm9taXNlID0gbnVsbDsK
KyAgICAgIHRoaXMuX2Jvb3RSZXNvbHZlciA9IG51bGw7CisgICAgICB0aGlzLl9ib290ZWQgPSBm
YWxzZTsKKworICAgICAgZnVuY3Rpb24gaGFuZGxlUmVzZXQoKSB7CisgICAgICAgIF9lbWJlck1l
dGFsUnVuX2xvb3AuZGVmYXVsdChpbnN0YW5jZSwgJ2Rlc3Ryb3knKTsKKyAgICAgICAgdGhpcy5f
YnVpbGREZXByZWNhdGVkSW5zdGFuY2UoKTsKKyAgICAgICAgX2VtYmVyTWV0YWxSdW5fbG9vcC5k
ZWZhdWx0LnNjaGVkdWxlKCdhY3Rpb25zJywgdGhpcywgJ19ib290U3luYycpOworICAgICAgfQor
CisgICAgICBfZW1iZXJNZXRhbFJ1bl9sb29wLmRlZmF1bHQuam9pbih0aGlzLCBoYW5kbGVSZXNl
dCk7CisgICAgfSwKKworICAgIC8qKgorICAgICAgQHByaXZhdGUKKyAgICAgIEBtZXRob2QgZGlk
QmVjb21lUmVhZHkKKyAgICAqLworICAgIGRpZEJlY29tZVJlYWR5OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICB0cnkgeworICAgICAgICAvLyBUT0RPOiBJcyB0aGlzIHN0aWxsIG5lZWRlZCBmb3IgX2ds
b2JhbHNNb2RlID0gZmFsc2U/CisgICAgICAgIGlmICghX2VtYmVyTWV0YWwuZGVmYXVsdC50ZXN0
aW5nKSB7CisgICAgICAgICAgLy8gRWFnZXJseSBuYW1lIGFsbCBjbGFzc2VzIHRoYXQgYXJlIGFs
cmVhZHkgbG9hZGVkCisgICAgICAgICAgX2VtYmVyTWV0YWwuZGVmYXVsdC5OYW1lc3BhY2UucHJv
Y2Vzc0FsbCgpOworICAgICAgICAgIF9lbWJlck1ldGFsLmRlZmF1bHQuQk9PVEVEID0gdHJ1ZTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIFNlZSBkb2N1bWVudGF0aW9uIG9uIGBfYXV0b2Jvb3Qo
KWAgZm9yIGRldGFpbHMKKyAgICAgICAgaWYgKHRoaXMuYXV0b2Jvb3QpIHsKKyAgICAgICAgICB2
YXIgaW5zdGFuY2UgPSB1bmRlZmluZWQ7CisKKyAgICAgICAgICBpZiAodGhpcy5fZ2xvYmFsc01v
ZGUpIHsKKyAgICAgICAgICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSB0aGUgX19kZXByZWNhdGVk
SW5zdGFuY2VfXyBseWluZyBhcm91bmQsIGJvb3QgaXQgdG8KKyAgICAgICAgICAgIC8vIGF2b2lk
IHVubmVjZXNzYXJ5IHdvcmsKKyAgICAgICAgICAgIGluc3RhbmNlID0gdGhpcy5fX2RlcHJlY2F0
ZWRJbnN0YW5jZV9fOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPdGhlcndp
c2UsIGJ1aWxkIGFuIGluc3RhbmNlIGFuZCBib290IGl0LiBUaGlzIGlzIGN1cnJlbnRseSB1bnJl
YWNoYWJsZSwKKyAgICAgICAgICAgIC8vIGJlY2F1c2Ugd2UgZm9yY2VkIF9nbG9iYWxzTW9kZSB0
byA9PT0gYXV0b2Jvb3Q7IGJ1dCBoYXZpbmcgdGhpcyBicmFuY2gKKyAgICAgICAgICAgIC8vIGFs
bG93cyB1cyB0byBsb2NhbGx5IHRvZ2dsZSB0aGF0IGZsYWcgZm9yIHdlZWRpbmcgb3V0IGxlZ2Fj
eSBnbG9iYWxzIG1vZGUKKyAgICAgICAgICAgIC8vIGRlcGVuZGVuY2llcyBpbmRlcGVuZGVudGx5
CisgICAgICAgICAgICBpbnN0YW5jZSA9IHRoaXMuYnVpbGRJbnN0YW5jZSgpOworICAgICAgICAg
IH0KKworICAgICAgICAgIGluc3RhbmNlLl9ib290U3luYygpOworCisgICAgICAgICAgLy8gVE9E
TzogQXBwLnJlYWR5KCkgaXMgbm90IGNhbGxlZCB3aGVuIGF1dG9ib290IGlzIGRpc2FibGVkLCBp
cyB0aGlzIGNvcnJlY3Q/CisgICAgICAgICAgdGhpcy5yZWFkeSgpOworCisgICAgICAgICAgaW5z
dGFuY2Uuc3RhcnRSb3V0aW5nKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBGb3IgdGhlIGFz
eW5jaHJvbm91cyBib290IHBhdGgKKyAgICAgICAgdGhpcy5fYm9vdFJlc29sdmVyLnJlc29sdmUo
dGhpcyk7CisKKyAgICAgICAgLy8gRm9yIHRoZSBzeW5jaHJvbm91cyBib290IHBhdGgKKyAgICAg
ICAgdGhpcy5fYm9vdGVkID0gdHJ1ZTsKKyAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICAg
IC8vIEZvciB0aGUgYXN5bmNocm9ub3VzIGJvb3QgcGF0aAorICAgICAgICB0aGlzLl9ib290UmVz
b2x2ZXIucmVqZWN0KGVycm9yKTsKKworICAgICAgICAvLyBGb3IgdGhlIHN5bmNocm9ub3VzIGJv
b3QgcGF0aAorICAgICAgICB0aHJvdyBlcnJvcjsKKyAgICAgIH0KKyAgICB9LAorCisgICAgLyoq
CisgICAgICBDYWxsZWQgd2hlbiB0aGUgQXBwbGljYXRpb24gaGFzIGJlY29tZSByZWFkeSwgaW1t
ZWRpYXRlbHkgYmVmb3JlIHJvdXRpbmcKKyAgICAgIGJlZ2lucy4gVGhlIGNhbGwgd2lsbCBiZSBk
ZWxheWVkIHVudGlsIHRoZSBET00gaGFzIGJlY29tZSByZWFkeS4KKyAgICAgICBAZXZlbnQgcmVh
ZHkKKyAgICAgIEBwdWJsaWMKKyAgICAqLworICAgIHJlYWR5OiBmdW5jdGlvbiAoKSB7CisgICAg
ICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgLy8gVGhpcyBtZXRob2QgbXVzdCBiZSBtb3Zl
ZCB0byB0aGUgYXBwbGljYXRpb24gaW5zdGFuY2Ugb2JqZWN0CisgICAgd2lsbERlc3Ryb3k6IGZ1
bmN0aW9uICgpIHsKKyAgICAgIHRoaXMuX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Cisg
ICAgICBfZW1iZXJNZXRhbC5kZWZhdWx0LkJPT1RFRCA9IGZhbHNlOworICAgICAgdGhpcy5fYm9v
dGVkID0gZmFsc2U7CisgICAgICB0aGlzLl9ib290UHJvbWlzZSA9IG51bGw7CisgICAgICB0aGlz
Ll9ib290UmVzb2x2ZXIgPSBudWxsOworCisgICAgICBpZiAoX2VtYmVyUnVudGltZVN5c3RlbUxh
enlfbG9hZC5fbG9hZGVkLmFwcGxpY2F0aW9uID09PSB0aGlzKSB7CisgICAgICAgIF9lbWJlclJ1
bnRpbWVTeXN0ZW1MYXp5X2xvYWQuX2xvYWRlZC5hcHBsaWNhdGlvbiA9IHVuZGVmaW5lZDsKKyAg
ICAgIH0KKworICAgICAgaWYgKHRoaXMuX2dsb2JhbHNNb2RlICYmIHRoaXMuX19kZXByZWNhdGVk
SW5zdGFuY2VfXykgeworICAgICAgICB0aGlzLl9fZGVwcmVjYXRlZEluc3RhbmNlX18uZGVzdHJv
eSgpOworICAgICAgfQorICAgIH0sCisKKyAgICAvKioKKyAgICAgIEJvb3QgYSBuZXcgaW5zdGFu
Y2Ugb2YgYEVtYmVyLkFwcGxpY2F0aW9uSW5zdGFuY2VgIGZvciB0aGUgY3VycmVudAorICAgICAg
YXBwbGljYXRpb24gYW5kIG5hdmlnYXRlIGl0IHRvIHRoZSBnaXZlbiBgdXJsYC4gUmV0dXJucyBh
IGBQcm9taXNlYCB0aGF0CisgICAgICByZXNvbHZlcyB3aXRoIHRoZSBpbnN0YW5jZSB3aGVuIHRo
ZSBpbml0aWFsIHJvdXRpbmcgYW5kIHJlbmRlcmluZyBpcworICAgICAgY29tcGxldGUsIG9yIHJl
amVjdHMgd2l0aCBhbnkgZXJyb3IgdGhhdCBvY2N1cmVkIGR1cmluZyB0aGUgYm9vdCBwcm9jZXNz
LgorICAgICAgIFdoZW4gYGF1dG9ib290YCBpcyBkaXNhYmxlZCwgY2FsbGluZyBgdmlzaXRgIHdv
dWxkIGZpcnN0IGNhdXNlIHRoZQorICAgICAgYXBwbGljYXRpb24gdG8gYm9vdCwgd2hpY2ggcnVu
cyB0aGUgYXBwbGljYXRpb24gaW5pdGlhbGl6ZXJzLgorICAgICAgIFRoaXMgbWV0aG9kIGFsc28g
dGFrZXMgYSBoYXNoIG9mIGJvb3QtdGltZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yCisgICAg
ICBjdXN0b21pemluZyB0aGUgaW5zdGFuY2UncyBiZWhhdmlvci4gU2VlIHRoZSBkb2N1bWVudGF0
aW9uIG9uCisgICAgICBgRW1iZXIuQXBwbGljYXRpb25JbnN0YW5jZS5Cb290T3B0aW9uc2AgZm9y
IGRldGFpbHMuCisgICAgICAgYEVtYmVyLkFwcGxpY2F0aW9uSW5zdGFuY2UuQm9vdE9wdGlvbnNg
IGlzIGFuIGludGVyZmFjZSBjbGFzcyB0aGF0IGV4aXN0cworICAgICAgcHVyZWx5IHRvIGRvY3Vt
ZW50IHRoZSBhdmFpbGFibGUgb3B0aW9uczsgeW91IGRvIG5vdCBuZWVkIHRvIGNvbnN0cnVjdCBp
dAorICAgICAgbWFudWFsbHkuIFNpbXBseSBwYXNzIGEgcmVndWxhciBKYXZhU2NyaXB0IG9iamVj
dCBjb250YWluaW5nIG9mIHRoZQorICAgICAgZGVzaXJlZCBvcHRpb25zOgorICAgICAgIGBgYGph
dmFzY3JpcHQKKyAgICAgIE15QXBwLnZpc2l0KCIvIiwgeyBsb2NhdGlvbjogIm5vbmUiLCByb290
RWxlbWVudDogIiNjb250YWluZXIiIH0pOworICAgICAgYGBgCisgICAgICAgIyMjIFN1cHBvcnRl
ZCBTY2VuYXJpb3MKKyAgICAgICBXaGlsZSB0aGUgYEJvb3RPcHRpb25zYCBjbGFzcyBleHBvc2Vz
IGEgbGFyZ2UgbnVtYmVyIG9mIGtub2JzLCBub3QgYWxsCisgICAgICBjb21iaW5hdGlvbnMgb2Yg
dGhlbSBhcmUgdmFsaWQ7IGNlcnRhaW4gaW5jb21wYXRpYmxlIGNvbWJpbmF0aW9ucyBtaWdodAor
ICAgICAgcmVzdWx0IGluIHVuZXhwZWN0ZWQgYmVoYXZpb3IuCisgICAgICAgRm9yIGV4YW1wbGUs
IGJvb3RpbmcgdGhlIGluc3RhbmNlIGluIHRoZSBmdWxsIGJyb3dzZXIgZW52aXJvbm1lbnQKKyAg
ICAgIHdoaWxlIHNwZWNpZnlpbmcgYSBmb3JpZWduIGBkb2N1bWVudGAgb2JqZWN0IChlLmcuIGB7
IGlzQnJvd3NlcjogdHJ1ZSwKKyAgICAgIGRvY3VtZW50OiBpZnJhbWUuY29udGVudERvY3VtZW50
IH1gKSBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseSB0b2RheSwKKyAgICAgIGxhcmdlbHkgZHVlIHRv
IEVtYmVyJ3MgalF1ZXJ5IGRlcGVuZGVuY3kuCisgICAgICAgQ3VycmVudGx5LCB0aGVyZSBhcmUg
dGhyZWUgb2ZmaWNpYWxseSBzdXBwb3J0ZWQgc2NlbmFyaW9zL2NvbmZpZ3VyYXRpb25zLgorICAg
ICAgVXNhZ2VzIG91dHNpZGUgb2YgdGhlc2Ugc2NlbmFyaW9zIGFyZSBub3QgZ3VhcmFudGVlZCB0
byB3b3JrLCBidXQgcGxlYXNlCisgICAgICBmZWVsIGZyZWUgdG8gZmlsZSBidWcgcmVwb3J0cyBk
b2N1bWVudGluZyB5b3VyIGV4cGVyaWVuY2UgYW5kIGFueSBpc3N1ZXMKKyAgICAgIHlvdSBlbmNv
dW50ZXJlZCB0byBoZWxwIGV4cGFuZCBzdXBwb3J0LgorICAgICAgICMjIyMgQnJvd3NlciBBcHBs
aWNhdGlvbnMgKE1hbnVhbCBCb290KQorICAgICAgIFRoZSBzZXR1cCBpcyBsYXJnZWx5IHNpbWls
YXIgdG8gaG93IEVtYmVyIHdvcmtzIG91dC1vZi10aGUtYm94LiBOb3JtYWxseSwKKyAgICAgIEVt
YmVyIHdpbGwgYm9vdCBhIGRlZmF1bHQgaW5zdGFuY2UgZm9yIHlvdXIgQXBwbGljYXRpb24gb24g
IkRPTSByZWFkeSIuCisgICAgICBIb3dldmVyLCB5b3UgY2FuIGN1c3RvbWl6ZSB0aGlzIGJlaGF2
aW9yIGJ5IGRpc2FibGluZyBgYXV0b2Jvb3RgLgorICAgICAgIEZvciBleGFtcGxlLCB0aGlzIGFs
bG93cyB5b3UgdG8gcmVuZGVyIGEgbWluaXR1cmUgZGVtbyBvZiB5b3VyIGFwcGxpY2F0aW9uCisg
ICAgICBpbnRvIGEgc3BlY2lmaWMgYXJlYSBvbiB5b3VyIG1hcmtldGluZyB3ZWJzaXRlOgorICAg
ICAgIGBgYGphdmFzY3JpcHQKKyAgICAgIGltcG9ydCBNeUFwcCBmcm9tICdteS1hcHAnOworICAg
ICAgICQoZnVuY3Rpb24oKSB7CisgICAgICAgIGxldCBBcHAgPSBNeUFwcC5jcmVhdGUoeyBhdXRv
Ym9vdDogZmFsc2UgfSk7CisgICAgICAgICBsZXQgb3B0aW9ucyA9IHsKKyAgICAgICAgICAvLyBP
dmVycmlkZSB0aGUgcm91dGVyJ3MgbG9jYXRpb24gYWRhcHRlciB0byBwcmV2ZW50IGl0IGZyb20g
dXBkYXRpbmcKKyAgICAgICAgICAvLyB0aGUgVVJMIGluIHRoZSBhZGRyZXNzIGJhcgorICAgICAg
ICAgIGxvY2F0aW9uOiAnbm9uZScsCisgICAgICAgICAgIC8vIE92ZXJyaWRlIHRoZSBkZWZhdWx0
IGByb290RWxlbWVudGAgb24gdGhlIGFwcCB0byByZW5kZXIgaW50byBhCisgICAgICAgICAgLy8g
c3BlY2lmaWMgYGRpdmAgb24gdGhlIHBhZ2UKKyAgICAgICAgICByb290RWxlbWVudDogJyNkZW1v
JworICAgICAgICB9OworICAgICAgICAgLy8gU3RhcnQgdGhlIGFwcCBhdCB0aGUgc3BlY2lhbCBk
ZW1vIFVSTAorICAgICAgICBBcHAudmlzaXQoJy9kZW1vJywgb3B0aW9ucyk7CisgICAgICB9KTsK
KyAgICAgIGBgYGAKKyAgICAgICBPciBwZXJoYXBzIHlvdSBtaWdodCB3YW50IHRvIGJvb3QgdHdv
IGluc3RhbmNlcyBvZiB5b3VyIGFwcCBvbiB0aGUgc2FtZQorICAgICAgcGFnZSBmb3IgYSBzcGxp
dC1zY3JlZW4gbXVsdGlwbGF5ZXIgZXhwZXJpZW5jZToKKyAgICAgICBgYGBqYXZhc2NyaXB0Cisg
ICAgICBpbXBvcnQgTXlBcHAgZnJvbSAnbXktYXBwJzsKKyAgICAgICAkKGZ1bmN0aW9uKCkgewor
ICAgICAgICBsZXQgQXBwID0gTXlBcHAuY3JlYXRlKHsgYXV0b2Jvb3Q6IGZhbHNlIH0pOworICAg
ICAgICAgbGV0IHNlc3Npb25JZCA9IE15QXBwLmdlbmVyYXRlU2Vzc2lvbklEKCk7CisgICAgICAg
ICBsZXQgcGxheWVyMSA9IEFwcC52aXNpdChgL21hdGNoZXMvam9pbj9uYW1lPVBsYXllcisxJnNl
c3Npb249JHtzZXNzaW9uSWR9YCwgeyByb290RWxlbWVudDogJyNsZWZ0JywgbG9jYXRpb246ICdu
b25lJyB9KTsKKyAgICAgICAgbGV0IHBsYXllcjIgPSBBcHAudmlzaXQoYC9tYXRjaGVzL2pvaW4/
bmFtZT1QbGF5ZXIrMiZzZXNzaW9uPSR7c2Vzc2lvbklkfWAsIHsgcm9vdEVsZW1lbnQ6ICcjcmln
aHQnLCBsb2NhdGlvbjogJ25vbmUnIH0pOworICAgICAgICAgUHJvbWlzZS5hbGwoW3BsYXllcjEs
IHBsYXllcjJdKS50aGVuKCgpID0+IHsKKyAgICAgICAgICAvLyBCb3RoIGFwcHMgaGF2ZSBjb21w
bGV0ZWQgdGhlIGluaXRpYWwgcmVuZGVyCisgICAgICAgICAgJCgnI2xvYWRpbmcnKS5mYWRlT3V0
KCk7CisgICAgICAgIH0pOworICAgICAgfSk7CisgICAgICBgYGAKKyAgICAgICBEbyBub3RlIHRo
YXQgZWFjaCBhcHAgaW5zdGFuY2UgbWFpbnRhaW5zIHRoZWlyIG93biByZWdpc3RyeS9jb250YWlu
ZXIsIHNvCisgICAgICB0aGV5IHdpbGwgcnVuIGluIGNvbXBsZXRlIGlzb2xhdGlvbiBieSBkZWZh
dWx0LgorICAgICAgICMjIyMgU2VydmVyLVNpZGUgUmVuZGVyaW5nIChhbHNvIGtub3duIGFzIEZh
c3RCb290KQorICAgICAgIFRoaXMgc2V0dXAgYWxsb3dzIHlvdSB0byBydW4geW91ciBFbWJlciBh
cHAgaW4gYSBzZXJ2ZXIgZW52aXJvbm1lbnQgdXNpbmcKKyAgICAgIE5vZGUuanMgYW5kIHJlbmRl
ciBpdHMgY29udGVudCBpbnRvIHN0YXRpYyBIVE1MIGZvciBTRU8gcHVycG9zZXMuCisgICAgICAg
YGBgamF2YXNjcmlwdAorICAgICAgY29uc3QgSFRNTFNlcmlhbGl6ZXIgPSBuZXcgU2ltcGxlRE9N
LkhUTUxTZXJpYWxpemVyKFNpbXBsZURPTS52b2lkTWFwKTsKKyAgICAgICBmdW5jdGlvbiByZW5k
ZXJVUkwodXJsKSB7CisgICAgICAgIGxldCBkb20gPSBuZXcgU2ltcGxlRE9NLkRvY3VtZW50KCk7
CisgICAgICAgIGxldCByb290RWxlbWVudCA9IGRvbS5ib2R5OworICAgICAgICBsZXQgb3B0aW9u
cyA9IHsgaXNCcm93c2VyOiBmYWxzZSwgZG9jdW1lbnQ6IGRvbSwgcm9vdEVsZW1lbnQ6IHJvb3RF
bGVtZW50IH07CisgICAgICAgICByZXR1cm4gTXlBcHAudmlzaXQob3B0aW9ucykudGhlbihpbnN0
YW5jZSA9PiB7CisgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiBIVE1MU2VyaWFs
aXplci5zZXJpYWxpemUocm9vdEVsZW1lbnQuZmlyc3RDaGlsZCk7CisgICAgICAgICAgfSBmaW5h
bGx5IHsKKyAgICAgICAgICAgIGluc3RhbmNlLmRlc3Ryb3koKTsKKyAgICAgICAgICB9CisgICAg
ICAgIH0pOworICAgICAgfQorICAgICAgYGBgCisgICAgICAgSW4gdGhpcyBzY2VuYXJpbywgYmVj
YXVzZSBFbWJlciBkb2VzIG5vdCBoYXZlIGFjY2VzcyB0byBhIGdsb2JhbCBgZG9jdW1lbnRgCisg
ICAgICBvYmplY3QgaW4gdGhlIE5vZGUuanMgZW52aXJvbm1lbnQsIHlvdSBtdXN0IHByb3ZpZGUg
b25lIGV4cGxpY2l0bHkuIEluIHByYWN0aWNlLAorICAgICAgaW4gdGhlIG5vbi1icm93c2VyIGVu
dmlyb25tZW50LCB0aGUgc3RhbmQtaW4gYGRvY3VtZW50YCBvYmplY3Qgb25seSBuZWVkIHRvCisg
ICAgICBpbXBsZW1lbnQgYSBsaW1pdGVkIHN1YnNldCBvZiB0aGUgZnVsbCBET00gQVBJLiBUaGUg
YFNpbXBsZURPTWAgbGlicmFyeSBpcyBrbm93bgorICAgICAgdG8gd29yay4KKyAgICAgICBTaW5j
ZSB0aGVyZSBpcyBubyBhY2Nlc3MgdG8galF1ZXJ5IGluIHRoZSBub24tYnJvd3NlciBlbnZpcm9u
bWVudCwgeW91IG11c3QgYWxzbworICAgICAgc3BlY2lmeSBhIERPTSBgRWxlbWVudGAgb2JqZWN0
IGluIHRoZSBzYW1lIGBkb2N1bWVudGAgZm9yIHRoZSBgcm9vdEVsZW1lbnRgIG9wdGlvbgorICAg
ICAgKGFzIG9wcG9zZWQgdG8gYSBzZWxlY3RvciBzdHJpbmcgbGlrZSBgImJvZHkiYCkuCisgICAg
ICAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIG9uIHRoZSBgaXNCcm93c2VyYCwgYGRvY3VtZW50YCBh
bmQgYHJvb3RFbGVtZW50YCBwcm9wZXJ0aWVzCisgICAgICBvbiBgRW1iZXIuQXBwbGljYXRpb25J
bnN0YW5jZS5Cb290T3B0aW9uc2AgZm9yIGRldGFpbHMuCisgICAgICAgIyMjIyBTZXJ2ZXItU2lk
ZSBSZXNvdXJjZSBEaXNjb3ZlcnkKKyAgICAgICBUaGlzIHNldHVwIGFsbG93cyB5b3UgdG8gcnVu
IHRoZSByb3V0aW5nIGxheWVyIG9mIHlvdXIgRW1iZXIgYXBwIGluIGEgc2VydmVyCisgICAgICBl
bnZpcm9ubWVudCB1c2luZyBOb2RlLmpzIGFuZCBjb21wbGV0ZWx5IGRpc2FibGUgcmVuZGVyaW5n
LiBUaGlzIGFsbG93cyB5b3UKKyAgICAgIHRvIHNpbXVsYXRlIGFuZCBkaXNjb3ZlciB0aGUgcmVz
b3VyY2VzIChpLmUuIEFKQVggcmVxdWVzdHMpIG5lZWRlZCB0byBmdWZpbGwKKyAgICAgIGEgZ2l2
ZW4gcmVxdWVzdCBhbmQgZWFnZXJseSAicHVzaCIgdGhlc2UgcmVzb3VyY2VzIHRvIHRoZSBjbGll
bnQuCisgICAgICAgYGBgYXBwL2luaXRpYWxpemVycy9uZXR3b3JrLXNlcnZpY2UuanMKKyAgICAg
IGltcG9ydCBCcm93c2VyTmV0d29ya1NlcnZpY2UgZnJvbSAnYXBwL3NlcnZpY2VzL25ldHdvcmsv
YnJvd3Nlcic7CisgICAgICBpbXBvcnQgTm9kZU5ldHdvcmtTZXJ2aWNlIGZyb20gJ2FwcC9zZXJ2
aWNlcy9uZXR3b3JrL25vZGUnOworICAgICAgIC8vIEluamVjdCBhIChoeXBvdGhldGljYWwpIHNl
cnZpY2UgZm9yIGFic3RyYWN0aW5nIGFsbCBBSkFYIGNhbGxzIGFuZCB1c2UKKyAgICAgIC8vIHRo
ZSBhcHByb3BpYXRlIGltcGxlbWVudGFpb24gb24gdGhlIGNsaWVudC9zZXJ2ZXIuIFRoaXMgYWxz
byBhbGxvd3MgdGhlCisgICAgICAvLyBzZXJ2ZXIgdG8gbG9nIGFsbCB0aGUgQUpBWCBjYWxscyBt
YWRlIGR1cmluZyBhIHBhcnRpY3VsYXIgcmVxdWVzdCBhbmQgdXNlCisgICAgICAvLyB0aGF0IGZv
ciByZXNvdXJjZS1kaXNjb3ZlcnkgcHVycG9zZS4KKyAgICAgICBleHBvcnQgZnVuY3Rpb24gaW5p
dGlhbGl6ZShhcHBsaWNhdGlvbikgeworICAgICAgICBpZiAod2luZG93KSB7IC8vIGJyb3dzZXIK
KyAgICAgICAgICBhcHBsaWNhdGlvbi5yZWdpc3Rlcignc2VydmljZTpuZXR3b3JrJywgQnJvd3Nl
ck5ldHdvcmtTZXJ2aWNlKTsKKyAgICAgICAgfSBlbHNlIHsgLy8gbm9kZQorICAgICAgICAgIGFw
cGxpY2F0aW9uLnJlZ2lzdGVyKCdzZXJ2aWNlOm5ldHdvcmsnLCBOb2RlTmV0d29ya1NlcnZpY2Up
OworICAgICAgICB9CisgICAgICAgICBhcHBsaWNhdGlvbi5pbmplY3QoJ3JvdXRlJywgJ25ldHdv
cmsnLCAnc2VydmljZTpuZXR3b3JrJyk7CisgICAgICB9OworICAgICAgIGV4cG9ydCBkZWZhdWx0
IHsKKyAgICAgICAgbmFtZTogJ25ldHdvcmstc2VydmljZScsCisgICAgICAgIGluaXRpYWxpemU6
IGluaXRpYWxpemUKKyAgICAgIH07CisgICAgICBgYGAKKyAgICAgICBgYGBhcHAvcm91dGVzL3Bv
c3QuanMKKyAgICAgIGltcG9ydCBFbWJlciBmcm9tICdlbWJlcic7CisgICAgICAgLy8gQW4gZXhh
bXBsZSBvZiBob3cgdGhlIChoeXBvdGhldGljYWwpIHNlcnZpY2UgaXMgdXNlZCBpbiByb3V0ZXMu
CisgICAgICAgZXhwb3J0IGRlZmF1bHQgRW1iZXIuUm91dGUuZXh0ZW5kKHsKKyAgICAgICAgbW9k
ZWwocGFyYW1zKSB7CisgICAgICAgICAgcmV0dXJuIHRoaXMubmV0d29yay5mZXRjaChgL2FwaS9w
b3N0cy8ke3BhcmFtcy5wb3N0X2lkfS5qc29uYCk7CisgICAgICAgIH0sCisgICAgICAgICBhZnRl
ck1vZGVsKHBvc3QpIHsKKyAgICAgICAgICBpZiAocG9zdC5pc0V4dGVybmFsQ29udGVudCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMubmV0d29yay5mZXRjaChgL2FwaS9leHRlcm5hbC8/dXJs
PSR7cG9zdC5leHRlcm5hbFVSTH1gKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
cmV0dXJuIHBvc3Q7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9KTsKKyAgICAgIGBg
YAorICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgIC8vIEZpbmFsbHksIHB1dCBhbGwgdGhlIHBp
ZWNlcyB0b2dldGhlcgorICAgICAgIGZ1bmN0aW9uIGRpc2NvdmVyUmVzb3VyY2VzRm9yKHVybCkg
eworICAgICAgICByZXR1cm4gTXlBcHAudmlzaXQodXJsLCB7IGlzQnJvd3NlcjogZmFsc2UsIHNo
b3VsZFJlbmRlcjogZmFsc2UgfSkudGhlbihpbnN0YW5jZSA9PiB7CisgICAgICAgICAgbGV0IG5l
dHdvcmtTZXJ2aWNlID0gaW5zdGFuY2UubG9va3VwKCdzZXJ2aWNlOm5ldHdvcmsnKTsKKyAgICAg
ICAgICByZXR1cm4gbmV0d29ya1NlcnZpY2UucmVxdWVzdHM7IC8vID0+IHsgIi9hcGkvcG9zdHMv
MTIzLmpzb24iOiAiLi4uIiB9CisgICAgICAgIH0pOworICAgICAgfQorICAgICAgYGBgCisgICAg
ICAgQHB1YmxpYworICAgICAgQG1ldGhvZCB2aXNpdAorICAgICAgQHBhcmFtIHVybCB7U3RyaW5n
fSBUaGUgaW5pdGlhbCBVUkwgdG8gbmF2aWdhdGUgdG8KKyAgICAgIEBwYXJhbSBvcHRpb25zIHtF
bWJlci5BcHBsaWNhdGlvbkluc3RhbmNlLkJvb3RPcHRpb25zfQorICAgICAgQHJldHVybiB7UHJv
bWlzZTxFbWJlci5BcHBsaWNhdGlvbkluc3RhbmNlLCBFcnJvcj59CisgICAgKi8KKyAgICB2aXNp
dDogZnVuY3Rpb24gKHVybCwgb3B0aW9ucykgeworICAgICAgdmFyIF90aGlzID0gdGhpczsKKwor
ICAgICAgcmV0dXJuIHRoaXMuYm9vdCgpLnRoZW4oZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1
cm4gX3RoaXMuYnVpbGRJbnN0YW5jZSgpLmJvb3Qob3B0aW9ucykudGhlbihmdW5jdGlvbiAoaW5z
dGFuY2UpIHsKKyAgICAgICAgICByZXR1cm4gaW5zdGFuY2UudmlzaXQodXJsKTsKKyAgICAgICAg
fSk7CisgICAgICB9KTsKKyAgICB9CisgIH0pOworCisgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShB
cHBsaWNhdGlvbi5wcm90b3R5cGUsICdyZWdpc3RyeScsIHsKKyAgICBjb25maWd1cmFibGU6IHRy
dWUsCisgICAgZW51bWVyYWJsZTogZmFsc2UsCisgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICByZXR1cm4gX2VtYmVyUnVudGltZU1peGluc1JlZ2lzdHJ5X3Byb3h5LmJ1aWxkRmFrZVJlZ2lz
dHJ5V2l0aERlcHJlY2F0aW9ucyh0aGlzLCAnQXBwbGljYXRpb24nKTsKKyAgICB9CisgIH0pOwor
CisgIEFwcGxpY2F0aW9uLnJlb3BlbkNsYXNzKHsKKyAgICAvKioKKyAgICAgIFRoaXMgY3JlYXRl
cyBhIHJlZ2lzdHJ5IHdpdGggdGhlIGRlZmF1bHQgRW1iZXIgbmFtaW5nIGNvbnZlbnRpb25zLgor
ICAgICAgIEl0IGFsc28gY29uZmlndXJlcyB0aGUgcmVnaXN0cnk6CisgICAgICAgKiByZWdpc3Rl
cmVkIHZpZXdzIGFyZSBjcmVhdGVkIGV2ZXJ5IHRpbWUgdGhleSBhcmUgbG9va2VkIHVwICh0aGV5
IGFyZQorICAgICAgICBub3Qgc2luZ2xldG9ucykKKyAgICAgICogcmVnaXN0ZXJlZCB0ZW1wbGF0
ZXMgYXJlIG5vdCBmYWN0b3JpZXM7IHRoZSByZWdpc3RlcmVkIHZhbHVlIGlzCisgICAgICAgIHJl
dHVybmVkIGRpcmVjdGx5LgorICAgICAgKiB0aGUgcm91dGVyIHJlY2VpdmVzIHRoZSBhcHBsaWNh
dGlvbiBhcyBpdHMgYG5hbWVzcGFjZWAgcHJvcGVydHkKKyAgICAgICogYWxsIGNvbnRyb2xsZXJz
IHJlY2VpdmUgdGhlIHJvdXRlciBhcyB0aGVpciBgdGFyZ2V0YCBhbmQgYGNvbnRyb2xsZXJzYAor
ICAgICAgICBwcm9wZXJ0aWVzCisgICAgICAqIGFsbCBjb250cm9sbGVycyByZWNlaXZlIHRoZSBh
cHBsaWNhdGlvbiBhcyB0aGVpciBgbmFtZXNwYWNlYCBwcm9wZXJ0eQorICAgICAgKiB0aGUgYXBw
bGljYXRpb24gdmlldyByZWNlaXZlcyB0aGUgYXBwbGljYXRpb24gY29udHJvbGxlciBhcyBpdHMK
KyAgICAgICAgYGNvbnRyb2xsZXJgIHByb3BlcnR5CisgICAgICAqIHRoZSBhcHBsaWNhdGlvbiB2
aWV3IHJlY2VpdmVzIHRoZSBhcHBsaWNhdGlvbiB0ZW1wbGF0ZSBhcyBpdHMKKyAgICAgICAgYGRl
ZmF1bHRUZW1wbGF0ZWAgcHJvcGVydHkKKyAgICAgICBAcHJpdmF0ZQorICAgICAgQG1ldGhvZCBi
dWlsZFJlZ2lzdHJ5CisgICAgICBAc3RhdGljCisgICAgICBAcGFyYW0ge0VtYmVyLkFwcGxpY2F0
aW9ufSBuYW1lc3BhY2UgdGhlIGFwcGxpY2F0aW9uIGZvciB3aGljaCB0bworICAgICAgICBidWls
ZCB0aGUgcmVnaXN0cnkKKyAgICAgIEByZXR1cm4ge0VtYmVyLlJlZ2lzdHJ5fSB0aGUgYnVpbHQg
cmVnaXN0cnkKKyAgICAgIEBwdWJsaWMKKyAgICAqLworICAgIGJ1aWxkUmVnaXN0cnk6IGZ1bmN0
aW9uIChhcHBsaWNhdGlvbikgeworICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3Ro
IDw9IDEgfHwgYXJndW1lbnRzWzFdID09PSB1bmRlZmluZWQgPyB7fSA6IGFyZ3VtZW50c1sxXTsK
KworICAgICAgdmFyIHJlZ2lzdHJ5ID0gdGhpcy5fc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRz
KTsKKyAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyKCdhcHBsaWNhdGlvbjptYWluJywgYXBwbGljYXRp
b24sIHsgaW5zdGFudGlhdGU6IGZhbHNlIH0pOworCisgICAgICBpZiAob3B0aW9uc1tfZW1iZXJB
cHBsaWNhdGlvblN5c3RlbUVuZ2luZS5HTElNTUVSXSkgeworICAgICAgICBnbGltbWVyU2V0dXBS
ZWdpc3RyeShyZWdpc3RyeSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBodG1sYmFyc1NldHVw
UmVnaXN0cnkocmVnaXN0cnkpOworICAgICAgfQorCisgICAgICByZXR1cm4gcmVnaXN0cnk7Cisg
ICAgfQorICB9KTsKKworICBmdW5jdGlvbiBjb21tb25TZXR1cFJlZ2lzdHJ5KHJlZ2lzdHJ5KSB7
CisgICAgcmVnaXN0cnkub3B0aW9uc0ZvclR5cGUoJ2NvbXBvbmVudCcsIHsgc2luZ2xldG9uOiBm
YWxzZSB9KTsKKyAgICByZWdpc3RyeS5vcHRpb25zRm9yVHlwZSgndmlldycsIHsgc2luZ2xldG9u
OiBmYWxzZSB9KTsKKyAgICByZWdpc3RyeS5pbmplY3Rpb24oJ3JlbmRlcmVyJywgJ2RvbScsICdz
ZXJ2aWNlOi1kb20taGVscGVyJyk7CisKKyAgICByZWdpc3RyeS5yZWdpc3RlcignY29udHJvbGxl
cjpiYXNpYycsIF9lbWJlclJ1bnRpbWVDb250cm9sbGVyc0NvbnRyb2xsZXIuZGVmYXVsdCwgeyBp
bnN0YW50aWF0ZTogZmFsc2UgfSk7CisKKyAgICByZWdpc3RyeS5pbmplY3Rpb24oJ3NlcnZpY2U6
LWRvbS1oZWxwZXInLCAnZG9jdW1lbnQnLCAnc2VydmljZTotZG9jdW1lbnQnKTsKKworICAgIHJl
Z2lzdHJ5LnJlZ2lzdGVyKCctdmlldy1yZWdpc3RyeTptYWluJywgeyBjcmVhdGU6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgcmV0dXJuIHt9OworICAgICAgfSB9KTsKKworICAgIHJlZ2lzdHJ5Lmlu
amVjdGlvbigndmlldycsICdfdmlld1JlZ2lzdHJ5JywgJy12aWV3LXJlZ2lzdHJ5Om1haW4nKTsK
KworICAgIHJlZ2lzdHJ5LmluamVjdGlvbigncm91dGUnLCAnX3RvcExldmVsVmlld1RlbXBsYXRl
JywgJ3RlbXBsYXRlOi1vdXRsZXQnKTsKKworICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyKCdyb3V0ZTpi
YXNpYycsIF9lbWJlclJvdXRpbmdTeXN0ZW1Sb3V0ZS5kZWZhdWx0KTsKKyAgICByZWdpc3RyeS5y
ZWdpc3RlcignZXZlbnRfZGlzcGF0Y2hlcjptYWluJywgX2VtYmVyVmlld3NTeXN0ZW1FdmVudF9k
aXNwYXRjaGVyLmRlZmF1bHQpOworCisgICAgcmVnaXN0cnkuaW5qZWN0aW9uKCdyb3V0ZXI6bWFp
bicsICduYW1lc3BhY2UnLCAnYXBwbGljYXRpb246bWFpbicpOworICAgIHJlZ2lzdHJ5LmluamVj
dGlvbigndmlldzotb3V0bGV0JywgJ25hbWVzcGFjZScsICdhcHBsaWNhdGlvbjptYWluJyk7CisK
KyAgICByZWdpc3RyeS5yZWdpc3RlcignbG9jYXRpb246YXV0bycsIF9lbWJlclJvdXRpbmdMb2Nh
dGlvbkF1dG9fbG9jYXRpb24uZGVmYXVsdCk7CisgICAgcmVnaXN0cnkucmVnaXN0ZXIoJ2xvY2F0
aW9uOmhhc2gnLCBfZW1iZXJSb3V0aW5nTG9jYXRpb25IYXNoX2xvY2F0aW9uLmRlZmF1bHQpOwor
ICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyKCdsb2NhdGlvbjpoaXN0b3J5JywgX2VtYmVyUm91dGluZ0xv
Y2F0aW9uSGlzdG9yeV9sb2NhdGlvbi5kZWZhdWx0KTsKKyAgICByZWdpc3RyeS5yZWdpc3Rlcign
bG9jYXRpb246bm9uZScsIF9lbWJlclJvdXRpbmdMb2NhdGlvbk5vbmVfbG9jYXRpb24uZGVmYXVs
dCk7CisKKyAgICByZWdpc3RyeS5pbmplY3Rpb24oJ2NvbnRyb2xsZXInLCAndGFyZ2V0JywgJ3Jv
dXRlcjptYWluJyk7CisgICAgcmVnaXN0cnkuaW5qZWN0aW9uKCdjb250cm9sbGVyJywgJ25hbWVz
cGFjZScsICdhcHBsaWNhdGlvbjptYWluJyk7CisKKyAgICByZWdpc3RyeS5yZWdpc3RlcihfY29u
dGFpbmVyUmVnaXN0cnkucHJpdmF0aXplKF90ZW1wbGF0ZU9iamVjdCksIF9lbWJlclJvdXRpbmdT
eXN0ZW1DYWNoZS5kZWZhdWx0KTsKKyAgICByZWdpc3RyeS5pbmplY3Rpb24oJ3JvdXRlcicsICdf
YnVja2V0Q2FjaGUnLCBfY29udGFpbmVyUmVnaXN0cnkucHJpdmF0aXplKF90ZW1wbGF0ZU9iamVj
dCkpOworICAgIHJlZ2lzdHJ5LmluamVjdGlvbigncm91dGUnLCAnX2J1Y2tldENhY2hlJywgX2Nv
bnRhaW5lclJlZ2lzdHJ5LnByaXZhdGl6ZShfdGVtcGxhdGVPYmplY3QpKTsKKyAgICByZWdpc3Ry
eS5pbmplY3Rpb24oJ2NvbnRyb2xsZXInLCAnX2J1Y2tldENhY2hlJywgX2NvbnRhaW5lclJlZ2lz
dHJ5LnByaXZhdGl6ZShfdGVtcGxhdGVPYmplY3QpKTsKKworICAgIHJlZ2lzdHJ5LmluamVjdGlv
bigncm91dGUnLCAncm91dGVyJywgJ3JvdXRlcjptYWluJyk7CisKKyAgICByZWdpc3RyeS5yZWdp
c3RlcignY29tcG9uZW50Oi10ZXh0LWZpZWxkJywgX2VtYmVyVmlld3NWaWV3c1RleHRfZmllbGQu
ZGVmYXVsdCk7CisgICAgcmVnaXN0cnkucmVnaXN0ZXIoJ2NvbXBvbmVudDotdGV4dC1hcmVhJywg
X2VtYmVyVmlld3NWaWV3c1RleHRfYXJlYS5kZWZhdWx0KTsKKyAgICByZWdpc3RyeS5yZWdpc3Rl
cignY29tcG9uZW50Oi1jaGVja2JveCcsIF9lbWJlclZpZXdzVmlld3NDaGVja2JveC5kZWZhdWx0
KTsKKyAgICByZWdpc3RyeS5yZWdpc3RlcignY29tcG9uZW50OmxpbmstdG8nLCBfZW1iZXJSb3V0
aW5nVmlld3NDb21wb25lbnRzTGlua1RvLmRlZmF1bHQpOworCisgICAgLy8gUmVnaXN0ZXIgdGhl
IHJvdXRpbmcgc2VydmljZS4uLgorICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyKCdzZXJ2aWNlOi1yb3V0
aW5nJywgX2VtYmVyUm91dGluZ1NlcnZpY2VzUm91dGluZy5kZWZhdWx0KTsKKyAgICAvLyBUaGVu
IGluamVjdCB0aGUgYXBwIHJvdXRlciBpbnRvIGl0CisgICAgcmVnaXN0cnkuaW5qZWN0aW9uKCdz
ZXJ2aWNlOi1yb3V0aW5nJywgJ3JvdXRlcicsICdyb3V0ZXI6bWFpbicpOworCisgICAgLy8gREVC
VUdHSU5HCisgICAgcmVnaXN0cnkucmVnaXN0ZXIoJ3Jlc29sdmVyLWZvci1kZWJ1Z2dpbmc6bWFp
bicsIHJlZ2lzdHJ5LnJlc29sdmVyLCB7IGluc3RhbnRpYXRlOiBmYWxzZSB9KTsKKyAgICByZWdp
c3RyeS5pbmplY3Rpb24oJ2NvbnRhaW5lci1kZWJ1Zy1hZGFwdGVyOm1haW4nLCAncmVzb2x2ZXIn
LCAncmVzb2x2ZXItZm9yLWRlYnVnZ2luZzptYWluJyk7CisgICAgcmVnaXN0cnkuaW5qZWN0aW9u
KCdkYXRhLWFkYXB0ZXI6bWFpbicsICdjb250YWluZXJEZWJ1Z0FkYXB0ZXInLCAnY29udGFpbmVy
LWRlYnVnLWFkYXB0ZXI6bWFpbicpOworICAgIC8vIEN1c3RvbSByZXNvbHZlciBhdXRob3JzIG1h
eSB3YW50IHRvIHJlZ2lzdGVyIHRoZWlyIG93biBDb250YWluZXJEZWJ1Z0FkYXB0ZXIgd2l0aCB0
aGlzIGtleQorCisgICAgcmVnaXN0cnkucmVnaXN0ZXIoJ2NvbnRhaW5lci1kZWJ1Zy1hZGFwdGVy
Om1haW4nLCBfZW1iZXJFeHRlbnNpb25TdXBwb3J0Q29udGFpbmVyX2RlYnVnX2FkYXB0ZXIuZGVm
YXVsdCk7CisgIH0KKworICBmdW5jdGlvbiBnbGltbWVyU2V0dXBSZWdpc3RyeShyZWdpc3RyeSkg
eworICAgIGNvbW1vblNldHVwUmVnaXN0cnkocmVnaXN0cnkpOworCisgICAgdmFyIEVudmlyb25t
ZW50ID0gX3JlcXVpcmUyLmRlZmF1bHQoJ2VtYmVyLWdsaW1tZXIvZW52aXJvbm1lbnQnKS5kZWZh
dWx0OworICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyKCdzZXJ2aWNlOi1nbGltbWVyLWVudmlyb25tZW50
JywgRW52aXJvbm1lbnQpOworICAgIHJlZ2lzdHJ5LmluamVjdGlvbignc2VydmljZTotZ2xpbW1l
ci1lbnZpcm9ubWVudCcsICdkb20nLCAnc2VydmljZTotZG9tLWhlbHBlcicpOworICAgIHJlZ2lz
dHJ5LmluamVjdGlvbigncmVuZGVyZXInLCAnZW52JywgJ3NlcnZpY2U6LWdsaW1tZXItZW52aXJv
bm1lbnQnKTsKKworICAgIHZhciBPdXRsZXRWaWV3ID0gX3JlcXVpcmUyLmRlZmF1bHQoJ2VtYmVy
LWdsaW1tZXIvZW1iZXItcm91dGluZy12aWV3JykuT3V0bGV0VmlldzsKKyAgICByZWdpc3RyeS5y
ZWdpc3Rlcigndmlldzotb3V0bGV0JywgT3V0bGV0Vmlldyk7CisKKyAgICB2YXIgX3JlcXVpcmUg
PSBfcmVxdWlyZTIuZGVmYXVsdCgnZW1iZXItZ2xpbW1lci9lbWJlci1tZXRhbC12aWV3cycpOwor
CisgICAgdmFyIEludGVyYWN0aXZlUmVuZGVyZXIgPSBfcmVxdWlyZS5JbnRlcmFjdGl2ZVJlbmRl
cmVyOworICAgIHZhciBJbmVydFJlbmRlcmVyID0gX3JlcXVpcmUuSW5lcnRSZW5kZXJlcjsKKwor
ICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyKCdyZW5kZXJlcjotZG9tJywgSW50ZXJhY3RpdmVSZW5kZXJl
cik7CisgICAgcmVnaXN0cnkucmVnaXN0ZXIoJ3JlbmRlcmVyOi1pbmVydCcsIEluZXJ0UmVuZGVy
ZXIpOworCisgICAgdmFyIERPTUhlbHBlciA9IF9yZXF1aXJlMi5kZWZhdWx0KCdlbWJlci1nbGlt
bWVyL2RvbScpLmRlZmF1bHQ7CisKKyAgICByZWdpc3RyeS5yZWdpc3Rlcignc2VydmljZTotZG9t
LWhlbHBlcicsIHsKKyAgICAgIGNyZWF0ZTogZnVuY3Rpb24gKF9yZWYpIHsKKyAgICAgICAgdmFy
IGRvY3VtZW50ID0gX3JlZi5kb2N1bWVudDsKKyAgICAgICAgcmV0dXJuIG5ldyBET01IZWxwZXIo
ZG9jdW1lbnQpOworICAgICAgfQorICAgIH0pOworCisgICAgdmFyIGdsaW1tZXJPdXRsZXRUZW1w
bGF0ZSA9IF9yZXF1aXJlMi5kZWZhdWx0KCdlbWJlci1nbGltbWVyL3RlbXBsYXRlcy9vdXRsZXQn
KS5kZWZhdWx0OworICAgIHZhciBnbGltbWVyQ29tcG9uZW50VGVtcGxhdGUgPSBfcmVxdWlyZTIu
ZGVmYXVsdCgnZW1iZXItZ2xpbW1lci90ZW1wbGF0ZXMvY29tcG9uZW50JykuZGVmYXVsdDsKKyAg
ICByZWdpc3RyeS5yZWdpc3RlcihfY29udGFpbmVyUmVnaXN0cnkucHJpdmF0aXplKF90ZW1wbGF0
ZU9iamVjdDIpLCBnbGltbWVyQ29tcG9uZW50VGVtcGxhdGUpOworICAgIHJlZ2lzdHJ5LnJlZ2lz
dGVyKCd0ZW1wbGF0ZTotb3V0bGV0JywgZ2xpbW1lck91dGxldFRlbXBsYXRlKTsKKyAgICByZWdp
c3RyeS5pbmplY3Rpb24oJ3ZpZXc6LW91dGxldCcsICd0ZW1wbGF0ZScsICd0ZW1wbGF0ZTotb3V0
bGV0Jyk7CisgICAgcmVnaXN0cnkuaW5qZWN0aW9uKCd0ZW1wbGF0ZScsICdlbnYnLCAnc2Vydmlj
ZTotZ2xpbW1lci1lbnZpcm9ubWVudCcpOworCisgICAgcmVnaXN0cnkub3B0aW9uc0ZvclR5cGUo
J2hlbHBlcicsIHsgaW5zdGFudGlhdGU6IGZhbHNlIH0pOworICB9CisKKyAgZnVuY3Rpb24gaHRt
bGJhcnNTZXR1cFJlZ2lzdHJ5KHJlZ2lzdHJ5KSB7CisgICAgY29tbW9uU2V0dXBSZWdpc3RyeShy
ZWdpc3RyeSk7CisKKyAgICByZWdpc3RyeS5vcHRpb25zRm9yVHlwZSgndGVtcGxhdGUnLCB7IGlu
c3RhbnRpYXRlOiBmYWxzZSB9KTsKKyAgICByZWdpc3RyeS5yZWdpc3Rlcigndmlldzotb3V0bGV0
JywgX2VtYmVyUm91dGluZ1ZpZXdzVmlld3NPdXRsZXQuT3V0bGV0Vmlldyk7CisKKyAgICB2YXIg
SW50ZXJhY3RpdmVSZW5kZXJlciA9IF9lbWJlck1ldGFsVmlld3MuSW50ZXJhY3RpdmVSZW5kZXJl
cjsKKyAgICB2YXIgSW5lcnRSZW5kZXJlciA9IF9lbWJlck1ldGFsVmlld3MuSW5lcnRSZW5kZXJl
cjsKKworICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyKCdyZW5kZXJlcjotZG9tJywgSW50ZXJhY3RpdmVS
ZW5kZXJlcik7CisgICAgcmVnaXN0cnkucmVnaXN0ZXIoJ3JlbmRlcmVyOi1pbmVydCcsIEluZXJ0
UmVuZGVyZXIpOworCisgICAgcmVnaXN0cnkucmVnaXN0ZXIoJ3NlcnZpY2U6LWRvbS1oZWxwZXIn
LCB7CisgICAgICBjcmVhdGU6IGZ1bmN0aW9uIChfcmVmMikgeworICAgICAgICB2YXIgZG9jdW1l
bnQgPSBfcmVmMi5kb2N1bWVudDsKKyAgICAgICAgcmV0dXJuIG5ldyBfZW1iZXJIdG1sYmFyc1N5
c3RlbURvbUhlbHBlci5kZWZhdWx0KGRvY3VtZW50KTsKKyAgICAgIH0KKyAgICB9KTsKKworICAg
IHJlZ2lzdHJ5LnJlZ2lzdGVyKCd0ZW1wbGF0ZTotb3V0bGV0JywgX2VtYmVySHRtbGJhcnNUZW1w
bGF0ZXNUb3BMZXZlbFZpZXcuZGVmYXVsdCk7CisgICAgcmVnaXN0cnkucmVnaXN0ZXIoJ3ZpZXc6
dG9wbGV2ZWwnLCBfZW1iZXJWaWV3c1ZpZXdzVmlldy5kZWZhdWx0LmV4dGVuZCgpKTsKKyAgfQor
CisgIGZ1bmN0aW9uIHJlZ2lzdGVyTGlicmFyaWVzKCkgeworICAgIGlmICghbGlicmFyaWVzUmVn
aXN0ZXJlZCkgeworICAgICAgbGlicmFyaWVzUmVnaXN0ZXJlZCA9IHRydWU7CisKKyAgICAgIGlm
IChfZW1iZXJNZXRhbEVudmlyb25tZW50LmRlZmF1bHQuaGFzRE9NKSB7CisgICAgICAgIF9lbWJl
ck1ldGFsLmRlZmF1bHQubGlicmFyaWVzLnJlZ2lzdGVyQ29yZUxpYnJhcnkoJ2pRdWVyeScsIF9l
bWJlclZpZXdzU3lzdGVtSnF1ZXJ5LmRlZmF1bHQoKS5qcXVlcnkpOworICAgICAgfQorICAgIH0K
KyAgfQorCisgIGZ1bmN0aW9uIGxvZ0xpYnJhcnlWZXJzaW9ucygpIHsKKyAgICBpZiAoX2VtYmVy
TWV0YWwuZGVmYXVsdC5MT0dfVkVSU0lPTikgeworICAgICAgLy8gd2Ugb25seSBuZWVkIHRvIHNl
ZSB0aGlzIG9uY2UgcGVyIEFwcGxpY2F0aW9uI2luaXQKKyAgICAgIF9lbWJlck1ldGFsLmRlZmF1
bHQuTE9HX1ZFUlNJT04gPSBmYWxzZTsKKyAgICAgIHZhciBsaWJzID0gX2VtYmVyTWV0YWwuZGVm
YXVsdC5saWJyYXJpZXMuX3JlZ2lzdHJ5OworCisgICAgICB2YXIgbmFtZUxlbmd0aHMgPSBsaWJz
Lm1hcChmdW5jdGlvbiAoaXRlbSkgeworICAgICAgICByZXR1cm4gX2VtYmVyTWV0YWxQcm9wZXJ0
eV9nZXQuZ2V0KGl0ZW0sICduYW1lLmxlbmd0aCcpOworICAgICAgfSk7CisKKyAgICAgIHZhciBt
YXhOYW1lTGVuZ3RoID0gTWF0aC5tYXguYXBwbHkodGhpcywgbmFtZUxlbmd0aHMpOworCisgICAg
ICBfZW1iZXJNZXRhbERlYnVnLmRlYnVnKCctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Jyk7CisgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGxpYnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7
CisgICAgICAgIHZhciBsaWIgPSBsaWJzW2ldOworICAgICAgICB2YXIgc3BhY2VzID0gbmV3IEFy
cmF5KG1heE5hbWVMZW5ndGggLSBsaWIubmFtZS5sZW5ndGggKyAxKS5qb2luKCcgJyk7CisgICAg
ICAgIF9lbWJlck1ldGFsRGVidWcuZGVidWcoW2xpYi5uYW1lLCBzcGFjZXMsICcgOiAnLCBsaWIu
dmVyc2lvbl0uam9pbignJykpOworICAgICAgfQorICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5kZWJ1
ZygnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScpOworICAgIH0KKyAgfQorCisgIGV4
cG9ydHMuZGVmYXVsdCA9IEFwcGxpY2F0aW9uOworfSk7CisvLyBFbWJlci5saWJyYXJpZXMsIExP
R19WRVJTSU9OLCBOYW1lc3BhY2UsIEJPT1RFRAorZW5pZmVkKCdlbWJlci1hcHBsaWNhdGlvbi9z
eXN0ZW0vZW5naW5lLWluc3RhbmNlJywgWydleHBvcnRzJywgJ2VtYmVyLXJ1bnRpbWUvc3lzdGVt
L29iamVjdCcsICdjb250YWluZXIvcmVnaXN0cnknLCAnZW1iZXItcnVudGltZS9taXhpbnMvY29u
dGFpbmVyX3Byb3h5JywgJ2VtYmVyLXJ1bnRpbWUvbWl4aW5zL3JlZ2lzdHJ5X3Byb3h5JywgJ2Vt
YmVyLW1ldGFsL3J1bl9sb29wJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJSdW50aW1lU3lz
dGVtT2JqZWN0LCBfY29udGFpbmVyUmVnaXN0cnksIF9lbWJlclJ1bnRpbWVNaXhpbnNDb250YWlu
ZXJfcHJveHksIF9lbWJlclJ1bnRpbWVNaXhpbnNSZWdpc3RyeV9wcm94eSwgX2VtYmVyTWV0YWxS
dW5fbG9vcCkgeworICAvKioKKyAgQG1vZHVsZSBlbWJlcgorICBAc3VibW9kdWxlIGVtYmVyLWFw
cGxpY2F0aW9uCisgICovCisKKyAgJ3VzZSBzdHJpY3QnOworCisgIC8qKgorICAgIFRoZSBgRW5n
aW5lSW5zdGFuY2VgIGVuY2Fwc3VsYXRlcyBhbGwgb2YgdGhlIHN0YXRlZnVsIGFzcGVjdHMgb2Yg
YQorICAgIHJ1bm5pbmcgYEVuZ2luZWAuCisgIAorICAgIEBwdWJsaWMKKyAgICBAY2xhc3MgRW1i
ZXIuRW5naW5lSW5zdGFuY2UKKyAgICBAZXh0ZW5kcyBFbWJlci5PYmplY3QKKyAgICBAdXNlcyBS
ZWdpc3RyeVByb3h5TWl4aW4KKyAgICBAdXNlcyBDb250YWluZXJQcm94eU1peGluCisgICAgQGNh
dGVnb3J5IGVtYmVyLWFwcGxpY2F0aW9uLWVuZ2luZXMKKyAgKi8KKworICB2YXIgRW5naW5lSW5z
dGFuY2UgPSBfZW1iZXJSdW50aW1lU3lzdGVtT2JqZWN0LmRlZmF1bHQuZXh0ZW5kKF9lbWJlclJ1
bnRpbWVNaXhpbnNSZWdpc3RyeV9wcm94eS5kZWZhdWx0LCBfZW1iZXJSdW50aW1lTWl4aW5zQ29u
dGFpbmVyX3Byb3h5LmRlZmF1bHQsIHsKKyAgICAvKioKKyAgICAgIFRoZSBiYXNlIGBFbmdpbmVg
IGZvciB3aGljaCB0aGlzIGlzIGFuIGluc3RhbmNlLgorICAgICAgIEBwcm9wZXJ0eSB7RW1iZXIu
RW5naW5lfSBlbmdpbmUKKyAgICAgIEBwcml2YXRlCisgICAgKi8KKyAgICBiYXNlOiBudWxsLAor
CisgICAgaW5pdDogZnVuY3Rpb24gKCkgeworICAgICAgdGhpcy5fc3VwZXIuYXBwbHkodGhpcywg
YXJndW1lbnRzKTsKKworICAgICAgdmFyIGJhc2UgPSB0aGlzLmJhc2U7CisKKyAgICAgIGlmICgh
YmFzZSkgeworICAgICAgICBiYXNlID0gdGhpcy5hcHBsaWNhdGlvbjsKKyAgICAgICAgdGhpcy5i
YXNlID0gYmFzZTsKKyAgICAgIH0KKworICAgICAgLy8gQ3JlYXRlIGEgcGVyLWluc3RhbmNlIHJl
Z2lzdHJ5IHRoYXQgd2lsbCB1c2UgdGhlIGFwcGxpY2F0aW9uJ3MgcmVnaXN0cnkKKyAgICAgIC8v
IGFzIGEgZmFsbGJhY2sgZm9yIHJlc29sdmluZyByZWdpc3RyYXRpb25zLgorICAgICAgdmFyIHJl
Z2lzdHJ5ID0gdGhpcy5fX3JlZ2lzdHJ5X18gPSBuZXcgX2NvbnRhaW5lclJlZ2lzdHJ5LmRlZmF1
bHQoeworICAgICAgICBmYWxsYmFjazogYmFzZS5fX3JlZ2lzdHJ5X18KKyAgICAgIH0pOworCisg
ICAgICAvLyBDcmVhdGUgYSBwZXItaW5zdGFuY2UgY29udGFpbmVyIGZyb20gdGhlIGluc3RhbmNl
J3MgcmVnaXN0cnkKKyAgICAgIHRoaXMuX19jb250YWluZXJfXyA9IHJlZ2lzdHJ5LmNvbnRhaW5l
cih7IG93bmVyOiB0aGlzIH0pOworICAgIH0sCisKKyAgICAvKioKKyAgICAgVW5yZWdpc3RlciBh
IGZhY3RvcnkuCisgICAgICBPdmVycmlkZXMgYFJlZ2lzdHJ5UHJveHkjdW5yZWdpc3RlcmAgaW4g
b3JkZXIgdG8gY2xlYXIgYW55IGNhY2hlZCBpbnN0YW5jZXMKKyAgICAgb2YgdGhlIHVucmVnaXN0
ZXJlZCBmYWN0b3J5LgorICAgICAgQHB1YmxpYworICAgICBAbWV0aG9kIHVucmVnaXN0ZXIKKyAg
ICAgQHBhcmFtIHtTdHJpbmd9IGZ1bGxOYW1lCisgICAgICovCisgICAgdW5yZWdpc3RlcjogZnVu
Y3Rpb24gKGZ1bGxOYW1lKSB7CisgICAgICB0aGlzLl9fY29udGFpbmVyX18ucmVzZXQoZnVsbE5h
bWUpOworICAgICAgdGhpcy5fc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICB9LAor
CisgICAgLyoqCisgICAgICBAcHJpdmF0ZQorICAgICovCisgICAgd2lsbERlc3Ryb3k6IGZ1bmN0
aW9uICgpIHsKKyAgICAgIHRoaXMuX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAg
ICBfZW1iZXJNZXRhbFJ1bl9sb29wLmRlZmF1bHQodGhpcy5fX2NvbnRhaW5lcl9fLCAnZGVzdHJv
eScpOworICAgIH0KKyAgfSk7CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gRW5naW5lSW5zdGFuY2U7
Cit9KTsKK2VuaWZlZCgnZW1iZXItYXBwbGljYXRpb24vc3lzdGVtL2VuZ2luZScsIFsnZXhwb3J0
cycsICdlbWJlci1ydW50aW1lL3N5c3RlbS9uYW1lc3BhY2UnLCAnY29udGFpbmVyL3JlZ2lzdHJ5
JywgJ2VtYmVyLXJ1bnRpbWUvbWl4aW5zL3JlZ2lzdHJ5X3Byb3h5JywgJ2RhZy1tYXAnLCAnZW1i
ZXItbWV0YWwvcHJvcGVydHlfZ2V0JywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCcsICdlbWJl
ci1tZXRhbC9kZWJ1ZycsICdlbWJlci1tZXRhbC91dGlscycsICdlbWJlci1tZXRhbC9lbXB0eV9v
YmplY3QnLCAnZW1iZXItYXBwbGljYXRpb24vc3lzdGVtL3Jlc29sdmVyJywgJ2VtYmVyLWFwcGxp
Y2F0aW9uL3N5c3RlbS9lbmdpbmUtaW5zdGFuY2UnLCAnZW1iZXItbWV0YWwvZmVhdHVyZXMnLCAn
ZW1iZXItbWV0YWwvc3ltYm9sJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJSdW50aW1lU3lz
dGVtTmFtZXNwYWNlLCBfY29udGFpbmVyUmVnaXN0cnksIF9lbWJlclJ1bnRpbWVNaXhpbnNSZWdp
c3RyeV9wcm94eSwgX2RhZ01hcCwgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQsIF9lbWJlck1ldGFs
UHJvcGVydHlfc2V0LCBfZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJNZXRhbFV0aWxzLCBfZW1iZXJN
ZXRhbEVtcHR5X29iamVjdCwgX2VtYmVyQXBwbGljYXRpb25TeXN0ZW1SZXNvbHZlciwgX2VtYmVy
QXBwbGljYXRpb25TeXN0ZW1FbmdpbmVJbnN0YW5jZSwgX2VtYmVyTWV0YWxGZWF0dXJlcywgX2Vt
YmVyTWV0YWxTeW1ib2wpIHsKKyAgLyoqCisgIEBtb2R1bGUgZW1iZXIKKyAgQHN1Ym1vZHVsZSBl
bWJlci1hcHBsaWNhdGlvbgorICAqLworICAndXNlIHN0cmljdCc7CisKKyAgdmFyIEdMSU1NRVIg
PSBfZW1iZXJNZXRhbFN5bWJvbC5kZWZhdWx0KCdHTElNTUVSJyk7CisKKyAgZXhwb3J0cy5HTElN
TUVSID0gR0xJTU1FUjsKKyAgZnVuY3Rpb24gcHJvcHMob2JqKSB7CisgICAgdmFyIHByb3BlcnRp
ZXMgPSBbXTsKKworICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsKKyAgICAgIHByb3BlcnRpZXMu
cHVzaChrZXkpOworICAgIH0KKworICAgIHJldHVybiBwcm9wZXJ0aWVzOworICB9CisKKyAgLyoq
CisgICAgVGhlIGBFbmdpbmVgIGNsYXNzIGNvbnRhaW5zIGNvcmUgZnVuY3Rpb25hbGl0eSBmb3Ig
Ym90aCBhcHBsaWNhdGlvbnMgYW5kCisgICAgZW5naW5lcy4KKyAgCisgICAgRWFjaCBlbmdpbmUg
bWFuYWdlcyBhIHJlZ2lzdHJ5IHRoYXQncyB1c2VkIGZvciBkZXBlbmRlbmN5IGluamVjdGlvbiBh
bmQKKyAgICBleHBvc2VkIHRocm91Z2ggYFJlZ2lzdHJ5UHJveHlgLgorICAKKyAgICBFbmdpbmVz
IGFsc28gbWFuYWdlIGluaXRpYWxpemVycyBhbmQgaW5zdGFuY2UgaW5pdGlhbGl6ZXJzLgorICAK
KyAgICBFbmdpbmVzIGNhbiBzcGF3biBgRW5naW5lSW5zdGFuY2VgIGluc3RhbmNlcyB2aWEgYGJ1
aWxkSW5zdGFuY2UoKWAuCisgIAorICAgIEBjbGFzcyBFbmdpbmUKKyAgICBAbmFtZXNwYWNlIEVt
YmVyCisgICAgQGV4dGVuZHMgRW1iZXIuTmFtZXNwYWNlCisgICAgQHVzZXMgUmVnaXN0cnlQcm94
eQorICAgIEBjYXRlZ29yeSBlbWJlci1hcHBsaWNhdGlvbi1lbmdpbmVzCisgICAgQHB1YmxpYwor
ICAqLworICB2YXIgRW5naW5lID0gX2VtYmVyUnVudGltZVN5c3RlbU5hbWVzcGFjZS5kZWZhdWx0
LmV4dGVuZChfZW1iZXJSdW50aW1lTWl4aW5zUmVnaXN0cnlfcHJveHkuZGVmYXVsdCwgeworICAg
IGluaXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHRoaXMuX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3Vt
ZW50cyk7CisKKyAgICAgIGlmICh0aGlzW0dMSU1NRVJdID09PSB1bmRlZmluZWQpIHsKKyAgICAg
ICAgdGhpc1tHTElNTUVSXSA9IF9lbWJlck1ldGFsRmVhdHVyZXMuZGVmYXVsdCgnZW1iZXItZ2xp
bW1lcicpOworICAgICAgfQorCisgICAgICB0aGlzLmJ1aWxkUmVnaXN0cnkoKTsKKyAgICB9LAor
CisgICAgLyoqCisgICAgICBDcmVhdGUgYW4gRW5naW5lSW5zdGFuY2UgZm9yIHRoaXMgYXBwbGlj
YXRpb24uCisgICAgICAgQHByaXZhdGUKKyAgICAgIEBtZXRob2QgYnVpbGRJbnN0YW5jZQorICAg
ICAgQHJldHVybiB7RW1iZXIuRW5naW5lSW5zdGFuY2V9IHRoZSBhcHBsaWNhdGlvbiBpbnN0YW5j
ZQorICAgICovCisgICAgYnVpbGRJbnN0YW5jZTogZnVuY3Rpb24gKCkgeworICAgICAgdmFyIG9w
dGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDAgfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmlu
ZWQgPyB7fSA6IGFyZ3VtZW50c1swXTsKKworICAgICAgb3B0aW9ucy5iYXNlID0gdGhpczsKKyAg
ICAgIHJldHVybiBfZW1iZXJBcHBsaWNhdGlvblN5c3RlbUVuZ2luZUluc3RhbmNlLmRlZmF1bHQu
Y3JlYXRlKG9wdGlvbnMpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgIEJ1aWxkIGFuZCBjb25m
aWd1cmUgdGhlIHJlZ2lzdHJ5IGZvciB0aGUgY3VycmVudCBhcHBsaWNhdGlvbi4KKyAgICAgICBA
cHJpdmF0ZQorICAgICAgQG1ldGhvZCBidWlsZFJlZ2lzdHJ5CisgICAgICBAcmV0dXJuIHtFbWJl
ci5SZWdpc3RyeX0gdGhlIGNvbmZpZ3VyZWQgcmVnaXN0cnkKKyAgICAqLworICAgIGJ1aWxkUmVn
aXN0cnk6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciBfY29uc3RydWN0b3IkYnVpbGRSZWdpc3Ry
eTsKKworICAgICAgdmFyIHJlZ2lzdHJ5ID0gdGhpcy5fX3JlZ2lzdHJ5X18gPSB0aGlzLmNvbnN0
cnVjdG9yLmJ1aWxkUmVnaXN0cnkodGhpcywgKF9jb25zdHJ1Y3RvciRidWlsZFJlZ2lzdHJ5ID0g
e30sIF9jb25zdHJ1Y3RvciRidWlsZFJlZ2lzdHJ5W0dMSU1NRVJdID0gdGhpc1tHTElNTUVSXSwg
X2NvbnN0cnVjdG9yJGJ1aWxkUmVnaXN0cnkpKTsKKworICAgICAgcmV0dXJuIHJlZ2lzdHJ5Owor
ICAgIH0sCisKKyAgICAvKioKKyAgICAgIEBwcml2YXRlCisgICAgICBAbWV0aG9kIGluaXRpYWxp
emVyCisgICAgKi8KKyAgICBpbml0aWFsaXplcjogZnVuY3Rpb24gKG9wdGlvbnMpIHsKKyAgICAg
IHRoaXMuY29uc3RydWN0b3IuaW5pdGlhbGl6ZXIob3B0aW9ucyk7CisgICAgfSwKKworICAgIC8q
KgorICAgICAgQHByaXZhdGUKKyAgICAgIEBtZXRob2QgaW5zdGFuY2VJbml0aWFsaXplcgorICAg
ICovCisgICAgaW5zdGFuY2VJbml0aWFsaXplcjogZnVuY3Rpb24gKG9wdGlvbnMpIHsKKyAgICAg
IHRoaXMuY29uc3RydWN0b3IuaW5zdGFuY2VJbml0aWFsaXplcihvcHRpb25zKTsKKyAgICB9LAor
CisgICAgLyoqCisgICAgICBAcHJpdmF0ZQorICAgICAgQG1ldGhvZCBydW5Jbml0aWFsaXplcnMK
KyAgICAqLworICAgIHJ1bkluaXRpYWxpemVyczogZnVuY3Rpb24gKCkgeworICAgICAgdmFyIF90
aGlzID0gdGhpczsKKworICAgICAgdGhpcy5fcnVuSW5pdGlhbGl6ZXIoJ2luaXRpYWxpemVycycs
IGZ1bmN0aW9uIChuYW1lLCBpbml0aWFsaXplcikgeworICAgICAgICBfZW1iZXJNZXRhbERlYnVn
LmFzc2VydCgnTm8gYXBwbGljYXRpb24gaW5pdGlhbGl6ZXIgbmFtZWQgXCcnICsgbmFtZSArICdc
JycsICEhaW5pdGlhbGl6ZXIpOworICAgICAgICBpZiAoaW5pdGlhbGl6ZXIuaW5pdGlhbGl6ZS5s
ZW5ndGggPT09IDIpIHsKKyAgICAgICAgICBfZW1iZXJNZXRhbERlYnVnLmRlcHJlY2F0ZSgnVGhl
IGBpbml0aWFsaXplYCBtZXRob2QgZm9yIEFwcGxpY2F0aW9uIGluaXRpYWxpemVyIFwnJyArIG5h
bWUgKyAnXCcgc2hvdWxkIHRha2Ugb25seSBvbmUgYXJndW1lbnQgLSBgQXBwYCwgYW4gaW5zdGFu
Y2Ugb2YgYW4gYEFwcGxpY2F0aW9uYC4nLCBmYWxzZSwgeworICAgICAgICAgICAgaWQ6ICdlbWJl
ci1hcHBsaWNhdGlvbi5hcHAtaW5pdGlhbGl6ZXItaW5pdGlhbGl6ZS1hcmd1bWVudHMnLAorICAg
ICAgICAgICAgdW50aWw6ICczLjAuMCcsCisgICAgICAgICAgICB1cmw6ICdodHRwOi8vZW1iZXJq
cy5jb20vZGVwcmVjYXRpb25zL3YyLngvI3RvY19pbml0aWFsaXplci1hcml0eScKKyAgICAgICAg
ICB9KTsKKworICAgICAgICAgIGluaXRpYWxpemVyLmluaXRpYWxpemUoX3RoaXMuX19yZWdpc3Ry
eV9fLCBfdGhpcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgaW5pdGlhbGl6ZXIuaW5p
dGlhbGl6ZShfdGhpcyk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0sCisKKyAgICAvKioK
KyAgICAgIEBwcml2YXRlCisgICAgICBAc2luY2UgMS4xMi4wCisgICAgICBAbWV0aG9kIHJ1bklu
c3RhbmNlSW5pdGlhbGl6ZXJzCisgICAgKi8KKyAgICBydW5JbnN0YW5jZUluaXRpYWxpemVyczog
ZnVuY3Rpb24gKGluc3RhbmNlKSB7CisgICAgICB0aGlzLl9ydW5Jbml0aWFsaXplcignaW5zdGFu
Y2VJbml0aWFsaXplcnMnLCBmdW5jdGlvbiAobmFtZSwgaW5pdGlhbGl6ZXIpIHsKKyAgICAgICAg
X2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ05vIGluc3RhbmNlIGluaXRpYWxpemVyIG5hbWVkIFwn
JyArIG5hbWUgKyAnXCcnLCAhIWluaXRpYWxpemVyKTsKKyAgICAgICAgaW5pdGlhbGl6ZXIuaW5p
dGlhbGl6ZShpbnN0YW5jZSk7CisgICAgICB9KTsKKyAgICB9LAorCisgICAgX3J1bkluaXRpYWxp
emVyOiBmdW5jdGlvbiAoYnVja2V0TmFtZSwgY2IpIHsKKyAgICAgIHZhciBpbml0aWFsaXplcnNC
eU5hbWUgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcy5jb25zdHJ1Y3RvciwgYnVj
a2V0TmFtZSk7CisgICAgICB2YXIgaW5pdGlhbGl6ZXJzID0gcHJvcHMoaW5pdGlhbGl6ZXJzQnlO
YW1lKTsKKyAgICAgIHZhciBncmFwaCA9IG5ldyBfZGFnTWFwLmRlZmF1bHQoKTsKKyAgICAgIHZh
ciBpbml0aWFsaXplcjsKKworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbml0aWFsaXplcnMu
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaW5pdGlhbGl6ZXIgPSBpbml0aWFsaXplcnNCeU5hbWVb
aW5pdGlhbGl6ZXJzW2ldXTsKKyAgICAgICAgZ3JhcGguYWRkRWRnZXMoaW5pdGlhbGl6ZXIubmFt
ZSwgaW5pdGlhbGl6ZXIsIGluaXRpYWxpemVyLmJlZm9yZSwgaW5pdGlhbGl6ZXIuYWZ0ZXIpOwor
ICAgICAgfQorCisgICAgICBncmFwaC50b3Bzb3J0KGZ1bmN0aW9uICh2ZXJ0ZXgpIHsKKyAgICAg
ICAgY2IodmVydGV4Lm5hbWUsIHZlcnRleC52YWx1ZSk7CisgICAgICB9KTsKKyAgICB9CisgIH0p
OworCisgIEVuZ2luZS5yZW9wZW5DbGFzcyh7CisgICAgaW5pdGlhbGl6ZXJzOiBuZXcgX2VtYmVy
TWV0YWxFbXB0eV9vYmplY3QuZGVmYXVsdCgpLAorICAgIGluc3RhbmNlSW5pdGlhbGl6ZXJzOiBu
ZXcgX2VtYmVyTWV0YWxFbXB0eV9vYmplY3QuZGVmYXVsdCgpLAorCisgICAgLyoqCisgICAgICBU
aGUgZ29hbCBvZiBpbml0aWFsaXplcnMgc2hvdWxkIGJlIHRvIHJlZ2lzdGVyIGRlcGVuZGVuY2ll
cyBhbmQgaW5qZWN0aW9ucy4KKyAgICAgIFRoaXMgcGhhc2UgcnVucyBvbmNlLiBCZWNhdXNlIHRo
ZXNlIGluaXRpYWxpemVycyBtYXkgbG9hZCBjb2RlLCB0aGV5IGFyZQorICAgICAgYWxsb3dlZCB0
byBkZWZlciBhcHBsaWNhdGlvbiByZWFkaW5lc3MgYW5kIGFkdmFuY2UgaXQuIElmIHlvdSBuZWVk
IHRvIGFjY2VzcworICAgICAgdGhlIGNvbnRhaW5lciBvciBzdG9yZSB5b3Ugc2hvdWxkIHVzZSBh
biBJbnN0YW5jZUluaXRpYWxpemVyIHRoYXQgd2lsbCBiZSBydW4KKyAgICAgIGFmdGVyIGFsbCBp
bml0aWFsaXplcnMgYW5kIHRoZXJlZm9yZSBhZnRlciBhbGwgY29kZSBpcyBsb2FkZWQgYW5kIHRo
ZSBhcHAgaXMKKyAgICAgIHJlYWR5LgorICAgICAgIEluaXRpYWxpemVyIHJlY2VpdmVzIGFuIG9i
amVjdCB3aGljaCBoYXMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOgorICAgICAgYG5hbWVgLCBg
YmVmb3JlYCwgYGFmdGVyYCwgYGluaXRpYWxpemVgLiBUaGUgb25seSByZXF1aXJlZCBhdHRyaWJ1
dGUgaXMKKyAgICAgIGBpbml0aWFsaXplYCwgYWxsIG90aGVycyBhcmUgb3B0aW9uYWwuCisgICAg
ICAgKiBgbmFtZWAgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHVuZGVyIHdoaWNoIG5hbWUgdGhlIGlu
aXRpYWxpemVyIGlzIHJlZ2lzdGVyZWQuCisgICAgICBUaGlzIG11c3QgYmUgYSB1bmlxdWUgbmFt
ZSwgYXMgdHJ5aW5nIHRvIHJlZ2lzdGVyIHR3byBpbml0aWFsaXplcnMgd2l0aCB0aGUKKyAgICAg
IHNhbWUgbmFtZSB3aWxsIHJlc3VsdCBpbiBhbiBlcnJvci4KKyAgICAgICBgYGBqYXZhc2NyaXB0
CisgICAgICBFbWJlci5BcHBsaWNhdGlvbi5pbml0aWFsaXplcih7CisgICAgICAgIG5hbWU6ICdu
YW1lZEluaXRpYWxpemVyJywKKyAgICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGFwcGxpY2F0
aW9uKSB7CisgICAgICAgICAgRW1iZXIuZGVidWcoJ1J1bm5pbmcgbmFtZWRJbml0aWFsaXplciEn
KTsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgICBgYGAKKyAgICAgICAqIGBiZWZvcmVgIGFu
ZCBgYWZ0ZXJgIGFyZSB1c2VkIHRvIGVuc3VyZSB0aGF0IHRoaXMgaW5pdGlhbGl6ZXIgaXMgcmFu
IHByaW9yCisgICAgICBvciBhZnRlciB0aGUgb25lIGlkZW50aWZpZWQgYnkgdGhlIHZhbHVlLiBU
aGlzIHZhbHVlIGNhbiBiZSBhIHNpbmdsZSBzdHJpbmcKKyAgICAgIG9yIGFuIGFycmF5IG9mIHN0
cmluZ3MsIHJlZmVyZW5jaW5nIHRoZSBgbmFtZWAgb2Ygb3RoZXIgaW5pdGlhbGl6ZXJzLgorICAg
ICAgIEFuIGV4YW1wbGUgb2Ygb3JkZXJpbmcgaW5pdGlhbGl6ZXJzLCB3ZSBjcmVhdGUgYW4gaW5p
dGlhbGl6ZXIgbmFtZWQgYGZpcnN0YDoKKyAgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICBFbWJl
ci5BcHBsaWNhdGlvbi5pbml0aWFsaXplcih7CisgICAgICAgIG5hbWU6ICdmaXJzdCcsCisgICAg
ICAgICBpbml0aWFsaXplOiBmdW5jdGlvbihhcHBsaWNhdGlvbikgeworICAgICAgICAgIEVtYmVy
LmRlYnVnKCdGaXJzdCBpbml0aWFsaXplciEnKTsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAg
ICAgLy8gREVCVUc6IEZpcnN0IGluaXRpYWxpemVyIQorICAgICAgYGBgCisgICAgICAgV2UgYWRk
IGFub3RoZXIgaW5pdGlhbGl6ZXIgbmFtZWQgYHNlY29uZGAsIHNwZWNpZnlpbmcgdGhhdCBpdCBz
aG91bGQgcnVuCisgICAgICBhZnRlciB0aGUgaW5pdGlhbGl6ZXIgbmFtZWQgYGZpcnN0YDoKKyAg
ICAgICBgYGBqYXZhc2NyaXB0CisgICAgICBFbWJlci5BcHBsaWNhdGlvbi5pbml0aWFsaXplcih7
CisgICAgICAgIG5hbWU6ICdzZWNvbmQnLAorICAgICAgICBhZnRlcjogJ2ZpcnN0JywKKyAgICAg
ICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGFwcGxpY2F0aW9uKSB7CisgICAgICAgICAgRW1iZXIu
ZGVidWcoJ1NlY29uZCBpbml0aWFsaXplciEnKTsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAg
ICAgLy8gREVCVUc6IEZpcnN0IGluaXRpYWxpemVyIQorICAgICAgLy8gREVCVUc6IFNlY29uZCBp
bml0aWFsaXplciEKKyAgICAgIGBgYAorICAgICAgIEFmdGVyd2FyZHMgd2UgYWRkIGEgZnVydGhl
ciBpbml0aWFsaXplciBuYW1lZCBgcHJlYCwgdGhpcyB0aW1lIHNwZWNpZnlpbmcKKyAgICAgIHRo
YXQgaXQgc2hvdWxkIHJ1biBiZWZvcmUgdGhlIGluaXRpYWxpemVyIG5hbWVkIGBmaXJzdGA6Cisg
ICAgICAgYGBgamF2YXNjcmlwdAorICAgICAgRW1iZXIuQXBwbGljYXRpb24uaW5pdGlhbGl6ZXIo
eworICAgICAgICBuYW1lOiAncHJlJywKKyAgICAgICAgYmVmb3JlOiAnZmlyc3QnLAorICAgICAg
ICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oYXBwbGljYXRpb24pIHsKKyAgICAgICAgICBFbWJlci5k
ZWJ1ZygnUHJlIGluaXRpYWxpemVyIScpOworICAgICAgICB9CisgICAgICB9KTsKKyAgICAgICAv
LyBERUJVRzogUHJlIGluaXRpYWxpemVyIQorICAgICAgLy8gREVCVUc6IEZpcnN0IGluaXRpYWxp
emVyIQorICAgICAgLy8gREVCVUc6IFNlY29uZCBpbml0aWFsaXplciEKKyAgICAgIGBgYAorICAg
ICAgIEZpbmFsbHkgd2UgYWRkIGFuIGluaXRpYWxpemVyIG5hbWVkIGBwb3N0YCwgc3BlY2lmeWlu
ZyBpdCBzaG91bGQgcnVuIGFmdGVyCisgICAgICBib3RoIHRoZSBgZmlyc3RgIGFuZCB0aGUgYHNl
Y29uZGAgaW5pdGlhbGl6ZXJzOgorICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgIEVtYmVyLkFw
cGxpY2F0aW9uLmluaXRpYWxpemVyKHsKKyAgICAgICAgbmFtZTogJ3Bvc3QnLAorICAgICAgICBh
ZnRlcjogWydmaXJzdCcsICdzZWNvbmQnXSwKKyAgICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9u
KGFwcGxpY2F0aW9uKSB7CisgICAgICAgICAgRW1iZXIuZGVidWcoJ1Bvc3QgaW5pdGlhbGl6ZXIh
Jyk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgICAgIC8vIERFQlVHOiBQcmUgaW5pdGlhbGl6
ZXIhCisgICAgICAvLyBERUJVRzogRmlyc3QgaW5pdGlhbGl6ZXIhCisgICAgICAvLyBERUJVRzog
U2Vjb25kIGluaXRpYWxpemVyIQorICAgICAgLy8gREVCVUc6IFBvc3QgaW5pdGlhbGl6ZXIhCisg
ICAgICBgYGAKKyAgICAgICAqIGBpbml0aWFsaXplYCBpcyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRo
YXQgcmVjZWl2ZXMgb25lIGFyZ3VtZW50LAorICAgICAgICBgYXBwbGljYXRpb25gLCBvbiB3aGlj
aCB5b3UgY2FuIG9wZXJhdGUuCisgICAgICAgRXhhbXBsZSBvZiB1c2luZyBgYXBwbGljYXRpb25g
IHRvIHJlZ2lzdGVyIGFuIGFkYXB0ZXI6CisgICAgICAgYGBgamF2YXNjcmlwdAorICAgICAgRW1i
ZXIuQXBwbGljYXRpb24uaW5pdGlhbGl6ZXIoeworICAgICAgICBuYW1lOiAnYXBpLWFkYXB0ZXIn
LAorICAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oYXBwbGljYXRpb24pIHsKKyAgICAgICAg
ICBhcHBsaWNhdGlvbi5yZWdpc3RlcignYXBpLWFkYXB0ZXI6bWFpbicsIEFwaUFkYXB0ZXIpOwor
ICAgICAgICB9CisgICAgICB9KTsKKyAgICAgIGBgYAorICAgICAgIEBtZXRob2QgaW5pdGlhbGl6
ZXIKKyAgICAgIEBwYXJhbSBpbml0aWFsaXplciB7T2JqZWN0fQorICAgICAgQHB1YmxpYworICAg
ICovCisKKyAgICBpbml0aWFsaXplcjogYnVpbGRJbml0aWFsaXplck1ldGhvZCgnaW5pdGlhbGl6
ZXJzJywgJ2luaXRpYWxpemVyJyksCisKKyAgICAvKioKKyAgICAgIEluc3RhbmNlIGluaXRpYWxp
emVycyBydW4gYWZ0ZXIgYWxsIGluaXRpYWxpemVycyBoYXZlIHJ1bi4gQmVjYXVzZQorICAgICAg
aW5zdGFuY2UgaW5pdGlhbGl6ZXJzIHJ1biBhZnRlciB0aGUgYXBwIGlzIGZ1bGx5IHNldCB1cC4g
V2UgaGF2ZSBhY2Nlc3MKKyAgICAgIHRvIHRoZSBzdG9yZSwgY29udGFpbmVyLCBhbmQgb3RoZXIg
aXRlbXMuIEhvd2V2ZXIsIHRoZXNlIGluaXRpYWxpemVycyBydW4KKyAgICAgIGFmdGVyIGNvZGUg
aGFzIGxvYWRlZCBhbmQgYXJlIG5vdCBhbGxvd2VkIHRvIGRlZmVyIHJlYWRpbmVzcy4KKyAgICAg
ICBJbnN0YW5jZSBpbml0aWFsaXplciByZWNlaXZlcyBhbiBvYmplY3Qgd2hpY2ggaGFzIHRoZSBm
b2xsb3dpbmcgYXR0cmlidXRlczoKKyAgICAgIGBuYW1lYCwgYGJlZm9yZWAsIGBhZnRlcmAsIGBp
bml0aWFsaXplYC4gVGhlIG9ubHkgcmVxdWlyZWQgYXR0cmlidXRlIGlzCisgICAgICBgaW5pdGlh
bGl6ZWAsIGFsbCBvdGhlcnMgYXJlIG9wdGlvbmFsLgorICAgICAgICogYG5hbWVgIGFsbG93cyB5
b3UgdG8gc3BlY2lmeSB1bmRlciB3aGljaCBuYW1lIHRoZSBpbnN0YW5jZUluaXRpYWxpemVyIGlz
CisgICAgICByZWdpc3RlcmVkLiBUaGlzIG11c3QgYmUgYSB1bmlxdWUgbmFtZSwgYXMgdHJ5aW5n
IHRvIHJlZ2lzdGVyIHR3bworICAgICAgaW5zdGFuY2VJbml0aWFsaXplciB3aXRoIHRoZSBzYW1l
IG5hbWUgd2lsbCByZXN1bHQgaW4gYW4gZXJyb3IuCisgICAgICAgYGBgamF2YXNjcmlwdAorICAg
ICAgRW1iZXIuQXBwbGljYXRpb24uaW5zdGFuY2VJbml0aWFsaXplcih7CisgICAgICAgIG5hbWU6
ICduYW1lZGluc3RhbmNlSW5pdGlhbGl6ZXInLAorICAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rp
b24oYXBwbGljYXRpb24pIHsKKyAgICAgICAgICBFbWJlci5kZWJ1ZygnUnVubmluZyBuYW1lZElu
aXRpYWxpemVyIScpOworICAgICAgICB9CisgICAgICB9KTsKKyAgICAgIGBgYAorICAgICAgICog
YGJlZm9yZWAgYW5kIGBhZnRlcmAgYXJlIHVzZWQgdG8gZW5zdXJlIHRoYXQgdGhpcyBpbml0aWFs
aXplciBpcyByYW4gcHJpb3IKKyAgICAgIG9yIGFmdGVyIHRoZSBvbmUgaWRlbnRpZmllZCBieSB0
aGUgdmFsdWUuIFRoaXMgdmFsdWUgY2FuIGJlIGEgc2luZ2xlIHN0cmluZworICAgICAgb3IgYW4g
YXJyYXkgb2Ygc3RyaW5ncywgcmVmZXJlbmNpbmcgdGhlIGBuYW1lYCBvZiBvdGhlciBpbml0aWFs
aXplcnMuCisgICAgICAgKiBTZWUgRW1iZXIuQXBwbGljYXRpb24uaW5pdGlhbGl6ZXIgZm9yIGRp
c2N1c3Npb24gb24gdGhlIHVzYWdlIG9mIGJlZm9yZQorICAgICAgYW5kIGFmdGVyLgorICAgICAg
IEV4YW1wbGUgaW5zdGFuY2VJbml0aWFsaXplciB0byBwcmVsb2FkIGRhdGEgaW50byB0aGUgc3Rv
cmUuCisgICAgICAgYGBgamF2YXNjcmlwdAorICAgICAgRW1iZXIuQXBwbGljYXRpb24uaW5pdGlh
bGl6ZXIoeworICAgICAgICBuYW1lOiAncHJlbG9hZC1kYXRhJywKKyAgICAgICAgIGluaXRpYWxp
emU6IGZ1bmN0aW9uKGFwcGxpY2F0aW9uKSB7CisgICAgICAgICAgdmFyIHVzZXJDb25maWcsIHVz
ZXJDb25maWdFbmNvZGVkLCBzdG9yZTsKKyAgICAgICAgICAvLyBXZSBoYXZlIGEgSFRNTCBlc2Nh
cGVkIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIHVzZXIncyBiYXNpYworICAgICAgICAgIC8v
IGNvbmZpZ3VyYXRpb24gZ2VuZXJhdGVkIHNlcnZlciBzaWRlIGFuZCBzdG9yZWQgaW4gdGhlIERP
TSBvZiB0aGUgbWFpbgorICAgICAgICAgIC8vIGluZGV4Lmh0bWwgZmlsZS4gVGhpcyBhbGxvd3Mg
dGhlIGFwcCB0byBoYXZlIGFjY2VzcyB0byBhIHNldCBvZiBkYXRhCisgICAgICAgICAgLy8gd2l0
aG91dCBtYWtpbmcgYW55IGFkZGl0aW9uYWwgcmVtb3RlIGNhbGxzLiBHb29kIGZvciBiYXNpYyBk
YXRhIHRoYXQgaXMKKyAgICAgICAgICAvLyBuZWVkZWQgZm9yIGltbWVkaWF0ZSByZW5kZXJpbmcg
b2YgdGhlIHBhZ2UuIEtlZXAgaW4gbWluZCwgdGhpcyBkYXRhLAorICAgICAgICAgIC8vIGxpa2Ug
YWxsIGxvY2FsIG1vZGVscyBhbmQgZGF0YSBjYW4gYmUgbWFuaXB1bGF0ZWQgYnkgdGhlIHVzZXIs
IHNvIGl0CisgICAgICAgICAgLy8gc2hvdWxkIG5vdCBiZSByZWxpZWQgdXBvbiBmb3Igc2VjdXJp
dHkgb3IgYXV0aG9yaXphdGlvbi4KKyAgICAgICAgICAvLworICAgICAgICAgIC8vIEdyYWIgdGhl
IGVuY29kZWQgZGF0YSBmcm9tIHRoZSBtZXRhIHRhZworICAgICAgICAgIHVzZXJDb25maWdFbmNv
ZGVkID0gRW1iZXIuJCgnaGVhZCBtZXRhW25hbWU9YXBwLXVzZXItY29uZmlnXScpLmF0dHIoJ2Nv
bnRlbnQnKTsKKyAgICAgICAgICAvLyBVbmVzY2FwZSB0aGUgdGV4dCwgdGhlbiBwYXJzZSB0aGUg
cmVzdWx0aW5nIEpTT04gaW50byBhIHJlYWwgb2JqZWN0CisgICAgICAgICAgdXNlckNvbmZpZyA9
IEpTT04ucGFyc2UodW5lc2NhcGUodXNlckNvbmZpZ0VuY29kZWQpKTsKKyAgICAgICAgICAvLyBM
b29rdXAgdGhlIHN0b3JlCisgICAgICAgICAgc3RvcmUgPSBhcHBsaWNhdGlvbi5sb29rdXAoJ3Nl
cnZpY2U6c3RvcmUnKTsKKyAgICAgICAgICAvLyBQdXNoIHRoZSBlbmNvZGVkIEpTT04gaW50byB0
aGUgc3RvcmUKKyAgICAgICAgICBzdG9yZS5wdXNoUGF5bG9hZCh1c2VyQ29uZmlnKTsKKyAgICAg
ICAgfQorICAgICAgfSk7CisgICAgICBgYGAKKyAgICAgICBAbWV0aG9kIGluc3RhbmNlSW5pdGlh
bGl6ZXIKKyAgICAgIEBwYXJhbSBpbnN0YW5jZUluaXRpYWxpemVyCisgICAgICBAcHVibGljCisg
ICAgKi8KKyAgICBpbnN0YW5jZUluaXRpYWxpemVyOiBidWlsZEluaXRpYWxpemVyTWV0aG9kKCdp
bnN0YW5jZUluaXRpYWxpemVycycsICdpbnN0YW5jZSBpbml0aWFsaXplcicpLAorCisgICAgLyoq
CisgICAgICBUaGlzIGNyZWF0ZXMgYSByZWdpc3RyeSB3aXRoIHRoZSBkZWZhdWx0IEVtYmVyIG5h
bWluZyBjb252ZW50aW9ucy4KKyAgICAgICBJdCBhbHNvIGNvbmZpZ3VyZXMgdGhlIHJlZ2lzdHJ5
OgorICAgICAgICogcmVnaXN0ZXJlZCB2aWV3cyBhcmUgY3JlYXRlZCBldmVyeSB0aW1lIHRoZXkg
YXJlIGxvb2tlZCB1cCAodGhleSBhcmUKKyAgICAgICAgbm90IHNpbmdsZXRvbnMpCisgICAgICAq
IHJlZ2lzdGVyZWQgdGVtcGxhdGVzIGFyZSBub3QgZmFjdG9yaWVzOyB0aGUgcmVnaXN0ZXJlZCB2
YWx1ZSBpcworICAgICAgICByZXR1cm5lZCBkaXJlY3RseS4KKyAgICAgICogdGhlIHJvdXRlciBy
ZWNlaXZlcyB0aGUgYXBwbGljYXRpb24gYXMgaXRzIGBuYW1lc3BhY2VgIHByb3BlcnR5CisgICAg
ICAqIGFsbCBjb250cm9sbGVycyByZWNlaXZlIHRoZSByb3V0ZXIgYXMgdGhlaXIgYHRhcmdldGAg
YW5kIGBjb250cm9sbGVyc2AKKyAgICAgICAgcHJvcGVydGllcworICAgICAgKiBhbGwgY29udHJv
bGxlcnMgcmVjZWl2ZSB0aGUgYXBwbGljYXRpb24gYXMgdGhlaXIgYG5hbWVzcGFjZWAgcHJvcGVy
dHkKKyAgICAgICogdGhlIGFwcGxpY2F0aW9uIHZpZXcgcmVjZWl2ZXMgdGhlIGFwcGxpY2F0aW9u
IGNvbnRyb2xsZXIgYXMgaXRzCisgICAgICAgIGBjb250cm9sbGVyYCBwcm9wZXJ0eQorICAgICAg
KiB0aGUgYXBwbGljYXRpb24gdmlldyByZWNlaXZlcyB0aGUgYXBwbGljYXRpb24gdGVtcGxhdGUg
YXMgaXRzCisgICAgICAgIGBkZWZhdWx0VGVtcGxhdGVgIHByb3BlcnR5CisgICAgICAgQHByaXZh
dGUKKyAgICAgIEBtZXRob2QgYnVpbGRSZWdpc3RyeQorICAgICAgQHN0YXRpYworICAgICAgQHBh
cmFtIHtFbWJlci5BcHBsaWNhdGlvbn0gbmFtZXNwYWNlIHRoZSBhcHBsaWNhdGlvbiBmb3Igd2hp
Y2ggdG8KKyAgICAgICAgYnVpbGQgdGhlIHJlZ2lzdHJ5CisgICAgICBAcmV0dXJuIHtFbWJlci5S
ZWdpc3RyeX0gdGhlIGJ1aWx0IHJlZ2lzdHJ5CisgICAgICBAcHVibGljCisgICAgKi8KKyAgICBi
dWlsZFJlZ2lzdHJ5OiBmdW5jdGlvbiAobmFtZXNwYWNlKSB7CisgICAgICB2YXIgcmVnaXN0cnkg
PSBuZXcgX2NvbnRhaW5lclJlZ2lzdHJ5LmRlZmF1bHQoeworICAgICAgICByZXNvbHZlcjogcmVz
b2x2ZXJGb3IobmFtZXNwYWNlKQorICAgICAgfSk7CisKKyAgICAgIHJlZ2lzdHJ5LnNldCA9IF9l
bWJlck1ldGFsUHJvcGVydHlfc2V0LnNldDsKKworICAgICAgcmV0dXJuIHJlZ2lzdHJ5OworICAg
IH0sCisKKyAgICAvKioKKyAgICAgIFNldCB0aGlzIHRvIHByb3ZpZGUgYW4gYWx0ZXJuYXRlIGNs
YXNzIHRvIGBFbWJlci5EZWZhdWx0UmVzb2x2ZXJgCisgICAgICAgIEBkZXByZWNhdGVkIFVzZSAn
UmVzb2x2ZXInIGluc3RlYWQKKyAgICAgIEBwcm9wZXJ0eSByZXNvbHZlcgorICAgICAgQHB1Ymxp
YworICAgICovCisgICAgcmVzb2x2ZXI6IG51bGwsCisKKyAgICAvKioKKyAgICAgIFNldCB0aGlz
IHRvIHByb3ZpZGUgYW4gYWx0ZXJuYXRlIGNsYXNzIHRvIGBFbWJlci5EZWZhdWx0UmVzb2x2ZXJg
CisgICAgICAgQHByb3BlcnR5IHJlc29sdmVyCisgICAgICBAcHVibGljCisgICAgKi8KKyAgICBS
ZXNvbHZlcjogbnVsbAorICB9KTsKKworICAvKioKKyAgICBUaGlzIGZ1bmN0aW9uIGRlZmluZXMg
dGhlIGRlZmF1bHQgbG9va3VwIHJ1bGVzIGZvciBjb250YWluZXIgbG9va3VwczoKKyAgCisgICAg
KiB0ZW1wbGF0ZXMgYXJlIGxvb2tlZCB1cCBvbiBgRW1iZXIuVEVNUExBVEVTYAorICAgICogb3Ro
ZXIgbmFtZXMgYXJlIGxvb2tlZCB1cCBvbiB0aGUgYXBwbGljYXRpb24gYWZ0ZXIgY2xhc3NpZnlp
bmcgdGhlIG5hbWUuCisgICAgICBGb3IgZXhhbXBsZSwgYGNvbnRyb2xsZXI6cG9zdGAgbG9va3Mg
dXAgYEFwcC5Qb3N0Q29udHJvbGxlcmAgYnkgZGVmYXVsdC4KKyAgICAqIGlmIHRoZSBkZWZhdWx0
IGxvb2t1cCBmYWlscywgbG9vayBmb3IgcmVnaXN0ZXJlZCBjbGFzc2VzIG9uIHRoZSBjb250YWlu
ZXIKKyAgCisgICAgVGhpcyBhbGxvd3MgdGhlIGFwcGxpY2F0aW9uIHRvIHJlZ2lzdGVyIGRlZmF1
bHQgaW5qZWN0aW9ucyBpbiB0aGUgY29udGFpbmVyCisgICAgdGhhdCBjb3VsZCBiZSBvdmVycmlk
ZGVuIGJ5IHRoZSBub3JtYWwgbmFtaW5nIGNvbnZlbnRpb24uCisgIAorICAgIEBwcml2YXRlCisg
ICAgQG1ldGhvZCByZXNvbHZlckZvcgorICAgIEBwYXJhbSB7RW1iZXIuTmFtZXNwYWNlfSBuYW1l
c3BhY2UgdGhlIG5hbWVzcGFjZSB0byBsb29rIGZvciBjbGFzc2VzCisgICAgQHJldHVybiB7Kn0g
dGhlIHJlc29sdmVkIHZhbHVlIGZvciBhIGdpdmVuIGxvb2t1cAorICAqLworICBmdW5jdGlvbiBy
ZXNvbHZlckZvcihuYW1lc3BhY2UpIHsKKyAgICB2YXIgUmVzb2x2ZXJDbGFzcyA9IG5hbWVzcGFj
ZS5nZXQoJ1Jlc29sdmVyJykgfHwgX2VtYmVyQXBwbGljYXRpb25TeXN0ZW1SZXNvbHZlci5kZWZh
dWx0OworCisgICAgcmV0dXJuIFJlc29sdmVyQ2xhc3MuY3JlYXRlKHsKKyAgICAgIG5hbWVzcGFj
ZTogbmFtZXNwYWNlCisgICAgfSk7CisgIH0KKworICBmdW5jdGlvbiBidWlsZEluaXRpYWxpemVy
TWV0aG9kKGJ1Y2tldE5hbWUsIGh1bWFuTmFtZSkgeworICAgIHJldHVybiBmdW5jdGlvbiAoaW5p
dGlhbGl6ZXIpIHsKKyAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGZpcnN0IGluaXRpYWxpemVyIGJl
aW5nIGFkZGVkIHRvIGEgc3ViY2xhc3MsIHdlIGFyZSBnb2luZyB0byByZW9wZW4gdGhlIGNsYXNz
CisgICAgICAvLyB0byBtYWtlIHN1cmUgd2UgaGF2ZSBhIG5ldyBgaW5pdGlhbGl6ZXJzYCBvYmpl
Y3QsIHdoaWNoIGV4dGVuZHMgZnJvbSB0aGUgcGFyZW50IGNsYXNzJyB1c2luZworICAgICAgLy8g
cHJvdG90eXBhbCBpbmhlcml0YW5jZS4gV2l0aG91dCB0aGlzLCBhdHRlbXB0aW5nIHRvIGFkZCBp
bml0aWFsaXplcnMgdG8gdGhlIHN1YmNsYXNzIHdvdWxkCisgICAgICAvLyBwb2xsdXRlIHRoZSBw
YXJlbnQgY2xhc3MgYXMgd2VsbCBhcyBvdGhlciBzdWJjbGFzc2VzLgorICAgICAgaWYgKHRoaXMu
c3VwZXJjbGFzc1tidWNrZXROYW1lXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuc3VwZXJjbGFzc1ti
dWNrZXROYW1lXSA9PT0gdGhpc1tidWNrZXROYW1lXSkgeworICAgICAgICB2YXIgYXR0cnMgPSB7
fTsKKyAgICAgICAgYXR0cnNbYnVja2V0TmFtZV0gPSBPYmplY3QuY3JlYXRlKHRoaXNbYnVja2V0
TmFtZV0pOworICAgICAgICB0aGlzLnJlb3BlbkNsYXNzKGF0dHJzKTsKKyAgICAgIH0KKworICAg
ICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1RoZSAnICsgaHVtYW5OYW1lICsgJyBcJycgKyBp
bml0aWFsaXplci5uYW1lICsgJ1wnIGhhcyBhbHJlYWR5IGJlZW4gcmVnaXN0ZXJlZCcsICF0aGlz
W2J1Y2tldE5hbWVdW2luaXRpYWxpemVyLm5hbWVdKTsKKyAgICAgIF9lbWJlck1ldGFsRGVidWcu
YXNzZXJ0KCdBbiAnICsgaHVtYW5OYW1lICsgJyBjYW5ub3QgYmUgcmVnaXN0ZXJlZCB3aXRob3V0
IGFuIGluaXRpYWxpemUgZnVuY3Rpb24nLCBfZW1iZXJNZXRhbFV0aWxzLmNhbkludm9rZShpbml0
aWFsaXplciwgJ2luaXRpYWxpemUnKSk7CisgICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgn
QW4gJyArIGh1bWFuTmFtZSArICcgY2Fubm90IGJlIHJlZ2lzdGVyZWQgd2l0aG91dCBhIG5hbWUg
cHJvcGVydHknLCBpbml0aWFsaXplci5uYW1lICE9PSB1bmRlZmluZWQpOworCisgICAgICB0aGlz
W2J1Y2tldE5hbWVdW2luaXRpYWxpemVyLm5hbWVdID0gaW5pdGlhbGl6ZXI7CisgICAgfTsKKyAg
fQorCisgIGV4cG9ydHMuZGVmYXVsdCA9IEVuZ2luZTsKK30pOworZW5pZmVkKCdlbWJlci1hcHBs
aWNhdGlvbi9zeXN0ZW0vcmVzb2x2ZXInLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvZGVidWcn
LCAnZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0JywgJ2VtYmVyLXJ1bnRpbWUvc3lzdGVtL3N0cmlu
ZycsICdlbWJlci1ydW50aW1lL3N5c3RlbS9vYmplY3QnLCAnZW1iZXItcnVudGltZS9zeXN0ZW0v
bmFtZXNwYWNlJywgJ2VtYmVyLWh0bWxiYXJzL2hlbHBlcnMnLCAnZW1iZXItYXBwbGljYXRpb24v
dXRpbHMvdmFsaWRhdGUtdHlwZScsICdlbWJlci1tZXRhbC9kaWN0aW9uYXJ5JywgJ2VtYmVyLWh0
bWxiYXJzL3RlbXBsYXRlX3JlZ2lzdHJ5J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRh
bERlYnVnLCBfZW1iZXJNZXRhbFByb3BlcnR5X2dldCwgX2VtYmVyUnVudGltZVN5c3RlbVN0cmlu
ZywgX2VtYmVyUnVudGltZVN5c3RlbU9iamVjdCwgX2VtYmVyUnVudGltZVN5c3RlbU5hbWVzcGFj
ZSwgX2VtYmVySHRtbGJhcnNIZWxwZXJzLCBfZW1iZXJBcHBsaWNhdGlvblV0aWxzVmFsaWRhdGVU
eXBlLCBfZW1iZXJNZXRhbERpY3Rpb25hcnksIF9lbWJlckh0bWxiYXJzVGVtcGxhdGVfcmVnaXN0
cnkpIHsKKyAgLyoqCisgIEBtb2R1bGUgZW1iZXIKKyAgQHN1Ym1vZHVsZSBlbWJlci1hcHBsaWNh
dGlvbgorICAqLworCisgICd1c2Ugc3RyaWN0JzsKKworICB2YXIgUmVzb2x2ZXIgPSBfZW1iZXJS
dW50aW1lU3lzdGVtT2JqZWN0LmRlZmF1bHQuZXh0ZW5kKHsKKyAgICAvKgorICAgICAgVGhpcyB3
aWxsIGJlIHNldCB0byB0aGUgQXBwbGljYXRpb24gaW5zdGFuY2Ugd2hlbiBpdCBpcworICAgICAg
Y3JlYXRlZC4KKyAgICAgICBAcHJvcGVydHkgbmFtZXNwYWNlCisgICAgKi8KKyAgICBuYW1lc3Bh
Y2U6IG51bGwsCisgICAgbm9ybWFsaXplOiBudWxsLCAvLyByZXF1aXJlZAorICAgIHJlc29sdmU6
IG51bGwsIC8vIHJlcXVpcmVkCisgICAgcGFyc2VOYW1lOiBudWxsLCAvLyByZXF1aXJlZAorICAg
IGxvb2t1cERlc2NyaXB0aW9uOiBudWxsLCAvLyByZXF1aXJlZAorICAgIG1ha2VUb1N0cmluZzog
bnVsbCwgLy8gcmVxdWlyZWQKKyAgICByZXNvbHZlT3RoZXI6IG51bGwsIC8vIHJlcXVpcmVkCisg
ICAgX2xvZ0xvb2t1cDogbnVsbCAvLyByZXF1aXJlZAorICB9KTsKKworICBleHBvcnRzLlJlc29s
dmVyID0gUmVzb2x2ZXI7CisgIC8qKgorICAgIFRoZSBEZWZhdWx0UmVzb2x2ZXIgZGVmaW5lcyB0
aGUgZGVmYXVsdCBsb29rdXAgcnVsZXMgdG8gcmVzb2x2ZQorICAgIGNvbnRhaW5lciBsb29rdXBz
IGJlZm9yZSBjb25zdWx0aW5nIHRoZSBjb250YWluZXIgZm9yIHJlZ2lzdGVyZWQKKyAgICBpdGVt
czoKKyAgCisgICAgKiB0ZW1wbGF0ZXMgYXJlIGxvb2tlZCB1cCBvbiBgRW1iZXIuVEVNUExBVEVT
YAorICAgICogb3RoZXIgbmFtZXMgYXJlIGxvb2tlZCB1cCBvbiB0aGUgYXBwbGljYXRpb24gYWZ0
ZXIgY29udmVydGluZworICAgICAgdGhlIG5hbWUuIEZvciBleGFtcGxlLCBgY29udHJvbGxlcjpw
b3N0YCBsb29rcyB1cAorICAgICAgYEFwcC5Qb3N0Q29udHJvbGxlcmAgYnkgZGVmYXVsdC4KKyAg
ICAqIHRoZXJlIGFyZSBzb21lIG51YW5jZXMgKHNlZSBleGFtcGxlcyBiZWxvdykKKyAgCisgICAg
IyMjIEhvdyBSZXNvbHZpbmcgV29ya3MKKyAgCisgICAgVGhlIGNvbnRhaW5lciBjYWxscyB0aGlz
IG9iamVjdCdzIGByZXNvbHZlYCBtZXRob2Qgd2l0aCB0aGUKKyAgICBgZnVsbE5hbWVgIGFyZ3Vt
ZW50LgorICAKKyAgICBJdCBmaXJzdCBwYXJzZXMgdGhlIGZ1bGxOYW1lIGludG8gYW4gb2JqZWN0
IHVzaW5nIGBwYXJzZU5hbWVgLgorICAKKyAgICBUaGVuIGl0IGNoZWNrcyBmb3IgdGhlIHByZXNl
bmNlIG9mIGEgdHlwZS1zcGVjaWZpYyBpbnN0YW5jZQorICAgIG1ldGhvZCBvZiB0aGUgZm9ybSBg
cmVzb2x2ZVtUeXBlXWAgYW5kIGNhbGxzIGl0IGlmIGl0IGV4aXN0cy4KKyAgICBGb3IgZXhhbXBs
ZSBpZiBpdCB3YXMgcmVzb2x2aW5nICd0ZW1wbGF0ZTpwb3N0JywgaXQgd291bGQgY2FsbAorICAg
IHRoZSBgcmVzb2x2ZVRlbXBsYXRlYCBtZXRob2QuCisgIAorICAgIEl0cyBsYXN0IHJlc29ydCBp
cyB0byBjYWxsIHRoZSBgcmVzb2x2ZU90aGVyYCBtZXRob2QuCisgIAorICAgIFRoZSBtZXRob2Rz
IG9mIHRoaXMgb2JqZWN0IGFyZSBkZXNpZ25lZCB0byBiZSBlYXN5IHRvIG92ZXJyaWRlCisgICAg
aW4gYSBzdWJjbGFzcy4gRm9yIGV4YW1wbGUsIHlvdSBjb3VsZCBlbmhhbmNlIGhvdyBhIHRlbXBs
YXRlCisgICAgaXMgcmVzb2x2ZWQgbGlrZSBzbzoKKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAg
IEFwcCA9IEVtYmVyLkFwcGxpY2F0aW9uLmNyZWF0ZSh7CisgICAgICBSZXNvbHZlcjogRW1iZXIu
RGVmYXVsdFJlc29sdmVyLmV4dGVuZCh7CisgICAgICAgIHJlc29sdmVUZW1wbGF0ZTogZnVuY3Rp
b24ocGFyc2VkTmFtZSkgeworICAgICAgICAgIHZhciByZXNvbHZlZFRlbXBsYXRlID0gdGhpcy5f
c3VwZXIocGFyc2VkTmFtZSk7CisgICAgICAgICAgaWYgKHJlc29sdmVkVGVtcGxhdGUpIHsgcmV0
dXJuIHJlc29sdmVkVGVtcGxhdGU7IH0KKyAgICAgICAgICByZXR1cm4gRW1iZXIuVEVNUExBVEVT
Wydub3RfZm91bmQnXTsKKyAgICAgICAgfQorICAgICAgfSkKKyAgICB9KTsKKyAgICBgYGAKKyAg
CisgICAgU29tZSBleGFtcGxlcyBvZiBob3cgbmFtZXMgYXJlIHJlc29sdmVkOgorICAKKyAgICBg
YGAKKyAgICAndGVtcGxhdGU6cG9zdCcgICAgICAgICAgIC8vPT4gRW1iZXIuVEVNUExBVEVTWydw
b3N0J10KKyAgICAndGVtcGxhdGU6cG9zdHMvYnlsaW5lJyAgIC8vPT4gRW1iZXIuVEVNUExBVEVT
Wydwb3N0cy9ieWxpbmUnXQorICAgICd0ZW1wbGF0ZTpwb3N0cy5ieWxpbmUnICAgLy89PiBFbWJl
ci5URU1QTEFURVNbJ3Bvc3RzL2J5bGluZSddCisgICAgJ3RlbXBsYXRlOmJsb2dQb3N0JyAgICAg
ICAvLz0+IEVtYmVyLlRFTVBMQVRFU1snYmxvZ1Bvc3QnXQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gICBPUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBFbWJl
ci5URU1QTEFURVNbJ2Jsb2dfcG9zdCddCisgICAgJ2NvbnRyb2xsZXI6cG9zdCcgICAgICAgICAv
Lz0+IEFwcC5Qb3N0Q29udHJvbGxlcgorICAgICdjb250cm9sbGVyOnBvc3RzLmluZGV4JyAgLy89
PiBBcHAuUG9zdHNJbmRleENvbnRyb2xsZXIKKyAgICAnY29udHJvbGxlcjpibG9nL3Bvc3QnICAg
IC8vPT4gQmxvZy5Qb3N0Q29udHJvbGxlcgorICAgICdjb250cm9sbGVyOmJhc2ljJyAgICAgICAg
Ly89PiBFbWJlci5Db250cm9sbGVyCisgICAgJ3JvdXRlOnBvc3QnICAgICAgICAgICAgICAvLz0+
IEFwcC5Qb3N0Um91dGUKKyAgICAncm91dGU6cG9zdHMuaW5kZXgnICAgICAgIC8vPT4gQXBwLlBv
c3RzSW5kZXhSb3V0ZQorICAgICdyb3V0ZTpibG9nL3Bvc3QnICAgICAgICAgLy89PiBCbG9nLlBv
c3RSb3V0ZQorICAgICdyb3V0ZTpiYXNpYycgICAgICAgICAgICAgLy89PiBFbWJlci5Sb3V0ZQor
ICAgICd2aWV3OnBvc3QnICAgICAgICAgICAgICAgLy89PiBBcHAuUG9zdFZpZXcKKyAgICAndmll
dzpwb3N0cy5pbmRleCcgICAgICAgIC8vPT4gQXBwLlBvc3RzSW5kZXhWaWV3CisgICAgJ3ZpZXc6
YmxvZy9wb3N0JyAgICAgICAgICAvLz0+IEJsb2cuUG9zdFZpZXcKKyAgICAndmlldzpiYXNpYycg
ICAgICAgICAgICAgIC8vPT4gRW1iZXIuVmlldworICAgICdmb286cG9zdCcgICAgICAgICAgICAg
ICAgLy89PiBBcHAuUG9zdEZvbworICAgICdtb2RlbDpwb3N0JyAgICAgICAgICAgICAgLy89PiBB
cHAuUG9zdAorICAgIGBgYAorICAKKyAgICBAY2xhc3MgRGVmYXVsdFJlc29sdmVyCisgICAgQG5h
bWVzcGFjZSBFbWJlcgorICAgIEBleHRlbmRzIEVtYmVyLk9iamVjdAorICAgIEBwdWJsaWMKKyAg
Ki8KKworICBleHBvcnRzLmRlZmF1bHQgPSBfZW1iZXJSdW50aW1lU3lzdGVtT2JqZWN0LmRlZmF1
bHQuZXh0ZW5kKHsKKyAgICAvKioKKyAgICAgIFRoaXMgd2lsbCBiZSBzZXQgdG8gdGhlIEFwcGxp
Y2F0aW9uIGluc3RhbmNlIHdoZW4gaXQgaXMKKyAgICAgIGNyZWF0ZWQuCisgICAgICAgQHByb3Bl
cnR5IG5hbWVzcGFjZQorICAgICAgQHB1YmxpYworICAgICovCisgICAgbmFtZXNwYWNlOiBudWxs
LAorCisgICAgaW5pdDogZnVuY3Rpb24gKCkgeworICAgICAgdGhpcy5fcGFyc2VOYW1lQ2FjaGUg
PSBfZW1iZXJNZXRhbERpY3Rpb25hcnkuZGVmYXVsdChudWxsKTsKKyAgICB9LAorICAgIG5vcm1h
bGl6ZTogZnVuY3Rpb24gKGZ1bGxOYW1lKSB7CisgICAgICB2YXIgX2Z1bGxOYW1lJHNwbGl0ID0g
ZnVsbE5hbWUuc3BsaXQoJzonLCAyKTsKKworICAgICAgdmFyIHR5cGUgPSBfZnVsbE5hbWUkc3Bs
aXRbMF07CisgICAgICB2YXIgbmFtZSA9IF9mdWxsTmFtZSRzcGxpdFsxXTsKKworICAgICAgX2Vt
YmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1RyaWVkIHRvIG5vcm1hbGl6ZSBhIGNvbnRhaW5lciBuYW1l
IHdpdGhvdXQgYSBjb2xvbiAoOikgaW4gaXQuICcgKyAnWW91IHByb2JhYmx5IHRyaWVkIHRvIGxv
b2t1cCBhIG5hbWUgdGhhdCBkaWQgbm90IGNvbnRhaW4gYSB0eXBlLCAnICsgJ2EgY29sb24sIGFu
ZCBhIG5hbWUuIEEgcHJvcGVyIGxvb2t1cCBuYW1lIHdvdWxkIGJlIGB2aWV3OnBvc3RgLicsIGZ1
bGxOYW1lLnNwbGl0KCc6JykubGVuZ3RoID09PSAyKTsKKworICAgICAgaWYgKHR5cGUgIT09ICd0
ZW1wbGF0ZScpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG5hbWU7CisKKyAgICAgICAgaWYgKHJl
c3VsdC5pbmRleE9mKCcuJykgPiAtMSkgeworICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBs
YWNlKC9cLiguKS9nLCBmdW5jdGlvbiAobSkgeworICAgICAgICAgICAgcmV0dXJuIG0uY2hhckF0
KDEpLnRvVXBwZXJDYXNlKCk7CisgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAobmFtZS5pbmRleE9mKCdfJykgPiAtMSkgeworICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5y
ZXBsYWNlKC9fKC4pL2csIGZ1bmN0aW9uIChtKSB7CisgICAgICAgICAgICByZXR1cm4gbS5jaGFy
QXQoMSkudG9VcHBlckNhc2UoKTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChuYW1lLmluZGV4T2YoJy0nKSA+IC0xKSB7CisgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0
LnJlcGxhY2UoLy0oLikvZywgZnVuY3Rpb24gKG0pIHsKKyAgICAgICAgICAgIHJldHVybiBtLmNo
YXJBdCgxKS50b1VwcGVyQ2FzZSgpOworICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIHR5cGUgKyAnOicgKyByZXN1bHQ7CisgICAgICB9IGVsc2UgeworICAgICAgICBy
ZXR1cm4gZnVsbE5hbWU7CisgICAgICB9CisgICAgfSwKKworICAgIC8qKgorICAgICAgVGhpcyBt
ZXRob2QgaXMgY2FsbGVkIHZpYSB0aGUgY29udGFpbmVyJ3MgcmVzb2x2ZXIgbWV0aG9kLgorICAg
ICAgSXQgcGFyc2VzIHRoZSBwcm92aWRlZCBgZnVsbE5hbWVgIGFuZCB0aGVuIGxvb2tzIHVwIGFu
ZAorICAgICAgcmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgdGVtcGxhdGUgb3IgY2xhc3MuCisgICAg
ICAgQG1ldGhvZCByZXNvbHZlCisgICAgICBAcGFyYW0ge1N0cmluZ30gZnVsbE5hbWUgdGhlIGxv
b2t1cCBzdHJpbmcKKyAgICAgIEByZXR1cm4ge09iamVjdH0gdGhlIHJlc29sdmVkIGZhY3RvcnkK
KyAgICAgIEBwdWJsaWMKKyAgICAqLworICAgIHJlc29sdmU6IGZ1bmN0aW9uIChmdWxsTmFtZSkg
eworICAgICAgdmFyIHBhcnNlZE5hbWUgPSB0aGlzLnBhcnNlTmFtZShmdWxsTmFtZSk7CisgICAg
ICB2YXIgcmVzb2x2ZU1ldGhvZE5hbWUgPSBwYXJzZWROYW1lLnJlc29sdmVNZXRob2ROYW1lOwor
ICAgICAgdmFyIHJlc29sdmVkOworCisgICAgICBpZiAodGhpc1tyZXNvbHZlTWV0aG9kTmFtZV0p
IHsKKyAgICAgICAgcmVzb2x2ZWQgPSB0aGlzW3Jlc29sdmVNZXRob2ROYW1lXShwYXJzZWROYW1l
KTsKKyAgICAgIH0KKworICAgICAgcmVzb2x2ZWQgPSByZXNvbHZlZCB8fCB0aGlzLnJlc29sdmVP
dGhlcihwYXJzZWROYW1lKTsKKworICAgICAgaWYgKHBhcnNlZE5hbWUucm9vdCAmJiBwYXJzZWRO
YW1lLnJvb3QuTE9HX1JFU09MVkVSKSB7CisgICAgICAgIHRoaXMuX2xvZ0xvb2t1cChyZXNvbHZl
ZCwgcGFyc2VkTmFtZSk7CisgICAgICB9CisKKyAgICAgIGlmIChyZXNvbHZlZCkgeworICAgICAg
ICBfZW1iZXJBcHBsaWNhdGlvblV0aWxzVmFsaWRhdGVUeXBlLmRlZmF1bHQocmVzb2x2ZWQsIHBh
cnNlZE5hbWUpOworICAgICAgfQorCisgICAgICByZXR1cm4gcmVzb2x2ZWQ7CisgICAgfSwKKwor
ICAgIC8qKgorICAgICAgQ29udmVydCB0aGUgc3RyaW5nIG5hbWUgb2YgdGhlIGZvcm0gJ3R5cGU6
bmFtZScgdG8KKyAgICAgIGEgSmF2YXNjcmlwdCBvYmplY3Qgd2l0aCB0aGUgcGFyc2VkIGFzcGVj
dHMgb2YgdGhlIG5hbWUKKyAgICAgIGJyb2tlbiBvdXQuCisgICAgICAgQHByb3RlY3RlZAorICAg
ICAgQHBhcmFtIHtTdHJpbmd9IGZ1bGxOYW1lIHRoZSBsb29rdXAgc3RyaW5nCisgICAgICBAbWV0
aG9kIHBhcnNlTmFtZQorICAgICAgQHB1YmxpYworICAgICovCisKKyAgICBwYXJzZU5hbWU6IGZ1
bmN0aW9uIChmdWxsTmFtZSkgeworICAgICAgcmV0dXJuIHRoaXMuX3BhcnNlTmFtZUNhY2hlW2Z1
bGxOYW1lXSB8fCAodGhpcy5fcGFyc2VOYW1lQ2FjaGVbZnVsbE5hbWVdID0gdGhpcy5fcGFyc2VO
YW1lKGZ1bGxOYW1lKSk7CisgICAgfSwKKworICAgIF9wYXJzZU5hbWU6IGZ1bmN0aW9uIChmdWxs
TmFtZSkgeworICAgICAgdmFyIF9mdWxsTmFtZSRzcGxpdDIgPSBmdWxsTmFtZS5zcGxpdCgnOicp
OworCisgICAgICB2YXIgdHlwZSA9IF9mdWxsTmFtZSRzcGxpdDJbMF07CisgICAgICB2YXIgZnVs
bE5hbWVXaXRob3V0VHlwZSA9IF9mdWxsTmFtZSRzcGxpdDJbMV07CisKKyAgICAgIHZhciBuYW1l
ID0gZnVsbE5hbWVXaXRob3V0VHlwZTsKKyAgICAgIHZhciBuYW1lc3BhY2UgPSBfZW1iZXJNZXRh
bFByb3BlcnR5X2dldC5nZXQodGhpcywgJ25hbWVzcGFjZScpOworICAgICAgdmFyIHJvb3QgPSBu
YW1lc3BhY2U7CisgICAgICB2YXIgbGFzdFNsYXNoSW5kZXggPSBuYW1lLmxhc3RJbmRleE9mKCcv
Jyk7CisgICAgICB2YXIgZGlybmFtZSA9IGxhc3RTbGFzaEluZGV4ICE9PSAtMSA/IG5hbWUuc2xp
Y2UoMCwgbGFzdFNsYXNoSW5kZXgpIDogbnVsbDsKKworICAgICAgaWYgKHR5cGUgIT09ICd0ZW1w
bGF0ZScgJiYgbGFzdFNsYXNoSW5kZXggIT09IC0xKSB7CisgICAgICAgIHZhciBwYXJ0cyA9IG5h
bWUuc3BsaXQoJy8nKTsKKyAgICAgICAgbmFtZSA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdOwor
ICAgICAgICB2YXIgbmFtZXNwYWNlTmFtZSA9IF9lbWJlclJ1bnRpbWVTeXN0ZW1TdHJpbmcuY2Fw
aXRhbGl6ZShwYXJ0cy5zbGljZSgwLCAtMSkuam9pbignLicpKTsKKyAgICAgICAgcm9vdCA9IF9l
bWJlclJ1bnRpbWVTeXN0ZW1OYW1lc3BhY2UuZGVmYXVsdC5ieU5hbWUobmFtZXNwYWNlTmFtZSk7
CisKKyAgICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1lvdSBhcmUgbG9va2luZyBmb3Ig
YSAnICsgbmFtZSArICcgJyArIHR5cGUgKyAnIGluIHRoZSAnICsgbmFtZXNwYWNlTmFtZSArICcg
bmFtZXNwYWNlLCBidXQgdGhlIG5hbWVzcGFjZSBjb3VsZCBub3QgYmUgZm91bmQnLCByb290KTsK
KyAgICAgIH0KKworICAgICAgdmFyIHJlc29sdmVNZXRob2ROYW1lID0gZnVsbE5hbWVXaXRob3V0
VHlwZSA9PT0gJ21haW4nID8gJ01haW4nIDogX2VtYmVyUnVudGltZVN5c3RlbVN0cmluZy5jbGFz
c2lmeSh0eXBlKTsKKworICAgICAgaWYgKCEobmFtZSAmJiB0eXBlKSkgeworICAgICAgICB0aHJv
dyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGZ1bGxOYW1lOiBgJyArIGZ1bGxOYW1lICsgJ2AsIG11
c3QgYmUgb2YgdGhlIGZvcm0gYHR5cGU6bmFtZWAgJyk7CisgICAgICB9CisKKyAgICAgIHJldHVy
biB7CisgICAgICAgIGZ1bGxOYW1lOiBmdWxsTmFtZSwKKyAgICAgICAgdHlwZTogdHlwZSwKKyAg
ICAgICAgZnVsbE5hbWVXaXRob3V0VHlwZTogZnVsbE5hbWVXaXRob3V0VHlwZSwKKyAgICAgICAg
ZGlybmFtZTogZGlybmFtZSwKKyAgICAgICAgbmFtZTogbmFtZSwKKyAgICAgICAgcm9vdDogcm9v
dCwKKyAgICAgICAgcmVzb2x2ZU1ldGhvZE5hbWU6ICdyZXNvbHZlJyArIHJlc29sdmVNZXRob2RO
YW1lCisgICAgICB9OworICAgIH0sCisKKyAgICAvKioKKyAgICAgIFJldHVybnMgYSBodW1hbi1y
ZWFkYWJsZSBkZXNjcmlwdGlvbiBmb3IgYSBmdWxsTmFtZS4gVXNlZCBieSB0aGUKKyAgICAgIEFw
cGxpY2F0aW9uIG5hbWVzcGFjZSBpbiBhc3NlcnRpb25zIHRvIGRlc2NyaWJlIHRoZQorICAgICAg
cHJlY2lzZSBuYW1lIG9mIHRoZSBjbGFzcyB0aGF0IEVtYmVyIGlzIGxvb2tpbmcgZm9yLCByYXRo
ZXIgdGhhbgorICAgICAgY29udGFpbmVyIGtleXMuCisgICAgICAgQHByb3RlY3RlZAorICAgICAg
QHBhcmFtIHtTdHJpbmd9IGZ1bGxOYW1lIHRoZSBsb29rdXAgc3RyaW5nCisgICAgICBAbWV0aG9k
IGxvb2t1cERlc2NyaXB0aW9uCisgICAgICBAcHVibGljCisgICAgKi8KKyAgICBsb29rdXBEZXNj
cmlwdGlvbjogZnVuY3Rpb24gKGZ1bGxOYW1lKSB7CisgICAgICB2YXIgcGFyc2VkTmFtZSA9IHRo
aXMucGFyc2VOYW1lKGZ1bGxOYW1lKTsKKyAgICAgIHZhciBkZXNjcmlwdGlvbjsKKworICAgICAg
aWYgKHBhcnNlZE5hbWUudHlwZSA9PT0gJ3RlbXBsYXRlJykgeworICAgICAgICByZXR1cm4gJ3Rl
bXBsYXRlIGF0ICcgKyBwYXJzZWROYW1lLmZ1bGxOYW1lV2l0aG91dFR5cGUucmVwbGFjZSgvXC4v
ZywgJy8nKTsKKyAgICAgIH0KKworICAgICAgZGVzY3JpcHRpb24gPSBwYXJzZWROYW1lLnJvb3Qg
KyAnLicgKyBfZW1iZXJSdW50aW1lU3lzdGVtU3RyaW5nLmNsYXNzaWZ5KHBhcnNlZE5hbWUubmFt
ZSkucmVwbGFjZSgvXC4vZywgJycpOworCisgICAgICBpZiAocGFyc2VkTmFtZS50eXBlICE9PSAn
bW9kZWwnKSB7CisgICAgICAgIGRlc2NyaXB0aW9uICs9IF9lbWJlclJ1bnRpbWVTeXN0ZW1TdHJp
bmcuY2xhc3NpZnkocGFyc2VkTmFtZS50eXBlKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIGRl
c2NyaXB0aW9uOworICAgIH0sCisKKyAgICBtYWtlVG9TdHJpbmc6IGZ1bmN0aW9uIChmYWN0b3J5
LCBmdWxsTmFtZSkgeworICAgICAgcmV0dXJuIGZhY3RvcnkudG9TdHJpbmcoKTsKKyAgICB9LAor
CisgICAgLyoqCisgICAgICBHaXZlbiBhIHBhcnNlTmFtZSBvYmplY3QgKG91dHB1dCBmcm9tIGBw
YXJzZU5hbWVgKSwgYXBwbHkKKyAgICAgIHRoZSBjb252ZW50aW9ucyBleHBlY3RlZCBieSBgRW1i
ZXIuUm91dGVyYAorICAgICAgIEBwcm90ZWN0ZWQKKyAgICAgIEBwYXJhbSB7T2JqZWN0fSBwYXJz
ZWROYW1lIGEgcGFyc2VOYW1lIG9iamVjdCB3aXRoIHRoZSBwYXJzZWQKKyAgICAgICAgZnVsbE5h
bWUgbG9va3VwIHN0cmluZworICAgICAgQG1ldGhvZCB1c2VSb3V0ZXJOYW1pbmcKKyAgICAgIEBw
dWJsaWMKKyAgICAqLworICAgIHVzZVJvdXRlck5hbWluZzogZnVuY3Rpb24gKHBhcnNlZE5hbWUp
IHsKKyAgICAgIHBhcnNlZE5hbWUubmFtZSA9IHBhcnNlZE5hbWUubmFtZS5yZXBsYWNlKC9cLi9n
LCAnXycpOworICAgICAgaWYgKHBhcnNlZE5hbWUubmFtZSA9PT0gJ2Jhc2ljJykgeworICAgICAg
ICBwYXJzZWROYW1lLm5hbWUgPSAnJzsKKyAgICAgIH0KKyAgICB9LAorICAgIC8qKgorICAgICAg
TG9vayB1cCB0aGUgdGVtcGxhdGUgaW4gRW1iZXIuVEVNUExBVEVTCisgICAgICAgQHByb3RlY3Rl
ZAorICAgICAgQHBhcmFtIHtPYmplY3R9IHBhcnNlZE5hbWUgYSBwYXJzZU5hbWUgb2JqZWN0IHdp
dGggdGhlIHBhcnNlZAorICAgICAgICBmdWxsTmFtZSBsb29rdXAgc3RyaW5nCisgICAgICBAbWV0
aG9kIHJlc29sdmVUZW1wbGF0ZQorICAgICAgQHB1YmxpYworICAgICovCisgICAgcmVzb2x2ZVRl
bXBsYXRlOiBmdW5jdGlvbiAocGFyc2VkTmFtZSkgeworICAgICAgdmFyIHRlbXBsYXRlTmFtZSA9
IHBhcnNlZE5hbWUuZnVsbE5hbWVXaXRob3V0VHlwZS5yZXBsYWNlKC9cLi9nLCAnLycpOworCisg
ICAgICByZXR1cm4gX2VtYmVySHRtbGJhcnNUZW1wbGF0ZV9yZWdpc3RyeS5nZXQodGVtcGxhdGVO
YW1lKSB8fCBfZW1iZXJIdG1sYmFyc1RlbXBsYXRlX3JlZ2lzdHJ5LmdldChfZW1iZXJSdW50aW1l
U3lzdGVtU3RyaW5nLmRlY2FtZWxpemUodGVtcGxhdGVOYW1lKSk7CisgICAgfSwKKworICAgIC8q
KgorICAgICAgTG9va3VwIHRoZSB2aWV3IHVzaW5nIGByZXNvbHZlT3RoZXJgCisgICAgICAgQHBy
b3RlY3RlZAorICAgICAgQHBhcmFtIHtPYmplY3R9IHBhcnNlZE5hbWUgYSBwYXJzZU5hbWUgb2Jq
ZWN0IHdpdGggdGhlIHBhcnNlZAorICAgICAgICBmdWxsTmFtZSBsb29rdXAgc3RyaW5nCisgICAg
ICBAbWV0aG9kIHJlc29sdmVWaWV3CisgICAgICBAcHVibGljCisgICAgKi8KKyAgICByZXNvbHZl
VmlldzogZnVuY3Rpb24gKHBhcnNlZE5hbWUpIHsKKyAgICAgIHRoaXMudXNlUm91dGVyTmFtaW5n
KHBhcnNlZE5hbWUpOworICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZU90aGVyKHBhcnNlZE5hbWUp
OworICAgIH0sCisKKyAgICAvKioKKyAgICAgIExvb2t1cCB0aGUgY29udHJvbGxlciB1c2luZyBg
cmVzb2x2ZU90aGVyYAorICAgICAgIEBwcm90ZWN0ZWQKKyAgICAgIEBwYXJhbSB7T2JqZWN0fSBw
YXJzZWROYW1lIGEgcGFyc2VOYW1lIG9iamVjdCB3aXRoIHRoZSBwYXJzZWQKKyAgICAgICAgZnVs
bE5hbWUgbG9va3VwIHN0cmluZworICAgICAgQG1ldGhvZCByZXNvbHZlQ29udHJvbGxlcgorICAg
ICAgQHB1YmxpYworICAgICovCisgICAgcmVzb2x2ZUNvbnRyb2xsZXI6IGZ1bmN0aW9uIChwYXJz
ZWROYW1lKSB7CisgICAgICB0aGlzLnVzZVJvdXRlck5hbWluZyhwYXJzZWROYW1lKTsKKyAgICAg
IHJldHVybiB0aGlzLnJlc29sdmVPdGhlcihwYXJzZWROYW1lKTsKKyAgICB9LAorICAgIC8qKgor
ICAgICAgTG9va3VwIHRoZSByb3V0ZSB1c2luZyBgcmVzb2x2ZU90aGVyYAorICAgICAgIEBwcm90
ZWN0ZWQKKyAgICAgIEBwYXJhbSB7T2JqZWN0fSBwYXJzZWROYW1lIGEgcGFyc2VOYW1lIG9iamVj
dCB3aXRoIHRoZSBwYXJzZWQKKyAgICAgICAgZnVsbE5hbWUgbG9va3VwIHN0cmluZworICAgICAg
QG1ldGhvZCByZXNvbHZlUm91dGUKKyAgICAgIEBwdWJsaWMKKyAgICAqLworICAgIHJlc29sdmVS
b3V0ZTogZnVuY3Rpb24gKHBhcnNlZE5hbWUpIHsKKyAgICAgIHRoaXMudXNlUm91dGVyTmFtaW5n
KHBhcnNlZE5hbWUpOworICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZU90aGVyKHBhcnNlZE5hbWUp
OworICAgIH0sCisKKyAgICAvKioKKyAgICAgIExvb2t1cCB0aGUgbW9kZWwgb24gdGhlIEFwcGxp
Y2F0aW9uIG5hbWVzcGFjZQorICAgICAgIEBwcm90ZWN0ZWQKKyAgICAgIEBwYXJhbSB7T2JqZWN0
fSBwYXJzZWROYW1lIGEgcGFyc2VOYW1lIG9iamVjdCB3aXRoIHRoZSBwYXJzZWQKKyAgICAgICAg
ZnVsbE5hbWUgbG9va3VwIHN0cmluZworICAgICAgQG1ldGhvZCByZXNvbHZlTW9kZWwKKyAgICAg
IEBwdWJsaWMKKyAgICAqLworICAgIHJlc29sdmVNb2RlbDogZnVuY3Rpb24gKHBhcnNlZE5hbWUp
IHsKKyAgICAgIHZhciBjbGFzc05hbWUgPSBfZW1iZXJSdW50aW1lU3lzdGVtU3RyaW5nLmNsYXNz
aWZ5KHBhcnNlZE5hbWUubmFtZSk7CisgICAgICB2YXIgZmFjdG9yeSA9IF9lbWJlck1ldGFsUHJv
cGVydHlfZ2V0LmdldChwYXJzZWROYW1lLnJvb3QsIGNsYXNzTmFtZSk7CisKKyAgICAgIGlmIChm
YWN0b3J5KSB7CisgICAgICAgIHJldHVybiBmYWN0b3J5OworICAgICAgfQorICAgIH0sCisgICAg
LyoqCisgICAgICBMb29rIHVwIHRoZSBzcGVjaWZpZWQgb2JqZWN0IChmcm9tIHBhcnNlZE5hbWUp
IG9uIHRoZSBhcHByb3ByaWF0ZQorICAgICAgbmFtZXNwYWNlICh1c3VhbGx5IG9uIHRoZSBBcHBs
aWNhdGlvbikKKyAgICAgICBAcHJvdGVjdGVkCisgICAgICBAcGFyYW0ge09iamVjdH0gcGFyc2Vk
TmFtZSBhIHBhcnNlTmFtZSBvYmplY3Qgd2l0aCB0aGUgcGFyc2VkCisgICAgICAgIGZ1bGxOYW1l
IGxvb2t1cCBzdHJpbmcKKyAgICAgIEBtZXRob2QgcmVzb2x2ZUhlbHBlcgorICAgICAgQHB1Ymxp
YworICAgICovCisgICAgcmVzb2x2ZUhlbHBlcjogZnVuY3Rpb24gKHBhcnNlZE5hbWUpIHsKKyAg
ICAgIHJldHVybiB0aGlzLnJlc29sdmVPdGhlcihwYXJzZWROYW1lKSB8fCBfZW1iZXJIdG1sYmFy
c0hlbHBlcnMuZGVmYXVsdFtwYXJzZWROYW1lLmZ1bGxOYW1lV2l0aG91dFR5cGVdOworICAgIH0s
CisgICAgLyoqCisgICAgICBMb29rIHVwIHRoZSBzcGVjaWZpZWQgb2JqZWN0IChmcm9tIHBhcnNl
ZE5hbWUpIG9uIHRoZSBhcHByb3ByaWF0ZQorICAgICAgbmFtZXNwYWNlICh1c3VhbGx5IG9uIHRo
ZSBBcHBsaWNhdGlvbikKKyAgICAgICBAcHJvdGVjdGVkCisgICAgICBAcGFyYW0ge09iamVjdH0g
cGFyc2VkTmFtZSBhIHBhcnNlTmFtZSBvYmplY3Qgd2l0aCB0aGUgcGFyc2VkCisgICAgICAgIGZ1
bGxOYW1lIGxvb2t1cCBzdHJpbmcKKyAgICAgIEBtZXRob2QgcmVzb2x2ZU90aGVyCisgICAgICBA
cHVibGljCisgICAgKi8KKyAgICByZXNvbHZlT3RoZXI6IGZ1bmN0aW9uIChwYXJzZWROYW1lKSB7
CisgICAgICB2YXIgY2xhc3NOYW1lID0gX2VtYmVyUnVudGltZVN5c3RlbVN0cmluZy5jbGFzc2lm
eShwYXJzZWROYW1lLm5hbWUpICsgX2VtYmVyUnVudGltZVN5c3RlbVN0cmluZy5jbGFzc2lmeShw
YXJzZWROYW1lLnR5cGUpOworICAgICAgdmFyIGZhY3RvcnkgPSBfZW1iZXJNZXRhbFByb3BlcnR5
X2dldC5nZXQocGFyc2VkTmFtZS5yb290LCBjbGFzc05hbWUpOworICAgICAgaWYgKGZhY3Rvcnkp
IHsKKyAgICAgICAgcmV0dXJuIGZhY3Rvcnk7CisgICAgICB9CisgICAgfSwKKworICAgIHJlc29s
dmVNYWluOiBmdW5jdGlvbiAocGFyc2VkTmFtZSkgeworICAgICAgdmFyIGNsYXNzTmFtZSA9IF9l
bWJlclJ1bnRpbWVTeXN0ZW1TdHJpbmcuY2xhc3NpZnkocGFyc2VkTmFtZS50eXBlKTsKKyAgICAg
IHJldHVybiBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQocGFyc2VkTmFtZS5yb290LCBjbGFz
c05hbWUpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgQG1ldGhvZCBfbG9nTG9va3VwCisgICAg
IEBwYXJhbSB7Qm9vbGVhbn0gZm91bmQKKyAgICAgQHBhcmFtIHtPYmplY3R9IHBhcnNlZE5hbWUK
KyAgICAgQHByaXZhdGUKKyAgICAqLworICAgIF9sb2dMb29rdXA6IGZ1bmN0aW9uIChmb3VuZCwg
cGFyc2VkTmFtZSkgeworICAgICAgdmFyIHN5bWJvbCwgcGFkZGluZzsKKworICAgICAgaWYgKGZv
dW5kKSB7CisgICAgICAgIHN5bWJvbCA9ICdb4pyTXSc7CisgICAgICB9IGVsc2UgeworICAgICAg
ICBzeW1ib2wgPSAnWyBdJzsKKyAgICAgIH0KKworICAgICAgaWYgKHBhcnNlZE5hbWUuZnVsbE5h
bWUubGVuZ3RoID4gNjApIHsKKyAgICAgICAgcGFkZGluZyA9ICcuJzsKKyAgICAgIH0gZWxzZSB7
CisgICAgICAgIHBhZGRpbmcgPSBuZXcgQXJyYXkoNjAgLSBwYXJzZWROYW1lLmZ1bGxOYW1lLmxl
bmd0aCkuam9pbignLicpOworICAgICAgfQorCisgICAgICBfZW1iZXJNZXRhbERlYnVnLmluZm8o
c3ltYm9sLCBwYXJzZWROYW1lLmZ1bGxOYW1lLCBwYWRkaW5nLCB0aGlzLmxvb2t1cERlc2NyaXB0
aW9uKHBhcnNlZE5hbWUuZnVsbE5hbWUpKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgIFVzZWQg
dG8gaXRlcmF0ZSBhbGwgaXRlbXMgb2YgYSBnaXZlbiB0eXBlLgorICAgICAgQG1ldGhvZCBrbm93
bkZvclR5cGUKKyAgICAgQHBhcmFtIHtTdHJpbmd9IHR5cGUgdGhlIHR5cGUgdG8gc2VhcmNoIGZv
cgorICAgICBAcHJpdmF0ZQorICAgICAqLworICAgIGtub3duRm9yVHlwZTogZnVuY3Rpb24gKHR5
cGUpIHsKKyAgICAgIHZhciBuYW1lc3BhY2UgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQo
dGhpcywgJ25hbWVzcGFjZScpOworICAgICAgdmFyIHN1ZmZpeCA9IF9lbWJlclJ1bnRpbWVTeXN0
ZW1TdHJpbmcuY2xhc3NpZnkodHlwZSk7CisgICAgICB2YXIgdHlwZVJlZ2V4cCA9IG5ldyBSZWdF
eHAoc3VmZml4ICsgJyQnKTsKKworICAgICAgdmFyIGtub3duID0gX2VtYmVyTWV0YWxEaWN0aW9u
YXJ5LmRlZmF1bHQobnVsbCk7CisgICAgICB2YXIga25vd25LZXlzID0gT2JqZWN0LmtleXMobmFt
ZXNwYWNlKTsKKyAgICAgIGZvciAodmFyIGluZGV4ID0gMCwgX2xlbmd0aCA9IGtub3duS2V5cy5s
ZW5ndGg7IGluZGV4IDwgX2xlbmd0aDsgaW5kZXgrKykgeworICAgICAgICB2YXIgX25hbWUgPSBr
bm93bktleXNbaW5kZXhdOworCisgICAgICAgIGlmICh0eXBlUmVnZXhwLnRlc3QoX25hbWUpKSB7
CisgICAgICAgICAgdmFyIGNvbnRhaW5lck5hbWUgPSB0aGlzLnRyYW5zbGF0ZVRvQ29udGFpbmVy
RnVsbG5hbWUodHlwZSwgX25hbWUpOworCisgICAgICAgICAga25vd25bY29udGFpbmVyTmFtZV0g
PSB0cnVlOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHJldHVybiBrbm93bjsKKyAgICB9
LAorCisgICAgLyoqCisgICAgIENvbnZlcnRzIHByb3ZpZGVkIG5hbWUgZnJvbSB0aGUgYmFja2lu
ZyBuYW1lc3BhY2UgaW50byBhIGNvbnRhaW5lciBsb29rdXAgbmFtZS4KKyAgICAgIEV4YW1wbGVz
OgorICAgICAgQXBwLkZvb0JhckhlbHBlciAtPiBoZWxwZXI6Zm9vLWJhcgorICAgICBBcHAuVEhl
bHBlciAtPiBoZWxwZXI6dAorICAgICAgQG1ldGhvZCB0cmFuc2xhdGVUb0NvbnRhaW5lckZ1bGxu
YW1lCisgICAgIEBwYXJhbSB7U3RyaW5nfSB0eXBlCisgICAgIEBwYXJhbSB7U3RyaW5nfSBuYW1l
CisgICAgIEBwcml2YXRlCisgICAgICovCisKKyAgICB0cmFuc2xhdGVUb0NvbnRhaW5lckZ1bGxu
YW1lOiBmdW5jdGlvbiAodHlwZSwgbmFtZSkgeworICAgICAgdmFyIHN1ZmZpeCA9IF9lbWJlclJ1
bnRpbWVTeXN0ZW1TdHJpbmcuY2xhc3NpZnkodHlwZSk7CisgICAgICB2YXIgbmFtZVByZWZpeCA9
IG5hbWUuc2xpY2UoMCwgc3VmZml4Lmxlbmd0aCAqIC0xKTsKKyAgICAgIHZhciBkYXNoZXJpemVk
TmFtZSA9IF9lbWJlclJ1bnRpbWVTeXN0ZW1TdHJpbmcuZGFzaGVyaXplKG5hbWVQcmVmaXgpOwor
CisgICAgICByZXR1cm4gdHlwZSArICc6JyArIGRhc2hlcml6ZWROYW1lOworICAgIH0KKyAgfSk7
Cit9KTsKK2VuaWZlZCgnZW1iZXItYXBwbGljYXRpb24vdXRpbHMvdmFsaWRhdGUtdHlwZScsIFsn
ZXhwb3J0cycsICdlbWJlci1tZXRhbC9kZWJ1ZyddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVy
TWV0YWxEZWJ1ZykgeworICAvKioKKyAgQG1vZHVsZSBlbWJlcgorICBAc3VibW9kdWxlIGVtYmVy
LWFwcGxpY2F0aW9uCisgICovCisKKyAgJ3VzZSBzdHJpY3QnOworCisgIGV4cG9ydHMuZGVmYXVs
dCA9IHZhbGlkYXRlVHlwZTsKKworICB2YXIgVkFMSURBVEVEX1RZUEVTID0geworICAgIHJvdXRl
OiBbJ2Fzc2VydCcsICdpc1JvdXRlRmFjdG9yeScsICdFbWJlci5Sb3V0ZSddLAorICAgIGNvbXBv
bmVudDogWydkZXByZWNhdGUnLCAnaXNDb21wb25lbnRGYWN0b3J5JywgJ0VtYmVyLkNvbXBvbmVu
dCddLAorICAgIHZpZXc6IFsnZGVwcmVjYXRlJywgJ2lzVmlld0ZhY3RvcnknLCAnRW1iZXIuVmll
dyddLAorICAgIHNlcnZpY2U6IFsnZGVwcmVjYXRlJywgJ2lzU2VydmljZUZhY3RvcnknLCAnRW1i
ZXIuU2VydmljZSddCisgIH07CisKKyAgZnVuY3Rpb24gdmFsaWRhdGVUeXBlKHJlc29sdmVkVHlw
ZSwgcGFyc2VkTmFtZSkgeworICAgIHZhciB2YWxpZGF0aW9uQXR0cmlidXRlcyA9IFZBTElEQVRF
RF9UWVBFU1twYXJzZWROYW1lLnR5cGVdOworCisgICAgaWYgKCF2YWxpZGF0aW9uQXR0cmlidXRl
cykgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZhciBhY3Rpb24gPSB2YWxpZGF0aW9u
QXR0cmlidXRlc1swXTsKKyAgICB2YXIgZmFjdG9yeUZsYWcgPSB2YWxpZGF0aW9uQXR0cmlidXRl
c1sxXTsKKyAgICB2YXIgZXhwZWN0ZWRUeXBlID0gdmFsaWRhdGlvbkF0dHJpYnV0ZXNbMl07CisK
KyAgICBpZiAoYWN0aW9uID09PSAnZGVwcmVjYXRlJykgeworICAgICAgX2VtYmVyTWV0YWxEZWJ1
Zy5kZXByZWNhdGUoJ0luIEVtYmVyIDIuMCAnICsgcGFyc2VkTmFtZS50eXBlICsgJyBmYWN0b3Jp
ZXMgbXVzdCBoYXZlIGFuIGAnICsgZmFjdG9yeUZsYWcgKyAnYCAnICsgKCdwcm9wZXJ0eSBzZXQg
dG8gdHJ1ZS4gWW91IHJlZ2lzdGVyZWQgJyArIHJlc29sdmVkVHlwZSArICcgYXMgYSAnICsgcGFy
c2VkTmFtZS50eXBlICsgJyAnKSArICgnZmFjdG9yeS4gRWl0aGVyIGFkZCB0aGUgYCcgKyBmYWN0
b3J5RmxhZyArICdgIHByb3BlcnR5IHRvIHRoaXMgZmFjdG9yeSBvciAnKSArICgnZXh0ZW5kIGZy
b20gJyArIGV4cGVjdGVkVHlwZSArICcuJyksICEhcmVzb2x2ZWRUeXBlW2ZhY3RvcnlGbGFnXSwg
eyBpZDogJ2VtYmVyLWFwcGxpY2F0aW9uLnZhbGlkYXRlLXR5cGUnLCB1bnRpbDogJzMuMC4wJyB9
KTsKKyAgICB9IGVsc2UgeworICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ0V4cGVjdGVk
ICcgKyBwYXJzZWROYW1lLmZ1bGxOYW1lICsgJyB0byByZXNvbHZlIHRvIGFuICcgKyBleHBlY3Rl
ZFR5cGUgKyAnIGJ1dCAnICsgKCdpbnN0ZWFkIGl0IHdhcyAnICsgcmVzb2x2ZWRUeXBlICsgJy4n
KSwgISFyZXNvbHZlZFR5cGVbZmFjdG9yeUZsYWddKTsKKyAgICB9CisgIH0KK30pOworZW5pZmVk
KCdlbWJlci1kZWJ1Zy9kZXByZWNhdGUnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvY29yZScs
ICdlbWJlci1tZXRhbC9lcnJvcicsICdlbWJlci1tZXRhbC9sb2dnZXInLCAnZW1iZXItZGVidWcv
aGFuZGxlcnMnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsQ29yZSwgX2VtYmVyTWV0
YWxFcnJvciwgX2VtYmVyTWV0YWxMb2dnZXIsIF9lbWJlckRlYnVnSGFuZGxlcnMpIHsKKyAgLypn
bG9iYWwgX19mYWlsX18qLworCisgICd1c2Ugc3RyaWN0JzsKKworICB2YXIgX3NsaWNlID0gQXJy
YXkucHJvdG90eXBlLnNsaWNlOworICBleHBvcnRzLnJlZ2lzdGVySGFuZGxlciA9IHJlZ2lzdGVy
SGFuZGxlcjsKKyAgZXhwb3J0cy5kZWZhdWx0ID0gZGVwcmVjYXRlOworCisgIGZ1bmN0aW9uIHJl
Z2lzdGVySGFuZGxlcihoYW5kbGVyKSB7CisgICAgX2VtYmVyRGVidWdIYW5kbGVycy5yZWdpc3Rl
ckhhbmRsZXIoJ2RlcHJlY2F0ZScsIGhhbmRsZXIpOworICB9CisKKyAgZnVuY3Rpb24gZm9ybWF0
TWVzc2FnZShfbWVzc2FnZSwgb3B0aW9ucykgeworICAgIHZhciBtZXNzYWdlID0gX21lc3NhZ2U7
CisKKyAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmlkKSB7CisgICAgICBtZXNzYWdlID0gbWVz
c2FnZSArICgnIFtkZXByZWNhdGlvbiBpZDogJyArIG9wdGlvbnMuaWQgKyAnXScpOworICAgIH0K
KworICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMudXJsKSB7CisgICAgICBtZXNzYWdlICs9ICcg
U2VlICcgKyBvcHRpb25zLnVybCArICcgZm9yIG1vcmUgZGV0YWlscy4nOworICAgIH0KKworICAg
IHJldHVybiBtZXNzYWdlOworICB9CisKKyAgcmVnaXN0ZXJIYW5kbGVyKGZ1bmN0aW9uIGxvZ0Rl
cHJlY2F0aW9uVG9Db25zb2xlKG1lc3NhZ2UsIG9wdGlvbnMpIHsKKyAgICB2YXIgdXBkYXRlZE1l
c3NhZ2UgPSBmb3JtYXRNZXNzYWdlKG1lc3NhZ2UsIG9wdGlvbnMpOworCisgICAgX2VtYmVyTWV0
YWxMb2dnZXIuZGVmYXVsdC53YXJuKCdERVBSRUNBVElPTjogJyArIHVwZGF0ZWRNZXNzYWdlKTsK
KyAgfSk7CisKKyAgdmFyIGNhcHR1cmVFcnJvckZvclN0YWNrID0gdW5kZWZpbmVkOworCisgIGlm
IChuZXcgRXJyb3IoKS5zdGFjaykgeworICAgIGNhcHR1cmVFcnJvckZvclN0YWNrID0gZnVuY3Rp
b24gKCkgeworICAgICAgcmV0dXJuIG5ldyBFcnJvcigpOworICAgIH07CisgIH0gZWxzZSB7Cisg
ICAgY2FwdHVyZUVycm9yRm9yU3RhY2sgPSBmdW5jdGlvbiAoKSB7CisgICAgICB0cnkgeworICAg
ICAgICBfX2ZhaWxfXy5mYWlsKCk7CisgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHJldHVy
biBlOworICAgICAgfQorICAgIH07CisgIH0KKworICByZWdpc3RlckhhbmRsZXIoZnVuY3Rpb24g
bG9nRGVwcmVjYXRpb25TdGFja1RyYWNlKG1lc3NhZ2UsIG9wdGlvbnMsIG5leHQpIHsKKyAgICBp
ZiAoX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuTE9HX1NUQUNLVFJBQ0VfT05fREVQUkVDQVRJT04p
IHsKKyAgICAgIHZhciBzdGFja1N0ciA9ICcnOworICAgICAgdmFyIGVycm9yID0gY2FwdHVyZUVy
cm9yRm9yU3RhY2soKTsKKyAgICAgIHZhciBzdGFjayA9IHVuZGVmaW5lZDsKKworICAgICAgaWYg
KGVycm9yLnN0YWNrKSB7CisgICAgICAgIGlmIChlcnJvclsnYXJndW1lbnRzJ10pIHsKKyAgICAg
ICAgICAvLyBDaHJvbWUKKyAgICAgICAgICBzdGFjayA9IGVycm9yLnN0YWNrLnJlcGxhY2UoL15c
cythdFxzKy9nbSwgJycpLnJlcGxhY2UoL14oW15cKF0rPykoW1xuJF0pL2dtLCAne2Fub255bW91
c30oJDEpJDInKS5yZXBsYWNlKC9eT2JqZWN0Ljxhbm9ueW1vdXM+XHMqXCgoW15cKV0rKVwpL2dt
LCAne2Fub255bW91c30oJDEpJykuc3BsaXQoJ1xuJyk7CisgICAgICAgICAgc3RhY2suc2hpZnQo
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAvLyBGaXJlZm94CisgICAgICAgICAgc3Rh
Y2sgPSBlcnJvci5zdGFjay5yZXBsYWNlKC8oPzpcbkA6MCk/XHMrJC9tLCAnJykucmVwbGFjZSgv
XlwoL2dtLCAne2Fub255bW91c30oJykuc3BsaXQoJ1xuJyk7CisgICAgICAgIH0KKworICAgICAg
ICBzdGFja1N0ciA9ICdcbiAgICAnICsgc3RhY2suc2xpY2UoMikuam9pbignXG4gICAgJyk7Cisg
ICAgICB9CisKKyAgICAgIHZhciB1cGRhdGVkTWVzc2FnZSA9IGZvcm1hdE1lc3NhZ2UobWVzc2Fn
ZSwgb3B0aW9ucyk7CisKKyAgICAgIF9lbWJlck1ldGFsTG9nZ2VyLmRlZmF1bHQud2FybignREVQ
UkVDQVRJT046ICcgKyB1cGRhdGVkTWVzc2FnZSArIHN0YWNrU3RyKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgbmV4dC5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7CisgICAgfQorICB9KTsKKwor
ICByZWdpc3RlckhhbmRsZXIoZnVuY3Rpb24gcmFpc2VPbkRlcHJlY2F0aW9uKG1lc3NhZ2UsIG9w
dGlvbnMsIG5leHQpIHsKKyAgICBpZiAoX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuRU5WLlJBSVNF
X09OX0RFUFJFQ0FUSU9OKSB7CisgICAgICB2YXIgdXBkYXRlZE1lc3NhZ2UgPSBmb3JtYXRNZXNz
YWdlKG1lc3NhZ2UpOworCisgICAgICB0aHJvdyBuZXcgX2VtYmVyTWV0YWxFcnJvci5kZWZhdWx0
KHVwZGF0ZWRNZXNzYWdlKTsKKyAgICB9IGVsc2UgeworICAgICAgbmV4dC5hcHBseSh1bmRlZmlu
ZWQsIGFyZ3VtZW50cyk7CisgICAgfQorICB9KTsKKworICB2YXIgbWlzc2luZ09wdGlvbnNEZXBy
ZWNhdGlvbiA9ICdXaGVuIGNhbGxpbmcgYEVtYmVyLmRlcHJlY2F0ZWAgeW91ICcgKyAnbXVzdCBw
cm92aWRlIGFuIGBvcHRpb25zYCBoYXNoIGFzIHRoZSB0aGlyZCBwYXJhbWV0ZXIuICAnICsgJ2Bv
cHRpb25zYCBzaG91bGQgaW5jbHVkZSBgaWRgIGFuZCBgdW50aWxgIHByb3BlcnRpZXMuJzsKKyAg
ZXhwb3J0cy5taXNzaW5nT3B0aW9uc0RlcHJlY2F0aW9uID0gbWlzc2luZ09wdGlvbnNEZXByZWNh
dGlvbjsKKyAgdmFyIG1pc3NpbmdPcHRpb25zSWREZXByZWNhdGlvbiA9ICdXaGVuIGNhbGxpbmcg
YEVtYmVyLmRlcHJlY2F0ZWAgeW91IG11c3QgcHJvdmlkZSBgaWRgIGluIG9wdGlvbnMuJzsKKyAg
ZXhwb3J0cy5taXNzaW5nT3B0aW9uc0lkRGVwcmVjYXRpb24gPSBtaXNzaW5nT3B0aW9uc0lkRGVw
cmVjYXRpb247CisgIHZhciBtaXNzaW5nT3B0aW9uc1VudGlsRGVwcmVjYXRpb24gPSAnV2hlbiBj
YWxsaW5nIGBFbWJlci5kZXByZWNhdGVgIHlvdSBtdXN0IHByb3ZpZGUgYHVudGlsYCBpbiBvcHRp
b25zLic7CisKKyAgZXhwb3J0cy5taXNzaW5nT3B0aW9uc1VudGlsRGVwcmVjYXRpb24gPSBtaXNz
aW5nT3B0aW9uc1VudGlsRGVwcmVjYXRpb247CisgIC8qKgorICBAbW9kdWxlIGVtYmVyCisgIEBz
dWJtb2R1bGUgZW1iZXItZGVidWcKKyAgKi8KKworICAvKioKKyAgICBEaXNwbGF5IGEgZGVwcmVj
YXRpb24gd2FybmluZyB3aXRoIHRoZSBwcm92aWRlZCBtZXNzYWdlIGFuZCBhIHN0YWNrIHRyYWNl
CisgICAgKENocm9tZSBhbmQgRmlyZWZveCBvbmx5KS4KKyAgCisgICAgKiBJbiBhIHByb2R1Y3Rp
b24gYnVpbGQsIHRoaXMgbWV0aG9kIGlzIGRlZmluZWQgYXMgYW4gZW1wdHkgZnVuY3Rpb24gKE5P
UCkuCisgICAgVXNlcyBvZiB0aGlzIG1ldGhvZCBpbiBFbWJlciBpdHNlbGYgYXJlIHN0cmlwcGVk
IGZyb20gdGhlIGVtYmVyLnByb2QuanMgYnVpbGQuCisgIAorICAgIEBtZXRob2QgZGVwcmVjYXRl
CisgICAgQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgQSBkZXNjcmlwdGlvbiBvZiB0aGUgZGVwcmVj
YXRpb24uCisgICAgQHBhcmFtIHtCb29sZWFufSB0ZXN0IEEgYm9vbGVhbi4gSWYgZmFsc3ksIHRo
ZSBkZXByZWNhdGlvbgorICAgICAgd2lsbCBiZSBkaXNwbGF5ZWQuCisgICAgQHBhcmFtIHtPYmpl
Y3R9IG9wdGlvbnMgQW4gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcGFzcworICAgICAgaW4g
YSBgdXJsYCB0byB0aGUgdHJhbnNpdGlvbiBndWlkZSBvbiB0aGUgZW1iZXJqcy5jb20gd2Vic2l0
ZSwgYW5kIGEgdW5pcXVlCisgICAgICBgaWRgIGZvciB0aGlzIGRlcHJlY2F0aW9uLiBUaGUgYGlk
YCBjYW4gYmUgdXNlZCBieSBFbWJlciBkZWJ1Z2dpbmcgdG9vbHMKKyAgICAgIHRvIGNoYW5nZSB0
aGUgYmVoYXZpb3IgKHJhaXNlLCBsb2cgb3Igc2lsZW5jZSkgZm9yIHRoYXQgc3BlY2lmaWMgZGVw
cmVjYXRpb24uCisgICAgICBUaGUgYGlkYCBzaG91bGQgYmUgbmFtZXNwYWNlZCBieSBkb3RzLCBl
LmcuICJ2aWV3LmhlbHBlci5zZWxlY3QiLgorICAgIEBmb3IgRW1iZXIKKyAgICBAcHVibGljCisg
ICovCisKKyAgZnVuY3Rpb24gZGVwcmVjYXRlKG1lc3NhZ2UsIHRlc3QsIG9wdGlvbnMpIHsKKyAg
ICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMuaWQgJiYgIW9wdGlvbnMudW50aWwpIHsKKyAgICAg
IGRlcHJlY2F0ZShtaXNzaW5nT3B0aW9uc0RlcHJlY2F0aW9uLCBmYWxzZSwgeworICAgICAgICBp
ZDogJ2VtYmVyLWRlYnVnLmRlcHJlY2F0ZS1vcHRpb25zLW1pc3NpbmcnLAorICAgICAgICB1bnRp
bDogJzMuMC4wJywKKyAgICAgICAgdXJsOiAnaHR0cDovL2VtYmVyanMuY29tL2RlcHJlY2F0aW9u
cy92Mi54LyN0b2NfZW1iZXItZGVidWctZnVuY3Rpb24tb3B0aW9ucycKKyAgICAgIH0pOworICAg
IH0KKworICAgIGlmIChvcHRpb25zICYmICFvcHRpb25zLmlkKSB7CisgICAgICBkZXByZWNhdGUo
bWlzc2luZ09wdGlvbnNJZERlcHJlY2F0aW9uLCBmYWxzZSwgeworICAgICAgICBpZDogJ2VtYmVy
LWRlYnVnLmRlcHJlY2F0ZS1pZC1taXNzaW5nJywKKyAgICAgICAgdW50aWw6ICczLjAuMCcsCisg
ICAgICAgIHVybDogJ2h0dHA6Ly9lbWJlcmpzLmNvbS9kZXByZWNhdGlvbnMvdjIueC8jdG9jX2Vt
YmVyLWRlYnVnLWZ1bmN0aW9uLW9wdGlvbnMnCisgICAgICB9KTsKKyAgICB9CisKKyAgICBpZiAo
b3B0aW9ucyAmJiAhb3B0aW9ucy51bnRpbCkgeworICAgICAgZGVwcmVjYXRlKG1pc3NpbmdPcHRp
b25zVW50aWxEZXByZWNhdGlvbiwgb3B0aW9ucyAmJiBvcHRpb25zLnVudGlsLCB7CisgICAgICAg
IGlkOiAnZW1iZXItZGVidWcuZGVwcmVjYXRlLXVudGlsLW1pc3NpbmcnLAorICAgICAgICB1bnRp
bDogJzMuMC4wJywKKyAgICAgICAgdXJsOiAnaHR0cDovL2VtYmVyanMuY29tL2RlcHJlY2F0aW9u
cy92Mi54LyN0b2NfZW1iZXItZGVidWctZnVuY3Rpb24tb3B0aW9ucycKKyAgICAgIH0pOworICAg
IH0KKworICAgIF9lbWJlckRlYnVnSGFuZGxlcnMuaW52b2tlLmFwcGx5KHVuZGVmaW5lZCwgWydk
ZXByZWNhdGUnXS5jb25jYXQoX3NsaWNlLmNhbGwoYXJndW1lbnRzKSkpOworICB9Cit9KTsKK2Vu
aWZlZCgiZW1iZXItZGVidWcvaGFuZGxlcnMiLCBbImV4cG9ydHMiXSwgZnVuY3Rpb24gKGV4cG9y
dHMpIHsKKyAgInVzZSBzdHJpY3QiOworCisgIGV4cG9ydHMucmVnaXN0ZXJIYW5kbGVyID0gcmVn
aXN0ZXJIYW5kbGVyOworICBleHBvcnRzLmludm9rZSA9IGludm9rZTsKKyAgdmFyIEhBTkRMRVJT
ID0ge307CisKKyAgZXhwb3J0cy5IQU5ETEVSUyA9IEhBTkRMRVJTOworCisgIGZ1bmN0aW9uIHJl
Z2lzdGVySGFuZGxlcih0eXBlLCBjYWxsYmFjaykgeworICAgIHZhciBuZXh0SGFuZGxlciA9IEhB
TkRMRVJTW3R5cGVdIHx8IGZ1bmN0aW9uICgpIHt9OworCisgICAgSEFORExFUlNbdHlwZV0gPSBm
dW5jdGlvbiAobWVzc2FnZSwgb3B0aW9ucykgeworICAgICAgY2FsbGJhY2sobWVzc2FnZSwgb3B0
aW9ucywgbmV4dEhhbmRsZXIpOworICAgIH07CisgIH0KKworICBmdW5jdGlvbiBpbnZva2UodHlw
ZSwgbWVzc2FnZSwgdGVzdCwgb3B0aW9ucykgeworICAgIGlmICh0ZXN0KSB7CisgICAgICByZXR1
cm47CisgICAgfQorCisgICAgdmFyIGhhbmRsZXJGb3JUeXBlID0gSEFORExFUlNbdHlwZV07CisK
KyAgICBpZiAoIWhhbmRsZXJGb3JUeXBlKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGhhbmRsZXJGb3JUeXBlKSB7CisgICAgICBoYW5kbGVyRm9yVHlwZShtZXNzYWdlLCBvcHRp
b25zKTsKKyAgICB9CisgIH0KK30pOworZW5pZmVkKCdlbWJlci1kZWJ1Zy9pbmRleCcsIFsnZXhw
b3J0cycsICdlbWJlci1tZXRhbC9jb3JlJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLW1l
dGFsL2ZlYXR1cmVzJywgJ2VtYmVyLW1ldGFsL2Vycm9yJywgJ2VtYmVyLW1ldGFsL2xvZ2dlcics
ICdlbWJlci1tZXRhbC9lbnZpcm9ubWVudCcsICdlbWJlci1kZWJ1Zy9kZXByZWNhdGUnLCAnZW1i
ZXItZGVidWcvd2FybiddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxDb3JlLCBfZW1i
ZXJNZXRhbERlYnVnLCBfZW1iZXJNZXRhbEZlYXR1cmVzLCBfZW1iZXJNZXRhbEVycm9yLCBfZW1i
ZXJNZXRhbExvZ2dlciwgX2VtYmVyTWV0YWxFbnZpcm9ubWVudCwgX2VtYmVyRGVidWdEZXByZWNh
dGUsIF9lbWJlckRlYnVnV2FybikgeworICAndXNlIHN0cmljdCc7CisKKyAgZXhwb3J0cy5fd2Fy
bklmVXNpbmdTdHJpcHBlZEZlYXR1cmVGbGFncyA9IF93YXJuSWZVc2luZ1N0cmlwcGVkRmVhdHVy
ZUZsYWdzOworCisgIC8qKgorICBAbW9kdWxlIGVtYmVyCisgIEBzdWJtb2R1bGUgZW1iZXItZGVi
dWcKKyAgKi8KKworICAvKioKKyAgQGNsYXNzIEVtYmVyCisgIEBwdWJsaWMKKyAgKi8KKworICAv
KioKKyAgICBEZWZpbmUgYW4gYXNzZXJ0aW9uIHRoYXQgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24g
aWYgdGhlIGNvbmRpdGlvbiBpcyBub3QgbWV0LgorICAKKyAgICAqIEluIGEgcHJvZHVjdGlvbiBi
dWlsZCwgdGhpcyBtZXRob2QgaXMgZGVmaW5lZCBhcyBhbiBlbXB0eSBmdW5jdGlvbiAoTk9QKS4K
KyAgICBVc2VzIG9mIHRoaXMgbWV0aG9kIGluIEVtYmVyIGl0c2VsZiBhcmUgc3RyaXBwZWQgZnJv
bSB0aGUgZW1iZXIucHJvZC5qcyBidWlsZC4KKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIC8v
IFRlc3QgZm9yIHRydXRoaW5lc3MKKyAgICBFbWJlci5hc3NlcnQoJ011c3QgcGFzcyBhIHZhbGlk
IG9iamVjdCcsIG9iaik7CisgIAorICAgIC8vIEZhaWwgdW5jb25kaXRpb25hbGx5CisgICAgRW1i
ZXIuYXNzZXJ0KCdUaGlzIGNvZGUgcGF0aCBzaG91bGQgbmV2ZXIgYmUgcnVuJyk7CisgICAgYGBg
CisgIAorICAgIEBtZXRob2QgYXNzZXJ0CisgICAgQHBhcmFtIHtTdHJpbmd9IGRlc2MgQSBkZXNj
cmlwdGlvbiBvZiB0aGUgYXNzZXJ0aW9uLiBUaGlzIHdpbGwgYmVjb21lCisgICAgICB0aGUgdGV4
dCBvZiB0aGUgRXJyb3IgdGhyb3duIGlmIHRoZSBhc3NlcnRpb24gZmFpbHMuCisgICAgQHBhcmFt
IHtCb29sZWFufSB0ZXN0IE11c3QgYmUgdHJ1dGh5IGZvciB0aGUgYXNzZXJ0aW9uIHRvIHBhc3Mu
IElmCisgICAgICBmYWxzeSwgYW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duLgorICAgIEBwdWJs
aWMKKyAgKi8KKyAgX2VtYmVyTWV0YWxEZWJ1Zy5zZXREZWJ1Z0Z1bmN0aW9uKCdhc3NlcnQnLCBm
dW5jdGlvbiBhc3NlcnQoZGVzYywgdGVzdCkgeworICAgIGlmICghdGVzdCkgeworICAgICAgdGhy
b3cgbmV3IF9lbWJlck1ldGFsRXJyb3IuZGVmYXVsdCgnQXNzZXJ0aW9uIEZhaWxlZDogJyArIGRl
c2MpOworICAgIH0KKyAgfSk7CisKKyAgLyoqCisgICAgRGlzcGxheSBhIGRlYnVnIG5vdGljZS4K
KyAgCisgICAgKiBJbiBhIHByb2R1Y3Rpb24gYnVpbGQsIHRoaXMgbWV0aG9kIGlzIGRlZmluZWQg
YXMgYW4gZW1wdHkgZnVuY3Rpb24gKE5PUCkuCisgICAgVXNlcyBvZiB0aGlzIG1ldGhvZCBpbiBF
bWJlciBpdHNlbGYgYXJlIHN0cmlwcGVkIGZyb20gdGhlIGVtYmVyLnByb2QuanMgYnVpbGQuCisg
IAorICAgIGBgYGphdmFzY3JpcHQKKyAgICBFbWJlci5kZWJ1ZygnSVwnbSBhIGRlYnVnIG5vdGlj
ZSEnKTsKKyAgICBgYGAKKyAgCisgICAgQG1ldGhvZCBkZWJ1ZworICAgIEBwYXJhbSB7U3RyaW5n
fSBtZXNzYWdlIEEgZGVidWcgbWVzc2FnZSB0byBkaXNwbGF5LgorICAgIEBwdWJsaWMKKyAgKi8K
KyAgX2VtYmVyTWV0YWxEZWJ1Zy5zZXREZWJ1Z0Z1bmN0aW9uKCdkZWJ1ZycsIGZ1bmN0aW9uIGRl
YnVnKG1lc3NhZ2UpIHsKKyAgICBfZW1iZXJNZXRhbExvZ2dlci5kZWZhdWx0LmRlYnVnKCdERUJV
RzogJyArIG1lc3NhZ2UpOworICB9KTsKKworICAvKioKKyAgICBEaXNwbGF5IGFuIGluZm8gbm90
aWNlLgorICAKKyAgICAqIEluIGEgcHJvZHVjdGlvbiBidWlsZCwgdGhpcyBtZXRob2QgaXMgZGVm
aW5lZCBhcyBhbiBlbXB0eSBmdW5jdGlvbiAoTk9QKS4KKyAgICBVc2VzIG9mIHRoaXMgbWV0aG9k
IGluIEVtYmVyIGl0c2VsZiBhcmUgc3RyaXBwZWQgZnJvbSB0aGUgZW1iZXIucHJvZC5qcyBidWls
ZC4KKyAgCisgICAgQG1ldGhvZCBpbmZvCisgICAgQHByaXZhdGUKKyAgKi8KKyAgX2VtYmVyTWV0
YWxEZWJ1Zy5zZXREZWJ1Z0Z1bmN0aW9uKCdpbmZvJywgZnVuY3Rpb24gaW5mbygpIHsKKyAgICBf
ZW1iZXJNZXRhbExvZ2dlci5kZWZhdWx0LmluZm8uYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMp
OworICB9KTsKKworICAvKioKKyAgICBBbGlhcyBhbiBvbGQsIGRlcHJlY2F0ZWQgbWV0aG9kIHdp
dGggaXRzIG5ldyBjb3VudGVycGFydC4KKyAgCisgICAgRGlzcGxheSBhIGRlcHJlY2F0aW9uIHdh
cm5pbmcgd2l0aCB0aGUgcHJvdmlkZWQgbWVzc2FnZSBhbmQgYSBzdGFjayB0cmFjZQorICAgIChD
aHJvbWUgYW5kIEZpcmVmb3ggb25seSkgd2hlbiB0aGUgYXNzaWduZWQgbWV0aG9kIGlzIGNhbGxl
ZC4KKyAgCisgICAgKiBJbiBhIHByb2R1Y3Rpb24gYnVpbGQsIHRoaXMgbWV0aG9kIGlzIGRlZmlu
ZWQgYXMgYW4gZW1wdHkgZnVuY3Rpb24gKE5PUCkuCisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAg
ICBFbWJlci5vbGRNZXRob2QgPSBFbWJlci5kZXByZWNhdGVGdW5jKCdQbGVhc2UgdXNlIHRoZSBu
ZXcsIHVwZGF0ZWQgbWV0aG9kJywgRW1iZXIubmV3TWV0aG9kKTsKKyAgICBgYGAKKyAgCisgICAg
QG1ldGhvZCBkZXByZWNhdGVGdW5jCisgICAgQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgQSBkZXNj
cmlwdGlvbiBvZiB0aGUgZGVwcmVjYXRpb24uCisgICAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25z
XSBUaGUgb3B0aW9ucyBvYmplY3QgZm9yIEVtYmVyLmRlcHJlY2F0ZS4KKyAgICBAcGFyYW0ge0Z1
bmN0aW9ufSBmdW5jIFRoZSBuZXcgZnVuY3Rpb24gY2FsbGVkIHRvIHJlcGxhY2UgaXRzIGRlcHJl
Y2F0ZWQgY291bnRlcnBhcnQuCisgICAgQHJldHVybiB7RnVuY3Rpb259IEEgbmV3IGZ1bmN0aW9u
IHRoYXQgd3JhcHMgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHdpdGggYSBkZXByZWNhdGlvbiB3YXJu
aW5nCisgICAgQHByaXZhdGUKKyAgKi8KKyAgX2VtYmVyTWV0YWxEZWJ1Zy5zZXREZWJ1Z0Z1bmN0
aW9uKCdkZXByZWNhdGVGdW5jJywgZnVuY3Rpb24gZGVwcmVjYXRlRnVuYygpIHsKKyAgICBmb3Ig
KHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0g
MDsgX2tleSA8IF9sZW47IF9rZXkrKykgeworICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tf
a2V5XTsKKyAgICB9CisKKyAgICBpZiAoYXJncy5sZW5ndGggPT09IDMpIHsKKyAgICAgIHZhciBf
cmV0ID0gKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIG1lc3NhZ2UgPSBhcmdzWzBdOworICAg
ICAgICB2YXIgb3B0aW9ucyA9IGFyZ3NbMV07CisgICAgICAgIHZhciBmdW5jID0gYXJnc1syXTsK
KworICAgICAgICByZXR1cm4geworICAgICAgICAgIHY6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIF9lbWJlck1ldGFsRGVidWcuZGVwcmVjYXRlKG1lc3NhZ2UsIGZhbHNlLCBvcHRpb25zKTsK
KyAgICAgICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAg
ICAgfQorICAgICAgICB9OworICAgICAgfSkoKTsKKworICAgICAgaWYgKHR5cGVvZiBfcmV0ID09
PSAnb2JqZWN0JykgcmV0dXJuIF9yZXQudjsKKyAgICB9IGVsc2UgeworICAgICAgdmFyIF9yZXQy
ID0gKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIG1lc3NhZ2UgPSBhcmdzWzBdOworICAgICAg
ICB2YXIgZnVuYyA9IGFyZ3NbMV07CisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICB2OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICBfZW1iZXJNZXRhbERlYnVnLmRlcHJlY2F0ZShtZXNz
YWdlKTsKKyAgICAgICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Cisg
ICAgICAgICAgfQorICAgICAgICB9OworICAgICAgfSkoKTsKKworICAgICAgaWYgKHR5cGVvZiBf
cmV0MiA9PT0gJ29iamVjdCcpIHJldHVybiBfcmV0Mi52OworICAgIH0KKyAgfSk7CisKKyAgLyoq
CisgICAgUnVuIGEgZnVuY3Rpb24gbWVhbnQgZm9yIGRlYnVnZ2luZy4KKyAgCisgICAgKiBJbiBh
IHByb2R1Y3Rpb24gYnVpbGQsIHRoaXMgbWV0aG9kIGlzIGRlZmluZWQgYXMgYW4gZW1wdHkgZnVu
Y3Rpb24gKE5PUCkuCisgICAgVXNlcyBvZiB0aGlzIG1ldGhvZCBpbiBFbWJlciBpdHNlbGYgYXJl
IHN0cmlwcGVkIGZyb20gdGhlIGVtYmVyLnByb2QuanMgYnVpbGQuCisgIAorICAgIGBgYGphdmFz
Y3JpcHQKKyAgICBFbWJlci5ydW5JbkRlYnVnKCgpID0+IHsKKyAgICAgIEVtYmVyLkNvbXBvbmVu
dC5yZW9wZW4oeworICAgICAgICBkaWRJbnNlcnRFbGVtZW50KCkgeworICAgICAgICAgIGNvbnNv
bGUubG9nKCJJJ20gaGFwcHkiKTsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgfSk7CisgICAg
YGBgCisgIAorICAgIEBtZXRob2QgcnVuSW5EZWJ1ZworICAgIEBwYXJhbSB7RnVuY3Rpb259IGZ1
bmMgVGhlIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkLgorICAgIEBzaW5jZSAxLjUuMAorICAgIEBw
dWJsaWMKKyAgKi8KKyAgX2VtYmVyTWV0YWxEZWJ1Zy5zZXREZWJ1Z0Z1bmN0aW9uKCdydW5JbkRl
YnVnJywgZnVuY3Rpb24gcnVuSW5EZWJ1ZyhmdW5jKSB7CisgICAgZnVuYygpOworICB9KTsKKwor
ICBfZW1iZXJNZXRhbERlYnVnLnNldERlYnVnRnVuY3Rpb24oJ2RlYnVnU2VhbCcsIGZ1bmN0aW9u
IGRlYnVnU2VhbChvYmopIHsKKyAgICBPYmplY3Quc2VhbChvYmopOworICB9KTsKKworICBfZW1i
ZXJNZXRhbERlYnVnLnNldERlYnVnRnVuY3Rpb24oJ2RlcHJlY2F0ZScsIF9lbWJlckRlYnVnRGVw
cmVjYXRlLmRlZmF1bHQpOworCisgIF9lbWJlck1ldGFsRGVidWcuc2V0RGVidWdGdW5jdGlvbign
d2FybicsIF9lbWJlckRlYnVnV2Fybi5kZWZhdWx0KTsKKworICAvKioKKyAgICBXaWxsIGNhbGwg
YEVtYmVyLndhcm4oKWAgaWYgRU5BQkxFX09QVElPTkFMX0ZFQVRVUkVTIG9yCisgICAgYW55IHNw
ZWNpZmljIEZFQVRVUkVTIGZsYWcgaXMgdHJ1dGh5LgorICAKKyAgICBUaGlzIG1ldGhvZCBpcyBj
YWxsZWQgYXV0b21hdGljYWxseSBpbiBkZWJ1ZyBjYW5hcnkgYnVpbGRzLgorICAKKyAgICBAcHJp
dmF0ZQorICAgIEBtZXRob2QgX3dhcm5JZlVzaW5nU3RyaXBwZWRGZWF0dXJlRmxhZ3MKKyAgICBA
cmV0dXJuIHt2b2lkfQorICAqLworCisgIGZ1bmN0aW9uIF93YXJuSWZVc2luZ1N0cmlwcGVkRmVh
dHVyZUZsYWdzKEZFQVRVUkVTLCBrbm93bkZlYXR1cmVzLCBmZWF0dXJlc1dlcmVTdHJpcHBlZCkg
eworICAgIGlmIChmZWF0dXJlc1dlcmVTdHJpcHBlZCkgeworICAgICAgX2VtYmVyTWV0YWxEZWJ1
Zy53YXJuKCdFbWJlci5FTlYuRU5BQkxFX09QVElPTkFMX0ZFQVRVUkVTIGlzIG9ubHkgYXZhaWxh
YmxlIGluIGNhbmFyeSBidWlsZHMuJywgIV9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LkVOVi5FTkFC
TEVfT1BUSU9OQUxfRkVBVFVSRVMsIHsgaWQ6ICdlbWJlci1kZWJ1Zy5mZWF0dXJlLWZsYWctd2l0
aC1mZWF0dXJlcy1zdHJpcHBlZCcgfSk7CisKKyAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMo
RkVBVFVSRVMgfHwge30pOworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsg
aSsrKSB7CisgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldOworICAgICAgICBpZiAoa2V5ID09PSAn
aXNFbmFibGVkJyB8fCAhKGtleSBpbiBrbm93bkZlYXR1cmVzKSkgeworICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CisKKyAgICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy53YXJuKCdGRUFUVVJF
WyInICsga2V5ICsgJyJdIGlzIHNldCBhcyBlbmFibGVkLCBidXQgRkVBVFVSRSBmbGFncyBhcmUg
b25seSBhdmFpbGFibGUgaW4gY2FuYXJ5IGJ1aWxkcy4nLCAhRkVBVFVSRVNba2V5XSwgeyBpZDog
J2VtYmVyLWRlYnVnLmZlYXR1cmUtZmxhZy13aXRoLWZlYXR1cmVzLXN0cmlwcGVkJyB9KTsKKyAg
ICAgIH0KKyAgICB9CisgIH0KKworICBpZiAoIV9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LnRlc3Rp
bmcpIHsKKyAgICAvLyBDb21wbGFpbiBpZiB0aGV5J3JlIHVzaW5nIEZFQVRVUkUgZmxhZ3MgaW4g
YnVpbGRzIG90aGVyIHRoYW4gY2FuYXJ5CisgICAgX2VtYmVyTWV0YWxGZWF0dXJlcy5GRUFUVVJF
U1snZmVhdHVyZXMtc3RyaXBwZWQtdGVzdCddID0gdHJ1ZTsKKyAgICB2YXIgZmVhdHVyZXNXZXJl
U3RyaXBwZWQgPSB0cnVlOworCisgICAgZGVsZXRlIF9lbWJlck1ldGFsRmVhdHVyZXMuRkVBVFVS
RVNbJ2ZlYXR1cmVzLXN0cmlwcGVkLXRlc3QnXTsKKyAgICBfd2FybklmVXNpbmdTdHJpcHBlZEZl
YXR1cmVGbGFncyhfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5FTlYuRkVBVFVSRVMsIF9lbWJlck1l
dGFsRmVhdHVyZXMuS05PV05fRkVBVFVSRVMsIGZlYXR1cmVzV2VyZVN0cmlwcGVkKTsKKworICAg
IC8vIEluZm9ybSB0aGUgZGV2ZWxvcGVyIGFib3V0IHRoZSBFbWJlciBJbnNwZWN0b3IgaWYgbm90
IGluc3RhbGxlZC4KKyAgICB2YXIgaXNGaXJlZm94ID0gX2VtYmVyTWV0YWxFbnZpcm9ubWVudC5k
ZWZhdWx0LmlzRmlyZWZveDsKKyAgICB2YXIgaXNDaHJvbWUgPSBfZW1iZXJNZXRhbEVudmlyb25t
ZW50LmRlZmF1bHQuaXNDaHJvbWU7CisKKyAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVm
aW5lZCcgJiYgKGlzRmlyZWZveCB8fCBpc0Nocm9tZSkgJiYgd2luZG93LmFkZEV2ZW50TGlzdGVu
ZXIpIHsKKyAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24gKCkg
eworICAgICAgICBpZiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmIGRvY3VtZW50LmRvY3Vt
ZW50RWxlbWVudC5kYXRhc2V0ICYmICFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZGF0YXNldC5l
bWJlckV4dGVuc2lvbikgeworICAgICAgICAgIHZhciBkb3dubG9hZFVSTDsKKworICAgICAgICAg
IGlmIChpc0Nocm9tZSkgeworICAgICAgICAgICAgZG93bmxvYWRVUkwgPSAnaHR0cHM6Ly9jaHJv
bWUuZ29vZ2xlLmNvbS93ZWJzdG9yZS9kZXRhaWwvZW1iZXItaW5zcGVjdG9yL2JtZGJsbmNlZ2tl
bmthY2llaWhmaHBqZnBwb2NvbmhpJzsKKyAgICAgICAgICB9IGVsc2UgaWYgKGlzRmlyZWZveCkg
eworICAgICAgICAgICAgZG93bmxvYWRVUkwgPSAnaHR0cHM6Ly9hZGRvbnMubW96aWxsYS5vcmcv
ZW4tVVMvZmlyZWZveC9hZGRvbi9lbWJlci1pbnNwZWN0b3IvJzsKKyAgICAgICAgICB9CisKKyAg
ICAgICAgICBfZW1iZXJNZXRhbERlYnVnLmRlYnVnKCdGb3IgbW9yZSBhZHZhbmNlZCBkZWJ1Z2dp
bmcsIGluc3RhbGwgdGhlIEVtYmVyIEluc3BlY3RvciBmcm9tICcgKyBkb3dubG9hZFVSTCk7Cisg
ICAgICAgIH0KKyAgICAgIH0sIGZhbHNlKTsKKyAgICB9CisgIH0KKyAgLyoqCisgICAgQHB1Ymxp
YworICAgIEBjbGFzcyBFbWJlci5EZWJ1ZworICAqLworICBfZW1iZXJNZXRhbENvcmUuZGVmYXVs
dC5EZWJ1ZyA9IHt9OworCisgIC8qKgorICAgIEFsbG93cyBmb3IgcnVudGltZSByZWdpc3RyYXRp
b24gb2YgaGFuZGxlciBmdW5jdGlvbnMgdGhhdCBvdmVycmlkZSB0aGUgZGVmYXVsdCBkZXByZWNh
dGlvbiBiZWhhdmlvci4KKyAgICBEZXByZWNhdGlvbnMgYXJlIGludm9rZWQgYnkgY2FsbHMgdG8g
W0VtYmVyLmRlcHJlY2F0ZV0oaHR0cDovL2VtYmVyanMuY29tL2FwaS9jbGFzc2VzL0VtYmVyLmh0
bWwjbWV0aG9kX2RlcHJlY2F0ZSkuCisgICAgVGhlIGZvbGxvd2luZyBleGFtcGxlIGRlbW9uc3Ry
YXRlcyBpdHMgdXNhZ2UgYnkgcmVnaXN0ZXJpbmcgYSBoYW5kbGVyIHRoYXQgdGhyb3dzIGFuIGVy
cm9yIGlmIHRoZQorICAgIG1lc3NhZ2UgY29udGFpbnMgdGhlIHdvcmQgInNob3VsZCIsIG90aGVy
d2lzZSBkZWZlcnMgdG8gdGhlIGRlZmF1bHQgaGFuZGxlci4KKyAgCisgICAgYGBgamF2YXNjcmlw
dAorICAgIEVtYmVyLkRlYnVnLnJlZ2lzdGVyRGVwcmVjYXRpb25IYW5kbGVyKChtZXNzYWdlLCBv
cHRpb25zLCBuZXh0KSA9PiB7CisgICAgICBpZiAobWVzc2FnZS5pbmRleE9mKCdzaG91bGQnKSAh
PT0gLTEpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEZXByZWNhdGlvbiBtZXNzYWdlIHdp
dGggc2hvdWxkOiAke21lc3NhZ2V9YCk7CisgICAgICB9IGVsc2UgeworICAgICAgICAvLyBkZWZl
ciB0byB3aGF0ZXZlciBoYW5kbGVyIHdhcyByZWdpc3RlcmVkIGJlZm9yZSB0aGlzIG9uZQorICAg
ICAgICBuZXh0KG1lc3NhZ2UsIG9wdGlvbnMpOworICAgICAgfQorICAgIH0KKyAgICBgYGAKKyAg
CisgICAgVGhlIGhhbmRsZXIgZnVuY3Rpb24gdGFrZXMgdGhlIGZvbGxvd2luZyBhcmd1bWVudHM6
CisgIAorICAgIDx1bD4KKyAgICAgIDxsaT4gPGNvZGU+bWVzc2FnZTwvY29kZT4gLSBUaGUgbWVz
c2FnZSByZWNlaXZlZCBmcm9tIHRoZSBkZXByZWNhdGlvbiBjYWxsLjwvbGk+CisgICAgICA8bGk+
IDxjb2RlPm9wdGlvbnM8L2NvZGU+IC0gQW4gb2JqZWN0IHBhc3NlZCBpbiB3aXRoIHRoZSBkZXBy
ZWNhdGlvbiBjYWxsIGNvbnRhaW5pbmcgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbmNsdWRpbmc6
PC9saT4KKyAgICAgICAgPHVsPgorICAgICAgICAgIDxsaT4gPGNvZGU+aWQ8L2NvZGU+IC0gQW4g
aWQgb2YgdGhlIGRlcHJlY2F0aW9uIGluIHRoZSBmb3JtIG9mIDxjb2RlPnBhY2thZ2UtbmFtZS5z
cGVjaWZpYy1kZXByZWNhdGlvbjwvY29kZT4uPC9saT4KKyAgICAgICAgICA8bGk+IDxjb2RlPnVu
dGlsPC9jb2RlPiAtIFRoZSBFbWJlciB2ZXJzaW9uIG51bWJlciB0aGUgZmVhdHVyZSBhbmQgZGVw
cmVjYXRpb24gd2lsbCBiZSByZW1vdmVkIGluLjwvbGk+CisgICAgICAgIDwvdWw+CisgICAgICA8
bGk+IDxjb2RlPm5leHQ8L2NvZGU+IC0gQSBmdW5jdGlvbiB0aGF0IGNhbGxzIGludG8gdGhlIHBy
ZXZpb3VzbHkgcmVnaXN0ZXJlZCBoYW5kbGVyLjwvbGk+CisgICAgPC91bD4KKyAgCisgICAgQHB1
YmxpYworICAgIEBzdGF0aWMKKyAgICBAbWV0aG9kIHJlZ2lzdGVyRGVwcmVjYXRpb25IYW5kbGVy
CisgICAgQHBhcmFtIGhhbmRsZXIge0Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRvIGhhbmRsZSBkZXBy
ZWNhdGlvbiBjYWxscy4KKyAgICBAc2luY2UgMi4xLjAKKyAgKi8KKyAgX2VtYmVyTWV0YWxDb3Jl
LmRlZmF1bHQuRGVidWcucmVnaXN0ZXJEZXByZWNhdGlvbkhhbmRsZXIgPSBfZW1iZXJEZWJ1Z0Rl
cHJlY2F0ZS5yZWdpc3RlckhhbmRsZXI7CisgIC8qKgorICAgIEFsbG93cyBmb3IgcnVudGltZSBy
ZWdpc3RyYXRpb24gb2YgaGFuZGxlciBmdW5jdGlvbnMgdGhhdCBvdmVycmlkZSB0aGUgZGVmYXVs
dCB3YXJuaW5nIGJlaGF2aW9yLgorICAgIFdhcm5pbmdzIGFyZSBpbnZva2VkIGJ5IGNhbGxzIG1h
ZGUgdG8gW0VtYmVyLndhcm5dKGh0dHA6Ly9lbWJlcmpzLmNvbS9hcGkvY2xhc3Nlcy9FbWJlci5o
dG1sI21ldGhvZF93YXJuKS4KKyAgICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgZGVtb25zdHJhdGVz
IGl0cyB1c2FnZSBieSByZWdpc3RlcmluZyBhIGhhbmRsZXIgdGhhdCBkb2VzIG5vdGhpbmcgb3Zl
cnJpZGluZyBFbWJlcidzCisgICAgZGVmYXVsdCB3YXJuaW5nIGJlaGF2aW9yLgorICAKKyAgICBg
YGBqYXZhc2NyaXB0CisgICAgLy8gbmV4dCBpcyBub3QgY2FsbGVkLCBzbyBubyB3YXJuaW5ncyBn
ZXQgdGhlIGRlZmF1bHQgYmVoYXZpb3IKKyAgICBFbWJlci5EZWJ1Zy5yZWdpc3Rlcldhcm5IYW5k
bGVyKCgpID0+IHt9KTsKKyAgICBgYGAKKyAgCisgICAgVGhlIGhhbmRsZXIgZnVuY3Rpb24gdGFr
ZXMgdGhlIGZvbGxvd2luZyBhcmd1bWVudHM6CisgIAorICAgIDx1bD4KKyAgICAgIDxsaT4gPGNv
ZGU+bWVzc2FnZTwvY29kZT4gLSBUaGUgbWVzc2FnZSByZWNlaXZlZCBmcm9tIHRoZSB3YXJuIGNh
bGwuIDwvbGk+CisgICAgICA8bGk+IDxjb2RlPm9wdGlvbnM8L2NvZGU+IC0gQW4gb2JqZWN0IHBh
c3NlZCBpbiB3aXRoIHRoZSB3YXJuIGNhbGwgY29udGFpbmluZyBhZGRpdGlvbmFsIGluZm9ybWF0
aW9uIGluY2x1ZGluZzo8L2xpPgorICAgICAgICA8dWw+CisgICAgICAgICAgPGxpPiA8Y29kZT5p
ZDwvY29kZT4gLSBBbiBpZCBvZiB0aGUgd2FybmluZyBpbiB0aGUgZm9ybSBvZiA8Y29kZT5wYWNr
YWdlLW5hbWUuc3BlY2lmaWMtd2FybmluZzwvY29kZT4uPC9saT4KKyAgICAgICAgPC91bD4KKyAg
ICAgIDxsaT4gPGNvZGU+bmV4dDwvY29kZT4gLSBBIGZ1bmN0aW9uIHRoYXQgY2FsbHMgaW50byB0
aGUgcHJldmlvdXNseSByZWdpc3RlcmVkIGhhbmRsZXIuPC9saT4KKyAgICA8L3VsPgorICAKKyAg
ICBAcHVibGljCisgICAgQHN0YXRpYworICAgIEBtZXRob2QgcmVnaXN0ZXJXYXJuSGFuZGxlcgor
ICAgIEBwYXJhbSBoYW5kbGVyIHtGdW5jdGlvbn0gQSBmdW5jdGlvbiB0byBoYW5kbGUgd2Fybmlu
Z3MuCisgICAgQHNpbmNlIDIuMS4wCisgICovCisgIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LkRl
YnVnLnJlZ2lzdGVyV2FybkhhbmRsZXIgPSBfZW1iZXJEZWJ1Z1dhcm4ucmVnaXN0ZXJIYW5kbGVy
OworCisgIC8qCisgICAgV2UgYXJlIHRyYW5zaXRpb25pbmcgYXdheSBmcm9tIGBlbWJlci5qc2Ag
dG8gYGVtYmVyLmRlYnVnLmpzYCB0byBtYWtlCisgICAgaXQgbXVjaCBjbGVhcmVyIHRoYXQgaXQg
aXMgb25seSBmb3IgbG9jYWwgZGV2ZWxvcG1lbnQgcHVycG9zZXMuCisgIAorICAgIFRoaXMgZmxh
ZyB2YWx1ZSBpcyBjaGFuZ2VkIGJ5IHRoZSB0b29saW5nIChieSBhIHNpbXBsZSBzdHJpbmcgcmVw
bGFjZW1lbnQpCisgICAgc28gdGhhdCBpZiBgZW1iZXIuanNgICh3aGljaCBtdXN0IGJlIG91dHB1
dCBmb3IgYmFja3dhcmRzIGNvbXBhdCByZWFzb25zKSBpcworICAgIHVzZWQgYSBuaWNlIGhlbHBm
dWwgd2FybmluZyBtZXNzYWdlIHdpbGwgYmUgcHJpbnRlZCBvdXQuCisgICovCisgIHZhciBydW5u
aW5nTm9uRW1iZXJEZWJ1Z0pTID0gZmFsc2U7CisgIGV4cG9ydHMucnVubmluZ05vbkVtYmVyRGVi
dWdKUyA9IHJ1bm5pbmdOb25FbWJlckRlYnVnSlM7CisgIGlmIChydW5uaW5nTm9uRW1iZXJEZWJ1
Z0pTKSB7CisgICAgX2VtYmVyTWV0YWxEZWJ1Zy53YXJuKCdQbGVhc2UgdXNlIGBlbWJlci5kZWJ1
Zy5qc2AgaW5zdGVhZCBvZiBgZW1iZXIuanNgIGZvciBkZXZlbG9wbWVudCBhbmQgZGVidWdnaW5n
LicpOworICB9Cit9KTsKK2VuaWZlZCgnZW1iZXItZGVidWcvd2FybicsIFsnZXhwb3J0cycsICdl
bWJlci1tZXRhbC9sb2dnZXInLCAnZW1iZXItbWV0YWwvZGVidWcnLCAnZW1iZXItZGVidWcvaGFu
ZGxlcnMnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsTG9nZ2VyLCBfZW1iZXJNZXRh
bERlYnVnLCBfZW1iZXJEZWJ1Z0hhbmRsZXJzKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICB2YXIg
X3NsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlOworICBleHBvcnRzLnJlZ2lzdGVySGFuZGxl
ciA9IHJlZ2lzdGVySGFuZGxlcjsKKyAgZXhwb3J0cy5kZWZhdWx0ID0gd2FybjsKKworICBmdW5j
dGlvbiByZWdpc3RlckhhbmRsZXIoaGFuZGxlcikgeworICAgIF9lbWJlckRlYnVnSGFuZGxlcnMu
cmVnaXN0ZXJIYW5kbGVyKCd3YXJuJywgaGFuZGxlcik7CisgIH0KKworICByZWdpc3RlckhhbmRs
ZXIoZnVuY3Rpb24gbG9nV2FybmluZyhtZXNzYWdlLCBvcHRpb25zKSB7CisgICAgX2VtYmVyTWV0
YWxMb2dnZXIuZGVmYXVsdC53YXJuKCdXQVJOSU5HOiAnICsgbWVzc2FnZSk7CisgICAgaWYgKCd0
cmFjZScgaW4gX2VtYmVyTWV0YWxMb2dnZXIuZGVmYXVsdCkgeworICAgICAgX2VtYmVyTWV0YWxM
b2dnZXIuZGVmYXVsdC50cmFjZSgpOworICAgIH0KKyAgfSk7CisKKyAgdmFyIG1pc3NpbmdPcHRp
b25zRGVwcmVjYXRpb24gPSAnV2hlbiBjYWxsaW5nIGBFbWJlci53YXJuYCB5b3UgJyArICdtdXN0
IHByb3ZpZGUgYW4gYG9wdGlvbnNgIGhhc2ggYXMgdGhlIHRoaXJkIHBhcmFtZXRlci4gICcgKyAn
YG9wdGlvbnNgIHNob3VsZCBpbmNsdWRlIGFuIGBpZGAgcHJvcGVydHkuJzsKKyAgZXhwb3J0cy5t
aXNzaW5nT3B0aW9uc0RlcHJlY2F0aW9uID0gbWlzc2luZ09wdGlvbnNEZXByZWNhdGlvbjsKKyAg
dmFyIG1pc3NpbmdPcHRpb25zSWREZXByZWNhdGlvbiA9ICdXaGVuIGNhbGxpbmcgYEVtYmVyLndh
cm5gIHlvdSBtdXN0IHByb3ZpZGUgYGlkYCBpbiBvcHRpb25zLic7CisKKyAgZXhwb3J0cy5taXNz
aW5nT3B0aW9uc0lkRGVwcmVjYXRpb24gPSBtaXNzaW5nT3B0aW9uc0lkRGVwcmVjYXRpb247Cisg
IC8qKgorICBAbW9kdWxlIGVtYmVyCisgIEBzdWJtb2R1bGUgZW1iZXItZGVidWcKKyAgKi8KKwor
ICAvKioKKyAgICBEaXNwbGF5IGEgd2FybmluZyB3aXRoIHRoZSBwcm92aWRlZCBtZXNzYWdlLgor
ICAKKyAgICAqIEluIGEgcHJvZHVjdGlvbiBidWlsZCwgdGhpcyBtZXRob2QgaXMgZGVmaW5lZCBh
cyBhbiBlbXB0eSBmdW5jdGlvbiAoTk9QKS4KKyAgICBVc2VzIG9mIHRoaXMgbWV0aG9kIGluIEVt
YmVyIGl0c2VsZiBhcmUgc3RyaXBwZWQgZnJvbSB0aGUgZW1iZXIucHJvZC5qcyBidWlsZC4KKyAg
CisgICAgQG1ldGhvZCB3YXJuCisgICAgQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgQSB3YXJuaW5n
IHRvIGRpc3BsYXkuCisgICAgQHBhcmFtIHtCb29sZWFufSB0ZXN0IEFuIG9wdGlvbmFsIGJvb2xl
YW4uIElmIGZhbHN5LCB0aGUgd2FybmluZworICAgICAgd2lsbCBiZSBkaXNwbGF5ZWQuCisgICAg
QHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgQW4gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcGFz
cyBhIHVuaXF1ZQorICAgICAgYGlkYCBmb3IgdGhpcyB3YXJuaW5nLiAgVGhlIGBpZGAgY2FuIGJl
IHVzZWQgYnkgRW1iZXIgZGVidWdnaW5nIHRvb2xzCisgICAgICB0byBjaGFuZ2UgdGhlIGJlaGF2
aW9yIChyYWlzZSwgbG9nLCBvciBzaWxlbmNlKSBmb3IgdGhhdCBzcGVjaWZpYyB3YXJuaW5nLgor
ICAgICAgVGhlIGBpZGAgc2hvdWxkIGJlIG5hbWVzcGFjZWQgYnkgZG90cywgZS5nLiAiZW1iZXIt
ZGVidWcuZmVhdHVyZS1mbGFnLXdpdGgtZmVhdHVyZXMtc3RyaXBwZWQiCisgICAgQGZvciBFbWJl
cgorICAgIEBwdWJsaWMKKyAgKi8KKworICBmdW5jdGlvbiB3YXJuKG1lc3NhZ2UsIHRlc3QsIG9w
dGlvbnMpIHsKKyAgICBpZiAoIW9wdGlvbnMpIHsKKyAgICAgIF9lbWJlck1ldGFsRGVidWcuZGVw
cmVjYXRlKG1pc3NpbmdPcHRpb25zRGVwcmVjYXRpb24sIGZhbHNlLCB7CisgICAgICAgIGlkOiAn
ZW1iZXItZGVidWcud2Fybi1vcHRpb25zLW1pc3NpbmcnLAorICAgICAgICB1bnRpbDogJzMuMC4w
JywKKyAgICAgICAgdXJsOiAnaHR0cDovL2VtYmVyanMuY29tL2RlcHJlY2F0aW9ucy92Mi54LyN0
b2NfZW1iZXItZGVidWctZnVuY3Rpb24tb3B0aW9ucycKKyAgICAgIH0pOworICAgIH0KKworICAg
IGlmIChvcHRpb25zICYmICFvcHRpb25zLmlkKSB7CisgICAgICBfZW1iZXJNZXRhbERlYnVnLmRl
cHJlY2F0ZShtaXNzaW5nT3B0aW9uc0lkRGVwcmVjYXRpb24sIGZhbHNlLCB7CisgICAgICAgIGlk
OiAnZW1iZXItZGVidWcud2Fybi1pZC1taXNzaW5nJywKKyAgICAgICAgdW50aWw6ICczLjAuMCcs
CisgICAgICAgIHVybDogJ2h0dHA6Ly9lbWJlcmpzLmNvbS9kZXByZWNhdGlvbnMvdjIueC8jdG9j
X2VtYmVyLWRlYnVnLWZ1bmN0aW9uLW9wdGlvbnMnCisgICAgICB9KTsKKyAgICB9CisKKyAgICBf
ZW1iZXJEZWJ1Z0hhbmRsZXJzLmludm9rZS5hcHBseSh1bmRlZmluZWQsIFsnd2FybiddLmNvbmNh
dChfc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7CisgIH0KK30pOworZW5pZmVkKCdlbWJlci1leHRl
bnNpb24tc3VwcG9ydC9jb250YWluZXJfZGVidWdfYWRhcHRlcicsIFsnZXhwb3J0cycsICdlbWJl
ci1tZXRhbC9jb3JlJywgJ2VtYmVyLXJ1bnRpbWUvc3lzdGVtL25hdGl2ZV9hcnJheScsICdlbWJl
ci1ydW50aW1lL3V0aWxzJywgJ2VtYmVyLXJ1bnRpbWUvc3lzdGVtL3N0cmluZycsICdlbWJlci1y
dW50aW1lL3N5c3RlbS9uYW1lc3BhY2UnLCAnZW1iZXItcnVudGltZS9zeXN0ZW0vb2JqZWN0J10s
IGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbENvcmUsIF9lbWJlclJ1bnRpbWVTeXN0ZW1O
YXRpdmVfYXJyYXksIF9lbWJlclJ1bnRpbWVVdGlscywgX2VtYmVyUnVudGltZVN5c3RlbVN0cmlu
ZywgX2VtYmVyUnVudGltZVN5c3RlbU5hbWVzcGFjZSwgX2VtYmVyUnVudGltZVN5c3RlbU9iamVj
dCkgeworICAndXNlIHN0cmljdCc7CisKKyAgLyoqCisgIEBtb2R1bGUgZW1iZXIKKyAgQHN1Ym1v
ZHVsZSBlbWJlci1leHRlbnNpb24tc3VwcG9ydAorICAqLworCisgIC8qKgorICAgIFRoZSBgQ29u
dGFpbmVyRGVidWdBZGFwdGVyYCBoZWxwcyB0aGUgY29udGFpbmVyIGFuZCByZXNvbHZlciBpbnRl
cmZhY2UKKyAgICB3aXRoIHRvb2xzIHRoYXQgZGVidWcgRW1iZXIgc3VjaCBhcyB0aGUKKyAgICBb
RW1iZXIgRXh0ZW5zaW9uXShodHRwczovL2dpdGh1Yi5jb20vdGlsZGVpby9lbWJlci1leHRlbnNp
b24pCisgICAgZm9yIENocm9tZSBhbmQgRmlyZWZveC4KKyAgCisgICAgVGhpcyBjbGFzcyBjYW4g
YmUgZXh0ZW5kZWQgYnkgYSBjdXN0b20gcmVzb2x2ZXIgaW1wbGVtZW50ZXIKKyAgICB0byBvdmVy
cmlkZSBzb21lIG9mIHRoZSBtZXRob2RzIHdpdGggbGlicmFyeS1zcGVjaWZpYyBjb2RlLgorICAK
KyAgICBUaGUgbWV0aG9kcyBsaWtlbHkgdG8gYmUgb3ZlcnJpZGRlbiBhcmU6CisgIAorICAgICog
YGNhbkNhdGFsb2dFbnRyaWVzQnlUeXBlYAorICAgICogYGNhdGFsb2dFbnRyaWVzQnlUeXBlYAor
ICAKKyAgICBUaGUgYWRhcHRlciB3aWxsIG5lZWQgdG8gYmUgcmVnaXN0ZXJlZAorICAgIGluIHRo
ZSBhcHBsaWNhdGlvbidzIGNvbnRhaW5lciBhcyBgY29udGFpbmVyLWRlYnVnLWFkYXB0ZXI6bWFp
bmAuCisgIAorICAgIEV4YW1wbGU6CisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAgICBBcHBsaWNh
dGlvbi5pbml0aWFsaXplcih7CisgICAgICBuYW1lOiAiY29udGFpbmVyRGVidWdBZGFwdGVyIiwK
KyAgCisgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbihhcHBsaWNhdGlvbikgeworICAgICAgICBh
cHBsaWNhdGlvbi5yZWdpc3RlcignY29udGFpbmVyLWRlYnVnLWFkYXB0ZXI6bWFpbicsIHJlcXVp
cmUoJ2FwcC9jb250YWluZXItZGVidWctYWRhcHRlcicpKTsKKyAgICAgIH0KKyAgICB9KTsKKyAg
ICBgYGAKKyAgCisgICAgQGNsYXNzIENvbnRhaW5lckRlYnVnQWRhcHRlcgorICAgIEBuYW1lc3Bh
Y2UgRW1iZXIKKyAgICBAZXh0ZW5kcyBFbWJlci5PYmplY3QKKyAgICBAc2luY2UgMS41LjAKKyAg
ICBAcHVibGljCisgICovCisgIGV4cG9ydHMuZGVmYXVsdCA9IF9lbWJlclJ1bnRpbWVTeXN0ZW1P
YmplY3QuZGVmYXVsdC5leHRlbmQoeworICAgIC8qKgorICAgICAgVGhlIHJlc29sdmVyIGluc3Rh
bmNlIG9mIHRoZSBhcHBsaWNhdGlvbgorICAgICAgYmVpbmcgZGVidWdnZWQuIFRoaXMgcHJvcGVy
dHkgd2lsbCBiZSBpbmplY3RlZAorICAgICAgb24gY3JlYXRpb24uCisgICAgICAgQHByb3BlcnR5
IHJlc29sdmVyCisgICAgICBAZGVmYXVsdCBudWxsCisgICAgICBAcHVibGljCisgICAgKi8KKyAg
ICByZXNvbHZlcjogbnVsbCwKKworICAgIC8qKgorICAgICAgUmV0dXJucyB0cnVlIGlmIGl0IGlz
IHBvc3NpYmxlIHRvIGNhdGFsb2cgYSBsaXN0IG9mIGF2YWlsYWJsZQorICAgICAgY2xhc3NlcyBp
biB0aGUgcmVzb2x2ZXIgZm9yIGEgZ2l2ZW4gdHlwZS4KKyAgICAgICBAbWV0aG9kIGNhbkNhdGFs
b2dFbnRyaWVzQnlUeXBlCisgICAgICBAcGFyYW0ge1N0cmluZ30gdHlwZSBUaGUgdHlwZS4gZS5n
LiAibW9kZWwiLCAiY29udHJvbGxlciIsICJyb3V0ZSIuCisgICAgICBAcmV0dXJuIHtib29sZWFu
fSB3aGV0aGVyIGEgbGlzdCBpcyBhdmFpbGFibGUgZm9yIHRoaXMgdHlwZS4KKyAgICAgIEBwdWJs
aWMKKyAgICAqLworICAgIGNhbkNhdGFsb2dFbnRyaWVzQnlUeXBlOiBmdW5jdGlvbiAodHlwZSkg
eworICAgICAgaWYgKHR5cGUgPT09ICdtb2RlbCcgfHwgdHlwZSA9PT0gJ3RlbXBsYXRlJykgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisKKyAgICAgIHJldHVybiB0cnVlOworICAg
IH0sCisKKyAgICAvKioKKyAgICAgIFJldHVybnMgdGhlIGF2YWlsYWJsZSBjbGFzc2VzIGEgZ2l2
ZW4gdHlwZS4KKyAgICAgICBAbWV0aG9kIGNhdGFsb2dFbnRyaWVzQnlUeXBlCisgICAgICBAcGFy
YW0ge1N0cmluZ30gdHlwZSBUaGUgdHlwZS4gZS5nLiAibW9kZWwiLCAiY29udHJvbGxlciIsICJy
b3V0ZSIuCisgICAgICBAcmV0dXJuIHtBcnJheX0gQW4gYXJyYXkgb2Ygc3RyaW5ncy4KKyAgICAg
IEBwdWJsaWMKKyAgICAqLworICAgIGNhdGFsb2dFbnRyaWVzQnlUeXBlOiBmdW5jdGlvbiAodHlw
ZSkgeworICAgICAgdmFyIG5hbWVzcGFjZXMgPSBfZW1iZXJSdW50aW1lU3lzdGVtTmF0aXZlX2Fy
cmF5LkEoX2VtYmVyUnVudGltZVN5c3RlbU5hbWVzcGFjZS5kZWZhdWx0Lk5BTUVTUEFDRVMpOwor
ICAgICAgdmFyIHR5cGVzID0gX2VtYmVyUnVudGltZVN5c3RlbU5hdGl2ZV9hcnJheS5BKCk7Cisg
ICAgICB2YXIgdHlwZVN1ZmZpeFJlZ2V4ID0gbmV3IFJlZ0V4cChfZW1iZXJSdW50aW1lU3lzdGVt
U3RyaW5nLmNsYXNzaWZ5KHR5cGUpICsgJyQnKTsKKworICAgICAgbmFtZXNwYWNlcy5mb3JFYWNo
KGZ1bmN0aW9uIChuYW1lc3BhY2UpIHsKKyAgICAgICAgaWYgKG5hbWVzcGFjZSAhPT0gX2VtYmVy
TWV0YWxDb3JlLmRlZmF1bHQpIHsKKyAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gbmFtZXNwYWNl
KSB7CisgICAgICAgICAgICBpZiAoIW5hbWVzcGFjZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7Cisg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHR5
cGVTdWZmaXhSZWdleC50ZXN0KGtleSkpIHsKKyAgICAgICAgICAgICAgdmFyIGtsYXNzID0gbmFt
ZXNwYWNlW2tleV07CisgICAgICAgICAgICAgIGlmIChfZW1iZXJSdW50aW1lVXRpbHMudHlwZU9m
KGtsYXNzKSA9PT0gJ2NsYXNzJykgeworICAgICAgICAgICAgICAgIHR5cGVzLnB1c2goX2VtYmVy
UnVudGltZVN5c3RlbVN0cmluZy5kYXNoZXJpemUoa2V5LnJlcGxhY2UodHlwZVN1ZmZpeFJlZ2V4
LCAnJykpKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgfSk7CisgICAgICByZXR1cm4gdHlwZXM7CisgICAgfQorICB9KTsKK30p
OworZW5pZmVkKCdlbWJlci1leHRlbnNpb24tc3VwcG9ydC9kYXRhX2FkYXB0ZXInLCBbJ2V4cG9y
dHMnLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0JywgJ2VtYmVyLW1ldGFsL3J1bl9sb29wJywg
J2VtYmVyLXJ1bnRpbWUvc3lzdGVtL3N0cmluZycsICdlbWJlci1ydW50aW1lL3N5c3RlbS9uYW1l
c3BhY2UnLCAnZW1iZXItcnVudGltZS9zeXN0ZW0vb2JqZWN0JywgJ2VtYmVyLXJ1bnRpbWUvc3lz
dGVtL25hdGl2ZV9hcnJheScsICdlbWJlci1hcHBsaWNhdGlvbi9zeXN0ZW0vYXBwbGljYXRpb24n
LCAnY29udGFpbmVyL293bmVyJywgJ2VtYmVyLXJ1bnRpbWUvbWl4aW5zL2FycmF5J10sIGZ1bmN0
aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbFByb3BlcnR5X2dldCwgX2VtYmVyTWV0YWxSdW5fbG9v
cCwgX2VtYmVyUnVudGltZVN5c3RlbVN0cmluZywgX2VtYmVyUnVudGltZVN5c3RlbU5hbWVzcGFj
ZSwgX2VtYmVyUnVudGltZVN5c3RlbU9iamVjdCwgX2VtYmVyUnVudGltZVN5c3RlbU5hdGl2ZV9h
cnJheSwgX2VtYmVyQXBwbGljYXRpb25TeXN0ZW1BcHBsaWNhdGlvbiwgX2NvbnRhaW5lck93bmVy
LCBfZW1iZXJSdW50aW1lTWl4aW5zQXJyYXkpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIC8qKgor
ICBAbW9kdWxlIGVtYmVyCisgIEBzdWJtb2R1bGUgZW1iZXItZXh0ZW5zaW9uLXN1cHBvcnQKKyAg
Ki8KKworICAvKioKKyAgICBUaGUgYERhdGFBZGFwdGVyYCBoZWxwcyBhIGRhdGEgcGVyc2lzdGVu
Y2UgbGlicmFyeQorICAgIGludGVyZmFjZSB3aXRoIHRvb2xzIHRoYXQgZGVidWcgRW1iZXIgc3Vj
aAorICAgIGFzIHRoZSBbRW1iZXIgRXh0ZW5zaW9uXShodHRwczovL2dpdGh1Yi5jb20vdGlsZGVp
by9lbWJlci1leHRlbnNpb24pCisgICAgZm9yIENocm9tZSBhbmQgRmlyZWZveC4KKyAgCisgICAg
VGhpcyBjbGFzcyB3aWxsIGJlIGV4dGVuZGVkIGJ5IGEgcGVyc2lzdGVuY2UgbGlicmFyeQorICAg
IHdoaWNoIHdpbGwgb3ZlcnJpZGUgc29tZSBvZiB0aGUgbWV0aG9kcyB3aXRoCisgICAgbGlicmFy
eS1zcGVjaWZpYyBjb2RlLgorICAKKyAgICBUaGUgbWV0aG9kcyBsaWtlbHkgdG8gYmUgb3ZlcnJp
ZGRlbiBhcmU6CisgIAorICAgICogYGdldEZpbHRlcnNgCisgICAgKiBgZGV0ZWN0YAorICAgICog
YGNvbHVtbnNGb3JUeXBlYAorICAgICogYGdldFJlY29yZHNgCisgICAgKiBgZ2V0UmVjb3JkQ29s
dW1uVmFsdWVzYAorICAgICogYGdldFJlY29yZEtleXdvcmRzYAorICAgICogYGdldFJlY29yZEZp
bHRlclZhbHVlc2AKKyAgICAqIGBnZXRSZWNvcmRDb2xvcmAKKyAgICAqIGBvYnNlcnZlUmVjb3Jk
YAorICAKKyAgICBUaGUgYWRhcHRlciB3aWxsIG5lZWQgdG8gYmUgcmVnaXN0ZXJlZAorICAgIGlu
IHRoZSBhcHBsaWNhdGlvbidzIGNvbnRhaW5lciBhcyBgZGF0YUFkYXB0ZXI6bWFpbmAuCisgIAor
ICAgIEV4YW1wbGU6CisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAgICBBcHBsaWNhdGlvbi5pbml0
aWFsaXplcih7CisgICAgICBuYW1lOiAiZGF0YS1hZGFwdGVyIiwKKyAgCisgICAgICBpbml0aWFs
aXplOiBmdW5jdGlvbihhcHBsaWNhdGlvbikgeworICAgICAgICBhcHBsaWNhdGlvbi5yZWdpc3Rl
cignZGF0YS1hZGFwdGVyOm1haW4nLCBEUy5EYXRhQWRhcHRlcik7CisgICAgICB9CisgICAgfSk7
CisgICAgYGBgCisgIAorICAgIEBjbGFzcyBEYXRhQWRhcHRlcgorICAgIEBuYW1lc3BhY2UgRW1i
ZXIKKyAgICBAZXh0ZW5kcyBFbWJlck9iamVjdAorICAgIEBwdWJsaWMKKyAgKi8KKyAgZXhwb3J0
cy5kZWZhdWx0ID0gX2VtYmVyUnVudGltZVN5c3RlbU9iamVjdC5kZWZhdWx0LmV4dGVuZCh7Cisg
ICAgaW5pdDogZnVuY3Rpb24gKCkgeworICAgICAgdGhpcy5fc3VwZXIuYXBwbHkodGhpcywgYXJn
dW1lbnRzKTsKKyAgICAgIHRoaXMucmVsZWFzZU1ldGhvZHMgPSBfZW1iZXJSdW50aW1lU3lzdGVt
TmF0aXZlX2FycmF5LkEoKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICBUaGUgY29udGFpbmVy
LWRlYnVnLWFkYXB0ZXIgd2hpY2ggaXMgdXNlZAorICAgICAgdG8gbGlzdCBhbGwgbW9kZWxzLgor
ICAgICAgIEBwcm9wZXJ0eSBjb250YWluZXJEZWJ1Z0FkYXB0ZXIKKyAgICAgIEBkZWZhdWx0IHVu
ZGVmaW5lZAorICAgICAgQHNpbmNlIDEuNS4wCisgICAgICBAcHVibGljCisgICAgKiovCisgICAg
Y29udGFpbmVyRGVidWdBZGFwdGVyOiB1bmRlZmluZWQsCisKKyAgICAvKioKKyAgICAgIFRoZSBu
dW1iZXIgb2YgYXR0cmlidXRlcyB0byBzZW5kCisgICAgICBhcyBjb2x1bW5zLiAoRW5vdWdoIHRv
IG1ha2UgdGhlIHJlY29yZAorICAgICAgaWRlbnRpZmlhYmxlKS4KKyAgICAgICBAcHJpdmF0ZQor
ICAgICAgQHByb3BlcnR5IGF0dHJpYnV0ZUxpbWl0CisgICAgICBAZGVmYXVsdCAzCisgICAgICBA
c2luY2UgMS4zLjAKKyAgICAqLworICAgIGF0dHJpYnV0ZUxpbWl0OiAzLAorCisgICAgLyoqCisg
ICAgICAgRW1iZXIgRGF0YSA+IHYxLjAuMC1iZXRhLjE4CisgICAgICAgcmVxdWlyZXMgc3RyaW5n
IG1vZGVsIG5hbWVzIHRvIGJlIHBhc3NlZAorICAgICAgIGFyb3VuZCBpbnN0ZWFkIG9mIHRoZSBh
Y3R1YWwgZmFjdG9yaWVzLgorICAgICAgICBUaGlzIGlzIGEgc3RhbXAgZm9yIHRoZSBFbWJlciBJ
bnNwZWN0b3IKKyAgICAgICB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gdGhlIHZlcnNpb25zCisg
ICAgICAgdG8gYmUgYWJsZSB0byBzdXBwb3J0IG9sZGVyIHZlcnNpb25zIHRvby4KKyAgICAgICAg
QHB1YmxpYworICAgICAgIEBwcm9wZXJ0eSBhY2NlcHRzTW9kZWxOYW1lCisgICAgICovCisgICAg
YWNjZXB0c01vZGVsTmFtZTogdHJ1ZSwKKworICAgIC8qKgorICAgICAgU3RvcmVzIGFsbCBtZXRo
b2RzIHRoYXQgY2xlYXIgb2JzZXJ2ZXJzLgorICAgICAgVGhlc2UgbWV0aG9kcyB3aWxsIGJlIGNh
bGxlZCBvbiBkZXN0cnVjdGlvbi4KKyAgICAgICBAcHJpdmF0ZQorICAgICAgQHByb3BlcnR5IHJl
bGVhc2VNZXRob2RzCisgICAgICBAc2luY2UgMS4zLjAKKyAgICAqLworICAgIHJlbGVhc2VNZXRo
b2RzOiBfZW1iZXJSdW50aW1lU3lzdGVtTmF0aXZlX2FycmF5LkEoKSwKKworICAgIC8qKgorICAg
ICAgU3BlY2lmaWVzIGhvdyByZWNvcmRzIGNhbiBiZSBmaWx0ZXJlZC4KKyAgICAgIFJlY29yZHMg
cmV0dXJuZWQgd2lsbCBuZWVkIHRvIGhhdmUgYSBgZmlsdGVyVmFsdWVzYAorICAgICAgcHJvcGVy
dHkgd2l0aCBhIGtleSBmb3IgZXZlcnkgbmFtZSBpbiB0aGUgcmV0dXJuZWQgYXJyYXkuCisgICAg
ICAgQHB1YmxpYworICAgICAgQG1ldGhvZCBnZXRGaWx0ZXJzCisgICAgICBAcmV0dXJuIHtBcnJh
eX0gTGlzdCBvZiBvYmplY3RzIGRlZmluaW5nIGZpbHRlcnMuCisgICAgICAgVGhlIG9iamVjdCBz
aG91bGQgaGF2ZSBhIGBuYW1lYCBhbmQgYGRlc2NgIHByb3BlcnR5LgorICAgICovCisgICAgZ2V0
RmlsdGVyczogZnVuY3Rpb24gKCkgeworICAgICAgcmV0dXJuIF9lbWJlclJ1bnRpbWVTeXN0ZW1O
YXRpdmVfYXJyYXkuQSgpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgIEZldGNoIHRoZSBtb2Rl
bCB0eXBlcyBhbmQgb2JzZXJ2ZSB0aGVtIGZvciBjaGFuZ2VzLgorICAgICAgIEBwdWJsaWMKKyAg
ICAgIEBtZXRob2Qgd2F0Y2hNb2RlbFR5cGVzCisgICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gdHlw
ZXNBZGRlZCBDYWxsYmFjayB0byBjYWxsIHRvIGFkZCB0eXBlcy4KKyAgICAgIFRha2VzIGFuIGFy
cmF5IG9mIG9iamVjdHMgY29udGFpbmluZyB3cmFwcGVkIHR5cGVzIChyZXR1cm5lZCBmcm9tIGB3
cmFwTW9kZWxUeXBlYCkuCisgICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gdHlwZXNVcGRhdGVkIENh
bGxiYWNrIHRvIGNhbGwgd2hlbiBhIHR5cGUgaGFzIGNoYW5nZWQuCisgICAgICBUYWtlcyBhbiBh
cnJheSBvZiBvYmplY3RzIGNvbnRhaW5pbmcgd3JhcHBlZCB0eXBlcy4KKyAgICAgICBAcmV0dXJu
IHtGdW5jdGlvbn0gTWV0aG9kIHRvIGNhbGwgdG8gcmVtb3ZlIGFsbCBvYnNlcnZlcnMKKyAgICAq
LworICAgIHdhdGNoTW9kZWxUeXBlczogZnVuY3Rpb24gKHR5cGVzQWRkZWQsIHR5cGVzVXBkYXRl
ZCkgeworICAgICAgdmFyIF90aGlzID0gdGhpczsKKworICAgICAgdmFyIG1vZGVsVHlwZXMgPSB0
aGlzLmdldE1vZGVsVHlwZXMoKTsKKyAgICAgIHZhciByZWxlYXNlTWV0aG9kcyA9IF9lbWJlclJ1
bnRpbWVTeXN0ZW1OYXRpdmVfYXJyYXkuQSgpOworICAgICAgdmFyIHR5cGVzVG9TZW5kOworCisg
ICAgICB0eXBlc1RvU2VuZCA9IG1vZGVsVHlwZXMubWFwKGZ1bmN0aW9uICh0eXBlKSB7CisgICAg
ICAgIHZhciBrbGFzcyA9IHR5cGUua2xhc3M7CisgICAgICAgIHZhciB3cmFwcGVkID0gX3RoaXMu
d3JhcE1vZGVsVHlwZShrbGFzcywgdHlwZS5uYW1lKTsKKyAgICAgICAgcmVsZWFzZU1ldGhvZHMu
cHVzaChfdGhpcy5vYnNlcnZlTW9kZWxUeXBlKHR5cGUubmFtZSwgdHlwZXNVcGRhdGVkKSk7Cisg
ICAgICAgIHJldHVybiB3cmFwcGVkOworICAgICAgfSk7CisKKyAgICAgIHR5cGVzQWRkZWQodHlw
ZXNUb1NlbmQpOworCisgICAgICB2YXIgcmVsZWFzZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
cmVsZWFzZU1ldGhvZHMuZm9yRWFjaChmdW5jdGlvbiAoZm4pIHsKKyAgICAgICAgICByZXR1cm4g
Zm4oKTsKKyAgICAgICAgfSk7CisgICAgICAgIF90aGlzLnJlbGVhc2VNZXRob2RzLnJlbW92ZU9i
amVjdChyZWxlYXNlKTsKKyAgICAgIH07CisgICAgICB0aGlzLnJlbGVhc2VNZXRob2RzLnB1c2hP
YmplY3QocmVsZWFzZSk7CisgICAgICByZXR1cm4gcmVsZWFzZTsKKyAgICB9LAorCisgICAgX25h
bWVUb0NsYXNzOiBmdW5jdGlvbiAodHlwZSkgeworICAgICAgaWYgKHR5cGVvZiB0eXBlID09PSAn
c3RyaW5nJykgeworICAgICAgICB0eXBlID0gX2NvbnRhaW5lck93bmVyLmdldE93bmVyKHRoaXMp
Ll9sb29rdXBGYWN0b3J5KCdtb2RlbDonICsgdHlwZSk7CisgICAgICB9CisgICAgICByZXR1cm4g
dHlwZTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICBGZXRjaCB0aGUgcmVjb3JkcyBvZiBhIGdp
dmVuIHR5cGUgYW5kIG9ic2VydmUgdGhlbSBmb3IgY2hhbmdlcy4KKyAgICAgICBAcHVibGljCisg
ICAgICBAbWV0aG9kIHdhdGNoUmVjb3JkcworICAgICAgIEBwYXJhbSB7U3RyaW5nfSBtb2RlbE5h
bWUgVGhlIG1vZGVsIG5hbWUuCisgICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gcmVjb3Jkc0FkZGVk
IENhbGxiYWNrIHRvIGNhbGwgdG8gYWRkIHJlY29yZHMuCisgICAgICBUYWtlcyBhbiBhcnJheSBv
ZiBvYmplY3RzIGNvbnRhaW5pbmcgd3JhcHBlZCByZWNvcmRzLgorICAgICAgVGhlIG9iamVjdCBz
aG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6CisgICAgICAgIGNvbHVtblZhbHVl
czoge09iamVjdH0gVGhlIGtleSBhbmQgdmFsdWUgb2YgYSB0YWJsZSBjZWxsLgorICAgICAgICBv
YmplY3Q6IHtPYmplY3R9IFRoZSBhY3R1YWwgcmVjb3JkIG9iamVjdC4KKyAgICAgICBAcGFyYW0g
e0Z1bmN0aW9ufSByZWNvcmRzVXBkYXRlZCBDYWxsYmFjayB0byBjYWxsIHdoZW4gYSByZWNvcmQg
aGFzIGNoYW5nZWQuCisgICAgICBUYWtlcyBhbiBhcnJheSBvZiBvYmplY3RzIGNvbnRhaW5pbmcg
d3JhcHBlZCByZWNvcmRzLgorICAgICAgIEBwYXJhbSB7RnVuY3Rpb259IHJlY29yZHNSZW1vdmVk
IENhbGxiYWNrIHRvIGNhbGwgd2hlbiBhIHJlY29yZCBoYXMgcmVtb3ZlZC4KKyAgICAgIFRha2Vz
IHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoKKyAgICAgICAgaW5kZXg6IFRoZSBhcnJheSBpbmRl
eCB3aGVyZSB0aGUgcmVjb3JkcyB3ZXJlIHJlbW92ZWQuCisgICAgICAgIGNvdW50OiBUaGUgbnVt
YmVyIG9mIHJlY29yZHMgcmVtb3ZlZC4KKyAgICAgICBAcmV0dXJuIHtGdW5jdGlvbn0gTWV0aG9k
IHRvIGNhbGwgdG8gcmVtb3ZlIGFsbCBvYnNlcnZlcnMuCisgICAgKi8KKyAgICB3YXRjaFJlY29y
ZHM6IGZ1bmN0aW9uIChtb2RlbE5hbWUsIHJlY29yZHNBZGRlZCwgcmVjb3Jkc1VwZGF0ZWQsIHJl
Y29yZHNSZW1vdmVkKSB7CisgICAgICB2YXIgX3RoaXMyID0gdGhpczsKKworICAgICAgdmFyIHJl
bGVhc2VNZXRob2RzID0gX2VtYmVyUnVudGltZVN5c3RlbU5hdGl2ZV9hcnJheS5BKCk7CisgICAg
ICB2YXIga2xhc3MgPSB0aGlzLl9uYW1lVG9DbGFzcyhtb2RlbE5hbWUpOworICAgICAgdmFyIHJl
Y29yZHMgPSB0aGlzLmdldFJlY29yZHMoa2xhc3MsIG1vZGVsTmFtZSk7CisgICAgICB2YXIgcmVs
ZWFzZTsKKworICAgICAgdmFyIHJlY29yZFVwZGF0ZWQgPSBmdW5jdGlvbiAodXBkYXRlZFJlY29y
ZCkgeworICAgICAgICByZWNvcmRzVXBkYXRlZChbdXBkYXRlZFJlY29yZF0pOworICAgICAgfTsK
KworICAgICAgdmFyIHJlY29yZHNUb1NlbmQgPSByZWNvcmRzLm1hcChmdW5jdGlvbiAocmVjb3Jk
KSB7CisgICAgICAgIHJlbGVhc2VNZXRob2RzLnB1c2goX3RoaXMyLm9ic2VydmVSZWNvcmQocmVj
b3JkLCByZWNvcmRVcGRhdGVkKSk7CisgICAgICAgIHJldHVybiBfdGhpczIud3JhcFJlY29yZChy
ZWNvcmQpOworICAgICAgfSk7CisKKyAgICAgIHZhciBjb250ZW50RGlkQ2hhbmdlID0gZnVuY3Rp
b24gKGFycmF5LCBpZHgsIHJlbW92ZWRDb3VudCwgYWRkZWRDb3VudCkgeworICAgICAgICBmb3Ig
KHZhciBpID0gaWR4OyBpIDwgaWR4ICsgYWRkZWRDb3VudDsgaSsrKSB7CisgICAgICAgICAgdmFy
IHJlY29yZCA9IF9lbWJlclJ1bnRpbWVNaXhpbnNBcnJheS5vYmplY3RBdChhcnJheSwgaSk7Cisg
ICAgICAgICAgdmFyIHdyYXBwZWQgPSBfdGhpczIud3JhcFJlY29yZChyZWNvcmQpOworICAgICAg
ICAgIHJlbGVhc2VNZXRob2RzLnB1c2goX3RoaXMyLm9ic2VydmVSZWNvcmQocmVjb3JkLCByZWNv
cmRVcGRhdGVkKSk7CisgICAgICAgICAgcmVjb3Jkc0FkZGVkKFt3cmFwcGVkXSk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAocmVtb3ZlZENvdW50KSB7CisgICAgICAgICAgcmVjb3Jkc1JlbW92
ZWQoaWR4LCByZW1vdmVkQ291bnQpOworICAgICAgICB9CisgICAgICB9OworCisgICAgICB2YXIg
b2JzZXJ2ZXIgPSB7IGRpZENoYW5nZTogY29udGVudERpZENoYW5nZSwgd2lsbENoYW5nZTogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9IH07CisgICAgICBf
ZW1iZXJSdW50aW1lTWl4aW5zQXJyYXkuYWRkQXJyYXlPYnNlcnZlcihyZWNvcmRzLCB0aGlzLCBv
YnNlcnZlcik7CisKKyAgICAgIHJlbGVhc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJlbGVh
c2VNZXRob2RzLmZvckVhY2goZnVuY3Rpb24gKGZuKSB7CisgICAgICAgICAgZm4oKTsKKyAgICAg
ICAgfSk7CisgICAgICAgIF9lbWJlclJ1bnRpbWVNaXhpbnNBcnJheS5yZW1vdmVBcnJheU9ic2Vy
dmVyKHJlY29yZHMsIF90aGlzMiwgb2JzZXJ2ZXIpOworICAgICAgICBfdGhpczIucmVsZWFzZU1l
dGhvZHMucmVtb3ZlT2JqZWN0KHJlbGVhc2UpOworICAgICAgfTsKKworICAgICAgcmVjb3Jkc0Fk
ZGVkKHJlY29yZHNUb1NlbmQpOworCisgICAgICB0aGlzLnJlbGVhc2VNZXRob2RzLnB1c2hPYmpl
Y3QocmVsZWFzZSk7CisgICAgICByZXR1cm4gcmVsZWFzZTsKKyAgICB9LAorCisgICAgLyoqCisg
ICAgICBDbGVhciBhbGwgb2JzZXJ2ZXJzIGJlZm9yZSBkZXN0cnVjdGlvbgorICAgICAgQHByaXZh
dGUKKyAgICAgIEBtZXRob2Qgd2lsbERlc3Ryb3kKKyAgICAqLworICAgIHdpbGxEZXN0cm95OiBm
dW5jdGlvbiAoKSB7CisgICAgICB0aGlzLl9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwor
ICAgICAgdGhpcy5yZWxlYXNlTWV0aG9kcy5mb3JFYWNoKGZ1bmN0aW9uIChmbikgeworICAgICAg
ICBmbigpOworICAgICAgfSk7CisgICAgfSwKKworICAgIC8qKgorICAgICAgRGV0ZWN0IHdoZXRo
ZXIgYSBjbGFzcyBpcyBhIG1vZGVsLgorICAgICAgIFRlc3QgdGhhdCBhZ2FpbnN0IHRoZSBtb2Rl
bCBjbGFzcworICAgICAgb2YgeW91ciBwZXJzaXN0ZW5jZSBsaWJyYXJ5LgorICAgICAgIEBwcml2
YXRlCisgICAgICBAbWV0aG9kIGRldGVjdAorICAgICAgQHBhcmFtIHtDbGFzc30ga2xhc3MgVGhl
IGNsYXNzIHRvIHRlc3QuCisgICAgICBAcmV0dXJuIGJvb2xlYW4gV2hldGhlciB0aGUgY2xhc3Mg
aXMgYSBtb2RlbCBjbGFzcyBvciBub3QuCisgICAgKi8KKyAgICBkZXRlY3Q6IGZ1bmN0aW9uIChr
bGFzcykgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0sCisKKyAgICAvKioKKyAgICAgIEdl
dCB0aGUgY29sdW1ucyBmb3IgYSBnaXZlbiBtb2RlbCB0eXBlLgorICAgICAgIEBwcml2YXRlCisg
ICAgICBAbWV0aG9kIGNvbHVtbnNGb3JUeXBlCisgICAgICBAcGFyYW0ge0NsYXNzfSB0eXBlIFRo
ZSBtb2RlbCB0eXBlLgorICAgICAgQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIGNvbHVtbnMg
b2YgdGhlIGZvbGxvd2luZyBmb3JtYXQ6CisgICAgICAgbmFtZToge1N0cmluZ30gVGhlIG5hbWUg
b2YgdGhlIGNvbHVtbi4KKyAgICAgICBkZXNjOiB7U3RyaW5nfSBIdW1hbml6ZWQgZGVzY3JpcHRp
b24gKHdoYXQgd291bGQgc2hvdyBpbiBhIHRhYmxlIGNvbHVtbiBuYW1lKS4KKyAgICAqLworICAg
IGNvbHVtbnNGb3JUeXBlOiBmdW5jdGlvbiAodHlwZSkgeworICAgICAgcmV0dXJuIF9lbWJlclJ1
bnRpbWVTeXN0ZW1OYXRpdmVfYXJyYXkuQSgpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgIEFk
ZHMgb2JzZXJ2ZXJzIHRvIGEgbW9kZWwgdHlwZSBjbGFzcy4KKyAgICAgICBAcHJpdmF0ZQorICAg
ICAgQG1ldGhvZCBvYnNlcnZlTW9kZWxUeXBlCisgICAgICBAcGFyYW0ge1N0cmluZ30gbW9kZWxO
YW1lIFRoZSBtb2RlbCB0eXBlIG5hbWUuCisgICAgICBAcGFyYW0ge0Z1bmN0aW9ufSB0eXBlc1Vw
ZGF0ZWQgQ2FsbGVkIHdoZW4gYSB0eXBlIGlzIG1vZGlmaWVkLgorICAgICAgQHJldHVybiB7RnVu
Y3Rpb259IFRoZSBmdW5jdGlvbiB0byBjYWxsIHRvIHJlbW92ZSBvYnNlcnZlcnMuCisgICAgKi8K
KworICAgIG9ic2VydmVNb2RlbFR5cGU6IGZ1bmN0aW9uIChtb2RlbE5hbWUsIHR5cGVzVXBkYXRl
ZCkgeworICAgICAgdmFyIF90aGlzMyA9IHRoaXM7CisKKyAgICAgIHZhciBrbGFzcyA9IHRoaXMu
X25hbWVUb0NsYXNzKG1vZGVsTmFtZSk7CisgICAgICB2YXIgcmVjb3JkcyA9IHRoaXMuZ2V0UmVj
b3JkcyhrbGFzcywgbW9kZWxOYW1lKTsKKworICAgICAgdmFyIG9uQ2hhbmdlID0gZnVuY3Rpb24g
KCkgeworICAgICAgICB0eXBlc1VwZGF0ZWQoW190aGlzMy53cmFwTW9kZWxUeXBlKGtsYXNzLCBt
b2RlbE5hbWUpXSk7CisgICAgICB9OworICAgICAgdmFyIG9ic2VydmVyID0geworICAgICAgICBk
aWRDaGFuZ2U6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICBfZW1iZXJNZXRhbFJ1bl9sb29wLmRl
ZmF1bHQuc2NoZWR1bGVPbmNlKCdhY3Rpb25zJywgdGhpcywgb25DaGFuZ2UpOworICAgICAgICB9
LAorICAgICAgICB3aWxsQ2hhbmdlOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgICAgIH0KKyAgICAgIH07CisKKyAgICAgIF9lbWJlclJ1bnRpbWVNaXhpbnNBcnJh
eS5hZGRBcnJheU9ic2VydmVyKHJlY29yZHMsIHRoaXMsIG9ic2VydmVyKTsKKworICAgICAgdmFy
IHJlbGVhc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIF9lbWJlclJ1bnRpbWVNaXhpbnNBcnJh
eS5yZW1vdmVBcnJheU9ic2VydmVyKHJlY29yZHMsIF90aGlzMywgb2JzZXJ2ZXIpOworICAgICAg
fTsKKworICAgICAgcmV0dXJuIHJlbGVhc2U7CisgICAgfSwKKworICAgIC8qKgorICAgICAgV3Jh
cHMgYSBnaXZlbiBtb2RlbCB0eXBlIGFuZCBvYnNlcnZlcyBjaGFuZ2VzIHRvIGl0LgorICAgICAg
IEBwcml2YXRlCisgICAgICBAbWV0aG9kIHdyYXBNb2RlbFR5cGUKKyAgICAgIEBwYXJhbSB7Q2xh
c3N9IGtsYXNzIEEgbW9kZWwgY2xhc3MuCisgICAgICBAcGFyYW0ge1N0cmluZ30gbW9kZWxOYW1l
IE5hbWUgb2YgdGhlIGNsYXNzLgorICAgICAgQHJldHVybiB7T2JqZWN0fSBDb250YWlucyB0aGUg
d3JhcHBlZCB0eXBlIGFuZCB0aGUgZnVuY3Rpb24gdG8gcmVtb3ZlIG9ic2VydmVycworICAgICAg
Rm9ybWF0OgorICAgICAgICB0eXBlOiB7T2JqZWN0fSBUaGUgd3JhcHBlZCB0eXBlLgorICAgICAg
ICAgIFRoZSB3cmFwcGVkIHR5cGUgaGFzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorICAgICAgICAg
ICAgbmFtZToge1N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHR5cGUuCisgICAgICAgICAgICBjb3Vu
dDoge0ludGVnZXJ9IFRoZSBudW1iZXIgb2YgcmVjb3JkcyBhdmFpbGFibGUuCisgICAgICAgICAg
ICBjb2x1bW5zOiB7Q29sdW1uc30gQW4gYXJyYXkgb2YgY29sdW1ucyB0byBkZXNjcmliZSB0aGUg
cmVjb3JkLgorICAgICAgICAgICAgb2JqZWN0OiB7Q2xhc3N9IFRoZSBhY3R1YWwgTW9kZWwgdHlw
ZSBjbGFzcy4KKyAgICAgICAgcmVsZWFzZToge0Z1bmN0aW9ufSBUaGUgZnVuY3Rpb24gdG8gcmVt
b3ZlIG9ic2VydmVycy4KKyAgICAqLworICAgIHdyYXBNb2RlbFR5cGU6IGZ1bmN0aW9uIChrbGFz
cywgbmFtZSkgeworICAgICAgdmFyIHJlY29yZHMgPSB0aGlzLmdldFJlY29yZHMoa2xhc3MsIG5h
bWUpOworICAgICAgdmFyIHR5cGVUb1NlbmQ7CisKKyAgICAgIHR5cGVUb1NlbmQgPSB7CisgICAg
ICAgIG5hbWU6IG5hbWUsCisgICAgICAgIGNvdW50OiBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5n
ZXQocmVjb3JkcywgJ2xlbmd0aCcpLAorICAgICAgICBjb2x1bW5zOiB0aGlzLmNvbHVtbnNGb3JU
eXBlKGtsYXNzKSwKKyAgICAgICAgb2JqZWN0OiBrbGFzcworICAgICAgfTsKKworICAgICAgcmV0
dXJuIHR5cGVUb1NlbmQ7CisgICAgfSwKKworICAgIC8qKgorICAgICAgRmV0Y2hlcyBhbGwgbW9k
ZWxzIGRlZmluZWQgaW4gdGhlIGFwcGxpY2F0aW9uLgorICAgICAgIEBwcml2YXRlCisgICAgICBA
bWV0aG9kIGdldE1vZGVsVHlwZXMKKyAgICAgIEByZXR1cm4ge0FycmF5fSBBcnJheSBvZiBtb2Rl
bCB0eXBlcy4KKyAgICAqLworICAgIGdldE1vZGVsVHlwZXM6IGZ1bmN0aW9uICgpIHsKKyAgICAg
IHZhciBfdGhpczQgPSB0aGlzOworCisgICAgICB2YXIgY29udGFpbmVyRGVidWdBZGFwdGVyID0g
dGhpcy5nZXQoJ2NvbnRhaW5lckRlYnVnQWRhcHRlcicpOworICAgICAgdmFyIHR5cGVzOworCisg
ICAgICBpZiAoY29udGFpbmVyRGVidWdBZGFwdGVyLmNhbkNhdGFsb2dFbnRyaWVzQnlUeXBlKCdt
b2RlbCcpKSB7CisgICAgICAgIHR5cGVzID0gY29udGFpbmVyRGVidWdBZGFwdGVyLmNhdGFsb2dF
bnRyaWVzQnlUeXBlKCdtb2RlbCcpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdHlwZXMgPSB0
aGlzLl9nZXRPYmplY3RzT25OYW1lc3BhY2VzKCk7CisgICAgICB9CisKKyAgICAgIC8vIE5ldyBh
ZGFwdGVycyByZXR1cm4gc3RyaW5ncyBpbnN0ZWFkIG9mIGNsYXNzZXMuCisgICAgICB0eXBlcyA9
IF9lbWJlclJ1bnRpbWVTeXN0ZW1OYXRpdmVfYXJyYXkuQSh0eXBlcykubWFwKGZ1bmN0aW9uIChu
YW1lKSB7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAga2xhc3M6IF90aGlzNC5fbmFtZVRv
Q2xhc3MobmFtZSksCisgICAgICAgICAgbmFtZTogbmFtZQorICAgICAgICB9OworICAgICAgfSk7
CisgICAgICB0eXBlcyA9IF9lbWJlclJ1bnRpbWVTeXN0ZW1OYXRpdmVfYXJyYXkuQSh0eXBlcyku
ZmlsdGVyKGZ1bmN0aW9uICh0eXBlKSB7CisgICAgICAgIHJldHVybiBfdGhpczQuZGV0ZWN0KHR5
cGUua2xhc3MpOworICAgICAgfSk7CisKKyAgICAgIHJldHVybiBfZW1iZXJSdW50aW1lU3lzdGVt
TmF0aXZlX2FycmF5LkEodHlwZXMpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgIExvb3BzIG92
ZXIgYWxsIG5hbWVzcGFjZXMgYW5kIGFsbCBvYmplY3RzCisgICAgICBhdHRhY2hlZCB0byB0aGVt
LgorICAgICAgIEBwcml2YXRlCisgICAgICBAbWV0aG9kIF9nZXRPYmplY3RzT25OYW1lc3BhY2Vz
CisgICAgICBAcmV0dXJuIHtBcnJheX0gQXJyYXkgb2YgbW9kZWwgdHlwZSBzdHJpbmdzLgorICAg
ICovCisgICAgX2dldE9iamVjdHNPbk5hbWVzcGFjZXM6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHZh
ciBfdGhpczUgPSB0aGlzOworCisgICAgICB2YXIgbmFtZXNwYWNlcyA9IF9lbWJlclJ1bnRpbWVT
eXN0ZW1OYXRpdmVfYXJyYXkuQShfZW1iZXJSdW50aW1lU3lzdGVtTmFtZXNwYWNlLmRlZmF1bHQu
TkFNRVNQQUNFUyk7CisgICAgICB2YXIgdHlwZXMgPSBfZW1iZXJSdW50aW1lU3lzdGVtTmF0aXZl
X2FycmF5LkEoKTsKKworICAgICAgbmFtZXNwYWNlcy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lc3Bh
Y2UpIHsKKyAgICAgICAgZm9yICh2YXIga2V5IGluIG5hbWVzcGFjZSkgeworICAgICAgICAgIGlm
ICghbmFtZXNwYWNlLmhhc093blByb3BlcnR5KGtleSkpIHsKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgIH0KKyAgICAgICAgICAvLyBFdmVuIHRob3VnaCB3ZSB3aWxsIGZpbHRlciBh
Z2FpbiBpbiBgZ2V0TW9kZWxUeXBlc2AsCisgICAgICAgICAgLy8gd2Ugc2hvdWxkIG5vdCBjYWxs
IGBsb29rdXBGYWN0b3J5YCBvbiBub24tbW9kZWxzCisgICAgICAgICAgLy8gKGVzcGVjaWFsbHkg
d2hlbiBgRW1iZXIuTU9ERUxfRkFDVE9SWV9JTkpFQ1RJT05TYCBpcyBgdHJ1ZWApCisgICAgICAg
ICAgaWYgKCFfdGhpczUuZGV0ZWN0KG5hbWVzcGFjZVtrZXldKSkgeworICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgfQorICAgICAgICAgIHZhciBuYW1lID0gX2VtYmVyUnVudGltZVN5
c3RlbVN0cmluZy5kYXNoZXJpemUoa2V5KTsKKyAgICAgICAgICBpZiAoIShuYW1lc3BhY2UgaW5z
dGFuY2VvZiBfZW1iZXJBcHBsaWNhdGlvblN5c3RlbUFwcGxpY2F0aW9uLmRlZmF1bHQpICYmIG5h
bWVzcGFjZS50b1N0cmluZygpKSB7CisgICAgICAgICAgICBuYW1lID0gbmFtZXNwYWNlICsgJy8n
ICsgbmFtZTsKKyAgICAgICAgICB9CisgICAgICAgICAgdHlwZXMucHVzaChuYW1lKTsKKyAgICAg
ICAgfQorICAgICAgfSk7CisgICAgICByZXR1cm4gdHlwZXM7CisgICAgfSwKKworICAgIC8qKgor
ICAgICAgRmV0Y2hlcyBhbGwgbG9hZGVkIHJlY29yZHMgZm9yIGEgZ2l2ZW4gdHlwZS4KKyAgICAg
ICBAcHJpdmF0ZQorICAgICAgQG1ldGhvZCBnZXRSZWNvcmRzCisgICAgICBAcmV0dXJuIHtBcnJh
eX0gQW4gYXJyYXkgb2YgcmVjb3Jkcy4KKyAgICAgICBUaGlzIGFycmF5IHdpbGwgYmUgb2JzZXJ2
ZWQgZm9yIGNoYW5nZXMsCisgICAgICAgc28gaXQgc2hvdWxkIHVwZGF0ZSB3aGVuIG5ldyByZWNv
cmRzIGFyZSBhZGRlZC9yZW1vdmVkLgorICAgICovCisgICAgZ2V0UmVjb3JkczogZnVuY3Rpb24g
KHR5cGUpIHsKKyAgICAgIHJldHVybiBfZW1iZXJSdW50aW1lU3lzdGVtTmF0aXZlX2FycmF5LkEo
KTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICBXcmFwcyBhIHJlY29yZCBhbmQgb2JzZXJ2ZXJz
IGNoYW5nZXMgdG8gaXQuCisgICAgICAgQHByaXZhdGUKKyAgICAgIEBtZXRob2Qgd3JhcFJlY29y
ZAorICAgICAgQHBhcmFtIHtPYmplY3R9IHJlY29yZCBUaGUgcmVjb3JkIGluc3RhbmNlLgorICAg
ICAgQHJldHVybiB7T2JqZWN0fSBUaGUgd3JhcHBlZCByZWNvcmQuIEZvcm1hdDoKKyAgICAgIGNv
bHVtblZhbHVlczoge0FycmF5fQorICAgICAgc2VhcmNoS2V5d29yZHM6IHtBcnJheX0KKyAgICAq
LworICAgIHdyYXBSZWNvcmQ6IGZ1bmN0aW9uIChyZWNvcmQpIHsKKyAgICAgIHZhciByZWNvcmRU
b1NlbmQgPSB7IG9iamVjdDogcmVjb3JkIH07CisKKyAgICAgIHJlY29yZFRvU2VuZC5jb2x1bW5W
YWx1ZXMgPSB0aGlzLmdldFJlY29yZENvbHVtblZhbHVlcyhyZWNvcmQpOworICAgICAgcmVjb3Jk
VG9TZW5kLnNlYXJjaEtleXdvcmRzID0gdGhpcy5nZXRSZWNvcmRLZXl3b3JkcyhyZWNvcmQpOwor
ICAgICAgcmVjb3JkVG9TZW5kLmZpbHRlclZhbHVlcyA9IHRoaXMuZ2V0UmVjb3JkRmlsdGVyVmFs
dWVzKHJlY29yZCk7CisgICAgICByZWNvcmRUb1NlbmQuY29sb3IgPSB0aGlzLmdldFJlY29yZENv
bG9yKHJlY29yZCk7CisKKyAgICAgIHJldHVybiByZWNvcmRUb1NlbmQ7CisgICAgfSwKKworICAg
IC8qKgorICAgICAgR2V0cyB0aGUgdmFsdWVzIGZvciBlYWNoIGNvbHVtbi4KKyAgICAgICBAcHJp
dmF0ZQorICAgICAgQG1ldGhvZCBnZXRSZWNvcmRDb2x1bW5WYWx1ZXMKKyAgICAgIEByZXR1cm4g
e09iamVjdH0gS2V5cyBzaG91bGQgbWF0Y2ggY29sdW1uIG5hbWVzIGRlZmluZWQKKyAgICAgIGJ5
IHRoZSBtb2RlbCB0eXBlLgorICAgICovCisgICAgZ2V0UmVjb3JkQ29sdW1uVmFsdWVzOiBmdW5j
dGlvbiAocmVjb3JkKSB7CisgICAgICByZXR1cm4ge307CisgICAgfSwKKworICAgIC8qKgorICAg
ICAgUmV0dXJucyBrZXl3b3JkcyB0byBtYXRjaCB3aGVuIHNlYXJjaGluZyByZWNvcmRzLgorICAg
ICAgIEBwcml2YXRlCisgICAgICBAbWV0aG9kIGdldFJlY29yZEtleXdvcmRzCisgICAgICBAcmV0
dXJuIHtBcnJheX0gUmVsZXZhbnQga2V5d29yZHMgZm9yIHNlYXJjaC4KKyAgICAqLworICAgIGdl
dFJlY29yZEtleXdvcmRzOiBmdW5jdGlvbiAocmVjb3JkKSB7CisgICAgICByZXR1cm4gX2VtYmVy
UnVudGltZVN5c3RlbU5hdGl2ZV9hcnJheS5BKCk7CisgICAgfSwKKworICAgIC8qKgorICAgICAg
UmV0dXJucyB0aGUgdmFsdWVzIG9mIGZpbHRlcnMgZGVmaW5lZCBieSBgZ2V0RmlsdGVyc2AuCisg
ICAgICAgQHByaXZhdGUKKyAgICAgIEBtZXRob2QgZ2V0UmVjb3JkRmlsdGVyVmFsdWVzCisgICAg
ICBAcGFyYW0ge09iamVjdH0gcmVjb3JkIFRoZSByZWNvcmQgaW5zdGFuY2UuCisgICAgICBAcmV0
dXJuIHtPYmplY3R9IFRoZSBmaWx0ZXIgdmFsdWVzLgorICAgICovCisgICAgZ2V0UmVjb3JkRmls
dGVyVmFsdWVzOiBmdW5jdGlvbiAocmVjb3JkKSB7CisgICAgICByZXR1cm4ge307CisgICAgfSwK
KworICAgIC8qKgorICAgICAgRWFjaCByZWNvcmQgY2FuIGhhdmUgYSBjb2xvciB0aGF0IHJlcHJl
c2VudHMgaXRzIHN0YXRlLgorICAgICAgIEBwcml2YXRlCisgICAgICBAbWV0aG9kIGdldFJlY29y
ZENvbG9yCisgICAgICBAcGFyYW0ge09iamVjdH0gcmVjb3JkIFRoZSByZWNvcmQgaW5zdGFuY2UK
KyAgICAgIEByZXR1cm4ge1N0cmluZ30gVGhlIHJlY29yZHMgY29sb3IuCisgICAgICAgIFBvc3Np
YmxlIG9wdGlvbnM6IGJsYWNrLCByZWQsIGJsdWUsIGdyZWVuLgorICAgICovCisgICAgZ2V0UmVj
b3JkQ29sb3I6IGZ1bmN0aW9uIChyZWNvcmQpIHsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0s
CisKKyAgICAvKioKKyAgICAgIE9ic2VydmVzIGFsbCByZWxldmFudCBwcm9wZXJ0aWVzIGFuZCBy
ZS1zZW5kcyB0aGUgd3JhcHBlZCByZWNvcmQKKyAgICAgIHdoZW4gYSBjaGFuZ2Ugb2NjdXJzLgor
ICAgICAgIEBwcml2YXRlCisgICAgICBAbWV0aG9kIG9ic2VydmVyUmVjb3JkCisgICAgICBAcGFy
YW0ge09iamVjdH0gcmVjb3JkIFRoZSByZWNvcmQgaW5zdGFuY2UuCisgICAgICBAcGFyYW0ge0Z1
bmN0aW9ufSByZWNvcmRVcGRhdGVkIFRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gYSByZWNvcmQg
aXMgdXBkYXRlZC4KKyAgICAgIEByZXR1cm4ge0Z1bmN0aW9ufSBUaGUgZnVuY3Rpb24gdG8gY2Fs
bCB0byByZW1vdmUgYWxsIG9ic2VydmVycy4KKyAgICAqLworICAgIG9ic2VydmVSZWNvcmQ6IGZ1
bmN0aW9uIChyZWNvcmQsIHJlY29yZFVwZGF0ZWQpIHsKKyAgICAgIHJldHVybiBmdW5jdGlvbiAo
KSB7fTsKKyAgICB9CisgIH0pOworfSk7CitlbmlmZWQoJ2VtYmVyLWV4dGVuc2lvbi1zdXBwb3J0
L2luZGV4JywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2NvcmUnLCAnZW1iZXItZXh0ZW5zaW9u
LXN1cHBvcnQvZGF0YV9hZGFwdGVyJywgJ2VtYmVyLWV4dGVuc2lvbi1zdXBwb3J0L2NvbnRhaW5l
cl9kZWJ1Z19hZGFwdGVyJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbENvcmUsIF9l
bWJlckV4dGVuc2lvblN1cHBvcnREYXRhX2FkYXB0ZXIsIF9lbWJlckV4dGVuc2lvblN1cHBvcnRD
b250YWluZXJfZGVidWdfYWRhcHRlcikgeworICAvKioKKyAgQG1vZHVsZSBlbWJlcgorICBAc3Vi
bW9kdWxlIGVtYmVyLWV4dGVuc2lvbi1zdXBwb3J0CisgICovCisKKyAgJ3VzZSBzdHJpY3QnOwor
CisgIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LkRhdGFBZGFwdGVyID0gX2VtYmVyRXh0ZW5zaW9u
U3VwcG9ydERhdGFfYWRhcHRlci5kZWZhdWx0OworICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5D
b250YWluZXJEZWJ1Z0FkYXB0ZXIgPSBfZW1iZXJFeHRlbnNpb25TdXBwb3J0Q29udGFpbmVyX2Rl
YnVnX2FkYXB0ZXIuZGVmYXVsdDsKK30pOworZW5pZmVkKCdlbWJlci1odG1sYmFycy9jb21wYXQn
LCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvY29yZScsICdlbWJlci1odG1sYmFycy91dGlscy9z
dHJpbmcnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsQ29yZSwgX2VtYmVySHRtbGJh
cnNVdGlsc1N0cmluZykgeworICAndXNlIHN0cmljdCc7CisKKyAgdmFyIEVtYmVySGFuZGxlYmFy
cyA9IF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LkhhbmRsZWJhcnMgPSBfZW1iZXJNZXRhbENvcmUu
ZGVmYXVsdC5IYW5kbGViYXJzIHx8IHt9OworCisgIEVtYmVySGFuZGxlYmFycy5TYWZlU3RyaW5n
ID0gX2VtYmVySHRtbGJhcnNVdGlsc1N0cmluZy5TYWZlU3RyaW5nOworICBFbWJlckhhbmRsZWJh
cnMuVXRpbHMgPSB7CisgICAgZXNjYXBlRXhwcmVzc2lvbjogX2VtYmVySHRtbGJhcnNVdGlsc1N0
cmluZy5lc2NhcGVFeHByZXNzaW9uCisgIH07CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gRW1iZXJI
YW5kbGViYXJzOworfSk7CisvLyBmb3IgSGFuZGxlYmFycyBleHBvcnQKK2VuaWZlZCgnZW1iZXIt
aHRtbGJhcnMvZW52JywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsJywgJ2VtYmVyLW1ldGFsL2Vu
dmlyb25tZW50JywgJ2h0bWxiYXJzLXJ1bnRpbWUnLCAnZW1iZXItbWV0YWwvYXNzaWduJywgJ2Vt
YmVyLWh0bWxiYXJzL2hvb2tzL3N1YmV4cHInLCAnZW1iZXItaHRtbGJhcnMvaG9va3MvY29uY2F0
JywgJ2VtYmVyLWh0bWxiYXJzL2hvb2tzL2xpbmstcmVuZGVyLW5vZGUnLCAnZW1iZXItaHRtbGJh
cnMvaG9va3MvY3JlYXRlLWZyZXNoLXNjb3BlJywgJ2VtYmVyLWh0bWxiYXJzL2hvb2tzL2JpbmQt
c2hhZG93LXNjb3BlJywgJ2VtYmVyLWh0bWxiYXJzL2hvb2tzL2JpbmQtc2VsZicsICdlbWJlci1o
dG1sYmFycy9ob29rcy9iaW5kLXNjb3BlJywgJ2VtYmVyLWh0bWxiYXJzL2hvb2tzL2JpbmQtbG9j
YWwnLCAnZW1iZXItaHRtbGJhcnMvaG9va3MvYmluZC1ibG9jaycsICdlbWJlci1odG1sYmFycy9o
b29rcy91cGRhdGUtc2VsZicsICdlbWJlci1odG1sYmFycy9ob29rcy9nZXQtcm9vdCcsICdlbWJl
ci1odG1sYmFycy9ob29rcy9nZXQtY2hpbGQnLCAnZW1iZXItaHRtbGJhcnMvaG9va3MvZ2V0LWJs
b2NrJywgJ2VtYmVyLWh0bWxiYXJzL2hvb2tzL2dldC12YWx1ZScsICdlbWJlci1odG1sYmFycy9o
b29rcy9nZXQtY2VsbC1vci12YWx1ZScsICdlbWJlci1odG1sYmFycy9ob29rcy9jbGVhbnVwLXJl
bmRlci1ub2RlJywgJ2VtYmVyLWh0bWxiYXJzL2hvb2tzL2Rlc3Ryb3ktcmVuZGVyLW5vZGUnLCAn
ZW1iZXItaHRtbGJhcnMvaG9va3MvZGlkLXJlbmRlci1ub2RlJywgJ2VtYmVyLWh0bWxiYXJzL2hv
b2tzL3dpbGwtY2xlYW51cC10cmVlJywgJ2VtYmVyLWh0bWxiYXJzL2hvb2tzL2RpZC1jbGVhbnVw
LXRyZWUnLCAnZW1iZXItaHRtbGJhcnMvaG9va3MvY2xhc3NpZnknLCAnZW1iZXItaHRtbGJhcnMv
aG9va3MvY29tcG9uZW50JywgJ2VtYmVyLWh0bWxiYXJzL2hvb2tzL2xvb2t1cC1oZWxwZXInLCAn
ZW1iZXItaHRtbGJhcnMvaG9va3MvaGFzLWhlbHBlcicsICdlbWJlci1odG1sYmFycy9ob29rcy9p
bnZva2UtaGVscGVyJywgJ2VtYmVyLWh0bWxiYXJzL2hvb2tzL2VsZW1lbnQnLCAnZW1iZXItaHRt
bGJhcnMvaGVscGVycycsICdlbWJlci1odG1sYmFycy9rZXl3b3JkcycsICdlbWJlci1odG1sYmFy
cy9zeXN0ZW0vZG9tLWhlbHBlcicsICdlbWJlci1odG1sYmFycy9rZXl3b3Jkcy9kZWJ1Z2dlcics
ICdlbWJlci1odG1sYmFycy9rZXl3b3Jkcy93aXRoJywgJ2VtYmVyLWh0bWxiYXJzL2tleXdvcmRz
L291dGxldCcsICdlbWJlci1odG1sYmFycy9rZXl3b3Jkcy91bmJvdW5kJywgJ2VtYmVyLWh0bWxi
YXJzL2tleXdvcmRzL3ZpZXcnLCAnZW1iZXItaHRtbGJhcnMva2V5d29yZHMvY29tcG9uZW50Jywg
J2VtYmVyLWh0bWxiYXJzL2tleXdvcmRzL2VsZW1lbnQtY29tcG9uZW50JywgJ2VtYmVyLWh0bWxi
YXJzL2tleXdvcmRzL3BhcnRpYWwnLCAnZW1iZXItaHRtbGJhcnMva2V5d29yZHMvaW5wdXQnLCAn
ZW1iZXItaHRtbGJhcnMva2V5d29yZHMvdGV4dGFyZWEnLCAnZW1iZXItaHRtbGJhcnMva2V5d29y
ZHMveWllbGQnLCAnZW1iZXItaHRtbGJhcnMva2V5d29yZHMvbXV0JywgJ2VtYmVyLWh0bWxiYXJz
L2tleXdvcmRzL3JlYWRvbmx5JywgJ2VtYmVyLWh0bWxiYXJzL2tleXdvcmRzL2dldCddLCBmdW5j
dGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWwsIF9lbWJlck1ldGFsRW52aXJvbm1lbnQsIF9odG1s
YmFyc1J1bnRpbWUsIF9lbWJlck1ldGFsQXNzaWduLCBfZW1iZXJIdG1sYmFyc0hvb2tzU3ViZXhw
ciwgX2VtYmVySHRtbGJhcnNIb29rc0NvbmNhdCwgX2VtYmVySHRtbGJhcnNIb29rc0xpbmtSZW5k
ZXJOb2RlLCBfZW1iZXJIdG1sYmFyc0hvb2tzQ3JlYXRlRnJlc2hTY29wZSwgX2VtYmVySHRtbGJh
cnNIb29rc0JpbmRTaGFkb3dTY29wZSwgX2VtYmVySHRtbGJhcnNIb29rc0JpbmRTZWxmLCBfZW1i
ZXJIdG1sYmFyc0hvb2tzQmluZFNjb3BlLCBfZW1iZXJIdG1sYmFyc0hvb2tzQmluZExvY2FsLCBf
ZW1iZXJIdG1sYmFyc0hvb2tzQmluZEJsb2NrLCBfZW1iZXJIdG1sYmFyc0hvb2tzVXBkYXRlU2Vs
ZiwgX2VtYmVySHRtbGJhcnNIb29rc0dldFJvb3QsIF9lbWJlckh0bWxiYXJzSG9va3NHZXRDaGls
ZCwgX2VtYmVySHRtbGJhcnNIb29rc0dldEJsb2NrLCBfZW1iZXJIdG1sYmFyc0hvb2tzR2V0VmFs
dWUsIF9lbWJlckh0bWxiYXJzSG9va3NHZXRDZWxsT3JWYWx1ZSwgX2VtYmVySHRtbGJhcnNIb29r
c0NsZWFudXBSZW5kZXJOb2RlLCBfZW1iZXJIdG1sYmFyc0hvb2tzRGVzdHJveVJlbmRlck5vZGUs
IF9lbWJlckh0bWxiYXJzSG9va3NEaWRSZW5kZXJOb2RlLCBfZW1iZXJIdG1sYmFyc0hvb2tzV2ls
bENsZWFudXBUcmVlLCBfZW1iZXJIdG1sYmFyc0hvb2tzRGlkQ2xlYW51cFRyZWUsIF9lbWJlckh0
bWxiYXJzSG9va3NDbGFzc2lmeSwgX2VtYmVySHRtbGJhcnNIb29rc0NvbXBvbmVudCwgX2VtYmVy
SHRtbGJhcnNIb29rc0xvb2t1cEhlbHBlciwgX2VtYmVySHRtbGJhcnNIb29rc0hhc0hlbHBlciwg
X2VtYmVySHRtbGJhcnNIb29rc0ludm9rZUhlbHBlciwgX2VtYmVySHRtbGJhcnNIb29rc0VsZW1l
bnQsIF9lbWJlckh0bWxiYXJzSGVscGVycywgX2VtYmVySHRtbGJhcnNLZXl3b3JkcywgX2VtYmVy
SHRtbGJhcnNTeXN0ZW1Eb21IZWxwZXIsIF9lbWJlckh0bWxiYXJzS2V5d29yZHNEZWJ1Z2dlciwg
X2VtYmVySHRtbGJhcnNLZXl3b3Jkc1dpdGgsIF9lbWJlckh0bWxiYXJzS2V5d29yZHNPdXRsZXQs
IF9lbWJlckh0bWxiYXJzS2V5d29yZHNVbmJvdW5kLCBfZW1iZXJIdG1sYmFyc0tleXdvcmRzVmll
dywgX2VtYmVySHRtbGJhcnNLZXl3b3Jkc0NvbXBvbmVudCwgX2VtYmVySHRtbGJhcnNLZXl3b3Jk
c0VsZW1lbnRDb21wb25lbnQsIF9lbWJlckh0bWxiYXJzS2V5d29yZHNQYXJ0aWFsLCBfZW1iZXJI
dG1sYmFyc0tleXdvcmRzSW5wdXQsIF9lbWJlckh0bWxiYXJzS2V5d29yZHNUZXh0YXJlYSwgX2Vt
YmVySHRtbGJhcnNLZXl3b3Jkc1lpZWxkLCBfZW1iZXJIdG1sYmFyc0tleXdvcmRzTXV0LCBfZW1i
ZXJIdG1sYmFyc0tleXdvcmRzUmVhZG9ubHksIF9lbWJlckh0bWxiYXJzS2V5d29yZHNHZXQpIHsK
KyAgJ3VzZSBzdHJpY3QnOworCisgIHZhciBlbWJlckhvb2tzID0gX2VtYmVyTWV0YWxBc3NpZ24u
ZGVmYXVsdCh7fSwgX2h0bWxiYXJzUnVudGltZS5ob29rcyk7CisgIGVtYmVySG9va3Mua2V5d29y
ZHMgPSBfZW1iZXJIdG1sYmFyc0tleXdvcmRzLmRlZmF1bHQ7CisKKyAgX2VtYmVyTWV0YWxBc3Np
Z24uZGVmYXVsdChlbWJlckhvb2tzLCB7CisgICAgbGlua1JlbmRlck5vZGU6IF9lbWJlckh0bWxi
YXJzSG9va3NMaW5rUmVuZGVyTm9kZS5kZWZhdWx0LAorICAgIGNyZWF0ZUZyZXNoU2NvcGU6IF9l
bWJlckh0bWxiYXJzSG9va3NDcmVhdGVGcmVzaFNjb3BlLmRlZmF1bHQsCisgICAgY3JlYXRlQ2hp
bGRTY29wZTogX2VtYmVySHRtbGJhcnNIb29rc0NyZWF0ZUZyZXNoU2NvcGUuY3JlYXRlQ2hpbGRT
Y29wZSwKKyAgICBiaW5kU2hhZG93U2NvcGU6IF9lbWJlckh0bWxiYXJzSG9va3NCaW5kU2hhZG93
U2NvcGUuZGVmYXVsdCwKKyAgICBiaW5kU2VsZjogX2VtYmVySHRtbGJhcnNIb29rc0JpbmRTZWxm
LmRlZmF1bHQsCisgICAgYmluZFNjb3BlOiBfZW1iZXJIdG1sYmFyc0hvb2tzQmluZFNjb3BlLmRl
ZmF1bHQsCisgICAgYmluZExvY2FsOiBfZW1iZXJIdG1sYmFyc0hvb2tzQmluZExvY2FsLmRlZmF1
bHQsCisgICAgYmluZEJsb2NrOiBfZW1iZXJIdG1sYmFyc0hvb2tzQmluZEJsb2NrLmRlZmF1bHQs
CisgICAgdXBkYXRlU2VsZjogX2VtYmVySHRtbGJhcnNIb29rc1VwZGF0ZVNlbGYuZGVmYXVsdCwK
KyAgICBnZXRCbG9jazogX2VtYmVySHRtbGJhcnNIb29rc0dldEJsb2NrLmRlZmF1bHQsCisgICAg
Z2V0Um9vdDogX2VtYmVySHRtbGJhcnNIb29rc0dldFJvb3QuZGVmYXVsdCwKKyAgICBnZXRDaGls
ZDogX2VtYmVySHRtbGJhcnNIb29rc0dldENoaWxkLmRlZmF1bHQsCisgICAgZ2V0VmFsdWU6IF9l
bWJlckh0bWxiYXJzSG9va3NHZXRWYWx1ZS5kZWZhdWx0LAorICAgIGdldENlbGxPclZhbHVlOiBf
ZW1iZXJIdG1sYmFyc0hvb2tzR2V0Q2VsbE9yVmFsdWUuZGVmYXVsdCwKKyAgICBzdWJleHByOiBf
ZW1iZXJIdG1sYmFyc0hvb2tzU3ViZXhwci5kZWZhdWx0LAorICAgIGNvbmNhdDogX2VtYmVySHRt
bGJhcnNIb29rc0NvbmNhdC5kZWZhdWx0LAorICAgIGNsZWFudXBSZW5kZXJOb2RlOiBfZW1iZXJI
dG1sYmFyc0hvb2tzQ2xlYW51cFJlbmRlck5vZGUuZGVmYXVsdCwKKyAgICBkZXN0cm95UmVuZGVy
Tm9kZTogX2VtYmVySHRtbGJhcnNIb29rc0Rlc3Ryb3lSZW5kZXJOb2RlLmRlZmF1bHQsCisgICAg
d2lsbENsZWFudXBUcmVlOiBfZW1iZXJIdG1sYmFyc0hvb2tzV2lsbENsZWFudXBUcmVlLmRlZmF1
bHQsCisgICAgZGlkQ2xlYW51cFRyZWU6IF9lbWJlckh0bWxiYXJzSG9va3NEaWRDbGVhbnVwVHJl
ZS5kZWZhdWx0LAorICAgIGRpZFJlbmRlck5vZGU6IF9lbWJlckh0bWxiYXJzSG9va3NEaWRSZW5k
ZXJOb2RlLmRlZmF1bHQsCisgICAgY2xhc3NpZnk6IF9lbWJlckh0bWxiYXJzSG9va3NDbGFzc2lm
eS5kZWZhdWx0LAorICAgIGNvbXBvbmVudDogX2VtYmVySHRtbGJhcnNIb29rc0NvbXBvbmVudC5k
ZWZhdWx0LAorICAgIGxvb2t1cEhlbHBlcjogX2VtYmVySHRtbGJhcnNIb29rc0xvb2t1cEhlbHBl
ci5kZWZhdWx0LAorICAgIGhhc0hlbHBlcjogX2VtYmVySHRtbGJhcnNIb29rc0hhc0hlbHBlci5k
ZWZhdWx0LAorICAgIGludm9rZUhlbHBlcjogX2VtYmVySHRtbGJhcnNIb29rc0ludm9rZUhlbHBl
ci5kZWZhdWx0LAorICAgIGVsZW1lbnQ6IF9lbWJlckh0bWxiYXJzSG9va3NFbGVtZW50LmRlZmF1
bHQKKyAgfSk7CisKKyAgX2VtYmVySHRtbGJhcnNLZXl3b3Jkcy5yZWdpc3RlcktleXdvcmQoJ2Rl
YnVnZ2VyJywgX2VtYmVySHRtbGJhcnNLZXl3b3Jkc0RlYnVnZ2VyLmRlZmF1bHQpOworICBfZW1i
ZXJIdG1sYmFyc0tleXdvcmRzLnJlZ2lzdGVyS2V5d29yZCgnd2l0aCcsIF9lbWJlckh0bWxiYXJz
S2V5d29yZHNXaXRoLmRlZmF1bHQpOworICBfZW1iZXJIdG1sYmFyc0tleXdvcmRzLnJlZ2lzdGVy
S2V5d29yZCgnb3V0bGV0JywgX2VtYmVySHRtbGJhcnNLZXl3b3Jkc091dGxldC5kZWZhdWx0KTsK
KyAgX2VtYmVySHRtbGJhcnNLZXl3b3Jkcy5yZWdpc3RlcktleXdvcmQoJ3VuYm91bmQnLCBfZW1i
ZXJIdG1sYmFyc0tleXdvcmRzVW5ib3VuZC5kZWZhdWx0KTsKKyAgX2VtYmVySHRtbGJhcnNLZXl3
b3Jkcy5yZWdpc3RlcktleXdvcmQoJ2NvbXBvbmVudCcsIF9lbWJlckh0bWxiYXJzS2V5d29yZHND
b21wb25lbnQuZGVmYXVsdCk7CisgIF9lbWJlckh0bWxiYXJzS2V5d29yZHMucmVnaXN0ZXJLZXl3
b3JkKCdAZWxlbWVudF9jb21wb25lbnQnLCBfZW1iZXJIdG1sYmFyc0tleXdvcmRzRWxlbWVudENv
bXBvbmVudC5kZWZhdWx0KTsKKyAgX2VtYmVySHRtbGJhcnNLZXl3b3Jkcy5yZWdpc3RlcktleXdv
cmQoJ3BhcnRpYWwnLCBfZW1iZXJIdG1sYmFyc0tleXdvcmRzUGFydGlhbC5kZWZhdWx0KTsKKyAg
X2VtYmVySHRtbGJhcnNLZXl3b3Jkcy5yZWdpc3RlcktleXdvcmQoJ2lucHV0JywgX2VtYmVySHRt
bGJhcnNLZXl3b3Jkc0lucHV0LmRlZmF1bHQpOworICBfZW1iZXJIdG1sYmFyc0tleXdvcmRzLnJl
Z2lzdGVyS2V5d29yZCgndGV4dGFyZWEnLCBfZW1iZXJIdG1sYmFyc0tleXdvcmRzVGV4dGFyZWEu
ZGVmYXVsdCk7CisgIF9lbWJlckh0bWxiYXJzS2V5d29yZHMucmVnaXN0ZXJLZXl3b3JkKCd5aWVs
ZCcsIF9lbWJlckh0bWxiYXJzS2V5d29yZHNZaWVsZC5kZWZhdWx0KTsKKyAgX2VtYmVySHRtbGJh
cnNLZXl3b3Jkcy5yZWdpc3RlcktleXdvcmQoJ211dCcsIF9lbWJlckh0bWxiYXJzS2V5d29yZHNN
dXQuZGVmYXVsdCk7CisgIF9lbWJlckh0bWxiYXJzS2V5d29yZHMucmVnaXN0ZXJLZXl3b3JkKCdA
bXV0JywgX2VtYmVySHRtbGJhcnNLZXl3b3Jkc011dC5wcml2YXRlTXV0KTsKKyAgX2VtYmVySHRt
bGJhcnNLZXl3b3Jkcy5yZWdpc3RlcktleXdvcmQoJ3JlYWRvbmx5JywgX2VtYmVySHRtbGJhcnNL
ZXl3b3Jkc1JlYWRvbmx5LmRlZmF1bHQpOworICBfZW1iZXJIdG1sYmFyc0tleXdvcmRzLnJlZ2lz
dGVyS2V5d29yZCgnZ2V0JywgX2VtYmVySHRtbGJhcnNLZXl3b3Jkc0dldC5kZWZhdWx0KTsKKwor
ICBpZiAoX2VtYmVyTWV0YWwuZGVmYXVsdC5FTlYuX0VOQUJMRV9MRUdBQ1lfVklFV19TVVBQT1JU
KSB7CisgICAgX2VtYmVySHRtbGJhcnNLZXl3b3Jkcy5yZWdpc3RlcktleXdvcmQoJ3ZpZXcnLCBf
ZW1iZXJIdG1sYmFyc0tleXdvcmRzVmlldy5kZWZhdWx0KTsKKyAgfQorCisgIGV4cG9ydHMuZGVm
YXVsdCA9IHsKKyAgICBob29rczogZW1iZXJIb29rcywKKyAgICBoZWxwZXJzOiBfZW1iZXJIdG1s
YmFyc0hlbHBlcnMuZGVmYXVsdCwKKyAgICB1c2VGcmFnbWVudENhY2hlOiB0cnVlCisgIH07CisK
KyAgdmFyIGRvbUhlbHBlciA9IF9lbWJlck1ldGFsRW52aXJvbm1lbnQuZGVmYXVsdC5oYXNET00g
PyBuZXcgX2VtYmVySHRtbGJhcnNTeXN0ZW1Eb21IZWxwZXIuZGVmYXVsdCgpIDogbnVsbDsKKwor
ICBleHBvcnRzLmRvbUhlbHBlciA9IGRvbUhlbHBlcjsKK30pOworZW5pZmVkKCdlbWJlci1odG1s
YmFycy9nbGltbWVyLWNvbXBvbmVudCcsIFsnZXhwb3J0cycsICdlbWJlci12aWV3cy92aWV3cy9j
b3JlX3ZpZXcnLCAnZW1iZXItdmlld3MvbWl4aW5zL3ZpZXdfY2hpbGRfdmlld3Nfc3VwcG9ydCcs
ICdlbWJlci12aWV3cy9taXhpbnMvdmlld19zdGF0ZV9zdXBwb3J0JywgJ2VtYmVyLXZpZXdzL21p
eGlucy90ZW1wbGF0ZV9yZW5kZXJpbmdfc3VwcG9ydCcsICdlbWJlci12aWV3cy9taXhpbnMvY2xh
c3NfbmFtZXNfc3VwcG9ydCcsICdlbWJlci12aWV3cy9taXhpbnMvaW5zdHJ1bWVudGF0aW9uX3N1
cHBvcnQnLCAnZW1iZXItdmlld3MvbWl4aW5zL2FyaWFfcm9sZV9zdXBwb3J0JywgJ2VtYmVyLXZp
ZXdzL21peGlucy92aWV3X3N1cHBvcnQnLCAnZW1iZXItdmlld3Mvdmlld3MvdmlldyddLCBmdW5j
dGlvbiAoZXhwb3J0cywgX2VtYmVyVmlld3NWaWV3c0NvcmVfdmlldywgX2VtYmVyVmlld3NNaXhp
bnNWaWV3X2NoaWxkX3ZpZXdzX3N1cHBvcnQsIF9lbWJlclZpZXdzTWl4aW5zVmlld19zdGF0ZV9z
dXBwb3J0LCBfZW1iZXJWaWV3c01peGluc1RlbXBsYXRlX3JlbmRlcmluZ19zdXBwb3J0LCBfZW1i
ZXJWaWV3c01peGluc0NsYXNzX25hbWVzX3N1cHBvcnQsIF9lbWJlclZpZXdzTWl4aW5zSW5zdHJ1
bWVudGF0aW9uX3N1cHBvcnQsIF9lbWJlclZpZXdzTWl4aW5zQXJpYV9yb2xlX3N1cHBvcnQsIF9l
bWJlclZpZXdzTWl4aW5zVmlld19zdXBwb3J0LCBfZW1iZXJWaWV3c1ZpZXdzVmlldykgeworICAn
dXNlIHN0cmljdCc7CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gX2VtYmVyVmlld3NWaWV3c0NvcmVf
dmlldy5kZWZhdWx0LmV4dGVuZChfZW1iZXJWaWV3c01peGluc1ZpZXdfY2hpbGRfdmlld3Nfc3Vw
cG9ydC5kZWZhdWx0LCBfZW1iZXJWaWV3c01peGluc1ZpZXdfc3RhdGVfc3VwcG9ydC5kZWZhdWx0
LCBfZW1iZXJWaWV3c01peGluc1RlbXBsYXRlX3JlbmRlcmluZ19zdXBwb3J0LmRlZmF1bHQsIF9l
bWJlclZpZXdzTWl4aW5zQ2xhc3NfbmFtZXNfc3VwcG9ydC5kZWZhdWx0LCBfZW1iZXJWaWV3c01p
eGluc0luc3RydW1lbnRhdGlvbl9zdXBwb3J0LmRlZmF1bHQsIF9lbWJlclZpZXdzTWl4aW5zQXJp
YV9yb2xlX3N1cHBvcnQuZGVmYXVsdCwgX2VtYmVyVmlld3NNaXhpbnNWaWV3X3N1cHBvcnQuZGVm
YXVsdCwgeworICAgIGlzQ29tcG9uZW50OiB0cnVlLAorICAgIGlzR2xpbW1lckNvbXBvbmVudDog
dHJ1ZSwKKworICAgIGluaXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHRoaXMuX3N1cGVyLmFwcGx5
KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICB0aGlzLl92aWV3UmVnaXN0cnkgPSB0aGlzLl92aWV3
UmVnaXN0cnkgfHwgX2VtYmVyVmlld3NWaWV3c1ZpZXcuZGVmYXVsdC52aWV3czsKKyAgICB9Cisg
IH0pOworfSk7CitlbmlmZWQoJ2VtYmVyLWh0bWxiYXJzL2hlbHBlcicsIFsnZXhwb3J0cycsICdl
bWJlci1ydW50aW1lL3N5c3RlbS9vYmplY3QnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlclJ1
bnRpbWVTeXN0ZW1PYmplY3QpIHsKKyAgLyoqCisgIEBtb2R1bGUgZW1iZXIKKyAgQHN1Ym1vZHVs
ZSBlbWJlci10ZW1wbGF0ZXMKKyAgKi8KKworICAndXNlIHN0cmljdCc7CisKKyAgZXhwb3J0cy5o
ZWxwZXIgPSBoZWxwZXI7CisKKyAgLyoqCisgICAgRW1iZXIgSGVscGVycyBhcmUgZnVuY3Rpb25z
IHRoYXQgY2FuIGNvbXB1dGUgdmFsdWVzLCBhbmQgYXJlIHVzZWQgaW4gdGVtcGxhdGVzLgorICAg
IEZvciBleGFtcGxlLCB0aGlzIGNvZGUgY2FsbHMgYSBoZWxwZXIgbmFtZWQgYGZvcm1hdC1jdXJy
ZW5jeWA6CisgIAorICAgIGBgYGhhbmRsZWJhcnMKKyAgICA8ZGl2Pnt7Zm9ybWF0LWN1cnJlbmN5
IGNlbnRzIGN1cnJlbmN5PSIkIn19PC9kaXY+CisgICAgYGBgCisgIAorICAgIEFkZGl0aW9uYWxs
eSwgYSBoZWxwZXIgY2FuIGJlIGNhbGxlZCBhcyBhIG5lc3RlZCBoZWxwZXIgKHNvbWV0aW1lcyBj
YWxsZWQgYQorICAgIHN1YmV4cHJlc3Npb24pLiBJbiB0aGlzIGV4YW1wbGUsIHRoZSBjb21wdXRl
ZCB2YWx1ZSBvZiBhIGhlbHBlciBpcyBwYXNzZWQKKyAgICB0byBhIGNvbXBvbmVudCBuYW1lZCBg
c2hvdy1tb25leWA6CisgIAorICAgIGBgYGhhbmRsZWJhcnMKKyAgICB7e3Nob3ctbW9uZXkgYW1v
dW50PShmb3JtYXQtY3VycmVuY3kgY2VudHMgY3VycmVuY3k9IiQiKX19CisgICAgYGBgCisgIAor
ICAgIEhlbHBlcnMgZGVmaW5lZCB1c2luZyBhIGNsYXNzIG11c3QgcHJvdmlkZSBhIGBjb21wdXRl
YCBmdW5jdGlvbi4gRm9yIGV4YW1wbGU6CisgIAorICAgIGBgYGpzCisgICAgZXhwb3J0IGRlZmF1
bHQgRW1iZXIuSGVscGVyLmV4dGVuZCh7CisgICAgICBjb21wdXRlKHBhcmFtcywgaGFzaCkgewor
ICAgICAgICBsZXQgY2VudHMgPSBwYXJhbXNbMF07CisgICAgICAgIGxldCBjdXJyZW5jeSA9IGhh
c2guY3VycmVuY3k7CisgICAgICAgIHJldHVybiBgJHtjdXJyZW5jeX0ke2NlbnRzICogMC4wMX1g
OworICAgICAgfQorICAgIH0pOworICAgIGBgYAorICAKKyAgICBFYWNoIHRpbWUgdGhlIGlucHV0
IHRvIGEgaGVscGVyIGNoYW5nZXMsIHRoZSBgY29tcHV0ZWAgZnVuY3Rpb24gd2lsbCBiZQorICAg
IGNhbGxlZCBhZ2Fpbi4KKyAgCisgICAgQXMgaW5zdGFuY2VzLCB0aGVzZSBoZWxwZXJzIGFsc28g
aGF2ZSBhY2Nlc3MgdG8gdGhlIGNvbnRhaW5lciBhbmQgd2lsbCBhY2NlcHQKKyAgICBpbmplY3Rl
ZCBkZXBlbmRlbmNpZXMuCisgIAorICAgIEFkZGl0aW9uYWxseSwgY2xhc3MgaGVscGVycyBjYW4g
Y2FsbCBgcmVjb21wdXRlYCB0byBmb3JjZSBhIG5ldyBjb21wdXRhdGlvbi4KKyAgCisgICAgQGNs
YXNzIEVtYmVyLkhlbHBlcgorICAgIEBwdWJsaWMKKyAgICBAc2luY2UgMS4xMy4wCisgICovCisg
IHZhciBIZWxwZXIgPSBfZW1iZXJSdW50aW1lU3lzdGVtT2JqZWN0LmRlZmF1bHQuZXh0ZW5kKHsK
KyAgICBpc0hlbHBlckluc3RhbmNlOiB0cnVlLAorCisgICAgLyoqCisgICAgICBPbiBhIGNsYXNz
LWJhc2VkIGhlbHBlciwgaXQgbWF5IGJlIHVzZWZ1bCB0byBmb3JjZSBhIHJlY29tcHV0YXRpb24g
b2YgdGhhdAorICAgICAgaGVscGVycyB2YWx1ZS4gVGhpcyBpcyBha2luIHRvIGByZXJlbmRlcmAg
b24gYSBjb21wb25lbnQuCisgICAgICAgRm9yIGV4YW1wbGUsIHRoaXMgY29tcG9uZW50IHdpbGwg
cmVyZW5kZXIgd2hlbiB0aGUgYGN1cnJlbnRVc2VyYCBvbiBhCisgICAgICBzZXNzaW9uIHNlcnZp
Y2UgY2hhbmdlczoKKyAgICAgICBgYGBqcworICAgICAgLy8gYXBwL2hlbHBlcnMvY3VycmVudC11
c2VyLWVtYWlsLmpzCisgICAgICBleHBvcnQgZGVmYXVsdCBFbWJlci5IZWxwZXIuZXh0ZW5kKHsK
KyAgICAgICAgc2Vzc2lvbjogRW1iZXIuaW5qZWN0LnNlcnZpY2UoKSwKKyAgICAgICAgb25OZXdV
c2VyOiBFbWJlci5vYnNlcnZlcignc2Vzc2lvbi5jdXJyZW50VXNlcicsIGZ1bmN0aW9uKCkgewor
ICAgICAgICAgIHRoaXMucmVjb21wdXRlKCk7CisgICAgICAgIH0pLAorICAgICAgICBjb21wdXRl
KCkgeworICAgICAgICAgIHJldHVybiB0aGlzLmdldCgnc2Vzc2lvbi5jdXJyZW50VXNlci5lbWFp
bCcpOworICAgICAgICB9CisgICAgICB9KTsKKyAgICAgIGBgYAorICAgICAgIEBtZXRob2QgcmVj
b21wdXRlCisgICAgICBAcHVibGljCisgICAgICBAc2luY2UgMS4xMy4wCisgICAgKi8KKyAgICBy
ZWNvbXB1dGU6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHRoaXMuX3N0cmVhbS5ub3RpZnkoKTsKKyAg
ICB9CisKKyAgICAvKioKKyAgICAgIE92ZXJyaWRlIHRoaXMgZnVuY3Rpb24gd2hlbiB3cml0aW5n
IGEgY2xhc3MtYmFzZWQgaGVscGVyLgorICAgICAgIEBtZXRob2QgY29tcHV0ZQorICAgICAgQHBh
cmFtIHtBcnJheX0gcGFyYW1zIFRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyB0byB0aGUgaGVscGVy
CisgICAgICBAcGFyYW0ge09iamVjdH0gaGFzaCBUaGUgbmFtZWQgYXJndW1lbnRzIHRvIHRoZSBo
ZWxwZXIKKyAgICAgIEBwdWJsaWMKKyAgICAgIEBzaW5jZSAxLjEzLjAKKyAgICAqLworICB9KTsK
KworICBIZWxwZXIucmVvcGVuQ2xhc3MoeworICAgIGlzSGVscGVyRmFjdG9yeTogdHJ1ZQorICB9
KTsKKworICAvKioKKyAgICBJbiBtYW55IGNhc2VzLCB0aGUgY2VyZW1vbnkgb2YgYSBmdWxsIGBF
bWJlci5IZWxwZXJgIGNsYXNzIGlzIG5vdCByZXF1aXJlZC4KKyAgICBUaGUgYGhlbHBlcmAgbWV0
aG9kIGNyZWF0ZSBwdXJlLWZ1bmN0aW9uIGhlbHBlcnMgd2l0aG91dCBpbnN0YW5jZXMuIEZvcgor
ICAgIGV4YW1wbGU6CisgIAorICAgIGBgYGpzCisgICAgLy8gYXBwL2hlbHBlcnMvZm9ybWF0LWN1
cnJlbmN5LmpzCisgICAgZXhwb3J0IGRlZmF1bHQgRW1iZXIuSGVscGVyLmhlbHBlcihmdW5jdGlv
bihwYXJhbXMsIGhhc2gpIHsKKyAgICAgIGxldCBjZW50cyA9IHBhcmFtc1swXTsKKyAgICAgIGxl
dCBjdXJyZW5jeSA9IGhhc2guY3VycmVuY3k7CisgICAgICByZXR1cm4gYCR7Y3VycmVuY3l9JHtj
ZW50cyAqIDAuMDF9YDsKKyAgICB9KTsKKyAgICBgYGAKKyAgCisgICAgQHN0YXRpYworICAgIEBw
YXJhbSB7RnVuY3Rpb259IGhlbHBlciBUaGUgaGVscGVyIGZ1bmN0aW9uCisgICAgQG1ldGhvZCBo
ZWxwZXIKKyAgICBAcHVibGljCisgICAgQHNpbmNlIDEuMTMuMAorICAqLworCisgIGZ1bmN0aW9u
IGhlbHBlcihoZWxwZXJGbikgeworICAgIHJldHVybiB7CisgICAgICBpc0hlbHBlckluc3RhbmNl
OiB0cnVlLAorICAgICAgY29tcHV0ZTogaGVscGVyRm4KKyAgICB9OworICB9CisKKyAgZXhwb3J0
cy5kZWZhdWx0ID0gSGVscGVyOworfSk7CitlbmlmZWQoJ2VtYmVyLWh0bWxiYXJzL2hlbHBlcnMn
LCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvZW1wdHlfb2JqZWN0J10sIGZ1bmN0aW9uIChleHBv
cnRzLCBfZW1iZXJNZXRhbEVtcHR5X29iamVjdCkgeworICAvKioKKyAgQG1vZHVsZSBlbWJlcgor
ICBAc3VibW9kdWxlIGVtYmVyLWh0bWxiYXJzCisgICovCisKKyAgLyoqCisgICBAcHJpdmF0ZQor
ICAgQHByb3BlcnR5IGhlbHBlcnMKKyAgKi8KKyAgJ3VzZSBzdHJpY3QnOworCisgIGV4cG9ydHMu
cmVnaXN0ZXJIZWxwZXIgPSByZWdpc3RlckhlbHBlcjsKKworICB2YXIgaGVscGVycyA9IG5ldyBf
ZW1iZXJNZXRhbEVtcHR5X29iamVjdC5kZWZhdWx0KCk7CisKKyAgLyoqCisgIEBtb2R1bGUgZW1i
ZXIKKyAgQHN1Ym1vZHVsZSBlbWJlci1odG1sYmFycworICAqLworCisgIC8qKgorICAgIEBwcml2
YXRlCisgICAgQG1ldGhvZCBfcmVnaXN0ZXJIZWxwZXIKKyAgICBAZm9yIEVtYmVyLkhUTUxCYXJz
CisgICAgQHBhcmFtIHtTdHJpbmd9IG5hbWUKKyAgICBAcGFyYW0ge09iamVjdHxGdW5jdGlvbn0g
aGVscGVyRnVuYyBUaGUgaGVscGVyIGZ1bmN0aW9uIHRvIGFkZC4KKyAgKi8KKworICBmdW5jdGlv
biByZWdpc3RlckhlbHBlcihuYW1lLCBoZWxwZXJGdW5jKSB7CisgICAgaGVscGVyc1tuYW1lXSA9
IGhlbHBlckZ1bmM7CisgIH0KKworICBleHBvcnRzLmRlZmF1bHQgPSBoZWxwZXJzOworfSk7Citl
bmlmZWQoJ2VtYmVyLWh0bWxiYXJzL2hlbHBlcnMvLWh0bWwtc2FmZScsIFsnZXhwb3J0cycsICdo
dG1sYmFycy11dGlsL3NhZmUtc3RyaW5nJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfaHRtbGJhcnNV
dGlsU2FmZVN0cmluZykgeworICAndXNlIHN0cmljdCc7CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0g
aHRtbFNhZmVIZWxwZXI7CisKKyAgLyoqCisgICBUaGlzIHByaXZhdGUgaGVscGVyIGlzIHVzZWQg
aW50ZXJuYWxseSB0byBoYW5kbGUgYGlzVmlzaWJsZTogZmFsc2VgIGZvcgorICAgRW1iZXIuVmll
dyBhbmQgRW1iZXIuQ29tcG9uZW50LgorICAKKyAgIEBwcml2YXRlCisgICAqLworCisgIGZ1bmN0
aW9uIGh0bWxTYWZlSGVscGVyKF9yZWYpIHsKKyAgICB2YXIgdmFsdWUgPSBfcmVmWzBdOworCisg
ICAgcmV0dXJuIG5ldyBfaHRtbGJhcnNVdGlsU2FmZVN0cmluZy5kZWZhdWx0KHZhbHVlKTsKKyAg
fQorfSk7CitlbmlmZWQoJ2VtYmVyLWh0bWxiYXJzL2hlbHBlcnMvLWpvaW4tY2xhc3NlcycsIFsn
ZXhwb3J0cyddLCBmdW5jdGlvbiAoZXhwb3J0cykgeworICAvKgorICAgIFRoaXMgcHJpdmF0ZSBo
ZWxwZXIgaXMgdXNlZCB0byBqb2luIGFuZCBjb21wYWN0IGEgbGlzdCBvZiBjbGFzcyBuYW1lcy4K
KyAgCisgICAgQHByaXZhdGUKKyAgKi8KKworICAndXNlIHN0cmljdCc7CisKKyAgZXhwb3J0cy5k
ZWZhdWx0ID0gam9pbkNsYXNzZXM7CisKKyAgZnVuY3Rpb24gam9pbkNsYXNzZXMoY2xhc3NOYW1l
cykgeworICAgIHZhciByZXN1bHQgPSBbXTsKKworICAgIGZvciAodmFyIGkgPSAwLCBsID0gY2xh
c3NOYW1lcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKKyAgICAgIHZhciBjbGFzc05hbWUgPSBjbGFz
c05hbWVzW2ldOworCisgICAgICBpZiAoY2xhc3NOYW1lKSB7CisgICAgICAgIHJlc3VsdC5wdXNo
KGNsYXNzTmFtZSk7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdC5qb2luKCcg
Jyk7CisgIH0KK30pOworZW5pZmVkKCdlbWJlci1odG1sYmFycy9oZWxwZXJzLy1ub3JtYWxpemUt
Y2xhc3MnLCBbJ2V4cG9ydHMnLCAnZW1iZXItcnVudGltZS9zeXN0ZW0vc3RyaW5nJywgJ2VtYmVy
LW1ldGFsL3BhdGhfY2FjaGUnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlclJ1bnRpbWVTeXN0
ZW1TdHJpbmcsIF9lbWJlck1ldGFsUGF0aF9jYWNoZSkgeworICAndXNlIHN0cmljdCc7CisKKyAg
ZXhwb3J0cy5kZWZhdWx0ID0gbm9ybWFsaXplQ2xhc3M7CisKKyAgLyoKKyAgICBUaGlzIHByaXZh
dGUgaGVscGVyIGlzIHVzZWQgYnkgQ29tcG9uZW50Tm9kZSB0byBjb252ZXJ0IHRoZSBjbGFzc05h
bWVCaW5kaW5ncworICAgIG1pY3Jvc3ludGF4IGludG8gYSBjbGFzcyBuYW1lLgorICAKKyAgICBX
aGVuIGEgY29tcG9uZW50IG9yIHZpZXcgaXMgY3JlYXRlZCwgd2Ugbm9ybWFsaXplIGNsYXNzIG5h
bWUgYmluZGluZ3MgaW50byBhCisgICAgc2VyaWVzIG9mIGF0dHJpYnV0ZSBub2RlcyB0aGF0IHVz
ZSB0aGlzIGhlbHBlci4KKyAgCisgICAgQHByaXZhdGUKKyAgKi8KKworICBmdW5jdGlvbiBub3Jt
YWxpemVDbGFzcyhwYXJhbXMsIGhhc2gpIHsKKyAgICB2YXIgcHJvcE5hbWUgPSBwYXJhbXNbMF07
CisgICAgdmFyIHZhbHVlID0gcGFyYW1zWzFdOworICAgIHZhciBhY3RpdmVDbGFzcyA9IGhhc2gu
YWN0aXZlQ2xhc3M7CisgICAgdmFyIGluYWN0aXZlQ2xhc3MgPSBoYXNoLmluYWN0aXZlQ2xhc3M7
CisKKyAgICAvLyBXaGVuIHVzaW5nIHRoZSBjb2xvbiBzeW50YXgsIGV2YWx1YXRlIHRoZSB0cnV0
aGluZXNzIG9yIGZhbHNpbmVzcworICAgIC8vIG9mIHRoZSB2YWx1ZSB0byBkZXRlcm1pbmUgd2hp
Y2ggY2xhc3NOYW1lIHRvIHJldHVybi4KKyAgICBpZiAoYWN0aXZlQ2xhc3MgfHwgaW5hY3RpdmVD
bGFzcykgeworICAgICAgaWYgKCEhdmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIGFjdGl2ZUNsYXNz
OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGluYWN0aXZlQ2xhc3M7CisgICAgICB9
CisKKyAgICAgIC8vIElmIHZhbHVlIGlzIGEgQm9vbGVhbiBhbmQgdHJ1ZSwgcmV0dXJuIHRoZSBk
YXNoZXJpemVkIHByb3BlcnR5CisgICAgICAvLyBuYW1lLgorICAgIH0gZWxzZSBpZiAodmFsdWUg
PT09IHRydWUpIHsKKyAgICAgICAgLy8gT25seSBhcHBseSB0byBsYXN0IHNlZ21lbnQgaW4gdGhl
IHBhdGguCisgICAgICAgIGlmIChwcm9wTmFtZSAmJiBfZW1iZXJNZXRhbFBhdGhfY2FjaGUuaXNQ
YXRoKHByb3BOYW1lKSkgeworICAgICAgICAgIHZhciBzZWdtZW50cyA9IHByb3BOYW1lLnNwbGl0
KCcuJyk7CisgICAgICAgICAgcHJvcE5hbWUgPSBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAx
XTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBfZW1iZXJSdW50aW1lU3lzdGVtU3RyaW5n
LmRhc2hlcml6ZShwcm9wTmFtZSk7CisKKyAgICAgICAgLy8gSWYgdGhlIHZhbHVlIGlzIG5vdCBm
YWxzZSwgdW5kZWZpbmVkLCBvciBudWxsLCByZXR1cm4gdGhlIGN1cnJlbnQKKyAgICAgICAgLy8g
dmFsdWUgb2YgdGhlIHByb3BlcnR5LgorICAgICAgfSBlbHNlIGlmICh2YWx1ZSAhPT0gZmFsc2Ug
JiYgdmFsdWUgIT0gbnVsbCkgeworICAgICAgICAgIHJldHVybiB2YWx1ZTsKKworICAgICAgICAg
IC8vIE5vdGhpbmcgdG8gZGlzcGxheS4gUmV0dXJuIG51bGwgc28gdGhhdCB0aGUgb2xkIGNsYXNz
IGlzIHJlbW92ZWQKKyAgICAgICAgICAvLyBidXQgbm8gbmV3IGNsYXNzIGlzIGFkZGVkLgorICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgfQorICB9
Cit9KTsKK2VuaWZlZCgnZW1iZXItaHRtbGJhcnMvaGVscGVycy9jb25jYXQnLCBbJ2V4cG9ydHMn
XSwgZnVuY3Rpb24gKGV4cG9ydHMpIHsKKyAgLyoqCisgIEBtb2R1bGUgZW1iZXIKKyAgQHN1Ym1v
ZHVsZSBlbWJlci10ZW1wbGF0ZXMKKyAgKi8KKworICAvKioKKyAgICBDb25jYXRlbmF0ZXMgaW5w
dXQgcGFyYW1zIHRvZ2V0aGVyLgorICAgIEV4YW1wbGU6CisgICAgYGBgaGFuZGxlYmFycworICAg
IHt7c29tZS1jb21wb25lbnQgbmFtZT0oY29uY2F0IGZpcnN0TmFtZSAiICIgbGFzdE5hbWUpfX0K
KyAgICB7eyEgd291bGQgcGFzcyBuYW1lPSI8Zmlyc3QgbmFtZSB2YWx1ZT4gPGxhc3QgbmFtZSB2
YWx1ZT4iIHRvIHRoZSBjb21wb25lbnR9fQorICAgIGBgYAorICAgIEBwdWJsaWMKKyAgICBAbWV0
aG9kIGNvbmNhdAorICAgIEBmb3IgRW1iZXIuVGVtcGxhdGVzLmhlbHBlcnMKKyAgICBAc2luY2Ug
MS4xMy4wCisgICovCisgICd1c2Ugc3RyaWN0JzsKKworICBleHBvcnRzLmRlZmF1bHQgPSBjb25j
YXQ7CisKKyAgZnVuY3Rpb24gY29uY2F0KHBhcmFtcykgeworICAgIHJldHVybiBwYXJhbXMuam9p
bignJyk7CisgIH0KK30pOworZW5pZmVkKCdlbWJlci1odG1sYmFycy9oZWxwZXJzL2VhY2gtaW4n
LCBbJ2V4cG9ydHMnLCAnZW1iZXItdmlld3Mvc3RyZWFtcy9zaG91bGRfZGlzcGxheSddLCBmdW5j
dGlvbiAoZXhwb3J0cywgX2VtYmVyVmlld3NTdHJlYW1zU2hvdWxkX2Rpc3BsYXkpIHsKKyAgLyoq
CisgIEBtb2R1bGUgZW1iZXIKKyAgQHN1Ym1vZHVsZSBlbWJlci10ZW1wbGF0ZXMKKyAgKi8KKwor
ICAndXNlIHN0cmljdCc7CisKKyAgLyoqCisgICAgVGhlIGB7e2VhY2gtaW59fWAgaGVscGVyIGxv
b3BzIG92ZXIgcHJvcGVydGllcyBvbiBhbiBvYmplY3QuIEl0IGlzIHVuYm91bmQsCisgICAgaW4g
dGhhdCBuZXcgKG9yIHJlbW92ZWQpIHByb3BlcnRpZXMgYWRkZWQgdG8gdGhlIHRhcmdldCBvYmpl
Y3Qgd2lsbCBub3QgYmUKKyAgICByZW5kZXJlZC4KKyAgCisgICAgRm9yIGV4YW1wbGUsIGdpdmVu
IGEgYHVzZXJgIG9iamVjdCB0aGF0IGxvb2tzIGxpa2U6CisgIAorICAgIGBgYGphdmFzY3JpcHQK
KyAgICB7CisgICAgICAibmFtZSI6ICJTaGVsbHkgU2FpbHMiLAorICAgICAgImFnZSI6IDQyCisg
ICAgfQorICAgIGBgYAorICAKKyAgICBUaGlzIHRlbXBsYXRlIHdvdWxkIGRpc3BsYXkgYWxsIHBy
b3BlcnRpZXMgb24gdGhlIGB1c2VyYAorICAgIG9iamVjdCBpbiBhIGxpc3Q6CisgIAorICAgIGBg
YGhhbmRsZWJhcnMKKyAgICA8dWw+CisgICAge3sjZWFjaC1pbiB1c2VyIGFzIHxrZXkgdmFsdWV8
fX0KKyAgICAgIDxsaT57e2tleX19OiB7e3ZhbHVlfX08L2xpPgorICAgIHt7L2VhY2gtaW59fQor
ICAgIDwvdWw+CisgICAgYGBgCisgIAorICAgIE91dHB1dHRpbmcgdGhlaXIgbmFtZSBhbmQgYWdl
LgorICAKKyAgICBAbWV0aG9kIGVhY2gtaW4KKyAgICBAZm9yIEVtYmVyLlRlbXBsYXRlcy5oZWxw
ZXJzCisgICAgQHB1YmxpYworICAgIEBzaW5jZSAyLjEuMAorICAqLworICB2YXIgZWFjaEluSGVs
cGVyID0gZnVuY3Rpb24gKF9yZWYsIGhhc2gsIGJsb2NrcykgeworICAgIHZhciBvYmplY3QgPSBf
cmVmWzBdOworCisgICAgdmFyIG9iaktleXMsIHByb3AsIGk7CisgICAgb2JqS2V5cyA9IG9iamVj
dCA/IE9iamVjdC5rZXlzKG9iamVjdCkgOiBbXTsKKyAgICBpZiAoX2VtYmVyVmlld3NTdHJlYW1z
U2hvdWxkX2Rpc3BsYXkuZGVmYXVsdChvYmpLZXlzKSkgeworICAgICAgZm9yIChpID0gMDsgaSA8
IG9iaktleXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgcHJvcCA9IG9iaktleXNbaV07CisgICAg
ICAgIGJsb2Nrcy50ZW1wbGF0ZS55aWVsZEl0ZW0ocHJvcCwgW3Byb3AsIG9iamVjdFtwcm9wXV0p
OworICAgICAgfQorICAgIH0gZWxzZSBpZiAoYmxvY2tzLmludmVyc2UueWllbGQpIHsKKyAgICAg
IGJsb2Nrcy5pbnZlcnNlLnlpZWxkKCk7CisgICAgfQorICB9OworCisgIGV4cG9ydHMuZGVmYXVs
dCA9IGVhY2hJbkhlbHBlcjsKK30pOworZW5pZmVkKCdlbWJlci1odG1sYmFycy9oZWxwZXJzL2Vh
Y2gnLCBbJ2V4cG9ydHMnLCAnZW1iZXItdmlld3Mvc3RyZWFtcy9zaG91bGRfZGlzcGxheScsICdl
bWJlci1odG1sYmFycy91dGlscy9kZWNvZGUtZWFjaC1rZXknXSwgZnVuY3Rpb24gKGV4cG9ydHMs
IF9lbWJlclZpZXdzU3RyZWFtc1Nob3VsZF9kaXNwbGF5LCBfZW1iZXJIdG1sYmFyc1V0aWxzRGVj
b2RlRWFjaEtleSkgeworICAvKioKKyAgQG1vZHVsZSBlbWJlcgorICBAc3VibW9kdWxlIGVtYmVy
LXRlbXBsYXRlcworICAqLworCisgICd1c2Ugc3RyaWN0JzsKKworICBleHBvcnRzLmRlZmF1bHQg
PSBlYWNoSGVscGVyOworCisgIC8qKgorICAgIFRoZSBge3sjZWFjaH19YCBoZWxwZXIgbG9vcHMg
b3ZlciBlbGVtZW50cyBpbiBhIGNvbGxlY3Rpb24uIEl0IGlzIGFuIGV4dGVuc2lvbgorICAgIG9m
IHRoZSBiYXNlIEhhbmRsZWJhcnMgYHt7I2VhY2h9fWAgaGVscGVyLgorICAKKyAgICBUaGUgZGVm
YXVsdCBiZWhhdmlvciBvZiBge3sjZWFjaH19YCBpcyB0byB5aWVsZCBpdHMgaW5uZXIgYmxvY2sg
b25jZSBmb3IgZXZlcnkKKyAgICBpdGVtIGluIGFuIGFycmF5IHBhc3NpbmcgdGhlIGl0ZW0gYXMg
dGhlIGZpcnN0IGJsb2NrIHBhcmFtZXRlci4KKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIHZh
ciBkZXZlbG9wZXJzID0gW3tuYW1lOiAnWWVodWRhJ30se25hbWU6ICdUb20nfSwge25hbWU6ICdQ
YXVsJ31dOworICAgIGBgYAorICAKKyAgICBgYGBoYW5kbGViYXJzCisgICAge3sjZWFjaCBkZXZl
bG9wZXJzIGtleT0ibmFtZSIgYXMgfHBlcnNvbnx9fQorICAgICAge3twZXJzb24ubmFtZX19Cisg
ICAgICB7eyEgYHRoaXNgIGlzIHdoYXRldmVyIGl0IHdhcyBvdXRzaWRlIHRoZSAjZWFjaCB9fQor
ICAgIHt7L2VhY2h9fQorICAgIGBgYAorICAKKyAgICBUaGUgc2FtZSBydWxlcyBhcHBseSB0byBh
cnJheXMgb2YgcHJpbWl0aXZlcy4KKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIHZhciBkZXZl
bG9wZXJOYW1lcyA9IFsnWWVodWRhJywgJ1RvbScsICdQYXVsJ10KKyAgICBgYGAKKyAgCisgICAg
YGBgaGFuZGxlYmFycworICAgIHt7I2VhY2ggZGV2ZWxvcGVyTmFtZXMga2V5PSJAaW5kZXgiIGFz
IHxuYW1lfH19CisgICAgICB7e25hbWV9fQorICAgIHt7L2VhY2h9fQorICAgIGBgYAorICAKKyAg
ICBEdXJpbmcgaXRlcmF0aW9uLCB0aGUgaW5kZXggb2YgZWFjaCBpdGVtIGluIHRoZSBhcnJheSBp
cyBwcm92aWRlZCBhcyBhIHNlY29uZCBibG9jayBwYXJhbWV0ZXIuCisgIAorICAgIGBgYGhhbmRs
ZWJhcnMKKyAgICA8dWw+CisgICAgICB7eyNlYWNoIHBlb3BsZSBhcyB8cGVyc29uIGluZGV4fH19
CisgICAgICAgIDxsaT5IZWxsbywge3twZXJzb24ubmFtZX19ISBZb3UncmUgbnVtYmVyIHt7aW5k
ZXh9fSBpbiBsaW5lPC9saT4KKyAgICAgIHt7L2VhY2h9fQorICAgIDwvdWw+CisgICAgYGBgCisg
IAorICAgICMjIyBTcGVjaWZ5aW5nIEtleXMKKyAgCisgICAgVGhlIGBrZXlgIG9wdGlvbiBpcyB1
c2VkIHRvIHRlbGwgRW1iZXIgaG93IHRvIGRldGVybWluZSBpZiB0aGUgYXJyYXkgYmVpbmcKKyAg
ICBpdGVyYXRlZCBvdmVyIHdpdGggYHt7I2VhY2h9fWAgaGFzIGNoYW5nZWQgYmV0d2VlbiByZW5k
ZXJzLiBCeSBoZWxwaW5nIEVtYmVyCisgICAgZGV0ZWN0IHRoYXQgc29tZSBlbGVtZW50cyBpbiB0
aGUgYXJyYXkgYXJlIHRoZSBzYW1lLCBET00gZWxlbWVudHMgY2FuIGJlCisgICAgcmUtdXNlZCwg
c2lnbmlmaWNhbnRseSBpbXByb3ZpbmcgcmVuZGVyaW5nIHNwZWVkLgorICAKKyAgICBGb3IgZXhh
bXBsZSwgaGVyZSdzIHRoZSBge3sjZWFjaH19YCBoZWxwZXIgd2l0aCBpdHMgYGtleWAgc2V0IHRv
IGBpZGA6CisgIAorICAgIGBgYGhhbmRsZWJhcnMKKyAgICB7eyNlYWNoIG1vZGVsIGtleT0iaWQi
IGFzIHxpdGVtfH19CisgICAge3svZWFjaH19CisgICAgYGBgCisgIAorICAgIFdoZW4gdGhpcyBg
e3sjZWFjaH19YCByZS1yZW5kZXJzLCBFbWJlciB3aWxsIG1hdGNoIHVwIHRoZSBwcmV2aW91c2x5
IHJlbmRlcmVkCisgICAgaXRlbXMgKGFuZCByZW9yZGVyIHRoZSBnZW5lcmF0ZWQgRE9NIGVsZW1l
bnRzKSBiYXNlZCBvbiBlYWNoIGl0ZW0ncyBgaWRgCisgICAgcHJvcGVydHkuCisgIAorICAgIEJ5
IGRlZmF1bHQgdGhlIGl0ZW0ncyBvd24gcmVmZXJlbmNlIGlzIHVzZWQuCisgIAorICAgICMjIyB7
e2Vsc2V9fSBjb25kaXRpb24KKyAgCisgICAgYHt7I2VhY2h9fWAgY2FuIGhhdmUgYSBtYXRjaGlu
ZyBge3tlbHNlfX1gLiBUaGUgY29udGVudHMgb2YgdGhpcyBibG9jayB3aWxsIHJlbmRlcgorICAg
IGlmIHRoZSBjb2xsZWN0aW9uIGlzIGVtcHR5LgorICAKKyAgICBgYGBoYW5kbGViYXJzCisgICAg
e3sjZWFjaCBkZXZlbG9wZXJzIGFzIHxwZXJzb258fX0KKyAgICAgIHt7cGVyc29uLm5hbWV9fQor
ICAgIHt7ZWxzZX19CisgICAgICA8cD5Tb3JyeSwgbm9ib2R5IGlzIGF2YWlsYWJsZSBmb3IgdGhp
cyB0YXNrLjwvcD4KKyAgICB7ey9lYWNofX0KKyAgICBgYGAKKyAgCisgICAgQG1ldGhvZCBlYWNo
CisgICAgQGZvciBFbWJlci5UZW1wbGF0ZXMuaGVscGVycworICAgIEBwdWJsaWMKKyAgKi8KKwor
ICBmdW5jdGlvbiBlYWNoSGVscGVyKHBhcmFtcywgaGFzaCwgYmxvY2tzKSB7CisgICAgdmFyIGxp
c3QgPSBwYXJhbXNbMF07CisgICAgdmFyIGtleVBhdGggPSBoYXNoLmtleTsKKworICAgIGlmIChf
ZW1iZXJWaWV3c1N0cmVhbXNTaG91bGRfZGlzcGxheS5kZWZhdWx0KGxpc3QpKSB7CisgICAgICBm
b3JFYWNoKGxpc3QsIGZ1bmN0aW9uIChpdGVtLCBpKSB7CisgICAgICAgIHZhciBrZXkgPSBfZW1i
ZXJIdG1sYmFyc1V0aWxzRGVjb2RlRWFjaEtleS5kZWZhdWx0KGl0ZW0sIGtleVBhdGgsIGkpOwor
CisgICAgICAgIGJsb2Nrcy50ZW1wbGF0ZS55aWVsZEl0ZW0oa2V5LCBbaXRlbSwgaV0pOworICAg
ICAgfSk7CisgICAgfSBlbHNlIGlmIChibG9ja3MuaW52ZXJzZS55aWVsZCkgeworICAgICAgYmxv
Y2tzLmludmVyc2UueWllbGQoKTsKKyAgICB9CisgIH0KKworICBmdW5jdGlvbiBmb3JFYWNoKGl0
ZXJhYmxlLCBjYikgeworICAgIHJldHVybiBpdGVyYWJsZS5mb3JFYWNoID8gaXRlcmFibGUuZm9y
RWFjaChjYikgOiBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGl0ZXJhYmxlLCBjYik7Cisg
IH0KK30pOworZW5pZmVkKCJlbWJlci1odG1sYmFycy9oZWxwZXJzL2hhc2giLCBbImV4cG9ydHMi
XSwgZnVuY3Rpb24gKGV4cG9ydHMpIHsKKyAgIC8qKgorICAgQG1vZHVsZSBlbWJlcgorICAgQHN1
Ym1vZHVsZSBlbWJlci10ZW1wbGF0ZXMKKyAgICovCisKKyAgIC8qKgorICAgICAgVXNlIHRoZSBg
e3toYXNofX1gIGhlbHBlciB0byBjcmVhdGUgYSBoYXNoIHRvIHBhc3MgYXMgYW4gb3B0aW9uIHRv
IHlvdXIKKyAgICAgIGNvbXBvbmVudHMuIFRoaXMgaXMgc3BlY2lhbGx5IHVzZWZ1bCBmb3IgY29u
dGV4dHVhbCBjb21wb25lbnRzIHdoZXJlIHlvdSBjYW4KKyAgICAgIGp1c3QgeWllbGQgYSBoYXNo
OgorICAgICAgYGBgaGFuZGxlYmFycworICAgICAge3t5aWVsZCAoaGFzaAorICAgICAgICAgbmFt
ZT0nU2FyYWgnCisgICAgICAgICB0aXRsZT1vZmZpY2UKKyAgICAgICl9fQorICAgICAgYGBgCisg
ICAgICBXb3VsZCByZXN1bHQgaW4gYW4gb2JqZWN0IHN1Y2ggYXM6CisgICAgICBgYGBqcworICAg
ICAgeyBuYW1lOiAnU2FyYWgnLCB0aXRsZTogdGhpcy5nZXQoJ29mZmljZScpIH0KKyAgICAgIGBg
YAorICAgICAgV2hlcmUgdGhlIGB0aXRsZWAgaXMgYm91bmQgdG8gdXBkYXRlcyBvZiB0aGUgYG9m
ZmljZWAgcHJvcGVydHkuCisgICAgICBAbWV0aG9kIGhhc2gKKyAgICAgIEBmb3IgRW1iZXIuVGVt
cGxhdGVzLmhlbHBlcnMKKyAgICAgIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zCisgICAgICBAcmV0
dXJuIHtPYmplY3R9IEhhc2gKKyAgICAgIEBwdWJsaWMKKyAgICAqLworCisgICAidXNlIHN0cmlj
dCI7CisKKyAgIGV4cG9ydHMuZGVmYXVsdCA9IGhhc2hIZWxwZXI7CisKKyAgIGZ1bmN0aW9uIGhh
c2hIZWxwZXIocGFyYW1zLCBoYXNoLCBvcHRpb25zKSB7CisgICAgICByZXR1cm4gaGFzaDsKKyAg
IH0KK30pOworZW5pZmVkKCdlbWJlci1odG1sYmFycy9oZWxwZXJzL2lmX3VubGVzcycsIFsnZXhw
b3J0cycsICdlbWJlci1tZXRhbC9kZWJ1ZycsICdlbWJlci12aWV3cy9zdHJlYW1zL3Nob3VsZF9k
aXNwbGF5J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJWaWV3
c1N0cmVhbXNTaG91bGRfZGlzcGxheSkgeworICAvKioKKyAgQG1vZHVsZSBlbWJlcgorICBAc3Vi
bW9kdWxlIGVtYmVyLXRlbXBsYXRlcworICAqLworCisgICd1c2Ugc3RyaWN0JzsKKworICAvKioK
KyAgICBVc2UgdGhlIGBpZmAgYmxvY2sgaGVscGVyIHRvIGNvbmRpdGlvbmFsbHkgcmVuZGVyIGEg
YmxvY2sgZGVwZW5kaW5nIG9uIGEKKyAgICBwcm9wZXJ0eS4gSWYgdGhlIHByb3BlcnR5IGlzICJm
YWxzZXkiLCBmb3IgZXhhbXBsZTogYGZhbHNlYCwgYHVuZGVmaW5lZGAsCisgICBgbnVsbGAsIGAi
ImAsIGAwYCwgYE5hTmAgb3IgYW4gZW1wdHkgYXJyYXksIHRoZSBibG9jayB3aWxsIG5vdCBiZSBy
ZW5kZXJlZC4KKyAgCisgICBgYGBoYW5kbGViYXJzCisgICAge3shIHdpbGwgbm90IHJlbmRlciBp
ZiBmb28gaXMgZmFsc2V5fX0KKyAgICB7eyNpZiBmb299fQorICAgICAgV2VsY29tZSB0byB0aGUg
e3tmb28uYmFyfX0KKyAgICB7ey9pZn19CisgICAgYGBgCisgIAorICAgIFlvdSBjYW4gYWxzbyBz
cGVjaWZ5IGEgdGVtcGxhdGUgdG8gc2hvdyBpZiB0aGUgcHJvcGVydHkgaXMgZmFsc2V5IGJ5IHVz
aW5nCisgICAgdGhlIGBlbHNlYCBoZWxwZXIuCisgIAorICAgIGBgYGhhbmRsZWJhcnMKKyAgICB7
eyEgaXMgaXQgcmFpbmluZyBvdXRzaWRlP319CisgICAge3sjaWYgaXNSYWluaW5nfX0KKyAgICAg
IFllcywgZ3JhYiBhbiB1bWJyZWxsYSEKKyAgICB7e2Vsc2V9fQorICAgICAgTm8sIGl0J3MgbG92
ZWx5IG91dHNpZGUhCisgICAge3svaWZ9fQorICAgIGBgYAorICAKKyAgICBZb3UgYXJlIGFsc28g
YWJsZSB0byBjb21iaW5lIGBlbHNlYCBhbmQgYGlmYCBoZWxwZXJzIHRvIGNyZWF0ZSBtb3JlIGNv
bXBsZXgKKyAgICBjb25kaXRpb25hbCBsb2dpYy4KKyAgCisgICAgYGBgaGFuZGxlYmFycworICAg
IHt7I2lmIGlzTW9ybmluZ319CisgICAgICBHb29kIG1vcm5pbmcKKyAgICB7e2Vsc2UgaWYgaXNB
ZnRlcm5vb259fQorICAgICAgR29vZCBhZnRlcm5vb24KKyAgICB7e2Vsc2V9fQorICAgICAgR29v
ZCBuaWdodAorICAgIHt7L2lmfX0KKyAgICBgYGAKKyAgCisgICAgWW91IGNhbiB1c2UgYGlmYCBp
bmxpbmUgdG8gY29uZGl0aW9uYWxseSByZW5kZXIgYSBzaW5nbGUgcHJvcGVydHkgb3Igc3RyaW5n
LgorICAgIFRoaXMgaGVscGVyIGFjdHMgbGlrZSBhIHRlcm5hcnkgb3BlcmF0b3IuIElmIHRoZSBm
aXJzdCBwcm9wZXJ0eSBpcyB0cnV0aHksCisgICAgdGhlIHNlY29uZCBhcmd1bWVudCB3aWxsIGJl
IGRpc3BsYXllZCwgaWYgbm90LCB0aGUgdGhpcmQgYXJndW1lbnQgd2lsbCBiZQorICAgIGRpc3Bs
YXllZAorICAKKyAgICBgYGBoYW5kbGViYXJzCisgICAge3tpZiB1c2VMb25nR3JlZXRpbmcgIkhl
bGxvIiAiSGkifX0gRGF2ZQorICAgIGBgYAorICAKKyAgICBGaW5hbGx5LCB5b3UgY2FuIHVzZSB0
aGUgYGlmYCBoZWxwZXIgaW5zaWRlIGFub3RoZXIgaGVscGVyIGFzIGEgc3ViZXhwcmVzc2lvbi4K
KyAgCisgICAgYGBgaGFuZGxlYmFycworICAgIHt7c29tZS1jb21wb25lbnQgaGVpZ2h0PShpZiBp
c0JpZyAiMTAwIiAiMTAiKX19CisgICAgYGBgCisgIAorICAgIEBtZXRob2QgaWYKKyAgICBAZm9y
IEVtYmVyLlRlbXBsYXRlcy5oZWxwZXJzCisgICAgQHB1YmxpYworICAqLworICBmdW5jdGlvbiBp
ZkhlbHBlcihwYXJhbXMsIGhhc2gsIG9wdGlvbnMpIHsKKyAgICByZXR1cm4gaWZVbmxlc3MocGFy
YW1zLCBoYXNoLCBvcHRpb25zLCBfZW1iZXJWaWV3c1N0cmVhbXNTaG91bGRfZGlzcGxheS5kZWZh
dWx0KHBhcmFtc1swXSkpOworICB9CisKKyAgLyoqCisgICAgVGhlIGB1bmxlc3NgIGhlbHBlciBp
cyB0aGUgaW52ZXJzZSBvZiB0aGUgYGlmYCBoZWxwZXIuIEl0cyBibG9jayB3aWxsIGJlCisgICAg
cmVuZGVyZWQgaWYgdGhlIGV4cHJlc3Npb24gY29udGFpbnMgYSBmYWxzZXkgdmFsdWUuICBBbGwg
Zm9ybXMgb2YgdGhlIGBpZmAKKyAgICBoZWxwZXIgY2FuIGFsc28gYmUgdXNlZCB3aXRoIGB1bmxl
c3NgLgorICAKKyAgICBAbWV0aG9kIHVubGVzcworICAgIEBmb3IgRW1iZXIuVGVtcGxhdGVzLmhl
bHBlcnMKKyAgICBAcHVibGljCisgICovCisgIGZ1bmN0aW9uIHVubGVzc0hlbHBlcihwYXJhbXMs
IGhhc2gsIG9wdGlvbnMpIHsKKyAgICByZXR1cm4gaWZVbmxlc3MocGFyYW1zLCBoYXNoLCBvcHRp
b25zLCAhX2VtYmVyVmlld3NTdHJlYW1zU2hvdWxkX2Rpc3BsYXkuZGVmYXVsdChwYXJhbXNbMF0p
KTsKKyAgfQorCisgIGZ1bmN0aW9uIGlmVW5sZXNzKHBhcmFtcywgaGFzaCwgb3B0aW9ucywgdHJ1
dGh5KSB7CisgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1RoZSBibG9jayBmb3JtIG9mIHRo
ZSBgaWZgIGFuZCBgdW5sZXNzYCBoZWxwZXJzIGV4cGVjdCBleGFjdGx5IG9uZSAnICsgJ2FyZ3Vt
ZW50LCBlLmcuIGB7eyNpZiBuZXdNZXNzYWdlc319IFlvdSBoYXZlIG5ldyBtZXNzYWdlcy4ge3sv
aWZ9fS5gJywgIW9wdGlvbnMudGVtcGxhdGUueWllbGQgfHwgcGFyYW1zLmxlbmd0aCA9PT0gMSk7
CisKKyAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnVGhlIGlubGluZSBmb3JtIG9mIHRoZSBg
aWZgIGFuZCBgdW5sZXNzYCBoZWxwZXJzIGV4cGVjdCB0d28gb3IgJyArICd0aHJlZSBhcmd1bWVu
dHMsIGUuZy4gYHt7aWYgdHJpYWxFeHBpcmVkIFwnRXhwaXJlZFwnIGV4cGlyeURhdGV9fWAgJyAr
ICdvciBge3t1bmxlc3MgaXNGaXJzdExvZ2luIFwnV2VsY29tZSBiYWNrIVwnfX1gLicsICEhb3B0
aW9ucy50ZW1wbGF0ZS55aWVsZCB8fCBwYXJhbXMubGVuZ3RoID09PSAyIHx8IHBhcmFtcy5sZW5n
dGggPT09IDMpOworCisgICAgaWYgKHRydXRoeSkgeworICAgICAgaWYgKG9wdGlvbnMudGVtcGxh
dGUueWllbGQpIHsKKyAgICAgICAgb3B0aW9ucy50ZW1wbGF0ZS55aWVsZCgpOworICAgICAgfSBl
bHNlIHsKKyAgICAgICAgcmV0dXJuIHBhcmFtc1sxXTsKKyAgICAgIH0KKyAgICB9IGVsc2Ugewor
ICAgICAgaWYgKG9wdGlvbnMuaW52ZXJzZS55aWVsZCkgeworICAgICAgICBvcHRpb25zLmludmVy
c2UueWllbGQoKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBwYXJhbXNbMl07Cisg
ICAgICB9CisgICAgfQorICB9CisKKyAgZXhwb3J0cy5pZkhlbHBlciA9IGlmSGVscGVyOworICBl
eHBvcnRzLnVubGVzc0hlbHBlciA9IHVubGVzc0hlbHBlcjsKK30pOworZW5pZmVkKCdlbWJlci1o
dG1sYmFycy9oZWxwZXJzL2xvYycsIFsnZXhwb3J0cycsICdlbWJlci1odG1sYmFycy9oZWxwZXIn
LCAnZW1iZXItcnVudGltZS9zeXN0ZW0vc3RyaW5nJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1i
ZXJIdG1sYmFyc0hlbHBlciwgX2VtYmVyUnVudGltZVN5c3RlbVN0cmluZykgeworICAndXNlIHN0
cmljdCc7CisKKyAgLyoqCisgIEBtb2R1bGUgZW1iZXIKKyAgQHN1Ym1vZHVsZSBlbWJlci10ZW1w
bGF0ZXMKKyAgKi8KKworICAvKioKKyAgICBDYWxscyBbRW1iZXIuU3RyaW5nLmxvY10oL2FwaS9j
bGFzc2VzL0VtYmVyLlN0cmluZy5odG1sI21ldGhvZF9sb2MpIHdpdGggdGhlCisgICAgcHJvdmlk
ZWQgc3RyaW5nLiBUaGlzIGlzIGEgY29udmVuaWVudCB3YXkgdG8gbG9jYWxpemUgdGV4dCB3aXRo
aW4gYSB0ZW1wbGF0ZS4KKyAgICBGb3IgZXhhbXBsZToKKyAgCisgICAgYGBgamF2YXNjcmlwdAor
ICAgIEVtYmVyLlNUUklOR1MgPSB7CisgICAgICAnX3dlbGNvbWVfJzogJ0JvbmpvdXInCisgICAg
fTsKKyAgICBgYGAKKyAgCisgICAgYGBgaGFuZGxlYmFycworICAgIDxkaXYgY2xhc3M9J21lc3Nh
Z2UnPgorICAgICAge3tsb2MgJ193ZWxjb21lXyd9fQorICAgIDwvZGl2PgorICAgIGBgYAorICAK
KyAgICBgYGBodG1sCisgICAgPGRpdiBjbGFzcz0nbWVzc2FnZSc+CisgICAgICBCb25qb3VyCisg
ICAgPC9kaXY+CisgICAgYGBgCisgIAorICAgIFNlZSBbRW1iZXIuU3RyaW5nLmxvY10oL2FwaS9j
bGFzc2VzL0VtYmVyLlN0cmluZy5odG1sI21ldGhvZF9sb2MpIGZvciBob3cgdG8KKyAgICBzZXQg
dXAgbG9jYWxpemVkIHN0cmluZyByZWZlcmVuY2VzLgorICAKKyAgICBAbWV0aG9kIGxvYworICAg
IEBmb3IgRW1iZXIuVGVtcGxhdGVzLmhlbHBlcnMKKyAgICBAcGFyYW0ge1N0cmluZ30gc3RyIFRo
ZSBzdHJpbmcgdG8gZm9ybWF0LgorICAgIEBzZWUge0VtYmVyLlN0cmluZyNsb2N9CisgICAgQHB1
YmxpYworICAqLworICBmdW5jdGlvbiBsb2NIZWxwZXIocGFyYW1zKSB7CisgICAgcmV0dXJuIF9l
bWJlclJ1bnRpbWVTeXN0ZW1TdHJpbmcubG9jLmFwcGx5KG51bGwsIHBhcmFtcyk7CisgIH0KKwor
ICBleHBvcnRzLmRlZmF1bHQgPSBfZW1iZXJIdG1sYmFyc0hlbHBlci5oZWxwZXIobG9jSGVscGVy
KTsKK30pOworZW5pZmVkKCdlbWJlci1odG1sYmFycy9oZWxwZXJzL2xvZycsIFsnZXhwb3J0cycs
ICdlbWJlci1tZXRhbC9sb2dnZXInXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsTG9n
Z2VyKSB7CisgIC8qKgorICBAbW9kdWxlIGVtYmVyCisgIEBzdWJtb2R1bGUgZW1iZXItdGVtcGxh
dGVzCisgICovCisKKyAgJ3VzZSBzdHJpY3QnOworCisgIGV4cG9ydHMuZGVmYXVsdCA9IGxvZ0hl
bHBlcjsKKworICAvKioKKyAgICBgbG9nYCBhbGxvd3MgeW91IHRvIG91dHB1dCB0aGUgdmFsdWUg
b2YgdmFyaWFibGVzIGluIHRoZSBjdXJyZW50IHJlbmRlcmluZworICAgIGNvbnRleHQuIGBsb2dg
IGFsc28gYWNjZXB0cyBwcmltaXRpdmUgdHlwZXMgc3VjaCBhcyBzdHJpbmdzIG9yIG51bWJlcnMu
CisgIAorICAgIGBgYGhhbmRsZWJhcnMKKyAgICB7e2xvZyAibXlWYXJpYWJsZToiIG15VmFyaWFi
bGUgfX0KKyAgICBgYGAKKyAgCisgICAgQG1ldGhvZCBsb2cKKyAgICBAZm9yIEVtYmVyLlRlbXBs
YXRlcy5oZWxwZXJzCisgICAgQHBhcmFtIHsqfSB2YWx1ZXMKKyAgICBAcHVibGljCisgICovCisK
KyAgZnVuY3Rpb24gbG9nSGVscGVyKHZhbHVlcykgeworICAgIF9lbWJlck1ldGFsTG9nZ2VyLmRl
ZmF1bHQubG9nLmFwcGx5KG51bGwsIHZhbHVlcyk7CisgIH0KK30pOworZW5pZmVkKCdlbWJlci1o
dG1sYmFycy9oZWxwZXJzL3dpdGgnLCBbJ2V4cG9ydHMnLCAnZW1iZXItdmlld3Mvc3RyZWFtcy9z
aG91bGRfZGlzcGxheSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyVmlld3NTdHJlYW1zU2hv
dWxkX2Rpc3BsYXkpIHsKKyAgLyoqCisgIEBtb2R1bGUgZW1iZXIKKyAgQHN1Ym1vZHVsZSBlbWJl
ci10ZW1wbGF0ZXMKKyAgKi8KKworICAndXNlIHN0cmljdCc7CisKKyAgZXhwb3J0cy5kZWZhdWx0
ID0gd2l0aEhlbHBlcjsKKworICAvKioKKyAgICBVc2UgdGhlIGB7e3dpdGh9fWAgaGVscGVyIHdo
ZW4geW91IHdhbnQgdG8gYWxpYXMgYSBwcm9wZXJ0eSB0byBhIG5ldyBuYW1lLiBUaGlzIGlzIGhl
bHBmdWwKKyAgICBmb3Igc2VtYW50aWMgY2xhcml0eSBhcyBpdCBhbGxvd3MgeW91IHRvIHJldGFp
biBkZWZhdWx0IHNjb3BlIG9yIHRvIHJlZmVyZW5jZSBhIHByb3BlcnR5IGZyb20gYW5vdGhlcgor
ICAgIGB7e3dpdGh9fWAgYmxvY2suCisgIAorICAgIElmIHRoZSBhbGlhc2VkIHByb3BlcnR5IGlz
ICJmYWxzZXkiLCBmb3IgZXhhbXBsZTogYGZhbHNlYCwgYHVuZGVmaW5lZGAgYG51bGxgLCBgIiJg
LCBgMGAsIE5hTiBvcgorICAgIGFuIGVtcHR5IGFycmF5LCB0aGUgYmxvY2sgd2lsbCBub3QgYmUg
cmVuZGVyZWQuCisgIAorICAgIGBgYGhhbmRsZWJhcnMKKyAgICB7eyEgV2lsbCBvbmx5IHJlbmRl
ciBpZiB1c2VyLnBvc3RzIGNvbnRhaW5zIGl0ZW1zfX0KKyAgICB7eyN3aXRoIHVzZXIucG9zdHMg
YXMgfGJsb2dQb3N0c3x9fQorICAgICAgPGRpdiBjbGFzcz0ibm90aWNlIj4KKyAgICAgICAgVGhl
cmUgYXJlIHt7YmxvZ1Bvc3RzLmxlbmd0aH19IGJsb2cgcG9zdHMgd3JpdHRlbiBieSB7e3VzZXIu
bmFtZX19LgorICAgICAgPC9kaXY+CisgICAgICB7eyNlYWNoIGJsb2dQb3N0cyBhcyB8cG9zdHx9
fQorICAgICAgICA8bGk+e3twb3N0LnRpdGxlfX08L2xpPgorICAgICAge3svZWFjaH19CisgICAg
e3svd2l0aH19CisgICAgYGBgCisgIAorICAgIFdpdGhvdXQgdGhlIGBhc2Agb3BlcmF0b3IsIGl0
IHdvdWxkIGJlIGltcG9zc2libGUgdG8gcmVmZXJlbmNlIGB1c2VyLm5hbWVgIGluIHRoZSBleGFt
cGxlIGFib3ZlLgorICAKKyAgICBOT1RFOiBUaGUgYWxpYXMgc2hvdWxkIG5vdCByZXVzZSBhIG5h
bWUgZnJvbSB0aGUgYm91bmQgcHJvcGVydHkgcGF0aC4KKyAgICBGb3IgZXhhbXBsZTogYHt7I3dp
dGggZm9vLmJhciBhcyB8Zm9vfH19YCBpcyBub3Qgc3VwcG9ydGVkIGJlY2F1c2UgaXQgYXR0ZW1w
dHMgdG8gYWxpYXMgdXNpbmcKKyAgICB0aGUgZmlyc3QgcGFydCBvZiB0aGUgcHJvcGVydHkgcGF0
aCwgYGZvb2AuIEluc3RlYWQsIHVzZSBge3sjd2l0aCBmb28uYmFyIGFzIHxiYXp8fX1gLgorICAK
KyAgICBAbWV0aG9kIHdpdGgKKyAgICBAZm9yIEVtYmVyLlRlbXBsYXRlcy5oZWxwZXJzCisgICAg
QHBhcmFtIHtPYmplY3R9IG9wdGlvbnMKKyAgICBAcmV0dXJuIHtTdHJpbmd9IEhUTUwgc3RyaW5n
CisgICAgQHB1YmxpYworICAqLworCisgIGZ1bmN0aW9uIHdpdGhIZWxwZXIocGFyYW1zLCBoYXNo
LCBvcHRpb25zKSB7CisgICAgaWYgKF9lbWJlclZpZXdzU3RyZWFtc1Nob3VsZF9kaXNwbGF5LmRl
ZmF1bHQocGFyYW1zWzBdKSkgeworICAgICAgb3B0aW9ucy50ZW1wbGF0ZS55aWVsZChbcGFyYW1z
WzBdXSk7CisgICAgfSBlbHNlIGlmIChvcHRpb25zLmludmVyc2UgJiYgb3B0aW9ucy5pbnZlcnNl
LnlpZWxkKSB7CisgICAgICBvcHRpb25zLmludmVyc2UueWllbGQoW10pOworICAgIH0KKyAgfQor
fSk7CitlbmlmZWQoJ2VtYmVyLWh0bWxiYXJzL2hvb2tzL2JpbmQtYmxvY2snLCBbJ2V4cG9ydHMn
XSwgZnVuY3Rpb24gKGV4cG9ydHMpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIGV4cG9ydHMuZGVm
YXVsdCA9IGJpbmRCbG9jazsKKworICBmdW5jdGlvbiBiaW5kQmxvY2soZW52LCBzY29wZSwgYmxv
Y2spIHsKKyAgICB2YXIgbmFtZSA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMyB8fCBhcmd1bWVudHNb
M10gPT09IHVuZGVmaW5lZCA/ICdkZWZhdWx0JyA6IGFyZ3VtZW50c1szXTsKKworICAgIHNjb3Bl
LmJpbmRCbG9jayhuYW1lLCBibG9jayk7CisgIH0KK30pOworZW5pZmVkKCdlbWJlci1odG1sYmFy
cy9ob29rcy9iaW5kLWxvY2FsJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL3N0cmVhbXMvc3Ry
ZWFtJywgJ2VtYmVyLW1ldGFsL3N0cmVhbXMvcHJveHktc3RyZWFtJ10sIGZ1bmN0aW9uIChleHBv
cnRzLCBfZW1iZXJNZXRhbFN0cmVhbXNTdHJlYW0sIF9lbWJlck1ldGFsU3RyZWFtc1Byb3h5U3Ry
ZWFtKSB7CisgIC8qKgorICBAbW9kdWxlIGVtYmVyCisgIEBzdWJtb2R1bGUgZW1iZXItaHRtbGJh
cnMKKyAgKi8KKworICAndXNlIHN0cmljdCc7CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gYmluZExv
Y2FsOworCisgIGZ1bmN0aW9uIGJpbmRMb2NhbChlbnYsIHNjb3BlLCBrZXksIHZhbHVlKSB7Cisg
ICAgLy8gVE9ETzogV2hhdCBpcyB0aGUgY2F1c2Ugb2YgdGhlc2UgY2FzZXM/CisgICAgaWYgKHNj
b3BlLmhhc093bkxvY2FsKGtleSkpIHsKKyAgICAgIHZhciBleGlzdGluZyA9IHNjb3BlLmdldExv
Y2FsKGtleSk7CisgICAgICBpZiAoZXhpc3RpbmcgIT09IHZhbHVlKSB7CisgICAgICAgIGV4aXN0
aW5nLnNldFNvdXJjZSh2YWx1ZSk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIHZhciBu
ZXdWYWx1ZSA9IF9lbWJlck1ldGFsU3RyZWFtc1N0cmVhbS53cmFwKHZhbHVlLCBfZW1iZXJNZXRh
bFN0cmVhbXNQcm94eVN0cmVhbS5kZWZhdWx0LCBrZXkpOworICAgICAgc2NvcGUuYmluZExvY2Fs
KGtleSwgbmV3VmFsdWUpOworICAgIH0KKyAgfQorfSk7CitlbmlmZWQoImVtYmVyLWh0bWxiYXJz
L2hvb2tzL2JpbmQtc2NvcGUiLCBbImV4cG9ydHMiXSwgZnVuY3Rpb24gKGV4cG9ydHMpIHsKKyAg
InVzZSBzdHJpY3QiOworCisgIGV4cG9ydHMuZGVmYXVsdCA9IGJpbmRTY29wZTsKKworICBmdW5j
dGlvbiBiaW5kU2NvcGUoZW52LCBzY29wZSkge30KK30pOworZW5pZmVkKCdlbWJlci1odG1sYmFy
cy9ob29rcy9iaW5kLXNlbGYnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwnLCAnZW1iZXItbWV0
YWwvc3RyZWFtcy9wcm94eS1zdHJlYW0nXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFs
LCBfZW1iZXJNZXRhbFN0cmVhbXNQcm94eVN0cmVhbSkgeworICAvKioKKyAgQG1vZHVsZSBlbWJl
cgorICBAc3VibW9kdWxlIGVtYmVyLWh0bWxiYXJzCisgICovCisKKyAgJ3VzZSBzdHJpY3QnOwor
CisgIGV4cG9ydHMuZGVmYXVsdCA9IGJpbmRTZWxmOworCisgIGZ1bmN0aW9uIGJpbmRTZWxmKGVu
diwgc2NvcGUsIHNlbGYpIHsKKyAgICBpZiAoc2VsZiAmJiBzZWxmLmlzVmlldykgeworICAgICAg
aWYgKCEhX2VtYmVyTWV0YWwuZGVmYXVsdC5FTlYuX0VOQUJMRV9MRUdBQ1lfVklFV19TVVBQT1JU
KSB7CisgICAgICAgIHNjb3BlLmJpbmRMb2NhbCgndmlldycsIG5ld1N0cmVhbShzZWxmLCAndmll
dycpKTsKKyAgICAgIH0KKworICAgICAgdmFyIF9zZWxmU3RyZWFtID0gbmV3U3RyZWFtKHNlbGYs
ICcnKTsKKworICAgICAgaWYgKHNlbGYuaXNHbGltbWVyQ29tcG9uZW50KSB7CisgICAgICAgIHNj
b3BlLmJpbmRTZWxmKF9zZWxmU3RyZWFtKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHNjb3Bl
LmJpbmRTZWxmKG5ld1N0cmVhbShfc2VsZlN0cmVhbS5nZXRLZXkoJ2NvbnRleHQnKSwgJycpKTsK
KyAgICAgIH0KKworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZhciBzZWxmU3RyZWFtID0g
bmV3U3RyZWFtKHNlbGYsICcnKTsKKyAgICBzY29wZS5iaW5kU2VsZihzZWxmU3RyZWFtKTsKKyAg
fQorCisgIGZ1bmN0aW9uIG5ld1N0cmVhbShuZXdWYWx1ZSwga2V5KSB7CisgICAgcmV0dXJuIG5l
dyBfZW1iZXJNZXRhbFN0cmVhbXNQcm94eVN0cmVhbS5kZWZhdWx0KG5ld1ZhbHVlLCBrZXkpOwor
ICB9Cit9KTsKK2VuaWZlZCgnZW1iZXItaHRtbGJhcnMvaG9va3MvYmluZC1zaGFkb3ctc2NvcGUn
LCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvc3RyZWFtcy9wcm94eS1zdHJlYW0nXSwgZnVuY3Rp
b24gKGV4cG9ydHMsIF9lbWJlck1ldGFsU3RyZWFtc1Byb3h5U3RyZWFtKSB7CisgIC8qKgorICBA
bW9kdWxlIGVtYmVyCisgIEBzdWJtb2R1bGUgZW1iZXItaHRtbGJhcnMKKyAgKi8KKworICAndXNl
IHN0cmljdCc7CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gYmluZFNoYWRvd1Njb3BlOworCisgIGZ1
bmN0aW9uIGJpbmRTaGFkb3dTY29wZShlbnYsIHBhcmVudFNjb3BlLCBzaGFkb3dTY29wZSwgb3B0
aW9ucykgeworICAgIGlmICghb3B0aW9ucykgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IHZhciB2aWV3ID0gb3B0aW9ucy52aWV3OworICAgIGlmICh2aWV3ICYmICF2aWV3LmlzQ29tcG9u
ZW50KSB7CisgICAgICBzaGFkb3dTY29wZS5iaW5kTG9jYWwoJ3ZpZXcnLCBuZXdTdHJlYW0odmll
dywgJ3ZpZXcnKSk7CisKKyAgICAgIGlmICh2aWV3LmlzVmlldykgeworICAgICAgICBzaGFkb3dT
Y29wZS5iaW5kU2VsZihuZXdTdHJlYW0oc2hhZG93U2NvcGUuZ2V0TG9jYWwoJ3ZpZXcnKS5nZXRL
ZXkoJ2NvbnRleHQnKSwgJycpKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBzaGFkb3dTY29wZS5i
aW5kVmlldyh2aWV3KTsKKworICAgIGlmICh2aWV3ICYmIG9wdGlvbnMuYXR0cnMpIHsKKyAgICAg
IHNoYWRvd1Njb3BlLmJpbmRDb21wb25lbnQodmlldyk7CisgICAgfQorCisgICAgaWYgKCdhdHRy
cycgaW4gb3B0aW9ucykgeworICAgICAgc2hhZG93U2NvcGUuYmluZEF0dHJzKG9wdGlvbnMuYXR0
cnMpOworICAgIH0KKworICAgIHJldHVybiBzaGFkb3dTY29wZTsKKyAgfQorCisgIGZ1bmN0aW9u
IG5ld1N0cmVhbShuZXdWYWx1ZSwga2V5KSB7CisgICAgcmV0dXJuIG5ldyBfZW1iZXJNZXRhbFN0
cmVhbXNQcm94eVN0cmVhbS5kZWZhdWx0KG5ld1ZhbHVlLCBrZXkpOworICB9Cit9KTsKK2VuaWZl
ZCgnZW1iZXItaHRtbGJhcnMvaG9va3MvY2xhc3NpZnknLCBbJ2V4cG9ydHMnLCAnZW1iZXItaHRt
bGJhcnMvdXRpbHMvaXMtY29tcG9uZW50J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJIdG1s
YmFyc1V0aWxzSXNDb21wb25lbnQpIHsKKyAgLyoqCisgIEBtb2R1bGUgZW1iZXIKKyAgQHN1Ym1v
ZHVsZSBlbWJlci1odG1sYmFycworICAqLworCisgICd1c2Ugc3RyaWN0JzsKKworICBleHBvcnRz
LmRlZmF1bHQgPSBjbGFzc2lmeTsKKworICBmdW5jdGlvbiBjbGFzc2lmeShlbnYsIHNjb3BlLCBw
YXRoKSB7CisgICAgaWYgKF9lbWJlckh0bWxiYXJzVXRpbHNJc0NvbXBvbmVudC5kZWZhdWx0KGVu
diwgc2NvcGUsIHBhdGgpKSB7CisgICAgICByZXR1cm4gJ2NvbXBvbmVudCc7CisgICAgfQorCisg
ICAgcmV0dXJuIG51bGw7CisgIH0KK30pOworZW5pZmVkKCJlbWJlci1odG1sYmFycy9ob29rcy9j
bGVhbnVwLXJlbmRlci1ub2RlIiwgWyJleHBvcnRzIl0sIGZ1bmN0aW9uIChleHBvcnRzKSB7Cisg
IC8qKgorICBAbW9kdWxlIGVtYmVyCisgIEBzdWJtb2R1bGUgZW1iZXItaHRtbGJhcnMKKyAgKi8K
KworICAidXNlIHN0cmljdCI7CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gY2xlYW51cFJlbmRlck5v
ZGU7CisKKyAgZnVuY3Rpb24gY2xlYW51cFJlbmRlck5vZGUocmVuZGVyTm9kZSkgeworICAgIGlm
IChyZW5kZXJOb2RlLmNsZWFudXApIHsKKyAgICAgIHJlbmRlck5vZGUuY2xlYW51cCgpOworICAg
IH0KKyAgfQorfSk7CitlbmlmZWQoJ2VtYmVyLWh0bWxiYXJzL2hvb2tzL2NvbXBvbmVudCcsIFsn
ZXhwb3J0cycsICdlbWJlci1tZXRhbC9mZWF0dXJlcycsICdlbWJlci1tZXRhbC9kZWJ1ZycsICdl
bWJlci1odG1sYmFycy9ub2RlLW1hbmFnZXJzL2NvbXBvbmVudC1ub2RlLW1hbmFnZXInLCAnZW1i
ZXItdmlld3Mvc3lzdGVtL2J1aWxkLWNvbXBvbmVudC10ZW1wbGF0ZScsICdlbWJlci1odG1sYmFy
cy91dGlscy9sb29rdXAtY29tcG9uZW50JywgJ2VtYmVyLW1ldGFsL2Fzc2lnbicsICdlbWJlci1t
ZXRhbC9lbXB0eV9vYmplY3QnLCAnZW1iZXItbWV0YWwvY2FjaGUnLCAnZW1iZXItaHRtbGJhcnMv
c3lzdGVtL2xvb2t1cC1oZWxwZXInLCAnZW1iZXItaHRtbGJhcnMvdXRpbHMvZXh0cmFjdC1wb3Np
dGlvbmFsLXBhcmFtcycsICdlbWJlci1odG1sYmFycy9rZXl3b3Jkcy9jbG9zdXJlLWNvbXBvbmVu
dCddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxGZWF0dXJlcywgX2VtYmVyTWV0YWxE
ZWJ1ZywgX2VtYmVySHRtbGJhcnNOb2RlTWFuYWdlcnNDb21wb25lbnROb2RlTWFuYWdlciwgX2Vt
YmVyVmlld3NTeXN0ZW1CdWlsZENvbXBvbmVudFRlbXBsYXRlLCBfZW1iZXJIdG1sYmFyc1V0aWxz
TG9va3VwQ29tcG9uZW50LCBfZW1iZXJNZXRhbEFzc2lnbiwgX2VtYmVyTWV0YWxFbXB0eV9vYmpl
Y3QsIF9lbWJlck1ldGFsQ2FjaGUsIF9lbWJlckh0bWxiYXJzU3lzdGVtTG9va3VwSGVscGVyLCBf
ZW1iZXJIdG1sYmFyc1V0aWxzRXh0cmFjdFBvc2l0aW9uYWxQYXJhbXMsIF9lbWJlckh0bWxiYXJz
S2V5d29yZHNDbG9zdXJlQ29tcG9uZW50KSB7CisgICd1c2Ugc3RyaWN0JzsKKworICBleHBvcnRz
LmRlZmF1bHQgPSBjb21wb25lbnRIb29rOworCisgIHZhciBJU19BTkdMRV9DQUNIRSA9IG5ldyBf
ZW1iZXJNZXRhbENhY2hlLmRlZmF1bHQoMTAwMCwgZnVuY3Rpb24gKGtleSkgeworICAgIHJldHVy
biBrZXkubWF0Y2goL14oQD8pPCguKik+JC8pOworICB9KTsKKworICBmdW5jdGlvbiBjb21wb25l
bnRIb29rKHJlbmRlck5vZGUsIGVudiwgc2NvcGUsIF90YWdOYW1lLCBwYXJhbXMsIGF0dHJzLCB0
ZW1wbGF0ZXMsIHZpc2l0b3IpIHsKKyAgICB2YXIgc3RhdGUgPSByZW5kZXJOb2RlLmdldFN0YXRl
KCk7CisKKyAgICB2YXIgdGFnTmFtZSA9IF90YWdOYW1lOworICAgIGlmIChfZW1iZXJIdG1sYmFy
c1N5c3RlbUxvb2t1cEhlbHBlci5DT05UQUlOU19ET1RfQ0FDSEUuZ2V0KHRhZ05hbWUpKSB7Cisg
ICAgICB2YXIgc3RyZWFtID0gZW52Lmhvb2tzLmdldChlbnYsIHNjb3BlLCB0YWdOYW1lKTsKKyAg
ICAgIHZhciBjb21wb25lbnRDZWxsID0gc3RyZWFtLnZhbHVlKCk7CisgICAgICBpZiAoX2VtYmVy
SHRtbGJhcnNLZXl3b3Jkc0Nsb3N1cmVDb21wb25lbnQuaXNDb21wb25lbnRDZWxsKGNvbXBvbmVu
dENlbGwpKSB7CisgICAgICAgIHRhZ05hbWUgPSBjb21wb25lbnRDZWxsW19lbWJlckh0bWxiYXJz
S2V5d29yZHNDbG9zdXJlQ29tcG9uZW50LkNPTVBPTkVOVF9QQVRIXTsKKworICAgICAgICAvKgor
ICAgICAgICAgKiBQcm9jZXNzaW5nIHBvc2l0aW9uYWwgcGFyYW1zIGJlZm9yZSBtZXJnaW5nIGlu
dG8gYSBoYXNoIG11c3QgYmUgZG9uZQorICAgICAgICAgKiBoZXJlIHRvIGF2b2lkIHByb2JsZW1z
IHdpdGggcmVzdCBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgcmVuZGVyZWQgdXNpbmcKKyAgICAgICAg
ICogdGhlIGRvdCBub3RhdGlvbi4KKyAgICAgICAgICoKKyAgICAgICAgICogQ2xvc3VyZSBjb21w
b25lbnRzIChmb3IgdGhlIGNvbnRleHR1YWwgY29tcG9uZW50IGZlYXR1cmUpIGRvIG5vdAorICAg
ICAgICAgKiBhY3R1YWxseSBrZWVwIHRoZSBwb3NpdGlvbmFsIHBhcmFtcywgYnV0IHByb2Nlc3Mg
dGhlbSBhdCBlYWNoIGxldmVsLgorICAgICAgICAgKiBUaGVyZWZvcmUsIHdoZW4gcmVuZGVyaW5n
IGEgY2xvc3VyZSBjb21wb25lbnQgd2l0aCB0aGUgY29tcG9uZW50CisgICAgICAgICAqIGhlbHBl
ciB3ZSBwcm9jZXNzIHRoZSBwYXJhbWV0ZXJzIGFuZCBhdHRyaWJ1dGVzIGFuZCB0aGVuIG1lcmdl
IHRob3NlCisgICAgICAgICAqIG9uIHRvcCBvZiB0aGUgY2xvc3VyZSBjb21wb25lbnQgYXR0cmli
dXRlcy4KKyAgICAgICAgICoKKyAgICAgICAgICovCisgICAgICAgIHZhciBuZXdBdHRycyA9IF9l
bWJlck1ldGFsQXNzaWduLmRlZmF1bHQobmV3IF9lbWJlck1ldGFsRW1wdHlfb2JqZWN0LmRlZmF1
bHQoKSwgYXR0cnMpOworICAgICAgICBfZW1iZXJIdG1sYmFyc0tleXdvcmRzQ2xvc3VyZUNvbXBv
bmVudC5wcm9jZXNzUG9zaXRpb25hbFBhcmFtc0Zyb21DZWxsKGNvbXBvbmVudENlbGwsIHBhcmFt
cywgbmV3QXR0cnMpOworICAgICAgICBwYXJhbXMgPSBbXTsKKyAgICAgICAgYXR0cnMgPSBfZW1i
ZXJIdG1sYmFyc0tleXdvcmRzQ2xvc3VyZUNvbXBvbmVudC5tZXJnZUluTmV3SGFzaChjb21wb25l
bnRDZWxsW19lbWJlckh0bWxiYXJzS2V5d29yZHNDbG9zdXJlQ29tcG9uZW50LkNPTVBPTkVOVF9I
QVNIXSwgbmV3QXR0cnMpOworICAgICAgfQorICAgIH0KKworICAgIC8vIERldGVybWluZSBpZiB0
aGlzIGlzIGFuIGluaXRpYWwgcmVuZGVyIG9yIGEgcmUtcmVuZGVyLgorICAgIGlmIChzdGF0ZS5t
YW5hZ2VyKSB7CisgICAgICB2YXIgc20gPSBzdGF0ZS5tYW5hZ2VyOworICAgICAgdmFyIHRlbXBs
YXRlTWV0YSA9IG51bGw7CisgICAgICBpZiAoc20uYmxvY2spIHsKKyAgICAgICAgdGVtcGxhdGVN
ZXRhID0gc20uYmxvY2sudGVtcGxhdGUubWV0YTsKKyAgICAgIH0gZWxzZSBpZiAoc20uc2NvcGUg
JiYgc20uc2NvcGUuX3ZpZXcpIHsKKyAgICAgICAgdGVtcGxhdGVNZXRhID0gc20uc2NvcGUuX3Zp
ZXcudGVtcGxhdGUubWV0YTsKKyAgICAgIH0KKyAgICAgIGVudi5tZXRhLm1vZHVsZU5hbWUgPSB0
ZW1wbGF0ZU1ldGEgJiYgdGVtcGxhdGVNZXRhLm1vZHVsZU5hbWUgfHwgZW52Lm1ldGEgJiYgZW52
Lm1ldGEubW9kdWxlTmFtZTsKKyAgICAgIF9lbWJlckh0bWxiYXJzVXRpbHNFeHRyYWN0UG9zaXRp
b25hbFBhcmFtcy5kZWZhdWx0KHJlbmRlck5vZGUsIHNtLmNvbXBvbmVudC5jb25zdHJ1Y3Rvciwg
cGFyYW1zLCBhdHRycywgZmFsc2UpOworICAgICAgc3RhdGUubWFuYWdlci5yZXJlbmRlcihlbnYs
IGF0dHJzLCB2aXNpdG9yKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2YXIgaXNBbmds
ZUJyYWNrZXQgPSBmYWxzZTsKKyAgICB2YXIgaXNUb3BMZXZlbCA9IGZhbHNlOworICAgIHZhciBp
c0Rhc2hlcml6ZWQgPSBmYWxzZTsKKworICAgIHZhciBhbmdsZXMgPSBJU19BTkdMRV9DQUNIRS5n
ZXQodGFnTmFtZSk7CisKKyAgICBpZiAoYW5nbGVzKSB7CisgICAgICB0YWdOYW1lID0gYW5nbGVz
WzJdOworICAgICAgaXNBbmdsZUJyYWNrZXQgPSB0cnVlOworICAgICAgaXNUb3BMZXZlbCA9ICEh
YW5nbGVzWzFdOworICAgIH0KKworICAgIGlmIChfZW1iZXJIdG1sYmFyc1N5c3RlbUxvb2t1cEhl
bHBlci5DT05UQUlOU19EQVNIX0NBQ0hFLmdldCh0YWdOYW1lKSkgeworICAgICAgaXNEYXNoZXJp
emVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICB2YXIgcGFyZW50VmlldyA9IGVudi52aWV3OworCisg
ICAgLy8gfCBUb3AtbGV2ZWwgICAgfCBJbnZvY2F0aW9uOiA8Zm9vLWJhcj4gICAgfCBJbnZvY2F0
aW9uOiB7e2Zvby1iYXJ9fSAgfAorICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyB8IDxkaXY+
ICAgICAgICB8IDxkaXY+IGlzIGNvbXBvbmVudCBlbCAgICB8IG5vIHNwZWNpYWwgc2VtYW50aWNz
IChhKSB8CisgICAgLy8gfCA8Zm9vLWJhcj4gICAgfCA8Zm9vLWJhcj4gaXMgaWRlbnRpdHkgZWwg
fCBFV1RGICAgICAgICAgICAgICAgICAgICAgfAorICAgIC8vIHwgPGJhci1iYXo+ICAgIHwgcmVj
dXJzaXZlIGludm9jYXRpb24gICAgIHwgbm8gc3BlY2lhbCBzZW1hbnRpY3MgICAgIHwKKyAgICAv
LyB8IHt7YW55dGhpbmd9fSB8IEVXVEYgICAgICAgICAgICAgICAgICAgICB8IG5vIHNwZWNpYWwg
c2VtYW50aWNzICAgICB8CisgICAgLy8KKyAgICAvLyAoYSkgbmVlZHMgdG8gYmUgaW1wbGVtZW50
ZWQgc3BlY2lhbGx5LCBiZWNhdXNlIHRoZSB1c3VhbCBzZW1hbnRpY3Mgb2YKKyAgICAvLyAgICAg
PGRpdj4gYXJlIGRlZmluZWQgYnkgdGhlIGNvbXBpbGVkIHRlbXBsYXRlLCBhbmQgd2UgbmVlZCB0
byBlbXVsYXRlCisgICAgLy8gICAgIHRob3NlIHNlbWFudGljcy4KKworICAgIHZhciBjdXJyZW50
Q29tcG9uZW50ID0gZW52LnZpZXc7CisgICAgdmFyIGlzSW52b2tlZFdpdGhBbmdsZXMgPSBjdXJy
ZW50Q29tcG9uZW50ICYmIGN1cnJlbnRDb21wb25lbnQuX2lzQW5nbGVCcmFja2V0OworICAgIHZh
ciBpc0ludm9rZWRXaXRoQ3VybGllcyA9IGN1cnJlbnRDb21wb25lbnQgJiYgIWN1cnJlbnRDb21w
b25lbnQuX2lzQW5nbGVCcmFja2V0OworCisgICAgLy8gPGRpdj4gYXQgdGhlIHRvcCBsZXZlbCBv
ZiBhIDxmb28tYmFyPiBpbnZvY2F0aW9uLgorICAgIHZhciBpc0NvbXBvbmVudEhUTUxFbGVtZW50
ID0gaXNBbmdsZUJyYWNrZXQgJiYgIWlzRGFzaGVyaXplZCAmJiBpc0ludm9rZWRXaXRoQW5nbGVz
OworCisgICAgLy8gPGZvby1iYXI+IGF0IHRoZSB0b3AgbGV2ZWwgb2YgYSA8Zm9vLWJhcj4gaW52
b2NhdGlvbi4KKyAgICB2YXIgaXNDb21wb25lbnRJZGVudGl0eUVsZW1lbnQgPSBpc0FuZ2xlQnJh
Y2tldCAmJiBpc1RvcExldmVsICYmIHRhZ05hbWUgPT09IGVudi52aWV3LnRhZ05hbWU7CisKKyAg
ICAvLyA8ZGl2PiBhdCB0aGUgdG9wIGxldmVsIG9mIGEge3tmb28tYmFyfX0gaW52b2NhdGlvbi4K
KyAgICB2YXIgaXNOb3JtYWxIVE1MRWxlbWVudCA9IGlzQW5nbGVCcmFja2V0ICYmICFpc0Rhc2hl
cml6ZWQgJiYgaXNJbnZva2VkV2l0aEN1cmxpZXM7CisKKyAgICB2YXIgY29tcG9uZW50ID0gdW5k
ZWZpbmVkLAorICAgICAgICBsYXlvdXQgPSB1bmRlZmluZWQ7CisgICAgaWYgKGlzRGFzaGVyaXpl
ZCB8fCAhaXNBbmdsZUJyYWNrZXQpIHsKKyAgICAgIHZhciBvcHRpb25zID0ge307CisKKyAgICAg
IHZhciBtb2R1bGVOYW1lID0gZW52Lm1ldGEgJiYgZW52Lm1ldGEubW9kdWxlTmFtZTsKKworICAg
ICAgaWYgKG1vZHVsZU5hbWUpIHsKKyAgICAgICAgb3B0aW9ucy5zb3VyY2UgPSAndGVtcGxhdGU6
JyArIG1vZHVsZU5hbWU7CisgICAgICB9CisKKyAgICAgIHZhciByZXN1bHQgPSBfZW1iZXJIdG1s
YmFyc1V0aWxzTG9va3VwQ29tcG9uZW50LmRlZmF1bHQoZW52Lm93bmVyLCB0YWdOYW1lLCBvcHRp
b25zKTsKKworICAgICAgY29tcG9uZW50ID0gcmVzdWx0LmNvbXBvbmVudDsKKyAgICAgIGxheW91
dCA9IHJlc3VsdC5sYXlvdXQ7CisKKyAgICAgIGlmIChpc0FuZ2xlQnJhY2tldCAmJiBpc0Rhc2hl
cml6ZWQgJiYgIWNvbXBvbmVudCAmJiAhbGF5b3V0KSB7CisgICAgICAgIGlzQ29tcG9uZW50SFRN
TEVsZW1lbnQgPSB0cnVlOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgX2VtYmVyTWV0YWxEZWJ1
Zy5hc3NlcnQoJ0hUTUxCYXJzIGVycm9yOiBDb3VsZCBub3QgZmluZCBjb21wb25lbnQgbmFtZWQg
IicgKyB0YWdOYW1lICsgJyIgKG5vIGNvbXBvbmVudCBvciB0ZW1wbGF0ZSB3aXRoIHRoYXQgbmFt
ZSB3YXMgZm91bmQpJywgISEoY29tcG9uZW50IHx8IGxheW91dCkpOworICAgICAgfQorICAgIH0K
KworICAgIGlmIChpc0NvbXBvbmVudElkZW50aXR5RWxlbWVudCB8fCBpc0NvbXBvbmVudEhUTUxF
bGVtZW50KSB7CisgICAgICAvLyBJbnNpZGUgdGhlIGxheW91dCBmb3IgPGZvby1iYXI+IGludm9r
ZWQgd2l0aCBhbmdsZXMsIHRoaXMgaXMgdGhlIHRvcC1sZXZlbCBlbGVtZW50CisgICAgICAvLyBm
b3IgdGhlIGNvbXBvbmVudC4gSXQgY2FuIGVpdGhlciBiZSBgPGZvby1iYXI+YCAodGhlICJpZGVu
dGl0eSBlbGVtZW50Iikgb3IgYW55CisgICAgICAvLyBub3JtYWwgSFRNTCBlbGVtZW50IChub24t
ZGFzaGVyaXplZCkuCisgICAgICB2YXIgdGVtcGxhdGVPcHRpb25zID0geworICAgICAgICBjb21w
b25lbnQ6IGN1cnJlbnRDb21wb25lbnQsCisgICAgICAgIHRhZ05hbWU6IHRhZ05hbWUsCisgICAg
ICAgIGlzQW5nbGVCcmFja2V0OiB0cnVlLAorICAgICAgICBpc0NvbXBvbmVudEVsZW1lbnQ6IHRy
dWUsCisgICAgICAgIG91dGVyQXR0cnM6IHNjb3BlLmdldEF0dHJzKCksCisgICAgICAgIHBhcmVu
dFNjb3BlOiBzY29wZQorICAgICAgfTsKKworICAgICAgdmFyIGNvbnRlbnRPcHRpb25zID0geyB0
ZW1wbGF0ZXM6IHRlbXBsYXRlcywgc2NvcGU6IHNjb3BlIH07CisKKyAgICAgIHZhciBfYnVpbGRD
b21wb25lbnRUZW1wbGF0ZSA9IF9lbWJlclZpZXdzU3lzdGVtQnVpbGRDb21wb25lbnRUZW1wbGF0
ZS5kZWZhdWx0KHRlbXBsYXRlT3B0aW9ucywgYXR0cnMsIGNvbnRlbnRPcHRpb25zKTsKKworICAg
ICAgdmFyIGJsb2NrID0gX2J1aWxkQ29tcG9uZW50VGVtcGxhdGUuYmxvY2s7CisKKyAgICAgIGJs
b2NrLmludm9rZShlbnYsIFtdLCB1bmRlZmluZWQsIHJlbmRlck5vZGUsIHNjb3BlLCB2aXNpdG9y
KTsKKyAgICB9IGVsc2UgaWYgKGlzTm9ybWFsSFRNTEVsZW1lbnQpIHsKKyAgICAgIHZhciBibG9j
ayA9IF9lbWJlclZpZXdzU3lzdGVtQnVpbGRDb21wb25lbnRUZW1wbGF0ZS5idWlsZEhUTUxUZW1w
bGF0ZSh0YWdOYW1lLCBhdHRycywgeyB0ZW1wbGF0ZXM6IHRlbXBsYXRlcywgc2NvcGU6IHNjb3Bl
IH0pOworICAgICAgYmxvY2suaW52b2tlKGVudiwgW10sIHVuZGVmaW5lZCwgcmVuZGVyTm9kZSwg
c2NvcGUsIHZpc2l0b3IpOworICAgIH0gZWxzZSB7CisgICAgICAvLyBJbnZva2luZyBhIGNvbXBv
bmVudCBmcm9tIHRoZSBvdXRzaWRlIChlaXRoZXIgdmlhIDxmb28tYmFyPiBhbmdsZSBicmFja2V0
cworICAgICAgLy8gb3Ige3tmb28tYmFyfX0gbGVnYWN5IGN1cmxpZXMpLgorCisgICAgICB2YXIg
bWFuYWdlciA9IF9lbWJlckh0bWxiYXJzTm9kZU1hbmFnZXJzQ29tcG9uZW50Tm9kZU1hbmFnZXIu
ZGVmYXVsdC5jcmVhdGUocmVuZGVyTm9kZSwgZW52LCB7CisgICAgICAgIHRhZ05hbWU6IHRhZ05h
bWUsCisgICAgICAgIHBhcmFtczogcGFyYW1zLAorICAgICAgICBhdHRyczogYXR0cnMsCisgICAg
ICAgIHBhcmVudFZpZXc6IHBhcmVudFZpZXcsCisgICAgICAgIHRlbXBsYXRlczogdGVtcGxhdGVz
LAorICAgICAgICBpc0FuZ2xlQnJhY2tldDogaXNBbmdsZUJyYWNrZXQsCisgICAgICAgIGlzVG9w
TGV2ZWw6IGlzVG9wTGV2ZWwsCisgICAgICAgIGNvbXBvbmVudDogY29tcG9uZW50LAorICAgICAg
ICBsYXlvdXQ6IGxheW91dCwKKyAgICAgICAgcGFyZW50U2NvcGU6IHNjb3BlCisgICAgICB9KTsK
KworICAgICAgc3RhdGUubWFuYWdlciA9IG1hbmFnZXI7CisgICAgICBtYW5hZ2VyLnJlbmRlcihl
bnYsIHZpc2l0b3IpOworICAgIH0KKyAgfQorfSk7CitlbmlmZWQoJ2VtYmVyLWh0bWxiYXJzL2hv
b2tzL2NvbmNhdCcsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9zdHJlYW1zL3V0aWxzJ10sIGZ1
bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbFN0cmVhbXNVdGlscykgeworICAvKioKKyAgQG1v
ZHVsZSBlbWJlcgorICBAc3VibW9kdWxlIGVtYmVyLWh0bWxiYXJzCisgICovCisKKyAgJ3VzZSBz
dHJpY3QnOworCisgIGV4cG9ydHMuZGVmYXVsdCA9IGNvbmNhdDsKKworICBmdW5jdGlvbiBjb25j
YXQoZW52LCBwYXJ0cykgeworICAgIHJldHVybiBfZW1iZXJNZXRhbFN0cmVhbXNVdGlscy5jb25j
YXQocGFydHMsICcnKTsKKyAgfQorfSk7CitlbmlmZWQoJ2VtYmVyLWh0bWxiYXJzL2hvb2tzL2Ny
ZWF0ZS1mcmVzaC1zY29wZScsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9zdHJlYW1zL3Byb3h5
LXN0cmVhbScsICdlbWJlci1tZXRhbC9lbXB0eV9vYmplY3QnXSwgZnVuY3Rpb24gKGV4cG9ydHMs
IF9lbWJlck1ldGFsU3RyZWFtc1Byb3h5U3RyZWFtLCBfZW1iZXJNZXRhbEVtcHR5X29iamVjdCkg
eworICAndXNlIHN0cmljdCc7CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gY3JlYXRlRnJlc2hTY29w
ZTsKKyAgZXhwb3J0cy5jcmVhdGVDaGlsZFNjb3BlID0gY3JlYXRlQ2hpbGRTY29wZTsKKworICAv
KgorICAgIEVtYmVyJ3MgaW1wbGVtZW50YXRpb24gb2YgSFRNTEJhcnMgY3JlYXRlcyBhbiBlbnJp
Y2hlZCBzY29wZS4KKyAgCisgICAgKiBzZWxmOiBzYW1lIGFzIEhUTUxCYXJzLCB0aGlzIGZpZWxk
IHJlcHJlc2VudHMgdGhlIGR5bmFtaWMgbG9va3VwCisgICAgICBvZiByb290IGtleXMgdGhhdCBh
cmUgbm90IHNwZWNpYWwga2V5d29yZHMgb3IgYmxvY2sgYXJndW1lbnRzLgorICAgICogYmxvY2tz
OiBzYW1lIGFzIEhUTUxCYXJzLCBhIGJ1bmRsZSBvZiBuYW1lZCBibG9ja3MgdGhlIGxheW91dAor
ICAgICAgY2FuIHlpZWxkIHRvLgorICAgICogY29tcG9uZW50OiBpbmRpY2F0ZXMgdGhhdCB0aGUg
c2NvcGUgaXMgdGhlIGxheW91dCBvZiBhIGNvbXBvbmVudCwKKyAgICAgIHdoaWNoIGlzIHVzZWQg
dG8gdHJpZ2dlciBsaWZlY3ljbGUgaG9va3MgZm9yIHRoZSBjb21wb25lbnQgd2hlbgorICAgICAg
b25lIG9mIHRoZSBzdHJlYW1zIGluIGl0cyBsYXlvdXQgZmlyZXMuCisgICAgKiBhdHRyczogYSBt
YXAgb2Yga2V5LXZhbHVlIGF0dHJpYnV0ZXMgc2VudCBpbiBieSB0aGUgaW52b2tlciBvZgorICAg
ICAgYSB0ZW1wbGF0ZSwgYW5kIGF2YWlsYWJsZSBpbiB0aGUgY29tcG9uZW50J3MgbGF5b3V0Lgor
ICAgICogbG9jYWxzOiBhIG1hcCBvZiBsb2NhbHMsIHByb2R1Y2VkIGJ5IGJsb2NrIHBhcmFtcyAo
YGFzIHxhIGJ8YCkKKyAgICAqIGxvY2FsUHJlc2VudDogYSBtYXAgb2YgYXZhaWxhYmxlIGxvY2Fs
cyB0byBhdm9pZCBleHBlbnNpdmUKKyAgICAgIGBoYXNPd25Qcm9wZXJ0eWAgY2hlY2tzLgorICAK
KyAgICBUaGUgYHNlbGZgIGZpZWxkIGhhcyB0d28gc3BlY2lhbCBtZWFuaW5nczoKKyAgCisgICAg
KiBJZiBgc2VsZmAgaXMgYSB2aWV3IChgaXNWaWV3YCksIHRoZSBhY3R1YWwgSFRNTEJhcnMgYHNl
bGZgIGJlY29tZXMKKyAgICAgIHRoZSB2aWV3J3MgYGNvbnRleHRgLiBUaGlzIGlzIGxlZ2FjeSBz
ZW1hbnRpY3M7IGNvbXBvbmVudHMgYWx3YXlzCisgICAgICB1c2UgdGhlIGNvbXBvbmVudCBpdHNl
bGYgYXMgdGhlIGB0aGlzYC4KKyAgICAqIElmIGBzZWxmYCBpcyBhIHZpZXcsIHR3byBzcGVjaWFs
IGxvY2FscyBhcmUgY3JlYXRlZDogYHZpZXdgIGFuZAorICAgICAgYGNvbnRyb2xsZXJgLiBUaGVz
ZSBsb2NhbHMgYXJlIGxlZ2FjeSBzZW1hbnRpY3MuCisgIAorICAgICoqSU1QT1JUQU5UKio6IFRo
ZXJlIGFyZSB0d28gcGxhY2VzIGluIEVtYmVyIHdoZXJlIHRoZSBhbWJpZW50CisgICAgY29udHJv
bGxlciBpcyBsb29rZWQgdXAuIEJvdGggb2YgdGhvc2UgcGxhY2VzIHVzZSB0aGUgcHJlc2VuY2UK
KyAgICBvZiBgc2NvcGUubG9jYWxzLnZpZXdgIHRvIGluZGljYXRlIHRoYXQgdGhlIGNvbnRyb2xs
ZXIgbG9va3VwCisgICAgc2hvdWxkIGJlIGR5bmFtaWMgb2ZmIG9mIHRoZSBhbWJpZW50IHZpZXcu
IElmIGBzY29wZS5sb2NhbHMudmlld2AKKyAgICBkb2VzIG5vdCBleGlzdCwgdGhlIGNvZGUgYXNz
dW1lcyB0aGF0IGl0IGlzIGluc2lkZSBvZiBhIHRvcC1sZXZlbAorICAgIHRlbXBsYXRlICh3aXRo
b3V0IGEgdmlldykgYW5kIHVzZXMgdGhlIGBzZWxmYCBpdHNlbGYgYXMgdGhlCisgICAgY29udHJv
bGxlci4gVGhpcyBtZWFucyB0aGF0IGlmIHlvdSByZW1vdmUgYHNjb3BlLmxvY2Fscy52aWV3YAor
ICAgIChwZXJoYXBzIGJlY2F1c2Ugd2UgYXJlIGZpbmFsbHkgcmVhZHkgdG8gc2hlZCB0aGUgdmll
dyBrZXl3b3JkKSwKKyAgICB0aGVyZSBtYXkgYmUgdW5leHBlY3RlZCBjb25zZXF1ZW5jZXMgb24g
Y29udHJvbGxlciBzZW1hbnRpY3MuCisgICAgSWYgdGhpcyBoYXBwZW5zIHRvIHlvdSwgSSBob3Bl
IHlvdSBmaW5kIHRoaXMgY29tbWVudC4gLSBZSyAmIFRECisgIAorICAgIEluIHByYWN0aWNlLCB0
aGlzIG1lYW5zIHRoYXQgd2l0aCB0aGUgZXhjZXB0aW9ucyBvZiB0b3AtbGV2ZWwKKyAgICB2aWV3
LWxlc3MgdGVtcGxhdGVzIGFuZCB0aGUgbGVnYWN5IGBjb250cm9sbGVyPWZvb2Agc2VtYW50aWNz
LAorICAgIHRoZSBjb250cm9sbGVyIGhpZXJhcmNoeSBpcyBtYW5hZ2VkIGR5bmFtaWNhbGx5IGJ5
IGxvb2tpbmcgYXQKKyAgICB0aGUgY3VycmVudCB2aWV3J3MgYGNvbnRyb2xsZXJgLgorICAqLwor
CisgIGZ1bmN0aW9uIFNjb3BlKHBhcmVudCkgeworICAgIHRoaXMuX3NlbGYgPSB1bmRlZmluZWQ7
CisgICAgdGhpcy5fYmxvY2tzID0gdW5kZWZpbmVkOworICAgIHRoaXMuX2NvbXBvbmVudCA9IHVu
ZGVmaW5lZDsKKyAgICB0aGlzLl92aWV3ID0gdW5kZWZpbmVkOworICAgIHRoaXMuX2F0dHJzID0g
dW5kZWZpbmVkOworICAgIHRoaXMuX2xvY2FscyA9IHVuZGVmaW5lZDsKKyAgICB0aGlzLl9sb2Nh
bFByZXNlbnQgPSB1bmRlZmluZWQ7CisgICAgdGhpcy5vdmVycmlkZUNvbnRyb2xsZXIgPSB1bmRl
ZmluZWQ7CisgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7CisgIH0KKworICB2YXIgcHJvdG8gPSBT
Y29wZS5wcm90b3R5cGU7CisKKyAgcHJvdG8uZ2V0U2VsZiA9IGZ1bmN0aW9uICgpIHsKKyAgICBy
ZXR1cm4gdGhpcy5fc2VsZiB8fCB0aGlzLnBhcmVudC5nZXRTZWxmKCk7CisgIH07CisKKyAgcHJv
dG8uYmluZFNlbGYgPSBmdW5jdGlvbiAoc2VsZikgeworICAgIHRoaXMuX3NlbGYgPSBzZWxmOwor
ICB9OworCisgIHByb3RvLnVwZGF0ZVNlbGYgPSBmdW5jdGlvbiAoc2VsZiwga2V5KSB7CisgICAg
dmFyIGV4aXN0aW5nID0gdGhpcy5fc2VsZjsKKworICAgIGlmIChleGlzdGluZykgeworICAgICAg
ZXhpc3Rpbmcuc2V0U291cmNlKHNlbGYpOworICAgIH0gZWxzZSB7CisgICAgICB0aGlzLl9zZWxm
ID0gbmV3IF9lbWJlck1ldGFsU3RyZWFtc1Byb3h5U3RyZWFtLmRlZmF1bHQoc2VsZiwga2V5KTsK
KyAgICB9CisgIH07CisKKyAgcHJvdG8uZ2V0QmxvY2sgPSBmdW5jdGlvbiAobmFtZSkgeworICAg
IGlmICghdGhpcy5fYmxvY2tzKSB7CisgICAgICByZXR1cm4gdGhpcy5wYXJlbnQuZ2V0QmxvY2so
bmFtZSk7CisgICAgfQorICAgIHJldHVybiB0aGlzLl9ibG9ja3NbbmFtZV0gfHwgdGhpcy5wYXJl
bnQuZ2V0QmxvY2sobmFtZSk7CisgIH07CisKKyAgcHJvdG8uaGFzQmxvY2sgPSBmdW5jdGlvbiAo
bmFtZSkgeworICAgIGlmICghdGhpcy5fYmxvY2tzKSB7CisgICAgICByZXR1cm4gdGhpcy5wYXJl
bnQuaGFzQmxvY2sobmFtZSk7CisgICAgfQorICAgIHJldHVybiAhISh0aGlzLl9ibG9ja3NbbmFt
ZV0gfHwgdGhpcy5wYXJlbnQuaGFzQmxvY2sobmFtZSkpOworICB9OworCisgIHByb3RvLmJpbmRC
bG9jayA9IGZ1bmN0aW9uIChuYW1lLCBibG9jaykgeworICAgIGlmICghdGhpcy5fYmxvY2tzKSB7
CisgICAgICB0aGlzLl9ibG9ja3MgPSBuZXcgX2VtYmVyTWV0YWxFbXB0eV9vYmplY3QuZGVmYXVs
dCgpOworICAgIH0KKyAgICB0aGlzLl9ibG9ja3NbbmFtZV0gPSBibG9jazsKKyAgfTsKKworICBw
cm90by5nZXRDb21wb25lbnQgPSBmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuIHRoaXMuX2NvbXBv
bmVudCB8fCB0aGlzLnBhcmVudC5nZXRDb21wb25lbnQoKTsKKyAgfTsKKworICBwcm90by5iaW5k
Q29tcG9uZW50ID0gZnVuY3Rpb24gKGNvbXBvbmVudCkgeworICAgIHRoaXMuX2NvbXBvbmVudCA9
IGNvbXBvbmVudDsKKyAgfTsKKworICBwcm90by5nZXRWaWV3ID0gZnVuY3Rpb24gKCkgeworICAg
IHJldHVybiB0aGlzLl92aWV3IHx8IHRoaXMucGFyZW50LmdldFZpZXcoKTsKKyAgfTsKKworICBw
cm90by5iaW5kVmlldyA9IGZ1bmN0aW9uICh2aWV3KSB7CisgICAgdGhpcy5fdmlldyA9IHZpZXc7
CisgIH07CisKKyAgcHJvdG8uZ2V0QXR0cnMgPSBmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuIHRo
aXMuX2F0dHJzIHx8IHRoaXMucGFyZW50LmdldEF0dHJzKCk7CisgIH07CisKKyAgcHJvdG8uYmlu
ZEF0dHJzID0gZnVuY3Rpb24gKGF0dHJzKSB7CisgICAgdGhpcy5fYXR0cnMgPSBhdHRyczsKKyAg
fTsKKworICBwcm90by5oYXNMb2NhbCA9IGZ1bmN0aW9uIChuYW1lKSB7CisgICAgaWYgKCF0aGlz
Ll9sb2NhbFByZXNlbnQpIHsKKyAgICAgIHJldHVybiB0aGlzLnBhcmVudC5oYXNMb2NhbChuYW1l
KTsKKyAgICB9CisgICAgcmV0dXJuIHRoaXMuX2xvY2FsUHJlc2VudFtuYW1lXSB8fCB0aGlzLnBh
cmVudC5oYXNMb2NhbChuYW1lKTsKKyAgfTsKKworICBwcm90by5oYXNPd25Mb2NhbCA9IGZ1bmN0
aW9uIChuYW1lKSB7CisgICAgcmV0dXJuIHRoaXMuX2xvY2FsUHJlc2VudCAmJiB0aGlzLl9sb2Nh
bFByZXNlbnRbbmFtZV07CisgIH07CisKKyAgcHJvdG8uZ2V0TG9jYWwgPSBmdW5jdGlvbiAobmFt
ZSkgeworICAgIGlmICghdGhpcy5fbG9jYWxQcmVzZW50KSB7CisgICAgICByZXR1cm4gdGhpcy5w
YXJlbnQuZ2V0TG9jYWwobmFtZSk7CisgICAgfQorICAgIHJldHVybiB0aGlzLl9sb2NhbFByZXNl
bnRbbmFtZV0gPyB0aGlzLl9sb2NhbHNbbmFtZV0gOiB0aGlzLnBhcmVudC5nZXRMb2NhbChuYW1l
KTsKKyAgfTsKKworICBwcm90by5iaW5kTG9jYWwgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHsK
KyAgICBpZiAoIXRoaXMuX2xvY2FsUHJlc2VudCkgeworICAgICAgdGhpcy5fbG9jYWxQcmVzZW50
ID0gbmV3IF9lbWJlck1ldGFsRW1wdHlfb2JqZWN0LmRlZmF1bHQoKTsKKyAgICAgIHRoaXMuX2xv
Y2FscyA9IG5ldyBfZW1iZXJNZXRhbEVtcHR5X29iamVjdC5kZWZhdWx0KCk7CisgICAgfQorCisg
ICAgdGhpcy5fbG9jYWxQcmVzZW50W25hbWVdID0gdHJ1ZTsKKyAgICB0aGlzLl9sb2NhbHNbbmFt
ZV0gPSB2YWx1ZTsKKyAgfTsKKworICB2YXIgRU1QVFkgPSB7CisgICAgX3NlbGY6IHVuZGVmaW5l
ZCwKKyAgICBfYmxvY2tzOiB1bmRlZmluZWQsCisgICAgX2NvbXBvbmVudDogdW5kZWZpbmVkLAor
ICAgIF92aWV3OiB1bmRlZmluZWQsCisgICAgX2F0dHJzOiB1bmRlZmluZWQsCisgICAgX2xvY2Fs
czogdW5kZWZpbmVkLAorICAgIF9sb2NhbFByZXNlbnQ6IHVuZGVmaW5lZCwKKyAgICBvdmVycmlk
ZUNvbnRyb2xsZXI6IHVuZGVmaW5lZCwKKworICAgIGdldFNlbGY6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgIHJldHVybiBudWxsOworICAgIH0sCisgICAgYmluZFNlbGY6IGZ1bmN0aW9uIChzZWxmKSB7
CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9LAorICAgIHVwZGF0ZVNlbGY6IGZ1bmN0aW9uIChz
ZWxmLCBrZXkpIHsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0sCisgICAgZ2V0QmxvY2s6IGZ1
bmN0aW9uIChuYW1lKSB7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9LAorICAgIGJpbmRCbG9j
azogZnVuY3Rpb24gKG5hbWUsIGJsb2NrKSB7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9LAor
ICAgIGhhc0Jsb2NrOiBmdW5jdGlvbiAobmFtZSkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0sCisgICAgZ2V0Q29tcG9uZW50OiBmdW5jdGlvbiAoKSB7CisgICAgICByZXR1cm4gbnVsbDsK
KyAgICB9LAorICAgIGJpbmRDb21wb25lbnQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHJldHVybiBu
dWxsOworICAgIH0sCisgICAgZ2V0VmlldzogZnVuY3Rpb24gKCkgeworICAgICAgcmV0dXJuIG51
bGw7CisgICAgfSwKKyAgICBiaW5kVmlldzogZnVuY3Rpb24gKHZpZXcpIHsKKyAgICAgIHJldHVy
biBudWxsOworICAgIH0sCisgICAgZ2V0QXR0cnM6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHJldHVy
biBudWxsOworICAgIH0sCisgICAgYmluZEF0dHJzOiBmdW5jdGlvbiAoYXR0cnMpIHsKKyAgICAg
IHJldHVybiBudWxsOworICAgIH0sCisgICAgaGFzTG9jYWw6IGZ1bmN0aW9uIChuYW1lKSB7Cisg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfSwKKyAgICBoYXNPd25Mb2NhbDogZnVuY3Rpb24gKG5h
bWUpIHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9LAorICAgIGdldExvY2FsOiBmdW5jdGlv
biAobmFtZSkgeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfSwKKyAgICBiaW5kTG9jYWw6IGZ1
bmN0aW9uIChuYW1lLCB2YWx1ZSkgeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICB9Owor
CisgIGZ1bmN0aW9uIGNyZWF0ZUZyZXNoU2NvcGUoKSB7CisgICAgcmV0dXJuIG5ldyBTY29wZShF
TVBUWSk7CisgIH0KKworICBmdW5jdGlvbiBjcmVhdGVDaGlsZFNjb3BlKHBhcmVudCkgeworICAg
IHJldHVybiBuZXcgU2NvcGUocGFyZW50KTsKKyAgfQorfSk7CitlbmlmZWQoImVtYmVyLWh0bWxi
YXJzL2hvb2tzL2Rlc3Ryb3ktcmVuZGVyLW5vZGUiLCBbImV4cG9ydHMiXSwgZnVuY3Rpb24gKGV4
cG9ydHMpIHsKKyAgLyoqCisgIEBtb2R1bGUgZW1iZXIKKyAgQHN1Ym1vZHVsZSBlbWJlci1odG1s
YmFycworICAqLworCisgICJ1c2Ugc3RyaWN0IjsKKworICBleHBvcnRzLmRlZmF1bHQgPSBkZXN0
cm95UmVuZGVyTm9kZTsKKworICBmdW5jdGlvbiBkZXN0cm95UmVuZGVyTm9kZShyZW5kZXJOb2Rl
KSB7CisgICAgaWYgKHJlbmRlck5vZGUuZW1iZXJWaWV3KSB7CisgICAgICByZW5kZXJOb2RlLmVt
YmVyVmlldy5kZXN0cm95KCk7CisgICAgfQorCisgICAgdmFyIHN0cmVhbVVuc3Vic2NyaWJlcnMg
PSByZW5kZXJOb2RlLnN0cmVhbVVuc3Vic2NyaWJlcnM7CisgICAgaWYgKHN0cmVhbVVuc3Vic2Ny
aWJlcnMpIHsKKyAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gc3RyZWFtVW5zdWJzY3JpYmVycy5s
ZW5ndGg7IGkgPCBsOyBpKyspIHsKKyAgICAgICAgc3RyZWFtVW5zdWJzY3JpYmVyc1tpXSgpOwor
ICAgICAgfQorICAgIH0KKyAgfQorfSk7CitlbmlmZWQoImVtYmVyLWh0bWxiYXJzL2hvb2tzL2Rp
ZC1jbGVhbnVwLXRyZWUiLCBbImV4cG9ydHMiXSwgZnVuY3Rpb24gKGV4cG9ydHMpIHsKKyAgInVz
ZSBzdHJpY3QiOworCisgIGV4cG9ydHMuZGVmYXVsdCA9IGRpZENsZWFudXBUcmVlOworCisgIGZ1
bmN0aW9uIGRpZENsZWFudXBUcmVlKGVudikgeworICAgIC8vIE9uY2Ugd2UgaGF2ZSBmaW5zaWhl
ZCBjbGVhbmluZyB1cCB0aGUgcmVuZGVyIG5vZGUgYW5kIHN1Yi1ub2RlcywgcmVzZXQKKyAgICAv
LyBzdGF0ZSB0cmFja2luZyB3aGljaCB2aWV3IHRob3NlIHJlbmRlciBub2RlcyBiZWxvbmdlZCB0
by4KKyAgICBlbnYudmlldy5vd25lclZpZXcuX2Rlc3Ryb3lpbmdTdWJ0cmVlRm9yVmlldyA9IG51
bGw7CisgIH0KK30pOworZW5pZmVkKCJlbWJlci1odG1sYmFycy9ob29rcy9kaWQtcmVuZGVyLW5v
ZGUiLCBbImV4cG9ydHMiXSwgZnVuY3Rpb24gKGV4cG9ydHMpIHsKKyAgInVzZSBzdHJpY3QiOwor
CisgIGV4cG9ydHMuZGVmYXVsdCA9IGRpZFJlbmRlck5vZGU7CisKKyAgZnVuY3Rpb24gZGlkUmVu
ZGVyTm9kZShtb3JwaCwgZW52KSB7CisgICAgZW52LnJlbmRlcmVkTm9kZXMuYWRkKG1vcnBoKTsK
KyAgfQorfSk7CitlbmlmZWQoJ2VtYmVyLWh0bWxiYXJzL2hvb2tzL2VsZW1lbnQnLCBbJ2V4cG9y
dHMnLCAnZW1iZXItaHRtbGJhcnMvc3lzdGVtL2xvb2t1cC1oZWxwZXInLCAnaHRtbGJhcnMtcnVu
dGltZS9ob29rcycsICdlbWJlci1odG1sYmFycy9zeXN0ZW0vaW52b2tlLWhlbHBlciddLCBmdW5j
dGlvbiAoZXhwb3J0cywgX2VtYmVySHRtbGJhcnNTeXN0ZW1Mb29rdXBIZWxwZXIsIF9odG1sYmFy
c1J1bnRpbWVIb29rcywgX2VtYmVySHRtbGJhcnNTeXN0ZW1JbnZva2VIZWxwZXIpIHsKKyAgLyoq
CisgIEBtb2R1bGUgZW1iZXIKKyAgQHN1Ym1vZHVsZSBlbWJlci1odG1sYmFycworICAqLworCisg
ICd1c2Ugc3RyaWN0JzsKKworICBleHBvcnRzLmRlZmF1bHQgPSBlbWJlckVsZW1lbnQ7CisKKyAg
ZnVuY3Rpb24gZW1iZXJFbGVtZW50KG1vcnBoLCBlbnYsIHNjb3BlLCBwYXRoLCBwYXJhbXMsIGhh
c2gsIHZpc2l0b3IpIHsKKyAgICBpZiAoX2h0bWxiYXJzUnVudGltZUhvb2tzLmhhbmRsZVJlZGly
ZWN0KG1vcnBoLCBlbnYsIHNjb3BlLCBwYXRoLCBwYXJhbXMsIGhhc2gsIG51bGwsIG51bGwsIHZp
c2l0b3IpKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgdmFyIHJlc3VsdDsKKyAgICB2
YXIgaGVscGVyID0gX2VtYmVySHRtbGJhcnNTeXN0ZW1Mb29rdXBIZWxwZXIuZmluZEhlbHBlcihw
YXRoLCBzY29wZS5nZXRTZWxmKCksIGVudik7CisgICAgaWYgKGhlbHBlcikgeworICAgICAgdmFy
IGhlbHBlclN0cmVhbSA9IF9lbWJlckh0bWxiYXJzU3lzdGVtSW52b2tlSGVscGVyLmJ1aWxkSGVs
cGVyU3RyZWFtKGhlbHBlciwgcGFyYW1zLCBoYXNoLCB7IGVsZW1lbnQ6IG1vcnBoLmVsZW1lbnQg
fSwgZW52LCBzY29wZSwgcGF0aCk7CisgICAgICByZXN1bHQgPSBoZWxwZXJTdHJlYW0udmFsdWUo
KTsKKyAgICB9IGVsc2UgeworICAgICAgcmVzdWx0ID0gZW52Lmhvb2tzLmdldChlbnYsIHNjb3Bl
LCBwYXRoKTsKKyAgICB9CisKKyAgICBlbnYuaG9va3MuZ2V0VmFsdWUocmVzdWx0KTsKKyAgfQor
fSk7CitlbmlmZWQoImVtYmVyLWh0bWxiYXJzL2hvb2tzL2dldC1ibG9jayIsIFsiZXhwb3J0cyJd
LCBmdW5jdGlvbiAoZXhwb3J0cykgeworICAidXNlIHN0cmljdCI7CisKKyAgZXhwb3J0cy5kZWZh
dWx0ID0gZ2V0QmxvY2s7CisKKyAgZnVuY3Rpb24gZ2V0QmxvY2soc2NvcGUsIGtleSkgeworICAg
IHJldHVybiBzY29wZS5nZXRCbG9jayhrZXkpOworICB9Cit9KTsKK2VuaWZlZCgnZW1iZXItaHRt
bGJhcnMvaG9va3MvZ2V0LWNlbGwtb3ItdmFsdWUnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwv
c3RyZWFtcy91dGlscycsICdlbWJlci1odG1sYmFycy9rZXl3b3Jkcy9tdXQnXSwgZnVuY3Rpb24g
KGV4cG9ydHMsIF9lbWJlck1ldGFsU3RyZWFtc1V0aWxzLCBfZW1iZXJIdG1sYmFyc0tleXdvcmRz
TXV0KSB7CisgICd1c2Ugc3RyaWN0JzsKKworICBleHBvcnRzLmRlZmF1bHQgPSBnZXRDZWxsT3JW
YWx1ZTsKKworICBmdW5jdGlvbiBnZXRDZWxsT3JWYWx1ZShyZWYpIHsKKyAgICBpZiAocmVmICYm
IHJlZltfZW1iZXJIdG1sYmFyc0tleXdvcmRzTXV0Lk1VVEFCTEVfUkVGRVJFTkNFXSkgeworICAg
ICAgLy8gUmVpZnkgdGhlIG11dGFibGUgcmVmZXJlbmNlIGludG8gYSBtdXRhYmxlIGNlbGwuCisg
ICAgICByZXR1cm4gcmVmLmNlbGwoKTsKKyAgICB9CisKKyAgICAvLyBHZXQgdGhlIHZhbHVlIG91
dCBvZiB0aGUgcmVmZXJlbmNlLgorICAgIHJldHVybiBfZW1iZXJNZXRhbFN0cmVhbXNVdGlscy5y
ZWFkKHJlZik7CisgIH0KK30pOworZW5pZmVkKCdlbWJlci1odG1sYmFycy9ob29rcy9nZXQtY2hp
bGQnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvc3RyZWFtcy91dGlscyddLCBmdW5jdGlvbiAo
ZXhwb3J0cywgX2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMpIHsKKyAgLyoqCisgIEBtb2R1bGUgZW1i
ZXIKKyAgQHN1Ym1vZHVsZSBlbWJlci1odG1sYmFycworICAqLworCisgICd1c2Ugc3RyaWN0JzsK
KworICBleHBvcnRzLmRlZmF1bHQgPSBnZXRDaGlsZDsKKworICBmdW5jdGlvbiBnZXRDaGlsZChw
YXJlbnQsIGtleSkgeworICAgIGlmIChfZW1iZXJNZXRhbFN0cmVhbXNVdGlscy5pc1N0cmVhbShw
YXJlbnQpKSB7CisgICAgICByZXR1cm4gcGFyZW50LmdldEtleShrZXkpOworICAgIH0KKworICAg
IC8vIFRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIHdoZW4gd2UgYXJlIGxvb2tpbmcgYXQgYW4gYGF0
dHJzYCBoYXNoLgorICAgIC8vIFRoYXQgbWlnaHQgY2hhbmdlIGlmIGl0IGlzIHBvc3NpYmxlIHRv
IHBhc3Mgb2JqZWN0IGxpdGVyYWxzCisgICAgLy8gdGhyb3VnaCB0aGUgdGVtcGxhdGluZyBzeXN0
ZW0uCisgICAgcmV0dXJuIHBhcmVudFtrZXldOworICB9Cit9KTsKK2VuaWZlZCgnZW1iZXItaHRt
bGJhcnMvaG9va3MvZ2V0LXJvb3QnLCBbJ2V4cG9ydHMnXSwgZnVuY3Rpb24gKGV4cG9ydHMpIHsK
KyAgLyoqCisgIEBtb2R1bGUgZW1iZXIKKyAgQHN1Ym1vZHVsZSBlbWJlci1odG1sYmFycworICAq
LworCisgICd1c2Ugc3RyaWN0JzsKKworICBleHBvcnRzLmRlZmF1bHQgPSBnZXRSb290OworCisg
IGZ1bmN0aW9uIGdldFJvb3Qoc2NvcGUsIGtleSkgeworICAgIGlmIChrZXkgPT09ICd0aGlzJykg
eworICAgICAgcmV0dXJuIFtzY29wZS5nZXRTZWxmKCldOworICAgIH0gZWxzZSBpZiAoa2V5ID09
PSAnaGFzQmxvY2snKSB7CisgICAgICByZXR1cm4gWyEhc2NvcGUuaGFzQmxvY2soJ2RlZmF1bHQn
KV07CisgICAgfSBlbHNlIGlmIChrZXkgPT09ICdoYXNCbG9ja1BhcmFtcycpIHsKKyAgICAgIHZh
ciBibG9jayA9IHNjb3BlLmdldEJsb2NrKCdkZWZhdWx0Jyk7CisgICAgICByZXR1cm4gWyEhYmxv
Y2sgJiYgYmxvY2suYXJpdHldOworICAgIH0gZWxzZSBpZiAoc2NvcGUuaGFzTG9jYWwoa2V5KSkg
eworICAgICAgcmV0dXJuIFtzY29wZS5nZXRMb2NhbChrZXkpXTsKKyAgICB9IGVsc2UgeworICAg
ICAgcmV0dXJuIFtnZXRLZXkoc2NvcGUsIGtleSldOworICAgIH0KKyAgfQorCisgIGZ1bmN0aW9u
IGdldEtleShzY29wZSwga2V5KSB7CisgICAgaWYgKGtleSA9PT0gJ2F0dHJzJykgeworICAgICAg
dmFyIF9hdHRycyA9IHNjb3BlLmdldEF0dHJzKCk7CisgICAgICBpZiAoX2F0dHJzKSB7CisgICAg
ICAgIHJldHVybiBfYXR0cnM7CisgICAgICB9CisgICAgfQorCisgICAgdmFyIHNlbGYgPSBzY29w
ZS5nZXRTZWxmKCkgfHwgc2NvcGUuZ2V0TG9jYWwoJ3ZpZXcnKTsKKworICAgIGlmIChzZWxmKSB7
CisgICAgICByZXR1cm4gc2VsZi5nZXRLZXkoa2V5KTsKKyAgICB9CisKKyAgICB2YXIgYXR0cnMg
PSBzY29wZS5nZXRBdHRycygpOworICAgIGlmIChhdHRycyAmJiBrZXkgaW4gYXR0cnMpIHsKKyAg
ICAgIC8vIFRPRE86IGF0dHJzCisgICAgICAvLyBkZXByZWNhdGUoIllvdSBhY2Nlc3NlZCB0aGUg
YCIgKyBrZXkgKyAiYCBhdHRyaWJ1dGUgZGlyZWN0bHkuIFBsZWFzZSB1c2UgYGF0dHJzLiIgKyBr
ZXkgKyAiYCBpbnN0ZWFkLiIpOworICAgICAgcmV0dXJuIGF0dHJzW2tleV07CisgICAgfQorICB9
Cit9KTsKK2VuaWZlZCgnZW1iZXItaHRtbGJhcnMvaG9va3MvZ2V0LXZhbHVlJywgWydleHBvcnRz
JywgJ2VtYmVyLW1ldGFsL3N0cmVhbXMvdXRpbHMnLCAnZW1iZXItdmlld3MvY29tcGF0L2F0dHJz
LXByb3h5J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbFN0cmVhbXNVdGlscywgX2Vt
YmVyVmlld3NDb21wYXRBdHRyc1Byb3h5KSB7CisgIC8qKgorICBAbW9kdWxlIGVtYmVyCisgIEBz
dWJtb2R1bGUgZW1iZXItaHRtbGJhcnMKKyAgKi8KKworICAndXNlIHN0cmljdCc7CisKKyAgZXhw
b3J0cy5kZWZhdWx0ID0gZ2V0VmFsdWU7CisKKyAgZnVuY3Rpb24gZ2V0VmFsdWUocmVmKSB7Cisg
ICAgdmFyIHZhbHVlID0gX2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMucmVhZChyZWYpOworCisgICAg
aWYgKHZhbHVlICYmIHZhbHVlW19lbWJlclZpZXdzQ29tcGF0QXR0cnNQcm94eS5NVVRBQkxFX0NF
TExdKSB7CisgICAgICByZXR1cm4gdmFsdWUudmFsdWU7CisgICAgfQorCisgICAgcmV0dXJuIHZh
bHVlOworICB9Cit9KTsKK2VuaWZlZCgnZW1iZXItaHRtbGJhcnMvaG9va3MvaGFzLWhlbHBlcics
IFsnZXhwb3J0cycsICdlbWJlci1odG1sYmFycy9zeXN0ZW0vbG9va3VwLWhlbHBlciddLCBmdW5j
dGlvbiAoZXhwb3J0cywgX2VtYmVySHRtbGJhcnNTeXN0ZW1Mb29rdXBIZWxwZXIpIHsKKyAgJ3Vz
ZSBzdHJpY3QnOworCisgIGV4cG9ydHMuZGVmYXVsdCA9IGhhc0hlbHBlckhvb2s7CisKKyAgZnVu
Y3Rpb24gaGFzSGVscGVySG9vayhlbnYsIHNjb3BlLCBoZWxwZXJOYW1lKSB7CisgICAgaWYgKGVu
di5oZWxwZXJzW2hlbHBlck5hbWVdKSB7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICB2YXIgb3duZXIgPSBlbnYub3duZXI7CisgICAgaWYgKF9lbWJlckh0bWxiYXJzU3lzdGVtTG9v
a3VwSGVscGVyLnZhbGlkYXRlTGF6eUhlbHBlck5hbWUoaGVscGVyTmFtZSwgb3duZXIsIGVudi5o
b29rcy5rZXl3b3JkcykpIHsKKyAgICAgIHZhciByZWdpc3RyYXRpb25OYW1lID0gJ2hlbHBlcjon
ICsgaGVscGVyTmFtZTsKKyAgICAgIGlmIChvd25lci5oYXNSZWdpc3RyYXRpb24ocmVnaXN0cmF0
aW9uTmFtZSkpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CisKKyAgICAgIHZhciBv
cHRpb25zID0ge307CisgICAgICB2YXIgbW9kdWxlTmFtZSA9IGVudi5tZXRhICYmIGVudi5tZXRh
Lm1vZHVsZU5hbWU7CisgICAgICBpZiAobW9kdWxlTmFtZSkgeworICAgICAgICBvcHRpb25zLnNv
dXJjZSA9ICd0ZW1wbGF0ZTonICsgbW9kdWxlTmFtZTsKKyAgICAgIH0KKworICAgICAgaWYgKG93
bmVyLmhhc1JlZ2lzdHJhdGlvbihyZWdpc3RyYXRpb25OYW1lLCBvcHRpb25zKSkgeworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7CisgIH0K
K30pOworZW5pZmVkKCdlbWJlci1odG1sYmFycy9ob29rcy9pbnZva2UtaGVscGVyJywgWydleHBv
cnRzJywgJ2VtYmVyLWh0bWxiYXJzL3N5c3RlbS9pbnZva2UtaGVscGVyJywgJ2VtYmVyLWh0bWxi
YXJzL3V0aWxzL3N1YnNjcmliZSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVySHRtbGJhcnNT
eXN0ZW1JbnZva2VIZWxwZXIsIF9lbWJlckh0bWxiYXJzVXRpbHNTdWJzY3JpYmUpIHsKKyAgJ3Vz
ZSBzdHJpY3QnOworCisgIGV4cG9ydHMuZGVmYXVsdCA9IGludm9rZUhlbHBlcjsKKworICBmdW5j
dGlvbiBpbnZva2VIZWxwZXIobW9ycGgsIGVudiwgc2NvcGUsIHZpc2l0b3IsIHBhcmFtcywgaGFz
aCwgaGVscGVyLCB0ZW1wbGF0ZXMsIGNvbnRleHQpIHsKKyAgICB2YXIgaGVscGVyU3RyZWFtID0g
X2VtYmVySHRtbGJhcnNTeXN0ZW1JbnZva2VIZWxwZXIuYnVpbGRIZWxwZXJTdHJlYW0oaGVscGVy
LCBwYXJhbXMsIGhhc2gsIHRlbXBsYXRlcywgZW52LCBzY29wZSk7CisKKyAgICAvLyBFbWJlci5I
ZWxwZXIgaGVscGVycyBhcmUgcHVyZSB2YWx1ZXMsIHRodXMgbGlua2FibGUuCisgICAgaWYgKGhl
bHBlclN0cmVhbS5saW5rYWJsZSkgeworICAgICAgaWYgKG1vcnBoKSB7CisgICAgICAgIC8vIFdo
ZW4gcHJvY2Vzc2luZyBhbiBpbmxpbmUgZXhwcmVzc2lvbiwgdGhlIHBhcmFtcyBhbmQgaGFzaCBo
YXZlIGFscmVhZHkKKyAgICAgICAgLy8gYmVlbiBsaW5rZWQuIFRodXMsIEhUTUxCYXJzIHdpbGwg
bm90IGxpbmsgdGhlIHJldHVybmVkIGhlbHBlclN0cmVhbS4KKyAgICAgICAgLy8gV2Ugc3Vic2Ny
aWJlIHRoZSBtb3JwaCB0byB0aGUgaGVscGVyU3RyZWFtIGhlcmUsIGFuZCBhbHNvIHN1YnNjcmli
ZQorICAgICAgICAvLyB0aGUgaGVscGVyU3RyZWFtIHRvIGFueSBwYXJhbXMuCisgICAgICAgIHZh
ciBhZGRlZERlcGVuZGVuY3kgPSBmYWxzZTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBw
YXJhbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CisgICAgICAgICAgYWRkZWREZXBlbmRlbmN5ID0g
dHJ1ZTsKKyAgICAgICAgICBoZWxwZXJTdHJlYW0uYWRkRGVwZW5kZW5jeShwYXJhbXNbaV0pOwor
ICAgICAgICB9CisgICAgICAgIGZvciAodmFyIGtleSBpbiBoYXNoKSB7CisgICAgICAgICAgYWRk
ZWREZXBlbmRlbmN5ID0gdHJ1ZTsKKyAgICAgICAgICBoZWxwZXJTdHJlYW0uYWRkRGVwZW5kZW5j
eShoYXNoW2tleV0pOworICAgICAgICB9CisgICAgICAgIGlmIChhZGRlZERlcGVuZGVuY3kpIHsK
KyAgICAgICAgICBfZW1iZXJIdG1sYmFyc1V0aWxzU3Vic2NyaWJlLmRlZmF1bHQobW9ycGgsIGVu
diwgc2NvcGUsIGhlbHBlclN0cmVhbSk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgcmV0
dXJuIHsgbGluazogdHJ1ZSwgdmFsdWU6IGhlbHBlclN0cmVhbSB9OworICAgIH0KKworICAgIC8v
IEJ1aWx0LWluIGhlbHBlcnMgYXJlIG5vdCBsaW5rYWJsZS4gVGhleSBtdXN0IHJ1biBvbiBldmVy
eSByZXJlbmRlci4KKyAgICByZXR1cm4geyB2YWx1ZTogaGVscGVyU3RyZWFtLnZhbHVlKCkgfTsK
KyAgfQorfSk7CitlbmlmZWQoJ2VtYmVyLWh0bWxiYXJzL2hvb2tzL2xpbmstcmVuZGVyLW5vZGUn
LCBbJ2V4cG9ydHMnLCAnZW1iZXItaHRtbGJhcnMvdXRpbHMvc3Vic2NyaWJlJywgJ2VtYmVyLXJ1
bnRpbWUvdXRpbHMnLCAnZW1iZXItbWV0YWwvc3RyZWFtcy91dGlscycsICdlbWJlci1odG1sYmFy
cy9zeXN0ZW0vbG9va3VwLWhlbHBlcicsICdlbWJlci1odG1sYmFycy9rZXl3b3Jkcy9jbG9zdXJl
LWNvbXBvbmVudCddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVySHRtbGJhcnNVdGlsc1N1YnNj
cmliZSwgX2VtYmVyUnVudGltZVV0aWxzLCBfZW1iZXJNZXRhbFN0cmVhbXNVdGlscywgX2VtYmVy
SHRtbGJhcnNTeXN0ZW1Mb29rdXBIZWxwZXIsIF9lbWJlckh0bWxiYXJzS2V5d29yZHNDbG9zdXJl
Q29tcG9uZW50KSB7CisgIC8qKgorICBAbW9kdWxlIGVtYmVyCisgIEBzdWJtb2R1bGUgZW1iZXIt
aHRtbGJhcnMKKyAgKi8KKworICAndXNlIHN0cmljdCc7CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0g
bGlua1JlbmRlck5vZGU7CisgIGV4cG9ydHMubGlua1BhcmFtc0ZvciA9IGxpbmtQYXJhbXNGb3I7
CisKKyAgZnVuY3Rpb24gbGlua1JlbmRlck5vZGUocmVuZGVyTm9kZSwgZW52LCBzY29wZSwgcGF0
aCwgcGFyYW1zLCBoYXNoKSB7CisgICAgaWYgKHJlbmRlck5vZGUuc3RyZWFtVW5zdWJzY3JpYmVy
cykgeworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdmFyIGtleXdvcmQgPSBlbnYu
aG9va3Mua2V5d29yZHNbcGF0aF07CisgICAgaWYgKGtleXdvcmQgJiYga2V5d29yZC5saW5rKSB7
CisgICAgICBrZXl3b3JkLmxpbmsocmVuZGVyTm9kZS5nZXRTdGF0ZSgpLCBwYXJhbXMsIGhhc2gp
OworICAgIH0gZWxzZSBpZiAocGF0aCA9PT0gJ3VuYm91bmQnKSB7CisgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9IGVsc2UgeworICAgICAgbGlua1BhcmFtc0ZvcihwYXRoLCBwYXJhbXMpOworICAg
IH0KKworICAgIC8vIElmIHRoZXJlIGlzIGEgZG90IGluIHRoZSBwYXRoLCB3ZSBuZWVkIHRvIHN1
YnNjcmliZSB0byB0aGUgYXJndW1lbnRzIGluIHRoZQorICAgIC8vIGNsb3N1cmUgY29tcG9uZW50
IGFzIHdlbGwuCisKKyAgICBpZiAoX2VtYmVySHRtbGJhcnNTeXN0ZW1Mb29rdXBIZWxwZXIuQ09O
VEFJTlNfRE9UX0NBQ0hFLmdldChwYXRoKSkgeworICAgICAgdmFyIHN0cmVhbSA9IGVudi5ob29r
cy5nZXQoZW52LCBzY29wZSwgcGF0aCk7CisgICAgICB2YXIgY29tcG9uZW50Q2VsbCA9IHN0cmVh
bS52YWx1ZSgpOworCisgICAgICBpZiAoX2VtYmVySHRtbGJhcnNLZXl3b3Jkc0Nsb3N1cmVDb21w
b25lbnQuaXNDb21wb25lbnRDZWxsKGNvbXBvbmVudENlbGwpKSB7CisgICAgICAgIHZhciBjbG9z
dXJlQXR0cnMgPSBfZW1iZXJIdG1sYmFyc0tleXdvcmRzQ2xvc3VyZUNvbXBvbmVudC5tZXJnZUlu
TmV3SGFzaChjb21wb25lbnRDZWxsW19lbWJlckh0bWxiYXJzS2V5d29yZHNDbG9zdXJlQ29tcG9u
ZW50LkNPTVBPTkVOVF9IQVNIXSwgaGFzaCk7CisKKyAgICAgICAgZm9yICh2YXIga2V5IGluIGNs
b3N1cmVBdHRycykgeworICAgICAgICAgIF9lbWJlckh0bWxiYXJzVXRpbHNTdWJzY3JpYmUuZGVm
YXVsdChyZW5kZXJOb2RlLCBlbnYsIHNjb3BlLCBjbG9zdXJlQXR0cnNba2V5XSk7CisgICAgICAg
IH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAocGFyYW1zICYmIHBhcmFtcy5sZW5ndGgpIHsK
KyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7CisgICAgICAg
IF9lbWJlckh0bWxiYXJzVXRpbHNTdWJzY3JpYmUuZGVmYXVsdChyZW5kZXJOb2RlLCBlbnYsIHNj
b3BlLCBwYXJhbXNbaV0pOworICAgICAgfQorICAgIH0KKworICAgIGlmIChoYXNoKSB7CisgICAg
ICBmb3IgKHZhciBrZXkgaW4gaGFzaCkgeworICAgICAgICBfZW1iZXJIdG1sYmFyc1V0aWxzU3Vi
c2NyaWJlLmRlZmF1bHQocmVuZGVyTm9kZSwgZW52LCBzY29wZSwgaGFzaFtrZXldKTsKKyAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBUaGUgcGFyYW1zIGFuZCBoYXNoIGNhbiBiZSByZXVzZWQuIFRo
ZXkgZG9uJ3QgbmVlZCB0byBiZQorICAgIC8vIHJlY29tcHV0ZWQgb24gc3Vic2VxdWVudCByZS1y
ZW5kZXJzIGJlY2F1c2UgdGhleSBhcmUKKyAgICAvLyBzdHJlYW1zLgorICAgIHJldHVybiB0cnVl
OworICB9CisKKyAgZnVuY3Rpb24gbGlua1BhcmFtc0ZvcihwYXRoLCBwYXJhbXMpIHsKKyAgICBz
d2l0Y2ggKHBhdGgpIHsKKyAgICAgIGNhc2UgJ3VubGVzcyc6CisgICAgICBjYXNlICdpZic6Cisg
ICAgICAgIHBhcmFtc1swXSA9IHNob3VsZERpc3BsYXkocGFyYW1zWzBdLCB0b0Jvb2wpO2JyZWFr
OworICAgICAgY2FzZSAnZWFjaCc6CisgICAgICAgIHBhcmFtc1swXSA9IGVhY2hQYXJhbShwYXJh
bXNbMF0pO2JyZWFrOworICAgICAgY2FzZSAnd2l0aCc6CisgICAgICAgIHBhcmFtc1swXSA9IHNo
b3VsZERpc3BsYXkocGFyYW1zWzBdLCBpZGVudGl0eSk7YnJlYWs7CisgICAgfQorICB9CisKKyAg
ZnVuY3Rpb24gZWFjaFBhcmFtKGxpc3QpIHsKKyAgICB2YXIgbGlzdENoYW5nZSA9IGdldEtleShs
aXN0LCAnW10nKTsKKworICAgIHZhciBzdHJlYW0gPSBfZW1iZXJNZXRhbFN0cmVhbXNVdGlscy5j
aGFpbihsaXN0LCBmdW5jdGlvbiAoKSB7CisgICAgICBfZW1iZXJNZXRhbFN0cmVhbXNVdGlscy5y
ZWFkKGxpc3RDaGFuZ2UpOworICAgICAgcmV0dXJuIF9lbWJlck1ldGFsU3RyZWFtc1V0aWxzLnJl
YWQobGlzdCk7CisgICAgfSwgJ2VhY2gnKTsKKworICAgIHN0cmVhbS5hZGREZXBlbmRlbmN5KGxp
c3RDaGFuZ2UpOworICAgIHJldHVybiBzdHJlYW07CisgIH0KKworICBmdW5jdGlvbiBzaG91bGRE
aXNwbGF5KHByZWRpY2F0ZSwgY29lcmNlcikgeworICAgIHZhciBsZW5ndGggPSBnZXRLZXkocHJl
ZGljYXRlLCAnbGVuZ3RoJyk7CisgICAgdmFyIGlzVHJ1dGh5ID0gZ2V0S2V5KHByZWRpY2F0ZSwg
J2lzVHJ1dGh5Jyk7CisKKyAgICB2YXIgc3RyZWFtID0gX2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMu
Y2hhaW4ocHJlZGljYXRlLCBmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgcHJlZGljYXRlVmFsID0g
X2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMucmVhZChwcmVkaWNhdGUpOworICAgICAgdmFyIGxlbmd0
aFZhbCA9IF9lbWJlck1ldGFsU3RyZWFtc1V0aWxzLnJlYWQobGVuZ3RoKTsKKyAgICAgIHZhciBp
c1RydXRoeVZhbCA9IF9lbWJlck1ldGFsU3RyZWFtc1V0aWxzLnJlYWQoaXNUcnV0aHkpOworCisg
ICAgICBpZiAoX2VtYmVyUnVudGltZVV0aWxzLmlzQXJyYXkocHJlZGljYXRlVmFsKSkgeworICAg
ICAgICByZXR1cm4gbGVuZ3RoVmFsID4gMCA/IGNvZXJjZXIocHJlZGljYXRlVmFsKSA6IGZhbHNl
OworICAgICAgfQorCisgICAgICBpZiAodHlwZW9mIGlzVHJ1dGh5VmFsID09PSAnYm9vbGVhbicp
IHsKKyAgICAgICAgcmV0dXJuIGlzVHJ1dGh5VmFsID8gY29lcmNlcihwcmVkaWNhdGVWYWwpIDog
ZmFsc2U7CisgICAgICB9CisKKyAgICAgIHJldHVybiBjb2VyY2VyKHByZWRpY2F0ZVZhbCk7Cisg
ICAgfSwgJ1Nob3VsZERpc3BsYXknKTsKKworICAgIF9lbWJlck1ldGFsU3RyZWFtc1V0aWxzLmFk
ZERlcGVuZGVuY3koc3RyZWFtLCBsZW5ndGgpOworICAgIF9lbWJlck1ldGFsU3RyZWFtc1V0aWxz
LmFkZERlcGVuZGVuY3koc3RyZWFtLCBpc1RydXRoeSk7CisKKyAgICByZXR1cm4gc3RyZWFtOwor
ICB9CisKKyAgZnVuY3Rpb24gdG9Cb29sKHZhbHVlKSB7CisgICAgcmV0dXJuICEhdmFsdWU7Cisg
IH0KKworICBmdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkgeworICAgIHJldHVybiB2YWx1ZTsKKyAg
fQorCisgIGZ1bmN0aW9uIGdldEtleShvYmosIGtleSkgeworICAgIGlmIChfZW1iZXJNZXRhbFN0
cmVhbXNVdGlscy5pc1N0cmVhbShvYmopKSB7CisgICAgICByZXR1cm4gb2JqLmdldEtleShrZXkp
OworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gb2JqICYmIG9ialtrZXldOworICAgIH0KKyAg
fQorfSk7CitlbmlmZWQoJ2VtYmVyLWh0bWxiYXJzL2hvb2tzL2xvb2t1cC1oZWxwZXInLCBbJ2V4
cG9ydHMnLCAnZW1iZXItaHRtbGJhcnMvc3lzdGVtL2xvb2t1cC1oZWxwZXInXSwgZnVuY3Rpb24g
KGV4cG9ydHMsIF9lbWJlckh0bWxiYXJzU3lzdGVtTG9va3VwSGVscGVyKSB7CisgICd1c2Ugc3Ry
aWN0JzsKKworICBleHBvcnRzLmRlZmF1bHQgPSBsb29rdXBIZWxwZXJIb29rOworCisgIGZ1bmN0
aW9uIGxvb2t1cEhlbHBlckhvb2soZW52LCBzY29wZSwgaGVscGVyTmFtZSkgeworICAgIHJldHVy
biBfZW1iZXJIdG1sYmFyc1N5c3RlbUxvb2t1cEhlbHBlci5kZWZhdWx0KGhlbHBlck5hbWUsIHNj
b3BlLmdldFNlbGYoKSwgZW52KTsKKyAgfQorfSk7CitlbmlmZWQoJ2VtYmVyLWh0bWxiYXJzL2hv
b2tzL3N1YmV4cHInLCBbJ2V4cG9ydHMnLCAnZW1iZXItaHRtbGJhcnMvc3lzdGVtL2xvb2t1cC1o
ZWxwZXInLCAnZW1iZXItaHRtbGJhcnMvc3lzdGVtL2ludm9rZS1oZWxwZXInLCAnZW1iZXItbWV0
YWwvc3RyZWFtcy91dGlscycsICdlbWJlci1odG1sYmFycy9ob29rcy9saW5rLXJlbmRlci1ub2Rl
J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJIdG1sYmFyc1N5c3RlbUxvb2t1cEhlbHBlciwg
X2VtYmVySHRtbGJhcnNTeXN0ZW1JbnZva2VIZWxwZXIsIF9lbWJlck1ldGFsU3RyZWFtc1V0aWxz
LCBfZW1iZXJIdG1sYmFyc0hvb2tzTGlua1JlbmRlck5vZGUpIHsKKyAgLyoqCisgIEBtb2R1bGUg
ZW1iZXIKKyAgQHN1Ym1vZHVsZSBlbWJlci1odG1sYmFycworICAqLworCisgICd1c2Ugc3RyaWN0
JzsKKworICBleHBvcnRzLmRlZmF1bHQgPSBzdWJleHByOworICBleHBvcnRzLmxhYmVsRm9yU3Vi
ZXhwciA9IGxhYmVsRm9yU3ViZXhwcjsKKworICBmdW5jdGlvbiBzdWJleHByKGVudiwgc2NvcGUs
IGhlbHBlck5hbWUsIHBhcmFtcywgaGFzaCkgeworICAgIC8vIFRPRE86IEtleXdvcmRzIGFuZCBo
ZWxwZXIgaW52b2NhdGlvbiBzaG91bGQgYmUgaW50ZWdyYXRlZCBpbnRvCisgICAgLy8gdGhlIHN1
YmV4cHIgaG9vayB1cHN0cmVhbSBpbiBIVE1MQmFycy4KKyAgICB2YXIga2V5d29yZCA9IGVudi5o
b29rcy5rZXl3b3Jkc1toZWxwZXJOYW1lXTsKKyAgICBpZiAoa2V5d29yZCkgeworICAgICAgcmV0
dXJuIGtleXdvcmQobnVsbCwgZW52LCBzY29wZSwgcGFyYW1zLCBoYXNoLCBudWxsLCBudWxsKTsK
KyAgICB9CisKKyAgICBfZW1iZXJIdG1sYmFyc0hvb2tzTGlua1JlbmRlck5vZGUubGlua1BhcmFt
c0ZvcihoZWxwZXJOYW1lLCBwYXJhbXMpOworCisgICAgdmFyIGxhYmVsID0gbGFiZWxGb3JTdWJl
eHByKHBhcmFtcywgaGFzaCwgaGVscGVyTmFtZSk7CisgICAgdmFyIGhlbHBlciA9IF9lbWJlckh0
bWxiYXJzU3lzdGVtTG9va3VwSGVscGVyLmRlZmF1bHQoaGVscGVyTmFtZSwgc2NvcGUuZ2V0U2Vs
ZigpLCBlbnYpOworCisgICAgdmFyIGhlbHBlclN0cmVhbSA9IF9lbWJlckh0bWxiYXJzU3lzdGVt
SW52b2tlSGVscGVyLmJ1aWxkSGVscGVyU3RyZWFtKGhlbHBlciwgcGFyYW1zLCBoYXNoLCBudWxs
LCBlbnYsIHNjb3BlLCBsYWJlbCk7CisKKyAgICBmb3IgKHZhciBpID0gMCwgbCA9IHBhcmFtcy5s
ZW5ndGg7IGkgPCBsOyBpKyspIHsKKyAgICAgIGhlbHBlclN0cmVhbS5hZGREZXBlbmRlbmN5KHBh
cmFtc1tpXSk7CisgICAgfQorCisgICAgZm9yICh2YXIga2V5IGluIGhhc2gpIHsKKyAgICAgIGhl
bHBlclN0cmVhbS5hZGREZXBlbmRlbmN5KGhhc2hba2V5XSk7CisgICAgfQorCisgICAgcmV0dXJu
IGhlbHBlclN0cmVhbTsKKyAgfQorCisgIGZ1bmN0aW9uIGxhYmVsRm9yU3ViZXhwcihwYXJhbXMs
IGhhc2gsIGhlbHBlck5hbWUpIHsKKyAgICB2YXIgcGFyYW1zTGFiZWxzID0gbGFiZWxzRm9yUGFy
YW1zKHBhcmFtcyk7CisgICAgdmFyIGhhc2hMYWJlbHMgPSBsYWJlbHNGb3JIYXNoKGhhc2gpOwor
ICAgIHZhciBsYWJlbCA9ICcoJyArIGhlbHBlck5hbWU7CisKKyAgICBpZiAocGFyYW1zTGFiZWxz
KSB7CisgICAgICBsYWJlbCArPSAnICcgKyBwYXJhbXNMYWJlbHM7CisgICAgfQorICAgIGlmICho
YXNoTGFiZWxzKSB7CisgICAgICBsYWJlbCArPSAnICcgKyBoYXNoTGFiZWxzOworICAgIH0KKwor
ICAgIHJldHVybiBsYWJlbCArICcpJzsKKyAgfQorCisgIGZ1bmN0aW9uIGxhYmVsc0ZvclBhcmFt
cyhwYXJhbXMpIHsKKyAgICByZXR1cm4gX2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMubGFiZWxzRm9y
KHBhcmFtcykuam9pbignICcpOworICB9CisKKyAgZnVuY3Rpb24gbGFiZWxzRm9ySGFzaChoYXNo
KSB7CisgICAgdmFyIG91dCA9IFtdOworCisgICAgZm9yICh2YXIgcHJvcCBpbiBoYXNoKSB7Cisg
ICAgICBvdXQucHVzaChwcm9wICsgJz0nICsgX2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMubGFiZWxG
b3IoaGFzaFtwcm9wXSkpOworICAgIH0KKworICAgIHJldHVybiBvdXQuam9pbignICcpOworICB9
Cit9KTsKK2VuaWZlZCgnZW1iZXItaHRtbGJhcnMvaG9va3MvdXBkYXRlLXNlbGYnLCBbJ2V4cG9y
dHMnLCAnZW1iZXItbWV0YWwvZGVidWcnLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0J10sIGZ1
bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJNZXRhbFByb3BlcnR5X2dl
dCkgeworICAvKioKKyAgQG1vZHVsZSBlbWJlcgorICBAc3VibW9kdWxlIGVtYmVyLWh0bWxiYXJz
CisgICovCisKKyAgJ3VzZSBzdHJpY3QnOworCisgIGV4cG9ydHMuZGVmYXVsdCA9IHVwZGF0ZVNl
bGY7CisKKyAgZnVuY3Rpb24gdXBkYXRlU2VsZihlbnYsIHNjb3BlLCBfc2VsZikgeworICAgIHZh
ciBzZWxmID0gX3NlbGY7CisKKyAgICBpZiAoc2VsZiAmJiBzZWxmLmhhc0JvdW5kQ29udHJvbGxl
cikgeworICAgICAgdmFyIF9zZWxmMiA9IHNlbGY7CisgICAgICB2YXIgY29udHJvbGxlciA9IF9z
ZWxmMi5jb250cm9sbGVyOworCisgICAgICBzZWxmID0gc2VsZi5zZWxmOworCisgICAgICBzY29w
ZS51cGRhdGVMb2NhbCgnY29udHJvbGxlcicsIGNvbnRyb2xsZXIgfHwgc2VsZik7CisgICAgfQor
CisgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ0JVRzogc2NvcGUuYXR0cnMgYW5kIHNlbGYu
aXNWaWV3IHNob3VsZCBub3QgYm90aCBiZSB0cnVlJywgIShzY29wZS5hdHRycyAmJiBzZWxmLmlz
VmlldykpOworCisgICAgaWYgKHNlbGYgJiYgc2VsZi5pc1ZpZXcpIHsKKyAgICAgIHNjb3BlLnVw
ZGF0ZUxvY2FsKCd2aWV3Jywgc2VsZik7CisgICAgICBzY29wZS51cGRhdGVTZWxmKF9lbWJlck1l
dGFsUHJvcGVydHlfZ2V0LmdldChzZWxmLCAnY29udGV4dCcpLCAnJyk7CisgICAgICByZXR1cm47
CisgICAgfQorCisgICAgc2NvcGUudXBkYXRlU2VsZihzZWxmKTsKKyAgfQorfSk7CitlbmlmZWQo
ImVtYmVyLWh0bWxiYXJzL2hvb2tzL3dpbGwtY2xlYW51cC10cmVlIiwgWyJleHBvcnRzIl0sIGZ1
bmN0aW9uIChleHBvcnRzKSB7CisgICJ1c2Ugc3RyaWN0IjsKKworICBleHBvcnRzLmRlZmF1bHQg
PSB3aWxsQ2xlYW51cFRyZWU7CisKKyAgZnVuY3Rpb24gd2lsbENsZWFudXBUcmVlKGVudikgewor
ICAgIHZhciB2aWV3ID0gZW52LnZpZXc7CisKKyAgICAvLyBXaGVuIHdlIGdvIHRvIGNsZWFuIHVw
IHRoZSByZW5kZXIgbm9kZSBhbmQgYWxsIG9mIGl0cyBjaGlsZHJlbiwgd2UgbWF5CisgICAgLy8g
ZW5jb3VudGVyIHZpZXdzL2NvbXBvbmVudHMgYXNzb2NpYXRlZCB3aXRoIHRob3NlIG5vZGVzIGFs
b25nIHRoZSB3YXkuIEluCisgICAgLy8gdGhvc2UgY2FzZXMsIHdlIG5lZWQgdG8gc2V2ZXIgdGhl
IGxpbmsgYmV0d2VlbiB0aGUKKyAgICAvLyBleGlzdGluZyB2aWV3IGhpZXJhcmNoeSBhbmQgdGhv
c2Ugdmlld3MuCisgICAgLy8KKyAgICAvLyBIb3dldmVyLCB3ZSBkbyAqbm90KiBuZWVkIHRvIHJl
bW92ZSB0aGUgY2hpbGQgdmlld3Mgb2YgY2hpbGQgdmlld3MsIHNpbmNlCisgICAgLy8gc2V2ZXJp
bmcgdGhlIGNvbm5lY3Rpb24gdG8gdGhlaXIgcGFyZW50IGVmZmVjdGl2ZWx5IHNldmVycyB0aGVt
IGZyb20gdGhlCisgICAgLy8gdmlldyBncmFwaC4KKyAgICAvLworICAgIC8vIEZvciBleGFtcGxl
LCBpbWFnaW5lIHRoZSBmb2xsb3dpbmcgdmlldyBncmFwaDoKKyAgICAvLworICAgIC8vICAgIEEK
KyAgICAvLyAgIC8gXAorICAgIC8vICBCICBDCisgICAgLy8gICAgLyBcCisgICAgLy8gICBEICBF
CisgICAgLy8KKyAgICAvLyBJZiB3ZSBhcmUgY2xlYW5pbmcgdXAgdGhlIG5vZGUgZm9yIHZpZXcg
Qywgd2UgbmVlZCB0byByZW1vdmUgdGhhdCB2aWV3CisgICAgLy8gZnJvbSBBJ3MgY2hpbGQgdmll
d3MuIEhvd2V2ZXIsIHdlIGRvIG5vdCBuZWVkIHRvIHJlbW92ZSBEIGFuZCBFIGZyb20gQydzCisg
ICAgLy8gY2hpbGQgdmlld3MsIHNpbmNlIHJlbW92aW5nIEMgdHJhbnNpdGl2ZWx5IHJlbW92ZXMg
RCBhbmQgRSBhcyB3ZWxsLgorICAgIC8vCisgICAgLy8gVG8gYWNjb21wbGlzaCB0aGlzLCB3ZSB0
cmFjayB0aGUgbmVhcmVzdCB2aWV3IHRvIHRoaXMgcmVuZGVyIG5vZGUgb24gdGhlCisgICAgLy8g
b3duZXIgdmlldywgdGhlIHJvb3QtbW9zdCB2aWV3IGluIHRoZSBncmFwaCAoQSBpbiB0aGUgZXhh
bXBsZSBhYm92ZSkuIElmCisgICAgLy8gd2UgZGV0ZWN0IGEgdmlldyB0aGF0IGlzIGEgZGlyZWN0
IGNoaWxkIG9mIHRoYXQgdmlldywgd2UgcmVtb3ZlIGl0IGZyb20KKyAgICAvLyB0aGUgYGNoaWxk
Vmlld3NgIGFycmF5LiBPdGhlciBwYXJlbnQvY2hpbGQgdmlldyByZWxhdGlvbnNoaXBzIGFyZQor
ICAgIC8vIHVudG91Y2hlZC4gIFRoaXMgdmlldyBpcyB0aGVuIGNsZWFyZWQgb25jZSBjbGVhbnVw
IGlzIGNvbXBsZXRlIGluCisgICAgLy8gYGRpZENsZWFudXBUcmVlYC4KKyAgICB2aWV3Lm93bmVy
Vmlldy5fZGVzdHJveWluZ1N1YnRyZWVGb3JWaWV3ID0gdmlldzsKKyAgfQorfSk7CitlbmlmZWQo
J2VtYmVyLWh0bWxiYXJzL2luZGV4JywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2NvcmUnLCAn
ZW1iZXItdGVtcGxhdGUtY29tcGlsZXInLCAnZW1iZXItaHRtbGJhcnMvc3lzdGVtL21ha2VfYm91
bmRfaGVscGVyJywgJ2VtYmVyLWh0bWxiYXJzL2hlbHBlcnMnLCAnZW1iZXItaHRtbGJhcnMvaGVs
cGVycy9pZl91bmxlc3MnLCAnZW1iZXItaHRtbGJhcnMvaGVscGVycy93aXRoJywgJ2VtYmVyLWh0
bWxiYXJzL2hlbHBlcnMvbG9jJywgJ2VtYmVyLWh0bWxiYXJzL2hlbHBlcnMvbG9nJywgJ2VtYmVy
LWh0bWxiYXJzL2hlbHBlcnMvZWFjaCcsICdlbWJlci1odG1sYmFycy9oZWxwZXJzL2VhY2gtaW4n
LCAnZW1iZXItaHRtbGJhcnMvaGVscGVycy8tbm9ybWFsaXplLWNsYXNzJywgJ2VtYmVyLWh0bWxi
YXJzL2hlbHBlcnMvY29uY2F0JywgJ2VtYmVyLWh0bWxiYXJzL2hlbHBlcnMvLWpvaW4tY2xhc3Nl
cycsICdlbWJlci1odG1sYmFycy9oZWxwZXJzLy1odG1sLXNhZmUnLCAnZW1iZXItaHRtbGJhcnMv
aGVscGVycy9oYXNoJywgJ2VtYmVyLWh0bWxiYXJzL3N5c3RlbS9kb20taGVscGVyJywgJ2VtYmVy
LWh0bWxiYXJzL2hlbHBlcicsICdlbWJlci1odG1sYmFycy90ZW1wbGF0ZV9yZWdpc3RyeScsICdl
bWJlci1odG1sYmFycy9zeXN0ZW0vYm9vdHN0cmFwJywgJ2VtYmVyLWh0bWxiYXJzL2NvbXBhdCdd
LCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxDb3JlLCBfZW1iZXJUZW1wbGF0ZUNvbXBp
bGVyLCBfZW1iZXJIdG1sYmFyc1N5c3RlbU1ha2VfYm91bmRfaGVscGVyLCBfZW1iZXJIdG1sYmFy
c0hlbHBlcnMsIF9lbWJlckh0bWxiYXJzSGVscGVyc0lmX3VubGVzcywgX2VtYmVySHRtbGJhcnNI
ZWxwZXJzV2l0aCwgX2VtYmVySHRtbGJhcnNIZWxwZXJzTG9jLCBfZW1iZXJIdG1sYmFyc0hlbHBl
cnNMb2csIF9lbWJlckh0bWxiYXJzSGVscGVyc0VhY2gsIF9lbWJlckh0bWxiYXJzSGVscGVyc0Vh
Y2hJbiwgX2VtYmVySHRtbGJhcnNIZWxwZXJzTm9ybWFsaXplQ2xhc3MsIF9lbWJlckh0bWxiYXJz
SGVscGVyc0NvbmNhdCwgX2VtYmVySHRtbGJhcnNIZWxwZXJzSm9pbkNsYXNzZXMsIF9lbWJlckh0
bWxiYXJzSGVscGVyc0h0bWxTYWZlLCBfZW1iZXJIdG1sYmFyc0hlbHBlcnNIYXNoLCBfZW1iZXJI
dG1sYmFyc1N5c3RlbURvbUhlbHBlciwgX2VtYmVySHRtbGJhcnNIZWxwZXIsIF9lbWJlckh0bWxi
YXJzVGVtcGxhdGVfcmVnaXN0cnksIF9lbWJlckh0bWxiYXJzU3lzdGVtQm9vdHN0cmFwLCBfZW1i
ZXJIdG1sYmFyc0NvbXBhdCkgeworICAvKioKKyAgICBFbWJlciB0ZW1wbGF0ZXMgYXJlIGV4ZWN1
dGVkIGJ5IFtIVE1MQmFyc10oaHR0cHM6Ly9naXRodWIuY29tL3RpbGRlaW8vaHRtbGJhcnMpLAor
ICAgIGFuIEhUTUwtZnJpZW5kbHkgdmVyc2lvbiBvZiBbSGFuZGxlYmFyc10oaHR0cDovL2hhbmRs
ZWJhcnNqcy5jb20vKS4gQW55IHZhbGlkIEhhbmRsZWJhcnMgc3ludGF4IGlzIHZhbGlkIGluIGFu
IEVtYmVyIHRlbXBsYXRlLgorICAKKyAgICAjIyMgU2hvd2luZyBhIHByb3BlcnR5CisgIAorICAg
IFRlbXBsYXRlcyBtYW5hZ2UgdGhlIGZsb3cgb2YgYW4gYXBwbGljYXRpb24ncyBVSSwgYW5kIGRp
c3BsYXkgc3RhdGUgKHRocm91Z2gKKyAgICB0aGUgRE9NKSB0byBhIHVzZXIuIEZvciBleGFtcGxl
LCBnaXZlbiBhIGNvbXBvbmVudCB3aXRoIHRoZSBwcm9wZXJ0eSAibmFtZSIsCisgICAgdGhhdCBj
b21wb25lbnQncyB0ZW1wbGF0ZSBjYW4gdXNlIHRoZSBuYW1lIGluIHNldmVyYWwgd2F5czoKKyAg
CisgICAgYGBgamF2YXNjcmlwdAorICAgIC8vIGFwcC9jb21wb25lbnRzL3BlcnNvbi5qcworICAg
IGV4cG9ydCBkZWZhdWx0IEVtYmVyLkNvbXBvbmVudC5leHRlbmQoeworICAgICAgbmFtZTogJ0pp
bGwnCisgICAgfSk7CisgICAgYGBgCisgIAorICAgIGBgYGhhbmRsZWJhcnMKKyAgICB7eyEgYXBw
L2NvbXBvbmVudHMvcGVyc29uLmhicyB9fQorICAgIHt7bmFtZX19CisgICAgPGRpdj57e25hbWV9
fTwvZGl2PgorICAgIDxzcGFuIGRhdGEtbmFtZT17e25hbWV9fT48L3NwYW4+CisgICAgYGBgCisg
IAorICAgIEFueSB0aW1lIHRoZSAibmFtZSIgcHJvcGVydHkgb24gdGhlIGNvbXBvbmVudCBjaGFu
Z2VzLCB0aGUgRE9NIHdpbGwgYmUKKyAgICB1cGRhdGVkLgorICAKKyAgICBQcm9wZXJ0aWVzIGNh
biBiZSBjaGFpbmVkIGFzIHdlbGw6CisgIAorICAgIGBgYGhhbmRsZWJhcnMKKyAgICB7e2FVc2Vy
TW9kZWwubmFtZX19CisgICAgPGRpdj57e2xpc3RPZlVzZXJzLmZpcnN0T2JqZWN0Lm5hbWV9fTwv
ZGl2PgorICAgIGBgYAorICAKKyAgICAjIyMgVXNpbmcgRW1iZXIgaGVscGVycworICAKKyAgICBX
aGVuIGNvbnRlbnQgaXMgcGFzc2VkIGluIG11c3RhY2hlcyBge3t9fWAsIEVtYmVyIHdpbGwgZmly
c3QgdHJ5IHRvIGZpbmQgYSBoZWxwZXIKKyAgICBvciBjb21wb25lbnQgd2l0aCB0aGF0IG5hbWUu
IEZvciBleGFtcGxlLCB0aGUgYGlmYCBoZWxwZXI6CisgIAorICAgIGBgYGhhbmRsZWJhcnMKKyAg
ICB7e2lmIG5hbWUgIkkgaGF2ZSBhIG5hbWUiICJJIGhhdmUgbm8gbmFtZSJ9fQorICAgIDxzcGFu
IGRhdGEtaGFzLW5hbWU9e3tpZiBuYW1lIHRydWV9fT48L3NwYW4+CisgICAgYGBgCisgIAorICAg
IFRoZSByZXR1cm5lZCB2YWx1ZSBpcyBwbGFjZWQgd2hlcmUgdGhlIGB7e319YCBpcyBjYWxsZWQu
IFRoZSBhYm92ZSBzdHlsZSBpcworICAgIGNhbGxlZCAiaW5saW5lIi4gQSBzZWNvbmQgc3R5bGUg
b2YgaGVscGVyIHVzYWdlIGlzIGNhbGxlZCAiYmxvY2siLiBGb3IgZXhhbXBsZToKKyAgCisgICAg
YGBgaGFuZGxlYmFycworICAgIHt7I2lmIG5hbWV9fQorICAgICAgSSBoYXZlIGEgbmFtZQorICAg
IHt7ZWxzZX19CisgICAgICBJIGhhdmUgbm8gbmFtZQorICAgIHt7L2lmfX0KKyAgICBgYGAKKyAg
CisgICAgVGhlIGJsb2NrIGZvcm0gb2YgaGVscGVycyBhbGxvd3MgeW91IHRvIGNvbnRyb2wgaG93
IHRoZSBVSSBpcyBjcmVhdGVkIGJhc2VkCisgICAgb24gdGhlIHZhbHVlcyBvZiBwcm9wZXJ0aWVz
LgorICAKKyAgICBBIHRoaXJkIGZvcm0gb2YgaGVscGVyIGlzIGNhbGxlZCAibmVzdGVkIi4gRm9y
IGV4YW1wbGUgaGVyZSB0aGUgY29uY2F0CisgICAgaGVscGVyIHdpbGwgYWRkICIgRG9lIiB0byBh
IGRpc3BsYXllZCBuYW1lIGlmIHRoZSBwZXJzb24gaGFzIG5vIGxhc3QgbmFtZToKKyAgCisgICAg
YGBgaGFuZGxlYmFycworICAgIDxzcGFuIGRhdGEtbmFtZT17e2NvbmNhdCBmaXJzdE5hbWUgKAor
ICAgICBpZiBsYXN0TmFtZSAoY29uY2F0ICIgIiBsYXN0TmFtZSkgIkRvZSIKKyAgICApfX0+PC9z
cGFuPgorICAgIGBgYAorICAKKyAgICBFbWJlcidzIGJ1aWx0LWluIGhlbHBlcnMgYXJlIGRlc2Ny
aWJlZCB1bmRlciB0aGUgW0VtYmVyLlRlbXBsYXRlcy5oZWxwZXJzXSgvYXBpL2NsYXNzZXMvRW1i
ZXIuVGVtcGxhdGVzLmhlbHBlcnMuaHRtbCkKKyAgICBuYW1lc3BhY2UuIERvY3VtZW50YXRpb24g
b24gY3JlYXRpbmcgY3VzdG9tIGhlbHBlcnMgY2FuIGJlIGZvdW5kIHVuZGVyCisgICAgW0VtYmVy
LkhlbHBlcl0oL2FwaS9jbGFzc2VzL0VtYmVyLkhlbHBlci5odG1sKS4KKyAgCisgICAgIyMjIElu
dm9raW5nIGEgQ29tcG9uZW50CisgIAorICAgIEVtYmVyIGNvbXBvbmVudHMgcmVwcmVzZW50IHN0
YXRlIHRvIHRoZSBVSSBvZiBhbiBhcHBsaWNhdGlvbi4gRnVydGhlcgorICAgIHJlYWRpbmcgb24g
Y29tcG9uZW50cyBjYW4gYmUgZm91bmQgdW5kZXIgW0VtYmVyLkNvbXBvbmVudF0oL2FwaS9jbGFz
c2VzL0VtYmVyLkNvbXBvbmVudC5odG1sKS4KKyAgCisgICAgQG1vZHVsZSBlbWJlcgorICAgIEBz
dWJtb2R1bGUgZW1iZXItdGVtcGxhdGVzCisgICAgQG1haW4gZW1iZXItdGVtcGxhdGVzCisgICAg
QHB1YmxpYworICAqLworCisgIC8qKgorICAKKyAgICBbSFRNTEJhcnNdKGh0dHBzOi8vZ2l0aHVi
LmNvbS90aWxkZWlvL2h0bWxiYXJzKSBpcyBhIFtIYW5kbGViYXJzXShodHRwOi8vaGFuZGxlYmFy
c2pzLmNvbS8pCisgICAgY29tcGF0aWJsZSB0ZW1wbGF0aW5nIGVuZ2luZSB1c2VkIGJ5IEVtYmVy
LmpzLiBUaGUgY2xhc3NlcyBhbmQgbmFtZXNwYWNlcworICAgIGNvdmVyZWQgYnkgdGhpcyBkb2N1
bWVudGF0aW9uIGF0dGVtcHQgdG8gZm9jdXMgb24gQVBJcyBmb3IgaW50ZXJhY3RpbmcKKyAgICB3
aXRoIEhUTUxCYXJzIGl0c2VsZi4gRm9yIG1vcmUgZ2VuZXJhbCBndWlkYW5jZSBvbiBFbWJlci5q
cyB0ZW1wbGF0ZXMgYW5kCisgICAgaGVscGVycywgcGxlYXNlIHNlZSB0aGUgW2VtYmVyLXRlbXBs
YXRlc10oL2FwaS9tb2R1bGVzL2VtYmVyLXRlbXBsYXRlcy5odG1sKQorICAgIHBhY2thZ2UuCisg
IAorICAgIEBtb2R1bGUgZW1iZXIKKyAgICBAc3VibW9kdWxlIGVtYmVyLWh0bWxiYXJzCisgICAg
QG1haW4gZW1iZXItaHRtbGJhcnMKKyAgICBAcHVibGljCisgICovCisgICd1c2Ugc3RyaWN0JzsK
KworICBfZW1iZXJIdG1sYmFyc0hlbHBlcnMucmVnaXN0ZXJIZWxwZXIoJ2lmJywgX2VtYmVySHRt
bGJhcnNIZWxwZXJzSWZfdW5sZXNzLmlmSGVscGVyKTsKKyAgX2VtYmVySHRtbGJhcnNIZWxwZXJz
LnJlZ2lzdGVySGVscGVyKCd1bmxlc3MnLCBfZW1iZXJIdG1sYmFyc0hlbHBlcnNJZl91bmxlc3Mu
dW5sZXNzSGVscGVyKTsKKyAgX2VtYmVySHRtbGJhcnNIZWxwZXJzLnJlZ2lzdGVySGVscGVyKCd3
aXRoJywgX2VtYmVySHRtbGJhcnNIZWxwZXJzV2l0aC5kZWZhdWx0KTsKKyAgX2VtYmVySHRtbGJh
cnNIZWxwZXJzLnJlZ2lzdGVySGVscGVyKCdsb2MnLCBfZW1iZXJIdG1sYmFyc0hlbHBlcnNMb2Mu
ZGVmYXVsdCk7CisgIF9lbWJlckh0bWxiYXJzSGVscGVycy5yZWdpc3RlckhlbHBlcignbG9nJywg
X2VtYmVySHRtbGJhcnNIZWxwZXJzTG9nLmRlZmF1bHQpOworICBfZW1iZXJIdG1sYmFyc0hlbHBl
cnMucmVnaXN0ZXJIZWxwZXIoJ2VhY2gnLCBfZW1iZXJIdG1sYmFyc0hlbHBlcnNFYWNoLmRlZmF1
bHQpOworICBfZW1iZXJIdG1sYmFyc0hlbHBlcnMucmVnaXN0ZXJIZWxwZXIoJ2VhY2gtaW4nLCBf
ZW1iZXJIdG1sYmFyc0hlbHBlcnNFYWNoSW4uZGVmYXVsdCk7CisgIF9lbWJlckh0bWxiYXJzSGVs
cGVycy5yZWdpc3RlckhlbHBlcignLW5vcm1hbGl6ZS1jbGFzcycsIF9lbWJlckh0bWxiYXJzSGVs
cGVyc05vcm1hbGl6ZUNsYXNzLmRlZmF1bHQpOworICBfZW1iZXJIdG1sYmFyc0hlbHBlcnMucmVn
aXN0ZXJIZWxwZXIoJ2NvbmNhdCcsIF9lbWJlckh0bWxiYXJzSGVscGVyc0NvbmNhdC5kZWZhdWx0
KTsKKyAgX2VtYmVySHRtbGJhcnNIZWxwZXJzLnJlZ2lzdGVySGVscGVyKCctam9pbi1jbGFzc2Vz
JywgX2VtYmVySHRtbGJhcnNIZWxwZXJzSm9pbkNsYXNzZXMuZGVmYXVsdCk7CisgIF9lbWJlckh0
bWxiYXJzSGVscGVycy5yZWdpc3RlckhlbHBlcignLWh0bWwtc2FmZScsIF9lbWJlckh0bWxiYXJz
SGVscGVyc0h0bWxTYWZlLmRlZmF1bHQpOworICBfZW1iZXJIdG1sYmFyc0hlbHBlcnMucmVnaXN0
ZXJIZWxwZXIoJ2hhc2gnLCBfZW1iZXJIdG1sYmFyc0hlbHBlcnNIYXNoLmRlZmF1bHQpOworCisg
IF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LkhUTUxCYXJzID0geworICAgIHRlbXBsYXRlOiBfZW1i
ZXJUZW1wbGF0ZUNvbXBpbGVyLnRlbXBsYXRlLAorICAgIGNvbXBpbGU6IF9lbWJlclRlbXBsYXRl
Q29tcGlsZXIuY29tcGlsZSwKKyAgICBwcmVjb21waWxlOiBfZW1iZXJUZW1wbGF0ZUNvbXBpbGVy
LnByZWNvbXBpbGUsCisgICAgbWFrZUJvdW5kSGVscGVyOiBfZW1iZXJIdG1sYmFyc1N5c3RlbU1h
a2VfYm91bmRfaGVscGVyLmRlZmF1bHQsCisgICAgcmVnaXN0ZXJQbHVnaW46IF9lbWJlclRlbXBs
YXRlQ29tcGlsZXIucmVnaXN0ZXJQbHVnaW4sCisgICAgRE9NSGVscGVyOiBfZW1iZXJIdG1sYmFy
c1N5c3RlbURvbUhlbHBlci5kZWZhdWx0CisgIH07CisKKyAgX2VtYmVySHRtbGJhcnNIZWxwZXIu
ZGVmYXVsdC5oZWxwZXIgPSBfZW1iZXJIdG1sYmFyc0hlbHBlci5oZWxwZXI7CisgIF9lbWJlck1l
dGFsQ29yZS5kZWZhdWx0LkhlbHBlciA9IF9lbWJlckh0bWxiYXJzSGVscGVyLmRlZmF1bHQ7CisK
KyAgLyoqCisgICAgR2xvYmFsIGhhc2ggb2Ygc2hhcmVkIHRlbXBsYXRlcy4gVGhpcyB3aWxsIGF1
dG9tYXRpY2FsbHkgYmUgcG9wdWxhdGVkCisgICAgYnkgdGhlIGJ1aWxkIHRvb2xzIHNvIHRoYXQg
eW91IGNhbiBzdG9yZSB5b3VyIEhhbmRsZWJhcnMgdGVtcGxhdGVzIGluCisgICAgc2VwYXJhdGUg
ZmlsZXMgdGhhdCBnZXQgbG9hZGVkIGludG8gSmF2YVNjcmlwdCBhdCBidWlsZHRpbWUuCisgIAor
ICAgIEBwcm9wZXJ0eSBURU1QTEFURVMKKyAgICBAZm9yIEVtYmVyCisgICAgQHR5cGUgT2JqZWN0
CisgICAgQHByaXZhdGUKKyAgKi8KKyAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9lbWJlck1ldGFs
Q29yZS5kZWZhdWx0LCAnVEVNUExBVEVTJywgeworICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsCisg
ICAgZ2V0OiBfZW1iZXJIdG1sYmFyc1RlbXBsYXRlX3JlZ2lzdHJ5LmdldFRlbXBsYXRlcywKKyAg
ICBzZXQ6IF9lbWJlckh0bWxiYXJzVGVtcGxhdGVfcmVnaXN0cnkuc2V0VGVtcGxhdGVzCisgIH0p
OworfSk7CisKKy8vIEltcG9ydGluZyBhZGRzIHRlbXBsYXRlIGJvb3RzdHJhcHBpbmcKKy8vIGlu
aXRpYWxpemVyIHRvIGVuYWJsZSBlbWJlZGRlZCB0ZW1wbGF0ZXMuCisKKy8vIEltcG9ydGluZyBl
bWJlci1odG1sYmFycy9jb21wYXQgdXBkYXRlcyB0aGUKKy8vIEVtYmVyLkhhbmRsZWJhcnMgZ2xv
YmFsIGlmIGh0bWxiYXJzIGlzIGVuYWJsZWQuCitlbmlmZWQoJ2VtYmVyLWh0bWxiYXJzL2tleXdv
cmRzJywgWydleHBvcnRzJywgJ2h0bWxiYXJzLXJ1bnRpbWUnXSwgZnVuY3Rpb24gKGV4cG9ydHMs
IF9odG1sYmFyc1J1bnRpbWUpIHsKKyAgLyoqCisgIEBtb2R1bGUgZW1iZXIKKyAgQHN1Ym1vZHVs
ZSBlbWJlci1odG1sYmFycworICAqLworCisgICd1c2Ugc3RyaWN0JzsKKworICBleHBvcnRzLnJl
Z2lzdGVyS2V5d29yZCA9IHJlZ2lzdGVyS2V5d29yZDsKKworICAvKioKKyAgIEBwcml2YXRlCisg
ICBAcHJvcGVydHkgaGVscGVycworICAqLworICB2YXIga2V5d29yZHMgPSBPYmplY3QuY3JlYXRl
KF9odG1sYmFyc1J1bnRpbWUuaG9va3Mua2V5d29yZHMpOworCisgIC8qKgorICBAbW9kdWxlIGVt
YmVyCisgIEBzdWJtb2R1bGUgZW1iZXItaHRtbGJhcnMKKyAgKi8KKworICAvKioKKyAgICBAcHJp
dmF0ZQorICAgIEBtZXRob2QgX3JlZ2lzdGVySGVscGVyCisgICAgQGZvciBFbWJlci5IVE1MQmFy
cworICAgIEBwYXJhbSB7U3RyaW5nfSBuYW1lCisgICAgQHBhcmFtIHtPYmplY3R8RnVuY3Rpb259
IGtleXdvcmQgVGhlIGtleXdvcmQgdG8gYWRkLgorICAqLworCisgIGZ1bmN0aW9uIHJlZ2lzdGVy
S2V5d29yZChuYW1lLCBrZXl3b3JkKSB7CisgICAga2V5d29yZHNbbmFtZV0gPSBrZXl3b3JkOwor
ICB9CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0ga2V5d29yZHM7Cit9KTsKK2VuaWZlZCgnZW1iZXIt
aHRtbGJhcnMva2V5d29yZHMvY2xvc3VyZS1jb21wb25lbnQnLCBbJ2V4cG9ydHMnLCAnZW1iZXIt
bWV0YWwvZGVidWcnLCAnZW1iZXItbWV0YWwvaXNfbm9uZScsICdlbWJlci1tZXRhbC9zeW1ib2wn
LCAnZW1iZXItbWV0YWwvc3RyZWFtcy9zdHJlYW0nLCAnZW1iZXItbWV0YWwvZW1wdHlfb2JqZWN0
JywgJ2VtYmVyLW1ldGFsL3N0cmVhbXMvdXRpbHMnLCAnZW1iZXItaHRtbGJhcnMvaG9va3Mvc3Vi
ZXhwcicsICdlbWJlci1tZXRhbC9hc3NpZ24nLCAnZW1iZXItaHRtbGJhcnMvdXRpbHMvZXh0cmFj
dC1wb3NpdGlvbmFsLXBhcmFtcycsICdlbWJlci1odG1sYmFycy91dGlscy9sb29rdXAtY29tcG9u
ZW50J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJNZXRhbElz
X25vbmUsIF9lbWJlck1ldGFsU3ltYm9sLCBfZW1iZXJNZXRhbFN0cmVhbXNTdHJlYW0sIF9lbWJl
ck1ldGFsRW1wdHlfb2JqZWN0LCBfZW1iZXJNZXRhbFN0cmVhbXNVdGlscywgX2VtYmVySHRtbGJh
cnNIb29rc1N1YmV4cHIsIF9lbWJlck1ldGFsQXNzaWduLCBfZW1iZXJIdG1sYmFyc1V0aWxzRXh0
cmFjdFBvc2l0aW9uYWxQYXJhbXMsIF9lbWJlckh0bWxiYXJzVXRpbHNMb29rdXBDb21wb25lbnQp
IHsKKyAgLyoqCisgIEBtb2R1bGUgZW1iZXIKKyAgQHN1Ym1vZHVsZSBlbWJlci10ZW1wbGF0ZXMK
KyAgKi8KKworICAndXNlIHN0cmljdCc7CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gY2xvc3VyZUNv
bXBvbmVudDsKKyAgZXhwb3J0cy5pc0NvbXBvbmVudENlbGwgPSBpc0NvbXBvbmVudENlbGw7Cisg
IGV4cG9ydHMucHJvY2Vzc1Bvc2l0aW9uYWxQYXJhbXNGcm9tQ2VsbCA9IHByb2Nlc3NQb3NpdGlv
bmFsUGFyYW1zRnJvbUNlbGw7CisgIGV4cG9ydHMubWVyZ2VJbk5ld0hhc2ggPSBtZXJnZUluTmV3
SGFzaDsKKyAgdmFyIENPTVBPTkVOVF9SRUZFUkVOQ0UgPSBfZW1iZXJNZXRhbFN5bWJvbC5kZWZh
dWx0KCdDT01QT05FTlRfUkVGRVJFTkNFJyk7CisgIGV4cG9ydHMuQ09NUE9ORU5UX1JFRkVSRU5D
RSA9IENPTVBPTkVOVF9SRUZFUkVOQ0U7CisgIHZhciBDT01QT05FTlRfQ0VMTCA9IF9lbWJlck1l
dGFsU3ltYm9sLmRlZmF1bHQoJ0NPTVBPTkVOVF9DRUxMJyk7CisgIGV4cG9ydHMuQ09NUE9ORU5U
X0NFTEwgPSBDT01QT05FTlRfQ0VMTDsKKyAgdmFyIENPTVBPTkVOVF9QQVRIID0gX2VtYmVyTWV0
YWxTeW1ib2wuZGVmYXVsdCgnQ09NUE9ORU5UX1BBVEgnKTsKKyAgZXhwb3J0cy5DT01QT05FTlRf
UEFUSCA9IENPTVBPTkVOVF9QQVRIOworICB2YXIgQ09NUE9ORU5UX1BPU0lUSU9OQUxfUEFSQU1T
ID0gX2VtYmVyTWV0YWxTeW1ib2wuZGVmYXVsdCgnQ09NUE9ORU5UX1BPU0lUSU9OQUxfUEFSQU1T
Jyk7CisgIGV4cG9ydHMuQ09NUE9ORU5UX1BPU0lUSU9OQUxfUEFSQU1TID0gQ09NUE9ORU5UX1BP
U0lUSU9OQUxfUEFSQU1TOworICB2YXIgQ09NUE9ORU5UX0hBU0ggPSBfZW1iZXJNZXRhbFN5bWJv
bC5kZWZhdWx0KCdDT01QT05FTlRfSEFTSCcpOworCisgIGV4cG9ydHMuQ09NUE9ORU5UX0hBU0gg
PSBDT01QT05FTlRfSEFTSDsKKyAgdmFyIENsb3N1cmVDb21wb25lbnRTdHJlYW0gPSBfZW1iZXJN
ZXRhbFN0cmVhbXNTdHJlYW0uZGVmYXVsdC5leHRlbmQoeworICAgIGluaXQ6IGZ1bmN0aW9uIChl
bnYsIHBhdGgsIHBhcmFtcywgaGFzaCkgeworICAgICAgdGhpcy5fZW52ID0gZW52OworICAgICAg
dGhpcy5fcGF0aCA9IHBhdGg7CisgICAgICB0aGlzLl9wYXJhbXMgPSBwYXJhbXM7CisgICAgICB0
aGlzLl9oYXNoID0gaGFzaDsKKyAgICAgIHRoaXMubGFiZWwgPSBfZW1iZXJIdG1sYmFyc0hvb2tz
U3ViZXhwci5sYWJlbEZvclN1YmV4cHIoW3BhdGhdLmNvbmNhdChwYXJhbXMpLCBoYXNoLCAnY29t
cG9uZW50Jyk7CisgICAgICB0aGlzW0NPTVBPTkVOVF9SRUZFUkVOQ0VdID0gdHJ1ZTsKKyAgICB9
LAorICAgIGNvbXB1dGU6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHJldHVybiBjcmVhdGVDbG9zdXJl
Q29tcG9uZW50Q2VsbCh0aGlzLl9lbnYsIHRoaXMuX3BhdGgsIHRoaXMuX3BhcmFtcywgdGhpcy5f
aGFzaCwgdGhpcy5sYWJlbCk7CisgICAgfQorICB9KTsKKworICBmdW5jdGlvbiBjbG9zdXJlQ29t
cG9uZW50KGVudiwgX3JlZjMsIGhhc2gpIHsKKyAgICB2YXIgcGF0aCA9IF9yZWYzWzBdOworCisg
ICAgdmFyIHBhcmFtcyA9IF9yZWYzLnNsaWNlKDEpOworCisgICAgdmFyIHMgPSBuZXcgQ2xvc3Vy
ZUNvbXBvbmVudFN0cmVhbShlbnYsIHBhdGgsIHBhcmFtcywgaGFzaCk7CisKKyAgICBzLmFkZERl
cGVuZGVuY3kocGF0aCk7CisKKyAgICAvLyBGSVhNRTogSWYgdGhlIHN0cmVhbSBpbnZhbGlkYXRl
cyBvbiBldmVyeSBwYXJhbXMgb3IgaGFzaCBjaGFuZ2UsIHRoZW4KKyAgICAvLyB0aGUge3tjb21w
b25lbnQgaGVscGVyIHdpbGwgYmUgZm9yY2VkIHRvIHJlLXJlbmRlciB0aGUgd2hvbGUgY29tcG9u
ZW50CisgICAgLy8gZWFjaCB0aW1lLiBJbnN0ZWFkLCB0aGVzZSBkZXBlbmRlbmNpZXMgc2hvdWxk
IG5vdCBiZSByZXF1aXJlZCBhbmQgdGhlCisgICAgLy8gZWxlbWVudCBjb21wb25lbnQga2V5d29y
ZCBzaG91bGQgYWRkIHRoZSBwYXJhbXMgYW5kIGhhc2ggYXMgZGVwZW5kZW5jaWVzLgorICAgIHBh
cmFtcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7CisgICAgICByZXR1cm4gcy5hZGREZXBlbmRl
bmN5KGl0ZW0pOworICAgIH0pOworICAgIE9iamVjdC5rZXlzKGhhc2gpLmZvckVhY2goZnVuY3Rp
b24gKGtleSkgeworICAgICAgcmV0dXJuIHMuYWRkRGVwZW5kZW5jeShoYXNoW2tleV0pOworICAg
IH0pOworCisgICAgcmV0dXJuIHM7CisgIH0KKworICBmdW5jdGlvbiBjcmVhdGVDbG9zdXJlQ29t
cG9uZW50Q2VsbChlbnYsIG9yaWdpbmFsQ29tcG9uZW50UGF0aCwgcGFyYW1zLCBoYXNoLCBsYWJl
bCkgeworICAgIHZhciBjb21wb25lbnRQYXRoID0gX2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMucmVh
ZChvcmlnaW5hbENvbXBvbmVudFBhdGgpOworCisgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQo
J0NvbXBvbmVudCBwYXRoIGNhbm5vdCBiZSBudWxsIGluICcgKyBsYWJlbCwgIV9lbWJlck1ldGFs
SXNfbm9uZS5kZWZhdWx0KGNvbXBvbmVudFBhdGgpKTsKKworICAgIHZhciBuZXdIYXNoID0gX2Vt
YmVyTWV0YWxBc3NpZ24uZGVmYXVsdChuZXcgX2VtYmVyTWV0YWxFbXB0eV9vYmplY3QuZGVmYXVs
dCgpLCBoYXNoKTsKKworICAgIGlmIChpc0NvbXBvbmVudENlbGwoY29tcG9uZW50UGF0aCkpIHsK
KyAgICAgIHJldHVybiBjcmVhdGVOZXN0ZWRDbG9zdXJlQ29tcG9uZW50Q2VsbChjb21wb25lbnRQ
YXRoLCBwYXJhbXMsIG5ld0hhc2gpOworICAgIH0gZWxzZSB7CisgICAgICBfZW1iZXJNZXRhbERl
YnVnLmFzc2VydCgnVGhlIGNvbXBvbmVudCBoZWxwZXIgY2Fubm90IGJlIHVzZWQgd2l0aG91dCBh
IHZhbGlkIGNvbXBvbmVudCBuYW1lLiBZb3UgdXNlZCAiJyArIGNvbXBvbmVudFBhdGggKyAnIiB2
aWEgJyArIGxhYmVsLCBpc1ZhbGlkQ29tcG9uZW50UGF0aChlbnYsIGNvbXBvbmVudFBhdGgpKTsK
KyAgICAgIHJldHVybiBjcmVhdGVOZXdDbG9zdXJlQ29tcG9uZW50Q2VsbChlbnYsIGNvbXBvbmVu
dFBhdGgsIHBhcmFtcywgbmV3SGFzaCk7CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gaXNWYWxp
ZENvbXBvbmVudFBhdGgoZW52LCBwYXRoKSB7CisgICAgdmFyIHJlc3VsdCA9IF9lbWJlckh0bWxi
YXJzVXRpbHNMb29rdXBDb21wb25lbnQuZGVmYXVsdChlbnYub3duZXIsIHBhdGgpOworCisgICAg
cmV0dXJuICEhKHJlc3VsdC5jb21wb25lbnQgfHwgcmVzdWx0LmxheW91dCk7CisgIH0KKworICBm
dW5jdGlvbiBpc0NvbXBvbmVudENlbGwoY29tcG9uZW50KSB7CisgICAgcmV0dXJuIGNvbXBvbmVu
dCAmJiBjb21wb25lbnRbQ09NUE9ORU5UX0NFTExdOworICB9CisKKyAgZnVuY3Rpb24gY3JlYXRl
TmVzdGVkQ2xvc3VyZUNvbXBvbmVudENlbGwoY29tcG9uZW50Q2VsbCwgcGFyYW1zLCBoYXNoKSB7
CisgICAgdmFyIF9yZWY7CisKKyAgICAvLyBUaGlzIG5lZWRzIHRvIGJlIGRvbmUgaW4gZWFjaCBu
ZXN0aW5nIGxldmVsIHRvIGF2b2lkIHJhaXNpbmcgYXNzZXJ0aW9ucy4KKyAgICBwcm9jZXNzUG9z
aXRpb25hbFBhcmFtc0Zyb21DZWxsKGNvbXBvbmVudENlbGwsIHBhcmFtcywgaGFzaCk7CisKKyAg
ICByZXR1cm4gX3JlZiA9IHt9LCBfcmVmW0NPTVBPTkVOVF9QQVRIXSA9IGNvbXBvbmVudENlbGxb
Q09NUE9ORU5UX1BBVEhdLCBfcmVmW0NPTVBPTkVOVF9IQVNIXSA9IG1lcmdlSW5OZXdIYXNoKGNv
bXBvbmVudENlbGxbQ09NUE9ORU5UX0hBU0hdLCBoYXNoKSwgX3JlZltDT01QT05FTlRfUE9TSVRJ
T05BTF9QQVJBTVNdID0gY29tcG9uZW50Q2VsbFtDT01QT05FTlRfUE9TSVRJT05BTF9QQVJBTVNd
LCBfcmVmW0NPTVBPTkVOVF9DRUxMXSA9IHRydWUsIF9yZWY7CisgIH0KKworICBmdW5jdGlvbiBw
cm9jZXNzUG9zaXRpb25hbFBhcmFtc0Zyb21DZWxsKGNvbXBvbmVudENlbGwsIHBhcmFtcywgaGFz
aCkgeworICAgIHZhciBwb3NpdGlvbmFsUGFyYW1zID0gY29tcG9uZW50Q2VsbFtDT01QT05FTlRf
UE9TSVRJT05BTF9QQVJBTVNdOworCisgICAgX2VtYmVySHRtbGJhcnNVdGlsc0V4dHJhY3RQb3Np
dGlvbmFsUGFyYW1zLnByb2Nlc3NQb3NpdGlvbmFsUGFyYW1zKG51bGwsIHBvc2l0aW9uYWxQYXJh
bXMsIHBhcmFtcywgaGFzaCk7CisgIH0KKworICBmdW5jdGlvbiBjcmVhdGVOZXdDbG9zdXJlQ29t
cG9uZW50Q2VsbChlbnYsIGNvbXBvbmVudFBhdGgsIHBhcmFtcywgaGFzaCkgeworICAgIHZhciBf
cmVmMjsKKworICAgIHZhciBwb3NpdGlvbmFsUGFyYW1zID0gZ2V0UG9zaXRpb25hbFBhcmFtcyhl
bnYub3duZXIsIGNvbXBvbmVudFBhdGgpOworCisgICAgLy8gVGhpcyBuZWVkcyB0byBiZSBkb25l
IGluIGVhY2ggbmVzdGluZyBsZXZlbCB0byBhdm9pZCByYWlzaW5nIGFzc2VydGlvbnMuCisgICAg
X2VtYmVySHRtbGJhcnNVdGlsc0V4dHJhY3RQb3NpdGlvbmFsUGFyYW1zLnByb2Nlc3NQb3NpdGlv
bmFsUGFyYW1zKG51bGwsIHBvc2l0aW9uYWxQYXJhbXMsIHBhcmFtcywgaGFzaCk7CisKKyAgICBy
ZXR1cm4gX3JlZjIgPSB7fSwgX3JlZjJbQ09NUE9ORU5UX1BBVEhdID0gY29tcG9uZW50UGF0aCwg
X3JlZjJbQ09NUE9ORU5UX0hBU0hdID0gaGFzaCwgX3JlZjJbQ09NUE9ORU5UX1BPU0lUSU9OQUxf
UEFSQU1TXSA9IHBvc2l0aW9uYWxQYXJhbXMsIF9yZWYyW0NPTVBPTkVOVF9DRUxMXSA9IHRydWUs
IF9yZWYyOworICB9CisKKyAgLyoKKyAgIFJldHVybnMgdGhlIHBvc2l0aW9uYWwgcGFyYW1ldGVy
cyBmb3IgY29tcG9uZW50IGBjb21wb25lbnRQYXRoYC4KKyAgIElmIGl0IGhhcyBubyBwb3NpdGlv
bmFsIHBhcmFtZXRlcnMsIGl0IHJldHVybnMgdGhlIGVtcHR5IGFycmF5LgorICAgKi8KKyAgZnVu
Y3Rpb24gZ2V0UG9zaXRpb25hbFBhcmFtcyhjb250YWluZXIsIGNvbXBvbmVudFBhdGgpIHsKKyAg
ICBpZiAoIWNvbXBvbmVudFBhdGgpIHsKKyAgICAgIHJldHVybiBbXTsKKyAgICB9CisgICAgdmFy
IHJlc3VsdCA9IF9lbWJlckh0bWxiYXJzVXRpbHNMb29rdXBDb21wb25lbnQuZGVmYXVsdChjb250
YWluZXIsIGNvbXBvbmVudFBhdGgpOworICAgIHZhciBjb21wb25lbnQgPSByZXN1bHQuY29tcG9u
ZW50OworCisgICAgaWYgKGNvbXBvbmVudCAmJiBjb21wb25lbnQucG9zaXRpb25hbFBhcmFtcykg
eworICAgICAgcmV0dXJuIGNvbXBvbmVudC5wb3NpdGlvbmFsUGFyYW1zOworICAgIH0gZWxzZSB7
CisgICAgICByZXR1cm4gW107CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gbWVyZ2VJbk5ld0hh
c2gob3JpZ2luYWwsIHVwZGF0ZXMpIHsKKyAgICByZXR1cm4gX2VtYmVyTWV0YWxBc3NpZ24uZGVm
YXVsdCh7fSwgb3JpZ2luYWwsIHVwZGF0ZXMpOworICB9Cit9KTsKK2VuaWZlZCgnZW1iZXItaHRt
bGJhcnMva2V5d29yZHMvY29tcG9uZW50JywgWydleHBvcnRzJywgJ2h0bWxiYXJzLXJ1bnRpbWUv
aG9va3MnLCAnZW1iZXItaHRtbGJhcnMva2V5d29yZHMvY2xvc3VyZS1jb21wb25lbnQnLCAnZW1i
ZXItbWV0YWwvZW1wdHlfb2JqZWN0JywgJ2VtYmVyLW1ldGFsL2Fzc2lnbiddLCBmdW5jdGlvbiAo
ZXhwb3J0cywgX2h0bWxiYXJzUnVudGltZUhvb2tzLCBfZW1iZXJIdG1sYmFyc0tleXdvcmRzQ2xv
c3VyZUNvbXBvbmVudCwgX2VtYmVyTWV0YWxFbXB0eV9vYmplY3QsIF9lbWJlck1ldGFsQXNzaWdu
KSB7CisgIC8qKgorICAgIEBtb2R1bGUgZW1iZXIKKyAgICBAc3VibW9kdWxlIGVtYmVyLXRlbXBs
YXRlcworICAgIEBwdWJsaWMKKyAgKi8KKyAgJ3VzZSBzdHJpY3QnOworCisgIC8qKgorICAgIFRo
ZSBge3tjb21wb25lbnR9fWAgaGVscGVyIGxldHMgeW91IGFkZCBpbnN0YW5jZXMgb2YgYEVtYmVy
LkNvbXBvbmVudGAgdG8gYQorICAgIHRlbXBsYXRlLiBTZWUgW0VtYmVyLkNvbXBvbmVudF0oL2Fw
aS9jbGFzc2VzL0VtYmVyLkNvbXBvbmVudC5odG1sKSBmb3IKKyAgICBhZGRpdGlvbmFsIGluZm9y
bWF0aW9uIG9uIGhvdyBhIGBDb21wb25lbnRgIGZ1bmN0aW9ucy4KKyAgICBge3tjb21wb25lbnR9
fWAncyBwcmltYXJ5IHVzZSBpcyBmb3IgY2FzZXMgd2hlcmUgeW91IHdhbnQgdG8gZHluYW1pY2Fs
bHkKKyAgICBjaGFuZ2Ugd2hpY2ggdHlwZSBvZiBjb21wb25lbnQgaXMgcmVuZGVyZWQgYXMgdGhl
IHN0YXRlIG9mIHlvdXIgYXBwbGljYXRpb24KKyAgICBjaGFuZ2VzLiBUaGUgcHJvdmlkZWQgYmxv
Y2sgd2lsbCBiZSBhcHBsaWVkIGFzIHRoZSB0ZW1wbGF0ZSBmb3IgdGhlIGNvbXBvbmVudC4KKyAg
ICBHaXZlbiBhbiBlbXB0eSBgPGJvZHk+YCB0aGUgZm9sbG93aW5nIHRlbXBsYXRlOgorICAKKyAg
ICBgYGBoYW5kbGViYXJzCisgICAge3shIGFwcGxpY2F0aW9uLmhicyB9fQorICAgIHt7Y29tcG9u
ZW50IGluZm9ncmFwaGljQ29tcG9uZW50TmFtZX19CisgICAgYGBgCisgIAorICAgIEFuZCB0aGUg
Zm9sbG93aW5nIGFwcGxpY2F0aW9uIGNvZGU6CisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAgICBl
eHBvcnQgZGVmYXVsdCBFbWJlci5Db250cm9sbGVyLmV4dGVuZCh7CisgICAgICBpbmZvZ3JhcGhp
Y0NvbXBvbmVudE5hbWU6IGNvbXB1dGVkKCdpc01hcmtldE9wZW4nLCB7CisgICAgICAgIGdldCgp
IHsKKyAgICAgICAgICBpZiAodGhpcy5nZXQoJ2lzTWFya2V0T3BlbicpKSB7CisgICAgICAgICAg
ICByZXR1cm4gJ2xpdmUtdXBkYXRpbmctY2hhcnQnOworICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICByZXR1cm4gJ21hcmtldC1jbG9zZS1zdW1tYXJ5JzsKKyAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgIH0pCisgICAgfSk7CisgICAgYGBgCisgIAorICAgIFRoZSBgbGl2ZS11cGRh
dGluZy1jaGFydGAgY29tcG9uZW50IHdpbGwgYmUgYXBwZW5kZWQgd2hlbiBgaXNNYXJrZXRPcGVu
YCBpcworICAgIGB0cnVlYCwgYW5kIHRoZSBgbWFya2V0LWNsb3NlLXN1bW1hcnlgIGNvbXBvbmVu
dCB3aWxsIGJlIGFwcGVuZGVkIHdoZW4KKyAgICBgaXNNYXJrZXRPcGVuYCBpcyBgZmFsc2VgLiBJ
ZiB0aGUgdmFsdWUgY2hhbmdlcyB3aGlsZSB0aGUgYXBwIGlzIHJ1bm5pbmcsCisgICAgdGhlIGNv
bXBvbmVudCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3dhcHBlZCBvdXQgYWNjb3JkaW5nbHkuCisg
ICAgTm90ZTogWW91IHNob3VsZCBub3QgdXNlIHRoaXMgaGVscGVyIHdoZW4geW91IGFyZSBjb25z
aXN0ZW50bHkgcmVuZGVyaW5nIHRoZSBzYW1lCisgICAgY29tcG9uZW50LiBJbiB0aGF0IGNhc2Us
IHVzZSBzdGFuZGFyZCBjb21wb25lbnQgc3ludGF4LCBmb3IgZXhhbXBsZToKKyAgCisgICAgYGBg
aGFuZGxlYmFycworICAgIHt7ISBhcHBsaWNhdGlvbi5oYnMgfX0KKyAgICB7e2xpdmUtdXBkYXRp
bmctY2hhcnR9fQorICAgIGBgYAorICAKKyAgICAjIyBOZXN0ZWQgVXNhZ2UKKyAgCisgICAgVGhl
IGBjb21wb25lbnRgIGhlbHBlciBjYW4gYmUgdXNlZCB0byBwYWNrYWdlIGEgY29tcG9uZW50IHBh
dGggd2l0aCBpbml0aWFsIGF0dHJzLgorICAgIFRoZSBpbmNsdWRlZCBhdHRycyBjYW4gdGhlbiBi
ZSBtZXJnZWQgZHVyaW5nIHRoZSBmaW5hbCBpbnZvY2F0aW9uLgorICAKKyAgICBGb3IgZXhhbXBs
ZSwgZ2l2ZW4gYSBgcGVyc29uLWZvcm1gIGNvbXBvbmVudCB3aXRoIHRoZSBmb2xsb3dpbmcgdGVt
cGxhdGU6CisgIAorICAgIGBgYGhhbmRsZWJhcnMKKyAgICB7e3lpZWxkIChoYXNoCisgICAgICAg
IG5hbWVJbnB1dD0oY29tcG9uZW50ICJteS1pbnB1dC1jb21wb25lbnQiIHZhbHVlPW1vZGVsLm5h
bWUgcGxhY2Vob2xkZXI9IkZpcnN0IE5hbWUiKSl9fQorICAgIGBgYAorICAKKyAgICBUaGUgZm9s
bG93aW5nIHNuaXBwZXQ6CisgIAorICAgIGBgYAorICAgIHt7I3BlcnNvbi1mb3JtIGFzIHxmb3Jt
fH19CisgICAgICB7e2NvbXBvbmVudCBmb3JtLm5hbWVJbnB1dCBwbGFjZWhvbGRlcj0iVXNlcm5h
bWUifX0KKyAgICB7ey9wZXJzb24tZm9ybX19CisgICAgYGBgCisgIAorICAgIHdvdWxkIG91dHB1
dCBhbiBpbnB1dCB3aG9zZSB2YWx1ZSBpcyBhbHJlYWR5IGJvdW5kIHRvIGBtb2RlbC5uYW1lYCBh
bmQgYHBsYWNlaG9sZGVyYAorICAgIGlzICJVc2VybmFtZSIuCisgIAorICAgIEBtZXRob2QgY29t
cG9uZW50CisgICAgQHNpbmNlIDEuMTEuMAorICAgIEBmb3IgRW1iZXIuVGVtcGxhdGVzLmhlbHBl
cnMKKyAgICBAcHVibGljCisgICovCisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKG1v
cnBoLCBlbnYsIHNjb3BlLCBwYXJhbXMsIGhhc2gsIHRlbXBsYXRlLCBpbnZlcnNlLCB2aXNpdG9y
KSB7CisgICAgaWYgKCFtb3JwaCkgeworICAgICAgcmV0dXJuIF9lbWJlckh0bWxiYXJzS2V5d29y
ZHNDbG9zdXJlQ29tcG9uZW50LmRlZmF1bHQoZW52LCBwYXJhbXMsIGhhc2gpOworICAgIH0KKwor
ICAgIHZhciBuZXdIYXNoID0gX2VtYmVyTWV0YWxBc3NpZ24uZGVmYXVsdChuZXcgX2VtYmVyTWV0
YWxFbXB0eV9vYmplY3QuZGVmYXVsdCgpLCBoYXNoKTsKKworICAgIF9odG1sYmFyc1J1bnRpbWVI
b29rcy5rZXl3b3JkKCdAZWxlbWVudF9jb21wb25lbnQnLCBtb3JwaCwgZW52LCBzY29wZSwgcGFy
YW1zLCBuZXdIYXNoLCB0ZW1wbGF0ZSwgaW52ZXJzZSwgdmlzaXRvcik7CisgICAgcmV0dXJuIHRy
dWU7CisgIH07Cit9KTsKK2VuaWZlZCgnZW1iZXItaHRtbGJhcnMva2V5d29yZHMvZGVidWdnZXIn
LCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvZGVidWcnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9l
bWJlck1ldGFsRGVidWcpIHsKKyAgLypqc2hpbnQgZGVidWc6dHJ1ZSovCisKKyAgLyoqCisgIEBt
b2R1bGUgZW1iZXIKKyAgQHN1Ym1vZHVsZSBlbWJlci1odG1sYmFycworICAqLworCisgICd1c2Ug
c3RyaWN0JzsKKworICBleHBvcnRzLmRlZmF1bHQgPSBkZWJ1Z2dlcktleXdvcmQ7CisKKyAgLyoq
CisgICAgRXhlY3V0ZSB0aGUgYGRlYnVnZ2VyYCBzdGF0ZW1lbnQgaW4gdGhlIGN1cnJlbnQgdGVt
cGxhdGUncyBjb250ZXh0LgorICAKKyAgICBgYGBoYW5kbGViYXJzCisgICAge3tkZWJ1Z2dlcn19
CisgICAgYGBgCisgIAorICAgIFdoZW4gdXNpbmcgdGhlIGRlYnVnZ2VyIGhlbHBlciB5b3Ugd2ls
bCBoYXZlIGFjY2VzcyB0byBhIGBnZXRgIGZ1bmN0aW9uLiBUaGlzCisgICAgZnVuY3Rpb24gcmV0
cmlldmVzIHZhbHVlcyBhdmFpbGFibGUgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHRlbXBsYXRlLgor
ICAgIEZvciBleGFtcGxlLCBpZiB5b3UncmUgd29uZGVyaW5nIHdoeSBhIHZhbHVlIGB7e2Zvb319
YCBpc24ndCByZW5kZXJpbmcgYXMKKyAgICBleHBlY3RlZCB3aXRoaW4gYSB0ZW1wbGF0ZSwgeW91
IGNvdWxkIHBsYWNlIGEgYHt7ZGVidWdnZXJ9fWAgc3RhdGVtZW50IGFuZCwKKyAgICB3aGVuIHRo
ZSBgZGVidWdnZXI7YCBicmVha3BvaW50IGlzIGhpdCwgeW91IGNhbiBhdHRlbXB0IHRvIHJldHJp
ZXZlIHRoaXMgdmFsdWU6CisgIAorICAgIGBgYAorICAgID4gZ2V0KCdmb28nKQorICAgIGBgYAor
ICAKKyAgICBgZ2V0YCBpcyBhbHNvIGF3YXJlIG9mIGtleXdvcmRzLiBTbyBpbiB0aGlzIHNpdHVh
dGlvbgorICAKKyAgICBgYGBoYW5kbGViYXJzCisgICAge3sjZWFjaCBpdGVtcyBhcyB8aXRlbXx9
fQorICAgICAge3tkZWJ1Z2dlcn19CisgICAge3svZWFjaH19CisgICAgYGBgCisgIAorICAgIFlv
dSdsbCBiZSBhYmxlIHRvIGdldCB2YWx1ZXMgZnJvbSB0aGUgY3VycmVudCBpdGVtOgorICAKKyAg
ICBgYGAKKyAgICA+IGdldCgnaXRlbS5uYW1lJykKKyAgICBgYGAKKyAgCisgICAgWW91IGNhbiBh
bHNvIGFjY2VzcyB0aGUgY29udGV4dCBvZiB0aGUgdmlldyB0byBtYWtlIHN1cmUgaXQgaXMgdGhl
IG9iamVjdCB0aGF0CisgICAgeW91IGV4cGVjdDoKKyAgCisgICAgYGBgCisgICAgPiBjb250ZXh0
CisgICAgYGBgCisgIAorICAgIEBtZXRob2QgZGVidWdnZXIKKyAgICBAZm9yIEVtYmVyLlRlbXBs
YXRlcy5oZWxwZXJzCisgICAgQHB1YmxpYworICAqLworCisgIGZ1bmN0aW9uIGRlYnVnZ2VyS2V5
d29yZChtb3JwaCwgZW52LCBzY29wZSkgeworICAgIC8qIGpzaGludCB1bnVzZWQ6IGZhbHNlLCBk
ZWJ1ZzogdHJ1ZSAqLworCisgICAgdmFyIHZpZXcgPSBlbnYuaG9va3MuZ2V0VmFsdWUoc2NvcGUu
Z2V0TG9jYWwoJ3ZpZXcnKSk7CisgICAgdmFyIGNvbnRleHQgPSBlbnYuaG9va3MuZ2V0VmFsdWUo
c2NvcGUuZ2V0U2VsZigpKTsKKworICAgIGZ1bmN0aW9uIGdldChwYXRoKSB7CisgICAgICByZXR1
cm4gZW52Lmhvb2tzLmdldFZhbHVlKGVudi5ob29rcy5nZXQoZW52LCBzY29wZSwgcGF0aCkpOwor
ICAgIH0KKworICAgIF9lbWJlck1ldGFsRGVidWcuaW5mbygnVXNlIGB2aWV3YCwgYGNvbnRleHRg
LCBhbmQgYGdldCg8cGF0aD4pYCB0byBkZWJ1ZyB0aGlzIHRlbXBsYXRlLicpOworCisgICAgZGVi
dWdnZXI7CisKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorfSk7CitlbmlmZWQoJ2VtYmVyLWh0bWxi
YXJzL2tleXdvcmRzL2VsZW1lbnQtY29tcG9uZW50JywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFs
L2Fzc2lnbicsICdlbWJlci1odG1sYmFycy9rZXl3b3Jkcy9jbG9zdXJlLWNvbXBvbmVudCcsICdl
bWJlci1odG1sYmFycy91dGlscy9sb29rdXAtY29tcG9uZW50JywgJ2VtYmVyLWh0bWxiYXJzL3V0
aWxzL2V4dHJhY3QtcG9zaXRpb25hbC1wYXJhbXMnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJl
ck1ldGFsQXNzaWduLCBfZW1iZXJIdG1sYmFyc0tleXdvcmRzQ2xvc3VyZUNvbXBvbmVudCwgX2Vt
YmVySHRtbGJhcnNVdGlsc0xvb2t1cENvbXBvbmVudCwgX2VtYmVySHRtbGJhcnNVdGlsc0V4dHJh
Y3RQb3NpdGlvbmFsUGFyYW1zKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICBleHBvcnRzLmRlZmF1
bHQgPSB7CisgICAgc2V0dXBTdGF0ZTogZnVuY3Rpb24gKGxhc3RTdGF0ZSwgZW52LCBzY29wZSwg
cGFyYW1zLCBoYXNoKSB7CisgICAgICB2YXIgY29tcG9uZW50UGF0aCA9IGdldENvbXBvbmVudFBh
dGgocGFyYW1zWzBdLCBlbnYpOworICAgICAgcmV0dXJuIF9lbWJlck1ldGFsQXNzaWduLmRlZmF1
bHQoe30sIGxhc3RTdGF0ZSwgeworICAgICAgICBjb21wb25lbnRQYXRoOiBjb21wb25lbnRQYXRo
LAorICAgICAgICBpc0NvbXBvbmVudEhlbHBlcjogdHJ1ZQorICAgICAgfSk7CisgICAgfSwKKwor
ICAgIHJlbmRlcjogZnVuY3Rpb24gKG1vcnBoKSB7CisgICAgICB2YXIgc3RhdGUgPSBtb3JwaC5n
ZXRTdGF0ZSgpOworCisgICAgICBpZiAoc3RhdGUubWFuYWdlcikgeworICAgICAgICBzdGF0ZS5t
YW5hZ2VyLmRlc3Ryb3koKTsKKyAgICAgIH0KKworICAgICAgLy8gRm9yY2UgdGhlIGNvbXBvbmVu
dCBob29rIHRvIHRyZWF0IHRoaXMgYXMgYSBmaXJzdC10aW1lIHJlbmRlciwKKyAgICAgIC8vIGJl
Y2F1c2Ugbm9ybWFsIGNvbXBvbmVudHMgKGA8Zm9vLWJhcj5gKSBjYW5ub3QgY2hhbmdlIGF0IHJ1
bnRpbWUsCisgICAgICAvLyBidXQgdGhlIGB7e2NvbXBvbmVudH19YCBoZWxwZXIgY2FuLgorICAg
ICAgc3RhdGUubWFuYWdlciA9IG51bGw7CisKKyAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVu
dHMubGVuZ3RoLCByZXN0ID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0g
MTsgX2tleSA8IF9sZW47IF9rZXkrKykgeworICAgICAgICByZXN0W19rZXkgLSAxXSA9IGFyZ3Vt
ZW50c1tfa2V5XTsKKyAgICAgIH0KKworICAgICAgcmVuZGVyLmFwcGx5KHVuZGVmaW5lZCwgW21v
cnBoXS5jb25jYXQocmVzdCkpOworICAgIH0sCisKKyAgICByZXJlbmRlcjogcmVuZGVyCisgIH07
CisKKyAgZnVuY3Rpb24gZ2V0Q29tcG9uZW50UGF0aChwYXJhbSwgZW52KSB7CisgICAgdmFyIHBh
dGggPSBlbnYuaG9va3MuZ2V0VmFsdWUocGFyYW0pOworICAgIGlmIChfZW1iZXJIdG1sYmFyc0tl
eXdvcmRzQ2xvc3VyZUNvbXBvbmVudC5pc0NvbXBvbmVudENlbGwocGF0aCkpIHsKKyAgICAgIHBh
dGggPSBwYXRoW19lbWJlckh0bWxiYXJzS2V5d29yZHNDbG9zdXJlQ29tcG9uZW50LkNPTVBPTkVO
VF9QQVRIXTsKKyAgICB9CisgICAgcmV0dXJuIHBhdGg7CisgIH0KKworICBmdW5jdGlvbiByZW5k
ZXIobW9ycGgsIGVudiwgc2NvcGUsIF9yZWYsIGhhc2gsIHRlbXBsYXRlLCBpbnZlcnNlLCB2aXNp
dG9yKSB7CisgICAgdmFyIHBhdGggPSBfcmVmWzBdOworCisgICAgdmFyIHBhcmFtcyA9IF9yZWYu
c2xpY2UoMSk7CisKKyAgICB2YXIgaXNSZXJlbmRlciA9IGFyZ3VtZW50cy5sZW5ndGggPD0gOCB8
fCBhcmd1bWVudHNbOF0gPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogYXJndW1lbnRzWzhdOworCisg
ICAgdmFyIF9tb3JwaCRnZXRTdGF0ZSA9IG1vcnBoLmdldFN0YXRlKCk7CisKKyAgICB2YXIgY29t
cG9uZW50UGF0aCA9IF9tb3JwaCRnZXRTdGF0ZS5jb21wb25lbnRQYXRoOworCisgICAgLy8gSWYg
dGhlIHZhbHVlIHBhc3NlZCB0byB0aGUge3tjb21wb25lbnR9fSBoZWxwZXIgaXMgdW5kZWZpbmVk
IG9yIG51bGwsCisgICAgLy8gZG9uJ3QgY3JlYXRlIGEgbmV3IENvbXBvbmVudE5vZGUuCisgICAg
aWYgKGNvbXBvbmVudFBhdGggPT09IHVuZGVmaW5lZCB8fCBjb21wb25lbnRQYXRoID09PSBudWxs
KSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgcGF0aCA9IGVudi5ob29rcy5nZXRWYWx1
ZShwYXRoKTsKKworICAgIGlmIChpc1JlcmVuZGVyKSB7CisgICAgICB2YXIgcmVzdWx0ID0gX2Vt
YmVySHRtbGJhcnNVdGlsc0xvb2t1cENvbXBvbmVudC5kZWZhdWx0KGVudi5vd25lciwgY29tcG9u
ZW50UGF0aCk7CisgICAgICB2YXIgY29tcG9uZW50ID0gcmVzdWx0LmNvbXBvbmVudDsKKworICAg
ICAgX2VtYmVySHRtbGJhcnNVdGlsc0V4dHJhY3RQb3NpdGlvbmFsUGFyYW1zLmRlZmF1bHQobnVs
bCwgY29tcG9uZW50LCBwYXJhbXMsIGhhc2gpOworICAgIH0KKworICAgIGlmIChfZW1iZXJIdG1s
YmFyc0tleXdvcmRzQ2xvc3VyZUNvbXBvbmVudC5pc0NvbXBvbmVudENlbGwocGF0aCkpIHsKKyAg
ICAgIHZhciBjbG9zdXJlQ29tcG9uZW50ID0gZW52Lmhvb2tzLmdldFZhbHVlKHBhdGgpOworCisg
ICAgICAvLyBUaGlzIG5lZWRzIHRvIGJlIGRvbmUgaW4gZWFjaCBuZXN0aW5nIGxldmVsIHRvIGF2
b2lkIHJhaXNpbmcgYXNzZXJ0aW9ucworICAgICAgX2VtYmVySHRtbGJhcnNLZXl3b3Jkc0Nsb3N1
cmVDb21wb25lbnQucHJvY2Vzc1Bvc2l0aW9uYWxQYXJhbXNGcm9tQ2VsbChjbG9zdXJlQ29tcG9u
ZW50LCBwYXJhbXMsIGhhc2gpOworICAgICAgcGFyYW1zID0gW107CisgICAgICBoYXNoID0gX2Vt
YmVySHRtbGJhcnNLZXl3b3Jkc0Nsb3N1cmVDb21wb25lbnQubWVyZ2VJbk5ld0hhc2goY2xvc3Vy
ZUNvbXBvbmVudFtfZW1iZXJIdG1sYmFyc0tleXdvcmRzQ2xvc3VyZUNvbXBvbmVudC5DT01QT05F
TlRfSEFTSF0sIGhhc2gpOworICAgIH0KKworICAgIHZhciB0ZW1wbGF0ZXMgPSB7IGRlZmF1bHQ6
IHRlbXBsYXRlLCBpbnZlcnNlOiBpbnZlcnNlIH07CisgICAgZW52Lmhvb2tzLmNvbXBvbmVudCht
b3JwaCwgZW52LCBzY29wZSwgY29tcG9uZW50UGF0aCwgcGFyYW1zLCBoYXNoLCB0ZW1wbGF0ZXMs
IHZpc2l0b3IpOworICB9Cit9KTsKK2VuaWZlZCgnZW1iZXItaHRtbGJhcnMva2V5d29yZHMvZ2V0
JywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLW1ldGFsL3N0cmVhbXMv
c3RyZWFtJywgJ2VtYmVyLW1ldGFsL3N0cmVhbXMvdXRpbHMnLCAnZW1iZXItaHRtbGJhcnMvdXRp
bHMvc3Vic2NyaWJlJywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCcsICdlbWJlci1tZXRhbC9w
cm9wZXJ0eV9zZXQnLCAnZW1iZXItbWV0YWwvb2JzZXJ2ZXInXSwgZnVuY3Rpb24gKGV4cG9ydHMs
IF9lbWJlck1ldGFsRGVidWcsIF9lbWJlck1ldGFsU3RyZWFtc1N0cmVhbSwgX2VtYmVyTWV0YWxT
dHJlYW1zVXRpbHMsIF9lbWJlckh0bWxiYXJzVXRpbHNTdWJzY3JpYmUsIF9lbWJlck1ldGFsUHJv
cGVydHlfZ2V0LCBfZW1iZXJNZXRhbFByb3BlcnR5X3NldCwgX2VtYmVyTWV0YWxPYnNlcnZlcikg
eworICAvKioKKyAgQG1vZHVsZSBlbWJlcgorICBAc3VibW9kdWxlIGVtYmVyLXRlbXBsYXRlcwor
ICAqLworCisgICd1c2Ugc3RyaWN0JzsKKworICBmdW5jdGlvbiBsYWJlbEZvcihzb3VyY2UsIGtl
eSkgeworICAgIHZhciBzb3VyY2VMYWJlbCA9IHNvdXJjZS5sYWJlbCA/IHNvdXJjZS5sYWJlbCA6
ICcnOworICAgIHZhciBrZXlMYWJlbCA9IGtleS5sYWJlbCA/IGtleS5sYWJlbCA6ICcnOworICAg
IHJldHVybiAnKGdldCAnICsgc291cmNlTGFiZWwgKyAnICcgKyBrZXlMYWJlbCArICcpJzsKKyAg
fQorCisgIHZhciBEeW5hbWljS2V5U3RyZWFtID0gX2VtYmVyTWV0YWxTdHJlYW1zU3RyZWFtLmRl
ZmF1bHQuZXh0ZW5kKHsKKyAgICBpbml0OiBmdW5jdGlvbiAoc291cmNlLCBrZXlTb3VyY2UpIHsK
KyAgICAgIC8vIFVzZWQgdG8gZ2V0IHRoZSBvcmlnaW5hbCBwYXRoIGZvciBkZWJ1Z2dpbmcgcHVy
cG9zZXMuCisgICAgICB2YXIgbGFiZWwgPSBsYWJlbEZvcihzb3VyY2UsIGtleVNvdXJjZSk7CisK
KyAgICAgIHRoaXMubGFiZWwgPSBsYWJlbDsKKyAgICAgIHRoaXMucGF0aCA9IGxhYmVsOworICAg
ICAgdGhpcy5zb3VyY2VEZXAgPSB0aGlzLmFkZE11dGFibGVEZXBlbmRlbmN5KHNvdXJjZSk7Cisg
ICAgICB0aGlzLmtleURlcCA9IHRoaXMuYWRkTXV0YWJsZURlcGVuZGVuY3koa2V5U291cmNlKTsK
KyAgICAgIHRoaXMub2JzZXJ2ZWRPYmplY3QgPSBudWxsOworICAgICAgdGhpcy5vYnNlcnZlZEtl
eSA9IG51bGw7CisgICAgfSwKKworICAgIGtleTogZnVuY3Rpb24gKCkgeworICAgICAgdmFyIGtl
eSA9IHRoaXMua2V5RGVwLmdldFZhbHVlKCk7CisgICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ3N0
cmluZycpIHsKKyAgICAgICAgcmV0dXJuIGtleTsKKyAgICAgIH0KKyAgICB9LAorCisgICAgY29t
cHV0ZTogZnVuY3Rpb24gKCkgeworICAgICAgdmFyIG9iamVjdCA9IHRoaXMuc291cmNlRGVwLmdl
dFZhbHVlKCk7CisgICAgICB2YXIga2V5ID0gdGhpcy5rZXkoKTsKKyAgICAgIGlmIChvYmplY3Qg
JiYga2V5KSB7CisgICAgICAgIHJldHVybiBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQob2Jq
ZWN0LCBrZXkpOworICAgICAgfQorICAgIH0sCisKKyAgICBzZXRWYWx1ZTogZnVuY3Rpb24gKHZh
bHVlKSB7CisgICAgICB2YXIgb2JqZWN0ID0gdGhpcy5zb3VyY2VEZXAuZ2V0VmFsdWUoKTsKKyAg
ICAgIHZhciBrZXkgPSB0aGlzLmtleSgpOworICAgICAgaWYgKG9iamVjdCkgeworICAgICAgICBf
ZW1iZXJNZXRhbFByb3BlcnR5X3NldC5zZXQob2JqZWN0LCBrZXksIHZhbHVlKTsKKyAgICAgIH0K
KyAgICB9LAorCisgICAgX3N1cGVyJHJldmFsaWRhdGU6IF9lbWJlck1ldGFsU3RyZWFtc1N0cmVh
bS5kZWZhdWx0LnByb3RvdHlwZS5yZXZhbGlkYXRlLAorCisgICAgcmV2YWxpZGF0ZTogZnVuY3Rp
b24gKHZhbHVlKSB7CisgICAgICB0aGlzLl9zdXBlciRyZXZhbGlkYXRlKHZhbHVlKTsKKworICAg
ICAgdmFyIG9iamVjdCA9IHRoaXMuc291cmNlRGVwLmdldFZhbHVlKCk7CisgICAgICB2YXIga2V5
ID0gdGhpcy5rZXkoKTsKKyAgICAgIGlmIChvYmplY3QgIT09IHRoaXMub2JzZXJ2ZWRPYmplY3Qg
fHwga2V5ICE9PSB0aGlzLm9ic2VydmVkS2V5KSB7CisgICAgICAgIHRoaXMuX2NsZWFyT2JzZXJ2
ZWRPYmplY3QoKTsKKworICAgICAgICBpZiAob2JqZWN0ICYmIHR5cGVvZiBvYmplY3QgPT09ICdv
YmplY3QnICYmIGtleSkgeworICAgICAgICAgIF9lbWJlck1ldGFsT2JzZXJ2ZXIuYWRkT2JzZXJ2
ZXIob2JqZWN0LCBrZXksIHRoaXMsIHRoaXMubm90aWZ5KTsKKyAgICAgICAgICB0aGlzLm9ic2Vy
dmVkT2JqZWN0ID0gb2JqZWN0OworICAgICAgICAgIHRoaXMub2JzZXJ2ZWRLZXkgPSBrZXk7Cisg
ICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorCisgICAgX2NsZWFyT2JzZXJ2ZWRPYmplY3Q6IGZ1
bmN0aW9uICgpIHsKKyAgICAgIGlmICh0aGlzLm9ic2VydmVkT2JqZWN0KSB7CisgICAgICAgIF9l
bWJlck1ldGFsT2JzZXJ2ZXIucmVtb3ZlT2JzZXJ2ZXIodGhpcy5vYnNlcnZlZE9iamVjdCwgdGhp
cy5vYnNlcnZlZEtleSwgdGhpcywgdGhpcy5ub3RpZnkpOworICAgICAgICB0aGlzLm9ic2VydmVk
T2JqZWN0ID0gbnVsbDsKKyAgICAgICAgdGhpcy5vYnNlcnZlZEtleSA9IG51bGw7CisgICAgICB9
CisgICAgfQorICB9KTsKKworICB2YXIgYnVpbGRTdHJlYW0gPSBmdW5jdGlvbiBidWlsZFN0cmVh
bShwYXJhbXMpIHsKKyAgICB2YXIgb2JqUmVmID0gcGFyYW1zWzBdOworICAgIHZhciBwYXRoUmVm
ID0gcGFyYW1zWzFdOworCisgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1RoZSBmaXJzdCBh
cmd1bWVudCB0byB7e2dldH19IG11c3QgYmUgYSBzdHJlYW0nLCBfZW1iZXJNZXRhbFN0cmVhbXNV
dGlscy5pc1N0cmVhbShvYmpSZWYpKTsKKyAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgne3tn
ZXR9fSByZXF1aXJlcyBhdCBsZWFzdCB0d28gYXJndW1lbnRzJywgcGFyYW1zLmxlbmd0aCA+IDEp
OworCisgICAgdmFyIHN0cmVhbSA9IGJ1aWxkRHluYW1pY0tleVN0cmVhbShvYmpSZWYsIHBhdGhS
ZWYpOworCisgICAgcmV0dXJuIHN0cmVhbTsKKyAgfTsKKworICBmdW5jdGlvbiBidWlsZER5bmFt
aWNLZXlTdHJlYW0oc291cmNlLCBrZXlTb3VyY2UpIHsKKyAgICBpZiAoIV9lbWJlck1ldGFsU3Ry
ZWFtc1V0aWxzLmlzU3RyZWFtKGtleVNvdXJjZSkpIHsKKyAgICAgIHJldHVybiBzb3VyY2UuZ2V0
KGtleVNvdXJjZSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBuZXcgRHluYW1pY0tleVN0
cmVhbShzb3VyY2UsIGtleVNvdXJjZSk7CisgICAgfQorICB9CisKKyAgLyoqCisgICAgRHluYW1p
Y2FsbHkgbG9vayB1cCBhIHByb3BlcnR5IG9uIGFuIG9iamVjdC4gVGhlIHNlY29uZCBhcmd1bWVu
dCB0byBge3tnZXR9fWAKKyAgICBzaG91bGQgaGF2ZSBhIHN0cmluZyB2YWx1ZSwgYWx0aG91Z2gg
aXQgY2FuIGJlIGJvdW5kLgorICAKKyAgICBGb3IgZXhhbXBsZSwgdGhlc2UgdHdvIHVzYWdlcyBh
cmUgZXF1aXZpbGVudDoKKyAgCisgICAgYGBgaGFuZGxlYmFycworICAgIHt7cGVyc29uLmhlaWdo
dH19CisgICAge3tnZXQgcGVyc29uICJoZWlnaHQifX0KKyAgICBgYGAKKyAgCisgICAgSWYgdGhl
cmUgd2VyZSBzZXZlcmFsIGZhY3RzIGFib3V0IGEgcGVyc29uLCB0aGUgYHt7Z2V0fX1gIGhlbHBl
ciBjYW4gZHluYW1pY2FsbHkKKyAgICBwaWNrIG9uZToKKyAgCisgICAgYGBgaGFuZGxlYmFycwor
ICAgIHt7Z2V0IHBlcnNvbiBmYWN0TmFtZX19CisgICAgYGBgCisgIAorICAgIEZvciBhIG1vcmUg
Y29tcGxleCBleGFtcGxlLCB0aGlzIHRlbXBsYXRlIHdvdWxkIGFsbG93IHRoZSB1c2VyIHRvIHN3
aXRjaAorICAgIGJldHdlZW4gc2hvd2luZyB0aGUgdXNlcidzIGhlaWdodCBhbmQgd2VpZ2h0IHdp
dGggYSBjbGljazoKKyAgCisgICAgYGBgaGFuZGxlYmFycworICAgIHt7Z2V0IHBlcnNvbiBmYWN0
TmFtZX19CisgICAgPGJ1dHRvbiB7e2FjdGlvbiAobXV0IGZhY3ROYW1lKSAiaGVpZ2h0In19PlNo
b3cgaGVpZ2h0PC9idXR0b24+CisgICAgPGJ1dHRvbiB7e2FjdGlvbiAobXV0IGZhY3ROYW1lKSAi
d2VpZ2h0In19PlNob3cgd2VpZ2h0PC9idXR0b24+CisgICAgYGBgCisgIAorICAgIFRoZSBge3tn
ZXR9fWAgaGVscGVyIGNhbiBhbHNvIHJlc3BlY3QgbXV0YWJsZSB2YWx1ZXMgaXRzZWxmLiBGb3Ig
ZXhhbXBsZToKKyAgCisgICAgYGBgaGFuZGxlYmFycworICAgIHt7aW5wdXQgdmFsdWU9KG11dCAo
Z2V0IHBlcnNvbiBmYWN0TmFtZSkpIHR5cGU9InRleHQifX0KKyAgICA8YnV0dG9uIHt7YWN0aW9u
IChtdXQgZmFjdE5hbWUpICJoZWlnaHQifX0+U2hvdyBoZWlnaHQ8L2J1dHRvbj4KKyAgICA8YnV0
dG9uIHt7YWN0aW9uIChtdXQgZmFjdE5hbWUpICJ3ZWlnaHQifX0+U2hvdyB3ZWlnaHQ8L2J1dHRv
bj4KKyAgICBgYGAKKyAgCisgICAgV291bGQgYWxsb3cgdGhlIHVzZXIgdG8gc3dhcCB3aGF0IGZh
Y3QgaXMgYmVpbmcgZGlzcGxheWVkLCBhbmQgYWxzbyBlZGl0CisgICAgdGhhdCBmYWN0IHZpYSBh
IHR3by13YXkgbXV0YWJsZSBiaW5kaW5nLgorICAKKyAgICBAcHVibGljCisgICAgQG1ldGhvZCBn
ZXQKKyAgICBAZm9yIEVtYmVyLlRlbXBsYXRlcy5oZWxwZXJzCisgICAgQHNpbmNlIDIuMS4wCisg
ICovCisgIGZ1bmN0aW9uIGdldEtleXdvcmQobW9ycGgsIGVudiwgc2NvcGUsIHBhcmFtcywgaGFz
aCwgdGVtcGxhdGUsIGludmVyc2UsIHZpc2l0b3IpIHsKKyAgICBpZiAobW9ycGggPT09IG51bGwp
IHsKKyAgICAgIHJldHVybiBidWlsZFN0cmVhbShwYXJhbXMpOworICAgIH0gZWxzZSB7CisgICAg
ICB2YXIgc3RyZWFtID0gdW5kZWZpbmVkOworICAgICAgaWYgKG1vcnBoLmxpbmtlZFJlc3VsdCkg
eworICAgICAgICBzdHJlYW0gPSBtb3JwaC5saW5rZWRSZXN1bHQ7CisgICAgICB9IGVsc2Ugewor
ICAgICAgICBzdHJlYW0gPSBidWlsZFN0cmVhbShwYXJhbXMpOworCisgICAgICAgIF9lbWJlckh0
bWxiYXJzVXRpbHNTdWJzY3JpYmUuZGVmYXVsdChtb3JwaCwgZW52LCBzY29wZSwgc3RyZWFtKTsK
KyAgICAgICAgZW52Lmhvb2tzLmxpbmtSZW5kZXJOb2RlKG1vcnBoLCBlbnYsIHNjb3BlLCBudWxs
LCBwYXJhbXMsIGhhc2gpOworCisgICAgICAgIG1vcnBoLmxpbmtlZFJlc3VsdCA9IHN0cmVhbTsK
KyAgICAgIH0KKyAgICAgIGVudi5ob29rcy5yYW5nZShtb3JwaCwgZW52LCBzY29wZSwgbnVsbCwg
c3RyZWFtLCB2aXNpdG9yKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIGV4
cG9ydHMuZGVmYXVsdCA9IGdldEtleXdvcmQ7Cit9KTsKK2VuaWZlZCgnZW1iZXItaHRtbGJhcnMv
a2V5d29yZHMvaW5wdXQnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvZGVidWcnLCAnZW1iZXIt
bWV0YWwvYXNzaWduJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbERlYnVnLCBfZW1i
ZXJNZXRhbEFzc2lnbikgeworICAvKioKKyAgQG1vZHVsZSBlbWJlcgorICBAc3VibW9kdWxlIGVt
YmVyLXRlbXBsYXRlcworICAqLworICAndXNlIHN0cmljdCc7CisKKyAgLyoqCisgICAgVGhlIGB7
e2lucHV0fX1gIGhlbHBlciBsZXRzIHlvdSBjcmVhdGUgYW4gSFRNTCBgPGlucHV0IC8+YCBjb21w
b25lbnQuCisgICAgSXQgY2F1c2VzIGFuIGBFbWJlci5UZXh0RmllbGRgIGNvbXBvbmVudCB0byBi
ZSByZW5kZXJlZC4gIEZvciBtb3JlIGluZm8sCisgICAgc2VlIHRoZSBbRW1iZXIuVGV4dEZpZWxk
XSgvYXBpL2NsYXNzZXMvRW1iZXIuVGV4dEZpZWxkLmh0bWwpIGRvY3MgYW5kCisgICAgdGhlIFt0
ZW1wbGF0ZXMgZ3VpZGVdKGh0dHA6Ly9lbWJlcmpzLmNvbS9ndWlkZXMvdGVtcGxhdGVzL2lucHV0
LWhlbHBlcnMvKS4KKyAgCisgICAgYGBgaGFuZGxlYmFycworICAgIHt7aW5wdXQgdmFsdWU9Ijk4
NyJ9fQorICAgIGBgYAorICAKKyAgICByZW5kZXJzIGFzOgorICAKKyAgICBgYGBIVE1MCisgICAg
PGlucHV0IHR5cGU9InRleHQiIHZhbHVlPSI5ODciIC8+CisgICAgYGBgCisgIAorICAgICMjIyBU
ZXh0IGZpZWxkCisgIAorICAgIElmIG5vIGB0eXBlYCBvcHRpb24gaXMgc3BlY2lmaWVkLCBhIGRl
ZmF1bHQgb2YgdHlwZSAndGV4dCcgaXMgdXNlZC4KKyAgCisgICAgTWFueSBvZiB0aGUgc3RhbmRh
cmQgSFRNTCBhdHRyaWJ1dGVzIG1heSBiZSBwYXNzZWQgdG8gdGhpcyBoZWxwZXIuCisgIAorICAg
IDx0YWJsZT4KKyAgICAgIDx0cj48dGQ+YHJlYWRvbmx5YDwvdGQ+PHRkPmByZXF1aXJlZGA8L3Rk
Pjx0ZD5gYXV0b2ZvY3VzYDwvdGQ+PC90cj4KKyAgICAgIDx0cj48dGQ+YHZhbHVlYDwvdGQ+PHRk
PmBwbGFjZWhvbGRlcmA8L3RkPjx0ZD5gZGlzYWJsZWRgPC90ZD48L3RyPgorICAgICAgPHRyPjx0
ZD5gc2l6ZWA8L3RkPjx0ZD5gdGFiaW5kZXhgPC90ZD48dGQ+YG1heGxlbmd0aGA8L3RkPjwvdHI+
CisgICAgICA8dHI+PHRkPmBuYW1lYDwvdGQ+PHRkPmBtaW5gPC90ZD48dGQ+YG1heGA8L3RkPjwv
dHI+CisgICAgICA8dHI+PHRkPmBwYXR0ZXJuYDwvdGQ+PHRkPmBhY2NlcHRgPC90ZD48dGQ+YGF1
dG9jb21wbGV0ZWA8L3RkPjwvdHI+CisgICAgICA8dHI+PHRkPmBhdXRvc2F2ZWA8L3RkPjx0ZD5g
Zm9ybWFjdGlvbmA8L3RkPjx0ZD5gZm9ybWVuY3R5cGVgPC90ZD48L3RyPgorICAgICAgPHRyPjx0
ZD5gZm9ybW1ldGhvZGA8L3RkPjx0ZD5gZm9ybW5vdmFsaWRhdGVgPC90ZD48dGQ+YGZvcm10YXJn
ZXRgPC90ZD48L3RyPgorICAgICAgPHRyPjx0ZD5gaGVpZ2h0YDwvdGQ+PHRkPmBpbnB1dG1vZGVg
PC90ZD48dGQ+YG11bHRpcGxlYDwvdGQ+PC90cj4KKyAgICAgIDx0cj48dGQ+YHN0ZXBgPC90ZD48
dGQ+YHdpZHRoYDwvdGQ+PHRkPmBmb3JtYDwvdGQ+PC90cj4KKyAgICAgIDx0cj48dGQ+YHNlbGVj
dGlvbkRpcmVjdGlvbmA8L3RkPjx0ZD5gc3BlbGxjaGVja2A8L3RkPjx0ZD4mbmJzcDs8L3RkPjwv
dHI+CisgICAgPC90YWJsZT4KKyAgCisgIAorICAgIFdoZW4gc2V0IHRvIGEgcXVvdGVkIHN0cmlu
ZywgdGhlc2UgdmFsdWVzIHdpbGwgYmUgZGlyZWN0bHkgYXBwbGllZCB0byB0aGUgSFRNTAorICAg
IGVsZW1lbnQuIFdoZW4gbGVmdCB1bnF1b3RlZCwgdGhlc2UgdmFsdWVzIHdpbGwgYmUgYm91bmQg
dG8gYSBwcm9wZXJ0eSBvbiB0aGUKKyAgICB0ZW1wbGF0ZSdzIGN1cnJlbnQgcmVuZGVyaW5nIGNv
bnRleHQgKG1vc3QgdHlwaWNhbGx5IGEgY29udHJvbGxlciBpbnN0YW5jZSkuCisgIAorICAKKyAg
ICBBIHZlcnkgY29tbW9uIHVzZSBvZiB0aGlzIGhlbHBlciBpcyB0byBiaW5kIHRoZSBgdmFsdWVg
IG9mIGFuIGlucHV0IHRvIGFuIE9iamVjdCdzIGF0dHJpYnV0ZToKKyAgCisgICAgYGBgaGFuZGxl
YmFycworICAgIFNlYXJjaDoKKyAgICB7e2lucHV0IHZhbHVlPXNlYXJjaFdvcmR9fQorICAgIGBg
YAorICAKKyAgICBJbiB0aGlzIGV4YW1wbGUsIHRoZSBpbml0YWwgdmFsdWUgaW4gdGhlIGA8aW5w
dXQgLz5gIHdpbGwgYmUgc2V0IHRvIHRoZSB2YWx1ZSBvZiBgc2VhcmNoV29yZGAuCisgICAgSWYg
dGhlIHVzZXIgY2hhbmdlcyB0aGUgdGV4dCwgdGhlIHZhbHVlIG9mIGBzZWFyY2hXb3JkYCB3aWxs
IGFsc28gYmUgdXBkYXRlZC4KKyAgCisgICAgIyMjIEFjdGlvbnMKKyAgICBUaGUgaGVscGVyIGNh
biBzZW5kIG11bHRpcGxlIGFjdGlvbnMgYmFzZWQgb24gdXNlciBldmVudHMuCisgICAgVGhlIGFj
dGlvbiBwcm9wZXJ0eSBkZWZpbmVzIHRoZSBhY3Rpb24gd2hpY2ggaXMgc2VudCB3aGVuCisgICAg
dGhlIHVzZXIgcHJlc3NlcyB0aGUgcmV0dXJuIGtleS4KKyAgCisgICAgYGBgaGFuZGxlYmFycwor
ICAgIHt7aW5wdXQgYWN0aW9uPSJzdWJtaXQifX0KKyAgICBgYGAKKyAgCisgICAgVGhlIGhlbHBl
ciBhbGxvd3Mgc29tZSB1c2VyIGV2ZW50cyB0byBzZW5kIGFjdGlvbnMuCisgIAorICAgICogYGVu
dGVyYAorICAgICogYGluc2VydC1uZXdsaW5lYAorICAgICogYGVzY2FwZS1wcmVzc2AKKyAgICAq
IGBmb2N1cy1pbmAKKyAgICAqIGBmb2N1cy1vdXRgCisgICAgKiBga2V5LXByZXNzYAorICAgICog
YGtleS11cGAKKyAgCisgIAorICAgIEZvciBleGFtcGxlLCBpZiB5b3UgZGVzaXJlIGFuIGFjdGlv
biB0byBiZSBzZW50IHdoZW4gdGhlIGlucHV0IGlzIGJsdXJyZWQsCisgICAgeW91IG9ubHkgbmVl
ZCB0byBzZXR1cCB0aGUgYWN0aW9uIG5hbWUgdG8gdGhlIGV2ZW50IG5hbWUgcHJvcGVydHkuCisg
IAorICAgIGBgYGhhbmRsZWJhcnMKKyAgICB7e2lucHV0IGZvY3VzLW91dD0iYWxlcnRNZXNzYWdl
In19CisgICAgYGBgCisgIAorICAgIFNlZSBtb3JlIGFib3V0IFtUZXh0IFN1cHBvcnQgQWN0aW9u
c10oL2FwaS9jbGFzc2VzL0VtYmVyLlRleHRGaWVsZC5odG1sKQorICAKKyAgCisgICAgIyMjIEV4
dGVuZGluZyBgRW1iZXIuVGV4dEZpZWxkYAorICAKKyAgICBJbnRlcm5hbGx5LCBge3tpbnB1dCB0
eXBlPSJ0ZXh0In19YCBjcmVhdGVzIGFuIGluc3RhbmNlIG9mIGBFbWJlci5UZXh0RmllbGRgLCBw
YXNzaW5nCisgICAgYXJndW1lbnRzIGZyb20gdGhlIGhlbHBlciB0byBgRW1iZXIuVGV4dEZpZWxk
YCdzIGBjcmVhdGVgIG1ldGhvZC4gWW91IGNhbiBleHRlbmQgdGhlCisgICAgY2FwYWJpbGl0aWVz
IG9mIHRleHQgaW5wdXRzIGluIHlvdXIgYXBwbGljYXRpb25zIGJ5IHJlb3BlbmluZyB0aGlzIGNs
YXNzLiBGb3IgZXhhbXBsZSwKKyAgICBpZiB5b3UgYXJlIGJ1aWxkaW5nIGEgQm9vdHN0cmFwIHBy
b2plY3Qgd2hlcmUgYGRhdGEtKmAgYXR0cmlidXRlcyBhcmUgdXNlZCwgeW91CisgICAgY2FuIGFk
ZCBvbmUgdG8gdGhlIGBUZXh0RmllbGRgJ3MgYGF0dHJpYnV0ZUJpbmRpbmdzYCBwcm9wZXJ0eToK
KyAgCisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAgICBFbWJlci5UZXh0RmllbGQucmVvcGVuKHsK
KyAgICAgIGF0dHJpYnV0ZUJpbmRpbmdzOiBbJ2RhdGEtZXJyb3InXQorICAgIH0pOworICAgIGBg
YAorICAKKyAgICBLZWVwIGluIG1pbmQgd2hlbiB3cml0aW5nIGBFbWJlci5UZXh0RmllbGRgIHN1
YmNsYXNzZXMgdGhhdCBgRW1iZXIuVGV4dEZpZWxkYAorICAgIGl0c2VsZiBleHRlbmRzIGBFbWJl
ci5Db21wb25lbnRgLiBFeHBlY3QgaXNvbGF0ZWQgY29tcG9uZW50IHNlbWFudGljcywgbm90Cisg
ICAgbGVnYWN5IDEueCB2aWV3IHNlbWFudGljcyAobGlrZSBgY29udHJvbGxlcmAgYmVpbmcgcHJl
c2VudCkuCisgIAorICAgIFNlZSBtb3JlIGFib3V0IFtFbWJlciBjb21wb25lbnRzXSgvYXBpL2Ns
YXNzZXMvRW1iZXIuQ29tcG9uZW50Lmh0bWwpCisgIAorICAKKyAgICAjIyMgQ2hlY2tib3gKKyAg
CisgICAgQ2hlY2tib3hlcyBhcmUgc3BlY2lhbCBmb3JtcyBvZiB0aGUgYHt7aW5wdXR9fWAgaGVs
cGVyLiAgVG8gY3JlYXRlIGEgYDxjaGVja2JveCAvPmA6CisgIAorICAgIGBgYGhhbmRsZWJhcnMK
KyAgICBFbWJlcml6ZSBFdmVyeXRoaW5nOgorICAgIHt7aW5wdXQgdHlwZT0iY2hlY2tib3giIG5h
bWU9ImlzRW1iZXJpemVkIiBjaGVja2VkPWlzRW1iZXJpemVkfX0KKyAgICBgYGAKKyAgCisgICAg
VGhpcyB3aWxsIGJpbmQgY2hlY2tlZCBzdGF0ZSBvZiB0aGlzIGNoZWNrYm94IHRvIHRoZSB2YWx1
ZSBvZiBgaXNFbWJlcml6ZWRgICAtLSBpZiBlaXRoZXIgb25lIGNoYW5nZXMsCisgICAgaXQgd2ls
bCBiZSByZWZsZWN0ZWQgaW4gdGhlIG90aGVyLgorICAKKyAgCisgICAgVGhlIGZvbGxvd2luZyBI
VE1MIGF0dHJpYnV0ZXMgY2FuIGJlIHNldCB2aWEgdGhlIGhlbHBlcjoKKyAgCisgICAgKiBgY2hl
Y2tlZGAKKyAgICAqIGBkaXNhYmxlZGAKKyAgICAqIGB0YWJpbmRleGAKKyAgICAqIGBpbmRldGVy
bWluYXRlYAorICAgICogYG5hbWVgCisgICAgKiBgYXV0b2ZvY3VzYAorICAgICogYGZvcm1gCisg
IAorICAKKyAgICAjIyMgRXh0ZW5kaW5nIGBFbWJlci5DaGVja2JveGAKKyAgCisgICAgSW50ZXJu
YWxseSwgYHt7aW5wdXQgdHlwZT0iY2hlY2tib3gifX1gIGNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2Yg
YEVtYmVyLkNoZWNrYm94YCwgcGFzc2luZworICAgIGFyZ3VtZW50cyBmcm9tIHRoZSBoZWxwZXIg
dG8gYEVtYmVyLkNoZWNrYm94YCdzIGBjcmVhdGVgIG1ldGhvZC4gWW91IGNhbiBleHRlbmQgdGhl
CisgICAgY2FwYWJsaWx0aWVzIG9mIGNoZWNrYm94IGlucHV0cyBpbiB5b3VyIGFwcGxpY2F0aW9u
cyBieSByZW9wZW5pbmcgdGhpcyBjbGFzcy4gRm9yIGV4YW1wbGUsCisgICAgaWYgeW91IHdhbnRl
ZCB0byBhZGQgYSBjc3MgY2xhc3MgdG8gYWxsIGNoZWNrYm94ZXMgaW4geW91ciBhcHBsaWNhdGlv
bjoKKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIEVtYmVyLkNoZWNrYm94LnJlb3Blbih7Cisg
ICAgICBjbGFzc05hbWVzOiBbJ215LWFwcC1jaGVja2JveCddCisgICAgfSk7CisgICAgYGBgCisg
IAorICAKKyAgICBAbWV0aG9kIGlucHV0CisgICAgQGZvciBFbWJlci5UZW1wbGF0ZXMuaGVscGVy
cworICAgIEBwYXJhbSB7SGFzaH0gb3B0aW9ucworICAgIEBwdWJsaWMKKyAgKi8KKyAgZXhwb3J0
cy5kZWZhdWx0ID0geworICAgIHNldHVwU3RhdGU6IGZ1bmN0aW9uIChsYXN0U3RhdGUsIGVudiwg
c2NvcGUsIHBhcmFtcywgaGFzaCkgeworICAgICAgdmFyIHR5cGUgPSBlbnYuaG9va3MuZ2V0VmFs
dWUoaGFzaC50eXBlKTsKKyAgICAgIHZhciBjb21wb25lbnROYW1lID0gY29tcG9uZW50TmFtZU1h
cFt0eXBlXSB8fCBkZWZhdWx0Q29tcG9uZW50TmFtZTsKKworICAgICAgX2VtYmVyTWV0YWxEZWJ1
Zy5hc3NlcnQoJ3t7aW5wdXQgdHlwZT1cJ2NoZWNrYm94XCd9fSBkb2VzIG5vdCBzdXBwb3J0IHNl
dHRpbmcgYHZhbHVlPXNvbWVCb29sZWFuVmFsdWVgOyAnICsgJ3lvdSBtdXN0IHVzZSBgY2hlY2tl
ZD1zb21lQm9vbGVhblZhbHVlYCBpbnN0ZWFkLicsICEodHlwZSA9PT0gJ2NoZWNrYm94JyAmJiBo
YXNoLmhhc093blByb3BlcnR5KCd2YWx1ZScpKSk7CisKKyAgICAgIHJldHVybiBfZW1iZXJNZXRh
bEFzc2lnbi5kZWZhdWx0KHt9LCBsYXN0U3RhdGUsIHsgY29tcG9uZW50TmFtZTogY29tcG9uZW50
TmFtZSB9KTsKKyAgICB9LAorCisgICAgcmVuZGVyOiBmdW5jdGlvbiAobW9ycGgsIGVudiwgc2Nv
cGUsIHBhcmFtcywgaGFzaCwgdGVtcGxhdGUsIGludmVyc2UsIHZpc2l0b3IpIHsKKyAgICAgIGVu
di5ob29rcy5jb21wb25lbnQobW9ycGgsIGVudiwgc2NvcGUsIG1vcnBoLmdldFN0YXRlKCkuY29t
cG9uZW50TmFtZSwgcGFyYW1zLCBoYXNoLCB7IGRlZmF1bHQ6IHRlbXBsYXRlLCBpbnZlcnNlOiBp
bnZlcnNlIH0sIHZpc2l0b3IpOworICAgIH0sCisKKyAgICByZXJlbmRlcjogZnVuY3Rpb24gKCkg
eworICAgICAgdGhpcy5yZW5kZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICB9CisgIH07
CisKKyAgdmFyIGRlZmF1bHRDb21wb25lbnROYW1lID0gJy10ZXh0LWZpZWxkJzsKKworICB2YXIg
Y29tcG9uZW50TmFtZU1hcCA9IHsKKyAgICAnY2hlY2tib3gnOiAnLWNoZWNrYm94JworICB9Owor
fSk7CitlbmlmZWQoJ2VtYmVyLWh0bWxiYXJzL2tleXdvcmRzL211dCcsIFsnZXhwb3J0cycsICdl
bWJlci1tZXRhbC9kZWJ1ZycsICdlbWJlci1tZXRhbC9zeW1ib2wnLCAnZW1iZXItbWV0YWwvc3Ry
ZWFtcy9wcm94eS1zdHJlYW0nLCAnZW1iZXItbWV0YWwvc3RyZWFtcy9zdHJlYW0nLCAnZW1iZXIt
bWV0YWwvc3RyZWFtcy91dGlscycsICdlbWJlci12aWV3cy9jb21wYXQvYXR0cnMtcHJveHknLCAn
ZW1iZXItcm91dGluZy1odG1sYmFycy9rZXl3b3Jkcy9jbG9zdXJlLWFjdGlvbiddLCBmdW5jdGlv
biAoZXhwb3J0cywgX2VtYmVyTWV0YWxEZWJ1ZywgX2VtYmVyTWV0YWxTeW1ib2wsIF9lbWJlck1l
dGFsU3RyZWFtc1Byb3h5U3RyZWFtLCBfZW1iZXJNZXRhbFN0cmVhbXNTdHJlYW0sIF9lbWJlck1l
dGFsU3RyZWFtc1V0aWxzLCBfZW1iZXJWaWV3c0NvbXBhdEF0dHJzUHJveHksIF9lbWJlclJvdXRp
bmdIdG1sYmFyc0tleXdvcmRzQ2xvc3VyZUFjdGlvbikgeworICAvKioKKyAgQG1vZHVsZSBlbWJl
cgorICBAc3VibW9kdWxlIGVtYmVyLXRlbXBsYXRlcworICAqLworCisgICd1c2Ugc3RyaWN0JzsK
KworICB2YXIgX1Byb3h5U3RyZWFtJGV4dGVuZDsKKworICBleHBvcnRzLmRlZmF1bHQgPSBtdXQ7
CisgIGV4cG9ydHMucHJpdmF0ZU11dCA9IHByaXZhdGVNdXQ7CisgIHZhciBNVVRBQkxFX1JFRkVS
RU5DRSA9IF9lbWJlck1ldGFsU3ltYm9sLmRlZmF1bHQoJ01VVEFCTEVfUkVGRVJFTkNFJyk7CisK
KyAgZXhwb3J0cy5NVVRBQkxFX1JFRkVSRU5DRSA9IE1VVEFCTEVfUkVGRVJFTkNFOworICB2YXIg
TXV0U3RyZWFtID0gX2VtYmVyTWV0YWxTdHJlYW1zUHJveHlTdHJlYW0uZGVmYXVsdC5leHRlbmQo
KF9Qcm94eVN0cmVhbSRleHRlbmQgPSB7CisgICAgaW5pdDogZnVuY3Rpb24gKHN0cmVhbSkgewor
ICAgICAgdGhpcy5sYWJlbCA9ICcobXV0ICcgKyBzdHJlYW0ubGFiZWwgKyAnKSc7CisgICAgICB0
aGlzLnBhdGggPSBzdHJlYW0ucGF0aDsKKyAgICAgIHRoaXMuc291cmNlRGVwID0gdGhpcy5hZGRN
dXRhYmxlRGVwZW5kZW5jeShzdHJlYW0pOworICAgICAgdGhpc1tNVVRBQkxFX1JFRkVSRU5DRV0g
PSB0cnVlOworICAgIH0sCisKKyAgICBjZWxsOiBmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgc291
cmNlID0gdGhpczsKKyAgICAgIHZhciB2YWx1ZSA9IHNvdXJjZS52YWx1ZSgpOworCisgICAgICBp
ZiAodmFsdWUgJiYgdmFsdWVbX2VtYmVyUm91dGluZ0h0bWxiYXJzS2V5d29yZHNDbG9zdXJlQWN0
aW9uLkFDVElPTl0pIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgfQorCisgICAgICB2
YXIgdmFsID0geworICAgICAgICB2YWx1ZTogdmFsdWUsCisgICAgICAgIHVwZGF0ZTogZnVuY3Rp
b24gKHZhbCkgeworICAgICAgICAgIHNvdXJjZS5zZXRWYWx1ZSh2YWwpOworICAgICAgICB9Cisg
ICAgICB9OworCisgICAgICB2YWxbX2VtYmVyVmlld3NDb21wYXRBdHRyc1Byb3h5Lk1VVEFCTEVf
Q0VMTF0gPSB0cnVlOworICAgICAgcmV0dXJuIHZhbDsKKyAgICB9CisgIH0sIF9Qcm94eVN0cmVh
bSRleHRlbmRbX2VtYmVyUm91dGluZ0h0bWxiYXJzS2V5d29yZHNDbG9zdXJlQWN0aW9uLklOVk9L
RV0gPSBmdW5jdGlvbiAodmFsKSB7CisgICAgdGhpcy5zZXRWYWx1ZSh2YWwpOworICB9LCBfUHJv
eHlTdHJlYW0kZXh0ZW5kKSk7CisKKyAgLyoqCisgICAgVGhlIGBtdXRgIGhlbHBlciBsZXRzIHlv
dSBfX2NsZWFybHkgc3BlY2lmeV9fIHRoYXQgYSBjaGlsZCBgQ29tcG9uZW50YCBjYW4gdXBkYXRl
IHRoZQorICAgIChtdXRhYmxlKSB2YWx1ZSBwYXNzZWQgdG8gaXQsIHdoaWNoIHdpbGwgX19jaGFu
Z2UgdGhlIHZhbHVlIG9mIHRoZSBwYXJlbnQgY29tcG9uZW50X18uCisgIAorICAgIFRoaXMgaXMg
dmVyeSBoZWxwZnVsIGZvciBwYXNzaW5nIG11dGFibGUgdmFsdWVzIHRvIGEgYENvbXBvbmVudGAg
b2YgYW55IHNpemUsIGJ1dAorICAgIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGxvZ2lj
IG9mIGEgbGFyZ2UvY29tcGxleCBgQ29tcG9uZW50YC4KKyAgCisgICAgVG8gc3BlY2lmeSB0aGF0
IGEgcGFyYW1ldGVyIGlzIG11dGFibGUsIHdoZW4gaW52b2tpbmcgdGhlIGNoaWxkIGBDb21wb25l
bnRgOgorICAKKyAgICBgYGBoYW5kbGViYXJzCisgICAge3tteS1jaGlsZCBjaGlsZENsaWNrQ291
bnQ9KG11dCB0b3RhbENsaWNrcyl9fQorICAgIGBgYAorICAKKyAgICBUaGUgY2hpbGQgYENvbXBv
bmVudGAgY2FuIHRoZW4gbW9kaWZ5IHRoZSBwYXJlbnQncyB2YWx1ZSBhcyBuZWVkZWQ6CisgIAor
ICAgIGBgYGphdmFzY3JpcHQKKyAgICAvLyBteS1jaGlsZC5qcworICAgIGV4cG9ydCBkZWZhdWx0
IENvbXBvbmVudC5leHRlbmQoeworICAgICAgY2xpY2soKSB7CisgICAgICAgIHRoaXMuZ2V0KCdj
aGlsZENsaWNrQ291bnQnKS51cGRhdGUodGhpcy5nZXQoJ2NoaWxkQ2xpY2tDb3VudCcpLnZhbHVl
ICsgMSk7CisgICAgICB9CisgICAgfSk7CisgICAgYGBgCisgIAorICAgIEFkZGl0aW9uYWxseSwg
dGhlIGBtdXRgIGhlbHBlciBjYW4gYmUgY29tYmluZWQgd2l0aCB0aGUgYGFjdGlvbmAgaGVscGVy
IHRvCisgICAgbXV0YXRlIGEgdmFsdWUuIEZvciBleGFtcGxlOgorICAKKyAgICBgYGBoYW5kbGVi
YXJzCisgICAge3tteS1jaGlsZCBjaGlsZENsaWNrQ291bnQ9dG90YWxDbGlja3MgY2xpY2stY291
bnQtY2hhbmdlPShhY3Rpb24gKG11dCB0b3RhbENsaWNrcykpfX0KKyAgICBgYGAKKyAgCisgICAg
VGhlIGNoaWxkIGBDb21wb25lbnRgIHdvdWxkIGludm9rZSB0aGUgYWN0aW9uIHdpdGggdGhlIG5l
dyBjbGljayB2YWx1ZToKKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIC8vIG15LWNoaWxkLmpz
CisgICAgZXhwb3J0IGRlZmF1bHQgQ29tcG9uZW50LmV4dGVuZCh7CisgICAgICBjbGljaygpIHsK
KyAgICAgICAgdGhpcy5nZXQoJ2NsaWNrQ291bnRDaGFuZ2UnKSh0aGlzLmdldCgnY2hpbGRDbGlj
a0NvdW50JykgKyAxKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgICBgYGAKKyAgCisgICAgVGhlIGBt
dXRgIGhlbHBlciBjaGFuZ2VzIHRoZSBgdG90YWxDbGlja3NgIHZhbHVlIHRvIHdoYXQgd2FzIHBy
b3ZpZGVkIGFzIHRoZSBhY3Rpb24gYXJndW1lbnQuCisgIAorICAgIFNlZSBhIFsyLjAgYmxvZyBw
b3N0XShodHRwOi8vZW1iZXJqcy5jb20vYmxvZy8yMDE1LzA1LzEwL3J1bi11cC10by10d28tb2gu
aHRtbCN0b2NfdGhlLWNvZGUtbXV0LWNvZGUtaGVscGVyKSBmb3IKKyAgICBhZGRpdGlvbmFsIGlu
Zm9ybWF0aW9uIG9uIHVzaW5nIGB7e211dH19YC4KKyAgCisgICAgQHB1YmxpYworICAgIEBtZXRo
b2QgbXV0CisgICAgQHBhcmFtIHtPYmplY3R9IFthdHRyXSB0aGUgInR3by13YXkiIGF0dHJpYnV0
ZSB0aGF0IGNhbiBiZSBtb2RpZmllZC4KKyAgICBAZm9yIEVtYmVyLlRlbXBsYXRlcy5oZWxwZXJz
CisgICAgQHB1YmxpYworICAqLworCisgIGZ1bmN0aW9uIG11dChtb3JwaCwgZW52LCBzY29wZSwg
b3JpZ2luYWxQYXJhbXMsIGhhc2gsIHRlbXBsYXRlLCBpbnZlcnNlKSB7CisgICAgLy8gSWYgYG1v
cnBoYCBpcyBgbnVsbGAgdGhlIGtleXdvcmQgaXMgYmVpbmcgaW52b2tlZCBhcyBhIHN1YmV4cHJl
c3Npb24uCisgICAgaWYgKG1vcnBoID09PSBudWxsKSB7CisgICAgICB2YXIgdmFsdWVTdHJlYW0g
PSBvcmlnaW5hbFBhcmFtc1swXTsKKyAgICAgIHJldHVybiBtdXRQYXJhbShlbnYuaG9va3MuZ2V0
VmFsdWUsIHZhbHVlU3RyZWFtKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisg
IGZ1bmN0aW9uIHByaXZhdGVNdXQobW9ycGgsIGVudiwgc2NvcGUsIG9yaWdpbmFsUGFyYW1zLCBo
YXNoLCB0ZW1wbGF0ZSwgaW52ZXJzZSkgeworICAgIC8vIElmIGBtb3JwaGAgaXMgYG51bGxgIHRo
ZSBrZXl3b3JkIGlzIGJlaW5nIGludm9rZWQgYXMgYSBzdWJleHByZXNzaW9uLgorICAgIGlmICht
b3JwaCA9PT0gbnVsbCkgeworICAgICAgdmFyIHZhbHVlU3RyZWFtID0gb3JpZ2luYWxQYXJhbXNb
MF07CisgICAgICByZXR1cm4gbXV0UGFyYW0oZW52Lmhvb2tzLmdldFZhbHVlLCB2YWx1ZVN0cmVh
bSwgdHJ1ZSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICB2YXIgTGl0ZXJh
bFN0cmVhbSA9IF9lbWJlck1ldGFsU3RyZWFtc1N0cmVhbS5kZWZhdWx0LmV4dGVuZCh7CisgICAg
aW5pdDogZnVuY3Rpb24gKGxpdGVyYWwpIHsKKyAgICAgIHRoaXMubGl0ZXJhbCA9IGxpdGVyYWw7
CisgICAgICB0aGlzLmxhYmVsID0gJyhsaXRlcmFsICcgKyBsaXRlcmFsICsgJyknOworICAgIH0s
CisKKyAgICBjb21wdXRlOiBmdW5jdGlvbiAoKSB7CisgICAgICByZXR1cm4gdGhpcy5saXRlcmFs
OworICAgIH0sCisKKyAgICBzZXRWYWx1ZTogZnVuY3Rpb24gKHZhbCkgeworICAgICAgdGhpcy5s
aXRlcmFsID0gdmFsOworICAgICAgdGhpcy5ub3RpZnkoKTsKKyAgICB9CisgIH0pOworCisgIGZ1
bmN0aW9uIG11dFBhcmFtKHJlYWQsIHN0cmVhbSwgaW50ZXJuYWwpIHsKKyAgICBpZiAoaW50ZXJu
YWwpIHsKKyAgICAgIGlmICghX2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMuaXNTdHJlYW0oc3RyZWFt
KSkgeworICAgICAgICB2YXIgbGl0ZXJhbCA9IHN0cmVhbTsKKyAgICAgICAgc3RyZWFtID0gbmV3
IExpdGVyYWxTdHJlYW0obGl0ZXJhbCk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIF9l
bWJlck1ldGFsRGVidWcuYXNzZXJ0KCdZb3UgY2FuIG9ubHkgcGFzcyBhIHBhdGggdG8gbXV0Jywg
X2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMuaXNTdHJlYW0oc3RyZWFtKSk7CisgICAgfQorCisgICAg
aWYgKHN0cmVhbVtNVVRBQkxFX1JFRkVSRU5DRV0pIHsKKyAgICAgIHJldHVybiBzdHJlYW07Cisg
ICAgfQorCisgICAgcmV0dXJuIG5ldyBNdXRTdHJlYW0oc3RyZWFtKTsKKyAgfQorfSk7Citlbmlm
ZWQoJ2VtYmVyLWh0bWxiYXJzL2tleXdvcmRzL291dGxldCcsIFsnZXhwb3J0cycsICdlbWJlci1t
ZXRhbC9kZWJ1ZycsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQnLCAnZW1iZXItaHRtbGJhcnMv
bm9kZS1tYW5hZ2Vycy92aWV3LW5vZGUtbWFuYWdlcicsICdlbWJlci1odG1sYmFycy90ZW1wbGF0
ZXMvdG9wLWxldmVsLXZpZXcnLCAnZW1iZXItbWV0YWwvZmVhdHVyZXMnXSwgZnVuY3Rpb24gKGV4
cG9ydHMsIF9lbWJlck1ldGFsRGVidWcsIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LCBfZW1iZXJI
dG1sYmFyc05vZGVNYW5hZ2Vyc1ZpZXdOb2RlTWFuYWdlciwgX2VtYmVySHRtbGJhcnNUZW1wbGF0
ZXNUb3BMZXZlbFZpZXcsIF9lbWJlck1ldGFsRmVhdHVyZXMpIHsKKyAgLyoqCisgIEBtb2R1bGUg
ZW1iZXIKKyAgQHN1Ym1vZHVsZSBlbWJlci10ZW1wbGF0ZXMKKyAgKi8KKworICAndXNlIHN0cmlj
dCc7CisKKyAgX2VtYmVySHRtbGJhcnNUZW1wbGF0ZXNUb3BMZXZlbFZpZXcuZGVmYXVsdC5tZXRh
LnJldmlzaW9uID0gJ0VtYmVyQDIuNi4yJzsKKworICAvKioKKyAgICBUaGUgYHt7b3V0bGV0fX1g
IGhlbHBlciBsZXRzIHlvdSBzcGVjaWZ5IHdoZXJlIGEgY2hpbGQgcm91dGUgd2lsbCByZW5kZXIg
aW4KKyAgICB5b3VyIHRlbXBsYXRlLiBBbiBpbXBvcnRhbnQgdXNlIG9mIHRoZSBge3tvdXRsZXR9
fWAgaGVscGVyIGlzIGluIHlvdXIKKyAgICBhcHBsaWNhdGlvbidzIGBhcHBsaWNhdGlvbi5oYnNg
IGZpbGU6CisgIAorICAgIGBgYGhhbmRsZWJhcnMKKyAgICB7eyEgYXBwL3RlbXBsYXRlcy9hcHBs
aWNhdGlvbi5oYnMgfX0KKyAgCisgICAgPCEtLSBoZWFkZXIgY29udGVudCBnb2VzIGhlcmUsIGFu
ZCB3aWxsIGFsd2F5cyBkaXNwbGF5IC0tPgorICAgIHt7bXktaGVhZGVyfX0KKyAgCisgICAgPGRp
diBjbGFzcz0ibXktZHluYW1pYy1jb250ZW50Ij4KKyAgICAgIDwhLS0gdGhpcyBjb250ZW50IHdp
bGwgY2hhbmdlIGJhc2VkIG9uIHRoZSBjdXJyZW50IHJvdXRlLCB3aGljaCBkZXBlbmRzIG9uIHRo
ZSBjdXJyZW50IFVSTCAtLT4KKyAgICAgIHt7b3V0bGV0fX0KKyAgICA8L2Rpdj4KKyAgCisgICAg
PCEtLSBmb290ZXIgY29udGVudCBnb2VzIGhlcmUsIGFuZCB3aWxsIGFsd2F5cyBkaXNwbGF5IC0t
PgorICAgIHt7bXktZm9vdGVyfX0KKyAgICBgYGAKKyAgCisgICAgU2VlIFt0ZW1wbGF0ZXMgZ3Vp
ZGVdKGh0dHA6Ly9lbWJlcmpzLmNvbS9ndWlkZXMvdGVtcGxhdGVzL3RoZS1hcHBsaWNhdGlvbi10
ZW1wbGF0ZS8pIGZvcgorICAgIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gdXNpbmcgYHt7b3V0
bGV0fX1gIGluIGBhcHBsaWNhdGlvbi5oYnNgLgorICAKKyAgICBZb3UgbWF5IGFsc28gc3BlY2lm
eSBhIG5hbWUgZm9yIHRoZSBge3tvdXRsZXR9fWAsIHdoaWNoIGlzIHVzZWZ1bCB3aGVuIHVzaW5n
IG1vcmUgdGhhbiBvbmUKKyAgICBge3tvdXRsZXR9fWAgaW4gYSB0ZW1wbGF0ZToKKyAgCisgICAg
YGBgaGFuZGxlYmFycworICAgIHt7b3V0bGV0ICJtZW51In19CisgICAge3tvdXRsZXQgInNpZGVi
YXIifX0KKyAgICB7e291dGxldCAibWFpbiJ9fQorICAgIGBgYAorICAKKyAgICBZb3VyIHJvdXRl
cyBjYW4gdGhlbiByZW5kZXIgaW50byBhIHNwZWNpZmljIG9uZSBvZiB0aGVzZSBgb3V0bGV0YHMg
Ynkgc3BlY2lmeWluZyB0aGUgYG91dGxldGAKKyAgICBhdHRyaWJ1dGUgaW4geW91ciBgcmVuZGVy
VGVtcGxhdGVgIGZ1bmN0aW9uOgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgLy8gYXBwL3Jv
dXRlcy9tZW51LmpzCisgIAorICAgIGV4cG9ydCBkZWZhdWx0IEVtYmVyLlJvdXRlLmV4dGVuZCh7
CisgICAgICByZW5kZXJUZW1wbGF0ZSgpIHsKKyAgICAgICAgdGhpcy5yZW5kZXIoeyBvdXRsZXQ6
ICdtZW51JyB9KTsKKyAgICAgIH0KKyAgICB9KTsKKyAgICBgYGAKKyAgCisgICAgU2VlIHRoZSBb
cm91dGluZyBndWlkZV0oaHR0cDovL2VtYmVyanMuY29tL2d1aWRlcy9yb3V0aW5nL3JlbmRlcmlu
Zy1hLXRlbXBsYXRlLykgZm9yIG1vcmUKKyAgICBpbmZvcm1hdGlvbiBvbiBob3cgeW91ciBgcm91
dGVgIGludGVyYWN0cyB3aXRoIHRoZSBge3tvdXRsZXR9fWAgaGVscGVyLgorICAKKyAgICBOb3Rl
OiBZb3VyIGNvbnRlbnQgX193aWxsIG5vdCByZW5kZXJfXyBpZiB0aGVyZSBpc24ndCBhbiBge3tv
dXRsZXR9fWAgZm9yIGl0LgorICAKKyAgICBAcHVibGljCisgICAgQG1ldGhvZCBvdXRsZXQKKyAg
ICBAcGFyYW0ge1N0cmluZ30gW25hbWVdCisgICAgQGZvciBFbWJlci5UZW1wbGF0ZXMuaGVscGVy
cworICAgIEBwdWJsaWMKKyAgKi8KKyAgZXhwb3J0cy5kZWZhdWx0ID0geworICAgIHdpbGxSZW5k
ZXI6IGZ1bmN0aW9uIChyZW5kZXJOb2RlLCBlbnYpIHsKKyAgICAgIGVudi52aWV3Lm93bmVyVmll
dy5fb3V0bGV0cy5wdXNoKHJlbmRlck5vZGUpOworICAgIH0sCisKKyAgICBzZXR1cFN0YXRlOiBm
dW5jdGlvbiAoc3RhdGUsIGVudiwgc2NvcGUsIHBhcmFtcywgaGFzaCkgeworICAgICAgdmFyIG91
dGxldFN0YXRlID0gZW52Lm91dGxldFN0YXRlOworICAgICAgdmFyIHJlYWQgPSBlbnYuaG9va3Mu
Z2V0VmFsdWU7CisgICAgICB2YXIgb3V0bGV0TmFtZSA9IHJlYWQocGFyYW1zWzBdKSB8fCAnbWFp
bic7CisgICAgICB2YXIgc2VsZWN0ZWRPdXRsZXRTdGF0ZSA9IG91dGxldFN0YXRlW291dGxldE5h
bWVdOworCisgICAgICByZXR1cm4geworICAgICAgICBvdXRsZXRTdGF0ZTogc2VsZWN0ZWRPdXRs
ZXRTdGF0ZSwKKyAgICAgICAgaGFzUGFyZW50T3V0bGV0OiBlbnYuaGFzUGFyZW50T3V0bGV0LAor
ICAgICAgICBtYW5hZ2VyOiBzdGF0ZS5tYW5hZ2VyCisgICAgICB9OworICAgIH0sCisKKyAgICBj
aGlsZEVudjogZnVuY3Rpb24gKHN0YXRlLCBlbnYpIHsKKyAgICAgIHZhciBvdXRsZXRTdGF0ZSA9
IHN0YXRlLm91dGxldFN0YXRlOworICAgICAgdmFyIHRvUmVuZGVyID0gb3V0bGV0U3RhdGUgJiYg
b3V0bGV0U3RhdGUucmVuZGVyOworICAgICAgdmFyIG1ldGEgPSB0b1JlbmRlciAmJiB0b1JlbmRl
ci50ZW1wbGF0ZSAmJiB0b1JlbmRlci50ZW1wbGF0ZS5tZXRhOworCisgICAgICByZXR1cm4gZW52
LmNoaWxkV2l0aE91dGxldFN0YXRlKG91dGxldFN0YXRlICYmIG91dGxldFN0YXRlLm91dGxldHMs
IHRydWUsIG1ldGEpOworICAgIH0sCisKKyAgICBpc1N0YWJsZTogZnVuY3Rpb24gKGxhc3RTdGF0
ZSwgbmV4dFN0YXRlKSB7CisgICAgICByZXR1cm4gaXNTdGFibGUobGFzdFN0YXRlLm91dGxldFN0
YXRlLCBuZXh0U3RhdGUub3V0bGV0U3RhdGUpOworICAgIH0sCisKKyAgICBpc0VtcHR5OiBmdW5j
dGlvbiAoc3RhdGUpIHsKKyAgICAgIHJldHVybiBpc0VtcHR5KHN0YXRlLm91dGxldFN0YXRlKTsK
KyAgICB9LAorCisgICAgcmVuZGVyOiBmdW5jdGlvbiAocmVuZGVyTm9kZSwgZW52LCBzY29wZSwg
cGFyYW1zLCBoYXNoLCB0ZW1wbGF0ZSwgaW52ZXJzZSwgdmlzaXRvcikgeworICAgICAgdmFyIHN0
YXRlID0gcmVuZGVyTm9kZS5nZXRTdGF0ZSgpOworICAgICAgdmFyIHBhcmVudFZpZXcgPSBlbnYu
dmlldzsKKyAgICAgIHZhciBvdXRsZXRTdGF0ZSA9IHN0YXRlLm91dGxldFN0YXRlOworICAgICAg
dmFyIHRvUmVuZGVyID0gb3V0bGV0U3RhdGUucmVuZGVyOworICAgICAgdmFyIG5hbWVzcGFjZSA9
IGVudi5vd25lci5sb29rdXAoJ2FwcGxpY2F0aW9uOm1haW4nKTsKKyAgICAgIHZhciBMT0dfVklF
V19MT09LVVBTID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KG5hbWVzcGFjZSwgJ0xPR19W
SUVXX0xPT0tVUFMnKTsKKworICAgICAgdmFyIFZpZXdDbGFzcyA9IG91dGxldFN0YXRlLnJlbmRl
ci5WaWV3Q2xhc3M7CisKKyAgICAgIGlmICghc3RhdGUuaGFzUGFyZW50T3V0bGV0ICYmICFWaWV3
Q2xhc3MpIHsKKyAgICAgICAgVmlld0NsYXNzID0gZW52Lm93bmVyLl9sb29rdXBGYWN0b3J5KCd2
aWV3OnRvcGxldmVsJyk7CisgICAgICB9CisKKyAgICAgIHZhciBDb21wb25lbnQ7CisKKyAgICAg
IHZhciBvcHRpb25zOworICAgICAgdmFyIGF0dHJzID0ge307CisgICAgICBpZiAoQ29tcG9uZW50
KSB7CisgICAgICAgIG9wdGlvbnMgPSB7CisgICAgICAgICAgY29tcG9uZW50OiBDb21wb25lbnQK
KyAgICAgICAgfTsKKyAgICAgICAgYXR0cnMgPSB0b1JlbmRlci5hdHRyczsKKyAgICAgIH0gZWxz
ZSB7CisgICAgICAgIG9wdGlvbnMgPSB7CisgICAgICAgICAgY29tcG9uZW50OiBWaWV3Q2xhc3Ms
CisgICAgICAgICAgc2VsZjogdG9SZW5kZXIuY29udHJvbGxlciwKKyAgICAgICAgICBjcmVhdGVP
cHRpb25zOiB7CisgICAgICAgICAgICBjb250cm9sbGVyOiB0b1JlbmRlci5jb250cm9sbGVyCisg
ICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGUgfHwg
dG9SZW5kZXIudGVtcGxhdGUgJiYgdG9SZW5kZXIudGVtcGxhdGUucmF3OworCisgICAgICAgIGlm
IChMT0dfVklFV19MT09LVVBTICYmIFZpZXdDbGFzcykgeworICAgICAgICAgIF9lbWJlck1ldGFs
RGVidWcuaW5mbygnUmVuZGVyaW5nICcgKyB0b1JlbmRlci5uYW1lICsgJyB3aXRoICcgKyBWaWV3
Q2xhc3MsIHsgZnVsbE5hbWU6ICd2aWV3OicgKyB0b1JlbmRlci5uYW1lIH0pOworICAgICAgICB9
CisgICAgICB9CisKKyAgICAgIGlmIChzdGF0ZS5tYW5hZ2VyKSB7CisgICAgICAgIHN0YXRlLm1h
bmFnZXIuZGVzdHJveSgpOworICAgICAgICBzdGF0ZS5tYW5hZ2VyID0gbnVsbDsKKyAgICAgIH0K
KworICAgICAgdmFyIG5vZGVNYW5hZ2VyID0gX2VtYmVySHRtbGJhcnNOb2RlTWFuYWdlcnNWaWV3
Tm9kZU1hbmFnZXIuZGVmYXVsdC5jcmVhdGUocmVuZGVyTm9kZSwgZW52LCBhdHRycywgb3B0aW9u
cywgcGFyZW50VmlldywgbnVsbCwgbnVsbCwgdGVtcGxhdGUpOworICAgICAgc3RhdGUubWFuYWdl
ciA9IG5vZGVNYW5hZ2VyOworCisgICAgICBub2RlTWFuYWdlci5yZW5kZXIoZW52LCBoYXNoLCB2
aXNpdG9yKTsKKyAgICB9CisgIH07CisKKyAgZnVuY3Rpb24gaXNFbXB0eShvdXRsZXRTdGF0ZSkg
eworICAgIHJldHVybiAhb3V0bGV0U3RhdGUgfHwgIW91dGxldFN0YXRlLnJlbmRlci5WaWV3Q2xh
c3MgJiYgIW91dGxldFN0YXRlLnJlbmRlci50ZW1wbGF0ZTsKKyAgfQorCisgIGZ1bmN0aW9uIGlz
U3RhYmxlKGEsIGIpIHsKKyAgICBpZiAoIWEgJiYgIWIpIHsKKyAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICBpZiAoIWEgfHwgIWIpIHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgYSA9IGEucmVuZGVyOworICAgIGIgPSBiLnJlbmRlcjsKKyAgICBmb3IgKHZhciBrZXkgaW4g
YSkgeworICAgICAgaWYgKGEuaGFzT3duUHJvcGVydHkoa2V5KSkgeworICAgICAgICAvLyBOYW1l
IGlzIG9ubHkgaGVyZSBmb3IgbG9nZ2luZyAmIGRlYnVnZ2luZy4gSWYgdHdvIGRpZmZlcmVudAor
ICAgICAgICAvLyBuYW1lcyByZXN1bHQgaW4gb3RoZXJ3aXNlIGlkZW50aWNhbCBzdGF0ZXMsIHRo
ZXkncmUgc3RpbGwKKyAgICAgICAgLy8gaWRlbnRpY2FsLgorICAgICAgICBpZiAoYVtrZXldICE9
PSBiW2tleV0gJiYga2V5ICE9PSAnbmFtZScpIHsKKyAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7CisgIH0KK30pOworZW5p
ZmVkKCdlbWJlci1odG1sYmFycy9rZXl3b3Jkcy9wYXJ0aWFsJywgWydleHBvcnRzJywgJ2VtYmVy
LXZpZXdzL3N5c3RlbS9sb29rdXBfcGFydGlhbCcsICdodG1sYmFycy1ydW50aW1lJ10sIGZ1bmN0
aW9uIChleHBvcnRzLCBfZW1iZXJWaWV3c1N5c3RlbUxvb2t1cF9wYXJ0aWFsLCBfaHRtbGJhcnNS
dW50aW1lKSB7CisgIC8qKgorICBAbW9kdWxlIGVtYmVyCisgIEBzdWJtb2R1bGUgZW1iZXItdGVt
cGxhdGVzCisgICovCisKKyAgJ3VzZSBzdHJpY3QnOworCisgIC8qKgorICAgIFRoZSBgcGFydGlh
bGAgaGVscGVyIHJlbmRlcnMgYW5vdGhlciB0ZW1wbGF0ZSB3aXRob3V0CisgICAgY2hhbmdpbmcg
dGhlIHRlbXBsYXRlIGNvbnRleHQ6CisgIAorICAgIGBgYGhhbmRsZWJhcnMKKyAgICB7e2Zvb319
CisgICAge3twYXJ0aWFsICJuYXYifX0KKyAgICBgYGAKKyAgCisgICAgVGhlIGFib3ZlIGV4YW1w
bGUgdGVtcGxhdGUgd2lsbCByZW5kZXIgYSB0ZW1wbGF0ZSBuYW1lZAorICAgICJfbmF2Iiwgd2hp
Y2ggaGFzIHRoZSBzYW1lIGNvbnRleHQgYXMgdGhlIHBhcmVudCB0ZW1wbGF0ZQorICAgIGl0J3Mg
cmVuZGVyZWQgaW50bywgc28gaWYgdGhlICJfbmF2IiB0ZW1wbGF0ZSBhbHNvIHJlZmVyZW5jZWQK
KyAgICBge3tmb299fWAsIGl0IHdvdWxkIHByaW50IHRoZSBzYW1lIHRoaW5nIGFzIHRoZSBge3tm
b299fWAKKyAgICBpbiB0aGUgYWJvdmUgZXhhbXBsZS4KKyAgCisgICAgSWYgYSAiX25hdiIgdGVt
cGxhdGUgaXNuJ3QgZm91bmQsIHRoZSBgcGFydGlhbGAgaGVscGVyIHdpbGwKKyAgICBmYWxsIGJh
Y2sgdG8gYSB0ZW1wbGF0ZSBuYW1lZCAibmF2Ii4KKyAgCisgICAgIyMjIEJvdW5kIHRlbXBsYXRl
IG5hbWVzCisgIAorICAgIFRoZSBwYXJhbWV0ZXIgc3VwcGxpZWQgdG8gYHBhcnRpYWxgIGNhbiBh
bHNvIGJlIGEgcGF0aAorICAgIHRvIGEgcHJvcGVydHkgY29udGFpbmluZyBhIHRlbXBsYXRlIG5h
bWUsIGUuZy46CisgIAorICAgIGBgYGhhbmRsZWJhcnMKKyAgICB7e3BhcnRpYWwgc29tZVRlbXBs
YXRlTmFtZX19CisgICAgYGBgCisgIAorICAgIFRoZSBhYm92ZSBleGFtcGxlIHdpbGwgbG9vayB1
cCB0aGUgdmFsdWUgb2YgYHNvbWVUZW1wbGF0ZU5hbWVgCisgICAgb24gdGhlIHRlbXBsYXRlIGNv
bnRleHQgKGUuZy4gYSBjb250cm9sbGVyKSBhbmQgdXNlIHRoYXQKKyAgICB2YWx1ZSBhcyB0aGUg
bmFtZSBvZiB0aGUgdGVtcGxhdGUgdG8gcmVuZGVyLiBJZiB0aGUgcmVzb2x2ZWQKKyAgICB2YWx1
ZSBpcyBmYWxzeSwgbm90aGluZyB3aWxsIGJlIHJlbmRlcmVkLiBJZiBgc29tZVRlbXBsYXRlTmFt
ZWAKKyAgICBjaGFuZ2VzLCB0aGUgcGFydGlhbCB3aWxsIGJlIHJlLXJlbmRlcmVkIHVzaW5nIHRo
ZSBuZXcgdGVtcGxhdGUKKyAgICBuYW1lLgorICAKKyAgCisgICAgQG1ldGhvZCBwYXJ0aWFsCisg
ICAgQGZvciBFbWJlci5UZW1wbGF0ZXMuaGVscGVycworICAgIEBwYXJhbSB7U3RyaW5nfSBwYXJ0
aWFsTmFtZSBUaGUgbmFtZSBvZiB0aGUgdGVtcGxhdGUgdG8gcmVuZGVyIG1pbnVzIHRoZSBsZWFk
aW5nIHVuZGVyc2NvcmUuCisgICAgQHB1YmxpYworICAqLworCisgIGV4cG9ydHMuZGVmYXVsdCA9
IHsKKyAgICBzZXR1cFN0YXRlOiBmdW5jdGlvbiAoc3RhdGUsIGVudiwgc2NvcGUsIHBhcmFtcywg
aGFzaCkgeworICAgICAgcmV0dXJuIHsgcGFydGlhbE5hbWU6IGVudi5ob29rcy5nZXRWYWx1ZShw
YXJhbXNbMF0pIH07CisgICAgfSwKKworICAgIHJlbmRlcjogZnVuY3Rpb24gKHJlbmRlck5vZGUs
IGVudiwgc2NvcGUsIHBhcmFtcywgaGFzaCwgdGVtcGxhdGUsIGludmVyc2UsIHZpc2l0b3IpIHsK
KyAgICAgIHZhciBzdGF0ZSA9IHJlbmRlck5vZGUuZ2V0U3RhdGUoKTsKKyAgICAgIGlmICghc3Rh
dGUucGFydGlhbE5hbWUpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CisgICAgICB2
YXIgZm91bmQgPSBfZW1iZXJWaWV3c1N5c3RlbUxvb2t1cF9wYXJ0aWFsLmRlZmF1bHQoZW52LCBz
dGF0ZS5wYXJ0aWFsTmFtZSk7CisgICAgICBpZiAoIWZvdW5kKSB7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgfQorCisgICAgICBfaHRtbGJhcnNSdW50aW1lLmludGVybmFsLmhvc3RCbG9j
ayhyZW5kZXJOb2RlLCBlbnYsIHNjb3BlLCBmb3VuZC5yYXcsIG51bGwsIG51bGwsIHZpc2l0b3Is
IGZ1bmN0aW9uIChvcHRpb25zKSB7CisgICAgICAgIG9wdGlvbnMudGVtcGxhdGVzLnRlbXBsYXRl
LnlpZWxkKCk7CisgICAgICB9KTsKKyAgICB9CisgIH07Cit9KTsKK2VuaWZlZCgnZW1iZXItaHRt
bGJhcnMva2V5d29yZHMvcmVhZG9ubHknLCBbJ2V4cG9ydHMnLCAnZW1iZXItaHRtbGJhcnMva2V5
d29yZHMvbXV0J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJIdG1sYmFyc0tleXdvcmRzTXV0
KSB7CisgIC8qKgorICBAbW9kdWxlIGVtYmVyCisgIEBzdWJtb2R1bGUgZW1iZXItdGVtcGxhdGVz
CisgICovCisKKyAgJ3VzZSBzdHJpY3QnOworCisgIGV4cG9ydHMuZGVmYXVsdCA9IHJlYWRvbmx5
OworCisgIGZ1bmN0aW9uIHJlYWRvbmx5KG1vcnBoLCBlbnYsIHNjb3BlLCBvcmlnaW5hbFBhcmFt
cywgaGFzaCwgdGVtcGxhdGUsIGludmVyc2UpIHsKKyAgICAvLyBJZiBgbW9ycGhgIGlzIGBudWxs
YCB0aGUga2V5d29yZCBpcyBiZWluZyBpbnZva2VkIGFzIGEgc3ViZXhwcmVzc2lvbi4KKyAgICBp
ZiAobW9ycGggPT09IG51bGwpIHsKKyAgICAgIHZhciBzdHJlYW0gPSBvcmlnaW5hbFBhcmFtc1sw
XTsKKyAgICAgIGlmIChzdHJlYW0gJiYgc3RyZWFtW19lbWJlckh0bWxiYXJzS2V5d29yZHNNdXQu
TVVUQUJMRV9SRUZFUkVOQ0VdKSB7CisgICAgICAgIHJldHVybiBzdHJlYW0uc291cmNlRGVwLmRl
cGVuZGVlOworICAgICAgfQorICAgICAgcmV0dXJuIHN0cmVhbTsKKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKKyAgfQorfSk7CitlbmlmZWQoJ2VtYmVyLWh0bWxiYXJzL2tleXdvcmRzL3RleHRh
cmVhJywgWydleHBvcnRzJ10sIGZ1bmN0aW9uIChleHBvcnRzKSB7CisgIC8qKgorICBAbW9kdWxl
IGVtYmVyCisgIEBzdWJtb2R1bGUgZW1iZXItdGVtcGxhdGVzCisgICovCisKKyAgLyoqCisgICAg
YHt7dGV4dGFyZWF9fWAgaW5zZXJ0cyBhIG5ldyBpbnN0YW5jZSBvZiBgPHRleHRhcmVhPmAgdGFn
IGludG8gdGhlIHRlbXBsYXRlLgorICAgIFRoZSBhdHRyaWJ1dGVzIG9mIGB7e3RleHRhcmVhfX1g
IG1hdGNoIHRob3NlIG9mIHRoZSBuYXRpdmUgSFRNTCB0YWdzIGFzCisgICAgY2xvc2VseSBhcyBw
b3NzaWJsZS4KKyAgCisgICAgVGhlIGZvbGxvd2luZyBIVE1MIGF0dHJpYnV0ZXMgY2FuIGJlIHNl
dDoKKyAgCisgICAgICAqIGB2YWx1ZWAKKyAgICAgICogYG5hbWVgCisgICAgICAqIGByb3dzYAor
ICAgICAgKiBgY29sc2AKKyAgICAgICogYHBsYWNlaG9sZGVyYAorICAgICAgKiBgZGlzYWJsZWRg
CisgICAgICAqIGBtYXhsZW5ndGhgCisgICAgICAqIGB0YWJpbmRleGAKKyAgICAgICogYHNlbGVj
dGlvbkVuZGAKKyAgICAgICogYHNlbGVjdGlvblN0YXJ0YAorICAgICAgKiBgc2VsZWN0aW9uRGly
ZWN0aW9uYAorICAgICAgKiBgd3JhcGAKKyAgICAgICogYHJlYWRvbmx5YAorICAgICAgKiBgYXV0
b2ZvY3VzYAorICAgICAgKiBgZm9ybWAKKyAgICAgICogYHNwZWxsY2hlY2tgCisgICAgICAqIGBy
ZXF1aXJlZGAKKyAgCisgICAgV2hlbiBzZXQgdG8gYSBxdW90ZWQgc3RyaW5nLCB0aGVzZSB2YWx1
ZSB3aWxsIGJlIGRpcmVjdGx5IGFwcGxpZWQgdG8gdGhlIEhUTUwKKyAgICBlbGVtZW50LiBXaGVu
IGxlZnQgdW5xdW90ZWQsIHRoZXNlIHZhbHVlcyB3aWxsIGJlIGJvdW5kIHRvIGEgcHJvcGVydHkg
b24gdGhlCisgICAgdGVtcGxhdGUncyBjdXJyZW50IHJlbmRlcmluZyBjb250ZXh0IChtb3N0IHR5
cGljYWxseSBhIGNvbnRyb2xsZXIgaW5zdGFuY2UpLgorICAKKyAgICBVbmJvdW5kOgorICAKKyAg
ICBgYGBoYW5kbGViYXJzCisgICAge3t0ZXh0YXJlYSB2YWx1ZT0iTG90cyBvZiBzdGF0aWMgdGV4
dCB0aGF0IElTTidUIGJvdW5kIn19CisgICAgYGBgCisgIAorICAgIFdvdWxkIHJlc3VsdCBpbiB0
aGUgZm9sbG93aW5nIEhUTUw6CisgIAorICAgIGBgYGh0bWwKKyAgICA8dGV4dGFyZWEgY2xhc3M9
ImVtYmVyLXRleHQtYXJlYSI+CisgICAgICBMb3RzIG9mIHN0YXRpYyB0ZXh0IHRoYXQgSVNOJ1Qg
Ym91bmQKKyAgICA8L3RleHRhcmVhPgorICAgIGBgYAorICAKKyAgICBCb3VuZDoKKyAgCisgICAg
SW4gdGhlIGZvbGxvd2luZyBleGFtcGxlLCB0aGUgYHdyaXR0ZW5Xb3Jkc2AgcHJvcGVydHkgb24g
YEFwcC5BcHBsaWNhdGlvbkNvbnRyb2xsZXJgCisgICAgd2lsbCBiZSB1cGRhdGVkIGxpdmUgYXMg
dGhlIHVzZXIgdHlwZXMgJ0xvdHMgb2YgdGV4dCB0aGF0IElTIGJvdW5kJyBpbnRvCisgICAgdGhl
IHRleHQgYXJlYSBvZiB0aGVpciBicm93c2VyJ3Mgd2luZG93LgorICAKKyAgICBgYGBqYXZhc2Ny
aXB0CisgICAgQXBwLkFwcGxpY2F0aW9uQ29udHJvbGxlciA9IEVtYmVyLkNvbnRyb2xsZXIuZXh0
ZW5kKHsKKyAgICAgIHdyaXR0ZW5Xb3JkczogIkxvdHMgb2YgdGV4dCB0aGF0IElTIGJvdW5kIgor
ICAgIH0pOworICAgIGBgYAorICAKKyAgICBgYGBoYW5kbGViYXJzCisgICAge3t0ZXh0YXJlYSB2
YWx1ZT13cml0dGVuV29yZHN9fQorICAgIGBgYAorICAKKyAgICAgV291bGQgcmVzdWx0IGluIHRo
ZSBmb2xsb3dpbmcgSFRNTDoKKyAgCisgICAgYGBgaHRtbAorICAgIDx0ZXh0YXJlYSBjbGFzcz0i
ZW1iZXItdGV4dC1hcmVhIj4KKyAgICAgIExvdHMgb2YgdGV4dCB0aGF0IElTIGJvdW5kCisgICAg
PC90ZXh0YXJlYT4KKyAgICBgYGAKKyAgCisgICAgSWYgeW91IHdhbnRlZCBhIG9uZSB3YXkgYmlu
ZGluZyBiZXR3ZWVuIHRoZSB0ZXh0IGFyZWEgYW5kIGEgZGl2IHRhZworICAgIHNvbWV3aGVyZSBl
bHNlIG9uIHlvdXIgc2NyZWVuLCB5b3UgY291bGQgdXNlIGBFbWJlci5jb21wdXRlZC5vbmVXYXlg
OgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgQXBwLkFwcGxpY2F0aW9uQ29udHJvbGxlciA9
IEVtYmVyLkNvbnRyb2xsZXIuZXh0ZW5kKHsKKyAgICAgIHdyaXR0ZW5Xb3JkczogIkxvdHMgb2Yg
dGV4dCB0aGF0IElTIGJvdW5kIiwKKyAgICAgIG91dHB1dFdyaXR0ZW5Xb3JkczogRW1iZXIuY29t
cHV0ZWQub25lV2F5KCJ3cml0dGVuV29yZHMiKQorICAgIH0pOworICAgIGBgYAorICAKKyAgICBg
YGBoYW5kbGViYXJzCisgICAge3t0ZXh0YXJlYSB2YWx1ZT13cml0dGVuV29yZHN9fQorICAKKyAg
ICA8ZGl2PgorICAgICAge3tvdXRwdXRXcml0dGVuV29yZHN9fQorICAgIDwvZGl2PgorICAgIGBg
YAorICAKKyAgICBXb3VsZCByZXN1bHQgaW4gdGhlIGZvbGxvd2luZyBIVE1MOgorICAKKyAgICBg
YGBodG1sCisgICAgPHRleHRhcmVhIGNsYXNzPSJlbWJlci10ZXh0LWFyZWEiPgorICAgICAgTG90
cyBvZiB0ZXh0IHRoYXQgSVMgYm91bmQKKyAgICA8L3RleHRhcmVhPgorICAKKyAgICA8LS0gdGhl
IGZvbGxvd2luZyBkaXYgd2lsbCBiZSB1cGRhdGVkIGluIHJlYWwgdGltZSBhcyB5b3UgdHlwZSAt
LT4KKyAgCisgICAgPGRpdj4KKyAgICAgIExvdHMgb2YgdGV4dCB0aGF0IElTIGJvdW5kCisgICAg
PC9kaXY+CisgICAgYGBgCisgIAorICAgIEZpbmFsbHksIHRoaXMgZXhhbXBsZSByZWFsbHkgc2hv
d3MgdGhlIHBvd2VyIGFuZCBlYXNlIG9mIEVtYmVyIHdoZW4gdHdvCisgICAgcHJvcGVydGllcyBh
cmUgYm91bmQgdG8gZWFjaG90aGVyIHZpYSBgRW1iZXIuY29tcHV0ZWQuYWxpYXNgLiBUeXBlIGlu
dG8KKyAgICBlaXRoZXIgdGV4dCBhcmVhIGJveCBhbmQgdGhleSdsbCBib3RoIHN0YXkgaW4gc3lu
Yy4gTm90ZSB0aGF0CisgICAgYEVtYmVyLmNvbXB1dGVkLmFsaWFzYCBjb3N0cyBtb3JlIGluIHRl
cm1zIG9mIHBlcmZvcm1hbmNlLCBzbyBvbmx5IHVzZSBpdCB3aGVuCisgICAgeW91ciByZWFsbHkg
YmluZGluZyBpbiBib3RoIGRpcmVjdGlvbnM6CisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAgICBB
cHAuQXBwbGljYXRpb25Db250cm9sbGVyID0gRW1iZXIuQ29udHJvbGxlci5leHRlbmQoeworICAg
ICAgd3JpdHRlbldvcmRzOiAiTG90cyBvZiB0ZXh0IHRoYXQgSVMgYm91bmQiLAorICAgICAgdHdv
V2F5V3JpdHRlbldvcmRzOiBFbWJlci5jb21wdXRlZC5hbGlhcygid3JpdHRlbldvcmRzIikKKyAg
ICB9KTsKKyAgICBgYGAKKyAgCisgICAgYGBgaGFuZGxlYmFycworICAgIHt7dGV4dGFyZWEgdmFs
dWU9d3JpdHRlbldvcmRzfX0KKyAgICB7e3RleHRhcmVhIHZhbHVlPXR3b1dheVdyaXR0ZW5Xb3Jk
c319CisgICAgYGBgCisgIAorICAgIGBgYGh0bWwKKyAgICA8dGV4dGFyZWEgaWQ9ImVtYmVyMSIg
Y2xhc3M9ImVtYmVyLXRleHQtYXJlYSI+CisgICAgICBMb3RzIG9mIHRleHQgdGhhdCBJUyBib3Vu
ZAorICAgIDwvdGV4dGFyZWE+CisgIAorICAgIDwtLSBib3RoIHVwZGF0ZWQgaW4gcmVhbCB0aW1l
IC0tPgorICAKKyAgICA8dGV4dGFyZWEgaWQ9ImVtYmVyMiIgY2xhc3M9ImVtYmVyLXRleHQtYXJl
YSI+CisgICAgICBMb3RzIG9mIHRleHQgdGhhdCBJUyBib3VuZAorICAgIDwvdGV4dGFyZWE+Cisg
ICAgYGBgCisgIAorICAgICMjIyBBY3Rpb25zCisgIAorICAgIFRoZSBoZWxwZXIgY2FuIHNlbmQg
bXVsdGlwbGUgYWN0aW9ucyBiYXNlZCBvbiB1c2VyIGV2ZW50cy4KKyAgCisgICAgVGhlIGFjdGlv
biBwcm9wZXJ0eSBkZWZpbmVzIHRoZSBhY3Rpb24gd2hpY2ggaXMgc2VuZCB3aGVuCisgICAgdGhl
IHVzZXIgcHJlc3NlcyB0aGUgcmV0dXJuIGtleS4KKyAgCisgICAgYGBgaGFuZGxlYmFycworICAg
IHt7aW5wdXQgYWN0aW9uPSJzdWJtaXQifX0KKyAgICBgYGAKKyAgCisgICAgVGhlIGhlbHBlciBh
bGxvd3Mgc29tZSB1c2VyIGV2ZW50cyB0byBzZW5kIGFjdGlvbnMuCisgIAorICAqIGBlbnRlcmAK
KyAgKiBgaW5zZXJ0LW5ld2xpbmVgCisgICogYGVzY2FwZS1wcmVzc2AKKyAgKiBgZm9jdXMtaW5g
CisgICogYGZvY3VzLW91dGAKKyAgKiBga2V5LXByZXNzYAorICAKKyAgICBGb3IgZXhhbXBsZSwg
aWYgeW91IGRlc2lyZSBhbiBhY3Rpb24gdG8gYmUgc2VudCB3aGVuIHRoZSBpbnB1dCBpcyBibHVy
cmVkLAorICAgIHlvdSBvbmx5IG5lZWQgdG8gc2V0dXAgdGhlIGFjdGlvbiBuYW1lIHRvIHRoZSBl
dmVudCBuYW1lIHByb3BlcnR5LgorICAKKyAgICBgYGBoYW5kbGViYXJzCisgICAge3t0ZXh0YXJl
YSBmb2N1cy1pbj0iYWxlcnRNZXNzYWdlIn19CisgICAgYGBgCisgIAorICAgIFNlZSBtb3JlIGFi
b3V0IFtUZXh0IFN1cHBvcnQgQWN0aW9uc10oL2FwaS9jbGFzc2VzL0VtYmVyLlRleHRBcmVhLmh0
bWwpCisgIAorICAgICMjIyBFeHRlbnNpb24KKyAgCisgICAgSW50ZXJuYWxseSwgYHt7dGV4dGFy
ZWF9fWAgY3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBgRW1iZXIuVGV4dEFyZWFgLCBwYXNzaW5nCisg
ICAgYXJndW1lbnRzIGZyb20gdGhlIGhlbHBlciB0byBgRW1iZXIuVGV4dEFyZWFgJ3MgYGNyZWF0
ZWAgbWV0aG9kLiBZb3UgY2FuCisgICAgZXh0ZW5kIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGV4dCBh
cmVhcyBpbiB5b3VyIGFwcGxpY2F0aW9uIGJ5IHJlb3BlbmluZyB0aGlzCisgICAgY2xhc3MuIEZv
ciBleGFtcGxlLCBpZiB5b3UgYXJlIGJ1aWxkaW5nIGEgQm9vdHN0cmFwIHByb2plY3Qgd2hlcmUg
YGRhdGEtKmAKKyAgICBhdHRyaWJ1dGVzIGFyZSB1c2VkLCB5b3UgY2FuIGdsb2JhbGx5IGFkZCBz
dXBwb3J0IGZvciBhIGBkYXRhLSpgIGF0dHJpYnV0ZQorICAgIG9uIGFsbCBge3t0ZXh0YXJlYX19
YHMnIGluIHlvdXIgYXBwIGJ5IHJlb3BlbmluZyBgRW1iZXIuVGV4dEFyZWFgIG9yCisgICAgYEVt
YmVyLlRleHRTdXBwb3J0YCBhbmQgYWRkaW5nIGl0IHRvIHRoZSBgYXR0cmlidXRlQmluZGluZ3Ng
IGNvbmNhdGVuYXRlZAorICAgIHByb3BlcnR5OgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAg
RW1iZXIuVGV4dEFyZWEucmVvcGVuKHsKKyAgICAgIGF0dHJpYnV0ZUJpbmRpbmdzOiBbJ2RhdGEt
ZXJyb3InXQorICAgIH0pOworICAgIGBgYAorICAKKyAgICBLZWVwIGluIG1pbmQgd2hlbiB3cml0
aW5nIGBFbWJlci5UZXh0QXJlYWAgc3ViY2xhc3NlcyB0aGF0IGBFbWJlci5UZXh0QXJlYWAKKyAg
ICBpdHNlbGYgZXh0ZW5kcyBgRW1iZXIuQ29tcG9uZW50YC4gRXhwZWN0IGlzb2xhdGVkIGNvbXBv
bmVudCBzZW1hbnRpY3MsIG5vdAorICAgIGxlZ2FjeSAxLnggdmlldyBzZW1hbnRpY3MgKGxpa2Ug
YGNvbnRyb2xsZXJgIGJlaW5nIHByZXNlbnQpLgorICAKKyAgICBTZWUgbW9yZSBhYm91dCBbRW1i
ZXIgY29tcG9uZW50c10oL2FwaS9jbGFzc2VzL0VtYmVyLkNvbXBvbmVudC5odG1sKQorICAKKyAg
ICBAbWV0aG9kIHRleHRhcmVhCisgICAgQGZvciBFbWJlci5UZW1wbGF0ZXMuaGVscGVycworICAg
IEBwYXJhbSB7SGFzaH0gb3B0aW9ucworICAgIEBwdWJsaWMKKyAgKi8KKyAgJ3VzZSBzdHJpY3Qn
OworCisgIGV4cG9ydHMuZGVmYXVsdCA9IHRleHRhcmVhOworCisgIGZ1bmN0aW9uIHRleHRhcmVh
KG1vcnBoLCBlbnYsIHNjb3BlLCBvcmlnaW5hbFBhcmFtcywgaGFzaCwgdGVtcGxhdGUsIGludmVy
c2UsIHZpc2l0b3IpIHsKKyAgICBlbnYuaG9va3MuY29tcG9uZW50KG1vcnBoLCBlbnYsIHNjb3Bl
LCAnLXRleHQtYXJlYScsIG9yaWdpbmFsUGFyYW1zLCBoYXNoLCB7IGRlZmF1bHQ6IHRlbXBsYXRl
LCBpbnZlcnNlOiBpbnZlcnNlIH0sIHZpc2l0b3IpOworICAgIHJldHVybiB0cnVlOworICB9Cit9
KTsKK2VuaWZlZCgnZW1iZXItaHRtbGJhcnMva2V5d29yZHMvdW5ib3VuZCcsIFsnZXhwb3J0cycs
ICdlbWJlci1tZXRhbC9kZWJ1ZycsICdlbWJlci1tZXRhbC9zdHJlYW1zL3N0cmVhbScsICdlbWJl
ci1tZXRhbC9zdHJlYW1zL3V0aWxzJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbERl
YnVnLCBfZW1iZXJNZXRhbFN0cmVhbXNTdHJlYW0sIF9lbWJlck1ldGFsU3RyZWFtc1V0aWxzKSB7
CisgIC8qKgorICBAbW9kdWxlIGVtYmVyCisgIEBzdWJtb2R1bGUgZW1iZXItdGVtcGxhdGVzCisg
ICovCisKKyAgJ3VzZSBzdHJpY3QnOworCisgIGV4cG9ydHMuZGVmYXVsdCA9IHVuYm91bmQ7CisK
KyAgLyoqCisgICAgVGhlIGB7e3VuYm91bmR9fWAgaGVscGVyIGRpc2Nvbm5lY3RzIHRoZSBvbmUt
d2F5IGJpbmRpbmcgb2YgYSBwcm9wZXJ0eSwKKyAgICBlc3NlbnRpYWxseSBmcmVlemluZyBpdHMg
dmFsdWUgYXQgdGhlIG1vbWVudCBvZiByZW5kZXJpbmcuIEZvciBleGFtcGxlLAorICAgIGluIHRo
aXMgZXhhbXBsZSB0aGUgZGlzcGxheSBvZiB0aGUgdmFyaWFibGUgYG5hbWVgIHdpbGwgbm90IGNo
YW5nZSBldmVuCisgICAgaWYgaXQgaXMgc2V0IHdpdGggYSBuZXcgdmFsdWU6CisgIAorICAgIGBg
YGhhbmRsZWJhcnMKKyAgICB7e3VuYm91bmQgbmFtZX19CisgICAgYGBgCisgIAorICAgIExpa2Ug
YW55IGhlbHBlciwgdGhlIGB1bmJvdW5kYCBoZWxwZXIgY2FuIGFjY2VwdCBhIG5lc3RlZCBoZWxw
ZXIgZXhwcmVzc2lvbi4KKyAgICBUaGlzIGFsbG93cyBmb3IgY3VzdG9tIGhlbHBlcnMgdG8gYmUg
cmVuZGVyZWQgdW5ib3VuZDoKKyAgCisgICAgYGBgaGFuZGxlYmFycworICAgIHt7dW5ib3VuZCAo
c29tZS1jdXN0b20taGVscGVyKX19CisgICAge3t1bmJvdW5kIChjYXBpdGFsaXplIG5hbWUpfX0K
KyAgICB7eyEgWW91IGNhbiB1c2UgYW55IGhlbHBlciwgaW5jbHVkaW5nIHVuYm91bmQsIGluIGEg
bmVzdGVkIGV4cHJlc3Npb24gfX0KKyAgICB7e2NhcGl0YWxpemUgKHVuYm91bmQgbmFtZSl9fQor
ICAgIGBgYAorICAKKyAgICBUaGUgYHVuYm91bmRgIGhlbHBlciBvbmx5IGFjY2VwdHMgYSBzaW5n
bGUgYXJndW1lbnQsIGFuZCBpdCByZXR1cm4gYW4KKyAgICB1bmJvdW5kIHZhbHVlLgorICAKKyAg
ICBAbWV0aG9kIHVuYm91bmQKKyAgICBAZm9yIEVtYmVyLlRlbXBsYXRlcy5oZWxwZXJzCisgICAg
QHB1YmxpYworICAqLworCisgIHZhciBWb2xhdGlsZVN0cmVhbSA9IF9lbWJlck1ldGFsU3RyZWFt
c1N0cmVhbS5kZWZhdWx0LmV4dGVuZCh7CisgICAgaW5pdDogZnVuY3Rpb24gKHNvdXJjZSkgewor
ICAgICAgdGhpcy5sYWJlbCA9ICcodm9sYXRpbGUgJyArIHNvdXJjZS5sYWJlbCArICcpJzsKKyAg
ICAgIHRoaXMuc291cmNlID0gc291cmNlOworICAgICAgdGhpcy5hZGREZXBlbmRlbmN5KHNvdXJj
ZSk7CisgICAgfSwKKworICAgIHZhbHVlOiBmdW5jdGlvbiAoKSB7CisgICAgICByZXR1cm4gX2Vt
YmVyTWV0YWxTdHJlYW1zVXRpbHMucmVhZCh0aGlzLnNvdXJjZSk7CisgICAgfSwKKworICAgIG5v
dGlmeTogZnVuY3Rpb24gKCkge30KKyAgfSk7CisKKyAgZnVuY3Rpb24gdW5ib3VuZChtb3JwaCwg
ZW52LCBzY29wZSwgcGFyYW1zLCBoYXNoLCB0ZW1wbGF0ZSwgaW52ZXJzZSwgdmlzaXRvcikgewor
ICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCd1bmJvdW5kIGhlbHBlciBjYW5ub3QgYmUgY2Fs
bGVkIHdpdGggbXVsdGlwbGUgcGFyYW1zIG9yIGhhc2ggcGFyYW1zJywgcGFyYW1zLmxlbmd0aCA9
PT0gMSAmJiBPYmplY3Qua2V5cyhoYXNoKS5sZW5ndGggPT09IDApOworICAgIF9lbWJlck1ldGFs
RGVidWcuYXNzZXJ0KCd1bmJvdW5kIGhlbHBlciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgYmxvY2sn
LCAhdGVtcGxhdGUpOworCisgICAgaWYgKG1vcnBoID09PSBudWxsKSB7CisgICAgICByZXR1cm4g
bmV3IFZvbGF0aWxlU3RyZWFtKHBhcmFtc1swXSk7CisgICAgfQorCisgICAgdmFyIHN0cmVhbSA9
IHVuZGVmaW5lZDsKKyAgICBpZiAobW9ycGgubGlua2VkUmVzdWx0KSB7CisgICAgICBzdHJlYW0g
PSBtb3JwaC5saW5rZWRSZXN1bHQ7CisgICAgfSBlbHNlIHsKKyAgICAgIHN0cmVhbSA9IG5ldyBW
b2xhdGlsZVN0cmVhbShwYXJhbXNbMF0pOworICAgICAgbW9ycGgubGlua2VkUmVzdWx0ID0gc3Ry
ZWFtOworICAgIH0KKyAgICBlbnYuaG9va3MucmFuZ2UobW9ycGgsIGVudiwgc2NvcGUsIG51bGws
IHN0cmVhbSwgdmlzaXRvcik7CisgICAgcmV0dXJuIHRydWU7CisgIH0KK30pOworZW5pZmVkKCdl
bWJlci1odG1sYmFycy9rZXl3b3Jkcy92aWV3JywgWydleHBvcnRzJywgJ2VtYmVyLXZpZXdzL3N0
cmVhbXMvdXRpbHMnLCAnZW1iZXItdmlld3Mvdmlld3MvdmlldycsICdlbWJlci1odG1sYmFycy9u
b2RlLW1hbmFnZXJzL3ZpZXctbm9kZS1tYW5hZ2VyJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1i
ZXJWaWV3c1N0cmVhbXNVdGlscywgX2VtYmVyVmlld3NWaWV3c1ZpZXcsIF9lbWJlckh0bWxiYXJz
Tm9kZU1hbmFnZXJzVmlld05vZGVNYW5hZ2VyKSB7CisgIC8qKgorICBAbW9kdWxlIGVtYmVyCisg
IEBzdWJtb2R1bGUgZW1iZXItdGVtcGxhdGVzCisgICovCisKKyAgJ3VzZSBzdHJpY3QnOworCisg
IC8qKgorICAgIGB7e3ZpZXd9fWAgaW5zZXJ0cyBhIG5ldyBpbnN0YW5jZSBvZiBhbiBgRW1iZXIu
Vmlld2AgaW50byBhIHRlbXBsYXRlIHBhc3NpbmcgaXRzCisgICAgb3B0aW9ucyB0byB0aGUgYEVt
YmVyLlZpZXdgJ3MgYGNyZWF0ZWAgbWV0aG9kIGFuZCB1c2luZyB0aGUgc3VwcGxpZWQgYmxvY2sg
YXMKKyAgICB0aGUgdmlldydzIG93biB0ZW1wbGF0ZS4KKyAgCisgICAgQW4gZW1wdHkgYDxib2R5
PmAgYW5kIHRoZSBmb2xsb3dpbmcgdGVtcGxhdGU6CisgIAorICAgIGBgYGhhbmRsZWJhcnMKKyAg
ICBBIHNwYW46CisgICAge3sjdmlldyB0YWdOYW1lPSJzcGFuIn19CisgICAgICBoZWxsby4KKyAg
ICB7ey92aWV3fX0KKyAgICBgYGAKKyAgCisgICAgV2lsbCByZXN1bHQgaW4gSFRNTCBzdHJ1Y3R1
cmU6CisgIAorICAgIGBgYGh0bWwKKyAgICA8Ym9keT4KKyAgICAgIDwhLS0gTm90ZTogdGhlIGhh
bmRsZWJhcnMgdGVtcGxhdGUgc2NyaXB0CisgICAgICAgICAgIGFsc28gcmVzdWx0cyBpbiBhIHJl
bmRlcmVkIEVtYmVyLlZpZXcKKyAgICAgICAgICAgd2hpY2ggaXMgdGhlIG91dGVyIDxkaXY+IGhl
cmUgLS0+CisgIAorICAgICAgPGRpdiBjbGFzcz0iZW1iZXItdmlldyI+CisgICAgICAgIEEgc3Bh
bjoKKyAgICAgICAgPHNwYW4gaWQ9ImVtYmVyMSIgY2xhc3M9ImVtYmVyLXZpZXciPgorICAgICAg
ICAgIEhlbGxvLgorICAgICAgICA8L3NwYW4+CisgICAgICA8L2Rpdj4KKyAgICA8L2JvZHk+Cisg
ICAgYGBgCisgIAorICAgICMjIyBgcGFyZW50Vmlld2Agc2V0dGluZworICAKKyAgICBUaGUgYHBh
cmVudFZpZXdgIHByb3BlcnR5IG9mIHRoZSBuZXcgYEVtYmVyLlZpZXdgIGluc3RhbmNlIGNyZWF0
ZWQgdGhyb3VnaAorICAgIGB7e3ZpZXd9fWAgd2lsbCBiZSBzZXQgdG8gdGhlIGBFbWJlci5WaWV3
YCBpbnN0YW5jZSBvZiB0aGUgdGVtcGxhdGUgd2hlcmUKKyAgICBge3t2aWV3fX1gIHdhcyBjYWxs
ZWQuCisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAgICBhVmlldyA9IEVtYmVyLlZpZXcuY3JlYXRl
KHsKKyAgICAgIHRlbXBsYXRlOiBFbWJlci5IYW5kbGViYXJzLmNvbXBpbGUoInt7I3ZpZXd9fSBt
eSBwYXJlbnQ6IHt7cGFyZW50Vmlldy5lbGVtZW50SWR9fSB7ey92aWV3fX0iKQorICAgIH0pOwor
ICAKKyAgICBhVmlldy5hcHBlbmRUbygnYm9keScpOworICAgIGBgYAorICAKKyAgICBXaWxsIHJl
c3VsdCBpbiBIVE1MIHN0cnVjdHVyZToKKyAgCisgICAgYGBgaHRtbAorICAgIDxkaXYgaWQ9ImVt
YmVyMSIgY2xhc3M9ImVtYmVyLXZpZXciPgorICAgICAgPGRpdiBpZD0iZW1iZXIyIiBjbGFzcz0i
ZW1iZXItdmlldyI+CisgICAgICAgIG15IHBhcmVudDogZW1iZXIxCisgICAgICA8L2Rpdj4KKyAg
ICA8L2Rpdj4KKyAgICBgYGAKKyAgCisgICAgIyMjIFNldHRpbmcgQ1NTIGlkIGFuZCBjbGFzcyBh
dHRyaWJ1dGVzCisgIAorICAgIFRoZSBIVE1MIGBpZGAgYXR0cmlidXRlIGNhbiBiZSBzZXQgb24g
dGhlIGB7e3ZpZXd9fWAncyByZXN1bHRpbmcgZWxlbWVudCB3aXRoCisgICAgdGhlIGBpZGAgb3B0
aW9uLiBUaGlzIG9wdGlvbiB3aWxsIF9ub3RfIGJlIHBhc3NlZCB0byBgRW1iZXIuVmlldy5jcmVh
dGVgLgorICAKKyAgICBgYGBoYW5kbGViYXJzCisgICAge3sjdmlldyB0YWdOYW1lPSJzcGFuIiBp
ZD0iYS1jdXN0b20taWQifX0KKyAgICAgIGhlbGxvLgorICAgIHt7L3ZpZXd9fQorICAgIGBgYAor
ICAKKyAgICBSZXN1bHRzIGluIHRoZSBmb2xsb3dpbmcgSFRNTCBzdHJ1Y3R1cmU6CisgIAorICAg
IGBgYGh0bWwKKyAgICA8ZGl2IGNsYXNzPSJlbWJlci12aWV3Ij4KKyAgICAgIDxzcGFuIGlkPSJh
LWN1c3RvbS1pZCIgY2xhc3M9ImVtYmVyLXZpZXciPgorICAgICAgICBoZWxsby4KKyAgICAgIDwv
c3Bhbj4KKyAgICA8L2Rpdj4KKyAgICBgYGAKKyAgCisgICAgVGhlIEhUTUwgYGNsYXNzYCBhdHRy
aWJ1dGUgY2FuIGJlIHNldCBvbiB0aGUgYHt7dmlld319YCdzIHJlc3VsdGluZyBlbGVtZW50Cisg
ICAgd2l0aCB0aGUgYGNsYXNzYCBvciBgY2xhc3NOYW1lQmluZGluZ3NgIG9wdGlvbnMuIFRoZSBg
Y2xhc3NgIG9wdGlvbiB3aWxsCisgICAgZGlyZWN0bHkgc2V0IHRoZSBDU1MgYGNsYXNzYCBhdHRy
aWJ1dGUgYW5kIHdpbGwgbm90IGJlIHBhc3NlZCB0bworICAgIGBFbWJlci5WaWV3LmNyZWF0ZWAu
IGBjbGFzc05hbWVCaW5kaW5nc2Agd2lsbCBiZSBwYXNzZWQgdG8gYGNyZWF0ZWAgYW5kIHVzZQor
ICAgIGBFbWJlci5WaWV3YCdzIGNsYXNzIG5hbWUgYmluZGluZyBmdW5jdGlvbmFsaXR5OgorICAK
KyAgICBgYGBoYW5kbGViYXJzCisgICAge3sjdmlldyB0YWdOYW1lPSJzcGFuIiBjbGFzcz0iYS1j
dXN0b20tY2xhc3MifX0KKyAgICAgIGhlbGxvLgorICAgIHt7L3ZpZXd9fQorICAgIGBgYAorICAK
KyAgICBSZXN1bHRzIGluIHRoZSBmb2xsb3dpbmcgSFRNTCBzdHJ1Y3R1cmU6CisgIAorICAgIGBg
YGh0bWwKKyAgICA8ZGl2IGNsYXNzPSJlbWJlci12aWV3Ij4KKyAgICAgIDxzcGFuIGlkPSJlbWJl
cjIiIGNsYXNzPSJlbWJlci12aWV3IGEtY3VzdG9tLWNsYXNzIj4KKyAgICAgICAgaGVsbG8uCisg
ICAgICA8L3NwYW4+CisgICAgPC9kaXY+CisgICAgYGBgCisgIAorICAgICMjIyBTdXBwbHlpbmcg
YSBkaWZmZXJlbnQgdmlldyBjbGFzcworICAKKyAgICBge3t2aWV3fX1gIGNhbiB0YWtlIGFuIG9w
dGlvbmFsIGZpcnN0IGFyZ3VtZW50IGJlZm9yZSBpdHMgc3VwcGxpZWQgb3B0aW9ucyB0bworICAg
IHNwZWNpZnkgYSBwYXRoIHRvIGEgY3VzdG9tIHZpZXcgY2xhc3MuCisgIAorICAgIGBgYGhhbmRs
ZWJhcnMKKyAgICB7eyN2aWV3ICJjdXN0b20ifX17eyEgd2lsbCBsb29rIHVwIEFwcC5DdXN0b21W
aWV3IH19CisgICAgICBoZWxsby4KKyAgICB7ey92aWV3fX0KKyAgICBgYGAKKyAgCisgICAgVGhl
IGZpcnN0IGFyZ3VtZW50IGNhbiBhbHNvIGJlIGEgcmVsYXRpdmUgcGF0aCBhY2Nlc3NpYmxlIGZy
b20gdGhlIGN1cnJlbnQKKyAgICBjb250ZXh0LgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAg
TXlBcHAgPSBFbWJlci5BcHBsaWNhdGlvbi5jcmVhdGUoe30pOworICAgIE15QXBwLk91dGVyVmll
dyA9IEVtYmVyLlZpZXcuZXh0ZW5kKHsKKyAgICAgIGlubmVyVmlld0NsYXNzOiBFbWJlci5WaWV3
LmV4dGVuZCh7CisgICAgICAgIGNsYXNzTmFtZXM6IFsnYS1jdXN0b20tdmlldy1jbGFzcy1hcy1w
cm9wZXJ0eSddCisgICAgICB9KSwKKyAgICAgIHRlbXBsYXRlOiBFbWJlci5IYW5kbGViYXJzLmNv
bXBpbGUoJ3t7I3ZpZXcgdmlldy5pbm5lclZpZXdDbGFzc319IGhpIHt7L3ZpZXd9fScpCisgICAg
fSk7CisgIAorICAgIE15QXBwLk91dGVyVmlldy5jcmVhdGUoKS5hcHBlbmRUbygnYm9keScpOwor
ICAgIGBgYAorICAKKyAgICBXaWxsIHJlc3VsdCBpbiB0aGUgZm9sbG93aW5nIEhUTUw6CisgIAor
ICAgIGBgYGh0bWwKKyAgICA8ZGl2IGlkPSJlbWJlcjEiIGNsYXNzPSJlbWJlci12aWV3Ij4KKyAg
ICAgIDxkaXYgaWQ9ImVtYmVyMiIgY2xhc3M9ImVtYmVyLXZpZXcgYS1jdXN0b20tdmlldy1jbGFz
cy1hcy1wcm9wZXJ0eSI+CisgICAgICAgIGhpCisgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKyAg
ICBgYGAKKyAgCisgICAgIyMjIEJsb2NrbGVzcyB1c2UKKyAgCisgICAgSWYgeW91IHN1cHBseSBh
IGN1c3RvbSBgRW1iZXIuVmlld2Agc3ViY2xhc3MgdGhhdCBzcGVjaWZpZXMgaXRzIG93biB0ZW1w
bGF0ZQorICAgIG9yIHByb3ZpZGUgYSBgdGVtcGxhdGVOYW1lYCBvcHRpb24gdG8gYHt7dmlld319
YCBpdCBjYW4gYmUgdXNlZCB3aXRob3V0CisgICAgc3VwcGx5aW5nIGEgYmxvY2suIEF0dGVtcHRz
IHRvIHVzZSBib3RoIGEgYHRlbXBsYXRlTmFtZWAgb3B0aW9uIGFuZCBzdXBwbHkgYQorICAgIGJs
b2NrIHdpbGwgdGhyb3cgYW4gZXJyb3IuCisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAgICB2YXIg
QXBwID0gRW1iZXIuQXBwbGljYXRpb24uY3JlYXRlKCk7CisgICAgQXBwLldpdGhUZW1wbGF0ZURl
ZmluZWRWaWV3ID0gRW1iZXIuVmlldy5leHRlbmQoeworICAgICAgdGVtcGxhdGVOYW1lOiAnZGVm
aW5lZC10ZW1wbGF0ZScKKyAgICB9KTsKKyAgICBgYGAKKyAgCisgICAgYGBgaGFuZGxlYmFycwor
ICAgIHt7ISBhcHBsaWNhdGlvbi5oYnMgfX0KKyAgICB7e3ZpZXcgJ3dpdGgtdGVtcGxhdGUtZGVm
aW5lZCd9fQorICAgIGBgYAorICAKKyAgICBgYGBoYW5kbGViYXJzCisgICAge3shIGRlZmluZWQt
dGVtcGxhdGUuaGJzIH19CisgICAgU29tZSBjb250ZW50IGZvciB0aGUgZGVmaW5lZCB0ZW1wbGF0
ZSB2aWV3LgorICAgIGBgYAorICAKKyAgICAjIyMgYHZpZXdOYW1lYCBwcm9wZXJ0eQorICAKKyAg
ICBZb3UgY2FuIHN1cHBseSBhIGB2aWV3TmFtZWAgb3B0aW9uIHRvIGB7e3ZpZXd9fWAuIFRoZSBg
RW1iZXIuVmlld2AgaW5zdGFuY2UKKyAgICB3aWxsIGJlIHJlZmVyZW5jZWQgYXMgYSBwcm9wZXJ0
eSBvZiBpdHMgcGFyZW50IHZpZXcgYnkgdGhpcyBuYW1lLgorICAKKyAgICBgYGBqYXZhc2NyaXB0
CisgICAgYVZpZXcgPSBFbWJlci5WaWV3LmNyZWF0ZSh7CisgICAgICB0ZW1wbGF0ZTogRW1iZXIu
SGFuZGxlYmFycy5jb21waWxlKCd7eyN2aWV3IHZpZXdOYW1lPSJhQ2hpbGRCeU5hbWUifX0gaGkg
e3svdmlld319JykKKyAgICB9KTsKKyAgCisgICAgYVZpZXcuYXBwZW5kVG8oJ2JvZHknKTsKKyAg
ICBhVmlldy5nZXQoJ2FDaGlsZEJ5TmFtZScpIC8vIHRoZSBpbnN0YW5jZSBvZiBFbWJlci5WaWV3
IGNyZWF0ZWQgYnkge3t2aWV3fX0gaGVscGVyCisgICAgYGBgCisgIAorICAgIEBtZXRob2Qgdmll
dworICAgIEBmb3IgRW1iZXIuVGVtcGxhdGVzLmhlbHBlcnMKKyAgICBAcHVibGljCisgICAgQGRl
cHJlY2F0ZWQKKyAgKi8KKworICBleHBvcnRzLmRlZmF1bHQgPSB7CisgICAgc2V0dXBTdGF0ZTog
ZnVuY3Rpb24gKHN0YXRlLCBlbnYsIHNjb3BlLCBwYXJhbXMsIGhhc2gpIHsKKyAgICAgIHZhciBy
ZWFkID0gZW52Lmhvb2tzLmdldFZhbHVlOworICAgICAgdmFyIHRhcmdldE9iamVjdCA9IHJlYWQo
c2NvcGUuZ2V0U2VsZigpKTsKKyAgICAgIHZhciB2aWV3Q2xhc3NPckluc3RhbmNlID0gc3RhdGUu
dmlld0NsYXNzT3JJbnN0YW5jZTsKKyAgICAgIGlmICghdmlld0NsYXNzT3JJbnN0YW5jZSkgewor
ICAgICAgICB2aWV3Q2xhc3NPckluc3RhbmNlID0gZ2V0VmlldyhyZWFkKHBhcmFtc1swXSksIGVu
di5vd25lcik7CisgICAgICB9CisKKyAgICAgIC8vIGlmIHBhcmVudFZpZXcgZXhpc3RzLCB1c2Ug
aXRzIGNvbnRyb2xsZXIgKHRoZSBkZWZhdWx0CisgICAgICAvLyBiZWhhdmlvciksIG90aGVyd2lz
ZSB1c2UgYHNjb3BlLnNlbGZgIGFzIHRoZSBjb250cm9sbGVyCisgICAgICB2YXIgY29udHJvbGxl
ciA9IHNjb3BlLmhhc0xvY2FsKCd2aWV3JykgPyBudWxsIDogcmVhZChzY29wZS5nZXRTZWxmKCkp
OworCisgICAgICByZXR1cm4geworICAgICAgICBtYW5hZ2VyOiBzdGF0ZS5tYW5hZ2VyLAorICAg
ICAgICBwYXJlbnRWaWV3OiBlbnYudmlldywKKyAgICAgICAgY29udHJvbGxlcjogY29udHJvbGxl
ciwKKyAgICAgICAgdGFyZ2V0T2JqZWN0OiB0YXJnZXRPYmplY3QsCisgICAgICAgIHZpZXdDbGFz
c09ySW5zdGFuY2U6IHZpZXdDbGFzc09ySW5zdGFuY2UKKyAgICAgIH07CisgICAgfSwKKworICAg
IHJlcmVuZGVyOiBmdW5jdGlvbiAobW9ycGgsIGVudiwgc2NvcGUsIHBhcmFtcywgaGFzaCwgdGVt
cGxhdGUsIGludmVyc2UsIHZpc2l0b3IpIHsKKyAgICAgIC8vIElmIHRoZSBoYXNoIGlzIGVtcHR5
LCB0aGUgY29tcG9uZW50IGNhbm5vdCBoYXZlIGV4dHJhY3RlZCBhIHBhcnQKKyAgICAgIC8vIG9m
IGEgbXV0YWJsZSBwYXJhbSBhbmQgdXNlZCBpdCBpbiBpdHMgbGF5b3V0LCBiZWNhdXNlIHRoZXJl
IGFyZQorICAgICAgLy8gbm8gcGFyYW1zIGF0IGFsbC4KKyAgICAgIGlmIChPYmplY3Qua2V5cyho
YXNoKS5sZW5ndGgpIHsKKyAgICAgICAgcmV0dXJuIG1vcnBoLmdldFN0YXRlKCkubWFuYWdlci5y
ZXJlbmRlcihlbnYsIGhhc2gsIHZpc2l0b3IsIHRydWUpOworICAgICAgfQorICAgIH0sCisKKyAg
ICByZW5kZXI6IGZ1bmN0aW9uIChub2RlLCBlbnYsIHNjb3BlLCBwYXJhbXMsIGhhc2gsIHRlbXBs
YXRlLCBpbnZlcnNlLCB2aXNpdG9yKSB7CisgICAgICBpZiAoaGFzaC50YWcpIHsKKyAgICAgICAg
aGFzaCA9IHN3YXBLZXkoaGFzaCwgJ3RhZycsICd0YWdOYW1lJyk7CisgICAgICB9CisKKyAgICAg
IGlmIChoYXNoLmNsYXNzTmFtZUJpbmRpbmdzKSB7CisgICAgICAgIGhhc2guY2xhc3NOYW1lQmlu
ZGluZ3MgPSBoYXNoLmNsYXNzTmFtZUJpbmRpbmdzLnNwbGl0KCcgJyk7CisgICAgICB9CisKKyAg
ICAgIHZhciBzdGF0ZSA9IG5vZGUuZ2V0U3RhdGUoKTsKKyAgICAgIHZhciBwYXJlbnRWaWV3ID0g
c3RhdGUucGFyZW50VmlldzsKKworICAgICAgdmFyIG9wdGlvbnMgPSB7CisgICAgICAgIGNvbXBv
bmVudDogc3RhdGUudmlld0NsYXNzT3JJbnN0YW5jZSwKKyAgICAgICAgbGF5b3V0OiBudWxsCisg
ICAgICB9OworCisgICAgICBvcHRpb25zLmNyZWF0ZU9wdGlvbnMgPSB7fTsKKyAgICAgIGlmIChz
dGF0ZS5jb250cm9sbGVyKSB7CisgICAgICAgIC8vIFVzZSBgX2NvbnRyb2xsZXJgIHRvIGF2b2lk
IHN0b21waW5nIG9uIGEgQ1AKKyAgICAgICAgLy8gdGhhdCBleGlzdHMgaW4gdGhlIHRhcmdldCB2
aWV3L2NvbXBvbmVudAorICAgICAgICBvcHRpb25zLmNyZWF0ZU9wdGlvbnMuX2NvbnRyb2xsZXIg
PSBzdGF0ZS5jb250cm9sbGVyOworICAgICAgfQorCisgICAgICBpZiAoc3RhdGUudGFyZ2V0T2Jq
ZWN0KSB7CisgICAgICAgIC8vIFVzZSBgX3RhcmdldE9iamVjdGAgdG8gYXZvaWQgc3RvbXBpbmcg
b24gYSBDUAorICAgICAgICAvLyB0aGF0IGV4aXN0cyBpbiB0aGUgdGFyZ2V0IHZpZXcvY29tcG9u
ZW50CisgICAgICAgIG9wdGlvbnMuY3JlYXRlT3B0aW9ucy5fdGFyZ2V0T2JqZWN0ID0gc3RhdGUu
dGFyZ2V0T2JqZWN0OworICAgICAgfQorCisgICAgICBpZiAoc3RhdGUubWFuYWdlcikgeworICAg
ICAgICBzdGF0ZS5tYW5hZ2VyLmRlc3Ryb3koKTsKKyAgICAgICAgc3RhdGUubWFuYWdlciA9IG51
bGw7CisgICAgICB9CisKKyAgICAgIHZhciBub2RlTWFuYWdlciA9IF9lbWJlckh0bWxiYXJzTm9k
ZU1hbmFnZXJzVmlld05vZGVNYW5hZ2VyLmRlZmF1bHQuY3JlYXRlKG5vZGUsIGVudiwgaGFzaCwg
b3B0aW9ucywgcGFyZW50VmlldywgbnVsbCwgc2NvcGUsIHRlbXBsYXRlKTsKKyAgICAgIHN0YXRl
Lm1hbmFnZXIgPSBub2RlTWFuYWdlcjsKKworICAgICAgbm9kZU1hbmFnZXIucmVuZGVyKGVudiwg
aGFzaCwgdmlzaXRvcik7CisgICAgfQorICB9OworCisgIGZ1bmN0aW9uIGdldFZpZXcodmlld1Bh
dGgsIG93bmVyKSB7CisgICAgdmFyIHZpZXdDbGFzc09ySW5zdGFuY2U7CisKKyAgICBpZiAoIXZp
ZXdQYXRoKSB7CisgICAgICBpZiAob3duZXIpIHsKKyAgICAgICAgdmlld0NsYXNzT3JJbnN0YW5j
ZSA9IG93bmVyLl9sb29rdXBGYWN0b3J5KCd2aWV3OnRvcGxldmVsJyk7CisgICAgICB9IGVsc2Ug
eworICAgICAgICB2aWV3Q2xhc3NPckluc3RhbmNlID0gX2VtYmVyVmlld3NWaWV3c1ZpZXcuZGVm
YXVsdDsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgdmlld0NsYXNzT3JJbnN0YW5jZSA9
IF9lbWJlclZpZXdzU3RyZWFtc1V0aWxzLnJlYWRWaWV3RmFjdG9yeSh2aWV3UGF0aCwgb3duZXIp
OworICAgIH0KKworICAgIHJldHVybiB2aWV3Q2xhc3NPckluc3RhbmNlOworICB9CisKKyAgZnVu
Y3Rpb24gc3dhcEtleShoYXNoLCBvcmlnaW5hbCwgdXBkYXRlKSB7CisgICAgdmFyIG5ld0hhc2gg
PSB7fTsKKworICAgIGZvciAodmFyIHByb3AgaW4gaGFzaCkgeworICAgICAgaWYgKHByb3AgPT09
IG9yaWdpbmFsKSB7CisgICAgICAgIG5ld0hhc2hbdXBkYXRlXSA9IGhhc2hbcHJvcF07CisgICAg
ICB9IGVsc2UgeworICAgICAgICBuZXdIYXNoW3Byb3BdID0gaGFzaFtwcm9wXTsKKyAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gbmV3SGFzaDsKKyAgfQorfSk7CitlbmlmZWQoJ2VtYmVyLWh0
bWxiYXJzL2tleXdvcmRzL3dpdGgnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvZGVidWcnLCAn
aHRtbGJhcnMtcnVudGltZSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxEZWJ1Zywg
X2h0bWxiYXJzUnVudGltZSkgeworICAvKioKKyAgQG1vZHVsZSBlbWJlcgorICBAc3VibW9kdWxl
IGVtYmVyLXRlbXBsYXRlcworICAqLworCisgICd1c2Ugc3RyaWN0JzsKKworICBleHBvcnRzLmRl
ZmF1bHQgPSB7CisgICAgaXNTdGFibGU6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHJldHVybiB0cnVl
OworICAgIH0sCisKKyAgICBpc0VtcHR5OiBmdW5jdGlvbiAoc3RhdGUpIHsKKyAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9LAorCisgICAgcmVuZGVyOiBmdW5jdGlvbiAobW9ycGgsIGVudiwgc2Nv
cGUsIHBhcmFtcywgaGFzaCwgdGVtcGxhdGUsIGludmVyc2UsIHZpc2l0b3IpIHsKKyAgICAgIF9l
bWJlck1ldGFsRGVidWcuYXNzZXJ0KCd7eyN3aXRoIGZvb319IG11c3QgYmUgY2FsbGVkIHdpdGgg
YSBzaW5nbGUgYXJndW1lbnQgb3IgdGhlIHVzZSB0aGUgJyArICd7eyN3aXRoIGZvbyBhcyB8YmFy
fH19IHN5bnRheCcsIHBhcmFtcy5sZW5ndGggPT09IDEpOworCisgICAgICBfZW1iZXJNZXRhbERl
YnVnLmFzc2VydCgnVGhlIHt7I3dpdGh9fSBoZWxwZXIgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIGJs
b2NrJywgISF0ZW1wbGF0ZSk7CisKKyAgICAgIF9odG1sYmFyc1J1bnRpbWUuaW50ZXJuYWwuY29u
dGludWVCbG9jayhtb3JwaCwgZW52LCBzY29wZSwgJ3dpdGgnLCBwYXJhbXMsIGhhc2gsIHRlbXBs
YXRlLCBpbnZlcnNlLCB2aXNpdG9yKTsKKyAgICB9LAorCisgICAgcmVyZW5kZXI6IGZ1bmN0aW9u
IChtb3JwaCwgZW52LCBzY29wZSwgcGFyYW1zLCBoYXNoLCB0ZW1wbGF0ZSwgaW52ZXJzZSwgdmlz
aXRvcikgeworICAgICAgX2h0bWxiYXJzUnVudGltZS5pbnRlcm5hbC5jb250aW51ZUJsb2NrKG1v
cnBoLCBlbnYsIHNjb3BlLCAnd2l0aCcsIHBhcmFtcywgaGFzaCwgdGVtcGxhdGUsIGludmVyc2Us
IHZpc2l0b3IpOworICAgIH0KKyAgfTsKK30pOworZW5pZmVkKCdlbWJlci1odG1sYmFycy9rZXl3
b3Jkcy95aWVsZCcsIFsnZXhwb3J0cyddLCBmdW5jdGlvbiAoZXhwb3J0cykgeworICAndXNlIHN0
cmljdCc7CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0geWllbGRLZXl3b3JkOworCisgIGZ1bmN0aW9u
IHlpZWxkS2V5d29yZChtb3JwaCwgZW52LCBzY29wZSwgcGFyYW1zLCBoYXNoLCB0ZW1wbGF0ZSwg
aW52ZXJzZSwgdmlzaXRvcikgeworICAgIHZhciB0byA9IGVudi5ob29rcy5nZXRWYWx1ZShoYXNo
LnRvKSB8fCAnZGVmYXVsdCc7CisgICAgdmFyIGJsb2NrID0gc2NvcGUuZ2V0QmxvY2sodG8pOwor
CisgICAgaWYgKGJsb2NrKSB7CisgICAgICBibG9jay5pbnZva2UoZW52LCBwYXJhbXMsIGhhc2gu
c2VsZiwgbW9ycGgsIHNjb3BlLCB2aXNpdG9yKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsK
KyAgfQorfSk7CitlbmlmZWQoJ2VtYmVyLWh0bWxiYXJzL21vcnBocy9hdHRyLW1vcnBoJywgWydl
eHBvcnRzJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2RvbS1oZWxwZXInLCAnZW1iZXItbWV0YWwv
aXNfbm9uZSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxEZWJ1ZywgX2RvbUhlbHBl
ciwgX2VtYmVyTWV0YWxJc19ub25lKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICB2YXIgSFRNTEJh
cnNBdHRyTW9ycGggPSBfZG9tSGVscGVyLmRlZmF1bHQucHJvdG90eXBlLkF0dHJNb3JwaENsYXNz
OworCisgIHZhciBzdHlsZVdhcm5pbmcgPSAnJyArICdCaW5kaW5nIHN0eWxlIGF0dHJpYnV0ZXMg
bWF5IGludHJvZHVjZSBjcm9zcy1zaXRlIHNjcmlwdGluZyB2dWxuZXJhYmlsaXRpZXM7ICcgKyAn
cGxlYXNlIGVuc3VyZSB0aGF0IHZhbHVlcyBiZWluZyBib3VuZCBhcmUgcHJvcGVybHkgZXNjYXBl
ZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sICcgKyAnaW5jbHVkaW5nIGhvdyB0byBkaXNhYmxlIHRo
aXMgd2FybmluZywgc2VlICcgKyAnaHR0cDovL2VtYmVyanMuY29tL2RlcHJlY2F0aW9ucy92MS54
LyN0b2NfYmluZGluZy1zdHlsZS1hdHRyaWJ1dGVzLic7CisKKyAgZXhwb3J0cy5zdHlsZVdhcm5p
bmcgPSBzdHlsZVdhcm5pbmc7CisgIHZhciBwcm90byA9IEhUTUxCYXJzQXR0ck1vcnBoLnByb3Rv
dHlwZTsKKworICBwcm90by5kaWRJbml0ID0gZnVuY3Rpb24gKCkgeworICAgIHRoaXMuc3RyZWFt
VW5zdWJzY3JpYmVycyA9IG51bGw7CisKKyAgICBfZW1iZXJNZXRhbERlYnVnLmRlYnVnU2VhbCh0
aGlzKTsKKyAgfTsKKworICBmdW5jdGlvbiBkZXByZWNhdGVFc2NhcGVkU3R5bGUobW9ycGgsIHZh
bHVlKSB7CisgICAgX2VtYmVyTWV0YWxEZWJ1Zy53YXJuKHN0eWxlV2FybmluZywgKGZ1bmN0aW9u
IChuYW1lLCB2YWx1ZSwgZXNjYXBlZCkgeworICAgICAgLy8gU2FmZVN0cmluZworICAgICAgaWYg
KF9lbWJlck1ldGFsSXNfbm9uZS5kZWZhdWx0KHZhbHVlKSB8fCB2YWx1ZSAmJiB2YWx1ZS50b0hU
TUwpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CisKKyAgICAgIGlmIChuYW1lICE9
PSAnc3R5bGUnKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgfQorCisgICAgICByZXR1
cm4gIWVzY2FwZWQ7CisgICAgfSkobW9ycGguYXR0ck5hbWUsIHZhbHVlLCBtb3JwaC5lc2NhcGVk
KSwgeyBpZDogJ2VtYmVyLWh0bWxiYXJzLnN0eWxlLXhzcy13YXJuaW5nJyB9KTsKKyAgfQorCisg
IHByb3RvLndpbGxTZXRDb250ZW50ID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgZGVwcmVjYXRl
RXNjYXBlZFN0eWxlKHRoaXMsIHZhbHVlKTsKKyAgfTsKKworICBleHBvcnRzLmRlZmF1bHQgPSBI
VE1MQmFyc0F0dHJNb3JwaDsKK30pOworZW5pZmVkKCdlbWJlci1odG1sYmFycy9tb3JwaHMvbW9y
cGgnLCBbJ2V4cG9ydHMnLCAnZG9tLWhlbHBlcicsICdlbWJlci1tZXRhbC9kZWJ1ZyddLCBmdW5j
dGlvbiAoZXhwb3J0cywgX2RvbUhlbHBlciwgX2VtYmVyTWV0YWxEZWJ1ZykgeworICAndXNlIHN0
cmljdCc7CisKKyAgdmFyIEhUTUxCYXJzTW9ycGggPSBfZG9tSGVscGVyLmRlZmF1bHQucHJvdG90
eXBlLk1vcnBoQ2xhc3M7CisgIHZhciBndWlkID0gMTsKKworICBmdW5jdGlvbiBFbWJlck1vcnBo
KERPTUhlbHBlciwgY29udGV4dHVhbEVsZW1lbnQpIHsKKyAgICB0aGlzLkhUTUxCYXJzTW9ycGgk
Y29uc3RydWN0b3IoRE9NSGVscGVyLCBjb250ZXh0dWFsRWxlbWVudCk7CisKKyAgICB0aGlzLmVt
YmVyVmlldyA9IG51bGw7CisgICAgdGhpcy5lbWJlclRvRGVzdHJveSA9IG51bGw7CisgICAgdGhp
cy5zdHJlYW1VbnN1YnNjcmliZXJzID0gbnVsbDsKKyAgICB0aGlzLmd1aWQgPSBndWlkKys7CisK
KyAgICAvLyBBIGNvbXBvbmVudCBjYW4gYmVjb21lIGRpcnR5IGVpdGhlciBiZWNhdXNlIG9uZSBv
ZiBpdHMKKyAgICAvLyBhdHRyaWJ1dGVzIGNoYW5nZWQsIG9yIGJlY2F1c2UgaXQgd2FzIHJlLXJl
bmRlcmVkLiBJZiBhbnkgcGFydAorICAgIC8vIG9mIHRoZSBjb21wb25lbnQncyB0ZW1wbGF0ZSBj
aGFuZ2VzIHRocm91Z2ggb2JzZXJ2YXRpb24sIGl0IGhhcworICAgIC8vIHJlLXJlbmRlcmVkIGZy
b20gdGhlIHBlcnBzZWN0aXZlIG9mIHRoZSBwcm9ncmFtbWluZyBtb2RlbC4gVGhpcworICAgIC8v
IGZsYWcgaXMgc2V0IHRvIHRydWUgd2hlbmV2ZXIgYSBjb21wb25lbnQgYmVjb21lcyBkaXJ0eSBi
ZWNhdXNlCisgICAgLy8gb25lIG9mIGl0cyBhdHRyaWJ1dGVzIGNoYW5nZWQsIHdoaWNoIGFsc28g
dHJpZ2dlcnMgdGhlIGF0dHJpYnV0ZQorICAgIC8vIHVwZGF0ZSBmbGFnIChkaWRVcGRhdGVBdHRy
cykuCisgICAgdGhpcy5zaG91bGRSZWNlaXZlQXR0cnMgPSBmYWxzZTsKKworICAgIF9lbWJlck1l
dGFsRGVidWcuZGVidWdTZWFsKHRoaXMpOworICB9CisKKyAgdmFyIHByb3RvID0gRW1iZXJNb3Jw
aC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEhUTUxCYXJzTW9ycGgucHJvdG90eXBlKTsKKyAg
cHJvdG8uSFRNTEJhcnNNb3JwaCRjb25zdHJ1Y3RvciA9IEhUTUxCYXJzTW9ycGg7CisgIHByb3Rv
LkhUTUxCYXJzTW9ycGgkY2xlYXIgPSBIVE1MQmFyc01vcnBoLnByb3RvdHlwZS5jbGVhcjsKKwor
ICBwcm90by5hZGREZXN0cnVjdGlvbiA9IGZ1bmN0aW9uICh0b0Rlc3Ryb3kpIHsKKyAgICB0aGlz
LmVtYmVyVG9EZXN0cm95ID0gdGhpcy5lbWJlclRvRGVzdHJveSB8fCBbXTsKKyAgICB0aGlzLmVt
YmVyVG9EZXN0cm95LnB1c2godG9EZXN0cm95KTsKKyAgfTsKKworICBwcm90by5jbGVhbnVwID0g
ZnVuY3Rpb24gKCkgeworICAgIHZhciB2aWV3ID0gdGhpcy5lbWJlclZpZXc7CisKKyAgICBpZiAo
dmlldykgeworICAgICAgdmFyIHBhcmVudFZpZXcgPSB2aWV3LnBhcmVudFZpZXc7CisKKyAgICAg
IGlmIChwYXJlbnRWaWV3ICYmIHZpZXcub3duZXJWaWV3Ll9kZXN0cm95aW5nU3VidHJlZUZvclZp
ZXcgPT09IHBhcmVudFZpZXcpIHsKKyAgICAgICAgcGFyZW50Vmlldy5yZW1vdmVDaGlsZCh2aWV3
KTsKKyAgICAgIH0KKyAgICB9CisKKyAgICB2YXIgdG9EZXN0cm95ID0gdGhpcy5lbWJlclRvRGVz
dHJveTsKKworICAgIGlmICh0b0Rlc3Ryb3kpIHsKKyAgICAgIGZvciAodmFyIGkgPSAwLCBsID0g
dG9EZXN0cm95Lmxlbmd0aDsgaSA8IGw7IGkrKykgeworICAgICAgICB0b0Rlc3Ryb3lbaV0uZGVz
dHJveSgpOworICAgICAgfQorCisgICAgICB0aGlzLmVtYmVyVG9EZXN0cm95ID0gbnVsbDsKKyAg
ICB9CisgIH07CisKKyAgcHJvdG8uZGlkUmVuZGVyID0gZnVuY3Rpb24gKGVudiwgc2NvcGUpIHsK
KyAgICBlbnYucmVuZGVyZWROb2Rlcy5hZGQodGhpcyk7CisgIH07CisKKyAgZXhwb3J0cy5kZWZh
dWx0ID0gRW1iZXJNb3JwaDsKK30pOworZW5pZmVkKCdlbWJlci1odG1sYmFycy9ub2RlLW1hbmFn
ZXJzL2NvbXBvbmVudC1ub2RlLW1hbmFnZXInLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvZGVi
dWcnLCAnZW1iZXItdmlld3Mvc3lzdGVtL2J1aWxkLWNvbXBvbmVudC10ZW1wbGF0ZScsICdlbWJl
ci1odG1sYmFycy9ob29rcy9nZXQtY2VsbC1vci12YWx1ZScsICdlbWJlci1tZXRhbC9wcm9wZXJ0
eV9nZXQnLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfc2V0JywgJ2VtYmVyLXZpZXdzL2NvbXBhdC9h
dHRycy1wcm94eScsICdlbWJlci1odG1sYmFycy9zeXN0ZW0vaW5zdHJ1bWVudGF0aW9uLXN1cHBv
cnQnLCAnZW1iZXItdmlld3MvY29tcG9uZW50cy9jb21wb25lbnQnLCAnZW1iZXItaHRtbGJhcnMv
Z2xpbW1lci1jb21wb25lbnQnLCAnZW1iZXItaHRtbGJhcnMvdXRpbHMvZXh0cmFjdC1wb3NpdGlv
bmFsLXBhcmFtcycsICdlbWJlci1tZXRhbC9zeW1ib2wnLCAnY29udGFpbmVyL293bmVyJywgJ2Vt
YmVyLWh0bWxiYXJzL2hvb2tzL2dldC12YWx1ZSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVy
TWV0YWxEZWJ1ZywgX2VtYmVyVmlld3NTeXN0ZW1CdWlsZENvbXBvbmVudFRlbXBsYXRlLCBfZW1i
ZXJIdG1sYmFyc0hvb2tzR2V0Q2VsbE9yVmFsdWUsIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LCBf
ZW1iZXJNZXRhbFByb3BlcnR5X3NldCwgX2VtYmVyVmlld3NDb21wYXRBdHRyc1Byb3h5LCBfZW1i
ZXJIdG1sYmFyc1N5c3RlbUluc3RydW1lbnRhdGlvblN1cHBvcnQsIF9lbWJlclZpZXdzQ29tcG9u
ZW50c0NvbXBvbmVudCwgX2VtYmVySHRtbGJhcnNHbGltbWVyQ29tcG9uZW50LCBfZW1iZXJIdG1s
YmFyc1V0aWxzRXh0cmFjdFBvc2l0aW9uYWxQYXJhbXMsIF9lbWJlck1ldGFsU3ltYm9sLCBfY29u
dGFpbmVyT3duZXIsIF9lbWJlckh0bWxiYXJzSG9va3NHZXRWYWx1ZSkgeworICAndXNlIHN0cmlj
dCc7CisKKyAgZXhwb3J0cy5jcmVhdGVDb21wb25lbnQgPSBjcmVhdGVDb21wb25lbnQ7CisgIGV4
cG9ydHMudGFrZUxlZ2FjeVNuYXBzaG90ID0gdGFrZUxlZ2FjeVNuYXBzaG90OworCisgIC8vIFRo
ZXNlIHN5bWJvbHMgd2lsbCBiZSB1c2VkIHRvIGxpbWl0IGxpbmstdG8ncyBwdWJsaWMgQVBJIHN1
cmZhY2UgYXJlYS4KKyAgdmFyIEhBU19CTE9DSyA9IF9lbWJlck1ldGFsU3ltYm9sLmRlZmF1bHQo
J0hBU19CTE9DSycpOworCisgIGV4cG9ydHMuSEFTX0JMT0NLID0gSEFTX0JMT0NLOworICAvLyBJ
biB0aGVvcnkgdGhpcyBzaG91bGQgY29tZSB0aHJvdWdoIHRoZSBlbnYsIGJ1dCBpdCBzaG91bGQK
KyAgLy8gYmUgc2FmZSB0byBpbXBvcnQgdGhpcyB1bnRpbCB3ZSBtYWtlIHRoZSBob29rIHN5c3Rl
bSBwdWJsaWMKKyAgLy8gYW5kIGl0IGdldHMgYWN0aXZlbHkgdXNlZCBpbiBhZGRvbnMgb3Igb3Ro
ZXIgZG93bnN0cmVhbQorICAvLyBsaWJyYXJpZXMuCisKKyAgZnVuY3Rpb24gQ29tcG9uZW50Tm9k
ZU1hbmFnZXIoY29tcG9uZW50LCBpc0FuZ2xlQnJhY2tldCwgc2NvcGUsIHJlbmRlck5vZGUsIGF0
dHJzLCBibG9jaywgZXhwZWN0RWxlbWVudCkgeworICAgIHRoaXMuY29tcG9uZW50ID0gY29tcG9u
ZW50OworICAgIHRoaXMuaXNBbmdsZUJyYWNrZXQgPSBpc0FuZ2xlQnJhY2tldDsKKyAgICB0aGlz
LnNjb3BlID0gc2NvcGU7CisgICAgdGhpcy5yZW5kZXJOb2RlID0gcmVuZGVyTm9kZTsKKyAgICB0
aGlzLmF0dHJzID0gYXR0cnM7CisgICAgdGhpcy5ibG9jayA9IGJsb2NrOworICAgIHRoaXMuZXhw
ZWN0RWxlbWVudCA9IGV4cGVjdEVsZW1lbnQ7CisgIH0KKworICBleHBvcnRzLmRlZmF1bHQgPSBD
b21wb25lbnROb2RlTWFuYWdlcjsKKworICBDb21wb25lbnROb2RlTWFuYWdlci5jcmVhdGUgPSBm
dW5jdGlvbiBDb21wb25lbnROb2RlTWFuYWdlcl9jcmVhdGUocmVuZGVyTm9kZSwgZW52LCBvcHRp
b25zKSB7CisgICAgdmFyIF9jcmVhdGVPcHRpb25zOworCisgICAgdmFyIHRhZ05hbWUgPSBvcHRp
b25zLnRhZ05hbWU7CisgICAgdmFyIHBhcmFtcyA9IG9wdGlvbnMucGFyYW1zOworICAgIHZhciBf
b3B0aW9ucyRhdHRycyA9IG9wdGlvbnMuYXR0cnM7CisgICAgdmFyIGF0dHJzID0gX29wdGlvbnMk
YXR0cnMgPT09IHVuZGVmaW5lZCA/IHt9IDogX29wdGlvbnMkYXR0cnM7CisgICAgdmFyIHBhcmVu
dFZpZXcgPSBvcHRpb25zLnBhcmVudFZpZXc7CisgICAgdmFyIHBhcmVudFNjb3BlID0gb3B0aW9u
cy5wYXJlbnRTY29wZTsKKyAgICB2YXIgaXNBbmdsZUJyYWNrZXQgPSBvcHRpb25zLmlzQW5nbGVC
cmFja2V0OworICAgIHZhciBjb21wb25lbnQgPSBvcHRpb25zLmNvbXBvbmVudDsKKyAgICB2YXIg
bGF5b3V0ID0gb3B0aW9ucy5sYXlvdXQ7CisgICAgdmFyIHRlbXBsYXRlcyA9IG9wdGlvbnMudGVt
cGxhdGVzOworCisgICAgY29tcG9uZW50ID0gY29tcG9uZW50IHx8IChpc0FuZ2xlQnJhY2tldCA/
IF9lbWJlckh0bWxiYXJzR2xpbW1lckNvbXBvbmVudC5kZWZhdWx0IDogX2VtYmVyVmlld3NDb21w
b25lbnRzQ29tcG9uZW50LmRlZmF1bHQpOworCisgICAgdmFyIGNyZWF0ZU9wdGlvbnMgPSAoX2Ny
ZWF0ZU9wdGlvbnMgPSB7CisgICAgICBwYXJlbnRWaWV3OiBwYXJlbnRWaWV3CisgICAgfSwgX2Ny
ZWF0ZU9wdGlvbnNbSEFTX0JMT0NLXSA9ICEhdGVtcGxhdGVzLmRlZmF1bHQsIF9jcmVhdGVPcHRp
b25zKTsKKworICAgIGNvbmZpZ3VyZVRhZ05hbWUoYXR0cnMsIHRhZ05hbWUsIGNvbXBvbmVudCwg
aXNBbmdsZUJyYWNrZXQsIGNyZWF0ZU9wdGlvbnMpOworCisgICAgLy8gTWFwIHBhc3NlZCBhdHRy
aWJ1dGVzIChlLmcuIDxteS1jb21wb25lbnQgaWQ9ImZvbyI+KSB0byBjb21wb25lbnQKKyAgICAv
LyBwcm9wZXJ0aWVzICh7IGlkOiAiZm9vIiB9KS4KKyAgICBjb25maWd1cmVDcmVhdGVPcHRpb25z
KGF0dHJzLCBjcmVhdGVPcHRpb25zKTsKKworICAgIC8vIElmIHRoZXJlIGlzIGEgY29udHJvbGxl
ciBvbiB0aGUgc2NvcGUsIHBsdWNrIGl0IG9mZiBhbmQgc2F2ZSBpdCBvbiB0aGUKKyAgICAvLyBj
b21wb25lbnQuIFRoaXMgYWxsb3dzIHRoZSBjb21wb25lbnQgdG8gdGFyZ2V0IGFjdGlvbnMgc2Vu
dCB2aWEKKyAgICAvLyBgc2VuZEFjdGlvbmAgY29ycmVjdGx5LgorICAgIGlmIChwYXJlbnRTY29w
ZS5oYXNMb2NhbCgnY29udHJvbGxlcicpKSB7CisgICAgICBjcmVhdGVPcHRpb25zLl9jb250cm9s
bGVyID0gX2VtYmVySHRtbGJhcnNIb29rc0dldFZhbHVlLmRlZmF1bHQocGFyZW50U2NvcGUuZ2V0
TG9jYWwoJ2NvbnRyb2xsZXInKSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGNyZWF0ZU9wdGlvbnMu
X3RhcmdldE9iamVjdCA9IF9lbWJlckh0bWxiYXJzSG9va3NHZXRWYWx1ZS5kZWZhdWx0KHBhcmVu
dFNjb3BlLmdldFNlbGYoKSk7CisgICAgfQorCisgICAgX2VtYmVySHRtbGJhcnNVdGlsc0V4dHJh
Y3RQb3NpdGlvbmFsUGFyYW1zLmRlZmF1bHQocmVuZGVyTm9kZSwgY29tcG9uZW50LCBwYXJhbXMs
IGF0dHJzKTsKKworICAgIC8vIEluc3RhbnRpYXRlIHRoZSBjb21wb25lbnQKKyAgICBjb21wb25l
bnQgPSBjcmVhdGVDb21wb25lbnQoY29tcG9uZW50LCBpc0FuZ2xlQnJhY2tldCwgY3JlYXRlT3B0
aW9ucywgcmVuZGVyTm9kZSwgZW52LCBhdHRycyk7CisKKyAgICAvLyBJZiB0aGUgY29tcG9uZW50
IHNwZWNpZmllcyBpdHMgbGF5b3V0IHZpYSB0aGUgYGxheW91dGAgcHJvcGVydHkKKyAgICAvLyBp
bnN0ZWFkIG9mIHVzaW5nIHRoZSB0ZW1wbGF0ZSBsb29rZWQgdXAgaW4gdGhlIGNvbnRhaW5lciwg
Z2V0IGl0CisgICAgLy8gbm93IHRoYXQgd2UgaGF2ZSB0aGUgY29tcG9uZW50IGluc3RhbmNlLgor
ICAgIGlmICghbGF5b3V0KSB7CisgICAgICBsYXlvdXQgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dl
dC5nZXQoY29tcG9uZW50LCAnbGF5b3V0Jyk7CisgICAgfQorCisgICAgX2VtYmVyTWV0YWxEZWJ1
Zy5ydW5JbkRlYnVnKGZ1bmN0aW9uICgpIHsKKyAgICAgIGlmIChpc0FuZ2xlQnJhY2tldCkgewor
ICAgICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnWW91IGNhbm5vdCBpbnZva2UgdGhlIFwn
JyArIHRhZ05hbWUgKyAnXCcgY29tcG9uZW50IHdpdGggYW5nbGUgYnJhY2tldHMsIGJlY2F1c2Ug
aXRcJ3MgYSBzdWJjbGFzcyBvZiBDb21wb25lbnQuIFBsZWFzZSB1cGdyYWRlIHRvIEdsaW1tZXJD
b21wb25lbnQuIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gaW52b2tlIGFzIFwne3snICsgdGFnTmFt
ZSArICd9fVwnLicsIGNvbXBvbmVudC5pc0dsaW1tZXJDb21wb25lbnQpOworICAgICAgfSBlbHNl
IHsKKyAgICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1lvdSBjYW5ub3QgaW52b2tlIHRo
ZSBcJycgKyB0YWdOYW1lICsgJ1wnIGNvbXBvbmVudCB3aXRoIGN1cmx5IGJyYWNlcywgYmVjYXVz
ZSBpdFwncyBhIHN1YmNsYXNzIG9mIEdsaW1tZXJDb21wb25lbnQuIFBsZWFzZSBpbnZva2UgaXQg
YXMgXCc8JyArIHRhZ05hbWUgKyAnPlwnIGluc3RlYWQuJywgIWNvbXBvbmVudC5pc0dsaW1tZXJD
b21wb25lbnQpOworICAgICAgfQorCisgICAgICBpZiAoIWxheW91dCkgeworICAgICAgICByZXR1
cm47CisgICAgICB9CisKKyAgICAgIHZhciBmcmFnbWVudFJlYXNvbiA9IGxheW91dC5tZXRhLmZy
YWdtZW50UmVhc29uOworICAgICAgaWYgKGlzQW5nbGVCcmFja2V0ICYmIGZyYWdtZW50UmVhc29u
KSB7CisgICAgICAgIHN3aXRjaCAoZnJhZ21lbnRSZWFzb24ubmFtZSkgeworICAgICAgICAgIGNh
c2UgJ21pc3Npbmctd3JhcHBlcic6CisgICAgICAgICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2Vy
dCgnVGhlIDwnICsgdGFnTmFtZSArICc+IHRlbXBsYXRlIG11c3QgaGF2ZSBhIHNpbmdsZSB0b3At
bGV2ZWwgZWxlbWVudCBiZWNhdXNlIGl0IGlzIGEgR2xpbW1lckNvbXBvbmVudC4nKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgJ21vZGlmaWVycyc6CisgICAgICAgICAgICB2
YXIgbW9kaWZpZXJzID0gZnJhZ21lbnRSZWFzb24ubW9kaWZpZXJzLm1hcChmdW5jdGlvbiAobSkg
eworICAgICAgICAgICAgICByZXR1cm4gJ3t7JyArIG0gKyAnIC4uLn19JzsKKyAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1lvdSBjYW5ub3QgdXNl
ICcgKyBtb2RpZmllcnMuam9pbignLCAnKSArICcgaW4gdGhlIHRvcC1sZXZlbCBlbGVtZW50IG9m
IHRoZSA8JyArIHRhZ05hbWUgKyAnPiB0ZW1wbGF0ZSBiZWNhdXNlIGl0IGlzIGEgR2xpbW1lckNv
bXBvbmVudC4nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgJ3RyaXBsZS1j
dXJsaWVzJzoKKyAgICAgICAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdZb3UgY2Fubm90
IHVzZSB0cmlwbGUgY3VybGllcyAoZS5nLiBzdHlsZT17e3sgLi4uIH19fSkgaW4gdGhlIHRvcC1s
ZXZlbCBlbGVtZW50IG9mIHRoZSA8JyArIHRhZ05hbWUgKyAnPiB0ZW1wbGF0ZSBiZWNhdXNlIGl0
IGlzIGEgR2xpbW1lckNvbXBvbmVudC4nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICB9CisgICAgfSk7CisKKyAgICB2YXIgcmVzdWx0cyA9IF9lbWJlclZpZXdzU3lzdGVt
QnVpbGRDb21wb25lbnRUZW1wbGF0ZS5kZWZhdWx0KHsgbGF5b3V0OiBsYXlvdXQsIGNvbXBvbmVu
dDogY29tcG9uZW50LCBpc0FuZ2xlQnJhY2tldDogaXNBbmdsZUJyYWNrZXQgfSwgYXR0cnMsIHsg
dGVtcGxhdGVzOiB0ZW1wbGF0ZXMsIHNjb3BlOiBwYXJlbnRTY29wZSB9KTsKKworICAgIHJldHVy
biBuZXcgQ29tcG9uZW50Tm9kZU1hbmFnZXIoY29tcG9uZW50LCBpc0FuZ2xlQnJhY2tldCwgcGFy
ZW50U2NvcGUsIHJlbmRlck5vZGUsIGF0dHJzLCByZXN1bHRzLmJsb2NrLCByZXN1bHRzLmNyZWF0
ZWRFbGVtZW50KTsKKyAgfTsKKworICBmdW5jdGlvbiBjb25maWd1cmVUYWdOYW1lKGF0dHJzLCB0
YWdOYW1lLCBjb21wb25lbnQsIGlzQW5nbGVCcmFja2V0LCBjcmVhdGVPcHRpb25zKSB7CisgICAg
aWYgKGlzQW5nbGVCcmFja2V0KSB7CisgICAgICBjcmVhdGVPcHRpb25zLnRhZ05hbWUgPSB0YWdO
YW1lOworICAgIH0gZWxzZSBpZiAoYXR0cnMudGFnTmFtZSkgeworICAgICAgY3JlYXRlT3B0aW9u
cy50YWdOYW1lID0gX2VtYmVySHRtbGJhcnNIb29rc0dldFZhbHVlLmRlZmF1bHQoYXR0cnMudGFn
TmFtZSk7CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gY29uZmlndXJlQ3JlYXRlT3B0aW9ucyhh
dHRycywgY3JlYXRlT3B0aW9ucykgeworICAgIC8vIFNvbWUgYXR0cnMgYXJlIHNwZWNpYWwgYW5k
IG5lZWQgdG8gYmUgc2V0IGFzIHByb3BlcnRpZXMgb24gdGhlIGNvbXBvbmVudAorICAgIC8vIGlu
c3RhbmNlLiBNYWtlIHN1cmUgd2UgdXNlIGdldFZhbHVlKCkgdG8gZ2V0IHRoZW0gZnJvbSBgYXR0
cnNgIHNpbmNlCisgICAgLy8gdGhleSBhcmUgc3RpbGwgc3RyZWFtcy4KKyAgICBpZiAoYXR0cnMu
aWQpIHsKKyAgICAgIGNyZWF0ZU9wdGlvbnMuZWxlbWVudElkID0gX2VtYmVySHRtbGJhcnNIb29r
c0dldFZhbHVlLmRlZmF1bHQoYXR0cnMuaWQpOworICAgIH0KKyAgICBpZiAoYXR0cnMuX2RlZmF1
bHRUYWdOYW1lKSB7CisgICAgICBjcmVhdGVPcHRpb25zLl9kZWZhdWx0VGFnTmFtZSA9IF9lbWJl
ckh0bWxiYXJzSG9va3NHZXRWYWx1ZS5kZWZhdWx0KGF0dHJzLl9kZWZhdWx0VGFnTmFtZSk7Cisg
ICAgfQorICAgIGlmIChhdHRycy52aWV3TmFtZSkgeworICAgICAgY3JlYXRlT3B0aW9ucy52aWV3
TmFtZSA9IF9lbWJlckh0bWxiYXJzSG9va3NHZXRWYWx1ZS5kZWZhdWx0KGF0dHJzLnZpZXdOYW1l
KTsKKyAgICB9CisgIH0KKworICBDb21wb25lbnROb2RlTWFuYWdlci5wcm90b3R5cGUucmVuZGVy
ID0gZnVuY3Rpb24gQ29tcG9uZW50Tm9kZU1hbmFnZXJfcmVuZGVyKF9lbnYsIHZpc2l0b3IpIHsK
KyAgICB2YXIgY29tcG9uZW50ID0gdGhpcy5jb21wb25lbnQ7CisKKyAgICByZXR1cm4gX2VtYmVy
SHRtbGJhcnNTeXN0ZW1JbnN0cnVtZW50YXRpb25TdXBwb3J0Lmluc3RydW1lbnQoY29tcG9uZW50
LCBmdW5jdGlvbiBDb21wb25lbnROb2RlTWFuYWdlcl9yZW5kZXJfaW5zdHJ1bWVudCgpIHsKKyAg
ICAgIHZhciBtZXRhID0gdGhpcy5ibG9jayAmJiB0aGlzLmJsb2NrLnRlbXBsYXRlLm1ldGE7Cisg
ICAgICB2YXIgZW52ID0gX2Vudi5jaGlsZFdpdGhWaWV3KGNvbXBvbmVudCwgbWV0YSk7CisKKyAg
ICAgIGVudi5yZW5kZXJlci5jb21wb25lbnRXaWxsUmVuZGVyKGNvbXBvbmVudCk7CisgICAgICBl
bnYucmVuZGVyZWRWaWV3cy5wdXNoKGNvbXBvbmVudC5lbGVtZW50SWQpOworCisgICAgICBpZiAo
dGhpcy5ibG9jaykgeworICAgICAgICB0aGlzLmJsb2NrLmludm9rZShlbnYsIFtdLCB1bmRlZmlu
ZWQsIHRoaXMucmVuZGVyTm9kZSwgdGhpcy5zY29wZSwgdmlzaXRvcik7CisgICAgICB9CisKKyAg
ICAgIHZhciBlbGVtZW50ID0gdW5kZWZpbmVkOworICAgICAgaWYgKHRoaXMuZXhwZWN0RWxlbWVu
dCB8fCBjb21wb25lbnQuaXNHbGltbWVyQ29tcG9uZW50KSB7CisgICAgICAgIC8vIFRoaXMgY29k
ZSBhc3N1bWVzIHRoYXQgR2xpbW1lciBjb21wb25lbnRzIGFyZSBuZXZlciBmcmFnbWVudHMuIFdo
ZW4KKyAgICAgICAgLy8gR2xpbW1lciBjb21wb25lbnRzIGdhaW4gZnJhZ21lbnQgcG93ZXJzLCB3
ZSB3aWxsIG5lZWQgdG8gY29tbXVuaWNhdGUKKyAgICAgICAgLy8gd2hldGhlciB0aGUgbGF5b3V0
IHByb2R1Y2VkIGEgc2luZ2xlIHRvcC1sZXZlbCBub2RlIG9yIGZyYWdtZW50CisgICAgICAgIC8v
IHNvbWVob3cgKGVpdGhlciB2aWEgc3RhdGljIGluZm9ybWF0aW9uIG9uIHRoZSB0ZW1wbGF0ZS9j
b21wb25lbnQsIG9yCisgICAgICAgIC8vIGR5bmFtaWNhbGx5IGFzIHRoZSBsYXlvdXQgaXMgYmVp
bmcgcmVuZGVyZWQpLgorICAgICAgICBlbGVtZW50ID0gdGhpcy5yZW5kZXJOb2RlLmZpcnN0Tm9k
ZTsKKworICAgICAgICAvLyBHbGltbWVyIGNvbXBvbmVudHMgbWF5IGhhdmUgd2hpdGVzcGFjZSBv
ciBib3VuZGFyeSBub2RlcyBhcm91bmQgdGhlCisgICAgICAgIC8vIHRvcC1sZXZlbCBlbGVtZW50
LgorICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50Lm5vZGVUeXBlICE9PSAxKSB7CisgICAg
ICAgICAgZWxlbWVudCA9IG5leHRFbGVtZW50U2libGluZyhlbGVtZW50KTsKKyAgICAgICAgfQor
ICAgICAgfQorCisgICAgICAvLyBJbiBlbnZpcm9ubWVudHMgbGlrZSBGYXN0Qm9vdCwgZGlzYWJs
ZSBhbnkgaG9va3MgdGhhdCB3b3VsZCBjYXVzZSB0aGUgY29tcG9uZW50CisgICAgICAvLyB0byBh
Y2Nlc3MgdGhlIERPTSBkaXJlY3RseS4KKyAgICAgIGlmIChlbnYuZGVzdGluZWRGb3JET00pIHsK
KyAgICAgICAgZW52LnJlbmRlcmVyLmRpZENyZWF0ZUVsZW1lbnQoY29tcG9uZW50LCBlbGVtZW50
KTsKKyAgICAgICAgZW52LnJlbmRlcmVyLndpbGxJbnNlcnRFbGVtZW50KGNvbXBvbmVudCwgZWxl
bWVudCk7CisKKyAgICAgICAgZW52LmxpZmVjeWNsZUhvb2tzLnB1c2goeyB0eXBlOiAnZGlkSW5z
ZXJ0RWxlbWVudCcsIHZpZXc6IGNvbXBvbmVudCB9KTsKKyAgICAgIH0KKyAgICB9LCB0aGlzKTsK
KyAgfTsKKworICBmdW5jdGlvbiBuZXh0RWxlbWVudFNpYmxpbmcobm9kZSkgeworICAgIHZhciBj
dXJyZW50ID0gbm9kZTsKKworICAgIHdoaWxlIChjdXJyZW50KSB7CisgICAgICBpZiAoY3VycmVu
dC5ub2RlVHlwZSA9PT0gMSkgeworICAgICAgICByZXR1cm4gY3VycmVudDsKKyAgICAgIH0KKyAg
ICAgIGN1cnJlbnQgPSBub2RlLm5leHRTaWJsaW5nOworICAgIH0KKyAgfQorCisgIENvbXBvbmVu
dE5vZGVNYW5hZ2VyLnByb3RvdHlwZS5yZXJlbmRlciA9IGZ1bmN0aW9uIENvbXBvbmVudE5vZGVN
YW5hZ2VyX3JlcmVuZGVyKF9lbnYsIGF0dHJzLCB2aXNpdG9yKSB7CisgICAgdmFyIGNvbXBvbmVu
dCA9IHRoaXMuY29tcG9uZW50OworCisgICAgcmV0dXJuIF9lbWJlckh0bWxiYXJzU3lzdGVtSW5z
dHJ1bWVudGF0aW9uU3VwcG9ydC5pbnN0cnVtZW50KGNvbXBvbmVudCwgZnVuY3Rpb24gQ29tcG9u
ZW50Tm9kZU1hbmFnZXJfcmVyZW5kZXJfaW5zdHJ1bWVudCgpIHsKKyAgICAgIHZhciBlbnYgPSBf
ZW52LmNoaWxkV2l0aFZpZXcoY29tcG9uZW50KTsKKworICAgICAgdmFyIHNuYXBzaG90ID0gdGFr
ZVNuYXBzaG90KGF0dHJzKTsKKworICAgICAgaWYgKGNvbXBvbmVudC5fcmVuZGVyTm9kZS5zaG91
bGRSZWNlaXZlQXR0cnMpIHsKKyAgICAgICAgaWYgKGNvbXBvbmVudC5fcHJvcGFnYXRlQXR0cnNU
b1RoaXMpIHsKKyAgICAgICAgICBjb21wb25lbnQuX3Byb3BhZ2F0ZUF0dHJzVG9UaGlzKHRha2VM
ZWdhY3lTbmFwc2hvdChhdHRycykpOworICAgICAgICB9CisKKyAgICAgICAgZW52LnJlbmRlcmVy
LmNvbXBvbmVudFVwZGF0ZUF0dHJzKGNvbXBvbmVudCwgc25hcHNob3QpOworICAgICAgICBjb21w
b25lbnQuX3JlbmRlck5vZGUuc2hvdWxkUmVjZWl2ZUF0dHJzID0gZmFsc2U7CisgICAgICB9CisK
KyAgICAgIC8vIE5vdGlmeSBjb21wb25lbnQgdGhhdCBpdCBoYXMgYmVjb21lIGRpcnR5IGFuZCBp
cyBhYm91dCB0byBjaGFuZ2UuCisgICAgICBlbnYucmVuZGVyZXIuY29tcG9uZW50V2lsbFVwZGF0
ZShjb21wb25lbnQsIHNuYXBzaG90KTsKKyAgICAgIGVudi5yZW5kZXJlci5jb21wb25lbnRXaWxs
UmVuZGVyKGNvbXBvbmVudCk7CisKKyAgICAgIGVudi5yZW5kZXJlZFZpZXdzLnB1c2goY29tcG9u
ZW50LmVsZW1lbnRJZCk7CisKKyAgICAgIGlmICh0aGlzLmJsb2NrKSB7CisgICAgICAgIHRoaXMu
YmxvY2suaW52b2tlKGVudiwgW10sIHVuZGVmaW5lZCwgdGhpcy5yZW5kZXJOb2RlLCB0aGlzLnNj
b3BlLCB2aXNpdG9yKTsKKyAgICAgIH0KKworICAgICAgZW52LmxpZmVjeWNsZUhvb2tzLnB1c2go
eyB0eXBlOiAnZGlkVXBkYXRlJywgdmlldzogY29tcG9uZW50IH0pOworCisgICAgICByZXR1cm4g
ZW52OworICAgIH0sIHRoaXMpOworICB9OworCisgIENvbXBvbmVudE5vZGVNYW5hZ2VyLnByb3Rv
dHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gQ29tcG9uZW50Tm9kZU1hbmFnZXJfZGVzdHJveSgpIHsK
KyAgICB2YXIgY29tcG9uZW50ID0gdGhpcy5jb21wb25lbnQ7CisKKyAgICAvLyBDbGVhciBjb21w
b25lbnQncyByZW5kZXIgbm9kZS4gTm9ybWFsbHkgdGhpcyBnZXRzIGNsZWFyZWQKKyAgICAvLyBk
dXJpbmcgdmlldyBkZXN0cnVjdGlvbiwgYnV0IGluIHRoaXMgY2FzZSB3ZSdyZSByZS1hc3NpZ25p
bmcgdGhlCisgICAgLy8gbm9kZSB0byBhIGRpZmZlcmVudCB2aWV3IGFuZCBpdCB3aWxsIGdldCBj
bGVhbmVkIHVwIGF1dG9tYXRpY2FsbHkuCisgICAgY29tcG9uZW50Ll9yZW5kZXJOb2RlID0gbnVs
bDsKKyAgICBjb21wb25lbnQuZGVzdHJveSgpOworICB9OworCisgIGZ1bmN0aW9uIGNyZWF0ZUNv
bXBvbmVudChfY29tcG9uZW50LCBpc0FuZ2xlQnJhY2tldCwgcHJvcHMsIHJlbmRlck5vZGUsIGVu
dikgeworICAgIHZhciBhdHRycyA9IGFyZ3VtZW50cy5sZW5ndGggPD0gNSB8fCBhcmd1bWVudHNb
NV0gPT09IHVuZGVmaW5lZCA/IHt9IDogYXJndW1lbnRzWzVdOworCisgICAgaWYgKCFpc0FuZ2xl
QnJhY2tldCkgeworICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ2NvbnRyb2xsZXI9IGlz
IG5vIGxvbmdlciBzdXBwb3J0ZWQnLCAhKCdjb250cm9sbGVyJyBpbiBhdHRycykpOworCisgICAg
ICBzbmFwc2hvdEFuZFVwZGF0ZVRhcmdldChhdHRycywgcHJvcHMpOworICAgIH0gZWxzZSB7Cisg
ICAgICBwcm9wcy5hdHRycyA9IHRha2VTbmFwc2hvdChhdHRycyk7CisKKyAgICAgIHByb3BzLl9p
c0FuZ2xlQnJhY2tldCA9IHRydWU7CisgICAgfQorCisgICAgX2NvbnRhaW5lck93bmVyLnNldE93
bmVyKHByb3BzLCBlbnYub3duZXIpOworICAgIHByb3BzLnJlbmRlcmVyID0gcHJvcHMucGFyZW50
VmlldyA/IHByb3BzLnBhcmVudFZpZXcucmVuZGVyZXIgOiBlbnYub3duZXIubG9va3VwKCdyZW5k
ZXJlcjotZG9tJyk7CisgICAgcHJvcHMuX3ZpZXdSZWdpc3RyeSA9IHByb3BzLnBhcmVudFZpZXcg
PyBwcm9wcy5wYXJlbnRWaWV3Ll92aWV3UmVnaXN0cnkgOiBlbnYub3duZXIubG9va3VwKCctdmll
dy1yZWdpc3RyeTptYWluJyk7CisKKyAgICB2YXIgY29tcG9uZW50ID0gX2NvbXBvbmVudC5jcmVh
dGUocHJvcHMpOworCisgICAgaWYgKHByb3BzLnBhcmVudFZpZXcpIHsKKyAgICAgIHByb3BzLnBh
cmVudFZpZXcuYXBwZW5kQ2hpbGQoY29tcG9uZW50KTsKKworICAgICAgaWYgKHByb3BzLnZpZXdO
YW1lKSB7CisgICAgICAgIF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LnNldChwcm9wcy5wYXJlbnRW
aWV3LCBwcm9wcy52aWV3TmFtZSwgY29tcG9uZW50KTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBj
b21wb25lbnQuX3JlbmRlck5vZGUgPSByZW5kZXJOb2RlOworICAgIHJlbmRlck5vZGUuZW1iZXJW
aWV3ID0gY29tcG9uZW50OworICAgIHJlbmRlck5vZGUuYnVpbGRDaGlsZEVudiA9IGJ1aWxkQ2hp
bGRFbnY7CisgICAgcmV0dXJuIGNvbXBvbmVudDsKKyAgfQorCisgIGZ1bmN0aW9uIHRha2VTbmFw
c2hvdChhdHRycykgeworICAgIHZhciBoYXNoID0ge307CisKKyAgICBmb3IgKHZhciBwcm9wIGlu
IGF0dHJzKSB7CisgICAgICBoYXNoW3Byb3BdID0gX2VtYmVySHRtbGJhcnNIb29rc0dldENlbGxP
clZhbHVlLmRlZmF1bHQoYXR0cnNbcHJvcF0pOworICAgIH0KKworICAgIHJldHVybiBoYXNoOwor
ICB9CisKKyAgZnVuY3Rpb24gdGFrZUxlZ2FjeVNuYXBzaG90KGF0dHJzKSB7CisgICAgdmFyIGhh
c2ggPSB7fTsKKworICAgIGZvciAodmFyIHByb3AgaW4gYXR0cnMpIHsKKyAgICAgIGhhc2hbcHJv
cF0gPSBfZW1iZXJIdG1sYmFyc0hvb2tzR2V0VmFsdWUuZGVmYXVsdChhdHRyc1twcm9wXSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIGhhc2g7CisgIH0KKworICBmdW5jdGlvbiBzbmFwc2hvdEFuZFVw
ZGF0ZVRhcmdldChyYXdBdHRycywgdGFyZ2V0KSB7CisgICAgdmFyIGF0dHJzID0ge307CisKKyAg
ICBmb3IgKHZhciBwcm9wIGluIHJhd0F0dHJzKSB7CisgICAgICB2YXIgdmFsdWUgPSBfZW1iZXJI
dG1sYmFyc0hvb2tzR2V0Q2VsbE9yVmFsdWUuZGVmYXVsdChyYXdBdHRyc1twcm9wXSk7CisgICAg
ICBhdHRyc1twcm9wXSA9IHZhbHVlOworCisgICAgICAvLyB3aGVuIGBhdHRyc2AgaXMgYW4gYWN0
dWFsIHZhbHVlIGJlaW5nIHNldCBpbiB0aGUKKyAgICAgIC8vIGF0dHJzIGhhc2ggKGB7e2Zvby1i
YXIgYXR0cnM9ImJsYWgifX1gKSB3ZSBjYW5ub3QKKyAgICAgIC8vIHNldCBgImJsYWgiYCB0byB0
aGUgcm9vdCBvZiB0aGUgdGFyZ2V0IGJlY2F1c2UKKyAgICAgIC8vIHRoYXQgd291bGQgcmVwbGFj
ZSBhbGwgYXR0cnMgd2l0aCBgYXR0cnMuYXR0cnNgCisgICAgICBpZiAocHJvcCA9PT0gJ2F0dHJz
JykgeworICAgICAgICBfZW1iZXJNZXRhbERlYnVnLndhcm4oJ0ludm9raW5nIGEgY29tcG9uZW50
IHdpdGggYSBoYXNoIGF0dHJpYnV0ZSBuYW1lZCBgYXR0cnNgIGlzIG5vdCBzdXBwb3J0ZWQuIFBs
ZWFzZSByZWZhY3RvciB1c2FnZSBvZiAnICsgdGFyZ2V0ICsgJyB0byBhdm9pZCBwYXNzaW5nIGBh
dHRyc2AgYXMgYSBoYXNoIHBhcmFtZXRlci4nLCBmYWxzZSwgeyBpZDogJ2VtYmVyLWh0bWxiYXJz
LmNvbXBvbmVudC11bnN1cHBvcnRlZC1hdHRycycgfSk7CisgICAgICAgIGNvbnRpbnVlOworICAg
ICAgfQorCisgICAgICBpZiAodmFsdWUgJiYgdmFsdWVbX2VtYmVyVmlld3NDb21wYXRBdHRyc1By
b3h5Lk1VVEFCTEVfQ0VMTF0pIHsKKyAgICAgICAgdmFsdWUgPSB2YWx1ZS52YWx1ZTsKKyAgICAg
IH0KKworICAgICAgdGFyZ2V0W3Byb3BdID0gdmFsdWU7CisgICAgfQorCisgICAgcmV0dXJuIHRh
cmdldC5hdHRycyA9IGF0dHJzOworICB9CisKKyAgZnVuY3Rpb24gYnVpbGRDaGlsZEVudihzdGF0
ZSwgZW52KSB7CisgICAgcmV0dXJuIGVudi5jaGlsZFdpdGhWaWV3KHRoaXMuZW1iZXJWaWV3KTsK
KyAgfQorfSk7CitlbmlmZWQoJ2VtYmVyLWh0bWxiYXJzL25vZGUtbWFuYWdlcnMvdmlldy1ub2Rl
LW1hbmFnZXInLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvYXNzaWduJywgJ2VtYmVyLW1ldGFs
L2RlYnVnJywgJ2VtYmVyLXZpZXdzL3N5c3RlbS9idWlsZC1jb21wb25lbnQtdGVtcGxhdGUnLCAn
ZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0JywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCcsICdl
bWJlci1tZXRhbC9zZXRfcHJvcGVydGllcycsICdlbWJlci12aWV3cy92aWV3cy92aWV3JywgJ2Vt
YmVyLXZpZXdzL2NvbXBhdC9hdHRycy1wcm94eScsICdlbWJlci1odG1sYmFycy9ob29rcy9nZXQt
Y2VsbC1vci12YWx1ZScsICdlbWJlci1odG1sYmFycy9zeXN0ZW0vaW5zdHJ1bWVudGF0aW9uLXN1
cHBvcnQnLCAnZW1iZXItaHRtbGJhcnMvbm9kZS1tYW5hZ2Vycy9jb21wb25lbnQtbm9kZS1tYW5h
Z2VyJywgJ2NvbnRhaW5lci9vd25lcicsICdlbWJlci1odG1sYmFycy9ob29rcy9nZXQtdmFsdWUn
XSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsQXNzaWduLCBfZW1iZXJNZXRhbERlYnVn
LCBfZW1iZXJWaWV3c1N5c3RlbUJ1aWxkQ29tcG9uZW50VGVtcGxhdGUsIF9lbWJlck1ldGFsUHJv
cGVydHlfZ2V0LCBfZW1iZXJNZXRhbFByb3BlcnR5X3NldCwgX2VtYmVyTWV0YWxTZXRfcHJvcGVy
dGllcywgX2VtYmVyVmlld3NWaWV3c1ZpZXcsIF9lbWJlclZpZXdzQ29tcGF0QXR0cnNQcm94eSwg
X2VtYmVySHRtbGJhcnNIb29rc0dldENlbGxPclZhbHVlLCBfZW1iZXJIdG1sYmFyc1N5c3RlbUlu
c3RydW1lbnRhdGlvblN1cHBvcnQsIF9lbWJlckh0bWxiYXJzTm9kZU1hbmFnZXJzQ29tcG9uZW50
Tm9kZU1hbmFnZXIsIF9jb250YWluZXJPd25lciwgX2VtYmVySHRtbGJhcnNIb29rc0dldFZhbHVl
KSB7CisgICd1c2Ugc3RyaWN0JzsKKworICBleHBvcnRzLmNyZWF0ZU9yVXBkYXRlQ29tcG9uZW50
ID0gY3JlYXRlT3JVcGRhdGVDb21wb25lbnQ7CisKKyAgZnVuY3Rpb24gVmlld05vZGVNYW5hZ2Vy
KGNvbXBvbmVudCwgc2NvcGUsIHJlbmRlck5vZGUsIGJsb2NrLCBleHBlY3RFbGVtZW50KSB7Cisg
ICAgdGhpcy5jb21wb25lbnQgPSBjb21wb25lbnQ7CisgICAgdGhpcy5zY29wZSA9IHNjb3BlOwor
ICAgIHRoaXMucmVuZGVyTm9kZSA9IHJlbmRlck5vZGU7CisgICAgdGhpcy5ibG9jayA9IGJsb2Nr
OworICAgIHRoaXMuZXhwZWN0RWxlbWVudCA9IGV4cGVjdEVsZW1lbnQ7CisgIH0KKworICBleHBv
cnRzLmRlZmF1bHQgPSBWaWV3Tm9kZU1hbmFnZXI7CisKKyAgVmlld05vZGVNYW5hZ2VyLmNyZWF0
ZSA9IGZ1bmN0aW9uIFZpZXdOb2RlTWFuYWdlcl9jcmVhdGUocmVuZGVyTm9kZSwgZW52LCBhdHRy
cywgZm91bmQsIHBhcmVudFZpZXcsIHBhdGgsIGNvbnRlbnRTY29wZSwgY29udGVudFRlbXBsYXRl
KSB7CisgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ0hUTUxCYXJzIGVycm9yOiBDb3VsZCBu
b3QgZmluZCBjb21wb25lbnQgbmFtZWQgIicgKyBwYXRoICsgJyIgKG5vIGNvbXBvbmVudCBvciB0
ZW1wbGF0ZSB3aXRoIHRoYXQgbmFtZSB3YXMgZm91bmQpJywgISEoZnVuY3Rpb24gKCkgeworICAg
ICAgaWYgKHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIGZvdW5kLmNvbXBvbmVudCB8fCBmb3VuZC5s
YXlvdXQ7CisgICAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gZm91bmQuY29tcG9uZW50IHx8
IGZvdW5kLmxheW91dCB8fCBjb250ZW50VGVtcGxhdGU7CisgICAgICB9CisgICAgfSkoKSk7CisK
KyAgICB2YXIgY29tcG9uZW50OworICAgIHZhciBjb21wb25lbnRJbmZvID0geyBsYXlvdXQ6IGZv
dW5kLmxheW91dCB9OworCisgICAgaWYgKGZvdW5kLmNvbXBvbmVudCkgeworICAgICAgdmFyIG9w
dGlvbnMgPSB7IHBhcmVudFZpZXc6IHBhcmVudFZpZXcgfTsKKworICAgICAgaWYgKGF0dHJzICYm
IGF0dHJzLmlkKSB7CisgICAgICAgIG9wdGlvbnMuZWxlbWVudElkID0gX2VtYmVySHRtbGJhcnNI
b29rc0dldFZhbHVlLmRlZmF1bHQoYXR0cnMuaWQpOworICAgICAgfQorICAgICAgaWYgKGF0dHJz
ICYmIGF0dHJzLnRhZ05hbWUpIHsKKyAgICAgICAgb3B0aW9ucy50YWdOYW1lID0gX2VtYmVySHRt
bGJhcnNIb29rc0dldFZhbHVlLmRlZmF1bHQoYXR0cnMudGFnTmFtZSk7CisgICAgICB9CisgICAg
ICBpZiAoYXR0cnMgJiYgYXR0cnMuX2RlZmF1bHRUYWdOYW1lKSB7CisgICAgICAgIG9wdGlvbnMu
X2RlZmF1bHRUYWdOYW1lID0gX2VtYmVySHRtbGJhcnNIb29rc0dldFZhbHVlLmRlZmF1bHQoYXR0
cnMuX2RlZmF1bHRUYWdOYW1lKTsKKyAgICAgIH0KKyAgICAgIGlmIChhdHRycyAmJiBhdHRycy52
aWV3TmFtZSkgeworICAgICAgICBvcHRpb25zLnZpZXdOYW1lID0gX2VtYmVySHRtbGJhcnNIb29r
c0dldFZhbHVlLmRlZmF1bHQoYXR0cnMudmlld05hbWUpOworICAgICAgfQorCisgICAgICBpZiAo
Zm91bmQuY29tcG9uZW50LmNyZWF0ZSAmJiBjb250ZW50U2NvcGUpIHsKKyAgICAgICAgdmFyIF9z
ZWxmID0gY29udGVudFNjb3BlLmdldFNlbGYoKTsKKyAgICAgICAgaWYgKF9zZWxmKSB7CisgICAg
ICAgICAgb3B0aW9ucy5fY29udGV4dCA9IF9lbWJlckh0bWxiYXJzSG9va3NHZXRWYWx1ZS5kZWZh
dWx0KGNvbnRlbnRTY29wZS5nZXRTZWxmKCkpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAg
IGlmIChmb3VuZC5zZWxmKSB7CisgICAgICAgIG9wdGlvbnMuX2NvbnRleHQgPSBfZW1iZXJIdG1s
YmFyc0hvb2tzR2V0VmFsdWUuZGVmYXVsdChmb3VuZC5zZWxmKTsKKyAgICAgIH0KKworICAgICAg
Y29tcG9uZW50ID0gY29tcG9uZW50SW5mby5jb21wb25lbnQgPSBjcmVhdGVPclVwZGF0ZUNvbXBv
bmVudChmb3VuZC5jb21wb25lbnQsIG9wdGlvbnMsIGZvdW5kLmNyZWF0ZU9wdGlvbnMsIHJlbmRl
ck5vZGUsIGVudiwgYXR0cnMpOworCisgICAgICB2YXIgbGF5b3V0ID0gX2VtYmVyTWV0YWxQcm9w
ZXJ0eV9nZXQuZ2V0KGNvbXBvbmVudCwgJ2xheW91dCcpOworICAgICAgaWYgKGxheW91dCkgewor
ICAgICAgICBjb21wb25lbnRJbmZvLmxheW91dCA9IGxheW91dDsKKyAgICAgIH0gZWxzZSB7Cisg
ICAgICAgIGNvbXBvbmVudEluZm8ubGF5b3V0ID0gZ2V0VGVtcGxhdGUoY29tcG9uZW50KSB8fCBj
b21wb25lbnRJbmZvLmxheW91dDsKKyAgICAgIH0KKworICAgICAgcmVuZGVyTm9kZS5lbWJlclZp
ZXcgPSBjb21wb25lbnQ7CisgICAgfQorCisgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ0JV
RzogVmlld05vZGVNYW5hZ2VyLmNyZWF0ZSBjYW4gdGFrZSBhIHNjb3BlIG9yIGEgc2VsZiwgYnV0
IG5vdCBib3RoJywgIShjb250ZW50U2NvcGUgJiYgZm91bmQuc2VsZikpOworCisgICAgdmFyIHJl
c3VsdHMgPSBfZW1iZXJWaWV3c1N5c3RlbUJ1aWxkQ29tcG9uZW50VGVtcGxhdGUuZGVmYXVsdChj
b21wb25lbnRJbmZvLCBhdHRycywgeworICAgICAgdGVtcGxhdGVzOiB7IGRlZmF1bHQ6IGNvbnRl
bnRUZW1wbGF0ZSB9LAorICAgICAgc2NvcGU6IGNvbnRlbnRTY29wZSwKKyAgICAgIHNlbGY6IGZv
dW5kLnNlbGYKKyAgICB9KTsKKworICAgIHJldHVybiBuZXcgVmlld05vZGVNYW5hZ2VyKGNvbXBv
bmVudCwgY29udGVudFNjb3BlLCByZW5kZXJOb2RlLCByZXN1bHRzLmJsb2NrLCByZXN1bHRzLmNy
ZWF0ZWRFbGVtZW50KTsKKyAgfTsKKworICBWaWV3Tm9kZU1hbmFnZXIucHJvdG90eXBlLnJlbmRl
ciA9IGZ1bmN0aW9uIFZpZXdOb2RlTWFuYWdlcl9yZW5kZXIoZW52LCBhdHRycywgdmlzaXRvcikg
eworICAgIHZhciBjb21wb25lbnQgPSB0aGlzLmNvbXBvbmVudDsKKworICAgIHJldHVybiBfZW1i
ZXJIdG1sYmFyc1N5c3RlbUluc3RydW1lbnRhdGlvblN1cHBvcnQuaW5zdHJ1bWVudChjb21wb25l
bnQsIGZ1bmN0aW9uIFZpZXdOb2RlTWFuYWdlcl9yZW5kZXJfaW5zdHJ1bWVudCgpIHsKKyAgICAg
IHZhciBuZXdFbnYgPSBlbnY7CisgICAgICBpZiAoY29tcG9uZW50KSB7CisgICAgICAgIG5ld0Vu
diA9IGVudi5jaGlsZFdpdGhWaWV3KGNvbXBvbmVudCk7CisgICAgICB9IGVsc2UgeworICAgICAg
ICB2YXIgbWV0YSA9IHRoaXMuYmxvY2sgJiYgdGhpcy5ibG9jay50ZW1wbGF0ZS5tZXRhOworCisg
ICAgICAgIG5ld0VudiA9IGVudi5jaGlsZFdpdGhNZXRhKG1ldGEpOworICAgICAgfQorCisgICAg
ICBpZiAoY29tcG9uZW50KSB7CisgICAgICAgIGVudi5yZW5kZXJlci53aWxsUmVuZGVyKGNvbXBv
bmVudCk7CisgICAgICAgIGVudi5yZW5kZXJlZFZpZXdzLnB1c2goY29tcG9uZW50LmVsZW1lbnRJ
ZCk7CisgICAgICB9CisKKyAgICAgIGlmICh0aGlzLmJsb2NrKSB7CisgICAgICAgIHRoaXMuYmxv
Y2suaW52b2tlKG5ld0VudiwgW10sIHVuZGVmaW5lZCwgdGhpcy5yZW5kZXJOb2RlLCB0aGlzLnNj
b3BlLCB2aXNpdG9yKTsKKyAgICAgIH0KKworICAgICAgaWYgKGNvbXBvbmVudCkgeworICAgICAg
ICB2YXIgZWxlbWVudCA9IHRoaXMuZXhwZWN0RWxlbWVudCAmJiB0aGlzLnJlbmRlck5vZGUuZmly
c3ROb2RlOworCisgICAgICAgIC8vIEluIGVudmlyb25tZW50cyBsaWtlIEZhc3RCb290LCBkaXNh
YmxlIGFueSBob29rcyB0aGF0IHdvdWxkIGNhdXNlIHRoZSBjb21wb25lbnQKKyAgICAgICAgLy8g
dG8gYWNjZXNzIHRoZSBET00gZGlyZWN0bHkuCisgICAgICAgIGlmIChlbnYuZGVzdGluZWRGb3JE
T00pIHsKKyAgICAgICAgICBlbnYucmVuZGVyZXIuZGlkQ3JlYXRlRWxlbWVudChjb21wb25lbnQs
IGVsZW1lbnQpOworICAgICAgICAgIGVudi5yZW5kZXJlci53aWxsSW5zZXJ0RWxlbWVudChjb21w
b25lbnQsIGVsZW1lbnQpOworICAgICAgICAgIGVudi5saWZlY3ljbGVIb29rcy5wdXNoKHsgdHlw
ZTogJ2RpZEluc2VydEVsZW1lbnQnLCB2aWV3OiBjb21wb25lbnQgfSk7CisgICAgICAgIH0KKyAg
ICAgIH0KKyAgICB9LCB0aGlzKTsKKyAgfTsKKworICBWaWV3Tm9kZU1hbmFnZXIucHJvdG90eXBl
LnJlcmVuZGVyID0gZnVuY3Rpb24gVmlld05vZGVNYW5hZ2VyX3JlcmVuZGVyKGVudiwgYXR0cnMs
IHZpc2l0b3IpIHsKKyAgICB2YXIgY29tcG9uZW50ID0gdGhpcy5jb21wb25lbnQ7CisKKyAgICBy
ZXR1cm4gX2VtYmVySHRtbGJhcnNTeXN0ZW1JbnN0cnVtZW50YXRpb25TdXBwb3J0Lmluc3RydW1l
bnQoY29tcG9uZW50LCBmdW5jdGlvbiBWaWV3Tm9kZU1hbmFnZXJfcmVyZW5kZXJfaW5zdHJ1bWVu
dCgpIHsKKyAgICAgIHZhciBuZXdFbnYgPSBlbnY7CisgICAgICBpZiAoY29tcG9uZW50KSB7Cisg
ICAgICAgIG5ld0VudiA9IGVudi5jaGlsZFdpdGhWaWV3KGNvbXBvbmVudCk7CisKKyAgICAgICAg
dmFyIHNuYXBzaG90ID0gdGFrZVNuYXBzaG90KGF0dHJzKTsKKworICAgICAgICAvLyBOb3RpZnkg
Y29tcG9uZW50IHRoYXQgaXQgaGFzIGJlY29tZSBkaXJ0eSBhbmQgaXMgYWJvdXQgdG8gY2hhbmdl
LgorICAgICAgICBlbnYucmVuZGVyZXIud2lsbFVwZGF0ZShjb21wb25lbnQsIHNuYXBzaG90KTsK
KworICAgICAgICBpZiAoY29tcG9uZW50Ll9yZW5kZXJOb2RlLnNob3VsZFJlY2VpdmVBdHRycykg
eworICAgICAgICAgIGlmIChjb21wb25lbnQuX3Byb3BhZ2F0ZUF0dHJzVG9UaGlzKSB7CisgICAg
ICAgICAgICBjb21wb25lbnQuX3Byb3BhZ2F0ZUF0dHJzVG9UaGlzKF9lbWJlckh0bWxiYXJzTm9k
ZU1hbmFnZXJzQ29tcG9uZW50Tm9kZU1hbmFnZXIudGFrZUxlZ2FjeVNuYXBzaG90KGF0dHJzKSk7
CisgICAgICAgICAgfQorCisgICAgICAgICAgZW52LnJlbmRlcmVyLmNvbXBvbmVudFVwZGF0ZUF0
dHJzKGNvbXBvbmVudCwgc25hcHNob3QpOworICAgICAgICAgIGNvbXBvbmVudC5fcmVuZGVyTm9k
ZS5zaG91bGRSZWNlaXZlQXR0cnMgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGVudi5y
ZW5kZXJlci53aWxsUmVuZGVyKGNvbXBvbmVudCk7CisKKyAgICAgICAgZW52LnJlbmRlcmVkVmll
d3MucHVzaChjb21wb25lbnQuZWxlbWVudElkKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHZh
ciBtZXRhID0gdGhpcy5ibG9jayAmJiB0aGlzLmJsb2NrLnRlbXBsYXRlLm1ldGE7CisKKyAgICAg
ICAgbmV3RW52ID0gZW52LmNoaWxkV2l0aE1ldGEobWV0YSk7CisgICAgICB9CisKKyAgICAgIGlm
ICh0aGlzLmJsb2NrKSB7CisgICAgICAgIHRoaXMuYmxvY2suaW52b2tlKG5ld0VudiwgW10sIHVu
ZGVmaW5lZCwgdGhpcy5yZW5kZXJOb2RlLCB0aGlzLnNjb3BlLCB2aXNpdG9yKTsKKyAgICAgIH0K
KworICAgICAgcmV0dXJuIG5ld0VudjsKKyAgICB9LCB0aGlzKTsKKyAgfTsKKworICBWaWV3Tm9k
ZU1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiBWaWV3Tm9kZU1hbmFnZXJfZGVz
dHJveSgpIHsKKyAgICBpZiAodGhpcy5jb21wb25lbnQpIHsKKyAgICAgIHRoaXMuY29tcG9uZW50
LmRlc3Ryb3koKTsKKyAgICAgIHRoaXMuY29tcG9uZW50ID0gbnVsbDsKKyAgICB9CisgIH07CisK
KyAgZnVuY3Rpb24gZ2V0VGVtcGxhdGUoY29tcG9uZW50T3JWaWV3KSB7CisgICAgaWYgKCFjb21w
b25lbnRPclZpZXcuaXNDb21wb25lbnQpIHsKKyAgICAgIHJldHVybiBfZW1iZXJNZXRhbFByb3Bl
cnR5X2dldC5nZXQoY29tcG9uZW50T3JWaWV3LCAndGVtcGxhdGUnKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gbnVsbDsKKyAgfQorCisgIGZ1bmN0aW9uIGNyZWF0ZU9yVXBkYXRlQ29tcG9uZW50KGNv
bXBvbmVudCwgb3B0aW9ucywgY3JlYXRlT3B0aW9ucywgcmVuZGVyTm9kZSwgZW52KSB7CisgICAg
dmFyIGF0dHJzID0gYXJndW1lbnRzLmxlbmd0aCA8PSA1IHx8IGFyZ3VtZW50c1s1XSA9PT0gdW5k
ZWZpbmVkID8ge30gOiBhcmd1bWVudHNbNV07CisKKyAgICB2YXIgc25hcHNob3QgPSB0YWtlU25h
cHNob3QoYXR0cnMpOworICAgIHZhciBwcm9wcyA9IF9lbWJlck1ldGFsQXNzaWduLmRlZmF1bHQo
e30sIG9wdGlvbnMpOworICAgIHZhciBkZWZhdWx0Q29udHJvbGxlciA9IF9lbWJlclZpZXdzVmll
d3NWaWV3LmRlZmF1bHQucHJvdG8oKS5jb250cm9sbGVyOworICAgIHZhciBoYXNTdXBwbGllZENv
bnRyb2xsZXIgPSAnY29udHJvbGxlcicgaW4gYXR0cnMgfHwgJ2NvbnRyb2xsZXInIGluIHByb3Bz
OworCisgICAgaWYgKCFwcm9wcy5vd25lclZpZXcgJiYgb3B0aW9ucy5wYXJlbnRWaWV3KSB7Cisg
ICAgICBwcm9wcy5vd25lclZpZXcgPSBvcHRpb25zLnBhcmVudFZpZXcub3duZXJWaWV3OworICAg
IH0KKworICAgIHByb3BzLmF0dHJzID0gc25hcHNob3Q7CisgICAgaWYgKGNvbXBvbmVudC5jcmVh
dGUpIHsKKyAgICAgIHZhciBwcm90byA9IGNvbXBvbmVudC5wcm90bygpOworCisgICAgICBpZiAo
Y3JlYXRlT3B0aW9ucykgeworICAgICAgICBfZW1iZXJNZXRhbEFzc2lnbi5kZWZhdWx0KHByb3Bz
LCBjcmVhdGVPcHRpb25zKTsKKyAgICAgIH0KKworICAgICAgbWVyZ2VCaW5kaW5ncyhwcm9wcywg
c25hcHNob3QpOworCisgICAgICB2YXIgb3duZXIgPSBlbnYub3duZXI7CisKKyAgICAgIF9jb250
YWluZXJPd25lci5zZXRPd25lcihwcm9wcywgb3duZXIpOworICAgICAgcHJvcHMucmVuZGVyZXIg
PSBvcHRpb25zLnBhcmVudFZpZXcgPyBvcHRpb25zLnBhcmVudFZpZXcucmVuZGVyZXIgOiBvd25l
ciAmJiBvd25lci5sb29rdXAoJ3JlbmRlcmVyOi1kb20nKTsKKyAgICAgIHByb3BzLl92aWV3UmVn
aXN0cnkgPSBvcHRpb25zLnBhcmVudFZpZXcgPyBvcHRpb25zLnBhcmVudFZpZXcuX3ZpZXdSZWdp
c3RyeSA6IG93bmVyICYmIG93bmVyLmxvb2t1cCgnLXZpZXctcmVnaXN0cnk6bWFpbicpOworCisg
ICAgICBpZiAocHJvdG8uY29udHJvbGxlciAhPT0gZGVmYXVsdENvbnRyb2xsZXIgfHwgaGFzU3Vw
cGxpZWRDb250cm9sbGVyKSB7CisgICAgICAgIGRlbGV0ZSBwcm9wcy5fY29udGV4dDsKKyAgICAg
IH0KKworICAgICAgY29tcG9uZW50ID0gY29tcG9uZW50LmNyZWF0ZShwcm9wcyk7CisgICAgfSBl
bHNlIHsKKyAgICAgIGVudi5yZW5kZXJlci5jb21wb25lbnRVcGRhdGVBdHRycyhjb21wb25lbnQs
IHNuYXBzaG90KTsKKyAgICAgIF9lbWJlck1ldGFsU2V0X3Byb3BlcnRpZXMuZGVmYXVsdChjb21w
b25lbnQsIHByb3BzKTsKKworICAgICAgaWYgKGNvbXBvbmVudC5fcHJvcGFnYXRlQXR0cnNUb1Ro
aXMpIHsKKyAgICAgICAgY29tcG9uZW50Ll9wcm9wYWdhdGVBdHRyc1RvVGhpcyhfZW1iZXJIdG1s
YmFyc05vZGVNYW5hZ2Vyc0NvbXBvbmVudE5vZGVNYW5hZ2VyLnRha2VMZWdhY3lTbmFwc2hvdChh
dHRycykpOworICAgICAgfQorICAgIH0KKworICAgIGlmIChvcHRpb25zLnBhcmVudFZpZXcpIHsK
KyAgICAgIG9wdGlvbnMucGFyZW50Vmlldy5hcHBlbmRDaGlsZChjb21wb25lbnQpOworCisgICAg
ICBpZiAob3B0aW9ucy52aWV3TmFtZSkgeworICAgICAgICBfZW1iZXJNZXRhbFByb3BlcnR5X3Nl
dC5zZXQob3B0aW9ucy5wYXJlbnRWaWV3LCBvcHRpb25zLnZpZXdOYW1lLCBjb21wb25lbnQpOwor
ICAgICAgfQorICAgIH0KKworICAgIGNvbXBvbmVudC5fcmVuZGVyTm9kZSA9IHJlbmRlck5vZGU7
CisKKyAgICByZW5kZXJOb2RlLmVtYmVyVmlldyA9IGNvbXBvbmVudDsKKyAgICByZXR1cm4gY29t
cG9uZW50OworICB9CisKKyAgZnVuY3Rpb24gdGFrZVNuYXBzaG90KGF0dHJzKSB7CisgICAgdmFy
IGhhc2ggPSB7fTsKKworICAgIGZvciAodmFyIHByb3AgaW4gYXR0cnMpIHsKKyAgICAgIGhhc2hb
cHJvcF0gPSBfZW1iZXJIdG1sYmFyc0hvb2tzR2V0Q2VsbE9yVmFsdWUuZGVmYXVsdChhdHRyc1tw
cm9wXSk7CisgICAgfQorCisgICAgcmV0dXJuIGhhc2g7CisgIH0KKworICBmdW5jdGlvbiBtZXJn
ZUJpbmRpbmdzKHRhcmdldCwgYXR0cnMpIHsKKyAgICBmb3IgKHZhciBwcm9wIGluIGF0dHJzKSB7
CisgICAgICBpZiAoIWF0dHJzLmhhc093blByb3BlcnR5KHByb3ApKSB7CisgICAgICAgIGNvbnRp
bnVlOworICAgICAgfQorICAgICAgLy8gd2hlbiBgYXR0cnNgIGlzIGFuIGFjdHVhbCB2YWx1ZSBi
ZWluZyBzZXQgaW4gdGhlCisgICAgICAvLyBhdHRycyBoYXNoIChge3tmb28tYmFyIGF0dHJzPSJi
bGFoIn19YCkgd2UgY2Fubm90CisgICAgICAvLyBzZXQgYCJibGFoImAgdG8gdGhlIHJvb3Qgb2Yg
dGhlIHRhcmdldCBiZWNhdXNlCisgICAgICAvLyB0aGF0IHdvdWxkIHJlcGxhY2UgYWxsIGF0dHJz
IHdpdGggYGF0dHJzLmF0dHJzYAorICAgICAgaWYgKHByb3AgPT09ICdhdHRycycpIHsKKyAgICAg
ICAgX2VtYmVyTWV0YWxEZWJ1Zy53YXJuKCdJbnZva2luZyBhIGNvbXBvbmVudCB3aXRoIGEgaGFz
aCBhdHRyaWJ1dGUgbmFtZWQgYGF0dHJzYCBpcyBub3Qgc3VwcG9ydGVkLiBQbGVhc2UgcmVmYWN0
b3IgdXNhZ2Ugb2YgJyArIHRhcmdldCArICcgdG8gYXZvaWQgcGFzc2luZyBgYXR0cnNgIGFzIGEg
aGFzaCBwYXJhbWV0ZXIuJywgZmFsc2UsIHsgaWQ6ICdlbWJlci1odG1sYmFycy52aWV3LXVuc3Vw
cG9ydGVkLWF0dHJzJyB9KTsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisgICAgICB2YXIg
dmFsdWUgPSBhdHRyc1twcm9wXTsKKworICAgICAgaWYgKHZhbHVlICYmIHZhbHVlW19lbWJlclZp
ZXdzQ29tcGF0QXR0cnNQcm94eS5NVVRBQkxFX0NFTExdKSB7CisgICAgICAgIHRhcmdldFtwcm9w
XSA9IHZhbHVlLnZhbHVlOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdGFyZ2V0W3Byb3BdID0g
dmFsdWU7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRhcmdldDsKKyAgfQorfSk7CisK
Ky8vIEluIHRoZW9yeSB0aGlzIHNob3VsZCBjb21lIHRocm91Z2ggdGhlIGVudiwgYnV0IGl0IHNo
b3VsZAorLy8gYmUgc2FmZSB0byBpbXBvcnQgdGhpcyB1bnRpbCB3ZSBtYWtlIHRoZSBob29rIHN5
c3RlbSBwdWJsaWMKKy8vIGFuZCBpdCBnZXRzIGFjdGl2ZWx5IHVzZWQgaW4gYWRkb25zIG9yIG90
aGVyIGRvd25zdHJlYW0KKy8vIGxpYnJhcmllcy4KK2VuaWZlZCgnZW1iZXItaHRtbGJhcnMvc3Ry
ZWFtcy9idWlsdC1pbi1oZWxwZXInLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvc3RyZWFtcy9z
dHJlYW0nLCAnZW1iZXItaHRtbGJhcnMvc3RyZWFtcy91dGlscyddLCBmdW5jdGlvbiAoZXhwb3J0
cywgX2VtYmVyTWV0YWxTdHJlYW1zU3RyZWFtLCBfZW1iZXJIdG1sYmFyc1N0cmVhbXNVdGlscykg
eworICAndXNlIHN0cmljdCc7CisKKyAgdmFyIEJ1aWx0SW5IZWxwZXJTdHJlYW0gPSBfZW1iZXJN
ZXRhbFN0cmVhbXNTdHJlYW0uZGVmYXVsdC5leHRlbmQoeworICAgIGluaXQ6IGZ1bmN0aW9uICho
ZWxwZXIsIHBhcmFtcywgaGFzaCwgdGVtcGxhdGVzLCBlbnYsIHNjb3BlLCBsYWJlbCkgeworICAg
ICAgdGhpcy5oZWxwZXIgPSBoZWxwZXI7CisgICAgICB0aGlzLnBhcmFtcyA9IHBhcmFtczsKKyAg
ICAgIHRoaXMudGVtcGxhdGVzID0gdGVtcGxhdGVzOworICAgICAgdGhpcy5lbnYgPSBlbnY7Cisg
ICAgICB0aGlzLnNjb3BlID0gc2NvcGU7CisgICAgICB0aGlzLmhhc2ggPSBoYXNoOworICAgICAg
dGhpcy5sYWJlbCA9IGxhYmVsOworICAgIH0sCisKKyAgICBjb21wdXRlOiBmdW5jdGlvbiAoKSB7
CisgICAgICByZXR1cm4gdGhpcy5oZWxwZXIoX2VtYmVySHRtbGJhcnNTdHJlYW1zVXRpbHMuZ2V0
QXJyYXlWYWx1ZXModGhpcy5wYXJhbXMpLCBfZW1iZXJIdG1sYmFyc1N0cmVhbXNVdGlscy5nZXRI
YXNoVmFsdWVzKHRoaXMuaGFzaCksIHRoaXMudGVtcGxhdGVzLCB0aGlzLmVudiwgdGhpcy5zY29w
ZSk7CisgICAgfQorICB9KTsKKworICBleHBvcnRzLmRlZmF1bHQgPSBCdWlsdEluSGVscGVyU3Ry
ZWFtOworfSk7CitlbmlmZWQoJ2VtYmVyLWh0bWxiYXJzL3N0cmVhbXMvaGVscGVyLWZhY3Rvcnkn
LCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvc3RyZWFtcy9zdHJlYW0nLCAnZW1iZXItaHRtbGJh
cnMvc3RyZWFtcy91dGlscyddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxTdHJlYW1z
U3RyZWFtLCBfZW1iZXJIdG1sYmFyc1N0cmVhbXNVdGlscykgeworICAndXNlIHN0cmljdCc7CisK
KyAgdmFyIEhlbHBlckZhY3RvcnlTdHJlYW0gPSBfZW1iZXJNZXRhbFN0cmVhbXNTdHJlYW0uZGVm
YXVsdC5leHRlbmQoeworICAgIGluaXQ6IGZ1bmN0aW9uIChoZWxwZXJGYWN0b3J5LCBwYXJhbXMs
IGhhc2gsIGxhYmVsKSB7CisgICAgICB0aGlzLmhlbHBlckZhY3RvcnkgPSBoZWxwZXJGYWN0b3J5
OworICAgICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7CisgICAgICB0aGlzLmhhc2ggPSBoYXNoOwor
ICAgICAgdGhpcy5saW5rYWJsZSA9IHRydWU7CisgICAgICB0aGlzLmhlbHBlciA9IG51bGw7Cisg
ICAgICB0aGlzLmxhYmVsID0gbGFiZWw7CisgICAgfSwKKworICAgIGNvbXB1dGU6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgIGlmICghdGhpcy5oZWxwZXIpIHsKKyAgICAgICAgdGhpcy5oZWxwZXIgPSB0
aGlzLmhlbHBlckZhY3RvcnkuY3JlYXRlKHsgX3N0cmVhbTogdGhpcyB9KTsKKyAgICAgIH0KKyAg
ICAgIHJldHVybiB0aGlzLmhlbHBlci5jb21wdXRlKF9lbWJlckh0bWxiYXJzU3RyZWFtc1V0aWxz
LmdldEFycmF5VmFsdWVzKHRoaXMucGFyYW1zKSwgX2VtYmVySHRtbGJhcnNTdHJlYW1zVXRpbHMu
Z2V0SGFzaFZhbHVlcyh0aGlzLmhhc2gpKTsKKyAgICB9LAorCisgICAgZGVhY3RpdmF0ZTogZnVu
Y3Rpb24gKCkgeworICAgICAgdGhpcy5zdXBlciRkZWFjdGl2YXRlKCk7CisgICAgICBpZiAodGhp
cy5oZWxwZXIpIHsKKyAgICAgICAgdGhpcy5oZWxwZXIuZGVzdHJveSgpOworICAgICAgICB0aGlz
LmhlbHBlciA9IG51bGw7CisgICAgICB9CisgICAgfSwKKyAgICBzdXBlciRkZWFjdGl2YXRlOiBf
ZW1iZXJNZXRhbFN0cmVhbXNTdHJlYW0uZGVmYXVsdC5wcm90b3R5cGUuZGVhY3RpdmF0ZQorICB9
KTsKKworICBleHBvcnRzLmRlZmF1bHQgPSBIZWxwZXJGYWN0b3J5U3RyZWFtOworfSk7Citlbmlm
ZWQoJ2VtYmVyLWh0bWxiYXJzL3N0cmVhbXMvaGVscGVyLWluc3RhbmNlJywgWydleHBvcnRzJywg
J2VtYmVyLW1ldGFsL3N0cmVhbXMvc3RyZWFtJywgJ2VtYmVyLWh0bWxiYXJzL3N0cmVhbXMvdXRp
bHMnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsU3RyZWFtc1N0cmVhbSwgX2VtYmVy
SHRtbGJhcnNTdHJlYW1zVXRpbHMpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIHZhciBIZWxwZXJJ
bnN0YW5jZVN0cmVhbSA9IF9lbWJlck1ldGFsU3RyZWFtc1N0cmVhbS5kZWZhdWx0LmV4dGVuZCh7
CisgICAgaW5pdDogZnVuY3Rpb24gKGhlbHBlciwgcGFyYW1zLCBoYXNoLCBsYWJlbCkgeworICAg
ICAgdGhpcy5oZWxwZXIgPSBoZWxwZXI7CisgICAgICB0aGlzLnBhcmFtcyA9IHBhcmFtczsKKyAg
ICAgIHRoaXMuaGFzaCA9IGhhc2g7CisgICAgICB0aGlzLmxpbmthYmxlID0gdHJ1ZTsKKyAgICAg
IHRoaXMubGFiZWwgPSBsYWJlbDsKKyAgICB9LAorCisgICAgY29tcHV0ZTogZnVuY3Rpb24gKCkg
eworICAgICAgcmV0dXJuIHRoaXMuaGVscGVyLmNvbXB1dGUoX2VtYmVySHRtbGJhcnNTdHJlYW1z
VXRpbHMuZ2V0QXJyYXlWYWx1ZXModGhpcy5wYXJhbXMpLCBfZW1iZXJIdG1sYmFyc1N0cmVhbXNV
dGlscy5nZXRIYXNoVmFsdWVzKHRoaXMuaGFzaCkpOworICAgIH0KKyAgfSk7CisKKyAgZXhwb3J0
cy5kZWZhdWx0ID0gSGVscGVySW5zdGFuY2VTdHJlYW07Cit9KTsKK2VuaWZlZCgnZW1iZXItaHRt
bGJhcnMvc3RyZWFtcy91dGlscycsIFsnZXhwb3J0cycsICdlbWJlci1odG1sYmFycy9ob29rcy9n
ZXQtdmFsdWUnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlckh0bWxiYXJzSG9va3NHZXRWYWx1
ZSkgeworICAndXNlIHN0cmljdCc7CisKKyAgZXhwb3J0cy5nZXRBcnJheVZhbHVlcyA9IGdldEFy
cmF5VmFsdWVzOworICBleHBvcnRzLmdldEhhc2hWYWx1ZXMgPSBnZXRIYXNoVmFsdWVzOworCisg
IC8vIFdlIGRvbid0IHdhbnQgdG8gbGVhayBtdXRhYmxlIGNlbGxzIGludG8gaGVscGVycywgd2hp
Y2gKKyAgLy8gYXJlIHB1cmUgZnVuY3Rpb25zIHRoYXQgY2FuIG9ubHkgd29yayB3aXRoIHZhbHVl
cy4KKworICBmdW5jdGlvbiBnZXRBcnJheVZhbHVlcyhwYXJhbXMpIHsKKyAgICB2YXIgbCA9IHBh
cmFtcy5sZW5ndGg7CisgICAgdmFyIG91dCA9IG5ldyBBcnJheShsKTsKKworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgbDsgaSsrKSB7CisgICAgICBvdXRbaV0gPSBfZW1iZXJIdG1sYmFyc0hvb2tz
R2V0VmFsdWUuZGVmYXVsdChwYXJhbXNbaV0pOworICAgIH0KKworICAgIHJldHVybiBvdXQ7Cisg
IH0KKworICBmdW5jdGlvbiBnZXRIYXNoVmFsdWVzKGhhc2gpIHsKKyAgICB2YXIgb3V0ID0ge307
CisKKyAgICBmb3IgKHZhciBwcm9wIGluIGhhc2gpIHsKKyAgICAgIG91dFtwcm9wXSA9IF9lbWJl
ckh0bWxiYXJzSG9va3NHZXRWYWx1ZS5kZWZhdWx0KGhhc2hbcHJvcF0pOworICAgIH0KKworICAg
IHJldHVybiBvdXQ7CisgIH0KK30pOworZW5pZmVkKCdlbWJlci1odG1sYmFycy9zeXN0ZW0vYXBw
ZW5kLXRlbXBsYXRlZC12aWV3JywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2Vt
YmVyLW1ldGFsL3Byb3BlcnR5X2dldCcsICdlbWJlci12aWV3cy92aWV3cy92aWV3J10sIGZ1bmN0
aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJNZXRhbFByb3BlcnR5X2dldCwg
X2VtYmVyVmlld3NWaWV3c1ZpZXcpIHsKKyAgLyoqCisgIEBtb2R1bGUgZW1iZXIKKyAgQHN1Ym1v
ZHVsZSBlbWJlci1odG1sYmFycworICAqLworCisgICd1c2Ugc3RyaWN0JzsKKworICBleHBvcnRz
LmRlZmF1bHQgPSBhcHBlbmRUZW1wbGF0ZWRWaWV3OworCisgIGZ1bmN0aW9uIGFwcGVuZFRlbXBs
YXRlZFZpZXcocGFyZW50VmlldywgbW9ycGgsIHZpZXdDbGFzc09ySW5zdGFuY2UsIHByb3BzKSB7
CisgICAgdmFyIHZpZXdQcm90bzsKKyAgICBpZiAoX2VtYmVyVmlld3NWaWV3c1ZpZXcuZGVmYXVs
dC5kZXRlY3RJbnN0YW5jZSh2aWV3Q2xhc3NPckluc3RhbmNlKSkgeworICAgICAgdmlld1Byb3Rv
ID0gdmlld0NsYXNzT3JJbnN0YW5jZTsKKyAgICB9IGVsc2UgeworICAgICAgdmlld1Byb3RvID0g
dmlld0NsYXNzT3JJbnN0YW5jZS5wcm90bygpOworICAgIH0KKworICAgIF9lbWJlck1ldGFsRGVi
dWcuYXNzZXJ0KCdZb3UgY2Fubm90IHByb3ZpZGUgYSB0ZW1wbGF0ZSBibG9jayBpZiB5b3UgYWxz
byBzcGVjaWZpZWQgYSB0ZW1wbGF0ZU5hbWUnLCAhcHJvcHMudGVtcGxhdGUgfHwgIV9lbWJlck1l
dGFsUHJvcGVydHlfZ2V0LmdldChwcm9wcywgJ3RlbXBsYXRlTmFtZScpICYmICFfZW1iZXJNZXRh
bFByb3BlcnR5X2dldC5nZXQodmlld1Byb3RvLCAndGVtcGxhdGVOYW1lJykpOworCisgICAgLy8g
V2Ugb25seSB3YW50IHRvIG92ZXJyaWRlIHRoZSBgX2NvbnRleHRgIGNvbXB1dGVkIHByb3BlcnR5
IGlmIHRoZXJlIGlzCisgICAgLy8gbm8gc3BlY2lmaWVkIGNvbnRyb2xsZXIuIFNlZSBWaWV3I19j
b250ZXh0IGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgIHZhciBub0NvbnRyb2xsZXJJblByb3Rv
ID0gIXZpZXdQcm90by5jb250cm9sbGVyOworICAgIGlmICh2aWV3UHJvdG8uY29udHJvbGxlciAm
JiB2aWV3UHJvdG8uY29udHJvbGxlci5pc0Rlc2NyaXB0b3IpIHsKKyAgICAgIG5vQ29udHJvbGxl
ckluUHJvdG8gPSB0cnVlOworICAgIH0KKyAgICBpZiAobm9Db250cm9sbGVySW5Qcm90byAmJiAh
dmlld1Byb3RvLmNvbnRyb2xsZXJCaW5kaW5nICYmICFwcm9wcy5jb250cm9sbGVyICYmICFwcm9w
cy5jb250cm9sbGVyQmluZGluZykgeworICAgICAgcHJvcHMuX2NvbnRleHQgPSBfZW1iZXJNZXRh
bFByb3BlcnR5X2dldC5nZXQocGFyZW50VmlldywgJ2NvbnRleHQnKTsgLy8gVE9ETzogaXMgdGhp
cyByaWdodD8hCisgICAgfQorCisgICAgcHJvcHMuX21vcnBoID0gbW9ycGg7CisKKyAgICByZXR1
cm4gcGFyZW50Vmlldy5hcHBlbmRDaGlsZCh2aWV3Q2xhc3NPckluc3RhbmNlLCBwcm9wcyk7Cisg
IH0KK30pOworZW5pZmVkKCdlbWJlci1odG1sYmFycy9zeXN0ZW0vYm9vdHN0cmFwJywgWydleHBv
cnRzJywgJ2VtYmVyLXZpZXdzL2NvbXBvbmVudF9sb29rdXAnLCAnZW1iZXItdmlld3Mvc3lzdGVt
L2pxdWVyeScsICdlbWJlci1tZXRhbC9lcnJvcicsICdlbWJlci1ydW50aW1lL3N5c3RlbS9sYXp5
X2xvYWQnLCAnZW1iZXItdGVtcGxhdGUtY29tcGlsZXIvc3lzdGVtL2NvbXBpbGUnLCAnZW1iZXIt
bWV0YWwvZW52aXJvbm1lbnQnLCAnZW1iZXItaHRtbGJhcnMvdGVtcGxhdGVfcmVnaXN0cnknXSwg
ZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlclZpZXdzQ29tcG9uZW50X2xvb2t1cCwgX2VtYmVyVmll
d3NTeXN0ZW1KcXVlcnksIF9lbWJlck1ldGFsRXJyb3IsIF9lbWJlclJ1bnRpbWVTeXN0ZW1MYXp5
X2xvYWQsIF9lbWJlclRlbXBsYXRlQ29tcGlsZXJTeXN0ZW1Db21waWxlLCBfZW1iZXJNZXRhbEVu
dmlyb25tZW50LCBfZW1iZXJIdG1sYmFyc1RlbXBsYXRlX3JlZ2lzdHJ5KSB7CisgIC8qZ2xvYmFs
cyBIYW5kbGViYXJzICovCisKKyAgLyoqCisgIEBtb2R1bGUgZW1iZXIKKyAgQHN1Ym1vZHVsZSBl
bWJlci1odG1sYmFycworICAqLworCisgICd1c2Ugc3RyaWN0JzsKKworICAvKioKKyAgQG1vZHVs
ZSBlbWJlcgorICBAc3VibW9kdWxlIGVtYmVyLWh0bWxiYXJzCisgICovCisKKyAgLyoqCisgICAg
RmluZCB0ZW1wbGF0ZXMgc3RvcmVkIGluIHRoZSBoZWFkIHRhZyBhcyBzY3JpcHQgdGFncyBhbmQg
bWFrZSB0aGVtIGF2YWlsYWJsZQorICAgIHRvIGBFbWJlci5Db3JlVmlld2AgaW4gdGhlIGdsb2Jh
bCBgRW1iZXIuVEVNUExBVEVTYCBvYmplY3QuIFRoaXMgd2lsbCBiZSBydW4KKyAgICBhcyBhIGpR
dWVyeSBET00tcmVhZHkgY2FsbGJhY2suCisgIAorICAgIFNjcmlwdCB0YWdzIHdpdGggYHRleHQv
eC1oYW5kbGViYXJzYCB3aWxsIGJlIGNvbXBpbGVkCisgICAgd2l0aCBFbWJlcidzIHRlbXBsYXRl
IGNvbXBpbGVyIGFuZCBhcmUgc3VpdGFibGUgZm9yIHVzZSBhcyBhIHZpZXcncyB0ZW1wbGF0ZS4K
KyAgICBUaG9zZSB3aXRoIHR5cGUgYHRleHQveC1yYXctaGFuZGxlYmFyc2Agd2lsbCBiZSBjb21w
aWxlZCB3aXRoIHJlZ3VsYXIKKyAgICBIYW5kbGViYXJzIGFuZCBhcmUgc3VpdGFibGUgZm9yIHVz
ZSBpbiB2aWV3cycgY29tcHV0ZWQgcHJvcGVydGllcy4KKyAgCisgICAgQHByaXZhdGUKKyAgICBA
bWV0aG9kIGJvb3RzdHJhcAorICAgIEBmb3IgRW1iZXIuSFRNTEJhcnMKKyAgICBAc3RhdGljCisg
ICAgQHBhcmFtIGN0eAorICAqLworICBmdW5jdGlvbiBib290c3RyYXAoY3R4KSB7CisgICAgdmFy
IHNlbGVjdG9ycyA9ICdzY3JpcHRbdHlwZT0idGV4dC94LWhhbmRsZWJhcnMiXSwgc2NyaXB0W3R5
cGU9InRleHQveC1yYXctaGFuZGxlYmFycyJdJzsKKworICAgIF9lbWJlclZpZXdzU3lzdGVtSnF1
ZXJ5LmRlZmF1bHQoc2VsZWN0b3JzLCBjdHgpLmVhY2goZnVuY3Rpb24gKCkgeworICAgICAgLy8g
R2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBzY3JpcHQgdGFnLgorICAgICAgdmFyIHNjcmlwdCA9IF9l
bWJlclZpZXdzU3lzdGVtSnF1ZXJ5LmRlZmF1bHQodGhpcyk7CisKKyAgICAgIC8vIEdldCB0aGUg
bmFtZSBvZiB0aGUgc2NyaXB0LCB1c2VkIGJ5IEVtYmVyLlZpZXcncyB0ZW1wbGF0ZU5hbWUgcHJv
cGVydHkuCisgICAgICAvLyBGaXJzdCBsb29rIGZvciBkYXRhLXRlbXBsYXRlLW5hbWUgYXR0cmli
dXRlLCB0aGVuIGZhbGwgYmFjayB0byBpdHMKKyAgICAgIC8vIGlkIGlmIG5vIG5hbWUgaXMgZm91
bmQuCisgICAgICB2YXIgdGVtcGxhdGVOYW1lID0gc2NyaXB0LmF0dHIoJ2RhdGEtdGVtcGxhdGUt
bmFtZScpIHx8IHNjcmlwdC5hdHRyKCdpZCcpIHx8ICdhcHBsaWNhdGlvbic7CisgICAgICB2YXIg
dGVtcGxhdGUsIGNvbXBpbGU7CisKKyAgICAgIGlmIChzY3JpcHQuYXR0cigndHlwZScpID09PSAn
dGV4dC94LXJhdy1oYW5kbGViYXJzJykgeworICAgICAgICBjb21waWxlID0gX2VtYmVyVmlld3NT
eXN0ZW1KcXVlcnkuZGVmYXVsdC5wcm94eShIYW5kbGViYXJzLmNvbXBpbGUsIEhhbmRsZWJhcnMp
OworICAgICAgICB0ZW1wbGF0ZSA9IGNvbXBpbGUoc2NyaXB0Lmh0bWwoKSk7CisgICAgICB9IGVs
c2UgeworICAgICAgICB0ZW1wbGF0ZSA9IF9lbWJlclRlbXBsYXRlQ29tcGlsZXJTeXN0ZW1Db21w
aWxlLmRlZmF1bHQoc2NyaXB0Lmh0bWwoKSwgeworICAgICAgICAgIG1vZHVsZU5hbWU6IHRlbXBs
YXRlTmFtZQorICAgICAgICB9KTsKKyAgICAgIH0KKworICAgICAgLy8gQ2hlY2sgaWYgdGVtcGxh
dGUgb2Ygc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzLgorICAgICAgaWYgKF9lbWJlckh0bWxiYXJz
VGVtcGxhdGVfcmVnaXN0cnkuaGFzKHRlbXBsYXRlTmFtZSkpIHsKKyAgICAgICAgdGhyb3cgbmV3
IF9lbWJlck1ldGFsRXJyb3IuZGVmYXVsdCgnVGVtcGxhdGUgbmFtZWQgIicgKyB0ZW1wbGF0ZU5h
bWUgKyAnIiBhbHJlYWR5IGV4aXN0cy4nKTsKKyAgICAgIH0KKworICAgICAgLy8gRm9yIHRlbXBs
YXRlcyB3aGljaCBoYXZlIGEgbmFtZSwgd2Ugc2F2ZSB0aGVtIGFuZCB0aGVuIHJlbW92ZSB0aGVt
IGZyb20gdGhlIERPTS4KKyAgICAgIF9lbWJlckh0bWxiYXJzVGVtcGxhdGVfcmVnaXN0cnkuc2V0
KHRlbXBsYXRlTmFtZSwgdGVtcGxhdGUpOworCisgICAgICAvLyBSZW1vdmUgc2NyaXB0IHRhZyBm
cm9tIERPTS4KKyAgICAgIHNjcmlwdC5yZW1vdmUoKTsKKyAgICB9KTsKKyAgfQorCisgIGZ1bmN0
aW9uIF9ib290c3RyYXAoKSB7CisgICAgYm9vdHN0cmFwKF9lbWJlclZpZXdzU3lzdGVtSnF1ZXJ5
LmRlZmF1bHQoZG9jdW1lbnQpKTsKKyAgfQorCisgIGZ1bmN0aW9uIHJlZ2lzdGVyQ29tcG9uZW50
TG9va3VwKGFwcCkgeworICAgIGFwcC5yZWdpc3RlcignY29tcG9uZW50LWxvb2t1cDptYWluJywg
X2VtYmVyVmlld3NDb21wb25lbnRfbG9va3VwLmRlZmF1bHQpOworICB9CisKKyAgLyoKKyAgICBX
ZSB0aWUgdGhpcyB0byBhcHBsaWNhdGlvbi5sb2FkIHRvIGVuc3VyZSB0aGF0IHdlJ3ZlIGF0IGxl
YXN0CisgICAgYXR0ZW1wdGVkIHRvIGJvb3RzdHJhcCBhdCB0aGUgcG9pbnQgdGhhdCB0aGUgYXBw
bGljYXRpb24gaXMgbG9hZGVkLgorICAKKyAgICBXZSBhbHNvIHRpZSB0aGlzIHRvIGRvY3VtZW50
IHJlYWR5IHNpbmNlIHdlJ3JlIGd1YXJhbnRlZWQgdGhhdCBhbGwKKyAgICB0aGUgaW5saW5lIHRl
bXBsYXRlcyBhcmUgcHJlc2VudCBhdCB0aGlzIHBvaW50LgorICAKKyAgICBUaGVyZSdzIG5vIGhh
cm0gdG8gcnVubmluZyB0aGlzIHR3aWNlLCBzaW5jZSB3ZSByZW1vdmUgdGhlIHRlbXBsYXRlcwor
ICAgIGZyb20gdGhlIERPTSBhZnRlciBwcm9jZXNzaW5nLgorICAqLworCisgIF9lbWJlclJ1bnRp
bWVTeXN0ZW1MYXp5X2xvYWQub25Mb2FkKCdFbWJlci5BcHBsaWNhdGlvbicsIGZ1bmN0aW9uIChB
cHBsaWNhdGlvbikgeworICAgIEFwcGxpY2F0aW9uLmluaXRpYWxpemVyKHsKKyAgICAgIG5hbWU6
ICdkb21UZW1wbGF0ZXMnLAorICAgICAgaW5pdGlhbGl6ZTogX2VtYmVyTWV0YWxFbnZpcm9ubWVu
dC5kZWZhdWx0Lmhhc0RPTSA/IF9ib290c3RyYXAgOiBmdW5jdGlvbiAoKSB7fQorICAgIH0pOwor
CisgICAgQXBwbGljYXRpb24uaW5zdGFuY2VJbml0aWFsaXplcih7CisgICAgICBuYW1lOiAncmVn
aXN0ZXJDb21wb25lbnRMb29rdXAnLAorICAgICAgaW5pdGlhbGl6ZTogcmVnaXN0ZXJDb21wb25l
bnRMb29rdXAKKyAgICB9KTsKKyAgfSk7CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gYm9vdHN0cmFw
OworfSk7CitlbmlmZWQoJ2VtYmVyLWh0bWxiYXJzL3N5c3RlbS9kb20taGVscGVyJywgWydleHBv
cnRzJywgJ2RvbS1oZWxwZXInLCAnZW1iZXItaHRtbGJhcnMvbW9ycGhzL21vcnBoJywgJ2VtYmVy
LWh0bWxiYXJzL21vcnBocy9hdHRyLW1vcnBoJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZG9tSGVs
cGVyLCBfZW1iZXJIdG1sYmFyc01vcnBoc01vcnBoLCBfZW1iZXJIdG1sYmFyc01vcnBoc0F0dHJN
b3JwaCkgeworICAndXNlIHN0cmljdCc7CisKKyAgZnVuY3Rpb24gRW1iZXJET01IZWxwZXIoX2Rv
Y3VtZW50KSB7CisgICAgX2RvbUhlbHBlci5kZWZhdWx0LmNhbGwodGhpcywgX2RvY3VtZW50KTsK
KyAgfQorCisgIHZhciBwcm90byA9IEVtYmVyRE9NSGVscGVyLnByb3RvdHlwZSA9IE9iamVjdC5j
cmVhdGUoX2RvbUhlbHBlci5kZWZhdWx0LnByb3RvdHlwZSk7CisgIHByb3RvLk1vcnBoQ2xhc3Mg
PSBfZW1iZXJIdG1sYmFyc01vcnBoc01vcnBoLmRlZmF1bHQ7CisgIHByb3RvLkF0dHJNb3JwaENs
YXNzID0gX2VtYmVySHRtbGJhcnNNb3JwaHNBdHRyTW9ycGguZGVmYXVsdDsKKworICBleHBvcnRz
LmRlZmF1bHQgPSBFbWJlckRPTUhlbHBlcjsKK30pOworZW5pZmVkKCdlbWJlci1odG1sYmFycy9z
eXN0ZW0vaW5zdHJ1bWVudGF0aW9uLXN1cHBvcnQnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwv
aW5zdHJ1bWVudGF0aW9uJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbEluc3RydW1l
bnRhdGlvbikgeworICAndXNlIHN0cmljdCc7CisKKyAgZXhwb3J0cy5pbnN0cnVtZW50ID0gaW5z
dHJ1bWVudDsKKworICAvKioKKyAgICBQcm92aWRlcyBpbnN0cnVtZW50YXRpb24gZm9yIG5vZGUg
bWFuYWdlcnMuCisgIAorICAgIFdyYXAgeW91ciBub2RlIG1hbmFnZXIncyByZW5kZXIgYW5kIHJl
LXJlbmRlciBtZXRob2RzCisgICAgd2l0aCB0aGlzIGZ1bmN0aW9uLgorICAKKyAgICBAcGFyYW0g
e09iamVjdH0gY29tcG9uZW50IENvbXBvbmVudCBvciBWaWV3IGluc3RhbmNlIChvcHRpb25hbCku
CisgICAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRvIGluc3RydW1l
bnQuCisgICAgQHBhcmFtIHtPYmplY3R9IGNvbnRleHQgVGhlIGNvbnRleHQgdG8gY2FsbCB0aGUg
ZnVuY3Rpb24gd2l0aC4KKyAgICBAcmV0dXJuIHtPYmplY3R9IFJldHVybiB2YWx1ZSBmcm9tIHRo
ZSBpbnZva2VkIGNhbGxiYWNrLgorICAgIEBwcml2YXRlCisgICovCisKKyAgZnVuY3Rpb24gaW5z
dHJ1bWVudChjb21wb25lbnQsIGNhbGxiYWNrLCBjb250ZXh0KSB7CisgICAgdmFyIGluc3RydW1l
bnROYW1lLCB2YWwsIGRldGFpbHMsIGVuZDsKKyAgICAvLyBPbmx5IGluc3RydW1lbnQgaWYgdGhl
cmUncyBhdCBsZWFzdCBvbmUgc3Vic2NyaWJlci4KKyAgICBpZiAoX2VtYmVyTWV0YWxJbnN0cnVt
ZW50YXRpb24uc3Vic2NyaWJlcnMubGVuZ3RoKSB7CisgICAgICBpZiAoY29tcG9uZW50KSB7Cisg
ICAgICAgIGluc3RydW1lbnROYW1lID0gY29tcG9uZW50Lmluc3RydW1lbnROYW1lOworICAgICAg
fSBlbHNlIHsKKyAgICAgICAgaW5zdHJ1bWVudE5hbWUgPSAnbm9kZSc7CisgICAgICB9CisgICAg
ICBkZXRhaWxzID0ge307CisgICAgICBpZiAoY29tcG9uZW50KSB7CisgICAgICAgIGNvbXBvbmVu
dC5pbnN0cnVtZW50RGV0YWlscyhkZXRhaWxzKTsKKyAgICAgIH0KKyAgICAgIGVuZCA9IF9lbWJl
ck1ldGFsSW5zdHJ1bWVudGF0aW9uLl9pbnN0cnVtZW50U3RhcnQoJ3JlbmRlci4nICsgaW5zdHJ1
bWVudE5hbWUsIGZ1bmN0aW9uIHZpZXdJbnN0cnVtZW50RGV0YWlscygpIHsKKyAgICAgICAgcmV0
dXJuIGRldGFpbHM7CisgICAgICB9KTsKKyAgICAgIHZhbCA9IGNhbGxiYWNrLmNhbGwoY29udGV4
dCk7CisgICAgICBpZiAoZW5kKSB7CisgICAgICAgIGVuZCgpOworICAgICAgfQorICAgICAgcmV0
dXJuIHZhbDsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIGNhbGxiYWNrLmNhbGwoY29udGV4
dCk7CisgICAgfQorICB9Cit9KTsKK2VuaWZlZCgnZW1iZXItaHRtbGJhcnMvc3lzdGVtL2ludm9r
ZS1oZWxwZXInLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvZGVidWcnLCAnZW1iZXItaHRtbGJh
cnMvc3RyZWFtcy9oZWxwZXItaW5zdGFuY2UnLCAnZW1iZXItaHRtbGJhcnMvc3RyZWFtcy9oZWxw
ZXItZmFjdG9yeScsICdlbWJlci1odG1sYmFycy9zdHJlYW1zL2J1aWx0LWluLWhlbHBlciddLCBm
dW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxEZWJ1ZywgX2VtYmVySHRtbGJhcnNTdHJlYW1z
SGVscGVySW5zdGFuY2UsIF9lbWJlckh0bWxiYXJzU3RyZWFtc0hlbHBlckZhY3RvcnksIF9lbWJl
ckh0bWxiYXJzU3RyZWFtc0J1aWx0SW5IZWxwZXIpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIGV4
cG9ydHMuYnVpbGRIZWxwZXJTdHJlYW0gPSBidWlsZEhlbHBlclN0cmVhbTsKKworICBmdW5jdGlv
biBidWlsZEhlbHBlclN0cmVhbShoZWxwZXIsIHBhcmFtcywgaGFzaCwgdGVtcGxhdGVzLCBlbnYs
IHNjb3BlLCBsYWJlbCkgeworICAgIHZhciBpc0FueUtpbmRPZkhlbHBlciA9IGhlbHBlci5pc0hl
bHBlckluc3RhbmNlIHx8IGhlbHBlci5pc0hlbHBlckZhY3Rvcnk7CisgICAgX2VtYmVyTWV0YWxE
ZWJ1Zy5hc3NlcnQoJ0hlbHBlcnMgbWF5IG5vdCBiZSB1c2VkIGluIHRoZSBibG9jayBmb3JtLCBm
b3IgZXhhbXBsZSB7eyNteS1oZWxwZXJ9fXt7L215LWhlbHBlcn19LiBQbGVhc2UgdXNlIGEgY29t
cG9uZW50LCBvciBhbHRlcm5hdGl2ZWx5IHVzZSB0aGUgaGVscGVyIGluIGNvbWJpbmF0aW9uIHdp
dGggYSBidWlsdC1pbiBFbWJlciBoZWxwZXIsIGZvciBleGFtcGxlIHt7I2lmIChteS1oZWxwZXIp
fX17ey9pZn19LicsICEoaXNBbnlLaW5kT2ZIZWxwZXIgJiYgdGVtcGxhdGVzICYmIHRlbXBsYXRl
cy50ZW1wbGF0ZSAmJiB0ZW1wbGF0ZXMudGVtcGxhdGUubWV0YSkpOworICAgIF9lbWJlck1ldGFs
RGVidWcuYXNzZXJ0KCdIZWxwZXJzIG1heSBub3QgYmUgdXNlZCBpbiB0aGUgZWxlbWVudCBmb3Jt
LCBmb3IgZXhhbXBsZSA8ZGl2IHt7bXktaGVscGVyfX0+LicsICEoaXNBbnlLaW5kT2ZIZWxwZXIg
JiYgdGVtcGxhdGVzICYmIHRlbXBsYXRlcy5lbGVtZW50KSk7CisgICAgaWYgKGhlbHBlci5pc0hl
bHBlckZhY3RvcnkpIHsKKyAgICAgIHJldHVybiBuZXcgX2VtYmVySHRtbGJhcnNTdHJlYW1zSGVs
cGVyRmFjdG9yeS5kZWZhdWx0KGhlbHBlciwgcGFyYW1zLCBoYXNoLCBsYWJlbCk7CisgICAgfSBl
bHNlIGlmIChoZWxwZXIuaXNIZWxwZXJJbnN0YW5jZSkgeworICAgICAgcmV0dXJuIG5ldyBfZW1i
ZXJIdG1sYmFyc1N0cmVhbXNIZWxwZXJJbnN0YW5jZS5kZWZhdWx0KGhlbHBlciwgcGFyYW1zLCBo
YXNoLCBsYWJlbCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHRlbXBsYXRlcyA9IHRlbXBsYXRlcyB8
fCB7IHRlbXBsYXRlOiB7fSwgaW52ZXJzZToge30gfTsKKyAgICAgIHJldHVybiBuZXcgX2VtYmVy
SHRtbGJhcnNTdHJlYW1zQnVpbHRJbkhlbHBlci5kZWZhdWx0KGhlbHBlciwgcGFyYW1zLCBoYXNo
LCB0ZW1wbGF0ZXMsIGVudiwgc2NvcGUsIGxhYmVsKTsKKyAgICB9CisgIH0KK30pOworZW5pZmVk
KCdlbWJlci1odG1sYmFycy9zeXN0ZW0vbG9va3VwLWhlbHBlcicsIFsnZXhwb3J0cycsICdlbWJl
ci1tZXRhbC9kZWJ1ZycsICdlbWJlci1tZXRhbC9jYWNoZSddLCBmdW5jdGlvbiAoZXhwb3J0cywg
X2VtYmVyTWV0YWxEZWJ1ZywgX2VtYmVyTWV0YWxDYWNoZSkgeworICAvKioKKyAgQG1vZHVsZSBl
bWJlcgorICBAc3VibW9kdWxlIGVtYmVyLWh0bWxiYXJzCisgICovCisKKyAgJ3VzZSBzdHJpY3Qn
OworCisgIGV4cG9ydHMudmFsaWRhdGVMYXp5SGVscGVyTmFtZSA9IHZhbGlkYXRlTGF6eUhlbHBl
ck5hbWU7CisgIGV4cG9ydHMuZmluZEhlbHBlciA9IGZpbmRIZWxwZXI7CisgIGV4cG9ydHMuZGVm
YXVsdCA9IGxvb2t1cEhlbHBlcjsKKyAgdmFyIENPTlRBSU5TX0RBU0hfQ0FDSEUgPSBuZXcgX2Vt
YmVyTWV0YWxDYWNoZS5kZWZhdWx0KDEwMDAsIGZ1bmN0aW9uIChrZXkpIHsKKyAgICByZXR1cm4g
a2V5LmluZGV4T2YoJy0nKSAhPT0gLTE7CisgIH0pOworCisgIGV4cG9ydHMuQ09OVEFJTlNfREFT
SF9DQUNIRSA9IENPTlRBSU5TX0RBU0hfQ0FDSEU7CisgIHZhciBDT05UQUlOU19ET1RfQ0FDSEUg
PSBuZXcgX2VtYmVyTWV0YWxDYWNoZS5kZWZhdWx0KDEwMDAsIGZ1bmN0aW9uIChrZXkpIHsKKyAg
ICByZXR1cm4ga2V5LmluZGV4T2YoJy4nKSAhPT0gLTE7CisgIH0pOworCisgIGV4cG9ydHMuQ09O
VEFJTlNfRE9UX0NBQ0hFID0gQ09OVEFJTlNfRE9UX0NBQ0hFOworCisgIGZ1bmN0aW9uIHZhbGlk
YXRlTGF6eUhlbHBlck5hbWUoaGVscGVyTmFtZSwgY29udGFpbmVyLCBrZXl3b3JkcykgeworICAg
IHJldHVybiBjb250YWluZXIgJiYgIShoZWxwZXJOYW1lIGluIGtleXdvcmRzKTsKKyAgfQorCisg
IC8qKgorICAgIFVzZWQgdG8gbG9va3VwL3Jlc29sdmUgaGFuZGxlYmFycyBoZWxwZXJzLiBUaGUg
bG9va3VwIG9yZGVyIGlzOgorICAKKyAgICAqIExvb2sgZm9yIGEgcmVnaXN0ZXJlZCBoZWxwZXIK
KyAgICAqIElmIGEgZGFzaCBleGlzdHMgaW4gdGhlIG5hbWU6CisgICAgICAqIExvb2sgZm9yIGEg
aGVscGVyIHJlZ2lzdGVkIGluIHRoZSBjb250YWluZXIuCisgICAgICAqIFVzZSBFbWJlci5Db21w
b25lbnRMb29rdXAgdG8gZmluZCBhbiBFbWJlci5Db21wb25lbnQgdGhhdCByZXNvbHZlcworICAg
ICAgICB0byB0aGUgZ2l2ZW4gbmFtZS4KKyAgCisgICAgQHByaXZhdGUKKyAgICBAbWV0aG9kIHJl
c29sdmVIZWxwZXIKKyAgICBAcGFyYW0ge1N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgaGVs
cGVyIHRvIGxvb2t1cC4KKyAgICBAcmV0dXJuIHtIZWxwZXJ9CisgICovCisgIGZ1bmN0aW9uIF9m
aW5kSGVscGVyKG5hbWUsIHZpZXcsIGVudiwgb3B0aW9ucykgeworICAgIHZhciBoZWxwZXIgPSBl
bnYuaGVscGVyc1tuYW1lXTsKKworICAgIGlmICghaGVscGVyKSB7CisgICAgICB2YXIgb3duZXIg
PSBlbnYub3duZXI7CisgICAgICBpZiAodmFsaWRhdGVMYXp5SGVscGVyTmFtZShuYW1lLCBvd25l
ciwgZW52Lmhvb2tzLmtleXdvcmRzKSkgeworICAgICAgICB2YXIgaGVscGVyTmFtZSA9ICdoZWxw
ZXI6JyArIG5hbWU7CisgICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZW1iZXJqcy9l
bWJlci5qcy9pc3N1ZXMvMTMwNzEKKyAgICAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy5jaHJvbWl1
bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQ4MzkKKyAgICAgICAgdmFyIHJlZ2lzdGVyZWQg
PSBvd25lci5oYXNSZWdpc3RyYXRpb24oaGVscGVyTmFtZSwgb3B0aW9ucyk7CisgICAgICAgIGlm
IChyZWdpc3RlcmVkKSB7CisgICAgICAgICAgaGVscGVyID0gb3duZXIuX2xvb2t1cEZhY3Rvcnko
aGVscGVyTmFtZSwgb3B0aW9ucyk7CisgICAgICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQo
J0V4cGVjdGVkIHRvIGZpbmQgYW4gRW1iZXIuSGVscGVyIHdpdGggdGhlIG5hbWUgJyArIGhlbHBl
ck5hbWUgKyAnLCBidXQgZm91bmQgYW4gb2JqZWN0IG9mIHR5cGUgJyArIHR5cGVvZiBoZWxwZXIg
KyAnIGluc3RlYWQuJywgaGVscGVyLmlzSGVscGVyRmFjdG9yeSB8fCBoZWxwZXIuaXNIZWxwZXJJ
bnN0YW5jZSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gaGVscGVy
OworICB9CisKKyAgZnVuY3Rpb24gZmluZEhlbHBlcihuYW1lLCB2aWV3LCBlbnYpIHsKKyAgICB2
YXIgb3B0aW9ucyA9IHt9OworICAgIHZhciBtb2R1bGVOYW1lID0gZW52Lm1ldGEgJiYgZW52Lm1l
dGEubW9kdWxlTmFtZTsKKyAgICBpZiAobW9kdWxlTmFtZSkgeworICAgICAgb3B0aW9ucy5zb3Vy
Y2UgPSAndGVtcGxhdGU6JyArIG1vZHVsZU5hbWU7CisgICAgfQorCisgICAgdmFyIGxvY2FsSGVs
cGVyID0gX2ZpbmRIZWxwZXIobmFtZSwgdmlldywgZW52LCBvcHRpb25zKTsKKworICAgIC8vIExv
Y2FsIG1hdGNoIGZvdW5kLCB1c2UgaXQuCisgICAgaWYgKGxvY2FsSGVscGVyKSB7CisgICAgICBy
ZXR1cm4gbG9jYWxIZWxwZXI7CisgICAgfQorCisgICAgLy8gRmFsbCBiYWNrIHRvIGdsb2JhbC4K
KyAgICByZXR1cm4gX2ZpbmRIZWxwZXIobmFtZSwgdmlldywgZW52KTsKKyAgfQorCisgIGZ1bmN0
aW9uIGxvb2t1cEhlbHBlcihuYW1lLCB2aWV3LCBlbnYpIHsKKyAgICB2YXIgaGVscGVyID0gZmlu
ZEhlbHBlcihuYW1lLCB2aWV3LCBlbnYpOworCisgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQo
J0EgaGVscGVyIG5hbWVkIFwnJyArIG5hbWUgKyAnXCcgY291bGQgbm90IGJlIGZvdW5kJywgISFo
ZWxwZXIpOworCisgICAgcmV0dXJuIGhlbHBlcjsKKyAgfQorfSk7CitlbmlmZWQoJ2VtYmVyLWh0
bWxiYXJzL3N5c3RlbS9tYWtlX2JvdW5kX2hlbHBlcicsIFsnZXhwb3J0cycsICdlbWJlci1tZXRh
bC9kZWJ1ZycsICdlbWJlci1odG1sYmFycy9oZWxwZXInXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9l
bWJlck1ldGFsRGVidWcsIF9lbWJlckh0bWxiYXJzSGVscGVyKSB7CisgIC8qKgorICBAbW9kdWxl
IGVtYmVyCisgIEBzdWJtb2R1bGUgZW1iZXItaHRtbGJhcnMKKyAgKi8KKyAgJ3VzZSBzdHJpY3Qn
OworCisgIGV4cG9ydHMuZGVmYXVsdCA9IG1ha2VCb3VuZEhlbHBlcjsKKworICAvKioKKyAgICBD
cmVhdGUgYSBib3VuZCBoZWxwZXIuIEFjY2VwdHMgYSBmdW5jdGlvbiB0aGF0IHJlY2VpdmVzIHRo
ZSBvcmRlcmVkIGFuZCBoYXNoIHBhcmFtZXRlcnMKKyAgICBmcm9tIHRoZSB0ZW1wbGF0ZS4gSWYg
YSBib3VuZCBwcm9wZXJ0eSB3YXMgcHJvdmlkZWQgaW4gdGhlIHRlbXBsYXRlLCBpdCB3aWxsIGJl
IHJlc29sdmVkIHRvIGl0cworICAgIHZhbHVlIGFuZCBhbnkgY2hhbmdlcyB0byB0aGUgYm91bmQg
cHJvcGVydHkgY2F1c2UgdGhlIGhlbHBlciBmdW5jdGlvbiB0byBiZSByZS1ydW4gd2l0aCB0aGUg
dXBkYXRlZAorICAgIHZhbHVlcy4KKyAgCisgICAgKiBgcGFyYW1zYCAtIEFuIGFycmF5IG9mIHJl
c29sdmVkIG9yZGVyZWQgcGFyYW1ldGVycy4KKyAgICAqIGBoYXNoYCAtIEFuIG9iamVjdCBjb250
YWluaW5nIHRoZSBoYXNoIHBhcmFtZXRlcnMuCisgIAorICAgIEZvciBleGFtcGxlOgorICAKKyAg
ICAqIFdpdGggYW4gdW5xdW90ZWQgb3JkZXJlZCBwYXJhbWV0ZXI6CisgIAorICAgICAgYGBgamF2
YXNjcmlwdAorICAgICAge3t4LWNhcGl0YWxpemUgZm9vfX0KKyAgICAgIGBgYAorICAKKyAgICAg
IEFzc3VtaW5nIGBmb29gIHdhcyBzZXQgdG8gYCJiYXIiYCwgdGhlIGJvdW5kIGhlbHBlciB3b3Vs
ZCByZWNlaXZlIGBbImJhciJdYCBhcyBpdHMgZmlyc3QgYXJndW1lbnQsIGFuZAorICAgICAgYW4g
ZW1wdHkgaGFzaCBhcyBpdHMgc2Vjb25kLgorICAKKyAgICAqIFdpdGggYSBxdW90ZWQgb3JkZXJl
ZCBwYXJhbWV0ZXI6CisgIAorICAgICAgYGBgamF2YXNjcmlwdAorICAgICAge3t4LWNhcGl0YWxp
emUgImZvbyJ9fQorICAgICAgYGBgCisgIAorICAgICAgVGhlIGJvdW5kIGhlbHBlciB3b3VsZCBy
ZWNlaXZlIGBbImZvbyJdYCBhcyBpdHMgZmlyc3QgYXJndW1lbnQsIGFuZCBhbiBlbXB0eSBoYXNo
IGFzIGl0cyBzZWNvbmQuCisgIAorICAgICogV2l0aCBhbiB1bnF1b3RlZCBoYXNoIHBhcmFtZXRl
cjoKKyAgCisgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICB7e3gtcmVwZWF0ICJmb28iIGNvdW50
PXJlcGVhdENvdW50fX0KKyAgICAgIGBgYAorICAKKyAgICAgIEFzc3VtaW5nIHRoYXQgYHJlcGVh
dENvdW50YCByZXNvbHZlZCB0byAyLCB0aGUgYm91bmQgaGVscGVyIHdvdWxkIHJlY2VpdmUgYFsi
Zm9vIl1gIGFzIGl0cyBmaXJzdCBhcmd1bWVudCwKKyAgICAgIGFuZCB7IGNvdW50OiAyIH0gYXMg
aXRzIHNlY29uZC4KKyAgCisgICAgQHByaXZhdGUKKyAgICBAbWV0aG9kIG1ha2VCb3VuZEhlbHBl
cgorICAgIEBmb3IgRW1iZXIuSFRNTEJhcnMKKyAgICBAcGFyYW0ge0Z1bmN0aW9ufSBmbgorICAg
IEBzaW5jZSAxLjEwLjAKKyAgKi8KKworICBmdW5jdGlvbiBtYWtlQm91bmRIZWxwZXIoZm4pIHsK
KyAgICBfZW1iZXJNZXRhbERlYnVnLmRlcHJlY2F0ZSgnVXNpbmcgYEVtYmVyLkhUTUxCYXJzLm1h
a2VCb3VuZEhlbHBlcmAgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHJlZmFjdG9yIHRvIHVzZSBgRW1i
ZXIuSGVscGVyYCBvciBgRW1iZXIuSGVscGVyLmhlbHBlcmAuJywgZmFsc2UsIHsgaWQ6ICdlbWJl
ci1odG1sYmFycy5tYWtlLWJvdW5kLWhlbHBlcicsIHVudGlsOiAnMy4wLjAnIH0pOworICAgIHJl
dHVybiBfZW1iZXJIdG1sYmFyc0hlbHBlci5oZWxwZXIoZm4pOworICB9Cit9KTsKK2VuaWZlZCgn
ZW1iZXItaHRtbGJhcnMvc3lzdGVtL3JlbmRlci1lbnYnLCBbJ2V4cG9ydHMnLCAnZW1iZXItaHRt
bGJhcnMvZW52JywgJ2VtYmVyLW1ldGFsLXZpZXdzJywgJ2NvbnRhaW5lci9vd25lciddLCBmdW5j
dGlvbiAoZXhwb3J0cywgX2VtYmVySHRtbGJhcnNFbnYsIF9lbWJlck1ldGFsVmlld3MsIF9jb250
YWluZXJPd25lcikgeworICAndXNlIHN0cmljdCc7CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gUmVu
ZGVyRW52OworCisgIGZ1bmN0aW9uIFJlbmRlckVudihvcHRpb25zKSB7CisgICAgdGhpcy5saWZl
Y3ljbGVIb29rcyA9IG9wdGlvbnMubGlmZWN5Y2xlSG9va3MgfHwgW107CisgICAgdGhpcy5yZW5k
ZXJlZFZpZXdzID0gb3B0aW9ucy5yZW5kZXJlZFZpZXdzIHx8IFtdOworICAgIHRoaXMucmVuZGVy
ZWROb2RlcyA9IG9wdGlvbnMucmVuZGVyZWROb2RlcyB8fCBuZXcgX2VtYmVyTWV0YWxWaWV3cy5N
b3JwaFNldCgpOworICAgIHRoaXMuaGFzUGFyZW50T3V0bGV0ID0gb3B0aW9ucy5oYXNQYXJlbnRP
dXRsZXQgfHwgZmFsc2U7CisKKyAgICB0aGlzLnZpZXcgPSBvcHRpb25zLnZpZXc7CisgICAgdGhp
cy5vdXRsZXRTdGF0ZSA9IG9wdGlvbnMub3V0bGV0U3RhdGU7CisgICAgdGhpcy5vd25lciA9IG9w
dGlvbnMub3duZXI7CisgICAgdGhpcy5yZW5kZXJlciA9IG9wdGlvbnMucmVuZGVyZXI7CisgICAg
dGhpcy5kb20gPSBvcHRpb25zLmRvbTsKKyAgICB0aGlzLm1ldGEgPSBvcHRpb25zLm1ldGE7CisK
KyAgICB0aGlzLmhvb2tzID0gX2VtYmVySHRtbGJhcnNFbnYuZGVmYXVsdC5ob29rczsKKyAgICB0
aGlzLmhlbHBlcnMgPSBfZW1iZXJIdG1sYmFyc0Vudi5kZWZhdWx0LmhlbHBlcnM7CisgICAgdGhp
cy51c2VGcmFnbWVudENhY2hlID0gX2VtYmVySHRtbGJhcnNFbnYuZGVmYXVsdC51c2VGcmFnbWVu
dENhY2hlOworICAgIHRoaXMuZGVzdGluZWRGb3JET00gPSB0aGlzLnJlbmRlcmVyLl9kZXN0aW5l
ZEZvckRPTTsKKyAgfQorCisgIFJlbmRlckVudi5idWlsZCA9IGZ1bmN0aW9uICh2aWV3LCBtZXRh
KSB7CisgICAgcmV0dXJuIG5ldyBSZW5kZXJFbnYoeworICAgICAgdmlldzogdmlldywKKyAgICAg
IG91dGxldFN0YXRlOiB2aWV3Lm91dGxldFN0YXRlLAorICAgICAgb3duZXI6IF9jb250YWluZXJP
d25lci5nZXRPd25lcih2aWV3KSwKKyAgICAgIHJlbmRlcmVyOiB2aWV3LnJlbmRlcmVyLAorICAg
ICAgZG9tOiB2aWV3LnJlbmRlcmVyLl9kb20sCisgICAgICBtZXRhOiBtZXRhCisgICAgfSk7Cisg
IH07CisKKyAgUmVuZGVyRW52LnByb3RvdHlwZS5jaGlsZFdpdGhNZXRhID0gZnVuY3Rpb24gKG1l
dGEpIHsKKyAgICByZXR1cm4gbmV3IFJlbmRlckVudih7CisgICAgICB2aWV3OiB0aGlzLnZpZXcs
CisgICAgICBvdXRsZXRTdGF0ZTogdGhpcy5vdXRsZXRTdGF0ZSwKKyAgICAgIG93bmVyOiB0aGlz
Lm93bmVyLAorICAgICAgcmVuZGVyZXI6IHRoaXMucmVuZGVyZXIsCisgICAgICBkb206IHRoaXMu
ZG9tLAorICAgICAgbGlmZWN5Y2xlSG9va3M6IHRoaXMubGlmZWN5Y2xlSG9va3MsCisgICAgICBy
ZW5kZXJlZFZpZXdzOiB0aGlzLnJlbmRlcmVkVmlld3MsCisgICAgICByZW5kZXJlZE5vZGVzOiB0
aGlzLnJlbmRlcmVkTm9kZXMsCisgICAgICBoYXNQYXJlbnRPdXRsZXQ6IHRoaXMuaGFzUGFyZW50
T3V0bGV0LAorICAgICAgbWV0YTogbWV0YQorICAgIH0pOworICB9OworCisgIFJlbmRlckVudi5w
cm90b3R5cGUuY2hpbGRXaXRoVmlldyA9IGZ1bmN0aW9uICh2aWV3KSB7CisgICAgdmFyIG1ldGEg
PSBhcmd1bWVudHMubGVuZ3RoIDw9IDEgfHwgYXJndW1lbnRzWzFdID09PSB1bmRlZmluZWQgPyB0
aGlzLm1ldGEgOiBhcmd1bWVudHNbMV07CisKKyAgICByZXR1cm4gbmV3IFJlbmRlckVudih7Cisg
ICAgICB2aWV3OiB2aWV3LAorICAgICAgb3V0bGV0U3RhdGU6IHRoaXMub3V0bGV0U3RhdGUsCisg
ICAgICBvd25lcjogdGhpcy5vd25lciwKKyAgICAgIHJlbmRlcmVyOiB0aGlzLnJlbmRlcmVyLAor
ICAgICAgZG9tOiB0aGlzLmRvbSwKKyAgICAgIGxpZmVjeWNsZUhvb2tzOiB0aGlzLmxpZmVjeWNs
ZUhvb2tzLAorICAgICAgcmVuZGVyZWRWaWV3czogdGhpcy5yZW5kZXJlZFZpZXdzLAorICAgICAg
cmVuZGVyZWROb2RlczogdGhpcy5yZW5kZXJlZE5vZGVzLAorICAgICAgaGFzUGFyZW50T3V0bGV0
OiB0aGlzLmhhc1BhcmVudE91dGxldCwKKyAgICAgIG1ldGE6IG1ldGEKKyAgICB9KTsKKyAgfTsK
KworICBSZW5kZXJFbnYucHJvdG90eXBlLmNoaWxkV2l0aE91dGxldFN0YXRlID0gZnVuY3Rpb24g
KG91dGxldFN0YXRlKSB7CisgICAgdmFyIGhhc1BhcmVudE91dGxldCA9IGFyZ3VtZW50cy5sZW5n
dGggPD0gMSB8fCBhcmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IHRoaXMuaGFzUGFyZW50T3V0
bGV0IDogYXJndW1lbnRzWzFdOworICAgIHZhciBtZXRhID0gYXJndW1lbnRzLmxlbmd0aCA8PSAy
IHx8IGFyZ3VtZW50c1syXSA9PT0gdW5kZWZpbmVkID8gdGhpcy5tZXRhIDogYXJndW1lbnRzWzJd
OworCisgICAgcmV0dXJuIG5ldyBSZW5kZXJFbnYoeworICAgICAgdmlldzogdGhpcy52aWV3LAor
ICAgICAgb3V0bGV0U3RhdGU6IG91dGxldFN0YXRlLAorICAgICAgb3duZXI6IHRoaXMub3duZXIs
CisgICAgICByZW5kZXJlcjogdGhpcy5yZW5kZXJlciwKKyAgICAgIGRvbTogdGhpcy5kb20sCisg
ICAgICBsaWZlY3ljbGVIb29rczogdGhpcy5saWZlY3ljbGVIb29rcywKKyAgICAgIHJlbmRlcmVk
Vmlld3M6IHRoaXMucmVuZGVyZWRWaWV3cywKKyAgICAgIHJlbmRlcmVkTm9kZXM6IHRoaXMucmVu
ZGVyZWROb2RlcywKKyAgICAgIGhhc1BhcmVudE91dGxldDogaGFzUGFyZW50T3V0bGV0LAorICAg
ICAgbWV0YTogbWV0YQorICAgIH0pOworICB9OworfSk7CitlbmlmZWQoJ2VtYmVyLWh0bWxiYXJz
L3N5c3RlbS9yZW5kZXItdmlldycsIFsnZXhwb3J0cycsICdlbWJlci1odG1sYmFycy9ub2RlLW1h
bmFnZXJzL3ZpZXctbm9kZS1tYW5hZ2VyJywgJ2VtYmVyLWh0bWxiYXJzL3N5c3RlbS9yZW5kZXIt
ZW52J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJIdG1sYmFyc05vZGVNYW5hZ2Vyc1ZpZXdO
b2RlTWFuYWdlciwgX2VtYmVySHRtbGJhcnNTeXN0ZW1SZW5kZXJFbnYpIHsKKyAgJ3VzZSBzdHJp
Y3QnOworCisgIGV4cG9ydHMucmVuZGVySFRNTEJhcnNCbG9jayA9IHJlbmRlckhUTUxCYXJzQmxv
Y2s7CisKKyAgLy8gVGhpcyBmdW5jdGlvbiBvbmx5IGdldHMgY2FsbGVkIG9uY2UgcGVyIHJlbmRl
ciBvZiBhICJyb290IHZpZXciIChgYXBwZW5kVG9gKS4gT3RoZXJ3aXNlLAorICAvLyBIVE1MQmFy
cyBwcm9wYWdhdGVzIHRoZSBleGlzdGluZyBlbnYgYW5kIHJlbmRlcnMgdGVtcGxhdGVzIGZvciBh
IGdpdmVuIHJlbmRlciBub2RlLgorCisgIGZ1bmN0aW9uIHJlbmRlckhUTUxCYXJzQmxvY2sodmll
dywgYmxvY2ssIHJlbmRlck5vZGUpIHsKKyAgICB2YXIgbWV0YSA9IGJsb2NrICYmIGJsb2NrLnRl
bXBsYXRlICYmIGJsb2NrLnRlbXBsYXRlLm1ldGE7CisgICAgdmFyIGVudiA9IF9lbWJlckh0bWxi
YXJzU3lzdGVtUmVuZGVyRW52LmRlZmF1bHQuYnVpbGQodmlldywgbWV0YSk7CisKKyAgICB2aWV3
LmVudiA9IGVudjsKKyAgICBfZW1iZXJIdG1sYmFyc05vZGVNYW5hZ2Vyc1ZpZXdOb2RlTWFuYWdl
ci5jcmVhdGVPclVwZGF0ZUNvbXBvbmVudCh2aWV3LCB7fSwgbnVsbCwgcmVuZGVyTm9kZSwgZW52
KTsKKyAgICB2YXIgbm9kZU1hbmFnZXIgPSBuZXcgX2VtYmVySHRtbGJhcnNOb2RlTWFuYWdlcnNW
aWV3Tm9kZU1hbmFnZXIuZGVmYXVsdCh2aWV3LCBudWxsLCByZW5kZXJOb2RlLCBibG9jaywgdmll
dy50YWdOYW1lICE9PSAnJyk7CisKKyAgICBub2RlTWFuYWdlci5yZW5kZXIoZW52LCB7fSk7Cisg
IH0KK30pOworZW5pZmVkKCJlbWJlci1odG1sYmFycy90ZW1wbGF0ZV9yZWdpc3RyeSIsIFsiZXhw
b3J0cyJdLCBmdW5jdGlvbiAoZXhwb3J0cykgeworICAvLyBTVEFURSB3aXRoaW4gYSBtb2R1bGUg
aXMgZnJvd25lZCBhcG9uLCB0aGlzIGV4aXN0cworICAvLyB0byBzdXBwb3J0IEVtYmVyLlRFTVBM
QVRFUyBidXQgc2hpZWxkIGVtYmVyIGludGVybmFscyBmcm9tIHRoaXMgbGVnYWN5CisgIC8vIGds
b2JhbCBBUEkuCisgICJ1c2Ugc3RyaWN0IjsKKworICBleHBvcnRzLnNldFRlbXBsYXRlcyA9IHNl
dFRlbXBsYXRlczsKKyAgZXhwb3J0cy5nZXRUZW1wbGF0ZXMgPSBnZXRUZW1wbGF0ZXM7CisgIGV4
cG9ydHMuZ2V0ID0gZ2V0OworICBleHBvcnRzLmhhcyA9IGhhczsKKyAgZXhwb3J0cy5zZXQgPSBz
ZXQ7CisgIHZhciBURU1QTEFURVMgPSB7fTsKKworICBmdW5jdGlvbiBzZXRUZW1wbGF0ZXModGVt
cGxhdGVzKSB7CisgICAgVEVNUExBVEVTID0gdGVtcGxhdGVzOworICB9CisKKyAgZnVuY3Rpb24g
Z2V0VGVtcGxhdGVzKCkgeworICAgIHJldHVybiBURU1QTEFURVM7CisgIH0KKworICBmdW5jdGlv
biBnZXQobmFtZSkgeworICAgIGlmIChURU1QTEFURVMuaGFzT3duUHJvcGVydHkobmFtZSkpIHsK
KyAgICAgIHJldHVybiBURU1QTEFURVNbbmFtZV07CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24g
aGFzKG5hbWUpIHsKKyAgICByZXR1cm4gVEVNUExBVEVTLmhhc093blByb3BlcnR5KG5hbWUpOwor
ICB9CisKKyAgZnVuY3Rpb24gc2V0KG5hbWUsIHRlbXBsYXRlKSB7CisgICAgcmV0dXJuIFRFTVBM
QVRFU1tuYW1lXSA9IHRlbXBsYXRlOworICB9Cit9KTsKK2VuaWZlZCgiZW1iZXItaHRtbGJhcnMv
dGVtcGxhdGVzL2NvbXBvbmVudCIsIFsiZXhwb3J0cyIsICJlbWJlci10ZW1wbGF0ZS1jb21waWxl
ci9zeXN0ZW0vdGVtcGxhdGUiXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlclRlbXBsYXRlQ29t
cGlsZXJTeXN0ZW1UZW1wbGF0ZSkgeworICAidXNlIHN0cmljdCI7CisKKyAgZXhwb3J0cy5kZWZh
dWx0ID0gX2VtYmVyVGVtcGxhdGVDb21waWxlclN5c3RlbVRlbXBsYXRlLmRlZmF1bHQoKGZ1bmN0
aW9uICgpIHsKKyAgICByZXR1cm4geworICAgICAgbWV0YToge30sCisgICAgICBpc0VtcHR5OiBm
YWxzZSwKKyAgICAgIGFyaXR5OiAwLAorICAgICAgY2FjaGVkRnJhZ21lbnQ6IG51bGwsCisgICAg
ICBoYXNSZW5kZXJlZDogZmFsc2UsCisgICAgICBidWlsZEZyYWdtZW50OiBmdW5jdGlvbiBidWls
ZEZyYWdtZW50KGRvbSkgeworICAgICAgICB2YXIgZWwwID0gZG9tLmNyZWF0ZURvY3VtZW50RnJh
Z21lbnQoKTsKKyAgICAgICAgdmFyIGVsMSA9IGRvbS5jcmVhdGVDb21tZW50KCIiKTsKKyAgICAg
ICAgZG9tLmFwcGVuZENoaWxkKGVsMCwgZWwxKTsKKyAgICAgICAgcmV0dXJuIGVsMDsKKyAgICAg
IH0sCisgICAgICBidWlsZFJlbmRlck5vZGVzOiBmdW5jdGlvbiBidWlsZFJlbmRlck5vZGVzKGRv
bSwgZnJhZ21lbnQsIGNvbnRleHR1YWxFbGVtZW50KSB7CisgICAgICAgIHZhciBtb3JwaHMgPSBu
ZXcgQXJyYXkoMSk7CisgICAgICAgIG1vcnBoc1swXSA9IGRvbS5jcmVhdGVNb3JwaEF0KGZyYWdt
ZW50LCAwLCAwLCBjb250ZXh0dWFsRWxlbWVudCk7CisgICAgICAgIGRvbS5pbnNlcnRCb3VuZGFy
eShmcmFnbWVudCwgMCk7CisgICAgICAgIGRvbS5pbnNlcnRCb3VuZGFyeShmcmFnbWVudCwgbnVs
bCk7CisgICAgICAgIHJldHVybiBtb3JwaHM7CisgICAgICB9LAorICAgICAgc3RhdGVtZW50czog
W1siY29udGVudCIsICJ5aWVsZCIsIFsibG9jIiwgW251bGwsIFsxLCAwXSwgWzEsIDldXV1dXSwK
KyAgICAgIGxvY2FsczogW10sCisgICAgICB0ZW1wbGF0ZXM6IFtdCisgICAgfTsKKyAgfSkoKSk7
Cit9KTsKK2VuaWZlZCgiZW1iZXItaHRtbGJhcnMvdGVtcGxhdGVzL2VtcHR5IiwgWyJleHBvcnRz
IiwgImVtYmVyLXRlbXBsYXRlLWNvbXBpbGVyL3N5c3RlbS90ZW1wbGF0ZSJdLCBmdW5jdGlvbiAo
ZXhwb3J0cywgX2VtYmVyVGVtcGxhdGVDb21waWxlclN5c3RlbVRlbXBsYXRlKSB7CisgICJ1c2Ug
c3RyaWN0IjsKKworICBleHBvcnRzLmRlZmF1bHQgPSBfZW1iZXJUZW1wbGF0ZUNvbXBpbGVyU3lz
dGVtVGVtcGxhdGUuZGVmYXVsdCgoZnVuY3Rpb24gKCkgeworICAgIHJldHVybiB7CisgICAgICBt
ZXRhOiB7fSwKKyAgICAgIGlzRW1wdHk6IHRydWUsCisgICAgICBhcml0eTogMCwKKyAgICAgIGNh
Y2hlZEZyYWdtZW50OiBudWxsLAorICAgICAgaGFzUmVuZGVyZWQ6IGZhbHNlLAorICAgICAgYnVp
bGRGcmFnbWVudDogZnVuY3Rpb24gYnVpbGRGcmFnbWVudChkb20pIHsKKyAgICAgICAgdmFyIGVs
MCA9IGRvbS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisgICAgICAgIHJldHVybiBlbDA7Cisg
ICAgICB9LAorICAgICAgYnVpbGRSZW5kZXJOb2RlczogZnVuY3Rpb24gYnVpbGRSZW5kZXJOb2Rl
cygpIHsKKyAgICAgICAgcmV0dXJuIFtdOworICAgICAgfSwKKyAgICAgIHN0YXRlbWVudHM6IFtd
LAorICAgICAgbG9jYWxzOiBbXSwKKyAgICAgIHRlbXBsYXRlczogW10KKyAgICB9OworICB9KSgp
KTsKK30pOworZW5pZmVkKCJlbWJlci1odG1sYmFycy90ZW1wbGF0ZXMvbGluay10byIsIFsiZXhw
b3J0cyIsICJlbWJlci10ZW1wbGF0ZS1jb21waWxlci9zeXN0ZW0vdGVtcGxhdGUiXSwgZnVuY3Rp
b24gKGV4cG9ydHMsIF9lbWJlclRlbXBsYXRlQ29tcGlsZXJTeXN0ZW1UZW1wbGF0ZSkgeworICAi
dXNlIHN0cmljdCI7CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gX2VtYmVyVGVtcGxhdGVDb21waWxl
clN5c3RlbVRlbXBsYXRlLmRlZmF1bHQoKGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgY2hpbGQwID0g
KGZ1bmN0aW9uICgpIHsKKyAgICAgIHJldHVybiB7CisgICAgICAgIG1ldGE6IHt9LAorICAgICAg
ICBpc0VtcHR5OiBmYWxzZSwKKyAgICAgICAgYXJpdHk6IDAsCisgICAgICAgIGNhY2hlZEZyYWdt
ZW50OiBudWxsLAorICAgICAgICBoYXNSZW5kZXJlZDogZmFsc2UsCisgICAgICAgIGJ1aWxkRnJh
Z21lbnQ6IGZ1bmN0aW9uIGJ1aWxkRnJhZ21lbnQoZG9tKSB7CisgICAgICAgICAgdmFyIGVsMCA9
IGRvbS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisgICAgICAgICAgdmFyIGVsMSA9IGRvbS5j
cmVhdGVDb21tZW50KCIiKTsKKyAgICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwwLCBlbDEpOwor
ICAgICAgICAgIHJldHVybiBlbDA7CisgICAgICAgIH0sCisgICAgICAgIGJ1aWxkUmVuZGVyTm9k
ZXM6IGZ1bmN0aW9uIGJ1aWxkUmVuZGVyTm9kZXMoZG9tLCBmcmFnbWVudCwgY29udGV4dHVhbEVs
ZW1lbnQpIHsKKyAgICAgICAgICB2YXIgbW9ycGhzID0gbmV3IEFycmF5KDEpOworICAgICAgICAg
IG1vcnBoc1swXSA9IGRvbS5jcmVhdGVNb3JwaEF0KGZyYWdtZW50LCAwLCAwLCBjb250ZXh0dWFs
RWxlbWVudCk7CisgICAgICAgICAgZG9tLmluc2VydEJvdW5kYXJ5KGZyYWdtZW50LCAwKTsKKyAg
ICAgICAgICBkb20uaW5zZXJ0Qm91bmRhcnkoZnJhZ21lbnQsIG51bGwpOworICAgICAgICAgIHJl
dHVybiBtb3JwaHM7CisgICAgICAgIH0sCisgICAgICAgIHN0YXRlbWVudHM6IFtbImNvbnRlbnQi
LCAibGlua1RpdGxlIiwgWyJsb2MiLCBbbnVsbCwgWzEsIDE3XSwgWzEsIDMwXV1dXV0sCisgICAg
ICAgIGxvY2FsczogW10sCisgICAgICAgIHRlbXBsYXRlczogW10KKyAgICAgIH07CisgICAgfSko
KTsKKyAgICB2YXIgY2hpbGQxID0gKGZ1bmN0aW9uICgpIHsKKyAgICAgIHJldHVybiB7CisgICAg
ICAgIG1ldGE6IHt9LAorICAgICAgICBpc0VtcHR5OiBmYWxzZSwKKyAgICAgICAgYXJpdHk6IDAs
CisgICAgICAgIGNhY2hlZEZyYWdtZW50OiBudWxsLAorICAgICAgICBoYXNSZW5kZXJlZDogZmFs
c2UsCisgICAgICAgIGJ1aWxkRnJhZ21lbnQ6IGZ1bmN0aW9uIGJ1aWxkRnJhZ21lbnQoZG9tKSB7
CisgICAgICAgICAgdmFyIGVsMCA9IGRvbS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisgICAg
ICAgICAgdmFyIGVsMSA9IGRvbS5jcmVhdGVDb21tZW50KCIiKTsKKyAgICAgICAgICBkb20uYXBw
ZW5kQ2hpbGQoZWwwLCBlbDEpOworICAgICAgICAgIHJldHVybiBlbDA7CisgICAgICAgIH0sCisg
ICAgICAgIGJ1aWxkUmVuZGVyTm9kZXM6IGZ1bmN0aW9uIGJ1aWxkUmVuZGVyTm9kZXMoZG9tLCBm
cmFnbWVudCwgY29udGV4dHVhbEVsZW1lbnQpIHsKKyAgICAgICAgICB2YXIgbW9ycGhzID0gbmV3
IEFycmF5KDEpOworICAgICAgICAgIG1vcnBoc1swXSA9IGRvbS5jcmVhdGVNb3JwaEF0KGZyYWdt
ZW50LCAwLCAwLCBjb250ZXh0dWFsRWxlbWVudCk7CisgICAgICAgICAgZG9tLmluc2VydEJvdW5k
YXJ5KGZyYWdtZW50LCAwKTsKKyAgICAgICAgICBkb20uaW5zZXJ0Qm91bmRhcnkoZnJhZ21lbnQs
IG51bGwpOworICAgICAgICAgIHJldHVybiBtb3JwaHM7CisgICAgICAgIH0sCisgICAgICAgIHN0
YXRlbWVudHM6IFtbImNvbnRlbnQiLCAieWllbGQiLCBbImxvYyIsIFtudWxsLCBbMSwgMzhdLCBb
MSwgNDddXV1dXSwKKyAgICAgICAgbG9jYWxzOiBbXSwKKyAgICAgICAgdGVtcGxhdGVzOiBbXQor
ICAgICAgfTsKKyAgICB9KSgpOworICAgIHJldHVybiB7CisgICAgICBtZXRhOiB7fSwKKyAgICAg
IGlzRW1wdHk6IGZhbHNlLAorICAgICAgYXJpdHk6IDAsCisgICAgICBjYWNoZWRGcmFnbWVudDog
bnVsbCwKKyAgICAgIGhhc1JlbmRlcmVkOiBmYWxzZSwKKyAgICAgIGJ1aWxkRnJhZ21lbnQ6IGZ1
bmN0aW9uIGJ1aWxkRnJhZ21lbnQoZG9tKSB7CisgICAgICAgIHZhciBlbDAgPSBkb20uY3JlYXRl
RG9jdW1lbnRGcmFnbWVudCgpOworICAgICAgICB2YXIgZWwxID0gZG9tLmNyZWF0ZUNvbW1lbnQo
IiIpOworICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwwLCBlbDEpOworICAgICAgICByZXR1cm4g
ZWwwOworICAgICAgfSwKKyAgICAgIGJ1aWxkUmVuZGVyTm9kZXM6IGZ1bmN0aW9uIGJ1aWxkUmVu
ZGVyTm9kZXMoZG9tLCBmcmFnbWVudCwgY29udGV4dHVhbEVsZW1lbnQpIHsKKyAgICAgICAgdmFy
IG1vcnBocyA9IG5ldyBBcnJheSgxKTsKKyAgICAgICAgbW9ycGhzWzBdID0gZG9tLmNyZWF0ZU1v
cnBoQXQoZnJhZ21lbnQsIDAsIDAsIGNvbnRleHR1YWxFbGVtZW50KTsKKyAgICAgICAgZG9tLmlu
c2VydEJvdW5kYXJ5KGZyYWdtZW50LCAwKTsKKyAgICAgICAgZG9tLmluc2VydEJvdW5kYXJ5KGZy
YWdtZW50LCBudWxsKTsKKyAgICAgICAgcmV0dXJuIG1vcnBoczsKKyAgICAgIH0sCisgICAgICBz
dGF0ZW1lbnRzOiBbWyJibG9jayIsICJpZiIsIFtbImdldCIsICJsaW5rVGl0bGUiLCBbImxvYyIs
IFtudWxsLCBbMSwgNl0sIFsxLCAxNV1dXV1dLCBbXSwgMCwgMSwgWyJsb2MiLCBbbnVsbCwgWzEs
IDBdLCBbMSwgNTRdXV1dXSwKKyAgICAgIGxvY2FsczogW10sCisgICAgICB0ZW1wbGF0ZXM6IFtj
aGlsZDAsIGNoaWxkMV0KKyAgICB9OworICB9KSgpKTsKK30pOworZW5pZmVkKCJlbWJlci1odG1s
YmFycy90ZW1wbGF0ZXMvdG9wLWxldmVsLXZpZXciLCBbImV4cG9ydHMiLCAiZW1iZXItdGVtcGxh
dGUtY29tcGlsZXIvc3lzdGVtL3RlbXBsYXRlIl0sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJU
ZW1wbGF0ZUNvbXBpbGVyU3lzdGVtVGVtcGxhdGUpIHsKKyAgInVzZSBzdHJpY3QiOworCisgIGV4
cG9ydHMuZGVmYXVsdCA9IF9lbWJlclRlbXBsYXRlQ29tcGlsZXJTeXN0ZW1UZW1wbGF0ZS5kZWZh
dWx0KChmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuIHsKKyAgICAgIG1ldGE6IHt9LAorICAgICAg
aXNFbXB0eTogZmFsc2UsCisgICAgICBhcml0eTogMCwKKyAgICAgIGNhY2hlZEZyYWdtZW50OiBu
dWxsLAorICAgICAgaGFzUmVuZGVyZWQ6IGZhbHNlLAorICAgICAgYnVpbGRGcmFnbWVudDogZnVu
Y3Rpb24gYnVpbGRGcmFnbWVudChkb20pIHsKKyAgICAgICAgdmFyIGVsMCA9IGRvbS5jcmVhdGVE
b2N1bWVudEZyYWdtZW50KCk7CisgICAgICAgIHZhciBlbDEgPSBkb20uY3JlYXRlQ29tbWVudCgi
Iik7CisgICAgICAgIGRvbS5hcHBlbmRDaGlsZChlbDAsIGVsMSk7CisgICAgICAgIHJldHVybiBl
bDA7CisgICAgICB9LAorICAgICAgYnVpbGRSZW5kZXJOb2RlczogZnVuY3Rpb24gYnVpbGRSZW5k
ZXJOb2Rlcyhkb20sIGZyYWdtZW50LCBjb250ZXh0dWFsRWxlbWVudCkgeworICAgICAgICB2YXIg
bW9ycGhzID0gbmV3IEFycmF5KDEpOworICAgICAgICBtb3JwaHNbMF0gPSBkb20uY3JlYXRlTW9y
cGhBdChmcmFnbWVudCwgMCwgMCwgY29udGV4dHVhbEVsZW1lbnQpOworICAgICAgICBkb20uaW5z
ZXJ0Qm91bmRhcnkoZnJhZ21lbnQsIDApOworICAgICAgICBkb20uaW5zZXJ0Qm91bmRhcnkoZnJh
Z21lbnQsIG51bGwpOworICAgICAgICByZXR1cm4gbW9ycGhzOworICAgICAgfSwKKyAgICAgIHN0
YXRlbWVudHM6IFtbImNvbnRlbnQiLCAib3V0bGV0IiwgWyJsb2MiLCBbbnVsbCwgWzEsIDBdLCBb
MSwgMTBdXV1dXSwKKyAgICAgIGxvY2FsczogW10sCisgICAgICB0ZW1wbGF0ZXM6IFtdCisgICAg
fTsKKyAgfSkoKSk7Cit9KTsKK2VuaWZlZCgnZW1iZXItaHRtbGJhcnMvdXRpbHMvZGVjb2RlLWVh
Y2gta2V5JywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCcsICdlbWJlci1t
ZXRhbC91dGlscyddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQs
IF9lbWJlck1ldGFsVXRpbHMpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIGV4cG9ydHMuZGVmYXVs
dCA9IGRlY29kZUVhY2hLZXk7CisKKyAgZnVuY3Rpb24gaWRlbnRpdHkoaXRlbSkgeworICAgIHZh
ciBrZXkgPSB1bmRlZmluZWQ7CisgICAgdmFyIHR5cGUgPSB0eXBlb2YgaXRlbTsKKworICAgIGlm
ICh0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlID09PSAnbnVtYmVyJykgeworICAgICAga2V5ID0g
aXRlbTsKKyAgICB9IGVsc2UgeworICAgICAga2V5ID0gX2VtYmVyTWV0YWxVdGlscy5ndWlkRm9y
KGl0ZW0pOworICAgIH0KKworICAgIHJldHVybiBrZXk7CisgIH0KKworICBmdW5jdGlvbiBkZWNv
ZGVFYWNoS2V5KGl0ZW0sIGtleVBhdGgsIGluZGV4KSB7CisgICAgdmFyIGtleTsKKworICAgIHN3
aXRjaCAoa2V5UGF0aCkgeworICAgICAgY2FzZSAnQGluZGV4JzoKKyAgICAgICAga2V5ID0gaW5k
ZXg7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnQGlkZW50aXR5JzoKKyAgICAgICAga2V5
ID0gaWRlbnRpdHkoaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgaWYgKGtleVBhdGgpIHsKKyAgICAgICAgICBrZXkgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dl
dC5nZXQoaXRlbSwga2V5UGF0aCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAga2V5ID0g
aWRlbnRpdHkoaXRlbSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodHlwZW9mIGtleSA9
PT0gJ251bWJlcicpIHsKKyAgICAgIGtleSA9IFN0cmluZyhrZXkpOworICAgIH0KKworICAgIHJl
dHVybiBrZXk7CisgIH0KK30pOworZW5pZmVkKCdlbWJlci1odG1sYmFycy91dGlscy9leHRyYWN0
LXBvc2l0aW9uYWwtcGFyYW1zJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2Vt
YmVyLW1ldGFsL3N0cmVhbXMvc3RyZWFtJywgJ2VtYmVyLW1ldGFsL3N0cmVhbXMvdXRpbHMnXSwg
ZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsRGVidWcsIF9lbWJlck1ldGFsU3RyZWFtc1N0
cmVhbSwgX2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIGV4
cG9ydHMuZGVmYXVsdCA9IGV4dHJhY3RQb3NpdGlvbmFsUGFyYW1zOworICBleHBvcnRzLnByb2Nl
c3NQb3NpdGlvbmFsUGFyYW1zID0gcHJvY2Vzc1Bvc2l0aW9uYWxQYXJhbXM7CisKKyAgZnVuY3Rp
b24gZXh0cmFjdFBvc2l0aW9uYWxQYXJhbXMocmVuZGVyTm9kZSwgY29tcG9uZW50LCBwYXJhbXMs
IGF0dHJzKSB7CisgICAgdmFyIHJhaXNlQXNzZXJ0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPD0g
NCB8fCBhcmd1bWVudHNbNF0gPT09IHVuZGVmaW5lZCA/IHRydWUgOiBhcmd1bWVudHNbNF07CisK
KyAgICB2YXIgcG9zaXRpb25hbFBhcmFtcyA9IGNvbXBvbmVudC5wb3NpdGlvbmFsUGFyYW1zOwor
CisgICAgaWYgKHBvc2l0aW9uYWxQYXJhbXMpIHsKKyAgICAgIHByb2Nlc3NQb3NpdGlvbmFsUGFy
YW1zKHJlbmRlck5vZGUsIHBvc2l0aW9uYWxQYXJhbXMsIHBhcmFtcywgYXR0cnMsIHJhaXNlQXNz
ZXJ0aW9ucyk7CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gcHJvY2Vzc1Bvc2l0aW9uYWxQYXJh
bXMocmVuZGVyTm9kZSwgcG9zaXRpb25hbFBhcmFtcywgcGFyYW1zLCBhdHRycykgeworICAgIHZh
ciByYWlzZUFzc2VydGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDQgfHwgYXJndW1lbnRzWzRd
ID09PSB1bmRlZmluZWQgPyB0cnVlIDogYXJndW1lbnRzWzRdOworCisgICAgdmFyIGlzUmVzdCA9
IHR5cGVvZiBwb3NpdGlvbmFsUGFyYW1zID09PSAnc3RyaW5nJzsKKworICAgIGlmIChpc1Jlc3Qp
IHsKKyAgICAgIHByb2Nlc3NSZXN0UG9zaXRpb25hbFBhcmFtZXRlcnMocmVuZGVyTm9kZSwgcG9z
aXRpb25hbFBhcmFtcywgcGFyYW1zLCBhdHRycywgcmFpc2VBc3NlcnRpb25zKTsKKyAgICB9IGVs
c2UgeworICAgICAgcHJvY2Vzc05hbWVkUG9zaXRpb25hbFBhcmFtZXRlcnMocmVuZGVyTm9kZSwg
cG9zaXRpb25hbFBhcmFtcywgcGFyYW1zLCBhdHRycywgcmFpc2VBc3NlcnRpb25zKTsKKyAgICB9
CisgIH0KKworICBmdW5jdGlvbiBwcm9jZXNzTmFtZWRQb3NpdGlvbmFsUGFyYW1ldGVycyhyZW5k
ZXJOb2RlLCBwb3NpdGlvbmFsUGFyYW1zLCBwYXJhbXMsIGF0dHJzLCByYWlzZUFzc2VydGlvbnMp
IHsKKyAgICB2YXIgbGltaXQgPSBNYXRoLm1pbihwYXJhbXMubGVuZ3RoLCBwb3NpdGlvbmFsUGFy
YW1zLmxlbmd0aCk7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbWl0OyBpKyspIHsKKyAg
ICAgIHZhciBwYXJhbSA9IHBhcmFtc1tpXTsKKworICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3Nl
cnQoJ1lvdSBjYW5ub3Qgc3BlY2lmeSBib3RoIGEgcG9zaXRpb25hbCBwYXJhbSAoYXQgcG9zaXRp
b24gJyArIGkgKyAnKSBhbmQgdGhlIGhhc2ggYXJndW1lbnQgYCcgKyBwb3NpdGlvbmFsUGFyYW1z
W2ldICsgJ2AuJywgIShwb3NpdGlvbmFsUGFyYW1zW2ldIGluIGF0dHJzICYmIHJhaXNlQXNzZXJ0
aW9ucykpOworCisgICAgICBhdHRyc1twb3NpdGlvbmFsUGFyYW1zW2ldXSA9IHBhcmFtOworICAg
IH0KKyAgfQorCisgIGZ1bmN0aW9uIHByb2Nlc3NSZXN0UG9zaXRpb25hbFBhcmFtZXRlcnMocmVu
ZGVyTm9kZSwgcG9zaXRpb25hbFBhcmFtc05hbWUsIHBhcmFtcywgYXR0cnMsIHJhaXNlQXNzZXJ0
aW9ucykgeworICAgIHZhciBuYW1lSW5BdHRycyA9IChwb3NpdGlvbmFsUGFyYW1zTmFtZSBpbiBh
dHRycyk7CisKKyAgICAvLyB3aGVuIG5vIHBhcmFtcyBhcmUgdXNlZCwgZG8gbm90IG92ZXJyaWRl
IHRoZSBzcGVjaWZpZWQgYGF0dHJzLnN0cmluZ1BhcmFtTmFtZWAgdmFsdWUKKyAgICBpZiAocGFy
YW1zLmxlbmd0aCA9PT0gMCAmJiBuYW1lSW5BdHRycykgeworICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIC8vIElmIHRoZXJlIGlzIGFscmVhZHkgYW4gYXR0cmlidXRlIGZvciB0aGF0IHZhcmlh
YmxlLCBkbyBub3RoaW5nCisgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1lvdSBjYW5ub3Qg
c3BlY2lmeSBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgYW5kIHRoZSBoYXNoIGFyZ3VtZW50IGAnICsg
cG9zaXRpb25hbFBhcmFtc05hbWUgKyAnYC4nLCAhKG5hbWVJbkF0dHJzICYmIHJhaXNlQXNzZXJ0
aW9ucykpOworCisgICAgdmFyIHBhcmFtc1N0cmVhbSA9IG5ldyBfZW1iZXJNZXRhbFN0cmVhbXNT
dHJlYW0uU3RyZWFtKGZ1bmN0aW9uICgpIHsKKyAgICAgIHJldHVybiBfZW1iZXJNZXRhbFN0cmVh
bXNVdGlscy5yZWFkQXJyYXkocGFyYW1zLnNsaWNlKDApKTsKKyAgICB9LCAncGFyYW1zJyk7CisK
KyAgICBhdHRyc1twb3NpdGlvbmFsUGFyYW1zTmFtZV0gPSBwYXJhbXNTdHJlYW07CisKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykgeworICAgICAgdmFyIHBhcmFt
ID0gcGFyYW1zW2ldOworICAgICAgcGFyYW1zU3RyZWFtLmFkZERlcGVuZGVuY3kocGFyYW0pOwor
ICAgIH0KKyAgfQorfSk7CitlbmlmZWQoJ2VtYmVyLWh0bWxiYXJzL3V0aWxzL2lzLWNvbXBvbmVu
dCcsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9mZWF0dXJlcycsICdlbWJlci1odG1sYmFycy9z
eXN0ZW0vbG9va3VwLWhlbHBlcicsICdlbWJlci1odG1sYmFycy9rZXl3b3Jkcy9jbG9zdXJlLWNv
bXBvbmVudCcsICdlbWJlci1tZXRhbC9zdHJlYW1zL3V0aWxzJ10sIGZ1bmN0aW9uIChleHBvcnRz
LCBfZW1iZXJNZXRhbEZlYXR1cmVzLCBfZW1iZXJIdG1sYmFyc1N5c3RlbUxvb2t1cEhlbHBlciwg
X2VtYmVySHRtbGJhcnNLZXl3b3Jkc0Nsb3N1cmVDb21wb25lbnQsIF9lbWJlck1ldGFsU3RyZWFt
c1V0aWxzKSB7CisgIC8qKgorICBAbW9kdWxlIGVtYmVyCisgIEBzdWJtb2R1bGUgZW1iZXItaHRt
bGJhcnMKKyAgKi8KKworICAndXNlIHN0cmljdCc7CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gaXND
b21wb25lbnQ7CisKKyAgZnVuY3Rpb24gaGFzQ29tcG9uZW50T3JUZW1wbGF0ZShvd25lciwgcGF0
aCwgb3B0aW9ucykgeworICAgIHJldHVybiBvd25lci5oYXNSZWdpc3RyYXRpb24oJ2NvbXBvbmVu
dDonICsgcGF0aCwgb3B0aW9ucykgfHwgb3duZXIuaGFzUmVnaXN0cmF0aW9uKCd0ZW1wbGF0ZTpj
b21wb25lbnRzLycgKyBwYXRoLCBvcHRpb25zKTsKKyAgfQorCisgIC8qCisgICBHaXZlbiBhIHBh
dGggbmFtZSwgcmV0dXJucyB3aGV0aGVyIG9yIG5vdCBhIGNvbXBvbmVudCB3aXRoIHRoYXQKKyAg
IG5hbWUgd2FzIGZvdW5kIGluIHRoZSBjb250YWluZXIuCisgICovCisKKyAgZnVuY3Rpb24gaXND
b21wb25lbnQoZW52LCBzY29wZSwgcGF0aCkgeworICAgIHZhciBvd25lciA9IGVudi5vd25lcjsK
KyAgICBpZiAoIW93bmVyKSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICh0
eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycpIHsKKyAgICAgIGlmIChfZW1iZXJIdG1sYmFyc1N5c3Rl
bUxvb2t1cEhlbHBlci5DT05UQUlOU19ET1RfQ0FDSEUuZ2V0KHBhdGgpKSB7CisgICAgICAgIHZh
ciBzdHJlYW0gPSBlbnYuaG9va3MuZ2V0KGVudiwgc2NvcGUsIHBhdGgpOworICAgICAgICBpZiAo
X2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMuaXNTdHJlYW0oc3RyZWFtKSkgeworICAgICAgICAgIHZh
ciBjZWxsID0gc3RyZWFtLnZhbHVlKCk7CisgICAgICAgICAgaWYgKF9lbWJlckh0bWxiYXJzS2V5
d29yZHNDbG9zdXJlQ29tcG9uZW50LmlzQ29tcG9uZW50Q2VsbChjZWxsKSkgeworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgICBp
ZiAoIV9lbWJlckh0bWxiYXJzU3lzdGVtTG9va3VwSGVscGVyLkNPTlRBSU5TX0RBU0hfQ0FDSEUu
Z2V0KHBhdGgpKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKworICAgICAgaWYg
KGhhc0NvbXBvbmVudE9yVGVtcGxhdGUob3duZXIsIHBhdGgpKSB7CisgICAgICAgIHJldHVybiB0
cnVlOyAvLyBnbG9iYWwgY29tcG9uZW50IGZvdW5kCisgICAgICB9IGVsc2UgeworICAgICAgICAg
IHZhciBtb2R1bGVOYW1lID0gZW52Lm1ldGEgJiYgZW52Lm1ldGEubW9kdWxlTmFtZTsKKworICAg
ICAgICAgIGlmICghbW9kdWxlTmFtZSkgeworICAgICAgICAgICAgLy8gV2l0aG91dCBhIHNvdXJj
ZSBtb2R1bGVOYW1lLCB3ZSBjYW4gbm90IHBlcmZvcm0gbG9jYWwgbG9va3Vwcy4KKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICB2YXIgb3B0aW9ucyA9
IHsgc291cmNlOiAndGVtcGxhdGU6JyArIG1vZHVsZU5hbWUgfTsKKworICAgICAgICAgIHJldHVy
biBoYXNDb21wb25lbnRPclRlbXBsYXRlKG93bmVyLCBwYXRoLCBvcHRpb25zKTsKKyAgICAgICAg
fQorICAgIH0KKyAgfQorfSk7CitlbmlmZWQoJ2VtYmVyLWh0bWxiYXJzL3V0aWxzL2xvb2t1cC1j
b21wb25lbnQnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvZmVhdHVyZXMnXSwgZnVuY3Rpb24g
KGV4cG9ydHMsIF9lbWJlck1ldGFsRmVhdHVyZXMpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIGV4
cG9ydHMuZGVmYXVsdCA9IGxvb2t1cENvbXBvbmVudDsKKworICBmdW5jdGlvbiBsb29rdXBDb21w
b25lbnRQYWlyKGNvbXBvbmVudExvb2t1cCwgb3duZXIsIG5hbWUsIG9wdGlvbnMpIHsKKyAgICBy
ZXR1cm4geworICAgICAgY29tcG9uZW50OiBjb21wb25lbnRMb29rdXAuY29tcG9uZW50Rm9yKG5h
bWUsIG93bmVyLCBvcHRpb25zKSwKKyAgICAgIGxheW91dDogY29tcG9uZW50TG9va3VwLmxheW91
dEZvcihuYW1lLCBvd25lciwgb3B0aW9ucykKKyAgICB9OworICB9CisKKyAgZnVuY3Rpb24gbG9v
a3VwQ29tcG9uZW50KG93bmVyLCBuYW1lLCBvcHRpb25zKSB7CisgICAgdmFyIGNvbXBvbmVudExv
b2t1cCA9IG93bmVyLmxvb2t1cCgnY29tcG9uZW50LWxvb2t1cDptYWluJyk7CisKKyAgICB2YXIg
c291cmNlID0gb3B0aW9ucyAmJiBvcHRpb25zLnNvdXJjZTsKKworICAgIGlmIChzb3VyY2UpIHsK
KyAgICAgIHZhciBsb2NhbFJlc3VsdCA9IGxvb2t1cENvbXBvbmVudFBhaXIoY29tcG9uZW50TG9v
a3VwLCBvd25lciwgbmFtZSwgb3B0aW9ucyk7CisKKyAgICAgIGlmIChsb2NhbFJlc3VsdC5jb21w
b25lbnQgfHwgbG9jYWxSZXN1bHQubGF5b3V0KSB7CisgICAgICAgIHJldHVybiBsb2NhbFJlc3Vs
dDsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbG9va3VwQ29tcG9uZW50UGFpcihjb21w
b25lbnRMb29rdXAsIG93bmVyLCBuYW1lKTsKKyAgfQorfSk7CitlbmlmZWQoJ2VtYmVyLWh0bWxi
YXJzL3V0aWxzL25ldy1zdHJlYW0nLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvc3RyZWFtcy9w
cm94eS1zdHJlYW0nLCAnZW1iZXItaHRtbGJhcnMvdXRpbHMvc3Vic2NyaWJlJ10sIGZ1bmN0aW9u
IChleHBvcnRzLCBfZW1iZXJNZXRhbFN0cmVhbXNQcm94eVN0cmVhbSwgX2VtYmVySHRtbGJhcnNV
dGlsc1N1YnNjcmliZSkgeworICAndXNlIHN0cmljdCc7CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0g
bmV3U3RyZWFtOworCisgIGZ1bmN0aW9uIG5ld1N0cmVhbShzY29wZSwga2V5LCBuZXdWYWx1ZSwg
cmVuZGVyTm9kZSwgaXNTZWxmKSB7CisgICAgdmFyIHN0cmVhbSA9IG5ldyBfZW1iZXJNZXRhbFN0
cmVhbXNQcm94eVN0cmVhbS5kZWZhdWx0KG5ld1ZhbHVlLCBpc1NlbGYgPyAnJyA6IGtleSk7Cisg
ICAgaWYgKHJlbmRlck5vZGUpIHsKKyAgICAgIF9lbWJlckh0bWxiYXJzVXRpbHNTdWJzY3JpYmUu
ZGVmYXVsdChyZW5kZXJOb2RlLCBzY29wZSwgc3RyZWFtKTsKKyAgICB9CisgICAgc2NvcGVba2V5
XSA9IHN0cmVhbTsKKyAgfQorfSk7CitlbmlmZWQoImVtYmVyLWh0bWxiYXJzL3V0aWxzL25vcm1h
bGl6ZS1zZWxmIiwgWyJleHBvcnRzIl0sIGZ1bmN0aW9uIChleHBvcnRzKSB7CisgICJ1c2Ugc3Ry
aWN0IjsKKworICBleHBvcnRzLmRlZmF1bHQgPSBub3JtYWxpemVTZWxmOworCisgIGZ1bmN0aW9u
IG5vcm1hbGl6ZVNlbGYoc2VsZikgeworICAgIGlmIChzZWxmID09PSB1bmRlZmluZWQpIHsKKyAg
ICAgIHJldHVybiBudWxsOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gc2VsZjsKKyAgICB9
CisgIH0KK30pOworZW5pZmVkKCdlbWJlci1odG1sYmFycy91dGlscy9zdHJpbmcnLCBbJ2V4cG9y
dHMnLCAnZW1iZXItbWV0YWwvY29yZScsICdlbWJlci1ydW50aW1lL3N5c3RlbS9zdHJpbmcnLCAn
aHRtbGJhcnMtdXRpbCddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxDb3JlLCBfZW1i
ZXJSdW50aW1lU3lzdGVtU3RyaW5nLCBfaHRtbGJhcnNVdGlsKSB7CisgIC8qKgorICBAbW9kdWxl
IGVtYmVyCisgIEBzdWJtb2R1bGUgZW1iZXItaHRtbGJhcnMKKyAgKi8KKworICAndXNlIHN0cmlj
dCc7CisKKyAgLyoqCisgICAgTWFyayBhIHN0cmluZyBhcyBzYWZlIGZvciB1bmVzY2FwZWQgb3V0
cHV0IHdpdGggRW1iZXIgdGVtcGxhdGVzLiBJZiB5b3UKKyAgICByZXR1cm4gSFRNTCBmcm9tIGEg
aGVscGVyLCB1c2UgdGhpcyBmdW5jdGlvbiB0bworICAgIGVuc3VyZSBFbWJlcidzIHJlbmRlcmlu
ZyBsYXllciBkb2VzIG5vdCBlc2NhcGUgdGhlIEhUTUwuCisgIAorICAgIGBgYGphdmFzY3JpcHQK
KyAgICBFbWJlci5TdHJpbmcuaHRtbFNhZmUoJzxkaXY+c29tZVN0cmluZzwvZGl2PicpCisgICAg
YGBgCisgIAorICAgIEBtZXRob2QgaHRtbFNhZmUKKyAgICBAZm9yIEVtYmVyLlN0cmluZworICAg
IEBzdGF0aWMKKyAgICBAcmV0dXJuIHtIYW5kbGViYXJzLlNhZmVTdHJpbmd9IEEgc3RyaW5nIHRo
YXQgd2lsbCBub3QgYmUgSFRNTCBlc2NhcGVkIGJ5IEhhbmRsZWJhcnMuCisgICAgQHB1YmxpYwor
ICAqLworICBmdW5jdGlvbiBodG1sU2FmZShzdHIpIHsKKyAgICBpZiAoc3RyID09PSBudWxsIHx8
IHN0ciA9PT0gdW5kZWZpbmVkKSB7CisgICAgICBzdHIgPSAnJzsKKyAgICB9IGVsc2UgaWYgKHR5
cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7CisgICAgICBzdHIgPSAnJyArIHN0cjsKKyAgICB9Cisg
ICAgcmV0dXJuIG5ldyBfaHRtbGJhcnNVdGlsLlNhZmVTdHJpbmcoc3RyKTsKKyAgfQorCisgIF9l
bWJlclJ1bnRpbWVTeXN0ZW1TdHJpbmcuZGVmYXVsdC5odG1sU2FmZSA9IGh0bWxTYWZlOworICBp
ZiAoX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuRVhURU5EX1BST1RPVFlQRVMgPT09IHRydWUgfHwg
X2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuRVhURU5EX1BST1RPVFlQRVMuU3RyaW5nKSB7CisgICAg
U3RyaW5nLnByb3RvdHlwZS5odG1sU2FmZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgIHJldHVybiBo
dG1sU2FmZSh0aGlzKTsKKyAgICB9OworICB9CisKKyAgZXhwb3J0cy5TYWZlU3RyaW5nID0gX2h0
bWxiYXJzVXRpbC5TYWZlU3RyaW5nOworICBleHBvcnRzLmh0bWxTYWZlID0gaHRtbFNhZmU7Cisg
IGV4cG9ydHMuZXNjYXBlRXhwcmVzc2lvbiA9IF9odG1sYmFyc1V0aWwuZXNjYXBlRXhwcmVzc2lv
bjsKK30pOworZW5pZmVkKCdlbWJlci1odG1sYmFycy91dGlscy9zdWJzY3JpYmUnLCBbJ2V4cG9y
dHMnLCAnZW1iZXItbWV0YWwvc3RyZWFtcy91dGlscyddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2Vt
YmVyTWV0YWxTdHJlYW1zVXRpbHMpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIGV4cG9ydHMuZGVm
YXVsdCA9IHN1YnNjcmliZTsKKworICBmdW5jdGlvbiBzdWJzY3JpYmUobm9kZSwgZW52LCBzY29w
ZSwgc3RyZWFtKSB7CisgICAgaWYgKCFfZW1iZXJNZXRhbFN0cmVhbXNVdGlscy5pc1N0cmVhbShz
dHJlYW0pKSB7CisgICAgICByZXR1cm47CisgICAgfQorICAgIHZhciBjb21wb25lbnQgPSBzY29w
ZS5nZXRDb21wb25lbnQoKTsKKyAgICB2YXIgdW5zdWJzY3JpYmVycyA9IG5vZGUuc3RyZWFtVW5z
dWJzY3JpYmVycyA9IG5vZGUuc3RyZWFtVW5zdWJzY3JpYmVycyB8fCBbXTsKKworICAgIHVuc3Vi
c2NyaWJlcnMucHVzaChzdHJlYW0uc3Vic2NyaWJlKGZ1bmN0aW9uICgpIHsKKyAgICAgIG5vZGUu
aXNEaXJ0eSA9IHRydWU7CisKKyAgICAgIC8vIFdoZW5ldmVyIGEgcmVuZGVyIG5vZGUgZGlyZWN0
bHkgaW5zaWRlIGEgY29tcG9uZW50IGJlY29tZXMKKyAgICAgIC8vIGRpcnR5LCB3ZSB3YW50IHRv
IGludm9rZSB0aGUgd2lsbFJlbmRlckVsZW1lbnQgYW5kCisgICAgICAvLyBkaWRSZW5kZXJFbGVt
ZW50IGxpZmVjeWNsZSBob29rcy4gRnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgdGhlCisgICAgICAv
LyBwcm9ncmFtbWluZyBtb2RlbCwgd2hlbmV2ZXIgYW55dGhpbmcgaW4gdGhlIERPTSBjaGFuZ2Vz
LCBhCisgICAgICAvLyAicmUtcmVuZGVyIiBoYXMgb2NjdXJlZC4KKyAgICAgIGlmIChjb21wb25l
bnQgJiYgY29tcG9uZW50Ll9yZW5kZXJOb2RlKSB7CisgICAgICAgIGNvbXBvbmVudC5fcmVuZGVy
Tm9kZS5pc0RpcnR5ID0gdHJ1ZTsKKyAgICAgIH0KKworICAgICAgaWYgKG5vZGUuZ2V0U3RhdGUo
KS5tYW5hZ2VyKSB7CisgICAgICAgIG5vZGUuc2hvdWxkUmVjZWl2ZUF0dHJzID0gdHJ1ZTsKKyAg
ICAgIH0KKworICAgICAgbm9kZS5vd25lck5vZGUuZW1iZXJWaWV3LnNjaGVkdWxlUmV2YWxpZGF0
ZShub2RlLCBfZW1iZXJNZXRhbFN0cmVhbXNVdGlscy5sYWJlbEZvcihzdHJlYW0pKTsKKyAgICB9
KSk7CisgIH0KK30pOworZW5pZmVkKCdlbWJlci1odG1sYmFycy91dGlscy91cGRhdGUtc2NvcGUn
LCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvc3RyZWFtcy9wcm94eS1zdHJlYW0nLCAnZW1iZXIt
aHRtbGJhcnMvdXRpbHMvc3Vic2NyaWJlJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRh
bFN0cmVhbXNQcm94eVN0cmVhbSwgX2VtYmVySHRtbGJhcnNVdGlsc1N1YnNjcmliZSkgeworICAn
dXNlIHN0cmljdCc7CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gdXBkYXRlU2NvcGU7CisKKyAgZnVu
Y3Rpb24gdXBkYXRlU2NvcGUoc2NvcGUsIGtleSwgbmV3VmFsdWUsIHJlbmRlck5vZGUsIGlzU2Vs
ZikgeworICAgIHZhciBleGlzdGluZyA9IHNjb3BlW2tleV07CisKKyAgICBpZiAoZXhpc3Rpbmcp
IHsKKyAgICAgIGV4aXN0aW5nLnNldFNvdXJjZShuZXdWYWx1ZSk7CisgICAgfSBlbHNlIHsKKyAg
ICAgIHZhciBzdHJlYW0gPSBuZXcgX2VtYmVyTWV0YWxTdHJlYW1zUHJveHlTdHJlYW0uZGVmYXVs
dChuZXdWYWx1ZSwgaXNTZWxmID8gbnVsbCA6IGtleSk7CisgICAgICBpZiAocmVuZGVyTm9kZSkg
eworICAgICAgICBfZW1iZXJIdG1sYmFyc1V0aWxzU3Vic2NyaWJlLmRlZmF1bHQocmVuZGVyTm9k
ZSwgc2NvcGUsIHN0cmVhbSk7CisgICAgICB9CisgICAgICBzY29wZVtrZXldID0gc3RyZWFtOwor
ICAgIH0KKyAgfQorfSk7CitlbmlmZWQoJ2VtYmVyLW1ldGFsLXZpZXdzL2h0bWxiYXJzLXJlbmRl
cmVyJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL3J1bl9sb29wJywgJ2VtYmVyLW1ldGFsL3By
b3BlcnR5X2dldCcsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9zZXQnLCAnZW1iZXItbWV0YWwvYXNz
aWduJywgJ2VtYmVyLW1ldGFsL3NldF9wcm9wZXJ0aWVzJywgJ2VtYmVyLXZpZXdzL3N5c3RlbS9i
dWlsZC1jb21wb25lbnQtdGVtcGxhdGUnLCAnZW1iZXItbWV0YWwvZW52aXJvbm1lbnQnLCAnaHRt
bGJhcnMtcnVudGltZSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxSdW5fbG9vcCwg
X2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQsIF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LCBfZW1iZXJN
ZXRhbEFzc2lnbiwgX2VtYmVyTWV0YWxTZXRfcHJvcGVydGllcywgX2VtYmVyVmlld3NTeXN0ZW1C
dWlsZENvbXBvbmVudFRlbXBsYXRlLCBfZW1iZXJNZXRhbEVudmlyb25tZW50LCBfaHRtbGJhcnNS
dW50aW1lKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICBleHBvcnRzLlJlbmRlcmVyID0gUmVuZGVy
ZXI7CisgIGV4cG9ydHMuTW9ycGhTZXQgPSBNb3JwaFNldDsKKworICBmdW5jdGlvbiBSZW5kZXJl
cihkb21IZWxwZXIpIHsKKyAgICB2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMSB8fCBh
cmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IHt9IDogYXJndW1lbnRzWzFdOworCisgICAgdmFy
IGRlc3RpbmVkRm9yRE9NID0gX3JlZi5kZXN0aW5lZEZvckRPTTsKKworICAgIHRoaXMuX2RvbSA9
IGRvbUhlbHBlcjsKKworICAgIC8vIFRoaXMgZmxhZyBpbmRpY2F0ZXMgd2hldGhlciB0aGUgcmVz
dWx0aW5nIHJlbmRlcmVkIGVsZW1lbnQgd2lsbCBiZQorICAgIC8vIGluc2VydGVkIGludG8gdGhl
IERPTS4gVGhpcyBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAgaWYgdGhlIHJlbmRlcmVkCisgICAg
Ly8gZWxlbWVudCBpcyBnb2luZyB0byBiZSBzZXJpYWxpemVkIHRvIEhUTUwgd2l0aG91dCBiZWlu
ZyBpbnNlcnRlZCBpbnRvCisgICAgLy8gdGhlIERPTSAoZS5nLiwgaW4gRmFzdEJvb3QgbW9kZSku
IEJ5IGRlZmF1bHQsIHRoaXMgZmxhZyBpcyB0aGUgc2FtZQorICAgIC8vIGFzIHdoZXRoZXIgd2Ug
YXJlIHJ1bm5pbmcgaW4gYW4gZW52aXJvbm1lbnQgd2l0aCBET00sIGJ1dCBtYXkgYmUKKyAgICAv
LyBvdmVycmlkZGVuLgorICAgIHRoaXMuX2Rlc3RpbmVkRm9yRE9NID0gZGVzdGluZWRGb3JET00g
PT09IHVuZGVmaW5lZCA/IF9lbWJlck1ldGFsRW52aXJvbm1lbnQuZGVmYXVsdC5oYXNET00gOiBk
ZXN0aW5lZEZvckRPTTsKKyAgfQorCisgIFJlbmRlcmVyLnByb3RvdHlwZS5wcmVyZW5kZXJUb3BM
ZXZlbFZpZXcgPSBmdW5jdGlvbiBSZW5kZXJlcl9wcmVyZW5kZXJUb3BMZXZlbFZpZXcodmlldywg
cmVuZGVyTm9kZSkgeworICAgIGlmICh2aWV3Ll9zdGF0ZSA9PT0gJ2luRE9NJykgeworICAgICAg
dGhyb3cgbmV3IEVycm9yKCdZb3UgY2Fubm90IGluc2VydCBhIFZpZXcgdGhhdCBoYXMgYWxyZWFk
eSBiZWVuIHJlbmRlcmVkJyk7CisgICAgfQorICAgIHZpZXcub3duZXJWaWV3ID0gcmVuZGVyTm9k
ZS5lbWJlclZpZXcgPSB2aWV3OworICAgIHZpZXcuX3JlbmRlck5vZGUgPSByZW5kZXJOb2RlOwor
CisgICAgdmFyIGxheW91dCA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh2aWV3LCAnbGF5
b3V0Jyk7CisgICAgdmFyIHRlbXBsYXRlID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHZp
ZXcsICd0ZW1wbGF0ZScpOworCisgICAgdmFyIGNvbXBvbmVudEluZm8gPSB7IGNvbXBvbmVudDog
dmlldywgbGF5b3V0OiBsYXlvdXQgfTsKKworICAgIHZhciBibG9jayA9IF9lbWJlclZpZXdzU3lz
dGVtQnVpbGRDb21wb25lbnRUZW1wbGF0ZS5kZWZhdWx0KGNvbXBvbmVudEluZm8sIHt9LCB7Cisg
ICAgICBzZWxmOiB2aWV3LAorICAgICAgdGVtcGxhdGVzOiB0ZW1wbGF0ZSA/IHsgZGVmYXVsdDog
dGVtcGxhdGUucmF3IH0gOiB1bmRlZmluZWQKKyAgICB9KS5ibG9jazsKKworICAgIHZpZXcucmVu
ZGVyQmxvY2soYmxvY2ssIHJlbmRlck5vZGUpOworICAgIHZpZXcubGFzdFJlc3VsdCA9IHJlbmRl
ck5vZGUubGFzdFJlc3VsdDsKKyAgICB0aGlzLmNsZWFyUmVuZGVyZWRWaWV3cyh2aWV3LmVudik7
CisgIH07CisKKyAgUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlclRvcExldmVsVmlldyA9IGZ1bmN0
aW9uIFJlbmRlcmVyX3JlbmRlclRvcExldmVsVmlldyh2aWV3LCByZW5kZXJOb2RlKSB7CisgICAg
Ly8gQ2hlY2sgdG8gc2VlIGlmIGluc2VydGlvbiBoYXMgYmVlbiBjYW5jZWxlZC4KKyAgICBpZiAo
dmlldy5fd2lsbEluc2VydCkgeworICAgICAgdmlldy5fd2lsbEluc2VydCA9IGZhbHNlOworICAg
ICAgdGhpcy5wcmVyZW5kZXJUb3BMZXZlbFZpZXcodmlldywgcmVuZGVyTm9kZSk7CisgICAgICB0
aGlzLmRpc3BhdGNoTGlmZWN5Y2xlSG9va3Modmlldy5lbnYpOworICAgIH0KKyAgfTsKKworICBS
ZW5kZXJlci5wcm90b3R5cGUucmV2YWxpZGF0ZVRvcExldmVsVmlldyA9IGZ1bmN0aW9uIFJlbmRl
cmVyX3JldmFsaWRhdGVUb3BMZXZlbFZpZXcodmlldykgeworICAgIC8vIFRoaXMgZ3VhcmQgcHJl
dmVudHMgcmV2YWxpZGF0aW9uIG9uIGFuIGFscmVhZHktZGVzdHJveWVkIHZpZXcuCisgICAgaWYg
KHZpZXcuX3JlbmRlck5vZGUubGFzdFJlc3VsdCkgeworICAgICAgdmlldy5fcmVuZGVyTm9kZS5s
YXN0UmVzdWx0LnJldmFsaWRhdGUodmlldy5lbnYpOworICAgICAgLy8gc3VwcG9ydHMgY3JlYXRl
RWxlbWVudCwgd2hpY2ggb3BlcmF0ZXMgd2l0aG91dCBtb3ZpbmcgdGhlIHZpZXcgaW50bworICAg
ICAgLy8gdGhlIGluRE9NIHN0YXRlLgorICAgICAgaWYgKHZpZXcuX3N0YXRlID09PSAnaW5ET00n
KSB7CisgICAgICAgIHRoaXMuZGlzcGF0Y2hMaWZlY3ljbGVIb29rcyh2aWV3LmVudik7CisgICAg
ICB9CisgICAgICB0aGlzLmNsZWFyUmVuZGVyZWRWaWV3cyh2aWV3LmVudik7CisgICAgfQorICB9
OworCisgIFJlbmRlcmVyLnByb3RvdHlwZS5kaXNwYXRjaExpZmVjeWNsZUhvb2tzID0gZnVuY3Rp
b24gUmVuZGVyZXJfZGlzcGF0Y2hMaWZlY3ljbGVIb29rcyhlbnYpIHsKKyAgICB2YXIgb3duZXJW
aWV3ID0gZW52LnZpZXc7CisKKyAgICB2YXIgbGlmZWN5Y2xlSG9va3MgPSBlbnYubGlmZWN5Y2xl
SG9va3M7CisgICAgdmFyIGksIGhvb2s7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGlmZWN5Y2xl
SG9va3MubGVuZ3RoOyBpKyspIHsKKyAgICAgIGhvb2sgPSBsaWZlY3ljbGVIb29rc1tpXTsKKyAg
ICAgIG93bmVyVmlldy5fZGlzcGF0Y2hpbmcgPSBob29rLnR5cGU7CisKKyAgICAgIHN3aXRjaCAo
aG9vay50eXBlKSB7CisgICAgICAgIGNhc2UgJ2RpZEluc2VydEVsZW1lbnQnOgorICAgICAgICAg
IHRoaXMuZGlkSW5zZXJ0RWxlbWVudChob29rLnZpZXcpO2JyZWFrOworICAgICAgICBjYXNlICdk
aWRVcGRhdGUnOgorICAgICAgICAgIHRoaXMuZGlkVXBkYXRlKGhvb2sudmlldyk7YnJlYWs7Cisg
ICAgICB9CisKKyAgICAgIHRoaXMuZGlkUmVuZGVyKGhvb2sudmlldyk7CisgICAgfQorCisgICAg
b3duZXJWaWV3Ll9kaXNwYXRjaGluZyA9IG51bGw7CisgICAgZW52LmxpZmVjeWNsZUhvb2tzLmxl
bmd0aCA9IDA7CisgIH07CisKKyAgUmVuZGVyZXIucHJvdG90eXBlLmVuc3VyZVZpZXdOb3RSZW5k
ZXJpbmcgPSBmdW5jdGlvbiBSZW5kZXJlcl9lbnN1cmVWaWV3Tm90UmVuZGVyaW5nKHZpZXcpIHsK
KyAgICB2YXIgZW52ID0gdmlldy5vd25lclZpZXcuZW52OworICAgIGlmIChlbnYgJiYgZW52LnJl
bmRlcmVkVmlld3MuaW5kZXhPZih2aWV3LmVsZW1lbnRJZCkgIT09IC0xKSB7CisgICAgICB0aHJv
dyBuZXcgRXJyb3IoJ1NvbWV0aGluZyB5b3UgZGlkIGNhdXNlZCBhIHZpZXcgdG8gcmUtcmVuZGVy
IGFmdGVyIGl0IHJlbmRlcmVkIGJ1dCBiZWZvcmUgaXQgd2FzIGluc2VydGVkIGludG8gdGhlIERP
TS4nKTsKKyAgICB9CisgIH07CisKKyAgZnVuY3Rpb24gTW9ycGhTZXQoKSB7CisgICAgdGhpcy5t
b3JwaHMgPSBbXTsKKyAgfQorCisgIE1vcnBoU2V0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAo
bW9ycGgpIHsKKyAgICB0aGlzLm1vcnBocy5wdXNoKG1vcnBoKTsKKyAgICBtb3JwaC5zZWVuID0g
dHJ1ZTsKKyAgfTsKKworICBNb3JwaFNldC5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gKG1vcnBo
KSB7CisgICAgcmV0dXJuIG1vcnBoLnNlZW47CisgIH07CisKKyAgTW9ycGhTZXQucHJvdG90eXBl
LmNsZWFyID0gZnVuY3Rpb24gKCkgeworICAgIHZhciBtb3JwaHMgPSB0aGlzLm1vcnBoczsKKyAg
ICBmb3IgKHZhciBpID0gMCwgbCA9IG1vcnBocy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKKyAgICAg
IG1vcnBoc1tpXS5zZWVuID0gZmFsc2U7CisgICAgfQorCisgICAgdGhpcy5tb3JwaHMgPSBbXTsK
KyAgfTsKKworICBSZW5kZXJlci5wcm90b3R5cGUuY2xlYXJSZW5kZXJlZFZpZXdzID0gZnVuY3Rp
b24gUmVuZGVyZXJfY2xlYXJSZW5kZXJlZFZpZXdzKGVudikgeworICAgIGVudi5yZW5kZXJlZE5v
ZGVzLmNsZWFyKCk7CisgICAgZW52LnJlbmRlcmVkVmlld3MubGVuZ3RoID0gMDsKKyAgfTsKKwor
ICAvLyBUaGlzIGVudHJ5IHBvaW50IGlzIGNhbGxlZCBmcm9tIHRvcC1sZXZlbCBgdmlldy5hcHBl
bmRUb2AuCisgIFJlbmRlcmVyLnByb3RvdHlwZS5hcHBlbmRUbyA9IGZ1bmN0aW9uIFJlbmRlcmVy
X2FwcGVuZFRvKHZpZXcsIHRhcmdldCkgeworICAgIHZhciBtb3JwaCA9IHRoaXMuX2RvbS5hcHBl
bmRNb3JwaCh0YXJnZXQpOworICAgIG1vcnBoLm93bmVyTm9kZSA9IG1vcnBoOworICAgIHZpZXcu
X3dpbGxJbnNlcnQgPSB0cnVlOworICAgIF9lbWJlck1ldGFsUnVuX2xvb3AuZGVmYXVsdC5zY2hl
ZHVsZSgncmVuZGVyJywgdGhpcywgdGhpcy5yZW5kZXJUb3BMZXZlbFZpZXcsIHZpZXcsIG1vcnBo
KTsKKyAgfTsKKworICBSZW5kZXJlci5wcm90b3R5cGUucmVwbGFjZUluID0gZnVuY3Rpb24gUmVu
ZGVyZXJfcmVwbGFjZUluKHZpZXcsIHRhcmdldCkgeworICAgIHZhciBtb3JwaCA9IHRoaXMuX2Rv
bS5yZXBsYWNlQ29udGVudFdpdGhNb3JwaCh0YXJnZXQpOworICAgIG1vcnBoLm93bmVyTm9kZSA9
IG1vcnBoOworICAgIHZpZXcuX3dpbGxJbnNlcnQgPSB0cnVlOworICAgIF9lbWJlck1ldGFsUnVu
X2xvb3AuZGVmYXVsdC5zY2hlZHVsZU9uY2UoJ3JlbmRlcicsIHRoaXMsIHRoaXMucmVuZGVyVG9w
TGV2ZWxWaWV3LCB2aWV3LCBtb3JwaCk7CisgIH07CisKKyAgUmVuZGVyZXIucHJvdG90eXBlLmNy
ZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbiBSZW5kZXJlcl9jcmVhdGVFbGVtZW50KHZpZXcpIHsKKyAg
ICB2YXIgbW9ycGggPSB0aGlzLl9kb20uY3JlYXRlRnJhZ21lbnRNb3JwaCgpOworICAgIG1vcnBo
Lm93bmVyTm9kZSA9IG1vcnBoOworICAgIHRoaXMucHJlcmVuZGVyVG9wTGV2ZWxWaWV3KHZpZXcs
IG1vcnBoKTsKKyAgfTsKKworICBSZW5kZXJlci5wcm90b3R5cGUuZGlkQ3JlYXRlRWxlbWVudCA9
IGZ1bmN0aW9uICh2aWV3LCBlbGVtZW50KSB7CisgICAgaWYgKGVsZW1lbnQpIHsKKyAgICAgIHZp
ZXcuZWxlbWVudCA9IGVsZW1lbnQ7CisgICAgfQorCisgICAgaWYgKHZpZXcuX3RyYW5zaXRpb25U
bykgeworICAgICAgdmlldy5fdHJhbnNpdGlvblRvKCdoYXNFbGVtZW50Jyk7CisgICAgfQorICB9
OyAvLyBoYXNFbGVtZW50CisKKyAgUmVuZGVyZXIucHJvdG90eXBlLndpbGxJbnNlcnRFbGVtZW50
ID0gZnVuY3Rpb24gKHZpZXcpIHsKKyAgICBpZiAodmlldy50cmlnZ2VyKSB7CisgICAgICB2aWV3
LnRyaWdnZXIoJ3dpbGxJbnNlcnRFbGVtZW50Jyk7CisgICAgfQorICB9OyAvLyBXaWxsIHBsYWNl
IGludG8gRE9NLgorCisgIFJlbmRlcmVyLnByb3RvdHlwZS5zZXRBdHRycyA9IGZ1bmN0aW9uICh2
aWV3LCBhdHRycykgeworICAgIF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LnNldCh2aWV3LCAnYXR0
cnMnLCBhdHRycyk7CisgIH07IC8vIFNldCBhdHRycyB0aGUgZmlyc3QgdGltZS4KKworICBSZW5k
ZXJlci5wcm90b3R5cGUuY29tcG9uZW50SW5pdEF0dHJzID0gZnVuY3Rpb24gKGNvbXBvbmVudCwg
YXR0cnMpIHsKKyAgICBjb21wb25lbnQudHJpZ2dlcignZGlkSW5pdEF0dHJzJywgeyBhdHRyczog
YXR0cnMgfSk7CisgICAgY29tcG9uZW50LnRyaWdnZXIoJ2RpZFJlY2VpdmVBdHRycycsIHsgbmV3
QXR0cnM6IGF0dHJzIH0pOworICB9OyAvLyBTZXQgYXR0cnMgdGhlIGZpcnN0IHRpbWUuCisKKyAg
UmVuZGVyZXIucHJvdG90eXBlLmRpZEluc2VydEVsZW1lbnQgPSBmdW5jdGlvbiAodmlldykgewor
ICAgIGlmICh2aWV3Ll90cmFuc2l0aW9uVG8pIHsKKyAgICAgIHZpZXcuX3RyYW5zaXRpb25Ubygn
aW5ET00nKTsKKyAgICB9CisKKyAgICBpZiAodmlldy50cmlnZ2VyKSB7CisgICAgICB2aWV3LnRy
aWdnZXIoJ2RpZEluc2VydEVsZW1lbnQnKTsKKyAgICB9CisgIH07IC8vIGluRE9NIC8vIFBsYWNl
ZCBpbnRvIERPTS4KKworICBSZW5kZXJlci5wcm90b3R5cGUuZGlkVXBkYXRlID0gZnVuY3Rpb24g
KHZpZXcpIHsKKyAgICBpZiAodmlldy50cmlnZ2VyKSB7CisgICAgICB2aWV3LnRyaWdnZXIoJ2Rp
ZFVwZGF0ZScpOworICAgIH0KKyAgfTsKKworICBSZW5kZXJlci5wcm90b3R5cGUuZGlkUmVuZGVy
ID0gZnVuY3Rpb24gKHZpZXcpIHsKKyAgICBpZiAodmlldy50cmlnZ2VyKSB7CisgICAgICB2aWV3
LnRyaWdnZXIoJ2RpZFJlbmRlcicpOworICAgIH0KKyAgfTsKKworICBSZW5kZXJlci5wcm90b3R5
cGUudXBkYXRlQXR0cnMgPSBmdW5jdGlvbiAodmlldywgYXR0cnMpIHsKKyAgICB0aGlzLnNldEF0
dHJzKHZpZXcsIGF0dHJzKTsKKyAgfTsgLy8gU2V0dGluZyBuZXcgYXR0cnMuCisKKyAgUmVuZGVy
ZXIucHJvdG90eXBlLmNvbXBvbmVudFVwZGF0ZUF0dHJzID0gZnVuY3Rpb24gKGNvbXBvbmVudCwg
bmV3QXR0cnMpIHsKKyAgICB2YXIgb2xkQXR0cnMgPSBudWxsOworCisgICAgaWYgKGNvbXBvbmVu
dC5hdHRycykgeworICAgICAgb2xkQXR0cnMgPSBfZW1iZXJNZXRhbEFzc2lnbi5kZWZhdWx0KHt9
LCBjb21wb25lbnQuYXR0cnMpOworICAgICAgX2VtYmVyTWV0YWxTZXRfcHJvcGVydGllcy5kZWZh
dWx0KGNvbXBvbmVudC5hdHRycywgbmV3QXR0cnMpOworICAgIH0gZWxzZSB7CisgICAgICBfZW1i
ZXJNZXRhbFByb3BlcnR5X3NldC5zZXQoY29tcG9uZW50LCAnYXR0cnMnLCBuZXdBdHRycyk7Cisg
ICAgfQorCisgICAgY29tcG9uZW50LnRyaWdnZXIoJ2RpZFVwZGF0ZUF0dHJzJywgeyBvbGRBdHRy
czogb2xkQXR0cnMsIG5ld0F0dHJzOiBuZXdBdHRycyB9KTsKKyAgICBjb21wb25lbnQudHJpZ2dl
cignZGlkUmVjZWl2ZUF0dHJzJywgeyBvbGRBdHRyczogb2xkQXR0cnMsIG5ld0F0dHJzOiBuZXdB
dHRycyB9KTsKKyAgfTsKKworICBSZW5kZXJlci5wcm90b3R5cGUud2lsbFVwZGF0ZSA9IGZ1bmN0
aW9uICh2aWV3LCBhdHRycykgeworICAgIGlmICh2aWV3Ll93aWxsVXBkYXRlKSB7CisgICAgICB2
aWV3Ll93aWxsVXBkYXRlKGF0dHJzKTsKKyAgICB9CisgIH07CisKKyAgUmVuZGVyZXIucHJvdG90
eXBlLmNvbXBvbmVudFdpbGxVcGRhdGUgPSBmdW5jdGlvbiAoY29tcG9uZW50KSB7CisgICAgY29t
cG9uZW50LnRyaWdnZXIoJ3dpbGxVcGRhdGUnKTsKKyAgfTsKKworICBSZW5kZXJlci5wcm90b3R5
cGUud2lsbFJlbmRlciA9IGZ1bmN0aW9uICh2aWV3KSB7CisgICAgaWYgKHZpZXcuX3dpbGxSZW5k
ZXIpIHsKKyAgICAgIHZpZXcuX3dpbGxSZW5kZXIoKTsKKyAgICB9CisgIH07CisKKyAgUmVuZGVy
ZXIucHJvdG90eXBlLmNvbXBvbmVudFdpbGxSZW5kZXIgPSBmdW5jdGlvbiAoY29tcG9uZW50KSB7
CisgICAgY29tcG9uZW50LnRyaWdnZXIoJ3dpbGxSZW5kZXInKTsKKyAgfTsKKworICBSZW5kZXJl
ci5wcm90b3R5cGUucmVyZW5kZXIgPSBmdW5jdGlvbiAodmlldykgeworICAgIHZhciByZW5kZXJO
b2RlID0gdmlldy5fcmVuZGVyTm9kZTsKKworICAgIHJlbmRlck5vZGUuaXNEaXJ0eSA9IHRydWU7
CisgICAgX2h0bWxiYXJzUnVudGltZS5pbnRlcm5hbC52aXNpdENoaWxkcmVuKHJlbmRlck5vZGUu
Y2hpbGROb2RlcywgZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAgIGlmIChub2RlLmdldFN0YXRlKCku
bWFuYWdlcikgeworICAgICAgICBub2RlLnNob3VsZFJlY2VpdmVBdHRycyA9IHRydWU7CisgICAg
ICB9CisgICAgICBub2RlLmlzRGlydHkgPSB0cnVlOworICAgIH0pOworCisgICAgcmVuZGVyTm9k
ZS5vd25lck5vZGUuZW1iZXJWaWV3LnNjaGVkdWxlUmV2YWxpZGF0ZShyZW5kZXJOb2RlLCB2aWV3
LnRvU3RyaW5nKCksICdyZXJlbmRlcmluZycpOworICB9OworCisgIFJlbmRlcmVyLnByb3RvdHlw
ZS5yZW1vdmUgPSBmdW5jdGlvbiAodmlldywgc2hvdWxkRGVzdHJveSkgeworICAgIHRoaXMud2ls
bERlc3Ryb3lFbGVtZW50KHZpZXcpOworCisgICAgdmlldy5fd2lsbFJlbW92ZUVsZW1lbnQgPSB0
cnVlOworICAgIF9lbWJlck1ldGFsUnVuX2xvb3AuZGVmYXVsdC5zY2hlZHVsZSgncmVuZGVyJywg
dGhpcywgdGhpcy5yZW5kZXJFbGVtZW50UmVtb3ZhbCwgdmlldyk7CisgIH07CisKKyAgUmVuZGVy
ZXIucHJvdG90eXBlLnJlbmRlckVsZW1lbnRSZW1vdmFsID0gZnVuY3Rpb24gUmVuZGVyZXJfcmVu
ZGVyRWxlbWVudFJlbW92YWwodmlldykgeworICAgIC8vIFVzZSB0aGUgX3dpbGxSZW1vdmVFbGVt
ZW50IGZsYWcgdG8gYXZvaWQgbXVsaXRwbGUgcmVtb3ZhbCBhdHRlbXB0cyBpbgorICAgIC8vIGNh
c2UgbWFueSBoYXZlIGJlZW4gc2NoZWR1bGVkLiBUaGlzIHNob3VsZCBiZSBtb3JlIHBlcmZvcm1h
bnQgdGhhbiB1c2luZworICAgIC8vIGBzY2hlZHVsZU9uY2VgLgorICAgIGlmICh2aWV3Ll93aWxs
UmVtb3ZlRWxlbWVudCkgeworICAgICAgdmlldy5fd2lsbFJlbW92ZUVsZW1lbnQgPSBmYWxzZTsK
KworICAgICAgaWYgKHZpZXcuX3JlbmRlck5vZGUgJiYgdmlldy5lbGVtZW50ICYmIHZpZXcuZWxl
bWVudC5wYXJlbnROb2RlKSB7CisgICAgICAgIHZpZXcuX3JlbmRlck5vZGUuY2xlYXIoKTsKKyAg
ICAgIH0KKyAgICAgIHRoaXMuZGlkRGVzdHJveUVsZW1lbnQodmlldyk7CisgICAgfQorICB9Owor
CisgIFJlbmRlcmVyLnByb3RvdHlwZS53aWxsUmVtb3ZlRWxlbWVudCA9IGZ1bmN0aW9uICgpIC8q
dmlldyove307CisKKyAgUmVuZGVyZXIucHJvdG90eXBlLndpbGxEZXN0cm95RWxlbWVudCA9IGZ1
bmN0aW9uICh2aWV3KSB7CisgICAgaWYgKHZpZXcuX3dpbGxEZXN0cm95RWxlbWVudCkgeworICAg
ICAgdmlldy5fd2lsbERlc3Ryb3lFbGVtZW50KCk7CisgICAgfQorICAgIGlmICh2aWV3LnRyaWdn
ZXIpIHsKKyAgICAgIHZpZXcudHJpZ2dlcignd2lsbERlc3Ryb3lFbGVtZW50Jyk7CisgICAgICB2
aWV3LnRyaWdnZXIoJ3dpbGxDbGVhclJlbmRlcicpOworICAgIH0KKworICAgIGlmICh2aWV3Ll90
cmFuc2l0aW9uVG8pIHsKKyAgICAgIHZpZXcuX3RyYW5zaXRpb25UbygnZGVzdHJveWluZycpOwor
ICAgIH0KKyAgfTsKKworICBSZW5kZXJlci5wcm90b3R5cGUuZGlkRGVzdHJveUVsZW1lbnQgPSBm
dW5jdGlvbiAodmlldykgeworICAgIHZpZXcuZWxlbWVudCA9IG51bGw7CisKKyAgICAvLyBWaWV3
cyB0aGF0IGFyZSBiZWluZyBkZXN0cm95ZWQgc2hvdWxkIG5ldmVyIGdvIGJhY2sgdG8gdGhlIHBy
ZVJlbmRlciBzdGF0ZS4KKyAgICAvLyBIb3dldmVyIGlmIHdlJ3JlIGp1c3QgZGVzdHJveWluZyBh
biBlbGVtZW50IG9uIGEgdmlldyAoYXMgaXMgdGhlIGNhc2Ugd2hlbgorICAgIC8vIHVzaW5nIFZp
ZXcjcmVtb3ZlKSB0aGVuIHRoZSB2aWV3IHNob3VsZCBnbyB0byBhIHByZVJlbmRlciBzdGF0ZSBz
byB0aGF0CisgICAgLy8gaXQgY2FuIGJlIHJlbmRlcmVkIGFnYWluIGxhdGVyLgorICAgIGlmICh2
aWV3Ll9zdGF0ZSAhPT0gJ2Rlc3Ryb3lpbmcnICYmIHZpZXcuX3RyYW5zaXRpb25UbykgeworICAg
ICAgdmlldy5fdHJhbnNpdGlvblRvKCdwcmVSZW5kZXInKTsKKyAgICB9CisKKyAgICBpZiAodmll
dy50cmlnZ2VyKSB7CisgICAgICB2aWV3LnRyaWdnZXIoJ2RpZERlc3Ryb3lFbGVtZW50Jyk7Cisg
ICAgfQorICB9OyAvLyBFbGVtZW50IGRlc3Ryb3llZCBzbyB2aWV3LmRlc3Ryb3kgc2hvdWxkbid0
IHRyeSB0byByZW1vdmUgaXQgcmVtb3ZlZEZyb21ET00KKworICB2YXIgSW5lcnRSZW5kZXJlciA9
IHsKKyAgICBjcmVhdGU6IGZ1bmN0aW9uIChfcmVmMikgeworICAgICAgdmFyIGRvbSA9IF9yZWYy
LmRvbTsKKworICAgICAgcmV0dXJuIG5ldyBSZW5kZXJlcihkb20sIHsgZGVzdGluZWRGb3JET006
IGZhbHNlIH0pOworICAgIH0KKyAgfTsKKworICBleHBvcnRzLkluZXJ0UmVuZGVyZXIgPSBJbmVy
dFJlbmRlcmVyOworICB2YXIgSW50ZXJhY3RpdmVSZW5kZXJlciA9IHsKKyAgICBjcmVhdGU6IGZ1
bmN0aW9uIChfcmVmMykgeworICAgICAgdmFyIGRvbSA9IF9yZWYzLmRvbTsKKworICAgICAgcmV0
dXJuIG5ldyBSZW5kZXJlcihkb20sIHsgZGVzdGluZWRGb3JET006IHRydWUgfSk7CisgICAgfQor
ICB9OworICBleHBvcnRzLkludGVyYWN0aXZlUmVuZGVyZXIgPSBJbnRlcmFjdGl2ZVJlbmRlcmVy
OworfSk7CitlbmlmZWQoJ2VtYmVyLW1ldGFsLXZpZXdzL2luZGV4JywgWydleHBvcnRzJywgJ2Vt
YmVyLW1ldGFsLXZpZXdzL2h0bWxiYXJzLXJlbmRlcmVyJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBf
ZW1iZXJNZXRhbFZpZXdzSHRtbGJhcnNSZW5kZXJlcikgeworICAndXNlIHN0cmljdCc7CisKKyAg
ZnVuY3Rpb24gX2ludGVyb3BFeHBvcnRXaWxkY2FyZChvYmosIGRlZmF1bHRzKSB7IHZhciBuZXdP
YmogPSBkZWZhdWx0cyh7fSwgb2JqKTsgZGVsZXRlIG5ld09ialsnZGVmYXVsdCddOyByZXR1cm4g
bmV3T2JqOyB9CisKKyAgZnVuY3Rpb24gX2RlZmF1bHRzKG9iaiwgZGVmYXVsdHMpIHsgdmFyIGtl
eXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhkZWZhdWx0cyk7IGZvciAodmFyIGkgPSAw
OyBpIDwga2V5cy5sZW5ndGg7IGkrKykgeyB2YXIga2V5ID0ga2V5c1tpXTsgdmFyIHZhbHVlID0g
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkZWZhdWx0cywga2V5KTsgaWYgKHZhbHVl
ICYmIHZhbHVlLmNvbmZpZ3VyYWJsZSAmJiBvYmpba2V5XSA9PT0gdW5kZWZpbmVkKSB7IE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpOyB9IH0gcmV0dXJuIG9iajsgfQorCisg
IF9kZWZhdWx0cyhleHBvcnRzLCBfaW50ZXJvcEV4cG9ydFdpbGRjYXJkKF9lbWJlck1ldGFsVmll
d3NIdG1sYmFyc1JlbmRlcmVyLCBfZGVmYXVsdHMpKTsKK30pOworZW5pZmVkKCdlbWJlci1tZXRh
bC9hbGlhcycsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9kZWJ1ZycsICdlbWJlci1tZXRhbC9w
cm9wZXJ0eV9nZXQnLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfc2V0JywgJ2VtYmVyLW1ldGFsL2Vy
cm9yJywgJ2VtYmVyLW1ldGFsL3Byb3BlcnRpZXMnLCAnZW1iZXItbWV0YWwvY29tcHV0ZWQnLCAn
ZW1iZXItbWV0YWwvdXRpbHMnLCAnZW1iZXItbWV0YWwvbWV0YScsICdlbWJlci1tZXRhbC9kZXBl
bmRlbnRfa2V5cyddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxEZWJ1ZywgX2VtYmVy
TWV0YWxQcm9wZXJ0eV9nZXQsIF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LCBfZW1iZXJNZXRhbEVy
cm9yLCBfZW1iZXJNZXRhbFByb3BlcnRpZXMsIF9lbWJlck1ldGFsQ29tcHV0ZWQsIF9lbWJlck1l
dGFsVXRpbHMsIF9lbWJlck1ldGFsTWV0YSwgX2VtYmVyTWV0YWxEZXBlbmRlbnRfa2V5cykgewor
ICAndXNlIHN0cmljdCc7CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gYWxpYXM7CisgIGV4cG9ydHMu
QWxpYXNlZFByb3BlcnR5ID0gQWxpYXNlZFByb3BlcnR5OworCisgIGZ1bmN0aW9uIGFsaWFzKGFs
dEtleSkgeworICAgIHJldHVybiBuZXcgQWxpYXNlZFByb3BlcnR5KGFsdEtleSk7CisgIH0KKwor
ICBmdW5jdGlvbiBBbGlhc2VkUHJvcGVydHkoYWx0S2V5KSB7CisgICAgdGhpcy5pc0Rlc2NyaXB0
b3IgPSB0cnVlOworICAgIHRoaXMuYWx0S2V5ID0gYWx0S2V5OworICAgIHRoaXMuX2RlcGVuZGVu
dEtleXMgPSBbYWx0S2V5XTsKKyAgfQorCisgIEFsaWFzZWRQcm9wZXJ0eS5wcm90b3R5cGUgPSBP
YmplY3QuY3JlYXRlKF9lbWJlck1ldGFsUHJvcGVydGllcy5EZXNjcmlwdG9yLnByb3RvdHlwZSk7
CisKKyAgQWxpYXNlZFByb3BlcnR5LnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiBBbGlhc2VkUHJv
cGVydHlfZ2V0KG9iaiwga2V5TmFtZSkgeworICAgIHJldHVybiBfZW1iZXJNZXRhbFByb3BlcnR5
X2dldC5nZXQob2JqLCB0aGlzLmFsdEtleSk7CisgIH07CisKKyAgQWxpYXNlZFByb3BlcnR5LnBy
b3RvdHlwZS5zZXQgPSBmdW5jdGlvbiBBbGlhc2VkUHJvcGVydHlfc2V0KG9iaiwga2V5TmFtZSwg
dmFsdWUpIHsKKyAgICByZXR1cm4gX2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQuc2V0KG9iaiwgdGhp
cy5hbHRLZXksIHZhbHVlKTsKKyAgfTsKKworICBBbGlhc2VkUHJvcGVydHkucHJvdG90eXBlLndp
bGxXYXRjaCA9IGZ1bmN0aW9uIChvYmosIGtleU5hbWUpIHsKKyAgICBfZW1iZXJNZXRhbERlcGVu
ZGVudF9rZXlzLmFkZERlcGVuZGVudEtleXModGhpcywgb2JqLCBrZXlOYW1lLCBfZW1iZXJNZXRh
bE1ldGEubWV0YShvYmopKTsKKyAgfTsKKworICBBbGlhc2VkUHJvcGVydHkucHJvdG90eXBlLmRp
ZFVud2F0Y2ggPSBmdW5jdGlvbiAob2JqLCBrZXlOYW1lKSB7CisgICAgX2VtYmVyTWV0YWxEZXBl
bmRlbnRfa2V5cy5yZW1vdmVEZXBlbmRlbnRLZXlzKHRoaXMsIG9iaiwga2V5TmFtZSwgX2VtYmVy
TWV0YWxNZXRhLm1ldGEob2JqKSk7CisgIH07CisKKyAgQWxpYXNlZFByb3BlcnR5LnByb3RvdHlw
ZS5zZXR1cCA9IGZ1bmN0aW9uIChvYmosIGtleU5hbWUpIHsKKyAgICBfZW1iZXJNZXRhbERlYnVn
LmFzc2VydCgnU2V0dGluZyBhbGlhcyBcJycgKyBrZXlOYW1lICsgJ1wnIG9uIHNlbGYnLCB0aGlz
LmFsdEtleSAhPT0ga2V5TmFtZSk7CisgICAgdmFyIG0gPSBfZW1iZXJNZXRhbE1ldGEubWV0YShv
YmopOworICAgIGlmIChtLnBlZWtXYXRjaGluZyhrZXlOYW1lKSkgeworICAgICAgX2VtYmVyTWV0
YWxEZXBlbmRlbnRfa2V5cy5hZGREZXBlbmRlbnRLZXlzKHRoaXMsIG9iaiwga2V5TmFtZSwgbSk7
CisgICAgfQorICB9OworCisgIEFsaWFzZWRQcm9wZXJ0eS5wcm90b3R5cGUudGVhcmRvd24gPSBm
dW5jdGlvbiAob2JqLCBrZXlOYW1lKSB7CisgICAgdmFyIG0gPSBfZW1iZXJNZXRhbE1ldGEubWV0
YShvYmopOworICAgIGlmIChtLnBlZWtXYXRjaGluZyhrZXlOYW1lKSkgeworICAgICAgX2VtYmVy
TWV0YWxEZXBlbmRlbnRfa2V5cy5yZW1vdmVEZXBlbmRlbnRLZXlzKHRoaXMsIG9iaiwga2V5TmFt
ZSwgbSk7CisgICAgfQorICB9OworCisgIEFsaWFzZWRQcm9wZXJ0eS5wcm90b3R5cGUucmVhZE9u
bHkgPSBmdW5jdGlvbiAoKSB7CisgICAgdGhpcy5zZXQgPSBBbGlhc2VkUHJvcGVydHlfcmVhZE9u
bHlTZXQ7CisgICAgcmV0dXJuIHRoaXM7CisgIH07CisKKyAgZnVuY3Rpb24gQWxpYXNlZFByb3Bl
cnR5X3JlYWRPbmx5U2V0KG9iaiwga2V5TmFtZSwgdmFsdWUpIHsKKyAgICB0aHJvdyBuZXcgX2Vt
YmVyTWV0YWxFcnJvci5kZWZhdWx0KCdDYW5ub3Qgc2V0IHJlYWQtb25seSBwcm9wZXJ0eSBcJycg
KyBrZXlOYW1lICsgJ1wnIG9uIG9iamVjdDogJyArIF9lbWJlck1ldGFsVXRpbHMuaW5zcGVjdChv
YmopKTsKKyAgfQorCisgIEFsaWFzZWRQcm9wZXJ0eS5wcm90b3R5cGUub25lV2F5ID0gZnVuY3Rp
b24gKCkgeworICAgIHRoaXMuc2V0ID0gQWxpYXNlZFByb3BlcnR5X29uZVdheVNldDsKKyAgICBy
ZXR1cm4gdGhpczsKKyAgfTsKKworICBmdW5jdGlvbiBBbGlhc2VkUHJvcGVydHlfb25lV2F5U2V0
KG9iaiwga2V5TmFtZSwgdmFsdWUpIHsKKyAgICBfZW1iZXJNZXRhbFByb3BlcnRpZXMuZGVmaW5l
UHJvcGVydHkob2JqLCBrZXlOYW1lLCBudWxsKTsKKyAgICByZXR1cm4gX2VtYmVyTWV0YWxQcm9w
ZXJ0eV9zZXQuc2V0KG9iaiwga2V5TmFtZSwgdmFsdWUpOworICB9CisKKyAgLy8gQmFja3dhcmRz
IGNvbXBhdGliaWxpdHkgd2l0aCBFbWJlciBEYXRhLgorICBBbGlhc2VkUHJvcGVydHkucHJvdG90
eXBlLl9tZXRhID0gdW5kZWZpbmVkOworICBBbGlhc2VkUHJvcGVydHkucHJvdG90eXBlLm1ldGEg
PSBfZW1iZXJNZXRhbENvbXB1dGVkLkNvbXB1dGVkUHJvcGVydHkucHJvdG90eXBlLm1ldGE7Cit9
KTsKK2VuaWZlZCgiZW1iZXItbWV0YWwvYXNzaWduIiwgWyJleHBvcnRzIl0sIGZ1bmN0aW9uIChl
eHBvcnRzKSB7CisgIC8qKgorICAgIENvcHkgcHJvcGVydGllcyBmcm9tIGEgc291cmNlIG9iamVj
dCB0byBhIHRhcmdldCBvYmplY3QuCisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAgICB2YXIgYSA9
IHtmaXJzdDogJ1llaHVkYSd9OworICAgIHZhciBiID0ge2xhc3Q6ICdLYXR6J307CisgICAgdmFy
IGMgPSB7Y29tcGFueTogJ1RpbGRlIEluYy4nfTsKKyAgICBFbWJlci5hc3NpZ24oYSwgYiwgYyk7
IC8vIGEgPT09IHtmaXJzdDogJ1llaHVkYScsIGxhc3Q6ICdLYXR6JywgY29tcGFueTogJ1RpbGRl
IEluYy4nfSwgYiA9PT0ge2xhc3Q6ICdLYXR6J30sIGMgPT09IHtjb21wYW55OiAnVGlsZGUgSW5j
Lid9CisgICAgYGBgCisgIAorICAgIEBtZXRob2QgYXNzaWduCisgICAgQGZvciBFbWJlcgorICAg
IEBwYXJhbSB7T2JqZWN0fSBvcmlnaW5hbCBUaGUgb2JqZWN0IHRvIGFzc2lnbiBpbnRvCisgICAg
QHBhcmFtIHtPYmplY3R9IC4uLmFyZ3MgVGhlIG9iamVjdHMgdG8gY29weSBwcm9wZXJ0aWVzIGZy
b20KKyAgICBAcmV0dXJuIHtPYmplY3R9CisgICAgQHB1YmxpYworICAqLworICAidXNlIHN0cmlj
dCI7CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gYXNzaWduOworCisgIGZ1bmN0aW9uIGFzc2lnbihv
cmlnaW5hbCkgeworICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0g
QXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9r
ZXkrKykgeworICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07CisgICAgfQor
CisgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcmdzLmxlbmd0aDsgaSA8IGw7IGkrKykgeworICAg
ICAgdmFyIGFyZyA9IGFyZ3NbaV07CisgICAgICBpZiAoIWFyZykgeworICAgICAgICBjb250aW51
ZTsKKyAgICAgIH0KKworICAgICAgdmFyIHVwZGF0ZXMgPSBPYmplY3Qua2V5cyhhcmcpOworCisg
ICAgICBmb3IgKHZhciBfaSA9IDAsIF9sID0gdXBkYXRlcy5sZW5ndGg7IF9pIDwgX2w7IF9pKysp
IHsKKyAgICAgICAgdmFyIHByb3AgPSB1cGRhdGVzW19pXTsKKyAgICAgICAgb3JpZ2luYWxbcHJv
cF0gPSBhcmdbcHJvcF07CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG9yaWdpbmFsOwor
ICB9Cit9KTsKK2VuaWZlZCgnZW1iZXItbWV0YWwvYmluZGluZycsIFsnZXhwb3J0cycsICdlbWJl
ci1tZXRhbC9jb3JlJywgJ2VtYmVyLW1ldGFsL2xvZ2dlcicsICdlbWJlci1tZXRhbC9ydW5fbG9v
cCcsICdlbWJlci1tZXRhbC9kZWJ1ZycsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQnLCAnZW1i
ZXItbWV0YWwvcHJvcGVydHlfc2V0JywgJ2VtYmVyLW1ldGFsL3V0aWxzJywgJ2VtYmVyLW1ldGFs
L2V2ZW50cycsICdlbWJlci1tZXRhbC9vYnNlcnZlcicsICdlbWJlci1tZXRhbC9wYXRoX2NhY2hl
J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbENvcmUsIF9lbWJlck1ldGFsTG9nZ2Vy
LCBfZW1iZXJNZXRhbFJ1bl9sb29wLCBfZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJNZXRhbFByb3Bl
cnR5X2dldCwgX2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQsIF9lbWJlck1ldGFsVXRpbHMsIF9lbWJl
ck1ldGFsRXZlbnRzLCBfZW1iZXJNZXRhbE9ic2VydmVyLCBfZW1iZXJNZXRhbFBhdGhfY2FjaGUp
IHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIGV4cG9ydHMuYmluZCA9IGJpbmQ7CisKKyAgLy8gRVM2
VE9ETzogd2hlcmUgaXMgRW1iZXIubG9va3VwIGRlZmluZWQ/CisgIC8qKgorICBAbW9kdWxlIGVt
YmVyCisgIEBzdWJtb2R1bGUgZW1iZXItbWV0YWwKKyAgKi8KKworICAvLyAuLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisgIC8vIENPTlNU
QU5UUworICAvLworCisgIC8qKgorICAgIERlYnVnIHBhcmFtZXRlciB5b3UgY2FuIHR1cm4gb24u
IFRoaXMgd2lsbCBsb2cgYWxsIGJpbmRpbmdzIHRoYXQgZmlyZSB0bworICAgIHRoZSBjb25zb2xl
LiBUaGlzIHNob3VsZCBiZSBkaXNhYmxlZCBpbiBwcm9kdWN0aW9uIGNvZGUuIE5vdGUgdGhhdCB5
b3UKKyAgICBjYW4gYWxzbyBlbmFibGUgdGhpcyBmcm9tIHRoZSBjb25zb2xlIG9yIHRlbXBvcmFy
aWx5LgorICAKKyAgICBAcHJvcGVydHkgTE9HX0JJTkRJTkdTCisgICAgQGZvciBFbWJlcgorICAg
IEB0eXBlIEJvb2xlYW4KKyAgICBAZGVmYXVsdCBmYWxzZQorICAgIEBwdWJsaWMKKyAgKi8KKyAg
X2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuTE9HX0JJTkRJTkdTID0gZmFsc2UgfHwgISFfZW1iZXJN
ZXRhbENvcmUuZGVmYXVsdC5FTlYuTE9HX0JJTkRJTkdTOworCisgIC8vIC4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyAgLy8gQklORElO
RworICAvLworCisgIGZ1bmN0aW9uIEJpbmRpbmcodG9QYXRoLCBmcm9tUGF0aCkgeworICAgIC8v
IENvbmZpZ3VyYXRpb24KKyAgICB0aGlzLl9mcm9tID0gZnJvbVBhdGg7CisgICAgdGhpcy5fdG8g
PSB0b1BhdGg7CisgICAgdGhpcy5fb25lV2F5ID0gdW5kZWZpbmVkOworCisgICAgLy8gU3RhdGUK
KyAgICB0aGlzLl9kaXJlY3Rpb24gPSB1bmRlZmluZWQ7CisgICAgdGhpcy5fcmVhZHlUb1N5bmMg
PSB1bmRlZmluZWQ7CisgICAgdGhpcy5fZnJvbU9iaiA9IHVuZGVmaW5lZDsKKyAgICB0aGlzLl9m
cm9tUGF0aCA9IHVuZGVmaW5lZDsKKyAgICB0aGlzLl90b09iaiA9IHVuZGVmaW5lZDsKKyAgfQor
CisgIC8qKgorICAgIEBjbGFzcyBCaW5kaW5nCisgICAgQG5hbWVzcGFjZSBFbWJlcgorICAgIEBw
dWJsaWMKKyAgKi8KKworICBCaW5kaW5nLnByb3RvdHlwZSA9IHsKKyAgICAvKioKKyAgICAgIFRo
aXMgY29waWVzIHRoZSBCaW5kaW5nIHNvIGl0IGNhbiBiZSBjb25uZWN0ZWQgdG8gYW5vdGhlciBv
YmplY3QuCisgICAgICAgQG1ldGhvZCBjb3B5CisgICAgICBAcmV0dXJuIHtFbWJlci5CaW5kaW5n
fSBgdGhpc2AKKyAgICAgIEBwdWJsaWMKKyAgICAqLworICAgIGNvcHk6IGZ1bmN0aW9uICgpIHsK
KyAgICAgIHZhciBjb3B5ID0gbmV3IEJpbmRpbmcodGhpcy5fdG8sIHRoaXMuX2Zyb20pOworICAg
ICAgaWYgKHRoaXMuX29uZVdheSkgeworICAgICAgICBjb3B5Ll9vbmVXYXkgPSB0cnVlOworICAg
ICAgfQorICAgICAgcmV0dXJuIGNvcHk7CisgICAgfSwKKworICAgIC8vIC4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyAgICAvLyBDT05G
SUcKKyAgICAvLworCisgICAgLyoqCisgICAgICBUaGlzIHdpbGwgc2V0IGBmcm9tYCBwcm9wZXJ0
eSBwYXRoIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUuIEl0IHdpbGwgbm90CisgICAgICBhdHRlbXB0
IHRvIHJlc29sdmUgdGhpcyBwcm9wZXJ0eSBwYXRoIHRvIGFuIGFjdHVhbCBvYmplY3QgdW50aWwg
eW91CisgICAgICBjb25uZWN0IHRoZSBiaW5kaW5nLgorICAgICAgIFRoZSBiaW5kaW5nIHdpbGwg
c2VhcmNoIGZvciB0aGUgcHJvcGVydHkgcGF0aCBzdGFydGluZyBhdCB0aGUgcm9vdCBvYmplY3QK
KyAgICAgIHlvdSBwYXNzIHdoZW4geW91IGBjb25uZWN0KClgIHRoZSBiaW5kaW5nLiBJdCBmb2xs
b3dzIHRoZSBzYW1lIHJ1bGVzIGFzCisgICAgICBgZ2V0KClgIC0gc2VlIHRoYXQgbWV0aG9kIGZv
ciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgIEBtZXRob2QgZnJvbQorICAgICAgQHBhcmFtIHtT
dHJpbmd9IHBhdGggVGhlIHByb3BlcnR5IHBhdGggdG8gY29ubmVjdCB0by4KKyAgICAgIEByZXR1
cm4ge0VtYmVyLkJpbmRpbmd9IGB0aGlzYAorICAgICAgQHB1YmxpYworICAgICovCisgICAgZnJv
bTogZnVuY3Rpb24gKHBhdGgpIHsKKyAgICAgIHRoaXMuX2Zyb20gPSBwYXRoOworICAgICAgcmV0
dXJuIHRoaXM7CisgICAgfSwKKworICAgIC8qKgorICAgICAgVGhpcyB3aWxsIHNldCB0aGUgYHRv
YCBwcm9wZXJ0eSBwYXRoIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUuIEl0IHdpbGwgbm90CisgICAg
ICBhdHRlbXB0IHRvIHJlc29sdmUgdGhpcyBwcm9wZXJ0eSBwYXRoIHRvIGFuIGFjdHVhbCBvYmpl
Y3QgdW50aWwgeW91CisgICAgICBjb25uZWN0IHRoZSBiaW5kaW5nLgorICAgICAgIFRoZSBiaW5k
aW5nIHdpbGwgc2VhcmNoIGZvciB0aGUgcHJvcGVydHkgcGF0aCBzdGFydGluZyBhdCB0aGUgcm9v
dCBvYmplY3QKKyAgICAgIHlvdSBwYXNzIHdoZW4geW91IGBjb25uZWN0KClgIHRoZSBiaW5kaW5n
LiBJdCBmb2xsb3dzIHRoZSBzYW1lIHJ1bGVzIGFzCisgICAgICBgZ2V0KClgIC0gc2VlIHRoYXQg
bWV0aG9kIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgIEBtZXRob2QgdG8KKyAgICAgIEBw
YXJhbSB7U3RyaW5nfFR1cGxlfSBwYXRoIEEgcHJvcGVydHkgcGF0aCBvciB0dXBsZS4KKyAgICAg
IEByZXR1cm4ge0VtYmVyLkJpbmRpbmd9IGB0aGlzYAorICAgICAgQHB1YmxpYworICAgICovCisg
ICAgdG86IGZ1bmN0aW9uIChwYXRoKSB7CisgICAgICB0aGlzLl90byA9IHBhdGg7CisgICAgICBy
ZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgLyoqCisgICAgICBDb25maWd1cmVzIHRoZSBiaW5k
aW5nIGFzIG9uZSB3YXkuIEEgb25lLXdheSBiaW5kaW5nIHdpbGwgcmVsYXkgY2hhbmdlcworICAg
ICAgb24gdGhlIGBmcm9tYCBzaWRlIHRvIHRoZSBgdG9gIHNpZGUsIGJ1dCBub3QgdGhlIG90aGVy
IHdheSBhcm91bmQuIFRoaXMKKyAgICAgIG1lYW5zIHRoYXQgaWYgeW91IGNoYW5nZSB0aGUgYHRv
YCBzaWRlIGRpcmVjdGx5LCB0aGUgYGZyb21gIHNpZGUgbWF5IGhhdmUKKyAgICAgIGEgZGlmZmVy
ZW50IHZhbHVlLgorICAgICAgIEBtZXRob2Qgb25lV2F5CisgICAgICBAcmV0dXJuIHtFbWJlci5C
aW5kaW5nfSBgdGhpc2AKKyAgICAgIEBwdWJsaWMKKyAgICAqLworICAgIG9uZVdheTogZnVuY3Rp
b24gKCkgeworICAgICAgdGhpcy5fb25lV2F5ID0gdHJ1ZTsKKyAgICAgIHJldHVybiB0aGlzOwor
ICAgIH0sCisKKyAgICAvKioKKyAgICAgIEBtZXRob2QgdG9TdHJpbmcKKyAgICAgIEByZXR1cm4g
e1N0cmluZ30gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGJpbmRpbmcKKyAgICAgIEBwdWJsaWMK
KyAgICAqLworICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgb25lV2F5ID0g
dGhpcy5fb25lV2F5ID8gJ1tvbmVXYXldJyA6ICcnOworICAgICAgcmV0dXJuICdFbWJlci5CaW5k
aW5nPCcgKyBfZW1iZXJNZXRhbFV0aWxzLmd1aWRGb3IodGhpcykgKyAnPignICsgdGhpcy5fZnJv
bSArICcgLT4gJyArIHRoaXMuX3RvICsgJyknICsgb25lV2F5OworICAgIH0sCisKKyAgICAvLyAu
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
CisgICAgLy8gQ09OTkVDVCBBTkQgU1lOQworICAgIC8vCisKKyAgICAvKioKKyAgICAgIEF0dGVt
cHRzIHRvIGNvbm5lY3QgdGhpcyBiaW5kaW5nIGluc3RhbmNlIHNvIHRoYXQgaXQgY2FuIHJlY2Vp
dmUgYW5kIHJlbGF5CisgICAgICBjaGFuZ2VzLiBUaGlzIG1ldGhvZCB3aWxsIHJhaXNlIGFuIGV4
Y2VwdGlvbiBpZiB5b3UgaGF2ZSBub3Qgc2V0IHRoZQorICAgICAgZnJvbS90byBwcm9wZXJ0aWVz
IHlldC4KKyAgICAgICBAbWV0aG9kIGNvbm5lY3QKKyAgICAgIEBwYXJhbSB7T2JqZWN0fSBvYmog
VGhlIHJvb3Qgb2JqZWN0IGZvciB0aGlzIGJpbmRpbmcuCisgICAgICBAcmV0dXJuIHtFbWJlci5C
aW5kaW5nfSBgdGhpc2AKKyAgICAgIEBwdWJsaWMKKyAgICAqLworICAgIGNvbm5lY3Q6IGZ1bmN0
aW9uIChvYmopIHsKKyAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdNdXN0IHBhc3MgYSB2
YWxpZCBvYmplY3QgdG8gRW1iZXIuQmluZGluZy5jb25uZWN0KCknLCAhIW9iaik7CisKKyAgICAg
IHZhciBmcm9tT2JqID0gdW5kZWZpbmVkLAorICAgICAgICAgIGZyb21QYXRoID0gdW5kZWZpbmVk
OworCisgICAgICAvLyBJZiB0aGUgYmluZGluZydzICJmcm9tIiBwYXRoIGNvdWxkIGJlIGludGVy
cHJldGVkIGFzIGEgZ2xvYmFsLCB2ZXJpZnkKKyAgICAgIC8vIHdoZXRoZXIgdGhlIHBhdGggcmVm
ZXJzIHRvIGEgZ2xvYmFsIG9yIG5vdCBieSBjb25zdWx0aW5nIGBFbWJlci5sb29rdXBgLgorICAg
ICAgaWYgKF9lbWJlck1ldGFsUGF0aF9jYWNoZS5pc0dsb2JhbFBhdGgodGhpcy5fZnJvbSkpIHsK
KyAgICAgICAgdmFyIF9uYW1lID0gX2VtYmVyTWV0YWxQYXRoX2NhY2hlLmdldEZpcnN0S2V5KHRo
aXMuX2Zyb20pOworICAgICAgICB2YXIgcG9zc2libGVHbG9iYWwgPSBfZW1iZXJNZXRhbENvcmUu
ZGVmYXVsdC5sb29rdXBbX25hbWVdOworCisgICAgICAgIGlmIChwb3NzaWJsZUdsb2JhbCkgewor
ICAgICAgICAgIGZyb21PYmogPSBwb3NzaWJsZUdsb2JhbDsKKyAgICAgICAgICBmcm9tUGF0aCA9
IF9lbWJlck1ldGFsUGF0aF9jYWNoZS5nZXRUYWlsUGF0aCh0aGlzLl9mcm9tKTsKKyAgICAgICAg
fQorICAgICAgfQorCisgICAgICBpZiAoZnJvbU9iaiA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAg
IGZyb21PYmogPSBvYmo7CisgICAgICAgIGZyb21QYXRoID0gdGhpcy5fZnJvbTsKKyAgICAgIH0K
KworICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQudHJ5U2V0KG9iaiwgdGhpcy5fdG8sIF9l
bWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldChmcm9tT2JqLCBmcm9tUGF0aCkpOworCisgICAgICAv
LyBBZGQgYW4gb2JzZXJ2ZXIgb24gdGhlIG9iamVjdCB0byBiZSBub3RpZmllZCB3aGVuIHRoZSBi
aW5kaW5nIHNob3VsZCBiZSB1cGRhdGVkLgorICAgICAgX2VtYmVyTWV0YWxPYnNlcnZlci5hZGRP
YnNlcnZlcihmcm9tT2JqLCBmcm9tUGF0aCwgdGhpcywgJ2Zyb21EaWRDaGFuZ2UnKTsKKworICAg
ICAgLy8gSWYgdGhlIGJpbmRpbmcgaXMgYSB0d28td2F5IGJpbmRpbmcsIGFsc28gc2V0IHVwIGFu
IG9ic2VydmVyIG9uIHRoZSB0YXJnZXQuCisgICAgICBpZiAoIXRoaXMuX29uZVdheSkgeworICAg
ICAgICBfZW1iZXJNZXRhbE9ic2VydmVyLmFkZE9ic2VydmVyKG9iaiwgdGhpcy5fdG8sIHRoaXMs
ICd0b0RpZENoYW5nZScpOworICAgICAgfQorCisgICAgICBfZW1iZXJNZXRhbEV2ZW50cy5hZGRM
aXN0ZW5lcihvYmosICd3aWxsRGVzdHJveScsIHRoaXMsICdkaXNjb25uZWN0Jyk7CisKKyAgICAg
IHRoaXMuX3JlYWR5VG9TeW5jID0gdHJ1ZTsKKyAgICAgIHRoaXMuX2Zyb21PYmogPSBmcm9tT2Jq
OworICAgICAgdGhpcy5fZnJvbVBhdGggPSBmcm9tUGF0aDsKKyAgICAgIHRoaXMuX3RvT2JqID0g
b2JqOworCisgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgLyoqCisgICAgICBEaXNj
b25uZWN0cyB0aGUgYmluZGluZyBpbnN0YW5jZS4gQ2hhbmdlcyB3aWxsIG5vIGxvbmdlciBiZSBy
ZWxheWVkLiBZb3UKKyAgICAgIHdpbGwgbm90IHVzdWFsbHkgbmVlZCB0byBjYWxsIHRoaXMgbWV0
aG9kLgorICAgICAgIEBtZXRob2QgZGlzY29ubmVjdAorICAgICAgQHJldHVybiB7RW1iZXIuQmlu
ZGluZ30gYHRoaXNgCisgICAgICBAcHVibGljCisgICAgKi8KKyAgICBkaXNjb25uZWN0OiBmdW5j
dGlvbiAoKSB7CisgICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnTXVzdCBwYXNzIGEgdmFs
aWQgb2JqZWN0IHRvIEVtYmVyLkJpbmRpbmcuZGlzY29ubmVjdCgpJywgISF0aGlzLl90b09iaik7
CisKKyAgICAgIC8vIFJlbW92ZSBhbiBvYnNlcnZlciBvbiB0aGUgb2JqZWN0IHNvIHdlJ3JlIG5v
IGxvbmdlciBub3RpZmllZCBvZgorICAgICAgLy8gY2hhbmdlcyB0aGF0IHNob3VsZCB1cGRhdGUg
YmluZGluZ3MuCisgICAgICBfZW1iZXJNZXRhbE9ic2VydmVyLnJlbW92ZU9ic2VydmVyKHRoaXMu
X2Zyb21PYmosIHRoaXMuX2Zyb21QYXRoLCB0aGlzLCAnZnJvbURpZENoYW5nZScpOworCisgICAg
ICAvLyBJZiB0aGUgYmluZGluZyBpcyB0d28td2F5LCByZW1vdmUgdGhlIG9ic2VydmVyIGZyb20g
dGhlIHRhcmdldCBhcyB3ZWxsLgorICAgICAgaWYgKCF0aGlzLl9vbmVXYXkpIHsKKyAgICAgICAg
X2VtYmVyTWV0YWxPYnNlcnZlci5yZW1vdmVPYnNlcnZlcih0aGlzLl90b09iaiwgdGhpcy5fdG8s
IHRoaXMsICd0b0RpZENoYW5nZScpOworICAgICAgfQorCisgICAgICB0aGlzLl9yZWFkeVRvU3lu
YyA9IGZhbHNlOyAvLyBEaXNhYmxlIHNjaGVkdWxlZCBzeW5jcy4uLgorICAgICAgcmV0dXJuIHRo
aXM7CisgICAgfSwKKworICAgIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyAgICAvLyBQUklWQVRFCisgICAgLy8KKworICAgIC8q
IENhbGxlZCB3aGVuIHRoZSBmcm9tIHNpZGUgY2hhbmdlcy4gKi8KKyAgICBmcm9tRGlkQ2hhbmdl
OiBmdW5jdGlvbiAodGFyZ2V0KSB7CisgICAgICB0aGlzLl9zY2hlZHVsZVN5bmMoJ2Z3ZCcpOwor
ICAgIH0sCisKKyAgICAvKiBDYWxsZWQgd2hlbiB0aGUgdG8gc2lkZSBjaGFuZ2VzLiAqLworICAg
IHRvRGlkQ2hhbmdlOiBmdW5jdGlvbiAodGFyZ2V0KSB7CisgICAgICB0aGlzLl9zY2hlZHVsZVN5
bmMoJ2JhY2snKTsKKyAgICB9LAorCisgICAgX3NjaGVkdWxlU3luYzogZnVuY3Rpb24gKGRpcikg
eworICAgICAgdmFyIGV4aXN0aW5nRGlyID0gdGhpcy5fZGlyZWN0aW9uOworCisgICAgICAvLyBJ
ZiB3ZSBoYXZlbid0IHNjaGVkdWxlZCB0aGUgYmluZGluZyB5ZXQsIHNjaGVkdWxlIGl0LgorICAg
ICAgaWYgKGV4aXN0aW5nRGlyID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgX2VtYmVyTWV0YWxS
dW5fbG9vcC5kZWZhdWx0LnNjaGVkdWxlKCdzeW5jJywgdGhpcywgJ19zeW5jJyk7CisgICAgICAg
IHRoaXMuX2RpcmVjdGlvbiA9IGRpcjsKKyAgICAgIH0KKworICAgICAgLy8gSWYgYm90aCBhICdi
YWNrJyBhbmQgJ2Z3ZCcgc3luYyBoYXZlIGJlZW4gc2NoZWR1bGVkIG9uIHRoZSBzYW1lIG9iamVj
dCwKKyAgICAgIC8vIGRlZmF1bHQgdG8gYSAnZndkJyBzeW5jIHNvIHRoYXQgaXQgcmVtYWlucyBk
ZXRlcm1pbmlzdGljLgorICAgICAgaWYgKGV4aXN0aW5nRGlyID09PSAnYmFjaycgJiYgZGlyID09
PSAnZndkJykgeworICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSAnZndkJzsKKyAgICAgIH0KKyAg
ICB9LAorCisgICAgX3N5bmM6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciBsb2cgPSBfZW1iZXJN
ZXRhbENvcmUuZGVmYXVsdC5MT0dfQklORElOR1M7CisKKyAgICAgIHZhciB0b09iaiA9IHRoaXMu
X3RvT2JqOworCisgICAgICAvLyBEb24ndCBzeW5jaHJvbml6ZSBkZXN0cm95ZWQgb2JqZWN0cyBv
ciBkaXNjb25uZWN0ZWQgYmluZGluZ3MuCisgICAgICBpZiAodG9PYmouaXNEZXN0cm95ZWQgfHwg
IXRoaXMuX3JlYWR5VG9TeW5jKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKworICAgICAg
Ly8gR2V0IHRoZSBkaXJlY3Rpb24gb2YgdGhlIGJpbmRpbmcgZm9yIHRoZSBvYmplY3Qgd2UgYXJl
CisgICAgICAvLyBzeW5jaHJvbml6aW5nIGZyb20uCisgICAgICB2YXIgZGlyZWN0aW9uID0gdGhp
cy5fZGlyZWN0aW9uOworCisgICAgICB2YXIgZnJvbU9iaiA9IHRoaXMuX2Zyb21PYmo7CisgICAg
ICB2YXIgZnJvbVBhdGggPSB0aGlzLl9mcm9tUGF0aDsKKworICAgICAgdGhpcy5fZGlyZWN0aW9u
ID0gdW5kZWZpbmVkOworCisgICAgICAvLyBJZiB3ZSdyZSBzeW5jaHJvbml6aW5nIGZyb20gdGhl
IHJlbW90ZSBvYmplY3QuLi4KKyAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdmd2QnKSB7CisgICAg
ICAgIHZhciBmcm9tVmFsdWUgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQoZnJvbU9iaiwg
ZnJvbVBhdGgpOworICAgICAgICBpZiAobG9nKSB7CisgICAgICAgICAgX2VtYmVyTWV0YWxMb2dn
ZXIuZGVmYXVsdC5sb2coJyAnLCB0aGlzLnRvU3RyaW5nKCksICctPicsIGZyb21WYWx1ZSwgZnJv
bU9iaik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX29uZVdheSkgeworICAgICAgICAg
IF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LnRyeVNldCh0b09iaiwgdGhpcy5fdG8sIGZyb21WYWx1
ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgX2VtYmVyTWV0YWxPYnNlcnZlci5fc3Vz
cGVuZE9ic2VydmVyKHRvT2JqLCB0aGlzLl90bywgdGhpcywgJ3RvRGlkQ2hhbmdlJywgZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQudHJ5U2V0KHRvT2Jq
LCB0aGlzLl90bywgZnJvbVZhbHVlKTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAg
ICAvLyBJZiB3ZSdyZSBzeW5jaHJvbml6aW5nICp0byogdGhlIHJlbW90ZSBvYmplY3QuCisgICAg
ICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ2JhY2snKSB7CisgICAgICAgICAgdmFyIHRvVmFs
dWUgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodG9PYmosIHRoaXMuX3RvKTsKKyAgICAg
ICAgICBpZiAobG9nKSB7CisgICAgICAgICAgICBfZW1iZXJNZXRhbExvZ2dlci5kZWZhdWx0Lmxv
ZygnICcsIHRoaXMudG9TdHJpbmcoKSwgJzwtJywgdG9WYWx1ZSwgdG9PYmopOworICAgICAgICAg
IH0KKyAgICAgICAgICBfZW1iZXJNZXRhbE9ic2VydmVyLl9zdXNwZW5kT2JzZXJ2ZXIoZnJvbU9i
aiwgZnJvbVBhdGgsIHRoaXMsICdmcm9tRGlkQ2hhbmdlJywgZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQudHJ5U2V0KGZyb21PYmosIGZyb21QYXRoLCB0
b1ZhbHVlKTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKworICB9OworCisgIGZ1
bmN0aW9uIG1peGluUHJvcGVydGllcyh0bywgZnJvbSkgeworICAgIGZvciAodmFyIGtleSBpbiBm
cm9tKSB7CisgICAgICBpZiAoZnJvbS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7CisgICAgICAgIHRv
W2tleV0gPSBmcm9tW2tleV07CisgICAgICB9CisgICAgfQorICB9CisKKyAgbWl4aW5Qcm9wZXJ0
aWVzKEJpbmRpbmcsIHsKKworICAgIC8qCisgICAgICBTZWUgYEVtYmVyLkJpbmRpbmcuZnJvbWAu
CisgICAgICAgQG1ldGhvZCBmcm9tCisgICAgICBAc3RhdGljCisgICAgKi8KKyAgICBmcm9tOiBm
dW5jdGlvbiAoZnJvbSkgeworICAgICAgdmFyIEMgPSB0aGlzOworICAgICAgcmV0dXJuIG5ldyBD
KHVuZGVmaW5lZCwgZnJvbSk7CisgICAgfSwKKworICAgIC8qCisgICAgICBTZWUgYEVtYmVyLkJp
bmRpbmcudG9gLgorICAgICAgIEBtZXRob2QgdG8KKyAgICAgIEBzdGF0aWMKKyAgICAqLworICAg
IHRvOiBmdW5jdGlvbiAodG8pIHsKKyAgICAgIHZhciBDID0gdGhpczsKKyAgICAgIHJldHVybiBu
ZXcgQyh0bywgdW5kZWZpbmVkKTsKKyAgICB9CisgIH0pOworICAvKioKKyAgICBBbiBgRW1iZXIu
QmluZGluZ2AgY29ubmVjdHMgdGhlIHByb3BlcnRpZXMgb2YgdHdvIG9iamVjdHMgc28gdGhhdCB3
aGVuZXZlcgorICAgIHRoZSB2YWx1ZSBvZiBvbmUgcHJvcGVydHkgY2hhbmdlcywgdGhlIG90aGVy
IHByb3BlcnR5IHdpbGwgYmUgY2hhbmdlZCBhbHNvLgorICAKKyAgICAjIyBBdXRvbWF0aWMgQ3Jl
YXRpb24gb2YgQmluZGluZ3Mgd2l0aCBgL14qQmluZGluZy9gLW5hbWVkIFByb3BlcnRpZXMuCisg
IAorICAgIFlvdSBkbyBub3QgdXN1YWxseSBjcmVhdGUgQmluZGluZyBvYmplY3RzIGRpcmVjdGx5
IGJ1dCBpbnN0ZWFkIGRlc2NyaWJlCisgICAgYmluZGluZ3MgaW4geW91ciBjbGFzcyBvciBvYmpl
Y3QgZGVmaW5pdGlvbiB1c2luZyBhdXRvbWF0aWMgYmluZGluZworICAgIGRldGVjdGlvbi4KKyAg
CisgICAgUHJvcGVydGllcyBlbmRpbmcgaW4gYSBgQmluZGluZ2Agc3VmZml4IHdpbGwgYmUgY29u
dmVydGVkIHRvIGBFbWJlci5CaW5kaW5nYAorICAgIGluc3RhbmNlcy4gVGhlIHZhbHVlIG9mIHRo
aXMgcHJvcGVydHkgc2hvdWxkIGJlIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhIHBhdGgKKyAgICB0
byBhbm90aGVyIG9iamVjdCBvciBhIGN1c3RvbSBiaW5kaW5nIGluc3RhbmNlIGNyZWF0ZWQgdXNp
bmcgQmluZGluZyBoZWxwZXJzCisgICAgKHNlZSAiT25lIFdheSBCaW5kaW5ncyIpOgorICAKKyAg
ICBgYGAKKyAgICB2YWx1ZUJpbmRpbmc6ICJNeUFwcC5zb21lQ29udHJvbGxlci50aXRsZSIKKyAg
ICBgYGAKKyAgCisgICAgVGhpcyB3aWxsIGNyZWF0ZSBhIGJpbmRpbmcgZnJvbSBgTXlBcHAuc29t
ZUNvbnRyb2xsZXIudGl0bGVgIHRvIHRoZSBgdmFsdWVgCisgICAgcHJvcGVydHkgb2YgeW91ciBv
YmplY3QgaW5zdGFuY2UgYXV0b21hdGljYWxseS4gTm93IHRoZSB0d28gdmFsdWVzIHdpbGwgYmUK
KyAgICBrZXB0IGluIHN5bmMuCisgIAorICAgICMjIE9uZSBXYXkgQmluZGluZ3MKKyAgCisgICAg
T25lIGVzcGVjaWFsbHkgdXNlZnVsIGJpbmRpbmcgY3VzdG9taXphdGlvbiB5b3UgY2FuIHVzZSBp
cyB0aGUgYG9uZVdheSgpYAorICAgIGhlbHBlci4gVGhpcyBoZWxwZXIgdGVsbHMgRW1iZXIgdGhh
dCB5b3UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbgorICAgIHJlY2VpdmluZyBjaGFuZ2VzIG9uIHRo
ZSBvYmplY3QgeW91IGFyZSBiaW5kaW5nIGZyb20uIEZvciBleGFtcGxlLCBpZiB5b3UKKyAgICBh
cmUgYmluZGluZyB0byBhIHByZWZlcmVuY2UgYW5kIHlvdSB3YW50IHRvIGJlIG5vdGlmaWVkIGlm
IHRoZSBwcmVmZXJlbmNlCisgICAgaGFzIGNoYW5nZWQsIGJ1dCB5b3VyIG9iamVjdCB3aWxsIG5v
dCBiZSBjaGFuZ2luZyB0aGUgcHJlZmVyZW5jZSBpdHNlbGYsIHlvdQorICAgIGNvdWxkIGRvOgor
ICAKKyAgICBgYGAKKyAgICBiaWdUaXRsZXNCaW5kaW5nOiBFbWJlci5CaW5kaW5nLm9uZVdheSgi
TXlBcHAucHJlZmVyZW5jZXNDb250cm9sbGVyLmJpZ1RpdGxlcyIpCisgICAgYGBgCisgIAorICAg
IFRoaXMgd2F5IGlmIHRoZSB2YWx1ZSBvZiBgTXlBcHAucHJlZmVyZW5jZXNDb250cm9sbGVyLmJp
Z1RpdGxlc2AgY2hhbmdlcyB0aGUKKyAgICBgYmlnVGl0bGVzYCBwcm9wZXJ0eSBvZiB5b3VyIG9i
amVjdCB3aWxsIGNoYW5nZSBhbHNvLiBIb3dldmVyLCBpZiB5b3UKKyAgICBjaGFuZ2UgdGhlIHZh
bHVlIG9mIHlvdXIgYGJpZ1RpdGxlc2AgcHJvcGVydHksIGl0IHdpbGwgbm90IHVwZGF0ZSB0aGUK
KyAgICBgcHJlZmVyZW5jZXNDb250cm9sbGVyYC4KKyAgCisgICAgT25lIHdheSBiaW5kaW5ncyBh
cmUgYWxtb3N0IHR3aWNlIGFzIGZhc3QgdG8gc2V0dXAgYW5kIHR3aWNlIGFzIGZhc3QgdG8KKyAg
ICBleGVjdXRlIGJlY2F1c2UgdGhlIGJpbmRpbmcgb25seSBoYXMgdG8gd29ycnkgYWJvdXQgY2hh
bmdlcyB0byBvbmUgc2lkZS4KKyAgCisgICAgWW91IHNob3VsZCBjb25zaWRlciB1c2luZyBvbmUg
d2F5IGJpbmRpbmdzIGFueXRpbWUgeW91IGhhdmUgYW4gb2JqZWN0IHRoYXQKKyAgICBtYXkgYmUg
Y3JlYXRlZCBmcmVxdWVudGx5IGFuZCB5b3UgZG8gbm90IGludGVuZCB0byBjaGFuZ2UgYSBwcm9w
ZXJ0eTsgb25seQorICAgIHRvIG1vbml0b3IgaXQgZm9yIGNoYW5nZXMgKHN1Y2ggYXMgaW4gdGhl
IGV4YW1wbGUgYWJvdmUpLgorICAKKyAgICAjIyBBZGRpbmcgQmluZGluZ3MgTWFudWFsbHkKKyAg
CisgICAgQWxsIG9mIHRoZSBleGFtcGxlcyBhYm92ZSBzaG93IHlvdSBob3cgdG8gY29uZmlndXJl
IGEgY3VzdG9tIGJpbmRpbmcsIGJ1dCB0aGUKKyAgICByZXN1bHQgb2YgdGhlc2UgY3VzdG9taXph
dGlvbnMgd2lsbCBiZSBhIGJpbmRpbmcgdGVtcGxhdGUsIG5vdCBhIGZ1bGx5IGFjdGl2ZQorICAg
IEJpbmRpbmcgaW5zdGFuY2UuIFRoZSBiaW5kaW5nIHdpbGwgYWN0dWFsbHkgYmVjb21lIGFjdGl2
ZSBvbmx5IHdoZW4geW91CisgICAgaW5zdGFudGlhdGUgdGhlIG9iamVjdCB0aGUgYmluZGluZyBi
ZWxvbmdzIHRvLiBJdCBpcyB1c2VmdWwsIGhvd2V2ZXIsIHRvCisgICAgdW5kZXJzdGFuZCB3aGF0
IGFjdHVhbGx5IGhhcHBlbnMgd2hlbiB0aGUgYmluZGluZyBpcyBhY3RpdmF0ZWQuCisgIAorICAg
IEZvciBhIGJpbmRpbmcgdG8gZnVuY3Rpb24gaXQgbXVzdCBoYXZlIGF0IGxlYXN0IGEgYGZyb21g
IHByb3BlcnR5IGFuZCBhIGB0b2AKKyAgICBwcm9wZXJ0eS4gVGhlIGBmcm9tYCBwcm9wZXJ0eSBw
YXRoIHBvaW50cyB0byB0aGUgb2JqZWN0L2tleSB0aGF0IHlvdSB3YW50IHRvCisgICAgYmluZCBm
cm9tIHdoaWxlIHRoZSBgdG9gIHBhdGggcG9pbnRzIHRvIHRoZSBvYmplY3Qva2V5IHlvdSB3YW50
IHRvIGJpbmQgdG8uCisgIAorICAgIFdoZW4geW91IGRlZmluZSBhIGN1c3RvbSBiaW5kaW5nLCB5
b3UgYXJlIHVzdWFsbHkgZGVzY3JpYmluZyB0aGUgcHJvcGVydHkKKyAgICB5b3Ugd2FudCB0byBi
aW5kIGZyb20gKHN1Y2ggYXMgYE15QXBwLnNvbWVDb250cm9sbGVyLnZhbHVlYCBpbiB0aGUgZXhh
bXBsZXMKKyAgICBhYm92ZSkuIFdoZW4geW91ciBvYmplY3QgaXMgY3JlYXRlZCwgaXQgd2lsbCBh
dXRvbWF0aWNhbGx5IGFzc2lnbiB0aGUgdmFsdWUKKyAgICB5b3Ugd2FudCB0byBiaW5kIGB0b2Ag
YmFzZWQgb24gdGhlIG5hbWUgb2YgeW91ciBiaW5kaW5nIGtleS4gSW4gdGhlCisgICAgZXhhbXBs
ZXMgYWJvdmUsIGR1cmluZyBpbml0LCBFbWJlciBvYmplY3RzIHdpbGwgZWZmZWN0aXZlbHkgY2Fs
bAorICAgIHNvbWV0aGluZyBsaWtlIHRoaXMgb24geW91ciBiaW5kaW5nOgorICAKKyAgICBgYGBq
YXZhc2NyaXB0CisgICAgYmluZGluZyA9IEVtYmVyLkJpbmRpbmcuZnJvbSgidmFsdWVCaW5kaW5n
IikudG8oInZhbHVlIik7CisgICAgYGBgCisgIAorICAgIFRoaXMgY3JlYXRlcyBhIG5ldyBiaW5k
aW5nIGluc3RhbmNlIGJhc2VkIG9uIHRoZSB0ZW1wbGF0ZSB5b3UgcHJvdmlkZSwgYW5kCisgICAg
c2V0cyB0aGUgdG8gcGF0aCB0byB0aGUgYHZhbHVlYCBwcm9wZXJ0eSBvZiB0aGUgbmV3IG9iamVj
dC4gTm93IHRoYXQgdGhlCisgICAgYmluZGluZyBpcyBmdWxseSBjb25maWd1cmVkIHdpdGggYSBg
ZnJvbWAgYW5kIGEgYHRvYCwgaXQgc2ltcGx5IG5lZWRzIHRvIGJlCisgICAgY29ubmVjdGVkIHRv
IGJlY29tZSBhY3RpdmUuIFRoaXMgaXMgZG9uZSB0aHJvdWdoIHRoZSBgY29ubmVjdCgpYCBtZXRo
b2Q6CisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAgICBiaW5kaW5nLmNvbm5lY3QodGhpcyk7Cisg
ICAgYGBgCisgIAorICAgIE5vdGUgdGhhdCB3aGVuIHlvdSBjb25uZWN0IGEgYmluZGluZyB5b3Ug
cGFzcyB0aGUgb2JqZWN0IHlvdSB3YW50IGl0IHRvIGJlCisgICAgY29ubmVjdGVkIHRvLiBUaGlz
IG9iamVjdCB3aWxsIGJlIHVzZWQgYXMgdGhlIHJvb3QgZm9yIGJvdGggdGhlIGZyb20gYW5kCisg
ICAgdG8gc2lkZSBvZiB0aGUgYmluZGluZyB3aGVuIGluc3BlY3RpbmcgcmVsYXRpdmUgcGF0aHMu
IFRoaXMgYWxsb3dzIHRoZQorICAgIGJpbmRpbmcgdG8gYmUgYXV0b21hdGljYWxseSBpbmhlcml0
ZWQgYnkgc3ViY2xhc3NlZCBvYmplY3RzIGFzIHdlbGwuCisgIAorICAgIFRoaXMgYWxzbyBhbGxv
d3MgeW91IHRvIGJpbmQgYmV0d2VlbiBvYmplY3RzIHVzaW5nIHRoZSBwYXRocyB5b3UgZGVjbGFy
ZSBpbgorICAgIGBmcm9tYCBhbmQgYHRvYDoKKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIC8v
IEV4YW1wbGUgMQorICAgIGJpbmRpbmcgPSBFbWJlci5CaW5kaW5nLmZyb20oIkFwcC5zb21lT2Jq
ZWN0LnZhbHVlIikudG8oInZhbHVlIik7CisgICAgYmluZGluZy5jb25uZWN0KHRoaXMpOworICAK
KyAgICAvLyBFeGFtcGxlIDIKKyAgICBiaW5kaW5nID0gRW1iZXIuQmluZGluZy5mcm9tKCJwYXJl
bnRWaWV3LnZhbHVlIikudG8oIkFwcC5zb21lT2JqZWN0LnZhbHVlIik7CisgICAgYmluZGluZy5j
b25uZWN0KHRoaXMpOworICAgIGBgYAorICAKKyAgICBOb3cgdGhhdCB0aGUgYmluZGluZyBpcyBj
b25uZWN0ZWQsIGl0IHdpbGwgb2JzZXJ2ZSBib3RoIHRoZSBmcm9tIGFuZCB0byBzaWRlCisgICAg
YW5kIHJlbGF5IGNoYW5nZXMuCisgIAorICAgIElmIHlvdSBldmVyIG5lZWRlZCB0byBkbyBzbyAo
eW91IGFsbW9zdCBuZXZlciB3aWxsLCBidXQgaXQgaXMgdXNlZnVsIHRvCisgICAgdW5kZXJzdGFu
ZCB0aGlzIGFueXdheSksIHlvdSBjb3VsZCBtYW51YWxseSBjcmVhdGUgYW4gYWN0aXZlIGJpbmRp
bmcgYnkKKyAgICB1c2luZyB0aGUgYEVtYmVyLmJpbmQoKWAgaGVscGVyIG1ldGhvZC4gKFRoaXMg
aXMgdGhlIHNhbWUgbWV0aG9kIHVzZWQgYnkKKyAgICB0byBzZXR1cCB5b3VyIGJpbmRpbmdzIG9u
IG9iamVjdHMpOgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgRW1iZXIuYmluZChNeUFwcC5h
bm90aGVyT2JqZWN0LCAidmFsdWUiLCAiTXlBcHAuc29tZUNvbnRyb2xsZXIudmFsdWUiKTsKKyAg
ICBgYGAKKyAgCisgICAgQm90aCBvZiB0aGVzZSBjb2RlIGZyYWdtZW50cyBoYXZlIHRoZSBzYW1l
IGVmZmVjdCBhcyBkb2luZyB0aGUgbW9zdCBmcmllbmRseQorICAgIGZvcm0gb2YgYmluZGluZyBj
cmVhdGlvbiBsaWtlIHNvOgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgTXlBcHAuYW5vdGhl
ck9iamVjdCA9IEVtYmVyLk9iamVjdC5jcmVhdGUoeworICAgICAgdmFsdWVCaW5kaW5nOiAiTXlB
cHAuc29tZUNvbnRyb2xsZXIudmFsdWUiLAorICAKKyAgICAgIC8vIE9USEVSIENPREUgRk9SIFRI
SVMgT0JKRUNULi4uCisgICAgfSk7CisgICAgYGBgCisgIAorICAgIEVtYmVyJ3MgYnVpbHQgaW4g
YmluZGluZyBjcmVhdGlvbiBtZXRob2QgbWFrZXMgaXQgZWFzeSB0byBhdXRvbWF0aWNhbGx5Cisg
ICAgY3JlYXRlIGJpbmRpbmdzIGZvciB5b3UuIFlvdSBzaG91bGQgYWx3YXlzIHVzZSB0aGUgaGln
aGVzdC1sZXZlbCBBUElzCisgICAgYXZhaWxhYmxlLCBldmVuIGlmIHlvdSB1bmRlcnN0YW5kIGhv
dyBpdCB3b3JrcyB1bmRlcm5lYXRoLgorICAKKyAgICBAY2xhc3MgQmluZGluZworICAgIEBuYW1l
c3BhY2UgRW1iZXIKKyAgICBAc2luY2UgRW1iZXIgMC45CisgICAgQHB1YmxpYworICAqLworICAv
LyBFbWJlci5CaW5kaW5nID0gQmluZGluZzsgRVM2VE9ETzogd2hlcmUgdG8gcHV0IHRoaXM/CisK
KyAgLyoqCisgICAgR2xvYmFsIGhlbHBlciBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IGJpbmRpbmcu
IEp1c3QgcGFzcyB0aGUgcm9vdCBvYmplY3QKKyAgICBhbG9uZyB3aXRoIGEgYHRvYCBhbmQgYGZy
b21gIHBhdGggdG8gY3JlYXRlIGFuZCBjb25uZWN0IHRoZSBiaW5kaW5nLgorICAKKyAgICBAbWV0
aG9kIGJpbmQKKyAgICBAZm9yIEVtYmVyCisgICAgQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgcm9v
dCBvYmplY3Qgb2YgdGhlIHRyYW5zZm9ybS4KKyAgICBAcGFyYW0ge1N0cmluZ30gdG8gVGhlIHBh
dGggdG8gdGhlICd0bycgc2lkZSBvZiB0aGUgYmluZGluZy4KKyAgICAgIE11c3QgYmUgcmVsYXRp
dmUgdG8gb2JqLgorICAgIEBwYXJhbSB7U3RyaW5nfSBmcm9tIFRoZSBwYXRoIHRvIHRoZSAnZnJv
bScgc2lkZSBvZiB0aGUgYmluZGluZy4KKyAgICAgIE11c3QgYmUgcmVsYXRpdmUgdG8gb2JqIG9y
IGEgZ2xvYmFsIHBhdGguCisgICAgQHJldHVybiB7RW1iZXIuQmluZGluZ30gYmluZGluZyBpbnN0
YW5jZQorICAgIEBwdWJsaWMKKyAgKi8KKworICBmdW5jdGlvbiBiaW5kKG9iaiwgdG8sIGZyb20p
IHsKKyAgICByZXR1cm4gbmV3IEJpbmRpbmcodG8sIGZyb20pLmNvbm5lY3Qob2JqKTsKKyAgfQor
CisgIGV4cG9ydHMuQmluZGluZyA9IEJpbmRpbmc7Cit9KTsKKy8vIEVtYmVyLkxPR19CSU5ESU5H
UworZW5pZmVkKCdlbWJlci1tZXRhbC9jYWNoZScsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9l
bXB0eV9vYmplY3QnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsRW1wdHlfb2JqZWN0
KSB7CisgICd1c2Ugc3RyaWN0JzsKKworICBleHBvcnRzLmRlZmF1bHQgPSBDYWNoZTsKKworICBm
dW5jdGlvbiBDYWNoZShsaW1pdCwgZnVuYykgeworICAgIHRoaXMuc3RvcmUgPSBuZXcgX2VtYmVy
TWV0YWxFbXB0eV9vYmplY3QuZGVmYXVsdCgpOworICAgIHRoaXMuc2l6ZSA9IDA7CisgICAgdGhp
cy5taXNzZXMgPSAwOworICAgIHRoaXMuaGl0cyA9IDA7CisgICAgdGhpcy5saW1pdCA9IGxpbWl0
OworICAgIHRoaXMuZnVuYyA9IGZ1bmM7CisgIH0KKworICB2YXIgVU5ERUZJTkVEID0gZnVuY3Rp
b24gKCkge307CisKKyAgQ2FjaGUucHJvdG90eXBlID0geworICAgIHNldDogZnVuY3Rpb24gKGtl
eSwgdmFsdWUpIHsKKyAgICAgIGlmICh0aGlzLmxpbWl0ID4gdGhpcy5zaXplKSB7CisgICAgICAg
IHRoaXMuc2l6ZSsrOworICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgeworICAgICAg
ICAgIHRoaXMuc3RvcmVba2V5XSA9IFVOREVGSU5FRDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICB0aGlzLnN0b3JlW2tleV0gPSB2YWx1ZTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAg
ICByZXR1cm4gdmFsdWU7CisgICAgfSwKKworICAgIGdldDogZnVuY3Rpb24gKGtleSkgeworICAg
ICAgdmFyIHZhbHVlID0gdGhpcy5zdG9yZVtrZXldOworCisgICAgICBpZiAodmFsdWUgPT09IHVu
ZGVmaW5lZCkgeworICAgICAgICB0aGlzLm1pc3NlcysrOworICAgICAgICB2YWx1ZSA9IHRoaXMu
c2V0KGtleSwgdGhpcy5mdW5jKGtleSkpOworICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gVU5E
RUZJTkVEKSB7CisgICAgICAgIHRoaXMuaGl0cysrOworICAgICAgICB2YWx1ZSA9IHVuZGVmaW5l
ZDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHRoaXMuaGl0cysrOworICAgICAgICAvLyBub3Ro
aW5nIHRvIHRyYW5zbGF0ZQorICAgICAgfQorCisgICAgICByZXR1cm4gdmFsdWU7CisgICAgfSwK
KworICAgIHB1cmdlOiBmdW5jdGlvbiAoKSB7CisgICAgICB0aGlzLnN0b3JlID0gbmV3IF9lbWJl
ck1ldGFsRW1wdHlfb2JqZWN0LmRlZmF1bHQoKTsKKyAgICAgIHRoaXMuc2l6ZSA9IDA7CisgICAg
ICB0aGlzLmhpdHMgPSAwOworICAgICAgdGhpcy5taXNzZXMgPSAwOworICAgIH0KKyAgfTsKK30p
OworZW5pZmVkKCdlbWJlci1tZXRhbC9jaGFpbnMnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwv
cHJvcGVydHlfZ2V0JywgJ2VtYmVyLW1ldGFsL21ldGEnLCAnZW1iZXItbWV0YWwvd2F0Y2hfa2V5
JywgJ2VtYmVyLW1ldGFsL2VtcHR5X29iamVjdCddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVy
TWV0YWxQcm9wZXJ0eV9nZXQsIF9lbWJlck1ldGFsTWV0YSwgX2VtYmVyTWV0YWxXYXRjaF9rZXks
IF9lbWJlck1ldGFsRW1wdHlfb2JqZWN0KSB7CisgICd1c2Ugc3RyaWN0JzsKKworICBleHBvcnRz
LmZpbmlzaENoYWlucyA9IGZpbmlzaENoYWluczsKKworICB2YXIgRklSU1RfS0VZID0gL14oW15c
Ll0rKS87CisKKyAgZnVuY3Rpb24gZmlyc3RLZXkocGF0aCkgeworICAgIHJldHVybiBwYXRoLm1h
dGNoKEZJUlNUX0tFWSlbMF07CisgIH0KKworICBmdW5jdGlvbiBpc09iamVjdChvYmopIHsKKyAg
ICByZXR1cm4gb2JqICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnOworICB9CisKKyAgZnVuY3Rp
b24gaXNWb2xhdGlsZShvYmopIHsKKyAgICByZXR1cm4gIShpc09iamVjdChvYmopICYmIG9iai5p
c0Rlc2NyaXB0b3IgJiYgb2JqLl92b2xhdGlsZSA9PT0gZmFsc2UpOworICB9CisKKyAgZnVuY3Rp
b24gQ2hhaW5XYXRjaGVycygpIHsKKyAgICAvLyBjaGFpbiBub2RlcyB0aGF0IHJlZmVyZW5jZSBh
IGtleSBpbiB0aGlzIG9iaiBieSBrZXkKKyAgICAvLyB3ZSBvbmx5IGNyZWF0ZSBDaGFpbldhdGNo
ZXJzIHdoZW4gd2UgYXJlIGdvaW5nIHRvIGFkZCB0aGVtCisgICAgLy8gc28gY3JlYXRlIHRoaXMg
dXBmcm9udAorICAgIHRoaXMuY2hhaW5zID0gbmV3IF9lbWJlck1ldGFsRW1wdHlfb2JqZWN0LmRl
ZmF1bHQoKTsKKyAgfQorCisgIENoYWluV2F0Y2hlcnMucHJvdG90eXBlID0geworICAgIGFkZDog
ZnVuY3Rpb24gKGtleSwgbm9kZSkgeworICAgICAgdmFyIG5vZGVzID0gdGhpcy5jaGFpbnNba2V5
XTsKKyAgICAgIGlmIChub2RlcyA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgIHRoaXMuY2hhaW5z
W2tleV0gPSBbbm9kZV07CisgICAgICB9IGVsc2UgeworICAgICAgICBub2Rlcy5wdXNoKG5vZGUp
OworICAgICAgfQorICAgIH0sCisKKyAgICByZW1vdmU6IGZ1bmN0aW9uIChrZXksIG5vZGUpIHsK
KyAgICAgIHZhciBub2RlcyA9IHRoaXMuY2hhaW5zW2tleV07CisgICAgICBpZiAobm9kZXMpIHsK
KyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBub2Rlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsK
KyAgICAgICAgICBpZiAobm9kZXNbaV0gPT09IG5vZGUpIHsKKyAgICAgICAgICAgIG5vZGVzLnNw
bGljZShpLCAxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgfQorICAgIH0sCisKKyAgICBoYXM6IGZ1bmN0aW9uIChrZXksIG5vZGUpIHsKKyAgICAg
IHZhciBub2RlcyA9IHRoaXMuY2hhaW5zW2tleV07CisgICAgICBpZiAobm9kZXMpIHsKKyAgICAg
ICAgZm9yICh2YXIgaSA9IDAsIGwgPSBub2Rlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKKyAgICAg
ICAgICBpZiAobm9kZXNbaV0gPT09IG5vZGUpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0sCisKKyAgICByZXZhbGlkYXRlQWxsOiBmdW5jdGlvbiAoKSB7CisgICAgICBmb3IgKHZhciBr
ZXkgaW4gdGhpcy5jaGFpbnMpIHsKKyAgICAgICAgdGhpcy5ub3RpZnkoa2V5LCB0cnVlLCB1bmRl
ZmluZWQpOworICAgICAgfQorICAgIH0sCisKKyAgICByZXZhbGlkYXRlOiBmdW5jdGlvbiAoa2V5
KSB7CisgICAgICB0aGlzLm5vdGlmeShrZXksIHRydWUsIHVuZGVmaW5lZCk7CisgICAgfSwKKwor
ICAgIC8vIGtleTogdGhlIHN0cmluZyBrZXkgdGhhdCBpcyBwYXJ0IG9mIGEgcGF0aCBjaGFuZ2Vk
CisgICAgLy8gcmV2YWxpZGF0ZTogYm9vbGVhbjsgdGhlIGNoYWlucyB0aGF0IGFyZSB3YXRjaGlu
ZyB0aGlzIHZhbHVlIHNob3VsZCByZXZhbGlkYXRlCisgICAgLy8gY2FsbGJhY2s6IGZ1bmN0aW9u
IHRoYXQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgb2JqZWN0IGFuZCBwYXRoIHRoYXQKKyAgICAv
LyAgICAgICAgICAgd2lsbCBiZS9hcmUgaW52YWxpZGF0ZWQgYnkgdGhpcyBrZXkgY2hhbmdlLCBk
ZXBlbmRpbmcgb24KKyAgICAvLyAgICAgICAgICAgd2hldGhlciB0aGUgcmV2YWxpZGF0ZSBmbGFn
IGlzIHBhc3NlZAorICAgIG5vdGlmeTogZnVuY3Rpb24gKGtleSwgcmV2YWxpZGF0ZSwgY2FsbGJh
Y2spIHsKKyAgICAgIHZhciBub2RlcyA9IHRoaXMuY2hhaW5zW2tleV07CisgICAgICBpZiAobm9k
ZXMgPT09IHVuZGVmaW5lZCB8fCBub2Rlcy5sZW5ndGggPT09IDApIHsKKyAgICAgICAgcmV0dXJu
OworICAgICAgfQorCisgICAgICB2YXIgYWZmZWN0ZWQgPSB1bmRlZmluZWQ7CisKKyAgICAgIGlm
IChjYWxsYmFjaykgeworICAgICAgICBhZmZlY3RlZCA9IFtdOworICAgICAgfQorCisgICAgICBm
b3IgKHZhciBpID0gMCwgbCA9IG5vZGVzLmxlbmd0aDsgaSA8IGw7IGkrKykgeworICAgICAgICBu
b2Rlc1tpXS5ub3RpZnkocmV2YWxpZGF0ZSwgYWZmZWN0ZWQpOworICAgICAgfQorCisgICAgICBp
ZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkgeworICAgICAgICByZXR1cm47CisgICAgICB9CisK
KyAgICAgIC8vIHdlIGdhdGhlciBjYWxsYmFja3Mgc28gd2UgZG9uJ3Qgbm90aWZ5IHRoZW0gZHVy
aW5nIHJldmFsaWRhdGlvbgorICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhZmZlY3RlZC5sZW5n
dGg7IGkgPCBsOyBpICs9IDIpIHsKKyAgICAgICAgdmFyIG9iaiA9IGFmZmVjdGVkW2ldOworICAg
ICAgICB2YXIgcGF0aCA9IGFmZmVjdGVkW2kgKyAxXTsKKyAgICAgICAgY2FsbGJhY2sob2JqLCBw
YXRoKTsKKyAgICAgIH0KKyAgICB9CisgIH07CisKKyAgZnVuY3Rpb24gbWFrZUNoYWluV2F0Y2hl
cigpIHsKKyAgICByZXR1cm4gbmV3IENoYWluV2F0Y2hlcnMoKTsKKyAgfQorCisgIGZ1bmN0aW9u
IGFkZENoYWluV2F0Y2hlcihvYmosIGtleU5hbWUsIG5vZGUpIHsKKyAgICBpZiAoIWlzT2JqZWN0
KG9iaikpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2YXIgbSA9IF9lbWJlck1ldGFs
TWV0YS5tZXRhKG9iaik7CisgICAgbS53cml0YWJsZUNoYWluV2F0Y2hlcnMobWFrZUNoYWluV2F0
Y2hlcikuYWRkKGtleU5hbWUsIG5vZGUpOworICAgIF9lbWJlck1ldGFsV2F0Y2hfa2V5LndhdGNo
S2V5KG9iaiwga2V5TmFtZSwgbSk7CisgIH0KKworICBmdW5jdGlvbiByZW1vdmVDaGFpbldhdGNo
ZXIob2JqLCBrZXlOYW1lLCBub2RlKSB7CisgICAgaWYgKCFpc09iamVjdChvYmopKSB7CisgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgdmFyIG0gPSBfZW1iZXJNZXRhbE1ldGEucGVla01ldGEo
b2JqKTsKKworICAgIGlmICghbSB8fCAhbS5yZWFkYWJsZUNoYWluV2F0Y2hlcnMoKSkgeworICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIG1ha2UgbWV0YSB3cml0YWJsZQorICAgIG0gPSBf
ZW1iZXJNZXRhbE1ldGEubWV0YShvYmopOworCisgICAgbS5yZWFkYWJsZUNoYWluV2F0Y2hlcnMo
KS5yZW1vdmUoa2V5TmFtZSwgbm9kZSk7CisKKyAgICBfZW1iZXJNZXRhbFdhdGNoX2tleS51bndh
dGNoS2V5KG9iaiwga2V5TmFtZSwgbSk7CisgIH0KKworICAvLyBBIENoYWluTm9kZSB3YXRjaGVz
IGEgc2luZ2xlIGtleSBvbiBhbiBvYmplY3QuIElmIHlvdSBwcm92aWRlIGEgc3RhcnRpbmcKKyAg
Ly8gdmFsdWUgZm9yIHRoZSBrZXkgdGhlbiB0aGUgbm9kZSB3b24ndCBhY3R1YWxseSB3YXRjaCBp
dC4gRm9yIGEgcm9vdCBub2RlCisgIC8vIHBhc3MgbnVsbCBmb3IgcGFyZW50IGFuZCBrZXkgYW5k
IG9iamVjdCBmb3IgdmFsdWUuCisgIGZ1bmN0aW9uIENoYWluTm9kZShwYXJlbnQsIGtleSwgdmFs
dWUpIHsKKyAgICB0aGlzLl9wYXJlbnQgPSBwYXJlbnQ7CisgICAgdGhpcy5fa2V5ID0ga2V5Owor
CisgICAgLy8gX3dhdGNoaW5nIGlzIHRydWUgd2hlbiBjYWxsaW5nIGdldCh0aGlzLl9wYXJlbnQs
IHRoaXMuX2tleSkgd2lsbAorICAgIC8vIHJldHVybiB0aGUgdmFsdWUgb2YgdGhpcyBub2RlLgor
ICAgIC8vCisgICAgLy8gSXQgaXMgZmFsc2UgZm9yIHRoZSByb290IG9mIGEgY2hhaW4gKGJlY2F1
c2Ugd2UgaGF2ZSBubyBwYXJlbnQpCisgICAgLy8gYW5kIGZvciBnbG9iYWwgcGF0aHMgKGJlY2F1
c2UgdGhlIHBhcmVudCBub2RlIGlzIHRoZSBvYmplY3Qgd2l0aAorICAgIC8vIHRoZSBvYnNlcnZl
ciBvbiBpdCkKKyAgICB0aGlzLl93YXRjaGluZyA9IHZhbHVlID09PSB1bmRlZmluZWQ7CisKKyAg
ICB0aGlzLl9jaGFpbnMgPSB1bmRlZmluZWQ7CisgICAgdGhpcy5fb2JqZWN0ID0gdW5kZWZpbmVk
OworICAgIHRoaXMuY291bnQgPSAwOworCisgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTsKKyAgICB0
aGlzLl9wYXRocyA9IHt9OworICAgIGlmICh0aGlzLl93YXRjaGluZykgeworICAgICAgdGhpcy5f
b2JqZWN0ID0gcGFyZW50LnZhbHVlKCk7CisgICAgICBpZiAodGhpcy5fb2JqZWN0KSB7CisgICAg
ICAgIGFkZENoYWluV2F0Y2hlcih0aGlzLl9vYmplY3QsIHRoaXMuX2tleSwgdGhpcyk7CisgICAg
ICB9CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gbGF6eUdldChvYmosIGtleSkgeworICAgIGlm
ICghb2JqKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgdmFyIG1ldGEgPSBfZW1iZXJN
ZXRhbE1ldGEucGVla01ldGEob2JqKTsKKworICAgIC8vIGNoZWNrIGlmIG9iamVjdCBtZWFudCBv
bmx5IHRvIGJlIGEgcHJvdG90eXBlCisgICAgaWYgKG1ldGEgJiYgbWV0YS5wcm90byA9PT0gb2Jq
KSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gVXNlIGBnZXRgIGlmIHRoZSByZXR1
cm4gdmFsdWUgaXMgYW4gRWFjaFByb3h5IG9yIGFuIHVuY2FjaGVhYmxlIHZhbHVlLgorICAgIGlm
IChpc1ZvbGF0aWxlKG9ialtrZXldKSkgeworICAgICAgcmV0dXJuIF9lbWJlck1ldGFsUHJvcGVy
dHlfZ2V0LmdldChvYmosIGtleSk7CisgICAgICAvLyBPdGhlcndpc2UgYXR0ZW1wdCB0byBnZXQg
dGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgY29tcHV0ZWQgcHJvcGVydHkKKyAgICB9IGVsc2Ugewor
ICAgICAgICB2YXIgY2FjaGUgPSBtZXRhLnJlYWRhYmxlQ2FjaGUoKTsKKyAgICAgICAgaWYgKGNh
Y2hlICYmIGtleSBpbiBjYWNoZSkgeworICAgICAgICAgIHJldHVybiBjYWNoZVtrZXldOworICAg
ICAgICB9CisgICAgICB9CisgIH0KKworICBDaGFpbk5vZGUucHJvdG90eXBlID0geworICAgIHZh
bHVlOiBmdW5jdGlvbiAoKSB7CisgICAgICBpZiAodGhpcy5fdmFsdWUgPT09IHVuZGVmaW5lZCAm
JiB0aGlzLl93YXRjaGluZykgeworICAgICAgICB2YXIgb2JqID0gdGhpcy5fcGFyZW50LnZhbHVl
KCk7CisgICAgICAgIHRoaXMuX3ZhbHVlID0gbGF6eUdldChvYmosIHRoaXMuX2tleSk7CisgICAg
ICB9CisgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7CisgICAgfSwKKworICAgIGRlc3Ryb3k6IGZ1
bmN0aW9uICgpIHsKKyAgICAgIGlmICh0aGlzLl93YXRjaGluZykgeworICAgICAgICB2YXIgb2Jq
ID0gdGhpcy5fb2JqZWN0OworICAgICAgICBpZiAob2JqKSB7CisgICAgICAgICAgcmVtb3ZlQ2hh
aW5XYXRjaGVyKG9iaiwgdGhpcy5fa2V5LCB0aGlzKTsKKyAgICAgICAgfQorICAgICAgICB0aGlz
Ll93YXRjaGluZyA9IGZhbHNlOyAvLyBzbyBmdXR1cmUgY2FsbHMgZG8gbm90aGluZworICAgICAg
fQorICAgIH0sCisKKyAgICAvLyBjb3BpZXMgYSB0b3AgbGV2ZWwgb2JqZWN0IG9ubHkKKyAgICBj
b3B5OiBmdW5jdGlvbiAob2JqKSB7CisgICAgICB2YXIgcmV0ID0gbmV3IENoYWluTm9kZShudWxs
LCBudWxsLCBvYmopOworICAgICAgdmFyIHBhdGhzID0gdGhpcy5fcGF0aHM7CisgICAgICB2YXIg
cGF0aDsKKworICAgICAgZm9yIChwYXRoIGluIHBhdGhzKSB7CisgICAgICAgIC8vIHRoaXMgY2hl
Y2sgd2lsbCBhbHNvIGNhdGNoIG5vbi1udW1iZXIgdmFscy4KKyAgICAgICAgaWYgKHBhdGhzW3Bh
dGhdIDw9IDApIHsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICByZXQu
YWRkKHBhdGgpOworICAgICAgfQorICAgICAgcmV0dXJuIHJldDsKKyAgICB9LAorCisgICAgLy8g
Y2FsbGVkIG9uIHRoZSByb290IG5vZGUgb2YgYSBjaGFpbiB0byBzZXR1cCB3YXRjaGVycyBvbiB0
aGUgc3BlY2lmaWVkCisgICAgLy8gcGF0aC4KKyAgICBhZGQ6IGZ1bmN0aW9uIChwYXRoKSB7Cisg
ICAgICB2YXIgcGF0aHMgPSB0aGlzLl9wYXRoczsKKyAgICAgIHBhdGhzW3BhdGhdID0gKHBhdGhz
W3BhdGhdIHx8IDApICsgMTsKKworICAgICAgdmFyIGtleSA9IGZpcnN0S2V5KHBhdGgpOworICAg
ICAgdmFyIHRhaWwgPSBwYXRoLnNsaWNlKGtleS5sZW5ndGggKyAxKTsKKworICAgICAgdGhpcy5j
aGFpbihrZXksIHRhaWwpOworICAgIH0sCisKKyAgICAvLyBjYWxsZWQgb24gdGhlIHJvb3Qgbm9k
ZSBvZiBhIGNoYWluIHRvIHRlYXJkb3duIHdhdGNoZXIgb24gdGhlIHNwZWNpZmllZAorICAgIC8v
IHBhdGgKKyAgICByZW1vdmU6IGZ1bmN0aW9uIChwYXRoKSB7CisgICAgICB2YXIgcGF0aHMgPSB0
aGlzLl9wYXRoczsKKyAgICAgIGlmIChwYXRoc1twYXRoXSA+IDApIHsKKyAgICAgICAgcGF0aHNb
cGF0aF0tLTsKKyAgICAgIH0KKworICAgICAgdmFyIGtleSA9IGZpcnN0S2V5KHBhdGgpOworICAg
ICAgdmFyIHRhaWwgPSBwYXRoLnNsaWNlKGtleS5sZW5ndGggKyAxKTsKKworICAgICAgdGhpcy51
bmNoYWluKGtleSwgdGFpbCk7CisgICAgfSwKKworICAgIGNoYWluOiBmdW5jdGlvbiAoa2V5LCBw
YXRoKSB7CisgICAgICB2YXIgY2hhaW5zID0gdGhpcy5fY2hhaW5zOworICAgICAgdmFyIG5vZGU7
CisgICAgICBpZiAoY2hhaW5zID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgY2hhaW5zID0gdGhp
cy5fY2hhaW5zID0gbmV3IF9lbWJlck1ldGFsRW1wdHlfb2JqZWN0LmRlZmF1bHQoKTsKKyAgICAg
IH0gZWxzZSB7CisgICAgICAgIG5vZGUgPSBjaGFpbnNba2V5XTsKKyAgICAgIH0KKworICAgICAg
aWYgKG5vZGUgPT09IHVuZGVmaW5lZCkgeworICAgICAgICBub2RlID0gY2hhaW5zW2tleV0gPSBu
ZXcgQ2hhaW5Ob2RlKHRoaXMsIGtleSwgdW5kZWZpbmVkKTsKKyAgICAgIH0KKworICAgICAgbm9k
ZS5jb3VudCsrOyAvLyBjb3VudCBjaGFpbnMuLi4KKworICAgICAgLy8gY2hhaW4gcmVzdCBvZiBw
YXRoIGlmIHRoZXJlIGlzIG9uZQorICAgICAgaWYgKHBhdGgpIHsKKyAgICAgICAga2V5ID0gZmly
c3RLZXkocGF0aCk7CisgICAgICAgIHBhdGggPSBwYXRoLnNsaWNlKGtleS5sZW5ndGggKyAxKTsK
KyAgICAgICAgbm9kZS5jaGFpbihrZXksIHBhdGgpOworICAgICAgfQorICAgIH0sCisKKyAgICB1
bmNoYWluOiBmdW5jdGlvbiAoa2V5LCBwYXRoKSB7CisgICAgICB2YXIgY2hhaW5zID0gdGhpcy5f
Y2hhaW5zOworICAgICAgdmFyIG5vZGUgPSBjaGFpbnNba2V5XTsKKworICAgICAgLy8gdW5jaGFp
biByZXN0IG9mIHBhdGggZmlyc3QuLi4KKyAgICAgIGlmIChwYXRoICYmIHBhdGgubGVuZ3RoID4g
MSkgeworICAgICAgICB2YXIgbmV4dEtleSA9IGZpcnN0S2V5KHBhdGgpOworICAgICAgICB2YXIg
bmV4dFBhdGggPSBwYXRoLnNsaWNlKG5leHRLZXkubGVuZ3RoICsgMSk7CisgICAgICAgIG5vZGUu
dW5jaGFpbihuZXh0S2V5LCBuZXh0UGF0aCk7CisgICAgICB9CisKKyAgICAgIC8vIGRlbGV0ZSBu
b2RlIGlmIG5lZWRlZC4KKyAgICAgIG5vZGUuY291bnQtLTsKKyAgICAgIGlmIChub2RlLmNvdW50
IDw9IDApIHsKKyAgICAgICAgY2hhaW5zW25vZGUuX2tleV0gPSB1bmRlZmluZWQ7CisgICAgICAg
IG5vZGUuZGVzdHJveSgpOworICAgICAgfQorICAgIH0sCisKKyAgICBub3RpZnk6IGZ1bmN0aW9u
IChyZXZhbGlkYXRlLCBhZmZlY3RlZCkgeworICAgICAgaWYgKHJldmFsaWRhdGUgJiYgdGhpcy5f
d2F0Y2hpbmcpIHsKKyAgICAgICAgdmFyIG9iaiA9IHRoaXMuX3BhcmVudC52YWx1ZSgpOworICAg
ICAgICBpZiAob2JqICE9PSB0aGlzLl9vYmplY3QpIHsKKyAgICAgICAgICByZW1vdmVDaGFpbldh
dGNoZXIodGhpcy5fb2JqZWN0LCB0aGlzLl9rZXksIHRoaXMpOworICAgICAgICAgIHRoaXMuX29i
amVjdCA9IG9iajsKKyAgICAgICAgICBhZGRDaGFpbldhdGNoZXIob2JqLCB0aGlzLl9rZXksIHRo
aXMpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3ZhbHVlID0gdW5kZWZpbmVkOworICAgICAg
fQorCisgICAgICAvLyB0aGVuIG5vdGlmeSBjaGFpbnMuLi4KKyAgICAgIHZhciBjaGFpbnMgPSB0
aGlzLl9jaGFpbnM7CisgICAgICB2YXIgbm9kZTsKKyAgICAgIGlmIChjaGFpbnMpIHsKKyAgICAg
ICAgZm9yICh2YXIga2V5IGluIGNoYWlucykgeworICAgICAgICAgIG5vZGUgPSBjaGFpbnNba2V5
XTsKKyAgICAgICAgICBpZiAobm9kZSAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICBub2Rl
Lm5vdGlmeShyZXZhbGlkYXRlLCBhZmZlY3RlZCk7CisgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICB9CisKKyAgICAgIGlmIChhZmZlY3RlZCAmJiB0aGlzLl9wYXJlbnQpIHsKKyAgICAgICAg
dGhpcy5fcGFyZW50LnBvcHVsYXRlQWZmZWN0ZWQodGhpcy5fa2V5LCAxLCBhZmZlY3RlZCk7Cisg
ICAgICB9CisgICAgfSwKKworICAgIHBvcHVsYXRlQWZmZWN0ZWQ6IGZ1bmN0aW9uIChwYXRoLCBk
ZXB0aCwgYWZmZWN0ZWQpIHsKKyAgICAgIGlmICh0aGlzLl9rZXkpIHsKKyAgICAgICAgcGF0aCA9
IHRoaXMuX2tleSArICcuJyArIHBhdGg7CisgICAgICB9CisKKyAgICAgIGlmICh0aGlzLl9wYXJl
bnQpIHsKKyAgICAgICAgdGhpcy5fcGFyZW50LnBvcHVsYXRlQWZmZWN0ZWQocGF0aCwgZGVwdGgg
KyAxLCBhZmZlY3RlZCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAoZGVwdGggPiAxKSB7
CisgICAgICAgICAgYWZmZWN0ZWQucHVzaCh0aGlzLnZhbHVlKCksIHBhdGgpOworICAgICAgICB9
CisgICAgICB9CisgICAgfQorICB9OworCisgIGZ1bmN0aW9uIGZpbmlzaENoYWlucyhvYmopIHsK
KyAgICAvLyBXZSBvbmx5IGNyZWF0ZSBtZXRhIGlmIHdlIHJlYWxseSBoYXZlIHRvCisgICAgdmFy
IG0gPSBfZW1iZXJNZXRhbE1ldGEucGVla01ldGEob2JqKTsKKyAgICBpZiAobSkgeworICAgICAg
bSA9IF9lbWJlck1ldGFsTWV0YS5tZXRhKG9iaik7CisKKyAgICAgIC8vIGZpbmlzaCBhbnkgY3Vy
cmVudCBjaGFpbnMgbm9kZSB3YXRjaGVycyB0aGF0IHJlZmVyZW5jZSBvYmoKKyAgICAgIHZhciBj
aGFpbldhdGNoZXJzID0gbS5yZWFkYWJsZUNoYWluV2F0Y2hlcnMoKTsKKyAgICAgIGlmIChjaGFp
bldhdGNoZXJzKSB7CisgICAgICAgIGNoYWluV2F0Y2hlcnMucmV2YWxpZGF0ZUFsbCgpOworICAg
ICAgfQorICAgICAgLy8gZW5zdXJlIHRoYXQgaWYgd2UgaGF2ZSBpbmhlcml0ZWQgYW55IGNoYWlu
cyB0aGV5IGhhdmUgYmVlbgorICAgICAgLy8gY29waWVkIG9udG8gb3VyIG93biBtZXRhLgorICAg
ICAgaWYgKG0ucmVhZGFibGVDaGFpbnMoKSkgeworICAgICAgICBtLndyaXRhYmxlQ2hhaW5zKCk7
CisgICAgICB9CisgICAgfQorICB9CisKKyAgZXhwb3J0cy5yZW1vdmVDaGFpbldhdGNoZXIgPSBy
ZW1vdmVDaGFpbldhdGNoZXI7CisgIGV4cG9ydHMuQ2hhaW5Ob2RlID0gQ2hhaW5Ob2RlOworfSk7
CitlbmlmZWQoJ2VtYmVyLW1ldGFsL2NvbXB1dGVkJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFs
L2RlYnVnJywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCcsICdlbWJlci1tZXRhbC91dGlscycs
ICdlbWJlci1tZXRhbC9tZXRhJywgJ2VtYmVyLW1ldGFsL2V4cGFuZF9wcm9wZXJ0aWVzJywgJ2Vt
YmVyLW1ldGFsL2Vycm9yJywgJ2VtYmVyLW1ldGFsL3Byb3BlcnRpZXMnLCAnZW1iZXItbWV0YWwv
cHJvcGVydHlfZXZlbnRzJywgJ2VtYmVyLW1ldGFsL2RlcGVuZGVudF9rZXlzJ10sIGZ1bmN0aW9u
IChleHBvcnRzLCBfZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJNZXRhbFByb3BlcnR5X3NldCwgX2Vt
YmVyTWV0YWxVdGlscywgX2VtYmVyTWV0YWxNZXRhLCBfZW1iZXJNZXRhbEV4cGFuZF9wcm9wZXJ0
aWVzLCBfZW1iZXJNZXRhbEVycm9yLCBfZW1iZXJNZXRhbFByb3BlcnRpZXMsIF9lbWJlck1ldGFs
UHJvcGVydHlfZXZlbnRzLCBfZW1iZXJNZXRhbERlcGVuZGVudF9rZXlzKSB7CisgICd1c2Ugc3Ry
aWN0JzsKKworICBleHBvcnRzLmRlZmF1bHQgPSBjb21wdXRlZDsKKworICAvKioKKyAgQG1vZHVs
ZSBlbWJlcgorICBAc3VibW9kdWxlIGVtYmVyLW1ldGFsCisgICovCisKKyAgZnVuY3Rpb24gVU5E
RUZJTkVEKCkge30KKworICB2YXIgREVFUF9FQUNIX1JFR0VYID0gL1wuQGVhY2hcLlteLl0rXC4v
OworCisgIC8qKgorICAgIEEgY29tcHV0ZWQgcHJvcGVydHkgdHJhbnNmb3JtcyBhbiBvYmplY3Qg
bGl0ZXJhbCB3aXRoIG9iamVjdCdzIGFjY2Vzc29yIGZ1bmN0aW9uKHMpIGludG8gYSBwcm9wZXJ0
eS4KKyAgCisgICAgQnkgZGVmYXVsdCB0aGUgZnVuY3Rpb24gYmFja2luZyB0aGUgY29tcHV0ZWQg
cHJvcGVydHkgd2lsbCBvbmx5IGJlIGNhbGxlZAorICAgIG9uY2UgYW5kIHRoZSByZXN1bHQgd2ls
bCBiZSBjYWNoZWQuIFlvdSBjYW4gc3BlY2lmeSB2YXJpb3VzIHByb3BlcnRpZXMKKyAgICB0aGF0
IHlvdXIgY29tcHV0ZWQgcHJvcGVydHkgZGVwZW5kcyBvbi4gVGhpcyB3aWxsIGZvcmNlIHRoZSBj
YWNoZWQKKyAgICByZXN1bHQgdG8gYmUgcmVjb21wdXRlZCBpZiB0aGUgZGVwZW5kZW5jaWVzIGFy
ZSBtb2RpZmllZC4KKyAgCisgICAgSW4gdGhlIGZvbGxvd2luZyBleGFtcGxlIHdlIGRlY2xhcmUg
YSBjb21wdXRlZCBwcm9wZXJ0eSAtIGBmdWxsTmFtZWAgLSBieSBjYWxsaW5nCisgICAgYC5FbWJl
ci5jb21wdXRlZCgpYCB3aXRoIHByb3BlcnR5IGRlcGVuZGVuY2llcyAoYGZpcnN0TmFtZWAgYW5k
IGBsYXN0TmFtZWApIGFzIGxlYWRpbmcgYXJndW1lbnRzIGFuZCBnZXR0ZXIgYWNjZXNzb3IgZnVu
Y3Rpb24uIFRoZSBgZnVsbE5hbWVgIGdldHRlciBmdW5jdGlvbgorICAgIHdpbGwgYmUgY2FsbGVk
IG9uY2UgKHJlZ2FyZGxlc3Mgb2YgaG93IG1hbnkgdGltZXMgaXQgaXMgYWNjZXNzZWQpIGFzIGxv
bmcKKyAgICBhcyBpdHMgZGVwZW5kZW5jaWVzIGhhdmUgbm90IGNoYW5nZWQuIE9uY2UgYGZpcnN0
TmFtZWAgb3IgYGxhc3ROYW1lYCBhcmUgdXBkYXRlZAorICAgIGFueSBmdXR1cmUgY2FsbHMgKG9y
IGFueXRoaW5nIGJvdW5kKSB0byBgZnVsbE5hbWVgIHdpbGwgaW5jb3Jwb3JhdGUgdGhlIG5ldwor
ICAgIHZhbHVlcy4KKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIGxldCBQZXJzb24gPSBFbWJl
ci5PYmplY3QuZXh0ZW5kKHsKKyAgICAgIC8vIHRoZXNlIHdpbGwgYmUgc3VwcGxpZWQgYnkgYGNy
ZWF0ZWAKKyAgICAgIGZpcnN0TmFtZTogbnVsbCwKKyAgICAgIGxhc3ROYW1lOiBudWxsLAorICAK
KyAgICAgIGZ1bGxOYW1lOiBFbWJlci5jb21wdXRlZCgnZmlyc3ROYW1lJywgJ2xhc3ROYW1lJywg
ZnVuY3Rpb24oKSB7CisgICAgICAgIGxldCBmaXJzdE5hbWUgPSB0aGlzLmdldCgnZmlyc3ROYW1l
JyksCisgICAgICAgICAgICBsYXN0TmFtZSAgPSB0aGlzLmdldCgnbGFzdE5hbWUnKTsKKyAgCisg
ICAgICAgIHJldHVybiBmaXJzdE5hbWUgKyAnICcgKyBsYXN0TmFtZTsKKyAgICAgIH0pCisgICAg
fSk7CisgIAorICAgIGxldCB0b20gPSBQZXJzb24uY3JlYXRlKHsKKyAgICAgIGZpcnN0TmFtZTog
J1RvbScsCisgICAgICBsYXN0TmFtZTogJ0RhbGUnCisgICAgfSk7CisgIAorICAgIHRvbS5nZXQo
J2Z1bGxOYW1lJykgLy8gJ1RvbSBEYWxlJworICAgIGBgYAorICAKKyAgICBZb3UgY2FuIGFsc28g
ZGVmaW5lIHdoYXQgRW1iZXIgc2hvdWxkIGRvIHdoZW4gc2V0dGluZyBhIGNvbXB1dGVkIHByb3Bl
cnR5IGJ5IHByb3ZpZGluZyBhZGRpdGlvbmFsIGZ1bmN0aW9uIChgc2V0YCkgaW4gaGFzaCBhcmd1
bWVudC4KKyAgICBJZiB5b3UgdHJ5IHRvIHNldCBhIGNvbXB1dGVkIHByb3BlcnR5LCBpdCB3aWxs
IHRyeSB0byBpbnZva2Ugc2V0dGVyIGFjY2Vzc29yIGZ1bmN0aW9uIHdpdGggdGhlIGtleSBhbmQK
KyAgICB2YWx1ZSB5b3Ugd2FudCB0byBzZXQgaXQgdG8gYXMgYXJndW1lbnRzLgorICAKKyAgICBg
YGBqYXZhc2NyaXB0CisgICAgbGV0IFBlcnNvbiA9IEVtYmVyLk9iamVjdC5leHRlbmQoeworICAg
ICAgLy8gdGhlc2Ugd2lsbCBiZSBzdXBwbGllZCBieSBgY3JlYXRlYAorICAgICAgZmlyc3ROYW1l
OiBudWxsLAorICAgICAgbGFzdE5hbWU6IG51bGwsCisgIAorICAgICAgZnVsbE5hbWU6IEVtYmVy
LmNvbXB1dGVkKCdmaXJzdE5hbWUnLCAnbGFzdE5hbWUnLCB7CisgICAgICAgIGdldChrZXkpIHsK
KyAgICAgICAgICBsZXQgZmlyc3ROYW1lID0gdGhpcy5nZXQoJ2ZpcnN0TmFtZScpLAorICAgICAg
ICAgICAgICBsYXN0TmFtZSAgPSB0aGlzLmdldCgnbGFzdE5hbWUnKTsKKyAgCisgICAgICAgICAg
cmV0dXJuIGZpcnN0TmFtZSArICcgJyArIGxhc3ROYW1lOworICAgICAgICB9LAorICAgICAgICBz
ZXQoa2V5LCB2YWx1ZSkgeworICAgICAgICAgIGxldCBbZmlyc3ROYW1lLCBsYXN0TmFtZV0gPSB2
YWx1ZS5zcGxpdCgnICcpOworICAKKyAgICAgICAgICB0aGlzLnNldCgnZmlyc3ROYW1lJywgZmly
c3ROYW1lKTsKKyAgICAgICAgICB0aGlzLnNldCgnbGFzdE5hbWUnLCBsYXN0TmFtZSk7CisgIAor
ICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgfQorICAgICAgfSkKKyAgICB9KTsKKyAg
CisgICAgbGV0IHBlcnNvbiA9IFBlcnNvbi5jcmVhdGUoKTsKKyAgCisgICAgcGVyc29uLnNldCgn
ZnVsbE5hbWUnLCAnUGV0ZXIgV2FnZW5ldCcpOworICAgIHBlcnNvbi5nZXQoJ2ZpcnN0TmFtZScp
OyAvLyAnUGV0ZXInCisgICAgcGVyc29uLmdldCgnbGFzdE5hbWUnKTsgIC8vICdXYWdlbmV0Jwor
ICAgIGBgYAorICAKKyAgICBZb3UgY2FuIG92ZXJ3cml0ZSBjb21wdXRlZCBwcm9wZXJ0eSB3aXRo
IG5vcm1hbCBwcm9wZXJ0eSAobm8gbG9uZ2VyIGNvbXB1dGVkKSwgdGhhdCB3b24ndCBjaGFuZ2Ug
aWYgZGVwZW5kZW5jaWVzIGNoYW5nZSwgaWYgeW91IHNldCBjb21wdXRlZCBwcm9wZXJ0eSBhbmQg
aXQgd29uJ3QgaGF2ZSBzZXR0ZXIgYWNjZXNzb3IgZnVuY3Rpb24gZGVmaW5lZC4KKyAgCisgICAg
WW91IGNhbiBhbHNvIG1hcmsgY29tcHV0ZWQgcHJvcGVydHkgYXMgYC5yZWFkT25seSgpYCBhbmQg
YmxvY2sgYWxsIGF0dGVtcHRzIHRvIHNldCBpdC4KKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAg
IGxldCBQZXJzb24gPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKKyAgICAgIC8vIHRoZXNlIHdpbGwg
YmUgc3VwcGxpZWQgYnkgYGNyZWF0ZWAKKyAgICAgIGZpcnN0TmFtZTogbnVsbCwKKyAgICAgIGxh
c3ROYW1lOiBudWxsLAorICAKKyAgICAgIGZ1bGxOYW1lOiBFbWJlci5jb21wdXRlZCgnZmlyc3RO
YW1lJywgJ2xhc3ROYW1lJywgeworICAgICAgICBnZXQoa2V5KSB7CisgICAgICAgICAgbGV0IGZp
cnN0TmFtZSA9IHRoaXMuZ2V0KCdmaXJzdE5hbWUnKTsKKyAgICAgICAgICBsZXQgbGFzdE5hbWUg
ID0gdGhpcy5nZXQoJ2xhc3ROYW1lJyk7CisgIAorICAgICAgICAgIHJldHVybiBmaXJzdE5hbWUg
KyAnICcgKyBsYXN0TmFtZTsKKyAgICAgICAgfQorICAgICAgfSkucmVhZE9ubHkoKQorICAgIH0p
OworICAKKyAgICBsZXQgcGVyc29uID0gUGVyc29uLmNyZWF0ZSgpOworICAgIHBlcnNvbi5zZXQo
J2Z1bGxOYW1lJywgJ1BldGVyIFdhZ2VuZXQnKTsgLy8gVW5jYXVnaHQgRXJyb3I6IENhbm5vdCBz
ZXQgcmVhZC1vbmx5IHByb3BlcnR5ICJmdWxsTmFtZSIgb24gb2JqZWN0OiA8KC4uLik6ZW1iZXJY
WFg+CisgICAgYGBgCisgIAorICAgIEFkZGl0aW9uYWwgcmVzb3VyY2VzOgorICAgIC0gW05ldyBD
UCBzeW50YXggUkZDXShodHRwczovL2dpdGh1Yi5jb20vZW1iZXJqcy9yZmNzL2Jsb2IvbWFzdGVy
L3RleHQvMDAxMS1pbXByb3ZlZC1jcC1zeW50YXgubWQpCisgICAgLSBbTmV3IGNvbXB1dGVkIHN5
bnRheCBleHBsYWluZWQgaW4gIkVtYmVyIDEuMTIgcmVsZWFzZWQiIF0oaHR0cDovL2VtYmVyanMu
Y29tL2Jsb2cvMjAxNS8wNS8xMy9lbWJlci0xLTEyLXJlbGVhc2VkLmh0bWwjdG9jX25ldy1jb21w
dXRlZC1zeW50YXgpCisgIAorICAgIEBjbGFzcyBDb21wdXRlZFByb3BlcnR5CisgICAgQG5hbWVz
cGFjZSBFbWJlcgorICAgIEBwdWJsaWMKKyAgKi8KKyAgZnVuY3Rpb24gQ29tcHV0ZWRQcm9wZXJ0
eShjb25maWcsIG9wdHMpIHsKKyAgICB0aGlzLmlzRGVzY3JpcHRvciA9IHRydWU7CisgICAgaWYg
KHR5cGVvZiBjb25maWcgPT09ICdmdW5jdGlvbicpIHsKKyAgICAgIHRoaXMuX2dldHRlciA9IGNv
bmZpZzsKKyAgICB9IGVsc2UgeworICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ0VtYmVy
LmNvbXB1dGVkIGV4cGVjdHMgYSBmdW5jdGlvbiBvciBhbiBvYmplY3QgYXMgbGFzdCBhcmd1bWVu
dC4nLCB0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShjb25maWcp
KTsKKyAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdDb25maWcgb2JqZWN0IHBhc2VkIHRv
IGEgRW1iZXIuY29tcHV0ZWQgY2FuIG9ubHkgY29udGFpbiBgZ2V0YCBvciBgc2V0YCBrZXlzLics
IChmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoY29uZmlnKTsK
KyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7CisgICAgICAg
ICAgaWYgKGtleXNbaV0gIT09ICdnZXQnICYmIGtleXNbaV0gIT09ICdzZXQnKSB7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgfSkoKSk7CisgICAgICB0aGlzLl9nZXR0ZXIgPSBjb25maWcuZ2V0Owor
ICAgICAgdGhpcy5fc2V0dGVyID0gY29uZmlnLnNldDsKKyAgICB9CisgICAgX2VtYmVyTWV0YWxE
ZWJ1Zy5hc3NlcnQoJ0NvbXB1dGVkIHByb3BlcnRpZXMgbXVzdCByZWNlaXZlIGEgZ2V0dGVyIG9y
IGEgc2V0dGVyLCB5b3UgcGFzc2VkIG5vbmUuJywgISF0aGlzLl9nZXR0ZXIgfHwgISF0aGlzLl9z
ZXR0ZXIpOworICAgIHRoaXMuX2RlcGVuZGVudEtleXMgPSB1bmRlZmluZWQ7CisgICAgdGhpcy5f
c3VzcGVuZGVkID0gdW5kZWZpbmVkOworICAgIHRoaXMuX21ldGEgPSB1bmRlZmluZWQ7CisgICAg
dGhpcy5fdm9sYXRpbGUgPSBmYWxzZTsKKyAgICB0aGlzLl9kZXBlbmRlbnRLZXlzID0gb3B0cyAm
JiBvcHRzLmRlcGVuZGVudEtleXM7CisgICAgdGhpcy5fcmVhZE9ubHkgPSBmYWxzZTsKKyAgfQor
CisgIENvbXB1dGVkUHJvcGVydHkucHJvdG90eXBlID0gbmV3IF9lbWJlck1ldGFsUHJvcGVydGll
cy5EZXNjcmlwdG9yKCk7CisKKyAgdmFyIENvbXB1dGVkUHJvcGVydHlQcm90b3R5cGUgPSBDb21w
dXRlZFByb3BlcnR5LnByb3RvdHlwZTsKKworICAvKioKKyAgICBDYWxsIG9uIGEgY29tcHV0ZWQg
cHJvcGVydHkgdG8gc2V0IGl0IGludG8gbm9uLWNhY2hlZCBtb2RlLiBXaGVuIGluIHRoaXMKKyAg
ICBtb2RlIHRoZSBjb21wdXRlZCBwcm9wZXJ0eSB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGNhY2hl
IHRoZSByZXR1cm4gdmFsdWUuCisgIAorICAgIEl0IGFsc28gZG9lcyBub3QgYXV0b21hdGljYWxs
eSBmaXJlIGFueSBjaGFuZ2UgZXZlbnRzLiBZb3UgbXVzdCBtYW51YWxseSBub3RpZnkKKyAgICBh
bnkgY2hhbmdlcyBpZiB5b3Ugd2FudCB0byBvYnNlcnZlIHRoaXMgcHJvcGVydHkuCisgIAorICAg
IERlcGVuZGVuY3kga2V5cyBoYXZlIG5vIGVmZmVjdCBvbiB2b2xhdGlsZSBwcm9wZXJ0aWVzIGFz
IHRoZXkgYXJlIGZvciBjYWNoZQorICAgIGludmFsaWRhdGlvbiBhbmQgbm90aWZpY2F0aW9uIHdo
ZW4gY2FjaGVkIHZhbHVlIGlzIGludmFsaWRhdGVkLgorICAKKyAgICBgYGBqYXZhc2NyaXB0Cisg
ICAgbGV0IG91dHNpZGVTZXJ2aWNlID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7CisgICAgICB2YWx1
ZTogRW1iZXIuY29tcHV0ZWQoZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBPdXRzaWRlU2Vy
dmljZS5nZXRWYWx1ZSgpOworICAgICAgfSkudm9sYXRpbGUoKQorICAgIH0pLmNyZWF0ZSgpOwor
ICAgIGBgYAorICAKKyAgICBAbWV0aG9kIHZvbGF0aWxlCisgICAgQHJldHVybiB7RW1iZXIuQ29t
cHV0ZWRQcm9wZXJ0eX0gdGhpcworICAgIEBjaGFpbmFibGUKKyAgICBAcHVibGljCisgICovCisg
IENvbXB1dGVkUHJvcGVydHlQcm90b3R5cGUudm9sYXRpbGUgPSBmdW5jdGlvbiAoKSB7CisgICAg
dGhpcy5fdm9sYXRpbGUgPSB0cnVlOworICAgIHJldHVybiB0aGlzOworICB9OworCisgIC8qKgor
ICAgIENhbGwgb24gYSBjb21wdXRlZCBwcm9wZXJ0eSB0byBzZXQgaXQgaW50byByZWFkLW9ubHkg
bW9kZS4gV2hlbiBpbiB0aGlzCisgICAgbW9kZSB0aGUgY29tcHV0ZWQgcHJvcGVydHkgd2lsbCB0
aHJvdyBhbiBlcnJvciB3aGVuIHNldC4KKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIGxldCBQ
ZXJzb24gPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKKyAgICAgIGd1aWQ6IEVtYmVyLmNvbXB1dGVk
KGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gJ2d1aWQtZ3VpZC1ndWlkJzsKKyAgICAgIH0p
LnJlYWRPbmx5KCkKKyAgICB9KTsKKyAgCisgICAgbGV0IHBlcnNvbiA9IFBlcnNvbi5jcmVhdGUo
KTsKKyAgCisgICAgcGVyc29uLnNldCgnZ3VpZCcsICduZXctZ3VpZCcpOyAvLyB3aWxsIHRocm93
IGFuIGV4Y2VwdGlvbgorICAgIGBgYAorICAKKyAgICBAbWV0aG9kIHJlYWRPbmx5CisgICAgQHJl
dHVybiB7RW1iZXIuQ29tcHV0ZWRQcm9wZXJ0eX0gdGhpcworICAgIEBjaGFpbmFibGUKKyAgICBA
cHVibGljCisgICovCisgIENvbXB1dGVkUHJvcGVydHlQcm90b3R5cGUucmVhZE9ubHkgPSBmdW5j
dGlvbiAoKSB7CisgICAgdGhpcy5fcmVhZE9ubHkgPSB0cnVlOworICAgIF9lbWJlck1ldGFsRGVi
dWcuYXNzZXJ0KCdDb21wdXRlZCBwcm9wZXJ0aWVzIHRoYXQgZGVmaW5lIGEgc2V0dGVyIHVzaW5n
IHRoZSBuZXcgc3ludGF4IGNhbm5vdCBiZSByZWFkLW9ubHknLCAhKHRoaXMuX3JlYWRPbmx5ICYm
IHRoaXMuX3NldHRlciAmJiB0aGlzLl9zZXR0ZXIgIT09IHRoaXMuX2dldHRlcikpOworICAgIHJl
dHVybiB0aGlzOworICB9OworCisgIC8qKgorICAgIFNldHMgdGhlIGRlcGVuZGVudCBrZXlzIG9u
IHRoaXMgY29tcHV0ZWQgcHJvcGVydHkuIFBhc3MgYW55IG51bWJlciBvZgorICAgIGFyZ3VtZW50
cyBjb250YWluaW5nIGtleSBwYXRocyB0aGF0IHRoaXMgY29tcHV0ZWQgcHJvcGVydHkgZGVwZW5k
cyBvbi4KKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIGxldCBQcmVzaWRlbnQgPSBFbWJlci5P
YmplY3QuZXh0ZW5kKHsKKyAgICAgIGZ1bGxOYW1lOiBFbWJlci5jb21wdXRlZChmdW5jdGlvbigp
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCdmaXJzdE5hbWUnKSArICcgJyArIHRoaXMuZ2V0
KCdsYXN0TmFtZScpOworICAKKyAgICAgICAgLy8gVGVsbCBFbWJlciB0aGF0IHRoaXMgY29tcHV0
ZWQgcHJvcGVydHkgZGVwZW5kcyBvbiBmaXJzdE5hbWUKKyAgICAgICAgLy8gYW5kIGxhc3ROYW1l
CisgICAgICB9KS5wcm9wZXJ0eSgnZmlyc3ROYW1lJywgJ2xhc3ROYW1lJykKKyAgICB9KTsKKyAg
CisgICAgbGV0IHByZXNpZGVudCA9IFByZXNpZGVudC5jcmVhdGUoeworICAgICAgZmlyc3ROYW1l
OiAnQmFyYWNrJywKKyAgICAgIGxhc3ROYW1lOiAnT2JhbWEnCisgICAgfSk7CisgIAorICAgIHBy
ZXNpZGVudC5nZXQoJ2Z1bGxOYW1lJyk7IC8vICdCYXJhY2sgT2JhbWEnCisgICAgYGBgCisgIAor
ICAgIEBtZXRob2QgcHJvcGVydHkKKyAgICBAcGFyYW0ge1N0cmluZ30gcGF0aCogemVybyBvciBt
b3JlIHByb3BlcnR5IHBhdGhzCisgICAgQHJldHVybiB7RW1iZXIuQ29tcHV0ZWRQcm9wZXJ0eX0g
dGhpcworICAgIEBjaGFpbmFibGUKKyAgICBAcHVibGljCisgICovCisgIENvbXB1dGVkUHJvcGVy
dHlQcm90b3R5cGUucHJvcGVydHkgPSBmdW5jdGlvbiAoKSB7CisgICAgdmFyIGFyZ3M7CisKKyAg
ICB2YXIgYWRkQXJnID0gZnVuY3Rpb24gKHByb3BlcnR5KSB7CisgICAgICBfZW1iZXJNZXRhbERl
YnVnLndhcm4oJ0RlcGVuZGVudCBrZXlzIGNvbnRhaW5pbmcgQGVhY2ggb25seSB3b3JrIG9uZSBs
ZXZlbCBkZWVwLiAnICsgJ1lvdSBjYW5ub3QgdXNlIG5lc3RlZCBmb3JtcyBsaWtlIHRvZG9zLkBl
YWNoLm93bmVyLm5hbWUgb3IgdG9kb3MuQGVhY2gub3duZXIuQGVhY2gubmFtZS4gJyArICdQbGVh
c2UgY3JlYXRlIGFuIGludGVybWVkaWFyeSBjb21wdXRlZCBwcm9wZXJ0eS4nLCBERUVQX0VBQ0hf
UkVHRVgudGVzdChwcm9wZXJ0eSkgPT09IGZhbHNlLCB7IGlkOiAnZW1iZXItbWV0YWwuY29tcHV0
ZWQtZGVlcC1lYWNoJyB9KTsKKyAgICAgIGFyZ3MucHVzaChwcm9wZXJ0eSk7CisgICAgfTsKKwor
ICAgIGFyZ3MgPSBbXTsKKyAgICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7
IGkgPCBsOyBpKyspIHsKKyAgICAgIF9lbWJlck1ldGFsRXhwYW5kX3Byb3BlcnRpZXMuZGVmYXVs
dChhcmd1bWVudHNbaV0sIGFkZEFyZyk7CisgICAgfQorCisgICAgdGhpcy5fZGVwZW5kZW50S2V5
cyA9IGFyZ3M7CisgICAgcmV0dXJuIHRoaXM7CisgIH07CisKKyAgLyoqCisgICAgSW4gc29tZSBj
YXNlcywgeW91IG1heSB3YW50IHRvIGFubm90YXRlIGNvbXB1dGVkIHByb3BlcnRpZXMgd2l0aCBh
ZGRpdGlvbmFsCisgICAgbWV0YWRhdGEgYWJvdXQgaG93IHRoZXkgZnVuY3Rpb24gb3Igd2hhdCB2
YWx1ZXMgdGhleSBvcGVyYXRlIG9uLiBGb3IgZXhhbXBsZSwKKyAgICBjb21wdXRlZCBwcm9wZXJ0
eSBmdW5jdGlvbnMgbWF5IGNsb3NlIG92ZXIgdmFyaWFibGVzIHRoYXQgYXJlIHRoZW4gbm8gbG9u
Z2VyCisgICAgYXZhaWxhYmxlIGZvciBpbnRyb3NwZWN0aW9uLgorICAKKyAgICBZb3UgY2FuIHBh
c3MgYSBoYXNoIG9mIHRoZXNlIHZhbHVlcyB0byBhIGNvbXB1dGVkIHByb3BlcnR5IGxpa2UgdGhp
czoKKyAgCisgICAgYGBgCisgICAgcGVyc29uOiBFbWJlci5jb21wdXRlZChmdW5jdGlvbigpIHsK
KyAgICAgIGxldCBwZXJzb25JZCA9IHRoaXMuZ2V0KCdwZXJzb25JZCcpOworICAgICAgcmV0dXJu
IEFwcC5QZXJzb24uY3JlYXRlKHsgaWQ6IHBlcnNvbklkIH0pOworICAgIH0pLm1ldGEoeyB0eXBl
OiBBcHAuUGVyc29uIH0pCisgICAgYGBgCisgIAorICAgIFRoZSBoYXNoIHRoYXQgeW91IHBhc3Mg
dG8gdGhlIGBtZXRhKClgIGZ1bmN0aW9uIHdpbGwgYmUgc2F2ZWQgb24gdGhlCisgICAgY29tcHV0
ZWQgcHJvcGVydHkgZGVzY3JpcHRvciB1bmRlciB0aGUgYF9tZXRhYCBrZXkuIEVtYmVyIHJ1bnRp
bWUKKyAgICBleHBvc2VzIGEgcHVibGljIEFQSSBmb3IgcmV0cmlldmluZyB0aGVzZSB2YWx1ZXMg
ZnJvbSBjbGFzc2VzLAorICAgIHZpYSB0aGUgYG1ldGFGb3JQcm9wZXJ0eSgpYCBmdW5jdGlvbi4K
KyAgCisgICAgQG1ldGhvZCBtZXRhCisgICAgQHBhcmFtIHtPYmplY3R9IG1ldGEKKyAgICBAY2hh
aW5hYmxlCisgICAgQHB1YmxpYworICAqLworICBDb21wdXRlZFByb3BlcnR5UHJvdG90eXBlLm1l
dGEgPSBmdW5jdGlvbiAobWV0YSkgeworICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7
CisgICAgICByZXR1cm4gdGhpcy5fbWV0YSB8fCB7fTsKKyAgICB9IGVsc2UgeworICAgICAgdGhp
cy5fbWV0YSA9IG1ldGE7CisgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisgIH07CisKKyAgLy8g
aW52YWxpZGF0ZSBjYWNoZSB3aGVuIENQIGtleSBjaGFuZ2VzCisgIENvbXB1dGVkUHJvcGVydHlQ
cm90b3R5cGUuZGlkQ2hhbmdlID0gZnVuY3Rpb24gKG9iaiwga2V5TmFtZSkgeworICAgIC8vIF9z
dXNwZW5kZWQgaXMgc2V0IHZpYSBhIENQLnNldCB0byBlbnN1cmUgd2UgZG9uJ3QgY2xlYXIKKyAg
ICAvLyB0aGUgY2FjaGVkIHZhbHVlIHNldCBieSB0aGUgc2V0dGVyCisgICAgaWYgKHRoaXMuX3Zv
bGF0aWxlIHx8IHRoaXMuX3N1c3BlbmRlZCA9PT0gb2JqKSB7CisgICAgICByZXR1cm47CisgICAg
fQorCisgICAgLy8gZG9uJ3QgY3JlYXRlIG9iamVjdHMganVzdCB0byBpbnZhbGlkYXRlCisgICAg
dmFyIG1ldGEgPSBfZW1iZXJNZXRhbE1ldGEucGVla01ldGEob2JqKTsKKyAgICBpZiAoIW1ldGEg
fHwgbWV0YS5zb3VyY2UgIT09IG9iaikgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZh
ciBjYWNoZSA9IG1ldGEucmVhZGFibGVDYWNoZSgpOworICAgIGlmIChjYWNoZSAmJiBjYWNoZVtr
ZXlOYW1lXSAhPT0gdW5kZWZpbmVkKSB7CisgICAgICBjYWNoZVtrZXlOYW1lXSA9IHVuZGVmaW5l
ZDsKKyAgICAgIF9lbWJlck1ldGFsRGVwZW5kZW50X2tleXMucmVtb3ZlRGVwZW5kZW50S2V5cyh0
aGlzLCBvYmosIGtleU5hbWUsIG1ldGEpOworICAgIH0KKyAgfTsKKworICBDb21wdXRlZFByb3Bl
cnR5UHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChvYmosIGtleU5hbWUpIHsKKyAgICBpZiAodGhp
cy5fdm9sYXRpbGUpIHsKKyAgICAgIHJldHVybiB0aGlzLl9nZXR0ZXIuY2FsbChvYmosIGtleU5h
bWUpOworICAgIH0KKworICAgIHZhciBtZXRhID0gX2VtYmVyTWV0YWxNZXRhLm1ldGEob2JqKTsK
KyAgICB2YXIgY2FjaGUgPSBtZXRhLndyaXRhYmxlQ2FjaGUoKTsKKworICAgIHZhciByZXN1bHQg
PSBjYWNoZVtrZXlOYW1lXTsKKyAgICBpZiAocmVzdWx0ID09PSBVTkRFRklORUQpIHsKKyAgICAg
IHJldHVybiB1bmRlZmluZWQ7CisgICAgfSBlbHNlIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkg
eworICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB2YXIgcmV0ID0gdGhpcy5fZ2V0
dGVyLmNhbGwob2JqLCBrZXlOYW1lKTsKKyAgICBpZiAocmV0ID09PSB1bmRlZmluZWQpIHsKKyAg
ICAgIGNhY2hlW2tleU5hbWVdID0gVU5ERUZJTkVEOworICAgIH0gZWxzZSB7CisgICAgICBjYWNo
ZVtrZXlOYW1lXSA9IHJldDsKKyAgICB9CisKKyAgICB2YXIgY2hhaW5XYXRjaGVycyA9IG1ldGEu
cmVhZGFibGVDaGFpbldhdGNoZXJzKCk7CisgICAgaWYgKGNoYWluV2F0Y2hlcnMpIHsKKyAgICAg
IGNoYWluV2F0Y2hlcnMucmV2YWxpZGF0ZShrZXlOYW1lKTsKKyAgICB9CisgICAgX2VtYmVyTWV0
YWxEZXBlbmRlbnRfa2V5cy5hZGREZXBlbmRlbnRLZXlzKHRoaXMsIG9iaiwga2V5TmFtZSwgbWV0
YSk7CisKKyAgICByZXR1cm4gcmV0OworICB9OworCisgIENvbXB1dGVkUHJvcGVydHlQcm90b3R5
cGUuc2V0ID0gZnVuY3Rpb24gY29tcHV0ZWRQcm9wZXJ0eVNldEVudHJ5KG9iaiwga2V5TmFtZSwg
dmFsdWUpIHsKKyAgICBpZiAodGhpcy5fcmVhZE9ubHkpIHsKKyAgICAgIHRoaXMuX3Rocm93UmVh
ZE9ubHlFcnJvcihvYmosIGtleU5hbWUpOworICAgIH0KKworICAgIGlmICghdGhpcy5fc2V0dGVy
KSB7CisgICAgICByZXR1cm4gdGhpcy5jbG9iYmVyU2V0KG9iaiwga2V5TmFtZSwgdmFsdWUpOwor
ICAgIH0KKworICAgIGlmICh0aGlzLl92b2xhdGlsZSkgeworICAgICAgcmV0dXJuIHRoaXMudm9s
YXRpbGVTZXQob2JqLCBrZXlOYW1lLCB2YWx1ZSk7CisgICAgfQorCisgICAgcmV0dXJuIHRoaXMu
c2V0V2l0aFN1c3BlbmQob2JqLCBrZXlOYW1lLCB2YWx1ZSk7CisgIH07CisKKyAgQ29tcHV0ZWRQ
cm9wZXJ0eVByb3RvdHlwZS5fdGhyb3dSZWFkT25seUVycm9yID0gZnVuY3Rpb24gY29tcHV0ZWRQ
cm9wZXJ0eVRocm93UmVhZE9ubHlFcnJvcihvYmosIGtleU5hbWUpIHsKKyAgICB0aHJvdyBuZXcg
X2VtYmVyTWV0YWxFcnJvci5kZWZhdWx0KCdDYW5ub3Qgc2V0IHJlYWQtb25seSBwcm9wZXJ0eSAi
JyArIGtleU5hbWUgKyAnIiBvbiBvYmplY3Q6ICcgKyBfZW1iZXJNZXRhbFV0aWxzLmluc3BlY3Qo
b2JqKSk7CisgIH07CisKKyAgQ29tcHV0ZWRQcm9wZXJ0eVByb3RvdHlwZS5jbG9iYmVyU2V0ID0g
ZnVuY3Rpb24gY29tcHV0ZWRQcm9wZXJ0eUNsb2JiZXJTZXQob2JqLCBrZXlOYW1lLCB2YWx1ZSkg
eworICAgIHZhciBjYWNoZWRWYWx1ZSA9IGNhY2hlRm9yKG9iaiwga2V5TmFtZSk7CisgICAgX2Vt
YmVyTWV0YWxQcm9wZXJ0aWVzLmRlZmluZVByb3BlcnR5KG9iaiwga2V5TmFtZSwgbnVsbCwgY2Fj
aGVkVmFsdWUpOworICAgIF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LnNldChvYmosIGtleU5hbWUs
IHZhbHVlKTsKKyAgICByZXR1cm4gdmFsdWU7CisgIH07CisKKyAgQ29tcHV0ZWRQcm9wZXJ0eVBy
b3RvdHlwZS52b2xhdGlsZVNldCA9IGZ1bmN0aW9uIGNvbXB1dGVkUHJvcGVydHlWb2xhdGlsZVNl
dChvYmosIGtleU5hbWUsIHZhbHVlKSB7CisgICAgcmV0dXJuIHRoaXMuX3NldHRlci5jYWxsKG9i
aiwga2V5TmFtZSwgdmFsdWUpOworICB9OworCisgIENvbXB1dGVkUHJvcGVydHlQcm90b3R5cGUu
c2V0V2l0aFN1c3BlbmQgPSBmdW5jdGlvbiBjb21wdXRlZFByb3BlcnR5U2V0V2l0aFN1c3BlbmQo
b2JqLCBrZXlOYW1lLCB2YWx1ZSkgeworICAgIHZhciBvbGRTdXNwZW5kZWQgPSB0aGlzLl9zdXNw
ZW5kZWQ7CisgICAgdGhpcy5fc3VzcGVuZGVkID0gb2JqOworICAgIHRyeSB7CisgICAgICByZXR1
cm4gdGhpcy5fc2V0KG9iaiwga2V5TmFtZSwgdmFsdWUpOworICAgIH0gZmluYWxseSB7CisgICAg
ICB0aGlzLl9zdXNwZW5kZWQgPSBvbGRTdXNwZW5kZWQ7CisgICAgfQorICB9OworCisgIENvbXB1
dGVkUHJvcGVydHlQcm90b3R5cGUuX3NldCA9IGZ1bmN0aW9uIGNvbXB1dGVkUHJvcGVydHlTZXQo
b2JqLCBrZXlOYW1lLCB2YWx1ZSkgeworICAgIC8vIGNhY2hlIHJlcXVpcmVzIG93biBtZXRhCisg
ICAgdmFyIG1ldGEgPSBfZW1iZXJNZXRhbE1ldGEubWV0YShvYmopOworICAgIC8vIGVpdGhlciB0
aGVyZSBpcyBhIHdyaXRhYmxlIGNhY2hlIG9yIHdlIG5lZWQgb25lIHRvIHVwZGF0ZQorICAgIHZh
ciBjYWNoZSA9IG1ldGEud3JpdGFibGVDYWNoZSgpOworICAgIHZhciBoYWRDYWNoZWRWYWx1ZSA9
IGZhbHNlOworICAgIHZhciBjYWNoZWRWYWx1ZSA9IHVuZGVmaW5lZDsKKyAgICBpZiAoY2FjaGVb
a2V5TmFtZV0gIT09IHVuZGVmaW5lZCkgeworICAgICAgaWYgKGNhY2hlW2tleU5hbWVdICE9PSBV
TkRFRklORUQpIHsKKyAgICAgICAgY2FjaGVkVmFsdWUgPSBjYWNoZVtrZXlOYW1lXTsKKyAgICAg
IH0KKyAgICAgIGhhZENhY2hlZFZhbHVlID0gdHJ1ZTsKKyAgICB9CisKKyAgICB2YXIgcmV0ID0g
dGhpcy5fc2V0dGVyLmNhbGwob2JqLCBrZXlOYW1lLCB2YWx1ZSwgY2FjaGVkVmFsdWUpOworCisg
ICAgLy8gYWxsb3dzIHNldHRlciB0byByZXR1cm4gdGhlIHNhbWUgdmFsdWUgdGhhdCBpcyBjYWNo
ZWQgYWxyZWFkeQorICAgIGlmIChoYWRDYWNoZWRWYWx1ZSAmJiBjYWNoZWRWYWx1ZSA9PT0gcmV0
KSB7CisgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIHZhciB3YXRjaGVkID0gbWV0YS5w
ZWVrV2F0Y2hpbmcoa2V5TmFtZSk7CisgICAgaWYgKHdhdGNoZWQpIHsKKyAgICAgIF9lbWJlck1l
dGFsUHJvcGVydHlfZXZlbnRzLnByb3BlcnR5V2lsbENoYW5nZShvYmosIGtleU5hbWUpOworICAg
IH0KKworICAgIGlmIChoYWRDYWNoZWRWYWx1ZSkgeworICAgICAgY2FjaGVba2V5TmFtZV0gPSB1
bmRlZmluZWQ7CisgICAgfQorCisgICAgaWYgKCFoYWRDYWNoZWRWYWx1ZSkgeworICAgICAgX2Vt
YmVyTWV0YWxEZXBlbmRlbnRfa2V5cy5hZGREZXBlbmRlbnRLZXlzKHRoaXMsIG9iaiwga2V5TmFt
ZSwgbWV0YSk7CisgICAgfQorCisgICAgaWYgKHJldCA9PT0gdW5kZWZpbmVkKSB7CisgICAgICBj
YWNoZVtrZXlOYW1lXSA9IFVOREVGSU5FRDsKKyAgICB9IGVsc2UgeworICAgICAgY2FjaGVba2V5
TmFtZV0gPSByZXQ7CisgICAgfQorCisgICAgaWYgKHdhdGNoZWQpIHsKKyAgICAgIF9lbWJlck1l
dGFsUHJvcGVydHlfZXZlbnRzLnByb3BlcnR5RGlkQ2hhbmdlKG9iaiwga2V5TmFtZSk7CisgICAg
fQorCisgICAgcmV0dXJuIHJldDsKKyAgfTsKKworICAvKiBjYWxsZWQgYmVmb3JlIHByb3BlcnR5
IGlzIG92ZXJyaWRkZW4gKi8KKyAgQ29tcHV0ZWRQcm9wZXJ0eVByb3RvdHlwZS50ZWFyZG93biA9
IGZ1bmN0aW9uIChvYmosIGtleU5hbWUpIHsKKyAgICBpZiAodGhpcy5fdm9sYXRpbGUpIHsKKyAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgdmFyIG1ldGEgPSBfZW1iZXJNZXRhbE1ldGEubWV0YShv
YmopOworICAgIHZhciBjYWNoZSA9IG1ldGEucmVhZGFibGVDYWNoZSgpOworICAgIGlmIChjYWNo
ZSAmJiBjYWNoZVtrZXlOYW1lXSAhPT0gdW5kZWZpbmVkKSB7CisgICAgICBfZW1iZXJNZXRhbERl
cGVuZGVudF9rZXlzLnJlbW92ZURlcGVuZGVudEtleXModGhpcywgb2JqLCBrZXlOYW1lLCBtZXRh
KTsKKyAgICAgIGNhY2hlW2tleU5hbWVdID0gdW5kZWZpbmVkOworICAgIH0KKyAgfTsKKworICAv
KioKKyAgICBUaGlzIGhlbHBlciByZXR1cm5zIGEgbmV3IHByb3BlcnR5IGRlc2NyaXB0b3IgdGhh
dCB3cmFwcyB0aGUgcGFzc2VkCisgICAgY29tcHV0ZWQgcHJvcGVydHkgZnVuY3Rpb24uIFlvdSBj
YW4gdXNlIHRoaXMgaGVscGVyIHRvIGRlZmluZSBwcm9wZXJ0aWVzCisgICAgd2l0aCBtaXhpbnMg
b3IgdmlhIGBFbWJlci5kZWZpbmVQcm9wZXJ0eSgpYC4KKyAgCisgICAgSWYgeW91IHBhc3MgYSBm
dW5jdGlvbiBhcyBhbiBhcmd1bWVudCwgaXQgd2lsbCBiZSB1c2VkIGFzIGEgZ2V0dGVyLiBBIGNv
bXB1dGVkCisgICAgcHJvcGVydHkgZGVmaW5lZCBpbiB0aGlzIHdheSBtaWdodCBsb29rIGxpa2Ug
dGhpczoKKyAgCisgICAgYGBganMKKyAgICBsZXQgUGVyc29uID0gRW1iZXIuT2JqZWN0LmV4dGVu
ZCh7CisgICAgICBpbml0KCkgeworICAgICAgICB0aGlzLl9zdXBlciguLi5hcmd1bWVudHMpOwor
ICAKKyAgICAgICAgdGhpcy5maXJzdE5hbWUgPSAnQmV0dHknOworICAgICAgICB0aGlzLmxhc3RO
YW1lID0gJ0pvbmVzJzsKKyAgICAgIH0sCisgIAorICAgICAgZnVsbE5hbWU6IEVtYmVyLmNvbXB1
dGVkKCdmaXJzdE5hbWUnLCAnbGFzdE5hbWUnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
IGAke3RoaXMuZ2V0KCdmaXJzdE5hbWUnKX0gJHt0aGlzLmdldCgnbGFzdE5hbWUnKX1gOworICAg
ICAgfSkKKyAgICB9KTsKKyAgCisgICAgbGV0IGNsaWVudCA9IFBlcnNvbi5jcmVhdGUoKTsKKyAg
CisgICAgY2xpZW50LmdldCgnZnVsbE5hbWUnKTsgLy8gJ0JldHR5IEpvbmVzJworICAKKyAgICBj
bGllbnQuc2V0KCdsYXN0TmFtZScsICdGdWxsZXInKTsKKyAgICBjbGllbnQuZ2V0KCdmdWxsTmFt
ZScpOyAvLyAnQmV0dHkgRnVsbGVyJworICAgIGBgYAorICAKKyAgICBZb3UgY2FuIHBhc3MgYSBo
YXNoIHdpdGggdHdvIGZ1bmN0aW9ucywgYGdldGAgYW5kIGBzZXRgLCBhcyBhbgorICAgIGFyZ3Vt
ZW50IHRvIHByb3ZpZGUgYm90aCBhIGdldHRlciBhbmQgc2V0dGVyOgorICAKKyAgICBgYGBqcwor
ICAgIGxldCBQZXJzb24gPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKKyAgICAgIGluaXQoKSB7Cisg
ICAgICAgIHRoaXMuX3N1cGVyKC4uLmFyZ3VtZW50cyk7CisgIAorICAgICAgICB0aGlzLmZpcnN0
TmFtZSA9ICdCZXR0eSc7CisgICAgICAgIHRoaXMubGFzdE5hbWUgPSAnSm9uZXMnOworICAgICAg
fSwKKyAgCisgICAgICBmdWxsTmFtZTogRW1iZXIuY29tcHV0ZWQoJ2ZpcnN0TmFtZScsICdsYXN0
TmFtZScsIHsKKyAgICAgICAgZ2V0KGtleSkgeworICAgICAgICAgIHJldHVybiBgJHt0aGlzLmdl
dCgnZmlyc3ROYW1lJyl9ICR7dGhpcy5nZXQoJ2xhc3ROYW1lJyl9YDsKKyAgICAgICAgfSwKKyAg
ICAgICAgc2V0KGtleSwgdmFsdWUpIHsKKyAgICAgICAgICBsZXQgW2ZpcnN0TmFtZSwgbGFzdE5h
bWVdID0gdmFsdWUuc3BsaXQoL1xzKy8pOworICAgICAgICAgIHRoaXMuc2V0UHJvcGVydGllcyh7
IGZpcnN0TmFtZSwgbGFzdE5hbWUgfSk7CisgICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAg
ICB9CisgICAgICB9KTsKKyAgICB9KQorICAKKyAgICBsZXQgY2xpZW50ID0gUGVyc29uLmNyZWF0
ZSgpOworICAgIGNsaWVudC5nZXQoJ2ZpcnN0TmFtZScpOyAvLyAnQmV0dHknCisgIAorICAgIGNs
aWVudC5zZXQoJ2Z1bGxOYW1lJywgJ0NhcnJvbGwgRnVsbGVyJyk7CisgICAgY2xpZW50LmdldCgn
Zmlyc3ROYW1lJyk7IC8vICdDYXJyb2xsJworICAgIGBgYAorICAKKyAgICBUaGUgYHNldGAgZnVu
Y3Rpb24gc2hvdWxkIGFjY2VwdCB0d28gcGFyYW1ldGVycywgYGtleWAgYW5kIGB2YWx1ZWAuIFRo
ZSB2YWx1ZQorICAgIHJldHVybmVkIGZyb20gYHNldGAgd2lsbCBiZSB0aGUgbmV3IHZhbHVlIG9m
IHRoZSBwcm9wZXJ0eS4KKyAgCisgICAgX05vdGU6IFRoaXMgaXMgdGhlIHByZWZlcnJlZCB3YXkg
dG8gZGVmaW5lIGNvbXB1dGVkIHByb3BlcnRpZXMgd2hlbiB3cml0aW5nIHRoaXJkLXBhcnR5Cisg
ICAgbGlicmFyaWVzIHRoYXQgZGVwZW5kIG9uIG9yIHVzZSBFbWJlciwgc2luY2UgdGhlcmUgaXMg
bm8gZ3VhcmFudGVlIHRoYXQgdGhlIHVzZXIKKyAgICB3aWxsIGhhdmUgW3Byb3RvdHlwZSBFeHRl
bnNpb25zXShodHRwOi8vZW1iZXJqcy5jb20vZ3VpZGVzL2NvbmZpZ3VyaW5nLWVtYmVyL2Rpc2Fi
bGluZy1wcm90b3R5cGUtZXh0ZW5zaW9ucy8pIGVuYWJsZWQuXworICAKKyAgICBUaGUgYWx0ZXJu
YXRpdmUgc3ludGF4LCB3aXRoIHByb3RvdHlwZSBleHRlbnNpb25zLCBtaWdodCBsb29rIGxpa2U6
CisgIAorICAgIGBgYGpzCisgICAgZnVsbE5hbWU6IGZ1bmN0aW9uKCkgeworICAgICAgcmV0dXJu
IHRoaXMuZ2V0KCdmaXJzdE5hbWUnKSArICcgJyArIHRoaXMuZ2V0KCdsYXN0TmFtZScpOworICAg
IH0ucHJvcGVydHkoJ2ZpcnN0TmFtZScsICdsYXN0TmFtZScpCisgICAgYGBgCisgIAorICAgIEBj
bGFzcyBjb21wdXRlZAorICAgIEBuYW1lc3BhY2UgRW1iZXIKKyAgICBAY29uc3RydWN0b3IKKyAg
ICBAc3RhdGljCisgICAgQHBhcmFtIHtTdHJpbmd9IFtkZXBlbmRlbnRLZXlzKl0gT3B0aW9uYWwg
ZGVwZW5kZW50IGtleXMgdGhhdCB0cmlnZ2VyIHRoaXMgY29tcHV0ZWQgcHJvcGVydHkuCisgICAg
QHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgY29tcHV0ZWQgcHJvcGVydHkgZnVuY3Rpb24uCisg
ICAgQHJldHVybiB7RW1iZXIuQ29tcHV0ZWRQcm9wZXJ0eX0gcHJvcGVydHkgZGVzY3JpcHRvciBp
bnN0YW5jZQorICAgIEBwdWJsaWMKKyAgKi8KKworICBmdW5jdGlvbiBjb21wdXRlZChmdW5jKSB7
CisgICAgdmFyIGFyZ3M7CisKKyAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHsKKyAgICAg
IGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CisgICAgICBmdW5jID0gYXJncy5wb3Ao
KTsKKyAgICB9CisKKyAgICB2YXIgY3AgPSBuZXcgQ29tcHV0ZWRQcm9wZXJ0eShmdW5jKTsKKwor
ICAgIGlmIChhcmdzKSB7CisgICAgICBjcC5wcm9wZXJ0eS5hcHBseShjcCwgYXJncyk7CisgICAg
fQorCisgICAgcmV0dXJuIGNwOworICB9CisKKyAgLyoqCisgICAgUmV0dXJucyB0aGUgY2FjaGVk
IHZhbHVlIGZvciBhIHByb3BlcnR5LCBpZiBvbmUgZXhpc3RzLgorICAgIFRoaXMgY2FuIGJlIHVz
ZWZ1bCBmb3IgcGVla2luZyBhdCB0aGUgdmFsdWUgb2YgYSBjb21wdXRlZAorICAgIHByb3BlcnR5
IHRoYXQgaXMgZ2VuZXJhdGVkIGxhemlseSwgd2l0aG91dCBhY2NpZGVudGFsbHkgY2F1c2luZwor
ICAgIGl0IHRvIGJlIGNyZWF0ZWQuCisgIAorICAgIEBtZXRob2QgY2FjaGVGb3IKKyAgICBAZm9y
IEVtYmVyCisgICAgQHBhcmFtIHtPYmplY3R9IG9iaiB0aGUgb2JqZWN0IHdob3NlIHByb3BlcnR5
IHlvdSB3YW50IHRvIGNoZWNrCisgICAgQHBhcmFtIHtTdHJpbmd9IGtleSB0aGUgbmFtZSBvZiB0
aGUgcHJvcGVydHkgd2hvc2UgY2FjaGVkIHZhbHVlIHlvdSB3YW50CisgICAgICB0byByZXR1cm4K
KyAgICBAcmV0dXJuIHtPYmplY3R9IHRoZSBjYWNoZWQgdmFsdWUKKyAgICBAcHVibGljCisgICov
CisgIGZ1bmN0aW9uIGNhY2hlRm9yKG9iaiwga2V5KSB7CisgICAgdmFyIG1ldGEgPSBfZW1iZXJN
ZXRhbE1ldGEucGVla01ldGEob2JqKTsKKyAgICB2YXIgY2FjaGUgPSBtZXRhICYmIG1ldGEuc291
cmNlID09PSBvYmogJiYgbWV0YS5yZWFkYWJsZUNhY2hlKCk7CisgICAgdmFyIHJldCA9IGNhY2hl
ICYmIGNhY2hlW2tleV07CisKKyAgICBpZiAocmV0ID09PSBVTkRFRklORUQpIHsKKyAgICAgIHJl
dHVybiB1bmRlZmluZWQ7CisgICAgfQorICAgIHJldHVybiByZXQ7CisgIH0KKworICBjYWNoZUZv
ci5zZXQgPSBmdW5jdGlvbiAoY2FjaGUsIGtleSwgdmFsdWUpIHsKKyAgICBpZiAodmFsdWUgPT09
IHVuZGVmaW5lZCkgeworICAgICAgY2FjaGVba2V5XSA9IFVOREVGSU5FRDsKKyAgICB9IGVsc2Ug
eworICAgICAgY2FjaGVba2V5XSA9IHZhbHVlOworICAgIH0KKyAgfTsKKworICBjYWNoZUZvci5n
ZXQgPSBmdW5jdGlvbiAoY2FjaGUsIGtleSkgeworICAgIHZhciByZXQgPSBjYWNoZVtrZXldOwor
ICAgIGlmIChyZXQgPT09IFVOREVGSU5FRCkgeworICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKKyAg
ICB9CisgICAgcmV0dXJuIHJldDsKKyAgfTsKKworICBjYWNoZUZvci5yZW1vdmUgPSBmdW5jdGlv
biAoY2FjaGUsIGtleSkgeworICAgIGNhY2hlW2tleV0gPSB1bmRlZmluZWQ7CisgIH07CisKKyAg
ZXhwb3J0cy5Db21wdXRlZFByb3BlcnR5ID0gQ29tcHV0ZWRQcm9wZXJ0eTsKKyAgZXhwb3J0cy5j
b21wdXRlZCA9IGNvbXB1dGVkOworICBleHBvcnRzLmNhY2hlRm9yID0gY2FjaGVGb3I7Cit9KTsK
K2VuaWZlZCgnZW1iZXItbWV0YWwvY29tcHV0ZWRfbWFjcm9zJywgWydleHBvcnRzJywgJ2VtYmVy
LW1ldGFsL2RlYnVnJywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCcsICdlbWJlci1tZXRhbC9w
cm9wZXJ0eV9zZXQnLCAnZW1iZXItbWV0YWwvY29tcHV0ZWQnLCAnZW1iZXItbWV0YWwvaXNfZW1w
dHknLCAnZW1iZXItbWV0YWwvaXNfbm9uZScsICdlbWJlci1tZXRhbC9hbGlhcycsICdlbWJlci1t
ZXRhbC9leHBhbmRfcHJvcGVydGllcyddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxE
ZWJ1ZywgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQsIF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LCBf
ZW1iZXJNZXRhbENvbXB1dGVkLCBfZW1iZXJNZXRhbElzX2VtcHR5LCBfZW1iZXJNZXRhbElzX25v
bmUsIF9lbWJlck1ldGFsQWxpYXMsIF9lbWJlck1ldGFsRXhwYW5kX3Byb3BlcnRpZXMpIHsKKyAg
J3VzZSBzdHJpY3QnOworCisgIGV4cG9ydHMuZW1wdHkgPSBlbXB0eTsKKyAgZXhwb3J0cy5ub3RF
bXB0eSA9IG5vdEVtcHR5OworICBleHBvcnRzLm5vbmUgPSBub25lOworICBleHBvcnRzLm5vdCA9
IG5vdDsKKyAgZXhwb3J0cy5ib29sID0gYm9vbDsKKyAgZXhwb3J0cy5tYXRjaCA9IG1hdGNoOwor
ICBleHBvcnRzLmVxdWFsID0gZXF1YWw7CisgIGV4cG9ydHMuZ3QgPSBndDsKKyAgZXhwb3J0cy5n
dGUgPSBndGU7CisgIGV4cG9ydHMubHQgPSBsdDsKKyAgZXhwb3J0cy5sdGUgPSBsdGU7CisgIGV4
cG9ydHMub25lV2F5ID0gb25lV2F5OworICBleHBvcnRzLnJlYWRPbmx5ID0gcmVhZE9ubHk7Cisg
IGV4cG9ydHMuZGVwcmVjYXRpbmdBbGlhcyA9IGRlcHJlY2F0aW5nQWxpYXM7CisKKyAgLyoqCisg
IEBtb2R1bGUgZW1iZXIKKyAgQHN1Ym1vZHVsZSBlbWJlci1tZXRhbAorICAqLworCisgIGZ1bmN0
aW9uIGdldFByb3BlcnRpZXMoc2VsZiwgcHJvcGVydHlOYW1lcykgeworICAgIHZhciByZXQgPSB7
fTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnR5TmFtZXMubGVuZ3RoOyBpKyspIHsK
KyAgICAgIHJldFtwcm9wZXJ0eU5hbWVzW2ldXSA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0Lmdl
dChzZWxmLCBwcm9wZXJ0eU5hbWVzW2ldKTsKKyAgICB9CisgICAgcmV0dXJuIHJldDsKKyAgfQor
CisgIGZ1bmN0aW9uIGdlbmVyYXRlQ29tcHV0ZWRXaXRoUHJvcGVydGllcyhtYWNybykgeworICAg
IHJldHVybiBmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgZXhwYW5kZWRQcm9wZXJ0aWVzID0gW107
CisgICAgICB2YXIgY29tcHV0ZWRGdW5jID0gX2VtYmVyTWV0YWxDb21wdXRlZC5jb21wdXRlZChm
dW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBtYWNyby5hcHBseSh0aGlzLCBbZ2V0UHJvcGVy
dGllcyh0aGlzLCBleHBhbmRlZFByb3BlcnRpZXMpXSk7CisgICAgICB9KTsKKworICAgICAgZnVu
Y3Rpb24gZXh0cmFjdFByb3BlcnR5KGVudHJ5KSB7CisgICAgICAgIGV4cGFuZGVkUHJvcGVydGll
cy5wdXNoKGVudHJ5KTsKKyAgICAgIH0KKworICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50
cy5sZW5ndGgsIHByb3BlcnRpZXMgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVu
OyBfa2V5KyspIHsKKyAgICAgICAgcHJvcGVydGllc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTsK
KyAgICAgIH0KKworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsg
aSsrKSB7CisgICAgICAgIF9lbWJlck1ldGFsRXhwYW5kX3Byb3BlcnRpZXMuZGVmYXVsdChwcm9w
ZXJ0aWVzW2ldLCBleHRyYWN0UHJvcGVydHkpOworICAgICAgfQorCisgICAgICByZXR1cm4gY29t
cHV0ZWRGdW5jLnByb3BlcnR5LmFwcGx5KGNvbXB1dGVkRnVuYywgZXhwYW5kZWRQcm9wZXJ0aWVz
KTsKKyAgICB9OworICB9CisKKyAgLyoqCisgICAgQSBjb21wdXRlZCBwcm9wZXJ0eSB0aGF0IHJl
dHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhlIGRlcGVuZGVudAorICAgIHByb3BlcnR5IGlz
IG51bGwsIGFuIGVtcHR5IHN0cmluZywgZW1wdHkgYXJyYXksIG9yIGVtcHR5IGZ1bmN0aW9uLgor
ICAKKyAgICBFeGFtcGxlCisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAgICB2YXIgVG9Eb0xpc3Qg
PSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKKyAgICAgIGlzRG9uZTogRW1iZXIuY29tcHV0ZWQuZW1w
dHkoJ3RvZG9zJykKKyAgICB9KTsKKyAgCisgICAgdmFyIHRvZG9MaXN0ID0gVG9Eb0xpc3QuY3Jl
YXRlKHsKKyAgICAgIHRvZG9zOiBbJ1VuaXQgVGVzdCcsICdEb2N1bWVudGF0aW9uJywgJ1JlbGVh
c2UnXQorICAgIH0pOworICAKKyAgICB0b2RvTGlzdC5nZXQoJ2lzRG9uZScpOyAvLyBmYWxzZQor
ICAgIHRvZG9MaXN0LmdldCgndG9kb3MnKS5jbGVhcigpOworICAgIHRvZG9MaXN0LmdldCgnaXNE
b25lJyk7IC8vIHRydWUKKyAgICBgYGAKKyAgCisgICAgQHNpbmNlIDEuNi4wCisgICAgQG1ldGhv
ZCBlbXB0eQorICAgIEBmb3IgRW1iZXIuY29tcHV0ZWQKKyAgICBAcGFyYW0ge1N0cmluZ30gZGVw
ZW5kZW50S2V5CisgICAgQHJldHVybiB7RW1iZXIuQ29tcHV0ZWRQcm9wZXJ0eX0gY29tcHV0ZWQg
cHJvcGVydHkgd2hpY2ggbmVnYXRlCisgICAgdGhlIG9yaWdpbmFsIHZhbHVlIGZvciBwcm9wZXJ0
eQorICAgIEBwdWJsaWMKKyAgKi8KKworICBmdW5jdGlvbiBlbXB0eShkZXBlbmRlbnRLZXkpIHsK
KyAgICByZXR1cm4gX2VtYmVyTWV0YWxDb21wdXRlZC5jb21wdXRlZChkZXBlbmRlbnRLZXkgKyAn
Lmxlbmd0aCcsIGZ1bmN0aW9uICgpIHsKKyAgICAgIHJldHVybiBfZW1iZXJNZXRhbElzX2VtcHR5
LmRlZmF1bHQoX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsIGRlcGVuZGVudEtleSkp
OworICAgIH0pOworICB9CisKKyAgLyoqCisgICAgQSBjb21wdXRlZCBwcm9wZXJ0eSB0aGF0IHJl
dHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhlIGRlcGVuZGVudAorICAgIHByb3BlcnR5IGlz
IE5PVCBudWxsLCBhbiBlbXB0eSBzdHJpbmcsIGVtcHR5IGFycmF5LCBvciBlbXB0eSBmdW5jdGlv
bi4KKyAgCisgICAgRXhhbXBsZQorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgdmFyIEhhbXN0
ZXIgPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKKyAgICAgIGhhc1N0dWZmOiBFbWJlci5jb21wdXRl
ZC5ub3RFbXB0eSgnYmFja3BhY2snKQorICAgIH0pOworICAKKyAgICB2YXIgaGFtc3RlciA9IEhh
bXN0ZXIuY3JlYXRlKHsgYmFja3BhY2s6IFsnRm9vZCcsICdTbGVlcGluZyBCYWcnLCAnVGVudCdd
IH0pOworICAKKyAgICBoYW1zdGVyLmdldCgnaGFzU3R1ZmYnKTsgICAgICAgICAvLyB0cnVlCisg
ICAgaGFtc3Rlci5nZXQoJ2JhY2twYWNrJykuY2xlYXIoKTsgLy8gW10KKyAgICBoYW1zdGVyLmdl
dCgnaGFzU3R1ZmYnKTsgICAgICAgICAvLyBmYWxzZQorICAgIGBgYAorICAKKyAgICBAbWV0aG9k
IG5vdEVtcHR5CisgICAgQGZvciBFbWJlci5jb21wdXRlZAorICAgIEBwYXJhbSB7U3RyaW5nfSBk
ZXBlbmRlbnRLZXkKKyAgICBAcmV0dXJuIHtFbWJlci5Db21wdXRlZFByb3BlcnR5fSBjb21wdXRl
ZCBwcm9wZXJ0eSB3aGljaCByZXR1cm5zIHRydWUgaWYKKyAgICBvcmlnaW5hbCB2YWx1ZSBmb3Ig
cHJvcGVydHkgaXMgbm90IGVtcHR5LgorICAgIEBwdWJsaWMKKyAgKi8KKworICBmdW5jdGlvbiBu
b3RFbXB0eShkZXBlbmRlbnRLZXkpIHsKKyAgICByZXR1cm4gX2VtYmVyTWV0YWxDb21wdXRlZC5j
b21wdXRlZChkZXBlbmRlbnRLZXkgKyAnLmxlbmd0aCcsIGZ1bmN0aW9uICgpIHsKKyAgICAgIHJl
dHVybiAhX2VtYmVyTWV0YWxJc19lbXB0eS5kZWZhdWx0KF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0
LmdldCh0aGlzLCBkZXBlbmRlbnRLZXkpKTsKKyAgICB9KTsKKyAgfQorCisgIC8qKgorICAgIEEg
Y29tcHV0ZWQgcHJvcGVydHkgdGhhdCByZXR1cm5zIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoZSBk
ZXBlbmRlbnQKKyAgICBwcm9wZXJ0eSBpcyBudWxsIG9yIHVuZGVmaW5lZC4gVGhpcyBhdm9pZHMg
ZXJyb3JzIGZyb20gSlNMaW50IGNvbXBsYWluaW5nCisgICAgYWJvdXQgdXNlIG9mID09LCB3aGlj
aCBjYW4gYmUgdGVjaG5pY2FsbHkgY29uZnVzaW5nLgorICAKKyAgICBFeGFtcGxlCisgIAorICAg
IGBgYGphdmFzY3JpcHQKKyAgICB2YXIgSGFtc3RlciA9IEVtYmVyLk9iamVjdC5leHRlbmQoewor
ICAgICAgaXNIdW5ncnk6IEVtYmVyLmNvbXB1dGVkLm5vbmUoJ2Zvb2QnKQorICAgIH0pOworICAK
KyAgICB2YXIgaGFtc3RlciA9IEhhbXN0ZXIuY3JlYXRlKCk7CisgIAorICAgIGhhbXN0ZXIuZ2V0
KCdpc0h1bmdyeScpOyAvLyB0cnVlCisgICAgaGFtc3Rlci5zZXQoJ2Zvb2QnLCAnQmFuYW5hJyk7
CisgICAgaGFtc3Rlci5nZXQoJ2lzSHVuZ3J5Jyk7IC8vIGZhbHNlCisgICAgaGFtc3Rlci5zZXQo
J2Zvb2QnLCBudWxsKTsKKyAgICBoYW1zdGVyLmdldCgnaXNIdW5ncnknKTsgLy8gdHJ1ZQorICAg
IGBgYAorICAKKyAgICBAbWV0aG9kIG5vbmUKKyAgICBAZm9yIEVtYmVyLmNvbXB1dGVkCisgICAg
QHBhcmFtIHtTdHJpbmd9IGRlcGVuZGVudEtleQorICAgIEByZXR1cm4ge0VtYmVyLkNvbXB1dGVk
UHJvcGVydHl9IGNvbXB1dGVkIHByb3BlcnR5IHdoaWNoCisgICAgcmV0dXJucyB0cnVlIGlmIG9y
aWdpbmFsIHZhbHVlIGZvciBwcm9wZXJ0eSBpcyBudWxsIG9yIHVuZGVmaW5lZC4KKyAgICBAcHVi
bGljCisgICovCisKKyAgZnVuY3Rpb24gbm9uZShkZXBlbmRlbnRLZXkpIHsKKyAgICByZXR1cm4g
X2VtYmVyTWV0YWxDb21wdXRlZC5jb21wdXRlZChkZXBlbmRlbnRLZXksIGZ1bmN0aW9uICgpIHsK
KyAgICAgIHJldHVybiBfZW1iZXJNZXRhbElzX25vbmUuZGVmYXVsdChfZW1iZXJNZXRhbFByb3Bl
cnR5X2dldC5nZXQodGhpcywgZGVwZW5kZW50S2V5KSk7CisgICAgfSk7CisgIH0KKworICAvKioK
KyAgICBBIGNvbXB1dGVkIHByb3BlcnR5IHRoYXQgcmV0dXJucyB0aGUgaW52ZXJzZSBib29sZWFu
IHZhbHVlCisgICAgb2YgdGhlIG9yaWdpbmFsIHZhbHVlIGZvciB0aGUgZGVwZW5kZW50IHByb3Bl
cnR5LgorICAKKyAgICBFeGFtcGxlCisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAgICB2YXIgVXNl
ciA9IEVtYmVyLk9iamVjdC5leHRlbmQoeworICAgICAgaXNBbm9ueW1vdXM6IEVtYmVyLmNvbXB1
dGVkLm5vdCgnbG9nZ2VkSW4nKQorICAgIH0pOworICAKKyAgICB2YXIgdXNlciA9IFVzZXIuY3Jl
YXRlKHtsb2dnZWRJbjogZmFsc2V9KTsKKyAgCisgICAgdXNlci5nZXQoJ2lzQW5vbnltb3VzJyk7
IC8vIHRydWUKKyAgICB1c2VyLnNldCgnbG9nZ2VkSW4nLCB0cnVlKTsKKyAgICB1c2VyLmdldCgn
aXNBbm9ueW1vdXMnKTsgLy8gZmFsc2UKKyAgICBgYGAKKyAgCisgICAgQG1ldGhvZCBub3QKKyAg
ICBAZm9yIEVtYmVyLmNvbXB1dGVkCisgICAgQHBhcmFtIHtTdHJpbmd9IGRlcGVuZGVudEtleQor
ICAgIEByZXR1cm4ge0VtYmVyLkNvbXB1dGVkUHJvcGVydHl9IGNvbXB1dGVkIHByb3BlcnR5IHdo
aWNoIHJldHVybnMKKyAgICBpbnZlcnNlIG9mIHRoZSBvcmlnaW5hbCB2YWx1ZSBmb3IgcHJvcGVy
dHkKKyAgICBAcHVibGljCisgICovCisKKyAgZnVuY3Rpb24gbm90KGRlcGVuZGVudEtleSkgewor
ICAgIHJldHVybiBfZW1iZXJNZXRhbENvbXB1dGVkLmNvbXB1dGVkKGRlcGVuZGVudEtleSwgZnVu
Y3Rpb24gKCkgeworICAgICAgcmV0dXJuICFfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhp
cywgZGVwZW5kZW50S2V5KTsKKyAgICB9KTsKKyAgfQorCisgIC8qKgorICAgIEEgY29tcHV0ZWQg
cHJvcGVydHkgdGhhdCBjb252ZXJ0cyB0aGUgcHJvdmlkZWQgZGVwZW5kZW50IHByb3BlcnR5Cisg
ICAgaW50byBhIGJvb2xlYW4gdmFsdWUuCisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAgICB2YXIg
SGFtc3RlciA9IEVtYmVyLk9iamVjdC5leHRlbmQoeworICAgICAgaGFzQmFuYW5hczogRW1iZXIu
Y29tcHV0ZWQuYm9vbCgnbnVtQmFuYW5hcycpCisgICAgfSk7CisgIAorICAgIHZhciBoYW1zdGVy
ID0gSGFtc3Rlci5jcmVhdGUoKTsKKyAgCisgICAgaGFtc3Rlci5nZXQoJ2hhc0JhbmFuYXMnKTsg
Ly8gZmFsc2UKKyAgICBoYW1zdGVyLnNldCgnbnVtQmFuYW5hcycsIDApOworICAgIGhhbXN0ZXIu
Z2V0KCdoYXNCYW5hbmFzJyk7IC8vIGZhbHNlCisgICAgaGFtc3Rlci5zZXQoJ251bUJhbmFuYXMn
LCAxKTsKKyAgICBoYW1zdGVyLmdldCgnaGFzQmFuYW5hcycpOyAvLyB0cnVlCisgICAgaGFtc3Rl
ci5zZXQoJ251bUJhbmFuYXMnLCBudWxsKTsKKyAgICBoYW1zdGVyLmdldCgnaGFzQmFuYW5hcycp
OyAvLyBmYWxzZQorICAgIGBgYAorICAKKyAgICBAbWV0aG9kIGJvb2wKKyAgICBAZm9yIEVtYmVy
LmNvbXB1dGVkCisgICAgQHBhcmFtIHtTdHJpbmd9IGRlcGVuZGVudEtleQorICAgIEByZXR1cm4g
e0VtYmVyLkNvbXB1dGVkUHJvcGVydHl9IGNvbXB1dGVkIHByb3BlcnR5IHdoaWNoIGNvbnZlcnRz
CisgICAgdG8gYm9vbGVhbiB0aGUgb3JpZ2luYWwgdmFsdWUgZm9yIHByb3BlcnR5CisgICAgQHB1
YmxpYworICAqLworCisgIGZ1bmN0aW9uIGJvb2woZGVwZW5kZW50S2V5KSB7CisgICAgcmV0dXJu
IF9lbWJlck1ldGFsQ29tcHV0ZWQuY29tcHV0ZWQoZGVwZW5kZW50S2V5LCBmdW5jdGlvbiAoKSB7
CisgICAgICByZXR1cm4gISFfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgZGVwZW5k
ZW50S2V5KTsKKyAgICB9KTsKKyAgfQorCisgIC8qKgorICAgIEEgY29tcHV0ZWQgcHJvcGVydHkg
d2hpY2ggbWF0Y2hlcyB0aGUgb3JpZ2luYWwgdmFsdWUgZm9yIHRoZQorICAgIGRlcGVuZGVudCBw
cm9wZXJ0eSBhZ2FpbnN0IGEgZ2l2ZW4gUmVnRXhwLCByZXR1cm5pbmcgYHRydWVgCisgICAgaWYg
dGhlIHZhbHVlIG1hdGNoZXMgdGhlIFJlZ0V4cCBhbmQgYGZhbHNlYCBpZiBpdCBkb2VzIG5vdC4K
KyAgCisgICAgRXhhbXBsZQorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgdmFyIFVzZXIgPSBF
bWJlci5PYmplY3QuZXh0ZW5kKHsKKyAgICAgIGhhc1ZhbGlkRW1haWw6IEVtYmVyLmNvbXB1dGVk
Lm1hdGNoKCdlbWFpbCcsIC9eLitALitcLi4rJC8pCisgICAgfSk7CisgIAorICAgIHZhciB1c2Vy
ID0gVXNlci5jcmVhdGUoe2xvZ2dlZEluOiBmYWxzZX0pOworICAKKyAgICB1c2VyLmdldCgnaGFz
VmFsaWRFbWFpbCcpOyAvLyBmYWxzZQorICAgIHVzZXIuc2V0KCdlbWFpbCcsICcnKTsKKyAgICB1
c2VyLmdldCgnaGFzVmFsaWRFbWFpbCcpOyAvLyBmYWxzZQorICAgIHVzZXIuc2V0KCdlbWFpbCcs
ICdlbWJlcl9oYW1zdGVyQGV4YW1wbGUuY29tJyk7CisgICAgdXNlci5nZXQoJ2hhc1ZhbGlkRW1h
aWwnKTsgLy8gdHJ1ZQorICAgIGBgYAorICAKKyAgICBAbWV0aG9kIG1hdGNoCisgICAgQGZvciBF
bWJlci5jb21wdXRlZAorICAgIEBwYXJhbSB7U3RyaW5nfSBkZXBlbmRlbnRLZXkKKyAgICBAcGFy
YW0ge1JlZ0V4cH0gcmVnZXhwCisgICAgQHJldHVybiB7RW1iZXIuQ29tcHV0ZWRQcm9wZXJ0eX0g
Y29tcHV0ZWQgcHJvcGVydHkgd2hpY2ggbWF0Y2gKKyAgICB0aGUgb3JpZ2luYWwgdmFsdWUgZm9y
IHByb3BlcnR5IGFnYWluc3QgYSBnaXZlbiBSZWdFeHAKKyAgICBAcHVibGljCisgICovCisKKyAg
ZnVuY3Rpb24gbWF0Y2goZGVwZW5kZW50S2V5LCByZWdleHApIHsKKyAgICByZXR1cm4gX2VtYmVy
TWV0YWxDb21wdXRlZC5jb21wdXRlZChkZXBlbmRlbnRLZXksIGZ1bmN0aW9uICgpIHsKKyAgICAg
IHZhciB2YWx1ZSA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCBkZXBlbmRlbnRL
ZXkpOworCisgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHJlZ2V4cC50
ZXN0KHZhbHVlKSA6IGZhbHNlOworICAgIH0pOworICB9CisKKyAgLyoqCisgICAgQSBjb21wdXRl
ZCBwcm9wZXJ0eSB0aGF0IHJldHVybnMgdHJ1ZSBpZiB0aGUgcHJvdmlkZWQgZGVwZW5kZW50IHBy
b3BlcnR5CisgICAgaXMgZXF1YWwgdG8gdGhlIGdpdmVuIHZhbHVlLgorICAKKyAgICBFeGFtcGxl
CisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAgICB2YXIgSGFtc3RlciA9IEVtYmVyLk9iamVjdC5l
eHRlbmQoeworICAgICAgbmFwVGltZTogRW1iZXIuY29tcHV0ZWQuZXF1YWwoJ3N0YXRlJywgJ3Ns
ZWVweScpCisgICAgfSk7CisgIAorICAgIHZhciBoYW1zdGVyID0gSGFtc3Rlci5jcmVhdGUoKTsK
KyAgCisgICAgaGFtc3Rlci5nZXQoJ25hcFRpbWUnKTsgLy8gZmFsc2UKKyAgICBoYW1zdGVyLnNl
dCgnc3RhdGUnLCAnc2xlZXB5Jyk7CisgICAgaGFtc3Rlci5nZXQoJ25hcFRpbWUnKTsgLy8gdHJ1
ZQorICAgIGhhbXN0ZXIuc2V0KCdzdGF0ZScsICdodW5ncnknKTsKKyAgICBoYW1zdGVyLmdldCgn
bmFwVGltZScpOyAvLyBmYWxzZQorICAgIGBgYAorICAKKyAgICBAbWV0aG9kIGVxdWFsCisgICAg
QGZvciBFbWJlci5jb21wdXRlZAorICAgIEBwYXJhbSB7U3RyaW5nfSBkZXBlbmRlbnRLZXkKKyAg
ICBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ8T2JqZWN0fSB2YWx1ZQorICAgIEByZXR1cm4ge0VtYmVy
LkNvbXB1dGVkUHJvcGVydHl9IGNvbXB1dGVkIHByb3BlcnR5IHdoaWNoIHJldHVybnMgdHJ1ZSBp
ZgorICAgIHRoZSBvcmlnaW5hbCB2YWx1ZSBmb3IgcHJvcGVydHkgaXMgZXF1YWwgdG8gdGhlIGdp
dmVuIHZhbHVlLgorICAgIEBwdWJsaWMKKyAgKi8KKworICBmdW5jdGlvbiBlcXVhbChkZXBlbmRl
bnRLZXksIHZhbHVlKSB7CisgICAgcmV0dXJuIF9lbWJlck1ldGFsQ29tcHV0ZWQuY29tcHV0ZWQo
ZGVwZW5kZW50S2V5LCBmdW5jdGlvbiAoKSB7CisgICAgICByZXR1cm4gX2VtYmVyTWV0YWxQcm9w
ZXJ0eV9nZXQuZ2V0KHRoaXMsIGRlcGVuZGVudEtleSkgPT09IHZhbHVlOworICAgIH0pOworICB9
CisKKyAgLyoqCisgICAgQSBjb21wdXRlZCBwcm9wZXJ0eSB0aGF0IHJldHVybnMgdHJ1ZSBpZiB0
aGUgcHJvdmlkZWQgZGVwZW5kZW50IHByb3BlcnR5CisgICAgaXMgZ3JlYXRlciB0aGFuIHRoZSBw
cm92aWRlZCB2YWx1ZS4KKyAgCisgICAgRXhhbXBsZQorICAKKyAgICBgYGBqYXZhc2NyaXB0Cisg
ICAgdmFyIEhhbXN0ZXIgPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKKyAgICAgIGhhc1Rvb01hbnlC
YW5hbmFzOiBFbWJlci5jb21wdXRlZC5ndCgnbnVtQmFuYW5hcycsIDEwKQorICAgIH0pOworICAK
KyAgICB2YXIgaGFtc3RlciA9IEhhbXN0ZXIuY3JlYXRlKCk7CisgIAorICAgIGhhbXN0ZXIuZ2V0
KCdoYXNUb29NYW55QmFuYW5hcycpOyAvLyBmYWxzZQorICAgIGhhbXN0ZXIuc2V0KCdudW1CYW5h
bmFzJywgMyk7CisgICAgaGFtc3Rlci5nZXQoJ2hhc1Rvb01hbnlCYW5hbmFzJyk7IC8vIGZhbHNl
CisgICAgaGFtc3Rlci5zZXQoJ251bUJhbmFuYXMnLCAxMSk7CisgICAgaGFtc3Rlci5nZXQoJ2hh
c1Rvb01hbnlCYW5hbmFzJyk7IC8vIHRydWUKKyAgICBgYGAKKyAgCisgICAgQG1ldGhvZCBndAor
ICAgIEBmb3IgRW1iZXIuY29tcHV0ZWQKKyAgICBAcGFyYW0ge1N0cmluZ30gZGVwZW5kZW50S2V5
CisgICAgQHBhcmFtIHtOdW1iZXJ9IHZhbHVlCisgICAgQHJldHVybiB7RW1iZXIuQ29tcHV0ZWRQ
cm9wZXJ0eX0gY29tcHV0ZWQgcHJvcGVydHkgd2hpY2ggcmV0dXJucyB0cnVlIGlmCisgICAgdGhl
IG9yaWdpbmFsIHZhbHVlIGZvciBwcm9wZXJ0eSBpcyBncmVhdGVyIHRoYW4gZ2l2ZW4gdmFsdWUu
CisgICAgQHB1YmxpYworICAqLworCisgIGZ1bmN0aW9uIGd0KGRlcGVuZGVudEtleSwgdmFsdWUp
IHsKKyAgICByZXR1cm4gX2VtYmVyTWV0YWxDb21wdXRlZC5jb21wdXRlZChkZXBlbmRlbnRLZXks
IGZ1bmN0aW9uICgpIHsKKyAgICAgIHJldHVybiBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQo
dGhpcywgZGVwZW5kZW50S2V5KSA+IHZhbHVlOworICAgIH0pOworICB9CisKKyAgLyoqCisgICAg
QSBjb21wdXRlZCBwcm9wZXJ0eSB0aGF0IHJldHVybnMgdHJ1ZSBpZiB0aGUgcHJvdmlkZWQgZGVw
ZW5kZW50IHByb3BlcnR5CisgICAgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwcm92
aWRlZCB2YWx1ZS4KKyAgCisgICAgRXhhbXBsZQorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAg
dmFyIEhhbXN0ZXIgPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKKyAgICAgIGhhc1Rvb01hbnlCYW5h
bmFzOiBFbWJlci5jb21wdXRlZC5ndGUoJ251bUJhbmFuYXMnLCAxMCkKKyAgICB9KTsKKyAgCisg
ICAgdmFyIGhhbXN0ZXIgPSBIYW1zdGVyLmNyZWF0ZSgpOworICAKKyAgICBoYW1zdGVyLmdldCgn
aGFzVG9vTWFueUJhbmFuYXMnKTsgLy8gZmFsc2UKKyAgICBoYW1zdGVyLnNldCgnbnVtQmFuYW5h
cycsIDMpOworICAgIGhhbXN0ZXIuZ2V0KCdoYXNUb29NYW55QmFuYW5hcycpOyAvLyBmYWxzZQor
ICAgIGhhbXN0ZXIuc2V0KCdudW1CYW5hbmFzJywgMTApOworICAgIGhhbXN0ZXIuZ2V0KCdoYXNU
b29NYW55QmFuYW5hcycpOyAvLyB0cnVlCisgICAgYGBgCisgIAorICAgIEBtZXRob2QgZ3RlCisg
ICAgQGZvciBFbWJlci5jb21wdXRlZAorICAgIEBwYXJhbSB7U3RyaW5nfSBkZXBlbmRlbnRLZXkK
KyAgICBAcGFyYW0ge051bWJlcn0gdmFsdWUKKyAgICBAcmV0dXJuIHtFbWJlci5Db21wdXRlZFBy
b3BlcnR5fSBjb21wdXRlZCBwcm9wZXJ0eSB3aGljaCByZXR1cm5zIHRydWUgaWYKKyAgICB0aGUg
b3JpZ2luYWwgdmFsdWUgZm9yIHByb3BlcnR5IGlzIGdyZWF0ZXIgb3IgZXF1YWwgdGhlbiBnaXZl
biB2YWx1ZS4KKyAgICBAcHVibGljCisgICovCisKKyAgZnVuY3Rpb24gZ3RlKGRlcGVuZGVudEtl
eSwgdmFsdWUpIHsKKyAgICByZXR1cm4gX2VtYmVyTWV0YWxDb21wdXRlZC5jb21wdXRlZChkZXBl
bmRlbnRLZXksIGZ1bmN0aW9uICgpIHsKKyAgICAgIHJldHVybiBfZW1iZXJNZXRhbFByb3BlcnR5
X2dldC5nZXQodGhpcywgZGVwZW5kZW50S2V5KSA+PSB2YWx1ZTsKKyAgICB9KTsKKyAgfQorCisg
IC8qKgorICAgIEEgY29tcHV0ZWQgcHJvcGVydHkgdGhhdCByZXR1cm5zIHRydWUgaWYgdGhlIHBy
b3ZpZGVkIGRlcGVuZGVudCBwcm9wZXJ0eQorICAgIGlzIGxlc3MgdGhhbiB0aGUgcHJvdmlkZWQg
dmFsdWUuCisgIAorICAgIEV4YW1wbGUKKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIHZhciBI
YW1zdGVyID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7CisgICAgICBuZWVkc01vcmVCYW5hbmFzOiBF
bWJlci5jb21wdXRlZC5sdCgnbnVtQmFuYW5hcycsIDMpCisgICAgfSk7CisgIAorICAgIHZhciBo
YW1zdGVyID0gSGFtc3Rlci5jcmVhdGUoKTsKKyAgCisgICAgaGFtc3Rlci5nZXQoJ25lZWRzTW9y
ZUJhbmFuYXMnKTsgLy8gdHJ1ZQorICAgIGhhbXN0ZXIuc2V0KCdudW1CYW5hbmFzJywgMyk7Cisg
ICAgaGFtc3Rlci5nZXQoJ25lZWRzTW9yZUJhbmFuYXMnKTsgLy8gZmFsc2UKKyAgICBoYW1zdGVy
LnNldCgnbnVtQmFuYW5hcycsIDIpOworICAgIGhhbXN0ZXIuZ2V0KCduZWVkc01vcmVCYW5hbmFz
Jyk7IC8vIHRydWUKKyAgICBgYGAKKyAgCisgICAgQG1ldGhvZCBsdAorICAgIEBmb3IgRW1iZXIu
Y29tcHV0ZWQKKyAgICBAcGFyYW0ge1N0cmluZ30gZGVwZW5kZW50S2V5CisgICAgQHBhcmFtIHtO
dW1iZXJ9IHZhbHVlCisgICAgQHJldHVybiB7RW1iZXIuQ29tcHV0ZWRQcm9wZXJ0eX0gY29tcHV0
ZWQgcHJvcGVydHkgd2hpY2ggcmV0dXJucyB0cnVlIGlmCisgICAgdGhlIG9yaWdpbmFsIHZhbHVl
IGZvciBwcm9wZXJ0eSBpcyBsZXNzIHRoZW4gZ2l2ZW4gdmFsdWUuCisgICAgQHB1YmxpYworICAq
LworCisgIGZ1bmN0aW9uIGx0KGRlcGVuZGVudEtleSwgdmFsdWUpIHsKKyAgICByZXR1cm4gX2Vt
YmVyTWV0YWxDb21wdXRlZC5jb21wdXRlZChkZXBlbmRlbnRLZXksIGZ1bmN0aW9uICgpIHsKKyAg
ICAgIHJldHVybiBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgZGVwZW5kZW50S2V5
KSA8IHZhbHVlOworICAgIH0pOworICB9CisKKyAgLyoqCisgICAgQSBjb21wdXRlZCBwcm9wZXJ0
eSB0aGF0IHJldHVybnMgdHJ1ZSBpZiB0aGUgcHJvdmlkZWQgZGVwZW5kZW50IHByb3BlcnR5Cisg
ICAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwcm92aWRlZCB2YWx1ZS4KKyAgCisgICAg
RXhhbXBsZQorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgdmFyIEhhbXN0ZXIgPSBFbWJlci5P
YmplY3QuZXh0ZW5kKHsKKyAgICAgIG5lZWRzTW9yZUJhbmFuYXM6IEVtYmVyLmNvbXB1dGVkLmx0
ZSgnbnVtQmFuYW5hcycsIDMpCisgICAgfSk7CisgIAorICAgIHZhciBoYW1zdGVyID0gSGFtc3Rl
ci5jcmVhdGUoKTsKKyAgCisgICAgaGFtc3Rlci5nZXQoJ25lZWRzTW9yZUJhbmFuYXMnKTsgLy8g
dHJ1ZQorICAgIGhhbXN0ZXIuc2V0KCdudW1CYW5hbmFzJywgNSk7CisgICAgaGFtc3Rlci5nZXQo
J25lZWRzTW9yZUJhbmFuYXMnKTsgLy8gZmFsc2UKKyAgICBoYW1zdGVyLnNldCgnbnVtQmFuYW5h
cycsIDMpOworICAgIGhhbXN0ZXIuZ2V0KCduZWVkc01vcmVCYW5hbmFzJyk7IC8vIHRydWUKKyAg
ICBgYGAKKyAgCisgICAgQG1ldGhvZCBsdGUKKyAgICBAZm9yIEVtYmVyLmNvbXB1dGVkCisgICAg
QHBhcmFtIHtTdHJpbmd9IGRlcGVuZGVudEtleQorICAgIEBwYXJhbSB7TnVtYmVyfSB2YWx1ZQor
ICAgIEByZXR1cm4ge0VtYmVyLkNvbXB1dGVkUHJvcGVydHl9IGNvbXB1dGVkIHByb3BlcnR5IHdo
aWNoIHJldHVybnMgdHJ1ZSBpZgorICAgIHRoZSBvcmlnaW5hbCB2YWx1ZSBmb3IgcHJvcGVydHkg
aXMgbGVzcyBvciBlcXVhbCB0aGFuIGdpdmVuIHZhbHVlLgorICAgIEBwdWJsaWMKKyAgKi8KKwor
ICBmdW5jdGlvbiBsdGUoZGVwZW5kZW50S2V5LCB2YWx1ZSkgeworICAgIHJldHVybiBfZW1iZXJN
ZXRhbENvbXB1dGVkLmNvbXB1dGVkKGRlcGVuZGVudEtleSwgZnVuY3Rpb24gKCkgeworICAgICAg
cmV0dXJuIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCBkZXBlbmRlbnRLZXkpIDw9
IHZhbHVlOworICAgIH0pOworICB9CisKKyAgLyoqCisgICAgQSBjb21wdXRlZCBwcm9wZXJ0eSB0
aGF0IHBlcmZvcm1zIGEgbG9naWNhbCBgYW5kYCBvbiB0aGUKKyAgICBvcmlnaW5hbCB2YWx1ZXMg
Zm9yIHRoZSBwcm92aWRlZCBkZXBlbmRlbnQgcHJvcGVydGllcy4KKyAgCisgICAgWW91IG1heSBw
YXNzIGluIG1vcmUgdGhhbiB0d28gcHJvcGVydGllcyBhbmQgZXZlbiB1c2UKKyAgICBwcm9wZXJ0
eSBicmFjZSBleHBhbnNpb24uICBUaGUgY29tcHV0ZWQgcHJvcGVydHkgd2lsbAorICAgIHJldHVy
bnMgdGhlIGZpcnN0IGZhbHN5IHZhbHVlIG9yIGxhc3QgdHJ1dGh5IHZhbHVlCisgICAganVzdCBs
aWtlIEphdmFTY3JpcHQncyBgfHxgIG9wZXJhdG9yLgorICAKKyAgICBFeGFtcGxlCisgIAorICAg
IGBgYGphdmFzY3JpcHQKKyAgICB2YXIgSGFtc3RlciA9IEVtYmVyLk9iamVjdC5leHRlbmQoewor
ICAgICAgcmVhZHlGb3JDYW1wOiBFbWJlci5jb21wdXRlZC5hbmQoJ2hhc1RlbnQnLCAnaGFzQmFj
a3BhY2snKSwKKyAgICAgIHJlYWR5Rm9ySGlrZTogRW1iZXIuY29tcHV0ZWQuYW5kKCdoYXNXYWxr
aW5nU3RpY2snLCAnaGFzQmFja3BhY2snKQorICAgIH0pOworICAKKyAgICB2YXIgdG9tc3RlciA9
IEhhbXN0ZXIuY3JlYXRlKCk7CisgIAorICAgIHRvbXN0ZXIuZ2V0KCdyZWFkeUZvckNhbXAnKTsg
Ly8gZmFsc2UKKyAgICB0b21zdGVyLnNldCgnaGFzVGVudCcsIHRydWUpOworICAgIHRvbXN0ZXIu
Z2V0KCdyZWFkeUZvckNhbXAnKTsgLy8gZmFsc2UKKyAgICB0b21zdGVyLnNldCgnaGFzQmFja3Bh
Y2snLCB0cnVlKTsKKyAgICB0b21zdGVyLmdldCgncmVhZHlGb3JDYW1wJyk7IC8vIHRydWUKKyAg
ICB0b21zdGVyLnNldCgnaGFzQmFja3BhY2snLCAnWWVzJyk7CisgICAgdG9tc3Rlci5nZXQoJ3Jl
YWR5Rm9yQ2FtcCcpOyAvLyAnWWVzJworICAgIHRvbXN0ZXIuc2V0KCdoYXNXYWxraW5nU3RpY2sn
LCBudWxsKTsKKyAgICB0b21zdGVyLmdldCgncmVhZHlGb3JIaWtlJyk7IC8vIG51bGwKKyAgICBg
YGAKKyAgCisgICAgQG1ldGhvZCBhbmQKKyAgICBAZm9yIEVtYmVyLmNvbXB1dGVkCisgICAgQHBh
cmFtIHtTdHJpbmd9IGRlcGVuZGVudEtleSoKKyAgICBAcmV0dXJuIHtFbWJlci5Db21wdXRlZFBy
b3BlcnR5fSBjb21wdXRlZCBwcm9wZXJ0eSB3aGljaCBwZXJmb3JtcworICAgIGEgbG9naWNhbCBg
YW5kYCBvbiB0aGUgdmFsdWVzIG9mIGFsbCB0aGUgb3JpZ2luYWwgdmFsdWVzIGZvciBwcm9wZXJ0
aWVzLgorICAgIEBwdWJsaWMKKyAgKi8KKyAgdmFyIGFuZCA9IGdlbmVyYXRlQ29tcHV0ZWRXaXRo
UHJvcGVydGllcyhmdW5jdGlvbiAocHJvcGVydGllcykgeworICAgIHZhciB2YWx1ZTsKKyAgICBm
b3IgKHZhciBrZXkgaW4gcHJvcGVydGllcykgeworICAgICAgdmFsdWUgPSBwcm9wZXJ0aWVzW2tl
eV07CisgICAgICBpZiAocHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmICF2YWx1ZSkg
eworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiB2YWx1
ZTsKKyAgfSk7CisKKyAgZXhwb3J0cy5hbmQgPSBhbmQ7CisgIC8qKgorICAgIEEgY29tcHV0ZWQg
cHJvcGVydHkgd2hpY2ggcGVyZm9ybXMgYSBsb2dpY2FsIGBvcmAgb24gdGhlCisgICAgb3JpZ2lu
YWwgdmFsdWVzIGZvciB0aGUgcHJvdmlkZWQgZGVwZW5kZW50IHByb3BlcnRpZXMuCisgIAorICAg
IFlvdSBtYXkgcGFzcyBpbiBtb3JlIHRoYW4gdHdvIHByb3BlcnRpZXMgYW5kIGV2ZW4gdXNlCisg
ICAgcHJvcGVydHkgYnJhY2UgZXhwYW5zaW9uLiAgVGhlIGNvbXB1dGVkIHByb3BlcnR5IHdpbGwK
KyAgICByZXR1cm5zIHRoZSBmaXJzdCB0cnV0aHkgdmFsdWUgb3IgbGFzdCBmYWxzeSB2YWx1ZSBq
dXN0CisgICAgbGlrZSBKYXZhU2NyaXB0J3MgYHx8YCBvcGVyYXRvci4KKyAgCisgICAgRXhhbXBs
ZQorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgdmFyIEhhbXN0ZXIgPSBFbWJlci5PYmplY3Qu
ZXh0ZW5kKHsKKyAgICAgIHJlYWR5Rm9yUmFpbjogRW1iZXIuY29tcHV0ZWQub3IoJ2hhc0phY2tl
dCcsICdoYXNVbWJyZWxsYScpLAorICAgICAgcmVhZHlGb3JCZWFjaDogRW1iZXIuY29tcHV0ZWQu
b3IoJ3toYXNTdW5zY3JlZW4saGFzVW1icmVsbGF9JykKKyAgICB9KTsKKyAgCisgICAgdmFyIHRv
bXN0ZXIgPSBIYW1zdGVyLmNyZWF0ZSgpOworICAKKyAgICB0b21zdGVyLmdldCgncmVhZHlGb3JS
YWluJyk7IC8vIHVuZGVmaW5lZAorICAgIHRvbXN0ZXIuc2V0KCdoYXNVbWJyZWxsYScsIHRydWUp
OworICAgIHRvbXN0ZXIuZ2V0KCdyZWFkeUZvclJhaW4nKTsgLy8gdHJ1ZQorICAgIHRvbXN0ZXIu
c2V0KCdoYXNKYWNrZXQnLCAnWWVzJyk7CisgICAgdG9tc3Rlci5nZXQoJ3JlYWR5Rm9yUmFpbicp
OyAvLyAnWWVzJworICAgIHRvbXN0ZXIuc2V0KCdoYXNTdW5zY3JlZW4nLCAnQ2hlY2snKTsKKyAg
ICB0b21zdGVyLmdldCgncmVhZHlGb3JCZWFjaCcpOyAvLyAnQ2hlY2snCisgICAgYGBgCisgIAor
ICAgIEBtZXRob2Qgb3IKKyAgICBAZm9yIEVtYmVyLmNvbXB1dGVkCisgICAgQHBhcmFtIHtTdHJp
bmd9IGRlcGVuZGVudEtleSoKKyAgICBAcmV0dXJuIHtFbWJlci5Db21wdXRlZFByb3BlcnR5fSBj
b21wdXRlZCBwcm9wZXJ0eSB3aGljaCBwZXJmb3JtcworICAgIGEgbG9naWNhbCBgb3JgIG9uIHRo
ZSB2YWx1ZXMgb2YgYWxsIHRoZSBvcmlnaW5hbCB2YWx1ZXMgZm9yIHByb3BlcnRpZXMuCisgICAg
QHB1YmxpYworICAqLworICB2YXIgb3IgPSBnZW5lcmF0ZUNvbXB1dGVkV2l0aFByb3BlcnRpZXMo
ZnVuY3Rpb24gKHByb3BlcnRpZXMpIHsKKyAgICB2YXIgdmFsdWU7CisgICAgZm9yICh2YXIga2V5
IGluIHByb3BlcnRpZXMpIHsKKyAgICAgIHZhbHVlID0gcHJvcGVydGllc1trZXldOworICAgICAg
aWYgKHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoa2V5KSAmJiB2YWx1ZSkgeworICAgICAgICBy
ZXR1cm4gdmFsdWU7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiB2YWx1ZTsKKyAgfSk7CisK
KyAgZXhwb3J0cy5vciA9IG9yOworICAvKioKKyAgICBDcmVhdGVzIGEgbmV3IHByb3BlcnR5IHRo
YXQgaXMgYW4gYWxpYXMgZm9yIGFub3RoZXIgcHJvcGVydHkKKyAgICBvbiBhbiBvYmplY3QuIENh
bGxzIHRvIGBnZXRgIG9yIGBzZXRgIHRoaXMgcHJvcGVydHkgYmVoYXZlIGFzCisgICAgdGhvdWdo
IHRoZXkgd2VyZSBjYWxsZWQgb24gdGhlIG9yaWdpbmFsIHByb3BlcnR5LgorICAKKyAgICBgYGBq
YXZhc2NyaXB0CisgICAgdmFyIFBlcnNvbiA9IEVtYmVyLk9iamVjdC5leHRlbmQoeworICAgICAg
bmFtZTogJ0FsZXggTWF0Y2huZWVyJywKKyAgICAgIG5vbWVuOiBFbWJlci5jb21wdXRlZC5hbGlh
cygnbmFtZScpCisgICAgfSk7CisgIAorICAgIHZhciBhbGV4ID0gUGVyc29uLmNyZWF0ZSgpOwor
ICAKKyAgICBhbGV4LmdldCgnbm9tZW4nKTsgLy8gJ0FsZXggTWF0Y2huZWVyJworICAgIGFsZXgu
Z2V0KCduYW1lJyk7ICAvLyAnQWxleCBNYXRjaG5lZXInCisgIAorICAgIGFsZXguc2V0KCdub21l
bicsICdAbWFjaHR5Jyk7CisgICAgYWxleC5nZXQoJ25hbWUnKTsgIC8vICdAbWFjaHR5JworICAg
IGBgYAorICAKKyAgICBAbWV0aG9kIGFsaWFzCisgICAgQGZvciBFbWJlci5jb21wdXRlZAorICAg
IEBwYXJhbSB7U3RyaW5nfSBkZXBlbmRlbnRLZXkKKyAgICBAcmV0dXJuIHtFbWJlci5Db21wdXRl
ZFByb3BlcnR5fSBjb21wdXRlZCBwcm9wZXJ0eSB3aGljaCBjcmVhdGVzIGFuCisgICAgYWxpYXMg
dG8gdGhlIG9yaWdpbmFsIHZhbHVlIGZvciBwcm9wZXJ0eS4KKyAgICBAcHVibGljCisgICovCisK
KyAgLyoqCisgICAgV2hlcmUgYGNvbXB1dGVkLmFsaWFzYCBhbGlhc2VzIGBnZXRgIGFuZCBgc2V0
YCwgYW5kIGFsbG93cyBmb3IgYmlkaXJlY3Rpb25hbAorICAgIGRhdGEgZmxvdywgYGNvbXB1dGVk
Lm9uZVdheWAgb25seSBwcm92aWRlcyBhbiBhbGlhc2VkIGBnZXRgLiBUaGUgYHNldGAgd2lsbAor
ICAgIG5vdCBtdXRhdGUgdGhlIHVwc3RyZWFtIHByb3BlcnR5LCByYXRoZXIgY2F1c2VzIHRoZSBj
dXJyZW50IHByb3BlcnR5IHRvCisgICAgYmVjb21lIHRoZSB2YWx1ZSBzZXQuIFRoaXMgY2F1c2Vz
IHRoZSBkb3duc3RyZWFtIHByb3BlcnR5IHRvIHBlcm1hbmVudGx5CisgICAgZGl2ZXJnZSBmcm9t
IHRoZSB1cHN0cmVhbSBwcm9wZXJ0eS4KKyAgCisgICAgRXhhbXBsZQorICAKKyAgICBgYGBqYXZh
c2NyaXB0CisgICAgdmFyIFVzZXIgPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKKyAgICAgIGZpcnN0
TmFtZTogbnVsbCwKKyAgICAgIGxhc3ROYW1lOiBudWxsLAorICAgICAgbmlja05hbWU6IEVtYmVy
LmNvbXB1dGVkLm9uZVdheSgnZmlyc3ROYW1lJykKKyAgICB9KTsKKyAgCisgICAgdmFyIHRlZGR5
ID0gVXNlci5jcmVhdGUoeworICAgICAgZmlyc3ROYW1lOiAnVGVkZHknLAorICAgICAgbGFzdE5h
bWU6ICAnWmVlbm55JworICAgIH0pOworICAKKyAgICB0ZWRkeS5nZXQoJ25pY2tOYW1lJyk7ICAg
ICAgICAgICAgICAvLyAnVGVkZHknCisgICAgdGVkZHkuc2V0KCduaWNrTmFtZScsICdUZWRkeUJl
YXInKTsgLy8gJ1RlZGR5QmVhcicKKyAgICB0ZWRkeS5nZXQoJ2ZpcnN0TmFtZScpOyAgICAgICAg
ICAgICAvLyAnVGVkZHknCisgICAgYGBgCisgIAorICAgIEBtZXRob2Qgb25lV2F5CisgICAgQGZv
ciBFbWJlci5jb21wdXRlZAorICAgIEBwYXJhbSB7U3RyaW5nfSBkZXBlbmRlbnRLZXkKKyAgICBA
cmV0dXJuIHtFbWJlci5Db21wdXRlZFByb3BlcnR5fSBjb21wdXRlZCBwcm9wZXJ0eSB3aGljaCBj
cmVhdGVzIGEKKyAgICBvbmUgd2F5IGNvbXB1dGVkIHByb3BlcnR5IHRvIHRoZSBvcmlnaW5hbCB2
YWx1ZSBmb3IgcHJvcGVydHkuCisgICAgQHB1YmxpYworICAqLworCisgIGZ1bmN0aW9uIG9uZVdh
eShkZXBlbmRlbnRLZXkpIHsKKyAgICByZXR1cm4gX2VtYmVyTWV0YWxBbGlhcy5kZWZhdWx0KGRl
cGVuZGVudEtleSkub25lV2F5KCk7CisgIH0KKworICAvKioKKyAgICBUaGlzIGlzIGEgbW9yZSBz
ZW1hbnRpY2FsbHkgbWVhbmluZ2Z1bCBhbGlhcyBvZiBgY29tcHV0ZWQub25lV2F5YCwKKyAgICB3
aG9zZSBuYW1lIGlzIHNvbWV3aGF0IGFtYmlndW91cyBhcyB0byB3aGljaCBkaXJlY3Rpb24gdGhl
IGRhdGEgZmxvd3MuCisgIAorICAgIEBtZXRob2QgcmVhZHMKKyAgICBAZm9yIEVtYmVyLmNvbXB1
dGVkCisgICAgQHBhcmFtIHtTdHJpbmd9IGRlcGVuZGVudEtleQorICAgIEByZXR1cm4ge0VtYmVy
LkNvbXB1dGVkUHJvcGVydHl9IGNvbXB1dGVkIHByb3BlcnR5IHdoaWNoIGNyZWF0ZXMgYQorICAg
ICAgb25lIHdheSBjb21wdXRlZCBwcm9wZXJ0eSB0byB0aGUgb3JpZ2luYWwgdmFsdWUgZm9yIHBy
b3BlcnR5LgorICAgIEBwdWJsaWMKKyAgICovCisKKyAgLyoqCisgICAgV2hlcmUgYGNvbXB1dGVk
Lm9uZVdheWAgcHJvdmlkZXMgb25lV2F5IGJpbmRpbmdzLCBgY29tcHV0ZWQucmVhZE9ubHlgIHBy
b3ZpZGVzCisgICAgYSByZWFkT25seSBvbmUgd2F5IGJpbmRpbmcuIFZlcnkgb2Z0ZW4gd2hlbiB1
c2luZyBgY29tcHV0ZWQub25lV2F5YCBvbmUgZG9lcworICAgIG5vdCBhbHNvIHdhbnQgY2hhbmdl
cyB0byBwcm9wYWdhdGUgYmFjayB1cCwgYXMgdGhleSB3aWxsIHJlcGxhY2UgdGhlIHZhbHVlLgor
ICAKKyAgICBUaGlzIHByZXZlbnRzIHRoZSByZXZlcnNlIGZsb3csIGFuZCBhbHNvIHRocm93cyBh
biBleGNlcHRpb24gd2hlbiBpdCBvY2N1cnMuCisgIAorICAgIEV4YW1wbGUKKyAgCisgICAgYGBg
amF2YXNjcmlwdAorICAgIHZhciBVc2VyID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7CisgICAgICBm
aXJzdE5hbWU6IG51bGwsCisgICAgICBsYXN0TmFtZTogbnVsbCwKKyAgICAgIG5pY2tOYW1lOiBF
bWJlci5jb21wdXRlZC5yZWFkT25seSgnZmlyc3ROYW1lJykKKyAgICB9KTsKKyAgCisgICAgdmFy
IHRlZGR5ID0gVXNlci5jcmVhdGUoeworICAgICAgZmlyc3ROYW1lOiAnVGVkZHknLAorICAgICAg
bGFzdE5hbWU6ICAnWmVlbm55JworICAgIH0pOworICAKKyAgICB0ZWRkeS5nZXQoJ25pY2tOYW1l
Jyk7ICAgICAgICAgICAgICAvLyAnVGVkZHknCisgICAgdGVkZHkuc2V0KCduaWNrTmFtZScsICdU
ZWRkeUJlYXInKTsgLy8gdGhyb3dzIEV4Y2VwdGlvbgorICAgIC8vIHRocm93IG5ldyBFbWJlci5F
cnJvcignQ2Fubm90IFNldDogbmlja05hbWUgb246IDxVc2VyOmVtYmVyMjcyODg+JyApO2AKKyAg
ICB0ZWRkeS5nZXQoJ2ZpcnN0TmFtZScpOyAgICAgICAgICAgICAvLyAnVGVkZHknCisgICAgYGBg
CisgIAorICAgIEBtZXRob2QgcmVhZE9ubHkKKyAgICBAZm9yIEVtYmVyLmNvbXB1dGVkCisgICAg
QHBhcmFtIHtTdHJpbmd9IGRlcGVuZGVudEtleQorICAgIEByZXR1cm4ge0VtYmVyLkNvbXB1dGVk
UHJvcGVydHl9IGNvbXB1dGVkIHByb3BlcnR5IHdoaWNoIGNyZWF0ZXMgYQorICAgIG9uZSB3YXkg
Y29tcHV0ZWQgcHJvcGVydHkgdG8gdGhlIG9yaWdpbmFsIHZhbHVlIGZvciBwcm9wZXJ0eS4KKyAg
ICBAc2luY2UgMS41LjAKKyAgICBAcHVibGljCisgICovCisKKyAgZnVuY3Rpb24gcmVhZE9ubHko
ZGVwZW5kZW50S2V5KSB7CisgICAgcmV0dXJuIF9lbWJlck1ldGFsQWxpYXMuZGVmYXVsdChkZXBl
bmRlbnRLZXkpLnJlYWRPbmx5KCk7CisgIH0KKworICAvKioKKyAgICBDcmVhdGVzIGEgbmV3IHBy
b3BlcnR5IHRoYXQgaXMgYW4gYWxpYXMgZm9yIGFub3RoZXIgcHJvcGVydHkKKyAgICBvbiBhbiBv
YmplY3QuIENhbGxzIHRvIGBnZXRgIG9yIGBzZXRgIHRoaXMgcHJvcGVydHkgYmVoYXZlIGFzCisg
ICAgdGhvdWdoIHRoZXkgd2VyZSBjYWxsZWQgb24gdGhlIG9yaWdpbmFsIHByb3BlcnR5LCBidXQg
YWxzbworICAgIHByaW50IGEgZGVwcmVjYXRpb24gd2FybmluZy4KKyAgCisgICAgQG1ldGhvZCBk
ZXByZWNhdGluZ0FsaWFzCisgICAgQGZvciBFbWJlci5jb21wdXRlZAorICAgIEBwYXJhbSB7U3Ry
aW5nfSBkZXBlbmRlbnRLZXkKKyAgICBAcmV0dXJuIHtFbWJlci5Db21wdXRlZFByb3BlcnR5fSBj
b21wdXRlZCBwcm9wZXJ0eSB3aGljaCBjcmVhdGVzIGFuCisgICAgYWxpYXMgd2l0aCBhIGRlcHJl
Y2F0aW9uIHRvIHRoZSBvcmlnaW5hbCB2YWx1ZSBmb3IgcHJvcGVydHkuCisgICAgQHNpbmNlIDEu
Ny4wCisgICAgQHB1YmxpYworICAqLworCisgIGZ1bmN0aW9uIGRlcHJlY2F0aW5nQWxpYXMoZGVw
ZW5kZW50S2V5LCBvcHRpb25zKSB7CisgICAgcmV0dXJuIF9lbWJlck1ldGFsQ29tcHV0ZWQuY29t
cHV0ZWQoZGVwZW5kZW50S2V5LCB7CisgICAgICBnZXQ6IGZ1bmN0aW9uIChrZXkpIHsKKyAgICAg
ICAgX2VtYmVyTWV0YWxEZWJ1Zy5kZXByZWNhdGUoJ1VzYWdlIG9mIGAnICsga2V5ICsgJ2AgaXMg
ZGVwcmVjYXRlZCwgdXNlIGAnICsgZGVwZW5kZW50S2V5ICsgJ2AgaW5zdGVhZC4nLCBmYWxzZSwg
b3B0aW9ucyk7CisgICAgICAgIHJldHVybiBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhp
cywgZGVwZW5kZW50S2V5KTsKKyAgICAgIH0sCisgICAgICBzZXQ6IGZ1bmN0aW9uIChrZXksIHZh
bHVlKSB7CisgICAgICAgIF9lbWJlck1ldGFsRGVidWcuZGVwcmVjYXRlKCdVc2FnZSBvZiBgJyAr
IGtleSArICdgIGlzIGRlcHJlY2F0ZWQsIHVzZSBgJyArIGRlcGVuZGVudEtleSArICdgIGluc3Rl
YWQuJywgZmFsc2UsIG9wdGlvbnMpOworICAgICAgICBfZW1iZXJNZXRhbFByb3BlcnR5X3NldC5z
ZXQodGhpcywgZGVwZW5kZW50S2V5LCB2YWx1ZSk7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAg
ICAgIH0KKyAgICB9KTsKKyAgfQorfSk7CitlbmlmZWQoJ2VtYmVyLW1ldGFsL2NvcmUnLCBbJ2V4
cG9ydHMnLCAncmVxdWlyZSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX3JlcXVpcmUpIHsKKyAgLypn
bG9iYWxzIEVtYmVyOnRydWUsRU5WLEVtYmVyRU5WICovCisKKyAgJ3VzZSBzdHJpY3QnOworCisg
IC8qKgorICBAbW9kdWxlIGVtYmVyCisgIEBzdWJtb2R1bGUgZW1iZXItbWV0YWwKKyAgKi8KKwor
ICAvKioKKyAgICBUaGlzIG5hbWVzcGFjZSBjb250YWlucyBhbGwgRW1iZXIgbWV0aG9kcyBhbmQg
ZnVuY3Rpb25zLiBGdXR1cmUgdmVyc2lvbnMgb2YKKyAgICBFbWJlciBtYXkgb3ZlcndyaXRlIHRo
aXMgbmFtZXNwYWNlIGFuZCB0aGVyZWZvcmUsIHlvdSBzaG91bGQgYXZvaWQgYWRkaW5nIGFueQor
ICAgIG5ldyBwcm9wZXJ0aWVzLgorICAKKyAgICBBdCB0aGUgaGVhcnQgb2YgRW1iZXIgaXMgRW1i
ZXItUnVudGltZSwgYSBzZXQgb2YgY29yZSBmdW5jdGlvbnMgdGhhdCBwcm92aWRlCisgICAgY3Jv
c3MtcGxhdGZvcm0gY29tcGF0aWJpbGl0eSBhbmQgb2JqZWN0IHByb3BlcnR5IG9ic2VydmluZy4g
IEVtYmVyLVJ1bnRpbWUgaXMKKyAgICBzbWFsbCBhbmQgcGVyZm9ybWFuY2UtZm9jdXNlZCBzbyB5
b3UgY2FuIHVzZSBpdCBhbG9uZ3NpZGUgb3RoZXIKKyAgICBjcm9zcy1wbGF0Zm9ybSBsaWJyYXJp
ZXMgc3VjaCBhcyBqUXVlcnkuIEZvciBtb3JlIGRldGFpbHMsIHNlZQorICAgIFtFbWJlci1SdW50
aW1lXShodHRwOi8vZW1iZXJqcy5jb20vYXBpL21vZHVsZXMvZW1iZXItcnVudGltZS5odG1sKS4K
KyAgCisgICAgQGNsYXNzIEVtYmVyCisgICAgQHN0YXRpYworICAgIEB2ZXJzaW9uIDIuNi4yCisg
ICAgQHB1YmxpYworICAqLworCisgIGlmICgndW5kZWZpbmVkJyA9PT0gdHlwZW9mIEVtYmVyKSB7
CisgICAgLy8gQ3JlYXRlIGNvcmUgb2JqZWN0LiBNYWtlIGl0IGFjdCBsaWtlIGFuIGluc3RhbmNl
IG9mIEVtYmVyLk5hbWVzcGFjZSBzbyB0aGF0CisgICAgLy8gb2JqZWN0cyBhc3NpZ25lZCB0byBp
dCBhcmUgZ2l2ZW4gYSBzYW5lIHN0cmluZyByZXByZXNlbnRhdGlvbi4KKyAgICBFbWJlciA9IHt9
OworICB9CisKKyAgLy8gRGVmYXVsdCBpbXBvcnRzLCBleHBvcnRzIGFuZCBsb29rdXAgdG8gdGhl
IGdsb2JhbCBvYmplY3Q7CisgIHZhciBnbG9iYWwgPSBtYWluQ29udGV4dCB8fCB7fTsgLy8ganNo
aW50IGlnbm9yZTpsaW5lCisgIEVtYmVyLmltcG9ydHMgPSBFbWJlci5pbXBvcnRzIHx8IGdsb2Jh
bDsKKyAgRW1iZXIubG9va3VwID0gRW1iZXIubG9va3VwIHx8IGdsb2JhbDsKKyAgdmFyIGVtRXhw
b3J0cyA9IEVtYmVyLmV4cG9ydHMgPSBFbWJlci5leHBvcnRzIHx8IGdsb2JhbDsKKworICAvLyBh
bGlhc2VzIG5lZWRlZCB0byBrZWVwIG1pbmlmaWVycyBmcm9tIHJlbW92aW5nIHRoZSBnbG9iYWwg
Y29udGV4dAorICBlbUV4cG9ydHMuRW0gPSBlbUV4cG9ydHMuRW1iZXIgPSBFbWJlcjsKKworICAv
LyBNYWtlIHN1cmUgdGhlc2UgYXJlIHNldCB3aGV0aGVyIEVtYmVyIHdhcyBhbHJlYWR5IGRlZmlu
ZWQgb3Igbm90CisKKyAgRW1iZXIuaXNOYW1lc3BhY2UgPSB0cnVlOworCisgIEVtYmVyLnRvU3Ry
aW5nID0gZnVuY3Rpb24gKCkgeworICAgIHJldHVybiAnRW1iZXInOworICB9OworCisgIC8vIFRo
ZSBkZWJ1ZyBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIHRvIGdsb2JhbHMgd2l0aCBgcmVxdWlyZWAg
dG8KKyAgLy8gcHJldmVudCBiYWJlbC1wbHVnaW4tZmlsdGVyLWltcG9ydHMgZnJvbSByZW1vdmlu
ZyB0aGVtLgorICB2YXIgZGVidWdNb2R1bGUgPSBfcmVxdWlyZS5kZWZhdWx0KCdlbWJlci1tZXRh
bC9kZWJ1ZycpOworICBFbWJlci5hc3NlcnQgPSBkZWJ1Z01vZHVsZS5hc3NlcnQ7CisgIEVtYmVy
Lndhcm4gPSBkZWJ1Z01vZHVsZS53YXJuOworICBFbWJlci5kZWJ1ZyA9IGRlYnVnTW9kdWxlLmRl
YnVnOworICBFbWJlci5kZXByZWNhdGUgPSBkZWJ1Z01vZHVsZS5kZXByZWNhdGU7CisgIEVtYmVy
LmRlcHJlY2F0ZUZ1bmMgPSBkZWJ1Z01vZHVsZS5kZXByZWNhdGVGdW5jOworICBFbWJlci5ydW5J
bkRlYnVnID0gZGVidWdNb2R1bGUucnVuSW5EZWJ1ZzsKKworICAvKioKKyAgICBUaGUgc2VtYW50
aWMgdmVyc2lvbi4KKyAgCisgICAgQHByb3BlcnR5IFZFUlNJT04KKyAgICBAdHlwZSBTdHJpbmcK
KyAgICBAZGVmYXVsdCAnMi42LjInCisgICAgQHN0YXRpYworICAgIEBwdWJsaWMKKyAgKi8KKyAg
RW1iZXIuVkVSU0lPTiA9ICcyLjYuMic7CisKKyAgLyoqCisgICAgVGhlIGhhc2ggb2YgZW52aXJv
bm1lbnQgdmFyaWFibGVzIHVzZWQgdG8gY29udHJvbCB2YXJpb3VzIGNvbmZpZ3VyYXRpb24KKyAg
ICBzZXR0aW5ncy4gVG8gc3BlY2lmeSB5b3VyIG93biBvciBvdmVycmlkZSBkZWZhdWx0IHNldHRp
bmdzLCBhZGQgdGhlCisgICAgZGVzaXJlZCBwcm9wZXJ0aWVzIHRvIGEgZ2xvYmFsIGhhc2ggbmFt
ZWQgYEVtYmVyRU5WYCAob3IgYEVOVmAgZm9yCisgICAgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkg
d2l0aCBlYXJsaWVyIHZlcnNpb25zIG9mIEVtYmVyKS4gVGhlIGBFbWJlckVOVmAKKyAgICBoYXNo
IG11c3QgYmUgY3JlYXRlZCBiZWZvcmUgbG9hZGluZyBFbWJlci4KKyAgCisgICAgQHByb3BlcnR5
IEVOVgorICAgIEB0eXBlIE9iamVjdAorICAgIEBwdWJsaWMKKyAgKi8KKworICBpZiAoRW1iZXIu
RU5WKSB7CisgICAgLy8gZG8gbm90aGluZyBpZiBFbWJlci5FTlYgaXMgYWxyZWFkeSBzZXR1cAor
ICAgIEVtYmVyLmFzc2VydCgnRW1iZXIuRU5WIHNob3VsZCBiZSBhbiBvYmplY3QuJywgJ29iamVj
dCcgIT09IHR5cGVvZiBFbWJlci5FTlYpOworICB9IGVsc2UgaWYgKCd1bmRlZmluZWQnICE9PSB0
eXBlb2YgRW1iZXJFTlYpIHsKKyAgICBFbWJlci5FTlYgPSBFbWJlckVOVjsKKyAgfSBlbHNlIGlm
ICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIEVOVikgeworICAgIEVtYmVyLkVOViA9IEVOVjsKKyAg
fSBlbHNlIHsKKyAgICBFbWJlci5FTlYgPSB7fTsKKyAgfQorCisgIC8vIEVOQUJMRV9BTExfRkVB
VFVSRVMgd2FzIGRvY3VtZW50ZWQsIGJ1dCB5b3UgY2FuJ3QgYWN0dWFsbHkgZW5hYmxlIG5vbiBv
cHRpb25hbCBmZWF0dXJlcy4KKyAgaWYgKEVtYmVyLkVOVi5FTkFCTEVfQUxMX0ZFQVRVUkVTKSB7
CisgICAgRW1iZXIuRU5WLkVOQUJMRV9PUFRJT05BTF9GRUFUVVJFUyA9IEVtYmVyLkVOVi5FTkFC
TEVfQUxMX0ZFQVRVUkVTOworICB9CisKKyAgRW1iZXIuY29uZmlnID0gRW1iZXIuY29uZmlnIHx8
IHt9OworCisgIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4KKyAgLy8gQk9PVFNUUkFQCisgIC8vCisKKyAgLyoqCisgICAgRGV0ZXJt
aW5lcyB3aGV0aGVyIEVtYmVyIHNob3VsZCBhZGQgdG8gYEFycmF5YCwgYEZ1bmN0aW9uYCwgYW5k
IGBTdHJpbmdgCisgICAgbmF0aXZlIG9iamVjdCBwcm90b3R5cGVzLCBhIGZldyBleHRyYSBtZXRo
b2RzIGluIG9yZGVyIHRvIHByb3ZpZGUgYSBtb3JlCisgICAgZnJpZW5kbHkgQVBJLgorICAKKyAg
ICBXZSBnZW5lcmFsbHkgcmVjb21tZW5kIGxlYXZpbmcgdGhpcyBvcHRpb24gc2V0IHRvIHRydWUg
aG93ZXZlciwgaWYgeW91IG5lZWQKKyAgICB0byB0dXJuIGl0IG9mZiwgeW91IGNhbiBhZGQgdGhl
IGNvbmZpZ3VyYXRpb24gcHJvcGVydHkKKyAgICBgRVhURU5EX1BST1RPVFlQRVNgIHRvIGBFbWJl
ckVOVmAgYW5kIHNldCBpdCB0byBgZmFsc2VgLgorICAKKyAgICBOb3RlLCB3aGVuIGRpc2FibGVk
ICh0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciBFbWJlciBBZGRvbnMpLCB5b3Ugd2lsbAor
ICAgIGluc3RlYWQgaGF2ZSB0byBhY2Nlc3MgYWxsIG1ldGhvZHMgYW5kIGZ1bmN0aW9ucyBmcm9t
IHRoZSBFbWJlcgorICAgIG5hbWVzcGFjZS4KKyAgCisgICAgQHByb3BlcnR5IEVYVEVORF9QUk9U
T1RZUEVTCisgICAgQHR5cGUgQm9vbGVhbgorICAgIEBkZWZhdWx0IHRydWUKKyAgICBAZm9yIEVt
YmVyCisgICAgQHB1YmxpYworICAqLworICBFbWJlci5FWFRFTkRfUFJPVE9UWVBFUyA9IEVtYmVy
LkVOVi5FWFRFTkRfUFJPVE9UWVBFUzsKKworICBpZiAodHlwZW9mIEVtYmVyLkVYVEVORF9QUk9U
T1RZUEVTID09PSAndW5kZWZpbmVkJykgeworICAgIEVtYmVyLkVYVEVORF9QUk9UT1RZUEVTID0g
dHJ1ZTsKKyAgfQorCisgIC8qKgorICAgIFRoZSBgTE9HX1NUQUNLVFJBQ0VfT05fREVQUkVDQVRJ
T05gIHByb3BlcnR5LCB3aGVuIHRydWUsIHRlbGxzIEVtYmVyIHRvIGxvZworICAgIGEgZnVsbCBz
dGFjayB0cmFjZSBkdXJpbmcgZGVwcmVjYXRpb24gd2FybmluZ3MuCisgIAorICAgIEBwcm9wZXJ0
eSBMT0dfU1RBQ0tUUkFDRV9PTl9ERVBSRUNBVElPTgorICAgIEB0eXBlIEJvb2xlYW4KKyAgICBA
ZGVmYXVsdCB0cnVlCisgICAgQHB1YmxpYworICAqLworICBFbWJlci5MT0dfU1RBQ0tUUkFDRV9P
Tl9ERVBSRUNBVElPTiA9IEVtYmVyLkVOVi5MT0dfU1RBQ0tUUkFDRV9PTl9ERVBSRUNBVElPTiAh
PT0gZmFsc2U7CisKKyAgLyoqCisgICAgVGhlIGBMT0dfVkVSU0lPTmAgcHJvcGVydHksIHdoZW4g
dHJ1ZSwgdGVsbHMgRW1iZXIgdG8gbG9nIHZlcnNpb25zIG9mIGFsbAorICAgIGRlcGVuZGVudCBs
aWJyYXJpZXMgaW4gdXNlLgorICAKKyAgICBAcHJvcGVydHkgTE9HX1ZFUlNJT04KKyAgICBAdHlw
ZSBCb29sZWFuCisgICAgQGRlZmF1bHQgdHJ1ZQorICAgIEBwdWJsaWMKKyAgKi8KKyAgRW1iZXIu
TE9HX1ZFUlNJT04gPSBFbWJlci5FTlYuTE9HX1ZFUlNJT04gPT09IGZhbHNlID8gZmFsc2UgOiB0
cnVlOworCisgIC8qKgorICAgIEFuIGVtcHR5IGZ1bmN0aW9uIHVzZWZ1bCBmb3Igc29tZSBvcGVy
YXRpb25zLiBBbHdheXMgcmV0dXJucyBgdGhpc2AuCisgIAorICAgIEBtZXRob2QgSworICAgIEBy
ZXR1cm4ge09iamVjdH0KKyAgICBAcHVibGljCisgICovCisgIGZ1bmN0aW9uIEsoKSB7CisgICAg
cmV0dXJuIHRoaXM7CisgIH0KKyAgZXhwb3J0cy5LID0gSzsKKworICBFbWJlci5LID0gSzsKKyAg
Ly9UT0RPOiBFUzYgR0xPQkFMIFRPRE8KKworICBleHBvcnRzLmRlZmF1bHQgPSBFbWJlcjsKK30p
OworZW5pZmVkKCJlbWJlci1tZXRhbC9kZWJ1ZyIsIFsiZXhwb3J0cyJdLCBmdW5jdGlvbiAoZXhw
b3J0cykgeworICAidXNlIHN0cmljdCI7CisKKyAgZXhwb3J0cy5nZXREZWJ1Z0Z1bmN0aW9uID0g
Z2V0RGVidWdGdW5jdGlvbjsKKyAgZXhwb3J0cy5zZXREZWJ1Z0Z1bmN0aW9uID0gc2V0RGVidWdG
dW5jdGlvbjsKKyAgZXhwb3J0cy5hc3NlcnQgPSBhc3NlcnQ7CisgIGV4cG9ydHMuaW5mbyA9IGlu
Zm87CisgIGV4cG9ydHMud2FybiA9IHdhcm47CisgIGV4cG9ydHMuZGVidWcgPSBkZWJ1ZzsKKyAg
ZXhwb3J0cy5kZXByZWNhdGUgPSBkZXByZWNhdGU7CisgIGV4cG9ydHMuZGVwcmVjYXRlRnVuYyA9
IGRlcHJlY2F0ZUZ1bmM7CisgIGV4cG9ydHMucnVuSW5EZWJ1ZyA9IHJ1bkluRGVidWc7CisgIGV4
cG9ydHMuZGVidWdTZWFsID0gZGVidWdTZWFsOworICB2YXIgZGVidWdGdW5jdGlvbnMgPSB7Cisg
ICAgYXNzZXJ0OiBmdW5jdGlvbiAoKSB7fSwKKyAgICBpbmZvOiBmdW5jdGlvbiAoKSB7fSwKKyAg
ICB3YXJuOiBmdW5jdGlvbiAoKSB7fSwKKyAgICBkZWJ1ZzogZnVuY3Rpb24gKCkge30sCisgICAg
ZGVwcmVjYXRlOiBmdW5jdGlvbiAoKSB7fSwKKyAgICBkZXByZWNhdGVGdW5jOiBmdW5jdGlvbiAo
KSB7CisgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5
KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykgeworICAgICAgICBhcmdzW19r
ZXldID0gYXJndW1lbnRzW19rZXldOworICAgICAgfQorCisgICAgICByZXR1cm4gYXJnc1thcmdz
Lmxlbmd0aCAtIDFdOworICAgIH0sCisgICAgcnVuSW5EZWJ1ZzogZnVuY3Rpb24gKCkge30sCisg
ICAgZGVidWdTZWFsOiBmdW5jdGlvbiAoKSB7fQorICB9OworCisgIGV4cG9ydHMuZGVidWdGdW5j
dGlvbnMgPSBkZWJ1Z0Z1bmN0aW9uczsKKworICBmdW5jdGlvbiBnZXREZWJ1Z0Z1bmN0aW9uKG5h
bWUpIHsKKyAgICByZXR1cm4gZGVidWdGdW5jdGlvbnNbbmFtZV07CisgIH0KKworICBmdW5jdGlv
biBzZXREZWJ1Z0Z1bmN0aW9uKG5hbWUsIGZuKSB7CisgICAgZGVidWdGdW5jdGlvbnNbbmFtZV0g
PSBmbjsKKyAgfQorCisgIGZ1bmN0aW9uIGFzc2VydCgpIHsKKyAgICByZXR1cm4gZGVidWdGdW5j
dGlvbnMuYXNzZXJ0LmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTsKKyAgfQorCisgIGZ1bmN0
aW9uIGluZm8oKSB7CisgICAgcmV0dXJuIGRlYnVnRnVuY3Rpb25zLmluZm8uYXBwbHkodW5kZWZp
bmVkLCBhcmd1bWVudHMpOworICB9CisKKyAgZnVuY3Rpb24gd2FybigpIHsKKyAgICByZXR1cm4g
ZGVidWdGdW5jdGlvbnMud2Fybi5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7CisgIH0KKwor
ICBmdW5jdGlvbiBkZWJ1ZygpIHsKKyAgICByZXR1cm4gZGVidWdGdW5jdGlvbnMuZGVidWcuYXBw
bHkodW5kZWZpbmVkLCBhcmd1bWVudHMpOworICB9CisKKyAgZnVuY3Rpb24gZGVwcmVjYXRlKCkg
eworICAgIHJldHVybiBkZWJ1Z0Z1bmN0aW9ucy5kZXByZWNhdGUuYXBwbHkodW5kZWZpbmVkLCBh
cmd1bWVudHMpOworICB9CisKKyAgZnVuY3Rpb24gZGVwcmVjYXRlRnVuYygpIHsKKyAgICByZXR1
cm4gZGVidWdGdW5jdGlvbnMuZGVwcmVjYXRlRnVuYy5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50
cyk7CisgIH0KKworICBmdW5jdGlvbiBydW5JbkRlYnVnKCkgeworICAgIHJldHVybiBkZWJ1Z0Z1
bmN0aW9ucy5ydW5JbkRlYnVnLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTsKKyAgfQorCisg
IGZ1bmN0aW9uIGRlYnVnU2VhbCgpIHsKKyAgICByZXR1cm4gZGVidWdGdW5jdGlvbnMuZGVidWdT
ZWFsLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTsKKyAgfQorfSk7CitlbmlmZWQoJ2VtYmVy
LW1ldGFsL2RlcGVuZGVudF9rZXlzJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL3dhdGNoaW5n
J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbFdhdGNoaW5nKSB7CisgICdubyB1c2Ug
c3RyaWN0JzsKKyAgLy8gUmVtb3ZlICJ1c2Ugc3RyaWN0IjsgZnJvbSB0cmFuc3BpbGVkIG1vZHVs
ZSB1bnRpbAorICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM4
MDM4IGlzIGZpeGVkCisKKyAgZXhwb3J0cy5hZGREZXBlbmRlbnRLZXlzID0gYWRkRGVwZW5kZW50
S2V5czsKKyAgZXhwb3J0cy5yZW1vdmVEZXBlbmRlbnRLZXlzID0gcmVtb3ZlRGVwZW5kZW50S2V5
czsKKworICAvKioKKyAgQG1vZHVsZSBlbWJlcgorICBAc3VibW9kdWxlIGVtYmVyLW1ldGFsCisg
ICovCisKKyAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLgorICAvLyBERVBFTkRFTlQgS0VZUworICAvLworCisgIGZ1bmN0aW9uIGFk
ZERlcGVuZGVudEtleXMoZGVzYywgb2JqLCBrZXlOYW1lLCBtZXRhKSB7CisgICAgLy8gdGhlIGRl
c2NyaXB0b3IgaGFzIGEgbGlzdCBvZiBkZXBlbmRlbnQga2V5cywgc28KKyAgICAvLyBhZGQgYWxs
IG9mIGl0cyBkZXBlbmRlbnQga2V5cy4KKyAgICB2YXIgaWR4LCBsZW4sIGRlcEtleTsKKyAgICB2
YXIgZGVwS2V5cyA9IGRlc2MuX2RlcGVuZGVudEtleXM7CisgICAgaWYgKCFkZXBLZXlzKSB7Cisg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yIChpZHggPSAwLCBsZW4gPSBkZXBLZXlzLmxl
bmd0aDsgaWR4IDwgbGVuOyBpZHgrKykgeworICAgICAgZGVwS2V5ID0gZGVwS2V5c1tpZHhdOwor
ICAgICAgLy8gSW5jcmVtZW50IHRoZSBudW1iZXIgb2YgdGltZXMgZGVwS2V5IGRlcGVuZHMgb24g
a2V5TmFtZS4KKyAgICAgIG1ldGEud3JpdGVEZXBzKGRlcEtleSwga2V5TmFtZSwgKG1ldGEucGVl
a0RlcHMoZGVwS2V5LCBrZXlOYW1lKSB8fCAwKSArIDEpOworICAgICAgLy8gV2F0Y2ggdGhlIGRl
cEtleQorICAgICAgX2VtYmVyTWV0YWxXYXRjaGluZy53YXRjaChvYmosIGRlcEtleSwgbWV0YSk7
CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gcmVtb3ZlRGVwZW5kZW50S2V5cyhkZXNjLCBvYmos
IGtleU5hbWUsIG1ldGEpIHsKKyAgICAvLyB0aGUgZGVzY3JpcHRvciBoYXMgYSBsaXN0IG9mIGRl
cGVuZGVudCBrZXlzLCBzbworICAgIC8vIHJlbW92ZSBhbGwgb2YgaXRzIGRlcGVuZGVudCBrZXlz
LgorICAgIHZhciBkZXBLZXlzID0gZGVzYy5fZGVwZW5kZW50S2V5czsKKyAgICB2YXIgaWR4LCBs
ZW4sIGRlcEtleTsKKyAgICBpZiAoIWRlcEtleXMpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBmb3IgKGlkeCA9IDAsIGxlbiA9IGRlcEtleXMubGVuZ3RoOyBpZHggPCBsZW47IGlkeCsr
KSB7CisgICAgICBkZXBLZXkgPSBkZXBLZXlzW2lkeF07CisgICAgICAvLyBEZWNyZW1lbnQgdGhl
IG51bWJlciBvZiB0aW1lcyBkZXBLZXkgZGVwZW5kcyBvbiBrZXlOYW1lLgorICAgICAgbWV0YS53
cml0ZURlcHMoZGVwS2V5LCBrZXlOYW1lLCAobWV0YS5wZWVrRGVwcyhkZXBLZXksIGtleU5hbWUp
IHx8IDApIC0gMSk7CisgICAgICAvLyBVbndhdGNoIHRoZSBkZXBLZXkKKyAgICAgIF9lbWJlck1l
dGFsV2F0Y2hpbmcudW53YXRjaChvYmosIGRlcEtleSwgbWV0YSk7CisgICAgfQorICB9Cit9KTsK
K2VuaWZlZCgnZW1iZXItbWV0YWwvZGVwcmVjYXRlX3Byb3BlcnR5JywgWydleHBvcnRzJywgJ2Vt
YmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCcsICdlbWJlci1tZXRh
bC9wcm9wZXJ0eV9zZXQnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsRGVidWcsIF9l
bWJlck1ldGFsUHJvcGVydHlfZ2V0LCBfZW1iZXJNZXRhbFByb3BlcnR5X3NldCkgeworICAvKioK
KyAgQG1vZHVsZSBlbWJlcgorICBAc3VibW9kdWxlIGVtYmVyLW1ldGFsCisgICovCisKKyAgJ3Vz
ZSBzdHJpY3QnOworCisgIGV4cG9ydHMuZGVwcmVjYXRlUHJvcGVydHkgPSBkZXByZWNhdGVQcm9w
ZXJ0eTsKKworICAvKioKKyAgICBVc2VkIGludGVybmFsbHkgdG8gYWxsb3cgY2hhbmdpbmcgcHJv
cGVydGllcyBpbiBhIGJhY2t3YXJkcyBjb21wYXRpYmxlIHdheSwgYW5kIHByaW50IGEgaGVscGZ1
bAorICAgIGRlcHJlY2F0aW9uIHdhcm5pbmcuCisgIAorICAgIEBtZXRob2QgZGVwcmVjYXRlUHJv
cGVydHkKKyAgICBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gYWRkIHRoZSBk
ZXByZWNhdGVkIHByb3BlcnR5IHRvLgorICAgIEBwYXJhbSB7U3RyaW5nfSBkZXByZWNhdGVkS2V5
IFRoZSBwcm9wZXJ0eSB0byBhZGQgKGFuZCBwcmludCBkZXByZWNhdGlvbiB3YXJuaW5ncyB1cG9u
IGFjY2Vzc2luZykuCisgICAgQHBhcmFtIHtTdHJpbmd9IG5ld0tleSBUaGUgcHJvcGVydHkgdGhh
dCB3aWxsIGJlIGFsaWFzZWQuCisgICAgQHByaXZhdGUKKyAgICBAc2luY2UgMS43LjAKKyAgKi8K
KworICBmdW5jdGlvbiBkZXByZWNhdGVQcm9wZXJ0eShvYmplY3QsIGRlcHJlY2F0ZWRLZXksIG5l
d0tleSwgb3B0aW9ucykgeworICAgIGZ1bmN0aW9uIF9kZXByZWNhdGUoKSB7CisgICAgICBfZW1i
ZXJNZXRhbERlYnVnLmRlcHJlY2F0ZSgnVXNhZ2Ugb2YgYCcgKyBkZXByZWNhdGVkS2V5ICsgJ2Ag
aXMgZGVwcmVjYXRlZCwgdXNlIGAnICsgbmV3S2V5ICsgJ2AgaW5zdGVhZC4nLCBmYWxzZSwgb3B0
aW9ucyk7CisgICAgfQorCisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgZGVwcmVj
YXRlZEtleSwgeworICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAorICAgICAgZW51bWVyYWJsZTog
ZmFsc2UsCisgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICBfZGVwcmVjYXRl
KCk7CisgICAgICAgIF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LnNldCh0aGlzLCBuZXdLZXksIHZh
bHVlKTsKKyAgICAgIH0sCisgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgX2RlcHJl
Y2F0ZSgpOworICAgICAgICByZXR1cm4gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMs
IG5ld0tleSk7CisgICAgICB9CisgICAgfSk7CisgIH0KK30pOworZW5pZmVkKCdlbWJlci1tZXRh
bC9kaWN0aW9uYXJ5JywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2VtcHR5X29iamVjdCddLCBm
dW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxFbXB0eV9vYmplY3QpIHsKKyAgJ3VzZSBzdHJp
Y3QnOworCisgIGV4cG9ydHMuZGVmYXVsdCA9IG1ha2VEaWN0aW9uYXJ5OworCisgIC8vIHRoZSBk
ZWxldGUgaXMgbWVhbnQgdG8gaGludCBhdCBydW50aW1lcyB0aGF0IHRoaXMgb2JqZWN0IHNob3Vs
ZCByZW1haW4gaW4KKyAgLy8gZGljdGlvbmFyeSBtb2RlLiBUaGlzIGlzIGNsZWFybHkgYSBydW50
aW1lIHNwZWNpZmljIGhhY2ssIGJ1dCBjdXJyZW50bHkgaXQKKyAgLy8gYXBwZWFycyB3b3J0aHdo
aWxlIGluIHNvbWUgdXNlY2FzZXMuIFBsZWFzZSBub3RlLCB0aGVzZSBkZWxldGVzIGRvIGluY3Jl
YXNlCisgIC8vIHRoZSBjb3N0IG9mIGNyZWF0aW9uIGRyYW1hdGljYWxseSBvdmVyIGEgcGxhaW4g
T2JqZWN0LmNyZWF0ZS4gQW5kIGFzIHRoaXMKKyAgLy8gb25seSBtYWtlcyBzZW5zZSBmb3IgbG9u
Zy1saXZlZCBkaWN0aW9uYXJpZXMgdGhhdCBhcmVuJ3QgaW5zdGFudGlhdGVkIG9mdGVuLgorCisg
IGZ1bmN0aW9uIG1ha2VEaWN0aW9uYXJ5KHBhcmVudCkgeworICAgIHZhciBkaWN0OworICAgIGlm
IChwYXJlbnQgPT09IG51bGwpIHsKKyAgICAgIGRpY3QgPSBuZXcgX2VtYmVyTWV0YWxFbXB0eV9v
YmplY3QuZGVmYXVsdCgpOworICAgIH0gZWxzZSB7CisgICAgICBkaWN0ID0gT2JqZWN0LmNyZWF0
ZShwYXJlbnQpOworICAgIH0KKyAgICBkaWN0WydfZGljdCddID0gbnVsbDsKKyAgICBkZWxldGUg
ZGljdFsnX2RpY3QnXTsKKyAgICByZXR1cm4gZGljdDsKKyAgfQorfSk7CitlbmlmZWQoImVtYmVy
LW1ldGFsL2VtcHR5X29iamVjdCIsIFsiZXhwb3J0cyJdLCBmdW5jdGlvbiAoZXhwb3J0cykgewor
ICAvLyBUaGlzIGV4aXN0cyBiZWNhdXNlIGBPYmplY3QuY3JlYXRlKG51bGwpYCBpcyBhYnN1cmRs
eSBzbG93IGNvbXBhcmVkCisgIC8vIHRvIGBuZXcgRW1wdHlPYmplY3QoKWAuIEluIGVpdGhlciBj
YXNlLCB5b3Ugd2FudCBhIG51bGwgcHJvdG90eXBlCisgIC8vIHdoZW4geW91J3JlIHRyZWF0aW5n
IHRoZSBvYmplY3QgaW5zdGFuY2VzIGFzIGFyYml0cmFyeSBkaWN0aW9uYXJpZXMKKyAgLy8gYW5k
IGRvbid0IHdhbnQgeW91ciBrZXlzIGNvbGxpZGluZyB3aXRoIGJ1aWxkLWluIG1ldGhvZHMgb24g
dGhlCisgIC8vIGRlZmF1bHQgb2JqZWN0IHByb3RvdHlwZS4KKworICAidXNlIHN0cmljdCI7CisK
KyAgdmFyIHByb3RvID0gT2JqZWN0LmNyZWF0ZShudWxsLCB7CisgICAgLy8gd2l0aG91dCB0aGlz
LCB3ZSB3aWxsIGFsd2F5cyBzdGlsbCBlbmQgdXAgd2l0aCAobmV3CisgICAgLy8gRW1wdHlPYmpl
Y3QoKSkuY29uc3RydWN0b3IgPT09IE9iamVjdAorICAgIGNvbnN0cnVjdG9yOiB7CisgICAgICB2
YWx1ZTogdW5kZWZpbmVkLAorICAgICAgZW51bWVyYWJsZTogZmFsc2UsCisgICAgICB3cml0YWJs
ZTogdHJ1ZQorICAgIH0KKyAgfSk7CisKKyAgZnVuY3Rpb24gRW1wdHlPYmplY3QoKSB7fQorICBF
bXB0eU9iamVjdC5wcm90b3R5cGUgPSBwcm90bzsKKyAgZXhwb3J0cy5kZWZhdWx0ID0gRW1wdHlP
YmplY3Q7Cit9KTsKK2VuaWZlZCgnZW1iZXItbWV0YWwvZW52aXJvbm1lbnQnLCBbJ2V4cG9ydHMn
LCAnZW1iZXItbWV0YWwvY29yZSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxDb3Jl
KSB7CisgICd1c2Ugc3RyaWN0JzsKKworICAvKgorICAgIEVtYmVyIGNhbiBydW4gaW4gbWFueSBk
aWZmZXJlbnQgZW52aXJvbm1lbnRzLCBpbmNsdWRpbmcgZW52aXJvbm1lbnRzIGxpa2UKKyAgICBO
b2RlLmpzIHdoZXJlIHRoZSBET00gaXMgdW5hdmFpbGFibGUuIFRoaXMgb2JqZWN0IHNlcnZlcyBh
cyBhbiBhYnN0cmFjdGlvbgorICAgIG92ZXIgdGhlIGJyb3dzZXIgZmVhdHVyZXMgdGhhdCBFbWJl
ciByZWxpZXMgb24sIHNvIHRoYXQgY29kZSBkb2VzIG5vdAorICAgIGV4cGxvZGUgd2hlbiB0cnlp
bmcgdG8gYm9vdCBpbiBhbiBlbnZpcm9ubWVudCB0aGF0IGRvZXNuJ3QgaGF2ZSB0aGVtLgorICAK
KyAgICBUaGlzIGlzIGEgcHJpdmF0ZSBhYnN0cmFjdGlvbi4gSW4gdGhlIGZ1dHVyZSwgd2UgaG9w
ZSB0aGF0IG90aGVyCisgICAgYWJzdHJhY3Rpb25zIChsaWtlIGBMb2NhdGlvbmAsIGBSZW5kZXJl
cmAsIGBkb20taGVscGVyYCkgY2FuIGZ1bGx5IGFic3RyYWN0CisgICAgb3ZlciB0aGUgZGlmZmVy
ZW5jZXMgaW4gZW52aXJvbm1lbnQuCisgICovCisgIHZhciBlbnZpcm9ubWVudDsKKworICAvLyBU
aGlzIGNvZGUgYXR0ZW1wdHMgdG8gYXV0b21hdGljYWxseSBkZXRlY3QgYW4gZW52aXJvbm1lbnQg
d2l0aCBET00KKyAgLy8gYnkgc2VhcmNoaW5nIGZvciB3aW5kb3cgYW5kIGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQuIEFuIGVudmlyb25tZW50CisgIC8vIHdpdGggRE9NIG1heSBkaXNhYmxlIHRoZSBE
T00gZnVuY3Rpb25hbGl0eSBvZiBFbWJlciBleHBsaWNpdGx5IGJ5CisgIC8vIGRlZmluaW5nIGEg
YGRpc2FibGVCcm93c2VyRW52aXJvbm1lbnRgIEVOVi4KKyAgdmFyIGhhc0RPTSA9IHR5cGVvZiB3
aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcg
JiYgdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmICFfZW1i
ZXJNZXRhbENvcmUuZGVmYXVsdC5FTlYuZGlzYWJsZUJyb3dzZXJFbnZpcm9ubWVudDsKKworICBp
ZiAoaGFzRE9NKSB7CisgICAgZW52aXJvbm1lbnQgPSB7CisgICAgICBoYXNET006IHRydWUsCisg
ICAgICBpc0Nocm9tZTogISF3aW5kb3cuY2hyb21lICYmICF3aW5kb3cub3BlcmEsCisgICAgICBp
c0ZpcmVmb3g6IHR5cGVvZiBJbnN0YWxsVHJpZ2dlciAhPT0gJ3VuZGVmaW5lZCcsCisgICAgICBp
c1BoYW50b206ICEhd2luZG93LmNhbGxQaGFudG9tLAorICAgICAgbG9jYXRpb246IHdpbmRvdy5s
b2NhdGlvbiwKKyAgICAgIGhpc3Rvcnk6IHdpbmRvdy5oaXN0b3J5LAorICAgICAgdXNlckFnZW50
OiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCwKKyAgICAgIGdsb2JhbDogd2luZG93CisgICAg
fTsKKyAgfSBlbHNlIHsKKyAgICBlbnZpcm9ubWVudCA9IHsKKyAgICAgIGhhc0RPTTogZmFsc2Us
CisgICAgICBpc0Nocm9tZTogZmFsc2UsCisgICAgICBpc0ZpcmVmb3g6IGZhbHNlLAorICAgICAg
aXNQaGFudG9tOiBmYWxzZSwKKyAgICAgIGxvY2F0aW9uOiBudWxsLAorICAgICAgaGlzdG9yeTog
bnVsbCwKKyAgICAgIHVzZXJBZ2VudDogJ0x5bnggKHRleHRtb2RlKScsCisgICAgICBnbG9iYWw6
IG51bGwKKyAgICB9OworICB9CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gZW52aXJvbm1lbnQ7Cit9
KTsKK2VuaWZlZCgnZW1iZXItbWV0YWwvZXJyb3InLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwv
Y29yZSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxDb3JlKSB7CisgICd1c2Ugc3Ry
aWN0JzsKKworICBleHBvcnRzLmRlZmF1bHQgPSBFbWJlckVycm9yOworCisgIHZhciBlcnJvclBy
b3BzID0gWydkZXNjcmlwdGlvbicsICdmaWxlTmFtZScsICdsaW5lTnVtYmVyJywgJ21lc3NhZ2Un
LCAnbmFtZScsICdudW1iZXInLCAnc3RhY2snXTsKKworICAvKioKKyAgICBBIHN1YmNsYXNzIG9m
IHRoZSBKYXZhU2NyaXB0IEVycm9yIG9iamVjdCBmb3IgdXNlIGluIEVtYmVyLgorICAKKyAgICBA
Y2xhc3MgRXJyb3IKKyAgICBAbmFtZXNwYWNlIEVtYmVyCisgICAgQGV4dGVuZHMgRXJyb3IKKyAg
ICBAY29uc3RydWN0b3IKKyAgICBAcHVibGljCisgICovCisKKyAgZnVuY3Rpb24gRW1iZXJFcnJv
cigpIHsKKyAgICB2YXIgdG1wID0gRXJyb3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKworICAg
IC8vIEFkZHMgYSBgc3RhY2tgIHByb3BlcnR5IHRvIHRoZSBnaXZlbiBlcnJvciBvYmplY3QgdGhh
dCB3aWxsIHlpZWxkIHRoZQorICAgIC8vIHN0YWNrIHRyYWNlIGF0IHRoZSB0aW1lIGNhcHR1cmVT
dGFja1RyYWNlIHdhcyBjYWxsZWQuCisgICAgLy8gV2hlbiBjb2xsZWN0aW5nIHRoZSBzdGFjayB0
cmFjZSBhbGwgZnJhbWVzIGFib3ZlIHRoZSB0b3Btb3N0IGNhbGwKKyAgICAvLyB0byB0aGlzIGZ1
bmN0aW9uLCBpbmNsdWRpbmcgdGhhdCBjYWxsLCB3aWxsIGJlIGxlZnQgb3V0IG9mIHRoZQorICAg
IC8vIHN0YWNrIHRyYWNlLgorICAgIC8vIFRoaXMgaXMgdXNlZnVsIGJlY2F1c2Ugd2UgY2FuIGhp
ZGUgRW1iZXIgaW1wbGVtZW50YXRpb24gZGV0YWlscworICAgIC8vIHRoYXQgYXJlIG5vdCB2ZXJ5
IGhlbHBmdWwgZm9yIHRoZSB1c2VyLgorICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkg
eworICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgX2VtYmVyTWV0YWxDb3JlLmRl
ZmF1bHQuRXJyb3IpOworICAgIH0KKyAgICAvLyBVbmZvcnR1bmF0ZWx5IGVycm9ycyBhcmUgbm90
IGVudW1lcmFibGUgaW4gQ2hyb21lIChhdCBsZWFzdCksIHNvIGBmb3IgcHJvcCBpbiB0bXBgIGRv
ZXNuJ3Qgd29yay4KKyAgICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBlcnJvclByb3BzLmxlbmd0
aDsgaWR4KyspIHsKKyAgICAgIHRoaXNbZXJyb3JQcm9wc1tpZHhdXSA9IHRtcFtlcnJvclByb3Bz
W2lkeF1dOworICAgIH0KKyAgfQorCisgIEVtYmVyRXJyb3IucHJvdG90eXBlID0gT2JqZWN0LmNy
ZWF0ZShFcnJvci5wcm90b3R5cGUpOworfSk7CitlbmlmZWQoJ2VtYmVyLW1ldGFsL2V2ZW50cycs
IFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9kZWJ1ZycsICdlbWJlci1tZXRhbC91dGlscycsICdl
bWJlci1tZXRhbC9tZXRhJywgJ2VtYmVyLW1ldGFsL21ldGFfbGlzdGVuZXJzJ10sIGZ1bmN0aW9u
IChleHBvcnRzLCBfZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJNZXRhbFV0aWxzLCBfZW1iZXJNZXRh
bE1ldGEsIF9lbWJlck1ldGFsTWV0YV9saXN0ZW5lcnMpIHsKKyAgJ25vIHVzZSBzdHJpY3QnOwor
ICAvLyBSZW1vdmUgInVzZSBzdHJpY3QiOyBmcm9tIHRyYW5zcGlsZWQgbW9kdWxlIHVudGlsCisg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzgwMzggaXMgZml4
ZWQKKworICAvKioKKyAgQG1vZHVsZSBlbWJlcgorICBAc3VibW9kdWxlIGVtYmVyLW1ldGFsCisg
ICovCisgIGV4cG9ydHMuYWNjdW11bGF0ZUxpc3RlbmVycyA9IGFjY3VtdWxhdGVMaXN0ZW5lcnM7
CisgIGV4cG9ydHMuYWRkTGlzdGVuZXIgPSBhZGRMaXN0ZW5lcjsKKyAgZXhwb3J0cy5yZW1vdmVM
aXN0ZW5lciA9IHJlbW92ZUxpc3RlbmVyOworICBleHBvcnRzLnN1c3BlbmRMaXN0ZW5lciA9IHN1
c3BlbmRMaXN0ZW5lcjsKKyAgZXhwb3J0cy5zdXNwZW5kTGlzdGVuZXJzID0gc3VzcGVuZExpc3Rl
bmVyczsKKyAgZXhwb3J0cy53YXRjaGVkRXZlbnRzID0gd2F0Y2hlZEV2ZW50czsKKyAgZXhwb3J0
cy5zZW5kRXZlbnQgPSBzZW5kRXZlbnQ7CisgIGV4cG9ydHMuaGFzTGlzdGVuZXJzID0gaGFzTGlz
dGVuZXJzOworICBleHBvcnRzLmxpc3RlbmVyc0ZvciA9IGxpc3RlbmVyc0ZvcjsKKyAgZXhwb3J0
cy5vbiA9IG9uOworCisgIC8qCisgICAgVGhlIGV2ZW50IHN5c3RlbSB1c2VzIGEgc2VyaWVzIG9m
IG5lc3RlZCBoYXNoZXMgdG8gc3RvcmUgbGlzdGVuZXJzIG9uIGFuCisgICAgb2JqZWN0LiBXaGVu
IGEgbGlzdGVuZXIgaXMgcmVnaXN0ZXJlZCwgb3Igd2hlbiBhbiBldmVudCBhcnJpdmVzLCB0aGVz
ZQorICAgIGhhc2hlcyBhcmUgY29uc3VsdGVkIHRvIGRldGVybWluZSB3aGljaCB0YXJnZXQgYW5k
IGFjdGlvbiBwYWlyIHRvIGludm9rZS4KKyAgCisgICAgVGhlIGhhc2hlcyBhcmUgc3RvcmVkIGlu
IHRoZSBvYmplY3QncyBtZXRhIGhhc2gsIGFuZCBsb29rIGxpa2UgdGhpczoKKyAgCisgICAgICAg
IC8vIE9iamVjdCdzIG1ldGEgaGFzaAorICAgICAgICB7CisgICAgICAgICAgbGlzdGVuZXJzOiB7
ICAgICAgIC8vIHZhcmlhYmxlIG5hbWU6IGBsaXN0ZW5lclNldGAKKyAgICAgICAgICAgICJmb286
Y2hhbmdlZCI6IFsgLy8gdmFyaWFibGUgbmFtZTogYGFjdGlvbnNgCisgICAgICAgICAgICAgIHRh
cmdldCwgbWV0aG9kLCBmbGFncworICAgICAgICAgICAgXQorICAgICAgICAgIH0KKyAgICAgICAg
fQorICAKKyAgKi8KKworICBmdW5jdGlvbiBpbmRleE9mKGFycmF5LCB0YXJnZXQsIG1ldGhvZCkg
eworICAgIHZhciBpbmRleCA9IC0xOworICAgIC8vIGhhc2hlcyBhcmUgYWRkZWQgdG8gdGhlIGVu
ZCBvZiB0aGUgZXZlbnQgYXJyYXkKKyAgICAvLyBzbyBpdCBtYWtlcyBzZW5zZSB0byBzdGFydCBz
ZWFyY2hpbmcgYXQgdGhlIGVuZAorICAgIC8vIG9mIHRoZSBhcnJheSBhbmQgc2VhcmNoIGluIHJl
dmVyc2UKKyAgICBmb3IgKHZhciBpID0gYXJyYXkubGVuZ3RoIC0gMzsgaSA+PSAwOyBpIC09IDMp
IHsKKyAgICAgIGlmICh0YXJnZXQgPT09IGFycmF5W2ldICYmIG1ldGhvZCA9PT0gYXJyYXlbaSAr
IDFdKSB7CisgICAgICAgIGluZGV4ID0gaTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAg
fQorICAgIHJldHVybiBpbmRleDsKKyAgfQorCisgIGZ1bmN0aW9uIGFjY3VtdWxhdGVMaXN0ZW5l
cnMob2JqLCBldmVudE5hbWUsIG90aGVyQWN0aW9ucykgeworICAgIHZhciBtZXRhID0gX2VtYmVy
TWV0YWxNZXRhLnBlZWtNZXRhKG9iaik7CisgICAgaWYgKCFtZXRhKSB7CisgICAgICByZXR1cm47
CisgICAgfQorICAgIHZhciBhY3Rpb25zID0gbWV0YS5tYXRjaGluZ0xpc3RlbmVycyhldmVudE5h
bWUpOworICAgIHZhciBuZXdBY3Rpb25zID0gW107CisKKyAgICBmb3IgKHZhciBpID0gYWN0aW9u
cy5sZW5ndGggLSAzOyBpID49IDA7IGkgLT0gMykgeworICAgICAgdmFyIHRhcmdldCA9IGFjdGlv
bnNbaV07CisgICAgICB2YXIgbWV0aG9kID0gYWN0aW9uc1tpICsgMV07CisgICAgICB2YXIgZmxh
Z3MgPSBhY3Rpb25zW2kgKyAyXTsKKyAgICAgIHZhciBhY3Rpb25JbmRleCA9IGluZGV4T2Yob3Ro
ZXJBY3Rpb25zLCB0YXJnZXQsIG1ldGhvZCk7CisKKyAgICAgIGlmIChhY3Rpb25JbmRleCA9PT0g
LTEpIHsKKyAgICAgICAgb3RoZXJBY3Rpb25zLnB1c2godGFyZ2V0LCBtZXRob2QsIGZsYWdzKTsK
KyAgICAgICAgbmV3QWN0aW9ucy5wdXNoKHRhcmdldCwgbWV0aG9kLCBmbGFncyk7CisgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIG5ld0FjdGlvbnM7CisgIH0KKworICAvKioKKyAgICBBZGQg
YW4gZXZlbnQgbGlzdGVuZXIKKyAgCisgICAgQG1ldGhvZCBhZGRMaXN0ZW5lcgorICAgIEBmb3Ig
RW1iZXIKKyAgICBAcGFyYW0gb2JqCisgICAgQHBhcmFtIHtTdHJpbmd9IGV2ZW50TmFtZQorICAg
IEBwYXJhbSB7T2JqZWN0fEZ1bmN0aW9ufSB0YXJnZXQgQSB0YXJnZXQgb2JqZWN0IG9yIGEgZnVu
Y3Rpb24KKyAgICBAcGFyYW0ge0Z1bmN0aW9ufFN0cmluZ30gbWV0aG9kIEEgZnVuY3Rpb24gb3Ig
dGhlIG5hbWUgb2YgYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgb24gYHRhcmdldGAKKyAgICBAcGFy
YW0ge0Jvb2xlYW59IG9uY2UgQSBmbGFnIHdoZXRoZXIgYSBmdW5jdGlvbiBzaG91bGQgb25seSBi
ZSBjYWxsZWQgb25jZQorICAgIEBwdWJsaWMKKyAgKi8KKworICBmdW5jdGlvbiBhZGRMaXN0ZW5l
cihvYmosIGV2ZW50TmFtZSwgdGFyZ2V0LCBtZXRob2QsIG9uY2UpIHsKKyAgICBfZW1iZXJNZXRh
bERlYnVnLmFzc2VydCgnWW91IG11c3QgcGFzcyBhdCBsZWFzdCBhbiBvYmplY3QgYW5kIGV2ZW50
IG5hbWUgdG8gRW1iZXIuYWRkTGlzdGVuZXInLCAhIW9iaiAmJiAhIWV2ZW50TmFtZSk7CisKKyAg
ICBfZW1iZXJNZXRhbERlYnVnLmRlcHJlY2F0ZSgnZGlkSW5pdEF0dHJzIGNhbGxlZCBpbiAnICsg
KG9iaiAmJiBvYmoudG9TdHJpbmcgJiYgb2JqLnRvU3RyaW5nKCkpICsgJy4nLCBldmVudE5hbWUg
IT09ICdkaWRJbml0QXR0cnMnLCB7CisgICAgICBpZDogJ2VtYmVyLXZpZXdzLmRpZC1pbml0LWF0
dHJzJywKKyAgICAgIHVudGlsOiAnMy4wLjAnLAorICAgICAgdXJsOiAnaHR0cDovL2VtYmVyanMu
Y29tL2RlcHJlY2F0aW9ucy92Mi54I3RvY19lbWJlci1jb21wb25lbnQtZGlkaW5pdGF0dHJzJwor
ICAgIH0pOworCisgICAgaWYgKCFtZXRob2QgJiYgJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIHRhcmdl
dCkgeworICAgICAgbWV0aG9kID0gdGFyZ2V0OworICAgICAgdGFyZ2V0ID0gbnVsbDsKKyAgICB9
CisKKyAgICB2YXIgZmxhZ3MgPSAwOworICAgIGlmIChvbmNlKSB7CisgICAgICBmbGFncyB8PSBf
ZW1iZXJNZXRhbE1ldGFfbGlzdGVuZXJzLk9OQ0U7CisgICAgfQorCisgICAgX2VtYmVyTWV0YWxN
ZXRhLm1ldGEob2JqKS5hZGRUb0xpc3RlbmVycyhldmVudE5hbWUsIHRhcmdldCwgbWV0aG9kLCBm
bGFncyk7CisKKyAgICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIG9iai5kaWRBZGRMaXN0ZW5l
cikgeworICAgICAgb2JqLmRpZEFkZExpc3RlbmVyKGV2ZW50TmFtZSwgdGFyZ2V0LCBtZXRob2Qp
OworICAgIH0KKyAgfQorCisgIC8qKgorICAgIFJlbW92ZSBhbiBldmVudCBsaXN0ZW5lcgorICAK
KyAgICBBcmd1bWVudHMgc2hvdWxkIG1hdGNoIHRob3NlIHBhc3NlZCB0byBgRW1iZXIuYWRkTGlz
dGVuZXJgLgorICAKKyAgICBAbWV0aG9kIHJlbW92ZUxpc3RlbmVyCisgICAgQGZvciBFbWJlcgor
ICAgIEBwYXJhbSBvYmoKKyAgICBAcGFyYW0ge1N0cmluZ30gZXZlbnROYW1lCisgICAgQHBhcmFt
IHtPYmplY3R8RnVuY3Rpb259IHRhcmdldCBBIHRhcmdldCBvYmplY3Qgb3IgYSBmdW5jdGlvbgor
ICAgIEBwYXJhbSB7RnVuY3Rpb258U3RyaW5nfSBtZXRob2QgQSBmdW5jdGlvbiBvciB0aGUgbmFt
ZSBvZiBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBvbiBgdGFyZ2V0YAorICAgIEBwdWJsaWMKKyAg
Ki8KKworICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihvYmosIGV2ZW50TmFtZSwgdGFyZ2V0LCBt
ZXRob2QpIHsKKyAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnWW91IG11c3QgcGFzcyBhdCBs
ZWFzdCBhbiBvYmplY3QgYW5kIGV2ZW50IG5hbWUgdG8gRW1iZXIucmVtb3ZlTGlzdGVuZXInLCAh
IW9iaiAmJiAhIWV2ZW50TmFtZSk7CisKKyAgICBpZiAoIW1ldGhvZCAmJiAnZnVuY3Rpb24nID09
PSB0eXBlb2YgdGFyZ2V0KSB7CisgICAgICBtZXRob2QgPSB0YXJnZXQ7CisgICAgICB0YXJnZXQg
PSBudWxsOworICAgIH0KKworICAgIF9lbWJlck1ldGFsTWV0YS5tZXRhKG9iaikucmVtb3ZlRnJv
bUxpc3RlbmVycyhldmVudE5hbWUsIHRhcmdldCwgbWV0aG9kLCBmdW5jdGlvbiAoKSB7CisgICAg
ICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIG9iai5kaWRSZW1vdmVMaXN0ZW5lcikgeworICAg
ICAgICBvYmouZGlkUmVtb3ZlTGlzdGVuZXIuYXBwbHkob2JqLCBhcmd1bWVudHMpOworICAgICAg
fQorICAgIH0pOworICB9CisKKyAgLyoqCisgICAgU3VzcGVuZCBsaXN0ZW5lciBkdXJpbmcgY2Fs
bGJhY2suCisgIAorICAgIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBieSB0aGUgdGFyZ2V0IG9m
IHRoZSBldmVudCBsaXN0ZW5lcgorICAgIHdoZW4gaXQgaXMgdGFraW5nIGFuIGFjdGlvbiB0aGF0
IHdvdWxkIGNhdXNlIHRoZSBldmVudCwgZS5nLgorICAgIGFuIG9iamVjdCBtaWdodCBzdXNwZW5k
IGl0cyBwcm9wZXJ0eSBjaGFuZ2UgbGlzdGVuZXIgd2hpbGUgaXQgaXMKKyAgICBzZXR0aW5nIHRo
YXQgcHJvcGVydHkuCisgIAorICAgIEBtZXRob2Qgc3VzcGVuZExpc3RlbmVyCisgICAgQGZvciBF
bWJlcgorICAKKyAgICBAcHJpdmF0ZQorICAgIEBwYXJhbSBvYmoKKyAgICBAcGFyYW0ge1N0cmlu
Z30gZXZlbnROYW1lCisgICAgQHBhcmFtIHtPYmplY3R8RnVuY3Rpb259IHRhcmdldCBBIHRhcmdl
dCBvYmplY3Qgb3IgYSBmdW5jdGlvbgorICAgIEBwYXJhbSB7RnVuY3Rpb258U3RyaW5nfSBtZXRo
b2QgQSBmdW5jdGlvbiBvciB0aGUgbmFtZSBvZiBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBvbiBg
dGFyZ2V0YAorICAgIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrCisgICovCisKKyAgZnVuY3Rp
b24gc3VzcGVuZExpc3RlbmVyKG9iaiwgZXZlbnROYW1lLCB0YXJnZXQsIG1ldGhvZCwgY2FsbGJh
Y2spIHsKKyAgICByZXR1cm4gc3VzcGVuZExpc3RlbmVycyhvYmosIFtldmVudE5hbWVdLCB0YXJn
ZXQsIG1ldGhvZCwgY2FsbGJhY2spOworICB9CisKKyAgLyoqCisgICAgU3VzcGVuZHMgbXVsdGlw
bGUgbGlzdGVuZXJzIGR1cmluZyBhIGNhbGxiYWNrLgorICAKKyAgICBAbWV0aG9kIHN1c3BlbmRM
aXN0ZW5lcnMKKyAgICBAZm9yIEVtYmVyCisgIAorICAgIEBwcml2YXRlCisgICAgQHBhcmFtIG9i
agorICAgIEBwYXJhbSB7QXJyYXl9IGV2ZW50TmFtZXMgQXJyYXkgb2YgZXZlbnQgbmFtZXMKKyAg
ICBAcGFyYW0ge09iamVjdHxGdW5jdGlvbn0gdGFyZ2V0IEEgdGFyZ2V0IG9iamVjdCBvciBhIGZ1
bmN0aW9uCisgICAgQHBhcmFtIHtGdW5jdGlvbnxTdHJpbmd9IG1ldGhvZCBBIGZ1bmN0aW9uIG9y
IHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIG9uIGB0YXJnZXRgCisgICAgQHBh
cmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sKKyAgKi8KKworICBmdW5jdGlvbiBzdXNwZW5kTGlzdGVu
ZXJzKG9iaiwgZXZlbnROYW1lcywgdGFyZ2V0LCBtZXRob2QsIGNhbGxiYWNrKSB7CisgICAgaWYg
KCFtZXRob2QgJiYgJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIHRhcmdldCkgeworICAgICAgbWV0aG9k
ID0gdGFyZ2V0OworICAgICAgdGFyZ2V0ID0gbnVsbDsKKyAgICB9CisgICAgcmV0dXJuIF9lbWJl
ck1ldGFsTWV0YS5tZXRhKG9iaikuc3VzcGVuZExpc3RlbmVycyhldmVudE5hbWVzLCB0YXJnZXQs
IG1ldGhvZCwgY2FsbGJhY2spOworICB9CisKKyAgLyoqCisgICAgUmV0dXJuIGEgbGlzdCBvZiBj
dXJyZW50bHkgd2F0Y2hlZCBldmVudHMKKyAgCisgICAgQHByaXZhdGUKKyAgICBAbWV0aG9kIHdh
dGNoZWRFdmVudHMKKyAgICBAZm9yIEVtYmVyCisgICAgQHBhcmFtIG9iagorICAqLworCisgIGZ1
bmN0aW9uIHdhdGNoZWRFdmVudHMob2JqKSB7CisgICAgcmV0dXJuIF9lbWJlck1ldGFsTWV0YS5t
ZXRhKG9iaikud2F0Y2hlZEV2ZW50cygpOworICB9CisKKyAgLyoqCisgICAgU2VuZCBhbiBldmVu
dC4gVGhlIGV4ZWN1dGlvbiBvZiBzdXNwZW5kZWQgbGlzdGVuZXJzCisgICAgaXMgc2tpcHBlZCwg
YW5kIG9uY2UgbGlzdGVuZXJzIGFyZSByZW1vdmVkLiBBIGxpc3RlbmVyIHdpdGhvdXQKKyAgICBh
IHRhcmdldCBpcyBleGVjdXRlZCBvbiB0aGUgcGFzc2VkIG9iamVjdC4gSWYgYW4gYXJyYXkgb2Yg
YWN0aW9ucworICAgIGlzIG5vdCBwYXNzZWQsIHRoZSBhY3Rpb25zIHN0b3JlZCBvbiB0aGUgcGFz
c2VkIG9iamVjdCBhcmUgaW52b2tlZC4KKyAgCisgICAgQG1ldGhvZCBzZW5kRXZlbnQKKyAgICBA
Zm9yIEVtYmVyCisgICAgQHBhcmFtIG9iagorICAgIEBwYXJhbSB7U3RyaW5nfSBldmVudE5hbWUK
KyAgICBAcGFyYW0ge0FycmF5fSBwYXJhbXMgT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgZWFjaCBs
aXN0ZW5lci4KKyAgICBAcGFyYW0ge0FycmF5fSBhY3Rpb25zIE9wdGlvbmFsIGFycmF5IG9mIGFj
dGlvbnMgKGxpc3RlbmVycykuCisgICAgQHJldHVybiB0cnVlCisgICAgQHB1YmxpYworICAqLwor
CisgIGZ1bmN0aW9uIHNlbmRFdmVudChvYmosIGV2ZW50TmFtZSwgcGFyYW1zLCBhY3Rpb25zKSB7
CisgICAgaWYgKCFhY3Rpb25zKSB7CisgICAgICB2YXIgbWV0YSA9IF9lbWJlck1ldGFsTWV0YS5w
ZWVrTWV0YShvYmopOworICAgICAgYWN0aW9ucyA9IG1ldGEgJiYgbWV0YS5tYXRjaGluZ0xpc3Rl
bmVycyhldmVudE5hbWUpOworICAgIH0KKworICAgIGlmICghYWN0aW9ucyB8fCBhY3Rpb25zLmxl
bmd0aCA9PT0gMCkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZvciAodmFyIGkgPSBh
Y3Rpb25zLmxlbmd0aCAtIDM7IGkgPj0gMDsgaSAtPSAzKSB7CisgICAgICAvLyBsb29waW5nIGlu
IHJldmVyc2UgZm9yIG9uY2UgbGlzdGVuZXJzCisgICAgICB2YXIgdGFyZ2V0ID0gYWN0aW9uc1tp
XTsKKyAgICAgIHZhciBtZXRob2QgPSBhY3Rpb25zW2kgKyAxXTsKKyAgICAgIHZhciBmbGFncyA9
IGFjdGlvbnNbaSArIDJdOworCisgICAgICBpZiAoIW1ldGhvZCkgeworICAgICAgICBjb250aW51
ZTsKKyAgICAgIH0KKyAgICAgIGlmIChmbGFncyAmIF9lbWJlck1ldGFsTWV0YV9saXN0ZW5lcnMu
U1VTUEVOREVEKSB7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorICAgICAgaWYgKGZsYWdz
ICYgX2VtYmVyTWV0YWxNZXRhX2xpc3RlbmVycy5PTkNFKSB7CisgICAgICAgIHJlbW92ZUxpc3Rl
bmVyKG9iaiwgZXZlbnROYW1lLCB0YXJnZXQsIG1ldGhvZCk7CisgICAgICB9CisgICAgICBpZiAo
IXRhcmdldCkgeworICAgICAgICB0YXJnZXQgPSBvYmo7CisgICAgICB9CisgICAgICBpZiAoJ3N0
cmluZycgPT09IHR5cGVvZiBtZXRob2QpIHsKKyAgICAgICAgaWYgKHBhcmFtcykgeworICAgICAg
ICAgIF9lbWJlck1ldGFsVXRpbHMuYXBwbHlTdHIodGFyZ2V0LCBtZXRob2QsIHBhcmFtcyk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdGFyZ2V0W21ldGhvZF0oKTsKKyAgICAgICAgfQor
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHBhcmFtcykgeworICAgICAgICAgIG1ldGhvZC5h
cHBseSh0YXJnZXQsIHBhcmFtcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbWV0aG9k
LmNhbGwodGFyZ2V0KTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1
ZTsKKyAgfQorCisgIC8qKgorICAgIEBwcml2YXRlCisgICAgQG1ldGhvZCBoYXNMaXN0ZW5lcnMK
KyAgICBAZm9yIEVtYmVyCisgICAgQHBhcmFtIG9iagorICAgIEBwYXJhbSB7U3RyaW5nfSBldmVu
dE5hbWUKKyAgKi8KKworICBmdW5jdGlvbiBoYXNMaXN0ZW5lcnMob2JqLCBldmVudE5hbWUpIHsK
KyAgICB2YXIgbWV0YSA9IF9lbWJlck1ldGFsTWV0YS5wZWVrTWV0YShvYmopOworICAgIGlmICgh
bWV0YSkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gbWV0YS5tYXRj
aGluZ0xpc3RlbmVycyhldmVudE5hbWUpLmxlbmd0aCA+IDA7CisgIH0KKworICAvKioKKyAgICBA
cHJpdmF0ZQorICAgIEBtZXRob2QgbGlzdGVuZXJzRm9yCisgICAgQGZvciBFbWJlcgorICAgIEBw
YXJhbSBvYmoKKyAgICBAcGFyYW0ge1N0cmluZ30gZXZlbnROYW1lCisgICovCisKKyAgZnVuY3Rp
b24gbGlzdGVuZXJzRm9yKG9iaiwgZXZlbnROYW1lKSB7CisgICAgdmFyIHJldCA9IFtdOworICAg
IHZhciBtZXRhID0gX2VtYmVyTWV0YWxNZXRhLnBlZWtNZXRhKG9iaik7CisgICAgdmFyIGFjdGlv
bnMgPSBtZXRhICYmIG1ldGEubWF0Y2hpbmdMaXN0ZW5lcnMoZXZlbnROYW1lKTsKKworICAgIGlm
ICghYWN0aW9ucykgeworICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICBmb3IgKHZhciBp
ID0gMCwgbCA9IGFjdGlvbnMubGVuZ3RoOyBpIDwgbDsgaSArPSAzKSB7CisgICAgICB2YXIgdGFy
Z2V0ID0gYWN0aW9uc1tpXTsKKyAgICAgIHZhciBtZXRob2QgPSBhY3Rpb25zW2kgKyAxXTsKKyAg
ICAgIHJldC5wdXNoKFt0YXJnZXQsIG1ldGhvZF0pOworICAgIH0KKworICAgIHJldHVybiByZXQ7
CisgIH0KKworICAvKioKKyAgICBEZWZpbmUgYSBwcm9wZXJ0eSBhcyBhIGZ1bmN0aW9uIHRoYXQg
c2hvdWxkIGJlIGV4ZWN1dGVkIHdoZW4KKyAgICBhIHNwZWNpZmllZCBldmVudCBvciBldmVudHMg
YXJlIHRyaWdnZXJlZC4KKyAgCisgIAorICAgIGBgYCBqYXZhc2NyaXB0CisgICAgdmFyIEpvYiA9
IEVtYmVyLk9iamVjdC5leHRlbmQoeworICAgICAgbG9nQ29tcGxldGVkOiBFbWJlci5vbignY29t
cGxldGVkJywgZnVuY3Rpb24oKSB7CisgICAgICAgIGNvbnNvbGUubG9nKCdKb2IgY29tcGxldGVk
IScpOworICAgICAgfSkKKyAgICB9KTsKKyAgCisgICAgdmFyIGpvYiA9IEpvYi5jcmVhdGUoKTsK
KyAgCisgICAgRW1iZXIuc2VuZEV2ZW50KGpvYiwgJ2NvbXBsZXRlZCcpOyAvLyBMb2dzICdKb2Ig
Y29tcGxldGVkIScKKyAgIGBgYAorICAKKyAgICBAbWV0aG9kIG9uCisgICAgQGZvciBFbWJlcgor
ICAgIEBwYXJhbSB7U3RyaW5nfSBldmVudE5hbWVzKgorICAgIEBwYXJhbSB7RnVuY3Rpb259IGZ1
bmMKKyAgICBAcmV0dXJuIGZ1bmMKKyAgICBAcHVibGljCisgICovCisKKyAgZnVuY3Rpb24gb24o
KSB7CisgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShf
bGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHsKKyAgICAgIGFyZ3NbX2tleV0g
PSBhcmd1bWVudHNbX2tleV07CisgICAgfQorCisgICAgdmFyIGZ1bmMgPSBhcmdzLnBvcCgpOwor
ICAgIHZhciBldmVudHMgPSBhcmdzOworICAgIGZ1bmMuX19lbWJlcl9saXN0ZW5zX18gPSBldmVu
dHM7CisgICAgcmV0dXJuIGZ1bmM7CisgIH0KK30pOworZW5pZmVkKCdlbWJlci1tZXRhbC9leHBh
bmRfcHJvcGVydGllcycsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9kZWJ1ZyddLCBmdW5jdGlv
biAoZXhwb3J0cywgX2VtYmVyTWV0YWxEZWJ1ZykgeworICAndXNlIHN0cmljdCc7CisKKyAgZXhw
b3J0cy5kZWZhdWx0ID0gZXhwYW5kUHJvcGVydGllczsKKworICAvKioKKyAgQG1vZHVsZSBlbWJl
cgorICBAc3VibW9kdWxlIGVtYmVyLW1ldGFsCisgICovCisKKyAgdmFyIFNQTElUX1JFR0VYID0g
L1x7fFx9LzsKKyAgdmFyIEVORF9XSVRIX0VBQ0hfUkVHRVggPSAvXC5AZWFjaCQvOworCisgIC8q
KgorICAgIEV4cGFuZHMgYHBhdHRlcm5gLCBpbnZva2luZyBgY2FsbGJhY2tgIGZvciBlYWNoIGV4
cGFuc2lvbi4KKyAgCisgICAgVGhlIG9ubHkgcGF0dGVybiBzdXBwb3J0ZWQgaXMgYnJhY2UtZXhw
YW5zaW9uLCBhbnl0aGluZyBlbHNlIHdpbGwgYmUgcGFzc2VkCisgICAgb25jZSB0byBgY2FsbGJh
Y2tgIGRpcmVjdGx5LgorICAKKyAgICBFeGFtcGxlCisgIAorICAgIGBgYGpzCisgICAgZnVuY3Rp
b24gZWNobyhhcmcpeyBjb25zb2xlLmxvZyhhcmcpOyB9CisgIAorICAgIEVtYmVyLmV4cGFuZFBy
b3BlcnRpZXMoJ2Zvby5iYXInLCBlY2hvKTsgICAgICAgICAgICAgIC8vPT4gJ2Zvby5iYXInCisg
ICAgRW1iZXIuZXhwYW5kUHJvcGVydGllcygne2ZvbyxiYXJ9JywgZWNobyk7ICAgICAgICAgICAg
Ly89PiAnZm9vJywgJ2JhcicKKyAgICBFbWJlci5leHBhbmRQcm9wZXJ0aWVzKCdmb28ue2Jhcixi
YXp9JywgZWNobyk7ICAgICAgICAvLz0+ICdmb28uYmFyJywgJ2Zvby5iYXonCisgICAgRW1iZXIu
ZXhwYW5kUHJvcGVydGllcygne2ZvbyxiYXJ9LmJheicsIGVjaG8pOyAgICAgICAgLy89PiAnZm9v
LmJheicsICdiYXIuYmF6JworICAgIEVtYmVyLmV4cGFuZFByb3BlcnRpZXMoJ2Zvby57YmFyLGJh
en0uW10nLCBlY2hvKSAgICAgIC8vPT4gJ2Zvby5iYXIuW10nLCAnZm9vLmJhei5bXScKKyAgICBF
bWJlci5leHBhbmRQcm9wZXJ0aWVzKCd7Zm9vLGJhcn0ue3NwYW0sZWdnc30nLCBlY2hvKSAvLz0+
ICdmb28uc3BhbScsICdmb28uZWdncycsICdiYXIuc3BhbScsICdiYXIuZWdncycKKyAgICBFbWJl
ci5leHBhbmRQcm9wZXJ0aWVzKCd7Zm9vfS5iYXIue2Jhen0nKSAgICAgICAgICAgICAvLz0+ICdm
b28uYmFyLmJheicKKyAgICBgYGAKKyAgCisgICAgQG1ldGhvZCBleHBhbmRQcm9wZXJ0aWVzCisg
ICAgQGZvciBFbWJlcgorICAgIEBwcml2YXRlCisgICAgQHBhcmFtIHtTdHJpbmd9IHBhdHRlcm4g
VGhlIHByb3BlcnR5IHBhdHRlcm4gdG8gZXhwYW5kLgorICAgIEBwYXJhbSB7RnVuY3Rpb259IGNh
bGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2UuICBJdCBpcyBpbnZva2VkIG9uY2UgcGVyCisg
ICAgZXhwYW5zaW9uLCBhbmQgaXMgcGFzc2VkIHRoZSBleHBhbnNpb24uCisgICovCisKKyAgZnVu
Y3Rpb24gZXhwYW5kUHJvcGVydGllcyhwYXR0ZXJuLCBjYWxsYmFjaykgeworICAgIF9lbWJlck1l
dGFsRGVidWcuYXNzZXJ0KCdBIGNvbXB1dGVkIHByb3BlcnR5IGtleSBtdXN0IGJlIGEgc3RyaW5n
JywgdHlwZW9mIHBhdHRlcm4gPT09ICdzdHJpbmcnKTsKKyAgICBfZW1iZXJNZXRhbERlYnVnLmFz
c2VydCgnQnJhY2UgZXhwYW5kZWQgcHJvcGVydGllcyBjYW5ub3QgY29udGFpbiBzcGFjZXMsIGUu
Zy4gInVzZXIue2ZpcnN0TmFtZSwgbGFzdE5hbWV9IiBzaG91bGQgYmUgInVzZXIue2ZpcnN0TmFt
ZSxsYXN0TmFtZX0iJywgcGF0dGVybi5pbmRleE9mKCcgJykgPT09IC0xKTsKKworICAgIHZhciBw
YXJ0cyA9IHBhdHRlcm4uc3BsaXQoU1BMSVRfUkVHRVgpOworICAgIHZhciBwcm9wZXJ0aWVzID0g
W3BhcnRzXTsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHsK
KyAgICAgIHZhciBwYXJ0ID0gcGFydHNbaV07CisgICAgICBpZiAocGFydC5pbmRleE9mKCcsJykg
Pj0gMCkgeworICAgICAgICBwcm9wZXJ0aWVzID0gZHVwbGljYXRlQW5kUmVwbGFjZShwcm9wZXJ0
aWVzLCBwYXJ0LnNwbGl0KCcsJyksIGkpOworICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykgeworICAgICAgY2FsbGJhY2socHJv
cGVydGllc1tpXS5qb2luKCcnKS5yZXBsYWNlKEVORF9XSVRIX0VBQ0hfUkVHRVgsICcuW10nKSk7
CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gZHVwbGljYXRlQW5kUmVwbGFjZShwcm9wZXJ0aWVz
LCBjdXJyZW50UGFydHMsIGluZGV4KSB7CisgICAgdmFyIGFsbCA9IFtdOworCisgICAgcHJvcGVy
dGllcy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wZXJ0eSkgeworICAgICAgY3VycmVudFBhcnRzLmZv
ckVhY2goZnVuY3Rpb24gKHBhcnQpIHsKKyAgICAgICAgdmFyIGN1cnJlbnQgPSBwcm9wZXJ0eS5z
bGljZSgwKTsKKyAgICAgICAgY3VycmVudFtpbmRleF0gPSBwYXJ0OworICAgICAgICBhbGwucHVz
aChjdXJyZW50KTsKKyAgICAgIH0pOworICAgIH0pOworCisgICAgcmV0dXJuIGFsbDsKKyAgfQor
fSk7CitlbmlmZWQoJ2VtYmVyLW1ldGFsL2ZlYXR1cmVzJywgWydleHBvcnRzJywgJ2VtYmVyLW1l
dGFsL2NvcmUnLCAnZW1iZXItbWV0YWwvYXNzaWduJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1i
ZXJNZXRhbENvcmUsIF9lbWJlck1ldGFsQXNzaWduKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICBl
eHBvcnRzLmRlZmF1bHQgPSBpc0VuYWJsZWQ7CisKKyAgLyoqCisgICAgVGhlIGhhc2ggb2YgZW5h
YmxlZCBDYW5hcnkgZmVhdHVyZXMuIEFkZCB0byB0aGlzLCBhbnkgY2FuYXJ5IGZlYXR1cmVzCisg
ICAgYmVmb3JlIGNyZWF0aW5nIHlvdXIgYXBwbGljYXRpb24uCisgIAorICAgIEFsdGVybmF0aXZl
bHkgKGFuZCByZWNvbW1lbmRlZCksIHlvdSBjYW4gYWxzbyBkZWZpbmUgYEVtYmVyRU5WLkZFQVRV
UkVTYAorICAgIGlmIHlvdSBuZWVkIHRvIGVuYWJsZSBmZWF0dXJlcyBmbGFnZ2VkIGF0IHJ1bnRp
bWUuCisgIAorICAgIEBjbGFzcyBGRUFUVVJFUworICAgIEBuYW1lc3BhY2UgRW1iZXIKKyAgICBA
c3RhdGljCisgICAgQHNpbmNlIDEuMS4wCisgICAgQHB1YmxpYworICAqLworICB2YXIgS05PV05f
RkVBVFVSRVMgPSB7fTtleHBvcnRzLktOT1dOX0ZFQVRVUkVTID0gS05PV05fRkVBVFVSRVM7Cisg
IC8vIGpzaGludCBpZ25vcmU6bGluZQorICB2YXIgRkVBVFVSRVMgPSBfZW1iZXJNZXRhbEFzc2ln
bi5kZWZhdWx0KEtOT1dOX0ZFQVRVUkVTLCBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5FTlYuRkVB
VFVSRVMpOworCisgIGV4cG9ydHMuRkVBVFVSRVMgPSBGRUFUVVJFUzsKKyAgLyoqCisgICAgRGV0
ZXJtaW5lIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBgZmVhdHVyZWAgaXMgZW5hYmxlZC4gVXNlZCBi
eSBFbWJlcidzCisgICAgYnVpbGQgdG9vbHMgdG8gZXhjbHVkZSBleHBlcmltZW50YWwgZmVhdHVy
ZXMgZnJvbSBiZXRhL3N0YWJsZSBidWlsZHMuCisgIAorICAgIFlvdSBjYW4gZGVmaW5lIHRoZSBm
b2xsb3dpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zOgorICAKKyAgICAqIGBFbWJlckVOVi5FTkFC
TEVfT1BUSU9OQUxfRkVBVFVSRVNgIC0gZW5hYmxlIGFueSBmZWF0dXJlcyB0aGF0IGhhdmUgbm90
IGJlZW4gZXhwbGljaXRseQorICAgICAgZW5hYmxlZC9kaXNhYmxlZC4KKyAgCisgICAgQG1ldGhv
ZCBpc0VuYWJsZWQKKyAgICBAcGFyYW0ge1N0cmluZ30gZmVhdHVyZSBUaGUgZmVhdHVyZSB0byBj
aGVjaworICAgIEByZXR1cm4ge0Jvb2xlYW59CisgICAgQGZvciBFbWJlci5GRUFUVVJFUworICAg
IEBzaW5jZSAxLjEuMAorICAgIEBwdWJsaWMKKyAgKi8KKworICBmdW5jdGlvbiBpc0VuYWJsZWQo
ZmVhdHVyZSkgeworICAgIHZhciBmZWF0dXJlVmFsdWUgPSBGRUFUVVJFU1tmZWF0dXJlXTsKKwor
ICAgIGlmIChmZWF0dXJlVmFsdWUgPT09IHRydWUgfHwgZmVhdHVyZVZhbHVlID09PSBmYWxzZSB8
fCBmZWF0dXJlVmFsdWUgPT09IHVuZGVmaW5lZCkgeworICAgICAgcmV0dXJuIGZlYXR1cmVWYWx1
ZTsKKyAgICB9IGVsc2UgaWYgKF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LkVOVi5FTkFCTEVfT1BU
SU9OQUxfRkVBVFVSRVMpIHsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0gZWxzZSB7CisgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9Cit9KTsKK2VuaWZlZCgnZW1iZXItbWV0YWwvZ2V0
X3Byb3BlcnRpZXMnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0J10sIGZ1
bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbFByb3BlcnR5X2dldCkgeworICAndXNlIHN0cmlj
dCc7CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gZ2V0UHJvcGVydGllczsKKworICAvKioKKyAgICBU
byBnZXQgbXVsdGlwbGUgcHJvcGVydGllcyBhdCBvbmNlLCBjYWxsIGBFbWJlci5nZXRQcm9wZXJ0
aWVzYAorICAgIHdpdGggYW4gb2JqZWN0IGZvbGxvd2VkIGJ5IGEgbGlzdCBvZiBzdHJpbmdzIG9y
IGFuIGFycmF5OgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgRW1iZXIuZ2V0UHJvcGVydGll
cyhyZWNvcmQsICdmaXJzdE5hbWUnLCAnbGFzdE5hbWUnLCAnemlwQ29kZScpOworICAgIC8vIHsg
Zmlyc3ROYW1lOiAnSm9obicsIGxhc3ROYW1lOiAnRG9lJywgemlwQ29kZTogJzEwMDExJyB9Cisg
ICAgYGBgCisgIAorICAgIGlzIGVxdWl2YWxlbnQgdG86CisgIAorICAgIGBgYGphdmFzY3JpcHQK
KyAgICBFbWJlci5nZXRQcm9wZXJ0aWVzKHJlY29yZCwgWydmaXJzdE5hbWUnLCAnbGFzdE5hbWUn
LCAnemlwQ29kZSddKTsKKyAgICAvLyB7IGZpcnN0TmFtZTogJ0pvaG4nLCBsYXN0TmFtZTogJ0Rv
ZScsIHppcENvZGU6ICcxMDAxMScgfQorICAgIGBgYAorICAKKyAgICBAbWV0aG9kIGdldFByb3Bl
cnRpZXMKKyAgICBAZm9yIEVtYmVyCisgICAgQHBhcmFtIHtPYmplY3R9IG9iagorICAgIEBwYXJh
bSB7U3RyaW5nLi4ufEFycmF5fSBsaXN0IG9mIGtleXMgdG8gZ2V0CisgICAgQHJldHVybiB7T2Jq
ZWN0fQorICAgIEBwdWJsaWMKKyAgKi8KKworICBmdW5jdGlvbiBnZXRQcm9wZXJ0aWVzKG9iaikg
eworICAgIHZhciByZXQgPSB7fTsKKyAgICB2YXIgcHJvcGVydHlOYW1lcyA9IGFyZ3VtZW50czsK
KyAgICB2YXIgaSA9IDE7CisKKyAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMiAmJiBBcnJh
eS5pc0FycmF5KGFyZ3VtZW50c1sxXSkpIHsKKyAgICAgIGkgPSAwOworICAgICAgcHJvcGVydHlO
YW1lcyA9IGFyZ3VtZW50c1sxXTsKKyAgICB9CisgICAgZm9yICh2YXIgbGVuID0gcHJvcGVydHlO
YW1lcy5sZW5ndGg7IGkgPCBsZW47IGkrKykgeworICAgICAgcmV0W3Byb3BlcnR5TmFtZXNbaV1d
ID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KG9iaiwgcHJvcGVydHlOYW1lc1tpXSk7Cisg
ICAgfQorICAgIHJldHVybiByZXQ7CisgIH0KK30pOworZW5pZmVkKCdlbWJlci1tZXRhbC9pbmRl
eCcsIFsnZXhwb3J0cycsICdyZXF1aXJlJywgJ2VtYmVyLW1ldGFsL2NvcmUnLCAnZW1iZXItbWV0
YWwvZGVidWcnLCAnZW1iZXItbWV0YWwvZmVhdHVyZXMnLCAnZW1iZXItbWV0YWwvYXNzaWduJywg
J2VtYmVyLW1ldGFsL21lcmdlJywgJ2VtYmVyLW1ldGFsL2luc3RydW1lbnRhdGlvbicsICdlbWJl
ci1tZXRhbC91dGlscycsICdlbWJlci1tZXRhbC9tZXRhJywgJ2VtYmVyLW1ldGFsL2Vycm9yJywg
J2VtYmVyLW1ldGFsL2NhY2hlJywgJ2VtYmVyLW1ldGFsL2xvZ2dlcicsICdlbWJlci1tZXRhbC9w
cm9wZXJ0eV9nZXQnLCAnZW1iZXItbWV0YWwvZXZlbnRzJywgJ2VtYmVyLW1ldGFsL29ic2VydmVy
X3NldCcsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9ldmVudHMnLCAnZW1iZXItbWV0YWwvcHJvcGVy
dGllcycsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9zZXQnLCAnZW1iZXItbWV0YWwvbWFwJywgJ2Vt
YmVyLW1ldGFsL2dldF9wcm9wZXJ0aWVzJywgJ2VtYmVyLW1ldGFsL3NldF9wcm9wZXJ0aWVzJywg
J2VtYmVyLW1ldGFsL3dhdGNoX2tleScsICdlbWJlci1tZXRhbC9jaGFpbnMnLCAnZW1iZXItbWV0
YWwvd2F0Y2hfcGF0aCcsICdlbWJlci1tZXRhbC93YXRjaGluZycsICdlbWJlci1tZXRhbC9leHBh
bmRfcHJvcGVydGllcycsICdlbWJlci1tZXRhbC9jb21wdXRlZCcsICdlbWJlci1tZXRhbC9hbGlh
cycsICdlbWJlci1tZXRhbC9jb21wdXRlZF9tYWNyb3MnLCAnZW1iZXItbWV0YWwvb2JzZXJ2ZXIn
LCAnZW1iZXItbWV0YWwvbWl4aW4nLCAnZW1iZXItbWV0YWwvYmluZGluZycsICdlbWJlci1tZXRh
bC9wYXRoX2NhY2hlJywgJ2VtYmVyLW1ldGFsL3J1bl9sb29wJywgJ2VtYmVyLW1ldGFsL2xpYnJh
cmllcycsICdlbWJlci1tZXRhbC9pc19ub25lJywgJ2VtYmVyLW1ldGFsL2lzX2VtcHR5JywgJ2Vt
YmVyLW1ldGFsL2lzX2JsYW5rJywgJ2VtYmVyLW1ldGFsL2lzX3ByZXNlbnQnLCAnYmFja2J1cm5l
ciddLCBmdW5jdGlvbiAoZXhwb3J0cywgX3JlcXVpcmUsIF9lbWJlck1ldGFsQ29yZSwgX2VtYmVy
TWV0YWxEZWJ1ZywgX2VtYmVyTWV0YWxGZWF0dXJlcywgX2VtYmVyTWV0YWxBc3NpZ24sIF9lbWJl
ck1ldGFsTWVyZ2UsIF9lbWJlck1ldGFsSW5zdHJ1bWVudGF0aW9uLCBfZW1iZXJNZXRhbFV0aWxz
LCBfZW1iZXJNZXRhbE1ldGEsIF9lbWJlck1ldGFsRXJyb3IsIF9lbWJlck1ldGFsQ2FjaGUsIF9l
bWJlck1ldGFsTG9nZ2VyLCBfZW1iZXJNZXRhbFByb3BlcnR5X2dldCwgX2VtYmVyTWV0YWxFdmVu
dHMsIF9lbWJlck1ldGFsT2JzZXJ2ZXJfc2V0LCBfZW1iZXJNZXRhbFByb3BlcnR5X2V2ZW50cywg
X2VtYmVyTWV0YWxQcm9wZXJ0aWVzLCBfZW1iZXJNZXRhbFByb3BlcnR5X3NldCwgX2VtYmVyTWV0
YWxNYXAsIF9lbWJlck1ldGFsR2V0X3Byb3BlcnRpZXMsIF9lbWJlck1ldGFsU2V0X3Byb3BlcnRp
ZXMsIF9lbWJlck1ldGFsV2F0Y2hfa2V5LCBfZW1iZXJNZXRhbENoYWlucywgX2VtYmVyTWV0YWxX
YXRjaF9wYXRoLCBfZW1iZXJNZXRhbFdhdGNoaW5nLCBfZW1iZXJNZXRhbEV4cGFuZF9wcm9wZXJ0
aWVzLCBfZW1iZXJNZXRhbENvbXB1dGVkLCBfZW1iZXJNZXRhbEFsaWFzLCBfZW1iZXJNZXRhbENv
bXB1dGVkX21hY3JvcywgX2VtYmVyTWV0YWxPYnNlcnZlciwgX2VtYmVyTWV0YWxNaXhpbiwgX2Vt
YmVyTWV0YWxCaW5kaW5nLCBfZW1iZXJNZXRhbFBhdGhfY2FjaGUsIF9lbWJlck1ldGFsUnVuX2xv
b3AsIF9lbWJlck1ldGFsTGlicmFyaWVzLCBfZW1iZXJNZXRhbElzX25vbmUsIF9lbWJlck1ldGFs
SXNfZW1wdHksIF9lbWJlck1ldGFsSXNfYmxhbmssIF9lbWJlck1ldGFsSXNfcHJlc2VudCwgX2Jh
Y2tidXJuZXIpIHsKKyAgLyoqCisgIEBtb2R1bGUgZW1iZXIKKyAgQHN1Ym1vZHVsZSBlbWJlci1t
ZXRhbAorICAqLworCisgIC8vIEJFR0lOIElNUE9SVFMKKyAgJ3VzZSBzdHJpY3QnOworCisgIF9l
bWJlck1ldGFsQ29tcHV0ZWQuY29tcHV0ZWQuZW1wdHkgPSBfZW1iZXJNZXRhbENvbXB1dGVkX21h
Y3Jvcy5lbXB0eTsKKyAgX2VtYmVyTWV0YWxDb21wdXRlZC5jb21wdXRlZC5ub3RFbXB0eSA9IF9l
bWJlck1ldGFsQ29tcHV0ZWRfbWFjcm9zLm5vdEVtcHR5OworICBfZW1iZXJNZXRhbENvbXB1dGVk
LmNvbXB1dGVkLm5vbmUgPSBfZW1iZXJNZXRhbENvbXB1dGVkX21hY3Jvcy5ub25lOworICBfZW1i
ZXJNZXRhbENvbXB1dGVkLmNvbXB1dGVkLm5vdCA9IF9lbWJlck1ldGFsQ29tcHV0ZWRfbWFjcm9z
Lm5vdDsKKyAgX2VtYmVyTWV0YWxDb21wdXRlZC5jb21wdXRlZC5ib29sID0gX2VtYmVyTWV0YWxD
b21wdXRlZF9tYWNyb3MuYm9vbDsKKyAgX2VtYmVyTWV0YWxDb21wdXRlZC5jb21wdXRlZC5tYXRj
aCA9IF9lbWJlck1ldGFsQ29tcHV0ZWRfbWFjcm9zLm1hdGNoOworICBfZW1iZXJNZXRhbENvbXB1
dGVkLmNvbXB1dGVkLmVxdWFsID0gX2VtYmVyTWV0YWxDb21wdXRlZF9tYWNyb3MuZXF1YWw7Cisg
IF9lbWJlck1ldGFsQ29tcHV0ZWQuY29tcHV0ZWQuZ3QgPSBfZW1iZXJNZXRhbENvbXB1dGVkX21h
Y3Jvcy5ndDsKKyAgX2VtYmVyTWV0YWxDb21wdXRlZC5jb21wdXRlZC5ndGUgPSBfZW1iZXJNZXRh
bENvbXB1dGVkX21hY3Jvcy5ndGU7CisgIF9lbWJlck1ldGFsQ29tcHV0ZWQuY29tcHV0ZWQubHQg
PSBfZW1iZXJNZXRhbENvbXB1dGVkX21hY3Jvcy5sdDsKKyAgX2VtYmVyTWV0YWxDb21wdXRlZC5j
b21wdXRlZC5sdGUgPSBfZW1iZXJNZXRhbENvbXB1dGVkX21hY3Jvcy5sdGU7CisgIF9lbWJlck1l
dGFsQ29tcHV0ZWQuY29tcHV0ZWQuYWxpYXMgPSBfZW1iZXJNZXRhbEFsaWFzLmRlZmF1bHQ7Cisg
IF9lbWJlck1ldGFsQ29tcHV0ZWQuY29tcHV0ZWQub25lV2F5ID0gX2VtYmVyTWV0YWxDb21wdXRl
ZF9tYWNyb3Mub25lV2F5OworICBfZW1iZXJNZXRhbENvbXB1dGVkLmNvbXB1dGVkLnJlYWRzID0g
X2VtYmVyTWV0YWxDb21wdXRlZF9tYWNyb3Mub25lV2F5OworICBfZW1iZXJNZXRhbENvbXB1dGVk
LmNvbXB1dGVkLnJlYWRPbmx5ID0gX2VtYmVyTWV0YWxDb21wdXRlZF9tYWNyb3MucmVhZE9ubHk7
CisgIF9lbWJlck1ldGFsQ29tcHV0ZWQuY29tcHV0ZWQuZGVmYXVsdFRvID0gX2VtYmVyTWV0YWxD
b21wdXRlZF9tYWNyb3MuZGVmYXVsdFRvOworICBfZW1iZXJNZXRhbENvbXB1dGVkLmNvbXB1dGVk
LmRlcHJlY2F0aW5nQWxpYXMgPSBfZW1iZXJNZXRhbENvbXB1dGVkX21hY3Jvcy5kZXByZWNhdGlu
Z0FsaWFzOworICBfZW1iZXJNZXRhbENvbXB1dGVkLmNvbXB1dGVkLmFuZCA9IF9lbWJlck1ldGFs
Q29tcHV0ZWRfbWFjcm9zLmFuZDsKKyAgX2VtYmVyTWV0YWxDb21wdXRlZC5jb21wdXRlZC5vciA9
IF9lbWJlck1ldGFsQ29tcHV0ZWRfbWFjcm9zLm9yOworICBfZW1iZXJNZXRhbENvbXB1dGVkLmNv
bXB1dGVkLmFueSA9IF9lbWJlck1ldGFsQ29tcHV0ZWRfbWFjcm9zLmFueTsKKworICAvLyBFTkQg
SU1QT1JUUworCisgIC8vIEJFR0lOIEVYUE9SVFMKKyAgdmFyIEVtYmVySW5zdHJ1bWVudGF0aW9u
ID0gX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuSW5zdHJ1bWVudGF0aW9uID0ge307CisgIEVtYmVy
SW5zdHJ1bWVudGF0aW9uLmluc3RydW1lbnQgPSBfZW1iZXJNZXRhbEluc3RydW1lbnRhdGlvbi5p
bnN0cnVtZW50OworICBFbWJlckluc3RydW1lbnRhdGlvbi5zdWJzY3JpYmUgPSBfZW1iZXJNZXRh
bEluc3RydW1lbnRhdGlvbi5zdWJzY3JpYmU7CisgIEVtYmVySW5zdHJ1bWVudGF0aW9uLnVuc3Vi
c2NyaWJlID0gX2VtYmVyTWV0YWxJbnN0cnVtZW50YXRpb24udW5zdWJzY3JpYmU7CisgIEVtYmVy
SW5zdHJ1bWVudGF0aW9uLnJlc2V0ID0gX2VtYmVyTWV0YWxJbnN0cnVtZW50YXRpb24ucmVzZXQ7
CisKKyAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuaW5zdHJ1bWVudCA9IF9lbWJlck1ldGFsSW5z
dHJ1bWVudGF0aW9uLmluc3RydW1lbnQ7CisgIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LnN1YnNj
cmliZSA9IF9lbWJlck1ldGFsSW5zdHJ1bWVudGF0aW9uLnN1YnNjcmliZTsKKworICBfZW1iZXJN
ZXRhbENvcmUuZGVmYXVsdC5fQ2FjaGUgPSBfZW1iZXJNZXRhbENhY2hlLmRlZmF1bHQ7CisKKyAg
X2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuZ2VuZXJhdGVHdWlkID0gX2VtYmVyTWV0YWxVdGlscy5n
ZW5lcmF0ZUd1aWQ7CisgIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LkdVSURfS0VZID0gX2VtYmVy
TWV0YWxVdGlscy5HVUlEX0tFWTsKKyAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQucGxhdGZvcm0g
PSB7CisgICAgZGVmaW5lUHJvcGVydHk6IHRydWUsCisgICAgaGFzUHJvcGVydHlBY2Nlc3NvcnM6
IHRydWUKKyAgfTsKKworICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5FcnJvciA9IF9lbWJlck1l
dGFsRXJyb3IuZGVmYXVsdDsKKyAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuZ3VpZEZvciA9IF9l
bWJlck1ldGFsVXRpbHMuZ3VpZEZvcjsKKyAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuTUVUQV9E
RVNDID0gX2VtYmVyTWV0YWxNZXRhLk1FVEFfREVTQzsKKyAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1
bHQubWV0YSA9IF9lbWJlck1ldGFsTWV0YS5tZXRhOworICBfZW1iZXJNZXRhbENvcmUuZGVmYXVs
dC5pbnNwZWN0ID0gX2VtYmVyTWV0YWxVdGlscy5pbnNwZWN0OworCisgIF9lbWJlck1ldGFsQ29y
ZS5kZWZhdWx0LnRyeUNhdGNoRmluYWxseSA9IF9lbWJlck1ldGFsVXRpbHMuZGVwcmVjYXRlZFRy
eUNhdGNoRmluYWxseTsKKyAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQubWFrZUFycmF5ID0gX2Vt
YmVyTWV0YWxVdGlscy5tYWtlQXJyYXk7CisgIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LmNhbklu
dm9rZSA9IF9lbWJlck1ldGFsVXRpbHMuY2FuSW52b2tlOworICBfZW1iZXJNZXRhbENvcmUuZGVm
YXVsdC50cnlJbnZva2UgPSBfZW1iZXJNZXRhbFV0aWxzLnRyeUludm9rZTsKKyAgX2VtYmVyTWV0
YWxDb3JlLmRlZmF1bHQud3JhcCA9IF9lbWJlck1ldGFsVXRpbHMud3JhcDsKKyAgX2VtYmVyTWV0
YWxDb3JlLmRlZmF1bHQuYXBwbHkgPSBfZW1iZXJNZXRhbFV0aWxzLmFwcGx5OworICBfZW1iZXJN
ZXRhbENvcmUuZGVmYXVsdC5hcHBseVN0ciA9IF9lbWJlck1ldGFsVXRpbHMuYXBwbHlTdHI7Cisg
IF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LnV1aWQgPSBfZW1iZXJNZXRhbFV0aWxzLnV1aWQ7CisK
KyAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuTG9nZ2VyID0gX2VtYmVyTWV0YWxMb2dnZXIuZGVm
YXVsdDsKKworICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5nZXQgPSBfZW1iZXJNZXRhbFByb3Bl
cnR5X2dldC5nZXQ7CisgIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LmdldFdpdGhEZWZhdWx0ID0g
X2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0V2l0aERlZmF1bHQ7CisgIF9lbWJlck1ldGFsQ29y
ZS5kZWZhdWx0Ll9nZXRQYXRoID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuX2dldFBhdGg7CisK
KyAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQub24gPSBfZW1iZXJNZXRhbEV2ZW50cy5vbjsKKyAg
X2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuYWRkTGlzdGVuZXIgPSBfZW1iZXJNZXRhbEV2ZW50cy5h
ZGRMaXN0ZW5lcjsKKyAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQucmVtb3ZlTGlzdGVuZXIgPSBf
ZW1iZXJNZXRhbEV2ZW50cy5yZW1vdmVMaXN0ZW5lcjsKKyAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1
bHQuX3N1c3BlbmRMaXN0ZW5lciA9IF9lbWJlck1ldGFsRXZlbnRzLnN1c3BlbmRMaXN0ZW5lcjsK
KyAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuX3N1c3BlbmRMaXN0ZW5lcnMgPSBfZW1iZXJNZXRh
bEV2ZW50cy5zdXNwZW5kTGlzdGVuZXJzOworICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5zZW5k
RXZlbnQgPSBfZW1iZXJNZXRhbEV2ZW50cy5zZW5kRXZlbnQ7CisgIF9lbWJlck1ldGFsQ29yZS5k
ZWZhdWx0Lmhhc0xpc3RlbmVycyA9IF9lbWJlck1ldGFsRXZlbnRzLmhhc0xpc3RlbmVyczsKKyAg
X2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQud2F0Y2hlZEV2ZW50cyA9IF9lbWJlck1ldGFsRXZlbnRz
LndhdGNoZWRFdmVudHM7CisgIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0Lmxpc3RlbmVyc0ZvciA9
IF9lbWJlck1ldGFsRXZlbnRzLmxpc3RlbmVyc0ZvcjsKKyAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1
bHQuYWNjdW11bGF0ZUxpc3RlbmVycyA9IF9lbWJlck1ldGFsRXZlbnRzLmFjY3VtdWxhdGVMaXN0
ZW5lcnM7CisKKyAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuX09ic2VydmVyU2V0ID0gX2VtYmVy
TWV0YWxPYnNlcnZlcl9zZXQuZGVmYXVsdDsKKworICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5w
cm9wZXJ0eVdpbGxDaGFuZ2UgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2V2ZW50cy5wcm9wZXJ0eVdp
bGxDaGFuZ2U7CisgIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LnByb3BlcnR5RGlkQ2hhbmdlID0g
X2VtYmVyTWV0YWxQcm9wZXJ0eV9ldmVudHMucHJvcGVydHlEaWRDaGFuZ2U7CisgIF9lbWJlck1l
dGFsQ29yZS5kZWZhdWx0Lm92ZXJyaWRlQ2hhaW5zID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9ldmVu
dHMub3ZlcnJpZGVDaGFpbnM7CisgIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LmJlZ2luUHJvcGVy
dHlDaGFuZ2VzID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9ldmVudHMuYmVnaW5Qcm9wZXJ0eUNoYW5n
ZXM7CisgIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LmVuZFByb3BlcnR5Q2hhbmdlcyA9IF9lbWJl
ck1ldGFsUHJvcGVydHlfZXZlbnRzLmVuZFByb3BlcnR5Q2hhbmdlczsKKyAgX2VtYmVyTWV0YWxD
b3JlLmRlZmF1bHQuY2hhbmdlUHJvcGVydGllcyA9IF9lbWJlck1ldGFsUHJvcGVydHlfZXZlbnRz
LmNoYW5nZVByb3BlcnRpZXM7CisKKyAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuZGVmaW5lUHJv
cGVydHkgPSBfZW1iZXJNZXRhbFByb3BlcnRpZXMuZGVmaW5lUHJvcGVydHk7CisKKyAgX2VtYmVy
TWV0YWxDb3JlLmRlZmF1bHQuc2V0ID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQuc2V0OworICBf
ZW1iZXJNZXRhbENvcmUuZGVmYXVsdC50cnlTZXQgPSBfZW1iZXJNZXRhbFByb3BlcnR5X3NldC50
cnlTZXQ7CisKKyAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuT3JkZXJlZFNldCA9IF9lbWJlck1l
dGFsTWFwLk9yZGVyZWRTZXQ7CisgIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0Lk1hcCA9IF9lbWJl
ck1ldGFsTWFwLk1hcDsKKyAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuTWFwV2l0aERlZmF1bHQg
PSBfZW1iZXJNZXRhbE1hcC5NYXBXaXRoRGVmYXVsdDsKKworICBfZW1iZXJNZXRhbENvcmUuZGVm
YXVsdC5nZXRQcm9wZXJ0aWVzID0gX2VtYmVyTWV0YWxHZXRfcHJvcGVydGllcy5kZWZhdWx0Owor
ICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5zZXRQcm9wZXJ0aWVzID0gX2VtYmVyTWV0YWxTZXRf
cHJvcGVydGllcy5kZWZhdWx0OworCisgIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LndhdGNoS2V5
ID0gX2VtYmVyTWV0YWxXYXRjaF9rZXkud2F0Y2hLZXk7CisgIF9lbWJlck1ldGFsQ29yZS5kZWZh
dWx0LnVud2F0Y2hLZXkgPSBfZW1iZXJNZXRhbFdhdGNoX2tleS51bndhdGNoS2V5OworCisgIF9l
bWJlck1ldGFsQ29yZS5kZWZhdWx0LnJlbW92ZUNoYWluV2F0Y2hlciA9IF9lbWJlck1ldGFsQ2hh
aW5zLnJlbW92ZUNoYWluV2F0Y2hlcjsKKyAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuX0NoYWlu
Tm9kZSA9IF9lbWJlck1ldGFsQ2hhaW5zLkNoYWluTm9kZTsKKyAgX2VtYmVyTWV0YWxDb3JlLmRl
ZmF1bHQuZmluaXNoQ2hhaW5zID0gX2VtYmVyTWV0YWxDaGFpbnMuZmluaXNoQ2hhaW5zOworCisg
IF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LndhdGNoUGF0aCA9IF9lbWJlck1ldGFsV2F0Y2hfcGF0
aC53YXRjaFBhdGg7CisgIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LnVud2F0Y2hQYXRoID0gX2Vt
YmVyTWV0YWxXYXRjaF9wYXRoLnVud2F0Y2hQYXRoOworCisgIF9lbWJlck1ldGFsQ29yZS5kZWZh
dWx0LndhdGNoID0gX2VtYmVyTWV0YWxXYXRjaGluZy53YXRjaDsKKyAgX2VtYmVyTWV0YWxDb3Jl
LmRlZmF1bHQuaXNXYXRjaGluZyA9IF9lbWJlck1ldGFsV2F0Y2hpbmcuaXNXYXRjaGluZzsKKyAg
X2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQudW53YXRjaCA9IF9lbWJlck1ldGFsV2F0Y2hpbmcudW53
YXRjaDsKKyAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQucmV3YXRjaCA9IF9lbWJlck1ldGFsV2F0
Y2hpbmcucmV3YXRjaDsKKyAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuZGVzdHJveSA9IF9lbWJl
ck1ldGFsV2F0Y2hpbmcuZGVzdHJveTsKKworICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5leHBh
bmRQcm9wZXJ0aWVzID0gX2VtYmVyTWV0YWxFeHBhbmRfcHJvcGVydGllcy5kZWZhdWx0OworCisg
IF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LkNvbXB1dGVkUHJvcGVydHkgPSBfZW1iZXJNZXRhbENv
bXB1dGVkLkNvbXB1dGVkUHJvcGVydHk7CisgIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LmNvbXB1
dGVkID0gX2VtYmVyTWV0YWxDb21wdXRlZC5jb21wdXRlZDsKKyAgX2VtYmVyTWV0YWxDb3JlLmRl
ZmF1bHQuY2FjaGVGb3IgPSBfZW1iZXJNZXRhbENvbXB1dGVkLmNhY2hlRm9yOworCisgIF9lbWJl
ck1ldGFsQ29yZS5kZWZhdWx0LmFkZE9ic2VydmVyID0gX2VtYmVyTWV0YWxPYnNlcnZlci5hZGRP
YnNlcnZlcjsKKyAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQub2JzZXJ2ZXJzRm9yID0gX2VtYmVy
TWV0YWxPYnNlcnZlci5vYnNlcnZlcnNGb3I7CisgIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LnJl
bW92ZU9ic2VydmVyID0gX2VtYmVyTWV0YWxPYnNlcnZlci5yZW1vdmVPYnNlcnZlcjsKKyAgX2Vt
YmVyTWV0YWxDb3JlLmRlZmF1bHQuX3N1c3BlbmRPYnNlcnZlciA9IF9lbWJlck1ldGFsT2JzZXJ2
ZXIuX3N1c3BlbmRPYnNlcnZlcjsKKyAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuX3N1c3BlbmRP
YnNlcnZlcnMgPSBfZW1iZXJNZXRhbE9ic2VydmVyLl9zdXNwZW5kT2JzZXJ2ZXJzOworCisgIF9l
bWJlck1ldGFsQ29yZS5kZWZhdWx0LklTX0JJTkRJTkcgPSBfZW1iZXJNZXRhbE1peGluLklTX0JJ
TkRJTkc7CisgIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LnJlcXVpcmVkID0gX2VtYmVyTWV0YWxN
aXhpbi5yZXF1aXJlZDsKKyAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuYWxpYXNNZXRob2QgPSBf
ZW1iZXJNZXRhbE1peGluLmFsaWFzTWV0aG9kOworICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5v
YnNlcnZlciA9IF9lbWJlck1ldGFsTWl4aW4ub2JzZXJ2ZXI7CisgIF9lbWJlck1ldGFsQ29yZS5k
ZWZhdWx0LmltbWVkaWF0ZU9ic2VydmVyID0gX2VtYmVyTWV0YWxNaXhpbi5faW1tZWRpYXRlT2Jz
ZXJ2ZXI7CisgIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0Lm1peGluID0gX2VtYmVyTWV0YWxNaXhp
bi5taXhpbjsKKyAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuTWl4aW4gPSBfZW1iZXJNZXRhbE1p
eGluLk1peGluOworCisgIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LmJpbmQgPSBfZW1iZXJNZXRh
bEJpbmRpbmcuYmluZDsKKyAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuQmluZGluZyA9IF9lbWJl
ck1ldGFsQmluZGluZy5CaW5kaW5nOworICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5pc0dsb2Jh
bFBhdGggPSBfZW1iZXJNZXRhbFBhdGhfY2FjaGUuaXNHbG9iYWxQYXRoOworCisgIF9lbWJlck1l
dGFsQ29yZS5kZWZhdWx0LnJ1biA9IF9lbWJlck1ldGFsUnVuX2xvb3AuZGVmYXVsdDsKKworICAv
KioKKyAgQGNsYXNzIEJhY2tidXJuZXIKKyAgQGZvciBFbWJlcgorICBAcHJpdmF0ZQorICAqLwor
ICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5CYWNrYnVybmVyID0gX2JhY2tidXJuZXIuZGVmYXVs
dDsKKyAgLy8gdGhpcyBpcyB0aGUgbmV3IGdvIGZvcndhcmQsIG9uY2UgRW1iZXIgRGF0YSB1cGRh
dGVzIHRvIHVzaW5nIGBfQmFja2J1cm5lcmAgd2UKKyAgLy8gY2FuIHJlbW92ZSB0aGUgbm9uLXVu
ZGVyc2NvcmVkIHZlcnNpb24uCisgIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0Ll9CYWNrYnVybmVy
ID0gX2JhY2tidXJuZXIuZGVmYXVsdDsKKworICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5saWJy
YXJpZXMgPSBuZXcgX2VtYmVyTWV0YWxMaWJyYXJpZXMuZGVmYXVsdCgpOworICBfZW1iZXJNZXRh
bENvcmUuZGVmYXVsdC5saWJyYXJpZXMucmVnaXN0ZXJDb3JlTGlicmFyeSgnRW1iZXInLCBfZW1i
ZXJNZXRhbENvcmUuZGVmYXVsdC5WRVJTSU9OKTsKKworICBfZW1iZXJNZXRhbENvcmUuZGVmYXVs
dC5pc05vbmUgPSBfZW1iZXJNZXRhbElzX25vbmUuZGVmYXVsdDsKKyAgX2VtYmVyTWV0YWxDb3Jl
LmRlZmF1bHQuaXNFbXB0eSA9IF9lbWJlck1ldGFsSXNfZW1wdHkuZGVmYXVsdDsKKyAgX2VtYmVy
TWV0YWxDb3JlLmRlZmF1bHQuaXNCbGFuayA9IF9lbWJlck1ldGFsSXNfYmxhbmsuZGVmYXVsdDsK
KyAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuaXNQcmVzZW50ID0gX2VtYmVyTWV0YWxJc19wcmVz
ZW50LmRlZmF1bHQ7CisKKyAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuYXNzaWduID0gT2JqZWN0
LmFzc2lnbiB8fCBfZW1iZXJNZXRhbEFzc2lnbi5kZWZhdWx0OworICBfZW1iZXJNZXRhbENvcmUu
ZGVmYXVsdC5tZXJnZSA9IF9lbWJlck1ldGFsTWVyZ2UuZGVmYXVsdDsKKworICBfZW1iZXJNZXRh
bENvcmUuZGVmYXVsdC5GRUFUVVJFUyA9IF9lbWJlck1ldGFsRmVhdHVyZXMuRkVBVFVSRVM7Cisg
IF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LkZFQVRVUkVTLmlzRW5hYmxlZCA9IF9lbWJlck1ldGFs
RmVhdHVyZXMuZGVmYXVsdDsKKworICAvKioKKyAgICBBIGZ1bmN0aW9uIG1heSBiZSBhc3NpZ25l
ZCB0byBgRW1iZXIub25lcnJvcmAgdG8gYmUgY2FsbGVkIHdoZW4gRW1iZXIKKyAgICBpbnRlcm5h
bHMgZW5jb3VudGVyIGFuIGVycm9yLiBUaGlzIGlzIHVzZWZ1bCBmb3Igc3BlY2lhbGl6ZWQgZXJy
b3IgaGFuZGxpbmcKKyAgICBhbmQgcmVwb3J0aW5nIGNvZGUuCisgIAorICAgIGBgYGphdmFzY3Jp
cHQKKyAgICBFbWJlci5vbmVycm9yID0gZnVuY3Rpb24oZXJyb3IpIHsKKyAgICAgIEVtLiQuYWph
eCgnL3JlcG9ydC1lcnJvcicsICdQT1NUJywgeworICAgICAgICBzdGFjazogZXJyb3Iuc3RhY2ss
CisgICAgICAgIG90aGVySW5mb3JtYXRpb246ICd3aGF0ZXZlciBhcHAgc3RhdGUgeW91IHdhbnQg
dG8gcHJvdmlkZScKKyAgICAgIH0pOworICAgIH07CisgICAgYGBgCisgIAorICAgIEludGVybmFs
bHksIGBFbWJlci5vbmVycm9yYCBpcyB1c2VkIGFzIEJhY2tidXJuZXIncyBlcnJvciBoYW5kbGVy
LgorICAKKyAgICBAZXZlbnQgb25lcnJvcgorICAgIEBmb3IgRW1iZXIKKyAgICBAcGFyYW0ge0V4
Y2VwdGlvbn0gZXJyb3IgdGhlIGVycm9yIG9iamVjdAorICAgIEBwdWJsaWMKKyAgKi8KKyAgX2Vt
YmVyTWV0YWxDb3JlLmRlZmF1bHQub25lcnJvciA9IG51bGw7CisgIC8vIEVORCBFWFBPUlRTCisK
KyAgLy8gZG8gdGhpcyBmb3Igc2lkZS1lZmZlY3RzIG9mIHVwZGF0aW5nIEVtYmVyLmFzc2VydCwg
d2FybiwgZXRjIHdoZW4KKyAgLy8gZW1iZXItZGVidWcgaXMgcHJlc2VudAorICAvLyBUaGlzIG5l
ZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgYW55IGRlcHJlY2F0ZUZ1bmMKKyAgaWYgKF9yZXF1aXJl
LmhhcygnZW1iZXItZGVidWcnKSkgeworICAgIF9yZXF1aXJlLmRlZmF1bHQoJ2VtYmVyLWRlYnVn
Jyk7CisgIH0gZWxzZSB7CisgICAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuRGVidWcgPSB7fTsK
KyAgICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5EZWJ1Zy5yZWdpc3RlckRlcHJlY2F0aW9uSGFu
ZGxlciA9IGZ1bmN0aW9uICgpIHt9OworICAgIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LkRlYnVn
LnJlZ2lzdGVyV2FybkhhbmRsZXIgPSBmdW5jdGlvbiAoKSB7fTsKKyAgfQorCisgIF9lbWJlck1l
dGFsQ29yZS5kZWZhdWx0LmNyZWF0ZSA9IF9lbWJlck1ldGFsRGVidWcuZGVwcmVjYXRlRnVuYygn
RW1iZXIuY3JlYXRlIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgT2JqZWN0LmNyZWF0ZScsIHsg
aWQ6ICdlbWJlci1tZXRhbC5lbWJlci1jcmVhdGUnLCB1bnRpbDogJzMuMC4wJyB9LCBPYmplY3Qu
Y3JlYXRlKTsKKyAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQua2V5cyA9IF9lbWJlck1ldGFsRGVi
dWcuZGVwcmVjYXRlRnVuYygnRW1iZXIua2V5cyBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIE9i
amVjdC5rZXlzJywgeyBpZDogJ2VtYmVyLW1ldGFsLmVtYmVyLmtleXMnLCB1bnRpbDogJzMuMC4w
JyB9LCBPYmplY3Qua2V5cyk7CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gX2VtYmVyTWV0YWxDb3Jl
LmRlZmF1bHQ7Cit9KTsKK2VuaWZlZCgnZW1iZXItbWV0YWwvaW5qZWN0ZWRfcHJvcGVydHknLCBb
J2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvZGVidWcnLCAnZW1iZXItbWV0YWwvY29tcHV0ZWQnLCAn
ZW1iZXItbWV0YWwvYWxpYXMnLCAnZW1iZXItbWV0YWwvcHJvcGVydGllcycsICdjb250YWluZXIv
b3duZXInXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsRGVidWcsIF9lbWJlck1ldGFs
Q29tcHV0ZWQsIF9lbWJlck1ldGFsQWxpYXMsIF9lbWJlck1ldGFsUHJvcGVydGllcywgX2NvbnRh
aW5lck93bmVyKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICAvKioKKyAgICBSZWFkLW9ubHkgcHJv
cGVydHkgdGhhdCByZXR1cm5zIHRoZSByZXN1bHQgb2YgYSBjb250YWluZXIgbG9va3VwLgorICAK
KyAgICBAY2xhc3MgSW5qZWN0ZWRQcm9wZXJ0eQorICAgIEBuYW1lc3BhY2UgRW1iZXIKKyAgICBA
Y29uc3RydWN0b3IKKyAgICBAcGFyYW0ge1N0cmluZ30gdHlwZSBUaGUgY29udGFpbmVyIHR5cGUg
dGhlIHByb3BlcnR5IHdpbGwgbG9va3VwCisgICAgQHBhcmFtIHtTdHJpbmd9IG5hbWUgKG9wdGlv
bmFsKSBUaGUgbmFtZSB0aGUgcHJvcGVydHkgd2lsbCBsb29rdXAsIGRlZmF1bHRzCisgICAgICAg
ICAgIHRvIHRoZSBwcm9wZXJ0eSdzIG5hbWUKKyAgICBAcHJpdmF0ZQorICAqLworICBmdW5jdGlv
biBJbmplY3RlZFByb3BlcnR5KHR5cGUsIG5hbWUpIHsKKyAgICB0aGlzLnR5cGUgPSB0eXBlOwor
ICAgIHRoaXMubmFtZSA9IG5hbWU7CisKKyAgICB0aGlzLl9zdXBlciRDb25zdHJ1Y3Rvcihpbmpl
Y3RlZFByb3BlcnR5R2V0KTsKKyAgICBBbGlhc2VkUHJvcGVydHlQcm90b3R5cGUub25lV2F5LmNh
bGwodGhpcyk7CisgIH0KKworICBmdW5jdGlvbiBpbmplY3RlZFByb3BlcnR5R2V0KGtleU5hbWUp
IHsKKyAgICB2YXIgZGVzYyA9IHRoaXNba2V5TmFtZV07CisgICAgdmFyIG93bmVyID0gX2NvbnRh
aW5lck93bmVyLmdldE93bmVyKHRoaXMpIHx8IHRoaXMuY29udGFpbmVyOyAvLyBmYWxsYmFjayB0
byBgY29udGFpbmVyYCBmb3IgYmFja3dhcmRzIGNvbXBhdAorCisgICAgX2VtYmVyTWV0YWxEZWJ1
Zy5hc3NlcnQoJ0luamVjdGVkUHJvcGVydGllcyBzaG91bGQgYmUgZGVmaW5lZCB3aXRoIHRoZSBF
bWJlci5pbmplY3QgY29tcHV0ZWQgcHJvcGVydHkgbWFjcm9zLicsIGRlc2MgJiYgZGVzYy5pc0Rl
c2NyaXB0b3IgJiYgZGVzYy50eXBlKTsKKyAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnQXR0
ZW1wdGluZyB0byBsb29rdXAgYW4gaW5qZWN0ZWQgcHJvcGVydHkgb24gYW4gb2JqZWN0IHdpdGhv
dXQgYSBjb250YWluZXIsIGVuc3VyZSB0aGF0IHRoZSBvYmplY3Qgd2FzIGluc3RhbnRpYXRlZCB2
aWEgYSBjb250YWluZXIuJywgb3duZXIpOworCisgICAgcmV0dXJuIG93bmVyLmxvb2t1cChkZXNj
LnR5cGUgKyAnOicgKyAoZGVzYy5uYW1lIHx8IGtleU5hbWUpKTsKKyAgfQorCisgIEluamVjdGVk
UHJvcGVydHkucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShfZW1iZXJNZXRhbFByb3BlcnRpZXMu
RGVzY3JpcHRvci5wcm90b3R5cGUpOworCisgIHZhciBJbmplY3RlZFByb3BlcnR5UHJvdG90eXBl
ID0gSW5qZWN0ZWRQcm9wZXJ0eS5wcm90b3R5cGU7CisgIHZhciBDb21wdXRlZFByb3BlcnR5UHJv
dG90eXBlID0gX2VtYmVyTWV0YWxDb21wdXRlZC5Db21wdXRlZFByb3BlcnR5LnByb3RvdHlwZTsK
KyAgdmFyIEFsaWFzZWRQcm9wZXJ0eVByb3RvdHlwZSA9IF9lbWJlck1ldGFsQWxpYXMuQWxpYXNl
ZFByb3BlcnR5LnByb3RvdHlwZTsKKworICBJbmplY3RlZFByb3BlcnR5UHJvdG90eXBlLl9zdXBl
ciRDb25zdHJ1Y3RvciA9IF9lbWJlck1ldGFsQ29tcHV0ZWQuQ29tcHV0ZWRQcm9wZXJ0eTsKKwor
ICBJbmplY3RlZFByb3BlcnR5UHJvdG90eXBlLmdldCA9IENvbXB1dGVkUHJvcGVydHlQcm90b3R5
cGUuZ2V0OworICBJbmplY3RlZFByb3BlcnR5UHJvdG90eXBlLnJlYWRPbmx5ID0gQ29tcHV0ZWRQ
cm9wZXJ0eVByb3RvdHlwZS5yZWFkT25seTsKKworICBJbmplY3RlZFByb3BlcnR5UHJvdG90eXBl
LnRlYXJkb3duID0gQ29tcHV0ZWRQcm9wZXJ0eVByb3RvdHlwZS50ZWFyZG93bjsKKworICBleHBv
cnRzLmRlZmF1bHQgPSBJbmplY3RlZFByb3BlcnR5OworfSk7CitlbmlmZWQoJ2VtYmVyLW1ldGFs
L2luc3RydW1lbnRhdGlvbicsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9jb3JlJywgJ2VtYmVy
LW1ldGFsL2ZlYXR1cmVzJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbENvcmUsIF9l
bWJlck1ldGFsRmVhdHVyZXMpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIGV4cG9ydHMuaW5zdHJ1
bWVudCA9IGluc3RydW1lbnQ7CisgIGV4cG9ydHMuX2luc3RydW1lbnRTdGFydCA9IF9pbnN0cnVt
ZW50U3RhcnQ7CisgIGV4cG9ydHMuc3Vic2NyaWJlID0gc3Vic2NyaWJlOworICBleHBvcnRzLnVu
c3Vic2NyaWJlID0gdW5zdWJzY3JpYmU7CisgIGV4cG9ydHMucmVzZXQgPSByZXNldDsKKworICAv
KioKKyAgICBUaGUgcHVycG9zZSBvZiB0aGUgRW1iZXIgSW5zdHJ1bWVudGF0aW9uIG1vZHVsZSBp
cworICAgIHRvIHByb3ZpZGUgZWZmaWNpZW50LCBnZW5lcmFsLXB1cnBvc2UgaW5zdHJ1bWVudGF0
aW9uCisgICAgZm9yIEVtYmVyLgorICAKKyAgICBTdWJzY3JpYmUgdG8gYSBsaXN0ZW5lciBieSB1
c2luZyBgRW1iZXIuc3Vic2NyaWJlYDoKKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIEVtYmVy
LnN1YnNjcmliZSgicmVuZGVyIiwgeworICAgICAgYmVmb3JlOiBmdW5jdGlvbihuYW1lLCB0aW1l
c3RhbXAsIHBheWxvYWQpIHsKKyAgCisgICAgICB9LAorICAKKyAgICAgIGFmdGVyOiBmdW5jdGlv
bihuYW1lLCB0aW1lc3RhbXAsIHBheWxvYWQpIHsKKyAgCisgICAgICB9CisgICAgfSk7CisgICAg
YGBgCisgIAorICAgIElmIHlvdSByZXR1cm4gYSB2YWx1ZSBmcm9tIHRoZSBgYmVmb3JlYCBjYWxs
YmFjaywgdGhhdCBzYW1lCisgICAgdmFsdWUgd2lsbCBiZSBwYXNzZWQgYXMgYSBmb3VydGggcGFy
YW1ldGVyIHRvIHRoZSBgYWZ0ZXJgCisgICAgY2FsbGJhY2suCisgIAorICAgIEluc3RydW1lbnQg
YSBibG9jayBvZiBjb2RlIGJ5IHVzaW5nIGBFbWJlci5pbnN0cnVtZW50YDoKKyAgCisgICAgYGBg
amF2YXNjcmlwdAorICAgIEVtYmVyLmluc3RydW1lbnQoInJlbmRlci5oYW5kbGViYXJzIiwgcGF5
bG9hZCwgZnVuY3Rpb24oKSB7CisgICAgICAvLyByZW5kZXJpbmcgbG9naWMKKyAgICB9LCBiaW5k
aW5nKTsKKyAgICBgYGAKKyAgCisgICAgRXZlbnQgbmFtZXMgcGFzc2VkIHRvIGBFbWJlci5pbnN0
cnVtZW50YCBhcmUgbmFtZXNwYWNlZAorICAgIGJ5IHBlcmlvZHMsIGZyb20gbW9yZSBnZW5lcmFs
IHRvIG1vcmUgc3BlY2lmaWMuIFN1YnNjcmliZXJzCisgICAgY2FuIGxpc3RlbiBmb3IgZXZlbnRz
IGJ5IHdoYXRldmVyIGxldmVsIG9mIGdyYW51bGFyaXR5IHRoZXkKKyAgICBhcmUgaW50ZXJlc3Rl
ZCBpbi4KKyAgCisgICAgSW4gdGhlIGFib3ZlIGV4YW1wbGUsIHRoZSBldmVudCBpcyBgcmVuZGVy
LmhhbmRsZWJhcnNgLAorICAgIGFuZCB0aGUgc3Vic2NyaWJlciBsaXN0ZW5lZCBmb3IgYWxsIGV2
ZW50cyBiZWdpbm5pbmcgd2l0aAorICAgIGByZW5kZXJgLiBJdCB3b3VsZCByZWNlaXZlIGNhbGxi
YWNrcyBmb3IgZXZlbnRzIG5hbWVkCisgICAgYHJlbmRlcmAsIGByZW5kZXIuaGFuZGxlYmFyc2As
IGByZW5kZXIuY29udGFpbmVyYCwgb3IKKyAgICBldmVuIGByZW5kZXIuaGFuZGxlYmFycy5sYXlv
dXRgLgorICAKKyAgICBAY2xhc3MgSW5zdHJ1bWVudGF0aW9uCisgICAgQG5hbWVzcGFjZSBFbWJl
cgorICAgIEBzdGF0aWMKKyAgICBAcHJpdmF0ZQorICAqLworICB2YXIgc3Vic2NyaWJlcnMgPSBb
XTsKKyAgZXhwb3J0cy5zdWJzY3JpYmVycyA9IHN1YnNjcmliZXJzOworICB2YXIgY2FjaGUgPSB7
fTsKKworICB2YXIgcG9wdWxhdGVMaXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkgeworICAgIHZh
ciBsaXN0ZW5lcnMgPSBbXTsKKyAgICB2YXIgc3Vic2NyaWJlcjsKKworICAgIGZvciAodmFyIGkg
PSAwLCBsID0gc3Vic2NyaWJlcnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CisgICAgICBzdWJzY3Jp
YmVyID0gc3Vic2NyaWJlcnNbaV07CisgICAgICBpZiAoc3Vic2NyaWJlci5yZWdleC50ZXN0KG5h
bWUpKSB7CisgICAgICAgIGxpc3RlbmVycy5wdXNoKHN1YnNjcmliZXIub2JqZWN0KTsKKyAgICAg
IH0KKyAgICB9CisKKyAgICBjYWNoZVtuYW1lXSA9IGxpc3RlbmVyczsKKyAgICByZXR1cm4gbGlz
dGVuZXJzOworICB9OworCisgIHZhciB0aW1lID0gKGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgcGVy
ZiA9ICd1bmRlZmluZWQnICE9PSB0eXBlb2Ygd2luZG93ID8gd2luZG93LnBlcmZvcm1hbmNlIHx8
IHt9IDoge307CisgICAgdmFyIGZuID0gcGVyZi5ub3cgfHwgcGVyZi5tb3pOb3cgfHwgcGVyZi53
ZWJraXROb3cgfHwgcGVyZi5tc05vdyB8fCBwZXJmLm9Ob3c7CisgICAgLy8gZm4uYmluZCB3aWxs
IGJlIGF2YWlsYWJsZSBpbiBhbGwgdGhlIGJyb3dzZXJzIHRoYXQgc3VwcG9ydCB0aGUgYWR2YW5j
ZWQgd2luZG93LnBlcmZvcm1hbmNlLi4uIDstKQorICAgIHJldHVybiBmbiA/IGZuLmJpbmQocGVy
ZikgOiBmdW5jdGlvbiAoKSB7CisgICAgICByZXR1cm4gK25ldyBEYXRlKCk7CisgICAgfTsKKyAg
fSkoKTsKKworICAvKioKKyAgICBOb3RpZmllcyBldmVudCdzIHN1YnNjcmliZXJzLCBjYWxscyBg
YmVmb3JlYCBhbmQgYGFmdGVyYCBob29rcy4KKyAgCisgICAgQG1ldGhvZCBpbnN0cnVtZW50Cisg
ICAgQG5hbWVzcGFjZSBFbWJlci5JbnN0cnVtZW50YXRpb24KKyAgCisgICAgQHBhcmFtIHtTdHJp
bmd9IFtuYW1lXSBOYW1lc3BhY2VkIGV2ZW50IG5hbWUuCisgICAgQHBhcmFtIHtPYmplY3R9IF9w
YXlsb2FkCisgICAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgRnVuY3Rpb24gdGhhdCB5b3Un
cmUgaW5zdHJ1bWVudGluZy4KKyAgICBAcGFyYW0ge09iamVjdH0gYmluZGluZyBDb250ZXh0IHRo
YXQgaW5zdHJ1bWVudCBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aC4KKyAgICBAcHJpdmF0ZQorICAq
LworCisgIGZ1bmN0aW9uIGluc3RydW1lbnQobmFtZSwgX3BheWxvYWQsIGNhbGxiYWNrLCBiaW5k
aW5nKSB7CisgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPD0gMyAmJiB0eXBlb2YgX3BheWxvYWQg
PT09ICdmdW5jdGlvbicpIHsKKyAgICAgIGJpbmRpbmcgPSBjYWxsYmFjazsKKyAgICAgIGNhbGxi
YWNrID0gX3BheWxvYWQ7CisgICAgICBfcGF5bG9hZCA9IHVuZGVmaW5lZDsKKyAgICB9CisgICAg
aWYgKHN1YnNjcmliZXJzLmxlbmd0aCA9PT0gMCkgeworICAgICAgcmV0dXJuIGNhbGxiYWNrLmNh
bGwoYmluZGluZyk7CisgICAgfQorICAgIHZhciBwYXlsb2FkID0gX3BheWxvYWQgfHwge307Cisg
ICAgdmFyIGZpbmFsaXplciA9IF9pbnN0cnVtZW50U3RhcnQobmFtZSwgZnVuY3Rpb24gKCkgewor
ICAgICAgcmV0dXJuIHBheWxvYWQ7CisgICAgfSk7CisKKyAgICBpZiAoZmluYWxpemVyKSB7Cisg
ICAgICByZXR1cm4gd2l0aEZpbmFsaXplcihjYWxsYmFjaywgZmluYWxpemVyLCBwYXlsb2FkLCBi
aW5kaW5nKTsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIGNhbGxiYWNrLmNhbGwoYmluZGlu
Zyk7CisgICAgfQorICB9CisKKyAgdmFyIGZsYWdnZWRJbnN0cnVtZW50OworCisgIGV4cG9ydHMu
ZmxhZ2dlZEluc3RydW1lbnQgPSBmbGFnZ2VkSW5zdHJ1bWVudCA9IGZ1bmN0aW9uIChuYW1lLCBw
YXlsb2FkLCBjYWxsYmFjaykgeworICAgIHJldHVybiBjYWxsYmFjaygpOworICB9OworICBleHBv
cnRzLmZsYWdnZWRJbnN0cnVtZW50ID0gZmxhZ2dlZEluc3RydW1lbnQ7CisKKyAgZnVuY3Rpb24g
d2l0aEZpbmFsaXplcihjYWxsYmFjaywgZmluYWxpemVyLCBwYXlsb2FkLCBiaW5kaW5nKSB7Cisg
ICAgdmFyIHJlc3VsdCA9IHVuZGVmaW5lZDsKKyAgICB0cnkgeworICAgICAgcmVzdWx0ID0gY2Fs
bGJhY2suY2FsbChiaW5kaW5nKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICBwYXlsb2FkLmV4
Y2VwdGlvbiA9IGU7CisgICAgICByZXN1bHQgPSBwYXlsb2FkOworICAgIH0gZmluYWxseSB7Cisg
ICAgICBmaW5hbGl6ZXIoKTsKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICB9CisKKyAg
Ly8gcHJpdmF0ZSBmb3Igbm93CisKKyAgZnVuY3Rpb24gX2luc3RydW1lbnRTdGFydChuYW1lLCBf
cGF5bG9hZCkgeworICAgIHZhciBsaXN0ZW5lcnMgPSBjYWNoZVtuYW1lXTsKKworICAgIGlmICgh
bGlzdGVuZXJzKSB7CisgICAgICBsaXN0ZW5lcnMgPSBwb3B1bGF0ZUxpc3RlbmVycyhuYW1lKTsK
KyAgICB9CisKKyAgICBpZiAobGlzdGVuZXJzLmxlbmd0aCA9PT0gMCkgeworICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIHZhciBwYXlsb2FkID0gX3BheWxvYWQoKTsKKworICAgIHZhciBTVFJV
Q1RVUkVEX1BST0ZJTEUgPSBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5TVFJVQ1RVUkVEX1BST0ZJ
TEU7CisgICAgdmFyIHRpbWVOYW1lOworICAgIGlmIChTVFJVQ1RVUkVEX1BST0ZJTEUpIHsKKyAg
ICAgIHRpbWVOYW1lID0gbmFtZSArICc6ICcgKyBwYXlsb2FkLm9iamVjdDsKKyAgICAgIGNvbnNv
bGUudGltZSh0aW1lTmFtZSk7CisgICAgfQorCisgICAgdmFyIGwgPSBsaXN0ZW5lcnMubGVuZ3Ro
OworICAgIHZhciBiZWZvcmVWYWx1ZXMgPSBuZXcgQXJyYXkobCk7CisgICAgdmFyIGksIGxpc3Rl
bmVyOworICAgIHZhciB0aW1lc3RhbXAgPSB0aW1lKCk7CisgICAgZm9yIChpID0gMDsgaSA8IGw7
IGkrKykgeworICAgICAgbGlzdGVuZXIgPSBsaXN0ZW5lcnNbaV07CisgICAgICBiZWZvcmVWYWx1
ZXNbaV0gPSBsaXN0ZW5lci5iZWZvcmUobmFtZSwgdGltZXN0YW1wLCBwYXlsb2FkKTsKKyAgICB9
CisKKyAgICByZXR1cm4gZnVuY3Rpb24gX2luc3RydW1lbnRFbmQoKSB7CisgICAgICB2YXIgaSwg
bCwgbGlzdGVuZXI7CisgICAgICB2YXIgdGltZXN0YW1wID0gdGltZSgpOworICAgICAgZm9yIChp
ID0gMCwgbCA9IGxpc3RlbmVycy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKKyAgICAgICAgbGlzdGVu
ZXIgPSBsaXN0ZW5lcnNbaV07CisgICAgICAgIGlmICh0eXBlb2YgbGlzdGVuZXIuYWZ0ZXIgPT09
ICdmdW5jdGlvbicpIHsKKyAgICAgICAgICBsaXN0ZW5lci5hZnRlcihuYW1lLCB0aW1lc3RhbXAs
IHBheWxvYWQsIGJlZm9yZVZhbHVlc1tpXSk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAg
aWYgKFNUUlVDVFVSRURfUFJPRklMRSkgeworICAgICAgICBjb25zb2xlLnRpbWVFbmQodGltZU5h
bWUpOworICAgICAgfQorICAgIH07CisgIH0KKworICAvKioKKyAgICBTdWJzY3JpYmVzIHRvIGEg
cGFydGljdWxhciBldmVudCBvciBpbnN0cnVtZW50ZWQgYmxvY2sgb2YgY29kZS4KKyAgCisgICAg
QG1ldGhvZCBzdWJzY3JpYmUKKyAgICBAbmFtZXNwYWNlIEVtYmVyLkluc3RydW1lbnRhdGlvbgor
ICAKKyAgICBAcGFyYW0ge1N0cmluZ30gW3BhdHRlcm5dIE5hbWVzcGFjZWQgZXZlbnQgbmFtZS4K
KyAgICBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gQmVmb3JlIGFuZCBBZnRlciBob29rcy4KKyAg
CisgICAgQHJldHVybiB7U3Vic2NyaWJlcn0KKyAgICBAcHJpdmF0ZQorICAqLworCisgIGZ1bmN0
aW9uIHN1YnNjcmliZShwYXR0ZXJuLCBvYmplY3QpIHsKKyAgICB2YXIgcGF0aHMgPSBwYXR0ZXJu
LnNwbGl0KCcuJyk7CisgICAgdmFyIHBhdGg7CisgICAgdmFyIHJlZ2V4ID0gW107CisKKyAgICBm
b3IgKHZhciBpID0gMCwgbCA9IHBhdGhzLmxlbmd0aDsgaSA8IGw7IGkrKykgeworICAgICAgcGF0
aCA9IHBhdGhzW2ldOworICAgICAgaWYgKHBhdGggPT09ICcqJykgeworICAgICAgICByZWdleC5w
dXNoKCdbXlxcLl0qJyk7CisgICAgICB9IGVsc2UgeworICAgICAgICByZWdleC5wdXNoKHBhdGgp
OworICAgICAgfQorICAgIH0KKworICAgIHJlZ2V4ID0gcmVnZXguam9pbignXFwuJyk7CisgICAg
cmVnZXggPSByZWdleCArICcoXFwuLiopPyc7CisKKyAgICB2YXIgc3Vic2NyaWJlciA9IHsKKyAg
ICAgIHBhdHRlcm46IHBhdHRlcm4sCisgICAgICByZWdleDogbmV3IFJlZ0V4cCgnXicgKyByZWdl
eCArICckJyksCisgICAgICBvYmplY3Q6IG9iamVjdAorICAgIH07CisKKyAgICBzdWJzY3JpYmVy
cy5wdXNoKHN1YnNjcmliZXIpOworICAgIGNhY2hlID0ge307CisKKyAgICByZXR1cm4gc3Vic2Ny
aWJlcjsKKyAgfQorCisgIC8qKgorICAgIFVuc3Vic2NyaWJlcyBmcm9tIGEgcGFydGljdWxhciBl
dmVudCBvciBpbnN0cnVtZW50ZWQgYmxvY2sgb2YgY29kZS4KKyAgCisgICAgQG1ldGhvZCB1bnN1
YnNjcmliZQorICAgIEBuYW1lc3BhY2UgRW1iZXIuSW5zdHJ1bWVudGF0aW9uCisgIAorICAgIEBw
YXJhbSB7T2JqZWN0fSBbc3Vic2NyaWJlcl0KKyAgICBAcHJpdmF0ZQorICAqLworCisgIGZ1bmN0
aW9uIHVuc3Vic2NyaWJlKHN1YnNjcmliZXIpIHsKKyAgICB2YXIgaW5kZXg7CisKKyAgICBmb3Ig
KHZhciBpID0gMCwgbCA9IHN1YnNjcmliZXJzLmxlbmd0aDsgaSA8IGw7IGkrKykgeworICAgICAg
aWYgKHN1YnNjcmliZXJzW2ldID09PSBzdWJzY3JpYmVyKSB7CisgICAgICAgIGluZGV4ID0gaTsK
KyAgICAgIH0KKyAgICB9CisKKyAgICBzdWJzY3JpYmVycy5zcGxpY2UoaW5kZXgsIDEpOworICAg
IGNhY2hlID0ge307CisgIH0KKworICAvKioKKyAgICBSZXNldHMgYEVtYmVyLkluc3RydW1lbnRh
dGlvbmAgYnkgZmx1c2hpbmcgbGlzdCBvZiBzdWJzY3JpYmVycy4KKyAgCisgICAgQG1ldGhvZCBy
ZXNldAorICAgIEBuYW1lc3BhY2UgRW1iZXIuSW5zdHJ1bWVudGF0aW9uCisgICAgQHByaXZhdGUK
KyAgKi8KKworICBmdW5jdGlvbiByZXNldCgpIHsKKyAgICBzdWJzY3JpYmVycy5sZW5ndGggPSAw
OworICAgIGNhY2hlID0ge307CisgIH0KK30pOworZW5pZmVkKCdlbWJlci1tZXRhbC9pc19ibGFu
aycsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9pc19lbXB0eSddLCBmdW5jdGlvbiAoZXhwb3J0
cywgX2VtYmVyTWV0YWxJc19lbXB0eSkgeworICAndXNlIHN0cmljdCc7CisKKyAgZXhwb3J0cy5k
ZWZhdWx0ID0gaXNCbGFuazsKKworICAvKioKKyAgICBBIHZhbHVlIGlzIGJsYW5rIGlmIGl0IGlz
IGVtcHR5IG9yIGEgd2hpdGVzcGFjZSBzdHJpbmcuCisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAg
ICBFbWJlci5pc0JsYW5rKCk7ICAgICAgICAgICAgICAgIC8vIHRydWUKKyAgICBFbWJlci5pc0Js
YW5rKG51bGwpOyAgICAgICAgICAgIC8vIHRydWUKKyAgICBFbWJlci5pc0JsYW5rKHVuZGVmaW5l
ZCk7ICAgICAgIC8vIHRydWUKKyAgICBFbWJlci5pc0JsYW5rKCcnKTsgICAgICAgICAgICAgIC8v
IHRydWUKKyAgICBFbWJlci5pc0JsYW5rKFtdKTsgICAgICAgICAgICAgIC8vIHRydWUKKyAgICBF
bWJlci5pc0JsYW5rKCdcblx0Jyk7ICAgICAgICAgIC8vIHRydWUKKyAgICBFbWJlci5pc0JsYW5r
KCcgICcpOyAgICAgICAgICAgIC8vIHRydWUKKyAgICBFbWJlci5pc0JsYW5rKHt9KTsgICAgICAg
ICAgICAgIC8vIGZhbHNlCisgICAgRW1iZXIuaXNCbGFuaygnXG5cdCBIZWxsbycpOyAgICAvLyBm
YWxzZQorICAgIEVtYmVyLmlzQmxhbmsoJ0hlbGxvIHdvcmxkJyk7ICAgLy8gZmFsc2UKKyAgICBF
bWJlci5pc0JsYW5rKFsxLDIsM10pOyAgICAgICAgIC8vIGZhbHNlCisgICAgYGBgCisgIAorICAg
IEBtZXRob2QgaXNCbGFuaworICAgIEBmb3IgRW1iZXIKKyAgICBAcGFyYW0ge09iamVjdH0gb2Jq
IFZhbHVlIHRvIHRlc3QKKyAgICBAcmV0dXJuIHtCb29sZWFufQorICAgIEBzaW5jZSAxLjUuMAor
ICAgIEBwdWJsaWMKKyAgKi8KKworICBmdW5jdGlvbiBpc0JsYW5rKG9iaikgeworICAgIHJldHVy
biBfZW1iZXJNZXRhbElzX2VtcHR5LmRlZmF1bHQob2JqKSB8fCB0eXBlb2Ygb2JqID09PSAnc3Ry
aW5nJyAmJiBvYmoubWF0Y2goL1xTLykgPT09IG51bGw7CisgIH0KK30pOworZW5pZmVkKCdlbWJl
ci1tZXRhbC9pc19lbXB0eScsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQn
LCAnZW1iZXItbWV0YWwvaXNfbm9uZSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxQ
cm9wZXJ0eV9nZXQsIF9lbWJlck1ldGFsSXNfbm9uZSkgeworICAndXNlIHN0cmljdCc7CisKKyAg
LyoqCisgICAgVmVyaWZpZXMgdGhhdCBhIHZhbHVlIGlzIGBudWxsYCBvciBhbiBlbXB0eSBzdHJp
bmcsIGVtcHR5IGFycmF5LAorICAgIG9yIGVtcHR5IGZ1bmN0aW9uLgorICAKKyAgICBDb25zdHJh
aW5zIHRoZSBydWxlcyBvbiBgRW1iZXIuaXNOb25lYCBieSByZXR1cm5pbmcgdHJ1ZSBmb3IgZW1w
dHkKKyAgICBzdHJpbmcgYW5kIGVtcHR5IGFycmF5cy4KKyAgCisgICAgYGBgamF2YXNjcmlwdAor
ICAgIEVtYmVyLmlzRW1wdHkoKTsgICAgICAgICAgICAgICAgLy8gdHJ1ZQorICAgIEVtYmVyLmlz
RW1wdHkobnVsbCk7ICAgICAgICAgICAgLy8gdHJ1ZQorICAgIEVtYmVyLmlzRW1wdHkodW5kZWZp
bmVkKTsgICAgICAgLy8gdHJ1ZQorICAgIEVtYmVyLmlzRW1wdHkoJycpOyAgICAgICAgICAgICAg
Ly8gdHJ1ZQorICAgIEVtYmVyLmlzRW1wdHkoW10pOyAgICAgICAgICAgICAgLy8gdHJ1ZQorICAg
IEVtYmVyLmlzRW1wdHkoe30pOyAgICAgICAgICAgICAgLy8gZmFsc2UKKyAgICBFbWJlci5pc0Vt
cHR5KCdBZGFtIEhhd2tpbnMnKTsgIC8vIGZhbHNlCisgICAgRW1iZXIuaXNFbXB0eShbMCwxLDJd
KTsgICAgICAgICAvLyBmYWxzZQorICAgIEVtYmVyLmlzRW1wdHkoJ1xuXHQnKTsgICAgICAgICAg
Ly8gZmFsc2UKKyAgICBFbWJlci5pc0VtcHR5KCcgICcpOyAgICAgICAgICAgIC8vIGZhbHNlCisg
ICAgYGBgCisgIAorICAgIEBtZXRob2QgaXNFbXB0eQorICAgIEBmb3IgRW1iZXIKKyAgICBAcGFy
YW0ge09iamVjdH0gb2JqIFZhbHVlIHRvIHRlc3QKKyAgICBAcmV0dXJuIHtCb29sZWFufQorICAg
IEBwdWJsaWMKKyAgKi8KKyAgZnVuY3Rpb24gaXNFbXB0eShvYmopIHsKKyAgICB2YXIgbm9uZSA9
IF9lbWJlck1ldGFsSXNfbm9uZS5kZWZhdWx0KG9iaik7CisgICAgaWYgKG5vbmUpIHsKKyAgICAg
IHJldHVybiBub25lOworICAgIH0KKworICAgIGlmICh0eXBlb2Ygb2JqLnNpemUgPT09ICdudW1i
ZXInKSB7CisgICAgICByZXR1cm4gIW9iai5zaXplOworICAgIH0KKworICAgIHZhciBvYmplY3RU
eXBlID0gdHlwZW9mIG9iajsKKworICAgIGlmIChvYmplY3RUeXBlID09PSAnb2JqZWN0Jykgewor
ICAgICAgdmFyIHNpemUgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQob2JqLCAnc2l6ZScp
OworICAgICAgaWYgKHR5cGVvZiBzaXplID09PSAnbnVtYmVyJykgeworICAgICAgICByZXR1cm4g
IXNpemU7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKHR5cGVvZiBvYmoubGVuZ3RoID09PSAn
bnVtYmVyJyAmJiBvYmplY3RUeXBlICE9PSAnZnVuY3Rpb24nKSB7CisgICAgICByZXR1cm4gIW9i
ai5sZW5ndGg7CisgICAgfQorCisgICAgaWYgKG9iamVjdFR5cGUgPT09ICdvYmplY3QnKSB7Cisg
ICAgICB2YXIgbGVuZ3RoID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KG9iaiwgJ2xlbmd0
aCcpOworICAgICAgaWYgKHR5cGVvZiBsZW5ndGggPT09ICdudW1iZXInKSB7CisgICAgICAgIHJl
dHVybiAhbGVuZ3RoOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKKyAgfQor
CisgIGV4cG9ydHMuZGVmYXVsdCA9IGlzRW1wdHk7Cit9KTsKK2VuaWZlZCgiZW1iZXItbWV0YWwv
aXNfbm9uZSIsIFsiZXhwb3J0cyJdLCBmdW5jdGlvbiAoZXhwb3J0cykgeworICAvKioKKyAgICBS
ZXR1cm5zIHRydWUgaWYgdGhlIHBhc3NlZCB2YWx1ZSBpcyBudWxsIG9yIHVuZGVmaW5lZC4gVGhp
cyBhdm9pZHMgZXJyb3JzCisgICAgZnJvbSBKU0xpbnQgY29tcGxhaW5pbmcgYWJvdXQgdXNlIG9m
ID09LCB3aGljaCBjYW4gYmUgdGVjaG5pY2FsbHkKKyAgICBjb25mdXNpbmcuCisgIAorICAgIGBg
YGphdmFzY3JpcHQKKyAgICBFbWJlci5pc05vbmUoKTsgICAgICAgICAgICAgIC8vIHRydWUKKyAg
ICBFbWJlci5pc05vbmUobnVsbCk7ICAgICAgICAgIC8vIHRydWUKKyAgICBFbWJlci5pc05vbmUo
dW5kZWZpbmVkKTsgICAgIC8vIHRydWUKKyAgICBFbWJlci5pc05vbmUoJycpOyAgICAgICAgICAg
IC8vIGZhbHNlCisgICAgRW1iZXIuaXNOb25lKFtdKTsgICAgICAgICAgICAvLyBmYWxzZQorICAg
IEVtYmVyLmlzTm9uZShmdW5jdGlvbigpIHt9KTsgLy8gZmFsc2UKKyAgICBgYGAKKyAgCisgICAg
QG1ldGhvZCBpc05vbmUKKyAgICBAZm9yIEVtYmVyCisgICAgQHBhcmFtIHtPYmplY3R9IG9iaiBW
YWx1ZSB0byB0ZXN0CisgICAgQHJldHVybiB7Qm9vbGVhbn0KKyAgICBAcHVibGljCisgICovCisg
ICJ1c2Ugc3RyaWN0IjsKKworICBleHBvcnRzLmRlZmF1bHQgPSBpc05vbmU7CisKKyAgZnVuY3Rp
b24gaXNOb25lKG9iaikgeworICAgIHJldHVybiBvYmogPT09IG51bGwgfHwgb2JqID09PSB1bmRl
ZmluZWQ7CisgIH0KK30pOworZW5pZmVkKCdlbWJlci1tZXRhbC9pc19wcmVzZW50JywgWydleHBv
cnRzJywgJ2VtYmVyLW1ldGFsL2lzX2JsYW5rJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJN
ZXRhbElzX2JsYW5rKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICBleHBvcnRzLmRlZmF1bHQgPSBp
c1ByZXNlbnQ7CisKKyAgLyoqCisgICAgQSB2YWx1ZSBpcyBwcmVzZW50IGlmIGl0IG5vdCBgaXNC
bGFua2AuCisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAgICBFbWJlci5pc1ByZXNlbnQoKTsgICAg
ICAgICAgICAgICAgLy8gZmFsc2UKKyAgICBFbWJlci5pc1ByZXNlbnQobnVsbCk7ICAgICAgICAg
ICAgLy8gZmFsc2UKKyAgICBFbWJlci5pc1ByZXNlbnQodW5kZWZpbmVkKTsgICAgICAgLy8gZmFs
c2UKKyAgICBFbWJlci5pc1ByZXNlbnQoJycpOyAgICAgICAgICAgICAgLy8gZmFsc2UKKyAgICBF
bWJlci5pc1ByZXNlbnQoJyAgJyk7ICAgICAgICAgICAgLy8gZmFsc2UKKyAgICBFbWJlci5pc1By
ZXNlbnQoJ1xuXHQnKTsgICAgICAgICAgLy8gZmFsc2UKKyAgICBFbWJlci5pc1ByZXNlbnQoW10p
OyAgICAgICAgICAgICAgLy8gZmFsc2UKKyAgICBFbWJlci5pc1ByZXNlbnQoeyBsZW5ndGg6IDAg
fSkgICAgLy8gZmFsc2UKKyAgICBFbWJlci5pc1ByZXNlbnQoZmFsc2UpOyAgICAgICAgICAgLy8g
dHJ1ZQorICAgIEVtYmVyLmlzUHJlc2VudCh0cnVlKTsgICAgICAgICAgICAvLyB0cnVlCisgICAg
RW1iZXIuaXNQcmVzZW50KCdzdHJpbmcnKTsgICAgICAgIC8vIHRydWUKKyAgICBFbWJlci5pc1By
ZXNlbnQoMCk7ICAgICAgICAgICAgICAgLy8gdHJ1ZQorICAgIEVtYmVyLmlzUHJlc2VudChmdW5j
dGlvbigpIHt9KSAgICAvLyB0cnVlCisgICAgRW1iZXIuaXNQcmVzZW50KHt9KTsgICAgICAgICAg
ICAgIC8vIHRydWUKKyAgICBFbWJlci5pc1ByZXNlbnQoZmFsc2UpOyAgICAgICAgICAgLy8gdHJ1
ZQorICAgIEVtYmVyLmlzUHJlc2VudCgnXG5cdCBIZWxsbycpOyAgICAvLyB0cnVlCisgICAgRW1i
ZXIuaXNQcmVzZW50KFsxLDIsM10pOyAgICAgICAgIC8vIHRydWUKKyAgICBgYGAKKyAgCisgICAg
QG1ldGhvZCBpc1ByZXNlbnQKKyAgICBAZm9yIEVtYmVyCisgICAgQHBhcmFtIHtPYmplY3R9IG9i
aiBWYWx1ZSB0byB0ZXN0CisgICAgQHJldHVybiB7Qm9vbGVhbn0KKyAgICBAc2luY2UgMS44LjAK
KyAgICBAcHVibGljCisgICovCisKKyAgZnVuY3Rpb24gaXNQcmVzZW50KG9iaikgeworICAgIHJl
dHVybiAhX2VtYmVyTWV0YWxJc19ibGFuay5kZWZhdWx0KG9iaik7CisgIH0KK30pOworZW5pZmVk
KCdlbWJlci1tZXRhbC9saWJyYXJpZXMnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvZGVidWcn
LCAnZW1iZXItbWV0YWwvZmVhdHVyZXMnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFs
RGVidWcsIF9lbWJlck1ldGFsRmVhdHVyZXMpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIC8qKgor
ICAgIEhlbHBlciBjbGFzcyB0aGF0IGFsbG93cyB5b3UgdG8gcmVnaXN0ZXIgeW91ciBsaWJyYXJ5
IHdpdGggRW1iZXIuCisgIAorICAgIFNpbmdsZXRvbiBjcmVhdGVkIGF0IGBFbWJlci5saWJyYXJp
ZXNgLgorICAKKyAgICBAY2xhc3MgTGlicmFyaWVzCisgICAgQGNvbnN0cnVjdG9yCisgICAgQHBy
aXZhdGUKKyAgKi8KKyAgZnVuY3Rpb24gTGlicmFyaWVzKCkgeworICAgIHRoaXMuX3JlZ2lzdHJ5
ID0gW107CisgICAgdGhpcy5fY29yZUxpYkluZGV4ID0gMDsKKyAgfQorCisgIExpYnJhcmllcy5w
cm90b3R5cGUgPSB7CisgICAgY29uc3RydWN0b3I6IExpYnJhcmllcywKKworICAgIF9nZXRMaWJy
YXJ5QnlOYW1lOiBmdW5jdGlvbiAobmFtZSkgeworICAgICAgdmFyIGxpYnMgPSB0aGlzLl9yZWdp
c3RyeTsKKyAgICAgIHZhciBjb3VudCA9IGxpYnMubGVuZ3RoOworCisgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgaWYgKGxpYnNbaV0ubmFtZSA9PT0gbmFt
ZSkgeworICAgICAgICAgIHJldHVybiBsaWJzW2ldOworICAgICAgICB9CisgICAgICB9CisgICAg
fSwKKworICAgIHJlZ2lzdGVyOiBmdW5jdGlvbiAobmFtZSwgdmVyc2lvbiwgaXNDb3JlTGlicmFy
eSkgeworICAgICAgdmFyIGluZGV4ID0gdGhpcy5fcmVnaXN0cnkubGVuZ3RoOworCisgICAgICBp
ZiAoIXRoaXMuX2dldExpYnJhcnlCeU5hbWUobmFtZSkpIHsKKyAgICAgICAgaWYgKGlzQ29yZUxp
YnJhcnkpIHsKKyAgICAgICAgICBpbmRleCA9IHRoaXMuX2NvcmVMaWJJbmRleCsrOworICAgICAg
ICB9CisgICAgICAgIHRoaXMuX3JlZ2lzdHJ5LnNwbGljZShpbmRleCwgMCwgeyBuYW1lOiBuYW1l
LCB2ZXJzaW9uOiB2ZXJzaW9uIH0pOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgX2VtYmVyTWV0
YWxEZWJ1Zy53YXJuKCdMaWJyYXJ5ICInICsgbmFtZSArICciIGlzIGFscmVhZHkgcmVnaXN0ZXJl
ZCB3aXRoIEVtYmVyLicsIGZhbHNlLCB7IGlkOiAnZW1iZXItbWV0YWwubGlicmFyaWVzLXJlZ2lz
dGVyJyB9KTsKKyAgICAgIH0KKyAgICB9LAorCisgICAgcmVnaXN0ZXJDb3JlTGlicmFyeTogZnVu
Y3Rpb24gKG5hbWUsIHZlcnNpb24pIHsKKyAgICAgIHRoaXMucmVnaXN0ZXIobmFtZSwgdmVyc2lv
biwgdHJ1ZSk7CisgICAgfSwKKworICAgIGRlUmVnaXN0ZXI6IGZ1bmN0aW9uIChuYW1lKSB7Cisg
ICAgICB2YXIgbGliID0gdGhpcy5fZ2V0TGlicmFyeUJ5TmFtZShuYW1lKTsKKyAgICAgIHZhciBp
bmRleDsKKworICAgICAgaWYgKGxpYikgeworICAgICAgICBpbmRleCA9IHRoaXMuX3JlZ2lzdHJ5
LmluZGV4T2YobGliKTsKKyAgICAgICAgdGhpcy5fcmVnaXN0cnkuc3BsaWNlKGluZGV4LCAxKTsK
KyAgICAgIH0KKyAgICB9CisgIH07CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gTGlicmFyaWVzOwor
fSk7CitlbmlmZWQoJ2VtYmVyLW1ldGFsL2xvZ2dlcicsIFsnZXhwb3J0cycsICdlbWJlci1tZXRh
bC9jb3JlJywgJ2VtYmVyLW1ldGFsL2Vycm9yJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJN
ZXRhbENvcmUsIF9lbWJlck1ldGFsRXJyb3IpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIGZ1bmN0
aW9uIEsoKSB7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBmdW5jdGlvbiBjb25zb2xlTWV0
aG9kKG5hbWUpIHsKKyAgICB2YXIgY29uc29sZU9iaiwgbG9nVG9Db25zb2xlOworICAgIGlmIChf
ZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5pbXBvcnRzLmNvbnNvbGUpIHsKKyAgICAgIGNvbnNvbGVP
YmogPSBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5pbXBvcnRzLmNvbnNvbGU7CisgICAgfSBlbHNl
IGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgIGNvbnNvbGVPYmog
PSBjb25zb2xlOworICAgIH0KKworICAgIHZhciBtZXRob2QgPSB0eXBlb2YgY29uc29sZU9iaiA9
PT0gJ29iamVjdCcgPyBjb25zb2xlT2JqW25hbWVdIDogbnVsbDsKKworICAgIGlmIChtZXRob2Qp
IHsKKyAgICAgIC8vIE9sZGVyIElFIGRvZXNuJ3Qgc3VwcG9ydCBiaW5kLCBidXQgQ2hyb21lIG5l
ZWRzIGl0CisgICAgICBpZiAodHlwZW9mIG1ldGhvZC5iaW5kID09PSAnZnVuY3Rpb24nKSB7Cisg
ICAgICAgIGxvZ1RvQ29uc29sZSA9IG1ldGhvZC5iaW5kKGNvbnNvbGVPYmopOworICAgICAgICBs
b2dUb0NvbnNvbGUuZGlzcGxheU5hbWUgPSAnY29uc29sZS4nICsgbmFtZTsKKyAgICAgICAgcmV0
dXJuIGxvZ1RvQ29uc29sZTsKKyAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG1ldGhvZC5hcHBseSA9
PT0gJ2Z1bmN0aW9uJykgeworICAgICAgICBsb2dUb0NvbnNvbGUgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgbWV0aG9kLmFwcGx5KGNvbnNvbGVPYmosIGFyZ3VtZW50cyk7CisgICAgICAgIH07
CisgICAgICAgIGxvZ1RvQ29uc29sZS5kaXNwbGF5TmFtZSA9ICdjb25zb2xlLicgKyBuYW1lOwor
ICAgICAgICByZXR1cm4gbG9nVG9Db25zb2xlOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0
dXJuIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICB2YXIgbWVzc2FnZSA9IEFycmF5LnByb3RvdHlw
ZS5qb2luLmNhbGwoYXJndW1lbnRzLCAnLCAnKTsKKyAgICAgICAgICBtZXRob2QobWVzc2FnZSk7
CisgICAgICAgIH07CisgICAgICB9CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gYXNzZXJ0UG9s
eWZpbGwodGVzdCwgbWVzc2FnZSkgeworICAgIGlmICghdGVzdCkgeworICAgICAgdHJ5IHsKKyAg
ICAgICAgLy8gYXR0ZW1wdCB0byBwcmVzZXJ2ZSB0aGUgc3RhY2sKKyAgICAgICAgdGhyb3cgbmV3
IF9lbWJlck1ldGFsRXJyb3IuZGVmYXVsdCgnYXNzZXJ0aW9uIGZhaWxlZDogJyArIG1lc3NhZ2Up
OworICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKKyAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgdGhyb3cgZXJyb3I7CisgICAgICAgIH0sIDApOworICAgICAgfQorICAg
IH0KKyAgfQorCisgIC8qKgorICAgIEluc2lkZSBFbWJlci1NZXRhbCwgc2ltcGx5IHVzZXMgdGhl
IG1ldGhvZHMgZnJvbSBgaW1wb3J0cy5jb25zb2xlYC4KKyAgICBPdmVycmlkZSB0aGlzIHRvIHBy
b3ZpZGUgbW9yZSByb2J1c3QgbG9nZ2luZyBmdW5jdGlvbmFsaXR5LgorICAKKyAgICBAY2xhc3Mg
TG9nZ2VyCisgICAgQG5hbWVzcGFjZSBFbWJlcgorICAgIEBwdWJsaWMKKyAgKi8KKyAgZXhwb3J0
cy5kZWZhdWx0ID0geworICAgIC8qKgorICAgICBMb2dzIHRoZSBhcmd1bWVudHMgdG8gdGhlIGNv
bnNvbGUuCisgICAgIFlvdSBjYW4gcGFzcyBhcyBtYW55IGFyZ3VtZW50cyBhcyB5b3Ugd2FudCBh
bmQgdGhleSB3aWxsIGJlIGpvaW5lZCB0b2dldGhlciB3aXRoIGEgc3BhY2UuCisgICAgICAgYGBg
amF2YXNjcmlwdAorICAgICAgdmFyIGZvbyA9IDE7CisgICAgICBFbWJlci5Mb2dnZXIubG9nKCds
b2cgdmFsdWUgb2YgZm9vOicsIGZvbyk7CisgICAgICAvLyAibG9nIHZhbHVlIG9mIGZvbzogMSIg
d2lsbCBiZSBwcmludGVkIHRvIHRoZSBjb25zb2xlCisgICAgICBgYGAKKyAgICAgIEBtZXRob2Qg
bG9nCisgICAgIEBmb3IgRW1iZXIuTG9nZ2VyCisgICAgIEBwYXJhbSB7Kn0gYXJndW1lbnRzCisg
ICAgIEBwdWJsaWMKKyAgICAqLworICAgIGxvZzogY29uc29sZU1ldGhvZCgnbG9nJykgfHwgSywK
KworICAgIC8qKgorICAgICBQcmludHMgdGhlIGFyZ3VtZW50cyB0byB0aGUgY29uc29sZSB3aXRo
IGEgd2FybmluZyBpY29uLgorICAgICBZb3UgY2FuIHBhc3MgYXMgbWFueSBhcmd1bWVudHMgYXMg
eW91IHdhbnQgYW5kIHRoZXkgd2lsbCBiZSBqb2luZWQgdG9nZXRoZXIgd2l0aCBhIHNwYWNlLgor
ICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgIEVtYmVyLkxvZ2dlci53YXJuKCdTb21ldGhpbmcg
aGFwcGVuZWQhJyk7CisgICAgICAvLyAiU29tZXRoaW5nIGhhcHBlbmVkISIgd2lsbCBiZSBwcmlu
dGVkIHRvIHRoZSBjb25zb2xlIHdpdGggYSB3YXJuaW5nIGljb24uCisgICAgICBgYGAKKyAgICAg
IEBtZXRob2Qgd2FybgorICAgICBAZm9yIEVtYmVyLkxvZ2dlcgorICAgICBAcGFyYW0geyp9IGFy
Z3VtZW50cworICAgICBAcHVibGljCisgICAgKi8KKyAgICB3YXJuOiBjb25zb2xlTWV0aG9kKCd3
YXJuJykgfHwgSywKKworICAgIC8qKgorICAgICBQcmludHMgdGhlIGFyZ3VtZW50cyB0byB0aGUg
Y29uc29sZSB3aXRoIGFuIGVycm9yIGljb24sIHJlZCB0ZXh0IGFuZCBhIHN0YWNrIHRyYWNlLgor
ICAgICBZb3UgY2FuIHBhc3MgYXMgbWFueSBhcmd1bWVudHMgYXMgeW91IHdhbnQgYW5kIHRoZXkg
d2lsbCBiZSBqb2luZWQgdG9nZXRoZXIgd2l0aCBhIHNwYWNlLgorICAgICAgIGBgYGphdmFzY3Jp
cHQKKyAgICAgIEVtYmVyLkxvZ2dlci5lcnJvcignRGFuZ2VyISBEYW5nZXIhJyk7CisgICAgICAv
LyAiRGFuZ2VyISBEYW5nZXIhIiB3aWxsIGJlIHByaW50ZWQgdG8gdGhlIGNvbnNvbGUgaW4gcmVk
IHRleHQuCisgICAgICBgYGAKKyAgICAgIEBtZXRob2QgZXJyb3IKKyAgICAgQGZvciBFbWJlci5M
b2dnZXIKKyAgICAgQHBhcmFtIHsqfSBhcmd1bWVudHMKKyAgICAgQHB1YmxpYworICAgICovCisg
ICAgZXJyb3I6IGNvbnNvbGVNZXRob2QoJ2Vycm9yJykgfHwgSywKKworICAgIC8qKgorICAgICBM
b2dzIHRoZSBhcmd1bWVudHMgdG8gdGhlIGNvbnNvbGUuCisgICAgIFlvdSBjYW4gcGFzcyBhcyBt
YW55IGFyZ3VtZW50cyBhcyB5b3Ugd2FudCBhbmQgdGhleSB3aWxsIGJlIGpvaW5lZCB0b2dldGhl
ciB3aXRoIGEgc3BhY2UuCisgICAgICAgYGBgamF2YXNjcmlwdAorICAgICAgdmFyIGZvbyA9IDE7
CisgICAgICBFbWJlci5Mb2dnZXIuaW5mbygnbG9nIHZhbHVlIG9mIGZvbzonLCBmb28pOworICAg
ICAgLy8gImxvZyB2YWx1ZSBvZiBmb286IDEiIHdpbGwgYmUgcHJpbnRlZCB0byB0aGUgY29uc29s
ZQorICAgICAgYGBgCisgICAgICBAbWV0aG9kIGluZm8KKyAgICAgQGZvciBFbWJlci5Mb2dnZXIK
KyAgICAgQHBhcmFtIHsqfSBhcmd1bWVudHMKKyAgICAgQHB1YmxpYworICAgICovCisgICAgaW5m
bzogY29uc29sZU1ldGhvZCgnaW5mbycpIHx8IEssCisKKyAgICAvKioKKyAgICAgTG9ncyB0aGUg
YXJndW1lbnRzIHRvIHRoZSBjb25zb2xlIGluIGJsdWUgdGV4dC4KKyAgICAgWW91IGNhbiBwYXNz
IGFzIG1hbnkgYXJndW1lbnRzIGFzIHlvdSB3YW50IGFuZCB0aGV5IHdpbGwgYmUgam9pbmVkIHRv
Z2V0aGVyIHdpdGggYSBzcGFjZS4KKyAgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICB2YXIgZm9v
ID0gMTsKKyAgICAgIEVtYmVyLkxvZ2dlci5kZWJ1ZygnbG9nIHZhbHVlIG9mIGZvbzonLCBmb28p
OworICAgICAgLy8gImxvZyB2YWx1ZSBvZiBmb286IDEiIHdpbGwgYmUgcHJpbnRlZCB0byB0aGUg
Y29uc29sZQorICAgICAgYGBgCisgICAgICBAbWV0aG9kIGRlYnVnCisgICAgIEBmb3IgRW1iZXIu
TG9nZ2VyCisgICAgIEBwYXJhbSB7Kn0gYXJndW1lbnRzCisgICAgIEBwdWJsaWMKKyAgICAqLwor
ICAgIGRlYnVnOiBjb25zb2xlTWV0aG9kKCdkZWJ1ZycpIHx8IGNvbnNvbGVNZXRob2QoJ2luZm8n
KSB8fCBLLAorCisgICAgLyoqCisgICAgIElmIHRoZSB2YWx1ZSBwYXNzZWQgaW50byBgRW1iZXIu
TG9nZ2VyLmFzc2VydGAgaXMgbm90IHRydXRoeSBpdCB3aWxsIHRocm93IGFuIGVycm9yIHdpdGgg
YSBzdGFjayB0cmFjZS4KKyAgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICBFbWJlci5Mb2dnZXIu
YXNzZXJ0KHRydWUpOyAvLyB1bmRlZmluZWQKKyAgICAgIEVtYmVyLkxvZ2dlci5hc3NlcnQodHJ1
ZSA9PT0gZmFsc2UpOyAvLyBUaHJvd3MgYW4gQXNzZXJ0aW9uIGZhaWxlZCBlcnJvci4KKyAgICAg
IEVtYmVyLkxvZ2dlci5hc3NlcnQodHJ1ZSA9PT0gZmFsc2UsICdTb21ldGhpbmcgaW52YWxpZCcp
OyAvLyBUaHJvd3MgYW4gQXNzZXJ0aW9uIGZhaWxlZCBlcnJvciB3aXRoIG1lc3NhZ2UuCisgICAg
ICBgYGAKKyAgICAgIEBtZXRob2QgYXNzZXJ0CisgICAgIEBmb3IgRW1iZXIuTG9nZ2VyCisgICAg
IEBwYXJhbSB7Qm9vbGVhbn0gYm9vbCBWYWx1ZSB0byB0ZXN0CisgICAgIEBwYXJhbSB7U3RyaW5n
fSBtZXNzYWdlIEFzc2VydGlvbiBtZXNzYWdlIG9uIGZhaWxlZAorICAgICBAcHVibGljCisgICAg
Ki8KKyAgICBhc3NlcnQ6IGNvbnNvbGVNZXRob2QoJ2Fzc2VydCcpIHx8IGFzc2VydFBvbHlmaWxs
CisgIH07Cit9KTsKKy8vIEVtYmVyLmltcG9ydHMKK2VuaWZlZCgnZW1iZXItbWV0YWwvbWFwJywg
WydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2NvcmUnLCAnZW1iZXItbWV0YWwvdXRpbHMnLCAnZW1i
ZXItbWV0YWwvZW1wdHlfb2JqZWN0J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbENv
cmUsIF9lbWJlck1ldGFsVXRpbHMsIF9lbWJlck1ldGFsRW1wdHlfb2JqZWN0KSB7CisgIC8qKgor
ICBAbW9kdWxlIGVtYmVyCisgIEBzdWJtb2R1bGUgZW1iZXItbWV0YWwKKyAgKi8KKworICAvKgor
ICAgIEphdmFTY3JpcHQgKGJlZm9yZSBFUzYpIGRvZXMgbm90IGhhdmUgYSBNYXAgaW1wbGVtZW50
YXRpb24uIE9iamVjdHMsCisgICAgd2hpY2ggYXJlIG9mdGVuIHVzZWQgYXMgZGljdGlvbmFyaWVz
LCBtYXkgb25seSBoYXZlIFN0cmluZ3MgYXMga2V5cy4KKyAgCisgICAgQmVjYXVzZSBFbWJlciBo
YXMgYSB3YXkgdG8gZ2V0IGEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIGV2ZXJ5IG9iamVjdAorICAg
IHZpYSBgRW1iZXIuZ3VpZEZvcmAsIHdlIGNhbiBpbXBsZW1lbnQgYSBwZXJmb3JtYW50IE1hcCB3
aXRoIGFyYml0cmFyeQorICAgIGtleXMuIEJlY2F1c2UgaXQgaXMgY29tbW9ubHkgdXNlZCBpbiBs
b3ctbGV2ZWwgYm9va2tlZXBpbmcsIE1hcCBpcworICAgIGltcGxlbWVudGVkIGFzIGEgcHVyZSBK
YXZhU2NyaXB0IG9iamVjdCBmb3IgcGVyZm9ybWFuY2UuCisgIAorICAgIFRoaXMgaW1wbGVtZW50
YXRpb24gZm9sbG93cyB0aGUgY3VycmVudCBpdGVyYXRpb24gb2YgdGhlIEVTNiBwcm9wb3NhbCBm
b3IKKyAgICBtYXBzIChodHRwOi8vd2lraS5lY21hc2NyaXB0Lm9yZy9kb2t1LnBocD9pZD1oYXJt
b255OnNpbXBsZV9tYXBzX2FuZF9zZXRzKSwKKyAgICB3aXRoIG9uZSBleGNlcHRpb246ICBhcyB3
ZSBkbyBub3QgaGF2ZSB0aGUgbHV4dXJ5IG9mIGluLVZNIGl0ZXJhdGlvbiwgd2UgaW1wbGVtZW50
IGEKKyAgICBmb3JFYWNoIG1ldGhvZCBmb3IgaXRlcmF0aW9uLgorICAKKyAgICBNYXAgaXMgbW9j
a2VkIG91dCB0byBsb29rIGxpa2UgYW4gRW1iZXIgb2JqZWN0LCBzbyB5b3UgY2FuIGRvCisgICAg
YEVtYmVyLk1hcC5jcmVhdGUoKWAgZm9yIHN5bW1ldHJ5IHdpdGggb3RoZXIgRW1iZXIgY2xhc3Nl
cy4KKyAgKi8KKworICAndXNlIHN0cmljdCc7CisKKyAgZnVuY3Rpb24gbWlzc2luZ0Z1bmN0aW9u
KGZuKSB7CisgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5n
LmNhbGwoZm4pICsgJyBpcyBub3QgYSBmdW5jdGlvbicpOworICB9CisKKyAgZnVuY3Rpb24gbWlz
c2luZ05ldyhuYW1lKSB7CisgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ29uc3RydWN0b3IgJyAr
IG5hbWUgKyAnIHJlcXVpcmVzIFwnbmV3XCcnKTsKKyAgfQorCisgIGZ1bmN0aW9uIGNvcHlOdWxs
KG9iaikgeworICAgIHZhciBvdXRwdXQgPSBuZXcgX2VtYmVyTWV0YWxFbXB0eV9vYmplY3QuZGVm
YXVsdCgpOworCisgICAgZm9yICh2YXIgcHJvcCBpbiBvYmopIHsKKyAgICAgIC8vIGhhc093blBy
b3BlcnkgaXMgbm90IG5lZWRlZCBiZWNhdXNlIG9iaiBpcyBuZXcgRW1wdHlPYmplY3QoKTsKKyAg
ICAgIG91dHB1dFtwcm9wXSA9IG9ialtwcm9wXTsKKyAgICB9CisKKyAgICByZXR1cm4gb3V0cHV0
OworICB9CisKKyAgZnVuY3Rpb24gY29weU1hcChvcmlnaW5hbCwgbmV3T2JqZWN0KSB7CisgICAg
dmFyIGtleXMgPSBvcmlnaW5hbC5fa2V5cy5jb3B5KCk7CisgICAgdmFyIHZhbHVlcyA9IGNvcHlO
dWxsKG9yaWdpbmFsLl92YWx1ZXMpOworCisgICAgbmV3T2JqZWN0Ll9rZXlzID0ga2V5czsKKyAg
ICBuZXdPYmplY3QuX3ZhbHVlcyA9IHZhbHVlczsKKyAgICBuZXdPYmplY3Quc2l6ZSA9IG9yaWdp
bmFsLnNpemU7CisKKyAgICByZXR1cm4gbmV3T2JqZWN0OworICB9CisKKyAgLyoqCisgICAgVGhp
cyBjbGFzcyBpcyB1c2VkIGludGVybmFsbHkgYnkgRW1iZXIgYW5kIEVtYmVyIERhdGEuCisgICAg
UGxlYXNlIGRvIG5vdCB1c2UgaXQgYXQgdGhpcyB0aW1lLiBXZSBwbGFuIHRvIGNsZWFuIGl0IHVw
CisgICAgYW5kIGFkZCBtYW55IHRlc3RzIHNvb24uCisgIAorICAgIEBjbGFzcyBPcmRlcmVkU2V0
CisgICAgQG5hbWVzcGFjZSBFbWJlcgorICAgIEBjb25zdHJ1Y3RvcgorICAgIEBwcml2YXRlCisg
ICovCisgIGZ1bmN0aW9uIE9yZGVyZWRTZXQoKSB7CisgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBP
cmRlcmVkU2V0KSB7CisgICAgICB0aGlzLmNsZWFyKCk7CisgICAgICB0aGlzLl9zaWxlbmNlUmVt
b3ZlRGVwcmVjYXRpb24gPSBmYWxzZTsKKyAgICB9IGVsc2UgeworICAgICAgbWlzc2luZ05ldygn
T3JkZXJlZFNldCcpOworICAgIH0KKyAgfQorCisgIC8qKgorICAgIEBtZXRob2QgY3JlYXRlCisg
ICAgQHN0YXRpYworICAgIEByZXR1cm4ge0VtYmVyLk9yZGVyZWRTZXR9CisgICAgQHByaXZhdGUK
KyAgKi8KKyAgT3JkZXJlZFNldC5jcmVhdGUgPSBmdW5jdGlvbiAoKSB7CisgICAgdmFyIENvbnN0
cnVjdG9yID0gdGhpczsKKworICAgIHJldHVybiBuZXcgQ29uc3RydWN0b3IoKTsKKyAgfTsKKwor
ICBPcmRlcmVkU2V0LnByb3RvdHlwZSA9IHsKKyAgICBjb25zdHJ1Y3RvcjogT3JkZXJlZFNldCwK
KyAgICAvKioKKyAgICAgIEBtZXRob2QgY2xlYXIKKyAgICAgIEBwcml2YXRlCisgICAgKi8KKyAg
ICBjbGVhcjogZnVuY3Rpb24gKCkgeworICAgICAgdGhpcy5wcmVzZW5jZVNldCA9IG5ldyBfZW1i
ZXJNZXRhbEVtcHR5X29iamVjdC5kZWZhdWx0KCk7CisgICAgICB0aGlzLmxpc3QgPSBbXTsKKyAg
ICAgIHRoaXMuc2l6ZSA9IDA7CisgICAgfSwKKworICAgIC8qKgorICAgICAgQG1ldGhvZCBhZGQK
KyAgICAgIEBwYXJhbSBvYmoKKyAgICAgIEBwYXJhbSBndWlkIChvcHRpb25hbCwgYW5kIGZvciBp
bnRlcm5hbCB1c2UpCisgICAgICBAcmV0dXJuIHtFbWJlci5PcmRlcmVkU2V0fQorICAgICAgQHBy
aXZhdGUKKyAgICAqLworICAgIGFkZDogZnVuY3Rpb24gKG9iaiwgX2d1aWQpIHsKKyAgICAgIHZh
ciBndWlkID0gX2d1aWQgfHwgX2VtYmVyTWV0YWxVdGlscy5ndWlkRm9yKG9iaik7CisgICAgICB2
YXIgcHJlc2VuY2VTZXQgPSB0aGlzLnByZXNlbmNlU2V0OworICAgICAgdmFyIGxpc3QgPSB0aGlz
Lmxpc3Q7CisKKyAgICAgIGlmIChwcmVzZW5jZVNldFtndWlkXSAhPT0gdHJ1ZSkgeworICAgICAg
ICBwcmVzZW5jZVNldFtndWlkXSA9IHRydWU7CisgICAgICAgIHRoaXMuc2l6ZSA9IGxpc3QucHVz
aChvYmopOworICAgICAgfQorCisgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgLyoq
CisgICAgICBAc2luY2UgMS44LjAKKyAgICAgIEBtZXRob2QgZGVsZXRlCisgICAgICBAcGFyYW0g
b2JqCisgICAgICBAcGFyYW0gX2d1aWQgKG9wdGlvbmFsIGFuZCBmb3IgaW50ZXJuYWwgdXNlIG9u
bHkpCisgICAgICBAcmV0dXJuIHtCb29sZWFufQorICAgICAgQHByaXZhdGUKKyAgICAqLworICAg
IGRlbGV0ZTogZnVuY3Rpb24gKG9iaiwgX2d1aWQpIHsKKyAgICAgIHZhciBndWlkID0gX2d1aWQg
fHwgX2VtYmVyTWV0YWxVdGlscy5ndWlkRm9yKG9iaik7CisgICAgICB2YXIgcHJlc2VuY2VTZXQg
PSB0aGlzLnByZXNlbmNlU2V0OworICAgICAgdmFyIGxpc3QgPSB0aGlzLmxpc3Q7CisKKyAgICAg
IGlmIChwcmVzZW5jZVNldFtndWlkXSA9PT0gdHJ1ZSkgeworICAgICAgICBkZWxldGUgcHJlc2Vu
Y2VTZXRbZ3VpZF07CisgICAgICAgIHZhciBpbmRleCA9IGxpc3QuaW5kZXhPZihvYmopOworICAg
ICAgICBpZiAoaW5kZXggPiAtMSkgeworICAgICAgICAgIGxpc3Quc3BsaWNlKGluZGV4LCAxKTsK
KyAgICAgICAgfQorICAgICAgICB0aGlzLnNpemUgPSBsaXN0Lmxlbmd0aDsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9
CisgICAgfSwKKworICAgIC8qKgorICAgICAgQG1ldGhvZCBpc0VtcHR5CisgICAgICBAcmV0dXJu
IHtCb29sZWFufQorICAgICAgQHByaXZhdGUKKyAgICAqLworICAgIGlzRW1wdHk6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgIHJldHVybiB0aGlzLnNpemUgPT09IDA7CisgICAgfSwKKworICAgIC8qKgor
ICAgICAgQG1ldGhvZCBoYXMKKyAgICAgIEBwYXJhbSBvYmoKKyAgICAgIEByZXR1cm4ge0Jvb2xl
YW59CisgICAgICBAcHJpdmF0ZQorICAgICovCisgICAgaGFzOiBmdW5jdGlvbiAob2JqKSB7Cisg
ICAgICBpZiAodGhpcy5zaXplID09PSAwKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
IH0KKworICAgICAgdmFyIGd1aWQgPSBfZW1iZXJNZXRhbFV0aWxzLmd1aWRGb3Iob2JqKTsKKyAg
ICAgIHZhciBwcmVzZW5jZVNldCA9IHRoaXMucHJlc2VuY2VTZXQ7CisKKyAgICAgIHJldHVybiBw
cmVzZW5jZVNldFtndWlkXSA9PT0gdHJ1ZTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICBAbWV0
aG9kIGZvckVhY2gKKyAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGZuCisgICAgICBAcGFyYW0gc2Vs
ZgorICAgICAgQHByaXZhdGUKKyAgICAqLworICAgIGZvckVhY2g6IGZ1bmN0aW9uIChmbiAvKiwg
Li4udGhpc0FyZyovKSB7CisgICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7Cisg
ICAgICAgIG1pc3NpbmdGdW5jdGlvbihmbik7CisgICAgICB9CisKKyAgICAgIGlmICh0aGlzLnNp
emUgPT09IDApIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorCisgICAgICB2YXIgbGlzdCA9
IHRoaXMubGlzdDsKKyAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOworICAgICAg
dmFyIGk7CisKKyAgICAgIGlmIChsZW5ndGggPT09IDIpIHsKKyAgICAgICAgZm9yIChpID0gMDsg
aSA8IGxpc3QubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICBmbi5jYWxsKGFyZ3VtZW50c1sxXSwg
bGlzdFtpXSk7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoaSA9IDA7
IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgZm4obGlzdFtpXSk7CisgICAgICAg
IH0KKyAgICAgIH0KKyAgICB9LAorCisgICAgLyoqCisgICAgICBAbWV0aG9kIHRvQXJyYXkKKyAg
ICAgIEByZXR1cm4ge0FycmF5fQorICAgICAgQHByaXZhdGUKKyAgICAqLworICAgIHRvQXJyYXk6
IGZ1bmN0aW9uICgpIHsKKyAgICAgIHJldHVybiB0aGlzLmxpc3Quc2xpY2UoKTsKKyAgICB9LAor
CisgICAgLyoqCisgICAgICBAbWV0aG9kIGNvcHkKKyAgICAgIEByZXR1cm4ge0VtYmVyLk9yZGVy
ZWRTZXR9CisgICAgICBAcHJpdmF0ZQorICAgICovCisgICAgY29weTogZnVuY3Rpb24gKCkgewor
ICAgICAgdmFyIENvbnN0cnVjdG9yID0gdGhpcy5jb25zdHJ1Y3RvcjsKKyAgICAgIHZhciBzZXQg
PSBuZXcgQ29uc3RydWN0b3IoKTsKKworICAgICAgc2V0Ll9zaWxlbmNlUmVtb3ZlRGVwcmVjYXRp
b24gPSB0aGlzLl9zaWxlbmNlUmVtb3ZlRGVwcmVjYXRpb247CisgICAgICBzZXQucHJlc2VuY2VT
ZXQgPSBjb3B5TnVsbCh0aGlzLnByZXNlbmNlU2V0KTsKKyAgICAgIHNldC5saXN0ID0gdGhpcy50
b0FycmF5KCk7CisgICAgICBzZXQuc2l6ZSA9IHRoaXMuc2l6ZTsKKworICAgICAgcmV0dXJuIHNl
dDsKKyAgICB9CisgIH07CisKKyAgLyoqCisgICAgQSBNYXAgc3RvcmVzIHZhbHVlcyBpbmRleGVk
IGJ5IGtleXMuIFVubGlrZSBKYXZhU2NyaXB0J3MKKyAgICBkZWZhdWx0IE9iamVjdHMsIHRoZSBr
ZXlzIG9mIGEgTWFwIGNhbiBiZSBhbnkgSmF2YVNjcmlwdAorICAgIG9iamVjdC4KKyAgCisgICAg
SW50ZXJuYWxseSwgYSBNYXAgaGFzIHR3byBkYXRhIHN0cnVjdHVyZXM6CisgIAorICAgIDEuIGBr
ZXlzYDogYW4gT3JkZXJlZFNldCBvZiBhbGwgb2YgdGhlIGV4aXN0aW5nIGtleXMKKyAgICAyLiBg
dmFsdWVzYDogYSBKYXZhU2NyaXB0IE9iamVjdCBpbmRleGVkIGJ5IHRoZSBgRW1iZXIuZ3VpZEZv
cihrZXkpYAorICAKKyAgICBXaGVuIGEga2V5L3ZhbHVlIHBhaXIgaXMgYWRkZWQgZm9yIHRoZSBm
aXJzdCB0aW1lLCB3ZQorICAgIGFkZCB0aGUga2V5IHRvIHRoZSBga2V5c2AgT3JkZXJlZFNldCwg
YW5kIGNyZWF0ZSBvcgorICAgIHJlcGxhY2UgYW4gZW50cnkgaW4gYHZhbHVlc2AuIFdoZW4gYW4g
ZW50cnkgaXMgZGVsZXRlZCwKKyAgICB3ZSBkZWxldGUgaXRzIGVudHJ5IGluIGBrZXlzYCBhbmQg
YHZhbHVlc2AuCisgIAorICAgIEBjbGFzcyBNYXAKKyAgICBAbmFtZXNwYWNlIEVtYmVyCisgICAg
QHByaXZhdGUKKyAgICBAY29uc3RydWN0b3IKKyAgKi8KKyAgZnVuY3Rpb24gTWFwKCkgeworICAg
IGlmICh0aGlzIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3RvcikgeworICAgICAgdGhpcy5fa2V5
cyA9IE9yZGVyZWRTZXQuY3JlYXRlKCk7CisgICAgICB0aGlzLl9rZXlzLl9zaWxlbmNlUmVtb3Zl
RGVwcmVjYXRpb24gPSB0cnVlOworICAgICAgdGhpcy5fdmFsdWVzID0gbmV3IF9lbWJlck1ldGFs
RW1wdHlfb2JqZWN0LmRlZmF1bHQoKTsKKyAgICAgIHRoaXMuc2l6ZSA9IDA7CisgICAgfSBlbHNl
IHsKKyAgICAgIG1pc3NpbmdOZXcoJ09yZGVyZWRTZXQnKTsKKyAgICB9CisgIH0KKworICBfZW1i
ZXJNZXRhbENvcmUuZGVmYXVsdC5NYXAgPSBNYXA7CisKKyAgLyoqCisgICAgQG1ldGhvZCBjcmVh
dGUKKyAgICBAc3RhdGljCisgICAgQHByaXZhdGUKKyAgKi8KKyAgTWFwLmNyZWF0ZSA9IGZ1bmN0
aW9uICgpIHsKKyAgICB2YXIgQ29uc3RydWN0b3IgPSB0aGlzOworICAgIHJldHVybiBuZXcgQ29u
c3RydWN0b3IoKTsKKyAgfTsKKworICBNYXAucHJvdG90eXBlID0geworICAgIGNvbnN0cnVjdG9y
OiBNYXAsCisKKyAgICAvKioKKyAgICAgIFRoaXMgcHJvcGVydHkgd2lsbCBjaGFuZ2UgYXMgdGhl
IG51bWJlciBvZiBvYmplY3RzIGluIHRoZSBtYXAgY2hhbmdlcy4KKyAgICAgICBAc2luY2UgMS44
LjAKKyAgICAgIEBwcm9wZXJ0eSBzaXplCisgICAgICBAdHlwZSBudW1iZXIKKyAgICAgIEBkZWZh
dWx0IDAKKyAgICAgIEBwcml2YXRlCisgICAgKi8KKyAgICBzaXplOiAwLAorCisgICAgLyoqCisg
ICAgICBSZXRyaWV2ZSB0aGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4ga2V5LgorICAg
ICAgIEBtZXRob2QgZ2V0CisgICAgICBAcGFyYW0geyp9IGtleQorICAgICAgQHJldHVybiB7Kn0g
dGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUga2V5LCBvciBgdW5kZWZpbmVkYAorICAgICAg
QHByaXZhdGUKKyAgICAqLworICAgIGdldDogZnVuY3Rpb24gKGtleSkgeworICAgICAgaWYgKHRo
aXMuc2l6ZSA9PT0gMCkgeworICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICAgIHZhciB2
YWx1ZXMgPSB0aGlzLl92YWx1ZXM7CisgICAgICB2YXIgZ3VpZCA9IF9lbWJlck1ldGFsVXRpbHMu
Z3VpZEZvcihrZXkpOworCisgICAgICByZXR1cm4gdmFsdWVzW2d1aWRdOworICAgIH0sCisKKyAg
ICAvKioKKyAgICAgIEFkZHMgYSB2YWx1ZSB0byB0aGUgbWFwLiBJZiBhIHZhbHVlIGZvciB0aGUg
Z2l2ZW4ga2V5IGhhcyBhbHJlYWR5IGJlZW4KKyAgICAgIHByb3ZpZGVkLCB0aGUgbmV3IHZhbHVl
IHdpbGwgcmVwbGFjZSB0aGUgb2xkIHZhbHVlLgorICAgICAgIEBtZXRob2Qgc2V0CisgICAgICBA
cGFyYW0geyp9IGtleQorICAgICAgQHBhcmFtIHsqfSB2YWx1ZQorICAgICAgQHJldHVybiB7RW1i
ZXIuTWFwfQorICAgICAgQHByaXZhdGUKKyAgICAqLworICAgIHNldDogZnVuY3Rpb24gKGtleSwg
dmFsdWUpIHsKKyAgICAgIHZhciBrZXlzID0gdGhpcy5fa2V5czsKKyAgICAgIHZhciB2YWx1ZXMg
PSB0aGlzLl92YWx1ZXM7CisgICAgICB2YXIgZ3VpZCA9IF9lbWJlck1ldGFsVXRpbHMuZ3VpZEZv
cihrZXkpOworCisgICAgICAvLyBlbnN1cmUgd2UgZG9uJ3Qgc3RvcmUgLTAKKyAgICAgIHZhciBr
ID0ga2V5ID09PSAtMCA/IDAgOiBrZXk7CisKKyAgICAgIGtleXMuYWRkKGssIGd1aWQpOworCisg
ICAgICB2YWx1ZXNbZ3VpZF0gPSB2YWx1ZTsKKworICAgICAgdGhpcy5zaXplID0ga2V5cy5zaXpl
OworCisgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgLyoqCisgICAgICBSZW1vdmVz
IGEgdmFsdWUgZnJvbSB0aGUgbWFwIGZvciBhbiBhc3NvY2lhdGVkIGtleS4KKyAgICAgICBAc2lu
Y2UgMS44LjAKKyAgICAgIEBtZXRob2QgZGVsZXRlCisgICAgICBAcGFyYW0geyp9IGtleQorICAg
ICAgQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSBpZiBhbiBpdGVtIHdhcyByZW1vdmVkLCBmYWxzZSBv
dGhlcndpc2UKKyAgICAgIEBwcml2YXRlCisgICAgKi8KKyAgICBkZWxldGU6IGZ1bmN0aW9uIChr
ZXkpIHsKKyAgICAgIGlmICh0aGlzLnNpemUgPT09IDApIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgfQorICAgICAgLy8gZG9uJ3QgdXNlIEVTNiAiZGVsZXRlIiBiZWNhdXNlIGl0IHdp
bGwgYmUgYW5ub3lpbmcKKyAgICAgIC8vIHRvIHVzZSBpbiBicm93c2VycyB0aGF0IGFyZSBub3Qg
RVM2IGZyaWVuZGx5OworICAgICAgdmFyIGtleXMgPSB0aGlzLl9rZXlzOworICAgICAgdmFyIHZh
bHVlcyA9IHRoaXMuX3ZhbHVlczsKKyAgICAgIHZhciBndWlkID0gX2VtYmVyTWV0YWxVdGlscy5n
dWlkRm9yKGtleSk7CisKKyAgICAgIGlmIChrZXlzLmRlbGV0ZShrZXksIGd1aWQpKSB7CisgICAg
ICAgIGRlbGV0ZSB2YWx1ZXNbZ3VpZF07CisgICAgICAgIHRoaXMuc2l6ZSA9IGtleXMuc2l6ZTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICB9CisgICAgfSwKKworICAgIC8qKgorICAgICAgQ2hlY2sgd2hldGhlciBhIGtl
eSBpcyBwcmVzZW50LgorICAgICAgIEBtZXRob2QgaGFzCisgICAgICBAcGFyYW0geyp9IGtleQor
ICAgICAgQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgaXRlbSB3YXMgcHJlc2VudCwgZmFs
c2Ugb3RoZXJ3aXNlCisgICAgICBAcHJpdmF0ZQorICAgICovCisgICAgaGFzOiBmdW5jdGlvbiAo
a2V5KSB7CisgICAgICByZXR1cm4gdGhpcy5fa2V5cy5oYXMoa2V5KTsKKyAgICB9LAorCisgICAg
LyoqCisgICAgICBJdGVyYXRlIG92ZXIgYWxsIHRoZSBrZXlzIGFuZCB2YWx1ZXMuIENhbGxzIHRo
ZSBmdW5jdGlvbiBvbmNlCisgICAgICBmb3IgZWFjaCBrZXksIHBhc3NpbmcgaW4gdmFsdWUsIGtl
eSwgYW5kIHRoZSBtYXAgYmVpbmcgaXRlcmF0ZWQgb3ZlciwKKyAgICAgIGluIHRoYXQgb3JkZXIu
CisgICAgICAgVGhlIGtleXMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgaXRlcmF0ZWQgb3ZlciBpbiBp
bnNlcnRpb24gb3JkZXIuCisgICAgICAgQG1ldGhvZCBmb3JFYWNoCisgICAgICBAcGFyYW0ge0Z1
bmN0aW9ufSBjYWxsYmFjaworICAgICAgQHBhcmFtIHsqfSBzZWxmIGlmIHBhc3NlZCwgdGhlIGB0
aGlzYCB2YWx1ZSBpbnNpZGUgdGhlCisgICAgICAgIGNhbGxiYWNrLiBCeSBkZWZhdWx0LCBgdGhp
c2AgaXMgdGhlIG1hcC4KKyAgICAgIEBwcml2YXRlCisgICAgKi8KKyAgICBmb3JFYWNoOiBmdW5j
dGlvbiAoY2FsbGJhY2sgLyosIC4uLnRoaXNBcmcqLykgeworICAgICAgaWYgKHR5cGVvZiBjYWxs
YmFjayAhPT0gJ2Z1bmN0aW9uJykgeworICAgICAgICBtaXNzaW5nRnVuY3Rpb24oY2FsbGJhY2sp
OworICAgICAgfQorCisgICAgICBpZiAodGhpcy5zaXplID09PSAwKSB7CisgICAgICAgIHJldHVy
bjsKKyAgICAgIH0KKworICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7CisgICAg
ICB2YXIgbWFwID0gdGhpczsKKyAgICAgIHZhciBjYiwgdGhpc0FyZzsKKworICAgICAgaWYgKGxl
bmd0aCA9PT0gMikgeworICAgICAgICB0aGlzQXJnID0gYXJndW1lbnRzWzFdOworICAgICAgICBj
YiA9IGZ1bmN0aW9uIChrZXkpIHsKKyAgICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIG1h
cC5nZXQoa2V5KSwga2V5LCBtYXApOworICAgICAgICB9OworICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgY2IgPSBmdW5jdGlvbiAoa2V5KSB7CisgICAgICAgICAgY2FsbGJhY2sobWFwLmdldChrZXkp
LCBrZXksIG1hcCk7CisgICAgICAgIH07CisgICAgICB9CisKKyAgICAgIHRoaXMuX2tleXMuZm9y
RWFjaChjYik7CisgICAgfSwKKworICAgIC8qKgorICAgICAgQG1ldGhvZCBjbGVhcgorICAgICAg
QHByaXZhdGUKKyAgICAqLworICAgIGNsZWFyOiBmdW5jdGlvbiAoKSB7CisgICAgICB0aGlzLl9r
ZXlzLmNsZWFyKCk7CisgICAgICB0aGlzLl92YWx1ZXMgPSBuZXcgX2VtYmVyTWV0YWxFbXB0eV9v
YmplY3QuZGVmYXVsdCgpOworICAgICAgdGhpcy5zaXplID0gMDsKKyAgICB9LAorCisgICAgLyoq
CisgICAgICBAbWV0aG9kIGNvcHkKKyAgICAgIEByZXR1cm4ge0VtYmVyLk1hcH0KKyAgICAgIEBw
cml2YXRlCisgICAgKi8KKyAgICBjb3B5OiBmdW5jdGlvbiAoKSB7CisgICAgICByZXR1cm4gY29w
eU1hcCh0aGlzLCBuZXcgTWFwKCkpOworICAgIH0KKyAgfTsKKworICAvKioKKyAgICBAY2xhc3Mg
TWFwV2l0aERlZmF1bHQKKyAgICBAbmFtZXNwYWNlIEVtYmVyCisgICAgQGV4dGVuZHMgRW1iZXIu
TWFwCisgICAgQHByaXZhdGUKKyAgICBAY29uc3RydWN0b3IKKyAgICBAcGFyYW0gW29wdGlvbnNd
CisgICAgICBAcGFyYW0geyp9IFtvcHRpb25zLmRlZmF1bHRWYWx1ZV0KKyAgKi8KKyAgZnVuY3Rp
b24gTWFwV2l0aERlZmF1bHQob3B0aW9ucykgeworICAgIHRoaXMuX3N1cGVyJGNvbnN0cnVjdG9y
KCk7CisgICAgdGhpcy5kZWZhdWx0VmFsdWUgPSBvcHRpb25zLmRlZmF1bHRWYWx1ZTsKKyAgfQor
CisgIC8qKgorICAgIEBtZXRob2QgY3JlYXRlCisgICAgQHN0YXRpYworICAgIEBwYXJhbSBbb3B0
aW9uc10KKyAgICAgIEBwYXJhbSB7Kn0gW29wdGlvbnMuZGVmYXVsdFZhbHVlXQorICAgIEByZXR1
cm4ge0VtYmVyLk1hcFdpdGhEZWZhdWx0fEVtYmVyLk1hcH0gSWYgb3B0aW9ucyBhcmUgcGFzc2Vk
LCByZXR1cm5zCisgICAgICBgRW1iZXIuTWFwV2l0aERlZmF1bHRgIG90aGVyd2lzZSByZXR1cm5z
IGBFbWJlci5NYXBgCisgICAgQHByaXZhdGUKKyAgKi8KKyAgTWFwV2l0aERlZmF1bHQuY3JlYXRl
ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKKyAgICBpZiAob3B0aW9ucykgeworICAgICAgcmV0dXJu
IG5ldyBNYXBXaXRoRGVmYXVsdChvcHRpb25zKTsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJu
IG5ldyBNYXAoKTsKKyAgICB9CisgIH07CisKKyAgTWFwV2l0aERlZmF1bHQucHJvdG90eXBlID0g
T2JqZWN0LmNyZWF0ZShNYXAucHJvdG90eXBlKTsKKyAgTWFwV2l0aERlZmF1bHQucHJvdG90eXBl
LmNvbnN0cnVjdG9yID0gTWFwV2l0aERlZmF1bHQ7CisgIE1hcFdpdGhEZWZhdWx0LnByb3RvdHlw
ZS5fc3VwZXIkY29uc3RydWN0b3IgPSBNYXA7CisgIE1hcFdpdGhEZWZhdWx0LnByb3RvdHlwZS5f
c3VwZXIkZ2V0ID0gTWFwLnByb3RvdHlwZS5nZXQ7CisKKyAgLyoqCisgICAgUmV0cmlldmUgdGhl
IHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIGtleS4KKyAgCisgICAgQG1ldGhvZCBnZXQK
KyAgICBAcGFyYW0geyp9IGtleQorICAgIEByZXR1cm4geyp9IHRoZSB2YWx1ZSBhc3NvY2lhdGVk
IHdpdGggdGhlIGtleSwgb3IgdGhlIGRlZmF1bHQgdmFsdWUKKyAgICBAcHJpdmF0ZQorICAqLwor
ICBNYXBXaXRoRGVmYXVsdC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGtleSkgeworICAgIHZh
ciBoYXNWYWx1ZSA9IHRoaXMuaGFzKGtleSk7CisKKyAgICBpZiAoaGFzVmFsdWUpIHsKKyAgICAg
IHJldHVybiB0aGlzLl9zdXBlciRnZXQoa2V5KTsKKyAgICB9IGVsc2UgeworICAgICAgdmFyIGRl
ZmF1bHRWYWx1ZSA9IHRoaXMuZGVmYXVsdFZhbHVlKGtleSk7CisgICAgICB0aGlzLnNldChrZXks
IGRlZmF1bHRWYWx1ZSk7CisgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOworICAgIH0KKyAgfTsK
KworICAvKioKKyAgICBAbWV0aG9kIGNvcHkKKyAgICBAcmV0dXJuIHtFbWJlci5NYXBXaXRoRGVm
YXVsdH0KKyAgICBAcHJpdmF0ZQorICAqLworICBNYXBXaXRoRGVmYXVsdC5wcm90b3R5cGUuY29w
eSA9IGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgQ29uc3RydWN0b3IgPSB0aGlzLmNvbnN0cnVjdG9y
OworICAgIHJldHVybiBjb3B5TWFwKHRoaXMsIG5ldyBDb25zdHJ1Y3Rvcih7CisgICAgICBkZWZh
dWx0VmFsdWU6IHRoaXMuZGVmYXVsdFZhbHVlCisgICAgfSkpOworICB9OworCisgIGV4cG9ydHMu
ZGVmYXVsdCA9IE1hcDsKKyAgZXhwb3J0cy5PcmRlcmVkU2V0ID0gT3JkZXJlZFNldDsKKyAgZXhw
b3J0cy5NYXAgPSBNYXA7CisgIGV4cG9ydHMuTWFwV2l0aERlZmF1bHQgPSBNYXBXaXRoRGVmYXVs
dDsKK30pOworZW5pZmVkKCdlbWJlci1tZXRhbC9tZXJnZScsIFsnZXhwb3J0cyddLCBmdW5jdGlv
biAoZXhwb3J0cykgeworICAvKioKKyAgICBNZXJnZSB0aGUgY29udGVudHMgb2YgdHdvIG9iamVj
dHMgdG9nZXRoZXIgaW50byB0aGUgZmlyc3Qgb2JqZWN0LgorICAKKyAgICBgYGBqYXZhc2NyaXB0
CisgICAgRW1iZXIubWVyZ2Uoe2ZpcnN0OiAnVG9tJ30sIHtsYXN0OiAnRGFsZSd9KTsgLy8ge2Zp
cnN0OiAnVG9tJywgbGFzdDogJ0RhbGUnfQorICAgIHZhciBhID0ge2ZpcnN0OiAnWWVodWRhJ307
CisgICAgdmFyIGIgPSB7bGFzdDogJ0thdHonfTsKKyAgICBFbWJlci5tZXJnZShhLCBiKTsgLy8g
YSA9PSB7Zmlyc3Q6ICdZZWh1ZGEnLCBsYXN0OiAnS2F0eid9LCBiID09IHtsYXN0OiAnS2F0eid9
CisgICAgYGBgCisgIAorICAgIEBtZXRob2QgbWVyZ2UKKyAgICBAZm9yIEVtYmVyCisgICAgQHBh
cmFtIHtPYmplY3R9IG9yaWdpbmFsIFRoZSBvYmplY3QgdG8gbWVyZ2UgaW50bworICAgIEBwYXJh
bSB7T2JqZWN0fSB1cGRhdGVzIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb20KKyAg
ICBAcmV0dXJuIHtPYmplY3R9CisgICAgQHB1YmxpYworICAqLworICAndXNlIHN0cmljdCc7CisK
KyAgZXhwb3J0cy5kZWZhdWx0ID0gbWVyZ2U7CisKKyAgZnVuY3Rpb24gbWVyZ2Uob3JpZ2luYWws
IHVwZGF0ZXMpIHsKKyAgICBpZiAoIXVwZGF0ZXMgfHwgdHlwZW9mIHVwZGF0ZXMgIT09ICdvYmpl
Y3QnKSB7CisgICAgICByZXR1cm4gb3JpZ2luYWw7CisgICAgfQorCisgICAgdmFyIHByb3BzID0g
T2JqZWN0LmtleXModXBkYXRlcyk7CisgICAgdmFyIHByb3A7CisgICAgdmFyIGxlbmd0aCA9IHBy
b3BzLmxlbmd0aDsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAg
ICAgIHByb3AgPSBwcm9wc1tpXTsKKyAgICAgIG9yaWdpbmFsW3Byb3BdID0gdXBkYXRlc1twcm9w
XTsKKyAgICB9CisKKyAgICByZXR1cm4gb3JpZ2luYWw7CisgIH0KK30pOworZW5pZmVkKCdlbWJl
ci1tZXRhbC9tZXRhJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL21ldGFfbGlzdGVuZXJzJywg
J2VtYmVyLW1ldGFsL2VtcHR5X29iamVjdCddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0
YWxNZXRhX2xpc3RlbmVycywgX2VtYmVyTWV0YWxFbXB0eV9vYmplY3QpIHsKKyAgJ25vIHVzZSBz
dHJpY3QnOworICAvLyBSZW1vdmUgInVzZSBzdHJpY3QiOyBmcm9tIHRyYW5zcGlsZWQgbW9kdWxl
IHVudGlsCisgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzgw
MzggaXMgZml4ZWQKKworICBleHBvcnRzLm1ldGEgPSBtZXRhOworICBleHBvcnRzLnBlZWtNZXRh
ID0gcGVla01ldGE7CisgIGV4cG9ydHMuZGVsZXRlTWV0YSA9IGRlbGV0ZU1ldGE7CisKKyAgLyoq
CisgIEBtb2R1bGUgZW1iZXItbWV0YWwKKyAgKi8KKworICAvKgorICAgVGhpcyBkZWNsYXJlcyBz
ZXZlcmFsIG1ldGEtcHJvZ3JhbW1lZCBtZW1iZXJzIG9uIHRoZSBNZXRhIGNsYXNzLiBTdWNoCisg
ICBtZXRhIQorICAKKyAgIEluIGdlbmVyYWwsIHRoZSBgcmVhZGFibGVgIHZhcmlhbnRzIHdpbGwg
Z2l2ZSB5b3UgYW4gb2JqZWN0IChpZiBpdAorICAgYWxyZWFkeSBleGlzdHMpIHRoYXQgeW91IGNh
biByZWFkIGJ1dCBzaG91bGQgbm90IG1vZGlmeS4gVGhlCisgICBgd3JpdGFibGVgIHZhcmlhbnRz
IHdpbGwgZ2l2ZSB5b3UgYSBtdXRhYmxlIG9iamVjdCwgYW5kIHRoZXkgd2lsbAorICAgY3JlYXRl
IGl0IGlmIGl0IGRpZG4ndCBhbHJlYWR5IGV4aXN0LgorICAKKyAgIFRoZSBmb2xsb3dpbmcgbWV0
aG9kcyB3aWxsIGdldCBnZW5lcmF0ZWQgbWV0YXByb2dyYW1tYXRpY2FsbHksIGFuZAorICAgSSdt
IGluY2x1ZGluZyB0aGVtIGhlcmUgZm9yIGdyZXBwYWJpbGl0eToKKyAgCisgICB3cml0YWJsZUNh
Y2hlLCByZWFkYWJsZUNhY2hlLCB3cml0ZVdhdGNoaW5nLAorICAgcGVla1dhdGNoaW5nLCBjbGVh
cldhdGNoaW5nLCB3cml0ZU1peGlucywKKyAgIHBlZWtNaXhpbnMsIGNsZWFyTWl4aW5zLCB3cml0
ZUJpbmRpbmdzLAorICAgcGVla0JpbmRpbmdzLCBjbGVhckJpbmRpbmdzLCB3cml0ZVZhbHVlcywK
KyAgIHBlZWtWYWx1ZXMsIGNsZWFyVmFsdWVzLCB3cml0ZURlcHMsIGZvckVhY2hJbkRlcHMKKyAg
IHdyaXRhYmxlQ2hhaW5XYXRjaGVycywgcmVhZGFibGVDaGFpbldhdGNoZXJzLCB3cml0YWJsZUNo
YWlucywKKyAgIHJlYWRhYmxlQ2hhaW5zLCB3cml0YWJsZVRhZywgcmVhZGFibGVUYWcKKyAgCisg
ICovCisgIHZhciBtZW1iZXJzID0geworICAgIGNhY2hlOiBvd25NYXAsCisgICAgd2Vhazogb3du
TWFwLAorICAgIHdhdGNoaW5nOiBpbmhlcml0ZWRNYXAsCisgICAgbWl4aW5zOiBpbmhlcml0ZWRN
YXAsCisgICAgYmluZGluZ3M6IGluaGVyaXRlZE1hcCwKKyAgICB2YWx1ZXM6IGluaGVyaXRlZE1h
cCwKKyAgICBkZXBzOiBpbmhlcml0ZWRNYXBPZk1hcHMsCisgICAgY2hhaW5XYXRjaGVyczogb3du
Q3VzdG9tT2JqZWN0LAorICAgIGNoYWluczogaW5oZXJpdGVkQ3VzdG9tT2JqZWN0LAorICAgIHRh
Zzogb3duQ3VzdG9tT2JqZWN0CisgIH07CisKKyAgdmFyIG1lbWJlck5hbWVzID0gT2JqZWN0Lmtl
eXMobWVtYmVycyk7CisgIHZhciBNRVRBX0ZJRUxEID0gJ19fZW1iZXJfbWV0YV9fJzsKKworICBm
dW5jdGlvbiBNZXRhKG9iaiwgcGFyZW50TWV0YSkgeworICAgIHRoaXMuX2NhY2hlID0gdW5kZWZp
bmVkOworICAgIHRoaXMuX3dlYWsgPSB1bmRlZmluZWQ7CisgICAgdGhpcy5fd2F0Y2hpbmcgPSB1
bmRlZmluZWQ7CisgICAgdGhpcy5fbWl4aW5zID0gdW5kZWZpbmVkOworICAgIHRoaXMuX2JpbmRp
bmdzID0gdW5kZWZpbmVkOworICAgIHRoaXMuX3ZhbHVlcyA9IHVuZGVmaW5lZDsKKyAgICB0aGlz
Ll9kZXBzID0gdW5kZWZpbmVkOworICAgIHRoaXMuX2NoYWluV2F0Y2hlcnMgPSB1bmRlZmluZWQ7
CisgICAgdGhpcy5fY2hhaW5zID0gdW5kZWZpbmVkOworICAgIHRoaXMuX3RhZyA9IHVuZGVmaW5l
ZDsKKworICAgIC8vIHVzZWQgb25seSBpbnRlcm5hbGx5CisgICAgdGhpcy5zb3VyY2UgPSBvYmo7
CisKKyAgICAvLyB3aGVuIG1ldGEob2JqKS5wcm90byA9PT0gb2JqLCB0aGUgb2JqZWN0IGlzIGlu
dGVuZGVkIHRvIGJlIG9ubHkgYQorICAgIC8vIHByb3RvdHlwZSBhbmQgZG9lc24ndCBuZWVkIHRv
IGFjdHVhbGx5IGJlIG9ic2VydmFibGUgaXRzZWxmCisgICAgdGhpcy5wcm90byA9IHVuZGVmaW5l
ZDsKKworICAgIC8vIFRoZSBuZXh0IG1ldGEgaW4gb3VyIGluaGVyaXRhbmNlIGNoYWluLiBXZSAo
d2lsbCkgdHJhY2sgdGhpcworICAgIC8vIGV4cGxpY2l0bHkgaW5zdGVhZCBvZiB1c2luZyBwcm90
b3R5cGljYWwgaW5oZXJpdGFuY2UgYmVjYXVzZSB3ZQorICAgIC8vIGhhdmUgZGV0YWlsZWQga25v
d2xlZGdlIG9mIGhvdyBlYWNoIHByb3BlcnR5IHNob3VsZCByZWFsbHkgYmUKKyAgICAvLyBpbmhl
cml0ZWQsIGFuZCB3ZSBjYW4gb3B0aW1pemUgaXQgbXVjaCBiZXR0ZXIgdGhhbiBKUyBydW50aW1l
cy4KKyAgICB0aGlzLnBhcmVudCA9IHBhcmVudE1ldGE7CisKKyAgICB0aGlzLl9pbml0aWFsaXpl
TGlzdGVuZXJzKCk7CisgIH0KKworICBmb3IgKHZhciBfbmFtZSBpbiBfZW1iZXJNZXRhbE1ldGFf
bGlzdGVuZXJzLnByb3RvTWV0aG9kcykgeworICAgIE1ldGEucHJvdG90eXBlW19uYW1lXSA9IF9l
bWJlck1ldGFsTWV0YV9saXN0ZW5lcnMucHJvdG9NZXRob2RzW19uYW1lXTsKKyAgfQorICBtZW1i
ZXJOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7CisgICAgcmV0dXJuIG1lbWJlcnNbbmFt
ZV0obmFtZSwgTWV0YSk7CisgIH0pOworCisgIC8vIEltcGxlbWVudHMgYSBtZW1iZXIgdGhhdCBp
cyBhIGxhemlseSBjcmVhdGVkLCBub24taW5oZXJpdGFibGUKKyAgLy8gUE9KTy4KKyAgZnVuY3Rp
b24gb3duTWFwKG5hbWUsIE1ldGEpIHsKKyAgICB2YXIga2V5ID0gbWVtYmVyUHJvcGVydHkobmFt
ZSk7CisgICAgdmFyIGNhcGl0YWxpemVkID0gY2FwaXRhbGl6ZShuYW1lKTsKKyAgICBNZXRhLnBy
b3RvdHlwZVsnd3JpdGFibGUnICsgY2FwaXRhbGl6ZWRdID0gZnVuY3Rpb24gKCkgeworICAgICAg
cmV0dXJuIHRoaXMuX2dldE9yQ3JlYXRlT3duTWFwKGtleSk7CisgICAgfTsKKyAgICBNZXRhLnBy
b3RvdHlwZVsncmVhZGFibGUnICsgY2FwaXRhbGl6ZWRdID0gZnVuY3Rpb24gKCkgeworICAgICAg
cmV0dXJuIHRoaXNba2V5XTsKKyAgICB9OworICB9CisKKyAgTWV0YS5wcm90b3R5cGUuX2dldE9y
Q3JlYXRlT3duTWFwID0gZnVuY3Rpb24gKGtleSkgeworICAgIHZhciByZXQgPSB0aGlzW2tleV07
CisgICAgaWYgKCFyZXQpIHsKKyAgICAgIHJldCA9IHRoaXNba2V5XSA9IG5ldyBfZW1iZXJNZXRh
bEVtcHR5X29iamVjdC5kZWZhdWx0KCk7CisgICAgfQorICAgIHJldHVybiByZXQ7CisgIH07CisK
KyAgLy8gSW1wbGVtZW50cyBhIG1lbWJlciB0aGF0IGlzIGEgbGF6aWx5IGNyZWF0ZWQgUE9KTyB3
aXRoIGluaGVyaXRhYmxlCisgIC8vIHZhbHVlcy4KKyAgZnVuY3Rpb24gaW5oZXJpdGVkTWFwKG5h
bWUsIE1ldGEpIHsKKyAgICB2YXIga2V5ID0gbWVtYmVyUHJvcGVydHkobmFtZSk7CisgICAgdmFy
IGNhcGl0YWxpemVkID0gY2FwaXRhbGl6ZShuYW1lKTsKKworICAgIE1ldGEucHJvdG90eXBlWyd3
cml0ZScgKyBjYXBpdGFsaXplZF0gPSBmdW5jdGlvbiAoc3Via2V5LCB2YWx1ZSkgeworICAgICAg
dmFyIG1hcCA9IHRoaXMuX2dldE9yQ3JlYXRlT3duTWFwKGtleSk7CisgICAgICBtYXBbc3Via2V5
XSA9IHZhbHVlOworICAgIH07CisKKyAgICBNZXRhLnByb3RvdHlwZVsncGVlaycgKyBjYXBpdGFs
aXplZF0gPSBmdW5jdGlvbiAoc3Via2V5KSB7CisgICAgICByZXR1cm4gdGhpcy5fZmluZEluaGVy
aXRlZChrZXksIHN1YmtleSk7CisgICAgfTsKKworICAgIE1ldGEucHJvdG90eXBlWydmb3JFYWNo
JyArIGNhcGl0YWxpemVkXSA9IGZ1bmN0aW9uIChmbikgeworICAgICAgdmFyIHBvaW50ZXIgPSB0
aGlzOworICAgICAgdmFyIHNlZW4gPSBuZXcgX2VtYmVyTWV0YWxFbXB0eV9vYmplY3QuZGVmYXVs
dCgpOworICAgICAgd2hpbGUgKHBvaW50ZXIgIT09IHVuZGVmaW5lZCkgeworICAgICAgICB2YXIg
bWFwID0gcG9pbnRlcltrZXldOworICAgICAgICBpZiAobWFwKSB7CisgICAgICAgICAgZm9yICh2
YXIgX2tleSBpbiBtYXApIHsKKyAgICAgICAgICAgIGlmICghc2Vlbltfa2V5XSkgeworICAgICAg
ICAgICAgICBzZWVuW19rZXldID0gdHJ1ZTsKKyAgICAgICAgICAgICAgZm4oX2tleSwgbWFwW19r
ZXldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcG9p
bnRlciA9IHBvaW50ZXIucGFyZW50OworICAgICAgfQorICAgIH07CisKKyAgICBNZXRhLnByb3Rv
dHlwZVsnY2xlYXInICsgY2FwaXRhbGl6ZWRdID0gZnVuY3Rpb24gKCkgeworICAgICAgdGhpc1tr
ZXldID0gdW5kZWZpbmVkOworICAgIH07CisKKyAgICBNZXRhLnByb3RvdHlwZVsnZGVsZXRlRnJv
bScgKyBjYXBpdGFsaXplZF0gPSBmdW5jdGlvbiAoc3Via2V5KSB7CisgICAgICBkZWxldGUgdGhp
cy5fZ2V0T3JDcmVhdGVPd25NYXAoa2V5KVtzdWJrZXldOworICAgIH07CisKKyAgICBNZXRhLnBy
b3RvdHlwZVsnaGFzSW4nICsgY2FwaXRhbGl6ZWRdID0gZnVuY3Rpb24gKHN1YmtleSkgeworICAg
ICAgcmV0dXJuIHRoaXMuX2ZpbmRJbmhlcml0ZWQoa2V5LCBzdWJrZXkpICE9PSB1bmRlZmluZWQ7
CisgICAgfTsKKyAgfQorCisgIE1ldGEucHJvdG90eXBlLl9nZXRJbmhlcml0ZWQgPSBmdW5jdGlv
biAoa2V5KSB7CisgICAgdmFyIHBvaW50ZXIgPSB0aGlzOworICAgIHdoaWxlIChwb2ludGVyICE9
PSB1bmRlZmluZWQpIHsKKyAgICAgIGlmIChwb2ludGVyW2tleV0pIHsKKyAgICAgICAgcmV0dXJu
IHBvaW50ZXJba2V5XTsKKyAgICAgIH0KKyAgICAgIHBvaW50ZXIgPSBwb2ludGVyLnBhcmVudDsK
KyAgICB9CisgIH07CisKKyAgTWV0YS5wcm90b3R5cGUuX2ZpbmRJbmhlcml0ZWQgPSBmdW5jdGlv
biAoa2V5LCBzdWJrZXkpIHsKKyAgICB2YXIgcG9pbnRlciA9IHRoaXM7CisgICAgd2hpbGUgKHBv
aW50ZXIgIT09IHVuZGVmaW5lZCkgeworICAgICAgdmFyIG1hcCA9IHBvaW50ZXJba2V5XTsKKyAg
ICAgIGlmIChtYXApIHsKKyAgICAgICAgdmFyIHZhbHVlID0gbWFwW3N1YmtleV07CisgICAgICAg
IGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgcmV0dXJuIHZhbHVlOworICAg
ICAgICB9CisgICAgICB9CisgICAgICBwb2ludGVyID0gcG9pbnRlci5wYXJlbnQ7CisgICAgfQor
ICB9OworCisgIC8vIEltcGxlbWVudHMgYSBtZW1iZXIgdGhhdCBwcm92aWRlcyBhIGxhemlseSBj
cmVhdGVkIG1hcCBvZiBtYXBzLAorICAvLyB3aXRoIGluaGVyaXRhbmNlIGF0IGJvdGggbGV2ZWxz
LgorICBmdW5jdGlvbiBpbmhlcml0ZWRNYXBPZk1hcHMobmFtZSwgTWV0YSkgeworICAgIHZhciBr
ZXkgPSBtZW1iZXJQcm9wZXJ0eShuYW1lKTsKKyAgICB2YXIgY2FwaXRhbGl6ZWQgPSBjYXBpdGFs
aXplKG5hbWUpOworCisgICAgTWV0YS5wcm90b3R5cGVbJ3dyaXRlJyArIGNhcGl0YWxpemVkXSA9
IGZ1bmN0aW9uIChzdWJrZXksIGl0ZW1rZXksIHZhbHVlKSB7CisgICAgICB2YXIgb3V0ZXJNYXAg
PSB0aGlzLl9nZXRPckNyZWF0ZU93bk1hcChrZXkpOworICAgICAgdmFyIGlubmVyTWFwID0gb3V0
ZXJNYXBbc3Via2V5XTsKKyAgICAgIGlmICghaW5uZXJNYXApIHsKKyAgICAgICAgaW5uZXJNYXAg
PSBvdXRlck1hcFtzdWJrZXldID0gbmV3IF9lbWJlck1ldGFsRW1wdHlfb2JqZWN0LmRlZmF1bHQo
KTsKKyAgICAgIH0KKyAgICAgIGlubmVyTWFwW2l0ZW1rZXldID0gdmFsdWU7CisgICAgfTsKKwor
ICAgIE1ldGEucHJvdG90eXBlWydwZWVrJyArIGNhcGl0YWxpemVkXSA9IGZ1bmN0aW9uIChzdWJr
ZXksIGl0ZW1rZXkpIHsKKyAgICAgIHZhciBwb2ludGVyID0gdGhpczsKKyAgICAgIHdoaWxlIChw
b2ludGVyICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgdmFyIG1hcCA9IHBvaW50ZXJba2V5XTsK
KyAgICAgICAgaWYgKG1hcCkgeworICAgICAgICAgIHZhciB2YWx1ZSA9IG1hcFtzdWJrZXldOwor
ICAgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlW2l0ZW1rZXldICE9
PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlW2l0ZW1rZXldOworICAg
ICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwb2ludGVyID0gcG9p
bnRlci5wYXJlbnQ7CisgICAgICB9CisgICAgfTsKKworICAgIE1ldGEucHJvdG90eXBlWydoYXMn
ICsgY2FwaXRhbGl6ZWRdID0gZnVuY3Rpb24gKHN1YmtleSkgeworICAgICAgdmFyIHBvaW50ZXIg
PSB0aGlzOworICAgICAgd2hpbGUgKHBvaW50ZXIgIT09IHVuZGVmaW5lZCkgeworICAgICAgICBp
ZiAocG9pbnRlcltrZXldICYmIHBvaW50ZXJba2V5XVtzdWJrZXldKSB7CisgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcG9pbnRlciA9IHBvaW50ZXIucGFyZW50Owor
ICAgICAgfQorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisKKyAgICBNZXRhLnByb3RvdHlw
ZVsnZm9yRWFjaEluJyArIGNhcGl0YWxpemVkXSA9IGZ1bmN0aW9uIChzdWJrZXksIGZuKSB7Cisg
ICAgICByZXR1cm4gdGhpcy5fZm9yRWFjaEluKGtleSwgc3Via2V5LCBmbik7CisgICAgfTsKKyAg
fQorCisgIE1ldGEucHJvdG90eXBlLl9mb3JFYWNoSW4gPSBmdW5jdGlvbiAoa2V5LCBzdWJrZXks
IGZuKSB7CisgICAgdmFyIHBvaW50ZXIgPSB0aGlzOworICAgIHZhciBzZWVuID0gbmV3IF9lbWJl
ck1ldGFsRW1wdHlfb2JqZWN0LmRlZmF1bHQoKTsKKyAgICB2YXIgY2FsbHMgPSBbXTsKKyAgICB3
aGlsZSAocG9pbnRlciAhPT0gdW5kZWZpbmVkKSB7CisgICAgICB2YXIgbWFwID0gcG9pbnRlcltr
ZXldOworICAgICAgaWYgKG1hcCkgeworICAgICAgICB2YXIgaW5uZXJNYXAgPSBtYXBbc3Via2V5
XTsKKyAgICAgICAgaWYgKGlubmVyTWFwKSB7CisgICAgICAgICAgZm9yICh2YXIgaW5uZXJLZXkg
aW4gaW5uZXJNYXApIHsKKyAgICAgICAgICAgIGlmICghc2Vlbltpbm5lcktleV0pIHsKKyAgICAg
ICAgICAgICAgc2Vlbltpbm5lcktleV0gPSB0cnVlOworICAgICAgICAgICAgICBjYWxscy5wdXNo
KFtpbm5lcktleSwgaW5uZXJNYXBbaW5uZXJLZXldXSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgICBwb2ludGVyID0gcG9pbnRlci5wYXJlbnQ7
CisgICAgfQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2FsbHMubGVuZ3RoOyBpKyspIHsKKyAg
ICAgIHZhciBfY2FsbHMkaSA9IGNhbGxzW2ldOworICAgICAgdmFyIGlubmVyS2V5ID0gX2NhbGxz
JGlbMF07CisgICAgICB2YXIgdmFsdWUgPSBfY2FsbHMkaVsxXTsKKworICAgICAgZm4oaW5uZXJL
ZXksIHZhbHVlKTsKKyAgICB9CisgIH07CisKKyAgLy8gSW1wbGVtZW50cyBhIG1lbWJlciB0aGF0
IHByb3ZpZGVzIGEgbm9uLWhlcml0YWJsZSwgbGF6aWx5LWNyZWF0ZWQKKyAgLy8gb2JqZWN0IHVz
aW5nIHRoZSBtZXRob2QgeW91IHByb3ZpZGUuCisgIGZ1bmN0aW9uIG93bkN1c3RvbU9iamVjdChu
YW1lLCBNZXRhKSB7CisgICAgdmFyIGtleSA9IG1lbWJlclByb3BlcnR5KG5hbWUpOworICAgIHZh
ciBjYXBpdGFsaXplZCA9IGNhcGl0YWxpemUobmFtZSk7CisgICAgTWV0YS5wcm90b3R5cGVbJ3dy
aXRhYmxlJyArIGNhcGl0YWxpemVkXSA9IGZ1bmN0aW9uIChjcmVhdGUpIHsKKyAgICAgIHZhciBy
ZXQgPSB0aGlzW2tleV07CisgICAgICBpZiAoIXJldCkgeworICAgICAgICByZXQgPSB0aGlzW2tl
eV0gPSBjcmVhdGUodGhpcy5zb3VyY2UpOworICAgICAgfQorICAgICAgcmV0dXJuIHJldDsKKyAg
ICB9OworICAgIE1ldGEucHJvdG90eXBlWydyZWFkYWJsZScgKyBjYXBpdGFsaXplZF0gPSBmdW5j
dGlvbiAoKSB7CisgICAgICByZXR1cm4gdGhpc1trZXldOworICAgIH07CisgIH0KKworICAvLyBJ
bXBsZW1lbnRzIGEgbWVtYmVyIHRoYXQgcHJvdmlkZXMgYW4gaW5oZXJpdGFibGUsIGxhemlseS1j
cmVhdGVkCisgIC8vIG9iamVjdCB1c2luZyB0aGUgbWV0aG9kIHlvdSBwcm92aWRlLiBXZSB3aWxs
IGRlcml2ZWQgY2hpbGRyZW4gZnJvbQorICAvLyB0aGVpciBwYXJlbnRzIGJ5IGNhbGxpbmcgeW91
ciBvYmplY3QncyBgY29weSgpYCBtZXRob2QuCisgIGZ1bmN0aW9uIGluaGVyaXRlZEN1c3RvbU9i
amVjdChuYW1lLCBNZXRhKSB7CisgICAgdmFyIGtleSA9IG1lbWJlclByb3BlcnR5KG5hbWUpOwor
ICAgIHZhciBjYXBpdGFsaXplZCA9IGNhcGl0YWxpemUobmFtZSk7CisgICAgTWV0YS5wcm90b3R5
cGVbJ3dyaXRhYmxlJyArIGNhcGl0YWxpemVkXSA9IGZ1bmN0aW9uIChjcmVhdGUpIHsKKyAgICAg
IHZhciByZXQgPSB0aGlzW2tleV07CisgICAgICBpZiAoIXJldCkgeworICAgICAgICBpZiAodGhp
cy5wYXJlbnQpIHsKKyAgICAgICAgICByZXQgPSB0aGlzW2tleV0gPSB0aGlzLnBhcmVudFsnd3Jp
dGFibGUnICsgY2FwaXRhbGl6ZWRdKGNyZWF0ZSkuY29weSh0aGlzLnNvdXJjZSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgcmV0ID0gdGhpc1trZXldID0gY3JlYXRlKHRoaXMuc291cmNl
KTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgcmV0dXJuIHJldDsKKyAgICB9OworICAgIE1l
dGEucHJvdG90eXBlWydyZWFkYWJsZScgKyBjYXBpdGFsaXplZF0gPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICByZXR1cm4gdGhpcy5fZ2V0SW5oZXJpdGVkKGtleSk7CisgICAgfTsKKyAgfQorCisgIGZ1
bmN0aW9uIG1lbWJlclByb3BlcnR5KG5hbWUpIHsKKyAgICByZXR1cm4gJ18nICsgbmFtZTsKKyAg
fQorCisgIC8vIHRoZXJlJ3MgYSBtb3JlIGdlbmVyYWwtcHVycG9zZSBjYXBpdGFsaXplIGluIGVt
YmVyLXJ1bnRpbWUsIGJ1dCB3ZQorICAvLyBkb24ndCB3YW50IHRvIG1ha2UgZW1iZXItbWV0YWwg
ZGVwZW5kIG9uIGVtYmVyLXJ1bnRpbWUuCisgIGZ1bmN0aW9uIGNhcGl0YWxpemUobmFtZSkgewor
ICAgIHJldHVybiBuYW1lLnJlcGxhY2UoL15cdy8sIGZ1bmN0aW9uIChtKSB7CisgICAgICByZXR1
cm4gbS50b1VwcGVyQ2FzZSgpOworICAgIH0pOworICB9CisKKyAgdmFyIE1FVEFfREVTQyA9IHsK
KyAgICB3cml0YWJsZTogdHJ1ZSwKKyAgICBjb25maWd1cmFibGU6IHRydWUsCisgICAgZW51bWVy
YWJsZTogZmFsc2UsCisgICAgdmFsdWU6IG51bGwKKyAgfTsKKworICBleHBvcnRzLk1FVEFfREVT
QyA9IE1FVEFfREVTQzsKKyAgdmFyIEVNQkVSX01FVEFfUFJPUEVSVFkgPSB7CisgICAgbmFtZTog
TUVUQV9GSUVMRCwKKyAgICBkZXNjcmlwdG9yOiBNRVRBX0RFU0MKKyAgfTsKKworICAvLyBjaG9v
c2UgdGhlIG9uZSBhcHByb3ByaWF0ZSBmb3IgZ2l2ZW4gcGxhdGZvcm0KKyAgdmFyIHNldE1ldGEg
PSBmdW5jdGlvbiAob2JqLCBtZXRhKSB7CisgICAgLy8gaWYgYG51bGxgIGFscmVhZHksIGp1c3Qg
c2V0IGl0IHRvIHRoZSBuZXcgdmFsdWUKKyAgICAvLyBvdGhlcndpc2UgZGVmaW5lIHByb3BlcnR5
IGZpcnN0CisgICAgaWYgKG9ialtNRVRBX0ZJRUxEXSAhPT0gbnVsbCkgeworICAgICAgaWYgKG9i
ai5fX2RlZmluZU5vbkVudW1lcmFibGUpIHsKKyAgICAgICAgb2JqLl9fZGVmaW5lTm9uRW51bWVy
YWJsZShFTUJFUl9NRVRBX1BST1BFUlRZKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShvYmosIE1FVEFfRklFTEQsIE1FVEFfREVTQyk7CisgICAgICB9Cisg
ICAgfQorCisgICAgb2JqW01FVEFfRklFTERdID0gbWV0YTsKKyAgfTsKKworICAvKioKKyAgICBS
ZXRyaWV2ZXMgdGhlIG1ldGEgaGFzaCBmb3IgYW4gb2JqZWN0LiBJZiBgd3JpdGFibGVgIGlzIHRy
dWUgZW5zdXJlcyB0aGUKKyAgICBoYXNoIGlzIHdyaXRhYmxlIGZvciB0aGlzIG9iamVjdCBhcyB3
ZWxsLgorICAKKyAgICBUaGUgbWV0YSBvYmplY3QgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQg
Y29tcHV0ZWQgcHJvcGVydHkgZGVzY3JpcHRvcnMgYXMKKyAgICB3ZWxsIGFzIGFueSB3YXRjaGVk
IHByb3BlcnRpZXMgYW5kIG90aGVyIGluZm9ybWF0aW9uLiBZb3UgZ2VuZXJhbGx5IHdpbGwKKyAg
ICBub3QgYWNjZXNzIHRoaXMgaW5mb3JtYXRpb24gZGlyZWN0bHkgYnV0IGluc3RlYWQgd29yayB3
aXRoIGhpZ2hlciBsZXZlbAorICAgIG1ldGhvZHMgdGhhdCBtYW5pcHVsYXRlIHRoaXMgaGFzaCBp
bmRpcmVjdGx5LgorICAKKyAgICBAbWV0aG9kIG1ldGEKKyAgICBAZm9yIEVtYmVyCisgICAgQHBy
aXZhdGUKKyAgCisgICAgQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIHJldHJpZXZl
IG1ldGEgZm9yCisgICAgQHBhcmFtIHtCb29sZWFufSBbd3JpdGFibGU9dHJ1ZV0gUGFzcyBgZmFs
c2VgIGlmIHlvdSBkbyBub3QgaW50ZW5kIHRvIG1vZGlmeQorICAgICAgdGhlIG1ldGEgaGFzaCwg
YWxsb3dpbmcgdGhlIG1ldGhvZCB0byBhdm9pZCBtYWtpbmcgYW4gdW5uZWNlc3NhcnkgY29weS4K
KyAgICBAcmV0dXJuIHtPYmplY3R9IHRoZSBtZXRhIGhhc2ggZm9yIGFuIG9iamVjdAorICAqLwor
CisgIGZ1bmN0aW9uIG1ldGEob2JqKSB7CisgICAgdmFyIG1heWJlTWV0YSA9IHBlZWtNZXRhKG9i
aik7CisgICAgdmFyIHBhcmVudCA9IHVuZGVmaW5lZDsKKworICAgIC8vIHJlbW92ZSB0aGlzIGNv
ZGUsIGluLWZhdm9yIG9mIGV4cGxpY2l0IHBhcmVudAorICAgIGlmIChtYXliZU1ldGEpIHsKKyAg
ICAgIGlmIChtYXliZU1ldGEuc291cmNlID09PSBvYmopIHsKKyAgICAgICAgcmV0dXJuIG1heWJl
TWV0YTsKKyAgICAgIH0KKyAgICAgIHBhcmVudCA9IG1heWJlTWV0YTsKKyAgICB9CisKKyAgICB2
YXIgbmV3TWV0YSA9IG5ldyBNZXRhKG9iaiwgcGFyZW50KTsKKyAgICBzZXRNZXRhKG9iaiwgbmV3
TWV0YSk7CisgICAgcmV0dXJuIG5ld01ldGE7CisgIH0KKworICBmdW5jdGlvbiBwZWVrTWV0YShv
YmopIHsKKyAgICByZXR1cm4gb2JqW01FVEFfRklFTERdOworICB9CisKKyAgZnVuY3Rpb24gZGVs
ZXRlTWV0YShvYmopIHsKKyAgICBpZiAodHlwZW9mIG9ialtNRVRBX0ZJRUxEXSAhPT0gJ29iamVj
dCcpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgb2JqW01FVEFfRklFTERdID0gbnVsbDsK
KyAgfQorfSk7CitlbmlmZWQoJ2VtYmVyLW1ldGFsL21ldGFfbGlzdGVuZXJzJywgWydleHBvcnRz
J10sIGZ1bmN0aW9uIChleHBvcnRzKSB7CisgIC8qCisgICBXaGVuIHdlIHJlbmRlciBhIHJpY2gg
dGVtcGxhdGUgaGllcmFyY2h5LCB0aGUgc2V0IG9mIGV2ZW50cyB0aGF0CisgICAqbWlnaHQqIGhh
cHBlbiB0ZW5kcyB0byBiZSBtdWNoIGxhcmdlciB0aGFuIHRoZSBzZXQgb2YgZXZlbnRzIHRoYXQK
KyAgIGFjdHVhbGx5IGhhcHBlbi4gVGhpcyBpbXBsaWVzIHRoYXQgd2Ugc2hvdWxkIG1ha2UgbGlz
dGVuZXIgY3JlYXRpb24gJgorICAgZGVzdHJ1Y3Rpb24gY2hlYXAsIGV2ZW4gYXQgdGhlIGNvc3Qg
b2YgbWFraW5nIGV2ZW50IGRpc3BhdGNoIG1vcmUKKyAgIGV4cGVuc2l2ZS4KKyAgCisgICBUaHVz
IHdlIHN0b3JlIGEgbmV3IGxpc3RlbmVyIHdpdGggYSBzaW5nbGUgcHVzaCBhbmQgbm8gbmV3Cisg
ICBhbGxvY2F0aW9ucywgd2l0aG91dCBldmVuIGJvdGhlcmluZyB0byBkbyBkZWR1cGxpY2F0aW9u
IC0tIHdlIGNhbgorICAgc2F2ZSB0aGF0IGZvciBkaXNwYXRjaCB0aW1lLCBpZiBhbiBldmVudCBh
Y3R1YWxseSBoYXBwZW5zLgorICAgKi8KKworICAvKiBsaXN0ZW5lciBmbGFncyAqLworICAndXNl
IHN0cmljdCc7CisKKyAgdmFyIE9OQ0UgPSAxOworICBleHBvcnRzLk9OQ0UgPSBPTkNFOworICB2
YXIgU1VTUEVOREVEID0gMjsKKworICBleHBvcnRzLlNVU1BFTkRFRCA9IFNVU1BFTkRFRDsKKyAg
dmFyIHByb3RvTWV0aG9kcyA9IHsKKworICAgIGFkZFRvTGlzdGVuZXJzOiBmdW5jdGlvbiAoZXZl
bnROYW1lLCB0YXJnZXQsIG1ldGhvZCwgZmxhZ3MpIHsKKyAgICAgIGlmICghdGhpcy5fbGlzdGVu
ZXJzKSB7CisgICAgICAgIHRoaXMuX2xpc3RlbmVycyA9IFtdOworICAgICAgfQorICAgICAgdGhp
cy5fbGlzdGVuZXJzLnB1c2goZXZlbnROYW1lLCB0YXJnZXQsIG1ldGhvZCwgZmxhZ3MpOworICAg
IH0sCisKKyAgICBfZmluYWxpemVMaXN0ZW5lcnM6IGZ1bmN0aW9uICgpIHsKKyAgICAgIGlmICh0
aGlzLl9saXN0ZW5lcnNGaW5hbGl6ZWQpIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAg
ICAgaWYgKCF0aGlzLl9saXN0ZW5lcnMpIHsKKyAgICAgICAgdGhpcy5fbGlzdGVuZXJzID0gW107
CisgICAgICB9CisgICAgICB2YXIgcG9pbnRlciA9IHRoaXMucGFyZW50OworICAgICAgd2hpbGUg
KHBvaW50ZXIpIHsKKyAgICAgICAgdmFyIGxpc3RlbmVycyA9IHBvaW50ZXIuX2xpc3RlbmVyczsK
KyAgICAgICAgaWYgKGxpc3RlbmVycykgeworICAgICAgICAgIHRoaXMuX2xpc3RlbmVycyA9IHRo
aXMuX2xpc3RlbmVycy5jb25jYXQobGlzdGVuZXJzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
cG9pbnRlci5fbGlzdGVuZXJzRmluYWxpemVkKSB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgcG9pbnRlciA9IHBvaW50ZXIucGFyZW50OworICAgICAgfQorICAgICAgdGhp
cy5fbGlzdGVuZXJzRmluYWxpemVkID0gdHJ1ZTsKKyAgICB9LAorCisgICAgcmVtb3ZlRnJvbUxp
c3RlbmVyczogZnVuY3Rpb24gKGV2ZW50TmFtZSwgdGFyZ2V0LCBtZXRob2QsIGRpZFJlbW92ZSkg
eworICAgICAgdmFyIHBvaW50ZXIgPSB0aGlzOworICAgICAgd2hpbGUgKHBvaW50ZXIpIHsKKyAg
ICAgICAgdmFyIGxpc3RlbmVycyA9IHBvaW50ZXIuX2xpc3RlbmVyczsKKyAgICAgICAgaWYgKGxp
c3RlbmVycykgeworICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gbGlzdGVuZXJzLmxlbmd0aCAt
IDQ7IGluZGV4ID49IDA7IGluZGV4IC09IDQpIHsKKyAgICAgICAgICAgIGlmIChsaXN0ZW5lcnNb
aW5kZXhdID09PSBldmVudE5hbWUgJiYgKCFtZXRob2QgfHwgbGlzdGVuZXJzW2luZGV4ICsgMV0g
PT09IHRhcmdldCAmJiBsaXN0ZW5lcnNbaW5kZXggKyAyXSA9PT0gbWV0aG9kKSkgeworICAgICAg
ICAgICAgICBpZiAocG9pbnRlciA9PT0gdGhpcykgeworICAgICAgICAgICAgICAgIC8vIHdlIGFy
ZSBtb2RpZnlpbmcgb3VyIG93biBsaXN0LCBzbyB3ZSBlZGl0IGRpcmVjdGx5CisgICAgICAgICAg
ICAgICAgaWYgKHR5cGVvZiBkaWRSZW1vdmUgPT09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgICAg
ICAgICAgIGRpZFJlbW92ZShldmVudE5hbWUsIHRhcmdldCwgbGlzdGVuZXJzW2luZGV4ICsgMl0p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGlu
ZGV4LCA0KTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyB3ZSBh
cmUgdHJ5aW5nIHRvIHJlbW92ZSBhbiBpbmhlcml0ZWQgbGlzdGVuZXIsIHNvIHdlIGRvCisgICAg
ICAgICAgICAgICAgLy8ganVzdC1pbi10aW1lIGNvcHlpbmcgdG8gZGV0YWNoIG91ciBvd24gbGlz
dGVuZXJzIGZyb20KKyAgICAgICAgICAgICAgICAvLyBvdXIgaW5oZXJpdGFuY2UgY2hhaW4uCisg
ICAgICAgICAgICAgICAgdGhpcy5fZmluYWxpemVMaXN0ZW5lcnMoKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5yZW1vdmVGcm9tTGlzdGVuZXJzKGV2ZW50TmFtZSwgdGFyZ2V0LCBtZXRo
b2QpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGlmIChwb2ludGVyLl9saXN0ZW5lcnNGaW5hbGl6ZWQpIHsKKyAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBwb2ludGVyID0gcG9pbnRlci5wYXJlbnQ7Cisg
ICAgICB9CisgICAgfSwKKworICAgIG1hdGNoaW5nTGlzdGVuZXJzOiBmdW5jdGlvbiAoZXZlbnRO
YW1lKSB7CisgICAgICB2YXIgcG9pbnRlciA9IHRoaXM7CisgICAgICB2YXIgcmVzdWx0ID0gW107
CisgICAgICB3aGlsZSAocG9pbnRlcikgeworICAgICAgICB2YXIgbGlzdGVuZXJzID0gcG9pbnRl
ci5fbGlzdGVuZXJzOworICAgICAgICBpZiAobGlzdGVuZXJzKSB7CisgICAgICAgICAgZm9yICh2
YXIgaW5kZXggPSAwOyBpbmRleCA8IGxpc3RlbmVycy5sZW5ndGggLSAzOyBpbmRleCArPSA0KSB7
CisgICAgICAgICAgICBpZiAobGlzdGVuZXJzW2luZGV4XSA9PT0gZXZlbnROYW1lKSB7CisgICAg
ICAgICAgICAgIHB1c2hVbmlxdWVMaXN0ZW5lcihyZXN1bHQsIGxpc3RlbmVycywgaW5kZXgpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAocG9pbnRl
ci5fbGlzdGVuZXJzRmluYWxpemVkKSB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgcG9pbnRlciA9IHBvaW50ZXIucGFyZW50OworICAgICAgfQorICAgICAgdmFyIHN1cyA9
IHRoaXMuX3N1c3BlbmRlZExpc3RlbmVyczsKKyAgICAgIGlmIChzdXMpIHsKKyAgICAgICAgZm9y
ICh2YXIgc3VzSW5kZXggPSAwOyBzdXNJbmRleCA8IHN1cy5sZW5ndGggLSAyOyBzdXNJbmRleCAr
PSAzKSB7CisgICAgICAgICAgaWYgKGV2ZW50TmFtZSA9PT0gc3VzW3N1c0luZGV4XSkgeworICAg
ICAgICAgICAgZm9yICh2YXIgcmVzdWx0SW5kZXggPSAwOyByZXN1bHRJbmRleCA8IHJlc3VsdC5s
ZW5ndGggLSAyOyByZXN1bHRJbmRleCArPSAzKSB7CisgICAgICAgICAgICAgIGlmIChyZXN1bHRb
cmVzdWx0SW5kZXhdID09PSBzdXNbc3VzSW5kZXggKyAxXSAmJiByZXN1bHRbcmVzdWx0SW5kZXgg
KyAxXSA9PT0gc3VzW3N1c0luZGV4ICsgMl0pIHsKKyAgICAgICAgICAgICAgICByZXN1bHRbcmVz
dWx0SW5kZXggKyAyXSB8PSBTVVNQRU5ERUQ7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfSwKKworICAgIHN1c3BlbmRMaXN0ZW5lcnM6IGZ1bmN0aW9uIChldmVudE5hbWVzLCB0
YXJnZXQsIG1ldGhvZCwgY2FsbGJhY2spIHsKKyAgICAgIHZhciBzdXMgPSB0aGlzLl9zdXNwZW5k
ZWRMaXN0ZW5lcnM7CisgICAgICBpZiAoIXN1cykgeworICAgICAgICBzdXMgPSB0aGlzLl9zdXNw
ZW5kZWRMaXN0ZW5lcnMgPSBbXTsKKyAgICAgIH0KKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
ZXZlbnROYW1lcy5sZW5ndGg7IGkrKykgeworICAgICAgICBzdXMucHVzaChldmVudE5hbWVzW2ld
LCB0YXJnZXQsIG1ldGhvZCk7CisgICAgICB9CisgICAgICB0cnkgeworICAgICAgICByZXR1cm4g
Y2FsbGJhY2suY2FsbCh0YXJnZXQpOworICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKHN1
cy5sZW5ndGggPT09IGV2ZW50TmFtZXMubGVuZ3RoKSB7CisgICAgICAgICAgdGhpcy5fc3VzcGVu
ZGVkTGlzdGVuZXJzID0gdW5kZWZpbmVkOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGZv
ciAodmFyIGkgPSBzdXMubGVuZ3RoIC0gMzsgaSA+PSAwOyBpIC09IDMpIHsKKyAgICAgICAgICAg
IGlmIChzdXNbaSArIDFdID09PSB0YXJnZXQgJiYgc3VzW2kgKyAyXSA9PT0gbWV0aG9kICYmIGV2
ZW50TmFtZXMuaW5kZXhPZihzdXNbaV0pICE9PSAtMSkgeworICAgICAgICAgICAgICBzdXMuc3Bs
aWNlKGksIDMpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
fQorICAgIH0sCisKKyAgICB3YXRjaGVkRXZlbnRzOiBmdW5jdGlvbiAoKSB7CisgICAgICB2YXIg
cG9pbnRlciA9IHRoaXM7CisgICAgICB2YXIgbmFtZXMgPSB7fTsKKyAgICAgIHdoaWxlIChwb2lu
dGVyKSB7CisgICAgICAgIHZhciBsaXN0ZW5lcnMgPSBwb2ludGVyLl9saXN0ZW5lcnM7CisgICAg
ICAgIGlmIChsaXN0ZW5lcnMpIHsKKyAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4
IDwgbGlzdGVuZXJzLmxlbmd0aCAtIDM7IGluZGV4ICs9IDQpIHsKKyAgICAgICAgICAgIG5hbWVz
W2xpc3RlbmVyc1tpbmRleF1dID0gdHJ1ZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHBvaW50ZXIuX2xpc3RlbmVyc0ZpbmFsaXplZCkgeworICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIHBvaW50ZXIgPSBwb2ludGVyLnBhcmVudDsKKyAgICAgIH0KKyAg
ICAgIHJldHVybiBPYmplY3Qua2V5cyhuYW1lcyk7CisgICAgfSwKKworICAgIF9pbml0aWFsaXpl
TGlzdGVuZXJzOiBmdW5jdGlvbiAoKSB7CisgICAgICB0aGlzLl9saXN0ZW5lcnMgPSB1bmRlZmlu
ZWQ7CisgICAgICB0aGlzLl9saXN0ZW5lcnNGaW5hbGl6ZWQgPSB1bmRlZmluZWQ7CisgICAgICB0
aGlzLl9zdXNwZW5kZWRMaXN0ZW5lcnMgPSB1bmRlZmluZWQ7CisgICAgfQorICB9OworCisgIGV4
cG9ydHMucHJvdG9NZXRob2RzID0gcHJvdG9NZXRob2RzOworICBmdW5jdGlvbiBwdXNoVW5pcXVl
TGlzdGVuZXIoZGVzdGluYXRpb24sIHNvdXJjZSwgaW5kZXgpIHsKKyAgICB2YXIgdGFyZ2V0ID0g
c291cmNlW2luZGV4ICsgMV07CisgICAgdmFyIG1ldGhvZCA9IHNvdXJjZVtpbmRleCArIDJdOwor
ICAgIGZvciAodmFyIGRlc3RpbmF0aW9uSW5kZXggPSAwOyBkZXN0aW5hdGlvbkluZGV4IDwgZGVz
dGluYXRpb24ubGVuZ3RoIC0gMjsgZGVzdGluYXRpb25JbmRleCArPSAzKSB7CisgICAgICBpZiAo
ZGVzdGluYXRpb25bZGVzdGluYXRpb25JbmRleF0gPT09IHRhcmdldCAmJiBkZXN0aW5hdGlvbltk
ZXN0aW5hdGlvbkluZGV4ICsgMV0gPT09IG1ldGhvZCkgeworICAgICAgICByZXR1cm47CisgICAg
ICB9CisgICAgfQorICAgIGRlc3RpbmF0aW9uLnB1c2godGFyZ2V0LCBtZXRob2QsIHNvdXJjZVtp
bmRleCArIDNdKTsKKyAgfQorfSk7CitlbmlmZWQoJ2VtYmVyLW1ldGFsL21peGluJywgWydleHBv
cnRzJywgJ2VtYmVyLW1ldGFsL2NvcmUnLCAnZW1iZXItbWV0YWwvZXJyb3InLCAnZW1iZXItbWV0
YWwvZGVidWcnLCAnZW1iZXItbWV0YWwvYXNzaWduJywgJ2VtYmVyLW1ldGFsL2VtcHR5X29iamVj
dCcsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQnLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfc2V0
JywgJ2VtYmVyLW1ldGFsL3V0aWxzJywgJ2VtYmVyLW1ldGFsL21ldGEnLCAnZW1iZXItbWV0YWwv
ZXhwYW5kX3Byb3BlcnRpZXMnLCAnZW1iZXItbWV0YWwvcHJvcGVydGllcycsICdlbWJlci1tZXRh
bC9jb21wdXRlZCcsICdlbWJlci1tZXRhbC9iaW5kaW5nJywgJ2VtYmVyLW1ldGFsL29ic2VydmVy
JywgJ2VtYmVyLW1ldGFsL2V2ZW50cycsICdlbWJlci1tZXRhbC9zdHJlYW1zL3V0aWxzJ10sIGZ1
bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbENvcmUsIF9lbWJlck1ldGFsRXJyb3IsIF9lbWJl
ck1ldGFsRGVidWcsIF9lbWJlck1ldGFsQXNzaWduLCBfZW1iZXJNZXRhbEVtcHR5X29iamVjdCwg
X2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQsIF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LCBfZW1iZXJN
ZXRhbFV0aWxzLCBfZW1iZXJNZXRhbE1ldGEsIF9lbWJlck1ldGFsRXhwYW5kX3Byb3BlcnRpZXMs
IF9lbWJlck1ldGFsUHJvcGVydGllcywgX2VtYmVyTWV0YWxDb21wdXRlZCwgX2VtYmVyTWV0YWxC
aW5kaW5nLCBfZW1iZXJNZXRhbE9ic2VydmVyLCBfZW1iZXJNZXRhbEV2ZW50cywgX2VtYmVyTWV0
YWxTdHJlYW1zVXRpbHMpIHsKKyAgJ25vIHVzZSBzdHJpY3QnOworICAvLyBSZW1vdmUgInVzZSBz
dHJpY3QiOyBmcm9tIHRyYW5zcGlsZWQgbW9kdWxlIHVudGlsCisgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzgwMzggaXMgZml4ZWQKKworICAvKioKKyAgQG1v
ZHVsZSBlbWJlcgorICBAc3VibW9kdWxlIGVtYmVyLW1ldGFsCisgICovCisgIGV4cG9ydHMubWl4
aW4gPSBtaXhpbjsKKyAgZXhwb3J0cy5kZWZhdWx0ID0gTWl4aW47CisgIGV4cG9ydHMucmVxdWly
ZWQgPSByZXF1aXJlZDsKKyAgZXhwb3J0cy5hbGlhc01ldGhvZCA9IGFsaWFzTWV0aG9kOworICBl
eHBvcnRzLm9ic2VydmVyID0gb2JzZXJ2ZXI7CisgIGV4cG9ydHMuX2ltbWVkaWF0ZU9ic2VydmVy
ID0gX2ltbWVkaWF0ZU9ic2VydmVyOworICBleHBvcnRzLl9iZWZvcmVPYnNlcnZlciA9IF9iZWZv
cmVPYnNlcnZlcjsKKworICBmdW5jdGlvbiBST09UKCkge30KKyAgUk9PVC5fX2hhc1N1cGVyID0g
ZmFsc2U7CisKKyAgdmFyIFJFUVVJUkVEOworICB2YXIgYV9zbGljZSA9IFtdLnNsaWNlOworCisg
IGZ1bmN0aW9uIGlzTWV0aG9kKG9iaikgeworICAgIHJldHVybiAnZnVuY3Rpb24nID09PSB0eXBl
b2Ygb2JqICYmIG9iai5pc01ldGhvZCAhPT0gZmFsc2UgJiYgb2JqICE9PSBCb29sZWFuICYmIG9i
aiAhPT0gT2JqZWN0ICYmIG9iaiAhPT0gTnVtYmVyICYmIG9iaiAhPT0gQXJyYXkgJiYgb2JqICE9
PSBEYXRlICYmIG9iaiAhPT0gU3RyaW5nOworICB9CisKKyAgdmFyIENPTlRJTlVFID0ge307CisK
KyAgZnVuY3Rpb24gbWl4aW5Qcm9wZXJ0aWVzKG1peGluc01ldGEsIG1peGluKSB7CisgICAgdmFy
IGd1aWQ7CisKKyAgICBpZiAobWl4aW4gaW5zdGFuY2VvZiBNaXhpbikgeworICAgICAgZ3VpZCA9
IF9lbWJlck1ldGFsVXRpbHMuZ3VpZEZvcihtaXhpbik7CisgICAgICBpZiAobWl4aW5zTWV0YS5w
ZWVrTWl4aW5zKGd1aWQpKSB7CisgICAgICAgIHJldHVybiBDT05USU5VRTsKKyAgICAgIH0KKyAg
ICAgIG1peGluc01ldGEud3JpdGVNaXhpbnMoZ3VpZCwgbWl4aW4pOworICAgICAgcmV0dXJuIG1p
eGluLnByb3BlcnRpZXM7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBtaXhpbjsgLy8gYXBw
bHkgYW5vbnltb3VzIG1peGluIHByb3BlcnRpZXMKKyAgICB9CisgIH0KKworICBmdW5jdGlvbiBj
b25jYXRlbmF0ZWRNaXhpblByb3BlcnRpZXMoY29uY2F0UHJvcCwgcHJvcHMsIHZhbHVlcywgYmFz
ZSkgeworICAgIHZhciBjb25jYXRzOworCisgICAgLy8gcmVzZXQgYmVmb3JlIGFkZGluZyBlYWNo
IG5ldyBtaXhpbiB0byBwaWNrdXAgY29uY2F0cyBmcm9tIHByZXZpb3VzCisgICAgY29uY2F0cyA9
IHZhbHVlc1tjb25jYXRQcm9wXSB8fCBiYXNlW2NvbmNhdFByb3BdOworICAgIGlmIChwcm9wc1tj
b25jYXRQcm9wXSkgeworICAgICAgY29uY2F0cyA9IGNvbmNhdHMgPyBjb25jYXRzLmNvbmNhdChw
cm9wc1tjb25jYXRQcm9wXSkgOiBwcm9wc1tjb25jYXRQcm9wXTsKKyAgICB9CisKKyAgICByZXR1
cm4gY29uY2F0czsKKyAgfQorCisgIGZ1bmN0aW9uIGdpdmVEZXNjcmlwdG9yU3VwZXIobWV0YSwg
a2V5LCBwcm9wZXJ0eSwgdmFsdWVzLCBkZXNjcywgYmFzZSkgeworICAgIHZhciBzdXBlclByb3Bl
cnR5OworCisgICAgLy8gQ29tcHV0ZWQgcHJvcGVydGllcyBvdmVycmlkZSBtZXRob2RzLCBhbmQg
ZG8gbm90IGNhbGwgc3VwZXIgdG8gdGhlbQorICAgIGlmICh2YWx1ZXNba2V5XSA9PT0gdW5kZWZp
bmVkKSB7CisgICAgICAvLyBGaW5kIHRoZSBvcmlnaW5hbCBkZXNjcmlwdG9yIGluIGEgcGFyZW50
IG1peGluCisgICAgICBzdXBlclByb3BlcnR5ID0gZGVzY3Nba2V5XTsKKyAgICB9CisKKyAgICAv
LyBJZiB3ZSBkaWRuJ3QgZmluZCB0aGUgb3JpZ2luYWwgZGVzY3JpcHRvciBpbiBhIHBhcmVudCBt
aXhpbiwgZmluZAorICAgIC8vIGl0IG9uIHRoZSBvcmlnaW5hbCBvYmplY3QuCisgICAgaWYgKCFz
dXBlclByb3BlcnR5KSB7CisgICAgICB2YXIgcG9zc2libGVEZXNjID0gYmFzZVtrZXldOworICAg
ICAgdmFyIHN1cGVyRGVzYyA9IHBvc3NpYmxlRGVzYyAhPT0gbnVsbCAmJiB0eXBlb2YgcG9zc2li
bGVEZXNjID09PSAnb2JqZWN0JyAmJiBwb3NzaWJsZURlc2MuaXNEZXNjcmlwdG9yID8gcG9zc2li
bGVEZXNjIDogdW5kZWZpbmVkOworCisgICAgICBzdXBlclByb3BlcnR5ID0gc3VwZXJEZXNjOwor
ICAgIH0KKworICAgIGlmIChzdXBlclByb3BlcnR5ID09PSB1bmRlZmluZWQgfHwgIShzdXBlclBy
b3BlcnR5IGluc3RhbmNlb2YgX2VtYmVyTWV0YWxDb21wdXRlZC5Db21wdXRlZFByb3BlcnR5KSkg
eworICAgICAgcmV0dXJuIHByb3BlcnR5OworICAgIH0KKworICAgIC8vIFNpbmNlIG11bHRpcGxl
IG1peGlucyBtYXkgaW5oZXJpdCBmcm9tIHRoZSBzYW1lIHBhcmVudCwgd2UgbmVlZAorICAgIC8v
IHRvIGNsb25lIHRoZSBjb21wdXRlZCBwcm9wZXJ0eSBzbyB0aGF0IG90aGVyIG1peGlucyBkbyBu
b3QgcmVjZWl2ZQorICAgIC8vIHRoZSB3cmFwcGVkIHZlcnNpb24uCisgICAgcHJvcGVydHkgPSBP
YmplY3QuY3JlYXRlKHByb3BlcnR5KTsKKyAgICBwcm9wZXJ0eS5fZ2V0dGVyID0gX2VtYmVyTWV0
YWxVdGlscy53cmFwKHByb3BlcnR5Ll9nZXR0ZXIsIHN1cGVyUHJvcGVydHkuX2dldHRlcik7Cisg
ICAgaWYgKHN1cGVyUHJvcGVydHkuX3NldHRlcikgeworICAgICAgaWYgKHByb3BlcnR5Ll9zZXR0
ZXIpIHsKKyAgICAgICAgcHJvcGVydHkuX3NldHRlciA9IF9lbWJlck1ldGFsVXRpbHMud3JhcChw
cm9wZXJ0eS5fc2V0dGVyLCBzdXBlclByb3BlcnR5Ll9zZXR0ZXIpOworICAgICAgfSBlbHNlIHsK
KyAgICAgICAgcHJvcGVydHkuX3NldHRlciA9IHN1cGVyUHJvcGVydHkuX3NldHRlcjsKKyAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gcHJvcGVydHk7CisgIH0KKworICBmdW5jdGlvbiBnaXZl
TWV0aG9kU3VwZXIob2JqLCBrZXksIG1ldGhvZCwgdmFsdWVzLCBkZXNjcykgeworICAgIHZhciBz
dXBlck1ldGhvZDsKKworICAgIC8vIE1ldGhvZHMgb3ZlcndyaXRlIGNvbXB1dGVkIHByb3BlcnRp
ZXMsIGFuZCBkbyBub3QgY2FsbCBzdXBlciB0byB0aGVtLgorICAgIGlmIChkZXNjc1trZXldID09
PSB1bmRlZmluZWQpIHsKKyAgICAgIC8vIEZpbmQgdGhlIG9yaWdpbmFsIG1ldGhvZCBpbiBhIHBh
cmVudCBtaXhpbgorICAgICAgc3VwZXJNZXRob2QgPSB2YWx1ZXNba2V5XTsKKyAgICB9CisKKyAg
ICAvLyBJZiB3ZSBkaWRuJ3QgZmluZCB0aGUgb3JpZ2luYWwgdmFsdWUgaW4gYSBwYXJlbnQgbWl4
aW4sIGZpbmQgaXQgaW4KKyAgICAvLyB0aGUgb3JpZ2luYWwgb2JqZWN0CisgICAgc3VwZXJNZXRo
b2QgPSBzdXBlck1ldGhvZCB8fCBvYmpba2V5XTsKKworICAgIC8vIE9ubHkgd3JhcCB0aGUgbmV3
IG1ldGhvZCBpZiB0aGUgb3JpZ2luYWwgbWV0aG9kIHdhcyBhIGZ1bmN0aW9uCisgICAgaWYgKHN1
cGVyTWV0aG9kID09PSB1bmRlZmluZWQgfHwgJ2Z1bmN0aW9uJyAhPT0gdHlwZW9mIHN1cGVyTWV0
aG9kKSB7CisgICAgICByZXR1cm4gbWV0aG9kOworICAgIH0KKworICAgIHJldHVybiBfZW1iZXJN
ZXRhbFV0aWxzLndyYXAobWV0aG9kLCBzdXBlck1ldGhvZCk7CisgIH0KKworICBmdW5jdGlvbiBh
cHBseUNvbmNhdGVuYXRlZFByb3BlcnRpZXMob2JqLCBrZXksIHZhbHVlLCB2YWx1ZXMpIHsKKyAg
ICB2YXIgYmFzZVZhbHVlID0gdmFsdWVzW2tleV0gfHwgb2JqW2tleV07CisKKyAgICBpZiAoYmFz
ZVZhbHVlKSB7CisgICAgICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGJhc2VWYWx1ZS5jb25j
YXQpIHsKKyAgICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQp
IHsKKyAgICAgICAgICByZXR1cm4gYmFzZVZhbHVlOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgIHJldHVybiBiYXNlVmFsdWUuY29uY2F0KHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgfSBl
bHNlIHsKKyAgICAgICAgcmV0dXJuIF9lbWJlck1ldGFsVXRpbHMubWFrZUFycmF5KGJhc2VWYWx1
ZSkuY29uY2F0KHZhbHVlKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIF9l
bWJlck1ldGFsVXRpbHMubWFrZUFycmF5KHZhbHVlKTsKKyAgICB9CisgIH0KKworICBmdW5jdGlv
biBhcHBseU1lcmdlZFByb3BlcnRpZXMob2JqLCBrZXksIHZhbHVlLCB2YWx1ZXMpIHsKKyAgICB2
YXIgYmFzZVZhbHVlID0gdmFsdWVzW2tleV0gfHwgb2JqW2tleV07CisKKyAgICBfZW1iZXJNZXRh
bERlYnVnLnJ1bkluRGVidWcoZnVuY3Rpb24gKCkgeworICAgICAgaWYgKEFycmF5LmlzQXJyYXko
dmFsdWUpKSB7CisgICAgICAgIC8vIHVzZSBjb25kaXRpb25hbCB0byBhdm9pZCBzdHJpbmdpZnlp
bmcgZXZlcnkgdGltZQorICAgICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnWW91IHBhc3Nl
ZCBpbiBgJyArIEpTT04uc3RyaW5naWZ5KHZhbHVlKSArICdgIGFzIHRoZSB2YWx1ZSBmb3IgYCcg
KyBrZXkgKyAnYCBidXQgYCcgKyBrZXkgKyAnYCBjYW5ub3QgYmUgYW4gQXJyYXknLCBmYWxzZSk7
CisgICAgICB9CisgICAgfSk7CisKKyAgICBpZiAoIWJhc2VWYWx1ZSkgeworICAgICAgcmV0dXJu
IHZhbHVlOworICAgIH0KKworICAgIHZhciBuZXdCYXNlID0gX2VtYmVyTWV0YWxBc3NpZ24uZGVm
YXVsdCh7fSwgYmFzZVZhbHVlKTsKKyAgICB2YXIgaGFzRnVuY3Rpb24gPSBmYWxzZTsKKworICAg
IGZvciAodmFyIHByb3AgaW4gdmFsdWUpIHsKKyAgICAgIGlmICghdmFsdWUuaGFzT3duUHJvcGVy
dHkocHJvcCkpIHsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIHZhciBwcm9w
VmFsdWUgPSB2YWx1ZVtwcm9wXTsKKyAgICAgIGlmIChpc01ldGhvZChwcm9wVmFsdWUpKSB7Cisg
ICAgICAgIC8vIFRPRE86IHN1cHBvcnQgZm9yIENvbXB1dGVkIFByb3BlcnRpZXMsIGV0Yz8KKyAg
ICAgICAgaGFzRnVuY3Rpb24gPSB0cnVlOworICAgICAgICBuZXdCYXNlW3Byb3BdID0gZ2l2ZU1l
dGhvZFN1cGVyKG9iaiwgcHJvcCwgcHJvcFZhbHVlLCBiYXNlVmFsdWUsIHt9KTsKKyAgICAgIH0g
ZWxzZSB7CisgICAgICAgIG5ld0Jhc2VbcHJvcF0gPSBwcm9wVmFsdWU7CisgICAgICB9CisgICAg
fQorCisgICAgaWYgKGhhc0Z1bmN0aW9uKSB7CisgICAgICBuZXdCYXNlLl9zdXBlciA9IFJPT1Q7
CisgICAgfQorCisgICAgcmV0dXJuIG5ld0Jhc2U7CisgIH0KKworICBmdW5jdGlvbiBhZGROb3Jt
YWxpemVkUHJvcGVydHkoYmFzZSwga2V5LCB2YWx1ZSwgbWV0YSwgZGVzY3MsIHZhbHVlcywgY29u
Y2F0cywgbWVyZ2luZ3MpIHsKKyAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBfZW1iZXJNZXRhbFBy
b3BlcnRpZXMuRGVzY3JpcHRvcikgeworICAgICAgaWYgKHZhbHVlID09PSBSRVFVSVJFRCAmJiBk
ZXNjc1trZXldKSB7CisgICAgICAgIHJldHVybiBDT05USU5VRTsKKyAgICAgIH0KKworICAgICAg
Ly8gV3JhcCBkZXNjcmlwdG9yIGZ1bmN0aW9uIHRvIGltcGxlbWVudAorICAgICAgLy8gX3N1cGVy
KCkgaWYgbmVlZGVkCisgICAgICBpZiAodmFsdWUuX2dldHRlcikgeworICAgICAgICB2YWx1ZSA9
IGdpdmVEZXNjcmlwdG9yU3VwZXIobWV0YSwga2V5LCB2YWx1ZSwgdmFsdWVzLCBkZXNjcywgYmFz
ZSk7CisgICAgICB9CisKKyAgICAgIGRlc2NzW2tleV0gPSB2YWx1ZTsKKyAgICAgIHZhbHVlc1tr
ZXldID0gdW5kZWZpbmVkOworICAgIH0gZWxzZSB7CisgICAgICBpZiAoY29uY2F0cyAmJiBjb25j
YXRzLmluZGV4T2Yoa2V5KSA+PSAwIHx8IGtleSA9PT0gJ2NvbmNhdGVuYXRlZFByb3BlcnRpZXMn
IHx8IGtleSA9PT0gJ21lcmdlZFByb3BlcnRpZXMnKSB7CisgICAgICAgIHZhbHVlID0gYXBwbHlD
b25jYXRlbmF0ZWRQcm9wZXJ0aWVzKGJhc2UsIGtleSwgdmFsdWUsIHZhbHVlcyk7CisgICAgICB9
IGVsc2UgaWYgKG1lcmdpbmdzICYmIG1lcmdpbmdzLmluZGV4T2Yoa2V5KSA+PSAwKSB7CisgICAg
ICAgIHZhbHVlID0gYXBwbHlNZXJnZWRQcm9wZXJ0aWVzKGJhc2UsIGtleSwgdmFsdWUsIHZhbHVl
cyk7CisgICAgICB9IGVsc2UgaWYgKGlzTWV0aG9kKHZhbHVlKSkgeworICAgICAgICB2YWx1ZSA9
IGdpdmVNZXRob2RTdXBlcihiYXNlLCBrZXksIHZhbHVlLCB2YWx1ZXMsIGRlc2NzKTsKKyAgICAg
IH0KKworICAgICAgZGVzY3Nba2V5XSA9IHVuZGVmaW5lZDsKKyAgICAgIHZhbHVlc1trZXldID0g
dmFsdWU7CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gbWVyZ2VNaXhpbnMobWl4aW5zLCBtLCBk
ZXNjcywgdmFsdWVzLCBiYXNlLCBrZXlzKSB7CisgICAgdmFyIGN1cnJlbnRNaXhpbiwgcHJvcHMs
IGtleSwgY29uY2F0cywgbWVyZ2luZ3MsIG1ldGE7CisKKyAgICBmdW5jdGlvbiByZW1vdmVLZXlz
KGtleU5hbWUpIHsKKyAgICAgIGRlbGV0ZSBkZXNjc1trZXlOYW1lXTsKKyAgICAgIGRlbGV0ZSB2
YWx1ZXNba2V5TmFtZV07CisgICAgfQorCisgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBtaXhpbnMu
bGVuZ3RoOyBpIDwgbDsgaSsrKSB7CisgICAgICBjdXJyZW50TWl4aW4gPSBtaXhpbnNbaV07Cisg
ICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnRXhwZWN0ZWQgaGFzaCBvciBNaXhpbiBpbnN0
YW5jZSwgZ290ICcgKyBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoY3VycmVudE1peGlu
KSwgdHlwZW9mIGN1cnJlbnRNaXhpbiA9PT0gJ29iamVjdCcgJiYgY3VycmVudE1peGluICE9PSBu
dWxsICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjdXJyZW50TWl4aW4pICE9PSAn
W29iamVjdCBBcnJheV0nKTsKKworICAgICAgcHJvcHMgPSBtaXhpblByb3BlcnRpZXMobSwgY3Vy
cmVudE1peGluKTsKKyAgICAgIGlmIChwcm9wcyA9PT0gQ09OVElOVUUpIHsKKyAgICAgICAgY29u
dGludWU7CisgICAgICB9CisKKyAgICAgIGlmIChwcm9wcykgeworICAgICAgICBtZXRhID0gX2Vt
YmVyTWV0YWxNZXRhLm1ldGEoYmFzZSk7CisgICAgICAgIGlmIChiYXNlLndpbGxNZXJnZU1peGlu
KSB7CisgICAgICAgICAgYmFzZS53aWxsTWVyZ2VNaXhpbihwcm9wcyk7CisgICAgICAgIH0KKyAg
ICAgICAgY29uY2F0cyA9IGNvbmNhdGVuYXRlZE1peGluUHJvcGVydGllcygnY29uY2F0ZW5hdGVk
UHJvcGVydGllcycsIHByb3BzLCB2YWx1ZXMsIGJhc2UpOworICAgICAgICBtZXJnaW5ncyA9IGNv
bmNhdGVuYXRlZE1peGluUHJvcGVydGllcygnbWVyZ2VkUHJvcGVydGllcycsIHByb3BzLCB2YWx1
ZXMsIGJhc2UpOworCisgICAgICAgIGZvciAoa2V5IGluIHByb3BzKSB7CisgICAgICAgICAgaWYg
KCFwcm9wcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICB9CisgICAgICAgICAga2V5cy5wdXNoKGtleSk7CisgICAgICAgICAgYWRkTm9ybWFs
aXplZFByb3BlcnR5KGJhc2UsIGtleSwgcHJvcHNba2V5XSwgbWV0YSwgZGVzY3MsIHZhbHVlcywg
Y29uY2F0cywgbWVyZ2luZ3MpOworICAgICAgICB9CisKKyAgICAgICAgLy8gbWFudWFsbHkgY29w
eSB0b1N0cmluZygpIGJlY2F1c2Ugc29tZSBKUyBlbmdpbmVzIGRvIG5vdCBlbnVtZXJhdGUgaXQK
KyAgICAgICAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KCd0b1N0cmluZycpKSB7CisgICAgICAg
ICAgYmFzZS50b1N0cmluZyA9IHByb3BzLnRvU3RyaW5nOworICAgICAgICB9CisgICAgICB9IGVs
c2UgaWYgKGN1cnJlbnRNaXhpbi5taXhpbnMpIHsKKyAgICAgICAgbWVyZ2VNaXhpbnMoY3VycmVu
dE1peGluLm1peGlucywgbSwgZGVzY3MsIHZhbHVlcywgYmFzZSwga2V5cyk7CisgICAgICAgIGlm
IChjdXJyZW50TWl4aW4uX3dpdGhvdXQpIHsKKyAgICAgICAgICBjdXJyZW50TWl4aW4uX3dpdGhv
dXQuZm9yRWFjaChyZW1vdmVLZXlzKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQor
CisgIHZhciBJU19CSU5ESU5HID0gL14uK0JpbmRpbmckLzsKKworICBmdW5jdGlvbiBkZXRlY3RC
aW5kaW5nKG9iaiwga2V5LCB2YWx1ZSwgbSkgeworICAgIGlmIChJU19CSU5ESU5HLnRlc3Qoa2V5
KSkgeworICAgICAgbS53cml0ZUJpbmRpbmdzKGtleSwgdmFsdWUpOworICAgIH0KKyAgfQorCisg
IGZ1bmN0aW9uIGNvbm5lY3RTdHJlYW1CaW5kaW5nKG9iaiwga2V5LCBzdHJlYW0pIHsKKyAgICB2
YXIgb25Ob3RpZnkgPSBmdW5jdGlvbiAoc3RyZWFtKSB7CisgICAgICBfZW1iZXJNZXRhbE9ic2Vy
dmVyLl9zdXNwZW5kT2JzZXJ2ZXIob2JqLCBrZXksIG51bGwsIGRpZENoYW5nZSwgZnVuY3Rpb24g
KCkgeworICAgICAgICBfZW1iZXJNZXRhbFByb3BlcnR5X3NldC50cnlTZXQob2JqLCBrZXksIHN0
cmVhbS52YWx1ZSgpKTsKKyAgICAgIH0pOworICAgIH07CisKKyAgICB2YXIgZGlkQ2hhbmdlID0g
ZnVuY3Rpb24gKCkgeworICAgICAgc3RyZWFtLnNldFZhbHVlKF9lbWJlck1ldGFsUHJvcGVydHlf
Z2V0LmdldChvYmosIGtleSksIG9uTm90aWZ5KTsKKyAgICB9OworCisgICAgLy8gSW5pdGlhbGl6
ZSB2YWx1ZQorICAgIF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LnNldChvYmosIGtleSwgc3RyZWFt
LnZhbHVlKCkpOworCisgICAgX2VtYmVyTWV0YWxPYnNlcnZlci5hZGRPYnNlcnZlcihvYmosIGtl
eSwgbnVsbCwgZGlkQ2hhbmdlKTsKKworICAgIHN0cmVhbS5zdWJzY3JpYmUob25Ob3RpZnkpOwor
CisgICAgaWYgKG9iai5fc3RyZWFtQmluZGluZ1N1YnNjcmlwdGlvbnMgPT09IHVuZGVmaW5lZCkg
eworICAgICAgb2JqLl9zdHJlYW1CaW5kaW5nU3Vic2NyaXB0aW9ucyA9IG5ldyBfZW1iZXJNZXRh
bEVtcHR5X29iamVjdC5kZWZhdWx0KCk7CisgICAgfQorCisgICAgb2JqLl9zdHJlYW1CaW5kaW5n
U3Vic2NyaXB0aW9uc1trZXldID0gb25Ob3RpZnk7CisgIH0KKworICBmdW5jdGlvbiBjb25uZWN0
QmluZGluZ3Mob2JqLCBtKSB7CisgICAgLy8gVE9ETyBNaXhpbi5hcHBseShpbnN0YW5jZSkgc2hv
dWxkIGRpc2Nvbm5lY3QgYmluZGluZyBpZiBleGlzdHMKKyAgICBtLmZvckVhY2hCaW5kaW5ncyhm
dW5jdGlvbiAoa2V5LCBiaW5kaW5nKSB7CisgICAgICBpZiAoYmluZGluZykgeworICAgICAgICB2
YXIgdG8gPSBrZXkuc2xpY2UoMCwgLTcpOyAvLyBzdHJpcCBCaW5kaW5nIG9mZiBlbmQKKyAgICAg
ICAgaWYgKF9lbWJlck1ldGFsU3RyZWFtc1V0aWxzLmlzU3RyZWFtKGJpbmRpbmcpKSB7CisgICAg
ICAgICAgY29ubmVjdFN0cmVhbUJpbmRpbmcob2JqLCB0bywgYmluZGluZyk7CisgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9IGVsc2UgaWYgKGJpbmRpbmcgaW5zdGFuY2VvZiBfZW1iZXJNZXRh
bEJpbmRpbmcuQmluZGluZykgeworICAgICAgICAgIGJpbmRpbmcgPSBiaW5kaW5nLmNvcHkoKTsg
Ly8gY29weSBwcm90b3R5cGVzJyBpbnN0YW5jZQorICAgICAgICAgIGJpbmRpbmcudG8odG8pOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgIC8vIGJpbmRpbmcgaXMgc3RyaW5nIHBhdGgKKyAg
ICAgICAgICBiaW5kaW5nID0gbmV3IF9lbWJlck1ldGFsQmluZGluZy5CaW5kaW5nKHRvLCBiaW5k
aW5nKTsKKyAgICAgICAgfQorICAgICAgICBiaW5kaW5nLmNvbm5lY3Qob2JqKTsKKyAgICAgICAg
b2JqW2tleV0gPSBiaW5kaW5nOworICAgICAgfQorICAgIH0pOworICAgIC8vIG1hcmsgYXMgYXBw
bGllZAorICAgIG0uY2xlYXJCaW5kaW5ncygpOworICB9CisKKyAgZnVuY3Rpb24gZmluaXNoUGFy
dGlhbChvYmosIG0pIHsKKyAgICBjb25uZWN0QmluZGluZ3Mob2JqLCBtIHx8IF9lbWJlck1ldGFs
TWV0YS5tZXRhKG9iaikpOworICAgIHJldHVybiBvYmo7CisgIH0KKworICBmdW5jdGlvbiBmb2xs
b3dBbGlhcyhvYmosIGRlc2MsIG0sIGRlc2NzLCB2YWx1ZXMpIHsKKyAgICB2YXIgYWx0S2V5ID0g
ZGVzYy5tZXRob2ROYW1lOworICAgIHZhciB2YWx1ZTsKKyAgICB2YXIgcG9zc2libGVEZXNjOwor
ICAgIGlmIChkZXNjc1thbHRLZXldIHx8IHZhbHVlc1thbHRLZXldKSB7CisgICAgICB2YWx1ZSA9
IHZhbHVlc1thbHRLZXldOworICAgICAgZGVzYyA9IGRlc2NzW2FsdEtleV07CisgICAgfSBlbHNl
IGlmICgocG9zc2libGVEZXNjID0gb2JqW2FsdEtleV0pICYmIHBvc3NpYmxlRGVzYyAhPT0gbnVs
bCAmJiB0eXBlb2YgcG9zc2libGVEZXNjID09PSAnb2JqZWN0JyAmJiBwb3NzaWJsZURlc2MuaXNE
ZXNjcmlwdG9yKSB7CisgICAgICBkZXNjID0gcG9zc2libGVEZXNjOworICAgICAgdmFsdWUgPSB1
bmRlZmluZWQ7CisgICAgfSBlbHNlIHsKKyAgICAgIGRlc2MgPSB1bmRlZmluZWQ7CisgICAgICB2
YWx1ZSA9IG9ialthbHRLZXldOworICAgIH0KKworICAgIHJldHVybiB7IGRlc2M6IGRlc2MsIHZh
bHVlOiB2YWx1ZSB9OworICB9CisKKyAgZnVuY3Rpb24gdXBkYXRlT2JzZXJ2ZXJzQW5kTGlzdGVu
ZXJzKG9iaiwga2V5LCBvYnNlcnZlck9yTGlzdGVuZXIsIHBhdGhzS2V5LCB1cGRhdGVNZXRob2Qp
IHsKKyAgICB2YXIgcGF0aHMgPSBvYnNlcnZlck9yTGlzdGVuZXJbcGF0aHNLZXldOworCisgICAg
aWYgKHBhdGhzKSB7CisgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHBhdGhzLmxlbmd0aDsgaSA8
IGw7IGkrKykgeworICAgICAgICB1cGRhdGVNZXRob2Qob2JqLCBwYXRoc1tpXSwgbnVsbCwga2V5
KTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBmdW5jdGlvbiByZXBsYWNlT2JzZXJ2ZXJzQW5k
TGlzdGVuZXJzKG9iaiwga2V5LCBvYnNlcnZlck9yTGlzdGVuZXIpIHsKKyAgICB2YXIgcHJldiA9
IG9ialtrZXldOworCisgICAgaWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiBwcmV2KSB7CisgICAg
ICB1cGRhdGVPYnNlcnZlcnNBbmRMaXN0ZW5lcnMob2JqLCBrZXksIHByZXYsICdfX2VtYmVyX29i
c2VydmVzQmVmb3JlX18nLCBfZW1iZXJNZXRhbE9ic2VydmVyLl9yZW1vdmVCZWZvcmVPYnNlcnZl
cik7CisgICAgICB1cGRhdGVPYnNlcnZlcnNBbmRMaXN0ZW5lcnMob2JqLCBrZXksIHByZXYsICdf
X2VtYmVyX29ic2VydmVzX18nLCBfZW1iZXJNZXRhbE9ic2VydmVyLnJlbW92ZU9ic2VydmVyKTsK
KyAgICAgIHVwZGF0ZU9ic2VydmVyc0FuZExpc3RlbmVycyhvYmosIGtleSwgcHJldiwgJ19fZW1i
ZXJfbGlzdGVuc19fJywgX2VtYmVyTWV0YWxFdmVudHMucmVtb3ZlTGlzdGVuZXIpOworICAgIH0K
KworICAgIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2Ygb2JzZXJ2ZXJPckxpc3RlbmVyKSB7Cisg
ICAgICB1cGRhdGVPYnNlcnZlcnNBbmRMaXN0ZW5lcnMob2JqLCBrZXksIG9ic2VydmVyT3JMaXN0
ZW5lciwgJ19fZW1iZXJfb2JzZXJ2ZXNCZWZvcmVfXycsIF9lbWJlck1ldGFsT2JzZXJ2ZXIuX2Fk
ZEJlZm9yZU9ic2VydmVyKTsKKyAgICAgIHVwZGF0ZU9ic2VydmVyc0FuZExpc3RlbmVycyhvYmos
IGtleSwgb2JzZXJ2ZXJPckxpc3RlbmVyLCAnX19lbWJlcl9vYnNlcnZlc19fJywgX2VtYmVyTWV0
YWxPYnNlcnZlci5hZGRPYnNlcnZlcik7CisgICAgICB1cGRhdGVPYnNlcnZlcnNBbmRMaXN0ZW5l
cnMob2JqLCBrZXksIG9ic2VydmVyT3JMaXN0ZW5lciwgJ19fZW1iZXJfbGlzdGVuc19fJywgX2Vt
YmVyTWV0YWxFdmVudHMuYWRkTGlzdGVuZXIpOworICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIGFw
cGx5TWl4aW4ob2JqLCBtaXhpbnMsIHBhcnRpYWwpIHsKKyAgICB2YXIgZGVzY3MgPSB7fTsKKyAg
ICB2YXIgdmFsdWVzID0ge307CisgICAgdmFyIG0gPSBfZW1iZXJNZXRhbE1ldGEubWV0YShvYmop
OworICAgIHZhciBrZXlzID0gW107CisgICAgdmFyIGtleSwgdmFsdWUsIGRlc2M7CisKKyAgICBv
YmouX3N1cGVyID0gUk9PVDsKKworICAgIC8vIEdvIHRocm91Z2ggYWxsIG1peGlucyBhbmQgaGFz
aGVzIHBhc3NlZCBpbiwgYW5kOgorICAgIC8vCisgICAgLy8gKiBIYW5kbGUgY29uY2F0ZW5hdGVk
IHByb3BlcnRpZXMKKyAgICAvLyAqIEhhbmRsZSBtZXJnZWQgcHJvcGVydGllcworICAgIC8vICog
U2V0IHVwIF9zdXBlciB3cmFwcGluZyBpZiBuZWNlc3NhcnkKKyAgICAvLyAqIFNldCB1cCBjb21w
dXRlZCBwcm9wZXJ0eSBkZXNjcmlwdG9ycworICAgIC8vICogQ29weWluZyBgdG9TdHJpbmdgIGlu
IGJyb2tlbiBicm93c2VycworICAgIG1lcmdlTWl4aW5zKG1peGlucywgbSwgZGVzY3MsIHZhbHVl
cywgb2JqLCBrZXlzKTsKKworICAgIGZvciAodmFyIGkgPSAwLCBsID0ga2V5cy5sZW5ndGg7IGkg
PCBsOyBpKyspIHsKKyAgICAgIGtleSA9IGtleXNbaV07CisgICAgICBpZiAoa2V5ID09PSAnY29u
c3RydWN0b3InIHx8ICF2YWx1ZXMuaGFzT3duUHJvcGVydHkoa2V5KSkgeworICAgICAgICBjb250
aW51ZTsKKyAgICAgIH0KKworICAgICAgZGVzYyA9IGRlc2NzW2tleV07CisgICAgICB2YWx1ZSA9
IHZhbHVlc1trZXldOworCisgICAgICBpZiAoZGVzYyA9PT0gUkVRVUlSRUQpIHsKKyAgICAgICAg
Y29udGludWU7CisgICAgICB9CisKKyAgICAgIHdoaWxlIChkZXNjICYmIGRlc2MgaW5zdGFuY2Vv
ZiBBbGlhcykgeworICAgICAgICB2YXIgZm9sbG93ZWQgPSBmb2xsb3dBbGlhcyhvYmosIGRlc2Ms
IG0sIGRlc2NzLCB2YWx1ZXMpOworICAgICAgICBkZXNjID0gZm9sbG93ZWQuZGVzYzsKKyAgICAg
ICAgdmFsdWUgPSBmb2xsb3dlZC52YWx1ZTsKKyAgICAgIH0KKworICAgICAgaWYgKGRlc2MgPT09
IHVuZGVmaW5lZCAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgfQorCisgICAgICByZXBsYWNlT2JzZXJ2ZXJzQW5kTGlzdGVuZXJzKG9iaiwga2V5LCB2
YWx1ZSk7CisgICAgICBkZXRlY3RCaW5kaW5nKG9iaiwga2V5LCB2YWx1ZSwgbSk7CisgICAgICBf
ZW1iZXJNZXRhbFByb3BlcnRpZXMuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIGRlc2MsIHZhbHVl
LCBtKTsKKyAgICB9CisKKyAgICBpZiAoIXBhcnRpYWwpIHsKKyAgICAgIC8vIGRvbid0IGFwcGx5
IHRvIHByb3RvdHlwZQorICAgICAgZmluaXNoUGFydGlhbChvYmosIG0pOworICAgIH0KKworICAg
IHJldHVybiBvYmo7CisgIH0KKworICAvKioKKyAgICBAbWV0aG9kIG1peGluCisgICAgQGZvciBF
bWJlcgorICAgIEBwYXJhbSBvYmoKKyAgICBAcGFyYW0gbWl4aW5zKgorICAgIEByZXR1cm4gb2Jq
CisgICAgQHByaXZhdGUKKyAgKi8KKworICBmdW5jdGlvbiBtaXhpbihvYmopIHsKKyAgICBmb3Ig
KHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4gPiAxID8gX2xl
biAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHsKKyAgICAgIGFyZ3Nb
X2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldOworICAgIH0KKworICAgIGFwcGx5TWl4aW4ob2Jq
LCBhcmdzLCBmYWxzZSk7CisgICAgcmV0dXJuIG9iajsKKyAgfQorCisgIC8qKgorICAgIFRoZSBg
RW1iZXIuTWl4aW5gIGNsYXNzIGFsbG93cyB5b3UgdG8gY3JlYXRlIG1peGlucywgd2hvc2UgcHJv
cGVydGllcyBjYW4gYmUKKyAgICBhZGRlZCB0byBvdGhlciBjbGFzc2VzLiBGb3IgaW5zdGFuY2Us
CisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAgICBBcHAuRWRpdGFibGUgPSBFbWJlci5NaXhpbi5j
cmVhdGUoeworICAgICAgZWRpdDogZnVuY3Rpb24oKSB7CisgICAgICAgIGNvbnNvbGUubG9nKCdz
dGFydGluZyB0byBlZGl0Jyk7CisgICAgICAgIHRoaXMuc2V0KCdpc0VkaXRpbmcnLCB0cnVlKTsK
KyAgICAgIH0sCisgICAgICBpc0VkaXRpbmc6IGZhbHNlCisgICAgfSk7CisgIAorICAgIC8vIE1p
eCBtaXhpbnMgaW50byBjbGFzc2VzIGJ5IHBhc3NpbmcgdGhlbSBhcyB0aGUgZmlyc3QgYXJndW1l
bnRzIHRvCisgICAgLy8gLmV4dGVuZC4KKyAgICBBcHAuQ29tbWVudFZpZXcgPSBFbWJlci5WaWV3
LmV4dGVuZChBcHAuRWRpdGFibGUsIHsKKyAgICAgIHRlbXBsYXRlOiBFbWJlci5IYW5kbGViYXJz
LmNvbXBpbGUoJ3t7I2lmIHZpZXcuaXNFZGl0aW5nfX0uLi57e2Vsc2V9fS4uLnt7L2lmfX0nKQor
ICAgIH0pOworICAKKyAgICBjb21tZW50VmlldyA9IEFwcC5Db21tZW50Vmlldy5jcmVhdGUoKTsK
KyAgICBjb21tZW50Vmlldy5lZGl0KCk7IC8vIG91dHB1dHMgJ3N0YXJ0aW5nIHRvIGVkaXQnCisg
ICAgYGBgCisgIAorICAgIE5vdGUgdGhhdCBNaXhpbnMgYXJlIGNyZWF0ZWQgd2l0aCBgRW1iZXIu
TWl4aW4uY3JlYXRlYCwgbm90CisgICAgYEVtYmVyLk1peGluLmV4dGVuZGAuCisgIAorICAgIE5v
dGUgdGhhdCBtaXhpbnMgZXh0ZW5kIGEgY29uc3RydWN0b3IncyBwcm90b3R5cGUgc28gYXJyYXlz
IGFuZCBvYmplY3QgbGl0ZXJhbHMKKyAgICBkZWZpbmVkIGFzIHByb3BlcnRpZXMgd2lsbCBiZSBz
aGFyZWQgYW1vbmdzdCBvYmplY3RzIHRoYXQgaW1wbGVtZW50IHRoZSBtaXhpbi4KKyAgICBJZiB5
b3Ugd2FudCB0byBkZWZpbmUgYSBwcm9wZXJ0eSBpbiBhIG1peGluIHRoYXQgaXMgbm90IHNoYXJl
ZCwgeW91IGNhbiBkZWZpbmUKKyAgICBpdCBlaXRoZXIgYXMgYSBjb21wdXRlZCBwcm9wZXJ0eSBv
ciBoYXZlIGl0IGJlIGNyZWF0ZWQgb24gaW5pdGlhbGl6YXRpb24gb2YgdGhlIG9iamVjdC4KKyAg
CisgICAgYGBgamF2YXNjcmlwdAorICAgIC8vZmlsdGVycyBhcnJheSB3aWxsIGJlIHNoYXJlZCBh
bW9uZ3N0IGFueSBvYmplY3QgaW1wbGVtZW50aW5nIG1peGluCisgICAgQXBwLkZpbHRlcmFibGUg
PSBFbWJlci5NaXhpbi5jcmVhdGUoeworICAgICAgZmlsdGVyczogRW1iZXIuQSgpCisgICAgfSk7
CisgIAorICAgIC8vZmlsdGVycyB3aWxsIGJlIGEgc2VwYXJhdGUgIGFycmF5IGZvciBldmVyeSBv
YmplY3QgaW1wbGVtZW50aW5nIHRoZSBtaXhpbgorICAgIEFwcC5GaWx0ZXJhYmxlID0gRW1iZXIu
TWl4aW4uY3JlYXRlKHsKKyAgICAgIGZpbHRlcnM6IEVtYmVyLmNvbXB1dGVkKGZ1bmN0aW9uKCkg
e3JldHVybiBFbWJlci5BKCk7fSkKKyAgICB9KTsKKyAgCisgICAgLy9maWx0ZXJzIHdpbGwgYmUg
Y3JlYXRlZCBhcyBhIHNlcGFyYXRlIGFycmF5IGR1cmluZyB0aGUgb2JqZWN0J3MgaW5pdGlhbGl6
YXRpb24KKyAgICBBcHAuRmlsdGVyYWJsZSA9IEVtYmVyLk1peGluLmNyZWF0ZSh7CisgICAgICBp
bml0OiBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5fc3VwZXIoLi4uYXJndW1lbnRzKTsKKyAg
ICAgICAgdGhpcy5zZXQoImZpbHRlcnMiLCBFbWJlci5BKCkpOworICAgICAgfQorICAgIH0pOwor
ICAgIGBgYAorICAKKyAgICBAY2xhc3MgTWl4aW4KKyAgICBAbmFtZXNwYWNlIEVtYmVyCisgICAg
QHB1YmxpYworICAqLworCisgIGZ1bmN0aW9uIE1peGluKGFyZ3MsIHByb3BlcnRpZXMpIHsKKyAg
ICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzOworCisgICAgdmFyIGxlbmd0aCA9IGFyZ3Mg
JiYgYXJncy5sZW5ndGg7CisKKyAgICBpZiAobGVuZ3RoID4gMCkgeworICAgICAgdmFyIG0gPSBu
ZXcgQXJyYXkobGVuZ3RoKTsKKworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkr
KykgeworICAgICAgICB2YXIgeCA9IGFyZ3NbaV07CisgICAgICAgIGlmICh4IGluc3RhbmNlb2Yg
TWl4aW4pIHsKKyAgICAgICAgICBtW2ldID0geDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICBtW2ldID0gbmV3IE1peGluKHVuZGVmaW5lZCwgeCk7CisgICAgICAgIH0KKyAgICAgIH0KKwor
ICAgICAgdGhpcy5taXhpbnMgPSBtOworICAgIH0gZWxzZSB7CisgICAgICB0aGlzLm1peGlucyA9
IHVuZGVmaW5lZDsKKyAgICB9CisgICAgdGhpcy5vd25lckNvbnN0cnVjdG9yID0gdW5kZWZpbmVk
OworICAgIHRoaXMuX3dpdGhvdXQgPSB1bmRlZmluZWQ7CisgICAgdGhpc1tfZW1iZXJNZXRhbFV0
aWxzLkdVSURfS0VZXSA9IG51bGw7CisgICAgdGhpc1tfZW1iZXJNZXRhbFV0aWxzLkdVSURfS0VZ
ICsgJ19uYW1lJ10gPSBudWxsOworICAgIF9lbWJlck1ldGFsRGVidWcuZGVidWdTZWFsKHRoaXMp
OworICB9CisKKyAgTWl4aW4uX2FwcGx5ID0gYXBwbHlNaXhpbjsKKworICBNaXhpbi5hcHBseVBh
cnRpYWwgPSBmdW5jdGlvbiAob2JqKSB7CisgICAgdmFyIGFyZ3MgPSBhX3NsaWNlLmNhbGwoYXJn
dW1lbnRzLCAxKTsKKyAgICByZXR1cm4gYXBwbHlNaXhpbihvYmosIGFyZ3MsIHRydWUpOworICB9
OworCisgIE1peGluLmZpbmlzaFBhcnRpYWwgPSBmaW5pc2hQYXJ0aWFsOworCisgIC8vIEVTNlRP
RE86IHRoaXMgcmVsaWVzIG9uIGEgZ2xvYmFsIHN0YXRlPworICBfZW1iZXJNZXRhbENvcmUuZGVm
YXVsdC5hbnlVbnByb2Nlc3NlZE1peGlucyA9IGZhbHNlOworCisgIC8qKgorICAgIEBtZXRob2Qg
Y3JlYXRlCisgICAgQHN0YXRpYworICAgIEBwYXJhbSBhcmd1bWVudHMqCisgICAgQHB1YmxpYwor
ICAqLworICBNaXhpbi5jcmVhdGUgPSBmdW5jdGlvbiAoKSB7CisgICAgLy8gRVM2VE9ETzogdGhp
cyByZWxpZXMgb24gYSBnbG9iYWwgc3RhdGU/CisgICAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQu
YW55VW5wcm9jZXNzZWRNaXhpbnMgPSB0cnVlOworICAgIHZhciBNID0gdGhpczsKKworICAgIGZv
ciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4yKSwgX2tl
eTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7CisgICAgICBhcmdzW19rZXkyXSA9IGFy
Z3VtZW50c1tfa2V5Ml07CisgICAgfQorCisgICAgcmV0dXJuIG5ldyBNKGFyZ3MsIHVuZGVmaW5l
ZCk7CisgIH07CisKKyAgdmFyIE1peGluUHJvdG90eXBlID0gTWl4aW4ucHJvdG90eXBlOworCisg
IC8qKgorICAgIEBtZXRob2QgcmVvcGVuCisgICAgQHBhcmFtIGFyZ3VtZW50cyoKKyAgICBAcHJp
dmF0ZQorICAqLworICBNaXhpblByb3RvdHlwZS5yZW9wZW4gPSBmdW5jdGlvbiAoKSB7CisgICAg
dmFyIGN1cnJlbnRNaXhpbjsKKworICAgIGlmICh0aGlzLnByb3BlcnRpZXMpIHsKKyAgICAgIGN1
cnJlbnRNaXhpbiA9IG5ldyBNaXhpbih1bmRlZmluZWQsIHRoaXMucHJvcGVydGllcyk7CisgICAg
ICB0aGlzLnByb3BlcnRpZXMgPSB1bmRlZmluZWQ7CisgICAgICB0aGlzLm1peGlucyA9IFtjdXJy
ZW50TWl4aW5dOworICAgIH0gZWxzZSBpZiAoIXRoaXMubWl4aW5zKSB7CisgICAgICB0aGlzLm1p
eGlucyA9IFtdOworICAgIH0KKworICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOworICAg
IHZhciBtaXhpbnMgPSB0aGlzLm1peGluczsKKyAgICB2YXIgaWR4OworCisgICAgZm9yIChpZHgg
PSAwOyBpZHggPCBsZW47IGlkeCsrKSB7CisgICAgICBjdXJyZW50TWl4aW4gPSBhcmd1bWVudHNb
aWR4XTsKKyAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdFeHBlY3RlZCBoYXNoIG9yIE1p
eGluIGluc3RhbmNlLCBnb3QgJyArIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjdXJy
ZW50TWl4aW4pLCB0eXBlb2YgY3VycmVudE1peGluID09PSAnb2JqZWN0JyAmJiBjdXJyZW50TWl4
aW4gIT09IG51bGwgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGN1cnJlbnRNaXhp
bikgIT09ICdbb2JqZWN0IEFycmF5XScpOworCisgICAgICBpZiAoY3VycmVudE1peGluIGluc3Rh
bmNlb2YgTWl4aW4pIHsKKyAgICAgICAgbWl4aW5zLnB1c2goY3VycmVudE1peGluKTsKKyAgICAg
IH0gZWxzZSB7CisgICAgICAgIG1peGlucy5wdXNoKG5ldyBNaXhpbih1bmRlZmluZWQsIGN1cnJl
bnRNaXhpbikpOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0aGlzOworICB9OworCisg
IC8qKgorICAgIEBtZXRob2QgYXBwbHkKKyAgICBAcGFyYW0gb2JqCisgICAgQHJldHVybiBhcHBs
aWVkIG9iamVjdAorICAgIEBwcml2YXRlCisgICovCisgIE1peGluUHJvdG90eXBlLmFwcGx5ID0g
ZnVuY3Rpb24gKG9iaikgeworICAgIHJldHVybiBhcHBseU1peGluKG9iaiwgW3RoaXNdLCBmYWxz
ZSk7CisgIH07CisKKyAgTWl4aW5Qcm90b3R5cGUuYXBwbHlQYXJ0aWFsID0gZnVuY3Rpb24gKG9i
aikgeworICAgIHJldHVybiBhcHBseU1peGluKG9iaiwgW3RoaXNdLCB0cnVlKTsKKyAgfTsKKwor
ICBNaXhpblByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIE1peGluX3RvU3RyaW5nKCkgewor
ICAgIHJldHVybiAnKHVua25vd24gbWl4aW4pJzsKKyAgfTsKKworICBmdW5jdGlvbiBfZGV0ZWN0
KGN1ck1peGluLCB0YXJnZXRNaXhpbiwgc2VlbikgeworICAgIHZhciBndWlkID0gX2VtYmVyTWV0
YWxVdGlscy5ndWlkRm9yKGN1ck1peGluKTsKKworICAgIGlmIChzZWVuW2d1aWRdKSB7CisgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHNlZW5bZ3VpZF0gPSB0cnVlOworCisgICAgaWYg
KGN1ck1peGluID09PSB0YXJnZXRNaXhpbikgeworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIHZhciBtaXhpbnMgPSBjdXJNaXhpbi5taXhpbnM7CisgICAgdmFyIGxvYyA9IG1peGlucyA/
IG1peGlucy5sZW5ndGggOiAwOworICAgIHdoaWxlICgtLWxvYyA+PSAwKSB7CisgICAgICBpZiAo
X2RldGVjdChtaXhpbnNbbG9jXSwgdGFyZ2V0TWl4aW4sIHNlZW4pKSB7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICAvKioK
KyAgICBAbWV0aG9kIGRldGVjdAorICAgIEBwYXJhbSBvYmoKKyAgICBAcmV0dXJuIHtCb29sZWFu
fQorICAgIEBwcml2YXRlCisgICovCisgIE1peGluUHJvdG90eXBlLmRldGVjdCA9IGZ1bmN0aW9u
IChvYmopIHsKKyAgICBpZiAoIW9iaikgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICBpZiAob2JqIGluc3RhbmNlb2YgTWl4aW4pIHsKKyAgICAgIHJldHVybiBfZGV0ZWN0KG9iaiwg
dGhpcywge30pOworICAgIH0KKyAgICB2YXIgbSA9IF9lbWJlck1ldGFsTWV0YS5wZWVrTWV0YShv
YmopOworICAgIGlmICghbSkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1
cm4gISFtLnBlZWtNaXhpbnMoX2VtYmVyTWV0YWxVdGlscy5ndWlkRm9yKHRoaXMpKTsKKyAgfTsK
KworICBNaXhpblByb3RvdHlwZS53aXRob3V0ID0gZnVuY3Rpb24gKCkgeworICAgIHZhciByZXQg
PSBuZXcgTWl4aW4oW3RoaXNdKTsKKworICAgIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxl
bmd0aCwgYXJncyA9IEFycmF5KF9sZW4zKSwgX2tleTMgPSAwOyBfa2V5MyA8IF9sZW4zOyBfa2V5
MysrKSB7CisgICAgICBhcmdzW19rZXkzXSA9IGFyZ3VtZW50c1tfa2V5M107CisgICAgfQorCisg
ICAgcmV0Ll93aXRob3V0ID0gYXJnczsKKyAgICByZXR1cm4gcmV0OworICB9OworCisgIGZ1bmN0
aW9uIF9rZXlzKHJldCwgbWl4aW4sIHNlZW4pIHsKKyAgICBpZiAoc2VlbltfZW1iZXJNZXRhbFV0
aWxzLmd1aWRGb3IobWl4aW4pXSkgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzZWVuW19l
bWJlck1ldGFsVXRpbHMuZ3VpZEZvcihtaXhpbildID0gdHJ1ZTsKKworICAgIGlmIChtaXhpbi5w
cm9wZXJ0aWVzKSB7CisgICAgICB2YXIgcHJvcHMgPSBPYmplY3Qua2V5cyhtaXhpbi5wcm9wZXJ0
aWVzKTsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsKKyAg
ICAgICAgdmFyIGtleSA9IHByb3BzW2ldOworICAgICAgICByZXRba2V5XSA9IHRydWU7CisgICAg
ICB9CisgICAgfSBlbHNlIGlmIChtaXhpbi5taXhpbnMpIHsKKyAgICAgIG1peGluLm1peGlucy5m
b3JFYWNoKGZ1bmN0aW9uICh4KSB7CisgICAgICAgIHJldHVybiBfa2V5cyhyZXQsIHgsIHNlZW4p
OworICAgICAgfSk7CisgICAgfQorICB9CisKKyAgTWl4aW5Qcm90b3R5cGUua2V5cyA9IGZ1bmN0
aW9uICgpIHsKKyAgICB2YXIga2V5cyA9IHt9OworICAgIHZhciBzZWVuID0ge307CisKKyAgICBf
a2V5cyhrZXlzLCB0aGlzLCBzZWVuKTsKKyAgICB2YXIgcmV0ID0gT2JqZWN0LmtleXMoa2V5cyk7
CisgICAgcmV0dXJuIHJldDsKKyAgfTsKKworICBfZW1iZXJNZXRhbERlYnVnLmRlYnVnU2VhbChN
aXhpblByb3RvdHlwZSk7CisKKyAgLy8gcmV0dXJucyB0aGUgbWl4aW5zIGN1cnJlbnRseSBhcHBs
aWVkIHRvIHRoZSBzcGVjaWZpZWQgb2JqZWN0CisgIC8vIFRPRE86IE1ha2UgRW1iZXIubWl4aW4K
KyAgTWl4aW4ubWl4aW5zID0gZnVuY3Rpb24gKG9iaikgeworICAgIHZhciBtID0gX2VtYmVyTWV0
YWxNZXRhLnBlZWtNZXRhKG9iaik7CisgICAgdmFyIHJldCA9IFtdOworICAgIGlmICghbSkgewor
ICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICBtLmZvckVhY2hNaXhpbnMoZnVuY3Rpb24g
KGtleSwgY3VycmVudE1peGluKSB7CisgICAgICAvLyBza2lwIHByaW1pdGl2ZSBtaXhpbnMgc2lu
Y2UgdGhlc2UgYXJlIGFsd2F5cyBhbm9ueW1vdXMKKyAgICAgIGlmICghY3VycmVudE1peGluLnBy
b3BlcnRpZXMpIHsKKyAgICAgICAgcmV0LnB1c2goY3VycmVudE1peGluKTsKKyAgICAgIH0KKyAg
ICB9KTsKKworICAgIHJldHVybiByZXQ7CisgIH07CisKKyAgZXhwb3J0cy5SRVFVSVJFRCA9IFJF
UVVJUkVEID0gbmV3IF9lbWJlck1ldGFsUHJvcGVydGllcy5EZXNjcmlwdG9yKCk7CisgIFJFUVVJ
UkVELnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgeworICAgIHJldHVybiAnKFJlcXVpcmVkIFByb3Bl
cnR5KSc7CisgIH07CisKKyAgLyoqCisgICAgRGVub3RlcyBhIHJlcXVpcmVkIHByb3BlcnR5IGZv
ciBhIG1peGluCisgIAorICAgIEBtZXRob2QgcmVxdWlyZWQKKyAgICBAZm9yIEVtYmVyCisgICAg
QHByaXZhdGUKKyAgKi8KKworICBmdW5jdGlvbiByZXF1aXJlZCgpIHsKKyAgICBfZW1iZXJNZXRh
bERlYnVnLmRlcHJlY2F0ZSgnRW1iZXIucmVxdWlyZWQgaXMgZGVwcmVjYXRlZCBhcyBpdHMgYmVo
YXZpb3IgaXMgaW5jb25zaXN0ZW50IGFuZCB1bnJlbGlhYmxlLicsIGZhbHNlLCB7IGlkOiAnZW1i
ZXItbWV0YWwucmVxdWlyZWQnLCB1bnRpbDogJzMuMC4wJyB9KTsKKyAgICByZXR1cm4gUkVRVUlS
RUQ7CisgIH0KKworICBmdW5jdGlvbiBBbGlhcyhtZXRob2ROYW1lKSB7CisgICAgdGhpcy5pc0Rl
c2NyaXB0b3IgPSB0cnVlOworICAgIHRoaXMubWV0aG9kTmFtZSA9IG1ldGhvZE5hbWU7CisgIH0K
KworICBBbGlhcy5wcm90b3R5cGUgPSBuZXcgX2VtYmVyTWV0YWxQcm9wZXJ0aWVzLkRlc2NyaXB0
b3IoKTsKKworICAvKioKKyAgICBNYWtlcyBhIG1ldGhvZCBhdmFpbGFibGUgdmlhIGFuIGFkZGl0
aW9uYWwgbmFtZS4KKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIEFwcC5QZXJzb24gPSBFbWJl
ci5PYmplY3QuZXh0ZW5kKHsKKyAgICAgIG5hbWU6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1
cm4gJ1RvbWh1ZGEgS2F0emRhbGUnOworICAgICAgfSwKKyAgICAgIG1vbmlrZXI6IEVtYmVyLmFs
aWFzTWV0aG9kKCduYW1lJykKKyAgICB9KTsKKyAgCisgICAgdmFyIGdvb2RHdXkgPSBBcHAuUGVy
c29uLmNyZWF0ZSgpOworICAKKyAgICBnb29kR3V5Lm5hbWUoKTsgICAgLy8gJ1RvbWh1ZGEgS2F0
emRhbGUnCisgICAgZ29vZEd1eS5tb25pa2VyKCk7IC8vICdUb21odWRhIEthdHpkYWxlJworICAg
IGBgYAorICAKKyAgICBAbWV0aG9kIGFsaWFzTWV0aG9kCisgICAgQGZvciBFbWJlcgorICAgIEBw
YXJhbSB7U3RyaW5nfSBtZXRob2ROYW1lIG5hbWUgb2YgdGhlIG1ldGhvZCB0byBhbGlhcworICAg
IEBwdWJsaWMKKyAgKi8KKworICBmdW5jdGlvbiBhbGlhc01ldGhvZChtZXRob2ROYW1lKSB7Cisg
ICAgcmV0dXJuIG5ldyBBbGlhcyhtZXRob2ROYW1lKTsKKyAgfQorCisgIC8vIC4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyAgLy8gT0JT
RVJWRVIgSEVMUEVSCisgIC8vCisKKyAgLyoqCisgICAgU3BlY2lmeSBhIG1ldGhvZCB0aGF0IG9i
c2VydmVzIHByb3BlcnR5IGNoYW5nZXMuCisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAgICBFbWJl
ci5PYmplY3QuZXh0ZW5kKHsKKyAgICAgIHZhbHVlT2JzZXJ2ZXI6IEVtYmVyLm9ic2VydmVyKCd2
YWx1ZScsIGZ1bmN0aW9uKCkgeworICAgICAgICAvLyBFeGVjdXRlcyB3aGVuZXZlciB0aGUgInZh
bHVlIiBwcm9wZXJ0eSBjaGFuZ2VzCisgICAgICB9KQorICAgIH0pOworICAgIGBgYAorICAKKyAg
ICBBbHNvIGF2YWlsYWJsZSBhcyBgRnVuY3Rpb24ucHJvdG90eXBlLm9ic2VydmVzYCBpZiBwcm90
b3R5cGUgZXh0ZW5zaW9ucyBhcmUKKyAgICBlbmFibGVkLgorICAKKyAgICBAbWV0aG9kIG9ic2Vy
dmVyCisgICAgQGZvciBFbWJlcgorICAgIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eU5hbWVzKgor
ICAgIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMKKyAgICBAcmV0dXJuIGZ1bmMKKyAgICBAcHVibGlj
CisgICovCisKKyAgZnVuY3Rpb24gb2JzZXJ2ZXIoKSB7CisgICAgZm9yICh2YXIgX2xlbjQgPSBh
cmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbjQpLCBfa2V5NCA9IDA7IF9rZXk0IDwg
X2xlbjQ7IF9rZXk0KyspIHsKKyAgICAgIGFyZ3NbX2tleTRdID0gYXJndW1lbnRzW19rZXk0XTsK
KyAgICB9CisKKyAgICB2YXIgZnVuYyA9IGFyZ3Muc2xpY2UoLTEpWzBdOworICAgIHZhciBwYXRo
czsKKworICAgIHZhciBhZGRXYXRjaGVkUHJvcGVydHkgPSBmdW5jdGlvbiAocGF0aCkgeworICAg
ICAgcGF0aHMucHVzaChwYXRoKTsKKyAgICB9OworICAgIHZhciBfcGF0aHMgPSBhcmdzLnNsaWNl
KDAsIC0xKTsKKworICAgIGlmICh0eXBlb2YgZnVuYyAhPT0gJ2Z1bmN0aW9uJykgeworICAgICAg
Ly8gcmV2ZXJ0IHRvIG9sZCwgc29mdC1kZXByZWNhdGVkIGFyZ3VtZW50IG9yZGVyaW5nCisgICAg
ICBfZW1iZXJNZXRhbERlYnVnLmRlcHJlY2F0ZSgnUGFzc2luZyB0aGUgZGVwZW5kZW50S2V5cyBh
ZnRlciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaW4gRW1iZXIub2JzZXJ2ZXIgaXMgZGVwcmVjYXRl
ZC4gRW5zdXJlIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyB0aGUgbGFzdCBhcmd1bWVudC4nLCBm
YWxzZSwgeyBpZDogJ2VtYmVyLW1ldGFsLm9ic2VydmVyLWFyZ3VtZW50LW9yZGVyJywgdW50aWw6
ICczLjAuMCcgfSk7CisKKyAgICAgIGZ1bmMgPSBhcmdzWzBdOworICAgICAgX3BhdGhzID0gYXJn
cy5zbGljZSgxKTsKKyAgICB9CisKKyAgICBwYXRocyA9IFtdOworCisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBfcGF0aHMubGVuZ3RoOyArK2kpIHsKKyAgICAgIF9lbWJlck1ldGFsRXhwYW5kX3By
b3BlcnRpZXMuZGVmYXVsdChfcGF0aHNbaV0sIGFkZFdhdGNoZWRQcm9wZXJ0eSk7CisgICAgfQor
CisgICAgaWYgKHR5cGVvZiBmdW5jICE9PSAnZnVuY3Rpb24nKSB7CisgICAgICB0aHJvdyBuZXcg
X2VtYmVyTWV0YWxFcnJvci5kZWZhdWx0KCdFbWJlci5vYnNlcnZlciBjYWxsZWQgd2l0aG91dCBh
IGZ1bmN0aW9uJyk7CisgICAgfQorCisgICAgZnVuYy5fX2VtYmVyX29ic2VydmVzX18gPSBwYXRo
czsKKyAgICByZXR1cm4gZnVuYzsKKyAgfQorCisgIC8qKgorICAgIFNwZWNpZnkgYSBtZXRob2Qg
dGhhdCBvYnNlcnZlcyBwcm9wZXJ0eSBjaGFuZ2VzLgorICAKKyAgICBgYGBqYXZhc2NyaXB0Cisg
ICAgRW1iZXIuT2JqZWN0LmV4dGVuZCh7CisgICAgICB2YWx1ZU9ic2VydmVyOiBFbWJlci5pbW1l
ZGlhdGVPYnNlcnZlcigndmFsdWUnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgLy8gRXhlY3V0ZXMg
d2hlbmV2ZXIgdGhlICJ2YWx1ZSIgcHJvcGVydHkgY2hhbmdlcworICAgICAgfSkKKyAgICB9KTsK
KyAgICBgYGAKKyAgCisgICAgSW4gdGhlIGZ1dHVyZSwgYEVtYmVyLm9ic2VydmVyYCBtYXkgYmVj
b21lIGFzeW5jaHJvbm91cy4gSW4gdGhpcyBldmVudCwKKyAgICBgRW1iZXIuaW1tZWRpYXRlT2Jz
ZXJ2ZXJgIHdpbGwgbWFpbnRhaW4gdGhlIHN5bmNocm9ub3VzIGJlaGF2aW9yLgorICAKKyAgICBB
bHNvIGF2YWlsYWJsZSBhcyBgRnVuY3Rpb24ucHJvdG90eXBlLm9ic2VydmVzSW1tZWRpYXRlbHlg
IGlmIHByb3RvdHlwZSBleHRlbnNpb25zIGFyZQorICAgIGVuYWJsZWQuCisgIAorICAgIEBtZXRo
b2QgX2ltbWVkaWF0ZU9ic2VydmVyCisgICAgQGZvciBFbWJlcgorICAgIEBwYXJhbSB7U3RyaW5n
fSBwcm9wZXJ0eU5hbWVzKgorICAgIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMKKyAgICBAZGVwcmVj
YXRlZCBVc2UgYEVtYmVyLm9ic2VydmVyYCBpbnN0ZWFkLgorICAgIEByZXR1cm4gZnVuYworICAg
IEBwcml2YXRlCisgICovCisKKyAgZnVuY3Rpb24gX2ltbWVkaWF0ZU9ic2VydmVyKCkgeworICAg
IF9lbWJlck1ldGFsRGVidWcuZGVwcmVjYXRlKCdVc2FnZSBvZiBgRW1iZXIuaW1tZWRpYXRlT2Jz
ZXJ2ZXJgIGlzIGRlcHJlY2F0ZWQsIHVzZSBgRW1iZXIub2JzZXJ2ZXJgIGluc3RlYWQuJywgZmFs
c2UsIHsgaWQ6ICdlbWJlci1tZXRhbC5pbW1lZGlhdGUtb2JzZXJ2ZXInLCB1bnRpbDogJzMuMC4w
JyB9KTsKKworICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7
IGkrKykgeworICAgICAgdmFyIGFyZyA9IGFyZ3VtZW50c1tpXTsKKyAgICAgIF9lbWJlck1ldGFs
RGVidWcuYXNzZXJ0KCdJbW1lZGlhdGUgb2JzZXJ2ZXJzIG11c3Qgb2JzZXJ2ZSBpbnRlcm5hbCBw
cm9wZXJ0aWVzIG9ubHksIG5vdCBwcm9wZXJ0aWVzIG9uIG90aGVyIG9iamVjdHMuJywgdHlwZW9m
IGFyZyAhPT0gJ3N0cmluZycgfHwgYXJnLmluZGV4T2YoJy4nKSA9PT0gLTEpOworICAgIH0KKwor
ICAgIHJldHVybiBvYnNlcnZlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICB9CisKKyAgLyoq
CisgICAgV2hlbiBvYnNlcnZlcnMgZmlyZSwgdGhleSBhcmUgY2FsbGVkIHdpdGggdGhlIGFyZ3Vt
ZW50cyBgb2JqYCwgYGtleU5hbWVgLgorICAKKyAgICBOb3RlLCBgQGVhY2gucHJvcGVydHlgIG9i
c2VydmVyIGlzIGNhbGxlZCBwZXIgZWFjaCBhZGQgb3IgcmVwbGFjZSBvZiBhbiBlbGVtZW50Cisg
ICAgYW5kIGl0J3Mgbm90IGNhbGxlZCB3aXRoIGEgc3BlY2lmaWMgZW51bWVyYXRpb24gaXRlbS4K
KyAgCisgICAgQSBgX2JlZm9yZU9ic2VydmVyYCBmaXJlcyBiZWZvcmUgYSBwcm9wZXJ0eSBjaGFu
Z2VzLgorICAKKyAgICBBIGBfYmVmb3JlT2JzZXJ2ZXJgIGlzIGFuIGFsdGVybmF0aXZlIGZvcm0g
b2YgYC5vYnNlcnZlc0JlZm9yZSgpYC4KKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIEFwcC5Q
ZXJzb25WaWV3ID0gRW1iZXIuVmlldy5leHRlbmQoeworICAgICAgZnJpZW5kczogW3sgbmFtZTog
J1RvbScgfSwgeyBuYW1lOiAnU3RlZmFuJyB9LCB7IG5hbWU6ICdLcmlzJyB9XSwKKyAgCisgICAg
ICB2YWx1ZURpZENoYW5nZTogRW1iZXIub2JzZXJ2ZXIoJ2NvbnRlbnQudmFsdWUnLCBmdW5jdGlv
bihvYmosIGtleU5hbWUpIHsKKyAgICAgICAgICAvLyBvbmx5IHJ1biBpZiB1cGRhdGluZyBhIHZh
bHVlIGFscmVhZHkgaW4gdGhlIERPTQorICAgICAgICAgIGlmICh0aGlzLmdldCgnc3RhdGUnKSA9
PT0gJ2luRE9NJykgeworICAgICAgICAgICAgdmFyIGNvbG9yID0gb2JqLmdldChrZXlOYW1lKSA+
IHRoaXMuY2hhbmdpbmdGcm9tID8gJ2dyZWVuJyA6ICdyZWQnOworICAgICAgICAgICAgLy8gbG9n
aWMKKyAgICAgICAgICB9CisgICAgICB9KSwKKyAgCisgICAgICBmcmllbmRzRGlkQ2hhbmdlOiBF
bWJlci5vYnNlcnZlcignZnJpZW5kcy5AZWFjaC5uYW1lJywgZnVuY3Rpb24ob2JqLCBrZXlOYW1l
KSB7CisgICAgICAgIC8vIHNvbWUgbG9naWMKKyAgICAgICAgLy8gb2JqLmdldChrZXlOYW1lKSBy
ZXR1cm5zIGZyaWVuZHMgYXJyYXkKKyAgICAgIH0pCisgICAgfSk7CisgICAgYGBgCisgIAorICAg
IEFsc28gYXZhaWxhYmxlIGFzIGBGdW5jdGlvbi5wcm90b3R5cGUub2JzZXJ2ZXNCZWZvcmVgIGlm
IHByb3RvdHlwZSBleHRlbnNpb25zIGFyZQorICAgIGVuYWJsZWQuCisgIAorICAgIEBtZXRob2Qg
YmVmb3JlT2JzZXJ2ZXIKKyAgICBAZm9yIEVtYmVyCisgICAgQHBhcmFtIHtTdHJpbmd9IHByb3Bl
cnR5TmFtZXMqCisgICAgQHBhcmFtIHtGdW5jdGlvbn0gZnVuYworICAgIEByZXR1cm4gZnVuYwor
ICAgIEBkZXByZWNhdGVkCisgICAgQHByaXZhdGUKKyAgKi8KKworICBmdW5jdGlvbiBfYmVmb3Jl
T2JzZXJ2ZXIoKSB7CisgICAgZm9yICh2YXIgX2xlbjUgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdz
ID0gQXJyYXkoX2xlbjUpLCBfa2V5NSA9IDA7IF9rZXk1IDwgX2xlbjU7IF9rZXk1KyspIHsKKyAg
ICAgIGFyZ3NbX2tleTVdID0gYXJndW1lbnRzW19rZXk1XTsKKyAgICB9CisKKyAgICB2YXIgZnVu
YyA9IGFyZ3Muc2xpY2UoLTEpWzBdOworICAgIHZhciBwYXRoczsKKworICAgIHZhciBhZGRXYXRj
aGVkUHJvcGVydHkgPSBmdW5jdGlvbiAocGF0aCkgeworICAgICAgcGF0aHMucHVzaChwYXRoKTsK
KyAgICB9OworCisgICAgdmFyIF9wYXRocyA9IGFyZ3Muc2xpY2UoMCwgLTEpOworCisgICAgaWYg
KHR5cGVvZiBmdW5jICE9PSAnZnVuY3Rpb24nKSB7CisgICAgICAvLyByZXZlcnQgdG8gb2xkLCBz
b2Z0LWRlcHJlY2F0ZWQgYXJndW1lbnQgb3JkZXJpbmcKKworICAgICAgZnVuYyA9IGFyZ3NbMF07
CisgICAgICBfcGF0aHMgPSBhcmdzLnNsaWNlKDEpOworICAgIH0KKworICAgIHBhdGhzID0gW107
CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IF9wYXRocy5sZW5ndGg7ICsraSkgeworICAgICAg
X2VtYmVyTWV0YWxFeHBhbmRfcHJvcGVydGllcy5kZWZhdWx0KF9wYXRoc1tpXSwgYWRkV2F0Y2hl
ZFByb3BlcnR5KTsKKyAgICB9CisKKyAgICBpZiAodHlwZW9mIGZ1bmMgIT09ICdmdW5jdGlvbicp
IHsKKyAgICAgIHRocm93IG5ldyBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5FcnJvcignRW1iZXIu
YmVmb3JlT2JzZXJ2ZXIgY2FsbGVkIHdpdGhvdXQgYSBmdW5jdGlvbicpOworICAgIH0KKworICAg
IGZ1bmMuX19lbWJlcl9vYnNlcnZlc0JlZm9yZV9fID0gcGF0aHM7CisgICAgcmV0dXJuIGZ1bmM7
CisgIH0KKworICBleHBvcnRzLklTX0JJTkRJTkcgPSBJU19CSU5ESU5HOworICBleHBvcnRzLk1p
eGluID0gTWl4aW47CisgIGV4cG9ydHMucmVxdWlyZWQgPSByZXF1aXJlZDsKKyAgZXhwb3J0cy5S
RVFVSVJFRCA9IFJFUVVJUkVEOworfSk7CisvLyB3YXJuLCBhc3NlcnQsIHdyYXAsIGV0OworZW5p
ZmVkKCdlbWJlci1tZXRhbC9vYnNlcnZlcicsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC93YXRj
aGluZycsICdlbWJlci1tZXRhbC9ldmVudHMnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1l
dGFsV2F0Y2hpbmcsIF9lbWJlck1ldGFsRXZlbnRzKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICBl
eHBvcnRzLmFkZE9ic2VydmVyID0gYWRkT2JzZXJ2ZXI7CisgIGV4cG9ydHMub2JzZXJ2ZXJzRm9y
ID0gb2JzZXJ2ZXJzRm9yOworICBleHBvcnRzLnJlbW92ZU9ic2VydmVyID0gcmVtb3ZlT2JzZXJ2
ZXI7CisgIGV4cG9ydHMuX2FkZEJlZm9yZU9ic2VydmVyID0gX2FkZEJlZm9yZU9ic2VydmVyOwor
ICBleHBvcnRzLl9zdXNwZW5kT2JzZXJ2ZXIgPSBfc3VzcGVuZE9ic2VydmVyOworICBleHBvcnRz
Ll9zdXNwZW5kT2JzZXJ2ZXJzID0gX3N1c3BlbmRPYnNlcnZlcnM7CisgIGV4cG9ydHMuX3JlbW92
ZUJlZm9yZU9ic2VydmVyID0gX3JlbW92ZUJlZm9yZU9ic2VydmVyOworCisgIC8qKgorICBAbW9k
dWxlIGVtYmVyLW1ldGFsCisgICovCisKKyAgdmFyIEFGVEVSX09CU0VSVkVSUyA9ICc6Y2hhbmdl
JzsKKyAgdmFyIEJFRk9SRV9PQlNFUlZFUlMgPSAnOmJlZm9yZSc7CisKKyAgZnVuY3Rpb24gY2hh
bmdlRXZlbnQoa2V5TmFtZSkgeworICAgIHJldHVybiBrZXlOYW1lICsgQUZURVJfT0JTRVJWRVJT
OworICB9CisKKyAgZnVuY3Rpb24gYmVmb3JlRXZlbnQoa2V5TmFtZSkgeworICAgIHJldHVybiBr
ZXlOYW1lICsgQkVGT1JFX09CU0VSVkVSUzsKKyAgfQorCisgIC8qKgorICAgIEBtZXRob2QgYWRk
T2JzZXJ2ZXIKKyAgICBAZm9yIEVtYmVyCisgICAgQHBhcmFtIG9iagorICAgIEBwYXJhbSB7U3Ry
aW5nfSBfcGF0aAorICAgIEBwYXJhbSB7T2JqZWN0fEZ1bmN0aW9ufSB0YXJnZXQKKyAgICBAcGFy
YW0ge0Z1bmN0aW9ufFN0cmluZ30gW21ldGhvZF0KKyAgICBAcHVibGljCisgICovCisKKyAgZnVu
Y3Rpb24gYWRkT2JzZXJ2ZXIob2JqLCBfcGF0aCwgdGFyZ2V0LCBtZXRob2QpIHsKKyAgICBfZW1i
ZXJNZXRhbEV2ZW50cy5hZGRMaXN0ZW5lcihvYmosIGNoYW5nZUV2ZW50KF9wYXRoKSwgdGFyZ2V0
LCBtZXRob2QpOworICAgIF9lbWJlck1ldGFsV2F0Y2hpbmcud2F0Y2gob2JqLCBfcGF0aCk7CisK
KyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGZ1bmN0aW9uIG9ic2VydmVyc0ZvcihvYmosIHBh
dGgpIHsKKyAgICByZXR1cm4gX2VtYmVyTWV0YWxFdmVudHMubGlzdGVuZXJzRm9yKG9iaiwgY2hh
bmdlRXZlbnQocGF0aCkpOworICB9CisKKyAgLyoqCisgICAgQG1ldGhvZCByZW1vdmVPYnNlcnZl
cgorICAgIEBmb3IgRW1iZXIKKyAgICBAcGFyYW0gb2JqCisgICAgQHBhcmFtIHtTdHJpbmd9IHBh
dGgKKyAgICBAcGFyYW0ge09iamVjdHxGdW5jdGlvbn0gdGFyZ2V0CisgICAgQHBhcmFtIHtGdW5j
dGlvbnxTdHJpbmd9IFttZXRob2RdCisgICAgQHB1YmxpYworICAqLworCisgIGZ1bmN0aW9uIHJl
bW92ZU9ic2VydmVyKG9iaiwgcGF0aCwgdGFyZ2V0LCBtZXRob2QpIHsKKyAgICBfZW1iZXJNZXRh
bFdhdGNoaW5nLnVud2F0Y2gob2JqLCBwYXRoKTsKKyAgICBfZW1iZXJNZXRhbEV2ZW50cy5yZW1v
dmVMaXN0ZW5lcihvYmosIGNoYW5nZUV2ZW50KHBhdGgpLCB0YXJnZXQsIG1ldGhvZCk7CisKKyAg
ICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgIEBtZXRob2QgX2FkZEJlZm9yZU9ic2Vy
dmVyCisgICAgQGZvciBFbWJlcgorICAgIEBwYXJhbSBvYmoKKyAgICBAcGFyYW0ge1N0cmluZ30g
cGF0aAorICAgIEBwYXJhbSB7T2JqZWN0fEZ1bmN0aW9ufSB0YXJnZXQKKyAgICBAcGFyYW0ge0Z1
bmN0aW9ufFN0cmluZ30gW21ldGhvZF0KKyAgICBAZGVwcmVjYXRlZAorICAgIEBwcml2YXRlCisg
ICovCisKKyAgZnVuY3Rpb24gX2FkZEJlZm9yZU9ic2VydmVyKG9iaiwgcGF0aCwgdGFyZ2V0LCBt
ZXRob2QpIHsKKyAgICBfZW1iZXJNZXRhbEV2ZW50cy5hZGRMaXN0ZW5lcihvYmosIGJlZm9yZUV2
ZW50KHBhdGgpLCB0YXJnZXQsIG1ldGhvZCk7CisgICAgX2VtYmVyTWV0YWxXYXRjaGluZy53YXRj
aChvYmosIHBhdGgpOworCisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICAvLyBTdXNwZW5kIG9i
c2VydmVyIGR1cmluZyBjYWxsYmFjay4KKyAgLy8KKyAgLy8gVGhpcyBzaG91bGQgb25seSBiZSB1
c2VkIGJ5IHRoZSB0YXJnZXQgb2YgdGhlIG9ic2VydmVyCisgIC8vIHdoaWxlIGl0IGlzIHNldHRp
bmcgdGhlIG9ic2VydmVkIHBhdGguCisKKyAgZnVuY3Rpb24gX3N1c3BlbmRPYnNlcnZlcihvYmos
IHBhdGgsIHRhcmdldCwgbWV0aG9kLCBjYWxsYmFjaykgeworICAgIHJldHVybiBfZW1iZXJNZXRh
bEV2ZW50cy5zdXNwZW5kTGlzdGVuZXIob2JqLCBjaGFuZ2VFdmVudChwYXRoKSwgdGFyZ2V0LCBt
ZXRob2QsIGNhbGxiYWNrKTsKKyAgfQorCisgIGZ1bmN0aW9uIF9zdXNwZW5kT2JzZXJ2ZXJzKG9i
aiwgcGF0aHMsIHRhcmdldCwgbWV0aG9kLCBjYWxsYmFjaykgeworICAgIHZhciBldmVudHMgPSBw
YXRocy5tYXAoY2hhbmdlRXZlbnQpOworICAgIHJldHVybiBfZW1iZXJNZXRhbEV2ZW50cy5zdXNw
ZW5kTGlzdGVuZXJzKG9iaiwgZXZlbnRzLCB0YXJnZXQsIG1ldGhvZCwgY2FsbGJhY2spOworICB9
CisKKyAgLyoqCisgICAgQG1ldGhvZCByZW1vdmVCZWZvcmVPYnNlcnZlcgorICAgIEBmb3IgRW1i
ZXIKKyAgICBAcGFyYW0gb2JqCisgICAgQHBhcmFtIHtTdHJpbmd9IHBhdGgKKyAgICBAcGFyYW0g
e09iamVjdHxGdW5jdGlvbn0gdGFyZ2V0CisgICAgQHBhcmFtIHtGdW5jdGlvbnxTdHJpbmd9IFtt
ZXRob2RdCisgICAgQGRlcHJlY2F0ZWQKKyAgICBAcHJpdmF0ZQorICAqLworCisgIGZ1bmN0aW9u
IF9yZW1vdmVCZWZvcmVPYnNlcnZlcihvYmosIHBhdGgsIHRhcmdldCwgbWV0aG9kKSB7CisgICAg
X2VtYmVyTWV0YWxXYXRjaGluZy51bndhdGNoKG9iaiwgcGF0aCk7CisgICAgX2VtYmVyTWV0YWxF
dmVudHMucmVtb3ZlTGlzdGVuZXIob2JqLCBiZWZvcmVFdmVudChwYXRoKSwgdGFyZ2V0LCBtZXRo
b2QpOworCisgICAgcmV0dXJuIHRoaXM7CisgIH0KK30pOworZW5pZmVkKCdlbWJlci1tZXRhbC9v
YnNlcnZlcl9zZXQnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvdXRpbHMnLCAnZW1iZXItbWV0
YWwvZXZlbnRzJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbFV0aWxzLCBfZW1iZXJN
ZXRhbEV2ZW50cykgeworICAndXNlIHN0cmljdCc7CisKKyAgLyoKKyAgICB0aGlzLm9ic2VydmVy
U2V0ID0geworICAgICAgW3NlbmRlckd1aWRdOiB7IC8vIHZhcmlhYmxlIG5hbWU6IGBrZXlTZXRg
CisgICAgICAgIFtrZXlOYW1lXTogbGlzdEluZGV4CisgICAgICB9CisgICAgfSwKKyAgICB0aGlz
Lm9ic2VydmVycyA9IFsKKyAgICAgIHsKKyAgICAgICAgc2VuZGVyOiBvYmosCisgICAgICAgIGtl
eU5hbWU6IGtleU5hbWUsCisgICAgICAgIGV2ZW50TmFtZTogZXZlbnROYW1lLAorICAgICAgICBs
aXN0ZW5lcnM6IFsKKyAgICAgICAgICBbdGFyZ2V0LCBtZXRob2QsIGZsYWdzXQorICAgICAgICBd
CisgICAgICB9LAorICAgICAgLi4uCisgICAgXQorICAqLworICBleHBvcnRzLmRlZmF1bHQgPSBP
YnNlcnZlclNldDsKKworICBmdW5jdGlvbiBPYnNlcnZlclNldCgpIHsKKyAgICB0aGlzLmNsZWFy
KCk7CisgIH0KKworICBPYnNlcnZlclNldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKHNlbmRl
ciwga2V5TmFtZSwgZXZlbnROYW1lKSB7CisgICAgdmFyIG9ic2VydmVyU2V0ID0gdGhpcy5vYnNl
cnZlclNldDsKKyAgICB2YXIgb2JzZXJ2ZXJzID0gdGhpcy5vYnNlcnZlcnM7CisgICAgdmFyIHNl
bmRlckd1aWQgPSBfZW1iZXJNZXRhbFV0aWxzLmd1aWRGb3Ioc2VuZGVyKTsKKyAgICB2YXIga2V5
U2V0ID0gb2JzZXJ2ZXJTZXRbc2VuZGVyR3VpZF07CisgICAgdmFyIGluZGV4OworCisgICAgaWYg
KCFrZXlTZXQpIHsKKyAgICAgIG9ic2VydmVyU2V0W3NlbmRlckd1aWRdID0ga2V5U2V0ID0ge307
CisgICAgfQorICAgIGluZGV4ID0ga2V5U2V0W2tleU5hbWVdOworICAgIGlmIChpbmRleCA9PT0g
dW5kZWZpbmVkKSB7CisgICAgICBpbmRleCA9IG9ic2VydmVycy5wdXNoKHsKKyAgICAgICAgc2Vu
ZGVyOiBzZW5kZXIsCisgICAgICAgIGtleU5hbWU6IGtleU5hbWUsCisgICAgICAgIGV2ZW50TmFt
ZTogZXZlbnROYW1lLAorICAgICAgICBsaXN0ZW5lcnM6IFtdCisgICAgICB9KSAtIDE7CisgICAg
ICBrZXlTZXRba2V5TmFtZV0gPSBpbmRleDsKKyAgICB9CisgICAgcmV0dXJuIG9ic2VydmVyc1tp
bmRleF0ubGlzdGVuZXJzOworICB9OworCisgIE9ic2VydmVyU2V0LnByb3RvdHlwZS5mbHVzaCA9
IGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgb2JzZXJ2ZXJzID0gdGhpcy5vYnNlcnZlcnM7CisgICAg
dmFyIGksIGxlbiwgb2JzZXJ2ZXIsIHNlbmRlcjsKKyAgICB0aGlzLmNsZWFyKCk7CisgICAgZm9y
IChpID0gMCwgbGVuID0gb2JzZXJ2ZXJzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7CisgICAgICBv
YnNlcnZlciA9IG9ic2VydmVyc1tpXTsKKyAgICAgIHNlbmRlciA9IG9ic2VydmVyLnNlbmRlcjsK
KyAgICAgIGlmIChzZW5kZXIuaXNEZXN0cm95aW5nIHx8IHNlbmRlci5pc0Rlc3Ryb3llZCkgewor
ICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICAgIF9lbWJlck1ldGFsRXZlbnRzLnNlbmRF
dmVudChzZW5kZXIsIG9ic2VydmVyLmV2ZW50TmFtZSwgW3NlbmRlciwgb2JzZXJ2ZXIua2V5TmFt
ZV0sIG9ic2VydmVyLmxpc3RlbmVycyk7CisgICAgfQorICB9OworCisgIE9ic2VydmVyU2V0LnBy
b3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHsKKyAgICB0aGlzLm9ic2VydmVyU2V0ID0ge307
CisgICAgdGhpcy5vYnNlcnZlcnMgPSBbXTsKKyAgfTsKK30pOworZW5pZmVkKCdlbWJlci1tZXRh
bC9wYXRoX2NhY2hlJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2NhY2hlJ10sIGZ1bmN0aW9u
IChleHBvcnRzLCBfZW1iZXJNZXRhbENhY2hlKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICBleHBv
cnRzLmlzR2xvYmFsID0gaXNHbG9iYWw7CisgIGV4cG9ydHMuaXNHbG9iYWxQYXRoID0gaXNHbG9i
YWxQYXRoOworICBleHBvcnRzLmhhc1RoaXMgPSBoYXNUaGlzOworICBleHBvcnRzLmlzUGF0aCA9
IGlzUGF0aDsKKyAgZXhwb3J0cy5nZXRGaXJzdEtleSA9IGdldEZpcnN0S2V5OworICBleHBvcnRz
LmdldFRhaWxQYXRoID0gZ2V0VGFpbFBhdGg7CisKKyAgdmFyIElTX0dMT0JBTCA9IC9eW0EtWiRd
LzsKKyAgdmFyIElTX0dMT0JBTF9QQVRIID0gL15bQS1aJF0uKltcLl0vOworICB2YXIgSEFTX1RI
SVMgPSAndGhpcy4nOworCisgIHZhciBpc0dsb2JhbENhY2hlID0gbmV3IF9lbWJlck1ldGFsQ2Fj
aGUuZGVmYXVsdCgxMDAwLCBmdW5jdGlvbiAoa2V5KSB7CisgICAgcmV0dXJuIElTX0dMT0JBTC50
ZXN0KGtleSk7CisgIH0pOworCisgIHZhciBpc0dsb2JhbFBhdGhDYWNoZSA9IG5ldyBfZW1iZXJN
ZXRhbENhY2hlLmRlZmF1bHQoMTAwMCwgZnVuY3Rpb24gKGtleSkgeworICAgIHJldHVybiBJU19H
TE9CQUxfUEFUSC50ZXN0KGtleSk7CisgIH0pOworCisgIHZhciBoYXNUaGlzQ2FjaGUgPSBuZXcg
X2VtYmVyTWV0YWxDYWNoZS5kZWZhdWx0KDEwMDAsIGZ1bmN0aW9uIChrZXkpIHsKKyAgICByZXR1
cm4ga2V5Lmxhc3RJbmRleE9mKEhBU19USElTLCAwKSA9PT0gMDsKKyAgfSk7CisKKyAgdmFyIGZp
cnN0RG90SW5kZXhDYWNoZSA9IG5ldyBfZW1iZXJNZXRhbENhY2hlLmRlZmF1bHQoMTAwMCwgZnVu
Y3Rpb24gKGtleSkgeworICAgIHJldHVybiBrZXkuaW5kZXhPZignLicpOworICB9KTsKKworICB2
YXIgZmlyc3RLZXlDYWNoZSA9IG5ldyBfZW1iZXJNZXRhbENhY2hlLmRlZmF1bHQoMTAwMCwgZnVu
Y3Rpb24gKHBhdGgpIHsKKyAgICB2YXIgaW5kZXggPSBmaXJzdERvdEluZGV4Q2FjaGUuZ2V0KHBh
dGgpOworICAgIGlmIChpbmRleCA9PT0gLTEpIHsKKyAgICAgIHJldHVybiBwYXRoOworICAgIH0g
ZWxzZSB7CisgICAgICByZXR1cm4gcGF0aC5zbGljZSgwLCBpbmRleCk7CisgICAgfQorICB9KTsK
KworICB2YXIgdGFpbFBhdGhDYWNoZSA9IG5ldyBfZW1iZXJNZXRhbENhY2hlLmRlZmF1bHQoMTAw
MCwgZnVuY3Rpb24gKHBhdGgpIHsKKyAgICB2YXIgaW5kZXggPSBmaXJzdERvdEluZGV4Q2FjaGUu
Z2V0KHBhdGgpOworICAgIGlmIChpbmRleCAhPT0gLTEpIHsKKyAgICAgIHJldHVybiBwYXRoLnNs
aWNlKGluZGV4ICsgMSk7CisgICAgfQorICB9KTsKKworICB2YXIgY2FjaGVzID0geworICAgIGlz
R2xvYmFsQ2FjaGU6IGlzR2xvYmFsQ2FjaGUsCisgICAgaXNHbG9iYWxQYXRoQ2FjaGU6IGlzR2xv
YmFsUGF0aENhY2hlLAorICAgIGhhc1RoaXNDYWNoZTogaGFzVGhpc0NhY2hlLAorICAgIGZpcnN0
RG90SW5kZXhDYWNoZTogZmlyc3REb3RJbmRleENhY2hlLAorICAgIGZpcnN0S2V5Q2FjaGU6IGZp
cnN0S2V5Q2FjaGUsCisgICAgdGFpbFBhdGhDYWNoZTogdGFpbFBhdGhDYWNoZQorICB9OworCisg
IGV4cG9ydHMuY2FjaGVzID0gY2FjaGVzOworCisgIGZ1bmN0aW9uIGlzR2xvYmFsKHBhdGgpIHsK
KyAgICByZXR1cm4gaXNHbG9iYWxDYWNoZS5nZXQocGF0aCk7CisgIH0KKworICBmdW5jdGlvbiBp
c0dsb2JhbFBhdGgocGF0aCkgeworICAgIHJldHVybiBpc0dsb2JhbFBhdGhDYWNoZS5nZXQocGF0
aCk7CisgIH0KKworICBmdW5jdGlvbiBoYXNUaGlzKHBhdGgpIHsKKyAgICByZXR1cm4gaGFzVGhp
c0NhY2hlLmdldChwYXRoKTsKKyAgfQorCisgIGZ1bmN0aW9uIGlzUGF0aChwYXRoKSB7CisgICAg
cmV0dXJuIGZpcnN0RG90SW5kZXhDYWNoZS5nZXQocGF0aCkgIT09IC0xOworICB9CisKKyAgZnVu
Y3Rpb24gZ2V0Rmlyc3RLZXkocGF0aCkgeworICAgIHJldHVybiBmaXJzdEtleUNhY2hlLmdldChw
YXRoKTsKKyAgfQorCisgIGZ1bmN0aW9uIGdldFRhaWxQYXRoKHBhdGgpIHsKKyAgICByZXR1cm4g
dGFpbFBhdGhDYWNoZS5nZXQocGF0aCk7CisgIH0KK30pOworZW5pZmVkKCdlbWJlci1tZXRhbC9w
cm9wZXJ0aWVzJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLW1ldGFs
L2ZlYXR1cmVzJywgJ2VtYmVyLW1ldGFsL21ldGEnLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfZXZl
bnRzJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJNZXRhbEZl
YXR1cmVzLCBfZW1iZXJNZXRhbE1ldGEsIF9lbWJlck1ldGFsUHJvcGVydHlfZXZlbnRzKSB7Cisg
IC8qKgorICBAbW9kdWxlIGVtYmVyLW1ldGFsCisgICovCisKKyAgJ3VzZSBzdHJpY3QnOworCisg
IGV4cG9ydHMuRGVzY3JpcHRvciA9IERlc2NyaXB0b3I7CisgIGV4cG9ydHMuTUFOREFUT1JZX1NF
VFRFUl9GVU5DVElPTiA9IE1BTkRBVE9SWV9TRVRURVJfRlVOQ1RJT047CisgIGV4cG9ydHMuREVG
QVVMVF9HRVRURVJfRlVOQ1RJT04gPSBERUZBVUxUX0dFVFRFUl9GVU5DVElPTjsKKyAgZXhwb3J0
cy5JTkhFUklUSU5HX0dFVFRFUl9GVU5DVElPTiA9IElOSEVSSVRJTkdfR0VUVEVSX0ZVTkNUSU9O
OworICBleHBvcnRzLmRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHk7CisKKyAgLy8gLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgor
ICAvLyBERVNDUklQVE9SCisgIC8vCisKKyAgLyoqCisgICAgT2JqZWN0cyBvZiB0aGlzIHR5cGUg
Y2FuIGltcGxlbWVudCBhbiBpbnRlcmZhY2UgdG8gcmVzcG9uZCB0byByZXF1ZXN0cyB0bworICAg
IGdldCBhbmQgc2V0LiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBoYW5kbGVzIHNpbXBsZSBw
cm9wZXJ0aWVzLgorICAKKyAgICBAY2xhc3MgRGVzY3JpcHRvcgorICAgIEBwcml2YXRlCisgICov
CisKKyAgZnVuY3Rpb24gRGVzY3JpcHRvcigpIHsKKyAgICB0aGlzLmlzRGVzY3JpcHRvciA9IHRy
dWU7CisgIH0KKworICB2YXIgUkVERUZJTkVfU1VQUE9SVEVEID0gKGZ1bmN0aW9uICgpIHsKKyAg
ICAvLyBodHRwczovL2dpdGh1Yi5jb20vc3BhbGdlci9raWJhbmEvY29tbWl0L2I3ZTM1ZTY3Mzdk
ZjU4NTU4NTMzMjg1N2E0YzM5N2RjMjA2ZTdmZjkKKyAgICB2YXIgYSA9IE9iamVjdC5jcmVhdGUo
T2JqZWN0LnByb3RvdHlwZSwgeworICAgICAgcHJvcDogeworICAgICAgICBjb25maWd1cmFibGU6
IHRydWUsCisgICAgICAgIHZhbHVlOiAxCisgICAgICB9CisgICAgfSk7CisKKyAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoYSwgJ3Byb3AnLCB7CisgICAgICBjb25maWd1cmFibGU6IHRydWUsCisg
ICAgICB2YWx1ZTogMgorICAgIH0pOworCisgICAgcmV0dXJuIGEucHJvcCA9PT0gMjsKKyAgfSko
KTsKKyAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLgorICAvLyBERUZJTklORyBQUk9QRVJUSUVTIEFQSQorICAvLworCisgIGZ1bmN0
aW9uIE1BTkRBVE9SWV9TRVRURVJfRlVOQ1RJT04obmFtZSkgeworICAgIGZ1bmN0aW9uIFNFVFRF
Ul9GVU5DVElPTih2YWx1ZSkgeworICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1lvdSBt
dXN0IHVzZSBFbWJlci5zZXQoKSB0byBzZXQgdGhlIGAnICsgbmFtZSArICdgIHByb3BlcnR5IChv
ZiAnICsgdGhpcyArICcpIHRvIGAnICsgdmFsdWUgKyAnYC4nLCBmYWxzZSk7CisgICAgfQorCisg
ICAgU0VUVEVSX0ZVTkNUSU9OLmlzTWFuZGF0b3J5U2V0dGVyID0gdHJ1ZTsKKyAgICByZXR1cm4g
U0VUVEVSX0ZVTkNUSU9OOworICB9CisKKyAgZnVuY3Rpb24gREVGQVVMVF9HRVRURVJfRlVOQ1RJ
T04obmFtZSkgeworICAgIHJldHVybiBmdW5jdGlvbiBHRVRURVJfRlVOQ1RJT04oKSB7CisgICAg
ICB2YXIgbWV0YSA9IHRoaXNbJ19fZW1iZXJfbWV0YV9fJ107CisgICAgICByZXR1cm4gbWV0YSAm
JiBtZXRhLnBlZWtWYWx1ZXMobmFtZSk7CisgICAgfTsKKyAgfQorCisgIGZ1bmN0aW9uIElOSEVS
SVRJTkdfR0VUVEVSX0ZVTkNUSU9OKG5hbWUpIHsKKyAgICBmdW5jdGlvbiBJR0VUVEVSX0ZVTkNU
SU9OKCkgeworICAgICAgdmFyIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpOwor
ICAgICAgcmV0dXJuIHByb3RvICYmIHByb3RvW25hbWVdOworICAgIH0KKworICAgIElHRVRURVJf
RlVOQ1RJT04uaXNJbmhlcml0aW5nR2V0dGVyID0gdHJ1ZTsKKyAgICByZXR1cm4gSUdFVFRFUl9G
VU5DVElPTjsKKyAgfQorCisgIC8qKgorICAgIE5PVEU6IFRoaXMgaXMgYSBsb3ctbGV2ZWwgbWV0
aG9kIHVzZWQgYnkgb3RoZXIgcGFydHMgb2YgdGhlIEFQSS4gWW91IGFsbW9zdAorICAgIG5ldmVy
IHdhbnQgdG8gY2FsbCB0aGlzIG1ldGhvZCBkaXJlY3RseS4gSW5zdGVhZCB5b3Ugc2hvdWxkIHVz
ZQorICAgIGBFbWJlci5taXhpbigpYCB0byBkZWZpbmUgbmV3IHByb3BlcnRpZXMuCisgIAorICAg
IERlZmluZXMgYSBwcm9wZXJ0eSBvbiBhbiBvYmplY3QuIFRoaXMgbWV0aG9kIHdvcmtzIG11Y2gg
bGlrZSB0aGUgRVM1CisgICAgYE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgpYCBtZXRob2QgZXhjZXB0
IHRoYXQgaXQgY2FuIGFsc28gYWNjZXB0IGNvbXB1dGVkCisgICAgcHJvcGVydGllcyBhbmQgb3Ro
ZXIgc3BlY2lhbCBkZXNjcmlwdG9ycy4KKyAgCisgICAgTm9ybWFsbHkgdGhpcyBtZXRob2QgdGFr
ZXMgb25seSB0aHJlZSBwYXJhbWV0ZXJzLiBIb3dldmVyIGlmIHlvdSBwYXNzIGFuCisgICAgaW5z
dGFuY2Ugb2YgYERlc2NyaXB0b3JgIGFzIHRoZSB0aGlyZCBwYXJhbSB0aGVuIHlvdSBjYW4gcGFz
cyBhbgorICAgIG9wdGlvbmFsIHZhbHVlIGFzIHRoZSBmb3VydGggcGFyYW1ldGVyLiBUaGlzIGlz
IG9mdGVuIG1vcmUgZWZmaWNpZW50IHRoYW4KKyAgICBjcmVhdGluZyBuZXcgZGVzY3JpcHRvciBo
YXNoZXMgZm9yIGVhY2ggcHJvcGVydHkuCisgIAorICAgICMjIEV4YW1wbGVzCisgIAorICAgIGBg
YGphdmFzY3JpcHQKKyAgICAvLyBFUzUgY29tcGF0aWJsZSBtb2RlCisgICAgRW1iZXIuZGVmaW5l
UHJvcGVydHkoY29udGFjdCwgJ2ZpcnN0TmFtZScsIHsKKyAgICAgIHdyaXRhYmxlOiB0cnVlLAor
ICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSwKKyAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICB2YWx1ZTogJ0NoYXJsZXMnCisgICAgfSk7CisgIAorICAgIC8vIGRlZmluZSBhIHNpbXBsZSBw
cm9wZXJ0eQorICAgIEVtYmVyLmRlZmluZVByb3BlcnR5KGNvbnRhY3QsICdsYXN0TmFtZScsIHVu
ZGVmaW5lZCwgJ0pvbGxleScpOworICAKKyAgICAvLyBkZWZpbmUgYSBjb21wdXRlZCBwcm9wZXJ0
eQorICAgIEVtYmVyLmRlZmluZVByb3BlcnR5KGNvbnRhY3QsICdmdWxsTmFtZScsIEVtYmVyLmNv
bXB1dGVkKCdmaXJzdE5hbWUnLCAnbGFzdE5hbWUnLCBmdW5jdGlvbigpIHsKKyAgICAgIHJldHVy
biB0aGlzLmZpcnN0TmFtZSsnICcrdGhpcy5sYXN0TmFtZTsKKyAgICB9KSk7CisgICAgYGBgCisg
IAorICAgIEBwcml2YXRlCisgICAgQG1ldGhvZCBkZWZpbmVQcm9wZXJ0eQorICAgIEBmb3IgRW1i
ZXIKKyAgICBAcGFyYW0ge09iamVjdH0gb2JqIHRoZSBvYmplY3QgdG8gZGVmaW5lIHRoaXMgcHJv
cGVydHkgb24uIFRoaXMgbWF5IGJlIGEgcHJvdG90eXBlLgorICAgIEBwYXJhbSB7U3RyaW5nfSBr
ZXlOYW1lIHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eQorICAgIEBwYXJhbSB7RGVzY3JpcHRvcn0g
W2Rlc2NdIGFuIGluc3RhbmNlIG9mIGBEZXNjcmlwdG9yYCAodHlwaWNhbGx5IGEKKyAgICAgIGNv
bXB1dGVkIHByb3BlcnR5KSBvciBhbiBFUzUgZGVzY3JpcHRvci4KKyAgICAgIFlvdSBtdXN0IHBy
b3ZpZGUgdGhpcyBvciBgZGF0YWAgYnV0IG5vdCBib3RoLgorICAgIEBwYXJhbSB7Kn0gW2RhdGFd
IHNvbWV0aGluZyBvdGhlciB0aGFuIGEgZGVzY3JpcHRvciwgdGhhdCB3aWxsCisgICAgICBiZWNv
bWUgdGhlIGV4cGxpY2l0IHZhbHVlIG9mIHRoaXMgcHJvcGVydHkuCisgICovCisKKyAgZnVuY3Rp
b24gZGVmaW5lUHJvcGVydHkob2JqLCBrZXlOYW1lLCBkZXNjLCBkYXRhLCBtZXRhKSB7CisgICAg
dmFyIHBvc3NpYmxlRGVzYywgZXhpc3RpbmdEZXNjLCB3YXRjaGluZywgdmFsdWU7CisKKyAgICBp
ZiAoIW1ldGEpIHsKKyAgICAgIG1ldGEgPSBfZW1iZXJNZXRhbE1ldGEubWV0YShvYmopOworICAg
IH0KKyAgICB2YXIgd2F0Y2hFbnRyeSA9IG1ldGEucGVla1dhdGNoaW5nKGtleU5hbWUpOworICAg
IHBvc3NpYmxlRGVzYyA9IG9ialtrZXlOYW1lXTsKKyAgICBleGlzdGluZ0Rlc2MgPSBwb3NzaWJs
ZURlc2MgIT09IG51bGwgJiYgdHlwZW9mIHBvc3NpYmxlRGVzYyA9PT0gJ29iamVjdCcgJiYgcG9z
c2libGVEZXNjLmlzRGVzY3JpcHRvciA/IHBvc3NpYmxlRGVzYyA6IHVuZGVmaW5lZDsKKworICAg
IHdhdGNoaW5nID0gd2F0Y2hFbnRyeSAhPT0gdW5kZWZpbmVkICYmIHdhdGNoRW50cnkgPiAwOwor
CisgICAgaWYgKGV4aXN0aW5nRGVzYykgeworICAgICAgZXhpc3RpbmdEZXNjLnRlYXJkb3duKG9i
aiwga2V5TmFtZSk7CisgICAgfQorCisgICAgaWYgKGRlc2MgaW5zdGFuY2VvZiBEZXNjcmlwdG9y
KSB7CisgICAgICB2YWx1ZSA9IGRlc2M7CisKKyAgICAgIGlmICh3YXRjaGluZykgeworICAgICAg
ICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXlOYW1lLCB7CisgICAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlLAorICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgICAgd3Jp
dGFibGU6IHRydWUsCisgICAgICAgICAgdmFsdWU6IHZhbHVlCisgICAgICAgIH0pOworICAgICAg
fSBlbHNlIHsKKyAgICAgICAgb2JqW2tleU5hbWVdID0gdmFsdWU7CisgICAgICB9CisKKyAgICAg
IGlmIChkZXNjLnNldHVwKSB7CisgICAgICAgIGRlc2Muc2V0dXAob2JqLCBrZXlOYW1lKTsKKyAg
ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgaWYgKGRlc2MgPT0gbnVsbCkgeworICAgICAgICB2
YWx1ZSA9IGRhdGE7CisKKyAgICAgICAgaWYgKHdhdGNoaW5nKSB7CisgICAgICAgICAgbWV0YS53
cml0ZVZhbHVlcyhrZXlOYW1lLCBkYXRhKTsKKworICAgICAgICAgIHZhciBkZWZhdWx0RGVzY3Jp
cHRvciA9IHsKKyAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKKyAgICAgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgICAgICBzZXQ6IE1BTkRBVE9SWV9TRVRURVJfRlVOQ1RJ
T04oa2V5TmFtZSksCisgICAgICAgICAgICBnZXQ6IERFRkFVTFRfR0VUVEVSX0ZVTkNUSU9OKGtl
eU5hbWUpCisgICAgICAgICAgfTsKKworICAgICAgICAgIGlmIChSRURFRklORV9TVVBQT1JURUQp
IHsKKyAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleU5hbWUsIGRlZmF1
bHREZXNjcmlwdG9yKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaGFuZGxlQnJv
a2VuUGhhbnRvbURlZmluZVByb3BlcnR5KG9iaiwga2V5TmFtZSwgZGVmYXVsdERlc2NyaXB0b3Ip
OworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBvYmpba2V5TmFtZV0g
PSBkYXRhOworICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICB2YWx1ZSA9IGRlc2M7
CisKKyAgICAgICAgLy8gZmFsbGJhY2sgdG8gRVM1CisgICAgICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShvYmosIGtleU5hbWUsIGRlc2MpOworICAgICAgfQorICAgIH0KKworICAgIC8vIGlmIGtl
eSBpcyBiZWluZyB3YXRjaGVkLCBvdmVycmlkZSBjaGFpbnMgdGhhdAorICAgIC8vIHdlcmUgaW5p
dGlhbGl6ZWQgd2l0aCB0aGUgcHJvdG90eXBlCisgICAgaWYgKHdhdGNoaW5nKSB7CisgICAgICBf
ZW1iZXJNZXRhbFByb3BlcnR5X2V2ZW50cy5vdmVycmlkZUNoYWlucyhvYmosIGtleU5hbWUsIG1l
dGEpOworICAgIH0KKworICAgIC8vIFRoZSBgdmFsdWVgIHBhc3NlZCB0byB0aGUgYGRpZERlZmlu
ZVByb3BlcnR5YCBob29rIGlzCisgICAgLy8gZWl0aGVyIHRoZSBkZXNjcmlwdG9yIG9yIGRhdGEs
IHdoaWNoZXZlciB3YXMgcGFzc2VkLgorICAgIGlmIChvYmouZGlkRGVmaW5lUHJvcGVydHkpIHsK
KyAgICAgIG9iai5kaWREZWZpbmVQcm9wZXJ0eShvYmosIGtleU5hbWUsIHZhbHVlKTsKKyAgICB9
CisKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGZ1bmN0aW9uIGhhbmRsZUJyb2tlblBoYW50
b21EZWZpbmVQcm9wZXJ0eShvYmosIGtleU5hbWUsIGRlc2MpIHsKKyAgICAvLyBodHRwczovL2dp
dGh1Yi5jb20vYXJpeWEvcGhhbnRvbWpzL2lzc3Vlcy8xMTg1NgorICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShvYmosIGtleU5hbWUsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1
ZSwgdmFsdWU6ICdpQ3J5JyB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXlO
YW1lLCBkZXNjKTsKKyAgfQorfSk7CitlbmlmZWQoJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X2V2ZW50
cycsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC91dGlscycsICdlbWJlci1tZXRhbC9tZXRhJywg
J2VtYmVyLW1ldGFsL2V2ZW50cycsICdlbWJlci1tZXRhbC9vYnNlcnZlcl9zZXQnLCAnZW1iZXIt
bWV0YWwvc3ltYm9sJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbFV0aWxzLCBfZW1i
ZXJNZXRhbE1ldGEsIF9lbWJlck1ldGFsRXZlbnRzLCBfZW1iZXJNZXRhbE9ic2VydmVyX3NldCwg
X2VtYmVyTWV0YWxTeW1ib2wpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIHZhciBQUk9QRVJUWV9E
SURfQ0hBTkdFID0gX2VtYmVyTWV0YWxTeW1ib2wuZGVmYXVsdCgnUFJPUEVSVFlfRElEX0NIQU5H
RScpOworCisgIGV4cG9ydHMuUFJPUEVSVFlfRElEX0NIQU5HRSA9IFBST1BFUlRZX0RJRF9DSEFO
R0U7CisgIHZhciBiZWZvcmVPYnNlcnZlclNldCA9IG5ldyBfZW1iZXJNZXRhbE9ic2VydmVyX3Nl
dC5kZWZhdWx0KCk7CisgIHZhciBvYnNlcnZlclNldCA9IG5ldyBfZW1iZXJNZXRhbE9ic2VydmVy
X3NldC5kZWZhdWx0KCk7CisgIHZhciBkZWZlcnJlZCA9IDA7CisKKyAgLy8gLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorICAvLyBQUk9Q
RVJUWSBDSEFOR0VTCisgIC8vCisKKyAgLyoqCisgICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQg
anVzdCBiZWZvcmUgYW4gb2JqZWN0IHByb3BlcnR5IGlzIGFib3V0IHRvIGNoYW5nZS4KKyAgICBJ
dCB3aWxsIG5vdGlmeSBhbnkgYmVmb3JlIG9ic2VydmVycyBhbmQgcHJlcGFyZSBjYWNoZXMgYW1v
bmcgb3RoZXIgdGhpbmdzLgorICAKKyAgICBOb3JtYWxseSB5b3Ugd2lsbCBub3QgbmVlZCB0byBj
YWxsIHRoaXMgbWV0aG9kIGRpcmVjdGx5IGJ1dCBpZiBmb3Igc29tZQorICAgIHJlYXNvbiB5b3Ug
Y2FuJ3QgZGlyZWN0bHkgd2F0Y2ggYSBwcm9wZXJ0eSB5b3UgY2FuIGludm9rZSB0aGlzIG1ldGhv
ZAorICAgIG1hbnVhbGx5IGFsb25nIHdpdGggYEVtYmVyLnByb3BlcnR5RGlkQ2hhbmdlKClgIHdo
aWNoIHlvdSBzaG91bGQgY2FsbCBqdXN0CisgICAgYWZ0ZXIgdGhlIHByb3BlcnR5IHZhbHVlIGNo
YW5nZXMuCisgIAorICAgIEBtZXRob2QgcHJvcGVydHlXaWxsQ2hhbmdlCisgICAgQGZvciBFbWJl
cgorICAgIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB3aXRoIHRoZSBwcm9wZXJ0eSB0
aGF0IHdpbGwgY2hhbmdlCisgICAgQHBhcmFtIHtTdHJpbmd9IGtleU5hbWUgVGhlIHByb3BlcnR5
IGtleSAob3IgcGF0aCkgdGhhdCB3aWxsIGNoYW5nZS4KKyAgICBAcmV0dXJuIHt2b2lkfQorICAg
IEBwcml2YXRlCisgICovCisgIGZ1bmN0aW9uIHByb3BlcnR5V2lsbENoYW5nZShvYmosIGtleU5h
bWUpIHsKKyAgICB2YXIgbSA9IF9lbWJlck1ldGFsTWV0YS5wZWVrTWV0YShvYmopOworICAgIHZh
ciB3YXRjaGluZyA9IG0gJiYgbS5wZWVrV2F0Y2hpbmcoa2V5TmFtZSkgPiAwIHx8IGtleU5hbWUg
PT09ICdsZW5ndGgnOworICAgIHZhciBwcm90byA9IG0gJiYgbS5wcm90bzsKKyAgICB2YXIgcG9z
c2libGVEZXNjID0gb2JqW2tleU5hbWVdOworICAgIHZhciBkZXNjID0gcG9zc2libGVEZXNjICE9
PSBudWxsICYmIHR5cGVvZiBwb3NzaWJsZURlc2MgPT09ICdvYmplY3QnICYmIHBvc3NpYmxlRGVz
Yy5pc0Rlc2NyaXB0b3IgPyBwb3NzaWJsZURlc2MgOiB1bmRlZmluZWQ7CisKKyAgICBpZiAoIXdh
dGNoaW5nKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHByb3RvID09PSBvYmop
IHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZGVzYyAmJiBkZXNjLndpbGxDaGFu
Z2UpIHsKKyAgICAgIGRlc2Mud2lsbENoYW5nZShvYmosIGtleU5hbWUpOworICAgIH0KKworICAg
IGRlcGVuZGVudEtleXNXaWxsQ2hhbmdlKG9iaiwga2V5TmFtZSwgbSk7CisgICAgY2hhaW5zV2ls
bENoYW5nZShvYmosIGtleU5hbWUsIG0pOworICAgIG5vdGlmeUJlZm9yZU9ic2VydmVycyhvYmos
IGtleU5hbWUpOworICB9CisKKyAgLyoqCisgICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQganVz
dCBhZnRlciBhbiBvYmplY3QgcHJvcGVydHkgaGFzIGNoYW5nZWQuCisgICAgSXQgd2lsbCBub3Rp
ZnkgYW55IG9ic2VydmVycyBhbmQgY2xlYXIgY2FjaGVzIGFtb25nIG90aGVyIHRoaW5ncy4KKyAg
CisgICAgTm9ybWFsbHkgeW91IHdpbGwgbm90IG5lZWQgdG8gY2FsbCB0aGlzIG1ldGhvZCBkaXJl
Y3RseSBidXQgaWYgZm9yIHNvbWUKKyAgICByZWFzb24geW91IGNhbid0IGRpcmVjdGx5IHdhdGNo
IGEgcHJvcGVydHkgeW91IGNhbiBpbnZva2UgdGhpcyBtZXRob2QKKyAgICBtYW51YWxseSBhbG9u
ZyB3aXRoIGBFbWJlci5wcm9wZXJ0eVdpbGxDaGFuZ2UoKWAgd2hpY2ggeW91IHNob3VsZCBjYWxs
IGp1c3QKKyAgICBiZWZvcmUgdGhlIHByb3BlcnR5IHZhbHVlIGNoYW5nZXMuCisgIAorICAgIEBt
ZXRob2QgcHJvcGVydHlEaWRDaGFuZ2UKKyAgICBAZm9yIEVtYmVyCisgICAgQHBhcmFtIHtPYmpl
Y3R9IG9iaiBUaGUgb2JqZWN0IHdpdGggdGhlIHByb3BlcnR5IHRoYXQgd2lsbCBjaGFuZ2UKKyAg
ICBAcGFyYW0ge1N0cmluZ30ga2V5TmFtZSBUaGUgcHJvcGVydHkga2V5IChvciBwYXRoKSB0aGF0
IHdpbGwgY2hhbmdlLgorICAgIEByZXR1cm4ge3ZvaWR9CisgICAgQHByaXZhdGUKKyAgKi8KKyAg
ZnVuY3Rpb24gcHJvcGVydHlEaWRDaGFuZ2Uob2JqLCBrZXlOYW1lKSB7CisgICAgdmFyIG0gPSBf
ZW1iZXJNZXRhbE1ldGEucGVla01ldGEob2JqKTsKKyAgICB2YXIgd2F0Y2hpbmcgPSBtICYmIG0u
cGVla1dhdGNoaW5nKGtleU5hbWUpID4gMCB8fCBrZXlOYW1lID09PSAnbGVuZ3RoJzsKKyAgICB2
YXIgcHJvdG8gPSBtICYmIG0ucHJvdG87CisgICAgdmFyIHBvc3NpYmxlRGVzYyA9IG9ialtrZXlO
YW1lXTsKKyAgICB2YXIgZGVzYyA9IHBvc3NpYmxlRGVzYyAhPT0gbnVsbCAmJiB0eXBlb2YgcG9z
c2libGVEZXNjID09PSAnb2JqZWN0JyAmJiBwb3NzaWJsZURlc2MuaXNEZXNjcmlwdG9yID8gcG9z
c2libGVEZXNjIDogdW5kZWZpbmVkOworCisgICAgaWYgKHByb3RvID09PSBvYmopIHsKKyAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBzaG91bGRuJ3QgdGhpcyBtZWFuIHRoYXQgd2UncmUg
d2F0Y2hpbmcgdGhpcyBrZXk/CisgICAgaWYgKGRlc2MgJiYgZGVzYy5kaWRDaGFuZ2UpIHsKKyAg
ICAgIGRlc2MuZGlkQ2hhbmdlKG9iaiwga2V5TmFtZSk7CisgICAgfQorCisgICAgaWYgKG9ialtQ
Uk9QRVJUWV9ESURfQ0hBTkdFXSkgeworICAgICAgb2JqW1BST1BFUlRZX0RJRF9DSEFOR0VdKGtl
eU5hbWUpOworICAgIH0KKworICAgIGlmICghd2F0Y2hpbmcgJiYga2V5TmFtZSAhPT0gJ2xlbmd0
aCcpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobSAmJiBtLmhhc0RlcHMoa2V5
TmFtZSkpIHsKKyAgICAgIGRlcGVuZGVudEtleXNEaWRDaGFuZ2Uob2JqLCBrZXlOYW1lLCBtKTsK
KyAgICB9CisKKyAgICBjaGFpbnNEaWRDaGFuZ2Uob2JqLCBrZXlOYW1lLCBtLCBmYWxzZSk7Cisg
ICAgbm90aWZ5T2JzZXJ2ZXJzKG9iaiwga2V5TmFtZSk7CisgIH0KKworICB2YXIgV0lMTF9TRUVO
LCBESURfU0VFTjsKKyAgLy8gY2FsbGVkIHdoZW5ldmVyIGEgcHJvcGVydHkgaXMgYWJvdXQgdG8g
Y2hhbmdlIHRvIGNsZWFyIHRoZSBjYWNoZSBvZiBhbnkgZGVwZW5kZW50IGtleXMgKGFuZCBub3Rp
ZnkgdGhvc2UgcHJvcGVydGllcyBvZiBjaGFuZ2VzLCBldGMuLi4pCisgIGZ1bmN0aW9uIGRlcGVu
ZGVudEtleXNXaWxsQ2hhbmdlKG9iaiwgZGVwS2V5LCBtZXRhKSB7CisgICAgaWYgKG9iai5pc0Rl
c3Ryb3lpbmcpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobWV0YSAmJiBtZXRh
Lmhhc0RlcHMoZGVwS2V5KSkgeworICAgICAgdmFyIHNlZW4gPSBXSUxMX1NFRU47CisgICAgICB2
YXIgdG9wID0gIXNlZW47CisKKyAgICAgIGlmICh0b3ApIHsKKyAgICAgICAgc2VlbiA9IFdJTExf
U0VFTiA9IHt9OworICAgICAgfQorCisgICAgICBpdGVyRGVwcyhwcm9wZXJ0eVdpbGxDaGFuZ2Us
IG9iaiwgZGVwS2V5LCBzZWVuLCBtZXRhKTsKKworICAgICAgaWYgKHRvcCkgeworICAgICAgICBX
SUxMX1NFRU4gPSBudWxsOworICAgICAgfQorICAgIH0KKyAgfQorCisgIC8vIGNhbGxlZCB3aGVu
ZXZlciBhIHByb3BlcnR5IGhhcyBqdXN0IGNoYW5nZWQgdG8gdXBkYXRlIGRlcGVuZGVudCBrZXlz
CisgIGZ1bmN0aW9uIGRlcGVuZGVudEtleXNEaWRDaGFuZ2Uob2JqLCBkZXBLZXksIG1ldGEpIHsK
KyAgICBpZiAob2JqLmlzRGVzdHJveWluZykgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChtZXRhICYmIG1ldGEuaGFzRGVwcyhkZXBLZXkpKSB7CisgICAgICB2YXIgc2VlbiA9IERJ
RF9TRUVOOworICAgICAgdmFyIHRvcCA9ICFzZWVuOworCisgICAgICBpZiAodG9wKSB7CisgICAg
ICAgIHNlZW4gPSBESURfU0VFTiA9IHt9OworICAgICAgfQorCisgICAgICBpdGVyRGVwcyhwcm9w
ZXJ0eURpZENoYW5nZSwgb2JqLCBkZXBLZXksIHNlZW4sIG1ldGEpOworCisgICAgICBpZiAodG9w
KSB7CisgICAgICAgIERJRF9TRUVOID0gbnVsbDsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBm
dW5jdGlvbiBpdGVyRGVwcyhtZXRob2QsIG9iaiwgZGVwS2V5LCBzZWVuLCBtZXRhKSB7CisgICAg
dmFyIHBvc3NpYmxlRGVzYywgZGVzYzsKKyAgICB2YXIgZ3VpZCA9IF9lbWJlck1ldGFsVXRpbHMu
Z3VpZEZvcihvYmopOworICAgIHZhciBjdXJyZW50ID0gc2VlbltndWlkXTsKKworICAgIGlmICgh
Y3VycmVudCkgeworICAgICAgY3VycmVudCA9IHNlZW5bZ3VpZF0gPSB7fTsKKyAgICB9CisKKyAg
ICBpZiAoY3VycmVudFtkZXBLZXldKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgY3Vy
cmVudFtkZXBLZXldID0gdHJ1ZTsKKworICAgIG1ldGEuZm9yRWFjaEluRGVwcyhkZXBLZXksIGZ1
bmN0aW9uIChrZXksIHZhbHVlKSB7CisgICAgICBpZiAoIXZhbHVlKSB7CisgICAgICAgIHJldHVy
bjsKKyAgICAgIH0KKworICAgICAgcG9zc2libGVEZXNjID0gb2JqW2tleV07CisgICAgICBkZXNj
ID0gcG9zc2libGVEZXNjICE9PSBudWxsICYmIHR5cGVvZiBwb3NzaWJsZURlc2MgPT09ICdvYmpl
Y3QnICYmIHBvc3NpYmxlRGVzYy5pc0Rlc2NyaXB0b3IgPyBwb3NzaWJsZURlc2MgOiB1bmRlZmlu
ZWQ7CisKKyAgICAgIGlmIChkZXNjICYmIGRlc2MuX3N1c3BlbmRlZCA9PT0gb2JqKSB7CisgICAg
ICAgIHJldHVybjsKKyAgICAgIH0KKworICAgICAgbWV0aG9kKG9iaiwga2V5KTsKKyAgICB9KTsK
KyAgfQorCisgIGZ1bmN0aW9uIGNoYWluc1dpbGxDaGFuZ2Uob2JqLCBrZXlOYW1lLCBtKSB7Cisg
ICAgdmFyIGMgPSBtLnJlYWRhYmxlQ2hhaW5XYXRjaGVycygpOworICAgIGlmIChjKSB7CisgICAg
ICBjLm5vdGlmeShrZXlOYW1lLCBmYWxzZSwgcHJvcGVydHlXaWxsQ2hhbmdlKTsKKyAgICB9Cisg
IH0KKworICBmdW5jdGlvbiBjaGFpbnNEaWRDaGFuZ2Uob2JqLCBrZXlOYW1lLCBtKSB7CisgICAg
dmFyIGMgPSBtLnJlYWRhYmxlQ2hhaW5XYXRjaGVycygpOworICAgIGlmIChjKSB7CisgICAgICBj
Lm5vdGlmeShrZXlOYW1lLCB0cnVlLCBwcm9wZXJ0eURpZENoYW5nZSk7CisgICAgfQorICB9CisK
KyAgZnVuY3Rpb24gb3ZlcnJpZGVDaGFpbnMob2JqLCBrZXlOYW1lLCBtKSB7CisgICAgdmFyIGMg
PSBtLnJlYWRhYmxlQ2hhaW5XYXRjaGVycygpOworICAgIGlmIChjKSB7CisgICAgICBjLnJldmFs
aWRhdGUoa2V5TmFtZSk7CisgICAgfQorICB9CisKKyAgLyoqCisgICAgQG1ldGhvZCBiZWdpblBy
b3BlcnR5Q2hhbmdlcworICAgIEBjaGFpbmFibGUKKyAgICBAcHJpdmF0ZQorICAqLworICBmdW5j
dGlvbiBiZWdpblByb3BlcnR5Q2hhbmdlcygpIHsKKyAgICBkZWZlcnJlZCsrOworICB9CisKKyAg
LyoqCisgICAgQG1ldGhvZCBlbmRQcm9wZXJ0eUNoYW5nZXMKKyAgICBAcHJpdmF0ZQorICAqLwor
ICBmdW5jdGlvbiBlbmRQcm9wZXJ0eUNoYW5nZXMoKSB7CisgICAgZGVmZXJyZWQtLTsKKyAgICBp
ZiAoZGVmZXJyZWQgPD0gMCkgeworICAgICAgYmVmb3JlT2JzZXJ2ZXJTZXQuY2xlYXIoKTsKKyAg
ICAgIG9ic2VydmVyU2V0LmZsdXNoKCk7CisgICAgfQorICB9CisKKyAgLyoqCisgICAgTWFrZSBh
IHNlcmllcyBvZiBwcm9wZXJ0eSBjaGFuZ2VzIHRvZ2V0aGVyIGluIGFuCisgICAgZXhjZXB0aW9u
LXNhZmUgd2F5LgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgRW1iZXIuY2hhbmdlUHJvcGVy
dGllcyhmdW5jdGlvbigpIHsKKyAgICAgIG9iajEuc2V0KCdmb28nLCBtYXlCbG93VXBXaGVuU2V0
KTsKKyAgICAgIG9iajIuc2V0KCdiYXInLCBiYXopOworICAgIH0pOworICAgIGBgYAorICAKKyAg
ICBAbWV0aG9kIGNoYW5nZVByb3BlcnRpZXMKKyAgICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFj
aworICAgIEBwYXJhbSBbYmluZGluZ10KKyAgICBAcHJpdmF0ZQorICAqLworICBmdW5jdGlvbiBj
aGFuZ2VQcm9wZXJ0aWVzKGNhbGxiYWNrLCBiaW5kaW5nKSB7CisgICAgYmVnaW5Qcm9wZXJ0eUNo
YW5nZXMoKTsKKyAgICB0cnkgeworICAgICAgY2FsbGJhY2suY2FsbChiaW5kaW5nKTsKKyAgICB9
IGZpbmFsbHkgeworICAgICAgZW5kUHJvcGVydHlDaGFuZ2VzLmNhbGwoYmluZGluZyk7CisgICAg
fQorICB9CisKKyAgZnVuY3Rpb24gbm90aWZ5QmVmb3JlT2JzZXJ2ZXJzKG9iaiwga2V5TmFtZSkg
eworICAgIGlmIChvYmouaXNEZXN0cm95aW5nKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgdmFyIGV2ZW50TmFtZSA9IGtleU5hbWUgKyAnOmJlZm9yZSc7CisgICAgdmFyIGxpc3RlbmVy
cywgYWRkZWQ7CisgICAgaWYgKGRlZmVycmVkKSB7CisgICAgICBsaXN0ZW5lcnMgPSBiZWZvcmVP
YnNlcnZlclNldC5hZGQob2JqLCBrZXlOYW1lLCBldmVudE5hbWUpOworICAgICAgYWRkZWQgPSBf
ZW1iZXJNZXRhbEV2ZW50cy5hY2N1bXVsYXRlTGlzdGVuZXJzKG9iaiwgZXZlbnROYW1lLCBsaXN0
ZW5lcnMpOworICAgICAgX2VtYmVyTWV0YWxFdmVudHMuc2VuZEV2ZW50KG9iaiwgZXZlbnROYW1l
LCBbb2JqLCBrZXlOYW1lXSwgYWRkZWQpOworICAgIH0gZWxzZSB7CisgICAgICBfZW1iZXJNZXRh
bEV2ZW50cy5zZW5kRXZlbnQob2JqLCBldmVudE5hbWUsIFtvYmosIGtleU5hbWVdKTsKKyAgICB9
CisgIH0KKworICBmdW5jdGlvbiBub3RpZnlPYnNlcnZlcnMob2JqLCBrZXlOYW1lKSB7CisgICAg
aWYgKG9iai5pc0Rlc3Ryb3lpbmcpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2YXIg
ZXZlbnROYW1lID0ga2V5TmFtZSArICc6Y2hhbmdlJzsKKyAgICB2YXIgbGlzdGVuZXJzOworICAg
IGlmIChkZWZlcnJlZCkgeworICAgICAgbGlzdGVuZXJzID0gb2JzZXJ2ZXJTZXQuYWRkKG9iaiwg
a2V5TmFtZSwgZXZlbnROYW1lKTsKKyAgICAgIF9lbWJlck1ldGFsRXZlbnRzLmFjY3VtdWxhdGVM
aXN0ZW5lcnMob2JqLCBldmVudE5hbWUsIGxpc3RlbmVycyk7CisgICAgfSBlbHNlIHsKKyAgICAg
IF9lbWJlck1ldGFsRXZlbnRzLnNlbmRFdmVudChvYmosIGV2ZW50TmFtZSwgW29iaiwga2V5TmFt
ZV0pOworICAgIH0KKyAgfQorCisgIGV4cG9ydHMucHJvcGVydHlXaWxsQ2hhbmdlID0gcHJvcGVy
dHlXaWxsQ2hhbmdlOworICBleHBvcnRzLnByb3BlcnR5RGlkQ2hhbmdlID0gcHJvcGVydHlEaWRD
aGFuZ2U7CisgIGV4cG9ydHMub3ZlcnJpZGVDaGFpbnMgPSBvdmVycmlkZUNoYWluczsKKyAgZXhw
b3J0cy5iZWdpblByb3BlcnR5Q2hhbmdlcyA9IGJlZ2luUHJvcGVydHlDaGFuZ2VzOworICBleHBv
cnRzLmVuZFByb3BlcnR5Q2hhbmdlcyA9IGVuZFByb3BlcnR5Q2hhbmdlczsKKyAgZXhwb3J0cy5j
aGFuZ2VQcm9wZXJ0aWVzID0gY2hhbmdlUHJvcGVydGllczsKK30pOworZW5pZmVkKCdlbWJlci1t
ZXRhbC9wcm9wZXJ0eV9nZXQnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvZGVidWcnLCAnZW1i
ZXItbWV0YWwvcGF0aF9jYWNoZSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxEZWJ1
ZywgX2VtYmVyTWV0YWxQYXRoX2NhY2hlKSB7CisgIC8qKgorICBAbW9kdWxlIGVtYmVyLW1ldGFs
CisgICovCisKKyAgJ3VzZSBzdHJpY3QnOworCisgIGV4cG9ydHMuZ2V0ID0gZ2V0OworICBleHBv
cnRzLl9nZXRQYXRoID0gX2dldFBhdGg7CisgIGV4cG9ydHMuZ2V0V2l0aERlZmF1bHQgPSBnZXRX
aXRoRGVmYXVsdDsKKworICB2YXIgQUxMT1dBQkxFX1RZUEVTID0geworICAgIG9iamVjdDogdHJ1
ZSwKKyAgICBmdW5jdGlvbjogdHJ1ZSwKKyAgICBzdHJpbmc6IHRydWUKKyAgfTsKKworICAvLyAu
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
CisgIC8vIEdFVCBBTkQgU0VUCisgIC8vCisgIC8vIElmIHdlIGFyZSBvbiBhIHBsYXRmb3JtIHRo
YXQgc3VwcG9ydHMgYWNjZXNzb3JzIHdlIGNhbiB1c2UgdGhvc2UuCisgIC8vIE90aGVyd2lzZSBz
aW11bGF0ZSBhY2Nlc3NvcnMgYnkgbG9va2luZyB1cCB0aGUgcHJvcGVydHkgZGlyZWN0bHkgb24g
dGhlCisgIC8vIG9iamVjdC4KKworICAvKioKKyAgICBHZXRzIHRoZSB2YWx1ZSBvZiBhIHByb3Bl
cnR5IG9uIGFuIG9iamVjdC4gSWYgdGhlIHByb3BlcnR5IGlzIGNvbXB1dGVkLAorICAgIHRoZSBm
dW5jdGlvbiB3aWxsIGJlIGludm9rZWQuIElmIHRoZSBwcm9wZXJ0eSBpcyBub3QgZGVmaW5lZCBi
dXQgdGhlCisgICAgb2JqZWN0IGltcGxlbWVudHMgdGhlIGB1bmtub3duUHJvcGVydHlgIG1ldGhv
ZCB0aGVuIHRoYXQgd2lsbCBiZSBpbnZva2VkLgorICAKKyAgICBJZiB5b3UgcGxhbiB0byBydW4g
b24gSUU4IGFuZCBvbGRlciBicm93c2VycyB0aGVuIHlvdSBzaG91bGQgdXNlIHRoaXMKKyAgICBt
ZXRob2QgYW55dGltZSB5b3Ugd2FudCB0byByZXRyaWV2ZSBhIHByb3BlcnR5IG9uIGFuIG9iamVj
dCB0aGF0IHlvdSBkb24ndAorICAgIGtub3cgZm9yIHN1cmUgaXMgcHJpdmF0ZS4gKFByb3BlcnRp
ZXMgYmVnaW5uaW5nIHdpdGggYW4gdW5kZXJzY29yZSAnXycKKyAgICBhcmUgY29uc2lkZXJlZCBw
cml2YXRlLikKKyAgCisgICAgT24gYWxsIG5ld2VyIGJyb3dzZXJzLCB5b3Ugb25seSBuZWVkIHRv
IHVzZSB0aGlzIG1ldGhvZCB0byByZXRyaWV2ZQorICAgIHByb3BlcnRpZXMgaWYgdGhlIHByb3Bl
cnR5IG1pZ2h0IG5vdCBiZSBkZWZpbmVkIG9uIHRoZSBvYmplY3QgYW5kIHlvdSB3YW50CisgICAg
dG8gcmVzcGVjdCB0aGUgYHVua25vd25Qcm9wZXJ0eWAgaGFuZGxlci4gT3RoZXJ3aXNlIHlvdSBj
YW4gaWdub3JlIHRoaXMKKyAgICBtZXRob2QuCisgIAorICAgIE5vdGUgdGhhdCBpZiB0aGUgb2Jq
ZWN0IGl0c2VsZiBpcyBgdW5kZWZpbmVkYCwgdGhpcyBtZXRob2Qgd2lsbCB0aHJvdworICAgIGFu
IGVycm9yLgorICAKKyAgICBAbWV0aG9kIGdldAorICAgIEBmb3IgRW1iZXIKKyAgICBAcGFyYW0g
e09iamVjdH0gb2JqIFRoZSBvYmplY3QgdG8gcmV0cmlldmUgZnJvbS4KKyAgICBAcGFyYW0ge1N0
cmluZ30ga2V5TmFtZSBUaGUgcHJvcGVydHkga2V5IHRvIHJldHJpZXZlCisgICAgQHJldHVybiB7
T2JqZWN0fSB0aGUgcHJvcGVydHkgdmFsdWUgb3IgYG51bGxgLgorICAgIEBwdWJsaWMKKyAgKi8K
KworICBmdW5jdGlvbiBnZXQob2JqLCBrZXlOYW1lKSB7CisgICAgX2VtYmVyTWV0YWxEZWJ1Zy5h
c3NlcnQoJ0dldCBtdXN0IGJlIGNhbGxlZCB3aXRoIHR3byBhcmd1bWVudHM7IGFuIG9iamVjdCBh
bmQgYSBwcm9wZXJ0eSBrZXknLCBhcmd1bWVudHMubGVuZ3RoID09PSAyKTsKKyAgICBfZW1iZXJN
ZXRhbERlYnVnLmFzc2VydCgnQ2Fubm90IGNhbGwgZ2V0IHdpdGggXCcnICsga2V5TmFtZSArICdc
JyBvbiBhbiB1bmRlZmluZWQgb2JqZWN0LicsIG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0g
bnVsbCk7CisgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1RoZSBrZXkgcHJvdmlkZWQgdG8g
Z2V0IG11c3QgYmUgYSBzdHJpbmcsIHlvdSBwYXNzZWQgJyArIGtleU5hbWUsIHR5cGVvZiBrZXlO
YW1lID09PSAnc3RyaW5nJyk7CisgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1wndGhpc1wn
IGluIHBhdGhzIGlzIG5vdCBzdXBwb3J0ZWQnLCAhX2VtYmVyTWV0YWxQYXRoX2NhY2hlLmhhc1Ro
aXMoa2V5TmFtZSkpOworCisgICAgLy8gSGVscGVycyB0aGF0IG9wZXJhdGUgd2l0aCAndGhpcycg
d2l0aGluIGFuICNlYWNoCisgICAgaWYgKGtleU5hbWUgPT09ICcnKSB7CisgICAgICByZXR1cm4g
b2JqOworICAgIH0KKworICAgIHZhciB2YWx1ZSA9IG9ialtrZXlOYW1lXTsKKyAgICB2YXIgZGVz
YyA9IHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUu
aXNEZXNjcmlwdG9yID8gdmFsdWUgOiB1bmRlZmluZWQ7CisgICAgdmFyIHJldDsKKworICAgIGlm
IChkZXNjID09PSB1bmRlZmluZWQgJiYgX2VtYmVyTWV0YWxQYXRoX2NhY2hlLmlzUGF0aChrZXlO
YW1lKSkgeworICAgICAgcmV0dXJuIF9nZXRQYXRoKG9iaiwga2V5TmFtZSk7CisgICAgfQorCisg
ICAgaWYgKGRlc2MpIHsKKyAgICAgIHJldHVybiBkZXNjLmdldChvYmosIGtleU5hbWUpOworICAg
IH0gZWxzZSB7CisgICAgICByZXQgPSB2YWx1ZTsKKworICAgICAgaWYgKHJldCA9PT0gdW5kZWZp
bmVkICYmICdvYmplY3QnID09PSB0eXBlb2Ygb2JqICYmICEoa2V5TmFtZSBpbiBvYmopICYmICdm
dW5jdGlvbicgPT09IHR5cGVvZiBvYmoudW5rbm93blByb3BlcnR5KSB7CisgICAgICAgIHJldHVy
biBvYmoudW5rbm93blByb3BlcnR5KGtleU5hbWUpOworICAgICAgfQorCisgICAgICByZXR1cm4g
cmV0OworICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIF9nZXRQYXRoKHJvb3QsIHBhdGgpIHsKKyAg
ICB2YXIgb2JqID0gcm9vdDsKKyAgICB2YXIgcGFydHMgPSBwYXRoLnNwbGl0KCcuJyk7CisKKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB7CisgICAgICBpZiAoIWlz
R2V0dGFibGUob2JqKSkgeworICAgICAgICByZXR1cm4gdW5kZWZpbmVkOworICAgICAgfQorCisg
ICAgICBvYmogPSBnZXQob2JqLCBwYXJ0c1tpXSk7CisKKyAgICAgIGlmIChvYmogJiYgb2JqLmlz
RGVzdHJveWVkKSB7CisgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CisgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIG9iajsKKyAgfQorCisgIGZ1bmN0aW9uIGlzR2V0dGFibGUob2JqKSB7Cisg
ICAgaWYgKG9iaiA9PSBudWxsKSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
cmV0dXJuIEFMTE9XQUJMRV9UWVBFU1t0eXBlb2Ygb2JqXTsKKyAgfQorCisgIC8qKgorICAgIFJl
dHJpZXZlcyB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eSBmcm9tIGFuIE9iamVjdCwgb3IgYSBkZWZh
dWx0IHZhbHVlIGluIHRoZQorICAgIGNhc2UgdGhhdCB0aGUgcHJvcGVydHkgcmV0dXJucyBgdW5k
ZWZpbmVkYC4KKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIEVtYmVyLmdldFdpdGhEZWZhdWx0
KHBlcnNvbiwgJ2xhc3ROYW1lJywgJ0RvZScpOworICAgIGBgYAorICAKKyAgICBAbWV0aG9kIGdl
dFdpdGhEZWZhdWx0CisgICAgQGZvciBFbWJlcgorICAgIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhl
IG9iamVjdCB0byByZXRyaWV2ZSBmcm9tLgorICAgIEBwYXJhbSB7U3RyaW5nfSBrZXlOYW1lIFRo
ZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byByZXRyaWV2ZQorICAgIEBwYXJhbSB7T2JqZWN0fSBk
ZWZhdWx0VmFsdWUgVGhlIHZhbHVlIHRvIHJldHVybiBpZiB0aGUgcHJvcGVydHkgdmFsdWUgaXMg
dW5kZWZpbmVkCisgICAgQHJldHVybiB7T2JqZWN0fSBUaGUgcHJvcGVydHkgdmFsdWUgb3IgdGhl
IGRlZmF1bHRWYWx1ZS4KKyAgICBAcHVibGljCisgICovCisKKyAgZnVuY3Rpb24gZ2V0V2l0aERl
ZmF1bHQocm9vdCwga2V5LCBkZWZhdWx0VmFsdWUpIHsKKyAgICB2YXIgdmFsdWUgPSBnZXQocm9v
dCwga2V5KTsKKworICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7CisgICAgICByZXR1cm4g
ZGVmYXVsdFZhbHVlOworICAgIH0KKyAgICByZXR1cm4gdmFsdWU7CisgIH0KKworICBleHBvcnRz
LmRlZmF1bHQgPSBnZXQ7Cit9KTsKK2VuaWZlZCgnZW1iZXItbWV0YWwvcHJvcGVydHlfc2V0Jywg
WydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLW1ldGFsL2ZlYXR1cmVzJywg
J2VtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCcsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9ldmVudHMn
LCAnZW1iZXItbWV0YWwvcHJvcGVydGllcycsICdlbWJlci1tZXRhbC9lcnJvcicsICdlbWJlci1t
ZXRhbC9wYXRoX2NhY2hlJywgJ2VtYmVyLW1ldGFsL21ldGEnLCAnZW1iZXItbWV0YWwvdXRpbHMn
LCAnZW1iZXItbWV0YWwvdGFncyddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxEZWJ1
ZywgX2VtYmVyTWV0YWxGZWF0dXJlcywgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQsIF9lbWJlck1l
dGFsUHJvcGVydHlfZXZlbnRzLCBfZW1iZXJNZXRhbFByb3BlcnRpZXMsIF9lbWJlck1ldGFsRXJy
b3IsIF9lbWJlck1ldGFsUGF0aF9jYWNoZSwgX2VtYmVyTWV0YWxNZXRhLCBfZW1iZXJNZXRhbFV0
aWxzLCBfZW1iZXJNZXRhbFRhZ3MpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIGV4cG9ydHMuc2V0
ID0gc2V0OworICBleHBvcnRzLnRyeVNldCA9IHRyeVNldDsKKworICAvKioKKyAgICBTZXRzIHRo
ZSB2YWx1ZSBvZiBhIHByb3BlcnR5IG9uIGFuIG9iamVjdCwgcmVzcGVjdGluZyBjb21wdXRlZCBw
cm9wZXJ0aWVzCisgICAgYW5kIG5vdGlmeWluZyBvYnNlcnZlcnMgYW5kIG90aGVyIGxpc3RlbmVy
cyBvZiB0aGUgY2hhbmdlLiBJZiB0aGUKKyAgICBwcm9wZXJ0eSBpcyBub3QgZGVmaW5lZCBidXQg
dGhlIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBgc2V0VW5rbm93blByb3BlcnR5YAorICAgIG1ldGhv
ZCB0aGVuIHRoYXQgd2lsbCBiZSBpbnZva2VkIGFzIHdlbGwuCisgIAorICAgIEBtZXRob2Qgc2V0
CisgICAgQGZvciBFbWJlcgorICAgIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byBt
b2RpZnkuCisgICAgQHBhcmFtIHtTdHJpbmd9IGtleU5hbWUgVGhlIHByb3BlcnR5IGtleSB0byBz
ZXQKKyAgICBAcGFyYW0ge09iamVjdH0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldAorICAgIEByZXR1
cm4ge09iamVjdH0gdGhlIHBhc3NlZCB2YWx1ZS4KKyAgICBAcHVibGljCisgICovCisKKyAgZnVu
Y3Rpb24gc2V0KG9iaiwga2V5TmFtZSwgdmFsdWUsIHRvbGVyYW50KSB7CisgICAgX2VtYmVyTWV0
YWxEZWJ1Zy5hc3NlcnQoJ1NldCBtdXN0IGJlIGNhbGxlZCB3aXRoIHRocmVlIG9yIGZvdXIgYXJn
dW1lbnRzOyBhbiBvYmplY3QsIGEgcHJvcGVydHkga2V5LCBhIHZhbHVlIGFuZCB0b2xlcmFudCB0
cnVlL2ZhbHNlJywgYXJndW1lbnRzLmxlbmd0aCA9PT0gMyB8fCBhcmd1bWVudHMubGVuZ3RoID09
PSA0KTsKKyAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnQ2Fubm90IGNhbGwgc2V0IHdpdGgg
XCcnICsga2V5TmFtZSArICdcJyBvbiBhbiB1bmRlZmluZWQgb2JqZWN0LicsIG9iaiAhPT0gdW5k
ZWZpbmVkICYmIG9iaiAhPT0gbnVsbCk7CisgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1Ro
ZSBrZXkgcHJvdmlkZWQgdG8gc2V0IG11c3QgYmUgYSBzdHJpbmcsIHlvdSBwYXNzZWQgJyArIGtl
eU5hbWUsIHR5cGVvZiBrZXlOYW1lID09PSAnc3RyaW5nJyk7CisgICAgX2VtYmVyTWV0YWxEZWJ1
Zy5hc3NlcnQoJ1wndGhpc1wnIGluIHBhdGhzIGlzIG5vdCBzdXBwb3J0ZWQnLCAhX2VtYmVyTWV0
YWxQYXRoX2NhY2hlLmhhc1RoaXMoa2V5TmFtZSkpOworCisgICAgdmFyIG1ldGEgPSB1bmRlZmlu
ZWQsCisgICAgICAgIHBvc3NpYmxlRGVzYyA9IHVuZGVmaW5lZCwKKyAgICAgICAgZGVzYyA9IHVu
ZGVmaW5lZDsKKworICAgIGlmIChvYmopIHsKKyAgICAgIG1ldGEgPSBfZW1iZXJNZXRhbE1ldGEu
cGVla01ldGEob2JqKTsKKyAgICAgIHBvc3NpYmxlRGVzYyA9IG9ialtrZXlOYW1lXTsKKyAgICAg
IGRlc2MgPSBwb3NzaWJsZURlc2MgIT09IG51bGwgJiYgdHlwZW9mIHBvc3NpYmxlRGVzYyA9PT0g
J29iamVjdCcgJiYgcG9zc2libGVEZXNjLmlzRGVzY3JpcHRvciA/IHBvc3NpYmxlRGVzYyA6IHVu
ZGVmaW5lZDsKKyAgICAgIF9lbWJlck1ldGFsVGFncy5tYXJrT2JqZWN0QXNEaXJ0eShtZXRhKTsK
KyAgICB9CisKKyAgICB2YXIgaXNVbmtub3duLCBjdXJyZW50VmFsdWU7CisgICAgaWYgKGRlc2Mg
PT09IHVuZGVmaW5lZCAmJiBfZW1iZXJNZXRhbFBhdGhfY2FjaGUuaXNQYXRoKGtleU5hbWUpKSB7
CisgICAgICByZXR1cm4gc2V0UGF0aChvYmosIGtleU5hbWUsIHZhbHVlLCB0b2xlcmFudCk7Cisg
ICAgfQorCisgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ2NhbGxpbmcgc2V0IG9uIGRlc3Ry
b3llZCBvYmplY3Q6ICcgKyBfZW1iZXJNZXRhbFV0aWxzLnRvU3RyaW5nKG9iaikgKyAnLicgKyBr
ZXlOYW1lICsgJyA9ICcgKyBfZW1iZXJNZXRhbFV0aWxzLnRvU3RyaW5nKHZhbHVlKSwgIW9iai5p
c0Rlc3Ryb3llZCk7CisKKyAgICBpZiAoZGVzYykgeworICAgICAgZGVzYy5zZXQob2JqLCBrZXlO
YW1lLCB2YWx1ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVk
ICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9ialtrZXlOYW1lXSA9PT0gdmFsdWUpIHsK
KyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgfQorCisgICAgICBpc1Vua25vd24gPSAnb2Jq
ZWN0JyA9PT0gdHlwZW9mIG9iaiAmJiAhKGtleU5hbWUgaW4gb2JqKTsKKworICAgICAgLy8gc2V0
VW5rbm93blByb3BlcnR5IGlzIGNhbGxlZCBpZiBgb2JqYCBpcyBhbiBvYmplY3QsCisgICAgICAv
LyB0aGUgcHJvcGVydHkgZG9lcyBub3QgYWxyZWFkeSBleGlzdCwgYW5kIHRoZQorICAgICAgLy8g
YHNldFVua25vd25Qcm9wZXJ0eWAgbWV0aG9kIGV4aXN0cyBvbiB0aGUgb2JqZWN0CisgICAgICBp
ZiAoaXNVbmtub3duICYmICdmdW5jdGlvbicgPT09IHR5cGVvZiBvYmouc2V0VW5rbm93blByb3Bl
cnR5KSB7CisgICAgICAgIG9iai5zZXRVbmtub3duUHJvcGVydHkoa2V5TmFtZSwgdmFsdWUpOwor
ICAgICAgfSBlbHNlIGlmIChtZXRhICYmIG1ldGEucGVla1dhdGNoaW5nKGtleU5hbWUpID4gMCkg
eworICAgICAgICBpZiAobWV0YS5wcm90byAhPT0gb2JqKSB7CisgICAgICAgICAgY3VycmVudFZh
bHVlID0gb2JqW2tleU5hbWVdOworICAgICAgICB9CisgICAgICAgIC8vIG9ubHkgdHJpZ2dlciBh
IGNoYW5nZSBpZiB0aGUgdmFsdWUgaGFzIGNoYW5nZWQKKyAgICAgICAgaWYgKHZhbHVlICE9PSBj
dXJyZW50VmFsdWUpIHsKKyAgICAgICAgICBfZW1iZXJNZXRhbFByb3BlcnR5X2V2ZW50cy5wcm9w
ZXJ0eVdpbGxDaGFuZ2Uob2JqLCBrZXlOYW1lKTsKKworICAgICAgICAgIGlmIChjdXJyZW50VmFs
dWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleU5hbWUgaW4gb2JqKSB8fCAhT2JqZWN0LnByb3RvdHlw
ZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iaiwga2V5TmFtZSkpIHsKKyAgICAgICAgICAg
IF9lbWJlck1ldGFsUHJvcGVydGllcy5kZWZpbmVQcm9wZXJ0eShvYmosIGtleU5hbWUsIG51bGws
IHZhbHVlKTsgLy8gc2V0dXAgbWFuZGF0b3J5IHNldHRlcgorICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgIHZhciBkZXNjcmlwdG9yID0gX2VtYmVyTWV0YWxVdGlscy5sb29rdXBEZXNj
cmlwdG9yKG9iaiwga2V5TmFtZSk7CisgICAgICAgICAgICAgIHZhciBpc01hbmRhdG9yeVNldHRl
ciA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5zZXQgJiYgZGVzY3JpcHRvci5zZXQuaXNNYW5k
YXRvcnlTZXR0ZXI7CisgICAgICAgICAgICAgIGlmIChpc01hbmRhdG9yeVNldHRlcikgeworICAg
ICAgICAgICAgICAgIG1ldGEud3JpdGVWYWx1ZXMoa2V5TmFtZSwgdmFsdWUpOworICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG9ialtrZXlOYW1lXSA9IHZhbHVlOworICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICBfZW1iZXJNZXRhbFByb3Bl
cnR5X2V2ZW50cy5wcm9wZXJ0eURpZENoYW5nZShvYmosIGtleU5hbWUpOworICAgICAgICB9Cisg
ICAgICB9IGVsc2UgeworICAgICAgICBvYmpba2V5TmFtZV0gPSB2YWx1ZTsKKyAgICAgICAgaWYg
KG9ialtfZW1iZXJNZXRhbFByb3BlcnR5X2V2ZW50cy5QUk9QRVJUWV9ESURfQ0hBTkdFXSkgewor
ICAgICAgICAgIG9ialtfZW1iZXJNZXRhbFByb3BlcnR5X2V2ZW50cy5QUk9QRVJUWV9ESURfQ0hB
TkdFXShrZXlOYW1lKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdmFs
dWU7CisgIH0KKworICBmdW5jdGlvbiBzZXRQYXRoKHJvb3QsIHBhdGgsIHZhbHVlLCB0b2xlcmFu
dCkgeworICAgIHZhciBrZXlOYW1lOworCisgICAgLy8gZ2V0IHRoZSBsYXN0IHBhcnQgb2YgdGhl
IHBhdGgKKyAgICBrZXlOYW1lID0gcGF0aC5zbGljZShwYXRoLmxhc3RJbmRleE9mKCcuJykgKyAx
KTsKKworICAgIC8vIGdldCB0aGUgZmlyc3QgcGFydCBvZiB0aGUgcGFydAorICAgIHBhdGggPSBw
YXRoID09PSBrZXlOYW1lID8ga2V5TmFtZSA6IHBhdGguc2xpY2UoMCwgcGF0aC5sZW5ndGggLSAo
a2V5TmFtZS5sZW5ndGggKyAxKSk7CisKKyAgICAvLyB1bmxlc3MgdGhlIHBhdGggaXMgdGhpcywg
bG9vayB1cCB0aGUgZmlyc3QgcGFydCB0bworICAgIC8vIGdldCB0aGUgcm9vdAorICAgIGlmIChw
YXRoICE9PSAndGhpcycpIHsKKyAgICAgIHJvb3QgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5f
Z2V0UGF0aChyb290LCBwYXRoKTsKKyAgICB9CisKKyAgICBpZiAoIWtleU5hbWUgfHwga2V5TmFt
ZS5sZW5ndGggPT09IDApIHsKKyAgICAgIHRocm93IG5ldyBfZW1iZXJNZXRhbEVycm9yLmRlZmF1
bHQoJ1Byb3BlcnR5IHNldCBmYWlsZWQ6IFlvdSBwYXNzZWQgYW4gZW1wdHkgcGF0aCcpOworICAg
IH0KKworICAgIGlmICghcm9vdCkgeworICAgICAgaWYgKHRvbGVyYW50KSB7CisgICAgICAgIHJl
dHVybjsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHRocm93IG5ldyBfZW1iZXJNZXRhbEVycm9y
LmRlZmF1bHQoJ1Byb3BlcnR5IHNldCBmYWlsZWQ6IG9iamVjdCBpbiBwYXRoICInICsgcGF0aCAr
ICciIGNvdWxkIG5vdCBiZSBmb3VuZCBvciB3YXMgZGVzdHJveWVkLicpOworICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiBzZXQocm9vdCwga2V5TmFtZSwgdmFsdWUpOworICB9CisKKyAgLyoq
CisgICAgRXJyb3ItdG9sZXJhbnQgZm9ybSBvZiBgRW1iZXIuc2V0YC4gV2lsbCBub3QgYmxvdyB1
cCBpZiBhbnkgcGFydCBvZiB0aGUKKyAgICBjaGFpbiBpcyBgdW5kZWZpbmVkYCwgYG51bGxgLCBv
ciBkZXN0cm95ZWQuCisgIAorICAgIFRoaXMgaXMgcHJpbWFyaWx5IHVzZWQgd2hlbiBzeW5jaW5n
IGJpbmRpbmdzLCB3aGljaCBtYXkgdHJ5IHRvIHVwZGF0ZSBhZnRlcgorICAgIGFuIG9iamVjdCBo
YXMgYmVlbiBkZXN0cm95ZWQuCisgIAorICAgIEBtZXRob2QgdHJ5U2V0CisgICAgQGZvciBFbWJl
cgorICAgIEBwYXJhbSB7T2JqZWN0fSByb290IFRoZSBvYmplY3QgdG8gbW9kaWZ5LgorICAgIEBw
YXJhbSB7U3RyaW5nfSBwYXRoIFRoZSBwcm9wZXJ0eSBwYXRoIHRvIHNldAorICAgIEBwYXJhbSB7
T2JqZWN0fSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0CisgICAgQHB1YmxpYworICAqLworCisgIGZ1
bmN0aW9uIHRyeVNldChyb290LCBwYXRoLCB2YWx1ZSkgeworICAgIHJldHVybiBzZXQocm9vdCwg
cGF0aCwgdmFsdWUsIHRydWUpOworICB9Cit9KTsKK2VuaWZlZCgiZW1iZXItbWV0YWwvcmVwbGFj
ZSIsIFsiZXhwb3J0cyJdLCBmdW5jdGlvbiAoZXhwb3J0cykgeworICAidXNlIHN0cmljdCI7CisK
KyAgZXhwb3J0cy5fcmVwbGFjZSA9IF9yZXBsYWNlOworICBleHBvcnRzLmRlZmF1bHQgPSByZXBs
YWNlOworICB2YXIgc3BsaWNlID0gQXJyYXkucHJvdG90eXBlLnNwbGljZTsKKworICBmdW5jdGlv
biBfcmVwbGFjZShhcnJheSwgaWR4LCBhbXQsIG9iamVjdHMpIHsKKyAgICB2YXIgYXJncyA9IFtd
LmNvbmNhdChvYmplY3RzKTsKKyAgICB2YXIgcmV0ID0gW107CisgICAgLy8gaHR0cHM6Ly9jb2Rl
Lmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTU2NTg4CisgICAgdmFyIHNp
emUgPSA2MDAwMDsKKyAgICB2YXIgc3RhcnQgPSBpZHg7CisgICAgdmFyIGVuZHMgPSBhbXQ7Cisg
ICAgdmFyIGNvdW50LCBjaHVuazsKKworICAgIHdoaWxlIChhcmdzLmxlbmd0aCkgeworICAgICAg
Y291bnQgPSBlbmRzID4gc2l6ZSA/IHNpemUgOiBlbmRzOworICAgICAgaWYgKGNvdW50IDw9IDAp
IHsKKyAgICAgICAgY291bnQgPSAwOworICAgICAgfQorCisgICAgICBjaHVuayA9IGFyZ3Muc3Bs
aWNlKDAsIHNpemUpOworICAgICAgY2h1bmsgPSBbc3RhcnQsIGNvdW50XS5jb25jYXQoY2h1bmsp
OworCisgICAgICBzdGFydCArPSBzaXplOworICAgICAgZW5kcyAtPSBjb3VudDsKKworICAgICAg
cmV0ID0gcmV0LmNvbmNhdChzcGxpY2UuYXBwbHkoYXJyYXksIGNodW5rKSk7CisgICAgfQorICAg
IHJldHVybiByZXQ7CisgIH0KKworICAvKioKKyAgICBSZXBsYWNlcyBvYmplY3RzIGluIGFuIGFy
cmF5IHdpdGggdGhlIHBhc3NlZCBvYmplY3RzLgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAg
ICB2YXIgYXJyYXkgPSBbMSwyLDNdOworICAgICAgRW1iZXIuRW51bWVyYWJsZVV0aWxzLnJlcGxh
Y2UoYXJyYXksIDEsIDIsIFs0LCA1XSk7IC8vIFsxLCA0LCA1XQorICAKKyAgICAgIHZhciBhcnJh
eSA9IFsxLDIsM107CisgICAgICBFbWJlci5FbnVtZXJhYmxlVXRpbHMucmVwbGFjZShhcnJheSwg
MSwgMSwgWzQsIDVdKTsgLy8gWzEsIDQsIDUsIDNdCisgIAorICAgICAgdmFyIGFycmF5ID0gWzEs
MiwzXTsKKyAgICAgIEVtYmVyLkVudW1lcmFibGVVdGlscy5yZXBsYWNlKGFycmF5LCAxMCwgMSwg
WzQsIDVdKTsgLy8gWzEsIDIsIDMsIDQsIDVdCisgICAgYGBgCisgIAorICAgIEBtZXRob2QgcmVw
bGFjZQorICAgIEBkZXByZWNhdGVkCisgICAgQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5
IHRoZSBvYmplY3RzIHNob3VsZCBiZSBpbnNlcnRlZCBpbnRvLgorICAgIEBwYXJhbSB7TnVtYmVy
fSBpZHggU3RhcnRpbmcgaW5kZXggaW4gdGhlIGFycmF5IHRvIHJlcGxhY2UuIElmICppZHgqID49
CisgICAgbGVuZ3RoLCB0aGVuIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBhcnJheS4KKyAgICBA
cGFyYW0ge051bWJlcn0gYW10IE51bWJlciBvZiBlbGVtZW50cyB0aGF0IHNob3VsZCBiZSByZW1v
dmVkIGZyb20gdGhlIGFycmF5LAorICAgIHN0YXJ0aW5nIGF0ICppZHgqCisgICAgQHBhcmFtIHtB
cnJheX0gb2JqZWN0cyBBbiBhcnJheSBvZiB6ZXJvIG9yIG1vcmUgb2JqZWN0cyB0aGF0IHNob3Vs
ZCBiZQorICAgIGluc2VydGVkIGludG8gdGhlIGFycmF5IGF0ICppZHgqCisgIAorICAgIEByZXR1
cm4ge0FycmF5fSBUaGUgbW9kaWZpZWQgYXJyYXkuCisgICAgQHB1YmxpYworICAqLworCisgIGZ1
bmN0aW9uIHJlcGxhY2UoYXJyYXksIGlkeCwgYW10LCBvYmplY3RzKSB7CisgICAgaWYgKGFycmF5
LnJlcGxhY2UpIHsKKyAgICAgIHJldHVybiBhcnJheS5yZXBsYWNlKGlkeCwgYW10LCBvYmplY3Rz
KTsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIF9yZXBsYWNlKGFycmF5LCBpZHgsIGFtdCwg
b2JqZWN0cyk7CisgICAgfQorICB9Cit9KTsKK2VuaWZlZCgnZW1iZXItbWV0YWwvcnVuX2xvb3An
LCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvY29yZScsICdlbWJlci1tZXRhbC9kZWJ1ZycsICdl
bWJlci1tZXRhbC91dGlscycsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9ldmVudHMnLCAnYmFja2J1
cm5lciddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxDb3JlLCBfZW1iZXJNZXRhbERl
YnVnLCBfZW1iZXJNZXRhbFV0aWxzLCBfZW1iZXJNZXRhbFByb3BlcnR5X2V2ZW50cywgX2JhY2ti
dXJuZXIpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIGV4cG9ydHMuZGVmYXVsdCA9IHJ1bjsKKwor
ICBmdW5jdGlvbiBvbkJlZ2luKGN1cnJlbnQpIHsKKyAgICBydW4uY3VycmVudFJ1bkxvb3AgPSBj
dXJyZW50OworICB9CisKKyAgZnVuY3Rpb24gb25FbmQoY3VycmVudCwgbmV4dCkgeworICAgIHJ1
bi5jdXJyZW50UnVuTG9vcCA9IG5leHQ7CisgIH0KKworICAvLyBFUzZUT0RPOiBzaG91bGQgQmFj
a2J1cm5lciBiZWNvbWUgZXM2PworICB2YXIgYmFja2J1cm5lciA9IG5ldyBfYmFja2J1cm5lci5k
ZWZhdWx0KFsnc3luYycsICdhY3Rpb25zJywgJ2Rlc3Ryb3knXSwgeworICAgIEdVSURfS0VZOiBf
ZW1iZXJNZXRhbFV0aWxzLkdVSURfS0VZLAorICAgIHN5bmM6IHsKKyAgICAgIGJlZm9yZTogX2Vt
YmVyTWV0YWxQcm9wZXJ0eV9ldmVudHMuYmVnaW5Qcm9wZXJ0eUNoYW5nZXMsCisgICAgICBhZnRl
cjogX2VtYmVyTWV0YWxQcm9wZXJ0eV9ldmVudHMuZW5kUHJvcGVydHlDaGFuZ2VzCisgICAgfSwK
KyAgICBkZWZhdWx0UXVldWU6ICdhY3Rpb25zJywKKyAgICBvbkJlZ2luOiBvbkJlZ2luLAorICAg
IG9uRW5kOiBvbkVuZCwKKyAgICBvbkVycm9yVGFyZ2V0OiBfZW1iZXJNZXRhbENvcmUuZGVmYXVs
dCwKKyAgICBvbkVycm9yTWV0aG9kOiAnb25lcnJvcicKKyAgfSk7CisKKyAgLy8gLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorICAvLyBy
dW4gLSB0aGlzIGlzIGlkZWFsbHkgdGhlIG9ubHkgcHVibGljIEFQSSB0aGUgZGV2IHNlZXMKKyAg
Ly8KKworICAvKioKKyAgICBSdW5zIHRoZSBwYXNzZWQgdGFyZ2V0IGFuZCBtZXRob2QgaW5zaWRl
IG9mIGEgUnVuTG9vcCwgZW5zdXJpbmcgYW55CisgICAgZGVmZXJyZWQgYWN0aW9ucyBpbmNsdWRp
bmcgYmluZGluZ3MgYW5kIHZpZXdzIHVwZGF0ZXMgYXJlIGZsdXNoZWQgYXQgdGhlCisgICAgZW5k
LgorICAKKyAgICBOb3JtYWxseSB5b3Ugc2hvdWxkIG5vdCBuZWVkIHRvIGludm9rZSB0aGlzIG1l
dGhvZCB5b3Vyc2VsZi4gSG93ZXZlciBpZgorICAgIHlvdSBhcmUgaW1wbGVtZW50aW5nIHJhdyBl
dmVudCBoYW5kbGVycyB3aGVuIGludGVyZmFjaW5nIHdpdGggb3RoZXIKKyAgICBsaWJyYXJpZXMg
b3IgcGx1Z2lucywgeW91IHNob3VsZCBwcm9iYWJseSB3cmFwIGFsbCBvZiB5b3VyIGNvZGUgaW5z
aWRlIHRoaXMKKyAgICBjYWxsLgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgcnVuKGZ1bmN0
aW9uKCkgeworICAgICAgLy8gY29kZSB0byBiZSBleGVjdXRlZCB3aXRoaW4gYSBSdW5Mb29wCisg
ICAgfSk7CisgICAgYGBgCisgIAorICAgIEBjbGFzcyBydW4KKyAgICBAbmFtZXNwYWNlIEVtYmVy
CisgICAgQHN0YXRpYworICAgIEBjb25zdHJ1Y3RvcgorICAgIEBwYXJhbSB7T2JqZWN0fSBbdGFy
Z2V0XSB0YXJnZXQgb2YgbWV0aG9kIHRvIGNhbGwKKyAgICBAcGFyYW0ge0Z1bmN0aW9ufFN0cmlu
Z30gbWV0aG9kIE1ldGhvZCB0byBpbnZva2UuCisgICAgICBNYXkgYmUgYSBmdW5jdGlvbiBvciBh
IHN0cmluZy4gSWYgeW91IHBhc3MgYSBzdHJpbmcKKyAgICAgIHRoZW4gaXQgd2lsbCBiZSBsb29r
ZWQgdXAgb24gdGhlIHBhc3NlZCB0YXJnZXQuCisgICAgQHBhcmFtIHtPYmplY3R9IFthcmdzKl0g
QW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIHlvdSB3aXNoIHRvIHBhc3MgdG8gdGhlIG1ldGhvZC4K
KyAgICBAcmV0dXJuIHtPYmplY3R9IHJldHVybiB2YWx1ZSBmcm9tIGludm9raW5nIHRoZSBwYXNz
ZWQgZnVuY3Rpb24uCisgICAgQHB1YmxpYworICAqLworCisgIGZ1bmN0aW9uIHJ1bigpIHsKKyAg
ICByZXR1cm4gYmFja2J1cm5lci5ydW4uYXBwbHkoYmFja2J1cm5lciwgYXJndW1lbnRzKTsKKyAg
fQorCisgIC8qKgorICAgIElmIG5vIHJ1bi1sb29wIGlzIHByZXNlbnQsIGl0IGNyZWF0ZXMgYSBu
ZXcgb25lLiBJZiBhIHJ1biBsb29wIGlzCisgICAgcHJlc2VudCBpdCB3aWxsIHF1ZXVlIGl0c2Vs
ZiB0byBydW4gb24gdGhlIGV4aXN0aW5nIHJ1bi1sb29wcyBhY3Rpb24KKyAgICBxdWV1ZS4KKyAg
CisgICAgUGxlYXNlIG5vdGU6IFRoaXMgaXMgbm90IGZvciBub3JtYWwgdXNhZ2UsIGFuZCBzaG91
bGQgYmUgdXNlZCBzcGFyaW5nbHkuCisgIAorICAgIElmIGludm9rZWQgd2hlbiBub3Qgd2l0aGlu
IGEgcnVuIGxvb3A6CisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAgICBydW4uam9pbihmdW5jdGlv
bigpIHsKKyAgICAgIC8vIGNyZWF0ZXMgYSBuZXcgcnVuLWxvb3AKKyAgICB9KTsKKyAgICBgYGAK
KyAgCisgICAgQWx0ZXJuYXRpdmVseSwgaWYgY2FsbGVkIHdpdGhpbiBhbiBleGlzdGluZyBydW4g
bG9vcDoKKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIHJ1bihmdW5jdGlvbigpIHsKKyAgICAg
IC8vIGNyZWF0ZXMgYSBuZXcgcnVuLWxvb3AKKyAgICAgIHJ1bi5qb2luKGZ1bmN0aW9uKCkgewor
ICAgICAgICAvLyBqb2lucyB3aXRoIHRoZSBleGlzdGluZyBydW4tbG9vcCwgYW5kIHF1ZXVlcyBm
b3IgaW52b2NhdGlvbiBvbgorICAgICAgICAvLyB0aGUgZXhpc3RpbmcgcnVuLWxvb3BzIGFjdGlv
biBxdWV1ZS4KKyAgICAgIH0pOworICAgIH0pOworICAgIGBgYAorICAKKyAgICBAbWV0aG9kIGpv
aW4KKyAgICBAbmFtZXNwYWNlIEVtYmVyCisgICAgQHBhcmFtIHtPYmplY3R9IFt0YXJnZXRdIHRh
cmdldCBvZiBtZXRob2QgdG8gY2FsbAorICAgIEBwYXJhbSB7RnVuY3Rpb258U3RyaW5nfSBtZXRo
b2QgTWV0aG9kIHRvIGludm9rZS4KKyAgICAgIE1heSBiZSBhIGZ1bmN0aW9uIG9yIGEgc3RyaW5n
LiBJZiB5b3UgcGFzcyBhIHN0cmluZworICAgICAgdGhlbiBpdCB3aWxsIGJlIGxvb2tlZCB1cCBv
biB0aGUgcGFzc2VkIHRhcmdldC4KKyAgICBAcGFyYW0ge09iamVjdH0gW2FyZ3MqXSBBbnkgYWRk
aXRpb25hbCBhcmd1bWVudHMgeW91IHdpc2ggdG8gcGFzcyB0byB0aGUgbWV0aG9kLgorICAgIEBy
ZXR1cm4ge09iamVjdH0gUmV0dXJuIHZhbHVlIGZyb20gaW52b2tpbmcgdGhlIHBhc3NlZCBmdW5j
dGlvbi4gUGxlYXNlIG5vdGUsCisgICAgd2hlbiBjYWxsZWQgd2l0aGluIGFuIGV4aXN0aW5nIGxv
b3AsIG5vIHJldHVybiB2YWx1ZSBpcyBwb3NzaWJsZS4KKyAgICBAcHVibGljCisgICovCisgIHJ1
bi5qb2luID0gZnVuY3Rpb24gKCkgeworICAgIHJldHVybiBiYWNrYnVybmVyLmpvaW4uYXBwbHko
YmFja2J1cm5lciwgYXJndW1lbnRzKTsKKyAgfTsKKworICAvKioKKyAgICBBbGxvd3MgeW91IHRv
IHNwZWNpZnkgd2hpY2ggY29udGV4dCB0byBjYWxsIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24gaW4g
d2hpbGUKKyAgICBhZGRpbmcgdGhlIGV4ZWN1dGlvbiBvZiB0aGF0IGZ1bmN0aW9uIHRvIHRoZSBF
bWJlciBydW4gbG9vcC4gVGhpcyBhYmlsaXR5CisgICAgbWFrZXMgdGhpcyBtZXRob2QgYSBncmVh
dCB3YXkgdG8gYXN5bmNocm9ub3VzbHkgaW50ZWdyYXRlIHRoaXJkLXBhcnR5IGxpYnJhcmllcwor
ICAgIGludG8geW91ciBFbWJlciBhcHBsaWNhdGlvbi4KKyAgCisgICAgYHJ1bi5iaW5kYCB0YWtl
cyB0d28gbWFpbiBhcmd1bWVudHMsIHRoZSBkZXNpcmVkIGNvbnRleHQgYW5kIHRoZSBmdW5jdGlv
biB0bworICAgIGludm9rZSBpbiB0aGF0IGNvbnRleHQuIEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50
cyB3aWxsIGJlIHN1cHBsaWVkIGFzIGFyZ3VtZW50cworICAgIHRvIHRoZSBmdW5jdGlvbiB0aGF0
IGlzIHBhc3NlZCBpbi4KKyAgCisgICAgTGV0J3MgdXNlIHRoZSBjcmVhdGlvbiBvZiBhIFRpbnlN
Q0UgY29tcG9uZW50IGFzIGFuIGV4YW1wbGUuIEN1cnJlbnRseSwKKyAgICBUaW55TUNFIHByb3Zp
ZGVzIGEgc2V0dXAgY29uZmlndXJhdGlvbiBvcHRpb24gd2UgY2FuIHVzZSB0byBkbyBzb21lIHBy
b2Nlc3NpbmcKKyAgICBhZnRlciB0aGUgVGlueU1DRSBpbnN0YW5jZSBpcyBpbml0aWFsaXplZCBi
dXQgYmVmb3JlIGl0IGlzIGFjdHVhbGx5IHJlbmRlcmVkLgorICAgIFdlIGNhbiB1c2UgdGhhdCBz
ZXR1cCBvcHRpb24gdG8gZG8gc29tZSBhZGRpdGlvbmFsIHNldHVwIGZvciBvdXIgY29tcG9uZW50
LgorICAgIFRoZSBjb21wb25lbnQgaXRzZWxmIGNvdWxkIGxvb2sgc29tZXRoaW5nIGxpa2UgdGhl
IGZvbGxvd2luZzoKKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIEFwcC5SaWNoVGV4dEVkaXRv
ckNvbXBvbmVudCA9IEVtYmVyLkNvbXBvbmVudC5leHRlbmQoeworICAgICAgaW5pdGlhbGl6ZVRp
bnlNQ0U6IEVtYmVyLm9uKCdkaWRJbnNlcnRFbGVtZW50JywgZnVuY3Rpb24oKSB7CisgICAgICAg
IHRpbnltY2UuaW5pdCh7CisgICAgICAgICAgc2VsZWN0b3I6ICcjJyArIHRoaXMuJCgpLnByb3Ao
J2lkJyksCisgICAgICAgICAgc2V0dXA6IEVtYmVyLnJ1bi5iaW5kKHRoaXMsIHRoaXMuc2V0dXBF
ZGl0b3IpCisgICAgICAgIH0pOworICAgICAgfSksCisgIAorICAgICAgc2V0dXBFZGl0b3I6IGZ1
bmN0aW9uKGVkaXRvcikgeworICAgICAgICB0aGlzLnNldCgnZWRpdG9yJywgZWRpdG9yKTsKKyAg
CisgICAgICAgIGVkaXRvci5vbignY2hhbmdlJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgY29u
c29sZS5sb2coJ2NvbnRlbnQgY2hhbmdlZCEnKTsKKyAgICAgICAgfSk7CisgICAgICB9CisgICAg
fSk7CisgICAgYGBgCisgIAorICAgIEluIHRoaXMgZXhhbXBsZSwgd2UgdXNlIEVtYmVyLnJ1bi5i
aW5kIHRvIGJpbmQgdGhlIHNldHVwRWRpdG9yIG1ldGhvZCB0byB0aGUKKyAgICBjb250ZXh0IG9m
IHRoZSBBcHAuUmljaFRleHRFZGl0b3JDb21wb25lbnQgYW5kIHRvIGhhdmUgdGhlIGludm9jYXRp
b24gb2YgdGhhdAorICAgIG1ldGhvZCBiZSBzYWZlbHkgaGFuZGxlZCBhbmQgZXhlY3V0ZWQgYnkg
dGhlIEVtYmVyIHJ1biBsb29wLgorICAKKyAgICBAbWV0aG9kIGJpbmQKKyAgICBAbmFtZXNwYWNl
IEVtYmVyCisgICAgQHBhcmFtIHtPYmplY3R9IFt0YXJnZXRdIHRhcmdldCBvZiBtZXRob2QgdG8g
Y2FsbAorICAgIEBwYXJhbSB7RnVuY3Rpb258U3RyaW5nfSBtZXRob2QgTWV0aG9kIHRvIGludm9r
ZS4KKyAgICAgIE1heSBiZSBhIGZ1bmN0aW9uIG9yIGEgc3RyaW5nLiBJZiB5b3UgcGFzcyBhIHN0
cmluZworICAgICAgdGhlbiBpdCB3aWxsIGJlIGxvb2tlZCB1cCBvbiB0aGUgcGFzc2VkIHRhcmdl
dC4KKyAgICBAcGFyYW0ge09iamVjdH0gW2FyZ3MqXSBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHMg
eW91IHdpc2ggdG8gcGFzcyB0byB0aGUgbWV0aG9kLgorICAgIEByZXR1cm4ge0Z1bmN0aW9ufSBy
ZXR1cm5zIGEgbmV3IGZ1bmN0aW9uIHRoYXQgd2lsbCBhbHdheXMgaGF2ZSBhIHBhcnRpY3VsYXIg
Y29udGV4dAorICAgIEBzaW5jZSAxLjQuMAorICAgIEBwdWJsaWMKKyAgKi8KKyAgcnVuLmJpbmQg
PSBmdW5jdGlvbiAoKSB7CisgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGN1
cnJpZWQgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHsKKyAg
ICAgIGN1cnJpZWRbX2tleV0gPSBhcmd1bWVudHNbX2tleV07CisgICAgfQorCisgICAgcmV0dXJu
IGZ1bmN0aW9uICgpIHsKKyAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwg
YXJncyA9IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7
CisgICAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTsKKyAgICAgIH0KKworICAg
ICAgcmV0dXJuIHJ1bi5qb2luLmFwcGx5KHJ1biwgY3VycmllZC5jb25jYXQoYXJncykpOworICAg
IH07CisgIH07CisKKyAgcnVuLmJhY2tidXJuZXIgPSBiYWNrYnVybmVyOworICBydW4uY3VycmVu
dFJ1bkxvb3AgPSBudWxsOworICBydW4ucXVldWVzID0gYmFja2J1cm5lci5xdWV1ZU5hbWVzOwor
CisgIC8qKgorICAgIEJlZ2lucyBhIG5ldyBSdW5Mb29wLiBBbnkgZGVmZXJyZWQgYWN0aW9ucyBp
bnZva2VkIGFmdGVyIHRoZSBiZWdpbiB3aWxsCisgICAgYmUgYnVmZmVyZWQgdW50aWwgeW91IGlu
dm9rZSBhIG1hdGNoaW5nIGNhbGwgdG8gYHJ1bi5lbmQoKWAuIFRoaXMgaXMKKyAgICBhIGxvd2Vy
LWxldmVsIHdheSB0byB1c2UgYSBSdW5Mb29wIGluc3RlYWQgb2YgdXNpbmcgYHJ1bigpYC4KKyAg
CisgICAgYGBgamF2YXNjcmlwdAorICAgIHJ1bi5iZWdpbigpOworICAgIC8vIGNvZGUgdG8gYmUg
ZXhlY3V0ZWQgd2l0aGluIGEgUnVuTG9vcAorICAgIHJ1bi5lbmQoKTsKKyAgICBgYGAKKyAgCisg
ICAgQG1ldGhvZCBiZWdpbgorICAgIEByZXR1cm4ge3ZvaWR9CisgICAgQHB1YmxpYworICAqLwor
ICBydW4uYmVnaW4gPSBmdW5jdGlvbiAoKSB7CisgICAgYmFja2J1cm5lci5iZWdpbigpOworICB9
OworCisgIC8qKgorICAgIEVuZHMgYSBSdW5Mb29wLiBUaGlzIG11c3QgYmUgY2FsbGVkIHNvbWV0
aW1lIGFmdGVyIHlvdSBjYWxsCisgICAgYHJ1bi5iZWdpbigpYCB0byBmbHVzaCBhbnkgZGVmZXJy
ZWQgYWN0aW9ucy4gVGhpcyBpcyBhIGxvd2VyLWxldmVsIHdheQorICAgIHRvIHVzZSBhIFJ1bkxv
b3AgaW5zdGVhZCBvZiB1c2luZyBgcnVuKClgLgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAg
cnVuLmJlZ2luKCk7CisgICAgLy8gY29kZSB0byBiZSBleGVjdXRlZCB3aXRoaW4gYSBSdW5Mb29w
CisgICAgcnVuLmVuZCgpOworICAgIGBgYAorICAKKyAgICBAbWV0aG9kIGVuZAorICAgIEByZXR1
cm4ge3ZvaWR9CisgICAgQHB1YmxpYworICAqLworICBydW4uZW5kID0gZnVuY3Rpb24gKCkgewor
ICAgIGJhY2tidXJuZXIuZW5kKCk7CisgIH07CisKKyAgLyoqCisgICAgQXJyYXkgb2YgbmFtZWQg
cXVldWVzLiBUaGlzIGFycmF5IGRldGVybWluZXMgdGhlIG9yZGVyIGluIHdoaWNoIHF1ZXVlcwor
ICAgIGFyZSBmbHVzaGVkIGF0IHRoZSBlbmQgb2YgdGhlIFJ1bkxvb3AuIFlvdSBjYW4gZGVmaW5l
IHlvdXIgb3duIHF1ZXVlcyBieQorICAgIHNpbXBseSBhZGRpbmcgdGhlIHF1ZXVlIG5hbWUgdG8g
dGhpcyBhcnJheS4gTm9ybWFsbHkgeW91IHNob3VsZCBub3QgbmVlZAorICAgIHRvIGluc3BlY3Qg
b3IgbW9kaWZ5IHRoaXMgcHJvcGVydHkuCisgIAorICAgIEBwcm9wZXJ0eSBxdWV1ZXMKKyAgICBA
dHlwZSBBcnJheQorICAgIEBkZWZhdWx0IFsnc3luYycsICdhY3Rpb25zJywgJ2Rlc3Ryb3knXQor
ICAgIEBwcml2YXRlCisgICovCisKKyAgLyoqCisgICAgQWRkcyB0aGUgcGFzc2VkIHRhcmdldC9t
ZXRob2QgYW5kIGFueSBvcHRpb25hbCBhcmd1bWVudHMgdG8gdGhlIG5hbWVkCisgICAgcXVldWUg
dG8gYmUgZXhlY3V0ZWQgYXQgdGhlIGVuZCBvZiB0aGUgUnVuTG9vcC4gSWYgeW91IGhhdmUgbm90
IGFscmVhZHkKKyAgICBzdGFydGVkIGEgUnVuTG9vcCB3aGVuIGNhbGxpbmcgdGhpcyBtZXRob2Qg
b25lIHdpbGwgYmUgc3RhcnRlZCBmb3IgeW91CisgICAgYXV0b21hdGljYWxseS4KKyAgCisgICAg
QXQgdGhlIGVuZCBvZiBhIFJ1bkxvb3AsIGFueSBtZXRob2RzIHNjaGVkdWxlZCBpbiB0aGlzIHdh
eSB3aWxsIGJlIGludm9rZWQuCisgICAgTWV0aG9kcyB3aWxsIGJlIGludm9rZWQgaW4gYW4gb3Jk
ZXIgbWF0Y2hpbmcgdGhlIG5hbWVkIHF1ZXVlcyBkZWZpbmVkIGluCisgICAgdGhlIGBydW4ucXVl
dWVzYCBwcm9wZXJ0eS4KKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIHJ1bi5zY2hlZHVsZSgn
c3luYycsIHRoaXMsIGZ1bmN0aW9uKCkgeworICAgICAgLy8gdGhpcyB3aWxsIGJlIGV4ZWN1dGVk
IGluIHRoZSBmaXJzdCBSdW5Mb29wIHF1ZXVlLCB3aGVuIGJpbmRpbmdzIGFyZSBzeW5jZWQKKyAg
ICAgIGNvbnNvbGUubG9nKCdzY2hlZHVsZWQgb24gc3luYyBxdWV1ZScpOworICAgIH0pOworICAK
KyAgICBydW4uc2NoZWR1bGUoJ2FjdGlvbnMnLCB0aGlzLCBmdW5jdGlvbigpIHsKKyAgICAgIC8v
IHRoaXMgd2lsbCBiZSBleGVjdXRlZCBpbiB0aGUgJ2FjdGlvbnMnIHF1ZXVlLCBhZnRlciBiaW5k
aW5ncyBoYXZlIHN5bmNlZC4KKyAgICAgIGNvbnNvbGUubG9nKCdzY2hlZHVsZWQgb24gYWN0aW9u
cyBxdWV1ZScpOworICAgIH0pOworICAKKyAgICAvLyBOb3RlIHRoZSBmdW5jdGlvbnMgd2lsbCBi
ZSBydW4gaW4gb3JkZXIgYmFzZWQgb24gdGhlIHJ1biBxdWV1ZXMgb3JkZXIuCisgICAgLy8gT3V0
cHV0IHdvdWxkIGJlOgorICAgIC8vICAgc2NoZWR1bGVkIG9uIHN5bmMgcXVldWUKKyAgICAvLyAg
IHNjaGVkdWxlZCBvbiBhY3Rpb25zIHF1ZXVlCisgICAgYGBgCisgIAorICAgIEBtZXRob2Qgc2No
ZWR1bGUKKyAgICBAcGFyYW0ge1N0cmluZ30gcXVldWUgVGhlIG5hbWUgb2YgdGhlIHF1ZXVlIHRv
IHNjaGVkdWxlIGFnYWluc3QuCisgICAgICBEZWZhdWx0IHF1ZXVlcyBhcmUgJ3N5bmMnIGFuZCAn
YWN0aW9ucycKKyAgICBAcGFyYW0ge09iamVjdH0gW3RhcmdldF0gdGFyZ2V0IG9iamVjdCB0byB1
c2UgYXMgdGhlIGNvbnRleHQgd2hlbiBpbnZva2luZyBhIG1ldGhvZC4KKyAgICBAcGFyYW0ge1N0
cmluZ3xGdW5jdGlvbn0gbWV0aG9kIFRoZSBtZXRob2QgdG8gaW52b2tlLiBJZiB5b3UgcGFzcyBh
IHN0cmluZyBpdAorICAgICAgd2lsbCBiZSByZXNvbHZlZCBvbiB0aGUgdGFyZ2V0IG9iamVjdCBh
dCB0aGUgdGltZSB0aGUgc2NoZWR1bGVkIGl0ZW0gaXMKKyAgICAgIGludm9rZWQgYWxsb3dpbmcg
eW91IHRvIGNoYW5nZSB0aGUgdGFyZ2V0IGZ1bmN0aW9uLgorICAgIEBwYXJhbSB7T2JqZWN0fSBb
YXJndW1lbnRzKl0gT3B0aW9uYWwgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgcXVldWVk
IG1ldGhvZC4KKyAgICBAcmV0dXJuIHt2b2lkfQorICAgIEBwdWJsaWMKKyAgKi8KKyAgcnVuLnNj
aGVkdWxlID0gZnVuY3Rpb24gKCkgLyogcXVldWUsIHRhcmdldCwgbWV0aG9kICoveworICAgIGNo
ZWNrQXV0b1J1bigpOworICAgIGJhY2tidXJuZXIuc2NoZWR1bGUuYXBwbHkoYmFja2J1cm5lciwg
YXJndW1lbnRzKTsKKyAgfTsKKworICAvLyBVc2VkIGJ5IGdsb2JhbCB0ZXN0IHRlYXJkb3duCisg
IHJ1bi5oYXNTY2hlZHVsZWRUaW1lcnMgPSBmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuIGJhY2ti
dXJuZXIuaGFzVGltZXJzKCk7CisgIH07CisKKyAgLy8gVXNlZCBieSBnbG9iYWwgdGVzdCB0ZWFy
ZG93bgorICBydW4uY2FuY2VsVGltZXJzID0gZnVuY3Rpb24gKCkgeworICAgIGJhY2tidXJuZXIu
Y2FuY2VsVGltZXJzKCk7CisgIH07CisKKyAgLyoqCisgICAgSW1tZWRpYXRlbHkgZmx1c2hlcyBh
bnkgZXZlbnRzIHNjaGVkdWxlZCBpbiB0aGUgJ3N5bmMnIHF1ZXVlLiBCaW5kaW5ncworICAgIHVz
ZSB0aGlzIHF1ZXVlIHNvIHRoaXMgbWV0aG9kIGlzIGEgdXNlZnVsIHdheSB0byBpbW1lZGlhdGVs
eSBmb3JjZSBhbGwKKyAgICBiaW5kaW5ncyBpbiB0aGUgYXBwbGljYXRpb24gdG8gc3luYy4KKyAg
CisgICAgWW91IHNob3VsZCBjYWxsIHRoaXMgbWV0aG9kIGFueXRpbWUgeW91IG5lZWQgYW55IGNo
YW5nZWQgc3RhdGUgdG8gcHJvcGFnYXRlCisgICAgdGhyb3VnaG91dCB0aGUgYXBwIGltbWVkaWF0
ZWx5IHdpdGhvdXQgcmVwYWludGluZyB0aGUgVUkgKHdoaWNoIGhhcHBlbnMKKyAgICBpbiB0aGUg
bGF0ZXIgJ3JlbmRlcicgcXVldWUgYWRkZWQgYnkgdGhlIGBlbWJlci12aWV3c2AgcGFja2FnZSku
CisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAgICBydW4uc3luYygpOworICAgIGBgYAorICAKKyAg
ICBAbWV0aG9kIHN5bmMKKyAgICBAcmV0dXJuIHt2b2lkfQorICAgIEBwcml2YXRlCisgICovCisg
IHJ1bi5zeW5jID0gZnVuY3Rpb24gKCkgeworICAgIGlmIChiYWNrYnVybmVyLmN1cnJlbnRJbnN0
YW5jZSkgeworICAgICAgYmFja2J1cm5lci5jdXJyZW50SW5zdGFuY2UucXVldWVzLnN5bmMuZmx1
c2goKTsKKyAgICB9CisgIH07CisKKyAgLyoqCisgICAgSW52b2tlcyB0aGUgcGFzc2VkIHRhcmdl
dC9tZXRob2QgYW5kIG9wdGlvbmFsIGFyZ3VtZW50cyBhZnRlciBhIHNwZWNpZmllZAorICAgIHBl
cmlvZCBvZiB0aW1lLiBUaGUgbGFzdCBwYXJhbWV0ZXIgb2YgdGhpcyBtZXRob2QgbXVzdCBhbHdh
eXMgYmUgYSBudW1iZXIKKyAgICBvZiBtaWxsaXNlY29uZHMuCisgIAorICAgIFlvdSBzaG91bGQg
dXNlIHRoaXMgbWV0aG9kIHdoZW5ldmVyIHlvdSBuZWVkIHRvIHJ1biBzb21lIGFjdGlvbiBhZnRl
ciBhCisgICAgcGVyaW9kIG9mIHRpbWUgaW5zdGVhZCBvZiB1c2luZyBgc2V0VGltZW91dCgpYC4g
VGhpcyBtZXRob2Qgd2lsbCBlbnN1cmUgdGhhdAorICAgIGl0ZW1zIHRoYXQgZXhwaXJlIGR1cmlu
ZyB0aGUgc2FtZSBzY3JpcHQgZXhlY3V0aW9uIGN5Y2xlIGFsbCBleGVjdXRlCisgICAgdG9nZXRo
ZXIsIHdoaWNoIGlzIG9mdGVuIG1vcmUgZWZmaWNpZW50IHRoYW4gdXNpbmcgYSByZWFsIHNldFRp
bWVvdXQuCisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAgICBydW4ubGF0ZXIobXlDb250ZXh0LCBm
dW5jdGlvbigpIHsKKyAgICAgIC8vIGNvZGUgaGVyZSB3aWxsIGV4ZWN1dGUgd2l0aGluIGEgUnVu
TG9vcCBpbiBhYm91dCA1MDBtcyB3aXRoIHRoaXMgPT0gbXlDb250ZXh0CisgICAgfSwgNTAwKTsK
KyAgICBgYGAKKyAgCisgICAgQG1ldGhvZCBsYXRlcgorICAgIEBwYXJhbSB7T2JqZWN0fSBbdGFy
Z2V0XSB0YXJnZXQgb2YgbWV0aG9kIHRvIGludm9rZQorICAgIEBwYXJhbSB7RnVuY3Rpb258U3Ry
aW5nfSBtZXRob2QgVGhlIG1ldGhvZCB0byBpbnZva2UuCisgICAgICBJZiB5b3UgcGFzcyBhIHN0
cmluZyBpdCB3aWxsIGJlIHJlc29sdmVkIG9uIHRoZQorICAgICAgdGFyZ2V0IGF0IHRoZSB0aW1l
IHRoZSBtZXRob2QgaXMgaW52b2tlZC4KKyAgICBAcGFyYW0ge09iamVjdH0gW2FyZ3MqXSBPcHRp
b25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgdGltZW91dC4KKyAgICBAcGFyYW0ge051bWJl
cn0gd2FpdCBOdW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQuCisgICAgQHJldHVybiB7Kn0g
VGltZXIgaW5mb3JtYXRpb24gZm9yIHVzZSBpbiBjYW5jZWxsaW5nLCBzZWUgYHJ1bi5jYW5jZWxg
LgorICAgIEBwdWJsaWMKKyAgKi8KKyAgcnVuLmxhdGVyID0gZnVuY3Rpb24gKCkgLyp0YXJnZXQs
IG1ldGhvZCoveworICAgIHJldHVybiBiYWNrYnVybmVyLmxhdGVyLmFwcGx5KGJhY2tidXJuZXIs
IGFyZ3VtZW50cyk7CisgIH07CisKKyAgLyoqCisgICAgU2NoZWR1bGUgYSBmdW5jdGlvbiB0byBy
dW4gb25lIHRpbWUgZHVyaW5nIHRoZSBjdXJyZW50IFJ1bkxvb3AuIFRoaXMgaXMgZXF1aXZhbGVu
dAorICAgIHRvIGNhbGxpbmcgYHNjaGVkdWxlT25jZWAgd2l0aCB0aGUgImFjdGlvbnMiIHF1ZXVl
LgorICAKKyAgICBAbWV0aG9kIG9uY2UKKyAgICBAcGFyYW0ge09iamVjdH0gW3RhcmdldF0gVGhl
IHRhcmdldCBvZiB0aGUgbWV0aG9kIHRvIGludm9rZS4KKyAgICBAcGFyYW0ge0Z1bmN0aW9ufFN0
cmluZ30gbWV0aG9kIFRoZSBtZXRob2QgdG8gaW52b2tlLgorICAgICAgSWYgeW91IHBhc3MgYSBz
dHJpbmcgaXQgd2lsbCBiZSByZXNvbHZlZCBvbiB0aGUKKyAgICAgIHRhcmdldCBhdCB0aGUgdGlt
ZSB0aGUgbWV0aG9kIGlzIGludm9rZWQuCisgICAgQHBhcmFtIHtPYmplY3R9IFthcmdzKl0gT3B0
aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIHRpbWVvdXQuCisgICAgQHJldHVybiB7T2Jq
ZWN0fSBUaW1lciBpbmZvcm1hdGlvbiBmb3IgdXNlIGluIGNhbmNlbGxpbmcsIHNlZSBgcnVuLmNh
bmNlbGAuCisgICAgQHB1YmxpYworICAqLworICBydW4ub25jZSA9IGZ1bmN0aW9uICgpIHsKKyAg
ICBjaGVja0F1dG9SdW4oKTsKKworICAgIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0
aCwgYXJncyA9IEFycmF5KF9sZW4zKSwgX2tleTMgPSAwOyBfa2V5MyA8IF9sZW4zOyBfa2V5Mysr
KSB7CisgICAgICBhcmdzW19rZXkzXSA9IGFyZ3VtZW50c1tfa2V5M107CisgICAgfQorCisgICAg
YXJncy51bnNoaWZ0KCdhY3Rpb25zJyk7CisgICAgcmV0dXJuIGJhY2tidXJuZXIuc2NoZWR1bGVP
bmNlLmFwcGx5KGJhY2tidXJuZXIsIGFyZ3MpOworICB9OworCisgIC8qKgorICAgIFNjaGVkdWxl
cyBhIGZ1bmN0aW9uIHRvIHJ1biBvbmUgdGltZSBpbiBhIGdpdmVuIHF1ZXVlIG9mIHRoZSBjdXJy
ZW50IFJ1bkxvb3AuCisgICAgQ2FsbGluZyB0aGlzIG1ldGhvZCB3aXRoIHRoZSBzYW1lIHF1ZXVl
L3RhcmdldC9tZXRob2QgY29tYmluYXRpb24gd2lsbCBoYXZlCisgICAgbm8gZWZmZWN0IChwYXN0
IHRoZSBpbml0aWFsIGNhbGwpLgorICAKKyAgICBOb3RlIHRoYXQgYWx0aG91Z2ggeW91IGNhbiBw
YXNzIG9wdGlvbmFsIGFyZ3VtZW50cyB0aGVzZSB3aWxsIG5vdCBiZQorICAgIGNvbnNpZGVyZWQg
d2hlbiBsb29raW5nIGZvciBkdXBsaWNhdGVzLiBOZXcgYXJndW1lbnRzIHdpbGwgcmVwbGFjZSBw
cmV2aW91cworICAgIGNhbGxzLgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgZnVuY3Rpb24g
c2F5SGkoKSB7CisgICAgICBjb25zb2xlLmxvZygnaGknKTsKKyAgICB9CisgIAorICAgIHJ1bihm
dW5jdGlvbigpIHsKKyAgICAgIHJ1bi5zY2hlZHVsZU9uY2UoJ2FmdGVyUmVuZGVyJywgbXlDb250
ZXh0LCBzYXlIaSk7CisgICAgICBydW4uc2NoZWR1bGVPbmNlKCdhZnRlclJlbmRlcicsIG15Q29u
dGV4dCwgc2F5SGkpOworICAgICAgLy8gc2F5SGkgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIG9uY2Us
IGluIHRoZSBhZnRlclJlbmRlciBxdWV1ZSBvZiB0aGUgUnVuTG9vcAorICAgIH0pOworICAgIGBg
YAorICAKKyAgICBBbHNvIG5vdGUgdGhhdCBwYXNzaW5nIGFuIGFub255bW91cyBmdW5jdGlvbiB0
byBgcnVuLnNjaGVkdWxlT25jZWAgd2lsbAorICAgIG5vdCBwcmV2ZW50IGFkZGl0aW9uYWwgY2Fs
bHMgd2l0aCBhbiBpZGVudGljYWwgYW5vbnltb3VzIGZ1bmN0aW9uIGZyb20KKyAgICBzY2hlZHVs
aW5nIHRoZSBpdGVtcyBtdWx0aXBsZSB0aW1lcywgZS5nLjoKKyAgCisgICAgYGBgamF2YXNjcmlw
dAorICAgIGZ1bmN0aW9uIHNjaGVkdWxlSXQoKSB7CisgICAgICBydW4uc2NoZWR1bGVPbmNlKCdh
Y3Rpb25zJywgbXlDb250ZXh0LCBmdW5jdGlvbigpIHsKKyAgICAgICAgY29uc29sZS5sb2coJ0Ns
b3N1cmUnKTsKKyAgICAgIH0pOworICAgIH0KKyAgCisgICAgc2NoZWR1bGVJdCgpOworICAgIHNj
aGVkdWxlSXQoKTsKKyAgCisgICAgLy8gIkNsb3N1cmUiIHdpbGwgcHJpbnQgdHdpY2UsIGV2ZW4g
dGhvdWdoIHdlJ3JlIHVzaW5nIGBydW4uc2NoZWR1bGVPbmNlYCwKKyAgICAvLyBiZWNhdXNlIHRo
ZSBmdW5jdGlvbiB3ZSBwYXNzIHRvIGl0IGlzIGFub255bW91cyBhbmQgd29uJ3QgbWF0Y2ggdGhl
CisgICAgLy8gcHJldmlvdXNseSBzY2hlZHVsZWQgb3BlcmF0aW9uLgorICAgIGBgYAorICAKKyAg
ICBBdmFpbGFibGUgcXVldWVzLCBhbmQgdGhlaXIgb3JkZXIsIGNhbiBiZSBmb3VuZCBhdCBgcnVu
LnF1ZXVlc2AKKyAgCisgICAgQG1ldGhvZCBzY2hlZHVsZU9uY2UKKyAgICBAcGFyYW0ge1N0cmlu
Z30gW3F1ZXVlXSBUaGUgbmFtZSBvZiB0aGUgcXVldWUgdG8gc2NoZWR1bGUgYWdhaW5zdC4gRGVm
YXVsdCBxdWV1ZXMgYXJlICdzeW5jJyBhbmQgJ2FjdGlvbnMnLgorICAgIEBwYXJhbSB7T2JqZWN0
fSBbdGFyZ2V0XSBUaGUgdGFyZ2V0IG9mIHRoZSBtZXRob2QgdG8gaW52b2tlLgorICAgIEBwYXJh
bSB7RnVuY3Rpb258U3RyaW5nfSBtZXRob2QgVGhlIG1ldGhvZCB0byBpbnZva2UuCisgICAgICBJ
ZiB5b3UgcGFzcyBhIHN0cmluZyBpdCB3aWxsIGJlIHJlc29sdmVkIG9uIHRoZQorICAgICAgdGFy
Z2V0IGF0IHRoZSB0aW1lIHRoZSBtZXRob2QgaXMgaW52b2tlZC4KKyAgICBAcGFyYW0ge09iamVj
dH0gW2FyZ3MqXSBPcHRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgdGltZW91dC4KKyAg
ICBAcmV0dXJuIHtPYmplY3R9IFRpbWVyIGluZm9ybWF0aW9uIGZvciB1c2UgaW4gY2FuY2VsbGlu
Zywgc2VlIGBydW4uY2FuY2VsYC4KKyAgICBAcHVibGljCisgICovCisgIHJ1bi5zY2hlZHVsZU9u
Y2UgPSBmdW5jdGlvbiAoKSAvKnF1ZXVlLCB0YXJnZXQsIG1ldGhvZCoveworICAgIGNoZWNrQXV0
b1J1bigpOworICAgIHJldHVybiBiYWNrYnVybmVyLnNjaGVkdWxlT25jZS5hcHBseShiYWNrYnVy
bmVyLCBhcmd1bWVudHMpOworICB9OworCisgIC8qKgorICAgIFNjaGVkdWxlcyBhbiBpdGVtIHRv
IHJ1biBmcm9tIHdpdGhpbiBhIHNlcGFyYXRlIHJ1biBsb29wLCBhZnRlcgorICAgIGNvbnRyb2wg
aGFzIGJlZW4gcmV0dXJuZWQgdG8gdGhlIHN5c3RlbS4gVGhpcyBpcyBlcXVpdmFsZW50IHRvIGNh
bGxpbmcKKyAgICBgcnVuLmxhdGVyYCB3aXRoIGEgd2FpdCB0aW1lIG9mIDFtcy4KKyAgCisgICAg
YGBgamF2YXNjcmlwdAorICAgIHJ1bi5uZXh0KG15Q29udGV4dCwgZnVuY3Rpb24oKSB7CisgICAg
ICAvLyBjb2RlIHRvIGJlIGV4ZWN1dGVkIGluIHRoZSBuZXh0IHJ1biBsb29wLAorICAgICAgLy8g
d2hpY2ggd2lsbCBiZSBzY2hlZHVsZWQgYWZ0ZXIgdGhlIGN1cnJlbnQgb25lCisgICAgfSk7Cisg
ICAgYGBgCisgIAorICAgIE11bHRpcGxlIG9wZXJhdGlvbnMgc2NoZWR1bGVkIHdpdGggYHJ1bi5u
ZXh0YCB3aWxsIGNvYWxlc2NlCisgICAgaW50byB0aGUgc2FtZSBsYXRlciBydW4gbG9vcCwgYWxv
bmcgd2l0aCBhbnkgb3RoZXIgb3BlcmF0aW9ucworICAgIHNjaGVkdWxlZCBieSBgcnVuLmxhdGVy
YCB0aGF0IGV4cGlyZSByaWdodCBhcm91bmQgdGhlIHNhbWUKKyAgICB0aW1lIHRoYXQgYHJ1bi5u
ZXh0YCBvcGVyYXRpb25zIHdpbGwgZmlyZS4KKyAgCisgICAgTm90ZSB0aGF0IHRoZXJlIGFyZSBv
ZnRlbiBhbHRlcm5hdGl2ZXMgdG8gdXNpbmcgYHJ1bi5uZXh0YC4KKyAgICBGb3IgaW5zdGFuY2Us
IGlmIHlvdSdkIGxpa2UgdG8gc2NoZWR1bGUgYW4gb3BlcmF0aW9uIHRvIGhhcHBlbgorICAgIGFm
dGVyIGFsbCBET00gZWxlbWVudCBvcGVyYXRpb25zIGhhdmUgY29tcGxldGVkIHdpdGhpbiB0aGUg
Y3VycmVudAorICAgIHJ1biBsb29wLCB5b3UgY2FuIG1ha2UgdXNlIG9mIHRoZSBgYWZ0ZXJSZW5k
ZXJgIHJ1biBsb29wIHF1ZXVlIChhZGRlZAorICAgIGJ5IHRoZSBgZW1iZXItdmlld3NgIHBhY2th
Z2UsIGFsb25nIHdpdGggdGhlIHByZWNlZGluZyBgcmVuZGVyYCBxdWV1ZQorICAgIHdoZXJlIGFs
bCB0aGUgRE9NIGVsZW1lbnQgb3BlcmF0aW9ucyBoYXBwZW4pLgorICAKKyAgICBFeGFtcGxlOgor
ICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgZXhwb3J0IGRlZmF1bHQgRW1iZXIuQ29tcG9uZW50
LmV4dGVuZCh7CisgICAgICBkaWRJbnNlcnRFbGVtZW50KCkgeworICAgICAgICB0aGlzLl9zdXBl
ciguLi5hcmd1bWVudHMpOworICAgICAgICBydW4uc2NoZWR1bGVPbmNlKCdhZnRlclJlbmRlcics
IHRoaXMsICdwcm9jZXNzQ2hpbGRFbGVtZW50cycpOworICAgICAgfSwKKyAgCisgICAgICBwcm9j
ZXNzQ2hpbGRFbGVtZW50cygpIHsKKyAgICAgICAgLy8gLi4uIGRvIHNvbWV0aGluZyB3aXRoIGNv
bXBvbmVudCdzIGNoaWxkIGNvbXBvbmVudAorICAgICAgICAvLyBlbGVtZW50cyBhZnRlciB0aGV5
J3ZlIGZpbmlzaGVkIHJlbmRlcmluZywgd2hpY2gKKyAgICAgICAgLy8gY2FuJ3QgYmUgZG9uZSB3
aXRoaW4gdGhpcyBjb21wb25lbnQncworICAgICAgICAvLyBgZGlkSW5zZXJ0RWxlbWVudGAgaG9v
ayBiZWNhdXNlIHRoYXQgZ2V0cyBydW4KKyAgICAgICAgLy8gYmVmb3JlIHRoZSBjaGlsZCBlbGVt
ZW50cyBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIERPTS4KKyAgICAgIH0KKyAgICB9KTsKKyAgICBg
YGAKKyAgCisgICAgT25lIGJlbmVmaXQgb2YgdGhlIGFib3ZlIGFwcHJvYWNoIGNvbXBhcmVkIHRv
IHVzaW5nIGBydW4ubmV4dGAgaXMKKyAgICB0aGF0IHlvdSB3aWxsIGJlIGFibGUgdG8gcGVyZm9y
bSBET00vQ1NTIG9wZXJhdGlvbnMgYmVmb3JlIHVucHJvY2Vzc2VkCisgICAgZWxlbWVudHMgYXJl
IHJlbmRlcmVkIHRvIHRoZSBzY3JlZW4sIHdoaWNoIG1heSBwcmV2ZW50IGZsaWNrZXJpbmcgb3IK
KyAgICBvdGhlciBhcnRpZmFjdHMgY2F1c2VkIGJ5IGRlbGF5aW5nIHByb2Nlc3NpbmcgdW50aWwg
YWZ0ZXIgcmVuZGVyaW5nLgorICAKKyAgICBUaGUgb3RoZXIgbWFqb3IgYmVuZWZpdCB0byB0aGUg
YWJvdmUgYXBwcm9hY2ggaXMgdGhhdCBgcnVuLm5leHRgCisgICAgaW50cm9kdWNlcyBhbiBlbGVt
ZW50IG9mIG5vbi1kZXRlcm1pbmlzbSwgd2hpY2ggY2FuIG1ha2UgdGhpbmdzIG11Y2gKKyAgICBo
YXJkZXIgdG8gdGVzdCwgZHVlIHRvIGl0cyByZWxpYW5jZSBvbiBgc2V0VGltZW91dGA7IGl0J3Mg
bXVjaCBoYXJkZXIKKyAgICB0byBndWFyYW50ZWUgdGhlIG9yZGVyIG9mIHNjaGVkdWxlZCBvcGVy
YXRpb25zIHdoZW4gdGhleSBhcmUgc2NoZWR1bGVkCisgICAgb3V0c2lkZSBvZiB0aGUgY3VycmVu
dCBydW4gbG9vcCwgaS5lLiB3aXRoIGBydW4ubmV4dGAuCisgIAorICAgIEBtZXRob2QgbmV4dAor
ICAgIEBwYXJhbSB7T2JqZWN0fSBbdGFyZ2V0XSB0YXJnZXQgb2YgbWV0aG9kIHRvIGludm9rZQor
ICAgIEBwYXJhbSB7RnVuY3Rpb258U3RyaW5nfSBtZXRob2QgVGhlIG1ldGhvZCB0byBpbnZva2Uu
CisgICAgICBJZiB5b3UgcGFzcyBhIHN0cmluZyBpdCB3aWxsIGJlIHJlc29sdmVkIG9uIHRoZQor
ICAgICAgdGFyZ2V0IGF0IHRoZSB0aW1lIHRoZSBtZXRob2QgaXMgaW52b2tlZC4KKyAgICBAcGFy
YW0ge09iamVjdH0gW2FyZ3MqXSBPcHRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgdGlt
ZW91dC4KKyAgICBAcmV0dXJuIHtPYmplY3R9IFRpbWVyIGluZm9ybWF0aW9uIGZvciB1c2UgaW4g
Y2FuY2VsbGluZywgc2VlIGBydW4uY2FuY2VsYC4KKyAgICBAcHVibGljCisgICovCisgIHJ1bi5u
ZXh0ID0gZnVuY3Rpb24gKCkgeworICAgIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0
aCwgYXJncyA9IEFycmF5KF9sZW40KSwgX2tleTQgPSAwOyBfa2V5NCA8IF9sZW40OyBfa2V5NCsr
KSB7CisgICAgICBhcmdzW19rZXk0XSA9IGFyZ3VtZW50c1tfa2V5NF07CisgICAgfQorCisgICAg
YXJncy5wdXNoKDEpOworICAgIHJldHVybiBiYWNrYnVybmVyLmxhdGVyLmFwcGx5KGJhY2tidXJu
ZXIsIGFyZ3MpOworICB9OworCisgIC8qKgorICAgIENhbmNlbHMgYSBzY2hlZHVsZWQgaXRlbS4g
TXVzdCBiZSBhIHZhbHVlIHJldHVybmVkIGJ5IGBydW4ubGF0ZXIoKWAsCisgICAgYHJ1bi5vbmNl
KClgLCBgcnVuLnNjaGVkdWxlT25jZSgpYCwgYHJ1bi5uZXh0KClgLCBgcnVuLmRlYm91bmNlKClg
LCBvcgorICAgIGBydW4udGhyb3R0bGUoKWAuCisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAgICB2
YXIgcnVuTmV4dCA9IHJ1bi5uZXh0KG15Q29udGV4dCwgZnVuY3Rpb24oKSB7CisgICAgICAvLyB3
aWxsIG5vdCBiZSBleGVjdXRlZAorICAgIH0pOworICAKKyAgICBydW4uY2FuY2VsKHJ1bk5leHQp
OworICAKKyAgICB2YXIgcnVuTGF0ZXIgPSBydW4ubGF0ZXIobXlDb250ZXh0LCBmdW5jdGlvbigp
IHsKKyAgICAgIC8vIHdpbGwgbm90IGJlIGV4ZWN1dGVkCisgICAgfSwgNTAwKTsKKyAgCisgICAg
cnVuLmNhbmNlbChydW5MYXRlcik7CisgIAorICAgIHZhciBydW5TY2hlZHVsZU9uY2UgPSBydW4u
c2NoZWR1bGVPbmNlKCdhZnRlclJlbmRlcicsIG15Q29udGV4dCwgZnVuY3Rpb24oKSB7CisgICAg
ICAvLyB3aWxsIG5vdCBiZSBleGVjdXRlZAorICAgIH0pOworICAKKyAgICBydW4uY2FuY2VsKHJ1
blNjaGVkdWxlT25jZSk7CisgIAorICAgIHZhciBydW5PbmNlID0gcnVuLm9uY2UobXlDb250ZXh0
LCBmdW5jdGlvbigpIHsKKyAgICAgIC8vIHdpbGwgbm90IGJlIGV4ZWN1dGVkCisgICAgfSk7Cisg
IAorICAgIHJ1bi5jYW5jZWwocnVuT25jZSk7CisgIAorICAgIHZhciB0aHJvdHRsZSA9IHJ1bi50
aHJvdHRsZShteUNvbnRleHQsIGZ1bmN0aW9uKCkgeworICAgICAgLy8gd2lsbCBub3QgYmUgZXhl
Y3V0ZWQKKyAgICB9LCAxLCBmYWxzZSk7CisgIAorICAgIHJ1bi5jYW5jZWwodGhyb3R0bGUpOwor
ICAKKyAgICB2YXIgZGVib3VuY2UgPSBydW4uZGVib3VuY2UobXlDb250ZXh0LCBmdW5jdGlvbigp
IHsKKyAgICAgIC8vIHdpbGwgbm90IGJlIGV4ZWN1dGVkCisgICAgfSwgMSk7CisgIAorICAgIHJ1
bi5jYW5jZWwoZGVib3VuY2UpOworICAKKyAgICB2YXIgZGVib3VuY2VJbW1lZGlhdGUgPSBydW4u
ZGVib3VuY2UobXlDb250ZXh0LCBmdW5jdGlvbigpIHsKKyAgICAgIC8vIHdpbGwgYmUgZXhlY3V0
ZWQgc2luY2Ugd2UgcGFzc2VkIGluIHRydWUgKGltbWVkaWF0ZSkKKyAgICB9LCAxMDAsIHRydWUp
OworICAKKyAgICAvLyB0aGUgMTAwbXMgZGVsYXkgdW50aWwgdGhpcyBtZXRob2QgY2FuIGJlIGNh
bGxlZCBhZ2FpbiB3aWxsIGJlIGNhbmNlbGxlZAorICAgIHJ1bi5jYW5jZWwoZGVib3VuY2VJbW1l
ZGlhdGUpOworICAgIGBgYAorICAKKyAgICBAbWV0aG9kIGNhbmNlbAorICAgIEBwYXJhbSB7T2Jq
ZWN0fSB0aW1lciBUaW1lciBvYmplY3QgdG8gY2FuY2VsCisgICAgQHJldHVybiB7Qm9vbGVhbn0g
dHJ1ZSBpZiBjYW5jZWxsZWQgb3IgZmFsc2UvdW5kZWZpbmVkIGlmIGl0IHdhc24ndCBmb3VuZAor
ICAgIEBwdWJsaWMKKyAgKi8KKyAgcnVuLmNhbmNlbCA9IGZ1bmN0aW9uICh0aW1lcikgeworICAg
IHJldHVybiBiYWNrYnVybmVyLmNhbmNlbCh0aW1lcik7CisgIH07CisKKyAgLyoqCisgICAgRGVs
YXkgY2FsbGluZyB0aGUgdGFyZ2V0IG1ldGhvZCB1bnRpbCB0aGUgZGVib3VuY2UgcGVyaW9kIGhh
cyBlbGFwc2VkCisgICAgd2l0aCBubyBhZGRpdGlvbmFsIGRlYm91bmNlIGNhbGxzLiBJZiBgZGVi
b3VuY2VgIGlzIGNhbGxlZCBhZ2FpbiBiZWZvcmUKKyAgICB0aGUgc3BlY2lmaWVkIHRpbWUgaGFz
IGVsYXBzZWQsIHRoZSB0aW1lciBpcyByZXNldCBhbmQgdGhlIGVudGlyZSBwZXJpb2QKKyAgICBt
dXN0IHBhc3MgYWdhaW4gYmVmb3JlIHRoZSB0YXJnZXQgbWV0aG9kIGlzIGNhbGxlZC4KKyAgCisg
ICAgVGhpcyBtZXRob2Qgc2hvdWxkIGJlIHVzZWQgd2hlbiBhbiBldmVudCBtYXkgYmUgY2FsbGVk
IG11bHRpcGxlIHRpbWVzCisgICAgYnV0IHRoZSBhY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVk
IG9uY2Ugd2hlbiB0aGUgZXZlbnQgaXMgZG9uZSBmaXJpbmcuCisgICAgQSBjb21tb24gZXhhbXBs
ZSBpcyBmb3Igc2Nyb2xsIGV2ZW50cyB3aGVyZSB5b3Ugb25seSB3YW50IHVwZGF0ZXMgdG8KKyAg
ICBoYXBwZW4gb25jZSBzY3JvbGxpbmcgaGFzIGNlYXNlZC4KKyAgCisgICAgYGBgamF2YXNjcmlw
dAorICAgIGZ1bmN0aW9uIHdob1JhbigpIHsKKyAgICAgIGNvbnNvbGUubG9nKHRoaXMubmFtZSAr
ICcgcmFuLicpOworICAgIH0KKyAgCisgICAgdmFyIG15Q29udGV4dCA9IHsgbmFtZTogJ2RlYm91
bmNlJyB9OworICAKKyAgICBydW4uZGVib3VuY2UobXlDb250ZXh0LCB3aG9SYW4sIDE1MCk7Cisg
IAorICAgIC8vIGxlc3MgdGhhbiAxNTBtcyBwYXNzZXMKKyAgICBydW4uZGVib3VuY2UobXlDb250
ZXh0LCB3aG9SYW4sIDE1MCk7CisgIAorICAgIC8vIDE1MG1zIHBhc3NlcworICAgIC8vIHdob1Jh
biBpcyBpbnZva2VkIHdpdGggY29udGV4dCBteUNvbnRleHQKKyAgICAvLyBjb25zb2xlIGxvZ3Mg
J2RlYm91bmNlIHJhbi4nIG9uZSB0aW1lLgorICAgIGBgYAorICAKKyAgICBJbW1lZGlhdGUgYWxs
b3dzIHlvdSB0byBydW4gdGhlIGZ1bmN0aW9uIGltbWVkaWF0ZWx5LCBidXQgZGVib3VuY2UKKyAg
ICBvdGhlciBjYWxscyBmb3IgdGhpcyBmdW5jdGlvbiB1bnRpbCB0aGUgd2FpdCB0aW1lIGhhcyBl
bGFwc2VkLiBJZgorICAgIGBkZWJvdW5jZWAgaXMgY2FsbGVkIGFnYWluIGJlZm9yZSB0aGUgc3Bl
Y2lmaWVkIHRpbWUgaGFzIGVsYXBzZWQsCisgICAgdGhlIHRpbWVyIGlzIHJlc2V0IGFuZCB0aGUg
ZW50aXJlIHBlcmlvZCBtdXN0IHBhc3MgYWdhaW4gYmVmb3JlCisgICAgdGhlIG1ldGhvZCBjYW4g
YmUgY2FsbGVkIGFnYWluLgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgZnVuY3Rpb24gd2hv
UmFuKCkgeworICAgICAgY29uc29sZS5sb2codGhpcy5uYW1lICsgJyByYW4uJyk7CisgICAgfQor
ICAKKyAgICB2YXIgbXlDb250ZXh0ID0geyBuYW1lOiAnZGVib3VuY2UnIH07CisgIAorICAgIHJ1
bi5kZWJvdW5jZShteUNvbnRleHQsIHdob1JhbiwgMTUwLCB0cnVlKTsKKyAgCisgICAgLy8gY29u
c29sZSBsb2dzICdkZWJvdW5jZSByYW4uJyBvbmUgdGltZSBpbW1lZGlhdGVseS4KKyAgICAvLyAx
MDBtcyBwYXNzZXMKKyAgICBydW4uZGVib3VuY2UobXlDb250ZXh0LCB3aG9SYW4sIDE1MCwgdHJ1
ZSk7CisgIAorICAgIC8vIDE1MG1zIHBhc3NlcyBhbmQgbm90aGluZyBlbHNlIGlzIGxvZ2dlZCB0
byB0aGUgY29uc29sZSBhbmQKKyAgICAvLyB0aGUgZGVib3VuY2VlIGlzIG5vIGxvbmdlciBiZWlu
ZyB3YXRjaGVkCisgICAgcnVuLmRlYm91bmNlKG15Q29udGV4dCwgd2hvUmFuLCAxNTAsIHRydWUp
OworICAKKyAgICAvLyBjb25zb2xlIGxvZ3MgJ2RlYm91bmNlIHJhbi4nIG9uZSB0aW1lIGltbWVk
aWF0ZWx5LgorICAgIC8vIDE1MG1zIHBhc3NlcyBhbmQgbm90aGluZyBlbHNlIGlzIGxvZ2dlZCB0
byB0aGUgY29uc29sZSBhbmQKKyAgICAvLyB0aGUgZGVib3VuY2VlIGlzIG5vIGxvbmdlciBiZWlu
ZyB3YXRjaGVkCisgIAorICAgIGBgYAorICAKKyAgICBAbWV0aG9kIGRlYm91bmNlCisgICAgQHBh
cmFtIHtPYmplY3R9IFt0YXJnZXRdIHRhcmdldCBvZiBtZXRob2QgdG8gaW52b2tlCisgICAgQHBh
cmFtIHtGdW5jdGlvbnxTdHJpbmd9IG1ldGhvZCBUaGUgbWV0aG9kIHRvIGludm9rZS4KKyAgICAg
IE1heSBiZSBhIGZ1bmN0aW9uIG9yIGEgc3RyaW5nLiBJZiB5b3UgcGFzcyBhIHN0cmluZworICAg
ICAgdGhlbiBpdCB3aWxsIGJlIGxvb2tlZCB1cCBvbiB0aGUgcGFzc2VkIHRhcmdldC4KKyAgICBA
cGFyYW0ge09iamVjdH0gW2FyZ3MqXSBPcHRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUg
dGltZW91dC4KKyAgICBAcGFyYW0ge051bWJlcn0gd2FpdCBOdW1iZXIgb2YgbWlsbGlzZWNvbmRz
IHRvIHdhaXQuCisgICAgQHBhcmFtIHtCb29sZWFufSBpbW1lZGlhdGUgVHJpZ2dlciB0aGUgZnVu
Y3Rpb24gb24gdGhlIGxlYWRpbmcgaW5zdGVhZAorICAgICAgb2YgdGhlIHRyYWlsaW5nIGVkZ2Ug
b2YgdGhlIHdhaXQgaW50ZXJ2YWwuIERlZmF1bHRzIHRvIGZhbHNlLgorICAgIEByZXR1cm4ge0Fy
cmF5fSBUaW1lciBpbmZvcm1hdGlvbiBmb3IgdXNlIGluIGNhbmNlbGxpbmcsIHNlZSBgcnVuLmNh
bmNlbGAuCisgICAgQHB1YmxpYworICAqLworICBydW4uZGVib3VuY2UgPSBmdW5jdGlvbiAoKSB7
CisgICAgcmV0dXJuIGJhY2tidXJuZXIuZGVib3VuY2UuYXBwbHkoYmFja2J1cm5lciwgYXJndW1l
bnRzKTsKKyAgfTsKKworICAvKioKKyAgICBFbnN1cmUgdGhhdCB0aGUgdGFyZ2V0IG1ldGhvZCBp
cyBuZXZlciBjYWxsZWQgbW9yZSBmcmVxdWVudGx5IHRoYW4KKyAgICB0aGUgc3BlY2lmaWVkIHNw
YWNpbmcgcGVyaW9kLiBUaGUgdGFyZ2V0IG1ldGhvZCBpcyBjYWxsZWQgaW1tZWRpYXRlbHkuCisg
IAorICAgIGBgYGphdmFzY3JpcHQKKyAgICBmdW5jdGlvbiB3aG9SYW4oKSB7CisgICAgICBjb25z
b2xlLmxvZyh0aGlzLm5hbWUgKyAnIHJhbi4nKTsKKyAgICB9CisgIAorICAgIHZhciBteUNvbnRl
eHQgPSB7IG5hbWU6ICd0aHJvdHRsZScgfTsKKyAgCisgICAgcnVuLnRocm90dGxlKG15Q29udGV4
dCwgd2hvUmFuLCAxNTApOworICAgIC8vIHdob1JhbiBpcyBpbnZva2VkIHdpdGggY29udGV4dCBt
eUNvbnRleHQKKyAgICAvLyBjb25zb2xlIGxvZ3MgJ3Rocm90dGxlIHJhbi4nCisgIAorICAgIC8v
IDUwbXMgcGFzc2VzCisgICAgcnVuLnRocm90dGxlKG15Q29udGV4dCwgd2hvUmFuLCAxNTApOwor
ICAKKyAgICAvLyA1MG1zIHBhc3NlcworICAgIHJ1bi50aHJvdHRsZShteUNvbnRleHQsIHdob1Jh
biwgMTUwKTsKKyAgCisgICAgLy8gMTUwbXMgcGFzc2VzCisgICAgcnVuLnRocm90dGxlKG15Q29u
dGV4dCwgd2hvUmFuLCAxNTApOworICAgIC8vIHdob1JhbiBpcyBpbnZva2VkIHdpdGggY29udGV4
dCBteUNvbnRleHQKKyAgICAvLyBjb25zb2xlIGxvZ3MgJ3Rocm90dGxlIHJhbi4nCisgICAgYGBg
CisgIAorICAgIEBtZXRob2QgdGhyb3R0bGUKKyAgICBAcGFyYW0ge09iamVjdH0gW3RhcmdldF0g
dGFyZ2V0IG9mIG1ldGhvZCB0byBpbnZva2UKKyAgICBAcGFyYW0ge0Z1bmN0aW9ufFN0cmluZ30g
bWV0aG9kIFRoZSBtZXRob2QgdG8gaW52b2tlLgorICAgICAgTWF5IGJlIGEgZnVuY3Rpb24gb3Ig
YSBzdHJpbmcuIElmIHlvdSBwYXNzIGEgc3RyaW5nCisgICAgICB0aGVuIGl0IHdpbGwgYmUgbG9v
a2VkIHVwIG9uIHRoZSBwYXNzZWQgdGFyZ2V0LgorICAgIEBwYXJhbSB7T2JqZWN0fSBbYXJncypd
IE9wdGlvbmFsIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSB0aW1lb3V0LgorICAgIEBwYXJhbSB7
TnVtYmVyfSBzcGFjaW5nIE51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gc3BhY2Ugb3V0IHJlcXVl
c3RzLgorICAgIEBwYXJhbSB7Qm9vbGVhbn0gaW1tZWRpYXRlIFRyaWdnZXIgdGhlIGZ1bmN0aW9u
IG9uIHRoZSBsZWFkaW5nIGluc3RlYWQKKyAgICAgIG9mIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRo
ZSB3YWl0IGludGVydmFsLiBEZWZhdWx0cyB0byB0cnVlLgorICAgIEByZXR1cm4ge0FycmF5fSBU
aW1lciBpbmZvcm1hdGlvbiBmb3IgdXNlIGluIGNhbmNlbGxpbmcsIHNlZSBgcnVuLmNhbmNlbGAu
CisgICAgQHB1YmxpYworICAqLworICBydW4udGhyb3R0bGUgPSBmdW5jdGlvbiAoKSB7CisgICAg
cmV0dXJuIGJhY2tidXJuZXIudGhyb3R0bGUuYXBwbHkoYmFja2J1cm5lciwgYXJndW1lbnRzKTsK
KyAgfTsKKworICAvLyBNYWtlIHN1cmUgaXQncyBub3QgYW4gYXV0b3J1biBkdXJpbmcgdGVzdGlu
ZworICBmdW5jdGlvbiBjaGVja0F1dG9SdW4oKSB7CisgICAgaWYgKCFydW4uY3VycmVudFJ1bkxv
b3ApIHsKKyAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdZb3UgaGF2ZSB0dXJuZWQgb24g
dGVzdGluZyBtb2RlLCB3aGljaCBkaXNhYmxlZCB0aGUgcnVuLWxvb3BcJ3MgYXV0b3J1bi4gJyAr
ICdZb3Ugd2lsbCBuZWVkIHRvIHdyYXAgYW55IGNvZGUgd2l0aCBhc3luY2hyb25vdXMgc2lkZS1l
ZmZlY3RzIGluIGEgcnVuJywgIV9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LnRlc3RpbmcpOworICAg
IH0KKyAgfQorCisgIC8qKgorICAgIEFkZCBhIG5ldyBuYW1lZCBxdWV1ZSBhZnRlciB0aGUgc3Bl
Y2lmaWVkIHF1ZXVlLgorICAKKyAgICBUaGUgcXVldWUgdG8gYWRkIHdpbGwgb25seSBiZSBhZGRl
ZCBvbmNlLgorICAKKyAgICBAbWV0aG9kIF9hZGRRdWV1ZQorICAgIEBwYXJhbSB7U3RyaW5nfSBu
YW1lIHRoZSBuYW1lIG9mIHRoZSBxdWV1ZSB0byBhZGQuCisgICAgQHBhcmFtIHtTdHJpbmd9IGFm
dGVyIHRoZSBuYW1lIG9mIHRoZSBxdWV1ZSB0byBhZGQgYWZ0ZXIuCisgICAgQHByaXZhdGUKKyAg
Ki8KKyAgcnVuLl9hZGRRdWV1ZSA9IGZ1bmN0aW9uIChuYW1lLCBhZnRlcikgeworICAgIGlmIChy
dW4ucXVldWVzLmluZGV4T2YobmFtZSkgPT09IC0xKSB7CisgICAgICBydW4ucXVldWVzLnNwbGlj
ZShydW4ucXVldWVzLmluZGV4T2YoYWZ0ZXIpICsgMSwgMCwgbmFtZSk7CisgICAgfQorICB9Owor
fSk7CitlbmlmZWQoJ2VtYmVyLW1ldGFsL3NldF9wcm9wZXJ0aWVzJywgWydleHBvcnRzJywgJ2Vt
YmVyLW1ldGFsL3Byb3BlcnR5X2V2ZW50cycsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9zZXQnXSwg
ZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsUHJvcGVydHlfZXZlbnRzLCBfZW1iZXJNZXRh
bFByb3BlcnR5X3NldCkgeworICAndXNlIHN0cmljdCc7CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0g
c2V0UHJvcGVydGllczsKKworICAvKioKKyAgICBTZXQgYSBsaXN0IG9mIHByb3BlcnRpZXMgb24g
YW4gb2JqZWN0LiBUaGVzZSBwcm9wZXJ0aWVzIGFyZSBzZXQgaW5zaWRlCisgICAgYSBzaW5nbGUg
YGJlZ2luUHJvcGVydHlDaGFuZ2VzYCBhbmQgYGVuZFByb3BlcnR5Q2hhbmdlc2AgYmF0Y2gsIHNv
CisgICAgb2JzZXJ2ZXJzIHdpbGwgYmUgYnVmZmVyZWQuCisgIAorICAgIGBgYGphdmFzY3JpcHQK
KyAgICB2YXIgYW5PYmplY3QgPSBFbWJlci5PYmplY3QuY3JlYXRlKCk7CisgIAorICAgIGFuT2Jq
ZWN0LnNldFByb3BlcnRpZXMoeworICAgICAgZmlyc3ROYW1lOiAnU3RhbmxleScsCisgICAgICBs
YXN0TmFtZTogJ1N0dWFydCcsCisgICAgICBhZ2U6IDIxCisgICAgfSk7CisgICAgYGBgCisgIAor
ICAgIEBtZXRob2Qgc2V0UHJvcGVydGllcworICAgIEBwYXJhbSBvYmoKKyAgICBAcGFyYW0ge09i
amVjdH0gcHJvcGVydGllcworICAgIEByZXR1cm4gcHJvcGVydGllcworICAgIEBwdWJsaWMKKyAg
Ki8KKworICBmdW5jdGlvbiBzZXRQcm9wZXJ0aWVzKG9iaiwgcHJvcGVydGllcykgeworICAgIGlm
ICghcHJvcGVydGllcyB8fCB0eXBlb2YgcHJvcGVydGllcyAhPT0gJ29iamVjdCcpIHsKKyAgICAg
IHJldHVybiBwcm9wZXJ0aWVzOworICAgIH0KKyAgICBfZW1iZXJNZXRhbFByb3BlcnR5X2V2ZW50
cy5jaGFuZ2VQcm9wZXJ0aWVzKGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciBwcm9wcyA9IE9iamVj
dC5rZXlzKHByb3BlcnRpZXMpOworICAgICAgdmFyIHByb3BlcnR5TmFtZTsKKworICAgICAgZm9y
ICh2YXIgaSA9IDAsIGwgPSBwcm9wcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKKyAgICAgICAgcHJv
cGVydHlOYW1lID0gcHJvcHNbaV07CisKKyAgICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQu
c2V0KG9iaiwgcHJvcGVydHlOYW1lLCBwcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0pOworICAgICAg
fQorICAgIH0pOworICAgIHJldHVybiBwcm9wZXJ0aWVzOworICB9Cit9KTsKK2VuaWZlZCgnZW1i
ZXItbWV0YWwvc3RyZWFtcy9kZXBlbmRlbmN5JywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2Rl
YnVnJywgJ2VtYmVyLW1ldGFsL2Fzc2lnbicsICdlbWJlci1tZXRhbC9zdHJlYW1zL3V0aWxzJ10s
IGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJNZXRhbEFzc2lnbiwg
X2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIC8qKgorICAg
IEBtb2R1bGUgZW1iZXItbWV0YWwKKyAgKi8KKworICAvKioKKyAgICBAcHJpdmF0ZQorICAgIEBj
bGFzcyBEZXBlbmRlbmN5CisgICAgQG5hbWVzcGFjZSBFbWJlci5zdHJlYW1zCisgICAgQGNvbnN0
cnVjdG9yCisgICovCisgIGZ1bmN0aW9uIERlcGVuZGVuY3koZGVwZW5kZXIsIGRlcGVuZGVlKSB7
CisgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ0RlcGVuZGVuY3kgZXJyb3I6IERlcGVuZGVy
IG11c3QgYmUgYSBzdHJlYW0nLCBfZW1iZXJNZXRhbFN0cmVhbXNVdGlscy5pc1N0cmVhbShkZXBl
bmRlcikpOworCisgICAgdGhpcy5uZXh0ID0gbnVsbDsKKyAgICB0aGlzLnByZXYgPSBudWxsOwor
ICAgIHRoaXMuZGVwZW5kZXIgPSBkZXBlbmRlcjsKKyAgICB0aGlzLmRlcGVuZGVlID0gZGVwZW5k
ZWU7CisgICAgdGhpcy51bnN1YnNjcmlwdGlvbiA9IG51bGw7CisgIH0KKworICBfZW1iZXJNZXRh
bEFzc2lnbi5kZWZhdWx0KERlcGVuZGVuY3kucHJvdG90eXBlLCB7CisgICAgc3Vic2NyaWJlOiBm
dW5jdGlvbiAoKSB7CisgICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnRGVwZW5kZW5jeSBl
cnJvcjogRGVwZW5kZW5jeSB0cmllZCB0byBzdWJzY3JpYmUgd2hpbGUgYWxyZWFkeSBzdWJzY3Jp
YmVkJywgIXRoaXMudW5zdWJzY3JpcHRpb24pOworCisgICAgICB0aGlzLnVuc3Vic2NyaXB0aW9u
ID0gX2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMuc3Vic2NyaWJlKHRoaXMuZGVwZW5kZWUsIHRoaXMu
ZGVwZW5kZXIubm90aWZ5LCB0aGlzLmRlcGVuZGVyKTsKKyAgICB9LAorCisgICAgdW5zdWJzY3Jp
YmU6IGZ1bmN0aW9uICgpIHsKKyAgICAgIGlmICh0aGlzLnVuc3Vic2NyaXB0aW9uKSB7CisgICAg
ICAgIHRoaXMudW5zdWJzY3JpcHRpb24oKTsKKyAgICAgICAgdGhpcy51bnN1YnNjcmlwdGlvbiA9
IG51bGw7CisgICAgICB9CisgICAgfSwKKworICAgIHJlcGxhY2U6IGZ1bmN0aW9uIChkZXBlbmRl
ZSkgeworICAgICAgaWYgKHRoaXMuZGVwZW5kZWUgIT09IGRlcGVuZGVlKSB7CisgICAgICAgIHRo
aXMuZGVwZW5kZWUgPSBkZXBlbmRlZTsKKworICAgICAgICBpZiAodGhpcy51bnN1YnNjcmlwdGlv
bikgeworICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTsKKyAgICAgICAgICB0aGlzLnN1YnNj
cmliZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgfQorICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0sCisKKyAgICBnZXRWYWx1ZTogZnVuY3Rpb24gKCkgeworICAg
ICAgcmV0dXJuIF9lbWJlck1ldGFsU3RyZWFtc1V0aWxzLnJlYWQodGhpcy5kZXBlbmRlZSk7Cisg
ICAgfSwKKworICAgIHNldFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgIHJldHVybiBf
ZW1iZXJNZXRhbFN0cmVhbXNVdGlscy5zZXRWYWx1ZSh0aGlzLmRlcGVuZGVlLCB2YWx1ZSk7Cisg
ICAgfQorCisgICAgLy8gZGVzdHJveSgpIHsKKyAgICAvLyAgIHZhciBuZXh0ID0gdGhpcy5uZXh0
OworICAgIC8vICAgdmFyIHByZXYgPSB0aGlzLnByZXY7CisKKyAgICAvLyAgIGlmIChwcmV2KSB7
CisgICAgLy8gICAgIHByZXYubmV4dCA9IG5leHQ7CisgICAgLy8gICB9IGVsc2UgeworICAgIC8v
ICAgICB0aGlzLmRlcGVuZGVyLmRlcGVuZGVuY3lIZWFkID0gbmV4dDsKKyAgICAvLyAgIH0KKwor
ICAgIC8vICAgaWYgKG5leHQpIHsKKyAgICAvLyAgICAgbmV4dC5wcmV2ID0gcHJldjsKKyAgICAv
LyAgIH0gZWxzZSB7CisgICAgLy8gICAgIHRoaXMuZGVwZW5kZXIuZGVwZW5kZW5jeVRhaWwgPSBw
cmV2OworICAgIC8vICAgfQorCisgICAgLy8gICB0aGlzLnVuc3Vic2NyaWJlKCk7CisgICAgLy8g
fQorICB9KTsKKworICBleHBvcnRzLmRlZmF1bHQgPSBEZXBlbmRlbmN5OworfSk7CitlbmlmZWQo
J2VtYmVyLW1ldGFsL3N0cmVhbXMva2V5LXN0cmVhbScsIFsnZXhwb3J0cycsICdlbWJlci1tZXRh
bC9kZWJ1ZycsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQnLCAnZW1iZXItbWV0YWwvcHJvcGVy
dHlfc2V0JywgJ2VtYmVyLW1ldGFsL29ic2VydmVyJywgJ2VtYmVyLW1ldGFsL3N0cmVhbXMvc3Ry
ZWFtJywgJ2VtYmVyLW1ldGFsL3N0cmVhbXMvdXRpbHMnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9l
bWJlck1ldGFsRGVidWcsIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LCBfZW1iZXJNZXRhbFByb3Bl
cnR5X3NldCwgX2VtYmVyTWV0YWxPYnNlcnZlciwgX2VtYmVyTWV0YWxTdHJlYW1zU3RyZWFtLCBf
ZW1iZXJNZXRhbFN0cmVhbXNVdGlscykgeworICAndXNlIHN0cmljdCc7CisKKyAgZnVuY3Rpb24g
bGFiZWxGb3Ioc291cmNlLCBrZXkpIHsKKyAgICByZXR1cm4gc291cmNlLmxhYmVsID8gc291cmNl
LmxhYmVsICsgJy4nICsga2V5IDoga2V5OworICB9CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gX2Vt
YmVyTWV0YWxTdHJlYW1zU3RyZWFtLmRlZmF1bHQuZXh0ZW5kKHsKKyAgICBpbml0OiBmdW5jdGlv
biAoc291cmNlLCBrZXkpIHsKKyAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdLZXlTdHJl
YW0gZXJyb3I6IHNvdXJjZSBtdXN0IGJlIGEgc3RyZWFtJywgX2VtYmVyTWV0YWxTdHJlYW1zVXRp
bHMuaXNTdHJlYW0oc291cmNlKSk7IC8vIFRPRE86IFRoaXMgaXNuJ3QgbmVjZXNzYXJ5LgorICAg
ICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ0tleVN0cmVhbSBlcnJvcjoga2V5IG11c3QgYmUg
YSBub24tZW1wdHkgc3RyaW5nJywgdHlwZW9mIGtleSA9PT0gJ3N0cmluZycgJiYga2V5Lmxlbmd0
aCA+IDApOworICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ0tleVN0cmVhbSBlcnJvcjog
a2V5IG11c3Qgbm90IGhhdmUgYSBcJy5cJycsIGtleS5pbmRleE9mKCcuJykgPT09IC0xKTsKKwor
ICAgICAgdmFyIGxhYmVsID0gbGFiZWxGb3Ioc291cmNlLCBrZXkpOworCisgICAgICB0aGlzLnBh
dGggPSBsYWJlbDsKKyAgICAgIHRoaXMub2JzZXJ2ZWRPYmplY3QgPSBudWxsOworICAgICAgdGhp
cy5rZXkgPSBrZXk7CisgICAgICB0aGlzLnNvdXJjZURlcCA9IHRoaXMuYWRkTXV0YWJsZURlcGVu
ZGVuY3koc291cmNlKTsKKyAgICAgIHRoaXMubGFiZWwgPSBsYWJlbDsKKyAgICB9LAorCisgICAg
Y29tcHV0ZTogZnVuY3Rpb24gKCkgeworICAgICAgdmFyIG9iamVjdCA9IHRoaXMuc291cmNlRGVw
LmdldFZhbHVlKCk7CisgICAgICB2YXIgdHlwZSA9IHR5cGVvZiBvYmplY3Q7CisKKyAgICAgIGlm
ICghb2JqZWN0IHx8IHR5cGUgPT09ICdib29sZWFuJykgeworICAgICAgICByZXR1cm47CisgICAg
ICB9CisKKyAgICAgIGlmICh0eXBlID09PSAnb2JqZWN0JykgeworICAgICAgICByZXR1cm4gX2Vt
YmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KG9iamVjdCwgdGhpcy5rZXkpOworICAgICAgfQorCisg
ICAgICByZXR1cm4gb2JqZWN0W3RoaXMua2V5XTsKKyAgICB9LAorCisgICAgc2V0VmFsdWU6IGZ1
bmN0aW9uICh2YWx1ZSkgeworICAgICAgdmFyIG9iamVjdCA9IHRoaXMuc291cmNlRGVwLmdldFZh
bHVlKCk7CisgICAgICBpZiAob2JqZWN0KSB7CisgICAgICAgIF9lbWJlck1ldGFsUHJvcGVydHlf
c2V0LnNldChvYmplY3QsIHRoaXMua2V5LCB2YWx1ZSk7CisgICAgICB9CisgICAgfSwKKworICAg
IHNldFNvdXJjZTogZnVuY3Rpb24gKHNvdXJjZSkgeworICAgICAgdGhpcy5zb3VyY2VEZXAucmVw
bGFjZShzb3VyY2UpOworICAgICAgdGhpcy5ub3RpZnkoKTsKKyAgICB9LAorCisgICAgX3N1cGVy
JHJldmFsaWRhdGU6IF9lbWJlck1ldGFsU3RyZWFtc1N0cmVhbS5kZWZhdWx0LnByb3RvdHlwZS5y
ZXZhbGlkYXRlLAorCisgICAgcmV2YWxpZGF0ZTogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICB0
aGlzLl9zdXBlciRyZXZhbGlkYXRlKHZhbHVlKTsKKworICAgICAgdmFyIG9iamVjdCA9IHRoaXMu
c291cmNlRGVwLmdldFZhbHVlKCk7CisgICAgICBpZiAob2JqZWN0ICE9PSB0aGlzLm9ic2VydmVk
T2JqZWN0KSB7CisgICAgICAgIHRoaXMuX2NsZWFyT2JzZXJ2ZWRPYmplY3QoKTsKKworICAgICAg
ICBpZiAob2JqZWN0ICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnKSB7CisgICAgICAgICAg
X2VtYmVyTWV0YWxPYnNlcnZlci5hZGRPYnNlcnZlcihvYmplY3QsIHRoaXMua2V5LCB0aGlzLCB0
aGlzLm5vdGlmeSk7CisgICAgICAgICAgdGhpcy5vYnNlcnZlZE9iamVjdCA9IG9iamVjdDsKKyAg
ICAgICAgfQorICAgICAgfQorICAgIH0sCisKKyAgICBfc3VwZXIkZGVhY3RpdmF0ZTogX2VtYmVy
TWV0YWxTdHJlYW1zU3RyZWFtLmRlZmF1bHQucHJvdG90eXBlLmRlYWN0aXZhdGUsCisKKyAgICBf
Y2xlYXJPYnNlcnZlZE9iamVjdDogZnVuY3Rpb24gKCkgeworICAgICAgaWYgKHRoaXMub2JzZXJ2
ZWRPYmplY3QpIHsKKyAgICAgICAgX2VtYmVyTWV0YWxPYnNlcnZlci5yZW1vdmVPYnNlcnZlcih0
aGlzLm9ic2VydmVkT2JqZWN0LCB0aGlzLmtleSwgdGhpcywgdGhpcy5ub3RpZnkpOworICAgICAg
ICB0aGlzLm9ic2VydmVkT2JqZWN0ID0gbnVsbDsKKyAgICAgIH0KKyAgICB9LAorCisgICAgZGVh
Y3RpdmF0ZTogZnVuY3Rpb24gKCkgeworICAgICAgdGhpcy5fc3VwZXIkZGVhY3RpdmF0ZSgpOwor
ICAgICAgdGhpcy5fY2xlYXJPYnNlcnZlZE9iamVjdCgpOworICAgIH0KKyAgfSk7Cit9KTsKK2Vu
aWZlZCgnZW1iZXItbWV0YWwvc3RyZWFtcy9wcm94eS1zdHJlYW0nLCBbJ2V4cG9ydHMnLCAnZW1i
ZXItcnVudGltZS9zeXN0ZW0vb2JqZWN0JywgJ2VtYmVyLW1ldGFsL3N0cmVhbXMvc3RyZWFtJ10s
IGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJSdW50aW1lU3lzdGVtT2JqZWN0LCBfZW1iZXJNZXRh
bFN0cmVhbXNTdHJlYW0pIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIHZhciBQcm94eVN0cmVhbSA9
IF9lbWJlck1ldGFsU3RyZWFtc1N0cmVhbS5kZWZhdWx0LmV4dGVuZCh7CisgICAgaW5pdDogZnVu
Y3Rpb24gKHNvdXJjZSwgbGFiZWwpIHsKKyAgICAgIHRoaXMubGFiZWwgPSBsYWJlbDsKKyAgICAg
IHRoaXMuc291cmNlRGVwID0gdGhpcy5hZGRNdXRhYmxlRGVwZW5kZW5jeShzb3VyY2UpOworICAg
IH0sCisKKyAgICBjb21wdXRlOiBmdW5jdGlvbiAoKSB7CisgICAgICByZXR1cm4gdGhpcy5zb3Vy
Y2VEZXAuZ2V0VmFsdWUoKTsKKyAgICB9LAorCisgICAgc2V0VmFsdWU6IGZ1bmN0aW9uICh2YWx1
ZSkgeworICAgICAgdGhpcy5zb3VyY2VEZXAuc2V0VmFsdWUodmFsdWUpOworICAgIH0sCisKKyAg
ICBzZXRTb3VyY2U6IGZ1bmN0aW9uIChzb3VyY2UpIHsKKyAgICAgIHZhciBkaWRDaGFuZ2UgPSB0
aGlzLnNvdXJjZURlcC5yZXBsYWNlKHNvdXJjZSk7CisgICAgICBpZiAoZGlkQ2hhbmdlIHx8ICEo
c291cmNlIGluc3RhbmNlb2YgX2VtYmVyUnVudGltZVN5c3RlbU9iamVjdC5kZWZhdWx0KSkgewor
ICAgICAgICAvLyBJZiB0aGUgc291cmNlIGNoYW5nZWQsIHdlIG11c3Qgbm90aWZ5LiBJZiB0aGUg
c291cmNlIGlzIG5vdAorICAgICAgICAvLyBhbiBFbWJlci5PYmplY3QsIHdlIG11c3QgYWxzbyBu
b3RpZnksIGJlY2F1c2UgaXQgY291bGQgaGF2ZQorICAgICAgICAvLyBpbnRlcmlvciBtdXRhYmls
aXR5IHRoYXQgaXMgb3RoZXJ3aXNlIG5vdCBiZWluZyBvYnNlcnZlZC4KKyAgICAgICAgdGhpcy5u
b3RpZnkoKTsKKyAgICAgIH0KKyAgICB9CisgIH0pOworCisgIFByb3h5U3RyZWFtLmV4dGVuZCA9
IF9lbWJlck1ldGFsU3RyZWFtc1N0cmVhbS5kZWZhdWx0LmV4dGVuZDsKKworICBleHBvcnRzLmRl
ZmF1bHQgPSBQcm94eVN0cmVhbTsKK30pOworZW5pZmVkKCdlbWJlci1tZXRhbC9zdHJlYW1zL3N0
cmVhbScsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9hc3NpZ24nLCAnZW1iZXItbWV0YWwvZGVi
dWcnLCAnZW1iZXItbWV0YWwvcGF0aF9jYWNoZScsICdlbWJlci1tZXRhbC9vYnNlcnZlcicsICdl
bWJlci1tZXRhbC9zdHJlYW1zL3V0aWxzJywgJ2VtYmVyLW1ldGFsL2VtcHR5X29iamVjdCcsICdl
bWJlci1tZXRhbC9zdHJlYW1zL3N1YnNjcmliZXInLCAnZW1iZXItbWV0YWwvc3RyZWFtcy9kZXBl
bmRlbmN5JywgJ2VtYmVyLW1ldGFsL3V0aWxzJywgJ3JlcXVpcmUnLCAnZW1iZXItbWV0YWwvc3lt
Ym9sJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbEFzc2lnbiwgX2VtYmVyTWV0YWxE
ZWJ1ZywgX2VtYmVyTWV0YWxQYXRoX2NhY2hlLCBfZW1iZXJNZXRhbE9ic2VydmVyLCBfZW1iZXJN
ZXRhbFN0cmVhbXNVdGlscywgX2VtYmVyTWV0YWxFbXB0eV9vYmplY3QsIF9lbWJlck1ldGFsU3Ry
ZWFtc1N1YnNjcmliZXIsIF9lbWJlck1ldGFsU3RyZWFtc0RlcGVuZGVuY3ksIF9lbWJlck1ldGFs
VXRpbHMsIF9yZXF1aXJlLCBfZW1iZXJNZXRhbFN5bWJvbCkgeworICAndXNlIHN0cmljdCc7CisK
KyAgZXhwb3J0cy53cmFwID0gd3JhcDsKKyAgdmFyIElTX1NUUkVBTSA9IF9lbWJlck1ldGFsU3lt
Ym9sLmRlZmF1bHQoJ0lTX1NUUkVBTScpOworCisgIGV4cG9ydHMuSVNfU1RSRUFNID0gSVNfU1RS
RUFNOworICAvKioKKyAgICBAbW9kdWxlIGVtYmVyLW1ldGFsCisgICovCisKKyAgLyoqCisgICAg
QHByaXZhdGUKKyAgICBAY2xhc3MgU3RyZWFtCisgICAgQG5hbWVzcGFjZSBFbWJlci5zdHJlYW0K
KyAgICBAY29uc3RydWN0b3IKKyAgKi8KKyAgZnVuY3Rpb24gQmFzaWNTdHJlYW0obGFiZWwpIHsK
KyAgICB0aGlzLl9pbml0KGxhYmVsKTsKKyAgfQorCisgIHZhciBLZXlTdHJlYW07CisgIHZhciBQ
cm94eU1peGluOworCisgIEJhc2ljU3RyZWFtLnByb3RvdHlwZSA9IHsKKyAgICBfaW5pdDogZnVu
Y3Rpb24gKGxhYmVsKSB7CisgICAgICB0aGlzW0lTX1NUUkVBTV0gPSB0cnVlOworICAgICAgdGhp
cy5sYWJlbCA9IG1ha2VMYWJlbChsYWJlbCk7CisgICAgICB0aGlzLmlzQWN0aXZlID0gZmFsc2U7
CisgICAgICB0aGlzLmlzRGlydHkgPSB0cnVlOworICAgICAgdGhpcy5pc0Rlc3Ryb3llZCA9IGZh
bHNlOworICAgICAgdGhpcy5jYWNoZSA9IHVuZGVmaW5lZDsKKyAgICAgIHRoaXMuY2hpbGRyZW4g
PSB1bmRlZmluZWQ7CisgICAgICB0aGlzLnN1YnNjcmliZXJIZWFkID0gbnVsbDsKKyAgICAgIHRo
aXMuc3Vic2NyaWJlclRhaWwgPSBudWxsOworICAgICAgdGhpcy5kZXBlbmRlbmN5SGVhZCA9IG51
bGw7CisgICAgICB0aGlzLmRlcGVuZGVuY3lUYWlsID0gbnVsbDsKKyAgICAgIHRoaXMub2JzZXJ2
ZWRQcm94eSA9IG51bGw7CisgICAgICB0aGlzLl9fZW1iZXJfbWV0YV9fID0gbnVsbDsKKyAgICAg
IHRoaXNbX2VtYmVyTWV0YWxVdGlscy5HVUlEX0tFWV0gPSBudWxsOworICAgIH0sCisKKyAgICBf
bWFrZUNoaWxkU3RyZWFtOiBmdW5jdGlvbiAoa2V5KSB7CisgICAgICBLZXlTdHJlYW0gPSBLZXlT
dHJlYW0gfHwgX3JlcXVpcmUuZGVmYXVsdCgnZW1iZXItbWV0YWwvc3RyZWFtcy9rZXktc3RyZWFt
JykuZGVmYXVsdDsKKyAgICAgIHJldHVybiBuZXcgS2V5U3RyZWFtKHRoaXMsIGtleSk7CisgICAg
fSwKKworICAgIHJlbW92ZUNoaWxkOiBmdW5jdGlvbiAoa2V5KSB7CisgICAgICBkZWxldGUgdGhp
cy5jaGlsZHJlbltrZXldOworICAgIH0sCisKKyAgICBnZXRLZXk6IGZ1bmN0aW9uIChrZXkpIHsK
KyAgICAgIGlmICh0aGlzLmNoaWxkcmVuID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgdGhpcy5j
aGlsZHJlbiA9IG5ldyBfZW1iZXJNZXRhbEVtcHR5X29iamVjdC5kZWZhdWx0KCk7CisgICAgICB9
CisKKyAgICAgIHZhciBrZXlTdHJlYW0gPSB0aGlzLmNoaWxkcmVuW2tleV07CisKKyAgICAgIGlm
IChrZXlTdHJlYW0gPT09IHVuZGVmaW5lZCkgeworICAgICAgICBrZXlTdHJlYW0gPSB0aGlzLl9t
YWtlQ2hpbGRTdHJlYW0oa2V5KTsKKyAgICAgICAgdGhpcy5jaGlsZHJlbltrZXldID0ga2V5U3Ry
ZWFtOworICAgICAgfQorCisgICAgICByZXR1cm4ga2V5U3RyZWFtOworICAgIH0sCisKKyAgICBn
ZXQ6IGZ1bmN0aW9uIChwYXRoKSB7CisgICAgICB2YXIgZmlyc3RLZXkgPSBfZW1iZXJNZXRhbFBh
dGhfY2FjaGUuZ2V0Rmlyc3RLZXkocGF0aCk7CisgICAgICB2YXIgdGFpbFBhdGggPSBfZW1iZXJN
ZXRhbFBhdGhfY2FjaGUuZ2V0VGFpbFBhdGgocGF0aCk7CisKKyAgICAgIGlmICh0aGlzLmNoaWxk
cmVuID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgdGhpcy5jaGlsZHJlbiA9IG5ldyBfZW1iZXJN
ZXRhbEVtcHR5X29iamVjdC5kZWZhdWx0KCk7CisgICAgICB9CisKKyAgICAgIHZhciBrZXlTdHJl
YW0gPSB0aGlzLmNoaWxkcmVuW2ZpcnN0S2V5XTsKKworICAgICAgaWYgKGtleVN0cmVhbSA9PT0g
dW5kZWZpbmVkKSB7CisgICAgICAgIGtleVN0cmVhbSA9IHRoaXMuX21ha2VDaGlsZFN0cmVhbShm
aXJzdEtleSwgcGF0aCk7CisgICAgICAgIHRoaXMuY2hpbGRyZW5bZmlyc3RLZXldID0ga2V5U3Ry
ZWFtOworICAgICAgfQorCisgICAgICBpZiAodGFpbFBhdGggPT09IHVuZGVmaW5lZCkgeworICAg
ICAgICByZXR1cm4ga2V5U3RyZWFtOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGtl
eVN0cmVhbS5nZXQodGFpbFBhdGgpOworICAgICAgfQorICAgIH0sCisKKyAgICB2YWx1ZTogZnVu
Y3Rpb24gKCkgeworICAgICAgLy8gVE9ETzogRW5zdXJlIHZhbHVlIGlzIG5ldmVyIGNhbGxlZCBv
biBhIGRlc3Ryb3llZCBzdHJlYW0KKyAgICAgIC8vIHNvIHRoYXQgd2UgY2FuIHVuY29tbWVudCB0
aGlzIGFzc2VydGlvbi4KKyAgICAgIC8vCisgICAgICAvLyBhc3NlcnQoIlN0cmVhbSBlcnJvcjog
dmFsdWUgd2FzIGNhbGxlZCBhZnRlciB0aGUgc3RyZWFtIHdhcyBkZXN0cm95ZWQiLCAhdGhpcy5p
c0Rlc3Ryb3llZCk7CisKKyAgICAgIC8vIFRPRE86IFJlbW92ZSB0aGlzIGJsb2NrLiBUaGlzIHdp
bGwgcmVxdWlyZSBlbnN1cmluZyB3ZSBhcmUKKyAgICAgIC8vIG5vdCB0cmVhdGluZyBzdHJlYW1z
IGFzICJ2b2xhdGlsZSIgYW55d2hlcmUuCisgICAgICBpZiAoIXRoaXMuaXNBY3RpdmUpIHsKKyAg
ICAgICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTsKKyAgICAgIH0KKworICAgICAgdmFyIHdpbGxSZXZh
bGlkYXRlID0gZmFsc2U7CisKKyAgICAgIGlmICghdGhpcy5pc0FjdGl2ZSAmJiB0aGlzLnN1YnNj
cmliZXJIZWFkKSB7CisgICAgICAgIHRoaXMuYWN0aXZhdGUoKTsKKyAgICAgICAgd2lsbFJldmFs
aWRhdGUgPSB0cnVlOworICAgICAgfQorCisgICAgICBpZiAodGhpcy5pc0RpcnR5KSB7CisgICAg
ICAgIGlmICh0aGlzLmlzQWN0aXZlKSB7CisgICAgICAgICAgd2lsbFJldmFsaWRhdGUgPSB0cnVl
OworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5jYWNoZSA9IHRoaXMuY29tcHV0ZSgpOworICAg
ICAgICB0aGlzLmlzRGlydHkgPSBmYWxzZTsKKyAgICAgIH0KKworICAgICAgaWYgKHdpbGxSZXZh
bGlkYXRlKSB7CisgICAgICAgIHRoaXMucmV2YWxpZGF0ZSh0aGlzLmNhY2hlKTsKKyAgICAgIH0K
KworICAgICAgcmV0dXJuIHRoaXMuY2FjaGU7CisgICAgfSwKKworICAgIGFkZE11dGFibGVEZXBl
bmRlbmN5OiBmdW5jdGlvbiAob2JqZWN0KSB7CisgICAgICB2YXIgZGVwZW5kZW5jeSA9IG5ldyBf
ZW1iZXJNZXRhbFN0cmVhbXNEZXBlbmRlbmN5LmRlZmF1bHQodGhpcywgb2JqZWN0KTsKKworICAg
ICAgaWYgKHRoaXMuaXNBY3RpdmUpIHsKKyAgICAgICAgZGVwZW5kZW5jeS5zdWJzY3JpYmUoKTsK
KyAgICAgIH0KKworICAgICAgaWYgKHRoaXMuZGVwZW5kZW5jeUhlYWQgPT09IG51bGwpIHsKKyAg
ICAgICAgdGhpcy5kZXBlbmRlbmN5SGVhZCA9IHRoaXMuZGVwZW5kZW5jeVRhaWwgPSBkZXBlbmRl
bmN5OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIHRhaWwgPSB0aGlzLmRlcGVuZGVuY3lU
YWlsOworICAgICAgICB0YWlsLm5leHQgPSBkZXBlbmRlbmN5OworICAgICAgICBkZXBlbmRlbmN5
LnByZXYgPSB0YWlsOworICAgICAgICB0aGlzLmRlcGVuZGVuY3lUYWlsID0gZGVwZW5kZW5jeTsK
KyAgICAgIH0KKworICAgICAgcmV0dXJuIGRlcGVuZGVuY3k7CisgICAgfSwKKworICAgIGFkZERl
cGVuZGVuY3k6IGZ1bmN0aW9uIChvYmplY3QpIHsKKyAgICAgIGlmIChfZW1iZXJNZXRhbFN0cmVh
bXNVdGlscy5pc1N0cmVhbShvYmplY3QpKSB7CisgICAgICAgIHRoaXMuYWRkTXV0YWJsZURlcGVu
ZGVuY3kob2JqZWN0KTsKKyAgICAgIH0KKyAgICB9LAorCisgICAgc3Vic2NyaWJlRGVwZW5kZW5j
aWVzOiBmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgZGVwZW5kZW5jeSA9IHRoaXMuZGVwZW5kZW5j
eUhlYWQ7CisgICAgICB3aGlsZSAoZGVwZW5kZW5jeSkgeworICAgICAgICB2YXIgbmV4dCA9IGRl
cGVuZGVuY3kubmV4dDsKKyAgICAgICAgZGVwZW5kZW5jeS5zdWJzY3JpYmUoKTsKKyAgICAgICAg
ZGVwZW5kZW5jeSA9IG5leHQ7CisgICAgICB9CisgICAgfSwKKworICAgIHVuc3Vic2NyaWJlRGVw
ZW5kZW5jaWVzOiBmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgZGVwZW5kZW5jeSA9IHRoaXMuZGVw
ZW5kZW5jeUhlYWQ7CisgICAgICB3aGlsZSAoZGVwZW5kZW5jeSkgeworICAgICAgICB2YXIgbmV4
dCA9IGRlcGVuZGVuY3kubmV4dDsKKyAgICAgICAgZGVwZW5kZW5jeS51bnN1YnNjcmliZSgpOwor
ICAgICAgICBkZXBlbmRlbmN5ID0gbmV4dDsKKyAgICAgIH0KKyAgICB9LAorCisgICAgbWF5YmVE
ZWFjdGl2YXRlOiBmdW5jdGlvbiAoKSB7CisgICAgICBpZiAoIXRoaXMuc3Vic2NyaWJlckhlYWQg
JiYgdGhpcy5pc0FjdGl2ZSkgeworICAgICAgICB0aGlzLmlzQWN0aXZlID0gZmFsc2U7CisgICAg
ICAgIHRoaXMudW5zdWJzY3JpYmVEZXBlbmRlbmNpZXMoKTsKKyAgICAgICAgdGhpcy5kZWFjdGl2
YXRlKCk7CisgICAgICB9CisgICAgfSwKKworICAgIGFjdGl2YXRlOiBmdW5jdGlvbiAoKSB7Cisg
ICAgICB0aGlzLmlzQWN0aXZlID0gdHJ1ZTsKKyAgICAgIHRoaXMuc3Vic2NyaWJlRGVwZW5kZW5j
aWVzKCk7CisgICAgfSwKKworICAgIHJldmFsaWRhdGU6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAg
ICAgaWYgKHZhbHVlICE9PSB0aGlzLm9ic2VydmVkUHJveHkpIHsKKyAgICAgICAgdGhpcy5fY2xl
YXJPYnNlcnZlZFByb3h5KCk7CisKKyAgICAgICAgUHJveHlNaXhpbiA9IFByb3h5TWl4aW4gfHwg
X3JlcXVpcmUuZGVmYXVsdCgnZW1iZXItcnVudGltZS9taXhpbnMvLXByb3h5JykuZGVmYXVsdDsK
KworICAgICAgICBpZiAoUHJveHlNaXhpbi5kZXRlY3QodmFsdWUpKSB7CisgICAgICAgICAgX2Vt
YmVyTWV0YWxPYnNlcnZlci5hZGRPYnNlcnZlcih2YWx1ZSwgJ2NvbnRlbnQnLCB0aGlzLCB0aGlz
Lm5vdGlmeSk7CisgICAgICAgICAgdGhpcy5vYnNlcnZlZFByb3h5ID0gdmFsdWU7CisgICAgICAg
IH0KKyAgICAgIH0KKyAgICB9LAorCisgICAgX2NsZWFyT2JzZXJ2ZWRQcm94eTogZnVuY3Rpb24g
KCkgeworICAgICAgaWYgKHRoaXMub2JzZXJ2ZWRQcm94eSkgeworICAgICAgICBfZW1iZXJNZXRh
bE9ic2VydmVyLnJlbW92ZU9ic2VydmVyKHRoaXMub2JzZXJ2ZWRQcm94eSwgJ2NvbnRlbnQnLCB0
aGlzLCB0aGlzLm5vdGlmeSk7CisgICAgICAgIHRoaXMub2JzZXJ2ZWRQcm94eSA9IG51bGw7Cisg
ICAgICB9CisgICAgfSwKKworICAgIGRlYWN0aXZhdGU6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHRo
aXMuX2NsZWFyT2JzZXJ2ZWRQcm94eSgpOworICAgIH0sCisKKyAgICBjb21wdXRlOiBmdW5jdGlv
biAoKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmVhbSBlcnJvcjogY29tcHV0ZSBub3Qg
aW1wbGVtZW50ZWQnKTsKKyAgICB9LAorCisgICAgc2V0VmFsdWU6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgIHRocm93IG5ldyBFcnJvcignU3RyZWFtIGVycm9yOiBzZXRWYWx1ZSBub3QgaW1wbGVtZW50
ZWQnKTsKKyAgICB9LAorCisgICAgbm90aWZ5OiBmdW5jdGlvbiAoKSB7CisgICAgICB0aGlzLm5v
dGlmeUV4Y2VwdCgpOworICAgIH0sCisKKyAgICBub3RpZnlFeGNlcHQ6IGZ1bmN0aW9uIChjYWxs
YmFja1RvU2tpcCwgY29udGV4dFRvU2tpcCkgeworICAgICAgaWYgKCF0aGlzLmlzRGlydHkpIHsK
KyAgICAgICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5ub3RpZnlTdWJzY3Jp
YmVycyhjYWxsYmFja1RvU2tpcCwgY29udGV4dFRvU2tpcCk7CisgICAgICB9CisgICAgfSwKKwor
ICAgIHN1YnNjcmliZTogZnVuY3Rpb24gKGNhbGxiYWNrLCBjb250ZXh0KSB7CisgICAgICBfZW1i
ZXJNZXRhbERlYnVnLmFzc2VydCgnWW91IHRyaWVkIHRvIHN1YnNjcmliZSB0byBhIHN0cmVhbSBi
dXQgdGhlIGNhbGxiYWNrIHByb3ZpZGVkIHdhcyBub3QgYSBmdW5jdGlvbi4nLCB0eXBlb2YgY2Fs
bGJhY2sgPT09ICdmdW5jdGlvbicpOworCisgICAgICB2YXIgc3Vic2NyaWJlciA9IG5ldyBfZW1i
ZXJNZXRhbFN0cmVhbXNTdWJzY3JpYmVyLmRlZmF1bHQoY2FsbGJhY2ssIGNvbnRleHQsIHRoaXMp
OworICAgICAgaWYgKHRoaXMuc3Vic2NyaWJlckhlYWQgPT09IG51bGwpIHsKKyAgICAgICAgdGhp
cy5zdWJzY3JpYmVySGVhZCA9IHRoaXMuc3Vic2NyaWJlclRhaWwgPSBzdWJzY3JpYmVyOworICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIHRhaWwgPSB0aGlzLnN1YnNjcmliZXJUYWlsOworICAg
ICAgICB0YWlsLm5leHQgPSBzdWJzY3JpYmVyOworICAgICAgICBzdWJzY3JpYmVyLnByZXYgPSB0
YWlsOworICAgICAgICB0aGlzLnN1YnNjcmliZXJUYWlsID0gc3Vic2NyaWJlcjsKKyAgICAgIH0K
KworICAgICAgdmFyIHN0cmVhbSA9IHRoaXM7CisgICAgICByZXR1cm4gZnVuY3Rpb24gKHBydW5l
KSB7CisgICAgICAgIHN1YnNjcmliZXIucmVtb3ZlRnJvbShzdHJlYW0pOworICAgICAgICBpZiAo
cHJ1bmUpIHsKKyAgICAgICAgICBzdHJlYW0ucHJ1bmUoKTsKKyAgICAgICAgfQorICAgICAgfTsK
KyAgICB9LAorCisgICAgcHJ1bmU6IGZ1bmN0aW9uICgpIHsKKyAgICAgIGlmICh0aGlzLnN1YnNj
cmliZXJIZWFkID09PSBudWxsKSB7CisgICAgICAgIHRoaXMuZGVzdHJveSh0cnVlKTsKKyAgICAg
IH0KKyAgICB9LAorCisgICAgdW5zdWJzY3JpYmU6IGZ1bmN0aW9uIChjYWxsYmFjaywgY29udGV4
dCkgeworICAgICAgdmFyIHN1YnNjcmliZXIgPSB0aGlzLnN1YnNjcmliZXJIZWFkOworCisgICAg
ICB3aGlsZSAoc3Vic2NyaWJlcikgeworICAgICAgICB2YXIgbmV4dCA9IHN1YnNjcmliZXIubmV4
dDsKKyAgICAgICAgaWYgKHN1YnNjcmliZXIuY2FsbGJhY2sgPT09IGNhbGxiYWNrICYmIHN1YnNj
cmliZXIuY29udGV4dCA9PT0gY29udGV4dCkgeworICAgICAgICAgIHN1YnNjcmliZXIucmVtb3Zl
RnJvbSh0aGlzKTsKKyAgICAgICAgfQorICAgICAgICBzdWJzY3JpYmVyID0gbmV4dDsKKyAgICAg
IH0KKyAgICB9LAorCisgICAgbm90aWZ5U3Vic2NyaWJlcnM6IGZ1bmN0aW9uIChjYWxsYmFja1Rv
U2tpcCwgY29udGV4dFRvU2tpcCkgeworICAgICAgdmFyIHN1YnNjcmliZXIgPSB0aGlzLnN1YnNj
cmliZXJIZWFkOworCisgICAgICB3aGlsZSAoc3Vic2NyaWJlcikgeworICAgICAgICB2YXIgbmV4
dCA9IHN1YnNjcmliZXIubmV4dDsKKworICAgICAgICB2YXIgY2FsbGJhY2sgPSBzdWJzY3JpYmVy
LmNhbGxiYWNrOworICAgICAgICB2YXIgY29udGV4dCA9IHN1YnNjcmliZXIuY29udGV4dDsKKwor
ICAgICAgICBzdWJzY3JpYmVyID0gbmV4dDsKKworICAgICAgICBpZiAoY2FsbGJhY2sgPT09IGNh
bGxiYWNrVG9Ta2lwICYmIGNvbnRleHQgPT09IGNvbnRleHRUb1NraXApIHsKKyAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQp
IHsKKyAgICAgICAgICBjYWxsYmFjayh0aGlzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICBjYWxsYmFjay5jYWxsKGNvbnRleHQsIHRoaXMpOworICAgICAgICB9CisgICAgICB9CisgICAg
fSwKKworICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIChwcnVuZSkgeworICAgICAgaWYgKCF0aGlzLmlz
RGVzdHJveWVkKSB7CisgICAgICAgIHRoaXMuaXNEZXN0cm95ZWQgPSB0cnVlOworCisgICAgICAg
IHRoaXMuc3Vic2NyaWJlckhlYWQgPSB0aGlzLnN1YnNjcmliZXJUYWlsID0gbnVsbDsKKyAgICAg
ICAgdGhpcy5tYXliZURlYWN0aXZhdGUoKTsKKworICAgICAgICB2YXIgZGVwZW5kZW5jaWVzID0g
dGhpcy5kZXBlbmRlbmNpZXM7CisKKyAgICAgICAgaWYgKGRlcGVuZGVuY2llcykgeworICAgICAg
ICAgIGZvciAodmFyIGkgPSAwLCBsID0gZGVwZW5kZW5jaWVzLmxlbmd0aDsgaSA8IGw7IGkrKykg
eworICAgICAgICAgICAgZGVwZW5kZW5jaWVzW2ldKHBydW5lKTsKKyAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKyAgICB9CisgIH07CisKKyAg
QmFzaWNTdHJlYW0uZXh0ZW5kID0gZnVuY3Rpb24gKG9iamVjdCkgeworICAgIHZhciBDaGlsZCA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgIHRoaXMuX2luaXQoKTsKKyAgICAgIHRoaXMuaW5pdC5hcHBs
eSh0aGlzLCBhcmd1bWVudHMpOworCisgICAgICBfZW1iZXJNZXRhbERlYnVnLmRlYnVnU2VhbCh0
aGlzKTsKKyAgICB9OworCisgICAgQ2hpbGQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSh0aGlz
LnByb3RvdHlwZSk7CisKKyAgICBfZW1iZXJNZXRhbEFzc2lnbi5kZWZhdWx0KENoaWxkLnByb3Rv
dHlwZSwgb2JqZWN0KTsKKyAgICBDaGlsZC5leHRlbmQgPSBCYXNpY1N0cmVhbS5leHRlbmQ7Cisg
ICAgcmV0dXJuIENoaWxkOworICB9OworCisgIHZhciBTdHJlYW0gPSBCYXNpY1N0cmVhbS5leHRl
bmQoeworICAgIGluaXQ6IGZ1bmN0aW9uIChmbiwgbGFiZWwpIHsKKyAgICAgIHRoaXMuX2NvbXB1
dGUgPSBmbjsKKyAgICAgIHRoaXMubGFiZWwgPSBsYWJlbDsKKyAgICB9LAorCisgICAgY29tcHV0
ZTogZnVuY3Rpb24gKCkgeworICAgICAgcmV0dXJuIHRoaXMuX2NvbXB1dGUoKTsKKyAgICB9Cisg
IH0pOworCisgIGZ1bmN0aW9uIHdyYXAodmFsdWUsIEtpbmQsIHBhcmFtKSB7CisgICAgaWYgKF9l
bWJlck1ldGFsU3RyZWFtc1V0aWxzLmlzU3RyZWFtKHZhbHVlKSkgeworICAgICAgcmV0dXJuIHZh
bHVlOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gbmV3IEtpbmQodmFsdWUsIHBhcmFtKTsK
KyAgICB9CisgIH0KKworICBmdW5jdGlvbiBtYWtlTGFiZWwobGFiZWwpIHsKKyAgICBpZiAobGFi
ZWwgPT09IHVuZGVmaW5lZCkgeworICAgICAgcmV0dXJuICcobm8gbGFiZWwpJzsKKyAgICB9IGVs
c2UgeworICAgICAgcmV0dXJuIGxhYmVsOworICAgIH0KKyAgfQorCisgIGV4cG9ydHMuZGVmYXVs
dCA9IEJhc2ljU3RyZWFtOworICBleHBvcnRzLlN0cmVhbSA9IFN0cmVhbTsKK30pOworZW5pZmVk
KCdlbWJlci1tZXRhbC9zdHJlYW1zL3N1YnNjcmliZXInLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0
YWwvYXNzaWduJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbEFzc2lnbikgeworICAn
dXNlIHN0cmljdCc7CisKKyAgLyoqCisgICAgQG1vZHVsZSBlbWJlci1tZXRhbAorICAqLworCisg
IC8qKgorICAgIEBwcml2YXRlCisgICAgQGNsYXNzIFN1YnNjcmliZXIKKyAgICBAbmFtZXNwYWNl
IEVtYmVyLnN0cmVhbXMKKyAgICBAY29uc3RydWN0b3IKKyAgKi8KKyAgZnVuY3Rpb24gU3Vic2Ny
aWJlcihjYWxsYmFjaywgY29udGV4dCkgeworICAgIHRoaXMubmV4dCA9IG51bGw7CisgICAgdGhp
cy5wcmV2ID0gbnVsbDsKKyAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgdGhpcy5j
b250ZXh0ID0gY29udGV4dDsKKyAgfQorCisgIF9lbWJlck1ldGFsQXNzaWduLmRlZmF1bHQoU3Vi
c2NyaWJlci5wcm90b3R5cGUsIHsKKyAgICByZW1vdmVGcm9tOiBmdW5jdGlvbiAoc3RyZWFtKSB7
CisgICAgICB2YXIgbmV4dCA9IHRoaXMubmV4dDsKKyAgICAgIHZhciBwcmV2ID0gdGhpcy5wcmV2
OworCisgICAgICBpZiAocHJldikgeworICAgICAgICBwcmV2Lm5leHQgPSBuZXh0OworICAgICAg
fSBlbHNlIHsKKyAgICAgICAgc3RyZWFtLnN1YnNjcmliZXJIZWFkID0gbmV4dDsKKyAgICAgIH0K
KworICAgICAgaWYgKG5leHQpIHsKKyAgICAgICAgbmV4dC5wcmV2ID0gcHJldjsKKyAgICAgIH0g
ZWxzZSB7CisgICAgICAgIHN0cmVhbS5zdWJzY3JpYmVyVGFpbCA9IHByZXY7CisgICAgICB9CisK
KyAgICAgIHN0cmVhbS5tYXliZURlYWN0aXZhdGUoKTsKKyAgICB9CisgIH0pOworCisgIGV4cG9y
dHMuZGVmYXVsdCA9IFN1YnNjcmliZXI7Cit9KTsKK2VuaWZlZCgnZW1iZXItbWV0YWwvc3RyZWFt
cy91dGlscycsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9kZWJ1ZycsICdlbWJlci1tZXRhbC9z
dHJlYW1zL3N0cmVhbSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxEZWJ1ZywgX2Vt
YmVyTWV0YWxTdHJlYW1zU3RyZWFtKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICBleHBvcnRzLmlz
U3RyZWFtID0gaXNTdHJlYW07CisgIGV4cG9ydHMuc3Vic2NyaWJlID0gc3Vic2NyaWJlOworICBl
eHBvcnRzLnVuc3Vic2NyaWJlID0gdW5zdWJzY3JpYmU7CisgIGV4cG9ydHMucmVhZCA9IHJlYWQ7
CisgIGV4cG9ydHMucmVhZEFycmF5ID0gcmVhZEFycmF5OworICBleHBvcnRzLnJlYWRIYXNoID0g
cmVhZEhhc2g7CisgIGV4cG9ydHMuc2NhbkFycmF5ID0gc2NhbkFycmF5OworICBleHBvcnRzLnNj
YW5IYXNoID0gc2Nhbkhhc2g7CisgIGV4cG9ydHMuY29uY2F0ID0gY29uY2F0OworICBleHBvcnRz
LmxhYmVsc0ZvciA9IGxhYmVsc0ZvcjsKKyAgZXhwb3J0cy5sYWJlbHNGb3JPYmplY3QgPSBsYWJl
bHNGb3JPYmplY3Q7CisgIGV4cG9ydHMubGFiZWxGb3IgPSBsYWJlbEZvcjsKKyAgZXhwb3J0cy5v
ciA9IG9yOworICBleHBvcnRzLmFkZERlcGVuZGVuY3kgPSBhZGREZXBlbmRlbmN5OworICBleHBv
cnRzLnppcCA9IHppcDsKKyAgZXhwb3J0cy56aXBIYXNoID0gemlwSGFzaDsKKyAgZXhwb3J0cy5j
aGFpbiA9IGNoYWluOworICBleHBvcnRzLnNldFZhbHVlID0gc2V0VmFsdWU7CisKKyAgLyoKKyAg
IENoZWNrIHdoZXRoZXIgYW4gb2JqZWN0IGlzIGEgc3RyZWFtIG9yIG5vdC4KKyAgCisgICBAcHJp
dmF0ZQorICAgQGZvciBFbWJlci5zdHJlYW0KKyAgIEBmdW5jdGlvbiBpc1N0cmVhbQorICAgQHBh
cmFtIHtPYmplY3R8U3RyZWFtfSBvYmplY3QgT2JqZWN0IHRvIGNoZWNrIHdoZXRoZXIgaXQgaXMg
YSBzdHJlYW0uCisgICBAcmV0dXJuIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIG9iamVjdCBpcyBh
IHN0cmVhbSwgYGZhbHNlYCBvdGhlcndpc2UuCisgICovCisKKyAgZnVuY3Rpb24gaXNTdHJlYW0o
b2JqZWN0KSB7CisgICAgcmV0dXJuIG9iamVjdCAmJiBvYmplY3RbX2VtYmVyTWV0YWxTdHJlYW1z
U3RyZWFtLklTX1NUUkVBTV07CisgIH0KKworICAvKgorICAgQSBtZXRob2Qgb2Ygc3Vic2NyaWJp
bmcgdG8gYSBzdHJlYW0gd2hpY2ggaXMgc2FmZSBmb3IgdXNlIHdpdGggYSBub24tc3RyZWFtCisg
ICBvYmplY3QuIElmIGEgbm9uLXN0cmVhbSBvYmplY3QgaXMgcGFzc2VkLCB0aGUgZnVuY3Rpb24g
ZG9lcyBub3RoaW5nLgorICAKKyAgIEBwdWJsaWMKKyAgIEBmb3IgRW1iZXIuc3RyZWFtCisgICBA
ZnVuY3Rpb24gc3Vic2NyaWJlCisgICBAcGFyYW0ge09iamVjdHxTdHJlYW19IG9iamVjdCBPYmpl
Y3Qgb3Igc3RyZWFtIHRvIHBvdGVudGlhbGx5IHN1YnNjcmliZSB0by4KKyAgIEBwYXJhbSB7RnVu
Y3Rpb259IGNhbGxiYWNrIEZ1bmN0aW9uIHRvIHJ1biB3aGVuIHN0cmVhbSB2YWx1ZSBjaGFuZ2Vz
LgorICAgQHBhcmFtIHtPYmplY3R9IFtjb250ZXh0XSB0aGUgY2FsbGJhY2sgd2lsbCBiZSBleGVj
dXRlZCB3aXRoIHRoaXMgY29udGV4dCBpZiBpdAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpcyBwcm92aWRlZC4KKyAgICovCisKKyAgZnVuY3Rpb24gc3Vic2NyaWJlKG9iamVjdCwgY2Fs
bGJhY2ssIGNvbnRleHQpIHsKKyAgICBpZiAob2JqZWN0ICYmIG9iamVjdFtfZW1iZXJNZXRhbFN0
cmVhbXNTdHJlYW0uSVNfU1RSRUFNXSkgeworICAgICAgcmV0dXJuIG9iamVjdC5zdWJzY3JpYmUo
Y2FsbGJhY2ssIGNvbnRleHQpOworICAgIH0KKyAgfQorCisgIC8qCisgICBBIG1ldGhvZCBvZiB1
bnN1YnNjcmliaW5nIGZyb20gYSBzdHJlYW0gd2hpY2ggaXMgc2FmZSBmb3IgdXNlIHdpdGggYSBu
b24tc3RyZWFtCisgICBvYmplY3QuIElmIGEgbm9uLXN0cmVhbSBvYmplY3QgaXMgcGFzc2VkLCB0
aGUgZnVuY3Rpb24gZG9lcyBub3RoaW5nLgorICAKKyAgIEBwcml2YXRlCisgICBAZm9yIEVtYmVy
LnN0cmVhbQorICAgQGZ1bmN0aW9uIHVuc3Vic2NyaWJlCisgICBAcGFyYW0ge09iamVjdHxTdHJl
YW19IG9iamVjdCBPYmplY3Qgb3Igc3RyZWFtIHRvIHBvdGVudGlhbGx5IHVuc3Vic2NyaWJlIGZy
b20uCisgICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBGdW5jdGlvbiBvcmlnaW5hbGx5IHBh
c3NlZCB0byBgc3Vic2NyaWJlKClgLgorICAgQHBhcmFtIHtPYmplY3R9IFtjb250ZXh0XSBPYmpl
Y3Qgb3JpZ2luYWxseSBwYXNzZWQgdG8gYHN1YnNjcmliZSgpYC4KKyAgICovCisKKyAgZnVuY3Rp
b24gdW5zdWJzY3JpYmUob2JqZWN0LCBjYWxsYmFjaywgY29udGV4dCkgeworICAgIGlmIChvYmpl
Y3QgJiYgb2JqZWN0W19lbWJlck1ldGFsU3RyZWFtc1N0cmVhbS5JU19TVFJFQU1dKSB7CisgICAg
ICBvYmplY3QudW5zdWJzY3JpYmUoY2FsbGJhY2ssIGNvbnRleHQpOworICAgIH0KKyAgfQorCisg
IC8qCisgICBSZXRyaWV2ZSB0aGUgdmFsdWUgb2YgYSBzdHJlYW0sIG9yIGluIHRoZSBjYXNlIHdo
ZXJlIGEgbm9uLXN0cmVhbSBvYmplY3QgaXMgcGFzc2VkLAorICAgcmV0dXJuIHRoZSBvYmplY3Qg
aXRzZWxmLgorICAKKyAgIEBwcml2YXRlCisgICBAZm9yIEVtYmVyLnN0cmVhbQorICAgQGZ1bmN0
aW9uIHJlYWQKKyAgIEBwYXJhbSB7T2JqZWN0fFN0cmVhbX0gb2JqZWN0IE9iamVjdCB0byByZXR1
cm4gdGhlIHZhbHVlIG9mLgorICAgQHJldHVybiBUaGUgc3RyZWFtJ3MgY3VycmVudCB2YWx1ZSwg
b3IgdGhlIG5vbi1zdHJlYW0gb2JqZWN0IGl0c2VsZi4KKyAgICovCisKKyAgZnVuY3Rpb24gcmVh
ZChvYmplY3QpIHsKKyAgICBpZiAob2JqZWN0ICYmIG9iamVjdFtfZW1iZXJNZXRhbFN0cmVhbXNT
dHJlYW0uSVNfU1RSRUFNXSkgeworICAgICAgcmV0dXJuIG9iamVjdC52YWx1ZSgpOworICAgIH0g
ZWxzZSB7CisgICAgICByZXR1cm4gb2JqZWN0OworICAgIH0KKyAgfQorCisgIC8qCisgICBNYXAg
YW4gYXJyYXksIHJlcGxhY2luZyBhbnkgc3RyZWFtcyB3aXRoIHRoZWlyIHZhbHVlcy4KKyAgCisg
ICBAcHJpdmF0ZQorICAgQGZvciBFbWJlci5zdHJlYW0KKyAgIEBmdW5jdGlvbiByZWFkQXJyYXkK
KyAgIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byByZWFkIHZhbHVlcyBmcm9tCisg
ICBAcmV0dXJuIHtBcnJheX0gQSBuZXcgYXJyYXkgb2YgdGhlIHNhbWUgbGVuZ3RoIHdpdGggdGhl
IHZhbHVlcyBvZiBub24tc3RyZWFtCisgICAgICAgICAgICAgICAgICAgb2JqZWN0cyBtYXBwZWQg
ZnJvbSB0aGVpciBvcmlnaW5hbCBwb3NpdGlvbnMgdW50b3VjaGVkLCBhbmQKKyAgICAgICAgICAg
ICAgICAgICB0aGUgdmFsdWVzIG9mIHN0cmVhbSBvYmplY3RzIHJldGFpbmluZyB0aGVpciBvcmln
aW5hbCBwb3NpdGlvbgorICAgICAgICAgICAgICAgICAgIGFuZCByZXBsYWNlZCB3aXRoIHRoZSBz
dHJlYW0ncyBjdXJyZW50IHZhbHVlLgorICAgKi8KKworICBmdW5jdGlvbiByZWFkQXJyYXkoYXJy
YXkpIHsKKyAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOworICAgIHZhciByZXQgPSBuZXcg
QXJyYXkobGVuZ3RoKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Cisg
ICAgICByZXRbaV0gPSByZWFkKGFycmF5W2ldKTsKKyAgICB9CisgICAgcmV0dXJuIHJldDsKKyAg
fQorCisgIC8qCisgICBNYXAgYSBoYXNoLCByZXBsYWNpbmcgYW55IHN0cmVhbSBwcm9wZXJ0eSB2
YWx1ZXMgd2l0aCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGF0CisgICBzdHJlYW0uCisgIAorICAg
QHByaXZhdGUKKyAgIEBmb3IgRW1iZXIuc3RyZWFtCisgICBAZnVuY3Rpb24gcmVhZEhhc2gKKyAg
IEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGhhc2ggdG8gcmVhZCBrZXlzIGFuZCB2YWx1ZXMg
ZnJvbS4KKyAgIEByZXR1cm4ge09iamVjdH0gQSBuZXcgb2JqZWN0IHdpdGggdGhlIHNhbWUga2V5
cyBhcyB0aGUgcGFzc2VkIG9iamVjdC4gVGhlCisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5
IHZhbHVlcyBpbiB0aGUgbmV3IG9iamVjdCBhcmUgdGhlIG9yaWdpbmFsIHZhbHVlcyBpbgorICAg
ICAgICAgICAgICAgICAgICB0aGUgY2FzZSBvZiBub24tc3RyZWFtIG9iamVjdHMsIGFuZCB0aGUg
c3RyZWFtcycgY3VycmVudAorICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgaW4gdGhlIGNhc2Ug
b2Ygc3RyZWFtIG9iamVjdHMuCisgICAqLworCisgIGZ1bmN0aW9uIHJlYWRIYXNoKG9iamVjdCkg
eworICAgIHZhciByZXQgPSB7fTsKKyAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7CisgICAg
ICByZXRba2V5XSA9IHJlYWQob2JqZWN0W2tleV0pOworICAgIH0KKyAgICByZXR1cm4gcmV0Owor
ICB9CisKKyAgLyoKKyAgIENoZWNrIHdoZXRoZXIgYW4gYXJyYXkgY29udGFpbnMgYW55IHN0cmVh
bSB2YWx1ZXMuCisgIAorICAgQHByaXZhdGUKKyAgIEBmb3IgRW1iZXIuc3RyZWFtCisgICBAZnVu
Y3Rpb24gc2NhbkFycmF5CisgICBAcGFyYW0ge0FycmF5fSBhcnJheSBBcnJheSBnaXZlbiB0byBh
IGhhbmRsZWJhcnMgaGVscGVyLgorICAgQHJldHVybiB7Qm9vbGVhbn0gYHRydWVgIGlmIHRoZSBh
cnJheSBjb250YWlucyBhIHN0cmVhbS9ib3VuZCB2YWx1ZSwgYGZhbHNlYAorICAgICAgICAgICAg
ICAgICAgICAgb3RoZXJ3aXNlLgorICAqLworCisgIGZ1bmN0aW9uIHNjYW5BcnJheShhcnJheSkg
eworICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7CisgICAgdmFyIGNvbnRhaW5zU3RyZWFt
ID0gZmFsc2U7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAg
ICBpZiAoaXNTdHJlYW0oYXJyYXlbaV0pKSB7CisgICAgICAgIGNvbnRhaW5zU3RyZWFtID0gdHJ1
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGNvbnRhaW5z
U3RyZWFtOworICB9CisKKyAgLyoKKyAgIENoZWNrIHdoZXRoZXIgYSBoYXNoIGhhcyBhbnkgc3Ry
ZWFtIHByb3BlcnR5IHZhbHVlcy4KKyAgCisgICBAcHJpdmF0ZQorICAgQGZvciBFbWJlci5zdHJl
YW0KKyAgIEBmdW5jdGlvbiBzY2FuSGFzaAorICAgQHBhcmFtIHtPYmplY3R9IGhhc2ggImhhc2gi
IGFyZ3VtZW50IGdpdmVuIHRvIGEgaGFuZGxlYmFycyBoZWxwZXIuCisgICBAcmV0dXJuIHtCb29s
ZWFufSBgdHJ1ZWAgaWYgdGhlIG9iamVjdCBjb250YWlucyBhIHN0cmVhbS9ib3VuZCB2YWx1ZSwg
YGZhbHNlYAorICAgICAgICAgICAgICAgICAgICAgb3RoZXJ3aXNlLgorICAgKi8KKworICBmdW5j
dGlvbiBzY2FuSGFzaChoYXNoKSB7CisgICAgdmFyIGNvbnRhaW5zU3RyZWFtID0gZmFsc2U7CisK
KyAgICBmb3IgKHZhciBwcm9wIGluIGhhc2gpIHsKKyAgICAgIGlmIChpc1N0cmVhbShoYXNoW3By
b3BdKSkgeworICAgICAgICBjb250YWluc1N0cmVhbSA9IHRydWU7CisgICAgICAgIGJyZWFrOwor
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBjb250YWluc1N0cmVhbTsKKyAgfQorCisgIHZh
ciBDb25jYXRTdHJlYW0gPSBfZW1iZXJNZXRhbFN0cmVhbXNTdHJlYW0uZGVmYXVsdC5leHRlbmQo
eworICAgIGluaXQ6IGZ1bmN0aW9uIChhcnJheSwgc2VwYXJhdG9yKSB7CisgICAgICB0aGlzLmFy
cmF5ID0gYXJyYXk7CisgICAgICB0aGlzLnNlcGFyYXRvciA9IHNlcGFyYXRvcjsKKworICAgICAg
Ly8gVXNlZCBieSBhbmdsZSBicmFja2V0IGNvbXBvbmVudHMgdG8gZGV0ZWN0IGFuIGF0dHJpYnV0
ZSB3YXMgcHJvdmlkZWQKKyAgICAgIC8vIGFzIGEgc3RyaW5nIGxpdGVyYWwuCisgICAgICB0aGlz
LmlzQ29uY2F0ID0gdHJ1ZTsKKyAgICB9LAorCisgICAgbGFiZWw6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgIHZhciBsYWJlbHMgPSBsYWJlbHNGb3IodGhpcy5hcnJheSk7CisgICAgICByZXR1cm4gJ2Nv
bmNhdChbJyArIGxhYmVscy5qb2luKCcsICcpICsgJ107IHNlcGFyYXRvcj0nICsgaW5zcGVjdCh0
aGlzLnNlcGFyYXRvcikgKyAnKSc7CisgICAgfSwKKworICAgIGNvbXB1dGU6IGZ1bmN0aW9uICgp
IHsKKyAgICAgIHJldHVybiBjb25jYXQocmVhZEFycmF5KHRoaXMuYXJyYXkpLCB0aGlzLnNlcGFy
YXRvcik7CisgICAgfQorICB9KTsKKworICAvKgorICAgSm9pbiBhbiBhcnJheSwgd2l0aCBhbnkg
c3RyZWFtcyByZXBsYWNlZCBieSB0aGVpciBjdXJyZW50IHZhbHVlcy4KKyAgCisgICBAcHJpdmF0
ZQorICAgQGZvciBFbWJlci5zdHJlYW0KKyAgIEBmdW5jdGlvbiBjb25jYXQKKyAgIEBwYXJhbSB7
QXJyYXl9IGFycmF5IEFuIGFycmF5IGNvbnRhaW5pbmcgemVybyBvciBtb3JlIHN0cmVhbSBvYmpl
Y3RzIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgemVybyBvciBtb3JlIG5vbi1zdHJlYW0g
b2JqZWN0cy4KKyAgIEBwYXJhbSB7U3RyaW5nfSBzZXBhcmF0b3IgU3RyaW5nIHRvIGJlIHVzZWQg
dG8gam9pbiBhcnJheSBlbGVtZW50cy4KKyAgIEByZXR1cm4ge1N0cmluZ30gU3RyaW5nIHdpdGgg
YXJyYXkgZWxlbWVudHMgY29uY2F0ZW5hdGVkIGFuZCBqb2luZWQgYnkgdGhlCisgICAgICAgICAg
ICAgICAgICAgIHByb3ZpZGVkIHNlcGFyYXRvciwgYW5kIGFueSBzdHJlYW0gYXJyYXkgbWVtYmVy
cyBoYXZpbmcgYmVlbgorICAgICAgICAgICAgICAgICAgICByZXBsYWNlZCBieSB0aGUgY3VycmVu
dCB2YWx1ZSBvZiB0aGUgc3RyZWFtLgorICAgKi8KKworICBmdW5jdGlvbiBjb25jYXQoYXJyYXks
IHNlcGFyYXRvcikgeworICAgIC8vIFRPRE86IENyZWF0ZSBzdWJjbGFzcyBDb25jYXRTdHJlYW0g
PCBTdHJlYW0uIERlZmVyCisgICAgLy8gc3Vic2NyaWJpbmcgdG8gc3RyZWFtcyB1bnRpbCB0aGUg
dmFsdWUoKSBpcyBjYWxsZWQuCisgICAgdmFyIGhhc1N0cmVhbSA9IHNjYW5BcnJheShhcnJheSk7
CisgICAgaWYgKGhhc1N0cmVhbSkgeworICAgICAgdmFyIHN0cmVhbSA9IG5ldyBDb25jYXRTdHJl
YW0oYXJyYXksIHNlcGFyYXRvcik7CisKKyAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXJyYXku
bGVuZ3RoOyBpIDwgbDsgaSsrKSB7CisgICAgICAgIGFkZERlcGVuZGVuY3koc3RyZWFtLCBhcnJh
eVtpXSk7CisgICAgICB9CisKKyAgICAgIHJldHVybiBzdHJlYW07CisgICAgfSBlbHNlIHsKKyAg
ICAgIHJldHVybiBhcnJheS5qb2luKHNlcGFyYXRvcik7CisgICAgfQorICB9CisKKyAgZnVuY3Rp
b24gbGFiZWxzRm9yKHN0cmVhbXMpIHsKKyAgICB2YXIgbGFiZWxzID0gW107CisKKyAgICBmb3Ig
KHZhciBpID0gMCwgbCA9IHN0cmVhbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CisgICAgICB2YXIg
c3RyZWFtID0gc3RyZWFtc1tpXTsKKyAgICAgIGxhYmVscy5wdXNoKGxhYmVsRm9yKHN0cmVhbSkp
OworICAgIH0KKworICAgIHJldHVybiBsYWJlbHM7CisgIH0KKworICBmdW5jdGlvbiBsYWJlbHNG
b3JPYmplY3Qoc3RyZWFtcykgeworICAgIHZhciBsYWJlbHMgPSBbXTsKKworICAgIGZvciAodmFy
IHByb3AgaW4gc3RyZWFtcykgeworICAgICAgbGFiZWxzLnB1c2gocHJvcCArICc6ICcgKyBpbnNw
ZWN0KHN0cmVhbXNbcHJvcF0pKTsKKyAgICB9CisKKyAgICByZXR1cm4gbGFiZWxzLmxlbmd0aCA/
ICd7ICcgKyBsYWJlbHMuam9pbignLCAnKSArICcgfScgOiAne30nOworICB9CisKKyAgZnVuY3Rp
b24gbGFiZWxGb3IobWF5YmVTdHJlYW0pIHsKKyAgICBpZiAoaXNTdHJlYW0obWF5YmVTdHJlYW0p
KSB7CisgICAgICB2YXIgc3RyZWFtID0gbWF5YmVTdHJlYW07CisgICAgICByZXR1cm4gdHlwZW9m
IHN0cmVhbS5sYWJlbCA9PT0gJ2Z1bmN0aW9uJyA/IHN0cmVhbS5sYWJlbCgpIDogc3RyZWFtLmxh
YmVsOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gaW5zcGVjdChtYXliZVN0cmVhbSk7Cisg
ICAgfQorICB9CisKKyAgZnVuY3Rpb24gaW5zcGVjdCh2YWx1ZSkgeworICAgIHN3aXRjaCAodHlw
ZW9mIHZhbHVlKSB7CisgICAgICBjYXNlICdzdHJpbmcnOgorICAgICAgICByZXR1cm4gJyInICsg
dmFsdWUgKyAnIic7CisgICAgICBjYXNlICdvYmplY3QnOgorICAgICAgICByZXR1cm4gJ3sgLi4u
IH0nOworICAgICAgY2FzZSAnZnVuY3Rpb24nOgorICAgICAgICByZXR1cm4gJ2Z1bmN0aW9uKCkg
eyAuLi4gfSc7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTsK
KyAgICB9CisgIH0KKworICBmdW5jdGlvbiBvcihmaXJzdCwgc2Vjb25kKSB7CisgICAgdmFyIHN0
cmVhbSA9IG5ldyBfZW1iZXJNZXRhbFN0cmVhbXNTdHJlYW0uU3RyZWFtKGZ1bmN0aW9uICgpIHsK
KyAgICAgIHJldHVybiBmaXJzdC52YWx1ZSgpIHx8IHNlY29uZC52YWx1ZSgpOworICAgIH0sIGZ1
bmN0aW9uICgpIHsKKyAgICAgIHJldHVybiBsYWJlbEZvcihmaXJzdCkgKyAnIHx8ICcgKyBsYWJl
bEZvcihzZWNvbmQpOworICAgIH0pOworCisgICAgc3RyZWFtLmFkZERlcGVuZGVuY3koZmlyc3Qp
OworICAgIHN0cmVhbS5hZGREZXBlbmRlbmN5KHNlY29uZCk7CisKKyAgICByZXR1cm4gc3RyZWFt
OworICB9CisKKyAgZnVuY3Rpb24gYWRkRGVwZW5kZW5jeShzdHJlYW0sIGRlcGVuZGVuY3kpIHsK
KyAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnQ2Fubm90IGFkZCBhIHN0cmVhbSBhcyBhIGRl
cGVuZGVuY3kgdG8gYSBub24tc3RyZWFtJywgaXNTdHJlYW0oc3RyZWFtKSB8fCAhaXNTdHJlYW0o
ZGVwZW5kZW5jeSkpOworICAgIGlmIChpc1N0cmVhbShzdHJlYW0pKSB7CisgICAgICBzdHJlYW0u
YWRkRGVwZW5kZW5jeShkZXBlbmRlbmN5KTsKKyAgICB9CisgIH0KKworICBmdW5jdGlvbiB6aXAo
c3RyZWFtcywgY2FsbGJhY2ssIGxhYmVsKSB7CisgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQo
J011c3QgY2FsbCB6aXAgd2l0aCBhIGxhYmVsJywgISFsYWJlbCk7CisKKyAgICB2YXIgc3RyZWFt
ID0gbmV3IF9lbWJlck1ldGFsU3RyZWFtc1N0cmVhbS5TdHJlYW0oZnVuY3Rpb24gKCkgeworICAg
ICAgdmFyIGFycmF5ID0gcmVhZEFycmF5KHN0cmVhbXMpOworICAgICAgcmV0dXJuIGNhbGxiYWNr
ID8gY2FsbGJhY2soYXJyYXkpIDogYXJyYXk7CisgICAgfSwgZnVuY3Rpb24gKCkgeworICAgICAg
cmV0dXJuIGxhYmVsICsgJygnICsgbGFiZWxzRm9yKHN0cmVhbXMpICsgJyknOworICAgIH0pOwor
CisgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBzdHJlYW1zLmxlbmd0aDsgaSA8IGw7IGkrKykgewor
ICAgICAgc3RyZWFtLmFkZERlcGVuZGVuY3koc3RyZWFtc1tpXSk7CisgICAgfQorCisgICAgcmV0
dXJuIHN0cmVhbTsKKyAgfQorCisgIGZ1bmN0aW9uIHppcEhhc2gob2JqZWN0LCBjYWxsYmFjaywg
bGFiZWwpIHsKKyAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnTXVzdCBjYWxsIHppcEhhc2gg
d2l0aCBhIGxhYmVsJywgISFsYWJlbCk7CisKKyAgICB2YXIgc3RyZWFtID0gbmV3IF9lbWJlck1l
dGFsU3RyZWFtc1N0cmVhbS5TdHJlYW0oZnVuY3Rpb24gKCkgeworICAgICAgdmFyIGhhc2ggPSBy
ZWFkSGFzaChvYmplY3QpOworICAgICAgcmV0dXJuIGNhbGxiYWNrID8gY2FsbGJhY2soaGFzaCkg
OiBoYXNoOworICAgIH0sIGZ1bmN0aW9uICgpIHsKKyAgICAgIHJldHVybiBsYWJlbCArICcoJyAr
IGxhYmVsc0Zvck9iamVjdChvYmplY3QpICsgJyknOworICAgIH0pOworCisgICAgZm9yICh2YXIg
cHJvcCBpbiBvYmplY3QpIHsKKyAgICAgIHN0cmVhbS5hZGREZXBlbmRlbmN5KG9iamVjdFtwcm9w
XSk7CisgICAgfQorCisgICAgcmV0dXJuIHN0cmVhbTsKKyAgfQorCisgIC8qKgorICAgR2VuZXJh
dGUgYSBuZXcgc3RyZWFtIGJ5IHByb3ZpZGluZyBhIHNvdXJjZSBzdHJlYW0gYW5kIGEgZnVuY3Rp
b24gdGhhdCBjYW4KKyAgIGJlIHVzZWQgdG8gdHJhbnNmb3JtIHRoZSBzdHJlYW0ncyB2YWx1ZS4g
SW4gdGhlIGNhc2Ugb2YgYSBub24tc3RyZWFtIG9iamVjdCwKKyAgIHJldHVybnMgdGhlIHJlc3Vs
dCBvZiB0aGUgZnVuY3Rpb24uCisgIAorICAgVGhlIHZhbHVlIHRvIHRyYW5zZm9ybSB3b3VsZCB0
eXBpY2FsbHkgYmUgYXZhaWxhYmxlIHRvIHRoZSBmdW5jdGlvbiB5b3UgcGFzcworICAgdG8gYGNo
YWluKClgIHZpYSBzY29wZS4gRm9yIGV4YW1wbGU6CisgIAorICAgYGBgamF2YXNjcmlwdAorICAg
ICAgIHZhciBzb3VyY2UgPSAuLi47ICAvLyBzdHJlYW0gcmV0dXJuaW5nIGEgbnVtYmVyCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvciBhIG51bWVyaWMgKG5vbi1zdHJlYW0pIG9i
amVjdAorICAgICAgIHZhciByZXN1bHQgPSBjaGFpbihzb3VyY2UsIGZ1bmN0aW9uKCkgeworICAg
ICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9IHJlYWQoc291cmNlKTsKKyAgICAgICAgIHJldHVybiBj
dXJyZW50VmFsdWUgKyAxOworICAgICAgIH0pOworICAgYGBgCisgIAorICAgSW4gdGhlIGV4YW1w
bGUsIHJlc3VsdCBpcyBhIHN0cmVhbSBpZiBzb3VyY2UgaXMgYSBzdHJlYW0sIG9yIGEgbnVtYmVy
IG9mCisgICBzb3VyY2Ugd2FzIG51bWVyaWMuCisgIAorICAgQHByaXZhdGUKKyAgIEBmb3IgRW1i
ZXIuc3RyZWFtCisgICBAZnVuY3Rpb24gY2hhaW4KKyAgIEBwYXJhbSB7T2JqZWN0fFN0cmVhbX0g
dmFsdWUgQSBzdHJlYW0gb3Igbm9uLXN0cmVhbSBvYmplY3QuCisgICBAcGFyYW0ge0Z1bmN0aW9u
fSBmbiBGdW5jdGlvbiB0byBiZSBydW4gd2hlbiB0aGUgc3RyZWFtIHZhbHVlIGNoYW5nZXMsIG9y
IHRvCisgICAgICAgICAgICAgICAgICAgICAgICBiZSBydW4gb25jZSBpbiB0aGUgY2FzZSBvZiBh
IG5vbi1zdHJlYW0gb2JqZWN0LgorICAgQHJldHVybiB7T2JqZWN0fFN0cmVhbX0gSW4gdGhlIGNh
c2Ugb2YgYSBzdHJlYW0gYHZhbHVlYCBwYXJhbWV0ZXIsIGEgbmV3CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHJlYW0gdGhhdCB3aWxsIGJlIHVwZGF0ZWQgd2l0aCB0aGUgcmV0dXJuIHZh
bHVlIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcHJvdmlkZWQgZnVuY3Rpb24g
YGZuYC4gSW4gdGhlIGNhc2Ugb2YgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uLXN0
cmVhbSBvYmplY3QsIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHByb3ZpZGVkCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmdW5jdGlvbiBgZm5gLgorICAgKi8KKworICBmdW5jdGlvbiBjaGFp
bih2YWx1ZSwgZm4sIGxhYmVsKSB7CisgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ011c3Qg
Y2FsbCBjaGFpbiB3aXRoIGEgbGFiZWwnLCAhIWxhYmVsKTsKKyAgICBpZiAoaXNTdHJlYW0odmFs
dWUpKSB7CisgICAgICB2YXIgc3RyZWFtID0gbmV3IF9lbWJlck1ldGFsU3RyZWFtc1N0cmVhbS5T
dHJlYW0oZm4sIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIGxhYmVsICsgJygnICsgbGFi
ZWxGb3IodmFsdWUpICsgJyknOworICAgICAgfSk7CisgICAgICBzdHJlYW0uYWRkRGVwZW5kZW5j
eSh2YWx1ZSk7CisgICAgICByZXR1cm4gc3RyZWFtOworICAgIH0gZWxzZSB7CisgICAgICByZXR1
cm4gZm4oKTsKKyAgICB9CisgIH0KKworICBmdW5jdGlvbiBzZXRWYWx1ZShvYmplY3QsIHZhbHVl
KSB7CisgICAgaWYgKG9iamVjdCAmJiBvYmplY3RbX2VtYmVyTWV0YWxTdHJlYW1zU3RyZWFtLklT
X1NUUkVBTV0pIHsKKyAgICAgIG9iamVjdC5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgfQorICB9Cit9
KTsKK2VuaWZlZCgnZW1iZXItbWV0YWwvc3ltYm9sJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFs
L3V0aWxzJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbFV0aWxzKSB7CisgICd1c2Ug
c3RyaWN0JzsKKworICBleHBvcnRzLmRlZmF1bHQgPSBzeW1ib2w7CisKKyAgZnVuY3Rpb24gc3lt
Ym9sKGRlYnVnTmFtZSkgeworICAgIC8vIFRPRE86IEludmVzdGlnYXRlIHVzaW5nIHBsYXRmb3Jt
IHN5bWJvbHMsIGJ1dCB3ZSBkbyBub3QKKyAgICAvLyB3YW50IHRvIHJlcXVpcmUgbm9uLWVudW1l
cmFiaWxpdHkgZm9yIHRoaXMgQVBJLCB3aGljaAorICAgIC8vIHdvdWxkIGludHJvZHVjZSBhIGxh
cmdlIGNvc3QuCisKKyAgICByZXR1cm4gX2VtYmVyTWV0YWxVdGlscy5pbnRlcm4oZGVidWdOYW1l
ICsgJyBbaWQ9JyArIF9lbWJlck1ldGFsVXRpbHMuR1VJRF9LRVkgKyBNYXRoLmZsb29yKE1hdGgu
cmFuZG9tKCkgKiBuZXcgRGF0ZSgpKSArICddJyk7CisgIH0KK30pOworZW5pZmVkKCdlbWJlci1t
ZXRhbC90YWdzJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL21ldGEnLCAncmVxdWlyZSddLCBm
dW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxNZXRhLCBfcmVxdWlyZTIpIHsKKyAgJ3VzZSBz
dHJpY3QnOworCisgIGV4cG9ydHMudGFnRm9yID0gdGFnRm9yOworCisgIHZhciBoYXNHbGltbWVy
ID0gX3JlcXVpcmUyLmhhcygnZ2xpbW1lci1yZWZlcmVuY2UnKTsKKyAgdmFyIENPTlNUQU5UX1RB
RyA9IHVuZGVmaW5lZCwKKyAgICAgIENVUlJFTlRfVEFHID0gdW5kZWZpbmVkLAorICAgICAgRGly
dHlhYmxlVGFnID0gdW5kZWZpbmVkLAorICAgICAgbWFrZVRhZyA9IHVuZGVmaW5lZDsKKworICB2
YXIgbWFya09iamVjdEFzRGlydHkgPSB1bmRlZmluZWQ7CisKKyAgZXhwb3J0cy5tYXJrT2JqZWN0
QXNEaXJ0eSA9IG1hcmtPYmplY3RBc0RpcnR5OworCisgIGZ1bmN0aW9uIHRhZ0ZvcihvYmplY3Qs
IF9tZXRhKSB7CisgICAgaWYgKCFoYXNHbGltbWVyKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3Io
J0Nhbm5vdCBjYWxsIHRhZ0ZvciB3aXRob3V0IEdsaW1tZXInKTsKKyAgICB9CisKKyAgICBpZiAo
b2JqZWN0ICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnKSB7CisgICAgICB2YXIgbWV0YSA9
IF9tZXRhIHx8IF9lbWJlck1ldGFsTWV0YS5tZXRhKG9iamVjdCk7CisgICAgICByZXR1cm4gbWV0
YS53cml0YWJsZVRhZyhtYWtlVGFnKTsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIENPTlNU
QU5UX1RBRzsKKyAgICB9CisgIH0KKworICBpZiAoaGFzR2xpbW1lcikgeworICAgIHZhciBfcmVx
dWlyZSA9IF9yZXF1aXJlMi5kZWZhdWx0KCdnbGltbWVyLXJlZmVyZW5jZScpOworCisgICAgRGly
dHlhYmxlVGFnID0gX3JlcXVpcmUuRGlydHlhYmxlVGFnOworICAgIENPTlNUQU5UX1RBRyA9IF9y
ZXF1aXJlLkNPTlNUQU5UX1RBRzsKKyAgICBDVVJSRU5UX1RBRyA9IF9yZXF1aXJlLkNVUlJFTlRf
VEFHOworCisgICAgbWFrZVRhZyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgIHJldHVybiBuZXcgRGly
dHlhYmxlVGFnKCk7CisgICAgfTsKKworICAgIGV4cG9ydHMubWFya09iamVjdEFzRGlydHkgPSBt
YXJrT2JqZWN0QXNEaXJ0eSA9IGZ1bmN0aW9uIChtZXRhKSB7CisgICAgICB2YXIgdGFnID0gbWV0
YSAmJiBtZXRhLnJlYWRhYmxlVGFnKCkgfHwgQ1VSUkVOVF9UQUc7CisgICAgICB0YWcuZGlydHko
KTsKKyAgICB9OworICB9IGVsc2UgeworICAgIGV4cG9ydHMubWFya09iamVjdEFzRGlydHkgPSBt
YXJrT2JqZWN0QXNEaXJ0eSA9IGZ1bmN0aW9uICgpIHt9OworICB9Cit9KTsKK2VuaWZlZCgnZW1i
ZXItbWV0YWwvdXRpbHMnLCBbJ2V4cG9ydHMnXSwgZnVuY3Rpb24gKGV4cG9ydHMpIHsKKyAgJ25v
IHVzZSBzdHJpY3QnOworICAvLyBSZW1vdmUgInVzZSBzdHJpY3QiOyBmcm9tIHRyYW5zcGlsZWQg
bW9kdWxlIHVudGlsCisgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzgwMzggaXMgZml4ZWQKKworICAvKioKKyAgQG1vZHVsZSBlbWJlci1tZXRhbAorICAqLwor
CisgIC8qKgorICAgIFByZXZpb3VzbHkgd2UgdXNlZCBgRW1iZXIuJC51dWlkYCwgaG93ZXZlciBg
JC51dWlkYCBoYXMgYmVlbiByZW1vdmVkIGZyb20KKyAgICBqUXVlcnkgbWFzdGVyLiBXZSdsbCBq
dXN0IGJvb3RzdHJhcCBvdXIgb3duIHV1aWQgbm93LgorICAKKyAgICBAcHJpdmF0ZQorICAgIEBy
ZXR1cm4ge051bWJlcn0gdGhlIHV1aWQKKyAgKi8KKyAgZXhwb3J0cy51dWlkID0gdXVpZDsKKyAg
ZXhwb3J0cy5pbnRlcm4gPSBpbnRlcm47CisgIGV4cG9ydHMuZ2VuZXJhdGVHdWlkID0gZ2VuZXJh
dGVHdWlkOworICBleHBvcnRzLmd1aWRGb3IgPSBndWlkRm9yOworICBleHBvcnRzLndyYXAgPSB3
cmFwOworICBleHBvcnRzLnRyeUludm9rZSA9IHRyeUludm9rZTsKKyAgZXhwb3J0cy5tYWtlQXJy
YXkgPSBtYWtlQXJyYXk7CisgIGV4cG9ydHMuaW5zcGVjdCA9IGluc3BlY3Q7CisgIGV4cG9ydHMu
YXBwbHlTdHIgPSBhcHBseVN0cjsKKyAgZXhwb3J0cy5sb29rdXBEZXNjcmlwdG9yID0gbG9va3Vw
RGVzY3JpcHRvcjsKKyAgZXhwb3J0cy50b1N0cmluZyA9IHRvU3RyaW5nOworICB2YXIgX3V1aWQg
PSAwOworCisgIC8qKgorICAgIEdlbmVyYXRlcyBhIHVuaXZlcnNhbGx5IHVuaXF1ZSBpZGVudGlm
aWVyLiBUaGlzIG1ldGhvZAorICAgIGlzIHVzZWQgaW50ZXJuYWxseSBieSBFbWJlciBmb3IgYXNz
aXN0aW5nIHdpdGgKKyAgICB0aGUgZ2VuZXJhdGlvbiBvZiBHVUlEJ3MgYW5kIG90aGVyIHVuaXF1
ZSBpZGVudGlmaWVycy4KKyAgCisgICAgQHB1YmxpYworICAgIEByZXR1cm4ge051bWJlcn0gW2Rl
c2NyaXB0aW9uXQorICAgKi8KKworICBmdW5jdGlvbiB1dWlkKCkgeworICAgIHJldHVybiArK191
dWlkOworICB9CisKKyAgLyoqCisgICAgUHJlZml4IHVzZWQgZm9yIGd1aWRzIHRocm91Z2ggb3V0
IEVtYmVyLgorICAgIEBwcml2YXRlCisgICAgQHByb3BlcnR5IEdVSURfUFJFRklYCisgICAgQGZv
ciBFbWJlcgorICAgIEB0eXBlIFN0cmluZworICAgIEBmaW5hbAorICAqLworICB2YXIgR1VJRF9Q
UkVGSVggPSAnZW1iZXInOworCisgIC8vIFVzZWQgZm9yIGd1aWQgZ2VuZXJhdGlvbi4uLgorICB2
YXIgbnVtYmVyQ2FjaGUgPSBbXTsKKyAgdmFyIHN0cmluZ0NhY2hlID0ge307CisKKyAgLyoqCisg
ICAgU3Ryb25nbHkgaGludCBydW50aW1lcyB0byBpbnRlcm4gdGhlIHByb3ZpZGVkIHN0cmluZy4K
KyAgCisgICAgV2hlbiBkbyBJIG5lZWQgdG8gdXNlIHRoaXMgZnVuY3Rpb24/CisgIAorICAgIEZv
ciB0aGUgbW9zdCBwYXJ0LCBuZXZlci4gUHJlLW1hdHVyZSBvcHRpbWl6YXRpb24gaXMgYmFkLCBh
bmQgb2Z0ZW4gdGhlCisgICAgcnVudGltZSBkb2VzIGV4YWN0bHkgd2hhdCB5b3UgbmVlZCBpdCB0
bywgYW5kIG1vcmUgb2Z0ZW4gdGhlIHRyYWRlLW9mZiBpc24ndAorICAgIHdvcnRoIGl0LgorICAK
KyAgICBXaHk/CisgIAorICAgIFJ1bnRpbWVzIHN0b3JlIHN0cmluZ3MgaW4gYXQgbGVhc3QgMiBk
aWZmZXJlbnQgcmVwcmVzZW50YXRpb25zOgorICAgIFJvcGVzIGFuZCBTeW1ib2xzIChpbnRlcm5l
ZCBzdHJpbmdzKS4gVGhlIFJvcGUgcHJvdmlkZXMgYSBtZW1vcnkgZWZmaWNpZW50CisgICAgZGF0
YS1zdHJ1Y3R1cmUgZm9yIHN0cmluZ3MgY3JlYXRlZCBmcm9tIGNvbmNhdGVuYXRpb24gb3Igc29t
ZSBvdGhlciBzdHJpbmcKKyAgICBtYW5pcHVsYXRpb24gbGlrZSBzcGxpdHRpbmcuCisgIAorICAg
IFVuZm9ydHVuYXRlbHkgY2hlY2tpbmcgZXF1YWxpdHkgb2YgZGlmZmVyZW50IHJvcGVzIGNhbiBi
ZSBxdWl0ZSBjb3N0bHkgYXMKKyAgICBydW50aW1lcyBtdXN0IHJlc29ydCB0byBjbGV2ZXIgc3Ry
aW5nIGNvbXBhcmlzb24gYWxnb3JpdGhtcy4gVGhlc2UKKyAgICBhbGdvcml0aG1zIHR5cGljYWxs
eSBjb3N0IGluIHByb3BvcnRpb24gdG8gdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nLgorICAgIEx1
Y2tpbHksIHRoaXMgaXMgd2hlcmUgdGhlIFN5bWJvbHMgKGludGVybmVkIHN0cmluZ3MpIHNoaW5l
LiBBcyBTeW1ib2xzIGFyZQorICAgIHVuaXF1ZSBieSB0aGVpciBzdHJpbmcgY29udGVudCwgZXF1
YWxpdHkgY2hlY2tzIGNhbiBiZSBkb25lIGJ5IHBvaW50ZXIKKyAgICBjb21wYXJpc29uLgorICAK
KyAgICBIb3cgZG8gSSBrbm93IGlmIG15IHN0cmluZyBpcyBhIHJvcGUgb3Igc3ltYm9sPworICAK
KyAgICBUeXBpY2FsbHkgKHdhcm5pbmcgZ2VuZXJhbCBzd2VlcGluZyBzdGF0ZW1lbnQsIGJ1dCB0
cnV0aHkgaW4gcnVudGltZXMgYXQKKyAgICBwcmVzZW50KSBzdGF0aWMgc3RyaW5ncyBjcmVhdGVk
IGFzIHBhcnQgb2YgdGhlIEpTIHNvdXJjZSBhcmUgaW50ZXJuZWQuCisgICAgU3RyaW5ncyBvZnRl
biB1c2VkIGZvciBjb21wYXJpc29ucyBjYW4gYmUgaW50ZXJuZWQgYXQgcnVudGltZSBpZiBzb21l
CisgICAgY3JpdGVyaWEgYXJlIG1ldC4gIE9uZSBvZiB0aGVzZSBjcml0ZXJpYSBjYW4gYmUgdGhl
IHNpemUgb2YgdGhlIGVudGlyZSByb3BlLgorICAgIEZvciBleGFtcGxlLCBpbiBjaHJvbWUgMzgg
YSByb3BlIGxvbmdlciB0aGVuIDEyIGNoYXJhY3RlcnMgd2lsbCBub3QKKyAgICBpbnRlcm4sIG5v
ciB3aWxsIHNlZ21lbnRzIG9mIHRoYXQgcm9wZS4KKyAgCisgICAgU29tZSBudW1iZXJzOiBodHRw
Oi8vanNwZXJmLmNvbS9ldmFsLXZzLWtleXMvOAorICAKKyAgICBLbm93biBUcmlja+KEogorICAK
KyAgICBAcHJpdmF0ZQorICAgIEByZXR1cm4ge1N0cmluZ30gaW50ZXJuZWQgdmVyc2lvbiBvZiB0
aGUgcHJvdmlkZWQgc3RyaW5nCisgICovCisKKyAgZnVuY3Rpb24gaW50ZXJuKHN0cikgeworICAg
IHZhciBvYmogPSB7fTsKKyAgICBvYmpbc3RyXSA9IDE7CisgICAgZm9yICh2YXIga2V5IGluIG9i
aikgeworICAgICAgaWYgKGtleSA9PT0gc3RyKSB7CisgICAgICAgIHJldHVybiBrZXk7CisgICAg
ICB9CisgICAgfQorICAgIHJldHVybiBzdHI7CisgIH0KKworICAvKioKKyAgICBBIHVuaXF1ZSBr
ZXkgdXNlZCB0byBhc3NpZ24gZ3VpZHMgYW5kIG90aGVyIHByaXZhdGUgbWV0YWRhdGEgdG8gb2Jq
ZWN0cy4KKyAgICBJZiB5b3UgaW5zcGVjdCBhbiBvYmplY3QgaW4geW91ciBicm93c2VyIGRlYnVn
Z2VyIHlvdSB3aWxsIG9mdGVuIHNlZSB0aGVzZS4KKyAgICBUaGV5IGNhbiBiZSBzYWZlbHkgaWdu
b3JlZC4KKyAgCisgICAgT24gYnJvd3NlcnMgdGhhdCBzdXBwb3J0IGl0LCB0aGVzZSBwcm9wZXJ0
aWVzIGFyZSBhZGRlZCB3aXRoIGVudW1lcmF0aW9uCisgICAgZGlzYWJsZWQgc28gdGhleSB3b24n
dCBzaG93IHVwIHdoZW4geW91IGl0ZXJhdGUgb3ZlciB5b3VyIHByb3BlcnRpZXMuCisgIAorICAg
IEBwcml2YXRlCisgICAgQHByb3BlcnR5IEdVSURfS0VZCisgICAgQGZvciBFbWJlcgorICAgIEB0
eXBlIFN0cmluZworICAgIEBmaW5hbAorICAqLworICB2YXIgR1VJRF9LRVkgPSBpbnRlcm4oJ19f
ZW1iZXInICsgK25ldyBEYXRlKCkpOworCisgIHZhciBHVUlEX0RFU0MgPSB7CisgICAgd3JpdGFi
bGU6IHRydWUsCisgICAgY29uZmlndXJhYmxlOiB0cnVlLAorICAgIGVudW1lcmFibGU6IGZhbHNl
LAorICAgIHZhbHVlOiBudWxsCisgIH07CisKKyAgZXhwb3J0cy5HVUlEX0RFU0MgPSBHVUlEX0RF
U0M7CisgIHZhciBudWxsRGVzY3JpcHRvciA9IHsKKyAgICBjb25maWd1cmFibGU6IHRydWUsCisg
ICAgd3JpdGFibGU6IHRydWUsCisgICAgZW51bWVyYWJsZTogZmFsc2UsCisgICAgdmFsdWU6IG51
bGwKKyAgfTsKKworICB2YXIgR1VJRF9LRVlfUFJPUEVSVFkgPSB7CisgICAgbmFtZTogR1VJRF9L
RVksCisgICAgZGVzY3JpcHRvcjogbnVsbERlc2NyaXB0b3IKKyAgfTsKKworICBleHBvcnRzLkdV
SURfS0VZX1BST1BFUlRZID0gR1VJRF9LRVlfUFJPUEVSVFk7CisgIC8qKgorICAgIEdlbmVyYXRl
cyBhIG5ldyBndWlkLCBvcHRpb25hbGx5IHNhdmluZyB0aGUgZ3VpZCB0byB0aGUgb2JqZWN0IHRo
YXQgeW91CisgICAgcGFzcyBpbi4gWW91IHdpbGwgcmFyZWx5IG5lZWQgdG8gdXNlIHRoaXMgbWV0
aG9kLiBJbnN0ZWFkIHlvdSBzaG91bGQKKyAgICBjYWxsIGBFbWJlci5ndWlkRm9yKG9iailgLCB3
aGljaCByZXR1cm4gYW4gZXhpc3RpbmcgZ3VpZCBpZiBhdmFpbGFibGUuCisgIAorICAgIEBwcml2
YXRlCisgICAgQG1ldGhvZCBnZW5lcmF0ZUd1aWQKKyAgICBAZm9yIEVtYmVyCisgICAgQHBhcmFt
IHtPYmplY3R9IFtvYmpdIE9iamVjdCB0aGUgZ3VpZCB3aWxsIGJlIHVzZWQgZm9yLiBJZiBwYXNz
ZWQgaW4sIHRoZSBndWlkIHdpbGwKKyAgICAgIGJlIHNhdmVkIG9uIHRoZSBvYmplY3QgYW5kIHJl
dXNlZCB3aGVuZXZlciB5b3UgcGFzcyB0aGUgc2FtZSBvYmplY3QKKyAgICAgIGFnYWluLgorICAK
KyAgICAgIElmIG5vIG9iamVjdCBpcyBwYXNzZWQsIGp1c3QgZ2VuZXJhdGUgYSBuZXcgZ3VpZC4K
KyAgICBAcGFyYW0ge1N0cmluZ30gW3ByZWZpeF0gUHJlZml4IHRvIHBsYWNlIGluIGZyb250IG9m
IHRoZSBndWlkLiBVc2VmdWwgd2hlbiB5b3Ugd2FudCB0bworICAgICAgc2VwYXJhdGUgdGhlIGd1
aWQgaW50byBzZXBhcmF0ZSBuYW1lc3BhY2VzLgorICAgIEByZXR1cm4ge1N0cmluZ30gdGhlIGd1
aWQKKyAgKi8KKworICBmdW5jdGlvbiBnZW5lcmF0ZUd1aWQob2JqLCBwcmVmaXgpIHsKKyAgICBp
ZiAoIXByZWZpeCkgeworICAgICAgcHJlZml4ID0gR1VJRF9QUkVGSVg7CisgICAgfQorCisgICAg
dmFyIHJldCA9IHByZWZpeCArIHV1aWQoKTsKKyAgICBpZiAob2JqKSB7CisgICAgICBpZiAob2Jq
W0dVSURfS0VZXSA9PT0gbnVsbCkgeworICAgICAgICBvYmpbR1VJRF9LRVldID0gcmV0OworICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgR1VJRF9ERVNDLnZhbHVlID0gcmV0OworICAgICAgICBpZiAo
b2JqLl9fZGVmaW5lTm9uRW51bWVyYWJsZSkgeworICAgICAgICAgIG9iai5fX2RlZmluZU5vbkVu
dW1lcmFibGUoR1VJRF9LRVlfUFJPUEVSVFkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIEdVSURfS0VZLCBHVUlEX0RFU0MpOworICAgICAg
ICB9CisgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXQ7CisgIH0KKworICAvKioKKyAgICBS
ZXR1cm5zIGEgdW5pcXVlIGlkIGZvciB0aGUgb2JqZWN0LiBJZiB0aGUgb2JqZWN0IGRvZXMgbm90
IHlldCBoYXZlIGEgZ3VpZCwKKyAgICBvbmUgd2lsbCBiZSBhc3NpZ25lZCB0byBpdC4gWW91IGNh
biBjYWxsIHRoaXMgb24gYW55IG9iamVjdCwKKyAgICBgRW1iZXIuT2JqZWN0YC1iYXNlZCBvciBu
b3QsIGJ1dCBiZSBhd2FyZSB0aGF0IGl0IHdpbGwgYWRkIGEgYF9ndWlkYAorICAgIHByb3BlcnR5
LgorICAKKyAgICBZb3UgY2FuIGFsc28gdXNlIHRoaXMgbWV0aG9kIG9uIERPTSBFbGVtZW50IG9i
amVjdHMuCisgIAorICAgIEBwdWJsaWMKKyAgICBAbWV0aG9kIGd1aWRGb3IKKyAgICBAZm9yIEVt
YmVyCisgICAgQHBhcmFtIHtPYmplY3R9IG9iaiBhbnkgb2JqZWN0LCBzdHJpbmcsIG51bWJlciwg
RWxlbWVudCwgb3IgcHJpbWl0aXZlCisgICAgQHJldHVybiB7U3RyaW5nfSB0aGUgdW5pcXVlIGd1
aWQgZm9yIHRoaXMgaW5zdGFuY2UuCisgICovCisKKyAgZnVuY3Rpb24gZ3VpZEZvcihvYmopIHsK
KyAgICBpZiAob2JqICYmIG9ialtHVUlEX0tFWV0pIHsKKyAgICAgIHJldHVybiBvYmpbR1VJRF9L
RVldOworICAgIH0KKworICAgIC8vIHNwZWNpYWwgY2FzZXMgd2hlcmUgd2UgZG9uJ3Qgd2FudCB0
byBhZGQgYSBrZXkgdG8gb2JqZWN0CisgICAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7CisgICAg
ICByZXR1cm4gJyh1bmRlZmluZWQpJzsKKyAgICB9CisKKyAgICBpZiAob2JqID09PSBudWxsKSB7
CisgICAgICByZXR1cm4gJyhudWxsKSc7CisgICAgfQorCisgICAgdmFyIHJldDsKKyAgICB2YXIg
dHlwZSA9IHR5cGVvZiBvYmo7CisKKyAgICAvLyBEb24ndCBhbGxvdyBwcm90b3R5cGUgY2hhbmdl
cyB0byBTdHJpbmcgZXRjLiB0byBjaGFuZ2UgdGhlIGd1aWRGb3IKKyAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICAgIGNhc2UgJ251bWJlcic6CisgICAgICAgIHJldCA9IG51bWJlckNhY2hlW29ial07
CisKKyAgICAgICAgaWYgKCFyZXQpIHsKKyAgICAgICAgICByZXQgPSBudW1iZXJDYWNoZVtvYmpd
ID0gJ251JyArIG9iajsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICAg
IGNhc2UgJ3N0cmluZyc6CisgICAgICAgIHJldCA9IHN0cmluZ0NhY2hlW29ial07CisKKyAgICAg
ICAgaWYgKCFyZXQpIHsKKyAgICAgICAgICByZXQgPSBzdHJpbmdDYWNoZVtvYmpdID0gJ3N0JyAr
IHV1aWQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICAgIGNhc2Ug
J2Jvb2xlYW4nOgorICAgICAgICByZXR1cm4gb2JqID8gJyh0cnVlKScgOiAnKGZhbHNlKSc7CisK
KyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGlmIChvYmogPT09IE9iamVjdCkgeworICAgICAgICAg
IHJldHVybiAnKE9iamVjdCknOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG9iaiA9PT0gQXJy
YXkpIHsKKyAgICAgICAgICByZXR1cm4gJyhBcnJheSknOworICAgICAgICB9CisKKyAgICAgICAg
cmV0ID0gR1VJRF9QUkVGSVggKyB1dWlkKCk7CisKKyAgICAgICAgaWYgKG9ialtHVUlEX0tFWV0g
PT09IG51bGwpIHsKKyAgICAgICAgICBvYmpbR1VJRF9LRVldID0gcmV0OworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgIEdVSURfREVTQy52YWx1ZSA9IHJldDsKKworICAgICAgICAgIGlmIChv
YmouX19kZWZpbmVOb25FbnVtZXJhYmxlKSB7CisgICAgICAgICAgICBvYmouX19kZWZpbmVOb25F
bnVtZXJhYmxlKEdVSURfS0VZX1BST1BFUlRZKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgR1VJRF9LRVksIEdVSURfREVTQyk7Cisg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorICB9CisK
KyAgdmFyIEhBU19TVVBFUl9QQVRURVJOID0gL1wuKF9zdXBlcnxjYWxsXCh0aGlzfGFwcGx5XCh0
aGlzKS87CisgIHZhciBmblRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nOwor
CisgIHZhciBjaGVja0hhc1N1cGVyID0gKGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgc291cmNlQXZh
aWxhYmxlID0gZm5Ub1N0cmluZy5jYWxsKGZ1bmN0aW9uICgpIHsKKyAgICAgIHJldHVybiB0aGlz
OworICAgIH0pLmluZGV4T2YoJ3JldHVybiB0aGlzJykgPiAtMTsKKworICAgIGlmIChzb3VyY2VB
dmFpbGFibGUpIHsKKyAgICAgIHJldHVybiBmdW5jdGlvbiBjaGVja0hhc1N1cGVyKGZ1bmMpIHsK
KyAgICAgICAgcmV0dXJuIEhBU19TVVBFUl9QQVRURVJOLnRlc3QoZm5Ub1N0cmluZy5jYWxsKGZ1
bmMpKTsKKyAgICAgIH07CisgICAgfQorCisgICAgcmV0dXJuIGZ1bmN0aW9uIGNoZWNrSGFzU3Vw
ZXIoKSB7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICB9KSgpOworCisgIGV4cG9ydHMu
Y2hlY2tIYXNTdXBlciA9IGNoZWNrSGFzU3VwZXI7CisgIGZ1bmN0aW9uIFJPT1QoKSB7fQorICBS
T09ULl9faGFzU3VwZXIgPSBmYWxzZTsKKworICBmdW5jdGlvbiBoYXNTdXBlcihmdW5jKSB7Cisg
ICAgaWYgKGZ1bmMuX19oYXNTdXBlciA9PT0gdW5kZWZpbmVkKSB7CisgICAgICBmdW5jLl9faGFz
U3VwZXIgPSBjaGVja0hhc1N1cGVyKGZ1bmMpOworICAgIH0KKyAgICByZXR1cm4gZnVuYy5fX2hh
c1N1cGVyOworICB9CisKKyAgLyoqCisgICAgV3JhcHMgdGhlIHBhc3NlZCBmdW5jdGlvbiBzbyB0
aGF0IGB0aGlzLl9zdXBlcmAgd2lsbCBwb2ludCB0byB0aGUgc3VwZXJGdW5jCisgICAgd2hlbiB0
aGUgZnVuY3Rpb24gaXMgaW52b2tlZC4gVGhpcyBpcyB0aGUgcHJpbWl0aXZlIHdlIHVzZSB0byBp
bXBsZW1lbnQKKyAgICBjYWxscyB0byBzdXBlci4KKyAgCisgICAgQHByaXZhdGUKKyAgICBAbWV0
aG9kIHdyYXAKKyAgICBAZm9yIEVtYmVyCisgICAgQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUg
ZnVuY3Rpb24gdG8gY2FsbAorICAgIEBwYXJhbSB7RnVuY3Rpb259IHN1cGVyRnVuYyBUaGUgc3Vw
ZXIgZnVuY3Rpb24uCisgICAgQHJldHVybiB7RnVuY3Rpb259IHdyYXBwZWQgZnVuY3Rpb24uCisg
ICovCisKKyAgZnVuY3Rpb24gd3JhcChmdW5jLCBzdXBlckZ1bmMpIHsKKyAgICBpZiAoIWhhc1N1
cGVyKGZ1bmMpKSB7CisgICAgICByZXR1cm4gZnVuYzsKKyAgICB9CisgICAgLy8gZW5zdXJlIGFu
IHVud3JhcHBlZCBzdXBlciB0aGF0IGNhbGxzIF9zdXBlciBpcyB3cmFwcGVkIHdpdGggYSB0ZXJt
aW5hbCBfc3VwZXIKKyAgICBpZiAoIXN1cGVyRnVuYy53cmFwcGVkRnVuY3Rpb24gJiYgaGFzU3Vw
ZXIoc3VwZXJGdW5jKSkgeworICAgICAgcmV0dXJuIF93cmFwKGZ1bmMsIF93cmFwKHN1cGVyRnVu
YywgUk9PVCkpOworICAgIH0KKyAgICByZXR1cm4gX3dyYXAoZnVuYywgc3VwZXJGdW5jKTsKKyAg
fQorCisgIGZ1bmN0aW9uIF93cmFwKGZ1bmMsIHN1cGVyRnVuYykgeworICAgIGZ1bmN0aW9uIHN1
cGVyV3JhcHBlcigpIHsKKyAgICAgIHZhciBvcmlnID0gdGhpcy5fc3VwZXI7CisgICAgICB0aGlz
Ll9zdXBlciA9IHN1cGVyRnVuYzsKKyAgICAgIHZhciByZXQgPSBmdW5jLmFwcGx5KHRoaXMsIGFy
Z3VtZW50cyk7CisgICAgICB0aGlzLl9zdXBlciA9IG9yaWc7CisgICAgICByZXR1cm4gcmV0Owor
ICAgIH0KKworICAgIHN1cGVyV3JhcHBlci53cmFwcGVkRnVuY3Rpb24gPSBmdW5jOworICAgIHN1
cGVyV3JhcHBlci5fX2VtYmVyX29ic2VydmVzX18gPSBmdW5jLl9fZW1iZXJfb2JzZXJ2ZXNfXzsK
KyAgICBzdXBlcldyYXBwZXIuX19lbWJlcl9vYnNlcnZlc0JlZm9yZV9fID0gZnVuYy5fX2VtYmVy
X29ic2VydmVzQmVmb3JlX187CisgICAgc3VwZXJXcmFwcGVyLl9fZW1iZXJfbGlzdGVuc19fID0g
ZnVuYy5fX2VtYmVyX2xpc3RlbnNfXzsKKworICAgIHJldHVybiBzdXBlcldyYXBwZXI7CisgIH0K
KworICAvKioKKyAgICBDaGVja3MgdG8gc2VlIGlmIHRoZSBgbWV0aG9kTmFtZWAgZXhpc3RzIG9u
IHRoZSBgb2JqYC4KKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIHZhciBmb28gPSB7IGJhcjog
ZnVuY3Rpb24oKSB7IHJldHVybiAnYmFyJzsgfSwgYmF6OiBudWxsIH07CisgIAorICAgIEVtYmVy
LmNhbkludm9rZShmb28sICdiYXInKTsgLy8gdHJ1ZQorICAgIEVtYmVyLmNhbkludm9rZShmb28s
ICdiYXonKTsgLy8gZmFsc2UKKyAgICBFbWJlci5jYW5JbnZva2UoZm9vLCAnYmF0Jyk7IC8vIGZh
bHNlCisgICAgYGBgCisgIAorICAgIEBtZXRob2QgY2FuSW52b2tlCisgICAgQGZvciBFbWJlcgor
ICAgIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byBjaGVjayBmb3IgdGhlIG1ldGhv
ZAorICAgIEBwYXJhbSB7U3RyaW5nfSBtZXRob2ROYW1lIFRoZSBtZXRob2QgbmFtZSB0byBjaGVj
ayBmb3IKKyAgICBAcmV0dXJuIHtCb29sZWFufQorICAgIEBwcml2YXRlCisgICovCisgIGZ1bmN0
aW9uIGNhbkludm9rZShvYmosIG1ldGhvZE5hbWUpIHsKKyAgICByZXR1cm4gISEob2JqICYmIHR5
cGVvZiBvYmpbbWV0aG9kTmFtZV0gPT09ICdmdW5jdGlvbicpOworICB9CisKKyAgLyoqCisgICAg
Q2hlY2tzIHRvIHNlZSBpZiB0aGUgYG1ldGhvZE5hbWVgIGV4aXN0cyBvbiB0aGUgYG9iamAsCisg
ICAgYW5kIGlmIGl0IGRvZXMsIGludm9rZXMgaXQgd2l0aCB0aGUgYXJndW1lbnRzIHBhc3NlZC4K
KyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIHZhciBkID0gbmV3IERhdGUoJzAzLzE1LzIwMTMn
KTsKKyAgCisgICAgRW1iZXIudHJ5SW52b2tlKGQsICdnZXRUaW1lJyk7ICAgICAgICAgICAgICAv
LyAxMzYzMzIwMDAwMDAwCisgICAgRW1iZXIudHJ5SW52b2tlKGQsICdzZXRGdWxsWWVhcicsIFsy
MDE0XSk7ICAvLyAxMzk0ODU2MDAwMDAwCisgICAgRW1iZXIudHJ5SW52b2tlKGQsICdub1N1Y2hN
ZXRob2QnLCBbMjAxNF0pOyAvLyB1bmRlZmluZWQKKyAgICBgYGAKKyAgCisgICAgQG1ldGhvZCB0
cnlJbnZva2UKKyAgICBAZm9yIEVtYmVyCisgICAgQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2Jq
ZWN0IHRvIGNoZWNrIGZvciB0aGUgbWV0aG9kCisgICAgQHBhcmFtIHtTdHJpbmd9IG1ldGhvZE5h
bWUgVGhlIG1ldGhvZCBuYW1lIHRvIGNoZWNrIGZvcgorICAgIEBwYXJhbSB7QXJyYXl9IFthcmdz
XSBUaGUgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIG1ldGhvZAorICAgIEByZXR1cm4geyp9IHRo
ZSByZXR1cm4gdmFsdWUgb2YgdGhlIGludm9rZWQgbWV0aG9kIG9yIHVuZGVmaW5lZCBpZiBpdCBj
YW5ub3QgYmUgaW52b2tlZAorICAgIEBwdWJsaWMKKyAgKi8KKworICBmdW5jdGlvbiB0cnlJbnZv
a2Uob2JqLCBtZXRob2ROYW1lLCBhcmdzKSB7CisgICAgaWYgKGNhbkludm9rZShvYmosIG1ldGhv
ZE5hbWUpKSB7CisgICAgICByZXR1cm4gYXJncyA/IGFwcGx5U3RyKG9iaiwgbWV0aG9kTmFtZSwg
YXJncykgOiBhcHBseVN0cihvYmosIG1ldGhvZE5hbWUpOworICAgIH0KKyAgfQorCisgIC8vIC4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyAgLy8gVFlQSU5HICYgQVJS
QVkgTUVTU0FHSU5HCisgIC8vCisKKyAgdmFyIG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnByb3Rv
dHlwZS50b1N0cmluZzsKKworICAvKioKKyAgICBGb3JjZXMgdGhlIHBhc3NlZCBvYmplY3QgdG8g
YmUgcGFydCBvZiBhbiBhcnJheS4gSWYgdGhlIG9iamVjdCBpcyBhbHJlYWR5CisgICAgYW4gYXJy
YXksIGl0IHdpbGwgcmV0dXJuIHRoZSBvYmplY3QuIE90aGVyd2lzZSwgaXQgd2lsbCBhZGQgdGhl
IG9iamVjdCB0bworICAgIGFuIGFycmF5LiBJZiBvYmogaXMgYG51bGxgIG9yIGB1bmRlZmluZWRg
LCBpdCB3aWxsIHJldHVybiBhbiBlbXB0eSBhcnJheS4KKyAgCisgICAgYGBgamF2YXNjcmlwdAor
ICAgIEVtYmVyLm1ha2VBcnJheSgpOyAgICAgICAgICAgIC8vIFtdCisgICAgRW1iZXIubWFrZUFy
cmF5KG51bGwpOyAgICAgICAgLy8gW10KKyAgICBFbWJlci5tYWtlQXJyYXkodW5kZWZpbmVkKTsg
ICAvLyBbXQorICAgIEVtYmVyLm1ha2VBcnJheSgnbGluZHNheScpOyAgIC8vIFsnbGluZHNheSdd
CisgICAgRW1iZXIubWFrZUFycmF5KFsxLCAyLCA0Ml0pOyAgLy8gWzEsIDIsIDQyXQorICAKKyAg
ICB2YXIgY29udHJvbGxlciA9IEVtYmVyLkFycmF5UHJveHkuY3JlYXRlKHsgY29udGVudDogW10g
fSk7CisgIAorICAgIEVtYmVyLm1ha2VBcnJheShjb250cm9sbGVyKSA9PT0gY29udHJvbGxlcjsg
IC8vIHRydWUKKyAgICBgYGAKKyAgCisgICAgQG1ldGhvZCBtYWtlQXJyYXkKKyAgICBAZm9yIEVt
YmVyCisgICAgQHBhcmFtIHtPYmplY3R9IG9iaiB0aGUgb2JqZWN0CisgICAgQHJldHVybiB7QXJy
YXl9CisgICAgQHByaXZhdGUKKyAgKi8KKworICBmdW5jdGlvbiBtYWtlQXJyYXkob2JqKSB7Cisg
ICAgaWYgKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHVuZGVmaW5lZCkgeworICAgICAgcmV0dXJu
IFtdOworICAgIH0KKyAgICByZXR1cm4gQXJyYXkuaXNBcnJheShvYmopID8gb2JqIDogW29ial07
CisgIH0KKworICAvKioKKyAgICBDb252ZW5pZW5jZSBtZXRob2QgdG8gaW5zcGVjdCBhbiBvYmpl
Y3QuIFRoaXMgbWV0aG9kIHdpbGwgYXR0ZW1wdCB0bworICAgIGNvbnZlcnQgdGhlIG9iamVjdCBp
bnRvIGEgdXNlZnVsIHN0cmluZyBkZXNjcmlwdGlvbi4KKyAgCisgICAgSXQgaXMgYSBwcmV0dHkg
c2ltcGxlIGltcGxlbWVudGF0aW9uLiBJZiB5b3Ugd2FudCBzb21ldGhpbmcgbW9yZSByb2J1c3Qs
CisgICAgdXNlIHNvbWV0aGluZyBsaWtlIEpTRHVtcDogaHR0cHM6Ly9naXRodWIuY29tL05WL2pz
RHVtcAorICAKKyAgICBAbWV0aG9kIGluc3BlY3QKKyAgICBAZm9yIEVtYmVyCisgICAgQHBhcmFt
IHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHlvdSB3YW50IHRvIGluc3BlY3QuCisgICAgQHJldHVy
biB7U3RyaW5nfSBBIGRlc2NyaXB0aW9uIG9mIHRoZSBvYmplY3QKKyAgICBAc2luY2UgMS40LjAK
KyAgICBAcHJpdmF0ZQorICAqLworCisgIGZ1bmN0aW9uIGluc3BlY3Qob2JqKSB7CisgICAgaWYg
KG9iaiA9PT0gbnVsbCkgeworICAgICAgcmV0dXJuICdudWxsJzsKKyAgICB9CisgICAgaWYgKG9i
aiA9PT0gdW5kZWZpbmVkKSB7CisgICAgICByZXR1cm4gJ3VuZGVmaW5lZCc7CisgICAgfQorICAg
IGlmIChBcnJheS5pc0FycmF5KG9iaikpIHsKKyAgICAgIHJldHVybiAnWycgKyBvYmogKyAnXSc7
CisgICAgfQorICAgIC8vIGZvciBub24gb2JqZWN0cworICAgIHZhciB0eXBlID0gdHlwZW9mIG9i
ajsKKyAgICBpZiAodHlwZSAhPT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gJ3N5bWJvbCcpIHsKKyAg
ICAgIHJldHVybiAnJyArIG9iajsKKyAgICB9CisgICAgLy8gb3ZlcnJpZGRlbiB0b1N0cmluZwor
ICAgIGlmICh0eXBlb2Ygb2JqLnRvU3RyaW5nID09PSAnZnVuY3Rpb24nICYmIG9iai50b1N0cmlu
ZyAhPT0gb2JqZWN0VG9TdHJpbmcpIHsKKyAgICAgIHJldHVybiBvYmoudG9TdHJpbmcoKTsKKyAg
ICB9CisKKyAgICAvLyBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nID09PSB7fS50b1N0cmluZwor
ICAgIHZhciB2OworICAgIHZhciByZXQgPSBbXTsKKyAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7
CisgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHsKKyAgICAgICAgdiA9IG9ialtr
ZXldOworICAgICAgICBpZiAodiA9PT0gJ3RvU3RyaW5nJykgeworICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICB9IC8vIGlnbm9yZSB1c2VsZXNzIGl0ZW1zCisgICAgICAgIGlmICh0eXBlb2Yg
diA9PT0gJ2Z1bmN0aW9uJykgeworICAgICAgICAgIHYgPSAnZnVuY3Rpb24oKSB7IC4uLiB9JzsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICh2ICYmIHR5cGVvZiB2LnRvU3RyaW5nICE9PSAnZnVu
Y3Rpb24nKSB7CisgICAgICAgICAgcmV0LnB1c2goa2V5ICsgJzogJyArIG9iamVjdFRvU3RyaW5n
LmNhbGwodikpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHJldC5wdXNoKGtleSArICc6
ICcgKyB2KTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gJ3snICsgcmV0
LmpvaW4oJywgJykgKyAnfSc7CisgIH0KKworICAvKioKKyAgICBAcGFyYW0ge09iamVjdH0gdCB0
YXJnZXQKKyAgICBAcGFyYW0ge1N0cmluZ30gbSBtZXRob2QKKyAgICBAcGFyYW0ge0FycmF5fSBh
IGFyZ3MKKyAgICBAcHJpdmF0ZQorICAqLworCisgIGZ1bmN0aW9uIGFwcGx5U3RyKHQsIG0sIGEp
IHsKKyAgICB2YXIgbCA9IGEgJiYgYS5sZW5ndGg7CisgICAgaWYgKCFhIHx8ICFsKSB7CisgICAg
ICByZXR1cm4gdFttXSgpOworICAgIH0KKyAgICBzd2l0Y2ggKGwpIHsKKyAgICAgIGNhc2UgMToK
KyAgICAgICAgcmV0dXJuIHRbbV0oYVswXSk7CisgICAgICBjYXNlIDI6CisgICAgICAgIHJldHVy
biB0W21dKGFbMF0sIGFbMV0pOworICAgICAgY2FzZSAzOgorICAgICAgICByZXR1cm4gdFttXShh
WzBdLCBhWzFdLCBhWzJdKTsKKyAgICAgIGNhc2UgNDoKKyAgICAgICAgcmV0dXJuIHRbbV0oYVsw
XSwgYVsxXSwgYVsyXSwgYVszXSk7CisgICAgICBjYXNlIDU6CisgICAgICAgIHJldHVybiB0W21d
KGFbMF0sIGFbMV0sIGFbMl0sIGFbM10sIGFbNF0pOworICAgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuIHRbbV0uYXBwbHkodCwgYSk7CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gbG9va3Vw
RGVzY3JpcHRvcihvYmosIGtleU5hbWUpIHsKKyAgICB2YXIgY3VycmVudCA9IG9iajsKKyAgICB3
aGlsZSAoY3VycmVudCkgeworICAgICAgdmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKGN1cnJlbnQsIGtleU5hbWUpOworCisgICAgICBpZiAoZGVzY3JpcHRv
cikgeworICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjsKKyAgICAgIH0KKworICAgICAgY3VycmVu
dCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjdXJyZW50KTsKKyAgICB9CisKKyAgICByZXR1cm4g
bnVsbDsKKyAgfQorCisgIC8vIEEgYHRvU3RyaW5nYCB1dGlsIGZ1bmN0aW9uIHRoYXQgc3VwcG9y
dHMgb2JqZWN0cyB3aXRob3V0IGEgYHRvU3RyaW5nYAorICAvLyBtZXRob2QsIGUuZy4gYW4gb2Jq
ZWN0IGNyZWF0ZWQgd2l0aCBgT2JqZWN0LmNyZWF0ZShudWxsKWAuCisKKyAgZnVuY3Rpb24gdG9T
dHJpbmcob2JqKSB7CisgICAgaWYgKG9iaiAmJiBvYmoudG9TdHJpbmcpIHsKKyAgICAgIHJldHVy
biBvYmoudG9TdHJpbmcoKTsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIG9iamVjdFRvU3Ry
aW5nLmNhbGwob2JqKTsKKyAgICB9CisgIH0KKworICBleHBvcnRzLkdVSURfS0VZID0gR1VJRF9L
RVk7CisgIGV4cG9ydHMubWFrZUFycmF5ID0gbWFrZUFycmF5OworICBleHBvcnRzLmNhbkludm9r
ZSA9IGNhbkludm9rZTsKK30pOworZW5pZmVkKCdlbWJlci1tZXRhbC93YXRjaF9rZXknLCBbJ2V4
cG9ydHMnLCAnZW1iZXItbWV0YWwvZmVhdHVyZXMnLCAnZW1iZXItbWV0YWwvbWV0YScsICdlbWJl
ci1tZXRhbC9wcm9wZXJ0aWVzJywgJ2VtYmVyLW1ldGFsL3V0aWxzJ10sIGZ1bmN0aW9uIChleHBv
cnRzLCBfZW1iZXJNZXRhbEZlYXR1cmVzLCBfZW1iZXJNZXRhbE1ldGEsIF9lbWJlck1ldGFsUHJv
cGVydGllcywgX2VtYmVyTWV0YWxVdGlscykgeworICAndXNlIHN0cmljdCc7CisKKyAgZXhwb3J0
cy53YXRjaEtleSA9IHdhdGNoS2V5OworICBleHBvcnRzLnVud2F0Y2hLZXkgPSB1bndhdGNoS2V5
OworCisgIHZhciBoYW5kbGVNYW5kYXRvcnlTZXR0ZXIgPSB1bmRlZmluZWQ7CisKKyAgZnVuY3Rp
b24gd2F0Y2hLZXkob2JqLCBrZXlOYW1lLCBtZXRhKSB7CisgICAgLy8gY2FuJ3Qgd2F0Y2ggbGVu
Z3RoIG9uIEFycmF5IC0gaXQgaXMgc3BlY2lhbC4uLgorICAgIGlmIChrZXlOYW1lID09PSAnbGVu
Z3RoJyAmJiBBcnJheS5pc0FycmF5KG9iaikpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICB2YXIgbSA9IG1ldGEgfHwgX2VtYmVyTWV0YWxNZXRhLm1ldGEob2JqKTsKKworICAgIC8vIGFj
dGl2YXRlIHdhdGNoaW5nIGZpcnN0IHRpbWUKKyAgICBpZiAoIW0ucGVla1dhdGNoaW5nKGtleU5h
bWUpKSB7CisgICAgICBtLndyaXRlV2F0Y2hpbmcoa2V5TmFtZSwgMSk7CisKKyAgICAgIHZhciBw
b3NzaWJsZURlc2MgPSBvYmpba2V5TmFtZV07CisgICAgICB2YXIgZGVzYyA9IHBvc3NpYmxlRGVz
YyAhPT0gbnVsbCAmJiB0eXBlb2YgcG9zc2libGVEZXNjID09PSAnb2JqZWN0JyAmJiBwb3NzaWJs
ZURlc2MuaXNEZXNjcmlwdG9yID8gcG9zc2libGVEZXNjIDogdW5kZWZpbmVkOworICAgICAgaWYg
KGRlc2MgJiYgZGVzYy53aWxsV2F0Y2gpIHsKKyAgICAgICAgZGVzYy53aWxsV2F0Y2gob2JqLCBr
ZXlOYW1lKTsKKyAgICAgIH0KKworICAgICAgaWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiBvYmou
d2lsbFdhdGNoUHJvcGVydHkpIHsKKyAgICAgICAgb2JqLndpbGxXYXRjaFByb3BlcnR5KGtleU5h
bWUpOworICAgICAgfQorCisgICAgICAvLyBOT1RFOiB0aGlzIGlzIGRyb3BwZWQgZm9yIHByb2Qg
KyBtaW5pZmllZCBidWlsZHMKKyAgICAgIGhhbmRsZU1hbmRhdG9yeVNldHRlcihtLCBvYmosIGtl
eU5hbWUpOworICAgIH0gZWxzZSB7CisgICAgICBtLndyaXRlV2F0Y2hpbmcoa2V5TmFtZSwgKG0u
cGVla1dhdGNoaW5nKGtleU5hbWUpIHx8IDApICsgMSk7CisgICAgfQorICB9CisKKyAgLy8gRnV0
dXJlIHRyYXZlbGVyLCBhbHRob3VnaCB0aGlzIGNvZGUgbG9va3Mgc2NhcnkuIEl0IG1lcmVseSBl
eGlzdHMgaW4KKyAgLy8gZGV2ZWxvcG1lbnQgdG8gYWlkIGluIGRldmVsb3BtZW50IGFzZXJ0aW9u
cy4gUHJvZHVjdGlvbiBidWlsZHMgb2YKKyAgLy8gZW1iZXIgc3RyaXAgdGhpcyBlbnRpcmUgYmxv
Y2sgb3V0CisgIGhhbmRsZU1hbmRhdG9yeVNldHRlciA9IGZ1bmN0aW9uIGhhbmRsZU1hbmRhdG9y
eVNldHRlcihtLCBvYmosIGtleU5hbWUpIHsKKyAgICB2YXIgZGVzY3JpcHRvciA9IF9lbWJlck1l
dGFsVXRpbHMubG9va3VwRGVzY3JpcHRvcihvYmosIGtleU5hbWUpOworICAgIHZhciBjb25maWd1
cmFibGUgPSBkZXNjcmlwdG9yID8gZGVzY3JpcHRvci5jb25maWd1cmFibGUgOiB0cnVlOworICAg
IHZhciBpc1dyaXRhYmxlID0gZGVzY3JpcHRvciA/IGRlc2NyaXB0b3Iud3JpdGFibGUgOiB0cnVl
OworICAgIHZhciBoYXNWYWx1ZSA9IGRlc2NyaXB0b3IgPyAndmFsdWUnIGluIGRlc2NyaXB0b3Ig
OiB0cnVlOworICAgIHZhciBwb3NzaWJsZURlc2MgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3Iu
dmFsdWU7CisgICAgdmFyIGlzRGVzY3JpcHRvciA9IHBvc3NpYmxlRGVzYyAhPT0gbnVsbCAmJiB0
eXBlb2YgcG9zc2libGVEZXNjID09PSAnb2JqZWN0JyAmJiBwb3NzaWJsZURlc2MuaXNEZXNjcmlw
dG9yOworCisgICAgaWYgKGlzRGVzY3JpcHRvcikgeworICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIC8vIHRoaXMgeCBpbiBZIGRlb3B0cywgc28ga2VlcGluZyBpdCBpbiB0aGlzIGZ1bmN0aW9u
IGlzIGJldHRlcjsKKyAgICBpZiAoY29uZmlndXJhYmxlICYmIGlzV3JpdGFibGUgJiYgaGFzVmFs
dWUgJiYga2V5TmFtZSBpbiBvYmopIHsKKyAgICAgIHZhciBkZXNjID0geworICAgICAgICBjb25m
aWd1cmFibGU6IHRydWUsCisgICAgICAgIGVudW1lcmFibGU6IE9iamVjdC5wcm90b3R5cGUucHJv
cGVydHlJc0VudW1lcmFibGUuY2FsbChvYmosIGtleU5hbWUpLAorICAgICAgICBzZXQ6IF9lbWJl
ck1ldGFsUHJvcGVydGllcy5NQU5EQVRPUllfU0VUVEVSX0ZVTkNUSU9OKGtleU5hbWUpLAorICAg
ICAgICBnZXQ6IHVuZGVmaW5lZAorICAgICAgfTsKKworICAgICAgaWYgKE9iamVjdC5wcm90b3R5
cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleU5hbWUpKSB7CisgICAgICAgIG0ud3JpdGVW
YWx1ZXMoa2V5TmFtZSwgb2JqW2tleU5hbWVdKTsKKyAgICAgICAgZGVzYy5nZXQgPSBfZW1iZXJN
ZXRhbFByb3BlcnRpZXMuREVGQVVMVF9HRVRURVJfRlVOQ1RJT04oa2V5TmFtZSk7CisgICAgICB9
IGVsc2UgeworICAgICAgICBkZXNjLmdldCA9IF9lbWJlck1ldGFsUHJvcGVydGllcy5JTkhFUklU
SU5HX0dFVFRFUl9GVU5DVElPTihrZXlOYW1lKTsKKyAgICAgIH0KKworICAgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KG9iaiwga2V5TmFtZSwgZGVzYyk7CisgICAgfQorICB9OworCisgIGZ1bmN0
aW9uIHVud2F0Y2hLZXkob2JqLCBrZXlOYW1lLCBtZXRhKSB7CisgICAgdmFyIG0gPSBtZXRhIHx8
IF9lbWJlck1ldGFsTWV0YS5tZXRhKG9iaik7CisgICAgdmFyIGNvdW50ID0gbS5wZWVrV2F0Y2hp
bmcoa2V5TmFtZSk7CisgICAgaWYgKGNvdW50ID09PSAxKSB7CisgICAgICBtLndyaXRlV2F0Y2hp
bmcoa2V5TmFtZSwgMCk7CisKKyAgICAgIHZhciBwb3NzaWJsZURlc2MgPSBvYmpba2V5TmFtZV07
CisgICAgICB2YXIgZGVzYyA9IHBvc3NpYmxlRGVzYyAhPT0gbnVsbCAmJiB0eXBlb2YgcG9zc2li
bGVEZXNjID09PSAnb2JqZWN0JyAmJiBwb3NzaWJsZURlc2MuaXNEZXNjcmlwdG9yID8gcG9zc2li
bGVEZXNjIDogdW5kZWZpbmVkOworCisgICAgICBpZiAoZGVzYyAmJiBkZXNjLmRpZFVud2F0Y2gp
IHsKKyAgICAgICAgZGVzYy5kaWRVbndhdGNoKG9iaiwga2V5TmFtZSk7CisgICAgICB9CisKKyAg
ICAgIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2Ygb2JqLmRpZFVud2F0Y2hQcm9wZXJ0eSkgewor
ICAgICAgICBvYmouZGlkVW53YXRjaFByb3BlcnR5KGtleU5hbWUpOworICAgICAgfQorCisgICAg
ICAvLyBJdCBpcyB0cnVlLCB0aGUgZm9sbG93aW5nIGNvZGUgbG9va3MgcXVpdGUgV0FULiBCdXQg
aGF2ZSBubyBmZWFyLCBJdAorICAgICAgLy8gZXhpc3RzIHB1cmVseSB0byBpbXByb3ZlIGRldmVs
b3BtZW50IGVyZ29ub21pY3MgYW5kIGlzIHJlbW92ZWQgZnJvbQorICAgICAgLy8gZW1iZXIubWlu
LmpzIGFuZCBlbWJlci5wcm9kLmpzIGJ1aWxkcy4KKyAgICAgIC8vCisgICAgICAvLyBTb21lIGZ1
cnRoZXIgY29udGV4dDogT25jZSBhIHByb3BlcnR5IGlzIHdhdGNoZWQgYnkgZW1iZXIsIGJ5cGFz
c2luZyBgc2V0YAorICAgICAgLy8gZm9yIG11dGF0aW9uLCB3aWxsIGJ5cGFzcyBvYnNlcnZhdGlv
bi4gVGhpcyBjb2RlIGV4aXN0cyB0byBhc3NlcnQgd2hlbgorICAgICAgLy8gdGhhdCBvY2N1cnMs
IGFuZCBhdHRlbXB0IHRvIHByb3ZpZGUgbW9yZSBoZWxwZnVsIGZlZWRiYWNrLiBUaGUgYWx0ZXJu
YXRpdmUKKyAgICAgIC8vIGlzIHRyaWNreSB0byBkZWJ1ZyBwYXJ0aWFsbHkgb2JzZXJ2YWJsZSBw
cm9wZXJ0aWVzLgorICAgICAgaWYgKCFkZXNjICYmIGtleU5hbWUgaW4gb2JqKSB7CisgICAgICAg
IHZhciBtYXliZU1hbmRhdG9yeURlc2NyaXB0b3IgPSBfZW1iZXJNZXRhbFV0aWxzLmxvb2t1cERl
c2NyaXB0b3Iob2JqLCBrZXlOYW1lKTsKKworICAgICAgICBpZiAobWF5YmVNYW5kYXRvcnlEZXNj
cmlwdG9yLnNldCAmJiBtYXliZU1hbmRhdG9yeURlc2NyaXB0b3Iuc2V0LmlzTWFuZGF0b3J5U2V0
dGVyKSB7CisgICAgICAgICAgaWYgKG1heWJlTWFuZGF0b3J5RGVzY3JpcHRvci5nZXQgJiYgbWF5
YmVNYW5kYXRvcnlEZXNjcmlwdG9yLmdldC5pc0luaGVyaXRpbmdHZXR0ZXIpIHsKKyAgICAgICAg
ICAgIGRlbGV0ZSBvYmpba2V5TmFtZV07CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleU5hbWUsIHsKKyAgICAgICAgICAgICAgY29u
ZmlndXJhYmxlOiB0cnVlLAorICAgICAgICAgICAgICBlbnVtZXJhYmxlOiBPYmplY3QucHJvdG90
eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqLCBrZXlOYW1lKSwKKyAgICAgICAgICAg
ICAgd3JpdGFibGU6IHRydWUsCisgICAgICAgICAgICAgIHZhbHVlOiBtLnBlZWtWYWx1ZXMoa2V5
TmFtZSkKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgbS5kZWxldGVGcm9tVmFsdWVzKGtl
eU5hbWUpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0gZWxzZSBpZiAo
Y291bnQgPiAxKSB7CisgICAgICBtLndyaXRlV2F0Y2hpbmcoa2V5TmFtZSwgY291bnQgLSAxKTsK
KyAgICB9CisgIH0KK30pOworZW5pZmVkKCdlbWJlci1tZXRhbC93YXRjaF9wYXRoJywgWydleHBv
cnRzJywgJ2VtYmVyLW1ldGFsL21ldGEnLCAnZW1iZXItbWV0YWwvY2hhaW5zJ10sIGZ1bmN0aW9u
IChleHBvcnRzLCBfZW1iZXJNZXRhbE1ldGEsIF9lbWJlck1ldGFsQ2hhaW5zKSB7CisgICd1c2Ug
c3RyaWN0JzsKKworICBleHBvcnRzLndhdGNoUGF0aCA9IHdhdGNoUGF0aDsKKyAgZXhwb3J0cy51
bndhdGNoUGF0aCA9IHVud2F0Y2hQYXRoOworCisgIC8vIGdldCB0aGUgY2hhaW5zIGZvciB0aGUg
Y3VycmVudCBvYmplY3QuIElmIHRoZSBjdXJyZW50IG9iamVjdCBoYXMKKyAgLy8gY2hhaW5zIGlu
aGVyaXRlZCBmcm9tIHRoZSBwcm90byB0aGV5IHdpbGwgYmUgY2xvbmVkIGFuZCByZWNvbmZpZ3Vy
ZWQgZm9yCisgIC8vIHRoZSBjdXJyZW50IG9iamVjdC4KKyAgZnVuY3Rpb24gY2hhaW5zRm9yKG9i
aiwgbWV0YSkgeworICAgIHJldHVybiAobWV0YSB8fCBfZW1iZXJNZXRhbE1ldGEubWV0YShvYmop
KS53cml0YWJsZUNoYWlucyhtYWtlQ2hhaW5Ob2RlKTsKKyAgfQorCisgIGZ1bmN0aW9uIG1ha2VD
aGFpbk5vZGUob2JqKSB7CisgICAgcmV0dXJuIG5ldyBfZW1iZXJNZXRhbENoYWlucy5DaGFpbk5v
ZGUobnVsbCwgbnVsbCwgb2JqKTsKKyAgfQorCisgIGZ1bmN0aW9uIHdhdGNoUGF0aChvYmosIGtl
eVBhdGgsIG1ldGEpIHsKKyAgICAvLyBjYW4ndCB3YXRjaCBsZW5ndGggb24gQXJyYXkgLSBpdCBp
cyBzcGVjaWFsLi4uCisgICAgaWYgKGtleVBhdGggPT09ICdsZW5ndGgnICYmIEFycmF5LmlzQXJy
YXkob2JqKSkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZhciBtID0gbWV0YSB8fCBf
ZW1iZXJNZXRhbE1ldGEubWV0YShvYmopOworICAgIHZhciBjb3VudGVyID0gbS5wZWVrV2F0Y2hp
bmcoa2V5UGF0aCkgfHwgMDsKKyAgICBpZiAoIWNvdW50ZXIpIHsKKyAgICAgIC8vIGFjdGl2YXRl
IHdhdGNoaW5nIGZpcnN0IHRpbWUKKyAgICAgIG0ud3JpdGVXYXRjaGluZyhrZXlQYXRoLCAxKTsK
KyAgICAgIGNoYWluc0ZvcihvYmosIG0pLmFkZChrZXlQYXRoKTsKKyAgICB9IGVsc2UgeworICAg
ICAgbS53cml0ZVdhdGNoaW5nKGtleVBhdGgsIGNvdW50ZXIgKyAxKTsKKyAgICB9CisgIH0KKwor
ICBmdW5jdGlvbiB1bndhdGNoUGF0aChvYmosIGtleVBhdGgsIG1ldGEpIHsKKyAgICB2YXIgbSA9
IG1ldGEgfHwgX2VtYmVyTWV0YWxNZXRhLm1ldGEob2JqKTsKKyAgICB2YXIgY291bnRlciA9IG0u
cGVla1dhdGNoaW5nKGtleVBhdGgpIHx8IDA7CisKKyAgICBpZiAoY291bnRlciA9PT0gMSkgewor
ICAgICAgbS53cml0ZVdhdGNoaW5nKGtleVBhdGgsIDApOworICAgICAgY2hhaW5zRm9yKG9iaiwg
bSkucmVtb3ZlKGtleVBhdGgpOworICAgIH0gZWxzZSBpZiAoY291bnRlciA+IDEpIHsKKyAgICAg
IG0ud3JpdGVXYXRjaGluZyhrZXlQYXRoLCBjb3VudGVyIC0gMSk7CisgICAgfQorICB9Cit9KTsK
K2VuaWZlZCgnZW1iZXItbWV0YWwvd2F0Y2hpbmcnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwv
Y2hhaW5zJywgJ2VtYmVyLW1ldGFsL3dhdGNoX2tleScsICdlbWJlci1tZXRhbC93YXRjaF9wYXRo
JywgJ2VtYmVyLW1ldGFsL3BhdGhfY2FjaGUnLCAnZW1iZXItbWV0YWwvbWV0YSddLCBmdW5jdGlv
biAoZXhwb3J0cywgX2VtYmVyTWV0YWxDaGFpbnMsIF9lbWJlck1ldGFsV2F0Y2hfa2V5LCBfZW1i
ZXJNZXRhbFdhdGNoX3BhdGgsIF9lbWJlck1ldGFsUGF0aF9jYWNoZSwgX2VtYmVyTWV0YWxNZXRh
KSB7CisgIC8qKgorICBAbW9kdWxlIGVtYmVyLW1ldGFsCisgICovCisKKyAgJ3VzZSBzdHJpY3Qn
OworCisgIGV4cG9ydHMuaXNXYXRjaGluZyA9IGlzV2F0Y2hpbmc7CisgIGV4cG9ydHMud2F0Y2hl
ckNvdW50ID0gd2F0Y2hlckNvdW50OworICBleHBvcnRzLnVud2F0Y2ggPSB1bndhdGNoOworICBl
eHBvcnRzLmRlc3Ryb3kgPSBkZXN0cm95OworCisgIC8qKgorICAgIFN0YXJ0cyB3YXRjaGluZyBh
IHByb3BlcnR5IG9uIGFuIG9iamVjdC4gV2hlbmV2ZXIgdGhlIHByb3BlcnR5IGNoYW5nZXMsCisg
ICAgaW52b2tlcyBgRW1iZXIucHJvcGVydHlXaWxsQ2hhbmdlYCBhbmQgYEVtYmVyLnByb3BlcnR5
RGlkQ2hhbmdlYC4gVGhpcyBpcyB0aGUKKyAgICBwcmltaXRpdmUgdXNlZCBieSBvYnNlcnZlcnMg
YW5kIGRlcGVuZGVudCBrZXlzOyB1c3VhbGx5IHlvdSB3aWxsIG5ldmVyIGNhbGwKKyAgICB0aGlz
IG1ldGhvZCBkaXJlY3RseSBidXQgaW5zdGVhZCB1c2UgaGlnaGVyIGxldmVsIG1ldGhvZHMgbGlr
ZQorICAgIGBFbWJlci5hZGRPYnNlcnZlcigpYAorICAKKyAgICBAcHJpdmF0ZQorICAgIEBtZXRo
b2Qgd2F0Y2gKKyAgICBAZm9yIEVtYmVyCisgICAgQHBhcmFtIG9iagorICAgIEBwYXJhbSB7U3Ry
aW5nfSBfa2V5UGF0aAorICAqLworICBmdW5jdGlvbiB3YXRjaChvYmosIF9rZXlQYXRoLCBtKSB7
CisgICAgLy8gY2FuJ3Qgd2F0Y2ggbGVuZ3RoIG9uIEFycmF5IC0gaXQgaXMgc3BlY2lhbC4uLgor
ICAgIGlmIChfa2V5UGF0aCA9PT0gJ2xlbmd0aCcgJiYgQXJyYXkuaXNBcnJheShvYmopKSB7Cisg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFfZW1iZXJNZXRhbFBhdGhfY2FjaGUuaXNQ
YXRoKF9rZXlQYXRoKSkgeworICAgICAgX2VtYmVyTWV0YWxXYXRjaF9rZXkud2F0Y2hLZXkob2Jq
LCBfa2V5UGF0aCwgbSk7CisgICAgfSBlbHNlIHsKKyAgICAgIF9lbWJlck1ldGFsV2F0Y2hfcGF0
aC53YXRjaFBhdGgob2JqLCBfa2V5UGF0aCwgbSk7CisgICAgfQorICB9CisKKyAgZXhwb3J0cy53
YXRjaCA9IHdhdGNoOworCisgIGZ1bmN0aW9uIGlzV2F0Y2hpbmcob2JqLCBrZXkpIHsKKyAgICB2
YXIgbWV0YSA9IF9lbWJlck1ldGFsTWV0YS5wZWVrTWV0YShvYmopOworICAgIHJldHVybiAobWV0
YSAmJiBtZXRhLnBlZWtXYXRjaGluZyhrZXkpKSA+IDA7CisgIH0KKworICBmdW5jdGlvbiB3YXRj
aGVyQ291bnQob2JqLCBrZXkpIHsKKyAgICB2YXIgbWV0YSA9IF9lbWJlck1ldGFsTWV0YS5wZWVr
TWV0YShvYmopOworICAgIHJldHVybiBtZXRhICYmIG1ldGEucGVla1dhdGNoaW5nKGtleSkgfHwg
MDsKKyAgfQorCisgIGZ1bmN0aW9uIHVud2F0Y2gob2JqLCBfa2V5UGF0aCwgbSkgeworICAgIC8v
IGNhbid0IHdhdGNoIGxlbmd0aCBvbiBBcnJheSAtIGl0IGlzIHNwZWNpYWwuLi4KKyAgICBpZiAo
X2tleVBhdGggPT09ICdsZW5ndGgnICYmIEFycmF5LmlzQXJyYXkob2JqKSkgeworICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmICghX2VtYmVyTWV0YWxQYXRoX2NhY2hlLmlzUGF0aChfa2V5
UGF0aCkpIHsKKyAgICAgIF9lbWJlck1ldGFsV2F0Y2hfa2V5LnVud2F0Y2hLZXkob2JqLCBfa2V5
UGF0aCwgbSk7CisgICAgfSBlbHNlIHsKKyAgICAgIF9lbWJlck1ldGFsV2F0Y2hfcGF0aC51bndh
dGNoUGF0aChvYmosIF9rZXlQYXRoLCBtKTsKKyAgICB9CisgIH0KKworICB2YXIgTk9ERV9TVEFD
SyA9IFtdOworCisgIC8qKgorICAgIFRlYXJzIGRvd24gdGhlIG1ldGEgb24gYW4gb2JqZWN0IHNv
IHRoYXQgaXQgY2FuIGJlIGdhcmJhZ2UgY29sbGVjdGVkLgorICAgIE11bHRpcGxlIGNhbGxzIHdp
bGwgaGF2ZSBubyBlZmZlY3QuCisgIAorICAgIEBtZXRob2QgZGVzdHJveQorICAgIEBmb3IgRW1i
ZXIKKyAgICBAcGFyYW0ge09iamVjdH0gb2JqICB0aGUgb2JqZWN0IHRvIGRlc3Ryb3kKKyAgICBA
cmV0dXJuIHt2b2lkfQorICAgIEBwcml2YXRlCisgICovCisKKyAgZnVuY3Rpb24gZGVzdHJveShv
YmopIHsKKyAgICB2YXIgbWV0YSA9IF9lbWJlck1ldGFsTWV0YS5wZWVrTWV0YShvYmopOworICAg
IHZhciBub2RlLCBub2Rlcywga2V5LCBub2RlT2JqZWN0OworCisgICAgaWYgKG1ldGEpIHsKKyAg
ICAgIF9lbWJlck1ldGFsTWV0YS5kZWxldGVNZXRhKG9iaik7CisgICAgICAvLyByZW1vdmUgY2hh
aW5XYXRjaGVycyB0byByZW1vdmUgY2lyY3VsYXIgcmVmZXJlbmNlcyB0aGF0IHdvdWxkIHByZXZl
bnQgR0MKKyAgICAgIG5vZGUgPSBtZXRhLnJlYWRhYmxlQ2hhaW5zKCk7CisgICAgICBpZiAobm9k
ZSkgeworICAgICAgICBOT0RFX1NUQUNLLnB1c2gobm9kZSk7CisgICAgICAgIC8vIHByb2Nlc3Mg
dHJlZQorICAgICAgICB3aGlsZSAoTk9ERV9TVEFDSy5sZW5ndGggPiAwKSB7CisgICAgICAgICAg
bm9kZSA9IE5PREVfU1RBQ0sucG9wKCk7CisgICAgICAgICAgLy8gcHVzaCBjaGlsZHJlbgorICAg
ICAgICAgIG5vZGVzID0gbm9kZS5fY2hhaW5zOworICAgICAgICAgIGlmIChub2RlcykgeworICAg
ICAgICAgICAgZm9yIChrZXkgaW4gbm9kZXMpIHsKKyAgICAgICAgICAgICAgaWYgKG5vZGVzW2tl
eV0gIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgICAgIE5PREVfU1RBQ0sucHVzaChub2Rl
c1trZXldKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAg
ICAgICAgICAvLyByZW1vdmUgY2hhaW5XYXRjaGVyIGluIG5vZGUgb2JqZWN0CisgICAgICAgICAg
aWYgKG5vZGUuX3dhdGNoaW5nKSB7CisgICAgICAgICAgICBub2RlT2JqZWN0ID0gbm9kZS5fb2Jq
ZWN0OworICAgICAgICAgICAgaWYgKG5vZGVPYmplY3QpIHsKKyAgICAgICAgICAgICAgX2VtYmVy
TWV0YWxDaGFpbnMucmVtb3ZlQ2hhaW5XYXRjaGVyKG5vZGVPYmplY3QsIG5vZGUuX2tleSwgbm9k
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAg
fQorICB9Cit9KTsKK2VuaWZlZCgnZW1iZXItbWV0YWwvd2Vha19tYXAnLCBbJ2V4cG9ydHMnLCAn
ZW1iZXItbWV0YWwvZGVidWcnLCAnZW1iZXItbWV0YWwvdXRpbHMnLCAnZW1iZXItbWV0YWwvbWV0
YSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxEZWJ1ZywgX2VtYmVyTWV0YWxVdGls
cywgX2VtYmVyTWV0YWxNZXRhKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICBleHBvcnRzLmRlZmF1
bHQgPSBXZWFrTWFwOworCisgIHZhciBpZCA9IDA7CisgIGZ1bmN0aW9uIFVOREVGSU5FRCgpIHt9
CisKKyAgLyoKKyAgICogQHByaXZhdGUKKyAgICogQGNsYXNzIEVtYmVyLldlYWtNYXAKKyAgICoK
KyAgICogQSBwYXJ0aWFsIHBvbHlmaWxsIGZvciBbV2Vha01hcF0oaHR0cDovL3d3dy5lY21hLWlu
dGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXdlYWttYXAtb2JqZWN0cykuCisgICAq
CisgICAqIFRoZXJlIGlzIGEgc21hbGwgYnV0IGltcG9ydGFudCBjYXZlYXQuIFRoaXMgaW1wbGVt
ZW50YXRpb24gYXNzdW1lcyB0aGF0IHRoZQorICAgKiB3ZWFrIG1hcCB3aWxsIGxpdmUgbG9uZ2Vy
IChpbiB0aGUgc2Vuc2Ugb2YgZ2FyYmFnZSBjb2xsZWN0aW9uKSB0aGFuIGFsbCBvZiBpdHMKKyAg
ICoga2V5cywgb3RoZXJ3aXNlIGl0IGlzIHBvc3NpYmxlIHRvIGxlYWsgdGhlIHZhbHVlcyBzdG9y
ZWQgaW4gdGhlIHdlYWsgbWFwLiBJbgorICAgKiBwcmFjdGljZSwgbW9zdCB1c2UgY2FzZXMgc2F0
aXNmeSB0aGlzIGxpbWl0YXRpb24gd2hpY2ggaXMgd2h5IGl0IGlzIGluY2x1ZGVkCisgICAqIGlu
IGVtYmVyLW1ldGFsLgorICAgKi8KKworICBmdW5jdGlvbiBXZWFrTWFwKCkgeworICAgIF9lbWJl
ck1ldGFsRGVidWcuYXNzZXJ0KCdJbnZva2luZyB0aGUgV2Vha01hcCBjb25zdHJ1Y3RvciB3aXRo
IGFyZ3VtZW50cyBpcyBub3Qgc3VwcG9ydGVkIGF0IHRoaXMgdGltZScsIGFyZ3VtZW50cy5sZW5n
dGggPT09IDApOworCisgICAgdGhpcy5faWQgPSBfZW1iZXJNZXRhbFV0aWxzLkdVSURfS0VZICsg
aWQrKzsKKyAgfQorCisgIC8qCisgICAqIEBtZXRob2QgZ2V0CisgICAqIEBwYXJhbSBrZXkge09i
amVjdCB8IEZ1bmN0aW9ufQorICAgKiBAcmV0dXJuIHtBbnl9IHN0b3JlZCB2YWx1ZQorICAgKi8K
KyAgV2Vha01hcC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKG9iaikgeworICAgIHZhciBtZXRh
ID0gX2VtYmVyTWV0YWxNZXRhLnBlZWtNZXRhKG9iaik7CisgICAgaWYgKG1ldGEpIHsKKyAgICAg
IHZhciBtYXAgPSBtZXRhLnJlYWRhYmxlV2VhaygpOworICAgICAgaWYgKG1hcCkgeworICAgICAg
ICBpZiAobWFwW3RoaXMuX2lkXSA9PT0gVU5ERUZJTkVEKSB7CisgICAgICAgICAgcmV0dXJuIHVu
ZGVmaW5lZDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtYXBbdGhpcy5faWRdOworICAg
ICAgfQorICAgIH0KKyAgfTsKKworICAvKgorICAgKiBAbWV0aG9kIHNldAorICAgKiBAcGFyYW0g
a2V5IHtPYmplY3QgfCBGdW5jdGlvbn0KKyAgICogQHBhcmFtIHZhbHVlIHtBbnl9CisgICAqIEBy
ZXR1cm4ge1dlYWtNYXB9IHRoZSB3ZWFrIG1hcAorICAgKi8KKyAgV2Vha01hcC5wcm90b3R5cGUu
c2V0ID0gZnVuY3Rpb24gKG9iaiwgdmFsdWUpIHsKKyAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2Vy
dCgnVW5jYXVnaHQgVHlwZUVycm9yOiBJbnZhbGlkIHZhbHVlIHVzZWQgYXMgd2VhayBtYXAga2V5
Jywgb2JqICYmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqID09PSAnZnVu
Y3Rpb24nKSk7CisKKyAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgeworICAgICAgdmFsdWUg
PSBVTkRFRklORUQ7CisgICAgfQorCisgICAgX2VtYmVyTWV0YWxNZXRhLm1ldGEob2JqKS53cml0
YWJsZVdlYWsoKVt0aGlzLl9pZF0gPSB2YWx1ZTsKKworICAgIHJldHVybiB0aGlzOworICB9Owor
CisgIC8qCisgICAqIEBtZXRob2QgaGFzCisgICAqIEBwYXJhbSBrZXkge09iamVjdCB8IEZ1bmN0
aW9ufQorICAgKiBAcmV0dXJuIHtib29sZWFufSBpZiB0aGUga2V5IGV4aXN0cworICAgKi8KKyAg
V2Vha01hcC5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gKG9iaikgeworICAgIHZhciBtZXRhID0g
X2VtYmVyTWV0YWxNZXRhLnBlZWtNZXRhKG9iaik7CisgICAgaWYgKG1ldGEpIHsKKyAgICAgIHZh
ciBtYXAgPSBtZXRhLnJlYWRhYmxlV2VhaygpOworICAgICAgaWYgKG1hcCkgeworICAgICAgICBy
ZXR1cm4gbWFwW3RoaXMuX2lkXSAhPT0gdW5kZWZpbmVkOworICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiBmYWxzZTsKKyAgfTsKKworICAvKgorICAgKiBAbWV0aG9kIGRlbGV0ZQorICAgKiBA
cGFyYW0ga2V5IHtPYmplY3QgfCBGdW5jdGlvbn0KKyAgICogQHJldHVybiB7Ym9vbGVhbn0gaWYg
dGhlIGtleSB3YXMgZGVsZXRlZAorICAgKi8KKyAgV2Vha01hcC5wcm90b3R5cGUuZGVsZXRlID0g
ZnVuY3Rpb24gKG9iaikgeworICAgIGlmICh0aGlzLmhhcyhvYmopKSB7CisgICAgICBkZWxldGUg
X2VtYmVyTWV0YWxNZXRhLm1ldGEob2JqKS53cml0YWJsZVdlYWsoKVt0aGlzLl9pZF07CisgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgfTsKK30pOworZW5pZmVkKCdlbWJlci1yb3V0aW5nLWh0bWxiYXJzL2hlbHBlcnMvcXVlcnkt
cGFyYW1zJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLXJvdXRpbmcv
c3lzdGVtL3F1ZXJ5X3BhcmFtcyddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxEZWJ1
ZywgX2VtYmVyUm91dGluZ1N5c3RlbVF1ZXJ5X3BhcmFtcykgeworICAvKioKKyAgQG1vZHVsZSBl
bWJlcgorICBAc3VibW9kdWxlIGVtYmVyLXJvdXRpbmctaHRtbGJhcnMKKyAgKi8KKworICAndXNl
IHN0cmljdCc7CisKKyAgZXhwb3J0cy5xdWVyeVBhcmFtc0hlbHBlciA9IHF1ZXJ5UGFyYW1zSGVs
cGVyOworCisgIC8qKgorICAgIFRoaXMgaXMgYSBoZWxwZXIgdG8gYmUgdXNlZCBpbiBjb25qdW5j
dGlvbiB3aXRoIHRoZSBsaW5rLXRvIGhlbHBlci4KKyAgICBJdCB3aWxsIHN1cHBseSB1cmwgcXVl
cnkgcGFyYW1ldGVycyB0byB0aGUgdGFyZ2V0IHJvdXRlLgorICAKKyAgICBFeGFtcGxlCisgIAor
ICAgIGBgYGhhbmRsZWJhcnMKKyAgICB7eyNsaW5rLXRvICdwb3N0cycgKHF1ZXJ5LXBhcmFtcyBk
aXJlY3Rpb249ImFzYyIpfX1Tb3J0e3svbGluay10b319CisgICAgYGBgCisgIAorICAgIEBtZXRo
b2QgcXVlcnktcGFyYW1zCisgICAgQGZvciBFbWJlci5UZW1wbGF0ZXMuaGVscGVycworICAgIEBw
YXJhbSB7T2JqZWN0fSBoYXNoIHRha2VzIGEgaGFzaCBvZiBxdWVyeSBwYXJhbWV0ZXJzCisgICAg
QHJldHVybiB7T2JqZWN0fSBBIGBRdWVyeVBhcmFtc2Agb2JqZWN0IGZvciBge3tsaW5rLXRvfX1g
CisgICAgQHB1YmxpYworICAqLworCisgIGZ1bmN0aW9uIHF1ZXJ5UGFyYW1zSGVscGVyKHBhcmFt
cywgaGFzaCkgeworICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdUaGUgYHF1ZXJ5LXBhcmFt
c2AgaGVscGVyIG9ubHkgYWNjZXB0cyBoYXNoIHBhcmFtZXRlcnMsIGUuZy4gKHF1ZXJ5LXBhcmFt
cyBxdWVyeVBhcmFtUHJvcGVydHlOYW1lPVwnZm9vXCcpIGFzIG9wcG9zZWQgdG8ganVzdCAocXVl
cnktcGFyYW1zIFwnZm9vXCcpJywgcGFyYW1zLmxlbmd0aCA9PT0gMCk7CisKKyAgICByZXR1cm4g
X2VtYmVyUm91dGluZ1N5c3RlbVF1ZXJ5X3BhcmFtcy5kZWZhdWx0LmNyZWF0ZSh7CisgICAgICB2
YWx1ZXM6IGhhc2gKKyAgICB9KTsKKyAgfQorfSk7CitlbmlmZWQoJ2VtYmVyLXJvdXRpbmctaHRt
bGJhcnMvaW5kZXgnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvY29yZScsICdlbWJlci1odG1s
YmFycy9oZWxwZXJzJywgJ2VtYmVyLWh0bWxiYXJzL2tleXdvcmRzJywgJ2VtYmVyLXJvdXRpbmct
aHRtbGJhcnMvaGVscGVycy9xdWVyeS1wYXJhbXMnLCAnZW1iZXItcm91dGluZy1odG1sYmFycy9r
ZXl3b3Jkcy9hY3Rpb24nLCAnZW1iZXItcm91dGluZy1odG1sYmFycy9rZXl3b3Jkcy9lbGVtZW50
LWFjdGlvbicsICdlbWJlci1yb3V0aW5nLWh0bWxiYXJzL2tleXdvcmRzL3JlbmRlciddLCBmdW5j
dGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxDb3JlLCBfZW1iZXJIdG1sYmFyc0hlbHBlcnMsIF9l
bWJlckh0bWxiYXJzS2V5d29yZHMsIF9lbWJlclJvdXRpbmdIdG1sYmFyc0hlbHBlcnNRdWVyeVBh
cmFtcywgX2VtYmVyUm91dGluZ0h0bWxiYXJzS2V5d29yZHNBY3Rpb24sIF9lbWJlclJvdXRpbmdI
dG1sYmFyc0tleXdvcmRzRWxlbWVudEFjdGlvbiwgX2VtYmVyUm91dGluZ0h0bWxiYXJzS2V5d29y
ZHNSZW5kZXIpIHsKKyAgLyoqCisgIEBtb2R1bGUgZW1iZXIKKyAgQHN1Ym1vZHVsZSBlbWJlci1y
b3V0aW5nLWh0bWxiYXJzCisgICovCisKKyAgJ3VzZSBzdHJpY3QnOworCisgIF9lbWJlckh0bWxi
YXJzSGVscGVycy5yZWdpc3RlckhlbHBlcigncXVlcnktcGFyYW1zJywgX2VtYmVyUm91dGluZ0h0
bWxiYXJzSGVscGVyc1F1ZXJ5UGFyYW1zLnF1ZXJ5UGFyYW1zSGVscGVyKTsKKworICBfZW1iZXJI
dG1sYmFyc0tleXdvcmRzLnJlZ2lzdGVyS2V5d29yZCgnYWN0aW9uJywgX2VtYmVyUm91dGluZ0h0
bWxiYXJzS2V5d29yZHNBY3Rpb24uZGVmYXVsdCk7CisgIF9lbWJlckh0bWxiYXJzS2V5d29yZHMu
cmVnaXN0ZXJLZXl3b3JkKCdAZWxlbWVudF9hY3Rpb24nLCBfZW1iZXJSb3V0aW5nSHRtbGJhcnNL
ZXl3b3Jkc0VsZW1lbnRBY3Rpb24uZGVmYXVsdCk7CisgIF9lbWJlckh0bWxiYXJzS2V5d29yZHMu
cmVnaXN0ZXJLZXl3b3JkKCdyZW5kZXInLCBfZW1iZXJSb3V0aW5nSHRtbGJhcnNLZXl3b3Jkc1Jl
bmRlci5kZWZhdWx0KTsKKworICBleHBvcnRzLmRlZmF1bHQgPSBfZW1iZXJNZXRhbENvcmUuZGVm
YXVsdDsKK30pOworZW5pZmVkKCdlbWJlci1yb3V0aW5nLWh0bWxiYXJzL2tleXdvcmRzL2FjdGlv
bicsIFsnZXhwb3J0cycsICdodG1sYmFycy1ydW50aW1lL2hvb2tzJywgJ2VtYmVyLXJvdXRpbmct
aHRtbGJhcnMva2V5d29yZHMvY2xvc3VyZS1hY3Rpb24nXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9o
dG1sYmFyc1J1bnRpbWVIb29rcywgX2VtYmVyUm91dGluZ0h0bWxiYXJzS2V5d29yZHNDbG9zdXJl
QWN0aW9uKSB7CisgIC8qKgorICBAbW9kdWxlIGVtYmVyCisgIEBzdWJtb2R1bGUgZW1iZXItdGVt
cGxhdGVzCisgICovCisKKyAgJ3VzZSBzdHJpY3QnOworCisgIC8qKgorICAgIFRoZSBge3thY3Rp
b259fWAgaGVscGVyIHByb3ZpZGVzIGEgd2F5IHRvIHBhc3MgdHJpZ2dlcnMgZm9yIGJlaGF2aW9y
ICh1c3VhbGx5CisgICAganVzdCBhIGZ1bmN0aW9uKSBiZXR3ZWVuIGNvbXBvbmVudHMsIGFuZCBp
bnRvIGNvbXBvbmVudHMgZnJvbSBjb250cm9sbGVycy4KKyAgCisgICAgIyMjIFBhc3NpbmcgZnVu
Y3Rpb25zIHdpdGggdGhlIGFjdGlvbiBoZWxwZXIKKyAgCisgICAgVGhlcmUgYXJlIHRocmVlIGNv
bnRleHRzIGFuIGFjdGlvbiBoZWxwZXIgY2FuIGJlIHVzZWQgaW4uIFRoZSBmaXJzdCB0d28KKyAg
ICBjb250ZXh0cyB0byBkaXNjdXNzIGFyZSBhdHRyaWJ1dGUgY29udGV4dCwgYW5kIEhhbmRsZWJh
cnMgdmFsdWUgY29udGV4dC4KKyAgCisgICAgYGBgaGFuZGxlYmFycworICAgIHt7ISBBbiBleGFt
cGxlIG9mIGF0dHJpYnV0ZSBjb250ZXh0IH19CisgICAgPGRpdiBvbmNsaWNrPXt7YWN0aW9uICJz
YXZlIn19PjwvZGl2PgorICAgIHt7ISBFeGFtcGxlcyBvZiBIYW5kbGViYXJzIHZhbHVlIGNvbnRl
eHQgfX0KKyAgICB7e2lucHV0IG9uLWlucHV0PShhY3Rpb24gInNhdmUiKX19CisgICAge3t5aWVs
ZCAoYWN0aW9uICJyZWZyZXNoRGF0YSIpIGFuZEFub3RoZXJQYXJhbX19CisgICAgYGBgCisgIAor
ICAgIEluIHRoZXNlIGNvbnRleHRzLAorICAgIHRoZSBoZWxwZXIgaXMgY2FsbGVkIGEgImNsb3N1
cmUgYWN0aW9uIiBoZWxwZXIuIEl0cyBiZWhhdmlvciBpcyBzaW1wbGU6CisgICAgSWYgcGFzc2Vk
IGEgZnVuY3Rpb24gbmFtZSwgcmVhZCB0aGF0IGZ1bmN0aW9uIG9mZiB0aGUgYGFjdGlvbnNgIHBy
b3BlcnR5CisgICAgb2YgdGhlIGN1cnJlbnQgY29udGV4dC4gT25jZSB0aGF0IGZ1bmN0aW9uIGlz
IHJlYWQgKG9yIGlmIGEgZnVuY3Rpb24gd2FzCisgICAgcGFzc2VkKSwgY3JlYXRlIGEgY2xvc3Vy
ZSBvdmVyIHRoYXQgZnVuY3Rpb24gYW5kIGFueSBhcmd1bWVudHMuCisgIAorICAgIFRoZSByZXN1
bHRpbmcgdmFsdWUgb2YgYW4gYWN0aW9uIGhlbHBlciB1c2VkIHRoaXMgd2F5IGlzIHNpbXBseSBh
IGZ1bmN0aW9uLgorICAgIEZvciBleGFtcGxlLCBpbiB0aGUgYXR0cmlidXRlIGNvbnRleHQ6Cisg
IAorICAgIGBgYGhhbmRsZWJhcnMKKyAgICB7eyEgQW4gZXhhbXBsZSBvZiBhdHRyaWJ1dGUgY29u
dGV4dCB9fQorICAgIDxkaXYgb25jbGljaz17e2FjdGlvbiAic2F2ZSJ9fT48L2Rpdj4KKyAgICBg
YGAKKyAgCisgICAgVGhlIHJlc3VsdGluZyB0ZW1wbGF0ZSByZW5kZXIgbG9naWMgd291bGQgYmU6
CisgIAorICAgIGBgYGpzCisgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rp
dicpOworICAgIHZhciBhY3Rpb25GdW5jdGlvbiA9IChmdW5jdGlvbihjb250ZXh0KXsKKyAgICAg
IHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGNvbnRleHQuYWN0aW9ucy5zYXZl
LmFwcGx5KGNvbnRleHQsIGFyZ3VtZW50cyk7CisgICAgICB9OworICAgIH0pKGNvbnRleHQpOwor
ICAgIGRpdi5vbmNsaWNrID0gYWN0aW9uRnVuY3Rpb247CisgICAgYGBgCisgIAorICAgIFRodXMg
d2hlbiB0aGUgZGl2IGlzIGNsaWNrZWQsIHRoZSBhY3Rpb24gb24gdGhhdCBjb250ZXh0IGlzIGNh
bGxlZC4KKyAgICBCZWNhdXNlIHRoZSBgYWN0aW9uRnVuY3Rpb25gIGlzIGp1c3QgYSBmdW5jdGlv
biwgY2xvc3VyZSBhY3Rpb25zIGNhbiBiZQorICAgIHBhc3NlZCBiZXR3ZWVuIGNvbXBvbmVudHMg
YW5kIHN0aWxsIGV4ZWN1dGUgaW4gdGhlIGNvcnJlY3QgY29udGV4dC4KKyAgCisgICAgSGVyZSBp
cyBhbiBleGFtcGxlIGFjdGlvbiBoYW5kbGVyIG9uIGEgY29tcG9uZW50OgorICAKKyAgICBgYGBq
cworICAgIGV4cG9ydCBkZWZhdWx0IEVtYmVyLkNvbXBvbmVudC5leHRlbmQoeworICAgICAgYWN0
aW9uczogeworICAgICAgICBzYXZlKCkgeworICAgICAgICAgIHRoaXMuZ2V0KCdtb2RlbCcpLnNh
dmUoKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0pOworICAgIGBgYAorICAKKyAgICBBY3Rp
b25zIGFyZSBhbHdheXMgbG9va2VkIHVwIG9uIHRoZSBgYWN0aW9uc2AgcHJvcGVydHkgb2YgdGhl
IGN1cnJlbnQgY29udGV4dC4KKyAgICBUaGlzIGF2b2lkcyBjb2xsaXNpb25zIGluIHRoZSBuYW1p
bmcgb2YgY29tbW9uIGFjdGlvbnMsIHN1Y2ggYXMgYGRlc3Ryb3lgLgorICAKKyAgICBUd28gb3B0
aW9ucyBjYW4gYmUgcGFzc2VkIHRvIHRoZSBgYWN0aW9uYCBoZWxwZXIgd2hlbiBpdCBpcyB1c2Vk
IGluIHRoaXMgd2F5LgorICAKKyAgICAqIGB0YXJnZXQ9c29tZVByb3BlcnR5YCB3aWxsIGxvb2sg
dG8gYHNvbWVQcm9wZXJ0eWAgaW5zdGVhZCBvZiB0aGUgY3VycmVudAorICAgICAgY29udGV4dCBm
b3IgdGhlIGBhY3Rpb25zYCBoYXNoLiBUaGlzIGNhbiBiZSB1c2VmdWwgd2hlbiB0YXJnZXR0aW5n
IGEKKyAgICAgIHNlcnZpY2UgZm9yIGFjdGlvbnMuCisgICAgKiBgdmFsdWU9InRhcmdldC52YWx1
ZSJgIHdpbGwgcmVhZCB0aGUgcGF0aCBgdGFyZ2V0LnZhbHVlYCBvZmYgdGhlIGZpcnN0CisgICAg
ICBhcmd1bWVudCB0byB0aGUgYWN0aW9uIHdoZW4gaXQgaXMgY2FsbGVkIGFuZCByZXdyaXRlIHRo
ZSBmaXJzdCBhcmd1bWVudAorICAgICAgdG8gYmUgdGhhdCB2YWx1ZS4gVGhpcyBpcyB1c2VmdWwg
d2hlbiBhdHRhY2hpbmcgYWN0aW9ucyB0byBldmVudCBsaXN0ZW5lcnMuCisgIAorICAgICMjIyBJ
bnZva2luZyBhbiBhY3Rpb24KKyAgCisgICAgQ2xvc3VyZSBhY3Rpb25zIGN1cnJ5IGJvdGggdGhl
aXIgc2NvcGUgYW5kIGFueSBhcmd1bWVudHMuIFdoZW4gaW52b2tlZCwgYW55CisgICAgYWRkaXRp
b25hbCBhcmd1bWVudHMgYXJlIGFkZGVkIHRvIHRoZSBhbHJlYWR5IGN1cnJpZWQgbGlzdC4KKyAg
CisgICAgQWN0aW9ucyBzaG91bGQgYmUgaW52b2tlZCB1c2luZyB0aGUgW3NlbmRBY3Rpb25dKC9h
cGkvY2xhc3Nlcy9FbWJlci5Db21wb25lbnQuaHRtbCNtZXRob2Rfc2VuZEFjdGlvbikKKyAgICBt
ZXRob2QuIFRoZSBmaXJzdCBhcmd1bWVudCB0byBgc2VuZEFjdGlvbmAgaXMgdGhlIGFjdGlvbiB0
byBiZSBjYWxsZWQsIGFuZAorICAgIGFkZGl0aW9uYWwgYXJndW1lbnRzIGFyZSBwYXNzZWQgdG8g
dGhlIGFjdGlvbiBmdW5jdGlvbi4gVGhpcyBoYXMgaW50ZXJlc3RpbmcKKyAgICBwcm9wZXJ0aWVz
IGNvbWJpbmVkIHdpdGggY3Vycnlpbmcgb2YgYXJndW1lbnRzLiBGb3IgZXhhbXBsZToKKyAgCisg
ICAgYGBganMKKyAgICBleHBvcnQgZGVmYXVsdCBFbWJlci5Db21wb25lbnQuZXh0ZW5kKHsKKyAg
ICAgIGFjdGlvbnM6IHsKKyAgICAgICAgLy8gVXNhZ2Uge3tpbnB1dCBvbi1pbnB1dD0oYWN0aW9u
IChhY3Rpb24gJ3NldE5hbWUnIG1vZGVsKSB2YWx1ZT0idGFyZ2V0LnZhbHVlIil9fQorICAgICAg
ICBzZXROYW1lKG1vZGVsLCBuYW1lKSB7CisgICAgICAgICAgbW9kZWwuc2V0KCduYW1lJywgbmFt
ZSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9KTsKKyAgICBgYGAKKyAgCisgICAgVGhlIGZp
cnN0IGFyZ3VtZW50IChgbW9kZWxgKSB3YXMgY3VycmllZCBvdmVyLCBhbmQgdGhlIHJ1bi10aW1l
IGFyZ3VtZW50IChgZXZlbnRgKQorICAgIGJlY29tZXMgYSBzZWNvbmQgYXJndW1lbnQuIEFjdGlv
biBjYWxscyBjYW4gYmUgbmVzdGVkIHRoaXMgd2F5IGJlY2F1c2UgZWFjaCBzaW1wbHkKKyAgICBy
ZXR1cm5zIGEgZnVuY3Rpb24uIEFueSBmdW5jdGlvbiBjYW4gYmUgcGFzc2VkIHRvIHRoZSBge3th
Y3Rpb259fWAgaGVscGVyLCBpbmNsdWRpbmcKKyAgICBvdGhlciBhY3Rpb25zLgorICAKKyAgICBB
Y3Rpb25zIGludm9rZWQgd2l0aCBgc2VuZEFjdGlvbmAgaGF2ZSB0aGUgc2FtZSBjdXJyeWluZyBi
ZWhhdmlvciBhcyBkZW1vbnN0cmF0ZWQKKyAgICB3aXRoIGBvbi1pbnB1dGAgYWJvdmUuIEZvciBl
eGFtcGxlOgorICAKKyAgICBgYGBqcworICAgIGV4cG9ydCBkZWZhdWx0IEVtYmVyLkNvbXBvbmVu
dC5leHRlbmQoeworICAgICAgYWN0aW9uczogeworICAgICAgICBzZXROYW1lKG1vZGVsLCBuYW1l
KSB7CisgICAgICAgICAgbW9kZWwuc2V0KCduYW1lJywgbmFtZSk7CisgICAgICAgIH0KKyAgICAg
IH0KKyAgICB9KTsKKyAgICBgYGAKKyAgCisgICAgYGBgaGFuZGxlYmFycworICAgIHt7bXktaW5w
dXQgc3VibWl0PShhY3Rpb24gJ3NldE5hbWUnIG1vZGVsKX19CisgICAgYGBgCisgIAorICAgIGBg
YGpzCisgICAgLy8gYXBwL2NvbXBvbmVudHMvbXktY29tcG9uZW50LmpzCisgICAgZXhwb3J0IGRl
ZmF1bHQgRW1iZXIuQ29tcG9uZW50LmV4dGVuZCh7CisgICAgICBjbGljaygpIHsKKyAgICAgICAg
Ly8gTm90ZSB0aGF0IG1vZGVsIGlzIG5vdCBwYXNzZWQsIGl0IHdhcyBjdXJyaWVkIGluIHRoZSB0
ZW1wbGF0ZQorICAgICAgICB0aGlzLnNlbmRBY3Rpb24oJ3N1Ym1pdCcsICdib2InKTsKKyAgICAg
IH0KKyAgICB9KTsKKyAgICBgYGAKKyAgCisgICAgIyMjIEF0dGFjaGluZyBhY3Rpb25zIHRvIERP
TSBlbGVtZW50cworICAKKyAgICBUaGUgdGhpcmQgY29udGV4dCBvZiB0aGUgYHt7YWN0aW9ufX1g
IGhlbHBlciBjYW4gYmUgY2FsbGVkICJlbGVtZW50IHNwYWNlIi4KKyAgICBGb3IgZXhhbXBsZToK
KyAgCisgICAgYGBgaGFuZGxlYmFycworICAgIHt7ISBBbiBleGFtcGxlIG9mIGVsZW1lbnQgc3Bh
Y2UgfX0KKyAgICA8ZGl2IHt7YWN0aW9uICJzYXZlIn19PjwvZGl2PgorICAgIGBgYAorICAKKyAg
ICBVc2VkIHRoaXMgd2F5LCB0aGUgYHt7YWN0aW9ufX1gIGhlbHBlciBwcm92aWRlcyBhIHVzZWZ1
bCBzaG9ydGN1dCBmb3IKKyAgICByZWdpc3RlcmluZyBhbiBIVE1MIGVsZW1lbnQgaW4gYSB0ZW1w
bGF0ZSBmb3IgYSBzaW5nbGUgRE9NIGV2ZW50IGFuZAorICAgIGZvcndhcmRpbmcgdGhhdCBpbnRl
cmFjdGlvbiB0byB0aGUgdGVtcGxhdGUncyBjb250ZXh0IChjb250cm9sbGVyIG9yIGNvbXBvbmVu
dCkuCisgIAorICAgIElmIHRoZSBjb250ZXh0IG9mIGEgdGVtcGxhdGUgaXMgYSBjb250cm9sbGVy
LCBhY3Rpb25zIHVzZWQgdGhpcyB3YXkgd2lsbAorICAgIGJ1YmJsZSB0byByb3V0ZXMgd2hlbiB0
aGUgY29udHJvbGxlciBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIHNwZWNpZmllZCBhY3Rpb24uCisg
ICAgT25jZSBhbiBhY3Rpb24gaGl0cyBhIHJvdXRlLCBpdCB3aWxsIGJ1YmJsZSB0aHJvdWdoIHRo
ZSByb3V0ZSBoaWVyYXJjaHkuCisgIAorICAgICMjIyBFdmVudCBQcm9wYWdhdGlvbgorICAKKyAg
ICBge3thY3Rpb259fWAgaGVscGVycyBjYWxsZWQgaW4gZWxlbWVudCBzcGFjZSBjYW4gY29udHJv
bCBldmVudCBidWJibGluZy4gTm90ZQorICAgIHRoYXQgdGhlIGNsb3N1cmUgc3R5bGUgYWN0aW9u
cyBjYW5ub3QuCisgIAorICAgIEV2ZW50cyB0cmlnZ2VyZWQgdGhyb3VnaCB0aGUgYWN0aW9uIGhl
bHBlciB3aWxsIGF1dG9tYXRpY2FsbHkgaGF2ZQorICAgIGAucHJldmVudERlZmF1bHQoKWAgY2Fs
bGVkIG9uIHRoZW0uIFlvdSBkbyBub3QgbmVlZCB0byBkbyBzbyBpbiB5b3VyIGV2ZW50CisgICAg
aGFuZGxlcnMuIElmIHlvdSBuZWVkIHRvIGFsbG93IGV2ZW50IHByb3BhZ2F0aW9uICh0byBoYW5k
bGUgZmlsZSBpbnB1dHMgZm9yCisgICAgZXhhbXBsZSkgeW91IGNhbiBzdXBwbHkgdGhlIGBwcmV2
ZW50RGVmYXVsdD1mYWxzZWAgb3B0aW9uIHRvIHRoZSBge3thY3Rpb259fWAgaGVscGVyOgorICAK
KyAgICBgYGBoYW5kbGViYXJzCisgICAgPGRpdiB7e2FjdGlvbiAic2F5SGVsbG8iIHByZXZlbnRE
ZWZhdWx0PWZhbHNlfX0+CisgICAgICA8aW5wdXQgdHlwZT0iZmlsZSIgLz4KKyAgICAgIDxpbnB1
dCB0eXBlPSJjaGVja2JveCIgLz4KKyAgICA8L2Rpdj4KKyAgICBgYGAKKyAgCisgICAgVG8gZGlz
YWJsZSBidWJibGluZywgcGFzcyBgYnViYmxlcz1mYWxzZWAgdG8gdGhlIGhlbHBlcjoKKyAgCisg
ICAgYGBgaGFuZGxlYmFycworICAgIDxidXR0b24ge3thY3Rpb24gJ2VkaXQnIHBvc3QgYnViYmxl
cz1mYWxzZX19PkVkaXQ8L2J1dHRvbj4KKyAgICBgYGAKKyAgCisgICAgVG8gZGlzYWJsZSBidWJi
bGluZyB3aXRoIGNsb3N1cmUgc3R5bGUgYWN0aW9ucyB5b3UgbXVzdCBjcmVhdGUgeW91ciBvd24K
KyAgICB3cmFwcGVyIGhlbHBlciB0aGF0IG1ha2VzIHVzZSBvZiBgZXZlbnQuc3RvcFByb3BhZ2F0
aW9uKClgOgorICAKKyAgICBgYGBoYW5kbGViYXJzCisgICAgPGRpdiBvbmNsaWNrPXt7ZGlzYWJs
ZS1idWJibGluZyAoYWN0aW9uICJzYXlIZWxsbyIpfX0+SGVsbG88L2Rpdj4KKyAgICBgYGAKKyAg
CisgICAgYGBganMKKyAgICAvLyBhcHAvaGVscGVycy9kaXNhYmxlLWJ1YmJsaW5nLmpzCisgICAg
aW1wb3J0IEVtYmVyIGZyb20gJ2VtYmVyJzsKKyAgCisgICAgZXhwb3J0IGZ1bmN0aW9uIGRpc2Fi
bGVCdWJibGluZyhbYWN0aW9uXSkgeworICAgICAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7Cisg
ICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOworICAKKyAgICAgICAgcmV0dXJuIGFjdGlv
bihldmVudCk7CisgICAgICB9OworICAgIH0KKyAgCisgICAgZXhwb3J0IGRlZmF1bHQgRW1iZXIu
SGVscGVyLmhlbHBlcihkaXNhYmxlQnViYmxpbmcpOworICAgIGBgYAorICAKKyAgICBJZiB5b3Ug
bmVlZCB0aGUgZGVmYXVsdCBoYW5kbGVyIHRvIHRyaWdnZXIgeW91IHNob3VsZCBlaXRoZXIgcmVn
aXN0ZXIgeW91cgorICAgIG93biBldmVudCBoYW5kbGVyLCBvciB1c2UgZXZlbnQgbWV0aG9kcyBv
biB5b3VyIHZpZXcgY2xhc3MuIFNlZQorICAgIFsiUmVzcG9uZGluZyB0byBCcm93c2VyIEV2ZW50
cyJdKC9hcGkvY2xhc3Nlcy9FbWJlci5WaWV3Lmh0bWwjdG9jX3Jlc3BvbmRpbmctdG8tYnJvd3Nl
ci1ldmVudHMpCisgICAgaW4gdGhlIGRvY3VtZW50YXRpb24gZm9yIEVtYmVyLlZpZXcgZm9yIG1v
cmUgaW5mb3JtYXRpb24uCisgIAorICAgICMjIyBTcGVjaWZ5aW5nIERPTSBldmVudCB0eXBlCisg
IAorICAgIGB7e2FjdGlvbn19YCBoZWxwZXJzIGNhbGxlZCBpbiBlbGVtZW50IHNwYWNlIGNhbiBz
cGVjaWZ5IGFuIGV2ZW50IHR5cGUuCisgIAorICAgIEJ5IGRlZmF1bHQgdGhlIGB7e2FjdGlvbn19
YCBoZWxwZXIgcmVnaXN0ZXJzIGZvciBET00gYGNsaWNrYCBldmVudHMuIFlvdSBjYW4KKyAgICBz
dXBwbHkgYW4gYG9uYCBvcHRpb24gdG8gdGhlIGhlbHBlciB0byBzcGVjaWZ5IGEgZGlmZmVyZW50
IERPTSBldmVudCBuYW1lOgorICAKKyAgICBgYGBoYW5kbGViYXJzCisgICAgPGRpdiB7e2FjdGlv
biAiYW5BY3Rpb25OYW1lIiBvbj0iZG91YmxlQ2xpY2sifX0+CisgICAgICBjbGljayBtZQorICAg
IDwvZGl2PgorICAgIGBgYAorICAKKyAgICBTZWUgWyJFdmVudCBOYW1lcyJdKC9hcGkvY2xhc3Nl
cy9FbWJlci5WaWV3Lmh0bWwjdG9jX2V2ZW50LW5hbWVzKSBmb3IgYSBsaXN0IG9mCisgICAgYWNj
ZXB0YWJsZSBET00gZXZlbnQgbmFtZXMuCisgIAorICAgICMjIyBTcGVjaWZ5aW5nIHdoaXRlbGlz
dGVkIG1vZGlmaWVyIGtleXMKKyAgCisgICAgYHt7YWN0aW9ufX1gIGhlbHBlcnMgY2FsbGVkIGlu
IGVsZW1lbnQgc3BhY2UgY2FuIHNwZWNpZnkgbW9kaWZpZXIga2V5cy4KKyAgCisgICAgQnkgZGVm
YXVsdCB0aGUgYHt7YWN0aW9ufX1gIGhlbHBlciB3aWxsIGlnbm9yZSBjbGljayBldmVudHMgd2l0
aCBwcmVzc2VkIG1vZGlmaWVyCisgICAga2V5cy4gWW91IGNhbiBzdXBwbHkgYW4gYGFsbG93ZWRL
ZXlzYCBvcHRpb24gdG8gc3BlY2lmeSB3aGljaCBrZXlzIHNob3VsZCBub3QgYmUgaWdub3JlZC4K
KyAgCisgICAgYGBgaGFuZGxlYmFycworICAgIDxkaXYge3thY3Rpb24gImFuQWN0aW9uTmFtZSIg
YWxsb3dlZEtleXM9ImFsdCJ9fT4KKyAgICAgIGNsaWNrIG1lCisgICAgPC9kaXY+CisgICAgYGBg
CisgIAorICAgIFRoaXMgd2F5IHRoZSBhY3Rpb24gd2lsbCBmaXJlIHdoZW4gY2xpY2tpbmcgd2l0
aCB0aGUgYWx0IGtleSBwcmVzc2VkIGRvd24uCisgIAorICAgIEFsdGVybmF0aXZlbHksIHN1cHBs
eSAiYW55IiB0byB0aGUgYGFsbG93ZWRLZXlzYCBvcHRpb24gdG8gYWNjZXB0IGFueSBjb21iaW5h
dGlvbiBvZiBtb2RpZmllciBrZXlzLgorICAKKyAgICBgYGBoYW5kbGViYXJzCisgICAgPGRpdiB7
e2FjdGlvbiAiYW5BY3Rpb25OYW1lIiBhbGxvd2VkS2V5cz0iYW55In19PgorICAgICAgY2xpY2sg
bWUgd2l0aCBhbnkga2V5IHByZXNzZWQKKyAgICA8L2Rpdj4KKyAgICBgYGAKKyAgCisgICAgIyMj
IFNwZWNpZnlpbmcgYSBUYXJnZXQKKyAgCisgICAgQSBgdGFyZ2V0YCBvcHRpb24gY2FuIGJlIHBy
b3ZpZGVkIHRvIHRoZSBoZWxwZXIgdG8gY2hhbmdlCisgICAgd2hpY2ggb2JqZWN0IHdpbGwgcmVj
ZWl2ZSB0aGUgbWV0aG9kIGNhbGwuIFRoaXMgb3B0aW9uIG11c3QgYmUgYSBwYXRoCisgICAgdG8g
YW4gb2JqZWN0LCBhY2Nlc3NpYmxlIGluIHRoZSBjdXJyZW50IGNvbnRleHQ6CisgIAorICAgIGBg
YGhhbmRsZWJhcnMKKyAgICB7eyEgYXBwL3RlbXBsYXRlcy9hcHBsaWNhdGlvbi5oYnMgfX0KKyAg
ICA8ZGl2IHt7YWN0aW9uICJhbkFjdGlvbk5hbWUiIHRhcmdldD1zb21lU2VydmljZX19PgorICAg
ICAgY2xpY2sgbWUKKyAgICA8L2Rpdj4KKyAgICBgYGAKKyAgCisgICAgYGBgamF2YXNjcmlwdAor
ICAgIC8vIGFwcC9jb250cm9sbGVycy9hcHBsaWNhdGlvbi5qcworICAgIGV4cG9ydCBkZWZhdWx0
IEVtYmVyLkNvbnRyb2xsZXIuZXh0ZW5kKHsKKyAgICAgIHNvbWVTZXJ2aWNlOiBFbWJlci5pbmpl
Y3Quc2VydmljZSgpCisgICAgfSk7CisgICAgYGBgCisgIAorICAgIEBtZXRob2QgYWN0aW9uCisg
ICAgQGZvciBFbWJlci5UZW1wbGF0ZXMuaGVscGVycworICAgIEBwdWJsaWMKKyAgKi8KKworICBl
eHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAobW9ycGgsIGVudiwgc2NvcGUsIHBhcmFtcywgaGFz
aCwgdGVtcGxhdGUsIGludmVyc2UsIHZpc2l0b3IpIHsKKyAgICBpZiAobW9ycGgpIHsKKyAgICAg
IF9odG1sYmFyc1J1bnRpbWVIb29rcy5rZXl3b3JkKCdAZWxlbWVudF9hY3Rpb24nLCBtb3JwaCwg
ZW52LCBzY29wZSwgcGFyYW1zLCBoYXNoLCB0ZW1wbGF0ZSwgaW52ZXJzZSwgdmlzaXRvcik7Cisg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gX2VtYmVyUm91dGluZ0h0bWxi
YXJzS2V5d29yZHNDbG9zdXJlQWN0aW9uLmRlZmF1bHQobW9ycGgsIGVudiwgc2NvcGUsIHBhcmFt
cywgaGFzaCwgdGVtcGxhdGUsIGludmVyc2UsIHZpc2l0b3IpOworICB9OworfSk7CitlbmlmZWQo
J2VtYmVyLXJvdXRpbmctaHRtbGJhcnMva2V5d29yZHMvY2xvc3VyZS1hY3Rpb24nLCBbJ2V4cG9y
dHMnLCAnZW1iZXItbWV0YWwvc3RyZWFtcy9zdHJlYW0nLCAnZW1iZXItbWV0YWwvc3RyZWFtcy91
dGlscycsICdlbWJlci1tZXRhbC9zeW1ib2wnLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0Jywg
J2VtYmVyLWh0bWxiYXJzL2hvb2tzL3N1YmV4cHInLCAnZW1iZXItbWV0YWwvZXJyb3InLCAnZW1i
ZXItbWV0YWwvcnVuX2xvb3AnLCAnZW1iZXItbWV0YWwvaW5zdHJ1bWVudGF0aW9uJywgJ2VtYmVy
LW1ldGFsL2lzX25vbmUnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsU3RyZWFtc1N0
cmVhbSwgX2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMsIF9lbWJlck1ldGFsU3ltYm9sLCBfZW1iZXJN
ZXRhbFByb3BlcnR5X2dldCwgX2VtYmVySHRtbGJhcnNIb29rc1N1YmV4cHIsIF9lbWJlck1ldGFs
RXJyb3IsIF9lbWJlck1ldGFsUnVuX2xvb3AsIF9lbWJlck1ldGFsSW5zdHJ1bWVudGF0aW9uLCBf
ZW1iZXJNZXRhbElzX25vbmUpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIGV4cG9ydHMuZGVmYXVs
dCA9IGNsb3N1cmVBY3Rpb247CisgIHZhciBJTlZPS0UgPSBfZW1iZXJNZXRhbFN5bWJvbC5kZWZh
dWx0KCdJTlZPS0UnKTsKKyAgZXhwb3J0cy5JTlZPS0UgPSBJTlZPS0U7CisgIHZhciBBQ1RJT04g
PSBfZW1iZXJNZXRhbFN5bWJvbC5kZWZhdWx0KCdBQ1RJT04nKTsKKworICBleHBvcnRzLkFDVElP
TiA9IEFDVElPTjsKKworICBmdW5jdGlvbiBjbG9zdXJlQWN0aW9uKG1vcnBoLCBlbnYsIHNjb3Bl
LCBwYXJhbXMsIGhhc2gsIHRlbXBsYXRlLCBpbnZlcnNlLCB2aXNpdG9yKSB7CisgICAgdmFyIHMg
PSBuZXcgX2VtYmVyTWV0YWxTdHJlYW1zU3RyZWFtLlN0cmVhbShmdW5jdGlvbiAoKSB7CisgICAg
ICB2YXIgcmF3QWN0aW9uID0gcGFyYW1zWzBdOworICAgICAgdmFyIGFjdGlvbkFyZ3VtZW50cyA9
IF9lbWJlck1ldGFsU3RyZWFtc1V0aWxzLnJlYWRBcnJheShwYXJhbXMuc2xpY2UoMSwgcGFyYW1z
Lmxlbmd0aCkpOworCisgICAgICB2YXIgdGFyZ2V0ID0gdW5kZWZpbmVkLAorICAgICAgICAgIGFj
dGlvbiA9IHVuZGVmaW5lZCwKKyAgICAgICAgICB2YWx1ZVBhdGggPSB1bmRlZmluZWQ7CisKKyAg
ICAgIGlmIChfZW1iZXJNZXRhbElzX25vbmUuZGVmYXVsdChyYXdBY3Rpb24pKSB7CisgICAgICAg
IHZhciBsYWJlbCA9IF9lbWJlckh0bWxiYXJzSG9va3NTdWJleHByLmxhYmVsRm9yU3ViZXhwcihw
YXJhbXMsIGhhc2gsICdhY3Rpb24nKTsKKyAgICAgICAgdGhyb3cgbmV3IF9lbWJlck1ldGFsRXJy
b3IuZGVmYXVsdCgnQWN0aW9uIHBhc3NlZCBpcyBudWxsIG9yIHVuZGVmaW5lZCBpbiAnICsgbGFi
ZWwgKyAnIGZyb20gJyArIF9lbWJlck1ldGFsU3RyZWFtc1V0aWxzLnJlYWQoc2NvcGUuZ2V0U2Vs
ZigpKSArICcuJyk7CisgICAgICB9IGVsc2UgaWYgKHJhd0FjdGlvbltJTlZPS0VdKSB7CisgICAg
ICAgIC8vIG9uLWNoYW5nZT17e2FjdGlvbiAobXV0IG5hbWUpfX0KKyAgICAgICAgdGFyZ2V0ID0g
cmF3QWN0aW9uOworICAgICAgICBhY3Rpb24gPSByYXdBY3Rpb25bSU5WT0tFXTsKKyAgICAgIH0g
ZWxzZSB7CisgICAgICAgIC8vIG9uLWNoYW5nZT17e2FjdGlvbiBzZXROYW1lfX0KKyAgICAgICAg
Ly8gZWxlbWVudC1zcGFjZSBhY3Rpb25zIGxvb2sgdG8gImNvbnRyb2xsZXIiIHRoZW4gdGFyZ2V0
LiBIZXJlIHdlIG9ubHkKKyAgICAgICAgLy8gbG9vayB0byAidGFyZ2V0Ii4KKyAgICAgICAgdGFy
Z2V0ID0gX2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMucmVhZChzY29wZS5nZXRTZWxmKCkpOworICAg
ICAgICBhY3Rpb24gPSBfZW1iZXJNZXRhbFN0cmVhbXNVdGlscy5yZWFkKHJhd0FjdGlvbik7Cisg
ICAgICAgIHZhciBhY3Rpb25UeXBlID0gdHlwZW9mIGFjdGlvbjsKKworICAgICAgICBpZiAoYWN0
aW9uVHlwZSA9PT0gJ3N0cmluZycpIHsKKyAgICAgICAgICB2YXIgYWN0aW9uTmFtZSA9IGFjdGlv
bjsKKyAgICAgICAgICBhY3Rpb24gPSBudWxsOworICAgICAgICAgIC8vIG9uLWNoYW5nZT17e2Fj
dGlvbiAnc2V0TmFtZSd9fQorICAgICAgICAgIGlmIChoYXNoLnRhcmdldCkgeworICAgICAgICAg
ICAgLy8gb24tY2hhbmdlPXt7YWN0aW9uICdzZXROYW1lJyB0YXJnZXQ9YWx0ZXJuYXRpdmVDb21w
b25lbnR9fQorICAgICAgICAgICAgdGFyZ2V0ID0gX2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMucmVh
ZChoYXNoLnRhcmdldCk7CisgICAgICAgICAgfQorICAgICAgICAgIGlmICh0YXJnZXQuYWN0aW9u
cykgeworICAgICAgICAgICAgYWN0aW9uID0gdGFyZ2V0LmFjdGlvbnNbYWN0aW9uTmFtZV07Cisg
ICAgICAgICAgfQorCisgICAgICAgICAgaWYgKCFhY3Rpb24pIHsKKyAgICAgICAgICAgIHRocm93
IG5ldyBfZW1iZXJNZXRhbEVycm9yLmRlZmF1bHQoJ0FuIGFjdGlvbiBuYW1lZCBcJycgKyBhY3Rp
b25OYW1lICsgJ1wnIHdhcyBub3QgZm91bmQgaW4gJyArIHRhcmdldCArICcuJyk7CisgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiAmJiB0eXBlb2YgYWN0aW9uW0lOVk9LRV0g
PT09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgICB0YXJnZXQgPSBhY3Rpb247CisgICAgICAgICAg
YWN0aW9uID0gYWN0aW9uW0lOVk9LRV07CisgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uVHlwZSAh
PT0gJ2Z1bmN0aW9uJykgeworICAgICAgICAgIHRocm93IG5ldyBfZW1iZXJNZXRhbEVycm9yLmRl
ZmF1bHQoJ0FuIGFjdGlvbiBjb3VsZCBub3QgYmUgbWFkZSBmb3IgYCcgKyByYXdBY3Rpb24ubGFi
ZWwgKyAnYCBpbiAnICsgdGFyZ2V0ICsgJy4gUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3UgYXJlIHVz
aW5nIGVpdGhlciBhIHF1b3RlZCBhY3Rpb24gbmFtZSAoaS5lLiBgKGFjdGlvbiBcJycgKyByYXdB
Y3Rpb24ubGFiZWwgKyAnXCcpYCkgb3IgYSBmdW5jdGlvbiBhdmFpbGFibGUgaW4gJyArIHRhcmdl
dCArICcuJyk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKGhhc2gudmFsdWUpIHsK
KyAgICAgICAgLy8gPGJ1dHRvbiBvbi1rZXlwcmVzcz17e2FjdGlvbiAobXV0IG5hbWUpIHZhbHVl
PSJ3aGljaCJ9fQorICAgICAgICAvLyBvbi1rZXlwcmVzcyBpcyBub3QgZXZlbiBhbiBFbWJlciBm
ZWF0dXJlIHlldAorICAgICAgICB2YWx1ZVBhdGggPSBfZW1iZXJNZXRhbFN0cmVhbXNVdGlscy5y
ZWFkKGhhc2gudmFsdWUpOworICAgICAgfQorCisgICAgICByZXR1cm4gY3JlYXRlQ2xvc3VyZUFj
dGlvbih0aGlzLCB0YXJnZXQsIGFjdGlvbiwgdmFsdWVQYXRoLCBhY3Rpb25Bcmd1bWVudHMpOwor
ICAgIH0sIGZ1bmN0aW9uICgpIHsKKyAgICAgIHJldHVybiBfZW1iZXJIdG1sYmFyc0hvb2tzU3Vi
ZXhwci5sYWJlbEZvclN1YmV4cHIocGFyYW1zLCBoYXNoLCAnYWN0aW9uJyk7CisgICAgfSk7CisK
KyAgICBwYXJhbXMuZm9yRWFjaChzLmFkZERlcGVuZGVuY3ksIHMpOworICAgIE9iamVjdC5rZXlz
KGhhc2gpLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHsKKyAgICAgIHJldHVybiBzLmFkZERlcGVu
ZGVuY3koaXRlbSk7CisgICAgfSk7CisKKyAgICByZXR1cm4gczsKKyAgfQorCisgIGZ1bmN0aW9u
IGNyZWF0ZUNsb3N1cmVBY3Rpb24oc3RyZWFtLCB0YXJnZXQsIGFjdGlvbiwgdmFsdWVQYXRoLCBh
Y3Rpb25Bcmd1bWVudHMpIHsKKyAgICB2YXIgY2xvc3VyZUFjdGlvbjsKKworICAgIGlmIChhY3Rp
b25Bcmd1bWVudHMubGVuZ3RoID4gMCkgeworICAgICAgY2xvc3VyZUFjdGlvbiA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgdmFyIGFyZ3MgPSBhY3Rpb25Bcmd1bWVudHM7CisKKyAgICAgICAgZm9y
ICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHBhc3NlZEFyZ3VtZW50cyA9IEFycmF5KF9s
ZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykgeworICAgICAgICAgIHBhc3NlZEFy
Z3VtZW50c1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChwYXNzZWRBcmd1bWVudHMubGVuZ3RoID4gMCkgeworICAgICAgICAgIGFyZ3MgPSBhY3Rpb25B
cmd1bWVudHMuY29uY2F0KHBhc3NlZEFyZ3VtZW50cyk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHZhbHVlUGF0aCAmJiBhcmdzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICBhcmdzWzBdID0gX2Vt
YmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KGFyZ3NbMF0sIHZhbHVlUGF0aCk7CisgICAgICAgIH0K
KworICAgICAgICB2YXIgcGF5bG9hZCA9IHsgdGFyZ2V0OiB0YXJnZXQsIGFyZ3M6IGFyZ3MsIGxh
YmVsOiBfZW1iZXJNZXRhbFN0cmVhbXNVdGlscy5sYWJlbEZvcihzdHJlYW0pIH07CisgICAgICAg
IHJldHVybiBfZW1iZXJNZXRhbEluc3RydW1lbnRhdGlvbi5mbGFnZ2VkSW5zdHJ1bWVudCgnaW50
ZXJhY3Rpb24uZW1iZXItYWN0aW9uJywgcGF5bG9hZCwgZnVuY3Rpb24gKCkgeworICAgICAgICAg
IHJldHVybiBfZW1iZXJNZXRhbFJ1bl9sb29wLmRlZmF1bHQuam9pbi5hcHBseShfZW1iZXJNZXRh
bFJ1bl9sb29wLmRlZmF1bHQsIFt0YXJnZXQsIGFjdGlvbl0uY29uY2F0KGFyZ3MpKTsKKyAgICAg
ICAgfSk7CisgICAgICB9OworICAgIH0gZWxzZSB7CisgICAgICBjbG9zdXJlQWN0aW9uID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFy
Z3MgPSBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykgewor
ICAgICAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICh2YWx1ZVBhdGggJiYgYXJncy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgYXJn
c1swXSA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldChhcmdzWzBdLCB2YWx1ZVBhdGgpOwor
ICAgICAgICB9CisKKyAgICAgICAgdmFyIHBheWxvYWQgPSB7IHRhcmdldDogdGFyZ2V0LCBhcmdz
OiBhcmdzLCBsYWJlbDogX2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMubGFiZWxGb3Ioc3RyZWFtKSB9
OworICAgICAgICByZXR1cm4gX2VtYmVyTWV0YWxJbnN0cnVtZW50YXRpb24uZmxhZ2dlZEluc3Ry
dW1lbnQoJ2ludGVyYWN0aW9uLmVtYmVyLWFjdGlvbicsIHBheWxvYWQsIGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICByZXR1cm4gX2VtYmVyTWV0YWxSdW5fbG9vcC5kZWZhdWx0LmpvaW4uYXBwbHko
X2VtYmVyTWV0YWxSdW5fbG9vcC5kZWZhdWx0LCBbdGFyZ2V0LCBhY3Rpb25dLmNvbmNhdChhcmdz
KSk7CisgICAgICAgIH0pOworICAgICAgfTsKKyAgICB9CisKKyAgICBjbG9zdXJlQWN0aW9uW0FD
VElPTl0gPSB0cnVlOworCisgICAgcmV0dXJuIGNsb3N1cmVBY3Rpb247CisgIH0KK30pOworZW5p
ZmVkKCdlbWJlci1yb3V0aW5nLWh0bWxiYXJzL2tleXdvcmRzL2VsZW1lbnQtYWN0aW9uJywgWydl
eHBvcnRzJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLW1ldGFsL3V0aWxzJywgJ2VtYmVy
LW1ldGFsL3N0cmVhbXMvdXRpbHMnLCAnZW1iZXItbWV0YWwvcnVuX2xvb3AnLCAnZW1iZXItdmll
d3Mvc3RyZWFtcy91dGlscycsICdlbWJlci12aWV3cy9zeXN0ZW0vdXRpbHMnLCAnZW1iZXItdmll
d3Mvc3lzdGVtL2FjdGlvbl9tYW5hZ2VyJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRh
bERlYnVnLCBfZW1iZXJNZXRhbFV0aWxzLCBfZW1iZXJNZXRhbFN0cmVhbXNVdGlscywgX2VtYmVy
TWV0YWxSdW5fbG9vcCwgX2VtYmVyVmlld3NTdHJlYW1zVXRpbHMsIF9lbWJlclZpZXdzU3lzdGVt
VXRpbHMsIF9lbWJlclZpZXdzU3lzdGVtQWN0aW9uX21hbmFnZXIpIHsKKyAgJ3VzZSBzdHJpY3Qn
OworCisgIGV4cG9ydHMuZGVmYXVsdCA9IHsKKyAgICBzZXR1cFN0YXRlOiBmdW5jdGlvbiAoc3Rh
dGUsIGVudiwgc2NvcGUsIHBhcmFtcywgaGFzaCkgeworICAgICAgdmFyIGdldFN0cmVhbSA9IGVu
di5ob29rcy5nZXQ7CisgICAgICB2YXIgcmVhZCA9IGVudi5ob29rcy5nZXRWYWx1ZTsKKworICAg
ICAgdmFyIGFjdGlvbk5hbWUgPSByZWFkKHBhcmFtc1swXSk7CisKKyAgICAgIF9lbWJlck1ldGFs
RGVidWcuYXNzZXJ0KCdZb3Ugc3BlY2lmaWVkIGEgcXVvdGVsZXNzIHBhdGggdG8gdGhlIHt7YWN0
aW9ufX0gaGVscGVyICcgKyAnd2hpY2ggZGlkIG5vdCByZXNvbHZlIHRvIGFuIGFjdGlvbiBuYW1l
IChhIHN0cmluZykuICcgKyAnUGVyaGFwcyB5b3UgbWVhbnQgdG8gdXNlIGEgcXVvdGVkIGFjdGlv
bk5hbWU/IChlLmcuIHt7YWN0aW9uIFwnc2F2ZVwnfX0pLicsIHR5cGVvZiBhY3Rpb25OYW1lID09
PSAnc3RyaW5nJyB8fCB0eXBlb2YgYWN0aW9uTmFtZSA9PT0gJ2Z1bmN0aW9uJyk7CisKKyAgICAg
IHZhciBhY3Rpb25BcmdzID0gW107CisgICAgICBmb3IgKHZhciBpID0gMSwgbCA9IHBhcmFtcy5s
ZW5ndGg7IGkgPCBsOyBpKyspIHsKKyAgICAgICAgYWN0aW9uQXJncy5wdXNoKF9lbWJlclZpZXdz
U3RyZWFtc1V0aWxzLnJlYWRVbndyYXBwZWRNb2RlbChwYXJhbXNbaV0pKTsKKyAgICAgIH0KKwor
ICAgICAgdmFyIHRhcmdldDsKKyAgICAgIGlmIChoYXNoLnRhcmdldCkgeworICAgICAgICBpZiAo
dHlwZW9mIGhhc2gudGFyZ2V0ID09PSAnc3RyaW5nJykgeworICAgICAgICAgIHRhcmdldCA9IHJl
YWQoZ2V0U3RyZWFtKGVudiwgc2NvcGUsIGhhc2gudGFyZ2V0KSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgdGFyZ2V0ID0gcmVhZChoYXNoLnRhcmdldCk7CisgICAgICAgIH0KKyAgICAg
IH0gZWxzZSB7CisgICAgICAgIHRhcmdldCA9IHJlYWQoc2NvcGUuZ2V0TG9jYWwoJ2NvbnRyb2xs
ZXInKSkgfHwgcmVhZChzY29wZS5nZXRTZWxmKCkpOworICAgICAgfQorCisgICAgICByZXR1cm4g
eyBhY3Rpb25OYW1lOiBhY3Rpb25OYW1lLCBhY3Rpb25BcmdzOiBhY3Rpb25BcmdzLCB0YXJnZXQ6
IHRhcmdldCB9OworICAgIH0sCisKKyAgICBpc1N0YWJsZTogZnVuY3Rpb24gKHN0YXRlLCBlbnYs
IHNjb3BlLCBwYXJhbXMsIGhhc2gpIHsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0sCisKKyAg
ICByZW5kZXI6IGZ1bmN0aW9uIChub2RlLCBlbnYsIHNjb3BlLCBwYXJhbXMsIGhhc2gsIHRlbXBs
YXRlLCBpbnZlcnNlLCB2aXNpdG9yKSB7CisgICAgICB2YXIgYWN0aW9uSWQgPSBlbnYuZG9tLmdl
dEF0dHJpYnV0ZShub2RlLmVsZW1lbnQsICdkYXRhLWVtYmVyLWFjdGlvbicpIHx8IF9lbWJlck1l
dGFsVXRpbHMudXVpZCgpOworCisgICAgICBBY3Rpb25IZWxwZXIucmVnaXN0ZXJBY3Rpb24oewor
ICAgICAgICBhY3Rpb25JZDogYWN0aW9uSWQsCisgICAgICAgIG5vZGU6IG5vZGUsCisgICAgICAg
IGV2ZW50TmFtZTogaGFzaC5vbiB8fCAnY2xpY2snLAorICAgICAgICBidWJibGVzOiBoYXNoLmJ1
YmJsZXMsCisgICAgICAgIHByZXZlbnREZWZhdWx0OiBoYXNoLnByZXZlbnREZWZhdWx0LAorICAg
ICAgICB3aXRoS2V5Q29kZTogaGFzaC53aXRoS2V5Q29kZSwKKyAgICAgICAgYWxsb3dlZEtleXM6
IGhhc2guYWxsb3dlZEtleXMKKyAgICAgIH0pOworCisgICAgICBub2RlLmNsZWFudXAgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIEFjdGlvbkhlbHBlci51bnJlZ2lzdGVyQWN0aW9uKGFjdGlvbklk
KTsKKyAgICAgIH07CisKKyAgICAgIGVudi5kb20uc2V0QXR0cmlidXRlKG5vZGUuZWxlbWVudCwg
J2RhdGEtZW1iZXItYWN0aW9uJywgYWN0aW9uSWQpOworICAgIH0KKyAgfTsKKyAgdmFyIEFjdGlv
bkhlbHBlciA9IHt9OworCisgIGV4cG9ydHMuQWN0aW9uSGVscGVyID0gQWN0aW9uSGVscGVyOwor
ICAvLyByZWdpc3RlcmVkQWN0aW9ucyBpcyByZS1leHBvcnRlZCBmb3IgY29tcGF0aWJpbGl0eSB3
aXRoIG9sZGVyIHBsdWdpbnMKKyAgLy8gdGhhdCB3ZXJlIHVzaW5nIHRoaXMgdW5kb2N1bWVudGVk
IEFQSS4KKyAgQWN0aW9uSGVscGVyLnJlZ2lzdGVyZWRBY3Rpb25zID0gX2VtYmVyVmlld3NTeXN0
ZW1BY3Rpb25fbWFuYWdlci5kZWZhdWx0LnJlZ2lzdGVyZWRBY3Rpb25zOworCisgIEFjdGlvbkhl
bHBlci5yZWdpc3RlckFjdGlvbiA9IGZ1bmN0aW9uIChfcmVmKSB7CisgICAgdmFyIGFjdGlvbklk
ID0gX3JlZi5hY3Rpb25JZDsKKyAgICB2YXIgbm9kZSA9IF9yZWYubm9kZTsKKyAgICB2YXIgZXZl
bnROYW1lID0gX3JlZi5ldmVudE5hbWU7CisgICAgdmFyIHByZXZlbnREZWZhdWx0ID0gX3JlZi5w
cmV2ZW50RGVmYXVsdDsKKyAgICB2YXIgYnViYmxlcyA9IF9yZWYuYnViYmxlczsKKyAgICB2YXIg
YWxsb3dlZEtleXMgPSBfcmVmLmFsbG93ZWRLZXlzOworCisgICAgdmFyIGFjdGlvbnMgPSBfZW1i
ZXJWaWV3c1N5c3RlbUFjdGlvbl9tYW5hZ2VyLmRlZmF1bHQucmVnaXN0ZXJlZEFjdGlvbnNbYWN0
aW9uSWRdOworCisgICAgaWYgKCFhY3Rpb25zKSB7CisgICAgICBhY3Rpb25zID0gX2VtYmVyVmll
d3NTeXN0ZW1BY3Rpb25fbWFuYWdlci5kZWZhdWx0LnJlZ2lzdGVyZWRBY3Rpb25zW2FjdGlvbklk
XSA9IFtdOworICAgIH0KKworICAgIGFjdGlvbnMucHVzaCh7CisgICAgICBldmVudE5hbWU6IGV2
ZW50TmFtZSwKKyAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIChldmVudCkgeworICAgICAgICBpZiAo
IWlzQWxsb3dlZEV2ZW50KGV2ZW50LCBfZW1iZXJNZXRhbFN0cmVhbXNVdGlscy5yZWFkKGFsbG93
ZWRLZXlzKSkpIHsKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChfZW1iZXJNZXRhbFN0cmVhbXNVdGlscy5yZWFkKHByZXZlbnREZWZhdWx0KSAhPT0gZmFs
c2UpIHsKKyAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKF9lbWJlck1ldGFsU3RyZWFtc1V0aWxzLnJlYWQoYnViYmxlcykgPT09IGZhbHNl
KSB7CisgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgICAgIH0KKworICAg
ICAgICB2YXIgX25vZGUkZ2V0U3RhdGUgPSBub2RlLmdldFN0YXRlKCk7CisKKyAgICAgICAgdmFy
IHRhcmdldCA9IF9ub2RlJGdldFN0YXRlLnRhcmdldDsKKyAgICAgICAgdmFyIGFjdGlvbk5hbWUg
PSBfbm9kZSRnZXRTdGF0ZS5hY3Rpb25OYW1lOworICAgICAgICB2YXIgYWN0aW9uQXJncyA9IF9u
b2RlJGdldFN0YXRlLmFjdGlvbkFyZ3M7CisKKyAgICAgICAgX2VtYmVyTWV0YWxSdW5fbG9vcC5k
ZWZhdWx0KGZ1bmN0aW9uIHJ1blJlZ2lzdGVyZWRBY3Rpb24oKSB7CisgICAgICAgICAgaWYgKHR5
cGVvZiBhY3Rpb25OYW1lID09PSAnZnVuY3Rpb24nKSB7CisgICAgICAgICAgICBhY3Rpb25OYW1l
LmFwcGx5KHRhcmdldCwgYWN0aW9uQXJncyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgfQorICAgICAgICAgIGlmICh0YXJnZXQuc2VuZCkgeworICAgICAgICAgICAgdGFyZ2V0LnNl
bmQuYXBwbHkodGFyZ2V0LCBbYWN0aW9uTmFtZV0uY29uY2F0KGFjdGlvbkFyZ3MpKTsKKyAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1RoZSBh
Y3Rpb24gXCcnICsgYWN0aW9uTmFtZSArICdcJyBkaWQgbm90IGV4aXN0IG9uICcgKyB0YXJnZXQs
IHR5cGVvZiB0YXJnZXRbYWN0aW9uTmFtZV0gPT09ICdmdW5jdGlvbicpOworCisgICAgICAgICAg
ICB0YXJnZXRbYWN0aW9uTmFtZV0uYXBwbHkodGFyZ2V0LCBhY3Rpb25BcmdzKTsKKyAgICAgICAg
ICB9CisgICAgICAgIH0pOworICAgICAgfQorICAgIH0pOworCisgICAgcmV0dXJuIGFjdGlvbklk
OworICB9OworCisgIEFjdGlvbkhlbHBlci51bnJlZ2lzdGVyQWN0aW9uID0gZnVuY3Rpb24gKGFj
dGlvbklkKSB7CisgICAgZGVsZXRlIF9lbWJlclZpZXdzU3lzdGVtQWN0aW9uX21hbmFnZXIuZGVm
YXVsdC5yZWdpc3RlcmVkQWN0aW9uc1thY3Rpb25JZF07CisgIH07CisKKyAgdmFyIE1PRElGSUVS
UyA9IFsnYWx0JywgJ3NoaWZ0JywgJ21ldGEnLCAnY3RybCddOworICB2YXIgUE9JTlRFUl9FVkVO
VF9UWVBFX1JFR0VYID0gL15jbGlja3xtb3VzZXx0b3VjaC87CisKKyAgZnVuY3Rpb24gaXNBbGxv
d2VkRXZlbnQoZXZlbnQsIGFsbG93ZWRLZXlzKSB7CisgICAgaWYgKHR5cGVvZiBhbGxvd2VkS2V5
cyA9PT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgIGlmIChQT0lOVEVSX0VWRU5UX1RZUEVfUkVHRVgu
dGVzdChldmVudC50eXBlKSkgeworICAgICAgICByZXR1cm4gX2VtYmVyVmlld3NTeXN0ZW1VdGls
cy5pc1NpbXBsZUNsaWNrKGV2ZW50KTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGFsbG93ZWRL
ZXlzID0gJyc7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKGFsbG93ZWRLZXlzLmluZGV4T2Yo
J2FueScpID49IDApIHsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGZvciAodmFy
IGkgPSAwLCBsID0gTU9ESUZJRVJTLmxlbmd0aDsgaSA8IGw7IGkrKykgeworICAgICAgaWYgKGV2
ZW50W01PRElGSUVSU1tpXSArICdLZXknXSAmJiBhbGxvd2VkS2V5cy5pbmRleE9mKE1PRElGSUVS
U1tpXSkgPT09IC0xKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorfSk7CitlbmlmZWQoJ2VtYmVyLXJvdXRpbmctaHRtbGJh
cnMva2V5d29yZHMvcmVuZGVyJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2Vt
YmVyLW1ldGFsL3Byb3BlcnR5X2dldCcsICdlbWJlci1tZXRhbC9lbXB0eV9vYmplY3QnLCAnZW1i
ZXItbWV0YWwvZXJyb3InLCAnZW1iZXItbWV0YWwvc3RyZWFtcy91dGlscycsICdlbWJlci1ydW50
aW1lL3N5c3RlbS9zdHJpbmcnLCAnZW1iZXItcm91dGluZy9zeXN0ZW0vZ2VuZXJhdGVfY29udHJv
bGxlcicsICdlbWJlci1odG1sYmFycy9ub2RlLW1hbmFnZXJzL3ZpZXctbm9kZS1tYW5hZ2VyJ10s
IGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJNZXRhbFByb3BlcnR5
X2dldCwgX2VtYmVyTWV0YWxFbXB0eV9vYmplY3QsIF9lbWJlck1ldGFsRXJyb3IsIF9lbWJlck1l
dGFsU3RyZWFtc1V0aWxzLCBfZW1iZXJSdW50aW1lU3lzdGVtU3RyaW5nLCBfZW1iZXJSb3V0aW5n
U3lzdGVtR2VuZXJhdGVfY29udHJvbGxlciwgX2VtYmVySHRtbGJhcnNOb2RlTWFuYWdlcnNWaWV3
Tm9kZU1hbmFnZXIpIHsKKyAgLyoqCisgIEBtb2R1bGUgZW1iZXIKKyAgQHN1Ym1vZHVsZSBlbWJl
ci10ZW1wbGF0ZXMKKyAgKi8KKworICAndXNlIHN0cmljdCc7CisKKyAgLyoqCisgICAgQ2FsbGlu
ZyBgYHt7cmVuZGVyfX1gYCBmcm9tIHdpdGhpbiBhIHRlbXBsYXRlIHdpbGwgaW5zZXJ0IGFub3Ro
ZXIKKyAgICB0ZW1wbGF0ZSB0aGF0IG1hdGNoZXMgdGhlIHByb3ZpZGVkIG5hbWUuIFRoZSBpbnNl
cnRlZCB0ZW1wbGF0ZSB3aWxsCisgICAgYWNjZXNzIGl0cyBwcm9wZXJ0aWVzIG9uIGl0cyBvd24g
Y29udHJvbGxlciAocmF0aGVyIHRoYW4gdGhlIGNvbnRyb2xsZXIKKyAgICBvZiB0aGUgcGFyZW50
IHRlbXBsYXRlKS4KKyAgICBJZiBhIHZpZXcgY2xhc3Mgd2l0aCB0aGUgc2FtZSBuYW1lIGV4aXN0
cywgdGhlIHZpZXcgY2xhc3MgYWxzbyB3aWxsIGJlIHVzZWQuCisgICAgTm90ZTogQSBnaXZlbiBj
b250cm9sbGVyIG1heSBvbmx5IGJlIHVzZWQgKm9uY2UqIGluIHlvdXIgYXBwIGluIHRoaXMgbWFu
bmVyLgorICAgIEEgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBjb250cm9sbGVyIHdpbGwgYmUg
Y3JlYXRlZCBmb3IgeW91LgorICAgIEV4YW1wbGU6CisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAg
ICBBcHAuTmF2aWdhdGlvbkNvbnRyb2xsZXIgPSBFbWJlci5Db250cm9sbGVyLmV4dGVuZCh7Cisg
ICAgICB3aG86ICJ3b3JsZCIKKyAgICB9KTsKKyAgICBgYGAKKyAgCisgICAgYGBgaGFuZGxlYmFy
cworICAgIDwhLS0gbmF2aWdhdGlvbi5oYnMgLS0+CisgICAgSGVsbG8sIHt7d2hvfX0uCisgICAg
YGBgCisgIAorICAgIGBgYGhhbmRsZWJhcnMKKyAgICA8IS0tIGFwcGxpY2F0aW9uLmhicyAtLT4K
KyAgICA8aDE+TXkgZ3JlYXQgYXBwPC9oMT4KKyAgICB7e3JlbmRlciAibmF2aWdhdGlvbiJ9fQor
ICAgIGBgYAorICAKKyAgICBgYGBodG1sCisgICAgPGgxPk15IGdyZWF0IGFwcDwvaDE+CisgICAg
PGRpdiBjbGFzcz0nZW1iZXItdmlldyc+CisgICAgICBIZWxsbywgd29ybGQuCisgICAgPC9kaXY+
CisgICAgYGBgCisgIAorICAgIE9wdGlvbmFsbHkgeW91IG1heSBwcm92aWRlIGEgc2Vjb25kIGFy
Z3VtZW50OiBhIHByb3BlcnR5IHBhdGgKKyAgICB0aGF0IHdpbGwgYmUgYm91bmQgdG8gdGhlIGBt
b2RlbGAgcHJvcGVydHkgb2YgdGhlIGNvbnRyb2xsZXIuCisgICAgSWYgYSBgbW9kZWxgIHByb3Bl
cnR5IHBhdGggaXMgc3BlY2lmaWVkLCB0aGVuIGEgbmV3IGluc3RhbmNlIG9mIHRoZQorICAgIGNv
bnRyb2xsZXIgd2lsbCBiZSBjcmVhdGVkIGFuZCBge3tyZW5kZXJ9fWAgY2FuIGJlIHVzZWQgbXVs
dGlwbGUgdGltZXMKKyAgICB3aXRoIHRoZSBzYW1lIG5hbWUuCisgIAorICAgIEZvciBleGFtcGxl
IGlmIHlvdSBoYWQgdGhpcyBgYXV0aG9yYCB0ZW1wbGF0ZS4KKyAgCisgICAgYGBgaGFuZGxlYmFy
cworICAgIDxkaXYgY2xhc3M9ImF1dGhvciI+CisgICAgICBXcml0dGVuIGJ5IHt7Zmlyc3ROYW1l
fX0ge3tsYXN0TmFtZX19LgorICAgICAgVG90YWwgUG9zdHM6IHt7cG9zdENvdW50fX0KKyAgICA8
L2Rpdj4KKyAgICBgYGAKKyAgCisgICAgWW91IGNvdWxkIHJlbmRlciBpdCBpbnNpZGUgdGhlIGBw
b3N0YCB0ZW1wbGF0ZSB1c2luZyB0aGUgYHJlbmRlcmAgaGVscGVyLgorICAKKyAgICBgYGBoYW5k
bGViYXJzCisgICAgPGRpdiBjbGFzcz0icG9zdCI+CisgICAgICA8aDE+e3t0aXRsZX19PC9oMT4K
KyAgICAgIDxkaXY+e3tib2R5fX08L2Rpdj4KKyAgICAgIHt7cmVuZGVyICJhdXRob3IiIGF1dGhv
cn19CisgICAgPC9kaXY+CisgICAgYGBgCisgIAorICAgIEBtZXRob2QgcmVuZGVyCisgICAgQGZv
ciBFbWJlci5UZW1wbGF0ZXMuaGVscGVycworICAgIEBwYXJhbSB7U3RyaW5nfSBuYW1lCisgICAg
QHBhcmFtIHtPYmplY3Q/fSBjb250ZXh0CisgICAgQHBhcmFtIHtIYXNofSBvcHRpb25zCisgICAg
QHJldHVybiB7U3RyaW5nfSBIVE1MIHN0cmluZworICAgIEBwdWJsaWMKKyAgKi8KKyAgZXhwb3J0
cy5kZWZhdWx0ID0geworICAgIHdpbGxSZW5kZXI6IGZ1bmN0aW9uIChyZW5kZXJOb2RlLCBlbnYp
IHsKKyAgICAgIGlmIChlbnYudmlldy5vd25lclZpZXcuX291dGxldHMpIHsKKyAgICAgICAgLy8g
V2UgbWFrZSBzdXJlIHdlIHdpbGwgZ2V0IGRpcnRpZWQgd2hlbiBvdXRsZXQgc3RhdGUgY2hhbmdl
cy4KKyAgICAgICAgZW52LnZpZXcub3duZXJWaWV3Ll9vdXRsZXRzLnB1c2gocmVuZGVyTm9kZSk7
CisgICAgICB9CisgICAgfSwKKworICAgIHNldHVwU3RhdGU6IGZ1bmN0aW9uIChwcmV2U3RhdGUs
IGVudiwgc2NvcGUsIHBhcmFtcywgaGFzaCkgeworICAgICAgdmFyIG5hbWUgPSBwYXJhbXNbMF07
CisKKyAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdUaGUgZmlyc3QgYXJndW1lbnQgb2Yg
e3tyZW5kZXJ9fSBtdXN0IGJlIHF1b3RlZCwgZS5nLiB7e3JlbmRlciAic2lkZWJhciJ9fS4nLCB0
eXBlb2YgbmFtZSA9PT0gJ3N0cmluZycpOworCisgICAgICByZXR1cm4geworICAgICAgICBwYXJl
bnRWaWV3OiBlbnYudmlldywKKyAgICAgICAgbWFuYWdlcjogcHJldlN0YXRlLm1hbmFnZXIsCisg
ICAgICAgIGNvbnRyb2xsZXI6IHByZXZTdGF0ZS5jb250cm9sbGVyLAorICAgICAgICBjaGlsZE91
dGxldFN0YXRlOiBjaGlsZE91dGxldFN0YXRlKG5hbWUsIGVudikKKyAgICAgIH07CisgICAgfSwK
KworICAgIGNoaWxkRW52OiBmdW5jdGlvbiAoc3RhdGUsIGVudikgeworICAgICAgcmV0dXJuIGVu
di5jaGlsZFdpdGhPdXRsZXRTdGF0ZShzdGF0ZS5jaGlsZE91dGxldFN0YXRlKTsKKyAgICB9LAor
CisgICAgaXNTdGFibGU6IGZ1bmN0aW9uIChsYXN0U3RhdGUsIG5leHRTdGF0ZSkgeworICAgICAg
cmV0dXJuIGlzU3RhYmxlKGxhc3RTdGF0ZS5jaGlsZE91dGxldFN0YXRlLCBuZXh0U3RhdGUuY2hp
bGRPdXRsZXRTdGF0ZSk7CisgICAgfSwKKworICAgIGlzRW1wdHk6IGZ1bmN0aW9uIChzdGF0ZSkg
eworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0sCisKKyAgICByZW5kZXI6IGZ1bmN0aW9uIChu
b2RlLCBlbnYsIHNjb3BlLCBwYXJhbXMsIGhhc2gsIHRlbXBsYXRlLCBpbnZlcnNlLCB2aXNpdG9y
KSB7CisgICAgICB2YXIgc3RhdGUgPSBub2RlLmdldFN0YXRlKCk7CisgICAgICB2YXIgbmFtZSA9
IHBhcmFtc1swXTsKKyAgICAgIHZhciBjb250ZXh0ID0gcGFyYW1zWzFdOworCisgICAgICB2YXIg
b3duZXIgPSBlbnYub3duZXI7CisKKyAgICAgIC8vIFRoZSByZW5kZXIga2V5d29yZCBwcmVzdW1l
cyBpdCBjYW4gd29yayB3aXRob3V0IGEgcm91dGVyLiBUaGlzIGlzIHJlYWxseQorICAgICAgLy8g
b25seSB0byBzYXRpc2Z5IHRoZSB0ZXN0OgorICAgICAgLy8KKyAgICAgIC8vICAgICB7e3ZpZXd9
fSBzaG91bGQgbm90IG92ZXJyaWRlIGNsYXNzIGJpbmRpbmdzIGRlZmluZWQgb24gYSBjaGlsZCB2
aWV3IgorICAgICAgLy8KKyAgICAgIHZhciByb3V0ZXIgPSBvd25lci5sb29rdXAoJ3JvdXRlcjpt
YWluJyk7CisKKyAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdUaGUgc2Vjb25kIGFyZ3Vt
ZW50IG9mIHt7cmVuZGVyfX0gbXVzdCBiZSBhIHBhdGgsIGUuZy4ge3tyZW5kZXIgInBvc3QiIHBv
c3R9fS4nLCBwYXJhbXMubGVuZ3RoIDwgMiB8fCBfZW1iZXJNZXRhbFN0cmVhbXNVdGlscy5pc1N0
cmVhbShwYXJhbXNbMV0pKTsKKworICAgICAgaWYgKHBhcmFtcy5sZW5ndGggPT09IDEpIHsKKyAg
ICAgICAgLy8gdXNlIHRoZSBzaW5nbGV0b24gY29udHJvbGxlcgorICAgICAgICBfZW1iZXJNZXRh
bERlYnVnLmFzc2VydCgnWW91IGNhbiBvbmx5IHVzZSB0aGUge3tyZW5kZXJ9fSBoZWxwZXIgb25j
ZSB3aXRob3V0IGEgbW9kZWwgb2JqZWN0IGFzICcgKyAnaXRzIHNlY29uZCBhcmd1bWVudCwgYXMg
aW4ge3tyZW5kZXIgInBvc3QiIHBvc3R9fS4nLCAhcm91dGVyIHx8ICFyb3V0ZXIuX2xvb2t1cEFj
dGl2ZUNvbXBvbmVudE5vZGUobmFtZSkpOworICAgICAgfSBlbHNlIGlmIChwYXJhbXMubGVuZ3Ro
ICE9PSAyKSB7CisgICAgICAgIHRocm93IG5ldyBfZW1iZXJNZXRhbEVycm9yLmRlZmF1bHQoJ1lv
dSBtdXN0IHBhc3MgYSB0ZW1wbGF0ZU5hbWUgdG8gcmVuZGVyJyk7CisgICAgICB9CisKKyAgICAg
IHZhciB0ZW1wbGF0ZU5hbWUgPSAndGVtcGxhdGU6JyArIG5hbWU7CisgICAgICBfZW1iZXJNZXRh
bERlYnVnLmFzc2VydCgnWW91IHVzZWQgYHt7cmVuZGVyIFwnJyArIG5hbWUgKyAnXCd9fWAsIGJ1
dCBcJycgKyBuYW1lICsgJ1wnIGNhbiBub3QgYmUgJyArICdmb3VuZCBhcyBlaXRoZXIgYSB0ZW1w
bGF0ZSBvciBhIHZpZXcuJywgb3duZXIuaGFzUmVnaXN0cmF0aW9uKCd2aWV3OicgKyBuYW1lKSB8
fCBvd25lci5oYXNSZWdpc3RyYXRpb24odGVtcGxhdGVOYW1lKSB8fCAhIXRlbXBsYXRlKTsKKwor
ICAgICAgdmFyIHZpZXcgPSBvd25lci5sb29rdXAoJ3ZpZXc6JyArIG5hbWUpOworICAgICAgaWYg
KCF2aWV3KSB7CisgICAgICAgIHZpZXcgPSBvd25lci5sb29rdXAoJ3ZpZXc6ZGVmYXVsdCcpOwor
ICAgICAgfQorICAgICAgdmFyIHZpZXdIYXNUZW1wbGF0ZVNwZWNpZmllZCA9IHZpZXcgJiYgISFf
ZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodmlldywgJ3RlbXBsYXRlJyk7CisgICAgICBpZiAo
IXRlbXBsYXRlICYmICF2aWV3SGFzVGVtcGxhdGVTcGVjaWZpZWQpIHsKKyAgICAgICAgdGVtcGxh
dGUgPSBvd25lci5sb29rdXAodGVtcGxhdGVOYW1lKTsKKyAgICAgIH0KKworICAgICAgaWYgKHZp
ZXcpIHsKKyAgICAgICAgdmlldy5vd25lclZpZXcgPSBlbnYudmlldy5vd25lclZpZXc7CisgICAg
ICB9CisKKyAgICAgIC8vIHByb3ZpZGUgY29udHJvbGxlciBvdmVycmlkZQorICAgICAgdmFyIGNv
bnRyb2xsZXJOYW1lOworICAgICAgdmFyIGNvbnRyb2xsZXJGdWxsTmFtZTsKKworICAgICAgaWYg
KGhhc2guY29udHJvbGxlcikgeworICAgICAgICBjb250cm9sbGVyTmFtZSA9IGhhc2guY29udHJv
bGxlcjsKKyAgICAgICAgY29udHJvbGxlckZ1bGxOYW1lID0gJ2NvbnRyb2xsZXI6JyArIGNvbnRy
b2xsZXJOYW1lOworICAgICAgICBkZWxldGUgaGFzaC5jb250cm9sbGVyOworCisgICAgICAgIF9l
bWJlck1ldGFsRGVidWcuYXNzZXJ0KCdUaGUgY29udHJvbGxlciBuYW1lIHlvdSBzdXBwbGllZCBc
JycgKyBjb250cm9sbGVyTmFtZSArICdcJyAnICsgJ2RpZCBub3QgcmVzb2x2ZSB0byBhIGNvbnRy
b2xsZXIuJywgb3duZXIuaGFzUmVnaXN0cmF0aW9uKGNvbnRyb2xsZXJGdWxsTmFtZSkpOworICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgY29udHJvbGxlck5hbWUgPSBuYW1lOworICAgICAgICBjb250
cm9sbGVyRnVsbE5hbWUgPSAnY29udHJvbGxlcjonICsgY29udHJvbGxlck5hbWU7CisgICAgICB9
CisKKyAgICAgIHZhciB0YXJnZXQgPSByb3V0ZXI7CisgICAgICB2YXIgY29udHJvbGxlcjsKKwor
ICAgICAgLy8gY2hvb3NlIG5hbWUKKyAgICAgIGlmIChwYXJhbXMubGVuZ3RoID4gMSkgeworICAg
ICAgICB2YXIgZmFjdG9yeSA9IG93bmVyLl9sb29rdXBGYWN0b3J5KGNvbnRyb2xsZXJGdWxsTmFt
ZSkgfHwgX2VtYmVyUm91dGluZ1N5c3RlbUdlbmVyYXRlX2NvbnRyb2xsZXIuZ2VuZXJhdGVDb250
cm9sbGVyRmFjdG9yeShvd25lciwgY29udHJvbGxlck5hbWUpOworCisgICAgICAgIGNvbnRyb2xs
ZXIgPSBmYWN0b3J5LmNyZWF0ZSh7CisgICAgICAgICAgbW9kZWw6IF9lbWJlck1ldGFsU3RyZWFt
c1V0aWxzLnJlYWQoY29udGV4dCksCisgICAgICAgICAgdGFyZ2V0OiB0YXJnZXQKKyAgICAgICAg
fSk7CisKKyAgICAgICAgbm9kZS5hZGREZXN0cnVjdGlvbihjb250cm9sbGVyKTsKKyAgICAgIH0g
ZWxzZSB7CisgICAgICAgIGNvbnRyb2xsZXIgPSBvd25lci5sb29rdXAoY29udHJvbGxlckZ1bGxO
YW1lKSB8fCBfZW1iZXJSb3V0aW5nU3lzdGVtR2VuZXJhdGVfY29udHJvbGxlci5kZWZhdWx0KG93
bmVyLCBjb250cm9sbGVyTmFtZSk7CisKKyAgICAgICAgY29udHJvbGxlci5zZXRQcm9wZXJ0aWVz
KHsKKyAgICAgICAgICB0YXJnZXQ6IHRhcmdldAorICAgICAgICB9KTsKKyAgICAgIH0KKworICAg
ICAgaWYgKHZpZXcpIHsKKyAgICAgICAgdmlldy5zZXQoJ2NvbnRyb2xsZXInLCBjb250cm9sbGVy
KTsKKyAgICAgIH0KKyAgICAgIHN0YXRlLmNvbnRyb2xsZXIgPSBjb250cm9sbGVyOworCisgICAg
ICBoYXNoLnZpZXdOYW1lID0gX2VtYmVyUnVudGltZVN5c3RlbVN0cmluZy5jYW1lbGl6ZShuYW1l
KTsKKworICAgICAgaWYgKHRlbXBsYXRlICYmIHRlbXBsYXRlLnJhdykgeworICAgICAgICB0ZW1w
bGF0ZSA9IHRlbXBsYXRlLnJhdzsKKyAgICAgIH0KKworICAgICAgdmFyIG9wdGlvbnMgPSB7Cisg
ICAgICAgIGxheW91dDogbnVsbCwKKyAgICAgICAgc2VsZjogY29udHJvbGxlcgorICAgICAgfTsK
KworICAgICAgaWYgKHZpZXcpIHsKKyAgICAgICAgb3B0aW9ucy5jb21wb25lbnQgPSB2aWV3Owor
ICAgICAgfQorCisgICAgICB2YXIgbm9kZU1hbmFnZXIgPSBfZW1iZXJIdG1sYmFyc05vZGVNYW5h
Z2Vyc1ZpZXdOb2RlTWFuYWdlci5kZWZhdWx0LmNyZWF0ZShub2RlLCBlbnYsIGhhc2gsIG9wdGlv
bnMsIHN0YXRlLnBhcmVudFZpZXcsIG51bGwsIG51bGwsIHRlbXBsYXRlKTsKKyAgICAgIHN0YXRl
Lm1hbmFnZXIgPSBub2RlTWFuYWdlcjsKKworICAgICAgaWYgKHJvdXRlciAmJiBwYXJhbXMubGVu
Z3RoID09PSAxKSB7CisgICAgICAgIHJvdXRlci5fY29ubmVjdEFjdGl2ZUNvbXBvbmVudE5vZGUo
bmFtZSwgbm9kZU1hbmFnZXIpOworICAgICAgfQorCisgICAgICBub2RlTWFuYWdlci5yZW5kZXIo
ZW52LCBoYXNoLCB2aXNpdG9yKTsKKyAgICB9LAorCisgICAgcmVyZW5kZXI6IGZ1bmN0aW9uIChu
b2RlLCBlbnYsIHNjb3BlLCBwYXJhbXMsIGhhc2gsIHRlbXBsYXRlLCBpbnZlcnNlLCB2aXNpdG9y
KSB7CisgICAgICBpZiAocGFyYW1zLmxlbmd0aCA+IDEpIHsKKyAgICAgICAgdmFyIG1vZGVsID0g
X2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMucmVhZChwYXJhbXNbMV0pOworICAgICAgICBub2RlLmdl
dFN0YXRlKCkuY29udHJvbGxlci5zZXQoJ21vZGVsJywgbW9kZWwpOworICAgICAgfQorICAgIH0K
KyAgfTsKKworICBmdW5jdGlvbiBjaGlsZE91dGxldFN0YXRlKG5hbWUsIGVudikgeworICAgIHZh
ciB0b3BMZXZlbCA9IGVudi52aWV3Lm93bmVyVmlldzsKKyAgICBpZiAoIXRvcExldmVsIHx8ICF0
b3BMZXZlbC5vdXRsZXRTdGF0ZSkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZhciBv
dXRsZXRTdGF0ZSA9IHRvcExldmVsLm91dGxldFN0YXRlOworICAgIGlmICghb3V0bGV0U3RhdGUu
bWFpbikgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZhciBzZWxlY3RlZE91dGxldFN0
YXRlID0gb3V0bGV0U3RhdGUubWFpbi5vdXRsZXRzWydfX2VtYmVyX29ycGhhbnNfXyddOworICAg
IGlmICghc2VsZWN0ZWRPdXRsZXRTdGF0ZSkgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgICB2
YXIgbWF0Y2hlZCA9IHNlbGVjdGVkT3V0bGV0U3RhdGUub3V0bGV0c1tuYW1lXTsKKyAgICBpZiAo
bWF0Y2hlZCkgeworICAgICAgdmFyIGNoaWxkU3RhdGUgPSBuZXcgX2VtYmVyTWV0YWxFbXB0eV9v
YmplY3QuZGVmYXVsdCgpOworICAgICAgY2hpbGRTdGF0ZVttYXRjaGVkLnJlbmRlci5vdXRsZXRd
ID0gbWF0Y2hlZDsKKyAgICAgIG1hdGNoZWQud2FzVXNlZCA9IHRydWU7CisgICAgICByZXR1cm4g
Y2hpbGRTdGF0ZTsKKyAgICB9CisgIH0KKworICBmdW5jdGlvbiBpc1N0YWJsZShhLCBiKSB7Cisg
ICAgaWYgKCFhICYmICFiKSB7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKCFh
IHx8ICFiKSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGZvciAodmFyIG91dGxl
dE5hbWUgaW4gYSkgeworICAgICAgaWYgKCFpc1N0YWJsZU91dGxldChhW291dGxldE5hbWVdLCBi
W291dGxldE5hbWVdKSkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgfQor
ICAgIHJldHVybiB0cnVlOworICB9CisKKyAgZnVuY3Rpb24gaXNTdGFibGVPdXRsZXQoYSwgYikg
eworICAgIGlmICghYSAmJiAhYikgeworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlm
ICghYSB8fCAhYikgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBhID0gYS5yZW5k
ZXI7CisgICAgYiA9IGIucmVuZGVyOworICAgIGZvciAodmFyIGtleSBpbiBhKSB7CisgICAgICBp
ZiAoYS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7CisgICAgICAgIC8vIG5hbWUgaXMgb25seSBoZXJl
IGZvciBsb2dnaW5nICYgZGVidWdnaW5nLiBJZiB0d28gZGlmZmVyZW50CisgICAgICAgIC8vIG5h
bWVzIHJlc3VsdCBpbiBvdGhlcndpc2UgaWRlbnRpY2FsIHN0YXRlcywgdGhleSdyZSBzdGlsbAor
ICAgICAgICAvLyBpZGVudGljYWwuCisgICAgICAgIGlmIChhW2tleV0gIT09IGJba2V5XSAmJiBr
ZXkgIT09ICduYW1lJykgeworICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorfSk7CitlbmlmZWQoJ2VtYmVyLXJv
dXRpbmctdmlld3MvY29tcG9uZW50cy9saW5rLXRvJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFs
L2ZlYXR1cmVzJywgJ2VtYmVyLW1ldGFsL2xvZ2dlcicsICdlbWJlci1tZXRhbC9kZWJ1ZycsICdl
bWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQnLCAnZW1iZXItbWV0YWwvY29tcHV0ZWQnLCAnZW1iZXIt
bWV0YWwvY29tcHV0ZWRfbWFjcm9zJywgJ2VtYmVyLXZpZXdzL3N5c3RlbS91dGlscycsICdlbWJl
ci12aWV3cy9jb21wb25lbnRzL2NvbXBvbmVudCcsICdlbWJlci1ydW50aW1lL2luamVjdCcsICdl
bWJlci1ydW50aW1lL3N5c3RlbS9zZXJ2aWNlJywgJ2VtYmVyLXJ1bnRpbWUvbWl4aW5zL2NvbnRy
b2xsZXInLCAnZW1iZXItaHRtbGJhcnMvbm9kZS1tYW5hZ2Vycy9jb21wb25lbnQtbm9kZS1tYW5h
Z2VyJywgJ2VtYmVyLWh0bWxiYXJzL3RlbXBsYXRlcy9saW5rLXRvJywgJ3JlcXVpcmUnXSwgZnVu
Y3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsRmVhdHVyZXMsIF9lbWJlck1ldGFsTG9nZ2VyLCBf
ZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJNZXRhbFByb3BlcnR5X2dldCwgX2VtYmVyTWV0YWxDb21w
dXRlZCwgX2VtYmVyTWV0YWxDb21wdXRlZF9tYWNyb3MsIF9lbWJlclZpZXdzU3lzdGVtVXRpbHMs
IF9lbWJlclZpZXdzQ29tcG9uZW50c0NvbXBvbmVudCwgX2VtYmVyUnVudGltZUluamVjdCwgX2Vt
YmVyUnVudGltZVN5c3RlbVNlcnZpY2UsIF9lbWJlclJ1bnRpbWVNaXhpbnNDb250cm9sbGVyLCBf
ZW1iZXJIdG1sYmFyc05vZGVNYW5hZ2Vyc0NvbXBvbmVudE5vZGVNYW5hZ2VyLCBfZW1iZXJIdG1s
YmFyc1RlbXBsYXRlc0xpbmtUbywgX3JlcXVpcmUpIHsKKyAgLyoqCisgIEBtb2R1bGUgZW1iZXIK
KyAgQHN1Ym1vZHVsZSBlbWJlci10ZW1wbGF0ZXMKKyAgKi8KKworICAvKioKKyAgICBUaGUgYHt7
bGluay10b319YCBjb21wb25lbnQgcmVuZGVycyBhIGxpbmsgdG8gdGhlIHN1cHBsaWVkCisgICAg
YHJvdXRlTmFtZWAgcGFzc2luZyBhbiBvcHRpb25hbGx5IHN1cHBsaWVkIG1vZGVsIHRvIHRoZQor
ICAgIHJvdXRlIGFzIGl0cyBgbW9kZWxgIGNvbnRleHQgb2YgdGhlIHJvdXRlLiBUaGUgYmxvY2sK
KyAgICBmb3IgYHt7bGluay10b319YCBiZWNvbWVzIHRoZSBpbm5lckhUTUwgb2YgdGhlIHJlbmRl
cmVkCisgICAgZWxlbWVudDoKKyAgCisgICAgYGBgaGFuZGxlYmFycworICAgIHt7I2xpbmstdG8g
J3Bob3RvR2FsbGVyeSd9fQorICAgICAgR3JlYXQgSGFtc3RlciBQaG90b3MKKyAgICB7ey9saW5r
LXRvfX0KKyAgICBgYGAKKyAgCisgICAgWW91IGNhbiBhbHNvIHVzZSBhbiBpbmxpbmUgZm9ybSBv
ZiBge3tsaW5rLXRvfX1gIGNvbXBvbmVudCBieQorICAgIHBhc3NpbmcgdGhlIGxpbmsgdGV4dCBh
cyB0aGUgZmlyc3QgYXJndW1lbnQKKyAgICB0byB0aGUgY29tcG9uZW50OgorICAKKyAgICBgYGBo
YW5kbGViYXJzCisgICAge3tsaW5rLXRvICdHcmVhdCBIYW1zdGVyIFBob3RvcycgJ3Bob3RvR2Fs
bGVyeSd9fQorICAgIGBgYAorICAKKyAgICBCb3RoIHdpbGwgcmVzdWx0IGluOgorICAKKyAgICBg
YGBodG1sCisgICAgPGEgaHJlZj0iL2hhbXN0ZXItcGhvdG9zIj4KKyAgICAgIEdyZWF0IEhhbXN0
ZXIgUGhvdG9zCisgICAgPC9hPgorICAgIGBgYAorICAKKyAgICAjIyMgU3VwcGx5aW5nIGEgdGFn
TmFtZQorICAgIEJ5IGRlZmF1bHQgYHt7bGluay10b319YCByZW5kZXJzIGFuIGA8YT5gIGVsZW1l
bnQuIFRoaXMgY2FuCisgICAgYmUgb3ZlcnJpZGRlbiBmb3IgYSBzaW5nbGUgdXNlIG9mIGB7e2xp
bmstdG99fWAgYnkgc3VwcGx5aW5nCisgICAgYSBgdGFnTmFtZWAgb3B0aW9uOgorICAKKyAgICBg
YGBoYW5kbGViYXJzCisgICAge3sjbGluay10byAncGhvdG9HYWxsZXJ5JyB0YWdOYW1lPSJsaSJ9
fQorICAgICAgR3JlYXQgSGFtc3RlciBQaG90b3MKKyAgICB7ey9saW5rLXRvfX0KKyAgICBgYGAK
KyAgCisgICAgYGBgaHRtbAorICAgIDxsaT4KKyAgICAgIEdyZWF0IEhhbXN0ZXIgUGhvdG9zCisg
ICAgPC9saT4KKyAgICBgYGAKKyAgCisgICAgVG8gb3ZlcnJpZGUgdGhpcyBvcHRpb24gZm9yIHlv
dXIgZW50aXJlIGFwcGxpY2F0aW9uLCBzZWUKKyAgICAiT3ZlcnJpZGluZyBBcHBsaWNhdGlvbi13
aWRlIERlZmF1bHRzIi4KKyAgCisgICAgIyMjIERpc2FibGluZyB0aGUgYGxpbmstdG9gIGNvbXBv
bmVudAorICAgIEJ5IGRlZmF1bHQgYHt7bGluay10b319YCBpcyBlbmFibGVkLgorICAgIGFueSBw
YXNzZWQgdmFsdWUgdG8gdGhlIGBkaXNhYmxlZGAgY29tcG9uZW50IHByb3BlcnR5IHdpbGwgZGlz
YWJsZQorICAgIHRoZSBgbGluay10b2AgY29tcG9uZW50LgorICAKKyAgICBzdGF0aWMgdXNlOiB0
aGUgYGRpc2FibGVkYCBvcHRpb246CisgIAorICAgIGBgYGhhbmRsZWJhcnMKKyAgICB7eyNsaW5r
LXRvICdwaG90b0dhbGxlcnknIGRpc2FibGVkPXRydWV9fQorICAgICAgR3JlYXQgSGFtc3RlciBQ
aG90b3MKKyAgICB7ey9saW5rLXRvfX0KKyAgICBgYGAKKyAgCisgICAgZHluYW1pYyB1c2U6IHRo
ZSBgZGlzYWJsZWRXaGVuYCBvcHRpb246CisgIAorICAgIGBgYGhhbmRsZWJhcnMKKyAgICB7eyNs
aW5rLXRvICdwaG90b0dhbGxlcnknIGRpc2FibGVkV2hlbj1jb250cm9sbGVyLnNvbWVQcm9wZXJ0
eX19CisgICAgICBHcmVhdCBIYW1zdGVyIFBob3RvcworICAgIHt7L2xpbmstdG99fQorICAgIGBg
YAorICAKKyAgICBhbnkgcGFzc2VkIHZhbHVlIHRvIGBkaXNhYmxlZGAgd2lsbCBkaXNhYmxlIGl0
IGV4Y2VwdCBgdW5kZWZpbmVkYC4KKyAgICB0byBlbnN1cmUgdGhhdCBvbmx5IGB0cnVlYCBkaXNh
YmxlIHRoZSBgbGluay10b2AgY29tcG9uZW50IHlvdSBjYW4KKyAgICBvdmVycmlkZSB0aGUgZ2xv
YmFsIGJlaGF2aW91ciBvZiBgRW1iZXIuTGlua0NvbXBvbmVudGAuCisgIAorICAgIGBgYGphdmFz
Y3JpcHQKKyAgICBFbWJlci5MaW5rQ29tcG9uZW50LnJlb3Blbih7CisgICAgICBkaXNhYmxlZDog
RW1iZXIuY29tcHV0ZWQoZnVuY3Rpb24oa2V5LCB2YWx1ZSkgeworICAgICAgICBpZiAodmFsdWUg
IT09IHVuZGVmaW5lZCkgeworICAgICAgICAgIHRoaXMuc2V0KCdfaXNEaXNhYmxlZCcsIHZhbHVl
ID09PSB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsdWUgPT09IHRydWUgPyBn
ZXQodGhpcywgJ2Rpc2FibGVkQ2xhc3MnKSA6IGZhbHNlOworICAgICAgfSkKKyAgICB9KTsKKyAg
ICBgYGAKKyAgCisgICAgc2VlICJPdmVycmlkaW5nIEFwcGxpY2F0aW9uLXdpZGUgRGVmYXVsdHMi
IGZvciBtb3JlLgorICAKKyAgICAjIyMgSGFuZGxpbmcgYGhyZWZgCisgICAgYHt7bGluay10b319
YCB3aWxsIHVzZSB5b3VyIGFwcGxpY2F0aW9uJ3MgUm91dGVyIHRvCisgICAgZmlsbCB0aGUgZWxl
bWVudCdzIGBocmVmYCBwcm9wZXJ0eSB3aXRoIGEgdXJsIHRoYXQKKyAgICBtYXRjaGVzIHRoZSBw
YXRoIHRvIHRoZSBzdXBwbGllZCBgcm91dGVOYW1lYCBmb3IgeW91cgorICAgIHJvdXRlcidzIGNv
bmZpZ3VyZWQgYExvY2F0aW9uYCBzY2hlbWUsIHdoaWNoIGRlZmF1bHRzCisgICAgdG8gRW1iZXIu
SGFzaExvY2F0aW9uLgorICAKKyAgICAjIyMgSGFuZGxpbmcgY3VycmVudCByb3V0ZQorICAgIGB7
e2xpbmstdG99fWAgd2lsbCBhcHBseSBhIENTUyBjbGFzcyBuYW1lIG9mICdhY3RpdmUnCisgICAg
d2hlbiB0aGUgYXBwbGljYXRpb24ncyBjdXJyZW50IHJvdXRlIG1hdGNoZXMKKyAgICB0aGUgc3Vw
cGxpZWQgcm91dGVOYW1lLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGFwcGxpY2F0aW9uJ3MKKyAgICBj
dXJyZW50IHJvdXRlIGlzICdwaG90b0dhbGxlcnkucmVjZW50JyB0aGUgZm9sbG93aW5nCisgICAg
dXNlIG9mIGB7e2xpbmstdG99fWA6CisgIAorICAgIGBgYGhhbmRsZWJhcnMKKyAgICB7eyNsaW5r
LXRvICdwaG90b0dhbGxlcnkucmVjZW50J319CisgICAgICBHcmVhdCBIYW1zdGVyIFBob3Rvcwor
ICAgIHt7L2xpbmstdG99fQorICAgIGBgYAorICAKKyAgICB3aWxsIHJlc3VsdCBpbgorICAKKyAg
ICBgYGBodG1sCisgICAgPGEgaHJlZj0iL2hhbXN0ZXItcGhvdG9zL3RoaXMtd2VlayIgY2xhc3M9
ImFjdGl2ZSI+CisgICAgICBHcmVhdCBIYW1zdGVyIFBob3RvcworICAgIDwvYT4KKyAgICBgYGAK
KyAgCisgICAgVGhlIENTUyBjbGFzcyBuYW1lIHVzZWQgZm9yIGFjdGl2ZSBjbGFzc2VzIGNhbiBi
ZSBjdXN0b21pemVkCisgICAgZm9yIGEgc2luZ2xlIHVzZSBvZiBge3tsaW5rLXRvfX1gIGJ5IHBh
c3NpbmcgYW4gYGFjdGl2ZUNsYXNzYAorICAgIG9wdGlvbjoKKyAgCisgICAgYGBgaGFuZGxlYmFy
cworICAgIHt7I2xpbmstdG8gJ3Bob3RvR2FsbGVyeS5yZWNlbnQnIGFjdGl2ZUNsYXNzPSJjdXJy
ZW50LXVybCJ9fQorICAgICAgR3JlYXQgSGFtc3RlciBQaG90b3MKKyAgICB7ey9saW5rLXRvfX0K
KyAgICBgYGAKKyAgCisgICAgYGBgaHRtbAorICAgIDxhIGhyZWY9Ii9oYW1zdGVyLXBob3Rvcy90
aGlzLXdlZWsiIGNsYXNzPSJjdXJyZW50LXVybCI+CisgICAgICBHcmVhdCBIYW1zdGVyIFBob3Rv
cworICAgIDwvYT4KKyAgICBgYGAKKyAgCisgICAgVG8gb3ZlcnJpZGUgdGhpcyBvcHRpb24gZm9y
IHlvdXIgZW50aXJlIGFwcGxpY2F0aW9uLCBzZWUKKyAgICAiT3ZlcnJpZGluZyBBcHBsaWNhdGlv
bi13aWRlIERlZmF1bHRzIi4KKyAgCisgICAgIyMjIEtlZXBpbmcgYSBsaW5rIGFjdGl2ZSBmb3Ig
b3RoZXIgcm91dGVzCisgIAorICAgIElmIHlvdSBuZWVkIGEgbGluayB0byBiZSAnYWN0aXZlJyBl
dmVuIHdoZW4gaXQgZG9lc24ndCBtYXRjaAorICAgIHRoZSBjdXJyZW50IHJvdXRlLCB5b3UgY2Fu
IHVzZSB0aGUgYGN1cnJlbnQtd2hlbmAgYXJndW1lbnQuCisgIAorICAgIGBgYGhhbmRsZWJhcnMK
KyAgICB7eyNsaW5rLXRvICdwaG90b0dhbGxlcnknIGN1cnJlbnQtd2hlbj0ncGhvdG9zJ319Cisg
ICAgICBQaG90byBHYWxsZXJ5CisgICAge3svbGluay10b319CisgICAgYGBgCisgIAorICAgIFRo
aXMgbWF5IGJlIGhlbHBmdWwgZm9yIGtlZXBpbmcgbGlua3MgYWN0aXZlIGZvcjoKKyAgCisgICAg
KiBub24tbmVzdGVkIHJvdXRlcyB0aGF0IGFyZSBsb2dpY2FsbHkgcmVsYXRlZAorICAgICogc29t
ZSBzZWNvbmRhcnkgbWVudSBhcHByb2FjaGVzCisgICAgKiAndG9wIG5hdmlnYXRpb24nIHdpdGgg
J3N1YiBuYXZpZ2F0aW9uJyBzY2VuYXJpb3MKKyAgCisgICAgQSBsaW5rIHdpbGwgYmUgYWN0aXZl
IGlmIGBjdXJyZW50LXdoZW5gIGlzIGB0cnVlYCBvciB0aGUgY3VycmVudAorICAgIHJvdXRlIGlz
IHRoZSByb3V0ZSB0aGlzIGxpbmsgd291bGQgdHJhbnNpdGlvbiB0by4KKyAgCisgICAgVG8gbWF0
Y2ggbXVsdGlwbGUgcm91dGVzICdzcGFjZS1zZXBhcmF0ZScgdGhlIHJvdXRlczoKKyAgCisgICAg
YGBgaGFuZGxlYmFycworICAgIHt7I2xpbmstdG8gJ2dhbGxlcnknIGN1cnJlbnQtd2hlbj0ncGhv
dG9zIGRyYXdpbmdzIHBhaW50aW5ncyd9fQorICAgICAgQXJ0IEdhbGxlcnkKKyAgICB7ey9saW5r
LXRvfX0KKyAgICBgYGAKKyAgCisgICAgIyMjIFN1cHBseWluZyBhIG1vZGVsCisgICAgQW4gb3B0
aW9uYWwgbW9kZWwgYXJndW1lbnQgY2FuIGJlIHVzZWQgZm9yIHJvdXRlcyB3aG9zZQorICAgIHBh
dGhzIGNvbnRhaW4gZHluYW1pYyBzZWdtZW50cy4gVGhpcyBhcmd1bWVudCB3aWxsIGJlY29tZQor
ICAgIHRoZSBtb2RlbCBjb250ZXh0IG9mIHRoZSBsaW5rZWQgcm91dGU6CisgIAorICAgIGBgYGph
dmFzY3JpcHQKKyAgICBSb3V0ZXIubWFwKGZ1bmN0aW9uKCkgeworICAgICAgdGhpcy5yb3V0ZSgi
cGhvdG9HYWxsZXJ5Iiwge3BhdGg6ICJoYW1zdGVyLXBob3Rvcy86cGhvdG9faWQifSk7CisgICAg
fSk7CisgICAgYGBgCisgIAorICAgIGBgYGhhbmRsZWJhcnMKKyAgICB7eyNsaW5rLXRvICdwaG90
b0dhbGxlcnknIGFQaG90b319CisgICAgICB7e2FQaG90by50aXRsZX19CisgICAge3svbGluay10
b319CisgICAgYGBgCisgIAorICAgIGBgYGh0bWwKKyAgICA8YSBocmVmPSIvaGFtc3Rlci1waG90
b3MvNDIiPgorICAgICAgVG9tc3RlcgorICAgIDwvYT4KKyAgICBgYGAKKyAgCisgICAgIyMjIFN1
cHBseWluZyBtdWx0aXBsZSBtb2RlbHMKKyAgICBGb3IgZGVlcC1saW5raW5nIHRvIHJvdXRlIHBh
dGhzIHRoYXQgY29udGFpbiBtdWx0aXBsZQorICAgIGR5bmFtaWMgc2VnbWVudHMsIG11bHRpcGxl
IG1vZGVsIGFyZ3VtZW50cyBjYW4gYmUgdXNlZC4KKyAgICBBcyB0aGUgcm91dGVyIHRyYW5zaXRp
b25zIHRocm91Z2ggdGhlIHJvdXRlIHBhdGgsIGVhY2gKKyAgICBzdXBwbGllZCBtb2RlbCBhcmd1
bWVudCB3aWxsIGJlY29tZSB0aGUgY29udGV4dCBmb3IgdGhlCisgICAgcm91dGUgd2l0aCB0aGUg
ZHluYW1pYyBzZWdtZW50czoKKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIFJvdXRlci5tYXAo
ZnVuY3Rpb24oKSB7CisgICAgICB0aGlzLnJvdXRlKCJwaG90b0dhbGxlcnkiLCB7IHBhdGg6ICJo
YW1zdGVyLXBob3Rvcy86cGhvdG9faWQiIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLnJv
dXRlKCJjb21tZW50Iiwge3BhdGg6ICJjb21tZW50cy86Y29tbWVudF9pZCJ9KTsKKyAgICAgIH0p
OworICAgIH0pOworICAgIGBgYAorICAgIFRoaXMgYXJndW1lbnQgd2lsbCBiZWNvbWUgdGhlIG1v
ZGVsIGNvbnRleHQgb2YgdGhlIGxpbmtlZCByb3V0ZToKKyAgCisgICAgYGBgaGFuZGxlYmFycwor
ICAgIHt7I2xpbmstdG8gJ3Bob3RvR2FsbGVyeS5jb21tZW50JyBhUGhvdG8gY29tbWVudH19Cisg
ICAgICB7e2NvbW1lbnQuYm9keX19CisgICAge3svbGluay10b319CisgICAgYGBgCisgIAorICAg
IGBgYGh0bWwKKyAgICA8YSBocmVmPSIvaGFtc3Rlci1waG90b3MvNDIvY29tbWVudHMvNzE4Ij4K
KyAgICAgIEErKysgd291bGQgc251Z2dsZSBhZ2Fpbi4KKyAgICA8L2E+CisgICAgYGBgCisgIAor
ICAgICMjIyBTdXBwbHlpbmcgYW4gZXhwbGljaXQgZHluYW1pYyBzZWdtZW50IHZhbHVlCisgICAg
SWYgeW91IGRvbid0IGhhdmUgYSBtb2RlbCBvYmplY3QgYXZhaWxhYmxlIHRvIHBhc3MgdG8gYHt7
bGluay10b319YCwKKyAgICBhbiBvcHRpb25hbCBzdHJpbmcgb3IgaW50ZWdlciBhcmd1bWVudCBj
YW4gYmUgcGFzc2VkIGZvciByb3V0ZXMgd2hvc2UKKyAgICBwYXRocyBjb250YWluIGR5bmFtaWMg
c2VnbWVudHMuIFRoaXMgYXJndW1lbnQgd2lsbCBiZWNvbWUgdGhlIHZhbHVlCisgICAgb2YgdGhl
IGR5bmFtaWMgc2VnbWVudDoKKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIFJvdXRlci5tYXAo
ZnVuY3Rpb24oKSB7CisgICAgICB0aGlzLnJvdXRlKCJwaG90b0dhbGxlcnkiLCB7IHBhdGg6ICJo
YW1zdGVyLXBob3Rvcy86cGhvdG9faWQiIH0pOworICAgIH0pOworICAgIGBgYAorICAKKyAgICBg
YGBoYW5kbGViYXJzCisgICAge3sjbGluay10byAncGhvdG9HYWxsZXJ5JyBhUGhvdG9JZH19Cisg
ICAgICB7e2FQaG90by50aXRsZX19CisgICAge3svbGluay10b319CisgICAgYGBgCisgIAorICAg
IGBgYGh0bWwKKyAgICA8YSBocmVmPSIvaGFtc3Rlci1waG90b3MvNDIiPgorICAgICAgVG9tc3Rl
cgorICAgIDwvYT4KKyAgICBgYGAKKyAgCisgICAgV2hlbiB0cmFuc2l0aW9uaW5nIGludG8gdGhl
IGxpbmtlZCByb3V0ZSwgdGhlIGBtb2RlbGAgaG9vayB3aWxsCisgICAgYmUgdHJpZ2dlcmVkIHdp
dGggcGFyYW1ldGVycyBpbmNsdWRpbmcgdGhpcyBwYXNzZWQgaWRlbnRpZmllci4KKyAgCisgICAg
IyMjIEFsbG93aW5nIERlZmF1bHQgQWN0aW9uCisgIAorICAgQnkgZGVmYXVsdCB0aGUgYHt7bGlu
ay10b319YCBjb21wb25lbnQgcHJldmVudHMgdGhlIGRlZmF1bHQgYnJvd3NlciBhY3Rpb24KKyAg
IGJ5IGNhbGxpbmcgYHByZXZlbnREZWZhdWx0KClgIGFzIHRoaXMgc29ydCBvZiBhY3Rpb24gYnVi
YmxpbmcgaXMgbm9ybWFsbHkKKyAgIGhhbmRsZWQgaW50ZXJuYWxseSBhbmQgd2UgZG8gbm90IHdh
bnQgdG8gdGFrZSB0aGUgYnJvd3NlciB0byBhIG5ldyBVUkwgKGZvcgorICAgZXhhbXBsZSkuCisg
IAorICAgSWYgeW91IG5lZWQgdG8gb3ZlcnJpZGUgdGhpcyBiZWhhdmlvciBzcGVjaWZ5IGBwcmV2
ZW50RGVmYXVsdD1mYWxzZWAgaW4KKyAgIHlvdXIgdGVtcGxhdGU6CisgIAorICAgIGBgYGhhbmRs
ZWJhcnMKKyAgICB7eyNsaW5rLXRvICdwaG90b0dhbGxlcnknIGFQaG90b0lkIHByZXZlbnREZWZh
dWx0PWZhbHNlfX0KKyAgICAgIHt7YVBob3RvSWQudGl0bGV9fQorICAgIHt7L2xpbmstdG99fQor
ICAgIGBgYAorICAKKyAgICAjIyMgT3ZlcnJpZGluZyBhdHRyaWJ1dGVzCisgICAgWW91IGNhbiBv
dmVycmlkZSBhbnkgZ2l2ZW4gcHJvcGVydHkgb2YgdGhlIGBFbWJlci5MaW5rQ29tcG9uZW50YAor
ICAgIHRoYXQgaXMgZ2VuZXJhdGVkIGJ5IHRoZSBge3tsaW5rLXRvfX1gIGNvbXBvbmVudCBieSBw
YXNzaW5nCisgICAga2V5L3ZhbHVlIHBhaXJzLCBsaWtlIHNvOgorICAKKyAgICBgYGBoYW5kbGVi
YXJzCisgICAge3sjbGluay10byAgYVBob3RvIHRhZ05hbWU9J2xpJyB0aXRsZT0nRm9sbG93aW5n
IHRoaXMgbGluayB3aWxsIGNoYW5nZSB5b3VyIGxpZmUnIGNsYXNzTmFtZXM9J3BpYyBzd2VldCd9
fQorICAgICAgVWgtbWF6aW5nIQorICAgIHt7L2xpbmstdG99fQorICAgIGBgYAorICAKKyAgICBT
ZWUgW0VtYmVyLkxpbmtDb21wb25lbnRdKC9hcGkvY2xhc3Nlcy9FbWJlci5MaW5rQ29tcG9uZW50
Lmh0bWwpIGZvciBhCisgICAgY29tcGxldGUgbGlzdCBvZiBvdmVycmlkZWFibGUgcHJvcGVydGll
cy4gQmUgc3VyZSB0byBhbHNvCisgICAgY2hlY2sgb3V0IGluaGVyaXRlZCBwcm9wZXJ0aWVzIG9m
IGBMaW5rQ29tcG9uZW50YC4KKyAgCisgICAgIyMjIE92ZXJyaWRpbmcgQXBwbGljYXRpb24td2lk
ZSBEZWZhdWx0cworICAgIGBge3tsaW5rLXRvfX1gYCBjcmVhdGVzIGFuIGluc3RhbmNlIG9mIGBF
bWJlci5MaW5rQ29tcG9uZW50YAorICAgIGZvciByZW5kZXJpbmcuIFRvIG92ZXJyaWRlIG9wdGlv
bnMgZm9yIHlvdXIgZW50aXJlCisgICAgYXBwbGljYXRpb24sIHJlb3BlbiBgRW1iZXIuTGlua0Nv
bXBvbmVudGAgYW5kIHN1cHBseSB0aGUKKyAgICBkZXNpcmVkIHZhbHVlczoKKyAgCisgICAgYGBg
IGphdmFzY3JpcHQKKyAgICBFbWJlci5MaW5rQ29tcG9uZW50LnJlb3Blbih7CisgICAgICBhY3Rp
dmVDbGFzczogImlzLWFjdGl2ZSIsCisgICAgICB0YWdOYW1lOiAnbGknCisgICAgfSkKKyAgICBg
YGAKKyAgCisgICAgSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBl
dmVudCBpbgorICAgIHRoaXMgbWFubmVyOgorICAKKyAgICBgYGAgamF2YXNjcmlwdAorICAgIEVt
YmVyLkxpbmtDb21wb25lbnQucmVvcGVuKHsKKyAgICAgIGV2ZW50TmFtZTogJ2N1c3RvbUV2ZW50
TmFtZScKKyAgICB9KTsKKyAgICBgYGAKKyAgCisgICAgQG1ldGhvZCBsaW5rLXRvCisgICAgQGZv
ciBFbWJlci5UZW1wbGF0ZXMuaGVscGVycworICAgIEBwYXJhbSB7U3RyaW5nfSByb3V0ZU5hbWUK
KyAgICBAcGFyYW0ge09iamVjdH0gW2NvbnRleHRdKgorICAgIEBwYXJhbSBbb3B0aW9uc10ge09i
amVjdH0gSGFuZGxlYmFycyBrZXkvdmFsdWUgcGFpcnMgb2Ygb3B0aW9ucywgeW91IGNhbiBvdmVy
cmlkZSBhbnkgcHJvcGVydHkgb2YgRW1iZXIuTGlua0NvbXBvbmVudAorICAgIEByZXR1cm4ge1N0
cmluZ30gSFRNTCBzdHJpbmcKKyAgICBAc2VlIHtFbWJlci5MaW5rQ29tcG9uZW50fQorICAgIEBw
dWJsaWMKKyAgKi8KKworICAvKioKKyAgQG1vZHVsZSBlbWJlcgorICBAc3VibW9kdWxlIGVtYmVy
LXJvdXRpbmctdmlld3MKKyAgKi8KKworICAndXNlIHN0cmljdCc7CisKKyAgdmFyIGxheW91dCA9
IF9lbWJlckh0bWxiYXJzVGVtcGxhdGVzTGlua1RvLmRlZmF1bHQ7CisKKyAgLyoqCisgICAgYEVt
YmVyLkxpbmtDb21wb25lbnRgIHJlbmRlcnMgYW4gZWxlbWVudCB3aG9zZSBgY2xpY2tgIGV2ZW50
IHRyaWdnZXJzIGEKKyAgICB0cmFuc2l0aW9uIG9mIHRoZSBhcHBsaWNhdGlvbidzIGluc3RhbmNl
IG9mIGBFbWJlci5Sb3V0ZXJgIHRvCisgICAgYSBzdXBwbGllZCByb3V0ZSBieSBuYW1lLgorICAK
KyAgICBgRW1iZXIuTGlua0NvbXBvbmVudGAgY29tcG9uZW50cyBhcmUgaW52b2tlZCB3aXRoIHt7
I2xpbmstdG99fS4gUHJvcGVydGllcworICAgIG9mIHRoaXMgY2xhc3MgY2FuIGJlIG92ZXJyaWRk
ZW4gd2l0aCBgcmVvcGVuYCB0byBjdXN0b21pemUgYXBwbGljYXRpb24td2lkZQorICAgIGJlaGF2
aW9yLgorICAKKyAgICBAY2xhc3MgTGlua0NvbXBvbmVudAorICAgIEBuYW1lc3BhY2UgRW1iZXIK
KyAgICBAZXh0ZW5kcyBFbWJlci5Db21wb25lbnQKKyAgICBAc2VlIHtFbWJlci5UZW1wbGF0ZXMu
aGVscGVycy5saW5rLXRvfQorICAgIEBwcml2YXRlCisgICoqLworICB2YXIgTGlua0NvbXBvbmVu
dCA9IF9lbWJlclZpZXdzQ29tcG9uZW50c0NvbXBvbmVudC5kZWZhdWx0LmV4dGVuZCh7CisgICAg
bGF5b3V0OiBsYXlvdXQsCisKKyAgICB0YWdOYW1lOiAnYScsCisKKyAgICAvKioKKyAgICAgIEBk
ZXByZWNhdGVkIFVzZSBjdXJyZW50LXdoZW4gaW5zdGVhZC4KKyAgICAgIEBwcm9wZXJ0eSBjdXJy
ZW50V2hlbgorICAgICAgQHByaXZhdGUKKyAgICAqLworICAgIGN1cnJlbnRXaGVuOiBfZW1iZXJN
ZXRhbENvbXB1dGVkX21hY3Jvcy5kZXByZWNhdGluZ0FsaWFzKCdjdXJyZW50LXdoZW4nLCB7IGlk
OiAnZW1iZXItcm91dGluZy12aWV3LmRlcHJlY2F0ZWQtY3VycmVudC13aGVuJywgdW50aWw6ICcz
LjAuMCcgfSksCisKKyAgICAvKioKKyAgICAgIFVzZWQgdG8gZGV0ZXJtaW5lIHdoZW4gdGhpcyBg
TGlua0NvbXBvbmVudGAgaXMgYWN0aXZlLgorICAgICAgIEBwcm9wZXJ0eSBjdXJyZW50V2hlbgor
ICAgICAgQHB1YmxpYworICAgICovCisgICAgJ2N1cnJlbnQtd2hlbic6IG51bGwsCisKKyAgICAv
KioKKyAgICAgIFNldHMgdGhlIGB0aXRsZWAgYXR0cmlidXRlIG9mIHRoZSBgTGlua0NvbXBvbmVu
dGAncyBIVE1MIGVsZW1lbnQuCisgICAgICAgQHByb3BlcnR5IHRpdGxlCisgICAgICBAZGVmYXVs
dCBudWxsCisgICAgICBAcHVibGljCisgICAgKiovCisgICAgdGl0bGU6IG51bGwsCisKKyAgICAv
KioKKyAgICAgIFNldHMgdGhlIGByZWxgIGF0dHJpYnV0ZSBvZiB0aGUgYExpbmtDb21wb25lbnRg
J3MgSFRNTCBlbGVtZW50LgorICAgICAgIEBwcm9wZXJ0eSByZWwKKyAgICAgIEBkZWZhdWx0IG51
bGwKKyAgICAgIEBwdWJsaWMKKyAgICAqKi8KKyAgICByZWw6IG51bGwsCisKKyAgICAvKioKKyAg
ICAgIFNldHMgdGhlIGB0YWJpbmRleGAgYXR0cmlidXRlIG9mIHRoZSBgTGlua0NvbXBvbmVudGAn
cyBIVE1MIGVsZW1lbnQuCisgICAgICAgQHByb3BlcnR5IHRhYmluZGV4CisgICAgICBAZGVmYXVs
dCBudWxsCisgICAgICBAcHVibGljCisgICAgKiovCisgICAgdGFiaW5kZXg6IG51bGwsCisKKyAg
ICAvKioKKyAgICAgIFNldHMgdGhlIGB0YXJnZXRgIGF0dHJpYnV0ZSBvZiB0aGUgYExpbmtDb21w
b25lbnRgJ3MgSFRNTCBlbGVtZW50LgorICAgICAgIEBzaW5jZSAxLjguMAorICAgICAgQHByb3Bl
cnR5IHRhcmdldAorICAgICAgQGRlZmF1bHQgbnVsbAorICAgICAgQHB1YmxpYworICAgICoqLwor
ICAgIHRhcmdldDogbnVsbCwKKworICAgIC8qKgorICAgICAgVGhlIENTUyBjbGFzcyB0byBhcHBs
eSB0byBgTGlua0NvbXBvbmVudGAncyBlbGVtZW50IHdoZW4gaXRzIGBhY3RpdmVgCisgICAgICBw
cm9wZXJ0eSBpcyBgdHJ1ZWAuCisgICAgICAgQHByb3BlcnR5IGFjdGl2ZUNsYXNzCisgICAgICBA
dHlwZSBTdHJpbmcKKyAgICAgIEBkZWZhdWx0IGFjdGl2ZQorICAgICAgQHByaXZhdGUKKyAgICAq
Ki8KKyAgICBhY3RpdmVDbGFzczogJ2FjdGl2ZScsCisKKyAgICAvKioKKyAgICAgIFRoZSBDU1Mg
Y2xhc3MgdG8gYXBwbHkgdG8gYExpbmtDb21wb25lbnRgJ3MgZWxlbWVudCB3aGVuIGl0cyBgbG9h
ZGluZ2AKKyAgICAgIHByb3BlcnR5IGlzIGB0cnVlYC4KKyAgICAgICBAcHJvcGVydHkgbG9hZGlu
Z0NsYXNzCisgICAgICBAdHlwZSBTdHJpbmcKKyAgICAgIEBkZWZhdWx0IGxvYWRpbmcKKyAgICAg
IEBwcml2YXRlCisgICAgKiovCisgICAgbG9hZGluZ0NsYXNzOiAnbG9hZGluZycsCisKKyAgICAv
KioKKyAgICAgIFRoZSBDU1MgY2xhc3MgdG8gYXBwbHkgdG8gYSBgTGlua0NvbXBvbmVudGAncyBl
bGVtZW50IHdoZW4gaXRzIGBkaXNhYmxlZGAKKyAgICAgIHByb3BlcnR5IGlzIGB0cnVlYC4KKyAg
ICAgICBAcHJvcGVydHkgZGlzYWJsZWRDbGFzcworICAgICAgQHR5cGUgU3RyaW5nCisgICAgICBA
ZGVmYXVsdCBkaXNhYmxlZAorICAgICAgQHByaXZhdGUKKyAgICAqKi8KKyAgICBkaXNhYmxlZENs
YXNzOiAnZGlzYWJsZWQnLAorICAgIF9pc0Rpc2FibGVkOiBmYWxzZSwKKworICAgIC8qKgorICAg
ICAgRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBgTGlua0NvbXBvbmVudGAgd2lsbCB0cmlnZ2VyIHJv
dXRpbmcgdmlhCisgICAgICB0aGUgYHJlcGxhY2VXaXRoYCByb3V0aW5nIHN0cmF0ZWd5LgorICAg
ICAgIEBwcm9wZXJ0eSByZXBsYWNlCisgICAgICBAdHlwZSBCb29sZWFuCisgICAgICBAZGVmYXVs
dCBmYWxzZQorICAgICAgQHB1YmxpYworICAgICoqLworICAgIHJlcGxhY2U6IGZhbHNlLAorCisg
ICAgLyoqCisgICAgICBCeSBkZWZhdWx0IHRoZSBge3tsaW5rLXRvfX1gIGNvbXBvbmVudCB3aWxs
IGJpbmQgdG8gdGhlIGBocmVmYCBhbmQKKyAgICAgIGB0aXRsZWAgYXR0cmlidXRlcy4gSXQncyBk
aXNjb3VyYWdlZCB0aGF0IHlvdSBvdmVycmlkZSB0aGVzZSBkZWZhdWx0cywKKyAgICAgIGhvd2V2
ZXIgeW91IGNhbiBwdXNoIG9udG8gdGhlIGFycmF5IGlmIG5lZWRlZC4KKyAgICAgICBAcHJvcGVy
dHkgYXR0cmlidXRlQmluZGluZ3MKKyAgICAgIEB0eXBlIEFycmF5IHwgU3RyaW5nCisgICAgICBA
ZGVmYXVsdCBbJ3RpdGxlJywgJ3JlbCcsICd0YWJpbmRleCcsICd0YXJnZXQnXQorICAgICAgQHB1
YmxpYworICAgICovCisgICAgYXR0cmlidXRlQmluZGluZ3M6IFsnaHJlZicsICd0aXRsZScsICdy
ZWwnLCAndGFiaW5kZXgnLCAndGFyZ2V0J10sCisKKyAgICAvKioKKyAgICAgIEJ5IGRlZmF1bHQg
dGhlIGB7e2xpbmstdG99fWAgY29tcG9uZW50IHdpbGwgYmluZCB0byB0aGUgYGFjdGl2ZWAsIGBs
b2FkaW5nYCwKKyAgICAgIGFuZCBgZGlzYWJsZWRgIGNsYXNzZXMuIEl0IGlzIGRpc2NvdXJhZ2Vk
IHRvIG92ZXJyaWRlIHRoZXNlIGRpcmVjdGx5LgorICAgICAgIEBwcm9wZXJ0eSBjbGFzc05hbWVC
aW5kaW5ncworICAgICAgQHR5cGUgQXJyYXkKKyAgICAgIEBkZWZhdWx0IFsnYWN0aXZlJywgJ2xv
YWRpbmcnLCAnZGlzYWJsZWQnLCAnZW1iZXItdHJhbnNpdGlvbmluZy1pbicsICdlbWJlci10cmFu
c2l0aW9uaW5nLW91dCddCisgICAgICBAcHVibGljCisgICAgKi8KKyAgICBjbGFzc05hbWVCaW5k
aW5nczogWydhY3RpdmUnLCAnbG9hZGluZycsICdkaXNhYmxlZCcsICd0cmFuc2l0aW9uaW5nSW4n
LCAndHJhbnNpdGlvbmluZ091dCddLAorCisgICAgLyoqCisgICAgICBCeSBkZWZhdWx0IHRoZSBg
e3tsaW5rLXRvfX1gIGNvbXBvbmVudCByZXNwb25kcyB0byB0aGUgYGNsaWNrYCBldmVudC4gWW91
CisgICAgICBjYW4gb3ZlcnJpZGUgdGhpcyBnbG9iYWxseSBieSBzZXR0aW5nIHRoaXMgcHJvcGVy
dHkgdG8geW91ciBjdXN0b20KKyAgICAgIGV2ZW50IG5hbWUuCisgICAgICAgVGhpcyBpcyBwYXJ0
aWN1bGFybHkgdXNlZnVsIG9uIG1vYmlsZSB3aGVuIG9uZSB3YW50cyB0byBhdm9pZCB0aGUgMzAw
bXMKKyAgICAgIGNsaWNrIGRlbGF5IHVzaW5nIHNvbWUgc29ydCBvZiBjdXN0b20gYHRhcGAgZXZl
bnQuCisgICAgICAgQHByb3BlcnR5IGV2ZW50TmFtZQorICAgICAgQHR5cGUgU3RyaW5nCisgICAg
ICBAZGVmYXVsdCBjbGljaworICAgICAgQHByaXZhdGUKKyAgICAqLworICAgIGV2ZW50TmFtZTog
J2NsaWNrJywKKworICAgIC8vIHRoaXMgaXMgZG9jJ2VkIGhlcmUgc28gaXQgc2hvd3MgdXAgaW4g
dGhlIGV2ZW50cworICAgIC8vIHNlY3Rpb24gb2YgdGhlIEFQSSBkb2N1bWVudGF0aW9uLCB3aGlj
aCBpcyB3aGVyZQorICAgIC8vIHBlb3BsZSB3aWxsIGxpa2VseSBnbyBsb29raW5nIGZvciBpdC4K
KyAgICAvKioKKyAgICAgIFRyaWdnZXJzIHRoZSBgTGlua0NvbXBvbmVudGAncyByb3V0aW5nIGJl
aGF2aW9yLiBJZgorICAgICAgYGV2ZW50TmFtZWAgaXMgY2hhbmdlZCB0byBhIHZhbHVlIG90aGVy
IHRoYW4gYGNsaWNrYAorICAgICAgdGhlIHJvdXRpbmcgYmVoYXZpb3Igd2lsbCB0cmlnZ2VyIG9u
IHRoYXQgY3VzdG9tIGV2ZW50CisgICAgICBpbnN0ZWFkLgorICAgICAgIEBldmVudCBjbGljawor
ICAgICAgQHByaXZhdGUKKyAgICAqLworCisgICAgLyoqCisgICAgICBBbiBvdmVycmlkYWJsZSBt
ZXRob2QgY2FsbGVkIHdoZW4gYExpbmtDb21wb25lbnRgIG9iamVjdHMgYXJlIGluc3RhbnRpYXRl
ZC4KKyAgICAgICBFeGFtcGxlOgorICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgIEFwcC5NeUxp
bmtDb21wb25lbnQgPSBFbWJlci5MaW5rQ29tcG9uZW50LmV4dGVuZCh7CisgICAgICAgIGluaXQ6
IGZ1bmN0aW9uKCkgeworICAgICAgICAgIHRoaXMuX3N1cGVyKC4uLmFyZ3VtZW50cyk7CisgICAg
ICAgICAgRW1iZXIuTG9nZ2VyLmxvZygnRXZlbnQgaXMgJyArIHRoaXMuZ2V0KCdldmVudE5hbWUn
KSk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgICAgYGBgCisgICAgICAgTk9URTogSWYgeW91
IGRvIG92ZXJyaWRlIGBpbml0YCBmb3IgYSBmcmFtZXdvcmsgY2xhc3MgbGlrZSBgRW1iZXIuVmll
d2AsCisgICAgICBiZSBzdXJlIHRvIGNhbGwgYHRoaXMuX3N1cGVyKC4uLmFyZ3VtZW50cylgIGlu
IHlvdXIKKyAgICAgIGBpbml0YCBkZWNsYXJhdGlvbiEgSWYgeW91IGRvbid0LCBFbWJlciBtYXkg
bm90IGhhdmUgYW4gb3Bwb3J0dW5pdHkgdG8KKyAgICAgIGRvIGltcG9ydGFudCBzZXR1cCB3b3Jr
LCBhbmQgeW91J2xsIHNlZSBzdHJhbmdlIGJlaGF2aW9yIGluIHlvdXIKKyAgICAgIGFwcGxpY2F0
aW9uLgorICAgICAgIEBtZXRob2QgaW5pdAorICAgICAgQHByaXZhdGUKKyAgICAqLworICAgIGlu
aXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHRoaXMuX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50
cyk7CisKKyAgICAgIC8vIE1hcCBkZXNpcmVkIGV2ZW50IG5hbWUgdG8gaW52b2tlIGZ1bmN0aW9u
CisgICAgICB2YXIgZXZlbnROYW1lID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMs
ICdldmVudE5hbWUnKTsKKyAgICAgIHRoaXMub24oZXZlbnROYW1lLCB0aGlzLCB0aGlzLl9pbnZv
a2UpOworICAgIH0sCisKKyAgICBfcm91dGluZzogX2VtYmVyUnVudGltZUluamVjdC5kZWZhdWx0
LnNlcnZpY2UoJy1yb3V0aW5nJyksCisKKyAgICAvKioKKyAgICAgIEFjY2Vzc2VkIGFzIGEgY2xh
c3NuYW1lIGJpbmRpbmcgdG8gYXBwbHkgdGhlIGBMaW5rQ29tcG9uZW50YCdzIGBkaXNhYmxlZENs
YXNzYAorICAgICAgQ1NTIGBjbGFzc2AgdG8gdGhlIGVsZW1lbnQgd2hlbiB0aGUgbGluayBpcyBk
aXNhYmxlZC4KKyAgICAgICBXaGVuIGB0cnVlYCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgZWxlbWVu
dCB3aWxsIG5vdCB0cmlnZ2VyIHJvdXRlIGNoYW5nZXMuCisgICAgICBAcHJvcGVydHkgZGlzYWJs
ZWQKKyAgICAgIEBwcml2YXRlCisgICAgKi8KKyAgICBkaXNhYmxlZDogX2VtYmVyTWV0YWxDb21w
dXRlZC5jb21wdXRlZCh7CisgICAgICBnZXQ6IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0sCisgICAgICBzZXQ6IGZ1bmN0aW9uIChrZXksIHZh
bHVlKSB7CisgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgdGhp
cy5zZXQoJ19pc0Rpc2FibGVkJywgdmFsdWUpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IHZhbHVlID8gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdkaXNhYmxlZENsYXNz
JykgOiBmYWxzZTsKKyAgICAgIH0KKyAgICB9KSwKKworICAgIF9jb21wdXRlQWN0aXZlOiBmdW5j
dGlvbiAocm91dGVyU3RhdGUpIHsKKyAgICAgIGlmIChfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5n
ZXQodGhpcywgJ2xvYWRpbmcnKSkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisK
KyAgICAgIHZhciByb3V0aW5nID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdf
cm91dGluZycpOworICAgICAgdmFyIG1vZGVscyA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0Lmdl
dCh0aGlzLCAnbW9kZWxzJyk7CisgICAgICB2YXIgcmVzb2x2ZWRRdWVyeVBhcmFtcyA9IF9lbWJl
ck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAncmVzb2x2ZWRRdWVyeVBhcmFtcycpOworCisg
ICAgICB2YXIgY3VycmVudFdoZW4gPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywg
J2N1cnJlbnQtd2hlbicpOworICAgICAgdmFyIGlzQ3VycmVudFdoZW5TcGVjaWZpZWQgPSAhIWN1
cnJlbnRXaGVuOworICAgICAgY3VycmVudFdoZW4gPSBjdXJyZW50V2hlbiB8fCBfZW1iZXJNZXRh
bFByb3BlcnR5X2dldC5nZXQodGhpcywgJ3F1YWxpZmllZFJvdXRlTmFtZScpOworICAgICAgY3Vy
cmVudFdoZW4gPSBjdXJyZW50V2hlbi5zcGxpdCgnICcpOworCisgICAgICBmb3IgKHZhciBpID0g
MCwgbGVuID0gY3VycmVudFdoZW4ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgaWYg
KHJvdXRpbmcuaXNBY3RpdmVGb3JSb3V0ZShtb2RlbHMsIHJlc29sdmVkUXVlcnlQYXJhbXMsIGN1
cnJlbnRXaGVuW2ldLCByb3V0ZXJTdGF0ZSwgaXNDdXJyZW50V2hlblNwZWNpZmllZCkpIHsKKyAg
ICAgICAgICByZXR1cm4gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdhY3RpdmVD
bGFzcycpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
LAorCisgICAgLyoqCisgICAgICBBY2Nlc3NlZCBhcyBhIGNsYXNzbmFtZSBiaW5kaW5nIHRvIGFw
cGx5IHRoZSBgTGlua0NvbXBvbmVudGAncyBgYWN0aXZlQ2xhc3NgCisgICAgICBDU1MgYGNsYXNz
YCB0byB0aGUgZWxlbWVudCB3aGVuIHRoZSBsaW5rIGlzIGFjdGl2ZS4KKyAgICAgICBBIGBMaW5r
Q29tcG9uZW50YCBpcyBjb25zaWRlcmVkIGFjdGl2ZSB3aGVuIGl0cyBgY3VycmVudFdoZW5gIHBy
b3BlcnR5IGlzIGB0cnVlYAorICAgICAgb3IgdGhlIGFwcGxpY2F0aW9uJ3MgY3VycmVudCByb3V0
ZSBpcyB0aGUgcm91dGUgdGhlIGBMaW5rQ29tcG9uZW50YCB3b3VsZCB0cmlnZ2VyCisgICAgICB0
cmFuc2l0aW9ucyBpbnRvLgorICAgICAgIFRoZSBgY3VycmVudFdoZW5gIHByb3BlcnR5IGNhbiBt
YXRjaCBhZ2FpbnN0IG11bHRpcGxlIHJvdXRlcyBieSBzZXBhcmF0aW5nCisgICAgICByb3V0ZSBu
YW1lcyB1c2luZyB0aGUgYCBgIChzcGFjZSkgY2hhcmFjdGVyLgorICAgICAgIEBwcm9wZXJ0eSBh
Y3RpdmUKKyAgICAgIEBwcml2YXRlCisgICAgKi8KKyAgICBhY3RpdmU6IF9lbWJlck1ldGFsQ29t
cHV0ZWQuY29tcHV0ZWQoJ2F0dHJzLnBhcmFtcycsICdfcm91dGluZy5jdXJyZW50U3RhdGUnLCBm
dW5jdGlvbiBjb21wdXRlTGlua1RvQ29tcG9uZW50QWN0aXZlKCkgeworICAgICAgdmFyIGN1cnJl
bnRTdGF0ZSA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnX3JvdXRpbmcuY3Vy
cmVudFN0YXRlJyk7CisgICAgICBpZiAoIWN1cnJlbnRTdGF0ZSkgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICB9CisKKyAgICAgIHJldHVybiB0aGlzLl9jb21wdXRlQWN0aXZlKGN1cnJl
bnRTdGF0ZSk7CisgICAgfSksCisKKyAgICB3aWxsQmVBY3RpdmU6IF9lbWJlck1ldGFsQ29tcHV0
ZWQuY29tcHV0ZWQoJ19yb3V0aW5nLnRhcmdldFN0YXRlJywgZnVuY3Rpb24gY29tcHV0ZUxpbmtU
b0NvbXBvbmVudFdpbGxCZUFjdGl2ZSgpIHsKKyAgICAgIHZhciByb3V0aW5nID0gX2VtYmVyTWV0
YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdfcm91dGluZycpOworICAgICAgdmFyIHRhcmdldFN0
YXRlID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHJvdXRpbmcsICd0YXJnZXRTdGF0ZScp
OworICAgICAgaWYgKF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldChyb3V0aW5nLCAnY3VycmVu
dFN0YXRlJykgPT09IHRhcmdldFN0YXRlKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKwor
ICAgICAgcmV0dXJuICEhdGhpcy5fY29tcHV0ZUFjdGl2ZSh0YXJnZXRTdGF0ZSk7CisgICAgfSks
CisKKyAgICB0cmFuc2l0aW9uaW5nSW46IF9lbWJlck1ldGFsQ29tcHV0ZWQuY29tcHV0ZWQoJ2Fj
dGl2ZScsICd3aWxsQmVBY3RpdmUnLCBmdW5jdGlvbiBjb21wdXRlTGlua1RvQ29tcG9uZW50VHJh
bnNpdGlvbmluZ0luKCkgeworICAgICAgdmFyIHdpbGxCZUFjdGl2ZSA9IF9lbWJlck1ldGFsUHJv
cGVydHlfZ2V0LmdldCh0aGlzLCAnd2lsbEJlQWN0aXZlJyk7CisgICAgICBpZiAodHlwZW9mIHdp
bGxCZUFjdGl2ZSA9PT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgfQorCisgICAgICByZXR1cm4gIV9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAn
YWN0aXZlJykgJiYgd2lsbEJlQWN0aXZlICYmICdlbWJlci10cmFuc2l0aW9uaW5nLWluJzsKKyAg
ICB9KSwKKworICAgIHRyYW5zaXRpb25pbmdPdXQ6IF9lbWJlck1ldGFsQ29tcHV0ZWQuY29tcHV0
ZWQoJ2FjdGl2ZScsICd3aWxsQmVBY3RpdmUnLCBmdW5jdGlvbiBjb21wdXRlTGlua1RvQ29tcG9u
ZW50VHJhbnNpdGlvbmluZ091dCgpIHsKKyAgICAgIHZhciB3aWxsQmVBY3RpdmUgPSBfZW1iZXJN
ZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ3dpbGxCZUFjdGl2ZScpOworICAgICAgaWYgKHR5
cGVvZiB3aWxsQmVBY3RpdmUgPT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0
aGlzLCAnYWN0aXZlJykgJiYgIXdpbGxCZUFjdGl2ZSAmJiAnZW1iZXItdHJhbnNpdGlvbmluZy1v
dXQnOworICAgIH0pLAorCisgICAgLyoqCisgICAgICBFdmVudCBoYW5kbGVyIHRoYXQgaW52b2tl
cyB0aGUgbGluaywgYWN0aXZhdGluZyB0aGUgYXNzb2NpYXRlZCByb3V0ZS4KKyAgICAgICBAcHJp
dmF0ZQorICAgICAgQG1ldGhvZCBfaW52b2tlCisgICAgICBAcGFyYW0ge0V2ZW50fSBldmVudAor
ICAgICAgQHByaXZhdGUKKyAgICAqLworICAgIF9pbnZva2U6IGZ1bmN0aW9uIChldmVudCkgewor
ICAgICAgaWYgKCFfZW1iZXJWaWV3c1N5c3RlbVV0aWxzLmlzU2ltcGxlQ2xpY2soZXZlbnQpKSB7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgfQorCisgICAgICB2YXIgcHJldmVudERlZmF1
bHQgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ3ByZXZlbnREZWZhdWx0Jyk7
CisgICAgICB2YXIgdGFyZ2V0QXR0cmlidXRlID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0
KHRoaXMsICd0YXJnZXQnKTsKKworICAgICAgaWYgKHByZXZlbnREZWZhdWx0ICE9PSBmYWxzZSkg
eworICAgICAgICBpZiAoIXRhcmdldEF0dHJpYnV0ZSB8fCB0YXJnZXRBdHRyaWJ1dGUgPT09ICdf
c2VsZicpIHsKKyAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICB9Cisg
ICAgICB9CisKKyAgICAgIGlmIChfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ2J1
YmJsZXMnKSA9PT0gZmFsc2UpIHsKKyAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Cisg
ICAgICB9CisKKyAgICAgIGlmIChfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ19p
c0Rpc2FibGVkJykpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorCisgICAgICBp
ZiAoX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdsb2FkaW5nJykpIHsKKyAgICAg
ICAgX2VtYmVyTWV0YWxMb2dnZXIuZGVmYXVsdC53YXJuKCdUaGlzIGxpbmstdG8gaXMgaW4gYW4g
aW5hY3RpdmUgbG9hZGluZyBzdGF0ZSBiZWNhdXNlIGF0IGxlYXN0IG9uZSBvZiBpdHMgcGFyYW1l
dGVycyBwcmVzZW50bHkgaGFzIGEgbnVsbC91bmRlZmluZWQgdmFsdWUsIG9yIHRoZSBwcm92aWRl
ZCByb3V0ZSBuYW1lIGlzIGludmFsaWQuJyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
IH0KKworICAgICAgaWYgKHRhcmdldEF0dHJpYnV0ZSAmJiB0YXJnZXRBdHRyaWJ1dGUgIT09ICdf
c2VsZicpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorCisgICAgICB2YXIgcm91
dGluZyA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnX3JvdXRpbmcnKTsKKyAg
ICAgIHZhciBxdWFsaWZpZWRSb3V0ZU5hbWUgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQo
dGhpcywgJ3F1YWxpZmllZFJvdXRlTmFtZScpOworICAgICAgdmFyIG1vZGVscyA9IF9lbWJlck1l
dGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnbW9kZWxzJyk7CisgICAgICB2YXIgcXVlcnlQYXJh
bVZhbHVlcyA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAncXVlcnlQYXJhbXMu
dmFsdWVzJyk7CisgICAgICB2YXIgc2hvdWxkUmVwbGFjZSA9IF9lbWJlck1ldGFsUHJvcGVydHlf
Z2V0LmdldCh0aGlzLCAncmVwbGFjZScpOworCisgICAgICByb3V0aW5nLnRyYW5zaXRpb25Ubyhx
dWFsaWZpZWRSb3V0ZU5hbWUsIG1vZGVscywgcXVlcnlQYXJhbVZhbHVlcywgc2hvdWxkUmVwbGFj
ZSk7CisgICAgfSwKKworICAgIHF1ZXJ5UGFyYW1zOiBudWxsLAorCisgICAgcXVhbGlmaWVkUm91
dGVOYW1lOiBfZW1iZXJNZXRhbENvbXB1dGVkLmNvbXB1dGVkKCd0YXJnZXRSb3V0ZU5hbWUnLCAn
X3JvdXRpbmcuY3VycmVudFN0YXRlJywgZnVuY3Rpb24gY29tcHV0ZUxpbmtUb0NvbXBvbmVudFF1
YWxpZmllZFJvdXRlTmFtZSgpIHsKKyAgICAgIHZhciBwYXJhbXMgPSBfZW1iZXJNZXRhbFByb3Bl
cnR5X2dldC5nZXQodGhpcywgJ3BhcmFtcycpLnNsaWNlKCk7CisgICAgICB2YXIgbGFzdFBhcmFt
ID0gcGFyYW1zW3BhcmFtcy5sZW5ndGggLSAxXTsKKyAgICAgIGlmIChsYXN0UGFyYW0gJiYgbGFz
dFBhcmFtLmlzUXVlcnlQYXJhbXMpIHsKKyAgICAgICAgcGFyYW1zLnBvcCgpOworICAgICAgfQor
ICAgICAgdmFyIG9ubHlRdWVyeVBhcmFtc1N1cHBsaWVkID0gdGhpc1tfZW1iZXJIdG1sYmFyc05v
ZGVNYW5hZ2Vyc0NvbXBvbmVudE5vZGVNYW5hZ2VyLkhBU19CTE9DS10gPyBwYXJhbXMubGVuZ3Ro
ID09PSAwIDogcGFyYW1zLmxlbmd0aCA9PT0gMTsKKyAgICAgIGlmIChvbmx5UXVlcnlQYXJhbXNT
dXBwbGllZCkgeworICAgICAgICByZXR1cm4gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRo
aXMsICdfcm91dGluZy5jdXJyZW50Um91dGVOYW1lJyk7CisgICAgICB9CisgICAgICByZXR1cm4g
X2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICd0YXJnZXRSb3V0ZU5hbWUnKTsKKyAg
ICB9KSwKKworICAgIHJlc29sdmVkUXVlcnlQYXJhbXM6IF9lbWJlck1ldGFsQ29tcHV0ZWQuY29t
cHV0ZWQoJ3F1ZXJ5UGFyYW1zJywgZnVuY3Rpb24gY29tcHV0ZUxpbmtUb0NvbXBvbmVudFJlc29s
dmVkUXVlcnlQYXJhbXMoKSB7CisgICAgICB2YXIgcmVzb2x2ZWRRdWVyeVBhcmFtcyA9IHt9Owor
ICAgICAgdmFyIHF1ZXJ5UGFyYW1zID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMs
ICdxdWVyeVBhcmFtcycpOworCisgICAgICBpZiAoIXF1ZXJ5UGFyYW1zKSB7CisgICAgICAgIHJl
dHVybiByZXNvbHZlZFF1ZXJ5UGFyYW1zOworICAgICAgfQorCisgICAgICB2YXIgdmFsdWVzID0g
cXVlcnlQYXJhbXMudmFsdWVzOworICAgICAgZm9yICh2YXIga2V5IGluIHZhbHVlcykgeworICAg
ICAgICBpZiAoIXZhbHVlcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7CisgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIH0KKyAgICAgICAgcmVzb2x2ZWRRdWVyeVBhcmFtc1trZXldID0gdmFsdWVz
W2tleV07CisgICAgICB9CisKKyAgICAgIHJldHVybiByZXNvbHZlZFF1ZXJ5UGFyYW1zOworICAg
IH0pLAorCisgICAgLyoqCisgICAgICBTZXRzIHRoZSBlbGVtZW50J3MgYGhyZWZgIGF0dHJpYnV0
ZSB0byB0aGUgdXJsIGZvcgorICAgICAgdGhlIGBMaW5rQ29tcG9uZW50YCdzIHRhcmdldGVkIHJv
dXRlLgorICAgICAgIElmIHRoZSBgTGlua0NvbXBvbmVudGAncyBgdGFnTmFtZWAgaXMgY2hhbmdl
ZCB0byBhIHZhbHVlIG90aGVyCisgICAgICB0aGFuIGBhYCwgdGhpcyBwcm9wZXJ0eSB3aWxsIGJl
IGlnbm9yZWQuCisgICAgICAgQHByb3BlcnR5IGhyZWYKKyAgICAgIEBwcml2YXRlCisgICAgKi8K
KyAgICBocmVmOiBfZW1iZXJNZXRhbENvbXB1dGVkLmNvbXB1dGVkKCdtb2RlbHMnLCAncXVhbGlm
aWVkUm91dGVOYW1lJywgZnVuY3Rpb24gY29tcHV0ZUxpbmtUb0NvbXBvbmVudEhyZWYoKSB7Cisg
ICAgICBpZiAoX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICd0YWdOYW1lJykgIT09
ICdhJykgeworICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICAgIHZhciBxdWFsaWZpZWRS
b3V0ZU5hbWUgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ3F1YWxpZmllZFJv
dXRlTmFtZScpOworICAgICAgdmFyIG1vZGVscyA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0Lmdl
dCh0aGlzLCAnbW9kZWxzJyk7CisKKyAgICAgIGlmIChfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5n
ZXQodGhpcywgJ2xvYWRpbmcnKSkgeworICAgICAgICByZXR1cm4gX2VtYmVyTWV0YWxQcm9wZXJ0
eV9nZXQuZ2V0KHRoaXMsICdsb2FkaW5nSHJlZicpOworICAgICAgfQorCisgICAgICB2YXIgcm91
dGluZyA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnX3JvdXRpbmcnKTsKKyAg
ICAgIHZhciBxdWVyeVBhcmFtcyA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAn
cXVlcnlQYXJhbXMudmFsdWVzJyk7CisgICAgICByZXR1cm4gcm91dGluZy5nZW5lcmF0ZVVSTChx
dWFsaWZpZWRSb3V0ZU5hbWUsIG1vZGVscywgcXVlcnlQYXJhbXMpOworICAgIH0pLAorCisgICAg
bG9hZGluZzogX2VtYmVyTWV0YWxDb21wdXRlZC5jb21wdXRlZCgnX21vZGVsc0FyZUxvYWRlZCcs
ICdxdWFsaWZpZWRSb3V0ZU5hbWUnLCBmdW5jdGlvbiBjb21wdXRlTGlua1RvQ29tcG9uZW50TG9h
ZGluZygpIHsKKyAgICAgIHZhciBxdWFsaWZpZWRSb3V0ZU5hbWUgPSBfZW1iZXJNZXRhbFByb3Bl
cnR5X2dldC5nZXQodGhpcywgJ3F1YWxpZmllZFJvdXRlTmFtZScpOworICAgICAgdmFyIG1vZGVs
c0FyZUxvYWRlZCA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnX21vZGVsc0Fy
ZUxvYWRlZCcpOworCisgICAgICBpZiAoIW1vZGVsc0FyZUxvYWRlZCB8fCBxdWFsaWZpZWRSb3V0
ZU5hbWUgPT0gbnVsbCkgeworICAgICAgICByZXR1cm4gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQu
Z2V0KHRoaXMsICdsb2FkaW5nQ2xhc3MnKTsKKyAgICAgIH0KKyAgICB9KSwKKworICAgIF9tb2Rl
bHNBcmVMb2FkZWQ6IF9lbWJlck1ldGFsQ29tcHV0ZWQuY29tcHV0ZWQoJ21vZGVscycsIGZ1bmN0
aW9uIGNvbXB1dGVMaW5rVG9Db21wb25lbnRNb2RlbHNBcmVMb2FkZWQoKSB7CisgICAgICB2YXIg
bW9kZWxzID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdtb2RlbHMnKTsKKyAg
ICAgIGZvciAodmFyIGkgPSAwLCBsID0gbW9kZWxzLmxlbmd0aDsgaSA8IGw7IGkrKykgeworICAg
ICAgICBpZiAobW9kZWxzW2ldID09IG51bGwpIHsKKyAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgIH0KKworICAgICAgcmV0dXJuIHRydWU7CisgICAgfSksCisKKyAgICBf
Z2V0TW9kZWxzOiBmdW5jdGlvbiAocGFyYW1zKSB7CisgICAgICB2YXIgbW9kZWxDb3VudCA9IHBh
cmFtcy5sZW5ndGggLSAxOworICAgICAgdmFyIG1vZGVscyA9IG5ldyBBcnJheShtb2RlbENvdW50
KTsKKworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtb2RlbENvdW50OyBpKyspIHsKKyAgICAg
ICAgdmFyIHZhbHVlID0gcGFyYW1zW2kgKyAxXTsKKworICAgICAgICB3aGlsZSAoX2VtYmVyUnVu
dGltZU1peGluc0NvbnRyb2xsZXIuZGVmYXVsdC5kZXRlY3QodmFsdWUpKSB7CisgICAgICAgICAg
X2VtYmVyTWV0YWxEZWJ1Zy5kZXByZWNhdGUoJ1Byb3ZpZGluZyBge3tsaW5rLXRvfX1gIHdpdGgg
YSBwYXJhbSB0aGF0IGlzIHdyYXBwZWQgaW4gYSBjb250cm9sbGVyIGlzIGRlcHJlY2F0ZWQuICcg
KyAodGhpcy5wYXJlbnRWaWV3ID8gJ1BsZWFzZSB1cGRhdGUgYCcgKyB0aGlzLnBhcmVudFZpZXcg
KyAnYCB0byB1c2UgYHt7bGluay10byAicG9zdCIgc29tZUNvbnRyb2xsZXIubW9kZWx9fWAgaW5z
dGVhZC4nIDogJycpLCBmYWxzZSwgeyBpZDogJ2VtYmVyLXJvdXRpbmctdmlld3MuY29udHJvbGxl
ci13cmFwcGVkLXBhcmFtJywgdW50aWw6ICczLjAuMCcgfSk7CisgICAgICAgICAgdmFsdWUgPSB2
YWx1ZS5nZXQoJ21vZGVsJyk7CisgICAgICAgIH0KKworICAgICAgICBtb2RlbHNbaV0gPSB2YWx1
ZTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIG1vZGVsczsKKyAgICB9LAorCisgICAgLyoqCisg
ICAgICBUaGUgZGVmYXVsdCBocmVmIHZhbHVlIHRvIHVzZSB3aGlsZSBhIGxpbmstdG8gaXMgbG9h
ZGluZy4KKyAgICAgIE9ubHkgYXBwbGllcyB3aGVuIHRhZ05hbWUgaXMgJ2EnCisgICAgICAgQHBy
b3BlcnR5IGxvYWRpbmdIcmVmCisgICAgICBAdHlwZSBTdHJpbmcKKyAgICAgIEBkZWZhdWx0ICMK
KyAgICAgIEBwcml2YXRlCisgICAgKi8KKyAgICBsb2FkaW5nSHJlZjogJyMnLAorCisgICAgd2ls
bFJlbmRlcjogZnVuY3Rpb24gKCkgeworICAgICAgdmFyIHF1ZXJ5UGFyYW1zID0gdW5kZWZpbmVk
OworCisgICAgICAvLyBEbyBub3QgbXV0YXRlIHBhcmFtcyBpbiBwbGFjZQorICAgICAgdmFyIHBh
cmFtcyA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAncGFyYW1zJykuc2xpY2Uo
KTsKKworICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1lvdSBtdXN0IHByb3ZpZGUgb25l
IG9yIG1vcmUgcGFyYW1ldGVycyB0byB0aGUgbGluay10byBjb21wb25lbnQuJywgcGFyYW1zLmxl
bmd0aCk7CisKKyAgICAgIHZhciBkaXNhYmxlZFdoZW4gPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dl
dC5nZXQodGhpcywgJ2Rpc2FibGVkV2hlbicpOworICAgICAgaWYgKGRpc2FibGVkV2hlbiAhPT0g
dW5kZWZpbmVkKSB7CisgICAgICAgIHRoaXMuc2V0KCdkaXNhYmxlZCcsIGRpc2FibGVkV2hlbik7
CisgICAgICB9CisKKyAgICAgIC8vIFByb2Nlc3MgdGhlIHBvc2l0aW9uYWwgYXJndW1lbnRzLCBp
biBvcmRlci4KKyAgICAgIC8vIDEuIElubGluZSBsaW5rIHRpdGxlIGNvbWVzIGZpcnN0LCBpZiBw
cmVzZW50LgorICAgICAgaWYgKCF0aGlzW19lbWJlckh0bWxiYXJzTm9kZU1hbmFnZXJzQ29tcG9u
ZW50Tm9kZU1hbmFnZXIuSEFTX0JMT0NLXSkgeworICAgICAgICB0aGlzLnNldCgnbGlua1RpdGxl
JywgcGFyYW1zLnNoaWZ0KCkpOworICAgICAgfQorCisgICAgICAvLyAyLiBgdGFyZ2V0Um91dGVO
YW1lYCBpcyBub3cgYWx3YXlzIGF0IGluZGV4IDAuCisgICAgICB0aGlzLnNldCgndGFyZ2V0Um91
dGVOYW1lJywgcGFyYW1zWzBdKTsKKworICAgICAgLy8gMy4gVGhlIGxhc3QgYXJndW1lbnQgKGlm
IHN0aWxsIHJlbWFpbmluZykgaXMgdGhlIGBxdWVyeVBhcmFtc2Agb2JqZWN0LgorICAgICAgdmFy
IGxhc3RQYXJhbSA9IHBhcmFtc1twYXJhbXMubGVuZ3RoIC0gMV07CisKKyAgICAgIGlmIChsYXN0
UGFyYW0gJiYgbGFzdFBhcmFtLmlzUXVlcnlQYXJhbXMpIHsKKyAgICAgICAgcXVlcnlQYXJhbXMg
PSBwYXJhbXMucG9wKCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBxdWVyeVBhcmFtcyA9IHt9
OworICAgICAgfQorICAgICAgdGhpcy5zZXQoJ3F1ZXJ5UGFyYW1zJywgcXVlcnlQYXJhbXMpOwor
CisgICAgICAvLyA0LiBBbnkgcmVtYWluaW5nIGluZGljZXMgKGV4Y2VwdGluZyBgdGFyZ2V0Um91
dGVOYW1lYCBhdCAwKSBhcmUgYG1vZGVsc2AuCisgICAgICBpZiAocGFyYW1zLmxlbmd0aCA+IDEp
IHsKKyAgICAgICAgdGhpcy5zZXQoJ21vZGVscycsIHRoaXMuX2dldE1vZGVscyhwYXJhbXMpKTsK
KyAgICAgIH0gZWxzZSB7CisgICAgICAgIHRoaXMuc2V0KCdtb2RlbHMnLCBbXSk7CisgICAgICB9
CisgICAgfQorICB9KTsKKworICBMaW5rQ29tcG9uZW50LnRvU3RyaW5nID0gZnVuY3Rpb24gKCkg
eworICAgIHJldHVybiAnTGlua0NvbXBvbmVudCc7CisgIH07CisKKyAgTGlua0NvbXBvbmVudC5y
ZW9wZW5DbGFzcyh7CisgICAgcG9zaXRpb25hbFBhcmFtczogJ3BhcmFtcycKKyAgfSk7CisKKyAg
ZXhwb3J0cy5kZWZhdWx0ID0gTGlua0NvbXBvbmVudDsKK30pOworLy8gY3JlYXRlcyBpbmplY3Qu
c2VydmljZQorZW5pZmVkKCdlbWJlci1yb3V0aW5nLXZpZXdzL2luZGV4JywgWydleHBvcnRzJywg
J2VtYmVyLW1ldGFsL2NvcmUnLCAnZW1iZXItcm91dGluZy12aWV3cy9jb21wb25lbnRzL2xpbmst
dG8nLCAnZW1iZXItcm91dGluZy12aWV3cy92aWV3cy9vdXRsZXQnXSwgZnVuY3Rpb24gKGV4cG9y
dHMsIF9lbWJlck1ldGFsQ29yZSwgX2VtYmVyUm91dGluZ1ZpZXdzQ29tcG9uZW50c0xpbmtUbywg
X2VtYmVyUm91dGluZ1ZpZXdzVmlld3NPdXRsZXQpIHsKKyAgLyoqCisgIEBtb2R1bGUgZW1iZXIK
KyAgQHN1Ym1vZHVsZSBlbWJlci1yb3V0aW5nLXZpZXdzCisgICovCisKKyAgJ3VzZSBzdHJpY3Qn
OworCisgIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LkxpbmtDb21wb25lbnQgPSBfZW1iZXJSb3V0
aW5nVmlld3NDb21wb25lbnRzTGlua1RvLmRlZmF1bHQ7CisgIF9lbWJlck1ldGFsQ29yZS5kZWZh
dWx0Lk91dGxldFZpZXcgPSBfZW1iZXJSb3V0aW5nVmlld3NWaWV3c091dGxldC5PdXRsZXRWaWV3
OworCisgIGV4cG9ydHMuZGVmYXVsdCA9IF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0OworfSk7Citl
bmlmZWQoJ2VtYmVyLXJvdXRpbmctdmlld3Mvdmlld3Mvb3V0bGV0JywgWydleHBvcnRzJywgJ2Vt
YmVyLXZpZXdzL3ZpZXdzL3ZpZXcnLCAnZW1iZXItaHRtbGJhcnMvdGVtcGxhdGVzL3RvcC1sZXZl
bC12aWV3J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJWaWV3c1ZpZXdzVmlldywgX2VtYmVy
SHRtbGJhcnNUZW1wbGF0ZXNUb3BMZXZlbFZpZXcpIHsKKyAgLyoqCisgIEBtb2R1bGUgZW1iZXIK
KyAgQHN1Ym1vZHVsZSBlbWJlci1yb3V0aW5nLXZpZXdzCisgICovCisKKyAgJ3VzZSBzdHJpY3Qn
OworCisgIHZhciBDb3JlT3V0bGV0VmlldyA9IF9lbWJlclZpZXdzVmlld3NWaWV3LmRlZmF1bHQu
ZXh0ZW5kKHsKKyAgICBkZWZhdWx0VGVtcGxhdGU6IF9lbWJlckh0bWxiYXJzVGVtcGxhdGVzVG9w
TGV2ZWxWaWV3LmRlZmF1bHQsCisKKyAgICBpbml0OiBmdW5jdGlvbiAoKSB7CisgICAgICB0aGlz
Ll9zdXBlcigpOworICAgICAgdGhpcy5fb3V0bGV0cyA9IFtdOworICAgIH0sCisKKyAgICBzZXRP
dXRsZXRTdGF0ZTogZnVuY3Rpb24gKHN0YXRlKSB7CisgICAgICB0aGlzLm91dGxldFN0YXRlID0g
eyBtYWluOiBzdGF0ZSB9OworCisgICAgICBpZiAodGhpcy5lbnYpIHsKKyAgICAgICAgdGhpcy5l
bnYub3V0bGV0U3RhdGUgPSB0aGlzLm91dGxldFN0YXRlOworICAgICAgfQorCisgICAgICBpZiAo
dGhpcy5sYXN0UmVzdWx0KSB7CisgICAgICAgIHRoaXMuZGlydHlPdXRsZXRzKCk7CisgICAgICAg
IHRoaXMuX291dGxldHMgPSBbXTsKKworICAgICAgICB0aGlzLnNjaGVkdWxlUmV2YWxpZGF0ZShu
dWxsLCBudWxsKTsKKyAgICAgIH0KKyAgICB9LAorCisgICAgZGlydHlPdXRsZXRzOiBmdW5jdGlv
biAoKSB7CisgICAgICAvLyBEaXJ0eSBhbnkgcmVuZGVyIG5vZGVzIHRoYXQgY29ycmVzcG9uZCB0
byBvdXRsZXRzCisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX291dGxldHMubGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgdGhpcy5fb3V0bGV0c1tpXS5pc0RpcnR5ID0gdHJ1ZTsKKyAgICAg
IH0KKyAgICB9CisgIH0pOworCisgIGV4cG9ydHMuQ29yZU91dGxldFZpZXcgPSBDb3JlT3V0bGV0
VmlldzsKKyAgdmFyIE91dGxldFZpZXcgPSBDb3JlT3V0bGV0Vmlldy5leHRlbmQoeyB0YWdOYW1l
OiAnJyB9KTsKKyAgZXhwb3J0cy5PdXRsZXRWaWV3ID0gT3V0bGV0VmlldzsKK30pOworZW5pZmVk
KCdlbWJlci1yb3V0aW5nL2V4dC9jb250cm9sbGVyJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFs
L3Byb3BlcnR5X2dldCcsICdlbWJlci1ydW50aW1lL21peGlucy9jb250cm9sbGVyJ10sIGZ1bmN0
aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbFByb3BlcnR5X2dldCwgX2VtYmVyUnVudGltZU1peGlu
c0NvbnRyb2xsZXIpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIC8qKgorICBAbW9kdWxlIGVtYmVy
CisgIEBzdWJtb2R1bGUgZW1iZXItcm91dGluZworICAqLworCisgIF9lbWJlclJ1bnRpbWVNaXhp
bnNDb250cm9sbGVyLmRlZmF1bHQucmVvcGVuKHsKKyAgICBjb25jYXRlbmF0ZWRQcm9wZXJ0aWVz
OiBbJ3F1ZXJ5UGFyYW1zJ10sCisKKyAgICAvKioKKyAgICAgIERlZmluZXMgd2hpY2ggcXVlcnkg
cGFyYW1ldGVycyB0aGUgY29udHJvbGxlciBhY2NlcHRzLgorICAgICAgSWYgeW91IGdpdmUgdGhl
IG5hbWVzIGBbJ2NhdGVnb3J5JywncGFnZSddYCBpdCB3aWxsIGJpbmQKKyAgICAgIHRoZSB2YWx1
ZXMgb2YgdGhlc2UgcXVlcnkgcGFyYW1ldGVycyB0byB0aGUgdmFyaWFibGVzCisgICAgICBgdGhp
cy5jYXRlZ29yeWAgYW5kIGB0aGlzLnBhZ2VgCisgICAgICAgQHByb3BlcnR5IHF1ZXJ5UGFyYW1z
CisgICAgICBAcHVibGljCisgICAgKi8KKyAgICBxdWVyeVBhcmFtczogbnVsbCwKKworICAgIC8q
KgorICAgICAgQHByb3BlcnR5IF9xcERlbGVnYXRlCisgICAgICBAcHJpdmF0ZQorICAgICovCisg
ICAgX3FwRGVsZWdhdGU6IG51bGwsIC8vIHNldCBieSByb3V0ZQorCisgICAgLyoqCisgICAgICBA
bWV0aG9kIF9xcENoYW5nZWQKKyAgICAgIEBwcml2YXRlCisgICAgKi8KKyAgICBfcXBDaGFuZ2Vk
OiBmdW5jdGlvbiAoY29udHJvbGxlciwgX3Byb3ApIHsKKyAgICAgIHZhciBwcm9wID0gX3Byb3Au
c3Vic3RyKDAsIF9wcm9wLmxlbmd0aCAtIDMpOworCisgICAgICB2YXIgZGVsZWdhdGUgPSBjb250
cm9sbGVyLl9xcERlbGVnYXRlOworICAgICAgdmFyIHZhbHVlID0gX2VtYmVyTWV0YWxQcm9wZXJ0
eV9nZXQuZ2V0KGNvbnRyb2xsZXIsIHByb3ApOworICAgICAgZGVsZWdhdGUocHJvcCwgdmFsdWUp
OworICAgIH0sCisKKyAgICAvKioKKyAgICAgIFRyYW5zaXRpb24gdGhlIGFwcGxpY2F0aW9uIGlu
dG8gYW5vdGhlciByb3V0ZS4gVGhlIHJvdXRlIG1heQorICAgICAgYmUgZWl0aGVyIGEgc2luZ2xl
IHJvdXRlIG9yIHJvdXRlIHBhdGg6CisgICAgICAgYGBgamF2YXNjcmlwdAorICAgICAgYUNvbnRy
b2xsZXIudHJhbnNpdGlvblRvUm91dGUoJ2Jsb2dQb3N0cycpOworICAgICAgYUNvbnRyb2xsZXIu
dHJhbnNpdGlvblRvUm91dGUoJ2Jsb2dQb3N0cy5yZWNlbnRFbnRyaWVzJyk7CisgICAgICBgYGAK
KyAgICAgICBPcHRpb25hbGx5IHN1cHBseSBhIG1vZGVsIGZvciB0aGUgcm91dGUgaW4gcXVlc3Rp
b24uIFRoZSBtb2RlbAorICAgICAgd2lsbCBiZSBzZXJpYWxpemVkIGludG8gdGhlIFVSTCB1c2lu
ZyB0aGUgYHNlcmlhbGl6ZWAgaG9vayBvZgorICAgICAgdGhlIHJvdXRlOgorICAgICAgIGBgYGph
dmFzY3JpcHQKKyAgICAgIGFDb250cm9sbGVyLnRyYW5zaXRpb25Ub1JvdXRlKCdibG9nUG9zdCcs
IGFQb3N0KTsKKyAgICAgIGBgYAorICAgICAgIElmIGEgbGl0ZXJhbCBpcyBwYXNzZWQgKHN1Y2gg
YXMgYSBudW1iZXIgb3IgYSBzdHJpbmcpLCBpdCB3aWxsCisgICAgICBiZSB0cmVhdGVkIGFzIGFu
IGlkZW50aWZpZXIgaW5zdGVhZC4gSW4gdGhpcyBjYXNlLCB0aGUgYG1vZGVsYAorICAgICAgaG9v
ayBvZiB0aGUgcm91dGUgd2lsbCBiZSB0cmlnZ2VyZWQ6CisgICAgICAgYGBgamF2YXNjcmlwdAor
ICAgICAgYUNvbnRyb2xsZXIudHJhbnNpdGlvblRvUm91dGUoJ2Jsb2dQb3N0JywgMSk7CisgICAg
ICBgYGAKKyAgICAgICBNdWx0aXBsZSBtb2RlbHMgd2lsbCBiZSBhcHBsaWVkIGxhc3QgdG8gZmly
c3QgcmVjdXJzaXZlbHkgdXAgdGhlCisgICAgICByb3V0ZSB0cmVlLgorICAgICAgIGBgYGphdmFz
Y3JpcHQKKyAgICAgIEFwcC5Sb3V0ZXIubWFwKGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLnJv
dXRlKCdibG9nUG9zdCcsIHsgcGF0aDogJzpibG9nUG9zdElkJyB9LCBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICB0aGlzLnJvdXRlKCdibG9nQ29tbWVudCcsIHsgcGF0aDogJzpibG9nQ29tbWVudElk
JywgcmVzZXROYW1lc3BhY2U6IHRydWUgfSk7CisgICAgICAgIH0pOworICAgICAgfSk7CisgICAg
ICAgYUNvbnRyb2xsZXIudHJhbnNpdGlvblRvUm91dGUoJ2Jsb2dDb21tZW50JywgYVBvc3QsIGFD
b21tZW50KTsKKyAgICAgIGFDb250cm9sbGVyLnRyYW5zaXRpb25Ub1JvdXRlKCdibG9nQ29tbWVu
dCcsIDEsIDEzKTsKKyAgICAgIGBgYAorICAgICAgIEl0IGlzIGFsc28gcG9zc2libGUgdG8gcGFz
cyBhIFVSTCAoYSBzdHJpbmcgdGhhdCBzdGFydHMgd2l0aCBhCisgICAgICBgL2ApLiBUaGlzIGlz
IGludGVuZGVkIGZvciB0ZXN0aW5nIGFuZCBkZWJ1Z2dpbmcgcHVycG9zZXMgYW5kCisgICAgICBz
aG91bGQgcmFyZWx5IGJlIHVzZWQgaW4gcHJvZHVjdGlvbiBjb2RlLgorICAgICAgIGBgYGphdmFz
Y3JpcHQKKyAgICAgIGFDb250cm9sbGVyLnRyYW5zaXRpb25Ub1JvdXRlKCcvJyk7CisgICAgICBh
Q29udHJvbGxlci50cmFuc2l0aW9uVG9Sb3V0ZSgnL2Jsb2cvcG9zdC8xL2NvbW1lbnQvMTMnKTsK
KyAgICAgIGFDb250cm9sbGVyLnRyYW5zaXRpb25Ub1JvdXRlKCcvYmxvZy9wb3N0cz9zb3J0PXRp
dGxlJyk7CisgICAgICBgYGAKKyAgICAgICBBbiBvcHRpb25zIGhhc2ggd2l0aCBhIGBxdWVyeVBh
cmFtc2AgcHJvcGVydHkgbWF5IGJlIHByb3ZpZGVkIGFzCisgICAgICB0aGUgZmluYWwgYXJndW1l
bnQgdG8gYWRkIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gdGhlIGRlc3RpbmF0aW9uIFVSTC4KKyAgICAg
ICBgYGBqYXZhc2NyaXB0CisgICAgICBhQ29udHJvbGxlci50cmFuc2l0aW9uVG9Sb3V0ZSgnYmxv
Z1Bvc3QnLCAxLCB7CisgICAgICAgIHF1ZXJ5UGFyYW1zOiB7c2hvd0NvbW1lbnRzOiAndHJ1ZSd9
CisgICAgICB9KTsKKyAgICAgICAvLyBpZiB5b3UganVzdCB3YW50IHRvIHRyYW5zaXRpb24gdGhl
IHF1ZXJ5IHBhcmFtZXRlcnMgd2l0aG91dCBjaGFuZ2luZyB0aGUgcm91dGUKKyAgICAgIGFDb250
cm9sbGVyLnRyYW5zaXRpb25Ub1JvdXRlKHtxdWVyeVBhcmFtczoge3NvcnQ6ICdkYXRlJ319KTsK
KyAgICAgIGBgYAorICAgICAgIFNlZSBhbHNvIFtyZXBsYWNlUm91dGVdKC9hcGkvY2xhc3Nlcy9F
bWJlci5Db250cm9sbGVyTWl4aW4uaHRtbCNtZXRob2RfcmVwbGFjZVJvdXRlKS4KKyAgICAgICBA
cGFyYW0ge1N0cmluZ30gbmFtZSB0aGUgbmFtZSBvZiB0aGUgcm91dGUgb3IgYSBVUkwKKyAgICAg
IEBwYXJhbSB7Li4uT2JqZWN0fSBtb2RlbHMgdGhlIG1vZGVsKHMpIG9yIGlkZW50aWZpZXIocykg
dG8gYmUgdXNlZAorICAgICAgICB3aGlsZSB0cmFuc2l0aW9uaW5nIHRvIHRoZSByb3V0ZS4KKyAg
ICAgIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gb3B0aW9uYWwgaGFzaCB3aXRoIGEgcXVlcnlQ
YXJhbXMgcHJvcGVydHkKKyAgICAgICAgY29udGFpbmluZyBhIG1hcHBpbmcgb2YgcXVlcnkgcGFy
YW1ldGVycworICAgICAgQGZvciBFbWJlci5Db250cm9sbGVyTWl4aW4KKyAgICAgIEBtZXRob2Qg
dHJhbnNpdGlvblRvUm91dGUKKyAgICAgIEBwdWJsaWMKKyAgICAqLworICAgIHRyYW5zaXRpb25U
b1JvdXRlOiBmdW5jdGlvbiAoKSB7CisgICAgICAvLyB0YXJnZXQgbWF5IGJlIGVpdGhlciBhbm90
aGVyIGNvbnRyb2xsZXIgb3IgYSByb3V0ZXIKKyAgICAgIHZhciB0YXJnZXQgPSBfZW1iZXJNZXRh
bFByb3BlcnR5X2dldC5nZXQodGhpcywgJ3RhcmdldCcpOworICAgICAgdmFyIG1ldGhvZCA9IHRh
cmdldC50cmFuc2l0aW9uVG9Sb3V0ZSB8fCB0YXJnZXQudHJhbnNpdGlvblRvOworICAgICAgcmV0
dXJuIG1ldGhvZC5hcHBseSh0YXJnZXQsIGFyZ3VtZW50cyk7CisgICAgfSwKKworICAgIC8qKgor
ICAgICAgVHJhbnNpdGlvbiBpbnRvIGFub3RoZXIgcm91dGUgd2hpbGUgcmVwbGFjaW5nIHRoZSBj
dXJyZW50IFVSTCwgaWYgcG9zc2libGUuCisgICAgICBUaGlzIHdpbGwgcmVwbGFjZSB0aGUgY3Vy
cmVudCBoaXN0b3J5IGVudHJ5IGluc3RlYWQgb2YgYWRkaW5nIGEgbmV3IG9uZS4KKyAgICAgIEJl
c2lkZSB0aGF0LCBpdCBpcyBpZGVudGljYWwgdG8gYHRyYW5zaXRpb25Ub1JvdXRlYCBpbiBhbGwg
b3RoZXIgcmVzcGVjdHMuCisgICAgICAgYGBgamF2YXNjcmlwdAorICAgICAgYUNvbnRyb2xsZXIu
cmVwbGFjZVJvdXRlKCdibG9nUG9zdHMnKTsKKyAgICAgIGFDb250cm9sbGVyLnJlcGxhY2VSb3V0
ZSgnYmxvZ1Bvc3RzLnJlY2VudEVudHJpZXMnKTsKKyAgICAgIGBgYAorICAgICAgIE9wdGlvbmFs
bHkgc3VwcGx5IGEgbW9kZWwgZm9yIHRoZSByb3V0ZSBpbiBxdWVzdGlvbi4gVGhlIG1vZGVsCisg
ICAgICB3aWxsIGJlIHNlcmlhbGl6ZWQgaW50byB0aGUgVVJMIHVzaW5nIHRoZSBgc2VyaWFsaXpl
YCBob29rIG9mCisgICAgICB0aGUgcm91dGU6CisgICAgICAgYGBgamF2YXNjcmlwdAorICAgICAg
YUNvbnRyb2xsZXIucmVwbGFjZVJvdXRlKCdibG9nUG9zdCcsIGFQb3N0KTsKKyAgICAgIGBgYAor
ICAgICAgIElmIGEgbGl0ZXJhbCBpcyBwYXNzZWQgKHN1Y2ggYXMgYSBudW1iZXIgb3IgYSBzdHJp
bmcpLCBpdCB3aWxsCisgICAgICBiZSB0cmVhdGVkIGFzIGFuIGlkZW50aWZpZXIgaW5zdGVhZC4g
SW4gdGhpcyBjYXNlLCB0aGUgYG1vZGVsYAorICAgICAgaG9vayBvZiB0aGUgcm91dGUgd2lsbCBi
ZSB0cmlnZ2VyZWQ6CisgICAgICAgYGBgamF2YXNjcmlwdAorICAgICAgYUNvbnRyb2xsZXIucmVw
bGFjZVJvdXRlKCdibG9nUG9zdCcsIDEpOworICAgICAgYGBgCisgICAgICAgTXVsdGlwbGUgbW9k
ZWxzIHdpbGwgYmUgYXBwbGllZCBsYXN0IHRvIGZpcnN0IHJlY3Vyc2l2ZWx5IHVwIHRoZQorICAg
ICAgcm91dGUgdHJlZS4KKyAgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICBBcHAuUm91dGVyLm1h
cChmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5yb3V0ZSgnYmxvZ1Bvc3QnLCB7IHBhdGg6ICc6
YmxvZ1Bvc3RJZCcgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgdGhpcy5yb3V0ZSgnYmxvZ0Nv
bW1lbnQnLCB7IHBhdGg6ICc6YmxvZ0NvbW1lbnRJZCcsIHJlc2V0TmFtZXNwYWNlOiB0cnVlIH0p
OworICAgICAgICB9KTsKKyAgICAgIH0pOworICAgICAgIGFDb250cm9sbGVyLnJlcGxhY2VSb3V0
ZSgnYmxvZ0NvbW1lbnQnLCBhUG9zdCwgYUNvbW1lbnQpOworICAgICAgYUNvbnRyb2xsZXIucmVw
bGFjZVJvdXRlKCdibG9nQ29tbWVudCcsIDEsIDEzKTsKKyAgICAgIGBgYAorICAgICAgIEl0IGlz
IGFsc28gcG9zc2libGUgdG8gcGFzcyBhIFVSTCAoYSBzdHJpbmcgdGhhdCBzdGFydHMgd2l0aCBh
CisgICAgICBgL2ApLiBUaGlzIGlzIGludGVuZGVkIGZvciB0ZXN0aW5nIGFuZCBkZWJ1Z2dpbmcg
cHVycG9zZXMgYW5kCisgICAgICBzaG91bGQgcmFyZWx5IGJlIHVzZWQgaW4gcHJvZHVjdGlvbiBj
b2RlLgorICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgIGFDb250cm9sbGVyLnJlcGxhY2VSb3V0
ZSgnLycpOworICAgICAgYUNvbnRyb2xsZXIucmVwbGFjZVJvdXRlKCcvYmxvZy9wb3N0LzEvY29t
bWVudC8xMycpOworICAgICAgYGBgCisgICAgICAgQHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhlIG5h
bWUgb2YgdGhlIHJvdXRlIG9yIGEgVVJMCisgICAgICBAcGFyYW0gey4uLk9iamVjdH0gbW9kZWxz
IHRoZSBtb2RlbChzKSBvciBpZGVudGlmaWVyKHMpIHRvIGJlIHVzZWQKKyAgICAgIHdoaWxlIHRy
YW5zaXRpb25pbmcgdG8gdGhlIHJvdXRlLgorICAgICAgQGZvciBFbWJlci5Db250cm9sbGVyTWl4
aW4KKyAgICAgIEBtZXRob2QgcmVwbGFjZVJvdXRlCisgICAgICBAcHJpdmF0ZQorICAgICovCisg
ICAgcmVwbGFjZVJvdXRlOiBmdW5jdGlvbiAoKSB7CisgICAgICAvLyB0YXJnZXQgbWF5IGJlIGVp
dGhlciBhbm90aGVyIGNvbnRyb2xsZXIgb3IgYSByb3V0ZXIKKyAgICAgIHZhciB0YXJnZXQgPSBf
ZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ3RhcmdldCcpOworICAgICAgdmFyIG1l
dGhvZCA9IHRhcmdldC5yZXBsYWNlUm91dGUgfHwgdGFyZ2V0LnJlcGxhY2VXaXRoOworICAgICAg
cmV0dXJuIG1ldGhvZC5hcHBseSh0YXJnZXQsIGFyZ3VtZW50cyk7CisgICAgfQorICB9KTsKKwor
ICBleHBvcnRzLmRlZmF1bHQgPSBfZW1iZXJSdW50aW1lTWl4aW5zQ29udHJvbGxlci5kZWZhdWx0
OworfSk7CitlbmlmZWQoJ2VtYmVyLXJvdXRpbmcvZXh0L3J1bl9sb29wJywgWydleHBvcnRzJywg
J2VtYmVyLW1ldGFsL3J1bl9sb29wJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbFJ1
bl9sb29wKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICAvKioKKyAgQG1vZHVsZSBlbWJlcgorICBA
c3VibW9kdWxlIGVtYmVyLXZpZXdzCisgICovCisKKyAgLy8gQWRkIGEgbmV3IG5hbWVkIHF1ZXVl
IGFmdGVyIHRoZSAnYWN0aW9ucycgcXVldWUgKHdoZXJlIFJTVlAgcHJvbWlzZXMKKyAgLy8gcmVz
b2x2ZSksIHdoaWNoIGlzIHVzZWQgaW4gcm91dGVyIHRyYW5zaXRpb25zIHRvIHByZXZlbnQgdW5u
ZWNlc3NhcnkKKyAgLy8gbG9hZGluZyBzdGF0ZSBlbnRyeSBpZiBhbGwgY29udGV4dCBwcm9taXNl
cyByZXNvbHZlIG9uIHRoZQorICAvLyAnYWN0aW9ucycgcXVldWUgZmlyc3QuCisgIF9lbWJlck1l
dGFsUnVuX2xvb3AuZGVmYXVsdC5fYWRkUXVldWUoJ3JvdXRlclRyYW5zaXRpb25zJywgJ2FjdGlv
bnMnKTsKK30pOworZW5pZmVkKCdlbWJlci1yb3V0aW5nL2luZGV4JywgWydleHBvcnRzJywgJ2Vt
YmVyLW1ldGFsL2NvcmUnLCAnZW1iZXItcm91dGluZy9leHQvcnVuX2xvb3AnLCAnZW1iZXItcm91
dGluZy9leHQvY29udHJvbGxlcicsICdlbWJlci1yb3V0aW5nL2xvY2F0aW9uL2FwaScsICdlbWJl
ci1yb3V0aW5nL2xvY2F0aW9uL25vbmVfbG9jYXRpb24nLCAnZW1iZXItcm91dGluZy9sb2NhdGlv
bi9oYXNoX2xvY2F0aW9uJywgJ2VtYmVyLXJvdXRpbmcvbG9jYXRpb24vaGlzdG9yeV9sb2NhdGlv
bicsICdlbWJlci1yb3V0aW5nL2xvY2F0aW9uL2F1dG9fbG9jYXRpb24nLCAnZW1iZXItcm91dGlu
Zy9zeXN0ZW0vZ2VuZXJhdGVfY29udHJvbGxlcicsICdlbWJlci1yb3V0aW5nL3N5c3RlbS9jb250
cm9sbGVyX2ZvcicsICdlbWJlci1yb3V0aW5nL3N5c3RlbS9kc2wnLCAnZW1iZXItcm91dGluZy9z
eXN0ZW0vcm91dGVyJywgJ2VtYmVyLXJvdXRpbmcvc3lzdGVtL3JvdXRlJ10sIGZ1bmN0aW9uIChl
eHBvcnRzLCBfZW1iZXJNZXRhbENvcmUsIF9lbWJlclJvdXRpbmdFeHRSdW5fbG9vcCwgX2VtYmVy
Um91dGluZ0V4dENvbnRyb2xsZXIsIF9lbWJlclJvdXRpbmdMb2NhdGlvbkFwaSwgX2VtYmVyUm91
dGluZ0xvY2F0aW9uTm9uZV9sb2NhdGlvbiwgX2VtYmVyUm91dGluZ0xvY2F0aW9uSGFzaF9sb2Nh
dGlvbiwgX2VtYmVyUm91dGluZ0xvY2F0aW9uSGlzdG9yeV9sb2NhdGlvbiwgX2VtYmVyUm91dGlu
Z0xvY2F0aW9uQXV0b19sb2NhdGlvbiwgX2VtYmVyUm91dGluZ1N5c3RlbUdlbmVyYXRlX2NvbnRy
b2xsZXIsIF9lbWJlclJvdXRpbmdTeXN0ZW1Db250cm9sbGVyX2ZvciwgX2VtYmVyUm91dGluZ1N5
c3RlbURzbCwgX2VtYmVyUm91dGluZ1N5c3RlbVJvdXRlciwgX2VtYmVyUm91dGluZ1N5c3RlbVJv
dXRlKSB7CisgIC8qKgorICBAbW9kdWxlIGVtYmVyCisgIEBzdWJtb2R1bGUgZW1iZXItcm91dGlu
ZworICAqLworCisgICd1c2Ugc3RyaWN0JzsKKworICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5M
b2NhdGlvbiA9IF9lbWJlclJvdXRpbmdMb2NhdGlvbkFwaS5kZWZhdWx0OworICBfZW1iZXJNZXRh
bENvcmUuZGVmYXVsdC5BdXRvTG9jYXRpb24gPSBfZW1iZXJSb3V0aW5nTG9jYXRpb25BdXRvX2xv
Y2F0aW9uLmRlZmF1bHQ7CisgIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0Lkhhc2hMb2NhdGlvbiA9
IF9lbWJlclJvdXRpbmdMb2NhdGlvbkhhc2hfbG9jYXRpb24uZGVmYXVsdDsKKyAgX2VtYmVyTWV0
YWxDb3JlLmRlZmF1bHQuSGlzdG9yeUxvY2F0aW9uID0gX2VtYmVyUm91dGluZ0xvY2F0aW9uSGlz
dG9yeV9sb2NhdGlvbi5kZWZhdWx0OworICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5Ob25lTG9j
YXRpb24gPSBfZW1iZXJSb3V0aW5nTG9jYXRpb25Ob25lX2xvY2F0aW9uLmRlZmF1bHQ7CisKKyAg
X2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuY29udHJvbGxlckZvciA9IF9lbWJlclJvdXRpbmdTeXN0
ZW1Db250cm9sbGVyX2Zvci5kZWZhdWx0OworICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5nZW5l
cmF0ZUNvbnRyb2xsZXJGYWN0b3J5ID0gX2VtYmVyUm91dGluZ1N5c3RlbUdlbmVyYXRlX2NvbnRy
b2xsZXIuZ2VuZXJhdGVDb250cm9sbGVyRmFjdG9yeTsKKyAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1
bHQuZ2VuZXJhdGVDb250cm9sbGVyID0gX2VtYmVyUm91dGluZ1N5c3RlbUdlbmVyYXRlX2NvbnRy
b2xsZXIuZGVmYXVsdDsKKyAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuUm91dGVyRFNMID0gX2Vt
YmVyUm91dGluZ1N5c3RlbURzbC5kZWZhdWx0OworICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5S
b3V0ZXIgPSBfZW1iZXJSb3V0aW5nU3lzdGVtUm91dGVyLmRlZmF1bHQ7CisgIF9lbWJlck1ldGFs
Q29yZS5kZWZhdWx0LlJvdXRlID0gX2VtYmVyUm91dGluZ1N5c3RlbVJvdXRlLmRlZmF1bHQ7CisK
KyAgZXhwb3J0cy5kZWZhdWx0ID0gX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQ7Cit9KTsKKworLy8g
RVM2VE9ETzogQ2xlYW51cCBtb2R1bGVzIHdpdGggc2lkZS1lZmZlY3RzIGJlbG93CitlbmlmZWQo
J2VtYmVyLXJvdXRpbmcvbG9jYXRpb24vYXBpJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2Rl
YnVnJywgJ2VtYmVyLW1ldGFsL2Vudmlyb25tZW50JywgJ2VtYmVyLXJvdXRpbmcvbG9jYXRpb24v
dXRpbCddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxEZWJ1ZywgX2VtYmVyTWV0YWxF
bnZpcm9ubWVudCwgX2VtYmVyUm91dGluZ0xvY2F0aW9uVXRpbCkgeworICAndXNlIHN0cmljdCc7
CisKKyAgLyoqCisgIEBtb2R1bGUgZW1iZXIKKyAgQHN1Ym1vZHVsZSBlbWJlci1yb3V0aW5nCisg
ICovCisKKyAgLyoqCisgICAgRW1iZXIuTG9jYXRpb24gcmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0
aGUgY29ycmVjdCBpbXBsZW1lbnRhdGlvbiBvZgorICAgIHRoZSBgbG9jYXRpb25gIEFQSS4KKyAg
CisgICAgIyMgSW1wbGVtZW50YXRpb25zCisgIAorICAgIFlvdSBjYW4gcGFzcyBhbiBpbXBsZW1l
bnRhdGlvbiBuYW1lIChgaGFzaGAsIGBoaXN0b3J5YCwgYG5vbmVgKSB0byBmb3JjZSBhCisgICAg
cGFydGljdWxhciBpbXBsZW1lbnRhdGlvbiB0byBiZSB1c2VkIGluIHlvdXIgYXBwbGljYXRpb24u
CisgIAorICAgICMjIyBIYXNoTG9jYXRpb24KKyAgCisgICAgVXNpbmcgYEhhc2hMb2NhdGlvbmAg
cmVzdWx0cyBpbiBVUkxzIHdpdGggYSBgI2AgKGhhc2ggc2lnbikgc2VwYXJhdGluZyB0aGUKKyAg
ICBzZXJ2ZXIgc2lkZSBVUkwgcG9ydGlvbiBvZiB0aGUgVVJMIGZyb20gdGhlIHBvcnRpb24gdGhh
dCBpcyB1c2VkIGJ5IEVtYmVyLgorICAgIFRoaXMgcmVsaWVzIHVwb24gdGhlIGBoYXNoY2hhbmdl
YCBldmVudCBleGlzdGluZyBpbiB0aGUgYnJvd3Nlci4KKyAgCisgICAgRXhhbXBsZToKKyAgCisg
ICAgYGBgamF2YXNjcmlwdAorICAgIEFwcC5Sb3V0ZXIubWFwKGZ1bmN0aW9uKCkgeworICAgICAg
dGhpcy5yb3V0ZSgncG9zdHMnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5yb3V0ZSgnbmV3
Jyk7CisgICAgICB9KTsKKyAgICB9KTsKKyAgCisgICAgQXBwLlJvdXRlci5yZW9wZW4oeworICAg
ICAgbG9jYXRpb246ICdoYXNoJworICAgIH0pOworICAgIGBgYAorICAKKyAgICBUaGlzIHdpbGwg
cmVzdWx0IGluIGEgcG9zdHMubmV3IHVybCBvZiBgLyMvcG9zdHMvbmV3YC4KKyAgCisgICAgIyMj
IEhpc3RvcnlMb2NhdGlvbgorICAKKyAgICBVc2luZyBgSGlzdG9yeUxvY2F0aW9uYCByZXN1bHRz
IGluIFVSTHMgdGhhdCBhcmUgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBhCisgICAgc3RhbmRhcmQg
VVJMLiBUaGlzIHJlbGllcyB1cG9uIHRoZSBicm93c2VyJ3MgYGhpc3RvcnlgIEFQSS4KKyAgCisg
ICAgRXhhbXBsZToKKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIEFwcC5Sb3V0ZXIubWFwKGZ1
bmN0aW9uKCkgeworICAgICAgdGhpcy5yb3V0ZSgncG9zdHMnLCBmdW5jdGlvbigpIHsKKyAgICAg
ICAgdGhpcy5yb3V0ZSgnbmV3Jyk7CisgICAgICB9KTsKKyAgICB9KTsKKyAgCisgICAgQXBwLlJv
dXRlci5yZW9wZW4oeworICAgICAgbG9jYXRpb246ICdoaXN0b3J5JworICAgIH0pOworICAgIGBg
YAorICAKKyAgICBUaGlzIHdpbGwgcmVzdWx0IGluIGEgcG9zdHMubmV3IHVybCBvZiBgL3Bvc3Rz
L25ld2AuCisgIAorICAgIEtlZXAgaW4gbWluZCB0aGF0IHlvdXIgc2VydmVyIG11c3Qgc2VydmUg
dGhlIEVtYmVyIGFwcCBhdCBhbGwgdGhlIHJvdXRlcyB5b3UKKyAgICBkZWZpbmUuCisgIAorICAg
ICMjIyBBdXRvTG9jYXRpb24KKyAgCisgICAgVXNpbmcgYEF1dG9Mb2NhdGlvbmAsIHRoZSByb3V0
ZXIgd2lsbCB1c2UgdGhlIGJlc3QgTG9jYXRpb24gY2xhc3Mgc3VwcG9ydGVkIGJ5CisgICAgdGhl
IGJyb3dzZXIgaXQgaXMgcnVubmluZyBpbi4KKyAgCisgICAgQnJvd3NlcnMgdGhhdCBzdXBwb3J0
IHRoZSBgaGlzdG9yeWAgQVBJIHdpbGwgdXNlIGBIaXN0b3J5TG9jYXRpb25gLCB0aG9zZSB0aGF0
CisgICAgZG8gbm90LCBidXQgc3RpbGwgc3VwcG9ydCB0aGUgYGhhc2hjaGFuZ2VgIGV2ZW50IHdp
bGwgdXNlIGBIYXNoTG9jYXRpb25gLCBhbmQKKyAgICBpbiB0aGUgcmFyZSBjYXNlIG5laXRoZXIg
aXMgc3VwcG9ydGVkIHdpbGwgdXNlIGBOb25lTG9jYXRpb25gLgorICAKKyAgICBFeGFtcGxlOgor
ICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgQXBwLlJvdXRlci5tYXAoZnVuY3Rpb24oKSB7Cisg
ICAgICB0aGlzLnJvdXRlKCdwb3N0cycsIGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLnJvdXRl
KCduZXcnKTsKKyAgICAgIH0pOworICAgIH0pOworICAKKyAgICBBcHAuUm91dGVyLnJlb3Blbih7
CisgICAgICBsb2NhdGlvbjogJ2F1dG8nCisgICAgfSk7CisgICAgYGBgCisgIAorICAgIFRoaXMg
d2lsbCByZXN1bHQgaW4gYSBwb3N0cy5uZXcgdXJsIG9mIGAvcG9zdHMvbmV3YCBmb3IgbW9kZXJu
IGJyb3dzZXJzIHRoYXQKKyAgICBzdXBwb3J0IHRoZSBgaGlzdG9yeWAgYXBpIG9yIGAvIy9wb3N0
cy9uZXdgIGZvciBvbGRlciBvbmVzLCBsaWtlIEludGVybmV0CisgICAgRXhwbG9yZXIgOSBhbmQg
YmVsb3cuCisgIAorICAgIFdoZW4gYSB1c2VyIHZpc2l0cyBhIGxpbmsgdG8geW91ciBhcHBsaWNh
dGlvbiwgdGhleSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkKKyAgICB1cGdyYWRlZCBvciBkb3duZ3Jh
ZGVkIHRvIHRoZSBhcHByb3ByaWF0ZSBgTG9jYXRpb25gIGNsYXNzLCB3aXRoIHRoZSBVUkwKKyAg
ICB0cmFuc2Zvcm1lZCBhY2NvcmRpbmdseSwgaWYgbmVlZGVkLgorICAKKyAgICBLZWVwIGluIG1p
bmQgdGhhdCBzaW5jZSBzb21lIG9mIHlvdXIgdXNlcnMgd2lsbCB1c2UgYEhpc3RvcnlMb2NhdGlv
bmAsIHlvdXIKKyAgICBzZXJ2ZXIgbXVzdCBzZXJ2ZSB0aGUgRW1iZXIgYXBwIGF0IGFsbCB0aGUg
cm91dGVzIHlvdSBkZWZpbmUuCisgIAorICAgICMjIyBOb25lTG9jYXRpb24KKyAgCisgICAgVXNp
bmcgYE5vbmVMb2NhdGlvbmAgY2F1c2VzIEVtYmVyIHRvIG5vdCBzdG9yZSB0aGUgYXBwbGljYXRp
b25zIFVSTCBzdGF0ZQorICAgIGluIHRoZSBhY3R1YWwgVVJMLiBUaGlzIGlzIGdlbmVyYWxseSB1
c2VkIGZvciB0ZXN0aW5nIHB1cnBvc2VzLCBhbmQgaXMgb25lCisgICAgb2YgdGhlIGNoYW5nZXMg
bWFkZSB3aGVuIGNhbGxpbmcgYEFwcC5zZXR1cEZvclRlc3RpbmcoKWAuCisgIAorICAgICMjIExv
Y2F0aW9uIEFQSQorICAKKyAgICBFYWNoIGxvY2F0aW9uIGltcGxlbWVudGF0aW9uIG11c3QgcHJv
dmlkZSB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CisgIAorICAgICogaW1wbGVtZW50YXRpb246IHJl
dHVybnMgdGhlIHN0cmluZyBuYW1lIHVzZWQgdG8gcmVmZXJlbmNlIHRoZSBpbXBsZW1lbnRhdGlv
bi4KKyAgICAqIGdldFVSTDogcmV0dXJucyB0aGUgY3VycmVudCBVUkwuCisgICAgKiBzZXRVUkwo
cGF0aCk6IHNldHMgdGhlIGN1cnJlbnQgVVJMLgorICAgICogcmVwbGFjZVVSTChwYXRoKTogcmVw
bGFjZSB0aGUgY3VycmVudCBVUkwgKG9wdGlvbmFsKS4KKyAgICAqIG9uVXBkYXRlVVJMKGNhbGxi
YWNrKTogdHJpZ2dlcnMgdGhlIGNhbGxiYWNrIHdoZW4gdGhlIFVSTCBjaGFuZ2VzLgorICAgICog
Zm9ybWF0VVJMKHVybCk6IGZvcm1hdHMgYHVybGAgdG8gYmUgcGxhY2VkIGludG8gYGhyZWZgIGF0
dHJpYnV0ZS4KKyAgICAqIGRldGVjdCgpIChvcHRpb25hbCk6IGluc3RydWN0cyB0aGUgbG9jYXRp
b24gdG8gZG8gYW55IGZlYXR1cmUgZGV0ZWN0aW9uCisgICAgICAgIG5lY2Vzc2FyeS4gSWYgdGhl
IGxvY2F0aW9uIG5lZWRzIHRvIHJlZGlyZWN0IHRvIGEgZGlmZmVyZW50IFVSTCwgaXQKKyAgICAg
ICAgY2FuIGNhbmNlbCByb3V0aW5nIGJ5IHNldHRpbmcgdGhlIGBjYW5jZWxSb3V0ZXJTZXR1cGAg
cHJvcGVydHkgb24gaXRzZWxmCisgICAgICAgIHRvIGBmYWxzZWAuCisgIAorICAgIENhbGxpbmcg
c2V0VVJMIG9yIHJlcGxhY2VVUkwgd2lsbCBub3QgdHJpZ2dlciBvblVwZGF0ZVVSTCBjYWxsYmFj
a3MuCisgIAorICAgICMjIEN1c3RvbSBpbXBsZW1lbnRhdGlvbgorICAKKyAgICBFbWJlciBzY2Fu
cyBgYXBwL2xvY2F0aW9ucy8qYCBmb3IgZXh0ZW5kaW5nIHRoZSBMb2NhdGlvbiBBUEkuCisgIAor
ICAgIEV4YW1wbGU6CisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAgICBpbXBvcnQgRW1iZXIgZnJv
bSAnZW1iZXInOworICAKKyAgICBleHBvcnQgZGVmYXVsdCBFbWJlci5IaXN0b3J5TG9jYXRpb24u
ZXh0ZW5kKHsKKyAgICAgIGltcGxlbWVudGF0aW9uOiAnaGlzdG9yeS11cmwtbG9nZ2luZycsCisg
IAorICAgICAgcHVzaFN0YXRlOiBmdW5jdGlvbiAocGF0aCkgeworICAgICAgICBjb25zb2xlLmxv
ZyhwYXRoKTsKKyAgICAgICAgdGhpcy5fc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAg
ICAgIH0KKyAgICB9KTsKKyAgICBgYGAKKyAgCisgICAgQGNsYXNzIExvY2F0aW9uCisgICAgQG5h
bWVzcGFjZSBFbWJlcgorICAgIEBzdGF0aWMKKyAgICBAcHJpdmF0ZQorICAqLworICBleHBvcnRz
LmRlZmF1bHQgPSB7CisgICAgLyoqCisgICAgIFRoaXMgaXMgZGVwcmVjYXRlZCBpbiBmYXZvciBv
ZiB1c2luZyB0aGUgY29udGFpbmVyIHRvIGxvb2t1cCB0aGUgbG9jYXRpb24KKyAgICAgaW1wbGVt
ZW50YXRpb24gYXMgZGVzaXJlZC4KKyAgICAgIEZvciBleGFtcGxlOgorICAgICAgYGBgamF2YXNj
cmlwdAorICAgICAvLyBHaXZlbiBhIGxvY2F0aW9uIHJlZ2lzdGVyZWQgYXMgZm9sbG93czoKKyAg
ICAgY29udGFpbmVyLnJlZ2lzdGVyKCdsb2NhdGlvbjpoaXN0b3J5LXRlc3QnLCBIaXN0b3J5VGVz
dExvY2F0aW9uKTsKKyAgICAgIC8vIFlvdSBjb3VsZCBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugdmlh
OgorICAgICBjb250YWluZXIubG9va3VwKCdsb2NhdGlvbjpoaXN0b3J5LXRlc3QnKTsKKyAgICAg
YGBgCisgICAgICAgQG1ldGhvZCBjcmVhdGUKKyAgICAgIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25z
CisgICAgICBAcmV0dXJuIHtPYmplY3R9IGFuIGluc3RhbmNlIG9mIGFuIGltcGxlbWVudGF0aW9u
IG9mIHRoZSBgbG9jYXRpb25gIEFQSQorICAgICAgQGRlcHJlY2F0ZWQgVXNlIHRoZSBjb250YWlu
ZXIgdG8gbG9va3VwIHRoZSBsb2NhdGlvbiBpbXBsZW1lbnRhdGlvbiB0aGF0IHlvdQorICAgICAg
bmVlZC4KKyAgICAgIEBwcml2YXRlCisgICAgKi8KKyAgICBjcmVhdGU6IGZ1bmN0aW9uIChvcHRp
b25zKSB7CisgICAgICB2YXIgaW1wbGVtZW50YXRpb24gPSBvcHRpb25zICYmIG9wdGlvbnMuaW1w
bGVtZW50YXRpb247CisgICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnRW1iZXIuTG9jYXRp
b24uY3JlYXRlOiB5b3UgbXVzdCBzcGVjaWZ5IGEgXCdpbXBsZW1lbnRhdGlvblwnIG9wdGlvbics
ICEhaW1wbGVtZW50YXRpb24pOworCisgICAgICB2YXIgaW1wbGVtZW50YXRpb25DbGFzcyA9IHRo
aXMuaW1wbGVtZW50YXRpb25zW2ltcGxlbWVudGF0aW9uXTsKKyAgICAgIF9lbWJlck1ldGFsRGVi
dWcuYXNzZXJ0KCdFbWJlci5Mb2NhdGlvbi5jcmVhdGU6ICcgKyBpbXBsZW1lbnRhdGlvbiArICcg
aXMgbm90IGEgdmFsaWQgaW1wbGVtZW50YXRpb24nLCAhIWltcGxlbWVudGF0aW9uQ2xhc3MpOwor
CisgICAgICByZXR1cm4gaW1wbGVtZW50YXRpb25DbGFzcy5jcmVhdGUuYXBwbHkoaW1wbGVtZW50
YXRpb25DbGFzcywgYXJndW1lbnRzKTsKKyAgICB9LAorCisgICAgaW1wbGVtZW50YXRpb25zOiB7
fSwKKyAgICBfbG9jYXRpb246IF9lbWJlck1ldGFsRW52aXJvbm1lbnQuZGVmYXVsdC5sb2NhdGlv
biwKKworICAgIC8qKgorICAgICAgUmV0dXJucyB0aGUgY3VycmVudCBgbG9jYXRpb24uaGFzaGAg
YnkgcGFyc2luZyBsb2NhdGlvbi5ocmVmIHNpbmNlIGJyb3dzZXJzCisgICAgICBpbmNvbnNpc3Rl
bnRseSBVUkwtZGVjb2RlIGBsb2NhdGlvbi5oYXNoYC4KKyAgICAgICBodHRwczovL2J1Z3ppbGxh
Lm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD00ODMzMDQKKyAgICAgICBAcHJpdmF0ZQorICAg
ICAgQG1ldGhvZCBnZXRIYXNoCisgICAgICBAc2luY2UgMS40LjAKKyAgICAqLworICAgIF9nZXRI
YXNoOiBmdW5jdGlvbiAoKSB7CisgICAgICByZXR1cm4gX2VtYmVyUm91dGluZ0xvY2F0aW9uVXRp
bC5nZXRIYXNoKHRoaXMubG9jYXRpb24pOworICAgIH0KKyAgfTsKK30pOworZW5pZmVkKCdlbWJl
ci1yb3V0aW5nL2xvY2F0aW9uL2F1dG9fbG9jYXRpb24nLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0
YWwvZGVidWcnLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0JywgJ2VtYmVyLW1ldGFsL3Byb3Bl
cnR5X3NldCcsICdlbWJlci1tZXRhbC91dGlscycsICdjb250YWluZXIvb3duZXInLCAnZW1iZXIt
cnVudGltZS9zeXN0ZW0vb2JqZWN0JywgJ2VtYmVyLW1ldGFsL2Vudmlyb25tZW50JywgJ2VtYmVy
LXJvdXRpbmcvbG9jYXRpb24vdXRpbCddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxE
ZWJ1ZywgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQsIF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LCBf
ZW1iZXJNZXRhbFV0aWxzLCBfY29udGFpbmVyT3duZXIsIF9lbWJlclJ1bnRpbWVTeXN0ZW1PYmpl
Y3QsIF9lbWJlck1ldGFsRW52aXJvbm1lbnQsIF9lbWJlclJvdXRpbmdMb2NhdGlvblV0aWwpIHsK
KyAgJ3VzZSBzdHJpY3QnOworCisgIGV4cG9ydHMuZ2V0SGlzdG9yeVBhdGggPSBnZXRIaXN0b3J5
UGF0aDsKKyAgZXhwb3J0cy5nZXRIYXNoUGF0aCA9IGdldEhhc2hQYXRoOworCisgIC8qKgorICBA
bW9kdWxlIGVtYmVyCisgIEBzdWJtb2R1bGUgZW1iZXItcm91dGluZworICAqLworCisgIC8qKgor
ICAgIEVtYmVyLkF1dG9Mb2NhdGlvbiB3aWxsIHNlbGVjdCB0aGUgYmVzdCBsb2NhdGlvbiBvcHRp
b24gYmFzZWQgb2ZmIGJyb3dzZXIKKyAgICBzdXBwb3J0IHdpdGggdGhlIHByaW9yaXR5IG9yZGVy
OiBoaXN0b3J5LCBoYXNoLCBub25lLgorICAKKyAgICBDbGVhbiBwdXNoU3RhdGUgcGF0aHMgYWNj
ZXNzZWQgYnkgaGFzaGNoYW5nZS1vbmx5IGJyb3dzZXJzIHdpbGwgYmUgcmVkaXJlY3RlZAorICAg
IHRvIHRoZSBoYXNoLWVxdWl2YWxlbnQgYW5kIHZpY2UgdmVyc2Egc28gZnV0dXJlIHRyYW5zaXRp
b25zIGFyZSBjb25zaXN0ZW50LgorICAKKyAgICBLZWVwIGluIG1pbmQgdGhhdCBzaW5jZSBzb21l
IG9mIHlvdXIgdXNlcnMgd2lsbCB1c2UgYEhpc3RvcnlMb2NhdGlvbmAsIHlvdXIKKyAgICBzZXJ2
ZXIgbXVzdCBzZXJ2ZSB0aGUgRW1iZXIgYXBwIGF0IGFsbCB0aGUgcm91dGVzIHlvdSBkZWZpbmUu
CisgIAorICAgIEBjbGFzcyBBdXRvTG9jYXRpb24KKyAgICBAbmFtZXNwYWNlIEVtYmVyCisgICAg
QHN0YXRpYworICAgIEBwcml2YXRlCisgICovCisgIGV4cG9ydHMuZGVmYXVsdCA9IF9lbWJlclJ1
bnRpbWVTeXN0ZW1PYmplY3QuZGVmYXVsdC5leHRlbmQoeworICAgIC8qKgorICAgICAgQHByaXZh
dGUKKyAgICAgICBUaGUgYnJvd3NlcidzIGBsb2NhdGlvbmAgb2JqZWN0LiBUaGlzIGlzIHR5cGlj
YWxseSBlcXVpdmFsZW50IHRvCisgICAgICBgd2luZG93LmxvY2F0aW9uYCwgYnV0IG1heSBiZSBv
dmVycmlkZGVuIGZvciB0ZXN0aW5nLgorICAgICAgIEBwcm9wZXJ0eSBsb2NhdGlvbgorICAgICAg
QGRlZmF1bHQgZW52aXJvbm1lbnQubG9jYXRpb24KKyAgICAqLworICAgIGxvY2F0aW9uOiBfZW1i
ZXJNZXRhbEVudmlyb25tZW50LmRlZmF1bHQubG9jYXRpb24sCisKKyAgICAvKioKKyAgICAgIEBw
cml2YXRlCisgICAgICAgVGhlIGJyb3dzZXIncyBgaGlzdG9yeWAgb2JqZWN0LiBUaGlzIGlzIHR5
cGljYWxseSBlcXVpdmFsZW50IHRvCisgICAgICBgd2luZG93Lmhpc3RvcnlgLCBidXQgbWF5IGJl
IG92ZXJyaWRkZW4gZm9yIHRlc3RpbmcuCisgICAgICAgQHNpbmNlIDEuNS4xCisgICAgICBAcHJv
cGVydHkgaGlzdG9yeQorICAgICAgQGRlZmF1bHQgZW52aXJvbm1lbnQuaGlzdG9yeQorICAgICov
CisgICAgaGlzdG9yeTogX2VtYmVyTWV0YWxFbnZpcm9ubWVudC5kZWZhdWx0Lmhpc3RvcnksCisK
KyAgICAvKioKKyAgICAgQHByaXZhdGUKKyAgICAgIFRoZSB1c2VyIGFnZW50J3MgZ2xvYmFsIHZh
cmlhYmxlLiBJbiBicm93c2VycywgdGhpcyB3aWxsIGJlIGB3aW5kb3dgLgorICAgICAgQHNpbmNl
IDEuMTEKKyAgICAgQHByb3BlcnR5IGdsb2JhbAorICAgICBAZGVmYXVsdCBlbnZpcm9ubWVudC5n
bG9iYWwKKyAgICAqLworICAgIGdsb2JhbDogX2VtYmVyTWV0YWxFbnZpcm9ubWVudC5kZWZhdWx0
Lmdsb2JhbCwKKworICAgIC8qKgorICAgICAgQHByaXZhdGUKKyAgICAgICBUaGUgYnJvd3Nlcidz
IGB1c2VyQWdlbnRgLiBUaGlzIGlzIHR5cGljYWxseSBlcXVpdmFsZW50IHRvCisgICAgICBgbmF2
aWdhdG9yLnVzZXJBZ2VudGAsIGJ1dCBtYXkgYmUgb3ZlcnJpZGRlbiBmb3IgdGVzdGluZy4KKyAg
ICAgICBAc2luY2UgMS41LjEKKyAgICAgIEBwcm9wZXJ0eSB1c2VyQWdlbnQKKyAgICAgIEBkZWZh
dWx0IGVudmlyb25tZW50Lmhpc3RvcnkKKyAgICAqLworICAgIHVzZXJBZ2VudDogX2VtYmVyTWV0
YWxFbnZpcm9ubWVudC5kZWZhdWx0LnVzZXJBZ2VudCwKKworICAgIC8qKgorICAgICAgQHByaXZh
dGUKKyAgICAgICBUaGlzIHByb3BlcnR5IGlzIHVzZWQgYnkgdGhlIHJvdXRlciB0byBrbm93IHdo
ZXRoZXIgdG8gY2FuY2VsIHRoZSByb3V0aW5nCisgICAgICBzZXR1cCBwcm9jZXNzLCB3aGljaCBp
cyBuZWVkZWQgd2hpbGUgd2UgcmVkaXJlY3QgdGhlIGJyb3dzZXIuCisgICAgICAgQHNpbmNlIDEu
NS4xCisgICAgICBAcHJvcGVydHkgY2FuY2VsUm91dGVyU2V0dXAKKyAgICAgIEBkZWZhdWx0IGZh
bHNlCisgICAgKi8KKyAgICBjYW5jZWxSb3V0ZXJTZXR1cDogZmFsc2UsCisKKyAgICAvKioKKyAg
ICAgIEBwcml2YXRlCisgICAgICAgV2lsbCBiZSBwcmUtcGVuZGVkIHRvIHBhdGggdXBvbiBzdGF0
ZSBjaGFuZ2UuCisgICAgICAgQHNpbmNlIDEuNS4xCisgICAgICBAcHJvcGVydHkgcm9vdFVSTAor
ICAgICAgQGRlZmF1bHQgJy8nCisgICAgKi8KKyAgICByb290VVJMOiAnLycsCisKKyAgICAvKioK
KyAgICAgQ2FsbGVkIGJ5IHRoZSByb3V0ZXIgdG8gaW5zdHJ1Y3QgdGhlIGxvY2F0aW9uIHRvIGRv
IGFueSBmZWF0dXJlIGRldGVjdGlvbgorICAgICBuZWNlc3NhcnkuIEluIHRoZSBjYXNlIG9mIEF1
dG9Mb2NhdGlvbiwgd2UgZGV0ZWN0IHdoZXRoZXIgdG8gdXNlIGhpc3RvcnkKKyAgICAgb3IgaGFz
aCBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbnMuCisgICAgICBAcHJpdmF0ZQorICAgICovCisgICAg
ZGV0ZWN0OiBmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgcm9vdFVSTCA9IHRoaXMucm9vdFVSTDsK
KworICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ3Jvb3RVUkwgbXVzdCBlbmQgd2l0aCBh
IHRyYWlsaW5nIGZvcndhcmQgc2xhc2ggZS5nLiAiL2FwcC8iJywgcm9vdFVSTC5jaGFyQXQocm9v
dFVSTC5sZW5ndGggLSAxKSA9PT0gJy8nKTsKKworICAgICAgdmFyIGltcGxlbWVudGF0aW9uID0g
ZGV0ZWN0SW1wbGVtZW50YXRpb24oeworICAgICAgICBsb2NhdGlvbjogdGhpcy5sb2NhdGlvbiwK
KyAgICAgICAgaGlzdG9yeTogdGhpcy5oaXN0b3J5LAorICAgICAgICB1c2VyQWdlbnQ6IHRoaXMu
dXNlckFnZW50LAorICAgICAgICByb290VVJMOiByb290VVJMLAorICAgICAgICBkb2N1bWVudE1v
ZGU6IHRoaXMuZG9jdW1lbnRNb2RlLAorICAgICAgICBnbG9iYWw6IHRoaXMuZ2xvYmFsCisgICAg
ICB9KTsKKworICAgICAgaWYgKGltcGxlbWVudGF0aW9uID09PSBmYWxzZSkgeworICAgICAgICBf
ZW1iZXJNZXRhbFByb3BlcnR5X3NldC5zZXQodGhpcywgJ2NhbmNlbFJvdXRlclNldHVwJywgdHJ1
ZSk7CisgICAgICAgIGltcGxlbWVudGF0aW9uID0gJ25vbmUnOworICAgICAgfQorCisgICAgICB2
YXIgY29uY3JldGUgPSBfY29udGFpbmVyT3duZXIuZ2V0T3duZXIodGhpcykubG9va3VwKCdsb2Nh
dGlvbjonICsgaW1wbGVtZW50YXRpb24pOworICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQu
c2V0KGNvbmNyZXRlLCAncm9vdFVSTCcsIHJvb3RVUkwpOworCisgICAgICBfZW1iZXJNZXRhbERl
YnVnLmFzc2VydCgnQ291bGQgbm90IGZpbmQgbG9jYXRpb24gXCcnICsgaW1wbGVtZW50YXRpb24g
KyAnXCcuJywgISFjb25jcmV0ZSk7CisKKyAgICAgIF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LnNl
dCh0aGlzLCAnY29uY3JldGVJbXBsZW1lbnRhdGlvbicsIGNvbmNyZXRlKTsKKyAgICB9LAorCisg
ICAgaW5pdFN0YXRlOiBkZWxlZ2F0ZVRvQ29uY3JldGVJbXBsZW1lbnRhdGlvbignaW5pdFN0YXRl
JyksCisgICAgZ2V0VVJMOiBkZWxlZ2F0ZVRvQ29uY3JldGVJbXBsZW1lbnRhdGlvbignZ2V0VVJM
JyksCisgICAgc2V0VVJMOiBkZWxlZ2F0ZVRvQ29uY3JldGVJbXBsZW1lbnRhdGlvbignc2V0VVJM
JyksCisgICAgcmVwbGFjZVVSTDogZGVsZWdhdGVUb0NvbmNyZXRlSW1wbGVtZW50YXRpb24oJ3Jl
cGxhY2VVUkwnKSwKKyAgICBvblVwZGF0ZVVSTDogZGVsZWdhdGVUb0NvbmNyZXRlSW1wbGVtZW50
YXRpb24oJ29uVXBkYXRlVVJMJyksCisgICAgZm9ybWF0VVJMOiBkZWxlZ2F0ZVRvQ29uY3JldGVJ
bXBsZW1lbnRhdGlvbignZm9ybWF0VVJMJyksCisKKyAgICB3aWxsRGVzdHJveTogZnVuY3Rpb24g
KCkgeworICAgICAgdmFyIGNvbmNyZXRlSW1wbGVtZW50YXRpb24gPSBfZW1iZXJNZXRhbFByb3Bl
cnR5X2dldC5nZXQodGhpcywgJ2NvbmNyZXRlSW1wbGVtZW50YXRpb24nKTsKKworICAgICAgaWYg
KGNvbmNyZXRlSW1wbGVtZW50YXRpb24pIHsKKyAgICAgICAgY29uY3JldGVJbXBsZW1lbnRhdGlv
bi5kZXN0cm95KCk7CisgICAgICB9CisgICAgfQorICB9KTsKKworICBmdW5jdGlvbiBkZWxlZ2F0
ZVRvQ29uY3JldGVJbXBsZW1lbnRhdGlvbihtZXRob2ROYW1lKSB7CisgICAgcmV0dXJuIGZ1bmN0
aW9uICgpIHsKKyAgICAgIHZhciBjb25jcmV0ZUltcGxlbWVudGF0aW9uID0gX2VtYmVyTWV0YWxQ
cm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdjb25jcmV0ZUltcGxlbWVudGF0aW9uJyk7CisgICAgICBf
ZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnQXV0b0xvY2F0aW9uXCdzIGRldGVjdCgpIG1ldGhvZCBz
aG91bGQgYmUgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIGFueSBvdGhlciBob29rcy4nLCAhIWNvbmNy
ZXRlSW1wbGVtZW50YXRpb24pOworCisgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxl
bmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykg
eworICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldOworICAgICAgfQorCisgICAg
ICByZXR1cm4gX2VtYmVyTWV0YWxVdGlscy50cnlJbnZva2UoY29uY3JldGVJbXBsZW1lbnRhdGlv
biwgbWV0aG9kTmFtZSwgYXJncyk7CisgICAgfTsKKyAgfQorCisgIC8qCisgICAgR2l2ZW4gdGhl
IGJyb3dzZXIncyBgbG9jYXRpb25gLCBgaGlzdG9yeWAgYW5kIGB1c2VyQWdlbnRgLCBhbmQgYSBj
b25maWd1cmVkCisgICAgcm9vdCBVUkwsIHRoaXMgZnVuY3Rpb24gZGV0ZWN0cyB3aGV0aGVyIHRo
ZSBicm93c2VyIHN1cHBvcnRzIHRoZSBbSGlzdG9yeQorICAgIEFQSV0oaHR0cHM6Ly9kZXZlbG9w
ZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hpc3RvcnkpIGFuZCByZXR1cm5zIGEK
KyAgICBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBMb2NhdGlvbiBvYmplY3QgdG8gdXNlIGJhc2Vk
IG9uIGl0cyBkZXRlcm1pbmF0aW9uLgorICAKKyAgICBGb3IgZXhhbXBsZSwgaWYgdGhlIHBhZ2Ug
bG9hZHMgaW4gYW4gZXZlcmdyZWVuIGJyb3dzZXIsIHRoaXMgZnVuY3Rpb24gd291bGQKKyAgICBy
ZXR1cm4gdGhlIHN0cmluZyAiaGlzdG9yeSIsIG1lYW5pbmcgdGhlIGhpc3RvcnkgQVBJIGFuZCB0
aHVzIEhpc3RvcnlMb2NhdGlvbgorICAgIHNob3VsZCBiZSB1c2VkLiBJZiB0aGUgcGFnZSBpcyBs
b2FkZWQgaW4gSUU4LCBpdCB3aWxsIHJldHVybiB0aGUgc3RyaW5nCisgICAgImhhc2gsIiBpbmRp
Y2F0aW5nIHRoYXQgdGhlIEhpc3RvcnkgQVBJIHNob3VsZCBiZSBzaW11bGF0ZWQgYnkgbWFuaXB1
bGF0aW5nIHRoZQorICAgIGhhc2ggcG9ydGlvbiBvZiB0aGUgbG9jYXRpb24uCisgIAorICAqLwor
CisgIGZ1bmN0aW9uIGRldGVjdEltcGxlbWVudGF0aW9uKG9wdGlvbnMpIHsKKyAgICB2YXIgbG9j
YXRpb24gPSBvcHRpb25zLmxvY2F0aW9uOworICAgIHZhciB1c2VyQWdlbnQgPSBvcHRpb25zLnVz
ZXJBZ2VudDsKKyAgICB2YXIgaGlzdG9yeSA9IG9wdGlvbnMuaGlzdG9yeTsKKyAgICB2YXIgZG9j
dW1lbnRNb2RlID0gb3B0aW9ucy5kb2N1bWVudE1vZGU7CisgICAgdmFyIGdsb2JhbCA9IG9wdGlv
bnMuZ2xvYmFsOworICAgIHZhciByb290VVJMID0gb3B0aW9ucy5yb290VVJMOworCisgICAgdmFy
IGltcGxlbWVudGF0aW9uID0gJ25vbmUnOworICAgIHZhciBjYW5jZWxSb3V0ZXJTZXR1cCA9IGZh
bHNlOworICAgIHZhciBjdXJyZW50UGF0aCA9IF9lbWJlclJvdXRpbmdMb2NhdGlvblV0aWwuZ2V0
RnVsbFBhdGgobG9jYXRpb24pOworCisgICAgaWYgKF9lbWJlclJvdXRpbmdMb2NhdGlvblV0aWwu
c3VwcG9ydHNIaXN0b3J5KHVzZXJBZ2VudCwgaGlzdG9yeSkpIHsKKyAgICAgIHZhciBoaXN0b3J5
UGF0aCA9IGdldEhpc3RvcnlQYXRoKHJvb3RVUkwsIGxvY2F0aW9uKTsKKworICAgICAgLy8gSWYg
dGhlIGJyb3dzZXIgc3VwcG9ydHMgaGlzdG9yeSBhbmQgd2UgaGF2ZSBhIGhpc3RvcnkgcGF0aCwg
d2UgY2FuIHVzZQorICAgICAgLy8gdGhlIGhpc3RvcnkgbG9jYXRpb24gd2l0aCBubyByZWRpcmVj
dHMuCisgICAgICBpZiAoY3VycmVudFBhdGggPT09IGhpc3RvcnlQYXRoKSB7CisgICAgICAgIHJl
dHVybiAnaGlzdG9yeSc7CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAoY3VycmVudFBhdGgu
c3Vic3RyKDAsIDIpID09PSAnLyMnKSB7CisgICAgICAgICAgaGlzdG9yeS5yZXBsYWNlU3RhdGUo
eyBwYXRoOiBoaXN0b3J5UGF0aCB9LCBudWxsLCBoaXN0b3J5UGF0aCk7CisgICAgICAgICAgaW1w
bGVtZW50YXRpb24gPSAnaGlzdG9yeSc7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgY2Fu
Y2VsUm91dGVyU2V0dXAgPSB0cnVlOworICAgICAgICAgIF9lbWJlclJvdXRpbmdMb2NhdGlvblV0
aWwucmVwbGFjZVBhdGgobG9jYXRpb24sIGhpc3RvcnlQYXRoKTsKKyAgICAgICAgfQorICAgICAg
fQorICAgIH0gZWxzZSBpZiAoX2VtYmVyUm91dGluZ0xvY2F0aW9uVXRpbC5zdXBwb3J0c0hhc2hD
aGFuZ2UoZG9jdW1lbnRNb2RlLCBnbG9iYWwpKSB7CisgICAgICB2YXIgaGFzaFBhdGggPSBnZXRI
YXNoUGF0aChyb290VVJMLCBsb2NhdGlvbik7CisKKyAgICAgIC8vIEJlIHN1cmUgd2UncmUgdXNp
bmcgYSBoYXNoZWQgcGF0aCwgb3RoZXJ3aXNlIGxldCdzIHN3aXRjaCBvdmVyIGl0IHRvIHNvCisg
ICAgICAvLyB3ZSBzdGFydCBvZmYgY2xlYW4gYW5kIGNvbnNpc3RlbnQuIFdlJ2xsIGNvdW50IGFu
IGluZGV4IHBhdGggd2l0aCBubworICAgICAgLy8gaGFzaCBhcyAiZ29vZCBlbm91Z2giIGFzIHdl
bGwuCisgICAgICBpZiAoY3VycmVudFBhdGggPT09IGhhc2hQYXRoIHx8IGN1cnJlbnRQYXRoID09
PSAnLycgJiYgaGFzaFBhdGggPT09ICcvIy8nKSB7CisgICAgICAgIGltcGxlbWVudGF0aW9uID0g
J2hhc2gnOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT3VyIFVSTCBpc24ndCBpbiB0aGUg
ZXhwZWN0ZWQgaGFzaC1zdXBwb3J0ZWQgZm9ybWF0LCBzbyB3ZSB3YW50IHRvCisgICAgICAgIC8v
IGNhbmNlbCB0aGUgcm91dGVyIHNldHVwIGFuZCByZXBsYWNlIHRoZSBVUkwgdG8gc3RhcnQgb2Zm
IGNsZWFuCisgICAgICAgIGNhbmNlbFJvdXRlclNldHVwID0gdHJ1ZTsKKyAgICAgICAgX2VtYmVy
Um91dGluZ0xvY2F0aW9uVXRpbC5yZXBsYWNlUGF0aChsb2NhdGlvbiwgaGFzaFBhdGgpOworICAg
ICAgfQorICAgIH0KKworICAgIGlmIChjYW5jZWxSb3V0ZXJTZXR1cCkgeworICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBpbXBsZW1lbnRhdGlvbjsKKyAgfQorCisgIC8q
KgorICAgIEBwcml2YXRlCisgIAorICAgIFJldHVybnMgdGhlIGN1cnJlbnQgcGF0aCBhcyBpdCBz
aG91bGQgYXBwZWFyIGZvciBIaXN0b3J5TG9jYXRpb24gc3VwcG9ydGVkCisgICAgYnJvd3NlcnMu
IFRoaXMgbWF5IHZlcnkgd2VsbCBkaWZmZXIgZnJvbSB0aGUgcmVhbCBjdXJyZW50IHBhdGggKGUu
Zy4gaWYgaXQKKyAgICBzdGFydHMgb2ZmIGFzIGEgaGFzaGVkIFVSTCkKKyAgKi8KKworICBmdW5j
dGlvbiBnZXRIaXN0b3J5UGF0aChyb290VVJMLCBsb2NhdGlvbikgeworICAgIHZhciBwYXRoID0g
X2VtYmVyUm91dGluZ0xvY2F0aW9uVXRpbC5nZXRQYXRoKGxvY2F0aW9uKTsKKyAgICB2YXIgaGFz
aCA9IF9lbWJlclJvdXRpbmdMb2NhdGlvblV0aWwuZ2V0SGFzaChsb2NhdGlvbik7CisgICAgdmFy
IHF1ZXJ5ID0gX2VtYmVyUm91dGluZ0xvY2F0aW9uVXRpbC5nZXRRdWVyeShsb2NhdGlvbik7Cisg
ICAgdmFyIHJvb3RVUkxJbmRleCA9IHBhdGguaW5kZXhPZihyb290VVJMKTsKKyAgICB2YXIgcm91
dGVIYXNoLCBoYXNoUGFydHM7CisKKyAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnUGF0aCAn
ICsgcGF0aCArICcgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgcHJvdmlkZWQgcm9vdFVSTCAnICsg
cm9vdFVSTCwgcm9vdFVSTEluZGV4ID09PSAwKTsKKworICAgIC8vIEJ5IGNvbnZlbnRpb24sIEVt
YmVyLmpzIHJvdXRlcyB1c2luZyBIYXNoTG9jYXRpb24gYXJlIHJlcXVpcmVkIHRvIHN0YXJ0Cisg
ICAgLy8gd2l0aCBgIy9gLiBBbnl0aGluZyBlbHNlIHNob3VsZCBOT1QgYmUgY29uc2lkZXJlZCBh
IHJvdXRlIGFuZCBzaG91bGQKKyAgICAvLyBiZSBwYXNzZWQgc3RyYWlnaHQgdGhyb3VnaCwgd2l0
aG91dCB0cmFuc2Zvcm1hdGlvbi4KKyAgICBpZiAoaGFzaC5zdWJzdHIoMCwgMikgPT09ICcjLycp
IHsKKyAgICAgIC8vIFRoZXJlIGNvdWxkIGJlIGV4dHJhIGhhc2ggc2VnbWVudHMgYWZ0ZXIgdGhl
IHJvdXRlCisgICAgICBoYXNoUGFydHMgPSBoYXNoLnN1YnN0cigxKS5zcGxpdCgnIycpOworICAg
ICAgLy8gVGhlIGZpcnN0IG9uZSBpcyBhbHdheXMgdGhlIHJvdXRlIHVybAorICAgICAgcm91dGVI
YXNoID0gaGFzaFBhcnRzLnNoaWZ0KCk7CisKKyAgICAgIC8vIElmIHRoZSBwYXRoIGFscmVhZHkg
aGFzIGEgdHJhaWxpbmcgc2xhc2gsIHJlbW92ZSB0aGUgb25lCisgICAgICAvLyBmcm9tIHRoZSBo
YXNoZWQgcm91dGUgc28gd2UgZG9uJ3QgZG91YmxlIHVwLgorICAgICAgaWYgKHBhdGguc2xpY2Uo
LTEpID09PSAnLycpIHsKKyAgICAgICAgcm91dGVIYXNoID0gcm91dGVIYXNoLnN1YnN0cigxKTsK
KyAgICAgIH0KKworICAgICAgLy8gVGhpcyBpcyB0aGUgImV4cGVjdGVkIiBmaW5hbCBvcmRlcgor
ICAgICAgcGF0aCA9IHBhdGggKyByb3V0ZUhhc2ggKyBxdWVyeTsKKworICAgICAgaWYgKGhhc2hQ
YXJ0cy5sZW5ndGgpIHsKKyAgICAgICAgcGF0aCArPSAnIycgKyBoYXNoUGFydHMuam9pbignIycp
OworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBwYXRoID0gcGF0aCArIHF1ZXJ5ICsgaGFz
aDsKKyAgICB9CisKKyAgICByZXR1cm4gcGF0aDsKKyAgfQorCisgIC8qKgorICAgIEBwcml2YXRl
CisgIAorICAgIFJldHVybnMgdGhlIGN1cnJlbnQgcGF0aCBhcyBpdCBzaG91bGQgYXBwZWFyIGZv
ciBIYXNoTG9jYXRpb24gc3VwcG9ydGVkCisgICAgYnJvd3NlcnMuIFRoaXMgbWF5IHZlcnkgd2Vs
bCBkaWZmZXIgZnJvbSB0aGUgcmVhbCBjdXJyZW50IHBhdGguCisgIAorICAgIEBtZXRob2QgX2dl
dEhhc2hQYXRoCisgICovCisKKyAgZnVuY3Rpb24gZ2V0SGFzaFBhdGgocm9vdFVSTCwgbG9jYXRp
b24pIHsKKyAgICB2YXIgcGF0aCA9IHJvb3RVUkw7CisgICAgdmFyIGhpc3RvcnlQYXRoID0gZ2V0
SGlzdG9yeVBhdGgocm9vdFVSTCwgbG9jYXRpb24pOworICAgIHZhciByb3V0ZVBhdGggPSBoaXN0
b3J5UGF0aC5zdWJzdHIocm9vdFVSTC5sZW5ndGgpOworCisgICAgaWYgKHJvdXRlUGF0aCAhPT0g
JycpIHsKKyAgICAgIGlmIChyb3V0ZVBhdGguY2hhckF0KDApICE9PSAnLycpIHsKKyAgICAgICAg
cm91dGVQYXRoID0gJy8nICsgcm91dGVQYXRoOworICAgICAgfQorCisgICAgICBwYXRoICs9ICcj
JyArIHJvdXRlUGF0aDsKKyAgICB9CisKKyAgICByZXR1cm4gcGF0aDsKKyAgfQorfSk7Citlbmlm
ZWQoJ2VtYmVyLXJvdXRpbmcvbG9jYXRpb24vaGFzaF9sb2NhdGlvbicsIFsnZXhwb3J0cycsICdl
bWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQnLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfc2V0JywgJ2Vt
YmVyLW1ldGFsL3J1bl9sb29wJywgJ2VtYmVyLW1ldGFsL3V0aWxzJywgJ2VtYmVyLXJ1bnRpbWUv
c3lzdGVtL29iamVjdCcsICdlbWJlci1yb3V0aW5nL2xvY2F0aW9uL2FwaScsICdlbWJlci12aWV3
cy9zeXN0ZW0vanF1ZXJ5J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbFByb3BlcnR5
X2dldCwgX2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQsIF9lbWJlck1ldGFsUnVuX2xvb3AsIF9lbWJl
ck1ldGFsVXRpbHMsIF9lbWJlclJ1bnRpbWVTeXN0ZW1PYmplY3QsIF9lbWJlclJvdXRpbmdMb2Nh
dGlvbkFwaSwgX2VtYmVyVmlld3NTeXN0ZW1KcXVlcnkpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisg
IC8qKgorICBAbW9kdWxlIGVtYmVyCisgIEBzdWJtb2R1bGUgZW1iZXItcm91dGluZworICAqLwor
CisgIC8qKgorICAgIGBFbWJlci5IYXNoTG9jYXRpb25gIGltcGxlbWVudHMgdGhlIGxvY2F0aW9u
IEFQSSB1c2luZyB0aGUgYnJvd3NlcidzCisgICAgaGFzaC4gQXQgcHJlc2VudCwgaXQgcmVsaWVz
IG9uIGEgYGhhc2hjaGFuZ2VgIGV2ZW50IGV4aXN0aW5nIGluIHRoZQorICAgIGJyb3dzZXIuCisg
IAorICAgIEBjbGFzcyBIYXNoTG9jYXRpb24KKyAgICBAbmFtZXNwYWNlIEVtYmVyCisgICAgQGV4
dGVuZHMgRW1iZXIuT2JqZWN0CisgICAgQHByaXZhdGUKKyAgKi8KKyAgZXhwb3J0cy5kZWZhdWx0
ID0gX2VtYmVyUnVudGltZVN5c3RlbU9iamVjdC5kZWZhdWx0LmV4dGVuZCh7CisgICAgaW1wbGVt
ZW50YXRpb246ICdoYXNoJywKKworICAgIGluaXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgIF9lbWJl
ck1ldGFsUHJvcGVydHlfc2V0LnNldCh0aGlzLCAnbG9jYXRpb24nLCBfZW1iZXJNZXRhbFByb3Bl
cnR5X2dldC5nZXQodGhpcywgJ19sb2NhdGlvbicpIHx8IHdpbmRvdy5sb2NhdGlvbik7CisgICAg
fSwKKworICAgIC8qKgorICAgICAgQHByaXZhdGUKKyAgICAgICBSZXR1cm5zIG5vcm1hbGl6ZWQg
bG9jYXRpb24uaGFzaAorICAgICAgIEBzaW5jZSAxLjUuMQorICAgICAgQG1ldGhvZCBnZXRIYXNo
CisgICAgKi8KKyAgICBnZXRIYXNoOiBfZW1iZXJSb3V0aW5nTG9jYXRpb25BcGkuZGVmYXVsdC5f
Z2V0SGFzaCwKKworICAgIC8qKgorICAgICAgUmV0dXJucyB0aGUgbm9ybWFsaXplZCBVUkwsIGNv
bnN0cnVjdGVkIGZyb20gYGxvY2F0aW9uLmhhc2hgLgorICAgICAgIGUuZy4gYCMvZm9vYCA9PiBg
L2Zvb2AgYXMgd2VsbCBhcyBgIy9mb28jYmFyYCA9PiBgL2ZvbyNiYXJgLgorICAgICAgIEJ5IGNv
bnZlbnRpb24sIGhhc2hlZCBwYXRocyBtdXN0IGJlZ2luIHdpdGggYSBmb3J3YXJkIHNsYXNoLCBv
dGhlcndpc2UgdGhleQorICAgICAgYXJlIG5vdCB0cmVhdGVkIGFzIGEgcGF0aCBzbyB3ZSBjYW4g
ZGlzdGluZ3Vpc2ggaW50ZW50LgorICAgICAgIEBwcml2YXRlCisgICAgICBAbWV0aG9kIGdldFVS
TAorICAgICovCisgICAgZ2V0VVJMOiBmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgb3JpZ2luYWxQ
YXRoID0gdGhpcy5nZXRIYXNoKCkuc3Vic3RyKDEpOworICAgICAgdmFyIG91dFBhdGggPSBvcmln
aW5hbFBhdGg7CisKKyAgICAgIGlmIChvdXRQYXRoLmNoYXJBdCgwKSAhPT0gJy8nKSB7CisgICAg
ICAgIG91dFBhdGggPSAnLyc7CisKKyAgICAgICAgLy8gT25seSBhZGQgdGhlICMgaWYgdGhlIHBh
dGggaXNuJ3QgZW1wdHkuCisgICAgICAgIC8vIFdlIGRvIE5PVCB3YW50IGAvI2Agc2luY2UgdGhl
IGFtcGVyc2FuZAorICAgICAgICAvLyBpcyBvbmx5IGluY2x1ZGVkIChjb252ZW50aW9uYWxseSkg
d2hlbgorICAgICAgICAvLyB0aGUgbG9jYXRpb24uaGFzaCBoYXMgYSB2YWx1ZQorICAgICAgICBp
ZiAob3JpZ2luYWxQYXRoKSB7CisgICAgICAgICAgb3V0UGF0aCArPSAnIycgKyBvcmlnaW5hbFBh
dGg7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgcmV0dXJuIG91dFBhdGg7CisgICAgfSwK
KworICAgIC8qKgorICAgICAgU2V0IHRoZSBgbG9jYXRpb24uaGFzaGAgYW5kIHJlbWVtYmVycyB3
aGF0IHdhcyBzZXQuIFRoaXMgcHJldmVudHMKKyAgICAgIGBvblVwZGF0ZVVSTGAgY2FsbGJhY2tz
IGZyb20gdHJpZ2dlcmluZyB3aGVuIHRoZSBoYXNoIHdhcyBzZXQgYnkKKyAgICAgIGBIYXNoTG9j
YXRpb25gLgorICAgICAgIEBwcml2YXRlCisgICAgICBAbWV0aG9kIHNldFVSTAorICAgICAgQHBh
cmFtIHBhdGgge1N0cmluZ30KKyAgICAqLworICAgIHNldFVSTDogZnVuY3Rpb24gKHBhdGgpIHsK
KyAgICAgIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnbG9jYXRpb24nKS5oYXNo
ID0gcGF0aDsKKyAgICAgIF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LnNldCh0aGlzLCAnbGFzdFNl
dFVSTCcsIHBhdGgpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgIFVzZXMgbG9jYXRpb24ucmVw
bGFjZSB0byB1cGRhdGUgdGhlIHVybCB3aXRob3V0IGEgcGFnZSByZWxvYWQKKyAgICAgIG9yIGhp
c3RvcnkgbW9kaWZpY2F0aW9uLgorICAgICAgIEBwcml2YXRlCisgICAgICBAbWV0aG9kIHJlcGxh
Y2VVUkwKKyAgICAgIEBwYXJhbSBwYXRoIHtTdHJpbmd9CisgICAgKi8KKyAgICByZXBsYWNlVVJM
OiBmdW5jdGlvbiAocGF0aCkgeworICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRo
aXMsICdsb2NhdGlvbicpLnJlcGxhY2UoJyMnICsgcGF0aCk7CisgICAgICBfZW1iZXJNZXRhbFBy
b3BlcnR5X3NldC5zZXQodGhpcywgJ2xhc3RTZXRVUkwnLCBwYXRoKTsKKyAgICB9LAorCisgICAg
LyoqCisgICAgICBSZWdpc3RlciBhIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgd2hlbiB0aGUgaGFz
aCBjaGFuZ2VzLiBUaGVzZQorICAgICAgY2FsbGJhY2tzIHdpbGwgZXhlY3V0ZSB3aGVuIHRoZSB1
c2VyIHByZXNzZXMgdGhlIGJhY2sgb3IgZm9yd2FyZAorICAgICAgYnV0dG9uLCBidXQgbm90IGFm
dGVyIGBzZXRVUkxgIGlzIGludm9rZWQuCisgICAgICAgQHByaXZhdGUKKyAgICAgIEBtZXRob2Qg
b25VcGRhdGVVUkwKKyAgICAgIEBwYXJhbSBjYWxsYmFjayB7RnVuY3Rpb259CisgICAgKi8KKyAg
ICBvblVwZGF0ZVVSTDogZnVuY3Rpb24gKGNhbGxiYWNrKSB7CisgICAgICB2YXIgX3RoaXMgPSB0
aGlzOworCisgICAgICB2YXIgZ3VpZCA9IF9lbWJlck1ldGFsVXRpbHMuZ3VpZEZvcih0aGlzKTsK
KworICAgICAgX2VtYmVyVmlld3NTeXN0ZW1KcXVlcnkuZGVmYXVsdCh3aW5kb3cpLm9uKCdoYXNo
Y2hhbmdlLmVtYmVyLWxvY2F0aW9uLScgKyBndWlkLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIF9l
bWJlck1ldGFsUnVuX2xvb3AuZGVmYXVsdChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgdmFyIHBh
dGggPSBfdGhpcy5nZXRVUkwoKTsKKyAgICAgICAgICBpZiAoX2VtYmVyTWV0YWxQcm9wZXJ0eV9n
ZXQuZ2V0KF90aGlzLCAnbGFzdFNldFVSTCcpID09PSBwYXRoKSB7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgfQorCisgICAgICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQuc2V0
KF90aGlzLCAnbGFzdFNldFVSTCcsIG51bGwpOworCisgICAgICAgICAgY2FsbGJhY2socGF0aCk7
CisgICAgICAgIH0pOworICAgICAgfSk7CisgICAgfSwKKworICAgIC8qKgorICAgICAgR2l2ZW4g
YSBVUkwsIGZvcm1hdHMgaXQgdG8gYmUgcGxhY2VkIGludG8gdGhlIHBhZ2UgYXMgcGFydAorICAg
ICAgb2YgYW4gZWxlbWVudCdzIGBocmVmYCBhdHRyaWJ1dGUuCisgICAgICAgVGhpcyBpcyB1c2Vk
LCBmb3IgZXhhbXBsZSwgd2hlbiB1c2luZyB0aGUge3thY3Rpb259fSBoZWxwZXIKKyAgICAgIHRv
IGdlbmVyYXRlIGEgVVJMIGJhc2VkIG9uIGFuIGV2ZW50LgorICAgICAgIEBwcml2YXRlCisgICAg
ICBAbWV0aG9kIGZvcm1hdFVSTAorICAgICAgQHBhcmFtIHVybCB7U3RyaW5nfQorICAgICovCisg
ICAgZm9ybWF0VVJMOiBmdW5jdGlvbiAodXJsKSB7CisgICAgICByZXR1cm4gJyMnICsgdXJsOwor
ICAgIH0sCisKKyAgICAvKioKKyAgICAgIENsZWFucyB1cCB0aGUgSGFzaExvY2F0aW9uIGV2ZW50
IGxpc3RlbmVyLgorICAgICAgIEBwcml2YXRlCisgICAgICBAbWV0aG9kIHdpbGxEZXN0cm95Cisg
ICAgKi8KKyAgICB3aWxsRGVzdHJveTogZnVuY3Rpb24gKCkgeworICAgICAgdmFyIGd1aWQgPSBf
ZW1iZXJNZXRhbFV0aWxzLmd1aWRGb3IodGhpcyk7CisKKyAgICAgIF9lbWJlclZpZXdzU3lzdGVt
SnF1ZXJ5LmRlZmF1bHQod2luZG93KS5vZmYoJ2hhc2hjaGFuZ2UuZW1iZXItbG9jYXRpb24tJyAr
IGd1aWQpOworICAgIH0KKyAgfSk7Cit9KTsKK2VuaWZlZCgnZW1iZXItcm91dGluZy9sb2NhdGlv
bi9oaXN0b3J5X2xvY2F0aW9uJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X2dl
dCcsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9zZXQnLCAnZW1iZXItbWV0YWwvdXRpbHMnLCAnZW1i
ZXItcnVudGltZS9zeXN0ZW0vb2JqZWN0JywgJ2VtYmVyLXJvdXRpbmcvbG9jYXRpb24vYXBpJywg
J2VtYmVyLXZpZXdzL3N5c3RlbS9qcXVlcnknXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1l
dGFsUHJvcGVydHlfZ2V0LCBfZW1iZXJNZXRhbFByb3BlcnR5X3NldCwgX2VtYmVyTWV0YWxVdGls
cywgX2VtYmVyUnVudGltZVN5c3RlbU9iamVjdCwgX2VtYmVyUm91dGluZ0xvY2F0aW9uQXBpLCBf
ZW1iZXJWaWV3c1N5c3RlbUpxdWVyeSkgeworICAndXNlIHN0cmljdCc7CisKKyAgLyoqCisgIEBt
b2R1bGUgZW1iZXIKKyAgQHN1Ym1vZHVsZSBlbWJlci1yb3V0aW5nCisgICovCisKKyAgdmFyIHBv
cHN0YXRlRmlyZWQgPSBmYWxzZTsKKworICAvKioKKyAgICBFbWJlci5IaXN0b3J5TG9jYXRpb24g
aW1wbGVtZW50cyB0aGUgbG9jYXRpb24gQVBJIHVzaW5nIHRoZSBicm93c2VyJ3MKKyAgICBoaXN0
b3J5LnB1c2hTdGF0ZSBBUEkuCisgIAorICAgIEBjbGFzcyBIaXN0b3J5TG9jYXRpb24KKyAgICBA
bmFtZXNwYWNlIEVtYmVyCisgICAgQGV4dGVuZHMgRW1iZXIuT2JqZWN0CisgICAgQHByaXZhdGUK
KyAgKi8KKyAgZXhwb3J0cy5kZWZhdWx0ID0gX2VtYmVyUnVudGltZVN5c3RlbU9iamVjdC5kZWZh
dWx0LmV4dGVuZCh7CisgICAgaW1wbGVtZW50YXRpb246ICdoaXN0b3J5JywKKworICAgIGluaXQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgIF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LnNldCh0aGlzLCAn
bG9jYXRpb24nLCBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ2xvY2F0aW9uJykg
fHwgd2luZG93LmxvY2F0aW9uKTsKKyAgICAgIF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LnNldCh0
aGlzLCAnYmFzZVVSTCcsIF9lbWJlclZpZXdzU3lzdGVtSnF1ZXJ5LmRlZmF1bHQoJ2Jhc2UnKS5h
dHRyKCdocmVmJykgfHwgJycpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgIFVzZWQgdG8gc2V0
IHN0YXRlIG9uIGZpcnN0IGNhbGwgdG8gc2V0VVJMCisgICAgICAgQHByaXZhdGUKKyAgICAgIEBt
ZXRob2QgaW5pdFN0YXRlCisgICAgKi8KKyAgICBpbml0U3RhdGU6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgIHZhciBoaXN0b3J5ID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdoaXN0
b3J5JykgfHwgd2luZG93Lmhpc3Rvcnk7CisgICAgICBfZW1iZXJNZXRhbFByb3BlcnR5X3NldC5z
ZXQodGhpcywgJ2hpc3RvcnknLCBoaXN0b3J5KTsKKworICAgICAgaWYgKGhpc3RvcnkgJiYgJ3N0
YXRlJyBpbiBoaXN0b3J5KSB7CisgICAgICAgIHRoaXMuc3VwcG9ydHNIaXN0b3J5ID0gdHJ1ZTsK
KyAgICAgIH0KKworICAgICAgdGhpcy5yZXBsYWNlU3RhdGUodGhpcy5mb3JtYXRVUkwodGhpcy5n
ZXRVUkwoKSkpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgIFdpbGwgYmUgcHJlLXBlbmRlZCB0
byBwYXRoIHVwb24gc3RhdGUgY2hhbmdlCisgICAgICAgQHByb3BlcnR5IHJvb3RVUkwKKyAgICAg
IEBkZWZhdWx0ICcvJworICAgICAgQHByaXZhdGUKKyAgICAqLworICAgIHJvb3RVUkw6ICcvJywK
KworICAgIC8qKgorICAgICAgUmV0dXJucyB0aGUgY3VycmVudCBgbG9jYXRpb24ucGF0aG5hbWVg
IHdpdGhvdXQgYHJvb3RVUkxgIG9yIGBiYXNlVVJMYAorICAgICAgIEBwcml2YXRlCisgICAgICBA
bWV0aG9kIGdldFVSTAorICAgICAgQHJldHVybiB1cmwge1N0cmluZ30KKyAgICAqLworICAgIGdl
dFVSTDogZnVuY3Rpb24gKCkgeworICAgICAgdmFyIGxvY2F0aW9uID0gX2VtYmVyTWV0YWxQcm9w
ZXJ0eV9nZXQuZ2V0KHRoaXMsICdsb2NhdGlvbicpOworICAgICAgdmFyIHBhdGggPSBsb2NhdGlv
bi5wYXRobmFtZTsKKworICAgICAgdmFyIHJvb3RVUkwgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dl
dC5nZXQodGhpcywgJ3Jvb3RVUkwnKTsKKyAgICAgIHZhciBiYXNlVVJMID0gX2VtYmVyTWV0YWxQ
cm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdiYXNlVVJMJyk7CisKKyAgICAgIC8vIHJlbW92ZSB0cmFp
bGluZyBzbGFzaGVzIGlmIHRoZXkgZXhpc3RzCisgICAgICByb290VVJMID0gcm9vdFVSTC5yZXBs
YWNlKC9cLyQvLCAnJyk7CisgICAgICBiYXNlVVJMID0gYmFzZVVSTC5yZXBsYWNlKC9cLyQvLCAn
Jyk7CisKKyAgICAgIC8vIHJlbW92ZSBiYXNlVVJMIGFuZCByb290VVJMIGZyb20gc3RhcnQgb2Yg
cGF0aAorICAgICAgdmFyIHVybCA9IHBhdGgucmVwbGFjZShuZXcgUmVnRXhwKCdeJyArIGJhc2VV
UkwgKyAnKD89L3wkKScpLCAnJykucmVwbGFjZShuZXcgUmVnRXhwKCdeJyArIHJvb3RVUkwgKyAn
KD89L3wkKScpLCAnJyk7CisKKyAgICAgIHZhciBzZWFyY2ggPSBsb2NhdGlvbi5zZWFyY2ggfHwg
Jyc7CisgICAgICB1cmwgKz0gc2VhcmNoOworICAgICAgdXJsICs9IHRoaXMuZ2V0SGFzaCgpOwor
CisgICAgICByZXR1cm4gdXJsOworICAgIH0sCisKKyAgICAvKioKKyAgICAgIFVzZXMgYGhpc3Rv
cnkucHVzaFN0YXRlYCB0byB1cGRhdGUgdGhlIHVybCB3aXRob3V0IGEgcGFnZSByZWxvYWQuCisg
ICAgICAgQHByaXZhdGUKKyAgICAgIEBtZXRob2Qgc2V0VVJMCisgICAgICBAcGFyYW0gcGF0aCB7
U3RyaW5nfQorICAgICovCisgICAgc2V0VVJMOiBmdW5jdGlvbiAocGF0aCkgeworICAgICAgdmFy
IHN0YXRlID0gdGhpcy5nZXRTdGF0ZSgpOworICAgICAgcGF0aCA9IHRoaXMuZm9ybWF0VVJMKHBh
dGgpOworCisgICAgICBpZiAoIXN0YXRlIHx8IHN0YXRlLnBhdGggIT09IHBhdGgpIHsKKyAgICAg
ICAgdGhpcy5wdXNoU3RhdGUocGF0aCk7CisgICAgICB9CisgICAgfSwKKworICAgIC8qKgorICAg
ICAgVXNlcyBgaGlzdG9yeS5yZXBsYWNlU3RhdGVgIHRvIHVwZGF0ZSB0aGUgdXJsIHdpdGhvdXQg
YSBwYWdlIHJlbG9hZAorICAgICAgb3IgaGlzdG9yeSBtb2RpZmljYXRpb24uCisgICAgICAgQHBy
aXZhdGUKKyAgICAgIEBtZXRob2QgcmVwbGFjZVVSTAorICAgICAgQHBhcmFtIHBhdGgge1N0cmlu
Z30KKyAgICAqLworICAgIHJlcGxhY2VVUkw6IGZ1bmN0aW9uIChwYXRoKSB7CisgICAgICB2YXIg
c3RhdGUgPSB0aGlzLmdldFN0YXRlKCk7CisgICAgICBwYXRoID0gdGhpcy5mb3JtYXRVUkwocGF0
aCk7CisKKyAgICAgIGlmICghc3RhdGUgfHwgc3RhdGUucGF0aCAhPT0gcGF0aCkgeworICAgICAg
ICB0aGlzLnJlcGxhY2VTdGF0ZShwYXRoKTsKKyAgICAgIH0KKyAgICB9LAorCisgICAgLyoqCisg
ICAgICBHZXQgdGhlIGN1cnJlbnQgYGhpc3Rvcnkuc3RhdGVgLiBDaGVja3MgZm9yIGlmIGEgcG9s
eWZpbGwgaXMKKyAgICAgIHJlcXVpcmVkIGFuZCBpZiBzbyBmZXRjaGVzIHRoaXMuX2hpc3RvcnlT
dGF0ZS4gVGhlIHN0YXRlIHJldHVybmVkCisgICAgICBmcm9tIGdldFN0YXRlIG1heSBiZSBudWxs
IGlmIGFuIGlmcmFtZSBoYXMgY2hhbmdlZCBhIHdpbmRvdydzCisgICAgICBoaXN0b3J5LgorICAg
ICAgIEBwcml2YXRlCisgICAgICBAbWV0aG9kIGdldFN0YXRlCisgICAgICBAcmV0dXJuIHN0YXRl
IHtPYmplY3R9CisgICAgKi8KKyAgICBnZXRTdGF0ZTogZnVuY3Rpb24gKCkgeworICAgICAgaWYg
KHRoaXMuc3VwcG9ydHNIaXN0b3J5KSB7CisgICAgICAgIHJldHVybiBfZW1iZXJNZXRhbFByb3Bl
cnR5X2dldC5nZXQodGhpcywgJ2hpc3RvcnknKS5zdGF0ZTsKKyAgICAgIH0KKworICAgICAgcmV0
dXJuIHRoaXMuX2hpc3RvcnlTdGF0ZTsKKyAgICB9LAorCisgICAgLyoqCisgICAgIFB1c2hlcyBh
IG5ldyBzdGF0ZS4KKyAgICAgIEBwcml2YXRlCisgICAgIEBtZXRob2QgcHVzaFN0YXRlCisgICAg
IEBwYXJhbSBwYXRoIHtTdHJpbmd9CisgICAgKi8KKyAgICBwdXNoU3RhdGU6IGZ1bmN0aW9uIChw
YXRoKSB7CisgICAgICB2YXIgc3RhdGUgPSB7IHBhdGg6IHBhdGggfTsKKworICAgICAgX2VtYmVy
TWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdoaXN0b3J5JykucHVzaFN0YXRlKHN0YXRlLCBu
dWxsLCBwYXRoKTsKKworICAgICAgdGhpcy5faGlzdG9yeVN0YXRlID0gc3RhdGU7CisKKyAgICAg
IC8vIHVzZWQgZm9yIHdlYmtpdCB3b3JrYXJvdW5kCisgICAgICB0aGlzLl9wcmV2aW91c1VSTCA9
IHRoaXMuZ2V0VVJMKCk7CisgICAgfSwKKworICAgIC8qKgorICAgICBSZXBsYWNlcyB0aGUgY3Vy
cmVudCBzdGF0ZS4KKyAgICAgIEBwcml2YXRlCisgICAgIEBtZXRob2QgcmVwbGFjZVN0YXRlCisg
ICAgIEBwYXJhbSBwYXRoIHtTdHJpbmd9CisgICAgKi8KKyAgICByZXBsYWNlU3RhdGU6IGZ1bmN0
aW9uIChwYXRoKSB7CisgICAgICB2YXIgc3RhdGUgPSB7IHBhdGg6IHBhdGggfTsKKyAgICAgIF9l
bWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnaGlzdG9yeScpLnJlcGxhY2VTdGF0ZShz
dGF0ZSwgbnVsbCwgcGF0aCk7CisKKyAgICAgIHRoaXMuX2hpc3RvcnlTdGF0ZSA9IHN0YXRlOwor
CisgICAgICAvLyB1c2VkIGZvciB3ZWJraXQgd29ya2Fyb3VuZAorICAgICAgdGhpcy5fcHJldmlv
dXNVUkwgPSB0aGlzLmdldFVSTCgpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgIFJlZ2lzdGVy
IGEgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCB3aGVuZXZlciB0aGUgYnJvd3NlcgorICAgICAgaGlz
dG9yeSBjaGFuZ2VzLCBpbmNsdWRpbmcgdXNpbmcgZm9yd2FyZCBhbmQgYmFjayBidXR0b25zLgor
ICAgICAgIEBwcml2YXRlCisgICAgICBAbWV0aG9kIG9uVXBkYXRlVVJMCisgICAgICBAcGFyYW0g
Y2FsbGJhY2sge0Z1bmN0aW9ufQorICAgICovCisgICAgb25VcGRhdGVVUkw6IGZ1bmN0aW9uIChj
YWxsYmFjaykgeworICAgICAgdmFyIF90aGlzID0gdGhpczsKKworICAgICAgdmFyIGd1aWQgPSBf
ZW1iZXJNZXRhbFV0aWxzLmd1aWRGb3IodGhpcyk7CisKKyAgICAgIF9lbWJlclZpZXdzU3lzdGVt
SnF1ZXJ5LmRlZmF1bHQod2luZG93KS5vbigncG9wc3RhdGUuZW1iZXItbG9jYXRpb24tJyArIGd1
aWQsIGZ1bmN0aW9uIChlKSB7CisgICAgICAgIC8vIElnbm9yZSBpbml0aWFsIHBhZ2UgbG9hZCBw
b3BzdGF0ZSBldmVudCBpbiBDaHJvbWUKKyAgICAgICAgaWYgKCFwb3BzdGF0ZUZpcmVkKSB7Cisg
ICAgICAgICAgcG9wc3RhdGVGaXJlZCA9IHRydWU7CisgICAgICAgICAgaWYgKF90aGlzLmdldFVS
TCgpID09PSBfdGhpcy5fcHJldmlvdXNVUkwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY2FsbGJhY2soX3RoaXMuZ2V0VVJMKCkpOworICAg
ICAgfSk7CisgICAgfSwKKworICAgIC8qKgorICAgICAgVXNlZCB3aGVuIHVzaW5nIGB7e2FjdGlv
bn19YCBoZWxwZXIuICBUaGUgdXJsIGlzIGFsd2F5cyBhcHBlbmRlZCB0byB0aGUgcm9vdFVSTC4K
KyAgICAgICBAcHJpdmF0ZQorICAgICAgQG1ldGhvZCBmb3JtYXRVUkwKKyAgICAgIEBwYXJhbSB1
cmwge1N0cmluZ30KKyAgICAgIEByZXR1cm4gZm9ybWF0dGVkIHVybCB7U3RyaW5nfQorICAgICov
CisgICAgZm9ybWF0VVJMOiBmdW5jdGlvbiAodXJsKSB7CisgICAgICB2YXIgcm9vdFVSTCA9IF9l
bWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAncm9vdFVSTCcpOworICAgICAgdmFyIGJh
c2VVUkwgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ2Jhc2VVUkwnKTsKKwor
ICAgICAgaWYgKHVybCAhPT0gJycpIHsKKyAgICAgICAgLy8gcmVtb3ZlIHRyYWlsaW5nIHNsYXNo
ZXMgaWYgdGhleSBleGlzdHMKKyAgICAgICAgcm9vdFVSTCA9IHJvb3RVUkwucmVwbGFjZSgvXC8k
LywgJycpOworICAgICAgICBiYXNlVVJMID0gYmFzZVVSTC5yZXBsYWNlKC9cLyQvLCAnJyk7Cisg
ICAgICB9IGVsc2UgaWYgKGJhc2VVUkwubWF0Y2goL15cLy8pICYmIHJvb3RVUkwubWF0Y2goL15c
Ly8pKSB7CisgICAgICAgIC8vIGlmIGJhc2VVUkwgYW5kIHJvb3RVUkwgYm90aCBzdGFydCB3aXRo
IGEgc2xhc2gKKyAgICAgICAgLy8gLi4uIHJlbW92ZSB0cmFpbGluZyBzbGFzaCBmcm9tIGJhc2VV
UkwgaWYgaXQgZXhpc3RzCisgICAgICAgIGJhc2VVUkwgPSBiYXNlVVJMLnJlcGxhY2UoL1wvJC8s
ICcnKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIGJhc2VVUkwgKyByb290VVJMICsgdXJsOwor
ICAgIH0sCisKKyAgICAvKioKKyAgICAgIENsZWFucyB1cCB0aGUgSGlzdG9yeUxvY2F0aW9uIGV2
ZW50IGxpc3RlbmVyLgorICAgICAgIEBwcml2YXRlCisgICAgICBAbWV0aG9kIHdpbGxEZXN0cm95
CisgICAgKi8KKyAgICB3aWxsRGVzdHJveTogZnVuY3Rpb24gKCkgeworICAgICAgdmFyIGd1aWQg
PSBfZW1iZXJNZXRhbFV0aWxzLmd1aWRGb3IodGhpcyk7CisKKyAgICAgIF9lbWJlclZpZXdzU3lz
dGVtSnF1ZXJ5LmRlZmF1bHQod2luZG93KS5vZmYoJ3BvcHN0YXRlLmVtYmVyLWxvY2F0aW9uLScg
KyBndWlkKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICBAcHJpdmF0ZQorICAgICAgIFJldHVy
bnMgbm9ybWFsaXplZCBsb2NhdGlvbi5oYXNoCisgICAgICAgQG1ldGhvZCBnZXRIYXNoCisgICAg
Ki8KKyAgICBnZXRIYXNoOiBfZW1iZXJSb3V0aW5nTG9jYXRpb25BcGkuZGVmYXVsdC5fZ2V0SGFz
aAorICB9KTsKK30pOworZW5pZmVkKCdlbWJlci1yb3V0aW5nL2xvY2F0aW9uL25vbmVfbG9jYXRp
b24nLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvZGVidWcnLCAnZW1iZXItbWV0YWwvcHJvcGVy
dHlfZ2V0JywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCcsICdlbWJlci1ydW50aW1lL3N5c3Rl
bS9vYmplY3QnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsRGVidWcsIF9lbWJlck1l
dGFsUHJvcGVydHlfZ2V0LCBfZW1iZXJNZXRhbFByb3BlcnR5X3NldCwgX2VtYmVyUnVudGltZVN5
c3RlbU9iamVjdCkgeworICAndXNlIHN0cmljdCc7CisKKyAgLyoqCisgIEBtb2R1bGUgZW1iZXIK
KyAgQHN1Ym1vZHVsZSBlbWJlci1yb3V0aW5nCisgICovCisKKyAgLyoqCisgICAgRW1iZXIuTm9u
ZUxvY2F0aW9uIGRvZXMgbm90IGludGVyYWN0IHdpdGggdGhlIGJyb3dzZXIuIEl0IGlzIHVzZWZ1
bCBmb3IKKyAgICB0ZXN0aW5nLCBvciB3aGVuIHlvdSBuZWVkIHRvIG1hbmFnZSBzdGF0ZSB3aXRo
IHlvdXIgUm91dGVyLCBidXQgdGVtcG9yYXJpbHkKKyAgICBkb24ndCB3YW50IGl0IHRvIG11Y2sg
d2l0aCB0aGUgVVJMIChmb3IgZXhhbXBsZSB3aGVuIHlvdSBlbWJlZCB5b3VyCisgICAgYXBwbGlj
YXRpb24gaW4gYSBsYXJnZXIgcGFnZSkuCisgIAorICAgIEBjbGFzcyBOb25lTG9jYXRpb24KKyAg
ICBAbmFtZXNwYWNlIEVtYmVyCisgICAgQGV4dGVuZHMgRW1iZXIuT2JqZWN0CisgICAgQHByaXZh
dGUKKyAgKi8KKyAgZXhwb3J0cy5kZWZhdWx0ID0gX2VtYmVyUnVudGltZVN5c3RlbU9iamVjdC5k
ZWZhdWx0LmV4dGVuZCh7CisgICAgaW1wbGVtZW50YXRpb246ICdub25lJywKKyAgICBwYXRoOiAn
JywKKworICAgIGRldGVjdDogZnVuY3Rpb24gKCkgeworICAgICAgdmFyIHJvb3RVUkwgPSB0aGlz
LnJvb3RVUkw7CisKKyAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdyb290VVJMIG11c3Qg
ZW5kIHdpdGggYSB0cmFpbGluZyBmb3J3YXJkIHNsYXNoIGUuZy4gIi9hcHAvIicsIHJvb3RVUkwu
Y2hhckF0KHJvb3RVUkwubGVuZ3RoIC0gMSkgPT09ICcvJyk7CisgICAgfSwKKworICAgIC8qKgor
ICAgICAgV2lsbCBiZSBwcmUtcGVuZGVkIHRvIHBhdGguCisgICAgICAgQHByaXZhdGUKKyAgICAg
IEBwcm9wZXJ0eSByb290VVJMCisgICAgICBAZGVmYXVsdCAnLycKKyAgICAqLworICAgIHJvb3RV
Ukw6ICcvJywKKworICAgIC8qKgorICAgICAgUmV0dXJucyB0aGUgY3VycmVudCBwYXRoIHdpdGhv
dXQgYHJvb3RVUkxgLgorICAgICAgIEBwcml2YXRlCisgICAgICBAbWV0aG9kIGdldFVSTAorICAg
ICAgQHJldHVybiB7U3RyaW5nfSBwYXRoCisgICAgKi8KKyAgICBnZXRVUkw6IGZ1bmN0aW9uICgp
IHsKKyAgICAgIHZhciBwYXRoID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdw
YXRoJyk7CisgICAgICB2YXIgcm9vdFVSTCA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0
aGlzLCAncm9vdFVSTCcpOworCisgICAgICAvLyByZW1vdmUgdHJhaWxpbmcgc2xhc2hlcyBpZiB0
aGV5IGV4aXN0cworICAgICAgcm9vdFVSTCA9IHJvb3RVUkwucmVwbGFjZSgvXC8kLywgJycpOwor
CisgICAgICAvLyByZW1vdmUgcm9vdFVSTCBmcm9tIHVybAorICAgICAgcmV0dXJuIHBhdGgucmVw
bGFjZShuZXcgUmVnRXhwKCdeJyArIHJvb3RVUkwgKyAnKD89L3wkKScpLCAnJyk7CisgICAgfSwK
KworICAgIC8qKgorICAgICAgU2V0IHRoZSBwYXRoIGFuZCByZW1lbWJlcnMgd2hhdCB3YXMgc2V0
LiBVc2luZyB0aGlzIG1ldGhvZAorICAgICAgdG8gY2hhbmdlIHRoZSBwYXRoIHdpbGwgbm90IGlu
dm9rZSB0aGUgYHVwZGF0ZVVSTGAgY2FsbGJhY2suCisgICAgICAgQHByaXZhdGUKKyAgICAgIEBt
ZXRob2Qgc2V0VVJMCisgICAgICBAcGFyYW0gcGF0aCB7U3RyaW5nfQorICAgICovCisgICAgc2V0
VVJMOiBmdW5jdGlvbiAocGF0aCkgeworICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQuc2V0
KHRoaXMsICdwYXRoJywgcGF0aCk7CisgICAgfSwKKworICAgIC8qKgorICAgICAgUmVnaXN0ZXIg
YSBjYWxsYmFjayB0byBiZSBpbnZva2VkIHdoZW4gdGhlIHBhdGggY2hhbmdlcy4gVGhlc2UKKyAg
ICAgIGNhbGxiYWNrcyB3aWxsIGV4ZWN1dGUgd2hlbiB0aGUgdXNlciBwcmVzc2VzIHRoZSBiYWNr
IG9yIGZvcndhcmQKKyAgICAgIGJ1dHRvbiwgYnV0IG5vdCBhZnRlciBgc2V0VVJMYCBpcyBpbnZv
a2VkLgorICAgICAgIEBwcml2YXRlCisgICAgICBAbWV0aG9kIG9uVXBkYXRlVVJMCisgICAgICBA
cGFyYW0gY2FsbGJhY2sge0Z1bmN0aW9ufQorICAgICovCisgICAgb25VcGRhdGVVUkw6IGZ1bmN0
aW9uIChjYWxsYmFjaykgeworICAgICAgdGhpcy51cGRhdGVDYWxsYmFjayA9IGNhbGxiYWNrOwor
ICAgIH0sCisKKyAgICAvKioKKyAgICAgIFNldHMgdGhlIHBhdGggYW5kIGNhbGxzIHRoZSBgdXBk
YXRlVVJMYCBjYWxsYmFjay4KKyAgICAgICBAcHJpdmF0ZQorICAgICAgQG1ldGhvZCBoYW5kbGVV
UkwKKyAgICAgIEBwYXJhbSBjYWxsYmFjayB7RnVuY3Rpb259CisgICAgKi8KKyAgICBoYW5kbGVV
Ukw6IGZ1bmN0aW9uICh1cmwpIHsKKyAgICAgIF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LnNldCh0
aGlzLCAncGF0aCcsIHVybCk7CisgICAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrKHVybCk7CisgICAg
fSwKKworICAgIC8qKgorICAgICAgR2l2ZW4gYSBVUkwsIGZvcm1hdHMgaXQgdG8gYmUgcGxhY2Vk
IGludG8gdGhlIHBhZ2UgYXMgcGFydAorICAgICAgb2YgYW4gZWxlbWVudCdzIGBocmVmYCBhdHRy
aWJ1dGUuCisgICAgICAgVGhpcyBpcyB1c2VkLCBmb3IgZXhhbXBsZSwgd2hlbiB1c2luZyB0aGUg
e3thY3Rpb259fSBoZWxwZXIKKyAgICAgIHRvIGdlbmVyYXRlIGEgVVJMIGJhc2VkIG9uIGFuIGV2
ZW50LgorICAgICAgIEBwcml2YXRlCisgICAgICBAbWV0aG9kIGZvcm1hdFVSTAorICAgICAgQHBh
cmFtIHVybCB7U3RyaW5nfQorICAgICAgQHJldHVybiB7U3RyaW5nfSB1cmwKKyAgICAqLworICAg
IGZvcm1hdFVSTDogZnVuY3Rpb24gKHVybCkgeworICAgICAgdmFyIHJvb3RVUkwgPSBfZW1iZXJN
ZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ3Jvb3RVUkwnKTsKKworICAgICAgaWYgKHVybCAh
PT0gJycpIHsKKyAgICAgICAgLy8gcmVtb3ZlIHRyYWlsaW5nIHNsYXNoZXMgaWYgdGhleSBleGlz
dHMKKyAgICAgICAgcm9vdFVSTCA9IHJvb3RVUkwucmVwbGFjZSgvXC8kLywgJycpOworICAgICAg
fQorCisgICAgICByZXR1cm4gcm9vdFVSTCArIHVybDsKKyAgICB9CisgIH0pOworfSk7Citlbmlm
ZWQoJ2VtYmVyLXJvdXRpbmcvbG9jYXRpb24vdXRpbCcsIFsnZXhwb3J0cyddLCBmdW5jdGlvbiAo
ZXhwb3J0cykgeworICAvKioKKyAgICBAcHJpdmF0ZQorICAKKyAgICBSZXR1cm5zIHRoZSBjdXJy
ZW50IGBsb2NhdGlvbi5wYXRobmFtZWAsIG5vcm1hbGl6ZWQgZm9yIElFIGluY29uc2lzdGVuY2ll
cy4KKyAgKi8KKyAgJ3VzZSBzdHJpY3QnOworCisgIGV4cG9ydHMuZ2V0UGF0aCA9IGdldFBhdGg7
CisgIGV4cG9ydHMuZ2V0UXVlcnkgPSBnZXRRdWVyeTsKKyAgZXhwb3J0cy5nZXRIYXNoID0gZ2V0
SGFzaDsKKyAgZXhwb3J0cy5nZXRGdWxsUGF0aCA9IGdldEZ1bGxQYXRoOworICBleHBvcnRzLmdl
dE9yaWdpbiA9IGdldE9yaWdpbjsKKyAgZXhwb3J0cy5zdXBwb3J0c0hhc2hDaGFuZ2UgPSBzdXBw
b3J0c0hhc2hDaGFuZ2U7CisgIGV4cG9ydHMuc3VwcG9ydHNIaXN0b3J5ID0gc3VwcG9ydHNIaXN0
b3J5OworICBleHBvcnRzLnJlcGxhY2VQYXRoID0gcmVwbGFjZVBhdGg7CisKKyAgZnVuY3Rpb24g
Z2V0UGF0aChsb2NhdGlvbikgeworICAgIHZhciBwYXRobmFtZSA9IGxvY2F0aW9uLnBhdGhuYW1l
OworICAgIC8vIFZhcmlvdXMgdmVyc2lvbnMgb2YgSUUvT3BlcmEgZG9uJ3QgYWx3YXlzIHJldHVy
biBhIGxlYWRpbmcgc2xhc2gKKyAgICBpZiAocGF0aG5hbWUuY2hhckF0KDApICE9PSAnLycpIHsK
KyAgICAgIHBhdGhuYW1lID0gJy8nICsgcGF0aG5hbWU7CisgICAgfQorCisgICAgcmV0dXJuIHBh
dGhuYW1lOworICB9CisKKyAgLyoqCisgICAgQHByaXZhdGUKKyAgCisgICAgUmV0dXJucyB0aGUg
Y3VycmVudCBgbG9jYXRpb24uc2VhcmNoYC4KKyAgKi8KKworICBmdW5jdGlvbiBnZXRRdWVyeShs
b2NhdGlvbikgeworICAgIHJldHVybiBsb2NhdGlvbi5zZWFyY2g7CisgIH0KKworICAvKioKKyAg
ICBAcHJpdmF0ZQorICAKKyAgICBSZXR1cm5zIHRoZSBjdXJyZW50IGBsb2NhdGlvbi5oYXNoYCBi
eSBwYXJzaW5nIGxvY2F0aW9uLmhyZWYgc2luY2UgYnJvd3NlcnMKKyAgICBpbmNvbnNpc3RlbnRs
eSBVUkwtZGVjb2RlIGBsb2NhdGlvbi5oYXNoYC4KKyAgCisgICAgU2hvdWxkIGJlIHBhc3NlZCB0
aGUgYnJvd3NlcidzIGBsb2NhdGlvbmAgb2JqZWN0IGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KKyAg
CisgICAgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDgzMzA0
CisgICovCisKKyAgZnVuY3Rpb24gZ2V0SGFzaChsb2NhdGlvbikgeworICAgIHZhciBocmVmID0g
bG9jYXRpb24uaHJlZjsKKyAgICB2YXIgaGFzaEluZGV4ID0gaHJlZi5pbmRleE9mKCcjJyk7CisK
KyAgICBpZiAoaGFzaEluZGV4ID09PSAtMSkgeworICAgICAgcmV0dXJuICcnOworICAgIH0gZWxz
ZSB7CisgICAgICByZXR1cm4gaHJlZi5zdWJzdHIoaGFzaEluZGV4KTsKKyAgICB9CisgIH0KKwor
ICBmdW5jdGlvbiBnZXRGdWxsUGF0aChsb2NhdGlvbikgeworICAgIHJldHVybiBnZXRQYXRoKGxv
Y2F0aW9uKSArIGdldFF1ZXJ5KGxvY2F0aW9uKSArIGdldEhhc2gobG9jYXRpb24pOworICB9CisK
KyAgZnVuY3Rpb24gZ2V0T3JpZ2luKGxvY2F0aW9uKSB7CisgICAgdmFyIG9yaWdpbiA9IGxvY2F0
aW9uLm9yaWdpbjsKKworICAgIC8vIE9sZGVyIGJyb3dzZXJzLCBlc3BlY2lhbGx5IElFLCBkb24n
dCBoYXZlIG9yaWdpbgorICAgIGlmICghb3JpZ2luKSB7CisgICAgICBvcmlnaW4gPSBsb2NhdGlv
bi5wcm90b2NvbCArICcvLycgKyBsb2NhdGlvbi5ob3N0bmFtZTsKKworICAgICAgaWYgKGxvY2F0
aW9uLnBvcnQpIHsKKyAgICAgICAgb3JpZ2luICs9ICc6JyArIGxvY2F0aW9uLnBvcnQ7CisgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIG9yaWdpbjsKKyAgfQorCisgIC8qCisgICAgYGRvY3Vt
ZW50TW9kZWAgb25seSBleGlzdCBpbiBJbnRlcm5ldCBFeHBsb3JlciwgYW5kIGl0J3MgdGVzdGVk
IGJlY2F1c2UgSUU4IHJ1bm5pbmcgaW4KKyAgICBJRTcgY29tcGF0aWJpbGl0eSBtb2RlIGNsYWlt
cyB0byBzdXBwb3J0IGBvbmhhc2hjaGFuZ2VgIGJ1dCBhY3R1YWxseSBkb2VzIG5vdC4KKyAgCisg
ICAgYGdsb2JhbGAgaXMgYW4gb2JqZWN0IHRoYXQgbWF5IGhhdmUgYW4gYG9uaGFzaGNoYW5nZWAg
cHJvcGVydHkuCisgIAorICAgIEBwcml2YXRlCisgICAgQGZ1bmN0aW9uIHN1cHBvcnRzSGFzaENo
YW5nZQorICAqLworCisgIGZ1bmN0aW9uIHN1cHBvcnRzSGFzaENoYW5nZShkb2N1bWVudE1vZGUs
IGdsb2JhbCkgeworICAgIHJldHVybiAnb25oYXNoY2hhbmdlJyBpbiBnbG9iYWwgJiYgKGRvY3Vt
ZW50TW9kZSA9PT0gdW5kZWZpbmVkIHx8IGRvY3VtZW50TW9kZSA+IDcpOworICB9CisKKyAgLyoK
KyAgICBgdXNlckFnZW50YCBpcyBhIHVzZXIgYWdlbnQgc3RyaW5nLiBXZSB1c2UgdXNlciBhZ2Vu
dCB0ZXN0aW5nIGhlcmUsIGJlY2F1c2UKKyAgICB0aGUgc3RvY2sgQW5kcm9pZCBicm93c2VyIGlz
IGtub3duIHRvIGhhdmUgYnVnZ3kgdmVyc2lvbnMgb2YgdGhlIEhpc3RvcnkgQVBJLAorICAgIGlu
IHNvbWUgQW5kcm9pZCB2ZXJzaW9ucy4KKyAgCisgICAgQHByaXZhdGUKKyAgICBAZnVuY3Rpb24g
c3VwcG9ydHNIaXN0b3J5CisgICovCisKKyAgZnVuY3Rpb24gc3VwcG9ydHNIaXN0b3J5KHVzZXJB
Z2VudCwgaGlzdG9yeSkgeworICAgIC8vIEJvb3N0ZWQgZnJvbSBNb2Rlcm5penI6IGh0dHBzOi8v
Z2l0aHViLmNvbS9Nb2Rlcm5penIvTW9kZXJuaXpyL2Jsb2IvbWFzdGVyL2ZlYXR1cmUtZGV0ZWN0
cy9oaXN0b3J5LmpzCisgICAgLy8gVGhlIHN0b2NrIGJyb3dzZXIgb24gQW5kcm9pZCAyLjIgJiAy
LjMsIGFuZCA0LjAueCByZXR1cm5zIHBvc2l0aXZlIG9uIGhpc3Rvcnkgc3VwcG9ydAorICAgIC8v
IFVuZm9ydHVuYXRlbHkgc3VwcG9ydCBpcyByZWFsbHkgYnVnZ3kgYW5kIHRoZXJlIGlzIG5vIGNs
ZWFuIHdheSB0byBkZXRlY3QKKyAgICAvLyB0aGVzZSBidWdzLCBzbyB3ZSBmYWxsIGJhY2sgdG8g
YSB1c2VyIGFnZW50IHNuaWZmIDooCisKKyAgICAvLyBXZSBvbmx5IHdhbnQgQW5kcm9pZCAyIGFu
ZCA0LjAsIHN0b2NrIGJyb3dzZXIsIGFuZCBub3QgQ2hyb21lIHdoaWNoIGlkZW50aWZpZXMKKyAg
ICAvLyBpdHNlbGYgYXMgJ01vYmlsZSBTYWZhcmknIGFzIHdlbGwsIG5vciBXaW5kb3dzIFBob25l
LgorICAgIGlmICgodXNlckFnZW50LmluZGV4T2YoJ0FuZHJvaWQgMi4nKSAhPT0gLTEgfHwgdXNl
ckFnZW50LmluZGV4T2YoJ0FuZHJvaWQgNC4wJykgIT09IC0xKSAmJiB1c2VyQWdlbnQuaW5kZXhP
ZignTW9iaWxlIFNhZmFyaScpICE9PSAtMSAmJiB1c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lJykg
PT09IC0xICYmIHVzZXJBZ2VudC5pbmRleE9mKCdXaW5kb3dzIFBob25lJykgPT09IC0xKSB7Cisg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuICEhKGhpc3RvcnkgJiYgJ3B1
c2hTdGF0ZScgaW4gaGlzdG9yeSk7CisgIH0KKworICAvKioKKyAgICBSZXBsYWNlcyB0aGUgY3Vy
cmVudCBsb2NhdGlvbiwgbWFraW5nIHN1cmUgd2UgZXhwbGljaXRseSBpbmNsdWRlIHRoZSBvcmln
aW4KKyAgICB0byBwcmV2ZW50IHJlZGlyZWN0aW5nIHRvIGEgZGlmZmVyZW50IG9yaWdpbi4KKyAg
CisgICAgQHByaXZhdGUKKyAgKi8KKworICBmdW5jdGlvbiByZXBsYWNlUGF0aChsb2NhdGlvbiwg
cGF0aCkgeworICAgIGxvY2F0aW9uLnJlcGxhY2UoZ2V0T3JpZ2luKGxvY2F0aW9uKSArIHBhdGgp
OworICB9Cit9KTsKK2VuaWZlZCgnZW1iZXItcm91dGluZy9zZXJ2aWNlcy9yb3V0aW5nJywgWydl
eHBvcnRzJywgJ2VtYmVyLXJ1bnRpbWUvc3lzdGVtL3NlcnZpY2UnLCAnZW1iZXItbWV0YWwvcHJv
cGVydHlfZ2V0JywgJ2VtYmVyLW1ldGFsL2NvbXB1dGVkX21hY3JvcycsICdlbWJlci1yb3V0aW5n
L3V0aWxzJywgJ2VtYmVyLW1ldGFsL2Fzc2lnbiddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVy
UnVudGltZVN5c3RlbVNlcnZpY2UsIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LCBfZW1iZXJNZXRh
bENvbXB1dGVkX21hY3JvcywgX2VtYmVyUm91dGluZ1V0aWxzLCBfZW1iZXJNZXRhbEFzc2lnbikg
eworICAvKioKKyAgQG1vZHVsZSBlbWJlcgorICBAc3VibW9kdWxlIGVtYmVyLXJvdXRpbmcKKyAg
Ki8KKworICAndXNlIHN0cmljdCc7CisKKyAgLyoqCisgICAgVGhlIFJvdXRpbmcgc2VydmljZSBp
cyB1c2VkIGJ5IExpbmtDb21wb25lbnQsIGFuZCBwcm92aWRlcyBmYWNpbGl0aWVzIGZvcgorICAg
IHRoZSBjb21wb25lbnQvdmlldyBsYXllciB0byBpbnRlcmFjdCB3aXRoIHRoZSByb3V0ZXIuCisg
IAorICAgIFdoaWxlIHN0aWxsIHByaXZhdGUsIHRoaXMgc2VydmljZSBjYW4gZXZlbnR1YWxseSBi
ZSBvcGVuZWQgdXAsIGFuZCBwcm92aWRlcworICAgIHRoZSBzZXQgb2YgQVBJIG5lZWRlZCBmb3Ig
Y29tcG9uZW50cyB0byBjb250cm9sIHJvdXRpbmcgd2l0aG91dCBpbnRlcmFjdGluZworICAgIHdp
dGggcm91dGVyIGludGVybmFscy4KKyAgCisgICAgQHByaXZhdGUKKyAgICBAY2xhc3MgUm91dGlu
Z1NlcnZpY2UKKyAgKi8KKyAgZXhwb3J0cy5kZWZhdWx0ID0gX2VtYmVyUnVudGltZVN5c3RlbVNl
cnZpY2UuZGVmYXVsdC5leHRlbmQoeworICAgIHJvdXRlcjogbnVsbCwKKworICAgIHRhcmdldFN0
YXRlOiBfZW1iZXJNZXRhbENvbXB1dGVkX21hY3Jvcy5yZWFkT25seSgncm91dGVyLnRhcmdldFN0
YXRlJyksCisgICAgY3VycmVudFN0YXRlOiBfZW1iZXJNZXRhbENvbXB1dGVkX21hY3Jvcy5yZWFk
T25seSgncm91dGVyLmN1cnJlbnRTdGF0ZScpLAorICAgIGN1cnJlbnRSb3V0ZU5hbWU6IF9lbWJl
ck1ldGFsQ29tcHV0ZWRfbWFjcm9zLnJlYWRPbmx5KCdyb3V0ZXIuY3VycmVudFJvdXRlTmFtZScp
LAorICAgIGN1cnJlbnRQYXRoOiBfZW1iZXJNZXRhbENvbXB1dGVkX21hY3Jvcy5yZWFkT25seSgn
cm91dGVyLmN1cnJlbnRQYXRoJyksCisKKyAgICBhdmFpbGFibGVSb3V0ZXM6IGZ1bmN0aW9uICgp
IHsKKyAgICAgIHJldHVybiBPYmplY3Qua2V5cyhfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQo
dGhpcywgJ3JvdXRlcicpLnJvdXRlci5yZWNvZ25pemVyLm5hbWVzKTsKKyAgICB9LAorCisgICAg
aGFzUm91dGU6IGZ1bmN0aW9uIChyb3V0ZU5hbWUpIHsKKyAgICAgIHJldHVybiBfZW1iZXJNZXRh
bFByb3BlcnR5X2dldC5nZXQodGhpcywgJ3JvdXRlcicpLmhhc1JvdXRlKHJvdXRlTmFtZSk7Cisg
ICAgfSwKKworICAgIHRyYW5zaXRpb25UbzogZnVuY3Rpb24gKHJvdXRlTmFtZSwgbW9kZWxzLCBx
dWVyeVBhcmFtcywgc2hvdWxkUmVwbGFjZSkgeworICAgICAgdmFyIHJvdXRlciA9IF9lbWJlck1l
dGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAncm91dGVyJyk7CisKKyAgICAgIHZhciB0cmFuc2l0
aW9uID0gcm91dGVyLl9kb1RyYW5zaXRpb24ocm91dGVOYW1lLCBtb2RlbHMsIHF1ZXJ5UGFyYW1z
KTsKKworICAgICAgaWYgKHNob3VsZFJlcGxhY2UpIHsKKyAgICAgICAgdHJhbnNpdGlvbi5tZXRo
b2QoJ3JlcGxhY2UnKTsKKyAgICAgIH0KKyAgICB9LAorCisgICAgbm9ybWFsaXplUXVlcnlQYXJh
bXM6IGZ1bmN0aW9uIChyb3V0ZU5hbWUsIG1vZGVscywgcXVlcnlQYXJhbXMpIHsKKyAgICAgIHZh
ciByb3V0ZXIgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ3JvdXRlcicpOwor
ICAgICAgcm91dGVyLl9wcmVwYXJlUXVlcnlQYXJhbXMocm91dGVOYW1lLCBtb2RlbHMsIHF1ZXJ5
UGFyYW1zKTsKKyAgICB9LAorCisgICAgZ2VuZXJhdGVVUkw6IGZ1bmN0aW9uIChyb3V0ZU5hbWUs
IG1vZGVscywgcXVlcnlQYXJhbXMpIHsKKyAgICAgIHZhciByb3V0ZXIgPSBfZW1iZXJNZXRhbFBy
b3BlcnR5X2dldC5nZXQodGhpcywgJ3JvdXRlcicpOworICAgICAgaWYgKCFyb3V0ZXIucm91dGVy
KSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKworICAgICAgdmFyIHZpc2libGVRdWVyeVBh
cmFtcyA9IHt9OworICAgICAgX2VtYmVyTWV0YWxBc3NpZ24uZGVmYXVsdCh2aXNpYmxlUXVlcnlQ
YXJhbXMsIHF1ZXJ5UGFyYW1zKTsKKworICAgICAgdGhpcy5ub3JtYWxpemVRdWVyeVBhcmFtcyhy
b3V0ZU5hbWUsIG1vZGVscywgdmlzaWJsZVF1ZXJ5UGFyYW1zKTsKKworICAgICAgdmFyIGFyZ3Mg
PSBfZW1iZXJSb3V0aW5nVXRpbHMucm91dGVBcmdzKHJvdXRlTmFtZSwgbW9kZWxzLCB2aXNpYmxl
UXVlcnlQYXJhbXMpOworICAgICAgcmV0dXJuIHJvdXRlci5nZW5lcmF0ZS5hcHBseShyb3V0ZXIs
IGFyZ3MpOworICAgIH0sCisKKyAgICBpc0FjdGl2ZUZvclJvdXRlOiBmdW5jdGlvbiAoY29udGV4
dHMsIHF1ZXJ5UGFyYW1zLCByb3V0ZU5hbWUsIHJvdXRlclN0YXRlLCBpc0N1cnJlbnRXaGVuU3Bl
Y2lmaWVkKSB7CisgICAgICB2YXIgcm91dGVyID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0
KHRoaXMsICdyb3V0ZXInKTsKKworICAgICAgdmFyIGhhbmRsZXJzID0gcm91dGVyLnJvdXRlci5y
ZWNvZ25pemVyLmhhbmRsZXJzRm9yKHJvdXRlTmFtZSk7CisgICAgICB2YXIgbGVhZk5hbWUgPSBo
YW5kbGVyc1toYW5kbGVycy5sZW5ndGggLSAxXS5oYW5kbGVyOworICAgICAgdmFyIG1heGltdW1D
b250ZXh0cyA9IG51bWJlck9mQ29udGV4dHNBY2NlcHRlZEJ5SGFuZGxlcihyb3V0ZU5hbWUsIGhh
bmRsZXJzKTsKKworICAgICAgLy8gTk9URTogYW55IHVnbGluZXNzIGluIHRoZSBjYWxjdWxhdGlv
biBvZiBhY3RpdmVuZXNzIGlzIGxhcmdlbHkKKyAgICAgIC8vIGR1ZSB0byB0aGUgZmFjdCB0aGF0
IHdlIHN1cHBvcnQgYXV0b21hdGljIG5vcm1hbGl6aW5nIG9mCisgICAgICAvLyBgcmVzb3VyY2Vg
IC0+IGByZXNvdXJjZS5pbmRleGAsIGV2ZW4gdGhvdWdoIHRoZXJlIG1pZ2h0IGJlCisgICAgICAv
LyBkeW5hbWljIHNlZ21lbnRzIC8gcXVlcnkgcGFyYW1zIGRlZmluZWQgb24gYHJlc291cmNlLmlu
ZGV4YAorICAgICAgLy8gd2hpY2ggY29tcGxpY2F0ZXMgKGFuZCBtYWtlcyBzb21ld2hhdCBhbWJp
Z3VvdXMpIHRoZSBjYWxjdWxhdGlvbgorICAgICAgLy8gb2YgYWN0aXZlbmVzcyBmb3IgbGlua3Mg
dGhhdCBsaW5rIHRvIGByZXNvdXJjZWAgaW5zdGVhZCBvZgorICAgICAgLy8gZGlyZWN0bHkgdG8g
YHJlc291cmNlLmluZGV4YC4KKworICAgICAgLy8gaWYgd2UgZG9uJ3QgaGF2ZSBlbm91Z2ggY29u
dGV4dHMgcmV2ZXJ0IGJhY2sgdG8gZnVsbCByb3V0ZSBuYW1lCisgICAgICAvLyB0aGlzIGlzIGJl
Y2F1c2UgdGhlIGxlYWYgcm91dGUgd2lsbCB1c2Ugb25lIG9mIHRoZSBjb250ZXh0cworICAgICAg
aWYgKGNvbnRleHRzLmxlbmd0aCA+IG1heGltdW1Db250ZXh0cykgeworICAgICAgICByb3V0ZU5h
bWUgPSBsZWFmTmFtZTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHJvdXRlclN0YXRlLmlzQWN0
aXZlSW50ZW50KHJvdXRlTmFtZSwgY29udGV4dHMsIHF1ZXJ5UGFyYW1zLCAhaXNDdXJyZW50V2hl
blNwZWNpZmllZCk7CisgICAgfQorICB9KTsKKworICBmdW5jdGlvbiBudW1iZXJPZkNvbnRleHRz
QWNjZXB0ZWRCeUhhbmRsZXIoaGFuZGxlciwgaGFuZGxlckluZm9zKSB7CisgICAgdmFyIHJlcSA9
IDA7CisgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBoYW5kbGVySW5mb3MubGVuZ3RoOyBpIDwgbDsg
aSsrKSB7CisgICAgICByZXEgPSByZXEgKyBoYW5kbGVySW5mb3NbaV0ubmFtZXMubGVuZ3RoOwor
ICAgICAgaWYgKGhhbmRsZXJJbmZvc1tpXS5oYW5kbGVyID09PSBoYW5kbGVyKSB7CisgICAgICAg
IGJyZWFrOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXE7CisgIH0KK30pOworZW5p
ZmVkKCdlbWJlci1yb3V0aW5nL3N5c3RlbS9jYWNoZScsIFsnZXhwb3J0cycsICdlbWJlci1ydW50
aW1lL3N5c3RlbS9vYmplY3QnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlclJ1bnRpbWVTeXN0
ZW1PYmplY3QpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIGV4cG9ydHMuZGVmYXVsdCA9IF9lbWJl
clJ1bnRpbWVTeXN0ZW1PYmplY3QuZGVmYXVsdC5leHRlbmQoeworICAgIGluaXQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgIHRoaXMuY2FjaGUgPSB7fTsKKyAgICB9LAorICAgIGhhczogZnVuY3Rpb24g
KGJ1Y2tldEtleSkgeworICAgICAgcmV0dXJuIGJ1Y2tldEtleSBpbiB0aGlzLmNhY2hlOworICAg
IH0sCisgICAgc3Rhc2g6IGZ1bmN0aW9uIChidWNrZXRLZXksIGtleSwgdmFsdWUpIHsKKyAgICAg
IHZhciBidWNrZXQgPSB0aGlzLmNhY2hlW2J1Y2tldEtleV07CisgICAgICBpZiAoIWJ1Y2tldCkg
eworICAgICAgICBidWNrZXQgPSB0aGlzLmNhY2hlW2J1Y2tldEtleV0gPSB7fTsKKyAgICAgIH0K
KyAgICAgIGJ1Y2tldFtrZXldID0gdmFsdWU7CisgICAgfSwKKyAgICBsb29rdXA6IGZ1bmN0aW9u
IChidWNrZXRLZXksIHByb3AsIGRlZmF1bHRWYWx1ZSkgeworICAgICAgdmFyIGNhY2hlID0gdGhp
cy5jYWNoZTsKKyAgICAgIGlmICghKGJ1Y2tldEtleSBpbiBjYWNoZSkpIHsKKyAgICAgICAgcmV0
dXJuIGRlZmF1bHRWYWx1ZTsKKyAgICAgIH0KKyAgICAgIHZhciBidWNrZXQgPSBjYWNoZVtidWNr
ZXRLZXldOworICAgICAgaWYgKHByb3AgaW4gYnVja2V0KSB7CisgICAgICAgIHJldHVybiBidWNr
ZXRbcHJvcF07CisgICAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwor
ICAgICAgfQorICAgIH0sCisgICAgY2FjaGU6IG51bGwKKyAgfSk7Cit9KTsKK2VuaWZlZCgiZW1i
ZXItcm91dGluZy9zeXN0ZW0vY29udHJvbGxlcl9mb3IiLCBbImV4cG9ydHMiXSwgZnVuY3Rpb24g
KGV4cG9ydHMpIHsKKyAgLyoqCisgIEBtb2R1bGUgZW1iZXIKKyAgQHN1Ym1vZHVsZSBlbWJlci1y
b3V0aW5nCisgICovCisKKyAgLyoqCisgICAgRmluZHMgYSBjb250cm9sbGVyIGluc3RhbmNlLgor
ICAKKyAgICBAZm9yIEVtYmVyCisgICAgQG1ldGhvZCBjb250cm9sbGVyRm9yCisgICAgQHByaXZh
dGUKKyAgKi8KKyAgInVzZSBzdHJpY3QiOworCisgIGV4cG9ydHMuZGVmYXVsdCA9IGNvbnRyb2xs
ZXJGb3I7CisKKyAgZnVuY3Rpb24gY29udHJvbGxlckZvcihjb250YWluZXIsIGNvbnRyb2xsZXJO
YW1lLCBsb29rdXBPcHRpb25zKSB7CisgICAgcmV0dXJuIGNvbnRhaW5lci5sb29rdXAoImNvbnRy
b2xsZXI6IiArIGNvbnRyb2xsZXJOYW1lLCBsb29rdXBPcHRpb25zKTsKKyAgfQorfSk7Citlbmlm
ZWQoJ2VtYmVyLXJvdXRpbmcvc3lzdGVtL2RzbCcsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9k
ZWJ1ZyddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxEZWJ1ZykgeworICAndXNlIHN0
cmljdCc7CisKKyAgLyoqCisgIEBtb2R1bGUgZW1iZXIKKyAgQHN1Ym1vZHVsZSBlbWJlci1yb3V0
aW5nCisgICovCisKKyAgZnVuY3Rpb24gRFNMKG5hbWUsIG9wdGlvbnMpIHsKKyAgICB0aGlzLnBh
cmVudCA9IG5hbWU7CisgICAgdGhpcy5lbmFibGVMb2FkaW5nU3Vic3RhdGVzID0gb3B0aW9ucyAm
JiBvcHRpb25zLmVuYWJsZUxvYWRpbmdTdWJzdGF0ZXM7CisgICAgdGhpcy5tYXRjaGVzID0gW107
CisgICAgdGhpcy5leHBsaWNpdEluZGV4ID0gdW5kZWZpbmVkOworICAgIHRoaXMub3B0aW9ucyA9
IG9wdGlvbnM7CisgIH0KKworICBleHBvcnRzLmRlZmF1bHQgPSBEU0w7CisKKyAgRFNMLnByb3Rv
dHlwZSA9IHsKKyAgICByb3V0ZTogZnVuY3Rpb24gKG5hbWUsIG9wdGlvbnMsIGNhbGxiYWNrKSB7
CisgICAgICB2YXIgZHVtbXlFcnJvclJvdXRlID0gJy9fdW51c2VkX2R1bW15X2Vycm9yX3BhdGhf
cm91dGVfJyArIG5hbWUgKyAnLzplcnJvcic7CisgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9
PT0gMiAmJiB0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykgeworICAgICAgICBjYWxsYmFj
ayA9IG9wdGlvbnM7CisgICAgICAgIG9wdGlvbnMgPSB7fTsKKyAgICAgIH0KKworICAgICAgaWYg
KGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHsKKyAgICAgICAgb3B0aW9ucyA9IHt9OworICAgICAg
fQorCisgICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnXCcnICsgbmFtZSArICdcJyBjYW5u
b3QgYmUgdXNlZCBhcyBhIHJvdXRlIG5hbWUuJywgKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYg
KG9wdGlvbnMub3ZlcnJpZGVOYW1lQXNzZXJ0aW9uID09PSB0cnVlKSB7CisgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gWydhcnJheScsICdiYXNpYycs
ICdvYmplY3QnLCAnYXBwbGljYXRpb24nXS5pbmRleE9mKG5hbWUpID09PSAtMTsKKyAgICAgIH0p
KCkpOworCisgICAgICBpZiAodGhpcy5lbmFibGVMb2FkaW5nU3Vic3RhdGVzKSB7CisgICAgICAg
IGNyZWF0ZVJvdXRlKHRoaXMsIG5hbWUgKyAnX2xvYWRpbmcnLCB7IHJlc2V0TmFtZXNwYWNlOiBv
cHRpb25zLnJlc2V0TmFtZXNwYWNlIH0pOworICAgICAgICBjcmVhdGVSb3V0ZSh0aGlzLCBuYW1l
ICsgJ19lcnJvcicsIHsgcGF0aDogZHVtbXlFcnJvclJvdXRlIH0pOworICAgICAgfQorCisgICAg
ICBpZiAoY2FsbGJhY2spIHsKKyAgICAgICAgdmFyIGZ1bGxOYW1lID0gZ2V0RnVsbE5hbWUodGhp
cywgbmFtZSwgb3B0aW9ucy5yZXNldE5hbWVzcGFjZSk7CisgICAgICAgIHZhciBkc2wgPSBuZXcg
RFNMKGZ1bGxOYW1lLCB0aGlzLm9wdGlvbnMpOworCisgICAgICAgIGNyZWF0ZVJvdXRlKGRzbCwg
J2xvYWRpbmcnKTsKKyAgICAgICAgY3JlYXRlUm91dGUoZHNsLCAnZXJyb3InLCB7IHBhdGg6IGR1
bW15RXJyb3JSb3V0ZSB9KTsKKworICAgICAgICBjYWxsYmFjay5jYWxsKGRzbCk7CisKKyAgICAg
ICAgY3JlYXRlUm91dGUodGhpcywgbmFtZSwgb3B0aW9ucywgZHNsLmdlbmVyYXRlKCkpOworICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgY3JlYXRlUm91dGUodGhpcywgbmFtZSwgb3B0aW9ucyk7Cisg
ICAgICB9CisgICAgfSwKKworICAgIHB1c2g6IGZ1bmN0aW9uICh1cmwsIG5hbWUsIGNhbGxiYWNr
KSB7CisgICAgICB2YXIgcGFydHMgPSBuYW1lLnNwbGl0KCcuJyk7CisgICAgICBpZiAodXJsID09
PSAnJyB8fCB1cmwgPT09ICcvJyB8fCBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSA9PT0gJ2luZGV4
JykgeworICAgICAgICB0aGlzLmV4cGxpY2l0SW5kZXggPSB0cnVlOworICAgICAgfQorCisgICAg
ICB0aGlzLm1hdGNoZXMucHVzaChbdXJsLCBuYW1lLCBjYWxsYmFja10pOworICAgIH0sCisKKyAg
ICByZXNvdXJjZTogZnVuY3Rpb24gKG5hbWUsIG9wdGlvbnMsIGNhbGxiYWNrKSB7CisgICAgICBp
ZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMiAmJiB0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9u
JykgeworICAgICAgICBjYWxsYmFjayA9IG9wdGlvbnM7CisgICAgICAgIG9wdGlvbnMgPSB7fTsK
KyAgICAgIH0KKworICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHsKKyAgICAgICAg
b3B0aW9ucyA9IHt9OworICAgICAgfQorCisgICAgICBvcHRpb25zLnJlc2V0TmFtZXNwYWNlID0g
dHJ1ZTsKKyAgICAgIF9lbWJlck1ldGFsRGVidWcuZGVwcmVjYXRlKCd0aGlzLnJlc291cmNlKCkg
aXMgZGVwcmVjYXRlZC4gVXNlIHRoaXMucm91dGUoXCduYW1lXCcsIHsgcmVzZXROYW1lc3BhY2U6
IHRydWUgfSwgZnVuY3Rpb24gKCkge30pIGluc3RlYWQuJywgZmFsc2UsIHsgaWQ6ICdlbWJlci1y
b3V0aW5nLnJvdXRlci1yZXNvdXJjZScsIHVudGlsOiAnMy4wLjAnIH0pOworICAgICAgdGhpcy5y
b3V0ZShuYW1lLCBvcHRpb25zLCBjYWxsYmFjayk7CisgICAgfSwKKworICAgIGdlbmVyYXRlOiBm
dW5jdGlvbiAoKSB7CisgICAgICB2YXIgZHNsTWF0Y2hlcyA9IHRoaXMubWF0Y2hlczsKKworICAg
ICAgaWYgKCF0aGlzLmV4cGxpY2l0SW5kZXgpIHsKKyAgICAgICAgdGhpcy5yb3V0ZSgnaW5kZXgn
LCB7IHBhdGg6ICcvJyB9KTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtYXRj
aCkgeworICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGRzbE1hdGNoZXMubGVuZ3RoOyBpIDwg
bDsgaSsrKSB7CisgICAgICAgICAgdmFyIGRzbE1hdGNoID0gZHNsTWF0Y2hlc1tpXTsKKyAgICAg
ICAgICBtYXRjaChkc2xNYXRjaFswXSkudG8oZHNsTWF0Y2hbMV0sIGRzbE1hdGNoWzJdKTsKKyAg
ICAgICAgfQorICAgICAgfTsKKyAgICB9CisgIH07CisKKyAgZnVuY3Rpb24gY2FuTmVzdChkc2wp
IHsKKyAgICByZXR1cm4gZHNsLnBhcmVudCAmJiBkc2wucGFyZW50ICE9PSAnYXBwbGljYXRpb24n
OworICB9CisKKyAgZnVuY3Rpb24gZ2V0RnVsbE5hbWUoZHNsLCBuYW1lLCByZXNldE5hbWVzcGFj
ZSkgeworICAgIGlmIChjYW5OZXN0KGRzbCkgJiYgcmVzZXROYW1lc3BhY2UgIT09IHRydWUpIHsK
KyAgICAgIHJldHVybiBkc2wucGFyZW50ICsgJy4nICsgbmFtZTsKKyAgICB9IGVsc2UgeworICAg
ICAgcmV0dXJuIG5hbWU7CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gY3JlYXRlUm91dGUoZHNs
LCBuYW1lLCBvcHRpb25zLCBjYWxsYmFjaykgeworICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9
OworCisgICAgdmFyIGZ1bGxOYW1lID0gZ2V0RnVsbE5hbWUoZHNsLCBuYW1lLCBvcHRpb25zLnJl
c2V0TmFtZXNwYWNlKTsKKworICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5wYXRoICE9PSAnc3RyaW5n
JykgeworICAgICAgb3B0aW9ucy5wYXRoID0gJy8nICsgbmFtZTsKKyAgICB9CisKKyAgICBkc2wu
cHVzaChvcHRpb25zLnBhdGgsIGZ1bGxOYW1lLCBjYWxsYmFjayk7CisgIH0KKworICBEU0wubWFw
ID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CisgICAgdmFyIGRzbCA9IG5ldyBEU0woKTsKKyAgICBj
YWxsYmFjay5jYWxsKGRzbCk7CisgICAgcmV0dXJuIGRzbDsKKyAgfTsKK30pOworZW5pZmVkKCdl
bWJlci1yb3V0aW5nL3N5c3RlbS9nZW5lcmF0ZV9jb250cm9sbGVyJywgWydleHBvcnRzJywgJ2Vt
YmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCddLCBmdW5jdGlvbiAo
ZXhwb3J0cywgX2VtYmVyTWV0YWxEZWJ1ZywgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQpIHsKKyAg
J3VzZSBzdHJpY3QnOworCisgIGV4cG9ydHMuZ2VuZXJhdGVDb250cm9sbGVyRmFjdG9yeSA9IGdl
bmVyYXRlQ29udHJvbGxlckZhY3Rvcnk7CisgIGV4cG9ydHMuZGVmYXVsdCA9IGdlbmVyYXRlQ29u
dHJvbGxlcjsKKworICAvKioKKyAgQG1vZHVsZSBlbWJlcgorICBAc3VibW9kdWxlIGVtYmVyLXJv
dXRpbmcKKyAgKi8KKworICAvKioKKyAgICBHZW5lcmF0ZXMgYSBjb250cm9sbGVyIGZhY3RvcnkK
KyAgCisgICAgQGZvciBFbWJlcgorICAgIEBtZXRob2QgZ2VuZXJhdGVDb250cm9sbGVyRmFjdG9y
eQorICAgIEBwcml2YXRlCisgICovCisKKyAgZnVuY3Rpb24gZ2VuZXJhdGVDb250cm9sbGVyRmFj
dG9yeShvd25lciwgY29udHJvbGxlck5hbWUsIGNvbnRleHQpIHsKKyAgICB2YXIgRmFjdG9yeSwg
ZnVsbE5hbWU7CisKKyAgICBGYWN0b3J5ID0gb3duZXIuX2xvb2t1cEZhY3RvcnkoJ2NvbnRyb2xs
ZXI6YmFzaWMnKS5leHRlbmQoeworICAgICAgaXNHZW5lcmF0ZWQ6IHRydWUsCisgICAgICB0b1N0
cmluZzogZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gJyhnZW5lcmF0ZWQgJyArIGNvbnRy
b2xsZXJOYW1lICsgJyBjb250cm9sbGVyKSc7CisgICAgICB9CisgICAgfSk7CisKKyAgICBmdWxs
TmFtZSA9ICdjb250cm9sbGVyOicgKyBjb250cm9sbGVyTmFtZTsKKworICAgIG93bmVyLnJlZ2lz
dGVyKGZ1bGxOYW1lLCBGYWN0b3J5KTsKKworICAgIHJldHVybiBGYWN0b3J5OworICB9CisKKyAg
LyoqCisgICAgR2VuZXJhdGVzIGFuZCBpbnN0YW50aWF0ZXMgYSBjb250cm9sbGVyLgorICAKKyAg
ICBUaGUgdHlwZSBvZiB0aGUgZ2VuZXJhdGVkIGNvbnRyb2xsZXIgZmFjdG9yeSBpcyBkZXJpdmVk
CisgICAgZnJvbSB0aGUgY29udGV4dC4gSWYgdGhlIGNvbnRleHQgaXMgYW4gYXJyYXkgYW4gYXJy
YXkgY29udHJvbGxlcgorICAgIGlzIGdlbmVyYXRlZCwgaWYgYW4gb2JqZWN0LCBhbiBvYmplY3Qg
Y29udHJvbGxlciBvdGhlcndpc2UsIGEgYmFzaWMKKyAgICBjb250cm9sbGVyIGlzIGdlbmVyYXRl
ZC4KKyAgCisgICAgQGZvciBFbWJlcgorICAgIEBtZXRob2QgZ2VuZXJhdGVDb250cm9sbGVyCisg
ICAgQHByaXZhdGUKKyAgICBAc2luY2UgMS4zLjAKKyAgKi8KKworICBmdW5jdGlvbiBnZW5lcmF0
ZUNvbnRyb2xsZXIob3duZXIsIGNvbnRyb2xsZXJOYW1lLCBjb250ZXh0KSB7CisgICAgZ2VuZXJh
dGVDb250cm9sbGVyRmFjdG9yeShvd25lciwgY29udHJvbGxlck5hbWUsIGNvbnRleHQpOworCisg
ICAgdmFyIGZ1bGxOYW1lID0gJ2NvbnRyb2xsZXI6JyArIGNvbnRyb2xsZXJOYW1lOworICAgIHZh
ciBpbnN0YW5jZSA9IG93bmVyLmxvb2t1cChmdWxsTmFtZSk7CisKKyAgICBpZiAoX2VtYmVyTWV0
YWxQcm9wZXJ0eV9nZXQuZ2V0KGluc3RhbmNlLCAnbmFtZXNwYWNlLkxPR19BQ1RJVkVfR0VORVJB
VElPTicpKSB7CisgICAgICBfZW1iZXJNZXRhbERlYnVnLmluZm8oJ2dlbmVyYXRlZCAtPiAnICsg
ZnVsbE5hbWUsIHsgZnVsbE5hbWU6IGZ1bGxOYW1lIH0pOworICAgIH0KKworICAgIHJldHVybiBp
bnN0YW5jZTsKKyAgfQorfSk7CitlbmlmZWQoJ2VtYmVyLXJvdXRpbmcvc3lzdGVtL3F1ZXJ5X3Bh
cmFtcycsIFsnZXhwb3J0cycsICdlbWJlci1ydW50aW1lL3N5c3RlbS9vYmplY3QnXSwgZnVuY3Rp
b24gKGV4cG9ydHMsIF9lbWJlclJ1bnRpbWVTeXN0ZW1PYmplY3QpIHsKKyAgJ3VzZSBzdHJpY3Qn
OworCisgIGV4cG9ydHMuZGVmYXVsdCA9IF9lbWJlclJ1bnRpbWVTeXN0ZW1PYmplY3QuZGVmYXVs
dC5leHRlbmQoeworICAgIGlzUXVlcnlQYXJhbXM6IHRydWUsCisgICAgdmFsdWVzOiBudWxsCisg
IH0pOworfSk7CitlbmlmZWQoJ2VtYmVyLXJvdXRpbmcvc3lzdGVtL3JvdXRlJywgWydleHBvcnRz
JywgJ2VtYmVyLW1ldGFsL2NvcmUnLCAnZW1iZXItbWV0YWwvZGVidWcnLCAnZW1iZXItbWV0YWwv
ZmVhdHVyZXMnLCAnZW1iZXItbWV0YWwvZXJyb3InLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0
JywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCcsICdlbWJlci1tZXRhbC9nZXRfcHJvcGVydGll
cycsICdlbWJlci1tZXRhbC9pc19ub25lJywgJ2VtYmVyLW1ldGFsL2NvbXB1dGVkJywgJ2VtYmVy
LW1ldGFsL2Fzc2lnbicsICdlbWJlci1ydW50aW1lL3V0aWxzJywgJ2VtYmVyLW1ldGFsL3J1bl9s
b29wJywgJ2VtYmVyLXJ1bnRpbWUvY29weScsICdlbWJlci1ydW50aW1lL3N5c3RlbS9zdHJpbmcn
LCAnZW1iZXItcnVudGltZS9zeXN0ZW0vb2JqZWN0JywgJ2VtYmVyLXJ1bnRpbWUvc3lzdGVtL25h
dGl2ZV9hcnJheScsICdlbWJlci1ydW50aW1lL21peGlucy9ldmVudGVkJywgJ2VtYmVyLXJ1bnRp
bWUvbWl4aW5zL2FjdGlvbl9oYW5kbGVyJywgJ2VtYmVyLXJvdXRpbmcvc3lzdGVtL2dlbmVyYXRl
X2NvbnRyb2xsZXInLCAnZW1iZXItcm91dGluZy91dGlscycsICdjb250YWluZXIvb3duZXInLCAn
ZW1iZXItbWV0YWwvaXNfZW1wdHknXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsQ29y
ZSwgX2VtYmVyTWV0YWxEZWJ1ZywgX2VtYmVyTWV0YWxGZWF0dXJlcywgX2VtYmVyTWV0YWxFcnJv
ciwgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQsIF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LCBfZW1i
ZXJNZXRhbEdldF9wcm9wZXJ0aWVzLCBfZW1iZXJNZXRhbElzX25vbmUsIF9lbWJlck1ldGFsQ29t
cHV0ZWQsIF9lbWJlck1ldGFsQXNzaWduLCBfZW1iZXJSdW50aW1lVXRpbHMsIF9lbWJlck1ldGFs
UnVuX2xvb3AsIF9lbWJlclJ1bnRpbWVDb3B5LCBfZW1iZXJSdW50aW1lU3lzdGVtU3RyaW5nLCBf
ZW1iZXJSdW50aW1lU3lzdGVtT2JqZWN0LCBfZW1iZXJSdW50aW1lU3lzdGVtTmF0aXZlX2FycmF5
LCBfZW1iZXJSdW50aW1lTWl4aW5zRXZlbnRlZCwgX2VtYmVyUnVudGltZU1peGluc0FjdGlvbl9o
YW5kbGVyLCBfZW1iZXJSb3V0aW5nU3lzdGVtR2VuZXJhdGVfY29udHJvbGxlciwgX2VtYmVyUm91
dGluZ1V0aWxzLCBfY29udGFpbmVyT3duZXIsIF9lbWJlck1ldGFsSXNfZW1wdHkpIHsKKyAgJ3Vz
ZSBzdHJpY3QnOworCisgIHZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTsKKworICBm
dW5jdGlvbiBLKCkgeworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgIEBtb2R1bGUg
ZW1iZXIKKyAgQHN1Ym1vZHVsZSBlbWJlci1yb3V0aW5nCisgICovCisKKyAgLyoqCisgICAgVGhl
IGBFbWJlci5Sb3V0ZWAgY2xhc3MgaXMgdXNlZCB0byBkZWZpbmUgaW5kaXZpZHVhbCByb3V0ZXMu
IFJlZmVyIHRvCisgICAgdGhlIFtyb3V0aW5nIGd1aWRlXShodHRwOi8vZW1iZXJqcy5jb20vZ3Vp
ZGVzL3JvdXRpbmcvKSBmb3IgZG9jdW1lbnRhdGlvbi4KKyAgCisgICAgQGNsYXNzIFJvdXRlCisg
ICAgQG5hbWVzcGFjZSBFbWJlcgorICAgIEBleHRlbmRzIEVtYmVyLk9iamVjdAorICAgIEB1c2Vz
IEVtYmVyLkFjdGlvbkhhbmRsZXIKKyAgICBAdXNlcyBFbWJlci5FdmVudGVkCisgICAgQHB1Ymxp
YworICAqLworICB2YXIgUm91dGUgPSBfZW1iZXJSdW50aW1lU3lzdGVtT2JqZWN0LmRlZmF1bHQu
ZXh0ZW5kKF9lbWJlclJ1bnRpbWVNaXhpbnNBY3Rpb25faGFuZGxlci5kZWZhdWx0LCBfZW1iZXJS
dW50aW1lTWl4aW5zRXZlbnRlZC5kZWZhdWx0LCB7CisgICAgLyoqCisgICAgICBDb25maWd1cmF0
aW9uIGhhc2ggZm9yIHRoaXMgcm91dGUncyBxdWVyeVBhcmFtcy4gVGhlIHBvc3NpYmxlCisgICAg
ICBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIGRlZmF1bHRzIGFyZSBhcyBmb2xsb3dz
CisgICAgICAoYXNzdW1pbmcgYSBxdWVyeSBwYXJhbSB3aG9zZSBjb250cm9sbGVyIHByb3BlcnR5
IGlzIGBwYWdlYCk6CisgICAgICAgYGBgamF2YXNjcmlwdAorICAgICAgcXVlcnlQYXJhbXM6IHsK
KyAgICAgICAgcGFnZTogeworICAgICAgICAgIC8vIEJ5IGRlZmF1bHQsIGNvbnRyb2xsZXIgcXVl
cnkgcGFyYW0gcHJvcGVydGllcyBkb24ndAorICAgICAgICAgIC8vIGNhdXNlIGEgZnVsbCB0cmFu
c2l0aW9uIHdoZW4gdGhleSBhcmUgY2hhbmdlZCwgYnV0CisgICAgICAgICAgLy8gcmF0aGVyIG9u
bHkgY2F1c2UgdGhlIFVSTCB0byB1cGRhdGUuIFNldHRpbmcKKyAgICAgICAgICAvLyBgcmVmcmVz
aE1vZGVsYCB0byB0cnVlIHdpbGwgY2F1c2UgYW4gImluLXBsYWNlIgorICAgICAgICAgIC8vIHRy
YW5zaXRpb24gdG8gb2NjdXIsIHdoZXJlYnkgdGhlIG1vZGVsIGhvb2tzIGZvcgorICAgICAgICAg
IC8vIHRoaXMgcm91dGUgKGFuZCBhbnkgY2hpbGQgcm91dGVzKSB3aWxsIHJlLWZpcmUsIGFsbG93
aW5nCisgICAgICAgICAgLy8geW91IHRvIHJlbG9hZCBtb2RlbHMgKGUuZy4sIGZyb20gdGhlIHNl
cnZlcikgdXNpbmcgdGhlCisgICAgICAgICAgLy8gdXBkYXRlZCBxdWVyeSBwYXJhbSB2YWx1ZXMu
CisgICAgICAgICAgcmVmcmVzaE1vZGVsOiBmYWxzZSwKKyAgICAgICAgICAgLy8gQnkgZGVmYXVs
dCwgY2hhbmdlcyB0byBjb250cm9sbGVyIHF1ZXJ5IHBhcmFtIHByb3BlcnRpZXMKKyAgICAgICAg
ICAvLyBjYXVzZSB0aGUgVVJMIHRvIHVwZGF0ZSB2aWEgYHB1c2hTdGF0ZWAsIHdoaWNoIG1lYW5z
IGFuCisgICAgICAgICAgLy8gaXRlbSB3aWxsIGJlIGFkZGVkIHRvIHRoZSBicm93c2VyJ3MgaGlz
dG9yeSwgYWxsb3dpbmcKKyAgICAgICAgICAvLyB5b3UgdG8gdXNlIHRoZSBiYWNrIGJ1dHRvbiB0
byByZXN0b3JlIHRoZSBhcHAgdG8gdGhlCisgICAgICAgICAgLy8gcHJldmlvdXMgc3RhdGUgYmVm
b3JlIHRoZSBxdWVyeSBwYXJhbSBwcm9wZXJ0eSB3YXMgY2hhbmdlZC4KKyAgICAgICAgICAvLyBT
ZXR0aW5nIGByZXBsYWNlYCB0byB0cnVlIHdpbGwgdXNlIGByZXBsYWNlU3RhdGVgIChvciBpdHMK
KyAgICAgICAgICAvLyBoYXNoIGxvY2F0aW9uIGVxdWl2YWxlbnQpLCB3aGljaCBjYXVzZXMgbm8g
YnJvd3NlciBoaXN0b3J5CisgICAgICAgICAgLy8gaXRlbSB0byBiZSBhZGRlZC4gVGhpcyBvcHRp
b25zIG5hbWUgYW5kIGRlZmF1bHQgdmFsdWUgYXJlCisgICAgICAgICAgLy8gdGhlIHNhbWUgYXMg
dGhlIGBsaW5rLXRvYCBoZWxwZXIncyBgcmVwbGFjZWAgb3B0aW9uLgorICAgICAgICAgIHJlcGxh
Y2U6IGZhbHNlLAorICAgICAgICAgICAvLyBCeSBkZWZhdWx0LCB0aGUgcXVlcnkgcGFyYW0gVVJM
IGtleSBpcyB0aGUgc2FtZSBuYW1lIGFzCisgICAgICAgICAgLy8gdGhlIGNvbnRyb2xsZXIgcHJv
cGVydHkgbmFtZS4gVXNlIGBhc2AgdG8gc3BlY2lmeSBhCisgICAgICAgICAgLy8gZGlmZmVyZW50
IFVSTCBrZXkuCisgICAgICAgICAgYXM6ICdwYWdlJworICAgICAgICB9CisgICAgICB9CisgICAg
ICBgYGAKKyAgICAgICBAcHJvcGVydHkgcXVlcnlQYXJhbXMKKyAgICAgIEBmb3IgRW1iZXIuUm91
dGUKKyAgICAgIEB0eXBlIE9iamVjdAorICAgICAgQHB1YmxpYworICAgICovCisgICAgcXVlcnlQ
YXJhbXM6IHt9LAorCisgICAgLyoqCisgICAgICBUaGUgbmFtZSBvZiB0aGUgcm91dGUsIGRvdC1k
ZWxpbWl0ZWQuCisgICAgICAgRm9yIGV4YW1wbGUsIGEgcm91dGUgZm91bmQgYXQgYGFwcC9yb3V0
ZXMvcG9zdHMvcG9zdC5qc2Agb3IKKyAgICAgIGBhcHAvcG9zdHMvcG9zdC9yb3V0ZS5qc2AgKHdp
dGggcG9kcykgd2lsbCBoYXZlIGEgYHJvdXRlTmFtZWAgb2YKKyAgICAgIGBwb3N0cy5wb3N0YC4K
KyAgICAgICBAcHJvcGVydHkgcm91dGVOYW1lCisgICAgICBAZm9yIEVtYmVyLlJvdXRlCisgICAg
ICBAdHlwZSBTdHJpbmcKKyAgICAgIEBwdWJsaWMKKyAgICAqLworCisgICAgLyoqCisgICAgICBA
cHJpdmF0ZQorICAgICAgIEBwcm9wZXJ0eSBfcXAKKyAgICAqLworICAgIF9xcDogX2VtYmVyTWV0
YWxDb21wdXRlZC5jb21wdXRlZChmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgX3RoaXMgPSB0aGlz
OworCisgICAgICB2YXIgY29udHJvbGxlclByb3RvLCBjb21iaW5lZFF1ZXJ5UGFyYW1ldGVyQ29u
ZmlndXJhdGlvbjsKKworICAgICAgdmFyIGNvbnRyb2xsZXJOYW1lID0gdGhpcy5jb250cm9sbGVy
TmFtZSB8fCB0aGlzLnJvdXRlTmFtZTsKKyAgICAgIHZhciBkZWZpbmVkQ29udHJvbGxlckNsYXNz
ID0gX2NvbnRhaW5lck93bmVyLmdldE93bmVyKHRoaXMpLl9sb29rdXBGYWN0b3J5KCdjb250cm9s
bGVyOicgKyBjb250cm9sbGVyTmFtZSk7CisgICAgICB2YXIgcXVlcnlQYXJhbWV0ZXJDb25maWd1
cmF0b24gPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ3F1ZXJ5UGFyYW1zJyk7
CisgICAgICB2YXIgaGFzUm91dGVyRGVmaW5lZFF1ZXJ5UGFyYW1zID0gISFPYmplY3Qua2V5cyhx
dWVyeVBhcmFtZXRlckNvbmZpZ3VyYXRvbikubGVuZ3RoOworCisgICAgICBpZiAoZGVmaW5lZENv
bnRyb2xsZXJDbGFzcykgeworICAgICAgICAvLyB0aGUgZGV2ZWxvcGVyIGhhcyBhdXRob3JlZCBh
IGNvbnRyb2xsZXIgY2xhc3MgaW4gdGhlaXIgYXBwbGljYXRpb24gZm9yIHRoaXMgcm91dGUKKyAg
ICAgICAgLy8gYWNjZXNzIHRoZSBwcm90b3R5cGUsIGZpbmQgaXRzIHF1ZXJ5IHBhcmFtcyBhbmQg
bm9ybWFsaXplIHRoZWlyIG9iamVjdCBzaGFwZQorICAgICAgICAvLyB0aGVtIG1lcmdlIGluIHRo
ZSBxdWVyeSBwYXJhbXMgZm9yIHRoZSByb3V0ZS4gQXMgYSBtZXJnZWRQcm9wZXJ0eSwgUm91dGUj
cXVlcnlQYXJhbXMgaXMgYWx3YXlzCisgICAgICAgIC8vIGF0IGxlYXN0IGB7fWAKKyAgICAgICAg
Y29udHJvbGxlclByb3RvID0gZGVmaW5lZENvbnRyb2xsZXJDbGFzcy5wcm90bygpOworCisgICAg
ICAgIHZhciBjb250cm9sbGVyRGVmaW5lZFF1ZXJ5UGFyYW1ldGVyQ29uZmlndXJhdGlvbiA9IF9l
bWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldChjb250cm9sbGVyUHJvdG8sICdxdWVyeVBhcmFtcycp
OworICAgICAgICB2YXIgbm9ybWFsaXplZENvbnRyb2xsZXJRdWVyeVBhcmFtZXRlckNvbmZpZ3Vy
YXRpb24gPSBfZW1iZXJSb3V0aW5nVXRpbHMubm9ybWFsaXplQ29udHJvbGxlclF1ZXJ5UGFyYW1z
KGNvbnRyb2xsZXJEZWZpbmVkUXVlcnlQYXJhbWV0ZXJDb25maWd1cmF0aW9uKTsKKyAgICAgICAg
Y29tYmluZWRRdWVyeVBhcmFtZXRlckNvbmZpZ3VyYXRpb24gPSBtZXJnZUVhY2hRdWVyeVBhcmFt
cyhub3JtYWxpemVkQ29udHJvbGxlclF1ZXJ5UGFyYW1ldGVyQ29uZmlndXJhdGlvbiwgcXVlcnlQ
YXJhbWV0ZXJDb25maWd1cmF0b24pOworICAgICAgfSBlbHNlIGlmIChoYXNSb3V0ZXJEZWZpbmVk
UXVlcnlQYXJhbXMpIHsKKyAgICAgICAgLy8gdGhlIGRldmVsb3BlciBoYXMgbm90IGRlZmluZWQg
YSBjb250cm9sbGVyIGJ1dCAqaGFzKiBzdXBwbGllZCByb3V0ZSBxdWVyeSBwYXJhbXMuCisgICAg
ICAgIC8vIEdlbmVyYXRlIGEgY2xhc3MgZm9yIHRoZW0gc28gd2UgY2FuIGxhdGVyIGluc2VydCBk
ZWZhdWx0IHZhbHVlcworICAgICAgICB2YXIgZ2VuZXJhdGVkQ29udHJvbGxlckNsYXNzID0gX2Vt
YmVyUm91dGluZ1N5c3RlbUdlbmVyYXRlX2NvbnRyb2xsZXIuZ2VuZXJhdGVDb250cm9sbGVyRmFj
dG9yeShfY29udGFpbmVyT3duZXIuZ2V0T3duZXIodGhpcyksIGNvbnRyb2xsZXJOYW1lKTsKKyAg
ICAgICAgY29udHJvbGxlclByb3RvID0gZ2VuZXJhdGVkQ29udHJvbGxlckNsYXNzLnByb3RvKCk7
CisgICAgICAgIGNvbWJpbmVkUXVlcnlQYXJhbWV0ZXJDb25maWd1cmF0aW9uID0gcXVlcnlQYXJh
bWV0ZXJDb25maWd1cmF0b247CisgICAgICB9CisKKyAgICAgIHZhciBxcHMgPSBbXTsKKyAgICAg
IHZhciBtYXAgPSB7fTsKKyAgICAgIHZhciBwcm9wZXJ0eU5hbWVzID0gW107CisKKyAgICAgIGZv
ciAodmFyIHByb3BOYW1lIGluIGNvbWJpbmVkUXVlcnlQYXJhbWV0ZXJDb25maWd1cmF0aW9uKSB7
CisgICAgICAgIGlmICghY29tYmluZWRRdWVyeVBhcmFtZXRlckNvbmZpZ3VyYXRpb24uaGFzT3du
UHJvcGVydHkocHJvcE5hbWUpKSB7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyB0byBzdXBwb3J0IHRoZSBkdWJpb3VzIGZlYXR1cmUgb2YgdXNpbmcgdW5rbm93
blByb3BlcnR5CisgICAgICAgIC8vIG9uIHF1ZXJ5UGFyYW1zIGNvbmZpZ3VyYXRpb24KKyAgICAg
ICAgaWYgKHByb3BOYW1lID09PSAndW5rbm93blByb3BlcnR5JyB8fCBwcm9wTmFtZSA9PT0gJ19z
dXBlcicpIHsKKyAgICAgICAgICAvLyBwb3NzaWJsZSB0b2RvOiBpc3N1ZSBkZXByZWNhdGlvbiB3
YXJuaW5nPworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGRl
c2MgPSBjb21iaW5lZFF1ZXJ5UGFyYW1ldGVyQ29uZmlndXJhdGlvbltwcm9wTmFtZV07CisKKyAg
ICAgICAgdmFyIHNjb3BlID0gZGVzYy5zY29wZSB8fCAnbW9kZWwnOworICAgICAgICB2YXIgcGFy
dHM7CisKKyAgICAgICAgaWYgKHNjb3BlID09PSAnY29udHJvbGxlcicpIHsKKyAgICAgICAgICBw
YXJ0cyA9IFtdOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHVybEtleSA9IGRlc2MuYXMgfHwg
dGhpcy5zZXJpYWxpemVRdWVyeVBhcmFtS2V5KHByb3BOYW1lKTsKKyAgICAgICAgdmFyIGRlZmF1
bHRWYWx1ZSA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldChjb250cm9sbGVyUHJvdG8sIHBy
b3BOYW1lKTsKKworICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkZWZhdWx0VmFsdWUpKSB7Cisg
ICAgICAgICAgZGVmYXVsdFZhbHVlID0gX2VtYmVyUnVudGltZVN5c3RlbU5hdGl2ZV9hcnJheS5B
KGRlZmF1bHRWYWx1ZS5zbGljZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciB0eXBlID0g
ZGVzYy50eXBlIHx8IF9lbWJlclJ1bnRpbWVVdGlscy50eXBlT2YoZGVmYXVsdFZhbHVlKTsKKwor
ICAgICAgICB2YXIgZGVmYXVsdFZhbHVlU2VyaWFsaXplZCA9IHRoaXMuc2VyaWFsaXplUXVlcnlQ
YXJhbShkZWZhdWx0VmFsdWUsIHVybEtleSwgdHlwZSk7CisgICAgICAgIHZhciBzY29wZWRQcm9w
ZXJ0eU5hbWUgPSBjb250cm9sbGVyTmFtZSArICc6JyArIHByb3BOYW1lOworICAgICAgICB2YXIg
cXAgPSB7CisgICAgICAgICAgdW5kZWNvcmF0ZWREZWZhdWx0VmFsdWU6IF9lbWJlck1ldGFsUHJv
cGVydHlfZ2V0LmdldChjb250cm9sbGVyUHJvdG8sIHByb3BOYW1lKSwKKyAgICAgICAgICBkZWZh
dWx0VmFsdWU6IGRlZmF1bHRWYWx1ZSwKKyAgICAgICAgICBzZXJpYWxpemVkRGVmYXVsdFZhbHVl
OiBkZWZhdWx0VmFsdWVTZXJpYWxpemVkLAorICAgICAgICAgIHNlcmlhbGl6ZWRWYWx1ZTogZGVm
YXVsdFZhbHVlU2VyaWFsaXplZCwKKworICAgICAgICAgIHR5cGU6IHR5cGUsCisgICAgICAgICAg
dXJsS2V5OiB1cmxLZXksCisgICAgICAgICAgcHJvcDogcHJvcE5hbWUsCisgICAgICAgICAgc2Nv
cGVkUHJvcGVydHlOYW1lOiBzY29wZWRQcm9wZXJ0eU5hbWUsCisgICAgICAgICAgY3RybDogY29u
dHJvbGxlck5hbWUsCisgICAgICAgICAgcm91dGU6IHRoaXMsCisgICAgICAgICAgcGFydHM6IHBh
cnRzLCAvLyBwcm92aWRlZCBsYXRlciB3aGVuIHN0YXNoTmFtZXMgaXMgY2FsbGVkIGlmICdtb2Rl
bCcgc2NvcGUKKyAgICAgICAgICB2YWx1ZXM6IG51bGwsIC8vIHByb3ZpZGVkIGxhdGVyIHdoZW4g
c2V0dXAgaXMgY2FsbGVkLiBubyBpZGVhIHdoeS4KKyAgICAgICAgICBzY29wZTogc2NvcGUsCisg
ICAgICAgICAgcHJlZml4OiAnJworICAgICAgICB9OworCisgICAgICAgIG1hcFtwcm9wTmFtZV0g
PSBtYXBbdXJsS2V5XSA9IG1hcFtzY29wZWRQcm9wZXJ0eU5hbWVdID0gcXA7CisgICAgICAgIHFw
cy5wdXNoKHFwKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5wdXNoKHByb3BOYW1lKTsKKyAgICAg
IH0KKworICAgICAgcmV0dXJuIHsKKyAgICAgICAgcXBzOiBxcHMsCisgICAgICAgIG1hcDogbWFw
LAorICAgICAgICBwcm9wZXJ0eU5hbWVzOiBwcm9wZXJ0eU5hbWVzLAorICAgICAgICBzdGF0ZXM6
IHsKKyAgICAgICAgICAvKgorICAgICAgICAgICAgQ2FsbGVkIHdoZW4gYSBxdWVyeSBwYXJhbWV0
ZXIgY2hhbmdlcyBpbiB0aGUgVVJMLCB0aGlzIHJvdXRlIGNhcmVzCisgICAgICAgICAgICBhYm91
dCB0aGF0IHF1ZXJ5IHBhcmFtZXRlciwgYnV0IHRoZSByb3V0ZSBpcyBub3QgY3VycmVudGx5Cisg
ICAgICAgICAgICBpbiB0aGUgYWN0aXZlIHJvdXRlIGhpZXJhcmNoeS4KKyAgICAgICAgICAqLwor
ICAgICAgICAgIGluYWN0aXZlOiBmdW5jdGlvbiAocHJvcCwgdmFsdWUpIHsKKyAgICAgICAgICAg
IHZhciBxcCA9IG1hcFtwcm9wXTsKKyAgICAgICAgICAgIF90aGlzLl9xcENoYW5nZWQocHJvcCwg
dmFsdWUsIHFwKTsKKyAgICAgICAgICB9LAorICAgICAgICAgIC8qCisgICAgICAgICAgICBDYWxs
ZWQgd2hlbiBhIHF1ZXJ5IHBhcmFtZXRlciBjaGFuZ2VzIGluIHRoZSBVUkwsIHRoaXMgcm91dGUg
Y2FyZXMKKyAgICAgICAgICAgIGFib3V0IHRoYXQgcXVlcnkgcGFyYW1ldGVyLCBhbmQgdGhlIHJv
dXRlIGlzIGN1cnJlbnRseQorICAgICAgICAgICAgaW4gdGhlIGFjdGl2ZSByb3V0ZSBoaWVyYXJj
aHkuCisgICAgICAgICAgKi8KKyAgICAgICAgICBhY3RpdmU6IGZ1bmN0aW9uIChwcm9wLCB2YWx1
ZSkgeworICAgICAgICAgICAgdmFyIHFwID0gbWFwW3Byb3BdOworICAgICAgICAgICAgX3RoaXMu
X3FwQ2hhbmdlZChwcm9wLCB2YWx1ZSwgcXApOworICAgICAgICAgICAgcmV0dXJuIF90aGlzLl9h
Y3RpdmVRUENoYW5nZWQobWFwW3Byb3BdLCB2YWx1ZSk7CisgICAgICAgICAgfSwKKyAgICAgICAg
ICAvKgorICAgICAgICAgICAgQ2FsbGVkIHdoZW4gYSB2YWx1ZSBvZiBhIHF1ZXJ5IHBhcmFtZXRl
ciB0aGlzIHJvdXRlIGhhbmRsZXMgY2hhbmdlcyBpbiBhIGNvbnRyb2xsZXIKKyAgICAgICAgICAg
IGFuZCB0aGUgcm91dGUgaXMgY3VycmVudGx5IGluIHRoZSBhY3RpdmUgcm91dGUgaGllcmFyY2h5
LgorICAgICAgICAgICovCisgICAgICAgICAgYWxsb3dPdmVycmlkZXM6IGZ1bmN0aW9uIChwcm9w
LCB2YWx1ZSkgeworICAgICAgICAgICAgdmFyIHFwID0gbWFwW3Byb3BdOworICAgICAgICAgICAg
X3RoaXMuX3FwQ2hhbmdlZChwcm9wLCB2YWx1ZSwgcXApOworICAgICAgICAgICAgcmV0dXJuIF90
aGlzLl91cGRhdGluZ1FQQ2hhbmdlZChtYXBbcHJvcF0pOworICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgfTsKKyAgICB9KSwKKworICAgIC8qKgorICAgICAgQHByaXZhdGUKKyAgICAgICBA
cHJvcGVydHkgX25hbWVzCisgICAgKi8KKyAgICBfbmFtZXM6IG51bGwsCisKKyAgICAvKioKKyAg
ICAgIEBwcml2YXRlCisgICAgICAgQG1ldGhvZCBfc3Rhc2hOYW1lcworICAgICovCisgICAgX3N0
YXNoTmFtZXM6IGZ1bmN0aW9uIChfaGFuZGxlckluZm8sIGR5bmFtaWNQYXJlbnQpIHsKKyAgICAg
IHZhciBoYW5kbGVySW5mbyA9IF9oYW5kbGVySW5mbzsKKyAgICAgIGlmICh0aGlzLl9uYW1lcykg
eworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICB2YXIgbmFtZXMgPSB0aGlzLl9uYW1l
cyA9IGhhbmRsZXJJbmZvLl9uYW1lczsKKworICAgICAgaWYgKCFuYW1lcy5sZW5ndGgpIHsKKyAg
ICAgICAgaGFuZGxlckluZm8gPSBkeW5hbWljUGFyZW50OworICAgICAgICBuYW1lcyA9IGhhbmRs
ZXJJbmZvICYmIGhhbmRsZXJJbmZvLl9uYW1lcyB8fCBbXTsKKyAgICAgIH0KKworICAgICAgdmFy
IHFwcyA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnX3FwLnFwcycpOworICAg
ICAgdmFyIGxlbiA9IHFwcy5sZW5ndGg7CisKKyAgICAgIHZhciBuYW1lUGF0aHMgPSBuZXcgQXJy
YXkobmFtZXMubGVuZ3RoKTsKKyAgICAgIGZvciAodmFyIGEgPSAwLCBubGVuID0gbmFtZXMubGVu
Z3RoOyBhIDwgbmxlbjsgKythKSB7CisgICAgICAgIG5hbWVQYXRoc1thXSA9IGhhbmRsZXJJbmZv
Lm5hbWUgKyAnLicgKyBuYW1lc1thXTsKKyAgICAgIH0KKworICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBsZW47ICsraSkgeworICAgICAgICB2YXIgcXAgPSBxcHNbaV07CisgICAgICAgIGlmIChx
cC5zY29wZSA9PT0gJ21vZGVsJykgeworICAgICAgICAgIHFwLnBhcnRzID0gbmFtZVBhdGhzOwor
ICAgICAgICB9CisgICAgICAgIHFwLnByZWZpeCA9IHFwLmN0cmw7CisgICAgICB9CisgICAgfSwK
KworICAgIC8qKgorICAgICAgQHByaXZhdGUKKyAgICAgICBAcHJvcGVydHkgX2FjdGl2ZVFQQ2hh
bmdlZAorICAgICovCisgICAgX2FjdGl2ZVFQQ2hhbmdlZDogZnVuY3Rpb24gKHFwLCB2YWx1ZSkg
eworICAgICAgdmFyIHJvdXRlciA9IHRoaXMucm91dGVyOworICAgICAgcm91dGVyLl9hY3RpdmVR
UENoYW5nZWQocXAuc2NvcGVkUHJvcGVydHlOYW1lLCB2YWx1ZSk7CisgICAgfSwKKworICAgIC8q
KgorICAgICAgQHByaXZhdGUKKyAgICAgIEBtZXRob2QgX3VwZGF0aW5nUVBDaGFuZ2VkCisgICAg
Ki8KKyAgICBfdXBkYXRpbmdRUENoYW5nZWQ6IGZ1bmN0aW9uIChxcCkgeworICAgICAgdmFyIHJv
dXRlciA9IHRoaXMucm91dGVyOworICAgICAgcm91dGVyLl91cGRhdGluZ1FQQ2hhbmdlZChxcC51
cmxLZXkpOworICAgIH0sCisKKyAgICBtZXJnZWRQcm9wZXJ0aWVzOiBbJ3F1ZXJ5UGFyYW1zJ10s
CisKKyAgICAvKioKKyAgICAgIFJldHJpZXZlcyBwYXJhbWV0ZXJzLCBmb3IgY3VycmVudCByb3V0
ZSB1c2luZyB0aGUgc3RhdGUucGFyYW1zCisgICAgICB2YXJpYWJsZSBhbmQgZ2V0UXVlcnlQYXJh
bXNGb3IsIHVzaW5nIHRoZSBzdXBwbGllZCByb3V0ZU5hbWUuCisgICAgICAgQG1ldGhvZCBwYXJh
bXNGb3IKKyAgICAgIEBwYXJhbSB7U3RyaW5nfSBuYW1lCisgICAgICBAcHVibGljCisgICAgKi8K
KyAgICBwYXJhbXNGb3I6IGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICB2YXIgcm91dGUgPSBfY29u
dGFpbmVyT3duZXIuZ2V0T3duZXIodGhpcykubG9va3VwKCdyb3V0ZTonICsgbmFtZSk7CisKKyAg
ICAgIGlmICghcm91dGUpIHsKKyAgICAgICAgcmV0dXJuIHt9OworICAgICAgfQorCisgICAgICB2
YXIgdHJhbnNpdGlvbiA9IHRoaXMucm91dGVyLnJvdXRlci5hY3RpdmVUcmFuc2l0aW9uOworICAg
ICAgdmFyIHN0YXRlID0gdHJhbnNpdGlvbiA/IHRyYW5zaXRpb24uc3RhdGUgOiB0aGlzLnJvdXRl
ci5yb3V0ZXIuc3RhdGU7CisKKyAgICAgIHZhciBwYXJhbXMgPSB7fTsKKyAgICAgIF9lbWJlck1l
dGFsQXNzaWduLmRlZmF1bHQocGFyYW1zLCBzdGF0ZS5wYXJhbXNbbmFtZV0pOworICAgICAgX2Vt
YmVyTWV0YWxBc3NpZ24uZGVmYXVsdChwYXJhbXMsIGdldFF1ZXJ5UGFyYW1zRm9yKHJvdXRlLCBz
dGF0ZSkpOworCisgICAgICByZXR1cm4gcGFyYW1zOworICAgIH0sCisKKyAgICAvKioKKyAgICAg
IFNlcmlhbGl6ZXMgdGhlIHF1ZXJ5IHBhcmFtZXRlciBrZXkKKyAgICAgICBAbWV0aG9kIHNlcmlh
bGl6ZVF1ZXJ5UGFyYW1LZXkKKyAgICAgIEBwYXJhbSB7U3RyaW5nfSBjb250cm9sbGVyUHJvcGVy
dHlOYW1lCisgICAgICBAcHJpdmF0ZQorICAgICovCisgICAgc2VyaWFsaXplUXVlcnlQYXJhbUtl
eTogZnVuY3Rpb24gKGNvbnRyb2xsZXJQcm9wZXJ0eU5hbWUpIHsKKyAgICAgIHJldHVybiBjb250
cm9sbGVyUHJvcGVydHlOYW1lOworICAgIH0sCisKKyAgICAvKioKKyAgICAgIFNlcmlhbGl6ZXMg
dmFsdWUgb2YgdGhlIHF1ZXJ5IHBhcmFtZXRlciBiYXNlZCBvbiBkZWZhdWx0VmFsdWVUeXBlCisg
ICAgICAgQG1ldGhvZCBzZXJpYWxpemVRdWVyeVBhcmFtCisgICAgICBAcGFyYW0ge09iamVjdH0g
dmFsdWUKKyAgICAgIEBwYXJhbSB7U3RyaW5nfSB1cmxLZXkKKyAgICAgIEBwYXJhbSB7U3RyaW5n
fSBkZWZhdWx0VmFsdWVUeXBlCisgICAgICBAcHJpdmF0ZQorICAgICovCisgICAgc2VyaWFsaXpl
UXVlcnlQYXJhbTogZnVuY3Rpb24gKHZhbHVlLCB1cmxLZXksIGRlZmF1bHRWYWx1ZVR5cGUpIHsK
KyAgICAgIC8vIHVybEtleSBpc24ndCB1c2VkIGhlcmUsIGJ1dCBhbnlvbmUgb3ZlcnJpZGluZwor
ICAgICAgLy8gY2FuIHVzZSBpdCB0byBwcm92aWRlIHNlcmlhbGl6YXRpb24gc3BlY2lmaWMKKyAg
ICAgIC8vIHRvIGEgY2VydGFpbiBxdWVyeSBwYXJhbS4KKyAgICAgIGlmIChkZWZhdWx0VmFsdWVU
eXBlID09PSAnYXJyYXknKSB7CisgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7
CisgICAgICB9CisgICAgICByZXR1cm4gJycgKyB2YWx1ZTsKKyAgICB9LAorCisgICAgLyoqCisg
ICAgICBEZXNlcmlhbGl6ZXMgdmFsdWUgb2YgdGhlIHF1ZXJ5IHBhcmFtZXRlciBiYXNlZCBvbiBk
ZWZhdWx0VmFsdWVUeXBlCisgICAgICAgQG1ldGhvZCBkZXNlcmlhbGl6ZVF1ZXJ5UGFyYW0KKyAg
ICAgIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZQorICAgICAgQHBhcmFtIHtTdHJpbmd9IHVybEtleQor
ICAgICAgQHBhcmFtIHtTdHJpbmd9IGRlZmF1bHRWYWx1ZVR5cGUKKyAgICAgIEBwcml2YXRlCisg
ICAgKi8KKyAgICBkZXNlcmlhbGl6ZVF1ZXJ5UGFyYW06IGZ1bmN0aW9uICh2YWx1ZSwgdXJsS2V5
LCBkZWZhdWx0VmFsdWVUeXBlKSB7CisgICAgICAvLyB1cmxLZXkgaXNuJ3QgdXNlZCBoZXJlLCBi
dXQgYW55b25lIG92ZXJyaWRpbmcKKyAgICAgIC8vIGNhbiB1c2UgaXQgdG8gcHJvdmlkZSBkZXNl
cmlhbGl6YXRpb24gc3BlY2lmaWMKKyAgICAgIC8vIHRvIGEgY2VydGFpbiBxdWVyeSBwYXJhbS4K
KworICAgICAgLy8gVXNlIHRoZSBkZWZhdWx0VmFsdWVUeXBlIG9mIHRoZSBkZWZhdWx0IHZhbHVl
ICh0aGUgaW5pdGlhbCB2YWx1ZSBhc3NpZ25lZCB0byBhCisgICAgICAvLyBjb250cm9sbGVyIHF1
ZXJ5IHBhcmFtIHByb3BlcnR5KSwgdG8gaW50ZWxsaWdlbnRseSBkZXNlcmlhbGl6ZSBhbmQgY2Fz
dC4KKyAgICAgIGlmIChkZWZhdWx0VmFsdWVUeXBlID09PSAnYm9vbGVhbicpIHsKKyAgICAgICAg
cmV0dXJuIHZhbHVlID09PSAndHJ1ZScgPyB0cnVlIDogZmFsc2U7CisgICAgICB9IGVsc2UgaWYg
KGRlZmF1bHRWYWx1ZVR5cGUgPT09ICdudW1iZXInKSB7CisgICAgICAgIHJldHVybiBOdW1iZXIo
dmFsdWUpLnZhbHVlT2YoKTsKKyAgICAgIH0gZWxzZSBpZiAoZGVmYXVsdFZhbHVlVHlwZSA9PT0g
J2FycmF5JykgeworICAgICAgICByZXR1cm4gX2VtYmVyUnVudGltZVN5c3RlbU5hdGl2ZV9hcnJh
eS5BKEpTT04ucGFyc2UodmFsdWUpKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiB2YWx1ZTsKKyAg
ICB9LAorCisgICAgLyoqCisgICAgICBAcHJpdmF0ZQorICAgICAgIEBwcm9wZXJ0eSBfb3B0aW9u
c0ZvclF1ZXJ5UGFyYW0KKyAgICAqLworICAgIF9vcHRpb25zRm9yUXVlcnlQYXJhbTogZnVuY3Rp
b24gKHFwKSB7CisgICAgICByZXR1cm4gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMs
ICdxdWVyeVBhcmFtcy4nICsgcXAudXJsS2V5KSB8fCBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5n
ZXQodGhpcywgJ3F1ZXJ5UGFyYW1zLicgKyBxcC5wcm9wKSB8fCB7fTsKKyAgICB9LAorCisgICAg
LyoqCisgICAgICBBIGhvb2sgeW91IGNhbiB1c2UgdG8gcmVzZXQgY29udHJvbGxlciB2YWx1ZXMg
ZWl0aGVyIHdoZW4gdGhlIG1vZGVsCisgICAgICBjaGFuZ2VzIG9yIHRoZSByb3V0ZSBpcyBleGl0
aW5nLgorICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgIEFwcC5BcnRpY2xlc1JvdXRlID0gRW1i
ZXIuUm91dGUuZXh0ZW5kKHsKKyAgICAgICAgLy8gLi4uCisgICAgICAgICByZXNldENvbnRyb2xs
ZXI6IGZ1bmN0aW9uKGNvbnRyb2xsZXIsIGlzRXhpdGluZywgdHJhbnNpdGlvbikgeworICAgICAg
ICAgIGlmIChpc0V4aXRpbmcpIHsKKyAgICAgICAgICAgIGNvbnRyb2xsZXIuc2V0KCdwYWdlJywg
MSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9KTsKKyAgICAgIGBgYAorICAgICAg
IEBtZXRob2QgcmVzZXRDb250cm9sbGVyCisgICAgICBAcGFyYW0ge0NvbnRyb2xsZXJ9IGNvbnRy
b2xsZXIgaW5zdGFuY2UKKyAgICAgIEBwYXJhbSB7Qm9vbGVhbn0gaXNFeGl0aW5nCisgICAgICBA
cGFyYW0ge09iamVjdH0gdHJhbnNpdGlvbgorICAgICAgQHNpbmNlIDEuNy4wCisgICAgICBAcHVi
bGljCisgICAgKi8KKyAgICByZXNldENvbnRyb2xsZXI6IEssCisKKyAgICAvKioKKyAgICAgIEBw
cml2YXRlCisgICAgICAgQG1ldGhvZCBleGl0CisgICAgKi8KKyAgICBleGl0OiBmdW5jdGlvbiAo
KSB7CisgICAgICB0aGlzLmRlYWN0aXZhdGUoKTsKKyAgICAgIHRoaXMudHJpZ2dlcignZGVhY3Rp
dmF0ZScpOworICAgICAgdGhpcy50ZWFyZG93blZpZXdzKCk7CisgICAgfSwKKworICAgIC8qKgor
ICAgICAgQHByaXZhdGUKKyAgICAgICBAbWV0aG9kIF9yZXNldAorICAgICAgQHNpbmNlIDEuNy4w
CisgICAgKi8KKyAgICBfcmVzZXQ6IGZ1bmN0aW9uIChpc0V4aXRpbmcsIHRyYW5zaXRpb24pIHsK
KyAgICAgIHZhciBjb250cm9sbGVyID0gdGhpcy5jb250cm9sbGVyOworICAgICAgY29udHJvbGxl
ci5fcXBEZWxlZ2F0ZSA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnX3FwLnN0
YXRlcy5pbmFjdGl2ZScpOworCisgICAgICB0aGlzLnJlc2V0Q29udHJvbGxlcihjb250cm9sbGVy
LCBpc0V4aXRpbmcsIHRyYW5zaXRpb24pOworICAgIH0sCisKKyAgICAvKioKKyAgICAgIEBwcml2
YXRlCisgICAgICAgQG1ldGhvZCBlbnRlcgorICAgICovCisgICAgZW50ZXI6IGZ1bmN0aW9uICgp
IHsKKyAgICAgIHRoaXMuY29ubmVjdGlvbnMgPSBbXTsKKyAgICAgIHRoaXMuYWN0aXZhdGUoKTsK
KyAgICAgIHRoaXMudHJpZ2dlcignYWN0aXZhdGUnKTsKKyAgICB9LAorCisgICAgLyoqCisgICAg
ICBUaGUgbmFtZSBvZiB0aGUgdmlldyB0byB1c2UgYnkgZGVmYXVsdCB3aGVuIHJlbmRlcmluZyB0
aGlzIHJvdXRlcyB0ZW1wbGF0ZS4KKyAgICAgICBXaGVuIHJlbmRlcmluZyBhIHRlbXBsYXRlLCB0
aGUgcm91dGUgd2lsbCwgYnkgZGVmYXVsdCwgZGV0ZXJtaW5lIHRoZQorICAgICAgdGVtcGxhdGUg
YW5kIHZpZXcgdG8gdXNlIGZyb20gdGhlIG5hbWUgb2YgdGhlIHJvdXRlIGl0c2VsZi4gSWYgeW91
IG5lZWQgdG8KKyAgICAgIGRlZmluZSBhIHNwZWNpZmljIHZpZXcsIHNldCB0aGlzIHByb3BlcnR5
LgorICAgICAgIFRoaXMgaXMgdXNlZnVsIHdoZW4gbXVsdGlwbGUgcm91dGVzIHdvdWxkIGJlbmVm
aXQgZnJvbSB1c2luZyB0aGUgc2FtZSB2aWV3CisgICAgICBiZWNhdXNlIGl0IGRvZXNuJ3QgcmVx
dWlyZSBhIGN1c3RvbSBgcmVuZGVyVGVtcGxhdGVgIG1ldGhvZC4gRm9yIGV4YW1wbGUsCisgICAg
ICB0aGUgZm9sbG93aW5nIHJvdXRlcyB3aWxsIGFsbCByZW5kZXIgdXNpbmcgdGhlIGBBcHAuUG9z
dHNMaXN0Vmlld2AgdmlldzoKKyAgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICB2YXIgUG9zdHNM
aXN0ID0gRW1iZXIuUm91dGUuZXh0ZW5kKHsKKyAgICAgICAgdmlld05hbWU6ICdwb3N0c0xpc3Qn
CisgICAgICB9KTsKKyAgICAgICBBcHAuUG9zdHNJbmRleFJvdXRlID0gUG9zdHNMaXN0LmV4dGVu
ZCgpOworICAgICAgQXBwLlBvc3RzQXJjaGl2ZWRSb3V0ZSA9IFBvc3RzTGlzdC5leHRlbmQoKTsK
KyAgICAgIGBgYAorICAgICAgIEBwcm9wZXJ0eSB2aWV3TmFtZQorICAgICAgQHR5cGUgU3RyaW5n
CisgICAgICBAZGVmYXVsdCBudWxsCisgICAgICBAc2luY2UgMS40LjAKKyAgICAgIEBwdWJsaWMK
KyAgICAqLworICAgIHZpZXdOYW1lOiBudWxsLAorCisgICAgLyoqCisgICAgICBUaGUgbmFtZSBv
ZiB0aGUgdGVtcGxhdGUgdG8gdXNlIGJ5IGRlZmF1bHQgd2hlbiByZW5kZXJpbmcgdGhpcyByb3V0
ZXMKKyAgICAgIHRlbXBsYXRlLgorICAgICAgIFRoaXMgaXMgc2ltaWxhciB3aXRoIGB2aWV3TmFt
ZWAsIGJ1dCBpcyB1c2VmdWwgd2hlbiB5b3UganVzdCB3YW50IGEgY3VzdG9tCisgICAgICB0ZW1w
bGF0ZSB3aXRob3V0IGEgdmlldy4KKyAgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICB2YXIgUG9z
dHNMaXN0ID0gRW1iZXIuUm91dGUuZXh0ZW5kKHsKKyAgICAgICAgdGVtcGxhdGVOYW1lOiAncG9z
dHMvbGlzdCcKKyAgICAgIH0pOworICAgICAgIEFwcC5Qb3N0c0luZGV4Um91dGUgPSBQb3N0c0xp
c3QuZXh0ZW5kKCk7CisgICAgICBBcHAuUG9zdHNBcmNoaXZlZFJvdXRlID0gUG9zdHNMaXN0LmV4
dGVuZCgpOworICAgICAgYGBgCisgICAgICAgQHByb3BlcnR5IHRlbXBsYXRlTmFtZQorICAgICAg
QHR5cGUgU3RyaW5nCisgICAgICBAZGVmYXVsdCBudWxsCisgICAgICBAc2luY2UgMS40LjAKKyAg
ICAgIEBwdWJsaWMKKyAgICAqLworICAgIHRlbXBsYXRlTmFtZTogbnVsbCwKKworICAgIC8qKgor
ICAgICAgVGhlIG5hbWUgb2YgdGhlIGNvbnRyb2xsZXIgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBy
b3V0ZS4KKyAgICAgICBCeSBkZWZhdWx0LCBFbWJlciB3aWxsIGxvb2t1cCBhIHJvdXRlJ3MgY29u
dHJvbGxlciB0aGF0IG1hdGNoZXMgdGhlIG5hbWUKKyAgICAgIG9mIHRoZSByb3V0ZSAoaS5lLiBg
QXBwLlBvc3RDb250cm9sbGVyYCBmb3IgYEFwcC5Qb3N0Um91dGVgKS4gSG93ZXZlciwKKyAgICAg
IGlmIHlvdSB3b3VsZCBsaWtlIHRvIGRlZmluZSBhIHNwZWNpZmljIGNvbnRyb2xsZXIgdG8gdXNl
LCB5b3UgY2FuIGRvIHNvCisgICAgICB1c2luZyB0aGlzIHByb3BlcnR5LgorICAgICAgIFRoaXMg
aXMgdXNlZnVsIGluIG1hbnkgd2F5cywgYXMgdGhlIGNvbnRyb2xsZXIgc3BlY2lmaWVkIHdpbGwg
YmU6CisgICAgICAgKiBwYXNzZWQgdG8gdGhlIGBzZXR1cENvbnRyb2xsZXJgIG1ldGhvZC4KKyAg
ICAgICogdXNlZCBhcyB0aGUgY29udHJvbGxlciBmb3IgdGhlIHZpZXcgYmVpbmcgcmVuZGVyZWQg
YnkgdGhlIHJvdXRlLgorICAgICAgKiByZXR1cm5lZCBmcm9tIGEgY2FsbCB0byBgY29udHJvbGxl
ckZvcmAgZm9yIHRoZSByb3V0ZS4KKyAgICAgICBAcHJvcGVydHkgY29udHJvbGxlck5hbWUKKyAg
ICAgIEB0eXBlIFN0cmluZworICAgICAgQGRlZmF1bHQgbnVsbAorICAgICAgQHNpbmNlIDEuNC4w
CisgICAgICBAcHVibGljCisgICAgKi8KKyAgICBjb250cm9sbGVyTmFtZTogbnVsbCwKKworICAg
IC8qKgorICAgICAgVGhlIGB3aWxsVHJhbnNpdGlvbmAgYWN0aW9uIGlzIGZpcmVkIGF0IHRoZSBi
ZWdpbm5pbmcgb2YgYW55CisgICAgICBhdHRlbXB0ZWQgdHJhbnNpdGlvbiB3aXRoIGEgYFRyYW5z
aXRpb25gIG9iamVjdCBhcyB0aGUgc29sZQorICAgICAgYXJndW1lbnQuIFRoaXMgYWN0aW9uIGNh
biBiZSB1c2VkIGZvciBhYm9ydGluZywgcmVkaXJlY3RpbmcsCisgICAgICBvciBkZWNvcmF0aW5n
IHRoZSB0cmFuc2l0aW9uIGZyb20gdGhlIGN1cnJlbnRseSBhY3RpdmUgcm91dGVzLgorICAgICAg
IEEgZ29vZCBleGFtcGxlIGlzIHByZXZlbnRpbmcgbmF2aWdhdGlvbiB3aGVuIGEgZm9ybSBpcwor
ICAgICAgaGFsZi1maWxsZWQgb3V0OgorICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgIEFwcC5D
b250YWN0Rm9ybVJvdXRlID0gRW1iZXIuUm91dGUuZXh0ZW5kKHsKKyAgICAgICAgYWN0aW9uczog
eworICAgICAgICAgIHdpbGxUcmFuc2l0aW9uOiBmdW5jdGlvbih0cmFuc2l0aW9uKSB7CisgICAg
ICAgICAgICBpZiAodGhpcy5jb250cm9sbGVyLmdldCgndXNlckhhc0VudGVyZWREYXRhJykpIHsK
KyAgICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyLmRpc3BsYXlOYXZpZ2F0aW9uQ29uZmlybSgp
OworICAgICAgICAgICAgICB0cmFuc2l0aW9uLmFib3J0KCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICB9KTsKKyAgICAgIGBgYAorICAgICAgIFlvdSBjYW4g
YWxzbyByZWRpcmVjdCBlbHNld2hlcmUgYnkgY2FsbGluZworICAgICAgYHRoaXMudHJhbnNpdGlv
blRvKCdlbHNld2hlcmUnKWAgZnJvbSB3aXRoaW4gYHdpbGxUcmFuc2l0aW9uYC4KKyAgICAgIE5v
dGUgdGhhdCBgd2lsbFRyYW5zaXRpb25gIHdpbGwgbm90IGJlIGZpcmVkIGZvciB0aGUKKyAgICAg
IHJlZGlyZWN0aW5nIGB0cmFuc2l0aW9uVG9gLCBzaW5jZSBgd2lsbFRyYW5zaXRpb25gIGRvZXNu
J3QKKyAgICAgIGZpcmUgd2hlbiB0aGVyZSBpcyBhbHJlYWR5IGEgdHJhbnNpdGlvbiB1bmRlcndh
eS4gSWYgeW91IHdhbnQKKyAgICAgIHN1YnNlcXVlbnQgYHdpbGxUcmFuc2l0aW9uYCBhY3Rpb25z
IHRvIGZpcmUgZm9yIHRoZSByZWRpcmVjdGluZworICAgICAgdHJhbnNpdGlvbiwgeW91IG11c3Qg
Zmlyc3QgZXhwbGljaXRseSBjYWxsCisgICAgICBgdHJhbnNpdGlvbi5hYm9ydCgpYC4KKyAgICAg
ICBUbyBhbGxvdyB0aGUgYHdpbGxUcmFuc2l0aW9uYCBldmVudCB0byBjb250aW51ZSBidWJibGlu
ZyB0byB0aGUgcGFyZW50CisgICAgICByb3V0ZSwgdXNlIGByZXR1cm4gdHJ1ZTtgLiBXaGVuIHRo
ZSBgd2lsbFRyYW5zaXRpb25gIG1ldGhvZCBoYXMgYQorICAgICAgcmV0dXJuIHZhbHVlIG9mIGB0
cnVlYCB0aGVuIHRoZSBwYXJlbnQgcm91dGUncyBgd2lsbFRyYW5zaXRpb25gIG1ldGhvZAorICAg
ICAgd2lsbCBiZSBmaXJlZCwgZW5hYmxpbmcgImJ1YmJsaW5nIiBiZWhhdmlvciBmb3IgdGhlIGV2
ZW50LgorICAgICAgIEBldmVudCB3aWxsVHJhbnNpdGlvbgorICAgICAgQHBhcmFtIHtUcmFuc2l0
aW9ufSB0cmFuc2l0aW9uCisgICAgICBAcHVibGljCisgICAgKi8KKworICAgIC8qKgorICAgICAg
VGhlIGBkaWRUcmFuc2l0aW9uYCBhY3Rpb24gaXMgZmlyZWQgYWZ0ZXIgYSB0cmFuc2l0aW9uIGhh
cworICAgICAgc3VjY2Vzc2Z1bGx5IGJlZW4gY29tcGxldGVkLiBUaGlzIG9jY3VycyBhZnRlciB0
aGUgbm9ybWFsIG1vZGVsCisgICAgICBob29rcyAoYGJlZm9yZU1vZGVsYCwgYG1vZGVsYCwgYGFm
dGVyTW9kZWxgLCBgc2V0dXBDb250cm9sbGVyYCkKKyAgICAgIGhhdmUgcmVzb2x2ZWQuIFRoZSBg
ZGlkVHJhbnNpdGlvbmAgYWN0aW9uIGhhcyBubyBhcmd1bWVudHMsCisgICAgICBob3dldmVyLCBp
dCBjYW4gYmUgdXNlZnVsIGZvciB0cmFja2luZyBwYWdlIHZpZXdzIG9yIHJlc2V0dGluZworICAg
ICAgc3RhdGUgb24gdGhlIGNvbnRyb2xsZXIuCisgICAgICAgYGBgamF2YXNjcmlwdAorICAgICAg
QXBwLkxvZ2luUm91dGUgPSBFbWJlci5Sb3V0ZS5leHRlbmQoeworICAgICAgICBhY3Rpb25zOiB7
CisgICAgICAgICAgZGlkVHJhbnNpdGlvbjogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB0aGlz
LmNvbnRyb2xsZXIuZ2V0KCdlcnJvcnMuYmFzZScpLmNsZWFyKCk7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsgLy8gQnViYmxlIHRoZSBkaWRUcmFuc2l0aW9uIGV2ZW50CisgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICB9KTsKKyAgICAgIGBgYAorICAgICAgIEBldmVudCBkaWRUcmFuc2l0
aW9uCisgICAgICBAc2luY2UgMS4yLjAKKyAgICAgIEBwdWJsaWMKKyAgICAqLworCisgICAgLyoq
CisgICAgICBUaGUgYGxvYWRpbmdgIGFjdGlvbiBpcyBmaXJlZCBvbiB0aGUgcm91dGUgd2hlbiBh
IHJvdXRlJ3MgYG1vZGVsYAorICAgICAgaG9vayByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGlzIG5v
dCBhbHJlYWR5IHJlc29sdmVkLiBUaGUgY3VycmVudAorICAgICAgYFRyYW5zaXRpb25gIG9iamVj
dCBpcyB0aGUgZmlyc3QgcGFyYW1ldGVyIGFuZCB0aGUgcm91dGUgdGhhdAorICAgICAgdHJpZ2dl
cmVkIHRoZSBsb2FkaW5nIGV2ZW50IGlzIHRoZSBzZWNvbmQgcGFyYW1ldGVyLgorICAgICAgIGBg
YGphdmFzY3JpcHQKKyAgICAgIEFwcC5BcHBsaWNhdGlvblJvdXRlID0gRW1iZXIuUm91dGUuZXh0
ZW5kKHsKKyAgICAgICAgYWN0aW9uczogeworICAgICAgICAgIGxvYWRpbmc6IGZ1bmN0aW9uKHRy
YW5zaXRpb24sIHJvdXRlKSB7CisgICAgICAgICAgICBsZXQgY29udHJvbGxlciA9IHRoaXMuY29u
dHJvbGxlckZvcignZm9vJyk7CisgICAgICAgICAgICBjb250cm9sbGVyLnNldCgnY3VycmVudGx5
TG9hZGluZycsIHRydWUpOworICAgICAgICAgICAgIHRyYW5zaXRpb24uZmluYWxseShmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgICAgY29udHJvbGxlci5zZXQoJ2N1cnJlbnRseUxvYWRpbmcnLCBm
YWxzZSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0p
OworICAgICAgYGBgCisgICAgICAgQGV2ZW50IGxvYWRpbmcKKyAgICAgIEBwYXJhbSB7VHJhbnNp
dGlvbn0gdHJhbnNpdGlvbgorICAgICAgQHBhcmFtIHtFbWJlci5Sb3V0ZX0gcm91dGUgVGhlIHJv
dXRlIHRoYXQgdHJpZ2dlcmVkIHRoZSBsb2FkaW5nIGV2ZW50CisgICAgICBAc2luY2UgMS4yLjAK
KyAgICAgIEBwdWJsaWMKKyAgICAqLworCisgICAgLyoqCisgICAgICBXaGVuIGF0dGVtcHRpbmcg
dG8gdHJhbnNpdGlvbiBpbnRvIGEgcm91dGUsIGFueSBvZiB0aGUgaG9va3MKKyAgICAgIG1heSBy
ZXR1cm4gYSBwcm9taXNlIHRoYXQgcmVqZWN0cywgYXQgd2hpY2ggcG9pbnQgYW4gYGVycm9yYAor
ICAgICAgYWN0aW9uIHdpbGwgYmUgZmlyZWQgb24gdGhlIHBhcnRpYWxseS1lbnRlcmVkIHJvdXRl
cywgYWxsb3dpbmcKKyAgICAgIGZvciBwZXItcm91dGUgZXJyb3IgaGFuZGxpbmcgbG9naWMsIG9y
IHNoYXJlZCBlcnJvciBoYW5kbGluZworICAgICAgbG9naWMgZGVmaW5lZCBvbiBhIHBhcmVudCBy
b3V0ZS4KKyAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgYW4gZXJyb3IgaGFuZGxlciB0aGF0
IHdpbGwgYmUgaW52b2tlZAorICAgICAgZm9yIHJlamVjdGVkIHByb21pc2VzIGZyb20gdGhlIHZh
cmlvdXMgaG9va3Mgb24gdGhlIHJvdXRlLAorICAgICAgYXMgd2VsbCBhcyBhbnkgdW5oYW5kbGVk
IGVycm9ycyBmcm9tIGNoaWxkIHJvdXRlczoKKyAgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICBB
cHAuQWRtaW5Sb3V0ZSA9IEVtYmVyLlJvdXRlLmV4dGVuZCh7CisgICAgICAgIGJlZm9yZU1vZGVs
OiBmdW5jdGlvbigpIHsKKyAgICAgICAgICByZXR1cm4gRW1iZXIuUlNWUC5yZWplY3QoJ2JhZCB0
aGluZ3MhJyk7CisgICAgICAgIH0sCisgICAgICAgICBhY3Rpb25zOiB7CisgICAgICAgICAgZXJy
b3I6IGZ1bmN0aW9uKGVycm9yLCB0cmFuc2l0aW9uKSB7CisgICAgICAgICAgICAvLyBBc3N1bWlu
ZyB3ZSBnb3QgaGVyZSBkdWUgdG8gdGhlIGVycm9yIGluIGBiZWZvcmVNb2RlbGAsCisgICAgICAg
ICAgICAvLyB3ZSBjYW4gZXhwZWN0IHRoYXQgZXJyb3IgPT09ICJiYWQgdGhpbmdzISIsCisgICAg
ICAgICAgICAvLyBidXQgYSBwcm9taXNlIG1vZGVsIHJlamVjdGluZyB3b3VsZCBhbHNvCisgICAg
ICAgICAgICAvLyBjYWxsIHRoaXMgaG9vaywgYXMgd291bGQgYW55IGVycm9ycyBlbmNvdW50ZXJl
ZAorICAgICAgICAgICAgLy8gaW4gYGFmdGVyTW9kZWxgLgorICAgICAgICAgICAgIC8vIFRoZSBg
ZXJyb3JgIGhvb2sgaXMgYWxzbyBwcm92aWRlZCB0aGUgZmFpbGVkCisgICAgICAgICAgICAvLyBg
dHJhbnNpdGlvbmAsIHdoaWNoIGNhbiBiZSBzdG9yZWQgYW5kIGxhdGVyCisgICAgICAgICAgICAv
LyBgLnJldHJ5KClgZCBpZiBkZXNpcmVkLgorICAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRv
KCdsb2dpbicpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSk7CisgICAgICBgYGAK
KyAgICAgICBgZXJyb3JgIGFjdGlvbnMgdGhhdCBidWJibGUgdXAgYWxsIHRoZSB3YXkgdG8gYEFw
cGxpY2F0aW9uUm91dGVgCisgICAgICB3aWxsIGZpcmUgYSBkZWZhdWx0IGVycm9yIGhhbmRsZXIg
dGhhdCBsb2dzIHRoZSBlcnJvci4gWW91IGNhbgorICAgICAgc3BlY2lmeSB5b3VyIG93biBnbG9i
YWwgZGVmYXVsdCBlcnJvciBoYW5kbGVyIGJ5IG92ZXJyaWRpbmcgdGhlCisgICAgICBgZXJyb3Jg
IGhhbmRsZXIgb24gYEFwcGxpY2F0aW9uUm91dGVgOgorICAgICAgIGBgYGphdmFzY3JpcHQKKyAg
ICAgIEFwcC5BcHBsaWNhdGlvblJvdXRlID0gRW1iZXIuUm91dGUuZXh0ZW5kKHsKKyAgICAgICAg
YWN0aW9uczogeworICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihlcnJvciwgdHJhbnNpdGlvbikg
eworICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyRm9yKCdiYW5uZXInKS5kaXNwbGF5RXJyb3Io
ZXJyb3IubWVzc2FnZSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9KTsKKyAgICAg
IGBgYAorICAgICAgQGV2ZW50IGVycm9yCisgICAgICBAcGFyYW0ge0Vycm9yfSBlcnJvcgorICAg
ICAgQHBhcmFtIHtUcmFuc2l0aW9ufSB0cmFuc2l0aW9uCisgICAgICBAcHVibGljCisgICAgKi8K
KworICAgIC8qKgorICAgICAgVGhpcyBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgcm91dGVy
IGVudGVycyB0aGUgcm91dGUuIEl0IGlzCisgICAgICBub3QgZXhlY3V0ZWQgd2hlbiB0aGUgbW9k
ZWwgZm9yIHRoZSByb3V0ZSBjaGFuZ2VzLgorICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgIEFw
cC5BcHBsaWNhdGlvblJvdXRlID0gRW1iZXIuUm91dGUuZXh0ZW5kKHsKKyAgICAgICAgY29sbGVj
dEFuYWx5dGljczogZnVuY3Rpb24oKXsKKyAgICAgICAgICBjb2xsZWN0QW5hbHl0aWNzKCk7Cisg
ICAgICAgIH0ub24oJ2FjdGl2YXRlJykKKyAgICAgIH0pOworICAgICAgYGBgCisgICAgICAgQGV2
ZW50IGFjdGl2YXRlCisgICAgICBAc2luY2UgMS45LjAKKyAgICAgIEBwdWJsaWMKKyAgICAqLwor
CisgICAgLyoqCisgICAgICBUaGlzIGV2ZW50IGlzIHRyaWdnZXJlZCB3aGVuIHRoZSByb3V0ZXIg
Y29tcGxldGVseSBleGl0cyB0aGlzCisgICAgICByb3V0ZS4gSXQgaXMgbm90IGV4ZWN1dGVkIHdo
ZW4gdGhlIG1vZGVsIGZvciB0aGUgcm91dGUgY2hhbmdlcy4KKyAgICAgICBgYGBqYXZhc2NyaXB0
CisgICAgICBBcHAuSW5kZXhSb3V0ZSA9IEVtYmVyLlJvdXRlLmV4dGVuZCh7CisgICAgICAgIHRy
YWNrUGFnZUxlYXZlQW5hbHl0aWNzOiBmdW5jdGlvbigpeworICAgICAgICAgIHRyYWNrUGFnZUxl
YXZlQW5hbHl0aWNzKCk7CisgICAgICAgIH0ub24oJ2RlYWN0aXZhdGUnKQorICAgICAgfSk7Cisg
ICAgICBgYGAKKyAgICAgICBAZXZlbnQgZGVhY3RpdmF0ZQorICAgICAgQHNpbmNlIDEuOS4wCisg
ICAgICBAcHVibGljCisgICAgKi8KKworICAgIC8qKgorICAgICAgVGhlIGNvbnRyb2xsZXIgYXNz
b2NpYXRlZCB3aXRoIHRoaXMgcm91dGUuCisgICAgICAgRXhhbXBsZQorICAgICAgIGBgYGphdmFz
Y3JpcHQKKyAgICAgIEFwcC5Gb3JtUm91dGUgPSBFbWJlci5Sb3V0ZS5leHRlbmQoeworICAgICAg
ICBhY3Rpb25zOiB7CisgICAgICAgICAgd2lsbFRyYW5zaXRpb246IGZ1bmN0aW9uKHRyYW5zaXRp
b24pIHsKKyAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2xsZXIuZ2V0KCd1c2VySGFzRW50ZXJl
ZERhdGEnKSAmJgorICAgICAgICAgICAgICAgICFjb25maXJtKCdBcmUgeW91IHN1cmUgeW91IHdh
bnQgdG8gYWJhbmRvbiBwcm9ncmVzcz8nKSkgeworICAgICAgICAgICAgICB0cmFuc2l0aW9uLmFi
b3J0KCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAvLyBCdWJibGUgdGhl
IGB3aWxsVHJhbnNpdGlvbmAgYWN0aW9uIHNvIHRoYXQKKyAgICAgICAgICAgICAgLy8gcGFyZW50
IHJvdXRlcyBjYW4gZGVjaWRlIHdoZXRoZXIgb3Igbm90IHRvIGFib3J0LgorICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgIH0pOworICAgICAgYGBgCisgICAgICAgQHByb3BlcnR5IGNvbnRyb2xsZXIKKyAgICAgIEB0
eXBlIEVtYmVyLkNvbnRyb2xsZXIKKyAgICAgIEBzaW5jZSAxLjYuMAorICAgICAgQHB1YmxpYwor
ICAgICovCisKKyAgICBhY3Rpb25zOiB7CisKKyAgICAgIHF1ZXJ5UGFyYW1zRGlkQ2hhbmdlOiBm
dW5jdGlvbiAoY2hhbmdlZCwgdG90YWxQcmVzZW50LCByZW1vdmVkKSB7CisgICAgICAgIHZhciBx
cE1hcCA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnX3FwJykubWFwOworCisg
ICAgICAgIHZhciB0b3RhbENoYW5nZWQgPSBPYmplY3Qua2V5cyhjaGFuZ2VkKS5jb25jYXQoT2Jq
ZWN0LmtleXMocmVtb3ZlZCkpOworICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdG90YWxD
aGFuZ2VkLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAgICAgdmFyIHFwID0gcXBNYXBb
dG90YWxDaGFuZ2VkW2ldXTsKKyAgICAgICAgICBpZiAocXAgJiYgX2VtYmVyTWV0YWxQcm9wZXJ0
eV9nZXQuZ2V0KHRoaXMuX29wdGlvbnNGb3JRdWVyeVBhcmFtKHFwKSwgJ3JlZnJlc2hNb2RlbCcp
ICYmIHRoaXMucm91dGVyLmN1cnJlbnRTdGF0ZSkgeworICAgICAgICAgICAgdGhpcy5yZWZyZXNo
KCk7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICB9LAorCisgICAgICBmaW5hbGl6ZVF1ZXJ5UGFyYW1DaGFuZ2U6IGZ1bmN0aW9uIChwYXJhbXMs
IGZpbmFsUGFyYW1zLCB0cmFuc2l0aW9uKSB7CisgICAgICAgIGlmICh0aGlzLnJvdXRlTmFtZSAh
PT0gJ2FwcGxpY2F0aW9uJykgeworICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisK
KyAgICAgICAgLy8gVHJhbnNpdGlvbiBvYmplY3QgaXMgYWJzZW50IGZvciBpbnRlcm1lZGlhdGUg
dHJhbnNpdGlvbnMuCisgICAgICAgIGlmICghdHJhbnNpdGlvbikgeworICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBoYW5kbGVySW5mb3MgPSB0cmFuc2l0aW9uLnN0
YXRlLmhhbmRsZXJJbmZvczsKKyAgICAgICAgdmFyIHJvdXRlciA9IHRoaXMucm91dGVyOworICAg
ICAgICB2YXIgcXBNZXRhID0gcm91dGVyLl9xdWVyeVBhcmFtc0ZvcihoYW5kbGVySW5mb3NbaGFu
ZGxlckluZm9zLmxlbmd0aCAtIDFdLm5hbWUpOworICAgICAgICB2YXIgY2hhbmdlcyA9IHJvdXRl
ci5fcXBVcGRhdGVzOworICAgICAgICB2YXIgcmVwbGFjZVVybDsKKworICAgICAgICBfZW1iZXJS
b3V0aW5nVXRpbHMuc3Rhc2hQYXJhbU5hbWVzKHJvdXRlciwgaGFuZGxlckluZm9zKTsKKworICAg
ICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gcXBNZXRhLnFwcy5sZW5ndGg7IGkgPCBsZW47ICsr
aSkgeworICAgICAgICAgIHZhciBxcCA9IHFwTWV0YS5xcHNbaV07CisgICAgICAgICAgdmFyIHJv
dXRlID0gcXAucm91dGU7CisgICAgICAgICAgdmFyIGNvbnRyb2xsZXIgPSByb3V0ZS5jb250cm9s
bGVyOworICAgICAgICAgIHZhciBwcmVzZW50S2V5ID0gcXAudXJsS2V5IGluIHBhcmFtcyAmJiBx
cC51cmxLZXk7CisKKyAgICAgICAgICAvLyBEbyBhIHJldmVyc2UgbG9va3VwIHRvIHNlZSBpZiB0
aGUgY2hhbmdlZCBxdWVyeQorICAgICAgICAgIC8vIHBhcmFtIFVSTCBrZXkgY29ycmVzcG9uZHMg
dG8gYSBRUCBwcm9wZXJ0eSBvbgorICAgICAgICAgIC8vIHRoaXMgY29udHJvbGxlci4KKyAgICAg
ICAgICB2YXIgdmFsdWUsIHN2YWx1ZTsKKyAgICAgICAgICBpZiAoY2hhbmdlcyAmJiBxcC51cmxL
ZXkgaW4gY2hhbmdlcykgeworICAgICAgICAgICAgLy8gVmFsdWUgdXBkYXRlZCBpbi9iZWZvcmUg
c2V0dXBDb250cm9sbGVyCisgICAgICAgICAgICB2YWx1ZSA9IF9lbWJlck1ldGFsUHJvcGVydHlf
Z2V0LmdldChjb250cm9sbGVyLCBxcC5wcm9wKTsKKyAgICAgICAgICAgIHN2YWx1ZSA9IHJvdXRl
LnNlcmlhbGl6ZVF1ZXJ5UGFyYW0odmFsdWUsIHFwLnVybEtleSwgcXAudHlwZSk7CisgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChwcmVzZW50S2V5KSB7CisgICAgICAgICAgICAg
IHN2YWx1ZSA9IHBhcmFtc1twcmVzZW50S2V5XTsKKyAgICAgICAgICAgICAgdmFsdWUgPSByb3V0
ZS5kZXNlcmlhbGl6ZVF1ZXJ5UGFyYW0oc3ZhbHVlLCBxcC51cmxLZXksIHFwLnR5cGUpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgLy8gTm8gUVAgcHJvdmlkZWQ7IHVzZSBk
ZWZhdWx0IHZhbHVlLgorICAgICAgICAgICAgICBzdmFsdWUgPSBxcC5zZXJpYWxpemVkRGVmYXVs
dFZhbHVlOworICAgICAgICAgICAgICB2YWx1ZSA9IGNvcHlEZWZhdWx0VmFsdWUocXAuZGVmYXVs
dFZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICBjb250cm9s
bGVyLl9xcERlbGVnYXRlID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHJvdXRlLCAnX3Fw
LnN0YXRlcy5pbmFjdGl2ZScpOworCisgICAgICAgICAgdmFyIHRoaXNRdWVyeVBhcmFtQ2hhbmdl
ZCA9IHN2YWx1ZSAhPT0gcXAuc2VyaWFsaXplZFZhbHVlOworICAgICAgICAgIGlmICh0aGlzUXVl
cnlQYXJhbUNoYW5nZWQpIHsKKyAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uLnF1ZXJ5UGFyYW1z
T25seSAmJiByZXBsYWNlVXJsICE9PSBmYWxzZSkgeworICAgICAgICAgICAgICB2YXIgb3B0aW9u
cyA9IHJvdXRlLl9vcHRpb25zRm9yUXVlcnlQYXJhbShxcCk7CisgICAgICAgICAgICAgIHZhciBy
ZXBsYWNlQ29uZmlnVmFsdWUgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQob3B0aW9ucywg
J3JlcGxhY2UnKTsKKyAgICAgICAgICAgICAgaWYgKHJlcGxhY2VDb25maWdWYWx1ZSkgeworICAg
ICAgICAgICAgICAgIHJlcGxhY2VVcmwgPSB0cnVlOworICAgICAgICAgICAgICB9IGVsc2UgaWYg
KHJlcGxhY2VDb25maWdWYWx1ZSA9PT0gZmFsc2UpIHsKKyAgICAgICAgICAgICAgICAvLyBFeHBs
aWNpdCBwdXNoU3RhdGUgd2lucyBvdmVyIGFueSBvdGhlciByZXBsYWNlU3RhdGVzLgorICAgICAg
ICAgICAgICAgIHJlcGxhY2VVcmwgPSBmYWxzZTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBfZW1iZXJNZXRhbFByb3BlcnR5X3NldC5zZXQoY29udHJvbGxl
ciwgcXAucHJvcCwgdmFsdWUpOworICAgICAgICAgIH0KKworICAgICAgICAgIC8vIFN0YXNoIGN1
cnJlbnQgc2VyaWFsaXplZCB2YWx1ZSBvZiBjb250cm9sbGVyLgorICAgICAgICAgIHFwLnNlcmlh
bGl6ZWRWYWx1ZSA9IHN2YWx1ZTsKKworICAgICAgICAgIHZhciB0aGlzUXVlcnlQYXJhbUhhc0Rl
ZmF1bHRWYWx1ZSA9IHFwLnNlcmlhbGl6ZWREZWZhdWx0VmFsdWUgPT09IHN2YWx1ZTsKKyAgICAg
ICAgICBpZiAoIXRoaXNRdWVyeVBhcmFtSGFzRGVmYXVsdFZhbHVlKSB7CisgICAgICAgICAgICBm
aW5hbFBhcmFtcy5wdXNoKHsKKyAgICAgICAgICAgICAgdmFsdWU6IHN2YWx1ZSwKKyAgICAgICAg
ICAgICAgdmlzaWJsZTogdHJ1ZSwKKyAgICAgICAgICAgICAga2V5OiBwcmVzZW50S2V5IHx8IHFw
LnVybEtleQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgaWYgKHJlcGxhY2VVcmwpIHsKKyAgICAgICAgICB0cmFuc2l0aW9uLm1ldGhvZCgncmVwbGFj
ZScpOworICAgICAgICB9CisKKyAgICAgICAgcXBNZXRhLnFwcy5mb3JFYWNoKGZ1bmN0aW9uIChx
cCkgeworICAgICAgICAgIHZhciByb3V0ZVFwTWV0YSA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0
LmdldChxcC5yb3V0ZSwgJ19xcCcpOworICAgICAgICAgIHZhciBmaW5hbGl6ZWRDb250cm9sbGVy
ID0gcXAucm91dGUuY29udHJvbGxlcjsKKyAgICAgICAgICBmaW5hbGl6ZWRDb250cm9sbGVyLl9x
cERlbGVnYXRlID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHJvdXRlUXBNZXRhLCAnc3Rh
dGVzLmFjdGl2ZScpOworICAgICAgICB9KTsKKworICAgICAgICByb3V0ZXIuX3FwVXBkYXRlcyA9
IG51bGw7CisgICAgICB9CisgICAgfSwKKworICAgIC8qKgorICAgICAgVGhpcyBob29rIGlzIGV4
ZWN1dGVkIHdoZW4gdGhlIHJvdXRlciBjb21wbGV0ZWx5IGV4aXRzIHRoaXMgcm91dGUuIEl0IGlz
CisgICAgICBub3QgZXhlY3V0ZWQgd2hlbiB0aGUgbW9kZWwgZm9yIHRoZSByb3V0ZSBjaGFuZ2Vz
LgorICAgICAgIEBtZXRob2QgZGVhY3RpdmF0ZQorICAgICAgQHB1YmxpYworICAgICovCisgICAg
ZGVhY3RpdmF0ZTogSywKKworICAgIC8qKgorICAgICAgVGhpcyBob29rIGlzIGV4ZWN1dGVkIHdo
ZW4gdGhlIHJvdXRlciBlbnRlcnMgdGhlIHJvdXRlLiBJdCBpcyBub3QgZXhlY3V0ZWQKKyAgICAg
IHdoZW4gdGhlIG1vZGVsIGZvciB0aGUgcm91dGUgY2hhbmdlcy4KKyAgICAgICBAbWV0aG9kIGFj
dGl2YXRlCisgICAgICBAcHVibGljCisgICAgKi8KKyAgICBhY3RpdmF0ZTogSywKKworICAgIC8q
KgorICAgICAgVHJhbnNpdGlvbiB0aGUgYXBwbGljYXRpb24gaW50byBhbm90aGVyIHJvdXRlLiBU
aGUgcm91dGUgbWF5CisgICAgICBiZSBlaXRoZXIgYSBzaW5nbGUgcm91dGUgb3Igcm91dGUgcGF0
aDoKKyAgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICB0aGlzLnRyYW5zaXRpb25UbygnYmxvZ1Bv
c3RzJyk7CisgICAgICB0aGlzLnRyYW5zaXRpb25UbygnYmxvZ1Bvc3RzLnJlY2VudEVudHJpZXMn
KTsKKyAgICAgIGBgYAorICAgICAgIE9wdGlvbmFsbHkgc3VwcGx5IGEgbW9kZWwgZm9yIHRoZSBy
b3V0ZSBpbiBxdWVzdGlvbi4gVGhlIG1vZGVsCisgICAgICB3aWxsIGJlIHNlcmlhbGl6ZWQgaW50
byB0aGUgVVJMIHVzaW5nIHRoZSBgc2VyaWFsaXplYCBob29rIG9mCisgICAgICB0aGUgcm91dGU6
CisgICAgICAgYGBgamF2YXNjcmlwdAorICAgICAgdGhpcy50cmFuc2l0aW9uVG8oJ2Jsb2dQb3N0
JywgYVBvc3QpOworICAgICAgYGBgCisgICAgICAgSWYgYSBsaXRlcmFsIGlzIHBhc3NlZCAoc3Vj
aCBhcyBhIG51bWJlciBvciBhIHN0cmluZyksIGl0IHdpbGwKKyAgICAgIGJlIHRyZWF0ZWQgYXMg
YW4gaWRlbnRpZmllciBpbnN0ZWFkLiBJbiB0aGlzIGNhc2UsIHRoZSBgbW9kZWxgCisgICAgICBo
b29rIG9mIHRoZSByb3V0ZSB3aWxsIGJlIHRyaWdnZXJlZDoKKyAgICAgICBgYGBqYXZhc2NyaXB0
CisgICAgICB0aGlzLnRyYW5zaXRpb25UbygnYmxvZ1Bvc3QnLCAxKTsKKyAgICAgIGBgYAorICAg
ICAgIE11bHRpcGxlIG1vZGVscyB3aWxsIGJlIGFwcGxpZWQgbGFzdCB0byBmaXJzdCByZWN1cnNp
dmVseSB1cCB0aGUKKyAgICAgIHJvdXRlIHRyZWUuCisgICAgICAgYGBgamF2YXNjcmlwdAorICAg
ICAgQXBwLlJvdXRlci5tYXAoZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMucm91dGUoJ2Jsb2dQ
b3N0JywgeyBwYXRoOic6YmxvZ1Bvc3RJZCcgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgdGhp
cy5yb3V0ZSgnYmxvZ0NvbW1lbnQnLCB7IHBhdGg6ICc6YmxvZ0NvbW1lbnRJZCcsIHJlc2V0TmFt
ZXNwYWNlOiB0cnVlIH0pOworICAgICAgICB9KTsKKyAgICAgIH0pOworICAgICAgIHRoaXMudHJh
bnNpdGlvblRvKCdibG9nQ29tbWVudCcsIGFQb3N0LCBhQ29tbWVudCk7CisgICAgICB0aGlzLnRy
YW5zaXRpb25UbygnYmxvZ0NvbW1lbnQnLCAxLCAxMyk7CisgICAgICBgYGAKKyAgICAgICBJdCBp
cyBhbHNvIHBvc3NpYmxlIHRvIHBhc3MgYSBVUkwgKGEgc3RyaW5nIHRoYXQgc3RhcnRzIHdpdGgg
YQorICAgICAgYC9gKS4gVGhpcyBpcyBpbnRlbmRlZCBmb3IgdGVzdGluZyBhbmQgZGVidWdnaW5n
IHB1cnBvc2VzIGFuZAorICAgICAgc2hvdWxkIHJhcmVseSBiZSB1c2VkIGluIHByb2R1Y3Rpb24g
Y29kZS4KKyAgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICB0aGlzLnRyYW5zaXRpb25UbygnLycp
OworICAgICAgdGhpcy50cmFuc2l0aW9uVG8oJy9ibG9nL3Bvc3QvMS9jb21tZW50LzEzJyk7Cisg
ICAgICB0aGlzLnRyYW5zaXRpb25UbygnL2Jsb2cvcG9zdHM/c29ydD10aXRsZScpOworICAgICAg
YGBgCisgICAgICAgQW4gb3B0aW9ucyBoYXNoIHdpdGggYSBgcXVlcnlQYXJhbXNgIHByb3BlcnR5
IG1heSBiZSBwcm92aWRlZCBhcworICAgICAgdGhlIGZpbmFsIGFyZ3VtZW50IHRvIGFkZCBxdWVy
eSBwYXJhbWV0ZXJzIHRvIHRoZSBkZXN0aW5hdGlvbiBVUkwuCisgICAgICAgYGBgamF2YXNjcmlw
dAorICAgICAgdGhpcy50cmFuc2l0aW9uVG8oJ2Jsb2dQb3N0JywgMSwgeworICAgICAgICBxdWVy
eVBhcmFtczoge3Nob3dDb21tZW50czogJ3RydWUnfQorICAgICAgfSk7CisgICAgICAgLy8gaWYg
eW91IGp1c3Qgd2FudCB0byB0cmFuc2l0aW9uIHRoZSBxdWVyeSBwYXJhbWV0ZXJzIHdpdGhvdXQg
Y2hhbmdpbmcgdGhlIHJvdXRlCisgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh7cXVlcnlQYXJhbXM6
IHtzb3J0OiAnZGF0ZSd9fSk7CisgICAgICBgYGAKKyAgICAgICBTZWUgYWxzbyBbcmVwbGFjZVdp
dGhdKCNtZXRob2RfcmVwbGFjZVdpdGgpLgorICAgICAgIFNpbXBsZSBUcmFuc2l0aW9uIEV4YW1w
bGUKKyAgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICBBcHAuUm91dGVyLm1hcChmdW5jdGlvbigp
IHsKKyAgICAgICAgdGhpcy5yb3V0ZSgnaW5kZXgnKTsKKyAgICAgICAgdGhpcy5yb3V0ZSgnc2Vj
cmV0Jyk7CisgICAgICAgIHRoaXMucm91dGUoJ2ZvdXJPaEZvdXInLCB7IHBhdGg6ICcqOicgfSk7
CisgICAgICB9KTsKKyAgICAgICBBcHAuSW5kZXhSb3V0ZSA9IEVtYmVyLlJvdXRlLmV4dGVuZCh7
CisgICAgICAgIGFjdGlvbnM6IHsKKyAgICAgICAgICBtb3ZlVG9TZWNyZXQ6IGZ1bmN0aW9uKGNv
bnRleHQpIHsKKyAgICAgICAgICAgIGlmIChhdXRob3JpemVkKCkpIHsKKyAgICAgICAgICAgICAg
dGhpcy50cmFuc2l0aW9uVG8oJ3NlY3JldCcsIGNvbnRleHQpOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8oJ2ZvdXJPaEZvdXInKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0pOworICAgICAgYGBgCisg
ICAgICAgVHJhbnNpdGlvbiB0byBhIG5lc3RlZCByb3V0ZQorICAgICAgIGBgYGphdmFzY3JpcHQK
KyAgICAgIEFwcC5Sb3V0ZXIubWFwKGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLnJvdXRlKCdh
cnRpY2xlcycsIHsgcGF0aDogJy9hcnRpY2xlcycgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAg
dGhpcy5yb3V0ZSgnbmV3Jyk7CisgICAgICAgIH0pOworICAgICAgfSk7CisgICAgICAgQXBwLklu
ZGV4Um91dGUgPSBFbWJlci5Sb3V0ZS5leHRlbmQoeworICAgICAgICBhY3Rpb25zOiB7CisgICAg
ICAgICAgdHJhbnNpdGlvblRvTmV3QXJ0aWNsZTogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB0
aGlzLnRyYW5zaXRpb25UbygnYXJ0aWNsZXMubmV3Jyk7CisgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICB9KTsKKyAgICAgIGBgYAorICAgICAgIE11bHRpcGxlIE1vZGVscyBFeGFtcGxlCisg
ICAgICAgYGBgamF2YXNjcmlwdAorICAgICAgQXBwLlJvdXRlci5tYXAoZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHRoaXMucm91dGUoJ2luZGV4Jyk7CisgICAgICAgICB0aGlzLnJvdXRlKCdicmVha2Zh
c3QnLCB7IHBhdGg6ICc6YnJlYWtmYXN0SWQnIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICAgIHRo
aXMucm91dGUoJ2NlcmVhbCcsIHsgcGF0aDogJzpjZXJlYWxJZCcsIHJlc2V0TmFtZXNwYWNlOiB0
cnVlIH0pOworICAgICAgICB9KTsKKyAgICAgIH0pOworICAgICAgIEFwcC5JbmRleFJvdXRlID0g
RW1iZXIuUm91dGUuZXh0ZW5kKHsKKyAgICAgICAgYWN0aW9uczogeworICAgICAgICAgIG1vdmVU
b0Nob2NvbGF0ZUNlcmVhbDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgY2VyZWFsID0g
eyBjZXJlYWxJZDogJ0Nob2NvbGF0ZVl1bW1pbmVzcycgfTsKKyAgICAgICAgICAgIHZhciBicmVh
a2Zhc3QgPSB7IGJyZWFrZmFzdElkOiAnQ2VyZWFsQW5kTWlsaycgfTsKKyAgICAgICAgICAgICB0
aGlzLnRyYW5zaXRpb25UbygnY2VyZWFsJywgYnJlYWtmYXN0LCBjZXJlYWwpOworICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgfSk7CisgICAgICBgYGAKKyAgICAgICBOZXN0ZWQgUm91dGUg
d2l0aCBRdWVyeSBTdHJpbmcgRXhhbXBsZQorICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgIEFw
cC5Sb3V0ZXIubWFwKGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLnJvdXRlKCdmcnVpdHMnLCBm
dW5jdGlvbigpIHsKKyAgICAgICAgICB0aGlzLnJvdXRlKCdhcHBsZXMnKTsKKyAgICAgICAgfSk7
CisgICAgICB9KTsKKyAgICAgICBBcHAuSW5kZXhSb3V0ZSA9IEVtYmVyLlJvdXRlLmV4dGVuZCh7
CisgICAgICAgIGFjdGlvbnM6IHsKKyAgICAgICAgICB0cmFuc2l0aW9uVG9BcHBsZXM6IGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8oJ2ZydWl0cy5hcHBsZXMnLCB7
cXVlcnlQYXJhbXM6IHtjb2xvcjogJ3JlZCd9fSk7CisgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICB9KTsKKyAgICAgIGBgYAorICAgICAgIEBtZXRob2QgdHJhbnNpdGlvblRvCisgICAgICBA
cGFyYW0ge1N0cmluZ30gbmFtZSB0aGUgbmFtZSBvZiB0aGUgcm91dGUgb3IgYSBVUkwKKyAgICAg
IEBwYXJhbSB7Li4uT2JqZWN0fSBtb2RlbHMgdGhlIG1vZGVsKHMpIG9yIGlkZW50aWZpZXIocykg
dG8gYmUgdXNlZCB3aGlsZQorICAgICAgICB0cmFuc2l0aW9uaW5nIHRvIHRoZSByb3V0ZS4KKyAg
ICAgIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gb3B0aW9uYWwgaGFzaCB3aXRoIGEgcXVlcnlQ
YXJhbXMgcHJvcGVydHkKKyAgICAgICAgY29udGFpbmluZyBhIG1hcHBpbmcgb2YgcXVlcnkgcGFy
YW1ldGVycworICAgICAgQHJldHVybiB7VHJhbnNpdGlvbn0gdGhlIHRyYW5zaXRpb24gb2JqZWN0
IGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICAgIGF0dGVtcHRlZCB0cmFuc2l0aW9uCisgICAg
ICBAcHVibGljCisgICAgKi8KKyAgICB0cmFuc2l0aW9uVG86IGZ1bmN0aW9uIChuYW1lLCBjb250
ZXh0KSB7CisgICAgICB2YXIgcm91dGVyID0gdGhpcy5yb3V0ZXI7CisgICAgICByZXR1cm4gcm91
dGVyLnRyYW5zaXRpb25Uby5hcHBseShyb3V0ZXIsIGFyZ3VtZW50cyk7CisgICAgfSwKKworICAg
IC8qKgorICAgICAgUGVyZm9ybSBhIHN5bmNocm9ub3VzIHRyYW5zaXRpb24gaW50byBhbm90aGVy
IHJvdXRlIHdpdGhvdXQgYXR0ZW1wdGluZworICAgICAgdG8gcmVzb2x2ZSBwcm9taXNlcywgdXBk
YXRlIHRoZSBVUkwsIG9yIGFib3J0IGFueSBjdXJyZW50bHkgYWN0aXZlCisgICAgICBhc3luY2hy
b25vdXMgdHJhbnNpdGlvbnMgKGkuZS4gcmVndWxhciB0cmFuc2l0aW9ucyBjYXVzZWQgYnkKKyAg
ICAgIGB0cmFuc2l0aW9uVG9gIG9yIFVSTCBjaGFuZ2VzKS4KKyAgICAgICBUaGlzIG1ldGhvZCBp
cyBoYW5keSBmb3IgcGVyZm9ybWluZyBpbnRlcm1lZGlhdGUgdHJhbnNpdGlvbnMgb24gdGhlCisg
ICAgICB3YXkgdG8gYSBmaW5hbCBkZXN0aW5hdGlvbiByb3V0ZSwgYW5kIGlzIGNhbGxlZCBpbnRl
cm5hbGx5IGJ5IHRoZQorICAgICAgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIGBlcnJv
cmAgYW5kIGBsb2FkaW5nYCBoYW5kbGVycy4KKyAgICAgICBAbWV0aG9kIGludGVybWVkaWF0ZVRy
YW5zaXRpb25UbworICAgICAgQHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhlIG5hbWUgb2YgdGhlIHJv
dXRlCisgICAgICBAcGFyYW0gey4uLk9iamVjdH0gbW9kZWxzIHRoZSBtb2RlbChzKSB0byBiZSB1
c2VkIHdoaWxlIHRyYW5zaXRpb25pbmcKKyAgICAgIHRvIHRoZSByb3V0ZS4KKyAgICAgIEBzaW5j
ZSAxLjIuMAorICAgICAgQHB1YmxpYworICAgICAqLworICAgIGludGVybWVkaWF0ZVRyYW5zaXRp
b25UbzogZnVuY3Rpb24gKCkgeworICAgICAgdmFyIHJvdXRlciA9IHRoaXMucm91dGVyOworICAg
ICAgcm91dGVyLmludGVybWVkaWF0ZVRyYW5zaXRpb25Uby5hcHBseShyb3V0ZXIsIGFyZ3VtZW50
cyk7CisgICAgfSwKKworICAgIC8qKgorICAgICAgUmVmcmVzaCB0aGUgbW9kZWwgb24gdGhpcyBy
b3V0ZSBhbmQgYW55IGNoaWxkIHJvdXRlcywgZmlyaW5nIHRoZQorICAgICAgYGJlZm9yZU1vZGVs
YCwgYG1vZGVsYCwgYW5kIGBhZnRlck1vZGVsYCBob29rcyBpbiBhIHNpbWlsYXIgZmFzaGlvbgor
ICAgICAgdG8gaG93IHJvdXRlcyBhcmUgZW50ZXJlZCB3aGVuIHRyYW5zaXRpb25pbmcgaW4gZnJv
bSBvdGhlciByb3V0ZS4KKyAgICAgIFRoZSBjdXJyZW50IHJvdXRlIHBhcmFtcyAoZS5nLiBgYXJ0
aWNsZV9pZGApIHdpbGwgYmUgcGFzc2VkIGluCisgICAgICB0byB0aGUgcmVzcGVjdGl2ZSBtb2Rl
bCBob29rcywgYW5kIGlmIGEgZGlmZmVyZW50IG1vZGVsIGlzIHJldHVybmVkLAorICAgICAgYHNl
dHVwQ29udHJvbGxlcmAgYW5kIGFzc29jaWF0ZWQgcm91dGUgaG9va3Mgd2lsbCByZS1maXJlIGFz
IHdlbGwuCisgICAgICAgQW4gZXhhbXBsZSB1c2FnZSBvZiB0aGlzIG1ldGhvZCBpcyByZS1xdWVy
eWluZyB0aGUgc2VydmVyIGZvciB0aGUKKyAgICAgIGxhdGVzdCBpbmZvcm1hdGlvbiB1c2luZyB0
aGUgc2FtZSBwYXJhbWV0ZXJzIGFzIHdoZW4gdGhlIHJvdXRlCisgICAgICB3YXMgZmlyc3QgZW50
ZXJlZC4KKyAgICAgICBOb3RlIHRoYXQgdGhpcyB3aWxsIGNhdXNlIGBtb2RlbGAgaG9va3MgdG8g
ZmlyZSBldmVuIG9uIHJvdXRlcworICAgICAgdGhhdCB3ZXJlIHByb3ZpZGVkIGEgbW9kZWwgb2Jq
ZWN0IHdoZW4gdGhlIHJvdXRlIHdhcyBpbml0aWFsbHkKKyAgICAgIGVudGVyZWQuCisgICAgICAg
QG1ldGhvZCByZWZyZXNoCisgICAgICBAcmV0dXJuIHtUcmFuc2l0aW9ufSB0aGUgdHJhbnNpdGlv
biBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICAgICAgYXR0ZW1wdGVkIHRyYW5zaXRp
b24KKyAgICAgIEBzaW5jZSAxLjQuMAorICAgICAgQHB1YmxpYworICAgICAqLworICAgIHJlZnJl
c2g6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHJldHVybiB0aGlzLnJvdXRlci5yb3V0ZXIucmVmcmVz
aCh0aGlzKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICBUcmFuc2l0aW9uIGludG8gYW5vdGhl
ciByb3V0ZSB3aGlsZSByZXBsYWNpbmcgdGhlIGN1cnJlbnQgVVJMLCBpZiBwb3NzaWJsZS4KKyAg
ICAgIFRoaXMgd2lsbCByZXBsYWNlIHRoZSBjdXJyZW50IGhpc3RvcnkgZW50cnkgaW5zdGVhZCBv
ZiBhZGRpbmcgYSBuZXcgb25lLgorICAgICAgQmVzaWRlIHRoYXQsIGl0IGlzIGlkZW50aWNhbCB0
byBgdHJhbnNpdGlvblRvYCBpbiBhbGwgb3RoZXIgcmVzcGVjdHMuIFNlZQorICAgICAgJ3RyYW5z
aXRpb25UbycgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIG11bHRpcGxlIG1v
ZGVscy4KKyAgICAgICBFeGFtcGxlCisgICAgICAgYGBgamF2YXNjcmlwdAorICAgICAgQXBwLlJv
dXRlci5tYXAoZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMucm91dGUoJ2luZGV4Jyk7CisgICAg
ICAgIHRoaXMucm91dGUoJ3NlY3JldCcpOworICAgICAgfSk7CisgICAgICAgQXBwLlNlY3JldFJv
dXRlID0gRW1iZXIuUm91dGUuZXh0ZW5kKHsKKyAgICAgICAgYWZ0ZXJNb2RlbDogZnVuY3Rpb24o
KSB7CisgICAgICAgICAgaWYgKCFhdXRob3JpemVkKCkpeworICAgICAgICAgICAgdGhpcy5yZXBs
YWNlV2l0aCgnaW5kZXgnKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0pOworICAg
ICAgYGBgCisgICAgICAgQG1ldGhvZCByZXBsYWNlV2l0aAorICAgICAgQHBhcmFtIHtTdHJpbmd9
IG5hbWUgdGhlIG5hbWUgb2YgdGhlIHJvdXRlIG9yIGEgVVJMCisgICAgICBAcGFyYW0gey4uLk9i
amVjdH0gbW9kZWxzIHRoZSBtb2RlbChzKSBvciBpZGVudGlmaWVyKHMpIHRvIGJlIHVzZWQgd2hp
bGUKKyAgICAgICAgdHJhbnNpdGlvbmluZyB0byB0aGUgcm91dGUuCisgICAgICBAcmV0dXJuIHtU
cmFuc2l0aW9ufSB0aGUgdHJhbnNpdGlvbiBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAg
ICAgICAgYXR0ZW1wdGVkIHRyYW5zaXRpb24KKyAgICAgIEBwdWJsaWMKKyAgICAqLworICAgIHJl
cGxhY2VXaXRoOiBmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgcm91dGVyID0gdGhpcy5yb3V0ZXI7
CisgICAgICByZXR1cm4gcm91dGVyLnJlcGxhY2VXaXRoLmFwcGx5KHJvdXRlciwgYXJndW1lbnRz
KTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICBTZW5kcyBhbiBhY3Rpb24gdG8gdGhlIHJvdXRl
ciwgd2hpY2ggd2lsbCBkZWxlZ2F0ZSBpdCB0byB0aGUgY3VycmVudGx5CisgICAgICBhY3RpdmUg
cm91dGUgaGllcmFyY2h5IHBlciB0aGUgYnViYmxpbmcgcnVsZXMgZXhwbGFpbmVkIHVuZGVyIGBh
Y3Rpb25zYC4KKyAgICAgICBFeGFtcGxlCisgICAgICAgYGBgamF2YXNjcmlwdAorICAgICAgQXBw
LlJvdXRlci5tYXAoZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMucm91dGUoJ2luZGV4Jyk7Cisg
ICAgICB9KTsKKyAgICAgICBBcHAuQXBwbGljYXRpb25Sb3V0ZSA9IEVtYmVyLlJvdXRlLmV4dGVu
ZCh7CisgICAgICAgIGFjdGlvbnM6IHsKKyAgICAgICAgICB0cmFjazogZnVuY3Rpb24oYXJnKSB7
CisgICAgICAgICAgICBjb25zb2xlLmxvZyhhcmcsICd3YXMgY2xpY2tlZCcpOworICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgfSk7CisgICAgICAgQXBwLkluZGV4Um91dGUgPSBFbWJlci5S
b3V0ZS5leHRlbmQoeworICAgICAgICBhY3Rpb25zOiB7CisgICAgICAgICAgdHJhY2tJZkRlYnVn
OiBmdW5jdGlvbihhcmcpIHsKKyAgICAgICAgICAgIGlmIChkZWJ1ZykgeworICAgICAgICAgICAg
ICB0aGlzLnNlbmQoJ3RyYWNrJywgYXJnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgIH0pOworICAgICAgYGBgCisgICAgICAgQG1ldGhvZCBzZW5kCisgICAg
ICBAcGFyYW0ge1N0cmluZ30gbmFtZSB0aGUgbmFtZSBvZiB0aGUgYWN0aW9uIHRvIHRyaWdnZXIK
KyAgICAgIEBwYXJhbSB7Li4uKn0gYXJncworICAgICAgQHB1YmxpYworICAgICovCisgICAgc2Vu
ZDogZnVuY3Rpb24gKCkgeworICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgs
IGFyZ3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHsKKyAg
ICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTsKKyAgICAgIH0KKworICAgICAgaWYg
KHRoaXMucm91dGVyICYmIHRoaXMucm91dGVyLnJvdXRlciB8fCAhX2VtYmVyTWV0YWxDb3JlLmRl
ZmF1bHQudGVzdGluZykgeworICAgICAgICB2YXIgX3JvdXRlcjsKKworICAgICAgICAoX3JvdXRl
ciA9IHRoaXMucm91dGVyKS5zZW5kLmFwcGx5KF9yb3V0ZXIsIGFyZ3MpOworICAgICAgfSBlbHNl
IHsKKyAgICAgICAgdmFyIG5hbWUgPSBhcmdzWzBdOworICAgICAgICBhcmdzID0gc2xpY2UuY2Fs
bChhcmdzLCAxKTsKKyAgICAgICAgdmFyIGFjdGlvbiA9IHRoaXMuYWN0aW9uc1tuYW1lXTsKKyAg
ICAgICAgaWYgKGFjdGlvbikgeworICAgICAgICAgIHJldHVybiB0aGlzLmFjdGlvbnNbbmFtZV0u
YXBwbHkodGhpcywgYXJncyk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorCisgICAgLyoq
CisgICAgICBUaGlzIGhvb2sgaXMgdGhlIGVudHJ5IHBvaW50IGZvciByb3V0ZXIuanMKKyAgICAg
ICBAcHJpdmF0ZQorICAgICAgQG1ldGhvZCBzZXR1cAorICAgICovCisgICAgc2V0dXA6IGZ1bmN0
aW9uIChjb250ZXh0LCB0cmFuc2l0aW9uKSB7CisgICAgICB2YXIgY29udHJvbGxlcjsKKworICAg
ICAgdmFyIGNvbnRyb2xsZXJOYW1lID0gdGhpcy5jb250cm9sbGVyTmFtZSB8fCB0aGlzLnJvdXRl
TmFtZTsKKyAgICAgIHZhciBkZWZpbmVkQ29udHJvbGxlciA9IHRoaXMuY29udHJvbGxlckZvcihj
b250cm9sbGVyTmFtZSwgdHJ1ZSk7CisKKyAgICAgIGlmICghZGVmaW5lZENvbnRyb2xsZXIpIHsK
KyAgICAgICAgY29udHJvbGxlciA9IHRoaXMuZ2VuZXJhdGVDb250cm9sbGVyKGNvbnRyb2xsZXJO
YW1lLCBjb250ZXh0KTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnRyb2xsZXIgPSBkZWZp
bmVkQ29udHJvbGxlcjsKKyAgICAgIH0KKworICAgICAgLy8gQXNzaWduIHRoZSByb3V0ZSdzIGNv
bnRyb2xsZXIgc28gdGhhdCBpdCBjYW4gbW9yZSBlYXNpbHkgYmUKKyAgICAgIC8vIHJlZmVyZW5j
ZWQgaW4gYWN0aW9uIGhhbmRsZXJzLiBTaWRlIGVmZmVjdHMuIFNpZGUgZWZmZWN0cyBldmVyeXdo
ZXJlLgorICAgICAgaWYgKCF0aGlzLmNvbnRyb2xsZXIpIHsKKyAgICAgICAgdmFyIHByb3BOYW1l
cyA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnX3FwLnByb3BlcnR5TmFtZXMn
KTsKKyAgICAgICAgYWRkUXVlcnlQYXJhbXNPYnNlcnZlcnMoY29udHJvbGxlciwgcHJvcE5hbWVz
KTsKKyAgICAgICAgdGhpcy5jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICAgIH0KKworICAg
ICAgdmFyIHF1ZXJ5UGFyYW1zID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdf
cXAnKTsKKworICAgICAgdmFyIHN0YXRlcyA9IHF1ZXJ5UGFyYW1zLnN0YXRlczsKKyAgICAgIGlm
ICh0cmFuc2l0aW9uKSB7CisgICAgICAgIC8vIFVwZGF0ZSB0aGUgbW9kZWwgZGVwIHZhbHVlcyB1
c2VkIHRvIGNhbGN1bGF0ZSBjYWNoZSBrZXlzLgorICAgICAgICBfZW1iZXJSb3V0aW5nVXRpbHMu
c3Rhc2hQYXJhbU5hbWVzKHRoaXMucm91dGVyLCB0cmFuc2l0aW9uLnN0YXRlLmhhbmRsZXJJbmZv
cyk7CisKKyAgICAgICAgdmFyIHBhcmFtcyA9IHRyYW5zaXRpb24ucGFyYW1zOworICAgICAgICB2
YXIgYWxsUGFyYW1zID0gcXVlcnlQYXJhbXMucHJvcGVydHlOYW1lczsKKyAgICAgICAgdmFyIGNh
Y2hlID0gdGhpcy5fYnVja2V0Q2FjaGU7CisKKyAgICAgICAgYWxsUGFyYW1zLmZvckVhY2goZnVu
Y3Rpb24gKHByb3ApIHsKKyAgICAgICAgICB2YXIgYVFwID0gcXVlcnlQYXJhbXMubWFwW3Byb3Bd
OworCisgICAgICAgICAgYVFwLnZhbHVlcyA9IHBhcmFtczsKKyAgICAgICAgICB2YXIgY2FjaGVL
ZXkgPSBfZW1iZXJSb3V0aW5nVXRpbHMuY2FsY3VsYXRlQ2FjaGVLZXkoYVFwLnByZWZpeCwgYVFw
LnBhcnRzLCBhUXAudmFsdWVzKTsKKworICAgICAgICAgIGlmIChjYWNoZSkgeworICAgICAgICAg
ICAgdmFyIHZhbHVlID0gY2FjaGUubG9va3VwKGNhY2hlS2V5LCBwcm9wLCBhUXAudW5kZWNvcmF0
ZWREZWZhdWx0VmFsdWUpOworICAgICAgICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQuc2V0
KGNvbnRyb2xsZXIsIHByb3AsIHZhbHVlKTsKKyAgICAgICAgICB9CisgICAgICAgIH0pOworICAg
ICAgfQorCisgICAgICBjb250cm9sbGVyLl9xcERlbGVnYXRlID0gc3RhdGVzLmFsbG93T3ZlcnJp
ZGVzOworCisgICAgICBpZiAodHJhbnNpdGlvbikgeworICAgICAgICB2YXIgcXBWYWx1ZXMgPSBn
ZXRRdWVyeVBhcmFtc0Zvcih0aGlzLCB0cmFuc2l0aW9uLnN0YXRlKTsKKyAgICAgICAgY29udHJv
bGxlci5zZXRQcm9wZXJ0aWVzKHFwVmFsdWVzKTsKKyAgICAgIH0KKworICAgICAgdGhpcy5zZXR1
cENvbnRyb2xsZXIoY29udHJvbGxlciwgY29udGV4dCwgdHJhbnNpdGlvbik7CisKKyAgICAgIGlm
ICghdGhpcy5fZW52aXJvbm1lbnQgfHwgdGhpcy5fZW52aXJvbm1lbnQub3B0aW9ucy5zaG91bGRS
ZW5kZXIpIHsKKyAgICAgICAgdGhpcy5yZW5kZXJUZW1wbGF0ZShjb250cm9sbGVyLCBjb250ZXh0
KTsKKyAgICAgIH0KKyAgICB9LAorCisgICAgLyoKKyAgICAgIENhbGxlZCB3aGVuIGEgcXVlcnkg
cGFyYW1ldGVyIGZvciB0aGlzIHJvdXRlIGNoYW5nZXMsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0
aGUgcm91dGUKKyAgICAgIGlzIGN1cnJlbnRseSBwYXJ0IG9mIHRoZSBhY3RpdmUgcm91dGUgaGll
cmFyY2h5LiBUaGlzIHdpbGwgdXBkYXRlIHRoZSBxdWVyeSBwYXJhbWV0ZXIncworICAgICAgdmFs
dWUgaW4gdGhlIGNhY2hlIHNvIGlmIHRoaXMgcm91dGUgYmVjb21lcyBhY3RpdmUsIHRoZSBjYWNo
ZSB2YWx1ZSBoYXMgYmVlbiB1cGRhdGVkLgorICAgICovCisgICAgX3FwQ2hhbmdlZDogZnVuY3Rp
b24gKHByb3AsIHZhbHVlLCBxcCkgeworICAgICAgaWYgKCFxcCkgeworICAgICAgICByZXR1cm47
CisgICAgICB9CisKKyAgICAgIHZhciBjYWNoZUtleSA9IF9lbWJlclJvdXRpbmdVdGlscy5jYWxj
dWxhdGVDYWNoZUtleShxcC5wcmVmaXggfHwgJycsIHFwLnBhcnRzLCBxcC52YWx1ZXMpOworCisg
ICAgICAvLyBVcGRhdGUgbW9kZWwtZGVwIGNhY2hlCisgICAgICB2YXIgY2FjaGUgPSB0aGlzLl9i
dWNrZXRDYWNoZTsKKyAgICAgIGlmIChjYWNoZSkgeworICAgICAgICBjYWNoZS5zdGFzaChjYWNo
ZUtleSwgcHJvcCwgdmFsdWUpOworICAgICAgfQorICAgIH0sCisgICAgLyoqCisgICAgICBUaGlz
IGhvb2sgaXMgdGhlIGZpcnN0IG9mIHRoZSByb3V0ZSBlbnRyeSB2YWxpZGF0aW9uIGhvb2tzCisg
ICAgICBjYWxsZWQgd2hlbiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gdHJhbnNpdGlvbiBpbnRvIGEg
cm91dGUKKyAgICAgIG9yIG9uZSBvZiBpdHMgY2hpbGRyZW4uIEl0IGlzIGNhbGxlZCBiZWZvcmUg
YG1vZGVsYCBhbmQKKyAgICAgIGBhZnRlck1vZGVsYCwgYW5kIGlzIGFwcHJvcHJpYXRlIGZvciBj
YXNlcyB3aGVuOgorICAgICAgIDEpIEEgZGVjaXNpb24gY2FuIGJlIG1hZGUgdG8gcmVkaXJlY3Qg
ZWxzZXdoZXJlIHdpdGhvdXQKKyAgICAgICAgIG5lZWRpbmcgdG8gcmVzb2x2ZSB0aGUgbW9kZWwg
Zmlyc3QuCisgICAgICAyKSBBbnkgYXN5bmMgb3BlcmF0aW9ucyBuZWVkIHRvIG9jY3VyIGZpcnN0
IGJlZm9yZSB0aGUKKyAgICAgICAgIG1vZGVsIGlzIGF0dGVtcHRlZCB0byBiZSByZXNvbHZlZC4K
KyAgICAgICBUaGlzIGhvb2sgaXMgcHJvdmlkZWQgdGhlIGN1cnJlbnQgYHRyYW5zaXRpb25gIGF0
dGVtcHQKKyAgICAgIGFzIGEgcGFyYW1ldGVyLCB3aGljaCBjYW4gYmUgdXNlZCB0byBgLmFib3J0
KClgIHRoZSB0cmFuc2l0aW9uLAorICAgICAgc2F2ZSBpdCBmb3IgYSBsYXRlciBgLnJldHJ5KClg
LCBvciByZXRyaWV2ZSB2YWx1ZXMgc2V0CisgICAgICBvbiBpdCBmcm9tIGEgcHJldmlvdXMgaG9v
ay4gWW91IGNhbiBhbHNvIGp1c3QgY2FsbAorICAgICAgYHRoaXMudHJhbnNpdGlvblRvYCB0byBh
bm90aGVyIHJvdXRlIHRvIGltcGxpY2l0bHkKKyAgICAgIGFib3J0IHRoZSBgdHJhbnNpdGlvbmAu
CisgICAgICAgWW91IGNhbiByZXR1cm4gYSBwcm9taXNlIGZyb20gdGhpcyBob29rIHRvIHBhdXNl
IHRoZQorICAgICAgdHJhbnNpdGlvbiB1bnRpbCB0aGUgcHJvbWlzZSByZXNvbHZlcyAob3IgcmVq
ZWN0cykuIFRoaXMgY291bGQKKyAgICAgIGJlIHVzZWZ1bCwgZm9yIGluc3RhbmNlLCBmb3IgcmV0
cmlldmluZyBhc3luYyBjb2RlIGZyb20KKyAgICAgIHRoZSBzZXJ2ZXIgdGhhdCBpcyByZXF1aXJl
ZCB0byBlbnRlciBhIHJvdXRlLgorICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgIEFwcC5Qb3N0
Um91dGUgPSBFbWJlci5Sb3V0ZS5leHRlbmQoeworICAgICAgICBiZWZvcmVNb2RlbDogZnVuY3Rp
b24odHJhbnNpdGlvbikgeworICAgICAgICAgIGlmICghQXBwLlBvc3QpIHsKKyAgICAgICAgICAg
IHJldHVybiBFbWJlci4kLmdldFNjcmlwdCgnL21vZGVscy9wb3N0LmpzJyk7CisgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICB9KTsKKyAgICAgIGBgYAorICAgICAgIElmIGBBcHAuUG9zdGAg
ZG9lc24ndCBleGlzdCBpbiB0aGUgYWJvdmUgZXhhbXBsZSwKKyAgICAgIGBiZWZvcmVNb2RlbGAg
d2lsbCB1c2UgalF1ZXJ5J3MgYGdldFNjcmlwdGAsIHdoaWNoCisgICAgICByZXR1cm5zIGEgcHJv
bWlzZSB0aGF0IHJlc29sdmVzIGFmdGVyIHRoZSBzZXJ2ZXIgaGFzCisgICAgICBzdWNjZXNzZnVs
bHkgcmV0cmlldmVkIGFuZCBleGVjdXRlZCB0aGUgY29kZSBmcm9tIHRoZQorICAgICAgc2VydmVy
LiBOb3RlIHRoYXQgaWYgYW4gZXJyb3Igd2VyZSB0byBvY2N1ciwgaXQgd291bGQKKyAgICAgIGJl
IHBhc3NlZCB0byB0aGUgYGVycm9yYCBob29rIG9uIGBFbWJlci5Sb3V0ZWAsIGJ1dAorICAgICAg
aXQncyBhbHNvIHBvc3NpYmxlIHRvIGhhbmRsZSBlcnJvcnMgc3BlY2lmaWMgdG8KKyAgICAgIGBi
ZWZvcmVNb2RlbGAgcmlnaHQgZnJvbSB3aXRoaW4gdGhlIGhvb2sgKHRvIGRpc3Rpbmd1aXNoCisg
ICAgICBmcm9tIHRoZSBzaGFyZWQgZXJyb3IgaGFuZGxpbmcgYmVoYXZpb3Igb2YgdGhlIGBlcnJv
cmAKKyAgICAgIGhvb2spOgorICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgIEFwcC5Qb3N0Um91
dGUgPSBFbWJlci5Sb3V0ZS5leHRlbmQoeworICAgICAgICBiZWZvcmVNb2RlbDogZnVuY3Rpb24o
dHJhbnNpdGlvbikgeworICAgICAgICAgIGlmICghQXBwLlBvc3QpIHsKKyAgICAgICAgICAgIHZh
ciBzZWxmID0gdGhpczsKKyAgICAgICAgICAgIHJldHVybiBFbWJlci4kLmdldFNjcmlwdCgncG9z
dC5qcycpLnRoZW4obnVsbCwgZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgICBzZWxmLnRyYW5z
aXRpb25UbygnaGVscCcpOworICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRoZSBhYm92ZSB0
cmFuc2l0aW9uVG8gd2lsbCBpbXBsaWNpdGx5CisgICAgICAgICAgICAgIC8vIGhhbHQgdGhlIHRy
YW5zaXRpb24uIElmIHlvdSB3ZXJlIHRvIHJldHVybgorICAgICAgICAgICAgICAvLyBub3RoaW5n
IGZyb20gdGhpcyBwcm9taXNlIHJlamVjdCBoYW5kbGVyLAorICAgICAgICAgICAgICAvLyBhY2Nv
cmRpbmcgdG8gcHJvbWlzZSBzZW1hbnRpY3MsIHRoYXQgd291bGQKKyAgICAgICAgICAgICAgLy8g
Y29udmVydCB0aGUgcmVqZWN0IGludG8gYSByZXNvbHZlIGFuZCB0aGUKKyAgICAgICAgICAgICAg
Ly8gdHJhbnNpdGlvbiB3b3VsZCBjb250aW51ZS4gVG8gcHJvcGFnYXRlIHRoZQorICAgICAgICAg
ICAgICAvLyBlcnJvciBzbyB0aGF0IGl0J2QgYmUgaGFuZGxlZCBieSB0aGUgYGVycm9yYAorICAg
ICAgICAgICAgICAvLyBob29rLCB5b3Ugd291bGQgaGF2ZSB0bworICAgICAgICAgICAgICByZXR1
cm4gRW1iZXIuUlNWUC5yZWplY3QoZSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgIH0pOworICAgICAgYGBgCisgICAgICAgQG1ldGhvZCBiZWZvcmVNb2Rl
bAorICAgICAgQHBhcmFtIHtUcmFuc2l0aW9ufSB0cmFuc2l0aW9uCisgICAgICBAcmV0dXJuIHtQ
cm9taXNlfSBpZiB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSB0aGlzIGhvb2sgaXMKKyAgICAgICAg
YSBwcm9taXNlLCB0aGUgdHJhbnNpdGlvbiB3aWxsIHBhdXNlIHVudGlsIHRoZSB0cmFuc2l0aW9u
CisgICAgICAgIHJlc29sdmVzLiBPdGhlcndpc2UsIG5vbi1wcm9taXNlIHJldHVybiB2YWx1ZXMg
YXJlIG5vdAorICAgICAgICB1dGlsaXplZCBpbiBhbnkgd2F5LgorICAgICAgQHB1YmxpYworICAg
ICovCisgICAgYmVmb3JlTW9kZWw6IEssCisKKyAgICAvKioKKyAgICAgIFRoaXMgaG9vayBpcyBj
YWxsZWQgYWZ0ZXIgdGhpcyByb3V0ZSdzIG1vZGVsIGhhcyByZXNvbHZlZC4KKyAgICAgIEl0IGZv
bGxvd3MgaWRlbnRpY2FsIGFzeW5jL3Byb21pc2Ugc2VtYW50aWNzIHRvIGBiZWZvcmVNb2RlbGAK
KyAgICAgIGJ1dCBpcyBwcm92aWRlZCB0aGUgcm91dGUncyByZXNvbHZlZCBtb2RlbCBpbiBhZGRp
dGlvbiB0bworICAgICAgdGhlIGB0cmFuc2l0aW9uYCwgYW5kIGlzIHRoZXJlZm9yZSBzdWl0ZWQg
dG8gcGVyZm9ybWluZworICAgICAgbG9naWMgdGhhdCBjYW4gb25seSB0YWtlIHBsYWNlIGFmdGVy
IHRoZSBtb2RlbCBoYXMgYWxyZWFkeQorICAgICAgcmVzb2x2ZWQuCisgICAgICAgYGBgamF2YXNj
cmlwdAorICAgICAgQXBwLlBvc3RzUm91dGUgPSBFbWJlci5Sb3V0ZS5leHRlbmQoeworICAgICAg
ICBhZnRlck1vZGVsOiBmdW5jdGlvbihwb3N0cywgdHJhbnNpdGlvbikgeworICAgICAgICAgIGlm
IChwb3N0cy5nZXQoJ2xlbmd0aCcpID09PSAxKSB7CisgICAgICAgICAgICB0aGlzLnRyYW5zaXRp
b25UbygncG9zdC5zaG93JywgcG9zdHMuZ2V0KCdmaXJzdE9iamVjdCcpKTsKKyAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgIH0pOworICAgICAgYGBgCisgICAgICAgUmVmZXIgdG8gZG9jdW1l
bnRhdGlvbiBmb3IgYGJlZm9yZU1vZGVsYCBmb3IgYSBkZXNjcmlwdGlvbgorICAgICAgb2YgdHJh
bnNpdGlvbi1wYXVzaW5nIHNlbWFudGljcyB3aGVuIGEgcHJvbWlzZSBpcyByZXR1cm5lZAorICAg
ICAgZnJvbSB0aGlzIGhvb2suCisgICAgICAgQG1ldGhvZCBhZnRlck1vZGVsCisgICAgICBAcGFy
YW0ge09iamVjdH0gcmVzb2x2ZWRNb2RlbCB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSBgbW9kZWxg
LAorICAgICAgICBvciBpdHMgcmVzb2x2ZWQgdmFsdWUgaWYgaXQgd2FzIGEgcHJvbWlzZQorICAg
ICAgQHBhcmFtIHtUcmFuc2l0aW9ufSB0cmFuc2l0aW9uCisgICAgICBAcmV0dXJuIHtQcm9taXNl
fSBpZiB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSB0aGlzIGhvb2sgaXMKKyAgICAgICAgYSBwcm9t
aXNlLCB0aGUgdHJhbnNpdGlvbiB3aWxsIHBhdXNlIHVudGlsIHRoZSB0cmFuc2l0aW9uCisgICAg
ICAgIHJlc29sdmVzLiBPdGhlcndpc2UsIG5vbi1wcm9taXNlIHJldHVybiB2YWx1ZXMgYXJlIG5v
dAorICAgICAgICB1dGlsaXplZCBpbiBhbnkgd2F5LgorICAgICAgQHB1YmxpYworICAgICAqLwor
ICAgIGFmdGVyTW9kZWw6IEssCisKKyAgICAvKioKKyAgICAgIEEgaG9vayB5b3UgY2FuIGltcGxl
bWVudCB0byBvcHRpb25hbGx5IHJlZGlyZWN0IHRvIGFub3RoZXIgcm91dGUuCisgICAgICAgSWYg
eW91IGNhbGwgYHRoaXMudHJhbnNpdGlvblRvYCBmcm9tIGluc2lkZSBvZiB0aGlzIGhvb2ssIHRo
aXMgcm91dGUKKyAgICAgIHdpbGwgbm90IGJlIGVudGVyZWQgaW4gZmF2b3Igb2YgdGhlIG90aGVy
IGhvb2suCisgICAgICAgYHJlZGlyZWN0YCBhbmQgYGFmdGVyTW9kZWxgIGJlaGF2ZSB2ZXJ5IHNp
bWlsYXJseSBhbmQgYXJlCisgICAgICBjYWxsZWQgYWxtb3N0IGF0IHRoZSBzYW1lIHRpbWUsIGJ1
dCB0aGV5IGhhdmUgYW4gaW1wb3J0YW50CisgICAgICBkaXN0aW5jdGlvbiBpbiB0aGUgY2FzZSB0
aGF0LCBmcm9tIG9uZSBvZiB0aGVzZSBob29rcywgYQorICAgICAgcmVkaXJlY3QgaW50byBhIGNo
aWxkIHJvdXRlIG9mIHRoaXMgcm91dGUgb2NjdXJzOiByZWRpcmVjdHMKKyAgICAgIGZyb20gYGFm
dGVyTW9kZWxgIGVzc2VudGlhbGx5IGludmFsaWRhdGUgdGhlIGN1cnJlbnQgYXR0ZW1wdAorICAg
ICAgdG8gZW50ZXIgdGhpcyByb3V0ZSwgYW5kIHdpbGwgcmVzdWx0IGluIHRoaXMgcm91dGUncyBg
YmVmb3JlTW9kZWxgLAorICAgICAgYG1vZGVsYCwgYW5kIGBhZnRlck1vZGVsYCBob29rcyBiZWlu
ZyBmaXJlZCBhZ2FpbiB3aXRoaW4KKyAgICAgIHRoZSBuZXcsIHJlZGlyZWN0aW5nIHRyYW5zaXRp
b24uIFJlZGlyZWN0cyB0aGF0IG9jY3VyIHdpdGhpbgorICAgICAgdGhlIGByZWRpcmVjdGAgaG9v
aywgb24gdGhlIG90aGVyIGhhbmQsIHdpbGwgX25vdF8gY2F1c2UKKyAgICAgIHRoZXNlIGhvb2tz
IHRvIGJlIGZpcmVkIGFnYWluIHRoZSBzZWNvbmQgdGltZSBhcm91bmQ7IGluCisgICAgICBvdGhl
ciB3b3JkcywgYnkgdGhlIHRpbWUgdGhlIGByZWRpcmVjdGAgaG9vayBoYXMgYmVlbiBjYWxsZWQs
CisgICAgICBib3RoIHRoZSByZXNvbHZlZCBtb2RlbCBhbmQgYXR0ZW1wdGVkIGVudHJ5IGludG8g
dGhpcyByb3V0ZQorICAgICAgYXJlIGNvbnNpZGVyZWQgdG8gYmUgZnVsbHkgdmFsaWRhdGVkLgor
ICAgICAgIEBtZXRob2QgcmVkaXJlY3QKKyAgICAgIEBwYXJhbSB7T2JqZWN0fSBtb2RlbCB0aGUg
bW9kZWwgZm9yIHRoaXMgcm91dGUKKyAgICAgIEBwYXJhbSB7VHJhbnNpdGlvbn0gdHJhbnNpdGlv
biB0aGUgdHJhbnNpdGlvbiBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IHRyYW5z
aXRpb24KKyAgICAgIEBwdWJsaWMKKyAgICAqLworICAgIHJlZGlyZWN0OiBLLAorCisgICAgLyoq
CisgICAgICBDYWxsZWQgd2hlbiB0aGUgY29udGV4dCBpcyBjaGFuZ2VkIGJ5IHJvdXRlci5qcy4K
KyAgICAgICBAcHJpdmF0ZQorICAgICAgQG1ldGhvZCBjb250ZXh0RGlkQ2hhbmdlCisgICAgKi8K
KyAgICBjb250ZXh0RGlkQ2hhbmdlOiBmdW5jdGlvbiAoKSB7CisgICAgICB0aGlzLmN1cnJlbnRN
b2RlbCA9IHRoaXMuY29udGV4dDsKKyAgICB9LAorCisgICAgLyoqCisgICAgICBBIGhvb2sgeW91
IGNhbiBpbXBsZW1lbnQgdG8gY29udmVydCB0aGUgVVJMIGludG8gdGhlIG1vZGVsIGZvcgorICAg
ICAgdGhpcyByb3V0ZS4KKyAgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICBBcHAuUm91dGVyLm1h
cChmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5yb3V0ZSgncG9zdCcsIHsgcGF0aDogJy9wb3N0
cy86cG9zdF9pZCcgfSk7CisgICAgICB9KTsKKyAgICAgIGBgYAorICAgICAgIFRoZSBtb2RlbCBm
b3IgdGhlIGBwb3N0YCByb3V0ZSBpcyBgc3RvcmUuZmluZFJlY29yZCgncG9zdCcsIHBhcmFtcy5w
b3N0X2lkKWAuCisgICAgICAgQnkgZGVmYXVsdCwgaWYgeW91ciByb3V0ZSBoYXMgYSBkeW5hbWlj
IHNlZ21lbnQgZW5kaW5nIGluIGBfaWRgOgorICAgICAgICogVGhlIG1vZGVsIGNsYXNzIGlzIGRl
dGVybWluZWQgZnJvbSB0aGUgc2VnbWVudCAoYHBvc3RfaWRgJ3MKKyAgICAgICAgY2xhc3MgaXMg
YEFwcC5Qb3N0YCkKKyAgICAgICogVGhlIGZpbmQgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgbW9k
ZWwgY2xhc3Mgd2l0aCB0aGUgdmFsdWUgb2YKKyAgICAgICAgdGhlIGR5bmFtaWMgc2VnbWVudC4K
KyAgICAgICBOb3RlIHRoYXQgZm9yIHJvdXRlcyB3aXRoIGR5bmFtaWMgc2VnbWVudHMsIHRoaXMg
aG9vayBpcyBub3QgYWx3YXlzCisgICAgICBleGVjdXRlZC4gSWYgdGhlIHJvdXRlIGlzIGVudGVy
ZWQgdGhyb3VnaCBhIHRyYW5zaXRpb24gKGUuZy4gd2hlbgorICAgICAgdXNpbmcgdGhlIGBsaW5r
LXRvYCBIYW5kbGViYXJzIGhlbHBlciBvciB0aGUgYHRyYW5zaXRpb25Ub2AgbWV0aG9kCisgICAg
ICBvZiByb3V0ZXMpLCBhbmQgYSBtb2RlbCBjb250ZXh0IGlzIGFscmVhZHkgcHJvdmlkZWQgdGhp
cyBob29rCisgICAgICBpcyBub3QgY2FsbGVkLgorICAgICAgIEEgbW9kZWwgY29udGV4dCBkb2Vz
IG5vdCBpbmNsdWRlIGEgcHJpbWl0aXZlIHN0cmluZyBvciBudW1iZXIsCisgICAgICB3aGljaCBk
b2VzIGNhdXNlIHRoZSBtb2RlbCBob29rIHRvIGJlIGNhbGxlZC4KKyAgICAgICBSb3V0ZXMgd2l0
aG91dCBkeW5hbWljIHNlZ21lbnRzIHdpbGwgYWx3YXlzIGV4ZWN1dGUgdGhlIG1vZGVsIGhvb2su
CisgICAgICAgYGBgamF2YXNjcmlwdAorICAgICAgLy8gbm8gZHluYW1pYyBzZWdtZW50LCBtb2Rl
bCBob29rIGFsd2F5cyBjYWxsZWQKKyAgICAgIHRoaXMudHJhbnNpdGlvblRvKCdwb3N0cycpOwor
ICAgICAgIC8vIG1vZGVsIHBhc3NlZCBpbiwgc28gbW9kZWwgaG9vayBub3QgY2FsbGVkCisgICAg
ICB0aGVQb3N0ID0gc3RvcmUuZmluZFJlY29yZCgncG9zdCcsIDEpOworICAgICAgdGhpcy50cmFu
c2l0aW9uVG8oJ3Bvc3QnLCB0aGVQb3N0KTsKKyAgICAgICAvLyBpbnRlZ2VyIHBhc3NlZCBpbiwg
bW9kZWwgaG9vayBpcyBjYWxsZWQKKyAgICAgIHRoaXMudHJhbnNpdGlvblRvKCdwb3N0JywgMSk7
CisgICAgICAgLy8gbW9kZWwgaWQgcGFzc2VkIGluLCBtb2RlbCBob29rIGlzIGNhbGxlZAorICAg
ICAgLy8gdXNlZnVsIGZvciBmb3JjaW5nIHRoZSBob29rIHRvIGV4ZWN1dGUKKyAgICAgIHRoZVBv
c3QgPSBzdG9yZS5maW5kUmVjb3JkKCdwb3N0JywgMSk7CisgICAgICB0aGlzLnRyYW5zaXRpb25U
bygncG9zdCcsIHRoZVBvc3QuaWQpOworICAgICAgYGBgCisgICAgICAgIFRoaXMgaG9vayBmb2xs
b3dzIHRoZSBhc3luY2hyb25vdXMvcHJvbWlzZSBzZW1hbnRpY3MKKyAgICAgIGRlc2NyaWJlZCBp
biB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgYGJlZm9yZU1vZGVsYC4gSW4gcGFydGljdWxhciwKKyAg
ICAgIGlmIGEgcHJvbWlzZSByZXR1cm5lZCBmcm9tIGBtb2RlbGAgZmFpbHMsIHRoZSBlcnJvciB3
aWxsIGJlCisgICAgICBoYW5kbGVkIGJ5IHRoZSBgZXJyb3JgIGhvb2sgb24gYEVtYmVyLlJvdXRl
YC4KKyAgICAgICBFeGFtcGxlCisgICAgICAgYGBgamF2YXNjcmlwdAorICAgICAgQXBwLlBvc3RS
b3V0ZSA9IEVtYmVyLlJvdXRlLmV4dGVuZCh7CisgICAgICAgIG1vZGVsOiBmdW5jdGlvbihwYXJh
bXMpIHsKKyAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5maW5kUmVjb3JkKCdwb3N0JywgcGFy
YW1zLnBvc3RfaWQpOworICAgICAgICB9CisgICAgICB9KTsKKyAgICAgIGBgYAorICAgICAgIEBt
ZXRob2QgbW9kZWwKKyAgICAgIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgdGhlIHBhcmFtZXRlcnMg
ZXh0cmFjdGVkIGZyb20gdGhlIFVSTAorICAgICAgQHBhcmFtIHtUcmFuc2l0aW9ufSB0cmFuc2l0
aW9uCisgICAgICBAcmV0dXJuIHtPYmplY3R8UHJvbWlzZX0gdGhlIG1vZGVsIGZvciB0aGlzIHJv
dXRlLiBJZgorICAgICAgICBhIHByb21pc2UgaXMgcmV0dXJuZWQsIHRoZSB0cmFuc2l0aW9uIHdp
bGwgcGF1c2UgdW50aWwKKyAgICAgICAgdGhlIHByb21pc2UgcmVzb2x2ZXMsIGFuZCB0aGUgcmVz
b2x2ZWQgdmFsdWUgb2YgdGhlIHByb21pc2UKKyAgICAgICAgd2lsbCBiZSB1c2VkIGFzIHRoZSBt
b2RlbCBmb3IgdGhpcyByb3V0ZS4KKyAgICAgIEBwdWJsaWMKKyAgICAqLworICAgIG1vZGVsOiBm
dW5jdGlvbiAocGFyYW1zLCB0cmFuc2l0aW9uKSB7CisgICAgICB2YXIgbWF0Y2gsIG5hbWUsIHNh
d1BhcmFtcywgdmFsdWU7CisgICAgICB2YXIgcXVlcnlQYXJhbXMgPSBfZW1iZXJNZXRhbFByb3Bl
cnR5X2dldC5nZXQodGhpcywgJ19xcC5tYXAnKTsKKworICAgICAgZm9yICh2YXIgcHJvcCBpbiBw
YXJhbXMpIHsKKyAgICAgICAgaWYgKHByb3AgPT09ICdxdWVyeVBhcmFtcycgfHwgcXVlcnlQYXJh
bXMgJiYgcHJvcCBpbiBxdWVyeVBhcmFtcykgeworICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKG1hdGNoID0gcHJvcC5tYXRjaCgvXiguKilfaWQkLykpIHsKKyAg
ICAgICAgICBuYW1lID0gbWF0Y2hbMV07CisgICAgICAgICAgdmFsdWUgPSBwYXJhbXNbcHJvcF07
CisgICAgICAgIH0KKyAgICAgICAgc2F3UGFyYW1zID0gdHJ1ZTsKKyAgICAgIH0KKworICAgICAg
aWYgKCFuYW1lICYmIHNhd1BhcmFtcykgeworICAgICAgICByZXR1cm4gX2VtYmVyUnVudGltZUNv
cHkuZGVmYXVsdChwYXJhbXMpOworICAgICAgfSBlbHNlIGlmICghbmFtZSkgeworICAgICAgICBp
ZiAodHJhbnNpdGlvbi5yZXNvbHZlSW5kZXggPCAxKSB7CisgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgdmFyIHBhcmVudE1vZGVsID0gdHJhbnNpdGlvbi5zdGF0ZS5oYW5k
bGVySW5mb3NbdHJhbnNpdGlvbi5yZXNvbHZlSW5kZXggLSAxXS5jb250ZXh0OworCisgICAgICAg
IHJldHVybiBwYXJlbnRNb2RlbDsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHRoaXMuZmluZE1v
ZGVsKG5hbWUsIHZhbHVlKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICBAcHJpdmF0ZQorICAg
ICAgQG1ldGhvZCBkZXNlcmlhbGl6ZQorICAgICAgQHBhcmFtIHtPYmplY3R9IHBhcmFtcyB0aGUg
cGFyYW1ldGVycyBleHRyYWN0ZWQgZnJvbSB0aGUgVVJMCisgICAgICBAcGFyYW0ge1RyYW5zaXRp
b259IHRyYW5zaXRpb24KKyAgICAgIEByZXR1cm4ge09iamVjdHxQcm9taXNlfSB0aGUgbW9kZWwg
Zm9yIHRoaXMgcm91dGUuCisgICAgICAgUm91dGVyLmpzIGhvb2suCisgICAgICovCisgICAgZGVz
ZXJpYWxpemU6IGZ1bmN0aW9uIChwYXJhbXMsIHRyYW5zaXRpb24pIHsKKyAgICAgIHJldHVybiB0
aGlzLm1vZGVsKHRoaXMucGFyYW1zRm9yKHRoaXMucm91dGVOYW1lKSwgdHJhbnNpdGlvbik7Cisg
ICAgfSwKKworICAgIC8qKgorICAgICAgIEBtZXRob2QgZmluZE1vZGVsCisgICAgICBAcGFyYW0g
e1N0cmluZ30gdHlwZSB0aGUgbW9kZWwgdHlwZQorICAgICAgQHBhcmFtIHtPYmplY3R9IHZhbHVl
IHRoZSB2YWx1ZSBwYXNzZWQgdG8gZmluZAorICAgICAgQHByaXZhdGUKKyAgICAqLworICAgIGZp
bmRNb2RlbDogZnVuY3Rpb24gKCkgeworICAgICAgdmFyIHN0b3JlID0gX2VtYmVyTWV0YWxQcm9w
ZXJ0eV9nZXQuZ2V0KHRoaXMsICdzdG9yZScpOworICAgICAgcmV0dXJuIHN0b3JlLmZpbmQuYXBw
bHkoc3RvcmUsIGFyZ3VtZW50cyk7CisgICAgfSwKKworICAgIC8qKgorICAgICAgU3RvcmUgcHJv
cGVydHkgcHJvdmlkZXMgYSBob29rIGZvciBkYXRhIHBlcnNpc3RlbmNlIGxpYnJhcmllcyB0byBp
bmplY3QgdGhlbXNlbHZlcy4KKyAgICAgICBCeSBkZWZhdWx0LCB0aGlzIHN0b3JlIHByb3BlcnR5
IHByb3ZpZGVzIHRoZSBleGFjdCBzYW1lIGZ1bmN0aW9uYWxpdHkgcHJldmlvdXNseQorICAgICAg
aW4gdGhlIG1vZGVsIGhvb2suCisgICAgICAgQ3VycmVudGx5LCB0aGUgcmVxdWlyZWQgaW50ZXJm
YWNlIGlzOgorICAgICAgIGBzdG9yZS5maW5kKG1vZGVsTmFtZSwgZmluZEFyZ3VtZW50cylgCisg
ICAgICAgQG1ldGhvZCBzdG9yZQorICAgICAgQHBhcmFtIHtPYmplY3R9IHN0b3JlCisgICAgICBA
cHJpdmF0ZQorICAgICovCisgICAgc3RvcmU6IF9lbWJlck1ldGFsQ29tcHV0ZWQuY29tcHV0ZWQo
ZnVuY3Rpb24gKCkgeworICAgICAgdmFyIG93bmVyID0gX2NvbnRhaW5lck93bmVyLmdldE93bmVy
KHRoaXMpOworICAgICAgdmFyIHJvdXRlTmFtZSA9IHRoaXMucm91dGVOYW1lOworICAgICAgdmFy
IG5hbWVzcGFjZSA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAncm91dGVyLm5h
bWVzcGFjZScpOworCisgICAgICByZXR1cm4geworICAgICAgICBmaW5kOiBmdW5jdGlvbiAobmFt
ZSwgdmFsdWUpIHsKKyAgICAgICAgICB2YXIgbW9kZWxDbGFzcyA9IG93bmVyLl9sb29rdXBGYWN0
b3J5KCdtb2RlbDonICsgbmFtZSk7CisKKyAgICAgICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2Vy
dCgnWW91IHVzZWQgdGhlIGR5bmFtaWMgc2VnbWVudCAnICsgbmFtZSArICdfaWQgaW4geW91ciBy
b3V0ZSAnICsgcm91dGVOYW1lICsgJywgYnV0ICcgKyBuYW1lc3BhY2UgKyAnLicgKyBfZW1iZXJS
dW50aW1lU3lzdGVtU3RyaW5nLmNsYXNzaWZ5KG5hbWUpICsgJyBkaWQgbm90IGV4aXN0IGFuZCB5
b3UgZGlkIG5vdCBvdmVycmlkZSB5b3VyIHJvdXRlXCdzIGBtb2RlbGAgaG9vay4nLCAhIW1vZGVs
Q2xhc3MpOworCisgICAgICAgICAgaWYgKCFtb2RlbENsYXNzKSB7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgfQorCisgICAgICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoX2Vt
YmVyUnVudGltZVN5c3RlbVN0cmluZy5jbGFzc2lmeShuYW1lKSArICcgaGFzIG5vIG1ldGhvZCBg
ZmluZGAuJywgdHlwZW9mIG1vZGVsQ2xhc3MuZmluZCA9PT0gJ2Z1bmN0aW9uJyk7CisKKyAgICAg
ICAgICByZXR1cm4gbW9kZWxDbGFzcy5maW5kKHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgfTsK
KyAgICB9KSwKKworICAgIC8qKgorICAgICAgQSBob29rIHlvdSBjYW4gaW1wbGVtZW50IHRvIGNv
bnZlcnQgdGhlIHJvdXRlJ3MgbW9kZWwgaW50byBwYXJhbWV0ZXJzCisgICAgICBmb3IgdGhlIFVS
TC4KKyAgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICBBcHAuUm91dGVyLm1hcChmdW5jdGlvbigp
IHsKKyAgICAgICAgdGhpcy5yb3V0ZSgncG9zdCcsIHsgcGF0aDogJy9wb3N0cy86cG9zdF9pZCcg
fSk7CisgICAgICB9KTsKKyAgICAgICBBcHAuUG9zdFJvdXRlID0gRW1iZXIuUm91dGUuZXh0ZW5k
KHsKKyAgICAgICAgbW9kZWw6IGZ1bmN0aW9uKHBhcmFtcykgeworICAgICAgICAgIC8vIHRoZSBz
ZXJ2ZXIgcmV0dXJucyBgeyBpZDogMTIgfWAKKyAgICAgICAgICByZXR1cm4gRW1iZXIuJC5nZXRK
U09OKCcvcG9zdHMvJyArIHBhcmFtcy5wb3N0X2lkKTsKKyAgICAgICAgfSwKKyAgICAgICAgIHNl
cmlhbGl6ZTogZnVuY3Rpb24obW9kZWwpIHsKKyAgICAgICAgICAvLyB0aGlzIHdpbGwgbWFrZSB0
aGUgVVJMIGAvcG9zdHMvMTJgCisgICAgICAgICAgcmV0dXJuIHsgcG9zdF9pZDogbW9kZWwuaWQg
fTsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgICBgYGAKKyAgICAgICBUaGUgZGVmYXVsdCBg
c2VyaWFsaXplYCBtZXRob2Qgd2lsbCBpbnNlcnQgdGhlIG1vZGVsJ3MgYGlkYCBpbnRvIHRoZQor
ICAgICAgcm91dGUncyBkeW5hbWljIHNlZ21lbnQgKGluIHRoaXMgY2FzZSwgYDpwb3N0X2lkYCkg
aWYgdGhlIHNlZ21lbnQgY29udGFpbnMgJ19pZCcuCisgICAgICBJZiB0aGUgcm91dGUgaGFzIG11
bHRpcGxlIGR5bmFtaWMgc2VnbWVudHMgb3IgZG9lcyBub3QgY29udGFpbiAnX2lkJywgYHNlcmlh
bGl6ZWAKKyAgICAgIHdpbGwgcmV0dXJuIGBFbWJlci5nZXRQcm9wZXJ0aWVzKG1vZGVsLCBwYXJh
bXMpYAorICAgICAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIGB0cmFuc2l0aW9uVG9gIGlz
IGNhbGxlZCB3aXRoIGEgY29udGV4dAorICAgICAgaW4gb3JkZXIgdG8gcG9wdWxhdGUgdGhlIFVS
TC4KKyAgICAgICBAbWV0aG9kIHNlcmlhbGl6ZQorICAgICAgQHBhcmFtIHtPYmplY3R9IG1vZGVs
IHRoZSByb3V0ZXMgbW9kZWwKKyAgICAgIEBwYXJhbSB7QXJyYXl9IHBhcmFtcyBhbiBBcnJheSBv
ZiBwYXJhbWV0ZXIgbmFtZXMgZm9yIHRoZSBjdXJyZW50CisgICAgICAgIHJvdXRlIChpbiB0aGUg
ZXhhbXBsZSwgYFsncG9zdF9pZCddYC4KKyAgICAgIEByZXR1cm4ge09iamVjdH0gdGhlIHNlcmlh
bGl6ZWQgcGFyYW1ldGVycworICAgICAgQHB1YmxpYworICAgICovCisgICAgc2VyaWFsaXplOiBm
dW5jdGlvbiAobW9kZWwsIHBhcmFtcykgeworICAgICAgaWYgKHBhcmFtcy5sZW5ndGggPCAxKSB7
CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIGlmICghbW9kZWwpIHsKKyAgICAgICAg
cmV0dXJuOworICAgICAgfQorCisgICAgICB2YXIgbmFtZSA9IHBhcmFtc1swXTsKKyAgICAgIHZh
ciBvYmplY3QgPSB7fTsKKworICAgICAgaWYgKHBhcmFtcy5sZW5ndGggPT09IDEpIHsKKyAgICAg
ICAgaWYgKG5hbWUgaW4gbW9kZWwpIHsKKyAgICAgICAgICBvYmplY3RbbmFtZV0gPSBfZW1iZXJN
ZXRhbFByb3BlcnR5X2dldC5nZXQobW9kZWwsIG5hbWUpOworICAgICAgICB9IGVsc2UgaWYgKC9f
aWQkLy50ZXN0KG5hbWUpKSB7CisgICAgICAgICAgb2JqZWN0W25hbWVdID0gX2VtYmVyTWV0YWxQ
cm9wZXJ0eV9nZXQuZ2V0KG1vZGVsLCAnaWQnKTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsK
KyAgICAgICAgb2JqZWN0ID0gX2VtYmVyTWV0YWxHZXRfcHJvcGVydGllcy5kZWZhdWx0KG1vZGVs
LCBwYXJhbXMpOworICAgICAgfQorCisgICAgICByZXR1cm4gb2JqZWN0OworICAgIH0sCisKKyAg
ICAvKioKKyAgICAgIEEgaG9vayB5b3UgY2FuIHVzZSB0byBzZXR1cCB0aGUgY29udHJvbGxlciBm
b3IgdGhlIGN1cnJlbnQgcm91dGUuCisgICAgICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdpdGgg
dGhlIGNvbnRyb2xsZXIgZm9yIHRoZSBjdXJyZW50IHJvdXRlIGFuZCB0aGUKKyAgICAgIG1vZGVs
IHN1cHBsaWVkIGJ5IHRoZSBgbW9kZWxgIGhvb2suCisgICAgICAgQnkgZGVmYXVsdCwgdGhlIGBz
ZXR1cENvbnRyb2xsZXJgIGhvb2sgc2V0cyB0aGUgYG1vZGVsYCBwcm9wZXJ0eSBvZgorICAgICAg
dGhlIGNvbnRyb2xsZXIgdG8gdGhlIGBtb2RlbGAuCisgICAgICAgSWYgeW91IGltcGxlbWVudCB0
aGUgYHNldHVwQ29udHJvbGxlcmAgaG9vayBpbiB5b3VyIFJvdXRlLCBpdCB3aWxsCisgICAgICBw
cmV2ZW50IHRoaXMgZGVmYXVsdCBiZWhhdmlvci4gSWYgeW91IHdhbnQgdG8gcHJlc2VydmUgdGhh
dCBiZWhhdmlvcgorICAgICAgd2hlbiBpbXBsZW1lbnRpbmcgeW91ciBgc2V0dXBDb250cm9sbGVy
YCBmdW5jdGlvbiwgbWFrZSBzdXJlIHRvIGNhbGwKKyAgICAgIGBfc3VwZXJgOgorICAgICAgIGBg
YGphdmFzY3JpcHQKKyAgICAgIEFwcC5QaG90b3NSb3V0ZSA9IEVtYmVyLlJvdXRlLmV4dGVuZCh7
CisgICAgICAgIG1vZGVsOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICByZXR1cm4gdGhpcy5zdG9y
ZS5maW5kQWxsKCdwaG90bycpOworICAgICAgICB9LAorICAgICAgICAgc2V0dXBDb250cm9sbGVy
OiBmdW5jdGlvbihjb250cm9sbGVyLCBtb2RlbCkgeworICAgICAgICAgIC8vIENhbGwgX3N1cGVy
IGZvciBkZWZhdWx0IGJlaGF2aW9yCisgICAgICAgICAgdGhpcy5fc3VwZXIoY29udHJvbGxlciwg
bW9kZWwpOworICAgICAgICAgIC8vIEltcGxlbWVudCB5b3VyIGN1c3RvbSBzZXR1cCBhZnRlcgor
ICAgICAgICAgIHRoaXMuY29udHJvbGxlckZvcignYXBwbGljYXRpb24nKS5zZXQoJ3Nob3dpbmdQ
aG90b3MnLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgICBgYGAKKyAgICAgICBU
aGUgcHJvdmlkZWQgY29udHJvbGxlciB3aWxsIGJlIG9uZSByZXNvbHZlZCBiYXNlZCBvbiB0aGUg
bmFtZQorICAgICAgb2YgdGhpcyByb3V0ZS4KKyAgICAgICBJZiBubyBleHBsaWNpdCBjb250cm9s
bGVyIGlzIGRlZmluZWQsIEVtYmVyIHdpbGwgYXV0b21hdGljYWxseSBjcmVhdGUgb25lLgorICAg
ICAgIEFzIGFuIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSByb3V0ZXI6CisgICAgICAgYGBgamF2YXNj
cmlwdAorICAgICAgQXBwLlJvdXRlci5tYXAoZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMucm91
dGUoJ3Bvc3QnLCB7IHBhdGg6ICcvcG9zdHMvOnBvc3RfaWQnIH0pOworICAgICAgfSk7CisgICAg
ICBgYGAKKyAgICAgICBGb3IgdGhlIGBwb3N0YCByb3V0ZSwgYSBjb250cm9sbGVyIG5hbWVkIGBB
cHAuUG9zdENvbnRyb2xsZXJgIHdvdWxkCisgICAgICBiZSB1c2VkIGlmIGl0IGlzIGRlZmluZWQu
IElmIGl0IGlzIG5vdCBkZWZpbmVkLCBhIGJhc2ljIGBFbWJlci5Db250cm9sbGVyYAorICAgICAg
aW5zdGFuY2Ugd291bGQgYmUgdXNlZC4KKyAgICAgICBFeGFtcGxlCisgICAgICAgYGBgamF2YXNj
cmlwdAorICAgICAgQXBwLlBvc3RSb3V0ZSA9IEVtYmVyLlJvdXRlLmV4dGVuZCh7CisgICAgICAg
IHNldHVwQ29udHJvbGxlcjogZnVuY3Rpb24oY29udHJvbGxlciwgbW9kZWwpIHsKKyAgICAgICAg
ICBjb250cm9sbGVyLnNldCgnbW9kZWwnLCBtb2RlbCk7CisgICAgICAgIH0KKyAgICAgIH0pOwor
ICAgICAgYGBgCisgICAgICAgQG1ldGhvZCBzZXR1cENvbnRyb2xsZXIKKyAgICAgIEBwYXJhbSB7
Q29udHJvbGxlcn0gY29udHJvbGxlciBpbnN0YW5jZQorICAgICAgQHBhcmFtIHtPYmplY3R9IG1v
ZGVsCisgICAgICBAcHVibGljCisgICAgKi8KKyAgICBzZXR1cENvbnRyb2xsZXI6IGZ1bmN0aW9u
IChjb250cm9sbGVyLCBjb250ZXh0LCB0cmFuc2l0aW9uKSB7CisgICAgICBpZiAoY29udHJvbGxl
ciAmJiBjb250ZXh0ICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0
eV9zZXQuc2V0KGNvbnRyb2xsZXIsICdtb2RlbCcsIGNvbnRleHQpOworICAgICAgfQorICAgIH0s
CisKKyAgICAvKioKKyAgICAgIFJldHVybnMgdGhlIGNvbnRyb2xsZXIgZm9yIGEgcGFydGljdWxh
ciByb3V0ZSBvciBuYW1lLgorICAgICAgIFRoZSBjb250cm9sbGVyIGluc3RhbmNlIG11c3QgYWxy
ZWFkeSBoYXZlIGJlZW4gY3JlYXRlZCwgZWl0aGVyIHRocm91Z2ggZW50ZXJpbmcgdGhlCisgICAg
ICBhc3NvY2lhdGVkIHJvdXRlIG9yIHVzaW5nIGBnZW5lcmF0ZUNvbnRyb2xsZXJgLgorICAgICAg
IGBgYGphdmFzY3JpcHQKKyAgICAgIEFwcC5Qb3N0Um91dGUgPSBFbWJlci5Sb3V0ZS5leHRlbmQo
eworICAgICAgICBzZXR1cENvbnRyb2xsZXI6IGZ1bmN0aW9uKGNvbnRyb2xsZXIsIHBvc3QpIHsK
KyAgICAgICAgICB0aGlzLl9zdXBlcihjb250cm9sbGVyLCBwb3N0KTsKKyAgICAgICAgICB0aGlz
LmNvbnRyb2xsZXJGb3IoJ3Bvc3RzJykuc2V0KCdjdXJyZW50UG9zdCcsIHBvc3QpOworICAgICAg
ICB9CisgICAgICB9KTsKKyAgICAgIGBgYAorICAgICAgIEBtZXRob2QgY29udHJvbGxlckZvcgor
ICAgICAgQHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhlIG5hbWUgb2YgdGhlIHJvdXRlIG9yIGNvbnRy
b2xsZXIKKyAgICAgIEByZXR1cm4ge0VtYmVyLkNvbnRyb2xsZXJ9CisgICAgICBAcHVibGljCisg
ICAgKi8KKyAgICBjb250cm9sbGVyRm9yOiBmdW5jdGlvbiAobmFtZSwgX3NraXBBc3NlcnQpIHsK
KyAgICAgIHZhciBvd25lciA9IF9jb250YWluZXJPd25lci5nZXRPd25lcih0aGlzKTsKKyAgICAg
IHZhciByb3V0ZSA9IG93bmVyLmxvb2t1cCgncm91dGU6JyArIG5hbWUpOworICAgICAgdmFyIGNv
bnRyb2xsZXI7CisKKyAgICAgIGlmIChyb3V0ZSAmJiByb3V0ZS5jb250cm9sbGVyTmFtZSkgewor
ICAgICAgICBuYW1lID0gcm91dGUuY29udHJvbGxlck5hbWU7CisgICAgICB9CisKKyAgICAgIGNv
bnRyb2xsZXIgPSBvd25lci5sb29rdXAoJ2NvbnRyb2xsZXI6JyArIG5hbWUpOworCisgICAgICAv
LyBOT1RFOiBXZSdyZSBzcGVjaWZpY2FsbHkgY2hlY2tpbmcgdGhhdCBza2lwQXNzZXJ0IGlzIHRy
dWUsIGJlY2F1c2UgYWNjb3JkaW5nCisgICAgICAvLyAgIHRvIHRoZSBvbGQgQVBJIHRoZSBzZWNv
bmQgcGFyYW1ldGVyIHdhcyBtb2RlbC4gV2UgZG8gbm90IHdhbnQgcGVvcGxlIHdobworICAgICAg
Ly8gICBwYXNzZWQgYSBtb2RlbCB0byBza2lwIHRoZSBhc3NlcnRpb24uCisgICAgICBfZW1iZXJN
ZXRhbERlYnVnLmFzc2VydCgnVGhlIGNvbnRyb2xsZXIgbmFtZWQgXCcnICsgbmFtZSArICdcJyBj
b3VsZCBub3QgYmUgZm91bmQuIE1ha2Ugc3VyZSB0aGF0IHRoaXMgcm91dGUgZXhpc3RzIGFuZCBo
YXMgYWxyZWFkeSBiZWVuIGVudGVyZWQgYXQgbGVhc3Qgb25jZS4gSWYgeW91IGFyZSBhY2Nlc3Np
bmcgYSBjb250cm9sbGVyIG5vdCBhc3NvY2lhdGVkIHdpdGggYSByb3V0ZSwgbWFrZSBzdXJlIHRo
ZSBjb250cm9sbGVyIGNsYXNzIGlzIGV4cGxpY2l0bHkgZGVmaW5lZC4nLCBjb250cm9sbGVyIHx8
IF9za2lwQXNzZXJ0ID09PSB0cnVlKTsKKworICAgICAgcmV0dXJuIGNvbnRyb2xsZXI7CisgICAg
fSwKKworICAgIC8qKgorICAgICAgR2VuZXJhdGVzIGEgY29udHJvbGxlciBmb3IgYSByb3V0ZS4K
KyAgICAgICBFeGFtcGxlCisgICAgICAgYGBgamF2YXNjcmlwdAorICAgICAgQXBwLlBvc3RSb3V0
ZSA9IEVtYmVyLlJvdXRlLmV4dGVuZCh7CisgICAgICAgIHNldHVwQ29udHJvbGxlcjogZnVuY3Rp
b24oY29udHJvbGxlciwgcG9zdCkgeworICAgICAgICAgIHRoaXMuX3N1cGVyKGNvbnRyb2xsZXIs
IHBvc3QpOworICAgICAgICAgIHRoaXMuZ2VuZXJhdGVDb250cm9sbGVyKCdwb3N0cycsIHBvc3Qp
OworICAgICAgICB9CisgICAgICB9KTsKKyAgICAgIGBgYAorICAgICAgIEBtZXRob2QgZ2VuZXJh
dGVDb250cm9sbGVyCisgICAgICBAcGFyYW0ge1N0cmluZ30gbmFtZSB0aGUgbmFtZSBvZiB0aGUg
Y29udHJvbGxlcgorICAgICAgQHBhcmFtIHtPYmplY3R9IG1vZGVsIHRoZSBtb2RlbCB0byBpbmZl
ciB0aGUgdHlwZSBvZiB0aGUgY29udHJvbGxlciAob3B0aW9uYWwpCisgICAgICBAcHJpdmF0ZQor
ICAgICovCisgICAgZ2VuZXJhdGVDb250cm9sbGVyOiBmdW5jdGlvbiAobmFtZSwgbW9kZWwpIHsK
KyAgICAgIHZhciBvd25lciA9IF9jb250YWluZXJPd25lci5nZXRPd25lcih0aGlzKTsKKworICAg
ICAgbW9kZWwgPSBtb2RlbCB8fCB0aGlzLm1vZGVsRm9yKG5hbWUpOworCisgICAgICByZXR1cm4g
X2VtYmVyUm91dGluZ1N5c3RlbUdlbmVyYXRlX2NvbnRyb2xsZXIuZGVmYXVsdChvd25lciwgbmFt
ZSwgbW9kZWwpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgIFJldHVybnMgdGhlIHJlc29sdmVk
IG1vZGVsIG9mIGEgcGFyZW50IChvciBhbnkgYW5jZXN0b3IpIHJvdXRlCisgICAgICBpbiBhIHJv
dXRlIGhpZXJhcmNoeS4gIER1cmluZyBhIHRyYW5zaXRpb24sIGFsbCByb3V0ZXMKKyAgICAgIG11
c3QgcmVzb2x2ZSBhIG1vZGVsIG9iamVjdCwgYW5kIGlmIGEgcm91dGUKKyAgICAgIG5lZWRzIGFj
Y2VzcyB0byBhIHBhcmVudCByb3V0ZSdzIG1vZGVsIGluIG9yZGVyIHRvCisgICAgICByZXNvbHZl
IGEgbW9kZWwgKG9yIGp1c3QgcmV1c2UgdGhlIG1vZGVsIGZyb20gYSBwYXJlbnQpLAorICAgICAg
aXQgY2FuIGNhbGwgYHRoaXMubW9kZWxGb3IodGhlTmFtZU9mUGFyZW50Um91dGUpYCB0bworICAg
ICAgcmV0cmlldmUgaXQuIElmIHRoZSBhbmNlc3RvciByb3V0ZSdzIG1vZGVsIHdhcyBhIHByb21p
c2UsCisgICAgICBpdHMgcmVzb2x2ZWQgcmVzdWx0IGlzIHJldHVybmVkLgorICAgICAgIEV4YW1w
bGUKKyAgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICBBcHAuUm91dGVyLm1hcChmdW5jdGlvbigp
IHsKKyAgICAgICAgICB0aGlzLnJvdXRlKCdwb3N0JywgeyBwYXRoOiAnL3Bvc3QvOnBvc3RfaWQn
IH0sIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdGhpcy5yb3V0ZSgnY29tbWVudHMnLCB7IHJl
c2V0TmFtZXNwYWNlOiB0cnVlIH0pOworICAgICAgICAgIH0pOworICAgICAgfSk7CisgICAgICAg
QXBwLkNvbW1lbnRzUm91dGUgPSBFbWJlci5Sb3V0ZS5leHRlbmQoeworICAgICAgICAgIGFmdGVy
TW9kZWw6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdGhpcy5zZXQoJ3Bvc3QnLCB0aGlzLm1v
ZGVsRm9yKCdwb3N0JykpOworICAgICAgICAgIH0KKyAgICAgIH0pOworICAgICAgYGBgCisgICAg
ICAgQG1ldGhvZCBtb2RlbEZvcgorICAgICAgQHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhlIG5hbWUg
b2YgdGhlIHJvdXRlCisgICAgICBAcmV0dXJuIHtPYmplY3R9IHRoZSBtb2RlbCBvYmplY3QKKyAg
ICAgIEBwdWJsaWMKKyAgICAqLworICAgIG1vZGVsRm9yOiBmdW5jdGlvbiAobmFtZSkgeworICAg
ICAgdmFyIHJvdXRlID0gX2NvbnRhaW5lck93bmVyLmdldE93bmVyKHRoaXMpLmxvb2t1cCgncm91
dGU6JyArIG5hbWUpOworICAgICAgdmFyIHRyYW5zaXRpb24gPSB0aGlzLnJvdXRlciA/IHRoaXMu
cm91dGVyLnJvdXRlci5hY3RpdmVUcmFuc2l0aW9uIDogbnVsbDsKKworICAgICAgLy8gSWYgd2Ug
YXJlIG1pZC10cmFuc2l0aW9uLCB3ZSB3YW50IHRvIHRyeSBhbmQgbG9vayB1cAorICAgICAgLy8g
cmVzb2x2ZWQgcGFyZW50IGNvbnRleHRzIG9uIHRoZSBjdXJyZW50IHRyYW5zaXRpb25FdmVudC4K
KyAgICAgIGlmICh0cmFuc2l0aW9uKSB7CisgICAgICAgIHZhciBtb2RlbExvb2t1cE5hbWUgPSBy
b3V0ZSAmJiByb3V0ZS5yb3V0ZU5hbWUgfHwgbmFtZTsKKyAgICAgICAgaWYgKHRyYW5zaXRpb24u
cmVzb2x2ZWRNb2RlbHMuaGFzT3duUHJvcGVydHkobW9kZWxMb29rdXBOYW1lKSkgeworICAgICAg
ICAgIHJldHVybiB0cmFuc2l0aW9uLnJlc29sdmVkTW9kZWxzW21vZGVsTG9va3VwTmFtZV07Cisg
ICAgICAgIH0KKyAgICAgIH0KKworICAgICAgcmV0dXJuIHJvdXRlICYmIHJvdXRlLmN1cnJlbnRN
b2RlbDsKKyAgICB9LAorCisgICAgLyoqCisgICAgICBBIGhvb2sgeW91IGNhbiB1c2UgdG8gcmVu
ZGVyIHRoZSB0ZW1wbGF0ZSBmb3IgdGhlIGN1cnJlbnQgcm91dGUuCisgICAgICAgVGhpcyBtZXRo
b2QgaXMgY2FsbGVkIHdpdGggdGhlIGNvbnRyb2xsZXIgZm9yIHRoZSBjdXJyZW50IHJvdXRlIGFu
ZCB0aGUKKyAgICAgIG1vZGVsIHN1cHBsaWVkIGJ5IHRoZSBgbW9kZWxgIGhvb2suIEJ5IGRlZmF1
bHQsIGl0IHJlbmRlcnMgdGhlIHJvdXRlJ3MKKyAgICAgIHRlbXBsYXRlLCBjb25maWd1cmVkIHdp
dGggdGhlIGNvbnRyb2xsZXIgZm9yIHRoZSByb3V0ZS4KKyAgICAgICBUaGlzIG1ldGhvZCBjYW4g
YmUgb3ZlcnJpZGRlbiB0byBzZXQgdXAgYW5kIHJlbmRlciBhZGRpdGlvbmFsIG9yCisgICAgICBh
bHRlcm5hdGl2ZSB0ZW1wbGF0ZXMuCisgICAgICAgYGBgamF2YXNjcmlwdAorICAgICAgQXBwLlBv
c3RzUm91dGUgPSBFbWJlci5Sb3V0ZS5leHRlbmQoeworICAgICAgICByZW5kZXJUZW1wbGF0ZTog
ZnVuY3Rpb24oY29udHJvbGxlciwgbW9kZWwpIHsKKyAgICAgICAgICB2YXIgZmF2Q29udHJvbGxl
ciA9IHRoaXMuY29udHJvbGxlckZvcignZmF2b3JpdGVQb3N0Jyk7CisgICAgICAgICAgIC8vIFJl
bmRlciB0aGUgYGZhdm9yaXRlUG9zdGAgdGVtcGxhdGUgaW50bworICAgICAgICAgIC8vIHRoZSBv
dXRsZXQgYHBvc3RzYCwgYW5kIGRpc3BsYXkgdGhlIGBmYXZvcml0ZVBvc3RgCisgICAgICAgICAg
Ly8gY29udHJvbGxlci4KKyAgICAgICAgICB0aGlzLnJlbmRlcignZmF2b3JpdGVQb3N0Jywgewor
ICAgICAgICAgICAgb3V0bGV0OiAncG9zdHMnLAorICAgICAgICAgICAgY29udHJvbGxlcjogZmF2
Q29udHJvbGxlcgorICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICB9KTsKKyAgICAgIGBg
YAorICAgICAgIEBtZXRob2QgcmVuZGVyVGVtcGxhdGUKKyAgICAgIEBwYXJhbSB7T2JqZWN0fSBj
b250cm9sbGVyIHRoZSByb3V0ZSdzIGNvbnRyb2xsZXIKKyAgICAgIEBwYXJhbSB7T2JqZWN0fSBt
b2RlbCB0aGUgcm91dGUncyBtb2RlbAorICAgICAgQHB1YmxpYworICAgICovCisgICAgcmVuZGVy
VGVtcGxhdGU6IGZ1bmN0aW9uIChjb250cm9sbGVyLCBtb2RlbCkgeworICAgICAgdGhpcy5yZW5k
ZXIoKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICBgcmVuZGVyYCBpcyB1c2VkIHRvIHJlbmRl
ciBhIHRlbXBsYXRlIGludG8gYSByZWdpb24gb2YgYW5vdGhlciB0ZW1wbGF0ZQorICAgICAgKGlu
ZGljYXRlZCBieSBhbiBge3tvdXRsZXR9fWApLiBgcmVuZGVyYCBpcyB1c2VkIGJvdGggZHVyaW5n
IHRoZSBlbnRyeQorICAgICAgcGhhc2Ugb2Ygcm91dGluZyAodmlhIHRoZSBgcmVuZGVyVGVtcGxh
dGVgIGhvb2spIGFuZCBsYXRlciBpbiByZXNwb25zZSB0bworICAgICAgdXNlciBpbnRlcmFjdGlv
bi4KKyAgICAgICBGb3IgZXhhbXBsZSwgZ2l2ZW4gdGhlIGZvbGxvd2luZyBtaW5pbWFsIHJvdXRl
ciBhbmQgdGVtcGxhdGVzOgorICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgIFJvdXRlci5tYXAo
ZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMucm91dGUoJ3Bob3RvcycpOworICAgICAgfSk7Cisg
ICAgICBgYGAKKyAgICAgICBgYGBoYW5kbGViYXJzCisgICAgICA8IS0tIGFwcGxpY2F0aW9uLmhi
cyAtLT4KKyAgICAgIDxkaXYgY2xhc3M9J3NvbWV0aGluZy1pbi10aGUtYXBwLWhicyc+CisgICAg
ICAgIHt7b3V0bGV0ICJhbk91dGxldE5hbWUifX0KKyAgICAgIDwvZGl2PgorICAgICAgYGBgCisg
ICAgICAgYGBgaGFuZGxlYmFycworICAgICAgPCEtLSBwaG90b3MuaGJzIC0tPgorICAgICAgPGgx
PlBob3RvczwvaDE+CisgICAgICBgYGAKKyAgICAgICBZb3UgY2FuIHJlbmRlciBgcGhvdG9zLmhi
c2AgaW50byB0aGUgYCJhbk91dGxldE5hbWUiYCBvdXRsZXQgb2YKKyAgICAgIGBhcHBsaWNhdGlv
bi5oYnNgIGJ5IGNhbGxpbmcgYHJlbmRlcmA6CisgICAgICAgYGBgamF2YXNjcmlwdAorICAgICAg
Ly8gcG9zdHMgcm91dGUKKyAgICAgIEVtYmVyLlJvdXRlLmV4dGVuZCh7CisgICAgICAgIHJlbmRl
clRlbXBsYXRlOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICB0aGlzLnJlbmRlcigncGhvdG9zJywg
eworICAgICAgICAgICAgaW50bzogJ2FwcGxpY2F0aW9uJywKKyAgICAgICAgICAgIG91dGxldDog
J2FuT3V0bGV0TmFtZScKKyAgICAgICAgICB9KQorICAgICAgICB9CisgICAgICB9KTsKKyAgICAg
IGBgYAorICAgICAgIGByZW5kZXJgIGFkZGl0aW9uYWxseSBhbGxvd3MgeW91IHRvIHN1cHBseSB3
aGljaCBgdmlld2AsIGBjb250cm9sbGVyYCwgYW5kCisgICAgICBgbW9kZWxgIG9iamVjdHMgc2hv
dWxkIGJlIGxvYWRlZCBhbmQgYXNzb2NpYXRlZCB3aXRoIHRoZSByZW5kZXJlZCB0ZW1wbGF0ZS4K
KyAgICAgICAgYGBgamF2YXNjcmlwdAorICAgICAgLy8gcG9zdHMgcm91dGUKKyAgICAgIEVtYmVy
LlJvdXRlLmV4dGVuZCh7CisgICAgICAgIHJlbmRlclRlbXBsYXRlOiBmdW5jdGlvbihjb250cm9s
bGVyLCBtb2RlbCl7CisgICAgICAgICAgdGhpcy5yZW5kZXIoJ3Bvc3RzJywgeyAgICAvLyB0aGUg
dGVtcGxhdGUgdG8gcmVuZGVyLCByZWZlcmVuY2VkIGJ5IG5hbWUKKyAgICAgICAgICAgIGludG86
ICdhcHBsaWNhdGlvbicsICAgIC8vIHRoZSB0ZW1wbGF0ZSB0byByZW5kZXIgaW50bywgcmVmZXJl
bmNlZCBieSBuYW1lCisgICAgICAgICAgICBvdXRsZXQ6ICdhbk91dGxldE5hbWUnLCAvLyB0aGUg
b3V0bGV0IGluc2lkZSBgb3B0aW9ucy50ZW1wbGF0ZWAgdG8gcmVuZGVyIGludG8uCisgICAgICAg
ICAgICB2aWV3OiAnYVZpZXdOYW1lJywgICAgICAvLyB0aGUgdmlldyB0byB1c2UgZm9yIHRoaXMg
dGVtcGxhdGUsIHJlZmVyZW5jZWQgYnkgbmFtZQorICAgICAgICAgICAgY29udHJvbGxlcjogJ3Nv
bWVDb250cm9sbGVyTmFtZScsIC8vIHRoZSBjb250cm9sbGVyIHRvIHVzZSBmb3IgdGhpcyB0ZW1w
bGF0ZSwgcmVmZXJlbmNlZCBieSBuYW1lCisgICAgICAgICAgICBtb2RlbDogbW9kZWwgICAgICAg
ICAgICAvLyB0aGUgbW9kZWwgdG8gc2V0IG9uIGBvcHRpb25zLmNvbnRyb2xsZXJgLgorICAgICAg
ICAgIH0pCisgICAgICAgIH0KKyAgICAgIH0pOworICAgICAgYGBgCisgICAgICAgVGhlIHN0cmlu
ZyB2YWx1ZXMgcHJvdmlkZWQgZm9yIHRoZSB0ZW1wbGF0ZSBuYW1lLCB2aWV3LCBhbmQgY29udHJv
bGxlcgorICAgICAgd2lsbCBldmVudHVhbGx5IHBhc3MgdGhyb3VnaCB0byB0aGUgcmVzb2x2ZXIg
Zm9yIGxvb2t1cC4gU2VlCisgICAgICBFbWJlci5SZXNvbHZlciBmb3IgaG93IHRoZXNlIGFyZSBt
YXBwZWQgdG8gSmF2YVNjcmlwdCBvYmplY3RzIGluIHlvdXIKKyAgICAgIGFwcGxpY2F0aW9uLgor
ICAgICAgIE5vdCBhbGwgb3B0aW9ucyBuZWVkIHRvIGJlIHBhc3NlZCB0byBgcmVuZGVyYC4gRGVm
YXVsdCB2YWx1ZXMgd2lsbCBiZSB1c2VkCisgICAgICBiYXNlZCBvbiB0aGUgbmFtZSBvZiB0aGUg
cm91dGUgc3BlY2lmaWVkIGluIHRoZSByb3V0ZXIgb3IgdGhlIFJvdXRlJ3MKKyAgICAgIGBjb250
cm9sbGVyTmFtZWAsIGB2aWV3TmFtZWAgYW5kIGB0ZW1wbGF0ZU5hbWVgIHByb3BlcnRpZXMuCisg
ICAgICAgRm9yIGV4YW1wbGU6CisgICAgICAgYGBgamF2YXNjcmlwdAorICAgICAgLy8gcm91dGVy
CisgICAgICBSb3V0ZXIubWFwKGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLnJvdXRlKCdpbmRl
eCcpOworICAgICAgICB0aGlzLnJvdXRlKCdwb3N0JywgeyBwYXRoOiAnL3Bvc3RzLzpwb3N0X2lk
JyB9KTsKKyAgICAgIH0pOworICAgICAgYGBgCisgICAgICAgYGBgamF2YXNjcmlwdAorICAgICAg
Ly8gcG9zdCByb3V0ZQorICAgICAgUG9zdFJvdXRlID0gQXBwLlJvdXRlLmV4dGVuZCh7CisgICAg
ICAgIHJlbmRlclRlbXBsYXRlOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICB0aGlzLnJlbmRlcigp
OyAvLyBhbGwgZGVmYXVsdHMgYXBwbHkKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgICBgYGAK
KyAgICAgICBUaGUgbmFtZSBvZiB0aGUgYFBvc3RSb3V0ZWAsIGRlZmluZWQgYnkgdGhlIHJvdXRl
ciwgaXMgYHBvc3RgLgorICAgICAgIFRoZSBmb2xsb3dpbmcgZXF1aXZhbGVudCBkZWZhdWx0IG9w
dGlvbnMgd2lsbCBiZSBhcHBsaWVkIHdoZW4KKyAgICAgIHRoZSBSb3V0ZSBjYWxscyBgcmVuZGVy
YDoKKyAgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICAvLworICAgICAgdGhpcy5yZW5kZXIoJ3Bv
c3QnLCB7ICAvLyB0aGUgdGVtcGxhdGUgbmFtZSBhc3NvY2lhdGVkIHdpdGggJ3Bvc3QnIFJvdXRl
CisgICAgICAgIGludG86ICdhcHBsaWNhdGlvbicsIC8vIHRoZSBwYXJlbnQgcm91dGUgdG8gJ3Bv
c3QnIFJvdXRlCisgICAgICAgIG91dGxldDogJ21haW4nLCAgICAgIC8vIHt7b3V0bGV0fX0gYW5k
IHt7b3V0bGV0ICdtYWluJ319IGFyZSBzeW5vbnltb3VzLAorICAgICAgICB2aWV3OiAncG9zdCcs
ICAgICAgICAvLyB0aGUgdmlldyBhc3NvY2lhdGVkIHdpdGggdGhlICdwb3N0JyBSb3V0ZQorICAg
ICAgICBjb250cm9sbGVyOiAncG9zdCcsICAvLyB0aGUgY29udHJvbGxlciBhc3NvY2lhdGVkIHdp
dGggdGhlICdwb3N0JyBSb3V0ZQorICAgICAgfSkKKyAgICAgIGBgYAorICAgICAgIEJ5IGRlZmF1
bHQgdGhlIGNvbnRyb2xsZXIncyBgbW9kZWxgIHdpbGwgYmUgdGhlIHJvdXRlJ3MgbW9kZWwsIHNv
IGl0IGRvZXMgbm90CisgICAgICBuZWVkIHRvIGJlIHBhc3NlZCB1bmxlc3MgeW91IHdpc2ggdG8g
Y2hhbmdlIHdoaWNoIG1vZGVsIGlzIGJlaW5nIHVzZWQuCisgICAgICAgQG1ldGhvZCByZW5kZXIK
KyAgICAgIEBwYXJhbSB7U3RyaW5nfSBuYW1lIHRoZSBuYW1lIG9mIHRoZSB0ZW1wbGF0ZSB0byBy
ZW5kZXIKKyAgICAgIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gdGhlIG9wdGlvbnMKKyAgICAg
IEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5pbnRvXSB0aGUgdGVtcGxhdGUgdG8gcmVuZGVyIGlu
dG8sCisgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlZCBieSBuYW1lLiBEZWZhdWx0cyB0
byB0aGUgcGFyZW50IHRlbXBsYXRlCisgICAgICBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMub3V0
bGV0XSB0aGUgb3V0bGV0IGluc2lkZSBgb3B0aW9ucy50ZW1wbGF0ZWAgdG8gcmVuZGVyIGludG8u
CisgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdHMgdG8gJ21haW4nCisgICAgICBAcGFyYW0g
e1N0cmluZ3xPYmplY3R9IFtvcHRpb25zLmNvbnRyb2xsZXJdIHRoZSBjb250cm9sbGVyIHRvIHVz
ZSBmb3IgdGhpcyB0ZW1wbGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VkIGJ5
IG5hbWUgb3IgYXMgYSBjb250cm9sbGVyIGluc3RhbmNlLiBEZWZhdWx0cyB0byB0aGUgUm91dGUn
cyBwYWlyZWQgY29udHJvbGxlcgorICAgICAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLm1vZGVs
XSB0aGUgbW9kZWwgb2JqZWN0IHRvIHNldCBvbiBgb3B0aW9ucy5jb250cm9sbGVyYC4KKyAgICAg
ICAgICAgICAgICAgICAgICBEZWZhdWx0cyB0byB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBSb3V0
ZSdzIG1vZGVsIGhvb2sKKyAgICAgIEBwdWJsaWMKKyAgICAqLworICAgIHJlbmRlcjogZnVuY3Rp
b24gKF9uYW1lLCBvcHRpb25zKSB7CisgICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnVGhl
IG5hbWUgaW4gdGhlIGdpdmVuIGFyZ3VtZW50cyBpcyB1bmRlZmluZWQnLCBhcmd1bWVudHMubGVu
Z3RoID4gMCA/ICFfZW1iZXJNZXRhbElzX25vbmUuZGVmYXVsdChhcmd1bWVudHNbMF0pIDogdHJ1
ZSk7CisKKyAgICAgIHZhciBuYW1lUGFzc2VkID0gdHlwZW9mIF9uYW1lID09PSAnc3RyaW5nJyAm
JiAhIV9uYW1lOworICAgICAgdmFyIGlzRGVmYXVsdFJlbmRlciA9IGFyZ3VtZW50cy5sZW5ndGgg
PT09IDAgfHwgX2VtYmVyTWV0YWxJc19lbXB0eS5kZWZhdWx0KGFyZ3VtZW50c1swXSk7CisgICAg
ICB2YXIgbmFtZTsKKworICAgICAgaWYgKHR5cGVvZiBfbmFtZSA9PT0gJ29iamVjdCcgJiYgIW9w
dGlvbnMpIHsKKyAgICAgICAgbmFtZSA9IHRoaXMucm91dGVOYW1lOworICAgICAgICBvcHRpb25z
ID0gX25hbWU7CisgICAgICB9IGVsc2UgeworICAgICAgICBuYW1lID0gX25hbWU7CisgICAgICB9
CisKKyAgICAgIHZhciByZW5kZXJPcHRpb25zID0gYnVpbGRSZW5kZXJPcHRpb25zKHRoaXMsIG5h
bWVQYXNzZWQsIGlzRGVmYXVsdFJlbmRlciwgbmFtZSwgb3B0aW9ucyk7CisgICAgICB0aGlzLmNv
bm5lY3Rpb25zLnB1c2gocmVuZGVyT3B0aW9ucyk7CisgICAgICBfZW1iZXJNZXRhbFJ1bl9sb29w
LmRlZmF1bHQub25jZSh0aGlzLnJvdXRlciwgJ19zZXRPdXRsZXRzJyk7CisgICAgfSwKKworICAg
IC8qKgorICAgICAgRGlzY29ubmVjdHMgYSB2aWV3IHRoYXQgaGFzIGJlZW4gcmVuZGVyZWQgaW50
byBhbiBvdXRsZXQuCisgICAgICAgWW91IG1heSBwYXNzIGFueSBvciBhbGwgb2YgdGhlIGZvbGxv
d2luZyBvcHRpb25zIHRvIGBkaXNjb25uZWN0T3V0bGV0YDoKKyAgICAgICAqIGBvdXRsZXRgOiB0
aGUgbmFtZSBvZiB0aGUgb3V0bGV0IHRvIGNsZWFyIChkZWZhdWx0OiAnbWFpbicpCisgICAgICAq
IGBwYXJlbnRWaWV3YDogdGhlIG5hbWUgb2YgdGhlIHZpZXcgY29udGFpbmluZyB0aGUgb3V0bGV0
IHRvIGNsZWFyCisgICAgICAgICAoZGVmYXVsdDogdGhlIHZpZXcgcmVuZGVyZWQgYnkgdGhlIHBh
cmVudCByb3V0ZSkKKyAgICAgICBFeGFtcGxlOgorICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAg
IEFwcC5BcHBsaWNhdGlvblJvdXRlID0gQXBwLlJvdXRlLmV4dGVuZCh7CisgICAgICAgIGFjdGlv
bnM6IHsKKyAgICAgICAgICBzaG93TW9kYWw6IGZ1bmN0aW9uKGV2dCkgeworICAgICAgICAgICAg
dGhpcy5yZW5kZXIoZXZ0Lm1vZGFsTmFtZSwgeworICAgICAgICAgICAgICBvdXRsZXQ6ICdtb2Rh
bCcsCisgICAgICAgICAgICAgIGludG86ICdhcHBsaWNhdGlvbicKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICAgIH0sCisgICAgICAgICAgaGlkZU1vZGFsOiBmdW5jdGlvbihldnQpIHsKKyAgICAg
ICAgICAgIHRoaXMuZGlzY29ubmVjdE91dGxldCh7CisgICAgICAgICAgICAgIG91dGxldDogJ21v
ZGFsJywKKyAgICAgICAgICAgICAgcGFyZW50VmlldzogJ2FwcGxpY2F0aW9uJworICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9KTsKKyAgICAgIGBgYAorICAg
ICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gcGFzcyB0aGUgYG91dGxldGAgbmFtZSBkaXJlY3Rs
eSBhcyBhIHN0cmluZy4KKyAgICAgICBFeGFtcGxlOgorICAgICAgIGBgYGphdmFzY3JpcHQKKyAg
ICAgIGhpZGVNb2RhbDogZnVuY3Rpb24oZXZ0KSB7CisgICAgICAgIHRoaXMuZGlzY29ubmVjdE91
dGxldCgnbW9kYWwnKTsKKyAgICAgIH0KKyAgICAgIGBgYAorICAgICAgIEBtZXRob2QgZGlzY29u
bmVjdE91dGxldAorICAgICAgQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBvcHRpb25zIHRoZSBvcHRp
b25zIGhhc2ggb3Igb3V0bGV0IG5hbWUKKyAgICAgIEBwdWJsaWMKKyAgICAqLworICAgIGRpc2Nv
bm5lY3RPdXRsZXQ6IGZ1bmN0aW9uIChvcHRpb25zKSB7CisgICAgICB2YXIgb3V0bGV0TmFtZTsK
KyAgICAgIHZhciBwYXJlbnRWaWV3OworICAgICAgaWYgKCFvcHRpb25zIHx8IHR5cGVvZiBvcHRp
b25zID09PSAnc3RyaW5nJykgeworICAgICAgICBvdXRsZXROYW1lID0gb3B0aW9uczsKKyAgICAg
IH0gZWxzZSB7CisgICAgICAgIG91dGxldE5hbWUgPSBvcHRpb25zLm91dGxldDsKKyAgICAgICAg
cGFyZW50VmlldyA9IG9wdGlvbnMucGFyZW50VmlldzsKKworICAgICAgICBpZiAob3B0aW9ucyAm
JiBPYmplY3Qua2V5cyhvcHRpb25zKS5pbmRleE9mKCdvdXRsZXQnKSAhPT0gLTEgJiYgdHlwZW9m
IG9wdGlvbnMub3V0bGV0ID09PSAndW5kZWZpbmVkJykgeworICAgICAgICAgIHRocm93IG5ldyBf
ZW1iZXJNZXRhbEVycm9yLmRlZmF1bHQoJ1lvdSBwYXNzZWQgdW5kZWZpbmVkIGFzIHRoZSBvdXRs
ZXQgbmFtZS4nKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgcGFyZW50VmlldyA9IHBhcmVu
dFZpZXcgJiYgcGFyZW50Vmlldy5yZXBsYWNlKC9cLy9nLCAnLicpOworICAgICAgb3V0bGV0TmFt
ZSA9IG91dGxldE5hbWUgfHwgJ21haW4nOworICAgICAgdGhpcy5fZGlzY29ubmVjdE91dGxldChv
dXRsZXROYW1lLCBwYXJlbnRWaWV3KTsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5y
b3V0ZXIucm91dGVyLmN1cnJlbnRIYW5kbGVySW5mb3MubGVuZ3RoOyBpKyspIHsKKyAgICAgICAg
Ly8gVGhpcyBub24tbG9jYWwgc3RhdGUgbXVuZ2luZyBpcyBzYWRseSBuZWNlc3NhcnkgdG8gbWFp
bnRhaW4KKyAgICAgICAgLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIG91ciBleGlzdGlu
ZyBzZW1hbnRpY3MsIHdoaWNoIGFsbG93CisgICAgICAgIC8vIGFueSByb3V0ZSB0byBkaXNjb25u
ZWN0T3V0bGV0IHRoaW5ncyBvcmlnaW5hbGx5IHJlbmRlcmVkIGJ5IGFueQorICAgICAgICAvLyBv
dGhlciByb3V0ZS4gVGhpcyBzaG91bGQgYWxsIGdldCBjdXQgaW4gMi4wLgorICAgICAgICB0aGlz
LnJvdXRlci5yb3V0ZXIuY3VycmVudEhhbmRsZXJJbmZvc1tpXS5oYW5kbGVyLl9kaXNjb25uZWN0
T3V0bGV0KG91dGxldE5hbWUsIHBhcmVudFZpZXcpOworICAgICAgfQorICAgIH0sCisKKyAgICBf
ZGlzY29ubmVjdE91dGxldDogZnVuY3Rpb24gKG91dGxldE5hbWUsIHBhcmVudFZpZXcpIHsKKyAg
ICAgIHZhciBwYXJlbnQgPSBwYXJlbnRSb3V0ZSh0aGlzKTsKKyAgICAgIGlmIChwYXJlbnQgJiYg
cGFyZW50VmlldyA9PT0gcGFyZW50LnJvdXRlTmFtZSkgeworICAgICAgICBwYXJlbnRWaWV3ID0g
dW5kZWZpbmVkOworICAgICAgfQorICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbm5l
Y3Rpb25zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIHZhciBjb25uZWN0aW9uID0gdGhpcy5jb25u
ZWN0aW9uc1tpXTsKKyAgICAgICAgaWYgKGNvbm5lY3Rpb24ub3V0bGV0ID09PSBvdXRsZXROYW1l
ICYmIGNvbm5lY3Rpb24uaW50byA9PT0gcGFyZW50VmlldykgeworICAgICAgICAgIC8vIFRoaXMg
bmV1dGVycyB0aGUgZGlzY29ubmVjdGVkIG91dGxldCBzdWNoIHRoYXQgaXQgZG9lc24ndAorICAg
ICAgICAgIC8vIHJlbmRlciBhbnl0aGluZywgYnV0IGl0IGxlYXZlcyBhbiBlbnRyeSBpbiB0aGUg
b3V0bGV0CisgICAgICAgICAgLy8gaGllcmFyY2h5IHNvIHRoYXQgYW55IGV4aXN0aW5nIG90aGVy
IHJlbmRlcnMgdGhhdCB0YXJnZXQgaXQKKyAgICAgICAgICAvLyBkb24ndCBzdWRkZW5seSBibG93
IHVwLiBUaGV5IHdpbGwgc3RpbGwgc3RpY2sgdGhlbXNlbHZlcworICAgICAgICAgIC8vIGludG8g
aXRzIG91dGxldHMsIHdoaWNoIHdvbid0IHJlbmRlciBhbnl3aGVyZS4gQWxsIG9mIHRoaXMKKyAg
ICAgICAgICAvLyBzdGF0ZWZ1bG5lc3Mgc2hvdWxkIGdldCB0aGUgbWFjaGV0ZSBpbiAyLjAuCisg
ICAgICAgICAgdGhpcy5jb25uZWN0aW9uc1tpXSA9IHsKKyAgICAgICAgICAgIG93bmVyOiBjb25u
ZWN0aW9uLm93bmVyLAorICAgICAgICAgICAgaW50bzogY29ubmVjdGlvbi5pbnRvLAorICAgICAg
ICAgICAgb3V0bGV0OiBjb25uZWN0aW9uLm91dGxldCwKKyAgICAgICAgICAgIG5hbWU6IGNvbm5l
Y3Rpb24ubmFtZSwKKyAgICAgICAgICAgIGNvbnRyb2xsZXI6IHVuZGVmaW5lZCwKKyAgICAgICAg
ICAgIHRlbXBsYXRlOiB1bmRlZmluZWQsCisgICAgICAgICAgICBWaWV3Q2xhc3M6IHVuZGVmaW5l
ZAorICAgICAgICAgIH07CisgICAgICAgICAgX2VtYmVyTWV0YWxSdW5fbG9vcC5kZWZhdWx0Lm9u
Y2UodGhpcy5yb3V0ZXIsICdfc2V0T3V0bGV0cycpOworICAgICAgICB9CisgICAgICB9CisgICAg
fSwKKworICAgIHdpbGxEZXN0cm95OiBmdW5jdGlvbiAoKSB7CisgICAgICB0aGlzLnRlYXJkb3du
Vmlld3MoKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICBAcHJpdmF0ZQorICAgICAgIEBtZXRo
b2QgdGVhcmRvd25WaWV3cworICAgICovCisgICAgdGVhcmRvd25WaWV3czogZnVuY3Rpb24gKCkg
eworICAgICAgaWYgKHRoaXMuY29ubmVjdGlvbnMgJiYgdGhpcy5jb25uZWN0aW9ucy5sZW5ndGgg
PiAwKSB7CisgICAgICAgIHRoaXMuY29ubmVjdGlvbnMgPSBbXTsKKyAgICAgICAgX2VtYmVyTWV0
YWxSdW5fbG9vcC5kZWZhdWx0Lm9uY2UodGhpcy5yb3V0ZXIsICdfc2V0T3V0bGV0cycpOworICAg
ICAgfQorICAgIH0KKyAgfSk7CisKKyAgX2VtYmVyUnVudGltZU1peGluc0FjdGlvbl9oYW5kbGVy
LmRlcHJlY2F0ZVVuZGVyc2NvcmVBY3Rpb25zKFJvdXRlKTsKKworICBSb3V0ZS5yZW9wZW5DbGFz
cyh7CisgICAgaXNSb3V0ZUZhY3Rvcnk6IHRydWUKKyAgfSk7CisKKyAgZnVuY3Rpb24gcGFyZW50
Um91dGUocm91dGUpIHsKKyAgICB2YXIgaGFuZGxlckluZm8gPSBoYW5kbGVySW5mb0Zvcihyb3V0
ZSwgcm91dGUucm91dGVyLnJvdXRlci5zdGF0ZS5oYW5kbGVySW5mb3MsIC0xKTsKKyAgICByZXR1
cm4gaGFuZGxlckluZm8gJiYgaGFuZGxlckluZm8uaGFuZGxlcjsKKyAgfQorCisgIGZ1bmN0aW9u
IGhhbmRsZXJJbmZvRm9yKHJvdXRlLCBoYW5kbGVySW5mb3MsIF9vZmZzZXQpIHsKKyAgICBpZiAo
IWhhbmRsZXJJbmZvcykgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZhciBvZmZzZXQg
PSBfb2Zmc2V0IHx8IDA7CisgICAgdmFyIGN1cnJlbnQ7CisgICAgZm9yICh2YXIgaSA9IDAsIGwg
PSBoYW5kbGVySW5mb3MubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CisgICAgICBjdXJyZW50ID0gaGFu
ZGxlckluZm9zW2ldLmhhbmRsZXI7CisgICAgICBpZiAoY3VycmVudCA9PT0gcm91dGUpIHsKKyAg
ICAgICAgcmV0dXJuIGhhbmRsZXJJbmZvc1tpICsgb2Zmc2V0XTsKKyAgICAgIH0KKyAgICB9Cisg
IH0KKworICBmdW5jdGlvbiBidWlsZFJlbmRlck9wdGlvbnMocm91dGUsIG5hbWVQYXNzZWQsIGlz
RGVmYXVsdFJlbmRlciwgbmFtZSwgb3B0aW9ucykgeworICAgIHZhciBjb250cm9sbGVyID0gb3B0
aW9ucyAmJiBvcHRpb25zLmNvbnRyb2xsZXI7CisgICAgdmFyIHRlbXBsYXRlTmFtZTsKKyAgICB2
YXIgdmlld05hbWU7CisgICAgdmFyIFZpZXdDbGFzczsKKyAgICB2YXIgdGVtcGxhdGU7CisgICAg
dmFyIExPR19WSUVXX0xPT0tVUFMgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQocm91dGUu
cm91dGVyLCAnbmFtZXNwYWNlLkxPR19WSUVXX0xPT0tVUFMnKTsKKyAgICB2YXIgaW50byA9IG9w
dGlvbnMgJiYgb3B0aW9ucy5pbnRvICYmIG9wdGlvbnMuaW50by5yZXBsYWNlKC9cLy9nLCAnLicp
OworICAgIHZhciBvdXRsZXQgPSBvcHRpb25zICYmIG9wdGlvbnMub3V0bGV0IHx8ICdtYWluJzsK
KyAgICB2YXIgb3duZXIgPSBfY29udGFpbmVyT3duZXIuZ2V0T3duZXIocm91dGUpOworCisgICAg
aWYgKG5hbWUpIHsKKyAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoL1wvL2csICcuJyk7CisgICAg
ICB0ZW1wbGF0ZU5hbWUgPSBuYW1lOworICAgIH0gZWxzZSB7CisgICAgICBuYW1lID0gcm91dGUu
cm91dGVOYW1lOworICAgICAgdGVtcGxhdGVOYW1lID0gcm91dGUudGVtcGxhdGVOYW1lIHx8IG5h
bWU7CisgICAgfQorCisgICAgaWYgKCFjb250cm9sbGVyKSB7CisgICAgICBpZiAobmFtZVBhc3Nl
ZCkgeworICAgICAgICBjb250cm9sbGVyID0gb3duZXIubG9va3VwKCdjb250cm9sbGVyOicgKyBu
YW1lKSB8fCByb3V0ZS5jb250cm9sbGVyTmFtZSB8fCByb3V0ZS5yb3V0ZU5hbWU7CisgICAgICB9
IGVsc2UgeworICAgICAgICBjb250cm9sbGVyID0gcm91dGUuY29udHJvbGxlck5hbWUgfHwgb3du
ZXIubG9va3VwKCdjb250cm9sbGVyOicgKyBuYW1lKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAodHlwZW9mIGNvbnRyb2xsZXIgPT09ICdzdHJpbmcnKSB7CisgICAgICB2YXIgY29udHJvbGxl
ck5hbWUgPSBjb250cm9sbGVyOworICAgICAgY29udHJvbGxlciA9IG93bmVyLmxvb2t1cCgnY29u
dHJvbGxlcjonICsgY29udHJvbGxlck5hbWUpOworICAgICAgaWYgKCFjb250cm9sbGVyKSB7Cisg
ICAgICAgIHRocm93IG5ldyBfZW1iZXJNZXRhbEVycm9yLmRlZmF1bHQoJ1lvdSBwYXNzZWQgYGNv
bnRyb2xsZXI6IFwnJyArIGNvbnRyb2xsZXJOYW1lICsgJ1wnYCBpbnRvIHRoZSBgcmVuZGVyYCBt
ZXRob2QsIGJ1dCBubyBzdWNoIGNvbnRyb2xsZXIgY291bGQgYmUgZm91bmQuJyk7CisgICAgICB9
CisgICAgfQorCisgICAgaWYgKG9wdGlvbnMgJiYgT2JqZWN0LmtleXMob3B0aW9ucykuaW5kZXhP
Zignb3V0bGV0JykgIT09IC0xICYmIHR5cGVvZiBvcHRpb25zLm91dGxldCA9PT0gJ3VuZGVmaW5l
ZCcpIHsKKyAgICAgIHRocm93IG5ldyBfZW1iZXJNZXRhbEVycm9yLmRlZmF1bHQoJ1lvdSBwYXNz
ZWQgdW5kZWZpbmVkIGFzIHRoZSBvdXRsZXQgbmFtZS4nKTsKKyAgICB9CisKKyAgICBpZiAob3B0
aW9ucyAmJiBvcHRpb25zLm1vZGVsKSB7CisgICAgICBjb250cm9sbGVyLnNldCgnbW9kZWwnLCBv
cHRpb25zLm1vZGVsKTsKKyAgICB9CisKKyAgICB2aWV3TmFtZSA9IG9wdGlvbnMgJiYgb3B0aW9u
cy52aWV3IHx8IG5hbWVQYXNzZWQgJiYgbmFtZSB8fCByb3V0ZS52aWV3TmFtZSB8fCBuYW1lOwor
ICAgIFZpZXdDbGFzcyA9IG93bmVyLl9sb29rdXBGYWN0b3J5KCd2aWV3OicgKyB2aWV3TmFtZSk7
CisgICAgdGVtcGxhdGUgPSBvd25lci5sb29rdXAoJ3RlbXBsYXRlOicgKyB0ZW1wbGF0ZU5hbWUp
OworCisgICAgdmFyIHBhcmVudDsKKyAgICBpZiAoaW50byAmJiAocGFyZW50ID0gcGFyZW50Um91
dGUocm91dGUpKSAmJiBpbnRvID09PSBwYXJlbnRSb3V0ZShyb3V0ZSkucm91dGVOYW1lKSB7Cisg
ICAgICBpbnRvID0gdW5kZWZpbmVkOworICAgIH0KKworICAgIHZhciByZW5kZXJPcHRpb25zID0g
eworICAgICAgb3duZXI6IG93bmVyLAorICAgICAgaW50bzogaW50bywKKyAgICAgIG91dGxldDog
b3V0bGV0LAorICAgICAgbmFtZTogbmFtZSwKKyAgICAgIGNvbnRyb2xsZXI6IGNvbnRyb2xsZXIs
CisgICAgICBWaWV3Q2xhc3M6IFZpZXdDbGFzcywKKyAgICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZSB8
fCByb3V0ZS5fdG9wTGV2ZWxWaWV3VGVtcGxhdGUKKyAgICB9OworCisgICAgdmFyIENvbXBvbmVu
dCA9IHVuZGVmaW5lZDsKKworICAgIGlmICghVmlld0NsYXNzICYmICF0ZW1wbGF0ZSAmJiAhQ29t
cG9uZW50KSB7CisgICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnQ291bGQgbm90IGZpbmQg
IicgKyBuYW1lICsgJyIgdGVtcGxhdGUsIHZpZXcsIG9yIGNvbXBvbmVudC4nLCBpc0RlZmF1bHRS
ZW5kZXIpOworICAgICAgaWYgKExPR19WSUVXX0xPT0tVUFMpIHsKKyAgICAgICAgdmFyIGZ1bGxO
YW1lID0gJ3RlbXBsYXRlOicgKyBuYW1lOworICAgICAgICBfZW1iZXJNZXRhbERlYnVnLmluZm8o
J0NvdWxkIG5vdCBmaW5kICInICsgbmFtZSArICciIHRlbXBsYXRlIG9yIHZpZXcuIE5vdGhpbmcg
d2lsbCBiZSByZW5kZXJlZCcsIHsgZnVsbE5hbWU6IGZ1bGxOYW1lIH0pOworICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiByZW5kZXJPcHRpb25zOworICB9CisKKyAgZnVuY3Rpb24gZ2V0RnVs
bFF1ZXJ5UGFyYW1zKHJvdXRlciwgc3RhdGUpIHsKKyAgICBpZiAoc3RhdGUuZnVsbFF1ZXJ5UGFy
YW1zKSB7CisgICAgICByZXR1cm4gc3RhdGUuZnVsbFF1ZXJ5UGFyYW1zOworICAgIH0KKworICAg
IHN0YXRlLmZ1bGxRdWVyeVBhcmFtcyA9IHt9OworICAgIF9lbWJlck1ldGFsQXNzaWduLmRlZmF1
bHQoc3RhdGUuZnVsbFF1ZXJ5UGFyYW1zLCBzdGF0ZS5xdWVyeVBhcmFtcyk7CisKKyAgICB2YXIg
dGFyZ2V0Um91dGVOYW1lID0gc3RhdGUuaGFuZGxlckluZm9zW3N0YXRlLmhhbmRsZXJJbmZvcy5s
ZW5ndGggLSAxXS5uYW1lOworICAgIHJvdXRlci5fZGVzZXJpYWxpemVRdWVyeVBhcmFtcyh0YXJn
ZXRSb3V0ZU5hbWUsIHN0YXRlLmZ1bGxRdWVyeVBhcmFtcyk7CisgICAgcmV0dXJuIHN0YXRlLmZ1
bGxRdWVyeVBhcmFtczsKKyAgfQorCisgIGZ1bmN0aW9uIGdldFF1ZXJ5UGFyYW1zRm9yKHJvdXRl
LCBzdGF0ZSkgeworICAgIHN0YXRlLnF1ZXJ5UGFyYW1zRm9yID0gc3RhdGUucXVlcnlQYXJhbXNG
b3IgfHwge307CisgICAgdmFyIG5hbWUgPSByb3V0ZS5yb3V0ZU5hbWU7CisKKyAgICBpZiAoc3Rh
dGUucXVlcnlQYXJhbXNGb3JbbmFtZV0pIHsKKyAgICAgIHJldHVybiBzdGF0ZS5xdWVyeVBhcmFt
c0ZvcltuYW1lXTsKKyAgICB9CisKKyAgICB2YXIgZnVsbFF1ZXJ5UGFyYW1zID0gZ2V0RnVsbFF1
ZXJ5UGFyYW1zKHJvdXRlLnJvdXRlciwgc3RhdGUpOworCisgICAgdmFyIHBhcmFtcyA9IHN0YXRl
LnF1ZXJ5UGFyYW1zRm9yW25hbWVdID0ge307CisKKyAgICAvLyBDb3B5IG92ZXIgYWxsIHRoZSBx
dWVyeSBwYXJhbXMgZm9yIHRoaXMgcm91dGUvY29udHJvbGxlciBpbnRvIHBhcmFtcyBoYXNoLgor
ICAgIHZhciBxcE1ldGEgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQocm91dGUsICdfcXAn
KTsKKyAgICB2YXIgcXBzID0gcXBNZXRhLnFwczsKKyAgICBmb3IgKHZhciBpID0gMCwgbGVuID0g
cXBzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAvLyBQdXQgZGVzZXJpYWxpemVkIHFw
IG9uIHBhcmFtcyBoYXNoLgorICAgICAgdmFyIHFwID0gcXBzW2ldOworCisgICAgICB2YXIgcXBW
YWx1ZVdhc1Bhc3NlZEluID0gKHFwLnByb3AgaW4gZnVsbFF1ZXJ5UGFyYW1zKTsKKyAgICAgIHBh
cmFtc1txcC5wcm9wXSA9IHFwVmFsdWVXYXNQYXNzZWRJbiA/IGZ1bGxRdWVyeVBhcmFtc1txcC5w
cm9wXSA6IGNvcHlEZWZhdWx0VmFsdWUocXAuZGVmYXVsdFZhbHVlKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gcGFyYW1zOworICB9CisKKyAgZnVuY3Rpb24gY29weURlZmF1bHRWYWx1ZSh2YWx1ZSkg
eworICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgeworICAgICAgcmV0dXJuIF9lbWJlclJ1
bnRpbWVTeXN0ZW1OYXRpdmVfYXJyYXkuQSh2YWx1ZS5zbGljZSgpKTsKKyAgICB9CisgICAgcmV0
dXJuIHZhbHVlOworICB9CisKKyAgLyoKKyAgICBNZXJnZXMgYWxsIHF1ZXJ5IHBhcmFtZXRlcnMg
ZnJvbSBhIGNvbnRyb2xsZXIgd2l0aCB0aG9zZSBmcm9tCisgICAgYSByb3V0ZSwgcmV0dXJuaW5n
IGEgbmV3IG9iamVjdCBhbmQgYXZvaWRpbmcgYW55IG11dGF0aW9ucyB0bworICAgIHRoZSBleGlz
dGluZyBvYmplY3RzLgorICAqLworICBmdW5jdGlvbiBtZXJnZUVhY2hRdWVyeVBhcmFtcyhjb250
cm9sbGVyUVAsIHJvdXRlUVApIHsKKyAgICB2YXIga2V5c0FscmVhZHlNZXJnZWRPclNraXBwYWJs
ZTsKKyAgICB2YXIgcXBzID0ge307CisKKyAgICBrZXlzQWxyZWFkeU1lcmdlZE9yU2tpcHBhYmxl
ID0geworICAgICAgZGVmYXVsdFZhbHVlOiB0cnVlLAorICAgICAgdHlwZTogdHJ1ZSwKKyAgICAg
IHNjb3BlOiB0cnVlLAorICAgICAgYXM6IHRydWUKKyAgICB9OworCisgICAgLy8gZmlyc3QgbG9v
cCBvdmVyIGFsbCBjb250cm9sbGVyIHFwcywgbWVyZ2luZyB0aGVtIHdpdGggYW55IG1hdGNoaW5n
IHJvdXRlIHFwcworICAgIC8vIGludG8gYSBuZXcgZW1wdHkgb2JqZWN0IHRvIGF2b2lkIG11dGF0
aW5nLgorICAgIGZvciAodmFyIGNxcE5hbWUgaW4gY29udHJvbGxlclFQKSB7CisgICAgICBpZiAo
IWNvbnRyb2xsZXJRUC5oYXNPd25Qcm9wZXJ0eShjcXBOYW1lKSkgeworICAgICAgICBjb250aW51
ZTsKKyAgICAgIH0KKworICAgICAgdmFyIG5ld0NvbnRyb2xsZXJQYXJhbWV0ZXJDb25maWd1cmF0
aW9uID0ge307CisgICAgICBfZW1iZXJNZXRhbEFzc2lnbi5kZWZhdWx0KG5ld0NvbnRyb2xsZXJQ
YXJhbWV0ZXJDb25maWd1cmF0aW9uLCBjb250cm9sbGVyUVBbY3FwTmFtZV0pOworICAgICAgX2Vt
YmVyTWV0YWxBc3NpZ24uZGVmYXVsdChuZXdDb250cm9sbGVyUGFyYW1ldGVyQ29uZmlndXJhdGlv
biwgcm91dGVRUFtjcXBOYW1lXSk7CisKKyAgICAgIHFwc1tjcXBOYW1lXSA9IG5ld0NvbnRyb2xs
ZXJQYXJhbWV0ZXJDb25maWd1cmF0aW9uOworCisgICAgICAvLyBhbGxvd3MgdXMgdG8gc2tpcCB0
aGlzIFFQIHdoZW4gd2UgY2hlY2sgcm91dGUgUVBzLgorICAgICAga2V5c0FscmVhZHlNZXJnZWRP
clNraXBwYWJsZVtjcXBOYW1lXSA9IHRydWU7CisgICAgfQorCisgICAgLy8gbG9vcCBvdmVyIGFs
bCByb3V0ZSBxcHMsIHNraXBwaW5nIHRob3NlIHRoYXQgd2VyZSBtZXJnZWQgaW4gdGhlIGZpcnN0
IHBhc3MKKyAgICAvLyBiZWNhdXNlIHRoZXkgYWxzbyBhcHBlYXIgaW4gY29udHJvbGxlciBxcHMK
KyAgICBmb3IgKHZhciBycXBOYW1lIGluIHJvdXRlUVApIHsKKyAgICAgIGlmICghcm91dGVRUC5o
YXNPd25Qcm9wZXJ0eShycXBOYW1lKSB8fCBrZXlzQWxyZWFkeU1lcmdlZE9yU2tpcHBhYmxlW3Jx
cE5hbWVdKSB7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgICB2YXIgbmV3Um91
dGVQYXJhbWV0ZXJDb25maWd1cmF0aW9uID0ge307CisgICAgICBfZW1iZXJNZXRhbEFzc2lnbi5k
ZWZhdWx0KG5ld1JvdXRlUGFyYW1ldGVyQ29uZmlndXJhdGlvbiwgcm91dGVRUFtycXBOYW1lXSwg
Y29udHJvbGxlclFQW3JxcE5hbWVdKTsKKyAgICAgIHFwc1tycXBOYW1lXSA9IG5ld1JvdXRlUGFy
YW1ldGVyQ29uZmlndXJhdGlvbjsKKyAgICB9CisKKyAgICByZXR1cm4gcXBzOworICB9CisKKyAg
ZnVuY3Rpb24gYWRkUXVlcnlQYXJhbXNPYnNlcnZlcnMoY29udHJvbGxlciwgcHJvcE5hbWVzKSB7
CisgICAgcHJvcE5hbWVzLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHsKKyAgICAgIGNvbnRyb2xs
ZXIuYWRkT2JzZXJ2ZXIocHJvcCArICcuW10nLCBjb250cm9sbGVyLCBjb250cm9sbGVyLl9xcENo
YW5nZWQpOworICAgIH0pOworICB9CisKKyAgZnVuY3Rpb24gZGVwcmVjYXRlUXVlcnlQYXJhbURl
ZmF1bHRWYWx1ZXNTZXRPbkNvbnRyb2xsZXIoY29udHJvbGxlck5hbWUsIHJvdXRlTmFtZSwgcHJv
cE5hbWUpIHsKKyAgICBfZW1iZXJNZXRhbERlYnVnLmRlcHJlY2F0ZSgnQ29uZmlndXJpbmcgcXVl
cnkgcGFyYW1ldGVyIGRlZmF1bHQgdmFsdWVzIG9uIGNvbnRyb2xsZXJzIGlzIGRlcHJlY2F0ZWQu
IFBsZWFzZSBtb3ZlIHRoZSB2YWx1ZSBmb3IgdGhlIHByb3BlcnR5IFwnJyArIHByb3BOYW1lICsg
J1wnIGZyb20gdGhlIFwnJyArIGNvbnRyb2xsZXJOYW1lICsgJ1wnIGNvbnRyb2xsZXIgdG8gdGhl
IFwnJyArIHJvdXRlTmFtZSArICdcJyByb3V0ZSBpbiB0aGUgZm9ybWF0OiB7cXVlcnlQYXJhbXM6
ICcgKyBwcm9wTmFtZSArICc6IHtkZWZhdWx0VmFsdWU6IDxkZWZhdWx0IHZhbHVlPiB9fScsIGZh
bHNlLCB7IGlkOiAnZW1iZXItcm91dGluZy5kZXByZWNhdGUtcXVlcnktcGFyYW0tZGVmYXVsdC12
YWx1ZXMtc2V0LW9uLWNvbnRyb2xsZXInLCB1bnRpbDogJzMuMC4wJyB9KTsKKyAgfQorCisgIGV4
cG9ydHMuZGVmYXVsdCA9IFJvdXRlOworfSk7CisvLyBGRUFUVVJFUywgQSwgZGVwcmVjYXRlLCBh
c3NlcnQsIExvZ2dlcgorCisvLyBhcHBseSBkZWZhdWx0IHZhbHVlcyB0byBjb250cm9sbGVycwor
Ly8gZGV0ZWN0IHRoYXQgZGVmYXVsdCB2YWx1ZSBkZWZpbmVkIG9uIHJvdXRlciBjb25maWcKKwor
Ly8gZGV0ZWN0IHRoYXQgcHJvcGVydHkgd2FzIG5vdCBkZWZpbmVkIG9uIGNvbnRyb2xsZXIKK2Vu
aWZlZCgnZW1iZXItcm91dGluZy9zeXN0ZW0vcm91dGVyJywgWydleHBvcnRzJywgJ2VtYmVyLW1l
dGFsL2xvZ2dlcicsICdlbWJlci1tZXRhbC9kZWJ1ZycsICdlbWJlci1tZXRhbC9lcnJvcicsICdl
bWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQnLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfc2V0JywgJ2Vt
YmVyLW1ldGFsL3Byb3BlcnRpZXMnLCAnZW1iZXItbWV0YWwvZW1wdHlfb2JqZWN0JywgJ2VtYmVy
LW1ldGFsL2NvbXB1dGVkJywgJ2VtYmVyLW1ldGFsL2Fzc2lnbicsICdlbWJlci1tZXRhbC9ydW5f
bG9vcCcsICdlbWJlci1ydW50aW1lL3N5c3RlbS9vYmplY3QnLCAnZW1iZXItcnVudGltZS9taXhp
bnMvZXZlbnRlZCcsICdlbWJlci1yb3V0aW5nL3N5c3RlbS9kc2wnLCAnZW1iZXItcm91dGluZy9s
b2NhdGlvbi9hcGknLCAnZW1iZXItcm91dGluZy91dGlscycsICdlbWJlci1tZXRhbC91dGlscycs
ICdlbWJlci1yb3V0aW5nL3N5c3RlbS9yb3V0ZXJfc3RhdGUnLCAnY29udGFpbmVyL293bmVyJywg
J2VtYmVyLW1ldGFsL2RpY3Rpb25hcnknLCAncm91dGVyJywgJ3JvdXRlci90cmFuc2l0aW9uJ10s
IGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbExvZ2dlciwgX2VtYmVyTWV0YWxEZWJ1Zywg
X2VtYmVyTWV0YWxFcnJvciwgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQsIF9lbWJlck1ldGFsUHJv
cGVydHlfc2V0LCBfZW1iZXJNZXRhbFByb3BlcnRpZXMsIF9lbWJlck1ldGFsRW1wdHlfb2JqZWN0
LCBfZW1iZXJNZXRhbENvbXB1dGVkLCBfZW1iZXJNZXRhbEFzc2lnbiwgX2VtYmVyTWV0YWxSdW5f
bG9vcCwgX2VtYmVyUnVudGltZVN5c3RlbU9iamVjdCwgX2VtYmVyUnVudGltZU1peGluc0V2ZW50
ZWQsIF9lbWJlclJvdXRpbmdTeXN0ZW1Ec2wsIF9lbWJlclJvdXRpbmdMb2NhdGlvbkFwaSwgX2Vt
YmVyUm91dGluZ1V0aWxzLCBfZW1iZXJNZXRhbFV0aWxzLCBfZW1iZXJSb3V0aW5nU3lzdGVtUm91
dGVyX3N0YXRlLCBfY29udGFpbmVyT3duZXIsIF9lbWJlck1ldGFsRGljdGlvbmFyeSwgX3JvdXRl
cjQsIF9yb3V0ZXJUcmFuc2l0aW9uKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICBleHBvcnRzLnRy
aWdnZXJFdmVudCA9IHRyaWdnZXJFdmVudDsKKworICBmdW5jdGlvbiBLKCkgeworICAgIHJldHVy
biB0aGlzOworICB9CisKKyAgdmFyIHNsaWNlID0gW10uc2xpY2U7CisKKyAgLyoqCisgICAgVGhl
IGBFbWJlci5Sb3V0ZXJgIGNsYXNzIG1hbmFnZXMgdGhlIGFwcGxpY2F0aW9uIHN0YXRlIGFuZCBV
UkxzLiBSZWZlciB0bworICAgIHRoZSBbcm91dGluZyBndWlkZV0oaHR0cDovL2VtYmVyanMuY29t
L2d1aWRlcy9yb3V0aW5nLykgZm9yIGRvY3VtZW50YXRpb24uCisgIAorICAgIEBjbGFzcyBSb3V0
ZXIKKyAgICBAbmFtZXNwYWNlIEVtYmVyCisgICAgQGV4dGVuZHMgRW1iZXIuT2JqZWN0CisgICAg
QHVzZXMgRW1iZXIuRXZlbnRlZAorICAgIEBwdWJsaWMKKyAgKi8KKyAgdmFyIEVtYmVyUm91dGVy
ID0gX2VtYmVyUnVudGltZVN5c3RlbU9iamVjdC5kZWZhdWx0LmV4dGVuZChfZW1iZXJSdW50aW1l
TWl4aW5zRXZlbnRlZC5kZWZhdWx0LCB7CisgICAgLyoqCisgICAgICBUaGUgYGxvY2F0aW9uYCBw
cm9wZXJ0eSBkZXRlcm1pbmVzIHRoZSB0eXBlIG9mIFVSTCdzIHRoYXQgeW91cgorICAgICAgYXBw
bGljYXRpb24gd2lsbCB1c2UuCisgICAgICAgVGhlIGZvbGxvd2luZyBsb2NhdGlvbiB0eXBlcyBh
cmUgY3VycmVudGx5IGF2YWlsYWJsZToKKyAgICAgICAqIGBoaXN0b3J5YCAtIHVzZSB0aGUgYnJv
d3NlcidzIGhpc3RvcnkgQVBJIHRvIG1ha2UgdGhlIFVSTHMgbG9vayBqdXN0IGxpa2UgYW55IHN0
YW5kYXJkIFVSTAorICAgICAgKiBgaGFzaGAgLSB1c2UgYCNgIHRvIHNlcGFyYXRlIHRoZSBzZXJ2
ZXIgcGFydCBvZiB0aGUgVVJMIGZyb20gdGhlIEVtYmVyIHBhcnQ6IGAvYmxvZy8jL3Bvc3RzL25l
d2AKKyAgICAgICogYG5vbmVgIC0gZG8gbm90IHN0b3JlIHRoZSBFbWJlciBVUkwgaW4gdGhlIGFj
dHVhbCBicm93c2VyIFVSTCAobWFpbmx5IHVzZWQgZm9yIHRlc3RpbmcpCisgICAgICAqIGBhdXRv
YCAtIHVzZSB0aGUgYmVzdCBvcHRpb24gYmFzZWQgb24gYnJvd3NlciBjYXBhYmlsaXRlczogYGhp
c3RvcnlgIGlmIHBvc3NpYmxlLCB0aGVuIGBoYXNoYCBpZiBwb3NzaWJsZSwgb3RoZXJ3aXNlIGBu
b25lYAorICAgICAgIE5vdGU6IElmIHVzaW5nIGVtYmVyLWNsaSwgdGhpcyB2YWx1ZSBpcyBkZWZh
dWx0ZWQgdG8gYGF1dG9gIGJ5IHRoZSBgbG9jYXRpb25UeXBlYCBzZXR0aW5nIG9mIGAvY29uZmln
L2Vudmlyb25tZW50LmpzYAorICAgICAgIEBwcm9wZXJ0eSBsb2NhdGlvbgorICAgICAgQGRlZmF1
bHQgJ2hhc2gnCisgICAgICBAc2VlIHtFbWJlci5Mb2NhdGlvbn0KKyAgICAgIEBwdWJsaWMKKyAg
ICAqLworICAgIGxvY2F0aW9uOiAnaGFzaCcsCisKKyAgICAvKioKKyAgICAgUmVwcmVzZW50cyB0
aGUgVVJMIG9mIHRoZSByb290IG9mIHRoZSBhcHBsaWNhdGlvbiwgb2Z0ZW4gJy8nLiBUaGlzIHBy
ZWZpeCBpcworICAgICBhc3N1bWVkIG9uIGFsbCByb3V0ZXMgZGVmaW5lZCBvbiB0aGlzIHJvdXRl
ci4KKyAgICAgIEBwcm9wZXJ0eSByb290VVJMCisgICAgIEBkZWZhdWx0ICcvJworICAgICBAcHVi
bGljCisgICAgKi8KKyAgICByb290VVJMOiAnLycsCisKKyAgICBfaW5pdFJvdXRlckpzOiBmdW5j
dGlvbiAoKSB7CisgICAgICB2YXIgcm91dGVyID0gdGhpcy5yb3V0ZXIgPSBuZXcgX3JvdXRlcjQu
ZGVmYXVsdCgpOworICAgICAgcm91dGVyLnRyaWdnZXJFdmVudCA9IHRyaWdnZXJFdmVudDsKKwor
ICAgICAgcm91dGVyLl90cmlnZ2VyV2lsbENoYW5nZUNvbnRleHQgPSBLOworICAgICAgcm91dGVy
Ll90cmlnZ2VyV2lsbExlYXZlID0gSzsKKworICAgICAgdmFyIGRzbENhbGxiYWNrcyA9IHRoaXMu
Y29uc3RydWN0b3IuZHNsQ2FsbGJhY2tzIHx8IFtLXTsKKyAgICAgIHZhciBkc2wgPSB0aGlzLl9i
dWlsZERTTCgpOworCisgICAgICBkc2wucm91dGUoJ2FwcGxpY2F0aW9uJywgeyBwYXRoOiAnLycs
IHJlc2V0TmFtZXNwYWNlOiB0cnVlLCBvdmVycmlkZU5hbWVBc3NlcnRpb246IHRydWUgfSwgZnVu
Y3Rpb24gKCkgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRzbENhbGxiYWNrcy5sZW5n
dGg7IGkrKykgeworICAgICAgICAgIGRzbENhbGxiYWNrc1tpXS5jYWxsKHRoaXMpOworICAgICAg
ICB9CisgICAgICB9KTsKKworICAgICAgaWYgKF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0
aGlzLCAnbmFtZXNwYWNlLkxPR19UUkFOU0lUSU9OU19JTlRFUk5BTCcpKSB7CisgICAgICAgIHJv
dXRlci5sb2cgPSBfZW1iZXJNZXRhbExvZ2dlci5kZWZhdWx0LmRlYnVnOworICAgICAgfQorCisg
ICAgICByb3V0ZXIubWFwKGRzbC5nZW5lcmF0ZSgpKTsKKyAgICB9LAorCisgICAgX2J1aWxkRFNM
OiBmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgbW9kdWxlQmFzZWRSZXNvbHZlciA9IHRoaXMuX2hh
c01vZHVsZUJhc2VkUmVzb2x2ZXIoKTsKKworICAgICAgcmV0dXJuIG5ldyBfZW1iZXJSb3V0aW5n
U3lzdGVtRHNsLmRlZmF1bHQobnVsbCwgeworICAgICAgICBlbmFibGVMb2FkaW5nU3Vic3RhdGVz
OiAhIW1vZHVsZUJhc2VkUmVzb2x2ZXIKKyAgICAgIH0pOworICAgIH0sCisKKyAgICBpbml0OiBm
dW5jdGlvbiAoKSB7CisgICAgICB0aGlzLl9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwor
CisgICAgICB0aGlzLl9hY3RpdmVWaWV3cyA9IHt9OworICAgICAgdGhpcy5fcXBDYWNoZSA9IG5l
dyBfZW1iZXJNZXRhbEVtcHR5X29iamVjdC5kZWZhdWx0KCk7CisgICAgICB0aGlzLl9yZXNldFF1
ZXVlZFF1ZXJ5UGFyYW1ldGVyQ2hhbmdlcygpOworICAgICAgdGhpcy5faGFuZGxlZEVycm9ycyA9
IF9lbWJlck1ldGFsRGljdGlvbmFyeS5kZWZhdWx0KG51bGwpOworICAgIH0sCisKKyAgICAvKgor
ICAgICAgUmVzZXRzIGFsbCBwZW5kaW5nIHF1ZXJ5IHBhcmFtdGVyIGNoYW5nZXMuCisgICAgICBD
YWxsZWQgYWZ0ZXIgdHJhbnNpdGlvbmluZyB0byBhIG5ldyByb3V0ZQorICAgICAgYmFzZWQgb24g
cXVlcnkgcGFyYW1ldGVyIGNoYW5nZXMuCisgICAgKi8KKyAgICBfcmVzZXRRdWV1ZWRRdWVyeVBh
cmFtZXRlckNoYW5nZXM6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHRoaXMuX3F1ZXVlZFFQQ2hhbmdl
cyA9IHt9OworICAgIH0sCisKKyAgICAvKioKKyAgICAgIFJlcHJlc2VudHMgdGhlIGN1cnJlbnQg
VVJMLgorICAgICAgIEBtZXRob2QgdXJsCisgICAgICBAcmV0dXJuIHtTdHJpbmd9IFRoZSBjdXJy
ZW50IFVSTC4KKyAgICAgIEBwcml2YXRlCisgICAgKi8KKyAgICB1cmw6IF9lbWJlck1ldGFsQ29t
cHV0ZWQuY29tcHV0ZWQoZnVuY3Rpb24gKCkgeworICAgICAgcmV0dXJuIF9lbWJlck1ldGFsUHJv
cGVydHlfZ2V0LmdldCh0aGlzLCAnbG9jYXRpb24nKS5nZXRVUkwoKTsKKyAgICB9KSwKKworICAg
IF9oYXNNb2R1bGVCYXNlZFJlc29sdmVyOiBmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgb3duZXIg
PSBfY29udGFpbmVyT3duZXIuZ2V0T3duZXIodGhpcyk7CisKKyAgICAgIGlmICghb3duZXIpIHsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorCisgICAgICB2YXIgcmVzb2x2ZXIgPSBv
d25lci5hcHBsaWNhdGlvbiAmJiBvd25lci5hcHBsaWNhdGlvbi5fX3JlZ2lzdHJ5X18gJiYgb3du
ZXIuYXBwbGljYXRpb24uX19yZWdpc3RyeV9fLnJlc29sdmVyOworCisgICAgICBpZiAoIXJlc29s
dmVyKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuICEh
cmVzb2x2ZXIubW9kdWxlQmFzZWRSZXNvbHZlcjsKKyAgICB9LAorCisgICAgLyoqCisgICAgICBJ
bml0aWFsaXplcyB0aGUgY3VycmVudCByb3V0ZXIgaW5zdGFuY2UgYW5kIHNldHMgdXAgdGhlIGNo
YW5nZSBoYW5kbGluZworICAgICAgZXZlbnQgbGlzdGVuZXJzIHVzZWQgYnkgdGhlIGluc3RhbmNl
cyBgbG9jYXRpb25gIGltcGxlbWVudGF0aW9uLgorICAgICAgIEEgcHJvcGVydHkgbmFtZWQgYGlu
aXRpYWxVUkxgIHdpbGwgYmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIGluaXRpYWwgVVJMLgorICAg
ICAgSWYgbm8gdmFsdWUgaXMgZm91bmQgYC9gIHdpbGwgYmUgdXNlZC4KKyAgICAgICBAbWV0aG9k
IHN0YXJ0Um91dGluZworICAgICAgQHByaXZhdGUKKyAgICAqLworICAgIHN0YXJ0Um91dGluZzog
ZnVuY3Rpb24gKCkgeworICAgICAgdmFyIGluaXRpYWxVUkwgPSBfZW1iZXJNZXRhbFByb3BlcnR5
X2dldC5nZXQodGhpcywgJ2luaXRpYWxVUkwnKTsKKworICAgICAgaWYgKHRoaXMuc2V0dXBSb3V0
ZXIoKSkgeworICAgICAgICBpZiAodHlwZW9mIGluaXRpYWxVUkwgPT09ICd1bmRlZmluZWQnKSB7
CisgICAgICAgICAgaW5pdGlhbFVSTCA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlz
LCAnbG9jYXRpb24nKS5nZXRVUkwoKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgaW5pdGlhbFRy
YW5zaXRpb24gPSB0aGlzLmhhbmRsZVVSTChpbml0aWFsVVJMKTsKKyAgICAgICAgaWYgKGluaXRp
YWxUcmFuc2l0aW9uICYmIGluaXRpYWxUcmFuc2l0aW9uLmVycm9yKSB7CisgICAgICAgICAgdGhy
b3cgaW5pdGlhbFRyYW5zaXRpb24uZXJyb3I7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAor
CisgICAgc2V0dXBSb3V0ZXI6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciBfdGhpcyA9IHRoaXM7
CisKKyAgICAgIHRoaXMuX2luaXRSb3V0ZXJKcygpOworICAgICAgdGhpcy5fc2V0dXBMb2NhdGlv
bigpOworCisgICAgICB2YXIgcm91dGVyID0gdGhpcy5yb3V0ZXI7CisgICAgICB2YXIgbG9jYXRp
b24gPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ2xvY2F0aW9uJyk7CisKKyAg
ICAgIC8vIEFsbG93IHRoZSBMb2NhdGlvbiBjbGFzcyB0byBjYW5jZWwgdGhlIHJvdXRlciBzZXR1
cCB3aGlsZSBpdCByZWZyZXNoZXMKKyAgICAgIC8vIHRoZSBwYWdlCisgICAgICBpZiAoX2VtYmVy
TWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KGxvY2F0aW9uLCAnY2FuY2VsUm91dGVyU2V0dXAnKSkgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisKKyAgICAgIHRoaXMuX3NldHVwUm91dGVy
KHJvdXRlciwgbG9jYXRpb24pOworCisgICAgICBsb2NhdGlvbi5vblVwZGF0ZVVSTChmdW5jdGlv
biAodXJsKSB7CisgICAgICAgIF90aGlzLmhhbmRsZVVSTCh1cmwpOworICAgICAgfSk7CisKKyAg
ICAgIHJldHVybiB0cnVlOworICAgIH0sCisKKyAgICAvKioKKyAgICAgIEhhbmRsZXMgdXBkYXRp
bmcgdGhlIHBhdGhzIGFuZCBub3RpZnlpbmcgYW55IGxpc3RlbmVycyBvZiB0aGUgVVJMCisgICAg
ICBjaGFuZ2UuCisgICAgICAgVHJpZ2dlcnMgdGhlIHJvdXRlciBsZXZlbCBgZGlkVHJhbnNpdGlv
bmAgaG9vay4KKyAgICAgICBGb3IgZXhhbXBsZSwgdG8gbm90aWZ5IGdvb2dsZSBhbmFseXRpY3Mg
d2hlbiB0aGUgcm91dGUgY2hhbmdlcywKKyAgICAgIHlvdSBjb3VsZCB1c2UgdGhpcyBob29rLiAg
KE5vdGU6IHJlcXVpcmVzIGFsc28gaW5jbHVkaW5nIEdBIHNjcmlwdHMsIGV0Yy4pCisgICAgICAg
YGBgamF2YXNjcmlwdAorICAgICAgdmFyIFJvdXRlciA9IEVtYmVyLlJvdXRlci5leHRlbmQoewor
ICAgICAgICBsb2NhdGlvbjogY29uZmlnLmxvY2F0aW9uVHlwZSwKKyAgICAgICAgIGRpZFRyYW5z
aXRpb246IGZ1bmN0aW9uKCkgeworICAgICAgICAgIHRoaXMuX3N1cGVyKC4uLmFyZ3VtZW50cyk7
CisgICAgICAgICAgIHJldHVybiBnYSgnc2VuZCcsICdwYWdldmlldycsIHsKKyAgICAgICAgICAg
ICdwYWdlJzogdGhpcy5nZXQoJ3VybCcpLAorICAgICAgICAgICAgJ3RpdGxlJzogdGhpcy5nZXQo
J3VybCcpCisgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgICAgYGBgCisg
ICAgICAgQG1ldGhvZCBkaWRUcmFuc2l0aW9uCisgICAgICBAcHVibGljCisgICAgICBAc2luY2Ug
MS4yLjAKKyAgICAqLworICAgIGRpZFRyYW5zaXRpb246IGZ1bmN0aW9uIChpbmZvcykgeworICAg
ICAgdXBkYXRlUGF0aHModGhpcyk7CisKKyAgICAgIHRoaXMuX2NhbmNlbFNsb3dUcmFuc2l0aW9u
VGltZXIoKTsKKworICAgICAgdGhpcy5ub3RpZnlQcm9wZXJ0eUNoYW5nZSgndXJsJyk7CisgICAg
ICB0aGlzLnNldCgnY3VycmVudFN0YXRlJywgdGhpcy50YXJnZXRTdGF0ZSk7CisKKyAgICAgIC8v
IFB1dCB0aGlzIGluIHRoZSBydW5sb29wIHNvIHVybCB3aWxsIGJlIGFjY3VyYXRlLiBTZWVtcwor
ICAgICAgLy8gbGVzcyBzdXJwcmlzaW5nIHRoYW4gZGlkVHJhbnNpdGlvbiBiZWluZyBvdXQgb2Yg
c3luYy4KKyAgICAgIF9lbWJlck1ldGFsUnVuX2xvb3AuZGVmYXVsdC5vbmNlKHRoaXMsIHRoaXMu
dHJpZ2dlciwgJ2RpZFRyYW5zaXRpb24nKTsKKworICAgICAgaWYgKF9lbWJlck1ldGFsUHJvcGVy
dHlfZ2V0LmdldCh0aGlzLCAnbmFtZXNwYWNlJykuTE9HX1RSQU5TSVRJT05TKSB7CisgICAgICAg
IF9lbWJlck1ldGFsTG9nZ2VyLmRlZmF1bHQubG9nKCdUcmFuc2l0aW9uZWQgaW50byBcJycgKyBF
bWJlclJvdXRlci5fcm91dGVQYXRoKGluZm9zKSArICdcJycpOworICAgICAgfQorICAgIH0sCisK
KyAgICBfc2V0T3V0bGV0czogZnVuY3Rpb24gKCkgeworICAgICAgdmFyIGhhbmRsZXJJbmZvcyA9
IHRoaXMucm91dGVyLmN1cnJlbnRIYW5kbGVySW5mb3M7CisgICAgICB2YXIgcm91dGU7CisgICAg
ICB2YXIgZGVmYXVsdFBhcmVudFN0YXRlOworICAgICAgdmFyIGxpdmVSb3V0ZXMgPSBudWxsOwor
CisgICAgICBpZiAoIWhhbmRsZXJJbmZvcykgeworICAgICAgICByZXR1cm47CisgICAgICB9CisK
KyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGFuZGxlckluZm9zLmxlbmd0aDsgaSsrKSB7Cisg
ICAgICAgIHJvdXRlID0gaGFuZGxlckluZm9zW2ldLmhhbmRsZXI7CisgICAgICAgIHZhciBjb25u
ZWN0aW9ucyA9IHJvdXRlLmNvbm5lY3Rpb25zOworICAgICAgICB2YXIgb3duU3RhdGU7CisgICAg
ICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29ubmVjdGlvbnMubGVuZ3RoOyBqKyspIHsKKyAgICAg
ICAgICB2YXIgYXBwZW5kZWQgPSBhcHBlbmRMaXZlUm91dGUobGl2ZVJvdXRlcywgZGVmYXVsdFBh
cmVudFN0YXRlLCBjb25uZWN0aW9uc1tqXSk7CisgICAgICAgICAgbGl2ZVJvdXRlcyA9IGFwcGVu
ZGVkLmxpdmVSb3V0ZXM7CisgICAgICAgICAgaWYgKGFwcGVuZGVkLm93blN0YXRlLnJlbmRlci5u
YW1lID09PSByb3V0ZS5yb3V0ZU5hbWUgfHwgYXBwZW5kZWQub3duU3RhdGUucmVuZGVyLm91dGxl
dCA9PT0gJ21haW4nKSB7CisgICAgICAgICAgICBvd25TdGF0ZSA9IGFwcGVuZGVkLm93blN0YXRl
OworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoY29ubmVjdGlvbnMubGVuZ3Ro
ID09PSAwKSB7CisgICAgICAgICAgb3duU3RhdGUgPSByZXByZXNlbnRFbXB0eVJvdXRlKGxpdmVS
b3V0ZXMsIGRlZmF1bHRQYXJlbnRTdGF0ZSwgcm91dGUpOworICAgICAgICB9CisgICAgICAgIGRl
ZmF1bHRQYXJlbnRTdGF0ZSA9IG93blN0YXRlOworICAgICAgfQorICAgICAgaWYgKCF0aGlzLl90
b3BsZXZlbFZpZXcpIHsKKyAgICAgICAgdmFyIG93bmVyID0gX2NvbnRhaW5lck93bmVyLmdldE93
bmVyKHRoaXMpOworICAgICAgICB2YXIgT3V0bGV0VmlldyA9IG93bmVyLl9sb29rdXBGYWN0b3J5
KCd2aWV3Oi1vdXRsZXQnKTsKKyAgICAgICAgdGhpcy5fdG9wbGV2ZWxWaWV3ID0gT3V0bGV0Vmll
dy5jcmVhdGUoKTsKKyAgICAgICAgdGhpcy5fdG9wbGV2ZWxWaWV3LnNldE91dGxldFN0YXRlKGxp
dmVSb3V0ZXMpOworICAgICAgICB2YXIgaW5zdGFuY2UgPSBvd25lci5sb29rdXAoJy1hcHBsaWNh
dGlvbi1pbnN0YW5jZTptYWluJyk7CisgICAgICAgIGluc3RhbmNlLmRpZENyZWF0ZVJvb3RWaWV3
KHRoaXMuX3RvcGxldmVsVmlldyk7CisgICAgICB9IGVsc2UgeworICAgICAgICB0aGlzLl90b3Bs
ZXZlbFZpZXcuc2V0T3V0bGV0U3RhdGUobGl2ZVJvdXRlcyk7CisgICAgICB9CisgICAgfSwKKwor
ICAgIC8qKgorICAgICAgSGFuZGxlcyBub3RpZnlpbmcgYW55IGxpc3RlbmVycyBvZiBhbiBpbXBl
bmRpbmcgVVJMCisgICAgICBjaGFuZ2UuCisgICAgICAgVHJpZ2dlcnMgdGhlIHJvdXRlciBsZXZl
bCBgd2lsbFRyYW5zaXRpb25gIGhvb2suCisgICAgICAgQG1ldGhvZCB3aWxsVHJhbnNpdGlvbgor
ICAgICAgQHB1YmxpYworICAgICAgQHNpbmNlIDEuMTEuMAorICAgICovCisgICAgd2lsbFRyYW5z
aXRpb246IGZ1bmN0aW9uIChvbGRJbmZvcywgbmV3SW5mb3MsIHRyYW5zaXRpb24pIHsKKyAgICAg
IF9lbWJlck1ldGFsUnVuX2xvb3AuZGVmYXVsdC5vbmNlKHRoaXMsIHRoaXMudHJpZ2dlciwgJ3dp
bGxUcmFuc2l0aW9uJywgdHJhbnNpdGlvbik7CisKKyAgICAgIGlmIChfZW1iZXJNZXRhbFByb3Bl
cnR5X2dldC5nZXQodGhpcywgJ25hbWVzcGFjZScpLkxPR19UUkFOU0lUSU9OUykgeworICAgICAg
ICBfZW1iZXJNZXRhbExvZ2dlci5kZWZhdWx0LmxvZygnUHJlcGFyaW5nIHRvIHRyYW5zaXRpb24g
ZnJvbSBcJycgKyBFbWJlclJvdXRlci5fcm91dGVQYXRoKG9sZEluZm9zKSArICdcJyB0byBcJycg
KyBFbWJlclJvdXRlci5fcm91dGVQYXRoKG5ld0luZm9zKSArICdcJycpOworICAgICAgfQorICAg
IH0sCisKKyAgICBoYW5kbGVVUkw6IGZ1bmN0aW9uICh1cmwpIHsKKyAgICAgIC8vIFVudGlsIHdl
IGhhdmUgYW4gZW1iZXItaWRpb21hdGljIHdheSBvZiBhY2Nlc3NpbmcgI2hhc2hlcywgd2UgbmVl
ZCB0bworICAgICAgLy8gcmVtb3ZlIGl0IGJlY2F1c2Ugcm91dGVyLmpzIGRvZXNuJ3Qga25vdyBo
b3cgdG8gaGFuZGxlIGl0LgorICAgICAgdXJsID0gdXJsLnNwbGl0KC8jKC4rKT8vKVswXTsKKyAg
ICAgIHJldHVybiB0aGlzLl9kb1VSTFRyYW5zaXRpb24oJ2hhbmRsZVVSTCcsIHVybCk7CisgICAg
fSwKKworICAgIF9kb1VSTFRyYW5zaXRpb246IGZ1bmN0aW9uIChyb3V0ZXJKc01ldGhvZCwgdXJs
KSB7CisgICAgICB2YXIgdHJhbnNpdGlvbiA9IHRoaXMucm91dGVyW3JvdXRlckpzTWV0aG9kXSh1
cmwgfHwgJy8nKTsKKyAgICAgIGRpZEJlZ2luVHJhbnNpdGlvbih0cmFuc2l0aW9uLCB0aGlzKTsK
KyAgICAgIHJldHVybiB0cmFuc2l0aW9uOworICAgIH0sCisKKyAgICAvKioKKyAgICAgIFRyYW5z
aXRpb24gdGhlIGFwcGxpY2F0aW9uIGludG8gYW5vdGhlciByb3V0ZS4gVGhlIHJvdXRlIG1heQor
ICAgICAgYmUgZWl0aGVyIGEgc2luZ2xlIHJvdXRlIG9yIHJvdXRlIHBhdGg6CisgICAgICAgU2Vl
IFtSb3V0ZS50cmFuc2l0aW9uVG9dKGh0dHA6Ly9lbWJlcmpzLmNvbS9hcGkvY2xhc3Nlcy9FbWJl
ci5Sb3V0ZS5odG1sI21ldGhvZF90cmFuc2l0aW9uVG8pIGZvciBtb3JlIGluZm8uCisgICAgICAg
QG1ldGhvZCB0cmFuc2l0aW9uVG8KKyAgICAgIEBwYXJhbSB7U3RyaW5nfSBuYW1lIHRoZSBuYW1l
IG9mIHRoZSByb3V0ZSBvciBhIFVSTAorICAgICAgQHBhcmFtIHsuLi5PYmplY3R9IG1vZGVscyB0
aGUgbW9kZWwocykgb3IgaWRlbnRpZmllcihzKSB0byBiZSB1c2VkIHdoaWxlCisgICAgICAgIHRy
YW5zaXRpb25pbmcgdG8gdGhlIHJvdXRlLgorICAgICAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25z
XSBvcHRpb25hbCBoYXNoIHdpdGggYSBxdWVyeVBhcmFtcyBwcm9wZXJ0eQorICAgICAgICBjb250
YWluaW5nIGEgbWFwcGluZyBvZiBxdWVyeSBwYXJhbWV0ZXJzCisgICAgICBAcmV0dXJuIHtUcmFu
c2l0aW9ufSB0aGUgdHJhbnNpdGlvbiBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICAg
ICAgYXR0ZW1wdGVkIHRyYW5zaXRpb24KKyAgICAgIEBwdWJsaWMKKyAgICAqLworICAgIHRyYW5z
aXRpb25UbzogZnVuY3Rpb24gKCkgeworICAgICAgdmFyIHF1ZXJ5UGFyYW1zOworCisgICAgICBm
b3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5
ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykgeworICAgICAgICBhcmdzW19rZXldID0gYXJndW1l
bnRzW19rZXldOworICAgICAgfQorCisgICAgICBpZiAocmVzZW1ibGVzVVJMKGFyZ3NbMF0pKSB7
CisgICAgICAgIHJldHVybiB0aGlzLl9kb1VSTFRyYW5zaXRpb24oJ3RyYW5zaXRpb25UbycsIGFy
Z3NbMF0pOworICAgICAgfQorCisgICAgICB2YXIgcG9zc2libGVRdWVyeVBhcmFtcyA9IGFyZ3Nb
YXJncy5sZW5ndGggLSAxXTsKKyAgICAgIGlmIChwb3NzaWJsZVF1ZXJ5UGFyYW1zICYmIHBvc3Np
YmxlUXVlcnlQYXJhbXMuaGFzT3duUHJvcGVydHkoJ3F1ZXJ5UGFyYW1zJykpIHsKKyAgICAgICAg
cXVlcnlQYXJhbXMgPSBhcmdzLnBvcCgpLnF1ZXJ5UGFyYW1zOworICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgcXVlcnlQYXJhbXMgPSB7fTsKKyAgICAgIH0KKworICAgICAgdmFyIHRhcmdldFJvdXRl
TmFtZSA9IGFyZ3Muc2hpZnQoKTsKKyAgICAgIHJldHVybiB0aGlzLl9kb1RyYW5zaXRpb24odGFy
Z2V0Um91dGVOYW1lLCBhcmdzLCBxdWVyeVBhcmFtcyk7CisgICAgfSwKKworICAgIGludGVybWVk
aWF0ZVRyYW5zaXRpb25UbzogZnVuY3Rpb24gKCkgeworICAgICAgdmFyIF9yb3V0ZXI7CisKKyAg
ICAgIChfcm91dGVyID0gdGhpcy5yb3V0ZXIpLmludGVybWVkaWF0ZVRyYW5zaXRpb25Uby5hcHBs
eShfcm91dGVyLCBhcmd1bWVudHMpOworCisgICAgICB1cGRhdGVQYXRocyh0aGlzKTsKKworICAg
ICAgdmFyIGluZm9zID0gdGhpcy5yb3V0ZXIuY3VycmVudEhhbmRsZXJJbmZvczsKKyAgICAgIGlm
IChfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ25hbWVzcGFjZScpLkxPR19UUkFO
U0lUSU9OUykgeworICAgICAgICBfZW1iZXJNZXRhbExvZ2dlci5kZWZhdWx0LmxvZygnSW50ZXJt
ZWRpYXRlLXRyYW5zaXRpb25lZCBpbnRvIFwnJyArIEVtYmVyUm91dGVyLl9yb3V0ZVBhdGgoaW5m
b3MpICsgJ1wnJyk7CisgICAgICB9CisgICAgfSwKKworICAgIHJlcGxhY2VXaXRoOiBmdW5jdGlv
biAoKSB7CisgICAgICByZXR1cm4gdGhpcy50cmFuc2l0aW9uVG8uYXBwbHkodGhpcywgYXJndW1l
bnRzKS5tZXRob2QoJ3JlcGxhY2UnKTsKKyAgICB9LAorCisgICAgZ2VuZXJhdGU6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgIHZhciBfcm91dGVyMjsKKworICAgICAgdmFyIHVybCA9IChfcm91dGVyMiA9
IHRoaXMucm91dGVyKS5nZW5lcmF0ZS5hcHBseShfcm91dGVyMiwgYXJndW1lbnRzKTsKKyAgICAg
IHJldHVybiB0aGlzLmxvY2F0aW9uLmZvcm1hdFVSTCh1cmwpOworICAgIH0sCisKKyAgICAvKioK
KyAgICAgIERldGVybWluZXMgaWYgdGhlIHN1cHBsaWVkIHJvdXRlIGlzIGN1cnJlbnRseSBhY3Rp
dmUuCisgICAgICAgQG1ldGhvZCBpc0FjdGl2ZQorICAgICAgQHBhcmFtIHJvdXRlTmFtZQorICAg
ICAgQHJldHVybiB7Qm9vbGVhbn0KKyAgICAgIEBwcml2YXRlCisgICAgKi8KKyAgICBpc0FjdGl2
ZTogZnVuY3Rpb24gKHJvdXRlTmFtZSkgeworICAgICAgdmFyIHJvdXRlciA9IHRoaXMucm91dGVy
OworICAgICAgcmV0dXJuIHJvdXRlci5pc0FjdGl2ZS5hcHBseShyb3V0ZXIsIGFyZ3VtZW50cyk7
CisgICAgfSwKKworICAgIC8qKgorICAgICAgQW4gYWx0ZXJuYXRpdmUgZm9ybSBvZiBgaXNBY3Rp
dmVgIHRoYXQgZG9lc24ndCByZXF1aXJlCisgICAgICBtYW51YWwgY29uY2F0ZW5hdGlvbiBvZiB0
aGUgYXJndW1lbnRzIGludG8gYSBzaW5nbGUKKyAgICAgIGFycmF5LgorICAgICAgIEBtZXRob2Qg
aXNBY3RpdmVJbnRlbnQKKyAgICAgIEBwYXJhbSByb3V0ZU5hbWUKKyAgICAgIEBwYXJhbSBtb2Rl
bHMKKyAgICAgIEBwYXJhbSBxdWVyeVBhcmFtcworICAgICAgQHJldHVybiB7Qm9vbGVhbn0KKyAg
ICAgIEBwcml2YXRlCisgICAgICBAc2luY2UgMS43LjAKKyAgICAqLworICAgIGlzQWN0aXZlSW50
ZW50OiBmdW5jdGlvbiAocm91dGVOYW1lLCBtb2RlbHMsIHF1ZXJ5UGFyYW1zKSB7CisgICAgICBy
ZXR1cm4gdGhpcy5jdXJyZW50U3RhdGUuaXNBY3RpdmVJbnRlbnQocm91dGVOYW1lLCBtb2RlbHMs
IHF1ZXJ5UGFyYW1zKTsKKyAgICB9LAorCisgICAgc2VuZDogZnVuY3Rpb24gKG5hbWUsIGNvbnRl
eHQpIHsKKyAgICAgIHZhciBfcm91dGVyMzsKKworICAgICAgKF9yb3V0ZXIzID0gdGhpcy5yb3V0
ZXIpLnRyaWdnZXIuYXBwbHkoX3JvdXRlcjMsIGFyZ3VtZW50cyk7CisgICAgfSwKKworICAgIC8q
KgorICAgICAgRG9lcyB0aGlzIHJvdXRlciBpbnN0YW5jZSBoYXZlIHRoZSBnaXZlbiByb3V0ZS4K
KyAgICAgICBAbWV0aG9kIGhhc1JvdXRlCisgICAgICBAcmV0dXJuIHtCb29sZWFufQorICAgICAg
QHByaXZhdGUKKyAgICAqLworICAgIGhhc1JvdXRlOiBmdW5jdGlvbiAocm91dGUpIHsKKyAgICAg
IHJldHVybiB0aGlzLnJvdXRlci5oYXNSb3V0ZShyb3V0ZSk7CisgICAgfSwKKworICAgIC8qKgor
ICAgICAgUmVzZXRzIHRoZSBzdGF0ZSBvZiB0aGUgcm91dGVyIGJ5IGNsZWFyaW5nIHRoZSBjdXJy
ZW50IHJvdXRlCisgICAgICBoYW5kbGVycyBhbmQgZGVhY3RpdmF0aW5nIHRoZW0uCisgICAgICAg
QHByaXZhdGUKKyAgICAgIEBtZXRob2QgcmVzZXQKKyAgICAgKi8KKyAgICByZXNldDogZnVuY3Rp
b24gKCkgeworICAgICAgaWYgKHRoaXMucm91dGVyKSB7CisgICAgICAgIHRoaXMucm91dGVyLnJl
c2V0KCk7CisgICAgICB9CisgICAgfSwKKworICAgIHdpbGxEZXN0cm95OiBmdW5jdGlvbiAoKSB7
CisgICAgICBpZiAodGhpcy5fdG9wbGV2ZWxWaWV3KSB7CisgICAgICAgIHRoaXMuX3RvcGxldmVs
Vmlldy5kZXN0cm95KCk7CisgICAgICAgIHRoaXMuX3RvcGxldmVsVmlldyA9IG51bGw7CisgICAg
ICB9CisgICAgICB0aGlzLl9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgICAgdGhp
cy5yZXNldCgpOworICAgIH0sCisKKyAgICBfbG9va3VwQWN0aXZlQ29tcG9uZW50Tm9kZTogZnVu
Y3Rpb24gKHRlbXBsYXRlTmFtZSkgeworICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZVZpZXdzW3Rl
bXBsYXRlTmFtZV07CisgICAgfSwKKworICAgIC8qCisgICAgICBDYWxsZWQgd2hlbiBhbiBhY3Rp
dmUgcm91dGUncyBxdWVyeSBwYXJhbWV0ZXIgaGFzIGNoYW5nZWQuCisgICAgICBUaGVzZSBjaGFu
Z2VzIGFyZSBiYXRjaGVkIGludG8gYSBydW5sb29wIHJ1biBhbmQgdHJpZ2dlcgorICAgICAgYSBz
aW5nbGUgdHJhbnNpdGlvbi4KKyAgICAqLworICAgIF9hY3RpdmVRUENoYW5nZWQ6IGZ1bmN0aW9u
IChxdWVyeVBhcmFtZXRlck5hbWUsIG5ld1ZhbHVlKSB7CisgICAgICB0aGlzLl9xdWV1ZWRRUENo
YW5nZXNbcXVlcnlQYXJhbWV0ZXJOYW1lXSA9IG5ld1ZhbHVlOworICAgICAgX2VtYmVyTWV0YWxS
dW5fbG9vcC5kZWZhdWx0Lm9uY2UodGhpcywgdGhpcy5fZmlyZVF1ZXJ5UGFyYW1UcmFuc2l0aW9u
KTsKKyAgICB9LAorCisgICAgX3VwZGF0aW5nUVBDaGFuZ2VkOiBmdW5jdGlvbiAocXVlcnlQYXJh
bWV0ZXJOYW1lKSB7CisgICAgICBpZiAoIXRoaXMuX3FwVXBkYXRlcykgeworICAgICAgICB0aGlz
Ll9xcFVwZGF0ZXMgPSB7fTsKKyAgICAgIH0KKyAgICAgIHRoaXMuX3FwVXBkYXRlc1txdWVyeVBh
cmFtZXRlck5hbWVdID0gdHJ1ZTsKKyAgICB9LAorCisgICAgLyoKKyAgICAgIFRyaWdnZXJzIGEg
dHJhbnNpdGlvbiB0byBhIHJvdXRlIGJhc2VkIG9uIHF1ZXJ5IHBhcmFtZXRlciBjaGFuZ2VzLgor
ICAgICAgVGhpcyBpcyBjYWxsZWQgb25jZSBwZXIgcnVubG9vcCwgdG8gYmF0Y2ggY2hhbmdlcy4K
KyAgICAgICBlLmcuCisgICAgICAgaWYgdGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIGluIHN1Y2Nl
c3Npb246CisgICAgICB0aGlzLl9hY3RpdmVRUENoYW5nZWQoJ2ZvbycsICcxMCcpOworICAgICAg
ICAvLyByZXN1bHRzIGluIF9xdWV1ZWRRUENoYW5nZXMgPSB7Zm9vOiAnMTAnfQorICAgICAgdGhp
cy5fYWN0aXZlUVBDaGFuZ2VkKCdiYXInLCBmYWxzZSk7CisgICAgICAgIC8vIHJlc3VsdHMgaW4g
X3F1ZXVlZFFQQ2hhbmdlcyA9IHtmb286ICcxMCcsIGJhcjogZmFsc2V9CisgICAgICAgIF9xdWV1
ZWRRUENoYW5nZXMgd2lsbCByZXByZXNlbnQgYm90aCBvZiB0aGVzZSBjaGFuZ2VzCisgICAgICBh
bmQgdGhlIHRyYW5zaXRpb24gdXNpbmcgYHRyYW5zaXRpb25Ub2Agd2lsbCBiZSB0cmlnZ2VyZWQK
KyAgICAgIG9uY2UuCisgICAgKi8KKyAgICBfZmlyZVF1ZXJ5UGFyYW1UcmFuc2l0aW9uOiBmdW5j
dGlvbiAoKSB7CisgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh7IHF1ZXJ5UGFyYW1zOiB0aGlzLl9x
dWV1ZWRRUENoYW5nZXMgfSk7CisgICAgICB0aGlzLl9yZXNldFF1ZXVlZFF1ZXJ5UGFyYW1ldGVy
Q2hhbmdlcygpOworICAgIH0sCisKKyAgICBfY29ubmVjdEFjdGl2ZUNvbXBvbmVudE5vZGU6IGZ1
bmN0aW9uICh0ZW1wbGF0ZU5hbWUsIGNvbXBvbmVudE5vZGUpIHsKKyAgICAgIF9lbWJlck1ldGFs
RGVidWcuYXNzZXJ0KCdjYW5ub3QgY29ubmVjdCBhbiBhY3RpdmVWaWV3IHRoYXQgYWxyZWFkeSBl
eGlzdHMnLCAhdGhpcy5fYWN0aXZlVmlld3NbdGVtcGxhdGVOYW1lXSk7CisKKyAgICAgIHZhciBf
YWN0aXZlVmlld3MgPSB0aGlzLl9hY3RpdmVWaWV3czsKKyAgICAgIGZ1bmN0aW9uIGRpc2Nvbm5l
Y3RBY3RpdmVWaWV3KCkgeworICAgICAgICBkZWxldGUgX2FjdGl2ZVZpZXdzW3RlbXBsYXRlTmFt
ZV07CisgICAgICB9CisKKyAgICAgIHRoaXMuX2FjdGl2ZVZpZXdzW3RlbXBsYXRlTmFtZV0gPSBj
b21wb25lbnROb2RlOworICAgICAgY29tcG9uZW50Tm9kZS5yZW5kZXJOb2RlLmFkZERlc3RydWN0
aW9uKHsgZGVzdHJveTogZGlzY29ubmVjdEFjdGl2ZVZpZXcgfSk7CisgICAgfSwKKworICAgIF9z
ZXR1cExvY2F0aW9uOiBmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgbG9jYXRpb24gPSBfZW1iZXJN
ZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ2xvY2F0aW9uJyk7CisgICAgICB2YXIgcm9vdFVS
TCA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAncm9vdFVSTCcpOworICAgICAg
dmFyIG93bmVyID0gX2NvbnRhaW5lck93bmVyLmdldE93bmVyKHRoaXMpOworCisgICAgICBpZiAo
J3N0cmluZycgPT09IHR5cGVvZiBsb2NhdGlvbiAmJiBvd25lcikgeworICAgICAgICB2YXIgcmVz
b2x2ZWRMb2NhdGlvbiA9IG93bmVyLmxvb2t1cCgnbG9jYXRpb246JyArIGxvY2F0aW9uKTsKKwor
ICAgICAgICBpZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiByZXNvbHZlZExvY2F0aW9uKSB7Cisg
ICAgICAgICAgbG9jYXRpb24gPSBfZW1iZXJNZXRhbFByb3BlcnR5X3NldC5zZXQodGhpcywgJ2xv
Y2F0aW9uJywgcmVzb2x2ZWRMb2NhdGlvbik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
Ly8gQWxsb3cgZm9yIGRlcHJlY2F0ZWQgcmVnaXN0cmF0aW9uIG9mIGN1c3RvbSBsb2NhdGlvbiBB
UEkncworICAgICAgICAgIHZhciBvcHRpb25zID0geworICAgICAgICAgICAgaW1wbGVtZW50YXRp
b246IGxvY2F0aW9uCisgICAgICAgICAgfTsKKworICAgICAgICAgIGxvY2F0aW9uID0gX2VtYmVy
TWV0YWxQcm9wZXJ0eV9zZXQuc2V0KHRoaXMsICdsb2NhdGlvbicsIF9lbWJlclJvdXRpbmdMb2Nh
dGlvbkFwaS5kZWZhdWx0LmNyZWF0ZShvcHRpb25zKSk7CisgICAgICAgIH0KKyAgICAgIH0KKwor
ICAgICAgaWYgKGxvY2F0aW9uICE9PSBudWxsICYmIHR5cGVvZiBsb2NhdGlvbiA9PT0gJ29iamVj
dCcpIHsKKyAgICAgICAgaWYgKHJvb3RVUkwpIHsKKyAgICAgICAgICBfZW1iZXJNZXRhbFByb3Bl
cnR5X3NldC5zZXQobG9jYXRpb24sICdyb290VVJMJywgcm9vdFVSTCk7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBBbGxvdyB0aGUgbG9jYXRpb24gdG8gZG8gYW55IGZlYXR1cmUgZGV0ZWN0aW9u
LCBzdWNoIGFzIEF1dG9Mb2NhdGlvbgorICAgICAgICAvLyBkZXRlY3RpbmcgaGlzdG9yeSBzdXBw
b3J0LiBUaGlzIGdpdmVzIGl0IGEgY2hhbmNlIHRvIHNldCBpdHMKKyAgICAgICAgLy8gYGNhbmNl
bFJvdXRlclNldHVwYCBwcm9wZXJ0eSB3aGljaCBhYm9ydHMgcm91dGluZy4KKyAgICAgICAgaWYg
KHR5cGVvZiBsb2NhdGlvbi5kZXRlY3QgPT09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgICBsb2Nh
dGlvbi5kZXRlY3QoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGVuc3VyZSB0aGF0IGluaXRT
dGF0ZSBpcyBjYWxsZWQgQUZURVIgdGhlIHJvb3RVUkwgaXMgc2V0IG9uCisgICAgICAgIC8vIHRo
ZSBsb2NhdGlvbiBpbnN0YW5jZQorICAgICAgICBpZiAodHlwZW9mIGxvY2F0aW9uLmluaXRTdGF0
ZSA9PT0gJ2Z1bmN0aW9uJykgeworICAgICAgICAgIGxvY2F0aW9uLmluaXRTdGF0ZSgpOworICAg
ICAgICB9CisgICAgICB9CisgICAgfSwKKworICAgIF9nZXRIYW5kbGVyRnVuY3Rpb246IGZ1bmN0
aW9uICgpIHsKKyAgICAgIHZhciBfdGhpczIgPSB0aGlzOworCisgICAgICB2YXIgc2VlbiA9IG5l
dyBfZW1iZXJNZXRhbEVtcHR5X29iamVjdC5kZWZhdWx0KCk7CisgICAgICB2YXIgb3duZXIgPSBf
Y29udGFpbmVyT3duZXIuZ2V0T3duZXIodGhpcyk7CisgICAgICB2YXIgRGVmYXVsdFJvdXRlID0g
b3duZXIuX2xvb2t1cEZhY3RvcnkoJ3JvdXRlOmJhc2ljJyk7CisKKyAgICAgIHJldHVybiBmdW5j
dGlvbiAobmFtZSkgeworICAgICAgICB2YXIgcm91dGVOYW1lID0gJ3JvdXRlOicgKyBuYW1lOwor
ICAgICAgICB2YXIgaGFuZGxlciA9IG93bmVyLmxvb2t1cChyb3V0ZU5hbWUpOworCisgICAgICAg
IGlmIChzZWVuW25hbWVdKSB7CisgICAgICAgICAgcmV0dXJuIGhhbmRsZXI7CisgICAgICAgIH0K
KworICAgICAgICBzZWVuW25hbWVdID0gdHJ1ZTsKKworICAgICAgICBpZiAoIWhhbmRsZXIpIHsK
KyAgICAgICAgICBvd25lci5yZWdpc3Rlcihyb3V0ZU5hbWUsIERlZmF1bHRSb3V0ZS5leHRlbmQo
KSk7CisgICAgICAgICAgaGFuZGxlciA9IG93bmVyLmxvb2t1cChyb3V0ZU5hbWUpOworCisgICAg
ICAgICAgaWYgKF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldChfdGhpczIsICduYW1lc3BhY2Uu
TE9HX0FDVElWRV9HRU5FUkFUSU9OJykpIHsKKyAgICAgICAgICAgIF9lbWJlck1ldGFsRGVidWcu
aW5mbygnZ2VuZXJhdGVkIC0+ICcgKyByb3V0ZU5hbWUsIHsgZnVsbE5hbWU6IHJvdXRlTmFtZSB9
KTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBoYW5kbGVyLnJvdXRlTmFtZSA9
IG5hbWU7CisgICAgICAgIHJldHVybiBoYW5kbGVyOworICAgICAgfTsKKyAgICB9LAorCisgICAg
X3NldHVwUm91dGVyOiBmdW5jdGlvbiAocm91dGVyLCBsb2NhdGlvbikgeworICAgICAgdmFyIGxh
c3RVUkw7CisgICAgICB2YXIgZW1iZXJSb3V0ZXIgPSB0aGlzOworCisgICAgICByb3V0ZXIuZ2V0
SGFuZGxlciA9IHRoaXMuX2dldEhhbmRsZXJGdW5jdGlvbigpOworCisgICAgICB2YXIgZG9VcGRh
dGVVUkwgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGxvY2F0aW9uLnNldFVSTChsYXN0VVJMKTsK
KyAgICAgIH07CisKKyAgICAgIHJvdXRlci51cGRhdGVVUkwgPSBmdW5jdGlvbiAocGF0aCkgewor
ICAgICAgICBsYXN0VVJMID0gcGF0aDsKKyAgICAgICAgX2VtYmVyTWV0YWxSdW5fbG9vcC5kZWZh
dWx0Lm9uY2UoZG9VcGRhdGVVUkwpOworICAgICAgfTsKKworICAgICAgaWYgKGxvY2F0aW9uLnJl
cGxhY2VVUkwpIHsKKyAgICAgICAgdmFyIGRvUmVwbGFjZVVSTCA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICBsb2NhdGlvbi5yZXBsYWNlVVJMKGxhc3RVUkwpOworICAgICAgICB9OworCisgICAg
ICAgIHJvdXRlci5yZXBsYWNlVVJMID0gZnVuY3Rpb24gKHBhdGgpIHsKKyAgICAgICAgICBsYXN0
VVJMID0gcGF0aDsKKyAgICAgICAgICBfZW1iZXJNZXRhbFJ1bl9sb29wLmRlZmF1bHQub25jZShk
b1JlcGxhY2VVUkwpOworICAgICAgICB9OworICAgICAgfQorCisgICAgICByb3V0ZXIuZGlkVHJh
bnNpdGlvbiA9IGZ1bmN0aW9uIChpbmZvcykgeworICAgICAgICBlbWJlclJvdXRlci5kaWRUcmFu
c2l0aW9uKGluZm9zKTsKKyAgICAgIH07CisKKyAgICAgIHJvdXRlci53aWxsVHJhbnNpdGlvbiA9
IGZ1bmN0aW9uIChvbGRJbmZvcywgbmV3SW5mb3MsIHRyYW5zaXRpb24pIHsKKyAgICAgICAgZW1i
ZXJSb3V0ZXIud2lsbFRyYW5zaXRpb24ob2xkSW5mb3MsIG5ld0luZm9zLCB0cmFuc2l0aW9uKTsK
KyAgICAgIH07CisgICAgfSwKKworICAgIF9zZXJpYWxpemVRdWVyeVBhcmFtczogZnVuY3Rpb24g
KHRhcmdldFJvdXRlTmFtZSwgcXVlcnlQYXJhbXMpIHsKKyAgICAgIHZhciBncm91cGVkQnlVcmxL
ZXkgPSB7fTsKKworICAgICAgZm9yRWFjaFF1ZXJ5UGFyYW0odGhpcywgdGFyZ2V0Um91dGVOYW1l
LCBxdWVyeVBhcmFtcywgZnVuY3Rpb24gKGtleSwgdmFsdWUsIHFwKSB7CisgICAgICAgIHZhciB1
cmxLZXkgPSBxcC51cmxLZXk7CisgICAgICAgIGlmICghZ3JvdXBlZEJ5VXJsS2V5W3VybEtleV0p
IHsKKyAgICAgICAgICBncm91cGVkQnlVcmxLZXlbdXJsS2V5XSA9IFtdOworICAgICAgICB9Cisg
ICAgICAgIGdyb3VwZWRCeVVybEtleVt1cmxLZXldLnB1c2goeworICAgICAgICAgIHFwOiBxcCwK
KyAgICAgICAgICB2YWx1ZTogdmFsdWUKKyAgICAgICAgfSk7CisgICAgICAgIGRlbGV0ZSBxdWVy
eVBhcmFtc1trZXldOworICAgICAgfSk7CisKKyAgICAgIGZvciAodmFyIGtleSBpbiBncm91cGVk
QnlVcmxLZXkpIHsKKyAgICAgICAgdmFyIHFwcyA9IGdyb3VwZWRCeVVybEtleVtrZXldOworICAg
ICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnWW91XCdyZSBub3QgYWxsb3dlZCB0byBoYXZl
IG1vcmUgdGhhbiBvbmUgY29udHJvbGxlciBwcm9wZXJ0eSBtYXAgdG8gdGhlIHNhbWUgcXVlcnkg
cGFyYW0ga2V5LCBidXQgYm90aCBgJyArIHFwc1swXS5xcC5zY29wZWRQcm9wZXJ0eU5hbWUgKyAn
YCBhbmQgYCcgKyAocXBzWzFdID8gcXBzWzFdLnFwLnNjb3BlZFByb3BlcnR5TmFtZSA6ICcnKSAr
ICdgIG1hcCB0byBgJyArIHFwc1swXS5xcC51cmxLZXkgKyAnYC4gWW91IGNhbiBmaXggdGhpcyBi
eSBtYXBwaW5nIG9uZSBvZiB0aGUgY29udHJvbGxlciBwcm9wZXJ0aWVzIHRvIGEgZGlmZmVyZW50
IHF1ZXJ5IHBhcmFtIGtleSB2aWEgdGhlIGBhc2AgY29uZmlnIG9wdGlvbiwgZS5nLiBgJyArIHFw
c1swXS5xcC5wcm9wICsgJzogeyBhczogXCdvdGhlci0nICsgcXBzWzBdLnFwLnByb3AgKyAnXCcg
fWAnLCBxcHMubGVuZ3RoIDw9IDEpOworICAgICAgICB2YXIgcXAgPSBxcHNbMF0ucXA7CisgICAg
ICAgIHF1ZXJ5UGFyYW1zW3FwLnVybEtleV0gPSBxcC5yb3V0ZS5zZXJpYWxpemVRdWVyeVBhcmFt
KHFwc1swXS52YWx1ZSwgcXAudXJsS2V5LCBxcC50eXBlKTsKKyAgICAgIH0KKyAgICB9LAorCisg
ICAgX2Rlc2VyaWFsaXplUXVlcnlQYXJhbXM6IGZ1bmN0aW9uICh0YXJnZXRSb3V0ZU5hbWUsIHF1
ZXJ5UGFyYW1zKSB7CisgICAgICBmb3JFYWNoUXVlcnlQYXJhbSh0aGlzLCB0YXJnZXRSb3V0ZU5h
bWUsIHF1ZXJ5UGFyYW1zLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgcXApIHsKKyAgICAgICAgZGVs
ZXRlIHF1ZXJ5UGFyYW1zW2tleV07CisgICAgICAgIHF1ZXJ5UGFyYW1zW3FwLnByb3BdID0gcXAu
cm91dGUuZGVzZXJpYWxpemVRdWVyeVBhcmFtKHZhbHVlLCBxcC51cmxLZXksIHFwLnR5cGUpOwor
ICAgICAgfSk7CisgICAgfSwKKworICAgIF9wcnVuZURlZmF1bHRRdWVyeVBhcmFtVmFsdWVzOiBm
dW5jdGlvbiAodGFyZ2V0Um91dGVOYW1lLCBxdWVyeVBhcmFtcykgeworICAgICAgdmFyIHFwcyA9
IHRoaXMuX3F1ZXJ5UGFyYW1zRm9yKHRhcmdldFJvdXRlTmFtZSk7CisgICAgICBmb3IgKHZhciBr
ZXkgaW4gcXVlcnlQYXJhbXMpIHsKKyAgICAgICAgdmFyIHFwID0gcXBzLm1hcFtrZXldOworICAg
ICAgICBpZiAocXAgJiYgcXAuc2VyaWFsaXplZERlZmF1bHRWYWx1ZSA9PT0gcXVlcnlQYXJhbXNb
a2V5XSkgeworICAgICAgICAgIGRlbGV0ZSBxdWVyeVBhcmFtc1trZXldOworICAgICAgICB9Cisg
ICAgICB9CisgICAgfSwKKworICAgIF9kb1RyYW5zaXRpb246IGZ1bmN0aW9uIChfdGFyZ2V0Um91
dGVOYW1lLCBtb2RlbHMsIF9xdWVyeVBhcmFtcykgeworICAgICAgdmFyIHRhcmdldFJvdXRlTmFt
ZSA9IF90YXJnZXRSb3V0ZU5hbWUgfHwgX2VtYmVyUm91dGluZ1V0aWxzLmdldEFjdGl2ZVRhcmdl
dE5hbWUodGhpcy5yb3V0ZXIpOworICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1RoZSBy
b3V0ZSAnICsgdGFyZ2V0Um91dGVOYW1lICsgJyB3YXMgbm90IGZvdW5kJywgdGFyZ2V0Um91dGVO
YW1lICYmIHRoaXMucm91dGVyLmhhc1JvdXRlKHRhcmdldFJvdXRlTmFtZSkpOworCisgICAgICB2
YXIgcXVlcnlQYXJhbXMgPSB7fTsKKyAgICAgIC8vIG1lcmdlIGluIGFueSBxdWVyeVBhcmFtcyBm
cm9tIHRoZSBhY3RpdmUgdHJhbnNpdGlvbiB3aGljaCBjb3VsZCBpbmNsdWRlCisgICAgICAvLyBx
dWVyeXBhcmFtcyBmcm9tIHRoZSB1cmwgb24gaW5pdGlhbCBsb2FkLgorICAgICAgaWYgKHRoaXMu
cm91dGVyLmFjdGl2ZVRyYW5zaXRpb24pIHsKKyAgICAgICAgX2VtYmVyTWV0YWxBc3NpZ24uZGVm
YXVsdChxdWVyeVBhcmFtcywgdGhpcy5yb3V0ZXIuYWN0aXZlVHJhbnNpdGlvbi5xdWVyeVBhcmFt
cyk7CisgICAgICB9CisKKyAgICAgIF9lbWJlck1ldGFsQXNzaWduLmRlZmF1bHQocXVlcnlQYXJh
bXMsIF9xdWVyeVBhcmFtcyk7CisgICAgICB0aGlzLl9wcmVwYXJlUXVlcnlQYXJhbXModGFyZ2V0
Um91dGVOYW1lLCBtb2RlbHMsIHF1ZXJ5UGFyYW1zKTsKKworICAgICAgdmFyIHRyYW5zaXRpb25B
cmdzID0gX2VtYmVyUm91dGluZ1V0aWxzLnJvdXRlQXJncyh0YXJnZXRSb3V0ZU5hbWUsIG1vZGVs
cywgcXVlcnlQYXJhbXMpOworICAgICAgdmFyIHRyYW5zaXRpb24gPSB0aGlzLnJvdXRlci50cmFu
c2l0aW9uVG8uYXBwbHkodGhpcy5yb3V0ZXIsIHRyYW5zaXRpb25BcmdzKTsKKworICAgICAgZGlk
QmVnaW5UcmFuc2l0aW9uKHRyYW5zaXRpb24sIHRoaXMpOworCisgICAgICByZXR1cm4gdHJhbnNp
dGlvbjsKKyAgICB9LAorCisgICAgX3ByZXBhcmVRdWVyeVBhcmFtczogZnVuY3Rpb24gKHRhcmdl
dFJvdXRlTmFtZSwgbW9kZWxzLCBxdWVyeVBhcmFtcykgeworICAgICAgdGhpcy5faHlkcmF0ZVVu
c3VwcGxpZWRRdWVyeVBhcmFtcyh0YXJnZXRSb3V0ZU5hbWUsIG1vZGVscywgcXVlcnlQYXJhbXMp
OworICAgICAgdGhpcy5fc2VyaWFsaXplUXVlcnlQYXJhbXModGFyZ2V0Um91dGVOYW1lLCBxdWVy
eVBhcmFtcyk7CisgICAgICB0aGlzLl9wcnVuZURlZmF1bHRRdWVyeVBhcmFtVmFsdWVzKHRhcmdl
dFJvdXRlTmFtZSwgcXVlcnlQYXJhbXMpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgIFJldHVy
bnMgYSBtZXJnZWQgcXVlcnkgcGFyYW1zIG1ldGEgb2JqZWN0IGZvciBhIGdpdmVuIHJvdXRlLgor
ICAgICAgVXNlZnVsIGZvciBhc2tpbmcgYSByb3V0ZSB3aGF0IGl0cyBrbm93biBxdWVyeSBwYXJh
bXMgYXJlLgorICAgICAgIEBwcml2YXRlCisgICAgICovCisgICAgX3F1ZXJ5UGFyYW1zRm9yOiBm
dW5jdGlvbiAobGVhZlJvdXRlTmFtZSkgeworICAgICAgaWYgKHRoaXMuX3FwQ2FjaGVbbGVhZlJv
dXRlTmFtZV0pIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3FwQ2FjaGVbbGVhZlJvdXRlTmFtZV07
CisgICAgICB9CisKKyAgICAgIHZhciBtYXAgPSB7fTsKKyAgICAgIHZhciBxcHMgPSBbXTsKKyAg
ICAgIHRoaXMuX3FwQ2FjaGVbbGVhZlJvdXRlTmFtZV0gPSB7CisgICAgICAgIG1hcDogbWFwLAor
ICAgICAgICBxcHM6IHFwcworICAgICAgfTsKKworICAgICAgdmFyIHJvdXRlcmpzID0gdGhpcy5y
b3V0ZXI7CisgICAgICB2YXIgcmVjb2dIYW5kbGVySW5mb3MgPSByb3V0ZXJqcy5yZWNvZ25pemVy
LmhhbmRsZXJzRm9yKGxlYWZSb3V0ZU5hbWUpOworCisgICAgICBmb3IgKHZhciBpID0gMCwgbGVu
ID0gcmVjb2dIYW5kbGVySW5mb3MubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgdmFy
IHJlY29nSGFuZGxlciA9IHJlY29nSGFuZGxlckluZm9zW2ldOworICAgICAgICB2YXIgcm91dGUg
PSByb3V0ZXJqcy5nZXRIYW5kbGVyKHJlY29nSGFuZGxlci5oYW5kbGVyKTsKKyAgICAgICAgdmFy
IHFwTWV0YSA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldChyb3V0ZSwgJ19xcCcpOworCisg
ICAgICAgIGlmICghcXBNZXRhKSB7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKwor
ICAgICAgICBfZW1iZXJNZXRhbEFzc2lnbi5kZWZhdWx0KG1hcCwgcXBNZXRhLm1hcCk7CisgICAg
ICAgIHFwcy5wdXNoLmFwcGx5KHFwcywgcXBNZXRhLnFwcyk7CisgICAgICB9CisKKyAgICAgIHJl
dHVybiB7CisgICAgICAgIHFwczogcXBzLAorICAgICAgICBtYXA6IG1hcAorICAgICAgfTsKKyAg
ICB9LAorCisgICAgX2h5ZHJhdGVVbnN1cHBsaWVkUXVlcnlQYXJhbXM6IGZ1bmN0aW9uIChsZWFm
Um91dGVOYW1lLCBjb250ZXh0cywgcXVlcnlQYXJhbXMpIHsKKyAgICAgIHZhciBzdGF0ZSA9IGNh
bGN1bGF0ZVBvc3RUcmFuc2l0aW9uU3RhdGUodGhpcywgbGVhZlJvdXRlTmFtZSwgY29udGV4dHMp
OworICAgICAgdmFyIGhhbmRsZXJJbmZvcyA9IHN0YXRlLmhhbmRsZXJJbmZvczsKKyAgICAgIHZh
ciBhcHBDYWNoZSA9IHRoaXMuX2J1Y2tldENhY2hlOworICAgICAgX2VtYmVyUm91dGluZ1V0aWxz
LnN0YXNoUGFyYW1OYW1lcyh0aGlzLCBoYW5kbGVySW5mb3MpOworCisgICAgICBmb3IgKHZhciBp
ID0gMCwgbGVuID0gaGFuZGxlckluZm9zLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAg
IHZhciByb3V0ZSA9IGhhbmRsZXJJbmZvc1tpXS5oYW5kbGVyOworICAgICAgICB2YXIgcXBNZXRh
ID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHJvdXRlLCAnX3FwJyk7CisKKyAgICAgICAg
Zm9yICh2YXIgaiA9IDAsIHFwTGVuID0gcXBNZXRhLnFwcy5sZW5ndGg7IGogPCBxcExlbjsgKytq
KSB7CisgICAgICAgICAgdmFyIHFwID0gcXBNZXRhLnFwc1tqXTsKKworICAgICAgICAgIHZhciBw
cmVzZW50UHJvcCA9IHFwLnByb3AgaW4gcXVlcnlQYXJhbXMgJiYgcXAucHJvcCB8fCBxcC5zY29w
ZWRQcm9wZXJ0eU5hbWUgaW4gcXVlcnlQYXJhbXMgJiYgcXAuc2NvcGVkUHJvcGVydHlOYW1lOwor
CisgICAgICAgICAgaWYgKHByZXNlbnRQcm9wKSB7CisgICAgICAgICAgICBpZiAocHJlc2VudFBy
b3AgIT09IHFwLnNjb3BlZFByb3BlcnR5TmFtZSkgeworICAgICAgICAgICAgICBxdWVyeVBhcmFt
c1txcC5zY29wZWRQcm9wZXJ0eU5hbWVdID0gcXVlcnlQYXJhbXNbcHJlc2VudFByb3BdOworICAg
ICAgICAgICAgICBkZWxldGUgcXVlcnlQYXJhbXNbcHJlc2VudFByb3BdOworICAgICAgICAgICAg
fQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgY2FjaGVLZXkgPSBfZW1iZXJS
b3V0aW5nVXRpbHMuY2FsY3VsYXRlQ2FjaGVLZXkocXAuY3RybCwgcXAucGFydHMsIHN0YXRlLnBh
cmFtcyk7CisgICAgICAgICAgICBxdWVyeVBhcmFtc1txcC5zY29wZWRQcm9wZXJ0eU5hbWVdID0g
YXBwQ2FjaGUubG9va3VwKGNhY2hlS2V5LCBxcC5wcm9wLCBxcC5kZWZhdWx0VmFsdWUpOworICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisKKyAgICBfc2NoZWR1bGVMb2Fk
aW5nRXZlbnQ6IGZ1bmN0aW9uICh0cmFuc2l0aW9uLCBvcmlnaW5Sb3V0ZSkgeworICAgICAgdGhp
cy5fY2FuY2VsU2xvd1RyYW5zaXRpb25UaW1lcigpOworICAgICAgdGhpcy5fc2xvd1RyYW5zaXRp
b25UaW1lciA9IF9lbWJlck1ldGFsUnVuX2xvb3AuZGVmYXVsdC5zY2hlZHVsZU9uY2UoJ3JvdXRl
clRyYW5zaXRpb25zJywgdGhpcywgJ19oYW5kbGVTbG93VHJhbnNpdGlvbicsIHRyYW5zaXRpb24s
IG9yaWdpblJvdXRlKTsKKyAgICB9LAorCisgICAgY3VycmVudFN0YXRlOiBudWxsLAorICAgIHRh
cmdldFN0YXRlOiBudWxsLAorCisgICAgX2hhbmRsZVNsb3dUcmFuc2l0aW9uOiBmdW5jdGlvbiAo
dHJhbnNpdGlvbiwgb3JpZ2luUm91dGUpIHsKKyAgICAgIGlmICghdGhpcy5yb3V0ZXIuYWN0aXZl
VHJhbnNpdGlvbikgeworICAgICAgICAvLyBEb24ndCBmaXJlIGFuIGV2ZW50IGlmIHdlJ3ZlIHNp
bmNlIG1vdmVkIG9uIGZyb20KKyAgICAgICAgLy8gdGhlIHRyYW5zaXRpb24gdGhhdCBwdXQgdXMg
aW4gYSBsb2FkaW5nIHN0YXRlLgorICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICAgIHRo
aXMuc2V0KCd0YXJnZXRTdGF0ZScsIF9lbWJlclJvdXRpbmdTeXN0ZW1Sb3V0ZXJfc3RhdGUuZGVm
YXVsdC5jcmVhdGUoeworICAgICAgICBlbWJlclJvdXRlcjogdGhpcywKKyAgICAgICAgcm91dGVy
SnM6IHRoaXMucm91dGVyLAorICAgICAgICByb3V0ZXJKc1N0YXRlOiB0aGlzLnJvdXRlci5hY3Rp
dmVUcmFuc2l0aW9uLnN0YXRlCisgICAgICB9KSk7CisKKyAgICAgIHRyYW5zaXRpb24udHJpZ2dl
cih0cnVlLCAnbG9hZGluZycsIHRyYW5zaXRpb24sIG9yaWdpblJvdXRlKTsKKyAgICB9LAorCisg
ICAgX2NhbmNlbFNsb3dUcmFuc2l0aW9uVGltZXI6IGZ1bmN0aW9uICgpIHsKKyAgICAgIGlmICh0
aGlzLl9zbG93VHJhbnNpdGlvblRpbWVyKSB7CisgICAgICAgIF9lbWJlck1ldGFsUnVuX2xvb3Au
ZGVmYXVsdC5jYW5jZWwodGhpcy5fc2xvd1RyYW5zaXRpb25UaW1lcik7CisgICAgICB9CisgICAg
ICB0aGlzLl9zbG93VHJhbnNpdGlvblRpbWVyID0gbnVsbDsKKyAgICB9LAorCisgICAgLy8gVGhl
c2UgdGhyZWUgaGVscGVyIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBlbnN1cmUgZXJyb3JzIGFyZW4n
dAorICAgIC8vIHJlLXJhaXNlZCBpZiB0aGV5J3JlIGhhbmRsZWQgaW4gYSByb3V0ZSdzIGVycm9y
IGFjdGlvbi4KKyAgICBfbWFya0Vycm9yQXNIYW5kbGVkOiBmdW5jdGlvbiAoZXJyb3JHdWlkKSB7
CisgICAgICB0aGlzLl9oYW5kbGVkRXJyb3JzW2Vycm9yR3VpZF0gPSB0cnVlOworICAgIH0sCisK
KyAgICBfaXNFcnJvckhhbmRsZWQ6IGZ1bmN0aW9uIChlcnJvckd1aWQpIHsKKyAgICAgIHJldHVy
biB0aGlzLl9oYW5kbGVkRXJyb3JzW2Vycm9yR3VpZF07CisgICAgfSwKKworICAgIF9jbGVhckhh
bmRsZWRFcnJvcjogZnVuY3Rpb24gKGVycm9yR3VpZCkgeworICAgICAgZGVsZXRlIHRoaXMuX2hh
bmRsZWRFcnJvcnNbZXJyb3JHdWlkXTsKKyAgICB9CisgIH0pOworCisgIC8qCisgICAgSGVscGVy
IGZ1bmN0aW9uIGZvciBpdGVyYXRpbmcgcm9vdC13YXJkLCBzdGFydGluZworICAgIGZyb20gKGJ1
dCBub3QgaW5jbHVkaW5nKSB0aGUgcHJvdmlkZWQgYG9yaWdpblJvdXRlYC4KKyAgCisgICAgUmV0
dXJucyB0cnVlIGlmIHRoZSBsYXN0IGNhbGxiYWNrIGZpcmVkIHJlcXVlc3RlZAorICAgIHRvIGJ1
YmJsZSB1cHdhcmQuCisgIAorICAgIEBwcml2YXRlCisgICAqLworICBmdW5jdGlvbiBmb3JFYWNo
Um91dGVBYm92ZShvcmlnaW5Sb3V0ZSwgdHJhbnNpdGlvbiwgY2FsbGJhY2spIHsKKyAgICB2YXIg
aGFuZGxlckluZm9zID0gdHJhbnNpdGlvbi5zdGF0ZS5oYW5kbGVySW5mb3M7CisgICAgdmFyIG9y
aWdpblJvdXRlRm91bmQgPSBmYWxzZTsKKyAgICB2YXIgaGFuZGxlckluZm8sIHJvdXRlOworCisg
ICAgZm9yICh2YXIgaSA9IGhhbmRsZXJJbmZvcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgewor
ICAgICAgaGFuZGxlckluZm8gPSBoYW5kbGVySW5mb3NbaV07CisgICAgICByb3V0ZSA9IGhhbmRs
ZXJJbmZvLmhhbmRsZXI7CisKKyAgICAgIGlmICghb3JpZ2luUm91dGVGb3VuZCkgeworICAgICAg
ICBpZiAob3JpZ2luUm91dGUgPT09IHJvdXRlKSB7CisgICAgICAgICAgb3JpZ2luUm91dGVGb3Vu
ZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAg
IGlmIChjYWxsYmFjayhyb3V0ZSwgaGFuZGxlckluZm9zW2kgKyAxXS5oYW5kbGVyKSAhPT0gdHJ1
ZSkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiB0
cnVlOworICB9CisKKyAgLy8gVGhlc2UgZ2V0IGludm9rZWQgd2hlbiBhbiBhY3Rpb24gYnViYmxl
cyBhYm92ZSBBcHBsaWNhdGlvblJvdXRlCisgIC8vIGFuZCBhcmUgbm90IG1lYW50IHRvIGJlIG92
ZXJyaWRhYmxlLgorICB2YXIgZGVmYXVsdEFjdGlvbkhhbmRsZXJzID0geworCisgICAgd2lsbFJl
c29sdmVNb2RlbDogZnVuY3Rpb24gKHRyYW5zaXRpb24sIG9yaWdpblJvdXRlKSB7CisgICAgICBv
cmlnaW5Sb3V0ZS5yb3V0ZXIuX3NjaGVkdWxlTG9hZGluZ0V2ZW50KHRyYW5zaXRpb24sIG9yaWdp
blJvdXRlKTsKKyAgICB9LAorCisgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvciwgdHJhbnNpdGlv
biwgb3JpZ2luUm91dGUpIHsKKyAgICAgIC8vIEF0dGVtcHQgdG8gZmluZCBhbiBhcHByb3ByaWF0
ZSBlcnJvciBzdWJzdGF0ZSB0byBlbnRlci4KKyAgICAgIHZhciByb3V0ZXIgPSBvcmlnaW5Sb3V0
ZS5yb3V0ZXI7CisKKyAgICAgIHZhciB0cnlUb3BMZXZlbCA9IGZvckVhY2hSb3V0ZUFib3ZlKG9y
aWdpblJvdXRlLCB0cmFuc2l0aW9uLCBmdW5jdGlvbiAocm91dGUsIGNoaWxkUm91dGUpIHsKKyAg
ICAgICAgdmFyIGNoaWxkRXJyb3JSb3V0ZU5hbWUgPSBmaW5kQ2hpbGRSb3V0ZU5hbWUocm91dGUs
IGNoaWxkUm91dGUsICdlcnJvcicpOworICAgICAgICBpZiAoY2hpbGRFcnJvclJvdXRlTmFtZSkg
eworICAgICAgICAgIHJvdXRlci5pbnRlcm1lZGlhdGVUcmFuc2l0aW9uVG8oY2hpbGRFcnJvclJv
dXRlTmFtZSwgZXJyb3IpOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgIH0pOworCisgICAgICBpZiAodHJ5VG9wTGV2ZWwpIHsKKyAgICAg
ICAgLy8gQ2hlY2sgZm9yIHRvcC1sZXZlbCBlcnJvciBzdGF0ZSB0byBlbnRlci4KKyAgICAgICAg
aWYgKHJvdXRlSGFzQmVlbkRlZmluZWQob3JpZ2luUm91dGUucm91dGVyLCAnYXBwbGljYXRpb25f
ZXJyb3InKSkgeworICAgICAgICAgIHJvdXRlci5pbnRlcm1lZGlhdGVUcmFuc2l0aW9uVG8oJ2Fw
cGxpY2F0aW9uX2Vycm9yJywgZXJyb3IpOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgfQorCisgICAgICBsb2dFcnJvcihlcnJvciwgJ0Vycm9yIHdoaWxlIHByb2Nlc3Npbmcg
cm91dGU6ICcgKyB0cmFuc2l0aW9uLnRhcmdldE5hbWUpOworICAgIH0sCisKKyAgICBsb2FkaW5n
OiBmdW5jdGlvbiAodHJhbnNpdGlvbiwgb3JpZ2luUm91dGUpIHsKKyAgICAgIC8vIEF0dGVtcHQg
dG8gZmluZCBhbiBhcHByb3ByaWF0ZSBsb2FkaW5nIHN1YnN0YXRlIHRvIGVudGVyLgorICAgICAg
dmFyIHJvdXRlciA9IG9yaWdpblJvdXRlLnJvdXRlcjsKKworICAgICAgdmFyIHRyeVRvcExldmVs
ID0gZm9yRWFjaFJvdXRlQWJvdmUob3JpZ2luUm91dGUsIHRyYW5zaXRpb24sIGZ1bmN0aW9uIChy
b3V0ZSwgY2hpbGRSb3V0ZSkgeworICAgICAgICB2YXIgY2hpbGRMb2FkaW5nUm91dGVOYW1lID0g
ZmluZENoaWxkUm91dGVOYW1lKHJvdXRlLCBjaGlsZFJvdXRlLCAnbG9hZGluZycpOworCisgICAg
ICAgIGlmIChjaGlsZExvYWRpbmdSb3V0ZU5hbWUpIHsKKyAgICAgICAgICByb3V0ZXIuaW50ZXJt
ZWRpYXRlVHJhbnNpdGlvblRvKGNoaWxkTG9hZGluZ1JvdXRlTmFtZSk7CisgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gRG9uJ3QgYnViYmxlIGFib3ZlIHBpdm90IHJv
dXRlLgorICAgICAgICBpZiAodHJhbnNpdGlvbi5waXZvdEhhbmRsZXIgIT09IHJvdXRlKSB7Cisg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgIH0pOworCisgICAgICBpZiAo
dHJ5VG9wTGV2ZWwpIHsKKyAgICAgICAgLy8gQ2hlY2sgZm9yIHRvcC1sZXZlbCBsb2FkaW5nIHN0
YXRlIHRvIGVudGVyLgorICAgICAgICBpZiAocm91dGVIYXNCZWVuRGVmaW5lZChvcmlnaW5Sb3V0
ZS5yb3V0ZXIsICdhcHBsaWNhdGlvbl9sb2FkaW5nJykpIHsKKyAgICAgICAgICByb3V0ZXIuaW50
ZXJtZWRpYXRlVHJhbnNpdGlvblRvKCdhcHBsaWNhdGlvbl9sb2FkaW5nJyk7CisgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9OworCisgIGZ1bmN0aW9uIGxv
Z0Vycm9yKF9lcnJvciwgaW5pdGlhbE1lc3NhZ2UpIHsKKyAgICB2YXIgZXJyb3JBcmdzID0gW107
CisgICAgdmFyIGVycm9yOworICAgIGlmIChfZXJyb3IgJiYgdHlwZW9mIF9lcnJvciA9PT0gJ29i
amVjdCcgJiYgdHlwZW9mIF9lcnJvci5lcnJvclRocm93biA9PT0gJ29iamVjdCcpIHsKKyAgICAg
IGVycm9yID0gX2Vycm9yLmVycm9yVGhyb3duOworICAgIH0gZWxzZSB7CisgICAgICBlcnJvciA9
IF9lcnJvcjsKKyAgICB9CisKKyAgICBpZiAoaW5pdGlhbE1lc3NhZ2UpIHsKKyAgICAgIGVycm9y
QXJncy5wdXNoKGluaXRpYWxNZXNzYWdlKTsKKyAgICB9CisKKyAgICBpZiAoZXJyb3IpIHsKKyAg
ICAgIGlmIChlcnJvci5tZXNzYWdlKSB7CisgICAgICAgIGVycm9yQXJncy5wdXNoKGVycm9yLm1l
c3NhZ2UpOworICAgICAgfQorICAgICAgaWYgKGVycm9yLnN0YWNrKSB7CisgICAgICAgIGVycm9y
QXJncy5wdXNoKGVycm9yLnN0YWNrKTsKKyAgICAgIH0KKworICAgICAgaWYgKHR5cGVvZiBlcnJv
ciA9PT0gJ3N0cmluZycpIHsKKyAgICAgICAgZXJyb3JBcmdzLnB1c2goZXJyb3IpOworICAgICAg
fQorICAgIH0KKworICAgIF9lbWJlck1ldGFsTG9nZ2VyLmRlZmF1bHQuZXJyb3IuYXBwbHkodGhp
cywgZXJyb3JBcmdzKTsKKyAgfQorCisgIGZ1bmN0aW9uIGZpbmRDaGlsZFJvdXRlTmFtZShwYXJl
bnRSb3V0ZSwgb3JpZ2luYXRpbmdDaGlsZFJvdXRlLCBuYW1lKSB7CisgICAgdmFyIHJvdXRlciA9
IHBhcmVudFJvdXRlLnJvdXRlcjsKKyAgICB2YXIgY2hpbGROYW1lOworICAgIHZhciB0YXJnZXRD
aGlsZFJvdXRlTmFtZSA9IG9yaWdpbmF0aW5nQ2hpbGRSb3V0ZS5yb3V0ZU5hbWUuc3BsaXQoJy4n
KS5wb3AoKTsKKyAgICB2YXIgbmFtZXNwYWNlID0gcGFyZW50Um91dGUucm91dGVOYW1lID09PSAn
YXBwbGljYXRpb24nID8gJycgOiBwYXJlbnRSb3V0ZS5yb3V0ZU5hbWUgKyAnLic7CisKKyAgICAv
LyBGaXJzdCwgdHJ5IGEgbmFtZWQgbG9hZGluZyBzdGF0ZSwgZS5nLiAnZm9vX2xvYWRpbmcnCisg
ICAgY2hpbGROYW1lID0gbmFtZXNwYWNlICsgdGFyZ2V0Q2hpbGRSb3V0ZU5hbWUgKyAnXycgKyBu
YW1lOworICAgIGlmIChyb3V0ZUhhc0JlZW5EZWZpbmVkKHJvdXRlciwgY2hpbGROYW1lKSkgewor
ICAgICAgcmV0dXJuIGNoaWxkTmFtZTsKKyAgICB9CisKKyAgICAvLyBTZWNvbmQsIHRyeSBnZW5l
cmFsIGxvYWRpbmcgc3RhdGUsIGUuZy4gJ2xvYWRpbmcnCisgICAgY2hpbGROYW1lID0gbmFtZXNw
YWNlICsgbmFtZTsKKyAgICBpZiAocm91dGVIYXNCZWVuRGVmaW5lZChyb3V0ZXIsIGNoaWxkTmFt
ZSkpIHsKKyAgICAgIHJldHVybiBjaGlsZE5hbWU7CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24g
cm91dGVIYXNCZWVuRGVmaW5lZChyb3V0ZXIsIG5hbWUpIHsKKyAgICB2YXIgb3duZXIgPSBfY29u
dGFpbmVyT3duZXIuZ2V0T3duZXIocm91dGVyKTsKKyAgICByZXR1cm4gcm91dGVyLmhhc1JvdXRl
KG5hbWUpICYmIChvd25lci5oYXNSZWdpc3RyYXRpb24oJ3RlbXBsYXRlOicgKyBuYW1lKSB8fCBv
d25lci5oYXNSZWdpc3RyYXRpb24oJ3JvdXRlOicgKyBuYW1lKSk7CisgIH0KKworICBmdW5jdGlv
biB0cmlnZ2VyRXZlbnQoaGFuZGxlckluZm9zLCBpZ25vcmVGYWlsdXJlLCBhcmdzKSB7CisgICAg
dmFyIG5hbWUgPSBhcmdzLnNoaWZ0KCk7CisKKyAgICBpZiAoIWhhbmRsZXJJbmZvcykgeworICAg
ICAgaWYgKGlnbm9yZUZhaWx1cmUpIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAg
dGhyb3cgbmV3IF9lbWJlck1ldGFsRXJyb3IuZGVmYXVsdCgnQ2FuXCd0IHRyaWdnZXIgYWN0aW9u
IFwnJyArIG5hbWUgKyAnXCcgYmVjYXVzZSB5b3VyIGFwcCBoYXNuXCd0IGZpbmlzaGVkIHRyYW5z
aXRpb25pbmcgaW50byBpdHMgZmlyc3Qgcm91dGUuIFRvIHRyaWdnZXIgYW4gYWN0aW9uIG9uIGRl
c3RpbmF0aW9uIHJvdXRlcyBkdXJpbmcgYSB0cmFuc2l0aW9uLCB5b3UgY2FuIGNhbGwgYC5zZW5k
KClgIG9uIHRoZSBgVHJhbnNpdGlvbmAgb2JqZWN0IHBhc3NlZCB0byB0aGUgYG1vZGVsL2JlZm9y
ZU1vZGVsL2FmdGVyTW9kZWxgIGhvb2tzLicpOworICAgIH0KKworICAgIHZhciBldmVudFdhc0hh
bmRsZWQgPSBmYWxzZTsKKyAgICB2YXIgaGFuZGxlckluZm8sIGhhbmRsZXI7CisKKyAgICBmb3Ig
KHZhciBpID0gaGFuZGxlckluZm9zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICBo
YW5kbGVySW5mbyA9IGhhbmRsZXJJbmZvc1tpXTsKKyAgICAgIGhhbmRsZXIgPSBoYW5kbGVySW5m
by5oYW5kbGVyOworCisgICAgICBpZiAoaGFuZGxlci5hY3Rpb25zICYmIGhhbmRsZXIuYWN0aW9u
c1tuYW1lXSkgeworICAgICAgICBpZiAoaGFuZGxlci5hY3Rpb25zW25hbWVdLmFwcGx5KGhhbmRs
ZXIsIGFyZ3MpID09PSB0cnVlKSB7CisgICAgICAgICAgZXZlbnRXYXNIYW5kbGVkID0gdHJ1ZTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAvLyBTaG91bGQgb25seSBoaXQgaGVyZSBpZiBh
IG5vbi1idWJibGluZyBlcnJvciBhY3Rpb24gaXMgdHJpZ2dlcmVkIG9uIGEgcm91dGUuCisgICAg
ICAgICAgaWYgKG5hbWUgPT09ICdlcnJvcicpIHsKKyAgICAgICAgICAgIHZhciBlcnJvcklkID0g
X2VtYmVyTWV0YWxVdGlscy5ndWlkRm9yKGFyZ3NbMF0pOworICAgICAgICAgICAgaGFuZGxlci5y
b3V0ZXIuX21hcmtFcnJvckFzSGFuZGxlZChlcnJvcklkKTsKKyAgICAgICAgICB9CisgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgaWYgKGRlZmF1bHRB
Y3Rpb25IYW5kbGVyc1tuYW1lXSkgeworICAgICAgZGVmYXVsdEFjdGlvbkhhbmRsZXJzW25hbWVd
LmFwcGx5KG51bGwsIGFyZ3MpOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghZXZl
bnRXYXNIYW5kbGVkICYmICFpZ25vcmVGYWlsdXJlKSB7CisgICAgICB0aHJvdyBuZXcgX2VtYmVy
TWV0YWxFcnJvci5kZWZhdWx0KCdOb3RoaW5nIGhhbmRsZWQgdGhlIGFjdGlvbiBcJycgKyBuYW1l
ICsgJ1wnLiBJZiB5b3UgZGlkIGhhbmRsZSB0aGUgYWN0aW9uLCB0aGlzIGVycm9yIGNhbiBiZSBj
YXVzZWQgYnkgcmV0dXJuaW5nIHRydWUgZnJvbSBhbiBhY3Rpb24gaGFuZGxlciBpbiBhIGNvbnRy
b2xsZXIsIGNhdXNpbmcgdGhlIGFjdGlvbiB0byBidWJibGUuJyk7CisgICAgfQorICB9CisKKyAg
ZnVuY3Rpb24gY2FsY3VsYXRlUG9zdFRyYW5zaXRpb25TdGF0ZShlbWJlclJvdXRlciwgbGVhZlJv
dXRlTmFtZSwgY29udGV4dHMpIHsKKyAgICB2YXIgcm91dGVyanMgPSBlbWJlclJvdXRlci5yb3V0
ZXI7CisgICAgdmFyIHN0YXRlID0gcm91dGVyanMuYXBwbHlJbnRlbnQobGVhZlJvdXRlTmFtZSwg
Y29udGV4dHMpOworICAgIHZhciBoYW5kbGVySW5mb3MgPSBzdGF0ZS5oYW5kbGVySW5mb3M7Cisg
ICAgdmFyIHBhcmFtcyA9IHN0YXRlLnBhcmFtczsKKworICAgIGZvciAodmFyIGkgPSAwLCBsZW4g
PSBoYW5kbGVySW5mb3MubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgIHZhciBoYW5kbGVy
SW5mbyA9IGhhbmRsZXJJbmZvc1tpXTsKKyAgICAgIGlmICghaGFuZGxlckluZm8uaXNSZXNvbHZl
ZCkgeworICAgICAgICBoYW5kbGVySW5mbyA9IGhhbmRsZXJJbmZvLmJlY29tZVJlc29sdmVkKG51
bGwsIGhhbmRsZXJJbmZvLmNvbnRleHQpOworICAgICAgfQorICAgICAgcGFyYW1zW2hhbmRsZXJJ
bmZvLm5hbWVdID0gaGFuZGxlckluZm8ucGFyYW1zOworICAgIH0KKyAgICByZXR1cm4gc3RhdGU7
CisgIH0KKworICBmdW5jdGlvbiB1cGRhdGVQYXRocyhyb3V0ZXIpIHsKKyAgICB2YXIgaW5mb3Mg
PSByb3V0ZXIucm91dGVyLmN1cnJlbnRIYW5kbGVySW5mb3M7CisgICAgdmFyIHBhdGggPSBFbWJl
clJvdXRlci5fcm91dGVQYXRoKGluZm9zKTsKKyAgICB2YXIgY3VycmVudFJvdXRlTmFtZSA9IGlu
Zm9zW2luZm9zLmxlbmd0aCAtIDFdLm5hbWU7CisKKyAgICBfZW1iZXJNZXRhbFByb3BlcnR5X3Nl
dC5zZXQocm91dGVyLCAnY3VycmVudFBhdGgnLCBwYXRoKTsKKyAgICBfZW1iZXJNZXRhbFByb3Bl
cnR5X3NldC5zZXQocm91dGVyLCAnY3VycmVudFJvdXRlTmFtZScsIGN1cnJlbnRSb3V0ZU5hbWUp
OworCisgICAgdmFyIGFwcENvbnRyb2xsZXIgPSBfY29udGFpbmVyT3duZXIuZ2V0T3duZXIocm91
dGVyKS5sb29rdXAoJ2NvbnRyb2xsZXI6YXBwbGljYXRpb24nKTsKKworICAgIGlmICghYXBwQ29u
dHJvbGxlcikgeworICAgICAgLy8gYXBwQ29udHJvbGxlciBtaWdodCBub3QgZXhpc3Qgd2hlbiB0
b3AtbGV2ZWwgbG9hZGluZy9lcnJvcgorICAgICAgLy8gc3Vic3RhdGVzIGhhdmUgYmVlbiBlbnRl
cmVkIHNpbmNlIEFwcGxpY2F0aW9uUm91dGUgaGFzbid0CisgICAgICAvLyBhY3R1YWxseSBiZWVu
IGVudGVyZWQgYXQgdGhhdCBwb2ludC4KKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
ISgnY3VycmVudFBhdGgnIGluIGFwcENvbnRyb2xsZXIpKSB7CisgICAgICBfZW1iZXJNZXRhbFBy
b3BlcnRpZXMuZGVmaW5lUHJvcGVydHkoYXBwQ29udHJvbGxlciwgJ2N1cnJlbnRQYXRoJyk7Cisg
ICAgfQorCisgICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQuc2V0KGFwcENvbnRyb2xsZXIsICdj
dXJyZW50UGF0aCcsIHBhdGgpOworCisgICAgaWYgKCEoJ2N1cnJlbnRSb3V0ZU5hbWUnIGluIGFw
cENvbnRyb2xsZXIpKSB7CisgICAgICBfZW1iZXJNZXRhbFByb3BlcnRpZXMuZGVmaW5lUHJvcGVy
dHkoYXBwQ29udHJvbGxlciwgJ2N1cnJlbnRSb3V0ZU5hbWUnKTsKKyAgICB9CisKKyAgICBfZW1i
ZXJNZXRhbFByb3BlcnR5X3NldC5zZXQoYXBwQ29udHJvbGxlciwgJ2N1cnJlbnRSb3V0ZU5hbWUn
LCBjdXJyZW50Um91dGVOYW1lKTsKKyAgfQorCisgIEVtYmVyUm91dGVyLnJlb3BlbkNsYXNzKHsK
KyAgICByb3V0ZXI6IG51bGwsCisKKyAgICAvKioKKyAgICAgIFRoZSBgUm91dGVyLm1hcGAgZnVu
Y3Rpb24gYWxsb3dzIHlvdSB0byBkZWZpbmUgbWFwcGluZ3MgZnJvbSBVUkxzIHRvIHJvdXRlcwor
ICAgICAgaW4geW91ciBhcHBsaWNhdGlvbi4gVGhlc2UgbWFwcGluZ3MgYXJlIGRlZmluZWQgd2l0
aGluIHRoZQorICAgICAgc3VwcGxpZWQgY2FsbGJhY2sgZnVuY3Rpb24gdXNpbmcgYHRoaXMucm91
dGVgLgorICAgICAgIFRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgdGhlIG5hbWUgb2YgdGhlIHJvdXRl
IHdoaWNoIGlzIHVzZWQgYnkgZGVmYXVsdCBhcyB0aGUKKyAgICAgIHBhdGggbmFtZSBhcyB3ZWxs
LgorICAgICAgIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHRoZSBvcHRpb25hbCBvcHRpb25zIGhh
c2guIEF2YWlsYWJsZSBvcHRpb25zIGFyZToKKyAgICAgICAgKiBgcGF0aGA6IGFsbG93cyB5b3Ug
dG8gcHJvdmlkZSB5b3VyIG93biBwYXRoIGFzIHdlbGwgYXMgbWFyayBkeW5hbWljCisgICAgICAg
ICAgc2VnbWVudHMuCisgICAgICAgICogYHJlc2V0TmFtZXNwYWNlYDogZmFsc2UgYnkgZGVmYXVs
dDsgd2hlbiBuZXN0aW5nIHJvdXRlcywgZW1iZXIgd2lsbAorICAgICAgICAgIGNvbWJpbmUgdGhl
IHJvdXRlIG5hbWVzIHRvIGZvcm0gdGhlIGZ1bGx5LXF1YWxpZmllZCByb3V0ZSBuYW1lLCB3aGlj
aCBpcworICAgICAgICAgIHVzZWQgd2l0aCBge3tsaW5rLXRvfX1gIG9yIG1hbnVhbGx5IHRyYW5z
aXRpb25pbmcgdG8gcm91dGVzLiBTZXR0aW5nCisgICAgICAgICAgYHJlc2V0TmFtZXNwYWNlOiB0
cnVlYCB3aWxsIGNhdXNlIHRoZSByb3V0ZSBub3QgdG8gaW5oZXJpdCBmcm9tIGl0cworICAgICAg
ICAgIHBhcmVudCByb3V0ZSdzIG5hbWVzLiBUaGlzIGlzIGhhbmR5IGZvciByZXNvdXJjZXMgd2hp
Y2ggY2FuIGJlIGFjY2Vzc2VkCisgICAgICAgICAgaW4gbXVsdGlwbGUgcGxhY2VzIGFzIHdlbGwg
YXMgcHJldmVudGluZyBleHRyZW1lbHkgbG9uZyByb3V0ZSBuYW1lcy4KKyAgICAgICAgICBLZWVw
IGluIG1pbmQgdGhhdCB0aGUgYWN0dWFsIFVSTCBwYXRoIGJlaGF2aW9yIGlzIHN0aWxsIHJldGFp
bmVkLgorICAgICAgIFRoZSB0aGlyZCBwYXJhbWV0ZXIgaXMgYSBmdW5jdGlvbiwgd2hpY2ggY2Fu
IGJlIHVzZWQgdG8gbmVzdCByb3V0ZXMuCisgICAgICBOZXN0ZWQgcm91dGVzLCBieSBkZWZhdWx0
LCB3aWxsIGhhdmUgdGhlIHBhcmVudCByb3V0ZSB0cmVlJ3Mgcm91dGUgbmFtZSBhbmQKKyAgICAg
IHBhdGggcHJlcGVuZGVkIHRvIGl0J3Mgb3duLgorICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAg
IEFwcC5Sb3V0ZXIubWFwKGZ1bmN0aW9uKCl7CisgICAgICAgIHRoaXMucm91dGUoJ3Bvc3QnLCB7
IHBhdGg6ICcvcG9zdC86cG9zdF9pZCcgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgdGhpcy5y
b3V0ZSgnZWRpdCcpOworICAgICAgICAgIHRoaXMucm91dGUoJ2NvbW1lbnRzJywgeyByZXNldE5h
bWVzcGFjZTogdHJ1ZSB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHRoaXMucm91dGUoJ25l
dycpOworICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICAgIH0pOworICAgICAgYGBgCisg
ICAgICAgRm9yIG1vcmUgZGV0YWlsZWQgZG9jdW1lbnRhdGlvbiBhbmQgZXhhbXBsZXMgcGxlYXNl
IHNlZQorICAgICAgW3RoZSBndWlkZXNdKGh0dHA6Ly9lbWJlcmpzLmNvbS9ndWlkZXMvcm91dGlu
Zy9kZWZpbmluZy15b3VyLXJvdXRlcy8pLgorICAgICAgIEBtZXRob2QgbWFwCisgICAgICBAcGFy
YW0gY2FsbGJhY2sKKyAgICAgIEBwdWJsaWMKKyAgICAqLworICAgIG1hcDogZnVuY3Rpb24gKGNh
bGxiYWNrKSB7CisgICAgICBpZiAoIXRoaXMuZHNsQ2FsbGJhY2tzKSB7CisgICAgICAgIHRoaXMu
ZHNsQ2FsbGJhY2tzID0gW107CisgICAgICAgIHRoaXMucmVvcGVuQ2xhc3MoeyBkc2xDYWxsYmFj
a3M6IHRoaXMuZHNsQ2FsbGJhY2tzIH0pOworICAgICAgfQorCisgICAgICB0aGlzLmRzbENhbGxi
YWNrcy5wdXNoKGNhbGxiYWNrKTsKKworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKworICAg
IF9yb3V0ZVBhdGg6IGZ1bmN0aW9uIChoYW5kbGVySW5mb3MpIHsKKyAgICAgIHZhciBwYXRoID0g
W107CisKKyAgICAgIC8vIFdlIGhhdmUgdG8gaGFuZGxlIGNvYWxlc2NpbmcgcmVzb3VyY2UgbmFt
ZXMgdGhhdAorICAgICAgLy8gYXJlIHByZWZpeGVkIHdpdGggdGhlaXIgcGFyZW50J3MgbmFtZXMs
IGUuZy4KKyAgICAgIC8vIFsnZm9vJywgJ2Zvby5iYXIuYmF6J10gPT4gJ2Zvby5iYXIuYmF6Jywg
bm90ICdmb28uZm9vLmJhci5iYXonCisKKyAgICAgIGZ1bmN0aW9uIGludGVyc2VjdGlvbk1hdGNo
ZXMoYTEsIGEyKSB7CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhMS5sZW5ndGg7IGkg
PCBsZW47ICsraSkgeworICAgICAgICAgIGlmIChhMVtpXSAhPT0gYTJbaV0pIHsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICB9CisKKyAgICAgIHZhciBuYW1lLCBuYW1lUGFydHMsIG9sZE5hbWVQYXJ0
czsKKyAgICAgIGZvciAodmFyIGkgPSAxLCBsID0gaGFuZGxlckluZm9zLmxlbmd0aDsgaSA8IGw7
IGkrKykgeworICAgICAgICBuYW1lID0gaGFuZGxlckluZm9zW2ldLm5hbWU7CisgICAgICAgIG5h
bWVQYXJ0cyA9IG5hbWUuc3BsaXQoJy4nKTsKKyAgICAgICAgb2xkTmFtZVBhcnRzID0gc2xpY2Uu
Y2FsbChwYXRoKTsKKworICAgICAgICB3aGlsZSAob2xkTmFtZVBhcnRzLmxlbmd0aCkgeworICAg
ICAgICAgIGlmIChpbnRlcnNlY3Rpb25NYXRjaGVzKG9sZE5hbWVQYXJ0cywgbmFtZVBhcnRzKSkg
eworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICAgIG9sZE5hbWVQYXJ0
cy5zaGlmdCgpOworICAgICAgICB9CisKKyAgICAgICAgcGF0aC5wdXNoLmFwcGx5KHBhdGgsIG5h
bWVQYXJ0cy5zbGljZShvbGROYW1lUGFydHMubGVuZ3RoKSk7CisgICAgICB9CisKKyAgICAgIHJl
dHVybiBwYXRoLmpvaW4oJy4nKTsKKyAgICB9CisgIH0pOworCisgIGZ1bmN0aW9uIGRpZEJlZ2lu
VHJhbnNpdGlvbih0cmFuc2l0aW9uLCByb3V0ZXIpIHsKKyAgICB2YXIgcm91dGVyU3RhdGUgPSBf
ZW1iZXJSb3V0aW5nU3lzdGVtUm91dGVyX3N0YXRlLmRlZmF1bHQuY3JlYXRlKHsKKyAgICAgIGVt
YmVyUm91dGVyOiByb3V0ZXIsCisgICAgICByb3V0ZXJKczogcm91dGVyLnJvdXRlciwKKyAgICAg
IHJvdXRlckpzU3RhdGU6IHRyYW5zaXRpb24uc3RhdGUKKyAgICB9KTsKKworICAgIGlmICghcm91
dGVyLmN1cnJlbnRTdGF0ZSkgeworICAgICAgcm91dGVyLnNldCgnY3VycmVudFN0YXRlJywgcm91
dGVyU3RhdGUpOworICAgIH0KKyAgICByb3V0ZXIuc2V0KCd0YXJnZXRTdGF0ZScsIHJvdXRlclN0
YXRlKTsKKworICAgIHRyYW5zaXRpb24ucHJvbWlzZSA9IHRyYW5zaXRpb24uY2F0Y2goZnVuY3Rp
b24gKGVycm9yKSB7CisgICAgICB2YXIgZXJyb3JJZCA9IF9lbWJlck1ldGFsVXRpbHMuZ3VpZEZv
cihlcnJvcik7CisKKyAgICAgIGlmIChyb3V0ZXIuX2lzRXJyb3JIYW5kbGVkKGVycm9ySWQpKSB7
CisgICAgICAgIHJvdXRlci5fY2xlYXJIYW5kbGVkRXJyb3IoZXJyb3JJZCk7CisgICAgICB9IGVs
c2UgeworICAgICAgICB0aHJvdyBlcnJvcjsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIGZ1
bmN0aW9uIHJlc2VtYmxlc1VSTChzdHIpIHsKKyAgICByZXR1cm4gdHlwZW9mIHN0ciA9PT0gJ3N0
cmluZycgJiYgKHN0ciA9PT0gJycgfHwgc3RyLmNoYXJBdCgwKSA9PT0gJy8nKTsKKyAgfQorCisg
IGZ1bmN0aW9uIGZvckVhY2hRdWVyeVBhcmFtKHJvdXRlciwgdGFyZ2V0Um91dGVOYW1lLCBxdWVy
eVBhcmFtcywgY2FsbGJhY2spIHsKKyAgICB2YXIgcXBDYWNoZSA9IHJvdXRlci5fcXVlcnlQYXJh
bXNGb3IodGFyZ2V0Um91dGVOYW1lKTsKKworICAgIGZvciAodmFyIGtleSBpbiBxdWVyeVBhcmFt
cykgeworICAgICAgaWYgKCFxdWVyeVBhcmFtcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7CisgICAg
ICAgIGNvbnRpbnVlOworICAgICAgfQorICAgICAgdmFyIHZhbHVlID0gcXVlcnlQYXJhbXNba2V5
XTsKKyAgICAgIHZhciBxcCA9IHFwQ2FjaGUubWFwW2tleV07CisKKyAgICAgIGlmIChxcCkgewor
ICAgICAgICBjYWxsYmFjayhrZXksIHZhbHVlLCBxcCk7CisgICAgICB9CisgICAgfQorICB9CisK
KyAgZnVuY3Rpb24gZmluZExpdmVSb3V0ZShsaXZlUm91dGVzLCBuYW1lKSB7CisgICAgaWYgKCFs
aXZlUm91dGVzKSB7CisgICAgICByZXR1cm47CisgICAgfQorICAgIHZhciBzdGFjayA9IFtsaXZl
Um91dGVzXTsKKyAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkgeworICAgICAgdmFyIHRlc3Qg
PSBzdGFjay5zaGlmdCgpOworICAgICAgaWYgKHRlc3QucmVuZGVyLm5hbWUgPT09IG5hbWUpIHsK
KyAgICAgICAgcmV0dXJuIHRlc3Q7CisgICAgICB9CisgICAgICB2YXIgb3V0bGV0cyA9IHRlc3Qu
b3V0bGV0czsKKyAgICAgIGZvciAodmFyIG91dGxldE5hbWUgaW4gb3V0bGV0cykgeworICAgICAg
ICBzdGFjay5wdXNoKG91dGxldHNbb3V0bGV0TmFtZV0pOworICAgICAgfQorICAgIH0KKyAgfQor
CisgIGZ1bmN0aW9uIGFwcGVuZExpdmVSb3V0ZShsaXZlUm91dGVzLCBkZWZhdWx0UGFyZW50U3Rh
dGUsIHJlbmRlck9wdGlvbnMpIHsKKyAgICB2YXIgdGFyZ2V0OworICAgIHZhciBteVN0YXRlID0g
eworICAgICAgcmVuZGVyOiByZW5kZXJPcHRpb25zLAorICAgICAgb3V0bGV0czogbmV3IF9lbWJl
ck1ldGFsRW1wdHlfb2JqZWN0LmRlZmF1bHQoKQorICAgIH07CisgICAgaWYgKHJlbmRlck9wdGlv
bnMuaW50bykgeworICAgICAgdGFyZ2V0ID0gZmluZExpdmVSb3V0ZShsaXZlUm91dGVzLCByZW5k
ZXJPcHRpb25zLmludG8pOworICAgIH0gZWxzZSB7CisgICAgICB0YXJnZXQgPSBkZWZhdWx0UGFy
ZW50U3RhdGU7CisgICAgfQorICAgIGlmICh0YXJnZXQpIHsKKyAgICAgIF9lbWJlck1ldGFsUHJv
cGVydHlfc2V0LnNldCh0YXJnZXQub3V0bGV0cywgcmVuZGVyT3B0aW9ucy5vdXRsZXQsIG15U3Rh
dGUpOworICAgIH0gZWxzZSB7CisgICAgICBpZiAocmVuZGVyT3B0aW9ucy5pbnRvKSB7CisgICAg
ICAgIC8vIE1lZ2FoYXggdGltZS4gUG9zdC0yLjAtYnJlYWtpbmctY2hhbmdlcywgd2Ugd2lsbCBq
dXN0IGFzc2VydAorICAgICAgICAvLyByaWdodCBoZXJlIHRoYXQgdGhlIHVzZXIgdHJpZWQgdG8g
dGFyZ2V0IGEgbm9uZXhpc3RlbnQKKyAgICAgICAgLy8gdGhpbmcuIEJ1dCBmb3Igbm93IHdlIHN0
aWxsIG5lZWQgdG8gc3VwcG9ydCB0aGUgYHJlbmRlcmAKKyAgICAgICAgLy8gaGVscGVyLCBhbmQg
cGVvcGxlIGFyZSBhbGxvd2VkIHRvIHRhcmdldCB0ZW1wbGF0ZXMgcmVuZGVyZWQKKyAgICAgICAg
Ly8gYnkgdGhlIHJlbmRlciBoZWxwZXIuIFNvIGluc3RlYWQgd2UgZGVmZXIgZG9pbmcgYW55dGlu
ZyB3aXRoCisgICAgICAgIC8vIHRoZXNlIG9ycGhhbiByZW5kZXJzIHVudGlsIGFmdGVyUmVuZGVy
LgorICAgICAgICBhcHBlbmRPcnBoYW4obGl2ZVJvdXRlcywgcmVuZGVyT3B0aW9ucy5pbnRvLCBt
eVN0YXRlKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxpdmVSb3V0ZXMgPSBteVN0YXRlOwor
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4geworICAgICAgbGl2ZVJvdXRlczogbGl2ZVJvdXRl
cywKKyAgICAgIG93blN0YXRlOiBteVN0YXRlCisgICAgfTsKKyAgfQorCisgIGZ1bmN0aW9uIGFw
cGVuZE9ycGhhbihsaXZlUm91dGVzLCBpbnRvLCBteVN0YXRlKSB7CisgICAgaWYgKCFsaXZlUm91
dGVzLm91dGxldHMuX19lbWJlcl9vcnBoYW5zX18pIHsKKyAgICAgIGxpdmVSb3V0ZXMub3V0bGV0
cy5fX2VtYmVyX29ycGhhbnNfXyA9IHsKKyAgICAgICAgcmVuZGVyOiB7CisgICAgICAgICAgbmFt
ZTogJ19fZW1iZXJfb3JwaGFuc19fJworICAgICAgICB9LAorICAgICAgICBvdXRsZXRzOiBuZXcg
X2VtYmVyTWV0YWxFbXB0eV9vYmplY3QuZGVmYXVsdCgpCisgICAgICB9OworICAgIH0KKyAgICBs
aXZlUm91dGVzLm91dGxldHMuX19lbWJlcl9vcnBoYW5zX18ub3V0bGV0c1tpbnRvXSA9IG15U3Rh
dGU7CisgICAgX2VtYmVyTWV0YWxSdW5fbG9vcC5kZWZhdWx0LnNjaGVkdWxlKCdhZnRlclJlbmRl
cicsIGZ1bmN0aW9uICgpIHsKKyAgICAgIC8vIGB3YXNVc2VkYCBnZXRzIHNldCBieSB0aGUgcmVu
ZGVyIGhlbHBlci4gU2VlIHRoZSBmdW5jdGlvbgorICAgICAgLy8gYGltcGVyc29uYXRlQW5PdXRs
ZXRgLgorICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1lvdSBhdHRlbXB0ZWQgdG8gcmVu
ZGVyIGludG8gXCcnICsgaW50byArICdcJyBidXQgaXQgd2FzIG5vdCBmb3VuZCcsIGxpdmVSb3V0
ZXMub3V0bGV0cy5fX2VtYmVyX29ycGhhbnNfXy5vdXRsZXRzW2ludG9dLndhc1VzZWQpOworICAg
IH0pOworICB9CisKKyAgZnVuY3Rpb24gcmVwcmVzZW50RW1wdHlSb3V0ZShsaXZlUm91dGVzLCBk
ZWZhdWx0UGFyZW50U3RhdGUsIHJvdXRlKSB7CisgICAgLy8gdGhlIHJvdXRlIGRpZG4ndCByZW5k
ZXIgYW55dGhpbmcKKyAgICB2YXIgYWxyZWFkeUFwcGVuZGVkID0gZmluZExpdmVSb3V0ZShsaXZl
Um91dGVzLCByb3V0ZS5yb3V0ZU5hbWUpOworICAgIGlmIChhbHJlYWR5QXBwZW5kZWQpIHsKKyAg
ICAgIC8vIEJ1dCBzb21lIG90aGVyIHJvdXRlIGhhcyBhbHJlYWR5IHJlbmRlcmVkIG91ciBkZWZh
dWx0CisgICAgICAvLyB0ZW1wbGF0ZSwgc28gdGhhdCBiZWNvbWVzIHRoZSBkZWZhdWx0IHRhcmdl
dCBmb3IgYW55CisgICAgICAvLyBjaGlsZHJlbiB3ZSBtYXkgaGF2ZS4KKyAgICAgIHJldHVybiBh
bHJlYWR5QXBwZW5kZWQ7CisgICAgfSBlbHNlIHsKKyAgICAgIC8vIENyZWF0ZSBhbiBlbnRyeSB0
byByZXByZXNlbnQgb3VyIGRlZmF1bHQgdGVtcGxhdGUgbmFtZSwKKyAgICAgIC8vIGp1c3Qgc28g
b3RoZXIgcm91dGVzIGNhbiB0YXJnZXQgaXQgYW5kIGluaGVyaXQgaXRzIHBsYWNlCisgICAgICAv
LyBpbiB0aGUgb3V0bGV0IGhpZXJhcmNoeS4KKyAgICAgIGRlZmF1bHRQYXJlbnRTdGF0ZS5vdXRs
ZXRzLm1haW4gPSB7CisgICAgICAgIHJlbmRlcjogeworICAgICAgICAgIG5hbWU6IHJvdXRlLnJv
dXRlTmFtZSwKKyAgICAgICAgICBvdXRsZXQ6ICdtYWluJworICAgICAgICB9LAorICAgICAgICBv
dXRsZXRzOiB7fQorICAgICAgfTsKKyAgICAgIHJldHVybiBkZWZhdWx0UGFyZW50U3RhdGU7Cisg
ICAgfQorICB9CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gRW1iZXJSb3V0ZXI7Cit9KTsKKworLyoq
CitAbW9kdWxlIGVtYmVyCitAc3VibW9kdWxlIGVtYmVyLXJvdXRpbmcKKyovCitlbmlmZWQoJ2Vt
YmVyLXJvdXRpbmcvc3lzdGVtL3JvdXRlcl9zdGF0ZScsIFsnZXhwb3J0cycsICdlbWJlci1tZXRh
bC9pc19lbXB0eScsICdlbWJlci1ydW50aW1lL3N5c3RlbS9vYmplY3QnLCAnZW1iZXItbWV0YWwv
YXNzaWduJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbElzX2VtcHR5LCBfZW1iZXJS
dW50aW1lU3lzdGVtT2JqZWN0LCBfZW1iZXJNZXRhbEFzc2lnbikgeworICAndXNlIHN0cmljdCc7
CisKKyAgdmFyIGtleXMgPSBPYmplY3Qua2V5czsKKworICB2YXIgUm91dGVyU3RhdGUgPSBfZW1i
ZXJSdW50aW1lU3lzdGVtT2JqZWN0LmRlZmF1bHQuZXh0ZW5kKHsKKyAgICBlbWJlclJvdXRlcjog
bnVsbCwKKyAgICByb3V0ZXJKczogbnVsbCwKKyAgICByb3V0ZXJKc1N0YXRlOiBudWxsLAorCisg
ICAgaXNBY3RpdmVJbnRlbnQ6IGZ1bmN0aW9uIChyb3V0ZU5hbWUsIG1vZGVscywgcXVlcnlQYXJh
bXMsIHF1ZXJ5UGFyYW1zTXVzdE1hdGNoKSB7CisgICAgICB2YXIgc3RhdGUgPSB0aGlzLnJvdXRl
ckpzU3RhdGU7CisgICAgICBpZiAoIXRoaXMucm91dGVySnMuaXNBY3RpdmVJbnRlbnQocm91dGVO
YW1lLCBtb2RlbHMsIG51bGwsIHN0YXRlKSkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICB9CisKKyAgICAgIHZhciBlbXB0eVF1ZXJ5UGFyYW1zID0gX2VtYmVyTWV0YWxJc19lbXB0eS5k
ZWZhdWx0KGtleXMocXVlcnlQYXJhbXMpKTsKKworICAgICAgaWYgKHF1ZXJ5UGFyYW1zTXVzdE1h
dGNoICYmICFlbXB0eVF1ZXJ5UGFyYW1zKSB7CisgICAgICAgIHZhciB2aXNpYmxlUXVlcnlQYXJh
bXMgPSB7fTsKKyAgICAgICAgX2VtYmVyTWV0YWxBc3NpZ24uZGVmYXVsdCh2aXNpYmxlUXVlcnlQ
YXJhbXMsIHF1ZXJ5UGFyYW1zKTsKKworICAgICAgICB0aGlzLmVtYmVyUm91dGVyLl9wcmVwYXJl
UXVlcnlQYXJhbXMocm91dGVOYW1lLCBtb2RlbHMsIHZpc2libGVRdWVyeVBhcmFtcyk7CisgICAg
ICAgIHJldHVybiBzaGFsbG93RXF1YWwodmlzaWJsZVF1ZXJ5UGFyYW1zLCBzdGF0ZS5xdWVyeVBh
cmFtcyk7CisgICAgICB9CisKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgfSk7CisKKyAg
ZnVuY3Rpb24gc2hhbGxvd0VxdWFsKGEsIGIpIHsKKyAgICB2YXIgazsKKyAgICBmb3IgKGsgaW4g
YSkgeworICAgICAgaWYgKGEuaGFzT3duUHJvcGVydHkoaykgJiYgYVtrXSAhPT0gYltrXSkgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgfQorICAgIGZvciAoayBpbiBiKSB7
CisgICAgICBpZiAoYi5oYXNPd25Qcm9wZXJ0eShrKSAmJiBhW2tdICE9PSBiW2tdKSB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7CisgIH0K
KworICBleHBvcnRzLmRlZmF1bHQgPSBSb3V0ZXJTdGF0ZTsKK30pOworZW5pZmVkKCdlbWJlci1y
b3V0aW5nL3V0aWxzJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2Fzc2lnbicsICdlbWJlci1t
ZXRhbC9wcm9wZXJ0eV9nZXQnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsQXNzaWdu
LCBfZW1iZXJNZXRhbFByb3BlcnR5X2dldCkgeworICAndXNlIHN0cmljdCc7CisKKyAgZXhwb3J0
cy5yb3V0ZUFyZ3MgPSByb3V0ZUFyZ3M7CisgIGV4cG9ydHMuZ2V0QWN0aXZlVGFyZ2V0TmFtZSA9
IGdldEFjdGl2ZVRhcmdldE5hbWU7CisgIGV4cG9ydHMuc3Rhc2hQYXJhbU5hbWVzID0gc3Rhc2hQ
YXJhbU5hbWVzOworICBleHBvcnRzLmNhbGN1bGF0ZUNhY2hlS2V5ID0gY2FsY3VsYXRlQ2FjaGVL
ZXk7CisgIGV4cG9ydHMubm9ybWFsaXplQ29udHJvbGxlclF1ZXJ5UGFyYW1zID0gbm9ybWFsaXpl
Q29udHJvbGxlclF1ZXJ5UGFyYW1zOworCisgIGZ1bmN0aW9uIHJvdXRlQXJncyh0YXJnZXRSb3V0
ZU5hbWUsIG1vZGVscywgcXVlcnlQYXJhbXMpIHsKKyAgICB2YXIgYXJncyA9IFtdOworICAgIGlm
ICh0eXBlb2YgdGFyZ2V0Um91dGVOYW1lID09PSAnc3RyaW5nJykgeworICAgICAgYXJncy5wdXNo
KCcnICsgdGFyZ2V0Um91dGVOYW1lKTsKKyAgICB9CisgICAgYXJncy5wdXNoLmFwcGx5KGFyZ3Ms
IG1vZGVscyk7CisgICAgYXJncy5wdXNoKHsgcXVlcnlQYXJhbXM6IHF1ZXJ5UGFyYW1zIH0pOwor
ICAgIHJldHVybiBhcmdzOworICB9CisKKyAgZnVuY3Rpb24gZ2V0QWN0aXZlVGFyZ2V0TmFtZShy
b3V0ZXIpIHsKKyAgICB2YXIgaGFuZGxlckluZm9zID0gcm91dGVyLmFjdGl2ZVRyYW5zaXRpb24g
PyByb3V0ZXIuYWN0aXZlVHJhbnNpdGlvbi5zdGF0ZS5oYW5kbGVySW5mb3MgOiByb3V0ZXIuc3Rh
dGUuaGFuZGxlckluZm9zOworICAgIHJldHVybiBoYW5kbGVySW5mb3NbaGFuZGxlckluZm9zLmxl
bmd0aCAtIDFdLm5hbWU7CisgIH0KKworICBmdW5jdGlvbiBzdGFzaFBhcmFtTmFtZXMocm91dGVy
LCBoYW5kbGVySW5mb3MpIHsKKyAgICBpZiAoaGFuZGxlckluZm9zLl9uYW1lc1N0YXNoZWQpIHsK
KyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUaGlzIGhlbHBlciBleGlzdHMgYmVjYXVz
ZSByb3V0ZXIuanMvcm91dGUtcmVjb2duaXplci5qcyBhd2t3YXJkbHkKKyAgICAvLyBrZWVwcyBz
ZXBhcmF0ZSBhIGhhbmRsZXJJbmZvJ3MgbGlzdCBvZiBwYXJhbWV0ZXIgbmFtZXMgZGVwZW5kaW5n
CisgICAgLy8gb24gd2hldGhlciBhIFVSTCB0cmFuc2l0aW9uIG9yIG5hbWVkIHRyYW5zaXRpb24g
aXMgaGFwcGVuaW5nLgorICAgIC8vIEhvcGVmdWxseSB3ZSBjYW4gcmVtb3ZlIHRoaXMgaW4gdGhl
IGZ1dHVyZS4KKyAgICB2YXIgdGFyZ2V0Um91dGVOYW1lID0gaGFuZGxlckluZm9zW2hhbmRsZXJJ
bmZvcy5sZW5ndGggLSAxXS5uYW1lOworICAgIHZhciByZWNvZ0hhbmRsZXJzID0gcm91dGVyLnJv
dXRlci5yZWNvZ25pemVyLmhhbmRsZXJzRm9yKHRhcmdldFJvdXRlTmFtZSk7CisgICAgdmFyIGR5
bmFtaWNQYXJlbnQgPSBudWxsOworCisgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGhhbmRsZXJJ
bmZvcy5sZW5ndGg7IGkgPCBsZW47ICsraSkgeworICAgICAgdmFyIGhhbmRsZXJJbmZvID0gaGFu
ZGxlckluZm9zW2ldOworICAgICAgdmFyIG5hbWVzID0gcmVjb2dIYW5kbGVyc1tpXS5uYW1lczsK
KworICAgICAgaWYgKG5hbWVzLmxlbmd0aCkgeworICAgICAgICBkeW5hbWljUGFyZW50ID0gaGFu
ZGxlckluZm87CisgICAgICB9CisKKyAgICAgIGhhbmRsZXJJbmZvLl9uYW1lcyA9IG5hbWVzOwor
CisgICAgICB2YXIgcm91dGUgPSBoYW5kbGVySW5mby5oYW5kbGVyOworICAgICAgcm91dGUuX3N0
YXNoTmFtZXMoaGFuZGxlckluZm8sIGR5bmFtaWNQYXJlbnQpOworICAgIH0KKworICAgIGhhbmRs
ZXJJbmZvcy5fbmFtZXNTdGFzaGVkID0gdHJ1ZTsKKyAgfQorCisgIGZ1bmN0aW9uIF9jYWxjdWxh
dGVDYWNoZVZhbHVlUHJlZml4KHByZWZpeCwgcGFydCkgeworICAgIC8vIGNhbGN1bGF0ZXMgdGhl
IGRvdCBzZXBlcmF0ZWQgc2VjdGlvbnMgZnJvbSBwcmVmaXggdGhhdCBhcmUgYWxzbworICAgIC8v
IGF0IHRoZSBzdGFydCBvZiBwYXJ0IC0gd2hpY2ggZ2l2ZXMgdXMgdGhlIHJvdXRlIG5hbWUKKwor
ICAgIC8vIGdpdmVuIDogcHJlZml4ID0gc2l0ZS5hcnRpY2xlLmNvbW1lbnRzLCBwYXJ0ID0gc2l0
ZS5hcnRpY2xlLmlkCisgICAgLy8gICAgICAtIHJldHVybnM6IHNpdGUuYXJ0aWNsZSAodXNlIGdl
dCh2YWx1ZXNbc2l0ZS5hcnRpY2xlXSwgJ2lkJykgdG8gZ2V0IHRoZSBkeW5hbWljIHBhcnQgLSB1
c2VkIGJlbG93KQorCisgICAgLy8gZ2l2ZW4gOiBwcmVmaXggPSBzaXRlLmFydGljbGUsIHBhcnQg
PSBzaXRlLmFydGljbGUuaWQKKyAgICAvLyAgICAgIC0gcmV0dXJuczogc2l0ZS5hcnRpY2xlLiAo
dXNlIGdldCh2YWx1ZXNbc2l0ZS5hcnRpY2xlXSwgJ2lkJykgdG8gZ2V0IHRoZSBkeW5hbWljIHBh
cnQgLSB1c2VkIGJlbG93KQorCisgICAgdmFyIHByZWZpeFBhcnRzID0gcHJlZml4LnNwbGl0KCcu
Jyk7CisgICAgdmFyIGN1cnJQcmVmaXggPSAnJzsKKworICAgIGZvciAodmFyIGkgPSAwLCBsZW4g
PSBwcmVmaXhQYXJ0cy5sZW5ndGg7IGkgPCBsZW47IGkrKykgeworICAgICAgdmFyIGN1cnJQYXJ0
ID0gcHJlZml4UGFydHMuc2xpY2UoMCwgaSArIDEpLmpvaW4oJy4nKTsKKyAgICAgIGlmIChwYXJ0
LmluZGV4T2YoY3VyclBhcnQpICE9PSAwKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAg
ICAgY3VyclByZWZpeCA9IGN1cnJQYXJ0OworICAgIH0KKworICAgIHJldHVybiBjdXJyUHJlZml4
OworICB9CisKKyAgLyoKKyAgICBTdG9sZW4gZnJvbSBDb250cm9sbGVyCisgICovCisKKyAgZnVu
Y3Rpb24gY2FsY3VsYXRlQ2FjaGVLZXkocHJlZml4LCBfcGFydHMsIHZhbHVlcykgeworICAgIHZh
ciBwYXJ0cyA9IF9wYXJ0cyB8fCBbXTsKKyAgICB2YXIgc3VmZml4ZXMgPSAnJzsKKyAgICBmb3Ig
KHZhciBpID0gMCwgbGVuID0gcGFydHMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgIHZh
ciBwYXJ0ID0gcGFydHNbaV07CisgICAgICB2YXIgY2FjaGVWYWx1ZVByZWZpeCA9IF9jYWxjdWxh
dGVDYWNoZVZhbHVlUHJlZml4KHByZWZpeCwgcGFydCk7CisgICAgICB2YXIgdmFsdWU7CisgICAg
ICBpZiAodmFsdWVzKSB7CisgICAgICAgIGlmIChjYWNoZVZhbHVlUHJlZml4ICYmIGNhY2hlVmFs
dWVQcmVmaXggaW4gdmFsdWVzKSB7CisgICAgICAgICAgdmFyIHBhcnRSZW1vdmVkUHJlZml4ID0g
cGFydC5pbmRleE9mKGNhY2hlVmFsdWVQcmVmaXgpID09PSAwID8gcGFydC5zdWJzdHIoY2FjaGVW
YWx1ZVByZWZpeC5sZW5ndGggKyAxKSA6IHBhcnQ7CisgICAgICAgICAgdmFsdWUgPSBfZW1iZXJN
ZXRhbFByb3BlcnR5X2dldC5nZXQodmFsdWVzW2NhY2hlVmFsdWVQcmVmaXhdLCBwYXJ0UmVtb3Zl
ZFByZWZpeCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdmFsdWUgPSBfZW1iZXJNZXRh
bFByb3BlcnR5X2dldC5nZXQodmFsdWVzLCBwYXJ0KTsKKyAgICAgICAgfQorICAgICAgfQorICAg
ICAgc3VmZml4ZXMgKz0gJzo6JyArIHBhcnQgKyAnOicgKyB2YWx1ZTsKKyAgICB9CisgICAgcmV0
dXJuIHByZWZpeCArIHN1ZmZpeGVzLnJlcGxhY2UoQUxMX1BFUklPRFNfUkVHRVgsICctJyk7Cisg
IH0KKworICB2YXIgQUxMX1BFUklPRFNfUkVHRVggPSAvXC4vZzsKKworICAvKgorICAgIENvbnRy
b2xsZXItZGVmaW5lZCBxdWVyeSBwYXJhbWV0ZXJzIGNhbiBjb21lIGluIHRocmVlIHNoYXBlczoK
KyAgCisgICAgQXJyYXkKKyAgICAgIHF1ZXJ5UGFyYW1zOiBbJ2ZvbycsICdiYXInXQorICAgIEFy
cmF5IG9mIHNpbXBsZSBvYmplY3RzIHdoZXJlIHZhbHVlIGlzIGFuIGFsaWFzCisgICAgICBxdWVy
eVBhcmFtczogWworICAgICAgICB7CisgICAgICAgICAgJ2Zvbyc6ICdyZW5hbWVfZm9vX3RvX3Ro
aXMnCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAnYmFyJzogJ2NhbGxfYmFyX3Ro
aXNfaW5zdGVhZCcKKyAgICAgICAgfQorICAgICAgXQorICAgIEFycmF5IG9mIGZ1bGx5IGRlZmlu
ZWQgb2JqZWN0cworICAgICAgcXVlcnlQYXJhbXM6IFsKKyAgICAgICAgeworICAgICAgICAgICdm
b28nOiB7CisgICAgICAgICAgICBhczogJ3JlbmFtZV9mb29fdG9fdGhpcycKKyAgICAgICAgICB9
LAorICAgICAgICB9CisgICAgICAgIHsKKyAgICAgICAgICAnYmFyJzogeworICAgICAgICAgICAg
YXM6ICdjYWxsX2Jhcl90aGlzX2luc3RlYWQnLAorICAgICAgICAgICAgc2NvcGU6ICdjb250cm9s
bGVyJworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgXQorICAKKyAgICBUaGlzIGhlbHBl
ciBub3JtYWxpemVzIGFsbCB0aHJlZSBwb3NzaWJsZSBzdHlsZXMgaW50byB0aGUKKyAgICAnQXJy
YXkgb2YgZnVsbHkgZGVmaW5lZCBvYmplY3RzJyBzdHlsZS4KKyAgKi8KKworICBmdW5jdGlvbiBu
b3JtYWxpemVDb250cm9sbGVyUXVlcnlQYXJhbXMocXVlcnlQYXJhbXMpIHsKKyAgICBpZiAocXVl
cnlQYXJhbXMuX3FwTWFwKSB7CisgICAgICByZXR1cm4gcXVlcnlQYXJhbXMuX3FwTWFwOworICAg
IH0KKworICAgIHZhciBxcE1hcCA9IHF1ZXJ5UGFyYW1zLl9xcE1hcCA9IHt9OworCisgICAgZm9y
ICh2YXIgaSA9IDAsIGxlbiA9IHF1ZXJ5UGFyYW1zLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7Cisg
ICAgICBhY2N1bXVsYXRlUXVlcnlQYXJhbURlc2NyaXB0b3JzKHF1ZXJ5UGFyYW1zW2ldLCBxcE1h
cCk7CisgICAgfQorCisgICAgcmV0dXJuIHFwTWFwOworICB9CisKKyAgZnVuY3Rpb24gYWNjdW11
bGF0ZVF1ZXJ5UGFyYW1EZXNjcmlwdG9ycyhfZGVzYywgYWNjdW0pIHsKKyAgICB2YXIgZGVzYyA9
IF9kZXNjOworICAgIHZhciB0bXA7CisgICAgaWYgKHR5cGVvZiBkZXNjID09PSAnc3RyaW5nJykg
eworICAgICAgdG1wID0ge307CisgICAgICB0bXBbZGVzY10gPSB7IGFzOiBudWxsIH07CisgICAg
ICBkZXNjID0gdG1wOworICAgIH0KKworICAgIGZvciAodmFyIGtleSBpbiBkZXNjKSB7CisgICAg
ICBpZiAoIWRlc2MuaGFzT3duUHJvcGVydHkoa2V5KSkgeworICAgICAgICByZXR1cm47CisgICAg
ICB9CisKKyAgICAgIHZhciBzaW5nbGVEZXNjID0gZGVzY1trZXldOworICAgICAgaWYgKHR5cGVv
ZiBzaW5nbGVEZXNjID09PSAnc3RyaW5nJykgeworICAgICAgICBzaW5nbGVEZXNjID0geyBhczog
c2luZ2xlRGVzYyB9OworICAgICAgfQorCisgICAgICB0bXAgPSBhY2N1bVtrZXldIHx8IHsgYXM6
IG51bGwsIHNjb3BlOiAnbW9kZWwnIH07CisgICAgICBfZW1iZXJNZXRhbEFzc2lnbi5kZWZhdWx0
KHRtcCwgc2luZ2xlRGVzYyk7CisKKyAgICAgIGFjY3VtW2tleV0gPSB0bXA7CisgICAgfQorICB9
Cit9KTsKK2VuaWZlZCgnZW1iZXItcnVudGltZS9jb21wYXJlJywgWydleHBvcnRzJywgJ2VtYmVy
LXJ1bnRpbWUvdXRpbHMnLCAnZW1iZXItcnVudGltZS9taXhpbnMvY29tcGFyYWJsZSddLCBmdW5j
dGlvbiAoZXhwb3J0cywgX2VtYmVyUnVudGltZVV0aWxzLCBfZW1iZXJSdW50aW1lTWl4aW5zQ29t
cGFyYWJsZSkgeworICAndXNlIHN0cmljdCc7CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gY29tcGFy
ZTsKKworICB2YXIgVFlQRV9PUkRFUiA9IHsKKyAgICAndW5kZWZpbmVkJzogMCwKKyAgICAnbnVs
bCc6IDEsCisgICAgJ2Jvb2xlYW4nOiAyLAorICAgICdudW1iZXInOiAzLAorICAgICdzdHJpbmcn
OiA0LAorICAgICdhcnJheSc6IDUsCisgICAgJ29iamVjdCc6IDYsCisgICAgJ2luc3RhbmNlJzog
NywKKyAgICAnZnVuY3Rpb24nOiA4LAorICAgICdjbGFzcyc6IDksCisgICAgJ2RhdGUnOiAxMAor
ICB9OworCisgIC8vCisgIC8vIHRoZSBzcGFjZXNoaXAgb3BlcmF0b3IKKyAgLy8KKyAgLy8gICAg
ICAgICAgICAgICAgICAgICAgYC4gX19fCisgIC8vICAgICAgICAgICAgICAgICAgICAgX18sJyBf
X2AuICAgICAgICAgICAgICAgIF8uLi0tLS0uLi4uX19fXworICAvLyAgICAgICAgIF9fLi4uLS0u
J2BgOy4gICAsLiAgIDtgYC0tLi5fXyAgICAgLicgICAgLC0uXyAgICBfLi0nCisgIC8vICAgXy4u
LScnLS0tLS0tLScgICBgJyAgIGAnICAgYCcgICAgIE8gYGAtJycuXyAgICgsOycpIF8sJworICAv
LyAsJ19fX19fX19fX19fX19fX18gICAgICAgICAgICAgICAgICAgICAgICAgIFxgLS5fYC0nLCcK
KyAgLy8gIGAuXyAgICAgICAgICAgICAgYGBgYGBgYGBgYGAtLS0tLS0uLi5fX18gICAnLS4uXyct
OgorICAvLyAgICAgYGBgLS0uLl8gICAgICAsLiAgICAgICAgICAgICAgICAgICAgIGBgYGAtLS4u
Ll9fXC0uCisgIC8vICAgICAgICAgICAgIGAuLS0uIGAtYCAiSU5GSU5JVFkgSVMgTEVTUyAgICAg
X19fXyAgICB8ICB8YAorICAvLyAgICAgICAgICAgICAgIGAuIGAuICAgVEhBTiBCRVlPTkQiICAg
ICAgICAsJ2BgYGBgLiAgOyAgO2AKKyAgLy8gICAgICAgICAgICAgICAgIGAuX2AuICAgICAgICBf
X19fX19fX19fICAgYC4gICAgICBcJ19fL2AKKyAgLy8gICAgICAgICAgICAgICAgICAgIGAtOi5f
X19fXy9fX19fX18vX19fL19fX19gLiAgICAgXCAgYAorICAvLyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAgICAgICBgLl8gICAgYC4gICAgXAorICAvLyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYC5fX19fX19fX19gLS4gICBgLiAgIGAuX19fCisgIC8vICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTdCAgYC0tLS0tLSdgCisgIGZ1
bmN0aW9uIHNwYWNlc2hpcChhLCBiKSB7CisgICAgdmFyIGRpZmYgPSBhIC0gYjsKKyAgICByZXR1
cm4gKGRpZmYgPiAwKSAtIChkaWZmIDwgMCk7CisgIH0KKworICAvKioKKyAgIENvbXBhcmVzIHR3
byBqYXZhc2NyaXB0IHZhbHVlcyBhbmQgcmV0dXJuczoKKyAgCisgICAgLSAtMSBpZiB0aGUgZmly
c3QgaXMgc21hbGxlciB0aGFuIHRoZSBzZWNvbmQsCisgICAgLSAwIGlmIGJvdGggYXJlIGVxdWFs
LAorICAgIC0gMSBpZiB0aGUgZmlyc3QgaXMgZ3JlYXRlciB0aGFuIHRoZSBzZWNvbmQuCisgIAor
ICAgIGBgYGphdmFzY3JpcHQKKyAgICBFbWJlci5jb21wYXJlKCdoZWxsbycsICdoZWxsbycpOyAg
Ly8gMAorICAgIEVtYmVyLmNvbXBhcmUoJ2FiYycsICdkZmcnKTsgICAgICAvLyAtMQorICAgIEVt
YmVyLmNvbXBhcmUoMiwgMSk7ICAgICAgICAgICAgICAvLyAxCisgICAgYGBgCisgIAorICAgSWYg
dGhlIHR5cGVzIG9mIHRoZSB0d28gb2JqZWN0cyBhcmUgZGlmZmVyZW50IHByZWNlZGVuY2Ugb2Nj
dXJzIGluIHRoZQorICAgZm9sbG93aW5nIG9yZGVyLCB3aXRoIHR5cGVzIGVhcmxpZXIgaW4gdGhl
IGxpc3QgY29uc2lkZXJlZCBgPGAgdHlwZXMKKyAgIGxhdGVyIGluIHRoZSBsaXN0OgorICAKKyAg
ICAtIHVuZGVmaW5lZAorICAgIC0gbnVsbAorICAgIC0gYm9vbGVhbgorICAgIC0gbnVtYmVyCisg
ICAgLSBzdHJpbmcKKyAgICAtIGFycmF5CisgICAgLSBvYmplY3QKKyAgICAtIGluc3RhbmNlCisg
ICAgLSBmdW5jdGlvbgorICAgIC0gY2xhc3MKKyAgICAtIGRhdGUKKyAgCisgICAgYGBgamF2YXNj
cmlwdAorICAgIEVtYmVyLmNvbXBhcmUoJ2hlbGxvJywgNTApOyAgICAgICAvLyAxCisgICAgRW1i
ZXIuY29tcGFyZSg1MCwgJ2hlbGxvJyk7ICAgICAgIC8vIC0xCisgICAgYGBgCisgIAorICAgQG1l
dGhvZCBjb21wYXJlCisgICBAZm9yIEVtYmVyCisgICBAcGFyYW0ge09iamVjdH0gdiBGaXJzdCB2
YWx1ZSB0byBjb21wYXJlCisgICBAcGFyYW0ge09iamVjdH0gdyBTZWNvbmQgdmFsdWUgdG8gY29t
cGFyZQorICAgQHJldHVybiB7TnVtYmVyfSAtMSBpZiB2IDwgdywgMCBpZiB2ID0gdyBhbmQgMSBp
ZiB2ID4gdy4KKyAgIEBwdWJsaWMKKyAgKi8KKworICBmdW5jdGlvbiBjb21wYXJlKHYsIHcpIHsK
KyAgICBpZiAodiA9PT0gdykgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgdmFyIHR5
cGUxID0gX2VtYmVyUnVudGltZVV0aWxzLnR5cGVPZih2KTsKKyAgICB2YXIgdHlwZTIgPSBfZW1i
ZXJSdW50aW1lVXRpbHMudHlwZU9mKHcpOworCisgICAgaWYgKF9lbWJlclJ1bnRpbWVNaXhpbnND
b21wYXJhYmxlLmRlZmF1bHQpIHsKKyAgICAgIGlmICh0eXBlMSA9PT0gJ2luc3RhbmNlJyAmJiBf
ZW1iZXJSdW50aW1lTWl4aW5zQ29tcGFyYWJsZS5kZWZhdWx0LmRldGVjdCh2KSAmJiB2LmNvbnN0
cnVjdG9yLmNvbXBhcmUpIHsKKyAgICAgICAgcmV0dXJuIHYuY29uc3RydWN0b3IuY29tcGFyZSh2
LCB3KTsKKyAgICAgIH0KKworICAgICAgaWYgKHR5cGUyID09PSAnaW5zdGFuY2UnICYmIF9lbWJl
clJ1bnRpbWVNaXhpbnNDb21wYXJhYmxlLmRlZmF1bHQuZGV0ZWN0KHcpICYmIHcuY29uc3RydWN0
b3IuY29tcGFyZSkgeworICAgICAgICByZXR1cm4gdy5jb25zdHJ1Y3Rvci5jb21wYXJlKHcsIHYp
ICogLTE7CisgICAgICB9CisgICAgfQorCisgICAgdmFyIHJlcyA9IHNwYWNlc2hpcChUWVBFX09S
REVSW3R5cGUxXSwgVFlQRV9PUkRFUlt0eXBlMl0pOworCisgICAgaWYgKHJlcyAhPT0gMCkgewor
ICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisKKyAgICAvLyB0eXBlcyBhcmUgZXF1YWwgLSBzbyB3
ZSBoYXZlIHRvIGNoZWNrIHZhbHVlcyBub3cKKyAgICBzd2l0Y2ggKHR5cGUxKSB7CisgICAgICBj
YXNlICdib29sZWFuJzoKKyAgICAgIGNhc2UgJ251bWJlcic6CisgICAgICAgIHJldHVybiBzcGFj
ZXNoaXAodiwgdyk7CisKKyAgICAgIGNhc2UgJ3N0cmluZyc6CisgICAgICAgIHJldHVybiBzcGFj
ZXNoaXAodi5sb2NhbGVDb21wYXJlKHcpLCAwKTsKKworICAgICAgY2FzZSAnYXJyYXknOgorICAg
ICAgICB2YXIgdkxlbiA9IHYubGVuZ3RoOworICAgICAgICB2YXIgd0xlbiA9IHcubGVuZ3RoOwor
ICAgICAgICB2YXIgbGVuID0gTWF0aC5taW4odkxlbiwgd0xlbik7CisKKyAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgICAgIHZhciByID0gY29tcGFyZSh2W2ld
LCB3W2ldKTsKKyAgICAgICAgICBpZiAociAhPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIHI7
CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gYWxsIGVsZW1lbnRzIGFyZSBl
cXVhbCBub3cKKyAgICAgICAgLy8gc2hvcnRlciBhcnJheSBzaG91bGQgYmUgb3JkZXJlZCBmaXJz
dAorICAgICAgICByZXR1cm4gc3BhY2VzaGlwKHZMZW4sIHdMZW4pOworCisgICAgICBjYXNlICdp
bnN0YW5jZSc6CisgICAgICAgIGlmIChfZW1iZXJSdW50aW1lTWl4aW5zQ29tcGFyYWJsZS5kZWZh
dWx0ICYmIF9lbWJlclJ1bnRpbWVNaXhpbnNDb21wYXJhYmxlLmRlZmF1bHQuZGV0ZWN0KHYpKSB7
CisgICAgICAgICAgcmV0dXJuIHYuY29tcGFyZSh2LCB3KTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgICAgY2FzZSAnZGF0ZSc6CisgICAgICAgIHJldHVybiBzcGFjZXNoaXAo
di5nZXRUaW1lKCksIHcuZ2V0VGltZSgpKTsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorICB9Cit9KTsKK2VuaWZlZCgnZW1iZXItcnVudGltZS9jb21wdXRlZC9y
ZWR1Y2VfY29tcHV0ZWRfbWFjcm9zJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywg
J2VtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCcsICdlbWJlci1tZXRhbC9lcnJvcicsICdlbWJlci1t
ZXRhbC9jb21wdXRlZCcsICdlbWJlci1tZXRhbC9vYnNlcnZlcicsICdlbWJlci1ydW50aW1lL2Nv
bXBhcmUnLCAnZW1iZXItcnVudGltZS91dGlscycsICdlbWJlci1ydW50aW1lL3N5c3RlbS9uYXRp
dmVfYXJyYXknLCAnZW1iZXItbWV0YWwvaXNfbm9uZScsICdlbWJlci1tZXRhbC9nZXRfcHJvcGVy
dGllcycsICdlbWJlci1tZXRhbC9lbXB0eV9vYmplY3QnLCAnZW1iZXItbWV0YWwvdXRpbHMnLCAn
ZW1iZXItbWV0YWwvd2Vha19tYXAnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsRGVi
dWcsIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LCBfZW1iZXJNZXRhbEVycm9yLCBfZW1iZXJNZXRh
bENvbXB1dGVkLCBfZW1iZXJNZXRhbE9ic2VydmVyLCBfZW1iZXJSdW50aW1lQ29tcGFyZSwgX2Vt
YmVyUnVudGltZVV0aWxzLCBfZW1iZXJSdW50aW1lU3lzdGVtTmF0aXZlX2FycmF5LCBfZW1iZXJN
ZXRhbElzX25vbmUsIF9lbWJlck1ldGFsR2V0X3Byb3BlcnRpZXMsIF9lbWJlck1ldGFsRW1wdHlf
b2JqZWN0LCBfZW1iZXJNZXRhbFV0aWxzLCBfZW1iZXJNZXRhbFdlYWtfbWFwKSB7CisgIC8qKgor
ICBAbW9kdWxlIGVtYmVyCisgIEBzdWJtb2R1bGUgZW1iZXItcnVudGltZQorICAqLworCisgICd1
c2Ugc3RyaWN0JzsKKworICBleHBvcnRzLnN1bSA9IHN1bTsKKyAgZXhwb3J0cy5tYXggPSBtYXg7
CisgIGV4cG9ydHMubWluID0gbWluOworICBleHBvcnRzLm1hcCA9IG1hcDsKKyAgZXhwb3J0cy5t
YXBCeSA9IG1hcEJ5OworICBleHBvcnRzLmZpbHRlciA9IGZpbHRlcjsKKyAgZXhwb3J0cy5maWx0
ZXJCeSA9IGZpbHRlckJ5OworICBleHBvcnRzLnVuaXEgPSB1bmlxOworICBleHBvcnRzLnVuaXFC
eSA9IHVuaXFCeTsKKyAgZXhwb3J0cy5pbnRlcnNlY3QgPSBpbnRlcnNlY3Q7CisgIGV4cG9ydHMu
c2V0RGlmZiA9IHNldERpZmY7CisgIGV4cG9ydHMuY29sbGVjdCA9IGNvbGxlY3Q7CisgIGV4cG9y
dHMuc29ydCA9IHNvcnQ7CisKKyAgZnVuY3Rpb24gcmVkdWNlTWFjcm8oZGVwZW5kZW50S2V5LCBj
YWxsYmFjaywgaW5pdGlhbFZhbHVlKSB7CisgICAgcmV0dXJuIF9lbWJlck1ldGFsQ29tcHV0ZWQu
Y29tcHV0ZWQoZGVwZW5kZW50S2V5ICsgJy5bXScsIGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciBf
dGhpcyA9IHRoaXM7CisKKyAgICAgIHZhciBhcnIgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5n
ZXQodGhpcywgZGVwZW5kZW50S2V5KTsKKworICAgICAgaWYgKGFyciA9PT0gbnVsbCB8fCB0eXBl
b2YgYXJyICE9PSAnb2JqZWN0JykgeworICAgICAgICByZXR1cm4gaW5pdGlhbFZhbHVlOworICAg
ICAgfQorCisgICAgICByZXR1cm4gYXJyLnJlZHVjZShmdW5jdGlvbiAocHJldmlvdXNWYWx1ZSwg
Y3VycmVudFZhbHVlLCBpbmRleCwgYXJyYXkpIHsKKyAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmNh
bGwoX3RoaXMsIHByZXZpb3VzVmFsdWUsIGN1cnJlbnRWYWx1ZSwgaW5kZXgsIGFycmF5KTsKKyAg
ICAgIH0sIGluaXRpYWxWYWx1ZSk7CisgICAgfSkucmVhZE9ubHkoKTsKKyAgfQorCisgIGZ1bmN0
aW9uIGFycmF5TWFjcm8oZGVwZW5kZW50S2V5LCBjYWxsYmFjaykgeworICAgIC8vIFRoaXMgaXMg
YSBiaXQgdWdseQorICAgIHZhciBwcm9wZXJ0eU5hbWU7CisgICAgaWYgKC9AZWFjaC8udGVzdChk
ZXBlbmRlbnRLZXkpKSB7CisgICAgICBwcm9wZXJ0eU5hbWUgPSBkZXBlbmRlbnRLZXkucmVwbGFj
ZSgvXC5AZWFjaC4qJC8sICcnKTsKKyAgICB9IGVsc2UgeworICAgICAgcHJvcGVydHlOYW1lID0g
ZGVwZW5kZW50S2V5OworICAgICAgZGVwZW5kZW50S2V5ICs9ICcuW10nOworICAgIH0KKworICAg
IHJldHVybiBfZW1iZXJNZXRhbENvbXB1dGVkLmNvbXB1dGVkKGRlcGVuZGVudEtleSwgZnVuY3Rp
b24gKCkgeworICAgICAgdmFyIHZhbHVlID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRo
aXMsIHByb3BlcnR5TmFtZSk7CisgICAgICBpZiAoX2VtYmVyUnVudGltZVV0aWxzLmlzQXJyYXko
dmFsdWUpKSB7CisgICAgICAgIHJldHVybiBfZW1iZXJSdW50aW1lU3lzdGVtTmF0aXZlX2FycmF5
LkEoY2FsbGJhY2suY2FsbCh0aGlzLCB2YWx1ZSkpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAg
cmV0dXJuIF9lbWJlclJ1bnRpbWVTeXN0ZW1OYXRpdmVfYXJyYXkuQSgpOworICAgICAgfQorICAg
IH0pLnJlYWRPbmx5KCk7CisgIH0KKworICBmdW5jdGlvbiBtdWx0aUFycmF5TWFjcm8oZGVwZW5k
ZW50S2V5cywgY2FsbGJhY2spIHsKKyAgICB2YXIgYXJncyA9IGRlcGVuZGVudEtleXMubWFwKGZ1
bmN0aW9uIChrZXkpIHsKKyAgICAgIHJldHVybiBrZXkgKyAnLltdJzsKKyAgICB9KTsKKworICAg
IGFyZ3MucHVzaChmdW5jdGlvbiAoKSB7CisgICAgICByZXR1cm4gX2VtYmVyUnVudGltZVN5c3Rl
bU5hdGl2ZV9hcnJheS5BKGNhbGxiYWNrLmNhbGwodGhpcywgZGVwZW5kZW50S2V5cykpOworICAg
IH0pOworCisgICAgcmV0dXJuIF9lbWJlck1ldGFsQ29tcHV0ZWQuY29tcHV0ZWQuYXBwbHkodGhp
cywgYXJncykucmVhZE9ubHkoKTsKKyAgfQorCisgIC8qKgorICAgIEEgY29tcHV0ZWQgcHJvcGVy
dHkgdGhhdCByZXR1cm5zIHRoZSBzdW0gb2YgdGhlIHZhbHVlcworICAgIGluIHRoZSBkZXBlbmRl
bnQgYXJyYXkuCisgIAorICAgIEBtZXRob2Qgc3VtCisgICAgQGZvciBFbWJlci5jb21wdXRlZAor
ICAgIEBwYXJhbSB7U3RyaW5nfSBkZXBlbmRlbnRLZXkKKyAgICBAcmV0dXJuIHtFbWJlci5Db21w
dXRlZFByb3BlcnR5fSBjb21wdXRlcyB0aGUgc3VtIG9mIGFsbCB2YWx1ZXMgaW4gdGhlIGRlcGVu
ZGVudEtleSdzIGFycmF5CisgICAgQHNpbmNlIDEuNC4wCisgICAgQHB1YmxpYworICAqLworCisg
IGZ1bmN0aW9uIHN1bShkZXBlbmRlbnRLZXkpIHsKKyAgICByZXR1cm4gcmVkdWNlTWFjcm8oZGVw
ZW5kZW50S2V5LCBmdW5jdGlvbiAoc3VtLCBpdGVtKSB7CisgICAgICByZXR1cm4gc3VtICsgaXRl
bTsKKyAgICB9LCAwKTsKKyAgfQorCisgIC8qKgorICAgIEEgY29tcHV0ZWQgcHJvcGVydHkgdGhh
dCBjYWxjdWxhdGVzIHRoZSBtYXhpbXVtIHZhbHVlIGluIHRoZQorICAgIGRlcGVuZGVudCBhcnJh
eS4gVGhpcyB3aWxsIHJldHVybiBgLUluZmluaXR5YCB3aGVuIHRoZSBkZXBlbmRlbnQKKyAgICBh
cnJheSBpcyBlbXB0eS4KKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIHZhciBQZXJzb24gPSBF
bWJlci5PYmplY3QuZXh0ZW5kKHsKKyAgICAgIGNoaWxkQWdlczogRW1iZXIuY29tcHV0ZWQubWFw
QnkoJ2NoaWxkcmVuJywgJ2FnZScpLAorICAgICAgbWF4Q2hpbGRBZ2U6IEVtYmVyLmNvbXB1dGVk
Lm1heCgnY2hpbGRBZ2VzJykKKyAgICB9KTsKKyAgCisgICAgdmFyIGxvcmRCeXJvbiA9IFBlcnNv
bi5jcmVhdGUoeyBjaGlsZHJlbjogW10gfSk7CisgIAorICAgIGxvcmRCeXJvbi5nZXQoJ21heENo
aWxkQWdlJyk7IC8vIC1JbmZpbml0eQorICAgIGxvcmRCeXJvbi5nZXQoJ2NoaWxkcmVuJykucHVz
aE9iamVjdCh7CisgICAgICBuYW1lOiAnQXVndXN0YSBBZGEgQnlyb24nLCBhZ2U6IDcKKyAgICB9
KTsKKyAgICBsb3JkQnlyb24uZ2V0KCdtYXhDaGlsZEFnZScpOyAvLyA3CisgICAgbG9yZEJ5cm9u
LmdldCgnY2hpbGRyZW4nKS5wdXNoT2JqZWN0cyhbeworICAgICAgbmFtZTogJ0FsbGVncmEgQnly
b24nLAorICAgICAgYWdlOiA1CisgICAgfSwgeworICAgICAgbmFtZTogJ0VsaXphYmV0aCBNZWRv
cmEgTGVpZ2gnLAorICAgICAgYWdlOiA4CisgICAgfV0pOworICAgIGxvcmRCeXJvbi5nZXQoJ21h
eENoaWxkQWdlJyk7IC8vIDgKKyAgICBgYGAKKyAgCisgICAgQG1ldGhvZCBtYXgKKyAgICBAZm9y
IEVtYmVyLmNvbXB1dGVkCisgICAgQHBhcmFtIHtTdHJpbmd9IGRlcGVuZGVudEtleQorICAgIEBy
ZXR1cm4ge0VtYmVyLkNvbXB1dGVkUHJvcGVydHl9IGNvbXB1dGVzIHRoZSBsYXJnZXN0IHZhbHVl
IGluIHRoZSBkZXBlbmRlbnRLZXkncyBhcnJheQorICAgIEBwdWJsaWMKKyAgKi8KKworICBmdW5j
dGlvbiBtYXgoZGVwZW5kZW50S2V5KSB7CisgICAgcmV0dXJuIHJlZHVjZU1hY3JvKGRlcGVuZGVu
dEtleSwgZnVuY3Rpb24gKG1heCwgaXRlbSkgeworICAgICAgcmV0dXJuIE1hdGgubWF4KG1heCwg
aXRlbSk7CisgICAgfSwgLUluZmluaXR5KTsKKyAgfQorCisgIC8qKgorICAgIEEgY29tcHV0ZWQg
cHJvcGVydHkgdGhhdCBjYWxjdWxhdGVzIHRoZSBtaW5pbXVtIHZhbHVlIGluIHRoZQorICAgIGRl
cGVuZGVudCBhcnJheS4gVGhpcyB3aWxsIHJldHVybiBgSW5maW5pdHlgIHdoZW4gdGhlIGRlcGVu
ZGVudAorICAgIGFycmF5IGlzIGVtcHR5LgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgdmFy
IFBlcnNvbiA9IEVtYmVyLk9iamVjdC5leHRlbmQoeworICAgICAgY2hpbGRBZ2VzOiBFbWJlci5j
b21wdXRlZC5tYXBCeSgnY2hpbGRyZW4nLCAnYWdlJyksCisgICAgICBtaW5DaGlsZEFnZTogRW1i
ZXIuY29tcHV0ZWQubWluKCdjaGlsZEFnZXMnKQorICAgIH0pOworICAKKyAgICB2YXIgbG9yZEJ5
cm9uID0gUGVyc29uLmNyZWF0ZSh7IGNoaWxkcmVuOiBbXSB9KTsKKyAgCisgICAgbG9yZEJ5cm9u
LmdldCgnbWluQ2hpbGRBZ2UnKTsgLy8gSW5maW5pdHkKKyAgICBsb3JkQnlyb24uZ2V0KCdjaGls
ZHJlbicpLnB1c2hPYmplY3QoeworICAgICAgbmFtZTogJ0F1Z3VzdGEgQWRhIEJ5cm9uJywgYWdl
OiA3CisgICAgfSk7CisgICAgbG9yZEJ5cm9uLmdldCgnbWluQ2hpbGRBZ2UnKTsgLy8gNworICAg
IGxvcmRCeXJvbi5nZXQoJ2NoaWxkcmVuJykucHVzaE9iamVjdHMoW3sKKyAgICAgIG5hbWU6ICdB
bGxlZ3JhIEJ5cm9uJywKKyAgICAgIGFnZTogNQorICAgIH0sIHsKKyAgICAgIG5hbWU6ICdFbGl6
YWJldGggTWVkb3JhIExlaWdoJywKKyAgICAgIGFnZTogOAorICAgIH1dKTsKKyAgICBsb3JkQnly
b24uZ2V0KCdtaW5DaGlsZEFnZScpOyAvLyA1CisgICAgYGBgCisgIAorICAgIEBtZXRob2QgbWlu
CisgICAgQGZvciBFbWJlci5jb21wdXRlZAorICAgIEBwYXJhbSB7U3RyaW5nfSBkZXBlbmRlbnRL
ZXkKKyAgICBAcmV0dXJuIHtFbWJlci5Db21wdXRlZFByb3BlcnR5fSBjb21wdXRlcyB0aGUgc21h
bGxlc3QgdmFsdWUgaW4gdGhlIGRlcGVuZGVudEtleSdzIGFycmF5CisgICAgQHB1YmxpYworICAq
LworCisgIGZ1bmN0aW9uIG1pbihkZXBlbmRlbnRLZXkpIHsKKyAgICByZXR1cm4gcmVkdWNlTWFj
cm8oZGVwZW5kZW50S2V5LCBmdW5jdGlvbiAobWluLCBpdGVtKSB7CisgICAgICByZXR1cm4gTWF0
aC5taW4obWluLCBpdGVtKTsKKyAgICB9LCBJbmZpbml0eSk7CisgIH0KKworICAvKioKKyAgICBS
ZXR1cm5zIGFuIGFycmF5IG1hcHBlZCB2aWEgdGhlIGNhbGxiYWNrCisgIAorICAgIFRoZSBjYWxs
YmFjayBtZXRob2QgeW91IHByb3ZpZGUgc2hvdWxkIGhhdmUgdGhlIGZvbGxvd2luZyBzaWduYXR1
cmUuCisgICAgYGl0ZW1gIGlzIHRoZSBjdXJyZW50IGl0ZW0gaW4gdGhlIGl0ZXJhdGlvbi4KKyAg
ICBgaW5kZXhgIGlzIHRoZSBpbnRlZ2VyIGluZGV4IG9mIHRoZSBjdXJyZW50IGl0ZW0gaW4gdGhl
IGl0ZXJhdGlvbi4KKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIGZ1bmN0aW9uKGl0ZW0sIGlu
ZGV4KTsKKyAgICBgYGAKKyAgCisgICAgRXhhbXBsZQorICAKKyAgICBgYGBqYXZhc2NyaXB0Cisg
ICAgdmFyIEhhbXN0ZXIgPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKKyAgICAgIGV4Y2l0aW5nQ2hv
cmVzOiBFbWJlci5jb21wdXRlZC5tYXAoJ2Nob3JlcycsIGZ1bmN0aW9uKGNob3JlLCBpbmRleCkg
eworICAgICAgICByZXR1cm4gY2hvcmUudG9VcHBlckNhc2UoKSArICchJzsKKyAgICAgIH0pCisg
ICAgfSk7CisgIAorICAgIHZhciBoYW1zdGVyID0gSGFtc3Rlci5jcmVhdGUoeworICAgICAgY2hv
cmVzOiBbJ2NsZWFuJywgJ3dyaXRlIG1vcmUgdW5pdCB0ZXN0cyddCisgICAgfSk7CisgIAorICAg
IGhhbXN0ZXIuZ2V0KCdleGNpdGluZ0Nob3JlcycpOyAvLyBbJ0NMRUFOIScsICdXUklURSBNT1JF
IFVOSVQgVEVTVFMhJ10KKyAgICBgYGAKKyAgCisgICAgQG1ldGhvZCBtYXAKKyAgICBAZm9yIEVt
YmVyLmNvbXB1dGVkCisgICAgQHBhcmFtIHtTdHJpbmd9IGRlcGVuZGVudEtleQorICAgIEBwYXJh
bSB7RnVuY3Rpb259IGNhbGxiYWNrCisgICAgQHJldHVybiB7RW1iZXIuQ29tcHV0ZWRQcm9wZXJ0
eX0gYW4gYXJyYXkgbWFwcGVkIHZpYSB0aGUgY2FsbGJhY2sKKyAgICBAcHVibGljCisgICovCisK
KyAgZnVuY3Rpb24gbWFwKGRlcGVuZGVudEtleSwgY2FsbGJhY2spIHsKKyAgICByZXR1cm4gYXJy
YXlNYWNybyhkZXBlbmRlbnRLZXksIGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgcmV0dXJuIHZh
bHVlLm1hcChjYWxsYmFjaywgdGhpcyk7CisgICAgfSk7CisgIH0KKworICAvKioKKyAgICBSZXR1
cm5zIGFuIGFycmF5IG1hcHBlZCB0byB0aGUgc3BlY2lmaWVkIGtleS4KKyAgCisgICAgYGBgamF2
YXNjcmlwdAorICAgIHZhciBQZXJzb24gPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKKyAgICAgIGNo
aWxkQWdlczogRW1iZXIuY29tcHV0ZWQubWFwQnkoJ2NoaWxkcmVuJywgJ2FnZScpCisgICAgfSk7
CisgIAorICAgIHZhciBsb3JkQnlyb24gPSBQZXJzb24uY3JlYXRlKHsgY2hpbGRyZW46IFtdIH0p
OworICAKKyAgICBsb3JkQnlyb24uZ2V0KCdjaGlsZEFnZXMnKTsgLy8gW10KKyAgICBsb3JkQnly
b24uZ2V0KCdjaGlsZHJlbicpLnB1c2hPYmplY3QoeyBuYW1lOiAnQXVndXN0YSBBZGEgQnlyb24n
LCBhZ2U6IDcgfSk7CisgICAgbG9yZEJ5cm9uLmdldCgnY2hpbGRBZ2VzJyk7IC8vIFs3XQorICAg
IGxvcmRCeXJvbi5nZXQoJ2NoaWxkcmVuJykucHVzaE9iamVjdHMoW3sKKyAgICAgIG5hbWU6ICdB
bGxlZ3JhIEJ5cm9uJywKKyAgICAgIGFnZTogNQorICAgIH0sIHsKKyAgICAgIG5hbWU6ICdFbGl6
YWJldGggTWVkb3JhIExlaWdoJywKKyAgICAgIGFnZTogOAorICAgIH1dKTsKKyAgICBsb3JkQnly
b24uZ2V0KCdjaGlsZEFnZXMnKTsgLy8gWzcsIDUsIDhdCisgICAgYGBgCisgIAorICAgIEBtZXRo
b2QgbWFwQnkKKyAgICBAZm9yIEVtYmVyLmNvbXB1dGVkCisgICAgQHBhcmFtIHtTdHJpbmd9IGRl
cGVuZGVudEtleQorICAgIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eUtleQorICAgIEByZXR1cm4g
e0VtYmVyLkNvbXB1dGVkUHJvcGVydHl9IGFuIGFycmF5IG1hcHBlZCB0byB0aGUgc3BlY2lmaWVk
IGtleQorICAgIEBwdWJsaWMKKyAgKi8KKworICBmdW5jdGlvbiBtYXBCeShkZXBlbmRlbnRLZXks
IHByb3BlcnR5S2V5KSB7CisgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ0VtYmVyLmNvbXB1
dGVkLm1hcEJ5IGV4cGVjdHMgYSBwcm9wZXJ0eSBzdHJpbmcgZm9yIGl0cyBzZWNvbmQgYXJndW1l
bnQsICcgKyAncGVyaGFwcyB5b3UgbWVhbnQgdG8gdXNlICJtYXAiJywgdHlwZW9mIHByb3BlcnR5
S2V5ID09PSAnc3RyaW5nJyk7CisKKyAgICByZXR1cm4gbWFwKGRlcGVuZGVudEtleSArICcuQGVh
Y2guJyArIHByb3BlcnR5S2V5LCBmdW5jdGlvbiAoaXRlbSkgeworICAgICAgcmV0dXJuIF9lbWJl
ck1ldGFsUHJvcGVydHlfZ2V0LmdldChpdGVtLCBwcm9wZXJ0eUtleSk7CisgICAgfSk7CisgIH0K
KworICAvKioKKyAgICBGaWx0ZXJzIHRoZSBhcnJheSBieSB0aGUgY2FsbGJhY2suCisgIAorICAg
IFRoZSBjYWxsYmFjayBtZXRob2QgeW91IHByb3ZpZGUgc2hvdWxkIGhhdmUgdGhlIGZvbGxvd2lu
ZyBzaWduYXR1cmUuCisgICAgYGl0ZW1gIGlzIHRoZSBjdXJyZW50IGl0ZW0gaW4gdGhlIGl0ZXJh
dGlvbi4KKyAgICBgaW5kZXhgIGlzIHRoZSBpbnRlZ2VyIGluZGV4IG9mIHRoZSBjdXJyZW50IGl0
ZW0gaW4gdGhlIGl0ZXJhdGlvbi4KKyAgICBgYXJyYXlgIGlzIHRoZSBkZXBlbmRhbnQgYXJyYXkg
aXRzZWxmLgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgZnVuY3Rpb24oaXRlbSwgaW5kZXgs
IGFycmF5KTsKKyAgICBgYGAKKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIHZhciBIYW1zdGVy
ID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7CisgICAgICByZW1haW5pbmdDaG9yZXM6IEVtYmVyLmNv
bXB1dGVkLmZpbHRlcignY2hvcmVzJywgZnVuY3Rpb24oY2hvcmUsIGluZGV4LCBhcnJheSkgewor
ICAgICAgICByZXR1cm4gIWNob3JlLmRvbmU7CisgICAgICB9KQorICAgIH0pOworICAKKyAgICB2
YXIgaGFtc3RlciA9IEhhbXN0ZXIuY3JlYXRlKHsKKyAgICAgIGNob3JlczogWworICAgICAgICB7
IG5hbWU6ICdjb29rJywgZG9uZTogdHJ1ZSB9LAorICAgICAgICB7IG5hbWU6ICdjbGVhbicsIGRv
bmU6IHRydWUgfSwKKyAgICAgICAgeyBuYW1lOiAnd3JpdGUgbW9yZSB1bml0IHRlc3RzJywgZG9u
ZTogZmFsc2UgfQorICAgICAgXQorICAgIH0pOworICAKKyAgICBoYW1zdGVyLmdldCgncmVtYWlu
aW5nQ2hvcmVzJyk7IC8vIFt7bmFtZTogJ3dyaXRlIG1vcmUgdW5pdCB0ZXN0cycsIGRvbmU6IGZh
bHNlfV0KKyAgICBgYGAKKyAgCisgICAgQG1ldGhvZCBmaWx0ZXIKKyAgICBAZm9yIEVtYmVyLmNv
bXB1dGVkCisgICAgQHBhcmFtIHtTdHJpbmd9IGRlcGVuZGVudEtleQorICAgIEBwYXJhbSB7RnVu
Y3Rpb259IGNhbGxiYWNrCisgICAgQHJldHVybiB7RW1iZXIuQ29tcHV0ZWRQcm9wZXJ0eX0gdGhl
IGZpbHRlcmVkIGFycmF5CisgICAgQHB1YmxpYworICAqLworCisgIGZ1bmN0aW9uIGZpbHRlcihk
ZXBlbmRlbnRLZXksIGNhbGxiYWNrKSB7CisgICAgcmV0dXJuIGFycmF5TWFjcm8oZGVwZW5kZW50
S2V5LCBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgIHJldHVybiB2YWx1ZS5maWx0ZXIoY2FsbGJh
Y2ssIHRoaXMpOworICAgIH0pOworICB9CisKKyAgLyoqCisgICAgRmlsdGVycyB0aGUgYXJyYXkg
YnkgdGhlIHByb3BlcnR5IGFuZCB2YWx1ZQorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgdmFy
IEhhbXN0ZXIgPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKKyAgICAgIHJlbWFpbmluZ0Nob3Jlczog
RW1iZXIuY29tcHV0ZWQuZmlsdGVyQnkoJ2Nob3JlcycsICdkb25lJywgZmFsc2UpCisgICAgfSk7
CisgIAorICAgIHZhciBoYW1zdGVyID0gSGFtc3Rlci5jcmVhdGUoeworICAgICAgY2hvcmVzOiBb
CisgICAgICAgIHsgbmFtZTogJ2Nvb2snLCBkb25lOiB0cnVlIH0sCisgICAgICAgIHsgbmFtZTog
J2NsZWFuJywgZG9uZTogdHJ1ZSB9LAorICAgICAgICB7IG5hbWU6ICd3cml0ZSBtb3JlIHVuaXQg
dGVzdHMnLCBkb25lOiBmYWxzZSB9CisgICAgICBdCisgICAgfSk7CisgIAorICAgIGhhbXN0ZXIu
Z2V0KCdyZW1haW5pbmdDaG9yZXMnKTsgLy8gW3sgbmFtZTogJ3dyaXRlIG1vcmUgdW5pdCB0ZXN0
cycsIGRvbmU6IGZhbHNlIH1dCisgICAgYGBgCisgIAorICAgIEBtZXRob2QgZmlsdGVyQnkKKyAg
ICBAZm9yIEVtYmVyLmNvbXB1dGVkCisgICAgQHBhcmFtIHtTdHJpbmd9IGRlcGVuZGVudEtleQor
ICAgIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eUtleQorICAgIEBwYXJhbSB7Kn0gdmFsdWUKKyAg
ICBAcmV0dXJuIHtFbWJlci5Db21wdXRlZFByb3BlcnR5fSB0aGUgZmlsdGVyZWQgYXJyYXkKKyAg
ICBAcHVibGljCisgICovCisKKyAgZnVuY3Rpb24gZmlsdGVyQnkoZGVwZW5kZW50S2V5LCBwcm9w
ZXJ0eUtleSwgdmFsdWUpIHsKKyAgICB2YXIgY2FsbGJhY2s7CisKKyAgICBpZiAoYXJndW1lbnRz
Lmxlbmd0aCA9PT0gMikgeworICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoaXRlbSkgeworICAg
ICAgICByZXR1cm4gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KGl0ZW0sIHByb3BlcnR5S2V5
KTsKKyAgICAgIH07CisgICAgfSBlbHNlIHsKKyAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKGl0
ZW0pIHsKKyAgICAgICAgcmV0dXJuIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldChpdGVtLCBw
cm9wZXJ0eUtleSkgPT09IHZhbHVlOworICAgICAgfTsKKyAgICB9CisKKyAgICByZXR1cm4gZmls
dGVyKGRlcGVuZGVudEtleSArICcuQGVhY2guJyArIHByb3BlcnR5S2V5LCBjYWxsYmFjayk7Cisg
IH0KKworICAvKioKKyAgICBBIGNvbXB1dGVkIHByb3BlcnR5IHdoaWNoIHJldHVybnMgYSBuZXcg
YXJyYXkgd2l0aCBhbGwgdGhlIHVuaXF1ZQorICAgIGVsZW1lbnRzIGZyb20gb25lIG9yIG1vcmUg
ZGVwZW5kZW50IGFycmF5cy4KKyAgCisgICAgRXhhbXBsZQorICAKKyAgICBgYGBqYXZhc2NyaXB0
CisgICAgdmFyIEhhbXN0ZXIgPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKKyAgICAgIHVuaXF1ZUZy
dWl0czogRW1iZXIuY29tcHV0ZWQudW5pcSgnZnJ1aXRzJykKKyAgICB9KTsKKyAgCisgICAgdmFy
IGhhbXN0ZXIgPSBIYW1zdGVyLmNyZWF0ZSh7CisgICAgICBmcnVpdHM6IFsKKyAgICAgICAgJ2Jh
bmFuYScsCisgICAgICAgICdncmFwZScsCisgICAgICAgICdrYWxlJywKKyAgICAgICAgJ2JhbmFu
YScKKyAgICAgIF0KKyAgICB9KTsKKyAgCisgICAgaGFtc3Rlci5nZXQoJ3VuaXF1ZUZydWl0cycp
OyAvLyBbJ2JhbmFuYScsICdncmFwZScsICdrYWxlJ10KKyAgICBgYGAKKyAgCisgICAgQG1ldGhv
ZCB1bmlxCisgICAgQGZvciBFbWJlci5jb21wdXRlZAorICAgIEBwYXJhbSB7U3RyaW5nfSBwcm9w
ZXJ0eUtleSoKKyAgICBAcmV0dXJuIHtFbWJlci5Db21wdXRlZFByb3BlcnR5fSBjb21wdXRlcyBh
IG5ldyBhcnJheSB3aXRoIGFsbCB0aGUKKyAgICB1bmlxdWUgZWxlbWVudHMgZnJvbSB0aGUgZGVw
ZW5kZW50IGFycmF5CisgICAgQHB1YmxpYworICAqLworCisgIGZ1bmN0aW9uIHVuaXEoKSB7Cisg
ICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuKSwg
X2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHsKKyAgICAgIGFyZ3NbX2tleV0gPSBhcmd1
bWVudHNbX2tleV07CisgICAgfQorCisgICAgcmV0dXJuIG11bHRpQXJyYXlNYWNybyhhcmdzLCBm
dW5jdGlvbiAoZGVwZW5kZW50S2V5cykgeworICAgICAgdmFyIF90aGlzMiA9IHRoaXM7CisKKyAg
ICAgIHZhciB1bmlxID0gX2VtYmVyUnVudGltZVN5c3RlbU5hdGl2ZV9hcnJheS5BKCk7CisKKyAg
ICAgIGRlcGVuZGVudEtleXMuZm9yRWFjaChmdW5jdGlvbiAoZGVwZW5kZW50S2V5KSB7CisgICAg
ICAgIHZhciB2YWx1ZSA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldChfdGhpczIsIGRlcGVu
ZGVudEtleSk7CisgICAgICAgIGlmIChfZW1iZXJSdW50aW1lVXRpbHMuaXNBcnJheSh2YWx1ZSkp
IHsKKyAgICAgICAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7CisgICAgICAgICAg
ICBpZiAodW5pcS5pbmRleE9mKGl0ZW0pID09PSAtMSkgeworICAgICAgICAgICAgICB1bmlxLnB1
c2goaXRlbSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAg
IH0pOworCisgICAgICByZXR1cm4gdW5pcTsKKyAgICB9KTsKKyAgfQorCisgIC8qKgorICAgIEEg
Y29tcHV0ZWQgcHJvcGVydHkgd2hpY2ggcmV0dXJucyBhIG5ldyBhcnJheSB3aXRoIGFsbCB0aGUg
dW5pcXVlCisgICAgZWxlbWVudHMgZnJvbSBhbiBhcnJheSwgd2l0aCB1bmlxdWVuZXNzIGRldGVy
bWluZWQgYnkgc3BlY2lmaWMga2V5LgorICAgIEV4YW1wbGUKKyAgICBgYGBqYXZhc2NyaXB0Cisg
ICAgdmFyIEhhbXN0ZXIgPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKKyAgICAgIHVuaXF1ZUZydWl0
czogRW1iZXIuY29tcHV0ZWQudW5pcUJ5KCdmcnVpdHMnLCAnaWQnKQorICAgIH0pOworICAgIHZh
ciBoYW1zdGVyID0gSGFtc3Rlci5jcmVhdGUoeworICAgICAgZnJ1aXRzOiBbCisgICAgICAgIHsg
aWQ6IDEsICdiYW5hbmEnIH0sCisgICAgICAgIHsgaWQ6IDIsICdncmFwZScgfSwKKyAgICAgICAg
eyBpZDogMywgJ3BlYWNoJyB9LAorICAgICAgICB7IGlkOiAxLCAnYmFuYW5hJyB9CisgICAgICBd
CisgICAgfSk7CisgICAgaGFtc3Rlci5nZXQoJ3VuaXF1ZUZydWl0cycpOyAvLyBbIHsgaWQ6IDEs
ICdiYW5hbmEnIH0sIHsgaWQ6IDIsICdncmFwZScgfSwgeyBpZDogMywgJ3BlYWNoJyB9XQorICAg
IGBgYAorICAgIEBtZXRob2QgdW5pcUJ5CisgICAgQGZvciBFbWJlci5jb21wdXRlZAorICAgIEBw
YXJhbSB7U3RyaW5nfSBkZXBlbmRlbnRLZXkKKyAgICBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlL
ZXkKKyAgICBAcmV0dXJuIHtFbWJlci5Db21wdXRlZFByb3BlcnR5fSBjb21wdXRlcyBhIG5ldyBh
cnJheSB3aXRoIGFsbCB0aGUKKyAgICB1bmlxdWUgZWxlbWVudHMgZnJvbSB0aGUgZGVwZW5kZW50
IGFycmF5CisgICAgQHB1YmxpYworICAqLworCisgIGZ1bmN0aW9uIHVuaXFCeShkZXBlbmRlbnRL
ZXksIHByb3BlcnR5S2V5KSB7CisgICAgcmV0dXJuIF9lbWJlck1ldGFsQ29tcHV0ZWQuY29tcHV0
ZWQoZGVwZW5kZW50S2V5ICsgJy5bXScsIGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciB1bmlxID0g
X2VtYmVyUnVudGltZVN5c3RlbU5hdGl2ZV9hcnJheS5BKCk7CisgICAgICB2YXIgc2VlbiA9IG5l
dyBfZW1iZXJNZXRhbEVtcHR5X29iamVjdC5kZWZhdWx0KCk7CisgICAgICB2YXIgbGlzdCA9IF9l
bWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCBkZXBlbmRlbnRLZXkpOworICAgICAgaWYg
KF9lbWJlclJ1bnRpbWVVdGlscy5pc0FycmF5KGxpc3QpKSB7CisgICAgICAgIGxpc3QuZm9yRWFj
aChmdW5jdGlvbiAoaXRlbSkgeworICAgICAgICAgIHZhciBndWlkID0gX2VtYmVyTWV0YWxVdGls
cy5ndWlkRm9yKF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldChpdGVtLCBwcm9wZXJ0eUtleSkp
OworICAgICAgICAgIGlmICghKGd1aWQgaW4gc2VlbikpIHsKKyAgICAgICAgICAgIHNlZW5bZ3Vp
ZF0gPSB0cnVlOworICAgICAgICAgICAgdW5pcS5wdXNoKGl0ZW0pOworICAgICAgICAgIH0KKyAg
ICAgICAgfSk7CisgICAgICB9CisgICAgICByZXR1cm4gdW5pcTsKKyAgICB9KS5yZWFkT25seSgp
OworICB9CisKKyAgLyoqCisgICAgQWxpYXMgZm9yIFtFbWJlci5jb21wdXRlZC51bmlxXSgvYXBp
LyNtZXRob2RfY29tcHV0ZWRfdW5pcSkuCisgIAorICAgIEBtZXRob2QgdW5pb24KKyAgICBAZm9y
IEVtYmVyLmNvbXB1dGVkCisgICAgQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5S2V5KgorICAgIEBy
ZXR1cm4ge0VtYmVyLkNvbXB1dGVkUHJvcGVydHl9IGNvbXB1dGVzIGEgbmV3IGFycmF5IHdpdGgg
YWxsIHRoZQorICAgIHVuaXF1ZSBlbGVtZW50cyBmcm9tIHRoZSBkZXBlbmRlbnQgYXJyYXkKKyAg
ICBAcHVibGljCisgICovCisgIHZhciB1bmlvbiA9IHVuaXE7CisKKyAgZXhwb3J0cy51bmlvbiA9
IHVuaW9uOworICAvKioKKyAgICBBIGNvbXB1dGVkIHByb3BlcnR5IHdoaWNoIHJldHVybnMgYSBu
ZXcgYXJyYXkgd2l0aCBhbGwgdGhlIGR1cGxpY2F0ZWQKKyAgICBlbGVtZW50cyBmcm9tIHR3byBv
ciBtb3JlIGRlcGVuZGVudCBhcnJheXMuCisgIAorICAgIEV4YW1wbGUKKyAgCisgICAgYGBgamF2
YXNjcmlwdAorICAgIHZhciBvYmogPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKKyAgICAgIGZyaWVu
ZHNJbkNvbW1vbjogRW1iZXIuY29tcHV0ZWQuaW50ZXJzZWN0KCdhZGFGcmllbmRzJywgJ2NoYXJs
ZXNGcmllbmRzJykKKyAgICB9KS5jcmVhdGUoeworICAgICAgYWRhRnJpZW5kczogWydDaGFybGVz
IEJhYmJhZ2UnLCAnSm9obiBIb2Job3VzZScsICdXaWxsaWFtIEtpbmcnLCAnTWFyeSBTb21lcnZp
bGxlJ10sCisgICAgICBjaGFybGVzRnJpZW5kczogWydXaWxsaWFtIEtpbmcnLCAnTWFyeSBTb21l
cnZpbGxlJywgJ0FkYSBMb3ZlbGFjZScsICdHZW9yZ2UgUGVhY29jayddCisgICAgfSk7CisgIAor
ICAgIG9iai5nZXQoJ2ZyaWVuZHNJbkNvbW1vbicpOyAvLyBbJ1dpbGxpYW0gS2luZycsICdNYXJ5
IFNvbWVydmlsbGUnXQorICAgIGBgYAorICAKKyAgICBAbWV0aG9kIGludGVyc2VjdAorICAgIEBm
b3IgRW1iZXIuY29tcHV0ZWQKKyAgICBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlLZXkqCisgICAg
QHJldHVybiB7RW1iZXIuQ29tcHV0ZWRQcm9wZXJ0eX0gY29tcHV0ZXMgYSBuZXcgYXJyYXkgd2l0
aCBhbGwgdGhlCisgICAgZHVwbGljYXRlZCBlbGVtZW50cyBmcm9tIHRoZSBkZXBlbmRlbnQgYXJy
YXlzCisgICAgQHB1YmxpYworICAqLworCisgIGZ1bmN0aW9uIGludGVyc2VjdCgpIHsKKyAgICBm
b3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuMiksIF9r
ZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykgeworICAgICAgYXJnc1tfa2V5Ml0gPSBh
cmd1bWVudHNbX2tleTJdOworICAgIH0KKworICAgIHJldHVybiBtdWx0aUFycmF5TWFjcm8oYXJn
cywgZnVuY3Rpb24gKGRlcGVuZGVudEtleXMpIHsKKyAgICAgIHZhciBfdGhpczMgPSB0aGlzOwor
CisgICAgICB2YXIgYXJyYXlzID0gZGVwZW5kZW50S2V5cy5tYXAoZnVuY3Rpb24gKGRlcGVuZGVu
dEtleSkgeworICAgICAgICB2YXIgYXJyYXkgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQo
X3RoaXMzLCBkZXBlbmRlbnRLZXkpOworCisgICAgICAgIHJldHVybiBfZW1iZXJSdW50aW1lVXRp
bHMuaXNBcnJheShhcnJheSkgPyBhcnJheSA6IFtdOworICAgICAgfSk7CisKKyAgICAgIHZhciBy
ZXN1bHRzID0gYXJyYXlzLnBvcCgpLmZpbHRlcihmdW5jdGlvbiAoY2FuZGlkYXRlKSB7CisgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAg
dmFyIGZvdW5kID0gZmFsc2U7CisgICAgICAgICAgdmFyIGFycmF5ID0gYXJyYXlzW2ldOworICAg
ICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYXJyYXkubGVuZ3RoOyBqKyspIHsKKyAgICAgICAg
ICAgIGlmIChhcnJheVtqXSA9PT0gY2FuZGlkYXRlKSB7CisgICAgICAgICAgICAgIGZvdW5kID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQor
CisgICAgICAgICAgaWYgKGZvdW5kID09PSBmYWxzZSkgeworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgfSk7CisKKyAgICAgIHJldHVybiBfZW1iZXJSdW50aW1lU3lzdGVtTmF0aXZlX2FycmF5LkEo
cmVzdWx0cyk7CisgICAgfSk7CisgIH0KKworICAvKioKKyAgICBBIGNvbXB1dGVkIHByb3BlcnR5
IHdoaWNoIHJldHVybnMgYSBuZXcgYXJyYXkgd2l0aCBhbGwgdGhlCisgICAgcHJvcGVydGllcyBm
cm9tIHRoZSBmaXJzdCBkZXBlbmRlbnQgYXJyYXkgdGhhdCBhcmUgbm90IGluIHRoZSBzZWNvbmQK
KyAgICBkZXBlbmRlbnQgYXJyYXkuCisgIAorICAgIEV4YW1wbGUKKyAgCisgICAgYGBgamF2YXNj
cmlwdAorICAgIHZhciBIYW1zdGVyID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7CisgICAgICBsaWtl
czogWydiYW5hbmEnLCAnZ3JhcGUnLCAna2FsZSddLAorICAgICAgd2FudHM6IEVtYmVyLmNvbXB1
dGVkLnNldERpZmYoJ2xpa2VzJywgJ2ZydWl0cycpCisgICAgfSk7CisgIAorICAgIHZhciBoYW1z
dGVyID0gSGFtc3Rlci5jcmVhdGUoeworICAgICAgZnJ1aXRzOiBbCisgICAgICAgICdncmFwZScs
CisgICAgICAgICdrYWxlJywKKyAgICAgIF0KKyAgICB9KTsKKyAgCisgICAgaGFtc3Rlci5nZXQo
J3dhbnRzJyk7IC8vIFsnYmFuYW5hJ10KKyAgICBgYGAKKyAgCisgICAgQG1ldGhvZCBzZXREaWZm
CisgICAgQGZvciBFbWJlci5jb21wdXRlZAorICAgIEBwYXJhbSB7U3RyaW5nfSBzZXRBUHJvcGVy
dHkKKyAgICBAcGFyYW0ge1N0cmluZ30gc2V0QlByb3BlcnR5CisgICAgQHJldHVybiB7RW1iZXIu
Q29tcHV0ZWRQcm9wZXJ0eX0gY29tcHV0ZXMgYSBuZXcgYXJyYXkgd2l0aCBhbGwgdGhlCisgICAg
aXRlbXMgZnJvbSB0aGUgZmlyc3QgZGVwZW5kZW50IGFycmF5IHRoYXQgYXJlIG5vdCBpbiB0aGUg
c2Vjb25kCisgICAgZGVwZW5kZW50IGFycmF5CisgICAgQHB1YmxpYworICAqLworCisgIGZ1bmN0
aW9uIHNldERpZmYoc2V0QVByb3BlcnR5LCBzZXRCUHJvcGVydHkpIHsKKyAgICBpZiAoYXJndW1l
bnRzLmxlbmd0aCAhPT0gMikgeworICAgICAgdGhyb3cgbmV3IF9lbWJlck1ldGFsRXJyb3IuZGVm
YXVsdCgnc2V0RGlmZiByZXF1aXJlcyBleGFjdGx5IHR3byBkZXBlbmRlbnQgYXJyYXlzLicpOwor
ICAgIH0KKworICAgIHJldHVybiBfZW1iZXJNZXRhbENvbXB1dGVkLmNvbXB1dGVkKHNldEFQcm9w
ZXJ0eSArICcuW10nLCBzZXRCUHJvcGVydHkgKyAnLltdJywgZnVuY3Rpb24gKCkgeworICAgICAg
dmFyIHNldEEgPSB0aGlzLmdldChzZXRBUHJvcGVydHkpOworICAgICAgdmFyIHNldEIgPSB0aGlz
LmdldChzZXRCUHJvcGVydHkpOworCisgICAgICBpZiAoIV9lbWJlclJ1bnRpbWVVdGlscy5pc0Fy
cmF5KHNldEEpKSB7CisgICAgICAgIHJldHVybiBfZW1iZXJSdW50aW1lU3lzdGVtTmF0aXZlX2Fy
cmF5LkEoKTsKKyAgICAgIH0KKyAgICAgIGlmICghX2VtYmVyUnVudGltZVV0aWxzLmlzQXJyYXko
c2V0QikpIHsKKyAgICAgICAgcmV0dXJuIF9lbWJlclJ1bnRpbWVTeXN0ZW1OYXRpdmVfYXJyYXku
QShzZXRBKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHNldEEuZmlsdGVyKGZ1bmN0aW9uICh4
KSB7CisgICAgICAgIHJldHVybiBzZXRCLmluZGV4T2YoeCkgPT09IC0xOworICAgICAgfSk7Cisg
ICAgfSkucmVhZE9ubHkoKTsKKyAgfQorCisgIC8qKgorICAgIEEgY29tcHV0ZWQgcHJvcGVydHkg
dGhhdCByZXR1cm5zIHRoZSBhcnJheSBvZiB2YWx1ZXMKKyAgICBmb3IgdGhlIHByb3ZpZGVkIGRl
cGVuZGVudCBwcm9wZXJ0aWVzLgorICAKKyAgICBFeGFtcGxlCisgIAorICAgIGBgYGphdmFzY3Jp
cHQKKyAgICB2YXIgSGFtc3RlciA9IEVtYmVyLk9iamVjdC5leHRlbmQoeworICAgICAgY2xvdGhl
czogRW1iZXIuY29tcHV0ZWQuY29sbGVjdCgnaGF0JywgJ3NoaXJ0JykKKyAgICB9KTsKKyAgCisg
ICAgdmFyIGhhbXN0ZXIgPSBIYW1zdGVyLmNyZWF0ZSgpOworICAKKyAgICBoYW1zdGVyLmdldCgn
Y2xvdGhlcycpOyAvLyBbbnVsbCwgbnVsbF0KKyAgICBoYW1zdGVyLnNldCgnaGF0JywgJ0NhbXAg
SGF0Jyk7CisgICAgaGFtc3Rlci5zZXQoJ3NoaXJ0JywgJ0NhbXAgU2hpcnQnKTsKKyAgICBoYW1z
dGVyLmdldCgnY2xvdGhlcycpOyAvLyBbJ0NhbXAgSGF0JywgJ0NhbXAgU2hpcnQnXQorICAgIGBg
YAorICAKKyAgICBAbWV0aG9kIGNvbGxlY3QKKyAgICBAZm9yIEVtYmVyLmNvbXB1dGVkCisgICAg
QHBhcmFtIHtTdHJpbmd9IGRlcGVuZGVudEtleSoKKyAgICBAcmV0dXJuIHtFbWJlci5Db21wdXRl
ZFByb3BlcnR5fSBjb21wdXRlZCBwcm9wZXJ0eSB3aGljaCBtYXBzCisgICAgdmFsdWVzIG9mIGFs
bCBwYXNzZWQgaW4gcHJvcGVydGllcyB0byBhbiBhcnJheS4KKyAgICBAcHVibGljCisgICovCisK
KyAgZnVuY3Rpb24gY29sbGVjdCgpIHsKKyAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5s
ZW5ndGgsIGRlcGVuZGVudEtleXMgPSBBcnJheShfbGVuMyksIF9rZXkzID0gMDsgX2tleTMgPCBf
bGVuMzsgX2tleTMrKykgeworICAgICAgZGVwZW5kZW50S2V5c1tfa2V5M10gPSBhcmd1bWVudHNb
X2tleTNdOworICAgIH0KKworICAgIHJldHVybiBtdWx0aUFycmF5TWFjcm8oZGVwZW5kZW50S2V5
cywgZnVuY3Rpb24gKCkgeworICAgICAgdmFyIHByb3BlcnRpZXMgPSBfZW1iZXJNZXRhbEdldF9w
cm9wZXJ0aWVzLmRlZmF1bHQodGhpcywgZGVwZW5kZW50S2V5cyk7CisgICAgICB2YXIgcmVzID0g
X2VtYmVyUnVudGltZVN5c3RlbU5hdGl2ZV9hcnJheS5BKCk7CisgICAgICBmb3IgKHZhciBrZXkg
aW4gcHJvcGVydGllcykgeworICAgICAgICBpZiAocHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShr
ZXkpKSB7CisgICAgICAgICAgaWYgKF9lbWJlck1ldGFsSXNfbm9uZS5kZWZhdWx0KHByb3BlcnRp
ZXNba2V5XSkpIHsKKyAgICAgICAgICAgIHJlcy5wdXNoKG51bGwpOworICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICByZXMucHVzaChwcm9wZXJ0aWVzW2tleV0pOworICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgfQorICAgICAgcmV0dXJuIHJlczsKKyAgICB9KTsKKyAgfQorCisg
IC8qKgorICAgIEEgY29tcHV0ZWQgcHJvcGVydHkgd2hpY2ggcmV0dXJucyBhIG5ldyBhcnJheSB3
aXRoIGFsbCB0aGUKKyAgICBwcm9wZXJ0aWVzIGZyb20gdGhlIGZpcnN0IGRlcGVuZGVudCBhcnJh
eSBzb3J0ZWQgYmFzZWQgb24gYSBwcm9wZXJ0eQorICAgIG9yIHNvcnQgZnVuY3Rpb24uCisgIAor
ICAgIFRoZSBjYWxsYmFjayBtZXRob2QgeW91IHByb3ZpZGUgc2hvdWxkIGhhdmUgdGhlIGZvbGxv
d2luZyBzaWduYXR1cmU6CisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAgICBmdW5jdGlvbihpdGVt
QSwgaXRlbUIpOworICAgIGBgYAorICAKKyAgICAtIGBpdGVtQWAgdGhlIGZpcnN0IGl0ZW0gdG8g
Y29tcGFyZS4KKyAgICAtIGBpdGVtQmAgdGhlIHNlY29uZCBpdGVtIHRvIGNvbXBhcmUuCisgIAor
ICAgIFRoaXMgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBuZWdhdGl2ZSBudW1iZXIgKGUuZy4gYC0x
YCkgd2hlbiBgaXRlbUFgIHNob3VsZCBjb21lIGJlZm9yZQorICAgIGBpdGVtQmAuIEl0IHNob3Vs
ZCByZXR1cm4gcG9zaXRpdmUgbnVtYmVyIChlLmcuIGAxYCkgd2hlbiBgaXRlbUFgIHNob3VsZCBj
b21lIGFmdGVyCisgICAgYGl0ZW1CYC4gSWYgdGhlIGBpdGVtQWAgYW5kIGBpdGVtQmAgYXJlIGVx
dWFsIHRoaXMgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBgMGAuCisgIAorICAgIFRoZXJlZm9yZSwg
aWYgdGhpcyBmdW5jdGlvbiBpcyBjb21wYXJpbmcgc29tZSBudW1lcmljIHZhbHVlcywgc2ltcGxl
IGBpdGVtQSAtIGl0ZW1CYCBvcgorICAgIGBpdGVtQS5nZXQoICdmb28nICkgLSBpdGVtQi5nZXQo
ICdmb28nIClgIGNhbiBiZSB1c2VkIGluc3RlYWQgb2Ygc2VyaWVzIG9mIGBpZmAuCisgIAorICAg
IEV4YW1wbGUKKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIHZhciBUb0RvTGlzdCA9IEVtYmVy
Lk9iamVjdC5leHRlbmQoeworICAgICAgLy8gdXNpbmcgc3RhbmRhcmQgYXNjZW5kaW5nIHNvcnQK
KyAgICAgIHRvZG9zU29ydGluZzogWyduYW1lJ10sCisgICAgICBzb3J0ZWRUb2RvczogRW1iZXIu
Y29tcHV0ZWQuc29ydCgndG9kb3MnLCAndG9kb3NTb3J0aW5nJyksCisgIAorICAgICAgLy8gdXNp
bmcgZGVzY2VuZGluZyBzb3J0CisgICAgICB0b2Rvc1NvcnRpbmdEZXNjOiBbJ25hbWU6ZGVzYydd
LAorICAgICAgc29ydGVkVG9kb3NEZXNjOiBFbWJlci5jb21wdXRlZC5zb3J0KCd0b2RvcycsICd0
b2Rvc1NvcnRpbmdEZXNjJyksCisgIAorICAgICAgLy8gdXNpbmcgYSBjdXN0b20gc29ydCBmdW5j
dGlvbgorICAgICAgcHJpb3JpdHlUb2RvczogRW1iZXIuY29tcHV0ZWQuc29ydCgndG9kb3MnLCBm
dW5jdGlvbihhLCBiKXsKKyAgICAgICAgaWYgKGEucHJpb3JpdHkgPiBiLnByaW9yaXR5KSB7Cisg
ICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0gZWxzZSBpZiAoYS5wcmlvcml0eSA8IGIucHJp
b3JpdHkpIHsKKyAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgCisgICAgICAgIHJl
dHVybiAwOworICAgICAgfSkKKyAgICB9KTsKKyAgCisgICAgdmFyIHRvZG9MaXN0ID0gVG9Eb0xp
c3QuY3JlYXRlKHt0b2RvczogWworICAgICAgeyBuYW1lOiAnVW5pdCBUZXN0JywgcHJpb3JpdHk6
IDIgfSwKKyAgICAgIHsgbmFtZTogJ0RvY3VtZW50YXRpb24nLCBwcmlvcml0eTogMyB9LAorICAg
ICAgeyBuYW1lOiAnUmVsZWFzZScsIHByaW9yaXR5OiAxIH0KKyAgICBdfSk7CisgIAorICAgIHRv
ZG9MaXN0LmdldCgnc29ydGVkVG9kb3MnKTsgICAgICAvLyBbeyBuYW1lOidEb2N1bWVudGF0aW9u
JywgcHJpb3JpdHk6MyB9LCB7IG5hbWU6J1JlbGVhc2UnLCBwcmlvcml0eToxIH0sIHsgbmFtZTon
VW5pdCBUZXN0JywgcHJpb3JpdHk6MiB9XQorICAgIHRvZG9MaXN0LmdldCgnc29ydGVkVG9kb3NE
ZXNjJyk7ICAvLyBbeyBuYW1lOidVbml0IFRlc3QnLCBwcmlvcml0eToyIH0sIHsgbmFtZTonUmVs
ZWFzZScsIHByaW9yaXR5OjEgfSwgeyBuYW1lOidEb2N1bWVudGF0aW9uJywgcHJpb3JpdHk6MyB9
XQorICAgIHRvZG9MaXN0LmdldCgncHJpb3JpdHlUb2RvcycpOyAgICAvLyBbeyBuYW1lOidSZWxl
YXNlJywgcHJpb3JpdHk6MSB9LCB7IG5hbWU6J1VuaXQgVGVzdCcsIHByaW9yaXR5OjIgfSwgeyBu
YW1lOidEb2N1bWVudGF0aW9uJywgcHJpb3JpdHk6MyB9XQorICAgIGBgYAorICAKKyAgICBAbWV0
aG9kIHNvcnQKKyAgICBAZm9yIEVtYmVyLmNvbXB1dGVkCisgICAgQHBhcmFtIHtTdHJpbmd9IGl0
ZW1zS2V5CisgICAgQHBhcmFtIHtTdHJpbmcgb3IgRnVuY3Rpb259IHNvcnREZWZpbml0aW9uIGEg
ZGVwZW5kZW50IGtleSB0byBhbgorICAgIGFycmF5IG9mIHNvcnQgcHJvcGVydGllcyAoYWRkIGA6
ZGVzY2AgdG8gdGhlIGFycmF5cyBzb3J0IHByb3BlcnRpZXMgdG8gc29ydCBkZXNjZW5kaW5nKSBv
ciBhIGZ1bmN0aW9uIHRvIHVzZSB3aGVuIHNvcnRpbmcKKyAgICBAcmV0dXJuIHtFbWJlci5Db21w
dXRlZFByb3BlcnR5fSBjb21wdXRlcyBhIG5ldyBzb3J0ZWQgYXJyYXkgYmFzZWQKKyAgICBvbiB0
aGUgc29ydCBwcm9wZXJ0eSBhcnJheSBvciBjYWxsYmFjayBmdW5jdGlvbgorICAgIEBwdWJsaWMK
KyAgKi8KKworICBmdW5jdGlvbiBzb3J0KGl0ZW1zS2V5LCBzb3J0RGVmaW5pdGlvbikgeworICAg
IF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdFbWJlci5jb21wdXRlZC5zb3J0IHJlcXVpcmVzIHR3
byBhcmd1bWVudHM6IGFuIGFycmF5IGtleSB0byBzb3J0IGFuZCAnICsgJ2VpdGhlciBhIHNvcnQg
cHJvcGVydGllcyBrZXkgb3Igc29ydCBmdW5jdGlvbicsIGFyZ3VtZW50cy5sZW5ndGggPT09IDIp
OworCisgICAgaWYgKHR5cGVvZiBzb3J0RGVmaW5pdGlvbiA9PT0gJ2Z1bmN0aW9uJykgeworICAg
ICAgcmV0dXJuIGN1c3RvbVNvcnQoaXRlbXNLZXksIHNvcnREZWZpbml0aW9uKTsKKyAgICB9IGVs
c2UgeworICAgICAgcmV0dXJuIHByb3BlcnR5U29ydChpdGVtc0tleSwgc29ydERlZmluaXRpb24p
OworICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIGN1c3RvbVNvcnQoaXRlbXNLZXksIGNvbXBhcmF0
b3IpIHsKKyAgICByZXR1cm4gYXJyYXlNYWNybyhpdGVtc0tleSwgZnVuY3Rpb24gKHZhbHVlKSB7
CisgICAgICB2YXIgX3RoaXM0ID0gdGhpczsKKworICAgICAgcmV0dXJuIHZhbHVlLnNsaWNlKCku
c29ydChmdW5jdGlvbiAoeCwgeSkgeworICAgICAgICByZXR1cm4gY29tcGFyYXRvci5jYWxsKF90
aGlzNCwgeCwgeSk7CisgICAgICB9KTsKKyAgICB9KTsKKyAgfQorCisgIC8vIFRoaXMgb25lIG5l
ZWRzIHRvIGR5bmFtaWNhbGx5IHNldCB1cCBhbmQgdGVhciBkb3duIG9ic2VydmVycyBvbiB0aGUg
aXRlbXNLZXkKKyAgLy8gZGVwZW5kaW5nIG9uIHRoZSBzb3J0UHJvcGVydGllcworICBmdW5jdGlv
biBwcm9wZXJ0eVNvcnQoaXRlbXNLZXksIHNvcnRQcm9wZXJ0aWVzS2V5KSB7CisgICAgdmFyIGNw
ID0gbmV3IF9lbWJlck1ldGFsQ29tcHV0ZWQuQ29tcHV0ZWRQcm9wZXJ0eShmdW5jdGlvbiAoa2V5
KSB7CisgICAgICB2YXIgX3RoaXM1ID0gdGhpczsKKworICAgICAgdmFyIGl0ZW1zS2V5SXNBdFRo
aXMgPSBpdGVtc0tleSA9PT0gJ0B0aGlzJzsKKyAgICAgIHZhciBzb3J0UHJvcGVydGllcyA9IF9l
bWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCBzb3J0UHJvcGVydGllc0tleSk7CisKKyAg
ICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdUaGUgc29ydCBkZWZpbml0aW9uIGZvciBcJycg
KyBrZXkgKyAnXCcgb24gJyArIHRoaXMgKyAnIG11c3QgYmUgYSBmdW5jdGlvbiBvciBhbiBhcnJh
eSBvZiBzdHJpbmdzJywgX2VtYmVyUnVudGltZVV0aWxzLmlzQXJyYXkoc29ydFByb3BlcnRpZXMp
ICYmIHNvcnRQcm9wZXJ0aWVzLmV2ZXJ5KGZ1bmN0aW9uIChzKSB7CisgICAgICAgIHJldHVybiB0
eXBlb2YgcyA9PT0gJ3N0cmluZyc7CisgICAgICB9KSk7CisKKyAgICAgIHZhciBub3JtYWxpemVk
U29ydFByb3BlcnRpZXMgPSBub3JtYWxpemVTb3J0UHJvcGVydGllcyhzb3J0UHJvcGVydGllcyk7
CisKKyAgICAgIC8vIEFkZC9yZW1vdmUgcHJvcGVydHkgb2JzZXJ2ZXJzIGFzIHJlcXVpcmVkLgor
ICAgICAgdmFyIGFjdGl2ZU9ic2VydmVyc01hcCA9IGNwLl9hY3RpdmVPYnNlcnZlck1hcCB8fCAo
Y3AuX2FjdGl2ZU9ic2VydmVyTWFwID0gbmV3IF9lbWJlck1ldGFsV2Vha19tYXAuZGVmYXVsdCgp
KTsKKyAgICAgIHZhciBhY3RpdmVPYnNlcnZlcnMgPSBhY3RpdmVPYnNlcnZlcnNNYXAuZ2V0KHRo
aXMpOworCisgICAgICBpZiAoYWN0aXZlT2JzZXJ2ZXJzKSB7CisgICAgICAgIGFjdGl2ZU9ic2Vy
dmVycy5mb3JFYWNoKGZ1bmN0aW9uIChhcmdzKSB7CisgICAgICAgICAgX2VtYmVyTWV0YWxPYnNl
cnZlci5yZW1vdmVPYnNlcnZlci5hcHBseShudWxsLCBhcmdzKTsKKyAgICAgICAgfSk7CisgICAg
ICB9CisKKyAgICAgIGZ1bmN0aW9uIHNvcnRQcm9wZXJ0eURpZENoYW5nZSgpIHsKKyAgICAgICAg
dGhpcy5ub3RpZnlQcm9wZXJ0eUNoYW5nZShrZXkpOworICAgICAgfQorCisgICAgICBhY3RpdmVP
YnNlcnZlcnMgPSBub3JtYWxpemVkU29ydFByb3BlcnRpZXMubWFwKGZ1bmN0aW9uIChfcmVmKSB7
CisgICAgICAgIHZhciBwcm9wID0gX3JlZlswXTsKKworICAgICAgICB2YXIgcGF0aCA9IGl0ZW1z
S2V5SXNBdFRoaXMgPyAnQGVhY2guJyArIHByb3AgOiBpdGVtc0tleSArICcuQGVhY2guJyArIHBy
b3A7CisgICAgICAgIHZhciBhcmdzID0gW190aGlzNSwgcGF0aCwgc29ydFByb3BlcnR5RGlkQ2hh
bmdlXTsKKyAgICAgICAgX2VtYmVyTWV0YWxPYnNlcnZlci5hZGRPYnNlcnZlci5hcHBseShudWxs
LCBhcmdzKTsKKyAgICAgICAgcmV0dXJuIGFyZ3M7CisgICAgICB9KTsKKworICAgICAgYWN0aXZl
T2JzZXJ2ZXJzTWFwLnNldCh0aGlzLCBhY3RpdmVPYnNlcnZlcnMpOworCisgICAgICAvLyBTb3J0
IGFuZCByZXR1cm4gdGhlIGFycmF5LgorICAgICAgdmFyIGl0ZW1zID0gaXRlbXNLZXlJc0F0VGhp
cyA/IHRoaXMgOiBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgaXRlbXNLZXkpOwor
CisgICAgICBpZiAoX2VtYmVyUnVudGltZVV0aWxzLmlzQXJyYXkoaXRlbXMpKSB7CisgICAgICAg
IHJldHVybiBzb3J0QnlOb3JtYWxpemVkU29ydFByb3BlcnRpZXMoaXRlbXMsIG5vcm1hbGl6ZWRT
b3J0UHJvcGVydGllcyk7CisgICAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gX2VtYmVyUnVu
dGltZVN5c3RlbU5hdGl2ZV9hcnJheS5BKCk7CisgICAgICB9CisgICAgfSk7CisKKyAgICBjcC5f
YWN0aXZlT2JzZXJ2ZXJNYXAgPSB1bmRlZmluZWQ7CisKKyAgICByZXR1cm4gY3AucHJvcGVydHko
c29ydFByb3BlcnRpZXNLZXkgKyAnLltdJykucmVhZE9ubHkoKTsKKyAgfQorCisgIGZ1bmN0aW9u
IG5vcm1hbGl6ZVNvcnRQcm9wZXJ0aWVzKHNvcnRQcm9wZXJ0aWVzKSB7CisgICAgcmV0dXJuIHNv
cnRQcm9wZXJ0aWVzLm1hcChmdW5jdGlvbiAocCkgeworICAgICAgdmFyIF9wJHNwbGl0ID0gcC5z
cGxpdCgnOicpOworCisgICAgICB2YXIgcHJvcCA9IF9wJHNwbGl0WzBdOworICAgICAgdmFyIGRp
cmVjdGlvbiA9IF9wJHNwbGl0WzFdOworCisgICAgICBkaXJlY3Rpb24gPSBkaXJlY3Rpb24gfHwg
J2FzYyc7CisKKyAgICAgIHJldHVybiBbcHJvcCwgZGlyZWN0aW9uXTsKKyAgICB9KTsKKyAgfQor
CisgIGZ1bmN0aW9uIHNvcnRCeU5vcm1hbGl6ZWRTb3J0UHJvcGVydGllcyhpdGVtcywgbm9ybWFs
aXplZFNvcnRQcm9wZXJ0aWVzKSB7CisgICAgcmV0dXJuIF9lbWJlclJ1bnRpbWVTeXN0ZW1OYXRp
dmVfYXJyYXkuQShpdGVtcy5zbGljZSgpLnNvcnQoZnVuY3Rpb24gKGl0ZW1BLCBpdGVtQikgewor
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub3JtYWxpemVkU29ydFByb3BlcnRpZXMubGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgdmFyIF9ub3JtYWxpemVkU29ydFByb3BlcnRpZXMkaSA9IG5vcm1h
bGl6ZWRTb3J0UHJvcGVydGllc1tpXTsKKyAgICAgICAgdmFyIHByb3AgPSBfbm9ybWFsaXplZFNv
cnRQcm9wZXJ0aWVzJGlbMF07CisgICAgICAgIHZhciBkaXJlY3Rpb24gPSBfbm9ybWFsaXplZFNv
cnRQcm9wZXJ0aWVzJGlbMV07CisKKyAgICAgICAgdmFyIHJlc3VsdCA9IF9lbWJlclJ1bnRpbWVD
b21wYXJlLmRlZmF1bHQoX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KGl0ZW1BLCBwcm9wKSwg
X2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KGl0ZW1CLCBwcm9wKSk7CisgICAgICAgIGlmIChy
ZXN1bHQgIT09IDApIHsKKyAgICAgICAgICByZXR1cm4gZGlyZWN0aW9uID09PSAnZGVzYycgPyAt
MSAqIHJlc3VsdCA6IHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICByZXR1cm4g
MDsKKyAgICB9KSk7CisgIH0KK30pOworZW5pZmVkKCdlbWJlci1ydW50aW1lL2NvbnRyb2xsZXJz
L2NvbnRyb2xsZXInLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvZGVidWcnLCAnZW1iZXItcnVu
dGltZS9zeXN0ZW0vb2JqZWN0JywgJ2VtYmVyLXJ1bnRpbWUvbWl4aW5zL2NvbnRyb2xsZXInLCAn
ZW1iZXItcnVudGltZS9pbmplY3QnLCAnZW1iZXItcnVudGltZS9taXhpbnMvYWN0aW9uX2hhbmRs
ZXInXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsRGVidWcsIF9lbWJlclJ1bnRpbWVT
eXN0ZW1PYmplY3QsIF9lbWJlclJ1bnRpbWVNaXhpbnNDb250cm9sbGVyLCBfZW1iZXJSdW50aW1l
SW5qZWN0LCBfZW1iZXJSdW50aW1lTWl4aW5zQWN0aW9uX2hhbmRsZXIpIHsKKyAgJ3VzZSBzdHJp
Y3QnOworCisgIC8qKgorICBAbW9kdWxlIGVtYmVyCisgIEBzdWJtb2R1bGUgZW1iZXItcnVudGlt
ZQorICAqLworCisgIC8qKgorICAgIEBjbGFzcyBDb250cm9sbGVyCisgICAgQG5hbWVzcGFjZSBF
bWJlcgorICAgIEBleHRlbmRzIEVtYmVyLk9iamVjdAorICAgIEB1c2VzIEVtYmVyLkNvbnRyb2xs
ZXJNaXhpbgorICAgIEBwdWJsaWMKKyAgKi8KKyAgdmFyIENvbnRyb2xsZXIgPSBfZW1iZXJSdW50
aW1lU3lzdGVtT2JqZWN0LmRlZmF1bHQuZXh0ZW5kKF9lbWJlclJ1bnRpbWVNaXhpbnNDb250cm9s
bGVyLmRlZmF1bHQpOworCisgIF9lbWJlclJ1bnRpbWVNaXhpbnNBY3Rpb25faGFuZGxlci5kZXBy
ZWNhdGVVbmRlcnNjb3JlQWN0aW9ucyhDb250cm9sbGVyKTsKKworICBmdW5jdGlvbiBjb250cm9s
bGVySW5qZWN0aW9uSGVscGVyKGZhY3RvcnkpIHsKKyAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2Vy
dCgnRGVmaW5pbmcgYW4gaW5qZWN0ZWQgY29udHJvbGxlciBwcm9wZXJ0eSBvbiBhICcgKyAnbm9u
LWNvbnRyb2xsZXIgaXMgbm90IGFsbG93ZWQuJywgX2VtYmVyUnVudGltZU1peGluc0NvbnRyb2xs
ZXIuZGVmYXVsdC5kZXRlY3QoZmFjdG9yeS5Qcm90b3R5cGVNaXhpbikpOworICB9CisKKyAgLyoq
CisgICAgQ3JlYXRlcyBhIHByb3BlcnR5IHRoYXQgbGF6aWx5IGxvb2tzIHVwIGFub3RoZXIgY29u
dHJvbGxlciBpbiB0aGUgY29udGFpbmVyLgorICAgIENhbiBvbmx5IGJlIHVzZWQgd2hlbiBkZWZp
bmluZyBhbm90aGVyIGNvbnRyb2xsZXIuCisgIAorICAgIEV4YW1wbGU6CisgIAorICAgIGBgYGph
dmFzY3JpcHQKKyAgICBBcHAuUG9zdENvbnRyb2xsZXIgPSBFbWJlci5Db250cm9sbGVyLmV4dGVu
ZCh7CisgICAgICBwb3N0czogRW1iZXIuaW5qZWN0LmNvbnRyb2xsZXIoKQorICAgIH0pOworICAg
IGBgYAorICAKKyAgICBUaGlzIGV4YW1wbGUgd2lsbCBjcmVhdGUgYSBgcG9zdHNgIHByb3BlcnR5
IG9uIHRoZSBgcG9zdGAgY29udHJvbGxlciB0aGF0CisgICAgbG9va3MgdXAgdGhlIGBwb3N0c2Ag
Y29udHJvbGxlciBpbiB0aGUgY29udGFpbmVyLCBtYWtpbmcgaXQgZWFzeSB0bworICAgIHJlZmVy
ZW5jZSBvdGhlciBjb250cm9sbGVycy4gVGhpcyBpcyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB0
bzoKKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIEFwcC5Qb3N0Q29udHJvbGxlciA9IEVtYmVy
LkNvbnRyb2xsZXIuZXh0ZW5kKHsKKyAgICAgIG5lZWRzOiAncG9zdHMnLAorICAgICAgcG9zdHM6
IEVtYmVyLmNvbXB1dGVkLmFsaWFzKCdjb250cm9sbGVycy5wb3N0cycpCisgICAgfSk7CisgICAg
YGBgCisgIAorICAgIEBtZXRob2QgY29udHJvbGxlcgorICAgIEBzaW5jZSAxLjEwLjAKKyAgICBA
Zm9yIEVtYmVyLmluamVjdAorICAgIEBwYXJhbSB7U3RyaW5nfSBuYW1lIChvcHRpb25hbCkgbmFt
ZSBvZiB0aGUgY29udHJvbGxlciB0byBpbmplY3QsIGRlZmF1bHRzCisgICAgICAgICAgIHRvIHRo
ZSBwcm9wZXJ0eSdzIG5hbWUKKyAgICBAcmV0dXJuIHtFbWJlci5JbmplY3RlZFByb3BlcnR5fSBp
bmplY3Rpb24gZGVzY3JpcHRvciBpbnN0YW5jZQorICAgIEBwdWJsaWMKKyAgKi8KKyAgX2VtYmVy
UnVudGltZUluamVjdC5jcmVhdGVJbmplY3Rpb25IZWxwZXIoJ2NvbnRyb2xsZXInLCBjb250cm9s
bGVySW5qZWN0aW9uSGVscGVyKTsKKworICBleHBvcnRzLmRlZmF1bHQgPSBDb250cm9sbGVyOwor
fSk7CitlbmlmZWQoJ2VtYmVyLXJ1bnRpbWUvY29weScsIFsnZXhwb3J0cycsICdlbWJlci1tZXRh
bC9kZWJ1ZycsICdlbWJlci1ydW50aW1lL3N5c3RlbS9vYmplY3QnLCAnZW1iZXItcnVudGltZS9t
aXhpbnMvY29weWFibGUnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsRGVidWcsIF9l
bWJlclJ1bnRpbWVTeXN0ZW1PYmplY3QsIF9lbWJlclJ1bnRpbWVNaXhpbnNDb3B5YWJsZSkgewor
ICAndXNlIHN0cmljdCc7CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gY29weTsKKworICBmdW5jdGlv
biBfY29weShvYmosIGRlZXAsIHNlZW4sIGNvcGllcykgeworICAgIHZhciByZXQsIGxvYywga2V5
OworCisgICAgLy8gcHJpbWl0aXZlIGRhdGEgdHlwZXMgYXJlIGltbXV0YWJsZSwganVzdCByZXR1
cm4gdGhlbS4KKyAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgb2JqID09PSBudWxs
KSB7CisgICAgICByZXR1cm4gb2JqOworICAgIH0KKworICAgIC8vIGF2b2lkIGN5Y2xpY2FsIGxv
b3BzCisgICAgaWYgKGRlZXAgJiYgKGxvYyA9IHNlZW4uaW5kZXhPZihvYmopKSA+PSAwKSB7Cisg
ICAgICByZXR1cm4gY29waWVzW2xvY107CisgICAgfQorCisgICAgX2VtYmVyTWV0YWxEZWJ1Zy5h
c3NlcnQoJ0Nhbm5vdCBjbG9uZSBhbiBFbWJlci5PYmplY3QgdGhhdCBkb2VzIG5vdCBpbXBsZW1l
bnQgRW1iZXIuQ29weWFibGUnLCAhKG9iaiBpbnN0YW5jZW9mIF9lbWJlclJ1bnRpbWVTeXN0ZW1P
YmplY3QuZGVmYXVsdCkgfHwgX2VtYmVyUnVudGltZU1peGluc0NvcHlhYmxlLmRlZmF1bHQgJiYg
X2VtYmVyUnVudGltZU1peGluc0NvcHlhYmxlLmRlZmF1bHQuZGV0ZWN0KG9iaikpOworCisgICAg
Ly8gSU1QT1JUQU5UOiB0aGlzIHNwZWNpZmljIHRlc3Qgd2lsbCBkZXRlY3QgYSBuYXRpdmUgYXJy
YXkgb25seS4gQW55IG90aGVyCisgICAgLy8gb2JqZWN0IHdpbGwgbmVlZCB0byBpbXBsZW1lbnQg
Q29weWFibGUuCisgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkgeworICAgICAgcmV0ID0gb2Jq
LnNsaWNlKCk7CisKKyAgICAgIGlmIChkZWVwKSB7CisgICAgICAgIGxvYyA9IHJldC5sZW5ndGg7
CisKKyAgICAgICAgd2hpbGUgKC0tbG9jID49IDApIHsKKyAgICAgICAgICByZXRbbG9jXSA9IF9j
b3B5KHJldFtsb2NdLCBkZWVwLCBzZWVuLCBjb3BpZXMpOworICAgICAgICB9CisgICAgICB9Cisg
ICAgfSBlbHNlIGlmIChfZW1iZXJSdW50aW1lTWl4aW5zQ29weWFibGUuZGVmYXVsdCAmJiBfZW1i
ZXJSdW50aW1lTWl4aW5zQ29weWFibGUuZGVmYXVsdC5kZXRlY3Qob2JqKSkgeworICAgICAgcmV0
ID0gb2JqLmNvcHkoZGVlcCwgc2VlbiwgY29waWVzKTsKKyAgICB9IGVsc2UgaWYgKG9iaiBpbnN0
YW5jZW9mIERhdGUpIHsKKyAgICAgIHJldCA9IG5ldyBEYXRlKG9iai5nZXRUaW1lKCkpOworICAg
IH0gZWxzZSB7CisgICAgICByZXQgPSB7fTsKKworICAgICAgZm9yIChrZXkgaW4gb2JqKSB7Cisg
ICAgICAgIC8vIHN1cHBvcnQgTnVsbCBwcm90b3R5cGUKKyAgICAgICAgaWYgKCFPYmplY3QucHJv
dG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7CisgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBQcmV2ZW50cyBicm93c2VycyB0aGF0IGRvbid0
IHJlc3BlY3Qgbm9uLWVudW1lcmFiaWxpdHkgZnJvbQorICAgICAgICAvLyBjb3B5aW5nIGludGVy
bmFsIEVtYmVyIHByb3BlcnRpZXMKKyAgICAgICAgaWYgKGtleS5zdWJzdHJpbmcoMCwgMikgPT09
ICdfXycpIHsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldFtr
ZXldID0gZGVlcCA/IF9jb3B5KG9ialtrZXldLCBkZWVwLCBzZWVuLCBjb3BpZXMpIDogb2JqW2tl
eV07CisgICAgICB9CisgICAgfQorCisgICAgaWYgKGRlZXApIHsKKyAgICAgIHNlZW4ucHVzaChv
YmopOworICAgICAgY29waWVzLnB1c2gocmV0KTsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0Owor
ICB9CisKKyAgLyoqCisgICAgQ3JlYXRlcyBhIHNoYWxsb3cgY29weSBvZiB0aGUgcGFzc2VkIG9i
amVjdC4gQSBkZWVwIGNvcHkgb2YgdGhlIG9iamVjdCBpcworICAgIHJldHVybmVkIGlmIHRoZSBv
cHRpb25hbCBgZGVlcGAgYXJndW1lbnQgaXMgYHRydWVgLgorICAKKyAgICBJZiB0aGUgcGFzc2Vk
IG9iamVjdCBpbXBsZW1lbnRzIHRoZSBgRW1iZXIuQ29weWFibGVgIGludGVyZmFjZSwgdGhlbiB0
aGlzCisgICAgZnVuY3Rpb24gd2lsbCBkZWxlZ2F0ZSB0byB0aGUgb2JqZWN0J3MgYGNvcHkoKWAg
bWV0aG9kIGFuZCByZXR1cm4gdGhlCisgICAgcmVzdWx0LiBTZWUgYEVtYmVyLkNvcHlhYmxlYCBm
b3IgZnVydGhlciBkZXRhaWxzLgorICAKKyAgICBGb3IgcHJpbWl0aXZlIHZhbHVlcyAod2hpY2gg
YXJlIGltbXV0YWJsZSBpbiBKYXZhU2NyaXB0KSwgdGhlIHBhc3NlZCBvYmplY3QKKyAgICBpcyBz
aW1wbHkgcmV0dXJuZWQuCisgIAorICAgIEBtZXRob2QgY29weQorICAgIEBmb3IgRW1iZXIKKyAg
ICBAcGFyYW0ge09iamVjdH0gb2JqIFRoZSBvYmplY3QgdG8gY2xvbmUKKyAgICBAcGFyYW0ge0Jv
b2xlYW59IFtkZWVwPWZhbHNlXSBJZiB0cnVlLCBhIGRlZXAgY29weSBvZiB0aGUgb2JqZWN0IGlz
IG1hZGUuCisgICAgQHJldHVybiB7T2JqZWN0fSBUaGUgY29waWVkIG9iamVjdAorICAgIEBwdWJs
aWMKKyAgKi8KKworICBmdW5jdGlvbiBjb3B5KG9iaiwgZGVlcCkgeworICAgIC8vIGZhc3QgcGF0
aHMKKyAgICBpZiAoJ29iamVjdCcgIT09IHR5cGVvZiBvYmogfHwgb2JqID09PSBudWxsKSB7Cisg
ICAgICByZXR1cm4gb2JqOyAvLyBjYW4ndCBjb3B5IHByaW1pdGl2ZXMKKyAgICB9CisKKyAgICBp
ZiAoX2VtYmVyUnVudGltZU1peGluc0NvcHlhYmxlLmRlZmF1bHQgJiYgX2VtYmVyUnVudGltZU1p
eGluc0NvcHlhYmxlLmRlZmF1bHQuZGV0ZWN0KG9iaikpIHsKKyAgICAgIHJldHVybiBvYmouY29w
eShkZWVwKTsKKyAgICB9CisKKyAgICByZXR1cm4gX2NvcHkob2JqLCBkZWVwLCBkZWVwID8gW10g
OiBudWxsLCBkZWVwID8gW10gOiBudWxsKTsKKyAgfQorfSk7CitlbmlmZWQoImVtYmVyLXJ1bnRp
bWUvY29yZSIsIFsiZXhwb3J0cyJdLCBmdW5jdGlvbiAoZXhwb3J0cykgeworICAidXNlIHN0cmlj
dCI7Cit9KTsKKy8qKgorQG1vZHVsZSBlbWJlcgorQHN1Ym1vZHVsZSBlbWJlci1ydW50aW1lCisq
LworZW5pZmVkKCdlbWJlci1ydW50aW1lL2V4dC9mdW5jdGlvbicsIFsnZXhwb3J0cycsICdlbWJl
ci1tZXRhbC9jb3JlJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLW1ldGFsL2NvbXB1dGVk
JywgJ2VtYmVyLW1ldGFsL21peGluJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbENv
cmUsIF9lbWJlck1ldGFsRGVidWcsIF9lbWJlck1ldGFsQ29tcHV0ZWQsIF9lbWJlck1ldGFsTWl4
aW4pIHsKKyAgLyoqCisgIEBtb2R1bGUgZW1iZXIKKyAgQHN1Ym1vZHVsZSBlbWJlci1ydW50aW1l
CisgICovCisKKyAgJ3VzZSBzdHJpY3QnOworCisgIHZhciBhX3NsaWNlID0gQXJyYXkucHJvdG90
eXBlLnNsaWNlOworICB2YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7
CisKKyAgaWYgKF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LkVYVEVORF9QUk9UT1RZUEVTID09PSB0
cnVlIHx8IF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LkVYVEVORF9QUk9UT1RZUEVTLkZ1bmN0aW9u
KSB7CisgICAgLyoqCisgICAgICBUaGUgYHByb3BlcnR5YCBleHRlbnNpb24gb2YgSmF2YXNjcmlw
dCdzIEZ1bmN0aW9uIHByb3RvdHlwZSBpcyBhdmFpbGFibGUKKyAgICAgIHdoZW4gYEVtYmVyLkVY
VEVORF9QUk9UT1RZUEVTYCBvciBgRW1iZXIuRVhURU5EX1BST1RPVFlQRVMuRnVuY3Rpb25gIGlz
CisgICAgICBgdHJ1ZWAsIHdoaWNoIGlzIHRoZSBkZWZhdWx0LgorICAgICAgIENvbXB1dGVkIHBy
b3BlcnRpZXMgYWxsb3cgeW91IHRvIHRyZWF0IGEgZnVuY3Rpb24gbGlrZSBhIHByb3BlcnR5Ogor
ICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgIE15QXBwLlByZXNpZGVudCA9IEVtYmVyLk9iamVj
dC5leHRlbmQoeworICAgICAgICBmaXJzdE5hbWU6ICcnLAorICAgICAgICBsYXN0TmFtZTogICcn
LAorICAgICAgICAgZnVsbE5hbWU6IGZ1bmN0aW9uKCkgeworICAgICAgICAgIHJldHVybiB0aGlz
LmdldCgnZmlyc3ROYW1lJykgKyAnICcgKyB0aGlzLmdldCgnbGFzdE5hbWUnKTsKKyAgICAgICAg
fS5wcm9wZXJ0eSgpIC8vIENhbGwgdGhpcyBmbGFnIHRvIG1hcmsgdGhlIGZ1bmN0aW9uIGFzIGEg
cHJvcGVydHkKKyAgICAgIH0pOworICAgICAgIHZhciBwcmVzaWRlbnQgPSBNeUFwcC5QcmVzaWRl
bnQuY3JlYXRlKHsKKyAgICAgICAgZmlyc3ROYW1lOiAnQmFyYWNrJywKKyAgICAgICAgbGFzdE5h
bWU6ICdPYmFtYScKKyAgICAgIH0pOworICAgICAgIHByZXNpZGVudC5nZXQoJ2Z1bGxOYW1lJyk7
IC8vICdCYXJhY2sgT2JhbWEnCisgICAgICBgYGAKKyAgICAgICBUcmVhdGluZyBhIGZ1bmN0aW9u
IGxpa2UgYSBwcm9wZXJ0eSBpcyB1c2VmdWwgYmVjYXVzZSB0aGV5IGNhbiB3b3JrIHdpdGgKKyAg
ICAgIGJpbmRpbmdzLCBqdXN0IGxpa2UgYW55IG90aGVyIHByb3BlcnR5LgorICAgICAgIE1hbnkg
Y29tcHV0ZWQgcHJvcGVydGllcyBoYXZlIGRlcGVuZGVuY2llcyBvbiBvdGhlciBwcm9wZXJ0aWVz
LiBGb3IKKyAgICAgIGV4YW1wbGUsIGluIHRoZSBhYm92ZSBleGFtcGxlLCB0aGUgYGZ1bGxOYW1l
YCBwcm9wZXJ0eSBkZXBlbmRzIG9uCisgICAgICBgZmlyc3ROYW1lYCBhbmQgYGxhc3ROYW1lYCB0
byBkZXRlcm1pbmUgaXRzIHZhbHVlLiBZb3UgY2FuIHRlbGwgRW1iZXIKKyAgICAgIGFib3V0IHRo
ZXNlIGRlcGVuZGVuY2llcyBsaWtlIHRoaXM6CisgICAgICAgYGBgamF2YXNjcmlwdAorICAgICAg
TXlBcHAuUHJlc2lkZW50ID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7CisgICAgICAgIGZpcnN0TmFt
ZTogJycsCisgICAgICAgIGxhc3ROYW1lOiAgJycsCisgICAgICAgICBmdWxsTmFtZTogZnVuY3Rp
b24oKSB7CisgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCdmaXJzdE5hbWUnKSArICcgJyArIHRo
aXMuZ2V0KCdsYXN0TmFtZScpOworICAgICAgICAgICAvLyBUZWxsIEVtYmVyLmpzIHRoYXQgdGhp
cyBjb21wdXRlZCBwcm9wZXJ0eSBkZXBlbmRzIG9uIGZpcnN0TmFtZQorICAgICAgICAgIC8vIGFu
ZCBsYXN0TmFtZQorICAgICAgICB9LnByb3BlcnR5KCdmaXJzdE5hbWUnLCAnbGFzdE5hbWUnKQor
ICAgICAgfSk7CisgICAgICBgYGAKKyAgICAgICBNYWtlIHN1cmUgeW91IGxpc3QgdGhlc2UgZGVw
ZW5kZW5jaWVzIHNvIEVtYmVyIGtub3dzIHdoZW4gdG8gdXBkYXRlCisgICAgICBiaW5kaW5ncyB0
aGF0IGNvbm5lY3QgdG8gYSBjb21wdXRlZCBwcm9wZXJ0eS4gQ2hhbmdpbmcgYSBkZXBlbmRlbmN5
CisgICAgICB3aWxsIG5vdCBpbW1lZGlhdGVseSB0cmlnZ2VyIGFuIHVwZGF0ZSBvZiB0aGUgY29t
cHV0ZWQgcHJvcGVydHksIGJ1dAorICAgICAgd2lsbCBpbnN0ZWFkIGNsZWFyIHRoZSBjYWNoZSBz
byB0aGF0IGl0IGlzIHVwZGF0ZWQgd2hlbiB0aGUgbmV4dCBgZ2V0YAorICAgICAgaXMgY2FsbGVk
IG9uIHRoZSBwcm9wZXJ0eS4KKyAgICAgICBTZWUgW0VtYmVyLkNvbXB1dGVkUHJvcGVydHldKC9h
cGkvY2xhc3Nlcy9FbWJlci5Db21wdXRlZFByb3BlcnR5Lmh0bWwpLCBbRW1iZXIuY29tcHV0ZWRd
KC9hcGkvY2xhc3Nlcy9FbWJlci5jb21wdXRlZC5odG1sKS4KKyAgICAgICBAbWV0aG9kIHByb3Bl
cnR5CisgICAgICBAZm9yIEZ1bmN0aW9uCisgICAgICBAcHVibGljCisgICAgKi8KKyAgICBGdW5j
dGlvblByb3RvdHlwZS5wcm9wZXJ0eSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciByZXQgPSBf
ZW1iZXJNZXRhbENvbXB1dGVkLmNvbXB1dGVkKHRoaXMpOworICAgICAgLy8gQ29tcHV0ZWRQcm9w
ZXJ0eS5wcm90b3R5cGUucHJvcGVydHkgZXhwYW5kcyBwcm9wZXJ0aWVzOyBubyBuZWVkIGZvciB1
cyB0bworICAgICAgLy8gZG8gc28gaGVyZS4KKyAgICAgIHJldHVybiByZXQucHJvcGVydHkuYXBw
bHkocmV0LCBhcmd1bWVudHMpOworICAgIH07CisKKyAgICAvKioKKyAgICAgIFRoZSBgb2JzZXJ2
ZXNgIGV4dGVuc2lvbiBvZiBKYXZhc2NyaXB0J3MgRnVuY3Rpb24gcHJvdG90eXBlIGlzIGF2YWls
YWJsZQorICAgICAgd2hlbiBgRW1iZXIuRVhURU5EX1BST1RPVFlQRVNgIG9yIGBFbWJlci5FWFRF
TkRfUFJPVE9UWVBFUy5GdW5jdGlvbmAgaXMKKyAgICAgIHRydWUsIHdoaWNoIGlzIHRoZSBkZWZh
dWx0LgorICAgICAgIFlvdSBjYW4gb2JzZXJ2ZSBwcm9wZXJ0eSBjaGFuZ2VzIHNpbXBseSBieSBh
ZGRpbmcgdGhlIGBvYnNlcnZlc2AKKyAgICAgIGNhbGwgdG8gdGhlIGVuZCBvZiB5b3VyIG1ldGhv
ZCBkZWNsYXJhdGlvbnMgaW4gY2xhc3NlcyB0aGF0IHlvdSB3cml0ZS4KKyAgICAgIEZvciBleGFt
cGxlOgorICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgIEVtYmVyLk9iamVjdC5leHRlbmQoewor
ICAgICAgICB2YWx1ZU9ic2VydmVyOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAvLyBFeGVjdXRl
cyB3aGVuZXZlciB0aGUgInZhbHVlIiBwcm9wZXJ0eSBjaGFuZ2VzCisgICAgICAgIH0ub2JzZXJ2
ZXMoJ3ZhbHVlJykKKyAgICAgIH0pOworICAgICAgYGBgCisgICAgICAgSW4gdGhlIGZ1dHVyZSB0
aGlzIG1ldGhvZCBtYXkgYmVjb21lIGFzeW5jaHJvbm91cy4KKyAgICAgICBTZWUgYEVtYmVyLm9i
c2VydmVyYC4KKyAgICAgICBAbWV0aG9kIG9ic2VydmVzCisgICAgICBAZm9yIEZ1bmN0aW9uCisg
ICAgICBAcHVibGljCisgICAgKi8KKyAgICBGdW5jdGlvblByb3RvdHlwZS5vYnNlcnZlcyA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdz
ID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7CisgICAgICAg
IGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07CisgICAgICB9CisKKyAgICAgIGFyZ3MucHVz
aCh0aGlzKTsKKyAgICAgIHJldHVybiBfZW1iZXJNZXRhbE1peGluLm9ic2VydmVyLmFwcGx5KHRo
aXMsIGFyZ3MpOworICAgIH07CisKKyAgICBGdW5jdGlvblByb3RvdHlwZS5fb2JzZXJ2ZXNJbW1l
ZGlhdGVseSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdJ
bW1lZGlhdGUgb2JzZXJ2ZXJzIG11c3Qgb2JzZXJ2ZSBpbnRlcm5hbCBwcm9wZXJ0aWVzIG9ubHks
ICcgKyAnbm90IHByb3BlcnRpZXMgb24gb3RoZXIgb2JqZWN0cy4nLCBmdW5jdGlvbiBjaGVja0lz
SW50ZXJuYWxQcm9wZXJ0eSgpIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVu
dHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CisgICAgICAgICAgaWYgKGFyZ3VtZW50c1tpXS5pbmRl
eE9mKCcuJykgIT09IC0xKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgfSk7CisKKyAgICAgIC8v
IG9ic2VydmVzIGhhbmRsZXMgcHJvcGVydHkgZXhwYW5zaW9uCisgICAgICByZXR1cm4gdGhpcy5v
YnNlcnZlcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgIH07CisgICAgLyoqCisgICAgICBU
aGUgYG9ic2VydmVzSW1tZWRpYXRlbHlgIGV4dGVuc2lvbiBvZiBKYXZhc2NyaXB0J3MgRnVuY3Rp
b24gcHJvdG90eXBlIGlzCisgICAgICBhdmFpbGFibGUgd2hlbiBgRW1iZXIuRVhURU5EX1BST1RP
VFlQRVNgIG9yCisgICAgICBgRW1iZXIuRVhURU5EX1BST1RPVFlQRVMuRnVuY3Rpb25gIGlzIHRy
dWUsIHdoaWNoIGlzIHRoZSBkZWZhdWx0LgorICAgICAgIFlvdSBjYW4gb2JzZXJ2ZSBwcm9wZXJ0
eSBjaGFuZ2VzIHNpbXBseSBieSBhZGRpbmcgdGhlIGBvYnNlcnZlc0ltbWVkaWF0ZWx5YAorICAg
ICAgY2FsbCB0byB0aGUgZW5kIG9mIHlvdXIgbWV0aG9kIGRlY2xhcmF0aW9ucyBpbiBjbGFzc2Vz
IHRoYXQgeW91IHdyaXRlLgorICAgICAgRm9yIGV4YW1wbGU6CisgICAgICAgYGBgamF2YXNjcmlw
dAorICAgICAgRW1iZXIuT2JqZWN0LmV4dGVuZCh7CisgICAgICAgIHZhbHVlT2JzZXJ2ZXI6IGZ1
bmN0aW9uKCkgeworICAgICAgICAgIC8vIEV4ZWN1dGVzIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSAi
dmFsdWUiIHByb3BlcnR5IGNoYW5nZXMKKyAgICAgICAgfS5vYnNlcnZlc0ltbWVkaWF0ZWx5KCd2
YWx1ZScpCisgICAgICB9KTsKKyAgICAgIGBgYAorICAgICAgIEluIHRoZSBmdXR1cmUsIGBvYnNl
cnZlc2AgbWF5IGJlY29tZSBhc3luY2hyb25vdXMuIEluIHRoaXMgZXZlbnQsCisgICAgICBgb2Jz
ZXJ2ZXNJbW1lZGlhdGVseWAgd2lsbCBtYWludGFpbiB0aGUgc3luY2hyb25vdXMgYmVoYXZpb3Iu
CisgICAgICAgU2VlIGBFbWJlci5pbW1lZGlhdGVPYnNlcnZlcmAuCisgICAgICAgQG1ldGhvZCBv
YnNlcnZlc0ltbWVkaWF0ZWx5CisgICAgICBAZm9yIEZ1bmN0aW9uCisgICAgICBAZGVwcmVjYXRl
ZAorICAgICAgQHByaXZhdGUKKyAgICAqLworICAgIEZ1bmN0aW9uUHJvdG90eXBlLm9ic2VydmVz
SW1tZWRpYXRlbHkgPSBfZW1iZXJNZXRhbERlYnVnLmRlcHJlY2F0ZUZ1bmMoJ0Z1bmN0aW9uI29i
c2VydmVzSW1tZWRpYXRlbHkgaXMgZGVwcmVjYXRlZC4gVXNlIEZ1bmN0aW9uI29ic2VydmVzIGlu
c3RlYWQnLCB7IGlkOiAnZW1iZXItcnVudGltZS5leHQtZnVuY3Rpb24nLCB1bnRpbDogJzMuMC4w
JyB9LCBGdW5jdGlvblByb3RvdHlwZS5fb2JzZXJ2ZXNJbW1lZGlhdGVseSk7CisKKyAgICAvKioK
KyAgICAgIFRoZSBgb25gIGV4dGVuc2lvbiBvZiBKYXZhc2NyaXB0J3MgRnVuY3Rpb24gcHJvdG90
eXBlIGlzIGF2YWlsYWJsZQorICAgICAgd2hlbiBgRW1iZXIuRVhURU5EX1BST1RPVFlQRVNgIG9y
IGBFbWJlci5FWFRFTkRfUFJPVE9UWVBFUy5GdW5jdGlvbmAgaXMKKyAgICAgIHRydWUsIHdoaWNo
IGlzIHRoZSBkZWZhdWx0LgorICAgICAgIFlvdSBjYW4gbGlzdGVuIGZvciBldmVudHMgc2ltcGx5
IGJ5IGFkZGluZyB0aGUgYG9uYCBjYWxsIHRvIHRoZSBlbmQgb2YKKyAgICAgIHlvdXIgbWV0aG9k
IGRlY2xhcmF0aW9ucyBpbiBjbGFzc2VzIG9yIG1peGlucyB0aGF0IHlvdSB3cml0ZS4gRm9yIGV4
YW1wbGU6CisgICAgICAgYGBgamF2YXNjcmlwdAorICAgICAgRW1iZXIuTWl4aW4uY3JlYXRlKHsK
KyAgICAgICAgZG9Tb21ldGhpbmdXaXRoRWxlbWVudDogZnVuY3Rpb24oKSB7CisgICAgICAgICAg
Ly8gRXhlY3V0ZXMgd2hlbmV2ZXIgdGhlICJkaWRJbnNlcnRFbGVtZW50IiBldmVudCBmaXJlcwor
ICAgICAgICB9Lm9uKCdkaWRJbnNlcnRFbGVtZW50JykKKyAgICAgIH0pOworICAgICAgYGBgCisg
ICAgICAgU2VlIGBFbWJlci5vbmAuCisgICAgICAgQG1ldGhvZCBvbgorICAgICAgQGZvciBGdW5j
dGlvbgorICAgICAgQHB1YmxpYworICAgICovCisgICAgRnVuY3Rpb25Qcm90b3R5cGUub24gPSBm
dW5jdGlvbiAoKSB7CisgICAgICB2YXIgZXZlbnRzID0gYV9zbGljZS5jYWxsKGFyZ3VtZW50cyk7
CisgICAgICB0aGlzLl9fZW1iZXJfbGlzdGVuc19fID0gZXZlbnRzOworCisgICAgICByZXR1cm4g
dGhpczsKKyAgICB9OworICB9Cit9KTsKKy8vIEVtYmVyLkVYVEVORF9QUk9UT1RZUEVTCitlbmlm
ZWQoJ2VtYmVyLXJ1bnRpbWUvZXh0L3JzdnAnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvY29y
ZScsICdyZXF1aXJlJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLW1ldGFsL2xvZ2dlcics
ICdlbWJlci1tZXRhbC9ydW5fbG9vcCcsICdyc3ZwJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1i
ZXJNZXRhbENvcmUsIF9yZXF1aXJlLCBfZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJNZXRhbExvZ2dl
ciwgX2VtYmVyTWV0YWxSdW5fbG9vcCwgX3JzdnApIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIGV4
cG9ydHMub25lcnJvckRlZmF1bHQgPSBvbmVycm9yRGVmYXVsdDsKKyAgZXhwb3J0cy5hZnRlciA9
IGFmdGVyOworCisgIHZhciB0ZXN0TW9kdWxlTmFtZSA9ICdlbWJlci10ZXN0aW5nL3Rlc3QnOwor
ICB2YXIgVGVzdDsKKworICB2YXIgYXN5bmNTdGFydCA9IGZ1bmN0aW9uICgpIHsKKyAgICBpZiAo
X2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuVGVzdCAmJiBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5U
ZXN0LmFkYXB0ZXIpIHsKKyAgICAgIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LlRlc3QuYWRhcHRl
ci5hc3luY1N0YXJ0KCk7CisgICAgfQorICB9OworCisgIHZhciBhc3luY0VuZCA9IGZ1bmN0aW9u
ICgpIHsKKyAgICBpZiAoX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuVGVzdCAmJiBfZW1iZXJNZXRh
bENvcmUuZGVmYXVsdC5UZXN0LmFkYXB0ZXIpIHsKKyAgICAgIF9lbWJlck1ldGFsQ29yZS5kZWZh
dWx0LlRlc3QuYWRhcHRlci5hc3luY0VuZCgpOworICAgIH0KKyAgfTsKKworICBfcnN2cC5jb25m
aWd1cmUoJ2FzeW5jJywgZnVuY3Rpb24gKGNhbGxiYWNrLCBwcm9taXNlKSB7CisgICAgdmFyIGFz
eW5jID0gIV9lbWJlck1ldGFsUnVuX2xvb3AuZGVmYXVsdC5jdXJyZW50UnVuTG9vcDsKKworICAg
IGlmIChfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC50ZXN0aW5nICYmIGFzeW5jKSB7CisgICAgICBh
c3luY1N0YXJ0KCk7CisgICAgfQorCisgICAgX2VtYmVyTWV0YWxSdW5fbG9vcC5kZWZhdWx0LmJh
Y2tidXJuZXIuc2NoZWR1bGUoJ2FjdGlvbnMnLCBmdW5jdGlvbiAoKSB7CisgICAgICBpZiAoX2Vt
YmVyTWV0YWxDb3JlLmRlZmF1bHQudGVzdGluZyAmJiBhc3luYykgeworICAgICAgICBhc3luY0Vu
ZCgpOworICAgICAgfQorICAgICAgY2FsbGJhY2socHJvbWlzZSk7CisgICAgfSk7CisgIH0pOwor
CisgIGZ1bmN0aW9uIG9uZXJyb3JEZWZhdWx0KHJlYXNvbikgeworICAgIHZhciBlcnJvcjsKKwor
ICAgIGlmIChyZWFzb24gJiYgcmVhc29uLmVycm9yVGhyb3duKSB7CisgICAgICAvLyBqcVhIUiBw
cm92aWRlcyB0aGlzCisgICAgICBlcnJvciA9IHJlYXNvbi5lcnJvclRocm93bjsKKyAgICAgIGlm
ICh0eXBlb2YgZXJyb3IgPT09ICdzdHJpbmcnKSB7CisgICAgICAgIGVycm9yID0gbmV3IEVycm9y
KGVycm9yKTsKKyAgICAgIH0KKyAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlcnJvciwgJ19f
cmVhc29uX3dpdGhfZXJyb3JfdGhyb3duX18nLCB7CisgICAgICAgIHZhbHVlOiByZWFzb24sCisg
ICAgICAgIGVudW1lcmFibGU6IGZhbHNlCisgICAgICB9KTsKKyAgICB9IGVsc2UgeworICAgICAg
ZXJyb3IgPSByZWFzb247CisgICAgfQorCisgICAgaWYgKGVycm9yICYmIGVycm9yLm5hbWUgPT09
ICdVbnJlY29nbml6ZWRVUkxFcnJvcicpIHsKKyAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0
KCdUaGUgVVJMIFwnJyArIGVycm9yLm1lc3NhZ2UgKyAnXCcgZGlkIG5vdCBtYXRjaCBhbnkgcm91
dGVzIGluIHlvdXIgYXBwbGljYXRpb24nLCBmYWxzZSk7CisgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKGVycm9yICYmIGVycm9yLm5hbWUgIT09ICdUcmFuc2l0aW9uQWJvcnRlZCcpIHsK
KyAgICAgIGlmIChfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC50ZXN0aW5nKSB7CisgICAgICAgIC8v
IEVTNlRPRE86IHJlbW92ZSB3aGVuIHBvc3NpYmxlCisgICAgICAgIGlmICghVGVzdCAmJiBfcmVx
dWlyZS5oYXModGVzdE1vZHVsZU5hbWUpKSB7CisgICAgICAgICAgVGVzdCA9IF9yZXF1aXJlLmRl
ZmF1bHQodGVzdE1vZHVsZU5hbWUpWydkZWZhdWx0J107CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoVGVzdCAmJiBUZXN0LmFkYXB0ZXIpIHsKKyAgICAgICAgICBUZXN0LmFkYXB0ZXIuZXhjZXB0
aW9uKGVycm9yKTsKKyAgICAgICAgICBfZW1iZXJNZXRhbExvZ2dlci5kZWZhdWx0LmVycm9yKGVy
cm9yLnN0YWNrKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB0aHJvdyBlcnJvcjsKKyAg
ICAgICAgfQorICAgICAgfSBlbHNlIGlmIChfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5vbmVycm9y
KSB7CisgICAgICAgIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0Lm9uZXJyb3IoZXJyb3IpOworICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgX2VtYmVyTWV0YWxMb2dnZXIuZGVmYXVsdC5lcnJvcihlcnJv
ci5zdGFjayk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gYWZ0ZXIoY2IpIHsK
KyAgICBfZW1iZXJNZXRhbFJ1bl9sb29wLmRlZmF1bHQuc2NoZWR1bGUoX2VtYmVyTWV0YWxSdW5f
bG9vcC5kZWZhdWx0LnF1ZXVlc1tfZW1iZXJNZXRhbFJ1bl9sb29wLmRlZmF1bHQucXVldWVzLmxl
bmd0aCAtIDFdLCBjYik7CisgIH0KKworICBfcnN2cC5vbignZXJyb3InLCBvbmVycm9yRGVmYXVs
dCk7CisgIF9yc3ZwLmNvbmZpZ3VyZSgnYWZ0ZXInLCBhZnRlcik7CisKKyAgZXhwb3J0cy5kZWZh
dWx0ID0gX3JzdnA7Cit9KTsKK2VuaWZlZCgnZW1iZXItcnVudGltZS9leHQvc3RyaW5nJywgWydl
eHBvcnRzJywgJ2VtYmVyLW1ldGFsL2NvcmUnLCAnZW1iZXItcnVudGltZS9zeXN0ZW0vc3RyaW5n
J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbENvcmUsIF9lbWJlclJ1bnRpbWVTeXN0
ZW1TdHJpbmcpIHsKKyAgLyoqCisgIEBtb2R1bGUgZW1iZXIKKyAgQHN1Ym1vZHVsZSBlbWJlci1y
dW50aW1lCisgICovCisKKyAgJ3VzZSBzdHJpY3QnOworCisgIHZhciBTdHJpbmdQcm90b3R5cGUg
PSBTdHJpbmcucHJvdG90eXBlOworCisgIGlmIChfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5FWFRF
TkRfUFJPVE9UWVBFUyA9PT0gdHJ1ZSB8fCBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5FWFRFTkRf
UFJPVE9UWVBFUy5TdHJpbmcpIHsKKyAgICAvKioKKyAgICAgIFNlZSBbRW1iZXIuU3RyaW5nLmZt
dF0oL2FwaS9jbGFzc2VzL0VtYmVyLlN0cmluZy5odG1sI21ldGhvZF9mbXQpLgorICAgICAgIEBt
ZXRob2QgZm10CisgICAgICBAZm9yIFN0cmluZworICAgICAgQHByaXZhdGUKKyAgICAgIEBkZXBy
ZWNhdGVkCisgICAgKi8KKyAgICBTdHJpbmdQcm90b3R5cGUuZm10ID0gZnVuY3Rpb24gKCkgewor
ICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVu
KSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHsKKyAgICAgICAgYXJnc1tfa2V5XSA9
IGFyZ3VtZW50c1tfa2V5XTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIF9lbWJlclJ1bnRpbWVT
eXN0ZW1TdHJpbmcuZm10KHRoaXMsIGFyZ3MpOworICAgIH07CisKKyAgICAvKioKKyAgICAgIFNl
ZSBbRW1iZXIuU3RyaW5nLnddKC9hcGkvY2xhc3Nlcy9FbWJlci5TdHJpbmcuaHRtbCNtZXRob2Rf
dykuCisgICAgICAgQG1ldGhvZCB3CisgICAgICBAZm9yIFN0cmluZworICAgICAgQHByaXZhdGUK
KyAgICAqLworICAgIFN0cmluZ1Byb3RvdHlwZS53ID0gZnVuY3Rpb24gKCkgeworICAgICAgcmV0
dXJuIF9lbWJlclJ1bnRpbWVTeXN0ZW1TdHJpbmcudyh0aGlzKTsKKyAgICB9OworCisgICAgLyoq
CisgICAgICBTZWUgW0VtYmVyLlN0cmluZy5sb2NdKC9hcGkvY2xhc3Nlcy9FbWJlci5TdHJpbmcu
aHRtbCNtZXRob2RfbG9jKS4KKyAgICAgICBAbWV0aG9kIGxvYworICAgICAgQGZvciBTdHJpbmcK
KyAgICAgIEBwcml2YXRlCisgICAgKi8KKyAgICBTdHJpbmdQcm90b3R5cGUubG9jID0gZnVuY3Rp
b24gKCkgeworICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0g
QXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHsKKyAgICAg
ICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdOworICAgICAgfQorCisgICAgICByZXR1
cm4gX2VtYmVyUnVudGltZVN5c3RlbVN0cmluZy5sb2ModGhpcywgYXJncyk7CisgICAgfTsKKwor
ICAgIC8qKgorICAgICAgU2VlIFtFbWJlci5TdHJpbmcuY2FtZWxpemVdKC9hcGkvY2xhc3Nlcy9F
bWJlci5TdHJpbmcuaHRtbCNtZXRob2RfY2FtZWxpemUpLgorICAgICAgIEBtZXRob2QgY2FtZWxp
emUKKyAgICAgIEBmb3IgU3RyaW5nCisgICAgICBAcHJpdmF0ZQorICAgICovCisgICAgU3RyaW5n
UHJvdG90eXBlLmNhbWVsaXplID0gZnVuY3Rpb24gKCkgeworICAgICAgcmV0dXJuIF9lbWJlclJ1
bnRpbWVTeXN0ZW1TdHJpbmcuY2FtZWxpemUodGhpcyk7CisgICAgfTsKKworICAgIC8qKgorICAg
ICAgU2VlIFtFbWJlci5TdHJpbmcuZGVjYW1lbGl6ZV0oL2FwaS9jbGFzc2VzL0VtYmVyLlN0cmlu
Zy5odG1sI21ldGhvZF9kZWNhbWVsaXplKS4KKyAgICAgICBAbWV0aG9kIGRlY2FtZWxpemUKKyAg
ICAgIEBmb3IgU3RyaW5nCisgICAgICBAcHJpdmF0ZQorICAgICovCisgICAgU3RyaW5nUHJvdG90
eXBlLmRlY2FtZWxpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICByZXR1cm4gX2VtYmVyUnVudGlt
ZVN5c3RlbVN0cmluZy5kZWNhbWVsaXplKHRoaXMpOworICAgIH07CisKKyAgICAvKioKKyAgICAg
IFNlZSBbRW1iZXIuU3RyaW5nLmRhc2hlcml6ZV0oL2FwaS9jbGFzc2VzL0VtYmVyLlN0cmluZy5o
dG1sI21ldGhvZF9kYXNoZXJpemUpLgorICAgICAgIEBtZXRob2QgZGFzaGVyaXplCisgICAgICBA
Zm9yIFN0cmluZworICAgICAgQHByaXZhdGUKKyAgICAqLworICAgIFN0cmluZ1Byb3RvdHlwZS5k
YXNoZXJpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICByZXR1cm4gX2VtYmVyUnVudGltZVN5c3Rl
bVN0cmluZy5kYXNoZXJpemUodGhpcyk7CisgICAgfTsKKworICAgIC8qKgorICAgICAgU2VlIFtF
bWJlci5TdHJpbmcudW5kZXJzY29yZV0oL2FwaS9jbGFzc2VzL0VtYmVyLlN0cmluZy5odG1sI21l
dGhvZF91bmRlcnNjb3JlKS4KKyAgICAgICBAbWV0aG9kIHVuZGVyc2NvcmUKKyAgICAgIEBmb3Ig
U3RyaW5nCisgICAgICBAcHJpdmF0ZQorICAgICovCisgICAgU3RyaW5nUHJvdG90eXBlLnVuZGVy
c2NvcmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICByZXR1cm4gX2VtYmVyUnVudGltZVN5c3RlbVN0
cmluZy51bmRlcnNjb3JlKHRoaXMpOworICAgIH07CisKKyAgICAvKioKKyAgICAgIFNlZSBbRW1i
ZXIuU3RyaW5nLmNsYXNzaWZ5XSgvYXBpL2NsYXNzZXMvRW1iZXIuU3RyaW5nLmh0bWwjbWV0aG9k
X2NsYXNzaWZ5KS4KKyAgICAgICBAbWV0aG9kIGNsYXNzaWZ5CisgICAgICBAZm9yIFN0cmluZwor
ICAgICAgQHByaXZhdGUKKyAgICAqLworICAgIFN0cmluZ1Byb3RvdHlwZS5jbGFzc2lmeSA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgIHJldHVybiBfZW1iZXJSdW50aW1lU3lzdGVtU3RyaW5nLmNsYXNz
aWZ5KHRoaXMpOworICAgIH07CisKKyAgICAvKioKKyAgICAgIFNlZSBbRW1iZXIuU3RyaW5nLmNh
cGl0YWxpemVdKC9hcGkvY2xhc3Nlcy9FbWJlci5TdHJpbmcuaHRtbCNtZXRob2RfY2FwaXRhbGl6
ZSkuCisgICAgICAgQG1ldGhvZCBjYXBpdGFsaXplCisgICAgICBAZm9yIFN0cmluZworICAgICAg
QHByaXZhdGUKKyAgICAqLworICAgIFN0cmluZ1Byb3RvdHlwZS5jYXBpdGFsaXplID0gZnVuY3Rp
b24gKCkgeworICAgICAgcmV0dXJuIF9lbWJlclJ1bnRpbWVTeXN0ZW1TdHJpbmcuY2FwaXRhbGl6
ZSh0aGlzKTsKKyAgICB9OworICB9Cit9KTsKKy8vIEVtYmVyLkVYVEVORF9QUk9UT1RZUEVTCitl
bmlmZWQoJ2VtYmVyLXJ1bnRpbWUvaW5kZXgnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwnLCAn
ZW1iZXItcnVudGltZS9pcy1lcXVhbCcsICdlbWJlci1ydW50aW1lL2NvbXBhcmUnLCAnZW1iZXIt
cnVudGltZS9jb3B5JywgJ2VtYmVyLXJ1bnRpbWUvaW5qZWN0JywgJ2VtYmVyLXJ1bnRpbWUvc3lz
dGVtL25hbWVzcGFjZScsICdlbWJlci1ydW50aW1lL3N5c3RlbS9vYmplY3QnLCAnZW1iZXItcnVu
dGltZS9zeXN0ZW0vY29udGFpbmVyJywgJ2VtYmVyLXJ1bnRpbWUvc3lzdGVtL2FycmF5X3Byb3h5
JywgJ2VtYmVyLXJ1bnRpbWUvc3lzdGVtL29iamVjdF9wcm94eScsICdlbWJlci1ydW50aW1lL3N5
c3RlbS9jb3JlX29iamVjdCcsICdlbWJlci1ydW50aW1lL3N5c3RlbS9uYXRpdmVfYXJyYXknLCAn
ZW1iZXItcnVudGltZS9zeXN0ZW0vc3RyaW5nJywgJ2VtYmVyLXJ1bnRpbWUvc3lzdGVtL2xhenlf
bG9hZCcsICdlbWJlci1ydW50aW1lL21peGlucy9hcnJheScsICdlbWJlci1ydW50aW1lL21peGlu
cy9jb21wYXJhYmxlJywgJ2VtYmVyLXJ1bnRpbWUvbWl4aW5zL2NvcHlhYmxlJywgJ2VtYmVyLXJ1
bnRpbWUvbWl4aW5zL2VudW1lcmFibGUnLCAnZW1iZXItcnVudGltZS9taXhpbnMvZnJlZXphYmxl
JywgJ2VtYmVyLXJ1bnRpbWUvbWl4aW5zLy1wcm94eScsICdlbWJlci1ydW50aW1lL21peGlucy9v
YnNlcnZhYmxlJywgJ2VtYmVyLXJ1bnRpbWUvbWl4aW5zL2FjdGlvbl9oYW5kbGVyJywgJ2VtYmVy
LXJ1bnRpbWUvbWl4aW5zL211dGFibGVfZW51bWVyYWJsZScsICdlbWJlci1ydW50aW1lL21peGlu
cy9tdXRhYmxlX2FycmF5JywgJ2VtYmVyLXJ1bnRpbWUvbWl4aW5zL3RhcmdldF9hY3Rpb25fc3Vw
cG9ydCcsICdlbWJlci1ydW50aW1lL21peGlucy9ldmVudGVkJywgJ2VtYmVyLXJ1bnRpbWUvbWl4
aW5zL3Byb21pc2VfcHJveHknLCAnZW1iZXItbWV0YWwvZmVhdHVyZXMnLCAnZW1iZXItcnVudGlt
ZS9jb21wdXRlZC9yZWR1Y2VfY29tcHV0ZWRfbWFjcm9zJywgJ2VtYmVyLXJ1bnRpbWUvY29udHJv
bGxlcnMvY29udHJvbGxlcicsICdlbWJlci1ydW50aW1lL21peGlucy9jb250cm9sbGVyJywgJ2Vt
YmVyLXJ1bnRpbWUvc3lzdGVtL3NlcnZpY2UnLCAnZW1iZXItcnVudGltZS9leHQvcnN2cCcsICdl
bWJlci1ydW50aW1lL2V4dC9zdHJpbmcnLCAnZW1iZXItcnVudGltZS9leHQvZnVuY3Rpb24nLCAn
ZW1iZXItcnVudGltZS91dGlscycsICdlbWJlci1ydW50aW1lL21peGlucy9yZWdpc3RyeV9wcm94
eScsICdlbWJlci1ydW50aW1lL21peGlucy9jb250YWluZXJfcHJveHknLCAnZW1iZXItcnVudGlt
ZS9zdHJpbmdfcmVnaXN0cnknXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsLCBfZW1i
ZXJSdW50aW1lSXNFcXVhbCwgX2VtYmVyUnVudGltZUNvbXBhcmUsIF9lbWJlclJ1bnRpbWVDb3B5
LCBfZW1iZXJSdW50aW1lSW5qZWN0LCBfZW1iZXJSdW50aW1lU3lzdGVtTmFtZXNwYWNlLCBfZW1i
ZXJSdW50aW1lU3lzdGVtT2JqZWN0LCBfZW1iZXJSdW50aW1lU3lzdGVtQ29udGFpbmVyLCBfZW1i
ZXJSdW50aW1lU3lzdGVtQXJyYXlfcHJveHksIF9lbWJlclJ1bnRpbWVTeXN0ZW1PYmplY3RfcHJv
eHksIF9lbWJlclJ1bnRpbWVTeXN0ZW1Db3JlX29iamVjdCwgX2VtYmVyUnVudGltZVN5c3RlbU5h
dGl2ZV9hcnJheSwgX2VtYmVyUnVudGltZVN5c3RlbVN0cmluZywgX2VtYmVyUnVudGltZVN5c3Rl
bUxhenlfbG9hZCwgX2VtYmVyUnVudGltZU1peGluc0FycmF5LCBfZW1iZXJSdW50aW1lTWl4aW5z
Q29tcGFyYWJsZSwgX2VtYmVyUnVudGltZU1peGluc0NvcHlhYmxlLCBfZW1iZXJSdW50aW1lTWl4
aW5zRW51bWVyYWJsZSwgX2VtYmVyUnVudGltZU1peGluc0ZyZWV6YWJsZSwgX2VtYmVyUnVudGlt
ZU1peGluc1Byb3h5LCBfZW1iZXJSdW50aW1lTWl4aW5zT2JzZXJ2YWJsZSwgX2VtYmVyUnVudGlt
ZU1peGluc0FjdGlvbl9oYW5kbGVyLCBfZW1iZXJSdW50aW1lTWl4aW5zTXV0YWJsZV9lbnVtZXJh
YmxlLCBfZW1iZXJSdW50aW1lTWl4aW5zTXV0YWJsZV9hcnJheSwgX2VtYmVyUnVudGltZU1peGlu
c1RhcmdldF9hY3Rpb25fc3VwcG9ydCwgX2VtYmVyUnVudGltZU1peGluc0V2ZW50ZWQsIF9lbWJl
clJ1bnRpbWVNaXhpbnNQcm9taXNlX3Byb3h5LCBfZW1iZXJNZXRhbEZlYXR1cmVzLCBfZW1iZXJS
dW50aW1lQ29tcHV0ZWRSZWR1Y2VfY29tcHV0ZWRfbWFjcm9zLCBfZW1iZXJSdW50aW1lQ29udHJv
bGxlcnNDb250cm9sbGVyLCBfZW1iZXJSdW50aW1lTWl4aW5zQ29udHJvbGxlciwgX2VtYmVyUnVu
dGltZVN5c3RlbVNlcnZpY2UsIF9lbWJlclJ1bnRpbWVFeHRSc3ZwLCBfZW1iZXJSdW50aW1lRXh0
U3RyaW5nLCBfZW1iZXJSdW50aW1lRXh0RnVuY3Rpb24sIF9lbWJlclJ1bnRpbWVVdGlscywgX2Vt
YmVyUnVudGltZU1peGluc1JlZ2lzdHJ5X3Byb3h5LCBfZW1iZXJSdW50aW1lTWl4aW5zQ29udGFp
bmVyX3Byb3h5LCBfZW1iZXJSdW50aW1lU3RyaW5nX3JlZ2lzdHJ5KSB7CisgIC8qKgorICBAbW9k
dWxlIGVtYmVyCisgIEBzdWJtb2R1bGUgZW1iZXItcnVudGltZQorICAqLworCisgIC8vIEJFR0lO
IElNUE9SVFMKKyAgJ3VzZSBzdHJpY3QnOworCisgIC8vIEVORCBJTVBPUlRTCisKKyAgLy8gQkVH
SU4gRVhQT1JUUworICBfZW1iZXJNZXRhbC5kZWZhdWx0LmNvbXBhcmUgPSBfZW1iZXJSdW50aW1l
Q29tcGFyZS5kZWZhdWx0OworICBfZW1iZXJNZXRhbC5kZWZhdWx0LmNvcHkgPSBfZW1iZXJSdW50
aW1lQ29weS5kZWZhdWx0OworICBfZW1iZXJNZXRhbC5kZWZhdWx0LmlzRXF1YWwgPSBfZW1iZXJS
dW50aW1lSXNFcXVhbC5kZWZhdWx0OworCisgIF9lbWJlck1ldGFsLmRlZmF1bHQuaW5qZWN0ID0g
X2VtYmVyUnVudGltZUluamVjdC5kZWZhdWx0OworCisgIF9lbWJlck1ldGFsLmRlZmF1bHQuQXJy
YXkgPSBfZW1iZXJSdW50aW1lTWl4aW5zQXJyYXkuZGVmYXVsdDsKKworICBfZW1iZXJNZXRhbC5k
ZWZhdWx0LkNvbXBhcmFibGUgPSBfZW1iZXJSdW50aW1lTWl4aW5zQ29tcGFyYWJsZS5kZWZhdWx0
OworICBfZW1iZXJNZXRhbC5kZWZhdWx0LkNvcHlhYmxlID0gX2VtYmVyUnVudGltZU1peGluc0Nv
cHlhYmxlLmRlZmF1bHQ7CisKKyAgX2VtYmVyTWV0YWwuZGVmYXVsdC5GcmVlemFibGUgPSBfZW1i
ZXJSdW50aW1lTWl4aW5zRnJlZXphYmxlLkZyZWV6YWJsZTsKKyAgX2VtYmVyTWV0YWwuZGVmYXVs
dC5GUk9aRU5fRVJST1IgPSBfZW1iZXJSdW50aW1lTWl4aW5zRnJlZXphYmxlLkZST1pFTl9FUlJP
UjsKKworICBfZW1iZXJNZXRhbC5kZWZhdWx0Lk11dGFibGVFbnVtZXJhYmxlID0gX2VtYmVyUnVu
dGltZU1peGluc011dGFibGVfZW51bWVyYWJsZS5kZWZhdWx0OworICBfZW1iZXJNZXRhbC5kZWZh
dWx0Lk11dGFibGVBcnJheSA9IF9lbWJlclJ1bnRpbWVNaXhpbnNNdXRhYmxlX2FycmF5LmRlZmF1
bHQ7CisKKyAgX2VtYmVyTWV0YWwuZGVmYXVsdC5UYXJnZXRBY3Rpb25TdXBwb3J0ID0gX2VtYmVy
UnVudGltZU1peGluc1RhcmdldF9hY3Rpb25fc3VwcG9ydC5kZWZhdWx0OworICBfZW1iZXJNZXRh
bC5kZWZhdWx0LkV2ZW50ZWQgPSBfZW1iZXJSdW50aW1lTWl4aW5zRXZlbnRlZC5kZWZhdWx0Owor
CisgIF9lbWJlck1ldGFsLmRlZmF1bHQuUHJvbWlzZVByb3h5TWl4aW4gPSBfZW1iZXJSdW50aW1l
TWl4aW5zUHJvbWlzZV9wcm94eS5kZWZhdWx0OworCisgIF9lbWJlck1ldGFsLmRlZmF1bHQuT2Jz
ZXJ2YWJsZSA9IF9lbWJlclJ1bnRpbWVNaXhpbnNPYnNlcnZhYmxlLmRlZmF1bHQ7CisKKyAgX2Vt
YmVyTWV0YWwuZGVmYXVsdC50eXBlT2YgPSBfZW1iZXJSdW50aW1lVXRpbHMudHlwZU9mOworICBf
ZW1iZXJNZXRhbC5kZWZhdWx0LmlzQXJyYXkgPSBfZW1iZXJSdW50aW1lVXRpbHMuaXNBcnJheTsK
KworICAvLyBFUzZUT0RPOiB0aGlzIHNlZW1zIGEgbGVzcyB0aGFuIGlkZWFsIHdheS9wbGFjZSB0
byBhZGQgcHJvcGVydGllcyB0byBFbWJlci5jb21wdXRlZAorICB2YXIgRW1Db21wdXRlZCA9IF9l
bWJlck1ldGFsLmRlZmF1bHQuY29tcHV0ZWQ7CisKKyAgRW1Db21wdXRlZC5zdW0gPSBfZW1iZXJS
dW50aW1lQ29tcHV0ZWRSZWR1Y2VfY29tcHV0ZWRfbWFjcm9zLnN1bTsKKyAgRW1Db21wdXRlZC5t
aW4gPSBfZW1iZXJSdW50aW1lQ29tcHV0ZWRSZWR1Y2VfY29tcHV0ZWRfbWFjcm9zLm1pbjsKKyAg
RW1Db21wdXRlZC5tYXggPSBfZW1iZXJSdW50aW1lQ29tcHV0ZWRSZWR1Y2VfY29tcHV0ZWRfbWFj
cm9zLm1heDsKKyAgRW1Db21wdXRlZC5tYXAgPSBfZW1iZXJSdW50aW1lQ29tcHV0ZWRSZWR1Y2Vf
Y29tcHV0ZWRfbWFjcm9zLm1hcDsKKyAgRW1Db21wdXRlZC5zb3J0ID0gX2VtYmVyUnVudGltZUNv
bXB1dGVkUmVkdWNlX2NvbXB1dGVkX21hY3Jvcy5zb3J0OworICBFbUNvbXB1dGVkLnNldERpZmYg
PSBfZW1iZXJSdW50aW1lQ29tcHV0ZWRSZWR1Y2VfY29tcHV0ZWRfbWFjcm9zLnNldERpZmY7Cisg
IEVtQ29tcHV0ZWQubWFwQnkgPSBfZW1iZXJSdW50aW1lQ29tcHV0ZWRSZWR1Y2VfY29tcHV0ZWRf
bWFjcm9zLm1hcEJ5OworICBFbUNvbXB1dGVkLmZpbHRlciA9IF9lbWJlclJ1bnRpbWVDb21wdXRl
ZFJlZHVjZV9jb21wdXRlZF9tYWNyb3MuZmlsdGVyOworICBFbUNvbXB1dGVkLmZpbHRlckJ5ID0g
X2VtYmVyUnVudGltZUNvbXB1dGVkUmVkdWNlX2NvbXB1dGVkX21hY3Jvcy5maWx0ZXJCeTsKKyAg
RW1Db21wdXRlZC51bmlxID0gX2VtYmVyUnVudGltZUNvbXB1dGVkUmVkdWNlX2NvbXB1dGVkX21h
Y3Jvcy51bmlxOworCisgIEVtQ29tcHV0ZWQudW5pb24gPSBfZW1iZXJSdW50aW1lQ29tcHV0ZWRS
ZWR1Y2VfY29tcHV0ZWRfbWFjcm9zLnVuaW9uOworICBFbUNvbXB1dGVkLmludGVyc2VjdCA9IF9l
bWJlclJ1bnRpbWVDb21wdXRlZFJlZHVjZV9jb21wdXRlZF9tYWNyb3MuaW50ZXJzZWN0OworICBF
bUNvbXB1dGVkLmNvbGxlY3QgPSBfZW1iZXJSdW50aW1lQ29tcHV0ZWRSZWR1Y2VfY29tcHV0ZWRf
bWFjcm9zLmNvbGxlY3Q7CisKKyAgX2VtYmVyTWV0YWwuZGVmYXVsdC5TdHJpbmcgPSBfZW1iZXJS
dW50aW1lU3lzdGVtU3RyaW5nLmRlZmF1bHQ7CisgIF9lbWJlck1ldGFsLmRlZmF1bHQuT2JqZWN0
ID0gX2VtYmVyUnVudGltZVN5c3RlbU9iamVjdC5kZWZhdWx0OworICBfZW1iZXJNZXRhbC5kZWZh
dWx0LkNvbnRhaW5lciA9IF9lbWJlclJ1bnRpbWVTeXN0ZW1Db250YWluZXIuQ29udGFpbmVyOwor
ICBfZW1iZXJNZXRhbC5kZWZhdWx0LlJlZ2lzdHJ5ID0gX2VtYmVyUnVudGltZVN5c3RlbUNvbnRh
aW5lci5SZWdpc3RyeTsKKworICBfZW1iZXJNZXRhbC5kZWZhdWx0LmdldE93bmVyID0gX2VtYmVy
UnVudGltZVN5c3RlbUNvbnRhaW5lci5nZXRPd25lcjsKKyAgX2VtYmVyTWV0YWwuZGVmYXVsdC5z
ZXRPd25lciA9IF9lbWJlclJ1bnRpbWVTeXN0ZW1Db250YWluZXIuc2V0T3duZXI7CisKKyAgX2Vt
YmVyTWV0YWwuZGVmYXVsdC5fUmVnaXN0cnlQcm94eU1peGluID0gX2VtYmVyUnVudGltZU1peGlu
c1JlZ2lzdHJ5X3Byb3h5LmRlZmF1bHQ7CisgIF9lbWJlck1ldGFsLmRlZmF1bHQuX0NvbnRhaW5l
clByb3h5TWl4aW4gPSBfZW1iZXJSdW50aW1lTWl4aW5zQ29udGFpbmVyX3Byb3h5LmRlZmF1bHQ7
CisKKyAgX2VtYmVyTWV0YWwuZGVmYXVsdC5OYW1lc3BhY2UgPSBfZW1iZXJSdW50aW1lU3lzdGVt
TmFtZXNwYWNlLmRlZmF1bHQ7CisgIF9lbWJlck1ldGFsLmRlZmF1bHQuRW51bWVyYWJsZSA9IF9l
bWJlclJ1bnRpbWVNaXhpbnNFbnVtZXJhYmxlLmRlZmF1bHQ7CisgIF9lbWJlck1ldGFsLmRlZmF1
bHQuQXJyYXlQcm94eSA9IF9lbWJlclJ1bnRpbWVTeXN0ZW1BcnJheV9wcm94eS5kZWZhdWx0Owor
ICBfZW1iZXJNZXRhbC5kZWZhdWx0Lk9iamVjdFByb3h5ID0gX2VtYmVyUnVudGltZVN5c3RlbU9i
amVjdF9wcm94eS5kZWZhdWx0OworICBfZW1iZXJNZXRhbC5kZWZhdWx0LkFjdGlvbkhhbmRsZXIg
PSBfZW1iZXJSdW50aW1lTWl4aW5zQWN0aW9uX2hhbmRsZXIuZGVmYXVsdDsKKyAgX2VtYmVyTWV0
YWwuZGVmYXVsdC5Db3JlT2JqZWN0ID0gX2VtYmVyUnVudGltZVN5c3RlbUNvcmVfb2JqZWN0LmRl
ZmF1bHQ7CisgIF9lbWJlck1ldGFsLmRlZmF1bHQuTmF0aXZlQXJyYXkgPSBfZW1iZXJSdW50aW1l
U3lzdGVtTmF0aXZlX2FycmF5LmRlZmF1bHQ7CisgIC8vIEVTNlRPRE86IEN1cnJlbnRseSB3ZSBt
dXN0IHJlbHkgb24gdGhlIGdsb2JhbCBmcm9tIGVtYmVyLW1ldGFsL2NvcmUgdG8gYXZvaWQgY2ly
Y3VsYXIgZGVwcworICAvLyBFbWJlci5BID0gQTsKKyAgX2VtYmVyTWV0YWwuZGVmYXVsdC5vbkxv
YWQgPSBfZW1iZXJSdW50aW1lU3lzdGVtTGF6eV9sb2FkLm9uTG9hZDsKKyAgX2VtYmVyTWV0YWwu
ZGVmYXVsdC5ydW5Mb2FkSG9va3MgPSBfZW1iZXJSdW50aW1lU3lzdGVtTGF6eV9sb2FkLnJ1bkxv
YWRIb29rczsKKworICBfZW1iZXJNZXRhbC5kZWZhdWx0LkNvbnRyb2xsZXIgPSBfZW1iZXJSdW50
aW1lQ29udHJvbGxlcnNDb250cm9sbGVyLmRlZmF1bHQ7CisgIF9lbWJlck1ldGFsLmRlZmF1bHQu
Q29udHJvbGxlck1peGluID0gX2VtYmVyUnVudGltZU1peGluc0NvbnRyb2xsZXIuZGVmYXVsdDsK
KworICBfZW1iZXJNZXRhbC5kZWZhdWx0LlNlcnZpY2UgPSBfZW1iZXJSdW50aW1lU3lzdGVtU2Vy
dmljZS5kZWZhdWx0OworCisgIF9lbWJlck1ldGFsLmRlZmF1bHQuX1Byb3h5TWl4aW4gPSBfZW1i
ZXJSdW50aW1lTWl4aW5zUHJveHkuZGVmYXVsdDsKKworICBfZW1iZXJNZXRhbC5kZWZhdWx0LlJT
VlAgPSBfZW1iZXJSdW50aW1lRXh0UnN2cC5kZWZhdWx0OworICAvLyBFTkQgRVhQT1JUUworCisg
IC8qKgorICAgIERlZmluZXMgdGhlIGhhc2ggb2YgbG9jYWxpemVkIHN0cmluZ3MgZm9yIHRoZSBj
dXJyZW50IGxhbmd1YWdlLiBVc2VkIGJ5CisgICAgdGhlIGBFbWJlci5TdHJpbmcubG9jKClgIGhl
bHBlci4gVG8gbG9jYWxpemUsIGFkZCBzdHJpbmcgdmFsdWVzIHRvIHRoaXMKKyAgICBoYXNoLgor
ICAKKyAgICBAcHJvcGVydHkgU1RSSU5HUworICAgIEBmb3IgRW1iZXIKKyAgICBAdHlwZSBPYmpl
Y3QKKyAgICBAcHJpdmF0ZQorICAqLworICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2VtYmVyTWV0
YWwuZGVmYXVsdCwgJ1NUUklOR1MnLCB7CisgICAgY29uZmlndXJhYmxlOiBmYWxzZSwKKyAgICBn
ZXQ6IF9lbWJlclJ1bnRpbWVTdHJpbmdfcmVnaXN0cnkuZ2V0U3RyaW5ncywKKyAgICBzZXQ6IF9l
bWJlclJ1bnRpbWVTdHJpbmdfcmVnaXN0cnkuc2V0U3RyaW5ncworICB9KTsKKworICBleHBvcnRz
LmRlZmF1bHQgPSBfZW1iZXJNZXRhbC5kZWZhdWx0OworfSk7CisvLyBqdXN0IGZvciBzaWRlIGVm
ZmVjdCBvZiBleHRlbmRpbmcgRW1iZXIuUlNWUAorLy8ganVzdCBmb3Igc2lkZSBlZmZlY3Qgb2Yg
ZXh0ZW5kaW5nIFN0cmluZy5wcm90b3R5cGUKKy8vIGp1c3QgZm9yIHNpZGUgZWZmZWN0IG9mIGV4
dGVuZGluZyBGdW5jdGlvbi5wcm90b3R5cGUKK2VuaWZlZCgnZW1iZXItcnVudGltZS9pbmplY3Qn
LCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvZGVidWcnLCAnZW1iZXItbWV0YWwvaW5qZWN0ZWRf
cHJvcGVydHknXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsRGVidWcsIF9lbWJlck1l
dGFsSW5qZWN0ZWRfcHJvcGVydHkpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIGV4cG9ydHMuZGVm
YXVsdCA9IGluamVjdDsKKyAgZXhwb3J0cy5jcmVhdGVJbmplY3Rpb25IZWxwZXIgPSBjcmVhdGVJ
bmplY3Rpb25IZWxwZXI7CisgIGV4cG9ydHMudmFsaWRhdGVQcm9wZXJ0eUluamVjdGlvbnMgPSB2
YWxpZGF0ZVByb3BlcnR5SW5qZWN0aW9uczsKKworICAvKioKKyAgICBOYW1lc3BhY2UgZm9yIGlu
amVjdGlvbiBoZWxwZXIgbWV0aG9kcy4KKyAgCisgICAgQGNsYXNzIGluamVjdAorICAgIEBuYW1l
c3BhY2UgRW1iZXIKKyAgICBAc3RhdGljCisgICAgQHB1YmxpYworICAqLworCisgIGZ1bmN0aW9u
IGluamVjdCgpIHsKKyAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnSW5qZWN0ZWQgcHJvcGVy
dGllcyBtdXN0IGJlIGNyZWF0ZWQgdGhyb3VnaCBoZWxwZXJzLCBzZWUgXCcnICsgT2JqZWN0Lmtl
eXMoaW5qZWN0KS5qb2luKCciJywgJyInKSArICdcJycpOworICB9CisKKyAgLy8gRGljdGlvbmFy
eSBvZiBpbmplY3Rpb24gdmFsaWRhdGlvbnMgYnkgdHlwZSwgYWRkZWQgdG8gYnkgYGNyZWF0ZUlu
amVjdGlvbkhlbHBlcmAKKyAgdmFyIHR5cGVWYWxpZGF0b3JzID0ge307CisKKyAgLyoqCisgICAg
VGhpcyBtZXRob2QgYWxsb3dzIG90aGVyIEVtYmVyIG1vZHVsZXMgdG8gcmVnaXN0ZXIgaW5qZWN0
aW9uIGhlbHBlcnMgZm9yIGEKKyAgICBnaXZlbiBjb250YWluZXIgdHlwZS4gSGVscGVycyBhcmUg
ZXhwb3J0ZWQgdG8gdGhlIGBpbmplY3RgIG5hbWVzcGFjZSBhcyB0aGUKKyAgICBjb250YWluZXIg
dHlwZSBpdHNlbGYuCisgIAorICAgIEBwcml2YXRlCisgICAgQG1ldGhvZCBjcmVhdGVJbmplY3Rp
b25IZWxwZXIKKyAgICBAc2luY2UgMS4xMC4wCisgICAgQGZvciBFbWJlcgorICAgIEBwYXJhbSB7
U3RyaW5nfSB0eXBlIFRoZSBjb250YWluZXIgdHlwZSB0aGUgaGVscGVyIHdpbGwgaW5qZWN0Cisg
ICAgQHBhcmFtIHtGdW5jdGlvbn0gdmFsaWRhdG9yIEEgdmFsaWRhdGlvbiBjYWxsYmFjayB0aGF0
IGlzIGV4ZWN1dGVkIGF0IG1peGluLXRpbWUKKyAgKi8KKworICBmdW5jdGlvbiBjcmVhdGVJbmpl
Y3Rpb25IZWxwZXIodHlwZSwgdmFsaWRhdG9yKSB7CisgICAgdHlwZVZhbGlkYXRvcnNbdHlwZV0g
PSB2YWxpZGF0b3I7CisKKyAgICBpbmplY3RbdHlwZV0gPSBmdW5jdGlvbiAobmFtZSkgeworICAg
ICAgcmV0dXJuIG5ldyBfZW1iZXJNZXRhbEluamVjdGVkX3Byb3BlcnR5LmRlZmF1bHQodHlwZSwg
bmFtZSk7CisgICAgfTsKKyAgfQorCisgIC8qKgorICAgIFZhbGlkYXRpb24gZnVuY3Rpb24gdGhh
dCBydW5zIHBlci10eXBlIHZhbGlkYXRpb24gZnVuY3Rpb25zIG9uY2UgZm9yIGVhY2gKKyAgICBp
bmplY3RlZCB0eXBlIGVuY291bnRlcmVkLgorICAKKyAgICBAcHJpdmF0ZQorICAgIEBtZXRob2Qg
dmFsaWRhdGVQcm9wZXJ0eUluamVjdGlvbnMKKyAgICBAc2luY2UgMS4xMC4wCisgICAgQGZvciBF
bWJlcgorICAgIEBwYXJhbSB7T2JqZWN0fSBmYWN0b3J5IFRoZSBmYWN0b3J5IG9iamVjdAorICAq
LworCisgIGZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydHlJbmplY3Rpb25zKGZhY3RvcnkpIHsKKyAg
ICB2YXIgcHJvdG8gPSBmYWN0b3J5LnByb3RvKCk7CisgICAgdmFyIHR5cGVzID0gW107CisgICAg
dmFyIGtleSwgZGVzYywgdmFsaWRhdG9yLCBpLCBsOworCisgICAgZm9yIChrZXkgaW4gcHJvdG8p
IHsKKyAgICAgIGRlc2MgPSBwcm90b1trZXldOworICAgICAgaWYgKGRlc2MgaW5zdGFuY2VvZiBf
ZW1iZXJNZXRhbEluamVjdGVkX3Byb3BlcnR5LmRlZmF1bHQgJiYgdHlwZXMuaW5kZXhPZihkZXNj
LnR5cGUpID09PSAtMSkgeworICAgICAgICB0eXBlcy5wdXNoKGRlc2MudHlwZSk7CisgICAgICB9
CisgICAgfQorCisgICAgaWYgKHR5cGVzLmxlbmd0aCkgeworICAgICAgZm9yIChpID0gMCwgbCA9
IHR5cGVzLmxlbmd0aDsgaSA8IGw7IGkrKykgeworICAgICAgICB2YWxpZGF0b3IgPSB0eXBlVmFs
aWRhdG9yc1t0eXBlc1tpXV07CisKKyAgICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0b3IgPT09ICdm
dW5jdGlvbicpIHsKKyAgICAgICAgICB2YWxpZGF0b3IoZmFjdG9yeSk7CisgICAgICAgIH0KKyAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorfSk7CitlbmlmZWQoJ2VtYmVy
LXJ1bnRpbWUvaXMtZXF1YWwnLCBbJ2V4cG9ydHMnXSwgZnVuY3Rpb24gKGV4cG9ydHMpIHsKKyAg
LyoqCisgICAgQ29tcGFyZXMgdHdvIG9iamVjdHMsIHJldHVybmluZyB0cnVlIGlmIHRoZXkgYXJl
IGVxdWFsLgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgRW1iZXIuaXNFcXVhbCgnaGVsbG8n
LCAnaGVsbG8nKTsgICAgICAgICAgICAgICAgICAgLy8gdHJ1ZQorICAgIEVtYmVyLmlzRXF1YWwo
MSwgMik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZhbHNlCisgICAgYGBgCisg
IAorICAgIGBpc0VxdWFsYCBpcyBhIG1vcmUgc3BlY2lmaWMgY29tcGFyaXNvbiB0aGFuIGEgdHJp
cGxlIGVxdWFsIGNvbXBhcmlzb24uCisgICAgSXQgd2lsbCBjYWxsIHRoZSBgaXNFcXVhbGAgaW5z
dGFuY2UgbWV0aG9kIG9uIHRoZSBvYmplY3RzIGJlaW5nCisgICAgY29tcGFyZWQsIGFsbG93aW5n
IGZpbmVyIGNvbnRyb2wgb3ZlciB3aGVuIG9iamVjdHMgc2hvdWxkIGJlIGNvbnNpZGVyZWQKKyAg
ICBlcXVhbCB0byBlYWNoIG90aGVyLgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgbGV0IFBl
cnNvbiA9IEVtYmVyLk9iamVjdC5leHRlbmQoeworICAgICAgaXNFcXVhbChvdGhlcikgeyByZXR1
cm4gdGhpcy5zc24gPT0gb3RoZXIuc3NuOyB9CisgICAgfSk7CisgIAorICAgIGxldCBwZXJzb25B
ID0gUGVyc29uLmNyZWF0ZSh7bmFtZTogJ011aGFtbWFkIEFsaScsIHNzbjogJzEyMy00NS02Nzg5
J30pOworICAgIGxldCBwZXJzb25CID0gUGVyc29uLmNyZWF0ZSh7bmFtZTogJ0Nhc3NpdXMgQ2xh
eScsIHNzbjogJzEyMy00NS02Nzg5J30pOworICAKKyAgICBFbWJlci5pc0VxdWFsKHBlcnNvbkEs
IHBlcnNvbkIpOyAvLyB0cnVlCisgICAgYGBgCisgIAorICAgIER1ZSB0byB0aGUgZXhwZW5zZSBv
ZiBhcnJheSBjb21wYXJpc29ucywgY29sbGVjdGlvbnMgd2lsbCBuZXZlciBiZSBlcXVhbCB0bwor
ICAgIGVhY2ggb3RoZXIgZXZlbiBpZiBlYWNoIG9mIHRoZWlyIGl0ZW1zIGFyZSBlcXVhbCB0byBl
YWNoIG90aGVyLgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgRW1iZXIuaXNFcXVhbChbNCwg
Ml0sIFs0LCAyXSk7ICAgICAgICAgICAgICAgICAgICAgLy8gZmFsc2UKKyAgICBgYGAKKyAgCisg
ICAgQG1ldGhvZCBpc0VxdWFsCisgICAgQGZvciBFbWJlcgorICAgIEBwYXJhbSB7T2JqZWN0fSBh
IGZpcnN0IG9iamVjdCB0byBjb21wYXJlCisgICAgQHBhcmFtIHtPYmplY3R9IGIgc2Vjb25kIG9i
amVjdCB0byBjb21wYXJlCisgICAgQHJldHVybiB7Qm9vbGVhbn0KKyAgICBAcHVibGljCisgICov
CisgICd1c2Ugc3RyaWN0JzsKKworICBleHBvcnRzLmRlZmF1bHQgPSBpc0VxdWFsOworCisgIGZ1
bmN0aW9uIGlzRXF1YWwoYSwgYikgeworICAgIGlmIChhICYmIHR5cGVvZiBhLmlzRXF1YWwgPT09
ICdmdW5jdGlvbicpIHsKKyAgICAgIHJldHVybiBhLmlzRXF1YWwoYik7CisgICAgfQorCisgICAg
aWYgKGEgaW5zdGFuY2VvZiBEYXRlICYmIGIgaW5zdGFuY2VvZiBEYXRlKSB7CisgICAgICByZXR1
cm4gYS5nZXRUaW1lKCkgPT09IGIuZ2V0VGltZSgpOworICAgIH0KKworICAgIHJldHVybiBhID09
PSBiOworICB9Cit9KTsKK2VuaWZlZCgnZW1iZXItcnVudGltZS9taXhpbnMvLXByb3h5JywgWydl
eHBvcnRzJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCcs
ICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9zZXQnLCAnZW1iZXItbWV0YWwvbWV0YScsICdlbWJlci1t
ZXRhbC9vYnNlcnZlcicsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9ldmVudHMnLCAnZW1iZXItbWV0
YWwvY29tcHV0ZWQnLCAnZW1iZXItbWV0YWwvcHJvcGVydGllcycsICdlbWJlci1tZXRhbC9taXhp
bicsICdlbWJlci1tZXRhbC9zeW1ib2wnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFs
RGVidWcsIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LCBfZW1iZXJNZXRhbFByb3BlcnR5X3NldCwg
X2VtYmVyTWV0YWxNZXRhLCBfZW1iZXJNZXRhbE9ic2VydmVyLCBfZW1iZXJNZXRhbFByb3BlcnR5
X2V2ZW50cywgX2VtYmVyTWV0YWxDb21wdXRlZCwgX2VtYmVyTWV0YWxQcm9wZXJ0aWVzLCBfZW1i
ZXJNZXRhbE1peGluLCBfZW1iZXJNZXRhbFN5bWJvbCkgeworICAvKioKKyAgQG1vZHVsZSBlbWJl
cgorICBAc3VibW9kdWxlIGVtYmVyLXJ1bnRpbWUKKyAgKi8KKworICAndXNlIHN0cmljdCc7CisK
KyAgdmFyIF9NaXhpbiRjcmVhdGU7CisKKyAgZXhwb3J0cy5pc1Byb3h5ID0gaXNQcm94eTsKKwor
ICB2YXIgSVNfUFJPWFkgPSBfZW1iZXJNZXRhbFN5bWJvbC5kZWZhdWx0KCdJU19QUk9YWScpOwor
CisgIGZ1bmN0aW9uIGlzUHJveHkodmFsdWUpIHsKKyAgICByZXR1cm4gdmFsdWUgJiYgdmFsdWVb
SVNfUFJPWFldOworICB9CisKKyAgZnVuY3Rpb24gY29udGVudFByb3BlcnR5V2lsbENoYW5nZShj
b250ZW50LCBjb250ZW50S2V5KSB7CisgICAgdmFyIGtleSA9IGNvbnRlbnRLZXkuc2xpY2UoOCk7
IC8vIHJlbW92ZSAiY29udGVudC4iCisgICAgaWYgKGtleSBpbiB0aGlzKSB7CisgICAgICByZXR1
cm47CisgICAgfSAvLyBpZiBzaGFkb3dlZCBpbiBwcm94eQorICAgIF9lbWJlck1ldGFsUHJvcGVy
dHlfZXZlbnRzLnByb3BlcnR5V2lsbENoYW5nZSh0aGlzLCBrZXkpOworICB9CisKKyAgZnVuY3Rp
b24gY29udGVudFByb3BlcnR5RGlkQ2hhbmdlKGNvbnRlbnQsIGNvbnRlbnRLZXkpIHsKKyAgICB2
YXIga2V5ID0gY29udGVudEtleS5zbGljZSg4KTsgLy8gcmVtb3ZlICJjb250ZW50LiIKKyAgICBp
ZiAoa2V5IGluIHRoaXMpIHsKKyAgICAgIHJldHVybjsKKyAgICB9IC8vIGlmIHNoYWRvd2VkIGlu
IHByb3h5CisgICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9ldmVudHMucHJvcGVydHlEaWRDaGFuZ2Uo
dGhpcywga2V5KTsKKyAgfQorCisgIC8qKgorICAgIGBFbWJlci5Qcm94eU1peGluYCBmb3J3YXJk
cyBhbGwgcHJvcGVydGllcyBub3QgZGVmaW5lZCBieSB0aGUgcHJveHkgaXRzZWxmCisgICAgdG8g
YSBwcm94aWVkIGBjb250ZW50YCBvYmplY3QuICBTZWUgRW1iZXIuT2JqZWN0UHJveHkgZm9yIG1v
cmUgZGV0YWlscy4KKyAgCisgICAgQGNsYXNzIFByb3h5TWl4aW4KKyAgICBAbmFtZXNwYWNlIEVt
YmVyCisgICAgQHByaXZhdGUKKyAgKi8KKyAgZXhwb3J0cy5kZWZhdWx0ID0gX2VtYmVyTWV0YWxN
aXhpbi5NaXhpbi5jcmVhdGUoKF9NaXhpbiRjcmVhdGUgPSB7fSwgX01peGluJGNyZWF0ZVtJU19Q
Uk9YWV0gPSB0cnVlLCBfTWl4aW4kY3JlYXRlLmNvbnRlbnQgPSBudWxsLCBfTWl4aW4kY3JlYXRl
Ll9jb250ZW50RGlkQ2hhbmdlID0gX2VtYmVyTWV0YWxNaXhpbi5vYnNlcnZlcignY29udGVudCcs
IGZ1bmN0aW9uICgpIHsKKyAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnQ2FuXCd0IHNldCBQ
cm94eVwncyBjb250ZW50IHRvIGl0c2VsZicsIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0
aGlzLCAnY29udGVudCcpICE9PSB0aGlzKTsKKyAgfSksIF9NaXhpbiRjcmVhdGUuaXNUcnV0aHkg
PSBfZW1iZXJNZXRhbENvbXB1dGVkLmNvbXB1dGVkLmJvb2woJ2NvbnRlbnQnKSwgX01peGluJGNy
ZWF0ZS5fZGVidWdDb250YWluZXJLZXkgPSBudWxsLCBfTWl4aW4kY3JlYXRlLndpbGxXYXRjaFBy
b3BlcnR5ID0gZnVuY3Rpb24gKGtleSkgeworICAgIHZhciBjb250ZW50S2V5ID0gJ2NvbnRlbnQu
JyArIGtleTsKKyAgICBfZW1iZXJNZXRhbE9ic2VydmVyLl9hZGRCZWZvcmVPYnNlcnZlcih0aGlz
LCBjb250ZW50S2V5LCBudWxsLCBjb250ZW50UHJvcGVydHlXaWxsQ2hhbmdlKTsKKyAgICBfZW1i
ZXJNZXRhbE9ic2VydmVyLmFkZE9ic2VydmVyKHRoaXMsIGNvbnRlbnRLZXksIG51bGwsIGNvbnRl
bnRQcm9wZXJ0eURpZENoYW5nZSk7CisgIH0sIF9NaXhpbiRjcmVhdGUuZGlkVW53YXRjaFByb3Bl
cnR5ID0gZnVuY3Rpb24gKGtleSkgeworICAgIHZhciBjb250ZW50S2V5ID0gJ2NvbnRlbnQuJyAr
IGtleTsKKyAgICBfZW1iZXJNZXRhbE9ic2VydmVyLl9yZW1vdmVCZWZvcmVPYnNlcnZlcih0aGlz
LCBjb250ZW50S2V5LCBudWxsLCBjb250ZW50UHJvcGVydHlXaWxsQ2hhbmdlKTsKKyAgICBfZW1i
ZXJNZXRhbE9ic2VydmVyLnJlbW92ZU9ic2VydmVyKHRoaXMsIGNvbnRlbnRLZXksIG51bGwsIGNv
bnRlbnRQcm9wZXJ0eURpZENoYW5nZSk7CisgIH0sIF9NaXhpbiRjcmVhdGUudW5rbm93blByb3Bl
cnR5ID0gZnVuY3Rpb24gKGtleSkgeworICAgIHZhciBjb250ZW50ID0gX2VtYmVyTWV0YWxQcm9w
ZXJ0eV9nZXQuZ2V0KHRoaXMsICdjb250ZW50Jyk7CisgICAgaWYgKGNvbnRlbnQpIHsKKyAgICAg
IF9lbWJlck1ldGFsRGVidWcuZGVwcmVjYXRlKCdZb3UgYXR0ZW1wdGVkIHRvIGFjY2VzcyBgJyAr
IGtleSArICdgIGZyb20gYCcgKyB0aGlzICsgJ2AsIGJ1dCBvYmplY3QgcHJveHlpbmcgaXMgZGVw
cmVjYXRlZC4gUGxlYXNlIHVzZSBgbW9kZWwuJyArIGtleSArICdgIGluc3RlYWQuJywgIXRoaXMu
aXNDb250cm9sbGVyLCB7IGlkOiAnZW1iZXItcnVudGltZS5jb250cm9sbGVyLXByb3h5JywgdW50
aWw6ICczLjAuMCcgfSk7CisgICAgICByZXR1cm4gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0
KGNvbnRlbnQsIGtleSk7CisgICAgfQorICB9LCBfTWl4aW4kY3JlYXRlLnNldFVua25vd25Qcm9w
ZXJ0eSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7CisgICAgdmFyIG0gPSBfZW1iZXJNZXRhbE1l
dGEubWV0YSh0aGlzKTsKKyAgICBpZiAobS5wcm90byA9PT0gdGhpcykgeworICAgICAgLy8gaWYg
bWFya2VkIGFzIHByb3RvdHlwZSB0aGVuIGp1c3QgZGVmaW5lUHJvcGVydHkKKyAgICAgIC8vIHJh
dGhlciB0aGFuIGRlbGVnYXRlCisgICAgICBfZW1iZXJNZXRhbFByb3BlcnRpZXMuZGVmaW5lUHJv
cGVydHkodGhpcywga2V5LCBudWxsLCB2YWx1ZSk7CisgICAgICByZXR1cm4gdmFsdWU7CisgICAg
fQorCisgICAgdmFyIGNvbnRlbnQgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywg
J2NvbnRlbnQnKTsKKyAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnQ2Fubm90IGRlbGVnYXRl
IHNldChcJycgKyBrZXkgKyAnXCcsICcgKyB2YWx1ZSArICcpIHRvIHRoZSBcJ2NvbnRlbnRcJyBw
cm9wZXJ0eSBvZiBvYmplY3QgcHJveHkgJyArIHRoaXMgKyAnOiBpdHMgXCdjb250ZW50XCcgaXMg
dW5kZWZpbmVkLicsIGNvbnRlbnQpOworCisgICAgX2VtYmVyTWV0YWxEZWJ1Zy5kZXByZWNhdGUo
J1lvdSBhdHRlbXB0ZWQgdG8gc2V0IGAnICsga2V5ICsgJ2AgZnJvbSBgJyArIHRoaXMgKyAnYCwg
YnV0IG9iamVjdCBwcm94eWluZyBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIGBtb2RlbC4nICsg
a2V5ICsgJ2AgaW5zdGVhZC4nLCAhdGhpcy5pc0NvbnRyb2xsZXIsIHsgaWQ6ICdlbWJlci1ydW50
aW1lLmNvbnRyb2xsZXItcHJveHknLCB1bnRpbDogJzMuMC4wJyB9KTsKKyAgICByZXR1cm4gX2Vt
YmVyTWV0YWxQcm9wZXJ0eV9zZXQuc2V0KGNvbnRlbnQsIGtleSwgdmFsdWUpOworICB9LCBfTWl4
aW4kY3JlYXRlKSk7Cit9KTsKKworLyoqCisgIFRoZSBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyB3
aWxsIGJlIGZvcndhcmRlZC4KKyAgIEBwcm9wZXJ0eSBjb250ZW50CisgIEB0eXBlIEVtYmVyLk9i
amVjdAorICBAZGVmYXVsdCBudWxsCisgIEBwcml2YXRlCisqLworZW5pZmVkKCdlbWJlci1ydW50
aW1lL21peGlucy9hY3Rpb25faGFuZGxlcicsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9kZWJ1
ZycsICdlbWJlci1tZXRhbC9taXhpbicsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQnXSwgZnVu
Y3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsRGVidWcsIF9lbWJlck1ldGFsTWl4aW4sIF9lbWJl
ck1ldGFsUHJvcGVydHlfZ2V0KSB7CisgIC8qKgorICBAbW9kdWxlIGVtYmVyCisgIEBzdWJtb2R1
bGUgZW1iZXItcnVudGltZQorICAqLworCisgICd1c2Ugc3RyaWN0JzsKKworICBleHBvcnRzLmRl
cHJlY2F0ZVVuZGVyc2NvcmVBY3Rpb25zID0gZGVwcmVjYXRlVW5kZXJzY29yZUFjdGlvbnM7CisK
KyAgLyoqCisgICAgYEVtYmVyLkFjdGlvbkhhbmRsZXJgIGlzIGF2YWlsYWJsZSBvbiBzb21lIGZh
bWlsaWFyIGNsYXNzZXMgaW5jbHVkaW5nCisgICAgYEVtYmVyLlJvdXRlYCwgYEVtYmVyLlZpZXdg
LCBgRW1iZXIuQ29tcG9uZW50YCwgYW5kIGBFbWJlci5Db250cm9sbGVyYC4KKyAgICAoSW50ZXJu
YWxseSB0aGUgbWl4aW4gaXMgdXNlZCBieSBgRW1iZXIuQ29yZVZpZXdgLCBgRW1iZXIuQ29udHJv
bGxlck1peGluYCwKKyAgICBhbmQgYEVtYmVyLlJvdXRlYCBhbmQgYXZhaWxhYmxlIHRvIHRoZSBh
Ym92ZSBjbGFzc2VzIHRocm91Z2gKKyAgICBpbmhlcml0YW5jZS4pCisgIAorICAgIEBjbGFzcyBB
Y3Rpb25IYW5kbGVyCisgICAgQG5hbWVzcGFjZSBFbWJlcgorICAgIEBwcml2YXRlCisgICovCisg
IHZhciBBY3Rpb25IYW5kbGVyID0gX2VtYmVyTWV0YWxNaXhpbi5NaXhpbi5jcmVhdGUoeworICAg
IG1lcmdlZFByb3BlcnRpZXM6IFsnYWN0aW9ucyddLAorCisgICAgLyoqCisgICAgICBUaGUgY29s
bGVjdGlvbiBvZiBmdW5jdGlvbnMsIGtleWVkIGJ5IG5hbWUsIGF2YWlsYWJsZSBvbiB0aGlzCisg
ICAgICBgQWN0aW9uSGFuZGxlcmAgYXMgYWN0aW9uIHRhcmdldHMuCisgICAgICAgVGhlc2UgZnVu
Y3Rpb25zIHdpbGwgYmUgaW52b2tlZCB3aGVuIGEgbWF0Y2hpbmcgYHt7YWN0aW9ufX1gIGlzIHRy
aWdnZXJlZAorICAgICAgZnJvbSB3aXRoaW4gYSB0ZW1wbGF0ZSBhbmQgdGhlIGFwcGxpY2F0aW9u
J3MgY3VycmVudCByb3V0ZSBpcyB0aGlzIHJvdXRlLgorICAgICAgIEFjdGlvbnMgY2FuIGFsc28g
YmUgaW52b2tlZCBmcm9tIG90aGVyIHBhcnRzIG9mIHlvdXIgYXBwbGljYXRpb24KKyAgICAgIHZp
YSBgQWN0aW9uSGFuZGxlciNzZW5kYC4KKyAgICAgICBUaGUgYGFjdGlvbnNgIGhhc2ggd2lsbCBp
bmhlcml0IGFjdGlvbiBoYW5kbGVycyBmcm9tCisgICAgICB0aGUgYGFjdGlvbnNgIGhhc2ggZGVm
aW5lZCBvbiBleHRlbmRlZCBwYXJlbnQgY2xhc3NlcworICAgICAgb3IgbWl4aW5zIHJhdGhlciB0
aGFuIGp1c3QgcmVwbGFjZSB0aGUgZW50aXJlIGhhc2gsIGUuZy46CisgICAgICAgYGBganMKKyAg
ICAgIEFwcC5DYW5EaXNwbGF5QmFubmVyID0gRW1iZXIuTWl4aW4uY3JlYXRlKHsKKyAgICAgICAg
YWN0aW9uczogeworICAgICAgICAgIGRpc3BsYXlCYW5uZXI6IGZ1bmN0aW9uKG1zZykgeworICAg
ICAgICAgICAgLy8gLi4uCisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9KTsKKyAgICAg
ICBBcHAuV2VsY29tZVJvdXRlID0gRW1iZXIuUm91dGUuZXh0ZW5kKEFwcC5DYW5EaXNwbGF5QmFu
bmVyLCB7CisgICAgICAgIGFjdGlvbnM6IHsKKyAgICAgICAgICBwbGF5TXVzaWM6IGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgLy8gLi4uCisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9
KTsKKyAgICAgICAvLyBgV2VsY29tZVJvdXRlYCwgd2hlbiBhY3RpdmUsIHdpbGwgYmUgYWJsZSB0
byByZXNwb25kCisgICAgICAvLyB0byBib3RoIGFjdGlvbnMsIHNpbmNlIHRoZSBhY3Rpb25zIGhh
c2ggaXMgbWVyZ2VkIHJhdGhlcgorICAgICAgLy8gdGhlbiByZXBsYWNlZCB3aGVuIGV4dGVuZGlu
ZyBtaXhpbnMgLyBwYXJlbnQgY2xhc3Nlcy4KKyAgICAgIHRoaXMuc2VuZCgnZGlzcGxheUJhbm5l
cicpOworICAgICAgdGhpcy5zZW5kKCdwbGF5TXVzaWMnKTsKKyAgICAgIGBgYAorICAgICAgIFdp
dGhpbiBhIENvbnRyb2xsZXIsIFJvdXRlLCBWaWV3IG9yIENvbXBvbmVudCdzIGFjdGlvbiBoYW5k
bGVyLAorICAgICAgdGhlIHZhbHVlIG9mIHRoZSBgdGhpc2AgY29udGV4dCBpcyB0aGUgQ29udHJv
bGxlciwgUm91dGUsIFZpZXcgb3IKKyAgICAgIENvbXBvbmVudCBvYmplY3Q6CisgICAgICAgYGBg
anMKKyAgICAgIEFwcC5Tb25nUm91dGUgPSBFbWJlci5Sb3V0ZS5leHRlbmQoeworICAgICAgICBh
Y3Rpb25zOiB7CisgICAgICAgICAgbXlBY3Rpb246IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
dGhpcy5jb250cm9sbGVyRm9yKCJzb25nIik7CisgICAgICAgICAgICB0aGlzLnRyYW5zaXRpb25U
bygib3RoZXIucm91dGUiKTsKKyAgICAgICAgICAgIC4uLgorICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgfSk7CisgICAgICBgYGAKKyAgICAgICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNh
bGwgYHRoaXMuX3N1cGVyKC4uLmFyZ3VtZW50cylgIGZyb20gd2l0aGluIGFuCisgICAgICBhY3Rp
b24gaGFuZGxlciBpZiBpdCBvdmVycmlkZXMgYSBoYW5kbGVyIGRlZmluZWQgb24gYSBwYXJlbnQK
KyAgICAgIGNsYXNzIG9yIG1peGluOgorICAgICAgIFRha2UgZm9yIGV4YW1wbGUgdGhlIGZvbGxv
d2luZyByb3V0ZXM6CisgICAgICAgYGBganMKKyAgICAgIEFwcC5EZWJ1Z1JvdXRlID0gRW1iZXIu
TWl4aW4uY3JlYXRlKHsKKyAgICAgICAgYWN0aW9uczogeworICAgICAgICAgIGRlYnVnUm91dGVJ
bmZvcm1hdGlvbjogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBjb25zb2xlLmRlYnVnKCJ0cm9s
b2xvIik7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9KTsKKyAgICAgICBBcHAuQW5u
b3lpbmdEZWJ1Z1JvdXRlID0gRW1iZXIuUm91dGUuZXh0ZW5kKEFwcC5EZWJ1Z1JvdXRlLCB7Cisg
ICAgICAgIGFjdGlvbnM6IHsKKyAgICAgICAgICBkZWJ1Z1JvdXRlSW5mb3JtYXRpb246IGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgLy8gYWxzbyBjYWxsIHRoZSBkZWJ1Z1JvdXRlSW5mb3JtYXRp
b24gb2YgbWl4ZWQgaW4gQXBwLkRlYnVnUm91dGUKKyAgICAgICAgICAgIHRoaXMuX3N1cGVyKC4u
LmFyZ3VtZW50cyk7CisgICAgICAgICAgICAgLy8gc2hvdyBhZGRpdGlvbmFsIGFubm95YW5jZQor
ICAgICAgICAgICAgd2luZG93LmFsZXJ0KC4uLik7CisgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICB9KTsKKyAgICAgIGBgYAorICAgICAgICMjIEJ1YmJsaW5nCisgICAgICAgQnkgZGVmYXVs
dCwgYW4gYWN0aW9uIHdpbGwgc3RvcCBidWJibGluZyBvbmNlIGEgaGFuZGxlciBkZWZpbmVkCisg
ICAgICBvbiB0aGUgYGFjdGlvbnNgIGhhc2ggaGFuZGxlcyBpdC4gVG8gY29udGludWUgYnViYmxp
bmcgdGhlIGFjdGlvbiwKKyAgICAgIHlvdSBtdXN0IHJldHVybiBgdHJ1ZWAgZnJvbSB0aGUgaGFu
ZGxlcjoKKyAgICAgICBgYGBqcworICAgICAgQXBwLlJvdXRlci5tYXAoZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHRoaXMucm91dGUoImFsYnVtIiwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgdGhpcy5y
b3V0ZSgic29uZyIpOworICAgICAgICB9KTsKKyAgICAgIH0pOworICAgICAgIEFwcC5BbGJ1bVJv
dXRlID0gRW1iZXIuUm91dGUuZXh0ZW5kKHsKKyAgICAgICAgYWN0aW9uczogeworICAgICAgICAg
IHN0YXJ0UGxheWluZzogZnVuY3Rpb24oKSB7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICB9KTsKKyAgICAgICBBcHAuQWxidW1Tb25nUm91dGUgPSBFbWJlci5Sb3V0ZS5leHRlbmQoewor
ICAgICAgICBhY3Rpb25zOiB7CisgICAgICAgICAgc3RhcnRQbGF5aW5nOiBmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgIC8vIC4uLgorICAgICAgICAgICAgIGlmIChhY3Rpb25TaG91bGRBbHNvQmVU
cmlnZ2VyZWRPblBhcmVudFJvdXRlKSB7CisgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSk7CisgICAgICBgYGAK
KyAgICAgICBAcHJvcGVydHkgYWN0aW9ucworICAgICAgQHR5cGUgT2JqZWN0CisgICAgICBAZGVm
YXVsdCBudWxsCisgICAgICBAcHVibGljCisgICAgKi8KKworICAgIC8qKgorICAgICAgVHJpZ2dl
cnMgYSBuYW1lZCBhY3Rpb24gb24gdGhlIGBBY3Rpb25IYW5kbGVyYC4gQW55IHBhcmFtZXRlcnMK
KyAgICAgIHN1cHBsaWVkIGFmdGVyIHRoZSBgYWN0aW9uTmFtZWAgc3RyaW5nIHdpbGwgYmUgcGFz
c2VkIGFzIGFyZ3VtZW50cworICAgICAgdG8gdGhlIGFjdGlvbiB0YXJnZXQgZnVuY3Rpb24uCisg
ICAgICAgSWYgdGhlIGBBY3Rpb25IYW5kbGVyYCBoYXMgaXRzIGB0YXJnZXRgIHByb3BlcnR5IHNl
dCwgYWN0aW9ucyBtYXkKKyAgICAgIGJ1YmJsZSB0byB0aGUgYHRhcmdldGAuIEJ1YmJsaW5nIGhh
cHBlbnMgd2hlbiBhbiBgYWN0aW9uTmFtZWAgY2FuCisgICAgICBub3QgYmUgZm91bmQgaW4gdGhl
IGBBY3Rpb25IYW5kbGVyYCdzIGBhY3Rpb25zYCBoYXNoIG9yIGlmIHRoZQorICAgICAgYWN0aW9u
IHRhcmdldCBmdW5jdGlvbiByZXR1cm5zIGB0cnVlYC4KKyAgICAgICBFeGFtcGxlCisgICAgICAg
YGBganMKKyAgICAgIEFwcC5XZWxjb21lUm91dGUgPSBFbWJlci5Sb3V0ZS5leHRlbmQoeworICAg
ICAgICBhY3Rpb25zOiB7CisgICAgICAgICAgcGxheVRoZW1lOiBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgICB0aGlzLnNlbmQoJ3BsYXlNdXNpYycsICd0aGVtZS5tcDMnKTsKKyAgICAgICAgICB9
LAorICAgICAgICAgIHBsYXlNdXNpYzogZnVuY3Rpb24odHJhY2spIHsKKyAgICAgICAgICAgIC8v
IC4uLgorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSk7CisgICAgICBgYGAKKyAgICAg
ICBAbWV0aG9kIHNlbmQKKyAgICAgIEBwYXJhbSB7U3RyaW5nfSBhY3Rpb25OYW1lIFRoZSBhY3Rp
b24gdG8gdHJpZ2dlcgorICAgICAgQHBhcmFtIHsqfSBjb250ZXh0IGEgY29udGV4dCB0byBzZW5k
IHdpdGggdGhlIGFjdGlvbgorICAgICAgQHB1YmxpYworICAgICovCisgICAgc2VuZDogZnVuY3Rp
b24gKGFjdGlvbk5hbWUpIHsKKyAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3Ro
LCBhcmdzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8
IF9sZW47IF9rZXkrKykgeworICAgICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5
XTsKKyAgICAgIH0KKworICAgICAgdmFyIHRhcmdldDsKKworICAgICAgaWYgKHRoaXMuYWN0aW9u
cyAmJiB0aGlzLmFjdGlvbnNbYWN0aW9uTmFtZV0pIHsKKyAgICAgICAgdmFyIHNob3VsZEJ1YmJs
ZSA9IHRoaXMuYWN0aW9uc1thY3Rpb25OYW1lXS5hcHBseSh0aGlzLCBhcmdzKSA9PT0gdHJ1ZTsK
KyAgICAgICAgaWYgKCFzaG91bGRCdWJibGUpIHsKKyAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgIH0KKworICAgICAgaWYgKHRhcmdldCA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0
LmdldCh0aGlzLCAndGFyZ2V0JykpIHsKKyAgICAgICAgdmFyIF90YXJnZXQ7CisKKyAgICAgICAg
X2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1RoZSBgdGFyZ2V0YCBmb3IgJyArIHRoaXMgKyAnICgn
ICsgdGFyZ2V0ICsgJykgZG9lcyBub3QgaGF2ZSBhIGBzZW5kYCBtZXRob2QnLCB0eXBlb2YgdGFy
Z2V0LnNlbmQgPT09ICdmdW5jdGlvbicpOworICAgICAgICAoX3RhcmdldCA9IHRhcmdldCkuc2Vu
ZC5hcHBseShfdGFyZ2V0LCBhcmd1bWVudHMpOworICAgICAgfQorICAgIH0sCisKKyAgICB3aWxs
TWVyZ2VNaXhpbjogZnVuY3Rpb24gKHByb3BzKSB7CisgICAgICBfZW1iZXJNZXRhbERlYnVnLmFz
c2VydCgnU3BlY2lmeWluZyBgX2FjdGlvbnNgIGFuZCBgYWN0aW9uc2AgaW4gdGhlIHNhbWUgbWl4
aW4gaXMgbm90IHN1cHBvcnRlZC4nLCAhcHJvcHMuYWN0aW9ucyB8fCAhcHJvcHMuX2FjdGlvbnMp
OworCisgICAgICBpZiAocHJvcHMuX2FjdGlvbnMpIHsKKyAgICAgICAgX2VtYmVyTWV0YWxEZWJ1
Zy5kZXByZWNhdGUoJ1NwZWNpZnlpbmcgYWN0aW9ucyBpbiBgX2FjdGlvbnNgIGlzIGRlcHJlY2F0
ZWQsIHBsZWFzZSB1c2UgYGFjdGlvbnNgIGluc3RlYWQuJywgZmFsc2UsIHsgaWQ6ICdlbWJlci1y
dW50aW1lLmFjdGlvbi1oYW5kbGVyLV9hY3Rpb25zJywgdW50aWw6ICczLjAuMCcgfSk7CisKKyAg
ICAgICAgcHJvcHMuYWN0aW9ucyA9IHByb3BzLl9hY3Rpb25zOworICAgICAgICBkZWxldGUgcHJv
cHMuX2FjdGlvbnM7CisgICAgICB9CisgICAgfQorICB9KTsKKworICBleHBvcnRzLmRlZmF1bHQg
PSBBY3Rpb25IYW5kbGVyOworCisgIGZ1bmN0aW9uIGRlcHJlY2F0ZVVuZGVyc2NvcmVBY3Rpb25z
KGZhY3RvcnkpIHsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZmFjdG9yeS5wcm90b3R5cGUs
ICdfYWN0aW9ucycsIHsKKyAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKKyAgICAgIGVudW1lcmFi
bGU6IGZhbHNlLAorICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgX2VtYmVy
TWV0YWxEZWJ1Zy5hc3NlcnQoJ1lvdSBjYW5ub3Qgc2V0IGBfYWN0aW9uc2Agb24gJyArIHRoaXMg
KyAnLCBwbGVhc2UgdXNlIGBhY3Rpb25zYCBpbnN0ZWFkLicpOworICAgICAgfSwKKyAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICBfZW1iZXJNZXRhbERlYnVnLmRlcHJlY2F0ZSgnVXNh
Z2Ugb2YgYF9hY3Rpb25zYCBpcyBkZXByZWNhdGVkLCB1c2UgYGFjdGlvbnNgIGluc3RlYWQuJywg
ZmFsc2UsIHsgaWQ6ICdlbWJlci1ydW50aW1lLmFjdGlvbi1oYW5kbGVyLV9hY3Rpb25zJywgdW50
aWw6ICczLjAuMCcgfSk7CisgICAgICAgIHJldHVybiBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5n
ZXQodGhpcywgJ2FjdGlvbnMnKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorfSk7CitlbmlmZWQo
J2VtYmVyLXJ1bnRpbWUvbWl4aW5zL2FycmF5JywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2Nv
cmUnLCAnZW1iZXItbWV0YWwvc3ltYm9sJywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCcsICdl
bWJlci1tZXRhbC9jb21wdXRlZCcsICdlbWJlci1tZXRhbC9pc19ub25lJywgJ2VtYmVyLXJ1bnRp
bWUvbWl4aW5zL2VudW1lcmFibGUnLCAnZW1iZXItbWV0YWwvbWl4aW4nLCAnZW1iZXItbWV0YWwv
cHJvcGVydHlfZXZlbnRzJywgJ2VtYmVyLW1ldGFsL2V2ZW50cycsICdlbWJlci1tZXRhbC9tZXRh
JywgJ2VtYmVyLW1ldGFsL3RhZ3MnLCAnZW1iZXItcnVudGltZS9zeXN0ZW0vZWFjaF9wcm94eSdd
LCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxDb3JlLCBfZW1iZXJNZXRhbFN5bWJvbCwg
X2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQsIF9lbWJlck1ldGFsQ29tcHV0ZWQsIF9lbWJlck1ldGFs
SXNfbm9uZSwgX2VtYmVyUnVudGltZU1peGluc0VudW1lcmFibGUsIF9lbWJlck1ldGFsTWl4aW4s
IF9lbWJlck1ldGFsUHJvcGVydHlfZXZlbnRzLCBfZW1iZXJNZXRhbEV2ZW50cywgX2VtYmVyTWV0
YWxNZXRhLCBfZW1iZXJNZXRhbFRhZ3MsIF9lbWJlclJ1bnRpbWVTeXN0ZW1FYWNoX3Byb3h5KSB7
CisgIC8qKgorICBAbW9kdWxlIGVtYmVyCisgIEBzdWJtb2R1bGUgZW1iZXItcnVudGltZQorICAq
LworCisgIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4KKyAgLy8gSEVMUEVSUworICAvLworICAndXNlIHN0cmljdCc7CisKKyAgdmFy
IF9NaXhpbiRjcmVhdGU7CisKKyAgZXhwb3J0cy5hZGRBcnJheU9ic2VydmVyID0gYWRkQXJyYXlP
YnNlcnZlcjsKKyAgZXhwb3J0cy5yZW1vdmVBcnJheU9ic2VydmVyID0gcmVtb3ZlQXJyYXlPYnNl
cnZlcjsKKyAgZXhwb3J0cy5vYmplY3RBdCA9IG9iamVjdEF0OworICBleHBvcnRzLmlzRW1iZXJB
cnJheSA9IGlzRW1iZXJBcnJheTsKKworICBmdW5jdGlvbiBhcnJheU9ic2VydmVyc0hlbHBlcihv
YmosIHRhcmdldCwgb3B0cywgb3BlcmF0aW9uLCBub3RpZnkpIHsKKyAgICB2YXIgd2lsbENoYW5n
ZSA9IG9wdHMgJiYgb3B0cy53aWxsQ2hhbmdlIHx8ICdhcnJheVdpbGxDaGFuZ2UnOworICAgIHZh
ciBkaWRDaGFuZ2UgPSBvcHRzICYmIG9wdHMuZGlkQ2hhbmdlIHx8ICdhcnJheURpZENoYW5nZSc7
CisgICAgdmFyIGhhc09ic2VydmVycyA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldChvYmos
ICdoYXNBcnJheU9ic2VydmVycycpOworCisgICAgaWYgKGhhc09ic2VydmVycyA9PT0gbm90aWZ5
KSB7CisgICAgICBfZW1iZXJNZXRhbFByb3BlcnR5X2V2ZW50cy5wcm9wZXJ0eVdpbGxDaGFuZ2Uo
b2JqLCAnaGFzQXJyYXlPYnNlcnZlcnMnKTsKKyAgICB9CisKKyAgICBvcGVyYXRpb24ob2JqLCAn
QGFycmF5OmJlZm9yZScsIHRhcmdldCwgd2lsbENoYW5nZSk7CisgICAgb3BlcmF0aW9uKG9iaiwg
J0BhcnJheTpjaGFuZ2UnLCB0YXJnZXQsIGRpZENoYW5nZSk7CisKKyAgICBpZiAoaGFzT2JzZXJ2
ZXJzID09PSBub3RpZnkpIHsKKyAgICAgIF9lbWJlck1ldGFsUHJvcGVydHlfZXZlbnRzLnByb3Bl
cnR5RGlkQ2hhbmdlKG9iaiwgJ2hhc0FycmF5T2JzZXJ2ZXJzJyk7CisgICAgfQorCisgICAgcmV0
dXJuIG9iajsKKyAgfQorCisgIGZ1bmN0aW9uIGFkZEFycmF5T2JzZXJ2ZXIoYXJyYXksIHRhcmdl
dCwgb3B0cykgeworICAgIHJldHVybiBhcnJheU9ic2VydmVyc0hlbHBlcihhcnJheSwgdGFyZ2V0
LCBvcHRzLCBfZW1iZXJNZXRhbEV2ZW50cy5hZGRMaXN0ZW5lciwgZmFsc2UpOworICB9CisKKyAg
ZnVuY3Rpb24gcmVtb3ZlQXJyYXlPYnNlcnZlcihhcnJheSwgdGFyZ2V0LCBvcHRzKSB7CisgICAg
cmV0dXJuIGFycmF5T2JzZXJ2ZXJzSGVscGVyKGFycmF5LCB0YXJnZXQsIG9wdHMsIF9lbWJlck1l
dGFsRXZlbnRzLnJlbW92ZUxpc3RlbmVyLCB0cnVlKTsKKyAgfQorCisgIGZ1bmN0aW9uIG9iamVj
dEF0KGNvbnRlbnQsIGlkeCkgeworICAgIGlmIChjb250ZW50Lm9iamVjdEF0KSB7CisgICAgICBy
ZXR1cm4gY29udGVudC5vYmplY3RBdChpZHgpOworICAgIH0KKworICAgIHJldHVybiBjb250ZW50
W2lkeF07CisgIH0KKworICB2YXIgRU1CRVJfQVJSQVkgPSBfZW1iZXJNZXRhbFN5bWJvbC5kZWZh
dWx0KCdFTUJFUl9BUlJBWScpOworCisgIGZ1bmN0aW9uIGlzRW1iZXJBcnJheShvYmopIHsKKyAg
ICByZXR1cm4gb2JqICYmICEhb2JqW0VNQkVSX0FSUkFZXTsKKyAgfQorCisgIC8vIC4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyAgLy8g
QVJSQVkKKyAgLy8KKyAgLyoqCisgICAgVGhpcyBtaXhpbiBpbXBsZW1lbnRzIE9ic2VydmVyLWZy
aWVuZGx5IEFycmF5LWxpa2UgYmVoYXZpb3IuIEl0IGlzIG5vdCBhCisgICAgY29uY3JldGUgaW1w
bGVtZW50YXRpb24sIGJ1dCBpdCBjYW4gYmUgdXNlZCB1cCBieSBvdGhlciBjbGFzc2VzIHRoYXQg
d2FudAorICAgIHRvIGFwcGVhciBsaWtlIGFycmF5cy4KKyAgCisgICAgRm9yIGV4YW1wbGUsIEFy
cmF5UHJveHkgaXMgYSBjb25jcmV0ZSBjbGFzc2VzIHRoYXQgY2FuCisgICAgYmUgaW5zdGFudGlh
dGVkIHRvIGltcGxlbWVudCBhcnJheS1saWtlIGJlaGF2aW9yLiBCb3RoIG9mIHRoZXNlIGNsYXNz
ZXMgdXNlCisgICAgdGhlIEFycmF5IE1peGluIGJ5IHdheSBvZiB0aGUgTXV0YWJsZUFycmF5IG1p
eGluLCB3aGljaCBhbGxvd3Mgb2JzZXJ2YWJsZQorICAgIGNoYW5nZXMgdG8gYmUgbWFkZSB0byB0
aGUgdW5kZXJseWluZyBhcnJheS4KKyAgCisgICAgVW5saWtlIGBFbWJlci5FbnVtZXJhYmxlLGAg
dGhpcyBtaXhpbiBkZWZpbmVzIG1ldGhvZHMgc3BlY2lmaWNhbGx5IGZvcgorICAgIGNvbGxlY3Rp
b25zIHRoYXQgcHJvdmlkZSBpbmRleC1vcmRlcmVkIGFjY2VzcyB0byB0aGVpciBjb250ZW50cy4g
V2hlbiB5b3UKKyAgICBhcmUgZGVzaWduaW5nIGNvZGUgdGhhdCBuZWVkcyB0byBhY2NlcHQgYW55
IGtpbmQgb2YgQXJyYXktbGlrZSBvYmplY3QsIHlvdQorICAgIHNob3VsZCB1c2UgdGhlc2UgbWV0
aG9kcyBpbnN0ZWFkIG9mIEFycmF5IHByaW1pdGl2ZXMgYmVjYXVzZSB0aGVzZSB3aWxsCisgICAg
cHJvcGVybHkgbm90aWZ5IG9ic2VydmVycyBvZiBjaGFuZ2VzIHRvIHRoZSBhcnJheS4KKyAgCisg
ICAgQWx0aG91Z2ggdGhlc2UgbWV0aG9kcyBhcmUgZWZmaWNpZW50LCB0aGV5IGRvIGFkZCBhIGxh
eWVyIG9mIGluZGlyZWN0aW9uIHRvCisgICAgeW91ciBhcHBsaWNhdGlvbiBzbyBpdCBpcyBhIGdv
b2QgaWRlYSB0byB1c2UgdGhlbSBvbmx5IHdoZW4geW91IG5lZWQgdGhlCisgICAgZmxleGliaWxp
dHkgb2YgdXNpbmcgYm90aCB0cnVlIEphdmFTY3JpcHQgYXJyYXlzIGFuZCAidmlydHVhbCIgYXJy
YXlzIHN1Y2gKKyAgICBhcyBjb250cm9sbGVycyBhbmQgY29sbGVjdGlvbnMuCisgIAorICAgIFlv
dSBjYW4gdXNlIHRoZSBtZXRob2RzIGRlZmluZWQgaW4gdGhpcyBtb2R1bGUgdG8gYWNjZXNzIGFu
ZCBtb2RpZnkgYXJyYXkKKyAgICBjb250ZW50cyBpbiBhIEtWTy1mcmllbmRseSB3YXkuIFlvdSBj
YW4gYWxzbyBiZSBub3RpZmllZCB3aGVuZXZlciB0aGUKKyAgICBtZW1iZXJzaGlwIG9mIGFuIGFy
cmF5IGNoYW5nZXMgYnkgdXNpbmcgYC5vYnNlcnZlcygnbXlBcnJheS5bXScpYC4KKyAgCisgICAg
VG8gc3VwcG9ydCBgRW1iZXIuQXJyYXlgIGluIHlvdXIgb3duIGNsYXNzLCB5b3UgbXVzdCBvdmVy
cmlkZSB0d28KKyAgICBwcmltaXRpdmVzIHRvIHVzZSBpdDogYGxlbmd0aCgpYCBhbmQgYG9iamVj
dEF0KClgLgorICAKKyAgICBOb3RlIHRoYXQgdGhlIEVtYmVyLkFycmF5IG1peGluIGFsc28gaW5j
b3Jwb3JhdGVzIHRoZSBgRW1iZXIuRW51bWVyYWJsZWAKKyAgICBtaXhpbi4gQWxsIGBFbWJlci5B
cnJheWAtbGlrZSBvYmplY3RzIGFyZSBhbHNvIGVudW1lcmFibGUuCisgIAorICAgIEBjbGFzcyBB
cnJheQorICAgIEBuYW1lc3BhY2UgRW1iZXIKKyAgICBAdXNlcyBFbWJlci5FbnVtZXJhYmxlCisg
ICAgQHNpbmNlIEVtYmVyIDAuOS4wCisgICAgQHB1YmxpYworICAqLworICBleHBvcnRzLmRlZmF1
bHQgPSBfZW1iZXJNZXRhbE1peGluLk1peGluLmNyZWF0ZShfZW1iZXJSdW50aW1lTWl4aW5zRW51
bWVyYWJsZS5kZWZhdWx0LCAoX01peGluJGNyZWF0ZSA9IHt9LCBfTWl4aW4kY3JlYXRlW0VNQkVS
X0FSUkFZXSA9IHRydWUsIF9NaXhpbiRjcmVhdGUubGVuZ3RoID0gbnVsbCwgX01peGluJGNyZWF0
ZS5vYmplY3RBdCA9IGZ1bmN0aW9uIChpZHgpIHsKKyAgICBpZiAoaWR4IDwgMCB8fCBpZHggPj0g
X2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdsZW5ndGgnKSkgeworICAgICAgcmV0
dXJuIHVuZGVmaW5lZDsKKyAgICB9CisKKyAgICByZXR1cm4gX2VtYmVyTWV0YWxQcm9wZXJ0eV9n
ZXQuZ2V0KHRoaXMsIGlkeCk7CisgIH0sIF9NaXhpbiRjcmVhdGUub2JqZWN0c0F0ID0gZnVuY3Rp
b24gKGluZGV4ZXMpIHsKKyAgICB2YXIgX3RoaXMgPSB0aGlzOworCisgICAgcmV0dXJuIGluZGV4
ZXMubWFwKGZ1bmN0aW9uIChpZHgpIHsKKyAgICAgIHJldHVybiBvYmplY3RBdChfdGhpcywgaWR4
KTsKKyAgICB9KTsKKyAgfSwgX01peGluJGNyZWF0ZS5uZXh0T2JqZWN0ID0gZnVuY3Rpb24gKGlk
eCkgeworICAgIHJldHVybiBvYmplY3RBdCh0aGlzLCBpZHgpOworICB9LCBfTWl4aW4kY3JlYXRl
WydbXSddID0gX2VtYmVyTWV0YWxDb21wdXRlZC5jb21wdXRlZCh7CisgICAgZ2V0OiBmdW5jdGlv
biAoa2V5KSB7CisgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorICAgIHNldDogZnVuY3Rpb24g
KGtleSwgdmFsdWUpIHsKKyAgICAgIHRoaXMucmVwbGFjZSgwLCBfZW1iZXJNZXRhbFByb3BlcnR5
X2dldC5nZXQodGhpcywgJ2xlbmd0aCcpLCB2YWx1ZSk7CisgICAgICByZXR1cm4gdGhpczsKKyAg
ICB9CisgIH0pLCBfTWl4aW4kY3JlYXRlLmZpcnN0T2JqZWN0ID0gX2VtYmVyTWV0YWxDb21wdXRl
ZC5jb21wdXRlZChmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuIG9iamVjdEF0KHRoaXMsIDApOwor
ICB9KS5yZWFkT25seSgpLCBfTWl4aW4kY3JlYXRlLmxhc3RPYmplY3QgPSBfZW1iZXJNZXRhbENv
bXB1dGVkLmNvbXB1dGVkKGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4gb2JqZWN0QXQodGhpcywg
X2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdsZW5ndGgnKSAtIDEpOworICB9KS5y
ZWFkT25seSgpLCBfTWl4aW4kY3JlYXRlLmNvbnRhaW5zID0gZnVuY3Rpb24gKG9iaikgeworICAg
IHJldHVybiB0aGlzLmluZGV4T2Yob2JqKSA+PSAwOworICB9LCBfTWl4aW4kY3JlYXRlLnNsaWNl
ID0gZnVuY3Rpb24gKGJlZ2luSW5kZXgsIGVuZEluZGV4KSB7CisgICAgdmFyIHJldCA9IF9lbWJl
ck1ldGFsQ29yZS5kZWZhdWx0LkEoKTsKKyAgICB2YXIgbGVuZ3RoID0gX2VtYmVyTWV0YWxQcm9w
ZXJ0eV9nZXQuZ2V0KHRoaXMsICdsZW5ndGgnKTsKKworICAgIGlmIChfZW1iZXJNZXRhbElzX25v
bmUuZGVmYXVsdChiZWdpbkluZGV4KSkgeworICAgICAgYmVnaW5JbmRleCA9IDA7CisgICAgfQor
CisgICAgaWYgKF9lbWJlck1ldGFsSXNfbm9uZS5kZWZhdWx0KGVuZEluZGV4KSB8fCBlbmRJbmRl
eCA+IGxlbmd0aCkgeworICAgICAgZW5kSW5kZXggPSBsZW5ndGg7CisgICAgfQorCisgICAgaWYg
KGJlZ2luSW5kZXggPCAwKSB7CisgICAgICBiZWdpbkluZGV4ID0gbGVuZ3RoICsgYmVnaW5JbmRl
eDsKKyAgICB9CisKKyAgICBpZiAoZW5kSW5kZXggPCAwKSB7CisgICAgICBlbmRJbmRleCA9IGxl
bmd0aCArIGVuZEluZGV4OworICAgIH0KKworICAgIHdoaWxlIChiZWdpbkluZGV4IDwgZW5kSW5k
ZXgpIHsKKyAgICAgIHJldFtyZXQubGVuZ3RoXSA9IG9iamVjdEF0KHRoaXMsIGJlZ2luSW5kZXgr
Kyk7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKKyAgfSwgX01peGluJGNyZWF0ZS5pbmRleE9m
ID0gZnVuY3Rpb24gKG9iamVjdCwgc3RhcnRBdCkgeworICAgIHZhciBsZW4gPSBfZW1iZXJNZXRh
bFByb3BlcnR5X2dldC5nZXQodGhpcywgJ2xlbmd0aCcpOworICAgIHZhciBpZHg7CisKKyAgICBp
ZiAoc3RhcnRBdCA9PT0gdW5kZWZpbmVkKSB7CisgICAgICBzdGFydEF0ID0gMDsKKyAgICB9CisK
KyAgICBpZiAoc3RhcnRBdCA8IDApIHsKKyAgICAgIHN0YXJ0QXQgKz0gbGVuOworICAgIH0KKwor
ICAgIGZvciAoaWR4ID0gc3RhcnRBdDsgaWR4IDwgbGVuOyBpZHgrKykgeworICAgICAgaWYgKG9i
amVjdEF0KHRoaXMsIGlkeCkgPT09IG9iamVjdCkgeworICAgICAgICByZXR1cm4gaWR4OworICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiAtMTsKKyAgfSwgX01peGluJGNyZWF0ZS5sYXN0SW5k
ZXhPZiA9IGZ1bmN0aW9uIChvYmplY3QsIHN0YXJ0QXQpIHsKKyAgICB2YXIgbGVuID0gX2VtYmVy
TWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdsZW5ndGgnKTsKKyAgICB2YXIgaWR4OworCisg
ICAgaWYgKHN0YXJ0QXQgPT09IHVuZGVmaW5lZCB8fCBzdGFydEF0ID49IGxlbikgeworICAgICAg
c3RhcnRBdCA9IGxlbiAtIDE7CisgICAgfQorCisgICAgaWYgKHN0YXJ0QXQgPCAwKSB7CisgICAg
ICBzdGFydEF0ICs9IGxlbjsKKyAgICB9CisKKyAgICBmb3IgKGlkeCA9IHN0YXJ0QXQ7IGlkeCA+
PSAwOyBpZHgtLSkgeworICAgICAgaWYgKG9iamVjdEF0KHRoaXMsIGlkeCkgPT09IG9iamVjdCkg
eworICAgICAgICByZXR1cm4gaWR4OworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAtMTsK
KyAgfSwgX01peGluJGNyZWF0ZS5hZGRBcnJheU9ic2VydmVyID0gZnVuY3Rpb24gKHRhcmdldCwg
b3B0cykgeworICAgIHJldHVybiBhZGRBcnJheU9ic2VydmVyKHRoaXMsIHRhcmdldCwgb3B0cyk7
CisgIH0sIF9NaXhpbiRjcmVhdGUucmVtb3ZlQXJyYXlPYnNlcnZlciA9IGZ1bmN0aW9uICh0YXJn
ZXQsIG9wdHMpIHsKKyAgICByZXR1cm4gcmVtb3ZlQXJyYXlPYnNlcnZlcih0aGlzLCB0YXJnZXQs
IG9wdHMpOworICB9LCBfTWl4aW4kY3JlYXRlLmhhc0FycmF5T2JzZXJ2ZXJzID0gX2VtYmVyTWV0
YWxDb21wdXRlZC5jb21wdXRlZChmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuIF9lbWJlck1ldGFs
RXZlbnRzLmhhc0xpc3RlbmVycyh0aGlzLCAnQGFycmF5OmNoYW5nZScpIHx8IF9lbWJlck1ldGFs
RXZlbnRzLmhhc0xpc3RlbmVycyh0aGlzLCAnQGFycmF5OmJlZm9yZScpOworICB9KSwgX01peGlu
JGNyZWF0ZS5hcnJheUNvbnRlbnRXaWxsQ2hhbmdlID0gZnVuY3Rpb24gKHN0YXJ0SWR4LCByZW1v
dmVBbXQsIGFkZEFtdCkgeworICAgIHZhciByZW1vdmluZywgbGltOworCisgICAgLy8gaWYgbm8g
YXJncyBhcmUgcGFzc2VkIGFzc3VtZSBldmVyeXRoaW5nIGNoYW5nZXMKKyAgICBpZiAoc3RhcnRJ
ZHggPT09IHVuZGVmaW5lZCkgeworICAgICAgc3RhcnRJZHggPSAwOworICAgICAgcmVtb3ZlQW10
ID0gYWRkQW10ID0gLTE7CisgICAgfSBlbHNlIHsKKyAgICAgIGlmIChyZW1vdmVBbXQgPT09IHVu
ZGVmaW5lZCkgeworICAgICAgICByZW1vdmVBbXQgPSAtMTsKKyAgICAgIH0KKworICAgICAgaWYg
KGFkZEFtdCA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgIGFkZEFtdCA9IC0xOworICAgICAgfQor
ICAgIH0KKworICAgIGlmICh0aGlzLl9fZWFjaCkgeworICAgICAgdGhpcy5fX2VhY2guYXJyYXlX
aWxsQ2hhbmdlKHRoaXMsIHN0YXJ0SWR4LCByZW1vdmVBbXQsIGFkZEFtdCk7CisgICAgfQorCisg
ICAgX2VtYmVyTWV0YWxFdmVudHMuc2VuZEV2ZW50KHRoaXMsICdAYXJyYXk6YmVmb3JlJywgW3Ro
aXMsIHN0YXJ0SWR4LCByZW1vdmVBbXQsIGFkZEFtdF0pOworCisgICAgaWYgKHN0YXJ0SWR4ID49
IDAgJiYgcmVtb3ZlQW10ID49IDAgJiYgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMs
ICdoYXNFbnVtZXJhYmxlT2JzZXJ2ZXJzJykpIHsKKyAgICAgIHJlbW92aW5nID0gW107CisgICAg
ICBsaW0gPSBzdGFydElkeCArIHJlbW92ZUFtdDsKKworICAgICAgZm9yICh2YXIgaWR4ID0gc3Rh
cnRJZHg7IGlkeCA8IGxpbTsgaWR4KyspIHsKKyAgICAgICAgcmVtb3ZpbmcucHVzaChvYmplY3RB
dCh0aGlzLCBpZHgpKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgcmVtb3ZpbmcgPSBy
ZW1vdmVBbXQ7CisgICAgfQorCisgICAgdGhpcy5lbnVtZXJhYmxlQ29udGVudFdpbGxDaGFuZ2Uo
cmVtb3ZpbmcsIGFkZEFtdCk7CisKKyAgICByZXR1cm4gdGhpczsKKyAgfSwgX01peGluJGNyZWF0
ZS5hcnJheUNvbnRlbnREaWRDaGFuZ2UgPSBmdW5jdGlvbiAoc3RhcnRJZHgsIHJlbW92ZUFtdCwg
YWRkQW10KSB7CisgICAgdmFyIGFkZGluZywgbGltOworCisgICAgX2VtYmVyTWV0YWxUYWdzLm1h
cmtPYmplY3RBc0RpcnR5KF9lbWJlck1ldGFsTWV0YS5tZXRhKHRoaXMpKTsKKworICAgIC8vIGlm
IG5vIGFyZ3MgYXJlIHBhc3NlZCBhc3N1bWUgZXZlcnl0aGluZyBjaGFuZ2VzCisgICAgaWYgKHN0
YXJ0SWR4ID09PSB1bmRlZmluZWQpIHsKKyAgICAgIHN0YXJ0SWR4ID0gMDsKKyAgICAgIHJlbW92
ZUFtdCA9IGFkZEFtdCA9IC0xOworICAgIH0gZWxzZSB7CisgICAgICBpZiAocmVtb3ZlQW10ID09
PSB1bmRlZmluZWQpIHsKKyAgICAgICAgcmVtb3ZlQW10ID0gLTE7CisgICAgICB9CisKKyAgICAg
IGlmIChhZGRBbXQgPT09IHVuZGVmaW5lZCkgeworICAgICAgICBhZGRBbXQgPSAtMTsKKyAgICAg
IH0KKyAgICB9CisKKyAgICBpZiAoc3RhcnRJZHggPj0gMCAmJiBhZGRBbXQgPj0gMCAmJiBfZW1i
ZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ2hhc0VudW1lcmFibGVPYnNlcnZlcnMnKSkg
eworICAgICAgYWRkaW5nID0gW107CisgICAgICBsaW0gPSBzdGFydElkeCArIGFkZEFtdDsKKwor
ICAgICAgZm9yICh2YXIgaWR4ID0gc3RhcnRJZHg7IGlkeCA8IGxpbTsgaWR4KyspIHsKKyAgICAg
ICAgYWRkaW5nLnB1c2gob2JqZWN0QXQodGhpcywgaWR4KSk7CisgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgIGFkZGluZyA9IGFkZEFtdDsKKyAgICB9CisKKyAgICB0aGlzLmVudW1lcmFibGVD
b250ZW50RGlkQ2hhbmdlKHJlbW92ZUFtdCwgYWRkaW5nKTsKKworICAgIGlmICh0aGlzLl9fZWFj
aCkgeworICAgICAgdGhpcy5fX2VhY2guYXJyYXlEaWRDaGFuZ2UodGhpcywgc3RhcnRJZHgsIHJl
bW92ZUFtdCwgYWRkQW10KTsKKyAgICB9CisKKyAgICBfZW1iZXJNZXRhbEV2ZW50cy5zZW5kRXZl
bnQodGhpcywgJ0BhcnJheTpjaGFuZ2UnLCBbdGhpcywgc3RhcnRJZHgsIHJlbW92ZUFtdCwgYWRk
QW10XSk7CisKKyAgICB2YXIgbGVuZ3RoID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRo
aXMsICdsZW5ndGgnKTsKKyAgICB2YXIgY2FjaGVkRmlyc3QgPSBfZW1iZXJNZXRhbENvbXB1dGVk
LmNhY2hlRm9yKHRoaXMsICdmaXJzdE9iamVjdCcpOworICAgIHZhciBjYWNoZWRMYXN0ID0gX2Vt
YmVyTWV0YWxDb21wdXRlZC5jYWNoZUZvcih0aGlzLCAnbGFzdE9iamVjdCcpOworCisgICAgaWYg
KG9iamVjdEF0KHRoaXMsIDApICE9PSBjYWNoZWRGaXJzdCkgeworICAgICAgX2VtYmVyTWV0YWxQ
cm9wZXJ0eV9ldmVudHMucHJvcGVydHlXaWxsQ2hhbmdlKHRoaXMsICdmaXJzdE9iamVjdCcpOwor
ICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9ldmVudHMucHJvcGVydHlEaWRDaGFuZ2UodGhpcywg
J2ZpcnN0T2JqZWN0Jyk7CisgICAgfQorCisgICAgaWYgKG9iamVjdEF0KHRoaXMsIGxlbmd0aCAt
IDEpICE9PSBjYWNoZWRMYXN0KSB7CisgICAgICBfZW1iZXJNZXRhbFByb3BlcnR5X2V2ZW50cy5w
cm9wZXJ0eVdpbGxDaGFuZ2UodGhpcywgJ2xhc3RPYmplY3QnKTsKKyAgICAgIF9lbWJlck1ldGFs
UHJvcGVydHlfZXZlbnRzLnByb3BlcnR5RGlkQ2hhbmdlKHRoaXMsICdsYXN0T2JqZWN0Jyk7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRoaXM7CisgIH0sIF9NaXhpbiRjcmVhdGVbJ0BlYWNoJ10gPSBf
ZW1iZXJNZXRhbENvbXB1dGVkLmNvbXB1dGVkKGZ1bmN0aW9uICgpIHsKKyAgICAvLyBUT0RPIHVz
ZSBTeW1ib2wgb3IgYWRkIHRvIG1ldGEKKyAgICBpZiAoIXRoaXMuX19lYWNoKSB7CisgICAgICB0
aGlzLl9fZWFjaCA9IG5ldyBfZW1iZXJSdW50aW1lU3lzdGVtRWFjaF9wcm94eS5kZWZhdWx0KHRo
aXMpOworICAgIH0KKworICAgIHJldHVybiB0aGlzLl9fZWFjaDsKKyAgfSkudm9sYXRpbGUoKSwg
X01peGluJGNyZWF0ZSkpOworfSk7CisvLyBFUzZUT0RPOiBFbWJlci5BCisKKy8qKgorICBfX1Jl
cXVpcmVkLl9fIFlvdSBtdXN0IGltcGxlbWVudCB0aGlzIG1ldGhvZCB0byBhcHBseSB0aGlzIG1p
eGluLgorICAgWW91ciBhcnJheSBtdXN0IHN1cHBvcnQgdGhlIGBsZW5ndGhgIHByb3BlcnR5LiBZ
b3VyIHJlcGxhY2UgbWV0aG9kcyBzaG91bGQKKyAgc2V0IHRoaXMgcHJvcGVydHkgd2hlbmV2ZXIg
aXQgY2hhbmdlcy4KKyAgIEBwcm9wZXJ0eSB7TnVtYmVyfSBsZW5ndGgKKyAgQHB1YmxpYworKi8K
KworLyoqCisgIFJldHVybnMgdGhlIG9iamVjdCBhdCB0aGUgZ2l2ZW4gYGluZGV4YC4gSWYgdGhl
IGdpdmVuIGBpbmRleGAgaXMgbmVnYXRpdmUKKyAgb3IgaXMgZ3JlYXRlciBvciBlcXVhbCB0aGFu
IHRoZSBhcnJheSBsZW5ndGgsIHJldHVybnMgYHVuZGVmaW5lZGAuCisgICBUaGlzIGlzIG9uZSBv
ZiB0aGUgcHJpbWl0aXZlcyB5b3UgbXVzdCBpbXBsZW1lbnQgdG8gc3VwcG9ydCBgRW1iZXIuQXJy
YXlgLgorICBJZiB5b3VyIG9iamVjdCBzdXBwb3J0cyByZXRyaWV2aW5nIHRoZSB2YWx1ZSBvZiBh
biBhcnJheSBpdGVtIHVzaW5nIGBnZXQoKWAKKyAgKGkuZS4gYG15QXJyYXkuZ2V0KDApYCksIHRo
ZW4geW91IGRvIG5vdCBuZWVkIHRvIGltcGxlbWVudCB0aGlzIG1ldGhvZAorICB5b3Vyc2VsZi4K
KyAgIGBgYGphdmFzY3JpcHQKKyAgdmFyIGFyciA9IFsnYScsICdiJywgJ2MnLCAnZCddOworICAg
YXJyLm9iamVjdEF0KDApOyAgIC8vICdhJworICBhcnIub2JqZWN0QXQoMyk7ICAgLy8gJ2QnCisg
IGFyci5vYmplY3RBdCgtMSk7ICAvLyB1bmRlZmluZWQKKyAgYXJyLm9iamVjdEF0KDQpOyAgIC8v
IHVuZGVmaW5lZAorICBhcnIub2JqZWN0QXQoNSk7ICAgLy8gdW5kZWZpbmVkCisgIGBgYAorICAg
QG1ldGhvZCBvYmplY3RBdAorICBAcGFyYW0ge051bWJlcn0gaWR4IFRoZSBpbmRleCBvZiB0aGUg
aXRlbSB0byByZXR1cm4uCisgIEByZXR1cm4geyp9IGl0ZW0gYXQgaW5kZXggb3IgdW5kZWZpbmVk
CisgIEBwdWJsaWMKKyovCisKKy8qKgorICBUaGlzIHJldHVybnMgdGhlIG9iamVjdHMgYXQgdGhl
IHNwZWNpZmllZCBpbmRleGVzLCB1c2luZyBgb2JqZWN0QXRgLgorICAgYGBgamF2YXNjcmlwdAor
ICB2YXIgYXJyID3CoFsnYScsICdiJywgJ2MnLCAnZCddOworICAgYXJyLm9iamVjdHNBdChbMCwg
MSwgMl0pOyAgLy8gWydhJywgJ2InLCAnYyddCisgIGFyci5vYmplY3RzQXQoWzIsIDMsIDRdKTsg
IC8vIFsnYycsICdkJywgdW5kZWZpbmVkXQorICBgYGAKKyAgIEBtZXRob2Qgb2JqZWN0c0F0Cisg
IEBwYXJhbSB7QXJyYXl9IGluZGV4ZXMgQW4gYXJyYXkgb2YgaW5kZXhlcyBvZiBpdGVtcyB0byBy
ZXR1cm4uCisgIEByZXR1cm4ge0FycmF5fQorICBAcHVibGljCisgKi8KKworLy8gb3ZlcnJpZGVz
IEVtYmVyLkVudW1lcmFibGUgdmVyc2lvbgorCisvKioKKyAgVGhpcyBpcyB0aGUgaGFuZGxlciBm
b3IgdGhlIHNwZWNpYWwgYXJyYXkgY29udGVudCBwcm9wZXJ0eS4gSWYgeW91IGdldAorICB0aGlz
IHByb3BlcnR5LCBpdCB3aWxsIHJldHVybiB0aGlzLiBJZiB5b3Ugc2V0IHRoaXMgcHJvcGVydHkg
dG8gYSBuZXcKKyAgYXJyYXksIGl0IHdpbGwgcmVwbGFjZSB0aGUgY3VycmVudCBjb250ZW50Lgor
ICAgVGhpcyBwcm9wZXJ0eSBvdmVycmlkZXMgdGhlIGRlZmF1bHQgcHJvcGVydHkgZGVmaW5lZCBp
biBgRW1iZXIuRW51bWVyYWJsZWAuCisgICBAcHJvcGVydHkgW10KKyAgQHJldHVybiB0aGlzCisg
IEBwdWJsaWMKKyovCisKKy8vIG9wdGltaXplZCB2ZXJzaW9uIGZyb20gRW51bWVyYWJsZQorCisv
LyBBZGQgYW55IGV4dHJhIG1ldGhvZHMgdG8gRW1iZXIuQXJyYXkgdGhhdCBhcmUgbmF0aXZlIHRv
IHRoZSBidWlsdC1pbiBBcnJheS4KKy8qKgorICBSZXR1cm5zIGEgbmV3IGFycmF5IHRoYXQgaXMg
YSBzbGljZSBvZiB0aGUgcmVjZWl2ZXIuIFRoaXMgaW1wbGVtZW50YXRpb24KKyAgdXNlcyB0aGUg
b2JzZXJ2YWJsZSBhcnJheSBtZXRob2RzIHRvIHJldHJpZXZlIHRoZSBvYmplY3RzIGZvciB0aGUg
bmV3CisgIHNsaWNlLgorICAgYGBgamF2YXNjcmlwdAorICB2YXIgYXJyID0gWydyZWQnLCAnZ3Jl
ZW4nLCAnYmx1ZSddOworICAgYXJyLnNsaWNlKDApOyAgICAgICAvLyBbJ3JlZCcsICdncmVlbics
ICdibHVlJ10KKyAgYXJyLnNsaWNlKDAsIDIpOyAgICAvLyBbJ3JlZCcsICdncmVlbiddCisgIGFy
ci5zbGljZSgxLCAxMDApOyAgLy8gWydncmVlbicsICdibHVlJ10KKyAgYGBgCisgICBAbWV0aG9k
IHNsaWNlCisgIEBwYXJhbSB7TnVtYmVyfSBiZWdpbkluZGV4IChPcHRpb25hbCkgaW5kZXggdG8g
YmVnaW4gc2xpY2luZyBmcm9tLgorICBAcGFyYW0ge051bWJlcn0gZW5kSW5kZXggKE9wdGlvbmFs
KSBpbmRleCB0byBlbmQgdGhlIHNsaWNlIGF0IChidXQgbm90IGluY2x1ZGVkKS4KKyAgQHJldHVy
biB7QXJyYXl9IE5ldyBhcnJheSB3aXRoIHNwZWNpZmllZCBzbGljZQorICBAcHVibGljCisqLwor
CisvKioKKyAgUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGdpdmVuIG9iamVjdCdzIGZpcnN0IG9j
Y3VycmVuY2UuCisgIElmIG5vIGBzdGFydEF0YCBhcmd1bWVudCBpcyBnaXZlbiwgdGhlIHN0YXJ0
aW5nIGxvY2F0aW9uIHRvCisgIHNlYXJjaCBpcyAwLiBJZiBpdCdzIG5lZ2F0aXZlLCB3aWxsIGNv
dW50IGJhY2t3YXJkIGZyb20KKyAgdGhlIGVuZCBvZiB0aGUgYXJyYXkuIFJldHVybnMgLTEgaWYg
bm8gbWF0Y2ggaXMgZm91bmQuCisgICBgYGBqYXZhc2NyaXB0CisgIHZhciBhcnIgPSBbJ2EnLCAn
YicsICdjJywgJ2QnLCAnYSddOworICAgYXJyLmluZGV4T2YoJ2EnKTsgICAgICAgLy8gIDAKKyAg
YXJyLmluZGV4T2YoJ3onKTsgICAgICAgLy8gLTEKKyAgYXJyLmluZGV4T2YoJ2EnLCAyKTsgICAg
Ly8gIDQKKyAgYXJyLmluZGV4T2YoJ2EnLCAtMSk7ICAgLy8gIDQKKyAgYXJyLmluZGV4T2YoJ2In
LCAzKTsgICAgLy8gLTEKKyAgYXJyLmluZGV4T2YoJ2EnLCAxMDApOyAgLy8gLTEKKyAgYGBgCisg
ICBAbWV0aG9kIGluZGV4T2YKKyAgQHBhcmFtIHtPYmplY3R9IG9iamVjdCB0aGUgaXRlbSB0byBz
ZWFyY2ggZm9yCisgIEBwYXJhbSB7TnVtYmVyfSBzdGFydEF0IG9wdGlvbmFsIHN0YXJ0aW5nIGxv
Y2F0aW9uIHRvIHNlYXJjaCwgZGVmYXVsdCAwCisgIEByZXR1cm4ge051bWJlcn0gaW5kZXggb3Ig
LTEgaWYgbm90IGZvdW5kCisgIEBwdWJsaWMKKyovCisKKy8qKgorICBSZXR1cm5zIHRoZSBpbmRl
eCBvZiB0aGUgZ2l2ZW4gb2JqZWN0J3MgbGFzdCBvY2N1cnJlbmNlLgorICBJZiBubyBgc3RhcnRB
dGAgYXJndW1lbnQgaXMgZ2l2ZW4sIHRoZSBzZWFyY2ggc3RhcnRzIGZyb20KKyAgdGhlIGxhc3Qg
cG9zaXRpb24uIElmIGl0J3MgbmVnYXRpdmUsIHdpbGwgY291bnQgYmFja3dhcmQKKyAgZnJvbSB0
aGUgZW5kIG9mIHRoZSBhcnJheS4gUmV0dXJucyAtMSBpZiBubyBtYXRjaCBpcyBmb3VuZC4KKyAg
IGBgYGphdmFzY3JpcHQKKyAgdmFyIGFyciA9IFsnYScsICdiJywgJ2MnLCAnZCcsICdhJ107Cisg
ICBhcnIubGFzdEluZGV4T2YoJ2EnKTsgICAgICAgLy8gIDQKKyAgYXJyLmxhc3RJbmRleE9mKCd6
Jyk7ICAgICAgIC8vIC0xCisgIGFyci5sYXN0SW5kZXhPZignYScsIDIpOyAgICAvLyAgMAorICBh
cnIubGFzdEluZGV4T2YoJ2EnLCAtMSk7ICAgLy8gIDQKKyAgYXJyLmxhc3RJbmRleE9mKCdiJywg
Myk7ICAgIC8vICAxCisgIGFyci5sYXN0SW5kZXhPZignYScsIDEwMCk7ICAvLyAgNAorICBgYGAK
KyAgIEBtZXRob2QgbGFzdEluZGV4T2YKKyAgQHBhcmFtIHtPYmplY3R9IG9iamVjdCB0aGUgaXRl
bSB0byBzZWFyY2ggZm9yCisgIEBwYXJhbSB7TnVtYmVyfSBzdGFydEF0IG9wdGlvbmFsIHN0YXJ0
aW5nIGxvY2F0aW9uIHRvIHNlYXJjaCwgZGVmYXVsdCAwCisgIEByZXR1cm4ge051bWJlcn0gaW5k
ZXggb3IgLTEgaWYgbm90IGZvdW5kCisgIEBwdWJsaWMKKyovCisKKy8vIC4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKy8vIEFSUkFZIE9C
U0VSVkVSUworLy8KKworLyoqCisgIEFkZHMgYW4gYXJyYXkgb2JzZXJ2ZXIgdG8gdGhlIHJlY2Vp
dmluZyBhcnJheS4gVGhlIGFycmF5IG9ic2VydmVyIG9iamVjdAorICBub3JtYWxseSBtdXN0IGlt
cGxlbWVudCB0d28gbWV0aG9kczoKKyAgICogYGFycmF5V2lsbENoYW5nZShvYnNlcnZlZE9iaiwg
c3RhcnQsIHJlbW92ZUNvdW50LCBhZGRDb3VudClgIC0gVGhpcyBtZXRob2Qgd2lsbCBiZQorICAg
IGNhbGxlZCBqdXN0IGJlZm9yZSB0aGUgYXJyYXkgaXMgbW9kaWZpZWQuCisgICogYGFycmF5RGlk
Q2hhbmdlKG9ic2VydmVkT2JqLCBzdGFydCwgcmVtb3ZlQ291bnQsIGFkZENvdW50KWAgLSBUaGlz
IG1ldGhvZCB3aWxsIGJlCisgICAgY2FsbGVkIGp1c3QgYWZ0ZXIgdGhlIGFycmF5IGlzIG1vZGlm
aWVkLgorICAgQm90aCBjYWxsYmFja3Mgd2lsbCBiZSBwYXNzZWQgdGhlIG9ic2VydmVkIG9iamVj
dCwgc3RhcnRpbmcgaW5kZXggb2YgdGhlCisgIGNoYW5nZSBhcyB3ZWxsIGFzIGEgY291bnQgb2Yg
dGhlIGl0ZW1zIHRvIGJlIHJlbW92ZWQgYW5kIGFkZGVkLiBZb3UgY2FuIHVzZQorICB0aGVzZSBj
YWxsYmFja3MgdG8gb3B0aW9uYWxseSBpbnNwZWN0IHRoZSBhcnJheSBkdXJpbmcgdGhlIGNoYW5n
ZSwgY2xlYXIKKyAgY2FjaGVzLCBvciBkbyBhbnkgb3RoZXIgYm9va2tlZXBpbmcgbmVjZXNzYXJ5
LgorICAgSW4gYWRkaXRpb24gdG8gcGFzc2luZyBhIHRhcmdldCwgeW91IGNhbiBhbHNvIGluY2x1
ZGUgYW4gb3B0aW9ucyBoYXNoCisgIHdoaWNoIHlvdSBjYW4gdXNlIHRvIG92ZXJyaWRlIHRoZSBt
ZXRob2QgbmFtZXMgdGhhdCB3aWxsIGJlIGludm9rZWQgb24gdGhlCisgIHRhcmdldC4KKyAgIEBt
ZXRob2QgYWRkQXJyYXlPYnNlcnZlcgorICBAcGFyYW0ge09iamVjdH0gdGFyZ2V0IFRoZSBvYnNl
cnZlciBvYmplY3QuCisgIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbmFsIGhhc2ggb2YgY29u
ZmlndXJhdGlvbiBvcHRpb25zIGluY2x1ZGluZworICAgIGB3aWxsQ2hhbmdlYCBhbmQgYGRpZENo
YW5nZWAgb3B0aW9uLgorICBAcmV0dXJuIHtFbWJlci5BcnJheX0gcmVjZWl2ZXIKKyAgQHB1Ymxp
YworKi8KKworLyoqCisgIFJlbW92ZXMgYW4gYXJyYXkgb2JzZXJ2ZXIgZnJvbSB0aGUgb2JqZWN0
IGlmIHRoZSBvYnNlcnZlciBpcyBjdXJyZW50CisgIHJlZ2lzdGVyZWQuIENhbGxpbmcgdGhpcyBt
ZXRob2QgbXVsdGlwbGUgdGltZXMgd2l0aCB0aGUgc2FtZSBvYmplY3Qgd2lsbAorICBoYXZlIG5v
IGVmZmVjdC4KKyAgIEBtZXRob2QgcmVtb3ZlQXJyYXlPYnNlcnZlcgorICBAcGFyYW0ge09iamVj
dH0gdGFyZ2V0IFRoZSBvYmplY3Qgb2JzZXJ2aW5nIHRoZSBhcnJheS4KKyAgQHBhcmFtIHtPYmpl
Y3R9IG9wdHMgT3B0aW9uYWwgaGFzaCBvZiBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW5jbHVkaW5n
CisgICAgYHdpbGxDaGFuZ2VgIGFuZCBgZGlkQ2hhbmdlYCBvcHRpb24uCisgIEByZXR1cm4ge0Vt
YmVyLkFycmF5fSByZWNlaXZlcgorICBAcHVibGljCisqLworCisvKioKKyAgQmVjb21lcyB0cnVl
IHdoZW5ldmVyIHRoZSBhcnJheSBjdXJyZW50bHkgaGFzIG9ic2VydmVycyB3YXRjaGluZyBjaGFu
Z2VzCisgIG9uIHRoZSBhcnJheS4KKyAgIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gaGFzQXJyYXlPYnNl
cnZlcnMKKyAgQHB1YmxpYworKi8KKworLyoqCisgIElmIHlvdSBhcmUgaW1wbGVtZW50aW5nIGFu
IG9iamVjdCB0aGF0IHN1cHBvcnRzIGBFbWJlci5BcnJheWAsIGNhbGwgdGhpcworICBtZXRob2Qg
anVzdCBiZWZvcmUgdGhlIGFycmF5IGNvbnRlbnQgY2hhbmdlcyB0byBub3RpZnkgYW55IG9ic2Vy
dmVycyBhbmQKKyAgaW52YWxpZGF0ZSBhbnkgcmVsYXRlZCBwcm9wZXJ0aWVzLiBQYXNzIHRoZSBz
dGFydGluZyBpbmRleCBvZiB0aGUgY2hhbmdlCisgIGFzIHdlbGwgYXMgYSBkZWx0YSBvZiB0aGUg
YW1vdW50cyB0byBjaGFuZ2UuCisgICBAbWV0aG9kIGFycmF5Q29udGVudFdpbGxDaGFuZ2UKKyAg
QHBhcmFtIHtOdW1iZXJ9IHN0YXJ0SWR4IFRoZSBzdGFydGluZyBpbmRleCBpbiB0aGUgYXJyYXkg
dGhhdCB3aWxsIGNoYW5nZS4KKyAgQHBhcmFtIHtOdW1iZXJ9IHJlbW92ZUFtdCBUaGUgbnVtYmVy
IG9mIGl0ZW1zIHRoYXQgd2lsbCBiZSByZW1vdmVkLiBJZiB5b3UKKyAgICBwYXNzIGBudWxsYCBh
c3N1bWVzIDAKKyAgQHBhcmFtIHtOdW1iZXJ9IGFkZEFtdCBUaGUgbnVtYmVyIG9mIGl0ZW1zIHRo
YXQgd2lsbCBiZSBhZGRlZC4gSWYgeW91CisgICAgcGFzcyBgbnVsbGAgYXNzdW1lcyAwLgorICBA
cmV0dXJuIHtFbWJlci5BcnJheX0gcmVjZWl2ZXIKKyAgQHB1YmxpYworKi8KKworLyoqCisgIElm
IHlvdSBhcmUgaW1wbGVtZW50aW5nIGFuIG9iamVjdCB0aGF0IHN1cHBvcnRzIGBFbWJlci5BcnJh
eWAsIGNhbGwgdGhpcworICBtZXRob2QganVzdCBhZnRlciB0aGUgYXJyYXkgY29udGVudCBjaGFu
Z2VzIHRvIG5vdGlmeSBhbnkgb2JzZXJ2ZXJzIGFuZAorICBpbnZhbGlkYXRlIGFueSByZWxhdGVk
IHByb3BlcnRpZXMuIFBhc3MgdGhlIHN0YXJ0aW5nIGluZGV4IG9mIHRoZSBjaGFuZ2UKKyAgYXMg
d2VsbCBhcyBhIGRlbHRhIG9mIHRoZSBhbW91bnRzIHRvIGNoYW5nZS4KKyAgIEBtZXRob2QgYXJy
YXlDb250ZW50RGlkQ2hhbmdlCisgIEBwYXJhbSB7TnVtYmVyfSBzdGFydElkeCBUaGUgc3RhcnRp
bmcgaW5kZXggaW4gdGhlIGFycmF5IHRoYXQgZGlkIGNoYW5nZS4KKyAgQHBhcmFtIHtOdW1iZXJ9
IHJlbW92ZUFtdCBUaGUgbnVtYmVyIG9mIGl0ZW1zIHRoYXQgd2VyZSByZW1vdmVkLiBJZiB5b3UK
KyAgICBwYXNzIGBudWxsYCBhc3N1bWVzIDAKKyAgQHBhcmFtIHtOdW1iZXJ9IGFkZEFtdCBUaGUg
bnVtYmVyIG9mIGl0ZW1zIHRoYXQgd2VyZSBhZGRlZC4gSWYgeW91CisgICAgcGFzcyBgbnVsbGAg
YXNzdW1lcyAwLgorICBAcmV0dXJuIHtFbWJlci5BcnJheX0gcmVjZWl2ZXIKKyAgQHB1YmxpYwor
Ki8KKworLyoqCisgIFJldHVybnMgYSBzcGVjaWFsIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRv
IG9ic2VydmUgaW5kaXZpZHVhbCBwcm9wZXJ0aWVzCisgIG9uIHRoZSBhcnJheS4gSnVzdCBnZXQg
YW4gZXF1aXZhbGVudCBwcm9wZXJ0eSBvbiB0aGlzIG9iamVjdCBhbmQgaXQgd2lsbAorICByZXR1
cm4gYW4gZW51bWVyYWJsZSB0aGF0IG1hcHMgYXV0b21hdGljYWxseSB0byB0aGUgbmFtZWQga2V5
IG9uIHRoZQorICBtZW1iZXIgb2JqZWN0cy4KKyAgIGBAZWFjaGAgc2hvdWxkIG9ubHkgYmUgdXNl
ZCBpbiBhIG5vbi10ZXJtaW5hbCBjb250ZXh0LiBFeGFtcGxlOgorICAgYGBgamF2YXNjcmlwdAor
ICBteU1ldGhvZDogY29tcHV0ZWQoJ3Bvc3RzLkBlYWNoLmF1dGhvcicsIGZ1bmN0aW9uKCl7Cisg
ICAgLi4uCisgIH0pOworICBgYGAKKyAgIElmIHlvdSBtZXJlbHkgd2FudCB0byB3YXRjaCBmb3Ig
dGhlIGFycmF5IGJlaW5nIGNoYW5nZWQsIGxpa2UgYW4gb2JqZWN0IGJlaW5nCisgIHJlcGxhY2Vk
LCBhZGRlZCBvciByZW1vdmVkLCB1c2UgYFtdYCBpbnN0ZWFkIG9mIGBAZWFjaGAuCisgICBgYGBq
YXZhc2NyaXB0CisgIG15TWV0aG9kOiBjb21wdXRlZCgncG9zdHMuW10nLCBmdW5jdGlvbigpewor
ICAgIC4uLgorICB9KTsKKyAgYGBgCisgICBAcHJvcGVydHkgQGVhY2gKKyAgQHB1YmxpYworKi8K
K2VuaWZlZCgnZW1iZXItcnVudGltZS9taXhpbnMvY29tcGFyYWJsZScsIFsnZXhwb3J0cycsICdl
bWJlci1tZXRhbC9taXhpbiddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxNaXhpbikg
eworICAndXNlIHN0cmljdCc7CisKKyAgLyoqCisgIEBtb2R1bGUgZW1iZXIKKyAgQHN1Ym1vZHVs
ZSBlbWJlci1ydW50aW1lCisgICovCisKKyAgLyoqCisgICAgSW1wbGVtZW50cyBzb21lIHN0YW5k
YXJkIG1ldGhvZHMgZm9yIGNvbXBhcmluZyBvYmplY3RzLiBBZGQgdGhpcyBtaXhpbiB0bworICAg
IGFueSBjbGFzcyB5b3UgY3JlYXRlIHRoYXQgY2FuIGNvbXBhcmUgaXRzIGluc3RhbmNlcy4KKyAg
CisgICAgWW91IHNob3VsZCBpbXBsZW1lbnQgdGhlIGBjb21wYXJlKClgIG1ldGhvZC4KKyAgCisg
ICAgQGNsYXNzIENvbXBhcmFibGUKKyAgICBAbmFtZXNwYWNlIEVtYmVyCisgICAgQHNpbmNlIEVt
YmVyIDAuOQorICAgIEBwcml2YXRlCisgICovCisgIGV4cG9ydHMuZGVmYXVsdCA9IF9lbWJlck1l
dGFsTWl4aW4uTWl4aW4uY3JlYXRlKHsKKworICAgIC8qKgorICAgICAgX19SZXF1aXJlZC5fXyBZ
b3UgbXVzdCBpbXBsZW1lbnQgdGhpcyBtZXRob2QgdG8gYXBwbHkgdGhpcyBtaXhpbi4KKyAgICAg
ICBPdmVycmlkZSB0byByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbiBvZiB0aGUg
dHdvIHBhcmFtZXRlcnMuIFRoZQorICAgICAgY29tcGFyZSBtZXRob2Qgc2hvdWxkIHJldHVybjoK
KyAgICAgICAtIGAtMWAgaWYgYGEgPCBiYAorICAgICAgLSBgMGAgaWYgYGEgPT0gYmAKKyAgICAg
IC0gYDFgIGlmIGBhID4gYmAKKyAgICAgICBEZWZhdWx0IGltcGxlbWVudGF0aW9uIHJhaXNlcyBh
biBleGNlcHRpb24uCisgICAgICAgQG1ldGhvZCBjb21wYXJlCisgICAgICBAcGFyYW0gYSB7T2Jq
ZWN0fSB0aGUgZmlyc3Qgb2JqZWN0IHRvIGNvbXBhcmUKKyAgICAgIEBwYXJhbSBiIHtPYmplY3R9
IHRoZSBzZWNvbmQgb2JqZWN0IHRvIGNvbXBhcmUKKyAgICAgIEByZXR1cm4ge051bWJlcn0gdGhl
IHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbgorICAgICAgQHByaXZhdGUKKyAgICAqLworICAgIGNv
bXBhcmU6IG51bGwKKyAgfSk7Cit9KTsKK2VuaWZlZCgnZW1iZXItcnVudGltZS9taXhpbnMvY29u
dGFpbmVyX3Byb3h5JywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL3J1bl9sb29wJywgJ2VtYmVy
LW1ldGFsL2RlYnVnJywgJ2VtYmVyLW1ldGFsL21peGluJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBf
ZW1iZXJNZXRhbFJ1bl9sb29wLCBfZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJNZXRhbE1peGluKSB7
CisgIC8qKgorICBAbW9kdWxlIGVtYmVyCisgIEBzdWJtb2R1bGUgZW1iZXItcnVudGltZQorICAq
LworICAndXNlIHN0cmljdCc7CisKKyAgZXhwb3J0cy5idWlsZEZha2VDb250YWluZXJXaXRoRGVw
cmVjYXRpb25zID0gYnVpbGRGYWtlQ29udGFpbmVyV2l0aERlcHJlY2F0aW9uczsKKworICAvKioK
KyAgICBDb250YWluZXJQcm94eU1peGluIGlzIHVzZWQgdG8gcHJvdmlkZSBwdWJsaWMgYWNjZXNz
IHRvIHNwZWNpZmljCisgICAgY29udGFpbmVyIGZ1bmN0aW9uYWxpdHkuCisgIAorICAgIEBjbGFz
cyBDb250YWluZXJQcm94eU1peGluCisgICAgQHByaXZhdGUKKyAgKi8KKyAgZXhwb3J0cy5kZWZh
dWx0ID0gX2VtYmVyTWV0YWxNaXhpbi5NaXhpbi5jcmVhdGUoeworICAgIC8qKgorICAgICBUaGUg
Y29udGFpbmVyIHN0b3JlcyBzdGF0ZS4KKyAgICAgIEBwcml2YXRlCisgICAgIEBwcm9wZXJ0eSB7
RW1iZXIuQ29udGFpbmVyfSBfX2NvbnRhaW5lcl9fCisgICAgICovCisgICAgX19jb250YWluZXJf
XzogbnVsbCwKKworICAgIC8qKgorICAgICBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNhbiBiZSB1
c2VkIHRvIHByb3ZpZGUgYW4gb3duZXIgdG8gYQorICAgICBtYW51YWxseSBjcmVhdGVkIGluc3Rh
bmNlLgorICAgICAgRXhhbXBsZToKKyAgICAgIGBgYAorICAgICBsZXQgb3duZXIgPSBFbWJlci5n
ZXRPd25lcih0aGlzKTsKKyAgICAgIFVzZXIuY3JlYXRlKAorICAgICAgIG93bmVyLm93bmVySW5q
ZWN0aW9uKCksCisgICAgICAgeyB1c2VybmFtZTogJ3J3amJsdWUnIH0KKyAgICAgKQorICAgICBg
YGAKKyAgICAgIEBwdWJsaWMKKyAgICAgQG1ldGhvZCBvd25lckluamVjdGlvbgorICAgICBAcmV0
dXJuIHtPYmplY3R9CisgICAgKi8KKyAgICBvd25lckluamVjdGlvbjogZnVuY3Rpb24gKCkgewor
ICAgICAgcmV0dXJuIHRoaXMuX19jb250YWluZXJfXy5vd25lckluamVjdGlvbigpOworICAgIH0s
CisKKyAgICAvKioKKyAgICAgR2l2ZW4gYSBmdWxsTmFtZSByZXR1cm4gYSBjb3JyZXNwb25kaW5n
IGluc3RhbmNlLgorICAgICAgVGhlIGRlZmF1bHQgYmVoYXZpb3VyIGlzIGZvciBsb29rdXAgdG8g
cmV0dXJuIGEgc2luZ2xldG9uIGluc3RhbmNlLgorICAgICBUaGUgc2luZ2xldG9uIGlzIHNjb3Bl
ZCB0byB0aGUgY29udGFpbmVyLCBhbGxvd2luZyBtdWx0aXBsZSBjb250YWluZXJzCisgICAgIHRv
IGFsbCBoYXZlIHRoZWlyIG93biBsb2NhbGx5IHNjb3BlZCBzaW5nbGV0b25zLgorICAgICAgYGBg
amF2YXNjcmlwdAorICAgICB2YXIgcmVnaXN0cnkgPSBuZXcgUmVnaXN0cnkoKTsKKyAgICAgdmFy
IGNvbnRhaW5lciA9IHJlZ2lzdHJ5LmNvbnRhaW5lcigpOworICAgICAgcmVnaXN0cnkucmVnaXN0
ZXIoJ2FwaTp0d2l0dGVyJywgVHdpdHRlcik7CisgICAgICB2YXIgdHdpdHRlciA9IGNvbnRhaW5l
ci5sb29rdXAoJ2FwaTp0d2l0dGVyJyk7CisgICAgICB0d2l0dGVyIGluc3RhbmNlb2YgVHdpdHRl
cjsgLy8gPT4gdHJ1ZQorICAgICAgLy8gYnkgZGVmYXVsdCB0aGUgY29udGFpbmVyIHdpbGwgcmV0
dXJuIHNpbmdsZXRvbnMKKyAgICAgdmFyIHR3aXR0ZXIyID0gY29udGFpbmVyLmxvb2t1cCgnYXBp
OnR3aXR0ZXInKTsKKyAgICAgdHdpdHRlcjIgaW5zdGFuY2VvZiBUd2l0dGVyOyAvLyA9PiB0cnVl
CisgICAgICB0d2l0dGVyID09PSB0d2l0dGVyMjsgLy89PiB0cnVlCisgICAgIGBgYAorICAgICAg
SWYgc2luZ2xldG9ucyBhcmUgbm90IHdhbnRlZCBhbiBvcHRpb25hbCBmbGFnIGNhbiBiZSBwcm92
aWRlZCBhdCBsb29rdXAuCisgICAgICBgYGBqYXZhc2NyaXB0CisgICAgIHZhciByZWdpc3RyeSA9
IG5ldyBSZWdpc3RyeSgpOworICAgICB2YXIgY29udGFpbmVyID0gcmVnaXN0cnkuY29udGFpbmVy
KCk7CisgICAgICByZWdpc3RyeS5yZWdpc3RlcignYXBpOnR3aXR0ZXInLCBUd2l0dGVyKTsKKyAg
ICAgIHZhciB0d2l0dGVyID0gY29udGFpbmVyLmxvb2t1cCgnYXBpOnR3aXR0ZXInLCB7IHNpbmds
ZXRvbjogZmFsc2UgfSk7CisgICAgIHZhciB0d2l0dGVyMiA9IGNvbnRhaW5lci5sb29rdXAoJ2Fw
aTp0d2l0dGVyJywgeyBzaW5nbGV0b246IGZhbHNlIH0pOworICAgICAgdHdpdHRlciA9PT0gdHdp
dHRlcjI7IC8vPT4gZmFsc2UKKyAgICAgYGBgCisgICAgICBAcHVibGljCisgICAgIEBtZXRob2Qg
bG9va3VwCisgICAgIEBwYXJhbSB7U3RyaW5nfSBmdWxsTmFtZQorICAgICBAcGFyYW0ge09iamVj
dH0gb3B0aW9ucworICAgICBAcmV0dXJuIHthbnl9CisgICAgICovCisgICAgbG9va3VwOiBmdW5j
dGlvbiAoZnVsbE5hbWUsIG9wdGlvbnMpIHsKKyAgICAgIHJldHVybiB0aGlzLl9fY29udGFpbmVy
X18ubG9va3VwKGZ1bGxOYW1lLCBvcHRpb25zKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgIEdp
dmVuIGEgZnVsbE5hbWUgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIGZhY3RvcnkuCisgICAgICBA
cHJpdmF0ZQorICAgICBAbWV0aG9kIF9sb29rdXBGYWN0b3J5CisgICAgIEBwYXJhbSB7U3RyaW5n
fSBmdWxsTmFtZQorICAgICBAcmV0dXJuIHthbnl9CisgICAgICovCisgICAgX2xvb2t1cEZhY3Rv
cnk6IGZ1bmN0aW9uIChmdWxsTmFtZSwgb3B0aW9ucykgeworICAgICAgcmV0dXJuIHRoaXMuX19j
b250YWluZXJfXy5sb29rdXBGYWN0b3J5KGZ1bGxOYW1lLCBvcHRpb25zKTsKKyAgICB9LAorCisg
ICAgLyoqCisgICAgIEBwcml2YXRlCisgICAgICovCisgICAgd2lsbERlc3Ryb3k6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgIHRoaXMuX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisKKyAgICAg
IGlmICh0aGlzLl9fY29udGFpbmVyX18pIHsKKyAgICAgICAgX2VtYmVyTWV0YWxSdW5fbG9vcC5k
ZWZhdWx0KHRoaXMuX19jb250YWluZXJfXywgJ2Rlc3Ryb3knKTsKKyAgICAgIH0KKyAgICB9Cisg
IH0pOworCisgIGZ1bmN0aW9uIGJ1aWxkRmFrZUNvbnRhaW5lcldpdGhEZXByZWNhdGlvbnMoY29u
dGFpbmVyKSB7CisgICAgdmFyIGZha2VDb250YWluZXIgPSB7fTsKKyAgICB2YXIgcHJvcGVydHlN
YXBwaW5ncyA9IHsKKyAgICAgIGxvb2t1cDogJ2xvb2t1cCcsCisgICAgICBsb29rdXBGYWN0b3J5
OiAnX2xvb2t1cEZhY3RvcnknCisgICAgfTsKKworICAgIGZvciAodmFyIGNvbnRhaW5lclByb3Bl
cnR5IGluIHByb3BlcnR5TWFwcGluZ3MpIHsKKyAgICAgIGZha2VDb250YWluZXJbY29udGFpbmVy
UHJvcGVydHldID0gYnVpbGRGYWtlQ29udGFpbmVyRnVuY3Rpb24oY29udGFpbmVyLCBjb250YWlu
ZXJQcm9wZXJ0eSwgcHJvcGVydHlNYXBwaW5nc1tjb250YWluZXJQcm9wZXJ0eV0pOworICAgIH0K
KworICAgIHJldHVybiBmYWtlQ29udGFpbmVyOworICB9CisKKyAgZnVuY3Rpb24gYnVpbGRGYWtl
Q29udGFpbmVyRnVuY3Rpb24oY29udGFpbmVyLCBjb250YWluZXJQcm9wZXJ0eSwgb3duZXJQcm9w
ZXJ0eSkgeworICAgIHJldHVybiBmdW5jdGlvbiAoKSB7CisgICAgICBfZW1iZXJNZXRhbERlYnVn
LmRlcHJlY2F0ZSgnVXNpbmcgdGhlIGluamVjdGVkIGBjb250YWluZXJgIGlzIGRlcHJlY2F0ZWQu
IFBsZWFzZSB1c2UgdGhlIGBnZXRPd25lcmAgaGVscGVyIHRvIGFjY2VzcyB0aGUgb3duZXIgb2Yg
dGhpcyBvYmplY3QgYW5kIHRoZW4gY2FsbCBgJyArIG93bmVyUHJvcGVydHkgKyAnYCBpbnN0ZWFk
LicsIGZhbHNlLCB7CisgICAgICAgIGlkOiAnZW1iZXItYXBwbGljYXRpb24uaW5qZWN0ZWQtY29u
dGFpbmVyJywKKyAgICAgICAgdW50aWw6ICczLjAuMCcsCisgICAgICAgIHVybDogJ2h0dHA6Ly9l
bWJlcmpzLmNvbS9kZXByZWNhdGlvbnMvdjIueCN0b2NfaW5qZWN0ZWQtY29udGFpbmVyLWFjY2Vz
cycKKyAgICAgIH0pOworICAgICAgcmV0dXJuIGNvbnRhaW5lcltjb250YWluZXJQcm9wZXJ0eV0u
YXBwbHkoY29udGFpbmVyLCBhcmd1bWVudHMpOworICAgIH07CisgIH0KK30pOworZW5pZmVkKCdl
bWJlci1ydW50aW1lL21peGlucy9jb250cm9sbGVyJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFs
L21peGluJywgJ2VtYmVyLW1ldGFsL2FsaWFzJywgJ2VtYmVyLXJ1bnRpbWUvbWl4aW5zL2FjdGlv
bl9oYW5kbGVyJywgJ2VtYmVyLXJ1bnRpbWUvbWl4aW5zL2NvbnRyb2xsZXJfY29udGVudF9tb2Rl
bF9hbGlhc19kZXByZWNhdGlvbiddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxNaXhp
biwgX2VtYmVyTWV0YWxBbGlhcywgX2VtYmVyUnVudGltZU1peGluc0FjdGlvbl9oYW5kbGVyLCBf
ZW1iZXJSdW50aW1lTWl4aW5zQ29udHJvbGxlcl9jb250ZW50X21vZGVsX2FsaWFzX2RlcHJlY2F0
aW9uKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICAvKioKKyAgICBAY2xhc3MgQ29udHJvbGxlck1p
eGluCisgICAgQG5hbWVzcGFjZSBFbWJlcgorICAgIEB1c2VzIEVtYmVyLkFjdGlvbkhhbmRsZXIK
KyAgICBAcHJpdmF0ZQorICAqLworICBleHBvcnRzLmRlZmF1bHQgPSBfZW1iZXJNZXRhbE1peGlu
Lk1peGluLmNyZWF0ZShfZW1iZXJSdW50aW1lTWl4aW5zQWN0aW9uX2hhbmRsZXIuZGVmYXVsdCwg
X2VtYmVyUnVudGltZU1peGluc0NvbnRyb2xsZXJfY29udGVudF9tb2RlbF9hbGlhc19kZXByZWNh
dGlvbi5kZWZhdWx0LCB7CisgICAgLyogZHVja3R5cGUgYXMgYSBjb250cm9sbGVyICovCisgICAg
aXNDb250cm9sbGVyOiB0cnVlLAorCisgICAgLyoqCisgICAgICBUaGUgb2JqZWN0IHRvIHdoaWNo
IGFjdGlvbnMgZnJvbSB0aGUgdmlldyBzaG91bGQgYmUgc2VudC4KKyAgICAgICBGb3IgZXhhbXBs
ZSwgd2hlbiBhIEhhbmRsZWJhcnMgdGVtcGxhdGUgdXNlcyB0aGUgYHt7YWN0aW9ufX1gIGhlbHBl
ciwKKyAgICAgIGl0IHdpbGwgYXR0ZW1wdCB0byBzZW5kIHRoZSBhY3Rpb24gdG8gdGhlIHZpZXcn
cyBjb250cm9sbGVyJ3MgYHRhcmdldGAuCisgICAgICAgQnkgZGVmYXVsdCwgdGhlIHZhbHVlIG9m
IHRoZSB0YXJnZXQgcHJvcGVydHkgaXMgc2V0IHRvIHRoZSByb3V0ZXIsIGFuZAorICAgICAgaXMg
aW5qZWN0ZWQgd2hlbiBhIGNvbnRyb2xsZXIgaXMgaW5zdGFudGlhdGVkLiBUaGlzIGluamVjdGlv
biBpcyBhcHBsaWVkCisgICAgICBhcyBwYXJ0IG9mIHRoZSBhcHBsaWNhdGlvbidzIGluaXRpYWxp
emF0aW9uIHByb2Nlc3MuIEluIG1vc3QgY2FzZXMgdGhlCisgICAgICBgdGFyZ2V0YCBwcm9wZXJ0
eSB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgc2V0IHRvIHRoZSBsb2dpY2FsIGNvbnN1bWVyIG9mCisg
ICAgICBhY3Rpb25zIGZvciB0aGUgY29udHJvbGxlci4KKyAgICAgICBAcHJvcGVydHkgdGFyZ2V0
CisgICAgICBAZGVmYXVsdCBudWxsCisgICAgICBAcHVibGljCisgICAgKi8KKyAgICB0YXJnZXQ6
IG51bGwsCisKKyAgICBwYXJlbnRDb250cm9sbGVyOiBudWxsLAorCisgICAgc3RvcmU6IG51bGws
CisKKyAgICAvKioKKyAgICAgIFRoZSBjb250cm9sbGVyJ3MgY3VycmVudCBtb2RlbC4gV2hlbiBy
ZXRyaWV2aW5nIG9yIG1vZGlmeWluZyBhIGNvbnRyb2xsZXIncworICAgICAgbW9kZWwsIHRoaXMg
cHJvcGVydHkgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgYGNvbnRlbnRgIHByb3BlcnR5
LgorICAgICAgIEBwcm9wZXJ0eSBtb2RlbAorICAgICAgQHB1YmxpYworICAgICAqLworICAgIG1v
ZGVsOiBudWxsLAorCisgICAgLyoqCisgICAgICBAcHJpdmF0ZQorICAgICovCisgICAgY29udGVu
dDogX2VtYmVyTWV0YWxBbGlhcy5kZWZhdWx0KCdtb2RlbCcpCisKKyAgfSk7Cit9KTsKK2VuaWZl
ZCgnZW1iZXItcnVudGltZS9taXhpbnMvY29udHJvbGxlcl9jb250ZW50X21vZGVsX2FsaWFzX2Rl
cHJlY2F0aW9uJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLW1ldGFs
L21peGluJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJNZXRh
bE1peGluKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICAvKgorICAgIFRoZSBDb250cm9sbGVyQ29u
dGVudE1vZGVsQWxpYXNEZXByZWNhdGlvbiBtaXhpbiBpcyB1c2VkIHRvIHByb3ZpZGUgYSB1c2Vm
dWwKKyAgICBkZXByZWNhdGlvbiB3YXJuaW5nIHdoZW4gc3BlY2lmeWluZyBgY29udGVudGAgZGly
ZWN0bHkgb24gYSBgRW1iZXIuQ29udHJvbGxlcmAKKyAgICAod2l0aG91dCBhbHNvIHNwZWNpZnlp
bmcgYG1vZGVsYCkuCisgIAorICAgIEVtYmVyIHZlcnNpb25zIHByaW9yIHRvIDEuNyB1c2VkIGBt
b2RlbGAgYXMgYW4gYWxpYXMgb2YgYGNvbnRlbnRgLCBidXQgZHVlIHRvCisgICAgbXVjaCBjb25m
dXNpb24gdGhpcyBhbGlhcyB3YXMgcmV2ZXJzZWQgKHNvIGBjb250ZW50YCBpcyBub3cgYW4gYWxp
YXMgb2YgYG1vZGVsKS4KKyAgCisgICAgVGhpcyBjaGFuZ2UgcmVkdWNlcyBtYW55IGNhdmVhdHMg
d2l0aCBtb2RlbC9jb250ZW50LCBhbmQgYWxzbyBzZXRzIGEKKyAgICBzaW1wbGUgZ3JvdW5kIHJ1
bGU6IE5ldmVyIHNldCBhIGNvbnRyb2xsZXJzIGNvbnRlbnQsIHJhdGhlciBhbHdheXMgc2V0Cisg
ICAgaXRzIG1vZGVsIGFuZCBlbWJlciB3aWxsIGRvIHRoZSByaWdodCB0aGluZy4KKyAgCisgICAg
VXNlZCBpbnRlcm5hbGx5IGJ5IEVtYmVyIGluIGBFbWJlci5Db250cm9sbGVyYC4KKyAgKi8KKyAg
ZXhwb3J0cy5kZWZhdWx0ID0gX2VtYmVyTWV0YWxNaXhpbi5NaXhpbi5jcmVhdGUoeworICAgIC8q
KgorICAgICAgQHByaXZhdGUKKyAgICAgICBNb3ZlcyBgY29udGVudGAgdG8gYG1vZGVsYCAgYXQg
ZXh0ZW5kIHRpbWUgaWYgYSBgbW9kZWxgIGlzIG5vdCBhbHNvIHNwZWNpZmllZC4KKyAgICAgICBO
b3RlIHRoYXQgdGhpcyBjdXJyZW50bHkgbW9kaWZpZXMgdGhlIG1peGluIHRoZW1zZWx2ZXMsIHdo
aWNoIGlzIHRlY2huaWNhbGx5CisgICAgICBkdWJpb3VzIGJ1dCBpcyBwcmFjdGljYWxseSBvZiBs
aXR0bGUgY29uc2VxdWVuY2UuIFRoaXMgbWF5IGNoYW5nZSBpbiB0aGUKKyAgICAgIGZ1dHVyZS4K
KyAgICAgICBAbWV0aG9kIHdpbGxNZXJnZU1peGluCisgICAgICBAc2luY2UgMS40LjAKKyAgICAq
LworICAgIHdpbGxNZXJnZU1peGluOiBmdW5jdGlvbiAocHJvcHMpIHsKKyAgICAgIC8vIENhbGxp
bmcgc3VwZXIgaXMgb25seSBPSyBoZXJlIHNpbmNlIHdlIEtOT1cgdGhhdAorICAgICAgLy8gdGhl
cmUgaXMgYW5vdGhlciBNaXhpbiBsb2FkZWQgZmlyc3QuCisgICAgICB0aGlzLl9zdXBlci5hcHBs
eSh0aGlzLCBhcmd1bWVudHMpOworCisgICAgICB2YXIgbW9kZWxTcGVjaWZpZWQgPSAhIXByb3Bz
Lm1vZGVsOworCisgICAgICBpZiAocHJvcHMuY29udGVudCAmJiAhbW9kZWxTcGVjaWZpZWQpIHsK
KyAgICAgICAgcHJvcHMubW9kZWwgPSBwcm9wcy5jb250ZW50OworICAgICAgICBkZWxldGUgcHJv
cHNbJ2NvbnRlbnQnXTsKKworICAgICAgICBfZW1iZXJNZXRhbERlYnVnLmRlcHJlY2F0ZSgnRG8g
bm90IHNwZWNpZnkgYGNvbnRlbnRgIG9uIGEgQ29udHJvbGxlciwgdXNlIGBtb2RlbGAgaW5zdGVh
ZC4nLCBmYWxzZSwgeyBpZDogJ2VtYmVyLXJ1bnRpbWUud2lsbC1tZXJnZS1taXhpbicsIHVudGls
OiAnMy4wLjAnIH0pOworICAgICAgfQorICAgIH0KKyAgfSk7Cit9KTsKK2VuaWZlZCgnZW1iZXIt
cnVudGltZS9taXhpbnMvY29weWFibGUnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvZGVidWcn
LCAnZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0JywgJ2VtYmVyLW1ldGFsL21peGluJywgJ2VtYmVy
LXJ1bnRpbWUvbWl4aW5zL2ZyZWV6YWJsZScsICdlbWJlci1tZXRhbC9lcnJvciddLCBmdW5jdGlv
biAoZXhwb3J0cywgX2VtYmVyTWV0YWxEZWJ1ZywgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQsIF9l
bWJlck1ldGFsTWl4aW4sIF9lbWJlclJ1bnRpbWVNaXhpbnNGcmVlemFibGUsIF9lbWJlck1ldGFs
RXJyb3IpIHsKKyAgLyoqCisgIEBtb2R1bGUgZW1iZXIKKyAgQHN1Ym1vZHVsZSBlbWJlci1ydW50
aW1lCisgICovCisKKyAgJ3VzZSBzdHJpY3QnOworCisgIC8qKgorICAgIEltcGxlbWVudHMgc29t
ZSBzdGFuZGFyZCBtZXRob2RzIGZvciBjb3B5aW5nIGFuIG9iamVjdC4gQWRkIHRoaXMgbWl4aW4g
dG8KKyAgICBhbnkgb2JqZWN0IHlvdSBjcmVhdGUgdGhhdCBjYW4gY3JlYXRlIGEgY29weSBvZiBp
dHNlbGYuIFRoaXMgbWl4aW4gaXMKKyAgICBhZGRlZCBhdXRvbWF0aWNhbGx5IHRvIHRoZSBidWls
dC1pbiBhcnJheS4KKyAgCisgICAgWW91IHNob3VsZCBnZW5lcmFsbHkgaW1wbGVtZW50IHRoZSBg
Y29weSgpYCBtZXRob2QgdG8gcmV0dXJuIGEgY29weSBvZiB0aGUKKyAgICByZWNlaXZlci4KKyAg
CisgICAgTm90ZSB0aGF0IGBmcm96ZW5Db3B5KClgIHdpbGwgb25seSB3b3JrIGlmIHlvdSBhbHNv
IGltcGxlbWVudAorICAgIGBFbWJlci5GcmVlemFibGVgLgorICAKKyAgICBAY2xhc3MgQ29weWFi
bGUKKyAgICBAbmFtZXNwYWNlIEVtYmVyCisgICAgQHNpbmNlIEVtYmVyIDAuOQorICAgIEBwcml2
YXRlCisgICovCisgIGV4cG9ydHMuZGVmYXVsdCA9IF9lbWJlck1ldGFsTWl4aW4uTWl4aW4uY3Jl
YXRlKHsKKyAgICAvKioKKyAgICAgIF9fUmVxdWlyZWQuX18gWW91IG11c3QgaW1wbGVtZW50IHRo
aXMgbWV0aG9kIHRvIGFwcGx5IHRoaXMgbWl4aW4uCisgICAgICAgT3ZlcnJpZGUgdG8gcmV0dXJu
IGEgY29weSBvZiB0aGUgcmVjZWl2ZXIuIERlZmF1bHQgaW1wbGVtZW50YXRpb24gcmFpc2VzCisg
ICAgICBhbiBleGNlcHRpb24uCisgICAgICAgQG1ldGhvZCBjb3B5CisgICAgICBAcGFyYW0ge0Jv
b2xlYW59IGRlZXAgaWYgYHRydWVgLCBhIGRlZXAgY29weSBvZiB0aGUgb2JqZWN0IHNob3VsZCBi
ZSBtYWRlCisgICAgICBAcmV0dXJuIHtPYmplY3R9IGNvcHkgb2YgcmVjZWl2ZXIKKyAgICAgIEBw
cml2YXRlCisgICAgKi8KKyAgICBjb3B5OiBudWxsLAorCisgICAgLyoqCisgICAgICBJZiB0aGUg
b2JqZWN0IGltcGxlbWVudHMgYEVtYmVyLkZyZWV6YWJsZWAsIHRoZW4gdGhpcyB3aWxsIHJldHVy
biBhIG5ldworICAgICAgY29weSBpZiB0aGUgb2JqZWN0IGlzIG5vdCBmcm96ZW4gYW5kIHRoZSBy
ZWNlaXZlciBpZiB0aGUgb2JqZWN0IGlzIGZyb3plbi4KKyAgICAgICBSYWlzZXMgYW4gZXhjZXB0
aW9uIGlmIHlvdSB0cnkgdG8gY2FsbCB0aGlzIG1ldGhvZCBvbiBhIG9iamVjdCB0aGF0IGRvZXMK
KyAgICAgIG5vdCBzdXBwb3J0IGZyZWV6aW5nLgorICAgICAgIFlvdSBzaG91bGQgdXNlIHRoaXMg
bWV0aG9kIHdoZW5ldmVyIHlvdSB3YW50IGEgY29weSBvZiBhIGZyZWV6YWJsZSBvYmplY3QKKyAg
ICAgIHNpbmNlIGEgZnJlZXphYmxlIG9iamVjdCBjYW4gc2ltcGx5IHJldHVybiBpdHNlbGYgd2l0
aG91dCBhY3R1YWxseQorICAgICAgY29uc3VtaW5nIG1vcmUgbWVtb3J5LgorICAgICAgIEBtZXRo
b2QgZnJvemVuQ29weQorICAgICAgQHJldHVybiB7T2JqZWN0fSBjb3B5IG9mIHJlY2VpdmVyIG9y
IHJlY2VpdmVyCisgICAgICBAZGVwcmVjYXRlZCBVc2UgYE9iamVjdC5mcmVlemVgIGluc3RlYWQu
CisgICAgICBAcHJpdmF0ZQorICAgICovCisgICAgZnJvemVuQ29weTogZnVuY3Rpb24gKCkgewor
ICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5kZXByZWNhdGUoJ2Bmcm96ZW5Db3B5YCBpcyBkZXByZWNh
dGVkLCB1c2UgYE9iamVjdC5mcmVlemVgIGluc3RlYWQuJywgZmFsc2UsIHsgaWQ6ICdlbWJlci1y
dW50aW1lLmZyb3plbi1jb3B5JywgdW50aWw6ICczLjAuMCcgfSk7CisgICAgICBpZiAoX2VtYmVy
UnVudGltZU1peGluc0ZyZWV6YWJsZS5GcmVlemFibGUgJiYgX2VtYmVyUnVudGltZU1peGluc0Zy
ZWV6YWJsZS5GcmVlemFibGUuZGV0ZWN0KHRoaXMpKSB7CisgICAgICAgIHJldHVybiBfZW1iZXJN
ZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ2lzRnJvemVuJykgPyB0aGlzIDogdGhpcy5jb3B5
KCkuZnJlZXplKCk7CisgICAgICB9IGVsc2UgeworICAgICAgICB0aHJvdyBuZXcgX2VtYmVyTWV0
YWxFcnJvci5kZWZhdWx0KHRoaXMgKyAnIGRvZXMgbm90IHN1cHBvcnQgZnJlZXppbmcnKTsKKyAg
ICAgIH0KKyAgICB9CisgIH0pOworfSk7CitlbmlmZWQoJ2VtYmVyLXJ1bnRpbWUvbWl4aW5zL2Vu
dW1lcmFibGUnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0JywgJ2VtYmVy
LW1ldGFsL3Byb3BlcnR5X3NldCcsICdlbWJlci1tZXRhbC9taXhpbicsICdlbWJlci1tZXRhbC91
dGlscycsICdlbWJlci1tZXRhbC9jb21wdXRlZCcsICdlbWJlci1tZXRhbC9lbXB0eV9vYmplY3Qn
LCAnZW1iZXItbWV0YWwvZmVhdHVyZXMnLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfZXZlbnRzJywg
J2VtYmVyLW1ldGFsL2V2ZW50cycsICdlbWJlci1ydW50aW1lL2NvbXBhcmUnLCAncmVxdWlyZSdd
LCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQsIF9lbWJlck1ldGFs
UHJvcGVydHlfc2V0LCBfZW1iZXJNZXRhbE1peGluLCBfZW1iZXJNZXRhbFV0aWxzLCBfZW1iZXJN
ZXRhbENvbXB1dGVkLCBfZW1iZXJNZXRhbEVtcHR5X29iamVjdCwgX2VtYmVyTWV0YWxGZWF0dXJl
cywgX2VtYmVyTWV0YWxQcm9wZXJ0eV9ldmVudHMsIF9lbWJlck1ldGFsRXZlbnRzLCBfZW1iZXJS
dW50aW1lQ29tcGFyZSwgX3JlcXVpcmUpIHsKKyAgLyoqCisgIEBtb2R1bGUgZW1iZXIKKyAgQHN1
Ym1vZHVsZSBlbWJlci1ydW50aW1lCisgICovCisKKyAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorICAvLyBIRUxQRVJTCisgIC8v
CisKKyAgJ3VzZSBzdHJpY3QnOworCisgIHZhciBfZW1iZXJBID0gdW5kZWZpbmVkOworCisgIGZ1
bmN0aW9uIGVtYmVyQSgpIHsKKyAgICByZXR1cm4gKF9lbWJlckEgfHwgKF9lbWJlckEgPSBfcmVx
dWlyZS5kZWZhdWx0KCdlbWJlci1ydW50aW1lL3N5c3RlbS9uYXRpdmVfYXJyYXknKS5BKSkoKTsK
KyAgfQorCisgIHZhciBjb250ZXh0cyA9IFtdOworCisgIGZ1bmN0aW9uIHBvcEN0eCgpIHsKKyAg
ICByZXR1cm4gY29udGV4dHMubGVuZ3RoID09PSAwID8ge30gOiBjb250ZXh0cy5wb3AoKTsKKyAg
fQorCisgIGZ1bmN0aW9uIHB1c2hDdHgoY3R4KSB7CisgICAgY29udGV4dHMucHVzaChjdHgpOwor
ICAgIHJldHVybiBudWxsOworICB9CisKKyAgZnVuY3Rpb24gaXRlcihrZXksIHZhbHVlKSB7Cisg
ICAgdmFyIHZhbHVlUHJvdmlkZWQgPSBhcmd1bWVudHMubGVuZ3RoID09PSAyOworCisgICAgZnVu
Y3Rpb24gaShpdGVtKSB7CisgICAgICB2YXIgY3VyID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQu
Z2V0KGl0ZW0sIGtleSk7CisgICAgICByZXR1cm4gdmFsdWVQcm92aWRlZCA/IHZhbHVlID09PSBj
dXIgOiAhIWN1cjsKKyAgICB9CisKKyAgICByZXR1cm4gaTsKKyAgfQorCisgIC8qKgorICAgIFRo
aXMgbWl4aW4gZGVmaW5lcyB0aGUgY29tbW9uIGludGVyZmFjZSBpbXBsZW1lbnRlZCBieSBlbnVt
ZXJhYmxlIG9iamVjdHMKKyAgICBpbiBFbWJlci4gTW9zdCBvZiB0aGVzZSBtZXRob2RzIGZvbGxv
dyB0aGUgc3RhbmRhcmQgQXJyYXkgaXRlcmF0aW9uCisgICAgQVBJIGRlZmluZWQgdXAgdG8gSmF2
YVNjcmlwdCAxLjggKGV4Y2x1ZGluZyBsYW5ndWFnZS1zcGVjaWZpYyBmZWF0dXJlcyB0aGF0Cisg
ICAgY2Fubm90IGJlIGVtdWxhdGVkIGluIG9sZGVyIHZlcnNpb25zIG9mIEphdmFTY3JpcHQpLgor
ICAKKyAgICBUaGlzIG1peGluIGlzIGFwcGxpZWQgYXV0b21hdGljYWxseSB0byB0aGUgQXJyYXkg
Y2xhc3Mgb24gcGFnZSBsb2FkLCBzbyB5b3UKKyAgICBjYW4gdXNlIGFueSBvZiB0aGVzZSBtZXRo
b2RzIG9uIHNpbXBsZSBhcnJheXMuIElmIEFycmF5IGFscmVhZHkgaW1wbGVtZW50cworICAgIG9u
ZSBvZiB0aGVzZSBtZXRob2RzLCB0aGUgbWl4aW4gd2lsbCBub3Qgb3ZlcnJpZGUgdGhlbS4KKyAg
CisgICAgIyMgV3JpdGluZyBZb3VyIE93biBFbnVtZXJhYmxlCisgIAorICAgIFRvIG1ha2UgeW91
ciBvd24gY3VzdG9tIGNsYXNzIGVudW1lcmFibGUsIHlvdSBuZWVkIHR3byBpdGVtczoKKyAgCisg
ICAgMS4gWW91IG11c3QgaGF2ZSBhIGxlbmd0aCBwcm9wZXJ0eS4gVGhpcyBwcm9wZXJ0eSBzaG91
bGQgY2hhbmdlIHdoZW5ldmVyCisgICAgICAgdGhlIG51bWJlciBvZiBpdGVtcyBpbiB5b3VyIGVu
dW1lcmFibGUgb2JqZWN0IGNoYW5nZXMuIElmIHlvdSB1c2UgdGhpcworICAgICAgIHdpdGggYW4g
YEVtYmVyLk9iamVjdGAgc3ViY2xhc3MsIHlvdSBzaG91bGQgYmUgc3VyZSB0byBjaGFuZ2UgdGhl
IGxlbmd0aAorICAgICAgIHByb3BlcnR5IHVzaW5nIGBzZXQoKS5gCisgIAorICAgIDIuIFlvdSBt
dXN0IGltcGxlbWVudCBgbmV4dE9iamVjdCgpLmAgU2VlIGRvY3VtZW50YXRpb24uCisgIAorICAg
IE9uY2UgeW91IGhhdmUgdGhlc2UgdHdvIG1ldGhvZHMgaW1wbGVtZW50ZWQsIGFwcGx5IHRoZSBg
RW1iZXIuRW51bWVyYWJsZWAgbWl4aW4KKyAgICB0byB5b3VyIGNsYXNzIGFuZCB5b3Ugd2lsbCBi
ZSBhYmxlIHRvIGVudW1lcmF0ZSB0aGUgY29udGVudHMgb2YgeW91ciBvYmplY3QKKyAgICBsaWtl
IGFueSBvdGhlciBjb2xsZWN0aW9uLgorICAKKyAgICAjIyBVc2luZyBFbWJlciBFbnVtZXJhdGlv
biB3aXRoIE90aGVyIExpYnJhcmllcworICAKKyAgICBNYW55IG90aGVyIGxpYnJhcmllcyBwcm92
aWRlIHNvbWUga2luZCBvZiBpdGVyYXRvciBvciBlbnVtZXJhdGlvbiBsaWtlCisgICAgZmFjaWxp
dHkuIFRoaXMgaXMgb2Z0ZW4gd2hlcmUgdGhlIG1vc3QgY29tbW9uIEFQSSBjb25mbGljdHMgb2Nj
dXIuCisgICAgRW1iZXIncyBBUEkgaXMgZGVzaWduZWQgdG8gYmUgYXMgZnJpZW5kbHkgYXMgcG9z
c2libGUgd2l0aCBvdGhlcgorICAgIGxpYnJhcmllcyBieSBpbXBsZW1lbnRpbmcgb25seSBtZXRo
b2RzIHRoYXQgbW9zdGx5IGNvcnJlc3BvbmQgdG8gdGhlCisgICAgSmF2YVNjcmlwdCAxLjggQVBJ
LgorICAKKyAgICBAY2xhc3MgRW51bWVyYWJsZQorICAgIEBuYW1lc3BhY2UgRW1iZXIKKyAgICBA
c2luY2UgRW1iZXIgMC45CisgICAgQHByaXZhdGUKKyAgKi8KKyAgdmFyIEVudW1lcmFibGUgPSBf
ZW1iZXJNZXRhbE1peGluLk1peGluLmNyZWF0ZSh7CisKKyAgICAvKioKKyAgICAgIF9fUmVxdWly
ZWQuX18gWW91IG11c3QgaW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvIGFwcGx5IHRoaXMgbWl4aW4u
CisgICAgICAgSW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvIG1ha2UgeW91ciBjbGFzcyBlbnVtZXJh
YmxlLgorICAgICAgIFRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIHJlcGVhdGVkbHkgZHVyaW5n
IGVudW1lcmF0aW9uLiBUaGUgaW5kZXggdmFsdWUKKyAgICAgIHdpbGwgYWx3YXlzIGJlZ2luIHdp
dGggMCBhbmQgaW5jcmVtZW50IG1vbm90b25pY2FsbHkuIFlvdSBkb24ndCBoYXZlIHRvCisgICAg
ICByZWx5IG9uIHRoZSBpbmRleCB2YWx1ZSB0byBkZXRlcm1pbmUgd2hhdCBvYmplY3QgdG8gcmV0
dXJuLCBidXQgeW91IHNob3VsZAorICAgICAgYWx3YXlzIGNoZWNrIHRoZSB2YWx1ZSBhbmQgc3Rh
cnQgZnJvbSB0aGUgYmVnaW5uaW5nIHdoZW4geW91IHNlZSB0aGUKKyAgICAgIHJlcXVlc3RlZCBp
bmRleCBpcyAwLgorICAgICAgIFRoZSBgcHJldmlvdXNPYmplY3RgIGlzIHRoZSBvYmplY3QgdGhh
dCB3YXMgcmV0dXJuZWQgZnJvbSB0aGUgbGFzdCBjYWxsCisgICAgICB0byBgbmV4dE9iamVjdGAg
Zm9yIHRoZSBjdXJyZW50IGl0ZXJhdGlvbi4gVGhpcyBpcyBhIHVzZWZ1bCB3YXkgdG8KKyAgICAg
IG1hbmFnZSBpdGVyYXRpb24gaWYgeW91IGFyZSB0cmFjaW5nIGEgbGlua2VkIGxpc3QsIGZvciBl
eGFtcGxlLgorICAgICAgIEZpbmFsbHkgdGhlIGNvbnRleHQgcGFyYW1ldGVyIHdpbGwgYWx3YXlz
IGNvbnRhaW4gYSBoYXNoIHlvdSBjYW4gdXNlIGFzCisgICAgICBhICJzY3JhdGNocGFkIiB0byBt
YWludGFpbiBhbnkgb3RoZXIgc3RhdGUgeW91IG5lZWQgaW4gb3JkZXIgdG8gaXRlcmF0ZQorICAg
ICAgcHJvcGVybHkuIFRoZSBjb250ZXh0IG9iamVjdCBpcyByZXVzZWQgYW5kIGlzIG5vdCByZXNl
dCBiZXR3ZWVuCisgICAgICBpdGVyYXRpb25zIHNvIG1ha2Ugc3VyZSB5b3Ugc2V0dXAgdGhlIGNv
bnRleHQgd2l0aCBhIGZyZXNoIHN0YXRlIHdoZW5ldmVyCisgICAgICB0aGUgaW5kZXggcGFyYW1l
dGVyIGlzIDAuCisgICAgICAgR2VuZXJhbGx5IGl0ZXJhdG9ycyB3aWxsIGNvbnRpbnVlIHRvIGNh
bGwgYG5leHRPYmplY3RgIHVudGlsIHRoZSBpbmRleAorICAgICAgcmVhY2hlcyB0aGUgY3VycmVu
dCBsZW5ndGgtMS4gSWYgeW91IHJ1biBvdXQgb2YgZGF0YSBiZWZvcmUgdGhpcworICAgICAgdGlt
ZSBmb3Igc29tZSByZWFzb24sIHlvdSBzaG91bGQgc2ltcGx5IHJldHVybiB1bmRlZmluZWQuCisg
ICAgICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2Qgc2ltcGx5IGxv
b2tzIHVwIHRoZSBpbmRleC4KKyAgICAgIFRoaXMgd29ya3MgZ3JlYXQgb24gYW55IEFycmF5LWxp
a2Ugb2JqZWN0cy4KKyAgICAgICBAbWV0aG9kIG5leHRPYmplY3QKKyAgICAgIEBwYXJhbSB7TnVt
YmVyfSBpbmRleCB0aGUgY3VycmVudCBpbmRleCBvZiB0aGUgaXRlcmF0aW9uCisgICAgICBAcGFy
YW0ge09iamVjdH0gcHJldmlvdXNPYmplY3QgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoZSBsYXN0
IGNhbGwgdG8KKyAgICAgICAgYG5leHRPYmplY3RgLgorICAgICAgQHBhcmFtIHtPYmplY3R9IGNv
bnRleHQgYSBjb250ZXh0IG9iamVjdCB5b3UgY2FuIHVzZSB0byBtYWludGFpbiBzdGF0ZS4KKyAg
ICAgIEByZXR1cm4ge09iamVjdH0gdGhlIG5leHQgb2JqZWN0IGluIHRoZSBpdGVyYXRpb24gb3Ig
dW5kZWZpbmVkCisgICAgICBAcHJpdmF0ZQorICAgICovCisgICAgbmV4dE9iamVjdDogbnVsbCwK
KworICAgIC8qKgorICAgICAgSGVscGVyIG1ldGhvZCByZXR1cm5zIHRoZSBmaXJzdCBvYmplY3Qg
ZnJvbSBhIGNvbGxlY3Rpb24uIFRoaXMgaXMgdXN1YWxseQorICAgICAgdXNlZCBieSBiaW5kaW5n
cyBhbmQgb3RoZXIgcGFydHMgb2YgdGhlIGZyYW1ld29yayB0byBleHRyYWN0IGEgc2luZ2xlCisg
ICAgICBvYmplY3QgaWYgdGhlIGVudW1lcmFibGUgY29udGFpbnMgb25seSBvbmUgaXRlbS4KKyAg
ICAgICBJZiB5b3Ugb3ZlcnJpZGUgdGhpcyBtZXRob2QsIHlvdSBzaG91bGQgaW1wbGVtZW50IGl0
IHNvIHRoYXQgaXQgd2lsbAorICAgICAgYWx3YXlzIHJldHVybiB0aGUgc2FtZSB2YWx1ZSBlYWNo
IHRpbWUgaXQgaXMgY2FsbGVkLiBJZiB5b3VyIGVudW1lcmFibGUKKyAgICAgIGNvbnRhaW5zIG9u
bHkgb25lIG9iamVjdCwgdGhpcyBtZXRob2Qgc2hvdWxkIGFsd2F5cyByZXR1cm4gdGhhdCBvYmpl
Y3QuCisgICAgICBJZiB5b3VyIGVudW1lcmFibGUgaXMgZW1wdHksIHRoaXMgbWV0aG9kIHNob3Vs
ZCByZXR1cm4gYHVuZGVmaW5lZGAuCisgICAgICAgYGBgamF2YXNjcmlwdAorICAgICAgdmFyIGFy
ciA9IFsnYScsICdiJywgJ2MnXTsKKyAgICAgIGFyci5nZXQoJ2ZpcnN0T2JqZWN0Jyk7ICAvLyAn
YScKKyAgICAgICB2YXIgYXJyID0gW107CisgICAgICBhcnIuZ2V0KCdmaXJzdE9iamVjdCcpOyAg
Ly8gdW5kZWZpbmVkCisgICAgICBgYGAKKyAgICAgICBAcHJvcGVydHkgZmlyc3RPYmplY3QKKyAg
ICAgIEByZXR1cm4ge09iamVjdH0gdGhlIG9iamVjdCBvciB1bmRlZmluZWQKKyAgICAgIEByZWFk
T25seQorICAgICAgQHB1YmxpYworICAgICovCisgICAgZmlyc3RPYmplY3Q6IF9lbWJlck1ldGFs
Q29tcHV0ZWQuY29tcHV0ZWQoJ1tdJywgZnVuY3Rpb24gKCkgeworICAgICAgaWYgKF9lbWJlck1l
dGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnbGVuZ3RoJykgPT09IDApIHsKKyAgICAgICAgcmV0
dXJuIHVuZGVmaW5lZDsKKyAgICAgIH0KKworICAgICAgLy8gaGFuZGxlIGdlbmVyaWMgZW51bWVy
YWJsZXMKKyAgICAgIHZhciBjb250ZXh0ID0gcG9wQ3R4KCk7CisgICAgICB2YXIgcmV0ID0gdGhp
cy5uZXh0T2JqZWN0KDAsIG51bGwsIGNvbnRleHQpOworCisgICAgICBwdXNoQ3R4KGNvbnRleHQp
OworCisgICAgICByZXR1cm4gcmV0OworICAgIH0pLnJlYWRPbmx5KCksCisKKyAgICAvKioKKyAg
ICAgIEhlbHBlciBtZXRob2QgcmV0dXJucyB0aGUgbGFzdCBvYmplY3QgZnJvbSBhIGNvbGxlY3Rp
b24uIElmIHlvdXIgZW51bWVyYWJsZQorICAgICAgY29udGFpbnMgb25seSBvbmUgb2JqZWN0LCB0
aGlzIG1ldGhvZCBzaG91bGQgYWx3YXlzIHJldHVybiB0aGF0IG9iamVjdC4KKyAgICAgIElmIHlv
dXIgZW51bWVyYWJsZSBpcyBlbXB0eSwgdGhpcyBtZXRob2Qgc2hvdWxkIHJldHVybiBgdW5kZWZp
bmVkYC4KKyAgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICB2YXIgYXJyID0gWydhJywgJ2InLCAn
YyddOworICAgICAgYXJyLmdldCgnbGFzdE9iamVjdCcpOyAgLy8gJ2MnCisgICAgICAgdmFyIGFy
ciA9IFtdOworICAgICAgYXJyLmdldCgnbGFzdE9iamVjdCcpOyAgLy8gdW5kZWZpbmVkCisgICAg
ICBgYGAKKyAgICAgICBAcHJvcGVydHkgbGFzdE9iamVjdAorICAgICAgQHJldHVybiB7T2JqZWN0
fSB0aGUgbGFzdCBvYmplY3Qgb3IgdW5kZWZpbmVkCisgICAgICBAcmVhZE9ubHkKKyAgICAgIEBw
dWJsaWMKKyAgICAqLworICAgIGxhc3RPYmplY3Q6IF9lbWJlck1ldGFsQ29tcHV0ZWQuY29tcHV0
ZWQoJ1tdJywgZnVuY3Rpb24gKCkgeworICAgICAgdmFyIGxlbiA9IF9lbWJlck1ldGFsUHJvcGVy
dHlfZ2V0LmdldCh0aGlzLCAnbGVuZ3RoJyk7CisKKyAgICAgIGlmIChsZW4gPT09IDApIHsKKyAg
ICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKKyAgICAgIH0KKworICAgICAgdmFyIGNvbnRleHQgPSBw
b3BDdHgoKTsKKyAgICAgIHZhciBpZHggPSAwOworICAgICAgdmFyIGxhc3QgPSBudWxsOworICAg
ICAgdmFyIGN1cjsKKworICAgICAgZG8geworICAgICAgICBsYXN0ID0gY3VyOworICAgICAgICBj
dXIgPSB0aGlzLm5leHRPYmplY3QoaWR4KyssIGxhc3QsIGNvbnRleHQpOworICAgICAgfSB3aGls
ZSAoY3VyICE9PSB1bmRlZmluZWQpOworCisgICAgICBwdXNoQ3R4KGNvbnRleHQpOworCisgICAg
ICByZXR1cm4gbGFzdDsKKyAgICB9KS5yZWFkT25seSgpLAorCisgICAgLyoqCisgICAgICBSZXR1
cm5zIGB0cnVlYCBpZiB0aGUgcGFzc2VkIG9iamVjdCBjYW4gYmUgZm91bmQgaW4gdGhlIHJlY2Vp
dmVyLiBUaGUKKyAgICAgIGRlZmF1bHQgdmVyc2lvbiB3aWxsIGl0ZXJhdGUgdGhyb3VnaCB0aGUg
ZW51bWVyYWJsZSB1bnRpbCB0aGUgb2JqZWN0CisgICAgICBpcyBmb3VuZC4gWW91IG1heSB3YW50
IHRvIG92ZXJyaWRlIHRoaXMgd2l0aCBhIG1vcmUgZWZmaWNpZW50IHZlcnNpb24uCisgICAgICAg
YGBgamF2YXNjcmlwdAorICAgICAgdmFyIGFyciA9IFsnYScsICdiJywgJ2MnXTsKKyAgICAgICBh
cnIuY29udGFpbnMoJ2EnKTsgLy8gdHJ1ZQorICAgICAgYXJyLmNvbnRhaW5zKCd6Jyk7IC8vIGZh
bHNlCisgICAgICBgYGAKKyAgICAgICBAbWV0aG9kIGNvbnRhaW5zCisgICAgICBAcGFyYW0ge09i
amVjdH0gb2JqIFRoZSBvYmplY3QgdG8gc2VhcmNoIGZvci4KKyAgICAgIEByZXR1cm4ge0Jvb2xl
YW59IGB0cnVlYCBpZiBvYmplY3QgaXMgZm91bmQgaW4gZW51bWVyYWJsZS4KKyAgICAgIEBwdWJs
aWMKKyAgICAqLworICAgIGNvbnRhaW5zOiBmdW5jdGlvbiAob2JqKSB7CisgICAgICB2YXIgZm91
bmQgPSB0aGlzLmZpbmQoZnVuY3Rpb24gKGl0ZW0pIHsKKyAgICAgICAgcmV0dXJuIGl0ZW0gPT09
IG9iajsKKyAgICAgIH0pOworCisgICAgICByZXR1cm4gZm91bmQgIT09IHVuZGVmaW5lZDsKKyAg
ICB9LAorCisgICAgLyoqCisgICAgICBJdGVyYXRlcyB0aHJvdWdoIHRoZSBlbnVtZXJhYmxlLCBj
YWxsaW5nIHRoZSBwYXNzZWQgZnVuY3Rpb24gb24gZWFjaAorICAgICAgaXRlbS4gVGhpcyBtZXRo
b2QgY29ycmVzcG9uZHMgdG8gdGhlIGBmb3JFYWNoKClgIG1ldGhvZCBkZWZpbmVkIGluCisgICAg
ICBKYXZhU2NyaXB0IDEuNi4KKyAgICAgICBUaGUgY2FsbGJhY2sgbWV0aG9kIHlvdSBwcm92aWRl
IHNob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmcgc2lnbmF0dXJlIChhbGwKKyAgICAgIHBhcmFtZXRl
cnMgYXJlIG9wdGlvbmFsKToKKyAgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICBmdW5jdGlvbihp
dGVtLCBpbmRleCwgZW51bWVyYWJsZSk7CisgICAgICBgYGAKKyAgICAgICAtIGBpdGVtYCBpcyB0
aGUgY3VycmVudCBpdGVtIGluIHRoZSBpdGVyYXRpb24uCisgICAgICAtIGBpbmRleGAgaXMgdGhl
IGN1cnJlbnQgaW5kZXggaW4gdGhlIGl0ZXJhdGlvbi4KKyAgICAgIC0gYGVudW1lcmFibGVgIGlz
IHRoZSBlbnVtZXJhYmxlIG9iamVjdCBpdHNlbGYuCisgICAgICAgTm90ZSB0aGF0IGluIGFkZGl0
aW9uIHRvIGEgY2FsbGJhY2ssIHlvdSBjYW4gYWxzbyBwYXNzIGFuIG9wdGlvbmFsIHRhcmdldAor
ICAgICAgb2JqZWN0IHRoYXQgd2lsbCBiZSBzZXQgYXMgYHRoaXNgIG9uIHRoZSBjb250ZXh0LiBU
aGlzIGlzIGEgZ29vZCB3YXkKKyAgICAgIHRvIGdpdmUgeW91ciBpdGVyYXRvciBmdW5jdGlvbiBh
Y2Nlc3MgdG8gdGhlIGN1cnJlbnQgb2JqZWN0LgorICAgICAgIEBtZXRob2QgZm9yRWFjaAorICAg
ICAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGV4ZWN1dGUKKyAg
ICAgIEBwYXJhbSB7T2JqZWN0fSBbdGFyZ2V0XSBUaGUgdGFyZ2V0IG9iamVjdCB0byB1c2UKKyAg
ICAgIEByZXR1cm4ge09iamVjdH0gcmVjZWl2ZXIKKyAgICAgIEBwdWJsaWMKKyAgICAqLworICAg
IGZvckVhY2g6IGZ1bmN0aW9uIChjYWxsYmFjaywgdGFyZ2V0KSB7CisgICAgICBpZiAodHlwZW9m
IGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7CisgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3Io
KTsKKyAgICAgIH0KKworICAgICAgdmFyIGNvbnRleHQgPSBwb3BDdHgoKTsKKyAgICAgIHZhciBs
ZW4gPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ2xlbmd0aCcpOworICAgICAg
dmFyIGxhc3QgPSBudWxsOworCisgICAgICBpZiAodGFyZ2V0ID09PSB1bmRlZmluZWQpIHsKKyAg
ICAgICAgdGFyZ2V0ID0gbnVsbDsKKyAgICAgIH0KKworICAgICAgZm9yICh2YXIgaWR4ID0gMDsg
aWR4IDwgbGVuOyBpZHgrKykgeworICAgICAgICB2YXIgbmV4dCA9IHRoaXMubmV4dE9iamVjdChp
ZHgsIGxhc3QsIGNvbnRleHQpOworICAgICAgICBjYWxsYmFjay5jYWxsKHRhcmdldCwgbmV4dCwg
aWR4LCB0aGlzKTsKKyAgICAgICAgbGFzdCA9IG5leHQ7CisgICAgICB9CisKKyAgICAgIGxhc3Qg
PSBudWxsOworICAgICAgY29udGV4dCA9IHB1c2hDdHgoY29udGV4dCk7CisKKyAgICAgIHJldHVy
biB0aGlzOworICAgIH0sCisKKyAgICAvKioKKyAgICAgIEFsaWFzIGZvciBgbWFwQnlgCisgICAg
ICAgQG1ldGhvZCBnZXRFYWNoCisgICAgICBAcGFyYW0ge1N0cmluZ30ga2V5IG5hbWUgb2YgdGhl
IHByb3BlcnR5CisgICAgICBAcmV0dXJuIHtBcnJheX0gVGhlIG1hcHBlZCBhcnJheS4KKyAgICAg
IEBwdWJsaWMKKyAgICAqLworICAgIGdldEVhY2g6IF9lbWJlck1ldGFsTWl4aW4uYWxpYXNNZXRo
b2QoJ21hcEJ5JyksCisKKyAgICAvKioKKyAgICAgIFNldHMgdGhlIHZhbHVlIG9uIHRoZSBuYW1l
ZCBwcm9wZXJ0eSBmb3IgZWFjaCBtZW1iZXIuIFRoaXMgaXMgbW9yZQorICAgICAgZWZmaWNpZW50
IHRoYW4gdXNpbmcgb3RoZXIgbWV0aG9kcyBkZWZpbmVkIG9uIHRoaXMgaGVscGVyLiBJZiB0aGUg
b2JqZWN0CisgICAgICBpbXBsZW1lbnRzIEVtYmVyLk9ic2VydmFibGUsIHRoZSB2YWx1ZSB3aWxs
IGJlIGNoYW5nZWQgdG8gYHNldCgpLGAgb3RoZXJ3aXNlCisgICAgICBpdCB3aWxsIGJlIHNldCBk
aXJlY3RseS4gYG51bGxgIG9iamVjdHMgYXJlIHNraXBwZWQuCisgICAgICAgQG1ldGhvZCBzZXRF
YWNoCisgICAgICBAcGFyYW0ge1N0cmluZ30ga2V5IFRoZSBrZXkgdG8gc2V0CisgICAgICBAcGFy
YW0ge09iamVjdH0gdmFsdWUgVGhlIG9iamVjdCB0byBzZXQKKyAgICAgIEByZXR1cm4ge09iamVj
dH0gcmVjZWl2ZXIKKyAgICAgIEBwdWJsaWMKKyAgICAqLworICAgIHNldEVhY2g6IGZ1bmN0aW9u
IChrZXksIHZhbHVlKSB7CisgICAgICByZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVt
KSB7CisgICAgICAgIF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LnNldChpdGVtLCBrZXksIHZhbHVl
KTsKKyAgICAgIH0pOworICAgIH0sCisKKyAgICAvKioKKyAgICAgIE1hcHMgYWxsIG9mIHRoZSBp
dGVtcyBpbiB0aGUgZW51bWVyYXRpb24gdG8gYW5vdGhlciB2YWx1ZSwgcmV0dXJuaW5nCisgICAg
ICBhIG5ldyBhcnJheS4gVGhpcyBtZXRob2QgY29ycmVzcG9uZHMgdG8gYG1hcCgpYCBkZWZpbmVk
IGluIEphdmFTY3JpcHQgMS42LgorICAgICAgIFRoZSBjYWxsYmFjayBtZXRob2QgeW91IHByb3Zp
ZGUgc2hvdWxkIGhhdmUgdGhlIGZvbGxvd2luZyBzaWduYXR1cmUgKGFsbAorICAgICAgcGFyYW1l
dGVycyBhcmUgb3B0aW9uYWwpOgorICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgIGZ1bmN0aW9u
KGl0ZW0sIGluZGV4LCBlbnVtZXJhYmxlKTsKKyAgICAgIGBgYAorICAgICAgIC0gYGl0ZW1gIGlz
IHRoZSBjdXJyZW50IGl0ZW0gaW4gdGhlIGl0ZXJhdGlvbi4KKyAgICAgIC0gYGluZGV4YCBpcyB0
aGUgY3VycmVudCBpbmRleCBpbiB0aGUgaXRlcmF0aW9uLgorICAgICAgLSBgZW51bWVyYWJsZWAg
aXMgdGhlIGVudW1lcmFibGUgb2JqZWN0IGl0c2VsZi4KKyAgICAgICBJdCBzaG91bGQgcmV0dXJu
IHRoZSBtYXBwZWQgdmFsdWUuCisgICAgICAgTm90ZSB0aGF0IGluIGFkZGl0aW9uIHRvIGEgY2Fs
bGJhY2ssIHlvdSBjYW4gYWxzbyBwYXNzIGFuIG9wdGlvbmFsIHRhcmdldAorICAgICAgb2JqZWN0
IHRoYXQgd2lsbCBiZSBzZXQgYXMgYHRoaXNgIG9uIHRoZSBjb250ZXh0LiBUaGlzIGlzIGEgZ29v
ZCB3YXkKKyAgICAgIHRvIGdpdmUgeW91ciBpdGVyYXRvciBmdW5jdGlvbiBhY2Nlc3MgdG8gdGhl
IGN1cnJlbnQgb2JqZWN0LgorICAgICAgIEBtZXRob2QgbWFwCisgICAgICBAcGFyYW0ge0Z1bmN0
aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gZXhlY3V0ZQorICAgICAgQHBhcmFtIHtPYmpl
Y3R9IFt0YXJnZXRdIFRoZSB0YXJnZXQgb2JqZWN0IHRvIHVzZQorICAgICAgQHJldHVybiB7QXJy
YXl9IFRoZSBtYXBwZWQgYXJyYXkuCisgICAgICBAcHVibGljCisgICAgKi8KKyAgICBtYXA6IGZ1
bmN0aW9uIChjYWxsYmFjaywgdGFyZ2V0KSB7CisgICAgICB2YXIgcmV0ID0gZW1iZXJBKCk7CisK
KyAgICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAoeCwgaWR4LCBpKSB7CisgICAgICAgIHJldFtp
ZHhdID0gY2FsbGJhY2suY2FsbCh0YXJnZXQsIHgsIGlkeCwgaSk7CisgICAgICB9KTsKKworICAg
ICAgcmV0dXJuIHJldDsKKyAgICB9LAorCisgICAgLyoqCisgICAgICBTaW1pbGFyIHRvIG1hcCwg
dGhpcyBzcGVjaWFsaXplZCBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgbmFtZWQK
KyAgICAgIHByb3BlcnR5IG9uIGFsbCBpdGVtcyBpbiB0aGUgZW51bWVyYXRpb24uCisgICAgICAg
QG1ldGhvZCBtYXBCeQorICAgICAgQHBhcmFtIHtTdHJpbmd9IGtleSBuYW1lIG9mIHRoZSBwcm9w
ZXJ0eQorICAgICAgQHJldHVybiB7QXJyYXl9IFRoZSBtYXBwZWQgYXJyYXkuCisgICAgICBAcHVi
bGljCisgICAgKi8KKyAgICBtYXBCeTogZnVuY3Rpb24gKGtleSkgeworICAgICAgcmV0dXJuIHRo
aXMubWFwKGZ1bmN0aW9uIChuZXh0KSB7CisgICAgICAgIHJldHVybiBfZW1iZXJNZXRhbFByb3Bl
cnR5X2dldC5nZXQobmV4dCwga2V5KTsKKyAgICAgIH0pOworICAgIH0sCisKKyAgICAvKioKKyAg
ICAgIFJldHVybnMgYW4gYXJyYXkgd2l0aCBhbGwgb2YgdGhlIGl0ZW1zIGluIHRoZSBlbnVtZXJh
dGlvbiB0aGF0IHRoZSBwYXNzZWQKKyAgICAgIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBmb3IuIFRo
aXMgbWV0aG9kIGNvcnJlc3BvbmRzIHRvIGBmaWx0ZXIoKWAgZGVmaW5lZCBpbgorICAgICAgSmF2
YVNjcmlwdCAxLjYuCisgICAgICAgVGhlIGNhbGxiYWNrIG1ldGhvZCB5b3UgcHJvdmlkZSBzaG91
bGQgaGF2ZSB0aGUgZm9sbG93aW5nIHNpZ25hdHVyZSAoYWxsCisgICAgICBwYXJhbWV0ZXJzIGFy
ZSBvcHRpb25hbCk6CisgICAgICAgYGBgamF2YXNjcmlwdAorICAgICAgZnVuY3Rpb24oaXRlbSwg
aW5kZXgsIGVudW1lcmFibGUpOworICAgICAgYGBgCisgICAgICAgLSBgaXRlbWAgaXMgdGhlIGN1
cnJlbnQgaXRlbSBpbiB0aGUgaXRlcmF0aW9uLgorICAgICAgLSBgaW5kZXhgIGlzIHRoZSBjdXJy
ZW50IGluZGV4IGluIHRoZSBpdGVyYXRpb24uCisgICAgICAtIGBlbnVtZXJhYmxlYCBpcyB0aGUg
ZW51bWVyYWJsZSBvYmplY3QgaXRzZWxmLgorICAgICAgIEl0IHNob3VsZCByZXR1cm4gYHRydWVg
IHRvIGluY2x1ZGUgdGhlIGl0ZW0gaW4gdGhlIHJlc3VsdHMsIGBmYWxzZWAKKyAgICAgIG90aGVy
d2lzZS4KKyAgICAgICBOb3RlIHRoYXQgaW4gYWRkaXRpb24gdG8gYSBjYWxsYmFjaywgeW91IGNh
biBhbHNvIHBhc3MgYW4gb3B0aW9uYWwgdGFyZ2V0CisgICAgICBvYmplY3QgdGhhdCB3aWxsIGJl
IHNldCBhcyBgdGhpc2Agb24gdGhlIGNvbnRleHQuIFRoaXMgaXMgYSBnb29kIHdheQorICAgICAg
dG8gZ2l2ZSB5b3VyIGl0ZXJhdG9yIGZ1bmN0aW9uIGFjY2VzcyB0byB0aGUgY3VycmVudCBvYmpl
Y3QuCisgICAgICAgQG1ldGhvZCBmaWx0ZXIKKyAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxi
YWNrIFRoZSBjYWxsYmFjayB0byBleGVjdXRlCisgICAgICBAcGFyYW0ge09iamVjdH0gW3Rhcmdl
dF0gVGhlIHRhcmdldCBvYmplY3QgdG8gdXNlCisgICAgICBAcmV0dXJuIHtBcnJheX0gQSBmaWx0
ZXJlZCBhcnJheS4KKyAgICAgIEBwdWJsaWMKKyAgICAqLworICAgIGZpbHRlcjogZnVuY3Rpb24g
KGNhbGxiYWNrLCB0YXJnZXQpIHsKKyAgICAgIHZhciByZXQgPSBlbWJlckEoKTsKKworICAgICAg
dGhpcy5mb3JFYWNoKGZ1bmN0aW9uICh4LCBpZHgsIGkpIHsKKyAgICAgICAgaWYgKGNhbGxiYWNr
LmNhbGwodGFyZ2V0LCB4LCBpZHgsIGkpKSB7CisgICAgICAgICAgcmV0LnB1c2goeCk7CisgICAg
ICAgIH0KKyAgICAgIH0pOworCisgICAgICByZXR1cm4gcmV0OworICAgIH0sCisKKyAgICAvKioK
KyAgICAgIFJldHVybnMgYW4gYXJyYXkgd2l0aCBhbGwgb2YgdGhlIGl0ZW1zIGluIHRoZSBlbnVt
ZXJhdGlvbiB3aGVyZSB0aGUgcGFzc2VkCisgICAgICBmdW5jdGlvbiByZXR1cm5zIGZhbHNlLiBU
aGlzIG1ldGhvZCBpcyB0aGUgaW52ZXJzZSBvZiBmaWx0ZXIoKS4KKyAgICAgICBUaGUgY2FsbGJh
Y2sgbWV0aG9kIHlvdSBwcm92aWRlIHNob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmcgc2lnbmF0dXJl
IChhbGwKKyAgICAgIHBhcmFtZXRlcnMgYXJlIG9wdGlvbmFsKToKKyAgICAgICBgYGBqYXZhc2Ny
aXB0CisgICAgICBmdW5jdGlvbihpdGVtLCBpbmRleCwgZW51bWVyYWJsZSk7CisgICAgICBgYGAK
KyAgICAgICAtICppdGVtKiBpcyB0aGUgY3VycmVudCBpdGVtIGluIHRoZSBpdGVyYXRpb24uCisg
ICAgICAtICppbmRleCogaXMgdGhlIGN1cnJlbnQgaW5kZXggaW4gdGhlIGl0ZXJhdGlvbgorICAg
ICAgLSAqZW51bWVyYWJsZSogaXMgdGhlIGVudW1lcmFibGUgb2JqZWN0IGl0c2VsZi4KKyAgICAg
ICBJdCBzaG91bGQgcmV0dXJuIGEgZmFsc2V5IHZhbHVlIHRvIGluY2x1ZGUgdGhlIGl0ZW0gaW4g
dGhlIHJlc3VsdHMuCisgICAgICAgTm90ZSB0aGF0IGluIGFkZGl0aW9uIHRvIGEgY2FsbGJhY2ss
IHlvdSBjYW4gYWxzbyBwYXNzIGFuIG9wdGlvbmFsIHRhcmdldAorICAgICAgb2JqZWN0IHRoYXQg
d2lsbCBiZSBzZXQgYXMgInRoaXMiIG9uIHRoZSBjb250ZXh0LiBUaGlzIGlzIGEgZ29vZCB3YXkK
KyAgICAgIHRvIGdpdmUgeW91ciBpdGVyYXRvciBmdW5jdGlvbiBhY2Nlc3MgdG8gdGhlIGN1cnJl
bnQgb2JqZWN0LgorICAgICAgIEBtZXRob2QgcmVqZWN0CisgICAgICBAcGFyYW0ge0Z1bmN0aW9u
fSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gZXhlY3V0ZQorICAgICAgQHBhcmFtIHtPYmplY3R9
IFt0YXJnZXRdIFRoZSB0YXJnZXQgb2JqZWN0IHRvIHVzZQorICAgICAgQHJldHVybiB7QXJyYXl9
IEEgcmVqZWN0ZWQgYXJyYXkuCisgICAgICBAcHVibGljCisgICAgKi8KKyAgICByZWplY3Q6IGZ1
bmN0aW9uIChjYWxsYmFjaywgdGFyZ2V0KSB7CisgICAgICByZXR1cm4gdGhpcy5maWx0ZXIoZnVu
Y3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIWNhbGxiYWNrLmFwcGx5KHRhcmdldCwgYXJndW1l
bnRzKTsKKyAgICAgIH0pOworICAgIH0sCisKKyAgICAvKioKKyAgICAgIFJldHVybnMgYW4gYXJy
YXkgd2l0aCBqdXN0IHRoZSBpdGVtcyB3aXRoIHRoZSBtYXRjaGVkIHByb3BlcnR5LiBZb3UKKyAg
ICAgIGNhbiBwYXNzIGFuIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCB3aXRoIHRoZSB0YXJnZXQg
dmFsdWUuIE90aGVyd2lzZQorICAgICAgdGhpcyB3aWxsIG1hdGNoIGFueSBwcm9wZXJ0eSB0aGF0
IGV2YWx1YXRlcyB0byBgdHJ1ZWAuCisgICAgICAgQG1ldGhvZCBmaWx0ZXJCeQorICAgICAgQHBh
cmFtIHtTdHJpbmd9IGtleSB0aGUgcHJvcGVydHkgdG8gdGVzdAorICAgICAgQHBhcmFtIHsqfSBb
dmFsdWVdIG9wdGlvbmFsIHZhbHVlIHRvIHRlc3QgYWdhaW5zdC4KKyAgICAgIEByZXR1cm4ge0Fy
cmF5fSBmaWx0ZXJlZCBhcnJheQorICAgICAgQHB1YmxpYworICAgICovCisgICAgZmlsdGVyQnk6
IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7CisgICAgICByZXR1cm4gdGhpcy5maWx0ZXIoaXRlci5h
cHBseSh0aGlzLCBhcmd1bWVudHMpKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICBSZXR1cm5z
IGFuIGFycmF5IHdpdGggdGhlIGl0ZW1zIHRoYXQgZG8gbm90IGhhdmUgdHJ1dGh5IHZhbHVlcyBm
b3IKKyAgICAgIGtleS4gIFlvdSBjYW4gcGFzcyBhbiBvcHRpb25hbCBzZWNvbmQgYXJndW1lbnQg
d2l0aCB0aGUgdGFyZ2V0IHZhbHVlLiAgT3RoZXJ3aXNlCisgICAgICB0aGlzIHdpbGwgbWF0Y2gg
YW55IHByb3BlcnR5IHRoYXQgZXZhbHVhdGVzIHRvIGZhbHNlLgorICAgICAgIEBtZXRob2QgcmVq
ZWN0QnkKKyAgICAgIEBwYXJhbSB7U3RyaW5nfSBrZXkgdGhlIHByb3BlcnR5IHRvIHRlc3QKKyAg
ICAgIEBwYXJhbSB7U3RyaW5nfSBbdmFsdWVdIG9wdGlvbmFsIHZhbHVlIHRvIHRlc3QgYWdhaW5z
dC4KKyAgICAgIEByZXR1cm4ge0FycmF5fSByZWplY3RlZCBhcnJheQorICAgICAgQHB1YmxpYwor
ICAgICovCisgICAgcmVqZWN0Qnk6IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7CisgICAgICB2YXIg
ZXhhY3RWYWx1ZSA9IGZ1bmN0aW9uIChpdGVtKSB7CisgICAgICAgIHJldHVybiBfZW1iZXJNZXRh
bFByb3BlcnR5X2dldC5nZXQoaXRlbSwga2V5KSA9PT0gdmFsdWU7CisgICAgICB9OworCisgICAg
ICB2YXIgaGFzVmFsdWUgPSBmdW5jdGlvbiAoaXRlbSkgeworICAgICAgICByZXR1cm4gISFfZW1i
ZXJNZXRhbFByb3BlcnR5X2dldC5nZXQoaXRlbSwga2V5KTsKKyAgICAgIH07CisKKyAgICAgIHZh
ciB1c2UgPSBhcmd1bWVudHMubGVuZ3RoID09PSAyID8gZXhhY3RWYWx1ZSA6IGhhc1ZhbHVlOwor
CisgICAgICByZXR1cm4gdGhpcy5yZWplY3QodXNlKTsKKyAgICB9LAorCisgICAgLyoqCisgICAg
ICBSZXR1cm5zIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBhcnJheSBmb3Igd2hpY2ggdGhlIGNhbGxi
YWNrIHJldHVybnMgdHJ1ZS4KKyAgICAgIFRoaXMgbWV0aG9kIHdvcmtzIHNpbWlsYXIgdG8gdGhl
IGBmaWx0ZXIoKWAgbWV0aG9kIGRlZmluZWQgaW4gSmF2YVNjcmlwdCAxLjYKKyAgICAgIGV4Y2Vw
dCB0aGF0IGl0IHdpbGwgc3RvcCB3b3JraW5nIG9uIHRoZSBhcnJheSBvbmNlIGEgbWF0Y2ggaXMg
Zm91bmQuCisgICAgICAgVGhlIGNhbGxiYWNrIG1ldGhvZCB5b3UgcHJvdmlkZSBzaG91bGQgaGF2
ZSB0aGUgZm9sbG93aW5nIHNpZ25hdHVyZSAoYWxsCisgICAgICBwYXJhbWV0ZXJzIGFyZSBvcHRp
b25hbCk6CisgICAgICAgYGBgamF2YXNjcmlwdAorICAgICAgZnVuY3Rpb24oaXRlbSwgaW5kZXgs
IGVudW1lcmFibGUpOworICAgICAgYGBgCisgICAgICAgLSBgaXRlbWAgaXMgdGhlIGN1cnJlbnQg
aXRlbSBpbiB0aGUgaXRlcmF0aW9uLgorICAgICAgLSBgaW5kZXhgIGlzIHRoZSBjdXJyZW50IGlu
ZGV4IGluIHRoZSBpdGVyYXRpb24uCisgICAgICAtIGBlbnVtZXJhYmxlYCBpcyB0aGUgZW51bWVy
YWJsZSBvYmplY3QgaXRzZWxmLgorICAgICAgIEl0IHNob3VsZCByZXR1cm4gdGhlIGB0cnVlYCB0
byBpbmNsdWRlIHRoZSBpdGVtIGluIHRoZSByZXN1bHRzLCBgZmFsc2VgCisgICAgICBvdGhlcndp
c2UuCisgICAgICAgTm90ZSB0aGF0IGluIGFkZGl0aW9uIHRvIGEgY2FsbGJhY2ssIHlvdSBjYW4g
YWxzbyBwYXNzIGFuIG9wdGlvbmFsIHRhcmdldAorICAgICAgb2JqZWN0IHRoYXQgd2lsbCBiZSBz
ZXQgYXMgYHRoaXNgIG9uIHRoZSBjb250ZXh0LiBUaGlzIGlzIGEgZ29vZCB3YXkKKyAgICAgIHRv
IGdpdmUgeW91ciBpdGVyYXRvciBmdW5jdGlvbiBhY2Nlc3MgdG8gdGhlIGN1cnJlbnQgb2JqZWN0
LgorICAgICAgIEBtZXRob2QgZmluZAorICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sg
VGhlIGNhbGxiYWNrIHRvIGV4ZWN1dGUKKyAgICAgIEBwYXJhbSB7T2JqZWN0fSBbdGFyZ2V0XSBU
aGUgdGFyZ2V0IG9iamVjdCB0byB1c2UKKyAgICAgIEByZXR1cm4ge09iamVjdH0gRm91bmQgaXRl
bSBvciBgdW5kZWZpbmVkYC4KKyAgICAgIEBwdWJsaWMKKyAgICAqLworICAgIGZpbmQ6IGZ1bmN0
aW9uIChjYWxsYmFjaywgdGFyZ2V0KSB7CisgICAgICB2YXIgbGVuID0gX2VtYmVyTWV0YWxQcm9w
ZXJ0eV9nZXQuZ2V0KHRoaXMsICdsZW5ndGgnKTsKKworICAgICAgaWYgKHRhcmdldCA9PT0gdW5k
ZWZpbmVkKSB7CisgICAgICAgIHRhcmdldCA9IG51bGw7CisgICAgICB9CisKKyAgICAgIHZhciBj
b250ZXh0ID0gcG9wQ3R4KCk7CisgICAgICB2YXIgZm91bmQgPSBmYWxzZTsKKyAgICAgIHZhciBs
YXN0ID0gbnVsbDsKKyAgICAgIHZhciBuZXh0LCByZXQ7CisKKyAgICAgIGZvciAodmFyIGlkeCA9
IDA7IGlkeCA8IGxlbiAmJiAhZm91bmQ7IGlkeCsrKSB7CisgICAgICAgIG5leHQgPSB0aGlzLm5l
eHRPYmplY3QoaWR4LCBsYXN0LCBjb250ZXh0KTsKKworICAgICAgICBpZiAoZm91bmQgPSBjYWxs
YmFjay5jYWxsKHRhcmdldCwgbmV4dCwgaWR4LCB0aGlzKSkgeworICAgICAgICAgIHJldCA9IG5l
eHQ7CisgICAgICAgIH0KKworICAgICAgICBsYXN0ID0gbmV4dDsKKyAgICAgIH0KKworICAgICAg
bmV4dCA9IGxhc3QgPSBudWxsOworICAgICAgY29udGV4dCA9IHB1c2hDdHgoY29udGV4dCk7CisK
KyAgICAgIHJldHVybiByZXQ7CisgICAgfSwKKworICAgIC8qKgorICAgICAgUmV0dXJucyB0aGUg
Zmlyc3QgaXRlbSB3aXRoIGEgcHJvcGVydHkgbWF0Y2hpbmcgdGhlIHBhc3NlZCB2YWx1ZS4gWW91
CisgICAgICBjYW4gcGFzcyBhbiBvcHRpb25hbCBzZWNvbmQgYXJndW1lbnQgd2l0aCB0aGUgdGFy
Z2V0IHZhbHVlLiBPdGhlcndpc2UKKyAgICAgIHRoaXMgd2lsbCBtYXRjaCBhbnkgcHJvcGVydHkg
dGhhdCBldmFsdWF0ZXMgdG8gYHRydWVgLgorICAgICAgIFRoaXMgbWV0aG9kIHdvcmtzIG11Y2gg
bGlrZSB0aGUgbW9yZSBnZW5lcmljIGBmaW5kKClgIG1ldGhvZC4KKyAgICAgICBAbWV0aG9kIGZp
bmRCeQorICAgICAgQHBhcmFtIHtTdHJpbmd9IGtleSB0aGUgcHJvcGVydHkgdG8gdGVzdAorICAg
ICAgQHBhcmFtIHtTdHJpbmd9IFt2YWx1ZV0gb3B0aW9uYWwgdmFsdWUgdG8gdGVzdCBhZ2FpbnN0
LgorICAgICAgQHJldHVybiB7T2JqZWN0fSBmb3VuZCBpdGVtIG9yIGB1bmRlZmluZWRgCisgICAg
ICBAcHVibGljCisgICAgKi8KKyAgICBmaW5kQnk6IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7Cisg
ICAgICByZXR1cm4gdGhpcy5maW5kKGl0ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7CisgICAg
fSwKKworICAgIC8qKgorICAgICAgUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHBhc3NlZCBmdW5jdGlv
biByZXR1cm5zIHRydWUgZm9yIGV2ZXJ5IGl0ZW0gaW4gdGhlCisgICAgICBlbnVtZXJhdGlvbi4g
VGhpcyBjb3JyZXNwb25kcyB3aXRoIHRoZSBgZXZlcnkoKWAgbWV0aG9kIGluIEphdmFTY3JpcHQg
MS42LgorICAgICAgIFRoZSBjYWxsYmFjayBtZXRob2QgeW91IHByb3ZpZGUgc2hvdWxkIGhhdmUg
dGhlIGZvbGxvd2luZyBzaWduYXR1cmUgKGFsbAorICAgICAgcGFyYW1ldGVycyBhcmUgb3B0aW9u
YWwpOgorICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgIGZ1bmN0aW9uKGl0ZW0sIGluZGV4LCBl
bnVtZXJhYmxlKTsKKyAgICAgIGBgYAorICAgICAgIC0gYGl0ZW1gIGlzIHRoZSBjdXJyZW50IGl0
ZW0gaW4gdGhlIGl0ZXJhdGlvbi4KKyAgICAgIC0gYGluZGV4YCBpcyB0aGUgY3VycmVudCBpbmRl
eCBpbiB0aGUgaXRlcmF0aW9uLgorICAgICAgLSBgZW51bWVyYWJsZWAgaXMgdGhlIGVudW1lcmFi
bGUgb2JqZWN0IGl0c2VsZi4KKyAgICAgICBJdCBzaG91bGQgcmV0dXJuIHRoZSBgdHJ1ZWAgb3Ig
YGZhbHNlYC4KKyAgICAgICBOb3RlIHRoYXQgaW4gYWRkaXRpb24gdG8gYSBjYWxsYmFjaywgeW91
IGNhbiBhbHNvIHBhc3MgYW4gb3B0aW9uYWwgdGFyZ2V0CisgICAgICBvYmplY3QgdGhhdCB3aWxs
IGJlIHNldCBhcyBgdGhpc2Agb24gdGhlIGNvbnRleHQuIFRoaXMgaXMgYSBnb29kIHdheQorICAg
ICAgdG8gZ2l2ZSB5b3VyIGl0ZXJhdG9yIGZ1bmN0aW9uIGFjY2VzcyB0byB0aGUgY3VycmVudCBv
YmplY3QuCisgICAgICAgRXhhbXBsZSBVc2FnZToKKyAgICAgICBgYGBqYXZhc2NyaXB0CisgICAg
ICBpZiAocGVvcGxlLmV2ZXJ5KGlzRW5naW5lZXIpKSB7CisgICAgICAgIFBheWNoZWNrcy5hZGRC
aWdCb251cygpOworICAgICAgfQorICAgICAgYGBgCisgICAgICAgQG1ldGhvZCBldmVyeQorICAg
ICAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGV4ZWN1dGUKKyAg
ICAgIEBwYXJhbSB7T2JqZWN0fSBbdGFyZ2V0XSBUaGUgdGFyZ2V0IG9iamVjdCB0byB1c2UKKyAg
ICAgIEByZXR1cm4ge0Jvb2xlYW59CisgICAgICBAcHVibGljCisgICAgKi8KKyAgICBldmVyeTog
ZnVuY3Rpb24gKGNhbGxiYWNrLCB0YXJnZXQpIHsKKyAgICAgIHJldHVybiAhdGhpcy5maW5kKGZ1
bmN0aW9uICh4LCBpZHgsIGkpIHsKKyAgICAgICAgcmV0dXJuICFjYWxsYmFjay5jYWxsKHRhcmdl
dCwgeCwgaWR4LCBpKTsKKyAgICAgIH0pOworICAgIH0sCisKKyAgICAvKioKKyAgICAgIFJldHVy
bnMgYHRydWVgIGlmIHRoZSBwYXNzZWQgcHJvcGVydHkgcmVzb2x2ZXMgdG8gdGhlIHZhbHVlIG9m
IHRoZSBzZWNvbmQKKyAgICAgIGFyZ3VtZW50IGZvciBhbGwgaXRlbXMgaW4gdGhlIGVudW1lcmFi
bGUuIFRoaXMgbWV0aG9kIGlzIG9mdGVuIHNpbXBsZXIvZmFzdGVyCisgICAgICB0aGFuIHVzaW5n
IGEgY2FsbGJhY2suCisgICAgICAgQG1ldGhvZCBpc0V2ZXJ5CisgICAgICBAcGFyYW0ge1N0cmlu
Z30ga2V5IHRoZSBwcm9wZXJ0eSB0byB0ZXN0CisgICAgICBAcGFyYW0ge1N0cmluZ30gW3ZhbHVl
XSBvcHRpb25hbCB2YWx1ZSB0byB0ZXN0IGFnYWluc3QuIERlZmF1bHRzIHRvIGB0cnVlYAorICAg
ICAgQHJldHVybiB7Qm9vbGVhbn0KKyAgICAgIEBzaW5jZSAxLjMuMAorICAgICAgQHB1YmxpYwor
ICAgICovCisgICAgaXNFdmVyeTogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHsKKyAgICAgIHJldHVy
biB0aGlzLmV2ZXJ5KGl0ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7CisgICAgfSwKKworICAg
IC8qKgorICAgICAgUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHBhc3NlZCBmdW5jdGlvbiByZXR1cm5z
IHRydWUgZm9yIGFueSBpdGVtIGluIHRoZQorICAgICAgZW51bWVyYXRpb24uIFRoaXMgY29ycmVz
cG9uZHMgd2l0aCB0aGUgYHNvbWUoKWAgbWV0aG9kIGluIEphdmFTY3JpcHQgMS42LgorICAgICAg
IFRoZSBjYWxsYmFjayBtZXRob2QgeW91IHByb3ZpZGUgc2hvdWxkIGhhdmUgdGhlIGZvbGxvd2lu
ZyBzaWduYXR1cmUgKGFsbAorICAgICAgcGFyYW1ldGVycyBhcmUgb3B0aW9uYWwpOgorICAgICAg
IGBgYGphdmFzY3JpcHQKKyAgICAgIGZ1bmN0aW9uKGl0ZW0sIGluZGV4LCBlbnVtZXJhYmxlKTsK
KyAgICAgIGBgYAorICAgICAgIC0gYGl0ZW1gIGlzIHRoZSBjdXJyZW50IGl0ZW0gaW4gdGhlIGl0
ZXJhdGlvbi4KKyAgICAgIC0gYGluZGV4YCBpcyB0aGUgY3VycmVudCBpbmRleCBpbiB0aGUgaXRl
cmF0aW9uLgorICAgICAgLSBgZW51bWVyYWJsZWAgaXMgdGhlIGVudW1lcmFibGUgb2JqZWN0IGl0
c2VsZi4KKyAgICAgICBJdCBzaG91bGQgcmV0dXJuIHRoZSBgdHJ1ZWAgdG8gaW5jbHVkZSB0aGUg
aXRlbSBpbiB0aGUgcmVzdWx0cywgYGZhbHNlYAorICAgICAgb3RoZXJ3aXNlLgorICAgICAgIE5v
dGUgdGhhdCBpbiBhZGRpdGlvbiB0byBhIGNhbGxiYWNrLCB5b3UgY2FuIGFsc28gcGFzcyBhbiBv
cHRpb25hbCB0YXJnZXQKKyAgICAgIG9iamVjdCB0aGF0IHdpbGwgYmUgc2V0IGFzIGB0aGlzYCBv
biB0aGUgY29udGV4dC4gVGhpcyBpcyBhIGdvb2Qgd2F5CisgICAgICB0byBnaXZlIHlvdXIgaXRl
cmF0b3IgZnVuY3Rpb24gYWNjZXNzIHRvIHRoZSBjdXJyZW50IG9iamVjdC4KKyAgICAgICBVc2Fn
ZSBFeGFtcGxlOgorICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgIGlmIChwZW9wbGUuYW55KGlz
TWFuYWdlcikpIHsKKyAgICAgICAgUGF5Y2hlY2tzLmFkZEJpZ2dlckJvbnVzKCk7CisgICAgICB9
CisgICAgICBgYGAKKyAgICAgICBAbWV0aG9kIGFueQorICAgICAgQHBhcmFtIHtGdW5jdGlvbn0g
Y2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGV4ZWN1dGUKKyAgICAgIEBwYXJhbSB7T2JqZWN0fSBb
dGFyZ2V0XSBUaGUgdGFyZ2V0IG9iamVjdCB0byB1c2UKKyAgICAgIEByZXR1cm4ge0Jvb2xlYW59
IGB0cnVlYCBpZiB0aGUgcGFzc2VkIGZ1bmN0aW9uIHJldHVybnMgYHRydWVgIGZvciBhbnkgaXRl
bQorICAgICAgQHB1YmxpYworICAgICovCisgICAgYW55OiBmdW5jdGlvbiAoY2FsbGJhY2ssIHRh
cmdldCkgeworICAgICAgdmFyIGxlbiA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlz
LCAnbGVuZ3RoJyk7CisgICAgICB2YXIgY29udGV4dCA9IHBvcEN0eCgpOworICAgICAgdmFyIGZv
dW5kID0gZmFsc2U7CisgICAgICB2YXIgbGFzdCA9IG51bGw7CisgICAgICB2YXIgbmV4dCwgaWR4
OworCisgICAgICBpZiAodGFyZ2V0ID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgdGFyZ2V0ID0g
bnVsbDsKKyAgICAgIH0KKworICAgICAgZm9yIChpZHggPSAwOyBpZHggPCBsZW4gJiYgIWZvdW5k
OyBpZHgrKykgeworICAgICAgICBuZXh0ID0gdGhpcy5uZXh0T2JqZWN0KGlkeCwgbGFzdCwgY29u
dGV4dCk7CisgICAgICAgIGZvdW5kID0gY2FsbGJhY2suY2FsbCh0YXJnZXQsIG5leHQsIGlkeCwg
dGhpcyk7CisgICAgICAgIGxhc3QgPSBuZXh0OworICAgICAgfQorCisgICAgICBuZXh0ID0gbGFz
dCA9IG51bGw7CisgICAgICBjb250ZXh0ID0gcHVzaEN0eChjb250ZXh0KTsKKyAgICAgIHJldHVy
biBmb3VuZDsKKyAgICB9LAorCisgICAgLyoqCisgICAgICBSZXR1cm5zIGB0cnVlYCBpZiB0aGUg
cGFzc2VkIHByb3BlcnR5IHJlc29sdmVzIHRvIHRoZSB2YWx1ZSBvZiB0aGUgc2Vjb25kCisgICAg
ICBhcmd1bWVudCBmb3IgYW55IGl0ZW0gaW4gdGhlIGVudW1lcmFibGUuIFRoaXMgbWV0aG9kIGlz
IG9mdGVuIHNpbXBsZXIvZmFzdGVyCisgICAgICB0aGFuIHVzaW5nIGEgY2FsbGJhY2suCisgICAg
ICAgQG1ldGhvZCBpc0FueQorICAgICAgQHBhcmFtIHtTdHJpbmd9IGtleSB0aGUgcHJvcGVydHkg
dG8gdGVzdAorICAgICAgQHBhcmFtIHtTdHJpbmd9IFt2YWx1ZV0gb3B0aW9uYWwgdmFsdWUgdG8g
dGVzdCBhZ2FpbnN0LiBEZWZhdWx0cyB0byBgdHJ1ZWAKKyAgICAgIEByZXR1cm4ge0Jvb2xlYW59
CisgICAgICBAc2luY2UgMS4zLjAKKyAgICAgIEBwdWJsaWMKKyAgICAqLworICAgIGlzQW55OiBm
dW5jdGlvbiAoa2V5LCB2YWx1ZSkgeworICAgICAgcmV0dXJuIHRoaXMuYW55KGl0ZXIuYXBwbHko
dGhpcywgYXJndW1lbnRzKSk7CisgICAgfSwKKworICAgIC8qKgorICAgICAgVGhpcyB3aWxsIGNv
bWJpbmUgdGhlIHZhbHVlcyBvZiB0aGUgZW51bWVyYXRvciBpbnRvIGEgc2luZ2xlIHZhbHVlLiBJ
dAorICAgICAgaXMgYSB1c2VmdWwgd2F5IHRvIGNvbGxlY3QgYSBzdW1tYXJ5IHZhbHVlIGZyb20g
YW4gZW51bWVyYXRpb24uIFRoaXMKKyAgICAgIGNvcnJlc3BvbmRzIHRvIHRoZSBgcmVkdWNlKClg
IG1ldGhvZCBkZWZpbmVkIGluIEphdmFTY3JpcHQgMS44LgorICAgICAgIFRoZSBjYWxsYmFjayBt
ZXRob2QgeW91IHByb3ZpZGUgc2hvdWxkIGhhdmUgdGhlIGZvbGxvd2luZyBzaWduYXR1cmUgKGFs
bAorICAgICAgcGFyYW1ldGVycyBhcmUgb3B0aW9uYWwpOgorICAgICAgIGBgYGphdmFzY3JpcHQK
KyAgICAgIGZ1bmN0aW9uKHByZXZpb3VzVmFsdWUsIGl0ZW0sIGluZGV4LCBlbnVtZXJhYmxlKTsK
KyAgICAgIGBgYAorICAgICAgIC0gYHByZXZpb3VzVmFsdWVgIGlzIHRoZSB2YWx1ZSByZXR1cm5l
ZCBieSB0aGUgbGFzdCBjYWxsIHRvIHRoZSBpdGVyYXRvci4KKyAgICAgIC0gYGl0ZW1gIGlzIHRo
ZSBjdXJyZW50IGl0ZW0gaW4gdGhlIGl0ZXJhdGlvbi4KKyAgICAgIC0gYGluZGV4YCBpcyB0aGUg
Y3VycmVudCBpbmRleCBpbiB0aGUgaXRlcmF0aW9uLgorICAgICAgLSBgZW51bWVyYWJsZWAgaXMg
dGhlIGVudW1lcmFibGUgb2JqZWN0IGl0c2VsZi4KKyAgICAgICBSZXR1cm4gdGhlIG5ldyBjdW11
bGF0aXZlIHZhbHVlLgorICAgICAgIEluIGFkZGl0aW9uIHRvIHRoZSBjYWxsYmFjayB5b3UgY2Fu
IGFsc28gcGFzcyBhbiBgaW5pdGlhbFZhbHVlYC4gQW4gZXJyb3IKKyAgICAgIHdpbGwgYmUgcmFp
c2VkIGlmIHlvdSBkbyBub3QgcGFzcyBhbiBpbml0aWFsIHZhbHVlIGFuZCB0aGUgZW51bWVyYXRv
ciBpcworICAgICAgZW1wdHkuCisgICAgICAgTm90ZSB0aGF0IHVubGlrZSB0aGUgb3RoZXIgbWV0
aG9kcywgdGhpcyBtZXRob2QgZG9lcyBub3QgYWxsb3cgeW91IHRvCisgICAgICBwYXNzIGEgdGFy
Z2V0IG9iamVjdCB0byBzZXQgYXMgdGhpcyBmb3IgdGhlIGNhbGxiYWNrLiBJdCdzIHBhcnQgb2Yg
dGhlCisgICAgICBzcGVjLiBTb3JyeS4KKyAgICAgICBAbWV0aG9kIHJlZHVjZQorICAgICAgQHBh
cmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGV4ZWN1dGUKKyAgICAgIEBw
YXJhbSB7T2JqZWN0fSBpbml0aWFsVmFsdWUgSW5pdGlhbCB2YWx1ZSBmb3IgdGhlIHJlZHVjZQor
ICAgICAgQHBhcmFtIHtTdHJpbmd9IHJlZHVjZXJQcm9wZXJ0eSBpbnRlcm5hbCB1c2Ugb25seS4K
KyAgICAgIEByZXR1cm4ge09iamVjdH0gVGhlIHJlZHVjZWQgdmFsdWUuCisgICAgICBAcHVibGlj
CisgICAgKi8KKyAgICByZWR1Y2U6IGZ1bmN0aW9uIChjYWxsYmFjaywgaW5pdGlhbFZhbHVlLCBy
ZWR1Y2VyUHJvcGVydHkpIHsKKyAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlv
bicpIHsKKyAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOworICAgICAgfQorCisgICAgICB2
YXIgcmV0ID0gaW5pdGlhbFZhbHVlOworCisgICAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24gKGl0
ZW0sIGkpIHsKKyAgICAgICAgcmV0ID0gY2FsbGJhY2socmV0LCBpdGVtLCBpLCB0aGlzLCByZWR1
Y2VyUHJvcGVydHkpOworICAgICAgfSwgdGhpcyk7CisKKyAgICAgIHJldHVybiByZXQ7CisgICAg
fSwKKworICAgIC8qKgorICAgICAgSW52b2tlcyB0aGUgbmFtZWQgbWV0aG9kIG9uIGV2ZXJ5IG9i
amVjdCBpbiB0aGUgcmVjZWl2ZXIgdGhhdAorICAgICAgaW1wbGVtZW50cyBpdC4gVGhpcyBtZXRo
b2QgY29ycmVzcG9uZHMgdG8gdGhlIGltcGxlbWVudGF0aW9uIGluCisgICAgICBQcm90b3R5cGUg
MS42LgorICAgICAgIEBtZXRob2QgaW52b2tlCisgICAgICBAcGFyYW0ge1N0cmluZ30gbWV0aG9k
TmFtZSB0aGUgbmFtZSBvZiB0aGUgbWV0aG9kCisgICAgICBAcGFyYW0ge09iamVjdC4uLn0gYXJn
cyBvcHRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyBhcyB3ZWxsLgorICAgICAgQHJldHVybiB7QXJy
YXl9IHJldHVybiB2YWx1ZXMgZnJvbSBjYWxsaW5nIGludm9rZS4KKyAgICAgIEBwdWJsaWMKKyAg
ICAqLworICAgIGludm9rZTogZnVuY3Rpb24gKG1ldGhvZE5hbWUpIHsKKyAgICAgIGZvciAodmFy
IF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0g
MSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykgeworICAgICAgICBhcmdzW19r
ZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTsKKyAgICAgIH0KKworICAgICAgdmFyIHJldCA9IGVt
YmVyQSgpOworCisgICAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24gKHgsIGlkeCkgeworICAgICAg
ICB2YXIgbWV0aG9kID0geCAmJiB4W21ldGhvZE5hbWVdOworCisgICAgICAgIGlmICgnZnVuY3Rp
b24nID09PSB0eXBlb2YgbWV0aG9kKSB7CisgICAgICAgICAgcmV0W2lkeF0gPSBhcmdzID8gbWV0
aG9kLmFwcGx5KHgsIGFyZ3MpIDogeFttZXRob2ROYW1lXSgpOworICAgICAgICB9CisgICAgICB9
LCB0aGlzKTsKKworICAgICAgcmV0dXJuIHJldDsKKyAgICB9LAorCisgICAgLyoqCisgICAgICBT
aW1wbHkgY29udmVydHMgdGhlIGVudW1lcmFibGUgaW50byBhIGdlbnVpbmUgYXJyYXkuIFRoZSBv
cmRlciBpcyBub3QKKyAgICAgIGd1YXJhbnRlZWQuIENvcnJlc3BvbmRzIHRvIHRoZSBtZXRob2Qg
aW1wbGVtZW50ZWQgYnkgUHJvdG90eXBlLgorICAgICAgIEBtZXRob2QgdG9BcnJheQorICAgICAg
QHJldHVybiB7QXJyYXl9IHRoZSBlbnVtZXJhYmxlIGFzIGFuIGFycmF5LgorICAgICAgQHB1Ymxp
YworICAgICovCisgICAgdG9BcnJheTogZnVuY3Rpb24gKCkgeworICAgICAgdmFyIHJldCA9IGVt
YmVyQSgpOworCisgICAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24gKG8sIGlkeCkgeworICAgICAg
ICByZXRbaWR4XSA9IG87CisgICAgICB9KTsKKworICAgICAgcmV0dXJuIHJldDsKKyAgICB9LAor
CisgICAgLyoqCisgICAgICBSZXR1cm5zIGEgY29weSBvZiB0aGUgYXJyYXkgd2l0aCBhbGwgYG51
bGxgIGFuZCBgdW5kZWZpbmVkYCBlbGVtZW50cyByZW1vdmVkLgorICAgICAgIGBgYGphdmFzY3Jp
cHQKKyAgICAgIHZhciBhcnIgPSBbJ2EnLCBudWxsLCAnYycsIHVuZGVmaW5lZF07CisgICAgICBh
cnIuY29tcGFjdCgpOyAgLy8gWydhJywgJ2MnXQorICAgICAgYGBgCisgICAgICAgQG1ldGhvZCBj
b21wYWN0CisgICAgICBAcmV0dXJuIHtBcnJheX0gdGhlIGFycmF5IHdpdGhvdXQgbnVsbCBhbmQg
dW5kZWZpbmVkIGVsZW1lbnRzLgorICAgICAgQHB1YmxpYworICAgICovCisgICAgY29tcGFjdDog
ZnVuY3Rpb24gKCkgeworICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uICh2YWx1ZSkg
eworICAgICAgICByZXR1cm4gdmFsdWUgIT0gbnVsbDsKKyAgICAgIH0pOworICAgIH0sCisKKyAg
ICAvKioKKyAgICAgIFJldHVybnMgYSBuZXcgZW51bWVyYWJsZSB0aGF0IGV4Y2x1ZGVzIHRoZSBw
YXNzZWQgdmFsdWUuIFRoZSBkZWZhdWx0CisgICAgICBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIGFu
IGFycmF5IHJlZ2FyZGxlc3Mgb2YgdGhlIHJlY2VpdmVyIHR5cGUgdW5sZXNzCisgICAgICB0aGUg
cmVjZWl2ZXIgZG9lcyBub3QgY29udGFpbiB0aGUgdmFsdWUuCisgICAgICAgYGBgamF2YXNjcmlw
dAorICAgICAgdmFyIGFyciA9IFsnYScsICdiJywgJ2EnLCAnYyddOworICAgICAgYXJyLndpdGhv
dXQoJ2EnKTsgIC8vIFsnYicsICdjJ10KKyAgICAgIGBgYAorICAgICAgIEBtZXRob2Qgd2l0aG91
dAorICAgICAgQHBhcmFtIHtPYmplY3R9IHZhbHVlCisgICAgICBAcmV0dXJuIHtFbWJlci5FbnVt
ZXJhYmxlfQorICAgICAgQHB1YmxpYworICAgICovCisgICAgd2l0aG91dDogZnVuY3Rpb24gKHZh
bHVlKSB7CisgICAgICBpZiAoIXRoaXMuY29udGFpbnModmFsdWUpKSB7CisgICAgICAgIHJldHVy
biB0aGlzOyAvLyBub3RoaW5nIHRvIGRvCisgICAgICB9CisKKyAgICAgIHZhciByZXQgPSBlbWJl
ckEoKTsKKworICAgICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7CisgICAgICAgIGlmIChr
ICE9PSB2YWx1ZSkgeworICAgICAgICAgIHJldFtyZXQubGVuZ3RoXSA9IGs7CisgICAgICAgIH0K
KyAgICAgIH0pOworCisgICAgICByZXR1cm4gcmV0OworICAgIH0sCisKKyAgICAvKioKKyAgICAg
IFJldHVybnMgYSBuZXcgZW51bWVyYWJsZSB0aGF0IGNvbnRhaW5zIG9ubHkgdW5pcXVlIHZhbHVl
cy4gVGhlIGRlZmF1bHQKKyAgICAgIGltcGxlbWVudGF0aW9uIHJldHVybnMgYW4gYXJyYXkgcmVn
YXJkbGVzcyBvZiB0aGUgcmVjZWl2ZXIgdHlwZS4KKyAgICAgICBgYGBqYXZhc2NyaXB0CisgICAg
ICB2YXIgYXJyID0gWydhJywgJ2EnLCAnYicsICdiJ107CisgICAgICBhcnIudW5pcSgpOyAgLy8g
WydhJywgJ2InXQorICAgICAgYGBgCisgICAgICAgVGhpcyBvbmx5IHdvcmtzIG9uIHByaW1pdGl2
ZSBkYXRhIHR5cGVzLCBlLmcuIFN0cmluZ3MsIE51bWJlcnMsIGV0Yy4KKyAgICAgICBAbWV0aG9k
IHVuaXEKKyAgICAgIEByZXR1cm4ge0VtYmVyLkVudW1lcmFibGV9CisgICAgICBAcHVibGljCisg
ICAgKi8KKyAgICB1bmlxOiBmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgcmV0ID0gZW1iZXJBKCk7
CisKKyAgICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAoaykgeworICAgICAgICBpZiAocmV0Lmlu
ZGV4T2YoaykgPCAwKSB7CisgICAgICAgICAgcmV0LnB1c2goayk7CisgICAgICAgIH0KKyAgICAg
IH0pOworCisgICAgICByZXR1cm4gcmV0OworICAgIH0sCisKKyAgICAvKioKKyAgICAgIFRoaXMg
cHJvcGVydHkgd2lsbCB0cmlnZ2VyIGFueXRpbWUgdGhlIGVudW1lcmFibGUncyBjb250ZW50IGNo
YW5nZXMuCisgICAgICBZb3UgY2FuIG9ic2VydmUgdGhpcyBwcm9wZXJ0eSB0byBiZSBub3RpZmll
ZCBvZiBjaGFuZ2VzIHRvIHRoZSBlbnVtZXJhYmxlJ3MKKyAgICAgIGNvbnRlbnQuCisgICAgICAg
Rm9yIHBsYWluIGVudW1lcmFibGVzLCB0aGlzIHByb3BlcnR5IGlzIHJlYWQgb25seS4gYEFycmF5
YCBvdmVycmlkZXMKKyAgICAgIHRoaXMgbWV0aG9kLgorICAgICAgIEBwcm9wZXJ0eSBbXQorICAg
ICAgQHR5cGUgQXJyYXkKKyAgICAgIEByZXR1cm4gdGhpcworICAgICAgQHByaXZhdGUKKyAgICAq
LworICAgICdbXSc6IF9lbWJlck1ldGFsQ29tcHV0ZWQuY29tcHV0ZWQoeworICAgICAgZ2V0OiBm
dW5jdGlvbiAoa2V5KSB7CisgICAgICAgIHJldHVybiB0aGlzOworICAgICAgfQorICAgIH0pLAor
CisgICAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLgorICAgIC8vIEVOVU1FUkFCTEUgT0JTRVJWRVJTCisgICAgLy8KKworICAgIC8q
KgorICAgICAgUmVnaXN0ZXJzIGFuIGVudW1lcmFibGUgb2JzZXJ2ZXIuIE11c3QgaW1wbGVtZW50
IGBFbWJlci5FbnVtZXJhYmxlT2JzZXJ2ZXJgCisgICAgICBtaXhpbi4KKyAgICAgICBAbWV0aG9k
IGFkZEVudW1lcmFibGVPYnNlcnZlcgorICAgICAgQHBhcmFtIHtPYmplY3R9IHRhcmdldAorICAg
ICAgQHBhcmFtIHtPYmplY3R9IFtvcHRzXQorICAgICAgQHJldHVybiB0aGlzCisgICAgICBAcHJp
dmF0ZQorICAgICovCisgICAgYWRkRW51bWVyYWJsZU9ic2VydmVyOiBmdW5jdGlvbiAodGFyZ2V0
LCBvcHRzKSB7CisgICAgICB2YXIgd2lsbENoYW5nZSA9IG9wdHMgJiYgb3B0cy53aWxsQ2hhbmdl
IHx8ICdlbnVtZXJhYmxlV2lsbENoYW5nZSc7CisgICAgICB2YXIgZGlkQ2hhbmdlID0gb3B0cyAm
JiBvcHRzLmRpZENoYW5nZSB8fCAnZW51bWVyYWJsZURpZENoYW5nZSc7CisgICAgICB2YXIgaGFz
T2JzZXJ2ZXJzID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdoYXNFbnVtZXJh
YmxlT2JzZXJ2ZXJzJyk7CisKKyAgICAgIGlmICghaGFzT2JzZXJ2ZXJzKSB7CisgICAgICAgIF9l
bWJlck1ldGFsUHJvcGVydHlfZXZlbnRzLnByb3BlcnR5V2lsbENoYW5nZSh0aGlzLCAnaGFzRW51
bWVyYWJsZU9ic2VydmVycycpOworICAgICAgfQorCisgICAgICBfZW1iZXJNZXRhbEV2ZW50cy5h
ZGRMaXN0ZW5lcih0aGlzLCAnQGVudW1lcmFibGU6YmVmb3JlJywgdGFyZ2V0LCB3aWxsQ2hhbmdl
KTsKKyAgICAgIF9lbWJlck1ldGFsRXZlbnRzLmFkZExpc3RlbmVyKHRoaXMsICdAZW51bWVyYWJs
ZTpjaGFuZ2UnLCB0YXJnZXQsIGRpZENoYW5nZSk7CisKKyAgICAgIGlmICghaGFzT2JzZXJ2ZXJz
KSB7CisgICAgICAgIF9lbWJlck1ldGFsUHJvcGVydHlfZXZlbnRzLnByb3BlcnR5RGlkQ2hhbmdl
KHRoaXMsICdoYXNFbnVtZXJhYmxlT2JzZXJ2ZXJzJyk7CisgICAgICB9CisKKyAgICAgIHJldHVy
biB0aGlzOworICAgIH0sCisKKyAgICAvKioKKyAgICAgIFJlbW92ZXMgYSByZWdpc3RlcmVkIGVu
dW1lcmFibGUgb2JzZXJ2ZXIuCisgICAgICAgQG1ldGhvZCByZW1vdmVFbnVtZXJhYmxlT2JzZXJ2
ZXIKKyAgICAgIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXQKKyAgICAgIEBwYXJhbSB7T2JqZWN0fSBb
b3B0c10KKyAgICAgIEByZXR1cm4gdGhpcworICAgICAgQHByaXZhdGUKKyAgICAqLworICAgIHJl
bW92ZUVudW1lcmFibGVPYnNlcnZlcjogZnVuY3Rpb24gKHRhcmdldCwgb3B0cykgeworICAgICAg
dmFyIHdpbGxDaGFuZ2UgPSBvcHRzICYmIG9wdHMud2lsbENoYW5nZSB8fCAnZW51bWVyYWJsZVdp
bGxDaGFuZ2UnOworICAgICAgdmFyIGRpZENoYW5nZSA9IG9wdHMgJiYgb3B0cy5kaWRDaGFuZ2Ug
fHwgJ2VudW1lcmFibGVEaWRDaGFuZ2UnOworICAgICAgdmFyIGhhc09ic2VydmVycyA9IF9lbWJl
ck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnaGFzRW51bWVyYWJsZU9ic2VydmVycycpOwor
CisgICAgICBpZiAoaGFzT2JzZXJ2ZXJzKSB7CisgICAgICAgIF9lbWJlck1ldGFsUHJvcGVydHlf
ZXZlbnRzLnByb3BlcnR5V2lsbENoYW5nZSh0aGlzLCAnaGFzRW51bWVyYWJsZU9ic2VydmVycycp
OworICAgICAgfQorCisgICAgICBfZW1iZXJNZXRhbEV2ZW50cy5yZW1vdmVMaXN0ZW5lcih0aGlz
LCAnQGVudW1lcmFibGU6YmVmb3JlJywgdGFyZ2V0LCB3aWxsQ2hhbmdlKTsKKyAgICAgIF9lbWJl
ck1ldGFsRXZlbnRzLnJlbW92ZUxpc3RlbmVyKHRoaXMsICdAZW51bWVyYWJsZTpjaGFuZ2UnLCB0
YXJnZXQsIGRpZENoYW5nZSk7CisKKyAgICAgIGlmIChoYXNPYnNlcnZlcnMpIHsKKyAgICAgICAg
X2VtYmVyTWV0YWxQcm9wZXJ0eV9ldmVudHMucHJvcGVydHlEaWRDaGFuZ2UodGhpcywgJ2hhc0Vu
dW1lcmFibGVPYnNlcnZlcnMnKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHRoaXM7CisgICAg
fSwKKworICAgIC8qKgorICAgICAgQmVjb21lcyB0cnVlIHdoZW5ldmVyIHRoZSBhcnJheSBjdXJy
ZW50bHkgaGFzIG9ic2VydmVycyB3YXRjaGluZyBjaGFuZ2VzCisgICAgICBvbiB0aGUgYXJyYXku
CisgICAgICAgQHByb3BlcnR5IGhhc0VudW1lcmFibGVPYnNlcnZlcnMKKyAgICAgIEB0eXBlIEJv
b2xlYW4KKyAgICAgIEBwcml2YXRlCisgICAgKi8KKyAgICBoYXNFbnVtZXJhYmxlT2JzZXJ2ZXJz
OiBfZW1iZXJNZXRhbENvbXB1dGVkLmNvbXB1dGVkKGZ1bmN0aW9uICgpIHsKKyAgICAgIHJldHVy
biBfZW1iZXJNZXRhbEV2ZW50cy5oYXNMaXN0ZW5lcnModGhpcywgJ0BlbnVtZXJhYmxlOmNoYW5n
ZScpIHx8IF9lbWJlck1ldGFsRXZlbnRzLmhhc0xpc3RlbmVycyh0aGlzLCAnQGVudW1lcmFibGU6
YmVmb3JlJyk7CisgICAgfSksCisKKyAgICAvKioKKyAgICAgIEludm9rZSB0aGlzIG1ldGhvZCBq
dXN0IGJlZm9yZSB0aGUgY29udGVudHMgb2YgeW91ciBlbnVtZXJhYmxlIHdpbGwKKyAgICAgIGNo
YW5nZS4gWW91IGNhbiBlaXRoZXIgb21pdCB0aGUgcGFyYW1ldGVycyBjb21wbGV0ZWx5IG9yIHBh
c3MgdGhlIG9iamVjdHMKKyAgICAgIHRvIGJlIHJlbW92ZWQgb3IgYWRkZWQgaWYgYXZhaWxhYmxl
IG9yIGp1c3QgYSBjb3VudC4KKyAgICAgICBAbWV0aG9kIGVudW1lcmFibGVDb250ZW50V2lsbENo
YW5nZQorICAgICAgQHBhcmFtIHtFbWJlci5FbnVtZXJhYmxlfE51bWJlcn0gcmVtb3ZpbmcgQW4g
ZW51bWVyYWJsZSBvZiB0aGUgb2JqZWN0cyB0bworICAgICAgICBiZSByZW1vdmVkIG9yIHRoZSBu
dW1iZXIgb2YgaXRlbXMgdG8gYmUgcmVtb3ZlZC4KKyAgICAgIEBwYXJhbSB7RW1iZXIuRW51bWVy
YWJsZXxOdW1iZXJ9IGFkZGluZyBBbiBlbnVtZXJhYmxlIG9mIHRoZSBvYmplY3RzIHRvIGJlCisg
ICAgICAgIGFkZGVkIG9yIHRoZSBudW1iZXIgb2YgaXRlbXMgdG8gYmUgYWRkZWQuCisgICAgICBA
Y2hhaW5hYmxlCisgICAgICBAcHJpdmF0ZQorICAgICovCisgICAgZW51bWVyYWJsZUNvbnRlbnRX
aWxsQ2hhbmdlOiBmdW5jdGlvbiAocmVtb3ZpbmcsIGFkZGluZykgeworICAgICAgdmFyIHJlbW92
ZUNudCwgYWRkQ250LCBoYXNEZWx0YTsKKworICAgICAgaWYgKCdudW1iZXInID09PSB0eXBlb2Yg
cmVtb3ZpbmcpIHsKKyAgICAgICAgcmVtb3ZlQ250ID0gcmVtb3Zpbmc7CisgICAgICB9IGVsc2Ug
aWYgKHJlbW92aW5nKSB7CisgICAgICAgIHJlbW92ZUNudCA9IF9lbWJlck1ldGFsUHJvcGVydHlf
Z2V0LmdldChyZW1vdmluZywgJ2xlbmd0aCcpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmVt
b3ZlQ250ID0gcmVtb3ZpbmcgPSAtMTsKKyAgICAgIH0KKworICAgICAgaWYgKCdudW1iZXInID09
PSB0eXBlb2YgYWRkaW5nKSB7CisgICAgICAgIGFkZENudCA9IGFkZGluZzsKKyAgICAgIH0gZWxz
ZSBpZiAoYWRkaW5nKSB7CisgICAgICAgIGFkZENudCA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0
LmdldChhZGRpbmcsICdsZW5ndGgnKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGFkZENudCA9
IGFkZGluZyA9IC0xOworICAgICAgfQorCisgICAgICBoYXNEZWx0YSA9IGFkZENudCA8IDAgfHwg
cmVtb3ZlQ250IDwgMCB8fCBhZGRDbnQgLSByZW1vdmVDbnQgIT09IDA7CisKKyAgICAgIGlmIChy
ZW1vdmluZyA9PT0gLTEpIHsKKyAgICAgICAgcmVtb3ZpbmcgPSBudWxsOworICAgICAgfQorCisg
ICAgICBpZiAoYWRkaW5nID09PSAtMSkgeworICAgICAgICBhZGRpbmcgPSBudWxsOworICAgICAg
fQorCisgICAgICBfZW1iZXJNZXRhbFByb3BlcnR5X2V2ZW50cy5wcm9wZXJ0eVdpbGxDaGFuZ2Uo
dGhpcywgJ1tdJyk7CisKKyAgICAgIGlmIChoYXNEZWx0YSkgeworICAgICAgICBfZW1iZXJNZXRh
bFByb3BlcnR5X2V2ZW50cy5wcm9wZXJ0eVdpbGxDaGFuZ2UodGhpcywgJ2xlbmd0aCcpOworICAg
ICAgfQorCisgICAgICBfZW1iZXJNZXRhbEV2ZW50cy5zZW5kRXZlbnQodGhpcywgJ0BlbnVtZXJh
YmxlOmJlZm9yZScsIFt0aGlzLCByZW1vdmluZywgYWRkaW5nXSk7CisKKyAgICAgIHJldHVybiB0
aGlzOworICAgIH0sCisKKyAgICAvKioKKyAgICAgIEludm9rZSB0aGlzIG1ldGhvZCB3aGVuIHRo
ZSBjb250ZW50cyBvZiB5b3VyIGVudW1lcmFibGUgaGFzIGNoYW5nZWQuCisgICAgICBUaGlzIHdp
bGwgbm90aWZ5IGFueSBvYnNlcnZlcnMgd2F0Y2hpbmcgZm9yIGNvbnRlbnQgY2hhbmdlcy4gSWYg
eW91IGFyZQorICAgICAgaW1wbGVtZW50aW5nIGFuIG9yZGVyZWQgZW51bWVyYWJsZSAoc3VjaCBh
cyBhbiBhcnJheSksIGFsc28gcGFzcyB0aGUKKyAgICAgIHN0YXJ0IGFuZCBlbmQgdmFsdWVzIHdo
ZXJlIHRoZSBjb250ZW50IGNoYW5nZWQgc28gdGhhdCBpdCBjYW4gYmUgdXNlZCB0bworICAgICAg
bm90aWZ5IHJhbmdlIG9ic2VydmVycy4KKyAgICAgICBAbWV0aG9kIGVudW1lcmFibGVDb250ZW50
RGlkQ2hhbmdlCisgICAgICBAcGFyYW0ge0VtYmVyLkVudW1lcmFibGV8TnVtYmVyfSByZW1vdmlu
ZyBBbiBlbnVtZXJhYmxlIG9mIHRoZSBvYmplY3RzIHRvCisgICAgICAgIGJlIHJlbW92ZWQgb3Ig
dGhlIG51bWJlciBvZiBpdGVtcyB0byBiZSByZW1vdmVkLgorICAgICAgQHBhcmFtIHtFbWJlci5F
bnVtZXJhYmxlfE51bWJlcn0gYWRkaW5nICBBbiBlbnVtZXJhYmxlIG9mIHRoZSBvYmplY3RzIHRv
CisgICAgICAgIGJlIGFkZGVkIG9yIHRoZSBudW1iZXIgb2YgaXRlbXMgdG8gYmUgYWRkZWQuCisg
ICAgICBAY2hhaW5hYmxlCisgICAgICBAcHJpdmF0ZQorICAgICovCisgICAgZW51bWVyYWJsZUNv
bnRlbnREaWRDaGFuZ2U6IGZ1bmN0aW9uIChyZW1vdmluZywgYWRkaW5nKSB7CisgICAgICB2YXIg
cmVtb3ZlQ250LCBhZGRDbnQsIGhhc0RlbHRhOworCisgICAgICBpZiAoJ251bWJlcicgPT09IHR5
cGVvZiByZW1vdmluZykgeworICAgICAgICByZW1vdmVDbnQgPSByZW1vdmluZzsKKyAgICAgIH0g
ZWxzZSBpZiAocmVtb3ZpbmcpIHsKKyAgICAgICAgcmVtb3ZlQ250ID0gX2VtYmVyTWV0YWxQcm9w
ZXJ0eV9nZXQuZ2V0KHJlbW92aW5nLCAnbGVuZ3RoJyk7CisgICAgICB9IGVsc2UgeworICAgICAg
ICByZW1vdmVDbnQgPSByZW1vdmluZyA9IC0xOworICAgICAgfQorCisgICAgICBpZiAoJ251bWJl
cicgPT09IHR5cGVvZiBhZGRpbmcpIHsKKyAgICAgICAgYWRkQ250ID0gYWRkaW5nOworICAgICAg
fSBlbHNlIGlmIChhZGRpbmcpIHsKKyAgICAgICAgYWRkQ250ID0gX2VtYmVyTWV0YWxQcm9wZXJ0
eV9nZXQuZ2V0KGFkZGluZywgJ2xlbmd0aCcpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgYWRk
Q250ID0gYWRkaW5nID0gLTE7CisgICAgICB9CisKKyAgICAgIGhhc0RlbHRhID0gYWRkQ250IDwg
MCB8fCByZW1vdmVDbnQgPCAwIHx8IGFkZENudCAtIHJlbW92ZUNudCAhPT0gMDsKKworICAgICAg
aWYgKHJlbW92aW5nID09PSAtMSkgeworICAgICAgICByZW1vdmluZyA9IG51bGw7CisgICAgICB9
CisKKyAgICAgIGlmIChhZGRpbmcgPT09IC0xKSB7CisgICAgICAgIGFkZGluZyA9IG51bGw7Cisg
ICAgICB9CisKKyAgICAgIF9lbWJlck1ldGFsRXZlbnRzLnNlbmRFdmVudCh0aGlzLCAnQGVudW1l
cmFibGU6Y2hhbmdlJywgW3RoaXMsIHJlbW92aW5nLCBhZGRpbmddKTsKKworICAgICAgaWYgKGhh
c0RlbHRhKSB7CisgICAgICAgIF9lbWJlck1ldGFsUHJvcGVydHlfZXZlbnRzLnByb3BlcnR5RGlk
Q2hhbmdlKHRoaXMsICdsZW5ndGgnKTsKKyAgICAgIH0KKworICAgICAgX2VtYmVyTWV0YWxQcm9w
ZXJ0eV9ldmVudHMucHJvcGVydHlEaWRDaGFuZ2UodGhpcywgJ1tdJyk7CisKKyAgICAgIHJldHVy
biB0aGlzOworICAgIH0sCisKKyAgICAvKioKKyAgICAgIENvbnZlcnRzIHRoZSBlbnVtZXJhYmxl
IGludG8gYW4gYXJyYXkgYW5kIHNvcnRzIGJ5IHRoZSBrZXlzCisgICAgICBzcGVjaWZpZWQgaW4g
dGhlIGFyZ3VtZW50LgorICAgICAgIFlvdSBtYXkgcHJvdmlkZSBtdWx0aXBsZSBhcmd1bWVudHMg
dG8gc29ydCBieSBtdWx0aXBsZSBwcm9wZXJ0aWVzLgorICAgICAgIEBtZXRob2Qgc29ydEJ5Cisg
ICAgICBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHkgbmFtZShzKSB0byBzb3J0IG9uCisgICAgICBA
cmV0dXJuIHtBcnJheX0gVGhlIHNvcnRlZCBhcnJheS4KKyAgICAgIEBzaW5jZSAxLjIuMAorICAg
ICAgQHB1YmxpYworICAgICovCisgICAgc29ydEJ5OiBmdW5jdGlvbiAoKSB7CisgICAgICB2YXIg
c29ydEtleXMgPSBhcmd1bWVudHM7CisKKyAgICAgIHJldHVybiB0aGlzLnRvQXJyYXkoKS5zb3J0
KGZ1bmN0aW9uIChhLCBiKSB7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc29ydEtleXMu
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICB2YXIga2V5ID0gc29ydEtleXNbaV07CisgICAgICAg
ICAgdmFyIHByb3BBID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KGEsIGtleSk7CisgICAg
ICAgICAgdmFyIHByb3BCID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KGIsIGtleSk7Cisg
ICAgICAgICAgLy8gcmV0dXJuIDEgb3IgLTEgZWxzZSBjb250aW51ZSB0byB0aGUgbmV4dCBzb3J0
S2V5CisgICAgICAgICAgdmFyIGNvbXBhcmVWYWx1ZSA9IF9lbWJlclJ1bnRpbWVDb21wYXJlLmRl
ZmF1bHQocHJvcEEsIHByb3BCKTsKKworICAgICAgICAgIGlmIChjb21wYXJlVmFsdWUpIHsKKyAg
ICAgICAgICAgIHJldHVybiBjb21wYXJlVmFsdWU7CisgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIHJldHVybiAwOworICAgICAgfSk7CisgICAgfQorICB9KTsKKworICBleHBvcnRzLmRl
ZmF1bHQgPSBFbnVtZXJhYmxlOworfSk7CisKKy8qKgorICBSZXR1cm5zIGEgbmV3IGVudW1lcmFi
bGUgdGhhdCBjb250YWlucyBvbmx5IGl0ZW1zIGNvbnRhaW5pbmcgYSB1bmlxdWUgcHJvcGVydHkg
dmFsdWUuCisgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgYW4gYXJyYXkgcmVn
YXJkbGVzcyBvZiB0aGUgcmVjZWl2ZXIgdHlwZS4KKyAgIGBgYGphdmFzY3JpcHQKKyAgdmFyIGFy
ciA9IFt7IHZhbHVlOiAnYScgfSwgeyB2YWx1ZTogJ2EnIH0sIHsgdmFsdWU6ICdiJyB9LCB7IHZh
bHVlOiAnYicgfV07CisgIGFyci51bmlxQnkoJ3ZhbHVlJyk7ICAvLyBbeyB2YWx1ZTogJ2EnIH0s
IHsgdmFsdWU6ICdiJyB9XQorICBgYGAKKyAgIEBtZXRob2QgdW5pcUJ5CisgIEByZXR1cm4ge0Vt
YmVyLkVudW1lcmFibGV9CisgIEBwdWJsaWMKKyovCitlbmlmZWQoJ2VtYmVyLXJ1bnRpbWUvbWl4
aW5zL2V2ZW50ZWQnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvbWl4aW4nLCAnZW1iZXItbWV0
YWwvZXZlbnRzJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbE1peGluLCBfZW1iZXJN
ZXRhbEV2ZW50cykgeworICAndXNlIHN0cmljdCc7CisKKyAgLyoqCisgIEBtb2R1bGUgZW1iZXIK
KyAgQHN1Ym1vZHVsZSBlbWJlci1ydW50aW1lCisgICovCisKKyAgLyoqCisgICAgVGhpcyBtaXhp
biBhbGxvd3MgZm9yIEVtYmVyIG9iamVjdHMgdG8gc3Vic2NyaWJlIHRvIGFuZCBlbWl0IGV2ZW50
cy4KKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIEFwcC5QZXJzb24gPSBFbWJlci5PYmplY3Qu
ZXh0ZW5kKEVtYmVyLkV2ZW50ZWQsIHsKKyAgICAgIGdyZWV0OiBmdW5jdGlvbigpIHsKKyAgICAg
ICAgLy8gLi4uCisgICAgICAgIHRoaXMudHJpZ2dlcignZ3JlZXQnKTsKKyAgICAgIH0KKyAgICB9
KTsKKyAgCisgICAgdmFyIHBlcnNvbiA9IEFwcC5QZXJzb24uY3JlYXRlKCk7CisgIAorICAgIHBl
cnNvbi5vbignZ3JlZXQnLCBmdW5jdGlvbigpIHsKKyAgICAgIGNvbnNvbGUubG9nKCdPdXIgcGVy
c29uIGhhcyBncmVldGVkJyk7CisgICAgfSk7CisgIAorICAgIHBlcnNvbi5ncmVldCgpOworICAK
KyAgICAvLyBvdXRwdXRzOiAnT3VyIHBlcnNvbiBoYXMgZ3JlZXRlZCcKKyAgICBgYGAKKyAgCisg
ICAgWW91IGNhbiBhbHNvIGNoYWluIG11bHRpcGxlIGV2ZW50IHN1YnNjcmlwdGlvbnM6CisgIAor
ICAgIGBgYGphdmFzY3JpcHQKKyAgICBwZXJzb24ub24oJ2dyZWV0JywgZnVuY3Rpb24oKSB7Cisg
ICAgICBjb25zb2xlLmxvZygnT3VyIHBlcnNvbiBoYXMgZ3JlZXRlZCcpOworICAgIH0pLm9uZSgn
Z3JlZXQnLCBmdW5jdGlvbigpIHsKKyAgICAgIGNvbnNvbGUubG9nKCdPZmZlciBvbmUtdGltZSBz
cGVjaWFsJyk7CisgICAgfSkub2ZmKCdldmVudCcsIHRoaXMsIGZvcmdldFRoaXMpOworICAgIGBg
YAorICAKKyAgICBAY2xhc3MgRXZlbnRlZAorICAgIEBuYW1lc3BhY2UgRW1iZXIKKyAgICBAcHVi
bGljCisgICAqLworICBleHBvcnRzLmRlZmF1bHQgPSBfZW1iZXJNZXRhbE1peGluLk1peGluLmNy
ZWF0ZSh7CisKKyAgICAvKioKKyAgICAgU3Vic2NyaWJlcyB0byBhIG5hbWVkIGV2ZW50IHdpdGgg
Z2l2ZW4gZnVuY3Rpb24uCisgICAgICBgYGBqYXZhc2NyaXB0CisgICAgIHBlcnNvbi5vbignZGlk
TG9hZCcsIGZ1bmN0aW9uKCkgeworICAgICAgIC8vIGZpcmVkIG9uY2UgdGhlIHBlcnNvbiBoYXMg
bG9hZGVkCisgICAgIH0pOworICAgICBgYGAKKyAgICAgIEFuIG9wdGlvbmFsIHRhcmdldCBjYW4g
YmUgcGFzc2VkIGluIGFzIHRoZSAybmQgYXJndW1lbnQgdGhhdCB3aWxsCisgICAgIGJlIHNldCBh
cyB0aGUgInRoaXMiIGZvciB0aGUgY2FsbGJhY2suIFRoaXMgaXMgYSBnb29kIHdheSB0byBnaXZl
IHlvdXIKKyAgICAgZnVuY3Rpb24gYWNjZXNzIHRvIHRoZSBvYmplY3QgdHJpZ2dlcmluZyB0aGUg
ZXZlbnQuIFdoZW4gdGhlIHRhcmdldAorICAgICBwYXJhbWV0ZXIgaXMgdXNlZCB0aGUgY2FsbGJh
Y2sgYmVjb21lcyB0aGUgdGhpcmQgYXJndW1lbnQuCisgICAgICBAbWV0aG9kIG9uCisgICAgIEBw
YXJhbSB7U3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBldmVudAorICAgICBAcGFyYW0ge09i
amVjdH0gW3RhcmdldF0gVGhlICJ0aGlzIiBiaW5kaW5nIGZvciB0aGUgY2FsbGJhY2sKKyAgICAg
QHBhcmFtIHtGdW5jdGlvbn0gbWV0aG9kIFRoZSBjYWxsYmFjayB0byBleGVjdXRlCisgICAgIEBy
ZXR1cm4gdGhpcworICAgICBAcHVibGljCisgICAgKi8KKyAgICBvbjogZnVuY3Rpb24gKG5hbWUs
IHRhcmdldCwgbWV0aG9kKSB7CisgICAgICBfZW1iZXJNZXRhbEV2ZW50cy5hZGRMaXN0ZW5lcih0
aGlzLCBuYW1lLCB0YXJnZXQsIG1ldGhvZCk7CisgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAor
CisgICAgLyoqCisgICAgICBTdWJzY3JpYmVzIGEgZnVuY3Rpb24gdG8gYSBuYW1lZCBldmVudCBh
bmQgdGhlbiBjYW5jZWxzIHRoZSBzdWJzY3JpcHRpb24KKyAgICAgIGFmdGVyIHRoZSBmaXJzdCB0
aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuIEl0IGlzIGdvb2QgdG8gdXNlIGBgb25lYGAgd2hl
bgorICAgICAgeW91IG9ubHkgY2FyZSBhYm91dCB0aGUgZmlyc3QgdGltZSBhbiBldmVudCBoYXMg
dGFrZW4gcGxhY2UuCisgICAgICAgVGhpcyBmdW5jdGlvbiB0YWtlcyBhbiBvcHRpb25hbCAybmQg
YXJndW1lbnQgdGhhdCB3aWxsIGJlY29tZSB0aGUgInRoaXMiCisgICAgICB2YWx1ZSBmb3IgdGhl
IGNhbGxiYWNrLiBJZiB0aGlzIGFyZ3VtZW50IGlzIHBhc3NlZCB0aGVuIHRoZSAzcmQgYXJndW1l
bnQKKyAgICAgIGJlY29tZXMgdGhlIGZ1bmN0aW9uLgorICAgICAgIEBtZXRob2Qgb25lCisgICAg
ICBAcGFyYW0ge1N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQKKyAgICAgIEBwYXJh
bSB7T2JqZWN0fSBbdGFyZ2V0XSBUaGUgInRoaXMiIGJpbmRpbmcgZm9yIHRoZSBjYWxsYmFjawor
ICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gbWV0aG9kIFRoZSBjYWxsYmFjayB0byBleGVjdXRlCisg
ICAgICBAcmV0dXJuIHRoaXMKKyAgICAgIEBwdWJsaWMKKyAgICAqLworICAgIG9uZTogZnVuY3Rp
b24gKG5hbWUsIHRhcmdldCwgbWV0aG9kKSB7CisgICAgICBpZiAoIW1ldGhvZCkgeworICAgICAg
ICBtZXRob2QgPSB0YXJnZXQ7CisgICAgICAgIHRhcmdldCA9IG51bGw7CisgICAgICB9CisKKyAg
ICAgIF9lbWJlck1ldGFsRXZlbnRzLmFkZExpc3RlbmVyKHRoaXMsIG5hbWUsIHRhcmdldCwgbWV0
aG9kLCB0cnVlKTsKKyAgICAgIHJldHVybiB0aGlzOworICAgIH0sCisKKyAgICAvKioKKyAgICAg
IFRyaWdnZXJzIGEgbmFtZWQgZXZlbnQgZm9yIHRoZSBvYmplY3QuIEFueSBhZGRpdGlvbmFsIGFy
Z3VtZW50cworICAgICAgd2lsbCBiZSBwYXNzZWQgYXMgcGFyYW1ldGVycyB0byB0aGUgZnVuY3Rp
b25zIHRoYXQgYXJlIHN1YnNjcmliZWQgdG8gdGhlCisgICAgICBldmVudC4KKyAgICAgICBgYGBq
YXZhc2NyaXB0CisgICAgICBwZXJzb24ub24oJ2RpZEVhdCcsIGZ1bmN0aW9uKGZvb2QpIHsKKyAg
ICAgICAgY29uc29sZS5sb2coJ3BlcnNvbiBhdGUgc29tZSAnICsgZm9vZCk7CisgICAgICB9KTsK
KyAgICAgICBwZXJzb24udHJpZ2dlcignZGlkRWF0JywgJ2Jyb2Njb2xpJyk7CisgICAgICAgLy8g
b3V0cHV0czogcGVyc29uIGF0ZSBzb21lIGJyb2Njb2xpCisgICAgICBgYGAKKyAgICAgIEBtZXRo
b2QgdHJpZ2dlcgorICAgICAgQHBhcmFtIHtTdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIGV2
ZW50CisgICAgICBAcGFyYW0ge09iamVjdC4uLn0gYXJncyBPcHRpb25hbCBhcmd1bWVudHMgdG8g
cGFzcyBvbgorICAgICAgQHB1YmxpYworICAgICovCisgICAgdHJpZ2dlcjogZnVuY3Rpb24gKG5h
bWUpIHsKKyAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJy
YXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkr
KykgeworICAgICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTsKKyAgICAgIH0K
KworICAgICAgX2VtYmVyTWV0YWxFdmVudHMuc2VuZEV2ZW50KHRoaXMsIG5hbWUsIGFyZ3MpOwor
ICAgIH0sCisKKyAgICAvKioKKyAgICAgIENhbmNlbHMgc3Vic2NyaXB0aW9uIGZvciBnaXZlbiBu
YW1lLCB0YXJnZXQsIGFuZCBtZXRob2QuCisgICAgICAgQG1ldGhvZCBvZmYKKyAgICAgIEBwYXJh
bSB7U3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBldmVudAorICAgICAgQHBhcmFtIHtPYmpl
Y3R9IHRhcmdldCBUaGUgdGFyZ2V0IG9mIHRoZSBzdWJzY3JpcHRpb24KKyAgICAgIEBwYXJhbSB7
RnVuY3Rpb259IG1ldGhvZCBUaGUgZnVuY3Rpb24gb2YgdGhlIHN1YnNjcmlwdGlvbgorICAgICAg
QHJldHVybiB0aGlzCisgICAgICBAcHVibGljCisgICAgKi8KKyAgICBvZmY6IGZ1bmN0aW9uIChu
YW1lLCB0YXJnZXQsIG1ldGhvZCkgeworICAgICAgX2VtYmVyTWV0YWxFdmVudHMucmVtb3ZlTGlz
dGVuZXIodGhpcywgbmFtZSwgdGFyZ2V0LCBtZXRob2QpOworICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgfSwKKworICAgIC8qKgorICAgICAgQ2hlY2tzIHRvIHNlZSBpZiBvYmplY3QgaGFzIGFueSBz
dWJzY3JpcHRpb25zIGZvciBuYW1lZCBldmVudC4KKyAgICAgICBAbWV0aG9kIGhhcworICAgICAg
QHBhcmFtIHtTdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIGV2ZW50CisgICAgICBAcmV0dXJu
IHtCb29sZWFufSBkb2VzIHRoZSBvYmplY3QgaGF2ZSBhIHN1YnNjcmlwdGlvbiBmb3IgZXZlbnQK
KyAgICAgIEBwdWJsaWMKKyAgICAgKi8KKyAgICBoYXM6IGZ1bmN0aW9uIChuYW1lKSB7CisgICAg
ICByZXR1cm4gX2VtYmVyTWV0YWxFdmVudHMuaGFzTGlzdGVuZXJzKHRoaXMsIG5hbWUpOworICAg
IH0KKyAgfSk7Cit9KTsKK2VuaWZlZCgnZW1iZXItcnVudGltZS9taXhpbnMvZnJlZXphYmxlJywg
WydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLW1ldGFsL21peGluJywgJ2Vt
YmVyLW1ldGFsL3Byb3BlcnR5X2dldCcsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9zZXQnXSwgZnVu
Y3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsRGVidWcsIF9lbWJlck1ldGFsTWl4aW4sIF9lbWJl
ck1ldGFsUHJvcGVydHlfZ2V0LCBfZW1iZXJNZXRhbFByb3BlcnR5X3NldCkgeworICAvKioKKyAg
QG1vZHVsZSBlbWJlcgorICBAc3VibW9kdWxlIGVtYmVyLXJ1bnRpbWUKKyAgKi8KKworICAndXNl
IHN0cmljdCc7CisKKyAgLyoqCisgICAgVGhlIGBFbWJlci5GcmVlemFibGVgIG1peGluIGltcGxl
bWVudHMgc29tZSBiYXNpYyBtZXRob2RzIGZvciBtYXJraW5nIGFuCisgICAgb2JqZWN0IGFzIGZy
b3plbi4gT25jZSBhbiBvYmplY3QgaXMgZnJvemVuIGl0IHNob3VsZCBiZSByZWFkIG9ubHkuIE5v
IGNoYW5nZXMKKyAgICBtYXkgYmUgbWFkZSB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIG9iamVj
dC4KKyAgCisgICAgIyMgRW5mb3JjZW1lbnQKKyAgCisgICAgVG8gZnVsbHkgc3VwcG9ydCBmcmVl
emluZyBpbiB5b3VyIHN1YmNsYXNzLCB5b3UgbXVzdCBpbmNsdWRlIHRoaXMgbWl4aW4gYW5kCisg
ICAgb3ZlcnJpZGUgYW55IG1ldGhvZCB0aGF0IG1pZ2h0IGFsdGVyIGFueSBwcm9wZXJ0eSBvbiB0
aGUgb2JqZWN0IHRvIGluc3RlYWQKKyAgICByYWlzZSBhbiBleGNlcHRpb24uIFlvdSBjYW4gY2hl
Y2sgdGhlIHN0YXRlIG9mIGFuIG9iamVjdCBieSBjaGVja2luZyB0aGUKKyAgICBgaXNGcm96ZW5g
IHByb3BlcnR5LgorICAKKyAgICBBbHRob3VnaCBmdXR1cmUgdmVyc2lvbnMgb2YgSmF2YVNjcmlw
dCBtYXkgc3VwcG9ydCBsYW5ndWFnZS1sZXZlbCBmcmVlemluZworICAgIG9iamVjdCBvYmplY3Rz
LCB0aGF0IGlzIG5vdCB0aGUgY2FzZSB0b2RheS4gRXZlbiBpZiBhbiBvYmplY3QgaXMgZnJlZXph
YmxlLAorICAgIGl0IGlzIHN0aWxsIHRlY2huaWNhbGx5IHBvc3NpYmxlIHRvIG1vZGlmeSB0aGUg
b2JqZWN0LCBldmVuIHRob3VnaCBpdCBjb3VsZAorICAgIGJyZWFrIG90aGVyIHBhcnRzIG9mIHlv
dXIgYXBwbGljYXRpb24gdGhhdCBkbyBub3QgZXhwZWN0IGEgZnJvemVuIG9iamVjdCB0bworICAg
IGNoYW5nZS4gSXQgaXMsIHRoZXJlZm9yZSwgdmVyeSBpbXBvcnRhbnQgdGhhdCB5b3UgYWx3YXlz
IHJlc3BlY3QgdGhlCisgICAgYGlzRnJvemVuYCBwcm9wZXJ0eSBvbiBhbGwgZnJlZXphYmxlIG9i
amVjdHMuCisgIAorICAgICMjIEV4YW1wbGUgVXNhZ2UKKyAgCisgICAgVGhlIGV4YW1wbGUgYmVs
b3cgc2hvd3MgYSBzaW1wbGUgb2JqZWN0IHRoYXQgaW1wbGVtZW50IHRoZSBgRW1iZXIuRnJlZXph
YmxlYAorICAgIHByb3RvY29sLgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgQ29udGFjdCA9
IEVtYmVyLk9iamVjdC5leHRlbmQoRW1iZXIuRnJlZXphYmxlLCB7CisgICAgICBmaXJzdE5hbWU6
IG51bGwsCisgICAgICBsYXN0TmFtZTogbnVsbCwKKyAgCisgICAgICAvLyBzd2FwcyB0aGUgbmFt
ZXMKKyAgICAgIHN3YXBOYW1lczogZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh0aGlzLmdldCgn
aXNGcm96ZW4nKSkgdGhyb3cgRW1iZXIuRlJPWkVOX0VSUk9SOworICAgICAgICB2YXIgdG1wID0g
dGhpcy5nZXQoJ2ZpcnN0TmFtZScpOworICAgICAgICB0aGlzLnNldCgnZmlyc3ROYW1lJywgdGhp
cy5nZXQoJ2xhc3ROYW1lJykpOworICAgICAgICB0aGlzLnNldCgnbGFzdE5hbWUnLCB0bXApOwor
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgIH0KKyAgCisgICAgfSk7CisgIAorICAgIGMgPSBD
b250YWN0LmNyZWF0ZSh7IGZpcnN0TmFtZTogIkpvaG4iLCBsYXN0TmFtZTogIkRvZSIgfSk7Cisg
ICAgYy5zd2FwTmFtZXMoKTsgIC8vIHJldHVybnMgYworICAgIGMuZnJlZXplKCk7CisgICAgYy5z
d2FwTmFtZXMoKTsgIC8vIEVYQ0VQVElPTgorICAgIGBgYAorICAKKyAgICAjIyBDb3B5aW5nCisg
IAorICAgIFVzdWFsbHkgdGhlIGBFbWJlci5GcmVlemFibGVgIHByb3RvY29sIGlzIGltcGxlbWVu
dGVkIGluIGNvb3BlcmF0aW9uIHdpdGggdGhlCisgICAgYEVtYmVyLkNvcHlhYmxlYCBwcm90b2Nv
bCwgd2hpY2ggZGVmaW5lcyBhIGBmcm96ZW5Db3B5KClgIG1ldGhvZCB0aGF0IHdpbGwKKyAgICBy
ZXR1cm4gYSBmcm96ZW4gb2JqZWN0LCBpZiB0aGUgb2JqZWN0IGltcGxlbWVudHMgdGhpcyBtZXRo
b2QgYXMgd2VsbC4KKyAgCisgICAgQGNsYXNzIEZyZWV6YWJsZQorICAgIEBuYW1lc3BhY2UgRW1i
ZXIKKyAgICBAc2luY2UgRW1iZXIgMC45CisgICAgQGRlcHJlY2F0ZWQgVXNlIGBPYmplY3QuZnJl
ZXplYCBpbnN0ZWFkLgorICAgIEBwcml2YXRlCisgICovCisgIHZhciBGcmVlemFibGUgPSBfZW1i
ZXJNZXRhbE1peGluLk1peGluLmNyZWF0ZSh7CisKKyAgICBpbml0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICBfZW1iZXJNZXRhbERlYnVnLmRlcHJlY2F0ZSgnYEVtYmVyLkZyZWV6YWJsZWAgaXMgZGVw
cmVjYXRlZCwgdXNlIGBPYmplY3QuZnJlZXplYCBpbnN0ZWFkLicsIGZhbHNlLCB7IGlkOiAnZW1i
ZXItcnVudGltZS5mcmVlemFibGUtaW5pdCcsIHVudGlsOiAnMy4wLjAnIH0pOworICAgICAgdGhp
cy5fc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICB9LAorCisgICAgLyoqCisgICAg
ICBTZXQgdG8gYHRydWVgIHdoZW4gdGhlIG9iamVjdCBpcyBmcm96ZW4uIFVzZSB0aGlzIHByb3Bl
cnR5IHRvIGRldGVjdAorICAgICAgd2hldGhlciB5b3VyIG9iamVjdCBpcyBmcm96ZW4gb3Igbm90
LgorICAgICAgIEBwcm9wZXJ0eSBpc0Zyb3plbgorICAgICAgQHR5cGUgQm9vbGVhbgorICAgICAg
QHByaXZhdGUKKyAgICAqLworICAgIGlzRnJvemVuOiBmYWxzZSwKKworICAgIC8qKgorICAgICAg
RnJlZXplcyB0aGUgb2JqZWN0LiBPbmNlIHRoaXMgbWV0aG9kIGhhcyBiZWVuIGNhbGxlZCB0aGUg
b2JqZWN0IHNob3VsZAorICAgICAgbm8gbG9uZ2VyIGFsbG93IGFueSBwcm9wZXJ0aWVzIHRvIGJl
IGVkaXRlZC4KKyAgICAgICBAbWV0aG9kIGZyZWV6ZQorICAgICAgQHJldHVybiB7T2JqZWN0fSBy
ZWNlaXZlcgorICAgICAgQHByaXZhdGUKKyAgICAqLworICAgIGZyZWV6ZTogZnVuY3Rpb24gKCkg
eworICAgICAgaWYgKF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnaXNGcm96ZW4n
KSkgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgIH0KKworICAgICAgX2VtYmVyTWV0YWxQ
cm9wZXJ0eV9zZXQuc2V0KHRoaXMsICdpc0Zyb3plbicsIHRydWUpOworICAgICAgcmV0dXJuIHRo
aXM7CisgICAgfQorCisgIH0pOworCisgIGV4cG9ydHMuRnJlZXphYmxlID0gRnJlZXphYmxlOwor
ICB2YXIgRlJPWkVOX0VSUk9SID0gJ0Zyb3plbiBvYmplY3QgY2Fubm90IGJlIG1vZGlmaWVkLic7
CisgIGV4cG9ydHMuRlJPWkVOX0VSUk9SID0gRlJPWkVOX0VSUk9SOworfSk7CitlbmlmZWQoJ2Vt
YmVyLXJ1bnRpbWUvbWl4aW5zL211dGFibGVfYXJyYXknLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0
YWwvcHJvcGVydHlfZ2V0JywgJ2VtYmVyLW1ldGFsL2Vycm9yJywgJ2VtYmVyLW1ldGFsL21peGlu
JywgJ2VtYmVyLXJ1bnRpbWUvbWl4aW5zL2FycmF5JywgJ2VtYmVyLXJ1bnRpbWUvbWl4aW5zL211
dGFibGVfZW51bWVyYWJsZScsICdlbWJlci1ydW50aW1lL21peGlucy9lbnVtZXJhYmxlJ10sIGZ1
bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbFByb3BlcnR5X2dldCwgX2VtYmVyTWV0YWxFcnJv
ciwgX2VtYmVyTWV0YWxNaXhpbiwgX2VtYmVyUnVudGltZU1peGluc0FycmF5LCBfZW1iZXJSdW50
aW1lTWl4aW5zTXV0YWJsZV9lbnVtZXJhYmxlLCBfZW1iZXJSdW50aW1lTWl4aW5zRW51bWVyYWJs
ZSkgeworICAvKioKKyAgQG1vZHVsZSBlbWJlcgorICBAc3VibW9kdWxlIGVtYmVyLXJ1bnRpbWUK
KyAgKi8KKworICAvLyByZXF1aXJlKCdlbWJlci1ydW50aW1lL21peGlucy9hcnJheScpOworICAv
LyByZXF1aXJlKCdlbWJlci1ydW50aW1lL21peGlucy9tdXRhYmxlX2VudW1lcmFibGUnKTsKKwor
ICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uCisgIC8vIENPTlNUQU5UUworICAvLworCisgICd1c2Ugc3RyaWN0JzsKKworICB2YXIg
T1VUX09GX1JBTkdFX0VYQ0VQVElPTiA9ICdJbmRleCBvdXQgb2YgcmFuZ2UnOworICB2YXIgRU1Q
VFkgPSBbXTsKKworICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uCisgIC8vIEhFTFBFUlMKKyAgLy8KKworICAvKioKKyAgICBUaGlz
IG1peGluIGRlZmluZXMgdGhlIEFQSSBmb3IgbW9kaWZ5aW5nIGFycmF5LWxpa2Ugb2JqZWN0cy4g
VGhlc2UgbWV0aG9kcworICAgIGNhbiBiZSBhcHBsaWVkIG9ubHkgdG8gYSBjb2xsZWN0aW9uIHRo
YXQga2VlcHMgaXRzIGl0ZW1zIGluIGFuIG9yZGVyZWQgc2V0LgorICAgIEl0IGJ1aWxkcyB1cG9u
IHRoZSBBcnJheSBtaXhpbiBhbmQgYWRkcyBtZXRob2RzIHRvIG1vZGlmeSB0aGUgYXJyYXkuCisg
ICAgT25lIGNvbmNyZXRlIGltcGxlbWVudGF0aW9ucyBvZiB0aGlzIGNsYXNzIGluY2x1ZGUgQXJy
YXlQcm94eS4KKyAgCisgICAgSXQgaXMgaW1wb3J0YW50IHRvIHVzZSB0aGUgbWV0aG9kcyBpbiB0
aGlzIGNsYXNzIHRvIG1vZGlmeSBhcnJheXMgc28gdGhhdAorICAgIGNoYW5nZXMgYXJlIG9ic2Vy
dmFibGUuIFRoaXMgYWxsb3dzIHRoZSBiaW5kaW5nIHN5c3RlbSBpbiBFbWJlciB0byBmdW5jdGlv
bgorICAgIGNvcnJlY3RseS4KKyAgCisgIAorICAgIE5vdGUgdGhhdCBhbiBBcnJheSBjYW4gY2hh
bmdlIGV2ZW4gaWYgaXQgZG9lcyBub3QgaW1wbGVtZW50IHRoaXMgbWl4aW4uCisgICAgRm9yIGV4
YW1wbGUsIG9uZSBtaWdodCBpbXBsZW1lbnQgYSBTcGFyc2VBcnJheSB0aGF0IGNhbm5vdCBiZSBk
aXJlY3RseQorICAgIG1vZGlmaWVkLCBidXQgaWYgaXRzIHVuZGVybHlpbmcgZW51bWVyYWJsZSBj
aGFuZ2VzLCBpdCB3aWxsIGNoYW5nZSBhbHNvLgorICAKKyAgICBAY2xhc3MgTXV0YWJsZUFycmF5
CisgICAgQG5hbWVzcGFjZSBFbWJlcgorICAgIEB1c2VzIEVtYmVyLkFycmF5CisgICAgQHVzZXMg
RW1iZXIuTXV0YWJsZUVudW1lcmFibGUKKyAgICBAcHVibGljCisgICovCisgIGV4cG9ydHMuZGVm
YXVsdCA9IF9lbWJlck1ldGFsTWl4aW4uTWl4aW4uY3JlYXRlKF9lbWJlclJ1bnRpbWVNaXhpbnNB
cnJheS5kZWZhdWx0LCBfZW1iZXJSdW50aW1lTWl4aW5zTXV0YWJsZV9lbnVtZXJhYmxlLmRlZmF1
bHQsIHsKKworICAgIC8qKgorICAgICAgX19SZXF1aXJlZC5fXyBZb3UgbXVzdCBpbXBsZW1lbnQg
dGhpcyBtZXRob2QgdG8gYXBwbHkgdGhpcyBtaXhpbi4KKyAgICAgICBUaGlzIGlzIG9uZSBvZiB0
aGUgcHJpbWl0aXZlcyB5b3UgbXVzdCBpbXBsZW1lbnQgdG8gc3VwcG9ydCBgRW1iZXIuQXJyYXlg
LgorICAgICAgWW91IHNob3VsZCByZXBsYWNlIGFtdCBvYmplY3RzIHN0YXJ0ZWQgYXQgaWR4IHdp
dGggdGhlIG9iamVjdHMgaW4gdGhlCisgICAgICBwYXNzZWQgYXJyYXkuIFlvdSBzaG91bGQgYWxz
byBjYWxsIGB0aGlzLmVudW1lcmFibGVDb250ZW50RGlkQ2hhbmdlKClgCisgICAgICAgQG1ldGhv
ZCByZXBsYWNlCisgICAgICBAcGFyYW0ge051bWJlcn0gaWR4IFN0YXJ0aW5nIGluZGV4IGluIHRo
ZSBhcnJheSB0byByZXBsYWNlLiBJZgorICAgICAgICBpZHggPj0gbGVuZ3RoLCB0aGVuIGFwcGVu
ZCB0byB0aGUgZW5kIG9mIHRoZSBhcnJheS4KKyAgICAgIEBwYXJhbSB7TnVtYmVyfSBhbXQgTnVt
YmVyIG9mIGVsZW1lbnRzIHRoYXQgc2hvdWxkIGJlIHJlbW92ZWQgZnJvbQorICAgICAgICB0aGUg
YXJyYXksIHN0YXJ0aW5nIGF0ICppZHgqLgorICAgICAgQHBhcmFtIHtBcnJheX0gb2JqZWN0cyBB
biBhcnJheSBvZiB6ZXJvIG9yIG1vcmUgb2JqZWN0cyB0aGF0IHNob3VsZCBiZQorICAgICAgICBp
bnNlcnRlZCBpbnRvIHRoZSBhcnJheSBhdCAqaWR4KgorICAgICAgQHB1YmxpYworICAgICovCisg
ICAgcmVwbGFjZTogbnVsbCwKKworICAgIC8qKgorICAgICAgUmVtb3ZlIGFsbCBlbGVtZW50cyBm
cm9tIHRoZSBhcnJheS4gVGhpcyBpcyB1c2VmdWwgaWYgeW91CisgICAgICB3YW50IHRvIHJldXNl
IGFuIGV4aXN0aW5nIGFycmF5IHdpdGhvdXQgaGF2aW5nIHRvIHJlY3JlYXRlIGl0LgorICAgICAg
IGBgYGphdmFzY3JpcHQKKyAgICAgIHZhciBjb2xvcnMgPSBbJ3JlZCcsICdncmVlbicsICdibHVl
J107CisgICAgICAgY29sb3IubGVuZ3RoKCk7ICAgLy8gIDMKKyAgICAgIGNvbG9ycy5jbGVhcigp
OyAgIC8vICBbXQorICAgICAgY29sb3JzLmxlbmd0aCgpOyAgLy8gIDAKKyAgICAgIGBgYAorICAg
ICAgIEBtZXRob2QgY2xlYXIKKyAgICAgIEByZXR1cm4ge0VtYmVyLkFycmF5fSBBbiBlbXB0eSBB
cnJheS4KKyAgICAgIEBwdWJsaWMKKyAgICAqLworICAgIGNsZWFyOiBmdW5jdGlvbiAoKSB7Cisg
ICAgICB2YXIgbGVuID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdsZW5ndGgn
KTsKKyAgICAgIGlmIChsZW4gPT09IDApIHsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICB9
CisKKyAgICAgIHRoaXMucmVwbGFjZSgwLCBsZW4sIEVNUFRZKTsKKyAgICAgIHJldHVybiB0aGlz
OworICAgIH0sCisKKyAgICAvKioKKyAgICAgIFRoaXMgd2lsbCB1c2UgdGhlIHByaW1pdGl2ZSBg
cmVwbGFjZSgpYCBtZXRob2QgdG8gaW5zZXJ0IGFuIG9iamVjdCBhdCB0aGUKKyAgICAgIHNwZWNp
ZmllZCBpbmRleC4KKyAgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICB2YXIgY29sb3JzID0gWydy
ZWQnLCAnZ3JlZW4nLCAnYmx1ZSddOworICAgICAgIGNvbG9ycy5pbnNlcnRBdCgyLCAneWVsbG93
Jyk7ICAvLyBbJ3JlZCcsICdncmVlbicsICd5ZWxsb3cnLCAnYmx1ZSddCisgICAgICBjb2xvcnMu
aW5zZXJ0QXQoNSwgJ29yYW5nZScpOyAgLy8gRXJyb3I6IEluZGV4IG91dCBvZiByYW5nZQorICAg
ICAgYGBgCisgICAgICAgQG1ldGhvZCBpbnNlcnRBdAorICAgICAgQHBhcmFtIHtOdW1iZXJ9IGlk
eCBpbmRleCBvZiBpbnNlcnQgdGhlIG9iamVjdCBhdC4KKyAgICAgIEBwYXJhbSB7T2JqZWN0fSBv
YmplY3Qgb2JqZWN0IHRvIGluc2VydAorICAgICAgQHJldHVybiB7RW1iZXIuQXJyYXl9IHJlY2Vp
dmVyCisgICAgICBAcHVibGljCisgICAgKi8KKyAgICBpbnNlcnRBdDogZnVuY3Rpb24gKGlkeCwg
b2JqZWN0KSB7CisgICAgICBpZiAoaWR4ID4gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRo
aXMsICdsZW5ndGgnKSkgeworICAgICAgICB0aHJvdyBuZXcgX2VtYmVyTWV0YWxFcnJvci5kZWZh
dWx0KE9VVF9PRl9SQU5HRV9FWENFUFRJT04pOworICAgICAgfQorCisgICAgICB0aGlzLnJlcGxh
Y2UoaWR4LCAwLCBbb2JqZWN0XSk7CisgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAg
LyoqCisgICAgICBSZW1vdmUgYW4gb2JqZWN0IGF0IHRoZSBzcGVjaWZpZWQgaW5kZXggdXNpbmcg
dGhlIGByZXBsYWNlKClgIHByaW1pdGl2ZQorICAgICAgbWV0aG9kLiBZb3UgY2FuIHBhc3MgZWl0
aGVyIGEgc2luZ2xlIGluZGV4LCBvciBhIHN0YXJ0IGFuZCBhIGxlbmd0aC4KKyAgICAgICBJZiB5
b3UgcGFzcyBhIHN0YXJ0IGFuZCBsZW5ndGggdGhhdCBpcyBiZXlvbmQgdGhlCisgICAgICBsZW5n
dGggdGhpcyBtZXRob2Qgd2lsbCB0aHJvdyBhbiBgT1VUX09GX1JBTkdFX0VYQ0VQVElPTmAuCisg
ICAgICAgYGBgamF2YXNjcmlwdAorICAgICAgdmFyIGNvbG9ycyA9IFsncmVkJywgJ2dyZWVuJywg
J2JsdWUnLCAneWVsbG93JywgJ29yYW5nZSddOworICAgICAgIGNvbG9ycy5yZW1vdmVBdCgwKTsg
ICAgIC8vIFsnZ3JlZW4nLCAnYmx1ZScsICd5ZWxsb3cnLCAnb3JhbmdlJ10KKyAgICAgIGNvbG9y
cy5yZW1vdmVBdCgyLCAyKTsgIC8vIFsnZ3JlZW4nLCAnYmx1ZSddCisgICAgICBjb2xvcnMucmVt
b3ZlQXQoNCwgMik7ICAvLyBFcnJvcjogSW5kZXggb3V0IG9mIHJhbmdlCisgICAgICBgYGAKKyAg
ICAgICBAbWV0aG9kIHJlbW92ZUF0CisgICAgICBAcGFyYW0ge051bWJlcn0gc3RhcnQgaW5kZXgs
IHN0YXJ0IG9mIHJhbmdlCisgICAgICBAcGFyYW0ge051bWJlcn0gbGVuIGxlbmd0aCBvZiBwYXNz
aW5nIHJhbmdlCisgICAgICBAcmV0dXJuIHtFbWJlci5BcnJheX0gcmVjZWl2ZXIKKyAgICAgIEBw
dWJsaWMKKyAgICAqLworICAgIHJlbW92ZUF0OiBmdW5jdGlvbiAoc3RhcnQsIGxlbikgeworICAg
ICAgaWYgKCdudW1iZXInID09PSB0eXBlb2Ygc3RhcnQpIHsKKyAgICAgICAgaWYgKHN0YXJ0IDwg
MCB8fCBzdGFydCA+PSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ2xlbmd0aCcp
KSB7CisgICAgICAgICAgdGhyb3cgbmV3IF9lbWJlck1ldGFsRXJyb3IuZGVmYXVsdChPVVRfT0Zf
UkFOR0VfRVhDRVBUSU9OKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGZhc3QgY2FzZQorICAg
ICAgICBpZiAobGVuID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICBsZW4gPSAxOworICAgICAg
ICB9CisKKyAgICAgICAgdGhpcy5yZXBsYWNlKHN0YXJ0LCBsZW4sIEVNUFRZKTsKKyAgICAgIH0K
KworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKworICAgIC8qKgorICAgICAgUHVzaCB0aGUg
b2JqZWN0IG9udG8gdGhlIGVuZCBvZiB0aGUgYXJyYXkuIFdvcmtzIGp1c3QgbGlrZSBgcHVzaCgp
YCBidXQgaXQKKyAgICAgIGlzIEtWTy1jb21wbGlhbnQuCisgICAgICAgYGBgamF2YXNjcmlwdAor
ICAgICAgdmFyIGNvbG9ycyA9IFsncmVkJywgJ2dyZWVuJ107CisgICAgICAgY29sb3JzLnB1c2hP
YmplY3QoJ2JsYWNrJyk7ICAgICAvLyBbJ3JlZCcsICdncmVlbicsICdibGFjayddCisgICAgICBj
b2xvcnMucHVzaE9iamVjdChbJ3llbGxvdyddKTsgIC8vIFsncmVkJywgJ2dyZWVuJywgWyd5ZWxs
b3cnXV0KKyAgICAgIGBgYAorICAgICAgIEBtZXRob2QgcHVzaE9iamVjdAorICAgICAgQHBhcmFt
IHsqfSBvYmogb2JqZWN0IHRvIHB1c2gKKyAgICAgIEByZXR1cm4gb2JqZWN0IHNhbWUgb2JqZWN0
IHBhc3NlZCBhcyBhIHBhcmFtCisgICAgICBAcHVibGljCisgICAgKi8KKyAgICBwdXNoT2JqZWN0
OiBmdW5jdGlvbiAob2JqKSB7CisgICAgICB0aGlzLmluc2VydEF0KF9lbWJlck1ldGFsUHJvcGVy
dHlfZ2V0LmdldCh0aGlzLCAnbGVuZ3RoJyksIG9iaik7CisgICAgICByZXR1cm4gb2JqOworICAg
IH0sCisKKyAgICAvKioKKyAgICAgIEFkZCB0aGUgb2JqZWN0cyBpbiB0aGUgcGFzc2VkIG51bWVy
YWJsZSB0byB0aGUgZW5kIG9mIHRoZSBhcnJheS4gRGVmZXJzCisgICAgICBub3RpZnlpbmcgb2Jz
ZXJ2ZXJzIG9mIHRoZSBjaGFuZ2UgdW50aWwgYWxsIG9iamVjdHMgYXJlIGFkZGVkLgorICAgICAg
IGBgYGphdmFzY3JpcHQKKyAgICAgIHZhciBjb2xvcnMgPSBbJ3JlZCddOworICAgICAgIGNvbG9y
cy5wdXNoT2JqZWN0cyhbJ3llbGxvdycsICdvcmFuZ2UnXSk7ICAvLyBbJ3JlZCcsICd5ZWxsb3cn
LCAnb3JhbmdlJ10KKyAgICAgIGBgYAorICAgICAgIEBtZXRob2QgcHVzaE9iamVjdHMKKyAgICAg
IEBwYXJhbSB7RW1iZXIuRW51bWVyYWJsZX0gb2JqZWN0cyB0aGUgb2JqZWN0cyB0byBhZGQKKyAg
ICAgIEByZXR1cm4ge0VtYmVyLkFycmF5fSByZWNlaXZlcgorICAgICAgQHB1YmxpYworICAgICov
CisgICAgcHVzaE9iamVjdHM6IGZ1bmN0aW9uIChvYmplY3RzKSB7CisgICAgICBpZiAoIShfZW1i
ZXJSdW50aW1lTWl4aW5zRW51bWVyYWJsZS5kZWZhdWx0LmRldGVjdChvYmplY3RzKSB8fCBBcnJh
eS5pc0FycmF5KG9iamVjdHMpKSkgeworICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdNdXN0
IHBhc3MgRW1iZXIuRW51bWVyYWJsZSB0byBFbWJlci5NdXRhYmxlQXJyYXkjcHVzaE9iamVjdHMn
KTsKKyAgICAgIH0KKyAgICAgIHRoaXMucmVwbGFjZShfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5n
ZXQodGhpcywgJ2xlbmd0aCcpLCAwLCBvYmplY3RzKTsKKyAgICAgIHJldHVybiB0aGlzOworICAg
IH0sCisKKyAgICAvKioKKyAgICAgIFBvcCBvYmplY3QgZnJvbSBhcnJheSBvciBuaWwgaWYgbm9u
ZSBhcmUgbGVmdC4gV29ya3MganVzdCBsaWtlIGBwb3AoKWAgYnV0CisgICAgICBpdCBpcyBLVk8t
Y29tcGxpYW50LgorICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgIHZhciBjb2xvcnMgPSBbJ3Jl
ZCcsICdncmVlbicsICdibHVlJ107CisgICAgICAgY29sb3JzLnBvcE9iamVjdCgpOyAgIC8vICdi
bHVlJworICAgICAgY29uc29sZS5sb2coY29sb3JzKTsgIC8vIFsncmVkJywgJ2dyZWVuJ10KKyAg
ICAgIGBgYAorICAgICAgIEBtZXRob2QgcG9wT2JqZWN0CisgICAgICBAcmV0dXJuIG9iamVjdAor
ICAgICAgQHB1YmxpYworICAgICovCisgICAgcG9wT2JqZWN0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICB2YXIgbGVuID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdsZW5ndGgnKTsK
KyAgICAgIGlmIChsZW4gPT09IDApIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICB9CisK
KyAgICAgIHZhciByZXQgPSBfZW1iZXJSdW50aW1lTWl4aW5zQXJyYXkub2JqZWN0QXQodGhpcywg
bGVuIC0gMSk7CisgICAgICB0aGlzLnJlbW92ZUF0KGxlbiAtIDEsIDEpOworICAgICAgcmV0dXJu
IHJldDsKKyAgICB9LAorCisgICAgLyoqCisgICAgICBTaGlmdCBhbiBvYmplY3QgZnJvbSBzdGFy
dCBvZiBhcnJheSBvciBuaWwgaWYgbm9uZSBhcmUgbGVmdC4gV29ya3MganVzdAorICAgICAgbGlr
ZSBgc2hpZnQoKWAgYnV0IGl0IGlzIEtWTy1jb21wbGlhbnQuCisgICAgICAgYGBgamF2YXNjcmlw
dAorICAgICAgdmFyIGNvbG9ycyA9IFsncmVkJywgJ2dyZWVuJywgJ2JsdWUnXTsKKyAgICAgICBj
b2xvcnMuc2hpZnRPYmplY3QoKTsgIC8vICdyZWQnCisgICAgICBjb25zb2xlLmxvZyhjb2xvcnMp
OyAgIC8vIFsnZ3JlZW4nLCAnYmx1ZSddCisgICAgICBgYGAKKyAgICAgICBAbWV0aG9kIHNoaWZ0
T2JqZWN0CisgICAgICBAcmV0dXJuIG9iamVjdAorICAgICAgQHB1YmxpYworICAgICovCisgICAg
c2hpZnRPYmplY3Q6IGZ1bmN0aW9uICgpIHsKKyAgICAgIGlmIChfZW1iZXJNZXRhbFByb3BlcnR5
X2dldC5nZXQodGhpcywgJ2xlbmd0aCcpID09PSAwKSB7CisgICAgICAgIHJldHVybiBudWxsOwor
ICAgICAgfQorCisgICAgICB2YXIgcmV0ID0gX2VtYmVyUnVudGltZU1peGluc0FycmF5Lm9iamVj
dEF0KHRoaXMsIDApOworICAgICAgdGhpcy5yZW1vdmVBdCgwKTsKKyAgICAgIHJldHVybiByZXQ7
CisgICAgfSwKKworICAgIC8qKgorICAgICAgVW5zaGlmdCBhbiBvYmplY3QgdG8gc3RhcnQgb2Yg
YXJyYXkuIFdvcmtzIGp1c3QgbGlrZSBgdW5zaGlmdCgpYCBidXQgaXQgaXMKKyAgICAgIEtWTy1j
b21wbGlhbnQuCisgICAgICAgYGBgamF2YXNjcmlwdAorICAgICAgdmFyIGNvbG9ycyA9IFsncmVk
J107CisgICAgICAgY29sb3JzLnVuc2hpZnRPYmplY3QoJ3llbGxvdycpOyAgICAvLyBbJ3llbGxv
dycsICdyZWQnXQorICAgICAgY29sb3JzLnVuc2hpZnRPYmplY3QoWydibGFjayddKTsgICAvLyBb
WydibGFjayddLCAneWVsbG93JywgJ3JlZCddCisgICAgICBgYGAKKyAgICAgICBAbWV0aG9kIHVu
c2hpZnRPYmplY3QKKyAgICAgIEBwYXJhbSB7Kn0gb2JqIG9iamVjdCB0byB1bnNoaWZ0CisgICAg
ICBAcmV0dXJuIG9iamVjdCBzYW1lIG9iamVjdCBwYXNzZWQgYXMgYSBwYXJhbQorICAgICAgQHB1
YmxpYworICAgICovCisgICAgdW5zaGlmdE9iamVjdDogZnVuY3Rpb24gKG9iaikgeworICAgICAg
dGhpcy5pbnNlcnRBdCgwLCBvYmopOworICAgICAgcmV0dXJuIG9iajsKKyAgICB9LAorCisgICAg
LyoqCisgICAgICBBZGRzIHRoZSBuYW1lZCBvYmplY3RzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhl
IGFycmF5LiBEZWZlcnMgbm90aWZ5aW5nCisgICAgICBvYnNlcnZlcnMgdW50aWwgYWxsIG9iamVj
dHMgaGF2ZSBiZWVuIGFkZGVkLgorICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgIHZhciBjb2xv
cnMgPSBbJ3JlZCddOworICAgICAgIGNvbG9ycy51bnNoaWZ0T2JqZWN0cyhbJ2JsYWNrJywgJ3do
aXRlJ10pOyAgIC8vIFsnYmxhY2snLCAnd2hpdGUnLCAncmVkJ10KKyAgICAgIGNvbG9ycy51bnNo
aWZ0T2JqZWN0cygneWVsbG93Jyk7IC8vIFR5cGUgRXJyb3I6ICd1bmRlZmluZWQnIGlzIG5vdCBh
IGZ1bmN0aW9uCisgICAgICBgYGAKKyAgICAgICBAbWV0aG9kIHVuc2hpZnRPYmplY3RzCisgICAg
ICBAcGFyYW0ge0VtYmVyLkVudW1lcmFibGV9IG9iamVjdHMgdGhlIG9iamVjdHMgdG8gYWRkCisg
ICAgICBAcmV0dXJuIHtFbWJlci5BcnJheX0gcmVjZWl2ZXIKKyAgICAgIEBwdWJsaWMKKyAgICAq
LworICAgIHVuc2hpZnRPYmplY3RzOiBmdW5jdGlvbiAob2JqZWN0cykgeworICAgICAgdGhpcy5y
ZXBsYWNlKDAsIDAsIG9iamVjdHMpOworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKworICAg
IC8qKgorICAgICAgUmV2ZXJzZSBvYmplY3RzIGluIHRoZSBhcnJheS4gV29ya3MganVzdCBsaWtl
IGByZXZlcnNlKClgIGJ1dCBpdCBpcworICAgICAgS1ZPLWNvbXBsaWFudC4KKyAgICAgICBAbWV0
aG9kIHJldmVyc2VPYmplY3RzCisgICAgICBAcmV0dXJuIHtFbWJlci5BcnJheX0gcmVjZWl2ZXIK
KyAgICAgICBAcHVibGljCisgICAgKi8KKyAgICByZXZlcnNlT2JqZWN0czogZnVuY3Rpb24gKCkg
eworICAgICAgdmFyIGxlbiA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnbGVu
Z3RoJyk7CisgICAgICBpZiAobGVuID09PSAwKSB7CisgICAgICAgIHJldHVybiB0aGlzOworICAg
ICAgfQorCisgICAgICB2YXIgb2JqZWN0cyA9IHRoaXMudG9BcnJheSgpLnJldmVyc2UoKTsKKyAg
ICAgIHRoaXMucmVwbGFjZSgwLCBsZW4sIG9iamVjdHMpOworICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgfSwKKworICAgIC8qKgorICAgICAgUmVwbGFjZSBhbGwgdGhlIHJlY2VpdmVyJ3MgY29udGVu
dCB3aXRoIGNvbnRlbnQgb2YgdGhlIGFyZ3VtZW50LgorICAgICAgSWYgYXJndW1lbnQgaXMgYW4g
ZW1wdHkgYXJyYXkgcmVjZWl2ZXIgd2lsbCBiZSBjbGVhcmVkLgorICAgICAgIGBgYGphdmFzY3Jp
cHQKKyAgICAgIHZhciBjb2xvcnMgPSBbJ3JlZCcsICdncmVlbicsICdibHVlJ107CisgICAgICAg
Y29sb3JzLnNldE9iamVjdHMoWydibGFjaycsICd3aGl0ZSddKTsgIC8vIFsnYmxhY2snLCAnd2hp
dGUnXQorICAgICAgY29sb3JzLnNldE9iamVjdHMoW10pOyAgICAgICAgICAgICAgICAgIC8vIFtd
CisgICAgICBgYGAKKyAgICAgICBAbWV0aG9kIHNldE9iamVjdHMKKyAgICAgIEBwYXJhbSB7RW1i
ZXIuQXJyYXl9IG9iamVjdHMgYXJyYXkgd2hvc2UgY29udGVudCB3aWxsIGJlIHVzZWQgZm9yIHJl
cGxhY2luZworICAgICAgICAgIHRoZSBjb250ZW50IG9mIHRoZSByZWNlaXZlcgorICAgICAgQHJl
dHVybiB7RW1iZXIuQXJyYXl9IHJlY2VpdmVyIHdpdGggdGhlIG5ldyBjb250ZW50CisgICAgICBA
cHVibGljCisgICAgKi8KKyAgICBzZXRPYmplY3RzOiBmdW5jdGlvbiAob2JqZWN0cykgeworICAg
ICAgaWYgKG9iamVjdHMubGVuZ3RoID09PSAwKSB7CisgICAgICAgIHJldHVybiB0aGlzLmNsZWFy
KCk7CisgICAgICB9CisKKyAgICAgIHZhciBsZW4gPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5n
ZXQodGhpcywgJ2xlbmd0aCcpOworICAgICAgdGhpcy5yZXBsYWNlKDAsIGxlbiwgb2JqZWN0cyk7
CisgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgLy8gLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorICAgIC8vIElNUExFTUVO
VCBFbWJlci5NdXRhYmxlRW51bWVyYWJsZQorICAgIC8vCisKKyAgICAvKioKKyAgICAgIFJlbW92
ZSBhbGwgb2NjdXJyZW5jZXMgb2YgYW4gb2JqZWN0IGluIHRoZSBhcnJheS4KKyAgICAgICBgYGBq
YXZhc2NyaXB0CisgICAgICB2YXIgY2l0aWVzID0gWydDaGljYWdvJywgJ0JlcmxpbicsICdMaW1h
JywgJ0NoaWNhZ28nXTsKKyAgICAgICBjaXRpZXMucmVtb3ZlT2JqZWN0KCdDaGljYWdvJyk7ICAv
LyBbJ0JlcmxpbicsICdMaW1hJ10KKyAgICAgIGNpdGllcy5yZW1vdmVPYmplY3QoJ0xpbWEnKTsg
ICAgIC8vIFsnQmVybGluJ10KKyAgICAgIGNpdGllcy5yZW1vdmVPYmplY3QoJ1Rva3lvJykgICAg
IC8vIFsnQmVybGluJ10KKyAgICAgIGBgYAorICAgICAgIEBtZXRob2QgcmVtb3ZlT2JqZWN0Cisg
ICAgICBAcGFyYW0geyp9IG9iaiBvYmplY3QgdG8gcmVtb3ZlCisgICAgICBAcmV0dXJuIHtFbWJl
ci5BcnJheX0gcmVjZWl2ZXIKKyAgICAgIEBwdWJsaWMKKyAgICAqLworICAgIHJlbW92ZU9iamVj
dDogZnVuY3Rpb24gKG9iaikgeworICAgICAgdmFyIGxvYyA9IF9lbWJlck1ldGFsUHJvcGVydHlf
Z2V0LmdldCh0aGlzLCAnbGVuZ3RoJykgfHwgMDsKKyAgICAgIHdoaWxlICgtLWxvYyA+PSAwKSB7
CisgICAgICAgIHZhciBjdXJPYmplY3QgPSBfZW1iZXJSdW50aW1lTWl4aW5zQXJyYXkub2JqZWN0
QXQodGhpcywgbG9jKTsKKworICAgICAgICBpZiAoY3VyT2JqZWN0ID09PSBvYmopIHsKKyAgICAg
ICAgICB0aGlzLnJlbW92ZUF0KGxvYyk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHJldHVy
biB0aGlzOworICAgIH0sCisKKyAgICAvKioKKyAgICAgIFB1c2ggdGhlIG9iamVjdCBvbnRvIHRo
ZSBlbmQgb2YgdGhlIGFycmF5IGlmIGl0IGlzIG5vdCBhbHJlYWR5CisgICAgICBwcmVzZW50IGlu
IHRoZSBhcnJheS4KKyAgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICB2YXIgY2l0aWVzID0gWydD
aGljYWdvJywgJ0JlcmxpbiddOworICAgICAgIGNpdGllcy5hZGRPYmplY3QoJ0xpbWEnKTsgICAg
Ly8gWydDaGljYWdvJywgJ0JlcmxpbicsICdMaW1hJ10KKyAgICAgIGNpdGllcy5hZGRPYmplY3Qo
J0JlcmxpbicpOyAgLy8gWydDaGljYWdvJywgJ0JlcmxpbicsICdMaW1hJ10KKyAgICAgIGBgYAor
ICAgICAgIEBtZXRob2QgYWRkT2JqZWN0CisgICAgICBAcGFyYW0geyp9IG9iaiBvYmplY3QgdG8g
YWRkLCBpZiBub3QgYWxyZWFkeSBwcmVzZW50CisgICAgICBAcmV0dXJuIHtFbWJlci5BcnJheX0g
cmVjZWl2ZXIKKyAgICAgIEBwdWJsaWMKKyAgICAqLworICAgIGFkZE9iamVjdDogZnVuY3Rpb24g
KG9iaikgeworICAgICAgaWYgKCF0aGlzLmNvbnRhaW5zKG9iaikpIHsKKyAgICAgICAgdGhpcy5w
dXNoT2JqZWN0KG9iaik7CisgICAgICB9CisKKyAgICAgIHJldHVybiB0aGlzOworICAgIH0KKyAg
fSk7Cit9KTsKK2VuaWZlZCgnZW1iZXItcnVudGltZS9taXhpbnMvbXV0YWJsZV9lbnVtZXJhYmxl
JywgWydleHBvcnRzJywgJ2VtYmVyLXJ1bnRpbWUvbWl4aW5zL2VudW1lcmFibGUnLCAnZW1iZXIt
bWV0YWwvbWl4aW4nLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfZXZlbnRzJ10sIGZ1bmN0aW9uIChl
eHBvcnRzLCBfZW1iZXJSdW50aW1lTWl4aW5zRW51bWVyYWJsZSwgX2VtYmVyTWV0YWxNaXhpbiwg
X2VtYmVyTWV0YWxQcm9wZXJ0eV9ldmVudHMpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIC8qKgor
ICBAbW9kdWxlIGVtYmVyCisgIEBzdWJtb2R1bGUgZW1iZXItcnVudGltZQorICAqLworCisgIC8q
KgorICAgIFRoaXMgbWl4aW4gZGVmaW5lcyB0aGUgQVBJIGZvciBtb2RpZnlpbmcgZ2VuZXJpYyBl
bnVtZXJhYmxlcy4gVGhlc2UgbWV0aG9kcworICAgIGNhbiBiZSBhcHBsaWVkIHRvIGFuIG9iamVj
dCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaXMgb3JkZXJlZCBvcgorICAgIHVub3JkZXJlZC4K
KyAgCisgICAgTm90ZSB0aGF0IGFuIEVudW1lcmFibGUgY2FuIGNoYW5nZSBldmVuIGlmIGl0IGRv
ZXMgbm90IGltcGxlbWVudCB0aGlzIG1peGluLgorICAgIEZvciBleGFtcGxlLCBhIE1hcHBlZEVu
dW1lcmFibGUgY2Fubm90IGJlIGRpcmVjdGx5IG1vZGlmaWVkIGJ1dCBpZiBpdHMKKyAgICB1bmRl
cmx5aW5nIGVudW1lcmFibGUgY2hhbmdlcywgaXQgd2lsbCBjaGFuZ2UgYWxzby4KKyAgCisgICAg
IyMgQWRkaW5nIE9iamVjdHMKKyAgCisgICAgVG8gYWRkIGFuIG9iamVjdCB0byBhbiBlbnVtZXJh
YmxlLCB1c2UgdGhlIGBhZGRPYmplY3QoKWAgbWV0aG9kLiBUaGlzCisgICAgbWV0aG9kIHdpbGwg
b25seSBhZGQgdGhlIG9iamVjdCB0byB0aGUgZW51bWVyYWJsZSBpZiB0aGUgb2JqZWN0IGlzIG5v
dAorICAgIGFscmVhZHkgcHJlc2VudCBhbmQgaXMgb2YgYSB0eXBlIHN1cHBvcnRlZCBieSB0aGUg
ZW51bWVyYWJsZS4KKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIHNldC5hZGRPYmplY3QoY29u
dGFjdCk7CisgICAgYGBgCisgIAorICAgICMjIFJlbW92aW5nIE9iamVjdHMKKyAgCisgICAgVG8g
cmVtb3ZlIGFuIG9iamVjdCBmcm9tIGFuIGVudW1lcmFibGUsIHVzZSB0aGUgYHJlbW92ZU9iamVj
dCgpYCBtZXRob2QuIFRoaXMKKyAgICB3aWxsIG9ubHkgcmVtb3ZlIHRoZSBvYmplY3QgaWYgaXQg
aXMgcHJlc2VudCBpbiB0aGUgZW51bWVyYWJsZSwgb3RoZXJ3aXNlCisgICAgdGhpcyBtZXRob2Qg
aGFzIG5vIGVmZmVjdC4KKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIHNldC5yZW1vdmVPYmpl
Y3QoY29udGFjdCk7CisgICAgYGBgCisgIAorICAgICMjIEltcGxlbWVudGluZyBJbiBZb3VyIE93
biBDb2RlCisgIAorICAgIElmIHlvdSBhcmUgaW1wbGVtZW50aW5nIGFuIG9iamVjdCBhbmQgd2Fu
dCB0byBzdXBwb3J0IHRoaXMgQVBJLCBqdXN0IGluY2x1ZGUKKyAgICB0aGlzIG1peGluIGluIHlv
dXIgY2xhc3MgYW5kIGltcGxlbWVudCB0aGUgcmVxdWlyZWQgbWV0aG9kcy4gSW4geW91ciB1bml0
CisgICAgdGVzdHMsIGJlIHN1cmUgdG8gYXBwbHkgdGhlIEVtYmVyLk11dGFibGVFbnVtZXJhYmxl
VGVzdHMgdG8geW91ciBvYmplY3QuCisgIAorICAgIEBjbGFzcyBNdXRhYmxlRW51bWVyYWJsZQor
ICAgIEBuYW1lc3BhY2UgRW1iZXIKKyAgICBAdXNlcyBFbWJlci5FbnVtZXJhYmxlCisgICAgQHB1
YmxpYworICAqLworICBleHBvcnRzLmRlZmF1bHQgPSBfZW1iZXJNZXRhbE1peGluLk1peGluLmNy
ZWF0ZShfZW1iZXJSdW50aW1lTWl4aW5zRW51bWVyYWJsZS5kZWZhdWx0LCB7CisKKyAgICAvKioK
KyAgICAgIF9fUmVxdWlyZWQuX18gWW91IG11c3QgaW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvIGFw
cGx5IHRoaXMgbWl4aW4uCisgICAgICAgQXR0ZW1wdHMgdG8gYWRkIHRoZSBwYXNzZWQgb2JqZWN0
IHRvIHRoZSByZWNlaXZlciBpZiB0aGUgb2JqZWN0IGlzIG5vdAorICAgICAgYWxyZWFkeSBwcmVz
ZW50IGluIHRoZSBjb2xsZWN0aW9uLiBJZiB0aGUgb2JqZWN0IGlzIHByZXNlbnQsIHRoaXMgbWV0
aG9kCisgICAgICBoYXMgbm8gZWZmZWN0LgorICAgICAgIElmIHRoZSBwYXNzZWQgb2JqZWN0IGlz
IG9mIGEgdHlwZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSByZWNlaXZlciwKKyAgICAgIHRoZW4gdGhp
cyBtZXRob2Qgc2hvdWxkIHJhaXNlIGFuIGV4Y2VwdGlvbi4KKyAgICAgICBAbWV0aG9kIGFkZE9i
amVjdAorICAgICAgQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGFkZCB0byB0
aGUgZW51bWVyYWJsZS4KKyAgICAgIEByZXR1cm4ge09iamVjdH0gdGhlIHBhc3NlZCBvYmplY3QK
KyAgICAgIEBwdWJsaWMKKyAgICAqLworICAgIGFkZE9iamVjdDogbnVsbCwKKworICAgIC8qKgor
ICAgICAgQWRkcyBlYWNoIG9iamVjdCBpbiB0aGUgcGFzc2VkIGVudW1lcmFibGUgdG8gdGhlIHJl
Y2VpdmVyLgorICAgICAgIEBtZXRob2QgYWRkT2JqZWN0cworICAgICAgQHBhcmFtIHtFbWJlci5F
bnVtZXJhYmxlfSBvYmplY3RzIHRoZSBvYmplY3RzIHRvIGFkZC4KKyAgICAgIEByZXR1cm4ge09i
amVjdH0gcmVjZWl2ZXIKKyAgICAgIEBwdWJsaWMKKyAgICAqLworICAgIGFkZE9iamVjdHM6IGZ1
bmN0aW9uIChvYmplY3RzKSB7CisgICAgICB2YXIgX3RoaXMgPSB0aGlzOworCisgICAgICBfZW1i
ZXJNZXRhbFByb3BlcnR5X2V2ZW50cy5iZWdpblByb3BlcnR5Q2hhbmdlcyh0aGlzKTsKKyAgICAg
IG9iamVjdHMuZm9yRWFjaChmdW5jdGlvbiAob2JqKSB7CisgICAgICAgIHJldHVybiBfdGhpcy5h
ZGRPYmplY3Qob2JqKTsKKyAgICAgIH0pOworICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9ldmVu
dHMuZW5kUHJvcGVydHlDaGFuZ2VzKHRoaXMpOworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwK
KworICAgIC8qKgorICAgICAgX19SZXF1aXJlZC5fXyBZb3UgbXVzdCBpbXBsZW1lbnQgdGhpcyBt
ZXRob2QgdG8gYXBwbHkgdGhpcyBtaXhpbi4KKyAgICAgICBBdHRlbXB0cyB0byByZW1vdmUgdGhl
IHBhc3NlZCBvYmplY3QgZnJvbSB0aGUgcmVjZWl2ZXIgY29sbGVjdGlvbiBpZiB0aGUKKyAgICAg
IG9iamVjdCBpcyBwcmVzZW50IGluIHRoZSBjb2xsZWN0aW9uLiBJZiB0aGUgb2JqZWN0IGlzIG5v
dCBwcmVzZW50LAorICAgICAgdGhpcyBtZXRob2QgaGFzIG5vIGVmZmVjdC4KKyAgICAgICBJZiB0
aGUgcGFzc2VkIG9iamVjdCBpcyBvZiBhIHR5cGUgbm90IHN1cHBvcnRlZCBieSB0aGUgcmVjZWl2
ZXIsCisgICAgICB0aGVuIHRoaXMgbWV0aG9kIHNob3VsZCByYWlzZSBhbiBleGNlcHRpb24uCisg
ICAgICAgQG1ldGhvZCByZW1vdmVPYmplY3QKKyAgICAgIEBwYXJhbSB7T2JqZWN0fSBvYmplY3Qg
VGhlIG9iamVjdCB0byByZW1vdmUgZnJvbSB0aGUgZW51bWVyYWJsZS4KKyAgICAgIEByZXR1cm4g
e09iamVjdH0gdGhlIHBhc3NlZCBvYmplY3QKKyAgICAgIEBwdWJsaWMKKyAgICAqLworICAgIHJl
bW92ZU9iamVjdDogbnVsbCwKKworICAgIC8qKgorICAgICAgUmVtb3ZlcyBlYWNoIG9iamVjdCBp
biB0aGUgcGFzc2VkIGVudW1lcmFibGUgZnJvbSB0aGUgcmVjZWl2ZXIuCisgICAgICAgQG1ldGhv
ZCByZW1vdmVPYmplY3RzCisgICAgICBAcGFyYW0ge0VtYmVyLkVudW1lcmFibGV9IG9iamVjdHMg
dGhlIG9iamVjdHMgdG8gcmVtb3ZlCisgICAgICBAcmV0dXJuIHtPYmplY3R9IHJlY2VpdmVyCisg
ICAgICBAcHVibGljCisgICAgKi8KKyAgICByZW1vdmVPYmplY3RzOiBmdW5jdGlvbiAob2JqZWN0
cykgeworICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9ldmVudHMuYmVnaW5Qcm9wZXJ0eUNoYW5n
ZXModGhpcyk7CisgICAgICBmb3IgKHZhciBpID0gb2JqZWN0cy5sZW5ndGggLSAxOyBpID49IDA7
IGktLSkgeworICAgICAgICB0aGlzLnJlbW92ZU9iamVjdChvYmplY3RzW2ldKTsKKyAgICAgIH0K
KyAgICAgIF9lbWJlck1ldGFsUHJvcGVydHlfZXZlbnRzLmVuZFByb3BlcnR5Q2hhbmdlcyh0aGlz
KTsKKyAgICAgIHJldHVybiB0aGlzOworICAgIH0KKyAgfSk7Cit9KTsKK2VuaWZlZCgnZW1iZXIt
cnVudGltZS9taXhpbnMvb2JzZXJ2YWJsZScsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9kZWJ1
ZycsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQnLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfc2V0
JywgJ2VtYmVyLW1ldGFsL2dldF9wcm9wZXJ0aWVzJywgJ2VtYmVyLW1ldGFsL3NldF9wcm9wZXJ0
aWVzJywgJ2VtYmVyLW1ldGFsL21peGluJywgJ2VtYmVyLW1ldGFsL2V2ZW50cycsICdlbWJlci1t
ZXRhbC9wcm9wZXJ0eV9ldmVudHMnLCAnZW1iZXItbWV0YWwvb2JzZXJ2ZXInLCAnZW1iZXItbWV0
YWwvY29tcHV0ZWQnLCAnZW1iZXItbWV0YWwvaXNfbm9uZSddLCBmdW5jdGlvbiAoZXhwb3J0cywg
X2VtYmVyTWV0YWxEZWJ1ZywgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQsIF9lbWJlck1ldGFsUHJv
cGVydHlfc2V0LCBfZW1iZXJNZXRhbEdldF9wcm9wZXJ0aWVzLCBfZW1iZXJNZXRhbFNldF9wcm9w
ZXJ0aWVzLCBfZW1iZXJNZXRhbE1peGluLCBfZW1iZXJNZXRhbEV2ZW50cywgX2VtYmVyTWV0YWxQ
cm9wZXJ0eV9ldmVudHMsIF9lbWJlck1ldGFsT2JzZXJ2ZXIsIF9lbWJlck1ldGFsQ29tcHV0ZWQs
IF9lbWJlck1ldGFsSXNfbm9uZSkgeworICAvKioKKyAgQG1vZHVsZSBlbWJlcgorICBAc3VibW9k
dWxlIGVtYmVyLXJ1bnRpbWUKKyAgKi8KKworICAndXNlIHN0cmljdCc7CisKKyAgLyoqCisgICAg
IyMgT3ZlcnZpZXcKKyAgCisgICAgVGhpcyBtaXhpbiBwcm92aWRlcyBwcm9wZXJ0aWVzIGFuZCBw
cm9wZXJ0eSBvYnNlcnZpbmcgZnVuY3Rpb25hbGl0eSwgY29yZQorICAgIGZlYXR1cmVzIG9mIHRo
ZSBFbWJlciBvYmplY3QgbW9kZWwuCisgIAorICAgIFByb3BlcnRpZXMgYW5kIG9ic2VydmVycyBh
bGxvdyBvbmUgb2JqZWN0IHRvIG9ic2VydmUgY2hhbmdlcyB0byBhCisgICAgcHJvcGVydHkgb24g
YW5vdGhlciBvYmplY3QuIFRoaXMgaXMgb25lIG9mIHRoZSBmdW5kYW1lbnRhbCB3YXlzIHRoYXQK
KyAgICBtb2RlbHMsIGNvbnRyb2xsZXJzIGFuZCB2aWV3cyBjb21tdW5pY2F0ZSB3aXRoIGVhY2gg
b3RoZXIgaW4gYW4gRW1iZXIKKyAgICBhcHBsaWNhdGlvbi4KKyAgCisgICAgQW55IG9iamVjdCB0
aGF0IGhhcyB0aGlzIG1peGluIGFwcGxpZWQgY2FuIGJlIHVzZWQgaW4gb2JzZXJ2ZXIKKyAgICBv
cGVyYXRpb25zLiBUaGF0IGluY2x1ZGVzIGBFbWJlci5PYmplY3RgIGFuZCBtb3N0IG9iamVjdHMg
eW91IHdpbGwKKyAgICBpbnRlcmFjdCB3aXRoIGFzIHlvdSB3cml0ZSB5b3VyIEVtYmVyIGFwcGxp
Y2F0aW9uLgorICAKKyAgICBOb3RlIHRoYXQgeW91IHdpbGwgbm90IGdlbmVyYWxseSBhcHBseSB0
aGlzIG1peGluIHRvIGNsYXNzZXMgeW91cnNlbGYsCisgICAgYnV0IHlvdSB3aWxsIHVzZSB0aGUg
ZmVhdHVyZXMgcHJvdmlkZWQgYnkgdGhpcyBtb2R1bGUgZnJlcXVlbnRseSwgc28gaXQKKyAgICBp
cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBob3cgdG8gdXNlIGl0LgorICAKKyAgICAjIyBVc2lu
ZyBgZ2V0KClgIGFuZCBgc2V0KClgCisgIAorICAgIEJlY2F1c2Ugb2YgRW1iZXIncyBzdXBwb3J0
IGZvciBiaW5kaW5ncyBhbmQgb2JzZXJ2ZXJzLCB5b3Ugd2lsbCBhbHdheXMKKyAgICBhY2Nlc3Mg
cHJvcGVydGllcyB1c2luZyB0aGUgZ2V0IG1ldGhvZCwgYW5kIHNldCBwcm9wZXJ0aWVzIHVzaW5n
IHRoZQorICAgIHNldCBtZXRob2QuIFRoaXMgYWxsb3dzIHRoZSBvYnNlcnZpbmcgb2JqZWN0cyB0
byBiZSBub3RpZmllZCBhbmQKKyAgICBjb21wdXRlZCBwcm9wZXJ0aWVzIHRvIGJlIGhhbmRsZWQg
cHJvcGVybHkuCisgIAorICAgIE1vcmUgZG9jdW1lbnRhdGlvbiBhYm91dCBgZ2V0YCBhbmQgYHNl
dGAgYXJlIGJlbG93LgorICAKKyAgICAjIyBPYnNlcnZpbmcgUHJvcGVydHkgQ2hhbmdlcworICAK
KyAgICBZb3UgdHlwaWNhbGx5IG9ic2VydmUgcHJvcGVydHkgY2hhbmdlcyBzaW1wbHkgYnkgdXNp
bmcgdGhlIGBFbWJlci5vYnNlcnZlcmAKKyAgICBmdW5jdGlvbiBpbiBjbGFzc2VzIHRoYXQgeW91
IHdyaXRlLgorICAKKyAgICBGb3IgZXhhbXBsZToKKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAg
IEVtYmVyLk9iamVjdC5leHRlbmQoeworICAgICAgdmFsdWVPYnNlcnZlcjogRW1iZXIub2JzZXJ2
ZXIoJ3ZhbHVlJywgZnVuY3Rpb24oc2VuZGVyLCBrZXksIHZhbHVlLCByZXYpIHsKKyAgICAgICAg
Ly8gRXhlY3V0ZXMgd2hlbmV2ZXIgdGhlICJ2YWx1ZSIgcHJvcGVydHkgY2hhbmdlcworICAgICAg
ICAvLyBTZWUgdGhlIGFkZE9ic2VydmVyIG1ldGhvZCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91
dCB0aGUgY2FsbGJhY2sgYXJndW1lbnRzCisgICAgICB9KQorICAgIH0pOworICAgIGBgYAorICAK
KyAgICBBbHRob3VnaCB0aGlzIGlzIHRoZSBtb3N0IGNvbW1vbiB3YXkgdG8gYWRkIGFuIG9ic2Vy
dmVyLCB0aGlzIGNhcGFiaWxpdHkKKyAgICBpcyBhY3R1YWxseSBidWlsdCBpbnRvIHRoZSBgRW1i
ZXIuT2JqZWN0YCBjbGFzcyBvbiB0b3Agb2YgdHdvIG1ldGhvZHMKKyAgICBkZWZpbmVkIGluIHRo
aXMgbWl4aW46IGBhZGRPYnNlcnZlcmAgYW5kIGByZW1vdmVPYnNlcnZlcmAuIFlvdSBjYW4gdXNl
CisgICAgdGhlc2UgdHdvIG1ldGhvZHMgdG8gYWRkIGFuZCByZW1vdmUgb2JzZXJ2ZXJzIHlvdXJz
ZWxmIGlmIHlvdSBuZWVkIHRvCisgICAgZG8gc28gYXQgcnVudGltZS4KKyAgCisgICAgVG8gYWRk
IGFuIG9ic2VydmVyIGZvciBhIHByb3BlcnR5LCBjYWxsOgorICAKKyAgICBgYGBqYXZhc2NyaXB0
CisgICAgb2JqZWN0LmFkZE9ic2VydmVyKCdwcm9wZXJ0eUtleScsIHRhcmdldE9iamVjdCwgdGFy
Z2V0QWN0aW9uKQorICAgIGBgYAorICAKKyAgICBUaGlzIHdpbGwgY2FsbCB0aGUgYHRhcmdldEFj
dGlvbmAgbWV0aG9kIG9uIHRoZSBgdGFyZ2V0T2JqZWN0YCB3aGVuZXZlcgorICAgIHRoZSB2YWx1
ZSBvZiB0aGUgYHByb3BlcnR5S2V5YCBjaGFuZ2VzLgorICAKKyAgICBOb3RlIHRoYXQgaWYgYHBy
b3BlcnR5S2V5YCBpcyBhIGNvbXB1dGVkIHByb3BlcnR5LCB0aGUgb2JzZXJ2ZXIgd2lsbCBiZQor
ICAgIGNhbGxlZCB3aGVuIGFueSBvZiB0aGUgcHJvcGVydHkgZGVwZW5kZW5jaWVzIGFyZSBjaGFu
Z2VkLCBldmVuIGlmIHRoZQorICAgIHJlc3VsdGluZyB2YWx1ZSBvZiB0aGUgY29tcHV0ZWQgcHJv
cGVydHkgaXMgdW5jaGFuZ2VkLiBUaGlzIGlzIG5lY2Vzc2FyeQorICAgIGJlY2F1c2UgY29tcHV0
ZWQgcHJvcGVydGllcyBhcmUgbm90IGNvbXB1dGVkIHVudGlsIGBnZXRgIGlzIGNhbGxlZC4KKyAg
CisgICAgQGNsYXNzIE9ic2VydmFibGUKKyAgICBAbmFtZXNwYWNlIEVtYmVyCisgICAgQHB1Ymxp
YworICAqLworICBleHBvcnRzLmRlZmF1bHQgPSBfZW1iZXJNZXRhbE1peGluLk1peGluLmNyZWF0
ZSh7CisKKyAgICAvKioKKyAgICAgIFJldHJpZXZlcyB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eSBm
cm9tIHRoZSBvYmplY3QuCisgICAgICAgVGhpcyBtZXRob2QgaXMgdXN1YWxseSBzaW1pbGFyIHRv
IHVzaW5nIGBvYmplY3Rba2V5TmFtZV1gIG9yIGBvYmplY3Qua2V5TmFtZWAsCisgICAgICBob3dl
dmVyIGl0IHN1cHBvcnRzIGJvdGggY29tcHV0ZWQgcHJvcGVydGllcyBhbmQgdGhlIHVua25vd25Q
cm9wZXJ0eQorICAgICAgaGFuZGxlci4KKyAgICAgICBCZWNhdXNlIGBnZXRgIHVuaWZpZXMgdGhl
IHN5bnRheCBmb3IgYWNjZXNzaW5nIGFsbCB0aGVzZSBraW5kcworICAgICAgb2YgcHJvcGVydGll
cywgaXQgY2FuIG1ha2UgbWFueSByZWZhY3RvcmluZ3MgZWFzaWVyLCBzdWNoIGFzIHJlcGxhY2lu
ZyBhCisgICAgICBzaW1wbGUgcHJvcGVydHkgd2l0aCBhIGNvbXB1dGVkIHByb3BlcnR5LCBvciB2
aWNlIHZlcnNhLgorICAgICAgICMjIyBDb21wdXRlZCBQcm9wZXJ0aWVzCisgICAgICAgQ29tcHV0
ZWQgcHJvcGVydGllcyBhcmUgbWV0aG9kcyBkZWZpbmVkIHdpdGggdGhlIGBwcm9wZXJ0eWAgbW9k
aWZpZXIKKyAgICAgIGRlY2xhcmVkIGF0IHRoZSBlbmQsIHN1Y2ggYXM6CisgICAgICAgYGBgamF2
YXNjcmlwdAorICAgICAgZnVsbE5hbWU6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhp
cy5nZXQoJ2ZpcnN0TmFtZScpICsgJyAnICsgdGhpcy5nZXQoJ2xhc3ROYW1lJyk7CisgICAgICB9
LnByb3BlcnR5KCdmaXJzdE5hbWUnLCAnbGFzdE5hbWUnKQorICAgICAgYGBgCisgICAgICAgV2hl
biB5b3UgY2FsbCBgZ2V0YCBvbiBhIGNvbXB1dGVkIHByb3BlcnR5LCB0aGUgZnVuY3Rpb24gd2ls
bCBiZQorICAgICAgY2FsbGVkIGFuZCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgcmV0dXJuZWQg
aW5zdGVhZCBvZiB0aGUgZnVuY3Rpb24KKyAgICAgIGl0c2VsZi4KKyAgICAgICAjIyMgVW5rbm93
biBQcm9wZXJ0aWVzCisgICAgICAgTGlrZXdpc2UsIGlmIHlvdSB0cnkgdG8gY2FsbCBgZ2V0YCBv
biBhIHByb3BlcnR5IHdob3NlIHZhbHVlIGlzCisgICAgICBgdW5kZWZpbmVkYCwgdGhlIGB1bmtu
b3duUHJvcGVydHkoKWAgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIG9uIHRoZSBvYmplY3QuCisgICAg
ICBJZiB0aGlzIG1ldGhvZCByZXR1cm5zIGFueSB2YWx1ZSBvdGhlciB0aGFuIGB1bmRlZmluZWRg
LCBpdCB3aWxsIGJlIHJldHVybmVkCisgICAgICBpbnN0ZWFkLiBUaGlzIGFsbG93cyB5b3UgdG8g
aW1wbGVtZW50ICJ2aXJ0dWFsIiBwcm9wZXJ0aWVzIHRoYXQgYXJlCisgICAgICBub3QgZGVmaW5l
ZCB1cGZyb250LgorICAgICAgIEBtZXRob2QgZ2V0CisgICAgICBAcGFyYW0ge1N0cmluZ30ga2V5
TmFtZSBUaGUgcHJvcGVydHkgdG8gcmV0cmlldmUKKyAgICAgIEByZXR1cm4ge09iamVjdH0gVGhl
IHByb3BlcnR5IHZhbHVlIG9yIHVuZGVmaW5lZC4KKyAgICAgIEBwdWJsaWMKKyAgICAqLworICAg
IGdldDogZnVuY3Rpb24gKGtleU5hbWUpIHsKKyAgICAgIHJldHVybiBfZW1iZXJNZXRhbFByb3Bl
cnR5X2dldC5nZXQodGhpcywga2V5TmFtZSk7CisgICAgfSwKKworICAgIC8qKgorICAgICAgVG8g
Z2V0IHRoZSB2YWx1ZXMgb2YgbXVsdGlwbGUgcHJvcGVydGllcyBhdCBvbmNlLCBjYWxsIGBnZXRQ
cm9wZXJ0aWVzYAorICAgICAgd2l0aCBhIGxpc3Qgb2Ygc3RyaW5ncyBvciBhbiBhcnJheToKKyAg
ICAgICBgYGBqYXZhc2NyaXB0CisgICAgICByZWNvcmQuZ2V0UHJvcGVydGllcygnZmlyc3ROYW1l
JywgJ2xhc3ROYW1lJywgJ3ppcENvZGUnKTsKKyAgICAgIC8vIHsgZmlyc3ROYW1lOiAnSm9obics
IGxhc3ROYW1lOiAnRG9lJywgemlwQ29kZTogJzEwMDExJyB9CisgICAgICBgYGAKKyAgICAgICBp
cyBlcXVpdmFsZW50IHRvOgorICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgIHJlY29yZC5nZXRQ
cm9wZXJ0aWVzKFsnZmlyc3ROYW1lJywgJ2xhc3ROYW1lJywgJ3ppcENvZGUnXSk7CisgICAgICAv
LyB7IGZpcnN0TmFtZTogJ0pvaG4nLCBsYXN0TmFtZTogJ0RvZScsIHppcENvZGU6ICcxMDAxMScg
fQorICAgICAgYGBgCisgICAgICAgQG1ldGhvZCBnZXRQcm9wZXJ0aWVzCisgICAgICBAcGFyYW0g
e1N0cmluZy4uLnxBcnJheX0gbGlzdCBvZiBrZXlzIHRvIGdldAorICAgICAgQHJldHVybiB7T2Jq
ZWN0fQorICAgICAgQHB1YmxpYworICAgICovCisgICAgZ2V0UHJvcGVydGllczogZnVuY3Rpb24g
KCkgeworICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJh
eShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHsKKyAgICAgICAgYXJnc1tf
a2V5XSA9IGFyZ3VtZW50c1tfa2V5XTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIF9lbWJlck1l
dGFsR2V0X3Byb3BlcnRpZXMuZGVmYXVsdC5hcHBseShudWxsLCBbdGhpc10uY29uY2F0KGFyZ3Mp
KTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICBTZXRzIHRoZSBwcm92aWRlZCBrZXkgb3IgcGF0
aCB0byB0aGUgdmFsdWUuCisgICAgICAgVGhpcyBtZXRob2QgaXMgZ2VuZXJhbGx5IHZlcnkgc2lt
aWxhciB0byBjYWxsaW5nIGBvYmplY3Rba2V5XSA9IHZhbHVlYCBvcgorICAgICAgYG9iamVjdC5r
ZXkgPSB2YWx1ZWAsIGV4Y2VwdCB0aGF0IGl0IHByb3ZpZGVzIHN1cHBvcnQgZm9yIGNvbXB1dGVk
CisgICAgICBwcm9wZXJ0aWVzLCB0aGUgYHNldFVua25vd25Qcm9wZXJ0eSgpYCBtZXRob2QgYW5k
IHByb3BlcnR5IG9ic2VydmVycy4KKyAgICAgICAjIyMgQ29tcHV0ZWQgUHJvcGVydGllcworICAg
ICAgIElmIHlvdSB0cnkgdG8gc2V0IGEgdmFsdWUgb24gYSBrZXkgdGhhdCBoYXMgYSBjb21wdXRl
ZCBwcm9wZXJ0eSBoYW5kbGVyCisgICAgICBkZWZpbmVkIChzZWUgdGhlIGBnZXQoKWAgbWV0aG9k
IGZvciBhbiBleGFtcGxlKSwgdGhlbiBgc2V0KClgIHdpbGwgY2FsbAorICAgICAgdGhhdCBtZXRo
b2QsIHBhc3NpbmcgYm90aCB0aGUgdmFsdWUgYW5kIGtleSBpbnN0ZWFkIG9mIHNpbXBseSBjaGFu
Z2luZworICAgICAgdGhlIHZhbHVlIGl0c2VsZi4gVGhpcyBpcyB1c2VmdWwgZm9yIHRob3NlIHRp
bWVzIHdoZW4geW91IG5lZWQgdG8KKyAgICAgIGltcGxlbWVudCBhIHByb3BlcnR5IHRoYXQgaXMg
Y29tcG9zZWQgb2Ygb25lIG9yIG1vcmUgbWVtYmVyCisgICAgICBwcm9wZXJ0aWVzLgorICAgICAg
ICMjIyBVbmtub3duIFByb3BlcnRpZXMKKyAgICAgICBJZiB5b3UgdHJ5IHRvIHNldCBhIHZhbHVl
IG9uIGEga2V5IHRoYXQgaXMgdW5kZWZpbmVkIGluIHRoZSB0YXJnZXQKKyAgICAgIG9iamVjdCwg
dGhlbiB0aGUgYHNldFVua25vd25Qcm9wZXJ0eSgpYCBoYW5kbGVyIHdpbGwgYmUgY2FsbGVkIGlu
c3RlYWQuIFRoaXMKKyAgICAgIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eSB0byBpbXBsZW1lbnQg
Y29tcGxleCAidmlydHVhbCIgcHJvcGVydGllcyB0aGF0CisgICAgICBhcmUgbm90IHByZWRlZmlu
ZWQgb24gdGhlIG9iamVjdC4gSWYgYHNldFVua25vd25Qcm9wZXJ0eSgpYCByZXR1cm5zCisgICAg
ICB1bmRlZmluZWQsIHRoZW4gYHNldCgpYCB3aWxsIHNpbXBseSBzZXQgdGhlIHZhbHVlIG9uIHRo
ZSBvYmplY3QuCisgICAgICAgIyMjIFByb3BlcnR5IE9ic2VydmVycworICAgICAgIEluIGFkZGl0
aW9uIHRvIGNoYW5naW5nIHRoZSBwcm9wZXJ0eSwgYHNldCgpYCB3aWxsIGFsc28gcmVnaXN0ZXIg
YSBwcm9wZXJ0eQorICAgICAgY2hhbmdlIHdpdGggdGhlIG9iamVjdC4gVW5sZXNzIHlvdSBoYXZl
IHBsYWNlZCB0aGlzIGNhbGwgaW5zaWRlIG9mIGEKKyAgICAgIGBiZWdpblByb3BlcnR5Q2hhbmdl
cygpYCBhbmQgYGVuZFByb3BlcnR5Q2hhbmdlcygpLGAgYW55ICJsb2NhbCIgb2JzZXJ2ZXJzCisg
ICAgICAoaS5lLiBvYnNlcnZlciBtZXRob2RzIGRlY2xhcmVkIG9uIHRoZSBzYW1lIG9iamVjdCks
IHdpbGwgYmUgY2FsbGVkCisgICAgICBpbW1lZGlhdGVseS4gQW55ICJyZW1vdGUiIG9ic2VydmVy
cyAoaS5lLiBvYnNlcnZlciBtZXRob2RzIGRlY2xhcmVkIG9uCisgICAgICBhbm90aGVyIG9iamVj
dCkgd2lsbCBiZSBwbGFjZWQgaW4gYSBxdWV1ZSBhbmQgY2FsbGVkIGF0IGEgbGF0ZXIgdGltZSBp
biBhCisgICAgICBjb2FsZXNjZWQgbWFubmVyLgorICAgICAgIEBtZXRob2Qgc2V0CisgICAgICBA
cGFyYW0ge1N0cmluZ30ga2V5TmFtZSBUaGUgcHJvcGVydHkgdG8gc2V0CisgICAgICBAcGFyYW0g
e09iamVjdH0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldCBvciBgbnVsbGAuCisgICAgICBAcmV0dXJu
IHtPYmplY3R9IFRoZSBwYXNzZWQgdmFsdWUKKyAgICAgIEBwdWJsaWMKKyAgICAqLworICAgIHNl
dDogZnVuY3Rpb24gKGtleU5hbWUsIHZhbHVlKSB7CisgICAgICByZXR1cm4gX2VtYmVyTWV0YWxQ
cm9wZXJ0eV9zZXQuc2V0KHRoaXMsIGtleU5hbWUsIHZhbHVlKTsKKyAgICB9LAorCisgICAgLyoq
CisgICAgICBTZXRzIGEgbGlzdCBvZiBwcm9wZXJ0aWVzIGF0IG9uY2UuIFRoZXNlIHByb3BlcnRp
ZXMgYXJlIHNldCBpbnNpZGUKKyAgICAgIGEgc2luZ2xlIGBiZWdpblByb3BlcnR5Q2hhbmdlc2Ag
YW5kIGBlbmRQcm9wZXJ0eUNoYW5nZXNgIGJhdGNoLCBzbworICAgICAgb2JzZXJ2ZXJzIHdpbGwg
YmUgYnVmZmVyZWQuCisgICAgICAgYGBgamF2YXNjcmlwdAorICAgICAgcmVjb3JkLnNldFByb3Bl
cnRpZXMoeyBmaXJzdE5hbWU6ICdDaGFybGVzJywgbGFzdE5hbWU6ICdKb2xsZXknIH0pOworICAg
ICAgYGBgCisgICAgICAgQG1ldGhvZCBzZXRQcm9wZXJ0aWVzCisgICAgICBAcGFyYW0ge09iamVj
dH0gaGFzaCB0aGUgaGFzaCBvZiBrZXlzIGFuZCB2YWx1ZXMgdG8gc2V0CisgICAgICBAcmV0dXJu
IHtPYmplY3R9IFRoZSBwYXNzZWQgaW4gaGFzaAorICAgICAgQHB1YmxpYworICAgICovCisgICAg
c2V0UHJvcGVydGllczogZnVuY3Rpb24gKGhhc2gpIHsKKyAgICAgIHJldHVybiBfZW1iZXJNZXRh
bFNldF9wcm9wZXJ0aWVzLmRlZmF1bHQodGhpcywgaGFzaCk7CisgICAgfSwKKworICAgIC8qKgor
ICAgICAgQmVnaW5zIGEgZ3JvdXBpbmcgb2YgcHJvcGVydHkgY2hhbmdlcy4KKyAgICAgICBZb3Ug
Y2FuIHVzZSB0aGlzIG1ldGhvZCB0byBncm91cCBwcm9wZXJ0eSBjaGFuZ2VzIHNvIHRoYXQgbm90
aWZpY2F0aW9ucworICAgICAgd2lsbCBub3QgYmUgc2VudCB1bnRpbCB0aGUgY2hhbmdlcyBhcmUg
ZmluaXNoZWQuIElmIHlvdSBwbGFuIHRvIG1ha2UgYQorICAgICAgbGFyZ2UgbnVtYmVyIG9mIGNo
YW5nZXMgdG8gYW4gb2JqZWN0IGF0IG9uZSB0aW1lLCB5b3Ugc2hvdWxkIGNhbGwgdGhpcworICAg
ICAgbWV0aG9kIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGNoYW5nZXMgdG8gYmVnaW4gZGVmZXJy
aW5nIGNoYW5nZQorICAgICAgbm90aWZpY2F0aW9ucy4gV2hlbiB5b3UgYXJlIGRvbmUgbWFraW5n
IGNoYW5nZXMsIGNhbGwKKyAgICAgIGBlbmRQcm9wZXJ0eUNoYW5nZXMoKWAgdG8gZGVsaXZlciB0
aGUgZGVmZXJyZWQgY2hhbmdlIG5vdGlmaWNhdGlvbnMgYW5kIGVuZAorICAgICAgZGVmZXJyaW5n
LgorICAgICAgIEBtZXRob2QgYmVnaW5Qcm9wZXJ0eUNoYW5nZXMKKyAgICAgIEByZXR1cm4ge0Vt
YmVyLk9ic2VydmFibGV9CisgICAgICBAcHJpdmF0ZQorICAgICovCisgICAgYmVnaW5Qcm9wZXJ0
eUNoYW5nZXM6IGZ1bmN0aW9uICgpIHsKKyAgICAgIF9lbWJlck1ldGFsUHJvcGVydHlfZXZlbnRz
LmJlZ2luUHJvcGVydHlDaGFuZ2VzKCk7CisgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisg
ICAgLyoqCisgICAgICBFbmRzIGEgZ3JvdXBpbmcgb2YgcHJvcGVydHkgY2hhbmdlcy4KKyAgICAg
ICBZb3UgY2FuIHVzZSB0aGlzIG1ldGhvZCB0byBncm91cCBwcm9wZXJ0eSBjaGFuZ2VzIHNvIHRo
YXQgbm90aWZpY2F0aW9ucworICAgICAgd2lsbCBub3QgYmUgc2VudCB1bnRpbCB0aGUgY2hhbmdl
cyBhcmUgZmluaXNoZWQuIElmIHlvdSBwbGFuIHRvIG1ha2UgYQorICAgICAgbGFyZ2UgbnVtYmVy
IG9mIGNoYW5nZXMgdG8gYW4gb2JqZWN0IGF0IG9uZSB0aW1lLCB5b3Ugc2hvdWxkIGNhbGwKKyAg
ICAgIGBiZWdpblByb3BlcnR5Q2hhbmdlcygpYCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjaGFu
Z2VzIHRvIGRlZmVyIGNoYW5nZQorICAgICAgbm90aWZpY2F0aW9ucy4gV2hlbiB5b3UgYXJlIGRv
bmUgbWFraW5nIGNoYW5nZXMsIGNhbGwgdGhpcyBtZXRob2QgdG8KKyAgICAgIGRlbGl2ZXIgdGhl
IGRlZmVycmVkIGNoYW5nZSBub3RpZmljYXRpb25zIGFuZCBlbmQgZGVmZXJyaW5nLgorICAgICAg
IEBtZXRob2QgZW5kUHJvcGVydHlDaGFuZ2VzCisgICAgICBAcmV0dXJuIHtFbWJlci5PYnNlcnZh
YmxlfQorICAgICAgQHByaXZhdGUKKyAgICAqLworICAgIGVuZFByb3BlcnR5Q2hhbmdlczogZnVu
Y3Rpb24gKCkgeworICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9ldmVudHMuZW5kUHJvcGVydHlD
aGFuZ2VzKCk7CisgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgLyoqCisgICAgICBO
b3RpZnkgdGhlIG9ic2VydmVyIHN5c3RlbSB0aGF0IGEgcHJvcGVydHkgaXMgYWJvdXQgdG8gY2hh
bmdlLgorICAgICAgIFNvbWV0aW1lcyB5b3UgbmVlZCB0byBjaGFuZ2UgYSB2YWx1ZSBkaXJlY3Rs
eSBvciBpbmRpcmVjdGx5IHdpdGhvdXQKKyAgICAgIGFjdHVhbGx5IGNhbGxpbmcgYGdldCgpYCBv
ciBgc2V0KClgIG9uIGl0LiBJbiB0aGlzIGNhc2UsIHlvdSBjYW4gdXNlIHRoaXMKKyAgICAgIG1l
dGhvZCBhbmQgYHByb3BlcnR5RGlkQ2hhbmdlKClgIGluc3RlYWQuIENhbGxpbmcgdGhlc2UgdHdv
IG1ldGhvZHMKKyAgICAgIHRvZ2V0aGVyIHdpbGwgbm90aWZ5IGFsbCBvYnNlcnZlcnMgdGhhdCB0
aGUgcHJvcGVydHkgaGFzIHBvdGVudGlhbGx5CisgICAgICBjaGFuZ2VkIHZhbHVlLgorICAgICAg
IE5vdGUgdGhhdCB5b3UgbXVzdCBhbHdheXMgY2FsbCBgcHJvcGVydHlXaWxsQ2hhbmdlYCBhbmQg
YHByb3BlcnR5RGlkQ2hhbmdlYAorICAgICAgYXMgYSBwYWlyLiBJZiB5b3UgZG8gbm90LCBpdCBt
YXkgZ2V0IHRoZSBwcm9wZXJ0eSBjaGFuZ2UgZ3JvdXBzIG91dCBvZgorICAgICAgb3JkZXIgYW5k
IGNhdXNlIG5vdGlmaWNhdGlvbnMgdG8gYmUgZGVsaXZlcmVkIG1vcmUgb2Z0ZW4gdGhhbiB5b3Ug
d291bGQKKyAgICAgIGxpa2UuCisgICAgICAgQG1ldGhvZCBwcm9wZXJ0eVdpbGxDaGFuZ2UKKyAg
ICAgIEBwYXJhbSB7U3RyaW5nfSBrZXlOYW1lIFRoZSBwcm9wZXJ0eSBrZXkgdGhhdCBpcyBhYm91
dCB0byBjaGFuZ2UuCisgICAgICBAcmV0dXJuIHtFbWJlci5PYnNlcnZhYmxlfQorICAgICAgQHBy
aXZhdGUKKyAgICAqLworICAgIHByb3BlcnR5V2lsbENoYW5nZTogZnVuY3Rpb24gKGtleU5hbWUp
IHsKKyAgICAgIF9lbWJlck1ldGFsUHJvcGVydHlfZXZlbnRzLnByb3BlcnR5V2lsbENoYW5nZSh0
aGlzLCBrZXlOYW1lKTsKKyAgICAgIHJldHVybiB0aGlzOworICAgIH0sCisKKyAgICAvKioKKyAg
ICAgIE5vdGlmeSB0aGUgb2JzZXJ2ZXIgc3lzdGVtIHRoYXQgYSBwcm9wZXJ0eSBoYXMganVzdCBj
aGFuZ2VkLgorICAgICAgIFNvbWV0aW1lcyB5b3UgbmVlZCB0byBjaGFuZ2UgYSB2YWx1ZSBkaXJl
Y3RseSBvciBpbmRpcmVjdGx5IHdpdGhvdXQKKyAgICAgIGFjdHVhbGx5IGNhbGxpbmcgYGdldCgp
YCBvciBgc2V0KClgIG9uIGl0LiBJbiB0aGlzIGNhc2UsIHlvdSBjYW4gdXNlIHRoaXMKKyAgICAg
IG1ldGhvZCBhbmQgYHByb3BlcnR5V2lsbENoYW5nZSgpYCBpbnN0ZWFkLiBDYWxsaW5nIHRoZXNl
IHR3byBtZXRob2RzCisgICAgICB0b2dldGhlciB3aWxsIG5vdGlmeSBhbGwgb2JzZXJ2ZXJzIHRo
YXQgdGhlIHByb3BlcnR5IGhhcyBwb3RlbnRpYWxseQorICAgICAgY2hhbmdlZCB2YWx1ZS4KKyAg
ICAgICBOb3RlIHRoYXQgeW91IG11c3QgYWx3YXlzIGNhbGwgYHByb3BlcnR5V2lsbENoYW5nZWAg
YW5kIGBwcm9wZXJ0eURpZENoYW5nZWAKKyAgICAgIGFzIGEgcGFpci4gSWYgeW91IGRvIG5vdCwg
aXQgbWF5IGdldCB0aGUgcHJvcGVydHkgY2hhbmdlIGdyb3VwcyBvdXQgb2YKKyAgICAgIG9yZGVy
IGFuZCBjYXVzZSBub3RpZmljYXRpb25zIHRvIGJlIGRlbGl2ZXJlZCBtb3JlIG9mdGVuIHRoYW4g
eW91IHdvdWxkCisgICAgICBsaWtlLgorICAgICAgIEBtZXRob2QgcHJvcGVydHlEaWRDaGFuZ2UK
KyAgICAgIEBwYXJhbSB7U3RyaW5nfSBrZXlOYW1lIFRoZSBwcm9wZXJ0eSBrZXkgdGhhdCBoYXMg
anVzdCBjaGFuZ2VkLgorICAgICAgQHJldHVybiB7RW1iZXIuT2JzZXJ2YWJsZX0KKyAgICAgIEBw
cml2YXRlCisgICAgKi8KKyAgICBwcm9wZXJ0eURpZENoYW5nZTogZnVuY3Rpb24gKGtleU5hbWUp
IHsKKyAgICAgIF9lbWJlck1ldGFsUHJvcGVydHlfZXZlbnRzLnByb3BlcnR5RGlkQ2hhbmdlKHRo
aXMsIGtleU5hbWUpOworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKworICAgIC8qKgorICAg
ICAgQ29udmVuaWVuY2UgbWV0aG9kIHRvIGNhbGwgYHByb3BlcnR5V2lsbENoYW5nZWAgYW5kIGBw
cm9wZXJ0eURpZENoYW5nZWAgaW4KKyAgICAgIHN1Y2Nlc3Npb24uCisgICAgICAgQG1ldGhvZCBu
b3RpZnlQcm9wZXJ0eUNoYW5nZQorICAgICAgQHBhcmFtIHtTdHJpbmd9IGtleU5hbWUgVGhlIHBy
b3BlcnR5IGtleSB0byBiZSBub3RpZmllZCBhYm91dC4KKyAgICAgIEByZXR1cm4ge0VtYmVyLk9i
c2VydmFibGV9CisgICAgICBAcHVibGljCisgICAgKi8KKyAgICBub3RpZnlQcm9wZXJ0eUNoYW5n
ZTogZnVuY3Rpb24gKGtleU5hbWUpIHsKKyAgICAgIHRoaXMucHJvcGVydHlXaWxsQ2hhbmdlKGtl
eU5hbWUpOworICAgICAgdGhpcy5wcm9wZXJ0eURpZENoYW5nZShrZXlOYW1lKTsKKyAgICAgIHJl
dHVybiB0aGlzOworICAgIH0sCisKKyAgICAvKioKKyAgICAgIEFkZHMgYW4gb2JzZXJ2ZXIgb24g
YSBwcm9wZXJ0eS4KKyAgICAgICBUaGlzIGlzIHRoZSBjb3JlIG1ldGhvZCB1c2VkIHRvIHJlZ2lz
dGVyIGFuIG9ic2VydmVyIGZvciBhIHByb3BlcnR5LgorICAgICAgIE9uY2UgeW91IGNhbGwgdGhp
cyBtZXRob2QsIGFueSB0aW1lIHRoZSBrZXkncyB2YWx1ZSBpcyBzZXQsIHlvdXIgb2JzZXJ2ZXIK
KyAgICAgIHdpbGwgYmUgbm90aWZpZWQuIE5vdGUgdGhhdCB0aGUgb2JzZXJ2ZXJzIGFyZSB0cmln
Z2VyZWQgYW55IHRpbWUgdGhlCisgICAgICB2YWx1ZSBpcyBzZXQsIHJlZ2FyZGxlc3Mgb2Ygd2hl
dGhlciBpdCBoYXMgYWN0dWFsbHkgY2hhbmdlZC4gWW91cgorICAgICAgb2JzZXJ2ZXIgc2hvdWxk
IGJlIHByZXBhcmVkIHRvIGhhbmRsZSB0aGF0LgorICAgICAgIFlvdSBjYW4gYWxzbyBwYXNzIGFu
IG9wdGlvbmFsIGNvbnRleHQgcGFyYW1ldGVyIHRvIHRoaXMgbWV0aG9kLiBUaGUKKyAgICAgIGNv
bnRleHQgd2lsbCBiZSBwYXNzZWQgdG8geW91ciBvYnNlcnZlciBtZXRob2Qgd2hlbmV2ZXIgaXQg
aXMgdHJpZ2dlcmVkLgorICAgICAgTm90ZSB0aGF0IGlmIHlvdSBhZGQgdGhlIHNhbWUgdGFyZ2V0
L21ldGhvZCBwYWlyIG9uIGEga2V5IG11bHRpcGxlIHRpbWVzCisgICAgICB3aXRoIGRpZmZlcmVu
dCBjb250ZXh0IHBhcmFtZXRlcnMsIHlvdXIgb2JzZXJ2ZXIgd2lsbCBvbmx5IGJlIGNhbGxlZCBv
bmNlCisgICAgICB3aXRoIHRoZSBsYXN0IGNvbnRleHQgeW91IHBhc3NlZC4KKyAgICAgICAjIyMg
T2JzZXJ2ZXIgTWV0aG9kcworICAgICAgIE9ic2VydmVyIG1ldGhvZHMgeW91IHBhc3Mgc2hvdWxk
IGdlbmVyYWxseSBoYXZlIHRoZSBmb2xsb3dpbmcgc2lnbmF0dXJlIGlmCisgICAgICB5b3UgZG8g
bm90IHBhc3MgYSBgY29udGV4dGAgcGFyYW1ldGVyOgorICAgICAgIGBgYGphdmFzY3JpcHQKKyAg
ICAgIGZvb0RpZENoYW5nZTogZnVuY3Rpb24oc2VuZGVyLCBrZXksIHZhbHVlLCByZXYpIHsgfTsK
KyAgICAgIGBgYAorICAgICAgIFRoZSBzZW5kZXIgaXMgdGhlIG9iamVjdCB0aGF0IGNoYW5nZWQu
IFRoZSBrZXkgaXMgdGhlIHByb3BlcnR5IHRoYXQKKyAgICAgIGNoYW5nZXMuIFRoZSB2YWx1ZSBw
cm9wZXJ0eSBpcyBjdXJyZW50bHkgcmVzZXJ2ZWQgYW5kIHVudXNlZC4gVGhlIHJldgorICAgICAg
aXMgdGhlIGxhc3QgcHJvcGVydHkgcmV2aXNpb24gb2YgdGhlIG9iamVjdCB3aGVuIGl0IGNoYW5n
ZWQsIHdoaWNoIHlvdSBjYW4KKyAgICAgIHVzZSB0byBkZXRlY3QgaWYgdGhlIGtleSB2YWx1ZSBo
YXMgcmVhbGx5IGNoYW5nZWQgb3Igbm90LgorICAgICAgIElmIHlvdSBwYXNzIGEgYGNvbnRleHRg
IHBhcmFtZXRlciwgdGhlIGNvbnRleHQgd2lsbCBiZSBwYXNzZWQgYmVmb3JlIHRoZQorICAgICAg
cmV2aXNpb24gbGlrZSBzbzoKKyAgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICBmb29EaWRDaGFu
Z2U6IGZ1bmN0aW9uKHNlbmRlciwga2V5LCB2YWx1ZSwgY29udGV4dCwgcmV2KSB7IH07CisgICAg
ICBgYGAKKyAgICAgICBVc3VhbGx5IHlvdSB3aWxsIG5vdCBuZWVkIHRoZSB2YWx1ZSwgY29udGV4
dCBvciByZXZpc2lvbiBwYXJhbWV0ZXJzIGF0CisgICAgICB0aGUgZW5kLiBJbiB0aGlzIGNhc2Us
IGl0IGlzIGNvbW1vbiB0byB3cml0ZSBvYnNlcnZlciBtZXRob2RzIHRoYXQgdGFrZQorICAgICAg
b25seSBhIHNlbmRlciBhbmQga2V5IHZhbHVlIGFzIHBhcmFtZXRlcnMgb3IsIGlmIHlvdSBhcmVu
J3QgaW50ZXJlc3RlZCBpbgorICAgICAgYW55IG9mIHRoZXNlIHZhbHVlcywgdG8gd3JpdGUgYW4g
b2JzZXJ2ZXIgdGhhdCBoYXMgbm8gcGFyYW1ldGVycyBhdCBhbGwuCisgICAgICAgQG1ldGhvZCBh
ZGRPYnNlcnZlcgorICAgICAgQHBhcmFtIHtTdHJpbmd9IGtleSBUaGUga2V5IHRvIG9ic2VydmVy
CisgICAgICBAcGFyYW0ge09iamVjdH0gdGFyZ2V0IFRoZSB0YXJnZXQgb2JqZWN0IHRvIGludm9r
ZQorICAgICAgQHBhcmFtIHtTdHJpbmd8RnVuY3Rpb259IG1ldGhvZCBUaGUgbWV0aG9kIHRvIGlu
dm9rZS4KKyAgICAgIEBwdWJsaWMKKyAgICAqLworICAgIGFkZE9ic2VydmVyOiBmdW5jdGlvbiAo
a2V5LCB0YXJnZXQsIG1ldGhvZCkgeworICAgICAgX2VtYmVyTWV0YWxPYnNlcnZlci5hZGRPYnNl
cnZlcih0aGlzLCBrZXksIHRhcmdldCwgbWV0aG9kKTsKKyAgICB9LAorCisgICAgLyoqCisgICAg
ICBSZW1vdmUgYW4gb2JzZXJ2ZXIgeW91IGhhdmUgcHJldmlvdXNseSByZWdpc3RlcmVkIG9uIHRo
aXMgb2JqZWN0LiBQYXNzCisgICAgICB0aGUgc2FtZSBrZXksIHRhcmdldCwgYW5kIG1ldGhvZCB5
b3UgcGFzc2VkIHRvIGBhZGRPYnNlcnZlcigpYCBhbmQgeW91cgorICAgICAgdGFyZ2V0IHdpbGwg
bm8gbG9uZ2VyIHJlY2VpdmUgbm90aWZpY2F0aW9ucy4KKyAgICAgICBAbWV0aG9kIHJlbW92ZU9i
c2VydmVyCisgICAgICBAcGFyYW0ge1N0cmluZ30ga2V5IFRoZSBrZXkgdG8gb2JzZXJ2ZXIKKyAg
ICAgIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXQgVGhlIHRhcmdldCBvYmplY3QgdG8gaW52b2tlCisg
ICAgICBAcGFyYW0ge1N0cmluZ3xGdW5jdGlvbn0gbWV0aG9kIFRoZSBtZXRob2QgdG8gaW52b2tl
LgorICAgICAgQHB1YmxpYworICAgICovCisgICAgcmVtb3ZlT2JzZXJ2ZXI6IGZ1bmN0aW9uIChr
ZXksIHRhcmdldCwgbWV0aG9kKSB7CisgICAgICBfZW1iZXJNZXRhbE9ic2VydmVyLnJlbW92ZU9i
c2VydmVyKHRoaXMsIGtleSwgdGFyZ2V0LCBtZXRob2QpOworICAgIH0sCisKKyAgICAvKioKKyAg
ICAgIFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3QgY3VycmVudGx5IGhhcyBvYnNlcnZlcnMg
cmVnaXN0ZXJlZCBmb3IgYQorICAgICAgcGFydGljdWxhciBrZXkuIFlvdSBjYW4gdXNlIHRoaXMg
bWV0aG9kIHRvIHBvdGVudGlhbGx5IGRlZmVyIHBlcmZvcm1pbmcKKyAgICAgIGFuIGV4cGVuc2l2
ZSBhY3Rpb24gdW50aWwgc29tZW9uZSBiZWdpbnMgb2JzZXJ2aW5nIGEgcGFydGljdWxhciBwcm9w
ZXJ0eQorICAgICAgb24gdGhlIG9iamVjdC4KKyAgICAgICBAbWV0aG9kIGhhc09ic2VydmVyRm9y
CisgICAgICBAcGFyYW0ge1N0cmluZ30ga2V5IEtleSB0byBjaGVjaworICAgICAgQHJldHVybiB7
Qm9vbGVhbn0KKyAgICAgIEBwcml2YXRlCisgICAgKi8KKyAgICBoYXNPYnNlcnZlckZvcjogZnVu
Y3Rpb24gKGtleSkgeworICAgICAgcmV0dXJuIF9lbWJlck1ldGFsRXZlbnRzLmhhc0xpc3RlbmVy
cyh0aGlzLCBrZXkgKyAnOmNoYW5nZScpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgIFJldHJp
ZXZlcyB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eSwgb3IgYSBkZWZhdWx0IHZhbHVlIGluIHRoZSBj
YXNlIHRoYXQgdGhlCisgICAgICBwcm9wZXJ0eSByZXR1cm5zIGB1bmRlZmluZWRgLgorICAgICAg
IGBgYGphdmFzY3JpcHQKKyAgICAgIHBlcnNvbi5nZXRXaXRoRGVmYXVsdCgnbGFzdE5hbWUnLCAn
RG9lJyk7CisgICAgICBgYGAKKyAgICAgICBAbWV0aG9kIGdldFdpdGhEZWZhdWx0CisgICAgICBA
cGFyYW0ge1N0cmluZ30ga2V5TmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gcmV0cmll
dmUKKyAgICAgIEBwYXJhbSB7T2JqZWN0fSBkZWZhdWx0VmFsdWUgVGhlIHZhbHVlIHRvIHJldHVy
biBpZiB0aGUgcHJvcGVydHkgdmFsdWUgaXMgdW5kZWZpbmVkCisgICAgICBAcmV0dXJuIHtPYmpl
Y3R9IFRoZSBwcm9wZXJ0eSB2YWx1ZSBvciB0aGUgZGVmYXVsdFZhbHVlLgorICAgICAgQHB1Ymxp
YworICAgICovCisgICAgZ2V0V2l0aERlZmF1bHQ6IGZ1bmN0aW9uIChrZXlOYW1lLCBkZWZhdWx0
VmFsdWUpIHsKKyAgICAgIHJldHVybiBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXRXaXRoRGVm
YXVsdCh0aGlzLCBrZXlOYW1lLCBkZWZhdWx0VmFsdWUpOworICAgIH0sCisKKyAgICAvKioKKyAg
ICAgIFNldCB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eSB0byB0aGUgY3VycmVudCB2YWx1ZSBwbHVz
IHNvbWUgYW1vdW50LgorICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgIHBlcnNvbi5pbmNyZW1l
bnRQcm9wZXJ0eSgnYWdlJyk7CisgICAgICB0ZWFtLmluY3JlbWVudFByb3BlcnR5KCdzY29yZScs
IDIpOworICAgICAgYGBgCisgICAgICAgQG1ldGhvZCBpbmNyZW1lbnRQcm9wZXJ0eQorICAgICAg
QHBhcmFtIHtTdHJpbmd9IGtleU5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGluY3Jl
bWVudAorICAgICAgQHBhcmFtIHtOdW1iZXJ9IGluY3JlbWVudCBUaGUgYW1vdW50IHRvIGluY3Jl
bWVudCBieS4gRGVmYXVsdHMgdG8gMQorICAgICAgQHJldHVybiB7TnVtYmVyfSBUaGUgbmV3IHBy
b3BlcnR5IHZhbHVlCisgICAgICBAcHVibGljCisgICAgKi8KKyAgICBpbmNyZW1lbnRQcm9wZXJ0
eTogZnVuY3Rpb24gKGtleU5hbWUsIGluY3JlbWVudCkgeworICAgICAgaWYgKF9lbWJlck1ldGFs
SXNfbm9uZS5kZWZhdWx0KGluY3JlbWVudCkpIHsKKyAgICAgICAgaW5jcmVtZW50ID0gMTsKKyAg
ICAgIH0KKyAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdNdXN0IHBhc3MgYSBudW1lcmlj
IHZhbHVlIHRvIGluY3JlbWVudFByb3BlcnR5JywgIWlzTmFOKHBhcnNlRmxvYXQoaW5jcmVtZW50
KSkgJiYgaXNGaW5pdGUoaW5jcmVtZW50KSk7CisgICAgICByZXR1cm4gX2VtYmVyTWV0YWxQcm9w
ZXJ0eV9zZXQuc2V0KHRoaXMsIGtleU5hbWUsIChwYXJzZUZsb2F0KF9lbWJlck1ldGFsUHJvcGVy
dHlfZ2V0LmdldCh0aGlzLCBrZXlOYW1lKSkgfHwgMCkgKyBpbmNyZW1lbnQpOworICAgIH0sCisK
KyAgICAvKioKKyAgICAgIFNldCB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eSB0byB0aGUgY3VycmVu
dCB2YWx1ZSBtaW51cyBzb21lIGFtb3VudC4KKyAgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICBw
bGF5ZXIuZGVjcmVtZW50UHJvcGVydHkoJ2xpdmVzJyk7CisgICAgICBvcmMuZGVjcmVtZW50UHJv
cGVydHkoJ2hlYWx0aCcsIDUpOworICAgICAgYGBgCisgICAgICAgQG1ldGhvZCBkZWNyZW1lbnRQ
cm9wZXJ0eQorICAgICAgQHBhcmFtIHtTdHJpbmd9IGtleU5hbWUgVGhlIG5hbWUgb2YgdGhlIHBy
b3BlcnR5IHRvIGRlY3JlbWVudAorICAgICAgQHBhcmFtIHtOdW1iZXJ9IGRlY3JlbWVudCBUaGUg
YW1vdW50IHRvIGRlY3JlbWVudCBieS4gRGVmYXVsdHMgdG8gMQorICAgICAgQHJldHVybiB7TnVt
YmVyfSBUaGUgbmV3IHByb3BlcnR5IHZhbHVlCisgICAgICBAcHVibGljCisgICAgKi8KKyAgICBk
ZWNyZW1lbnRQcm9wZXJ0eTogZnVuY3Rpb24gKGtleU5hbWUsIGRlY3JlbWVudCkgeworICAgICAg
aWYgKF9lbWJlck1ldGFsSXNfbm9uZS5kZWZhdWx0KGRlY3JlbWVudCkpIHsKKyAgICAgICAgZGVj
cmVtZW50ID0gMTsKKyAgICAgIH0KKyAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdNdXN0
IHBhc3MgYSBudW1lcmljIHZhbHVlIHRvIGRlY3JlbWVudFByb3BlcnR5JywgIWlzTmFOKHBhcnNl
RmxvYXQoZGVjcmVtZW50KSkgJiYgaXNGaW5pdGUoZGVjcmVtZW50KSk7CisgICAgICByZXR1cm4g
X2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQuc2V0KHRoaXMsIGtleU5hbWUsIChfZW1iZXJNZXRhbFBy
b3BlcnR5X2dldC5nZXQodGhpcywga2V5TmFtZSkgfHwgMCkgLSBkZWNyZW1lbnQpOworICAgIH0s
CisKKyAgICAvKioKKyAgICAgIFNldCB0aGUgdmFsdWUgb2YgYSBib29sZWFuIHByb3BlcnR5IHRv
IHRoZSBvcHBvc2l0ZSBvZiBpdHMKKyAgICAgIGN1cnJlbnQgdmFsdWUuCisgICAgICAgYGBgamF2
YXNjcmlwdAorICAgICAgc3RhcnNoaXAudG9nZ2xlUHJvcGVydHkoJ3dhcnBEcml2ZUVuZ2FnZWQn
KTsKKyAgICAgIGBgYAorICAgICAgIEBtZXRob2QgdG9nZ2xlUHJvcGVydHkKKyAgICAgIEBwYXJh
bSB7U3RyaW5nfSBrZXlOYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byB0b2dnbGUKKyAg
ICAgIEByZXR1cm4ge0Jvb2xlYW59IFRoZSBuZXcgcHJvcGVydHkgdmFsdWUKKyAgICAgIEBwdWJs
aWMKKyAgICAqLworICAgIHRvZ2dsZVByb3BlcnR5OiBmdW5jdGlvbiAoa2V5TmFtZSkgeworICAg
ICAgcmV0dXJuIF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LnNldCh0aGlzLCBrZXlOYW1lLCAhX2Vt
YmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsIGtleU5hbWUpKTsKKyAgICB9LAorCisgICAg
LyoqCisgICAgICBSZXR1cm5zIHRoZSBjYWNoZWQgdmFsdWUgb2YgYSBjb21wdXRlZCBwcm9wZXJ0
eSwgaWYgaXQgZXhpc3RzLgorICAgICAgVGhpcyBhbGxvd3MgeW91IHRvIGluc3BlY3QgdGhlIHZh
bHVlIG9mIGEgY29tcHV0ZWQgcHJvcGVydHkKKyAgICAgIHdpdGhvdXQgYWNjaWRlbnRhbGx5IGlu
dm9raW5nIGl0IGlmIGl0IGlzIGludGVuZGVkIHRvIGJlCisgICAgICBnZW5lcmF0ZWQgbGF6aWx5
LgorICAgICAgIEBtZXRob2QgY2FjaGVGb3IKKyAgICAgIEBwYXJhbSB7U3RyaW5nfSBrZXlOYW1l
CisgICAgICBAcmV0dXJuIHtPYmplY3R9IFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlIGNvbXB1dGVk
IHByb3BlcnR5LCBpZiBhbnkKKyAgICAgIEBwdWJsaWMKKyAgICAqLworICAgIGNhY2hlRm9yOiBm
dW5jdGlvbiAoa2V5TmFtZSkgeworICAgICAgcmV0dXJuIF9lbWJlck1ldGFsQ29tcHV0ZWQuY2Fj
aGVGb3IodGhpcywga2V5TmFtZSk7CisgICAgfSwKKworICAgIC8vIGludGVuZGVkIGZvciBkZWJ1
Z2dpbmcgcHVycG9zZXMKKyAgICBvYnNlcnZlcnNGb3JLZXk6IGZ1bmN0aW9uIChrZXlOYW1lKSB7
CisgICAgICByZXR1cm4gX2VtYmVyTWV0YWxPYnNlcnZlci5vYnNlcnZlcnNGb3IodGhpcywga2V5
TmFtZSk7CisgICAgfQorICB9KTsKK30pOworZW5pZmVkKCdlbWJlci1ydW50aW1lL21peGlucy9w
cm9taXNlX3Byb3h5JywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCcsICdl
bWJlci1tZXRhbC9zZXRfcHJvcGVydGllcycsICdlbWJlci1tZXRhbC9jb21wdXRlZCcsICdlbWJl
ci1tZXRhbC9taXhpbicsICdlbWJlci1tZXRhbC9lcnJvciddLCBmdW5jdGlvbiAoZXhwb3J0cywg
X2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQsIF9lbWJlck1ldGFsU2V0X3Byb3BlcnRpZXMsIF9lbWJl
ck1ldGFsQ29tcHV0ZWQsIF9lbWJlck1ldGFsTWl4aW4sIF9lbWJlck1ldGFsRXJyb3IpIHsKKyAg
J3VzZSBzdHJpY3QnOworCisgIHZhciBub3QgPSBfZW1iZXJNZXRhbENvbXB1dGVkLmNvbXB1dGVk
Lm5vdDsKKyAgdmFyIG9yID0gX2VtYmVyTWV0YWxDb21wdXRlZC5jb21wdXRlZC5vcjsKKworICAv
KioKKyAgICBAbW9kdWxlIGVtYmVyCisgICAgQHN1Ym1vZHVsZSBlbWJlci1ydW50aW1lCisgICov
CisKKyAgZnVuY3Rpb24gdGFwKHByb3h5LCBwcm9taXNlKSB7CisgICAgX2VtYmVyTWV0YWxTZXRf
cHJvcGVydGllcy5kZWZhdWx0KHByb3h5LCB7CisgICAgICBpc0Z1bGZpbGxlZDogZmFsc2UsCisg
ICAgICBpc1JlamVjdGVkOiBmYWxzZQorICAgIH0pOworCisgICAgcmV0dXJuIHByb21pc2UudGhl
bihmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgIF9lbWJlck1ldGFsU2V0X3Byb3BlcnRpZXMuZGVm
YXVsdChwcm94eSwgeworICAgICAgICBjb250ZW50OiB2YWx1ZSwKKyAgICAgICAgaXNGdWxmaWxs
ZWQ6IHRydWUKKyAgICAgIH0pOworICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0sIGZ1bmN0aW9u
IChyZWFzb24pIHsKKyAgICAgIF9lbWJlck1ldGFsU2V0X3Byb3BlcnRpZXMuZGVmYXVsdChwcm94
eSwgeworICAgICAgICByZWFzb246IHJlYXNvbiwKKyAgICAgICAgaXNSZWplY3RlZDogdHJ1ZQor
ICAgICAgfSk7CisgICAgICB0aHJvdyByZWFzb247CisgICAgfSwgJ0VtYmVyOiBQcm9taXNlUHJv
eHknKTsKKyAgfQorCisgIC8qKgorICAgIEEgbG93IGxldmVsIG1peGluIG1ha2luZyBPYmplY3RQ
cm94eSBwcm9taXNlLWF3YXJlLgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgdmFyIE9iamVj
dFByb21pc2VQcm94eSA9IEVtYmVyLk9iamVjdFByb3h5LmV4dGVuZChFbWJlci5Qcm9taXNlUHJv
eHlNaXhpbik7CisgIAorICAgIHZhciBwcm94eSA9IE9iamVjdFByb21pc2VQcm94eS5jcmVhdGUo
eworICAgICAgcHJvbWlzZTogJC5nZXRKU09OKCcvc29tZS9yZW1vdGUvZGF0YS5qc29uJykKKyAg
ICB9KTsKKyAgCisgICAgcHJveHkudGhlbihmdW5jdGlvbihqc29uKXsKKyAgICAgICAvLyB0aGUg
anNvbgorICAgIH0sIGZ1bmN0aW9uKHJlYXNvbikgeworICAgICAgIC8vIHRoZSByZWFzb24gd2h5
IHlvdSBoYXZlIG5vIGpzb24KKyAgICB9KTsKKyAgICBgYGAKKyAgCisgICAgdGhlIHByb3h5IGhh
cyBiaW5kYWJsZSBhdHRyaWJ1dGVzIHdoaWNoCisgICAgdHJhY2sgdGhlIHByb21pc2VzIGxpZmUg
Y3ljbGUKKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIHByb3h5LmdldCgnaXNQZW5kaW5nJykg
ICAvLz0+IHRydWUKKyAgICBwcm94eS5nZXQoJ2lzU2V0dGxlZCcpICAvLz0+IGZhbHNlCisgICAg
cHJveHkuZ2V0KCdpc1JlamVjdGVkJykgIC8vPT4gZmFsc2UKKyAgICBwcm94eS5nZXQoJ2lzRnVs
ZmlsbGVkJykgLy89PiBmYWxzZQorICAgIGBgYAorICAKKyAgICBXaGVuIHRoZSAkLmdldEpTT04g
Y29tcGxldGVzLCBhbmQgdGhlIHByb21pc2UgaXMgZnVsZmlsbGVkCisgICAgd2l0aCBqc29uLCB0
aGUgbGlmZSBjeWNsZSBhdHRyaWJ1dGVzIHdpbGwgdXBkYXRlIGFjY29yZGluZ2x5LgorICAKKyAg
ICBgYGBqYXZhc2NyaXB0CisgICAgcHJveHkuZ2V0KCdpc1BlbmRpbmcnKSAgIC8vPT4gZmFsc2UK
KyAgICBwcm94eS5nZXQoJ2lzU2V0dGxlZCcpICAgLy89PiB0cnVlCisgICAgcHJveHkuZ2V0KCdp
c1JlamVjdGVkJykgIC8vPT4gZmFsc2UKKyAgICBwcm94eS5nZXQoJ2lzRnVsZmlsbGVkJykgLy89
PiB0cnVlCisgICAgYGBgCisgIAorICAgIEFzIHRoZSBwcm94eSBpcyBhbiBPYmplY3RQcm94eSwg
YW5kIHRoZSBqc29uIG5vdyBpdHMgY29udGVudCwKKyAgICBhbGwgdGhlIGpzb24gcHJvcGVydGll
cyB3aWxsIGJlIGF2YWlsYWJsZSBkaXJlY3RseSBmcm9tIHRoZSBwcm94eS4KKyAgCisgICAgYGBg
amF2YXNjcmlwdAorICAgIC8vIEFzc3VtaW5nIHRoZSBmb2xsb3dpbmcganNvbjoKKyAgICB7Cisg
ICAgICBmaXJzdE5hbWU6ICdTdGVmYW4nLAorICAgICAgbGFzdE5hbWU6ICdQZW5uZXInCisgICAg
fQorICAKKyAgICAvLyBib3RoIHByb3BlcnRpZXMgd2lsbCBhY2Nlc3NpYmxlIG9uIHRoZSBwcm94
eQorICAgIHByb3h5LmdldCgnZmlyc3ROYW1lJykgLy89PiAnU3RlZmFuJworICAgIHByb3h5Lmdl
dCgnbGFzdE5hbWUnKSAgLy89PiAnUGVubmVyJworICAgIGBgYAorICAKKyAgICBAY2xhc3MgRW1i
ZXIuUHJvbWlzZVByb3h5TWl4aW4KKyAgICBAcHVibGljCisgICovCisgIGV4cG9ydHMuZGVmYXVs
dCA9IF9lbWJlck1ldGFsTWl4aW4uTWl4aW4uY3JlYXRlKHsKKyAgICAvKioKKyAgICAgIElmIHRo
ZSBwcm94aWVkIHByb21pc2UgaXMgcmVqZWN0ZWQgdGhpcyB3aWxsIGNvbnRhaW4gdGhlIHJlYXNv
bgorICAgICAgcHJvdmlkZWQuCisgICAgICAgQHByb3BlcnR5IHJlYXNvbgorICAgICAgQGRlZmF1
bHQgbnVsbAorICAgICAgQHB1YmxpYworICAgICovCisgICAgcmVhc29uOiBudWxsLAorCisgICAg
LyoqCisgICAgICBPbmNlIHRoZSBwcm94aWVkIHByb21pc2UgaGFzIHNldHRsZWQgdGhpcyB3aWxs
IGJlY29tZSBgZmFsc2VgLgorICAgICAgIEBwcm9wZXJ0eSBpc1BlbmRpbmcKKyAgICAgIEBkZWZh
dWx0IHRydWUKKyAgICAgIEBwdWJsaWMKKyAgICAqLworICAgIGlzUGVuZGluZzogbm90KCdpc1Nl
dHRsZWQnKS5yZWFkT25seSgpLAorCisgICAgLyoqCisgICAgICBPbmNlIHRoZSBwcm94aWVkIHBy
b21pc2UgaGFzIHNldHRsZWQgdGhpcyB3aWxsIGJlY29tZSBgdHJ1ZWAuCisgICAgICAgQHByb3Bl
cnR5IGlzU2V0dGxlZAorICAgICAgQGRlZmF1bHQgZmFsc2UKKyAgICAgIEBwdWJsaWMKKyAgICAq
LworICAgIGlzU2V0dGxlZDogb3IoJ2lzUmVqZWN0ZWQnLCAnaXNGdWxmaWxsZWQnKS5yZWFkT25s
eSgpLAorCisgICAgLyoqCisgICAgICBXaWxsIGJlY29tZSBgdHJ1ZWAgaWYgdGhlIHByb3hpZWQg
cHJvbWlzZSBpcyByZWplY3RlZC4KKyAgICAgICBAcHJvcGVydHkgaXNSZWplY3RlZAorICAgICAg
QGRlZmF1bHQgZmFsc2UKKyAgICAgIEBwdWJsaWMKKyAgICAqLworICAgIGlzUmVqZWN0ZWQ6IGZh
bHNlLAorCisgICAgLyoqCisgICAgICBXaWxsIGJlY29tZSBgdHJ1ZWAgaWYgdGhlIHByb3hpZWQg
cHJvbWlzZSBpcyBmdWxmaWxsZWQuCisgICAgICAgQHByb3BlcnR5IGlzRnVsZmlsbGVkCisgICAg
ICBAZGVmYXVsdCBmYWxzZQorICAgICAgQHB1YmxpYworICAgICovCisgICAgaXNGdWxmaWxsZWQ6
IGZhbHNlLAorCisgICAgLyoqCisgICAgICBUaGUgcHJvbWlzZSB3aG9zZSBmdWxmaWxsbWVudCB2
YWx1ZSBpcyBiZWluZyBwcm94aWVkIGJ5IHRoaXMgb2JqZWN0LgorICAgICAgIFRoaXMgcHJvcGVy
dHkgbXVzdCBiZSBzcGVjaWZpZWQgdXBvbiBjcmVhdGlvbiwgYW5kIHNob3VsZCBub3QgYmUKKyAg
ICAgIGNoYW5nZWQgb25jZSBjcmVhdGVkLgorICAgICAgIEV4YW1wbGU6CisgICAgICAgYGBgamF2
YXNjcmlwdAorICAgICAgRW1iZXIuT2JqZWN0UHJveHkuZXh0ZW5kKEVtYmVyLlByb21pc2VQcm94
eU1peGluKS5jcmVhdGUoeworICAgICAgICBwcm9taXNlOiA8dGhlbmFibGU+CisgICAgICB9KTsK
KyAgICAgIGBgYAorICAgICAgIEBwcm9wZXJ0eSBwcm9taXNlCisgICAgICBAcHVibGljCisgICAg
Ki8KKyAgICBwcm9taXNlOiBfZW1iZXJNZXRhbENvbXB1dGVkLmNvbXB1dGVkKHsKKyAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICB0aHJvdyBuZXcgX2VtYmVyTWV0YWxFcnJvci5kZWZh
dWx0KCdQcm9taXNlUHJveHlcJ3MgcHJvbWlzZSBtdXN0IGJlIHNldCcpOworICAgICAgfSwKKyAg
ICAgIHNldDogZnVuY3Rpb24gKGtleSwgcHJvbWlzZSkgeworICAgICAgICByZXR1cm4gdGFwKHRo
aXMsIHByb21pc2UpOworICAgICAgfQorICAgIH0pLAorCisgICAgLyoqCisgICAgICBBbiBhbGlh
cyB0byB0aGUgcHJveGllZCBwcm9taXNlJ3MgYHRoZW5gLgorICAgICAgIFNlZSBSU1ZQLlByb21p
c2UudGhlbi4KKyAgICAgICBAbWV0aG9kIHRoZW4KKyAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGNh
bGxiYWNrCisgICAgICBAcmV0dXJuIHtSU1ZQLlByb21pc2V9CisgICAgICBAcHVibGljCisgICAg
Ki8KKyAgICB0aGVuOiBwcm9taXNlQWxpYXMoJ3RoZW4nKSwKKworICAgIC8qKgorICAgICAgQW4g
YWxpYXMgdG8gdGhlIHByb3hpZWQgcHJvbWlzZSdzIGBjYXRjaGAuCisgICAgICAgU2VlIFJTVlAu
UHJvbWlzZS5jYXRjaC4KKyAgICAgICBAbWV0aG9kIGNhdGNoCisgICAgICBAcGFyYW0ge0Z1bmN0
aW9ufSBjYWxsYmFjaworICAgICAgQHJldHVybiB7UlNWUC5Qcm9taXNlfQorICAgICAgQHNpbmNl
IDEuMy4wCisgICAgICBAcHVibGljCisgICAgKi8KKyAgICAnY2F0Y2gnOiBwcm9taXNlQWxpYXMo
J2NhdGNoJyksCisKKyAgICAvKioKKyAgICAgIEFuIGFsaWFzIHRvIHRoZSBwcm94aWVkIHByb21p
c2UncyBgZmluYWxseWAuCisgICAgICAgU2VlIFJTVlAuUHJvbWlzZS5maW5hbGx5LgorICAgICAg
IEBtZXRob2QgZmluYWxseQorICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sKKyAgICAg
IEByZXR1cm4ge1JTVlAuUHJvbWlzZX0KKyAgICAgIEBzaW5jZSAxLjMuMAorICAgICAgQHB1Ymxp
YworICAgICovCisgICAgJ2ZpbmFsbHknOiBwcm9taXNlQWxpYXMoJ2ZpbmFsbHknKQorCisgIH0p
OworCisgIGZ1bmN0aW9uIHByb21pc2VBbGlhcyhuYW1lKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9u
ICgpIHsKKyAgICAgIHZhciBwcm9taXNlID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRo
aXMsICdwcm9taXNlJyk7CisgICAgICByZXR1cm4gcHJvbWlzZVtuYW1lXS5hcHBseShwcm9taXNl
LCBhcmd1bWVudHMpOworICAgIH07CisgIH0KK30pOworZW5pZmVkKCdlbWJlci1ydW50aW1lL21p
eGlucy9yZWdpc3RyeV9wcm94eScsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9kZWJ1ZycsICdl
bWJlci1tZXRhbC9taXhpbiddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxEZWJ1Zywg
X2VtYmVyTWV0YWxNaXhpbikgeworICAvKioKKyAgQG1vZHVsZSBlbWJlcgorICBAc3VibW9kdWxl
IGVtYmVyLXJ1bnRpbWUKKyAgKi8KKworICAndXNlIHN0cmljdCc7CisKKyAgZXhwb3J0cy5idWls
ZEZha2VSZWdpc3RyeVdpdGhEZXByZWNhdGlvbnMgPSBidWlsZEZha2VSZWdpc3RyeVdpdGhEZXBy
ZWNhdGlvbnM7CisKKyAgLyoqCisgICAgUmVnaXN0cnlQcm94eU1peGluIGlzIHVzZWQgdG8gcHJv
dmlkZSBwdWJsaWMgYWNjZXNzIHRvIHNwZWNpZmljCisgICAgcmVnaXN0cnkgZnVuY3Rpb25hbGl0
eS4KKyAgCisgICAgQGNsYXNzIFJlZ2lzdHJ5UHJveHlNaXhpbgorICAgIEBwcml2YXRlCisgICov
CisgIGV4cG9ydHMuZGVmYXVsdCA9IF9lbWJlck1ldGFsTWl4aW4uTWl4aW4uY3JlYXRlKHsKKyAg
ICBfX3JlZ2lzdHJ5X186IG51bGwsCisKKyAgICAvKioKKyAgICAgR2l2ZW4gYSBmdWxsTmFtZSBy
ZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgZmFjdG9yeS4KKyAgICAgIEBwdWJsaWMKKyAgICAgQG1l
dGhvZCByZXNvbHZlUmVnaXN0cmF0aW9uCisgICAgIEBwYXJhbSB7U3RyaW5nfSBmdWxsTmFtZQor
ICAgICBAcmV0dXJuIHtGdW5jdGlvbn0gZnVsbE5hbWUncyBmYWN0b3J5CisgICAgICovCisgICAg
cmVzb2x2ZVJlZ2lzdHJhdGlvbjogcmVnaXN0cnlBbGlhcygncmVzb2x2ZScpLAorCisgICAgLyoq
CisgICAgICBSZWdpc3RlcnMgYSBmYWN0b3J5IHRoYXQgY2FuIGJlIHVzZWQgZm9yIGRlcGVuZGVu
Y3kgaW5qZWN0aW9uICh3aXRoCisgICAgICBgaW5qZWN0YCkgb3IgZm9yIHNlcnZpY2UgbG9va3Vw
LiBFYWNoIGZhY3RvcnkgaXMgcmVnaXN0ZXJlZCB3aXRoCisgICAgICBhIGZ1bGwgbmFtZSBpbmNs
dWRpbmcgdHdvIHBhcnRzOiBgdHlwZTpuYW1lYC4KKyAgICAgICBBIHNpbXBsZSBleGFtcGxlOgor
ICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgIHZhciBBcHAgPSBFbWJlci5BcHBsaWNhdGlvbi5j
cmVhdGUoKTsKKyAgICAgICBBcHAuT3JhbmdlID0gRW1iZXIuT2JqZWN0LmV4dGVuZCgpOworICAg
ICAgQXBwLnJlZ2lzdGVyKCdmcnVpdDpmYXZvcml0ZScsIEFwcC5PcmFuZ2UpOworICAgICAgYGBg
CisgICAgICAgRW1iZXIgd2lsbCByZXNvbHZlIGZhY3RvcmllcyBmcm9tIHRoZSBgQXBwYCBuYW1l
c3BhY2UgYXV0b21hdGljYWxseS4KKyAgICAgIEZvciBleGFtcGxlIGBBcHAuQ2Fyc0NvbnRyb2xs
ZXJgIHdpbGwgYmUgZGlzY292ZXJlZCBhbmQgcmV0dXJuZWQgaWYKKyAgICAgIGFuIGFwcGxpY2F0
aW9uIHJlcXVlc3RzIGBjb250cm9sbGVyOmNhcnNgLgorICAgICAgIEFuIGV4YW1wbGUgb2YgcmVn
aXN0ZXJpbmcgYSBjb250cm9sbGVyIHdpdGggYSBub24tc3RhbmRhcmQgbmFtZToKKyAgICAgICBg
YGBqYXZhc2NyaXB0CisgICAgICB2YXIgQXBwID0gRW1iZXIuQXBwbGljYXRpb24uY3JlYXRlKCk7
CisgICAgICB2YXIgU2Vzc2lvbiA9IEVtYmVyLkNvbnRyb2xsZXIuZXh0ZW5kKCk7CisgICAgICAg
QXBwLnJlZ2lzdGVyKCdjb250cm9sbGVyOnNlc3Npb24nLCBTZXNzaW9uKTsKKyAgICAgICAvLyBU
aGUgU2Vzc2lvbiBjb250cm9sbGVyIGNhbiBub3cgYmUgdHJlYXRlZCBsaWtlIGEgbm9ybWFsIGNv
bnRyb2xsZXIsCisgICAgICAvLyBkZXNwaXRlIGl0cyBub24tc3RhbmRhcmQgbmFtZS4KKyAgICAg
IEFwcC5BcHBsaWNhdGlvbkNvbnRyb2xsZXIgPSBFbWJlci5Db250cm9sbGVyLmV4dGVuZCh7Cisg
ICAgICAgIG5lZWRzOiBbJ3Nlc3Npb24nXQorICAgICAgfSk7CisgICAgICBgYGAKKyAgICAgICBS
ZWdpc3RlcmVkIGZhY3RvcmllcyBhcmUgKippbnN0YW50aWF0ZWQqKiBieSBoYXZpbmcgYGNyZWF0
ZWAKKyAgICAgIGNhbGxlZCBvbiB0aGVtLiBBZGRpdGlvbmFsbHkgdGhleSBhcmUgKipzaW5nbGV0
b25zKiosIGVhY2ggdGltZQorICAgICAgdGhleSBhcmUgbG9va2VkIHVwIHRoZXkgcmV0dXJuIHRo
ZSBzYW1lIGluc3RhbmNlLgorICAgICAgIFNvbWUgZXhhbXBsZXMgbW9kaWZ5aW5nIHRoYXQgZGVm
YXVsdCBiZWhhdmlvcjoKKyAgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICB2YXIgQXBwID0gRW1i
ZXIuQXBwbGljYXRpb24uY3JlYXRlKCk7CisgICAgICAgQXBwLlBlcnNvbiA9IEVtYmVyLk9iamVj
dC5leHRlbmQoKTsKKyAgICAgIEFwcC5PcmFuZ2UgPSBFbWJlci5PYmplY3QuZXh0ZW5kKCk7Cisg
ICAgICBBcHAuRW1haWwgPSBFbWJlci5PYmplY3QuZXh0ZW5kKCk7CisgICAgICBBcHAuc2Vzc2lv
biA9IEVtYmVyLk9iamVjdC5jcmVhdGUoKTsKKyAgICAgICBBcHAucmVnaXN0ZXIoJ21vZGVsOnVz
ZXInLCBBcHAuUGVyc29uLCB7IHNpbmdsZXRvbjogZmFsc2UgfSk7CisgICAgICBBcHAucmVnaXN0
ZXIoJ2ZydWl0OmZhdm9yaXRlJywgQXBwLk9yYW5nZSk7CisgICAgICBBcHAucmVnaXN0ZXIoJ2Nv
bW11bmljYXRpb246bWFpbicsIEFwcC5FbWFpbCwgeyBzaW5nbGV0b246IGZhbHNlIH0pOworICAg
ICAgQXBwLnJlZ2lzdGVyKCdzZXNzaW9uJywgQXBwLnNlc3Npb24sIHsgaW5zdGFudGlhdGU6IGZh
bHNlIH0pOworICAgICAgYGBgCisgICAgICAgQG1ldGhvZCByZWdpc3RlcgorICAgICAgQHBhcmFt
ICBmdWxsTmFtZSB7U3RyaW5nfSB0eXBlOm5hbWUgKGUuZy4sICdtb2RlbDp1c2VyJykKKyAgICAg
IEBwYXJhbSAgZmFjdG9yeSB7RnVuY3Rpb259IChlLmcuLCBBcHAuUGVyc29uKQorICAgICAgQHBh
cmFtICBvcHRpb25zIHtPYmplY3R9IChvcHRpb25hbCkgZGlzYWJsZSBpbnN0YW50aWF0aW9uIG9y
IHNpbmdsZXRvbiB1c2FnZQorICAgICAgQHB1YmxpYworICAgICAqLworICAgIHJlZ2lzdGVyOiBy
ZWdpc3RyeUFsaWFzKCdyZWdpc3RlcicpLAorCisgICAgLyoqCisgICAgIFVucmVnaXN0ZXIgYSBm
YWN0b3J5LgorICAgICAgYGBgamF2YXNjcmlwdAorICAgICB2YXIgQXBwID0gRW1iZXIuQXBwbGlj
YXRpb24uY3JlYXRlKCk7CisgICAgIHZhciBVc2VyID0gRW1iZXIuT2JqZWN0LmV4dGVuZCgpOwor
ICAgICBBcHAucmVnaXN0ZXIoJ21vZGVsOnVzZXInLCBVc2VyKTsKKyAgICAgIEFwcC5yZXNvbHZl
UmVnaXN0cmF0aW9uKCdtb2RlbDp1c2VyJykuY3JlYXRlKCkgaW5zdGFuY2VvZiBVc2VyIC8vPT4g
dHJ1ZQorICAgICAgQXBwLnVucmVnaXN0ZXIoJ21vZGVsOnVzZXInKQorICAgICBBcHAucmVzb2x2
ZVJlZ2lzdHJhdGlvbignbW9kZWw6dXNlcicpID09PSB1bmRlZmluZWQgLy89PiB0cnVlCisgICAg
IGBgYAorICAgICAgQHB1YmxpYworICAgICBAbWV0aG9kIHVucmVnaXN0ZXIKKyAgICAgQHBhcmFt
IHtTdHJpbmd9IGZ1bGxOYW1lCisgICAgICovCisgICAgdW5yZWdpc3RlcjogcmVnaXN0cnlBbGlh
cygndW5yZWdpc3RlcicpLAorCisgICAgLyoqCisgICAgIENoZWNrIGlmIGEgZmFjdG9yeSBpcyBy
ZWdpc3RlcmVkLgorICAgICAgQHB1YmxpYworICAgICBAbWV0aG9kIGhhc1JlZ2lzdHJhdGlvbgor
ICAgICBAcGFyYW0ge1N0cmluZ30gZnVsbE5hbWUKKyAgICAgQHJldHVybiB7Qm9vbGVhbn0KKyAg
ICAgKi8KKyAgICBoYXNSZWdpc3RyYXRpb246IHJlZ2lzdHJ5QWxpYXMoJ2hhcycpLAorCisgICAg
LyoqCisgICAgIFJlZ2lzdGVyIGFuIG9wdGlvbiBmb3IgYSBwYXJ0aWN1bGFyIGZhY3RvcnkuCisg
ICAgICBAcHVibGljCisgICAgIEBtZXRob2QgcmVnaXN0ZXJPcHRpb24KKyAgICAgQHBhcmFtIHtT
dHJpbmd9IGZ1bGxOYW1lCisgICAgIEBwYXJhbSB7U3RyaW5nfSBvcHRpb25OYW1lCisgICAgIEBw
YXJhbSB7T2JqZWN0fSBvcHRpb25zCisgICAgICovCisgICAgcmVnaXN0ZXJPcHRpb246IHJlZ2lz
dHJ5QWxpYXMoJ29wdGlvbicpLAorCisgICAgLyoqCisgICAgIFJldHVybiBhIHNwZWNpZmljIHJl
Z2lzdGVyZWQgb3B0aW9uIGZvciBhIHBhcnRpY3VsYXIgZmFjdG9yeS4KKyAgICAgIEBwdWJsaWMK
KyAgICAgQG1ldGhvZCByZWdpc3RlcmVkT3B0aW9uCisgICAgIEBwYXJhbSAge1N0cmluZ30gZnVs
bE5hbWUKKyAgICAgQHBhcmFtICB7U3RyaW5nfSBvcHRpb25OYW1lCisgICAgIEByZXR1cm4ge09i
amVjdH0gb3B0aW9ucworICAgICAqLworICAgIHJlZ2lzdGVyZWRPcHRpb246IHJlZ2lzdHJ5QWxp
YXMoJ2dldE9wdGlvbicpLAorCisgICAgLyoqCisgICAgIFJlZ2lzdGVyIG9wdGlvbnMgZm9yIGEg
cGFydGljdWxhciBmYWN0b3J5LgorICAgICAgQHB1YmxpYworICAgICBAbWV0aG9kIHJlZ2lzdGVy
T3B0aW9ucworICAgICBAcGFyYW0ge1N0cmluZ30gZnVsbE5hbWUKKyAgICAgQHBhcmFtIHtPYmpl
Y3R9IG9wdGlvbnMKKyAgICAgKi8KKyAgICByZWdpc3Rlck9wdGlvbnM6IHJlZ2lzdHJ5QWxpYXMo
J29wdGlvbnMnKSwKKworICAgIC8qKgorICAgICBSZXR1cm4gcmVnaXN0ZXJlZCBvcHRpb25zIGZv
ciBhIHBhcnRpY3VsYXIgZmFjdG9yeS4KKyAgICAgIEBwdWJsaWMKKyAgICAgQG1ldGhvZCByZWdp
c3RlcmVkT3B0aW9ucworICAgICBAcGFyYW0gIHtTdHJpbmd9IGZ1bGxOYW1lCisgICAgIEByZXR1
cm4ge09iamVjdH0gb3B0aW9ucworICAgICAqLworICAgIHJlZ2lzdGVyZWRPcHRpb25zOiByZWdp
c3RyeUFsaWFzKCdnZXRPcHRpb25zJyksCisKKyAgICAvKioKKyAgICAgQWxsb3cgcmVnaXN0ZXJp
bmcgb3B0aW9ucyBmb3IgYWxsIGZhY3RvcmllcyBvZiBhIHR5cGUuCisgICAgICBgYGBqYXZhc2Ny
aXB0CisgICAgIHZhciBBcHAgPSBFbWJlci5BcHBsaWNhdGlvbi5jcmVhdGUoKTsKKyAgICAgdmFy
IGFwcEluc3RhbmNlID0gQXBwLmJ1aWxkSW5zdGFuY2UoKTsKKyAgICAgIC8vIGlmIGFsbCBvZiB0
eXBlIGBjb25uZWN0aW9uYCBtdXN0IG5vdCBiZSBzaW5nbGV0b25zCisgICAgIGFwcEluc3RhbmNl
Lm9wdGlvbnNGb3JUeXBlKCdjb25uZWN0aW9uJywgeyBzaW5nbGV0b246IGZhbHNlIH0pOworICAg
ICAgYXBwSW5zdGFuY2UucmVnaXN0ZXIoJ2Nvbm5lY3Rpb246dHdpdHRlcicsIFR3aXR0ZXJDb25u
ZWN0aW9uKTsKKyAgICAgYXBwSW5zdGFuY2UucmVnaXN0ZXIoJ2Nvbm5lY3Rpb246ZmFjZWJvb2sn
LCBGYWNlYm9va0Nvbm5lY3Rpb24pOworICAgICAgdmFyIHR3aXR0ZXIgPSBhcHBJbnN0YW5jZS5s
b29rdXAoJ2Nvbm5lY3Rpb246dHdpdHRlcicpOworICAgICB2YXIgdHdpdHRlcjIgPSBhcHBJbnN0
YW5jZS5sb29rdXAoJ2Nvbm5lY3Rpb246dHdpdHRlcicpOworICAgICAgdHdpdHRlciA9PT0gdHdp
dHRlcjI7IC8vID0+IGZhbHNlCisgICAgICB2YXIgZmFjZWJvb2sgPSBhcHBJbnN0YW5jZS5sb29r
dXAoJ2Nvbm5lY3Rpb246ZmFjZWJvb2snKTsKKyAgICAgdmFyIGZhY2Vib29rMiA9IGFwcEluc3Rh
bmNlLmxvb2t1cCgnY29ubmVjdGlvbjpmYWNlYm9vaycpOworICAgICAgZmFjZWJvb2sgPT09IGZh
Y2Vib29rMjsgLy8gPT4gZmFsc2UKKyAgICAgYGBgCisgICAgICBAcHVibGljCisgICAgIEBtZXRo
b2QgcmVnaXN0ZXJPcHRpb25zRm9yVHlwZQorICAgICBAcGFyYW0ge1N0cmluZ30gdHlwZQorICAg
ICBAcGFyYW0ge09iamVjdH0gb3B0aW9ucworICAgICAqLworICAgIHJlZ2lzdGVyT3B0aW9uc0Zv
clR5cGU6IHJlZ2lzdHJ5QWxpYXMoJ29wdGlvbnNGb3JUeXBlJyksCisKKyAgICAvKioKKyAgICAg
UmV0dXJuIHRoZSByZWdpc3RlcmVkIG9wdGlvbnMgZm9yIGFsbCBmYWN0b3JpZXMgb2YgYSB0eXBl
LgorICAgICAgQHB1YmxpYworICAgICBAbWV0aG9kIHJlZ2lzdGVyZWRPcHRpb25zRm9yVHlwZQor
ICAgICBAcGFyYW0ge1N0cmluZ30gdHlwZQorICAgICBAcmV0dXJuIHtPYmplY3R9IG9wdGlvbnMK
KyAgICAgKi8KKyAgICByZWdpc3RlcmVkT3B0aW9uc0ZvclR5cGU6IHJlZ2lzdHJ5QWxpYXMoJ2dl
dE9wdGlvbnNGb3JUeXBlJyksCisKKyAgICAvKioKKyAgICAgIERlZmluZSBhIGRlcGVuZGVuY3kg
aW5qZWN0aW9uIG9udG8gYSBzcGVjaWZpYyBmYWN0b3J5IG9yIGFsbCBmYWN0b3JpZXMKKyAgICAg
IG9mIGEgdHlwZS4KKyAgICAgICBXaGVuIEVtYmVyIGluc3RhbnRpYXRlcyBhIGNvbnRyb2xsZXIs
IHZpZXcsIG9yIG90aGVyIGZyYW1ld29yayBjb21wb25lbnQKKyAgICAgIGl0IGNhbiBhdHRhY2gg
YSBkZXBlbmRlbmN5IHRvIHRoYXQgY29tcG9uZW50LiBUaGlzIGlzIG9mdGVuIHVzZWQgdG8KKyAg
ICAgIHByb3ZpZGUgc2VydmljZXMgdG8gYSBzZXQgb2YgZnJhbWV3b3JrIGNvbXBvbmVudHMuCisg
ICAgICAgQW4gZXhhbXBsZSBvZiBwcm92aWRpbmcgYSBzZXNzaW9uIG9iamVjdCB0byBhbGwgY29u
dHJvbGxlcnM6CisgICAgICAgYGBgamF2YXNjcmlwdAorICAgICAgdmFyIEFwcCA9IEVtYmVyLkFw
cGxpY2F0aW9uLmNyZWF0ZSgpOworICAgICAgdmFyIFNlc3Npb24gPSBFbWJlci5PYmplY3QuZXh0
ZW5kKHsgaXNBdXRoZW50aWNhdGVkOiBmYWxzZSB9KTsKKyAgICAgICAvLyBBIGZhY3RvcnkgbXVz
dCBiZSByZWdpc3RlcmVkIGJlZm9yZSBpdCBjYW4gYmUgaW5qZWN0ZWQKKyAgICAgIEFwcC5yZWdp
c3Rlcignc2Vzc2lvbjptYWluJywgU2Vzc2lvbik7CisgICAgICAgLy8gSW5qZWN0ICdzZXNzaW9u
Om1haW4nIG9udG8gYWxsIGZhY3RvcmllcyBvZiB0aGUgdHlwZSAnY29udHJvbGxlcicKKyAgICAg
IC8vIHdpdGggdGhlIG5hbWUgJ3Nlc3Npb24nCisgICAgICBBcHAuaW5qZWN0KCdjb250cm9sbGVy
JywgJ3Nlc3Npb24nLCAnc2Vzc2lvbjptYWluJyk7CisgICAgICAgQXBwLkluZGV4Q29udHJvbGxl
ciA9IEVtYmVyLkNvbnRyb2xsZXIuZXh0ZW5kKHsKKyAgICAgICAgaXNMb2dnZWRJbjogRW1iZXIu
Y29tcHV0ZWQuYWxpYXMoJ3Nlc3Npb24uaXNBdXRoZW50aWNhdGVkJykKKyAgICAgIH0pOworICAg
ICAgYGBgCisgICAgICAgSW5qZWN0aW9ucyBjYW4gYWxzbyBiZSBwZXJmb3JtZWQgb24gc3BlY2lm
aWMgZmFjdG9yaWVzLgorICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgIEFwcC5pbmplY3QoPGZ1
bGxfbmFtZSBvciB0eXBlPiwgPHByb3BlcnR5IG5hbWU+LCA8ZnVsbF9uYW1lPikKKyAgICAgIEFw
cC5pbmplY3QoJ3JvdXRlJywgJ3NvdXJjZScsICdzb3VyY2U6bWFpbicpCisgICAgICBBcHAuaW5q
ZWN0KCdyb3V0ZTphcHBsaWNhdGlvbicsICdlbWFpbCcsICdtb2RlbDplbWFpbCcpCisgICAgICBg
YGAKKyAgICAgICBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IGluamVjdGlvbnMgY2FuIG9u
bHkgYmUgcGVyZm9ybWVkIG9uCisgICAgICBjbGFzc2VzIHRoYXQgYXJlIGluc3RhbnRpYXRlZCBi
eSBFbWJlciBpdHNlbGYuIEluc3RhbnRpYXRpbmcgYSBjbGFzcworICAgICAgZGlyZWN0bHkgKHZp
YSBgY3JlYXRlYCBvciBgbmV3YCkgYnlwYXNzZXMgdGhlIGRlcGVuZGVuY3kgaW5qZWN0aW9uCisg
ICAgICBzeXN0ZW0uCisgICAgICAgKipOb3RlOioqIEVtYmVyLURhdGEgaW5zdGFudGlhdGVzIGl0
cyBtb2RlbHMgaW4gYSB1bmlxdWUgbWFubmVyLCBhbmQgY29uc2VxdWVudGx5CisgICAgICBpbmpl
Y3Rpb25zIG9udG8gbW9kZWxzIChvciBhbGwgbW9kZWxzKSB3aWxsIG5vdCB3b3JrIGFzIGV4cGVj
dGVkLiBJbmplY3Rpb25zCisgICAgICBvbiBtb2RlbHMgY2FuIGJlIGVuYWJsZWQgYnkgc2V0dGlu
ZyBgRW1iZXIuTU9ERUxfRkFDVE9SWV9JTkpFQ1RJT05TYAorICAgICAgdG8gYHRydWVgLgorICAg
ICAgIEBwdWJsaWMKKyAgICAgIEBtZXRob2QgaW5qZWN0CisgICAgICBAcGFyYW0gIGZhY3RvcnlO
YW1lT3JUeXBlIHtTdHJpbmd9CisgICAgICBAcGFyYW0gIHByb3BlcnR5IHtTdHJpbmd9CisgICAg
ICBAcGFyYW0gIGluamVjdGlvbk5hbWUge1N0cmluZ30KKyAgICAqKi8KKyAgICBpbmplY3Q6IHJl
Z2lzdHJ5QWxpYXMoJ2luamVjdGlvbicpCisgIH0pOworCisgIGZ1bmN0aW9uIHJlZ2lzdHJ5QWxp
YXMobmFtZSkgeworICAgIHJldHVybiBmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgX3JlZ2lzdHJ5
X187CisKKyAgICAgIHJldHVybiAoX3JlZ2lzdHJ5X18gPSB0aGlzLl9fcmVnaXN0cnlfXylbbmFt
ZV0uYXBwbHkoX3JlZ2lzdHJ5X18sIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgfQorCisgIGZ1bmN0
aW9uIGJ1aWxkRmFrZVJlZ2lzdHJ5V2l0aERlcHJlY2F0aW9ucyhpbnN0YW5jZSwgdHlwZUZvck1l
c3NhZ2UpIHsKKyAgICB2YXIgZmFrZVJlZ2lzdHJ5ID0ge307CisgICAgdmFyIHJlZ2lzdHJ5UHJv
cHMgPSB7CisgICAgICByZXNvbHZlOiAncmVzb2x2ZVJlZ2lzdHJhdGlvbicsCisgICAgICByZWdp
c3RlcjogJ3JlZ2lzdGVyJywKKyAgICAgIHVucmVnaXN0ZXI6ICd1bnJlZ2lzdGVyJywKKyAgICAg
IGhhczogJ2hhc1JlZ2lzdHJhdGlvbicsCisgICAgICBvcHRpb246ICdyZWdpc3Rlck9wdGlvbics
CisgICAgICBvcHRpb25zOiAncmVnaXN0ZXJPcHRpb25zJywKKyAgICAgIGdldE9wdGlvbnM6ICdy
ZWdpc3RlcmVkT3B0aW9ucycsCisgICAgICBvcHRpb25zRm9yVHlwZTogJ3JlZ2lzdGVyT3B0aW9u
c0ZvclR5cGUnLAorICAgICAgZ2V0T3B0aW9uc0ZvclR5cGU6ICdyZWdpc3RlcmVkT3B0aW9uc0Zv
clR5cGUnLAorICAgICAgaW5qZWN0aW9uOiAnaW5qZWN0JworICAgIH07CisKKyAgICBmb3IgKHZh
ciBkZXByZWNhdGVkUHJvcGVydHkgaW4gcmVnaXN0cnlQcm9wcykgeworICAgICAgZmFrZVJlZ2lz
dHJ5W2RlcHJlY2F0ZWRQcm9wZXJ0eV0gPSBidWlsZEZha2VSZWdpc3RyeUZ1bmN0aW9uKGluc3Rh
bmNlLCB0eXBlRm9yTWVzc2FnZSwgZGVwcmVjYXRlZFByb3BlcnR5LCByZWdpc3RyeVByb3BzW2Rl
cHJlY2F0ZWRQcm9wZXJ0eV0pOworICAgIH0KKworICAgIHJldHVybiBmYWtlUmVnaXN0cnk7Cisg
IH0KKworICBmdW5jdGlvbiBidWlsZEZha2VSZWdpc3RyeUZ1bmN0aW9uKGluc3RhbmNlLCB0eXBl
Rm9yTWVzc2FnZSwgZGVwcmVjYXRlZFByb3BlcnR5LCBub25EZXByZWNhdGVkUHJvcGVydHkpIHsK
KyAgICByZXR1cm4gZnVuY3Rpb24gKCkgeworICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5kZXByZWNh
dGUoJ1VzaW5nIGAnICsgdHlwZUZvck1lc3NhZ2UgKyAnLnJlZ2lzdHJ5LicgKyBkZXByZWNhdGVk
UHJvcGVydHkgKyAnYCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIGAnICsgdHlwZUZvck1lc3Nh
Z2UgKyAnLicgKyBub25EZXByZWNhdGVkUHJvcGVydHkgKyAnYCBpbnN0ZWFkLicsIGZhbHNlLCB7
CisgICAgICAgIGlkOiAnZW1iZXItYXBwbGljYXRpb24uYXBwLWluc3RhbmNlLXJlZ2lzdHJ5JywK
KyAgICAgICAgdW50aWw6ICczLjAuMCcsCisgICAgICAgIHVybDogJ2h0dHA6Ly9lbWJlcmpzLmNv
bS9kZXByZWNhdGlvbnMvdjIueC8jdG9jX2VtYmVyLWFwcGxpY2F0aW9uLXJlZ2lzdHJ5LWVtYmVy
LWFwcGxpY2F0aW9uaW5zdGFuY2UtcmVnaXN0cnknCisgICAgICB9KTsKKyAgICAgIHJldHVybiBp
bnN0YW5jZVtub25EZXByZWNhdGVkUHJvcGVydHldLmFwcGx5KGluc3RhbmNlLCBhcmd1bWVudHMp
OworICAgIH07CisgIH0KK30pOworZW5pZmVkKCdlbWJlci1ydW50aW1lL21peGlucy90YXJnZXRf
YWN0aW9uX3N1cHBvcnQnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvY29yZScsICdlbWJlci1t
ZXRhbC9kZWJ1ZycsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQnLCAnZW1iZXItbWV0YWwvbWl4
aW4nLCAnZW1iZXItbWV0YWwvY29tcHV0ZWQnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1l
dGFsQ29yZSwgX2VtYmVyTWV0YWxEZWJ1ZywgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQsIF9lbWJl
ck1ldGFsTWl4aW4sIF9lbWJlck1ldGFsQ29tcHV0ZWQpIHsKKyAgLyoqCisgIEBtb2R1bGUgZW1i
ZXIKKyAgQHN1Ym1vZHVsZSBlbWJlci1ydW50aW1lCisgICovCisKKyAgJ3VzZSBzdHJpY3QnOwor
CisgIC8qKgorICBgRW1iZXIuVGFyZ2V0QWN0aW9uU3VwcG9ydGAgaXMgYSBtaXhpbiB0aGF0IGNh
biBiZSBpbmNsdWRlZCBpbiBhIGNsYXNzCisgIHRvIGFkZCBhIGB0cmlnZ2VyQWN0aW9uYCBtZXRo
b2Qgd2l0aCBzZW1hbnRpY3Mgc2ltaWxhciB0byB0aGUgSGFuZGxlYmFycworICBge3thY3Rpb259
fWAgaGVscGVyLiBJbiBub3JtYWwgRW1iZXIgdXNhZ2UsIHRoZSBge3thY3Rpb259fWAgaGVscGVy
IGlzCisgIHVzdWFsbHkgdGhlIGJlc3QgY2hvaWNlLiBUaGlzIG1peGluIGlzIG1vc3Qgb2Z0ZW4g
dXNlZnVsIHdoZW4geW91IGFyZQorICBkb2luZyBtb3JlIGNvbXBsZXggZXZlbnQgaGFuZGxpbmcg
aW4gVmlldyBvYmplY3RzLgorICAKKyAgU2VlIGFsc28gYEVtYmVyLlZpZXdUYXJnZXRBY3Rpb25T
dXBwb3J0YCwgd2hpY2ggaGFzCisgIHZpZXctYXdhcmUgZGVmYXVsdHMgZm9yIHRhcmdldCBhbmQg
YWN0aW9uQ29udGV4dC4KKyAgCisgIEBjbGFzcyBUYXJnZXRBY3Rpb25TdXBwb3J0CisgIEBuYW1l
c3BhY2UgRW1iZXIKKyAgQGV4dGVuZHMgRW1iZXIuTWl4aW4KKyAgQHByaXZhdGUKKyAgKi8KKyAg
dmFyIFRhcmdldEFjdGlvblN1cHBvcnQgPSBfZW1iZXJNZXRhbE1peGluLk1peGluLmNyZWF0ZSh7
CisgICAgdGFyZ2V0OiBudWxsLAorICAgIGFjdGlvbjogbnVsbCwKKyAgICBhY3Rpb25Db250ZXh0
OiBudWxsLAorCisgICAgdGFyZ2V0T2JqZWN0OiBfZW1iZXJNZXRhbENvbXB1dGVkLmNvbXB1dGVk
KCd0YXJnZXQnLCBmdW5jdGlvbiAoKSB7CisgICAgICBpZiAodGhpcy5fdGFyZ2V0T2JqZWN0KSB7
CisgICAgICAgIHJldHVybiB0aGlzLl90YXJnZXRPYmplY3Q7CisgICAgICB9CisKKyAgICAgIHZh
ciB0YXJnZXQgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ3RhcmdldCcpOwor
CisgICAgICBpZiAodHlwZW9mIHRhcmdldCA9PT0gJ3N0cmluZycpIHsKKyAgICAgICAgdmFyIHZh
bHVlID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsIHRhcmdldCk7CisgICAgICAg
IGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgdmFsdWUgPSBfZW1iZXJNZXRh
bFByb3BlcnR5X2dldC5nZXQoX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQubG9va3VwLCB0YXJnZXQp
OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgcmV0dXJuIHRhcmdldDsKKyAgICAgIH0KKyAgICB9KSwKKworICAgIGFjdGlvbkNvbnRl
eHRPYmplY3Q6IF9lbWJlck1ldGFsQ29tcHV0ZWQuY29tcHV0ZWQoZnVuY3Rpb24gKCkgeworICAg
ICAgdmFyIGFjdGlvbkNvbnRleHQgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywg
J2FjdGlvbkNvbnRleHQnKTsKKworICAgICAgaWYgKHR5cGVvZiBhY3Rpb25Db250ZXh0ID09PSAn
c3RyaW5nJykgeworICAgICAgICB2YXIgdmFsdWUgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5n
ZXQodGhpcywgYWN0aW9uQ29udGV4dCk7CisgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVk
KSB7CisgICAgICAgICAgdmFsdWUgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQoX2VtYmVy
TWV0YWxDb3JlLmRlZmF1bHQubG9va3VwLCBhY3Rpb25Db250ZXh0KTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gdmFsdWU7CisgICAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gYWN0aW9u
Q29udGV4dDsKKyAgICAgIH0KKyAgICB9KS5wcm9wZXJ0eSgnYWN0aW9uQ29udGV4dCcpLAorCisg
ICAgLyoqCisgICAgU2VuZCBhbiBgYWN0aW9uYCB3aXRoIGFuIGBhY3Rpb25Db250ZXh0YCB0byBh
IGB0YXJnZXRgLiBUaGUgYWN0aW9uLCBhY3Rpb25Db250ZXh0CisgICAgYW5kIHRhcmdldCB3aWxs
IGJlIHJldHJpZXZlZCBmcm9tIHByb3BlcnRpZXMgb2YgdGhlIG9iamVjdC4gRm9yIGV4YW1wbGU6
CisgICAgIGBgYGphdmFzY3JpcHQKKyAgICBBcHAuU2F2ZUJ1dHRvblZpZXcgPSBFbWJlci5WaWV3
LmV4dGVuZChFbWJlci5UYXJnZXRBY3Rpb25TdXBwb3J0LCB7CisgICAgICB0YXJnZXQ6IEVtYmVy
LmNvbXB1dGVkLmFsaWFzKCdjb250cm9sbGVyJyksCisgICAgICBhY3Rpb246ICdzYXZlJywKKyAg
ICAgIGFjdGlvbkNvbnRleHQ6IEVtYmVyLmNvbXB1dGVkLmFsaWFzKCdjb250ZXh0JyksCisgICAg
ICBjbGljazogZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMudHJpZ2dlckFjdGlvbigpOyAvLyBT
ZW5kcyB0aGUgYHNhdmVgIGFjdGlvbiwgYWxvbmcgd2l0aCB0aGUgY3VycmVudCBjb250ZXh0Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byB0aGUgY3VycmVudCBjb250cm9sbGVy
CisgICAgICB9CisgICAgfSk7CisgICAgYGBgCisgICAgIFRoZSBgdGFyZ2V0YCwgYGFjdGlvbmAs
IGFuZCBgYWN0aW9uQ29udGV4dGAgY2FuIGJlIHByb3ZpZGVkIGFzIHByb3BlcnRpZXMgb2YKKyAg
ICBhbiBvcHRpb25hbCBvYmplY3QgYXJndW1lbnQgdG8gYHRyaWdnZXJBY3Rpb25gIGFzIHdlbGwu
CisgICAgIGBgYGphdmFzY3JpcHQKKyAgICBBcHAuU2F2ZUJ1dHRvblZpZXcgPSBFbWJlci5WaWV3
LmV4dGVuZChFbWJlci5UYXJnZXRBY3Rpb25TdXBwb3J0LCB7CisgICAgICBjbGljazogZnVuY3Rp
b24oKSB7CisgICAgICAgIHRoaXMudHJpZ2dlckFjdGlvbih7CisgICAgICAgICAgYWN0aW9uOiAn
c2F2ZScsCisgICAgICAgICAgdGFyZ2V0OiB0aGlzLmdldCgnY29udHJvbGxlcicpLAorICAgICAg
ICAgIGFjdGlvbkNvbnRleHQ6IHRoaXMuZ2V0KCdjb250ZXh0JykKKyAgICAgICAgfSk7IC8vIFNl
bmRzIHRoZSBgc2F2ZWAgYWN0aW9uLCBhbG9uZyB3aXRoIHRoZSBjdXJyZW50IGNvbnRleHQKKyAg
ICAgICAgICAgIC8vIHRvIHRoZSBjdXJyZW50IGNvbnRyb2xsZXIKKyAgICAgIH0KKyAgICB9KTsK
KyAgICBgYGAKKyAgICAgVGhlIGBhY3Rpb25Db250ZXh0YCBkZWZhdWx0cyB0byB0aGUgb2JqZWN0
IHlvdSBhcmUgbWl4aW5nIGBUYXJnZXRBY3Rpb25TdXBwb3J0YCBpbnRvLgorICAgIEJ1dCBgdGFy
Z2V0YCBhbmQgYGFjdGlvbmAgbXVzdCBiZSBzcGVjaWZpZWQgZWl0aGVyIGFzIHByb3BlcnRpZXMg
b3Igd2l0aCB0aGUgYXJndW1lbnQKKyAgICB0byBgdHJpZ2dlckFjdGlvbmAsIG9yIGEgY29tYmlu
YXRpb246CisgICAgIGBgYGphdmFzY3JpcHQKKyAgICBBcHAuU2F2ZUJ1dHRvblZpZXcgPSBFbWJl
ci5WaWV3LmV4dGVuZChFbWJlci5UYXJnZXRBY3Rpb25TdXBwb3J0LCB7CisgICAgICB0YXJnZXQ6
IEVtYmVyLmNvbXB1dGVkLmFsaWFzKCdjb250cm9sbGVyJyksCisgICAgICBjbGljazogZnVuY3Rp
b24oKSB7CisgICAgICAgIHRoaXMudHJpZ2dlckFjdGlvbih7CisgICAgICAgICAgYWN0aW9uOiAn
c2F2ZScKKyAgICAgICAgfSk7IC8vIFNlbmRzIHRoZSBgc2F2ZWAgYWN0aW9uLCBhbG9uZyB3aXRo
IGEgcmVmZXJlbmNlIHRvIGB0aGlzYCwKKyAgICAgICAgICAgIC8vIHRvIHRoZSBjdXJyZW50IGNv
bnRyb2xsZXIKKyAgICAgIH0KKyAgICB9KTsKKyAgICBgYGAKKyAgICAgQG1ldGhvZCB0cmlnZ2Vy
QWN0aW9uCisgICAgQHBhcmFtIG9wdHMge09iamVjdH0gKG9wdGlvbmFsLCB3aXRoIHRoZSBvcHRp
b25hbCBrZXlzIGFjdGlvbiwgdGFyZ2V0IGFuZC9vciBhY3Rpb25Db250ZXh0KQorICAgIEByZXR1
cm4ge0Jvb2xlYW59IHRydWUgaWYgdGhlIGFjdGlvbiB3YXMgc2VudCBzdWNjZXNzZnVsbHkgYW5k
IGRpZCBub3QgcmV0dXJuIGZhbHNlCisgICAgQHByaXZhdGUKKyAgICAqLworICAgIHRyaWdnZXJB
Y3Rpb246IGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciBvcHRzID0gYXJndW1lbnRzLmxlbmd0aCA8
PSAwIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8ge30gOiBhcmd1bWVudHNbMF07CisK
KyAgICAgIHZhciBhY3Rpb24gPSBvcHRzLmFjdGlvbiB8fCBfZW1iZXJNZXRhbFByb3BlcnR5X2dl
dC5nZXQodGhpcywgJ2FjdGlvbicpOworICAgICAgdmFyIHRhcmdldCA9IG9wdHMudGFyZ2V0IHx8
IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAndGFyZ2V0T2JqZWN0Jyk7CisgICAg
ICB2YXIgYWN0aW9uQ29udGV4dCA9IG9wdHMuYWN0aW9uQ29udGV4dDsKKworICAgICAgZnVuY3Rp
b24gYXJncyhvcHRpb25zLCBhY3Rpb25OYW1lKSB7CisgICAgICAgIHZhciByZXQgPSBbXTsKKyAg
ICAgICAgaWYgKGFjdGlvbk5hbWUpIHsKKyAgICAgICAgICByZXQucHVzaChhY3Rpb25OYW1lKTsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXQuY29uY2F0KG9wdGlvbnMpOworICAgICAg
fQorCisgICAgICBpZiAodHlwZW9mIGFjdGlvbkNvbnRleHQgPT09ICd1bmRlZmluZWQnKSB7Cisg
ICAgICAgIGFjdGlvbkNvbnRleHQgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywg
J2FjdGlvbkNvbnRleHRPYmplY3QnKSB8fCB0aGlzOworICAgICAgfQorCisgICAgICBpZiAodGFy
Z2V0ICYmIGFjdGlvbikgeworICAgICAgICB2YXIgcmV0OworCisgICAgICAgIGlmICh0YXJnZXQu
c2VuZCkgeworICAgICAgICAgIHJldCA9IHRhcmdldC5zZW5kLmFwcGx5KHRhcmdldCwgYXJncyhh
Y3Rpb25Db250ZXh0LCBhY3Rpb24pKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBfZW1i
ZXJNZXRhbERlYnVnLmFzc2VydCgnVGhlIGFjdGlvbiBcJycgKyBhY3Rpb24gKyAnXCcgZGlkIG5v
dCBleGlzdCBvbiAnICsgdGFyZ2V0LCB0eXBlb2YgdGFyZ2V0W2FjdGlvbl0gPT09ICdmdW5jdGlv
bicpOworICAgICAgICAgIHJldCA9IHRhcmdldFthY3Rpb25dLmFwcGx5KHRhcmdldCwgYXJncyhh
Y3Rpb25Db250ZXh0KSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAocmV0ICE9PSBmYWxzZSkg
eworICAgICAgICAgIHJldCA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0
OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgIH0K
KyAgfSk7CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gVGFyZ2V0QWN0aW9uU3VwcG9ydDsKK30pOwor
Ly8gRW1iZXIubG9va3VwCitlbmlmZWQoImVtYmVyLXJ1bnRpbWUvc3RyaW5nX3JlZ2lzdHJ5Iiwg
WyJleHBvcnRzIl0sIGZ1bmN0aW9uIChleHBvcnRzKSB7CisgIC8vIFNUQVRFIHdpdGhpbiBhIG1v
ZHVsZSBpcyBmcm93bmVkIGFwb24sIHRoaXMgZXhpc3RzCisgIC8vIHRvIHN1cHBvcnQgRW1iZXIu
U1RSSU5HUyBidXQgc2hpZWxkIGVtYmVyIGludGVybmFscyBmcm9tIHRoaXMgbGVnYWN5IGdsb2Jh
bAorICAvLyBBUEkuCisgICJ1c2Ugc3RyaWN0IjsKKworICBleHBvcnRzLnNldFN0cmluZ3MgPSBz
ZXRTdHJpbmdzOworICBleHBvcnRzLmdldFN0cmluZ3MgPSBnZXRTdHJpbmdzOworICBleHBvcnRz
LmdldCA9IGdldDsKKyAgdmFyIFNUUklOR1MgPSB7fTsKKworICBmdW5jdGlvbiBzZXRTdHJpbmdz
KHN0cmluZ3MpIHsKKyAgICBTVFJJTkdTID0gc3RyaW5nczsKKyAgfQorCisgIGZ1bmN0aW9uIGdl
dFN0cmluZ3MoKSB7CisgICAgcmV0dXJuIFNUUklOR1M7CisgIH0KKworICBmdW5jdGlvbiBnZXQo
bmFtZSkgeworICAgIHJldHVybiBTVFJJTkdTW25hbWVdOworICB9Cit9KTsKK2VuaWZlZCgnZW1i
ZXItcnVudGltZS9zeXN0ZW0vYXBwbGljYXRpb24nLCBbJ2V4cG9ydHMnLCAnZW1iZXItcnVudGlt
ZS9zeXN0ZW0vbmFtZXNwYWNlJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJSdW50aW1lU3lz
dGVtTmFtZXNwYWNlKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICBleHBvcnRzLmRlZmF1bHQgPSBf
ZW1iZXJSdW50aW1lU3lzdGVtTmFtZXNwYWNlLmRlZmF1bHQuZXh0ZW5kKCk7Cit9KTsKK2VuaWZl
ZCgnZW1iZXItcnVudGltZS9zeXN0ZW0vYXJyYXlfcHJveHknLCBbJ2V4cG9ydHMnLCAnZW1iZXIt
bWV0YWwvZGVidWcnLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0JywgJ2VtYmVyLXJ1bnRpbWUv
dXRpbHMnLCAnZW1iZXItbWV0YWwvY29tcHV0ZWQnLCAnZW1iZXItbWV0YWwvbWl4aW4nLCAnZW1i
ZXItbWV0YWwvcHJvcGVydHlfZXZlbnRzJywgJ2VtYmVyLW1ldGFsL2Vycm9yJywgJ2VtYmVyLXJ1
bnRpbWUvc3lzdGVtL29iamVjdCcsICdlbWJlci1ydW50aW1lL21peGlucy9tdXRhYmxlX2FycmF5
JywgJ2VtYmVyLXJ1bnRpbWUvbWl4aW5zL2VudW1lcmFibGUnLCAnZW1iZXItbWV0YWwvYWxpYXMn
LCAnZW1iZXItcnVudGltZS9taXhpbnMvYXJyYXknXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJl
ck1ldGFsRGVidWcsIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LCBfZW1iZXJSdW50aW1lVXRpbHMs
IF9lbWJlck1ldGFsQ29tcHV0ZWQsIF9lbWJlck1ldGFsTWl4aW4sIF9lbWJlck1ldGFsUHJvcGVy
dHlfZXZlbnRzLCBfZW1iZXJNZXRhbEVycm9yLCBfZW1iZXJSdW50aW1lU3lzdGVtT2JqZWN0LCBf
ZW1iZXJSdW50aW1lTWl4aW5zTXV0YWJsZV9hcnJheSwgX2VtYmVyUnVudGltZU1peGluc0VudW1l
cmFibGUsIF9lbWJlck1ldGFsQWxpYXMsIF9lbWJlclJ1bnRpbWVNaXhpbnNBcnJheSkgeworICAn
dXNlIHN0cmljdCc7CisKKyAgLyoqCisgIEBtb2R1bGUgZW1iZXIKKyAgQHN1Ym1vZHVsZSBlbWJl
ci1ydW50aW1lCisgICovCisKKyAgdmFyIE9VVF9PRl9SQU5HRV9FWENFUFRJT04gPSAnSW5kZXgg
b3V0IG9mIHJhbmdlJzsKKyAgdmFyIEVNUFRZID0gW107CisKKyAgZnVuY3Rpb24gSygpIHsKKyAg
ICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgIEFuIEFycmF5UHJveHkgd3JhcHMgYW55
IG90aGVyIG9iamVjdCB0aGF0IGltcGxlbWVudHMgYEVtYmVyLkFycmF5YCBhbmQvb3IKKyAgICBg
RW1iZXIuTXV0YWJsZUFycmF5LGAgZm9yd2FyZGluZyBhbGwgcmVxdWVzdHMuIFRoaXMgbWFrZXMg
aXQgdmVyeSB1c2VmdWwgZm9yCisgICAgYSBudW1iZXIgb2YgYmluZGluZyB1c2UgY2FzZXMgb3Ig
b3RoZXIgY2FzZXMgd2hlcmUgYmVpbmcgYWJsZSB0byBzd2FwCisgICAgb3V0IHRoZSB1bmRlcmx5
aW5nIGFycmF5IGlzIHVzZWZ1bC4KKyAgCisgICAgQSBzaW1wbGUgZXhhbXBsZSBvZiB1c2FnZToK
KyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIHZhciBwZXRzID0gWydkb2cnLCAnY2F0JywgJ2Zp
c2gnXTsKKyAgICB2YXIgYXAgPSBFbWJlci5BcnJheVByb3h5LmNyZWF0ZSh7IGNvbnRlbnQ6IEVt
YmVyLkEocGV0cykgfSk7CisgIAorICAgIGFwLmdldCgnZmlyc3RPYmplY3QnKTsgICAgICAgICAg
ICAgICAgICAgICAgICAvLyAnZG9nJworICAgIGFwLnNldCgnY29udGVudCcsIFsnYW1vZWJhJywg
J3BhcmFtZWNpdW0nXSk7CisgICAgYXAuZ2V0KCdmaXJzdE9iamVjdCcpOyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vICdhbW9lYmEnCisgICAgYGBgCisgIAorICAgIFRoaXMgY2xhc3MgY2FuIGFs
c28gYmUgdXNlZnVsIGFzIGEgbGF5ZXIgdG8gdHJhbnNmb3JtIHRoZSBjb250ZW50cyBvZgorICAg
IGFuIGFycmF5LCBhcyB0aGV5IGFyZSBhY2Nlc3NlZC4gVGhpcyBjYW4gYmUgZG9uZSBieSBvdmVy
cmlkaW5nCisgICAgYG9iamVjdEF0Q29udGVudGA6CisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAg
ICB2YXIgcGV0cyA9IFsnZG9nJywgJ2NhdCcsICdmaXNoJ107CisgICAgdmFyIGFwID0gRW1iZXIu
QXJyYXlQcm94eS5jcmVhdGUoeworICAgICAgICBjb250ZW50OiBFbWJlci5BKHBldHMpLAorICAg
ICAgICBvYmplY3RBdENvbnRlbnQ6IGZ1bmN0aW9uKGlkeCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuZ2V0KCdjb250ZW50Jykub2JqZWN0QXQoaWR4KS50b1VwcGVyQ2FzZSgpOworICAgICAg
ICB9CisgICAgfSk7CisgIAorICAgIGFwLmdldCgnZmlyc3RPYmplY3QnKTsgLy8gLiAnRE9HJwor
ICAgIGBgYAorICAKKyAgICBAY2xhc3MgQXJyYXlQcm94eQorICAgIEBuYW1lc3BhY2UgRW1iZXIK
KyAgICBAZXh0ZW5kcyBFbWJlci5PYmplY3QKKyAgICBAdXNlcyBFbWJlci5NdXRhYmxlQXJyYXkK
KyAgICBAcHVibGljCisgICovCisgIHZhciBBcnJheVByb3h5ID0gX2VtYmVyUnVudGltZVN5c3Rl
bU9iamVjdC5kZWZhdWx0LmV4dGVuZChfZW1iZXJSdW50aW1lTWl4aW5zTXV0YWJsZV9hcnJheS5k
ZWZhdWx0LCB7CisKKyAgICAvKioKKyAgICAgIFRoZSBjb250ZW50IGFycmF5LiBNdXN0IGJlIGFu
IG9iamVjdCB0aGF0IGltcGxlbWVudHMgYEVtYmVyLkFycmF5YCBhbmQvb3IKKyAgICAgIGBFbWJl
ci5NdXRhYmxlQXJyYXkuYAorICAgICAgIEBwcm9wZXJ0eSBjb250ZW50CisgICAgICBAdHlwZSBF
bWJlci5BcnJheQorICAgICAgQHByaXZhdGUKKyAgICAqLworICAgIGNvbnRlbnQ6IG51bGwsCisK
KyAgICAvKioKKyAgICAgVGhlIGFycmF5IHRoYXQgdGhlIHByb3h5IHByZXRlbmRzIHRvIGJlLiBJ
biB0aGUgZGVmYXVsdCBgQXJyYXlQcm94eWAKKyAgICAgaW1wbGVtZW50YXRpb24sIHRoaXMgYW5k
IGBjb250ZW50YCBhcmUgdGhlIHNhbWUuIFN1YmNsYXNzZXMgb2YgYEFycmF5UHJveHlgCisgICAg
IGNhbiBvdmVycmlkZSB0aGlzIHByb3BlcnR5IHRvIHByb3ZpZGUgdGhpbmdzIGxpa2Ugc29ydGlu
ZyBhbmQgZmlsdGVyaW5nLgorICAgICAgQHByb3BlcnR5IGFycmFuZ2VkQ29udGVudAorICAgICBA
cHJpdmF0ZQorICAgICovCisgICAgYXJyYW5nZWRDb250ZW50OiBfZW1iZXJNZXRhbEFsaWFzLmRl
ZmF1bHQoJ2NvbnRlbnQnKSwKKworICAgIC8qKgorICAgICAgU2hvdWxkIGFjdHVhbGx5IHJldHJp
ZXZlIHRoZSBvYmplY3QgYXQgdGhlIHNwZWNpZmllZCBpbmRleCBmcm9tIHRoZQorICAgICAgY29u
dGVudC4gWW91IGNhbiBvdmVycmlkZSB0aGlzIG1ldGhvZCBpbiBzdWJjbGFzc2VzIHRvIHRyYW5z
Zm9ybSB0aGUKKyAgICAgIGNvbnRlbnQgaXRlbSB0byBzb21ldGhpbmcgbmV3LgorICAgICAgIFRo
aXMgbWV0aG9kIHdpbGwgb25seSBiZSBjYWxsZWQgaWYgY29udGVudCBpcyBub24tYG51bGxgLgor
ICAgICAgIEBtZXRob2Qgb2JqZWN0QXRDb250ZW50CisgICAgICBAcGFyYW0ge051bWJlcn0gaWR4
IFRoZSBpbmRleCB0byByZXRyaWV2ZS4KKyAgICAgIEByZXR1cm4ge09iamVjdH0gdGhlIHZhbHVl
IG9yIHVuZGVmaW5lZCBpZiBub25lIGZvdW5kCisgICAgICBAcHJpdmF0ZQorICAgICovCisgICAg
b2JqZWN0QXRDb250ZW50OiBmdW5jdGlvbiAoaWR4KSB7CisgICAgICByZXR1cm4gX2VtYmVyUnVu
dGltZU1peGluc0FycmF5Lm9iamVjdEF0KF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlz
LCAnYXJyYW5nZWRDb250ZW50JyksIGlkeCk7CisgICAgfSwKKworICAgIC8qKgorICAgICAgU2hv
dWxkIGFjdHVhbGx5IHJlcGxhY2UgdGhlIHNwZWNpZmllZCBvYmplY3RzIG9uIHRoZSBjb250ZW50
IGFycmF5LgorICAgICAgWW91IGNhbiBvdmVycmlkZSB0aGlzIG1ldGhvZCBpbiBzdWJjbGFzc2Vz
IHRvIHRyYW5zZm9ybSB0aGUgY29udGVudCBpdGVtCisgICAgICBpbnRvIHNvbWV0aGluZyBuZXcu
CisgICAgICAgVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGNhbGxlZCBpZiBjb250ZW50IGlzIG5v
bi1gbnVsbGAuCisgICAgICAgQG1ldGhvZCByZXBsYWNlQ29udGVudAorICAgICAgQHBhcmFtIHtO
dW1iZXJ9IGlkeCBUaGUgc3RhcnRpbmcgaW5kZXgKKyAgICAgIEBwYXJhbSB7TnVtYmVyfSBhbXQg
VGhlIG51bWJlciBvZiBpdGVtcyB0byByZW1vdmUgZnJvbSB0aGUgY29udGVudC4KKyAgICAgIEBw
YXJhbSB7QXJyYXl9IG9iamVjdHMgT3B0aW9uYWwgYXJyYXkgb2Ygb2JqZWN0cyB0byBpbnNlcnQg
b3IgbnVsbCBpZiBubworICAgICAgICBvYmplY3RzLgorICAgICAgQHJldHVybiB7dm9pZH0KKyAg
ICAgIEBwcml2YXRlCisgICAgKi8KKyAgICByZXBsYWNlQ29udGVudDogZnVuY3Rpb24gKGlkeCwg
YW10LCBvYmplY3RzKSB7CisgICAgICBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywg
J2NvbnRlbnQnKS5yZXBsYWNlKGlkeCwgYW10LCBvYmplY3RzKTsKKyAgICB9LAorCisgICAgLyoq
CisgICAgICBJbnZva2VkIHdoZW4gdGhlIGNvbnRlbnQgcHJvcGVydHkgaXMgYWJvdXQgdG8gY2hh
bmdlLiBOb3RpZmllcyBvYnNlcnZlcnMgdGhhdCB0aGUKKyAgICAgIGVudGlyZSBhcnJheSBjb250
ZW50IHdpbGwgY2hhbmdlLgorICAgICAgIEBwcml2YXRlCisgICAgICBAbWV0aG9kIF9jb250ZW50
V2lsbENoYW5nZQorICAgICovCisgICAgX2NvbnRlbnRXaWxsQ2hhbmdlOiBfZW1iZXJNZXRhbE1p
eGluLl9iZWZvcmVPYnNlcnZlcignY29udGVudCcsIGZ1bmN0aW9uICgpIHsKKyAgICAgIHRoaXMu
X3RlYXJkb3duQ29udGVudCgpOworICAgIH0pLAorCisgICAgX3RlYXJkb3duQ29udGVudDogZnVu
Y3Rpb24gKCkgeworICAgICAgdmFyIGNvbnRlbnQgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5n
ZXQodGhpcywgJ2NvbnRlbnQnKTsKKworICAgICAgaWYgKGNvbnRlbnQpIHsKKyAgICAgICAgX2Vt
YmVyUnVudGltZU1peGluc0FycmF5LnJlbW92ZUFycmF5T2JzZXJ2ZXIoY29udGVudCwgdGhpcywg
eworICAgICAgICAgIHdpbGxDaGFuZ2U6ICdjb250ZW50QXJyYXlXaWxsQ2hhbmdlJywKKyAgICAg
ICAgICBkaWRDaGFuZ2U6ICdjb250ZW50QXJyYXlEaWRDaGFuZ2UnCisgICAgICAgIH0pOworICAg
ICAgfQorICAgIH0sCisKKyAgICAvKioKKyAgICAgIE92ZXJyaWRlIHRvIGltcGxlbWVudCBjb250
ZW50IGFycmF5IGB3aWxsQ2hhbmdlYCBvYnNlcnZlci4KKyAgICAgICBAbWV0aG9kIGNvbnRlbnRB
cnJheVdpbGxDaGFuZ2UKKyAgICAgICBAcGFyYW0ge0VtYmVyLkFycmF5fSBjb250ZW50QXJyYXkg
dGhlIGNvbnRlbnQgYXJyYXkKKyAgICAgIEBwYXJhbSB7TnVtYmVyfSBzdGFydCBzdGFydGluZyBp
bmRleCBvZiB0aGUgY2hhbmdlCisgICAgICBAcGFyYW0ge051bWJlcn0gcmVtb3ZlQ291bnQgY291
bnQgb2YgaXRlbXMgcmVtb3ZlZAorICAgICAgQHBhcmFtIHtOdW1iZXJ9IGFkZENvdW50IGNvdW50
IG9mIGl0ZW1zIGFkZGVkCisgICAgICBAcHJpdmF0ZQorICAgICovCisgICAgY29udGVudEFycmF5
V2lsbENoYW5nZTogSywKKyAgICAvKioKKyAgICAgIE92ZXJyaWRlIHRvIGltcGxlbWVudCBjb250
ZW50IGFycmF5IGBkaWRDaGFuZ2VgIG9ic2VydmVyLgorICAgICAgIEBtZXRob2QgY29udGVudEFy
cmF5RGlkQ2hhbmdlCisgICAgICAgQHBhcmFtIHtFbWJlci5BcnJheX0gY29udGVudEFycmF5IHRo
ZSBjb250ZW50IGFycmF5CisgICAgICBAcGFyYW0ge051bWJlcn0gc3RhcnQgc3RhcnRpbmcgaW5k
ZXggb2YgdGhlIGNoYW5nZQorICAgICAgQHBhcmFtIHtOdW1iZXJ9IHJlbW92ZUNvdW50IGNvdW50
IG9mIGl0ZW1zIHJlbW92ZWQKKyAgICAgIEBwYXJhbSB7TnVtYmVyfSBhZGRDb3VudCBjb3VudCBv
ZiBpdGVtcyBhZGRlZAorICAgICAgQHByaXZhdGUKKyAgICAqLworICAgIGNvbnRlbnRBcnJheURp
ZENoYW5nZTogSywKKworICAgIC8qKgorICAgICAgSW52b2tlZCB3aGVuIHRoZSBjb250ZW50IHBy
b3BlcnR5IGNoYW5nZXMuIE5vdGlmaWVzIG9ic2VydmVycyB0aGF0IHRoZQorICAgICAgZW50aXJl
IGFycmF5IGNvbnRlbnQgaGFzIGNoYW5nZWQuCisgICAgICAgQHByaXZhdGUKKyAgICAgIEBtZXRo
b2QgX2NvbnRlbnREaWRDaGFuZ2UKKyAgICAqLworICAgIF9jb250ZW50RGlkQ2hhbmdlOiBfZW1i
ZXJNZXRhbE1peGluLm9ic2VydmVyKCdjb250ZW50JywgZnVuY3Rpb24gKCkgeworICAgICAgdmFy
IGNvbnRlbnQgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ2NvbnRlbnQnKTsK
KworICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ0NhblwndCBzZXQgQXJyYXlQcm94eVwn
cyBjb250ZW50IHRvIGl0c2VsZicsIGNvbnRlbnQgIT09IHRoaXMpOworCisgICAgICB0aGlzLl9z
ZXR1cENvbnRlbnQoKTsKKyAgICB9KSwKKworICAgIF9zZXR1cENvbnRlbnQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgIHZhciBjb250ZW50ID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMs
ICdjb250ZW50Jyk7CisKKyAgICAgIGlmIChjb250ZW50KSB7CisgICAgICAgIF9lbWJlck1ldGFs
RGVidWcuYXNzZXJ0KCdBcnJheVByb3h5IGV4cGVjdHMgYW4gQXJyYXkgb3IgRW1iZXIuQXJyYXlQ
cm94eSwgYnV0IHlvdSBwYXNzZWQgJyArIHR5cGVvZiBjb250ZW50LCBfZW1iZXJSdW50aW1lVXRp
bHMuaXNBcnJheShjb250ZW50KSB8fCBjb250ZW50LmlzRGVzdHJveWVkKTsKKworICAgICAgICBf
ZW1iZXJSdW50aW1lTWl4aW5zQXJyYXkuYWRkQXJyYXlPYnNlcnZlcihjb250ZW50LCB0aGlzLCB7
CisgICAgICAgICAgd2lsbENoYW5nZTogJ2NvbnRlbnRBcnJheVdpbGxDaGFuZ2UnLAorICAgICAg
ICAgIGRpZENoYW5nZTogJ2NvbnRlbnRBcnJheURpZENoYW5nZScKKyAgICAgICAgfSk7CisgICAg
ICB9CisgICAgfSwKKworICAgIF9hcnJhbmdlZENvbnRlbnRXaWxsQ2hhbmdlOiBfZW1iZXJNZXRh
bE1peGluLl9iZWZvcmVPYnNlcnZlcignYXJyYW5nZWRDb250ZW50JywgZnVuY3Rpb24gKCkgewor
ICAgICAgdmFyIGFycmFuZ2VkQ29udGVudCA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0
aGlzLCAnYXJyYW5nZWRDb250ZW50Jyk7CisgICAgICB2YXIgbGVuID0gYXJyYW5nZWRDb250ZW50
ID8gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KGFycmFuZ2VkQ29udGVudCwgJ2xlbmd0aCcp
IDogMDsKKworICAgICAgdGhpcy5hcnJhbmdlZENvbnRlbnRBcnJheVdpbGxDaGFuZ2UodGhpcywg
MCwgbGVuLCB1bmRlZmluZWQpOworICAgICAgdGhpcy5hcnJhbmdlZENvbnRlbnRXaWxsQ2hhbmdl
KHRoaXMpOworCisgICAgICB0aGlzLl90ZWFyZG93bkFycmFuZ2VkQ29udGVudChhcnJhbmdlZENv
bnRlbnQpOworICAgIH0pLAorCisgICAgX2FycmFuZ2VkQ29udGVudERpZENoYW5nZTogX2VtYmVy
TWV0YWxNaXhpbi5vYnNlcnZlcignYXJyYW5nZWRDb250ZW50JywgZnVuY3Rpb24gKCkgeworICAg
ICAgdmFyIGFycmFuZ2VkQ29udGVudCA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlz
LCAnYXJyYW5nZWRDb250ZW50Jyk7CisgICAgICB2YXIgbGVuID0gYXJyYW5nZWRDb250ZW50ID8g
X2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KGFycmFuZ2VkQ29udGVudCwgJ2xlbmd0aCcpIDog
MDsKKworICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ0NhblwndCBzZXQgQXJyYXlQcm94
eVwncyBjb250ZW50IHRvIGl0c2VsZicsIGFycmFuZ2VkQ29udGVudCAhPT0gdGhpcyk7CisKKyAg
ICAgIHRoaXMuX3NldHVwQXJyYW5nZWRDb250ZW50KCk7CisKKyAgICAgIHRoaXMuYXJyYW5nZWRD
b250ZW50RGlkQ2hhbmdlKHRoaXMpOworICAgICAgdGhpcy5hcnJhbmdlZENvbnRlbnRBcnJheURp
ZENoYW5nZSh0aGlzLCAwLCB1bmRlZmluZWQsIGxlbik7CisgICAgfSksCisKKyAgICBfc2V0dXBB
cnJhbmdlZENvbnRlbnQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciBhcnJhbmdlZENvbnRlbnQg
PSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ2FycmFuZ2VkQ29udGVudCcpOwor
CisgICAgICBpZiAoYXJyYW5nZWRDb250ZW50KSB7CisgICAgICAgIF9lbWJlck1ldGFsRGVidWcu
YXNzZXJ0KCdBcnJheVByb3h5IGV4cGVjdHMgYW4gQXJyYXkgb3IgRW1iZXIuQXJyYXlQcm94eSwg
YnV0IHlvdSBwYXNzZWQgJyArIHR5cGVvZiBhcnJhbmdlZENvbnRlbnQsIF9lbWJlclJ1bnRpbWVV
dGlscy5pc0FycmF5KGFycmFuZ2VkQ29udGVudCkgfHwgYXJyYW5nZWRDb250ZW50LmlzRGVzdHJv
eWVkKTsKKworICAgICAgICBfZW1iZXJSdW50aW1lTWl4aW5zQXJyYXkuYWRkQXJyYXlPYnNlcnZl
cihhcnJhbmdlZENvbnRlbnQsIHRoaXMsIHsKKyAgICAgICAgICB3aWxsQ2hhbmdlOiAnYXJyYW5n
ZWRDb250ZW50QXJyYXlXaWxsQ2hhbmdlJywKKyAgICAgICAgICBkaWRDaGFuZ2U6ICdhcnJhbmdl
ZENvbnRlbnRBcnJheURpZENoYW5nZScKKyAgICAgICAgfSk7CisgICAgICB9CisgICAgfSwKKwor
ICAgIF90ZWFyZG93bkFycmFuZ2VkQ29udGVudDogZnVuY3Rpb24gKCkgeworICAgICAgdmFyIGFy
cmFuZ2VkQ29udGVudCA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnYXJyYW5n
ZWRDb250ZW50Jyk7CisKKyAgICAgIGlmIChhcnJhbmdlZENvbnRlbnQpIHsKKyAgICAgICAgX2Vt
YmVyUnVudGltZU1peGluc0FycmF5LnJlbW92ZUFycmF5T2JzZXJ2ZXIoYXJyYW5nZWRDb250ZW50
LCB0aGlzLCB7CisgICAgICAgICAgd2lsbENoYW5nZTogJ2FycmFuZ2VkQ29udGVudEFycmF5V2ls
bENoYW5nZScsCisgICAgICAgICAgZGlkQ2hhbmdlOiAnYXJyYW5nZWRDb250ZW50QXJyYXlEaWRD
aGFuZ2UnCisgICAgICAgIH0pOworICAgICAgfQorICAgIH0sCisKKyAgICBhcnJhbmdlZENvbnRl
bnRXaWxsQ2hhbmdlOiBLLAorICAgIGFycmFuZ2VkQ29udGVudERpZENoYW5nZTogSywKKworICAg
IG9iamVjdEF0OiBmdW5jdGlvbiAoaWR4KSB7CisgICAgICByZXR1cm4gX2VtYmVyTWV0YWxQcm9w
ZXJ0eV9nZXQuZ2V0KHRoaXMsICdjb250ZW50JykgJiYgdGhpcy5vYmplY3RBdENvbnRlbnQoaWR4
KTsKKyAgICB9LAorCisgICAgbGVuZ3RoOiBfZW1iZXJNZXRhbENvbXB1dGVkLmNvbXB1dGVkKGZ1
bmN0aW9uICgpIHsKKyAgICAgIHZhciBhcnJhbmdlZENvbnRlbnQgPSBfZW1iZXJNZXRhbFByb3Bl
cnR5X2dldC5nZXQodGhpcywgJ2FycmFuZ2VkQ29udGVudCcpOworICAgICAgcmV0dXJuIGFycmFu
Z2VkQ29udGVudCA/IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldChhcnJhbmdlZENvbnRlbnQs
ICdsZW5ndGgnKSA6IDA7CisgICAgICAvLyBObyBkZXBlbmRlbmNpZXMgc2luY2UgRW51bWVyYWJs
ZSBub3RpZmllcyBsZW5ndGggb2YgY2hhbmdlCisgICAgfSksCisKKyAgICBfcmVwbGFjZTogZnVu
Y3Rpb24gKGlkeCwgYW10LCBvYmplY3RzKSB7CisgICAgICB2YXIgY29udGVudCA9IF9lbWJlck1l
dGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnY29udGVudCcpOworICAgICAgX2VtYmVyTWV0YWxE
ZWJ1Zy5hc3NlcnQoJ1RoZSBjb250ZW50IHByb3BlcnR5IG9mICcgKyB0aGlzLmNvbnN0cnVjdG9y
ICsgJyBzaG91bGQgYmUgc2V0IGJlZm9yZSBtb2RpZnlpbmcgaXQnLCBjb250ZW50KTsKKyAgICAg
IGlmIChjb250ZW50KSB7CisgICAgICAgIHRoaXMucmVwbGFjZUNvbnRlbnQoaWR4LCBhbXQsIG9i
amVjdHMpOworICAgICAgfQorCisgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgcmVw
bGFjZTogZnVuY3Rpb24gKCkgeworICAgICAgaWYgKF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0Lmdl
dCh0aGlzLCAnYXJyYW5nZWRDb250ZW50JykgPT09IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0Lmdl
dCh0aGlzLCAnY29udGVudCcpKSB7CisgICAgICAgIHRoaXMuX3JlcGxhY2UuYXBwbHkodGhpcywg
YXJndW1lbnRzKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHRocm93IG5ldyBfZW1iZXJNZXRh
bEVycm9yLmRlZmF1bHQoJ1VzaW5nIHJlcGxhY2Ugb24gYW4gYXJyYW5nZWQgQXJyYXlQcm94eSBp
cyBub3QgYWxsb3dlZC4nKTsKKyAgICAgIH0KKyAgICB9LAorCisgICAgX2luc2VydEF0OiBmdW5j
dGlvbiAoaWR4LCBvYmplY3QpIHsKKyAgICAgIGlmIChpZHggPiBfZW1iZXJNZXRhbFByb3BlcnR5
X2dldC5nZXQodGhpcywgJ2NvbnRlbnQubGVuZ3RoJykpIHsKKyAgICAgICAgdGhyb3cgbmV3IF9l
bWJlck1ldGFsRXJyb3IuZGVmYXVsdChPVVRfT0ZfUkFOR0VfRVhDRVBUSU9OKTsKKyAgICAgIH0K
KworICAgICAgdGhpcy5fcmVwbGFjZShpZHgsIDAsIFtvYmplY3RdKTsKKyAgICAgIHJldHVybiB0
aGlzOworICAgIH0sCisKKyAgICBpbnNlcnRBdDogZnVuY3Rpb24gKGlkeCwgb2JqZWN0KSB7Cisg
ICAgICBpZiAoX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdhcnJhbmdlZENvbnRl
bnQnKSA9PT0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdjb250ZW50JykpIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuX2luc2VydEF0KGlkeCwgb2JqZWN0KTsKKyAgICAgIH0gZWxz
ZSB7CisgICAgICAgIHRocm93IG5ldyBfZW1iZXJNZXRhbEVycm9yLmRlZmF1bHQoJ1VzaW5nIGlu
c2VydEF0IG9uIGFuIGFycmFuZ2VkIEFycmF5UHJveHkgaXMgbm90IGFsbG93ZWQuJyk7CisgICAg
ICB9CisgICAgfSwKKworICAgIHJlbW92ZUF0OiBmdW5jdGlvbiAoc3RhcnQsIGxlbikgeworICAg
ICAgaWYgKCdudW1iZXInID09PSB0eXBlb2Ygc3RhcnQpIHsKKyAgICAgICAgdmFyIGNvbnRlbnQg
PSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ2NvbnRlbnQnKTsKKyAgICAgICAg
dmFyIGFycmFuZ2VkQ29udGVudCA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAn
YXJyYW5nZWRDb250ZW50Jyk7CisgICAgICAgIHZhciBpbmRpY2VzID0gW107CisgICAgICAgIHZh
ciBpOworCisgICAgICAgIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPj0gX2VtYmVyTWV0YWxQcm9w
ZXJ0eV9nZXQuZ2V0KHRoaXMsICdsZW5ndGgnKSkgeworICAgICAgICAgIHRocm93IG5ldyBfZW1i
ZXJNZXRhbEVycm9yLmRlZmF1bHQoT1VUX09GX1JBTkdFX0VYQ0VQVElPTik7CisgICAgICAgIH0K
KworICAgICAgICBpZiAobGVuID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICBsZW4gPSAxOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gR2V0IGEgbGlzdCBvZiBpbmRpY2VzIGluIG9yaWdpbmFs
IGNvbnRlbnQgdG8gcmVtb3ZlCisgICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgc3RhcnQgKyBs
ZW47IGkrKykgeworICAgICAgICAgIC8vIFVzZSBhcnJhbmdlZENvbnRlbnQgaGVyZSBzbyB3ZSBh
dm9pZCBjb25mdXNpb24gd2l0aCBvYmplY3RzIHRyYW5zZm9ybWVkIGJ5IG9iamVjdEF0Q29udGVu
dAorICAgICAgICAgIGluZGljZXMucHVzaChjb250ZW50LmluZGV4T2YoX2VtYmVyUnVudGltZU1p
eGluc0FycmF5Lm9iamVjdEF0KGFycmFuZ2VkQ29udGVudCwgaSkpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIFJlcGxhY2UgaW4gcmV2ZXJzZSBvcmRlciBzaW5jZSBpbmRpY2VzIHdpbGwgY2hh
bmdlCisgICAgICAgIGluZGljZXMuc29ydChmdW5jdGlvbiAoYSwgYikgeworICAgICAgICAgIHJl
dHVybiBiIC0gYTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9l
dmVudHMuYmVnaW5Qcm9wZXJ0eUNoYW5nZXMoKTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGlu
ZGljZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICB0aGlzLl9yZXBsYWNlKGluZGljZXNbaV0s
IDEsIEVNUFRZKTsKKyAgICAgICAgfQorICAgICAgICBfZW1iZXJNZXRhbFByb3BlcnR5X2V2ZW50
cy5lbmRQcm9wZXJ0eUNoYW5nZXMoKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgfSwKKworICAgIHB1c2hPYmplY3Q6IGZ1bmN0aW9uIChvYmopIHsKKyAgICAgIHRoaXMuX2lu
c2VydEF0KF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnY29udGVudC5sZW5ndGgn
KSwgb2JqKTsKKyAgICAgIHJldHVybiBvYmo7CisgICAgfSwKKworICAgIHB1c2hPYmplY3RzOiBm
dW5jdGlvbiAob2JqZWN0cykgeworICAgICAgaWYgKCEoX2VtYmVyUnVudGltZU1peGluc0VudW1l
cmFibGUuZGVmYXVsdC5kZXRlY3Qob2JqZWN0cykgfHwgX2VtYmVyUnVudGltZVV0aWxzLmlzQXJy
YXkob2JqZWN0cykpKSB7CisgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ011c3QgcGFzcyBF
bWJlci5FbnVtZXJhYmxlIHRvIEVtYmVyLk11dGFibGVBcnJheSNwdXNoT2JqZWN0cycpOworICAg
ICAgfQorICAgICAgdGhpcy5fcmVwbGFjZShfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhp
cywgJ2xlbmd0aCcpLCAwLCBvYmplY3RzKTsKKyAgICAgIHJldHVybiB0aGlzOworICAgIH0sCisK
KyAgICBzZXRPYmplY3RzOiBmdW5jdGlvbiAob2JqZWN0cykgeworICAgICAgaWYgKG9iamVjdHMu
bGVuZ3RoID09PSAwKSB7CisgICAgICAgIHJldHVybiB0aGlzLmNsZWFyKCk7CisgICAgICB9CisK
KyAgICAgIHZhciBsZW4gPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ2xlbmd0
aCcpOworICAgICAgdGhpcy5fcmVwbGFjZSgwLCBsZW4sIG9iamVjdHMpOworICAgICAgcmV0dXJu
IHRoaXM7CisgICAgfSwKKworICAgIHVuc2hpZnRPYmplY3Q6IGZ1bmN0aW9uIChvYmopIHsKKyAg
ICAgIHRoaXMuX2luc2VydEF0KDAsIG9iaik7CisgICAgICByZXR1cm4gb2JqOworICAgIH0sCisK
KyAgICB1bnNoaWZ0T2JqZWN0czogZnVuY3Rpb24gKG9iamVjdHMpIHsKKyAgICAgIHRoaXMuX3Jl
cGxhY2UoMCwgMCwgb2JqZWN0cyk7CisgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAg
c2xpY2U6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciBhcnIgPSB0aGlzLnRvQXJyYXkoKTsKKyAg
ICAgIHJldHVybiBhcnIuc2xpY2UuYXBwbHkoYXJyLCBhcmd1bWVudHMpOworICAgIH0sCisKKyAg
ICBhcnJhbmdlZENvbnRlbnRBcnJheVdpbGxDaGFuZ2U6IGZ1bmN0aW9uIChpdGVtLCBpZHgsIHJl
bW92ZWRDbnQsIGFkZGVkQ250KSB7CisgICAgICB0aGlzLmFycmF5Q29udGVudFdpbGxDaGFuZ2Uo
aWR4LCByZW1vdmVkQ250LCBhZGRlZENudCk7CisgICAgfSwKKworICAgIGFycmFuZ2VkQ29udGVu
dEFycmF5RGlkQ2hhbmdlOiBmdW5jdGlvbiAoaXRlbSwgaWR4LCByZW1vdmVkQ250LCBhZGRlZENu
dCkgeworICAgICAgdGhpcy5hcnJheUNvbnRlbnREaWRDaGFuZ2UoaWR4LCByZW1vdmVkQ250LCBh
ZGRlZENudCk7CisgICAgfSwKKworICAgIGluaXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHRoaXMu
X3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICB0aGlzLl9zZXR1cENvbnRlbnQo
KTsKKyAgICAgIHRoaXMuX3NldHVwQXJyYW5nZWRDb250ZW50KCk7CisgICAgfSwKKworICAgIHdp
bGxEZXN0cm95OiBmdW5jdGlvbiAoKSB7CisgICAgICB0aGlzLl90ZWFyZG93bkFycmFuZ2VkQ29u
dGVudCgpOworICAgICAgdGhpcy5fdGVhcmRvd25Db250ZW50KCk7CisgICAgfQorICB9KTsKKwor
ICBleHBvcnRzLmRlZmF1bHQgPSBBcnJheVByb3h5OworfSk7CitlbmlmZWQoJ2VtYmVyLXJ1bnRp
bWUvc3lzdGVtL2NvbnRhaW5lcicsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9z
ZXQnLCAnY29udGFpbmVyL3JlZ2lzdHJ5JywgJ2NvbnRhaW5lci9jb250YWluZXInLCAnY29udGFp
bmVyL293bmVyJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbFByb3BlcnR5X3NldCwg
X2NvbnRhaW5lclJlZ2lzdHJ5LCBfY29udGFpbmVyQ29udGFpbmVyLCBfY29udGFpbmVyT3duZXIp
IHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIF9jb250YWluZXJSZWdpc3RyeS5kZWZhdWx0LnNldCA9
IF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LnNldDsKKyAgX2NvbnRhaW5lckNvbnRhaW5lci5kZWZh
dWx0LnNldCA9IF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LnNldDsKKworICBleHBvcnRzLlJlZ2lz
dHJ5ID0gX2NvbnRhaW5lclJlZ2lzdHJ5LmRlZmF1bHQ7CisgIGV4cG9ydHMuQ29udGFpbmVyID0g
X2NvbnRhaW5lckNvbnRhaW5lci5kZWZhdWx0OworICBleHBvcnRzLmdldE93bmVyID0gX2NvbnRh
aW5lck93bmVyLmdldE93bmVyOworICBleHBvcnRzLnNldE93bmVyID0gX2NvbnRhaW5lck93bmVy
LnNldE93bmVyOworfSk7CitlbmlmZWQoJ2VtYmVyLXJ1bnRpbWUvc3lzdGVtL2NvcmVfb2JqZWN0
JywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLW1ldGFsL2ZlYXR1cmVz
JywgJ2VtYmVyLW1ldGFsL2Fzc2lnbicsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQnLCAnZW1i
ZXItbWV0YWwvdXRpbHMnLCAnZW1iZXItbWV0YWwvbWV0YScsICdlbWJlci1tZXRhbC9jaGFpbnMn
LCAnZW1iZXItbWV0YWwvZXZlbnRzJywgJ2VtYmVyLW1ldGFsL21peGluJywgJ2VtYmVyLW1ldGFs
L2Vycm9yJywgJ2VtYmVyLXJ1bnRpbWUvbWl4aW5zL2FjdGlvbl9oYW5kbGVyJywgJ2VtYmVyLW1l
dGFsL3Byb3BlcnRpZXMnLCAnZW1iZXItbWV0YWwvYmluZGluZycsICdlbWJlci1tZXRhbC9jb21w
dXRlZCcsICdlbWJlci1tZXRhbC9pbmplY3RlZF9wcm9wZXJ0eScsICdlbWJlci1tZXRhbC9ydW5f
bG9vcCcsICdlbWJlci1tZXRhbC93YXRjaGluZycsICdlbWJlci1tZXRhbC9jb3JlJywgJ2VtYmVy
LXJ1bnRpbWUvaW5qZWN0JywgJ2VtYmVyLW1ldGFsL3N5bWJvbCddLCBmdW5jdGlvbiAoZXhwb3J0
cywgX2VtYmVyTWV0YWxEZWJ1ZywgX2VtYmVyTWV0YWxGZWF0dXJlcywgX2VtYmVyTWV0YWxBc3Np
Z24sIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LCBfZW1iZXJNZXRhbFV0aWxzLCBfZW1iZXJNZXRh
bE1ldGEsIF9lbWJlck1ldGFsQ2hhaW5zLCBfZW1iZXJNZXRhbEV2ZW50cywgX2VtYmVyTWV0YWxN
aXhpbiwgX2VtYmVyTWV0YWxFcnJvciwgX2VtYmVyUnVudGltZU1peGluc0FjdGlvbl9oYW5kbGVy
LCBfZW1iZXJNZXRhbFByb3BlcnRpZXMsIF9lbWJlck1ldGFsQmluZGluZywgX2VtYmVyTWV0YWxD
b21wdXRlZCwgX2VtYmVyTWV0YWxJbmplY3RlZF9wcm9wZXJ0eSwgX2VtYmVyTWV0YWxSdW5fbG9v
cCwgX2VtYmVyTWV0YWxXYXRjaGluZywgX2VtYmVyTWV0YWxDb3JlLCBfZW1iZXJSdW50aW1lSW5q
ZWN0LCBfZW1iZXJNZXRhbFN5bWJvbCkgeworICAnbm8gdXNlIHN0cmljdCc7CisgIC8vIFJlbW92
ZSAidXNlIHN0cmljdCI7IGZyb20gdHJhbnNwaWxlZCBtb2R1bGUgdW50aWwKKyAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODAzOCBpcyBmaXhlZAorCisgIC8q
KgorICAgIEBtb2R1bGUgZW1iZXIKKyAgICBAc3VibW9kdWxlIGVtYmVyLXJ1bnRpbWUKKyAgKi8K
KworICAvLyB1c2luZyBlbWJlci1tZXRhbC9saWIvbWFpbiBoZXJlIHRvIGVuc3VyZSB0aGF0IGVt
YmVyLWRlYnVnIGlzIHNldHVwCisgIC8vIGlmIHByZXNlbnQKKworICB2YXIgX01peGluJGNyZWF0
ZTsKKworICB2YXIgUE9TVF9JTklUID0gX2VtYmVyTWV0YWxTeW1ib2wuZGVmYXVsdCgnUE9TVF9J
TklUJyk7CisgIGV4cG9ydHMuUE9TVF9JTklUID0gUE9TVF9JTklUOworICB2YXIgc2NoZWR1bGUg
PSBfZW1iZXJNZXRhbFJ1bl9sb29wLmRlZmF1bHQuc2NoZWR1bGU7CisgIHZhciBhcHBseU1peGlu
ID0gX2VtYmVyTWV0YWxNaXhpbi5NaXhpbi5fYXBwbHk7CisgIHZhciBmaW5pc2hQYXJ0aWFsID0g
X2VtYmVyTWV0YWxNaXhpbi5NaXhpbi5maW5pc2hQYXJ0aWFsOworICB2YXIgcmVvcGVuID0gX2Vt
YmVyTWV0YWxNaXhpbi5NaXhpbi5wcm90b3R5cGUucmVvcGVuOworICB2YXIgaGFzQ2FjaGVkQ29t
cHV0ZWRQcm9wZXJ0aWVzID0gZmFsc2U7CisKKyAgZnVuY3Rpb24gbWFrZUN0b3IoKSB7CisgICAg
Ly8gTm90ZTogYXZvaWQgYWNjZXNzaW5nIGFueSBwcm9wZXJ0aWVzIG9uIHRoZSBvYmplY3Qgc2lu
Y2UgaXQgbWFrZXMgdGhlCisgICAgLy8gbWV0aG9kIGEgbG90IGZhc3Rlci4gVGhpcyBpcyBnbHVl
IGNvZGUgc28gd2Ugd2FudCBpdCB0byBiZSBhcyBmYXN0IGFzCisgICAgLy8gcG9zc2libGUuCisK
KyAgICB2YXIgd2FzQXBwbGllZCA9IGZhbHNlOworICAgIHZhciBpbml0UHJvcGVydGllczsKKwor
ICAgIHZhciBDbGFzcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgIGlmICghd2FzQXBwbGllZCkgewor
ICAgICAgICBDbGFzcy5wcm90bygpOyAvLyBwcmVwYXJlIHByb3RvdHlwZS4uLgorICAgICAgfQor
CisgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgaW5pdFByb3BlcnRp
ZXMgPSBbYXJndW1lbnRzWzBdXTsKKyAgICAgIH0KKworICAgICAgdGhpcy5fX2RlZmluZU5vbkVu
dW1lcmFibGUoX2VtYmVyTWV0YWxVdGlscy5HVUlEX0tFWV9QUk9QRVJUWSk7CisgICAgICB2YXIg
bSA9IF9lbWJlck1ldGFsTWV0YS5tZXRhKHRoaXMpOworICAgICAgdmFyIHByb3RvID0gbS5wcm90
bzsKKyAgICAgIG0ucHJvdG8gPSB0aGlzOworICAgICAgaWYgKGluaXRQcm9wZXJ0aWVzKSB7Cisg
ICAgICAgIC8vIGNhcHR1cmUgbG9jYWxseSBzbyB3ZSBjYW4gY2xlYXIgdGhlIGNsb3NlZCBvdmVy
IHZhcmlhYmxlCisgICAgICAgIHZhciBwcm9wcyA9IGluaXRQcm9wZXJ0aWVzOworICAgICAgICBp
bml0UHJvcGVydGllcyA9IG51bGw7CisKKyAgICAgICAgdmFyIGNvbmNhdGVuYXRlZFByb3BlcnRp
ZXMgPSB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXM7CisgICAgICAgIHZhciBtZXJnZWRQcm9w
ZXJ0aWVzID0gdGhpcy5tZXJnZWRQcm9wZXJ0aWVzOworCisgICAgICAgIGZvciAodmFyIGkgPSAw
LCBsID0gcHJvcHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CisgICAgICAgICAgdmFyIHByb3BlcnRp
ZXMgPSBwcm9wc1tpXTsKKworICAgICAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdFbWJl
ci5PYmplY3QuY3JlYXRlIG5vIGxvbmdlciBzdXBwb3J0cyBtaXhpbmcgaW4gb3RoZXIgJyArICdk
ZWZpbml0aW9ucywgdXNlIC5leHRlbmQgJiAuY3JlYXRlIHNlcGFyYXRlbHkgaW5zdGVhZC4nLCAh
KHByb3BlcnRpZXMgaW5zdGFuY2VvZiBfZW1iZXJNZXRhbE1peGluLk1peGluKSk7CisKKyAgICAg
ICAgICBpZiAodHlwZW9mIHByb3BlcnRpZXMgIT09ICdvYmplY3QnICYmIHByb3BlcnRpZXMgIT09
IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IF9lbWJlck1ldGFsRXJyb3IuZGVm
YXVsdCgnRW1iZXIuT2JqZWN0LmNyZWF0ZSBvbmx5IGFjY2VwdHMgb2JqZWN0cy4nKTsKKyAgICAg
ICAgICB9CisKKyAgICAgICAgICBpZiAoIXByb3BlcnRpZXMpIHsKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgIH0KKworICAgICAgICAgIHZhciBrZXlOYW1lcyA9IE9iamVjdC5rZXlz
KHByb3BlcnRpZXMpOworCisgICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGxsID0ga2V5TmFtZXMu
bGVuZ3RoOyBqIDwgbGw7IGorKykgeworICAgICAgICAgICAgdmFyIGtleU5hbWUgPSBrZXlOYW1l
c1tqXTsKKyAgICAgICAgICAgIHZhciB2YWx1ZSA9IHByb3BlcnRpZXNba2V5TmFtZV07CisKKyAg
ICAgICAgICAgIGlmIChfZW1iZXJNZXRhbE1peGluLklTX0JJTkRJTkcudGVzdChrZXlOYW1lKSkg
eworICAgICAgICAgICAgICBtLndyaXRlQmluZGluZ3Moa2V5TmFtZSwgdmFsdWUpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICB2YXIgcG9zc2libGVEZXNjID0gdGhpc1trZXlOYW1lXTsK
KyAgICAgICAgICAgIHZhciBkZXNjID0gcG9zc2libGVEZXNjICE9PSBudWxsICYmIHR5cGVvZiBw
b3NzaWJsZURlc2MgPT09ICdvYmplY3QnICYmIHBvc3NpYmxlRGVzYy5pc0Rlc2NyaXB0b3IgPyBw
b3NzaWJsZURlc2MgOiB1bmRlZmluZWQ7CisKKyAgICAgICAgICAgIF9lbWJlck1ldGFsRGVidWcu
YXNzZXJ0KCdFbWJlci5PYmplY3QuY3JlYXRlIG5vIGxvbmdlciBzdXBwb3J0cyBkZWZpbmluZyBj
b21wdXRlZCAnICsgJ3Byb3BlcnRpZXMuIERlZmluZSBjb21wdXRlZCBwcm9wZXJ0aWVzIHVzaW5n
IGV4dGVuZCgpIG9yIHJlb3BlbigpICcgKyAnYmVmb3JlIGNhbGxpbmcgY3JlYXRlKCkuJywgISh2
YWx1ZSBpbnN0YW5jZW9mIF9lbWJlck1ldGFsQ29tcHV0ZWQuQ29tcHV0ZWRQcm9wZXJ0eSkpOwor
ICAgICAgICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ0VtYmVyLk9iamVjdC5jcmVhdGUg
bm8gbG9uZ2VyIHN1cHBvcnRzIGRlZmluaW5nIG1ldGhvZHMgdGhhdCBjYWxsIF9zdXBlci4nLCAh
KHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB2YWx1ZS50b1N0cmluZygpLmluZGV4T2Yo
Jy5fc3VwZXInKSAhPT0gLTEpKTsKKyAgICAgICAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0
KCdgYWN0aW9uc2AgbXVzdCBiZSBwcm92aWRlZCBhdCBleHRlbmQgdGltZSwgbm90IGF0IGNyZWF0
ZSB0aW1lLCAnICsgJ3doZW4gRW1iZXIuQWN0aW9uSGFuZGxlciBpcyB1c2VkIChpLmUuIHZpZXdz
LCBjb250cm9sbGVycyAmIHJvdXRlcykuJywgIShrZXlOYW1lID09PSAnYWN0aW9ucycgJiYgX2Vt
YmVyUnVudGltZU1peGluc0FjdGlvbl9oYW5kbGVyLmRlZmF1bHQuZGV0ZWN0KHRoaXMpKSk7CisK
KyAgICAgICAgICAgIGlmIChjb25jYXRlbmF0ZWRQcm9wZXJ0aWVzICYmIGNvbmNhdGVuYXRlZFBy
b3BlcnRpZXMubGVuZ3RoID4gMCAmJiBjb25jYXRlbmF0ZWRQcm9wZXJ0aWVzLmluZGV4T2Yoa2V5
TmFtZSkgPj0gMCkgeworICAgICAgICAgICAgICB2YXIgYmFzZVZhbHVlID0gdGhpc1trZXlOYW1l
XTsKKworICAgICAgICAgICAgICBpZiAoYmFzZVZhbHVlKSB7CisgICAgICAgICAgICAgICAgaWYg
KCdmdW5jdGlvbicgPT09IHR5cGVvZiBiYXNlVmFsdWUuY29uY2F0KSB7CisgICAgICAgICAgICAg
ICAgICB2YWx1ZSA9IGJhc2VWYWx1ZS5jb25jYXQodmFsdWUpOworICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICB2YWx1ZSA9IF9lbWJlck1ldGFsVXRpbHMubWFrZUFy
cmF5KGJhc2VWYWx1ZSkuY29uY2F0KHZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBfZW1iZXJNZXRhbFV0aWxz
Lm1ha2VBcnJheSh2YWx1ZSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKG1lcmdlZFByb3BlcnRpZXMgJiYgbWVyZ2VkUHJvcGVydGllcy5sZW5ndGgg
JiYgbWVyZ2VkUHJvcGVydGllcy5pbmRleE9mKGtleU5hbWUpID49IDApIHsKKyAgICAgICAgICAg
ICAgdmFyIG9yaWdpbmFsVmFsdWUgPSB0aGlzW2tleU5hbWVdOworCisgICAgICAgICAgICAgIHZh
bHVlID0gX2VtYmVyTWV0YWxBc3NpZ24uZGVmYXVsdCh7fSwgb3JpZ2luYWxWYWx1ZSwgdmFsdWUp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZGVzYykgeworICAgICAgICAgICAg
ICBkZXNjLnNldCh0aGlzLCBrZXlOYW1lLCB2YWx1ZSk7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2V0VW5rbm93blByb3BlcnR5ID09PSAnZnVu
Y3Rpb24nICYmICEoa2V5TmFtZSBpbiB0aGlzKSkgeworICAgICAgICAgICAgICAgIHRoaXMuc2V0
VW5rbm93blByb3BlcnR5KGtleU5hbWUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBfZW1iZXJNZXRhbFByb3BlcnRpZXMuZGVmaW5lUHJvcGVydHkodGhp
cywga2V5TmFtZSwgbnVsbCwgdmFsdWUpOyAvLyBzZXR1cCBtYW5kYXRvcnkgc2V0dGVyCisgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
IH0KKworICAgICAgZmluaXNoUGFydGlhbCh0aGlzLCBtKTsKKworICAgICAgdmFyIGxlbmd0aCA9
IGFyZ3VtZW50cy5sZW5ndGg7CisKKyAgICAgIGlmIChsZW5ndGggPT09IDApIHsKKyAgICAgICAg
dGhpcy5pbml0KCk7CisgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gMSkgeworICAgICAgICB0
aGlzLmluaXQoYXJndW1lbnRzWzBdKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIC8vIHY4IGJ1
ZyBwb3RlbnRpYWxseSBpbmNvcnJlY3RseSBkZW9wdHMgdGhpcyBmdW5jdGlvbjogaHR0cHM6Ly9j
b2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTM3MDkKKyAgICAgICAgLy8gd2Ug
bWF5IHdhbnQgdG8ga2VlcCB0aGlzIGFyb3VuZCB0aWxsIHRoaXMgYWdlcyBvdXQgb24gbW9iaWxl
CisgICAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbmd0aCk7CisgICAgICAgIGZvciAodmFy
IHggPSAwOyB4IDwgbGVuZ3RoOyB4KyspIHsKKyAgICAgICAgICBhcmdzW3hdID0gYXJndW1lbnRz
W3hdOworICAgICAgICB9CisgICAgICAgIHRoaXMuaW5pdC5hcHBseSh0aGlzLCBhcmdzKTsKKyAg
ICAgIH0KKworICAgICAgdGhpc1tQT1NUX0lOSVRdKCk7CisKKyAgICAgIG0ucHJvdG8gPSBwcm90
bzsKKyAgICAgIF9lbWJlck1ldGFsQ2hhaW5zLmZpbmlzaENoYWlucyh0aGlzKTsKKyAgICAgIF9l
bWJlck1ldGFsRXZlbnRzLnNlbmRFdmVudCh0aGlzLCAnaW5pdCcpOworICAgIH07CisKKyAgICBD
bGFzcy50b1N0cmluZyA9IF9lbWJlck1ldGFsTWl4aW4uTWl4aW4ucHJvdG90eXBlLnRvU3RyaW5n
OworICAgIENsYXNzLndpbGxSZW9wZW4gPSBmdW5jdGlvbiAoKSB7CisgICAgICBpZiAod2FzQXBw
bGllZCkgeworICAgICAgICBDbGFzcy5Qcm90b3R5cGVNaXhpbiA9IF9lbWJlck1ldGFsTWl4aW4u
TWl4aW4uY3JlYXRlKENsYXNzLlByb3RvdHlwZU1peGluKTsKKyAgICAgIH0KKworICAgICAgd2Fz
QXBwbGllZCA9IGZhbHNlOworICAgIH07CisKKyAgICBDbGFzcy5faW5pdFByb3BlcnRpZXMgPSBm
dW5jdGlvbiAoYXJncykgeworICAgICAgaW5pdFByb3BlcnRpZXMgPSBhcmdzOworICAgIH07CisK
KyAgICBDbGFzcy5wcm90byA9IGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciBzdXBlcmNsYXNzID0g
Q2xhc3Muc3VwZXJjbGFzczsKKyAgICAgIGlmIChzdXBlcmNsYXNzKSB7CisgICAgICAgIHN1cGVy
Y2xhc3MucHJvdG8oKTsKKyAgICAgIH0KKworICAgICAgaWYgKCF3YXNBcHBsaWVkKSB7CisgICAg
ICAgIHdhc0FwcGxpZWQgPSB0cnVlOworICAgICAgICBDbGFzcy5Qcm90b3R5cGVNaXhpbi5hcHBs
eVBhcnRpYWwoQ2xhc3MucHJvdG90eXBlKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHRoaXMu
cHJvdG90eXBlOworICAgIH07CisKKyAgICByZXR1cm4gQ2xhc3M7CisgIH0KKworICAvKioKKyAg
ICBAY2xhc3MgQ29yZU9iamVjdAorICAgIEBuYW1lc3BhY2UgRW1iZXIKKyAgICBAcHVibGljCisg
ICovCisgIHZhciBDb3JlT2JqZWN0ID0gbWFrZUN0b3IoKTsKKyAgQ29yZU9iamVjdC50b1N0cmlu
ZyA9IGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4gJ0VtYmVyLkNvcmVPYmplY3QnOworICB9Owor
ICBDb3JlT2JqZWN0LlByb3RvdHlwZU1peGluID0gX2VtYmVyTWV0YWxNaXhpbi5NaXhpbi5jcmVh
dGUoKF9NaXhpbiRjcmVhdGUgPSB7CisgICAgcmVvcGVuOiBmdW5jdGlvbiAoKSB7CisgICAgICBm
b3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5
ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykgeworICAgICAgICBhcmdzW19rZXldID0gYXJndW1l
bnRzW19rZXldOworICAgICAgfQorCisgICAgICBhcHBseU1peGluKHRoaXMsIGFyZ3MsIHRydWUp
OworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKworICAgIC8qKgorICAgICAgQW4gb3ZlcnJp
ZGFibGUgbWV0aG9kIGNhbGxlZCB3aGVuIG9iamVjdHMgYXJlIGluc3RhbnRpYXRlZC4gQnkgZGVm
YXVsdCwKKyAgICAgIGRvZXMgbm90aGluZyB1bmxlc3MgaXQgaXMgb3ZlcnJpZGRlbiBkdXJpbmcg
Y2xhc3MgZGVmaW5pdGlvbi4KKyAgICAgICBFeGFtcGxlOgorICAgICAgIGBgYGphdmFzY3JpcHQK
KyAgICAgIEFwcC5QZXJzb24gPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKKyAgICAgICAgaW5pdDog
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgYWxlcnQoJ05hbWUgaXMgJyArIHRoaXMuZ2V0KCduYW1l
JykpOworICAgICAgICB9CisgICAgICB9KTsKKyAgICAgICB2YXIgc3RldmUgPSBBcHAuUGVyc29u
LmNyZWF0ZSh7CisgICAgICAgIG5hbWU6ICJTdGV2ZSIKKyAgICAgIH0pOworICAgICAgIC8vIGFs
ZXJ0cyAnTmFtZSBpcyBTdGV2ZScuCisgICAgICBgYGAKKyAgICAgICBOT1RFOiBJZiB5b3UgZG8g
b3ZlcnJpZGUgYGluaXRgIGZvciBhIGZyYW1ld29yayBjbGFzcyBsaWtlIGBFbWJlci5WaWV3YCwK
KyAgICAgIGJlIHN1cmUgdG8gY2FsbCBgdGhpcy5fc3VwZXIoLi4uYXJndW1lbnRzKWAgaW4geW91
cgorICAgICAgYGluaXRgIGRlY2xhcmF0aW9uISBJZiB5b3UgZG9uJ3QsIEVtYmVyIG1heSBub3Qg
aGF2ZSBhbiBvcHBvcnR1bml0eSB0bworICAgICAgZG8gaW1wb3J0YW50IHNldHVwIHdvcmssIGFu
ZCB5b3UnbGwgc2VlIHN0cmFuZ2UgYmVoYXZpb3IgaW4geW91cgorICAgICAgYXBwbGljYXRpb24u
CisgICAgICAgQG1ldGhvZCBpbml0CisgICAgICBAcHVibGljCisgICAgKi8KKyAgICBpbml0OiBm
dW5jdGlvbiAoKSB7fQorCisgIH0sIF9NaXhpbiRjcmVhdGVbUE9TVF9JTklUXSA9IGZ1bmN0aW9u
ICgpIHt9LCBfTWl4aW4kY3JlYXRlLl9fZGVmaW5lTm9uRW51bWVyYWJsZSA9IGZ1bmN0aW9uIChw
cm9wZXJ0eSkgeworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eS5uYW1l
LCBwcm9wZXJ0eS5kZXNjcmlwdG9yKTsKKyAgICAvL3RoaXNbcHJvcGVydHkubmFtZV0gPSBwcm9w
ZXJ0eS5kZXNjcmlwdG9yLnZhbHVlOworICB9LCBfTWl4aW4kY3JlYXRlLmNvbmNhdGVuYXRlZFBy
b3BlcnRpZXMgPSBudWxsLCBfTWl4aW4kY3JlYXRlLm1lcmdlZFByb3BlcnRpZXMgPSBudWxsLCBf
TWl4aW4kY3JlYXRlLmlzRGVzdHJveWVkID0gZmFsc2UsIF9NaXhpbiRjcmVhdGUuaXNEZXN0cm95
aW5nID0gZmFsc2UsIF9NaXhpbiRjcmVhdGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHsKKyAgICBp
ZiAodGhpcy5pc0Rlc3Ryb3lpbmcpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgdGhpcy5p
c0Rlc3Ryb3lpbmcgPSB0cnVlOworCisgICAgc2NoZWR1bGUoJ2FjdGlvbnMnLCB0aGlzLCB0aGlz
LndpbGxEZXN0cm95KTsKKyAgICBzY2hlZHVsZSgnZGVzdHJveScsIHRoaXMsIHRoaXMuX3NjaGVk
dWxlZERlc3Ryb3kpOworICAgIHJldHVybiB0aGlzOworICB9LCBfTWl4aW4kY3JlYXRlLndpbGxE
ZXN0cm95ID0gX2VtYmVyTWV0YWxDb3JlLkssIF9NaXhpbiRjcmVhdGUuX3NjaGVkdWxlZERlc3Ry
b3kgPSBmdW5jdGlvbiAoKSB7CisgICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHsKKyAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgX2VtYmVyTWV0YWxXYXRjaGluZy5kZXN0cm95KHRoaXMpOworICAg
IHRoaXMuaXNEZXN0cm95ZWQgPSB0cnVlOworICB9LCBfTWl4aW4kY3JlYXRlLmJpbmQgPSBmdW5j
dGlvbiAodG8sIGZyb20pIHsKKyAgICBpZiAoIShmcm9tIGluc3RhbmNlb2YgX2VtYmVyTWV0YWxC
aW5kaW5nLkJpbmRpbmcpKSB7CisgICAgICBmcm9tID0gX2VtYmVyTWV0YWxCaW5kaW5nLkJpbmRp
bmcuZnJvbShmcm9tKTsKKyAgICB9CisgICAgZnJvbS50byh0bykuY29ubmVjdCh0aGlzKTsKKyAg
ICByZXR1cm4gZnJvbTsKKyAgfSwgX01peGluJGNyZWF0ZS50b1N0cmluZyA9IGZ1bmN0aW9uICgp
IHsKKyAgICB2YXIgaGFzVG9TdHJpbmdFeHRlbnNpb24gPSB0eXBlb2YgdGhpcy50b1N0cmluZ0V4
dGVuc2lvbiA9PT0gJ2Z1bmN0aW9uJzsKKyAgICB2YXIgZXh0ZW5zaW9uID0gaGFzVG9TdHJpbmdF
eHRlbnNpb24gPyAnOicgKyB0aGlzLnRvU3RyaW5nRXh0ZW5zaW9uKCkgOiAnJzsKKyAgICB2YXIg
cmV0ID0gJzwnICsgdGhpcy5jb25zdHJ1Y3Rvci50b1N0cmluZygpICsgJzonICsgX2VtYmVyTWV0
YWxVdGlscy5ndWlkRm9yKHRoaXMpICsgZXh0ZW5zaW9uICsgJz4nOworCisgICAgcmV0dXJuIHJl
dDsKKyAgfSwgX01peGluJGNyZWF0ZSkpOworCisgIENvcmVPYmplY3QuUHJvdG90eXBlTWl4aW4u
b3duZXJDb25zdHJ1Y3RvciA9IENvcmVPYmplY3Q7CisKKyAgQ29yZU9iamVjdC5fX3N1cGVyX18g
PSBudWxsOworCisgIHZhciBDbGFzc01peGluUHJvcHMgPSB7CisKKyAgICBDbGFzc01peGluOiBf
ZW1iZXJNZXRhbE1peGluLlJFUVVJUkVELAorCisgICAgUHJvdG90eXBlTWl4aW46IF9lbWJlck1l
dGFsTWl4aW4uUkVRVUlSRUQsCisKKyAgICBpc0NsYXNzOiB0cnVlLAorCisgICAgaXNNZXRob2Q6
IGZhbHNlLAorCisgICAgLyoqCisgICAgICBDcmVhdGVzIGEgbmV3IHN1YmNsYXNzLgorICAgICAg
IGBgYGphdmFzY3JpcHQKKyAgICAgIEFwcC5QZXJzb24gPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsK
KyAgICAgICAgc2F5OiBmdW5jdGlvbih0aGluZykgeworICAgICAgICAgIGFsZXJ0KHRoaW5nKTsK
KyAgICAgICAgIH0KKyAgICAgIH0pOworICAgICAgYGBgCisgICAgICAgVGhpcyBkZWZpbmVzIGEg
bmV3IHN1YmNsYXNzIG9mIEVtYmVyLk9iamVjdDogYEFwcC5QZXJzb25gLiBJdCBjb250YWlucyBv
bmUgbWV0aG9kOiBgc2F5KClgLgorICAgICAgIFlvdSBjYW4gYWxzbyBjcmVhdGUgYSBzdWJjbGFz
cyBmcm9tIGFueSBleGlzdGluZyBjbGFzcyBieSBjYWxsaW5nIGl0cyBgZXh0ZW5kKClgIG1ldGhv
ZC4KKyAgICAgIEZvciBleGFtcGxlLCB5b3UgbWlnaHQgd2FudCB0byBjcmVhdGUgYSBzdWJjbGFz
cyBvZiBFbWJlcidzIGJ1aWx0LWluIGBFbWJlci5WaWV3YCBjbGFzczoKKyAgICAgICBgYGBqYXZh
c2NyaXB0CisgICAgICBBcHAuUGVyc29uVmlldyA9IEVtYmVyLlZpZXcuZXh0ZW5kKHsKKyAgICAg
ICAgdGFnTmFtZTogJ2xpJywKKyAgICAgICAgY2xhc3NOYW1lQmluZGluZ3M6IFsnaXNBZG1pbmlz
dHJhdG9yJ10KKyAgICAgIH0pOworICAgICAgYGBgCisgICAgICAgV2hlbiBkZWZpbmluZyBhIHN1
YmNsYXNzLCB5b3UgY2FuIG92ZXJyaWRlIG1ldGhvZHMgYnV0IHN0aWxsIGFjY2VzcyB0aGUKKyAg
ICAgIGltcGxlbWVudGF0aW9uIG9mIHlvdXIgcGFyZW50IGNsYXNzIGJ5IGNhbGxpbmcgdGhlIHNw
ZWNpYWwgYF9zdXBlcigpYCBtZXRob2Q6CisgICAgICAgYGBgamF2YXNjcmlwdAorICAgICAgQXBw
LlBlcnNvbiA9IEVtYmVyLk9iamVjdC5leHRlbmQoeworICAgICAgICBzYXk6IGZ1bmN0aW9uKHRo
aW5nKSB7CisgICAgICAgICAgdmFyIG5hbWUgPSB0aGlzLmdldCgnbmFtZScpOworICAgICAgICAg
IGFsZXJ0KG5hbWUgKyAnIHNheXM6ICcgKyB0aGluZyk7CisgICAgICAgIH0KKyAgICAgIH0pOwor
ICAgICAgIEFwcC5Tb2xkaWVyID0gQXBwLlBlcnNvbi5leHRlbmQoeworICAgICAgICBzYXk6IGZ1
bmN0aW9uKHRoaW5nKSB7CisgICAgICAgICAgdGhpcy5fc3VwZXIodGhpbmcgKyAiLCBzaXIhIik7
CisgICAgICAgIH0sCisgICAgICAgIG1hcmNoOiBmdW5jdGlvbihudW1iZXJPZkhvdXJzKSB7Cisg
ICAgICAgICAgYWxlcnQodGhpcy5nZXQoJ25hbWUnKSArICcgbWFyY2hlcyBmb3IgJyArIG51bWJl
ck9mSG91cnMgKyAnIGhvdXJzLicpOworICAgICAgICB9CisgICAgICB9KTsKKyAgICAgICB2YXIg
eWVodWRhID0gQXBwLlNvbGRpZXIuY3JlYXRlKHsKKyAgICAgICAgbmFtZTogIlllaHVkYSBLYXR6
IgorICAgICAgfSk7CisgICAgICAgeWVodWRhLnNheSgiWWVzIik7ICAvLyBhbGVydHMgIlllaHVk
YSBLYXR6IHNheXM6IFllcywgc2lyISIKKyAgICAgIGBgYAorICAgICAgIFRoZSBgY3JlYXRlKClg
IG9uIGxpbmUgIzE3IGNyZWF0ZXMgYW4gKmluc3RhbmNlKiBvZiB0aGUgYEFwcC5Tb2xkaWVyYCBj
bGFzcy4KKyAgICAgIFRoZSBgZXh0ZW5kKClgIG9uIGxpbmUgIzggY3JlYXRlcyBhICpzdWJjbGFz
cyogb2YgYEFwcC5QZXJzb25gLiBBbnkgaW5zdGFuY2UKKyAgICAgIG9mIHRoZSBgQXBwLlBlcnNv
bmAgY2xhc3Mgd2lsbCAqbm90KiBoYXZlIHRoZSBgbWFyY2goKWAgbWV0aG9kLgorICAgICAgIFlv
dSBjYW4gYWxzbyBwYXNzIGBNaXhpbmAgY2xhc3NlcyB0byBhZGQgYWRkaXRpb25hbCBwcm9wZXJ0
aWVzIHRvIHRoZSBzdWJjbGFzcy4KKyAgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICBBcHAuUGVy
c29uID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7CisgICAgICAgIHNheTogZnVuY3Rpb24odGhpbmcp
IHsKKyAgICAgICAgICBhbGVydCh0aGlzLmdldCgnbmFtZScpICsgJyBzYXlzOiAnICsgdGhpbmcp
OworICAgICAgICB9CisgICAgICB9KTsKKyAgICAgICBBcHAuU2luZ2luZ01peGluID0gTWl4aW4u
Y3JlYXRlKHsKKyAgICAgICAgc2luZzogZnVuY3Rpb24odGhpbmcpeworICAgICAgICAgIGFsZXJ0
KHRoaXMuZ2V0KCduYW1lJykgKyAnIHNpbmdzOiBsYSBsYSBsYSAnICsgdGhpbmcpOworICAgICAg
ICB9CisgICAgICB9KTsKKyAgICAgICBBcHAuQnJvYWR3YXlTdGFyID0gQXBwLlBlcnNvbi5leHRl
bmQoQXBwLlNpbmdpbmdNaXhpbiwgeworICAgICAgICBkYW5jZTogZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgYWxlcnQodGhpcy5nZXQoJ25hbWUnKSArICcgZGFuY2VzOiB0YXAgdGFwIHRhcCB0YXAg
Jyk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgICAgYGBgCisgICAgICAgVGhlIGBBcHAuQnJv
YWR3YXlTdGFyYCBjbGFzcyBjb250YWlucyB0aHJlZSBtZXRob2RzOiBgc2F5KClgLCBgc2luZygp
YCwgYW5kIGBkYW5jZSgpYC4KKyAgICAgICBAbWV0aG9kIGV4dGVuZAorICAgICAgQHN0YXRpYwor
ICAgICAgIEBwYXJhbSB7TWl4aW59IFttaXhpbnNdKiBPbmUgb3IgbW9yZSBNaXhpbiBjbGFzc2Vz
CisgICAgICBAcGFyYW0ge09iamVjdH0gW2FyZ3VtZW50c10qIE9iamVjdCBjb250YWluaW5nIHZh
bHVlcyB0byB1c2Ugd2l0aGluIHRoZSBuZXcgY2xhc3MKKyAgICAgIEBwdWJsaWMKKyAgICAqLwor
ICAgIGV4dGVuZDogZnVuY3Rpb24gKCkgeworICAgICAgdmFyIENsYXNzID0gbWFrZUN0b3IoKTsK
KyAgICAgIHZhciBwcm90bzsKKyAgICAgIENsYXNzLkNsYXNzTWl4aW4gPSBfZW1iZXJNZXRhbE1p
eGluLk1peGluLmNyZWF0ZSh0aGlzLkNsYXNzTWl4aW4pOworICAgICAgQ2xhc3MuUHJvdG90eXBl
TWl4aW4gPSBfZW1iZXJNZXRhbE1peGluLk1peGluLmNyZWF0ZSh0aGlzLlByb3RvdHlwZU1peGlu
KTsKKworICAgICAgQ2xhc3MuQ2xhc3NNaXhpbi5vd25lckNvbnN0cnVjdG9yID0gQ2xhc3M7Cisg
ICAgICBDbGFzcy5Qcm90b3R5cGVNaXhpbi5vd25lckNvbnN0cnVjdG9yID0gQ2xhc3M7CisKKyAg
ICAgIHJlb3Blbi5hcHBseShDbGFzcy5Qcm90b3R5cGVNaXhpbiwgYXJndW1lbnRzKTsKKworICAg
ICAgQ2xhc3Muc3VwZXJjbGFzcyA9IHRoaXM7CisgICAgICBDbGFzcy5fX3N1cGVyX18gPSB0aGlz
LnByb3RvdHlwZTsKKworICAgICAgcHJvdG8gPSBDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3Jl
YXRlKHRoaXMucHJvdG90eXBlKTsKKyAgICAgIHByb3RvLmNvbnN0cnVjdG9yID0gQ2xhc3M7Cisg
ICAgICBfZW1iZXJNZXRhbFV0aWxzLmdlbmVyYXRlR3VpZChwcm90byk7CisgICAgICBfZW1iZXJN
ZXRhbE1ldGEubWV0YShwcm90bykucHJvdG8gPSBwcm90bzsgLy8gdGhpcyB3aWxsIGRpc2FibGUg
b2JzZXJ2ZXJzIG9uIHByb3RvdHlwZQorCisgICAgICBDbGFzcy5DbGFzc01peGluLmFwcGx5KENs
YXNzKTsKKyAgICAgIHJldHVybiBDbGFzczsKKyAgICB9LAorCisgICAgLyoqCisgICAgICBDcmVh
dGVzIGFuIGluc3RhbmNlIG9mIGEgY2xhc3MuIEFjY2VwdHMgZWl0aGVyIG5vIGFyZ3VtZW50cywg
b3IgYW4gb2JqZWN0CisgICAgICBjb250YWluaW5nIHZhbHVlcyB0byBpbml0aWFsaXplIHRoZSBu
ZXdseSBpbnN0YW50aWF0ZWQgb2JqZWN0IHdpdGguCisgICAgICAgYGBgamF2YXNjcmlwdAorICAg
ICAgQXBwLlBlcnNvbiA9IEVtYmVyLk9iamVjdC5leHRlbmQoeworICAgICAgICBoZWxsb1dvcmxk
OiBmdW5jdGlvbigpIHsKKyAgICAgICAgICBhbGVydCgiSGksIG15IG5hbWUgaXMgIiArIHRoaXMu
Z2V0KCduYW1lJykpOworICAgICAgICB9CisgICAgICB9KTsKKyAgICAgICB2YXIgdG9tID0gQXBw
LlBlcnNvbi5jcmVhdGUoeworICAgICAgICBuYW1lOiAnVG9tIERhbGUnCisgICAgICB9KTsKKyAg
ICAgICB0b20uaGVsbG9Xb3JsZCgpOyAvLyBhbGVydHMgIkhpLCBteSBuYW1lIGlzIFRvbSBEYWxl
Ii4KKyAgICAgIGBgYAorICAgICAgIGBjcmVhdGVgIHdpbGwgY2FsbCB0aGUgYGluaXRgIGZ1bmN0
aW9uIGlmIGRlZmluZWQgZHVyaW5nCisgICAgICBgRW1iZXIuQW55T2JqZWN0LmV4dGVuZGAKKyAg
ICAgICBJZiBubyBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byBgY3JlYXRlYCwgaXQgd2lsbCBub3Qg
c2V0IHZhbHVlcyB0byB0aGUgbmV3CisgICAgICBpbnN0YW5jZSBkdXJpbmcgaW5pdGlhbGl6YXRp
b246CisgICAgICAgYGBgamF2YXNjcmlwdAorICAgICAgdmFyIG5vTmFtZSA9IEFwcC5QZXJzb24u
Y3JlYXRlKCk7CisgICAgICBub05hbWUuaGVsbG9Xb3JsZCgpOyAvLyBhbGVydHMgdW5kZWZpbmVk
CisgICAgICBgYGAKKyAgICAgICBOT1RFOiBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgeW91IGNh
bm5vdCBkZWNsYXJlIG1ldGhvZHMgb3IgY29tcHV0ZWQKKyAgICAgIHByb3BlcnRpZXMgZHVyaW5n
IGBjcmVhdGVgLiBZb3Ugc2hvdWxkIGluc3RlYWQgZGVjbGFyZSBtZXRob2RzIGFuZCBjb21wdXRl
ZAorICAgICAgcHJvcGVydGllcyB3aGVuIHVzaW5nIGBleHRlbmRgLgorICAgICAgIEBtZXRob2Qg
Y3JlYXRlCisgICAgICBAc3RhdGljCisgICAgICBAcGFyYW0gW2FyZ3VtZW50c10qCisgICAgICBA
cHVibGljCisgICAgKi8KKyAgICBjcmVhdGU6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciBDID0g
dGhpczsKKworICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0g
QXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHsKKyAgICAg
ICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdOworICAgICAgfQorCisgICAgICBpZiAo
YXJncy5sZW5ndGggPiAwKSB7CisgICAgICAgIHRoaXMuX2luaXRQcm9wZXJ0aWVzKGFyZ3MpOwor
ICAgICAgfQorICAgICAgcmV0dXJuIG5ldyBDKCk7CisgICAgfSwKKworICAgIC8qKgorICAgICAg
QXVnbWVudHMgYSBjb25zdHJ1Y3RvcidzIHByb3RvdHlwZSB3aXRoIGFkZGl0aW9uYWwKKyAgICAg
IHByb3BlcnRpZXMgYW5kIGZ1bmN0aW9uczoKKyAgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICBN
eU9iamVjdCA9IEVtYmVyLk9iamVjdC5leHRlbmQoeworICAgICAgICBuYW1lOiAnYW4gb2JqZWN0
JworICAgICAgfSk7CisgICAgICAgbyA9IE15T2JqZWN0LmNyZWF0ZSgpOworICAgICAgby5nZXQo
J25hbWUnKTsgLy8gJ2FuIG9iamVjdCcKKyAgICAgICBNeU9iamVjdC5yZW9wZW4oeworICAgICAg
ICBzYXk6IGZ1bmN0aW9uKG1zZyl7CisgICAgICAgICAgY29uc29sZS5sb2cobXNnKTsKKyAgICAg
ICAgfQorICAgICAgfSkKKyAgICAgICBvMiA9IE15T2JqZWN0LmNyZWF0ZSgpOworICAgICAgbzIu
c2F5KCJoZWxsbyIpOyAvLyBsb2dzICJoZWxsbyIKKyAgICAgICBvLnNheSgiZ29vZGJ5ZSIpOyAv
LyBsb2dzICJnb29kYnllIgorICAgICAgYGBgCisgICAgICAgVG8gYWRkIGZ1bmN0aW9ucyBhbmQg
cHJvcGVydGllcyB0byB0aGUgY29uc3RydWN0b3IgaXRzZWxmLAorICAgICAgc2VlIGByZW9wZW5D
bGFzc2AKKyAgICAgICBAbWV0aG9kIHJlb3BlbgorICAgICAgQHB1YmxpYworICAgICovCisgICAg
cmVvcGVuOiBmdW5jdGlvbiAoKSB7CisgICAgICB0aGlzLndpbGxSZW9wZW4oKTsKKyAgICAgIHJl
b3Blbi5hcHBseSh0aGlzLlByb3RvdHlwZU1peGluLCBhcmd1bWVudHMpOworICAgICAgcmV0dXJu
IHRoaXM7CisgICAgfSwKKworICAgIC8qKgorICAgICAgQXVnbWVudHMgYSBjb25zdHJ1Y3Rvcidz
IG93biBwcm9wZXJ0aWVzIGFuZCBmdW5jdGlvbnM6CisgICAgICAgYGBgamF2YXNjcmlwdAorICAg
ICAgTXlPYmplY3QgPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKKyAgICAgICAgbmFtZTogJ2FuIG9i
amVjdCcKKyAgICAgIH0pOworICAgICAgIE15T2JqZWN0LnJlb3BlbkNsYXNzKHsKKyAgICAgICAg
Y2FuQnVpbGQ6IGZhbHNlCisgICAgICB9KTsKKyAgICAgICBNeU9iamVjdC5jYW5CdWlsZDsgLy8g
ZmFsc2UKKyAgICAgIG8gPSBNeU9iamVjdC5jcmVhdGUoKTsKKyAgICAgIGBgYAorICAgICAgIElu
IG90aGVyIHdvcmRzLCB0aGlzIGNyZWF0ZXMgc3RhdGljIHByb3BlcnRpZXMgYW5kIGZ1bmN0aW9u
cyBmb3IgdGhlIGNsYXNzLgorICAgICAgVGhlc2UgYXJlIG9ubHkgYXZhaWxhYmxlIG9uIHRoZSBj
bGFzcyBhbmQgbm90IG9uIGFueSBpbnN0YW5jZSBvZiB0aGF0IGNsYXNzLgorICAgICAgIGBgYGph
dmFzY3JpcHQKKyAgICAgIEFwcC5QZXJzb24gPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKKyAgICAg
ICAgbmFtZSA6ICIiLAorICAgICAgICBzYXlIZWxsbyA6IGZ1bmN0aW9uKCkgeworICAgICAgICAg
IGFsZXJ0KCJIZWxsby4gTXkgbmFtZSBpcyAiICsgdGhpcy5nZXQoJ25hbWUnKSk7CisgICAgICAg
IH0KKyAgICAgIH0pOworICAgICAgIEFwcC5QZXJzb24ucmVvcGVuQ2xhc3MoeworICAgICAgICBz
cGVjaWVzIDogIkhvbW8gc2FwaWVucyIsCisgICAgICAgIGNyZWF0ZVBlcnNvbjogZnVuY3Rpb24o
bmV3UGVyc29uc05hbWUpeworICAgICAgICAgIHJldHVybiBBcHAuUGVyc29uLmNyZWF0ZSh7Cisg
ICAgICAgICAgICBuYW1lOm5ld1BlcnNvbnNOYW1lCisgICAgICAgICAgfSk7CisgICAgICAgIH0K
KyAgICAgIH0pOworICAgICAgIHZhciB0b20gPSBBcHAuUGVyc29uLmNyZWF0ZSh7CisgICAgICAg
IG5hbWUgOiAiVG9tIERhbGUiCisgICAgICB9KTsKKyAgICAgIHZhciB5ZWh1ZGEgPSBBcHAuUGVy
c29uLmNyZWF0ZVBlcnNvbigiWWVodWRhIEthdHoiKTsKKyAgICAgICB0b20uc2F5SGVsbG8oKTsg
Ly8gIkhlbGxvLiBNeSBuYW1lIGlzIFRvbSBEYWxlIgorICAgICAgeWVodWRhLnNheUhlbGxvKCk7
IC8vICJIZWxsby4gTXkgbmFtZSBpcyBZZWh1ZGEgS2F0eiIKKyAgICAgIGFsZXJ0KEFwcC5QZXJz
b24uc3BlY2llcyk7IC8vICJIb21vIHNhcGllbnMiCisgICAgICBgYGAKKyAgICAgICBOb3RlIHRo
YXQgYHNwZWNpZXNgIGFuZCBgY3JlYXRlUGVyc29uYCBhcmUgKm5vdCogdmFsaWQgb24gdGhlIGB0
b21gIGFuZCBgeWVodWRhYAorICAgICAgdmFyaWFibGVzLiBUaGV5IGFyZSBvbmx5IHZhbGlkIG9u
IGBBcHAuUGVyc29uYC4KKyAgICAgICBUbyBhZGQgZnVuY3Rpb25zIGFuZCBwcm9wZXJ0aWVzIHRv
IGluc3RhbmNlcyBvZgorICAgICAgYSBjb25zdHJ1Y3RvciBieSBleHRlbmRpbmcgdGhlIGNvbnN0
cnVjdG9yJ3MgcHJvdG90eXBlCisgICAgICBzZWUgYHJlb3BlbmAKKyAgICAgICBAbWV0aG9kIHJl
b3BlbkNsYXNzCisgICAgICBAcHVibGljCisgICAgKi8KKyAgICByZW9wZW5DbGFzczogZnVuY3Rp
b24gKCkgeworICAgICAgcmVvcGVuLmFwcGx5KHRoaXMuQ2xhc3NNaXhpbiwgYXJndW1lbnRzKTsK
KyAgICAgIGFwcGx5TWl4aW4odGhpcywgYXJndW1lbnRzLCBmYWxzZSk7CisgICAgICByZXR1cm4g
dGhpczsKKyAgICB9LAorCisgICAgZGV0ZWN0OiBmdW5jdGlvbiAob2JqKSB7CisgICAgICBpZiAo
J2Z1bmN0aW9uJyAhPT0gdHlwZW9mIG9iaikgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICB9CisgICAgICB3aGlsZSAob2JqKSB7CisgICAgICAgIGlmIChvYmogPT09IHRoaXMpIHsKKyAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBvYmogPSBvYmouc3VwZXJj
bGFzczsKKyAgICAgIH0KKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9LAorCisgICAgZGV0ZWN0
SW5zdGFuY2U6IGZ1bmN0aW9uIChvYmopIHsKKyAgICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiB0
aGlzOworICAgIH0sCisKKyAgICAvKioKKyAgICAgIEluIHNvbWUgY2FzZXMsIHlvdSBtYXkgd2Fu
dCB0byBhbm5vdGF0ZSBjb21wdXRlZCBwcm9wZXJ0aWVzIHdpdGggYWRkaXRpb25hbAorICAgICAg
bWV0YWRhdGEgYWJvdXQgaG93IHRoZXkgZnVuY3Rpb24gb3Igd2hhdCB2YWx1ZXMgdGhleSBvcGVy
YXRlIG9uLiBGb3IKKyAgICAgIGV4YW1wbGUsIGNvbXB1dGVkIHByb3BlcnR5IGZ1bmN0aW9ucyBt
YXkgY2xvc2Ugb3ZlciB2YXJpYWJsZXMgdGhhdCBhcmUgdGhlbgorICAgICAgbm8gbG9uZ2VyIGF2
YWlsYWJsZSBmb3IgaW50cm9zcGVjdGlvbi4KKyAgICAgICBZb3UgY2FuIHBhc3MgYSBoYXNoIG9m
IHRoZXNlIHZhbHVlcyB0byBhIGNvbXB1dGVkIHByb3BlcnR5IGxpa2UgdGhpczoKKyAgICAgICBg
YGBqYXZhc2NyaXB0CisgICAgICBwZXJzb246IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgcGVy
c29uSWQgPSB0aGlzLmdldCgncGVyc29uSWQnKTsKKyAgICAgICAgcmV0dXJuIEFwcC5QZXJzb24u
Y3JlYXRlKHsgaWQ6IHBlcnNvbklkIH0pOworICAgICAgfS5wcm9wZXJ0eSgpLm1ldGEoeyB0eXBl
OiBBcHAuUGVyc29uIH0pCisgICAgICBgYGAKKyAgICAgICBPbmNlIHlvdSd2ZSBkb25lIHRoaXMs
IHlvdSBjYW4gcmV0cmlldmUgdGhlIHZhbHVlcyBzYXZlZCB0byB0aGUgY29tcHV0ZWQKKyAgICAg
IHByb3BlcnR5IGZyb20geW91ciBjbGFzcyBsaWtlIHRoaXM6CisgICAgICAgYGBgamF2YXNjcmlw
dAorICAgICAgTXlDbGFzcy5tZXRhRm9yUHJvcGVydHkoJ3BlcnNvbicpOworICAgICAgYGBgCisg
ICAgICAgVGhpcyB3aWxsIHJldHVybiB0aGUgb3JpZ2luYWwgaGFzaCB0aGF0IHdhcyBwYXNzZWQg
dG8gYG1ldGEoKWAuCisgICAgICAgQHN0YXRpYworICAgICAgQG1ldGhvZCBtZXRhRm9yUHJvcGVy
dHkKKyAgICAgIEBwYXJhbSBrZXkge1N0cmluZ30gcHJvcGVydHkgbmFtZQorICAgICAgQHByaXZh
dGUKKyAgICAqLworICAgIG1ldGFGb3JQcm9wZXJ0eTogZnVuY3Rpb24gKGtleSkgeworICAgICAg
dmFyIHByb3RvID0gdGhpcy5wcm90bygpOworICAgICAgdmFyIHBvc3NpYmxlRGVzYyA9IHByb3Rv
W2tleV07CisgICAgICB2YXIgZGVzYyA9IHBvc3NpYmxlRGVzYyAhPT0gbnVsbCAmJiB0eXBlb2Yg
cG9zc2libGVEZXNjID09PSAnb2JqZWN0JyAmJiBwb3NzaWJsZURlc2MuaXNEZXNjcmlwdG9yID8g
cG9zc2libGVEZXNjIDogdW5kZWZpbmVkOworCisgICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2Vy
dCgnbWV0YUZvclByb3BlcnR5KCkgY291bGQgbm90IGZpbmQgYSBjb21wdXRlZCBwcm9wZXJ0eSAn
ICsgJ3dpdGgga2V5IFwnJyArIGtleSArICdcJy4nLCAhIWRlc2MgJiYgZGVzYyBpbnN0YW5jZW9m
IF9lbWJlck1ldGFsQ29tcHV0ZWQuQ29tcHV0ZWRQcm9wZXJ0eSk7CisgICAgICByZXR1cm4gZGVz
Yy5fbWV0YSB8fCB7fTsKKyAgICB9LAorCisgICAgX2NvbXB1dGVkUHJvcGVydGllczogX2VtYmVy
TWV0YWxDb21wdXRlZC5jb21wdXRlZChmdW5jdGlvbiAoKSB7CisgICAgICBoYXNDYWNoZWRDb21w
dXRlZFByb3BlcnRpZXMgPSB0cnVlOworICAgICAgdmFyIHByb3RvID0gdGhpcy5wcm90bygpOwor
ICAgICAgdmFyIHByb3BlcnR5OworICAgICAgdmFyIHByb3BlcnRpZXMgPSBbXTsKKworICAgICAg
Zm9yICh2YXIgbmFtZSBpbiBwcm90bykgeworICAgICAgICBwcm9wZXJ0eSA9IHByb3RvW25hbWVd
OworCisgICAgICAgIGlmIChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5pc0Rlc2NyaXB0b3IpIHsKKyAg
ICAgICAgICBwcm9wZXJ0aWVzLnB1c2goeworICAgICAgICAgICAgbmFtZTogbmFtZSwKKyAgICAg
ICAgICAgIG1ldGE6IHByb3BlcnR5Ll9tZXRhCisgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAg
ICAgIH0KKyAgICAgIHJldHVybiBwcm9wZXJ0aWVzOworICAgIH0pLnJlYWRPbmx5KCksCisKKyAg
ICAvKioKKyAgICAgIEl0ZXJhdGUgb3ZlciBlYWNoIGNvbXB1dGVkIHByb3BlcnR5IGZvciB0aGUg
Y2xhc3MsIHBhc3NpbmcgaXRzIG5hbWUKKyAgICAgIGFuZCBhbnkgYXNzb2NpYXRlZCBtZXRhZGF0
YSAoc2VlIGBtZXRhRm9yUHJvcGVydHlgKSB0byB0aGUgY2FsbGJhY2suCisgICAgICAgQHN0YXRp
YworICAgICAgQG1ldGhvZCBlYWNoQ29tcHV0ZWRQcm9wZXJ0eQorICAgICAgQHBhcmFtIHtGdW5j
dGlvbn0gY2FsbGJhY2sKKyAgICAgIEBwYXJhbSB7T2JqZWN0fSBiaW5kaW5nCisgICAgICBAcHJp
dmF0ZQorICAgICovCisgICAgZWFjaENvbXB1dGVkUHJvcGVydHk6IGZ1bmN0aW9uIChjYWxsYmFj
aywgYmluZGluZykgeworICAgICAgdmFyIHByb3BlcnR5OworICAgICAgdmFyIGVtcHR5ID0ge307
CisKKyAgICAgIHZhciBwcm9wZXJ0aWVzID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRo
aXMsICdfY29tcHV0ZWRQcm9wZXJ0aWVzJyk7CisKKyAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5n
dGggPSBwcm9wZXJ0aWVzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIHByb3Bl
cnR5ID0gcHJvcGVydGllc1tpXTsKKyAgICAgICAgY2FsbGJhY2suY2FsbChiaW5kaW5nIHx8IHRo
aXMsIHByb3BlcnR5Lm5hbWUsIHByb3BlcnR5Lm1ldGEgfHwgZW1wdHkpOworICAgICAgfQorICAg
IH0KKyAgfTsKKworICBmdW5jdGlvbiBpbmplY3RlZFByb3BlcnR5QXNzZXJ0aW9uKCkgeworICAg
IF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdJbmplY3RlZCBwcm9wZXJ0aWVzIGFyZSBpbnZhbGlk
JywgX2VtYmVyUnVudGltZUluamVjdC52YWxpZGF0ZVByb3BlcnR5SW5qZWN0aW9ucyh0aGlzKSk7
CisgIH0KKworICBfZW1iZXJNZXRhbERlYnVnLnJ1bkluRGVidWcoZnVuY3Rpb24gKCkgeworICAg
IC8qKgorICAgICAgUHJvdmlkZXMgbG9va3VwLXRpbWUgdHlwZSB2YWxpZGF0aW9uIGZvciBpbmpl
Y3RlZCBwcm9wZXJ0aWVzLgorICAgICAgIEBwcml2YXRlCisgICAgICBAbWV0aG9kIF9vbkxvb2t1
cAorICAgICovCisgICAgQ2xhc3NNaXhpblByb3BzLl9vbkxvb2t1cCA9IGluamVjdGVkUHJvcGVy
dHlBc3NlcnRpb247CisgIH0pOworCisgIC8qKgorICAgIFJldHVybnMgYSBoYXNoIG9mIHByb3Bl
cnR5IG5hbWVzIGFuZCBjb250YWluZXIgbmFtZXMgdGhhdCBpbmplY3RlZAorICAgIHByb3BlcnRp
ZXMgd2lsbCBsb29rdXAgb24gdGhlIGNvbnRhaW5lciBsYXppbHkuCisgIAorICAgIEBtZXRob2Qg
X2xhenlJbmplY3Rpb25zCisgICAgQHJldHVybiB7T2JqZWN0fSBIYXNoIG9mIGFsbCBsYXp5IGlu
amVjdGVkIHByb3BlcnR5IGtleXMgdG8gY29udGFpbmVyIG5hbWVzCisgICAgQHByaXZhdGUKKyAg
Ki8KKyAgQ2xhc3NNaXhpblByb3BzLl9sYXp5SW5qZWN0aW9ucyA9IGZ1bmN0aW9uICgpIHsKKyAg
ICB2YXIgaW5qZWN0aW9ucyA9IHt9OworICAgIHZhciBwcm90byA9IHRoaXMucHJvdG8oKTsKKyAg
ICB2YXIga2V5LCBkZXNjOworCisgICAgZm9yIChrZXkgaW4gcHJvdG8pIHsKKyAgICAgIGRlc2Mg
PSBwcm90b1trZXldOworICAgICAgaWYgKGRlc2MgaW5zdGFuY2VvZiBfZW1iZXJNZXRhbEluamVj
dGVkX3Byb3BlcnR5LmRlZmF1bHQpIHsKKyAgICAgICAgaW5qZWN0aW9uc1trZXldID0gZGVzYy50
eXBlICsgJzonICsgKGRlc2MubmFtZSB8fCBrZXkpOworICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiBpbmplY3Rpb25zOworICB9OworCisgIHZhciBDbGFzc01peGluID0gX2VtYmVyTWV0YWxN
aXhpbi5NaXhpbi5jcmVhdGUoQ2xhc3NNaXhpblByb3BzKTsKKworICBDbGFzc01peGluLm93bmVy
Q29uc3RydWN0b3IgPSBDb3JlT2JqZWN0OworCisgIENvcmVPYmplY3QuQ2xhc3NNaXhpbiA9IENs
YXNzTWl4aW47CisKKyAgQ2xhc3NNaXhpbi5hcHBseShDb3JlT2JqZWN0KTsKKworICBDb3JlT2Jq
ZWN0LnJlb3Blbih7CisgICAgZGlkRGVmaW5lUHJvcGVydHk6IGZ1bmN0aW9uIChwcm90bywga2V5
LCB2YWx1ZSkgeworICAgICAgaWYgKGhhc0NhY2hlZENvbXB1dGVkUHJvcGVydGllcyA9PT0gZmFs
c2UpIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgaWYgKHZhbHVlIGluc3RhbmNl
b2YgX2VtYmVyTWV0YWxDb21wdXRlZC5Db21wdXRlZFByb3BlcnR5KSB7CisgICAgICAgIHZhciBj
YWNoZSA9IF9lbWJlck1ldGFsTWV0YS5tZXRhKHRoaXMuY29uc3RydWN0b3IpLnJlYWRhYmxlQ2Fj
aGUoKTsKKworICAgICAgICBpZiAoY2FjaGUgJiYgY2FjaGUuX2NvbXB1dGVkUHJvcGVydGllcyAh
PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgY2FjaGUuX2NvbXB1dGVkUHJvcGVydGllcyA9IHVu
ZGVmaW5lZDsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfSk7CisKKyAgZXhwb3J0cy5k
ZWZhdWx0ID0gQ29yZU9iamVjdDsKK30pOworCisvLyBOT1RFOiB0aGlzIG9iamVjdCBzaG91bGQg
bmV2ZXIgYmUgaW5jbHVkZWQgZGlyZWN0bHkuIEluc3RlYWQgdXNlIGBFbWJlci5PYmplY3RgLgor
Ly8gV2Ugb25seSBkZWZpbmUgdGhpcyBzZXBhcmF0ZWx5IHNvIHRoYXQgYEVtYmVyLlNldGAgY2Fu
IGRlcGVuZCBvbiBpdC4KKworLyoqCisgIERlZmluZXMgdGhlIHByb3BlcnRpZXMgdGhhdCB3aWxs
IGJlIGNvbmNhdGVuYXRlZCBmcm9tIHRoZSBzdXBlcmNsYXNzCisgIChpbnN0ZWFkIG9mIG92ZXJy
aWRkZW4pLgorICAgQnkgZGVmYXVsdCwgd2hlbiB5b3UgZXh0ZW5kIGFuIEVtYmVyIGNsYXNzIGEg
cHJvcGVydHkgZGVmaW5lZCBpbgorICB0aGUgc3ViY2xhc3Mgb3ZlcnJpZGVzIGEgcHJvcGVydHkg
d2l0aCB0aGUgc2FtZSBuYW1lIHRoYXQgaXMgZGVmaW5lZAorICBpbiB0aGUgc3VwZXJjbGFzcy4g
SG93ZXZlciwgdGhlcmUgYXJlIHNvbWUgY2FzZXMgd2hlcmUgaXQgaXMgcHJlZmVyYWJsZQorICB0
byBidWlsZCB1cCBhIHByb3BlcnR5J3MgdmFsdWUgYnkgY29tYmluaW5nIHRoZSBzdXBlcmNsYXNz
JyBwcm9wZXJ0eQorICB2YWx1ZSB3aXRoIHRoZSBzdWJjbGFzcycgdmFsdWUuIEFuIGV4YW1wbGUg
b2YgdGhpcyBpbiB1c2Ugd2l0aGluIEVtYmVyCisgIGlzIHRoZSBgY2xhc3NOYW1lc2AgcHJvcGVy
dHkgb2YgYEVtYmVyLlZpZXdgLgorICAgSGVyZSBpcyBzb21lIHNhbXBsZSBjb2RlIHNob3dpbmcg
dGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIGNvbmNhdGVuYXRlZAorICBwcm9wZXJ0eSBhbmQgYSBu
b3JtYWwgb25lOgorICAgYGBgamF2YXNjcmlwdAorICBBcHAuQmFyVmlldyA9IEVtYmVyLlZpZXcu
ZXh0ZW5kKHsKKyAgICBzb21lTm9uQ29uY2F0ZW5hdGVkUHJvcGVydHk6IFsnYmFyJ10sCisgICAg
Y2xhc3NOYW1lczogWydiYXInXQorICB9KTsKKyAgIEFwcC5Gb29CYXJWaWV3ID0gQXBwLkJhclZp
ZXcuZXh0ZW5kKHsKKyAgICBzb21lTm9uQ29uY2F0ZW5hdGVkUHJvcGVydHk6IFsnZm9vJ10sCisg
ICAgY2xhc3NOYW1lczogWydmb28nXQorICB9KTsKKyAgIHZhciBmb29CYXJWaWV3ID0gQXBwLkZv
b0JhclZpZXcuY3JlYXRlKCk7CisgIGZvb0JhclZpZXcuZ2V0KCdzb21lTm9uQ29uY2F0ZW5hdGVk
UHJvcGVydHknKTsgLy8gWydmb28nXQorICBmb29CYXJWaWV3LmdldCgnY2xhc3NOYW1lcycpOyAv
LyBbJ2VtYmVyLXZpZXcnLCAnYmFyJywgJ2ZvbyddCisgIGBgYAorICAgVGhpcyBiZWhhdmlvciBl
eHRlbmRzIHRvIG9iamVjdCBjcmVhdGlvbiBhcyB3ZWxsLiBDb250aW51aW5nIHRoZQorICBhYm92
ZSBleGFtcGxlOgorICAgYGBgamF2YXNjcmlwdAorICB2YXIgdmlldyA9IEFwcC5Gb29CYXJWaWV3
LmNyZWF0ZSh7CisgICAgc29tZU5vbkNvbmNhdGVuYXRlZFByb3BlcnR5OiBbJ2JheiddLAorICAg
IGNsYXNzTmFtZXM6IFsnYmF6J10KKyAgfSkKKyAgdmlldy5nZXQoJ3NvbWVOb25Db25jYXRlbmF0
ZWRQcm9wZXJ0eScpOyAvLyBbJ2JheiddCisgIHZpZXcuZ2V0KCdjbGFzc05hbWVzJyk7IC8vIFsn
ZW1iZXItdmlldycsICdiYXInLCAnZm9vJywgJ2JheiddCisgIGBgYAorICBBZGRpbmcgYSBzaW5n
bGUgcHJvcGVydHkgdGhhdCBpcyBub3QgYW4gYXJyYXkgd2lsbCBqdXN0IGFkZCBpdCBpbiB0aGUg
YXJyYXk6CisgICBgYGBqYXZhc2NyaXB0CisgIHZhciB2aWV3ID0gQXBwLkZvb0JhclZpZXcuY3Jl
YXRlKHsKKyAgICBjbGFzc05hbWVzOiAnYmF6JworICB9KQorICB2aWV3LmdldCgnY2xhc3NOYW1l
cycpOyAvLyBbJ2VtYmVyLXZpZXcnLCAnYmFyJywgJ2ZvbycsICdiYXonXQorICBgYGAKKyAgIFVz
aW5nIHRoZSBgY29uY2F0ZW5hdGVkUHJvcGVydGllc2AgcHJvcGVydHksIHdlIGNhbiB0ZWxsIEVt
YmVyIHRvIG1peCB0aGUKKyAgY29udGVudCBvZiB0aGUgcHJvcGVydGllcy4KKyAgIEluIGBFbWJl
ci5WaWV3YCB0aGUgYGNsYXNzTmFtZUJpbmRpbmdzYCBhbmQgYGF0dHJpYnV0ZUJpbmRpbmdzYCBw
cm9wZXJ0aWVzCisgIGFyZSBhbHNvIGNvbmNhdGVuYXRlZCwgaW4gYWRkaXRpb24gdG8gYGNsYXNz
TmFtZXNgLgorICAgVGhpcyBmZWF0dXJlIGlzIGF2YWlsYWJsZSBmb3IgeW91IHRvIHVzZSB0aHJv
dWdob3V0IHRoZSBFbWJlciBvYmplY3QgbW9kZWwsCisgIGFsdGhvdWdoIHR5cGljYWwgYXBwIGRl
dmVsb3BlcnMgYXJlIGxpa2VseSB0byB1c2UgaXQgaW5mcmVxdWVudGx5LiBTaW5jZQorICBpdCBj
aGFuZ2VzIGV4cGVjdGF0aW9ucyBhYm91dCBiZWhhdmlvciBvZiBwcm9wZXJ0aWVzLCB5b3Ugc2hv
dWxkIHByb3Blcmx5CisgIGRvY3VtZW50IGl0cyB1c2FnZSBpbiBlYWNoIGluZGl2aWR1YWwgY29u
Y2F0ZW5hdGVkIHByb3BlcnR5ICh0byBub3QKKyAgbWlzbGVhZCB5b3VyIHVzZXJzIHRvIHRoaW5r
IHRoZXkgY2FuIG92ZXJyaWRlIHRoZSBwcm9wZXJ0eSBpbiBhIHN1YmNsYXNzKS4KKyAgIEBwcm9w
ZXJ0eSBjb25jYXRlbmF0ZWRQcm9wZXJ0aWVzCisgIEB0eXBlIEFycmF5CisgIEBkZWZhdWx0IG51
bGwKKyAgQHB1YmxpYworKi8KKworLyoqCisgIERlZmluZXMgdGhlIHByb3BlcnRpZXMgdGhhdCB3
aWxsIGJlIG1lcmdlZCBmcm9tIHRoZSBzdXBlcmNsYXNzCisgIChpbnN0ZWFkIG9mIG92ZXJyaWRk
ZW4pLgorICAgQnkgZGVmYXVsdCwgd2hlbiB5b3UgZXh0ZW5kIGFuIEVtYmVyIGNsYXNzIGEgcHJv
cGVydHkgZGVmaW5lZCBpbgorICB0aGUgc3ViY2xhc3Mgb3ZlcnJpZGVzIGEgcHJvcGVydHkgd2l0
aCB0aGUgc2FtZSBuYW1lIHRoYXQgaXMgZGVmaW5lZAorICBpbiB0aGUgc3VwZXJjbGFzcy4gSG93
ZXZlciwgdGhlcmUgYXJlIHNvbWUgY2FzZXMgd2hlcmUgaXQgaXMgcHJlZmVyYWJsZQorICB0byBi
dWlsZCB1cCBhIHByb3BlcnR5J3MgdmFsdWUgYnkgbWVyZ2luZyB0aGUgc3VwZXJjbGFzcyBwcm9w
ZXJ0eSB2YWx1ZQorICB3aXRoIHRoZSBzdWJjbGFzcyBwcm9wZXJ0eSdzIHZhbHVlLiBBbiBleGFt
cGxlIG9mIHRoaXMgaW4gdXNlIHdpdGhpbiBFbWJlcgorICBpcyB0aGUgYHF1ZXJ5UGFyYW1zYCBw
cm9wZXJ0eSBvZiByb3V0ZXMuCisgICBIZXJlIGlzIHNvbWUgc2FtcGxlIGNvZGUgc2hvd2luZyB0
aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgbWVyZ2VkCisgIHByb3BlcnR5IGFuZCBhIG5vcm1hbCBv
bmU6CisgICBgYGBqYXZhc2NyaXB0CisgIEFwcC5CYXJSb3V0ZSA9IEVtYmVyLlJvdXRlLmV4dGVu
ZCh7CisgICAgc29tZU5vbk1lcmdlZFByb3BlcnR5OiB7CisgICAgICBub25NZXJnZWQ6ICdzdXBl
cmNsYXNzIHZhbHVlIG9mIG5vbk1lcmdlZCcKKyAgICB9LAorICAgIHF1ZXJ5UGFyYW1zOiB7Cisg
ICAgICBwYWdlOiB7cmVwbGFjZTogZmFsc2V9LAorICAgICAgbGltaXQ6IHtyZXBsYWNlOiB0cnVl
fQorICAgIH0KKyAgfSk7CisgICBBcHAuRm9vQmFyUm91dGUgPSBBcHAuQmFyUm91dGUuZXh0ZW5k
KHsKKyAgICBzb21lTm9uTWVyZ2VkUHJvcGVydHk6IHsKKyAgICAgIGNvbXBsZXRlbHlOb25NZXJn
ZWQ6ICdzdWJjbGFzcyB2YWx1ZSBvZiBub25NZXJnZWQnCisgICAgfSwKKyAgICBxdWVyeVBhcmFt
czogeworICAgICAgbGltaXQ6IHtyZXBsYWNlOiBmYWxzZX0KKyAgICB9CisgIH0pOworICAgdmFy
IGZvb0JhclJvdXRlID0gQXBwLkZvb0JhclJvdXRlLmNyZWF0ZSgpOworICAgZm9vQmFyUm91dGUu
Z2V0KCdzb21lTm9uTWVyZ2VkUHJvcGVydHknKTsKKyAgLy8gPT4geyBjb21wbGV0ZWx5Tm9uTWVy
Z2VkOiAnc3ViY2xhc3MgdmFsdWUgb2Ygbm9uTWVyZ2VkJyB9CisgIC8vCisgIC8vIE5vdGUgdGhl
IGVudGlyZSBvYmplY3QsIGluY2x1ZGluZyB0aGUgbm9uTWVyZ2VkIHByb3BlcnR5IG9mCisgIC8v
IHRoZSBzdXBlcmNsYXNzIG9iamVjdCwgaGFzIGJlZW4gcmVwbGFjZWQKKyAgIGZvb0JhclJvdXRl
LmdldCgncXVlcnlQYXJhbXMnKTsKKyAgLy8gPT4geworICAvLyAgIHBhZ2U6IHtyZXBsYWNlOiBm
YWxzZX0sCisgIC8vICAgbGltaXQ6IHtyZXBsYWNlOiBmYWxzZX0KKyAgLy8gfQorICAvLworICAv
LyBOb3RlIHRoZSBwYWdlIHJlbWFpbnMgZnJvbSB0aGUgc3VwZXJjbGFzcywgYW5kIHRoZQorICAv
LyBgbGltaXRgIHByb3BlcnR5J3MgdmFsdWUgb2YgYGZhbHNlYCBoYXMgYmVlbiBtZXJnZWQgZnJv
bQorICAvLyB0aGUgc3ViY2xhc3MuCisgIGBgYAorICAgVGhpcyBiZWhhdmlvciBpcyBub3QgYXZh
aWxhYmxlIGR1cmluZyBvYmplY3QgYGNyZWF0ZWAgY2FsbHMuIEl0IGlzIG9ubHkKKyAgYXZhaWxh
YmxlIGF0IGBleHRlbmRgIHRpbWUuCisgICBUaGlzIGZlYXR1cmUgaXMgYXZhaWxhYmxlIGZvciB5
b3UgdG8gdXNlIHRocm91Z2hvdXQgdGhlIEVtYmVyIG9iamVjdCBtb2RlbCwKKyAgYWx0aG91Z2gg
dHlwaWNhbCBhcHAgZGV2ZWxvcGVycyBhcmUgbGlrZWx5IHRvIHVzZSBpdCBpbmZyZXF1ZW50bHku
IFNpbmNlCisgIGl0IGNoYW5nZXMgZXhwZWN0YXRpb25zIGFib3V0IGJlaGF2aW9yIG9mIHByb3Bl
cnRpZXMsIHlvdSBzaG91bGQgcHJvcGVybHkKKyAgZG9jdW1lbnQgaXRzIHVzYWdlIGluIGVhY2gg
aW5kaXZpZHVhbCBtZXJnZWQgcHJvcGVydHkgKHRvIG5vdAorICBtaXNsZWFkIHlvdXIgdXNlcnMg
dG8gdGhpbmsgdGhleSBjYW4gb3ZlcnJpZGUgdGhlIHByb3BlcnR5IGluIGEgc3ViY2xhc3MpLgor
ICAgQHByb3BlcnR5IG1lcmdlZFByb3BlcnRpZXMKKyAgQHR5cGUgQXJyYXkKKyAgQGRlZmF1bHQg
bnVsbAorICBAcHVibGljCisqLworCisvKioKKyAgRGVzdHJveWVkIG9iamVjdCBwcm9wZXJ0eSBm
bGFnLgorICAgaWYgdGhpcyBwcm9wZXJ0eSBpcyBgdHJ1ZWAgdGhlIG9ic2VydmVycyBhbmQgYmlu
ZGluZ3Mgd2VyZSBhbHJlYWR5CisgIHJlbW92ZWQgYnkgdGhlIGVmZmVjdCBvZiBjYWxsaW5nIHRo
ZSBgZGVzdHJveSgpYCBtZXRob2QuCisgICBAcHJvcGVydHkgaXNEZXN0cm95ZWQKKyAgQGRlZmF1
bHQgZmFsc2UKKyAgQHB1YmxpYworKi8KKworLyoqCisgIERlc3RydWN0aW9uIHNjaGVkdWxlZCBm
bGFnLiBUaGUgYGRlc3Ryb3koKWAgbWV0aG9kIGhhcyBiZWVuIGNhbGxlZC4KKyAgIFRoZSBvYmpl
Y3Qgc3RheXMgaW50YWN0IHVudGlsIHRoZSBlbmQgb2YgdGhlIHJ1biBsb29wIGF0IHdoaWNoIHBv
aW50CisgIHRoZSBgaXNEZXN0cm95ZWRgIGZsYWcgaXMgc2V0LgorICAgQHByb3BlcnR5IGlzRGVz
dHJveWluZworICBAZGVmYXVsdCBmYWxzZQorICBAcHVibGljCisqLworCisvKioKKyAgRGVzdHJv
eXMgYW4gb2JqZWN0IGJ5IHNldHRpbmcgdGhlIGBpc0Rlc3Ryb3llZGAgZmxhZyBhbmQgcmVtb3Zp
bmcgaXRzCisgIG1ldGFkYXRhLCB3aGljaCBlZmZlY3RpdmVseSBkZXN0cm95cyBvYnNlcnZlcnMg
YW5kIGJpbmRpbmdzLgorICAgSWYgeW91IHRyeSB0byBzZXQgYSBwcm9wZXJ0eSBvbiBhIGRlc3Ry
b3llZCBvYmplY3QsIGFuIGV4Y2VwdGlvbiB3aWxsIGJlCisgIHJhaXNlZC4KKyAgIE5vdGUgdGhh
dCBkZXN0cnVjdGlvbiBpcyBzY2hlZHVsZWQgZm9yIHRoZSBlbmQgb2YgdGhlIHJ1biBsb29wIGFu
ZCBkb2VzIG5vdAorICBoYXBwZW4gaW1tZWRpYXRlbHkuICBJdCB3aWxsIHNldCBhbiBpc0Rlc3Ry
b3lpbmcgZmxhZyBpbW1lZGlhdGVseS4KKyAgIEBtZXRob2QgZGVzdHJveQorICBAcmV0dXJuIHtF
bWJlci5PYmplY3R9IHJlY2VpdmVyCisgIEBwdWJsaWMKKyovCisKKy8qKgorICBPdmVycmlkZSB0
byBpbXBsZW1lbnQgdGVhcmRvd24uCisgICBAbWV0aG9kIHdpbGxEZXN0cm95CisgIEBwdWJsaWMK
KyovCisKKy8qKgorICBJbnZva2VkIGJ5IHRoZSBydW4gbG9vcCB0byBhY3R1YWxseSBkZXN0cm95
IHRoZSBvYmplY3QuIFRoaXMgaXMKKyAgc2NoZWR1bGVkIGZvciBleGVjdXRpb24gYnkgdGhlIGBk
ZXN0cm95YCBtZXRob2QuCisgICBAcHJpdmF0ZQorICBAbWV0aG9kIF9zY2hlZHVsZWREZXN0cm95
CisqLworCisvKioKKyAgUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiB3aGljaCBhdHRl
bXB0cyB0byBwcm92aWRlIG1vcmUgaW5mb3JtYXRpb24KKyAgdGhhbiBKYXZhc2NyaXB0J3MgYHRv
U3RyaW5nYCB0eXBpY2FsbHkgZG9lcywgaW4gYSBnZW5lcmljIHdheSBmb3IgYWxsIEVtYmVyCisg
IG9iamVjdHMuCisgICBgYGBqYXZhc2NyaXB0CisgIEFwcC5QZXJzb24gPSBFbS5PYmplY3QuZXh0
ZW5kKCkKKyAgcGVyc29uID0gQXBwLlBlcnNvbi5jcmVhdGUoKQorICBwZXJzb24udG9TdHJpbmco
KSAvLz0+ICI8QXBwLlBlcnNvbjplbWJlcjEwMjQ+IgorICBgYGAKKyAgIElmIHRoZSBvYmplY3Qn
cyBjbGFzcyBpcyBub3QgZGVmaW5lZCBvbiBhbiBFbWJlciBuYW1lc3BhY2UsIGl0IHdpbGwKKyAg
aW5kaWNhdGUgaXQgaXMgYSBzdWJjbGFzcyBvZiB0aGUgcmVnaXN0ZXJlZCBzdXBlcmNsYXNzOgor
ICBgYGBqYXZhc2NyaXB0CisgIFN0dWRlbnQgPSBBcHAuUGVyc29uLmV4dGVuZCgpCisgIHN0dWRl
bnQgPSBTdHVkZW50LmNyZWF0ZSgpCisgIHN0dWRlbnQudG9TdHJpbmcoKSAvLz0+ICI8KHN1YmNs
YXNzIG9mIEFwcC5QZXJzb24pOmVtYmVyMTAyNT4iCisgIGBgYAorICAgSWYgdGhlIG1ldGhvZCBg
dG9TdHJpbmdFeHRlbnNpb25gIGlzIGRlZmluZWQsIGl0cyByZXR1cm4gdmFsdWUgd2lsbCBiZQor
ICBpbmNsdWRlZCBpbiB0aGUgb3V0cHV0LgorICAgYGBgamF2YXNjcmlwdAorICBBcHAuVGVhY2hl
ciA9IEFwcC5QZXJzb24uZXh0ZW5kKHsKKyAgICB0b1N0cmluZ0V4dGVuc2lvbjogZnVuY3Rpb24o
KSB7CisgICAgICByZXR1cm4gdGhpcy5nZXQoJ2Z1bGxOYW1lJyk7CisgICAgfQorICB9KTsKKyAg
dGVhY2hlciA9IEFwcC5UZWFjaGVyLmNyZWF0ZSgpCisgIHRlYWNoZXIudG9TdHJpbmcoKTsgLy89
PiAiPEFwcC5UZWFjaGVyOmVtYmVyMTAyNjpUb20gRGFsZT4iCisgIGBgYAorICAgQG1ldGhvZCB0
b1N0cmluZworICBAcmV0dXJuIHtTdHJpbmd9IHN0cmluZyByZXByZXNlbnRhdGlvbgorICBAcHVi
bGljCisqLworZW5pZmVkKCdlbWJlci1ydW50aW1lL3N5c3RlbS9lYWNoX3Byb3h5JywgWydleHBv
cnRzJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCcsICdl
bWJlci1tZXRhbC9vYnNlcnZlcicsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9ldmVudHMnLCAnZW1i
ZXItbWV0YWwvZW1wdHlfb2JqZWN0JywgJ2VtYmVyLXJ1bnRpbWUvbWl4aW5zL2FycmF5J10sIGZ1
bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJNZXRhbFByb3BlcnR5X2dl
dCwgX2VtYmVyTWV0YWxPYnNlcnZlciwgX2VtYmVyTWV0YWxQcm9wZXJ0eV9ldmVudHMsIF9lbWJl
ck1ldGFsRW1wdHlfb2JqZWN0LCBfZW1iZXJSdW50aW1lTWl4aW5zQXJyYXkpIHsKKyAgJ3VzZSBz
dHJpY3QnOworCisgIC8qKgorICAgIFRoaXMgaXMgdGhlIG9iamVjdCBpbnN0YW5jZSByZXR1cm5l
ZCB3aGVuIHlvdSBnZXQgdGhlIGBAZWFjaGAgcHJvcGVydHkgb24gYW4KKyAgICBhcnJheS4gSXQg
dXNlcyB0aGUgdW5rbm93blByb3BlcnR5IGhhbmRsZXIgdG8gYXV0b21hdGljYWxseSBjcmVhdGUK
KyAgICBFYWNoQXJyYXkgaW5zdGFuY2VzIGZvciBwcm9wZXJ0eSBuYW1lcy4KKyAgICBAY2xhc3Mg
RWFjaFByb3h5CisgICAgQHByaXZhdGUKKyAgKi8KKyAgZnVuY3Rpb24gRWFjaFByb3h5KGNvbnRl
bnQpIHsKKyAgICB0aGlzLl9jb250ZW50ID0gY29udGVudDsKKyAgICB0aGlzLl9rZXlzID0gdW5k
ZWZpbmVkOworICAgIHRoaXMuX19lbWJlcl9tZXRhX18gPSBudWxsOworICB9CisKKyAgRWFjaFBy
b3h5LnByb3RvdHlwZSA9IHsKKyAgICBfX2RlZmluZU5vbkVudW1lcmFibGU6IGZ1bmN0aW9uIChw
cm9wZXJ0eSkgeworICAgICAgdGhpc1twcm9wZXJ0eS5uYW1lXSA9IHByb3BlcnR5LmRlc2NyaXB0
b3IudmFsdWU7CisgICAgfSwKKworICAgIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyAgICAvLyBBUlJBWSBDSEFOR0VTCisgICAg
Ly8gSW52b2tlcyB3aGVuZXZlciB0aGUgY29udGVudCBhcnJheSBpdHNlbGYgY2hhbmdlcy4KKwor
ICAgIGFycmF5V2lsbENoYW5nZTogZnVuY3Rpb24gKGNvbnRlbnQsIGlkeCwgcmVtb3ZlZENudCwg
YWRkZWRDbnQpIHsKKyAgICAgIHZhciBrZXlzID0gdGhpcy5fa2V5czsKKyAgICAgIHZhciBsaW0g
PSByZW1vdmVkQ250ID4gMCA/IGlkeCArIHJlbW92ZWRDbnQgOiAtMTsKKyAgICAgIGZvciAodmFy
IGtleSBpbiBrZXlzKSB7CisgICAgICAgIGlmIChsaW0gPiAwKSB7CisgICAgICAgICAgcmVtb3Zl
T2JzZXJ2ZXJGb3JDb250ZW50S2V5KGNvbnRlbnQsIGtleSwgdGhpcywgaWR4LCBsaW0pOworICAg
ICAgICB9CisgICAgICAgIF9lbWJlck1ldGFsUHJvcGVydHlfZXZlbnRzLnByb3BlcnR5V2lsbENo
YW5nZSh0aGlzLCBrZXkpOworICAgICAgfQorICAgIH0sCisKKyAgICBhcnJheURpZENoYW5nZTog
ZnVuY3Rpb24gKGNvbnRlbnQsIGlkeCwgcmVtb3ZlZENudCwgYWRkZWRDbnQpIHsKKyAgICAgIHZh
ciBrZXlzID0gdGhpcy5fa2V5czsKKyAgICAgIHZhciBsaW0gPSBhZGRlZENudCA+IDAgPyBpZHgg
KyBhZGRlZENudCA6IC0xOworICAgICAgZm9yICh2YXIga2V5IGluIGtleXMpIHsKKyAgICAgICAg
aWYgKGxpbSA+IDApIHsKKyAgICAgICAgICBhZGRPYnNlcnZlckZvckNvbnRlbnRLZXkoY29udGVu
dCwga2V5LCB0aGlzLCBpZHgsIGxpbSk7CisgICAgICAgIH0KKyAgICAgICAgX2VtYmVyTWV0YWxQ
cm9wZXJ0eV9ldmVudHMucHJvcGVydHlEaWRDaGFuZ2UodGhpcywga2V5KTsKKyAgICAgIH0KKyAg
ICB9LAorCisgICAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLgorICAgIC8vIExJU1RFTiBGT1IgTkVXIE9CU0VSVkVSUyBBTkQgT1RI
RVIgRVZFTlQgTElTVEVORVJTCisgICAgLy8gU3RhcnQgbW9uaXRvcmluZyBrZXlzIGJhc2VkIG9u
IHdobyBpcyBsaXN0ZW5pbmcuLi4KKworICAgIHdpbGxXYXRjaFByb3BlcnR5OiBmdW5jdGlvbiAo
cHJvcGVydHkpIHsKKyAgICAgIHRoaXMuYmVnaW5PYnNlcnZpbmdDb250ZW50S2V5KHByb3BlcnR5
KTsKKyAgICB9LAorCisgICAgZGlkVW53YXRjaFByb3BlcnR5OiBmdW5jdGlvbiAocHJvcGVydHkp
IHsKKyAgICAgIHRoaXMuc3RvcE9ic2VydmluZ0NvbnRlbnRLZXkocHJvcGVydHkpOworICAgIH0s
CisKKyAgICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uCisgICAgLy8gQ09OVEVOVCBLRVkgT0JTRVJWSU5HCisgICAgLy8gQWN0dWFs
IHdhdGNoIGtleXMgb24gdGhlIHNvdXJjZSBjb250ZW50LgorCisgICAgYmVnaW5PYnNlcnZpbmdD
b250ZW50S2V5OiBmdW5jdGlvbiAoa2V5TmFtZSkgeworICAgICAgdmFyIGtleXMgPSB0aGlzLl9r
ZXlzOworICAgICAgaWYgKCFrZXlzKSB7CisgICAgICAgIGtleXMgPSB0aGlzLl9rZXlzID0gbmV3
IF9lbWJlck1ldGFsRW1wdHlfb2JqZWN0LmRlZmF1bHQoKTsKKyAgICAgIH0KKworICAgICAgaWYg
KCFrZXlzW2tleU5hbWVdKSB7CisgICAgICAgIGtleXNba2V5TmFtZV0gPSAxOworICAgICAgICB2
YXIgY29udGVudCA9IHRoaXMuX2NvbnRlbnQ7CisgICAgICAgIHZhciBsZW4gPSBfZW1iZXJNZXRh
bFByb3BlcnR5X2dldC5nZXQoY29udGVudCwgJ2xlbmd0aCcpOworCisgICAgICAgIGFkZE9ic2Vy
dmVyRm9yQ29udGVudEtleShjb250ZW50LCBrZXlOYW1lLCB0aGlzLCAwLCBsZW4pOworICAgICAg
fSBlbHNlIHsKKyAgICAgICAga2V5c1trZXlOYW1lXSsrOworICAgICAgfQorICAgIH0sCisKKyAg
ICBzdG9wT2JzZXJ2aW5nQ29udGVudEtleTogZnVuY3Rpb24gKGtleU5hbWUpIHsKKyAgICAgIHZh
ciBrZXlzID0gdGhpcy5fa2V5czsKKyAgICAgIGlmIChrZXlzICYmIGtleXNba2V5TmFtZV0gPiAw
ICYmIC0ta2V5c1trZXlOYW1lXSA8PSAwKSB7CisgICAgICAgIHZhciBjb250ZW50ID0gdGhpcy5f
Y29udGVudDsKKyAgICAgICAgdmFyIGxlbiA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldChj
b250ZW50LCAnbGVuZ3RoJyk7CisKKyAgICAgICAgcmVtb3ZlT2JzZXJ2ZXJGb3JDb250ZW50S2V5
KGNvbnRlbnQsIGtleU5hbWUsIHRoaXMsIDAsIGxlbik7CisgICAgICB9CisgICAgfSwKKworICAg
IGNvbnRlbnRLZXlXaWxsQ2hhbmdlOiBmdW5jdGlvbiAob2JqLCBrZXlOYW1lKSB7CisgICAgICBf
ZW1iZXJNZXRhbFByb3BlcnR5X2V2ZW50cy5wcm9wZXJ0eVdpbGxDaGFuZ2UodGhpcywga2V5TmFt
ZSk7CisgICAgfSwKKworICAgIGNvbnRlbnRLZXlEaWRDaGFuZ2U6IGZ1bmN0aW9uIChvYmosIGtl
eU5hbWUpIHsKKyAgICAgIF9lbWJlck1ldGFsUHJvcGVydHlfZXZlbnRzLnByb3BlcnR5RGlkQ2hh
bmdlKHRoaXMsIGtleU5hbWUpOworICAgIH0KKyAgfTsKKworICBmdW5jdGlvbiBhZGRPYnNlcnZl
ckZvckNvbnRlbnRLZXkoY29udGVudCwga2V5TmFtZSwgcHJveHksIGlkeCwgbG9jKSB7CisgICAg
d2hpbGUgKC0tbG9jID49IGlkeCkgeworICAgICAgdmFyIGl0ZW0gPSBfZW1iZXJSdW50aW1lTWl4
aW5zQXJyYXkub2JqZWN0QXQoY29udGVudCwgbG9jKTsKKyAgICAgIGlmIChpdGVtKSB7CisgICAg
ICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdXaGVuIHVzaW5nIEBlYWNoIHRvIG9ic2VydmUg
dGhlIGFycmF5ICcgKyBjb250ZW50ICsgJywgdGhlIGFycmF5IG11c3QgcmV0dXJuIGFuIG9iamVj
dCcsIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0Jyk7CisgICAgICAgIF9lbWJlck1ldGFsT2JzZXJ2
ZXIuX2FkZEJlZm9yZU9ic2VydmVyKGl0ZW0sIGtleU5hbWUsIHByb3h5LCAnY29udGVudEtleVdp
bGxDaGFuZ2UnKTsKKyAgICAgICAgX2VtYmVyTWV0YWxPYnNlcnZlci5hZGRPYnNlcnZlcihpdGVt
LCBrZXlOYW1lLCBwcm94eSwgJ2NvbnRlbnRLZXlEaWRDaGFuZ2UnKTsKKyAgICAgIH0KKyAgICB9
CisgIH0KKworICBmdW5jdGlvbiByZW1vdmVPYnNlcnZlckZvckNvbnRlbnRLZXkoY29udGVudCwg
a2V5TmFtZSwgcHJveHksIGlkeCwgbG9jKSB7CisgICAgd2hpbGUgKC0tbG9jID49IGlkeCkgewor
ICAgICAgdmFyIGl0ZW0gPSBfZW1iZXJSdW50aW1lTWl4aW5zQXJyYXkub2JqZWN0QXQoY29udGVu
dCwgbG9jKTsKKyAgICAgIGlmIChpdGVtKSB7CisgICAgICAgIF9lbWJlck1ldGFsT2JzZXJ2ZXIu
X3JlbW92ZUJlZm9yZU9ic2VydmVyKGl0ZW0sIGtleU5hbWUsIHByb3h5LCAnY29udGVudEtleVdp
bGxDaGFuZ2UnKTsKKyAgICAgICAgX2VtYmVyTWV0YWxPYnNlcnZlci5yZW1vdmVPYnNlcnZlcihp
dGVtLCBrZXlOYW1lLCBwcm94eSwgJ2NvbnRlbnRLZXlEaWRDaGFuZ2UnKTsKKyAgICAgIH0KKyAg
ICB9CisgIH0KKworICBleHBvcnRzLmRlZmF1bHQgPSBFYWNoUHJveHk7Cit9KTsKK2VuaWZlZCgn
ZW1iZXItcnVudGltZS9zeXN0ZW0vbGF6eV9sb2FkJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFs
L2NvcmUnLCAnZW1iZXItcnVudGltZS9zeXN0ZW0vbmF0aXZlX2FycmF5J10sIGZ1bmN0aW9uIChl
eHBvcnRzLCBfZW1iZXJNZXRhbENvcmUsIF9lbWJlclJ1bnRpbWVTeXN0ZW1OYXRpdmVfYXJyYXkp
IHsKKyAgLypnbG9iYWxzIEN1c3RvbUV2ZW50ICovCisKKyAgJ3VzZSBzdHJpY3QnOworCisgIGV4
cG9ydHMub25Mb2FkID0gb25Mb2FkOworICBleHBvcnRzLnJ1bkxvYWRIb29rcyA9IHJ1bkxvYWRI
b29rczsKKworICAvKioKKyAgICBAbW9kdWxlIGVtYmVyCisgICAgQHN1Ym1vZHVsZSBlbWJlci1y
dW50aW1lCisgICovCisKKyAgdmFyIGxvYWRIb29rcyA9IF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0
LkVOVi5FTUJFUl9MT0FEX0hPT0tTIHx8IHt9OworICB2YXIgbG9hZGVkID0ge307CisgIHZhciBf
bG9hZGVkID0gbG9hZGVkOworCisgIGV4cG9ydHMuX2xvYWRlZCA9IF9sb2FkZWQ7CisgIC8qKgor
ICAgIERldGVjdHMgd2hlbiBhIHNwZWNpZmljIHBhY2thZ2Ugb2YgRW1iZXIgKGUuZy4gJ0VtYmVy
LkFwcGxpY2F0aW9uJykKKyAgICBoYXMgZnVsbHkgbG9hZGVkIGFuZCBpcyBhdmFpbGFibGUgZm9y
IGV4dGVuc2lvbi4KKyAgCisgICAgVGhlIHByb3ZpZGVkIGBjYWxsYmFja2Agd2lsbCBiZSBjYWxs
ZWQgd2l0aCB0aGUgYG5hbWVgIHBhc3NlZAorICAgIHJlc29sdmVkIGZyb20gYSBzdHJpbmcgaW50
byB0aGUgb2JqZWN0OgorICAKKyAgICBgYGAgamF2YXNjcmlwdAorICAgIEVtYmVyLm9uTG9hZCgn
RW1iZXIuQXBwbGljYXRpb24nIGZ1bmN0aW9uKGhiYXJzKSB7CisgICAgICBoYmFycy5yZWdpc3Rl
ckhlbHBlciguLi4pOworICAgIH0pOworICAgIGBgYAorICAKKyAgICBAbWV0aG9kIG9uTG9hZAor
ICAgIEBmb3IgRW1iZXIKKyAgICBAcGFyYW0gbmFtZSB7U3RyaW5nfSBuYW1lIG9mIGhvb2sKKyAg
ICBAcGFyYW0gY2FsbGJhY2sge0Z1bmN0aW9ufSBjYWxsYmFjayB0byBiZSBjYWxsZWQKKyAgICBA
cHJpdmF0ZQorICAqLworCisgIGZ1bmN0aW9uIG9uTG9hZChuYW1lLCBjYWxsYmFjaykgeworICAg
IHZhciBvYmplY3QgPSBsb2FkZWRbbmFtZV07CisKKyAgICBsb2FkSG9va3NbbmFtZV0gPSBsb2Fk
SG9va3NbbmFtZV0gfHwgX2VtYmVyUnVudGltZVN5c3RlbU5hdGl2ZV9hcnJheS5BKCk7CisgICAg
bG9hZEhvb2tzW25hbWVdLnB1c2hPYmplY3QoY2FsbGJhY2spOworCisgICAgaWYgKG9iamVjdCkg
eworICAgICAgY2FsbGJhY2sob2JqZWN0KTsKKyAgICB9CisgIH0KKworICAvKioKKyAgICBDYWxs
ZWQgd2hlbiBhbiBFbWJlci5qcyBwYWNrYWdlIChlLmcgRW1iZXIuQXBwbGljYXRpb24pIGhhcyBm
aW5pc2hlZAorICAgIGxvYWRpbmcuIFRyaWdnZXJzIGFueSBjYWxsYmFja3MgcmVnaXN0ZXJlZCBm
b3IgdGhpcyBldmVudC4KKyAgCisgICAgQG1ldGhvZCBydW5Mb2FkSG9va3MKKyAgICBAZm9yIEVt
YmVyCisgICAgQHBhcmFtIG5hbWUge1N0cmluZ30gbmFtZSBvZiBob29rCisgICAgQHBhcmFtIG9i
amVjdCB7T2JqZWN0fSBvYmplY3QgdG8gcGFzcyB0byBjYWxsYmFja3MKKyAgICBAcHJpdmF0ZQor
ICAqLworCisgIGZ1bmN0aW9uIHJ1bkxvYWRIb29rcyhuYW1lLCBvYmplY3QpIHsKKyAgICBsb2Fk
ZWRbbmFtZV0gPSBvYmplY3Q7CisKKyAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcg
JiYgdHlwZW9mIHdpbmRvdy5kaXNwYXRjaEV2ZW50ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBD
dXN0b21FdmVudCA9PT0gJ2Z1bmN0aW9uJykgeworICAgICAgdmFyIGV2ZW50ID0gbmV3IEN1c3Rv
bUV2ZW50KG5hbWUsIHsgZGV0YWlsOiBvYmplY3QsIG5hbWU6IG5hbWUgfSk7CisgICAgICB3aW5k
b3cuZGlzcGF0Y2hFdmVudChldmVudCk7CisgICAgfQorCisgICAgaWYgKGxvYWRIb29rc1tuYW1l
XSkgeworICAgICAgbG9hZEhvb2tzW25hbWVdLmZvckVhY2goZnVuY3Rpb24gKGNhbGxiYWNrKSB7
CisgICAgICAgIHJldHVybiBjYWxsYmFjayhvYmplY3QpOworICAgICAgfSk7CisgICAgfQorICB9
Cit9KTsKKy8vIEVtYmVyLkVOVi5FTUJFUl9MT0FEX0hPT0tTCitlbmlmZWQoJ2VtYmVyLXJ1bnRp
bWUvc3lzdGVtL25hbWVzcGFjZScsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9jb3JlJywgJ2Vt
YmVyLW1ldGFsL3Byb3BlcnR5X2dldCcsICdlbWJlci1tZXRhbC91dGlscycsICdlbWJlci1tZXRh
bC9taXhpbicsICdlbWJlci1ydW50aW1lL3N5c3RlbS9vYmplY3QnXSwgZnVuY3Rpb24gKGV4cG9y
dHMsIF9lbWJlck1ldGFsQ29yZSwgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQsIF9lbWJlck1ldGFs
VXRpbHMsIF9lbWJlck1ldGFsTWl4aW4sIF9lbWJlclJ1bnRpbWVTeXN0ZW1PYmplY3QpIHsKKyAg
LyoqCisgIEBtb2R1bGUgZW1iZXIKKyAgQHN1Ym1vZHVsZSBlbWJlci1ydW50aW1lCisgICovCisK
KyAgLy8gRW1iZXIubG9va3VwLCBFbWJlci5CT09URUQsIEVtYmVyLk5BTUVfS0VZLCBFbWJlci5h
bnlVbnByb2Nlc3NlZE1peGlucworICAndXNlIHN0cmljdCc7CisKKyAgLyoqCisgICAgQSBOYW1l
c3BhY2UgaXMgYW4gb2JqZWN0IHVzdWFsbHkgdXNlZCB0byBjb250YWluIG90aGVyIG9iamVjdHMg
b3IgbWV0aG9kcworICAgIHN1Y2ggYXMgYW4gYXBwbGljYXRpb24gb3IgZnJhbWV3b3JrLiBDcmVh
dGUgYSBuYW1lc3BhY2UgYW55dGltZSB5b3Ugd2FudAorICAgIHRvIGRlZmluZSBvbmUgb2YgdGhl
c2UgbmV3IGNvbnRhaW5lcnMuCisgIAorICAgICMgRXhhbXBsZSBVc2FnZQorICAKKyAgICBgYGBq
YXZhc2NyaXB0CisgICAgTXlGcmFtZXdvcmsgPSBFbWJlci5OYW1lc3BhY2UuY3JlYXRlKHsKKyAg
ICAgIFZFUlNJT046ICcxLjAuMCcKKyAgICB9KTsKKyAgICBgYGAKKyAgCisgICAgQGNsYXNzIE5h
bWVzcGFjZQorICAgIEBuYW1lc3BhY2UgRW1iZXIKKyAgICBAZXh0ZW5kcyBFbWJlci5PYmplY3QK
KyAgICBAcHVibGljCisgICovCisgIHZhciBOYW1lc3BhY2UgPSBfZW1iZXJSdW50aW1lU3lzdGVt
T2JqZWN0LmRlZmF1bHQuZXh0ZW5kKHsKKyAgICBpc05hbWVzcGFjZTogdHJ1ZSwKKworICAgIGlu
aXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgIE5hbWVzcGFjZS5OQU1FU1BBQ0VTLnB1c2godGhpcyk7
CisgICAgICBOYW1lc3BhY2UuUFJPQ0VTU0VEID0gZmFsc2U7CisgICAgfSwKKworICAgIHRvU3Ry
aW5nOiBmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgbmFtZSA9IF9lbWJlck1ldGFsUHJvcGVydHlf
Z2V0LmdldCh0aGlzLCAnbmFtZScpIHx8IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlz
LCAnbW9kdWxlUHJlZml4Jyk7CisgICAgICBpZiAobmFtZSkgeworICAgICAgICByZXR1cm4gbmFt
ZTsKKyAgICAgIH0KKworICAgICAgZmluZE5hbWVzcGFjZXMoKTsKKyAgICAgIHJldHVybiB0aGlz
W05BTUVfS0VZXTsKKyAgICB9LAorCisgICAgbmFtZUNsYXNzZXM6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgIHByb2Nlc3NOYW1lc3BhY2UoW3RoaXMudG9TdHJpbmcoKV0sIHRoaXMsIHt9KTsKKyAgICB9
LAorCisgICAgZGVzdHJveTogZnVuY3Rpb24gKCkgeworICAgICAgdmFyIG5hbWVzcGFjZXMgPSBO
YW1lc3BhY2UuTkFNRVNQQUNFUzsKKyAgICAgIHZhciB0b1N0cmluZyA9IHRoaXMudG9TdHJpbmco
KTsKKworICAgICAgaWYgKHRvU3RyaW5nKSB7CisgICAgICAgIF9lbWJlck1ldGFsQ29yZS5kZWZh
dWx0Lmxvb2t1cFt0b1N0cmluZ10gPSB1bmRlZmluZWQ7CisgICAgICAgIGRlbGV0ZSBOYW1lc3Bh
Y2UuTkFNRVNQQUNFU19CWV9JRFt0b1N0cmluZ107CisgICAgICB9CisgICAgICBuYW1lc3BhY2Vz
LnNwbGljZShuYW1lc3BhY2VzLmluZGV4T2YodGhpcyksIDEpOworICAgICAgdGhpcy5fc3VwZXIu
YXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICB9CisgIH0pOworCisgIE5hbWVzcGFjZS5yZW9w
ZW5DbGFzcyh7CisgICAgTkFNRVNQQUNFUzogW19lbWJlck1ldGFsQ29yZS5kZWZhdWx0XSwKKyAg
ICBOQU1FU1BBQ0VTX0JZX0lEOiB7fSwKKyAgICBQUk9DRVNTRUQ6IGZhbHNlLAorICAgIHByb2Nl
c3NBbGw6IHByb2Nlc3NBbGxOYW1lc3BhY2VzLAorICAgIGJ5TmFtZTogZnVuY3Rpb24gKG5hbWUp
IHsKKyAgICAgIGlmICghX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuQk9PVEVEKSB7CisgICAgICAg
IHByb2Nlc3NBbGxOYW1lc3BhY2VzKCk7CisgICAgICB9CisKKyAgICAgIHJldHVybiBOQU1FU1BB
Q0VTX0JZX0lEW25hbWVdOworICAgIH0KKyAgfSk7CisKKyAgdmFyIE5BTUVTUEFDRVNfQllfSUQg
PSBOYW1lc3BhY2UuTkFNRVNQQUNFU19CWV9JRDsKKworICB2YXIgaGFzT3duUHJvcCA9ICh7fSku
aGFzT3duUHJvcGVydHk7CisKKyAgZnVuY3Rpb24gcHJvY2Vzc05hbWVzcGFjZShwYXRocywgcm9v
dCwgc2VlbikgeworICAgIHZhciBpZHggPSBwYXRocy5sZW5ndGg7CisKKyAgICBOQU1FU1BBQ0VT
X0JZX0lEW3BhdGhzLmpvaW4oJy4nKV0gPSByb290OworCisgICAgLy8gTG9vcCBvdmVyIGFsbCBv
ZiB0aGUga2V5cyBpbiB0aGUgbmFtZXNwYWNlLCBsb29raW5nIGZvciBjbGFzc2VzCisgICAgZm9y
ICh2YXIga2V5IGluIHJvb3QpIHsKKyAgICAgIGlmICghaGFzT3duUHJvcC5jYWxsKHJvb3QsIGtl
eSkpIHsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisgICAgICB2YXIgb2JqID0gcm9vdFtr
ZXldOworCisgICAgICAvLyBJZiB3ZSBhcmUgcHJvY2Vzc2luZyB0aGUgYEVtYmVyYCBuYW1lc3Bh
Y2UsIGZvciBleGFtcGxlLCB0aGUKKyAgICAgIC8vIGBwYXRoc2Agd2lsbCBzdGFydCB3aXRoIGBb
IkVtYmVyIl1gLiBFdmVyeSBpdGVyYXRpb24gdGhyb3VnaAorICAgICAgLy8gdGhlIGxvb3Agd2ls
bCB1cGRhdGUgdGhlICoqc2Vjb25kKiogZWxlbWVudCBvZiB0aGlzIGxpc3Qgd2l0aAorICAgICAg
Ly8gdGhlIGtleSwgc28gcHJvY2Vzc2luZyBgRW1iZXIuVmlld2Agd2lsbCBtYWtlIHRoZSBBcnJh
eQorICAgICAgLy8gYFsnRW1iZXInLCAnVmlldyddYC4KKyAgICAgIHBhdGhzW2lkeF0gPSBrZXk7
CisKKyAgICAgIC8vIElmIHdlIGhhdmUgZm91bmQgYW4gdW5wcm9jZXNzZWQgY2xhc3MKKyAgICAg
IGlmIChvYmogJiYgb2JqLnRvU3RyaW5nID09PSBjbGFzc1RvU3RyaW5nICYmICFvYmpbTkFNRV9L
RVldKSB7CisgICAgICAgIC8vIFJlcGxhY2UgdGhlIGNsYXNzJyBgdG9TdHJpbmdgIHdpdGggdGhl
IGRvdC1zZXBhcmF0ZWQgcGF0aAorICAgICAgICAvLyBhbmQgc2V0IGl0cyBgTkFNRV9LRVlgCisg
ICAgICAgIG9ialtOQU1FX0tFWV0gPSBwYXRocy5qb2luKCcuJyk7CisKKyAgICAgICAgLy8gU3Vw
cG9ydCBuZXN0ZWQgbmFtZXNwYWNlcworICAgICAgfSBlbHNlIGlmIChvYmogJiYgb2JqLmlzTmFt
ZXNwYWNlKSB7CisgICAgICAgICAgLy8gU2tpcCBhbGlhc2VkIG5hbWVzcGFjZXMKKyAgICAgICAg
ICBpZiAoc2VlbltfZW1iZXJNZXRhbFV0aWxzLmd1aWRGb3Iob2JqKV0pIHsKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgIH0KKyAgICAgICAgICBzZWVuW19lbWJlck1ldGFsVXRpbHMu
Z3VpZEZvcihvYmopXSA9IHRydWU7CisKKyAgICAgICAgICAvLyBQcm9jZXNzIHRoZSBjaGlsZCBu
YW1lc3BhY2UKKyAgICAgICAgICBwcm9jZXNzTmFtZXNwYWNlKHBhdGhzLCBvYmosIHNlZW4pOwor
ICAgICAgICB9CisgICAgfQorCisgICAgcGF0aHMubGVuZ3RoID0gaWR4OyAvLyBjdXQgb3V0IGxh
c3QgaXRlbQorICB9CisKKyAgdmFyIFNUQVJUU19XSVRIX1VQUEVSQ0FTRSA9IC9eW0EtWl0vOwor
CisgIGZ1bmN0aW9uIHRyeUlzTmFtZXNwYWNlKGxvb2t1cCwgcHJvcCkgeworICAgIHRyeSB7Cisg
ICAgICB2YXIgb2JqID0gbG9va3VwW3Byb3BdOworICAgICAgcmV0dXJuIG9iaiAmJiBvYmouaXNO
YW1lc3BhY2UgJiYgb2JqOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIC8vIGNvbnRpbnVlCisg
ICAgfQorICB9CisKKyAgZnVuY3Rpb24gZmluZE5hbWVzcGFjZXMoKSB7CisgICAgdmFyIGxvb2t1
cCA9IF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0Lmxvb2t1cDsKKyAgICB2YXIgb2JqOworCisgICAg
aWYgKE5hbWVzcGFjZS5QUk9DRVNTRUQpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBm
b3IgKHZhciBwcm9wIGluIGxvb2t1cCkgeworICAgICAgLy8gT25seSBwcm9jZXNzIGVudGl0aWVz
IHRoYXQgc3RhcnQgd2l0aCB1cHBlcmNhc2UgQS1aCisgICAgICBpZiAoIVNUQVJUU19XSVRIX1VQ
UEVSQ0FTRS50ZXN0KHByb3ApKSB7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAg
ICAvLyBVbmZvcnR1bmF0ZWx5LCBzb21lIHZlcnNpb25zIG9mIElFIGRvbid0IHN1cHBvcnQgd2lu
ZG93Lmhhc093blByb3BlcnR5CisgICAgICBpZiAobG9va3VwLmhhc093blByb3BlcnR5ICYmICFs
b29rdXAuaGFzT3duUHJvcGVydHkocHJvcCkpIHsKKyAgICAgICAgY29udGludWU7CisgICAgICB9
CisKKyAgICAgIC8vIEF0IHRpbWVzIHdlIGFyZSBub3QgYWxsb3dlZCB0byBhY2Nlc3MgY2VydGFp
biBwcm9wZXJ0aWVzIGZvciBzZWN1cml0eSByZWFzb25zLgorICAgICAgLy8gVGhlcmUgYXJlIGFs
c28gdGltZXMgd2hlcmUgZXZlbiBpZiB3ZSBjYW4gYWNjZXNzIHRoZW0sIHdlIGFyZSBub3QgYWxs
b3dlZCB0byBhY2Nlc3MgdGhlaXIgcHJvcGVydGllcy4KKyAgICAgIG9iaiA9IHRyeUlzTmFtZXNw
YWNlKGxvb2t1cCwgcHJvcCk7CisgICAgICBpZiAob2JqKSB7CisgICAgICAgIG9ialtOQU1FX0tF
WV0gPSBwcm9wOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHZhciBOQU1FX0tFWSA9IF9lbWJl
ck1ldGFsQ29yZS5kZWZhdWx0Lk5BTUVfS0VZID0gX2VtYmVyTWV0YWxVdGlscy5HVUlEX0tFWSAr
ICdfbmFtZSc7CisKKyAgZnVuY3Rpb24gc3VwZXJDbGFzc1N0cmluZyhtaXhpbikgeworICAgIHZh
ciBzdXBlcmNsYXNzID0gbWl4aW4uc3VwZXJjbGFzczsKKyAgICBpZiAoc3VwZXJjbGFzcykgewor
ICAgICAgaWYgKHN1cGVyY2xhc3NbTkFNRV9LRVldKSB7CisgICAgICAgIHJldHVybiBzdXBlcmNs
YXNzW05BTUVfS0VZXTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBzdXBlckNsYXNz
U3RyaW5nKHN1cGVyY2xhc3MpOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICByZXR1cm47
CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gY2xhc3NUb1N0cmluZygpIHsKKyAgICBpZiAoIV9l
bWJlck1ldGFsQ29yZS5kZWZhdWx0LkJPT1RFRCAmJiAhdGhpc1tOQU1FX0tFWV0pIHsKKyAgICAg
IHByb2Nlc3NBbGxOYW1lc3BhY2VzKCk7CisgICAgfQorCisgICAgdmFyIHJldDsKKworICAgIGlm
ICh0aGlzW05BTUVfS0VZXSkgeworICAgICAgcmV0ID0gdGhpc1tOQU1FX0tFWV07CisgICAgfSBl
bHNlIGlmICh0aGlzLl90b1N0cmluZykgeworICAgICAgcmV0ID0gdGhpcy5fdG9TdHJpbmc7Cisg
ICAgfSBlbHNlIHsKKyAgICAgIHZhciBzdHIgPSBzdXBlckNsYXNzU3RyaW5nKHRoaXMpOworICAg
ICAgaWYgKHN0cikgeworICAgICAgICByZXQgPSAnKHN1YmNsYXNzIG9mICcgKyBzdHIgKyAnKSc7
CisgICAgICB9IGVsc2UgeworICAgICAgICByZXQgPSAnKHVua25vd24gbWl4aW4pJzsKKyAgICAg
IH0KKyAgICAgIHRoaXMudG9TdHJpbmcgPSBtYWtlVG9TdHJpbmcocmV0KTsKKyAgICB9CisKKyAg
ICByZXR1cm4gcmV0OworICB9CisKKyAgZnVuY3Rpb24gcHJvY2Vzc0FsbE5hbWVzcGFjZXMoKSB7
CisgICAgdmFyIHVucHJvY2Vzc2VkTmFtZXNwYWNlcyA9ICFOYW1lc3BhY2UuUFJPQ0VTU0VEOwor
ICAgIHZhciB1bnByb2Nlc3NlZE1peGlucyA9IF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LmFueVVu
cHJvY2Vzc2VkTWl4aW5zOworCisgICAgaWYgKHVucHJvY2Vzc2VkTmFtZXNwYWNlcykgeworICAg
ICAgZmluZE5hbWVzcGFjZXMoKTsKKyAgICAgIE5hbWVzcGFjZS5QUk9DRVNTRUQgPSB0cnVlOwor
ICAgIH0KKworICAgIGlmICh1bnByb2Nlc3NlZE5hbWVzcGFjZXMgfHwgdW5wcm9jZXNzZWRNaXhp
bnMpIHsKKyAgICAgIHZhciBuYW1lc3BhY2VzID0gTmFtZXNwYWNlLk5BTUVTUEFDRVM7CisgICAg
ICB2YXIgbmFtZXNwYWNlOworCisgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IG5hbWVzcGFjZXMu
bGVuZ3RoOyBpIDwgbDsgaSsrKSB7CisgICAgICAgIG5hbWVzcGFjZSA9IG5hbWVzcGFjZXNbaV07
CisgICAgICAgIHByb2Nlc3NOYW1lc3BhY2UoW25hbWVzcGFjZS50b1N0cmluZygpXSwgbmFtZXNw
YWNlLCB7fSk7CisgICAgICB9CisKKyAgICAgIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LmFueVVu
cHJvY2Vzc2VkTWl4aW5zID0gZmFsc2U7CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gbWFrZVRv
U3RyaW5nKHJldCkgeworICAgIHJldHVybiBmdW5jdGlvbiAoKSB7CisgICAgICByZXR1cm4gcmV0
OworICAgIH07CisgIH0KKworICBfZW1iZXJNZXRhbE1peGluLk1peGluLnByb3RvdHlwZS50b1N0
cmluZyA9IGNsYXNzVG9TdHJpbmc7IC8vIEVTNlRPRE86IGFsdGVyaW5nIGltcG9ydGVkIG9iamVj
dHMuIFNCQi4KKworICBleHBvcnRzLmRlZmF1bHQgPSBOYW1lc3BhY2U7Cit9KTsKK2VuaWZlZCgn
ZW1iZXItcnVudGltZS9zeXN0ZW0vbmF0aXZlX2FycmF5JywgWydleHBvcnRzJywgJ2VtYmVyLW1l
dGFsL2NvcmUnLCAnZW1iZXItbWV0YWwvcmVwbGFjZScsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9n
ZXQnLCAnZW1iZXItbWV0YWwvbWl4aW4nLCAnZW1iZXItcnVudGltZS9taXhpbnMvYXJyYXknLCAn
ZW1iZXItcnVudGltZS9taXhpbnMvbXV0YWJsZV9hcnJheScsICdlbWJlci1ydW50aW1lL21peGlu
cy9vYnNlcnZhYmxlJywgJ2VtYmVyLXJ1bnRpbWUvbWl4aW5zL2NvcHlhYmxlJywgJ2VtYmVyLXJ1
bnRpbWUvbWl4aW5zL2ZyZWV6YWJsZScsICdlbWJlci1ydW50aW1lL2NvcHknXSwgZnVuY3Rpb24g
KGV4cG9ydHMsIF9lbWJlck1ldGFsQ29yZSwgX2VtYmVyTWV0YWxSZXBsYWNlLCBfZW1iZXJNZXRh
bFByb3BlcnR5X2dldCwgX2VtYmVyTWV0YWxNaXhpbiwgX2VtYmVyUnVudGltZU1peGluc0FycmF5
LCBfZW1iZXJSdW50aW1lTWl4aW5zTXV0YWJsZV9hcnJheSwgX2VtYmVyUnVudGltZU1peGluc09i
c2VydmFibGUsIF9lbWJlclJ1bnRpbWVNaXhpbnNDb3B5YWJsZSwgX2VtYmVyUnVudGltZU1peGlu
c0ZyZWV6YWJsZSwgX2VtYmVyUnVudGltZUNvcHkpIHsKKyAgLyoqCisgIEBtb2R1bGUgZW1iZXIK
KyAgQHN1Ym1vZHVsZSBlbWJlci1ydW50aW1lCisgICovCisKKyAgJ3VzZSBzdHJpY3QnOworCisg
IC8vIEFkZCBFbWJlci5BcnJheSB0byBBcnJheS5wcm90b3R5cGUuIFJlbW92ZSBtZXRob2RzIHdp
dGggbmF0aXZlCisgIC8vIGltcGxlbWVudGF0aW9ucyBhbmQgc3VwcGx5IHNvbWUgbW9yZSBvcHRp
bWl6ZWQgdmVyc2lvbnMgb2YgZ2VuZXJpYyBtZXRob2RzCisgIC8vIGJlY2F1c2UgdGhleSBhcmUg
c28gY29tbW9uLgorCisgIC8qKgorICAgIFRoZSBOYXRpdmVBcnJheSBtaXhpbiBjb250YWlucyB0
aGUgcHJvcGVydGllcyBuZWVkZWQgdG8gbWFrZSB0aGUgbmF0aXZlCisgICAgQXJyYXkgc3VwcG9y
dCBFbWJlci5NdXRhYmxlQXJyYXkgYW5kIGFsbCBvZiBpdHMgZGVwZW5kZW50IEFQSXMuIFVubGVz
cyB5b3UKKyAgICBoYXZlIGBFbWJlci5FWFRFTkRfUFJPVE9UWVBFU2Agb3IgYEVtYmVyLkVYVEVO
RF9QUk9UT1RZUEVTLkFycmF5YCBzZXQgdG8KKyAgICBmYWxzZSwgdGhpcyB3aWxsIGJlIGFwcGxp
ZWQgYXV0b21hdGljYWxseS4gT3RoZXJ3aXNlIHlvdSBjYW4gYXBwbHkgdGhlIG1peGluCisgICAg
YXQgYW55dGltZSBieSBjYWxsaW5nIGBFbWJlci5OYXRpdmVBcnJheS5hcHBseShBcnJheS5wcm90
b3R5cGUpYC4KKyAgCisgICAgQGNsYXNzIE5hdGl2ZUFycmF5CisgICAgQG5hbWVzcGFjZSBFbWJl
cgorICAgIEB1c2VzIEVtYmVyLk11dGFibGVBcnJheQorICAgIEB1c2VzIEVtYmVyLk9ic2VydmFi
bGUKKyAgICBAdXNlcyBFbWJlci5Db3B5YWJsZQorICAgIEBwdWJsaWMKKyAgKi8KKyAgdmFyIE5h
dGl2ZUFycmF5ID0gX2VtYmVyTWV0YWxNaXhpbi5NaXhpbi5jcmVhdGUoX2VtYmVyUnVudGltZU1p
eGluc011dGFibGVfYXJyYXkuZGVmYXVsdCwgX2VtYmVyUnVudGltZU1peGluc09ic2VydmFibGUu
ZGVmYXVsdCwgX2VtYmVyUnVudGltZU1peGluc0NvcHlhYmxlLmRlZmF1bHQsIHsKKworICAgIC8v
IGJlY2F1c2UgbGVuZ3RoIGlzIGEgYnVpbHQtaW4gcHJvcGVydHkgd2UgbmVlZCB0byBrbm93IHRv
IGp1c3QgZ2V0IHRoZQorICAgIC8vIG9yaWdpbmFsIHByb3BlcnR5LgorICAgIGdldDogZnVuY3Rp
b24gKGtleSkgeworICAgICAgaWYgKGtleSA9PT0gJ2xlbmd0aCcpIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMubGVuZ3RoOworICAgICAgfSBlbHNlIGlmICgnbnVtYmVyJyA9PT0gdHlwZW9mIGtleSkg
eworICAgICAgICByZXR1cm4gdGhpc1trZXldOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuX3N1cGVyKGtleSk7CisgICAgICB9CisgICAgfSwKKworICAgIG9iamVjdEF0OiBm
dW5jdGlvbiAoaWR4KSB7CisgICAgICByZXR1cm4gdGhpc1tpZHhdOworICAgIH0sCisKKyAgICAv
LyBwcmltaXRpdmUgZm9yIGFycmF5IHN1cHBvcnQuCisgICAgcmVwbGFjZTogZnVuY3Rpb24gKGlk
eCwgYW10LCBvYmplY3RzKSB7CisgICAgICBpZiAodGhpcy5pc0Zyb3plbikgeworICAgICAgICB0
aHJvdyBfZW1iZXJSdW50aW1lTWl4aW5zRnJlZXphYmxlLkZST1pFTl9FUlJPUjsKKyAgICAgIH0K
KworICAgICAgLy8gaWYgd2UgcmVwbGFjZWQgZXhhY3RseSB0aGUgc2FtZSBudW1iZXIgb2YgaXRl
bXMsIHRoZW4gcGFzcyBvbmx5IHRoZQorICAgICAgLy8gcmVwbGFjZWQgcmFuZ2UuIE90aGVyd2lz
ZSwgcGFzcyB0aGUgZnVsbCByZW1haW5pbmcgYXJyYXkgbGVuZ3RoCisgICAgICAvLyBzaW5jZSBl
dmVyeXRoaW5nIGhhcyBzaGlmdGVkCisgICAgICB2YXIgbGVuID0gb2JqZWN0cyA/IF9lbWJlck1l
dGFsUHJvcGVydHlfZ2V0LmdldChvYmplY3RzLCAnbGVuZ3RoJykgOiAwOworICAgICAgdGhpcy5h
cnJheUNvbnRlbnRXaWxsQ2hhbmdlKGlkeCwgYW10LCBsZW4pOworCisgICAgICBpZiAobGVuID09
PSAwKSB7CisgICAgICAgIHRoaXMuc3BsaWNlKGlkeCwgYW10KTsKKyAgICAgIH0gZWxzZSB7Cisg
ICAgICAgIF9lbWJlck1ldGFsUmVwbGFjZS5fcmVwbGFjZSh0aGlzLCBpZHgsIGFtdCwgb2JqZWN0
cyk7CisgICAgICB9CisKKyAgICAgIHRoaXMuYXJyYXlDb250ZW50RGlkQ2hhbmdlKGlkeCwgYW10
LCBsZW4pOworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKworICAgIC8vIElmIHlvdSBhc2sg
Zm9yIGFuIHVua25vd24gcHJvcGVydHksIHRoZW4gdHJ5IHRvIGNvbGxlY3QgdGhlIHZhbHVlCisg
ICAgLy8gZnJvbSBtZW1iZXIgaXRlbXMuCisgICAgdW5rbm93blByb3BlcnR5OiBmdW5jdGlvbiAo
a2V5LCB2YWx1ZSkgeworICAgICAgdmFyIHJldDsgLy8gPSB0aGlzLnJlZHVjZWRQcm9wZXJ0eShr
ZXksIHZhbHVlKTsKKyAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHJldCA9PT0gdW5k
ZWZpbmVkKSB7CisgICAgICAgIHJldCA9IHRoaXNba2V5XSA9IHZhbHVlOworICAgICAgfQorICAg
ICAgcmV0dXJuIHJldDsKKyAgICB9LAorCisgICAgaW5kZXhPZjogQXJyYXkucHJvdG90eXBlLmlu
ZGV4T2YsCisgICAgbGFzdEluZGV4T2Y6IEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZiwKKwor
ICAgIGNvcHk6IGZ1bmN0aW9uIChkZWVwKSB7CisgICAgICBpZiAoZGVlcCkgeworICAgICAgICBy
ZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHsKKyAgICAgICAgICByZXR1cm4gX2VtYmVy
UnVudGltZUNvcHkuZGVmYXVsdChpdGVtLCB0cnVlKTsKKyAgICAgICAgfSk7CisgICAgICB9CisK
KyAgICAgIHJldHVybiB0aGlzLnNsaWNlKCk7CisgICAgfQorICB9KTsKKworICAvLyBSZW1vdmUg
YW55IG1ldGhvZHMgaW1wbGVtZW50ZWQgbmF0aXZlbHkgc28gd2UgZG9uJ3Qgb3ZlcnJpZGUgdGhl
bQorICB2YXIgaWdub3JlID0gWydsZW5ndGgnXTsKKyAgTmF0aXZlQXJyYXkua2V5cygpLmZvckVh
Y2goZnVuY3Rpb24gKG1ldGhvZE5hbWUpIHsKKyAgICBpZiAoQXJyYXkucHJvdG90eXBlW21ldGhv
ZE5hbWVdKSB7CisgICAgICBpZ25vcmUucHVzaChtZXRob2ROYW1lKTsKKyAgICB9CisgIH0pOwor
CisgIGV4cG9ydHMuTmF0aXZlQXJyYXkgLy8gVE9ETzogb25seSB1c2UgZGVmYXVsdCBleHBvcnQK
KyAgID0gTmF0aXZlQXJyYXkgPSBOYXRpdmVBcnJheS53aXRob3V0LmFwcGx5KE5hdGl2ZUFycmF5
LCBpZ25vcmUpOworCisgIC8qKgorICAgIENyZWF0ZXMgYW4gYEVtYmVyLk5hdGl2ZUFycmF5YCBm
cm9tIGFuIEFycmF5IGxpa2Ugb2JqZWN0LgorICAgIERvZXMgbm90IG1vZGlmeSB0aGUgb3JpZ2lu
YWwgb2JqZWN0LiBFbWJlci5BIGlzIG5vdCBuZWVkZWQgaWYKKyAgICBgRW1iZXIuRVhURU5EX1BS
T1RPVFlQRVNgIGlzIGB0cnVlYCAodGhlIGRlZmF1bHQgdmFsdWUpLiBIb3dldmVyLAorICAgIGl0
IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IHVzZSBFbWJlci5BIHdoZW4gY3JlYXRpbmcgYWRkb25z
IGZvcgorICAgIGVtYmVyIG9yIHdoZW4geW91IGNhbiBub3QgZ3VhcmFudGVlIHRoYXQgYEVtYmVy
LkVYVEVORF9QUk9UT1RZUEVTYAorICAgIHdpbGwgYmUgYHRydWVgLgorICAKKyAgICBFeGFtcGxl
CisgIAorICAgIGBgYGpzCisgICAgZXhwb3J0IGRlZmF1bHQgRW1iZXIuQ29tcG9uZW50LmV4dGVu
ZCh7CisgICAgICB0YWdOYW1lOiAndWwnLAorICAgICAgY2xhc3NOYW1lczogWydwYWdpbmF0aW9u
J10sCisgIAorICAgICAgaW5pdCgpIHsKKyAgICAgICAgdGhpcy5fc3VwZXIoLi4uYXJndW1lbnRz
KTsKKyAgCisgICAgICAgIGlmICghdGhpcy5nZXQoJ2NvbnRlbnQnKSkgeworICAgICAgICAgIHRo
aXMuc2V0KCdjb250ZW50JywgRW1iZXIuQSgpKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0p
OworICAgIGBgYAorICAKKyAgICBAbWV0aG9kIEEKKyAgICBAZm9yIEVtYmVyCisgICAgQHJldHVy
biB7RW1iZXIuTmF0aXZlQXJyYXl9CisgICAgQHB1YmxpYworICAqLworICB2YXIgQTsKKworICBp
ZiAoX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuRVhURU5EX1BST1RPVFlQRVMgPT09IHRydWUgfHwg
X2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuRVhURU5EX1BST1RPVFlQRVMuQXJyYXkpIHsKKyAgICBO
YXRpdmVBcnJheS5hcHBseShBcnJheS5wcm90b3R5cGUpOworICAgIGV4cG9ydHMuIC8vIEVTNlRP
RE86IFNldHRpbmcgQSBvbnRvIHRoZSBvYmplY3QgcmV0dXJuZWQgYnkgZW1iZXItbWV0YWwvY29y
ZSB0byBhdm9pZCBjaXJjbGVzCisgICAgQSA9IEEgPSBmdW5jdGlvbiAoYXJyKSB7CisgICAgICBy
ZXR1cm4gYXJyIHx8IFtdOworICAgIH07CisgIH0gZWxzZSB7CisgICAgZXhwb3J0cy5BID0gQSA9
IGZ1bmN0aW9uIChhcnIpIHsKKyAgICAgIGlmICghYXJyKSB7CisgICAgICAgIGFyciA9IFtdOwor
ICAgICAgfQorICAgICAgcmV0dXJuIF9lbWJlclJ1bnRpbWVNaXhpbnNBcnJheS5kZWZhdWx0LmRl
dGVjdChhcnIpID8gYXJyIDogTmF0aXZlQXJyYXkuYXBwbHkoYXJyKTsKKyAgICB9OworICB9CisK
KyAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuQSA9IEE7ZXhwb3J0cy5BID0gQTsKKyAgZXhwb3J0
cy5OYXRpdmVBcnJheSA9IE5hdGl2ZUFycmF5OworICBleHBvcnRzLmRlZmF1bHQgPSBOYXRpdmVB
cnJheTsKK30pOworLy8gRW1iZXIuRVhURU5EX1BST1RPVFlQRVMKK2VuaWZlZCgnZW1iZXItcnVu
dGltZS9zeXN0ZW0vb2JqZWN0JywgWydleHBvcnRzJywgJ2VtYmVyLXJ1bnRpbWUvc3lzdGVtL2Nv
cmVfb2JqZWN0JywgJ2VtYmVyLXJ1bnRpbWUvbWl4aW5zL29ic2VydmFibGUnXSwgZnVuY3Rpb24g
KGV4cG9ydHMsIF9lbWJlclJ1bnRpbWVTeXN0ZW1Db3JlX29iamVjdCwgX2VtYmVyUnVudGltZU1p
eGluc09ic2VydmFibGUpIHsKKyAgLyoqCisgIEBtb2R1bGUgZW1iZXIKKyAgQHN1Ym1vZHVsZSBl
bWJlci1ydW50aW1lCisgICovCisKKyAgJ3VzZSBzdHJpY3QnOworCisgIC8qKgorICAgIGBFbWJl
ci5PYmplY3RgIGlzIHRoZSBtYWluIGJhc2UgY2xhc3MgZm9yIGFsbCBFbWJlciBvYmplY3RzLiBJ
dCBpcyBhIHN1YmNsYXNzCisgICAgb2YgYEVtYmVyLkNvcmVPYmplY3RgIHdpdGggdGhlIGBFbWJl
ci5PYnNlcnZhYmxlYCBtaXhpbiBhcHBsaWVkLiBGb3IgZGV0YWlscywKKyAgICBzZWUgdGhlIGRv
Y3VtZW50YXRpb24gZm9yIGVhY2ggb2YgdGhlc2UuCisgIAorICAgIEBjbGFzcyBPYmplY3QKKyAg
ICBAbmFtZXNwYWNlIEVtYmVyCisgICAgQGV4dGVuZHMgRW1iZXIuQ29yZU9iamVjdAorICAgIEB1
c2VzIEVtYmVyLk9ic2VydmFibGUKKyAgICBAcHVibGljCisgICovCisgIHZhciBFbWJlck9iamVj
dCA9IF9lbWJlclJ1bnRpbWVTeXN0ZW1Db3JlX29iamVjdC5kZWZhdWx0LmV4dGVuZChfZW1iZXJS
dW50aW1lTWl4aW5zT2JzZXJ2YWJsZS5kZWZhdWx0KTsKKyAgRW1iZXJPYmplY3QudG9TdHJpbmcg
PSBmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuICdFbWJlci5PYmplY3QnOworICB9OworCisgIGV4
cG9ydHMuZGVmYXVsdCA9IEVtYmVyT2JqZWN0OworfSk7CitlbmlmZWQoJ2VtYmVyLXJ1bnRpbWUv
c3lzdGVtL29iamVjdF9wcm94eScsIFsnZXhwb3J0cycsICdlbWJlci1ydW50aW1lL3N5c3RlbS9v
YmplY3QnLCAnZW1iZXItcnVudGltZS9taXhpbnMvLXByb3h5J10sIGZ1bmN0aW9uIChleHBvcnRz
LCBfZW1iZXJSdW50aW1lU3lzdGVtT2JqZWN0LCBfZW1iZXJSdW50aW1lTWl4aW5zUHJveHkpIHsK
KyAgJ3VzZSBzdHJpY3QnOworCisgIC8qKgorICAgIGBFbWJlci5PYmplY3RQcm94eWAgZm9yd2Fy
ZHMgYWxsIHByb3BlcnRpZXMgbm90IGRlZmluZWQgYnkgdGhlIHByb3h5IGl0c2VsZgorICAgIHRv
IGEgcHJveGllZCBgY29udGVudGAgb2JqZWN0LgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAg
b2JqZWN0ID0gRW1iZXIuT2JqZWN0LmNyZWF0ZSh7CisgICAgICBuYW1lOiAnRm9vJworICAgIH0p
OworICAKKyAgICBwcm94eSA9IEVtYmVyLk9iamVjdFByb3h5LmNyZWF0ZSh7CisgICAgICBjb250
ZW50OiBvYmplY3QKKyAgICB9KTsKKyAgCisgICAgLy8gQWNjZXNzIGFuZCBjaGFuZ2UgZXhpc3Rp
bmcgcHJvcGVydGllcworICAgIHByb3h5LmdldCgnbmFtZScpICAgICAgICAgIC8vICdGb28nCisg
ICAgcHJveHkuc2V0KCduYW1lJywgJ0JhcicpOworICAgIG9iamVjdC5nZXQoJ25hbWUnKSAgICAg
ICAgIC8vICdCYXInCisgIAorICAgIC8vIENyZWF0ZSBuZXcgJ2Rlc2NyaXB0aW9uJyBwcm9wZXJ0
eSBvbiBgb2JqZWN0YAorICAgIHByb3h5LnNldCgnZGVzY3JpcHRpb24nLCAnRm9vIGlzIGEgd2hp
emJvbyBiYXonKTsKKyAgICBvYmplY3QuZ2V0KCdkZXNjcmlwdGlvbicpICAvLyAnRm9vIGlzIGEg
d2hpemJvbyBiYXonCisgICAgYGBgCisgIAorICAgIFdoaWxlIGBjb250ZW50YCBpcyB1bnNldCwg
c2V0dGluZyBhIHByb3BlcnR5IHRvIGJlIGRlbGVnYXRlZCB3aWxsIHRocm93IGFuCisgICAgRXJy
b3IuCisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAgICBwcm94eSA9IEVtYmVyLk9iamVjdFByb3h5
LmNyZWF0ZSh7CisgICAgICBjb250ZW50OiBudWxsLAorICAgICAgZmxhZzogbnVsbAorICAgIH0p
OworICAgIHByb3h5LnNldCgnZmxhZycsIHRydWUpOworICAgIHByb3h5LmdldCgnZmxhZycpOyAg
ICAgICAgIC8vIHRydWUKKyAgICBwcm94eS5nZXQoJ2ZvbycpOyAgICAgICAgICAvLyB1bmRlZmlu
ZWQKKyAgICBwcm94eS5zZXQoJ2ZvbycsICdkYXRhJyk7ICAvLyB0aHJvd3MgRXJyb3IKKyAgICBg
YGAKKyAgCisgICAgRGVsZWdhdGVkIHByb3BlcnRpZXMgY2FuIGJlIGJvdW5kIHRvIGFuZCB3aWxs
IGNoYW5nZSB3aGVuIGNvbnRlbnQgaXMgdXBkYXRlZC4KKyAgCisgICAgQ29tcHV0ZWQgcHJvcGVy
dGllcyBvbiB0aGUgcHJveHkgaXRzZWxmIGNhbiBkZXBlbmQgb24gZGVsZWdhdGVkIHByb3BlcnRp
ZXMuCisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAgICBQcm94eVdpdGhDb21wdXRlZFByb3BlcnR5
ID0gRW1iZXIuT2JqZWN0UHJveHkuZXh0ZW5kKHsKKyAgICAgIGZ1bGxOYW1lOiBmdW5jdGlvbigp
IHsKKyAgICAgICAgdmFyIGZpcnN0TmFtZSA9IHRoaXMuZ2V0KCdmaXJzdE5hbWUnKSwKKyAgICAg
ICAgICAgIGxhc3ROYW1lID0gdGhpcy5nZXQoJ2xhc3ROYW1lJyk7CisgICAgICAgIGlmIChmaXJz
dE5hbWUgJiYgbGFzdE5hbWUpIHsKKyAgICAgICAgICByZXR1cm4gZmlyc3ROYW1lICsgJyAnICsg
bGFzdE5hbWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZpcnN0TmFtZSB8fCBsYXN0TmFt
ZTsKKyAgICAgIH0ucHJvcGVydHkoJ2ZpcnN0TmFtZScsICdsYXN0TmFtZScpCisgICAgfSk7Cisg
IAorICAgIHByb3h5ID0gUHJveHlXaXRoQ29tcHV0ZWRQcm9wZXJ0eS5jcmVhdGUoKTsKKyAgCisg
ICAgcHJveHkuZ2V0KCdmdWxsTmFtZScpOyAgLy8gdW5kZWZpbmVkCisgICAgcHJveHkuc2V0KCdj
b250ZW50JywgeworICAgICAgZmlyc3ROYW1lOiAnVG9tJywgbGFzdE5hbWU6ICdEYWxlJworICAg
IH0pOyAvLyB0cmlnZ2VycyBwcm9wZXJ0eSBjaGFuZ2UgZm9yIGZ1bGxOYW1lIG9uIHByb3h5Cisg
IAorICAgIHByb3h5LmdldCgnZnVsbE5hbWUnKTsgIC8vICdUb20gRGFsZScKKyAgICBgYGAKKyAg
CisgICAgQGNsYXNzIE9iamVjdFByb3h5CisgICAgQG5hbWVzcGFjZSBFbWJlcgorICAgIEBleHRl
bmRzIEVtYmVyLk9iamVjdAorICAgIEBleHRlbmRzIEVtYmVyLl9Qcm94eU1peGluCisgICAgQHB1
YmxpYworICAqLworCisgIGV4cG9ydHMuZGVmYXVsdCA9IF9lbWJlclJ1bnRpbWVTeXN0ZW1PYmpl
Y3QuZGVmYXVsdC5leHRlbmQoX2VtYmVyUnVudGltZU1peGluc1Byb3h5LmRlZmF1bHQpOworfSk7
CitlbmlmZWQoJ2VtYmVyLXJ1bnRpbWUvc3lzdGVtL3NlcnZpY2UnLCBbJ2V4cG9ydHMnLCAnZW1i
ZXItcnVudGltZS9zeXN0ZW0vb2JqZWN0JywgJ2VtYmVyLXJ1bnRpbWUvaW5qZWN0J10sIGZ1bmN0
aW9uIChleHBvcnRzLCBfZW1iZXJSdW50aW1lU3lzdGVtT2JqZWN0LCBfZW1iZXJSdW50aW1lSW5q
ZWN0KSB7CisgICd1c2Ugc3RyaWN0JzsKKworICAvKioKKyAgICBDcmVhdGVzIGEgcHJvcGVydHkg
dGhhdCBsYXppbHkgbG9va3MgdXAgYSBzZXJ2aWNlIGluIHRoZSBjb250YWluZXIuIFRoZXJlCisg
ICAgYXJlIG5vIHJlc3RyaWN0aW9ucyBhcyB0byB3aGF0IG9iamVjdHMgYSBzZXJ2aWNlIGNhbiBi
ZSBpbmplY3RlZCBpbnRvLgorICAKKyAgICBFeGFtcGxlOgorICAKKyAgICBgYGBqYXZhc2NyaXB0
CisgICAgQXBwLkFwcGxpY2F0aW9uUm91dGUgPSBFbWJlci5Sb3V0ZS5leHRlbmQoeworICAgICAg
YXV0aE1hbmFnZXI6IEVtYmVyLmluamVjdC5zZXJ2aWNlKCdhdXRoJyksCisgIAorICAgICAgbW9k
ZWw6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5nZXQoJ2F1dGhNYW5hZ2VyJyku
ZmluZEN1cnJlbnRVc2VyKCk7CisgICAgICB9CisgICAgfSk7CisgICAgYGBgCisgIAorICAgIFRo
aXMgZXhhbXBsZSB3aWxsIGNyZWF0ZSBhbiBgYXV0aE1hbmFnZXJgIHByb3BlcnR5IG9uIHRoZSBh
cHBsaWNhdGlvbiByb3V0ZQorICAgIHRoYXQgbG9va3MgdXAgdGhlIGBhdXRoYCBzZXJ2aWNlIGlu
IHRoZSBjb250YWluZXIsIG1ha2luZyBpdCBlYXNpbHkKKyAgICBhY2Nlc3NpYmxlIGluIHRoZSBg
bW9kZWxgIGhvb2suCisgIAorICAgIEBtZXRob2Qgc2VydmljZQorICAgIEBzaW5jZSAxLjEwLjAK
KyAgICBAZm9yIEVtYmVyLmluamVjdAorICAgIEBwYXJhbSB7U3RyaW5nfSBuYW1lIChvcHRpb25h
bCkgbmFtZSBvZiB0aGUgc2VydmljZSB0byBpbmplY3QsIGRlZmF1bHRzIHRvCisgICAgICAgICAg
IHRoZSBwcm9wZXJ0eSdzIG5hbWUKKyAgICBAcmV0dXJuIHtFbWJlci5JbmplY3RlZFByb3BlcnR5
fSBpbmplY3Rpb24gZGVzY3JpcHRvciBpbnN0YW5jZQorICAgIEBwdWJsaWMKKyAgKi8KKyAgX2Vt
YmVyUnVudGltZUluamVjdC5jcmVhdGVJbmplY3Rpb25IZWxwZXIoJ3NlcnZpY2UnKTsKKworICAv
KioKKyAgICBAY2xhc3MgU2VydmljZQorICAgIEBuYW1lc3BhY2UgRW1iZXIKKyAgICBAZXh0ZW5k
cyBFbWJlci5PYmplY3QKKyAgICBAc2luY2UgMS4xMC4wCisgICAgQHB1YmxpYworICAqLworICB2
YXIgU2VydmljZSA9IF9lbWJlclJ1bnRpbWVTeXN0ZW1PYmplY3QuZGVmYXVsdC5leHRlbmQoKTsK
KworICBTZXJ2aWNlLnJlb3BlbkNsYXNzKHsKKyAgICBpc1NlcnZpY2VGYWN0b3J5OiB0cnVlCisg
IH0pOworCisgIGV4cG9ydHMuZGVmYXVsdCA9IFNlcnZpY2U7Cit9KTsKK2VuaWZlZCgnZW1iZXIt
cnVudGltZS9zeXN0ZW0vc3RyaW5nJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywg
J2VtYmVyLW1ldGFsL3V0aWxzJywgJ2VtYmVyLXJ1bnRpbWUvdXRpbHMnLCAnZW1iZXItcnVudGlt
ZS9zdHJpbmdfcmVnaXN0cnknLCAnZW1iZXItbWV0YWwvY2FjaGUnXSwgZnVuY3Rpb24gKGV4cG9y
dHMsIF9lbWJlck1ldGFsRGVidWcsIF9lbWJlck1ldGFsVXRpbHMsIF9lbWJlclJ1bnRpbWVVdGls
cywgX2VtYmVyUnVudGltZVN0cmluZ19yZWdpc3RyeSwgX2VtYmVyTWV0YWxDYWNoZSkgeworICAv
KioKKyAgQG1vZHVsZSBlbWJlcgorICBAc3VibW9kdWxlIGVtYmVyLXJ1bnRpbWUKKyAgKi8KKyAg
J3VzZSBzdHJpY3QnOworCisgIHZhciBTVFJJTkdfREFTSEVSSVpFX1JFR0VYUCA9IC9bIF9dL2c7
CisKKyAgdmFyIFNUUklOR19EQVNIRVJJWkVfQ0FDSEUgPSBuZXcgX2VtYmVyTWV0YWxDYWNoZS5k
ZWZhdWx0KDEwMDAsIGZ1bmN0aW9uIChrZXkpIHsKKyAgICByZXR1cm4gZGVjYW1lbGl6ZShrZXkp
LnJlcGxhY2UoU1RSSU5HX0RBU0hFUklaRV9SRUdFWFAsICctJyk7CisgIH0pOworCisgIHZhciBT
VFJJTkdfQ0FNRUxJWkVfUkVHRVhQXzEgPSAvKFwtfFxffFwufFxzKSsoLik/L2c7CisgIHZhciBT
VFJJTkdfQ0FNRUxJWkVfUkVHRVhQXzIgPSAvKF58XC8pKFtBLVpdKS9nOworCisgIHZhciBDQU1F
TElaRV9DQUNIRSA9IG5ldyBfZW1iZXJNZXRhbENhY2hlLmRlZmF1bHQoMTAwMCwgZnVuY3Rpb24g
KGtleSkgeworICAgIHJldHVybiBrZXkucmVwbGFjZShTVFJJTkdfQ0FNRUxJWkVfUkVHRVhQXzEs
IGZ1bmN0aW9uIChtYXRjaCwgc2VwYXJhdG9yLCBjaHIpIHsKKyAgICAgIHJldHVybiBjaHIgPyBj
aHIudG9VcHBlckNhc2UoKSA6ICcnOworICAgIH0pLnJlcGxhY2UoU1RSSU5HX0NBTUVMSVpFX1JF
R0VYUF8yLCBmdW5jdGlvbiAobWF0Y2gsIHNlcGFyYXRvciwgY2hyKSB7CisgICAgICByZXR1cm4g
bWF0Y2gudG9Mb3dlckNhc2UoKTsKKyAgICB9KTsKKyAgfSk7CisKKyAgdmFyIFNUUklOR19DTEFT
U0lGWV9SRUdFWFBfMSA9IC9eKFwtfF8pKyguKT8vOworICB2YXIgU1RSSU5HX0NMQVNTSUZZX1JF
R0VYUF8yID0gLyguKShcLXxcX3xcLnxccykrKC4pPy9nOworICB2YXIgU1RSSU5HX0NMQVNTSUZZ
X1JFR0VYUF8zID0gLyhefFwvfFwuKShbYS16XSkvZzsKKworICB2YXIgQ0xBU1NJRllfQ0FDSEUg
PSBuZXcgX2VtYmVyTWV0YWxDYWNoZS5kZWZhdWx0KDEwMDAsIGZ1bmN0aW9uIChzdHIpIHsKKyAg
ICB2YXIgcmVwbGFjZTEgPSBmdW5jdGlvbiAobWF0Y2gsIHNlcGFyYXRvciwgY2hyKSB7CisgICAg
ICByZXR1cm4gY2hyID8gJ18nICsgY2hyLnRvVXBwZXJDYXNlKCkgOiAnJzsKKyAgICB9OworICAg
IHZhciByZXBsYWNlMiA9IGZ1bmN0aW9uIChtYXRjaCwgaW5pdGlhbENoYXIsIHNlcGFyYXRvciwg
Y2hyKSB7CisgICAgICByZXR1cm4gaW5pdGlhbENoYXIgKyAoY2hyID8gY2hyLnRvVXBwZXJDYXNl
KCkgOiAnJyk7CisgICAgfTsKKyAgICB2YXIgcGFydHMgPSBzdHIuc3BsaXQoJy8nKTsKKyAgICBm
b3IgKHZhciBpID0gMCwgbGVuID0gcGFydHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKKyAgICAg
IHBhcnRzW2ldID0gcGFydHNbaV0ucmVwbGFjZShTVFJJTkdfQ0xBU1NJRllfUkVHRVhQXzEsIHJl
cGxhY2UxKS5yZXBsYWNlKFNUUklOR19DTEFTU0lGWV9SRUdFWFBfMiwgcmVwbGFjZTIpOworICAg
IH0KKyAgICByZXR1cm4gcGFydHMuam9pbignLycpLnJlcGxhY2UoU1RSSU5HX0NMQVNTSUZZX1JF
R0VYUF8zLCBmdW5jdGlvbiAobWF0Y2gsIHNlcGFyYXRvciwgY2hyKSB7CisgICAgICByZXR1cm4g
bWF0Y2gudG9VcHBlckNhc2UoKTsKKyAgICB9KTsKKyAgfSk7CisKKyAgdmFyIFNUUklOR19VTkRF
UlNDT1JFX1JFR0VYUF8xID0gLyhbYS16XGRdKShbQS1aXSspL2c7CisgIHZhciBTVFJJTkdfVU5E
RVJTQ09SRV9SRUdFWFBfMiA9IC9cLXxccysvZzsKKworICB2YXIgVU5ERVJTQ09SRV9DQUNIRSA9
IG5ldyBfZW1iZXJNZXRhbENhY2hlLmRlZmF1bHQoMTAwMCwgZnVuY3Rpb24gKHN0cikgeworICAg
IHJldHVybiBzdHIucmVwbGFjZShTVFJJTkdfVU5ERVJTQ09SRV9SRUdFWFBfMSwgJyQxXyQyJyku
cmVwbGFjZShTVFJJTkdfVU5ERVJTQ09SRV9SRUdFWFBfMiwgJ18nKS50b0xvd2VyQ2FzZSgpOwor
ICB9KTsKKworICB2YXIgU1RSSU5HX0NBUElUQUxJWkVfUkVHRVhQID0gLyhefFwvKShbYS16XSkv
ZzsKKworICB2YXIgQ0FQSVRBTElaRV9DQUNIRSA9IG5ldyBfZW1iZXJNZXRhbENhY2hlLmRlZmF1
bHQoMTAwMCwgZnVuY3Rpb24gKHN0cikgeworICAgIHJldHVybiBzdHIucmVwbGFjZShTVFJJTkdf
Q0FQSVRBTElaRV9SRUdFWFAsIGZ1bmN0aW9uIChtYXRjaCwgc2VwYXJhdG9yLCBjaHIpIHsKKyAg
ICAgIHJldHVybiBtYXRjaC50b1VwcGVyQ2FzZSgpOworICAgIH0pOworICB9KTsKKworICB2YXIg
U1RSSU5HX0RFQ0FNRUxJWkVfUkVHRVhQID0gLyhbYS16XGRdKShbQS1aXSkvZzsKKworICB2YXIg
REVDQU1FTElaRV9DQUNIRSA9IG5ldyBfZW1iZXJNZXRhbENhY2hlLmRlZmF1bHQoMTAwMCwgZnVu
Y3Rpb24gKHN0cikgeworICAgIHJldHVybiBzdHIucmVwbGFjZShTVFJJTkdfREVDQU1FTElaRV9S
RUdFWFAsICckMV8kMicpLnRvTG93ZXJDYXNlKCk7CisgIH0pOworCisgIGZ1bmN0aW9uIF9mbXQo
c3RyLCBmb3JtYXRzKSB7CisgICAgdmFyIGNhY2hlZEZvcm1hdHMgPSBmb3JtYXRzOworCisgICAg
aWYgKCFfZW1iZXJSdW50aW1lVXRpbHMuaXNBcnJheShjYWNoZWRGb3JtYXRzKSB8fCBhcmd1bWVu
dHMubGVuZ3RoID4gMikgeworICAgICAgY2FjaGVkRm9ybWF0cyA9IG5ldyBBcnJheShhcmd1bWVu
dHMubGVuZ3RoIC0gMSk7CisKKyAgICAgIGZvciAodmFyIGkgPSAxLCBsID0gYXJndW1lbnRzLmxl
bmd0aDsgaSA8IGw7IGkrKykgeworICAgICAgICBjYWNoZWRGb3JtYXRzW2kgLSAxXSA9IGFyZ3Vt
ZW50c1tpXTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvLyBmaXJzdCwgcmVwbGFjZSBhbnkgT1JE
RVJFRCByZXBsYWNlbWVudHMuCisgICAgdmFyIGlkeCA9IDA7IC8vIHRoZSBjdXJyZW50IGluZGV4
IGZvciBub24tbnVtZXJpY2FsIHJlcGxhY2VtZW50cworICAgIHJldHVybiBzdHIucmVwbGFjZSgv
JUAoWzAtOV0rKT8vZywgZnVuY3Rpb24gKHMsIGFyZ0luZGV4KSB7CisgICAgICBhcmdJbmRleCA9
IGFyZ0luZGV4ID8gcGFyc2VJbnQoYXJnSW5kZXgsIDEwKSAtIDEgOiBpZHgrKzsKKyAgICAgIHMg
PSBjYWNoZWRGb3JtYXRzW2FyZ0luZGV4XTsKKyAgICAgIHJldHVybiBzID09PSBudWxsID8gJyhu
dWxsKScgOiBzID09PSB1bmRlZmluZWQgPyAnJyA6IF9lbWJlck1ldGFsVXRpbHMuaW5zcGVjdChz
KTsKKyAgICB9KTsKKyAgfQorCisgIGZ1bmN0aW9uIGZtdChzdHIsIGZvcm1hdHMpIHsKKyAgICBf
ZW1iZXJNZXRhbERlYnVnLmRlcHJlY2F0ZSgnRW1iZXIuU3RyaW5nLmZtdCBpcyBkZXByZWNhdGVk
LCB1c2UgRVM2IHRlbXBsYXRlIHN0cmluZ3MgaW5zdGVhZC4nLCBmYWxzZSwgeyBpZDogJ2VtYmVy
LXN0cmluZy11dGlscy5mbXQnLCB1bnRpbDogJzMuMC4wJywgdXJsOiAnaHR0cDovL2JhYmVsanMu
aW8vZG9jcy9sZWFybi1lczIwMTUvI3RlbXBsYXRlLXN0cmluZ3MnIH0pOworICAgIHJldHVybiBf
Zm10LmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTsKKyAgfQorCisgIGZ1bmN0aW9uIGxvYyhz
dHIsIGZvcm1hdHMpIHsKKyAgICBpZiAoIV9lbWJlclJ1bnRpbWVVdGlscy5pc0FycmF5KGZvcm1h
dHMpIHx8IGFyZ3VtZW50cy5sZW5ndGggPiAyKSB7CisgICAgICBmb3JtYXRzID0gQXJyYXkucHJv
dG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsKKyAgICB9CisKKyAgICBzdHIgPSBfZW1i
ZXJSdW50aW1lU3RyaW5nX3JlZ2lzdHJ5LmdldChzdHIpIHx8IHN0cjsKKyAgICByZXR1cm4gX2Zt
dChzdHIsIGZvcm1hdHMpOworICB9CisKKyAgZnVuY3Rpb24gdyhzdHIpIHsKKyAgICByZXR1cm4g
c3RyLnNwbGl0KC9ccysvKTsKKyAgfQorCisgIGZ1bmN0aW9uIGRlY2FtZWxpemUoc3RyKSB7Cisg
ICAgcmV0dXJuIERFQ0FNRUxJWkVfQ0FDSEUuZ2V0KHN0cik7CisgIH0KKworICBmdW5jdGlvbiBk
YXNoZXJpemUoc3RyKSB7CisgICAgcmV0dXJuIFNUUklOR19EQVNIRVJJWkVfQ0FDSEUuZ2V0KHN0
cik7CisgIH0KKworICBmdW5jdGlvbiBjYW1lbGl6ZShzdHIpIHsKKyAgICByZXR1cm4gQ0FNRUxJ
WkVfQ0FDSEUuZ2V0KHN0cik7CisgIH0KKworICBmdW5jdGlvbiBjbGFzc2lmeShzdHIpIHsKKyAg
ICByZXR1cm4gQ0xBU1NJRllfQ0FDSEUuZ2V0KHN0cik7CisgIH0KKworICBmdW5jdGlvbiB1bmRl
cnNjb3JlKHN0cikgeworICAgIHJldHVybiBVTkRFUlNDT1JFX0NBQ0hFLmdldChzdHIpOworICB9
CisKKyAgZnVuY3Rpb24gY2FwaXRhbGl6ZShzdHIpIHsKKyAgICByZXR1cm4gQ0FQSVRBTElaRV9D
QUNIRS5nZXQoc3RyKTsKKyAgfQorCisgIC8qKgorICAgIERlZmluZXMgc3RyaW5nIGhlbHBlciBt
ZXRob2RzIGluY2x1ZGluZyBzdHJpbmcgZm9ybWF0dGluZyBhbmQgbG9jYWxpemF0aW9uLgorICAg
IFVubGVzcyBgRW1iZXIuRVhURU5EX1BST1RPVFlQRVMuU3RyaW5nYCBpcyBgZmFsc2VgIHRoZXNl
IG1ldGhvZHMgd2lsbCBhbHNvIGJlCisgICAgYWRkZWQgdG8gdGhlIGBTdHJpbmcucHJvdG90eXBl
YCBhcyB3ZWxsLgorICAKKyAgICBAY2xhc3MgU3RyaW5nCisgICAgQG5hbWVzcGFjZSBFbWJlcgor
ICAgIEBzdGF0aWMKKyAgICBAcHVibGljCisgICovCisgIGV4cG9ydHMuZGVmYXVsdCA9IHsKKyAg
ICAvKioKKyAgICAgIEFwcGx5IGZvcm1hdHRpbmcgb3B0aW9ucyB0byB0aGUgc3RyaW5nLiBUaGlz
IHdpbGwgbG9vayBmb3Igb2NjdXJyZW5jZXMKKyAgICAgIG9mICIlQCIgaW4geW91ciBzdHJpbmcg
YW5kIHN1YnN0aXR1dGUgdGhlbSB3aXRoIHRoZSBhcmd1bWVudHMgeW91IHBhc3MgaW50bworICAg
ICAgdGhpcyBtZXRob2QuIElmIHlvdSB3YW50IHRvIGNvbnRyb2wgdGhlIHNwZWNpZmljIG9yZGVy
IG9mIHJlcGxhY2VtZW50LAorICAgICAgeW91IGNhbiBhZGQgYSBudW1iZXIgYWZ0ZXIgdGhlIGtl
eSBhcyB3ZWxsIHRvIGluZGljYXRlIHdoaWNoIGFyZ3VtZW50CisgICAgICB5b3Ugd2FudCB0byBp
bnNlcnQuCisgICAgICAgT3JkZXJlZCBpbnNlcnRpb25zIGFyZSBtb3N0IHVzZWZ1bCB3aGVuIGJ1
aWxkaW5nIGxvYyBzdHJpbmdzIHdoZXJlIHZhbHVlcworICAgICAgeW91IG5lZWQgdG8gaW5zZXJ0
IG1heSBhcHBlYXIgaW4gZGlmZmVyZW50IG9yZGVycy4KKyAgICAgICBgYGBqYXZhc2NyaXB0Cisg
ICAgICAiSGVsbG8gJUAgJUAiLmZtdCgnSm9obicsICdEb2UnKTsgICAgIC8vICJIZWxsbyBKb2hu
IERvZSIKKyAgICAgICJIZWxsbyAlQDIsICVAMSIuZm10KCdKb2huJywgJ0RvZScpOyAgLy8gIkhl
bGxvIERvZSwgSm9obiIKKyAgICAgIGBgYAorICAgICAgIEBtZXRob2QgZm10CisgICAgICBAcGFy
YW0ge1N0cmluZ30gc3RyIFRoZSBzdHJpbmcgdG8gZm9ybWF0CisgICAgICBAcGFyYW0ge0FycmF5
fSBmb3JtYXRzIEFuIGFycmF5IG9mIHBhcmFtZXRlcnMgdG8gaW50ZXJwb2xhdGUgaW50byBzdHJp
bmcuCisgICAgICBAcmV0dXJuIHtTdHJpbmd9IGZvcm1hdHRlZCBzdHJpbmcKKyAgICAgIEBwdWJs
aWMKKyAgICAgIEBkZXByZWNhdGVkIFVzZSBFUzYgdGVtcGxhdGUgc3RyaW5ncyBpbnN0ZWFkOiBo
dHRwOi8vYmFiZWxqcy5pby9kb2NzL2xlYXJuLWVzMjAxNS8jdGVtcGxhdGUtc3RyaW5ncworICAg
ICovCisgICAgZm10OiBmbXQsCisKKyAgICAvKioKKyAgICAgIEZvcm1hdHMgdGhlIHBhc3NlZCBz
dHJpbmcsIGJ1dCBmaXJzdCBsb29rcyB1cCB0aGUgc3RyaW5nIGluIHRoZSBsb2NhbGl6ZWQKKyAg
ICAgIHN0cmluZ3MgaGFzaC4gVGhpcyBpcyBhIGNvbnZlbmllbnQgd2F5IHRvIGxvY2FsaXplIHRl
eHQuIFNlZQorICAgICAgYEVtYmVyLlN0cmluZy5mbXQoKWAgZm9yIG1vcmUgaW5mb3JtYXRpb24g
b24gZm9ybWF0dGluZy4KKyAgICAgICBOb3RlIHRoYXQgaXQgaXMgdHJhZGl0aW9uYWwgYnV0IG5v
dCByZXF1aXJlZCB0byBwcmVmaXggbG9jYWxpemVkIHN0cmluZworICAgICAga2V5cyB3aXRoIGFu
IHVuZGVyc2NvcmUgb3Igb3RoZXIgY2hhcmFjdGVyIHNvIHlvdSBjYW4gZWFzaWx5IGlkZW50aWZ5
CisgICAgICBsb2NhbGl6ZWQgc3RyaW5ncy4KKyAgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICBF
bWJlci5TVFJJTkdTID0geworICAgICAgICAnX0hlbGxvIFdvcmxkJzogJ0JvbmpvdXIgbGUgbW9u
ZGUnLAorICAgICAgICAnX0hlbGxvICVAICVAJzogJ0JvbmpvdXIgJUAgJUAnCisgICAgICB9Owor
ICAgICAgIEVtYmVyLlN0cmluZy5sb2MoIl9IZWxsbyBXb3JsZCIpOyAgLy8gJ0JvbmpvdXIgbGUg
bW9uZGUnOworICAgICAgRW1iZXIuU3RyaW5nLmxvYygiX0hlbGxvICVAICVAIiwgWyJKb2huIiwg
IlNtaXRoIl0pOyAgLy8gIkJvbmpvdXIgSm9obiBTbWl0aCI7CisgICAgICBgYGAKKyAgICAgICBA
bWV0aG9kIGxvYworICAgICAgQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgc3RyaW5nIHRvIGZvcm1h
dAorICAgICAgQHBhcmFtIHtBcnJheX0gZm9ybWF0cyBPcHRpb25hbCBhcnJheSBvZiBwYXJhbWV0
ZXJzIHRvIGludGVycG9sYXRlIGludG8gc3RyaW5nLgorICAgICAgQHJldHVybiB7U3RyaW5nfSBm
b3JtYXR0ZWQgc3RyaW5nCisgICAgICBAcHVibGljCisgICAgKi8KKyAgICBsb2M6IGxvYywKKwor
ICAgIC8qKgorICAgICAgU3BsaXRzIGEgc3RyaW5nIGludG8gc2VwYXJhdGUgdW5pdHMgc2VwYXJh
dGVkIGJ5IHNwYWNlcywgZWxpbWluYXRpbmcgYW55CisgICAgICBlbXB0eSBzdHJpbmdzIGluIHRo
ZSBwcm9jZXNzLiBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIGZvciBzcGxpdCB0aGF0Cisg
ICAgICBpcyBtb3N0bHkgdXNlZnVsIHdoZW4gYXBwbGllZCB0byB0aGUgYFN0cmluZy5wcm90b3R5
cGVgLgorICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgIEVtYmVyLlN0cmluZy53KCJhbHBoYSBi
ZXRhIGdhbW1hIikuZm9yRWFjaChmdW5jdGlvbihrZXkpIHsKKyAgICAgICAgY29uc29sZS5sb2co
a2V5KTsKKyAgICAgIH0pOworICAgICAgIC8vID4gYWxwaGEKKyAgICAgIC8vID4gYmV0YQorICAg
ICAgLy8gPiBnYW1tYQorICAgICAgYGBgCisgICAgICAgQG1ldGhvZCB3CisgICAgICBAcGFyYW0g
e1N0cmluZ30gc3RyIFRoZSBzdHJpbmcgdG8gc3BsaXQKKyAgICAgIEByZXR1cm4ge0FycmF5fSBh
cnJheSBjb250YWluaW5nIHRoZSBzcGxpdCBzdHJpbmdzCisgICAgICBAcHVibGljCisgICAgKi8K
KyAgICB3OiB3LAorCisgICAgLyoqCisgICAgICBDb252ZXJ0cyBhIGNhbWVsaXplZCBzdHJpbmcg
aW50byBhbGwgbG93ZXIgY2FzZSBzZXBhcmF0ZWQgYnkgdW5kZXJzY29yZXMuCisgICAgICAgYGBg
amF2YXNjcmlwdAorICAgICAgJ2lubmVySFRNTCcuZGVjYW1lbGl6ZSgpOyAgICAgICAgICAgLy8g
J2lubmVyX2h0bWwnCisgICAgICAnYWN0aW9uX25hbWUnLmRlY2FtZWxpemUoKTsgICAgICAgIC8v
ICdhY3Rpb25fbmFtZScKKyAgICAgICdjc3MtY2xhc3MtbmFtZScuZGVjYW1lbGl6ZSgpOyAgICAg
Ly8gJ2Nzcy1jbGFzcy1uYW1lJworICAgICAgJ215IGZhdm9yaXRlIGl0ZW1zJy5kZWNhbWVsaXpl
KCk7ICAvLyAnbXkgZmF2b3JpdGUgaXRlbXMnCisgICAgICBgYGAKKyAgICAgICBAbWV0aG9kIGRl
Y2FtZWxpemUKKyAgICAgIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIHN0cmluZyB0byBkZWNhbWVs
aXplLgorICAgICAgQHJldHVybiB7U3RyaW5nfSB0aGUgZGVjYW1lbGl6ZWQgc3RyaW5nLgorICAg
ICAgQHB1YmxpYworICAgICovCisgICAgZGVjYW1lbGl6ZTogZGVjYW1lbGl6ZSwKKworICAgIC8q
KgorICAgICAgUmVwbGFjZXMgdW5kZXJzY29yZXMsIHNwYWNlcywgb3IgY2FtZWxDYXNlIHdpdGgg
ZGFzaGVzLgorICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgICdpbm5lckhUTUwnLmRhc2hlcml6
ZSgpOyAgICAgICAgICAvLyAnaW5uZXItaHRtbCcKKyAgICAgICdhY3Rpb25fbmFtZScuZGFzaGVy
aXplKCk7ICAgICAgICAvLyAnYWN0aW9uLW5hbWUnCisgICAgICAnY3NzLWNsYXNzLW5hbWUnLmRh
c2hlcml6ZSgpOyAgICAgLy8gJ2Nzcy1jbGFzcy1uYW1lJworICAgICAgJ215IGZhdm9yaXRlIGl0
ZW1zJy5kYXNoZXJpemUoKTsgIC8vICdteS1mYXZvcml0ZS1pdGVtcycKKyAgICAgICdwcml2YXRl
RG9jcy9vd25lckludm9pY2UnLmRhc2hlcml6ZSgpOyAvLyAncHJpdmF0ZS1kb2NzL293bmVyLWlu
dm9pY2UnCisgICAgICBgYGAKKyAgICAgICBAbWV0aG9kIGRhc2hlcml6ZQorICAgICAgQHBhcmFt
IHtTdHJpbmd9IHN0ciBUaGUgc3RyaW5nIHRvIGRhc2hlcml6ZS4KKyAgICAgIEByZXR1cm4ge1N0
cmluZ30gdGhlIGRhc2hlcml6ZWQgc3RyaW5nLgorICAgICAgQHB1YmxpYworICAgICovCisgICAg
ZGFzaGVyaXplOiBkYXNoZXJpemUsCisKKyAgICAvKioKKyAgICAgIFJldHVybnMgdGhlIGxvd2Vy
Q2FtZWxDYXNlIGZvcm0gb2YgYSBzdHJpbmcuCisgICAgICAgYGBgamF2YXNjcmlwdAorICAgICAg
J2lubmVySFRNTCcuY2FtZWxpemUoKTsgICAgICAgICAgLy8gJ2lubmVySFRNTCcKKyAgICAgICdh
Y3Rpb25fbmFtZScuY2FtZWxpemUoKTsgICAgICAgIC8vICdhY3Rpb25OYW1lJworICAgICAgJ2Nz
cy1jbGFzcy1uYW1lJy5jYW1lbGl6ZSgpOyAgICAgLy8gJ2Nzc0NsYXNzTmFtZScKKyAgICAgICdt
eSBmYXZvcml0ZSBpdGVtcycuY2FtZWxpemUoKTsgIC8vICdteUZhdm9yaXRlSXRlbXMnCisgICAg
ICAnTXkgRmF2b3JpdGUgSXRlbXMnLmNhbWVsaXplKCk7ICAvLyAnbXlGYXZvcml0ZUl0ZW1zJwor
ICAgICAgJ3ByaXZhdGUtZG9jcy9vd25lci1pbnZvaWNlJy5jYW1lbGl6ZSgpOyAvLyAncHJpdmF0
ZURvY3Mvb3duZXJJbnZvaWNlJworICAgICAgYGBgCisgICAgICAgQG1ldGhvZCBjYW1lbGl6ZQor
ICAgICAgQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgc3RyaW5nIHRvIGNhbWVsaXplLgorICAgICAg
QHJldHVybiB7U3RyaW5nfSB0aGUgY2FtZWxpemVkIHN0cmluZy4KKyAgICAgIEBwdWJsaWMKKyAg
ICAqLworICAgIGNhbWVsaXplOiBjYW1lbGl6ZSwKKworICAgIC8qKgorICAgICAgUmV0dXJucyB0
aGUgVXBwZXJDYW1lbENhc2UgZm9ybSBvZiBhIHN0cmluZy4KKyAgICAgICBgYGBqYXZhc2NyaXB0
CisgICAgICAnaW5uZXJIVE1MJy5jbGFzc2lmeSgpOyAgICAgICAgICAvLyAnSW5uZXJIVE1MJwor
ICAgICAgJ2FjdGlvbl9uYW1lJy5jbGFzc2lmeSgpOyAgICAgICAgLy8gJ0FjdGlvbk5hbWUnCisg
ICAgICAnY3NzLWNsYXNzLW5hbWUnLmNsYXNzaWZ5KCk7ICAgICAvLyAnQ3NzQ2xhc3NOYW1lJwor
ICAgICAgJ215IGZhdm9yaXRlIGl0ZW1zJy5jbGFzc2lmeSgpOyAgLy8gJ015RmF2b3JpdGVJdGVt
cycKKyAgICAgICdwcml2YXRlLWRvY3Mvb3duZXItaW52b2ljZScuY2xhc3NpZnkoKTsgLy8gJ1By
aXZhdGVEb2NzL093bmVySW52b2ljZScKKyAgICAgIGBgYAorICAgICAgIEBtZXRob2QgY2xhc3Np
ZnkKKyAgICAgIEBwYXJhbSB7U3RyaW5nfSBzdHIgdGhlIHN0cmluZyB0byBjbGFzc2lmeQorICAg
ICAgQHJldHVybiB7U3RyaW5nfSB0aGUgY2xhc3NpZmllZCBzdHJpbmcKKyAgICAgIEBwdWJsaWMK
KyAgICAqLworICAgIGNsYXNzaWZ5OiBjbGFzc2lmeSwKKworICAgIC8qKgorICAgICAgTW9yZSBn
ZW5lcmFsIHRoYW4gZGVjYW1lbGl6ZS4gUmV0dXJucyB0aGUgbG93ZXJcX2Nhc2VcX2FuZFxfdW5k
ZXJzY29yZWQKKyAgICAgIGZvcm0gb2YgYSBzdHJpbmcuCisgICAgICAgYGBgamF2YXNjcmlwdAor
ICAgICAgJ2lubmVySFRNTCcudW5kZXJzY29yZSgpOyAgICAgICAgICAvLyAnaW5uZXJfaHRtbCcK
KyAgICAgICdhY3Rpb25fbmFtZScudW5kZXJzY29yZSgpOyAgICAgICAgLy8gJ2FjdGlvbl9uYW1l
JworICAgICAgJ2Nzcy1jbGFzcy1uYW1lJy51bmRlcnNjb3JlKCk7ICAgICAvLyAnY3NzX2NsYXNz
X25hbWUnCisgICAgICAnbXkgZmF2b3JpdGUgaXRlbXMnLnVuZGVyc2NvcmUoKTsgIC8vICdteV9m
YXZvcml0ZV9pdGVtcycKKyAgICAgICdwcml2YXRlRG9jcy9vd25lckludm9pY2UnLnVuZGVyc2Nv
cmUoKTsgLy8gJ3ByaXZhdGVfZG9jcy9vd25lcl9pbnZvaWNlJworICAgICAgYGBgCisgICAgICAg
QG1ldGhvZCB1bmRlcnNjb3JlCisgICAgICBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBzdHJpbmcg
dG8gdW5kZXJzY29yZS4KKyAgICAgIEByZXR1cm4ge1N0cmluZ30gdGhlIHVuZGVyc2NvcmVkIHN0
cmluZy4KKyAgICAgIEBwdWJsaWMKKyAgICAqLworICAgIHVuZGVyc2NvcmU6IHVuZGVyc2NvcmUs
CisKKyAgICAvKioKKyAgICAgIFJldHVybnMgdGhlIENhcGl0YWxpemVkIGZvcm0gb2YgYSBzdHJp
bmcKKyAgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICAnaW5uZXJIVE1MJy5jYXBpdGFsaXplKCkg
ICAgICAgICAvLyAnSW5uZXJIVE1MJworICAgICAgJ2FjdGlvbl9uYW1lJy5jYXBpdGFsaXplKCkg
ICAgICAgLy8gJ0FjdGlvbl9uYW1lJworICAgICAgJ2Nzcy1jbGFzcy1uYW1lJy5jYXBpdGFsaXpl
KCkgICAgLy8gJ0Nzcy1jbGFzcy1uYW1lJworICAgICAgJ215IGZhdm9yaXRlIGl0ZW1zJy5jYXBp
dGFsaXplKCkgLy8gJ015IGZhdm9yaXRlIGl0ZW1zJworICAgICAgJ3ByaXZhdGVEb2NzL293bmVy
SW52b2ljZScuY2FwaXRhbGl6ZSgpOyAvLyAnUHJpdmF0ZURvY3Mvb3duZXJJbnZvaWNlJworICAg
ICAgYGBgCisgICAgICAgQG1ldGhvZCBjYXBpdGFsaXplCisgICAgICBAcGFyYW0ge1N0cmluZ30g
c3RyIFRoZSBzdHJpbmcgdG8gY2FwaXRhbGl6ZS4KKyAgICAgIEByZXR1cm4ge1N0cmluZ30gVGhl
IGNhcGl0YWxpemVkIHN0cmluZy4KKyAgICAgIEBwdWJsaWMKKyAgICAqLworICAgIGNhcGl0YWxp
emU6IGNhcGl0YWxpemUKKyAgfTsKKyAgZXhwb3J0cy5mbXQgPSBmbXQ7CisgIGV4cG9ydHMubG9j
ID0gbG9jOworICBleHBvcnRzLncgPSB3OworICBleHBvcnRzLmRlY2FtZWxpemUgPSBkZWNhbWVs
aXplOworICBleHBvcnRzLmRhc2hlcml6ZSA9IGRhc2hlcml6ZTsKKyAgZXhwb3J0cy5jYW1lbGl6
ZSA9IGNhbWVsaXplOworICBleHBvcnRzLmNsYXNzaWZ5ID0gY2xhc3NpZnk7CisgIGV4cG9ydHMu
dW5kZXJzY29yZSA9IHVuZGVyc2NvcmU7CisgIGV4cG9ydHMuY2FwaXRhbGl6ZSA9IGNhcGl0YWxp
emU7Cit9KTsKK2VuaWZlZCgnZW1iZXItcnVudGltZS91dGlscycsIFsnZXhwb3J0cycsICdlbWJl
ci1ydW50aW1lL21peGlucy9hcnJheScsICdlbWJlci1ydW50aW1lL3N5c3RlbS9vYmplY3QnXSwg
ZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlclJ1bnRpbWVNaXhpbnNBcnJheSwgX2VtYmVyUnVudGlt
ZVN5c3RlbU9iamVjdCkgeworICAndXNlIHN0cmljdCc7CisKKyAgZXhwb3J0cy5pc0FycmF5ID0g
aXNBcnJheTsKKyAgZXhwb3J0cy50eXBlT2YgPSB0eXBlT2Y7CisKKyAgLy8gLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorICAvLyBUWVBJTkcgJiBBUlJBWSBNRVNTQUdJ
TkcKKyAgLy8KKyAgdmFyIFRZUEVfTUFQID0geworICAgICdbb2JqZWN0IEJvb2xlYW5dJzogJ2Jv
b2xlYW4nLAorICAgICdbb2JqZWN0IE51bWJlcl0nOiAnbnVtYmVyJywKKyAgICAnW29iamVjdCBT
dHJpbmddJzogJ3N0cmluZycsCisgICAgJ1tvYmplY3QgRnVuY3Rpb25dJzogJ2Z1bmN0aW9uJywK
KyAgICAnW29iamVjdCBBcnJheV0nOiAnYXJyYXknLAorICAgICdbb2JqZWN0IERhdGVdJzogJ2Rh
dGUnLAorICAgICdbb2JqZWN0IFJlZ0V4cF0nOiAncmVnZXhwJywKKyAgICAnW29iamVjdCBPYmpl
Y3RdJzogJ29iamVjdCcKKyAgfTsKKworICB2YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBl
LnRvU3RyaW5nOworCisgIC8qKgorICAgIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGFzc2VkIG9iamVj
dCBpcyBhbiBhcnJheSBvciBBcnJheS1saWtlLgorICAKKyAgICBPYmplY3RzIGFyZSBjb25zaWRl
cmVkIEFycmF5LWxpa2UgaWYgYW55IG9mIHRoZSBmb2xsb3dpbmcgYXJlIHRydWU6CisgIAorICAg
ICAgLSB0aGUgb2JqZWN0IGlzIGEgbmF0aXZlIEFycmF5CisgICAgICAtIHRoZSBvYmplY3QgaGFz
IGFuIG9iamVjdEF0IHByb3BlcnR5CisgICAgICAtIHRoZSBvYmplY3QgaXMgYW4gT2JqZWN0LCBh
bmQgaGFzIGEgbGVuZ3RoIHByb3BlcnR5CisgIAorICAgIFVubGlrZSBgRW1iZXIudHlwZU9mYCB0
aGlzIG1ldGhvZCByZXR1cm5zIHRydWUgZXZlbiBpZiB0aGUgcGFzc2VkIG9iamVjdCBpcworICAg
IG5vdCBmb3JtYWxseSBhbiBhcnJheSBidXQgYXBwZWFycyB0byBiZSBhcnJheS1saWtlIChpLmUu
IGltcGxlbWVudHMgYEVtYmVyLkFycmF5YCkKKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIEVt
YmVyLmlzQXJyYXkoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBmYWxzZQorICAgIEVtYmVyLmlzQXJyYXkoW10pOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyB0cnVlCisgICAgRW1iZXIuaXNBcnJheShFbWJlci5BcnJheVByb3h5
LmNyZWF0ZSh7IGNvbnRlbnQ6IFtdIH0pKTsgIC8vIHRydWUKKyAgICBgYGAKKyAgCisgICAgQG1l
dGhvZCBpc0FycmF5CisgICAgQGZvciBFbWJlcgorICAgIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhl
IG9iamVjdCB0byB0ZXN0CisgICAgQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgcGFzc2Vk
IG9iamVjdCBpcyBhbiBhcnJheSBvciBBcnJheS1saWtlCisgICAgQHB1YmxpYworICAqLworCisg
IGZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7CisgICAgaWYgKCFvYmogfHwgb2JqLnNldEludGVydmFs
KSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChBcnJheS5pc0FycmF5KG9i
aikpIHsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAoX2VtYmVyUnVudGltZU1p
eGluc0FycmF5LmRlZmF1bHQuZGV0ZWN0KG9iaikpIHsKKyAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIHZhciB0eXBlID0gdHlwZU9mKG9iaik7CisgICAgaWYgKCdhcnJheScgPT09IHR5
cGUpIHsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAob2JqLmxlbmd0aCAhPT0g
dW5kZWZpbmVkICYmICdvYmplY3QnID09PSB0eXBlKSB7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgLyoqCisgICAgUmV0dXJucyBhIGNvbnNp
c3RlbnQgdHlwZSBmb3IgdGhlIHBhc3NlZCBvYmplY3QuCisgIAorICAgIFVzZSB0aGlzIGluc3Rl
YWQgb2YgdGhlIGJ1aWx0LWluIGB0eXBlb2ZgIHRvIGdldCB0aGUgdHlwZSBvZiBhbiBpdGVtLgor
ICAgIEl0IHdpbGwgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdCBhY3Jvc3MgYWxsIGJyb3dzZXJzIGFu
ZCBpbmNsdWRlcyBhIGJpdAorICAgIG1vcmUgZGV0YWlsLiBIZXJlIGlzIHdoYXQgd2lsbCBiZSBy
ZXR1cm5lZDoKKyAgCisgICAgICAgIHwgUmV0dXJuIFZhbHVlICB8IE1lYW5pbmcgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICB8LS0tLS0tLS0t
LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLXwKKyAgICAgICAgfCAnc3RyaW5nJyAgICAgIHwgU3RyaW5nIHByaW1pdGl2ZSBvciBTdHJp
bmcgb2JqZWN0LiAgICAgICAgICAgICAgICAgICB8CisgICAgICAgIHwgJ251bWJlcicgICAgICB8
IE51bWJlciBwcmltaXRpdmUgb3IgTnVtYmVyIG9iamVjdC4gICAgICAgICAgICAgICAgICAgfAor
ICAgICAgICB8ICdib29sZWFuJyAgICAgfCBCb29sZWFuIHByaW1pdGl2ZSBvciBCb29sZWFuIG9i
amVjdC4gICAgICAgICAgICAgICAgIHwKKyAgICAgICAgfCAnbnVsbCcgICAgICAgIHwgTnVsbCB2
YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAg
IHwgJ3VuZGVmaW5lZCcgICB8IFVuZGVmaW5lZCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfAorICAgICAgICB8ICdmdW5jdGlvbicgICAgfCBBIGZ1bmN0aW9uICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgfCAnYXJy
YXknICAgICAgIHwgQW4gaW5zdGFuY2Ugb2YgQXJyYXkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8CisgICAgICAgIHwgJ3JlZ2V4cCcgICAgICB8IEFuIGluc3RhbmNlIG9mIFJlZ0V4
cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICB8ICdkYXRlJyAgICAg
ICAgfCBBbiBpbnN0YW5jZSBvZiBEYXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwKKyAgICAgICAgfCAnY2xhc3MnICAgICAgIHwgQW4gRW1iZXIgY2xhc3MgKGNyZWF0ZWQgdXNp
bmcgRW1iZXIuT2JqZWN0LmV4dGVuZCgpKSB8CisgICAgICAgIHwgJ2luc3RhbmNlJyAgICB8IEFu
IEVtYmVyIG9iamVjdCBpbnN0YW5jZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAg
ICAgICB8ICdlcnJvcicgICAgICAgfCBBbiBpbnN0YW5jZSBvZiB0aGUgRXJyb3Igb2JqZWN0ICAg
ICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgfCAnb2JqZWN0JyAgICAgIHwgQSBKYXZhU2Ny
aXB0IG9iamVjdCBub3QgaW5oZXJpdGluZyBmcm9tIEVtYmVyLk9iamVjdCB8CisgIAorICAgIEV4
YW1wbGVzOgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgRW1iZXIudHlwZU9mKCk7ICAgICAg
ICAgICAgICAgICAgICAgICAvLyAndW5kZWZpbmVkJworICAgIEVtYmVyLnR5cGVPZihudWxsKTsg
ICAgICAgICAgICAgICAgICAgLy8gJ251bGwnCisgICAgRW1iZXIudHlwZU9mKHVuZGVmaW5lZCk7
ICAgICAgICAgICAgICAvLyAndW5kZWZpbmVkJworICAgIEVtYmVyLnR5cGVPZignbWljaGFlbCcp
OyAgICAgICAgICAgICAgLy8gJ3N0cmluZycKKyAgICBFbWJlci50eXBlT2YobmV3IFN0cmluZygn
bWljaGFlbCcpKTsgIC8vICdzdHJpbmcnCisgICAgRW1iZXIudHlwZU9mKDEwMSk7ICAgICAgICAg
ICAgICAgICAgICAvLyAnbnVtYmVyJworICAgIEVtYmVyLnR5cGVPZihuZXcgTnVtYmVyKDEwMSkp
OyAgICAgICAgLy8gJ251bWJlcicKKyAgICBFbWJlci50eXBlT2YodHJ1ZSk7ICAgICAgICAgICAg
ICAgICAgIC8vICdib29sZWFuJworICAgIEVtYmVyLnR5cGVPZihuZXcgQm9vbGVhbih0cnVlKSk7
ICAgICAgLy8gJ2Jvb2xlYW4nCisgICAgRW1iZXIudHlwZU9mKEVtYmVyLm1ha2VBcnJheSk7ICAg
ICAgICAvLyAnZnVuY3Rpb24nCisgICAgRW1iZXIudHlwZU9mKFsxLCAyLCA5MF0pOyAgICAgICAg
ICAgICAvLyAnYXJyYXknCisgICAgRW1iZXIudHlwZU9mKC9hYmMvKTsgICAgICAgICAgICAgICAg
ICAvLyAncmVnZXhwJworICAgIEVtYmVyLnR5cGVPZihuZXcgRGF0ZSgpKTsgICAgICAgICAgICAg
Ly8gJ2RhdGUnCisgICAgRW1iZXIudHlwZU9mKEVtYmVyLk9iamVjdC5leHRlbmQoKSk7ICAvLyAn
Y2xhc3MnCisgICAgRW1iZXIudHlwZU9mKEVtYmVyLk9iamVjdC5jcmVhdGUoKSk7ICAvLyAnaW5z
dGFuY2UnCisgICAgRW1iZXIudHlwZU9mKG5ldyBFcnJvcigndGVhbW9jaWwnKSk7ICAvLyAnZXJy
b3InCisgIAorICAgIC8vICdub3JtYWwnIEphdmFTY3JpcHQgb2JqZWN0CisgICAgRW1iZXIudHlw
ZU9mKHsgYTogJ2InIH0pOyAgICAgICAgICAgICAvLyAnb2JqZWN0JworICAgIGBgYAorICAKKyAg
ICBAbWV0aG9kIHR5cGVPZgorICAgIEBmb3IgRW1iZXIKKyAgICBAcGFyYW0ge09iamVjdH0gaXRl
bSB0aGUgaXRlbSB0byBjaGVjaworICAgIEByZXR1cm4ge1N0cmluZ30gdGhlIHR5cGUKKyAgICBA
cHVibGljCisgICovCisKKyAgZnVuY3Rpb24gdHlwZU9mKGl0ZW0pIHsKKyAgICBpZiAoaXRlbSA9
PT0gbnVsbCkgeworICAgICAgcmV0dXJuICdudWxsJzsKKyAgICB9CisgICAgaWYgKGl0ZW0gPT09
IHVuZGVmaW5lZCkgeworICAgICAgcmV0dXJuICd1bmRlZmluZWQnOworICAgIH0KKyAgICB2YXIg
cmV0ID0gVFlQRV9NQVBbdG9TdHJpbmcuY2FsbChpdGVtKV0gfHwgJ29iamVjdCc7CisKKyAgICBp
ZiAocmV0ID09PSAnZnVuY3Rpb24nKSB7CisgICAgICBpZiAoX2VtYmVyUnVudGltZVN5c3RlbU9i
amVjdC5kZWZhdWx0LmRldGVjdChpdGVtKSkgeworICAgICAgICByZXQgPSAnY2xhc3MnOworICAg
ICAgfQorICAgIH0gZWxzZSBpZiAocmV0ID09PSAnb2JqZWN0JykgeworICAgICAgaWYgKGl0ZW0g
aW5zdGFuY2VvZiBFcnJvcikgeworICAgICAgICByZXQgPSAnZXJyb3InOworICAgICAgfSBlbHNl
IGlmIChpdGVtIGluc3RhbmNlb2YgX2VtYmVyUnVudGltZVN5c3RlbU9iamVjdC5kZWZhdWx0KSB7
CisgICAgICAgIHJldCA9ICdpbnN0YW5jZSc7CisgICAgICB9IGVsc2UgaWYgKGl0ZW0gaW5zdGFu
Y2VvZiBEYXRlKSB7CisgICAgICAgIHJldCA9ICdkYXRlJzsKKyAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gcmV0OworICB9Cit9KTsKK2VuaWZlZCgnZW1iZXItdGVtcGxhdGUtY29tcGlsZXIv
Y29tcGF0JywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2NvcmUnLCAnZW1iZXItdGVtcGxhdGUt
Y29tcGlsZXIvY29tcGF0L3ByZWNvbXBpbGUnLCAnZW1iZXItdGVtcGxhdGUtY29tcGlsZXIvc3lz
dGVtL2NvbXBpbGUnLCAnZW1iZXItdGVtcGxhdGUtY29tcGlsZXIvc3lzdGVtL3RlbXBsYXRlJ10s
IGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbENvcmUsIF9lbWJlclRlbXBsYXRlQ29tcGls
ZXJDb21wYXRQcmVjb21waWxlLCBfZW1iZXJUZW1wbGF0ZUNvbXBpbGVyU3lzdGVtQ29tcGlsZSwg
X2VtYmVyVGVtcGxhdGVDb21waWxlclN5c3RlbVRlbXBsYXRlKSB7CisgICd1c2Ugc3RyaWN0JzsK
KworICB2YXIgRW1iZXJIYW5kbGViYXJzID0gX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuSGFuZGxl
YmFycyA9IF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LkhhbmRsZWJhcnMgfHwge307CisKKyAgRW1i
ZXJIYW5kbGViYXJzLnByZWNvbXBpbGUgPSBfZW1iZXJUZW1wbGF0ZUNvbXBpbGVyQ29tcGF0UHJl
Y29tcGlsZS5kZWZhdWx0OworICBFbWJlckhhbmRsZWJhcnMuY29tcGlsZSA9IF9lbWJlclRlbXBs
YXRlQ29tcGlsZXJTeXN0ZW1Db21waWxlLmRlZmF1bHQ7CisgIEVtYmVySGFuZGxlYmFycy50ZW1w
bGF0ZSA9IF9lbWJlclRlbXBsYXRlQ29tcGlsZXJTeXN0ZW1UZW1wbGF0ZS5kZWZhdWx0OworfSk7
CitlbmlmZWQoJ2VtYmVyLXRlbXBsYXRlLWNvbXBpbGVyL2NvbXBhdC9wcmVjb21waWxlJywgWydl
eHBvcnRzJywgJ3JlcXVpcmUnLCAnZW1iZXItdGVtcGxhdGUtY29tcGlsZXIvc3lzdGVtL2NvbXBp
bGVfb3B0aW9ucyddLCBmdW5jdGlvbiAoZXhwb3J0cywgX3JlcXVpcmUsIF9lbWJlclRlbXBsYXRl
Q29tcGlsZXJTeXN0ZW1Db21waWxlX29wdGlvbnMpIHsKKyAgLyoqCisgIEBtb2R1bGUgZW1iZXIK
KyAgQHN1Ym1vZHVsZSBlbWJlci10ZW1wbGF0ZS1jb21waWxlcgorICAqLworICAndXNlIHN0cmlj
dCc7CisKKyAgdmFyIGNvbXBpbGUsIGNvbXBpbGVTcGVjOworCisgIGV4cG9ydHMuZGVmYXVsdCA9
IGZ1bmN0aW9uIChzdHJpbmcpIHsKKyAgICBpZiAoKCFjb21waWxlIHx8ICFjb21waWxlU3BlYykg
JiYgX3JlcXVpcmUuaGFzKCdodG1sYmFycy1jb21waWxlci9jb21waWxlcicpKSB7CisgICAgICB2
YXIgQ29tcGlsZXIgPSBfcmVxdWlyZS5kZWZhdWx0KCdodG1sYmFycy1jb21waWxlci9jb21waWxl
cicpOworCisgICAgICBjb21waWxlID0gQ29tcGlsZXIuY29tcGlsZTsKKyAgICAgIGNvbXBpbGVT
cGVjID0gQ29tcGlsZXIuY29tcGlsZVNwZWM7CisgICAgfQorCisgICAgaWYgKCFjb21waWxlIHx8
ICFjb21waWxlU3BlYykgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2FsbCBgcHJl
Y29tcGlsZWAgd2l0aG91dCB0aGUgdGVtcGxhdGUgY29tcGlsZXIgbG9hZGVkLiBQbGVhc2UgbG9h
ZCBgZW1iZXItdGVtcGxhdGUtY29tcGlsZXIuanNgIHByaW9yIHRvIGNhbGxpbmcgYHByZWNvbXBp
bGVgLicpOworICAgIH0KKworICAgIHZhciBhc09iamVjdCA9IGFyZ3VtZW50c1sxXSA9PT0gdW5k
ZWZpbmVkID8gdHJ1ZSA6IGFyZ3VtZW50c1sxXTsKKyAgICB2YXIgY29tcGlsZUZ1bmMgPSBhc09i
amVjdCA/IGNvbXBpbGUgOiBjb21waWxlU3BlYzsKKworICAgIHJldHVybiBjb21waWxlRnVuYyhz
dHJpbmcsIF9lbWJlclRlbXBsYXRlQ29tcGlsZXJTeXN0ZW1Db21waWxlX29wdGlvbnMuZGVmYXVs
dCgpKTsKKyAgfTsKK30pOworZW5pZmVkKCdlbWJlci10ZW1wbGF0ZS1jb21waWxlci9pbmRleCcs
IFsnZXhwb3J0cycsICdlbWJlci1tZXRhbCcsICdlbWJlci10ZW1wbGF0ZS1jb21waWxlci9zeXN0
ZW0vcHJlY29tcGlsZScsICdlbWJlci10ZW1wbGF0ZS1jb21waWxlci9zeXN0ZW0vY29tcGlsZScs
ICdlbWJlci10ZW1wbGF0ZS1jb21waWxlci9zeXN0ZW0vdGVtcGxhdGUnLCAnZW1iZXItdGVtcGxh
dGUtY29tcGlsZXIvcGx1Z2lucycsICdlbWJlci10ZW1wbGF0ZS1jb21waWxlci9wbHVnaW5zL3Ry
YW5zZm9ybS1vbGQtYmluZGluZy1zeW50YXgnLCAnZW1iZXItdGVtcGxhdGUtY29tcGlsZXIvcGx1
Z2lucy90cmFuc2Zvcm0tb2xkLWNsYXNzLWJpbmRpbmctc3ludGF4JywgJ2VtYmVyLXRlbXBsYXRl
LWNvbXBpbGVyL3BsdWdpbnMvdHJhbnNmb3JtLWl0ZW0tY2xhc3MnLCAnZW1iZXItdGVtcGxhdGUt
Y29tcGlsZXIvcGx1Z2lucy90cmFuc2Zvcm0tY2xvc3VyZS1jb21wb25lbnQtYXR0cnMtaW50by1t
dXQnLCAnZW1iZXItdGVtcGxhdGUtY29tcGlsZXIvcGx1Z2lucy90cmFuc2Zvcm0tY29tcG9uZW50
LWF0dHJzLWludG8tbXV0JywgJ2VtYmVyLXRlbXBsYXRlLWNvbXBpbGVyL3BsdWdpbnMvdHJhbnNm
b3JtLWNvbXBvbmVudC1jdXJseS10by1yZWFkb25seScsICdlbWJlci10ZW1wbGF0ZS1jb21waWxl
ci9wbHVnaW5zL3RyYW5zZm9ybS1hbmdsZS1icmFja2V0LWNvbXBvbmVudHMnLCAnZW1iZXItdGVt
cGxhdGUtY29tcGlsZXIvcGx1Z2lucy90cmFuc2Zvcm0taW5wdXQtb24tdG8tb25FdmVudCcsICdl
bWJlci10ZW1wbGF0ZS1jb21waWxlci9wbHVnaW5zL3RyYW5zZm9ybS10b3AtbGV2ZWwtY29tcG9u
ZW50cycsICdlbWJlci10ZW1wbGF0ZS1jb21waWxlci9wbHVnaW5zL2RlcHJlY2F0ZS1yZW5kZXIt
bW9kZWwnLCAnZW1iZXItdGVtcGxhdGUtY29tcGlsZXIvcGx1Z2lucy9wcmV2ZW50LXJlbmRlci1i
bG9jaycsICdlbWJlci10ZW1wbGF0ZS1jb21waWxlci9wbHVnaW5zL3RyYW5zZm9ybS1pbmxpbmUt
bGluay10bycsICdlbWJlci10ZW1wbGF0ZS1jb21waWxlci9wbHVnaW5zL2Fzc2VydC1uby12aWV3
LWFuZC1jb250cm9sbGVyLXBhdGhzJywgJ2VtYmVyLXRlbXBsYXRlLWNvbXBpbGVyL3BsdWdpbnMv
YXNzZXJ0LW5vLXZpZXctaGVscGVyJywgJ2VtYmVyLXRlbXBsYXRlLWNvbXBpbGVyL3BsdWdpbnMv
YXNzZXJ0LW5vLWVhY2gtaW4nLCAnZW1iZXItdGVtcGxhdGUtY29tcGlsZXIvY29tcGF0J10sIGZ1
bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbCwgX2VtYmVyVGVtcGxhdGVDb21waWxlclN5c3Rl
bVByZWNvbXBpbGUsIF9lbWJlclRlbXBsYXRlQ29tcGlsZXJTeXN0ZW1Db21waWxlLCBfZW1iZXJU
ZW1wbGF0ZUNvbXBpbGVyU3lzdGVtVGVtcGxhdGUsIF9lbWJlclRlbXBsYXRlQ29tcGlsZXJQbHVn
aW5zLCBfZW1iZXJUZW1wbGF0ZUNvbXBpbGVyUGx1Z2luc1RyYW5zZm9ybU9sZEJpbmRpbmdTeW50
YXgsIF9lbWJlclRlbXBsYXRlQ29tcGlsZXJQbHVnaW5zVHJhbnNmb3JtT2xkQ2xhc3NCaW5kaW5n
U3ludGF4LCBfZW1iZXJUZW1wbGF0ZUNvbXBpbGVyUGx1Z2luc1RyYW5zZm9ybUl0ZW1DbGFzcywg
X2VtYmVyVGVtcGxhdGVDb21waWxlclBsdWdpbnNUcmFuc2Zvcm1DbG9zdXJlQ29tcG9uZW50QXR0
cnNJbnRvTXV0LCBfZW1iZXJUZW1wbGF0ZUNvbXBpbGVyUGx1Z2luc1RyYW5zZm9ybUNvbXBvbmVu
dEF0dHJzSW50b011dCwgX2VtYmVyVGVtcGxhdGVDb21waWxlclBsdWdpbnNUcmFuc2Zvcm1Db21w
b25lbnRDdXJseVRvUmVhZG9ubHksIF9lbWJlclRlbXBsYXRlQ29tcGlsZXJQbHVnaW5zVHJhbnNm
b3JtQW5nbGVCcmFja2V0Q29tcG9uZW50cywgX2VtYmVyVGVtcGxhdGVDb21waWxlclBsdWdpbnNU
cmFuc2Zvcm1JbnB1dE9uVG9PbkV2ZW50LCBfZW1iZXJUZW1wbGF0ZUNvbXBpbGVyUGx1Z2luc1Ry
YW5zZm9ybVRvcExldmVsQ29tcG9uZW50cywgX2VtYmVyVGVtcGxhdGVDb21waWxlclBsdWdpbnNE
ZXByZWNhdGVSZW5kZXJNb2RlbCwgX2VtYmVyVGVtcGxhdGVDb21waWxlclBsdWdpbnNQcmV2ZW50
UmVuZGVyQmxvY2ssIF9lbWJlclRlbXBsYXRlQ29tcGlsZXJQbHVnaW5zVHJhbnNmb3JtSW5saW5l
TGlua1RvLCBfZW1iZXJUZW1wbGF0ZUNvbXBpbGVyUGx1Z2luc0Fzc2VydE5vVmlld0FuZENvbnRy
b2xsZXJQYXRocywgX2VtYmVyVGVtcGxhdGVDb21waWxlclBsdWdpbnNBc3NlcnROb1ZpZXdIZWxw
ZXIsIF9lbWJlclRlbXBsYXRlQ29tcGlsZXJQbHVnaW5zQXNzZXJ0Tm9FYWNoSW4sIF9lbWJlclRl
bXBsYXRlQ29tcGlsZXJDb21wYXQpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIF9lbWJlclRlbXBs
YXRlQ29tcGlsZXJQbHVnaW5zLnJlZ2lzdGVyUGx1Z2luKCdhc3QnLCBfZW1iZXJUZW1wbGF0ZUNv
bXBpbGVyUGx1Z2luc1RyYW5zZm9ybU9sZEJpbmRpbmdTeW50YXguZGVmYXVsdCk7CisgIF9lbWJl
clRlbXBsYXRlQ29tcGlsZXJQbHVnaW5zLnJlZ2lzdGVyUGx1Z2luKCdhc3QnLCBfZW1iZXJUZW1w
bGF0ZUNvbXBpbGVyUGx1Z2luc1RyYW5zZm9ybU9sZENsYXNzQmluZGluZ1N5bnRheC5kZWZhdWx0
KTsKKyAgX2VtYmVyVGVtcGxhdGVDb21waWxlclBsdWdpbnMucmVnaXN0ZXJQbHVnaW4oJ2FzdCcs
IF9lbWJlclRlbXBsYXRlQ29tcGlsZXJQbHVnaW5zVHJhbnNmb3JtSXRlbUNsYXNzLmRlZmF1bHQp
OworICBfZW1iZXJUZW1wbGF0ZUNvbXBpbGVyUGx1Z2lucy5yZWdpc3RlclBsdWdpbignYXN0Jywg
X2VtYmVyVGVtcGxhdGVDb21waWxlclBsdWdpbnNUcmFuc2Zvcm1DbG9zdXJlQ29tcG9uZW50QXR0
cnNJbnRvTXV0LmRlZmF1bHQpOworICBfZW1iZXJUZW1wbGF0ZUNvbXBpbGVyUGx1Z2lucy5yZWdp
c3RlclBsdWdpbignYXN0JywgX2VtYmVyVGVtcGxhdGVDb21waWxlclBsdWdpbnNUcmFuc2Zvcm1D
b21wb25lbnRBdHRyc0ludG9NdXQuZGVmYXVsdCk7CisgIF9lbWJlclRlbXBsYXRlQ29tcGlsZXJQ
bHVnaW5zLnJlZ2lzdGVyUGx1Z2luKCdhc3QnLCBfZW1iZXJUZW1wbGF0ZUNvbXBpbGVyUGx1Z2lu
c1RyYW5zZm9ybUNvbXBvbmVudEN1cmx5VG9SZWFkb25seS5kZWZhdWx0KTsKKyAgX2VtYmVyVGVt
cGxhdGVDb21waWxlclBsdWdpbnMucmVnaXN0ZXJQbHVnaW4oJ2FzdCcsIF9lbWJlclRlbXBsYXRl
Q29tcGlsZXJQbHVnaW5zVHJhbnNmb3JtQW5nbGVCcmFja2V0Q29tcG9uZW50cy5kZWZhdWx0KTsK
KyAgX2VtYmVyVGVtcGxhdGVDb21waWxlclBsdWdpbnMucmVnaXN0ZXJQbHVnaW4oJ2FzdCcsIF9l
bWJlclRlbXBsYXRlQ29tcGlsZXJQbHVnaW5zVHJhbnNmb3JtSW5wdXRPblRvT25FdmVudC5kZWZh
dWx0KTsKKyAgX2VtYmVyVGVtcGxhdGVDb21waWxlclBsdWdpbnMucmVnaXN0ZXJQbHVnaW4oJ2Fz
dCcsIF9lbWJlclRlbXBsYXRlQ29tcGlsZXJQbHVnaW5zVHJhbnNmb3JtVG9wTGV2ZWxDb21wb25l
bnRzLmRlZmF1bHQpOworICBfZW1iZXJUZW1wbGF0ZUNvbXBpbGVyUGx1Z2lucy5yZWdpc3RlclBs
dWdpbignYXN0JywgX2VtYmVyVGVtcGxhdGVDb21waWxlclBsdWdpbnNEZXByZWNhdGVSZW5kZXJN
b2RlbC5kZWZhdWx0KTsKKyAgX2VtYmVyVGVtcGxhdGVDb21waWxlclBsdWdpbnMucmVnaXN0ZXJQ
bHVnaW4oJ2FzdCcsIF9lbWJlclRlbXBsYXRlQ29tcGlsZXJQbHVnaW5zUHJldmVudFJlbmRlckJs
b2NrLmRlZmF1bHQpOworICBfZW1iZXJUZW1wbGF0ZUNvbXBpbGVyUGx1Z2lucy5yZWdpc3RlclBs
dWdpbignYXN0JywgX2VtYmVyVGVtcGxhdGVDb21waWxlclBsdWdpbnNBc3NlcnROb0VhY2hJbi5k
ZWZhdWx0KTsKKyAgX2VtYmVyVGVtcGxhdGVDb21waWxlclBsdWdpbnMucmVnaXN0ZXJQbHVnaW4o
J2FzdCcsIF9lbWJlclRlbXBsYXRlQ29tcGlsZXJQbHVnaW5zVHJhbnNmb3JtSW5saW5lTGlua1Rv
LmRlZmF1bHQpOworCisgIGlmICghX2VtYmVyTWV0YWwuZGVmYXVsdC5FTlYuX0VOQUJMRV9MRUdB
Q1lfVklFV19TVVBQT1JUKSB7CisgICAgX2VtYmVyVGVtcGxhdGVDb21waWxlclBsdWdpbnMucmVn
aXN0ZXJQbHVnaW4oJ2FzdCcsIF9lbWJlclRlbXBsYXRlQ29tcGlsZXJQbHVnaW5zQXNzZXJ0Tm9W
aWV3QW5kQ29udHJvbGxlclBhdGhzLmRlZmF1bHQpOworICAgIF9lbWJlclRlbXBsYXRlQ29tcGls
ZXJQbHVnaW5zLnJlZ2lzdGVyUGx1Z2luKCdhc3QnLCBfZW1iZXJUZW1wbGF0ZUNvbXBpbGVyUGx1
Z2luc0Fzc2VydE5vVmlld0hlbHBlci5kZWZhdWx0KTsKKyAgfQorCisgIGV4cG9ydHMuX0VtYmVy
ID0gX2VtYmVyTWV0YWwuZGVmYXVsdDsKKyAgZXhwb3J0cy5wcmVjb21waWxlID0gX2VtYmVyVGVt
cGxhdGVDb21waWxlclN5c3RlbVByZWNvbXBpbGUuZGVmYXVsdDsKKyAgZXhwb3J0cy5jb21waWxl
ID0gX2VtYmVyVGVtcGxhdGVDb21waWxlclN5c3RlbUNvbXBpbGUuZGVmYXVsdDsKKyAgZXhwb3J0
cy50ZW1wbGF0ZSA9IF9lbWJlclRlbXBsYXRlQ29tcGlsZXJTeXN0ZW1UZW1wbGF0ZS5kZWZhdWx0
OworICBleHBvcnRzLnJlZ2lzdGVyUGx1Z2luID0gX2VtYmVyVGVtcGxhdGVDb21waWxlclBsdWdp
bnMucmVnaXN0ZXJQbHVnaW47Cit9KTsKKworLy8gdXNlZCBmb3IgYWRkaW5nIEVtYmVyLkhhbmRs
ZWJhcnMuY29tcGlsZSBmb3IgYmFja3dhcmRzIGNvbXBhdAorZW5pZmVkKCdlbWJlci10ZW1wbGF0
ZS1jb21waWxlci9wbHVnaW5zJywgWydleHBvcnRzJ10sIGZ1bmN0aW9uIChleHBvcnRzKSB7Cisg
IC8qKgorICBAbW9kdWxlIGVtYmVyCisgIEBzdWJtb2R1bGUgZW1iZXItdGVtcGxhdGUtY29tcGls
ZXIKKyAgKi8KKworICAvKioKKyAgIEBwcml2YXRlCisgICBAcHJvcGVydHkgaGVscGVycworICAq
LworICAndXNlIHN0cmljdCc7CisKKyAgZXhwb3J0cy5yZWdpc3RlclBsdWdpbiA9IHJlZ2lzdGVy
UGx1Z2luOworICB2YXIgcGx1Z2lucyA9IHsKKyAgICBhc3Q6IFtdCisgIH07CisKKyAgLyoqCisg
ICAgQWRkcyBhbiBBU1QgcGx1Z2luIHRvIGJlIHVzZWQgYnkgRW1iZXIuSFRNTEJhcnMuY29tcGls
ZS4KKyAgCisgICAgQHByaXZhdGUKKyAgICBAbWV0aG9kIHJlZ2lzdGVyQVNUUGx1Z2luCisgICov
CisKKyAgZnVuY3Rpb24gcmVnaXN0ZXJQbHVnaW4odHlwZSwgUGx1Z2luKSB7CisgICAgaWYgKCFw
bHVnaW5zW3R5cGVdKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0dGVtcHRpbmcgdG8gcmVn
aXN0ZXIgIicgKyBQbHVnaW4gKyAnIiBhcyAiJyArIHR5cGUgKyAnIiB3aGljaCBpcyBub3QgYSB2
YWxpZCBIVE1MQmFycyBwbHVnaW4gdHlwZS4nKTsKKyAgICB9CisKKyAgICBwbHVnaW5zW3R5cGVd
LnB1c2goUGx1Z2luKTsKKyAgfQorCisgIGV4cG9ydHMuZGVmYXVsdCA9IHBsdWdpbnM7Cit9KTsK
K2VuaWZlZCgnZW1iZXItdGVtcGxhdGUtY29tcGlsZXIvcGx1Z2lucy9hc3NlcnQtbm8tZWFjaC1p
bicsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9jb3JlJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywg
J2VtYmVyLXRlbXBsYXRlLWNvbXBpbGVyL3N5c3RlbS9jYWxjdWxhdGUtbG9jYXRpb24tZGlzcGxh
eSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxDb3JlLCBfZW1iZXJNZXRhbERlYnVn
LCBfZW1iZXJUZW1wbGF0ZUNvbXBpbGVyU3lzdGVtQ2FsY3VsYXRlTG9jYXRpb25EaXNwbGF5KSB7
CisgICd1c2Ugc3RyaWN0JzsKKworICBmdW5jdGlvbiBBc3NlcnROb0VhY2hJbigpIHsKKyAgICB2
YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMCB8fCBhcmd1bWVudHNbMF0gPT09IHVu
ZGVmaW5lZCA/IHt9IDogYXJndW1lbnRzWzBdOworCisgICAgdGhpcy5zeW50YXggPSBudWxsOwor
ICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7CisgIH0KKworICBBc3NlcnROb0VhY2hJbi5wcm90
b3R5cGUudHJhbnNmb3JtID0gZnVuY3Rpb24gQXNzZXJ0Tm9FYWNoSW5fdHJhbnNmb3JtKGFzdCkg
eworICAgIGlmICghIV9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LkVOVi5fRU5BQkxFX0xFR0FDWV9W
SUVXX1NVUFBPUlQpIHsKKyAgICAgIHJldHVybiBhc3Q7CisgICAgfQorICAgIHZhciB3YWxrZXIg
PSBuZXcgdGhpcy5zeW50YXguV2Fsa2VyKCk7CisgICAgdmFyIG1vZHVsZU5hbWUgPSB0aGlzLm9w
dGlvbnMgJiYgdGhpcy5vcHRpb25zLm1vZHVsZU5hbWU7CisKKyAgICB3YWxrZXIudmlzaXQoYXN0
LCBmdW5jdGlvbiAobm9kZSkgeworICAgICAgaWYgKCF2YWxpZGF0ZShub2RlKSkgeworICAgICAg
ICByZXR1cm47CisgICAgICB9CisgICAgICBhc3NlcnRIZWxwZXIobW9kdWxlTmFtZSwgbm9kZSk7
CisgICAgfSk7CisKKyAgICByZXR1cm4gYXN0OworICB9OworCisgIGZ1bmN0aW9uIGFzc2VydEhl
bHBlcihtb2R1bGVOYW1lLCBub2RlKSB7CisgICAgdmFyIG1vZHVsZUluZm8gPSBfZW1iZXJUZW1w
bGF0ZUNvbXBpbGVyU3lzdGVtQ2FsY3VsYXRlTG9jYXRpb25EaXNwbGF5LmRlZmF1bHQobW9kdWxl
TmFtZSwgbm9kZS5sb2MpOworICAgIHZhciBzaW5ndWxhciA9IG5vZGUucGFyYW1zWzBdLm9yaWdp
bmFsOworICAgIHZhciBwbHVyYWwgPSBub2RlLnBhcmFtc1syXS5vcmlnaW5hbDsKKworICAgIF9l
bWJlck1ldGFsRGVidWcuYXNzZXJ0KCdVc2luZyB7eyNlYWNoICcgKyBzaW5ndWxhciArICcgaW4g
JyArIHBsdXJhbCArICd9fSAnICsgbW9kdWxlSW5mbyArICdpcyBubyBsb25nZXIgc3VwcG9ydGVk
IGluIEVtYmVyIDIuMCssIHBsZWFzZSB1c2Uge3sjZWFjaCAnICsgcGx1cmFsICsgJyBhcyB8JyAr
IHNpbmd1bGFyICsgJ3x9fScpOworICB9CisKKyAgZnVuY3Rpb24gdmFsaWRhdGUobm9kZSkgewor
ICAgIHJldHVybiAobm9kZS50eXBlID09PSAnQmxvY2tTdGF0ZW1lbnQnIHx8IG5vZGUudHlwZSA9
PT0gJ011c3RhY2hlU3RhdGVtZW50JykgJiYgbm9kZS5wYXRoLm9yaWdpbmFsID09PSAnZWFjaCcg
JiYgbm9kZS5wYXJhbXMubGVuZ3RoID09PSAzICYmIG5vZGUucGFyYW1zWzFdLnR5cGUgPT09ICdQ
YXRoRXhwcmVzc2lvbicgJiYgbm9kZS5wYXJhbXNbMV0ub3JpZ2luYWwgPT09ICdpbic7CisgIH0K
KworICBleHBvcnRzLmRlZmF1bHQgPSBBc3NlcnROb0VhY2hJbjsKK30pOworZW5pZmVkKCdlbWJl
ci10ZW1wbGF0ZS1jb21waWxlci9wbHVnaW5zL2Fzc2VydC1uby12aWV3LWFuZC1jb250cm9sbGVy
LXBhdGhzJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2NvcmUnLCAnZW1iZXItbWV0YWwvZGVi
dWcnLCAnZW1iZXItdGVtcGxhdGUtY29tcGlsZXIvc3lzdGVtL2NhbGN1bGF0ZS1sb2NhdGlvbi1k
aXNwbGF5J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbENvcmUsIF9lbWJlck1ldGFs
RGVidWcsIF9lbWJlclRlbXBsYXRlQ29tcGlsZXJTeXN0ZW1DYWxjdWxhdGVMb2NhdGlvbkRpc3Bs
YXkpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIGZ1bmN0aW9uIEFzc2VydE5vVmlld0FuZENvbnRy
b2xsZXJQYXRocygpIHsKKyAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMCB8
fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IHt9IDogYXJndW1lbnRzWzBdOworCisgICAg
Ly8gc2V0IGxhdGVyIHdpdGhpbiBIVE1MQmFycyB0byB0aGUgc3ludGF4IHBhY2thZ2UKKyAgICB0
aGlzLnN5bnRheCA9IG51bGw7CisgICAgdGhpcy5vcHRpb25zID0gb3B0aW9uczsKKyAgfQorCisg
IC8qKgorICAgIEBwcml2YXRlCisgICAgQG1ldGhvZCB0cmFuc2Zvcm0KKyAgICBAcGFyYW0ge0FT
VH0gYXN0IFRoZSBBU1QgdG8gYmUgdHJhbnNmb3JtZWQuCisgICovCisgIEFzc2VydE5vVmlld0Fu
ZENvbnRyb2xsZXJQYXRocy5wcm90b3R5cGUudHJhbnNmb3JtID0gZnVuY3Rpb24gQXNzZXJ0Tm9W
aWV3QW5kQ29udHJvbGxlclBhdGhzX3RyYW5zZm9ybShhc3QpIHsKKyAgICB2YXIgd2Fsa2VyID0g
bmV3IHRoaXMuc3ludGF4LldhbGtlcigpOworICAgIHZhciBtb2R1bGVOYW1lID0gdGhpcy5vcHRp
b25zICYmIHRoaXMub3B0aW9ucy5tb2R1bGVOYW1lOworCisgICAgd2Fsa2VyLnZpc2l0KGFzdCwg
ZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAgIGlmICghdmFsaWRhdGUobm9kZSkpIHsKKyAgICAgICAg
cmV0dXJuOworICAgICAgfQorCisgICAgICBhc3NlcnRQYXRoKG1vZHVsZU5hbWUsIG5vZGUsIG5v
ZGUucGF0aCk7CisgICAgICBhc3NlcnRQYXRocyhtb2R1bGVOYW1lLCBub2RlLCBub2RlLnBhcmFt
cyk7CisgICAgICBhc3NlcnRIYXNoKG1vZHVsZU5hbWUsIG5vZGUsIG5vZGUuaGFzaCk7CisgICAg
fSk7CisKKyAgICByZXR1cm4gYXN0OworICB9OworCisgIGZ1bmN0aW9uIGFzc2VydEhhc2gobW9k
dWxlTmFtZSwgbm9kZSwgaGFzaCkgeworICAgIGlmICghaGFzaCB8fCAhaGFzaC5wYWlycykgewor
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICB2YXIgaSwgbCwgcGFpciwgcGF0aHM7CisgICAgZm9y
IChpID0gMCwgbCA9IGhhc2gucGFpcnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CisgICAgICBwYWly
ID0gaGFzaC5wYWlyc1tpXTsKKyAgICAgIHBhdGhzID0gcGFpci52YWx1ZS5wYXJhbXM7CisgICAg
ICBhc3NlcnRQYXRocyhtb2R1bGVOYW1lLCBwYWlyLCBwYXRocyk7CisgICAgfQorICB9CisKKyAg
ZnVuY3Rpb24gYXNzZXJ0UGF0aHMobW9kdWxlTmFtZSwgbm9kZSwgcGF0aHMpIHsKKyAgICBpZiAo
IXBhdGhzKSB7CisgICAgICByZXR1cm47CisgICAgfQorICAgIHZhciBpLCBsLCBwYXRoOworICAg
IGZvciAoaSA9IDAsIGwgPSBwYXRocy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKKyAgICAgIHBhdGgg
PSBwYXRoc1tpXTsKKyAgICAgIGFzc2VydFBhdGgobW9kdWxlTmFtZSwgbm9kZSwgcGF0aCk7Cisg
ICAgfQorICB9CisKKyAgZnVuY3Rpb24gYXNzZXJ0UGF0aChtb2R1bGVOYW1lLCBub2RlLCBwYXRo
KSB7CisgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1VzaW5nIGB7eycgKyAocGF0aCAmJiBw
YXRoLnR5cGUgPT09ICdQYXRoRXhwcmVzc2lvbicgJiYgcGF0aC5wYXJ0c1swXSkgKyAnfX1gIG9y
IGFueSBwYXRoIGJhc2VkIG9uIGl0ICcgKyBfZW1iZXJUZW1wbGF0ZUNvbXBpbGVyU3lzdGVtQ2Fs
Y3VsYXRlTG9jYXRpb25EaXNwbGF5LmRlZmF1bHQobW9kdWxlTmFtZSwgbm9kZS5sb2MpICsgJ2hh
cyBiZWVuIHJlbW92ZWQgaW4gRW1iZXIgMi4wJywgKGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciBu
b0Fzc2VydGlvbiA9IHRydWU7CisKKyAgICAgIC8vIGFsbG93IG9wdC1vdXQgb2YgdGhlIGFzc2Vy
dGlvbiB3aGVuIGxlZ2FjeSBhZGRvbnMgYXJlIHByZXNlbnQKKyAgICAgIHZhciB2aWV3S2V5d29y
ZCA9IHBhdGggJiYgcGF0aC50eXBlID09PSAnUGF0aEV4cHJlc3Npb24nICYmIHBhdGgucGFydHMg
JiYgcGF0aC5wYXJ0c1swXTsKKyAgICAgIGlmICh2aWV3S2V5d29yZCA9PT0gJ3ZpZXcnKSB7Cisg
ICAgICAgIG5vQXNzZXJ0aW9uID0gX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuRU5WLl9FTkFCTEVf
TEVHQUNZX1ZJRVdfU1VQUE9SVDsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIG5vQXNzZXJ0aW9u
OworICAgIH0pKCksIHsKKyAgICAgIGlkOiBwYXRoLnBhcnRzICYmIHBhdGgucGFydHNbMF0gPT09
ICd2aWV3JyA/ICd2aWV3LmtleXdvcmQudmlldycgOiAndmlldy5rZXl3b3JkLmNvbnRyb2xsZXIn
LAorICAgICAgdW50aWw6ICcyLjAuMCcKKyAgICB9KTsKKyAgfQorCisgIGZ1bmN0aW9uIHZhbGlk
YXRlKG5vZGUpIHsKKyAgICByZXR1cm4gbm9kZS50eXBlID09PSAnTXVzdGFjaGVTdGF0ZW1lbnQn
IHx8IG5vZGUudHlwZSA9PT0gJ0Jsb2NrU3RhdGVtZW50JzsKKyAgfQorCisgIGV4cG9ydHMuZGVm
YXVsdCA9IEFzc2VydE5vVmlld0FuZENvbnRyb2xsZXJQYXRoczsKK30pOworZW5pZmVkKCdlbWJl
ci10ZW1wbGF0ZS1jb21waWxlci9wbHVnaW5zL2Fzc2VydC1uby12aWV3LWhlbHBlcicsIFsnZXhw
b3J0cycsICdlbWJlci1tZXRhbC9jb3JlJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLXRl
bXBsYXRlLWNvbXBpbGVyL3N5c3RlbS9jYWxjdWxhdGUtbG9jYXRpb24tZGlzcGxheSddLCBmdW5j
dGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxDb3JlLCBfZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJU
ZW1wbGF0ZUNvbXBpbGVyU3lzdGVtQ2FsY3VsYXRlTG9jYXRpb25EaXNwbGF5KSB7CisgICd1c2Ug
c3RyaWN0JzsKKworICBmdW5jdGlvbiBBc3NlcnROb1ZpZXdIZWxwZXIoKSB7CisgICAgdmFyIG9w
dGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDAgfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmlu
ZWQgPyB7fSA6IGFyZ3VtZW50c1swXTsKKworICAgIC8vIHNldCBsYXRlciB3aXRoaW4gSFRNTEJh
cnMgdG8gdGhlIHN5bnRheCBwYWNrYWdlCisgICAgdGhpcy5zeW50YXggPSBudWxsOworICAgIHRo
aXMub3B0aW9ucyA9IG9wdGlvbnM7CisgIH0KKworICAvKioKKyAgICBAcHJpdmF0ZQorICAgIEBt
ZXRob2QgdHJhbnNmb3JtCisgICAgQHBhcmFtIHtBU1R9IGFzdCBUaGUgQVNUIHRvIGJlIHRyYW5z
Zm9ybWVkLgorICAqLworICBBc3NlcnROb1ZpZXdIZWxwZXIucHJvdG90eXBlLnRyYW5zZm9ybSA9
IGZ1bmN0aW9uIEFzc2VydE5vVmlld0hlbHBlcl90cmFuc2Zvcm0oYXN0KSB7CisgICAgaWYgKCEh
X2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuRU5WLl9FTkFCTEVfTEVHQUNZX1ZJRVdfU1VQUE9SVCkg
eworICAgICAgcmV0dXJuIGFzdDsKKyAgICB9CisgICAgdmFyIHdhbGtlciA9IG5ldyB0aGlzLnN5
bnRheC5XYWxrZXIoKTsKKyAgICB2YXIgbW9kdWxlTmFtZSA9IHRoaXMub3B0aW9ucyAmJiB0aGlz
Lm9wdGlvbnMubW9kdWxlTmFtZTsKKworICAgIHdhbGtlci52aXNpdChhc3QsIGZ1bmN0aW9uIChu
b2RlKSB7CisgICAgICBpZiAoIXZhbGlkYXRlKG5vZGUpKSB7CisgICAgICAgIHJldHVybjsKKyAg
ICAgIH0KKworICAgICAgYXNzZXJ0SGVscGVyKG1vZHVsZU5hbWUsIG5vZGUpOworICAgIH0pOwor
CisgICAgcmV0dXJuIGFzdDsKKyAgfTsKKworICBmdW5jdGlvbiBhc3NlcnRIZWxwZXIobW9kdWxl
TmFtZSwgbm9kZSkgeworICAgIHZhciBwYXJhbVZhbHVlID0gbm9kZS5wYXJhbXMubGVuZ3RoICYm
IG5vZGUucGFyYW1zWzBdLnZhbHVlOworCisgICAgaWYgKCFwYXJhbVZhbHVlKSB7CisgICAgICBy
ZXR1cm47CisgICAgfSBlbHNlIHsKKyAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdVc2lu
ZyB0aGUgYHt7dmlldyAic3RyaW5nIn19YCBoZWxwZXIgaXMgcmVtb3ZlZCBpbiAyLjAuICcgKyBf
ZW1iZXJUZW1wbGF0ZUNvbXBpbGVyU3lzdGVtQ2FsY3VsYXRlTG9jYXRpb25EaXNwbGF5LmRlZmF1
bHQobW9kdWxlTmFtZSwgbm9kZS5sb2MpLCBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5FTlYuX0VO
QUJMRV9MRUdBQ1lfVklFV19TVVBQT1JULCB7IGlkOiAndmlldy5oZWxwZXInLCB1bnRpbDogJzIu
MC4wJyB9KTsKKyAgICB9CisgIH0KKworICBmdW5jdGlvbiB2YWxpZGF0ZShub2RlKSB7CisgICAg
cmV0dXJuIChub2RlLnR5cGUgPT09ICdNdXN0YWNoZVN0YXRlbWVudCcgfHwgbm9kZS50eXBlID09
PSAnQmxvY2tTdGF0ZW1lbnQnKSAmJiBub2RlLnBhdGgucGFydHNbMF0gPT09ICd2aWV3JzsKKyAg
fQorCisgIGV4cG9ydHMuZGVmYXVsdCA9IEFzc2VydE5vVmlld0hlbHBlcjsKK30pOworZW5pZmVk
KCdlbWJlci10ZW1wbGF0ZS1jb21waWxlci9wbHVnaW5zL2RlcHJlY2F0ZS1yZW5kZXItbW9kZWwn
LCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvZGVidWcnLCAnZW1iZXItdGVtcGxhdGUtY29tcGls
ZXIvc3lzdGVtL2NhbGN1bGF0ZS1sb2NhdGlvbi1kaXNwbGF5J10sIGZ1bmN0aW9uIChleHBvcnRz
LCBfZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJUZW1wbGF0ZUNvbXBpbGVyU3lzdGVtQ2FsY3VsYXRl
TG9jYXRpb25EaXNwbGF5KSB7CisgICd1c2Ugc3RyaWN0JzsKKworICBleHBvcnRzLmRlZmF1bHQg
PSBEZXByZWNhdGVSZW5kZXJNb2RlbDsKKworICBmdW5jdGlvbiBEZXByZWNhdGVSZW5kZXJNb2Rl
bChvcHRpb25zKSB7CisgICAgdGhpcy5zeW50YXggPSBudWxsOworICAgIHRoaXMub3B0aW9ucyA9
IG9wdGlvbnM7CisgIH0KKworICBEZXByZWNhdGVSZW5kZXJNb2RlbC5wcm90b3R5cGUudHJhbnNm
b3JtID0gZnVuY3Rpb24gRGVwcmVjYXRlUmVuZGVyTW9kZWxfdHJhbnNmb3JtKGFzdCkgeworICAg
IHZhciBtb2R1bGVOYW1lID0gdGhpcy5vcHRpb25zLm1vZHVsZU5hbWU7CisgICAgdmFyIHdhbGtl
ciA9IG5ldyB0aGlzLnN5bnRheC5XYWxrZXIoKTsKKworICAgIHdhbGtlci52aXNpdChhc3QsIGZ1
bmN0aW9uIChub2RlKSB7CisgICAgICBpZiAoIXZhbGlkYXRlKG5vZGUpKSB7CisgICAgICAgIHJl
dHVybjsKKyAgICAgIH0KKworICAgICAgZWFjaChub2RlLnBhcmFtcywgZnVuY3Rpb24gKHBhcmFt
KSB7CisgICAgICAgIGlmIChwYXJhbS50eXBlICE9PSAnUGF0aEV4cHJlc3Npb24nKSB7CisgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5kZXBy
ZWNhdGUoZGVwcmVjYXRpb25NZXNzYWdlKG1vZHVsZU5hbWUsIG5vZGUsIHBhcmFtKSwgZmFsc2Us
IHsKKyAgICAgICAgICBpZDogJ2VtYmVyLXRlbXBsYXRlLWNvbXBpbGVyLmRlcHJlY2F0ZS1yZW5k
ZXItbW9kZWwnLAorICAgICAgICAgIHVudGlsOiAnMy4wLjAnLAorICAgICAgICAgIHVybDogJ2h0
dHA6Ly9lbWJlcmpzLmNvbS9kZXByZWNhdGlvbnMvdjIueCN0b2NfbW9kZWwtcGFyYW0taW4tY29k
ZS1yZW5kZXItY29kZS1oZWxwZXInCisgICAgICAgIH0pOworICAgICAgfSk7CisgICAgfSk7CisK
KyAgICByZXR1cm4gYXN0OworICB9OworCisgIGZ1bmN0aW9uIHZhbGlkYXRlKG5vZGUpIHsKKyAg
ICByZXR1cm4gbm9kZS50eXBlID09PSAnTXVzdGFjaGVTdGF0ZW1lbnQnICYmIG5vZGUucGF0aC5v
cmlnaW5hbCA9PT0gJ3JlbmRlcicgJiYgbm9kZS5wYXJhbXMubGVuZ3RoID4gMTsKKyAgfQorCisg
IGZ1bmN0aW9uIGVhY2gobGlzdCwgY2FsbGJhY2spIHsKKyAgICBmb3IgKHZhciBpID0gMCwgbCA9
IGxpc3QubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CisgICAgICBjYWxsYmFjayhsaXN0W2ldKTsKKyAg
ICB9CisgIH0KKworICBmdW5jdGlvbiBkZXByZWNhdGlvbk1lc3NhZ2UobW9kdWxlTmFtZSwgbm9k
ZSwgcGFyYW0pIHsKKyAgICB2YXIgc291cmNlSW5mb3JtYXRpb24gPSBfZW1iZXJUZW1wbGF0ZUNv
bXBpbGVyU3lzdGVtQ2FsY3VsYXRlTG9jYXRpb25EaXNwbGF5LmRlZmF1bHQobW9kdWxlTmFtZSwg
bm9kZS5sb2MpOworICAgIHZhciBjb21wb25lbnROYW1lID0gbm9kZS5wYXJhbXNbMF0ub3JpZ2lu
YWw7CisgICAgdmFyIG1vZGVsTmFtZSA9IHBhcmFtLm9yaWdpbmFsOworICAgIHZhciBvcmlnaW5h
bCA9ICd7e3JlbmRlciAiJyArIGNvbXBvbmVudE5hbWUgKyAnIiAnICsgbW9kZWxOYW1lICsgJ319
JzsKKyAgICB2YXIgcHJlZmVycmVkID0gJ3t7JyArIGNvbXBvbmVudE5hbWUgKyAnIG1vZGVsPScg
KyBtb2RlbE5hbWUgKyAnfX0nOworCisgICAgcmV0dXJuICdQbGVhc2UgcmVmYWN0b3IgYCcgKyBv
cmlnaW5hbCArICdgIHRvIGEgY29tcG9uZW50IGFuZCBpbnZva2UgdmlhJyArICgnIGAnICsgcHJl
ZmVycmVkICsgJ2AuICcgKyBzb3VyY2VJbmZvcm1hdGlvbik7CisgIH0KK30pOworZW5pZmVkKCdl
bWJlci10ZW1wbGF0ZS1jb21waWxlci9wbHVnaW5zL3ByZXZlbnQtcmVuZGVyLWJsb2NrJywgWydl
eHBvcnRzJywgJ2VtYmVyLW1ldGFsL2Vycm9yJywgJ2VtYmVyLXRlbXBsYXRlLWNvbXBpbGVyL3N5
c3RlbS9jYWxjdWxhdGUtbG9jYXRpb24tZGlzcGxheSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2Vt
YmVyTWV0YWxFcnJvciwgX2VtYmVyVGVtcGxhdGVDb21waWxlclN5c3RlbUNhbGN1bGF0ZUxvY2F0
aW9uRGlzcGxheSkgeworICAndXNlIHN0cmljdCc7CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gUHJl
dmVudFJlbmRlckJsb2NrOworCisgIGZ1bmN0aW9uIFByZXZlbnRSZW5kZXJCbG9jayhvcHRpb25z
KSB7CisgICAgdGhpcy5zeW50YXggPSBudWxsOworICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7
CisgIH0KKworICBQcmV2ZW50UmVuZGVyQmxvY2sucHJvdG90eXBlLnRyYW5zZm9ybSA9IGZ1bmN0
aW9uIFByZXZlbnRSZW5kZXJCbG9ja190cmFuc2Zvcm0oYXN0KSB7CisgICAgdmFyIG1vZHVsZU5h
bWUgPSB0aGlzLm9wdGlvbnMubW9kdWxlTmFtZTsKKyAgICB2YXIgd2Fsa2VyID0gbmV3IHRoaXMu
c3ludGF4LldhbGtlcigpOworCisgICAgd2Fsa2VyLnZpc2l0KGFzdCwgZnVuY3Rpb24gKG5vZGUp
IHsKKyAgICAgIGlmICghdmFsaWRhdGUobm9kZSkpIHsKKyAgICAgICAgcmV0dXJuOworICAgICAg
fQorCisgICAgICB0aHJvdyBuZXcgX2VtYmVyTWV0YWxFcnJvci5kZWZhdWx0KGFzc2VydGlvbk1l
c3NhZ2UobW9kdWxlTmFtZSwgbm9kZSkpOworICAgIH0pOworCisgICAgcmV0dXJuIGFzdDsKKyAg
fTsKKworICBmdW5jdGlvbiB2YWxpZGF0ZShub2RlKSB7CisgICAgcmV0dXJuIG5vZGUudHlwZSA9
PT0gJ0Jsb2NrU3RhdGVtZW50JyAmJiBub2RlLnBhdGgub3JpZ2luYWwgPT09ICdyZW5kZXInOwor
ICB9CisKKyAgZnVuY3Rpb24gYXNzZXJ0aW9uTWVzc2FnZShtb2R1bGVOYW1lLCBub2RlKSB7Cisg
ICAgdmFyIHNvdXJjZUluZm9ybWF0aW9uID0gX2VtYmVyVGVtcGxhdGVDb21waWxlclN5c3RlbUNh
bGN1bGF0ZUxvY2F0aW9uRGlzcGxheS5kZWZhdWx0KG1vZHVsZU5hbWUsIG5vZGUubG9jKTsKKwor
ICAgIHJldHVybiAnVXNhZ2Ugb2YgYHJlbmRlcmAgaW4gYmxvY2sgZm9ybSBpcyB1bnN1cHBvcnRl
ZCAnICsgc291cmNlSW5mb3JtYXRpb24gKyAnLic7CisgIH0KK30pOworZW5pZmVkKCdlbWJlci10
ZW1wbGF0ZS1jb21waWxlci9wbHVnaW5zL3RyYW5zZm9ybS1hbmdsZS1icmFja2V0LWNvbXBvbmVu
dHMnLCBbJ2V4cG9ydHMnXSwgZnVuY3Rpb24gKGV4cG9ydHMpIHsKKyAgJ3VzZSBzdHJpY3QnOwor
CisgIGZ1bmN0aW9uIFRyYW5zZm9ybUFuZ2xlQnJhY2tldENvbXBvbmVudHMoKSB7CisgICAgLy8g
c2V0IGxhdGVyIHdpdGhpbiBIVE1MQmFycyB0byB0aGUgc3ludGF4IHBhY2thZ2UKKyAgICB0aGlz
LnN5bnRheCA9IG51bGw7CisgIH0KKworICAvKioKKyAgICBAcHJpdmF0ZQorICAgIEBtZXRob2Qg
dHJhbnNmb3JtCisgICAgQHBhcmFtIHtBU1R9IGFzdCBUaGUgQVNUIHRvIGJlIHRyYW5zZm9ybWVk
LgorICAqLworICBUcmFuc2Zvcm1BbmdsZUJyYWNrZXRDb21wb25lbnRzLnByb3RvdHlwZS50cmFu
c2Zvcm0gPSBmdW5jdGlvbiBUcmFuc2Zvcm1BbmdsZUJyYWNrZXRDb21wb25lbnRzX3RyYW5zZm9y
bShhc3QpIHsKKyAgICB2YXIgd2Fsa2VyID0gbmV3IHRoaXMuc3ludGF4LldhbGtlcigpOworCisg
ICAgd2Fsa2VyLnZpc2l0KGFzdCwgZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAgIGlmICghdmFsaWRh
dGUobm9kZSkpIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorCisgICAgICBub2RlLnRhZyA9
ICc8JyArIG5vZGUudGFnICsgJz4nOworICAgIH0pOworCisgICAgcmV0dXJuIGFzdDsKKyAgfTsK
KworICBmdW5jdGlvbiB2YWxpZGF0ZShub2RlKSB7CisgICAgcmV0dXJuIG5vZGUudHlwZSA9PT0g
J0NvbXBvbmVudE5vZGUnOworICB9CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gVHJhbnNmb3JtQW5n
bGVCcmFja2V0Q29tcG9uZW50czsKK30pOworZW5pZmVkKCdlbWJlci10ZW1wbGF0ZS1jb21waWxl
ci9wbHVnaW5zL3RyYW5zZm9ybS1jbG9zdXJlLWNvbXBvbmVudC1hdHRycy1pbnRvLW11dCcsIFsn
ZXhwb3J0cyddLCBmdW5jdGlvbiAoZXhwb3J0cykgeworICAndXNlIHN0cmljdCc7CisKKyAgZnVu
Y3Rpb24gVHJhbnNmb3JtQ2xvc3VyZUNvbXBvbmVudEF0dHJzSW50b011dCgpIHsKKyAgICAvLyBz
ZXQgbGF0ZXIgd2l0aGluIEhUTUxCYXJzIHRvIHRoZSBzeW50YXggcGFja2FnZQorICAgIHRoaXMu
c3ludGF4ID0gbnVsbDsKKyAgfQorCisgIC8qKgorICAgIEBwcml2YXRlCisgICAgQG1ldGhvZCB0
cmFuc2Zvcm0KKyAgICBAcGFyYW0ge0FTVH0gYXN0IFRoZSBBU1QgdG8gYmUgdHJhbnNmb3JtZWQu
CisgICovCisgIFRyYW5zZm9ybUNsb3N1cmVDb21wb25lbnRBdHRyc0ludG9NdXQucHJvdG90eXBl
LnRyYW5zZm9ybSA9IGZ1bmN0aW9uIFRyYW5zZm9ybUNsb3N1cmVDb21wb25lbnRBdHRyc0ludG9N
dXRfdHJhbnNmb3JtKGFzdCkgeworICAgIHZhciBiID0gdGhpcy5zeW50YXguYnVpbGRlcnM7CisK
KyAgICB0aGlzLnN5bnRheC50cmF2ZXJzZShhc3QsIHsKKyAgICAgIFN1YkV4cHJlc3Npb246IGZ1
bmN0aW9uIChub2RlKSB7CisgICAgICAgIGlmIChpc0NvbXBvbmVudENsb3N1cmUobm9kZSkpIHsK
KyAgICAgICAgICBtdXRQYXJhbWV0ZXJzKGIsIG5vZGUpOworICAgICAgICB9CisgICAgICB9Cisg
ICAgfSk7CisKKyAgICByZXR1cm4gYXN0OworICB9OworCisgIGZ1bmN0aW9uIGlzQ29tcG9uZW50
Q2xvc3VyZShub2RlKSB7CisgICAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ1N1YkV4cHJlc3Npb24n
ICYmIG5vZGUucGF0aC5vcmlnaW5hbCA9PT0gJ2NvbXBvbmVudCc7CisgIH0KKworICBmdW5jdGlv
biBtdXRQYXJhbWV0ZXJzKGJ1aWxkZXIsIG5vZGUpIHsKKyAgICBmb3IgKHZhciBpID0gMTsgaSA8
IG5vZGUucGFyYW1zLmxlbmd0aDsgaSsrKSB7CisgICAgICBpZiAobm9kZS5wYXJhbXNbaV0udHlw
ZSA9PT0gJ1BhdGhFeHByZXNzaW9uJykgeworICAgICAgICBub2RlLnBhcmFtc1tpXSA9IGJ1aWxk
ZXIuc2V4cHIoYnVpbGRlci5wYXRoKCdAbXV0JyksIFtub2RlLnBhcmFtc1tpXV0pOworICAgICAg
fQorICAgIH0KKworICAgIGVhY2gobm9kZS5oYXNoLnBhaXJzLCBmdW5jdGlvbiAocGFpcikgewor
ICAgICAgdmFyIHZhbHVlID0gcGFpci52YWx1ZTsKKworICAgICAgaWYgKHZhbHVlLnR5cGUgPT09
ICdQYXRoRXhwcmVzc2lvbicpIHsKKyAgICAgICAgcGFpci52YWx1ZSA9IGJ1aWxkZXIuc2V4cHIo
YnVpbGRlci5wYXRoKCdAbXV0JyksIFtwYWlyLnZhbHVlXSk7CisgICAgICB9CisgICAgfSk7Cisg
IH0KKworICBmdW5jdGlvbiBlYWNoKGxpc3QsIGNhbGxiYWNrKSB7CisgICAgZm9yICh2YXIgaSA9
IDAsIGwgPSBsaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykgeworICAgICAgY2FsbGJhY2sobGlzdFtp
XSk7CisgICAgfQorICB9CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gVHJhbnNmb3JtQ2xvc3VyZUNv
bXBvbmVudEF0dHJzSW50b011dDsKK30pOworZW5pZmVkKCdlbWJlci10ZW1wbGF0ZS1jb21waWxl
ci9wbHVnaW5zL3RyYW5zZm9ybS1jb21wb25lbnQtYXR0cnMtaW50by1tdXQnLCBbJ2V4cG9ydHMn
XSwgZnVuY3Rpb24gKGV4cG9ydHMpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIGZ1bmN0aW9uIFRy
YW5zZm9ybUNvbXBvbmVudEF0dHJzSW50b011dCgpIHsKKyAgICAvLyBzZXQgbGF0ZXIgd2l0aGlu
IEhUTUxCYXJzIHRvIHRoZSBzeW50YXggcGFja2FnZQorICAgIHRoaXMuc3ludGF4ID0gbnVsbDsK
KyAgfQorCisgIC8qKgorICAgIEBwcml2YXRlCisgICAgQG1ldGhvZCB0cmFuc2Zvcm0KKyAgICBA
cGFyYW0ge0FTVH0gYXN0IFRoZSBBU1QgdG8gYmUgdHJhbnNmb3JtZWQuCisgICovCisgIFRyYW5z
Zm9ybUNvbXBvbmVudEF0dHJzSW50b011dC5wcm90b3R5cGUudHJhbnNmb3JtID0gZnVuY3Rpb24g
VHJhbnNmb3JtQ29tcG9uZW50QXR0cnNJbnRvTXV0X3RyYW5zZm9ybShhc3QpIHsKKyAgICB2YXIg
YiA9IHRoaXMuc3ludGF4LmJ1aWxkZXJzOworICAgIHZhciB3YWxrZXIgPSBuZXcgdGhpcy5zeW50
YXguV2Fsa2VyKCk7CisKKyAgICB3YWxrZXIudmlzaXQoYXN0LCBmdW5jdGlvbiAobm9kZSkgewor
ICAgICAgaWYgKCF2YWxpZGF0ZShub2RlKSkgeworICAgICAgICByZXR1cm47CisgICAgICB9CisK
KyAgICAgIGVhY2gobm9kZS5oYXNoLnBhaXJzLCBmdW5jdGlvbiAocGFpcikgeworICAgICAgICB2
YXIgdmFsdWUgPSBwYWlyLnZhbHVlOworCisgICAgICAgIGlmICh2YWx1ZS50eXBlID09PSAnUGF0
aEV4cHJlc3Npb24nKSB7CisgICAgICAgICAgcGFpci52YWx1ZSA9IGIuc2V4cHIoYi5wYXRoKCdA
bXV0JyksIFtwYWlyLnZhbHVlXSk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0pOworCisg
ICAgcmV0dXJuIGFzdDsKKyAgfTsKKworICBmdW5jdGlvbiB2YWxpZGF0ZShub2RlKSB7CisgICAg
cmV0dXJuIG5vZGUudHlwZSA9PT0gJ0Jsb2NrU3RhdGVtZW50JyB8fCBub2RlLnR5cGUgPT09ICdN
dXN0YWNoZVN0YXRlbWVudCc7CisgIH0KKworICBmdW5jdGlvbiBlYWNoKGxpc3QsIGNhbGxiYWNr
KSB7CisgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBsaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykgewor
ICAgICAgY2FsbGJhY2sobGlzdFtpXSk7CisgICAgfQorICB9CisKKyAgZXhwb3J0cy5kZWZhdWx0
ID0gVHJhbnNmb3JtQ29tcG9uZW50QXR0cnNJbnRvTXV0OworfSk7CitlbmlmZWQoJ2VtYmVyLXRl
bXBsYXRlLWNvbXBpbGVyL3BsdWdpbnMvdHJhbnNmb3JtLWNvbXBvbmVudC1jdXJseS10by1yZWFk
b25seScsIFsnZXhwb3J0cyddLCBmdW5jdGlvbiAoZXhwb3J0cykgeworICAndXNlIHN0cmljdCc7
CisKKyAgZnVuY3Rpb24gVHJhbnNmb3JtQ29tcG9uZW50Q3VybHlUb1JlYWRvbmx5KCkgeworICAg
IC8vIHNldCBsYXRlciB3aXRoaW4gSFRNTEJhcnMgdG8gdGhlIHN5bnRheCBwYWNrYWdlCisgICAg
dGhpcy5zeW50YXggPSBudWxsOworICB9CisKKyAgLyoqCisgICAgQHByaXZhdGUKKyAgICBAbWV0
aG9kIHRyYW5zZm9ybQorICAgIEBwYXJhbSB7QVNUfSBhc3QgVGhlIEFTVCB0byBiZSB0cmFuc2Zv
cm1lZC4KKyAgKi8KKyAgVHJhbnNmb3JtQ29tcG9uZW50Q3VybHlUb1JlYWRvbmx5LnByb3RvdHlw
ZS50cmFuc2Zvcm0gPSBmdW5jdGlvbiBUcmFuc2Zvcm1Db21wb25ldG5DdXJseVRvUmVhZG9ubHlf
dHJhbnNmb3JtKGFzdCkgeworICAgIHZhciBiID0gdGhpcy5zeW50YXguYnVpbGRlcnM7CisgICAg
dmFyIHdhbGtlciA9IG5ldyB0aGlzLnN5bnRheC5XYWxrZXIoKTsKKworICAgIHdhbGtlci52aXNp
dChhc3QsIGZ1bmN0aW9uIChub2RlKSB7CisgICAgICBpZiAoIXZhbGlkYXRlKG5vZGUpKSB7Cisg
ICAgICAgIHJldHVybjsKKyAgICAgIH0KKworICAgICAgZWFjaChub2RlLmF0dHJpYnV0ZXMsIGZ1
bmN0aW9uIChhdHRyKSB7CisgICAgICAgIGlmIChhdHRyLnZhbHVlLnR5cGUgIT09ICdNdXN0YWNo
ZVN0YXRlbWVudCcpIHsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGF0dHIudmFsdWUucGFyYW1zLmxlbmd0aCB8fCBhdHRyLnZhbHVlLmhhc2gucGFpcnMubGVuZ3Ro
KSB7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXR0ci52YWx1ZSA9
IGIubXVzdGFjaGUoYi5wYXRoKCdyZWFkb25seScpLCBbYXR0ci52YWx1ZS5wYXRoXSwgbnVsbCwg
IWF0dHIudmFsdWUuZXNjYXBlKTsKKyAgICAgIH0pOworICAgIH0pOworCisgICAgcmV0dXJuIGFz
dDsKKyAgfTsKKworICBmdW5jdGlvbiB2YWxpZGF0ZShub2RlKSB7CisgICAgcmV0dXJuIG5vZGUu
dHlwZSA9PT0gJ0NvbXBvbmVudE5vZGUnOworICB9CisKKyAgZnVuY3Rpb24gZWFjaChsaXN0LCBj
YWxsYmFjaykgeworICAgIGZvciAodmFyIGkgPSAwLCBsID0gbGlzdC5sZW5ndGg7IGkgPCBsOyBp
KyspIHsKKyAgICAgIGNhbGxiYWNrKGxpc3RbaV0pOworICAgIH0KKyAgfQorCisgIGV4cG9ydHMu
ZGVmYXVsdCA9IFRyYW5zZm9ybUNvbXBvbmVudEN1cmx5VG9SZWFkb25seTsKK30pOworZW5pZmVk
KCdlbWJlci10ZW1wbGF0ZS1jb21waWxlci9wbHVnaW5zL3RyYW5zZm9ybS1pbmxpbmUtbGluay10
bycsIFsnZXhwb3J0cyddLCBmdW5jdGlvbiAoZXhwb3J0cykgeworICAndXNlIHN0cmljdCc7CisK
KyAgZXhwb3J0cy5kZWZhdWx0ID0gVHJhbnNmb3JtSW5saW5lTGlua1RvOworCisgIGZ1bmN0aW9u
IFRyYW5zZm9ybUlubGluZUxpbmtUbyhvcHRpb25zKSB7CisgICAgdGhpcy5vcHRpb25zID0gb3B0
aW9uczsKKyAgICB0aGlzLnN5bnRheCA9IG51bGw7CisgIH0KKworICBUcmFuc2Zvcm1JbmxpbmVM
aW5rVG8ucHJvdG90eXBlLnRyYW5zZm9ybSA9IGZ1bmN0aW9uIFRyYW5zZm9ybUlubGluZUxpbmtU
b190cmFuc2Zvcm0oYXN0KSB7CisgICAgdmFyIF9zeW50YXggPSB0aGlzLnN5bnRheDsKKyAgICB2
YXIgdHJhdmVyc2UgPSBfc3ludGF4LnRyYXZlcnNlOworICAgIHZhciBiID0gX3N5bnRheC5idWls
ZGVyczsKKworICAgIGZ1bmN0aW9uIGJ1aWxkUHJvZ3JhbShjb250ZW50LCBsb2MpIHsKKyAgICAg
IHJldHVybiBiLnByb2dyYW0oW2J1aWxkU3RhdGVtZW50KGNvbnRlbnQsIGxvYyldLCBudWxsLCBs
b2MpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGJ1aWxkU3RhdGVtZW50KGNvbnRlbnQsIGxvYykg
eworICAgICAgc3dpdGNoIChjb250ZW50LnR5cGUpIHsKKyAgICAgICAgY2FzZSAnUGF0aEV4cHJl
c3Npb24nOgorICAgICAgICAgIHJldHVybiBiLm11c3RhY2hlKGNvbnRlbnQsIG51bGwsIG51bGws
IG51bGwsIGxvYyk7CisKKyAgICAgICAgY2FzZSAnU3ViRXhwcmVzc2lvbic6CisgICAgICAgICAg
cmV0dXJuIGIubXVzdGFjaGUoY29udGVudC5wYXRoLCBjb250ZW50LnBhcmFtcywgY29udGVudC5o
YXNoLCBudWxsLCBsb2MpOworCisgICAgICAgIC8vIFRoZSBkZWZhdWx0IGNhc2UgaGFuZGxlcyBs
aXRlcmFscy4KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICByZXR1cm4gYi50ZXh0KCcnICsg
Y29udGVudC52YWx1ZSwgbG9jKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiB1bnNh
ZmVIdG1sKGV4cHIpIHsKKyAgICAgIHJldHVybiBiLnNleHByKCctaHRtbC1zYWZlJywgW2V4cHJd
KTsKKyAgICB9CisKKyAgICB0cmF2ZXJzZShhc3QsIHsKKyAgICAgIE11c3RhY2hlU3RhdGVtZW50
OiBmdW5jdGlvbiAobm9kZSkgeworICAgICAgICBpZiAobm9kZS5wYXRoLm9yaWdpbmFsID09PSAn
bGluay10bycpIHsKKyAgICAgICAgICB2YXIgY29udGVudCA9IG5vZGUuZXNjYXBlZCA/IG5vZGUu
cGFyYW1zWzBdIDogdW5zYWZlSHRtbChub2RlLnBhcmFtc1swXSk7CisgICAgICAgICAgcmV0dXJu
IGIuYmxvY2soJ2xpbmstdG8nLCBub2RlLnBhcmFtcy5zbGljZSgxKSwgbm9kZS5oYXNoLCBidWls
ZFByb2dyYW0oY29udGVudCwgbm9kZS5sb2MpLCBudWxsLCBub2RlLmxvYyk7CisgICAgICAgIH0K
KyAgICAgIH0KKyAgICB9KTsKKworICAgIHJldHVybiBhc3Q7CisgIH07Cit9KTsKK2VuaWZlZCgn
ZW1iZXItdGVtcGxhdGUtY29tcGlsZXIvcGx1Z2lucy90cmFuc2Zvcm0taW5wdXQtb24tdG8tb25F
dmVudCcsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9kZWJ1ZycsICdlbWJlci10ZW1wbGF0ZS1j
b21waWxlci9zeXN0ZW0vY2FsY3VsYXRlLWxvY2F0aW9uLWRpc3BsYXknXSwgZnVuY3Rpb24gKGV4
cG9ydHMsIF9lbWJlck1ldGFsRGVidWcsIF9lbWJlclRlbXBsYXRlQ29tcGlsZXJTeXN0ZW1DYWxj
dWxhdGVMb2NhdGlvbkRpc3BsYXkpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIC8qKgorICAgQG1v
ZHVsZSBlbWJlcgorICAgQHN1Ym1vZHVsZSBlbWJlci1odG1sYmFycworICAqLworCisgIC8qKgor
ICAgIEFuIEhUTUxCYXJzIEFTVCB0cmFuc2Zvcm1hdGlvbiB0aGF0IHJlcGxhY2VzIGFsbCBpbnN0
YW5jZXMgb2YKKyAgCisgICAgYGBgaGFuZGxlYmFycworICAge3tpbnB1dCBvbj0iZW50ZXIiIGFj
dGlvbj0iZG9TdHVmZiJ9fQorICAge3tpbnB1dCBvbj0ia2V5LXByZXNzIiBhY3Rpb249ImRvU3R1
ZmYifX0KKyAgICBgYGAKKyAgCisgICAgd2l0aAorICAKKyAgICBgYGBoYW5kbGViYXJzCisgICB7
e2lucHV0IGVudGVyPSJkb1N0dWZmIn19CisgICB7e2lucHV0IGtleS1wcmVzcz0iZG9TdHVmZiJ9
fQorICAgIGBgYAorICAKKyAgICBAcHJpdmF0ZQorICAgIEBjbGFzcyBUcmFuc2Zvcm1JbnB1dE9u
VG9PbkV2ZW50CisgICovCisgIGZ1bmN0aW9uIFRyYW5zZm9ybUlucHV0T25Ub09uRXZlbnQoKSB7
CisgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDAgfHwgYXJndW1lbnRzWzBd
ID09PSB1bmRlZmluZWQgPyB7fSA6IGFyZ3VtZW50c1swXTsKKworICAgIC8vIHNldCBsYXRlciB3
aXRoaW4gSFRNTEJhcnMgdG8gdGhlIHN5bnRheCBwYWNrYWdlCisgICAgdGhpcy5zeW50YXggPSBu
dWxsOworICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7CisgIH0KKworICAvKioKKyAgICBAcHJp
dmF0ZQorICAgIEBtZXRob2QgdHJhbnNmb3JtCisgICAgQHBhcmFtIHtBU1R9IGFzdCBUaGUgQVNU
IHRvIGJlIHRyYW5zZm9ybWVkLgorICAqLworICBUcmFuc2Zvcm1JbnB1dE9uVG9PbkV2ZW50LnBy
b3RvdHlwZS50cmFuc2Zvcm0gPSBmdW5jdGlvbiBUcmFuc2Zvcm1JbnB1dE9uVG9PbkV2ZW50X3Ry
YW5zZm9ybShhc3QpIHsKKyAgICB2YXIgcGx1Z2luQ29udGV4dCA9IHRoaXM7CisgICAgdmFyIGIg
PSBwbHVnaW5Db250ZXh0LnN5bnRheC5idWlsZGVyczsKKyAgICB2YXIgd2Fsa2VyID0gbmV3IHBs
dWdpbkNvbnRleHQuc3ludGF4LldhbGtlcigpOworICAgIHZhciBtb2R1bGVOYW1lID0gcGx1Z2lu
Q29udGV4dC5vcHRpb25zLm1vZHVsZU5hbWU7CisKKyAgICB3YWxrZXIudmlzaXQoYXN0LCBmdW5j
dGlvbiAobm9kZSkgeworICAgICAgaWYgKHBsdWdpbkNvbnRleHQudmFsaWRhdGUobm9kZSkpIHsK
KyAgICAgICAgdmFyIGFjdGlvbiA9IGhhc2hQYWlyRm9yS2V5KG5vZGUuaGFzaCwgJ2FjdGlvbicp
OworICAgICAgICB2YXIgb24gPSBoYXNoUGFpckZvcktleShub2RlLmhhc2gsICdvbicpOworICAg
ICAgICB2YXIgb25FdmVudCA9IGhhc2hQYWlyRm9yS2V5KG5vZGUuaGFzaCwgJ29uRXZlbnQnKTsK
KyAgICAgICAgdmFyIG5vcm1hbGl6ZWRPbiA9IG9uIHx8IG9uRXZlbnQ7CisgICAgICAgIHZhciBt
b2R1bGVJbmZvID0gX2VtYmVyVGVtcGxhdGVDb21waWxlclN5c3RlbUNhbGN1bGF0ZUxvY2F0aW9u
RGlzcGxheS5kZWZhdWx0KG1vZHVsZU5hbWUsIG5vZGUubG9jKTsKKworICAgICAgICBpZiAobm9y
bWFsaXplZE9uICYmIG5vcm1hbGl6ZWRPbi52YWx1ZS50eXBlICE9PSAnU3RyaW5nTGl0ZXJhbCcp
IHsKKyAgICAgICAgICBfZW1iZXJNZXRhbERlYnVnLmRlcHJlY2F0ZSgnVXNpbmcgYSBkeW5hbWlj
IHZhbHVlIGZvciBcJyN7bm9ybWFsaXplZE9uLmtleX09XCcgd2l0aCB0aGUgXCd7e2lucHV0fX1c
JyBoZWxwZXIgJyArIG1vZHVsZUluZm8gKyAnaXMgZGVwcmVjYXRlZC4nLCBmYWxzZSwgeyBpZDog
J2VtYmVyLXRlbXBsYXRlLWNvbXBpbGVyLnRyYW5zZm9ybS1pbnB1dC1vbi10by1vbkV2ZW50LmR5
bmFtaWMtdmFsdWUnLCB1bnRpbDogJzMuMC4wJyB9KTsKKworICAgICAgICAgIG5vcm1hbGl6ZWRP
bi5rZXkgPSAnb25FdmVudCc7CisgICAgICAgICAgcmV0dXJuOyAvLyBleGl0IGVhcmx5LCBhcyB3
ZSBjYW5ub3QgdHJhbnNmb3JtIGZ1cnRoZXIKKyAgICAgICAgfQorCisgICAgICAgIHJlbW92ZUZy
b21IYXNoKG5vZGUuaGFzaCwgbm9ybWFsaXplZE9uKTsKKyAgICAgICAgcmVtb3ZlRnJvbUhhc2go
bm9kZS5oYXNoLCBhY3Rpb24pOworCisgICAgICAgIGlmICghYWN0aW9uKSB7CisgICAgICAgICAg
X2VtYmVyTWV0YWxEZWJ1Zy5kZXByZWNhdGUoJ1VzaW5nIFwne3tpbnB1dCAnICsgbm9ybWFsaXpl
ZE9uLmtleSArICc9IicgKyBub3JtYWxpemVkT24udmFsdWUudmFsdWUgKyAnIiAuLi59fVwnIHdp
dGhvdXQgc3BlY2lmeWluZyBhbiBhY3Rpb24gJyArIG1vZHVsZUluZm8gKyAnd2lsbCBkbyBub3Ro
aW5nLicsIGZhbHNlLCB7IGlkOiAnZW1iZXItdGVtcGxhdGUtY29tcGlsZXIudHJhbnNmb3JtLWlu
cHV0LW9uLXRvLW9uRXZlbnQubm8tYWN0aW9uJywgdW50aWw6ICczLjAuMCcgfSk7CisKKyAgICAg
ICAgICByZXR1cm47IC8vIGV4aXQgZWFybHksIGlmIG5vIGFjdGlvbiB3YXMgYXZhaWxhYmxlIHRo
ZXJlIGlzIG5vdGhpbmcgdG8gZG8KKyAgICAgICAgfQorCisgICAgICAgIHZhciBzcGVjaWZpZWRP
biA9IG5vcm1hbGl6ZWRPbiA/IG5vcm1hbGl6ZWRPbi5rZXkgKyAnPSInICsgbm9ybWFsaXplZE9u
LnZhbHVlLnZhbHVlICsgJyIgJyA6ICcnOworICAgICAgICBpZiAobm9ybWFsaXplZE9uICYmIG5v
cm1hbGl6ZWRPbi52YWx1ZS52YWx1ZSA9PT0gJ2tleVByZXNzJykgeworICAgICAgICAgIC8vIHVz
aW5nIGBrZXlQcmVzc2AgaW4gdGhlIHJvb3Qgb2YgdGhlIGNvbXBvbmVudCB3aWxsCisgICAgICAg
ICAgLy8gY2xvYmJlciB0aGUga2V5UHJlc3MgZXZlbnQgaGFuZGxlcgorICAgICAgICAgIG5vcm1h
bGl6ZWRPbi52YWx1ZS52YWx1ZSA9ICdrZXktcHJlc3MnOworICAgICAgICB9CisKKyAgICAgICAg
dmFyIGV4cGVjdGVkID0gKG5vcm1hbGl6ZWRPbiA/IG5vcm1hbGl6ZWRPbi52YWx1ZS52YWx1ZSA6
ICdlbnRlcicpICsgJz0iJyArIGFjdGlvbi52YWx1ZS5vcmlnaW5hbCArICciJzsKKworICAgICAg
ICBfZW1iZXJNZXRhbERlYnVnLmRlcHJlY2F0ZSgnVXNpbmcgXCd7e2lucHV0ICcgKyBzcGVjaWZp
ZWRPbiArICdhY3Rpb249IicgKyBhY3Rpb24udmFsdWUub3JpZ2luYWwgKyAnIn19XCcgJyArIG1v
ZHVsZUluZm8gKyAnaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBcJ3t7aW5wdXQgJyArIGV4cGVj
dGVkICsgJ319XCcgaW5zdGVhZC4nLCBmYWxzZSwgeyBpZDogJ2VtYmVyLXRlbXBsYXRlLWNvbXBp
bGVyLnRyYW5zZm9ybS1pbnB1dC1vbi10by1vbkV2ZW50Lm5vcm1hbGl6ZWQtb24nLCB1bnRpbDog
JzMuMC4wJyB9KTsKKyAgICAgICAgaWYgKCFub3JtYWxpemVkT24pIHsKKyAgICAgICAgICBub3Jt
YWxpemVkT24gPSBiLnBhaXIoJ29uRXZlbnQnLCBiLnN0cmluZygnZW50ZXInKSk7CisgICAgICAg
IH0KKworICAgICAgICBub2RlLmhhc2gucGFpcnMucHVzaChiLnBhaXIobm9ybWFsaXplZE9uLnZh
bHVlLnZhbHVlLCBhY3Rpb24udmFsdWUpKTsKKyAgICAgIH0KKyAgICB9KTsKKworICAgIHJldHVy
biBhc3Q7CisgIH07CisKKyAgVHJhbnNmb3JtSW5wdXRPblRvT25FdmVudC5wcm90b3R5cGUudmFs
aWRhdGUgPSBmdW5jdGlvbiBUcmFuc2Zvcm1XaXRoQXNUb0hhc2hfdmFsaWRhdGUobm9kZSkgewor
ICAgIHJldHVybiBub2RlLnR5cGUgPT09ICdNdXN0YWNoZVN0YXRlbWVudCcgJiYgbm9kZS5wYXRo
Lm9yaWdpbmFsID09PSAnaW5wdXQnICYmIChoYXNoUGFpckZvcktleShub2RlLmhhc2gsICdhY3Rp
b24nKSB8fCBoYXNoUGFpckZvcktleShub2RlLmhhc2gsICdvbicpIHx8IGhhc2hQYWlyRm9yS2V5
KG5vZGUuaGFzaCwgJ29uRXZlbnQnKSk7CisgIH07CisKKyAgZnVuY3Rpb24gaGFzaFBhaXJGb3JL
ZXkoaGFzaCwga2V5KSB7CisgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBoYXNoLnBhaXJzLmxlbmd0
aDsgaSA8IGw7IGkrKykgeworICAgICAgdmFyIHBhaXIgPSBoYXNoLnBhaXJzW2ldOworICAgICAg
aWYgKHBhaXIua2V5ID09PSBrZXkpIHsKKyAgICAgICAgcmV0dXJuIHBhaXI7CisgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgZnVuY3Rpb24gcmVtb3ZlRnJvbUhh
c2goaGFzaCwgcGFpclRvUmVtb3ZlKSB7CisgICAgdmFyIG5ld1BhaXJzID0gW107CisgICAgZm9y
ICh2YXIgaSA9IDAsIGwgPSBoYXNoLnBhaXJzLmxlbmd0aDsgaSA8IGw7IGkrKykgeworICAgICAg
dmFyIHBhaXIgPSBoYXNoLnBhaXJzW2ldOworCisgICAgICBpZiAocGFpciAhPT0gcGFpclRvUmVt
b3ZlKSB7CisgICAgICAgIG5ld1BhaXJzLnB1c2gocGFpcik7CisgICAgICB9CisgICAgfQorCisg
ICAgaGFzaC5wYWlycyA9IG5ld1BhaXJzOworICB9CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gVHJh
bnNmb3JtSW5wdXRPblRvT25FdmVudDsKK30pOworZW5pZmVkKCdlbWJlci10ZW1wbGF0ZS1jb21w
aWxlci9wbHVnaW5zL3RyYW5zZm9ybS1pdGVtLWNsYXNzJywgWydleHBvcnRzJ10sIGZ1bmN0aW9u
IChleHBvcnRzKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICBleHBvcnRzLmRlZmF1bHQgPSBUcmFu
c2Zvcm1JdGVtQ2xhc3M7CisKKyAgZnVuY3Rpb24gVHJhbnNmb3JtSXRlbUNsYXNzKCkgeworICAg
IHRoaXMuc3ludGF4ID0gbnVsbDsKKyAgfQorCisgIFRyYW5zZm9ybUl0ZW1DbGFzcy5wcm90b3R5
cGUudHJhbnNmb3JtID0gZnVuY3Rpb24gVHJhbnNmb3JtSXRlbUNsYXNzX3RyYW5zZm9ybShhc3Qp
IHsKKyAgICB2YXIgYiA9IHRoaXMuc3ludGF4LmJ1aWxkZXJzOworICAgIHZhciB3YWxrZXIgPSBu
ZXcgdGhpcy5zeW50YXguV2Fsa2VyKCk7CisKKyAgICB3YWxrZXIudmlzaXQoYXN0LCBmdW5jdGlv
biAobm9kZSkgeworICAgICAgaWYgKCF2YWxpZGF0ZShub2RlKSkgeworICAgICAgICByZXR1cm47
CisgICAgICB9CisKKyAgICAgIGVhY2gobm9kZS5oYXNoLnBhaXJzLCBmdW5jdGlvbiAocGFpcikg
eworICAgICAgICB2YXIga2V5ID0gcGFpci5rZXk7CisgICAgICAgIHZhciB2YWx1ZSA9IHBhaXIu
dmFsdWU7CisKKyAgICAgICAgaWYgKGtleSAhPT0gJ2l0ZW1DbGFzcycpIHsKKyAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHZhbHVlLnR5cGUgPT09ICdTdHJpbmdMaXRl
cmFsJykgeworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBwcm9w
TmFtZSA9IHZhbHVlLm9yaWdpbmFsOworICAgICAgICB2YXIgcGFyYW1zID0gW3ZhbHVlXTsKKyAg
ICAgICAgdmFyIHNleHByUGFyYW1zID0gW2Iuc3RyaW5nKHByb3BOYW1lKSwgYi5wYXRoKHByb3BO
YW1lKV07CisKKyAgICAgICAgcGFyYW1zLnB1c2goYi5zZXhwcihiLnN0cmluZygnLW5vcm1hbGl6
ZS1jbGFzcycpLCBzZXhwclBhcmFtcykpOworICAgICAgICB2YXIgc2V4cHIgPSBiLnNleHByKGIu
c3RyaW5nKCdpZicpLCBwYXJhbXMpOworCisgICAgICAgIHBhaXIudmFsdWUgPSBzZXhwcjsKKyAg
ICAgIH0pOworICAgIH0pOworCisgICAgcmV0dXJuIGFzdDsKKyAgfTsKKworICBmdW5jdGlvbiB2
YWxpZGF0ZShub2RlKSB7CisgICAgcmV0dXJuIChub2RlLnR5cGUgPT09ICdCbG9ja1N0YXRlbWVu
dCcgfHwgbm9kZS50eXBlID09PSAnTXVzdGFjaGVTdGF0ZW1lbnQnKSAmJiBub2RlLnBhdGgub3Jp
Z2luYWwgPT09ICdjb2xsZWN0aW9uJzsKKyAgfQorCisgIGZ1bmN0aW9uIGVhY2gobGlzdCwgY2Fs
bGJhY2spIHsKKyAgICBmb3IgKHZhciBpID0gMCwgbCA9IGxpc3QubGVuZ3RoOyBpIDwgbDsgaSsr
KSB7CisgICAgICBjYWxsYmFjayhsaXN0W2ldKTsKKyAgICB9CisgIH0KK30pOworZW5pZmVkKCdl
bWJlci10ZW1wbGF0ZS1jb21waWxlci9wbHVnaW5zL3RyYW5zZm9ybS1vbGQtYmluZGluZy1zeW50
YXgnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvZGVidWcnLCAnZW1iZXItdGVtcGxhdGUtY29t
cGlsZXIvc3lzdGVtL2NhbGN1bGF0ZS1sb2NhdGlvbi1kaXNwbGF5J10sIGZ1bmN0aW9uIChleHBv
cnRzLCBfZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJUZW1wbGF0ZUNvbXBpbGVyU3lzdGVtQ2FsY3Vs
YXRlTG9jYXRpb25EaXNwbGF5KSB7CisgICd1c2Ugc3RyaWN0JzsKKworICBleHBvcnRzLmRlZmF1
bHQgPSBUcmFuc2Zvcm1PbGRCaW5kaW5nU3ludGF4OworCisgIGZ1bmN0aW9uIFRyYW5zZm9ybU9s
ZEJpbmRpbmdTeW50YXgob3B0aW9ucykgeworICAgIHRoaXMuc3ludGF4ID0gbnVsbDsKKyAgICB0
aGlzLm9wdGlvbnMgPSBvcHRpb25zOworICB9CisKKyAgVHJhbnNmb3JtT2xkQmluZGluZ1N5bnRh
eC5wcm90b3R5cGUudHJhbnNmb3JtID0gZnVuY3Rpb24gVHJhbnNmb3JtT2xkQmluZGluZ1N5bnRh
eF90cmFuc2Zvcm0oYXN0KSB7CisgICAgdmFyIG1vZHVsZU5hbWUgPSB0aGlzLm9wdGlvbnMubW9k
dWxlTmFtZTsKKyAgICB2YXIgYiA9IHRoaXMuc3ludGF4LmJ1aWxkZXJzOworICAgIHZhciB3YWxr
ZXIgPSBuZXcgdGhpcy5zeW50YXguV2Fsa2VyKCk7CisKKyAgICB3YWxrZXIudmlzaXQoYXN0LCBm
dW5jdGlvbiAobm9kZSkgeworICAgICAgaWYgKCF2YWxpZGF0ZShub2RlKSkgeworICAgICAgICBy
ZXR1cm47CisgICAgICB9CisKKyAgICAgIGVhY2gobm9kZS5oYXNoLnBhaXJzLCBmdW5jdGlvbiAo
cGFpcikgeworICAgICAgICB2YXIga2V5ID0gcGFpci5rZXk7CisgICAgICAgIHZhciB2YWx1ZSA9
IHBhaXIudmFsdWU7CisKKyAgICAgICAgdmFyIHNvdXJjZUluZm9ybWF0aW9uID0gX2VtYmVyVGVt
cGxhdGVDb21waWxlclN5c3RlbUNhbGN1bGF0ZUxvY2F0aW9uRGlzcGxheS5kZWZhdWx0KG1vZHVs
ZU5hbWUsIHBhaXIubG9jKTsKKworICAgICAgICBpZiAoa2V5ID09PSAnY2xhc3NCaW5kaW5nJykg
eworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIF9lbWJlck1ldGFsRGVi
dWcuYXNzZXJ0KCdTZXR0aW5nIFwnYXR0cmlidXRlQmluZGluZ3NcJyB2aWEgdGVtcGxhdGUgaGVs
cGVycyBpcyBub3QgYWxsb3dlZCAnICsgc291cmNlSW5mb3JtYXRpb24sIGtleSAhPT0gJ2F0dHJp
YnV0ZUJpbmRpbmdzJyk7CisKKyAgICAgICAgaWYgKGtleS5zdWJzdHIoLTcpID09PSAnQmluZGlu
ZycpIHsKKyAgICAgICAgICB2YXIgbmV3S2V5ID0ga2V5LnNsaWNlKDAsIC03KTsKKworICAgICAg
ICAgIF9lbWJlck1ldGFsRGVidWcuZGVwcmVjYXRlKCdZb3VcJ3JlIHVzaW5nIGxlZ2FjeSBiaW5k
aW5nIHN5bnRheDogJyArIGtleSArICc9JyArIGV4cHJUb1N0cmluZyh2YWx1ZSkgKyAnICcgKyBz
b3VyY2VJbmZvcm1hdGlvbiArICcuIFBsZWFzZSByZXBsYWNlIHdpdGggJyArIG5ld0tleSArICc9
JyArIHZhbHVlLm9yaWdpbmFsLCBmYWxzZSwgeyBpZDogJ2VtYmVyLXRlbXBsYXRlLWNvbXBpbGVy
LnRyYW5zZm9ybS1vbGQtYmluZGluZy1zeW50YXgnLCB1bnRpbDogJzMuMC4wJyB9KTsKKworICAg
ICAgICAgIHBhaXIua2V5ID0gbmV3S2V5OworICAgICAgICAgIGlmICh2YWx1ZS50eXBlID09PSAn
U3RyaW5nTGl0ZXJhbCcpIHsKKyAgICAgICAgICAgIHBhaXIudmFsdWUgPSBiLnBhdGgodmFsdWUu
b3JpZ2luYWwpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSk7CisgICAgfSk7CisK
KyAgICByZXR1cm4gYXN0OworICB9OworCisgIGZ1bmN0aW9uIHZhbGlkYXRlKG5vZGUpIHsKKyAg
ICByZXR1cm4gbm9kZS50eXBlID09PSAnQmxvY2tTdGF0ZW1lbnQnIHx8IG5vZGUudHlwZSA9PT0g
J011c3RhY2hlU3RhdGVtZW50JzsKKyAgfQorCisgIGZ1bmN0aW9uIGVhY2gobGlzdCwgY2FsbGJh
Y2spIHsKKyAgICBmb3IgKHZhciBpID0gMCwgbCA9IGxpc3QubGVuZ3RoOyBpIDwgbDsgaSsrKSB7
CisgICAgICBjYWxsYmFjayhsaXN0W2ldKTsKKyAgICB9CisgIH0KKworICBmdW5jdGlvbiBleHBy
VG9TdHJpbmcoZXhwcikgeworICAgIHN3aXRjaCAoZXhwci50eXBlKSB7CisgICAgICBjYXNlICdT
dHJpbmdMaXRlcmFsJzoKKyAgICAgICAgcmV0dXJuICciJyArIGV4cHIub3JpZ2luYWwgKyAnIic7
CisgICAgICBjYXNlICdQYXRoRXhwcmVzc2lvbic6CisgICAgICAgIHJldHVybiBleHByLm9yaWdp
bmFsOworICAgIH0KKyAgfQorfSk7CitlbmlmZWQoJ2VtYmVyLXRlbXBsYXRlLWNvbXBpbGVyL3Bs
dWdpbnMvdHJhbnNmb3JtLW9sZC1jbGFzcy1iaW5kaW5nLXN5bnRheCcsIFsnZXhwb3J0cyddLCBm
dW5jdGlvbiAoZXhwb3J0cykgeworICAndXNlIHN0cmljdCc7CisKKyAgZXhwb3J0cy5kZWZhdWx0
ID0gVHJhbnNmb3JtT2xkQ2xhc3NCaW5kaW5nU3ludGF4OworCisgIGZ1bmN0aW9uIFRyYW5zZm9y
bU9sZENsYXNzQmluZGluZ1N5bnRheChvcHRpb25zKSB7CisgICAgdGhpcy5zeW50YXggPSBudWxs
OworICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7CisgIH0KKworICBUcmFuc2Zvcm1PbGRDbGFz
c0JpbmRpbmdTeW50YXgucHJvdG90eXBlLnRyYW5zZm9ybSA9IGZ1bmN0aW9uIFRyYW5zZm9ybU9s
ZENsYXNzQmluZGluZ1N5bnRheF90cmFuc2Zvcm0oYXN0KSB7CisgICAgdmFyIGIgPSB0aGlzLnN5
bnRheC5idWlsZGVyczsKKyAgICB2YXIgd2Fsa2VyID0gbmV3IHRoaXMuc3ludGF4LldhbGtlcigp
OworCisgICAgd2Fsa2VyLnZpc2l0KGFzdCwgZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAgIGlmICgh
dmFsaWRhdGUobm9kZSkpIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorCisgICAgICB2YXIg
YWxsT2ZUaGVNaWNyb3N5bnRheGVzID0gW107CisgICAgICB2YXIgYWxsT2ZUaGVNaWNyb3N5bnRh
eEluZGV4ZXMgPSBbXTsKKyAgICAgIHZhciBjbGFzc1BhaXIgPSB1bmRlZmluZWQ7CisKKyAgICAg
IGVhY2gobm9kZS5oYXNoLnBhaXJzLCBmdW5jdGlvbiAocGFpciwgaW5kZXgpIHsKKyAgICAgICAg
dmFyIGtleSA9IHBhaXIua2V5OworCisgICAgICAgIGlmIChrZXkgPT09ICdjbGFzc0JpbmRpbmcn
IHx8IGtleSA9PT0gJ2NsYXNzTmFtZUJpbmRpbmdzJykgeworICAgICAgICAgIGFsbE9mVGhlTWlj
cm9zeW50YXhJbmRleGVzLnB1c2goaW5kZXgpOworICAgICAgICAgIGFsbE9mVGhlTWljcm9zeW50
YXhlcy5wdXNoKHBhaXIpOworICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2NsYXNzJykgewor
ICAgICAgICAgIGNsYXNzUGFpciA9IHBhaXI7CisgICAgICAgIH0KKyAgICAgIH0pOworCisgICAg
ICBpZiAoYWxsT2ZUaGVNaWNyb3N5bnRheGVzLmxlbmd0aCA9PT0gMCkgeworICAgICAgICByZXR1
cm47CisgICAgICB9CisKKyAgICAgIHZhciBjbGFzc1ZhbHVlID0gW107CisKKyAgICAgIGlmIChj
bGFzc1BhaXIpIHsKKyAgICAgICAgY2xhc3NWYWx1ZS5wdXNoKGNsYXNzUGFpci52YWx1ZSk7Cisg
ICAgICAgIGNsYXNzVmFsdWUucHVzaChiLnN0cmluZygnICcpKTsKKyAgICAgIH0gZWxzZSB7Cisg
ICAgICAgIGNsYXNzUGFpciA9IGIucGFpcignY2xhc3MnLCBudWxsKTsKKyAgICAgICAgbm9kZS5o
YXNoLnBhaXJzLnB1c2goY2xhc3NQYWlyKTsKKyAgICAgIH0KKworICAgICAgZWFjaChhbGxPZlRo
ZU1pY3Jvc3ludGF4SW5kZXhlcywgZnVuY3Rpb24gKGluZGV4KSB7CisgICAgICAgIG5vZGUuaGFz
aC5wYWlycy5zcGxpY2UoaW5kZXgsIDEpOworICAgICAgfSk7CisKKyAgICAgIGVhY2goYWxsT2ZU
aGVNaWNyb3N5bnRheGVzLCBmdW5jdGlvbiAoX3JlZikgeworICAgICAgICB2YXIgdmFsdWUgPSBf
cmVmLnZhbHVlOworICAgICAgICB2YXIgbG9jID0gX3JlZi5sb2M7CisKKyAgICAgICAgdmFyIHNl
eHBycyA9IFtdOworICAgICAgICAvLyBUT0RPOiBhZGQgaGVscGZ1bCBkZXByZWNhdGlvbiB3aGVu
IGJvdGggYGNsYXNzTmFtZXNgIGFuZCBgY2xhc3NOYW1lQmluZGluZ3NgIGNhbgorICAgICAgICAv
LyBiZSByZW1vdmVkLgorCisgICAgICAgIGlmICh2YWx1ZS50eXBlID09PSAnU3RyaW5nTGl0ZXJh
bCcpIHsKKyAgICAgICAgICB2YXIgbWljcm9zeW50YXggPSBwYXJzZU1pY3Jvc3ludGF4KHZhbHVl
Lm9yaWdpbmFsKTsKKworICAgICAgICAgIGJ1aWxkU2V4cHJzKG1pY3Jvc3ludGF4LCBzZXhwcnMs
IGIpOworCisgICAgICAgICAgY2xhc3NWYWx1ZS5wdXNoLmFwcGx5KGNsYXNzVmFsdWUsIHNleHBy
cyk7CisgICAgICAgIH0KKyAgICAgIH0pOworCisgICAgICB2YXIgaGFzaCA9IGIuaGFzaCgpOwor
ICAgICAgY2xhc3NQYWlyLnZhbHVlID0gYi5zZXhwcihiLnN0cmluZygnY29uY2F0JyksIGNsYXNz
VmFsdWUsIGhhc2gpOworICAgIH0pOworCisgICAgcmV0dXJuIGFzdDsKKyAgfTsKKworICBmdW5j
dGlvbiBidWlsZFNleHBycyhtaWNyb3N5bnRheCwgc2V4cHJzLCBiKSB7CisgICAgZm9yICh2YXIg
aSA9IDAsIGwgPSBtaWNyb3N5bnRheC5sZW5ndGg7IGkgPCBsOyBpKyspIHsKKyAgICAgIHZhciBf
bWljcm9zeW50YXgkaSA9IG1pY3Jvc3ludGF4W2ldOworICAgICAgdmFyIHByb3BOYW1lID0gX21p
Y3Jvc3ludGF4JGlbMF07CisgICAgICB2YXIgYWN0aXZlQ2xhc3MgPSBfbWljcm9zeW50YXgkaVsx
XTsKKyAgICAgIHZhciBpbmFjdGl2ZUNsYXNzID0gX21pY3Jvc3ludGF4JGlbMl07CisKKyAgICAg
IHZhciBzZXhwciA9IHVuZGVmaW5lZDsKKworICAgICAgLy8gOm15LWNsYXNzLW5hbWUgbWljcm9z
eW50YXggZm9yIHN0YXRpYyB2YWx1ZXMKKyAgICAgIGlmIChwcm9wTmFtZSA9PT0gJycpIHsKKyAg
ICAgICAgc2V4cHIgPSBiLnN0cmluZyhhY3RpdmVDbGFzcyk7CisgICAgICB9IGVsc2UgeworICAg
ICAgICB2YXIgcGFyYW1zID0gW2IucGF0aChwcm9wTmFtZSldOworCisgICAgICAgIGlmIChhY3Rp
dmVDbGFzcykgeworICAgICAgICAgIHBhcmFtcy5wdXNoKGIuc3RyaW5nKGFjdGl2ZUNsYXNzKSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdmFyIHNleHByUGFyYW1zID0gW2Iuc3RyaW5n
KHByb3BOYW1lKSwgYi5wYXRoKHByb3BOYW1lKV07CisKKyAgICAgICAgICB2YXIgaGFzaCA9IGIu
aGFzaCgpOworICAgICAgICAgIGlmIChhY3RpdmVDbGFzcyAhPT0gdW5kZWZpbmVkKSB7CisgICAg
ICAgICAgICBoYXNoLnBhaXJzLnB1c2goYi5wYWlyKCdhY3RpdmVDbGFzcycsIGIuc3RyaW5nKGFj
dGl2ZUNsYXNzKSkpOworICAgICAgICAgIH0KKworICAgICAgICAgIGlmIChpbmFjdGl2ZUNsYXNz
ICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIGhhc2gucGFpcnMucHVzaChiLnBhaXIoJ2lu
YWN0aXZlQ2xhc3MnLCBiLnN0cmluZyhpbmFjdGl2ZUNsYXNzKSkpOworICAgICAgICAgIH0KKwor
ICAgICAgICAgIHBhcmFtcy5wdXNoKGIuc2V4cHIoYi5zdHJpbmcoJy1ub3JtYWxpemUtY2xhc3Mn
KSwgc2V4cHJQYXJhbXMsIGhhc2gpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpbmFjdGl2
ZUNsYXNzKSB7CisgICAgICAgICAgcGFyYW1zLnB1c2goYi5zdHJpbmcoaW5hY3RpdmVDbGFzcykp
OworICAgICAgICB9CisKKyAgICAgICAgc2V4cHIgPSBiLnNleHByKGIuc3RyaW5nKCdpZicpLCBw
YXJhbXMpOworICAgICAgfQorCisgICAgICBzZXhwcnMucHVzaChzZXhwcik7CisgICAgICBzZXhw
cnMucHVzaChiLnN0cmluZygnICcpKTsKKyAgICB9CisgIH0KKworICBmdW5jdGlvbiB2YWxpZGF0
ZShub2RlKSB7CisgICAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ0Jsb2NrU3RhdGVtZW50JyB8fCBu
b2RlLnR5cGUgPT09ICdNdXN0YWNoZVN0YXRlbWVudCc7CisgIH0KKworICBmdW5jdGlvbiBlYWNo
KGxpc3QsIGNhbGxiYWNrKSB7CisgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBsaXN0Lmxlbmd0aDsg
aSA8IGw7IGkrKykgeworICAgICAgY2FsbGJhY2sobGlzdFtpXSwgaSk7CisgICAgfQorICB9CisK
KyAgZnVuY3Rpb24gcGFyc2VNaWNyb3N5bnRheChzdHJpbmcpIHsKKyAgICB2YXIgc2VnbWVudHMg
PSBzdHJpbmcuc3BsaXQoJyAnKTsKKworICAgIGZvciAodmFyIGkgPSAwLCBsID0gc2VnbWVudHMu
bGVuZ3RoOyBpIDwgbDsgaSsrKSB7CisgICAgICBzZWdtZW50c1tpXSA9IHNlZ21lbnRzW2ldLnNw
bGl0KCc6Jyk7CisgICAgfQorCisgICAgcmV0dXJuIHNlZ21lbnRzOworICB9Cit9KTsKK2VuaWZl
ZCgnZW1iZXItdGVtcGxhdGUtY29tcGlsZXIvcGx1Z2lucy90cmFuc2Zvcm0tdG9wLWxldmVsLWNv
bXBvbmVudHMnLCBbJ2V4cG9ydHMnXSwgZnVuY3Rpb24gKGV4cG9ydHMpIHsKKyAgJ3VzZSBzdHJp
Y3QnOworCisgIGZ1bmN0aW9uIFRyYW5zZm9ybVRvcExldmVsQ29tcG9uZW50cygpIHsKKyAgICAv
LyBzZXQgbGF0ZXIgd2l0aGluIEhUTUxCYXJzIHRvIHRoZSBzeW50YXggcGFja2FnZQorICAgIHRo
aXMuc3ludGF4ID0gbnVsbDsKKyAgfQorCisgIC8qKgorICAgIEBwcml2YXRlCisgICAgQG1ldGhv
ZCB0cmFuc2Zvcm0KKyAgICBAcGFyYW0ge0FTVH0gVGhlIEFTVCB0byBiZSB0cmFuc2Zvcm1lZC4K
KyAgKi8KKyAgVHJhbnNmb3JtVG9wTGV2ZWxDb21wb25lbnRzLnByb3RvdHlwZS50cmFuc2Zvcm0g
PSBmdW5jdGlvbiBUcmFuc2Zvcm1Ub3BMZXZlbENvbXBvbmVudHNfdHJhbnNmb3JtKGFzdCkgewor
ICAgIHZhciBiID0gdGhpcy5zeW50YXguYnVpbGRlcnM7CisKKyAgICBoYXNTaW5nbGVDb21wb25l
bnROb2RlKGFzdCwgZnVuY3Rpb24gKGNvbXBvbmVudCkgeworICAgICAgaWYgKGNvbXBvbmVudC50
eXBlID09PSAnQ29tcG9uZW50Tm9kZScpIHsKKyAgICAgICAgY29tcG9uZW50LnRhZyA9ICdAJyAr
IGNvbXBvbmVudC50YWc7CisgICAgICAgIGNvbXBvbmVudC5pc1N0YXRpYyA9IHRydWU7CisgICAg
ICB9CisgICAgfSwgZnVuY3Rpb24gKGVsZW1lbnQpIHsKKyAgICAgIHZhciBoYXNUcmlwbGVDdXJs
aWVzID0gZWxlbWVudC5hdHRyaWJ1dGVzLnNvbWUoZnVuY3Rpb24gKGF0dHIpIHsKKyAgICAgICAg
cmV0dXJuIGF0dHIudmFsdWUuZXNjYXBlZCA9PT0gZmFsc2U7CisgICAgICB9KTsKKworICAgICAg
aWYgKGVsZW1lbnQubW9kaWZpZXJzLmxlbmd0aCB8fCBoYXNUcmlwbGVDdXJsaWVzKSB7CisgICAg
ICAgIHJldHVybiBlbGVtZW50OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gVE9ETzogUHJv
cGVybHkgY29weSBsb2MgZnJvbSBjaGlsZHJlbgorICAgICAgICB2YXIgcHJvZ3JhbSA9IGIucHJv
Z3JhbShlbGVtZW50LmNoaWxkcmVuKTsKKyAgICAgICAgdmFyIGNvbXBvbmVudCA9IGIuY29tcG9u
ZW50KCdAPCcgKyBlbGVtZW50LnRhZyArICc+JywgZWxlbWVudC5hdHRyaWJ1dGVzLCBwcm9ncmFt
LCBlbGVtZW50LmxvYyk7CisgICAgICAgIGNvbXBvbmVudC5pc1N0YXRpYyA9IHRydWU7CisgICAg
ICAgIHJldHVybiBjb21wb25lbnQ7CisgICAgICB9CisgICAgfSk7CisKKyAgICByZXR1cm4gYXN0
OworICB9OworCisgIGZ1bmN0aW9uIGhhc1NpbmdsZUNvbXBvbmVudE5vZGUocHJvZ3JhbSwgY29t
cG9uZW50Q2FsbGJhY2ssIGVsZW1lbnRDYWxsYmFjaykgeworICAgIHZhciBsb2MgPSBwcm9ncmFt
LmxvYzsKKyAgICB2YXIgYm9keSA9IHByb2dyYW0uYm9keTsKKworICAgIGlmICghbG9jIHx8IGxv
Yy5zdGFydC5saW5lICE9PSAxIHx8IGxvYy5zdGFydC5jb2x1bW4gIT09IDApIHsKKyAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICB2YXIgbGFzdENvbXBvbmVudE5vZGUgPSB1bmRlZmluZWQ7Cisg
ICAgdmFyIGxhc3RJbmRleCA9IHVuZGVmaW5lZDsKKyAgICB2YXIgbm9kZUNvdW50ID0gMDsKKwor
ICAgIGZvciAodmFyIGkgPSAwLCBsID0gYm9keS5sZW5ndGg7IGkgPCBsOyBpKyspIHsKKyAgICAg
IHZhciBjdXJyID0gYm9keVtpXTsKKworICAgICAgLy8gdGV4dCBub2RlIHdpdGggd2hpdGVzcGFj
ZSBvbmx5CisgICAgICBpZiAoY3Vyci50eXBlID09PSAnVGV4dE5vZGUnICYmIC9eW1xzXSokLy50
ZXN0KGN1cnIuY2hhcnMpKSB7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgICAv
LyBoYXMgbXVsdGlwbGUgcm9vdCBlbGVtZW50cyBpZiB3ZSd2ZSBiZWVuIGhlcmUgYmVmb3JlCisg
ICAgICBpZiAobm9kZUNvdW50KysgPiAwKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
IH0KKworICAgICAgaWYgKGN1cnIudHlwZSA9PT0gJ0NvbXBvbmVudE5vZGUnIHx8IGN1cnIudHlw
ZSA9PT0gJ0VsZW1lbnROb2RlJykgeworICAgICAgICBsYXN0Q29tcG9uZW50Tm9kZSA9IGN1cnI7
CisgICAgICAgIGxhc3RJbmRleCA9IGk7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKCFsYXN0
Q29tcG9uZW50Tm9kZSkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChsYXN0Q29t
cG9uZW50Tm9kZS50eXBlID09PSAnQ29tcG9uZW50Tm9kZScpIHsKKyAgICAgIGNvbXBvbmVudENh
bGxiYWNrKGxhc3RDb21wb25lbnROb2RlKTsKKyAgICB9CisgIH0KKworICBleHBvcnRzLmRlZmF1
bHQgPSBUcmFuc2Zvcm1Ub3BMZXZlbENvbXBvbmVudHM7Cit9KTsKK2VuaWZlZCgnZW1iZXItdGVt
cGxhdGUtY29tcGlsZXIvc3lzdGVtL2NhbGN1bGF0ZS1sb2NhdGlvbi1kaXNwbGF5JywgWydleHBv
cnRzJ10sIGZ1bmN0aW9uIChleHBvcnRzKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICBleHBvcnRz
LmRlZmF1bHQgPSBjYWxjdWxhdGVMb2NhdGlvbkRpc3BsYXk7CisKKyAgZnVuY3Rpb24gY2FsY3Vs
YXRlTG9jYXRpb25EaXNwbGF5KG1vZHVsZU5hbWUsIF9sb2MpIHsKKyAgICB2YXIgbG9jID0gX2xv
YyB8fCB7fTsKKworICAgIHZhciBfcmVmID0gbG9jLnN0YXJ0IHx8IHt9OworCisgICAgdmFyIGNv
bHVtbiA9IF9yZWYuY29sdW1uOworICAgIHZhciBsaW5lID0gX3JlZi5saW5lOworCisgICAgdmFy
IG1vZHVsZUluZm8gPSAnJzsKKyAgICBpZiAobW9kdWxlTmFtZSkgeworICAgICAgbW9kdWxlSW5m
byArPSAnXCcnICsgbW9kdWxlTmFtZSArICdcJyAnOworICAgIH0KKworICAgIGlmIChsaW5lICE9
PSB1bmRlZmluZWQgJiYgY29sdW1uICE9PSB1bmRlZmluZWQpIHsKKyAgICAgIGlmIChtb2R1bGVO
YW1lKSB7CisgICAgICAgIC8vIG9ubHkgcHJlcGVuZCBAIGlmIHRoZSBtb2R1bGVOYW1lIHdhcyBw
cmVzZW50CisgICAgICAgIG1vZHVsZUluZm8gKz0gJ0AgJzsKKyAgICAgIH0KKyAgICAgIG1vZHVs
ZUluZm8gKz0gJ0wnICsgbGluZSArICc6QycgKyBjb2x1bW47CisgICAgfQorCisgICAgaWYgKG1v
ZHVsZUluZm8pIHsKKyAgICAgIG1vZHVsZUluZm8gPSAnKCcgKyBtb2R1bGVJbmZvICsgJykgJzsK
KyAgICB9CisKKyAgICByZXR1cm4gbW9kdWxlSW5mbzsKKyAgfQorfSk7CitlbmlmZWQoJ2VtYmVy
LXRlbXBsYXRlLWNvbXBpbGVyL3N5c3RlbS9jb21waWxlJywgWydleHBvcnRzJywgJ2VtYmVyLW1l
dGFsL2ZlYXR1cmVzJywgJ3JlcXVpcmUnLCAnZW1iZXItdGVtcGxhdGUtY29tcGlsZXIvc3lzdGVt
L2NvbXBpbGVfb3B0aW9ucycsICdlbWJlci10ZW1wbGF0ZS1jb21waWxlci9zeXN0ZW0vdGVtcGxh
dGUnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsRmVhdHVyZXMsIF9yZXF1aXJlLCBf
ZW1iZXJUZW1wbGF0ZUNvbXBpbGVyU3lzdGVtQ29tcGlsZV9vcHRpb25zLCBfZW1iZXJUZW1wbGF0
ZUNvbXBpbGVyU3lzdGVtVGVtcGxhdGUpIHsKKyAgLyoqCisgIEBtb2R1bGUgZW1iZXIKKyAgQHN1
Ym1vZHVsZSBlbWJlci10ZW1wbGF0ZS1jb21waWxlcgorICAqLworCisgICd1c2Ugc3RyaWN0JzsK
KworICB2YXIgY29tcGlsZTsKKworICAvKioKKyAgICBVc2VzIEhUTUxCYXJzIGBjb21waWxlYCBm
dW5jdGlvbiB0byBwcm9jZXNzIGEgc3RyaW5nIGludG8gYSBjb21waWxlZCB0ZW1wbGF0ZS4KKyAg
CisgICAgVGhpcyBpcyBub3QgcHJlc2VudCBpbiBwcm9kdWN0aW9uIGJ1aWxkcy4KKyAgCisgICAg
QHByaXZhdGUKKyAgICBAbWV0aG9kIGNvbXBpbGUKKyAgICBAcGFyYW0ge1N0cmluZ30gdGVtcGxh
dGVTdHJpbmcgVGhpcyBpcyB0aGUgc3RyaW5nIHRvIGJlIGNvbXBpbGVkIGJ5IEhUTUxCYXJzLgor
ICAgIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIFRoaXMgaXMgYW4gb3B0aW9ucyBoYXNoIHRvIGF1
Z21lbnQgdGhlIGNvbXBpbGVyIG9wdGlvbnMuCisgICovCisKKyAgZXhwb3J0cy5kZWZhdWx0ID0g
ZnVuY3Rpb24gKHRlbXBsYXRlU3RyaW5nLCBvcHRpb25zKSB7CisgICAgaWYgKCFjb21waWxlICYm
IF9yZXF1aXJlLmhhcygnaHRtbGJhcnMtY29tcGlsZXIvY29tcGlsZXInKSkgeworICAgICAgY29t
cGlsZSA9IF9yZXF1aXJlLmRlZmF1bHQoJ2h0bWxiYXJzLWNvbXBpbGVyL2NvbXBpbGVyJykuY29t
cGlsZTsKKyAgICB9CisKKyAgICBpZiAoIWNvbXBpbGUpIHsKKyAgICAgIHRocm93IG5ldyBFcnJv
cignQ2Fubm90IGNhbGwgYGNvbXBpbGVgIHdpdGhvdXQgdGhlIHRlbXBsYXRlIGNvbXBpbGVyIGxv
YWRlZC4gUGxlYXNlIGxvYWQgYGVtYmVyLXRlbXBsYXRlLWNvbXBpbGVyLmpzYCBwcmlvciB0byBj
YWxsaW5nIGBjb21waWxlYC4nKTsKKyAgICB9CisKKyAgICB2YXIgdGVtcGxhdGVTcGVjID0gY29t
cGlsZSh0ZW1wbGF0ZVN0cmluZywgX2VtYmVyVGVtcGxhdGVDb21waWxlclN5c3RlbUNvbXBpbGVf
b3B0aW9ucy5kZWZhdWx0KG9wdGlvbnMpKTsKKworICAgIHJldHVybiBfZW1iZXJUZW1wbGF0ZUNv
bXBpbGVyU3lzdGVtVGVtcGxhdGUuZGVmYXVsdCh0ZW1wbGF0ZVNwZWMpOworICB9OworfSk7Citl
bmlmZWQoJ2VtYmVyLXRlbXBsYXRlLWNvbXBpbGVyL3N5c3RlbS9jb21waWxlX29wdGlvbnMnLCBb
J2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvYXNzaWduJywgJ2VtYmVyLXRlbXBsYXRlLWNvbXBpbGVy
L3BsdWdpbnMnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsQXNzaWduLCBfZW1iZXJU
ZW1wbGF0ZUNvbXBpbGVyUGx1Z2lucykgeworICAvKioKKyAgQG1vZHVsZSBlbWJlcgorICBAc3Vi
bW9kdWxlIGVtYmVyLXRlbXBsYXRlLWNvbXBpbGVyCisgICovCisKKyAgJ3VzZSBzdHJpY3QnOwor
CisgIHZhciBjb21waWxlT3B0aW9ucyA9IHVuZGVmaW5lZDsKKyAgdmFyIGZyYWdtZW50UmVhc29u
ID0gdW5kZWZpbmVkOworCisgIC8qKgorICAgIEBwcml2YXRlCisgICAgQHByb3BlcnR5IGNvbXBp
bGVPcHRpb25zCisgICovCisgIGNvbXBpbGVPcHRpb25zID0gZnVuY3Rpb24gKF9vcHRpb25zKSB7
CisgICAgdmFyIGRpc2FibGVDb21wb25lbnRHZW5lcmF0aW9uID0gdHJ1ZTsKKworICAgIHZhciBv
cHRpb25zID0gdW5kZWZpbmVkOworICAgIC8vIFdoZW4gY2FsbGluZyBgRW1iZXIuSGFuZGxlYmFy
cy5jb21waWxlKClgIGEgc2Vjb25kIGFyZ3VtZW50IG9mIGB0cnVlYAorICAgIC8vIGhhZCBhIHNw
ZWNpYWwgbWVhbmluZyAobG9uZyBzaW5jZSBsb3N0KSwgdGhpcyBqdXN0IGdhdXJkcyBhZ2FpbnN0
CisgICAgLy8gYG9wdGlvbnNgIGJlaW5nIHRydWUsIGFuZCBjYXVzaW5nIGFuIGVycm9yIGR1cmlu
ZyBjb21waWxhdGlvbi4KKyAgICBpZiAoX29wdGlvbnMgPT09IHRydWUpIHsKKyAgICAgIG9wdGlv
bnMgPSB7fTsKKyAgICB9IGVsc2UgeworICAgICAgb3B0aW9ucyA9IF9lbWJlck1ldGFsQXNzaWdu
LmRlZmF1bHQoe30sIF9vcHRpb25zKTsKKyAgICB9CisKKyAgICBvcHRpb25zLmRpc2FibGVDb21w
b25lbnRHZW5lcmF0aW9uID0gZGlzYWJsZUNvbXBvbmVudEdlbmVyYXRpb247CisKKyAgICB2YXIg
cGx1Z2lucyA9IHsKKyAgICAgIGFzdDogX2VtYmVyVGVtcGxhdGVDb21waWxlclBsdWdpbnMuZGVm
YXVsdC5hc3Quc2xpY2UoKQorICAgIH07CisKKyAgICBpZiAob3B0aW9ucy5wbHVnaW5zICYmIG9w
dGlvbnMucGx1Z2lucy5hc3QpIHsKKyAgICAgIHBsdWdpbnMuYXN0ID0gcGx1Z2lucy5hc3QuY29u
Y2F0KG9wdGlvbnMucGx1Z2lucy5hc3QpOworICAgIH0KKyAgICBvcHRpb25zLnBsdWdpbnMgPSBw
bHVnaW5zOworCisgICAgb3B0aW9ucy5idWlsZE1ldGEgPSBmdW5jdGlvbiBidWlsZE1ldGEocHJv
Z3JhbSkgeworICAgICAgcmV0dXJuIHsKKyAgICAgICAgZnJhZ21lbnRSZWFzb246IGZyYWdtZW50
UmVhc29uKHByb2dyYW0pLAorICAgICAgICByZXZpc2lvbjogJ0VtYmVyQDIuNi4yJywKKyAgICAg
ICAgbG9jOiBwcm9ncmFtLmxvYywKKyAgICAgICAgbW9kdWxlTmFtZTogb3B0aW9ucy5tb2R1bGVO
YW1lCisgICAgICB9OworICAgIH07CisKKyAgICByZXR1cm4gb3B0aW9uczsKKyAgfTsKKworICBm
cmFnbWVudFJlYXNvbiA9IGZ1bmN0aW9uIChwcm9ncmFtKSB7CisgICAgdmFyIGxvYyA9IHByb2dy
YW0ubG9jOworICAgIHZhciBib2R5ID0gcHJvZ3JhbS5ib2R5OworCisgICAgaWYgKCFsb2MgfHwg
bG9jLnN0YXJ0LmxpbmUgIT09IDEgfHwgbG9jLnN0YXJ0LmNvbHVtbiAhPT0gMCkgeworICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHZhciBjYW5kaWRhdGUgPSB1bmRlZmluZWQ7Cisg
ICAgdmFyIG5vZGVDb3VudCA9IDA7CisKKyAgICB2YXIgcHJvYmxlbXMgPSB7fTsKKworICAgIGZv
ciAodmFyIGkgPSAwLCBsID0gYm9keS5sZW5ndGg7IGkgPCBsOyBpKyspIHsKKyAgICAgIHZhciBj
dXJyID0gYm9keVtpXTsKKworICAgICAgLy8gdGV4dCBub2RlIHdpdGggd2hpdGVzcGFjZSBvbmx5
CisgICAgICBpZiAoY3Vyci50eXBlID09PSAnVGV4dE5vZGUnICYmIC9eW1xzXSokLy50ZXN0KGN1
cnIuY2hhcnMpKSB7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgICAvLyBoYXMg
bXVsdGlwbGUgcm9vdCBlbGVtZW50cyBpZiB3ZSd2ZSBiZWVuIGhlcmUgYmVmb3JlCisgICAgICBp
ZiAobm9kZUNvdW50KysgPiAwKSB7CisgICAgICAgIHByb2JsZW1zWydtdWx0aXBsZS1ub2Rlcydd
ID0gdHJ1ZTsKKyAgICAgIH0KKworICAgICAgaWYgKGN1cnIudHlwZSA9PT0gJ0NvbXBvbmVudE5v
ZGUnIHx8IGN1cnIudHlwZSA9PT0gJ0VsZW1lbnROb2RlJykgeworICAgICAgICBjYW5kaWRhdGUg
PSBjdXJyOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcHJvYmxlbXNbJ3dyb25nLXR5cGUnXSA9
IHRydWU7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKG5vZGVDb3VudCA9PT0gMCkgeworICAg
ICAgcmV0dXJuIHsgbmFtZTogJ21pc3Npbmctd3JhcHBlcicsIHByb2JsZW1zOiBbJ2VtcHR5LWJv
ZHknXSB9OworICAgIH0KKworICAgIHZhciBwcm9ibGVtTGlzdCA9IE9iamVjdC5rZXlzKHByb2Js
ZW1zKTsKKyAgICBpZiAocHJvYmxlbUxpc3QubGVuZ3RoKSB7CisgICAgICByZXR1cm4geyBuYW1l
OiAnbWlzc2luZy13cmFwcGVyJywgcHJvYmxlbXM6IHByb2JsZW1MaXN0IH07CisgICAgfQorCisg
ICAgaWYgKGNhbmRpZGF0ZS50eXBlID09PSAnQ29tcG9uZW50Tm9kZScpIHsKKyAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9IGVsc2UgaWYgKGNhbmRpZGF0ZS5tb2RpZmllcnMubGVuZ3RoKSB7Cisg
ICAgICByZXR1cm4geyBuYW1lOiAnbW9kaWZpZXJzJywgbW9kaWZpZXJzOiBjYW5kaWRhdGUubW9k
aWZpZXJzLm1hcChmdW5jdGlvbiAobSkgeworICAgICAgICAgIHJldHVybiBtLnBhdGgub3JpZ2lu
YWw7CisgICAgICAgIH0pIH07CisgICAgfSBlbHNlIGlmIChjYW5kaWRhdGUuYXR0cmlidXRlcy5z
b21lKGZ1bmN0aW9uIChhdHRyKSB7CisgICAgICByZXR1cm4gIWF0dHIudmFsdWUuZXNjYXBlZDsK
KyAgICB9KSkgeworICAgICAgcmV0dXJuIHsgbmFtZTogJ3RyaXBsZS1jdXJsaWVzJyB9OworICAg
IH0gZWxzZSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9OworCisgIGV4cG9ydHMu
ZGVmYXVsdCA9IGNvbXBpbGVPcHRpb25zOworfSk7CitlbmlmZWQoJ2VtYmVyLXRlbXBsYXRlLWNv
bXBpbGVyL3N5c3RlbS9wcmVjb21waWxlJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2ZlYXR1
cmVzJywgJ3JlcXVpcmUnLCAnZW1iZXItdGVtcGxhdGUtY29tcGlsZXIvc3lzdGVtL2NvbXBpbGVf
b3B0aW9ucyddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxGZWF0dXJlcywgX3JlcXVp
cmUsIF9lbWJlclRlbXBsYXRlQ29tcGlsZXJTeXN0ZW1Db21waWxlX29wdGlvbnMpIHsKKyAgLyoq
CisgIEBtb2R1bGUgZW1iZXIKKyAgQHN1Ym1vZHVsZSBlbWJlci10ZW1wbGF0ZS1jb21waWxlcgor
ICAqLworCisgICd1c2Ugc3RyaWN0JzsKKworICB2YXIgY29tcGlsZVNwZWM7CisKKyAgLyoqCisg
ICAgVXNlcyBIVE1MQmFycyBgY29tcGlsZWAgZnVuY3Rpb24gdG8gcHJvY2VzcyBhIHN0cmluZyBp
bnRvIGEgY29tcGlsZWQgdGVtcGxhdGUgc3RyaW5nLgorICAgIFRoZSByZXR1cm5lZCBzdHJpbmcg
bXVzdCBiZSBwYXNzZWQgdGhyb3VnaCBgRW1iZXIuSFRNTEJhcnMudGVtcGxhdGVgLgorICAKKyAg
ICBUaGlzIGlzIG5vdCBwcmVzZW50IGluIHByb2R1Y3Rpb24gYnVpbGRzLgorICAKKyAgICBAcHJp
dmF0ZQorICAgIEBtZXRob2QgcHJlY29tcGlsZQorICAgIEBwYXJhbSB7U3RyaW5nfSB0ZW1wbGF0
ZVN0cmluZyBUaGlzIGlzIHRoZSBzdHJpbmcgdG8gYmUgY29tcGlsZWQgYnkgSFRNTEJhcnMuCisg
ICovCisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKHRlbXBsYXRlU3RyaW5nLCBvcHRp
b25zKSB7CisgICAgaWYgKCFjb21waWxlU3BlYyAmJiBfcmVxdWlyZS5oYXMoJ2h0bWxiYXJzLWNv
bXBpbGVyL2NvbXBpbGVyJykpIHsKKyAgICAgIGNvbXBpbGVTcGVjID0gX3JlcXVpcmUuZGVmYXVs
dCgnaHRtbGJhcnMtY29tcGlsZXIvY29tcGlsZXInKS5jb21waWxlU3BlYzsKKyAgICB9CisKKyAg
ICBpZiAoIWNvbXBpbGVTcGVjKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxs
IGBjb21waWxlU3BlY2Agd2l0aG91dCB0aGUgdGVtcGxhdGUgY29tcGlsZXIgbG9hZGVkLiBQbGVh
c2UgbG9hZCBgZW1iZXItdGVtcGxhdGUtY29tcGlsZXIuanNgIHByaW9yIHRvIGNhbGxpbmcgYGNv
bXBpbGVTcGVjYC4nKTsKKyAgICB9CisKKyAgICByZXR1cm4gY29tcGlsZVNwZWModGVtcGxhdGVT
dHJpbmcsIF9lbWJlclRlbXBsYXRlQ29tcGlsZXJTeXN0ZW1Db21waWxlX29wdGlvbnMuZGVmYXVs
dChvcHRpb25zKSk7CisgIH07Cit9KTsKK2VuaWZlZCgnZW1iZXItdGVtcGxhdGUtY29tcGlsZXIv
c3lzdGVtL3RlbXBsYXRlJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2ZlYXR1cmVzJywgJ3Jl
cXVpcmUnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsRmVhdHVyZXMsIF9yZXF1aXJl
MikgeworICAndXNlIHN0cmljdCc7CisKKyAgLyoqCisgIEBtb2R1bGUgZW1iZXIKKyAgQHN1Ym1v
ZHVsZSBlbWJlci10ZW1wbGF0ZS1jb21waWxlcgorICAqLworCisgIC8qKgorICAgIEF1Z21lbnRz
IHRoZSBkZWZhdWx0IHByZWNvbXBpbGVkIG91dHB1dCBvZiBhbiBIVE1MQmFycyB0ZW1wbGF0ZSB3
aXRoCisgICAgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBuZWVkZWQgYnkgRW1iZXIuCisgIAorICAg
IEBwcml2YXRlCisgICAgQG1ldGhvZCB0ZW1wbGF0ZQorICAgIEBwYXJhbSB7RnVuY3Rpb259IHRl
bXBsYXRlU3BlYyBUaGlzIGlzIHRoZSBjb21waWxlZCBIVE1MQmFycyB0ZW1wbGF0ZSBzcGVjLgor
ICAqLworCisgIHZhciB0ZW1wbGF0ZSA9IHVuZGVmaW5lZDsKKworICB2YXIgX3JlcXVpcmUgPSBf
cmVxdWlyZTIuZGVmYXVsdCgnaHRtbGJhcnMtcnVudGltZS9ob29rcycpOworCisgIHZhciB3cmFw
ID0gX3JlcXVpcmUud3JhcDsKKworICB0ZW1wbGF0ZSA9IGZ1bmN0aW9uICh0ZW1wbGF0ZVNwZWMp
IHsKKyAgICBpZiAoIXRlbXBsYXRlU3BlYy5yZW5kZXIpIHsKKyAgICAgIHRlbXBsYXRlU3BlYyA9
IHdyYXAodGVtcGxhdGVTcGVjKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZVNwZWMuaXNUb3AgPSB0
cnVlOworICAgIHRlbXBsYXRlU3BlYy5pc01ldGhvZCA9IGZhbHNlOworCisgICAgcmV0dXJuIHRl
bXBsYXRlU3BlYzsKKyAgfTsKKyAgZXhwb3J0cy5kZWZhdWx0ID0gdGVtcGxhdGU7Cit9KTsKK2Vu
aWZlZCgnZW1iZXItdGVzdGluZy9hZGFwdGVycy9hZGFwdGVyJywgWydleHBvcnRzJywgJ2VtYmVy
LXJ1bnRpbWUvc3lzdGVtL29iamVjdCddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyUnVudGlt
ZVN5c3RlbU9iamVjdCkgeworICAndXNlIHN0cmljdCc7CisKKyAgZnVuY3Rpb24gSygpIHsKKyAg
ICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgQG1vZHVsZSBlbWJlcgorICAgQHN1Ym1v
ZHVsZSBlbWJlci10ZXN0aW5nCisgICovCisKKyAgLyoqCisgICAgVGhlIHByaW1hcnkgcHVycG9z
ZSBvZiB0aGlzIGNsYXNzIGlzIHRvIGNyZWF0ZSBob29rcyB0aGF0IGNhbiBiZSBpbXBsZW1lbnRl
ZAorICAgIGJ5IGFuIGFkYXB0ZXIgZm9yIHZhcmlvdXMgdGVzdCBmcmFtZXdvcmtzLgorICAKKyAg
ICBAY2xhc3MgQWRhcHRlcgorICAgIEBuYW1lc3BhY2UgRW1iZXIuVGVzdAorICAgIEBwdWJsaWMK
KyAgKi8KKyAgdmFyIEFkYXB0ZXIgPSBfZW1iZXJSdW50aW1lU3lzdGVtT2JqZWN0LmRlZmF1bHQu
ZXh0ZW5kKHsKKyAgICAvKioKKyAgICAgIFRoaXMgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgd2hl
bmV2ZXIgYW4gYXN5bmMgb3BlcmF0aW9uIGlzIGFib3V0IHRvIHN0YXJ0LgorICAgICAgIE92ZXJy
aWRlIHRoaXMgdG8gY2FsbCB5b3VyIGZyYW1ld29yaydzIG1ldGhvZHMgdGhhdCBoYW5kbGUgYXN5
bmMKKyAgICAgIG9wZXJhdGlvbnMuCisgICAgICAgQHB1YmxpYworICAgICAgQG1ldGhvZCBhc3lu
Y1N0YXJ0CisgICAgKi8KKyAgICBhc3luY1N0YXJ0OiBLLAorCisgICAgLyoqCisgICAgICBUaGlz
IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIGFuIGFzeW5jIG9wZXJhdGlvbiBoYXMg
Y29tcGxldGVkLgorICAgICAgIEBwdWJsaWMKKyAgICAgIEBtZXRob2QgYXN5bmNFbmQKKyAgICAq
LworICAgIGFzeW5jRW5kOiBLLAorCisgICAgLyoqCisgICAgICBPdmVycmlkZSB0aGlzIG1ldGhv
ZCB3aXRoIHlvdXIgdGVzdGluZyBmcmFtZXdvcmsncyBmYWxzZSBhc3NlcnRpb24uCisgICAgICBU
aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuZXZlciBhbiBleGNlcHRpb24gb2NjdXJzIGNhdXNp
bmcgdGhlIHRlc3RpbmcKKyAgICAgIHByb21pc2UgdG8gZmFpbC4KKyAgICAgICBRVW5pdCBleGFt
cGxlOgorICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgICAgZXhjZXB0aW9uOiBmdW5jdGlvbihl
cnJvcikgeworICAgICAgICAgIG9rKGZhbHNlLCBlcnJvcik7CisgICAgICAgIH07CisgICAgICBg
YGAKKyAgICAgICBAcHVibGljCisgICAgICBAbWV0aG9kIGV4Y2VwdGlvbgorICAgICAgQHBhcmFt
IHtTdHJpbmd9IGVycm9yIFRoZSBleGNlcHRpb24gdG8gYmUgcmFpc2VkLgorICAgICovCisgICAg
ZXhjZXB0aW9uOiBmdW5jdGlvbiAoZXJyb3IpIHsKKyAgICAgIHRocm93IGVycm9yOworICAgIH0K
KyAgfSk7CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gQWRhcHRlcjsKK30pOworZW5pZmVkKCdlbWJl
ci10ZXN0aW5nL2FkYXB0ZXJzL3F1bml0JywgWydleHBvcnRzJywgJ2VtYmVyLXRlc3RpbmcvYWRh
cHRlcnMvYWRhcHRlcicsICdlbWJlci1tZXRhbC91dGlscyddLCBmdW5jdGlvbiAoZXhwb3J0cywg
X2VtYmVyVGVzdGluZ0FkYXB0ZXJzQWRhcHRlciwgX2VtYmVyTWV0YWxVdGlscykgeworICAndXNl
IHN0cmljdCc7CisKKyAgLyoqCisgICAgVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBtZXRob2Rz
IGRlZmluZWQgYnkgRW1iZXIuVGVzdC5BZGFwdGVyIGZvciB0aGUKKyAgICBRVW5pdCB0ZXN0aW5n
IGZyYW1ld29yay4KKyAgCisgICAgQGNsYXNzIFFVbml0QWRhcHRlcgorICAgIEBuYW1lc3BhY2Ug
RW1iZXIuVGVzdAorICAgIEBleHRlbmRzIEVtYmVyLlRlc3QuQWRhcHRlcgorICAgIEBwdWJsaWMK
KyAgKi8KKyAgZXhwb3J0cy5kZWZhdWx0ID0gX2VtYmVyVGVzdGluZ0FkYXB0ZXJzQWRhcHRlci5k
ZWZhdWx0LmV4dGVuZCh7CisgICAgYXN5bmNTdGFydDogZnVuY3Rpb24gKCkgeworICAgICAgUVVu
aXQuc3RvcCgpOworICAgIH0sCisgICAgYXN5bmNFbmQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgIFFV
bml0LnN0YXJ0KCk7CisgICAgfSwKKyAgICBleGNlcHRpb246IGZ1bmN0aW9uIChlcnJvcikgewor
ICAgICAgb2soZmFsc2UsIF9lbWJlck1ldGFsVXRpbHMuaW5zcGVjdChlcnJvcikpOworICAgIH0K
KyAgfSk7Cit9KTsKK2VuaWZlZCgnZW1iZXItdGVzdGluZy9oZWxwZXJzJywgWydleHBvcnRzJywg
J2VtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCcsICdlbWJlci1tZXRhbC9lcnJvcicsICdlbWJlci1t
ZXRhbC9ydW5fbG9vcCcsICdlbWJlci12aWV3cy9zeXN0ZW0vanF1ZXJ5JywgJ2VtYmVyLXRlc3Rp
bmcvdGVzdCcsICdlbWJlci1ydW50aW1lL2V4dC9yc3ZwJywgJ2VtYmVyLW1ldGFsL2ZlYXR1cmVz
J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbFByb3BlcnR5X2dldCwgX2VtYmVyTWV0
YWxFcnJvciwgX2VtYmVyTWV0YWxSdW5fbG9vcCwgX2VtYmVyVmlld3NTeXN0ZW1KcXVlcnksIF9l
bWJlclRlc3RpbmdUZXN0LCBfZW1iZXJSdW50aW1lRXh0UnN2cCwgX2VtYmVyTWV0YWxGZWF0dXJl
cykgeworICAndXNlIHN0cmljdCc7CisKKyAgLyoqCisgIEBtb2R1bGUgZW1iZXIKKyAgQHN1Ym1v
ZHVsZSBlbWJlci10ZXN0aW5nCisgICovCisKKyAgdmFyIGhlbHBlciA9IF9lbWJlclRlc3RpbmdU
ZXN0LmRlZmF1bHQucmVnaXN0ZXJIZWxwZXI7CisgIHZhciBhc3luY0hlbHBlciA9IF9lbWJlclRl
c3RpbmdUZXN0LmRlZmF1bHQucmVnaXN0ZXJBc3luY0hlbHBlcjsKKworICB2YXIga2V5Ym9hcmRF
dmVudFR5cGVzLCBtb3VzZUV2ZW50VHlwZXMsIGJ1aWxkS2V5Ym9hcmRFdmVudCwgYnVpbGRNb3Vz
ZUV2ZW50LCBidWlsZEJhc2ljRXZlbnQsIGZpcmVFdmVudCwgZm9jdXM7CisKKyAgdmFyIGRlZmF1
bHRFdmVudE9wdGlvbnMgPSB7IGNhbkJ1YmJsZTogdHJ1ZSwgY2FuY2VsYWJsZTogdHJ1ZSB9Owor
ICBrZXlib2FyZEV2ZW50VHlwZXMgPSBbJ2tleWRvd24nLCAna2V5cHJlc3MnLCAna2V5dXAnXTsK
KyAgbW91c2VFdmVudFR5cGVzID0gWydjbGljaycsICdtb3VzZWRvd24nLCAnbW91c2V1cCcsICdk
YmxjbGljaycsICdtb3VzZWVudGVyJywgJ21vdXNlbGVhdmUnLCAnbW91c2Vtb3ZlJywgJ21vdXNl
b3V0JywgJ21vdXNlb3ZlciddOworCisgIGJ1aWxkS2V5Ym9hcmRFdmVudCA9IGZ1bmN0aW9uIGJ1
aWxkS2V5Ym9hcmRFdmVudCh0eXBlKSB7CisgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVu
Z3RoIDw9IDEgfHwgYXJndW1lbnRzWzFdID09PSB1bmRlZmluZWQgPyB7fSA6IGFyZ3VtZW50c1sx
XTsKKworICAgIHZhciBldmVudCA9IHVuZGVmaW5lZDsKKyAgICB0cnkgeworICAgICAgZXZlbnQg
PSBkb2N1bWVudC5jcmVhdGVFdmVudCgnS2V5RXZlbnRzJyk7CisgICAgICB2YXIgZXZlbnRPcHRz
ID0gX2VtYmVyVmlld3NTeXN0ZW1KcXVlcnkuZGVmYXVsdC5leHRlbmQoe30sIGRlZmF1bHRFdmVu
dE9wdGlvbnMsIG9wdGlvbnMpOworICAgICAgZXZlbnQuaW5pdEtleUV2ZW50KHR5cGUsIGV2ZW50
T3B0cy5jYW5CdWJibGUsIGV2ZW50T3B0cy5jYW5jZWxhYmxlLCB3aW5kb3csIGV2ZW50T3B0cy5j
dHJsS2V5LCBldmVudE9wdHMuYWx0S2V5LCBldmVudE9wdHMuc2hpZnRLZXksIGV2ZW50T3B0cy5t
ZXRhS2V5LCBldmVudE9wdHMua2V5Q29kZSwgZXZlbnRPcHRzLmNoYXJDb2RlKTsKKyAgICB9IGNh
dGNoIChlKSB7CisgICAgICBldmVudCA9IGJ1aWxkQmFzaWNFdmVudCh0eXBlLCBvcHRpb25zKTsK
KyAgICB9CisgICAgcmV0dXJuIGV2ZW50OworICB9OworCisgIGJ1aWxkTW91c2VFdmVudCA9IGZ1
bmN0aW9uIGJ1aWxkTW91c2VFdmVudCh0eXBlKSB7CisgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVu
dHMubGVuZ3RoIDw9IDEgfHwgYXJndW1lbnRzWzFdID09PSB1bmRlZmluZWQgPyB7fSA6IGFyZ3Vt
ZW50c1sxXTsKKworICAgIHZhciBldmVudCA9IHVuZGVmaW5lZDsKKyAgICB0cnkgeworICAgICAg
ZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnTW91c2VFdmVudHMnKTsKKyAgICAgIHZhciBl
dmVudE9wdHMgPSBfZW1iZXJWaWV3c1N5c3RlbUpxdWVyeS5kZWZhdWx0LmV4dGVuZCh7fSwgZGVm
YXVsdEV2ZW50T3B0aW9ucywgb3B0aW9ucyk7CisgICAgICBldmVudC5pbml0TW91c2VFdmVudCh0
eXBlLCBldmVudE9wdHMuY2FuQnViYmxlLCBldmVudE9wdHMuY2FuY2VsYWJsZSwgd2luZG93LCBl
dmVudE9wdHMuZGV0YWlsLCBldmVudE9wdHMuc2NyZWVuWCwgZXZlbnRPcHRzLnNjcmVlblksIGV2
ZW50T3B0cy5jbGllbnRYLCBldmVudE9wdHMuY2xpZW50WSwgZXZlbnRPcHRzLmN0cmxLZXksIGV2
ZW50T3B0cy5hbHRLZXksIGV2ZW50T3B0cy5zaGlmdEtleSwgZXZlbnRPcHRzLm1ldGFLZXksIGV2
ZW50T3B0cy5idXR0b24sIGV2ZW50T3B0cy5yZWxhdGVkVGFyZ2V0KTsKKyAgICB9IGNhdGNoIChl
KSB7CisgICAgICBldmVudCA9IGJ1aWxkQmFzaWNFdmVudCh0eXBlLCBvcHRpb25zKTsKKyAgICB9
CisgICAgcmV0dXJuIGV2ZW50OworICB9OworCisgIGJ1aWxkQmFzaWNFdmVudCA9IGZ1bmN0aW9u
IGJ1aWxkQmFzaWNFdmVudCh0eXBlKSB7CisgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVu
Z3RoIDw9IDEgfHwgYXJndW1lbnRzWzFdID09PSB1bmRlZmluZWQgPyB7fSA6IGFyZ3VtZW50c1sx
XTsKKworICAgIHZhciBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudHMnKTsKKyAg
ICBldmVudC5pbml0RXZlbnQodHlwZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgX2VtYmVyVmlld3NTeXN0
ZW1KcXVlcnkuZGVmYXVsdC5leHRlbmQoZXZlbnQsIG9wdGlvbnMpOworICAgIHJldHVybiBldmVu
dDsKKyAgfTsKKworICBmaXJlRXZlbnQgPSBmdW5jdGlvbiBmaXJlRXZlbnQoZWxlbWVudCwgdHlw
ZSkgeworICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA8PSAyIHx8IGFyZ3VtZW50
c1syXSA9PT0gdW5kZWZpbmVkID8ge30gOiBhcmd1bWVudHNbMl07CisKKyAgICBpZiAoIWVsZW1l
bnQpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgdmFyIGV2ZW50ID0gdW5kZWZpbmVkOwor
ICAgIGlmIChrZXlib2FyZEV2ZW50VHlwZXMuaW5kZXhPZih0eXBlKSA+IC0xKSB7CisgICAgICBl
dmVudCA9IGJ1aWxkS2V5Ym9hcmRFdmVudCh0eXBlLCBvcHRpb25zKTsKKyAgICB9IGVsc2UgaWYg
KG1vdXNlRXZlbnRUeXBlcy5pbmRleE9mKHR5cGUpID4gLTEpIHsKKyAgICAgIHZhciByZWN0ID0g
ZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgICAgIHZhciB4ID0gcmVjdC5sZWZ0
ICsgMTsKKyAgICAgIHZhciB5ID0gcmVjdC50b3AgKyAxOworICAgICAgdmFyIHNpbXVsYXRlZENv
b3JkaW5hdGVzID0geworICAgICAgICBzY3JlZW5YOiB4ICsgNSwKKyAgICAgICAgc2NyZWVuWTog
eSArIDk1LAorICAgICAgICBjbGllbnRYOiB4LAorICAgICAgICBjbGllbnRZOiB5CisgICAgICB9
OworICAgICAgZXZlbnQgPSBidWlsZE1vdXNlRXZlbnQodHlwZSwgX2VtYmVyVmlld3NTeXN0ZW1K
cXVlcnkuZGVmYXVsdC5leHRlbmQoc2ltdWxhdGVkQ29vcmRpbmF0ZXMsIG9wdGlvbnMpKTsKKyAg
ICB9IGVsc2UgeworICAgICAgZXZlbnQgPSBidWlsZEJhc2ljRXZlbnQodHlwZSwgb3B0aW9ucyk7
CisgICAgfQorICAgIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7CisgIH07CisKKyAgZm9j
dXMgPSBmdW5jdGlvbiBmb2N1cyhlbCkgeworICAgIGlmICghZWwpIHsKKyAgICAgIHJldHVybjsK
KyAgICB9CisgICAgdmFyICRlbCA9IF9lbWJlclZpZXdzU3lzdGVtSnF1ZXJ5LmRlZmF1bHQoZWwp
OworICAgIGlmICgkZWwuaXMoJzppbnB1dCwgW2NvbnRlbnRlZGl0YWJsZT10cnVlXScpKSB7Cisg
ICAgICB2YXIgdHlwZSA9ICRlbC5wcm9wKCd0eXBlJyk7CisgICAgICBpZiAodHlwZSAhPT0gJ2No
ZWNrYm94JyAmJiB0eXBlICE9PSAncmFkaW8nICYmIHR5cGUgIT09ICdoaWRkZW4nKSB7CisgICAg
ICAgIF9lbWJlck1ldGFsUnVuX2xvb3AuZGVmYXVsdChudWxsLCBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgLy8gRmlyZWZveCBkb2VzIG5vdCB0cmlnZ2VyIHRoZSBgZm9jdXNpbmAgZXZlbnQgaWYg
dGhlIHdpbmRvdworICAgICAgICAgIC8vIGRvZXMgbm90IGhhdmUgZm9jdXMuIElmIHRoZSBkb2N1
bWVudCBkb2Vzbid0IGhhdmUgZm9jdXMganVzdAorICAgICAgICAgIC8vIHVzZSB0cmlnZ2VyKCdm
b2N1c2luJykgaW5zdGVhZC4KKworICAgICAgICAgIGlmICghZG9jdW1lbnQuaGFzRm9jdXMgfHwg
ZG9jdW1lbnQuaGFzRm9jdXMoKSkgeworICAgICAgICAgICAgZWwuZm9jdXMoKTsKKyAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgJGVsLnRyaWdnZXIoJ2ZvY3VzaW4nKTsKKyAgICAgICAg
ICB9CisgICAgICAgIH0pOworICAgICAgfQorICAgIH0KKyAgfTsKKworICBmdW5jdGlvbiBjdXJy
ZW50Um91dGVOYW1lKGFwcCkgeworICAgIHZhciByb3V0aW5nU2VydmljZSA9IGFwcC5fX2NvbnRh
aW5lcl9fLmxvb2t1cCgnc2VydmljZTotcm91dGluZycpOworCisgICAgcmV0dXJuIF9lbWJlck1l
dGFsUHJvcGVydHlfZ2V0LmdldChyb3V0aW5nU2VydmljZSwgJ2N1cnJlbnRSb3V0ZU5hbWUnKTsK
KyAgfQorCisgIGZ1bmN0aW9uIGN1cnJlbnRQYXRoKGFwcCkgeworICAgIHZhciByb3V0aW5nU2Vy
dmljZSA9IGFwcC5fX2NvbnRhaW5lcl9fLmxvb2t1cCgnc2VydmljZTotcm91dGluZycpOworCisg
ICAgcmV0dXJuIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldChyb3V0aW5nU2VydmljZSwgJ2N1
cnJlbnRQYXRoJyk7CisgIH0KKworICBmdW5jdGlvbiBjdXJyZW50VVJMKGFwcCkgeworICAgIHZh
ciByb3V0ZXIgPSBhcHAuX19jb250YWluZXJfXy5sb29rdXAoJ3JvdXRlcjptYWluJyk7CisKKyAg
ICByZXR1cm4gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHJvdXRlciwgJ2xvY2F0aW9uJyku
Z2V0VVJMKCk7CisgIH0KKworICBmdW5jdGlvbiBwYXVzZVRlc3QoKSB7CisgICAgX2VtYmVyVGVz
dGluZ1Rlc3QuZGVmYXVsdC5hZGFwdGVyLmFzeW5jU3RhcnQoKTsKKyAgICByZXR1cm4gbmV3IF9l
bWJlclJ1bnRpbWVFeHRSc3ZwLmRlZmF1bHQuUHJvbWlzZShmdW5jdGlvbiAoKSB7fSwgJ1Rlc3RB
ZGFwdGVyIHBhdXNlZCBwcm9taXNlJyk7CisgIH0KKworICBmdW5jdGlvbiB2aXNpdChhcHAsIHVy
bCkgeworICAgIHZhciByb3V0ZXIgPSBhcHAuX19jb250YWluZXJfXy5sb29rdXAoJ3JvdXRlcjpt
YWluJyk7CisgICAgdmFyIHNob3VsZEhhbmRsZVVSTCA9IGZhbHNlOworCisgICAgYXBwLmJvb3Qo
KS50aGVuKGZ1bmN0aW9uICgpIHsKKyAgICAgIHJvdXRlci5sb2NhdGlvbi5zZXRVUkwodXJsKTsK
KworICAgICAgaWYgKHNob3VsZEhhbmRsZVVSTCkgeworICAgICAgICBfZW1iZXJNZXRhbFJ1bl9s
b29wLmRlZmF1bHQoYXBwLl9fZGVwcmVjYXRlZEluc3RhbmNlX18sICdoYW5kbGVVUkwnLCB1cmwp
OworICAgICAgfQorICAgIH0pOworCisgICAgaWYgKGFwcC5fcmVhZGluZXNzRGVmZXJyYWxzID4g
MCkgeworICAgICAgcm91dGVyWydpbml0aWFsVVJMJ10gPSB1cmw7CisgICAgICBfZW1iZXJNZXRh
bFJ1bl9sb29wLmRlZmF1bHQoYXBwLCAnYWR2YW5jZVJlYWRpbmVzcycpOworICAgICAgZGVsZXRl
IHJvdXRlclsnaW5pdGlhbFVSTCddOworICAgIH0gZWxzZSB7CisgICAgICBzaG91bGRIYW5kbGVV
UkwgPSB0cnVlOworICAgIH0KKworICAgIHJldHVybiBhcHAudGVzdEhlbHBlcnMud2FpdCgpOwor
ICB9CisKKyAgZnVuY3Rpb24gY2xpY2soYXBwLCBzZWxlY3RvciwgY29udGV4dCkgeworICAgIHZh
ciAkZWwgPSBhcHAudGVzdEhlbHBlcnMuZmluZFdpdGhBc3NlcnQoc2VsZWN0b3IsIGNvbnRleHQp
OworICAgIHZhciBlbCA9ICRlbFswXTsKKworICAgIF9lbWJlck1ldGFsUnVuX2xvb3AuZGVmYXVs
dChudWxsLCBmaXJlRXZlbnQsIGVsLCAnbW91c2Vkb3duJyk7CisKKyAgICBmb2N1cyhlbCk7CisK
KyAgICBfZW1iZXJNZXRhbFJ1bl9sb29wLmRlZmF1bHQobnVsbCwgZmlyZUV2ZW50LCBlbCwgJ21v
dXNldXAnKTsKKyAgICBfZW1iZXJNZXRhbFJ1bl9sb29wLmRlZmF1bHQobnVsbCwgZmlyZUV2ZW50
LCBlbCwgJ2NsaWNrJyk7CisKKyAgICByZXR1cm4gYXBwLnRlc3RIZWxwZXJzLndhaXQoKTsKKyAg
fQorCisgIGZ1bmN0aW9uIHRyaWdnZXJFdmVudChhcHAsIHNlbGVjdG9yLCBjb250ZXh0T3JUeXBl
LCB0eXBlT3JPcHRpb25zLCBwb3NzaWJsZU9wdGlvbnMpIHsKKyAgICB2YXIgYXJpdHkgPSBhcmd1
bWVudHMubGVuZ3RoOworICAgIHZhciBjb250ZXh0LCB0eXBlLCBvcHRpb25zOworCisgICAgaWYg
KGFyaXR5ID09PSAzKSB7CisgICAgICAvLyBjb250ZXh0IGFuZCBvcHRpb25zIGFyZSBvcHRpb25h
bCwgc28gdGhpcyBpcworICAgICAgLy8gYXBwLCBzZWxlY3RvciwgdHlwZQorICAgICAgY29udGV4
dCA9IG51bGw7CisgICAgICB0eXBlID0gY29udGV4dE9yVHlwZTsKKyAgICAgIG9wdGlvbnMgPSB7
fTsKKyAgICB9IGVsc2UgaWYgKGFyaXR5ID09PSA0KSB7CisgICAgICAvLyBjb250ZXh0IGFuZCBv
cHRpb25zIGFyZSBvcHRpb25hbCwgc28gdGhpcyBpcworICAgICAgaWYgKHR5cGVvZiB0eXBlT3JP
cHRpb25zID09PSAnb2JqZWN0JykgeworICAgICAgICAvLyBlaXRoZXIKKyAgICAgICAgLy8gYXBw
LCBzZWxlY3RvciwgdHlwZSwgb3B0aW9ucworICAgICAgICBjb250ZXh0ID0gbnVsbDsKKyAgICAg
ICAgdHlwZSA9IGNvbnRleHRPclR5cGU7CisgICAgICAgIG9wdGlvbnMgPSB0eXBlT3JPcHRpb25z
OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gb3IKKyAgICAgICAgLy8gYXBwLCBzZWxlY3Rv
ciwgY29udGV4dCwgdHlwZQorICAgICAgICBjb250ZXh0ID0gY29udGV4dE9yVHlwZTsKKyAgICAg
ICAgdHlwZSA9IHR5cGVPck9wdGlvbnM7CisgICAgICAgIG9wdGlvbnMgPSB7fTsKKyAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgY29udGV4dCA9IGNvbnRleHRPclR5cGU7CisgICAgICB0eXBl
ID0gdHlwZU9yT3B0aW9uczsKKyAgICAgIG9wdGlvbnMgPSBwb3NzaWJsZU9wdGlvbnM7CisgICAg
fQorCisgICAgdmFyICRlbCA9IGFwcC50ZXN0SGVscGVycy5maW5kV2l0aEFzc2VydChzZWxlY3Rv
ciwgY29udGV4dCk7CisgICAgdmFyIGVsID0gJGVsWzBdOworCisgICAgX2VtYmVyTWV0YWxSdW5f
bG9vcC5kZWZhdWx0KG51bGwsIGZpcmVFdmVudCwgZWwsIHR5cGUsIG9wdGlvbnMpOworCisgICAg
cmV0dXJuIGFwcC50ZXN0SGVscGVycy53YWl0KCk7CisgIH0KKworICBmdW5jdGlvbiBrZXlFdmVu
dChhcHAsIHNlbGVjdG9yLCBjb250ZXh0T3JUeXBlLCB0eXBlT3JLZXlDb2RlLCBrZXlDb2RlKSB7
CisgICAgdmFyIGNvbnRleHQsIHR5cGU7CisKKyAgICBpZiAodHlwZW9mIGtleUNvZGUgPT09ICd1
bmRlZmluZWQnKSB7CisgICAgICBjb250ZXh0ID0gbnVsbDsKKyAgICAgIGtleUNvZGUgPSB0eXBl
T3JLZXlDb2RlOworICAgICAgdHlwZSA9IGNvbnRleHRPclR5cGU7CisgICAgfSBlbHNlIHsKKyAg
ICAgIGNvbnRleHQgPSBjb250ZXh0T3JUeXBlOworICAgICAgdHlwZSA9IHR5cGVPcktleUNvZGU7
CisgICAgfQorCisgICAgcmV0dXJuIGFwcC50ZXN0SGVscGVycy50cmlnZ2VyRXZlbnQoc2VsZWN0
b3IsIGNvbnRleHQsIHR5cGUsIHsga2V5Q29kZToga2V5Q29kZSwgd2hpY2g6IGtleUNvZGUgfSk7
CisgIH0KKworICBmdW5jdGlvbiBmaWxsSW4oYXBwLCBzZWxlY3RvciwgY29udGV4dE9yVGV4dCwg
dGV4dCkgeworICAgIHZhciAkZWwsIGVsLCBjb250ZXh0OworICAgIGlmICh0eXBlb2YgdGV4dCA9
PT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgIHRleHQgPSBjb250ZXh0T3JUZXh0OworICAgIH0gZWxz
ZSB7CisgICAgICBjb250ZXh0ID0gY29udGV4dE9yVGV4dDsKKyAgICB9CisgICAgJGVsID0gYXBw
LnRlc3RIZWxwZXJzLmZpbmRXaXRoQXNzZXJ0KHNlbGVjdG9yLCBjb250ZXh0KTsKKyAgICBlbCA9
ICRlbFswXTsKKyAgICBmb2N1cyhlbCk7CisgICAgX2VtYmVyTWV0YWxSdW5fbG9vcC5kZWZhdWx0
KGZ1bmN0aW9uICgpIHsKKyAgICAgICRlbC52YWwodGV4dCk7CisgICAgICBmaXJlRXZlbnQoZWws
ICdpbnB1dCcpOworICAgICAgZmlyZUV2ZW50KGVsLCAnY2hhbmdlJyk7CisgICAgfSk7CisgICAg
cmV0dXJuIGFwcC50ZXN0SGVscGVycy53YWl0KCk7CisgIH0KKworICBmdW5jdGlvbiBmaW5kV2l0
aEFzc2VydChhcHAsIHNlbGVjdG9yLCBjb250ZXh0KSB7CisgICAgdmFyICRlbCA9IGFwcC50ZXN0
SGVscGVycy5maW5kKHNlbGVjdG9yLCBjb250ZXh0KTsKKyAgICBpZiAoJGVsLmxlbmd0aCA9PT0g
MCkgeworICAgICAgdGhyb3cgbmV3IF9lbWJlck1ldGFsRXJyb3IuZGVmYXVsdCgnRWxlbWVudCAn
ICsgc2VsZWN0b3IgKyAnIG5vdCBmb3VuZC4nKTsKKyAgICB9CisgICAgcmV0dXJuICRlbDsKKyAg
fQorCisgIGZ1bmN0aW9uIGZpbmQoYXBwLCBzZWxlY3RvciwgY29udGV4dCkgeworICAgIHZhciAk
ZWw7CisgICAgY29udGV4dCA9IGNvbnRleHQgfHwgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0
KGFwcCwgJ3Jvb3RFbGVtZW50Jyk7CisgICAgJGVsID0gYXBwLiQoc2VsZWN0b3IsIGNvbnRleHQp
OworCisgICAgcmV0dXJuICRlbDsKKyAgfQorCisgIGZ1bmN0aW9uIGFuZFRoZW4oYXBwLCBjYWxs
YmFjaykgeworICAgIHJldHVybiBhcHAudGVzdEhlbHBlcnMud2FpdChjYWxsYmFjayhhcHApKTsK
KyAgfQorCisgIGZ1bmN0aW9uIHdhaXQoYXBwLCB2YWx1ZSkgeworICAgIHJldHVybiBuZXcgX2Vt
YmVyUnVudGltZUV4dFJzdnAuZGVmYXVsdC5Qcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7Cisg
ICAgICB2YXIgcm91dGVyID0gYXBwLl9fY29udGFpbmVyX18ubG9va3VwKCdyb3V0ZXI6bWFpbicp
OworCisgICAgICAvLyBFdmVyeSAxMG1zLCBwb2xsIGZvciB0aGUgYXN5bmMgdGhpbmcgdG8gaGF2
ZSBmaW5pc2hlZAorICAgICAgdmFyIHdhdGNoZXIgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7
CisgICAgICAgIC8vIDEuIElmIHRoZSByb3V0ZXIgaXMgbG9hZGluZywga2VlcCBwb2xsaW5nCisg
ICAgICAgIHZhciByb3V0ZXJJc0xvYWRpbmcgPSByb3V0ZXIucm91dGVyICYmICEhcm91dGVyLnJv
dXRlci5hY3RpdmVUcmFuc2l0aW9uOworICAgICAgICBpZiAocm91dGVySXNMb2FkaW5nKSB7Cisg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gMi4gSWYgdGhlcmUgYXJl
IHBlbmRpbmcgQWpheCByZXF1ZXN0cywga2VlcCBwb2xsaW5nCisgICAgICAgIGlmIChfZW1iZXJU
ZXN0aW5nVGVzdC5kZWZhdWx0LnBlbmRpbmdBamF4UmVxdWVzdHMpIHsKKyAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICAvLyAzLiBJZiB0aGVyZSBhcmUgc2NoZWR1bGVkIHRp
bWVycyBvciB3ZSBhcmUgaW5zaWRlIG9mIGEgcnVuIGxvb3AsIGtlZXAgcG9sbGluZworICAgICAg
ICBpZiAoX2VtYmVyTWV0YWxSdW5fbG9vcC5kZWZhdWx0Lmhhc1NjaGVkdWxlZFRpbWVycygpIHx8
IF9lbWJlck1ldGFsUnVuX2xvb3AuZGVmYXVsdC5jdXJyZW50UnVuTG9vcCkgeworICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoX2VtYmVyVGVzdGluZ1Rlc3QuZGVmYXVs
dC53YWl0ZXJzICYmIF9lbWJlclRlc3RpbmdUZXN0LmRlZmF1bHQud2FpdGVycy5hbnkoZnVuY3Rp
b24gKHdhaXRlcikgeworICAgICAgICAgIHZhciBjb250ZXh0ID0gd2FpdGVyWzBdOworICAgICAg
ICAgIHZhciBjYWxsYmFjayA9IHdhaXRlclsxXTsKKyAgICAgICAgICByZXR1cm4gIWNhbGxiYWNr
LmNhbGwoY29udGV4dCk7CisgICAgICAgIH0pKSB7CisgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIC8vIFN0b3AgcG9sbGluZworICAgICAgICBjbGVhckludGVydmFsKHdhdGNo
ZXIpOworCisgICAgICAgIC8vIFN5bmNocm9ub3VzbHkgcmVzb2x2ZSB0aGUgcHJvbWlzZQorICAg
ICAgICBfZW1iZXJNZXRhbFJ1bl9sb29wLmRlZmF1bHQobnVsbCwgcmVzb2x2ZSwgdmFsdWUpOwor
ICAgICAgfSwgMTApOworICAgIH0pOworICB9CisKKyAgLyoqCisgICAgTG9hZHMgYSByb3V0ZSwg
c2V0cyB1cCBhbnkgY29udHJvbGxlcnMsIGFuZCByZW5kZXJzIGFueSB0ZW1wbGF0ZXMgYXNzb2Np
YXRlZAorICAgIHdpdGggdGhlIHJvdXRlIGFzIHRob3VnaCBhIHJlYWwgdXNlciBoYWQgdHJpZ2dl
cmVkIHRoZSByb3V0ZSBjaGFuZ2Ugd2hpbGUKKyAgICB1c2luZyB5b3VyIGFwcC4KKyAgCisgICAg
RXhhbXBsZToKKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIHZpc2l0KCdwb3N0cy9pbmRleCcp
LnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAvLyBhc3NlcnQgc29tZXRoaW5nCisgICAgfSk7Cisg
ICAgYGBgCisgIAorICAgIEBtZXRob2QgdmlzaXQKKyAgICBAcGFyYW0ge1N0cmluZ30gdXJsIHRo
ZSBuYW1lIG9mIHRoZSByb3V0ZQorICAgIEByZXR1cm4ge1JTVlAuUHJvbWlzZX0KKyAgICBAcHVi
bGljCisgICovCisgIGFzeW5jSGVscGVyKCd2aXNpdCcsIHZpc2l0KTsKKworICAvKioKKyAgICBD
bGlja3MgYW4gZWxlbWVudCBhbmQgdHJpZ2dlcnMgYW55IGFjdGlvbnMgdHJpZ2dlcmVkIGJ5IHRo
ZSBlbGVtZW50J3MgYGNsaWNrYAorICAgIGV2ZW50LgorICAKKyAgICBFeGFtcGxlOgorICAKKyAg
ICBgYGBqYXZhc2NyaXB0CisgICAgY2xpY2soJy5zb21lLWpRdWVyeS1zZWxlY3RvcicpLnRoZW4o
ZnVuY3Rpb24oKSB7CisgICAgICAvLyBhc3NlcnQgc29tZXRoaW5nCisgICAgfSk7CisgICAgYGBg
CisgIAorICAgIEBtZXRob2QgY2xpY2sKKyAgICBAcGFyYW0ge1N0cmluZ30gc2VsZWN0b3IgalF1
ZXJ5IHNlbGVjdG9yIGZvciBmaW5kaW5nIGVsZW1lbnQgb24gdGhlIERPTQorICAgIEByZXR1cm4g
e1JTVlAuUHJvbWlzZX0KKyAgICBAcHVibGljCisgICovCisgIGFzeW5jSGVscGVyKCdjbGljaycs
IGNsaWNrKTsKKworICAvKioKKyAgICBTaW11bGF0ZXMgYSBrZXkgZXZlbnQsIGUuZy4gYGtleXBy
ZXNzYCwgYGtleWRvd25gLCBga2V5dXBgIHdpdGggdGhlIGRlc2lyZWQga2V5Q29kZQorICAKKyAg
ICBFeGFtcGxlOgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAga2V5RXZlbnQoJy5zb21lLWpR
dWVyeS1zZWxlY3RvcicsICdrZXlwcmVzcycsIDEzKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAv
LyBhc3NlcnQgc29tZXRoaW5nCisgICAgfSk7CisgICAgYGBgCisgIAorICAgIEBtZXRob2Qga2V5
RXZlbnQKKyAgICBAcGFyYW0ge1N0cmluZ30gc2VsZWN0b3IgalF1ZXJ5IHNlbGVjdG9yIGZvciBm
aW5kaW5nIGVsZW1lbnQgb24gdGhlIERPTQorICAgIEBwYXJhbSB7U3RyaW5nfSB0eXBlIHRoZSB0
eXBlIG9mIGtleSBldmVudCwgZS5nLiBga2V5cHJlc3NgLCBga2V5ZG93bmAsIGBrZXl1cGAKKyAg
ICBAcGFyYW0ge051bWJlcn0ga2V5Q29kZSB0aGUga2V5Q29kZSBvZiB0aGUgc2ltdWxhdGVkIGtl
eSBldmVudAorICAgIEByZXR1cm4ge1JTVlAuUHJvbWlzZX0KKyAgICBAc2luY2UgMS41LjAKKyAg
ICBAcHVibGljCisgICovCisgIGFzeW5jSGVscGVyKCdrZXlFdmVudCcsIGtleUV2ZW50KTsKKwor
ICAvKioKKyAgICBGaWxscyBpbiBhbiBpbnB1dCBlbGVtZW50IHdpdGggc29tZSB0ZXh0LgorICAK
KyAgICBFeGFtcGxlOgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgZmlsbEluKCcjZW1haWwn
LCAneW91QGV4YW1wbGUuY29tJykudGhlbihmdW5jdGlvbigpIHsKKyAgICAgIC8vIGFzc2VydCBz
b21ldGhpbmcKKyAgICB9KTsKKyAgICBgYGAKKyAgCisgICAgQG1ldGhvZCBmaWxsSW4KKyAgICBA
cGFyYW0ge1N0cmluZ30gc2VsZWN0b3IgalF1ZXJ5IHNlbGVjdG9yIGZpbmRpbmcgYW4gaW5wdXQg
ZWxlbWVudCBvbiB0aGUgRE9NCisgICAgdG8gZmlsbCB0ZXh0IHdpdGgKKyAgICBAcGFyYW0ge1N0
cmluZ30gdGV4dCB0ZXh0IHRvIHBsYWNlIGluc2lkZSB0aGUgaW5wdXQgZWxlbWVudAorICAgIEBy
ZXR1cm4ge1JTVlAuUHJvbWlzZX0KKyAgICBAcHVibGljCisgICovCisgIGFzeW5jSGVscGVyKCdm
aWxsSW4nLCBmaWxsSW4pOworCisgIC8qKgorICAgIEZpbmRzIGFuIGVsZW1lbnQgaW4gdGhlIGNv
bnRleHQgb2YgdGhlIGFwcCdzIGNvbnRhaW5lciBlbGVtZW50LiBBIHNpbXBsZSBhbGlhcworICAg
IGZvciBgYXBwLiQoc2VsZWN0b3IpYC4KKyAgCisgICAgRXhhbXBsZToKKyAgCisgICAgYGBgamF2
YXNjcmlwdAorICAgIHZhciAkZWwgPSBmaW5kKCcubXktc2VsZWN0b3InKTsKKyAgICBgYGAKKyAg
CisgICAgQG1ldGhvZCBmaW5kCisgICAgQHBhcmFtIHtTdHJpbmd9IHNlbGVjdG9yIGpRdWVyeSBz
dHJpbmcgc2VsZWN0b3IgZm9yIGVsZW1lbnQgbG9va3VwCisgICAgQHJldHVybiB7T2JqZWN0fSBq
UXVlcnkgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcmVzdWx0cyBvZiB0aGUgcXVlcnkKKyAgICBA
cHVibGljCisgICovCisgIGhlbHBlcignZmluZCcsIGZpbmQpOworCisgIC8qKgorICAgIExpa2Ug
YGZpbmRgLCBidXQgdGhyb3dzIGFuIGVycm9yIGlmIHRoZSBlbGVtZW50IHNlbGVjdG9yIHJldHVy
bnMgbm8gcmVzdWx0cy4KKyAgCisgICAgRXhhbXBsZToKKyAgCisgICAgYGBgamF2YXNjcmlwdAor
ICAgIHZhciAkZWwgPSBmaW5kV2l0aEFzc2VydCgnLmRvZXNudC1leGlzdCcpOyAvLyB0aHJvd3Mg
ZXJyb3IKKyAgICBgYGAKKyAgCisgICAgQG1ldGhvZCBmaW5kV2l0aEFzc2VydAorICAgIEBwYXJh
bSB7U3RyaW5nfSBzZWxlY3RvciBqUXVlcnkgc2VsZWN0b3Igc3RyaW5nIGZvciBmaW5kaW5nIGFu
IGVsZW1lbnQgd2l0aGluCisgICAgdGhlIERPTQorICAgIEByZXR1cm4ge09iamVjdH0galF1ZXJ5
IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHJlc3VsdHMgb2YgdGhlIHF1ZXJ5CisgICAgQHRocm93
cyB7RXJyb3J9IHRocm93cyBlcnJvciBpZiBqUXVlcnkgb2JqZWN0IHJldHVybmVkIGhhcyBhIGxl
bmd0aCBvZiAwCisgICAgQHB1YmxpYworICAqLworICBoZWxwZXIoJ2ZpbmRXaXRoQXNzZXJ0Jywg
ZmluZFdpdGhBc3NlcnQpOworCisgIC8qKgorICAgIENhdXNlcyB0aGUgcnVuIGxvb3AgdG8gcHJv
Y2VzcyBhbnkgcGVuZGluZyBldmVudHMuIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgdGhhdAorICAg
IGFueSBhc3luYyBvcGVyYXRpb25zIGZyb20gb3RoZXIgaGVscGVycyAob3IgeW91ciBhc3NlcnRp
b25zKSBoYXZlIGJlZW4gcHJvY2Vzc2VkLgorICAKKyAgICBUaGlzIGlzIG1vc3Qgb2Z0ZW4gdXNl
ZCBhcyB0aGUgcmV0dXJuIHZhbHVlIGZvciB0aGUgaGVscGVyIGZ1bmN0aW9ucyAoc2VlICdjbGlj
aycsCisgICAgJ2ZpbGxJbicsJ3Zpc2l0JyxldGMpLgorICAKKyAgICBFeGFtcGxlOgorICAKKyAg
ICBgYGBqYXZhc2NyaXB0CisgICAgRW1iZXIuVGVzdC5yZWdpc3RlckFzeW5jSGVscGVyKCdsb2dp
blVzZXInLCBmdW5jdGlvbihhcHAsIHVzZXJuYW1lLCBwYXNzd29yZCkgeworICAgICAgdmlzaXQo
J3NlY3VyZWQvcGF0aC9oZXJlJykKKyAgICAgIC5maWxsSW4oJyN1c2VybmFtZScsIHVzZXJuYW1l
KQorICAgICAgLmZpbGxJbignI3Bhc3N3b3JkJywgcGFzc3dvcmQpCisgICAgICAuY2xpY2soJy5z
dWJtaXQnKQorICAKKyAgICAgIHJldHVybiBhcHAudGVzdEhlbHBlcnMud2FpdCgpOworICAgIH0p
OworICAKKyAgICBAbWV0aG9kIHdhaXQKKyAgICBAcGFyYW0ge09iamVjdH0gdmFsdWUgVGhlIHZh
bHVlIHRvIGJlIHJldHVybmVkLgorICAgIEByZXR1cm4ge1JTVlAuUHJvbWlzZX0KKyAgICBAcHVi
bGljCisgICovCisgIGFzeW5jSGVscGVyKCd3YWl0Jywgd2FpdCk7CisgIGFzeW5jSGVscGVyKCdh
bmRUaGVuJywgYW5kVGhlbik7CisKKyAgLyoqCisgICAgUmV0dXJucyB0aGUgY3VycmVudGx5IGFj
dGl2ZSByb3V0ZSBuYW1lLgorICAKKyAgRXhhbXBsZToKKyAgCisgIGBgYGphdmFzY3JpcHQKKyAg
ZnVuY3Rpb24gdmFsaWRhdGVSb3V0ZU5hbWUoKSB7CisgICAgZXF1YWwoY3VycmVudFJvdXRlTmFt
ZSgpLCAnc29tZS5wYXRoJywgImNvcnJlY3Qgcm91dGUgd2FzIHRyYW5zaXRpb25lZCBpbnRvLiIp
OworICB9CisgIAorICB2aXNpdCgnL3NvbWUvcGF0aCcpLnRoZW4odmFsaWRhdGVSb3V0ZU5hbWUp
CisgIGBgYAorICAKKyAgQG1ldGhvZCBjdXJyZW50Um91dGVOYW1lCisgIEByZXR1cm4ge09iamVj
dH0gVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgcm91dGUuCisgIEBzaW5jZSAxLjUu
MAorICBAcHVibGljCisgICovCisgIGhlbHBlcignY3VycmVudFJvdXRlTmFtZScsIGN1cnJlbnRS
b3V0ZU5hbWUpOworCisgIC8qKgorICAgIFJldHVybnMgdGhlIGN1cnJlbnQgcGF0aC4KKyAgCisg
IEV4YW1wbGU6CisgIAorICBgYGBqYXZhc2NyaXB0CisgIGZ1bmN0aW9uIHZhbGlkYXRlVVJMKCkg
eworICAgIGVxdWFsKGN1cnJlbnRQYXRoKCksICdzb21lLnBhdGguaW5kZXgnLCAiY29ycmVjdCBw
YXRoIHdhcyB0cmFuc2l0aW9uZWQgaW50by4iKTsKKyAgfQorICAKKyAgY2xpY2soJyNzb21lLWxp
bmstaWQnKS50aGVuKHZhbGlkYXRlVVJMKTsKKyAgYGBgCisgIAorICBAbWV0aG9kIGN1cnJlbnRQ
YXRoCisgIEByZXR1cm4ge09iamVjdH0gVGhlIGN1cnJlbnRseSBhY3RpdmUgcGF0aC4KKyAgQHNp
bmNlIDEuNS4wCisgIEBwdWJsaWMKKyAgKi8KKyAgaGVscGVyKCdjdXJyZW50UGF0aCcsIGN1cnJl
bnRQYXRoKTsKKworICAvKioKKyAgICBSZXR1cm5zIHRoZSBjdXJyZW50IFVSTC4KKyAgCisgIEV4
YW1wbGU6CisgIAorICBgYGBqYXZhc2NyaXB0CisgIGZ1bmN0aW9uIHZhbGlkYXRlVVJMKCkgewor
ICAgIGVxdWFsKGN1cnJlbnRVUkwoKSwgJy9zb21lL3BhdGgnLCAiY29ycmVjdCBVUkwgd2FzIHRy
YW5zaXRpb25lZCBpbnRvLiIpOworICB9CisgIAorICBjbGljaygnI3NvbWUtbGluay1pZCcpLnRo
ZW4odmFsaWRhdGVVUkwpOworICBgYGAKKyAgCisgIEBtZXRob2QgY3VycmVudFVSTAorICBAcmV0
dXJuIHtPYmplY3R9IFRoZSBjdXJyZW50bHkgYWN0aXZlIFVSTC4KKyAgQHNpbmNlIDEuNS4wCisg
IEBwdWJsaWMKKyAgKi8KKyAgaGVscGVyKCdjdXJyZW50VVJMJywgY3VycmVudFVSTCk7CisKKyAg
LyoqCisgICBQYXVzZXMgdGhlIGN1cnJlbnQgdGVzdCAtIHRoaXMgaXMgdXNlZnVsIGZvciBkZWJ1
Z2dpbmcgd2hpbGUgdGVzdGluZyBvciBmb3IgdGVzdC1kcml2aW5nLgorICAgSXQgYWxsb3dzIHlv
dSB0byBpbnNwZWN0IHRoZSBzdGF0ZSBvZiB5b3VyIGFwcGxpY2F0aW9uIGF0IGFueSBwb2ludC4K
KyAgCisgICBFeGFtcGxlIChUaGUgdGVzdCB3aWxsIHBhdXNlIGJlZm9yZSBjbGlja2luZyB0aGUg
YnV0dG9uKToKKyAgCisgICBgYGBqYXZhc2NyaXB0CisgICB2aXNpdCgnLycpCisgICByZXR1cm4g
cGF1c2VUZXN0KCk7CisgIAorICAgY2xpY2soJy5idG4nKTsKKyAgIGBgYAorICAKKyAgIEBzaW5j
ZSAxLjkuMAorICAgQG1ldGhvZCBwYXVzZVRlc3QKKyAgIEByZXR1cm4ge09iamVjdH0gQSBwcm9t
aXNlIHRoYXQgd2lsbCBuZXZlciByZXNvbHZlCisgICBAcHVibGljCisgICovCisgIGhlbHBlcign
cGF1c2VUZXN0JywgcGF1c2VUZXN0KTsKKworICAvKioKKyAgICBUcmlnZ2VycyB0aGUgZ2l2ZW4g
RE9NIGV2ZW50IG9uIHRoZSBlbGVtZW50IGlkZW50aWZpZWQgYnkgdGhlIHByb3ZpZGVkIHNlbGVj
dG9yLgorICAKKyAgICBFeGFtcGxlOgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgdHJpZ2dl
ckV2ZW50KCcjc29tZS1lbGVtLWlkJywgJ2JsdXInKTsKKyAgICBgYGAKKyAgCisgICAgVGhpcyBp
cyBhY3R1YWxseSB1c2VkIGludGVybmFsbHkgYnkgdGhlIGBrZXlFdmVudGAgaGVscGVyIGxpa2Ug
c286CisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAgICB0cmlnZ2VyRXZlbnQoJyNzb21lLWVsZW0t
aWQnLCAna2V5cHJlc3MnLCB7IGtleUNvZGU6IDEzIH0pOworICAgIGBgYAorICAKKyAgIEBtZXRo
b2QgdHJpZ2dlckV2ZW50CisgICBAcGFyYW0ge1N0cmluZ30gc2VsZWN0b3IgalF1ZXJ5IHNlbGVj
dG9yIGZvciBmaW5kaW5nIGVsZW1lbnQgb24gdGhlIERPTQorICAgQHBhcmFtIHtTdHJpbmd9IFtj
b250ZXh0XSBqUXVlcnkgc2VsZWN0b3IgdGhhdCB3aWxsIGxpbWl0IHRoZSBzZWxlY3RvcgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudCB0byBmaW5kIG9ubHkgd2l0aGluIHRo
ZSBjb250ZXh0J3MgY2hpbGRyZW4KKyAgIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSBldmVudCB0
eXBlIHRvIGJlIHRyaWdnZXJlZC4KKyAgIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gVGhlIG9w
dGlvbnMgdG8gYmUgcGFzc2VkIHRvIGpRdWVyeS5FdmVudC4KKyAgIEByZXR1cm4ge1JTVlAuUHJv
bWlzZX0KKyAgIEBzaW5jZSAxLjUuMAorICAgQHB1YmxpYworICAqLworICBhc3luY0hlbHBlcign
dHJpZ2dlckV2ZW50JywgdHJpZ2dlckV2ZW50KTsKK30pOworCisvLyBGaXJlZm94IGRvZXMgbm90
IHRyaWdnZXIgdGhlIGBmb2N1c2luYCBldmVudCBpZiB0aGUgd2luZG93CisvLyBkb2VzIG5vdCBo
YXZlIGZvY3VzLiBJZiB0aGUgZG9jdW1lbnQgZG9lc24ndCBoYXZlIGZvY3VzIGp1c3QKKy8vIHVz
ZSB0cmlnZ2VyKCdmb2N1c2luJykgaW5zdGVhZC4KK2VuaWZlZCgnZW1iZXItdGVzdGluZy9pbmRl
eCcsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9jb3JlJywgJ2VtYmVyLXRlc3RpbmcvaW5pdGlh
bGl6ZXJzJywgJ2VtYmVyLXRlc3Rpbmcvc3VwcG9ydCcsICdlbWJlci10ZXN0aW5nL3NldHVwX2Zv
cl90ZXN0aW5nJywgJ2VtYmVyLXRlc3RpbmcvdGVzdCcsICdlbWJlci10ZXN0aW5nL2FkYXB0ZXJz
L2FkYXB0ZXInLCAnZW1iZXItdGVzdGluZy9hZGFwdGVycy9xdW5pdCcsICdlbWJlci10ZXN0aW5n
L2hlbHBlcnMnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsQ29yZSwgX2VtYmVyVGVz
dGluZ0luaXRpYWxpemVycywgX2VtYmVyVGVzdGluZ1N1cHBvcnQsIF9lbWJlclRlc3RpbmdTZXR1
cF9mb3JfdGVzdGluZywgX2VtYmVyVGVzdGluZ1Rlc3QsIF9lbWJlclRlc3RpbmdBZGFwdGVyc0Fk
YXB0ZXIsIF9lbWJlclRlc3RpbmdBZGFwdGVyc1F1bml0LCBfZW1iZXJUZXN0aW5nSGVscGVycykg
eworICAndXNlIHN0cmljdCc7CisKKyAgLy8gYWRkcyBoZWxwZXJzIHRvIGhlbHBlcnMgb2JqZWN0
IGluIFRlc3QKKworICAvKioKKyAgICBAbW9kdWxlIGVtYmVyCisgICAgQHN1Ym1vZHVsZSBlbWJl
ci10ZXN0aW5nCisgICovCisKKyAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuVGVzdCA9IF9lbWJl
clRlc3RpbmdUZXN0LmRlZmF1bHQ7CisgIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LlRlc3QuQWRh
cHRlciA9IF9lbWJlclRlc3RpbmdBZGFwdGVyc0FkYXB0ZXIuZGVmYXVsdDsKKyAgX2VtYmVyTWV0
YWxDb3JlLmRlZmF1bHQuVGVzdC5RVW5pdEFkYXB0ZXIgPSBfZW1iZXJUZXN0aW5nQWRhcHRlcnNR
dW5pdC5kZWZhdWx0OworICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5zZXR1cEZvclRlc3Rpbmcg
PSBfZW1iZXJUZXN0aW5nU2V0dXBfZm9yX3Rlc3RpbmcuZGVmYXVsdDsKK30pOworLy8gdG8gc2V0
dXAgaW5pdGlhbGl6ZXIKKy8vIHRvIGhhbmRsZSB2YXJpb3VzIGVkZ2UgY2FzZXMKK2VuaWZlZCgn
ZW1iZXItdGVzdGluZy9pbml0aWFsaXplcnMnLCBbJ2V4cG9ydHMnLCAnZW1iZXItcnVudGltZS9z
eXN0ZW0vbGF6eV9sb2FkJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJSdW50aW1lU3lzdGVt
TGF6eV9sb2FkKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICB2YXIgbmFtZSA9ICdkZWZlclJlYWRp
bmVzcyBpbiBgdGVzdGluZ2AgbW9kZSc7CisKKyAgX2VtYmVyUnVudGltZVN5c3RlbUxhenlfbG9h
ZC5vbkxvYWQoJ0VtYmVyLkFwcGxpY2F0aW9uJywgZnVuY3Rpb24gKEFwcGxpY2F0aW9uKSB7Cisg
ICAgaWYgKCFBcHBsaWNhdGlvbi5pbml0aWFsaXplcnNbbmFtZV0pIHsKKyAgICAgIEFwcGxpY2F0
aW9uLmluaXRpYWxpemVyKHsKKyAgICAgICAgbmFtZTogbmFtZSwKKworICAgICAgICBpbml0aWFs
aXplOiBmdW5jdGlvbiAoYXBwbGljYXRpb24pIHsKKyAgICAgICAgICBpZiAoYXBwbGljYXRpb24u
dGVzdGluZykgeworICAgICAgICAgICAgYXBwbGljYXRpb24uZGVmZXJSZWFkaW5lc3MoKTsKKyAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0KKyAgfSk7Cit9KTsKK2VuaWZl
ZCgnZW1iZXItdGVzdGluZy9zZXR1cF9mb3JfdGVzdGluZycsIFsnZXhwb3J0cycsICdlbWJlci1t
ZXRhbC9jb3JlJywgJ2VtYmVyLXRlc3RpbmcvYWRhcHRlcnMvcXVuaXQnLCAnZW1iZXItdmlld3Mv
c3lzdGVtL2pxdWVyeSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxDb3JlLCBfZW1i
ZXJUZXN0aW5nQWRhcHRlcnNRdW5pdCwgX2VtYmVyVmlld3NTeXN0ZW1KcXVlcnkpIHsKKyAgJ3Vz
ZSBzdHJpY3QnOworCisgIGV4cG9ydHMuZGVmYXVsdCA9IHNldHVwRm9yVGVzdGluZzsKKworICB2
YXIgVGVzdCwgcmVxdWVzdHM7CisKKyAgZnVuY3Rpb24gaW5jcmVtZW50QWpheFBlbmRpbmdSZXF1
ZXN0cyhfLCB4aHIpIHsKKyAgICByZXF1ZXN0cy5wdXNoKHhocik7CisgICAgVGVzdC5wZW5kaW5n
QWpheFJlcXVlc3RzID0gcmVxdWVzdHMubGVuZ3RoOworICB9CisKKyAgZnVuY3Rpb24gZGVjcmVt
ZW50QWpheFBlbmRpbmdSZXF1ZXN0cyhfLCB4aHIpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7CisgICAgICBpZiAoeGhyID09PSByZXF1ZXN0c1tpXSkg
eworICAgICAgICByZXF1ZXN0cy5zcGxpY2UoaSwgMSk7CisgICAgICB9CisgICAgfQorICAgIFRl
c3QucGVuZGluZ0FqYXhSZXF1ZXN0cyA9IHJlcXVlc3RzLmxlbmd0aDsKKyAgfQorCisgIC8qKgor
ICAgIFNldHMgRW1iZXIgdXAgZm9yIHRlc3RpbmcuIFRoaXMgaXMgdXNlZnVsIHRvIHBlcmZvcm0K
KyAgICBiYXNpYyBzZXR1cCBzdGVwcyBpbiBvcmRlciB0byB1bml0IHRlc3QuCisgIAorICAgIFVz
ZSBgQXBwLnNldHVwRm9yVGVzdGluZ2AgdG8gcGVyZm9ybSBpbnRlZ3JhdGlvbiB0ZXN0cyAoZnVs
bAorICAgIGFwcGxpY2F0aW9uIHRlc3RpbmcpLgorICAKKyAgICBAbWV0aG9kIHNldHVwRm9yVGVz
dGluZworICAgIEBuYW1lc3BhY2UgRW1iZXIKKyAgICBAc2luY2UgMS41LjAKKyAgICBAcHJpdmF0
ZQorICAqLworCisgIGZ1bmN0aW9uIHNldHVwRm9yVGVzdGluZygpIHsKKyAgICBpZiAoIVRlc3Qp
IHsKKyAgICAgIFRlc3QgPSByZXF1aXJlTW9kdWxlKCdlbWJlci10ZXN0aW5nL3Rlc3QnKVsnZGVm
YXVsdCddOworICAgIH0KKworICAgIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LnRlc3RpbmcgPSB0
cnVlOworCisgICAgLy8gaWYgYWRhcHRlciBpcyBub3QgbWFudWFsbHkgc2V0IGRlZmF1bHQgdG8g
UVVuaXQKKyAgICBpZiAoIVRlc3QuYWRhcHRlcikgeworICAgICAgVGVzdC5hZGFwdGVyID0gX2Vt
YmVyVGVzdGluZ0FkYXB0ZXJzUXVuaXQuZGVmYXVsdC5jcmVhdGUoKTsKKyAgICB9CisKKyAgICBy
ZXF1ZXN0cyA9IFtdOworICAgIFRlc3QucGVuZGluZ0FqYXhSZXF1ZXN0cyA9IHJlcXVlc3RzLmxl
bmd0aDsKKworICAgIF9lbWJlclZpZXdzU3lzdGVtSnF1ZXJ5LmRlZmF1bHQoZG9jdW1lbnQpLm9m
ZignYWpheFNlbmQnLCBpbmNyZW1lbnRBamF4UGVuZGluZ1JlcXVlc3RzKTsKKyAgICBfZW1iZXJW
aWV3c1N5c3RlbUpxdWVyeS5kZWZhdWx0KGRvY3VtZW50KS5vZmYoJ2FqYXhDb21wbGV0ZScsIGRl
Y3JlbWVudEFqYXhQZW5kaW5nUmVxdWVzdHMpOworICAgIF9lbWJlclZpZXdzU3lzdGVtSnF1ZXJ5
LmRlZmF1bHQoZG9jdW1lbnQpLm9uKCdhamF4U2VuZCcsIGluY3JlbWVudEFqYXhQZW5kaW5nUmVx
dWVzdHMpOworICAgIF9lbWJlclZpZXdzU3lzdGVtSnF1ZXJ5LmRlZmF1bHQoZG9jdW1lbnQpLm9u
KCdhamF4Q29tcGxldGUnLCBkZWNyZW1lbnRBamF4UGVuZGluZ1JlcXVlc3RzKTsKKyAgfQorfSk7
CisKKy8vIGltcG9ydCBUZXN0IGZyb20gImVtYmVyLXRlc3RpbmcvdGVzdCI7ICAvLyBFUzZUT0RP
OiBmaXggd2hlbiBjeWNsZXMgYXJlIHN1cHBvcnRlZAorZW5pZmVkKCdlbWJlci10ZXN0aW5nL3N1
cHBvcnQnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvZGVidWcnLCAnZW1iZXItdmlld3Mvc3lz
dGVtL2pxdWVyeScsICdlbWJlci1tZXRhbC9lbnZpcm9ubWVudCddLCBmdW5jdGlvbiAoZXhwb3J0
cywgX2VtYmVyTWV0YWxEZWJ1ZywgX2VtYmVyVmlld3NTeXN0ZW1KcXVlcnksIF9lbWJlck1ldGFs
RW52aXJvbm1lbnQpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIC8qKgorICAgIEBtb2R1bGUgZW1i
ZXIKKyAgICBAc3VibW9kdWxlIGVtYmVyLXRlc3RpbmcKKyAgKi8KKworICB2YXIgJCA9IF9lbWJl
clZpZXdzU3lzdGVtSnF1ZXJ5LmRlZmF1bHQ7CisKKyAgLyoqCisgICAgVGhpcyBtZXRob2QgY3Jl
YXRlcyBhIGNoZWNrYm94IGFuZCB0cmlnZ2VycyB0aGUgY2xpY2sgZXZlbnQgdG8gZmlyZSB0aGUK
KyAgICBwYXNzZWQgaW4gaGFuZGxlci4gSXQgaXMgdXNlZCB0byBjb3JyZWN0IGZvciBhIGJ1ZyBp
biBvbGRlciB2ZXJzaW9ucworICAgIG9mIGpRdWVyeSAoZS5nIDEuOC4zKS4KKyAgCisgICAgQHBy
aXZhdGUKKyAgICBAbWV0aG9kIHRlc3RDaGVja2JveENsaWNrCisgICovCisgIGZ1bmN0aW9uIHRl
c3RDaGVja2JveENsaWNrKGhhbmRsZXIpIHsKKyAgICAkKCc8aW5wdXQgdHlwZT0iY2hlY2tib3gi
PicpLmNzcyh7IHBvc2l0aW9uOiAnYWJzb2x1dGUnLCBsZWZ0OiAnLTEwMDBweCcsIHRvcDogJy0x
MDAwcHgnIH0pLmFwcGVuZFRvKCdib2R5Jykub24oJ2NsaWNrJywgaGFuZGxlcikudHJpZ2dlcign
Y2xpY2snKS5yZW1vdmUoKTsKKyAgfQorCisgIGlmIChfZW1iZXJNZXRhbEVudmlyb25tZW50LmRl
ZmF1bHQuaGFzRE9NKSB7CisgICAgJChmdW5jdGlvbiAoKSB7CisgICAgICAvKgorICAgICAgICBE
ZXRlcm1pbmUgd2hldGhlciBhIGNoZWNrYm94IGNoZWNrZWQgdXNpbmcgalF1ZXJ5J3MgImNsaWNr
IiBtZXRob2Qgd2lsbCBoYXZlCisgICAgICAgIHRoZSBjb3JyZWN0IHZhbHVlIGZvciBpdHMgY2hl
Y2tlZCBwcm9wZXJ0eS4KKyAgICAgICAgIElmIHdlIGRldGVybWluZSB0aGF0IHRoZSBjdXJyZW50
IGpRdWVyeSB2ZXJzaW9uIGV4aGliaXRzIHRoaXMgYmVoYXZpb3IsCisgICAgICAgIHBhdGNoIGl0
IHRvIHdvcmsgY29ycmVjdGx5IGFzIGluIHRoZSBjb21taXQgZm9yIHRoZSBhY3R1YWwgZml4Ogor
ICAgICAgICBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9jb21taXQvMWZiMmY5Mi4K
KyAgICAgICovCisgICAgICB0ZXN0Q2hlY2tib3hDbGljayhmdW5jdGlvbiAoKSB7CisgICAgICAg
IGlmICghdGhpcy5jaGVja2VkICYmICEkLmV2ZW50LnNwZWNpYWwuY2xpY2spIHsKKyAgICAgICAg
ICAkLmV2ZW50LnNwZWNpYWwuY2xpY2sgPSB7CisgICAgICAgICAgICAvLyBGb3IgY2hlY2tib3gs
IGZpcmUgbmF0aXZlIGV2ZW50IHNvIGNoZWNrZWQgc3RhdGUgd2lsbCBiZSByaWdodAorICAgICAg
ICAgICAgdHJpZ2dlcjogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICBpZiAoJC5ub2RlTmFt
ZSh0aGlzLCAnaW5wdXQnKSAmJiB0aGlzLnR5cGUgPT09ICdjaGVja2JveCcgJiYgdGhpcy5jbGlj
aykgeworICAgICAgICAgICAgICAgIHRoaXMuY2xpY2soKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9Owor
ICAgICAgICB9CisgICAgICB9KTsKKworICAgICAgLy8gVHJ5IGFnYWluIHRvIHZlcmlmeSB0aGF0
IHRoZSBwYXRjaCB0b29rIGVmZmVjdCBvciBibG93IHVwLgorICAgICAgdGVzdENoZWNrYm94Q2xp
Y2soZnVuY3Rpb24gKCkgeworICAgICAgICBfZW1iZXJNZXRhbERlYnVnLndhcm4oJ2NsaWNrZWQg
Y2hlY2tib3hlcyBzaG91bGQgYmUgY2hlY2tlZCEgdGhlIGpRdWVyeSBwYXRjaCBkaWRuXCd0IHdv
cmsnLCB0aGlzLmNoZWNrZWQsIHsgaWQ6ICdlbWJlci10ZXN0aW5nLnRlc3QtY2hlY2tib3gtY2xp
Y2snIH0pOworICAgICAgfSk7CisgICAgfSk7CisgIH0KK30pOworZW5pZmVkKCdlbWJlci10ZXN0
aW5nL3Rlc3QnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvcnVuX2xvb3AnLCAnZW1iZXItcnVu
dGltZS9leHQvcnN2cCcsICdlbWJlci10ZXN0aW5nL3NldHVwX2Zvcl90ZXN0aW5nJywgJ2VtYmVy
LWFwcGxpY2F0aW9uL3N5c3RlbS9hcHBsaWNhdGlvbicsICdlbWJlci1ydW50aW1lL3N5c3RlbS9u
YXRpdmVfYXJyYXknXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsUnVuX2xvb3AsIF9l
bWJlclJ1bnRpbWVFeHRSc3ZwLCBfZW1iZXJUZXN0aW5nU2V0dXBfZm9yX3Rlc3RpbmcsIF9lbWJl
ckFwcGxpY2F0aW9uU3lzdGVtQXBwbGljYXRpb24sIF9lbWJlclJ1bnRpbWVTeXN0ZW1OYXRpdmVf
YXJyYXkpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIC8qKgorICAgIEBtb2R1bGUgZW1iZXIKKyAg
ICBAc3VibW9kdWxlIGVtYmVyLXRlc3RpbmcKKyAgKi8KKyAgdmFyIGhlbHBlcnMgPSB7fTsKKyAg
dmFyIGluamVjdEhlbHBlcnNDYWxsYmFja3MgPSBbXTsKKworICAvKioKKyAgICBUaGlzIGlzIGEg
Y29udGFpbmVyIGZvciBhbiBhc3NvcnRtZW50IG9mIHRlc3RpbmcgcmVsYXRlZCBmdW5jdGlvbmFs
aXR5OgorICAKKyAgICAqIENob29zZSB5b3VyIGRlZmF1bHQgdGVzdCBhZGFwdGVyIChmb3IgeW91
ciBmcmFtZXdvcmsgb2YgY2hvaWNlKS4KKyAgICAqIFJlZ2lzdGVyL1VucmVnaXN0ZXIgYWRkaXRp
b25hbCB0ZXN0IGhlbHBlcnMuCisgICAgKiBTZXR1cCBjYWxsYmFja3MgdG8gYmUgZmlyZWQgd2hl
biB0aGUgdGVzdCBoZWxwZXJzIGFyZSBpbmplY3RlZCBpbnRvCisgICAgICB5b3VyIGFwcGxpY2F0
aW9uLgorICAKKyAgICBAY2xhc3MgVGVzdAorICAgIEBuYW1lc3BhY2UgRW1iZXIKKyAgICBAcHVi
bGljCisgICovCisgIHZhciBUZXN0ID0geworICAgIC8qKgorICAgICAgSGFzaCBjb250YWluaW5n
IGFsbCBrbm93biB0ZXN0IGhlbHBlcnMuCisgICAgICAgQHByb3BlcnR5IF9oZWxwZXJzCisgICAg
ICBAcHJpdmF0ZQorICAgICAgQHNpbmNlIDEuNy4wCisgICAgKi8KKyAgICBfaGVscGVyczogaGVs
cGVycywKKworICAgIC8qKgorICAgICAgYHJlZ2lzdGVySGVscGVyYCBpcyB1c2VkIHRvIHJlZ2lz
dGVyIGEgdGVzdCBoZWxwZXIgdGhhdCB3aWxsIGJlIGluamVjdGVkCisgICAgICB3aGVuIGBBcHAu
aW5qZWN0VGVzdEhlbHBlcnNgIGlzIGNhbGxlZC4KKyAgICAgICBUaGUgaGVscGVyIG1ldGhvZCB3
aWxsIGFsd2F5cyBiZSBjYWxsZWQgd2l0aCB0aGUgY3VycmVudCBBcHBsaWNhdGlvbiBhcworICAg
ICAgdGhlIGZpcnN0IHBhcmFtZXRlci4KKyAgICAgICBGb3IgZXhhbXBsZToKKyAgICAgICBgYGBq
YXZhc2NyaXB0CisgICAgICBFbWJlci5UZXN0LnJlZ2lzdGVySGVscGVyKCdib290JywgZnVuY3Rp
b24oYXBwKSB7CisgICAgICAgIEVtYmVyLnJ1bihhcHAsIGFwcC5hZHZhbmNlUmVhZGluZXNzKTsK
KyAgICAgIH0pOworICAgICAgYGBgCisgICAgICAgVGhpcyBoZWxwZXIgY2FuIGxhdGVyIGJlIGNh
bGxlZCB3aXRob3V0IGFyZ3VtZW50cyBiZWNhdXNlIGl0IHdpbGwgYmUKKyAgICAgIGNhbGxlZCB3
aXRoIGBhcHBgIGFzIHRoZSBmaXJzdCBwYXJhbWV0ZXIuCisgICAgICAgYGBgamF2YXNjcmlwdAor
ICAgICAgQXBwID0gRW1iZXIuQXBwbGljYXRpb24uY3JlYXRlKCk7CisgICAgICBBcHAuaW5qZWN0
VGVzdEhlbHBlcnMoKTsKKyAgICAgIGJvb3QoKTsKKyAgICAgIGBgYAorICAgICAgIEBwdWJsaWMK
KyAgICAgIEBtZXRob2QgcmVnaXN0ZXJIZWxwZXIKKyAgICAgIEBwYXJhbSB7U3RyaW5nfSBuYW1l
IFRoZSBuYW1lIG9mIHRoZSBoZWxwZXIgbWV0aG9kIHRvIGFkZC4KKyAgICAgIEBwYXJhbSB7RnVu
Y3Rpb259IGhlbHBlck1ldGhvZAorICAgICAgQHBhcmFtIG9wdGlvbnMge09iamVjdH0KKyAgICAq
LworICAgIHJlZ2lzdGVySGVscGVyOiBmdW5jdGlvbiAobmFtZSwgaGVscGVyTWV0aG9kKSB7Cisg
ICAgICBoZWxwZXJzW25hbWVdID0geworICAgICAgICBtZXRob2Q6IGhlbHBlck1ldGhvZCwKKyAg
ICAgICAgbWV0YTogeyB3YWl0OiBmYWxzZSB9CisgICAgICB9OworICAgIH0sCisKKyAgICAvKioK
KyAgICAgIGByZWdpc3RlckFzeW5jSGVscGVyYCBpcyB1c2VkIHRvIHJlZ2lzdGVyIGFuIGFzeW5j
IHRlc3QgaGVscGVyIHRoYXQgd2lsbCBiZSBpbmplY3RlZAorICAgICAgd2hlbiBgQXBwLmluamVj
dFRlc3RIZWxwZXJzYCBpcyBjYWxsZWQuCisgICAgICAgVGhlIGhlbHBlciBtZXRob2Qgd2lsbCBh
bHdheXMgYmUgY2FsbGVkIHdpdGggdGhlIGN1cnJlbnQgQXBwbGljYXRpb24gYXMKKyAgICAgIHRo
ZSBmaXJzdCBwYXJhbWV0ZXIuCisgICAgICAgRm9yIGV4YW1wbGU6CisgICAgICAgYGBgamF2YXNj
cmlwdAorICAgICAgRW1iZXIuVGVzdC5yZWdpc3RlckFzeW5jSGVscGVyKCdib290JywgZnVuY3Rp
b24oYXBwKSB7CisgICAgICAgIEVtYmVyLnJ1bihhcHAsIGFwcC5hZHZhbmNlUmVhZGluZXNzKTsK
KyAgICAgIH0pOworICAgICAgYGBgCisgICAgICAgVGhlIGFkdmFudGFnZSBvZiBhbiBhc3luYyBo
ZWxwZXIgaXMgdGhhdCBpdCB3aWxsIG5vdCBydW4KKyAgICAgIHVudGlsIHRoZSBsYXN0IGFzeW5j
IGhlbHBlciBoYXMgY29tcGxldGVkLiAgQWxsIGFzeW5jIGhlbHBlcnMKKyAgICAgIGFmdGVyIGl0
IHdpbGwgd2FpdCBmb3IgaXQgY29tcGxldGUgYmVmb3JlIHJ1bm5pbmcuCisgICAgICAgIEZvciBl
eGFtcGxlOgorICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgIEVtYmVyLlRlc3QucmVnaXN0ZXJB
c3luY0hlbHBlcignZGVsZXRlUG9zdCcsIGZ1bmN0aW9uKGFwcCwgcG9zdElkKSB7CisgICAgICAg
IGNsaWNrKCcuZGVsZXRlLScgKyBwb3N0SWQpOworICAgICAgfSk7CisgICAgICAgLy8gLi4uIGlu
IHlvdXIgdGVzdAorICAgICAgdmlzaXQoJy9wb3N0LzInKTsKKyAgICAgIGRlbGV0ZVBvc3QoMik7
CisgICAgICB2aXNpdCgnL3Bvc3QvMycpOworICAgICAgZGVsZXRlUG9zdCgzKTsKKyAgICAgIGBg
YAorICAgICAgIEBwdWJsaWMKKyAgICAgIEBtZXRob2QgcmVnaXN0ZXJBc3luY0hlbHBlcgorICAg
ICAgQHBhcmFtIHtTdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIGhlbHBlciBtZXRob2QgdG8g
YWRkLgorICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gaGVscGVyTWV0aG9kCisgICAgICBAc2luY2Ug
MS4yLjAKKyAgICAqLworICAgIHJlZ2lzdGVyQXN5bmNIZWxwZXI6IGZ1bmN0aW9uIChuYW1lLCBo
ZWxwZXJNZXRob2QpIHsKKyAgICAgIGhlbHBlcnNbbmFtZV0gPSB7CisgICAgICAgIG1ldGhvZDog
aGVscGVyTWV0aG9kLAorICAgICAgICBtZXRhOiB7IHdhaXQ6IHRydWUgfQorICAgICAgfTsKKyAg
ICB9LAorCisgICAgLyoqCisgICAgICBSZW1vdmUgYSBwcmV2aW91c2x5IGFkZGVkIGhlbHBlciBt
ZXRob2QuCisgICAgICAgRXhhbXBsZToKKyAgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICBFbWJl
ci5UZXN0LnVucmVnaXN0ZXJIZWxwZXIoJ3dhaXQnKTsKKyAgICAgIGBgYAorICAgICAgIEBwdWJs
aWMKKyAgICAgIEBtZXRob2QgdW5yZWdpc3RlckhlbHBlcgorICAgICAgQHBhcmFtIHtTdHJpbmd9
IG5hbWUgVGhlIGhlbHBlciB0byByZW1vdmUuCisgICAgKi8KKyAgICB1bnJlZ2lzdGVySGVscGVy
OiBmdW5jdGlvbiAobmFtZSkgeworICAgICAgZGVsZXRlIGhlbHBlcnNbbmFtZV07CisgICAgICBk
ZWxldGUgVGVzdC5Qcm9taXNlLnByb3RvdHlwZVtuYW1lXTsKKyAgICB9LAorCisgICAgLyoqCisg
ICAgICBVc2VkIHRvIHJlZ2lzdGVyIGNhbGxiYWNrcyB0byBiZSBmaXJlZCB3aGVuZXZlciBgQXBw
LmluamVjdFRlc3RIZWxwZXJzYAorICAgICAgaXMgY2FsbGVkLgorICAgICAgIFRoZSBjYWxsYmFj
ayB3aWxsIHJlY2VpdmUgdGhlIGN1cnJlbnQgYXBwbGljYXRpb24gYXMgYW4gYXJndW1lbnQuCisg
ICAgICAgRXhhbXBsZToKKyAgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICBFbWJlci5UZXN0Lm9u
SW5qZWN0SGVscGVycyhmdW5jdGlvbigpIHsKKyAgICAgICAgRW1iZXIuJChkb2N1bWVudCkuYWph
eFNlbmQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgVGVzdC5wZW5kaW5nQWpheFJlcXVlc3RzKys7
CisgICAgICAgIH0pOworICAgICAgICAgRW1iZXIuJChkb2N1bWVudCkuYWpheENvbXBsZXRlKGZ1
bmN0aW9uKCkgeworICAgICAgICAgIFRlc3QucGVuZGluZ0FqYXhSZXF1ZXN0cy0tOworICAgICAg
ICB9KTsKKyAgICAgIH0pOworICAgICAgYGBgCisgICAgICAgQHB1YmxpYworICAgICAgQG1ldGhv
ZCBvbkluamVjdEhlbHBlcnMKKyAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBm
dW5jdGlvbiB0byBiZSBjYWxsZWQuCisgICAgKi8KKyAgICBvbkluamVjdEhlbHBlcnM6IGZ1bmN0
aW9uIChjYWxsYmFjaykgeworICAgICAgaW5qZWN0SGVscGVyc0NhbGxiYWNrcy5wdXNoKGNhbGxi
YWNrKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICBUaGlzIHJldHVybnMgYSB0aGVuYWJsZSB0
YWlsb3JlZCBmb3IgdGVzdGluZy4gIEl0IGNhdGNoZXMgZmFpbGVkCisgICAgICBgb25TdWNjZXNz
YCBjYWxsYmFja3MgYW5kIGludm9rZXMgdGhlIGBFbWJlci5UZXN0LmFkYXB0ZXIuZXhjZXB0aW9u
YAorICAgICAgY2FsbGJhY2sgaW4gdGhlIGxhc3QgY2hhaW5lZCB0aGVuLgorICAgICAgIFRoaXMg
bWV0aG9kIHNob3VsZCBiZSByZXR1cm5lZCBieSBhc3luYyBoZWxwZXJzIHN1Y2ggYXMgYHdhaXRg
LgorICAgICAgIEBwdWJsaWMKKyAgICAgIEBtZXRob2QgcHJvbWlzZQorICAgICAgQHBhcmFtIHtG
dW5jdGlvbn0gcmVzb2x2ZXIgVGhlIGZ1bmN0aW9uIHVzZWQgdG8gcmVzb2x2ZSB0aGUgcHJvbWlz
ZS4KKyAgICAgIEBwYXJhbSB7U3RyaW5nfSBsYWJlbCBBbiBvcHRpb25hbCBzdHJpbmcgZm9yIGlk
ZW50aWZ5aW5nIHRoZSBwcm9taXNlLgorICAgICovCisgICAgcHJvbWlzZTogZnVuY3Rpb24gKHJl
c29sdmVyLCBsYWJlbCkgeworICAgICAgdmFyIGZ1bGxMYWJlbCA9ICdFbWJlci5UZXN0LnByb21p
c2U6ICcgKyAobGFiZWwgfHwgJzxVbmtub3duIFByb21pc2U+Jyk7CisgICAgICByZXR1cm4gbmV3
IFRlc3QuUHJvbWlzZShyZXNvbHZlciwgZnVsbExhYmVsKTsKKyAgICB9LAorCisgICAgLyoqCisg
ICAgIFVzZWQgdG8gYWxsb3cgZW1iZXItdGVzdGluZyB0byBjb21tdW5pY2F0ZSB3aXRoIGEgc3Bl
Y2lmaWMgdGVzdGluZworICAgICBmcmFtZXdvcmsuCisgICAgICBZb3UgY2FuIG1hbnVhbGx5IHNl
dCBpdCBiZWZvcmUgY2FsbGluZyBgQXBwLnNldHVwRm9yVGVzdGluZygpYC4KKyAgICAgIEV4YW1w
bGU6CisgICAgICBgYGBqYXZhc2NyaXB0CisgICAgIEVtYmVyLlRlc3QuYWRhcHRlciA9IE15Q3Vz
dG9tQWRhcHRlci5jcmVhdGUoKQorICAgICBgYGAKKyAgICAgIElmIHlvdSBkbyBub3Qgc2V0IGl0
LCBlbWJlci10ZXN0aW5nIHdpbGwgZGVmYXVsdCB0byBgRW1iZXIuVGVzdC5RVW5pdEFkYXB0ZXJg
LgorICAgICAgQHB1YmxpYworICAgICBAcHJvcGVydHkgYWRhcHRlcgorICAgICBAdHlwZSB7Q2xh
c3N9IFRoZSBhZGFwdGVyIHRvIGJlIHVzZWQuCisgICAgIEBkZWZhdWx0IEVtYmVyLlRlc3QuUVVu
aXRBZGFwdGVyCisgICAgKi8KKyAgICBhZGFwdGVyOiBudWxsLAorCisgICAgLyoqCisgICAgICBS
ZXBsYWNlbWVudCBmb3IgYEVtYmVyLlJTVlAucmVzb2x2ZWAKKyAgICAgIFRoZSBvbmx5IGRpZmZl
cmVuY2UgaXMgdGhpcyB1c2VzCisgICAgICBhbiBpbnN0YW5jZSBvZiBgRW1iZXIuVGVzdC5Qcm9t
aXNlYAorICAgICAgIEBwdWJsaWMKKyAgICAgIEBtZXRob2QgcmVzb2x2ZQorICAgICAgQHBhcmFt
IHtNaXhlZH0gVGhlIHZhbHVlIHRvIHJlc29sdmUKKyAgICAgIEBzaW5jZSAxLjIuMAorICAgICov
CisgICAgcmVzb2x2ZTogZnVuY3Rpb24gKHZhbCkgeworICAgICAgcmV0dXJuIFRlc3QucHJvbWlz
ZShmdW5jdGlvbiAocmVzb2x2ZSkgeworICAgICAgICByZXR1cm4gcmVzb2x2ZSh2YWwpOworICAg
ICAgfSk7CisgICAgfSwKKworICAgIC8qKgorICAgICAgIFRoaXMgYWxsb3dzIGVtYmVyLXRlc3Rp
bmcgdG8gcGxheSBuaWNlbHkgd2l0aCBvdGhlciBhc3luY2hyb25vdXMKKyAgICAgICBldmVudHMs
IHN1Y2ggYXMgYW4gYXBwbGljYXRpb24gdGhhdCBpcyB3YWl0aW5nIGZvciBhIENTUzMKKyAgICAg
ICB0cmFuc2l0aW9uIG9yIGFuIEluZGV4REIgdHJhbnNhY3Rpb24uCisgICAgICAgIEZvciBleGFt
cGxlOgorICAgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICAgRW1iZXIuVGVzdC5yZWdpc3Rlcldh
aXRlcihmdW5jdGlvbigpIHsKKyAgICAgICAgIHJldHVybiBteVBlbmRpbmdUcmFuc2FjdGlvbnMo
KSA9PSAwOworICAgICAgIH0pOworICAgICAgIGBgYAorICAgICAgIFRoZSBgY29udGV4dGAgYXJn
dW1lbnQgYWxsb3dzIHlvdSB0byBvcHRpb25hbGx5IHNwZWNpZnkgdGhlIGB0aGlzYAorICAgICAg
IHdpdGggd2hpY2ggeW91ciBjYWxsYmFjayB3aWxsIGJlIGludm9rZWQuCisgICAgICAgIEZvciBl
eGFtcGxlOgorICAgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICAgRW1iZXIuVGVzdC5yZWdpc3Rl
cldhaXRlcihNeURCLCBNeURCLmhhc1BlbmRpbmdUcmFuc2FjdGlvbnMpOworICAgICAgIGBgYAor
ICAgICAgICBAcHVibGljCisgICAgICAgQG1ldGhvZCByZWdpc3RlcldhaXRlcgorICAgICAgIEBw
YXJhbSB7T2JqZWN0fSBjb250ZXh0IChvcHRpb25hbCkKKyAgICAgICBAcGFyYW0ge0Z1bmN0aW9u
fSBjYWxsYmFjaworICAgICAgIEBzaW5jZSAxLjIuMAorICAgICovCisgICAgcmVnaXN0ZXJXYWl0
ZXI6IGZ1bmN0aW9uIChjb250ZXh0LCBjYWxsYmFjaykgeworICAgICAgaWYgKGFyZ3VtZW50cy5s
ZW5ndGggPT09IDEpIHsKKyAgICAgICAgY2FsbGJhY2sgPSBjb250ZXh0OworICAgICAgICBjb250
ZXh0ID0gbnVsbDsKKyAgICAgIH0KKyAgICAgIGlmICghdGhpcy53YWl0ZXJzKSB7CisgICAgICAg
IHRoaXMud2FpdGVycyA9IF9lbWJlclJ1bnRpbWVTeXN0ZW1OYXRpdmVfYXJyYXkuQSgpOworICAg
ICAgfQorICAgICAgdGhpcy53YWl0ZXJzLnB1c2goW2NvbnRleHQsIGNhbGxiYWNrXSk7CisgICAg
fSwKKyAgICAvKioKKyAgICAgICBgdW5yZWdpc3RlcldhaXRlcmAgaXMgdXNlZCB0byB1bnJlZ2lz
dGVyIGEgY2FsbGJhY2sgdGhhdCB3YXMKKyAgICAgICByZWdpc3RlcmVkIHdpdGggYHJlZ2lzdGVy
V2FpdGVyYC4KKyAgICAgICAgQHB1YmxpYworICAgICAgIEBtZXRob2QgdW5yZWdpc3RlcldhaXRl
cgorICAgICAgIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0IChvcHRpb25hbCkKKyAgICAgICBAcGFy
YW0ge0Z1bmN0aW9ufSBjYWxsYmFjaworICAgICAgIEBzaW5jZSAxLjIuMAorICAgICovCisgICAg
dW5yZWdpc3RlcldhaXRlcjogZnVuY3Rpb24gKGNvbnRleHQsIGNhbGxiYWNrKSB7CisgICAgICBp
ZiAoIXRoaXMud2FpdGVycykgeworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICBpZiAo
YXJndW1lbnRzLmxlbmd0aCA9PT0gMSkgeworICAgICAgICBjYWxsYmFjayA9IGNvbnRleHQ7Cisg
ICAgICAgIGNvbnRleHQgPSBudWxsOworICAgICAgfQorICAgICAgdGhpcy53YWl0ZXJzID0gX2Vt
YmVyUnVudGltZVN5c3RlbU5hdGl2ZV9hcnJheS5BKHRoaXMud2FpdGVycy5maWx0ZXIoZnVuY3Rp
b24gKGVsdCkgeworICAgICAgICByZXR1cm4gIShlbHRbMF0gPT09IGNvbnRleHQgJiYgZWx0WzFd
ID09PSBjYWxsYmFjayk7CisgICAgICB9KSk7CisgICAgfQorICB9OworCisgIGZ1bmN0aW9uIGhl
bHBlcihhcHAsIG5hbWUpIHsKKyAgICB2YXIgZm4gPSBoZWxwZXJzW25hbWVdLm1ldGhvZDsKKyAg
ICB2YXIgbWV0YSA9IGhlbHBlcnNbbmFtZV0ubWV0YTsKKworICAgIHJldHVybiBmdW5jdGlvbiAo
KSB7CisgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5
KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykgeworICAgICAgICBhcmdzW19r
ZXldID0gYXJndW1lbnRzW19rZXldOworICAgICAgfQorCisgICAgICB2YXIgbGFzdFByb21pc2U7
CisKKyAgICAgIGFyZ3MudW5zaGlmdChhcHApOworCisgICAgICAvLyBzb21lIGhlbHBlcnMgYXJl
IG5vdCBhc3luYyBhbmQKKyAgICAgIC8vIG5lZWQgdG8gcmV0dXJuIGEgdmFsdWUgaW1tZWRpYXRl
bHkuCisgICAgICAvLyBleGFtcGxlOiBgZmluZGAKKyAgICAgIGlmICghbWV0YS53YWl0KSB7Cisg
ICAgICAgIHJldHVybiBmbi5hcHBseShhcHAsIGFyZ3MpOworICAgICAgfQorCisgICAgICBsYXN0
UHJvbWlzZSA9IHJ1bihmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBUZXN0LnJlc29sdmUo
VGVzdC5sYXN0UHJvbWlzZSk7CisgICAgICB9KTsKKworICAgICAgLy8gd2FpdCBmb3IgbGFzdCBo
ZWxwZXIncyBwcm9taXNlIHRvIHJlc29sdmUgYW5kIHRoZW4KKyAgICAgIC8vIGV4ZWN1dGUuIFRv
IGJlIHNhZmUsIHdlIG5lZWQgdG8gdGVsbCB0aGUgYWRhcHRlciB3ZSdyZSBnb2luZworICAgICAg
Ly8gYXN5bmNocm9ub3VzIGhlcmUsIGJlY2F1c2UgZm4gbWF5IG5vdCBiZSBpbnZva2VkIGJlZm9y
ZSB3ZQorICAgICAgLy8gcmV0dXJuLgorICAgICAgVGVzdC5hZGFwdGVyLmFzeW5jU3RhcnQoKTsK
KyAgICAgIHJldHVybiBsYXN0UHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0
dXJuIGZuLmFwcGx5KGFwcCwgYXJncyk7CisgICAgICB9KS5maW5hbGx5KGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgVGVzdC5hZGFwdGVyLmFzeW5jRW5kKCk7CisgICAgICB9KTsKKyAgICB9OworICB9
CisKKyAgZnVuY3Rpb24gcnVuKGZuKSB7CisgICAgaWYgKCFfZW1iZXJNZXRhbFJ1bl9sb29wLmRl
ZmF1bHQuY3VycmVudFJ1bkxvb3ApIHsKKyAgICAgIHJldHVybiBfZW1iZXJNZXRhbFJ1bl9sb29w
LmRlZmF1bHQoZm4pOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gZm4oKTsKKyAgICB9Cisg
IH0KKworICBfZW1iZXJBcHBsaWNhdGlvblN5c3RlbUFwcGxpY2F0aW9uLmRlZmF1bHQucmVvcGVu
KHsKKyAgICAvKioKKyAgICAgVGhpcyBwcm9wZXJ0eSBjb250YWlucyB0aGUgdGVzdGluZyBoZWxw
ZXJzIGZvciB0aGUgY3VycmVudCBhcHBsaWNhdGlvbi4gVGhlc2UKKyAgICAgYXJlIGNyZWF0ZWQg
b25jZSB5b3UgY2FsbCBgaW5qZWN0VGVzdEhlbHBlcnNgIG9uIHlvdXIgYEVtYmVyLkFwcGxpY2F0
aW9uYAorICAgICBpbnN0YW5jZS4gVGhlIGluY2x1ZGVkIGhlbHBlcnMgYXJlIGFsc28gYXZhaWxh
YmxlIG9uIHRoZSBgd2luZG93YCBvYmplY3QgYnkKKyAgICAgZGVmYXVsdCwgYnV0IGNhbiBiZSB1
c2VkIGZyb20gdGhpcyBvYmplY3Qgb24gdGhlIGluZGl2aWR1YWwgYXBwbGljYXRpb24gYWxzby4K
KyAgICAgICBAcHJvcGVydHkgdGVzdEhlbHBlcnMKKyAgICAgIEB0eXBlIHtPYmplY3R9CisgICAg
ICBAZGVmYXVsdCB7fQorICAgICAgQHB1YmxpYworICAgICovCisgICAgdGVzdEhlbHBlcnM6IHt9
LAorCisgICAgLyoqCisgICAgIFRoaXMgcHJvcGVydHkgd2lsbCBjb250YWluIHRoZSBvcmlnaW5h
bCBtZXRob2RzIHRoYXQgd2VyZSByZWdpc3RlcmVkCisgICAgIG9uIHRoZSBgaGVscGVyQ29udGFp
bmVyYCBiZWZvcmUgYGluamVjdFRlc3RIZWxwZXJzYCBpcyBjYWxsZWQuCisgICAgICBXaGVuIGBy
ZW1vdmVUZXN0SGVscGVyc2AgaXMgY2FsbGVkLCB0aGVzZSBtZXRob2RzIGFyZSByZXN0b3JlZCB0
byB0aGUKKyAgICAgYGhlbHBlckNvbnRhaW5lcmAuCisgICAgICAgQHByb3BlcnR5IG9yaWdpbmFs
TWV0aG9kcworICAgICAgQHR5cGUge09iamVjdH0KKyAgICAgIEBkZWZhdWx0IHt9CisgICAgICBA
cHJpdmF0ZQorICAgICAgQHNpbmNlIDEuMy4wCisgICAgKi8KKyAgICBvcmlnaW5hbE1ldGhvZHM6
IHt9LAorCisgICAgLyoqCisgICAgVGhpcyBwcm9wZXJ0eSBpbmRpY2F0ZXMgd2hldGhlciBvciBu
b3QgdGhpcyBhcHBsaWNhdGlvbiBpcyBjdXJyZW50bHkgaW4KKyAgICB0ZXN0aW5nIG1vZGUuIFRo
aXMgaXMgc2V0IHdoZW4gYHNldHVwRm9yVGVzdGluZ2AgaXMgY2FsbGVkIG9uIHRoZSBjdXJyZW50
CisgICAgYXBwbGljYXRpb24uCisgICAgIEBwcm9wZXJ0eSB0ZXN0aW5nCisgICAgQHR5cGUge0Jv
b2xlYW59CisgICAgQGRlZmF1bHQgZmFsc2UKKyAgICBAc2luY2UgMS4zLjAKKyAgICBAcHVibGlj
CisgICAgKi8KKyAgICB0ZXN0aW5nOiBmYWxzZSwKKworICAgIC8qKgorICAgICAgVGhpcyBob29r
IGRlZmVycyB0aGUgcmVhZGluZXNzIG9mIHRoZSBhcHBsaWNhdGlvbiwgc28gdGhhdCB5b3UgY2Fu
IHN0YXJ0CisgICAgICB0aGUgYXBwIHdoZW4geW91ciB0ZXN0cyBhcmUgcmVhZHkgdG8gcnVuLiBJ
dCBhbHNvIHNldHMgdGhlIHJvdXRlcidzCisgICAgICBsb2NhdGlvbiB0byAnbm9uZScsIHNvIHRo
YXQgdGhlIHdpbmRvdydzIGxvY2F0aW9uIHdpbGwgbm90IGJlIG1vZGlmaWVkCisgICAgICAocHJl
dmVudGluZyBib3RoIGFjY2lkZW50YWwgbGVha2luZyBvZiBzdGF0ZSBiZXR3ZWVuIHRlc3RzIGFu
ZCBpbnRlcmZlcmVuY2UKKyAgICAgIHdpdGggeW91ciB0ZXN0aW5nIGZyYW1ld29yaykuCisgICAg
ICAgRXhhbXBsZToKKyAgICAgICBgYGAKKyAgICAgIEFwcC5zZXR1cEZvclRlc3RpbmcoKTsKKyAg
ICAgIGBgYAorICAgICAgIEBtZXRob2Qgc2V0dXBGb3JUZXN0aW5nCisgICAgICBAcHVibGljCisg
ICAgKi8KKyAgICBzZXR1cEZvclRlc3Rpbmc6IGZ1bmN0aW9uICgpIHsKKyAgICAgIF9lbWJlclRl
c3RpbmdTZXR1cF9mb3JfdGVzdGluZy5kZWZhdWx0KCk7CisKKyAgICAgIHRoaXMudGVzdGluZyA9
IHRydWU7CisKKyAgICAgIHRoaXMuUm91dGVyLnJlb3Blbih7CisgICAgICAgIGxvY2F0aW9uOiAn
bm9uZScKKyAgICAgIH0pOworICAgIH0sCisKKyAgICAvKioKKyAgICAgIFRoaXMgd2lsbCBiZSB1
c2VkIGFzIHRoZSBjb250YWluZXIgdG8gaW5qZWN0IHRoZSB0ZXN0IGhlbHBlcnMgaW50by4gQnkK
KyAgICAgIGRlZmF1bHQgdGhlIGhlbHBlcnMgYXJlIGluamVjdGVkIGludG8gYHdpbmRvd2AuCisg
ICAgICAgQHByb3BlcnR5IGhlbHBlckNvbnRhaW5lcgorICAgICAgQHR5cGUge09iamVjdH0gVGhl
IG9iamVjdCB0byBiZSB1c2VkIGZvciB0ZXN0IGhlbHBlcnMuCisgICAgICBAZGVmYXVsdCB3aW5k
b3cKKyAgICAgIEBzaW5jZSAxLjIuMAorICAgICAgQHByaXZhdGUKKyAgICAqLworICAgIGhlbHBl
ckNvbnRhaW5lcjogbnVsbCwKKworICAgIC8qKgorICAgICAgVGhpcyBpbmplY3RzIHRoZSB0ZXN0
IGhlbHBlcnMgaW50byB0aGUgYGhlbHBlckNvbnRhaW5lcmAgb2JqZWN0LiBJZiBhbiBvYmplY3Qg
aXMgcHJvdmlkZWQKKyAgICAgIGl0IHdpbGwgYmUgdXNlZCBhcyB0aGUgaGVscGVyQ29udGFpbmVy
LiBJZiBgaGVscGVyQ29udGFpbmVyYCBpcyBub3Qgc2V0IGl0IHdpbGwgZGVmYXVsdAorICAgICAg
dG8gYHdpbmRvd2AuIElmIGEgZnVuY3Rpb24gb2YgdGhlIHNhbWUgbmFtZSBoYXMgYWxyZWFkeSBi
ZWVuIGRlZmluZWQgaXQgd2lsbCBiZSBjYWNoZWQKKyAgICAgIChzbyB0aGF0IGl0IGNhbiBiZSBy
ZXNldCBpZiB0aGUgaGVscGVyIGlzIHJlbW92ZWQgd2l0aCBgdW5yZWdpc3RlckhlbHBlcmAgb3IK
KyAgICAgIGByZW1vdmVUZXN0SGVscGVyc2ApLgorICAgICAgIEFueSBjYWxsYmFja3MgcmVnaXN0
ZXJlZCB3aXRoIGBvbkluamVjdEhlbHBlcnNgIHdpbGwgYmUgY2FsbGVkIG9uY2UgdGhlCisgICAg
ICBoZWxwZXJzIGhhdmUgYmVlbiBpbmplY3RlZC4KKyAgICAgICBFeGFtcGxlOgorICAgICAgYGBg
CisgICAgICBBcHAuaW5qZWN0VGVzdEhlbHBlcnMoKTsKKyAgICAgIGBgYAorICAgICAgIEBtZXRo
b2QgaW5qZWN0VGVzdEhlbHBlcnMKKyAgICAgIEBwdWJsaWMKKyAgICAqLworICAgIGluamVjdFRl
c3RIZWxwZXJzOiBmdW5jdGlvbiAoaGVscGVyQ29udGFpbmVyKSB7CisgICAgICBpZiAoaGVscGVy
Q29udGFpbmVyKSB7CisgICAgICAgIHRoaXMuaGVscGVyQ29udGFpbmVyID0gaGVscGVyQ29udGFp
bmVyOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdGhpcy5oZWxwZXJDb250YWluZXIgPSB3aW5k
b3c7CisgICAgICB9CisKKyAgICAgIHRoaXMucmVvcGVuKHsKKyAgICAgICAgd2lsbERlc3Ryb3k6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICB0aGlzLl9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVu
dHMpOworICAgICAgICAgIHRoaXMucmVtb3ZlVGVzdEhlbHBlcnMoKTsKKyAgICAgICAgfQorICAg
ICAgfSk7CisKKyAgICAgIHRoaXMudGVzdEhlbHBlcnMgPSB7fTsKKyAgICAgIGZvciAodmFyIG5h
bWUgaW4gaGVscGVycykgeworICAgICAgICB0aGlzLm9yaWdpbmFsTWV0aG9kc1tuYW1lXSA9IHRo
aXMuaGVscGVyQ29udGFpbmVyW25hbWVdOworICAgICAgICB0aGlzLnRlc3RIZWxwZXJzW25hbWVd
ID0gdGhpcy5oZWxwZXJDb250YWluZXJbbmFtZV0gPSBoZWxwZXIodGhpcywgbmFtZSk7CisgICAg
ICAgIHByb3RvV3JhcChUZXN0LlByb21pc2UucHJvdG90eXBlLCBuYW1lLCBoZWxwZXIodGhpcywg
bmFtZSksIGhlbHBlcnNbbmFtZV0ubWV0YS53YWl0KTsKKyAgICAgIH0KKworICAgICAgZm9yICh2
YXIgaSA9IDAsIGwgPSBpbmplY3RIZWxwZXJzQ2FsbGJhY2tzLmxlbmd0aDsgaSA8IGw7IGkrKykg
eworICAgICAgICBpbmplY3RIZWxwZXJzQ2FsbGJhY2tzW2ldKHRoaXMpOworICAgICAgfQorICAg
IH0sCisKKyAgICAvKioKKyAgICAgIFRoaXMgcmVtb3ZlcyBhbGwgaGVscGVycyB0aGF0IGhhdmUg
YmVlbiByZWdpc3RlcmVkLCBhbmQgcmVzZXRzIGFuZCBmdW5jdGlvbnMKKyAgICAgIHRoYXQgd2Vy
ZSBvdmVycmlkZGVuIGJ5IHRoZSBoZWxwZXJzLgorICAgICAgIEV4YW1wbGU6CisgICAgICAgYGBg
amF2YXNjcmlwdAorICAgICAgQXBwLnJlbW92ZVRlc3RIZWxwZXJzKCk7CisgICAgICBgYGAKKyAg
ICAgICBAcHVibGljCisgICAgICBAbWV0aG9kIHJlbW92ZVRlc3RIZWxwZXJzCisgICAgKi8KKyAg
ICByZW1vdmVUZXN0SGVscGVyczogZnVuY3Rpb24gKCkgeworICAgICAgaWYgKCF0aGlzLmhlbHBl
ckNvbnRhaW5lcikgeworICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICAgIGZvciAodmFy
IG5hbWUgaW4gaGVscGVycykgeworICAgICAgICB0aGlzLmhlbHBlckNvbnRhaW5lcltuYW1lXSA9
IHRoaXMub3JpZ2luYWxNZXRob2RzW25hbWVdOworICAgICAgICBkZWxldGUgVGVzdC5Qcm9taXNl
LnByb3RvdHlwZVtuYW1lXTsKKyAgICAgICAgZGVsZXRlIHRoaXMudGVzdEhlbHBlcnNbbmFtZV07
CisgICAgICAgIGRlbGV0ZSB0aGlzLm9yaWdpbmFsTWV0aG9kc1tuYW1lXTsKKyAgICAgIH0KKyAg
ICB9CisgIH0pOworCisgIC8vIFRoaXMgbWV0aG9kIGlzIG5vIGxvbmdlciBuZWVkZWQKKyAgLy8g
QnV0IHN0aWxsIGhlcmUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CisgIC8vIG9mIGhlbHBl
ciBjaGFpbmluZworICBmdW5jdGlvbiBwcm90b1dyYXAocHJvdG8sIG5hbWUsIGNhbGxiYWNrLCBp
c0FzeW5jKSB7CisgICAgcHJvdG9bbmFtZV0gPSBmdW5jdGlvbiAoKSB7CisgICAgICBmb3IgKHZh
ciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuMiksIF9rZXkyID0g
MDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykgeworICAgICAgICBhcmdzW19rZXkyXSA9IGFyZ3Vt
ZW50c1tfa2V5Ml07CisgICAgICB9CisKKyAgICAgIGlmIChpc0FzeW5jKSB7CisgICAgICAgIHJl
dHVybiBjYWxsYmFjay5hcHBseSh0aGlzLCBhcmdzKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAg
IHJldHVybiB0aGlzLnRoZW4oZnVuY3Rpb24gKCkgeworICAgICAgICAgIHJldHVybiBjYWxsYmFj
ay5hcHBseSh0aGlzLCBhcmdzKTsKKyAgICAgICAgfSk7CisgICAgICB9CisgICAgfTsKKyAgfQor
CisgIFRlc3QuUHJvbWlzZSA9IGZ1bmN0aW9uICgpIHsKKyAgICBfZW1iZXJSdW50aW1lRXh0UnN2
cC5kZWZhdWx0LlByb21pc2UuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICBUZXN0Lmxhc3RQ
cm9taXNlID0gdGhpczsKKyAgfTsKKworICBUZXN0LlByb21pc2UucHJvdG90eXBlID0gT2JqZWN0
LmNyZWF0ZShfZW1iZXJSdW50aW1lRXh0UnN2cC5kZWZhdWx0LlByb21pc2UucHJvdG90eXBlKTsK
KyAgVGVzdC5Qcm9taXNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRlc3QuUHJvbWlzZTsKKyAg
VGVzdC5Qcm9taXNlLnJlc29sdmUgPSBUZXN0LnJlc29sdmU7CisKKyAgLy8gUGF0Y2ggYHRoZW5g
IHRvIGlzb2xhdGUgYXN5bmMgbWV0aG9kcworICAvLyBzcGVjaWZpY2FsbHkgYEVtYmVyLlRlc3Qu
bGFzdFByb21pc2VgCisgIHZhciBvcmlnaW5hbFRoZW4gPSBfZW1iZXJSdW50aW1lRXh0UnN2cC5k
ZWZhdWx0LlByb21pc2UucHJvdG90eXBlLnRoZW47CisgIFRlc3QuUHJvbWlzZS5wcm90b3R5cGUu
dGhlbiA9IGZ1bmN0aW9uIChvblN1Y2Nlc3MsIG9uRmFpbHVyZSkgeworICAgIHJldHVybiBvcmln
aW5hbFRoZW4uY2FsbCh0aGlzLCBmdW5jdGlvbiAodmFsKSB7CisgICAgICByZXR1cm4gaXNvbGF0
ZShvblN1Y2Nlc3MsIHZhbCk7CisgICAgfSwgb25GYWlsdXJlKTsKKyAgfTsKKworICAvLyBUaGlz
IG1ldGhvZCBpc29sYXRlcyBuZXN0ZWQgYXN5bmMgbWV0aG9kcworICAvLyBzbyB0aGF0IHRoZXkg
ZG9uJ3QgY29uZmxpY3Qgd2l0aCBvdGhlciBsYXN0IHByb21pc2VzLgorICAvLworICAvLyAxLiBT
ZXQgYEVtYmVyLlRlc3QubGFzdFByb21pc2VgIHRvIG51bGwKKyAgLy8gMi4gSW52b2tlIG1ldGhv
ZAorICAvLyAzLiBSZXR1cm4gdGhlIGxhc3QgcHJvbWlzZSBjcmVhdGVkIGR1cmluZyBtZXRob2QK
KyAgZnVuY3Rpb24gaXNvbGF0ZShmbiwgdmFsKSB7CisgICAgdmFyIHZhbHVlLCBsYXN0UHJvbWlz
ZTsKKworICAgIC8vIFJlc2V0IGxhc3RQcm9taXNlIGZvciBuZXN0ZWQgaGVscGVycworICAgIFRl
c3QubGFzdFByb21pc2UgPSBudWxsOworCisgICAgdmFsdWUgPSBmbih2YWwpOworCisgICAgbGFz
dFByb21pc2UgPSBUZXN0Lmxhc3RQcm9taXNlOworICAgIFRlc3QubGFzdFByb21pc2UgPSBudWxs
OworCisgICAgLy8gSWYgdGhlIG1ldGhvZCByZXR1cm5lZCBhIHByb21pc2UKKyAgICAvLyByZXR1
cm4gdGhhdCBwcm9taXNlLiBJZiBub3QsCisgICAgLy8gcmV0dXJuIHRoZSBsYXN0IGFzeW5jIGhl
bHBlcidzIHByb21pc2UKKyAgICBpZiAodmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBUZXN0LlBy
b21pc2UgfHwgIWxhc3RQcm9taXNlKSB7CisgICAgICByZXR1cm4gdmFsdWU7CisgICAgfSBlbHNl
IHsKKyAgICAgIHJldHVybiBydW4oZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gVGVzdC5y
ZXNvbHZlKGxhc3RQcm9taXNlKS50aGVuKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICByZXR1cm4g
dmFsdWU7CisgICAgICAgIH0pOworICAgICAgfSk7CisgICAgfQorICB9CisKKyAgZXhwb3J0cy5k
ZWZhdWx0ID0gVGVzdDsKK30pOworZW5pZmVkKCdlbWJlci12aWV3cy9jb21wYXQvYXR0cnMtcHJv
eHknLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvbWl4aW4nLCAnZW1iZXItbWV0YWwvc3ltYm9s
JywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X2V2ZW50cyddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2Vt
YmVyTWV0YWxNaXhpbiwgX2VtYmVyTWV0YWxTeW1ib2wsIF9lbWJlck1ldGFsUHJvcGVydHlfZXZl
bnRzKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICBleHBvcnRzLmRlcHJlY2F0aW9uID0gZGVwcmVj
YXRpb247CisKKyAgZnVuY3Rpb24gZGVwcmVjYXRpb24oa2V5KSB7CisgICAgcmV0dXJuICdZb3Ug
dHJpZWQgdG8gbG9vayB1cCBhbiBhdHRyaWJ1dGUgZGlyZWN0bHkgb24gdGhlIGNvbXBvbmVudC4g
VGhpcyBpcyBkZXByZWNhdGVkLiBVc2UgYXR0cnMuJyArIGtleSArICcgaW5zdGVhZC4nOworICB9
CisKKyAgdmFyIE1VVEFCTEVfQ0VMTCA9IF9lbWJlck1ldGFsU3ltYm9sLmRlZmF1bHQoJ01VVEFC
TEVfQ0VMTCcpOworCisgIGV4cG9ydHMuTVVUQUJMRV9DRUxMID0gTVVUQUJMRV9DRUxMOworICBm
dW5jdGlvbiBpc0NlbGwodmFsKSB7CisgICAgcmV0dXJuIHZhbCAmJiB2YWxbTVVUQUJMRV9DRUxM
XTsKKyAgfQorCisgIHZhciBBdHRyc1Byb3h5TWl4aW4gPSB7CisgICAgYXR0cnM6IG51bGwsCisK
KyAgICBnZXRBdHRyOiBmdW5jdGlvbiAoa2V5KSB7CisgICAgICB2YXIgYXR0cnMgPSB0aGlzLmF0
dHJzOworICAgICAgaWYgKCFhdHRycykgeworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAg
ICByZXR1cm4gdGhpcy5nZXRBdHRyRm9yKGF0dHJzLCBrZXkpOworICAgIH0sCisKKyAgICBnZXRB
dHRyRm9yOiBmdW5jdGlvbiAoYXR0cnMsIGtleSkgeworICAgICAgdmFyIHZhbCA9IGF0dHJzW2tl
eV07CisgICAgICByZXR1cm4gaXNDZWxsKHZhbCkgPyB2YWwudmFsdWUgOiB2YWw7CisgICAgfSwK
KworICAgIHNldEF0dHI6IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7CisgICAgICB2YXIgYXR0cnMg
PSB0aGlzLmF0dHJzOworICAgICAgdmFyIHZhbCA9IGF0dHJzW2tleV07CisKKyAgICAgIGlmICgh
aXNDZWxsKHZhbCkpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgY2FuXCd0IHVwZGF0
ZSBhdHRycy4nICsga2V5ICsgJywgYmVjYXVzZSBpdFwncyBub3QgbXV0YWJsZScpOworICAgICAg
fQorCisgICAgICB2YWwudXBkYXRlKHZhbHVlKTsKKyAgICB9LAorCisgICAgX3Byb3BhZ2F0ZUF0
dHJzVG9UaGlzOiBmdW5jdGlvbiAoYXR0cnMpIHsKKyAgICAgIHRoaXMuX2lzRGlzcGF0Y2hpbmdB
dHRycyA9IHRydWU7CisgICAgICB0aGlzLnNldFByb3BlcnRpZXMoYXR0cnMpOworICAgICAgdGhp
cy5faXNEaXNwYXRjaGluZ0F0dHJzID0gZmFsc2U7CisgICAgfQorICB9OworCisgIEF0dHJzUHJv
eHlNaXhpbltfZW1iZXJNZXRhbFByb3BlcnR5X2V2ZW50cy5QUk9QRVJUWV9ESURfQ0hBTkdFXSA9
IGZ1bmN0aW9uIChrZXkpIHsKKyAgICBpZiAodGhpcy5faXNBbmdsZUJyYWNrZXQpIHsKKyAgICAg
IHJldHVybjsKKyAgICB9CisgICAgaWYgKHRoaXMuX2lzRGlzcGF0Y2hpbmdBdHRycykgeworICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICh0aGlzLl9jdXJyZW50U3RhdGUpIHsKKyAgICAg
IHRoaXMuX2N1cnJlbnRTdGF0ZS5sZWdhY3lQcm9wZXJ0eURpZENoYW5nZSh0aGlzLCBrZXkpOwor
ICAgIH0KKyAgfTsKKworICBleHBvcnRzLmRlZmF1bHQgPSBfZW1iZXJNZXRhbE1peGluLk1peGlu
LmNyZWF0ZShBdHRyc1Byb3h5TWl4aW4pOworfSk7CitlbmlmZWQoJ2VtYmVyLXZpZXdzL2NvbXBv
bmVudF9sb29rdXAnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvY29yZScsICdlbWJlci1tZXRh
bC9kZWJ1ZycsICdlbWJlci1ydW50aW1lL3N5c3RlbS9vYmplY3QnLCAnZW1iZXItaHRtbGJhcnMv
c3lzdGVtL2xvb2t1cC1oZWxwZXInLCAnY29udGFpbmVyL293bmVyJ10sIGZ1bmN0aW9uIChleHBv
cnRzLCBfZW1iZXJNZXRhbENvcmUsIF9lbWJlck1ldGFsRGVidWcsIF9lbWJlclJ1bnRpbWVTeXN0
ZW1PYmplY3QsIF9lbWJlckh0bWxiYXJzU3lzdGVtTG9va3VwSGVscGVyLCBfY29udGFpbmVyT3du
ZXIpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIGV4cG9ydHMuZGVmYXVsdCA9IF9lbWJlclJ1bnRp
bWVTeXN0ZW1PYmplY3QuZGVmYXVsdC5leHRlbmQoeworICAgIGludmFsaWROYW1lOiBmdW5jdGlv
biAobmFtZSkgeworICAgICAgaWYgKCFfZW1iZXJIdG1sYmFyc1N5c3RlbUxvb2t1cEhlbHBlci5D
T05UQUlOU19EQVNIX0NBQ0hFLmdldChuYW1lKSkgeworICAgICAgICBfZW1iZXJNZXRhbERlYnVn
LmFzc2VydCgnWW91IGNhbm5vdCB1c2UgXCcnICsgbmFtZSArICdcJyBhcyBhIGNvbXBvbmVudCBu
YW1lLiBDb21wb25lbnQgbmFtZXMgbXVzdCBjb250YWluIGEgaHlwaGVuLicpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKyAgICB9LAorCisgICAgbG9va3VwRmFjdG9yeTogZnVuY3Rp
b24gKG5hbWUsIG93bmVyKSB7CisgICAgICBvd25lciA9IG93bmVyIHx8IF9jb250YWluZXJPd25l
ci5nZXRPd25lcih0aGlzKTsKKworICAgICAgdmFyIGZ1bGxOYW1lID0gJ2NvbXBvbmVudDonICsg
bmFtZTsKKyAgICAgIHZhciB0ZW1wbGF0ZUZ1bGxOYW1lID0gJ3RlbXBsYXRlOmNvbXBvbmVudHMv
JyArIG5hbWU7CisgICAgICB2YXIgdGVtcGxhdGVSZWdpc3RlcmVkID0gb3duZXIgJiYgb3duZXIu
aGFzUmVnaXN0cmF0aW9uKHRlbXBsYXRlRnVsbE5hbWUpOworCisgICAgICBpZiAodGVtcGxhdGVS
ZWdpc3RlcmVkKSB7CisgICAgICAgIG93bmVyLmluamVjdChmdWxsTmFtZSwgJ2xheW91dCcsIHRl
bXBsYXRlRnVsbE5hbWUpOworICAgICAgfQorCisgICAgICB2YXIgQ29tcG9uZW50ID0gb3duZXIu
X2xvb2t1cEZhY3RvcnkoZnVsbE5hbWUpOworCisgICAgICAvLyBPbmx5IHRyZWF0IGFzIGEgY29t
cG9uZW50IGlmIGVpdGhlciB0aGUgY29tcG9uZW50CisgICAgICAvLyBvciBhIHRlbXBsYXRlIGhh
cyBiZWVuIHJlZ2lzdGVyZWQuCisgICAgICBpZiAodGVtcGxhdGVSZWdpc3RlcmVkIHx8IENvbXBv
bmVudCkgeworICAgICAgICBpZiAoIUNvbXBvbmVudCkgeworICAgICAgICAgIG93bmVyLnJlZ2lz
dGVyKGZ1bGxOYW1lLCBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5Db21wb25lbnQpOworICAgICAg
ICAgIENvbXBvbmVudCA9IG93bmVyLl9sb29rdXBGYWN0b3J5KGZ1bGxOYW1lKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gQ29tcG9uZW50OworICAgICAgfQorICAgIH0sCisKKyAgICBjb21w
b25lbnRGb3I6IGZ1bmN0aW9uIChuYW1lLCBvd25lciwgb3B0aW9ucykgeworICAgICAgaWYgKHRo
aXMuaW52YWxpZE5hbWUobmFtZSkpIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorCisgICAg
ICB2YXIgZnVsbE5hbWUgPSAnY29tcG9uZW50OicgKyBuYW1lOworICAgICAgcmV0dXJuIG93bmVy
Ll9sb29rdXBGYWN0b3J5KGZ1bGxOYW1lLCBvcHRpb25zKTsKKyAgICB9LAorCisgICAgbGF5b3V0
Rm9yOiBmdW5jdGlvbiAobmFtZSwgb3duZXIsIG9wdGlvbnMpIHsKKyAgICAgIGlmICh0aGlzLmlu
dmFsaWROYW1lKG5hbWUpKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKworICAgICAgdmFy
IHRlbXBsYXRlRnVsbE5hbWUgPSAndGVtcGxhdGU6Y29tcG9uZW50cy8nICsgbmFtZTsKKyAgICAg
IHJldHVybiBvd25lci5sb29rdXAodGVtcGxhdGVGdWxsTmFtZSwgb3B0aW9ucyk7CisgICAgfQor
ICB9KTsKK30pOworZW5pZmVkKCdlbWJlci12aWV3cy9jb21wb25lbnRzL2NvbXBvbmVudCcsIFsn
ZXhwb3J0cycsICdlbWJlci1tZXRhbC9kZWJ1ZycsICdlbWJlci1tZXRhbC9lbnZpcm9ubWVudCcs
ICdlbWJlci1ydW50aW1lL21peGlucy90YXJnZXRfYWN0aW9uX3N1cHBvcnQnLCAnZW1iZXItdmll
d3Mvdmlld3MvdmlldycsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQnLCAnZW1iZXItbWV0YWwv
cHJvcGVydHlfc2V0JywgJ2VtYmVyLW1ldGFsL2lzX25vbmUnLCAnZW1iZXItbWV0YWwvdXRpbHMn
LCAnZW1iZXItbWV0YWwvY29tcHV0ZWQnLCAnZW1iZXItdmlld3MvY29tcGF0L2F0dHJzLXByb3h5
JywgJ2NvbnRhaW5lci9vd25lciddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxEZWJ1
ZywgX2VtYmVyTWV0YWxFbnZpcm9ubWVudCwgX2VtYmVyUnVudGltZU1peGluc1RhcmdldF9hY3Rp
b25fc3VwcG9ydCwgX2VtYmVyVmlld3NWaWV3c1ZpZXcsIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0
LCBfZW1iZXJNZXRhbFByb3BlcnR5X3NldCwgX2VtYmVyTWV0YWxJc19ub25lLCBfZW1iZXJNZXRh
bFV0aWxzLCBfZW1iZXJNZXRhbENvbXB1dGVkLCBfZW1iZXJWaWV3c0NvbXBhdEF0dHJzUHJveHks
IF9jb250YWluZXJPd25lcikgeworICAndXNlIHN0cmljdCc7CisKKyAgZnVuY3Rpb24gdmFsaWRh
dGVBY3Rpb24oY29tcG9uZW50LCBhY3Rpb25OYW1lKSB7CisgICAgaWYgKGFjdGlvbk5hbWUgJiYg
YWN0aW9uTmFtZVtfZW1iZXJWaWV3c0NvbXBhdEF0dHJzUHJveHkuTVVUQUJMRV9DRUxMXSkgewor
ICAgICAgYWN0aW9uTmFtZSA9IGFjdGlvbk5hbWUudmFsdWU7CisgICAgfQorICAgIF9lbWJlck1l
dGFsRGVidWcuYXNzZXJ0KCdUaGUgZGVmYXVsdCBhY3Rpb24gd2FzIHRyaWdnZXJlZCBvbiB0aGUg
Y29tcG9uZW50ICcgKyBjb21wb25lbnQudG9TdHJpbmcoKSArICcsIGJ1dCB0aGUgYWN0aW9uIG5h
bWUgKCcgKyBhY3Rpb25OYW1lICsgJykgd2FzIG5vdCBhIHN0cmluZy4nLCBfZW1iZXJNZXRhbElz
X25vbmUuZGVmYXVsdChhY3Rpb25OYW1lKSB8fCB0eXBlb2YgYWN0aW9uTmFtZSA9PT0gJ3N0cmlu
ZycgfHwgdHlwZW9mIGFjdGlvbk5hbWUgPT09ICdmdW5jdGlvbicpOworICAgIHJldHVybiBhY3Rp
b25OYW1lOworICB9CisKKyAgLyoqCisgIEBtb2R1bGUgZW1iZXIKKyAgQHN1Ym1vZHVsZSBlbWJl
ci12aWV3cworICAqLworCisgIC8qKgorICAgIEFuIGBFbWJlci5Db21wb25lbnRgIGlzIGEgdmll
dyB0aGF0IGlzIGNvbXBsZXRlbHkKKyAgICBpc29sYXRlZC4gUHJvcGVydGllcyBhY2Nlc3NlZCBp
biBpdHMgdGVtcGxhdGVzIGdvCisgICAgdG8gdGhlIHZpZXcgb2JqZWN0IGFuZCBhY3Rpb25zIGFy
ZSB0YXJnZXRlZCBhdAorICAgIHRoZSB2aWV3IG9iamVjdC4gVGhlcmUgaXMgbm8gYWNjZXNzIHRv
IHRoZQorICAgIHN1cnJvdW5kaW5nIGNvbnRleHQgb3Igb3V0ZXIgY29udHJvbGxlcjsgYWxsCisg
ICAgY29udGV4dHVhbCBpbmZvcm1hdGlvbiBtdXN0IGJlIHBhc3NlZCBpbi4KKyAgCisgICAgVGhl
IGVhc2llc3Qgd2F5IHRvIGNyZWF0ZSBhbiBgRW1iZXIuQ29tcG9uZW50YCBpcyB2aWEKKyAgICBh
IHRlbXBsYXRlLiBJZiB5b3UgbmFtZSBhIHRlbXBsYXRlCisgICAgYGNvbXBvbmVudHMvbXktZm9v
YCwgeW91IHdpbGwgYmUgYWJsZSB0byB1c2UKKyAgICBge3tteS1mb299fWAgaW4gb3RoZXIgdGVt
cGxhdGVzLCB3aGljaCB3aWxsIG1ha2UKKyAgICBhbiBpbnN0YW5jZSBvZiB0aGUgaXNvbGF0ZWQg
Y29tcG9uZW50LgorICAKKyAgICBgYGBoYW5kbGViYXJzCisgICAge3thcHAtcHJvZmlsZSBwZXJz
b249Y3VycmVudFVzZXJ9fQorICAgIGBgYAorICAKKyAgICBgYGBoYW5kbGViYXJzCisgICAgPCEt
LSBhcHAtcHJvZmlsZSB0ZW1wbGF0ZSAtLT4KKyAgICA8aDE+e3twZXJzb24udGl0bGV9fTwvaDE+
CisgICAgPGltZyBzcmM9e3twZXJzb24uYXZhdGFyfX0+CisgICAgPHAgY2xhc3M9J3NpZ25hdHVy
ZSc+e3twZXJzb24uc2lnbmF0dXJlfX08L3A+CisgICAgYGBgCisgIAorICAgIFlvdSBjYW4gdXNl
IGB5aWVsZGAgaW5zaWRlIGEgdGVtcGxhdGUgdG8KKyAgICBpbmNsdWRlIHRoZSAqKmNvbnRlbnRz
Kiogb2YgYW55IGJsb2NrIGF0dGFjaGVkIHRvCisgICAgdGhlIGNvbXBvbmVudC4gVGhlIGJsb2Nr
IHdpbGwgYmUgZXhlY3V0ZWQgaW4gdGhlCisgICAgY29udGV4dCBvZiB0aGUgc3Vycm91bmRpbmcg
Y29udGV4dCBvciBvdXRlciBjb250cm9sbGVyOgorICAKKyAgICBgYGBoYW5kbGViYXJzCisgICAg
e3sjYXBwLXByb2ZpbGUgcGVyc29uPWN1cnJlbnRVc2VyfX0KKyAgICAgIDxwPkFkbWluIG1vZGU8
L3A+CisgICAgICB7eyEgRXhlY3V0ZWQgaW4gdGhlIGNvbnRyb2xsZXIncyBjb250ZXh0LiB9fQor
ICAgIHt7L2FwcC1wcm9maWxlfX0KKyAgICBgYGAKKyAgCisgICAgYGBgaGFuZGxlYmFycworICAg
IDwhLS0gYXBwLXByb2ZpbGUgdGVtcGxhdGUgLS0+CisgICAgPGgxPnt7cGVyc29uLnRpdGxlfX08
L2gxPgorICAgIHt7ISBFeGVjdXRlZCBpbiB0aGUgY29tcG9uZW50J3MgY29udGV4dC4gfX0KKyAg
ICB7e3lpZWxkfX0ge3shIGJsb2NrIGNvbnRlbnRzIH19CisgICAgYGBgCisgIAorICAgIElmIHlv
dSB3YW50IHRvIGN1c3RvbWl6ZSB0aGUgY29tcG9uZW50LCBpbiBvcmRlciB0bworICAgIGhhbmRs
ZSBldmVudHMgb3IgYWN0aW9ucywgeW91IGltcGxlbWVudCBhIHN1YmNsYXNzCisgICAgb2YgYEVt
YmVyLkNvbXBvbmVudGAgbmFtZWQgYWZ0ZXIgdGhlIG5hbWUgb2YgdGhlCisgICAgY29tcG9uZW50
LiBOb3RlIHRoYXQgYENvbXBvbmVudGAgbmVlZHMgdG8gYmUgYXBwZW5kZWQgdG8gdGhlIG5hbWUg
b2YKKyAgICB5b3VyIHN1YmNsYXNzIGxpa2UgYEFwcFByb2ZpbGVDb21wb25lbnRgLgorICAKKyAg
ICBGb3IgZXhhbXBsZSwgeW91IGNvdWxkIGltcGxlbWVudCB0aGUgYWN0aW9uCisgICAgYGhlbGxv
YCBmb3IgdGhlIGBhcHAtcHJvZmlsZWAgY29tcG9uZW50OgorICAKKyAgICBgYGBqYXZhc2NyaXB0
CisgICAgQXBwLkFwcFByb2ZpbGVDb21wb25lbnQgPSBFbWJlci5Db21wb25lbnQuZXh0ZW5kKHsK
KyAgICAgIGFjdGlvbnM6IHsKKyAgICAgICAgaGVsbG86IGZ1bmN0aW9uKG5hbWUpIHsKKyAgICAg
ICAgICBjb25zb2xlLmxvZygiSGVsbG8iLCBuYW1lKTsKKyAgICAgICAgfQorICAgICAgfQorICAg
IH0pOworICAgIGBgYAorICAKKyAgICBBbmQgdGhlbiB1c2UgaXQgaW4gdGhlIGNvbXBvbmVudCdz
IHRlbXBsYXRlOgorICAKKyAgICBgYGBoYW5kbGViYXJzCisgICAgPCEtLSBhcHAtcHJvZmlsZSB0
ZW1wbGF0ZSAtLT4KKyAgCisgICAgPGgxPnt7cGVyc29uLnRpdGxlfX08L2gxPgorICAgIHt7eWll
bGR9fSA8IS0tIGJsb2NrIGNvbnRlbnRzIC0tPgorICAKKyAgICA8YnV0dG9uIHt7YWN0aW9uICdo
ZWxsbycgcGVyc29uLm5hbWV9fT4KKyAgICAgIFNheSBIZWxsbyB0byB7e3BlcnNvbi5uYW1lfX0K
KyAgICA8L2J1dHRvbj4KKyAgICBgYGAKKyAgCisgICAgQ29tcG9uZW50cyBtdXN0IGhhdmUgYSBg
LWAgaW4gdGhlaXIgbmFtZSB0byBhdm9pZAorICAgIGNvbmZsaWN0cyB3aXRoIGJ1aWx0LWluIGNv
bnRyb2xzIHRoYXQgd3JhcCBIVE1MCisgICAgZWxlbWVudHMuIFRoaXMgaXMgY29uc2lzdGVudCB3
aXRoIHRoZSBzYW1lCisgICAgcmVxdWlyZW1lbnQgaW4gd2ViIGNvbXBvbmVudHMuCisgIAorICAg
IEBjbGFzcyBDb21wb25lbnQKKyAgICBAbmFtZXNwYWNlIEVtYmVyCisgICAgQGV4dGVuZHMgRW1i
ZXIuVmlldworICAgIEB1c2VzIEVtYmVyLlZpZXdUYXJnZXRBY3Rpb25TdXBwb3J0CisgICAgQHB1
YmxpYworICAqLworICB2YXIgQ29tcG9uZW50ID0gX2VtYmVyVmlld3NWaWV3c1ZpZXcuZGVmYXVs
dC5leHRlbmQoX2VtYmVyUnVudGltZU1peGluc1RhcmdldF9hY3Rpb25fc3VwcG9ydC5kZWZhdWx0
LCB7CisgICAgaXNDb21wb25lbnQ6IHRydWUsCisgICAgLyoKKyAgICAgIFRoaXMgaXMgc2V0IHNv
IHRoYXQgdGhlIHByb3RvIGluc3BlY3Rpb24gaW4gYXBwZW5kVGVtcGxhdGVkVmlldyBkb2VzIG5v
dAorICAgICAgdGhpbmsgdGhhdCBpdCBzaG91bGQgc2V0IHRoZSBjb21wb25lbnQncyBgY29udGV4
dGAgdG8gdGhhdCBvZiB0aGUgcGFyZW50IHZpZXcuCisgICAgKi8KKyAgICBjb250cm9sbGVyOiBu
dWxsLAorICAgIGNvbnRleHQ6IG51bGwsCisKKyAgICBpbnN0cnVtZW50TmFtZTogJ2NvbXBvbmVu
dCcsCisgICAgaW5zdHJ1bWVudERpc3BsYXk6IF9lbWJlck1ldGFsQ29tcHV0ZWQuY29tcHV0ZWQo
ZnVuY3Rpb24gKCkgeworICAgICAgaWYgKHRoaXMuX2RlYnVnQ29udGFpbmVyS2V5KSB7CisgICAg
ICAgIHJldHVybiAne3snICsgdGhpcy5fZGVidWdDb250YWluZXJLZXkuc3BsaXQoJzonKVsxXSAr
ICd9fSc7CisgICAgICB9CisgICAgfSksCisKKyAgICBpbml0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICB2YXIgX3RoaXMgPSB0aGlzOworCisgICAgICB0aGlzLl9zdXBlci5hcHBseSh0aGlzLCBhcmd1
bWVudHMpOworICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQuc2V0KHRoaXMsICdjb250cm9s
bGVyJywgdGhpcyk7CisgICAgICBfZW1iZXJNZXRhbFByb3BlcnR5X3NldC5zZXQodGhpcywgJ2Nv
bnRleHQnLCB0aGlzKTsKKworICAgICAgaWYgKCF0aGlzLmxheW91dCAmJiB0aGlzLmxheW91dE5h
bWUgJiYgX2NvbnRhaW5lck93bmVyLmdldE93bmVyKHRoaXMpKSB7CisgICAgICAgIHZhciBsYXlv
dXROYW1lID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdsYXlvdXROYW1lJyk7
CisKKyAgICAgICAgdGhpcy5sYXlvdXQgPSB0aGlzLnRlbXBsYXRlRm9yTmFtZShsYXlvdXROYW1l
KTsKKyAgICAgIH0KKworICAgICAgLy8gSWYgYSBgZGVmYXVsdExheW91dGAgd2FzIHNwZWNpZmll
ZCBtb3ZlIGl0IHRvIHRoZSBgbGF5b3V0YCBwcm9wLgorICAgICAgLy8gYGxheW91dGAgaXMgbm8g
bG9uZ2VyIGEgQ1AsIHNvIHRoaXMganVzdCBlbnN1cmVzIHRoYXQgdGhlIGBkZWZhdWx0TGF5b3V0
YAorICAgICAgLy8gbG9naWMgaXMgc3VwcG9ydGVkIHdpdGggYSBkZXByZWNhdGlvbgorICAgICAg
aWYgKHRoaXMuZGVmYXVsdExheW91dCAmJiAhdGhpcy5sYXlvdXQpIHsKKyAgICAgICAgX2VtYmVy
TWV0YWxEZWJ1Zy5kZXByZWNhdGUoJ1NwZWNpZnlpbmcgYGRlZmF1bHRMYXlvdXRgIHRvICcgKyB0
aGlzICsgJyBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIGBsYXlvdXRgIGluc3RlYWQuJywgZmFs
c2UsIHsKKyAgICAgICAgICBpZDogJ2VtYmVyLXZpZXdzLmNvbXBvbmVudC5kZWZhdWx0TGF5b3V0
JywKKyAgICAgICAgICB1bnRpbDogJzMuMC4wJywKKyAgICAgICAgICB1cmw6ICdodHRwOi8vZW1i
ZXJqcy5jb20vZGVwcmVjYXRpb25zL3YyLngvI3RvY19lbWJlci1jb21wb25lbnQtZGVmYXVsdGxh
eW91dCcKKyAgICAgICAgfSk7CisKKyAgICAgICAgdGhpcy5sYXlvdXQgPSB0aGlzLmRlZmF1bHRM
YXlvdXQ7CisgICAgICB9CisKKyAgICAgIC8vIElmIGluIGEgdGFnbGVzcyBjb21wb25lbnQsIGFz
c2VydCB0aGF0IG5vIGV2ZW50IGhhbmRsZXJzIGFyZSBkZWZpbmVkCisgICAgICBfZW1iZXJNZXRh
bERlYnVnLmFzc2VydCgnWW91IGNhbiBub3QgZGVmaW5lIGEgZnVuY3Rpb24gdGhhdCBoYW5kbGVz
IERPTSBldmVudHMgaW4gdGhlIGAnICsgdGhpcyArICdgIHRhZ2xlc3MgY29tcG9uZW50IHNpbmNl
IGl0IGRvZXNuXCd0IGhhdmUgYW55IERPTSBlbGVtZW50LicsIHRoaXMudGFnTmFtZSAhPT0gJycg
fHwgIV9lbWJlck1ldGFsRW52aXJvbm1lbnQuZGVmYXVsdC5oYXNET00gfHwgIShmdW5jdGlvbiAo
KSB7CisgICAgICAgIHZhciBldmVudERpc3BhdGNoZXIgPSBfY29udGFpbmVyT3duZXIuZ2V0T3du
ZXIoX3RoaXMpLmxvb2t1cCgnZXZlbnRfZGlzcGF0Y2hlcjptYWluJyk7CisgICAgICAgIHZhciBl
dmVudHMgPSBldmVudERpc3BhdGNoZXIgJiYgZXZlbnREaXNwYXRjaGVyLl9maW5hbEV2ZW50cyB8
fCB7fTsKKworICAgICAgICBmb3IgKHZhciBrZXkgaW4gZXZlbnRzKSB7CisgICAgICAgICAgdmFy
IG1ldGhvZE5hbWUgPSBldmVudHNba2V5XTsKKworICAgICAgICAgIGlmICh0eXBlb2YgX3RoaXNb
bWV0aG9kTmFtZV0gPT09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOyAv
LyBpbmRpY2F0ZSB0aGF0IHRoZSBhc3NlcnRpb24gc2hvdWxkIGJlIHRyaWdnZXJlZAorICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgfSkoKSk7CisgICAgfSwKKworICAgIHRlbXBsYXRlOiBu
dWxsLAorICAgIGxheW91dE5hbWU6IG51bGwsCisgICAgbGF5b3V0OiBudWxsLAorCisgICAgLyoq
CisgICAgICBJZiB0aGUgY29tcG9uZW50IGlzIGN1cnJlbnRseSBpbnNlcnRlZCBpbnRvIHRoZSBE
T00gb2YgYSBwYXJlbnQgdmlldywgdGhpcworICAgICAgcHJvcGVydHkgd2lsbCBwb2ludCB0byB0
aGUgY29udHJvbGxlciBvZiB0aGUgcGFyZW50IHZpZXcuCisgICAgICAgQHByb3BlcnR5IHRhcmdl
dE9iamVjdAorICAgICAgQHR5cGUgRW1iZXIuQ29udHJvbGxlcgorICAgICAgQGRlZmF1bHQgbnVs
bAorICAgICAgQHByaXZhdGUKKyAgICAqLworICAgIHRhcmdldE9iamVjdDogX2VtYmVyTWV0YWxD
b21wdXRlZC5jb21wdXRlZCgnY29udHJvbGxlcicsIGZ1bmN0aW9uIChrZXkpIHsKKyAgICAgIGlm
ICh0aGlzLl90YXJnZXRPYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3RhcmdldE9iamVj
dDsKKyAgICAgIH0KKyAgICAgIGlmICh0aGlzLl9jb250cm9sbGVyKSB7CisgICAgICAgIHJldHVy
biB0aGlzLl9jb250cm9sbGVyOworICAgICAgfQorICAgICAgdmFyIHBhcmVudFZpZXcgPSBfZW1i
ZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ3BhcmVudFZpZXcnKTsKKyAgICAgIHJldHVy
biBwYXJlbnRWaWV3ID8gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHBhcmVudFZpZXcsICdj
b250cm9sbGVyJykgOiBudWxsOworICAgIH0pLAorCisgICAgLyoqCisgICAgICBDYWxscyBhbiBh
Y3Rpb24gcGFzc2VkIHRvIGEgY29tcG9uZW50LgorICAgICAgIEZvciBleGFtcGxlIGEgY29tcG9u
ZW50IGZvciBwbGF5aW5nIG9yIHBhdXNpbmcgbXVzaWMgbWF5IHRyYW5zbGF0ZSBjbGljayBldmVu
dHMKKyAgICAgIGludG8gYWN0aW9uIG5vdGlmaWNhdGlvbnMgb2YgInBsYXkiIG9yICJzdG9wIiBk
ZXBlbmRpbmcgb24gc29tZSBpbnRlcm5hbCBzdGF0ZQorICAgICAgb2YgdGhlIGNvbXBvbmVudDoK
KyAgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICAvLyBhcHAvY29tcG9uZW50cy9wbGF5LWJ1dHRv
bi5qcworICAgICAgZXhwb3J0IGRlZmF1bHQgRW1iZXIuQ29tcG9uZW50LmV4dGVuZCh7CisgICAg
ICAgIGNsaWNrKCkgeworICAgICAgICAgIGlmICh0aGlzLmdldCgnaXNQbGF5aW5nJykpIHsKKyAg
ICAgICAgICAgIHRoaXMuc2VuZEFjdGlvbigncGxheScpOworICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICB0aGlzLnNlbmRBY3Rpb24oJ3N0b3AnKTsKKyAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgIH0pOworICAgICAgYGBgCisgICAgICAgVGhlIGFjdGlvbnMgInBsYXkiIGFuZCAi
c3RvcCIgbXVzdCBiZSBwYXNzZWQgdG8gdGhpcyBgcGxheS1idXR0b25gIGNvbXBvbmVudDoKKyAg
ICAgICBgYGBoYW5kbGViYXJzCisgICAgICB7eyEgYXBwL3RlbXBsYXRlcy9hcHBsaWNhdGlvbi5o
YnMgfX0KKyAgICAgIHt7cGxheS1idXR0b24gcGxheT0oYWN0aW9uICJtdXNpY1N0YXJ0ZWQiKSBz
dG9wPShhY3Rpb24gIm11c2ljU3RvcHBlZCIpfX0KKyAgICAgIGBgYAorICAgICAgIFdoZW4gdGhl
IGNvbXBvbmVudCByZWNlaXZlcyBhIGJyb3dzZXIgYGNsaWNrYCBldmVudCBpdCB0cmFuc2xhdGUg
dGhpcworICAgICAgaW50ZXJhY3Rpb24gaW50byBhcHBsaWNhdGlvbi1zcGVjaWZpYyBzZW1hbnRp
Y3MgKCJwbGF5IiBvciAic3RvcCIpIGFuZAorICAgICAgY2FsbHMgdGhlIHNwZWNpZmllZCBhY3Rp
b24uCisgICAgICAgYGBgamF2YXNjcmlwdAorICAgICAgLy8gYXBwL2NvbnRyb2xsZXIvYXBwbGlj
YXRpb24uanMKKyAgICAgIGV4cG9ydCBkZWZhdWx0IEVtYmVyLkNvbnRyb2xsZXIuZXh0ZW5kKHsK
KyAgICAgICAgYWN0aW9uczogeworICAgICAgICAgIG11c2ljU3RhcnRlZCgpIHsKKyAgICAgICAg
ICAgIC8vIGNhbGxlZCB3aGVuIHRoZSBwbGF5IGJ1dHRvbiBpcyBjbGlja2VkCisgICAgICAgICAg
ICAvLyBhbmQgdGhlIG11c2ljIHN0YXJ0ZWQgcGxheWluZworICAgICAgICAgIH0sCisgICAgICAg
ICAgbXVzaWNTdG9wcGVkKCkgeworICAgICAgICAgICAgLy8gY2FsbGVkIHdoZW4gdGhlIHBsYXkg
YnV0dG9uIGlzIGNsaWNrZWQKKyAgICAgICAgICAgIC8vIGFuZCB0aGUgbXVzaWMgc3RvcHBlZCBw
bGF5aW5nCisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9KTsKKyAgICAgIGBgYAorICAg
ICAgIElmIG5vIGFjdGlvbiBpcyBwYXNzZWQgdG8gYHNlbmRBY3Rpb25gIGEgZGVmYXVsdCBuYW1l
IG9mICJhY3Rpb24iCisgICAgICBpcyBhc3N1bWVkLgorICAgICAgIGBgYGphdmFzY3JpcHQKKyAg
ICAgIC8vIGFwcC9jb21wb25lbnRzL25leHQtYnV0dG9uLmpzCisgICAgICBleHBvcnQgZGVmYXVs
dCBFbWJlci5Db21wb25lbnQuZXh0ZW5kKHsKKyAgICAgICAgY2xpY2soKSB7CisgICAgICAgICAg
dGhpcy5zZW5kQWN0aW9uKCk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgICAgYGBgCisgICAg
ICAgYGBgaGFuZGxlYmFycworICAgICAge3shIGFwcC90ZW1wbGF0ZXMvYXBwbGljYXRpb24uaGJz
IH19CisgICAgICB7e25leHQtYnV0dG9uIGFjdGlvbj0oYWN0aW9uICJwbGF5TmV4dFNvbmdJbkFs
YnVtIil9fQorICAgICAgYGBgCisgICAgICAgYGBgamF2YXNjcmlwdAorICAgICAgLy8gYXBwL2Nv
bnRyb2xsZXJzL2FwcGxpY2F0aW9uLmpzCisgICAgICBBcHAuQXBwbGljYXRpb25Db250cm9sbGVy
ID0gRW1iZXIuQ29udHJvbGxlci5leHRlbmQoeworICAgICAgICBhY3Rpb25zOiB7CisgICAgICAg
ICAgcGxheU5leHRTb25nSW5BbGJ1bSgpIHsKKyAgICAgICAgICAgIC4uLgorICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgfSk7CisgICAgICBgYGAKKyAgICAgICBAbWV0aG9kIHNlbmRBY3Rp
b24KKyAgICAgIEBwYXJhbSBbYWN0aW9uXSB7U3RyaW5nfSB0aGUgYWN0aW9uIHRvIGNhbGwKKyAg
ICAgIEBwYXJhbSBbcGFyYW1zXSB7Kn0gYXJndW1lbnRzIGZvciB0aGUgYWN0aW9uCisgICAgICBA
cHVibGljCisgICAgKi8KKyAgICBzZW5kQWN0aW9uOiBmdW5jdGlvbiAoYWN0aW9uKSB7CisgICAg
ICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgY29udGV4dHMgPSBBcnJheShfbGVu
ID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7Cisg
ICAgICAgIGNvbnRleHRzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTsKKyAgICAgIH0KKwor
ICAgICAgdmFyIGFjdGlvbk5hbWU7CisKKyAgICAgIC8vIFNlbmQgdGhlIGRlZmF1bHQgYWN0aW9u
CisgICAgICBpZiAoYWN0aW9uID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgYWN0aW9uID0gJ2Fj
dGlvbic7CisgICAgICB9CisgICAgICBhY3Rpb25OYW1lID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9n
ZXQuZ2V0KHRoaXMsICdhdHRycy4nICsgYWN0aW9uKSB8fCBfZW1iZXJNZXRhbFByb3BlcnR5X2dl
dC5nZXQodGhpcywgYWN0aW9uKTsKKyAgICAgIGFjdGlvbk5hbWUgPSB2YWxpZGF0ZUFjdGlvbih0
aGlzLCBhY3Rpb25OYW1lKTsKKworICAgICAgLy8gSWYgbm8gYWN0aW9uIG5hbWUgZm9yIHRoYXQg
YWN0aW9uIGNvdWxkIGJlIGZvdW5kLCBqdXN0IGFib3J0LgorICAgICAgaWYgKGFjdGlvbk5hbWUg
PT09IHVuZGVmaW5lZCkgeworICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICAgIGlmICh0
eXBlb2YgYWN0aW9uTmFtZSA9PT0gJ2Z1bmN0aW9uJykgeworICAgICAgICBhY3Rpb25OYW1lLmFw
cGx5KHVuZGVmaW5lZCwgY29udGV4dHMpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdGhpcy50
cmlnZ2VyQWN0aW9uKHsKKyAgICAgICAgICBhY3Rpb246IGFjdGlvbk5hbWUsCisgICAgICAgICAg
YWN0aW9uQ29udGV4dDogY29udGV4dHMKKyAgICAgICAgfSk7CisgICAgICB9CisgICAgfSwKKwor
ICAgIHNlbmQ6IGZ1bmN0aW9uIChhY3Rpb25OYW1lKSB7CisgICAgICBmb3IgKHZhciBfbGVuMiA9
IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuMiA+IDEgPyBfbGVuMiAtIDEgOiAw
KSwgX2tleTIgPSAxOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7CisgICAgICAgIGFyZ3NbX2tl
eTIgLSAxXSA9IGFyZ3VtZW50c1tfa2V5Ml07CisgICAgICB9CisKKyAgICAgIHZhciB0YXJnZXQ7
CisgICAgICB2YXIgYWN0aW9uID0gdGhpcy5hY3Rpb25zICYmIHRoaXMuYWN0aW9uc1thY3Rpb25O
YW1lXTsKKworICAgICAgaWYgKGFjdGlvbikgeworICAgICAgICB2YXIgc2hvdWxkQnViYmxlID0g
YWN0aW9uLmFwcGx5KHRoaXMsIGFyZ3MpID09PSB0cnVlOworICAgICAgICBpZiAoIXNob3VsZEJ1
YmJsZSkgeworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBp
ZiAodGFyZ2V0ID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICd0YXJnZXQnKSkg
eworICAgICAgICB2YXIgX3RhcmdldDsKKworICAgICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2Vy
dCgnVGhlIGB0YXJnZXRgIGZvciAnICsgdGhpcyArICcgKCcgKyB0YXJnZXQgKyAnKSBkb2VzIG5v
dCBoYXZlIGEgYHNlbmRgIG1ldGhvZCcsIHR5cGVvZiB0YXJnZXQuc2VuZCA9PT0gJ2Z1bmN0aW9u
Jyk7CisgICAgICAgIChfdGFyZ2V0ID0gdGFyZ2V0KS5zZW5kLmFwcGx5KF90YXJnZXQsIGFyZ3Vt
ZW50cyk7CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAoIWFjdGlvbikgeworICAgICAgICAg
IHRocm93IG5ldyBFcnJvcihfZW1iZXJNZXRhbFV0aWxzLmluc3BlY3QodGhpcykgKyAnIGhhZCBu
byBhY3Rpb24gaGFuZGxlciBmb3I6ICcgKyBhY3Rpb25OYW1lKTsKKyAgICAgICAgfQorICAgICAg
fQorICAgIH0KKworICAgIC8qKgorICAgICAgUmV0dXJucyB0cnVlIHdoZW4gdGhlIGNvbXBvbmVu
dCB3YXMgaW52b2tlZCB3aXRoIGEgYmxvY2sgdGVtcGxhdGUuCisgICAgICAgRXhhbXBsZSAoYGhh
c0Jsb2NrYCB3aWxsIGJlIGBmYWxzZWApOgorICAgICAgIGBgYGhicworICAgICAge3shIHRlbXBs
YXRlcy9hcHBsaWNhdGlvbi5oYnMgfX0KKyAgICAgICB7e2Zvby1iYXJ9fQorICAgICAgIHt7ISB0
ZW1wbGF0ZXMvY29tcG9uZW50cy9mb28tYmFyLmhicyB9fQorICAgICAge3sjaWYgaGFzQmxvY2t9
fQorICAgICAgICBUaGlzIHdpbGwgbm90IGJlIHByaW50ZWQsIGJlY2F1c2Ugbm8gYmxvY2sgd2Fz
IHByb3ZpZGVkCisgICAgICB7ey9pZn19CisgICAgICBgYGAKKyAgICAgICBFeGFtcGxlIChgaGFz
QmxvY2tgIHdpbGwgYmUgYHRydWVgKToKKyAgICAgICBgYGBoYnMKKyAgICAgIHt7ISB0ZW1wbGF0
ZXMvYXBwbGljYXRpb24uaGJzIH19CisgICAgICAge3sjZm9vLWJhcn19CisgICAgICAgIEhpIQor
ICAgICAge3svZm9vLWJhcn19CisgICAgICAge3shIHRlbXBsYXRlcy9jb21wb25lbnRzL2Zvby1i
YXIuaGJzIH19CisgICAgICB7eyNpZiBoYXNCbG9ja319CisgICAgICAgIFRoaXMgd2lsbCBiZSBw
cmludGVkIGJlY2F1c2UgYSBibG9jayB3YXMgcHJvdmlkZWQKKyAgICAgICAge3t5aWVsZH19Cisg
ICAgICB7ey9pZn19CisgICAgICBgYGAKKyAgICAgICBUaGlzIGhlbHBlciBhY2NlcHRzIGFuIGFy
Z3VtZW50IHdpdGggdGhlIG5hbWUgb2YgdGhlIGJsb2NrIHdlIHdhbnQgdG8gY2hlY2sgdGhlIHBy
ZXNlbmNlIG9mLgorICAgICAgVGhpcyBpcyB1c2VmdWwgZm9yIGNoZWNraW5nIGZvciB0aGUgcHJl
c2VuY2Ugb2YgdGhlIG9wdGlvbmFsIGludmVyc2UgYmxvY2sgaW4gY29tcG9uZW50cy4KKyAgICAg
ICBgYGBoYnMKKyAgICAgIHt7ISB0ZW1wbGF0ZXMvYXBwbGljYXRpb24uaGJzIH19CisgICAgICAg
e3sjZm9vLWJhcn19CisgICAgICAgIEhpIQorICAgICAge3tlbHNlfX0KKyAgICAgICAgV2hhdCdz
IHVwPworICAgICAge3svZm9vLWJhcn19CisgICAgICAge3shIHRlbXBsYXRlcy9jb21wb25lbnRz
L2Zvby1iYXIuaGJzIH19CisgICAgICB7e3lpZWxkfX0KKyAgICAgIHt7I2lmIChoYXNCbG9jayAi
aW52ZXJzZSIpfX0KKyAgICAgICAge3t5aWVsZCB0bz0iaW52ZXJzZSJ9fQorICAgICAge3tlbHNl
fX0KKyAgICAgICAgSG93IGFyZSB5b3U/CisgICAgICB7ey9pZn19CisgICAgICBgYGAKKyAgICAg
ICBAcHVibGljCisgICAgICBAcHJvcGVydHkgaGFzQmxvY2sKKyAgICAgIEBwYXJhbSB7U3RyaW5n
fSBbYmxvY2tOYW1lPSJkZWZhdWx0Il0gVGhlIG5hbWUgb2YgdGhlIGJsb2NrIHRvIGNoZWNrIHBy
ZXNlbmNlIG9mLgorICAgICAgQHJldHVybnMgQm9vbGVhbgorICAgICAgQHNpbmNlIDEuMTMuMAor
ICAgICovCisKKyAgICAvKioKKyAgICAgIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBjb21wb25lbnQg
d2FzIGludm9rZWQgd2l0aCBhIGJsb2NrIHBhcmFtZXRlcgorICAgICAgc3VwcGxpZWQuCisgICAg
ICAgRXhhbXBsZSAoYGhhc0Jsb2NrUGFyYW1zYCB3aWxsIGJlIGBmYWxzZWApOgorICAgICAgIGBg
YGhicworICAgICAge3shIHRlbXBsYXRlcy9hcHBsaWNhdGlvbi5oYnMgfX0KKyAgICAgICB7eyNm
b28tYmFyfX0KKyAgICAgICAgTm8gYmxvY2sgcGFyYW1ldGVyLgorICAgICAge3svZm9vLWJhcn19
CisgICAgICAge3shIHRlbXBsYXRlcy9jb21wb25lbnRzL2Zvby1iYXIuaGJzIH19CisgICAgICB7
eyNpZiBoYXNCbG9ja1BhcmFtc319CisgICAgICAgIFRoaXMgd2lsbCBub3QgYmUgcHJpbnRlZCwg
YmVjYXVzZSBubyBibG9jayB3YXMgcHJvdmlkZWQKKyAgICAgICAge3t5aWVsZCB0aGlzfX0KKyAg
ICAgIHt7L2lmfX0KKyAgICAgIGBgYAorICAgICAgIEV4YW1wbGUgKGBoYXNCbG9ja1BhcmFtc2Ag
d2lsbCBiZSBgdHJ1ZWApOgorICAgICAgIGBgYGhicworICAgICAge3shIHRlbXBsYXRlcy9hcHBs
aWNhdGlvbi5oYnMgfX0KKyAgICAgICB7eyNmb28tYmFyIGFzIHxmb298fX0KKyAgICAgICAgSGkh
CisgICAgICB7ey9mb28tYmFyfX0KKyAgICAgICB7eyEgdGVtcGxhdGVzL2NvbXBvbmVudHMvZm9v
LWJhci5oYnMgfX0KKyAgICAgIHt7I2lmIGhhc0Jsb2NrUGFyYW1zfX0KKyAgICAgICAgVGhpcyB3
aWxsIGJlIHByaW50ZWQgYmVjYXVzZSBhIGJsb2NrIHdhcyBwcm92aWRlZAorICAgICAgICB7e3lp
ZWxkIHRoaXN9fQorICAgICAge3svaWZ9fQorICAgICAgYGBgCisgICAgICBAcHVibGljCisgICAg
ICBAcHJvcGVydHkgaGFzQmxvY2tQYXJhbXMKKyAgICAgIEByZXR1cm5zIEJvb2xlYW4KKyAgICAg
IEBzaW5jZSAxLjEzLjAKKyAgICAqLworCisgICAgLyoqCisgICAgICBFbmFibGVzIGNvbXBvbmVu
dHMgdG8gdGFrZSBhIGxpc3Qgb2YgcGFyYW1ldGVycyBhcyBhcmd1bWVudHMKKyAgICAgICBGb3Ig
ZXhhbXBsZSBhIGNvbXBvbmVudCB0aGF0IHRha2VzIHR3byBwYXJhbWV0ZXJzIHdpdGggdGhlIG5h
bWVzCisgICAgICBgbmFtZWAgYW5kIGBhZ2VgOgorICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAg
IGxldCBNeUNvbXBvbmVudCA9IEVtYmVyLkNvbXBvbmVudC5leHRlbmQ7CisgICAgICBNeUNvbXBv
bmVudC5yZW9wZW5DbGFzcyh7CisgICAgICAgIHBvc2l0aW9uYWxQYXJhbXM6IFsnbmFtZScsICdh
Z2UnXQorICAgICAgfSk7CisgICAgICBgYGAKKyAgICAgICBJdCBjYW4gdGhlbiBiZSBpbnZva2Vk
IGxpa2UgdGhpczoKKyAgICAgICBgYGBoYnMKKyAgICAgIHt7bXktY29tcG9uZW50ICJKb2huIiAz
OH19CisgICAgICBgYGAKKyAgICAgICBUaGUgcGFyYW1ldGVycyBjYW4gYmUgcmVmZXJlZCB0byBq
dXN0IGxpa2UgbmFtZWQgcGFyYW1ldGVyczoKKyAgICAgICBgYGBoYnMKKyAgICAgIE5hbWU6IHt7
YXR0cnMubmFtZX19LCBBZ2U6IHt7YXR0cnMuYWdlfX0uCisgICAgICBgYGAKKyAgICAgICBVc2lu
ZyBhIHN0cmluZyBpbnN0ZWFkIG9mIGFuIGFycmF5IGFsbG93cyBmb3IgYW4gYXJiaXRyYXJ5IG51
bWJlciBvZgorICAgICAgcGFyYW1ldGVyczoKKyAgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICBs
ZXQgTXlDb21wb25lbnQgPSBFbWJlci5Db21wb25lbnQuZXh0ZW5kOworICAgICAgTXlDb21wb25l
bnQucmVvcGVuQ2xhc3MoeworICAgICAgICBwb3NpdGlvbmFsUGFyYW1zOiAnbmFtZXMnCisgICAg
ICB9KTsKKyAgICAgIGBgYAorICAgICAgIEl0IGNhbiB0aGVuIGJlIGludm9rZWQgbGlrZSB0aGlz
OgorICAgICAgIGBgYGhicworICAgICAge3tteS1jb21wb25lbnQgIkpvaG4iICJNaWNoYWVsIiAi
U2NvdHQifX0KKyAgICAgIGBgYAorICAgICAgIFRoZSBwYXJhbWV0ZXJzIGNhbiB0aGVuIGJlIHJl
ZmVyZWQgdG8gYnkgZW51bWVyYXRpbmcgb3ZlciB0aGUgbGlzdDoKKyAgICAgICBgYGBoYnMKKyAg
ICAgIHt7I2VhY2ggYXR0cnMubmFtZXMgYXMgfG5hbWV8fX17e25hbWV9fXt7L2VhY2h9fQorICAg
ICAgYGBgCisgICAgICAgQHN0YXRpYworICAgICAgQHB1YmxpYworICAgICAgQHByb3BlcnR5IHBv
c2l0aW9uYWxQYXJhbXMKKyAgICAgIEBzaW5jZSAxLjEzLjAKKyAgICAqLworCisgICAgLyoqCisg
ICAgICBDYWxsZWQgd2hlbiB0aGUgYXR0cmlidXRlcyBwYXNzZWQgaW50byB0aGUgY29tcG9uZW50
IGhhdmUgYmVlbiB1cGRhdGVkLgorICAgICAgQ2FsbGVkIGJvdGggZHVyaW5nIHRoZSBpbml0aWFs
IHJlbmRlciBvZiBhIGNvbnRhaW5lciBhbmQgZHVyaW5nIGEgcmVyZW5kZXIuCisgICAgICBDYW4g
YmUgdXNlZCBpbiBwbGFjZSBvZiBhbiBvYnNlcnZlcjsgY29kZSBwbGFjZWQgaGVyZSB3aWxsIGJl
IGV4ZWN1dGVkCisgICAgICBldmVyeSB0aW1lIGFueSBhdHRyaWJ1dGUgdXBkYXRlcy4KKyAgICAg
ICBAbWV0aG9kIGRpZFJlY2VpdmVBdHRycworICAgICAgQHB1YmxpYworICAgICAgQHNpbmNlIDEu
MTMuMAorICAgICovCisKKyAgICAvKioKKyAgICAgIENhbGxlZCB3aGVuIHRoZSBhdHRyaWJ1dGVz
IHBhc3NlZCBpbnRvIHRoZSBjb21wb25lbnQgaGF2ZSBiZWVuIHVwZGF0ZWQuCisgICAgICBDYWxs
ZWQgYm90aCBkdXJpbmcgdGhlIGluaXRpYWwgcmVuZGVyIG9mIGEgY29udGFpbmVyIGFuZCBkdXJp
bmcgYSByZXJlbmRlci4KKyAgICAgIENhbiBiZSB1c2VkIGluIHBsYWNlIG9mIGFuIG9ic2VydmVy
OyBjb2RlIHBsYWNlZCBoZXJlIHdpbGwgYmUgZXhlY3V0ZWQKKyAgICAgIGV2ZXJ5IHRpbWUgYW55
IGF0dHJpYnV0ZSB1cGRhdGVzLgorICAgICAgIEBldmVudCBkaWRSZWNlaXZlQXR0cnMKKyAgICAg
IEBwdWJsaWMKKyAgICAgIEBzaW5jZSAxLjEzLjAKKyAgICAqLworCisgICAgLyoqCisgICAgICBD
YWxsZWQgYWZ0ZXIgYSBjb21wb25lbnQgaGFzIGJlZW4gcmVuZGVyZWQsIGJvdGggb24gaW5pdGlh
bCByZW5kZXIgYW5kCisgICAgICBpbiBzdWJzZXF1ZW50IHJlcmVuZGVycy4KKyAgICAgICBAbWV0
aG9kIGRpZFJlbmRlcgorICAgICAgQHB1YmxpYworICAgICAgQHNpbmNlIDEuMTMuMAorICAgICov
CisKKyAgICAvKioKKyAgICAgIENhbGxlZCBhZnRlciBhIGNvbXBvbmVudCBoYXMgYmVlbiByZW5k
ZXJlZCwgYm90aCBvbiBpbml0aWFsIHJlbmRlciBhbmQKKyAgICAgIGluIHN1YnNlcXVlbnQgcmVy
ZW5kZXJzLgorICAgICAgIEBldmVudCBkaWRSZW5kZXIKKyAgICAgIEBwdWJsaWMKKyAgICAgIEBz
aW5jZSAxLjEzLjAKKyAgICAqLworCisgICAgLyoqCisgICAgICBDYWxsZWQgYmVmb3JlIGEgY29t
cG9uZW50IGhhcyBiZWVuIHJlbmRlcmVkLCBib3RoIG9uIGluaXRpYWwgcmVuZGVyIGFuZAorICAg
ICAgaW4gc3Vic2VxdWVudCByZXJlbmRlcnMuCisgICAgICAgQG1ldGhvZCB3aWxsUmVuZGVyCisg
ICAgICBAcHVibGljCisgICAgICBAc2luY2UgMS4xMy4wCisgICAgKi8KKworICAgIC8qKgorICAg
ICAgQ2FsbGVkIGJlZm9yZSBhIGNvbXBvbmVudCBoYXMgYmVlbiByZW5kZXJlZCwgYm90aCBvbiBp
bml0aWFsIHJlbmRlciBhbmQKKyAgICAgIGluIHN1YnNlcXVlbnQgcmVyZW5kZXJzLgorICAgICAg
IEBldmVudCB3aWxsUmVuZGVyCisgICAgICBAcHVibGljCisgICAgICBAc2luY2UgMS4xMy4wCisg
ICAgKi8KKworICAgIC8qKgorICAgICAgQ2FsbGVkIHdoZW4gdGhlIGF0dHJpYnV0ZXMgcGFzc2Vk
IGludG8gdGhlIGNvbXBvbmVudCBoYXZlIGJlZW4gY2hhbmdlZC4KKyAgICAgIENhbGxlZCBvbmx5
IGR1cmluZyBhIHJlcmVuZGVyLCBub3QgZHVyaW5nIGFuIGluaXRpYWwgcmVuZGVyLgorICAgICAg
IEBtZXRob2QgZGlkVXBkYXRlQXR0cnMKKyAgICAgIEBwdWJsaWMKKyAgICAgIEBzaW5jZSAxLjEz
LjAKKyAgICAqLworCisgICAgLyoqCisgICAgICBDYWxsZWQgd2hlbiB0aGUgYXR0cmlidXRlcyBw
YXNzZWQgaW50byB0aGUgY29tcG9uZW50IGhhdmUgYmVlbiBjaGFuZ2VkLgorICAgICAgQ2FsbGVk
IG9ubHkgZHVyaW5nIGEgcmVyZW5kZXIsIG5vdCBkdXJpbmcgYW4gaW5pdGlhbCByZW5kZXIuCisg
ICAgICAgQGV2ZW50IGRpZFVwZGF0ZUF0dHJzCisgICAgICBAcHVibGljCisgICAgICBAc2luY2Ug
MS4xMy4wCisgICAgKi8KKworICAgIC8qKgorICAgICAgQ2FsbGVkIHdoZW4gdGhlIGNvbXBvbmVu
dCBpcyBhYm91dCB0byB1cGRhdGUgYW5kIHJlcmVuZGVyIGl0c2VsZi4KKyAgICAgIENhbGxlZCBv
bmx5IGR1cmluZyBhIHJlcmVuZGVyLCBub3QgZHVyaW5nIGFuIGluaXRpYWwgcmVuZGVyLgorICAg
ICAgIEBtZXRob2Qgd2lsbFVwZGF0ZQorICAgICAgQHB1YmxpYworICAgICAgQHNpbmNlIDEuMTMu
MAorICAgICovCisKKyAgICAvKioKKyAgICAgIENhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMg
YWJvdXQgdG8gdXBkYXRlIGFuZCByZXJlbmRlciBpdHNlbGYuCisgICAgICBDYWxsZWQgb25seSBk
dXJpbmcgYSByZXJlbmRlciwgbm90IGR1cmluZyBhbiBpbml0aWFsIHJlbmRlci4KKyAgICAgICBA
ZXZlbnQgd2lsbFVwZGF0ZQorICAgICAgQHB1YmxpYworICAgICAgQHNpbmNlIDEuMTMuMAorICAg
ICovCisKKyAgICAvKioKKyAgICAgIENhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgaGFzIHVwZGF0
ZWQgYW5kIHJlcmVuZGVyZWQgaXRzZWxmLgorICAgICAgQ2FsbGVkIG9ubHkgZHVyaW5nIGEgcmVy
ZW5kZXIsIG5vdCBkdXJpbmcgYW4gaW5pdGlhbCByZW5kZXIuCisgICAgICAgQGV2ZW50IGRpZFVw
ZGF0ZQorICAgICAgQHB1YmxpYworICAgICAgQHNpbmNlIDEuMTMuMAorICAgICovCisKKyAgICAv
KioKKyAgICAgIENhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgaGFzIHVwZGF0ZWQgYW5kIHJlcmVu
ZGVyZWQgaXRzZWxmLgorICAgICAgQ2FsbGVkIG9ubHkgZHVyaW5nIGEgcmVyZW5kZXIsIG5vdCBk
dXJpbmcgYW4gaW5pdGlhbCByZW5kZXIuCisgICAgICAgQGV2ZW50IGRpZFVwZGF0ZQorICAgICAg
QHB1YmxpYworICAgICAgQHNpbmNlIDEuMTMuMAorICAgICovCisgIH0pOworCisgIENvbXBvbmVu
dC5yZW9wZW5DbGFzcyh7CisgICAgaXNDb21wb25lbnRGYWN0b3J5OiB0cnVlCisgIH0pOworCisg
IGV4cG9ydHMuZGVmYXVsdCA9IENvbXBvbmVudDsKK30pOworZW5pZmVkKCdlbWJlci12aWV3cy9p
bmRleCcsIFsnZXhwb3J0cycsICdlbWJlci1ydW50aW1lJywgJ2VtYmVyLXZpZXdzL3N5c3RlbS9q
cXVlcnknLCAnZW1iZXItdmlld3Mvc3lzdGVtL3V0aWxzJywgJ2VtYmVyLXZpZXdzL3N5c3RlbS9l
eHQnLCAnZW1iZXItbWV0YWwtdmlld3MnLCAnZW1iZXItdmlld3MvY29tcG9uZW50cy9jb21wb25l
bnQnLCAnZW1iZXItdmlld3Mvc3lzdGVtL2V2ZW50X2Rpc3BhdGNoZXInLCAnZW1iZXItdmlld3Mv
bWl4aW5zL3ZpZXdfdGFyZ2V0X2FjdGlvbl9zdXBwb3J0JywgJ2VtYmVyLXZpZXdzL2NvbXBvbmVu
dF9sb29rdXAnLCAnZW1iZXItdmlld3Mvdmlld3MvY2hlY2tib3gnLCAnZW1iZXItdmlld3MvbWl4
aW5zL3RleHRfc3VwcG9ydCcsICdlbWJlci12aWV3cy92aWV3cy90ZXh0X2ZpZWxkJywgJ2VtYmVy
LXZpZXdzL3ZpZXdzL3RleHRfYXJlYSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyUnVudGlt
ZSwgX2VtYmVyVmlld3NTeXN0ZW1KcXVlcnksIF9lbWJlclZpZXdzU3lzdGVtVXRpbHMsIF9lbWJl
clZpZXdzU3lzdGVtRXh0LCBfZW1iZXJNZXRhbFZpZXdzLCBfZW1iZXJWaWV3c0NvbXBvbmVudHND
b21wb25lbnQsIF9lbWJlclZpZXdzU3lzdGVtRXZlbnRfZGlzcGF0Y2hlciwgX2VtYmVyVmlld3NN
aXhpbnNWaWV3X3RhcmdldF9hY3Rpb25fc3VwcG9ydCwgX2VtYmVyVmlld3NDb21wb25lbnRfbG9v
a3VwLCBfZW1iZXJWaWV3c1ZpZXdzQ2hlY2tib3gsIF9lbWJlclZpZXdzTWl4aW5zVGV4dF9zdXBw
b3J0LCBfZW1iZXJWaWV3c1ZpZXdzVGV4dF9maWVsZCwgX2VtYmVyVmlld3NWaWV3c1RleHRfYXJl
YSkgeworICAvKioKKyAgQG1vZHVsZSBlbWJlcgorICBAc3VibW9kdWxlIGVtYmVyLXZpZXdzCisg
ICovCisKKyAgLy8gQkVHSU4gSU1QT1JUUworICAndXNlIHN0cmljdCc7CisKKyAgLy8gRU5EIElN
UE9SVFMKKworICAvKioKKyAgICBBbGlhcyBmb3IgalF1ZXJ5CisgIAorICAgIEBtZXRob2QgJAor
ICAgIEBmb3IgRW1iZXIKKyAgIEBwdWJsaWMKKyAgKi8KKworICAvLyBCRUdJTiBFWFBPUlRTCisg
IF9lbWJlclJ1bnRpbWUuZGVmYXVsdC4kID0gX2VtYmVyVmlld3NTeXN0ZW1KcXVlcnkuZGVmYXVs
dDsKKworICBfZW1iZXJSdW50aW1lLmRlZmF1bHQuVmlld1RhcmdldEFjdGlvblN1cHBvcnQgPSBf
ZW1iZXJWaWV3c01peGluc1ZpZXdfdGFyZ2V0X2FjdGlvbl9zdXBwb3J0LmRlZmF1bHQ7CisKKyAg
dmFyIFZpZXdVdGlscyA9IF9lbWJlclJ1bnRpbWUuZGVmYXVsdC5WaWV3VXRpbHMgPSB7fTsKKyAg
Vmlld1V0aWxzLmlzU2ltcGxlQ2xpY2sgPSBfZW1iZXJWaWV3c1N5c3RlbVV0aWxzLmlzU2ltcGxl
Q2xpY2s7CisgIFZpZXdVdGlscy5nZXRWaWV3Q2xpZW50UmVjdHMgPSBfZW1iZXJWaWV3c1N5c3Rl
bVV0aWxzLmdldFZpZXdDbGllbnRSZWN0czsKKyAgVmlld1V0aWxzLmdldFZpZXdCb3VuZGluZ0Ns
aWVudFJlY3QgPSBfZW1iZXJWaWV3c1N5c3RlbVV0aWxzLmdldFZpZXdCb3VuZGluZ0NsaWVudFJl
Y3Q7CisKKyAgX2VtYmVyUnVudGltZS5kZWZhdWx0Ll9SZW5kZXJlciA9IF9lbWJlck1ldGFsVmll
d3MuUmVuZGVyZXI7CisKKyAgX2VtYmVyUnVudGltZS5kZWZhdWx0LkNoZWNrYm94ID0gX2VtYmVy
Vmlld3NWaWV3c0NoZWNrYm94LmRlZmF1bHQ7CisgIF9lbWJlclJ1bnRpbWUuZGVmYXVsdC5UZXh0
RmllbGQgPSBfZW1iZXJWaWV3c1ZpZXdzVGV4dF9maWVsZC5kZWZhdWx0OworICBfZW1iZXJSdW50
aW1lLmRlZmF1bHQuVGV4dEFyZWEgPSBfZW1iZXJWaWV3c1ZpZXdzVGV4dF9hcmVhLmRlZmF1bHQ7
CisKKyAgX2VtYmVyUnVudGltZS5kZWZhdWx0LlRleHRTdXBwb3J0ID0gX2VtYmVyVmlld3NNaXhp
bnNUZXh0X3N1cHBvcnQuZGVmYXVsdDsKKyAgX2VtYmVyUnVudGltZS5kZWZhdWx0LkNvbXBvbmVu
dExvb2t1cCA9IF9lbWJlclZpZXdzQ29tcG9uZW50X2xvb2t1cC5kZWZhdWx0OworICBfZW1iZXJS
dW50aW1lLmRlZmF1bHQuQ29tcG9uZW50ID0gX2VtYmVyVmlld3NDb21wb25lbnRzQ29tcG9uZW50
LmRlZmF1bHQ7CisgIF9lbWJlclJ1bnRpbWUuZGVmYXVsdC5FdmVudERpc3BhdGNoZXIgPSBfZW1i
ZXJWaWV3c1N5c3RlbUV2ZW50X2Rpc3BhdGNoZXIuZGVmYXVsdDsKKworICAvLyBFTkQgRVhQT1JU
UworCisgIGV4cG9ydHMuZGVmYXVsdCA9IF9lbWJlclJ1bnRpbWUuZGVmYXVsdDsKK30pOworLy8g
Zm9yIHRoZSBzaWRlIGVmZmVjdCBvZiBleHRlbmRpbmcgRW1iZXIucnVuLnF1ZXVlcworZW5pZmVk
KCdlbWJlci12aWV3cy9taXhpbnMvYXJpYV9yb2xlX3N1cHBvcnQnLCBbJ2V4cG9ydHMnLCAnZW1i
ZXItbWV0YWwvbWl4aW4nXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsTWl4aW4pIHsK
KyAgLyoqCisgICBAbW9kdWxlIGVtYmVyCisgICBAc3VibW9kdWxlIGVtYmVyLXZpZXdzCisgICov
CisKKyAgJ3VzZSBzdHJpY3QnOworCisgIC8qKgorICAgQGNsYXNzIEFyaWFSb2xlU3VwcG9ydAor
ICAgQG5hbWVzcGFjZSBFbWJlcgorICAgQHByaXZhdGUKKyAgKi8KKyAgZXhwb3J0cy5kZWZhdWx0
ID0gX2VtYmVyTWV0YWxNaXhpbi5NaXhpbi5jcmVhdGUoeworICAgIGF0dHJpYnV0ZUJpbmRpbmdz
OiBbJ2FyaWFSb2xlOnJvbGUnXSwKKworICAgIC8qKgorICAgICBUaGUgV0FJLUFSSUEgcm9sZSBv
ZiB0aGUgY29udHJvbCByZXByZXNlbnRlZCBieSB0aGlzIHZpZXcuIEZvciBleGFtcGxlLCBhCisg
ICAgIGJ1dHRvbiBtYXkgaGF2ZSBhIHJvbGUgb2YgdHlwZSAnYnV0dG9uJywgb3IgYSBwYW5lIG1h
eSBoYXZlIGEgcm9sZSBvZgorICAgICB0eXBlICdhbGVydGRpYWxvZycuIFRoaXMgcHJvcGVydHkg
aXMgdXNlZCBieSBhc3Npc3RpdmUgc29mdHdhcmUgdG8gaGVscAorICAgICB2aXN1YWxseSBjaGFs
bGVuZ2VkIHVzZXJzIG5hdmlnYXRlIHJpY2ggd2ViIGFwcGxpY2F0aW9ucy4KKyAgICAgIFRoZSBm
dWxsIGxpc3Qgb2YgdmFsaWQgV0FJLUFSSUEgcm9sZXMgaXMgYXZhaWxhYmxlIGF0OgorICAgICBb
aHR0cDovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEvcm9sZXMjcm9sZXNfY2F0ZWdvcml6YXRpb25d
KGh0dHA6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhL3JvbGVzI3JvbGVzX2NhdGVnb3JpemF0aW9u
KQorICAgICAgQHByb3BlcnR5IGFyaWFSb2xlCisgICAgIEB0eXBlIFN0cmluZworICAgICBAZGVm
YXVsdCBudWxsCisgICAgIEBwdWJsaWMKKyAgICAqLworICAgIGFyaWFSb2xlOiBudWxsCisgIH0p
OworfSk7CitlbmlmZWQoJ2VtYmVyLXZpZXdzL21peGlucy9jbGFzc19uYW1lc19zdXBwb3J0Jywg
WydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLW1ldGFsL21peGluJywgJ2Vt
YmVyLXJ1bnRpbWUvc3lzdGVtL25hdGl2ZV9hcnJheSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2Vt
YmVyTWV0YWxEZWJ1ZywgX2VtYmVyTWV0YWxNaXhpbiwgX2VtYmVyUnVudGltZVN5c3RlbU5hdGl2
ZV9hcnJheSkgeworICAvKioKKyAgQG1vZHVsZSBlbWJlcgorICBAc3VibW9kdWxlIGVtYmVyLXZp
ZXdzCisgICovCisgICd1c2Ugc3RyaWN0JzsKKworICB2YXIgRU1QVFlfQVJSQVkgPSBbXTsKKwor
ICAvKioKKyAgICBAY2xhc3MgQ2xhc3NOYW1lc1N1cHBvcnQKKyAgICBAbmFtZXNwYWNlIEVtYmVy
CisgICAgQHByaXZhdGUKKyAgKi8KKyAgZXhwb3J0cy5kZWZhdWx0ID0gX2VtYmVyTWV0YWxNaXhp
bi5NaXhpbi5jcmVhdGUoeworICAgIGNvbmNhdGVuYXRlZFByb3BlcnRpZXM6IFsnY2xhc3NOYW1l
cycsICdjbGFzc05hbWVCaW5kaW5ncyddLAorCisgICAgaW5pdDogZnVuY3Rpb24gKCkgeworICAg
ICAgdGhpcy5fc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKworICAgICAgX2VtYmVyTWV0
YWxEZWJ1Zy5hc3NlcnQoJ09ubHkgYXJyYXlzIGFyZSBhbGxvd2VkIGZvciBcJ2NsYXNzTmFtZUJp
bmRpbmdzXCcnLCBBcnJheS5pc0FycmF5KHRoaXMuY2xhc3NOYW1lQmluZGluZ3MpKTsKKyAgICAg
IHRoaXMuY2xhc3NOYW1lQmluZGluZ3MgPSBfZW1iZXJSdW50aW1lU3lzdGVtTmF0aXZlX2FycmF5
LkEodGhpcy5jbGFzc05hbWVCaW5kaW5ncy5zbGljZSgpKTsKKworICAgICAgX2VtYmVyTWV0YWxE
ZWJ1Zy5hc3NlcnQoJ09ubHkgYXJyYXlzIG9mIHN0YXRpYyBjbGFzcyBzdHJpbmdzIGFyZSBhbGxv
d2VkIGZvciBcJ2NsYXNzTmFtZXNcJy4gRm9yIGR5bmFtaWMgY2xhc3NlcywgdXNlIFwnY2xhc3NO
YW1lQmluZGluZ3NcJy4nLCBBcnJheS5pc0FycmF5KHRoaXMuY2xhc3NOYW1lcykpOworICAgICAg
dGhpcy5jbGFzc05hbWVzID0gX2VtYmVyUnVudGltZVN5c3RlbU5hdGl2ZV9hcnJheS5BKHRoaXMu
Y2xhc3NOYW1lcy5zbGljZSgpKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICBTdGFuZGFyZCBD
U1MgY2xhc3MgbmFtZXMgdG8gYXBwbHkgdG8gdGhlIHZpZXcncyBvdXRlciBlbGVtZW50LiBUaGlz
CisgICAgICBwcm9wZXJ0eSBhdXRvbWF0aWNhbGx5IGluaGVyaXRzIGFueSBjbGFzcyBuYW1lcyBk
ZWZpbmVkIGJ5IHRoZSB2aWV3J3MKKyAgICAgIHN1cGVyY2xhc3NlcyBhcyB3ZWxsLgorICAgICAg
IEBwcm9wZXJ0eSBjbGFzc05hbWVzCisgICAgICBAdHlwZSBBcnJheQorICAgICAgQGRlZmF1bHQg
WydlbWJlci12aWV3J10KKyAgICAgIEBwdWJsaWMKKyAgICAqLworICAgIGNsYXNzTmFtZXM6IFsn
ZW1iZXItdmlldyddLAorCisgICAgLyoqCisgICAgICBBIGxpc3Qgb2YgcHJvcGVydGllcyBvZiB0
aGUgdmlldyB0byBhcHBseSBhcyBjbGFzcyBuYW1lcy4gSWYgdGhlIHByb3BlcnR5CisgICAgICBp
cyBhIHN0cmluZyB2YWx1ZSwgdGhlIHZhbHVlIG9mIHRoYXQgc3RyaW5nIHdpbGwgYmUgYXBwbGll
ZCBhcyBhIGNsYXNzCisgICAgICBuYW1lLgorICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgIC8v
IEFwcGxpZXMgdGhlICdoaWdoJyBjbGFzcyB0byB0aGUgdmlldyBlbGVtZW50CisgICAgICBFbWJl
ci5WaWV3LmV4dGVuZCh7CisgICAgICAgIGNsYXNzTmFtZUJpbmRpbmdzOiBbJ3ByaW9yaXR5J10s
CisgICAgICAgIHByaW9yaXR5OiAnaGlnaCcKKyAgICAgIH0pOworICAgICAgYGBgCisgICAgICAg
SWYgdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBpcyBhIEJvb2xlYW4sIHRoZSBuYW1lIG9mIHRo
YXQgcHJvcGVydHkgaXMKKyAgICAgIGFkZGVkIGFzIGEgZGFzaGVyaXplZCBjbGFzcyBuYW1lLgor
ICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgIC8vIEFwcGxpZXMgdGhlICdpcy11cmdlbnQnIGNs
YXNzIHRvIHRoZSB2aWV3IGVsZW1lbnQKKyAgICAgIEVtYmVyLlZpZXcuZXh0ZW5kKHsKKyAgICAg
ICAgY2xhc3NOYW1lQmluZGluZ3M6IFsnaXNVcmdlbnQnXSwKKyAgICAgICAgaXNVcmdlbnQ6IHRy
dWUKKyAgICAgIH0pOworICAgICAgYGBgCisgICAgICAgSWYgeW91IHdvdWxkIHByZWZlciB0byB1
c2UgYSBjdXN0b20gdmFsdWUgaW5zdGVhZCBvZiB0aGUgZGFzaGVyaXplZAorICAgICAgcHJvcGVy
dHkgbmFtZSwgeW91IGNhbiBwYXNzIGEgYmluZGluZyBsaWtlIHRoaXM6CisgICAgICAgYGBgamF2
YXNjcmlwdAorICAgICAgLy8gQXBwbGllcyB0aGUgJ3VyZ2VudCcgY2xhc3MgdG8gdGhlIHZpZXcg
ZWxlbWVudAorICAgICAgRW1iZXIuVmlldy5leHRlbmQoeworICAgICAgICBjbGFzc05hbWVCaW5k
aW5nczogWydpc1VyZ2VudDp1cmdlbnQnXSwKKyAgICAgICAgaXNVcmdlbnQ6IHRydWUKKyAgICAg
IH0pOworICAgICAgYGBgCisgICAgICAgVGhpcyBsaXN0IG9mIHByb3BlcnRpZXMgaXMgaW5oZXJp
dGVkIGZyb20gdGhlIHZpZXcncyBzdXBlcmNsYXNzZXMgYXMgd2VsbC4KKyAgICAgICBAcHJvcGVy
dHkgY2xhc3NOYW1lQmluZGluZ3MKKyAgICAgIEB0eXBlIEFycmF5CisgICAgICBAZGVmYXVsdCBb
XQorICAgICAgQHB1YmxpYworICAgICovCisgICAgY2xhc3NOYW1lQmluZGluZ3M6IEVNUFRZX0FS
UkFZCisgIH0pOworfSk7CitlbmlmZWQoJ2VtYmVyLXZpZXdzL21peGlucy9pbnN0cnVtZW50YXRp
b25fc3VwcG9ydCcsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9taXhpbicsICdlbWJlci1tZXRh
bC9wcm9wZXJ0eV9nZXQnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsTWl4aW4sIF9l
bWJlck1ldGFsUHJvcGVydHlfZ2V0KSB7CisgIC8qKgorICBAbW9kdWxlIGVtYmVyCisgIEBzdWJt
b2R1bGUgZW1iZXItdmlld3MKKyAgKi8KKyAgJ3VzZSBzdHJpY3QnOworCisgIC8qKgorICAgIEBj
bGFzcyBJbnN0cnVtZW50YXRpb25TdXBwb3J0CisgICAgQG5hbWVzcGFjZSBFbWJlcgorICAgIEBw
dWJsaWMKKyAgKi8KKyAgdmFyIEluc3RydW1lbnRhdGlvblN1cHBvcnQgPSBfZW1iZXJNZXRhbE1p
eGluLk1peGluLmNyZWF0ZSh7CisgICAgLyoqCisgICAgICBVc2VkIHRvIGlkZW50aWZ5IHRoaXMg
dmlldyBkdXJpbmcgZGVidWdnaW5nCisgICAgICAgQHByb3BlcnR5IGluc3RydW1lbnREaXNwbGF5
CisgICAgICBAdHlwZSBTdHJpbmcKKyAgICAgIEBwdWJsaWMKKyAgICAqLworICAgIGluc3RydW1l
bnREaXNwbGF5OiAnJywKKworICAgIGluc3RydW1lbnROYW1lOiAndmlldycsCisKKyAgICBpbnN0
cnVtZW50RGV0YWlsczogZnVuY3Rpb24gKGhhc2gpIHsKKyAgICAgIGhhc2gudGVtcGxhdGUgPSBf
ZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ3RlbXBsYXRlTmFtZScpOworICAgICAg
dGhpcy5fc3VwZXIoaGFzaCk7CisgICAgfQorICB9KTsKKworICBleHBvcnRzLmRlZmF1bHQgPSBJ
bnN0cnVtZW50YXRpb25TdXBwb3J0OworfSk7CitlbmlmZWQoJ2VtYmVyLXZpZXdzL21peGlucy9s
ZWdhY3lfY2hpbGRfdmlld3Nfc3VwcG9ydCcsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9taXhp
bicsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQnLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfc2V0
JywgJ2NvbnRhaW5lci9vd25lciddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxNaXhp
biwgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQsIF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LCBfY29u
dGFpbmVyT3duZXIpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIGV4cG9ydHMuZGVmYXVsdCA9IF9l
bWJlck1ldGFsTWl4aW4uTWl4aW4uY3JlYXRlKHsKKyAgICBsaW5rQ2hpbGQ6IGZ1bmN0aW9uIChp
bnN0YW5jZSkgeworICAgICAgaWYgKCFpbnN0YW5jZVtfY29udGFpbmVyT3duZXIuT1dORVJdKSB7
CisgICAgICAgIF9jb250YWluZXJPd25lci5zZXRPd25lcihpbnN0YW5jZSwgX2NvbnRhaW5lck93
bmVyLmdldE93bmVyKHRoaXMpKTsKKyAgICAgIH0KKworICAgICAgaWYgKF9lbWJlck1ldGFsUHJv
cGVydHlfZ2V0LmdldChpbnN0YW5jZSwgJ3BhcmVudFZpZXcnKSAhPT0gdGhpcykgeworICAgICAg
ICAvLyBsaW5rQ2hpbGQgc2hvdWxkIGJlIGlkZW1wb3RlbnQKKyAgICAgICAgX2VtYmVyTWV0YWxQ
cm9wZXJ0eV9zZXQuc2V0KGluc3RhbmNlLCAncGFyZW50VmlldycsIHRoaXMpOworICAgICAgICBp
bnN0YW5jZS50cmlnZ2VyKCdwYXJlbnRWaWV3RGlkQ2hhbmdlJyk7CisgICAgICB9CisgICAgICBp
bnN0YW5jZS5vd25lclZpZXcgPSB0aGlzLm93bmVyVmlldzsKKyAgICB9LAorCisgICAgdW5saW5r
Q2hpbGQ6IGZ1bmN0aW9uIChpbnN0YW5jZSkgeworICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9z
ZXQuc2V0KGluc3RhbmNlLCAncGFyZW50VmlldycsIG51bGwpOworICAgICAgaW5zdGFuY2UudHJp
Z2dlcigncGFyZW50Vmlld0RpZENoYW5nZScpOworICAgIH0KKyAgfSk7Cit9KTsKK2VuaWZlZCgn
ZW1iZXItdmlld3MvbWl4aW5zL2xlZ2FjeV92aWV3X3N1cHBvcnQnLCBbJ2V4cG9ydHMnLCAnZW1i
ZXItbWV0YWwvZGVidWcnLCAnZW1iZXItbWV0YWwvbWl4aW4nLCAnZW1iZXItbWV0YWwvcHJvcGVy
dHlfZ2V0J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJNZXRh
bE1peGluLCBfZW1iZXJNZXRhbFByb3BlcnR5X2dldCkgeworICAvKioKKyAgQG1vZHVsZSBlbWJl
cgorICBAc3VibW9kdWxlIGVtYmVyLXZpZXdzCisgICovCisgICd1c2Ugc3RyaWN0JzsKKworICAv
KioKKyAgICBAY2xhc3MgTGVnYWN5Vmlld1N1cHBvcnQKKyAgICBAbmFtZXNwYWNlIEVtYmVyCisg
ICAgQHByaXZhdGUKKyAgKi8KKyAgdmFyIExlZ2FjeVZpZXdTdXBwb3J0ID0gX2VtYmVyTWV0YWxN
aXhpbi5NaXhpbi5jcmVhdGUoeworICAgIG11dGF0ZUNoaWxkVmlld3M6IGZ1bmN0aW9uIChjYWxs
YmFjaykgeworICAgICAgdmFyIGNoaWxkVmlld3MgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5n
ZXQodGhpcywgJ2NoaWxkVmlld3MnKTsKKyAgICAgIHZhciBpZHggPSBjaGlsZFZpZXdzLmxlbmd0
aDsKKyAgICAgIHZhciB2aWV3OworCisgICAgICB3aGlsZSAoLS1pZHggPj0gMCkgeworICAgICAg
ICB2aWV3ID0gY2hpbGRWaWV3c1tpZHhdOworICAgICAgICBjYWxsYmFjayh0aGlzLCB2aWV3LCBp
ZHgpOworICAgICAgfQorCisgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgLyoqCisg
ICAgICBSZW1vdmVzIGFsbCBjaGlsZHJlbiBmcm9tIHRoZSBgcGFyZW50Vmlld2AuCisgICAgICAg
QG1ldGhvZCByZW1vdmVBbGxDaGlsZHJlbgorICAgICAgQHJldHVybiB7RW1iZXIuVmlld30gcmVj
ZWl2ZXIKKyAgICAgIEBwcml2YXRlCisgICAgKi8KKyAgICByZW1vdmVBbGxDaGlsZHJlbjogZnVu
Y3Rpb24gKCkgeworICAgICAgcmV0dXJuIHRoaXMubXV0YXRlQ2hpbGRWaWV3cyhmdW5jdGlvbiAo
cGFyZW50VmlldywgdmlldykgeworICAgICAgICBwYXJlbnRWaWV3LnJlbW92ZUNoaWxkKHZpZXcp
OworICAgICAgfSk7CisgICAgfSwKKworICAgIGRlc3Ryb3lBbGxDaGlsZHJlbjogZnVuY3Rpb24g
KCkgeworICAgICAgcmV0dXJuIHRoaXMubXV0YXRlQ2hpbGRWaWV3cyhmdW5jdGlvbiAocGFyZW50
VmlldywgdmlldykgeworICAgICAgICB2aWV3LmRlc3Ryb3koKTsKKyAgICAgIH0pOworICAgIH0s
CisKKyAgICAvKioKKyAgICAgIFJldHVybiB0aGUgbmVhcmVzdCBhbmNlc3RvciB3aG9zZSBwYXJl
bnQgaXMgYW4gaW5zdGFuY2Ugb2YKKyAgICAgIGBrbGFzc2AuCisgICAgICAgQG1ldGhvZCBuZWFy
ZXN0Q2hpbGRPZgorICAgICAgQHBhcmFtIHtDbGFzc30ga2xhc3MgU3ViY2xhc3Mgb2YgRW1iZXIu
VmlldyAob3IgRW1iZXIuVmlldyBpdHNlbGYpCisgICAgICBAcmV0dXJuIEVtYmVyLlZpZXcKKyAg
ICAgIEBkZXByZWNhdGVkCisgICAgICBAcHJpdmF0ZQorICAgICovCisgICAgbmVhcmVzdENoaWxk
T2Y6IGZ1bmN0aW9uIChrbGFzcykgeworICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5kZXByZWNhdGUo
J25lYXJlc3RDaGlsZE9mIGhhcyBiZWVuIGRlcHJlY2F0ZWQuJywgZmFsc2UsIHsgaWQ6ICdlbWJl
ci12aWV3cy5uZWFyZXN0LWNoaWxkLW9mJywgdW50aWw6ICczLjAuMCcgfSk7CisKKyAgICAgIHZh
ciB2aWV3ID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdwYXJlbnRWaWV3Jyk7
CisKKyAgICAgIHdoaWxlICh2aWV3KSB7CisgICAgICAgIGlmIChfZW1iZXJNZXRhbFByb3BlcnR5
X2dldC5nZXQodmlldywgJ3BhcmVudFZpZXcnKSBpbnN0YW5jZW9mIGtsYXNzKSB7CisgICAgICAg
ICAgcmV0dXJuIHZpZXc7CisgICAgICAgIH0KKyAgICAgICAgdmlldyA9IF9lbWJlck1ldGFsUHJv
cGVydHlfZ2V0LmdldCh2aWV3LCAncGFyZW50VmlldycpOworICAgICAgfQorICAgIH0sCisKKyAg
ICAvKioKKyAgICAgIFJldHVybiB0aGUgbmVhcmVzdCBhbmNlc3RvciB0aGF0IGlzIGFuIGluc3Rh
bmNlIG9mIHRoZSBwcm92aWRlZAorICAgICAgY2xhc3MuCisgICAgICAgQG1ldGhvZCBuZWFyZXN0
SW5zdGFuY2VPZgorICAgICAgQHBhcmFtIHtDbGFzc30ga2xhc3MgU3ViY2xhc3Mgb2YgRW1iZXIu
VmlldyAob3IgRW1iZXIuVmlldyBpdHNlbGYpCisgICAgICBAcmV0dXJuIEVtYmVyLlZpZXcKKyAg
ICAgIEBkZXByZWNhdGVkCisgICAgICBAcHJpdmF0ZQorICAgICovCisgICAgbmVhcmVzdEluc3Rh
bmNlT2Y6IGZ1bmN0aW9uIChrbGFzcykgeworICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5kZXByZWNh
dGUoJ25lYXJlc3RJbnN0YW5jZU9mIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBm
cm9tIGZ1dHVyZSByZWxlYXNlcy4gVXNlIG5lYXJlc3RPZlR5cGUuJywgZmFsc2UsIHsgaWQ6ICdl
bWJlci12aWV3cy5uZWFyZXN0LWluc3RhbmNlLW9mJywgdW50aWw6ICczLjAuMCcgfSk7CisKKyAg
ICAgIHZhciB2aWV3ID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdwYXJlbnRW
aWV3Jyk7CisKKyAgICAgIHdoaWxlICh2aWV3KSB7CisgICAgICAgIGlmICh2aWV3IGluc3RhbmNl
b2Yga2xhc3MpIHsKKyAgICAgICAgICByZXR1cm4gdmlldzsKKyAgICAgICAgfQorICAgICAgICB2
aWV3ID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHZpZXcsICdwYXJlbnRWaWV3Jyk7Cisg
ICAgICB9CisgICAgfSwKKworICAgIC8qKgorICAgICAgSWYgYSB2YWx1ZSB0aGF0IGFmZmVjdHMg
dGVtcGxhdGUgcmVuZGVyaW5nIGNoYW5nZXMsIHRoZSB2aWV3IHNob3VsZCBiZQorICAgICAgcmUt
cmVuZGVyZWQgdG8gcmVmbGVjdCB0aGUgbmV3IHZhbHVlLgorICAgICAgIEBtZXRob2QgX2NvbnRl
eHREaWRDaGFuZ2UKKyAgICAgIEBwcml2YXRlCisgICAgICBAcHJpdmF0ZQorICAgICovCisgICAg
X2NvbnRleHREaWRDaGFuZ2U6IF9lbWJlck1ldGFsTWl4aW4ub2JzZXJ2ZXIoJ2NvbnRleHQnLCBm
dW5jdGlvbiAoKSB7CisgICAgICB0aGlzLnJlcmVuZGVyKCk7CisgICAgfSkKKyAgfSk7CisKKyAg
ZXhwb3J0cy5kZWZhdWx0ID0gTGVnYWN5Vmlld1N1cHBvcnQ7Cit9KTsKK2VuaWZlZCgnZW1iZXIt
dmlld3MvbWl4aW5zL3RlbXBsYXRlX3JlbmRlcmluZ19zdXBwb3J0JywgWydleHBvcnRzJywgJ2Vt
YmVyLW1ldGFsL21peGluJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbE1peGluKSB7
CisgIC8qKgorICBAbW9kdWxlIGVtYmVyCisgIEBzdWJtb2R1bGUgZW1iZXItdmlld3MKKyAgKi8K
KyAgJ3VzZSBzdHJpY3QnOworCisgIC8vIENpcmN1bGFyIGRlcAorICB2YXIgX3JlbmRlclZpZXc7
CisKKyAgLyoqCisgICAgQGNsYXNzIFRlbXBsYXRlUmVuZGVyaW5nU3VwcG9ydAorICAgIEBuYW1l
c3BhY2UgRW1iZXIKKyAgICBAcHJpdmF0ZQorICAqLworICB2YXIgVGVtcGxhdGVSZW5kZXJpbmdT
dXBwb3J0ID0gX2VtYmVyTWV0YWxNaXhpbi5NaXhpbi5jcmVhdGUoeworICAgIC8qKgorICAgICAg
Q2FsbGVkIG9uIHlvdXIgdmlldyB3aGVuIGl0IHNob3VsZCBwdXNoIHN0cmluZ3Mgb2YgSFRNTCBp
bnRvIGEKKyAgICAgIGBFbWJlci5SZW5kZXJCdWZmZXJgLiBNb3N0IHVzZXJzIHdpbGwgd2FudCB0
byBvdmVycmlkZSB0aGUgYHRlbXBsYXRlYAorICAgICAgb3IgYHRlbXBsYXRlTmFtZWAgcHJvcGVy
dGllcyBpbnN0ZWFkIG9mIHRoaXMgbWV0aG9kLgorICAgICAgIEJ5IGRlZmF1bHQsIGBFbWJlci5W
aWV3YCB3aWxsIGxvb2sgZm9yIGEgZnVuY3Rpb24gaW4gdGhlIGB0ZW1wbGF0ZWAKKyAgICAgIHBy
b3BlcnR5IGFuZCBpbnZva2UgaXQgd2l0aCB0aGUgdmFsdWUgb2YgYGNvbnRleHRgLiBUaGUgdmFs
dWUgb2YKKyAgICAgIGBjb250ZXh0YCB3aWxsIGJlIHRoZSB2aWV3J3MgY29udHJvbGxlciB1bmxl
c3MgeW91IG92ZXJyaWRlIGl0LgorICAgICAgIEBtZXRob2QgcmVuZGVyQmxvY2sKKyAgICAgIEBw
YXJhbSB7RW1iZXIuUmVuZGVyQnVmZmVyfSBidWZmZXIgVGhlIHJlbmRlciBidWZmZXIKKyAgICAg
IEBwcml2YXRlCisgICAgKi8KKworICAgIHJlbmRlckJsb2NrOiBmdW5jdGlvbiAoYmxvY2ssIHJl
bmRlck5vZGUpIHsKKyAgICAgIGlmIChfcmVuZGVyVmlldyA9PT0gdW5kZWZpbmVkKSB7CisgICAg
ICAgIF9yZW5kZXJWaWV3ID0gcmVxdWlyZSgnZW1iZXItaHRtbGJhcnMvc3lzdGVtL3JlbmRlci12
aWV3Jyk7CisgICAgICB9CisKKyAgICAgIHJldHVybiBfcmVuZGVyVmlldy5yZW5kZXJIVE1MQmFy
c0Jsb2NrKHRoaXMsIGJsb2NrLCByZW5kZXJOb2RlKTsKKyAgICB9CisgIH0pOworCisgIGV4cG9y
dHMuZGVmYXVsdCA9IFRlbXBsYXRlUmVuZGVyaW5nU3VwcG9ydDsKK30pOworZW5pZmVkKCdlbWJl
ci12aWV3cy9taXhpbnMvdGV4dF9zdXBwb3J0JywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL3By
b3BlcnR5X2dldCcsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9zZXQnLCAnZW1iZXItbWV0YWwvbWl4
aW4nLCAnZW1iZXItcnVudGltZS9taXhpbnMvdGFyZ2V0X2FjdGlvbl9zdXBwb3J0J10sIGZ1bmN0
aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbFByb3BlcnR5X2dldCwgX2VtYmVyTWV0YWxQcm9wZXJ0
eV9zZXQsIF9lbWJlck1ldGFsTWl4aW4sIF9lbWJlclJ1bnRpbWVNaXhpbnNUYXJnZXRfYWN0aW9u
X3N1cHBvcnQpIHsKKyAgLyoqCisgIEBtb2R1bGUgZW1iZXIKKyAgQHN1Ym1vZHVsZSBlbWJlci12
aWV3cworICAqLworCisgICd1c2Ugc3RyaWN0JzsKKworICB2YXIgS0VZX0VWRU5UUyA9IHsKKyAg
ICAxMzogJ2luc2VydE5ld2xpbmUnLAorICAgIDI3OiAnY2FuY2VsJworICB9OworCisgIC8qKgor
ICAgIGBUZXh0U3VwcG9ydGAgaXMgYSBzaGFyZWQgbWl4aW4gdXNlZCBieSBib3RoIGBFbWJlci5U
ZXh0RmllbGRgIGFuZAorICAgIGBFbWJlci5UZXh0QXJlYWAuIGBUZXh0U3VwcG9ydGAgYWRkcyBh
IG51bWJlciBvZiBtZXRob2RzIHRoYXQgYWxsb3cgeW91IHRvCisgICAgc3BlY2lmeSBhIGNvbnRy
b2xsZXIgYWN0aW9uIHRvIGludm9rZSB3aGVuIGEgY2VydGFpbiBldmVudCBpcyBmaXJlZCBvbiB5
b3VyCisgICAgdGV4dCBmaWVsZCBvciB0ZXh0YXJlYS4gVGhlIHNwZWNpZmVkIGNvbnRyb2xsZXIg
YWN0aW9uIHdvdWxkIGdldCB0aGUgY3VycmVudAorICAgIHZhbHVlIG9mIHRoZSBmaWVsZCBwYXNz
ZWQgaW4gYXMgdGhlIG9ubHkgYXJndW1lbnQgdW5sZXNzIHRoZSB2YWx1ZSBvZgorICAgIHRoZSBm
aWVsZCBpcyBlbXB0eS4gSW4gdGhhdCBjYXNlLCB0aGUgaW5zdGFuY2Ugb2YgdGhlIGZpZWxkIGl0
c2VsZiBpcyBwYXNzZWQKKyAgICBpbiBhcyB0aGUgb25seSBhcmd1bWVudC4KKyAgCisgICAgTGV0
J3MgdXNlIHRoZSBwcmVzc2luZyBvZiB0aGUgZXNjYXBlIGtleSBhcyBhbiBleGFtcGxlLiBJZiB5
b3Ugd2FudGVkIHRvCisgICAgaW52b2tlIGEgY29udHJvbGxlciBhY3Rpb24gd2hlbiBhIHVzZXIg
cHJlc3NlcyB0aGUgZXNjYXBlIGtleSB3aGlsZSBvbiB5b3VyCisgICAgZmllbGQsIHlvdSB3b3Vs
ZCB1c2UgdGhlIGBlc2NhcGUtcHJlc3NgIGF0dHJpYnV0ZSBvbiB5b3VyIGZpZWxkIGxpa2Ugc286
CisgIAorICAgIGBgYGhhbmRsZWJhcnMKKyAgICAgIHt7ISBhcHBsaWNhdGlvbi5oYnN9fQorICAK
KyAgICAgIHt7aW5wdXQgZXNjYXBlLXByZXNzPSdhbGVydFVzZXInfX0KKyAgICBgYGAKKyAgCisg
ICAgYGBgamF2YXNjcmlwdAorICAgICAgICBBcHAgPSBFbWJlci5BcHBsaWNhdGlvbi5jcmVhdGUo
KTsKKyAgCisgICAgICAgIEFwcC5BcHBsaWNhdGlvbkNvbnRyb2xsZXIgPSBFbWJlci5Db250cm9s
bGVyLmV4dGVuZCh7CisgICAgICAgICAgYWN0aW9uczogeworICAgICAgICAgICAgYWxlcnRVc2Vy
OiBmdW5jdGlvbiAoIGN1cnJlbnRWYWx1ZSApIHsKKyAgICAgICAgICAgICAgYWxlcnQoICdlc2Nh
cGUgcHJlc3NlZCwgY3VycmVudCB2YWx1ZTogJyArIGN1cnJlbnRWYWx1ZSApOworICAgICAgICAg
ICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgYGBgCisgIAorICAgIFRoZSBmb2xs
b3dpbmcgY2hhcnQgaXMgYSB2aXN1YWwgcmVwcmVzZW50YXRpb24gb2Ygd2hhdCB0YWtlcyBwbGFj
ZSB3aGVuIHRoZQorICAgIGVzY2FwZSBrZXkgaXMgcHJlc3NlZCBpbiB0aGlzIHNjZW5hcmlvOgor
ICAKKyAgICBgYGAKKyAgICBUaGUgVGVtcGxhdGUKKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKworICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgfCBlc2NhcGUt
cHJlc3M9J2FsZXJ0VXNlcicgIHwKKyAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
ICAgICAgICBUZXh0U3VwcG9ydCBNaXhpbgorICAgICstLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0rICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAg
fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2FuY2VsIG1ldGhvZCAgICAgICAg
ICAgICAgICAgfAorICAgICAgICAgfCAgICAgIGVzY2FwZSBidXR0b24gcHJlc3NlZCAgICAgIHwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgKy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0+IHwgY2hlY2tzIGZvciB0aGUgYGVzY2FwZS1wcmVzc2AgfAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYXR0cmlidXRlIGFuZCBw
dWxscyBvdXQgdGhlICAgfAorICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0rIHwgYGFsZXJ0VXNlcmAgdmFsdWUgICAgICAgICAgICAgfAorICAgICAgICAgfCAgICAgYWN0
aW9uIG5hbWUgJ2FsZXJ0VXNlcicgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
KworICAgICAgICAgfCAgICAgc2VudCB0byBjb250cm9sbGVyCisgICAgICAgICB2CisgICAgQ29u
dHJvbGxlcgorICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
KworICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAg
IHwgIGFjdGlvbnM6IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgIHwgICAg
IGFsZXJ0VXNlcjogZnVuY3Rpb24oIGN1cnJlbnRWYWx1ZSApeyAgfAorICAgIHwgICAgICAgYWxl
cnQoICd0aGUgZXNjIGtleSB3YXMgcHJlc3NlZCEnICkgfAorICAgIHwgICAgIH0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgIHwgIH0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfAorICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfAorICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tKworICAgIGBgYAorICAKKyAgICBIZXJlIGFyZSB0aGUgZXZlbnRzIHRoYXQgd2Ug
Y3VycmVudGx5IHN1cHBvcnQgYWxvbmcgd2l0aCB0aGUgbmFtZSBvZiB0aGUKKyAgICBhdHRyaWJ1
dGUgeW91IHdvdWxkIG5lZWQgdG8gdXNlIG9uIHlvdXIgZmllbGQuIFRvIHJlaXRlcmF0ZSwgeW91
IHdvdWxkIHVzZSB0aGUKKyAgICBhdHRyaWJ1dGUgbmFtZSBsaWtlIHNvOgorICAKKyAgICBgYGBo
YW5kbGViYXJzCisgICAgICB7e2lucHV0IGF0dHJpYnV0ZS1uYW1lPSdjb250cm9sbGVyQWN0aW9u
J319CisgICAgYGBgCisgIAorICAgIGBgYAorICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t
LS0tLS0tLS0tLS0tKworICAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAg
fAorICAgIHwgZXZlbnQgICAgICAgICAgICAgIHwgYXR0cmlidXRlIG5hbWUgfAorICAgICstLS0t
LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICAgIHwgbmV3IGxpbmUgaW5zZXJ0
ZWQgIHwgaW5zZXJ0LW5ld2xpbmUgfAorICAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAg
ICAgICAgICAgfAorICAgIHwgZW50ZXIga2V5IHByZXNzZWQgIHwgaW5zZXJ0LW5ld2xpbmUgfAor
ICAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfAorICAgIHwgY2FuY2Vs
IGtleSBwcmVzc2VkIHwgZXNjYXBlLXByZXNzICAgfAorICAgIHwgICAgICAgICAgICAgICAgICAg
IHwgICAgICAgICAgICAgICAgfAorICAgIHwgZm9jdXNpbiAgICAgICAgICAgIHwgZm9jdXMtaW4g
ICAgICAgfAorICAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfAorICAg
IHwgZm9jdXNvdXQgICAgICAgICAgIHwgZm9jdXMtb3V0ICAgICAgfAorICAgIHwgICAgICAgICAg
ICAgICAgICAgIHwgICAgICAgICAgICAgICAgfAorICAgIHwga2V5cHJlc3MgICAgICAgICAgIHwg
a2V5LXByZXNzICAgICAgfAorICAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAg
ICAgfAorICAgIHwga2V5dXAgICAgICAgICAgICAgIHwga2V5LXVwICAgICAgICAgfAorICAgIHwg
ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfAorICAgIHwga2V5ZG93biAgICAg
ICAgICAgIHwga2V5LWRvd24gICAgICAgfAorICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t
LS0tLS0tLS0tLS0tKworICAgIGBgYAorICAKKyAgICBAY2xhc3MgVGV4dFN1cHBvcnQKKyAgICBA
bmFtZXNwYWNlIEVtYmVyCisgICAgQHVzZXMgRW1iZXIuVGFyZ2V0QWN0aW9uU3VwcG9ydAorICAg
IEBleHRlbmRzIEVtYmVyLk1peGluCisgICAgQHByaXZhdGUKKyAgKi8KKyAgdmFyIFRleHRTdXBw
b3J0ID0gX2VtYmVyTWV0YWxNaXhpbi5NaXhpbi5jcmVhdGUoX2VtYmVyUnVudGltZU1peGluc1Rh
cmdldF9hY3Rpb25fc3VwcG9ydC5kZWZhdWx0LCB7CisgICAgdmFsdWU6ICcnLAorCisgICAgYXR0
cmlidXRlQmluZGluZ3M6IFsnYXV0b2NhcGl0YWxpemUnLCAnYXV0b2NvcnJlY3QnLCAnYXV0b2Zv
Y3VzJywgJ2Rpc2FibGVkJywgJ2Zvcm0nLCAnbWF4bGVuZ3RoJywgJ3BsYWNlaG9sZGVyJywgJ3Jl
YWRvbmx5JywgJ3JlcXVpcmVkJywgJ3NlbGVjdGlvbkRpcmVjdGlvbicsICdzcGVsbGNoZWNrJywg
J3RhYmluZGV4JywgJ3RpdGxlJ10sCisgICAgcGxhY2Vob2xkZXI6IG51bGwsCisgICAgZGlzYWJs
ZWQ6IGZhbHNlLAorICAgIG1heGxlbmd0aDogbnVsbCwKKworICAgIGluaXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgIHRoaXMuX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICB0aGlz
Lm9uKCdwYXN0ZScsIHRoaXMsIHRoaXMuX2VsZW1lbnRWYWx1ZURpZENoYW5nZSk7CisgICAgICB0
aGlzLm9uKCdjdXQnLCB0aGlzLCB0aGlzLl9lbGVtZW50VmFsdWVEaWRDaGFuZ2UpOworICAgICAg
dGhpcy5vbignaW5wdXQnLCB0aGlzLCB0aGlzLl9lbGVtZW50VmFsdWVEaWRDaGFuZ2UpOworICAg
IH0sCisKKyAgICAvKioKKyAgICAgIFRoZSBhY3Rpb24gdG8gYmUgc2VudCB3aGVuIHRoZSB1c2Vy
IHByZXNzZXMgdGhlIHJldHVybiBrZXkuCisgICAgICAgVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBg
e3thY3Rpb259fWAgaGVscGVyLCBidXQgaXMgZmlyZWQgd2hlbgorICAgICAgdGhlIHVzZXIgcHJl
c3NlcyB0aGUgcmV0dXJuIGtleSB3aGVuIGVkaXRpbmcgYSB0ZXh0IGZpZWxkLCBhbmQgc2VuZHMK
KyAgICAgIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgYXMgdGhlIGNvbnRleHQuCisgICAgICAgQHBy
b3BlcnR5IGFjdGlvbgorICAgICAgQHR5cGUgU3RyaW5nCisgICAgICBAZGVmYXVsdCBudWxsCisg
ICAgICBAcHJpdmF0ZQorICAgICovCisgICAgYWN0aW9uOiBudWxsLAorCisgICAgLyoqCisgICAg
ICBUaGUgZXZlbnQgdGhhdCBzaG91bGQgc2VuZCB0aGUgYWN0aW9uLgorICAgICAgIE9wdGlvbnMg
YXJlOgorICAgICAgICogYGVudGVyYDogdGhlIHVzZXIgcHJlc3NlZCBlbnRlcgorICAgICAgKiBg
a2V5UHJlc3NgOiB0aGUgdXNlciBwcmVzc2VkIGEga2V5CisgICAgICAgQHByb3BlcnR5IG9uRXZl
bnQKKyAgICAgIEB0eXBlIFN0cmluZworICAgICAgQGRlZmF1bHQgZW50ZXIKKyAgICAgIEBwcml2
YXRlCisgICAgKi8KKyAgICBvbkV2ZW50OiAnZW50ZXInLAorCisgICAgLyoqCisgICAgICBXaGV0
aGVyIHRoZSBga2V5VXBgIGV2ZW50IHRoYXQgdHJpZ2dlcnMgYW4gYGFjdGlvbmAgdG8gYmUgc2Vu
dCBjb250aW51ZXMKKyAgICAgIHByb3BhZ2F0aW5nIHRvIG90aGVyIHZpZXdzLgorICAgICAgIEJ5
IGRlZmF1bHQsIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyB0aGUgcmV0dXJuIGtleSBvbiB0aGVpciBr
ZXlib2FyZCBhbmQKKyAgICAgIHRoZSB0ZXh0IGZpZWxkIGhhcyBhbiBgYWN0aW9uYCBzZXQsIHRo
ZSBhY3Rpb24gd2lsbCBiZSBzZW50IHRvIHRoZSB2aWV3J3MKKyAgICAgIGNvbnRyb2xsZXIgYW5k
IHRoZSBrZXkgZXZlbnQgd2lsbCBzdG9wIHByb3BhZ2F0aW5nLgorICAgICAgIElmIHlvdSB3b3Vs
ZCBsaWtlIHBhcmVudCB2aWV3cyB0byByZWNlaXZlIHRoZSBga2V5VXBgIGV2ZW50IGV2ZW4gYWZ0
ZXIgYW4KKyAgICAgIGFjdGlvbiBoYXMgYmVlbiBkaXNwYXRjaGVkLCBzZXQgYGJ1YmJsZXNgIHRv
IHRydWUuCisgICAgICAgQHByb3BlcnR5IGJ1YmJsZXMKKyAgICAgIEB0eXBlIEJvb2xlYW4KKyAg
ICAgIEBkZWZhdWx0IGZhbHNlCisgICAgICBAcHJpdmF0ZQorICAgICovCisgICAgYnViYmxlczog
ZmFsc2UsCisKKyAgICBpbnRlcnByZXRLZXlFdmVudHM6IGZ1bmN0aW9uIChldmVudCkgeworICAg
ICAgdmFyIG1hcCA9IEtFWV9FVkVOVFM7CisgICAgICB2YXIgbWV0aG9kID0gbWFwW2V2ZW50Lmtl
eUNvZGVdOworCisgICAgICB0aGlzLl9lbGVtZW50VmFsdWVEaWRDaGFuZ2UoKTsKKyAgICAgIGlm
IChtZXRob2QpIHsKKyAgICAgICAgcmV0dXJuIHRoaXNbbWV0aG9kXShldmVudCk7CisgICAgICB9
CisgICAgfSwKKworICAgIF9lbGVtZW50VmFsdWVEaWRDaGFuZ2U6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgIC8vIFVzaW5nIHJlYWRET01BdHRyIHdpbGwgZW5zdXJlIHRoYXQgSFRNTEJhcnMga25vd3Mg
dGhlIGxhc3QKKyAgICAgIC8vIHZhbHVlLgorICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQu
c2V0KHRoaXMsICd2YWx1ZScsIHRoaXMucmVhZERPTUF0dHIoJ3ZhbHVlJykpOworICAgIH0sCisK
KyAgICBjaGFuZ2U6IGZ1bmN0aW9uIChldmVudCkgeworICAgICAgdGhpcy5fZWxlbWVudFZhbHVl
RGlkQ2hhbmdlKGV2ZW50KTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICBBbGxvd3MgeW91IHRv
IHNwZWNpZnkgYSBjb250cm9sbGVyIGFjdGlvbiB0byBpbnZva2Ugd2hlbiBlaXRoZXIgdGhlIGBl
bnRlcmAKKyAgICAgIGtleSBpcyBwcmVzc2VkIG9yLCBpbiB0aGUgY2FzZSBvZiB0aGUgZmllbGQg
YmVpbmcgYSB0ZXh0YXJlYSwgd2hlbiBhIG5ld2xpbmUKKyAgICAgIGlzIGluc2VydGVkLiBUbyB1
c2UgdGhpcyBtZXRob2QsIGdpdmUgeW91ciBmaWVsZCBhbiBgaW5zZXJ0LW5ld2xpbmVgCisgICAg
ICBhdHRyaWJ1dGUuIFRoZSB2YWx1ZSBvZiB0aGF0IGF0dHJpYnV0ZSBzaG91bGQgYmUgdGhlIG5h
bWUgb2YgdGhlIGFjdGlvbgorICAgICAgaW4geW91ciBjb250cm9sbGVyIHRoYXQgeW91IHdpc2gg
dG8gaW52b2tlLgorICAgICAgIEZvciBhbiBleGFtcGxlIG9uIGhvdyB0byB1c2UgdGhlIGBpbnNl
cnQtbmV3bGluZWAgYXR0cmlidXRlLCBwbGVhc2UKKyAgICAgIHJlZmVyZW5jZSB0aGUgZXhhbXBs
ZSBuZWFyIHRoZSB0b3Agb2YgdGhpcyBmaWxlLgorICAgICAgIEBtZXRob2QgaW5zZXJ0TmV3bGlu
ZQorICAgICAgQHBhcmFtIHtFdmVudH0gZXZlbnQKKyAgICAgIEBwcml2YXRlCisgICAgKi8KKyAg
ICBpbnNlcnROZXdsaW5lOiBmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgIHNlbmRBY3Rpb24oJ2Vu
dGVyJywgdGhpcywgZXZlbnQpOworICAgICAgc2VuZEFjdGlvbignaW5zZXJ0LW5ld2xpbmUnLCB0
aGlzLCBldmVudCk7CisgICAgfSwKKworICAgIC8qKgorICAgICAgQWxsb3dzIHlvdSB0byBzcGVj
aWZ5IGEgY29udHJvbGxlciBhY3Rpb24gdG8gaW52b2tlIHdoZW4gdGhlIGVzY2FwZSBidXR0b24K
KyAgICAgIGlzIHByZXNzZWQuIFRvIHVzZSB0aGlzIG1ldGhvZCwgZ2l2ZSB5b3VyIGZpZWxkIGFu
IGBlc2NhcGUtcHJlc3NgCisgICAgICBhdHRyaWJ1dGUuIFRoZSB2YWx1ZSBvZiB0aGF0IGF0dHJp
YnV0ZSBzaG91bGQgYmUgdGhlIG5hbWUgb2YgdGhlIGFjdGlvbgorICAgICAgaW4geW91ciBjb250
cm9sbGVyIHRoYXQgeW91IHdpc2ggdG8gaW52b2tlLgorICAgICAgIEZvciBhbiBleGFtcGxlIG9u
IGhvdyB0byB1c2UgdGhlIGBlc2NhcGUtcHJlc3NgIGF0dHJpYnV0ZSwgcGxlYXNlIHJlZmVyZW5j
ZQorICAgICAgdGhlIGV4YW1wbGUgbmVhciB0aGUgdG9wIG9mIHRoaXMgZmlsZS4KKyAgICAgICBA
bWV0aG9kIGNhbmNlbAorICAgICAgQHBhcmFtIHtFdmVudH0gZXZlbnQKKyAgICAgIEBwcml2YXRl
CisgICAgKi8KKyAgICBjYW5jZWw6IGZ1bmN0aW9uIChldmVudCkgeworICAgICAgc2VuZEFjdGlv
bignZXNjYXBlLXByZXNzJywgdGhpcywgZXZlbnQpOworICAgIH0sCisKKyAgICAvKioKKyAgICAg
IEFsbG93cyB5b3UgdG8gc3BlY2lmeSBhIGNvbnRyb2xsZXIgYWN0aW9uIHRvIGludm9rZSB3aGVu
IGEgZmllbGQgcmVjZWl2ZXMKKyAgICAgIGZvY3VzLiBUbyB1c2UgdGhpcyBtZXRob2QsIGdpdmUg
eW91ciBmaWVsZCBhIGBmb2N1cy1pbmAgYXR0cmlidXRlLiBUaGUgdmFsdWUKKyAgICAgIG9mIHRo
YXQgYXR0cmlidXRlIHNob3VsZCBiZSB0aGUgbmFtZSBvZiB0aGUgYWN0aW9uIGluIHlvdXIgY29u
dHJvbGxlcgorICAgICAgdGhhdCB5b3Ugd2lzaCB0byBpbnZva2UuCisgICAgICAgRm9yIGFuIGV4
YW1wbGUgb24gaG93IHRvIHVzZSB0aGUgYGZvY3VzLWluYCBhdHRyaWJ1dGUsIHBsZWFzZSByZWZl
cmVuY2UgdGhlCisgICAgICBleGFtcGxlIG5lYXIgdGhlIHRvcCBvZiB0aGlzIGZpbGUuCisgICAg
ICAgQG1ldGhvZCBmb2N1c0luCisgICAgICBAcGFyYW0ge0V2ZW50fSBldmVudAorICAgICAgQHBy
aXZhdGUKKyAgICAqLworICAgIGZvY3VzSW46IGZ1bmN0aW9uIChldmVudCkgeworICAgICAgc2Vu
ZEFjdGlvbignZm9jdXMtaW4nLCB0aGlzLCBldmVudCk7CisgICAgfSwKKworICAgIC8qKgorICAg
ICAgQWxsb3dzIHlvdSB0byBzcGVjaWZ5IGEgY29udHJvbGxlciBhY3Rpb24gdG8gaW52b2tlIHdo
ZW4gYSBmaWVsZCBsb3NlcworICAgICAgZm9jdXMuIFRvIHVzZSB0aGlzIG1ldGhvZCwgZ2l2ZSB5
b3VyIGZpZWxkIGEgYGZvY3VzLW91dGAgYXR0cmlidXRlLiBUaGUgdmFsdWUKKyAgICAgIG9mIHRo
YXQgYXR0cmlidXRlIHNob3VsZCBiZSB0aGUgbmFtZSBvZiB0aGUgYWN0aW9uIGluIHlvdXIgY29u
dHJvbGxlcgorICAgICAgdGhhdCB5b3Ugd2lzaCB0byBpbnZva2UuCisgICAgICAgRm9yIGFuIGV4
YW1wbGUgb24gaG93IHRvIHVzZSB0aGUgYGZvY3VzLW91dGAgYXR0cmlidXRlLCBwbGVhc2UgcmVm
ZXJlbmNlIHRoZQorICAgICAgZXhhbXBsZSBuZWFyIHRoZSB0b3Agb2YgdGhpcyBmaWxlLgorICAg
ICAgIEBtZXRob2QgZm9jdXNPdXQKKyAgICAgIEBwYXJhbSB7RXZlbnR9IGV2ZW50CisgICAgICBA
cHJpdmF0ZQorICAgICovCisgICAgZm9jdXNPdXQ6IGZ1bmN0aW9uIChldmVudCkgeworICAgICAg
dGhpcy5fZWxlbWVudFZhbHVlRGlkQ2hhbmdlKGV2ZW50KTsKKyAgICAgIHNlbmRBY3Rpb24oJ2Zv
Y3VzLW91dCcsIHRoaXMsIGV2ZW50KTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICBBbGxvd3Mg
eW91IHRvIHNwZWNpZnkgYSBjb250cm9sbGVyIGFjdGlvbiB0byBpbnZva2Ugd2hlbiBhIGtleSBp
cyBwcmVzc2VkLgorICAgICAgVG8gdXNlIHRoaXMgbWV0aG9kLCBnaXZlIHlvdXIgZmllbGQgYSBg
a2V5LXByZXNzYCBhdHRyaWJ1dGUuIFRoZSB2YWx1ZSBvZgorICAgICAgdGhhdCBhdHRyaWJ1dGUg
c2hvdWxkIGJlIHRoZSBuYW1lIG9mIHRoZSBhY3Rpb24gaW4geW91ciBjb250cm9sbGVyIHlvdQor
ICAgICAgdGhhdCB3aXNoIHRvIGludm9rZS4KKyAgICAgICBGb3IgYW4gZXhhbXBsZSBvbiBob3cg
dG8gdXNlIHRoZSBga2V5LXByZXNzYCBhdHRyaWJ1dGUsIHBsZWFzZSByZWZlcmVuY2UgdGhlCisg
ICAgICBleGFtcGxlIG5lYXIgdGhlIHRvcCBvZiB0aGlzIGZpbGUuCisgICAgICAgQG1ldGhvZCBr
ZXlQcmVzcworICAgICAgQHBhcmFtIHtFdmVudH0gZXZlbnQKKyAgICAgIEBwcml2YXRlCisgICAg
Ki8KKyAgICBrZXlQcmVzczogZnVuY3Rpb24gKGV2ZW50KSB7CisgICAgICBzZW5kQWN0aW9uKCdr
ZXktcHJlc3MnLCB0aGlzLCBldmVudCk7CisgICAgfSwKKworICAgIC8qKgorICAgICAgQWxsb3dz
IHlvdSB0byBzcGVjaWZ5IGEgY29udHJvbGxlciBhY3Rpb24gdG8gaW52b2tlIHdoZW4gYSBrZXkt
dXAgZXZlbnQgaXMKKyAgICAgIGZpcmVkLiBUbyB1c2UgdGhpcyBtZXRob2QsIGdpdmUgeW91ciBm
aWVsZCBhIGBrZXktdXBgIGF0dHJpYnV0ZS4gVGhlIHZhbHVlCisgICAgICBvZiB0aGF0IGF0dHJp
YnV0ZSBzaG91bGQgYmUgdGhlIG5hbWUgb2YgdGhlIGFjdGlvbiBpbiB5b3VyIGNvbnRyb2xsZXIK
KyAgICAgIHRoYXQgeW91IHdpc2ggdG8gaW52b2tlLgorICAgICAgIEZvciBhbiBleGFtcGxlIG9u
IGhvdyB0byB1c2UgdGhlIGBrZXktdXBgIGF0dHJpYnV0ZSwgcGxlYXNlIHJlZmVyZW5jZSB0aGUK
KyAgICAgIGV4YW1wbGUgbmVhciB0aGUgdG9wIG9mIHRoaXMgZmlsZS4KKyAgICAgICBAbWV0aG9k
IGtleVVwCisgICAgICBAcGFyYW0ge0V2ZW50fSBldmVudAorICAgICAgQHByaXZhdGUKKyAgICAq
LworICAgIGtleVVwOiBmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgIHRoaXMuaW50ZXJwcmV0S2V5
RXZlbnRzKGV2ZW50KTsKKworICAgICAgdGhpcy5zZW5kQWN0aW9uKCdrZXktdXAnLCBfZW1iZXJN
ZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ3ZhbHVlJyksIGV2ZW50KTsKKyAgICB9LAorCisg
ICAgLyoqCisgICAgICBBbGxvd3MgeW91IHRvIHNwZWNpZnkgYSBjb250cm9sbGVyIGFjdGlvbiB0
byBpbnZva2Ugd2hlbiBhIGtleS1kb3duIGV2ZW50IGlzCisgICAgICBmaXJlZC4gVG8gdXNlIHRo
aXMgbWV0aG9kLCBnaXZlIHlvdXIgZmllbGQgYSBga2V5LWRvd25gIGF0dHJpYnV0ZS4gVGhlIHZh
bHVlCisgICAgICBvZiB0aGF0IGF0dHJpYnV0ZSBzaG91bGQgYmUgdGhlIG5hbWUgb2YgdGhlIGFj
dGlvbiBpbiB5b3VyIGNvbnRyb2xsZXIgdGhhdAorICAgICAgeW91IHdpc2ggdG8gaW52b2tlLgor
ICAgICAgIEZvciBhbiBleGFtcGxlIG9uIGhvdyB0byB1c2UgdGhlIGBrZXktZG93bmAgYXR0cmli
dXRlLCBwbGVhc2UgcmVmZXJlbmNlIHRoZQorICAgICAgZXhhbXBsZSBuZWFyIHRoZSB0b3Agb2Yg
dGhpcyBmaWxlLgorICAgICAgIEBtZXRob2Qga2V5RG93bgorICAgICAgQHBhcmFtIHtFdmVudH0g
ZXZlbnQKKyAgICAgIEBwcml2YXRlCisgICAgKi8KKyAgICBrZXlEb3duOiBmdW5jdGlvbiAoZXZl
bnQpIHsKKyAgICAgIHRoaXMuc2VuZEFjdGlvbigna2V5LWRvd24nLCBfZW1iZXJNZXRhbFByb3Bl
cnR5X2dldC5nZXQodGhpcywgJ3ZhbHVlJyksIGV2ZW50KTsKKyAgICB9CisgIH0pOworCisgIC8v
IEluIHByaW5jaXBsZSwgdGhpcyBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5LCBidXQgdGhlIGxlZ2Fj
eQorICAvLyBzZW5kQWN0aW9uIHNlbWFudGljcyBmb3IgVGV4dEZpZWxkIGFyZSBkaWZmZXJlbnQg
ZnJvbQorICAvLyB0aGUgY29tcG9uZW50IHNlbWFudGljcyBzbyB0aGlzIG1ldGhvZCBub3JtYWxp
emVzIHRoZW0uCisgIGZ1bmN0aW9uIHNlbmRBY3Rpb24oZXZlbnROYW1lLCB2aWV3LCBldmVudCkg
eworICAgIHZhciBhY3Rpb24gPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodmlldywgJ2F0
dHJzLicgKyBldmVudE5hbWUpIHx8IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh2aWV3LCBl
dmVudE5hbWUpOworICAgIHZhciBvbiA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh2aWV3
LCAnb25FdmVudCcpOworICAgIHZhciB2YWx1ZSA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0Lmdl
dCh2aWV3LCAndmFsdWUnKTsKKworICAgIC8vIGJhY2stY29tcGF0IHN1cHBvcnQgZm9yIGtleVBy
ZXNzIGFzIGFuIGV2ZW50IG5hbWUgZXZlbiB0aG91Z2gKKyAgICAvLyBpdCdzIGFsc28gYSBtZXRo
b2QgbmFtZSB0aGF0IGNvbnN1bWVzIHRoZSBldmVudCAoYW5kIHRoZXJlZm9yZQorICAgIC8vIGlu
Y29tcGF0aWJsZSB3aXRoIHNlbmRBY3Rpb24gc2VtYW50aWNzKS4KKyAgICBpZiAob24gPT09IGV2
ZW50TmFtZSB8fCBvbiA9PT0gJ2tleVByZXNzJyAmJiBldmVudE5hbWUgPT09ICdrZXktcHJlc3Mn
KSB7CisgICAgICB2aWV3LnNlbmRBY3Rpb24oJ2FjdGlvbicsIHZhbHVlKTsKKyAgICB9CisKKyAg
ICB2aWV3LnNlbmRBY3Rpb24oZXZlbnROYW1lLCB2YWx1ZSk7CisKKyAgICBpZiAoYWN0aW9uIHx8
IG9uID09PSBldmVudE5hbWUpIHsKKyAgICAgIGlmICghX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQu
Z2V0KHZpZXcsICdidWJibGVzJykpIHsKKyAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7
CisgICAgICB9CisgICAgfQorICB9CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gVGV4dFN1cHBvcnQ7
Cit9KTsKK2VuaWZlZCgnZW1iZXItdmlld3MvbWl4aW5zL3ZpZXdfY2hpbGRfdmlld3Nfc3VwcG9y
dCcsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9kZWJ1ZycsICdlbWJlci1tZXRhbC9taXhpbics
ICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQnLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfc2V0Jywg
J2VtYmVyLW1ldGFsL3NldF9wcm9wZXJ0aWVzJywgJ2VtYmVyLXJ1bnRpbWUvc3lzdGVtL25hdGl2
ZV9hcnJheScsICdjb250YWluZXIvb3duZXInXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1l
dGFsRGVidWcsIF9lbWJlck1ldGFsTWl4aW4sIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LCBfZW1i
ZXJNZXRhbFByb3BlcnR5X3NldCwgX2VtYmVyTWV0YWxTZXRfcHJvcGVydGllcywgX2VtYmVyUnVu
dGltZVN5c3RlbU5hdGl2ZV9hcnJheSwgX2NvbnRhaW5lck93bmVyKSB7CisgIC8qKgorICBAbW9k
dWxlIGVtYmVyCisgIEBzdWJtb2R1bGUgZW1iZXItdmlld3MKKyAgKi8KKyAgJ3VzZSBzdHJpY3Qn
OworCisgIHZhciBFTVBUWV9BUlJBWSA9IFtdOworCisgIGV4cG9ydHMuZGVmYXVsdCA9IF9lbWJl
ck1ldGFsTWl4aW4uTWl4aW4uY3JlYXRlKHsKKyAgICAvKioKKyAgICAgIEFycmF5IG9mIGNoaWxk
IHZpZXdzLiBZb3Ugc2hvdWxkIG5ldmVyIGVkaXQgdGhpcyBhcnJheSBkaXJlY3RseS4KKyAgICAg
IEluc3RlYWQsIHVzZSBgYXBwZW5kQ2hpbGRgIGFuZCBgcmVtb3ZlRnJvbVBhcmVudGAuCisgICAg
ICAgQHByb3BlcnR5IGNoaWxkVmlld3MKKyAgICAgIEB0eXBlIEFycmF5CisgICAgICBAZGVmYXVs
dCBbXQorICAgICAgQHByaXZhdGUKKyAgICAqLworICAgIGNoaWxkVmlld3M6IEVNUFRZX0FSUkFZ
LAorCisgICAgaW5pdDogZnVuY3Rpb24gKCkgeworICAgICAgdGhpcy5fc3VwZXIuYXBwbHkodGhp
cywgYXJndW1lbnRzKTsKKworICAgICAgLy8gc2V0dXAgY2hpbGQgdmlld3MuIGJlIHN1cmUgdG8g
Y2xvbmUgdGhlIGNoaWxkIHZpZXdzIGFycmF5IGZpcnN0CisgICAgICAvLyAyLjBUT0RPOiBSZW1v
dmUgRW1iZXIuQSgpIGhlcmUKKyAgICAgIHRoaXMuY2hpbGRWaWV3cyA9IF9lbWJlclJ1bnRpbWVT
eXN0ZW1OYXRpdmVfYXJyYXkuQSh0aGlzLmNoaWxkVmlld3Muc2xpY2UoKSk7CisgICAgICB0aGlz
Lm93bmVyVmlldyA9IHRoaXMub3duZXJWaWV3IHx8IHRoaXM7CisgICAgfSwKKworICAgIGFwcGVu
ZENoaWxkOiBmdW5jdGlvbiAodmlldykgeworICAgICAgdGhpcy5saW5rQ2hpbGQodmlldyk7Cisg
ICAgICB0aGlzLmNoaWxkVmlld3MucHVzaCh2aWV3KTsKKyAgICB9LAorCisgICAgZGVzdHJveUNo
aWxkOiBmdW5jdGlvbiAodmlldykgeworICAgICAgdmlldy5kZXN0cm95KCk7CisgICAgfSwKKwor
ICAgIC8qKgorICAgICAgUmVtb3ZlcyB0aGUgY2hpbGQgdmlldyBmcm9tIHRoZSBwYXJlbnQgdmll
dy4KKyAgICAgICBAbWV0aG9kIHJlbW92ZUNoaWxkCisgICAgICBAcGFyYW0ge0VtYmVyLlZpZXd9
IHZpZXcKKyAgICAgIEByZXR1cm4ge0VtYmVyLlZpZXd9IHJlY2VpdmVyCisgICAgICBAcHJpdmF0
ZQorICAgICovCisgICAgcmVtb3ZlQ2hpbGQ6IGZ1bmN0aW9uICh2aWV3KSB7CisgICAgICAvLyBJ
ZiB3ZSdyZSBkZXN0cm95aW5nLCB0aGUgZW50aXJlIHN1YnRyZWUgd2lsbCBiZQorICAgICAgLy8g
ZnJlZWQsIGFuZCB0aGUgRE9NIHdpbGwgYmUgaGFuZGxlZCBzZXBhcmF0ZWx5LAorICAgICAgLy8g
c28gbm8gbmVlZCB0byBtZXNzIHdpdGggY2hpbGRWaWV3cy4KKyAgICAgIGlmICh0aGlzLmlzRGVz
dHJveWluZykgeworICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICAgIC8vIHVwZGF0ZSBw
YXJlbnQgbm9kZQorICAgICAgdGhpcy51bmxpbmtDaGlsZCh2aWV3KTsKKworICAgICAgLy8gcmVt
b3ZlIHZpZXcgZnJvbSBjaGlsZFZpZXdzIGFycmF5LgorICAgICAgdmFyIGNoaWxkVmlld3MgPSBf
ZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ2NoaWxkVmlld3MnKTsKKworICAgICAg
dmFyIGluZGV4ID0gY2hpbGRWaWV3cy5pbmRleE9mKHZpZXcpOworICAgICAgaWYgKGluZGV4ICE9
PSAtMSkgeworICAgICAgICBjaGlsZFZpZXdzLnNwbGljZShpbmRleCwgMSk7CisgICAgICB9CisK
KyAgICAgIHJldHVybiB0aGlzOworICAgIH0sCisKKyAgICAvKioKKyAgICAgIEluc3RhbnRpYXRl
cyBhIHZpZXcgdG8gYmUgYWRkZWQgdG8gdGhlIGNoaWxkVmlld3MgYXJyYXkgZHVyaW5nIHZpZXcK
KyAgICAgIGluaXRpYWxpemF0aW9uLiBZb3UgZ2VuZXJhbGx5IHdpbGwgbm90IGNhbGwgdGhpcyBt
ZXRob2QgZGlyZWN0bHkgdW5sZXNzCisgICAgICB5b3UgYXJlIG92ZXJyaWRpbmcgYGNyZWF0ZUNo
aWxkVmlld3MoKWAuIE5vdGUgdGhhdCB0aGlzIG1ldGhvZCB3aWxsCisgICAgICBhdXRvbWF0aWNh
bGx5IGNvbmZpZ3VyZSB0aGUgY29ycmVjdCBzZXR0aW5ncyBvbiB0aGUgbmV3IHZpZXcgaW5zdGFu
Y2UgdG8KKyAgICAgIGFjdCBhcyBhIGNoaWxkIG9mIHRoZSBwYXJlbnQuCisgICAgICAgQG1ldGhv
ZCBjcmVhdGVDaGlsZFZpZXcKKyAgICAgIEBwYXJhbSB7Q2xhc3N8U3RyaW5nfSB2aWV3Q2xhc3MK
KyAgICAgIEBwYXJhbSB7T2JqZWN0fSBbYXR0cnNdIEF0dHJpYnV0ZXMgdG8gYWRkCisgICAgICBA
cmV0dXJuIHtFbWJlci5WaWV3fSBuZXcgaW5zdGFuY2UKKyAgICAgIEBwcml2YXRlCisgICAgKi8K
KyAgICBjcmVhdGVDaGlsZFZpZXc6IGZ1bmN0aW9uIChtYXliZVZpZXdDbGFzcykgeworICAgICAg
dmFyIGF0dHJzID0gYXJndW1lbnRzLmxlbmd0aCA8PSAxIHx8IGFyZ3VtZW50c1sxXSA9PT0gdW5k
ZWZpbmVkID8ge30gOiBhcmd1bWVudHNbMV07CisKKyAgICAgIGlmICghbWF5YmVWaWV3Q2xhc3Mp
IHsKKyAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignY3JlYXRlQ2hpbGRWaWV3cyBmaXJzdCBh
cmd1bWVudCBtdXN0IGV4aXN0Jyk7CisgICAgICB9CisKKyAgICAgIHZhciBvd25lciA9IF9jb250
YWluZXJPd25lci5nZXRPd25lcih0aGlzKTsKKworICAgICAgaWYgKG1heWJlVmlld0NsYXNzLmlz
VmlldyAmJiBtYXliZVZpZXdDbGFzcy5wYXJlbnRWaWV3ID09PSB0aGlzICYmIF9jb250YWluZXJP
d25lci5nZXRPd25lcihtYXliZVZpZXdDbGFzcykgPT09IG93bmVyKSB7CisgICAgICAgIHJldHVy
biBtYXliZVZpZXdDbGFzczsKKyAgICAgIH0KKworICAgICAgdmFyIHZpZXc7CisKKyAgICAgIGF0
dHJzLnBhcmVudFZpZXcgPSB0aGlzOworICAgICAgYXR0cnMucmVuZGVyZXIgPSB0aGlzLnJlbmRl
cmVyOworICAgICAgYXR0cnMuX3ZpZXdSZWdpc3RyeSA9IHRoaXMuX3ZpZXdSZWdpc3RyeTsKKwor
ICAgICAgaWYgKG1heWJlVmlld0NsYXNzLmlzVmlld0ZhY3RvcnkpIHsKKyAgICAgICAgX2NvbnRh
aW5lck93bmVyLnNldE93bmVyKGF0dHJzLCBvd25lcik7CisKKyAgICAgICAgdmlldyA9IG1heWJl
Vmlld0NsYXNzLmNyZWF0ZShhdHRycyk7CisKKyAgICAgICAgaWYgKHZpZXcudmlld05hbWUpIHsK
KyAgICAgICAgICBfZW1iZXJNZXRhbFByb3BlcnR5X3NldC5zZXQodGhpcywgdmlldy52aWV3TmFt
ZSwgdmlldyk7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSBpZiAoJ3N0cmluZycgPT09IHR5cGVv
ZiBtYXliZVZpZXdDbGFzcykgeworICAgICAgICB2YXIgZnVsbE5hbWUgPSAndmlldzonICsgbWF5
YmVWaWV3Q2xhc3M7CisgICAgICAgIHZhciBWaWV3S2xhc3MgPSBvd25lci5fbG9va3VwRmFjdG9y
eShmdWxsTmFtZSk7CisKKyAgICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ0NvdWxkIG5v
dCBmaW5kIHZpZXc6IFwnJyArIGZ1bGxOYW1lICsgJ1wnJywgISFWaWV3S2xhc3MpOworCisgICAg
ICAgIHZpZXcgPSBWaWV3S2xhc3MuY3JlYXRlKGF0dHJzKTsKKyAgICAgIH0gZWxzZSB7CisgICAg
ICAgIHZpZXcgPSBtYXliZVZpZXdDbGFzczsKKyAgICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3Nl
cnQoJ1lvdSBtdXN0IHBhc3MgaW5zdGFuY2Ugb3Igc3ViY2xhc3Mgb2YgVmlldycsIHZpZXcuaXNW
aWV3KTsKKworICAgICAgICBfY29udGFpbmVyT3duZXIuc2V0T3duZXIoYXR0cnMsIG93bmVyKTsK
KyAgICAgICAgX2VtYmVyTWV0YWxTZXRfcHJvcGVydGllcy5kZWZhdWx0KHZpZXcsIGF0dHJzKTsK
KyAgICAgIH0KKworICAgICAgdGhpcy5saW5rQ2hpbGQodmlldyk7CisKKyAgICAgIHJldHVybiB2
aWV3OworICAgIH0sCisKKyAgICBsaW5rQ2hpbGQ6IGZ1bmN0aW9uIChpbnN0YW5jZSkgeworICAg
ICAgaWYgKCFpbnN0YW5jZVtfY29udGFpbmVyT3duZXIuT1dORVJdKSB7CisgICAgICAgIF9jb250
YWluZXJPd25lci5zZXRPd25lcihpbnN0YW5jZSwgX2NvbnRhaW5lck93bmVyLmdldE93bmVyKHRo
aXMpKTsKKyAgICAgIH0KKworICAgICAgaW5zdGFuY2UucGFyZW50VmlldyA9IHRoaXM7CisgICAg
ICBpbnN0YW5jZS5vd25lclZpZXcgPSB0aGlzLm93bmVyVmlldzsKKyAgICB9LAorCisgICAgdW5s
aW5rQ2hpbGQ6IGZ1bmN0aW9uIChpbnN0YW5jZSkgeworICAgICAgaW5zdGFuY2UucGFyZW50Vmll
dyA9IG51bGw7CisgICAgfQorICB9KTsKK30pOworZW5pZmVkKCdlbWJlci12aWV3cy9taXhpbnMv
dmlld19jb250ZXh0X3N1cHBvcnQnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvbWl4aW4nLCAn
ZW1iZXItbWV0YWwvY29tcHV0ZWQnLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0JywgJ2VtYmVy
LW1ldGFsL3Byb3BlcnR5X3NldCcsICdlbWJlci12aWV3cy9taXhpbnMvbGVnYWN5X3ZpZXdfc3Vw
cG9ydCcsICdlbWJlci1tZXRhbC9ldmVudHMnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1l
dGFsTWl4aW4sIF9lbWJlck1ldGFsQ29tcHV0ZWQsIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LCBf
ZW1iZXJNZXRhbFByb3BlcnR5X3NldCwgX2VtYmVyVmlld3NNaXhpbnNMZWdhY3lfdmlld19zdXBw
b3J0LCBfZW1iZXJNZXRhbEV2ZW50cykgeworICAvKioKKyAgQG1vZHVsZSBlbWJlcgorICBAc3Vi
bW9kdWxlIGVtYmVyLXZpZXdzCisgICovCisgICd1c2Ugc3RyaWN0JzsKKworICB2YXIgVmlld0Nv
bnRleHRTdXBwb3J0ID0gX2VtYmVyTWV0YWxNaXhpbi5NaXhpbi5jcmVhdGUoX2VtYmVyVmlld3NN
aXhpbnNMZWdhY3lfdmlld19zdXBwb3J0LmRlZmF1bHQsIHsKKyAgICAvKioKKyAgICAgIFRoZSBv
YmplY3QgZnJvbSB3aGljaCB0ZW1wbGF0ZXMgc2hvdWxkIGFjY2VzcyBwcm9wZXJ0aWVzLgorICAg
ICAgIFRoaXMgb2JqZWN0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSB0ZW1wbGF0ZSBmdW5jdGlvbiBl
YWNoIHRpbWUgdGhlIHJlbmRlcgorICAgICAgbWV0aG9kIGlzIGNhbGxlZCwgYnV0IGl0IGlzIHVw
IHRvIHRoZSBpbmRpdmlkdWFsIGZ1bmN0aW9uIHRvIGRlY2lkZSB3aGF0CisgICAgICB0byBkbyB3
aXRoIGl0LgorICAgICAgIEJ5IGRlZmF1bHQsIHRoaXMgd2lsbCBiZSB0aGUgdmlldydzIGNvbnRy
b2xsZXIuCisgICAgICAgQHByb3BlcnR5IGNvbnRleHQKKyAgICAgIEB0eXBlIE9iamVjdAorICAg
ICAgQHByaXZhdGUKKyAgICAqLworICAgIGNvbnRleHQ6IF9lbWJlck1ldGFsQ29tcHV0ZWQuY29t
cHV0ZWQoeworICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBfZW1iZXJN
ZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ19jb250ZXh0Jyk7CisgICAgICB9LAorICAgICAg
c2V0OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkgeworICAgICAgICBfZW1iZXJNZXRhbFByb3BlcnR5
X3NldC5zZXQodGhpcywgJ19jb250ZXh0JywgdmFsdWUpOworICAgICAgICByZXR1cm4gdmFsdWU7
CisgICAgICB9CisgICAgfSksCisKKyAgICAvKioKKyAgICAgIFByaXZhdGUgY29weSBvZiB0aGUg
dmlldydzIHRlbXBsYXRlIGNvbnRleHQuIFRoaXMgY2FuIGJlIHNldCBkaXJlY3RseQorICAgICAg
YnkgSGFuZGxlYmFycyB3aXRob3V0IHRyaWdnZXJpbmcgdGhlIG9ic2VydmVyIHRoYXQgY2F1c2Vz
IHRoZSB2aWV3CisgICAgICB0byBiZSByZS1yZW5kZXJlZC4KKyAgICAgICBUaGUgY29udGV4dCBv
ZiBhIHZpZXcgaXMgbG9va2VkIHVwIGFzIGZvbGxvd3M6CisgICAgICAgMS4gU3VwcGxpZWQgY29u
dGV4dCAodXN1YWxseSBieSBIYW5kbGViYXJzKQorICAgICAgMi4gU3BlY2lmaWVkIGNvbnRyb2xs
ZXIKKyAgICAgIDMuIGBwYXJlbnRWaWV3YCdzIGNvbnRleHQKKyAgICAgICBUaGUgY29kZSBpbiBI
YW5kbGViYXJzIHRoYXQgb3ZlcnJpZGVzIHRoZSBgX2NvbnRleHRgIHByb3BlcnR5IGZpcnN0Cisg
ICAgICBjaGVja3MgdG8gc2VlIHdoZXRoZXIgdGhlIHZpZXcgaGFzIGEgc3BlY2lmaWVkIGNvbnRy
b2xsZXIuIFRoaXMgaXMKKyAgICAgIHNvbWV0aGluZyBvZiBhIGhhY2sgYW5kIHNob3VsZCBiZSBy
ZXZpc2l0ZWQuCisgICAgICAgQHByb3BlcnR5IF9jb250ZXh0CisgICAgICBAcHJpdmF0ZQorICAg
ICovCisgICAgX2NvbnRleHQ6IF9lbWJlck1ldGFsQ29tcHV0ZWQuY29tcHV0ZWQoeworICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBwYXJlbnRWaWV3LCBjb250cm9sbGVyOwor
CisgICAgICAgIGlmIChjb250cm9sbGVyID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRo
aXMsICdjb250cm9sbGVyJykpIHsKKyAgICAgICAgICByZXR1cm4gY29udHJvbGxlcjsKKyAgICAg
ICAgfQorCisgICAgICAgIHBhcmVudFZpZXcgPSB0aGlzLnBhcmVudFZpZXc7CisgICAgICAgIGlm
IChwYXJlbnRWaWV3KSB7CisgICAgICAgICAgcmV0dXJuIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0
LmdldChwYXJlbnRWaWV3LCAnX2NvbnRleHQnKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
bnVsbDsKKyAgICAgIH0sCisgICAgICBzZXQ6IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7CisgICAg
ICAgIHJldHVybiB2YWx1ZTsKKyAgICAgIH0KKyAgICB9KSwKKworICAgIF9jb250cm9sbGVyOiBu
dWxsLAorCisgICAgLyoqCisgICAgICBUaGUgY29udHJvbGxlciBtYW5hZ2luZyB0aGlzIHZpZXcu
IElmIHRoaXMgcHJvcGVydHkgaXMgc2V0LCBpdCB3aWxsIGJlCisgICAgICBtYWRlIGF2YWlsYWJs
ZSBmb3IgdXNlIGJ5IHRoZSB0ZW1wbGF0ZS4KKyAgICAgICBAcHJvcGVydHkgY29udHJvbGxlcgor
ICAgICAgQHR5cGUgT2JqZWN0CisgICAgICBAcHJpdmF0ZQorICAgICovCisgICAgY29udHJvbGxl
cjogX2VtYmVyTWV0YWxDb21wdXRlZC5jb21wdXRlZCh7CisgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgaWYgKHRoaXMuX2NvbnRyb2xsZXIpIHsKKyAgICAgICAgICByZXR1cm4gdGhp
cy5fY29udHJvbGxlcjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0aGlzLnBhcmVudFZp
ZXcgPyBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcy5wYXJlbnRWaWV3LCAnY29udHJv
bGxlcicpIDogbnVsbDsKKyAgICAgIH0sCisgICAgICBzZXQ6IGZ1bmN0aW9uIChfLCB2YWx1ZSkg
eworICAgICAgICB0aGlzLl9jb250cm9sbGVyID0gdmFsdWU7CisgICAgICAgIHJldHVybiB2YWx1
ZTsKKyAgICAgIH0KKyAgICB9KSwKKworICAgIF9sZWdhY3lDb250cm9sbGVyRGlkQ2hhbmdlOiBf
ZW1iZXJNZXRhbE1peGluLm9ic2VydmVyKCdjb250cm9sbGVyJywgZnVuY3Rpb24gKCkgeworICAg
ICAgdGhpcy5jaGlsZFZpZXdzLmZvckVhY2goZnVuY3Rpb24gKHZpZXcpIHsKKyAgICAgICAgcmV0
dXJuIHZpZXcubm90aWZ5UHJvcGVydHlDaGFuZ2UoJ2NvbnRyb2xsZXInKTsKKyAgICAgIH0pOwor
ICAgIH0pLAorCisgICAgX25vdGlmeUNvbnRyb2xsZXJDaGFuZ2U6IF9lbWJlck1ldGFsRXZlbnRz
Lm9uKCdwYXJlbnRWaWV3RGlkQ2hhbmdlJywgZnVuY3Rpb24gKCkgeworICAgICAgdGhpcy5ub3Rp
ZnlQcm9wZXJ0eUNoYW5nZSgnY29udHJvbGxlcicpOworICAgIH0pCisgIH0pOworCisgIGV4cG9y
dHMuZGVmYXVsdCA9IFZpZXdDb250ZXh0U3VwcG9ydDsKK30pOworZW5pZmVkKCdlbWJlci12aWV3
cy9taXhpbnMvdmlld19zdGF0ZV9zdXBwb3J0JywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2Rl
YnVnJywgJ2VtYmVyLW1ldGFsL21peGluJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRh
bERlYnVnLCBfZW1iZXJNZXRhbE1peGluKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICB2YXIgVmll
d1N0YXRlU3VwcG9ydCA9IF9lbWJlck1ldGFsTWl4aW4uTWl4aW4uY3JlYXRlKHsKKyAgICB0cmFu
c2l0aW9uVG86IGZ1bmN0aW9uIChzdGF0ZSkgeworICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5kZXBy
ZWNhdGUoJ0VtYmVyLlZpZXcjdHJhbnNpdGlvblRvIGhhcyBiZWVuIGRlcHJlY2F0ZWQsIGl0IGlz
IGZvciBpbnRlcm5hbCB1c2Ugb25seScsIGZhbHNlLCB7IGlkOiAnZW1iZXItdmlld3Mudmlldy10
cmFuc2l0aW9uLXRvJywgdW50aWw6ICcyLjQuMCcgfSk7CisgICAgICB0aGlzLl90cmFuc2l0aW9u
VG8oc3RhdGUpOworICAgIH0sCisKKyAgICBfdHJhbnNpdGlvblRvOiBmdW5jdGlvbiAoc3RhdGUp
IHsKKyAgICAgIHZhciBwcmlvclN0YXRlID0gdGhpcy5fY3VycmVudFN0YXRlOworICAgICAgdmFy
IGN1cnJlbnRTdGF0ZSA9IHRoaXMuX2N1cnJlbnRTdGF0ZSA9IHRoaXMuX3N0YXRlc1tzdGF0ZV07
CisgICAgICB0aGlzLl9zdGF0ZSA9IHN0YXRlOworCisgICAgICBpZiAocHJpb3JTdGF0ZSAmJiBw
cmlvclN0YXRlLmV4aXQpIHsKKyAgICAgICAgcHJpb3JTdGF0ZS5leGl0KHRoaXMpOworICAgICAg
fQorICAgICAgaWYgKGN1cnJlbnRTdGF0ZS5lbnRlcikgeworICAgICAgICBjdXJyZW50U3RhdGUu
ZW50ZXIodGhpcyk7CisgICAgICB9CisgICAgfQorICB9KTsKKworICBleHBvcnRzLmRlZmF1bHQg
PSBWaWV3U3RhdGVTdXBwb3J0OworfSk7CitlbmlmZWQoJ2VtYmVyLXZpZXdzL21peGlucy92aWV3
X3N1cHBvcnQnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvZGVidWcnLCAnZW1iZXItbWV0YWwv
ZXJyb3InLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0JywgJ2VtYmVyLW1ldGFsL3J1bl9sb29w
JywgJ2VtYmVyLW1ldGFsL29ic2VydmVyJywgJ2VtYmVyLW1ldGFsL3V0aWxzJywgJ2VtYmVyLW1l
dGFsL2NvbXB1dGVkJywgJ2VtYmVyLW1ldGFsL21peGluJywgJ2VtYmVyLXJ1bnRpbWUvc3lzdGVt
L2NvcmVfb2JqZWN0JywgJ2VtYmVyLW1ldGFsL3N5bWJvbCcsICdjb250YWluZXIvb3duZXInLCAn
ZW1iZXItdmlld3Mvc3lzdGVtL2pxdWVyeSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0
YWxEZWJ1ZywgX2VtYmVyTWV0YWxFcnJvciwgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQsIF9lbWJl
ck1ldGFsUnVuX2xvb3AsIF9lbWJlck1ldGFsT2JzZXJ2ZXIsIF9lbWJlck1ldGFsVXRpbHMsIF9l
bWJlck1ldGFsQ29tcHV0ZWQsIF9lbWJlck1ldGFsTWl4aW4sIF9lbWJlclJ1bnRpbWVTeXN0ZW1D
b3JlX29iamVjdCwgX2VtYmVyTWV0YWxTeW1ib2wsIF9jb250YWluZXJPd25lciwgX2VtYmVyVmll
d3NTeXN0ZW1KcXVlcnkpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIHZhciBfTWl4aW4kY3JlYXRl
OworCisgIHZhciBJTklUX1dBU19DQUxMRUQgPSBfZW1iZXJNZXRhbFN5bWJvbC5kZWZhdWx0KCdJ
TklUX1dBU19DQUxMRUQnKTsKKworICBmdW5jdGlvbiBLKCkgeworICAgIHJldHVybiB0aGlzOwor
ICB9CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gX2VtYmVyTWV0YWxNaXhpbi5NaXhpbi5jcmVhdGUo
KF9NaXhpbiRjcmVhdGUgPSB7CisgICAgY29uY2F0ZW5hdGVkUHJvcGVydGllczogWydhdHRyaWJ1
dGVCaW5kaW5ncyddLAorCisgICAgLyoqCisgICAgICBAcHJvcGVydHkgaXNWaWV3CisgICAgICBA
dHlwZSBCb29sZWFuCisgICAgICBAZGVmYXVsdCB0cnVlCisgICAgICBAc3RhdGljCisgICAgICBA
cHJpdmF0ZQorICAgICovCisgICAgaXNWaWV3OiB0cnVlLAorCisgICAgLy8gLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorICAgIC8vIFRF
TVBMQVRFIFNVUFBPUlQKKyAgICAvLworCisgICAgLyoqCisgICAgICBUaGUgbmFtZSBvZiB0aGUg
dGVtcGxhdGUgdG8gbG9va3VwIGlmIG5vIHRlbXBsYXRlIGlzIHByb3ZpZGVkLgorICAgICAgIEJ5
IGRlZmF1bHQgYEVtYmVyLlZpZXdgIHdpbGwgbG9va3VwIGEgdGVtcGxhdGUgd2l0aCB0aGlzIG5h
bWUgaW4KKyAgICAgIGBFbWJlci5URU1QTEFURVNgIChhIHNoYXJlZCBnbG9iYWwgb2JqZWN0KS4K
KyAgICAgICBAcHJvcGVydHkgdGVtcGxhdGVOYW1lCisgICAgICBAdHlwZSBTdHJpbmcKKyAgICAg
IEBkZWZhdWx0IG51bGwKKyAgICAgIEBwcml2YXRlCisgICAgKi8KKyAgICB0ZW1wbGF0ZU5hbWU6
IG51bGwsCisKKyAgICAvKioKKyAgICAgIFRoZSBuYW1lIG9mIHRoZSBsYXlvdXQgdG8gbG9va3Vw
IGlmIG5vIGxheW91dCBpcyBwcm92aWRlZC4KKyAgICAgICBCeSBkZWZhdWx0IGBFbWJlci5WaWV3
YCB3aWxsIGxvb2t1cCBhIHRlbXBsYXRlIHdpdGggdGhpcyBuYW1lIGluCisgICAgICBgRW1iZXIu
VEVNUExBVEVTYCAoYSBzaGFyZWQgZ2xvYmFsIG9iamVjdCkuCisgICAgICAgQHByb3BlcnR5IGxh
eW91dE5hbWUKKyAgICAgIEB0eXBlIFN0cmluZworICAgICAgQGRlZmF1bHQgbnVsbAorICAgICAg
QHByaXZhdGUKKyAgICAqLworICAgIGxheW91dE5hbWU6IG51bGwsCisKKyAgICAvKioKKyAgICAg
IFRoZSB0ZW1wbGF0ZSB1c2VkIHRvIHJlbmRlciB0aGUgdmlldy4gVGhpcyBzaG91bGQgYmUgYSBm
dW5jdGlvbiB0aGF0CisgICAgICBhY2NlcHRzIGFuIG9wdGlvbmFsIGNvbnRleHQgcGFyYW1ldGVy
IGFuZCByZXR1cm5zIGEgc3RyaW5nIG9mIEhUTUwgdGhhdAorICAgICAgd2lsbCBiZSBpbnNlcnRl
ZCBpbnRvIHRoZSBET00gcmVsYXRpdmUgdG8gaXRzIHBhcmVudCB2aWV3LgorICAgICAgIEluIGdl
bmVyYWwsIHlvdSBzaG91bGQgc2V0IHRoZSBgdGVtcGxhdGVOYW1lYCBwcm9wZXJ0eSBpbnN0ZWFk
IG9mIHNldHRpbmcKKyAgICAgIHRoZSB0ZW1wbGF0ZSB5b3Vyc2VsZi4KKyAgICAgICBAcHJvcGVy
dHkgdGVtcGxhdGUKKyAgICAgIEB0eXBlIEZ1bmN0aW9uCisgICAgICBAcHJpdmF0ZQorICAgICov
CisgICAgdGVtcGxhdGU6IF9lbWJlck1ldGFsQ29tcHV0ZWQuY29tcHV0ZWQoeworICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciB0ZW1wbGF0ZU5hbWUgPSBfZW1iZXJNZXRhbFBy
b3BlcnR5X2dldC5nZXQodGhpcywgJ3RlbXBsYXRlTmFtZScpOworICAgICAgICB2YXIgdGVtcGxh
dGUgPSB0aGlzLnRlbXBsYXRlRm9yTmFtZSh0ZW1wbGF0ZU5hbWUsICd0ZW1wbGF0ZScpOworICAg
ICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnWW91IHNwZWNpZmllZCB0aGUgdGVtcGxhdGVO
YW1lICcgKyB0ZW1wbGF0ZU5hbWUgKyAnIGZvciAnICsgdGhpcyArICcsIGJ1dCBpdCBkaWQgbm90
IGV4aXN0LicsICF0ZW1wbGF0ZU5hbWUgfHwgISF0ZW1wbGF0ZSk7CisgICAgICAgIHJldHVybiB0
ZW1wbGF0ZSB8fCBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ2RlZmF1bHRUZW1w
bGF0ZScpOworICAgICAgfSwKKyAgICAgIHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHsKKyAg
ICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICByZXR1cm4gdmFsdWU7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0
aGlzLCBrZXkpOworICAgICAgfQorICAgIH0pLAorCisgICAgLyoqCisgICAgICBBIHZpZXcgbWF5
IGNvbnRhaW4gYSBsYXlvdXQuIEEgbGF5b3V0IGlzIGEgcmVndWxhciB0ZW1wbGF0ZSBidXQKKyAg
ICAgIHN1cGVyc2VkZXMgdGhlIGB0ZW1wbGF0ZWAgcHJvcGVydHkgZHVyaW5nIHJlbmRlcmluZy4g
SXQgaXMgdGhlCisgICAgICByZXNwb25zaWJpbGl0eSBvZiB0aGUgbGF5b3V0IHRlbXBsYXRlIHRv
IHJldHJpZXZlIHRoZSBgdGVtcGxhdGVgCisgICAgICBwcm9wZXJ0eSBmcm9tIHRoZSB2aWV3IChv
ciBhbHRlcm5hdGl2ZWx5LCBjYWxsIGBIYW5kbGViYXJzLmhlbHBlcnMueWllbGRgLAorICAgICAg
YHt7eWllbGR9fWApIHRvIHJlbmRlciBpdCBpbiB0aGUgY29ycmVjdCBsb2NhdGlvbi4KKyAgICAg
ICBUaGlzIGlzIHVzZWZ1bCBmb3IgYSB2aWV3IHRoYXQgaGFzIGEgc2hhcmVkIHdyYXBwZXIsIGJ1
dCB3aGljaCBkZWxlZ2F0ZXMKKyAgICAgIHRoZSByZW5kZXJpbmcgb2YgdGhlIGNvbnRlbnRzIG9m
IHRoZSB3cmFwcGVyIHRvIHRoZSBgdGVtcGxhdGVgIHByb3BlcnR5CisgICAgICBvbiBhIHN1YmNs
YXNzLgorICAgICAgIEBwcm9wZXJ0eSBsYXlvdXQKKyAgICAgIEB0eXBlIEZ1bmN0aW9uCisgICAg
ICBAcHJpdmF0ZQorICAgICovCisgICAgbGF5b3V0OiBfZW1iZXJNZXRhbENvbXB1dGVkLmNvbXB1
dGVkKHsKKyAgICAgIGdldDogZnVuY3Rpb24gKGtleSkgeworICAgICAgICB2YXIgbGF5b3V0TmFt
ZSA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnbGF5b3V0TmFtZScpOworICAg
ICAgICB2YXIgbGF5b3V0ID0gdGhpcy50ZW1wbGF0ZUZvck5hbWUobGF5b3V0TmFtZSwgJ2xheW91
dCcpOworCisgICAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdZb3Ugc3BlY2lmaWVkIHRo
ZSBsYXlvdXROYW1lICcgKyBsYXlvdXROYW1lICsgJyBmb3IgJyArIHRoaXMgKyAnLCBidXQgaXQg
ZGlkIG5vdCBleGlzdC4nLCAhbGF5b3V0TmFtZSB8fCAhIWxheW91dCk7CisKKyAgICAgICAgcmV0
dXJuIGxheW91dCB8fCBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ2RlZmF1bHRM
YXlvdXQnKTsKKyAgICAgIH0sCisKKyAgICAgIHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHsK
KyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgfQorICAgIH0pLAorCisgICAgdGVtcGxhdGVG
b3JOYW1lOiBmdW5jdGlvbiAobmFtZSwgdHlwZSkgeworICAgICAgaWYgKCFuYW1lKSB7CisgICAg
ICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCd0ZW1w
bGF0ZU5hbWVzIGFyZSBub3QgYWxsb3dlZCB0byBjb250YWluIHBlcmlvZHM6ICcgKyBuYW1lLCBu
YW1lLmluZGV4T2YoJy4nKSA9PT0gLTEpOworCisgICAgICB2YXIgb3duZXIgPSBfY29udGFpbmVy
T3duZXIuZ2V0T3duZXIodGhpcyk7CisKKyAgICAgIGlmICghb3duZXIpIHsKKyAgICAgICAgdGhy
b3cgbmV3IF9lbWJlck1ldGFsRXJyb3IuZGVmYXVsdCgnQ29udGFpbmVyIHdhcyBub3QgZm91bmQg
d2hlbiBsb29raW5nIHVwIGEgdmlld3MgdGVtcGxhdGUuICcgKyAnVGhpcyBpcyBtb3N0IGxpa2Vs
eSBkdWUgdG8gbWFudWFsbHkgaW5zdGFudGlhdGluZyBhbiBFbWJlci5WaWV3LiAnICsgJ1NlZTog
aHR0cDovL2dpdC5pby9FS1BwbkEnKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIG93bmVyLmxv
b2t1cCgndGVtcGxhdGU6JyArIG5hbWUpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgIFJldHVy
biB0aGUgbmVhcmVzdCBhbmNlc3RvciB0aGF0IGlzIGFuIGluc3RhbmNlIG9mIHRoZSBwcm92aWRl
ZAorICAgICAgY2xhc3Mgb3IgbWl4aW4uCisgICAgICAgQG1ldGhvZCBuZWFyZXN0T2ZUeXBlCisg
ICAgICBAcGFyYW0ge0NsYXNzLE1peGlufSBrbGFzcyBTdWJjbGFzcyBvZiBFbWJlci5WaWV3IChv
ciBFbWJlci5WaWV3IGl0c2VsZiksCisgICAgICAgICAgICAgb3IgYW4gaW5zdGFuY2Ugb2YgRW1i
ZXIuTWl4aW4uCisgICAgICBAcmV0dXJuIEVtYmVyLlZpZXcKKyAgICAgIEBwcml2YXRlCisgICAg
Ki8KKyAgICBuZWFyZXN0T2ZUeXBlOiBmdW5jdGlvbiAoa2xhc3MpIHsKKyAgICAgIHZhciB2aWV3
ID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdwYXJlbnRWaWV3Jyk7CisgICAg
ICB2YXIgaXNPZlR5cGUgPSBrbGFzcyBpbnN0YW5jZW9mIF9lbWJlck1ldGFsTWl4aW4uTWl4aW4g
PyBmdW5jdGlvbiAodmlldykgeworICAgICAgICByZXR1cm4ga2xhc3MuZGV0ZWN0KHZpZXcpOwor
ICAgICAgfSA6IGZ1bmN0aW9uICh2aWV3KSB7CisgICAgICAgIHJldHVybiBrbGFzcy5kZXRlY3Qo
dmlldy5jb25zdHJ1Y3Rvcik7CisgICAgICB9OworCisgICAgICB3aGlsZSAodmlldykgeworICAg
ICAgICBpZiAoaXNPZlR5cGUodmlldykpIHsKKyAgICAgICAgICByZXR1cm4gdmlldzsKKyAgICAg
ICAgfQorICAgICAgICB2aWV3ID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHZpZXcsICdw
YXJlbnRWaWV3Jyk7CisgICAgICB9CisgICAgfSwKKworICAgIC8qKgorICAgICAgUmV0dXJuIHRo
ZSBuZWFyZXN0IGFuY2VzdG9yIHRoYXQgaGFzIGEgZ2l2ZW4gcHJvcGVydHkuCisgICAgICAgQG1l
dGhvZCBuZWFyZXN0V2l0aFByb3BlcnR5CisgICAgICBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHkg
QSBwcm9wZXJ0eSBuYW1lCisgICAgICBAcmV0dXJuIEVtYmVyLlZpZXcKKyAgICAgIEBwcml2YXRl
CisgICAgKi8KKyAgICBuZWFyZXN0V2l0aFByb3BlcnR5OiBmdW5jdGlvbiAocHJvcGVydHkpIHsK
KyAgICAgIHZhciB2aWV3ID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdwYXJl
bnRWaWV3Jyk7CisKKyAgICAgIHdoaWxlICh2aWV3KSB7CisgICAgICAgIGlmIChwcm9wZXJ0eSBp
biB2aWV3KSB7CisgICAgICAgICAgcmV0dXJuIHZpZXc7CisgICAgICAgIH0KKyAgICAgICAgdmll
dyA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh2aWV3LCAncGFyZW50VmlldycpOworICAg
ICAgfQorICAgIH0sCisKKyAgICAvKioKKyAgICAgIFJlbmRlcnMgdGhlIHZpZXcgYWdhaW4uIFRo
aXMgd2lsbCB3b3JrIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUKKyAgICAgIHZpZXcgaXMgYWxy
ZWFkeSBpbiB0aGUgRE9NIG9yIG5vdC4gSWYgdGhlIHZpZXcgaXMgaW4gdGhlIERPTSwgdGhlCisg
ICAgICByZW5kZXJpbmcgcHJvY2VzcyB3aWxsIGJlIGRlZmVycmVkIHRvIGdpdmUgYmluZGluZ3Mg
YSBjaGFuY2UKKyAgICAgIHRvIHN5bmNocm9uaXplLgorICAgICAgIElmIGNoaWxkcmVuIHdlcmUg
YWRkZWQgZHVyaW5nIHRoZSByZW5kZXJpbmcgcHJvY2VzcyB1c2luZyBgYXBwZW5kQ2hpbGRgLAor
ICAgICAgYHJlcmVuZGVyYCB3aWxsIHJlbW92ZSB0aGVtLCBiZWNhdXNlIHRoZXkgd2lsbCBiZSBh
ZGRlZCBhZ2FpbgorICAgICAgaWYgbmVlZGVkIGJ5IHRoZSBuZXh0IGByZW5kZXJgLgorICAgICAg
IEluIGdlbmVyYWwsIGlmIHRoZSBkaXNwbGF5IG9mIHlvdXIgdmlldyBjaGFuZ2VzLCB5b3Ugc2hv
dWxkIG1vZGlmeQorICAgICAgdGhlIERPTSBlbGVtZW50IGRpcmVjdGx5IGluc3RlYWQgb2YgbWFu
dWFsbHkgY2FsbGluZyBgcmVyZW5kZXJgLCB3aGljaCBjYW4KKyAgICAgIGJlIHNsb3cuCisgICAg
ICAgQG1ldGhvZCByZXJlbmRlcgorICAgICAgQHB1YmxpYworICAgICovCisgICAgcmVyZW5kZXI6
IGZ1bmN0aW9uICgpIHsKKyAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3RhdGUucmVyZW5kZXIo
dGhpcyk7CisgICAgfSwKKworICAgIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyAgICAvLyBFTEVNRU5UIFNVUFBPUlQKKyAgICAv
LworCisgICAgLyoqCisgICAgICBSZXR1cm5zIHRoZSBjdXJyZW50IERPTSBlbGVtZW50IGZvciB0
aGUgdmlldy4KKyAgICAgICBAcHJvcGVydHkgZWxlbWVudAorICAgICAgQHR5cGUgRE9NRWxlbWVu
dAorICAgICAgQHB1YmxpYworICAgICovCisgICAgZWxlbWVudDogbnVsbCwKKworICAgIC8qKgor
ICAgICAgUmV0dXJucyBhIGpRdWVyeSBvYmplY3QgZm9yIHRoaXMgdmlldydzIGVsZW1lbnQuIElm
IHlvdSBwYXNzIGluIGEgc2VsZWN0b3IKKyAgICAgIHN0cmluZywgdGhpcyBtZXRob2Qgd2lsbCBy
ZXR1cm4gYSBqUXVlcnkgb2JqZWN0LCB1c2luZyB0aGUgY3VycmVudCBlbGVtZW50CisgICAgICBh
cyBpdHMgYnVmZmVyLgorICAgICAgIEZvciBleGFtcGxlLCBjYWxsaW5nIGB2aWV3LiQoJ2xpJylg
IHdpbGwgcmV0dXJuIGEgalF1ZXJ5IG9iamVjdCBjb250YWluaW5nCisgICAgICBhbGwgb2YgdGhl
IGBsaWAgZWxlbWVudHMgaW5zaWRlIHRoZSBET00gZWxlbWVudCBvZiB0aGlzIHZpZXcuCisgICAg
ICAgQG1ldGhvZCAkCisgICAgICBAcGFyYW0ge1N0cmluZ30gW3NlbGVjdG9yXSBhIGpRdWVyeS1j
b21wYXRpYmxlIHNlbGVjdG9yIHN0cmluZworICAgICAgQHJldHVybiB7alF1ZXJ5fSB0aGUgalF1
ZXJ5IG9iamVjdCBmb3IgdGhlIERPTSBub2RlCisgICAgICBAcHVibGljCisgICAgKi8KKyAgICAk
OiBmdW5jdGlvbiAoc2VsKSB7CisgICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnWW91IGNh
bm5vdCBhY2Nlc3MgdGhpcy4kKCkgb24gYSBjb21wb25lbnQgd2l0aCBgdGFnTmFtZTogXCdcJ2Ag
c3BlY2lmaWVkLicsIHRoaXMudGFnTmFtZSAhPT0gJycpOworICAgICAgcmV0dXJuIHRoaXMuX2N1
cnJlbnRTdGF0ZS4kKHRoaXMsIHNlbCk7CisgICAgfSwKKworICAgIGZvckVhY2hDaGlsZFZpZXc6
IGZ1bmN0aW9uIChjYWxsYmFjaykgeworICAgICAgdmFyIGNoaWxkVmlld3MgPSB0aGlzLmNoaWxk
Vmlld3M7CisKKyAgICAgIGlmICghY2hpbGRWaWV3cykgeworICAgICAgICByZXR1cm4gdGhpczsK
KyAgICAgIH0KKworICAgICAgdmFyIGxlbiA9IGNoaWxkVmlld3MubGVuZ3RoOworICAgICAgdmFy
IHZpZXcsIGlkeDsKKworICAgICAgZm9yIChpZHggPSAwOyBpZHggPCBsZW47IGlkeCsrKSB7Cisg
ICAgICAgIHZpZXcgPSBjaGlsZFZpZXdzW2lkeF07CisgICAgICAgIGNhbGxiYWNrKHZpZXcpOwor
ICAgICAgfQorCisgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgLyoqCisgICAgICBB
cHBlbmRzIHRoZSB2aWV3J3MgZWxlbWVudCB0byB0aGUgc3BlY2lmaWVkIHBhcmVudCBlbGVtZW50
LgorICAgICAgIElmIHRoZSB2aWV3IGRvZXMgbm90IGhhdmUgYW4gSFRNTCByZXByZXNlbnRhdGlv
biB5ZXQsIGBjcmVhdGVFbGVtZW50KClgCisgICAgICB3aWxsIGJlIGNhbGxlZCBhdXRvbWF0aWNh
bGx5LgorICAgICAgIE5vdGUgdGhhdCB0aGlzIG1ldGhvZCBqdXN0IHNjaGVkdWxlcyB0aGUgdmll
dyB0byBiZSBhcHBlbmRlZDsgdGhlIERPTQorICAgICAgZWxlbWVudCB3aWxsIG5vdCBiZSBhcHBl
bmRlZCB0byB0aGUgZ2l2ZW4gZWxlbWVudCB1bnRpbCBhbGwgYmluZGluZ3MgaGF2ZQorICAgICAg
ZmluaXNoZWQgc3luY2hyb25pemluZy4KKyAgICAgICBUaGlzIGlzIG5vdCB0eXBpY2FsbHkgYSBm
dW5jdGlvbiB0aGF0IHlvdSB3aWxsIG5lZWQgdG8gY2FsbCBkaXJlY3RseSB3aGVuCisgICAgICBi
dWlsZGluZyB5b3VyIGFwcGxpY2F0aW9uLiBJZiB5b3UgZG8gbmVlZCB0byB1c2UgYGFwcGVuZFRv
YCwgYmUgc3VyZSB0aGF0CisgICAgICB0aGUgdGFyZ2V0IGVsZW1lbnQgeW91IGFyZSBwcm92aWRp
bmcgaXMgYXNzb2NpYXRlZCB3aXRoIGFuIGBFbWJlci5BcHBsaWNhdGlvbmAKKyAgICAgIGFuZCBk
b2VzIG5vdCBoYXZlIGFuIGFuY2VzdG9yIGVsZW1lbnQgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGgg
YW4gRW1iZXIgdmlldy4KKyAgICAgICBAbWV0aG9kIGFwcGVuZFRvCisgICAgICBAcGFyYW0ge1N0
cmluZ3xET01FbGVtZW50fGpRdWVyeX0gQSBzZWxlY3RvciwgZWxlbWVudCwgSFRNTCBzdHJpbmcs
IG9yIGpRdWVyeSBvYmplY3QKKyAgICAgIEByZXR1cm4ge0VtYmVyLlZpZXd9IHJlY2VpdmVyCisg
ICAgICBAcHJpdmF0ZQorICAgICovCisgICAgYXBwZW5kVG86IGZ1bmN0aW9uIChzZWxlY3Rvcikg
eworICAgICAgdmFyICQgPSB0aGlzLl9lbnZpcm9ubWVudCA/IHRoaXMuX2Vudmlyb25tZW50Lm9w
dGlvbnMualF1ZXJ5IDogX2VtYmVyVmlld3NTeXN0ZW1KcXVlcnkuZGVmYXVsdDsKKworICAgICAg
aWYgKCQpIHsKKyAgICAgICAgdmFyIHRhcmdldCA9ICQoc2VsZWN0b3IpOworCisgICAgICAgIF9l
bWJlck1ldGFsRGVidWcuYXNzZXJ0KCdZb3UgdHJpZWQgdG8gYXBwZW5kIHRvICgnICsgc2VsZWN0
b3IgKyAnKSBidXQgdGhhdCBpc25cJ3QgaW4gdGhlIERPTScsIHRhcmdldC5sZW5ndGggPiAwKTsK
KyAgICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1lvdSBjYW5ub3QgYXBwZW5kIHRvIGFu
IGV4aXN0aW5nIEVtYmVyLlZpZXcuJywgIXRhcmdldC5pcygnLmVtYmVyLXZpZXcnKSAmJiAhdGFy
Z2V0LnBhcmVudHMoKS5pcygnLmVtYmVyLXZpZXcnKSk7CisKKyAgICAgICAgdGhpcy5yZW5kZXJl
ci5hcHBlbmRUbyh0aGlzLCB0YXJnZXRbMF0pOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdmFy
IHRhcmdldCA9IHNlbGVjdG9yOworCisgICAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdZ
b3UgdHJpZWQgdG8gYXBwZW5kIHRvIGEgc2VsZWN0b3Igc3RyaW5nICgnICsgc2VsZWN0b3IgKyAn
KSBpbiBhbiBlbnZpcm9ubWVudCB3aXRob3V0IGpRdWVyeScsIHR5cGVvZiB0YXJnZXQgIT09ICdz
dHJpbmcnKTsKKyAgICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1lvdSB0cmllZCB0byBh
cHBlbmQgdG8gYSBub24tRWxlbWVudCAoJyArIHNlbGVjdG9yICsgJykgaW4gYW4gZW52aXJvbm1l
bnQgd2l0aG91dCBqUXVlcnknLCB0eXBlb2Ygc2VsZWN0b3IuYXBwZW5kQ2hpbGQgPT09ICdmdW5j
dGlvbicpOworCisgICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kVG8odGhpcywgdGFyZ2V0KTsK
KyAgICAgIH0KKworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKworICAgIC8qKgorICAgICAg
QHByaXZhdGUKKyAgICAgICBDcmVhdGVzIGEgbmV3IERPTSBlbGVtZW50LCByZW5kZXJzIHRoZSB2
aWV3IGludG8gaXQsIHRoZW4gcmV0dXJucyB0aGUKKyAgICAgIGVsZW1lbnQuCisgICAgICAgQnkg
ZGVmYXVsdCwgdGhlIGVsZW1lbnQgY3JlYXRlZCBhbmQgcmVuZGVyZWQgaW50byB3aWxsIGJlIGEg
YEJPRFlgIGVsZW1lbnQsCisgICAgICBzaW5jZSB0aGlzIGlzIHRoZSBkZWZhdWx0IGNvbnRleHQg
dGhhdCB2aWV3cyBhcmUgcmVuZGVyZWQgaW50byB3aGVuIGJlaW5nCisgICAgICBpbnNlcnRlZCBk
aXJlY3RseSBpbnRvIHRoZSBET00uCisgICAgICAgYGBganMKKyAgICAgIHZhciBlbGVtZW50ID0g
dmlldy5yZW5kZXJUb0VsZW1lbnQoKTsKKyAgICAgIGVsZW1lbnQudGFnTmFtZTsgLy8gPT4gIkJP
RFkiCisgICAgICBgYGAKKyAgICAgICBZb3UgY2FuIG92ZXJyaWRlIHRoZSBraW5kIG9mIGVsZW1l
bnQgcmVuZGVyZWQgaW50byBhbmQgcmV0dXJuZWQgYnkKKyAgICAgIHNwZWNpZnlpbmcgYW4gb3B0
aW9uYWwgdGFnIG5hbWUgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LgorICAgICAgIGBgYGpzCisgICAg
ICB2YXIgZWxlbWVudCA9IHZpZXcucmVuZGVyVG9FbGVtZW50KCd0YWJsZScpOworICAgICAgZWxl
bWVudC50YWdOYW1lOyAvLyA9PiAiVEFCTEUiCisgICAgICBgYGAKKyAgICAgICBUaGlzIG1ldGhv
ZCBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gcmVuZGVyIHRoZSB2aWV3IGludG8gYW4gZWxlbWVu
dCB0aGF0CisgICAgICBpcyBub3QgaW4gdGhlIGRvY3VtZW50J3MgYm9keS4gSW5zdGVhZCwgYSBu
ZXcgYGJvZHlgIGVsZW1lbnQsIGRldGFjaGVkIGZyb20KKyAgICAgIHRoZSBET00gaXMgcmV0dXJu
ZWQuIEZhc3RCb290IHVzZXMgdGhpcyB0byBzZXJpYWxpemUgdGhlIHJlbmRlcmVkIHZpZXcgaW50
bworICAgICAgYSBzdHJpbmcgZm9yIHRyYW5zbWlzc2lvbiBvdmVyIHRoZSBuZXR3b3JrLgorICAg
ICAgIGBgYGpzCisgICAgICBhcHAudmlzaXQoJy8nKS50aGVuKGZ1bmN0aW9uKGluc3RhbmNlKSB7
CisgICAgICAgIHZhciBlbGVtZW50OworICAgICAgICBFbWJlci5ydW4oZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgZWxlbWVudCA9IHJlbmRlclRvRWxlbWVudChpbnN0YW5jZSk7CisgICAgICAgIH0p
OworICAgICAgICAgcmVzLnNlbmQoc2VyaWFsaXplKGVsZW1lbnQpKTsKKyAgICAgIH0pOworICAg
ICAgYGBgCisgICAgICAgQG1ldGhvZCByZW5kZXJUb0VsZW1lbnQKKyAgICAgIEBwYXJhbSB7U3Ry
aW5nfSB0YWdOYW1lIFRoZSB0YWcgb2YgdGhlIGVsZW1lbnQgdG8gY3JlYXRlIGFuZCByZW5kZXIg
aW50by4gRGVmYXVsdHMgdG8gImJvZHkiLgorICAgICAgQHJldHVybiB7SFRNTEJvZHlFbGVtZW50
fSBlbGVtZW50CisgICAgICBAcHJpdmF0ZQorICAgICovCisgICAgcmVuZGVyVG9FbGVtZW50OiBm
dW5jdGlvbiAodGFnTmFtZSkgeworICAgICAgdGFnTmFtZSA9IHRhZ05hbWUgfHwgJ2JvZHknOwor
CisgICAgICB2YXIgZWxlbWVudCA9IHRoaXMucmVuZGVyZXIuX2RvbS5jcmVhdGVFbGVtZW50KHRh
Z05hbWUpOworCisgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZFRvKHRoaXMsIGVsZW1lbnQpOwor
ICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgfSwKKworICAgIC8qKgorICAgICAgUmVwbGFjZXMg
dGhlIGNvbnRlbnQgb2YgdGhlIHNwZWNpZmllZCBwYXJlbnQgZWxlbWVudCB3aXRoIHRoaXMgdmll
dydzCisgICAgICBlbGVtZW50LiBJZiB0aGUgdmlldyBkb2VzIG5vdCBoYXZlIGFuIEhUTUwgcmVw
cmVzZW50YXRpb24geWV0LAorICAgICAgdGhlIGVsZW1lbnQgd2lsbCBiZSBnZW5lcmF0ZWQgYXV0
b21hdGljYWxseS4KKyAgICAgICBOb3RlIHRoYXQgdGhpcyBtZXRob2QganVzdCBzY2hlZHVsZXMg
dGhlIHZpZXcgdG8gYmUgYXBwZW5kZWQ7IHRoZSBET00KKyAgICAgIGVsZW1lbnQgd2lsbCBub3Qg
YmUgYXBwZW5kZWQgdG8gdGhlIGdpdmVuIGVsZW1lbnQgdW50aWwgYWxsIGJpbmRpbmdzIGhhdmUK
KyAgICAgIGZpbmlzaGVkIHN5bmNocm9uaXppbmcKKyAgICAgICBAbWV0aG9kIHJlcGxhY2VJbgor
ICAgICAgQHBhcmFtIHtTdHJpbmd8RE9NRWxlbWVudHxqUXVlcnl9IHRhcmdldCBBIHNlbGVjdG9y
LCBlbGVtZW50LCBIVE1MIHN0cmluZywgb3IgalF1ZXJ5IG9iamVjdAorICAgICAgQHJldHVybiB7
RW1iZXIuVmlld30gcmVjZWl2ZWQKKyAgICAgIEBwcml2YXRlCisgICAgKi8KKyAgICByZXBsYWNl
SW46IGZ1bmN0aW9uIChzZWxlY3RvcikgeworICAgICAgdmFyIHRhcmdldCA9IF9lbWJlclZpZXdz
U3lzdGVtSnF1ZXJ5LmRlZmF1bHQoc2VsZWN0b3IpOworCisgICAgICBfZW1iZXJNZXRhbERlYnVn
LmFzc2VydCgnWW91IHRyaWVkIHRvIHJlcGxhY2UgaW4gKCcgKyBzZWxlY3RvciArICcpIGJ1dCB0
aGF0IGlzblwndCBpbiB0aGUgRE9NJywgdGFyZ2V0Lmxlbmd0aCA+IDApOworICAgICAgX2VtYmVy
TWV0YWxEZWJ1Zy5hc3NlcnQoJ1lvdSBjYW5ub3QgcmVwbGFjZSBhbiBleGlzdGluZyBFbWJlci5W
aWV3LicsICF0YXJnZXQuaXMoJy5lbWJlci12aWV3JykgJiYgIXRhcmdldC5wYXJlbnRzKCkuaXMo
Jy5lbWJlci12aWV3JykpOworCisgICAgICB0aGlzLnJlbmRlcmVyLnJlcGxhY2VJbih0aGlzLCB0
YXJnZXRbMF0pOworCisgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgLyoqCisgICAg
ICBBcHBlbmRzIHRoZSB2aWV3J3MgZWxlbWVudCB0byB0aGUgZG9jdW1lbnQgYm9keS4gSWYgdGhl
IHZpZXcgZG9lcworICAgICAgbm90IGhhdmUgYW4gSFRNTCByZXByZXNlbnRhdGlvbiB5ZXQKKyAg
ICAgIHRoZSBlbGVtZW50IHdpbGwgYmUgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkuCisgICAgICAg
SWYgeW91ciBhcHBsaWNhdGlvbiB1c2VzIHRoZSBgcm9vdEVsZW1lbnRgIHByb3BlcnR5LCB5b3Ug
bXVzdCBhcHBlbmQKKyAgICAgIHRoZSB2aWV3IHdpdGhpbiB0aGF0IGVsZW1lbnQuIFJlbmRlcmlu
ZyB2aWV3cyBvdXRzaWRlIG9mIHRoZSBgcm9vdEVsZW1lbnRgCisgICAgICBpcyBub3Qgc3VwcG9y
dGVkLgorICAgICAgIE5vdGUgdGhhdCB0aGlzIG1ldGhvZCBqdXN0IHNjaGVkdWxlcyB0aGUgdmll
dyB0byBiZSBhcHBlbmRlZDsgdGhlIERPTQorICAgICAgZWxlbWVudCB3aWxsIG5vdCBiZSBhcHBl
bmRlZCB0byB0aGUgZG9jdW1lbnQgYm9keSB1bnRpbCBhbGwgYmluZGluZ3MgaGF2ZQorICAgICAg
ZmluaXNoZWQgc3luY2hyb25pemluZy4KKyAgICAgICBAbWV0aG9kIGFwcGVuZAorICAgICAgQHJl
dHVybiB7RW1iZXIuVmlld30gcmVjZWl2ZXIKKyAgICAgIEBwcml2YXRlCisgICAgKi8KKyAgICBh
cHBlbmQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHJldHVybiB0aGlzLmFwcGVuZFRvKGRvY3VtZW50
LmJvZHkpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgIFJlbW92ZXMgdGhlIHZpZXcncyBlbGVt
ZW50IGZyb20gdGhlIGVsZW1lbnQgdG8gd2hpY2ggaXQgaXMgYXR0YWNoZWQuCisgICAgICAgQG1l
dGhvZCByZW1vdmUKKyAgICAgIEByZXR1cm4ge0VtYmVyLlZpZXd9IHJlY2VpdmVyCisgICAgICBA
cHJpdmF0ZQorICAgICovCisgICAgcmVtb3ZlOiBmdW5jdGlvbiAoKSB7CisgICAgICAvLyBXaGF0
IHdlIHNob3VsZCByZWFsbHkgZG8gaGVyZSBpcyB3YWl0IHVudGlsIHRoZSBlbmQgb2YgdGhlIHJ1
biBsb29wCisgICAgICAvLyB0byBkZXRlcm1pbmUgaWYgdGhlIGVsZW1lbnQgaGFzIGJlZW4gcmUt
YXBwZW5kZWQgdG8gYSBkaWZmZXJlbnQKKyAgICAgIC8vIGVsZW1lbnQuCisgICAgICAvLyBJbiB0
aGUgaW50ZXJpbSwgd2Ugd2lsbCBqdXN0IHJlLXJlbmRlciBpZiB0aGF0IGhhcHBlbnMuIEl0IGlz
IG1vcmUKKyAgICAgIC8vIGltcG9ydGFudCB0aGFuIGVsZW1lbnRzIGdldCBnYXJiYWdlIGNvbGxl
Y3RlZC4KKyAgICAgIGlmICghdGhpcy5yZW1vdmVkRnJvbURPTSkgeworICAgICAgICB0aGlzLmRl
c3Ryb3lFbGVtZW50KCk7CisgICAgICB9CisKKyAgICAgIC8vIFNldCBmbGFnIHRvIGF2b2lkIGZ1
dHVyZSByZW5kZXJzCisgICAgICB0aGlzLl93aWxsSW5zZXJ0ID0gZmFsc2U7CisgICAgfSwKKwor
ICAgIC8qKgorICAgICAgVGhlIEhUTUwgYGlkYCBvZiB0aGUgdmlldydzIGVsZW1lbnQgaW4gdGhl
IERPTS4gWW91IGNhbiBwcm92aWRlIHRoaXMKKyAgICAgIHZhbHVlIHlvdXJzZWxmIGJ1dCBpdCBt
dXN0IGJlIHVuaXF1ZSAoanVzdCBhcyBpbiBIVE1MKToKKyAgICAgICBgYGBoYW5kbGViYXJzCisg
ICAgICAgIHt7bXktY29tcG9uZW50IGVsZW1lbnRJZD0iYS1yZWFsbHktY29vbC1pZCJ9fQorICAg
ICAgYGBgCisgICAgICAgSWYgbm90IG1hbnVhbGx5IHNldCBhIGRlZmF1bHQgdmFsdWUgd2lsbCBi
ZSBwcm92aWRlZCBieSB0aGUgZnJhbWV3b3JrLgorICAgICAgIE9uY2UgcmVuZGVyZWQgYW4gZWxl
bWVudCdzIGBlbGVtZW50SWRgIGlzIGNvbnNpZGVyZWQgaW1tdXRhYmxlIGFuZCB5b3UKKyAgICAg
IHNob3VsZCBuZXZlciBjaGFuZ2UgaXQuIElmIHlvdSBuZWVkIHRvIGNvbXB1dGUgYSBkeW5hbWlj
IHZhbHVlIGZvciB0aGUKKyAgICAgIGBlbGVtZW50SWRgLCB5b3Ugc2hvdWxkIGRvIHRoaXMgd2hl
biB0aGUgY29tcG9uZW50IG9yIGVsZW1lbnQgaXMgYmVpbmcKKyAgICAgIGluc3RhbnRpYXRlZDoK
KyAgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICAgIGV4cG9ydCBkZWZhdWx0IEVtYmVyLkNvbXBv
bmVudC5leHRlbmQoeworICAgICAgICAgIHNldEVsZW1lbnRJZDogRW1iZXIub24oJ2luaXQnLCBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuZ2V0KCdpbmRleCcpOwor
ICAgICAgICAgICAgdGhpcy5zZXQoJ2VsZW1lbnRJZCcsICdjb21wb25lbnQtaWQnICsgaW5kZXgp
OworICAgICAgICAgIH0pCisgICAgICAgIH0pOworICAgICAgYGBgCisgICAgICAgQHByb3BlcnR5
IGVsZW1lbnRJZAorICAgICAgQHR5cGUgU3RyaW5nCisgICAgICBAcHVibGljCisgICAgKi8KKyAg
ICBlbGVtZW50SWQ6IG51bGwsCisKKyAgICAvKioKKyAgICAgIEF0dGVtcHRzIHRvIGRpc2NvdmVy
IHRoZSBlbGVtZW50IGluIHRoZSBwYXJlbnQgZWxlbWVudC4gVGhlIGRlZmF1bHQKKyAgICAgIGlt
cGxlbWVudGF0aW9uIGxvb2tzIGZvciBhbiBlbGVtZW50IHdpdGggYW4gSUQgb2YgYGVsZW1lbnRJ
ZGAgKG9yIHRoZQorICAgICAgdmlldydzIGd1aWQgaWYgYGVsZW1lbnRJZGAgaXMgbnVsbCkuIFlv
dSBjYW4gb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8KKyAgICAgIHByb3ZpZGUgeW91ciBvd24gZm9y
bSBvZiBsb29rdXAuIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byBkaXNjb3ZlciB5b3VyCisg
ICAgICBlbGVtZW50IHVzaW5nIGEgQ1NTIGNsYXNzIG5hbWUgaW5zdGVhZCBvZiBhbiBJRC4KKyAg
ICAgICBAbWV0aG9kIGZpbmRFbGVtZW50SW5QYXJlbnRFbGVtZW50CisgICAgICBAcGFyYW0ge0RP
TUVsZW1lbnR9IHBhcmVudEVsZW1lbnQgVGhlIHBhcmVudCdzIERPTSBlbGVtZW50CisgICAgICBA
cmV0dXJuIHtET01FbGVtZW50fSBUaGUgZGlzY292ZXJlZCBlbGVtZW50CisgICAgICBAcHJpdmF0
ZQorICAgICovCisgICAgZmluZEVsZW1lbnRJblBhcmVudEVsZW1lbnQ6IGZ1bmN0aW9uIChwYXJl
bnRFbGVtKSB7CisgICAgICB2YXIgaWQgPSAnIycgKyB0aGlzLmVsZW1lbnRJZDsKKyAgICAgIHJl
dHVybiBfZW1iZXJWaWV3c1N5c3RlbUpxdWVyeS5kZWZhdWx0KGlkKVswXSB8fCBfZW1iZXJWaWV3
c1N5c3RlbUpxdWVyeS5kZWZhdWx0KGlkLCBwYXJlbnRFbGVtKVswXTsKKyAgICB9LAorCisgICAg
LyoqCisgICAgICBDcmVhdGVzIGEgRE9NIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2aWV3IGFuZCBh
bGwgb2YgaXRzIGNoaWxkIHZpZXdzIGJ5CisgICAgICByZWN1cnNpdmVseSBjYWxsaW5nIHRoZSBg
cmVuZGVyKClgIG1ldGhvZC4gT25jZSB0aGUgZWxlbWVudCBpcyBjcmVhdGVkLAorICAgICAgaXQg
c2V0cyB0aGUgYGVsZW1lbnRgIHByb3BlcnR5IG9mIHRoZSB2aWV3IHRvIHRoZSByZW5kZXJlZCBl
bGVtZW50LgorICAgICAgIEFmdGVyIHRoZSBlbGVtZW50IGhhcyBiZWVuIGluc2VydGVkIGludG8g
dGhlIERPTSwgYGRpZEluc2VydEVsZW1lbnRgIHdpbGwKKyAgICAgIGJlIGNhbGxlZCBvbiB0aGlz
IHZpZXcgYW5kIGFsbCBvZiBpdHMgY2hpbGQgdmlld3MuCisgICAgICAgQG1ldGhvZCBjcmVhdGVF
bGVtZW50CisgICAgICBAcmV0dXJuIHtFbWJlci5WaWV3fSByZWNlaXZlcgorICAgICAgQHByaXZh
dGUKKyAgICAqLworICAgIGNyZWF0ZUVsZW1lbnQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgIGlmICh0
aGlzLmVsZW1lbnQpIHsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICB9CisKKyAgICAgIHRo
aXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCh0aGlzKTsKKworICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgfSwKKworICAgIC8qKgorICAgICAgQ2FsbGVkIHdoZW4gYSB2aWV3IGlzIGdvaW5nIHRvIGlu
c2VydCBhbiBlbGVtZW50IGludG8gdGhlIERPTS4KKyAgICAgICBAZXZlbnQgd2lsbEluc2VydEVs
ZW1lbnQKKyAgICAgIEBwdWJsaWMKKyAgICAqLworICAgIHdpbGxJbnNlcnRFbGVtZW50OiBLLAor
CisgICAgLyoqCisgICAgICBDYWxsZWQgd2hlbiB0aGUgZWxlbWVudCBvZiB0aGUgdmlldyBoYXMg
YmVlbiBpbnNlcnRlZCBpbnRvIHRoZSBET00KKyAgICAgIG9yIGFmdGVyIHRoZSB2aWV3IHdhcyBy
ZS1yZW5kZXJlZC4gT3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiB0byBkbyBhbnkKKyAgICAgIHNldCB1
cCB0aGF0IHJlcXVpcmVzIGFuIGVsZW1lbnQgaW4gdGhlIGRvY3VtZW50IGJvZHkuCisgICAgICAg
V2hlbiBhIHZpZXcgaGFzIGNoaWxkcmVuLCBkaWRJbnNlcnRFbGVtZW50IHdpbGwgYmUgY2FsbGVk
IG9uIHRoZQorICAgICAgY2hpbGQgdmlldyhzKSBmaXJzdCwgYnViYmxpbmcgdXB3YXJkcyB0aHJv
dWdoIHRoZSBoaWVyYXJjaHkuCisgICAgICAgQGV2ZW50IGRpZEluc2VydEVsZW1lbnQKKyAgICAg
IEBwdWJsaWMKKyAgICAqLworICAgIGRpZEluc2VydEVsZW1lbnQ6IEssCisKKyAgICAvKioKKyAg
ICAgIENhbGxlZCB3aGVuIHRoZSB2aWV3IGlzIGFib3V0IHRvIHJlcmVuZGVyLCBidXQgYmVmb3Jl
IGFueXRoaW5nIGhhcworICAgICAgYmVlbiB0b3JuIGRvd24uIFRoaXMgaXMgYSBnb29kIG9wcG9y
dHVuaXR5IHRvIHRlYXIgZG93biBhbnkgbWFudWFsCisgICAgICBvYnNlcnZlcnMgeW91IGhhdmUg
aW5zdGFsbGVkIGJhc2VkIG9uIHRoZSBET00gc3RhdGUKKyAgICAgICBAZXZlbnQgd2lsbENsZWFy
UmVuZGVyCisgICAgICBAcHVibGljCisgICAgKi8KKyAgICB3aWxsQ2xlYXJSZW5kZXI6IEssCisK
KyAgICAvKioKKyAgICAgIERlc3Ryb3lzIGFueSBleGlzdGluZyBlbGVtZW50IGFsb25nIHdpdGgg
dGhlIGVsZW1lbnQgZm9yIGFueSBjaGlsZCB2aWV3cworICAgICAgYXMgd2VsbC4gSWYgdGhlIHZp
ZXcgZG9lcyBub3QgY3VycmVudGx5IGhhdmUgYSBlbGVtZW50LCB0aGVuIHRoaXMgbWV0aG9kCisg
ICAgICB3aWxsIGRvIG5vdGhpbmcuCisgICAgICAgSWYgeW91IGltcGxlbWVudCBgd2lsbERlc3Ry
b3lFbGVtZW50KClgIG9uIHlvdXIgdmlldywgdGhlbiB0aGlzIG1ldGhvZCB3aWxsCisgICAgICBi
ZSBpbnZva2VkIG9uIHlvdXIgdmlldyBiZWZvcmUgeW91ciBlbGVtZW50IGlzIGRlc3Ryb3llZCB0
byBnaXZlIHlvdSBhCisgICAgICBjaGFuY2UgdG8gY2xlYW4gdXAgYW55IGV2ZW50IGhhbmRsZXJz
LCBldGMuCisgICAgICAgSWYgeW91IHdyaXRlIGEgYHdpbGxEZXN0cm95RWxlbWVudCgpYCBoYW5k
bGVyLCB5b3UgY2FuIGFzc3VtZSB0aGF0IHlvdXIKKyAgICAgIGBkaWRJbnNlcnRFbGVtZW50KClg
IGhhbmRsZXIgd2FzIGNhbGxlZCBlYXJsaWVyIGZvciB0aGUgc2FtZSBlbGVtZW50LgorICAgICAg
IFlvdSBzaG91bGQgbm90IGNhbGwgb3Igb3ZlcnJpZGUgdGhpcyBtZXRob2QgeW91cnNlbGYsIGJ1
dCB5b3UgbWF5CisgICAgICB3YW50IHRvIGltcGxlbWVudCB0aGUgYWJvdmUgY2FsbGJhY2tzLgor
ICAgICAgIEBtZXRob2QgZGVzdHJveUVsZW1lbnQKKyAgICAgIEByZXR1cm4ge0VtYmVyLlZpZXd9
IHJlY2VpdmVyCisgICAgICBAcHJpdmF0ZQorICAgICovCisgICAgZGVzdHJveUVsZW1lbnQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3RhdGUuZGVzdHJveUVsZW1l
bnQodGhpcyk7CisgICAgfSwKKworICAgIC8qKgorICAgICAgQ2FsbGVkIHdoZW4gdGhlIGVsZW1l
bnQgb2YgdGhlIHZpZXcgaXMgZ29pbmcgdG8gYmUgZGVzdHJveWVkLiBPdmVycmlkZQorICAgICAg
dGhpcyBmdW5jdGlvbiB0byBkbyBhbnkgdGVhcmRvd24gdGhhdCByZXF1aXJlcyBhbiBlbGVtZW50
LCBsaWtlIHJlbW92aW5nCisgICAgICBldmVudCBsaXN0ZW5lcnMuCisgICAgICAgUGxlYXNlIG5v
dGU6IGFueSBwcm9wZXJ0eSBjaGFuZ2VzIG1hZGUgZHVyaW5nIHRoaXMgZXZlbnQgd2lsbCBoYXZl
IG5vCisgICAgICBlZmZlY3Qgb24gb2JqZWN0IG9ic2VydmVycy4KKyAgICAgICBAZXZlbnQgd2ls
bERlc3Ryb3lFbGVtZW50CisgICAgICBAcHVibGljCisgICAgKi8KKyAgICB3aWxsRGVzdHJveUVs
ZW1lbnQ6IEssCisKKyAgICAvKioKKyAgICAgIENhbGxlZCB3aGVuIHRoZSBwYXJlbnRWaWV3IHBy
b3BlcnR5IGhhcyBjaGFuZ2VkLgorICAgICAgIEBldmVudCBwYXJlbnRWaWV3RGlkQ2hhbmdlCisg
ICAgICBAcHJpdmF0ZQorICAgICovCisgICAgcGFyZW50Vmlld0RpZENoYW5nZTogSywKKworICAg
IC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4KKyAgICAvLyBTVEFOREFSRCBSRU5ERVIgUFJPUEVSVElFUworICAgIC8vCisKKyAgICAv
KioKKyAgICAgIFRhZyBuYW1lIGZvciB0aGUgdmlldydzIG91dGVyIGVsZW1lbnQuIFRoZSB0YWcg
bmFtZSBpcyBvbmx5IHVzZWQgd2hlbiBhbgorICAgICAgZWxlbWVudCBpcyBmaXJzdCBjcmVhdGVk
LiBJZiB5b3UgY2hhbmdlIHRoZSBgdGFnTmFtZWAgZm9yIGFuIGVsZW1lbnQsIHlvdQorICAgICAg
bXVzdCBkZXN0cm95IGFuZCByZWNyZWF0ZSB0aGUgdmlldyBlbGVtZW50LgorICAgICAgIEJ5IGRl
ZmF1bHQsIHRoZSByZW5kZXIgYnVmZmVyIHdpbGwgdXNlIGEgYDxkaXY+YCB0YWcgZm9yIHZpZXdz
LgorICAgICAgIEBwcm9wZXJ0eSB0YWdOYW1lCisgICAgICBAdHlwZSBTdHJpbmcKKyAgICAgIEBk
ZWZhdWx0IG51bGwKKyAgICAgIEBwdWJsaWMKKyAgICAqLworCisgICAgLy8gV2UgbGVhdmUgdGhp
cyBudWxsIGJ5IGRlZmF1bHQgc28gd2UgY2FuIHRlbGwgdGhlIGRpZmZlcmVuY2UgYmV0d2Vlbgor
ICAgIC8vIHRoZSBkZWZhdWx0IGNhc2UgYW5kIGEgdXNlci1zcGVjaWZpZWQgdGFnLgorICAgIHRh
Z05hbWU6IG51bGwsCisKKyAgICAvKgorICAgICAgVXNlZCB0byBzcGVjaWZ5IGEgZGVmYXVsdCB0
YWdOYW1lIHRoYXQgY2FuIGJlIG92ZXJyaWRkZW4gd2hlbiBleHRlbmRpbmcKKyAgICAgIG9yIGlu
dm9raW5nIGZyb20gYSB0ZW1wbGF0ZS4KKyAgICAgICBAcHJvcGVydHkgX2RlZmF1bHRUYWdOYW1l
CisgICAgICBAcHJpdmF0ZQorICAgICovCisKKyAgICAvKioKKyAgICAgIE5vcm1hbGx5LCBFbWJl
cidzIGNvbXBvbmVudCBtb2RlbCBpcyAid3JpdGUtb25seSIuIFRoZSBjb21wb25lbnQgdGFrZXMg
YQorICAgICAgYnVuY2ggb2YgYXR0cmlidXRlcyB0aGF0IGl0IGdvdCBwYXNzZWQgaW4sIGFuZCB1
c2VzIHRoZW0gdG8gcmVuZGVyIGl0cworICAgICAgdGVtcGxhdGUuCisgICAgICAgT25lIG5pY2Ug
dGhpbmcgYWJvdXQgdGhpcyBtb2RlbCBpcyB0aGF0IGlmIHlvdSB0cnkgdG8gc2V0IGEgdmFsdWUg
dG8gdGhlCisgICAgICBzYW1lIHRoaW5nIGFzIGxhc3QgdGltZSwgRW1iZXIgKHRocm91Z2ggSFRN
TEJhcnMpIHdpbGwgYXZvaWQgZG9pbmcgYW55CisgICAgICB3b3JrIG9uIHRoZSBET00uCisgICAg
ICAgVGhpcyBpcyBub3QganVzdCBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4gSWYgYW4gYXR0
cmlidXRlIGhhcyBub3QKKyAgICAgIGNoYW5nZWQsIGl0IGlzIGltcG9ydGFudCBub3QgdG8gY2xv
YmJlciB0aGUgZWxlbWVudCdzICJoaWRkZW4gc3RhdGUiLgorICAgICAgRm9yIGV4YW1wbGUsIGlm
IHlvdSBzZXQgYW4gaW5wdXQncyBgdmFsdWVgIHRvIHRoZSBzYW1lIHZhbHVlIGFzIGJlZm9yZSwK
KyAgICAgIGl0IHdpbGwgY2xvYmJlciBzZWxlY3Rpb24gc3RhdGUgYW5kIGN1cnNvciBwb3NpdGlv
bi4gSW4gb3RoZXIgd29yZHMsCisgICAgICBzZXR0aW5nIGFuIGF0dHJpYnV0ZSBpcyBub3QgKiph
bHdheXMqKiBpZGVtcG90ZW50LgorICAgICAgIFRoaXMgbWV0aG9kIHByb3ZpZGVzIGEgd2F5IHRv
IHJlYWQgYW4gZWxlbWVudCdzIGF0dHJpYnV0ZSBhbmQgYWxzbworICAgICAgdXBkYXRlIHRoZSBs
YXN0IHZhbHVlIEVtYmVyIGtub3dzIGFib3V0IGF0IHRoZSBzYW1lIHRpbWUuIFRoaXMgbWFrZXMK
KyAgICAgIHNldHRpbmcgYW4gYXR0cmlidXRlIGlkZW1wb3RlbnQuCisgICAgICAgSW4gcGFydGlj
dWxhciwgd2hhdCB0aGlzIG1lYW5zIGlzIHRoYXQgaWYgeW91IGdldCBhbiBgPGlucHV0PmAgZWxl
bWVudCdzCisgICAgICBgdmFsdWVgIGF0dHJpYnV0ZSBhbmQgdGhlbiByZS1yZW5kZXIgdGhlIHRl
bXBsYXRlIHdpdGggdGhlIHNhbWUgdmFsdWUsCisgICAgICBpdCB3aWxsIGF2b2lkIGNsb2JiZXJp
bmcgdGhlIGN1cnNvciBhbmQgc2VsZWN0aW9uIHBvc2l0aW9uLgorICAgICAgIFNpbmNlIG1vc3Qg
YXR0cmlidXRlIHNldHMgYXJlIGlkZW1wb3RlbnQgaW4gdGhlIGJyb3dzZXIsIHlvdSB0eXBpY2Fs
bHkKKyAgICAgIGNhbiBnZXQgYXdheSB3aXRoIHJlYWRpbmcgYXR0cmlidXRlcyB1c2luZyBqUXVl
cnksIGJ1dCB0aGUgbW9zdCByZWxpYWJsZQorICAgICAgd2F5IHRvIGRvIHNvIGlzIHRocm91Z2gg
dGhpcyBtZXRob2QuCisgICAgICAgQG1ldGhvZCByZWFkRE9NQXR0cgorICAgICAgQHBhcmFtIHtT
dHJpbmd9IG5hbWUgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZQorICAgICAgQHJldHVybiBTdHJp
bmcKKyAgICAgIEBwdWJsaWMKKyAgICAqLworICAgIHJlYWRET01BdHRyOiBmdW5jdGlvbiAobmFt
ZSkgeworICAgICAgdmFyIGF0dHIgPSB0aGlzLl9yZW5kZXJOb2RlLmNoaWxkTm9kZXMuZmlsdGVy
KGZ1bmN0aW9uIChub2RlKSB7CisgICAgICAgIHJldHVybiBub2RlLmF0dHJOYW1lID09PSBuYW1l
OworICAgICAgfSlbMF07CisgICAgICBpZiAoIWF0dHIpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7
CisgICAgICB9CisgICAgICByZXR1cm4gYXR0ci5nZXRDb250ZW50KCk7CisgICAgfSwKKworICAg
IC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4KKyAgICAvLyBDT1JFIERJU1BMQVkgTUVUSE9EUworICAgIC8vCisKKyAgICAvKioKKyAgICAg
IFNldHVwIGEgdmlldywgYnV0IGRvIG5vdCBmaW5pc2ggd2FraW5nIGl0IHVwLgorICAgICAgICog
Y29uZmlndXJlIGBjaGlsZFZpZXdzYAorICAgICAgKiByZWdpc3RlciB0aGUgdmlldyB3aXRoIHRo
ZSBnbG9iYWwgdmlld3MgaGFzaCwgd2hpY2ggaXMgdXNlZCBmb3IgZXZlbnQKKyAgICAgICAgZGlz
cGF0Y2gKKyAgICAgICBAbWV0aG9kIGluaXQKKyAgICAgIEBwcml2YXRlCisgICAgKi8KKyAgICBp
bml0OiBmdW5jdGlvbiAoKSB7CisgICAgICB0aGlzLl9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVu
dHMpOworCisgICAgICBpZiAoIXRoaXMuZWxlbWVudElkKSB7CisgICAgICAgIHRoaXMuZWxlbWVu
dElkID0gX2VtYmVyTWV0YWxVdGlscy5ndWlkRm9yKHRoaXMpOworICAgICAgfQorCisgICAgICB0
aGlzLnNjaGVkdWxlZFJldmFsaWRhdGlvbiA9IGZhbHNlOworCisgICAgICB0aGlzW0lOSVRfV0FT
X0NBTExFRF0gPSB0cnVlOworCisgICAgICBpZiAodHlwZW9mIHRoaXMuZGlkSW5pdEF0dHJzID09
PSAnZnVuY3Rpb24nKSB7CisgICAgICAgIF9lbWJlck1ldGFsRGVidWcuZGVwcmVjYXRlKCdbREVQ
UkVDQVRFRF0gZGlkSW5pdEF0dHJzIGNhbGxlZCBpbiAnICsgdGhpcy50b1N0cmluZygpICsgJy4n
LCBmYWxzZSwgeworICAgICAgICAgIGlkOiAnZW1iZXItdmlld3MuZGlkLWluaXQtYXR0cnMnLAor
ICAgICAgICAgIHVudGlsOiAnMy4wLjAnLAorICAgICAgICAgIHVybDogJ2h0dHA6Ly9lbWJlcmpz
LmNvbS9kZXByZWNhdGlvbnMvdjIueCN0b2NfZW1iZXItY29tcG9uZW50LWRpZGluaXRhdHRycycK
KyAgICAgICAgfSk7CisgICAgICB9CisKKyAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdV
c2luZyBhIGN1c3RvbSBgLnJlbmRlcmAgZnVuY3Rpb24gaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4n
LCAhdGhpcy5yZW5kZXIpOworICAgIH0KKworICB9LCBfTWl4aW4kY3JlYXRlW19lbWJlclJ1bnRp
bWVTeXN0ZW1Db3JlX29iamVjdC5QT1NUX0lOSVRdID0gZnVuY3Rpb24gKCkgeworICAgIHRoaXMu
X3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisKKyAgICBfZW1iZXJNZXRhbERlYnVnLmFz
c2VydCgnWW91IG11c3QgY2FsbCBgdGhpcy5fc3VwZXIoLi4uYXJndW1lbnRzKTtgIHdoZW4gaW1w
bGVtZW50aW5nIGBpbml0YCBpbiBhIGNvbXBvbmVudC4gUGxlYXNlIHVwZGF0ZSAnICsgdGhpcyAr
ICcgdG8gY2FsbCBgdGhpcy5fc3VwZXJgIGZyb20gYGluaXRgLicsIHRoaXNbSU5JVF9XQVNfQ0FM
TEVEXSk7CisKKyAgICB0aGlzLnJlbmRlcmVyLmNvbXBvbmVudEluaXRBdHRycyh0aGlzLCB0aGlz
LmF0dHJzIHx8IHt9KTsKKyAgfSwgX01peGluJGNyZWF0ZS5fX2RlZmluZU5vbkVudW1lcmFibGUg
PSBmdW5jdGlvbiAocHJvcGVydHkpIHsKKyAgICB0aGlzW3Byb3BlcnR5Lm5hbWVdID0gcHJvcGVy
dHkuZGVzY3JpcHRvci52YWx1ZTsKKyAgfSwgX01peGluJGNyZWF0ZS5yZXZhbGlkYXRlID0gZnVu
Y3Rpb24gKCkgeworICAgIHRoaXMucmVuZGVyZXIucmV2YWxpZGF0ZVRvcExldmVsVmlldyh0aGlz
KTsKKyAgICB0aGlzLnNjaGVkdWxlZFJldmFsaWRhdGlvbiA9IGZhbHNlOworICB9LCBfTWl4aW4k
Y3JlYXRlLnNjaGVkdWxlUmV2YWxpZGF0ZSA9IGZ1bmN0aW9uIChub2RlLCBsYWJlbCwgbWFudWFs
UmVyZW5kZXIpIHsKKyAgICBpZiAobm9kZSAmJiAhdGhpcy5fZGlzcGF0Y2hpbmcgJiYgdGhpcy5l
bnYucmVuZGVyZWROb2Rlcy5oYXMobm9kZSkpIHsKKyAgICAgIGlmIChtYW51YWxSZXJlbmRlcikg
eworICAgICAgICBfZW1iZXJNZXRhbERlYnVnLmRlcHJlY2F0ZSgnWW91IG1hbnVhbGx5IHJlcmVu
ZGVyZWQgJyArIGxhYmVsICsgJyAoYSBwYXJlbnQgY29tcG9uZW50KSBmcm9tIGEgY2hpbGQgY29t
cG9uZW50IGR1cmluZyB0aGUgcmVuZGVyaW5nIHByb2Nlc3MuIFRoaXMgcmFyZWx5IHdvcmtlZCBp
biBFbWJlciAxLnggYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBFbWJlciAzLjAnLCBmYWxzZSwgeyBp
ZDogJ2VtYmVyLXZpZXdzLm1hbnVhbC1wYXJlbnQtcmVyZW5kZXInLCB1bnRpbDogJzMuMC4wJyB9
KTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIF9lbWJlck1ldGFsRGVidWcuZGVwcmVjYXRlKCdZ
b3UgbW9kaWZpZWQgJyArIGxhYmVsICsgJyB0d2ljZSBpbiBhIHNpbmdsZSByZW5kZXIuIFRoaXMg
d2FzIHVucmVsaWFibGUgaW4gRW1iZXIgMS54IGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gRW1iZXIg
My4wJywgZmFsc2UsIHsgaWQ6ICdlbWJlci12aWV3cy5yZW5kZXItZG91YmxlLW1vZGlmeScsIHVu
dGlsOiAnMy4wLjAnIH0pOworICAgICAgfQorICAgICAgX2VtYmVyTWV0YWxSdW5fbG9vcC5kZWZh
dWx0LnNjaGVkdWxlT25jZSgncmVuZGVyJywgdGhpcywgdGhpcy5yZXZhbGlkYXRlKTsKKyAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBfZW1iZXJNZXRhbERlYnVnLmRlcHJlY2F0ZSgnQSBwcm9w
ZXJ0eSBvZiAnICsgdGhpcyArICcgd2FzIG1vZGlmaWVkIGluc2lkZSB0aGUgJyArIHRoaXMuX2Rp
c3BhdGNoaW5nICsgJyBob29rLiBZb3Ugc2hvdWxkIG5ldmVyIGNoYW5nZSBwcm9wZXJ0aWVzIG9u
IGNvbXBvbmVudHMsIHNlcnZpY2VzIG9yIG1vZGVscyBkdXJpbmcgJyArIHRoaXMuX2Rpc3BhdGNo
aW5nICsgJyBiZWNhdXNlIGl0IGNhdXNlcyBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBkZWdyYWRh
dGlvbi4nLCAhdGhpcy5fZGlzcGF0Y2hpbmcsIHsgaWQ6ICdlbWJlci12aWV3cy5kaXNwYXRjaGlu
Zy1tb2RpZnktcHJvcGVydHknLCB1bnRpbDogJzMuMC4wJyB9KTsKKworICAgIGlmICghdGhpcy5z
Y2hlZHVsZWRSZXZhbGlkYXRpb24gfHwgdGhpcy5fZGlzcGF0Y2hpbmcpIHsKKyAgICAgIHRoaXMu
c2NoZWR1bGVkUmV2YWxpZGF0aW9uID0gdHJ1ZTsKKyAgICAgIF9lbWJlck1ldGFsUnVuX2xvb3Au
ZGVmYXVsdC5zY2hlZHVsZU9uY2UoJ3JlbmRlcicsIHRoaXMsIHRoaXMucmV2YWxpZGF0ZSk7Cisg
ICAgfQorICB9LCBfTWl4aW4kY3JlYXRlLnRlbXBsYXRlUmVuZGVyZXIgPSBudWxsLCBfTWl4aW4k
Y3JlYXRlLnJlbW92ZUZyb21QYXJlbnQgPSBmdW5jdGlvbiAoKSB7CisgICAgdmFyIHBhcmVudCA9
IHRoaXMucGFyZW50VmlldzsKKworICAgIC8vIFJlbW92ZSBET00gZWxlbWVudCBmcm9tIHBhcmVu
dAorICAgIHRoaXMucmVtb3ZlKCk7CisKKyAgICBpZiAocGFyZW50KSB7CisgICAgICBwYXJlbnQu
cmVtb3ZlQ2hpbGQodGhpcyk7CisgICAgfQorICAgIHJldHVybiB0aGlzOworICB9LCBfTWl4aW4k
Y3JlYXRlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7CisgICAgLy8gZ2V0IHBhcmVudFZpZXcgYmVm
b3JlIGNhbGxpbmcgc3VwZXIgYmVjYXVzZSBpdCdsbCBiZSBkZXN0cm95ZWQKKyAgICB2YXIgcGFy
ZW50VmlldyA9IHRoaXMucGFyZW50VmlldzsKKyAgICB2YXIgdmlld05hbWUgPSB0aGlzLnZpZXdO
YW1lOworCisgICAgaWYgKCF0aGlzLl9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSB7Cisg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gcmVtb3ZlIGZyb20gbm9uLXZpcnR1YWwgcGFy
ZW50IHZpZXcgaWYgdmlld05hbWUgd2FzIHNwZWNpZmllZAorICAgIGlmICh2aWV3TmFtZSAmJiBw
YXJlbnRWaWV3KSB7CisgICAgICBwYXJlbnRWaWV3LnNldCh2aWV3TmFtZSwgbnVsbCk7CisgICAg
fQorCisgICAgLy8gRGVzdHJveSBIVE1MYmFycyB0ZW1wbGF0ZQorICAgIGlmICh0aGlzLmxhc3RS
ZXN1bHQpIHsKKyAgICAgIHRoaXMubGFzdFJlc3VsdC5kZXN0cm95KCk7CisgICAgfQorCisgICAg
cmV0dXJuIHRoaXM7CisgIH0sIF9NaXhpbiRjcmVhdGUuaGFuZGxlRXZlbnQgPSBmdW5jdGlvbiAo
ZXZlbnROYW1lLCBldnQpIHsKKyAgICByZXR1cm4gdGhpcy5fY3VycmVudFN0YXRlLmhhbmRsZUV2
ZW50KHRoaXMsIGV2ZW50TmFtZSwgZXZ0KTsKKyAgfSwgX01peGluJGNyZWF0ZS5fcmVnaXN0ZXIg
PSBmdW5jdGlvbiAoKSB7CisgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ0F0dGVtcHRlZCB0
byByZWdpc3RlciBhIHZpZXcgd2l0aCBhbiBpZCBhbHJlYWR5IGluIHVzZTogJyArIHRoaXMuZWxl
bWVudElkLCAhdGhpcy5fdmlld1JlZ2lzdHJ5W3RoaXMuZWxlbWVudElkXSk7CisgICAgdGhpcy5f
dmlld1JlZ2lzdHJ5W3RoaXMuZWxlbWVudElkXSA9IHRoaXM7CisgIH0sIF9NaXhpbiRjcmVhdGUu
X3VucmVnaXN0ZXIgPSBmdW5jdGlvbiAoKSB7CisgICAgZGVsZXRlIHRoaXMuX3ZpZXdSZWdpc3Ry
eVt0aGlzLmVsZW1lbnRJZF07CisgIH0sIF9NaXhpbiRjcmVhdGUucmVnaXN0ZXJPYnNlcnZlciA9
IGZ1bmN0aW9uIChyb290LCBwYXRoLCB0YXJnZXQsIG9ic2VydmVyKSB7CisgICAgaWYgKCFvYnNl
cnZlciAmJiAnZnVuY3Rpb24nID09PSB0eXBlb2YgdGFyZ2V0KSB7CisgICAgICBvYnNlcnZlciA9
IHRhcmdldDsKKyAgICAgIHRhcmdldCA9IG51bGw7CisgICAgfQorCisgICAgaWYgKCFyb290IHx8
IHR5cGVvZiByb290ICE9PSAnb2JqZWN0JykgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IHZhciBzY2hlZHVsZWRPYnNlcnZlciA9IHRoaXMuX3dyYXBBc1NjaGVkdWxlZChvYnNlcnZlcik7
CisKKyAgICBfZW1iZXJNZXRhbE9ic2VydmVyLmFkZE9ic2VydmVyKHJvb3QsIHBhdGgsIHRhcmdl
dCwgc2NoZWR1bGVkT2JzZXJ2ZXIpOworCisgICAgdGhpcy5vbmUoJ3dpbGxDbGVhclJlbmRlcics
IGZ1bmN0aW9uICgpIHsKKyAgICAgIF9lbWJlck1ldGFsT2JzZXJ2ZXIucmVtb3ZlT2JzZXJ2ZXIo
cm9vdCwgcGF0aCwgdGFyZ2V0LCBzY2hlZHVsZWRPYnNlcnZlcik7CisgICAgfSk7CisgIH0sIF9N
aXhpbiRjcmVhdGUuX3dyYXBBc1NjaGVkdWxlZCA9IGZ1bmN0aW9uIChmbikgeworICAgIHZhciB2
aWV3ID0gdGhpczsKKyAgICB2YXIgc3RhdGVDaGVja2VkRm4gPSBmdW5jdGlvbiAoKSB7CisgICAg
ICB2aWV3Ll9jdXJyZW50U3RhdGUuaW52b2tlT2JzZXJ2ZXIodGhpcywgZm4pOworICAgIH07Cisg
ICAgdmFyIHNjaGVkdWxlZEZuID0gZnVuY3Rpb24gKCkgeworICAgICAgX2VtYmVyTWV0YWxSdW5f
bG9vcC5kZWZhdWx0LnNjaGVkdWxlT25jZSgncmVuZGVyJywgdGhpcywgc3RhdGVDaGVja2VkRm4p
OworICAgIH07CisgICAgcmV0dXJuIHNjaGVkdWxlZEZuOworICB9LCBfTWl4aW4kY3JlYXRlKSk7
Cit9KTsKKy8qCisgVGhpcyBpcyBhIHNwZWNpYWwgaG9vayBpbXBsZW1lbnRlZCBpbiBDb3JlT2Jq
ZWN0LCB0aGF0IGFsbG93cyBWaWV3cy9Db21wb25lbnRzCisgdG8gaGF2ZSBhIHdheSB0byBlbnN1
cmUgdGhhdCBgaW5pdGAgZmlyZXMgYmVmb3JlIGBkaWRJbml0QXR0cnNgIC8gYGRpZFJlY2VpdmVB
dHRyc2AKKyAoc28gdGhhdCBgdGhpcy5fc3VwZXJgIGluIGluaXQgZG9lcyBub3QgdHJpZ2dlciBg
ZGlkUmVjZWl2ZUF0dHJzYCBiZWZvcmUgdGhlIGNsYXNzZXMKKyBvd24gYGluaXRgIGlzIGZpbmlz
aGVkKS4KKyAgQG1ldGhvZCBfX3Bvc3RJbml0SW5pdGlhbGl6YXRpb24KKyBAcHJpdmF0ZQorICov
CisKKy8qKgorICBSZW1vdmVzIHRoZSB2aWV3IGZyb20gaXRzIGBwYXJlbnRWaWV3YCwgaWYgb25l
IGlzIGZvdW5kLiBPdGhlcndpc2UKKyAgZG9lcyBub3RoaW5nLgorICAgQG1ldGhvZCByZW1vdmVG
cm9tUGFyZW50CisgIEByZXR1cm4ge0VtYmVyLlZpZXd9IHJlY2VpdmVyCisgIEBwcml2YXRlCisq
LworCisvKioKKyAgWW91IG11c3QgY2FsbCBgZGVzdHJveWAgb24gYSB2aWV3IHRvIGRlc3Ryb3kg
dGhlIHZpZXcgKGFuZCBhbGwgb2YgaXRzCisgIGNoaWxkIHZpZXdzKS4gVGhpcyB3aWxsIHJlbW92
ZSB0aGUgdmlldyBmcm9tIGFueSBwYXJlbnQgbm9kZSwgdGhlbiBtYWtlCisgIHN1cmUgdGhhdCB0
aGUgRE9NIGVsZW1lbnQgbWFuYWdlZCBieSB0aGUgdmlldyBjYW4gYmUgcmVsZWFzZWQgYnkgdGhl
CisgIG1lbW9yeSBtYW5hZ2VyLgorICAgQG1ldGhvZCBkZXN0cm95CisgIEBwcml2YXRlCisqLwor
CisvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uCisvLyBFVkVOVCBIQU5ETElORworLy8KKworLyoqCisgIEhhbmRsZSBldmVudHMgZnJvbSBg
RW1iZXIuRXZlbnREaXNwYXRjaGVyYAorICAgQG1ldGhvZCBoYW5kbGVFdmVudAorICBAcGFyYW0g
ZXZlbnROYW1lIHtTdHJpbmd9CisgIEBwYXJhbSBldnQge0V2ZW50fQorICBAcHJpdmF0ZQorKi8K
KworLyoqCisgIFJlZ2lzdGVycyB0aGUgdmlldyBpbiB0aGUgdmlldyByZWdpc3RyeSwga2V5ZWQg
b24gdGhlIHZpZXcncyBgZWxlbWVudElkYC4KKyAgVGhpcyBpcyB1c2VkIGJ5IHRoZSBFdmVudERp
c3BhdGNoZXIgdG8gbG9jYXRlIHRoZSB2aWV3IGluIHJlc3BvbnNlIHRvCisgIGV2ZW50cy4KKyAg
IFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlIHRoZSB2aWV3IGhhcyBiZWVu
IGluc2VydGVkIGludG8gdGhlCisgIERPTS4KKyAgIEBtZXRob2QgX3JlZ2lzdGVyCisgIEBwcml2
YXRlCisqLworCisvKioKKyAgUmVtb3ZlcyB0aGUgdmlldyBmcm9tIHRoZSB2aWV3IHJlZ2lzdHJ5
LiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgd2hlbiB0aGUKKyAgdmlldyBpcyByZW1vdmVkIGZyb20g
RE9NLgorICAgQG1ldGhvZCBfdW5yZWdpc3RlcgorICBAcHJpdmF0ZQorKi8KK2VuaWZlZCgnZW1i
ZXItdmlld3MvbWl4aW5zL3ZpZXdfdGFyZ2V0X2FjdGlvbl9zdXBwb3J0JywgWydleHBvcnRzJywg
J2VtYmVyLW1ldGFsL21peGluJywgJ2VtYmVyLXJ1bnRpbWUvbWl4aW5zL3RhcmdldF9hY3Rpb25f
c3VwcG9ydCcsICdlbWJlci1tZXRhbC9hbGlhcyddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVy
TWV0YWxNaXhpbiwgX2VtYmVyUnVudGltZU1peGluc1RhcmdldF9hY3Rpb25fc3VwcG9ydCwgX2Vt
YmVyTWV0YWxBbGlhcykgeworICAndXNlIHN0cmljdCc7CisKKyAgLyoqCisgIGBFbWJlci5WaWV3
VGFyZ2V0QWN0aW9uU3VwcG9ydGAgaXMgYSBtaXhpbiB0aGF0IGNhbiBiZSBpbmNsdWRlZCBpbiBh
CisgIHZpZXcgY2xhc3MgdG8gYWRkIGEgYHRyaWdnZXJBY3Rpb25gIG1ldGhvZCB3aXRoIHNlbWFu
dGljcyBzaW1pbGFyIHRvCisgIHRoZSBIYW5kbGViYXJzIGB7e2FjdGlvbn19YCBoZWxwZXIuIEl0
IHByb3ZpZGVzIGludGVsbGlnZW50IGRlZmF1bHRzCisgIGZvciB0aGUgYWN0aW9uJ3MgdGFyZ2V0
OiB0aGUgdmlldydzIGNvbnRyb2xsZXI7IGFuZCB0aGUgY29udGV4dCB0aGF0IGlzCisgIHNlbnQg
d2l0aCB0aGUgYWN0aW9uOiB0aGUgdmlldydzIGNvbnRleHQuCisgIAorICBOb3RlOiBJbiBub3Jt
YWwgRW1iZXIgdXNhZ2UsIHRoZSBge3thY3Rpb259fWAgaGVscGVyIGlzIHVzdWFsbHkgdGhlIGJl
c3QKKyAgY2hvaWNlLiBUaGlzIG1peGluIGlzIG1vc3Qgb2Z0ZW4gdXNlZnVsIHdoZW4geW91IGFy
ZSBkb2luZyBtb3JlIGNvbXBsZXgKKyAgZXZlbnQgaGFuZGxpbmcgaW4gY3VzdG9tIFZpZXcgc3Vi
Y2xhc3Nlcy4KKyAgCisgIEZvciBleGFtcGxlOgorICAKKyAgYGBgamF2YXNjcmlwdAorICBBcHAu
U2F2ZUJ1dHRvblZpZXcgPSBFbWJlci5WaWV3LmV4dGVuZChFbWJlci5WaWV3VGFyZ2V0QWN0aW9u
U3VwcG9ydCwgeworICAgIGFjdGlvbjogJ3NhdmUnLAorICAgIGNsaWNrOiBmdW5jdGlvbigpIHsK
KyAgICAgIHRoaXMudHJpZ2dlckFjdGlvbigpOyAvLyBTZW5kcyB0aGUgYHNhdmVgIGFjdGlvbiwg
YWxvbmcgd2l0aCB0aGUgY3VycmVudCBjb250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gdG8gdGhlIGN1cnJlbnQgY29udHJvbGxlcgorICAgIH0KKyAgfSk7CisgIGBgYAorICAK
KyAgVGhlIGBhY3Rpb25gIGNhbiBiZSBwcm92aWRlZCBhcyBwcm9wZXJ0aWVzIG9mIGFuIG9wdGlv
bmFsIG9iamVjdCBhcmd1bWVudAorICB0byBgdHJpZ2dlckFjdGlvbmAgYXMgd2VsbC4KKyAgCisg
IGBgYGphdmFzY3JpcHQKKyAgQXBwLlNhdmVCdXR0b25WaWV3ID0gRW1iZXIuVmlldy5leHRlbmQo
RW1iZXIuVmlld1RhcmdldEFjdGlvblN1cHBvcnQsIHsKKyAgICBjbGljazogZnVuY3Rpb24oKSB7
CisgICAgICB0aGlzLnRyaWdnZXJBY3Rpb24oeworICAgICAgICBhY3Rpb246ICdzYXZlJworICAg
ICAgfSk7IC8vIFNlbmRzIHRoZSBgc2F2ZWAgYWN0aW9uLCBhbG9uZyB3aXRoIHRoZSBjdXJyZW50
IGNvbnRleHQKKyAgICAgICAgICAvLyB0byB0aGUgY3VycmVudCBjb250cm9sbGVyCisgICAgfQor
ICB9KTsKKyAgYGBgCisgIAorICBAY2xhc3MgVmlld1RhcmdldEFjdGlvblN1cHBvcnQKKyAgQG5h
bWVzcGFjZSBFbWJlcgorICBAZXh0ZW5kcyBFbWJlci5UYXJnZXRBY3Rpb25TdXBwb3J0CisgIEBw
cml2YXRlCisgICovCisgIGV4cG9ydHMuZGVmYXVsdCA9IF9lbWJlck1ldGFsTWl4aW4uTWl4aW4u
Y3JlYXRlKF9lbWJlclJ1bnRpbWVNaXhpbnNUYXJnZXRfYWN0aW9uX3N1cHBvcnQuZGVmYXVsdCwg
eworICAgIC8qKgorICAgICBAcHJvcGVydHkgdGFyZ2V0CisgICAgIEBwcml2YXRlCisgICAgKi8K
KyAgICB0YXJnZXQ6IF9lbWJlck1ldGFsQWxpYXMuZGVmYXVsdCgnY29udHJvbGxlcicpLAorICAg
IC8qKgorICAgICBAcHJvcGVydHkgYWN0aW9uQ29udGV4dAorICAgICBAcHJpdmF0ZQorICAgICov
CisgICAgYWN0aW9uQ29udGV4dDogX2VtYmVyTWV0YWxBbGlhcy5kZWZhdWx0KCdjb250ZXh0JykK
KyAgfSk7Cit9KTsKK2VuaWZlZCgnZW1iZXItdmlld3MvbWl4aW5zL3Zpc2liaWxpdHlfc3VwcG9y
dCcsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9taXhpbicsICdlbWJlci1tZXRhbC9wcm9wZXJ0
eV9nZXQnLCAnZW1iZXItbWV0YWwvcnVuX2xvb3AnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJl
ck1ldGFsTWl4aW4sIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LCBfZW1iZXJNZXRhbFJ1bl9sb29w
KSB7CisgIC8qKgorICAgQG1vZHVsZSBlbWJlcgorICAgQHN1Ym1vZHVsZSBlbWJlci12aWV3cwor
ICAqLworICAndXNlIHN0cmljdCc7CisKKyAgZnVuY3Rpb24gSygpIHsKKyAgICByZXR1cm4gdGhp
czsKKyAgfQorCisgIC8qKgorICAgQGNsYXNzIFZpc2liaWxpdHlTdXBwb3J0CisgICBAbmFtZXNw
YWNlIEVtYmVyCisgICBAcHVibGljCisgICovCisgIHZhciBWaXNpYmlsaXR5U3VwcG9ydCA9IF9l
bWJlck1ldGFsTWl4aW4uTWl4aW4uY3JlYXRlKHsKKyAgICAvKioKKyAgICAgIElmIGBmYWxzZWAs
IHRoZSB2aWV3IHdpbGwgYXBwZWFyIGhpZGRlbiBpbiBET00uCisgICAgICAgQHByb3BlcnR5IGlz
VmlzaWJsZQorICAgICAgQHR5cGUgQm9vbGVhbgorICAgICAgQGRlZmF1bHQgbnVsbAorICAgICAg
QHB1YmxpYworICAgICovCisgICAgaXNWaXNpYmxlOiB0cnVlLAorCisgICAgYmVjYW1lVmlzaWJs
ZTogSywKKyAgICBiZWNhbWVIaWRkZW46IEssCisKKyAgICAvKioKKyAgICAgIFdoZW4gdGhlIHZp
ZXcncyBgaXNWaXNpYmxlYCBwcm9wZXJ0eSBjaGFuZ2VzLCB0b2dnbGUgdGhlIHZpc2liaWxpdHkK
KyAgICAgIGVsZW1lbnQgb2YgdGhlIGFjdHVhbCBET00gZWxlbWVudC4KKyAgICAgICBAbWV0aG9k
IF9pc1Zpc2libGVEaWRDaGFuZ2UKKyAgICAgIEBwcml2YXRlCisgICAgKi8KKyAgICBfaXNWaXNp
YmxlRGlkQ2hhbmdlOiBfZW1iZXJNZXRhbE1peGluLm9ic2VydmVyKCdpc1Zpc2libGUnLCBmdW5j
dGlvbiAoKSB7CisgICAgICBpZiAodGhpcy5faXNWaXNpYmxlID09PSBfZW1iZXJNZXRhbFByb3Bl
cnR5X2dldC5nZXQodGhpcywgJ2lzVmlzaWJsZScpKSB7CisgICAgICAgIHJldHVybjsKKyAgICAg
IH0KKyAgICAgIF9lbWJlck1ldGFsUnVuX2xvb3AuZGVmYXVsdC5zY2hlZHVsZU9uY2UoJ3JlbmRl
cicsIHRoaXMsIHRoaXMuX3RvZ2dsZVZpc2liaWxpdHkpOworICAgIH0pLAorCisgICAgX3RvZ2ds
ZVZpc2liaWxpdHk6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciAkZWwgPSB0aGlzLiQoKTsKKyAg
ICAgIHZhciBpc1Zpc2libGUgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ2lz
VmlzaWJsZScpOworCisgICAgICBpZiAodGhpcy5faXNWaXNpYmxlID09PSBpc1Zpc2libGUpIHsK
KyAgICAgICAgcmV0dXJuOworICAgICAgfQorCisgICAgICAvLyBJdCdzIGltcG9ydGFudCB0byBr
ZWVwIHRoZXNlIGluIHN5bmMsIGV2ZW4gaWYgd2UgZG9uJ3QgeWV0IGhhdmUKKyAgICAgIC8vIGFu
IGVsZW1lbnQgaW4gdGhlIERPTSB0byBtYW5pcHVsYXRlOgorICAgICAgdGhpcy5faXNWaXNpYmxl
ID0gaXNWaXNpYmxlOworCisgICAgICBpZiAoISRlbCkgeworICAgICAgICByZXR1cm47CisgICAg
ICB9CisKKyAgICAgICRlbC50b2dnbGUoaXNWaXNpYmxlKTsKKworICAgICAgaWYgKHRoaXMuX2lz
QW5jZXN0b3JIaWRkZW4oKSkgeworICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICAgIGlm
IChpc1Zpc2libGUpIHsKKyAgICAgICAgdGhpcy5fbm90aWZ5QmVjYW1lVmlzaWJsZSgpOworICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgdGhpcy5fbm90aWZ5QmVjYW1lSGlkZGVuKCk7CisgICAgICB9
CisgICAgfSwKKworICAgIF9ub3RpZnlCZWNhbWVWaXNpYmxlOiBmdW5jdGlvbiAoKSB7CisgICAg
ICB0aGlzLnRyaWdnZXIoJ2JlY2FtZVZpc2libGUnKTsKKworICAgICAgdGhpcy5mb3JFYWNoQ2hp
bGRWaWV3KGZ1bmN0aW9uICh2aWV3KSB7CisgICAgICAgIHZhciBpc1Zpc2libGUgPSBfZW1iZXJN
ZXRhbFByb3BlcnR5X2dldC5nZXQodmlldywgJ2lzVmlzaWJsZScpOworCisgICAgICAgIGlmIChp
c1Zpc2libGUgfHwgaXNWaXNpYmxlID09PSBudWxsKSB7CisgICAgICAgICAgdmlldy5fbm90aWZ5
QmVjYW1lVmlzaWJsZSgpOworICAgICAgICB9CisgICAgICB9KTsKKyAgICB9LAorCisgICAgX25v
dGlmeUJlY2FtZUhpZGRlbjogZnVuY3Rpb24gKCkgeworICAgICAgdGhpcy50cmlnZ2VyKCdiZWNh
bWVIaWRkZW4nKTsKKyAgICAgIHRoaXMuZm9yRWFjaENoaWxkVmlldyhmdW5jdGlvbiAodmlldykg
eworICAgICAgICB2YXIgaXNWaXNpYmxlID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHZp
ZXcsICdpc1Zpc2libGUnKTsKKworICAgICAgICBpZiAoaXNWaXNpYmxlIHx8IGlzVmlzaWJsZSA9
PT0gbnVsbCkgeworICAgICAgICAgIHZpZXcuX25vdGlmeUJlY2FtZUhpZGRlbigpOworICAgICAg
ICB9CisgICAgICB9KTsKKyAgICB9LAorCisgICAgX2lzQW5jZXN0b3JIaWRkZW46IGZ1bmN0aW9u
ICgpIHsKKyAgICAgIHZhciBwYXJlbnQgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhp
cywgJ3BhcmVudFZpZXcnKTsKKworICAgICAgd2hpbGUgKHBhcmVudCkgeworICAgICAgICBpZiAo
X2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHBhcmVudCwgJ2lzVmlzaWJsZScpID09PSBmYWxz
ZSkgeworICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcGFyZW50
ID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHBhcmVudCwgJ3BhcmVudFZpZXcnKTsKKyAg
ICAgIH0KKworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfSk7CisKKyAgZXhwb3J0cy5k
ZWZhdWx0ID0gVmlzaWJpbGl0eVN1cHBvcnQ7Cit9KTsKK2VuaWZlZCgnZW1iZXItdmlld3Mvc3Ry
ZWFtcy9jbGFzc19uYW1lX2JpbmRpbmcnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvZGVidWcn
LCAnZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0JywgJ2VtYmVyLW1ldGFsL3V0aWxzJywgJ2VtYmVy
LW1ldGFsL3N0cmVhbXMvdXRpbHMnLCAnZW1iZXItcnVudGltZS9zeXN0ZW0vc3RyaW5nJ10sIGZ1
bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJNZXRhbFByb3BlcnR5X2dl
dCwgX2VtYmVyTWV0YWxVdGlscywgX2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMsIF9lbWJlclJ1bnRp
bWVTeXN0ZW1TdHJpbmcpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIGV4cG9ydHMucGFyc2VQcm9w
ZXJ0eVBhdGggPSBwYXJzZVByb3BlcnR5UGF0aDsKKyAgZXhwb3J0cy5jbGFzc1N0cmluZ0ZvclZh
bHVlID0gY2xhc3NTdHJpbmdGb3JWYWx1ZTsKKyAgZXhwb3J0cy5zdHJlYW1pZnlDbGFzc05hbWVC
aW5kaW5nID0gc3RyZWFtaWZ5Q2xhc3NOYW1lQmluZGluZzsKKworICAvKioKKyAgICBQYXJzZSBh
IHBhdGggYW5kIHJldHVybiBhbiBvYmplY3Qgd2hpY2ggaG9sZHMgdGhlIHBhcnNlZCBwcm9wZXJ0
aWVzLgorICAKKyAgICBGb3IgZXhhbXBsZSBhIHBhdGggbGlrZSAiY29udGVudC5pc0VuYWJsZWQ6
ZW5hYmxlZDpkaXNhYmxlZCIgd2lsbCByZXR1cm4gdGhlCisgICAgZm9sbG93aW5nIG9iamVjdDoK
KyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIHsKKyAgICAgIHBhdGg6ICJjb250ZW50LmlzRW5h
YmxlZCIsCisgICAgICBjbGFzc05hbWU6ICJlbmFibGVkIiwKKyAgICAgIGZhbHN5Q2xhc3NOYW1l
OiAiZGlzYWJsZWQiLAorICAgICAgY2xhc3NOYW1lczogIjplbmFibGVkOmRpc2FibGVkIgorICAg
IH0KKyAgICBgYGAKKyAgCisgICAgQG1ldGhvZCBwYXJzZVByb3BlcnR5UGF0aAorICAgIEBzdGF0
aWMKKyAgICBAcHJpdmF0ZQorICAqLworCisgIGZ1bmN0aW9uIHBhcnNlUHJvcGVydHlQYXRoKHBh
dGgpIHsKKyAgICB2YXIgc3BsaXQgPSBwYXRoLnNwbGl0KCc6Jyk7CisgICAgdmFyIHByb3BlcnR5
UGF0aCA9IHNwbGl0WzBdOworICAgIHZhciBjbGFzc05hbWVzID0gJyc7CisgICAgdmFyIGNsYXNz
TmFtZSwgZmFsc3lDbGFzc05hbWU7CisKKyAgICAvLyBjaGVjayBpZiB0aGUgcHJvcGVydHkgaXMg
ZGVmaW5lZCBhcyBwcm9wOmNsYXNzIG9yIHByb3A6dHJ1ZUNsYXNzOmZhbHNlQ2xhc3MKKyAgICBp
ZiAoc3BsaXQubGVuZ3RoID4gMSkgeworICAgICAgY2xhc3NOYW1lID0gc3BsaXRbMV07CisgICAg
ICBpZiAoc3BsaXQubGVuZ3RoID09PSAzKSB7CisgICAgICAgIGZhbHN5Q2xhc3NOYW1lID0gc3Bs
aXRbMl07CisgICAgICB9CisKKyAgICAgIGNsYXNzTmFtZXMgPSAnOicgKyBjbGFzc05hbWU7Cisg
ICAgICBpZiAoZmFsc3lDbGFzc05hbWUpIHsKKyAgICAgICAgY2xhc3NOYW1lcyArPSAnOicgKyBm
YWxzeUNsYXNzTmFtZTsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4geworICAgICAgcGF0
aDogcHJvcGVydHlQYXRoLAorICAgICAgY2xhc3NOYW1lczogY2xhc3NOYW1lcywKKyAgICAgIGNs
YXNzTmFtZTogY2xhc3NOYW1lID09PSAnJyA/IHVuZGVmaW5lZCA6IGNsYXNzTmFtZSwKKyAgICAg
IGZhbHN5Q2xhc3NOYW1lOiBmYWxzeUNsYXNzTmFtZQorICAgIH07CisgIH0KKworICAvKioKKyAg
ICBHZXQgdGhlIGNsYXNzIG5hbWUgZm9yIGEgZ2l2ZW4gdmFsdWUsIGJhc2VkIG9uIHRoZSBwYXRo
LCBvcHRpb25hbAorICAgIGBjbGFzc05hbWVgIGFuZCBvcHRpb25hbCBgZmFsc3lDbGFzc05hbWVg
LgorICAKKyAgICAtIGlmIGEgYGNsYXNzTmFtZWAgb3IgYGZhbHN5Q2xhc3NOYW1lYCBoYXMgYmVl
biBzcGVjaWZpZWQ6CisgICAgICAtIGlmIHRoZSB2YWx1ZSBpcyB0cnV0aHkgYW5kIGBjbGFzc05h
bWVgIGhhcyBiZWVuIHNwZWNpZmllZCwKKyAgICAgICAgYGNsYXNzTmFtZWAgaXMgcmV0dXJuZWQK
KyAgICAgIC0gaWYgdGhlIHZhbHVlIGlzIGZhbHN5IGFuZCBgZmFsc3lDbGFzc05hbWVgIGhhcyBi
ZWVuIHNwZWNpZmllZCwKKyAgICAgICAgYGZhbHN5Q2xhc3NOYW1lYCBpcyByZXR1cm5lZAorICAg
ICAgLSBvdGhlcndpc2UgYG51bGxgIGlzIHJldHVybmVkCisgICAgLSBpZiB0aGUgdmFsdWUgaXMg
YHRydWVgLCB0aGUgZGFzaGVyaXplZCBsYXN0IHBhcnQgb2YgdGhlIHN1cHBsaWVkIHBhdGgKKyAg
ICAgIGlzIHJldHVybmVkCisgICAgLSBpZiB0aGUgdmFsdWUgaXMgbm90IGBmYWxzZWAsIGB1bmRl
ZmluZWRgIG9yIGBudWxsYCwgdGhlIGB2YWx1ZWAKKyAgICAgIGlzIHJldHVybmVkCisgICAgLSBp
ZiBub25lIG9mIHRoZSBhYm92ZSBydWxlcyBhcHBseSwgYG51bGxgIGlzIHJldHVybmVkCisgIAor
ICAgIEBtZXRob2QgY2xhc3NTdHJpbmdGb3JWYWx1ZQorICAgIEBwYXJhbSBwYXRoCisgICAgQHBh
cmFtIHZhbAorICAgIEBwYXJhbSBjbGFzc05hbWUKKyAgICBAcGFyYW0gZmFsc3lDbGFzc05hbWUK
KyAgICBAc3RhdGljCisgICAgQHByaXZhdGUKKyAgKi8KKworICBmdW5jdGlvbiBjbGFzc1N0cmlu
Z0ZvclZhbHVlKHBhdGgsIHZhbCwgY2xhc3NOYW1lLCBmYWxzeUNsYXNzTmFtZSkgeworICAgIGlm
IChfZW1iZXJNZXRhbFV0aWxzLmlzQXJyYXkodmFsKSkgeworICAgICAgdmFsID0gX2VtYmVyTWV0
YWxQcm9wZXJ0eV9nZXQuZ2V0KHZhbCwgJ2xlbmd0aCcpICE9PSAwOworICAgIH0KKworICAgIC8v
IFdoZW4gdXNpbmcgdGhlIGNvbG9uIHN5bnRheCwgZXZhbHVhdGUgdGhlIHRydXRoaW5lc3Mgb3Ig
ZmFsc2luZXNzCisgICAgLy8gb2YgdGhlIHZhbHVlIHRvIGRldGVybWluZSB3aGljaCBjbGFzc05h
bWUgdG8gcmV0dXJuCisgICAgaWYgKGNsYXNzTmFtZSB8fCBmYWxzeUNsYXNzTmFtZSkgeworICAg
ICAgaWYgKGNsYXNzTmFtZSAmJiAhIXZhbCkgeworICAgICAgICByZXR1cm4gY2xhc3NOYW1lOwor
ICAgICAgfSBlbHNlIGlmIChmYWxzeUNsYXNzTmFtZSAmJiAhdmFsKSB7CisgICAgICAgIHJldHVy
biBmYWxzeUNsYXNzTmFtZTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBudWxsOwor
ICAgICAgfQorCisgICAgICAvLyBJZiB2YWx1ZSBpcyBhIEJvb2xlYW4gYW5kIHRydWUsIHJldHVy
biB0aGUgZGFzaGVyaXplZCBwcm9wZXJ0eQorICAgICAgLy8gbmFtZS4KKyAgICB9IGVsc2UgaWYg
KHZhbCA9PT0gdHJ1ZSkgeworICAgICAgICAvLyBOb3JtYWxpemUgcHJvcGVydHkgcGF0aCB0byBi
ZSBzdWl0YWJsZSBmb3IgdXNlCisgICAgICAgIC8vIGFzIGEgY2xhc3MgbmFtZS4gRm9yIGV4YXBs
ZSwgY29udGVudC5mb28uYmFyQmF6CisgICAgICAgIC8vIGJlY29tZXMgYmFyLWJhei4KKyAgICAg
ICAgdmFyIHBhcnRzID0gcGF0aC5zcGxpdCgnLicpOworICAgICAgICByZXR1cm4gX2VtYmVyUnVu
dGltZVN5c3RlbVN0cmluZy5kYXNoZXJpemUocGFydHNbcGFydHMubGVuZ3RoIC0gMV0pOworCisg
ICAgICAgIC8vIElmIHRoZSB2YWx1ZSBpcyBub3QgZmFsc2UsIHVuZGVmaW5lZCwgb3IgbnVsbCwg
cmV0dXJuIHRoZSBjdXJyZW50CisgICAgICAgIC8vIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4KKyAg
ICAgIH0gZWxzZSBpZiAodmFsICE9PSBmYWxzZSAmJiB2YWwgIT0gbnVsbCkgeworICAgICAgICAg
IHJldHVybiB2YWw7CisKKyAgICAgICAgICAvLyBOb3RoaW5nIHRvIGRpc3BsYXkuIFJldHVybiBu
dWxsIHNvIHRoYXQgdGhlIG9sZCBjbGFzcyBpcyByZW1vdmVkCisgICAgICAgICAgLy8gYnV0IG5v
IG5ldyBjbGFzcyBpcyBhZGRlZC4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVy
biBudWxsOworICAgICAgICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIHN0cmVhbWlmeUNsYXNzTmFt
ZUJpbmRpbmcodmlldywgY2xhc3NOYW1lQmluZGluZywgcHJlZml4KSB7CisgICAgcHJlZml4ID0g
cHJlZml4IHx8ICcnOworICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdjbGFzc05hbWVCaW5k
aW5ncyBtdXN0IG5vdCBoYXZlIHNwYWNlcyBpbiB0aGVtLiBNdWx0aXBsZSBjbGFzcyBuYW1lIGJp
bmRpbmdzIGNhbiBiZSBwcm92aWRlZCBhcyBlbGVtZW50cyBvZiBhbiBhcnJheSwgZS5nLiBbXCdm
b29cJywgXCc6YmFyXCddJywgY2xhc3NOYW1lQmluZGluZy5pbmRleE9mKCcgJykgPT09IC0xKTsK
KyAgICB2YXIgcGFyc2VkUGF0aCA9IHBhcnNlUHJvcGVydHlQYXRoKGNsYXNzTmFtZUJpbmRpbmcp
OworICAgIGlmIChwYXJzZWRQYXRoLnBhdGggPT09ICcnKSB7CisgICAgICByZXR1cm4gY2xhc3NT
dHJpbmdGb3JWYWx1ZShwYXJzZWRQYXRoLnBhdGgsIHRydWUsIHBhcnNlZFBhdGguY2xhc3NOYW1l
LCBwYXJzZWRQYXRoLmZhbHN5Q2xhc3NOYW1lKTsKKyAgICB9IGVsc2UgeworICAgICAgdmFyIHBh
dGhWYWx1ZSA9IHZpZXcuZ2V0U3RyZWFtKHByZWZpeCArIHBhcnNlZFBhdGgucGF0aCk7CisgICAg
ICByZXR1cm4gX2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMuY2hhaW4ocGF0aFZhbHVlLCBmdW5jdGlv
biAoKSB7CisgICAgICAgIHJldHVybiBjbGFzc1N0cmluZ0ZvclZhbHVlKHBhcnNlZFBhdGgucGF0
aCwgX2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMucmVhZChwYXRoVmFsdWUpLCBwYXJzZWRQYXRoLmNs
YXNzTmFtZSwgcGFyc2VkUGF0aC5mYWxzeUNsYXNzTmFtZSk7CisgICAgICB9KTsKKyAgICB9Cisg
IH0KK30pOworZW5pZmVkKCdlbWJlci12aWV3cy9zdHJlYW1zL3Nob3VsZF9kaXNwbGF5JywgWydl
eHBvcnRzJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCcs
ICdlbWJlci1ydW50aW1lL3V0aWxzJywgJ2VtYmVyLW1ldGFsL3N0cmVhbXMvc3RyZWFtJywgJ2Vt
YmVyLW1ldGFsL3N0cmVhbXMvdXRpbHMnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFs
RGVidWcsIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LCBfZW1iZXJSdW50aW1lVXRpbHMsIF9lbWJl
ck1ldGFsU3RyZWFtc1N0cmVhbSwgX2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMpIHsKKyAgJ3VzZSBz
dHJpY3QnOworCisgIGV4cG9ydHMuZGVmYXVsdCA9IHNob3VsZERpc3BsYXk7CisKKyAgdmFyIFNo
b3VsZERpc3BsYXlTdHJlYW0gPSBfZW1iZXJNZXRhbFN0cmVhbXNTdHJlYW0uZGVmYXVsdC5leHRl
bmQoeworICAgIGluaXQ6IGZ1bmN0aW9uIChwcmVkaWNhdGUpIHsKKyAgICAgIF9lbWJlck1ldGFs
RGVidWcuYXNzZXJ0KCdTaG91bGREaXNwbGF5U3RyZWFtIGVycm9yOiBwcmVkaWNhdGUgbXVzdCBi
ZSBhIHN0cmVhbScsIF9lbWJlck1ldGFsU3RyZWFtc1V0aWxzLmlzU3RyZWFtKHByZWRpY2F0ZSkp
OworCisgICAgICB2YXIgaXNUcnV0aHkgPSBwcmVkaWNhdGUuZ2V0KCdpc1RydXRoeScpOworCisg
ICAgICB0aGlzLmluaXQoKTsKKyAgICAgIHRoaXMucHJlZGljYXRlID0gcHJlZGljYXRlOworICAg
ICAgdGhpcy5pc1RydXRoeSA9IGlzVHJ1dGh5OworICAgICAgdGhpcy5sZW5ndGhEZXAgPSBudWxs
OworCisgICAgICB0aGlzLmFkZERlcGVuZGVuY3kocHJlZGljYXRlKTsKKyAgICAgIHRoaXMuYWRk
RGVwZW5kZW5jeShpc1RydXRoeSk7CisgICAgfSwKKworICAgIGNvbXB1dGU6IGZ1bmN0aW9uICgp
IHsKKyAgICAgIHZhciB0cnV0aHkgPSBfZW1iZXJNZXRhbFN0cmVhbXNVdGlscy5yZWFkKHRoaXMu
aXNUcnV0aHkpOworCisgICAgICBpZiAodHlwZW9mIHRydXRoeSA9PT0gJ2Jvb2xlYW4nKSB7Cisg
ICAgICAgIHJldHVybiB0cnV0aHk7CisgICAgICB9CisKKyAgICAgIGlmICh0aGlzLmxlbmd0aERl
cCkgeworICAgICAgICByZXR1cm4gdGhpcy5sZW5ndGhEZXAuZ2V0VmFsdWUoKSAhPT0gMDsKKyAg
ICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiAhIV9lbWJlck1ldGFsU3RyZWFtc1V0aWxzLnJl
YWQodGhpcy5wcmVkaWNhdGUpOworICAgICAgfQorICAgIH0sCisKKyAgICByZXZhbGlkYXRlOiBm
dW5jdGlvbiAoKSB7CisgICAgICBpZiAoX2VtYmVyUnVudGltZVV0aWxzLmlzQXJyYXkoX2VtYmVy
TWV0YWxTdHJlYW1zVXRpbHMucmVhZCh0aGlzLnByZWRpY2F0ZSkpKSB7CisgICAgICAgIGlmICgh
dGhpcy5sZW5ndGhEZXApIHsKKyAgICAgICAgICB0aGlzLmxlbmd0aERlcCA9IHRoaXMuYWRkTXV0
YWJsZURlcGVuZGVuY3kodGhpcy5wcmVkaWNhdGUuZ2V0KCdsZW5ndGgnKSk7CisgICAgICAgIH0K
KyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmICh0aGlzLmxlbmd0aERlcCkgeworICAgICAgICAg
IHRoaXMubGVuZ3RoRGVwLmRlc3Ryb3koKTsKKyAgICAgICAgICB0aGlzLmxlbmd0aERlcCA9IG51
bGw7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0pOworCisgIGZ1bmN0aW9uIHNob3Vs
ZERpc3BsYXkocHJlZGljYXRlKSB7CisgICAgaWYgKF9lbWJlck1ldGFsU3RyZWFtc1V0aWxzLmlz
U3RyZWFtKHByZWRpY2F0ZSkpIHsKKyAgICAgIHJldHVybiBuZXcgU2hvdWxkRGlzcGxheVN0cmVh
bShwcmVkaWNhdGUpOworICAgIH0KKworICAgIHZhciB0eXBlID0gdHlwZW9mIHByZWRpY2F0ZTsK
KworICAgIGlmICh0eXBlID09PSAnYm9vbGVhbicpIHsKKyAgICAgIHJldHVybiBwcmVkaWNhdGU7
CisgICAgfQorCisgICAgaWYgKHR5cGUgJiYgdHlwZSA9PT0gJ29iamVjdCcgJiYgcHJlZGljYXRl
ICE9PSBudWxsKSB7CisgICAgICB2YXIgaXNUcnV0aHkgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dl
dC5nZXQocHJlZGljYXRlLCAnaXNUcnV0aHknKTsKKyAgICAgIGlmICh0eXBlb2YgaXNUcnV0aHkg
PT09ICdib29sZWFuJykgeworICAgICAgICByZXR1cm4gaXNUcnV0aHk7CisgICAgICB9CisgICAg
fQorCisgICAgaWYgKF9lbWJlclJ1bnRpbWVVdGlscy5pc0FycmF5KHByZWRpY2F0ZSkpIHsKKyAg
ICAgIHJldHVybiBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQocHJlZGljYXRlLCAnbGVuZ3Ro
JykgIT09IDA7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiAhIXByZWRpY2F0ZTsKKyAgICB9
CisgIH0KK30pOworZW5pZmVkKCdlbWJlci12aWV3cy9zdHJlYW1zL3V0aWxzJywgWydleHBvcnRz
JywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCcsICdlbWJl
ci1tZXRhbC9zdHJlYW1zL3V0aWxzJywgJ2VtYmVyLXJ1bnRpbWUvbWl4aW5zL2NvbnRyb2xsZXIn
XSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsRGVidWcsIF9lbWJlck1ldGFsUHJvcGVy
dHlfZ2V0LCBfZW1iZXJNZXRhbFN0cmVhbXNVdGlscywgX2VtYmVyUnVudGltZU1peGluc0NvbnRy
b2xsZXIpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIGV4cG9ydHMucmVhZFZpZXdGYWN0b3J5ID0g
cmVhZFZpZXdGYWN0b3J5OworICBleHBvcnRzLnJlYWRDb21wb25lbnRGYWN0b3J5ID0gcmVhZENv
bXBvbmVudEZhY3Rvcnk7CisgIGV4cG9ydHMucmVhZFVud3JhcHBlZE1vZGVsID0gcmVhZFVud3Jh
cHBlZE1vZGVsOworCisgIGZ1bmN0aW9uIHJlYWRWaWV3RmFjdG9yeShvYmplY3QsIG93bmVyKSB7
CisgICAgdmFyIHZhbHVlID0gX2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMucmVhZChvYmplY3QpOwor
ICAgIHZhciB2aWV3Q2xhc3M7CisKKyAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykg
eworICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1ZpZXcgcmVxdWlyZXMgYW4gb3duZXIg
dG8gcmVzb2x2ZSB2aWV3cyBub3QgcGFzc2VkIGluIHRocm91Z2ggdGhlIGNvbnRleHQnLCAhIW93
bmVyKTsKKyAgICAgIHZpZXdDbGFzcyA9IG93bmVyLl9sb29rdXBGYWN0b3J5KCd2aWV3OicgKyB2
YWx1ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHZpZXdDbGFzcyA9IHZhbHVlOworICAgIH0KKwor
ICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KHZhbHVlICsgJyBtdXN0IGJlIGEgc3ViY2xhc3Mg
b3IgYW4gaW5zdGFuY2Ugb2YgRW1iZXIuVmlldywgbm90ICcgKyB2aWV3Q2xhc3MsIChmdW5jdGlv
biAodmlld0NsYXNzKSB7CisgICAgICByZXR1cm4gdmlld0NsYXNzICYmICh2aWV3Q2xhc3MuaXNW
aWV3RmFjdG9yeSB8fCB2aWV3Q2xhc3MuaXNWaWV3IHx8IHZpZXdDbGFzcy5pc0NvbXBvbmVudEZh
Y3RvcnkgfHwgdmlld0NsYXNzLmlzQ29tcG9uZW50KTsKKyAgICB9KSh2aWV3Q2xhc3MpKTsKKwor
ICAgIHJldHVybiB2aWV3Q2xhc3M7CisgIH0KKworICBmdW5jdGlvbiByZWFkQ29tcG9uZW50RmFj
dG9yeShuYW1lT3JTdHJlYW0sIG93bmVyKSB7CisgICAgdmFyIG5hbWUgPSBfZW1iZXJNZXRhbFN0
cmVhbXNVdGlscy5yZWFkKG5hbWVPclN0cmVhbSk7CisgICAgdmFyIGNvbXBvbmVudExvb2t1cCA9
IG93bmVyLmxvb2t1cCgnY29tcG9uZW50LWxvb2t1cDptYWluJyk7CisgICAgX2VtYmVyTWV0YWxE
ZWJ1Zy5hc3NlcnQoJ0NvdWxkIG5vdCBmaW5kIFwnY29tcG9uZW50LWxvb2t1cDptYWluXCcgb24g
dGhlIHByb3ZpZGVkIGNvbnRhaW5lciwgJyArICd3aGljaCBpcyBuZWNlc3NhcnkgZm9yIHBlcmZv
cm1pbmcgY29tcG9uZW50IGxvb2t1cHMnLCBjb21wb25lbnRMb29rdXApOworCisgICAgcmV0dXJu
IGNvbXBvbmVudExvb2t1cC5sb29rdXBGYWN0b3J5KG5hbWUsIG93bmVyKTsKKyAgfQorCisgIGZ1
bmN0aW9uIHJlYWRVbndyYXBwZWRNb2RlbChvYmplY3QpIHsKKyAgICBpZiAoX2VtYmVyTWV0YWxT
dHJlYW1zVXRpbHMuaXNTdHJlYW0ob2JqZWN0KSkgeworICAgICAgdmFyIHJlc3VsdCA9IG9iamVj
dC52YWx1ZSgpOworCisgICAgICAvLyBJZiB0aGUgcGF0aCBpcyBleGFjdGx5IGBjb250cm9sbGVy
YCB0aGVuIHdlIGRvbid0IHVud3JhcCBpdC4KKyAgICAgIGlmIChvYmplY3QubGFiZWwgIT09ICdj
b250cm9sbGVyJykgeworICAgICAgICB3aGlsZSAoX2VtYmVyUnVudGltZU1peGluc0NvbnRyb2xs
ZXIuZGVmYXVsdC5kZXRlY3QocmVzdWx0KSkgeworICAgICAgICAgIHJlc3VsdCA9IF9lbWJlck1l
dGFsUHJvcGVydHlfZ2V0LmdldChyZXN1bHQsICdtb2RlbCcpOworICAgICAgICB9CisgICAgICB9
CisKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBvYmpl
Y3Q7CisgICAgfQorICB9Cit9KTsKK2VuaWZlZCgiZW1iZXItdmlld3Mvc3lzdGVtL2FjdGlvbl9t
YW5hZ2VyIiwgWyJleHBvcnRzIl0sIGZ1bmN0aW9uIChleHBvcnRzKSB7CisgIC8qKgorICBAbW9k
dWxlIGVtYmVyCisgIEBzdWJtb2R1bGUgZW1iZXItdmlld3MKKyAgKi8KKworICAidXNlIHN0cmlj
dCI7CisKKyAgZnVuY3Rpb24gQWN0aW9uTWFuYWdlcigpIHt9CisKKyAgLyoqCisgICAgR2xvYmFs
IGFjdGlvbiBpZCBoYXNoLgorICAKKyAgICBAcHJpdmF0ZQorICAgIEBwcm9wZXJ0eSByZWdpc3Rl
cmVkQWN0aW9ucworICAgIEB0eXBlIE9iamVjdAorICAqLworICBBY3Rpb25NYW5hZ2VyLnJlZ2lz
dGVyZWRBY3Rpb25zID0ge307CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gQWN0aW9uTWFuYWdlcjsK
K30pOworZW5pZmVkKCdlbWJlci12aWV3cy9zeXN0ZW0vYnVpbGQtY29tcG9uZW50LXRlbXBsYXRl
JywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5
X2dldCcsICdlbWJlci1tZXRhbC9hc3NpZ24nLCAnaHRtbGJhcnMtcnVudGltZScsICdlbWJlci1o
dG1sYmFycy9ob29rcy9nZXQtdmFsdWUnLCAnZW1iZXItbWV0YWwvc3RyZWFtcy91dGlscyddLCBm
dW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxEZWJ1ZywgX2VtYmVyTWV0YWxQcm9wZXJ0eV9n
ZXQsIF9lbWJlck1ldGFsQXNzaWduLCBfaHRtbGJhcnNSdW50aW1lLCBfZW1iZXJIdG1sYmFyc0hv
b2tzR2V0VmFsdWUsIF9lbWJlck1ldGFsU3RyZWFtc1V0aWxzKSB7CisgICd1c2Ugc3RyaWN0JzsK
KworICBleHBvcnRzLmRlZmF1bHQgPSBidWlsZENvbXBvbmVudFRlbXBsYXRlOworICBleHBvcnRz
LmJ1aWxkSFRNTFRlbXBsYXRlID0gYnVpbGRIVE1MVGVtcGxhdGU7CisKKyAgZnVuY3Rpb24gYnVp
bGRDb21wb25lbnRUZW1wbGF0ZShfcmVmLCBhdHRycywgY29udGVudCkgeworICAgIHZhciBjb21w
b25lbnQgPSBfcmVmLmNvbXBvbmVudDsKKyAgICB2YXIgdGFnTmFtZSA9IF9yZWYudGFnTmFtZTsK
KyAgICB2YXIgbGF5b3V0ID0gX3JlZi5sYXlvdXQ7CisgICAgdmFyIGlzQW5nbGVCcmFja2V0ID0g
X3JlZi5pc0FuZ2xlQnJhY2tldDsKKyAgICB2YXIgaXNDb21wb25lbnRFbGVtZW50ID0gX3JlZi5p
c0NvbXBvbmVudEVsZW1lbnQ7CisgICAgdmFyIG91dGVyQXR0cnMgPSBfcmVmLm91dGVyQXR0cnM7
CisKKyAgICB2YXIgYmxvY2tUb1JlbmRlciwgbWV0YTsKKworICAgIGlmIChjb21wb25lbnQgPT09
IHVuZGVmaW5lZCkgeworICAgICAgY29tcG9uZW50ID0gbnVsbDsKKyAgICB9CisKKyAgICBpZiAo
bGF5b3V0ICYmIGxheW91dC5yYXcpIHsKKyAgICAgIHZhciB5aWVsZFRvID0gY3JlYXRlQ29udGVu
dEJsb2Nrcyhjb250ZW50LnRlbXBsYXRlcywgY29udGVudC5zY29wZSwgY29udGVudC5zZWxmLCBj
b21wb25lbnQpOworICAgICAgYmxvY2tUb1JlbmRlciA9IGNyZWF0ZUxheW91dEJsb2NrKGxheW91
dC5yYXcsIHlpZWxkVG8sIGNvbnRlbnQuc2VsZiwgY29tcG9uZW50LCBhdHRycyk7CisgICAgICBt
ZXRhID0gbGF5b3V0LnJhdy5tZXRhOworICAgIH0gZWxzZSBpZiAoY29udGVudC50ZW1wbGF0ZXMg
JiYgY29udGVudC50ZW1wbGF0ZXMuZGVmYXVsdCkgeworICAgICAgYmxvY2tUb1JlbmRlciA9IGNy
ZWF0ZUNvbnRlbnRCbG9jayhjb250ZW50LnRlbXBsYXRlcy5kZWZhdWx0LCBjb250ZW50LnNjb3Bl
LCBjb250ZW50LnNlbGYsIGNvbXBvbmVudCk7CisgICAgICBtZXRhID0gY29udGVudC50ZW1wbGF0
ZXMuZGVmYXVsdC5tZXRhOworICAgIH0KKworICAgIGlmIChjb21wb25lbnQgJiYgIWNvbXBvbmVu
dC5faXNBbmdsZUJyYWNrZXQgfHwgaXNDb21wb25lbnRFbGVtZW50KSB7CisgICAgICB0YWdOYW1l
ID0gdGFnTmFtZSB8fCB0YWdOYW1lRm9yKGNvbXBvbmVudCk7CisKKyAgICAgIC8vIElmIHRoaXMg
aXMgbm90IGEgdGFnbGVzcyBjb21wb25lbnQsIHdlIG5lZWQgdG8gY3JlYXRlIHRoZSB3cmFwcGlu
ZworICAgICAgLy8gZWxlbWVudC4gV2UgdXNlIGBtYW51YWxFbGVtZW50YCB0byBjcmVhdGUgYSB0
ZW1wbGF0ZSB0aGF0IHJlcHJlc2VudHMKKyAgICAgIC8vIHRoZSB3cmFwcGluZyBlbGVtZW50IGFu
ZCB5aWVsZHMgdG8gdGhlIHByZXZpb3VzIGJsb2NrLgorICAgICAgaWYgKHRhZ05hbWUgIT09ICcn
KSB7CisgICAgICAgIGlmIChpc0NvbXBvbmVudEVsZW1lbnQpIHsKKyAgICAgICAgICBhdHRycyA9
IG1lcmdlQXR0cnMoYXR0cnMsIG91dGVyQXR0cnMpOworICAgICAgICB9CisgICAgICAgIHZhciBh
dHRyaWJ1dGVzID0gbm9ybWFsaXplQ29tcG9uZW50QXR0cmlidXRlcyhjb21wb25lbnQsIGlzQW5n
bGVCcmFja2V0LCBhdHRycyk7CisgICAgICAgIHZhciBlbGVtZW50VGVtcGxhdGUgPSBfaHRtbGJh
cnNSdW50aW1lLmludGVybmFsLm1hbnVhbEVsZW1lbnQodGFnTmFtZSwgYXR0cmlidXRlcyk7Cisg
ICAgICAgIGVsZW1lbnRUZW1wbGF0ZS5tZXRhID0gbWV0YTsKKworICAgICAgICBibG9ja1RvUmVu
ZGVyID0gY3JlYXRlRWxlbWVudEJsb2NrKGVsZW1lbnRUZW1wbGF0ZSwgYmxvY2tUb1JlbmRlciwg
Y29tcG9uZW50KTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHZhbGlkYXRlVGFnbGVzc0NvbXBv
bmVudChjb21wb25lbnQpOworICAgICAgfQorICAgIH0KKworICAgIC8vIHRhZ05hbWUgaXMgb25l
IG9mOgorICAgIC8vICAgKiBgdW5kZWZpbmVkYCBpZiBubyBjb21wb25lbnQgaXMgcHJlc2VudAor
ICAgIC8vICAgKiB0aGUgZmFsc3kgdmFsdWUgIiIgaWYgc2V0IGV4cGxpY2l0bHkgb24gdGhlIGNv
bXBvbmVudAorICAgIC8vICAgKiBhbiBhY3R1YWwgdGFnTmFtZSBzZXQgZXhwbGljaXRseSBvbiB0
aGUgY29tcG9uZW50CisgICAgcmV0dXJuIHsgY3JlYXRlZEVsZW1lbnQ6ICEhdGFnTmFtZSwgYmxv
Y2s6IGJsb2NrVG9SZW5kZXIgfTsKKyAgfQorCisgIGZ1bmN0aW9uIGJ1aWxkSFRNTFRlbXBsYXRl
KHRhZ05hbWUsIF9hdHRycywgY29udGVudCkgeworICAgIHZhciBhdHRycyA9IHt9OworCisgICAg
Zm9yICh2YXIgcHJvcCBpbiBfYXR0cnMpIHsKKyAgICAgIHZhciB2YWwgPSBfYXR0cnNbcHJvcF07
CisKKyAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykgeworICAgICAgICBhdHRyc1tw
cm9wXSA9IHZhbDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGF0dHJzW3Byb3BdID0gWyd2YWx1
ZScsIHZhbF07CisgICAgICB9CisgICAgfQorCisgICAgdmFyIGNoaWxkVGVtcGxhdGUgPSBjb250
ZW50LnRlbXBsYXRlcy5kZWZhdWx0OworICAgIHZhciBlbGVtZW50VGVtcGxhdGUgPSBfaHRtbGJh
cnNSdW50aW1lLmludGVybmFsLm1hbnVhbEVsZW1lbnQodGFnTmFtZSwgYXR0cnMsIGNoaWxkVGVt
cGxhdGUuaXNFbXB0eSk7CisKKyAgICBpZiAoY2hpbGRUZW1wbGF0ZS5pc0VtcHR5KSB7CisgICAg
ICByZXR1cm4gYmxvY2tGb3IoZWxlbWVudFRlbXBsYXRlLCB7IHNjb3BlOiBjb250ZW50LnNjb3Bl
IH0pOworICAgIH0gZWxzZSB7CisgICAgICB2YXIgYmxvY2tUb1JlbmRlciA9IGJsb2NrRm9yKGNv
bnRlbnQudGVtcGxhdGVzLmRlZmF1bHQsIGNvbnRlbnQpOworICAgICAgcmV0dXJuIGJsb2NrRm9y
KGVsZW1lbnRUZW1wbGF0ZSwgeyB5aWVsZFRvOiBibG9ja1RvUmVuZGVyLCBzY29wZTogY29udGVu
dC5zY29wZSB9KTsKKyAgICB9CisgIH0KKworICBmdW5jdGlvbiBtZXJnZUF0dHJzKGlubmVyQXR0
cnMsIG91dGVyQXR0cnMpIHsKKyAgICB2YXIgcmVzdWx0ID0gX2VtYmVyTWV0YWxBc3NpZ24uZGVm
YXVsdCh7fSwgaW5uZXJBdHRycywgb3V0ZXJBdHRycyk7CisKKyAgICBpZiAoaW5uZXJBdHRycy5j
bGFzcyAmJiBvdXRlckF0dHJzLmNsYXNzKSB7CisgICAgICByZXN1bHQuY2xhc3MgPSBbJ3N1YmV4
cHInLCAnLWpvaW4tY2xhc3NlcycsIFtbJ3ZhbHVlJywgaW5uZXJBdHRycy5jbGFzc10sIFsndmFs
dWUnLCBvdXRlckF0dHJzLmNsYXNzXV0sIFtdXTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0
OworICB9CisKKyAgZnVuY3Rpb24gYmxvY2tGb3IodGVtcGxhdGUsIG9wdGlvbnMpIHsKKyAgICBf
ZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnQlVHOiBNdXN0IHBhc3MgYSB0ZW1wbGF0ZSB0byBibG9j
a0ZvcicsICEhdGVtcGxhdGUpOworICAgIHJldHVybiBfaHRtbGJhcnNSdW50aW1lLmludGVybmFs
LmJsb2NrRm9yKF9odG1sYmFyc1J1bnRpbWUucmVuZGVyLCB0ZW1wbGF0ZSwgb3B0aW9ucyk7Cisg
IH0KKworICBmdW5jdGlvbiBjcmVhdGVDb250ZW50QmxvY2sodGVtcGxhdGUsIHNjb3BlLCBzZWxm
LCBjb21wb25lbnQpIHsKKyAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnQlVHOiBidWlsZENv
bXBvbmVudFRlbXBsYXRlIGNhbiB0YWtlIGEgc2NvcGUgb3IgYSBzZWxmLCBidXQgbm90IGJvdGgn
LCAhKHNjb3BlICYmIHNlbGYpKTsKKworICAgIHJldHVybiBibG9ja0Zvcih0ZW1wbGF0ZSwgewor
ICAgICAgc2NvcGU6IHNjb3BlLAorICAgICAgc2VsZjogc2VsZiwKKyAgICAgIG9wdGlvbnM6IHsg
dmlldzogY29tcG9uZW50IH0KKyAgICB9KTsKKyAgfQorCisgIGZ1bmN0aW9uIGNyZWF0ZUNvbnRl
bnRCbG9ja3ModGVtcGxhdGVzLCBzY29wZSwgc2VsZiwgY29tcG9uZW50KSB7CisgICAgaWYgKCF0
ZW1wbGF0ZXMpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgdmFyIG91dHB1dCA9IHt9Owor
ICAgIGZvciAodmFyIG5hbWUgaW4gdGVtcGxhdGVzKSB7CisgICAgICBpZiAodGVtcGxhdGVzLmhh
c093blByb3BlcnR5KG5hbWUpKSB7CisgICAgICAgIHZhciB0ZW1wbGF0ZSA9IHRlbXBsYXRlc1tu
YW1lXTsKKyAgICAgICAgaWYgKHRlbXBsYXRlKSB7CisgICAgICAgICAgb3V0cHV0W25hbWVdID0g
Y3JlYXRlQ29udGVudEJsb2NrKHRlbXBsYXRlc1tuYW1lXSwgc2NvcGUsIHNlbGYsIGNvbXBvbmVu
dCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG91dHB1dDsKKyAgfQor
CisgIGZ1bmN0aW9uIGNyZWF0ZUxheW91dEJsb2NrKHRlbXBsYXRlLCB5aWVsZFRvLCBzZWxmLCBj
b21wb25lbnQsIGF0dHJzKSB7CisgICAgcmV0dXJuIGJsb2NrRm9yKHRlbXBsYXRlLCB7CisgICAg
ICB5aWVsZFRvOiB5aWVsZFRvLAorCisgICAgICAvLyBJZiB3ZSBoYXZlIGFuIG9sZC1zdHlsZSBD
b250cm9sbGVyIHdpdGggYSB0ZW1wbGF0ZSBpdCB3aWxsIGJlCisgICAgICAvLyBwYXNzZWQgYXMg
b3VyIGBzZWxmYCBhcmd1bWVudCwgYW5kIGl0IHNob3VsZCBiZSB0aGUgY29udGV4dCBmb3IKKyAg
ICAgIC8vIHRoZSB0ZW1wbGF0ZS4gT3RoZXJ3aXNlLCB3ZSBtdXN0IGhhdmUgYSByZWFsIENvbXBv
bmVudCBhbmQgaXQKKyAgICAgIC8vIHNob3VsZCBiZSBpdHMgb3duIHRlbXBsYXRlIGNvbnRleHQu
CisgICAgICBzZWxmOiBzZWxmIHx8IGNvbXBvbmVudCwKKworICAgICAgb3B0aW9uczogeyB2aWV3
OiBjb21wb25lbnQsIGF0dHJzOiBhdHRycyB9CisgICAgfSk7CisgIH0KKworICBmdW5jdGlvbiBj
cmVhdGVFbGVtZW50QmxvY2sodGVtcGxhdGUsIHlpZWxkVG8sIGNvbXBvbmVudCkgeworICAgIHJl
dHVybiBibG9ja0Zvcih0ZW1wbGF0ZSwgeworICAgICAgeWllbGRUbzogeWllbGRUbywKKyAgICAg
IHNlbGY6IGNvbXBvbmVudCwKKyAgICAgIG9wdGlvbnM6IHsgdmlldzogY29tcG9uZW50IH0KKyAg
ICB9KTsKKyAgfQorCisgIGZ1bmN0aW9uIHRhZ05hbWVGb3IodmlldykgeworICAgIHZhciB0YWdO
YW1lID0gdmlldy50YWdOYW1lOworCisgICAgaWYgKHRhZ05hbWUgIT09IG51bGwgJiYgdHlwZW9m
IHRhZ05hbWUgPT09ICdvYmplY3QnICYmIHRhZ05hbWUuaXNEZXNjcmlwdG9yKSB7CisgICAgICB0
YWdOYW1lID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHZpZXcsICd0YWdOYW1lJyk7Cisg
ICAgICBfZW1iZXJNZXRhbERlYnVnLmRlcHJlY2F0ZSgnSW4gdGhlIGZ1dHVyZSB1c2luZyBhIGNv
bXB1dGVkIHByb3BlcnR5IHRvIGRlZmluZSB0YWdOYW1lIHdpbGwgbm90IGJlIHBlcm1pdHRlZC4g
VGhhdCB2YWx1ZSB3aWxsIGJlIHJlc3BlY3RlZCwgYnV0IGNoYW5naW5nIGl0IHdpbGwgbm90IHVw
ZGF0ZSB0aGUgZWxlbWVudC4nLCAhdGFnTmFtZSwgeyBpZDogJ2VtYmVyLXZpZXdzLmNvbXB1dGVk
LXRhZy1uYW1lJywgdW50aWw6ICcyLjAuMCcgfSk7CisgICAgfQorCisgICAgaWYgKHRhZ05hbWUg
PT09IG51bGwgfHwgdGFnTmFtZSA9PT0gdW5kZWZpbmVkKSB7CisgICAgICB0YWdOYW1lID0gdmll
dy5fZGVmYXVsdFRhZ05hbWUgfHwgJ2Rpdic7CisgICAgfQorCisgICAgcmV0dXJuIHRhZ05hbWU7
CisgIH0KKworICAvLyBUYWtlcyBhIGNvbXBvbmVudCBhbmQgYnVpbGRzIGEgbm9ybWFsaXplZCBz
ZXQgb2YgYXR0cmlidXRlCisgIC8vIGJpbmRpbmdzIGNvbnN1bWFibGUgYnkgSFRNTEJhcnMnIGBh
dHRyaWJ1dGVgIGhvb2suCisgIGZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudEF0dHJpYnV0ZXMo
Y29tcG9uZW50LCBpc0FuZ2xlQnJhY2tldCwgYXR0cnMpIHsKKyAgICB2YXIgbm9ybWFsaXplZCA9
IHt9OworICAgIHZhciBhdHRyaWJ1dGVCaW5kaW5ncyA9IGNvbXBvbmVudC5hdHRyaWJ1dGVCaW5k
aW5nczsKKyAgICB2YXIgc3RyZWFtQmFzZVBhdGggPSBjb21wb25lbnQuaXNDb21wb25lbnQgPyAn
JyA6ICd2aWV3Lic7CisgICAgdmFyIGksIGw7CisKKyAgICBpZiAoYXR0cnMuaWQgJiYgX2VtYmVy
SHRtbGJhcnNIb29rc0dldFZhbHVlLmRlZmF1bHQoYXR0cnMuaWQpKSB7CisgICAgICAvLyBEbyBu
b3QgYWxsb3cgYmluZGluZyB0byB0aGUgYGlkYAorICAgICAgbm9ybWFsaXplZC5pZCA9IF9lbWJl
ckh0bWxiYXJzSG9va3NHZXRWYWx1ZS5kZWZhdWx0KGF0dHJzLmlkKTsKKyAgICAgIGNvbXBvbmVu
dC5lbGVtZW50SWQgPSBub3JtYWxpemVkLmlkOworICAgIH0gZWxzZSB7CisgICAgICBub3JtYWxp
emVkLmlkID0gY29tcG9uZW50LmVsZW1lbnRJZDsKKyAgICB9CisKKyAgICBpZiAoYXR0cmlidXRl
QmluZGluZ3MpIHsKKyAgICAgIGZvciAoaSA9IDAsIGwgPSBhdHRyaWJ1dGVCaW5kaW5ncy5sZW5n
dGg7IGkgPCBsOyBpKyspIHsKKyAgICAgICAgdmFyIGF0dHIgPSBhdHRyaWJ1dGVCaW5kaW5nc1tp
XTsKKyAgICAgICAgdmFyIGNvbG9uSW5kZXggPSBhdHRyLmluZGV4T2YoJzonKTsKKworICAgICAg
ICB2YXIgYXR0ck5hbWUsIGV4cHJlc3Npb247CisgICAgICAgIGlmIChjb2xvbkluZGV4ICE9PSAt
MSkgeworICAgICAgICAgIHZhciBhdHRyUHJvcGVydHkgPSBhdHRyLnN1YnN0cmluZygwLCBjb2xv
bkluZGV4KTsKKyAgICAgICAgICBhdHRyTmFtZSA9IGF0dHIuc3Vic3RyaW5nKGNvbG9uSW5kZXgg
KyAxKTsKKyAgICAgICAgICBleHByZXNzaW9uID0gWydnZXQnLCAnJyArIHN0cmVhbUJhc2VQYXRo
ICsgYXR0clByb3BlcnR5XTsKKyAgICAgICAgfSBlbHNlIGlmIChhdHRyc1thdHRyXSkgeworICAg
ICAgICAgIC8vIFRPRE86IEZvciBjb21wYXRpYmlsaXR5IHdpdGggMS54LCB3ZSBwcm9iYWJseSBu
ZWVkIHRvIGBzZXRgCisgICAgICAgICAgLy8gdGhlIGNvbXBvbmVudCdzIGF0dHJpYnV0ZSBoZXJl
IGlmIGl0IGlzIGEgQ1AsIGJ1dCB3ZSBhbHNvCisgICAgICAgICAgLy8gcHJvYmFibHkgd2FudCB0
byBzdXNwZW5kIG9ic2VydmVycyBhbmQgYWxsb3cgdGhlCisgICAgICAgICAgLy8gd2lsbFVwZGF0
ZUF0dHJzIGxvZ2ljIHRvIHRyaWdnZXIgb2JzZXJ2ZXJzIGF0IHRoZSBjb3JyZWN0IHRpbWUuCisg
ICAgICAgICAgYXR0ck5hbWUgPSBhdHRyOworICAgICAgICAgIGV4cHJlc3Npb24gPSBbJ3ZhbHVl
JywgYXR0cnNbYXR0cl1dOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGF0dHJOYW1lID0g
YXR0cjsKKyAgICAgICAgICBleHByZXNzaW9uID0gWydnZXQnLCAnJyArIHN0cmVhbUJhc2VQYXRo
ICsgYXR0cl07CisgICAgICAgIH0KKworICAgICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgn
WW91IGNhbm5vdCB1c2UgY2xhc3MgYXMgYW4gYXR0cmlidXRlQmluZGluZywgdXNlIGNsYXNzTmFt
ZUJpbmRpbmdzIGluc3RlYWQuJywgYXR0ck5hbWUgIT09ICdjbGFzcycpOworCisgICAgICAgIG5v
cm1hbGl6ZWRbYXR0ck5hbWVdID0gZXhwcmVzc2lvbjsKKyAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAoaXNBbmdsZUJyYWNrZXQpIHsKKyAgICAgIGZvciAodmFyIHByb3AgaW4gYXR0cnMpIHsKKyAg
ICAgICAgdmFyIHZhbCA9IGF0dHJzW3Byb3BdOworICAgICAgICBpZiAoIXZhbCkgeworICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdz
dHJpbmcnIHx8IHZhbC5pc0NvbmNhdCkgeworICAgICAgICAgIG5vcm1hbGl6ZWRbcHJvcF0gPSBb
J3ZhbHVlJywgdmFsXTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIGlmIChhdHRy
cy50YWdOYW1lKSB7CisgICAgICBjb21wb25lbnQudGFnTmFtZSA9IGF0dHJzLnRhZ05hbWU7Cisg
ICAgfQorCisgICAgdmFyIG5vcm1hbGl6ZWRDbGFzcyA9IG5vcm1hbGl6ZUNsYXNzKGNvbXBvbmVu
dCwgYXR0cnMsIHN0cmVhbUJhc2VQYXRoKTsKKworICAgIGlmIChub3JtYWxpemVkQ2xhc3MpIHsK
KyAgICAgIG5vcm1hbGl6ZWQuY2xhc3MgPSBub3JtYWxpemVkQ2xhc3M7CisgICAgfQorCisgICAg
aWYgKF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldChjb21wb25lbnQsICdpc1Zpc2libGUnKSA9
PT0gZmFsc2UpIHsKKyAgICAgIHZhciBoaWRkZW5TdHlsZSA9IFsnc3ViZXhwcicsICctaHRtbC1z
YWZlJywgWydkaXNwbGF5OiBub25lOyddLCBbXV07CisgICAgICB2YXIgZXhpc3RpbmdTdHlsZSA9
IG5vcm1hbGl6ZWQuc3R5bGU7CisKKyAgICAgIGlmIChleGlzdGluZ1N0eWxlKSB7CisgICAgICAg
IG5vcm1hbGl6ZWQuc3R5bGUgPSBbJ3N1YmV4cHInLCAnY29uY2F0JywgW2V4aXN0aW5nU3R5bGUs
ICcgJywgaGlkZGVuU3R5bGVdLCBbXV07CisgICAgICB9IGVsc2UgeworICAgICAgICBub3JtYWxp
emVkLnN0eWxlID0gaGlkZGVuU3R5bGU7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG5v
cm1hbGl6ZWQ7CisgIH0KKworICBmdW5jdGlvbiBub3JtYWxpemVDbGFzcyhjb21wb25lbnQsIGF0
dHJzLCBzdHJlYW1CYXNlUGF0aCkgeworICAgIHZhciBpLCBsOworICAgIHZhciBub3JtYWxpemVk
Q2xhc3MgPSBbXTsKKyAgICB2YXIgY2xhc3NOYW1lcyA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0
LmdldChjb21wb25lbnQsICdjbGFzc05hbWVzJyk7CisgICAgdmFyIGNsYXNzTmFtZUJpbmRpbmdz
ID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KGNvbXBvbmVudCwgJ2NsYXNzTmFtZUJpbmRp
bmdzJyk7CisKKyAgICBpZiAoYXR0cnMuY2xhc3MpIHsKKyAgICAgIGlmIChfZW1iZXJNZXRhbFN0
cmVhbXNVdGlscy5pc1N0cmVhbShhdHRycy5jbGFzcykpIHsKKyAgICAgICAgbm9ybWFsaXplZENs
YXNzLnB1c2goWydzdWJleHByJywgJy1ub3JtYWxpemUtY2xhc3MnLCBbWyd2YWx1ZScsIGF0dHJz
LmNsYXNzLnBhdGhdLCBbJ3ZhbHVlJywgYXR0cnMuY2xhc3NdXSwgW11dKTsKKyAgICAgIH0gZWxz
ZSB7CisgICAgICAgIG5vcm1hbGl6ZWRDbGFzcy5wdXNoKGF0dHJzLmNsYXNzKTsKKyAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAoYXR0cnMuY2xhc3NCaW5kaW5nKSB7CisgICAgICBub3JtYWxpemVD
bGFzc2VzKGF0dHJzLmNsYXNzQmluZGluZy5zcGxpdCgnICcpLCBub3JtYWxpemVkQ2xhc3MsIHN0
cmVhbUJhc2VQYXRoKTsKKyAgICB9CisKKyAgICBpZiAoY2xhc3NOYW1lcykgeworICAgICAgZm9y
IChpID0gMCwgbCA9IGNsYXNzTmFtZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CisgICAgICAgIG5v
cm1hbGl6ZWRDbGFzcy5wdXNoKGNsYXNzTmFtZXNbaV0pOworICAgICAgfQorICAgIH0KKworICAg
IGlmIChjbGFzc05hbWVCaW5kaW5ncykgeworICAgICAgbm9ybWFsaXplQ2xhc3NlcyhjbGFzc05h
bWVCaW5kaW5ncywgbm9ybWFsaXplZENsYXNzLCBzdHJlYW1CYXNlUGF0aCk7CisgICAgfQorCisg
ICAgaWYgKG5vcm1hbGl6ZUNsYXNzLmxlbmd0aCkgeworICAgICAgcmV0dXJuIFsnc3ViZXhwcics
ICctam9pbi1jbGFzc2VzJywgbm9ybWFsaXplZENsYXNzLCBbXV07CisgICAgfQorICB9CisKKyAg
ZnVuY3Rpb24gbm9ybWFsaXplQ2xhc3NlcyhjbGFzc2VzLCBvdXRwdXQsIHN0cmVhbUJhc2VQYXRo
KSB7CisgICAgdmFyIGksIGw7CisKKyAgICBmb3IgKGkgPSAwLCBsID0gY2xhc3Nlcy5sZW5ndGg7
IGkgPCBsOyBpKyspIHsKKyAgICAgIHZhciBjbGFzc05hbWUgPSBjbGFzc2VzW2ldOworICAgICAg
X2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ2NsYXNzTmFtZUJpbmRpbmdzIG11c3Qgbm90IGhhdmUg
c3BhY2VzIGluIHRoZW0uIE11bHRpcGxlIGNsYXNzIG5hbWUgYmluZGluZ3MgY2FuIGJlIHByb3Zp
ZGVkIGFzIGVsZW1lbnRzIG9mIGFuIGFycmF5LCBlLmcuIFtcJ2Zvb1wnLCBcJzpiYXJcJ10nLCBj
bGFzc05hbWUuaW5kZXhPZignICcpID09PSAtMSk7CisKKyAgICAgIHZhciBfY2xhc3NOYW1lJHNw
bGl0ID0gY2xhc3NOYW1lLnNwbGl0KCc6Jyk7CisKKyAgICAgIHZhciBwcm9wTmFtZSA9IF9jbGFz
c05hbWUkc3BsaXRbMF07CisgICAgICB2YXIgYWN0aXZlQ2xhc3MgPSBfY2xhc3NOYW1lJHNwbGl0
WzFdOworICAgICAgdmFyIGluYWN0aXZlQ2xhc3MgPSBfY2xhc3NOYW1lJHNwbGl0WzJdOworCisg
ICAgICAvLyBMZWdhY3kgOmNsYXNzIG1pY3Jvc3ludGF4IGZvciBzdGF0aWMgY2xhc3MgbmFtZXMK
KyAgICAgIGlmIChwcm9wTmFtZSA9PT0gJycpIHsKKyAgICAgICAgb3V0cHV0LnB1c2goYWN0aXZl
Q2xhc3MpOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgdmFyIHByb3AgPSAn
JyArIHN0cmVhbUJhc2VQYXRoICsgcHJvcE5hbWU7CisKKyAgICAgIG91dHB1dC5wdXNoKFsnc3Vi
ZXhwcicsICctbm9ybWFsaXplLWNsYXNzJywgWworICAgICAgLy8gcGFyYW1zCisgICAgICBbJ3Zh
bHVlJywgcHJvcE5hbWVdLCBbJ2dldCcsIHByb3BdXSwgWworICAgICAgLy8gaGFzaAorICAgICAg
J2FjdGl2ZUNsYXNzJywgYWN0aXZlQ2xhc3MsICdpbmFjdGl2ZUNsYXNzJywgaW5hY3RpdmVDbGFz
c11dKTsKKyAgICB9CisgIH0KKworICBmdW5jdGlvbiB2YWxpZGF0ZVRhZ2xlc3NDb21wb25lbnQo
Y29tcG9uZW50KSB7CisgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1lvdSBjYW5ub3QgdXNl
IGBjbGFzc05hbWVCaW5kaW5nc2Agb24gYSB0YWctbGVzcyBjb21wb25lbnQ6ICcgKyBjb21wb25l
bnQudG9TdHJpbmcoKSwgKGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciBjbGFzc05hbWVCaW5kaW5n
cyA9IGNvbXBvbmVudC5jbGFzc05hbWVCaW5kaW5nczsKKyAgICAgIHJldHVybiAhY2xhc3NOYW1l
QmluZGluZ3MgfHwgY2xhc3NOYW1lQmluZGluZ3MubGVuZ3RoID09PSAwOworICAgIH0pKCkpOwor
ICB9Cit9KTsKK2VuaWZlZCgnZW1iZXItdmlld3Mvc3lzdGVtL2V2ZW50X2Rpc3BhdGNoZXInLCBb
J2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvZGVidWcnLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0
JywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCcsICdlbWJlci1tZXRhbC9pc19ub25lJywgJ2Vt
YmVyLW1ldGFsL3J1bl9sb29wJywgJ2VtYmVyLXJ1bnRpbWUvc3lzdGVtL29iamVjdCcsICdlbWJl
ci12aWV3cy9zeXN0ZW0vanF1ZXJ5JywgJ2VtYmVyLXZpZXdzL3N5c3RlbS9hY3Rpb25fbWFuYWdl
cicsICdlbWJlci12aWV3cy92aWV3cy92aWV3JywgJ2VtYmVyLW1ldGFsL2Fzc2lnbicsICdjb250
YWluZXIvb3duZXInLCAnZW1iZXItbWV0YWwvZW52aXJvbm1lbnQnXSwgZnVuY3Rpb24gKGV4cG9y
dHMsIF9lbWJlck1ldGFsRGVidWcsIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LCBfZW1iZXJNZXRh
bFByb3BlcnR5X3NldCwgX2VtYmVyTWV0YWxJc19ub25lLCBfZW1iZXJNZXRhbFJ1bl9sb29wLCBf
ZW1iZXJSdW50aW1lU3lzdGVtT2JqZWN0LCBfZW1iZXJWaWV3c1N5c3RlbUpxdWVyeSwgX2VtYmVy
Vmlld3NTeXN0ZW1BY3Rpb25fbWFuYWdlciwgX2VtYmVyVmlld3NWaWV3c1ZpZXcsIF9lbWJlck1l
dGFsQXNzaWduLCBfY29udGFpbmVyT3duZXIsIF9lbWJlck1ldGFsRW52aXJvbm1lbnQpIHsKKyAg
LyoqCisgIEBtb2R1bGUgZW1iZXIKKyAgQHN1Ym1vZHVsZSBlbWJlci12aWV3cworICAqLworCisg
ICd1c2Ugc3RyaWN0JzsKKworICB2YXIgUk9PVF9FTEVNRU5UX0NMQVNTID0gJ2VtYmVyLWFwcGxp
Y2F0aW9uJzsKKyAgdmFyIFJPT1RfRUxFTUVOVF9TRUxFQ1RPUiA9ICcuJyArIFJPT1RfRUxFTUVO
VF9DTEFTUzsKKworICAvKioKKyAgICBgRW1iZXIuRXZlbnREaXNwYXRjaGVyYCBoYW5kbGVzIGRl
bGVnYXRpbmcgYnJvd3NlciBldmVudHMgdG8gdGhlaXIKKyAgICBjb3JyZXNwb25kaW5nIGBFbWJl
ci5WaWV3cy5gIEZvciBleGFtcGxlLCB3aGVuIHlvdSBjbGljayBvbiBhIHZpZXcsCisgICAgYEVt
YmVyLkV2ZW50RGlzcGF0Y2hlcmAgZW5zdXJlcyB0aGF0IHRoYXQgdmlldydzIGBtb3VzZURvd25g
IG1ldGhvZCBnZXRzCisgICAgY2FsbGVkLgorICAKKyAgICBAY2xhc3MgRXZlbnREaXNwYXRjaGVy
CisgICAgQG5hbWVzcGFjZSBFbWJlcgorICAgIEBwcml2YXRlCisgICAgQGV4dGVuZHMgRW1iZXIu
T2JqZWN0CisgICovCisgIGV4cG9ydHMuZGVmYXVsdCA9IF9lbWJlclJ1bnRpbWVTeXN0ZW1PYmpl
Y3QuZGVmYXVsdC5leHRlbmQoeworCisgICAgLyoqCisgICAgICBUaGUgc2V0IG9mIGV2ZW50cyBu
YW1lcyAoYW5kIGFzc29jaWF0ZWQgaGFuZGxlciBmdW5jdGlvbiBuYW1lcykgdG8gYmUgc2V0dXAK
KyAgICAgIGFuZCBkaXNwYXRjaGVkIGJ5IHRoZSBgRXZlbnREaXNwYXRjaGVyYC4gTW9kaWZpY2F0
aW9ucyB0byB0aGlzIGxpc3QgY2FuIGJlIGRvbmUKKyAgICAgIGF0IHNldHVwIHRpbWUsIGdlbmVy
YWxseSB2aWEgdGhlIGBFbWJlci5BcHBsaWNhdGlvbi5jdXN0b21FdmVudHNgIGhhc2guCisgICAg
ICAgVG8gYWRkIG5ldyBldmVudHMgdG8gYmUgbGlzdGVuZWQgdG86CisgICAgICAgYGBgamF2YXNj
cmlwdAorICAgICAgdmFyIEFwcCA9IEVtYmVyLkFwcGxpY2F0aW9uLmNyZWF0ZSh7CisgICAgICAg
IGN1c3RvbUV2ZW50czogeworICAgICAgICAgIHBhc3RlOiAncGFzdGUnCisgICAgICAgIH0KKyAg
ICAgIH0pOworICAgICAgYGBgCisgICAgICAgVG8gcHJldmVudCBkZWZhdWx0IGV2ZW50cyBmcm9t
IGJlaW5nIGxpc3RlbmVkIHRvOgorICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgIHZhciBBcHAg
PSBFbWJlci5BcHBsaWNhdGlvbi5jcmVhdGUoeworICAgICAgICBjdXN0b21FdmVudHM6IHsKKyAg
ICAgICAgICBtb3VzZWVudGVyOiBudWxsLAorICAgICAgICAgIG1vdXNlbGVhdmU6IG51bGwKKyAg
ICAgICAgfQorICAgICAgfSk7CisgICAgICBgYGAKKyAgICAgIEBwcm9wZXJ0eSBldmVudHMKKyAg
ICAgIEB0eXBlIE9iamVjdAorICAgICAgQHByaXZhdGUKKyAgICAqLworICAgIGV2ZW50czogewor
ICAgICAgdG91Y2hzdGFydDogJ3RvdWNoU3RhcnQnLAorICAgICAgdG91Y2htb3ZlOiAndG91Y2hN
b3ZlJywKKyAgICAgIHRvdWNoZW5kOiAndG91Y2hFbmQnLAorICAgICAgdG91Y2hjYW5jZWw6ICd0
b3VjaENhbmNlbCcsCisgICAgICBrZXlkb3duOiAna2V5RG93bicsCisgICAgICBrZXl1cDogJ2tl
eVVwJywKKyAgICAgIGtleXByZXNzOiAna2V5UHJlc3MnLAorICAgICAgbW91c2Vkb3duOiAnbW91
c2VEb3duJywKKyAgICAgIG1vdXNldXA6ICdtb3VzZVVwJywKKyAgICAgIGNvbnRleHRtZW51OiAn
Y29udGV4dE1lbnUnLAorICAgICAgY2xpY2s6ICdjbGljaycsCisgICAgICBkYmxjbGljazogJ2Rv
dWJsZUNsaWNrJywKKyAgICAgIG1vdXNlbW92ZTogJ21vdXNlTW92ZScsCisgICAgICBmb2N1c2lu
OiAnZm9jdXNJbicsCisgICAgICBmb2N1c291dDogJ2ZvY3VzT3V0JywKKyAgICAgIG1vdXNlZW50
ZXI6ICdtb3VzZUVudGVyJywKKyAgICAgIG1vdXNlbGVhdmU6ICdtb3VzZUxlYXZlJywKKyAgICAg
IHN1Ym1pdDogJ3N1Ym1pdCcsCisgICAgICBpbnB1dDogJ2lucHV0JywKKyAgICAgIGNoYW5nZTog
J2NoYW5nZScsCisgICAgICBkcmFnc3RhcnQ6ICdkcmFnU3RhcnQnLAorICAgICAgZHJhZzogJ2Ry
YWcnLAorICAgICAgZHJhZ2VudGVyOiAnZHJhZ0VudGVyJywKKyAgICAgIGRyYWdsZWF2ZTogJ2Ry
YWdMZWF2ZScsCisgICAgICBkcmFnb3ZlcjogJ2RyYWdPdmVyJywKKyAgICAgIGRyb3A6ICdkcm9w
JywKKyAgICAgIGRyYWdlbmQ6ICdkcmFnRW5kJworICAgIH0sCisKKyAgICAvKioKKyAgICAgIFRo
ZSByb290IERPTSBlbGVtZW50IHRvIHdoaWNoIGV2ZW50IGxpc3RlbmVycyBzaG91bGQgYmUgYXR0
YWNoZWQuIEV2ZW50CisgICAgICBsaXN0ZW5lcnMgd2lsbCBiZSBhdHRhY2hlZCB0byB0aGUgZG9j
dW1lbnQgdW5sZXNzIHRoaXMgaXMgb3ZlcnJpZGRlbi4KKyAgICAgICBDYW4gYmUgc3BlY2lmaWVk
IGFzIGEgRE9NRWxlbWVudCBvciBhIHNlbGVjdG9yIHN0cmluZy4KKyAgICAgICBUaGUgZGVmYXVs
dCBib2R5IGlzIGEgc3RyaW5nIHNpbmNlIHRoaXMgbWF5IGJlIGV2YWx1YXRlZCBiZWZvcmUgZG9j
dW1lbnQuYm9keQorICAgICAgZXhpc3RzIGluIHRoZSBET00uCisgICAgICAgQHByaXZhdGUKKyAg
ICAgIEBwcm9wZXJ0eSByb290RWxlbWVudAorICAgICAgQHR5cGUgRE9NRWxlbWVudAorICAgICAg
QGRlZmF1bHQgJ2JvZHknCisgICAgKi8KKyAgICByb290RWxlbWVudDogJ2JvZHknLAorCisgICAg
LyoqCisgICAgICBJdCBlbmFibGVzIGV2ZW50cyB0byBiZSBkaXNwYXRjaGVkIHRvIHRoZSB2aWV3
J3MgYGV2ZW50TWFuYWdlci5gIFdoZW4gcHJlc2VudCwKKyAgICAgIHRoaXMgb2JqZWN0IHRha2Vz
IHByZWNlZGVuY2Ugb3ZlciBoYW5kbGluZyBvZiBldmVudHMgb24gdGhlIHZpZXcgaXRzZWxmLgor
ICAgICAgIE5vdGUgdGhhdCBtb3N0IEVtYmVyIGFwcGxpY2F0aW9ucyBkbyBub3QgdXNlIHRoaXMg
ZmVhdHVyZS4gSWYgeW91ciBhcHAgYWxzbworICAgICAgZG9lcyBub3QgdXNlIGl0LCBjb25zaWRl
ciBzZXR0aW5nIHRoaXMgcHJvcGVydHkgdG8gZmFsc2UgdG8gZ2FpbiBzb21lIHBlcmZvcm1hbmNl
CisgICAgICBpbXByb3ZlbWVudCBieSBhbGxvd2luZyB0aGUgRXZlbnREaXNwYXRjaGVyIHRvIHNr
aXAgdGhlIHNlYXJjaCBmb3IgdGhlCisgICAgICBgZXZlbnRNYW5hZ2VyYCBvbiB0aGUgdmlldyB0
cmVlLgorICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgIHZhciBFdmVudERpc3BhdGNoZXIgPSBF
bS5FdmVudERpc3BhdGNoZXIuZXh0ZW5kKHsKKyAgICAgICAgZXZlbnRzOiB7CisgICAgICAgICAg
ICBjbGljayAgICAgICA6ICdjbGljaycsCisgICAgICAgICAgICBmb2N1c2luICAgICA6ICdmb2N1
c0luJywKKyAgICAgICAgICAgIGZvY3Vzb3V0ICAgIDogJ2ZvY3VzT3V0JywKKyAgICAgICAgICAg
IGNoYW5nZSAgICAgIDogJ2NoYW5nZScKKyAgICAgICAgfSwKKyAgICAgICAgY2FuRGlzcGF0Y2hU
b0V2ZW50TWFuYWdlcjogZmFsc2UKKyAgICAgIH0pOworICAgICAgY29udGFpbmVyLnJlZ2lzdGVy
KCdldmVudF9kaXNwYXRjaGVyOm1haW4nLCBFdmVudERpc3BhdGNoZXIpOworICAgICAgYGBgCisg
ICAgICAgQHByb3BlcnR5IGNhbkRpc3BhdGNoVG9FdmVudE1hbmFnZXIKKyAgICAgIEB0eXBlIGJv
b2xlYW4KKyAgICAgIEBkZWZhdWx0ICd0cnVlJworICAgICAgQHNpbmNlIDEuNy4wCisgICAgICBA
cHJpdmF0ZQorICAgICovCisgICAgY2FuRGlzcGF0Y2hUb0V2ZW50TWFuYWdlcjogdHJ1ZSwKKwor
ICAgIGluaXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHRoaXMuX3N1cGVyKCk7CisgICAgICBfZW1i
ZXJNZXRhbERlYnVnLmFzc2VydCgnRXZlbnREaXNwYXRjaGVyIHNob3VsZCBuZXZlciBiZSBpbnN0
YW50aWF0ZWQgaW4gZmFzdGJvb3QgbW9kZS4gUGxlYXNlIHJlcG9ydCB0aGlzIGFzIGFuIEVtYmVy
IGJ1Zy4nLCBfZW1iZXJNZXRhbEVudmlyb25tZW50LmRlZmF1bHQuaGFzRE9NKTsKKyAgICB9LAor
CisgICAgLyoqCisgICAgICBTZXRzIHVwIGV2ZW50IGxpc3RlbmVycyBmb3Igc3RhbmRhcmQgYnJv
d3NlciBldmVudHMuCisgICAgICAgVGhpcyB3aWxsIGJlIGNhbGxlZCBhZnRlciB0aGUgYnJvd3Nl
ciBzZW5kcyBhIGBET01Db250ZW50UmVhZHlgIGV2ZW50LiBCeQorICAgICAgZGVmYXVsdCwgaXQg
d2lsbCBzZXQgdXAgYWxsIG9mIHRoZSBsaXN0ZW5lcnMgb24gdGhlIGRvY3VtZW50IGJvZHkuIElm
IHlvdQorICAgICAgd291bGQgbGlrZSB0byByZWdpc3RlciB0aGUgbGlzdGVuZXJzIG9uIGEgZGlm
ZmVyZW50IGVsZW1lbnQsIHNldCB0aGUgZXZlbnQKKyAgICAgIGRpc3BhdGNoZXIncyBgcm9vdGAg
cHJvcGVydHkuCisgICAgICAgQHByaXZhdGUKKyAgICAgIEBtZXRob2Qgc2V0dXAKKyAgICAgIEBw
YXJhbSBhZGRlZEV2ZW50cyB7T2JqZWN0fQorICAgICovCisgICAgc2V0dXA6IGZ1bmN0aW9uIChh
ZGRlZEV2ZW50cywgcm9vdEVsZW1lbnQpIHsKKyAgICAgIHZhciBldmVudDsKKyAgICAgIHZhciBl
dmVudHMgPSB0aGlzLl9maW5hbEV2ZW50cyA9IF9lbWJlck1ldGFsQXNzaWduLmRlZmF1bHQoe30s
IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnZXZlbnRzJyksIGFkZGVkRXZlbnRz
KTsKKworICAgICAgaWYgKCFfZW1iZXJNZXRhbElzX25vbmUuZGVmYXVsdChyb290RWxlbWVudCkp
IHsKKyAgICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQuc2V0KHRoaXMsICdyb290RWxlbWVu
dCcsIHJvb3RFbGVtZW50KTsKKyAgICAgIH0KKworICAgICAgcm9vdEVsZW1lbnQgPSBfZW1iZXJW
aWV3c1N5c3RlbUpxdWVyeS5kZWZhdWx0KF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlz
LCAncm9vdEVsZW1lbnQnKSk7CisKKyAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdZb3Ug
Y2Fubm90IHVzZSB0aGUgc2FtZSByb290IGVsZW1lbnQgKCcgKyAocm9vdEVsZW1lbnQuc2VsZWN0
b3IgfHwgcm9vdEVsZW1lbnRbMF0udGFnTmFtZSkgKyAnKSBtdWx0aXBsZSB0aW1lcyBpbiBhbiBF
bWJlci5BcHBsaWNhdGlvbicsICFyb290RWxlbWVudC5pcyhST09UX0VMRU1FTlRfU0VMRUNUT1Ip
KTsKKyAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdZb3UgY2Fubm90IG1ha2UgYSBuZXcg
RW1iZXIuQXBwbGljYXRpb24gdXNpbmcgYSByb290IGVsZW1lbnQgdGhhdCBpcyBhIGRlc2NlbmRl
bnQgb2YgYW4gZXhpc3RpbmcgRW1iZXIuQXBwbGljYXRpb24nLCAhcm9vdEVsZW1lbnQuY2xvc2Vz
dChST09UX0VMRU1FTlRfU0VMRUNUT1IpLmxlbmd0aCk7CisgICAgICBfZW1iZXJNZXRhbERlYnVn
LmFzc2VydCgnWW91IGNhbm5vdCBtYWtlIGEgbmV3IEVtYmVyLkFwcGxpY2F0aW9uIHVzaW5nIGEg
cm9vdCBlbGVtZW50IHRoYXQgaXMgYW4gYW5jZXN0b3Igb2YgYW4gZXhpc3RpbmcgRW1iZXIuQXBw
bGljYXRpb24nLCAhcm9vdEVsZW1lbnQuZmluZChST09UX0VMRU1FTlRfU0VMRUNUT1IpLmxlbmd0
aCk7CisKKyAgICAgIHJvb3RFbGVtZW50LmFkZENsYXNzKFJPT1RfRUxFTUVOVF9DTEFTUyk7CisK
KyAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdVbmFibGUgdG8gYWRkIFwnJyArIFJPT1Rf
RUxFTUVOVF9DTEFTUyArICdcJyBjbGFzcyB0byByb290RWxlbWVudC4gTWFrZSBzdXJlIHlvdSBz
ZXQgcm9vdEVsZW1lbnQgdG8gdGhlIGJvZHkgb3IgYW4gZWxlbWVudCBpbiB0aGUgYm9keS4nLCBy
b290RWxlbWVudC5pcyhST09UX0VMRU1FTlRfU0VMRUNUT1IpKTsKKworICAgICAgZm9yIChldmVu
dCBpbiBldmVudHMpIHsKKyAgICAgICAgaWYgKGV2ZW50cy5oYXNPd25Qcm9wZXJ0eShldmVudCkp
IHsKKyAgICAgICAgICB0aGlzLnNldHVwSGFuZGxlcihyb290RWxlbWVudCwgZXZlbnQsIGV2ZW50
c1tldmVudF0pOworICAgICAgICB9CisgICAgICB9CisgICAgfSwKKworICAgIC8qKgorICAgICAg
UmVnaXN0ZXJzIGFuIGV2ZW50IGxpc3RlbmVyIG9uIHRoZSByb290RWxlbWVudC4gSWYgdGhlIGdp
dmVuIGV2ZW50IGlzCisgICAgICB0cmlnZ2VyZWQsIHRoZSBwcm92aWRlZCBldmVudCBoYW5kbGVy
IHdpbGwgYmUgdHJpZ2dlcmVkIG9uIHRoZSB0YXJnZXQgdmlldy4KKyAgICAgICBJZiB0aGUgdGFy
Z2V0IHZpZXcgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBldmVudCBoYW5kbGVyLCBvciBpZiB0aGUg
aGFuZGxlcgorICAgICAgcmV0dXJucyBgZmFsc2VgLCB0aGUgcGFyZW50IHZpZXcgd2lsbCBiZSBj
YWxsZWQuIFRoZSBldmVudCB3aWxsIGNvbnRpbnVlIHRvCisgICAgICBidWJibGUgdG8gZWFjaCBz
dWNjZXNzaXZlIHBhcmVudCB2aWV3IHVudGlsIGl0IHJlYWNoZXMgdGhlIHRvcC4KKyAgICAgICBA
cHJpdmF0ZQorICAgICAgQG1ldGhvZCBzZXR1cEhhbmRsZXIKKyAgICAgIEBwYXJhbSB7RWxlbWVu
dH0gcm9vdEVsZW1lbnQKKyAgICAgIEBwYXJhbSB7U3RyaW5nfSBldmVudCB0aGUgYnJvd3Nlci1v
cmlnaW5hdGVkIGV2ZW50IHRvIGxpc3RlbiB0bworICAgICAgQHBhcmFtIHtTdHJpbmd9IGV2ZW50
TmFtZSB0aGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRvIGNhbGwgb24gdGhlIHZpZXcKKyAgICAqLwor
ICAgIHNldHVwSGFuZGxlcjogZnVuY3Rpb24gKHJvb3RFbGVtZW50LCBldmVudCwgZXZlbnROYW1l
KSB7CisgICAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICAgIHZhciBvd25lciA9IF9jb250YWlu
ZXJPd25lci5nZXRPd25lcih0aGlzKTsKKyAgICAgIHZhciB2aWV3UmVnaXN0cnkgPSBvd25lciAm
JiBvd25lci5sb29rdXAoJy12aWV3LXJlZ2lzdHJ5Om1haW4nKSB8fCBfZW1iZXJWaWV3c1ZpZXdz
Vmlldy5kZWZhdWx0LnZpZXdzOworCisgICAgICBpZiAoZXZlbnROYW1lID09PSBudWxsKSB7Cisg
ICAgICAgIHJldHVybjsKKyAgICAgIH0KKworICAgICAgcm9vdEVsZW1lbnQub24oZXZlbnQgKyAn
LmVtYmVyJywgJy5lbWJlci12aWV3JywgZnVuY3Rpb24gKGV2dCwgdHJpZ2dlcmluZ01hbmFnZXIp
IHsKKyAgICAgICAgdmFyIHZpZXcgPSB2aWV3UmVnaXN0cnlbdGhpcy5pZF07CisgICAgICAgIHZh
ciByZXN1bHQgPSB0cnVlOworCisgICAgICAgIHZhciBtYW5hZ2VyID0gc2VsZi5jYW5EaXNwYXRj
aFRvRXZlbnRNYW5hZ2VyID8gc2VsZi5fZmluZE5lYXJlc3RFdmVudE1hbmFnZXIodmlldywgZXZl
bnROYW1lKSA6IG51bGw7CisKKyAgICAgICAgaWYgKG1hbmFnZXIgJiYgbWFuYWdlciAhPT0gdHJp
Z2dlcmluZ01hbmFnZXIpIHsKKyAgICAgICAgICByZXN1bHQgPSBzZWxmLl9kaXNwYXRjaEV2ZW50
KG1hbmFnZXIsIGV2dCwgZXZlbnROYW1lLCB2aWV3KTsKKyAgICAgICAgfSBlbHNlIGlmICh2aWV3
KSB7CisgICAgICAgICAgcmVzdWx0ID0gc2VsZi5fYnViYmxlRXZlbnQodmlldywgZXZ0LCBldmVu
dE5hbWUpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgIH0pOwor
CisgICAgICByb290RWxlbWVudC5vbihldmVudCArICcuZW1iZXInLCAnW2RhdGEtZW1iZXItYWN0
aW9uXScsIGZ1bmN0aW9uIChldnQpIHsKKyAgICAgICAgdmFyIGFjdGlvbklkID0gX2VtYmVyVmll
d3NTeXN0ZW1KcXVlcnkuZGVmYXVsdChldnQuY3VycmVudFRhcmdldCkuYXR0cignZGF0YS1lbWJl
ci1hY3Rpb24nKTsKKyAgICAgICAgdmFyIGFjdGlvbnMgPSBfZW1iZXJWaWV3c1N5c3RlbUFjdGlv
bl9tYW5hZ2VyLmRlZmF1bHQucmVnaXN0ZXJlZEFjdGlvbnNbYWN0aW9uSWRdOworCisgICAgICAg
IC8vIFdlIGhhdmUgdG8gY2hlY2sgZm9yIGFjdGlvbnMgaGVyZSBzaW5jZSBpbiBzb21lIGNhc2Vz
LCBqUXVlcnkgd2lsbCB0cmlnZ2VyCisgICAgICAgIC8vIGFuIGV2ZW50IG9uIGByZW1vdmVDaGls
ZGAgKGkuZS4gZm9jdXNvdXQpIGFmdGVyIHdlJ3ZlIGFscmVhZHkgdG9ybiBkb3duIHRoZQorICAg
ICAgICAvLyBhY3Rpb24gaGFuZGxlcnMgZm9yIHRoZSB2aWV3LgorICAgICAgICBpZiAoIWFjdGlv
bnMpIHsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHZhciBp
bmRleCA9IDAsIF9sZW5ndGggPSBhY3Rpb25zLmxlbmd0aDsgaW5kZXggPCBfbGVuZ3RoOyBpbmRl
eCsrKSB7CisgICAgICAgICAgdmFyIGFjdGlvbiA9IGFjdGlvbnNbaW5kZXhdOworCisgICAgICAg
ICAgaWYgKGFjdGlvbiAmJiBhY3Rpb24uZXZlbnROYW1lID09PSBldmVudE5hbWUpIHsKKyAgICAg
ICAgICAgIHJldHVybiBhY3Rpb24uaGFuZGxlcihldnQpOworICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgfSk7CisgICAgfSwKKworICAgIF9maW5kTmVhcmVzdEV2ZW50TWFuYWdlcjogZnVu
Y3Rpb24gKHZpZXcsIGV2ZW50TmFtZSkgeworICAgICAgdmFyIG1hbmFnZXIgPSBudWxsOworCisg
ICAgICB3aGlsZSAodmlldykgeworICAgICAgICBtYW5hZ2VyID0gX2VtYmVyTWV0YWxQcm9wZXJ0
eV9nZXQuZ2V0KHZpZXcsICdldmVudE1hbmFnZXInKTsKKyAgICAgICAgaWYgKG1hbmFnZXIgJiYg
bWFuYWdlcltldmVudE5hbWVdKSB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICB2aWV3ID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHZpZXcsICdwYXJlbnRWaWV3
Jyk7CisgICAgICB9CisKKyAgICAgIHJldHVybiBtYW5hZ2VyOworICAgIH0sCisKKyAgICBfZGlz
cGF0Y2hFdmVudDogZnVuY3Rpb24gKG9iamVjdCwgZXZ0LCBldmVudE5hbWUsIHZpZXcpIHsKKyAg
ICAgIHZhciByZXN1bHQgPSB0cnVlOworCisgICAgICB2YXIgaGFuZGxlciA9IG9iamVjdFtldmVu
dE5hbWVdOworICAgICAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7CisgICAg
ICAgIHJlc3VsdCA9IF9lbWJlck1ldGFsUnVuX2xvb3AuZGVmYXVsdChvYmplY3QsIGhhbmRsZXIs
IGV2dCwgdmlldyk7CisgICAgICAgIC8vIERvIG5vdCBwcmV2ZW50RGVmYXVsdCBpbiBldmVudE1h
bmFnZXJzLgorICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgICB9IGVsc2Ugewor
ICAgICAgICByZXN1bHQgPSB0aGlzLl9idWJibGVFdmVudCh2aWV3LCBldnQsIGV2ZW50TmFtZSk7
CisgICAgICB9CisKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfSwKKworICAgIF9idWJibGVF
dmVudDogZnVuY3Rpb24gKHZpZXcsIGV2dCwgZXZlbnROYW1lKSB7CisgICAgICByZXR1cm4gdmll
dy5oYW5kbGVFdmVudChldmVudE5hbWUsIGV2dCk7CisgICAgfSwKKworICAgIGRlc3Ryb3k6IGZ1
bmN0aW9uICgpIHsKKyAgICAgIHZhciByb290RWxlbWVudCA9IF9lbWJlck1ldGFsUHJvcGVydHlf
Z2V0LmdldCh0aGlzLCAncm9vdEVsZW1lbnQnKTsKKyAgICAgIF9lbWJlclZpZXdzU3lzdGVtSnF1
ZXJ5LmRlZmF1bHQocm9vdEVsZW1lbnQpLm9mZignLmVtYmVyJywgJyoqJykucmVtb3ZlQ2xhc3Mo
Uk9PVF9FTEVNRU5UX0NMQVNTKTsKKyAgICAgIHJldHVybiB0aGlzLl9zdXBlci5hcHBseSh0aGlz
LCBhcmd1bWVudHMpOworICAgIH0sCisKKyAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkgeworICAg
ICAgcmV0dXJuICcoRXZlbnREaXNwYXRjaGVyKSc7CisgICAgfQorICB9KTsKK30pOworZW5pZmVk
KCdlbWJlci12aWV3cy9zeXN0ZW0vZXh0JywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL3J1bl9s
b29wJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbFJ1bl9sb29wKSB7CisgIC8qKgor
ICBAbW9kdWxlIGVtYmVyCisgIEBzdWJtb2R1bGUgZW1iZXItdmlld3MKKyAgKi8KKworICAndXNl
IHN0cmljdCc7CisKKyAgLy8gQWRkIGEgbmV3IG5hbWVkIHF1ZXVlIGZvciByZW5kZXJpbmcgdmll
d3MgdGhhdCBoYXBwZW5zCisgIC8vIGFmdGVyIGJpbmRpbmdzIGhhdmUgc3luY2VkLCBhbmQgYSBx
dWV1ZSBmb3Igc2NoZWR1bGluZyBhY3Rpb25zCisgIC8vIHRoYXQgc2hvdWxkIG9jY3VyIGFmdGVy
IHZpZXcgcmVuZGVyaW5nLgorICBfZW1iZXJNZXRhbFJ1bl9sb29wLmRlZmF1bHQuX2FkZFF1ZXVl
KCdyZW5kZXInLCAnYWN0aW9ucycpOworICBfZW1iZXJNZXRhbFJ1bl9sb29wLmRlZmF1bHQuX2Fk
ZFF1ZXVlKCdhZnRlclJlbmRlcicsICdyZW5kZXInKTsKK30pOworZW5pZmVkKCdlbWJlci12aWV3
cy9zeXN0ZW0vanF1ZXJ5JywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2NvcmUnLCAnZW1iZXIt
bWV0YWwvZW52aXJvbm1lbnQnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsQ29yZSwg
X2VtYmVyTWV0YWxFbnZpcm9ubWVudCkgeworICAndXNlIHN0cmljdCc7CisKKyAgdmFyIGpRdWVy
eTsKKworICBpZiAoX2VtYmVyTWV0YWxFbnZpcm9ubWVudC5kZWZhdWx0Lmhhc0RPTSkgeworICAg
IC8vIG1haW5Db250ZXh0IGlzIHNldCBpbiBgcGFja2FnZS9sb2FkZXIvbGliL21haW4uanNgIHRv
IHRoZSBgdGhpc2AgY29udGV4dCBiZWZvcmUgZW50ZXJpbmcgc3RyaWN0IG1vZGUKKyAgICBqUXVl
cnkgPSBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5pbXBvcnRzICYmIF9lbWJlck1ldGFsQ29yZS5k
ZWZhdWx0LmltcG9ydHMualF1ZXJ5IHx8IG1haW5Db250ZXh0ICYmIG1haW5Db250ZXh0LmpRdWVy
eTsgLy9qc2hpbnQgaWdub3JlOmxpbmUKKyAgICBpZiAoIWpRdWVyeSAmJiB0eXBlb2YgcmVxdWly
ZSA9PT0gJ2Z1bmN0aW9uJykgeworICAgICAgalF1ZXJ5ID0gcmVxdWlyZSgnanF1ZXJ5Jyk7Cisg
ICAgfQorCisgICAgaWYgKGpRdWVyeSkgeworICAgICAgLy8gaHR0cDovL3d3dy53aGF0d2cub3Jn
L3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvZG5kLmh0bWwjZG5kZXZlbnRz
CisgICAgICB2YXIgZHJhZ0V2ZW50cyA9IFsnZHJhZ3N0YXJ0JywgJ2RyYWcnLCAnZHJhZ2VudGVy
JywgJ2RyYWdsZWF2ZScsICdkcmFnb3ZlcicsICdkcm9wJywgJ2RyYWdlbmQnXTsKKworICAgICAg
Ly8gQ29waWVzIHRoZSBgZGF0YVRyYW5zZmVyYCBwcm9wZXJ0eSBmcm9tIGEgYnJvd3NlciBldmVu
dCBvYmplY3Qgb250byB0aGUKKyAgICAgIC8vIGpRdWVyeSBldmVudCBvYmplY3QgZm9yIHRoZSBz
cGVjaWZpZWQgZXZlbnRzCisgICAgICBkcmFnRXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50
TmFtZSkgeworICAgICAgICBqUXVlcnkuZXZlbnQuZml4SG9va3NbZXZlbnROYW1lXSA9IHsKKyAg
ICAgICAgICBwcm9wczogWydkYXRhVHJhbnNmZXInXQorICAgICAgICB9OworICAgICAgfSk7Cisg
ICAgfQorICB9CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0galF1ZXJ5OworfSk7CisKKy8vIEVTNlRP
RE86IHRoZSBmdW5jdGlvbnMgb24gRW51bWVyYWJsZVV0aWxzIG5lZWQgdGhlaXIgb3duIGV4cG9y
dHMKK2VuaWZlZCgnZW1iZXItdmlld3Mvc3lzdGVtL2xvb2t1cF9wYXJ0aWFsJywgWydleHBvcnRz
JywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLW1ldGFsL2Vycm9yJ10sIGZ1bmN0aW9uIChl
eHBvcnRzLCBfZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJNZXRhbEVycm9yKSB7CisgICd1c2Ugc3Ry
aWN0JzsKKworICBleHBvcnRzLmRlZmF1bHQgPSBsb29rdXBQYXJ0aWFsOworCisgIGZ1bmN0aW9u
IGxvb2t1cFBhcnRpYWwoZW52LCB0ZW1wbGF0ZU5hbWUpIHsKKyAgICBpZiAodGVtcGxhdGVOYW1l
ID09IG51bGwpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2YXIgbmFtZVBhcnRzID0g
dGVtcGxhdGVOYW1lLnNwbGl0KCcvJyk7CisgICAgdmFyIGxhc3RQYXJ0ID0gbmFtZVBhcnRzW25h
bWVQYXJ0cy5sZW5ndGggLSAxXTsKKworICAgIG5hbWVQYXJ0c1tuYW1lUGFydHMubGVuZ3RoIC0g
MV0gPSAnXycgKyBsYXN0UGFydDsKKworICAgIHZhciB1bmRlcnNjb3JlZE5hbWUgPSBuYW1lUGFy
dHMuam9pbignLycpOworICAgIHZhciB0ZW1wbGF0ZSA9IHRlbXBsYXRlRm9yKGVudiwgdW5kZXJz
Y29yZWROYW1lLCB0ZW1wbGF0ZU5hbWUpOworCisgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQo
J1VuYWJsZSB0byBmaW5kIHBhcnRpYWwgd2l0aCBuYW1lICInICsgdGVtcGxhdGVOYW1lICsgJyIn
LCAhIXRlbXBsYXRlKTsKKworICAgIHJldHVybiB0ZW1wbGF0ZTsKKyAgfQorCisgIGZ1bmN0aW9u
IHRlbXBsYXRlRm9yKGVudiwgdW5kZXJzY29yZWQsIG5hbWUpIHsKKyAgICBpZiAoIW5hbWUpIHsK
KyAgICAgIHJldHVybjsKKyAgICB9CisgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ3RlbXBs
YXRlTmFtZXMgYXJlIG5vdCBhbGxvd2VkIHRvIGNvbnRhaW4gcGVyaW9kczogJyArIG5hbWUsIG5h
bWUuaW5kZXhPZignLicpID09PSAtMSk7CisKKyAgICBpZiAoIWVudi5vd25lcikgeworICAgICAg
dGhyb3cgbmV3IF9lbWJlck1ldGFsRXJyb3IuZGVmYXVsdCgnQ29udGFpbmVyIHdhcyBub3QgZm91
bmQgd2hlbiBsb29raW5nIHVwIGEgdmlld3MgdGVtcGxhdGUuICcgKyAnVGhpcyBpcyBtb3N0IGxp
a2VseSBkdWUgdG8gbWFudWFsbHkgaW5zdGFudGlhdGluZyBhbiBFbWJlci5WaWV3LiAnICsgJ1Nl
ZTogaHR0cDovL2dpdC5pby9FS1BwbkEnKTsKKyAgICB9CisKKyAgICByZXR1cm4gZW52Lm93bmVy
Lmxvb2t1cCgndGVtcGxhdGU6JyArIHVuZGVyc2NvcmVkKSB8fCBlbnYub3duZXIubG9va3VwKCd0
ZW1wbGF0ZTonICsgbmFtZSk7CisgIH0KK30pOworZW5pZmVkKCdlbWJlci12aWV3cy9zeXN0ZW0v
cGxhdGZvcm0nLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvZW52aXJvbm1lbnQnXSwgZnVuY3Rp
b24gKGV4cG9ydHMsIF9lbWJlck1ldGFsRW52aXJvbm1lbnQpIHsKKyAgJ3VzZSBzdHJpY3QnOwor
CisgIC8vIElFIDYvNyBoYXZlIGJ1Z3MgYXJvdW5kIHNldHRpbmcgbmFtZXMgb24gaW5wdXRzIGR1
cmluZyBjcmVhdGlvbi4KKyAgLy8gRnJvbSBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVz
L2xpYnJhcnkvaWUvbXM1MzYzODkodj12cy44NSkuYXNweDoKKyAgLy8gIlRvIGluY2x1ZGUgdGhl
IE5BTUUgYXR0cmlidXRlIGF0IHJ1biB0aW1lIG9uIG9iamVjdHMgY3JlYXRlZCB3aXRoIHRoZSBj
cmVhdGVFbGVtZW50IG1ldGhvZCwgdXNlIHRoZSBlVGFnLiIKKyAgdmFyIGNhblNldE5hbWVPbklu
cHV0cyA9IF9lbWJlck1ldGFsRW52aXJvbm1lbnQuZGVmYXVsdC5oYXNET00gJiYgKGZ1bmN0aW9u
ICgpIHsKKyAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAg
dmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKKworICAgIGVsLnNldEF0
dHJpYnV0ZSgnbmFtZScsICdmb28nKTsKKyAgICBkaXYuYXBwZW5kQ2hpbGQoZWwpOworCisgICAg
cmV0dXJuICEhZGl2LmlubmVySFRNTC5tYXRjaCgnZm9vJyk7CisgIH0pKCk7CisgIGV4cG9ydHMu
Y2FuU2V0TmFtZU9uSW5wdXRzID0gY2FuU2V0TmFtZU9uSW5wdXRzOworfSk7CitlbmlmZWQoImVt
YmVyLXZpZXdzL3N5c3RlbS91dGlscyIsIFsiZXhwb3J0cyJdLCBmdW5jdGlvbiAoZXhwb3J0cykg
eworICAvKioKKyAgQG1vZHVsZSBlbWJlcgorICBAc3VibW9kdWxlIGVtYmVyLXZpZXdzCisgICov
CisKKyAgInVzZSBzdHJpY3QiOworCisgIGV4cG9ydHMuaXNTaW1wbGVDbGljayA9IGlzU2ltcGxl
Q2xpY2s7CisgIGV4cG9ydHMuZ2V0Vmlld0NsaWVudFJlY3RzID0gZ2V0Vmlld0NsaWVudFJlY3Rz
OworICBleHBvcnRzLmdldFZpZXdCb3VuZGluZ0NsaWVudFJlY3QgPSBnZXRWaWV3Qm91bmRpbmdD
bGllbnRSZWN0OworCisgIGZ1bmN0aW9uIGlzU2ltcGxlQ2xpY2soZXZlbnQpIHsKKyAgICB2YXIg
bW9kaWZpZXIgPSBldmVudC5zaGlmdEtleSB8fCBldmVudC5tZXRhS2V5IHx8IGV2ZW50LmFsdEtl
eSB8fCBldmVudC5jdHJsS2V5OworICAgIHZhciBzZWNvbmRhcnlDbGljayA9IGV2ZW50LndoaWNo
ID4gMTsgLy8gSUU5IG1heSByZXR1cm4gdW5kZWZpbmVkCisKKyAgICByZXR1cm4gIW1vZGlmaWVy
ICYmICFzZWNvbmRhcnlDbGljazsKKyAgfQorCisgIC8qKgorICAgIEBwcml2YXRlCisgICAgQG1l
dGhvZCBnZXRWaWV3UmFuZ2UKKyAgICBAcGFyYW0ge0VtYmVyLlZpZXd9IHZpZXcKKyAgKi8KKyAg
ZnVuY3Rpb24gZ2V0Vmlld1JhbmdlKHZpZXcpIHsKKyAgICB2YXIgcmFuZ2UgPSBkb2N1bWVudC5j
cmVhdGVSYW5nZSgpOworICAgIHJhbmdlLnNldFN0YXJ0QmVmb3JlKHZpZXcuX3JlbmRlck5vZGUu
Zmlyc3ROb2RlKTsKKyAgICByYW5nZS5zZXRFbmRBZnRlcih2aWV3Ll9yZW5kZXJOb2RlLmxhc3RO
b2RlKTsKKyAgICByZXR1cm4gcmFuZ2U7CisgIH0KKworICAvKioKKyAgICBgZ2V0Vmlld0NsaWVu
dFJlY3RzYCBwcm92aWRlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcG9zaXRpb24gb2YgdGhlIGJv
cmRlcgorICAgIGJveCBlZGdlcyBvZiBhIHZpZXcgcmVsYXRpdmUgdG8gdGhlIHZpZXdwb3J0Lgor
ICAKKyAgICBJdCBpcyBvbmx5IGludGVuZGVkIHRvIGJlIHVzZWQgYnkgZGV2ZWxvcG1lbnQgdG9v
bHMgbGlrZSB0aGUgRW1iZXIgSW5zcGVjdG9yCisgICAgYW5kIG1heSBub3Qgd29yayBvbiBvbGRl
ciBicm93c2Vycy4KKyAgCisgICAgQHByaXZhdGUKKyAgICBAbWV0aG9kIGdldFZpZXdDbGllbnRS
ZWN0cworICAgIEBwYXJhbSB7RW1iZXIuVmlld30gdmlldworICAqLworCisgIGZ1bmN0aW9uIGdl
dFZpZXdDbGllbnRSZWN0cyh2aWV3KSB7CisgICAgdmFyIHJhbmdlID0gZ2V0Vmlld1JhbmdlKHZp
ZXcpOworICAgIHJldHVybiByYW5nZS5nZXRDbGllbnRSZWN0cygpOworICB9CisKKyAgLyoqCisg
ICAgYGdldFZpZXdCb3VuZGluZ0NsaWVudFJlY3RgIHByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0
IHRoZSBwb3NpdGlvbiBvZiB0aGUKKyAgICBib3VuZGluZyBib3JkZXIgYm94IGVkZ2VzIG9mIGEg
dmlldyByZWxhdGl2ZSB0byB0aGUgdmlld3BvcnQuCisgIAorICAgIEl0IGlzIG9ubHkgaW50ZW5k
ZWQgdG8gYmUgdXNlZCBieSBkZXZlbG9wbWVudCB0b29scyBsaWtlIHRoZSBFbWJlciBJbnBzZWN0
b3IKKyAgICBhbmQgbWF5IG5vdCB3b3JrIG9uIG9sZGVyIGJyb3dzZXJzLgorICAKKyAgICBAcHJp
dmF0ZQorICAgIEBtZXRob2QgZ2V0Vmlld0JvdW5kaW5nQ2xpZW50UmVjdAorICAgIEBwYXJhbSB7
RW1iZXIuVmlld30gdmlldworICAqLworCisgIGZ1bmN0aW9uIGdldFZpZXdCb3VuZGluZ0NsaWVu
dFJlY3QodmlldykgeworICAgIHZhciByYW5nZSA9IGdldFZpZXdSYW5nZSh2aWV3KTsKKyAgICBy
ZXR1cm4gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisgIH0KK30pOworZW5pZmVkKCdl
bWJlci12aWV3cy92aWV3cy9jaGVja2JveCcsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9wcm9w
ZXJ0eV9nZXQnLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfc2V0JywgJ2VtYmVyLXZpZXdzL2NvbXBv
bmVudHMvY29tcG9uZW50J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbFByb3BlcnR5
X2dldCwgX2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQsIF9lbWJlclZpZXdzQ29tcG9uZW50c0NvbXBv
bmVudCkgeworICAndXNlIHN0cmljdCc7CisKKyAgLyoqCisgIEBtb2R1bGUgZW1iZXIKKyAgQHN1
Ym1vZHVsZSBlbWJlci12aWV3cworICAqLworCisgIC8qKgorICAgIFRoZSBpbnRlcm5hbCBjbGFz
cyB1c2VkIHRvIGNyZWF0ZSB0ZXh0IGlucHV0cyB3aGVuIHRoZSBge3tpbnB1dH19YAorICAgIGhl
bHBlciBpcyB1c2VkIHdpdGggYHR5cGVgIG9mIGBjaGVja2JveGAuCisgIAorICAgIFNlZSBbRW1i
ZXIuVGVtcGxhdGVzLmhlbHBlcnMuaW5wdXRdKC9hcGkvY2xhc3Nlcy9FbWJlci5UZW1wbGF0ZXMu
aGVscGVycy5odG1sI21ldGhvZF9pbnB1dCkgIGZvciB1c2FnZSBkZXRhaWxzLgorICAKKyAgICAj
IyBEaXJlY3QgbWFuaXB1bGF0aW9uIG9mIGBjaGVja2VkYAorICAKKyAgICBUaGUgYGNoZWNrZWRg
IGF0dHJpYnV0ZSBvZiBhbiBgRW1iZXIuQ2hlY2tib3hgIG9iamVjdCBzaG91bGQgYWx3YXlzIGJl
IHNldAorICAgIHRocm91Z2ggdGhlIEVtYmVyIG9iamVjdCBvciBieSBpbnRlcmFjdGluZyB3aXRo
IGl0cyByZW5kZXJlZCBlbGVtZW50CisgICAgcmVwcmVzZW50YXRpb24gdmlhIHRoZSBtb3VzZSwg
a2V5Ym9hcmQsIG9yIHRvdWNoLiBVcGRhdGluZyB0aGUgdmFsdWUgb2YgdGhlCisgICAgY2hlY2ti
b3ggdmlhIGpRdWVyeSB3aWxsIHJlc3VsdCBpbiB0aGUgY2hlY2tlZCB2YWx1ZSBvZiB0aGUgb2Jq
ZWN0IGFuZCBpdHMKKyAgICBlbGVtZW50IGxvc2luZyBzeW5jaHJvbml6YXRpb24uCisgIAorICAg
ICMjIExheW91dCBhbmQgTGF5b3V0TmFtZSBwcm9wZXJ0aWVzCisgIAorICAgIEJlY2F1c2UgSFRN
TCBgaW5wdXRgIGVsZW1lbnRzIGFyZSBzZWxmIGNsb3NpbmcgYGxheW91dGAgYW5kIGBsYXlvdXRO
YW1lYAorICAgIHByb3BlcnRpZXMgd2lsbCBub3QgYmUgYXBwbGllZC4gU2VlIFtFbWJlci5WaWV3
XSgvYXBpL2NsYXNzZXMvRW1iZXIuVmlldy5odG1sKSdzCisgICAgbGF5b3V0IHNlY3Rpb24gZm9y
IG1vcmUgaW5mb3JtYXRpb24uCisgIAorICAgIEBjbGFzcyBDaGVja2JveAorICAgIEBuYW1lc3Bh
Y2UgRW1iZXIKKyAgICBAZXh0ZW5kcyBFbWJlci5Db21wb25lbnQKKyAgICBAcHVibGljCisgICov
CisgIGV4cG9ydHMuZGVmYXVsdCA9IF9lbWJlclZpZXdzQ29tcG9uZW50c0NvbXBvbmVudC5kZWZh
dWx0LmV4dGVuZCh7CisgICAgaW5zdHJ1bWVudERpc3BsYXk6ICd7e2lucHV0IHR5cGU9ImNoZWNr
Ym94In19JywKKworICAgIGNsYXNzTmFtZXM6IFsnZW1iZXItY2hlY2tib3gnXSwKKworICAgIHRh
Z05hbWU6ICdpbnB1dCcsCisKKyAgICBhdHRyaWJ1dGVCaW5kaW5nczogWyd0eXBlJywgJ2NoZWNr
ZWQnLCAnaW5kZXRlcm1pbmF0ZScsICdkaXNhYmxlZCcsICd0YWJpbmRleCcsICduYW1lJywgJ2F1
dG9mb2N1cycsICdyZXF1aXJlZCcsICdmb3JtJ10sCisKKyAgICB0eXBlOiAnY2hlY2tib3gnLAor
ICAgIGNoZWNrZWQ6IGZhbHNlLAorICAgIGRpc2FibGVkOiBmYWxzZSwKKyAgICBpbmRldGVybWlu
YXRlOiBmYWxzZSwKKworICAgIGRpZEluc2VydEVsZW1lbnQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
IHRoaXMuX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICBfZW1iZXJNZXRhbFBy
b3BlcnR5X2dldC5nZXQodGhpcywgJ2VsZW1lbnQnKS5pbmRldGVybWluYXRlID0gISFfZW1iZXJN
ZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ2luZGV0ZXJtaW5hdGUnKTsKKyAgICB9LAorCisg
ICAgY2hhbmdlOiBmdW5jdGlvbiAoKSB7CisgICAgICBfZW1iZXJNZXRhbFByb3BlcnR5X3NldC5z
ZXQodGhpcywgJ2NoZWNrZWQnLCB0aGlzLiQoKS5wcm9wKCdjaGVja2VkJykpOworICAgIH0KKyAg
fSk7Cit9KTsKK2VuaWZlZCgnZW1iZXItdmlld3Mvdmlld3MvY29yZV92aWV3JywgWydleHBvcnRz
JywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCcsICdlbWJl
ci1ydW50aW1lL3N5c3RlbS9vYmplY3QnLCAnZW1iZXItcnVudGltZS9taXhpbnMvZXZlbnRlZCcs
ICdlbWJlci1ydW50aW1lL21peGlucy9hY3Rpb25faGFuZGxlcicsICdlbWJlci1ydW50aW1lL3V0
aWxzJywgJ2VtYmVyLW1ldGFsLXZpZXdzJywgJ2VtYmVyLXZpZXdzL3ZpZXdzL3N0YXRlcycsICdo
dG1sYmFycy1ydW50aW1lJywgJ3JlcXVpcmUnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1l
dGFsRGVidWcsIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LCBfZW1iZXJSdW50aW1lU3lzdGVtT2Jq
ZWN0LCBfZW1iZXJSdW50aW1lTWl4aW5zRXZlbnRlZCwgX2VtYmVyUnVudGltZU1peGluc0FjdGlv
bl9oYW5kbGVyLCBfZW1iZXJSdW50aW1lVXRpbHMsIF9lbWJlck1ldGFsVmlld3MsIF9lbWJlclZp
ZXdzVmlld3NTdGF0ZXMsIF9odG1sYmFyc1J1bnRpbWUsIF9yZXF1aXJlKSB7CisgICd1c2Ugc3Ry
aWN0JzsKKworICAvLyBOb3JtYWxseSwgdGhlIHJlbmRlcmVyIGlzIGluamVjdGVkIGJ5IHRoZSBj
b250YWluZXIgd2hlbiB0aGUgdmlldyBpcyBsb29rZWQKKyAgLy8gdXAuIEhvd2V2ZXIsIGlmIHNv
bWVvbmUgY3JlYXRlcyBhIHZpZXcgd2l0aG91dCBsb29raW5nIGl0IHVwIHZpYSB0aGUKKyAgLy8g
Y29udGFpbmVyIChlLmcuIGBFbWJlci5WaWV3LmNyZWF0ZSgpLmFwcGVuZCgpYCkgdGhlbiB3ZSBj
cmVhdGUgYSBmYWxsYmFjaworICAvLyBET00gcmVuZGVyZXIgdGhhdCBpcyBzaGFyZWQuIEluIGdl
bmVyYWwsIHRoaXMgcGF0aCBzaG91bGQgYmUgYXZvaWRlZCBzaW5jZQorICAvLyB2aWV3cyBjcmVh
dGVkIHRoaXMgd2F5IGNhbm5vdCBydW4gaW4gYSBub2RlIGVudmlyb25tZW50LgorICB2YXIgcmVu
ZGVyZXI7CisKKyAgLyoqCisgICAgYEVtYmVyLkNvcmVWaWV3YCBpcyBhbiBhYnN0cmFjdCBjbGFz
cyB0aGF0IGV4aXN0cyB0byBnaXZlIHZpZXctbGlrZSBiZWhhdmlvcgorICAgIHRvIGJvdGggRW1i
ZXIncyBtYWluIHZpZXcgY2xhc3MgYEVtYmVyLlZpZXdgIGFuZCBvdGhlciBjbGFzc2VzIHRoYXQg
ZG9uJ3QgbmVlZAorICAgIHRoZSBmdWxseSBmdW5jdGlvbmFsdGl5IG9mIGBFbWJlci5WaWV3YC4K
KyAgCisgICAgVW5sZXNzIHlvdSBoYXZlIHNwZWNpZmljIG5lZWRzIGZvciBgQ29yZVZpZXdgLCB5
b3Ugd2lsbCB1c2UgYEVtYmVyLlZpZXdgCisgICAgaW4geW91ciBhcHBsaWNhdGlvbnMuCisgIAor
ICAgIEBjbGFzcyBDb3JlVmlldworICAgIEBuYW1lc3BhY2UgRW1iZXIKKyAgICBAZXh0ZW5kcyBF
bWJlci5PYmplY3QKKyAgICBAZGVwcmVjYXRlZCBVc2UgYEVtYmVyLlZpZXdgIGluc3RlYWQuCisg
ICAgQHVzZXMgRW1iZXIuRXZlbnRlZAorICAgIEB1c2VzIEVtYmVyLkFjdGlvbkhhbmRsZXIKKyAg
ICBAcHJpdmF0ZQorICAqLworICB2YXIgQ29yZVZpZXcgPSBfZW1iZXJSdW50aW1lU3lzdGVtT2Jq
ZWN0LmRlZmF1bHQuZXh0ZW5kKF9lbWJlclJ1bnRpbWVNaXhpbnNFdmVudGVkLmRlZmF1bHQsIF9l
bWJlclJ1bnRpbWVNaXhpbnNBY3Rpb25faGFuZGxlci5kZWZhdWx0LCB7CisgICAgaXNWaWV3OiB0
cnVlLAorCisgICAgX3N0YXRlczogX2VtYmVyVmlld3NWaWV3c1N0YXRlcy5jbG9uZVN0YXRlcyhf
ZW1iZXJWaWV3c1ZpZXdzU3RhdGVzLnN0YXRlcyksCisKKyAgICBpbml0OiBmdW5jdGlvbiAoKSB7
CisgICAgICB0aGlzLl9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgICAgdGhpcy5f
c3RhdGUgPSAncHJlUmVuZGVyJzsKKyAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZSA9IHRoaXMuX3N0
YXRlcy5wcmVSZW5kZXI7CisgICAgICB0aGlzLl9pc1Zpc2libGUgPSBfZW1iZXJNZXRhbFByb3Bl
cnR5X2dldC5nZXQodGhpcywgJ2lzVmlzaWJsZScpOworCisgICAgICAvLyBGYWxsYmFjayBmb3Ig
bGVnYWN5IGNhc2VzIHdoZXJlIHRoZSB2aWV3IHdhcyBjcmVhdGVkIGRpcmVjdGx5CisgICAgICAv
LyB2aWEgYGNyZWF0ZSgpYCBpbnN0ZWFkIG9mIGdvaW5nIHRocm91Z2ggdGhlIGNvbnRhaW5lci4K
KyAgICAgIGlmICghdGhpcy5yZW5kZXJlcikgeworICAgICAgICB2YXIgRE9NSGVscGVyID0gZG9t
SGVscGVyKCk7CisgICAgICAgIHJlbmRlcmVyID0gcmVuZGVyZXIgfHwgX2VtYmVyTWV0YWxWaWV3
cy5JbnRlcmFjdGl2ZVJlbmRlcmVyLmNyZWF0ZSh7IGRvbTogbmV3IERPTUhlbHBlcigpIH0pOwor
ICAgICAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7CisgICAgICB9CisKKyAgICAgIHRoaXMu
X2Rlc3Ryb3lpbmdTdWJ0cmVlRm9yVmlldyA9IG51bGw7CisgICAgICB0aGlzLl9kaXNwYXRjaGlu
ZyA9IG51bGw7CisgICAgfSwKKworICAgIC8qKgorICAgICAgSWYgdGhlIHZpZXcgaXMgY3VycmVu
dGx5IGluc2VydGVkIGludG8gdGhlIERPTSBvZiBhIHBhcmVudCB2aWV3LCB0aGlzCisgICAgICBw
cm9wZXJ0eSB3aWxsIHBvaW50IHRvIHRoZSBwYXJlbnQgb2YgdGhlIHZpZXcuCisgICAgICAgQHBy
b3BlcnR5IHBhcmVudFZpZXcKKyAgICAgIEB0eXBlIEVtYmVyLlZpZXcKKyAgICAgIEBkZWZhdWx0
IG51bGwKKyAgICAgIEBwcml2YXRlCisgICAgKi8KKyAgICBwYXJlbnRWaWV3OiBudWxsLAorCisg
ICAgaW5zdHJ1bWVudE5hbWU6ICdjb3JlX3ZpZXcnLAorCisgICAgaW5zdHJ1bWVudERldGFpbHM6
IGZ1bmN0aW9uIChoYXNoKSB7CisgICAgICBoYXNoLm9iamVjdCA9IHRoaXMudG9TdHJpbmcoKTsK
KyAgICAgIGhhc2guY29udGFpbmVyS2V5ID0gdGhpcy5fZGVidWdDb250YWluZXJLZXk7CisgICAg
ICBoYXNoLnZpZXcgPSB0aGlzOworICAgIH0sCisKKyAgICAvKioKKyAgICAgIE92ZXJyaWRlIHRo
ZSBkZWZhdWx0IGV2ZW50IGZpcmluZyBmcm9tIGBFbWJlci5FdmVudGVkYCB0bworICAgICAgYWxz
byBjYWxsIG1ldGhvZHMgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKyAgICAgICBAbWV0aG9kIHRyaWdn
ZXIKKyAgICAgIEBwYXJhbSBuYW1lIHtTdHJpbmd9CisgICAgICBAcHJpdmF0ZQorICAgICovCisg
ICAgdHJpZ2dlcjogZnVuY3Rpb24gKCkgeworICAgICAgdGhpcy5fc3VwZXIuYXBwbHkodGhpcywg
YXJndW1lbnRzKTsKKyAgICAgIHZhciBuYW1lID0gYXJndW1lbnRzWzBdOworICAgICAgdmFyIG1l
dGhvZCA9IHRoaXNbbmFtZV07CisgICAgICBpZiAobWV0aG9kKSB7CisgICAgICAgIHZhciBsZW5n
dGggPSBhcmd1bWVudHMubGVuZ3RoOworICAgICAgICB2YXIgYXJncyA9IG5ldyBBcnJheShsZW5n
dGggLSAxKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBsZW5ndGg7IGkrKykgeworICAg
ICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBtZXRob2QuYXBwbHkodGhpcywgYXJncyk7CisgICAgICB9CisgICAgfSwKKworICAgIGhh
czogZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgIHJldHVybiBfZW1iZXJSdW50aW1lVXRpbHMudHlw
ZU9mKHRoaXNbbmFtZV0pID09PSAnZnVuY3Rpb24nIHx8IHRoaXMuX3N1cGVyKG5hbWUpOworICAg
IH0sCisKKyAgICBkZXN0cm95OiBmdW5jdGlvbiAoKSB7CisgICAgICBpZiAoIXRoaXMuX3N1cGVy
LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorCisg
ICAgICB0aGlzLl9jdXJyZW50U3RhdGUuY2xlYW51cCh0aGlzKTsKKworICAgICAgLy8gSWYgdGhl
IGRlc3Ryb3lpbmdTdWJ0cmVlRm9yVmlldyBwcm9wZXJ0eSBpcyBub3Qgc2V0IGJ1dCB3ZSBoYXZl
IGFuCisgICAgICAvLyBhc3NvY2lhdGVkIHJlbmRlciBub2RlLCBpdCBtZWFucyB0aGlzIHZpZXcg
aXMgYmVpbmcgZGVzdHJveWVkIGZyb20gdXNlcgorICAgICAgLy8gY29kZSBhbmQgbm90IHZpYSBh
IGNoYW5nZSBpbiB0aGUgdGVtcGxhdGluZyBsYXllciAobGlrZSBhbiB7e2lmfX0KKyAgICAgIC8v
IGJlY29taW5nIGZhbHN5LCBmb3IgZXhhbXBsZSkuICBJbiB0aGlzIGNhc2UsIGl0IGlzIG91ciBy
ZXNwb25zaWJpbGl0eSB0bworICAgICAgLy8gbWFrZSBzdXJlIHRoYXQgYW55IHJlbmRlciBub2Rl
cyBjcmVhdGVkIGFzIHBhcnQgb2YgdGhlIHJlbmRlcmluZyBwcm9jZXNzCisgICAgICAvLyBhcmUg
Y2xlYW5lZCB1cC4KKyAgICAgIGlmICghdGhpcy5vd25lclZpZXcuX2Rlc3Ryb3lpbmdTdWJ0cmVl
Rm9yVmlldyAmJiB0aGlzLl9yZW5kZXJOb2RlKSB7CisgICAgICAgIF9lbWJlck1ldGFsRGVidWcu
YXNzZXJ0KCdCVUc6IFJlbmRlciBub2RlIGV4aXN0cyB3aXRob3V0IGNvbmNvbWl0YW50IGVudi4n
LCB0aGlzLm93bmVyVmlldy5lbnYpOworICAgICAgICBfaHRtbGJhcnNSdW50aW1lLmludGVybmFs
LmNsZWFyTW9ycGgodGhpcy5fcmVuZGVyTm9kZSwgdGhpcy5vd25lclZpZXcuZW52LCB0cnVlKTsK
KyAgICAgIH0KKworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorICB9KTsKKworICBfZW1iZXJS
dW50aW1lTWl4aW5zQWN0aW9uX2hhbmRsZXIuZGVwcmVjYXRlVW5kZXJzY29yZUFjdGlvbnMoQ29y
ZVZpZXcpOworCisgIENvcmVWaWV3LnJlb3BlbkNsYXNzKHsKKyAgICBpc1ZpZXdGYWN0b3J5OiB0
cnVlCisgIH0pOworCisgIHZhciBfZG9tSGVscGVyOworICBmdW5jdGlvbiBkb21IZWxwZXIoKSB7
CisgICAgcmV0dXJuIF9kb21IZWxwZXIgPSBfZG9tSGVscGVyIHx8IF9yZXF1aXJlLmRlZmF1bHQo
J2VtYmVyLWh0bWxiYXJzL3N5c3RlbS9kb20taGVscGVyJykuZGVmYXVsdDsKKyAgfQorCisgIGV4
cG9ydHMuZGVmYXVsdCA9IENvcmVWaWV3OworfSk7CitlbmlmZWQoJ2VtYmVyLXZpZXdzL3ZpZXdz
L3N0YXRlcycsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9hc3NpZ24nLCAnZW1iZXItdmlld3Mv
dmlld3Mvc3RhdGVzL2RlZmF1bHQnLCAnZW1iZXItdmlld3Mvdmlld3Mvc3RhdGVzL3ByZV9yZW5k
ZXInLCAnZW1iZXItdmlld3Mvdmlld3Mvc3RhdGVzL2hhc19lbGVtZW50JywgJ2VtYmVyLXZpZXdz
L3ZpZXdzL3N0YXRlcy9pbl9kb20nLCAnZW1iZXItdmlld3Mvdmlld3Mvc3RhdGVzL2Rlc3Ryb3lp
bmcnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsQXNzaWduLCBfZW1iZXJWaWV3c1Zp
ZXdzU3RhdGVzRGVmYXVsdCwgX2VtYmVyVmlld3NWaWV3c1N0YXRlc1ByZV9yZW5kZXIsIF9lbWJl
clZpZXdzVmlld3NTdGF0ZXNIYXNfZWxlbWVudCwgX2VtYmVyVmlld3NWaWV3c1N0YXRlc0luX2Rv
bSwgX2VtYmVyVmlld3NWaWV3c1N0YXRlc0Rlc3Ryb3lpbmcpIHsKKyAgJ3VzZSBzdHJpY3QnOwor
CisgIGV4cG9ydHMuY2xvbmVTdGF0ZXMgPSBjbG9uZVN0YXRlczsKKworICBmdW5jdGlvbiBjbG9u
ZVN0YXRlcyhmcm9tKSB7CisgICAgdmFyIGludG8gPSB7fTsKKworICAgIGludG8uX2RlZmF1bHQg
PSB7fTsKKyAgICBpbnRvLnByZVJlbmRlciA9IE9iamVjdC5jcmVhdGUoaW50by5fZGVmYXVsdCk7
CisgICAgaW50by5kZXN0cm95aW5nID0gT2JqZWN0LmNyZWF0ZShpbnRvLl9kZWZhdWx0KTsKKyAg
ICBpbnRvLmhhc0VsZW1lbnQgPSBPYmplY3QuY3JlYXRlKGludG8uX2RlZmF1bHQpOworICAgIGlu
dG8uaW5ET00gPSBPYmplY3QuY3JlYXRlKGludG8uaGFzRWxlbWVudCk7CisKKyAgICBmb3IgKHZh
ciBzdGF0ZU5hbWUgaW4gZnJvbSkgeworICAgICAgaWYgKCFmcm9tLmhhc093blByb3BlcnR5KHN0
YXRlTmFtZSkpIHsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisgICAgICBfZW1iZXJNZXRh
bEFzc2lnbi5kZWZhdWx0KGludG9bc3RhdGVOYW1lXSwgZnJvbVtzdGF0ZU5hbWVdKTsKKyAgICB9
CisKKyAgICByZXR1cm4gaW50bzsKKyAgfQorCisgIHZhciBzdGF0ZXMgPSB7CisgICAgX2RlZmF1
bHQ6IF9lbWJlclZpZXdzVmlld3NTdGF0ZXNEZWZhdWx0LmRlZmF1bHQsCisgICAgcHJlUmVuZGVy
OiBfZW1iZXJWaWV3c1ZpZXdzU3RhdGVzUHJlX3JlbmRlci5kZWZhdWx0LAorICAgIGluRE9NOiBf
ZW1iZXJWaWV3c1ZpZXdzU3RhdGVzSW5fZG9tLmRlZmF1bHQsCisgICAgaGFzRWxlbWVudDogX2Vt
YmVyVmlld3NWaWV3c1N0YXRlc0hhc19lbGVtZW50LmRlZmF1bHQsCisgICAgZGVzdHJveWluZzog
X2VtYmVyVmlld3NWaWV3c1N0YXRlc0Rlc3Ryb3lpbmcuZGVmYXVsdAorICB9OworICBleHBvcnRz
LnN0YXRlcyA9IHN0YXRlczsKK30pOworZW5pZmVkKCdlbWJlci12aWV3cy92aWV3cy9zdGF0ZXMv
ZGVmYXVsdCcsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9lcnJvcicsICdlbWJlci1tZXRhbC9w
cm9wZXJ0eV9nZXQnLCAnZW1iZXItdmlld3MvY29tcGF0L2F0dHJzLXByb3h5J10sIGZ1bmN0aW9u
IChleHBvcnRzLCBfZW1iZXJNZXRhbEVycm9yLCBfZW1iZXJNZXRhbFByb3BlcnR5X2dldCwgX2Vt
YmVyVmlld3NDb21wYXRBdHRyc1Byb3h5KSB7CisgICd1c2Ugc3RyaWN0JzsKKworICAvKioKKyAg
QG1vZHVsZSBlbWJlcgorICBAc3VibW9kdWxlIGVtYmVyLXZpZXdzCisgICovCisgIGV4cG9ydHMu
ZGVmYXVsdCA9IHsKKyAgICAvLyBhcHBlbmRDaGlsZCBpcyBvbmx5IGxlZ2FsIHdoaWxlIHJlbmRl
cmluZyB0aGUgYnVmZmVyLgorICAgIGFwcGVuZENoaWxkOiBmdW5jdGlvbiAoKSB7CisgICAgICB0
aHJvdyBuZXcgX2VtYmVyTWV0YWxFcnJvci5kZWZhdWx0KCdZb3UgY2FuXCd0IHVzZSBhcHBlbmRD
aGlsZCBvdXRzaWRlIG9mIHRoZSByZW5kZXJpbmcgcHJvY2VzcycpOworICAgIH0sCisKKyAgICAk
OiBmdW5jdGlvbiAoKSB7CisgICAgICByZXR1cm4gdW5kZWZpbmVkOworICAgIH0sCisKKyAgICBn
ZXRFbGVtZW50OiBmdW5jdGlvbiAoKSB7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9LAorCisg
ICAgbGVnYWN5UHJvcGVydHlEaWRDaGFuZ2U6IGZ1bmN0aW9uICh2aWV3LCBrZXkpIHsKKyAgICAg
IHZhciBhdHRycyA9IHZpZXcuYXR0cnM7CisgICAgICBpZiAoYXR0cnMgJiYga2V5IGluIGF0dHJz
KSB7CisgICAgICAgIHZhciBwb3NzaWJsZUNlbGwgPSBhdHRyc1trZXldOworCisgICAgICAgIGlm
IChwb3NzaWJsZUNlbGwgJiYgcG9zc2libGVDZWxsW19lbWJlclZpZXdzQ29tcGF0QXR0cnNQcm94
eS5NVVRBQkxFX0NFTExdKSB7CisgICAgICAgICAgdmFyIHZhbHVlID0gX2VtYmVyTWV0YWxQcm9w
ZXJ0eV9nZXQuZ2V0KHZpZXcsIGtleSk7CisgICAgICAgICAgaWYgKHZhbHVlID09PSBwb3NzaWJs
ZUNlbGwudmFsdWUpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICB9CisgICAgICAg
ICAgcG9zc2libGVDZWxsLnVwZGF0ZSh2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9
LAorCisgICAgLy8gSGFuZGxlIGV2ZW50cyBmcm9tIGBFbWJlci5FdmVudERpc3BhdGNoZXJgCisg
ICAgaGFuZGxlRXZlbnQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHJldHVybiB0cnVlOyAvLyBjb250
aW51ZSBldmVudCBwcm9wYWdhdGlvbgorICAgIH0sCisKKyAgICBjbGVhbnVwOiBmdW5jdGlvbiAo
KSB7fSwKKyAgICBkZXN0cm95RWxlbWVudDogZnVuY3Rpb24gKCkge30sCisKKyAgICByZXJlbmRl
cjogZnVuY3Rpb24gKHZpZXcpIHsKKyAgICAgIHZpZXcucmVuZGVyZXIuZW5zdXJlVmlld05vdFJl
bmRlcmluZyh2aWV3KTsKKyAgICB9LAorICAgIGludm9rZU9ic2VydmVyOiBmdW5jdGlvbiAoKSB7
fQorICB9OworfSk7CitlbmlmZWQoJ2VtYmVyLXZpZXdzL3ZpZXdzL3N0YXRlcy9kZXN0cm95aW5n
JywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2Fzc2lnbicsICdlbWJlci12aWV3cy92aWV3cy9z
dGF0ZXMvZGVmYXVsdCcsICdlbWJlci1tZXRhbC9lcnJvciddLCBmdW5jdGlvbiAoZXhwb3J0cywg
X2VtYmVyTWV0YWxBc3NpZ24sIF9lbWJlclZpZXdzVmlld3NTdGF0ZXNEZWZhdWx0LCBfZW1iZXJN
ZXRhbEVycm9yKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICAvKioKKyAgQG1vZHVsZSBlbWJlcgor
ICBAc3VibW9kdWxlIGVtYmVyLXZpZXdzCisgICovCisKKyAgdmFyIGRlc3Ryb3lpbmcgPSBPYmpl
Y3QuY3JlYXRlKF9lbWJlclZpZXdzVmlld3NTdGF0ZXNEZWZhdWx0LmRlZmF1bHQpOworCisgIF9l
bWJlck1ldGFsQXNzaWduLmRlZmF1bHQoZGVzdHJveWluZywgeworICAgIGFwcGVuZENoaWxkOiBm
dW5jdGlvbiAoKSB7CisgICAgICB0aHJvdyBuZXcgX2VtYmVyTWV0YWxFcnJvci5kZWZhdWx0KCdZ
b3UgY2FuXCd0IGNhbGwgYXBwZW5kQ2hpbGQgb24gYSB2aWV3IGJlaW5nIGRlc3Ryb3llZCcpOwor
ICAgIH0sCisgICAgcmVyZW5kZXI6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHRocm93IG5ldyBfZW1i
ZXJNZXRhbEVycm9yLmRlZmF1bHQoJ1lvdSBjYW5cJ3QgY2FsbCByZXJlbmRlciBvbiBhIHZpZXcg
YmVpbmcgZGVzdHJveWVkJyk7CisgICAgfSwKKyAgICBkZXN0cm95RWxlbWVudDogZnVuY3Rpb24g
KCkgeworICAgICAgdGhyb3cgbmV3IF9lbWJlck1ldGFsRXJyb3IuZGVmYXVsdCgnWW91IGNhblwn
dCBjYWxsIGRlc3Ryb3lFbGVtZW50IG9uIGEgdmlldyBiZWluZyBkZXN0cm95ZWQnKTsKKyAgICB9
CisgIH0pOworCisgIGV4cG9ydHMuZGVmYXVsdCA9IGRlc3Ryb3lpbmc7Cit9KTsKK2VuaWZlZCgn
ZW1iZXItdmlld3Mvdmlld3Mvc3RhdGVzL2hhc19lbGVtZW50JywgWydleHBvcnRzJywgJ2VtYmVy
LXZpZXdzL3ZpZXdzL3N0YXRlcy9kZWZhdWx0JywgJ2VtYmVyLW1ldGFsL2Fzc2lnbicsICdlbWJl
ci12aWV3cy9zeXN0ZW0vanF1ZXJ5JywgJ2VtYmVyLW1ldGFsL3J1bl9sb29wJywgJ2VtYmVyLW1l
dGFsL2luc3RydW1lbnRhdGlvbicsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQnXSwgZnVuY3Rp
b24gKGV4cG9ydHMsIF9lbWJlclZpZXdzVmlld3NTdGF0ZXNEZWZhdWx0LCBfZW1iZXJNZXRhbEFz
c2lnbiwgX2VtYmVyVmlld3NTeXN0ZW1KcXVlcnksIF9lbWJlck1ldGFsUnVuX2xvb3AsIF9lbWJl
ck1ldGFsSW5zdHJ1bWVudGF0aW9uLCBfZW1iZXJNZXRhbFByb3BlcnR5X2dldCkgeworICAndXNl
IHN0cmljdCc7CisKKyAgdmFyIGhhc0VsZW1lbnQgPSBPYmplY3QuY3JlYXRlKF9lbWJlclZpZXdz
Vmlld3NTdGF0ZXNEZWZhdWx0LmRlZmF1bHQpOworCisgIF9lbWJlck1ldGFsQXNzaWduLmRlZmF1
bHQoaGFzRWxlbWVudCwgeworICAgICQ6IGZ1bmN0aW9uICh2aWV3LCBzZWwpIHsKKyAgICAgIHZh
ciBlbGVtID0gdmlldy5lbGVtZW50OworICAgICAgcmV0dXJuIHNlbCA/IF9lbWJlclZpZXdzU3lz
dGVtSnF1ZXJ5LmRlZmF1bHQoc2VsLCBlbGVtKSA6IF9lbWJlclZpZXdzU3lzdGVtSnF1ZXJ5LmRl
ZmF1bHQoZWxlbSk7CisgICAgfSwKKworICAgIGdldEVsZW1lbnQ6IGZ1bmN0aW9uICh2aWV3KSB7
CisgICAgICB2YXIgcGFyZW50ID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHZpZXcsICdw
YXJlbnRWaWV3Jyk7CisgICAgICBpZiAocGFyZW50KSB7CisgICAgICAgIHBhcmVudCA9IF9lbWJl
ck1ldGFsUHJvcGVydHlfZ2V0LmdldChwYXJlbnQsICdlbGVtZW50Jyk7CisgICAgICB9CisgICAg
ICBpZiAocGFyZW50KSB7CisgICAgICAgIHJldHVybiB2aWV3LmZpbmRFbGVtZW50SW5QYXJlbnRF
bGVtZW50KHBhcmVudCk7CisgICAgICB9CisgICAgICByZXR1cm4gX2VtYmVyVmlld3NTeXN0ZW1K
cXVlcnkuZGVmYXVsdCgnIycgKyBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodmlldywgJ2Vs
ZW1lbnRJZCcpKVswXTsKKyAgICB9LAorCisgICAgLy8gb25jZSB0aGUgdmlldyBoYXMgYmVlbiBp
bnNlcnRlZCBpbnRvIHRoZSBET00sIHJlcmVuZGVyaW5nIGlzCisgICAgLy8gZGVmZXJyZWQgdG8g
YWxsb3cgYmluZGluZ3MgdG8gc3luY2hyb25pemUuCisgICAgcmVyZW5kZXI6IGZ1bmN0aW9uICh2
aWV3KSB7CisgICAgICB2aWV3LnJlbmRlcmVyLmVuc3VyZVZpZXdOb3RSZW5kZXJpbmcodmlldyk7
CisgICAgICB2aWV3LnJlbmRlcmVyLnJlcmVuZGVyKHZpZXcpOworICAgIH0sCisKKyAgICBjbGVh
bnVwOiBmdW5jdGlvbiAodmlldykgeworICAgICAgdmlldy5fY3VycmVudFN0YXRlLmRlc3Ryb3lF
bGVtZW50KHZpZXcpOworICAgIH0sCisKKyAgICAvLyBvbmNlIHRoZSB2aWV3IGlzIGFscmVhZHkg
aW4gdGhlIERPTSwgZGVzdHJveWluZyBpdCByZW1vdmVzIGl0CisgICAgLy8gZnJvbSB0aGUgRE9N
LCBudWtlcyBpdHMgZWxlbWVudCwgYW5kIHB1dHMgaXQgYmFjayBpbnRvIHRoZQorICAgIC8vIHBy
ZVJlbmRlciBzdGF0ZSBpZiBpbkRPTS4KKworICAgIGRlc3Ryb3lFbGVtZW50OiBmdW5jdGlvbiAo
dmlldykgeworICAgICAgdmlldy5yZW5kZXJlci5yZW1vdmUodmlldywgZmFsc2UpOworICAgICAg
cmV0dXJuIHZpZXc7CisgICAgfSwKKworICAgIC8vIEhhbmRsZSBldmVudHMgZnJvbSBgRW1iZXIu
RXZlbnREaXNwYXRjaGVyYAorICAgIGhhbmRsZUV2ZW50OiBmdW5jdGlvbiAodmlldywgZXZlbnRO
YW1lLCBldmVudCkgeworICAgICAgaWYgKHZpZXcuaGFzKGV2ZW50TmFtZSkpIHsKKyAgICAgICAg
Ly8gSGFuZGxlciBzaG91bGQgYmUgYWJsZSB0byByZS1kaXNwYXRjaCBldmVudHMsIHNvIHdlIGRv
bid0CisgICAgICAgIC8vIHByZXZlbnREZWZhdWx0IG9yIHN0b3BQcm9wYWdhdGlvbi4KKyAgICAg
ICAgcmV0dXJuIF9lbWJlck1ldGFsSW5zdHJ1bWVudGF0aW9uLmZsYWdnZWRJbnN0cnVtZW50KCdp
bnRlcmFjdGlvbi4nICsgZXZlbnROYW1lLCB7IGV2ZW50OiBldmVudCwgdmlldzogdmlldyB9LCBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgcmV0dXJuIF9lbWJlck1ldGFsUnVuX2xvb3AuZGVmYXVs
dC5qb2luKHZpZXcsIHZpZXcudHJpZ2dlciwgZXZlbnROYW1lLCBldmVudCk7CisgICAgICAgIH0p
OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIHRydWU7IC8vIGNvbnRpbnVlIGV2ZW50
IHByb3BhZ2F0aW9uCisgICAgICB9CisgICAgfSwKKworICAgIGludm9rZU9ic2VydmVyOiBmdW5j
dGlvbiAodGFyZ2V0LCBvYnNlcnZlcikgeworICAgICAgb2JzZXJ2ZXIuY2FsbCh0YXJnZXQpOwor
ICAgIH0KKyAgfSk7CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gaGFzRWxlbWVudDsKK30pOworCisv
KioKK0Btb2R1bGUgZW1iZXIKK0BzdWJtb2R1bGUgZW1iZXItdmlld3MKKyovCitlbmlmZWQoJ2Vt
YmVyLXZpZXdzL3ZpZXdzL3N0YXRlcy9pbl9kb20nLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwv
ZGVidWcnLCAnZW1iZXItbWV0YWwvYXNzaWduJywgJ2VtYmVyLW1ldGFsL2Vycm9yJywgJ2VtYmVy
LW1ldGFsL29ic2VydmVyJywgJ2VtYmVyLXZpZXdzL3ZpZXdzL3N0YXRlcy9oYXNfZWxlbWVudCdd
LCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxEZWJ1ZywgX2VtYmVyTWV0YWxBc3NpZ24s
IF9lbWJlck1ldGFsRXJyb3IsIF9lbWJlck1ldGFsT2JzZXJ2ZXIsIF9lbWJlclZpZXdzVmlld3NT
dGF0ZXNIYXNfZWxlbWVudCkgeworICAndXNlIHN0cmljdCc7CisKKyAgLyoqCisgIEBtb2R1bGUg
ZW1iZXIKKyAgQHN1Ym1vZHVsZSBlbWJlci12aWV3cworICAqLworCisgIHZhciBpbkRPTSA9IE9i
amVjdC5jcmVhdGUoX2VtYmVyVmlld3NWaWV3c1N0YXRlc0hhc19lbGVtZW50LmRlZmF1bHQpOwor
CisgIF9lbWJlck1ldGFsQXNzaWduLmRlZmF1bHQoaW5ET00sIHsKKyAgICBlbnRlcjogZnVuY3Rp
b24gKHZpZXcpIHsKKyAgICAgIC8vIFJlZ2lzdGVyIHRoZSB2aWV3IGZvciBldmVudCBoYW5kbGlu
Zy4gVGhpcyBoYXNoIGlzIHVzZWQgYnkKKyAgICAgIC8vIEVtYmVyLkV2ZW50RGlzcGF0Y2hlciB0
byBkaXNwYXRjaCBpbmNvbWluZyBldmVudHMuCisgICAgICBpZiAodmlldy50YWdOYW1lICE9PSAn
JykgeworICAgICAgICB2aWV3Ll9yZWdpc3RlcigpOworICAgICAgfQorCisgICAgICBfZW1iZXJN
ZXRhbERlYnVnLnJ1bkluRGVidWcoZnVuY3Rpb24gKCkgeworICAgICAgICBfZW1iZXJNZXRhbE9i
c2VydmVyLl9hZGRCZWZvcmVPYnNlcnZlcih2aWV3LCAnZWxlbWVudElkJywgZnVuY3Rpb24gKCkg
eworICAgICAgICAgIHRocm93IG5ldyBfZW1iZXJNZXRhbEVycm9yLmRlZmF1bHQoJ0NoYW5naW5n
IGEgdmlld1wncyBlbGVtZW50SWQgYWZ0ZXIgY3JlYXRpb24gaXMgbm90IGFsbG93ZWQnKTsKKyAg
ICAgICAgfSk7CisgICAgICB9KTsKKyAgICB9LAorCisgICAgZXhpdDogZnVuY3Rpb24gKHZpZXcp
IHsKKyAgICAgIHZpZXcuX3VucmVnaXN0ZXIoKTsKKyAgICB9CisgIH0pOworCisgIGV4cG9ydHMu
ZGVmYXVsdCA9IGluRE9NOworfSk7CitlbmlmZWQoJ2VtYmVyLXZpZXdzL3ZpZXdzL3N0YXRlcy9w
cmVfcmVuZGVyJywgWydleHBvcnRzJywgJ2VtYmVyLXZpZXdzL3ZpZXdzL3N0YXRlcy9kZWZhdWx0
JywgJ2VtYmVyLW1ldGFsL2Fzc2lnbiddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyVmlld3NW
aWV3c1N0YXRlc0RlZmF1bHQsIF9lbWJlck1ldGFsQXNzaWduKSB7CisgICd1c2Ugc3RyaWN0JzsK
KworICAvKioKKyAgQG1vZHVsZSBlbWJlcgorICBAc3VibW9kdWxlIGVtYmVyLXZpZXdzCisgICov
CisKKyAgdmFyIHByZVJlbmRlciA9IE9iamVjdC5jcmVhdGUoX2VtYmVyVmlld3NWaWV3c1N0YXRl
c0RlZmF1bHQuZGVmYXVsdCk7CisKKyAgX2VtYmVyTWV0YWxBc3NpZ24uZGVmYXVsdChwcmVSZW5k
ZXIsIHsKKyAgICBsZWdhY3lQcm9wZXJ0eURpZENoYW5nZTogZnVuY3Rpb24gKHZpZXcsIGtleSkg
e30KKyAgfSk7CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gcHJlUmVuZGVyOworfSk7CitlbmlmZWQo
J2VtYmVyLXZpZXdzL3ZpZXdzL3RleHRfYXJlYScsIFsnZXhwb3J0cycsICdlbWJlci12aWV3cy9j
b21wb25lbnRzL2NvbXBvbmVudCcsICdlbWJlci12aWV3cy9taXhpbnMvdGV4dF9zdXBwb3J0J10s
IGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJWaWV3c0NvbXBvbmVudHNDb21wb25lbnQsIF9lbWJl
clZpZXdzTWl4aW5zVGV4dF9zdXBwb3J0KSB7CisgIC8qKgorICBAbW9kdWxlIGVtYmVyCisgIEBz
dWJtb2R1bGUgZW1iZXItdmlld3MKKyAgKi8KKyAgJ3VzZSBzdHJpY3QnOworCisgIC8qKgorICAg
IFRoZSBpbnRlcm5hbCBjbGFzcyB1c2VkIHRvIGNyZWF0ZSB0ZXh0YXJlYSBlbGVtZW50IHdoZW4g
dGhlIGB7e3RleHRhcmVhfX1gCisgICAgaGVscGVyIGlzIHVzZWQuCisgIAorICAgIFNlZSBbRW1i
ZXIuVGVtcGxhdGVzLmhlbHBlcnMudGV4dGFyZWFdKC9hcGkvY2xhc3Nlcy9FbWJlci5UZW1wbGF0
ZXMuaGVscGVycy5odG1sI21ldGhvZF90ZXh0YXJlYSkgIGZvciB1c2FnZSBkZXRhaWxzLgorICAK
KyAgICAjIyBMYXlvdXQgYW5kIExheW91dE5hbWUgcHJvcGVydGllcworICAKKyAgICBCZWNhdXNl
IEhUTUwgYHRleHRhcmVhYCBlbGVtZW50cyBkbyBub3QgY29udGFpbiBpbm5lciBIVE1MIHRoZSBg
bGF5b3V0YCBhbmQKKyAgICBgbGF5b3V0TmFtZWAgcHJvcGVydGllcyB3aWxsIG5vdCBiZSBhcHBs
aWVkLiBTZWUgW0VtYmVyLlZpZXddKC9hcGkvY2xhc3Nlcy9FbWJlci5WaWV3Lmh0bWwpJ3MKKyAg
ICBsYXlvdXQgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgCisgICAgQGNsYXNzIFRl
eHRBcmVhCisgICAgQG5hbWVzcGFjZSBFbWJlcgorICAgIEBleHRlbmRzIEVtYmVyLkNvbXBvbmVu
dAorICAgIEB1c2VzIEVtYmVyLlRleHRTdXBwb3J0CisgICAgQHB1YmxpYworICAqLworICBleHBv
cnRzLmRlZmF1bHQgPSBfZW1iZXJWaWV3c0NvbXBvbmVudHNDb21wb25lbnQuZGVmYXVsdC5leHRl
bmQoX2VtYmVyVmlld3NNaXhpbnNUZXh0X3N1cHBvcnQuZGVmYXVsdCwgeworICAgIGluc3RydW1l
bnREaXNwbGF5OiAne3t0ZXh0YXJlYX19JywKKworICAgIGNsYXNzTmFtZXM6IFsnZW1iZXItdGV4
dC1hcmVhJ10sCisKKyAgICB0YWdOYW1lOiAndGV4dGFyZWEnLAorICAgIGF0dHJpYnV0ZUJpbmRp
bmdzOiBbJ3Jvd3MnLCAnY29scycsICduYW1lJywgJ3NlbGVjdGlvbkVuZCcsICdzZWxlY3Rpb25T
dGFydCcsICd3cmFwJywgJ2xhbmcnLCAnZGlyJywgJ3ZhbHVlJ10sCisgICAgcm93czogbnVsbCwK
KyAgICBjb2xzOiBudWxsCisgIH0pOworfSk7CitlbmlmZWQoJ2VtYmVyLXZpZXdzL3ZpZXdzL3Rl
eHRfZmllbGQnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvY29tcHV0ZWQnLCAnZW1iZXItbWV0
YWwvZW52aXJvbm1lbnQnLCAnZW1iZXItdmlld3MvY29tcG9uZW50cy9jb21wb25lbnQnLCAnZW1i
ZXItdmlld3MvbWl4aW5zL3RleHRfc3VwcG9ydCcsICdlbWJlci1tZXRhbC9lbXB0eV9vYmplY3Qn
XSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsQ29tcHV0ZWQsIF9lbWJlck1ldGFsRW52
aXJvbm1lbnQsIF9lbWJlclZpZXdzQ29tcG9uZW50c0NvbXBvbmVudCwgX2VtYmVyVmlld3NNaXhp
bnNUZXh0X3N1cHBvcnQsIF9lbWJlck1ldGFsRW1wdHlfb2JqZWN0KSB7CisgIC8qKgorICBAbW9k
dWxlIGVtYmVyCisgIEBzdWJtb2R1bGUgZW1iZXItdmlld3MKKyAgKi8KKyAgJ3VzZSBzdHJpY3Qn
OworCisgIHZhciBpbnB1dFR5cGVUZXN0RWxlbWVudDsKKyAgdmFyIGlucHV0VHlwZXMgPSBuZXcg
X2VtYmVyTWV0YWxFbXB0eV9vYmplY3QuZGVmYXVsdCgpOworICBmdW5jdGlvbiBjYW5TZXRUeXBl
T2ZJbnB1dCh0eXBlKSB7CisgICAgaWYgKHR5cGUgaW4gaW5wdXRUeXBlcykgeworICAgICAgcmV0
dXJuIGlucHV0VHlwZXNbdHlwZV07CisgICAgfQorCisgICAgLy8gaWYgcnVubmluZyBpbiBvdXRz
aWRlIG9mIGEgYnJvd3NlciBhbHdheXMgcmV0dXJuIHRoZQorICAgIC8vIG9yaWdpbmFsIHR5cGUK
KyAgICBpZiAoIV9lbWJlck1ldGFsRW52aXJvbm1lbnQuZGVmYXVsdC5oYXNET00pIHsKKyAgICAg
IGlucHV0VHlwZXNbdHlwZV0gPSB0eXBlOworCisgICAgICByZXR1cm4gdHlwZTsKKyAgICB9CisK
KyAgICBpZiAoIWlucHV0VHlwZVRlc3RFbGVtZW50KSB7CisgICAgICBpbnB1dFR5cGVUZXN0RWxl
bWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CisgICAgfQorCisgICAgdHJ5
IHsKKyAgICAgIGlucHV0VHlwZVRlc3RFbGVtZW50LnR5cGUgPSB0eXBlOworICAgIH0gY2F0Y2gg
KGUpIHt9CisKKyAgICByZXR1cm4gaW5wdXRUeXBlc1t0eXBlXSA9IGlucHV0VHlwZVRlc3RFbGVt
ZW50LnR5cGUgPT09IHR5cGU7CisgIH0KKworICAvKioKKyAgCisgICAgVGhlIGludGVybmFsIGNs
YXNzIHVzZWQgdG8gY3JlYXRlIHRleHQgaW5wdXRzIHdoZW4gdGhlIGB7e2lucHV0fX1gCisgICAg
aGVscGVyIGlzIHVzZWQgd2l0aCBgdHlwZWAgb2YgYHRleHRgLgorICAKKyAgICBTZWUgW0VtYmVy
LlRlbXBsYXRlcy5oZWxwZXJzLmlucHV0XSgvYXBpL2NsYXNzZXMvRW1iZXIuVGVtcGxhdGVzLmhl
bHBlcnMuaHRtbCNtZXRob2RfaW5wdXQpICBmb3IgdXNhZ2UgZGV0YWlscy4KKyAgCisgICAgIyMg
TGF5b3V0IGFuZCBMYXlvdXROYW1lIHByb3BlcnRpZXMKKyAgCisgICAgQmVjYXVzZSBIVE1MIGBp
bnB1dGAgZWxlbWVudHMgYXJlIHNlbGYgY2xvc2luZyBgbGF5b3V0YCBhbmQgYGxheW91dE5hbWVg
CisgICAgcHJvcGVydGllcyB3aWxsIG5vdCBiZSBhcHBsaWVkLiBTZWUgW0VtYmVyLlZpZXddKC9h
cGkvY2xhc3Nlcy9FbWJlci5WaWV3Lmh0bWwpJ3MKKyAgICBsYXlvdXQgc2VjdGlvbiBmb3IgbW9y
ZSBpbmZvcm1hdGlvbi4KKyAgCisgICAgQGNsYXNzIFRleHRGaWVsZAorICAgIEBuYW1lc3BhY2Ug
RW1iZXIKKyAgICBAZXh0ZW5kcyBFbWJlci5Db21wb25lbnQKKyAgICBAdXNlcyBFbWJlci5UZXh0
U3VwcG9ydAorICAgIEBwdWJsaWMKKyAgKi8KKyAgZXhwb3J0cy5kZWZhdWx0ID0gX2VtYmVyVmll
d3NDb21wb25lbnRzQ29tcG9uZW50LmRlZmF1bHQuZXh0ZW5kKF9lbWJlclZpZXdzTWl4aW5zVGV4
dF9zdXBwb3J0LmRlZmF1bHQsIHsKKyAgICBpbnN0cnVtZW50RGlzcGxheTogJ3t7aW5wdXQgdHlw
ZT0idGV4dCJ9fScsCisKKyAgICBjbGFzc05hbWVzOiBbJ2VtYmVyLXRleHQtZmllbGQnXSwKKyAg
ICB0YWdOYW1lOiAnaW5wdXQnLAorICAgIGF0dHJpYnV0ZUJpbmRpbmdzOiBbJ2FjY2VwdCcsICdh
dXRvY29tcGxldGUnLCAnYXV0b3NhdmUnLCAnZGlyJywgJ2Zvcm1hY3Rpb24nLCAnZm9ybWVuY3R5
cGUnLCAnZm9ybW1ldGhvZCcsICdmb3Jtbm92YWxpZGF0ZScsICdmb3JtdGFyZ2V0JywgJ2hlaWdo
dCcsICdpbnB1dG1vZGUnLCAnbGFuZycsICdsaXN0JywgJ21heCcsICdtaW4nLCAnbXVsdGlwbGUn
LCAnbmFtZScsICdwYXR0ZXJuJywgJ3NpemUnLCAnc3RlcCcsICd0eXBlJywgJ3ZhbHVlJywgJ3dp
ZHRoJ10sCisKKyAgICBkZWZhdWx0TGF5b3V0OiBudWxsLAorCisgICAgLyoqCisgICAgICBUaGUg
YHZhbHVlYCBhdHRyaWJ1dGUgb2YgdGhlIGlucHV0IGVsZW1lbnQuIEFzIHRoZSB1c2VyIGlucHV0
cyB0ZXh0LCB0aGlzCisgICAgICBwcm9wZXJ0eSBpcyB1cGRhdGVkIGxpdmUuCisgICAgICAgQHBy
b3BlcnR5IHZhbHVlCisgICAgICBAdHlwZSBTdHJpbmcKKyAgICAgIEBkZWZhdWx0ICIiCisgICAg
ICBAcHVibGljCisgICAgKi8KKyAgICB2YWx1ZTogJycsCisKKyAgICAvKioKKyAgICAgIFRoZSBg
dHlwZWAgYXR0cmlidXRlIG9mIHRoZSBpbnB1dCBlbGVtZW50LgorICAgICAgIEBwcm9wZXJ0eSB0
eXBlCisgICAgICBAdHlwZSBTdHJpbmcKKyAgICAgIEBkZWZhdWx0ICJ0ZXh0IgorICAgICAgQHB1
YmxpYworICAgICovCisgICAgdHlwZTogX2VtYmVyTWV0YWxDb21wdXRlZC5jb21wdXRlZCh7Cisg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICd0ZXh0JzsKKyAgICAgIH0s
CisKKyAgICAgIHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHsKKyAgICAgICAgdmFyIHR5cGUg
PSAndGV4dCc7CisKKyAgICAgICAgaWYgKGNhblNldFR5cGVPZklucHV0KHZhbHVlKSkgeworICAg
ICAgICAgIHR5cGUgPSB2YWx1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0eXBlOwor
ICAgICAgfQorICAgIH0pLAorCisgICAgLyoqCisgICAgICBUaGUgYHNpemVgIG9mIHRoZSB0ZXh0
IGZpZWxkIGluIGNoYXJhY3RlcnMuCisgICAgICAgQHByb3BlcnR5IHNpemUKKyAgICAgIEB0eXBl
IFN0cmluZworICAgICAgQGRlZmF1bHQgbnVsbAorICAgICAgQHB1YmxpYworICAgICovCisgICAg
c2l6ZTogbnVsbCwKKworICAgIC8qKgorICAgICAgVGhlIGBwYXR0ZXJuYCBhdHRyaWJ1dGUgb2Yg
aW5wdXQgZWxlbWVudC4KKyAgICAgICBAcHJvcGVydHkgcGF0dGVybgorICAgICAgQHR5cGUgU3Ry
aW5nCisgICAgICBAZGVmYXVsdCBudWxsCisgICAgICBAcHVibGljCisgICAgKi8KKyAgICBwYXR0
ZXJuOiBudWxsLAorCisgICAgLyoqCisgICAgICBUaGUgYG1pbmAgYXR0cmlidXRlIG9mIGlucHV0
IGVsZW1lbnQgdXNlZCB3aXRoIGB0eXBlPSJudW1iZXIiYCBvciBgdHlwZT0icmFuZ2UiYC4KKyAg
ICAgICBAcHJvcGVydHkgbWluCisgICAgICBAdHlwZSBTdHJpbmcKKyAgICAgIEBkZWZhdWx0IG51
bGwKKyAgICAgIEBzaW5jZSAxLjQuMAorICAgICAgQHB1YmxpYworICAgICovCisgICAgbWluOiBu
dWxsLAorCisgICAgLyoqCisgICAgICBUaGUgYG1heGAgYXR0cmlidXRlIG9mIGlucHV0IGVsZW1l
bnQgdXNlZCB3aXRoIGB0eXBlPSJudW1iZXIiYCBvciBgdHlwZT0icmFuZ2UiYC4KKyAgICAgICBA
cHJvcGVydHkgbWF4CisgICAgICBAdHlwZSBTdHJpbmcKKyAgICAgIEBkZWZhdWx0IG51bGwKKyAg
ICAgIEBzaW5jZSAxLjQuMAorICAgICAgQHB1YmxpYworICAgICovCisgICAgbWF4OiBudWxsCisg
IH0pOworfSk7CitlbmlmZWQoJ2VtYmVyLXZpZXdzL3ZpZXdzL3ZpZXcnLCBbJ2V4cG9ydHMnLCAn
ZW1iZXItdmlld3Mvc3lzdGVtL2V4dCcsICdlbWJlci12aWV3cy92aWV3cy9jb3JlX3ZpZXcnLCAn
ZW1iZXItdmlld3MvbWl4aW5zL3ZpZXdfY29udGV4dF9zdXBwb3J0JywgJ2VtYmVyLXZpZXdzL21p
eGlucy92aWV3X2NoaWxkX3ZpZXdzX3N1cHBvcnQnLCAnZW1iZXItdmlld3MvbWl4aW5zL2xlZ2Fj
eV9jaGlsZF92aWV3c19zdXBwb3J0JywgJ2VtYmVyLXZpZXdzL21peGlucy92aWV3X3N0YXRlX3N1
cHBvcnQnLCAnZW1iZXItdmlld3MvbWl4aW5zL3RlbXBsYXRlX3JlbmRlcmluZ19zdXBwb3J0Jywg
J2VtYmVyLXZpZXdzL21peGlucy9jbGFzc19uYW1lc19zdXBwb3J0JywgJ2VtYmVyLXZpZXdzL21p
eGlucy9sZWdhY3lfdmlld19zdXBwb3J0JywgJ2VtYmVyLXZpZXdzL21peGlucy9pbnN0cnVtZW50
YXRpb25fc3VwcG9ydCcsICdlbWJlci12aWV3cy9taXhpbnMvYXJpYV9yb2xlX3N1cHBvcnQnLCAn
ZW1iZXItdmlld3MvbWl4aW5zL3Zpc2liaWxpdHlfc3VwcG9ydCcsICdlbWJlci12aWV3cy9jb21w
YXQvYXR0cnMtcHJveHknLCAnZW1iZXItdmlld3MvbWl4aW5zL3ZpZXdfc3VwcG9ydCddLCBmdW5j
dGlvbiAoZXhwb3J0cywgX2VtYmVyVmlld3NTeXN0ZW1FeHQsIF9lbWJlclZpZXdzVmlld3NDb3Jl
X3ZpZXcsIF9lbWJlclZpZXdzTWl4aW5zVmlld19jb250ZXh0X3N1cHBvcnQsIF9lbWJlclZpZXdz
TWl4aW5zVmlld19jaGlsZF92aWV3c19zdXBwb3J0LCBfZW1iZXJWaWV3c01peGluc0xlZ2FjeV9j
aGlsZF92aWV3c19zdXBwb3J0LCBfZW1iZXJWaWV3c01peGluc1ZpZXdfc3RhdGVfc3VwcG9ydCwg
X2VtYmVyVmlld3NNaXhpbnNUZW1wbGF0ZV9yZW5kZXJpbmdfc3VwcG9ydCwgX2VtYmVyVmlld3NN
aXhpbnNDbGFzc19uYW1lc19zdXBwb3J0LCBfZW1iZXJWaWV3c01peGluc0xlZ2FjeV92aWV3X3N1
cHBvcnQsIF9lbWJlclZpZXdzTWl4aW5zSW5zdHJ1bWVudGF0aW9uX3N1cHBvcnQsIF9lbWJlclZp
ZXdzTWl4aW5zQXJpYV9yb2xlX3N1cHBvcnQsIF9lbWJlclZpZXdzTWl4aW5zVmlzaWJpbGl0eV9z
dXBwb3J0LCBfZW1iZXJWaWV3c0NvbXBhdEF0dHJzUHJveHksIF9lbWJlclZpZXdzTWl4aW5zVmll
d19zdXBwb3J0KSB7CisgIC8vIGpRdWVyeSwgRW1iZXIubG9va3VwLAorICAvLyBFbWJlci5FTlYK
KyAgJ3VzZSBzdHJpY3QnOworCisgIC8qKgorICBAbW9kdWxlIGVtYmVyCisgIEBzdWJtb2R1bGUg
ZW1iZXItdmlld3MKKyAgKi8KKworICAvKioKKyAgICBgRW1iZXIuVmlld2AgaXMgdGhlIGNsYXNz
IGluIEVtYmVyIHJlc3BvbnNpYmxlIGZvciBlbmNhcHN1bGF0aW5nIHRlbXBsYXRlcyBvZgorICAg
IEhUTUwgY29udGVudCwgY29tYmluaW5nIHRlbXBsYXRlcyB3aXRoIGRhdGEgdG8gcmVuZGVyIGFz
IHNlY3Rpb25zIG9mIGEgcGFnZSdzCisgICAgRE9NLCBhbmQgcmVnaXN0ZXJpbmcgYW5kIHJlc3Bv
bmRpbmcgdG8gdXNlci1pbml0aWF0ZWQgZXZlbnRzLgorICAKKyAgICAjIyBIVE1MIFRhZworICAK
KyAgICBUaGUgZGVmYXVsdCBIVE1MIHRhZyBuYW1lIHVzZWQgZm9yIGEgdmlldydzIERPTSByZXBy
ZXNlbnRhdGlvbiBpcyBgZGl2YC4gVGhpcworICAgIGNhbiBiZSBjdXN0b21pemVkIGJ5IHNldHRp
bmcgdGhlIGB0YWdOYW1lYCBwcm9wZXJ0eS4gVGhlIGZvbGxvd2luZyB2aWV3CisgICAgY2xhc3M6
CisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAgICBQYXJhZ3JhcGhWaWV3ID0gRW1iZXIuVmlldy5l
eHRlbmQoeworICAgICAgdGFnTmFtZTogJ2VtJworICAgIH0pOworICAgIGBgYAorICAKKyAgICBX
b3VsZCByZXN1bHQgaW4gaW5zdGFuY2VzIHdpdGggdGhlIGZvbGxvd2luZyBIVE1MOgorICAKKyAg
ICBgYGBodG1sCisgICAgPGVtIGlkPSJlbWJlcjEiIGNsYXNzPSJlbWJlci12aWV3Ij48L2VtPgor
ICAgIGBgYAorICAKKyAgICAjIyBIVE1MIGBjbGFzc2AgQXR0cmlidXRlCisgIAorICAgIFRoZSBI
VE1MIGBjbGFzc2AgYXR0cmlidXRlIG9mIGEgdmlldydzIHRhZyBjYW4gYmUgc2V0IGJ5IHByb3Zp
ZGluZyBhCisgICAgYGNsYXNzTmFtZXNgIHByb3BlcnR5IHRoYXQgaXMgc2V0IHRvIGFuIGFycmF5
IG9mIHN0cmluZ3M6CisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAgICBNeVZpZXcgPSBFbWJlci5W
aWV3LmV4dGVuZCh7CisgICAgICBjbGFzc05hbWVzOiBbJ215LWNsYXNzJywgJ215LW90aGVyLWNs
YXNzJ10KKyAgICB9KTsKKyAgICBgYGAKKyAgCisgICAgV2lsbCByZXN1bHQgaW4gdmlldyBpbnN0
YW5jZXMgd2l0aCBhbiBIVE1MIHJlcHJlc2VudGF0aW9uIG9mOgorICAKKyAgICBgYGBodG1sCisg
ICAgPGRpdiBpZD0iZW1iZXIxIiBjbGFzcz0iZW1iZXItdmlldyBteS1jbGFzcyBteS1vdGhlci1j
bGFzcyI+PC9kaXY+CisgICAgYGBgCisgIAorICAgIGBjbGFzc2AgYXR0cmlidXRlIHZhbHVlcyBj
YW4gYWxzbyBiZSBzZXQgYnkgcHJvdmlkaW5nIGEgYGNsYXNzTmFtZUJpbmRpbmdzYAorICAgIHBy
b3BlcnR5IHNldCB0byBhbiBhcnJheSBvZiBwcm9wZXJ0aWVzIG5hbWVzIGZvciB0aGUgdmlldy4g
VGhlIHJldHVybiB2YWx1ZQorICAgIG9mIHRoZXNlIHByb3BlcnRpZXMgd2lsbCBiZSBhZGRlZCBh
cyBwYXJ0IG9mIHRoZSB2YWx1ZSBmb3IgdGhlIHZpZXcncyBgY2xhc3NgCisgICAgYXR0cmlidXRl
LiBUaGVzZSBwcm9wZXJ0aWVzIGNhbiBiZSBjb21wdXRlZCBwcm9wZXJ0aWVzOgorICAKKyAgICBg
YGBqYXZhc2NyaXB0CisgICAgTXlWaWV3ID0gRW1iZXIuVmlldy5leHRlbmQoeworICAgICAgY2xh
c3NOYW1lQmluZGluZ3M6IFsncHJvcGVydHlBJywgJ3Byb3BlcnR5QiddLAorICAgICAgcHJvcGVy
dHlBOiAnZnJvbS1hJywKKyAgICAgIHByb3BlcnR5QjogRW1iZXIuY29tcHV0ZWQoZnVuY3Rpb24o
KSB7CisgICAgICAgIGlmIChzb21lTG9naWMpIHsgcmV0dXJuICdmcm9tLWInOyB9CisgICAgICB9
KQorICAgIH0pOworICAgIGBgYAorICAKKyAgICBXaWxsIHJlc3VsdCBpbiB2aWV3IGluc3RhbmNl
cyB3aXRoIGFuIEhUTUwgcmVwcmVzZW50YXRpb24gb2Y6CisgIAorICAgIGBgYGh0bWwKKyAgICA8
ZGl2IGlkPSJlbWJlcjEiIGNsYXNzPSJlbWJlci12aWV3IGZyb20tYSBmcm9tLWIiPjwvZGl2Pgor
ICAgIGBgYAorICAKKyAgICBJZiB0aGUgdmFsdWUgb2YgYSBjbGFzcyBuYW1lIGJpbmRpbmcgcmV0
dXJucyBhIGJvb2xlYW4gdGhlIHByb3BlcnR5IG5hbWUKKyAgICBpdHNlbGYgd2lsbCBiZSB1c2Vk
IGFzIHRoZSBjbGFzcyBuYW1lIGlmIHRoZSBwcm9wZXJ0eSBpcyB0cnVlLiBUaGUgY2xhc3MgbmFt
ZQorICAgIHdpbGwgbm90IGJlIGFkZGVkIGlmIHRoZSB2YWx1ZSBpcyBgZmFsc2VgIG9yIGB1bmRl
ZmluZWRgLgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgTXlWaWV3ID0gRW1iZXIuVmlldy5l
eHRlbmQoeworICAgICAgY2xhc3NOYW1lQmluZGluZ3M6IFsnaG92ZXJlZCddLAorICAgICAgaG92
ZXJlZDogdHJ1ZQorICAgIH0pOworICAgIGBgYAorICAKKyAgICBXaWxsIHJlc3VsdCBpbiB2aWV3
IGluc3RhbmNlcyB3aXRoIGFuIEhUTUwgcmVwcmVzZW50YXRpb24gb2Y6CisgIAorICAgIGBgYGh0
bWwKKyAgICA8ZGl2IGlkPSJlbWJlcjEiIGNsYXNzPSJlbWJlci12aWV3IGhvdmVyZWQiPjwvZGl2
PgorICAgIGBgYAorICAKKyAgICBXaGVuIHVzaW5nIGJvb2xlYW4gY2xhc3MgbmFtZSBiaW5kaW5n
cyB5b3UgY2FuIHN1cHBseSBhIHN0cmluZyB2YWx1ZSBvdGhlcgorICAgIHRoYW4gdGhlIHByb3Bl
cnR5IG5hbWUgZm9yIHVzZSBhcyB0aGUgYGNsYXNzYCBIVE1MIGF0dHJpYnV0ZSBieSBhcHBlbmRp
bmcgdGhlCisgICAgcHJlZmVycmVkIHZhbHVlIGFmdGVyIGEgIjoiIGNoYXJhY3RlciB3aGVuIGRl
ZmluaW5nIHRoZSBiaW5kaW5nOgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgTXlWaWV3ID0g
RW1iZXIuVmlldy5leHRlbmQoeworICAgICAgY2xhc3NOYW1lQmluZGluZ3M6IFsnYXdlc29tZTpz
by12ZXJ5LWNvb2wnXSwKKyAgICAgIGF3ZXNvbWU6IHRydWUKKyAgICB9KTsKKyAgICBgYGAKKyAg
CisgICAgV2lsbCByZXN1bHQgaW4gdmlldyBpbnN0YW5jZXMgd2l0aCBhbiBIVE1MIHJlcHJlc2Vu
dGF0aW9uIG9mOgorICAKKyAgICBgYGBodG1sCisgICAgPGRpdiBpZD0iZW1iZXIxIiBjbGFzcz0i
ZW1iZXItdmlldyBzby12ZXJ5LWNvb2wiPjwvZGl2PgorICAgIGBgYAorICAKKyAgICBCb29sZWFu
IHZhbHVlIGNsYXNzIG5hbWUgYmluZGluZ3Mgd2hvc2UgcHJvcGVydHkgbmFtZXMgYXJlIGluIGEK
KyAgICBjYW1lbENhc2Utc3R5bGUgZm9ybWF0IHdpbGwgYmUgY29udmVydGVkIHRvIGEgZGFzaGVy
aXplZCBmb3JtYXQ6CisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAgICBNeVZpZXcgPSBFbWJlci5W
aWV3LmV4dGVuZCh7CisgICAgICBjbGFzc05hbWVCaW5kaW5nczogWydpc1VyZ2VudCddLAorICAg
ICAgaXNVcmdlbnQ6IHRydWUKKyAgICB9KTsKKyAgICBgYGAKKyAgCisgICAgV2lsbCByZXN1bHQg
aW4gdmlldyBpbnN0YW5jZXMgd2l0aCBhbiBIVE1MIHJlcHJlc2VudGF0aW9uIG9mOgorICAKKyAg
ICBgYGBodG1sCisgICAgPGRpdiBpZD0iZW1iZXIxIiBjbGFzcz0iZW1iZXItdmlldyBpcy11cmdl
bnQiPjwvZGl2PgorICAgIGBgYAorICAKKyAgICBDbGFzcyBuYW1lIGJpbmRpbmdzIGNhbiBhbHNv
IHJlZmVyIHRvIG9iamVjdCB2YWx1ZXMgdGhhdCBhcmUgZm91bmQgYnkKKyAgICB0cmF2ZXJzaW5n
IGEgcGF0aCByZWxhdGl2ZSB0byB0aGUgdmlldyBpdHNlbGY6CisgIAorICAgIGBgYGphdmFzY3Jp
cHQKKyAgICBNeVZpZXcgPSBFbWJlci5WaWV3LmV4dGVuZCh7CisgICAgICBjbGFzc05hbWVCaW5k
aW5nczogWydtZXNzYWdlcy5lbXB0eSddCisgICAgICBtZXNzYWdlczogRW1iZXIuT2JqZWN0LmNy
ZWF0ZSh7CisgICAgICAgIGVtcHR5OiB0cnVlCisgICAgICB9KQorICAgIH0pOworICAgIGBgYAor
ICAKKyAgICBXaWxsIHJlc3VsdCBpbiB2aWV3IGluc3RhbmNlcyB3aXRoIGFuIEhUTUwgcmVwcmVz
ZW50YXRpb24gb2Y6CisgIAorICAgIGBgYGh0bWwKKyAgICA8ZGl2IGlkPSJlbWJlcjEiIGNsYXNz
PSJlbWJlci12aWV3IGVtcHR5Ij48L2Rpdj4KKyAgICBgYGAKKyAgCisgICAgSWYgeW91IHdhbnQg
dG8gYWRkIGEgY2xhc3MgbmFtZSBmb3IgYSBwcm9wZXJ0eSB3aGljaCBldmFsdWF0ZXMgdG8gdHJ1
ZSBhbmQKKyAgICBhbmQgYSBkaWZmZXJlbnQgY2xhc3MgbmFtZSBpZiBpdCBldmFsdWF0ZXMgdG8g
ZmFsc2UsIHlvdSBjYW4gcGFzcyBhIGJpbmRpbmcKKyAgICBsaWtlIHRoaXM6CisgIAorICAgIGBg
YGphdmFzY3JpcHQKKyAgICAvLyBBcHBsaWVzICdlbmFibGVkJyBjbGFzcyB3aGVuIGlzRW5hYmxl
ZCBpcyB0cnVlIGFuZCAnZGlzYWJsZWQnIHdoZW4gaXNFbmFibGVkIGlzIGZhbHNlCisgICAgRW1i
ZXIuVmlldy5leHRlbmQoeworICAgICAgY2xhc3NOYW1lQmluZGluZ3M6IFsnaXNFbmFibGVkOmVu
YWJsZWQ6ZGlzYWJsZWQnXQorICAgICAgaXNFbmFibGVkOiB0cnVlCisgICAgfSk7CisgICAgYGBg
CisgIAorICAgIFdpbGwgcmVzdWx0IGluIHZpZXcgaW5zdGFuY2VzIHdpdGggYW4gSFRNTCByZXBy
ZXNlbnRhdGlvbiBvZjoKKyAgCisgICAgYGBgaHRtbAorICAgIDxkaXYgaWQ9ImVtYmVyMSIgY2xh
c3M9ImVtYmVyLXZpZXcgZW5hYmxlZCI+PC9kaXY+CisgICAgYGBgCisgIAorICAgIFdoZW4gaXNF
bmFibGVkIGlzIGBmYWxzZWAsIHRoZSByZXN1bHRpbmcgSFRNTCByZXByZXNlbnRhdGlvbiBsb29r
cyBsaWtlCisgICAgdGhpczoKKyAgCisgICAgYGBgaHRtbAorICAgIDxkaXYgaWQ9ImVtYmVyMSIg
Y2xhc3M9ImVtYmVyLXZpZXcgZGlzYWJsZWQiPjwvZGl2PgorICAgIGBgYAorICAKKyAgICBUaGlz
IHN5bnRheCBvZmZlcnMgdGhlIGNvbnZlbmllbmNlIHRvIGFkZCBhIGNsYXNzIGlmIGEgcHJvcGVy
dHkgaXMgYGZhbHNlYDoKKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIC8vIEFwcGxpZXMgbm8g
Y2xhc3Mgd2hlbiBpc0VuYWJsZWQgaXMgdHJ1ZSBhbmQgY2xhc3MgJ2Rpc2FibGVkJyB3aGVuIGlz
RW5hYmxlZCBpcyBmYWxzZQorICAgIEVtYmVyLlZpZXcuZXh0ZW5kKHsKKyAgICAgIGNsYXNzTmFt
ZUJpbmRpbmdzOiBbJ2lzRW5hYmxlZDo6ZGlzYWJsZWQnXQorICAgICAgaXNFbmFibGVkOiB0cnVl
CisgICAgfSk7CisgICAgYGBgCisgIAorICAgIFdpbGwgcmVzdWx0IGluIHZpZXcgaW5zdGFuY2Vz
IHdpdGggYW4gSFRNTCByZXByZXNlbnRhdGlvbiBvZjoKKyAgCisgICAgYGBgaHRtbAorICAgIDxk
aXYgaWQ9ImVtYmVyMSIgY2xhc3M9ImVtYmVyLXZpZXciPjwvZGl2PgorICAgIGBgYAorICAKKyAg
ICBXaGVuIHRoZSBgaXNFbmFibGVkYCBwcm9wZXJ0eSBvbiB0aGUgdmlldyBpcyBzZXQgdG8gYGZh
bHNlYCwgaXQgd2lsbCByZXN1bHQKKyAgICBpbiB2aWV3IGluc3RhbmNlcyB3aXRoIGFuIEhUTUwg
cmVwcmVzZW50YXRpb24gb2Y6CisgIAorICAgIGBgYGh0bWwKKyAgICA8ZGl2IGlkPSJlbWJlcjEi
IGNsYXNzPSJlbWJlci12aWV3IGRpc2FibGVkIj48L2Rpdj4KKyAgICBgYGAKKyAgCisgICAgVXBk
YXRlcyB0byB0aGUgdmFsdWUgb2YgYSBjbGFzcyBuYW1lIGJpbmRpbmcgd2lsbCByZXN1bHQgaW4g
YXV0b21hdGljCisgICAgdXBkYXRlIG9mIHRoZSAgSFRNTCBgY2xhc3NgIGF0dHJpYnV0ZSBpbiB0
aGUgdmlldydzIHJlbmRlcmVkIEhUTUwKKyAgICByZXByZXNlbnRhdGlvbi4gSWYgdGhlIHZhbHVl
IGJlY29tZXMgYGZhbHNlYCBvciBgdW5kZWZpbmVkYCB0aGUgY2xhc3MgbmFtZQorICAgIHdpbGwg
YmUgcmVtb3ZlZC4KKyAgCisgICAgQm90aCBgY2xhc3NOYW1lc2AgYW5kIGBjbGFzc05hbWVCaW5k
aW5nc2AgYXJlIGNvbmNhdGVuYXRlZCBwcm9wZXJ0aWVzLiBTZWUKKyAgICBbRW1iZXIuT2JqZWN0
XSgvYXBpL2NsYXNzZXMvRW1iZXIuT2JqZWN0Lmh0bWwpIGRvY3VtZW50YXRpb24gZm9yIG1vcmUK
KyAgICBpbmZvcm1hdGlvbiBhYm91dCBjb25jYXRlbmF0ZWQgcHJvcGVydGllcy4KKyAgCisgICAg
IyMgSFRNTCBBdHRyaWJ1dGVzCisgIAorICAgIFRoZSBIVE1MIGF0dHJpYnV0ZSBzZWN0aW9uIG9m
IGEgdmlldydzIHRhZyBjYW4gYmUgc2V0IGJ5IHByb3ZpZGluZyBhbgorICAgIGBhdHRyaWJ1dGVC
aW5kaW5nc2AgcHJvcGVydHkgc2V0IHRvIGFuIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIG9uIHRo
ZSB2aWV3LgorICAgIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlc2UgcHJvcGVydGllcyB3aWxsIGJl
IHVzZWQgYXMgdGhlIHZhbHVlIG9mIHRoZSB2aWV3J3MKKyAgICBIVE1MIGFzc29jaWF0ZWQgYXR0
cmlidXRlOgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgQW5jaG9yVmlldyA9IEVtYmVyLlZp
ZXcuZXh0ZW5kKHsKKyAgICAgIHRhZ05hbWU6ICdhJywKKyAgICAgIGF0dHJpYnV0ZUJpbmRpbmdz
OiBbJ2hyZWYnXSwKKyAgICAgIGhyZWY6ICdodHRwOi8vZ29vZ2xlLmNvbScKKyAgICB9KTsKKyAg
ICBgYGAKKyAgCisgICAgV2lsbCByZXN1bHQgaW4gdmlldyBpbnN0YW5jZXMgd2l0aCBhbiBIVE1M
IHJlcHJlc2VudGF0aW9uIG9mOgorICAKKyAgICBgYGBodG1sCisgICAgPGEgaWQ9ImVtYmVyMSIg
Y2xhc3M9ImVtYmVyLXZpZXciIGhyZWY9Imh0dHA6Ly9nb29nbGUuY29tIj48L2E+CisgICAgYGBg
CisgIAorICAgIE9uZSBwcm9wZXJ0eSBjYW4gYmUgbWFwcGVkIG9uIHRvIGFub3RoZXIgYnkgcGxh
Y2luZyBhICI6IiBiZXR3ZWVuCisgICAgdGhlIHNvdXJjZSBwcm9wZXJ0eSBhbmQgdGhlIGRlc3Rp
bmF0aW9uIHByb3BlcnR5OgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgQW5jaG9yVmlldyA9
IEVtYmVyLlZpZXcuZXh0ZW5kKHsKKyAgICAgIHRhZ05hbWU6ICdhJywKKyAgICAgIGF0dHJpYnV0
ZUJpbmRpbmdzOiBbJ3VybDpocmVmJ10sCisgICAgICB1cmw6ICdodHRwOi8vZ29vZ2xlLmNvbScK
KyAgICB9KTsKKyAgICBgYGAKKyAgCisgICAgV2lsbCByZXN1bHQgaW4gdmlldyBpbnN0YW5jZXMg
d2l0aCBhbiBIVE1MIHJlcHJlc2VudGF0aW9uIG9mOgorICAKKyAgICBgYGBodG1sCisgICAgPGEg
aWQ9ImVtYmVyMSIgY2xhc3M9ImVtYmVyLXZpZXciIGhyZWY9Imh0dHA6Ly9nb29nbGUuY29tIj48
L2E+CisgICAgYGBgCisgIAorICAgIE5hbWVzcGFjZWQgYXR0cmlidXRlcyAoZS5nLiBgeGxpbms6
aHJlZmApIGFyZSBzdXBwb3J0ZWQsIGJ1dCBoYXZlIHRvIGJlCisgICAgbWFwcGVkLCBzaW5jZSBg
OmAgaXMgbm90IGEgdmFsaWQgY2hhcmFjdGVyIGZvciBwcm9wZXJ0aWVzIGluIEphdmFzY3JpcHQ6
CisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAgICBVc2VWaWV3ID0gRW1iZXIuVmlldy5leHRlbmQo
eworICAgICAgdGFnTmFtZTogJ3VzZScsCisgICAgICBhdHRyaWJ1dGVCaW5kaW5nczogWyd4bGlu
a0hyZWY6eGxpbms6aHJlZiddLAorICAgICAgeGxpbmtIcmVmOiAnI3RyaWFuZ2xlJworICAgIH0p
OworICAgIGBgYAorICAgIFdpbGwgcmVzdWx0IGluIHZpZXcgaW5zdGFuY2VzIHdpdGggYW4gSFRN
TCByZXByZXNlbnRhdGlvbiBvZjoKKyAgCisgICAgYGBgaHRtbAorICAgIDx1c2UgeGxpbms6aHJl
Zj0iI3RyaWFuZ2xlIj48L3VzZT4KKyAgICBgYGAKKyAgCisgICAgSWYgdGhlIHJldHVybiB2YWx1
ZSBvZiBhbiBgYXR0cmlidXRlQmluZGluZ3NgIG1vbml0b3JlZCBwcm9wZXJ0eSBpcyBhIGJvb2xl
YW4KKyAgICB0aGUgcHJvcGVydHkncyB2YWx1ZSB3aWxsIGJlIHNldCBhcyBhIGNvZXJjZWQgc3Ry
aW5nOgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgTXlUZXh0SW5wdXQgPSBFbWJlci5WaWV3
LmV4dGVuZCh7CisgICAgICB0YWdOYW1lOiAnaW5wdXQnLAorICAgICAgYXR0cmlidXRlQmluZGlu
Z3M6IFsnZGlzYWJsZWQnXSwKKyAgICAgIGRpc2FibGVkOiBmYWxzZQorICAgIH0pOworICAgIGBg
YAorICAKKyAgICBXaWxsIHJlc3VsdCBpbiBhIHZpZXcgaW5zdGFuY2Ugd2l0aCBhbiBIVE1MIHJl
cHJlc2VudGF0aW9uIG9mOgorICAKKyAgICBgYGBodG1sCisgICAgPGlucHV0IGlkPSJlbWJlcjEi
IGNsYXNzPSJlbWJlci12aWV3IiBkaXNhYmxlZD0iZmFsc2UiIC8+CisgICAgYGBgCisgIAorICAg
IGBhdHRyaWJ1dGVCaW5kaW5nc2AgY2FuIHJlZmVyIHRvIGNvbXB1dGVkIHByb3BlcnRpZXM6Cisg
IAorICAgIGBgYGphdmFzY3JpcHQKKyAgICBNeVRleHRJbnB1dCA9IEVtYmVyLlZpZXcuZXh0ZW5k
KHsKKyAgICAgIHRhZ05hbWU6ICdpbnB1dCcsCisgICAgICBhdHRyaWJ1dGVCaW5kaW5nczogWydk
aXNhYmxlZCddLAorICAgICAgZGlzYWJsZWQ6IEVtYmVyLmNvbXB1dGVkKGZ1bmN0aW9uKCkgewor
ICAgICAgICBpZiAoc29tZUxvZ2ljKSB7CisgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICB9KQor
ICAgIH0pOworICAgIGBgYAorICAKKyAgICBUbyBwcmV2ZW50IHNldHRpbmcgYW4gYXR0cmlidXRl
IGFsdG9nZXRoZXIsIHVzZSBgbnVsbGAgb3IgYHVuZGVmaW5lZGAgYXMgdGhlCisgICAgcmV0dXJu
IHZhbHVlIG9mIHRoZSBgYXR0cmlidXRlQmluZGluZ3NgIG1vbml0b3JlZCBwcm9wZXJ0eToKKyAg
CisgICAgYGBgamF2YXNjcmlwdAorICAgIE15VGV4dElucHV0ID0gRW1iZXIuVmlldy5leHRlbmQo
eworICAgICAgdGFnTmFtZTogJ2Zvcm0nLAorICAgICAgYXR0cmlidXRlQmluZGluZ3M6IFsnbm92
YWxpZGF0ZSddLAorICAgICAgbm92YWxpZGF0ZTogbnVsbAorICAgIH0pOworICAgIGBgYAorICAK
KyAgICBVcGRhdGVzIHRvIHRoZSBwcm9wZXJ0eSBvZiBhbiBhdHRyaWJ1dGUgYmluZGluZyB3aWxs
IHJlc3VsdCBpbiBhdXRvbWF0aWMKKyAgICB1cGRhdGUgb2YgdGhlICBIVE1MIGF0dHJpYnV0ZSBp
biB0aGUgdmlldydzIHJlbmRlcmVkIEhUTUwgcmVwcmVzZW50YXRpb24uCisgIAorICAgIGBhdHRy
aWJ1dGVCaW5kaW5nc2AgaXMgYSBjb25jYXRlbmF0ZWQgcHJvcGVydHkuIFNlZSBbRW1iZXIuT2Jq
ZWN0XSgvYXBpL2NsYXNzZXMvRW1iZXIuT2JqZWN0Lmh0bWwpCisgICAgZG9jdW1lbnRhdGlvbiBm
b3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBjb25jYXRlbmF0ZWQgcHJvcGVydGllcy4KKyAgCisg
ICAgIyMgVGVtcGxhdGVzCisgIAorICAgIFRoZSBIVE1MIGNvbnRlbnRzIG9mIGEgdmlldydzIHJl
bmRlcmVkIHJlcHJlc2VudGF0aW9uIGFyZSBkZXRlcm1pbmVkIGJ5IGl0cworICAgIHRlbXBsYXRl
LiBUZW1wbGF0ZXMgY2FuIGJlIGFueSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgYW4gb3B0aW9uYWwg
Y29udGV4dAorICAgIHBhcmFtZXRlciBhbmQgcmV0dXJucyBhIHN0cmluZyBvZiBIVE1MIHRoYXQg
d2lsbCBiZSBpbnNlcnRlZCB3aXRoaW4gdGhlCisgICAgdmlldydzIHRhZy4gTW9zdCB0eXBpY2Fs
bHkgaW4gRW1iZXIgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGEgY29tcGlsZWQKKyAgICB0ZW1wbGF0
ZS4KKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIEFWaWV3ID0gRW1iZXIuVmlldy5leHRlbmQo
eworICAgICAgdGVtcGxhdGU6IEVtYmVyLkhUTUxCYXJzLmNvbXBpbGUoJ0kgYW0gdGhlIHRlbXBs
YXRlJykKKyAgICB9KTsKKyAgICBgYGAKKyAgCisgICAgV2lsbCByZXN1bHQgaW4gdmlldyBpbnN0
YW5jZXMgd2l0aCBhbiBIVE1MIHJlcHJlc2VudGF0aW9uIG9mOgorICAKKyAgICBgYGBodG1sCisg
ICAgPGRpdiBpZD0iZW1iZXIxIiBjbGFzcz0iZW1iZXItdmlldyI+SSBhbSB0aGUgdGVtcGxhdGU8
L2Rpdj4KKyAgICBgYGAKKyAgCisgICAgV2l0aGluIGFuIEVtYmVyIGFwcGxpY2F0aW9uIGlzIG1v
cmUgY29tbW9uIHRvIGRlZmluZSBhIEhhbmRsZWJhcnMgdGVtcGxhdGVzIGFzCisgICAgcGFydCBv
ZiBhIHBhZ2U6CisgIAorICAgIGBgYGh0bWwKKyAgICA8c2NyaXB0IHR5cGU9J3RleHQveC1oYW5k
bGViYXJzJyBkYXRhLXRlbXBsYXRlLW5hbWU9J3NvbWUtdGVtcGxhdGUnPgorICAgICAgSGVsbG8K
KyAgICA8L3NjcmlwdD4KKyAgICBgYGAKKyAgCisgICAgQW5kIGFzc29jaWF0ZSBpdCBieSBuYW1l
IHVzaW5nIGEgdmlldydzIGB0ZW1wbGF0ZU5hbWVgIHByb3BlcnR5OgorICAKKyAgICBgYGBqYXZh
c2NyaXB0CisgICAgQVZpZXcgPSBFbWJlci5WaWV3LmV4dGVuZCh7CisgICAgICB0ZW1wbGF0ZU5h
bWU6ICdzb21lLXRlbXBsYXRlJworICAgIH0pOworICAgIGBgYAorICAKKyAgICBJZiB5b3UgaGF2
ZSBuZXN0ZWQgcm91dGVzLCB5b3VyIEhhbmRsZWJhcnMgdGVtcGxhdGUgd2lsbCBsb29rIGxpa2Ug
dGhpczoKKyAgCisgICAgYGBgaHRtbAorICAgIDxzY3JpcHQgdHlwZT0ndGV4dC94LWhhbmRsZWJh
cnMnIGRhdGEtdGVtcGxhdGUtbmFtZT0ncG9zdHMvbmV3Jz4KKyAgICAgIDxoMT5OZXcgUG9zdDwv
aDE+CisgICAgPC9zY3JpcHQ+CisgICAgYGBgCisgIAorICAgIEFuZCBgdGVtcGxhdGVOYW1lYCBw
cm9wZXJ0eToKKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIEFWaWV3ID0gRW1iZXIuVmlldy5l
eHRlbmQoeworICAgICAgdGVtcGxhdGVOYW1lOiAncG9zdHMvbmV3JworICAgIH0pOworICAgIGBg
YAorICAKKyAgICBVc2luZyBhIHZhbHVlIGZvciBgdGVtcGxhdGVOYW1lYCB0aGF0IGRvZXMgbm90
IGhhdmUgYSB0ZW1wbGF0ZQorICAgIHdpdGggYSBtYXRjaGluZyBgZGF0YS10ZW1wbGF0ZS1uYW1l
YCBhdHRyaWJ1dGUgd2lsbCB0aHJvdyBhbiBlcnJvci4KKyAgCisgICAgRm9yIHZpZXdzIGNsYXNz
ZXMgdGhhdCBtYXkgaGF2ZSBhIHRlbXBsYXRlIGxhdGVyIGRlZmluZWQgKGUuZy4gYXMgdGhlIGJs
b2NrCisgICAgcG9ydGlvbiBvZiBhIGB7e3ZpZXd9fWAgaGVscGVyIGNhbGwgaW4gYW5vdGhlciB0
ZW1wbGF0ZSBvciBpbgorICAgIGEgc3ViY2xhc3MpLCB5b3UgY2FuIHByb3ZpZGUgYSBgZGVmYXVs
dFRlbXBsYXRlYCBwcm9wZXJ0eSBzZXQgdG8gY29tcGlsZWQKKyAgICB0ZW1wbGF0ZSBmdW5jdGlv
bi4gSWYgYSB0ZW1wbGF0ZSBpcyBub3QgbGF0ZXIgcHJvdmlkZWQgZm9yIHRoZSB2aWV3IGluc3Rh
bmNlCisgICAgdGhlIGBkZWZhdWx0VGVtcGxhdGVgIHZhbHVlIHdpbGwgYmUgdXNlZDoKKyAgCisg
ICAgYGBgamF2YXNjcmlwdAorICAgIEFWaWV3ID0gRW1iZXIuVmlldy5leHRlbmQoeworICAgICAg
ZGVmYXVsdFRlbXBsYXRlOiBFbWJlci5IVE1MQmFycy5jb21waWxlKCdJIHdhcyB0aGUgZGVmYXVs
dCcpLAorICAgICAgdGVtcGxhdGU6IG51bGwsCisgICAgICB0ZW1wbGF0ZU5hbWU6IG51bGwKKyAg
ICB9KTsKKyAgICBgYGAKKyAgCisgICAgV2lsbCByZXN1bHQgaW4gaW5zdGFuY2VzIHdpdGggYW4g
SFRNTCByZXByZXNlbnRhdGlvbiBvZjoKKyAgCisgICAgYGBgaHRtbAorICAgIDxkaXYgaWQ9ImVt
YmVyMSIgY2xhc3M9ImVtYmVyLXZpZXciPkkgd2FzIHRoZSBkZWZhdWx0PC9kaXY+CisgICAgYGBg
CisgIAorICAgIElmIGEgYHRlbXBsYXRlYCBvciBgdGVtcGxhdGVOYW1lYCBpcyBwcm92aWRlZCBp
dCB3aWxsIHRha2UgcHJlY2VkZW5jZSBvdmVyCisgICAgYGRlZmF1bHRUZW1wbGF0ZWA6CisgIAor
ICAgIGBgYGphdmFzY3JpcHQKKyAgICBBVmlldyA9IEVtYmVyLlZpZXcuZXh0ZW5kKHsKKyAgICAg
IGRlZmF1bHRUZW1wbGF0ZTogRW1iZXIuSFRNTEJhcnMuY29tcGlsZSgnSSB3YXMgdGhlIGRlZmF1
bHQnKQorICAgIH0pOworICAKKyAgICBhVmlldyA9IEFWaWV3LmNyZWF0ZSh7CisgICAgICB0ZW1w
bGF0ZTogRW1iZXIuSFRNTEJhcnMuY29tcGlsZSgnSSB3YXMgdGhlIHRlbXBsYXRlLCBub3QgZGVm
YXVsdCcpCisgICAgfSk7CisgICAgYGBgCisgIAorICAgIFdpbGwgcmVzdWx0IGluIHRoZSBmb2xs
b3dpbmcgSFRNTCByZXByZXNlbnRhdGlvbiB3aGVuIHJlbmRlcmVkOgorICAKKyAgICBgYGBodG1s
CisgICAgPGRpdiBpZD0iZW1iZXIxIiBjbGFzcz0iZW1iZXItdmlldyI+SSB3YXMgdGhlIHRlbXBs
YXRlLCBub3QgZGVmYXVsdDwvZGl2PgorICAgIGBgYAorICAKKyAgICAjIyBWaWV3IENvbnRleHQK
KyAgCisgICAgVGhlIGRlZmF1bHQgY29udGV4dCBvZiB0aGUgY29tcGlsZWQgdGVtcGxhdGUgaXMg
dGhlIHZpZXcncyBjb250cm9sbGVyOgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgQVZpZXcg
PSBFbWJlci5WaWV3LmV4dGVuZCh7CisgICAgICB0ZW1wbGF0ZTogRW1iZXIuSFRNTEJhcnMuY29t
cGlsZSgnSGVsbG8ge3tleGNpdGVkR3JlZXRpbmd9fScpCisgICAgfSk7CisgIAorICAgIGFDb250
cm9sbGVyID0gRW1iZXIuT2JqZWN0LmNyZWF0ZSh7CisgICAgICBmaXJzdE5hbWU6ICdCYXJyeScs
CisgICAgICBleGNpdGVkR3JlZXRpbmc6IEVtYmVyLmNvbXB1dGVkKCdjb250ZW50LmZpcnN0TmFt
ZScsIGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5nZXQoJ2NvbnRlbnQuZmlyc3RO
YW1lJykgKyAnISEhJzsKKyAgICAgIH0pCisgICAgfSk7CisgIAorICAgIGFWaWV3ID0gQVZpZXcu
Y3JlYXRlKHsKKyAgICAgIGNvbnRyb2xsZXI6IGFDb250cm9sbGVyCisgICAgfSk7CisgICAgYGBg
CisgIAorICAgIFdpbGwgcmVzdWx0IGluIGFuIEhUTUwgcmVwcmVzZW50YXRpb24gb2Y6CisgIAor
ICAgIGBgYGh0bWwKKyAgICA8ZGl2IGlkPSJlbWJlcjEiIGNsYXNzPSJlbWJlci12aWV3Ij5IZWxs
byBCYXJyeSEhITwvZGl2PgorICAgIGBgYAorICAKKyAgICBBIGNvbnRleHQgY2FuIGFsc28gYmUg
ZXhwbGljaXRseSBzdXBwbGllZCB0aHJvdWdoIHRoZSB2aWV3J3MgYGNvbnRleHRgCisgICAgcHJv
cGVydHkuIElmIHRoZSB2aWV3IGhhcyBuZWl0aGVyIGBjb250ZXh0YCBub3IgYGNvbnRyb2xsZXJg
IHByb3BlcnRpZXMsIHRoZQorICAgIGBwYXJlbnRWaWV3YCdzIGNvbnRleHQgd2lsbCBiZSB1c2Vk
LgorICAKKyAgICAjIyBMYXlvdXRzCisgIAorICAgIFZpZXdzIGNhbiBoYXZlIGEgc2Vjb25kYXJ5
IHRlbXBsYXRlIHRoYXQgd3JhcHMgdGhlaXIgbWFpbiB0ZW1wbGF0ZS4gTGlrZQorICAgIHByaW1h
cnkgdGVtcGxhdGVzLCBsYXlvdXRzIGNhbiBiZSBhbnkgZnVuY3Rpb24gdGhhdCAgYWNjZXB0cyBh
biBvcHRpb25hbAorICAgIGNvbnRleHQgcGFyYW1ldGVyIGFuZCByZXR1cm5zIGEgc3RyaW5nIG9m
IEhUTUwgdGhhdCB3aWxsIGJlIGluc2VydGVkIGluc2lkZQorICAgIHZpZXcncyB0YWcuIFZpZXdz
IHdob3NlIEhUTUwgZWxlbWVudCBpcyBzZWxmIGNsb3NpbmcgKGUuZy4gYDxpbnB1dCAvPmApCisg
ICAgY2Fubm90IGhhdmUgYSBsYXlvdXQgYW5kIHRoaXMgcHJvcGVydHkgd2lsbCBiZSBpZ25vcmVk
LgorICAKKyAgICBNb3N0IHR5cGljYWxseSBpbiBFbWJlciBhIGxheW91dCB3aWxsIGJlIGEgY29t
cGlsZWQgdGVtcGxhdGUuCisgIAorICAgIEEgdmlldydzIGxheW91dCBjYW4gYmUgc2V0IGRpcmVj
dGx5IHdpdGggdGhlIGBsYXlvdXRgIHByb3BlcnR5IG9yIHJlZmVyZW5jZQorICAgIGFuIGV4aXN0
aW5nIHRlbXBsYXRlIGJ5IG5hbWUgd2l0aCB0aGUgYGxheW91dE5hbWVgIHByb3BlcnR5LgorICAK
KyAgICBBIHRlbXBsYXRlIHVzZWQgYXMgYSBsYXlvdXQgbXVzdCBjb250YWluIGEgc2luZ2xlIHVz
ZSBvZiB0aGUKKyAgICBge3t5aWVsZH19YCBoZWxwZXIuIFRoZSBIVE1MIGNvbnRlbnRzIG9mIGEg
dmlldydzIHJlbmRlcmVkIGB0ZW1wbGF0ZWAgd2lsbCBiZQorICAgIGluc2VydGVkIGF0IHRoaXMg
bG9jYXRpb246CisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAgICBBVmlld1dpdGhMYXlvdXQgPSBF
bWJlci5WaWV3LmV4dGVuZCh7CisgICAgICBsYXlvdXQ6IEVtYmVyLkhUTUxCYXJzLmNvbXBpbGUo
IjxkaXYgY2xhc3M9J215LWRlY29yYXRpdmUtY2xhc3MnPnt7eWllbGR9fTwvZGl2PiIpLAorICAg
ICAgdGVtcGxhdGU6IEVtYmVyLkhUTUxCYXJzLmNvbXBpbGUoIkkgZ290IHdyYXBwZWQiKQorICAg
IH0pOworICAgIGBgYAorICAKKyAgICBXaWxsIHJlc3VsdCBpbiB2aWV3IGluc3RhbmNlcyB3aXRo
IGFuIEhUTUwgcmVwcmVzZW50YXRpb24gb2Y6CisgIAorICAgIGBgYGh0bWwKKyAgICA8ZGl2IGlk
PSJlbWJlcjEiIGNsYXNzPSJlbWJlci12aWV3Ij4KKyAgICAgIDxkaXYgY2xhc3M9Im15LWRlY29y
YXRpdmUtY2xhc3MiPgorICAgICAgICBJIGdvdCB3cmFwcGVkCisgICAgICA8L2Rpdj4KKyAgICA8
L2Rpdj4KKyAgICBgYGAKKyAgCisgICAgU2VlIFtFbWJlci5UZW1wbGF0ZXMuaGVscGVycy55aWVs
ZF0oL2FwaS9jbGFzc2VzL0VtYmVyLlRlbXBsYXRlcy5oZWxwZXJzLmh0bWwjbWV0aG9kX3lpZWxk
KQorICAgIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAKKyAgICAjIyBSZXNwb25kaW5nIHRvIEJy
b3dzZXIgRXZlbnRzCisgIAorICAgIFZpZXdzIGNhbiByZXNwb25kIHRvIHVzZXItaW5pdGlhdGVk
IGV2ZW50cyBpbiBvbmUgb2YgdGhyZWUgd2F5czogbWV0aG9kCisgICAgaW1wbGVtZW50YXRpb24s
IHRocm91Z2ggYW4gZXZlbnQgbWFuYWdlciwgYW5kIHRocm91Z2ggYHt7YWN0aW9ufX1gIGhlbHBl
ciB1c2UKKyAgICBpbiB0aGVpciB0ZW1wbGF0ZSBvciBsYXlvdXQuCisgIAorICAgICMjIyBNZXRo
b2QgSW1wbGVtZW50YXRpb24KKyAgCisgICAgVmlld3MgY2FuIHJlc3BvbmQgdG8gdXNlci1pbml0
aWF0ZWQgZXZlbnRzIGJ5IGltcGxlbWVudGluZyBhIG1ldGhvZCB0aGF0CisgICAgbWF0Y2hlcyB0
aGUgZXZlbnQgbmFtZS4gQSBgalF1ZXJ5LkV2ZW50YCBvYmplY3Qgd2lsbCBiZSBwYXNzZWQgYXMg
dGhlCisgICAgYXJndW1lbnQgdG8gdGhpcyBtZXRob2QuCisgIAorICAgIGBgYGphdmFzY3JpcHQK
KyAgICBBVmlldyA9IEVtYmVyLlZpZXcuZXh0ZW5kKHsKKyAgICAgIGNsaWNrOiBmdW5jdGlvbihl
dmVudCkgeworICAgICAgICAvLyB3aWxsIGJlIGNhbGxlZCB3aGVuIGFuIGluc3RhbmNlJ3MKKyAg
ICAgICAgLy8gcmVuZGVyZWQgZWxlbWVudCBpcyBjbGlja2VkCisgICAgICB9CisgICAgfSk7Cisg
ICAgYGBgCisgIAorICAgICMjIyBFdmVudCBNYW5hZ2VycworICAKKyAgICBWaWV3cyBjYW4gZGVm
aW5lIGFuIG9iamVjdCBhcyB0aGVpciBgZXZlbnRNYW5hZ2VyYCBwcm9wZXJ0eS4gVGhpcyBvYmpl
Y3QgY2FuCisgICAgdGhlbiBpbXBsZW1lbnQgbWV0aG9kcyB0aGF0IG1hdGNoIHRoZSBkZXNpcmVk
IGV2ZW50IG5hbWVzLiBNYXRjaGluZyBldmVudHMKKyAgICB0aGF0IG9jY3VyIG9uIHRoZSB2aWV3
J3MgcmVuZGVyZWQgSFRNTCBvciB0aGUgcmVuZGVyZWQgSFRNTCBvZiBhbnkgb2YgaXRzIERPTQor
ICAgIGRlc2NlbmRhbnRzIHdpbGwgdHJpZ2dlciB0aGlzIG1ldGhvZC4gQSBgalF1ZXJ5LkV2ZW50
YCBvYmplY3Qgd2lsbCBiZSBwYXNzZWQKKyAgICBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhl
IG1ldGhvZCBhbmQgYW4gIGBFbWJlci5WaWV3YCBvYmplY3QgYXMgdGhlCisgICAgc2Vjb25kLiBU
aGUgYEVtYmVyLlZpZXdgIHdpbGwgYmUgdGhlIHZpZXcgd2hvc2UgcmVuZGVyZWQgSFRNTCB3YXMg
aW50ZXJhY3RlZAorICAgIHdpdGguIFRoaXMgbWF5IGJlIHRoZSB2aWV3IHdpdGggdGhlIGBldmVu
dE1hbmFnZXJgIHByb3BlcnR5IG9yIG9uZSBvZiBpdHMKKyAgICBkZXNjZW5kYW50IHZpZXdzLgor
ICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgQVZpZXcgPSBFbWJlci5WaWV3LmV4dGVuZCh7Cisg
ICAgICBldmVudE1hbmFnZXI6IEVtYmVyLk9iamVjdC5jcmVhdGUoeworICAgICAgICBkb3VibGVD
bGljazogZnVuY3Rpb24oZXZlbnQsIHZpZXcpIHsKKyAgICAgICAgICAvLyB3aWxsIGJlIGNhbGxl
ZCB3aGVuIGFuIGluc3RhbmNlJ3MKKyAgICAgICAgICAvLyByZW5kZXJlZCBlbGVtZW50IG9yIGFu
eSByZW5kZXJpbmcKKyAgICAgICAgICAvLyBvZiB0aGlzIHZpZXcncyBkZXNjZW5kYW50CisgICAg
ICAgICAgLy8gZWxlbWVudHMgaXMgY2xpY2tlZAorICAgICAgICB9CisgICAgICB9KQorICAgIH0p
OworICAgIGBgYAorICAKKyAgICBBbiBldmVudCBkZWZpbmVkIGZvciBhbiBldmVudCBtYW5hZ2Vy
IHRha2VzIHByZWNlZGVuY2Ugb3ZlciBldmVudHMgb2YgdGhlCisgICAgc2FtZSBuYW1lIGhhbmRs
ZWQgdGhyb3VnaCBtZXRob2RzIG9uIHRoZSB2aWV3LgorICAKKyAgICBgYGBqYXZhc2NyaXB0Cisg
ICAgQVZpZXcgPSBFbWJlci5WaWV3LmV4dGVuZCh7CisgICAgICBtb3VzZUVudGVyOiBmdW5jdGlv
bihldmVudCkgeworICAgICAgICAvLyB3aWxsIG5ldmVyIHRyaWdnZXIuCisgICAgICB9LAorICAg
ICAgZXZlbnRNYW5hZ2VyOiBFbWJlci5PYmplY3QuY3JlYXRlKHsKKyAgICAgICAgbW91c2VFbnRl
cjogZnVuY3Rpb24oZXZlbnQsIHZpZXcpIHsKKyAgICAgICAgICAvLyB0YWtlcyBwcmVjZWRlbmNl
IG92ZXIgQVZpZXcjbW91c2VFbnRlcgorICAgICAgICB9CisgICAgICB9KQorICAgIH0pOworICAg
IGBgYAorICAKKyAgICBTaW1pbGFybHkgYSB2aWV3J3MgZXZlbnQgbWFuYWdlciB3aWxsIHRha2Ug
cHJlY2VkZW5jZSBmb3IgZXZlbnRzIG9mIGFueSB2aWV3cworICAgIHJlbmRlcmVkIGFzIGEgZGVz
Y2VuZGFudC4gQSBtZXRob2QgbmFtZSB0aGF0IG1hdGNoZXMgYW4gZXZlbnQgbmFtZSB3aWxsIG5v
dAorICAgIGJlIGNhbGxlZCBpZiB0aGUgdmlldyBpbnN0YW5jZSB3YXMgcmVuZGVyZWQgaW5zaWRl
IHRoZSBIVE1MIHJlcHJlc2VudGF0aW9uIG9mCisgICAgYSB2aWV3IHRoYXQgaGFzIGFuIGBldmVu
dE1hbmFnZXJgIHByb3BlcnR5IGRlZmluZWQgdGhhdCBoYW5kbGVzIGV2ZW50cyBvZiB0aGUKKyAg
ICBuYW1lLiBFdmVudHMgbm90IGhhbmRsZWQgYnkgdGhlIGV2ZW50IG1hbmFnZXIgd2lsbCBzdGls
bCB0cmlnZ2VyIG1ldGhvZCBjYWxscworICAgIG9uIHRoZSBkZXNjZW5kYW50LgorICAKKyAgICBg
YGBqYXZhc2NyaXB0CisgICAgdmFyIEFwcCA9IEVtYmVyLkFwcGxpY2F0aW9uLmNyZWF0ZSgpOwor
ICAgIEFwcC5PdXRlclZpZXcgPSBFbWJlci5WaWV3LmV4dGVuZCh7CisgICAgICB0ZW1wbGF0ZTog
RW1iZXIuSFRNTEJhcnMuY29tcGlsZSgib3V0ZXIge3sjdmlldyAnaW5uZXInfX1pbm5lcnt7L3Zp
ZXd9fSBvdXRlciIpLAorICAgICAgZXZlbnRNYW5hZ2VyOiBFbWJlci5PYmplY3QuY3JlYXRlKHsK
KyAgICAgICAgbW91c2VFbnRlcjogZnVuY3Rpb24oZXZlbnQsIHZpZXcpIHsKKyAgICAgICAgICAv
LyB2aWV3IG1pZ2h0IGJlIGluc3RhbmNlIG9mIGVpdGhlcgorICAgICAgICAgIC8vIE91dGVyVmll
dyBvciBJbm5lclZpZXcgZGVwZW5kaW5nIG9uCisgICAgICAgICAgLy8gd2hlcmUgb24gdGhlIHBh
Z2UgdGhlIHVzZXIgaW50ZXJhY3Rpb24gb2NjdXJyZWQKKyAgICAgICAgfQorICAgICAgfSkKKyAg
ICB9KTsKKyAgCisgICAgQXBwLklubmVyVmlldyA9IEVtYmVyLlZpZXcuZXh0ZW5kKHsKKyAgICAg
IGNsaWNrOiBmdW5jdGlvbihldmVudCkgeworICAgICAgICAvLyB3aWxsIGJlIGNhbGxlZCBpZiBy
ZW5kZXJlZCBpbnNpZGUKKyAgICAgICAgLy8gYW4gT3V0ZXJWaWV3IGJlY2F1c2UgT3V0ZXJWaWV3
J3MKKyAgICAgICAgLy8gZXZlbnRNYW5hZ2VyIGRvZXNuJ3QgaGFuZGxlIGNsaWNrIGV2ZW50cwor
ICAgICAgfSwKKyAgICAgIG1vdXNlRW50ZXI6IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIC8v
IHdpbGwgbmV2ZXIgYmUgY2FsbGVkIGlmIHJlbmRlcmVkIGluc2lkZQorICAgICAgICAvLyBhbiBP
dXRlclZpZXcuCisgICAgICB9CisgICAgfSk7CisgICAgYGBgCisgIAorICAgICMjIyBge3thY3Rp
b259fWAgSGVscGVyCisgIAorICAgIFNlZSBbRW1iZXIuVGVtcGxhdGVzLmhlbHBlcnMuYWN0aW9u
XSgvYXBpL2NsYXNzZXMvRW1iZXIuVGVtcGxhdGVzLmhlbHBlcnMuaHRtbCNtZXRob2RfYWN0aW9u
KS4KKyAgCisgICAgIyMjIEV2ZW50IE5hbWVzCisgIAorICAgIEFsbCBvZiB0aGUgZXZlbnQgaGFu
ZGxpbmcgYXBwcm9hY2hlcyBkZXNjcmliZWQgYWJvdmUgcmVzcG9uZCB0byB0aGUgc2FtZSBzZXQK
KyAgICBvZiBldmVudHMuIFRoZSBuYW1lcyBvZiB0aGUgYnVpbHQtaW4gZXZlbnRzIGFyZSBsaXN0
ZWQgYmVsb3cuIChUaGUgaGFzaCBvZgorICAgIGJ1aWx0LWluIGV2ZW50cyBleGlzdHMgaW4gYEVt
YmVyLkV2ZW50RGlzcGF0Y2hlcmAuKSBBZGRpdGlvbmFsLCBjdXN0b20gZXZlbnRzCisgICAgY2Fu
IGJlIHJlZ2lzdGVyZWQgYnkgdXNpbmcgYEVtYmVyLkFwcGxpY2F0aW9uLmN1c3RvbUV2ZW50c2Au
CisgIAorICAgIFRvdWNoIGV2ZW50czoKKyAgCisgICAgKiBgdG91Y2hTdGFydGAKKyAgICAqIGB0
b3VjaE1vdmVgCisgICAgKiBgdG91Y2hFbmRgCisgICAgKiBgdG91Y2hDYW5jZWxgCisgIAorICAg
IEtleWJvYXJkIGV2ZW50cworICAKKyAgICAqIGBrZXlEb3duYAorICAgICogYGtleVVwYAorICAg
ICogYGtleVByZXNzYAorICAKKyAgICBNb3VzZSBldmVudHMKKyAgCisgICAgKiBgbW91c2VEb3du
YAorICAgICogYG1vdXNlVXBgCisgICAgKiBgY29udGV4dE1lbnVgCisgICAgKiBgY2xpY2tgCisg
ICAgKiBgZG91YmxlQ2xpY2tgCisgICAgKiBgbW91c2VNb3ZlYAorICAgICogYGZvY3VzSW5gCisg
ICAgKiBgZm9jdXNPdXRgCisgICAgKiBgbW91c2VFbnRlcmAKKyAgICAqIGBtb3VzZUxlYXZlYAor
ICAKKyAgICBGb3JtIGV2ZW50czoKKyAgCisgICAgKiBgc3VibWl0YAorICAgICogYGNoYW5nZWAK
KyAgICAqIGBmb2N1c0luYAorICAgICogYGZvY3VzT3V0YAorICAgICogYGlucHV0YAorICAKKyAg
ICBIVE1MNSBkcmFnIGFuZCBkcm9wIGV2ZW50czoKKyAgCisgICAgKiBgZHJhZ1N0YXJ0YAorICAg
ICogYGRyYWdgCisgICAgKiBgZHJhZ0VudGVyYAorICAgICogYGRyYWdMZWF2ZWAKKyAgICAqIGBk
cmFnT3ZlcmAKKyAgICAqIGBkcmFnRW5kYAorICAgICogYGRyb3BgCisgIAorICAgICMjIGB7e3Zp
ZXd9fWAgSGVscGVyCisgIAorICAgIE90aGVyIGBFbWJlci5WaWV3YCBpbnN0YW5jZXMgY2FuIGJl
IGluY2x1ZGVkIGFzIHBhcnQgb2YgYSB2aWV3J3MgdGVtcGxhdGUgYnkKKyAgICB1c2luZyB0aGUg
YHt7dmlld319YCBoZWxwZXIuIFNlZSBbRW1iZXIuVGVtcGxhdGVzLmhlbHBlcnMudmlld10oL2Fw
aS9jbGFzc2VzL0VtYmVyLlRlbXBsYXRlcy5oZWxwZXJzLmh0bWwjbWV0aG9kX3ZpZXcpCisgICAg
Zm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisgIAorICAgIEBjbGFzcyBWaWV3CisgICAgQG5h
bWVzcGFjZSBFbWJlcgorICAgIEBleHRlbmRzIEVtYmVyLkNvcmVWaWV3CisgICAgQGRlcHJlY2F0
ZWQgU2VlIGh0dHA6Ly9lbWJlcmpzLmNvbS9kZXByZWNhdGlvbnMvdjEueC8jdG9jX2VtYmVyLXZp
ZXcKKyAgICBAdXNlcyBFbWJlci5WaWV3U3VwcG9ydAorICAgIEB1c2VzIEVtYmVyLlZpZXdDb250
ZXh0U3VwcG9ydAorICAgIEB1c2VzIEVtYmVyLlZpZXdDaGlsZFZpZXdzU3VwcG9ydAorICAgIEB1
c2VzIEVtYmVyLlRlbXBsYXRlUmVuZGVyaW5nU3VwcG9ydAorICAgIEB1c2VzIEVtYmVyLkNsYXNz
TmFtZXNTdXBwb3J0CisgICAgQHVzZXMgRW1iZXIuQXR0cmlidXRlQmluZGluZ3NTdXBwb3J0Cisg
ICAgQHVzZXMgRW1iZXIuTGVnYWN5Vmlld1N1cHBvcnQKKyAgICBAdXNlcyBFbWJlci5JbnN0cnVt
ZW50YXRpb25TdXBwb3J0CisgICAgQHVzZXMgRW1iZXIuVmlzaWJpbGl0eVN1cHBvcnQKKyAgICBA
dXNlcyBFbWJlci5BcmlhUm9sZVN1cHBvcnQKKyAgICBAcHVibGljCisgICovCisgIC8vIGpzY3M6
ZGlzYWJsZSB2YWxpZGF0ZUluZGVudGF0aW9uCisgIHZhciBWaWV3ID0gX2VtYmVyVmlld3NWaWV3
c0NvcmVfdmlldy5kZWZhdWx0LmV4dGVuZChfZW1iZXJWaWV3c01peGluc1ZpZXdfY29udGV4dF9z
dXBwb3J0LmRlZmF1bHQsIF9lbWJlclZpZXdzTWl4aW5zVmlld19jaGlsZF92aWV3c19zdXBwb3J0
LmRlZmF1bHQsIF9lbWJlclZpZXdzTWl4aW5zTGVnYWN5X2NoaWxkX3ZpZXdzX3N1cHBvcnQuZGVm
YXVsdCwgX2VtYmVyVmlld3NNaXhpbnNWaWV3X3N0YXRlX3N1cHBvcnQuZGVmYXVsdCwgX2VtYmVy
Vmlld3NNaXhpbnNUZW1wbGF0ZV9yZW5kZXJpbmdfc3VwcG9ydC5kZWZhdWx0LCBfZW1iZXJWaWV3
c01peGluc0NsYXNzX25hbWVzX3N1cHBvcnQuZGVmYXVsdCwgX2VtYmVyVmlld3NNaXhpbnNMZWdh
Y3lfdmlld19zdXBwb3J0LmRlZmF1bHQsIF9lbWJlclZpZXdzTWl4aW5zSW5zdHJ1bWVudGF0aW9u
X3N1cHBvcnQuZGVmYXVsdCwgX2VtYmVyVmlld3NNaXhpbnNWaXNpYmlsaXR5X3N1cHBvcnQuZGVm
YXVsdCwgX2VtYmVyVmlld3NDb21wYXRBdHRyc1Byb3h5LmRlZmF1bHQsIF9lbWJlclZpZXdzTWl4
aW5zQXJpYV9yb2xlX3N1cHBvcnQuZGVmYXVsdCwgX2VtYmVyVmlld3NNaXhpbnNWaWV3X3N1cHBv
cnQuZGVmYXVsdCwgeworICAgIGluaXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHRoaXMuX3N1cGVy
LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisKKyAgICAgIGlmICghdGhpcy5fdmlld1JlZ2lzdHJ5
KSB7CisgICAgICAgIHRoaXMuX3ZpZXdSZWdpc3RyeSA9IFZpZXcudmlld3M7CisgICAgICB9Cisg
ICAgfSwKKworICAgIC8qKgorICAgICAgR2l2ZW4gYSBwcm9wZXJ0eSBuYW1lLCByZXR1cm5zIGEg
ZGFzaGVyaXplZCB2ZXJzaW9uIG9mIHRoYXQKKyAgICAgIHByb3BlcnR5IG5hbWUgaWYgdGhlIHBy
b3BlcnR5IGV2YWx1YXRlcyB0byBhIG5vbi1mYWxzeSB2YWx1ZS4KKyAgICAgICBGb3IgZXhhbXBs
ZSwgaWYgdGhlIHZpZXcgaGFzIHByb3BlcnR5IGBpc1VyZ2VudGAgdGhhdCBldmFsdWF0ZXMgdG8g
dHJ1ZSwKKyAgICAgIHBhc3NpbmcgYGlzVXJnZW50YCB0byB0aGlzIG1ldGhvZCB3aWxsIHJldHVy
biBgImlzLXVyZ2VudCJgLgorICAgICAgIEBtZXRob2QgX2NsYXNzU3RyaW5nRm9yUHJvcGVydHkK
KyAgICAgIEBwYXJhbSBwcm9wZXJ0eQorICAgICAgQHByaXZhdGUKKyAgICAqLworICAgIF9jbGFz
c1N0cmluZ0ZvclByb3BlcnR5OiBmdW5jdGlvbiAocGFyc2VkUGF0aCkgeworICAgICAgcmV0dXJu
IFZpZXcuX2NsYXNzU3RyaW5nRm9yVmFsdWUocGFyc2VkUGF0aC5wYXRoLCBwYXJzZWRQYXRoLnN0
cmVhbS52YWx1ZSgpLCBwYXJzZWRQYXRoLmNsYXNzTmFtZSwgcGFyc2VkUGF0aC5mYWxzeUNsYXNz
TmFtZSk7CisgICAgfQorICB9KTsKKworICAvLyBqc2NzOmVuYWJsZSB2YWxpZGF0ZUluZGVudGF0
aW9uCisKKyAgLyoKKyAgICBEZXNjcmliZSBob3cgdGhlIHNwZWNpZmllZCBhY3Rpb25zIHNob3Vs
ZCBiZWhhdmUgaW4gdGhlIHZhcmlvdXMKKyAgICBzdGF0ZXMgdGhhdCBhIHZpZXcgY2FuIGV4aXN0
IGluLiBQb3NzaWJsZSBzdGF0ZXM6CisgIAorICAgICogcHJlUmVuZGVyOiB3aGVuIGEgdmlldyBp
cyBmaXJzdCBpbnN0YW50aWF0ZWQsIGFuZCBhZnRlciBpdHMKKyAgICAgIGVsZW1lbnQgd2FzIGRl
c3Ryb3llZCwgaXQgaXMgaW4gdGhlIHByZVJlbmRlciBzdGF0ZQorICAgICogaW5CdWZmZXI6IG9u
Y2UgYSB2aWV3IGhhcyBiZWVuIHJlbmRlcmVkLCBidXQgYmVmb3JlIGl0IGhhcworICAgICAgYmVl
biBpbnNlcnRlZCBpbnRvIHRoZSBET00sIGl0IGlzIGluIHRoZSBpbkJ1ZmZlciBzdGF0ZQorICAg
ICogaGFzRWxlbWVudDogdGhlIERPTSByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmlldyBpcyBjcmVh
dGVkLAorICAgICAgYW5kIGlzIHJlYWR5IHRvIGJlIGluc2VydGVkCisgICAgKiBpbkRPTTogb25j
ZSBhIHZpZXcgaGFzIGJlZW4gaW5zZXJ0ZWQgaW50byB0aGUgRE9NIGl0IGlzIGluCisgICAgICB0
aGUgaW5ET00gc3RhdGUuIEEgdmlldyBzcGVuZHMgdGhlIHZhc3QgbWFqb3JpdHkgb2YgaXRzCisg
ICAgICBleGlzdGVuY2UgaW4gdGhpcyBzdGF0ZS4KKyAgICAqIGRlc3Ryb3llZDogb25jZSBhIHZp
ZXcgaGFzIGJlZW4gZGVzdHJveWVkICh1c2luZyB0aGUgZGVzdHJveQorICAgICAgbWV0aG9kKSwg
aXQgaXMgaW4gdGhpcyBzdGF0ZS4gTm8gZnVydGhlciBhY3Rpb25zIGNhbiBiZSBpbnZva2VkCisg
ICAgICBvbiBhIGRlc3Ryb3llZCB2aWV3LgorICAqLworCisgIC8vIGluIHRoZSBkZXN0cm95ZWQg
c3RhdGUsIGV2ZXJ5dGhpbmcgaXMgaWxsZWdhbAorCisgIC8vIGJlZm9yZSByZW5kZXJpbmcgaGFz
IGJlZ3VuLCBhbGwgbGVnYWwgbWFuaXB1bGF0aW9ucyBhcmUgbm9vcHMuCisKKyAgLy8gaW5zaWRl
IHRoZSBidWZmZXIsIGxlZ2FsIG1hbmlwdWxhdGlvbnMgYXJlIGRvbmUgb24gdGhlIGJ1ZmZlcgor
CisgIC8vIG9uY2UgdGhlIHZpZXcgaGFzIGJlZW4gaW5zZXJ0ZWQgaW50byB0aGUgRE9NLCBsZWdh
bCBtYW5pcHVsYXRpb25zCisgIC8vIGFyZSBkb25lIG9uIHRoZSBET00gZWxlbWVudC4KKworICBW
aWV3LnJlb3BlbkNsYXNzKHsKKyAgICAvKioKKyAgICAgIEdsb2JhbCB2aWV3cyBoYXNoCisgICAg
ICAgQHByb3BlcnR5IHZpZXdzCisgICAgICBAc3RhdGljCisgICAgICBAdHlwZSBPYmplY3QKKyAg
ICAgIEBwcml2YXRlCisgICAgKi8KKyAgICB2aWV3czoge30KKyAgfSk7CisKKyAgZXhwb3J0cy5k
ZWZhdWx0ID0gVmlldzsKKyAgZXhwb3J0cy5WaWV3Q29udGV4dFN1cHBvcnQgPSBfZW1iZXJWaWV3
c01peGluc1ZpZXdfY29udGV4dF9zdXBwb3J0LmRlZmF1bHQ7CisgIGV4cG9ydHMuVmlld0NoaWxk
Vmlld3NTdXBwb3J0ID0gX2VtYmVyVmlld3NNaXhpbnNWaWV3X2NoaWxkX3ZpZXdzX3N1cHBvcnQu
ZGVmYXVsdDsKKyAgZXhwb3J0cy5WaWV3U3RhdGVTdXBwb3J0ID0gX2VtYmVyVmlld3NNaXhpbnNW
aWV3X3N0YXRlX3N1cHBvcnQuZGVmYXVsdDsKKyAgZXhwb3J0cy5UZW1wbGF0ZVJlbmRlcmluZ1N1
cHBvcnQgPSBfZW1iZXJWaWV3c01peGluc1RlbXBsYXRlX3JlbmRlcmluZ19zdXBwb3J0LmRlZmF1
bHQ7CisgIGV4cG9ydHMuQ2xhc3NOYW1lc1N1cHBvcnQgPSBfZW1iZXJWaWV3c01peGluc0NsYXNz
X25hbWVzX3N1cHBvcnQuZGVmYXVsdDsKK30pOworLy8gZm9yIHRoZSBzaWRlIGVmZmVjdCBvZiBl
eHRlbmRpbmcgRW1iZXIucnVuLnF1ZXVlcworZW5pZmVkKCdlbWJlci9pbmRleCcsIFsnZXhwb3J0
cycsICdlbWJlci1tZXRhbCcsICdlbWJlci1ydW50aW1lJywgJ2VtYmVyLXZpZXdzJywgJ2VtYmVy
LXJvdXRpbmcnLCAnZW1iZXItYXBwbGljYXRpb24nLCAnZW1iZXItZXh0ZW5zaW9uLXN1cHBvcnQn
LCAnZW1iZXItaHRtbGJhcnMnLCAnZW1iZXItcm91dGluZy1odG1sYmFycycsICdlbWJlci1yb3V0
aW5nLXZpZXdzJywgJ3JlcXVpcmUnLCAnZW1iZXItcnVudGltZS9zeXN0ZW0vbGF6eV9sb2FkJ10s
IGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbCwgX2VtYmVyUnVudGltZSwgX2VtYmVyVmll
d3MsIF9lbWJlclJvdXRpbmcsIF9lbWJlckFwcGxpY2F0aW9uLCBfZW1iZXJFeHRlbnNpb25TdXBw
b3J0LCBfZW1iZXJIdG1sYmFycywgX2VtYmVyUm91dGluZ0h0bWxiYXJzLCBfZW1iZXJSb3V0aW5n
Vmlld3MsIF9yZXF1aXJlLCBfZW1iZXJSdW50aW1lU3lzdGVtTGF6eV9sb2FkKSB7CisgIC8vIHJl
cXVpcmUgdGhlIG1haW4gZW50cnkgcG9pbnRzIGZvciBlYWNoIG9mIHRoZXNlIHBhY2thZ2VzCisg
IC8vIHRoaXMgaXMgc28gdGhhdCB0aGUgZ2xvYmFsIGV4cG9ydHMgb2NjdXIgcHJvcGVybHkKKyAg
J3VzZSBzdHJpY3QnOworCisgIGlmIChfcmVxdWlyZS5oYXMoJ2VtYmVyLXRlbXBsYXRlLWNvbXBp
bGVyJykpIHsKKyAgICBfcmVxdWlyZS5kZWZhdWx0KCdlbWJlci10ZW1wbGF0ZS1jb21waWxlcicp
OworICB9CisKKyAgLy8gZG8gdGhpcyB0byBlbnN1cmUgdGhhdCBFbWJlci5UZXN0IGlzIGRlZmlu
ZWQgcHJvcGVybHkgb24gdGhlIGdsb2JhbAorICAvLyBpZiBpdCBpcyBwcmVzZW50LgorICBpZiAo
X3JlcXVpcmUuaGFzKCdlbWJlci10ZXN0aW5nJykpIHsKKyAgICBfcmVxdWlyZS5kZWZhdWx0KCdl
bWJlci10ZXN0aW5nJyk7CisgIH0KKworICBfZW1iZXJSdW50aW1lU3lzdGVtTGF6eV9sb2FkLnJ1
bkxvYWRIb29rcygnRW1iZXInKTsKKworICAvKioKKyAgQG1vZHVsZSBlbWJlcgorICAqLworfSk7
CitlbmlmZWQoJ2h0bWxiYXJzLXJ1bnRpbWUnLCBbJ2V4cG9ydHMnLCAnaHRtbGJhcnMtcnVudGlt
ZS9ob29rcycsICdodG1sYmFycy1ydW50aW1lL3JlbmRlcicsICdodG1sYmFycy11dGlsL21vcnBo
LXV0aWxzJywgJ2h0bWxiYXJzLXV0aWwvdGVtcGxhdGUtdXRpbHMnXSwgZnVuY3Rpb24gKGV4cG9y
dHMsIF9odG1sYmFyc1J1bnRpbWVIb29rcywgX2h0bWxiYXJzUnVudGltZVJlbmRlciwgX2h0bWxi
YXJzVXRpbE1vcnBoVXRpbHMsIF9odG1sYmFyc1V0aWxUZW1wbGF0ZVV0aWxzKSB7CisgICd1c2Ug
c3RyaWN0JzsKKworICB2YXIgaW50ZXJuYWwgPSB7CisgICAgYmxvY2tGb3I6IF9odG1sYmFyc1V0
aWxUZW1wbGF0ZVV0aWxzLmJsb2NrRm9yLAorICAgIG1hbnVhbEVsZW1lbnQ6IF9odG1sYmFyc1J1
bnRpbWVSZW5kZXIubWFudWFsRWxlbWVudCwKKyAgICBob3N0QmxvY2s6IF9odG1sYmFyc1J1bnRp
bWVIb29rcy5ob3N0QmxvY2ssCisgICAgY29udGludWVCbG9jazogX2h0bWxiYXJzUnVudGltZUhv
b2tzLmNvbnRpbnVlQmxvY2ssCisgICAgaG9zdFlpZWxkV2l0aFNoYWRvd1RlbXBsYXRlOiBfaHRt
bGJhcnNSdW50aW1lSG9va3MuaG9zdFlpZWxkV2l0aFNoYWRvd1RlbXBsYXRlLAorICAgIHZpc2l0
Q2hpbGRyZW46IF9odG1sYmFyc1V0aWxNb3JwaFV0aWxzLnZpc2l0Q2hpbGRyZW4sCisgICAgdmFs
aWRhdGVDaGlsZE1vcnBoczogX2h0bWxiYXJzVXRpbE1vcnBoVXRpbHMudmFsaWRhdGVDaGlsZE1v
cnBocywKKyAgICBjbGVhck1vcnBoOiBfaHRtbGJhcnNVdGlsVGVtcGxhdGVVdGlscy5jbGVhck1v
cnBoCisgIH07CisKKyAgZXhwb3J0cy5ob29rcyA9IF9odG1sYmFyc1J1bnRpbWVIb29rcy5kZWZh
dWx0OworICBleHBvcnRzLnJlbmRlciA9IF9odG1sYmFyc1J1bnRpbWVSZW5kZXIuZGVmYXVsdDsK
KyAgZXhwb3J0cy5pbnRlcm5hbCA9IGludGVybmFsOworfSk7CitlbmlmZWQoJ2h0bWxiYXJzLXJ1
bnRpbWUvZXhwcmVzc2lvbi12aXNpdG9yJywgWydleHBvcnRzJ10sIGZ1bmN0aW9uIChleHBvcnRz
KSB7CisgIC8qKgorICAgICMgRXhwcmVzc2lvbiBOb2RlczoKKyAgCisgICAgVGhlc2Ugbm9kZXMg
YXJlIG5vdCBkaXJlY3RseSByZXNwb25zaWJsZSBmb3IgYW55IHBhcnQgb2YgdGhlIERPTSwgYnV0
IGFyZQorICAgIGV2ZW50dWFsbHkgcGFzc2VkIHRvIGEgU3RhdGVtZW50IE5vZGUuCisgIAorICAg
ICogZ2V0CisgICAgKiBzdWJleHByCisgICAgKiBjb25jYXQKKyAgKi8KKworICAndXNlIHN0cmlj
dCc7CisKKyAgZXhwb3J0cy5hY2NlcHRQYXJhbXMgPSBhY2NlcHRQYXJhbXM7CisgIGV4cG9ydHMu
YWNjZXB0SGFzaCA9IGFjY2VwdEhhc2g7CisKKyAgZnVuY3Rpb24gYWNjZXB0UGFyYW1zKG5vZGVz
LCBlbnYsIHNjb3BlKSB7CisgICAgdmFyIGFycmF5ID0gW107CisKKyAgICBmb3IgKHZhciBpID0g
MCwgbCA9IG5vZGVzLmxlbmd0aDsgaSA8IGw7IGkrKykgeworICAgICAgYXJyYXkucHVzaChhY2Nl
cHRFeHByZXNzaW9uKG5vZGVzW2ldLCBlbnYsIHNjb3BlKS52YWx1ZSk7CisgICAgfQorCisgICAg
cmV0dXJuIGFycmF5OworICB9CisKKyAgZnVuY3Rpb24gYWNjZXB0SGFzaChwYWlycywgZW52LCBz
Y29wZSkgeworICAgIHZhciBvYmplY3QgPSB7fTsKKworICAgIGZvciAodmFyIGkgPSAwLCBsID0g
cGFpcnMubGVuZ3RoOyBpIDwgbDsgaSArPSAyKSB7CisgICAgICB2YXIga2V5ID0gcGFpcnNbaV07
CisgICAgICB2YXIgdmFsdWUgPSBwYWlyc1tpICsgMV07CisgICAgICBvYmplY3Rba2V5XSA9IGFj
Y2VwdEV4cHJlc3Npb24odmFsdWUsIGVudiwgc2NvcGUpLnZhbHVlOworICAgIH0KKworICAgIHJl
dHVybiBvYmplY3Q7CisgIH0KKworICBmdW5jdGlvbiBhY2NlcHRFeHByZXNzaW9uKG5vZGUsIGVu
diwgc2NvcGUpIHsKKyAgICB2YXIgcmV0ID0geyB2YWx1ZTogbnVsbCB9OworCisgICAgLy8gUHJp
bWl0aXZlIGxpdGVyYWxzIGFyZSB1bmFtYmlndW91c2x5IG5vbi1hcnJheSByZXByZXNlbnRhdGlv
bnMgb2YKKyAgICAvLyB0aGVtc2VsdmVzLgorICAgIGlmICh0eXBlb2Ygbm9kZSAhPT0gJ29iamVj
dCcgfHwgbm9kZSA9PT0gbnVsbCkgeworICAgICAgcmV0LnZhbHVlID0gbm9kZTsKKyAgICB9IGVs
c2UgeworICAgICAgcmV0LnZhbHVlID0gZXZhbHVhdGVOb2RlKG5vZGUsIGVudiwgc2NvcGUpOwor
ICAgIH0KKworICAgIHJldHVybiByZXQ7CisgIH0KKworICBmdW5jdGlvbiBldmFsdWF0ZU5vZGUo
bm9kZSwgZW52LCBzY29wZSkgeworICAgIHN3aXRjaCAobm9kZVswXSkgeworICAgICAgLy8gY2Fu
IGJlIHVzZWQgYnkgbWFudWFsRWxlbWVudAorICAgICAgY2FzZSAndmFsdWUnOgorICAgICAgICBy
ZXR1cm4gbm9kZVsxXTsKKyAgICAgIGNhc2UgJ2dldCc6CisgICAgICAgIHJldHVybiBldmFsdWF0
ZUdldChub2RlLCBlbnYsIHNjb3BlKTsKKyAgICAgIGNhc2UgJ3N1YmV4cHInOgorICAgICAgICBy
ZXR1cm4gZXZhbHVhdGVTdWJleHByKG5vZGUsIGVudiwgc2NvcGUpOworICAgICAgY2FzZSAnY29u
Y2F0JzoKKyAgICAgICAgcmV0dXJuIGV2YWx1YXRlQ29uY2F0KG5vZGUsIGVudiwgc2NvcGUpOwor
ICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIGV2YWx1YXRlR2V0KG5vZGUsIGVudiwgc2NvcGUpIHsK
KyAgICB2YXIgcGF0aCA9IG5vZGVbMV07CisKKyAgICByZXR1cm4gZW52Lmhvb2tzLmdldChlbnYs
IHNjb3BlLCBwYXRoKTsKKyAgfQorCisgIGZ1bmN0aW9uIGV2YWx1YXRlU3ViZXhwcihub2RlLCBl
bnYsIHNjb3BlKSB7CisgICAgdmFyIHBhdGggPSBub2RlWzFdOworICAgIHZhciByYXdQYXJhbXMg
PSBub2RlWzJdOworICAgIHZhciByYXdIYXNoID0gbm9kZVszXTsKKworICAgIHZhciBwYXJhbXMg
PSBhY2NlcHRQYXJhbXMocmF3UGFyYW1zLCBlbnYsIHNjb3BlKTsKKyAgICB2YXIgaGFzaCA9IGFj
Y2VwdEhhc2gocmF3SGFzaCwgZW52LCBzY29wZSk7CisKKyAgICByZXR1cm4gZW52Lmhvb2tzLnN1
YmV4cHIoZW52LCBzY29wZSwgcGF0aCwgcGFyYW1zLCBoYXNoKTsKKyAgfQorCisgIGZ1bmN0aW9u
IGV2YWx1YXRlQ29uY2F0KG5vZGUsIGVudiwgc2NvcGUpIHsKKyAgICB2YXIgcmF3UGFydHMgPSBu
b2RlWzFdOworCisgICAgdmFyIHBhcnRzID0gYWNjZXB0UGFyYW1zKHJhd1BhcnRzLCBlbnYsIHNj
b3BlKTsKKworICAgIHJldHVybiBlbnYuaG9va3MuY29uY2F0KGVudiwgcGFydHMpOworICB9Cit9
KTsKK2VuaWZlZCgiaHRtbGJhcnMtcnVudGltZS9ob29rcyIsIFsiZXhwb3J0cyIsICJodG1sYmFy
cy1ydW50aW1lL3JlbmRlciIsICJtb3JwaC1yYW5nZS9tb3JwaC1saXN0IiwgImh0bWxiYXJzLXV0
aWwvb2JqZWN0LXV0aWxzIiwgImh0bWxiYXJzLXV0aWwvbW9ycGgtdXRpbHMiLCAiaHRtbGJhcnMt
dXRpbC90ZW1wbGF0ZS11dGlscyJdLCBmdW5jdGlvbiAoZXhwb3J0cywgX2h0bWxiYXJzUnVudGlt
ZVJlbmRlciwgX21vcnBoUmFuZ2VNb3JwaExpc3QsIF9odG1sYmFyc1V0aWxPYmplY3RVdGlscywg
X2h0bWxiYXJzVXRpbE1vcnBoVXRpbHMsIF9odG1sYmFyc1V0aWxUZW1wbGF0ZVV0aWxzKSB7Cisg
ICJ1c2Ugc3RyaWN0IjsKKworICBleHBvcnRzLndyYXAgPSB3cmFwOworICBleHBvcnRzLndyYXBG
b3JIZWxwZXIgPSB3cmFwRm9ySGVscGVyOworICBleHBvcnRzLmNyZWF0ZVNjb3BlID0gY3JlYXRl
U2NvcGU7CisgIGV4cG9ydHMuY3JlYXRlRnJlc2hTY29wZSA9IGNyZWF0ZUZyZXNoU2NvcGU7Cisg
IGV4cG9ydHMuYmluZFNoYWRvd1Njb3BlID0gYmluZFNoYWRvd1Njb3BlOworICBleHBvcnRzLmNy
ZWF0ZUNoaWxkU2NvcGUgPSBjcmVhdGVDaGlsZFNjb3BlOworICBleHBvcnRzLmJpbmRTZWxmID0g
YmluZFNlbGY7CisgIGV4cG9ydHMudXBkYXRlU2VsZiA9IHVwZGF0ZVNlbGY7CisgIGV4cG9ydHMu
YmluZExvY2FsID0gYmluZExvY2FsOworICBleHBvcnRzLnVwZGF0ZUxvY2FsID0gdXBkYXRlTG9j
YWw7CisgIGV4cG9ydHMuYmluZEJsb2NrID0gYmluZEJsb2NrOworICBleHBvcnRzLmJsb2NrID0g
YmxvY2s7CisgIGV4cG9ydHMuY29udGludWVCbG9jayA9IGNvbnRpbnVlQmxvY2s7CisgIGV4cG9y
dHMuaG9zdEJsb2NrID0gaG9zdEJsb2NrOworICBleHBvcnRzLmhhbmRsZVJlZGlyZWN0ID0gaGFu
ZGxlUmVkaXJlY3Q7CisgIGV4cG9ydHMuaGFuZGxlS2V5d29yZCA9IGhhbmRsZUtleXdvcmQ7Cisg
IGV4cG9ydHMubGlua1JlbmRlck5vZGUgPSBsaW5rUmVuZGVyTm9kZTsKKyAgZXhwb3J0cy5pbmxp
bmUgPSBpbmxpbmU7CisgIGV4cG9ydHMua2V5d29yZCA9IGtleXdvcmQ7CisgIGV4cG9ydHMuaW52
b2tlSGVscGVyID0gaW52b2tlSGVscGVyOworICBleHBvcnRzLmNsYXNzaWZ5ID0gY2xhc3NpZnk7
CisgIGV4cG9ydHMucGFydGlhbCA9IHBhcnRpYWw7CisgIGV4cG9ydHMucmFuZ2UgPSByYW5nZTsK
KyAgZXhwb3J0cy5lbGVtZW50ID0gZWxlbWVudDsKKyAgZXhwb3J0cy5hdHRyaWJ1dGUgPSBhdHRy
aWJ1dGU7CisgIGV4cG9ydHMuc3ViZXhwciA9IHN1YmV4cHI7CisgIGV4cG9ydHMuZ2V0ID0gZ2V0
OworICBleHBvcnRzLmdldFJvb3QgPSBnZXRSb290OworICBleHBvcnRzLmdldEJsb2NrID0gZ2V0
QmxvY2s7CisgIGV4cG9ydHMuZ2V0Q2hpbGQgPSBnZXRDaGlsZDsKKyAgZXhwb3J0cy5nZXRWYWx1
ZSA9IGdldFZhbHVlOworICBleHBvcnRzLmdldENlbGxPclZhbHVlID0gZ2V0Q2VsbE9yVmFsdWU7
CisgIGV4cG9ydHMuY29tcG9uZW50ID0gY29tcG9uZW50OworICBleHBvcnRzLmNvbmNhdCA9IGNv
bmNhdDsKKyAgZXhwb3J0cy5oYXNIZWxwZXIgPSBoYXNIZWxwZXI7CisgIGV4cG9ydHMubG9va3Vw
SGVscGVyID0gbG9va3VwSGVscGVyOworICBleHBvcnRzLmJpbmRTY29wZSA9IGJpbmRTY29wZTsK
KyAgZXhwb3J0cy51cGRhdGVTY29wZSA9IHVwZGF0ZVNjb3BlOworCisgIC8qKgorICAgIEhUTUxC
YXJzIGRlbGVnYXRlcyB0aGUgcnVudGltZSBiZWhhdmlvciBvZiBhIHRlbXBsYXRlIHRvCisgICAg
aG9va3MgcHJvdmlkZWQgYnkgdGhlIGhvc3QgZW52aXJvbm1lbnQuIFRoZXNlIGhvb2tzIGV4cGxh
aW4KKyAgICB0aGUgbGV4aWNhbCBlbnZpcm9ubWVudCBvZiBhIEhhbmRsZWJhcnMgdGVtcGxhdGUs
IHRoZSBpbnRlcm5hbAorICAgIHJlcHJlc2VudGF0aW9uIG9mIHJlZmVyZW5jZXMsIGFuZCB0aGUg
aW50ZXJhY3Rpb24gYmV0d2VlbiBhbgorICAgIEhUTUxCYXJzIHRlbXBsYXRlIGFuZCB0aGUgRE9N
IGl0IGlzIG1hbmFnaW5nLgorICAKKyAgICBXaGlsZSBIVE1MQmFycyBob3N0IGhvb2tzIGhhdmUg
YWNjZXNzIHRvIGFsbCBvZiB0aGlzIGludGVybmFsCisgICAgbWFjaGluZXJ5LCB0ZW1wbGF0ZXMg
YW5kIGhlbHBlcnMgaGF2ZSBhY2Nlc3MgdG8gdGhlIGFic3RyYWN0aW9uCisgICAgcHJvdmlkZWQg
YnkgdGhlIGhvc3QgaG9va3MuCisgIAorICAgICMjIFRoZSBMZXhpY2FsIEVudmlyb25tZW50Cisg
IAorICAgIFRoZSBkZWZhdWx0IGxleGljYWwgZW52aXJvbm1lbnQgb2YgYW4gSFRNTEJhcnMgdGVt
cGxhdGUgaW5jbHVkZXM6CisgIAorICAgICogQW55IGxvY2FsIHZhcmlhYmxlcywgcHJvdmlkZWQg
YnkgKmJsb2NrIGFyZ3VtZW50cyoKKyAgICAqIFRoZSBjdXJyZW50IHZhbHVlIG9mIGBzZWxmYAor
ICAKKyAgICAjIyBTaW1wbGUgTmVzdGluZworICAKKyAgICBMZXQncyBsb29rIGF0IGEgc2ltcGxl
IHRlbXBsYXRlIHdpdGggYSBuZXN0ZWQgYmxvY2s6CisgIAorICAgIGBgYGhicworICAgIDxoMT57
e3RpdGxlfX08L2gxPgorICAKKyAgICB7eyNpZiBhdXRob3J9fQorICAgICAgPHAgY2xhc3M9ImJ5
bGluZSI+e3thdXRob3J9fTwvcD4KKyAgICB7ey9pZn19CisgICAgYGBgCisgIAorICAgIEluIHRo
aXMgY2FzZSwgdGhlIGxleGljYWwgZW52aXJvbm1lbnQgYXQgdGhlIHRvcC1sZXZlbCBvZiB0aGUK
KyAgICB0ZW1wbGF0ZSBkb2VzIG5vdCBjaGFuZ2UgaW5zaWRlIG9mIHRoZSBgaWZgIGJsb2NrLiBU
aGlzIGlzCisgICAgYWNoaWV2ZWQgdmlhIGFuIGltcGxlbWVudGF0aW9uIG9mIGBpZmAgdGhhdCBs
b29rcyBsaWtlIHRoaXM6CisgIAorICAgIGBgYGpzCisgICAgcmVnaXN0ZXJIZWxwZXIoJ2lmJywg
ZnVuY3Rpb24ocGFyYW1zKSB7CisgICAgICBpZiAoISFwYXJhbXNbMF0pIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMueWllbGQoKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgICBgYGAKKyAgCisgICAgQSBj
YWxsIHRvIGB0aGlzLnlpZWxkYCBpbnZva2VzIHRoZSBjaGlsZCB0ZW1wbGF0ZSB1c2luZyB0aGUK
KyAgICBjdXJyZW50IGxleGljYWwgZW52aXJvbm1lbnQuCisgIAorICAgICMjIEJsb2NrIEFyZ3Vt
ZW50cworICAKKyAgICBJdCBpcyBwb3NzaWJsZSBmb3IgbmVzdGVkIGJsb2NrcyB0byBpbnRyb2R1
Y2UgbmV3IGxvY2FsCisgICAgdmFyaWFibGVzOgorICAKKyAgICBgYGBoYnMKKyAgICB7eyNjb3Vu
dC1jYWxscyBhcyB8aXx9fQorICAgIDxoMT57e3RpdGxlfX08L2gxPgorICAgIDxwPkNhbGxlZCB7
e2l9fSB0aW1lczwvcD4KKyAgICB7ey9jb3VudH19CisgICAgYGBgCisgIAorICAgIEluIHRoaXMg
ZXhhbXBsZSwgdGhlIGNoaWxkIGJsb2NrIGluaGVyaXRzIGl0cyBzdXJyb3VuZGluZworICAgIGxl
eGljYWwgZW52aXJvbm1lbnQsIGJ1dCBhdWdtZW50cyBpdCB3aXRoIGEgc2luZ2xlIG5ldworICAg
IHZhcmlhYmxlIGJpbmRpbmcuCisgIAorICAgIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgY291bnQt
Y2FsbHNgIHN1cHBsaWVzIHRoZSB2YWx1ZSBvZgorICAgIGBpYCwgYnV0IGRvZXMgbm90IG90aGVy
d2lzZSBhbHRlciB0aGUgZW52aXJvbm1lbnQ6CisgIAorICAgIGBgYGpzCisgICAgdmFyIGNvdW50
ID0gMDsKKyAgICByZWdpc3RlckhlbHBlcignY291bnQtY2FsbHMnLCBmdW5jdGlvbigpIHsKKyAg
ICAgIHJldHVybiB0aGlzLnlpZWxkKFsgKytjb3VudCBdKTsKKyAgICB9KTsKKyAgICBgYGAKKyAg
Ki8KKworICBmdW5jdGlvbiB3cmFwKHRlbXBsYXRlKSB7CisgICAgaWYgKHRlbXBsYXRlID09PSBu
dWxsKSB7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICByZXR1cm4geworICAgICAg
bWV0YTogdGVtcGxhdGUubWV0YSwKKyAgICAgIGFyaXR5OiB0ZW1wbGF0ZS5hcml0eSwKKyAgICAg
IHJhdzogdGVtcGxhdGUsCisgICAgICByZW5kZXI6IGZ1bmN0aW9uIChzZWxmLCBlbnYsIG9wdGlv
bnMsIGJsb2NrQXJndW1lbnRzKSB7CisgICAgICAgIHZhciBzY29wZSA9IGVudi5ob29rcy5jcmVh
dGVGcmVzaFNjb3BlKCk7CisKKyAgICAgICAgdmFyIGNvbnRleHR1YWxFbGVtZW50ID0gb3B0aW9u
cyAmJiBvcHRpb25zLmNvbnRleHR1YWxFbGVtZW50OworICAgICAgICB2YXIgcmVuZGVyT3B0aW9u
cyA9IG5ldyBfaHRtbGJhcnNSdW50aW1lUmVuZGVyLlJlbmRlck9wdGlvbnMobnVsbCwgc2VsZiwg
YmxvY2tBcmd1bWVudHMsIGNvbnRleHR1YWxFbGVtZW50KTsKKworICAgICAgICByZXR1cm4gX2h0
bWxiYXJzUnVudGltZVJlbmRlci5kZWZhdWx0KHRlbXBsYXRlLCBlbnYsIHNjb3BlLCByZW5kZXJP
cHRpb25zKTsKKyAgICAgIH0KKyAgICB9OworICB9CisKKyAgZnVuY3Rpb24gd3JhcEZvckhlbHBl
cih0ZW1wbGF0ZSwgZW52LCBzY29wZSwgbW9ycGgsIHJlbmRlclN0YXRlLCB2aXNpdG9yKSB7Cisg
ICAgaWYgKCF0ZW1wbGF0ZSkgeworICAgICAgcmV0dXJuIHt9OworICAgIH0KKworICAgIHZhciB5
aWVsZEFyZ3MgPSB5aWVsZFRlbXBsYXRlKHRlbXBsYXRlLCBlbnYsIHNjb3BlLCBtb3JwaCwgcmVu
ZGVyU3RhdGUsIHZpc2l0b3IpOworCisgICAgcmV0dXJuIHsKKyAgICAgIG1ldGE6IHRlbXBsYXRl
Lm1ldGEsCisgICAgICBhcml0eTogdGVtcGxhdGUuYXJpdHksCisgICAgICAneWllbGQnOiB5aWVs
ZEFyZ3MsIC8vIHF1b3RlZCBzaW5jZSBpdCdzIGEgcmVzZXJ2ZWQgd29yZCwgc2VlIGlzc3VlICM0
MjAKKyAgICAgIHlpZWxkSXRlbTogeWllbGRJdGVtKHRlbXBsYXRlLCBlbnYsIHNjb3BlLCBtb3Jw
aCwgcmVuZGVyU3RhdGUsIHZpc2l0b3IpLAorICAgICAgcmF3OiB0ZW1wbGF0ZSwKKworICAgICAg
cmVuZGVyOiBmdW5jdGlvbiAoc2VsZiwgYmxvY2tBcmd1bWVudHMpIHsKKyAgICAgICAgeWllbGRB
cmdzKGJsb2NrQXJndW1lbnRzLCBzZWxmKTsKKyAgICAgIH0KKyAgICB9OworICB9CisKKyAgLy8g
Q2FsbGVkIGJ5IGEgdXNlci1sYW5kIGhlbHBlciB0byByZW5kZXIgYSB0ZW1wbGF0ZS4KKyAgZnVu
Y3Rpb24geWllbGRUZW1wbGF0ZSh0ZW1wbGF0ZSwgZW52LCBwYXJlbnRTY29wZSwgbW9ycGgsIHJl
bmRlclN0YXRlLCB2aXNpdG9yKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uIChibG9ja0FyZ3VtZW50
cywgc2VsZikgeworICAgICAgLy8gUmVuZGVyIHN0YXRlIGlzIHVzZWQgdG8gdHJhY2sgdGhlIHBy
b2dyZXNzIG9mIHRoZSBoZWxwZXIgKHNpbmNlIGl0CisgICAgICAvLyBtYXkgY2FsbCBpbnRvIHVz
IG11bHRpcGxlIHRpbWVzKS4gQXMgdGhlIHVzZXItbGFuZCBoZWxwZXIgY2FsbHMKKyAgICAgIC8v
IGludG8gbGlicmFyeSBjb2RlLCB3ZSB0cmFjayB3aGF0IG5lZWRzIHRvIGJlIGNsZWFuZWQgdXAg
YWZ0ZXIgdGhlCisgICAgICAvLyBoZWxwZXIgaGFzIHJldHVybmVkLgorICAgICAgLy8KKyAgICAg
IC8vIEhlcmUsIHdlIHJlbWVtYmVyIHRoYXQgYSB0ZW1wbGF0ZSBoYXMgYmVlbiB5aWVsZGVkIGFu
ZCBzbyB3ZSBkbyBub3QKKyAgICAgIC8vIG5lZWQgdG8gcmVtb3ZlIHRoZSBwcmV2aW91cyB0ZW1w
bGF0ZS4gKElmIG5vIHRlbXBsYXRlIGlzIHlpZWxkZWQKKyAgICAgIC8vIHRoaXMgcmVuZGVyIGJ5
IHRoZSBoZWxwZXIsIHdlIGFzc3VtZSBub3RoaW5nIHNob3VsZCBiZSBzaG93biBhbmQKKyAgICAg
IC8vIHJlbW92ZSBhbnkgcHJldmlvdXMgcmVuZGVyZWQgdGVtcGxhdGVzLikKKyAgICAgIHJlbmRl
clN0YXRlLm1vcnBoVG9DbGVhciA9IG51bGw7CisKKyAgICAgIC8vIEluIHRoaXMgY29uZGl0aW9u
YWwgaXMgdHJ1ZSwgaXQgbWVhbnMgdGhhdCBvbiB0aGUgcHJldmlvdXMgcmVuZGVyaW5nIHBhc3MK
KyAgICAgIC8vIHRoZSBoZWxwZXIgeWllbGRlZCBtdWx0aXBsZSBpdGVtcyB2aWEgYHlpZWxkSXRl
bSgpYCwgYnV0IHRoaXMgdGltZSB0aGV5CisgICAgICAvLyBhcmUgeWllbGRpbmcgYSBzaW5nbGUg
dGVtcGxhdGUuIEluIHRoYXQgY2FzZSwgd2UgbWFyayB0aGUgbW9ycGggbGlzdCBmb3IKKyAgICAg
IC8vIGNsZWFudXAgc28gaXQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBET00uCisgICAgICBpZiAobW9y
cGgubW9ycGhMaXN0KSB7CisgICAgICAgIF9odG1sYmFyc1V0aWxUZW1wbGF0ZVV0aWxzLmNsZWFy
TW9ycGhMaXN0KG1vcnBoLm1vcnBoTGlzdCwgbW9ycGgsIGVudik7CisgICAgICAgIHJlbmRlclN0
YXRlLm1vcnBoTGlzdFRvQ2xlYXIgPSBudWxsOworICAgICAgfQorCisgICAgICB2YXIgc2NvcGUg
PSBwYXJlbnRTY29wZTsKKworICAgICAgaWYgKG1vcnBoLmxhc3RZaWVsZGVkICYmIGlzU3RhYmxl
VGVtcGxhdGUodGVtcGxhdGUsIG1vcnBoLmxhc3RZaWVsZGVkKSkgeworICAgICAgICByZXR1cm4g
bW9ycGgubGFzdFJlc3VsdC5yZXZhbGlkYXRlV2l0aChlbnYsIHVuZGVmaW5lZCwgc2VsZiwgYmxv
Y2tBcmd1bWVudHMsIHZpc2l0b3IpOworICAgICAgfQorCisgICAgICAvLyBDaGVjayB0byBtYWtl
IHN1cmUgdGhhdCB3ZSBhY3R1YWxseSAqKm5lZWQqKiBhIG5ldyBzY29wZSwgYW5kIGNhbid0Cisg
ICAgICAvLyBzaGFyZSB0aGUgcGFyZW50IHNjb3BlLiBOb3RlIHRoYXQgd2UgbmVlZCB0byBtb3Zl
IHRoaXMgY2hlY2sgaW50bworICAgICAgLy8gYSBob3N0IGhvb2ssIGJlY2F1c2UgdGhlIGhvc3Qn
cyBub3Rpb24gb2Ygc2NvcGUgbWF5IHJlcXVpcmUgYSBuZXcKKyAgICAgIC8vIHNjb3BlIGluIG1v
cmUgY2FzZXMgdGhhbiB0aGUgb25lcyB3ZSBjYW4gZGV0ZXJtaW5lIHN0YXRpY2FsbHkuCisgICAg
ICBpZiAoc2VsZiAhPT0gdW5kZWZpbmVkIHx8IHBhcmVudFNjb3BlID09PSBudWxsIHx8IHRlbXBs
YXRlLmFyaXR5KSB7CisgICAgICAgIHNjb3BlID0gZW52Lmhvb2tzLmNyZWF0ZUNoaWxkU2NvcGUo
cGFyZW50U2NvcGUpOworICAgICAgfQorCisgICAgICBtb3JwaC5sYXN0WWllbGRlZCA9IHsgc2Vs
Zjogc2VsZiwgdGVtcGxhdGU6IHRlbXBsYXRlLCBzaGFkb3dUZW1wbGF0ZTogbnVsbCB9OworCisg
ICAgICAvLyBSZW5kZXIgdGhlIHRlbXBsYXRlIHRoYXQgd2FzIHNlbGVjdGVkIGJ5IHRoZSBoZWxw
ZXIKKyAgICAgIHZhciByZW5kZXJPcHRpb25zID0gbmV3IF9odG1sYmFyc1J1bnRpbWVSZW5kZXIu
UmVuZGVyT3B0aW9ucyhtb3JwaCwgc2VsZiwgYmxvY2tBcmd1bWVudHMpOworICAgICAgX2h0bWxi
YXJzUnVudGltZVJlbmRlci5kZWZhdWx0KHRlbXBsYXRlLCBlbnYsIHNjb3BlLCByZW5kZXJPcHRp
b25zKTsKKyAgICB9OworICB9CisKKyAgZnVuY3Rpb24geWllbGRJdGVtKHRlbXBsYXRlLCBlbnYs
IHBhcmVudFNjb3BlLCBtb3JwaCwgcmVuZGVyU3RhdGUsIHZpc2l0b3IpIHsKKyAgICAvLyBJbml0
aWFsaXplIHN0YXRlIHRoYXQgdHJhY2tzIG11bHRpcGxlIGl0ZW1zIGJlaW5nCisgICAgLy8geWll
bGRlZCBpbi4KKyAgICB2YXIgY3VycmVudE1vcnBoID0gbnVsbDsKKworICAgIC8vIENhbmRpZGF0
ZSBtb3JwaHMgZm9yIGRlbGV0aW9uLgorICAgIHZhciBjYW5kaWRhdGVzID0ge307CisKKyAgICAv
LyBSZXVzZSBleGlzdGluZyBNb3JwaExpc3QgaWYgdGhpcyBpcyBub3QgYSBmaXJzdC10aW1lCisg
ICAgLy8gcmVuZGVyLgorICAgIHZhciBtb3JwaExpc3QgPSBtb3JwaC5tb3JwaExpc3Q7CisgICAg
aWYgKG1vcnBoTGlzdCkgeworICAgICAgY3VycmVudE1vcnBoID0gbW9ycGhMaXN0LmZpcnN0Q2hp
bGRNb3JwaDsKKyAgICB9CisKKyAgICAvLyBBZHZhbmNlcyB0aGUgY3VycmVudE1vcnBoIHBvaW50
ZXIgdG8gdGhlIG1vcnBoIGluIHRoZSBwcmV2aW91c2x5LXJlbmRlcmVkCisgICAgLy8gbGlzdCB0
aGF0IG1hdGNoZXMgdGhlIHlpZWxkZWQga2V5LiBXaGlsZSBkb2luZyBzbywgaXQgbWFya3MgYW55
IG1vcnBocworICAgIC8vIHRoYXQgaXQgYWR2YW5jZXMgcGFzdCBhcyBjYW5kaWRhdGVzIGZvciBk
ZWxldGlvbi4gQXNzdW1pbmcgdGhvc2UgbW9ycGhzCisgICAgLy8gYXJlIG5vdCB5aWVsZGVkIGlu
IGxhdGVyLCB0aGV5IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgcHJ1bmUgc3RlcCBkdXJpbmcKKyAg
ICAvLyBjbGVhbnVwLgorICAgIC8vIE5vdGUgdGhhdCB0aGlzIGhlbHBlciBmdW5jdGlvbiBhc3N1
bWVzIHRoYXQgdGhlIG1vcnBoIGJlaW5nIHNlZWtlZCB0byBpcworICAgIC8vIGd1YXJhbnRlZWQg
dG8gZXhpc3QgaW4gdGhlIHByZXZpb3VzIE1vcnBoTGlzdDsgaWYgdGhpcyBpcyBjYWxsZWQgYW5k
IHRoZQorICAgIC8vIG1vcnBoIGRvZXMgbm90IGV4aXN0LCBpdCB3aWxsIHJlc3VsdCBpbiBhbiBp
bmZpbml0ZSBsb29wCisgICAgZnVuY3Rpb24gYWR2YW5jZVRvS2V5KGtleSkgeworICAgICAgdmFy
IHNlZWsgPSBjdXJyZW50TW9ycGg7CisKKyAgICAgIHdoaWxlIChzZWVrLmtleSAhPT0ga2V5KSB7
CisgICAgICAgIGNhbmRpZGF0ZXNbc2Vlay5rZXldID0gc2VlazsKKyAgICAgICAgc2VlayA9IHNl
ZWsubmV4dE1vcnBoOworICAgICAgfQorCisgICAgICBjdXJyZW50TW9ycGggPSBzZWVrLm5leHRN
b3JwaDsKKyAgICAgIHJldHVybiBzZWVrOworICAgIH0KKworICAgIHJldHVybiBmdW5jdGlvbiAo
X2tleSwgYmxvY2tBcmd1bWVudHMsIHNlbGYpIHsKKyAgICAgIGlmICh0eXBlb2YgX2tleSAhPT0g
J3N0cmluZycpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJZb3UgbXVzdCBwcm92aWRlIGEg
c3RyaW5nIGtleSB3aGVuIGNhbGxpbmcgYHlpZWxkSXRlbWA7IHlvdSBwcm92aWRlZCAiICsgX2tl
eSk7CisgICAgICB9CisKKyAgICAgIC8vIEF0IGxlYXN0IG9uZSBpdGVtIGhhcyBiZWVuIHlpZWxk
ZWQsIHNvIHdlIGRvIG5vdCB3aG9sZXNhbGUKKyAgICAgIC8vIGNsZWFyIHRoZSBsYXN0IE1vcnBo
TGlzdCBidXQgaW5zdGVhZCBhcHBseSBhIHBydW5lIG9wZXJhdGlvbi4KKyAgICAgIHJlbmRlclN0
YXRlLm1vcnBoTGlzdFRvQ2xlYXIgPSBudWxsOworICAgICAgbW9ycGgubGFzdFlpZWxkZWQgPSBu
dWxsOworCisgICAgICB2YXIgbW9ycGhMaXN0LCBtb3JwaE1hcDsKKworICAgICAgaWYgKCFtb3Jw
aC5tb3JwaExpc3QpIHsKKyAgICAgICAgbW9ycGgubW9ycGhMaXN0ID0gbmV3IF9tb3JwaFJhbmdl
TW9ycGhMaXN0LmRlZmF1bHQoKTsKKyAgICAgICAgbW9ycGgubW9ycGhNYXAgPSB7fTsKKyAgICAg
ICAgbW9ycGguc2V0TW9ycGhMaXN0KG1vcnBoLm1vcnBoTGlzdCk7CisgICAgICB9CisKKyAgICAg
IG1vcnBoTGlzdCA9IG1vcnBoLm1vcnBoTGlzdDsKKyAgICAgIG1vcnBoTWFwID0gbW9ycGgubW9y
cGhNYXA7CisKKyAgICAgIC8vIEEgbWFwIG9mIG1vcnBocyB0aGF0IGhhdmUgYmVlbiB5aWVsZGVk
IGluIG9uIHRoaXMKKyAgICAgIC8vIHJlbmRlcmluZyBwYXNzLiBBbnkgbW9ycGhzIHRoYXQgZG8g
bm90IG1ha2UgaXQgaW50bworICAgICAgLy8gdGhpcyBsaXN0IHdpbGwgYmUgcHJ1bmVkIGZyb20g
dGhlIE1vcnBoTGlzdCBkdXJpbmcgdGhlIGNsZWFudXAKKyAgICAgIC8vIHByb2Nlc3MuCisgICAg
ICB2YXIgaGFuZGxlZE1vcnBocyA9IHJlbmRlclN0YXRlLmhhbmRsZWRNb3JwaHM7CisgICAgICB2
YXIga2V5ID0gdW5kZWZpbmVkOworCisgICAgICBpZiAoX2tleSBpbiBoYW5kbGVkTW9ycGhzKSB7
CisgICAgICAgIC8vIEluIHRoaXMgYnJhbmNoIHdlIGFyZSBkZWFsaW5nIHdpdGggYSBkdXBsaWNh
dGUga2V5LiBUaGUgc3RyYXRlZ3kKKyAgICAgICAgLy8gaXMgdG8gdGFrZSB0aGUgb3JpZ2luYWwg
a2V5IGFuZCBhcHBlbmQgYSBjb3VudGVyIHRvIGl0IHRoYXQgaXMKKyAgICAgICAgLy8gaW5jcmVt
ZW50ZWQgZXZlcnkgdGltZSB0aGUga2V5IGlzIHJldXNlZC4gSW4gb3JkZXIgdG8gZ3JlYXRseQor
ICAgICAgICAvLyByZWR1Y2UgdGhlIGNoYW5jZSBvZiBjb2xsaWRpbmcgd2l0aCBhbm90aGVyIHZh
bGlkIGtleSB3ZSBhbHNvIGFkZAorICAgICAgICAvLyBhbiBleHRyYSBzdHJpbmcgIi0tejhtUzJo
dkRXMEEtLSIgdG8gdGhlIG5ldyBrZXkuCisgICAgICAgIHZhciBjb2xsaXNpb25zID0gcmVuZGVy
U3RhdGUuY29sbGlzaW9uczsKKyAgICAgICAgaWYgKGNvbGxpc2lvbnMgPT09IHVuZGVmaW5lZCkg
eworICAgICAgICAgIGNvbGxpc2lvbnMgPSByZW5kZXJTdGF0ZS5jb2xsaXNpb25zID0ge307Cisg
ICAgICAgIH0KKyAgICAgICAgdmFyIGNvdW50ID0gY29sbGlzaW9uc1tfa2V5XSB8IDA7CisgICAg
ICAgIGNvbGxpc2lvbnNbX2tleV0gPSArK2NvdW50OworCisgICAgICAgIGtleSA9IF9rZXkgKyAn
LS16OG1TMmh2RFcwQS0tJyArIGNvdW50OworICAgICAgfSBlbHNlIHsKKyAgICAgICAga2V5ID0g
X2tleTsKKyAgICAgIH0KKworICAgICAgaWYgKGN1cnJlbnRNb3JwaCAmJiBjdXJyZW50TW9ycGgu
a2V5ID09PSBrZXkpIHsKKyAgICAgICAgeWllbGRUZW1wbGF0ZSh0ZW1wbGF0ZSwgZW52LCBwYXJl
bnRTY29wZSwgY3VycmVudE1vcnBoLCByZW5kZXJTdGF0ZSwgdmlzaXRvcikoYmxvY2tBcmd1bWVu
dHMsIHNlbGYpOworICAgICAgICBjdXJyZW50TW9ycGggPSBjdXJyZW50TW9ycGgubmV4dE1vcnBo
OworICAgICAgICBoYW5kbGVkTW9ycGhzW2tleV0gPSBjdXJyZW50TW9ycGg7CisgICAgICB9IGVs
c2UgaWYgKG1vcnBoTWFwW2tleV0gIT09IHVuZGVmaW5lZCkgeworICAgICAgICB2YXIgZm91bmRN
b3JwaCA9IG1vcnBoTWFwW2tleV07CisKKyAgICAgICAgaWYgKGtleSBpbiBjYW5kaWRhdGVzKSB7
CisgICAgICAgICAgLy8gSWYgd2UgYWxyZWFkeSBzYXcgdGhpcyBtb3JwaCwgbW92ZSBpdCBmb3J3
YXJkIHRvIHRoaXMgcG9zaXRpb24KKyAgICAgICAgICBtb3JwaExpc3QuaW5zZXJ0QmVmb3JlTW9y
cGgoZm91bmRNb3JwaCwgY3VycmVudE1vcnBoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAvLyBPdGhlcndpc2UsIG1vdmUgdGhlIHBvaW50ZXIgZm9yd2FyZCB0byB0aGUgZXhpc3Rpbmcg
bW9ycGggZm9yIHRoaXMga2V5CisgICAgICAgICAgYWR2YW5jZVRvS2V5KGtleSk7CisgICAgICAg
IH0KKworICAgICAgICBoYW5kbGVkTW9ycGhzW2ZvdW5kTW9ycGgua2V5XSA9IGZvdW5kTW9ycGg7
CisgICAgICAgIHlpZWxkVGVtcGxhdGUodGVtcGxhdGUsIGVudiwgcGFyZW50U2NvcGUsIGZvdW5k
TW9ycGgsIHJlbmRlclN0YXRlLCB2aXNpdG9yKShibG9ja0FyZ3VtZW50cywgc2VsZik7CisgICAg
ICB9IGVsc2UgeworICAgICAgICB2YXIgY2hpbGRNb3JwaCA9IF9odG1sYmFyc1J1bnRpbWVSZW5k
ZXIuY3JlYXRlQ2hpbGRNb3JwaChlbnYuZG9tLCBtb3JwaCk7CisgICAgICAgIGNoaWxkTW9ycGgu
a2V5ID0ga2V5OworICAgICAgICBtb3JwaE1hcFtrZXldID0gaGFuZGxlZE1vcnBoc1trZXldID0g
Y2hpbGRNb3JwaDsKKyAgICAgICAgbW9ycGhMaXN0Lmluc2VydEJlZm9yZU1vcnBoKGNoaWxkTW9y
cGgsIGN1cnJlbnRNb3JwaCk7CisgICAgICAgIHlpZWxkVGVtcGxhdGUodGVtcGxhdGUsIGVudiwg
cGFyZW50U2NvcGUsIGNoaWxkTW9ycGgsIHJlbmRlclN0YXRlLCB2aXNpdG9yKShibG9ja0FyZ3Vt
ZW50cywgc2VsZik7CisgICAgICB9CisKKyAgICAgIHJlbmRlclN0YXRlLm1vcnBoTGlzdFRvUHJ1
bmUgPSBtb3JwaExpc3Q7CisgICAgICBtb3JwaC5jaGlsZE5vZGVzID0gbnVsbDsKKyAgICB9Owor
ICB9CisKKyAgZnVuY3Rpb24gaXNTdGFibGVUZW1wbGF0ZSh0ZW1wbGF0ZSwgbGFzdFlpZWxkZWQp
IHsKKyAgICByZXR1cm4gIWxhc3RZaWVsZGVkLnNoYWRvd1RlbXBsYXRlICYmIHRlbXBsYXRlID09
PSBsYXN0WWllbGRlZC50ZW1wbGF0ZTsKKyAgfQorICBmdW5jdGlvbiBvcHRpb25zRm9yKHRlbXBs
YXRlLCBpbnZlcnNlLCBlbnYsIHNjb3BlLCBtb3JwaCwgdmlzaXRvcikgeworICAgIC8vIElmIHRo
ZXJlIHdhcyBhIHRlbXBsYXRlIHlpZWxkZWQgbGFzdCB0aW1lLCBzZXQgbW9ycGhUb0NsZWFyIHNv
IGl0IHdpbGwgYmUgY2xlYXJlZAorICAgIC8vIGlmIG5vIHRlbXBsYXRlIGlzIHlpZWxkZWQgb24g
dGhpcyByZW5kZXIuCisgICAgdmFyIG1vcnBoVG9DbGVhciA9IG1vcnBoLmxhc3RSZXN1bHQgPyBt
b3JwaCA6IG51bGw7CisgICAgdmFyIHJlbmRlclN0YXRlID0gbmV3IF9odG1sYmFyc1V0aWxUZW1w
bGF0ZVV0aWxzLlJlbmRlclN0YXRlKG1vcnBoVG9DbGVhciwgbW9ycGgubW9ycGhMaXN0IHx8IG51
bGwpOworCisgICAgcmV0dXJuIHsKKyAgICAgIHRlbXBsYXRlczogeworICAgICAgICB0ZW1wbGF0
ZTogd3JhcEZvckhlbHBlcih0ZW1wbGF0ZSwgZW52LCBzY29wZSwgbW9ycGgsIHJlbmRlclN0YXRl
LCB2aXNpdG9yKSwKKyAgICAgICAgaW52ZXJzZTogd3JhcEZvckhlbHBlcihpbnZlcnNlLCBlbnYs
IHNjb3BlLCBtb3JwaCwgcmVuZGVyU3RhdGUsIHZpc2l0b3IpCisgICAgICB9LAorICAgICAgcmVu
ZGVyU3RhdGU6IHJlbmRlclN0YXRlCisgICAgfTsKKyAgfQorCisgIGZ1bmN0aW9uIHRoaXNGb3Io
b3B0aW9ucykgeworICAgIHJldHVybiB7CisgICAgICBhcml0eTogb3B0aW9ucy50ZW1wbGF0ZS5h
cml0eSwKKyAgICAgICd5aWVsZCc6IG9wdGlvbnMudGVtcGxhdGUueWllbGQsIC8vIHF1b3RlZCBz
aW5jZSBpdCdzIGEgcmVzZXJ2ZWQgd29yZCwgc2VlIGlzc3VlICM0MjAKKyAgICAgIHlpZWxkSXRl
bTogb3B0aW9ucy50ZW1wbGF0ZS55aWVsZEl0ZW0sCisgICAgICB5aWVsZEluOiBvcHRpb25zLnRl
bXBsYXRlLnlpZWxkSW4KKyAgICB9OworICB9CisKKyAgLyoqCisgICAgSG9zdCBIb29rOiBjcmVh
dGVTY29wZQorICAKKyAgICBAcGFyYW0ge1Njb3BlP30gcGFyZW50U2NvcGUKKyAgICBAcmV0dXJu
IFNjb3BlCisgIAorICAgIENvcnJlc3BvbmRzIHRvIGVudGVyaW5nIGEgbmV3IEhUTUxCYXJzIGJs
b2NrLgorICAKKyAgICBUaGlzIGhvb2sgaXMgaW52b2tlZCB3aGVuIGEgYmxvY2sgaXMgZW50ZXJl
ZCB3aXRoCisgICAgYSBuZXcgYHNlbGZgIG9yIGFkZGl0aW9uYWwgbG9jYWwgdmFyaWFibGVzLgor
ICAKKyAgICBXaGVuIGludm9rZWQgZm9yIGEgdG9wLWxldmVsIHRlbXBsYXRlLCB0aGUKKyAgICBg
cGFyZW50U2NvcGVgIGlzIGBudWxsYCwgYW5kIHRoaXMgaG9vayBzaG91bGQgcmV0dXJuCisgICAg
YSBmcmVzaCBTY29wZS4KKyAgCisgICAgV2hlbiBpbnZva2VkIGZvciBhIGNoaWxkIHRlbXBsYXRl
LCB0aGUgYHBhcmVudFNjb3BlYAorICAgIGlzIHRoZSBzY29wZSBmb3IgdGhlIHBhcmVudCBlbnZp
cm9ubWVudC4KKyAgCisgICAgTm90ZSB0aGF0IHRoZSBgU2NvcGVgIGlzIGFuIG9wYXF1ZSB2YWx1
ZSB0aGF0IGlzCisgICAgcGFzc2VkIHRvIG90aGVyIGhvc3QgaG9va3MuIEZvciBleGFtcGxlLCB0
aGUgYGdldGAKKyAgICBob29rIHVzZXMgdGhlIHNjb3BlIHRvIHJldHJpZXZlIGEgdmFsdWUgZm9y
IGEgZ2l2ZW4KKyAgICBzY29wZSBhbmQgdmFyaWFibGUgbmFtZS4KKyAgKi8KKworICBmdW5jdGlv
biBjcmVhdGVTY29wZShlbnYsIHBhcmVudFNjb3BlKSB7CisgICAgaWYgKHBhcmVudFNjb3BlKSB7
CisgICAgICByZXR1cm4gZW52Lmhvb2tzLmNyZWF0ZUNoaWxkU2NvcGUocGFyZW50U2NvcGUpOwor
ICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gZW52Lmhvb2tzLmNyZWF0ZUZyZXNoU2NvcGUoKTsK
KyAgICB9CisgIH0KKworICBmdW5jdGlvbiBjcmVhdGVGcmVzaFNjb3BlKCkgeworICAgIC8vIGJl
Y2F1c2UgYGluYCBjaGVja3MgaGF2ZSB1bnByZWRpY3RhYmxlIHBlcmZvcm1hbmNlLCBrZWVwIGEK
KyAgICAvLyBzZXBhcmF0ZSBkaWN0aW9uYXJ5IHRvIHRyYWNrIHdoZXRoZXIgYSBsb2NhbCB3YXMg
Ym91bmQuCisgICAgLy8gU2VlIGBiaW5kTG9jYWxgIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAg
IHJldHVybiB7IHNlbGY6IG51bGwsIGJsb2Nrczoge30sIGxvY2Fsczoge30sIGxvY2FsUHJlc2Vu
dDoge30gfTsKKyAgfQorCisgIC8qKgorICAgIEhvc3QgSG9vazogYmluZFNoYWRvd1Njb3BlCisg
IAorICAgIEBwYXJhbSB7U2NvcGU/fSBwYXJlbnRTY29wZQorICAgIEByZXR1cm4gU2NvcGUKKyAg
CisgICAgQ29ycmVzcG9uZHMgdG8gcmVuZGVyaW5nIGEgbmV3IHRlbXBsYXRlIGludG8gYW4gZXhp
c3RpbmcKKyAgICByZW5kZXIgdHJlZSwgYnV0IHdpdGggYSBuZXcgdG9wLWxldmVsIGxleGljYWwg
c2NvcGUuIFRoaXMKKyAgICB0ZW1wbGF0ZSBpcyBjYWxsZWQgdGhlICJzaGFkb3cgcm9vdCIuCisg
IAorICAgIElmIGEgc2hhZG93IHRlbXBsYXRlIGludm9rZXMgYHt7eWllbGR9fWAsIGl0IHdpbGwg
cmVuZGVyCisgICAgdGhlIGJsb2NrIHByb3ZpZGVkIHRvIHRoZSBzaGFkb3cgcm9vdCBpbiB0aGUg
b3JpZ2luYWwKKyAgICBsZXhpY2FsIHNjb3BlLgorICAKKyAgICBgYGBoYnMKKyAgICB7eyEtLSBw
b3N0IHRlbXBsYXRlIC0tfX0KKyAgICA8cD57e3Byb3BzLnRpdGxlfX08L3A+CisgICAge3t5aWVs
ZH19CisgIAorICAgIHt7IS0tIGJsb2cgdGVtcGxhdGUgLS19fQorICAgIHt7I3Bvc3QgdGl0bGU9
IkhlbGxvIHdvcmxkIn19CisgICAgICA8cD5ieSB7e2J5bGluZX19PC9wPgorICAgICAgPGFydGlj
bGU+VGhpcyBpcyBteSBmaXJzdCBwb3N0PC9hcnRpY2xlPgorICAgIHt7L3Bvc3R9fQorICAKKyAg
ICB7eyNwb3N0IHRpdGxlPSJHb29kYnllIHdvcmxkIn19CisgICAgICA8cD5ieSB7e2J5bGluZX19
PC9wPgorICAgICAgPGFydGljbGU+VGhpcyBpcyBteSBsYXN0IHBvc3Q8L2FydGljbGU+CisgICAg
e3svcG9zdH19CisgICAgYGBgCisgIAorICAgIGBgYGpzCisgICAgaGVscGVycy5wb3N0ID0gZnVu
Y3Rpb24ocGFyYW1zLCBoYXNoLCBvcHRpb25zKSB7CisgICAgICBvcHRpb25zLnRlbXBsYXRlLnlp
ZWxkSW4ocG9zdFRlbXBsYXRlLCB7IHByb3BzOiBoYXNoIH0pOworICAgIH07CisgIAorICAgIGJs
b2cucmVuZGVyKHsgYnlsaW5lOiAiWWVodWRhIEthdHoiIH0pOworICAgIGBgYAorICAKKyAgICBQ
cm9kdWNlczoKKyAgCisgICAgYGBgaHRtbAorICAgIDxwPkhlbGxvIHdvcmxkPC9wPgorICAgIDxw
PmJ5IFllaHVkYSBLYXR6PC9wPgorICAgIDxhcnRpY2xlPlRoaXMgaXMgbXkgZmlyc3QgcG9zdDwv
YXJ0aWNsZT4KKyAgCisgICAgPHA+R29vZGJ5ZSB3b3JsZDwvcD4KKyAgICA8cD5ieSBZZWh1ZGEg
S2F0ejwvcD4KKyAgICA8YXJ0aWNsZT5UaGlzIGlzIG15IGxhc3QgcG9zdDwvYXJ0aWNsZT4KKyAg
ICBgYGAKKyAgCisgICAgSW4gc2hvcnQsIGB5aWVsZEluYCBjcmVhdGVzIGEgbmV3IHRvcC1sZXZl
bCBzY29wZSBmb3IgdGhlCisgICAgcHJvdmlkZWQgdGVtcGxhdGUgYW5kIHJlbmRlcnMgaXQsIG1h
a2luZyB0aGUgb3JpZ2luYWwgYmxvY2sKKyAgICBhdmFpbGFibGUgdG8gYHt7eWllbGR9fWAgaW4g
dGhhdCB0ZW1wbGF0ZS4KKyAgKi8KKworICBmdW5jdGlvbiBiaW5kU2hhZG93U2NvcGUoZW52IC8q
LCBwYXJlbnRTY29wZSwgc2hhZG93U2NvcGUgKi8pIHsKKyAgICByZXR1cm4gZW52Lmhvb2tzLmNy
ZWF0ZUZyZXNoU2NvcGUoKTsKKyAgfQorCisgIGZ1bmN0aW9uIGNyZWF0ZUNoaWxkU2NvcGUocGFy
ZW50KSB7CisgICAgdmFyIHNjb3BlID0gT2JqZWN0LmNyZWF0ZShwYXJlbnQpOworICAgIHNjb3Bl
LmxvY2FscyA9IE9iamVjdC5jcmVhdGUocGFyZW50LmxvY2Fscyk7CisgICAgc2NvcGUubG9jYWxQ
cmVzZW50ID0gT2JqZWN0LmNyZWF0ZShwYXJlbnQubG9jYWxQcmVzZW50KTsKKyAgICBzY29wZS5i
bG9ja3MgPSBPYmplY3QuY3JlYXRlKHBhcmVudC5ibG9ja3MpOworICAgIHJldHVybiBzY29wZTsK
KyAgfQorCisgIC8qKgorICAgIEhvc3QgSG9vazogYmluZFNlbGYKKyAgCisgICAgQHBhcmFtIHtT
Y29wZX0gc2NvcGUKKyAgICBAcGFyYW0ge2FueX0gc2VsZgorICAKKyAgICBDb3JyZXNwb25kcyB0
byBlbnRlcmluZyBhIHRlbXBsYXRlLgorICAKKyAgICBUaGlzIGhvb2sgaXMgaW52b2tlZCB3aGVu
IHRoZSBgc2VsZmAgdmFsdWUgZm9yIGEgc2NvcGUgaXMgcmVhZHkgdG8gYmUgYm91bmQuCisgIAor
ICAgIFRoZSBob3N0IG11c3QgZW5zdXJlIHRoYXQgY2hpbGQgc2NvcGVzIHJlZmxlY3QgdGhlIGNo
YW5nZSB0byB0aGUgYHNlbGZgIGluCisgICAgZnV0dXJlIGNhbGxzIHRvIHRoZSBgZ2V0YCBob29r
LgorICAqLworCisgIGZ1bmN0aW9uIGJpbmRTZWxmKGVudiwgc2NvcGUsIHNlbGYpIHsKKyAgICBz
Y29wZS5zZWxmID0gc2VsZjsKKyAgfQorCisgIGZ1bmN0aW9uIHVwZGF0ZVNlbGYoZW52LCBzY29w
ZSwgc2VsZikgeworICAgIGVudi5ob29rcy5iaW5kU2VsZihlbnYsIHNjb3BlLCBzZWxmKTsKKyAg
fQorCisgIC8qKgorICAgIEhvc3QgSG9vazogYmluZExvY2FsCisgIAorICAgIEBwYXJhbSB7RW52
aXJvbm1lbnR9IGVudgorICAgIEBwYXJhbSB7U2NvcGV9IHNjb3BlCisgICAgQHBhcmFtIHtTdHJp
bmd9IG5hbWUKKyAgICBAcGFyYW0ge2FueX0gdmFsdWUKKyAgCisgICAgQ29ycmVzcG9uZHMgdG8g
ZW50ZXJpbmcgYSB0ZW1wbGF0ZSB3aXRoIGJsb2NrIGFyZ3VtZW50cy4KKyAgCisgICAgVGhpcyBo
b29rIGlzIGludm9rZWQgd2hlbiBhIGxvY2FsIHZhcmlhYmxlIGZvciBhIHNjb3BlIGhhcyBiZWVu
IHByb3ZpZGVkLgorICAKKyAgICBUaGUgaG9zdCBtdXN0IGVuc3VyZSB0aGF0IGNoaWxkIHNjb3Bl
cyByZWZsZWN0IHRoZSBjaGFuZ2UgaW4gZnV0dXJlIGNhbGxzCisgICAgdG8gdGhlIGBnZXRgIGhv
b2suCisgICovCisKKyAgZnVuY3Rpb24gYmluZExvY2FsKGVudiwgc2NvcGUsIG5hbWUsIHZhbHVl
KSB7CisgICAgc2NvcGUubG9jYWxQcmVzZW50W25hbWVdID0gdHJ1ZTsKKyAgICBzY29wZS5sb2Nh
bHNbbmFtZV0gPSB2YWx1ZTsKKyAgfQorCisgIGZ1bmN0aW9uIHVwZGF0ZUxvY2FsKGVudiwgc2Nv
cGUsIG5hbWUsIHZhbHVlKSB7CisgICAgZW52Lmhvb2tzLmJpbmRMb2NhbChlbnYsIHNjb3BlLCBu
YW1lLCB2YWx1ZSk7CisgIH0KKworICAvKioKKyAgICBIb3N0IEhvb2s6IGJpbmRCbG9jaworICAK
KyAgICBAcGFyYW0ge0Vudmlyb25tZW50fSBlbnYKKyAgICBAcGFyYW0ge1Njb3BlfSBzY29wZQor
ICAgIEBwYXJhbSB7RnVuY3Rpb259IGJsb2NrCisgIAorICAgIENvcnJlc3BvbmRzIHRvIGVudGVy
aW5nIGEgc2hhZG93IHRlbXBsYXRlIHRoYXQgd2FzIGludm9rZWQgYnkgYSBibG9jayBoZWxwZXIg
d2l0aAorICAgIGB5aWVsZEluYC4KKyAgCisgICAgVGhpcyBob29rIGlzIGludm9rZWQgd2l0aCBh
biBvcGFxdWUgYmxvY2sgdGhhdCB3aWxsIGJlIHBhc3NlZCBhbG9uZworICAgIHRvIHRoZSBzaGFk
b3cgdGVtcGxhdGUsIGFuZCBpbnNlcnRlZCBpbnRvIHRoZSBzaGFkb3cgdGVtcGxhdGUgd2hlbgor
ICAgIGB7e3lpZWxkfX1gIGlzIHVzZWQuIE9wdGlvbmFsbHkgcHJvdmlkZSBhIG5vbi1kZWZhdWx0
IGJsb2NrIG5hbWUKKyAgICB0aGF0IGNhbiBiZSB0YXJnZXRlZCBieSBge3t5aWVsZCB0bz1ibG9j
a05hbWV9fWAuCisgICovCisKKyAgZnVuY3Rpb24gYmluZEJsb2NrKGVudiwgc2NvcGUsIGJsb2Nr
KSB7CisgICAgdmFyIG5hbWUgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDMgfHwgYXJndW1lbnRzWzNd
ID09PSB1bmRlZmluZWQgPyAnZGVmYXVsdCcgOiBhcmd1bWVudHNbM107CisKKyAgICBzY29wZS5i
bG9ja3NbbmFtZV0gPSBibG9jazsKKyAgfQorCisgIC8qKgorICAgIEhvc3QgSG9vazogYmxvY2sK
KyAgCisgICAgQHBhcmFtIHtSZW5kZXJOb2RlfSByZW5kZXJOb2RlCisgICAgQHBhcmFtIHtFbnZp
cm9ubWVudH0gZW52CisgICAgQHBhcmFtIHtTY29wZX0gc2NvcGUKKyAgICBAcGFyYW0ge1N0cmlu
Z30gcGF0aAorICAgIEBwYXJhbSB7QXJyYXl9IHBhcmFtcworICAgIEBwYXJhbSB7T2JqZWN0fSBo
YXNoCisgICAgQHBhcmFtIHtCbG9ja30gYmxvY2sKKyAgICBAcGFyYW0ge0Jsb2NrfSBlbHNlQmxv
Y2sKKyAgCisgICAgQ29ycmVzcG9uZHMgdG86CisgIAorICAgIGBgYGhicworICAgIHt7I2hlbHBl
ciBwYXJhbTEgcGFyYW0yIGtleTE9dmFsMSBrZXkyPXZhbDJ9fQorICAgICAge3shLS0gY2hpbGQg
dGVtcGxhdGUgLS19fQorICAgIHt7L2hlbHBlcn19CisgICAgYGBgCisgIAorICAgIFRoaXMgaG9z
dCBob29rIGlzIGEgd29ya2hvcnNlIG9mIHRoZSBzeXN0ZW0uIEl0IGlzIGludm9rZWQKKyAgICB3
aGVuZXZlciBhIGJsb2NrIGlzIGVuY291bnRlcmVkLCBhbmQgaXMgcmVzcG9uc2libGUgZm9yCisg
ICAgcmVzb2x2aW5nIHRoZSBoZWxwZXIgdG8gY2FsbCwgYW5kIHRoZW4gaW52b2tlIGl0LgorICAK
KyAgICBUaGUgaGVscGVyIHNob3VsZCBiZSBpbnZva2VkIHdpdGg6CisgIAorICAgIC0gYHtBcnJh
eX0gcGFyYW1zYDogdGhlIHBhcmFtZXRlcnMgcGFzc2VkIHRvIHRoZSBoZWxwZXIKKyAgICAgIGlu
IHRoZSB0ZW1wbGF0ZS4KKyAgICAtIGB7T2JqZWN0fSBoYXNoYDogYW4gb2JqZWN0IGNvbnRhaW5p
bmcgdGhlIGtleXMgYW5kIHZhbHVlcyBwYXNzZWQKKyAgICAgIGluIHRoZSBoYXNoIHBvc2l0aW9u
IGluIHRoZSB0ZW1wbGF0ZS4KKyAgCisgICAgVGhlIHZhbHVlcyBpbiBgcGFyYW1zYCBhbmQgYGhh
c2hgIHdpbGwgYWxyZWFkeSBiZSByZXNvbHZlZAorICAgIHRocm91Z2ggYSBwcmV2aW91cyBjYWxs
IHRvIHRoZSBgZ2V0YCBob3N0IGhvb2suCisgIAorICAgIFRoZSBoZWxwZXIgc2hvdWxkIGJlIGlu
dm9rZWQgd2l0aCBhIGB0aGlzYCB2YWx1ZSB0aGF0IGlzCisgICAgYW4gb2JqZWN0IHdpdGggb25l
IGZpZWxkOgorICAKKyAgICBge0Z1bmN0aW9ufSB5aWVsZGA6IHdoZW4gaW52b2tlZCwgdGhpcyBm
dW5jdGlvbiBleGVjdXRlcyB0aGUKKyAgICBibG9jayB3aXRoIHRoZSBjdXJyZW50IHNjb3BlLiBJ
dCB0YWtlcyBhbiBvcHRpb25hbCBhcnJheSBvZgorICAgIGJsb2NrIHBhcmFtZXRlcnMuIElmIGJs
b2NrIHBhcmFtZXRlcnMgYXJlIHN1cHBsaWVkLCBIVE1MQmFycworICAgIHdpbGwgaW52b2tlIHRo
ZSBgYmluZExvY2FsYCBob3N0IGhvb2sgdG8gYmluZCB0aGUgc3VwcGxpZWQKKyAgICB2YWx1ZXMg
dG8gdGhlIGJsb2NrIGFyZ3VtZW50cyBwcm92aWRlZCBieSB0aGUgdGVtcGxhdGUuCisgIAorICAg
IEluIGdlbmVyYWwsIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIGBibG9ja2Agc2hvdWxk
IHdvcmsKKyAgICBmb3IgbW9zdCBob3N0IGVudmlyb25tZW50cy4gSXQgZGVsZWdhdGVzIHRvIG90
aGVyIGhvc3QgaG9va3MKKyAgICB3aGVyZSBhcHByb3ByaWF0ZSwgYW5kIHByb3Blcmx5IGludm9r
ZXMgdGhlIGhlbHBlciB3aXRoIHRoZQorICAgIGFwcHJvcHJpYXRlIGFyZ3VtZW50cy4KKyAgKi8K
KworICBmdW5jdGlvbiBibG9jayhtb3JwaCwgZW52LCBzY29wZSwgcGF0aCwgcGFyYW1zLCBoYXNo
LCB0ZW1wbGF0ZSwgaW52ZXJzZSwgdmlzaXRvcikgeworICAgIGlmIChoYW5kbGVSZWRpcmVjdCht
b3JwaCwgZW52LCBzY29wZSwgcGF0aCwgcGFyYW1zLCBoYXNoLCB0ZW1wbGF0ZSwgaW52ZXJzZSwg
dmlzaXRvcikpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb250aW51ZUJsb2NrKG1v
cnBoLCBlbnYsIHNjb3BlLCBwYXRoLCBwYXJhbXMsIGhhc2gsIHRlbXBsYXRlLCBpbnZlcnNlLCB2
aXNpdG9yKTsKKyAgfQorCisgIGZ1bmN0aW9uIGNvbnRpbnVlQmxvY2sobW9ycGgsIGVudiwgc2Nv
cGUsIHBhdGgsIHBhcmFtcywgaGFzaCwgdGVtcGxhdGUsIGludmVyc2UsIHZpc2l0b3IpIHsKKyAg
ICBob3N0QmxvY2sobW9ycGgsIGVudiwgc2NvcGUsIHRlbXBsYXRlLCBpbnZlcnNlLCBudWxsLCB2
aXNpdG9yLCBmdW5jdGlvbiAob3B0aW9ucykgeworICAgICAgdmFyIGhlbHBlciA9IGVudi5ob29r
cy5sb29rdXBIZWxwZXIoZW52LCBzY29wZSwgcGF0aCk7CisgICAgICByZXR1cm4gZW52Lmhvb2tz
Lmludm9rZUhlbHBlcihtb3JwaCwgZW52LCBzY29wZSwgdmlzaXRvciwgcGFyYW1zLCBoYXNoLCBo
ZWxwZXIsIG9wdGlvbnMudGVtcGxhdGVzLCB0aGlzRm9yKG9wdGlvbnMudGVtcGxhdGVzKSk7Cisg
ICAgfSk7CisgIH0KKworICBmdW5jdGlvbiBob3N0QmxvY2sobW9ycGgsIGVudiwgc2NvcGUsIHRl
bXBsYXRlLCBpbnZlcnNlLCBzaGFkb3dPcHRpb25zLCB2aXNpdG9yLCBjYWxsYmFjaykgeworICAg
IHZhciBvcHRpb25zID0gb3B0aW9uc0Zvcih0ZW1wbGF0ZSwgaW52ZXJzZSwgZW52LCBzY29wZSwg
bW9ycGgsIHZpc2l0b3IpOworICAgIF9odG1sYmFyc1V0aWxUZW1wbGF0ZVV0aWxzLnJlbmRlckFu
ZENsZWFudXAobW9ycGgsIGVudiwgb3B0aW9ucywgc2hhZG93T3B0aW9ucywgY2FsbGJhY2spOwor
ICB9CisKKyAgZnVuY3Rpb24gaGFuZGxlUmVkaXJlY3QobW9ycGgsIGVudiwgc2NvcGUsIHBhdGgs
IHBhcmFtcywgaGFzaCwgdGVtcGxhdGUsIGludmVyc2UsIHZpc2l0b3IpIHsKKyAgICBpZiAoIXBh
dGgpIHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB2YXIgcmVkaXJlY3QgPSBl
bnYuaG9va3MuY2xhc3NpZnkoZW52LCBzY29wZSwgcGF0aCk7CisgICAgaWYgKHJlZGlyZWN0KSB7
CisgICAgICBzd2l0Y2ggKHJlZGlyZWN0KSB7CisgICAgICAgIGNhc2UgJ2NvbXBvbmVudCc6Cisg
ICAgICAgICAgZW52Lmhvb2tzLmNvbXBvbmVudChtb3JwaCwgZW52LCBzY29wZSwgcGF0aCwgcGFy
YW1zLCBoYXNoLCB7IGRlZmF1bHQ6IHRlbXBsYXRlLCBpbnZlcnNlOiBpbnZlcnNlIH0sIHZpc2l0
b3IpO2JyZWFrOworICAgICAgICBjYXNlICdpbmxpbmUnOgorICAgICAgICAgIGVudi5ob29rcy5p
bmxpbmUobW9ycGgsIGVudiwgc2NvcGUsIHBhdGgsIHBhcmFtcywgaGFzaCwgdmlzaXRvcik7YnJl
YWs7CisgICAgICAgIGNhc2UgJ2Jsb2NrJzoKKyAgICAgICAgICBlbnYuaG9va3MuYmxvY2sobW9y
cGgsIGVudiwgc2NvcGUsIHBhdGgsIHBhcmFtcywgaGFzaCwgdGVtcGxhdGUsIGludmVyc2UsIHZp
c2l0b3IpO2JyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHRocm93IG5ldyBFcnJv
cigiSW50ZXJuYWwgSFRNTEJhcnMgcmVkaXJlY3Rpb24gdG8gIiArIHJlZGlyZWN0ICsgIiBub3Qg
c3VwcG9ydGVkIik7CisgICAgICB9CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBp
ZiAoaGFuZGxlS2V5d29yZChwYXRoLCBtb3JwaCwgZW52LCBzY29wZSwgcGFyYW1zLCBoYXNoLCB0
ZW1wbGF0ZSwgaW52ZXJzZSwgdmlzaXRvcikpIHsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIGZ1bmN0aW9uIGhhbmRsZUtleXdvcmQocGF0
aCwgbW9ycGgsIGVudiwgc2NvcGUsIHBhcmFtcywgaGFzaCwgdGVtcGxhdGUsIGludmVyc2UsIHZp
c2l0b3IpIHsKKyAgICB2YXIga2V5d29yZCA9IGVudi5ob29rcy5rZXl3b3Jkc1twYXRoXTsKKyAg
ICBpZiAoIWtleXdvcmQpIHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAo
dHlwZW9mIGtleXdvcmQgPT09ICdmdW5jdGlvbicpIHsKKyAgICAgIHJldHVybiBrZXl3b3JkKG1v
cnBoLCBlbnYsIHNjb3BlLCBwYXJhbXMsIGhhc2gsIHRlbXBsYXRlLCBpbnZlcnNlLCB2aXNpdG9y
KTsKKyAgICB9CisKKyAgICBpZiAoa2V5d29yZC53aWxsUmVuZGVyKSB7CisgICAgICBrZXl3b3Jk
LndpbGxSZW5kZXIobW9ycGgsIGVudik7CisgICAgfQorCisgICAgdmFyIGxhc3RTdGF0ZSwgbmV3
U3RhdGU7CisgICAgaWYgKGtleXdvcmQuc2V0dXBTdGF0ZSkgeworICAgICAgbGFzdFN0YXRlID0g
X2h0bWxiYXJzVXRpbE9iamVjdFV0aWxzLnNoYWxsb3dDb3B5KG1vcnBoLmdldFN0YXRlKCkpOwor
ICAgICAgbmV3U3RhdGUgPSBtb3JwaC5zZXRTdGF0ZShrZXl3b3JkLnNldHVwU3RhdGUobGFzdFN0
YXRlLCBlbnYsIHNjb3BlLCBwYXJhbXMsIGhhc2gpKTsKKyAgICB9CisKKyAgICBpZiAoa2V5d29y
ZC5jaGlsZEVudikgeworICAgICAgLy8gQnVpbGQgdGhlIGNoaWxkIGVudmlyb25tZW50Li4uCisg
ICAgICBlbnYgPSBrZXl3b3JkLmNoaWxkRW52KG1vcnBoLmdldFN0YXRlKCksIGVudik7CisKKyAg
ICAgIC8vIC4udGhlbiBzYXZlIG9mZiB0aGUgY2hpbGQgZW52IGJ1aWxkZXIgb24gdGhlIHJlbmRl
ciBub2RlLiBJZiB0aGUgcmVuZGVyCisgICAgICAvLyBub2RlIHRyZWUgaXMgcmUtcmVuZGVyZWQg
YW5kIHRoaXMgbm9kZSBpcyBub3QgZGlydHksIHRoZSBjaGlsZCBlbnYKKyAgICAgIC8vIGJ1aWxk
ZXIgd2lsbCBzdGlsbCBiZSBpbnZva2VkIHNvIHRoYXQgY2hpbGQgZGlydHkgcmVuZGVyIG5vZGVz
IHN0aWxsIGdldAorICAgICAgLy8gdGhlIGNvcnJlY3QgY2hpbGQgZW52LgorICAgICAgbW9ycGgu
YnVpbGRDaGlsZEVudiA9IGtleXdvcmQuY2hpbGRFbnY7CisgICAgfQorCisgICAgdmFyIGZpcnN0
VGltZSA9ICFtb3JwaC5yZW5kZXJlZDsKKworICAgIGlmIChrZXl3b3JkLmlzRW1wdHkpIHsKKyAg
ICAgIHZhciBpc0VtcHR5ID0ga2V5d29yZC5pc0VtcHR5KG1vcnBoLmdldFN0YXRlKCksIGVudiwg
c2NvcGUsIHBhcmFtcywgaGFzaCk7CisKKyAgICAgIGlmIChpc0VtcHR5KSB7CisgICAgICAgIGlm
ICghZmlyc3RUaW1lKSB7CisgICAgICAgICAgX2h0bWxiYXJzVXRpbFRlbXBsYXRlVXRpbHMuY2xl
YXJNb3JwaChtb3JwaCwgZW52LCBmYWxzZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKGZpcnN0VGltZSkgeworICAgICAgaWYgKGtl
eXdvcmQucmVuZGVyKSB7CisgICAgICAgIGtleXdvcmQucmVuZGVyKG1vcnBoLCBlbnYsIHNjb3Bl
LCBwYXJhbXMsIGhhc2gsIHRlbXBsYXRlLCBpbnZlcnNlLCB2aXNpdG9yKTsKKyAgICAgIH0KKyAg
ICAgIG1vcnBoLnJlbmRlcmVkID0gdHJ1ZTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIHZhciBpc1N0YWJsZTsKKyAgICBpZiAoa2V5d29yZC5pc1N0YWJsZSkgeworICAgICAgaXNT
dGFibGUgPSBrZXl3b3JkLmlzU3RhYmxlKGxhc3RTdGF0ZSwgbmV3U3RhdGUpOworICAgIH0gZWxz
ZSB7CisgICAgICBpc1N0YWJsZSA9IHN0YWJsZVN0YXRlKGxhc3RTdGF0ZSwgbmV3U3RhdGUpOwor
ICAgIH0KKworICAgIGlmIChpc1N0YWJsZSkgeworICAgICAgaWYgKGtleXdvcmQucmVyZW5kZXIp
IHsKKyAgICAgICAgdmFyIG5ld0VudiA9IGtleXdvcmQucmVyZW5kZXIobW9ycGgsIGVudiwgc2Nv
cGUsIHBhcmFtcywgaGFzaCwgdGVtcGxhdGUsIGludmVyc2UsIHZpc2l0b3IpOworICAgICAgICBl
bnYgPSBuZXdFbnYgfHwgZW52OworICAgICAgfQorICAgICAgX2h0bWxiYXJzVXRpbE1vcnBoVXRp
bHMudmFsaWRhdGVDaGlsZE1vcnBocyhlbnYsIG1vcnBoLCB2aXNpdG9yKTsKKyAgICAgIHJldHVy
biB0cnVlOworICAgIH0gZWxzZSB7CisgICAgICBfaHRtbGJhcnNVdGlsVGVtcGxhdGVVdGlscy5j
bGVhck1vcnBoKG1vcnBoLCBlbnYsIGZhbHNlKTsKKyAgICB9CisKKyAgICAvLyBJZiB0aGUgbm9k
ZSBpcyB1bnN0YWJsZSwgcmUtcmVuZGVyIGZyb20gc2NyYXRjaAorICAgIGlmIChrZXl3b3JkLnJl
bmRlcikgeworICAgICAga2V5d29yZC5yZW5kZXIobW9ycGgsIGVudiwgc2NvcGUsIHBhcmFtcywg
aGFzaCwgdGVtcGxhdGUsIGludmVyc2UsIHZpc2l0b3IpOworICAgICAgbW9ycGgucmVuZGVyZWQg
PSB0cnVlOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gc3Rh
YmxlU3RhdGUob2xkU3RhdGUsIG5ld1N0YXRlKSB7CisgICAgaWYgKF9odG1sYmFyc1V0aWxPYmpl
Y3RVdGlscy5rZXlMZW5ndGgob2xkU3RhdGUpICE9PSBfaHRtbGJhcnNVdGlsT2JqZWN0VXRpbHMu
a2V5TGVuZ3RoKG5ld1N0YXRlKSkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IGZvciAodmFyIHByb3AgaW4gb2xkU3RhdGUpIHsKKyAgICAgIGlmIChvbGRTdGF0ZVtwcm9wXSAh
PT0gbmV3U3RhdGVbcHJvcF0pIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgZnVuY3Rpb24gbGlua1JlbmRlck5vZGUo
KSAvKiBtb3JwaCwgZW52LCBzY29wZSwgcGFyYW1zLCBoYXNoICoveworICAgIHJldHVybjsKKyAg
fQorCisgIC8qKgorICAgIEhvc3QgSG9vazogaW5saW5lCisgIAorICAgIEBwYXJhbSB7UmVuZGVy
Tm9kZX0gcmVuZGVyTm9kZQorICAgIEBwYXJhbSB7RW52aXJvbm1lbnR9IGVudgorICAgIEBwYXJh
bSB7U2NvcGV9IHNjb3BlCisgICAgQHBhcmFtIHtTdHJpbmd9IHBhdGgKKyAgICBAcGFyYW0ge0Fy
cmF5fSBwYXJhbXMKKyAgICBAcGFyYW0ge0hhc2h9IGhhc2gKKyAgCisgICAgQ29ycmVzcG9uZHMg
dG86CisgIAorICAgIGBgYGhicworICAgIHt7aGVscGVyIHBhcmFtMSBwYXJhbTIga2V5MT12YWwx
IGtleTI9dmFsMn19CisgICAgYGBgCisgIAorICAgIFRoaXMgaG9zdCBob29rIGlzIHNpbWlsYXIg
dG8gdGhlIGBibG9ja2AgaG9zdCBob29rLCBidXQgaXQKKyAgICBpbnZva2VzIGhlbHBlcnMgdGhh
dCBkbyBub3Qgc3VwcGx5IGFuIGF0dGFjaGVkIGJsb2NrLgorICAKKyAgICBMaWtlIHRoZSBgYmxv
Y2tgIGhvb2ssIHRoZSBoZWxwZXIgc2hvdWxkIGJlIGludm9rZWQgd2l0aDoKKyAgCisgICAgLSBg
e0FycmF5fSBwYXJhbXNgOiB0aGUgcGFyYW1ldGVycyBwYXNzZWQgdG8gdGhlIGhlbHBlcgorICAg
ICAgaW4gdGhlIHRlbXBsYXRlLgorICAgIC0gYHtPYmplY3R9IGhhc2hgOiBhbiBvYmplY3QgY29u
dGFpbmluZyB0aGUga2V5cyBhbmQgdmFsdWVzIHBhc3NlZAorICAgICAgaW4gdGhlIGhhc2ggcG9z
aXRpb24gaW4gdGhlIHRlbXBsYXRlLgorICAKKyAgICBUaGUgdmFsdWVzIGluIGBwYXJhbXNgIGFu
ZCBgaGFzaGAgd2lsbCBhbHJlYWR5IGJlIHJlc29sdmVkCisgICAgdGhyb3VnaCBhIHByZXZpb3Vz
IGNhbGwgdG8gdGhlIGBnZXRgIGhvc3QgaG9vay4KKyAgCisgICAgSW4gZ2VuZXJhbCwgdGhlIGRl
ZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgYGlubGluZWAgc2hvdWxkIHdvcmsKKyAgICBmb3IgbW9z
dCBob3N0IGVudmlyb25tZW50cy4gSXQgZGVsZWdhdGVzIHRvIG90aGVyIGhvc3QgaG9va3MKKyAg
ICB3aGVyZSBhcHByb3ByaWF0ZSwgYW5kIHByb3Blcmx5IGludm9rZXMgdGhlIGhlbHBlciB3aXRo
IHRoZQorICAgIGFwcHJvcHJpYXRlIGFyZ3VtZW50cy4KKyAgCisgICAgVGhlIGRlZmF1bHQgaW1w
bGVtZW50YXRpb24gb2YgYGlubGluZWAgYWxzbyBtYWtlcyBgcGFydGlhbGAKKyAgICBhIGtleXdv
cmQuIEluc3RlYWQgb2YgaW52b2tpbmcgYSBoZWxwZXIgbmFtZWQgYHBhcnRpYWxgLAorICAgIGl0
IGludm9rZXMgdGhlIGBwYXJ0aWFsYCBob3N0IGhvb2suCisgICovCisKKyAgZnVuY3Rpb24gaW5s
aW5lKG1vcnBoLCBlbnYsIHNjb3BlLCBwYXRoLCBwYXJhbXMsIGhhc2gsIHZpc2l0b3IpIHsKKyAg
ICBpZiAoaGFuZGxlUmVkaXJlY3QobW9ycGgsIGVudiwgc2NvcGUsIHBhdGgsIHBhcmFtcywgaGFz
aCwgbnVsbCwgbnVsbCwgdmlzaXRvcikpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2
YXIgdmFsdWUgPSB1bmRlZmluZWQsCisgICAgICAgIGhhc1ZhbHVlID0gdW5kZWZpbmVkOworICAg
IGlmIChtb3JwaC5saW5rZWRSZXN1bHQpIHsKKyAgICAgIHZhbHVlID0gZW52Lmhvb2tzLmdldFZh
bHVlKG1vcnBoLmxpbmtlZFJlc3VsdCk7CisgICAgICBoYXNWYWx1ZSA9IHRydWU7CisgICAgfSBl
bHNlIHsKKyAgICAgIHZhciBvcHRpb25zID0gb3B0aW9uc0ZvcihudWxsLCBudWxsLCBlbnYsIHNj
b3BlLCBtb3JwaCk7CisKKyAgICAgIHZhciBoZWxwZXIgPSBlbnYuaG9va3MubG9va3VwSGVscGVy
KGVudiwgc2NvcGUsIHBhdGgpOworICAgICAgdmFyIHJlc3VsdCA9IGVudi5ob29rcy5pbnZva2VI
ZWxwZXIobW9ycGgsIGVudiwgc2NvcGUsIHZpc2l0b3IsIHBhcmFtcywgaGFzaCwgaGVscGVyLCBv
cHRpb25zLnRlbXBsYXRlcywgdGhpc0ZvcihvcHRpb25zLnRlbXBsYXRlcykpOworCisgICAgICBp
ZiAocmVzdWx0ICYmIHJlc3VsdC5saW5rKSB7CisgICAgICAgIG1vcnBoLmxpbmtlZFJlc3VsdCA9
IHJlc3VsdC52YWx1ZTsKKyAgICAgICAgX2h0bWxiYXJzVXRpbE1vcnBoVXRpbHMubGlua1BhcmFt
cyhlbnYsIHNjb3BlLCBtb3JwaCwgJ0Bjb250ZW50LWhlbHBlcicsIFttb3JwaC5saW5rZWRSZXN1
bHRdLCBudWxsKTsKKyAgICAgIH0KKworICAgICAgaWYgKHJlc3VsdCAmJiAndmFsdWUnIGluIHJl
c3VsdCkgeworICAgICAgICB2YWx1ZSA9IGVudi5ob29rcy5nZXRWYWx1ZShyZXN1bHQudmFsdWUp
OworICAgICAgICBoYXNWYWx1ZSA9IHRydWU7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKGhh
c1ZhbHVlKSB7CisgICAgICBpZiAobW9ycGgubGFzdFZhbHVlICE9PSB2YWx1ZSkgeworICAgICAg
ICBtb3JwaC5zZXRDb250ZW50KHZhbHVlKTsKKyAgICAgIH0KKyAgICAgIG1vcnBoLmxhc3RWYWx1
ZSA9IHZhbHVlOworICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIGtleXdvcmQocGF0aCwgbW9ycGgs
IGVudiwgc2NvcGUsIHBhcmFtcywgaGFzaCwgdGVtcGxhdGUsIGludmVyc2UsIHZpc2l0b3IpIHsK
KyAgICBoYW5kbGVLZXl3b3JkKHBhdGgsIG1vcnBoLCBlbnYsIHNjb3BlLCBwYXJhbXMsIGhhc2gs
IHRlbXBsYXRlLCBpbnZlcnNlLCB2aXNpdG9yKTsKKyAgfQorCisgIGZ1bmN0aW9uIGludm9rZUhl
bHBlcihtb3JwaCwgZW52LCBzY29wZSwgdmlzaXRvciwgX3BhcmFtcywgX2hhc2gsIGhlbHBlciwg
dGVtcGxhdGVzLCBjb250ZXh0KSB7CisgICAgdmFyIHBhcmFtcyA9IG5vcm1hbGl6ZUFycmF5KGVu
diwgX3BhcmFtcyk7CisgICAgdmFyIGhhc2ggPSBub3JtYWxpemVPYmplY3QoZW52LCBfaGFzaCk7
CisgICAgcmV0dXJuIHsgdmFsdWU6IGhlbHBlci5jYWxsKGNvbnRleHQsIHBhcmFtcywgaGFzaCwg
dGVtcGxhdGVzKSB9OworICB9CisKKyAgZnVuY3Rpb24gbm9ybWFsaXplQXJyYXkoZW52LCBhcnJh
eSkgeworICAgIHZhciBvdXQgPSBuZXcgQXJyYXkoYXJyYXkubGVuZ3RoKTsKKworICAgIGZvciAo
dmFyIGkgPSAwLCBsID0gYXJyYXkubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CisgICAgICBvdXRbaV0g
PSBlbnYuaG9va3MuZ2V0Q2VsbE9yVmFsdWUoYXJyYXlbaV0pOworICAgIH0KKworICAgIHJldHVy
biBvdXQ7CisgIH0KKworICBmdW5jdGlvbiBub3JtYWxpemVPYmplY3QoZW52LCBvYmplY3QpIHsK
KyAgICB2YXIgb3V0ID0ge307CisKKyAgICBmb3IgKHZhciBwcm9wIGluIG9iamVjdCkgeworICAg
ICAgb3V0W3Byb3BdID0gZW52Lmhvb2tzLmdldENlbGxPclZhbHVlKG9iamVjdFtwcm9wXSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIG91dDsKKyAgfQorCisgIGZ1bmN0aW9uIGNsYXNzaWZ5KCkgLyog
ZW52LCBzY29wZSwgcGF0aCAqL3sKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHZhciBrZXl3
b3JkcyA9IHsKKyAgICBwYXJ0aWFsOiBmdW5jdGlvbiAobW9ycGgsIGVudiwgc2NvcGUsIHBhcmFt
cykgeworICAgICAgdmFyIHZhbHVlID0gZW52Lmhvb2tzLnBhcnRpYWwobW9ycGgsIGVudiwgc2Nv
cGUsIHBhcmFtc1swXSk7CisgICAgICBtb3JwaC5zZXRDb250ZW50KHZhbHVlKTsKKyAgICAgIHJl
dHVybiB0cnVlOworICAgIH0sCisKKyAgICAvLyBxdW90ZWQgc2luY2UgaXQncyBhIHJlc2VydmVk
IHdvcmQsIHNlZSBpc3N1ZSAjNDIwCisgICAgJ3lpZWxkJzogZnVuY3Rpb24gKG1vcnBoLCBlbnYs
IHNjb3BlLCBwYXJhbXMsIGhhc2gsIHRlbXBsYXRlLCBpbnZlcnNlLCB2aXNpdG9yKSB7CisgICAg
ICAvLyB0aGUgY3VycmVudCBzY29wZSBpcyBwcm92aWRlZCBwdXJlbHkgZm9yIHRoZSBjcmVhdGlv
biBvZiBzaGFkb3cKKyAgICAgIC8vIHNjb3BlczsgaXQgc2hvdWxkIG5vdCBiZSBwcm92aWRlZCB0
byB1c2VyIGNvZGUuCisKKyAgICAgIHZhciB0byA9IGVudi5ob29rcy5nZXRWYWx1ZShoYXNoLnRv
KSB8fCAnZGVmYXVsdCc7CisgICAgICB2YXIgYmxvY2sgPSBlbnYuaG9va3MuZ2V0QmxvY2soc2Nv
cGUsIHRvKTsKKworICAgICAgaWYgKGJsb2NrKSB7CisgICAgICAgIGJsb2NrLmludm9rZShlbnYs
IHBhcmFtcywgaGFzaC5zZWxmLCBtb3JwaCwgc2NvcGUsIHZpc2l0b3IpOworICAgICAgfQorICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfSwKKworICAgIGhhc0Jsb2NrOiBmdW5jdGlvbiAobW9ycGgs
IGVudiwgc2NvcGUsIHBhcmFtcykgeworICAgICAgdmFyIG5hbWUgPSBlbnYuaG9va3MuZ2V0VmFs
dWUocGFyYW1zWzBdKSB8fCAnZGVmYXVsdCc7CisgICAgICByZXR1cm4gISFlbnYuaG9va3MuZ2V0
QmxvY2soc2NvcGUsIG5hbWUpOworICAgIH0sCisKKyAgICBoYXNCbG9ja1BhcmFtczogZnVuY3Rp
b24gKG1vcnBoLCBlbnYsIHNjb3BlLCBwYXJhbXMpIHsKKyAgICAgIHZhciBuYW1lID0gZW52Lmhv
b2tzLmdldFZhbHVlKHBhcmFtc1swXSkgfHwgJ2RlZmF1bHQnOworICAgICAgdmFyIGJsb2NrID0g
ZW52Lmhvb2tzLmdldEJsb2NrKHNjb3BlLCBuYW1lKTsKKyAgICAgIHJldHVybiAhIShibG9jayAm
JiBibG9jay5hcml0eSk7CisgICAgfQorCisgIH07CisKKyAgZXhwb3J0cy5rZXl3b3JkcyA9IGtl
eXdvcmRzOworICAvKioKKyAgICBIb3N0IEhvb2s6IHBhcnRpYWwKKyAgCisgICAgQHBhcmFtIHtS
ZW5kZXJOb2RlfSByZW5kZXJOb2RlCisgICAgQHBhcmFtIHtFbnZpcm9ubWVudH0gZW52CisgICAg
QHBhcmFtIHtTY29wZX0gc2NvcGUKKyAgICBAcGFyYW0ge1N0cmluZ30gcGF0aAorICAKKyAgICBD
b3JyZXNwb25kcyB0bzoKKyAgCisgICAgYGBgaGJzCisgICAge3twYXJ0aWFsICJsb2NhdGlvbiJ9
fQorICAgIGBgYAorICAKKyAgICBUaGlzIGhvc3QgaG9vayBpcyBpbnZva2VkIGJ5IHRoZSBkZWZh
dWx0IGltcGxlbWVudGF0aW9uIG9mCisgICAgdGhlIGBpbmxpbmVgIGhvb2suIFRoaXMgbWFrZXMg
YHBhcnRpYWxgIGEga2V5d29yZCBpbiBhbgorICAgIEhUTUxCYXJzIGVudmlyb25tZW50IHVzaW5n
IHRoZSBkZWZhdWx0IGBpbmxpbmVgIGhvc3QgaG9vay4KKyAgCisgICAgSXQgaXMgaW1wbGVtZW50
ZWQgYXMgYSBob3N0IGhvb2sgc28gdGhhdCBpdCBjYW4gcmV0cmlldmUKKyAgICB0aGUgbmFtZWQg
cGFydGlhbCBvdXQgb2YgdGhlIGBFbnZpcm9ubWVudGAuIEhlbHBlcnMsIGluCisgICAgY29udHJh
c3QsIG9ubHkgaGF2ZSBhY2Nlc3MgdG8gdGhlIHZhbHVlcyBwYXNzZWQgaW4gdG8gdGhlbSwKKyAg
ICBhbmQgbm90IHRvIHRoZSBhbWJpZW50IGxleGljYWwgZW52aXJvbm1lbnQuCisgIAorICAgIFRo
ZSBob3N0IGhvb2sgc2hvdWxkIGludm9rZSB0aGUgcmVmZXJlbmNlZCBwYXJ0aWFsIHdpdGgKKyAg
ICB0aGUgYW1iaWVudCBgc2VsZmAuCisgICovCisKKyAgZnVuY3Rpb24gcGFydGlhbChyZW5kZXJO
b2RlLCBlbnYsIHNjb3BlLCBwYXRoKSB7CisgICAgdmFyIHRlbXBsYXRlID0gZW52LnBhcnRpYWxz
W3BhdGhdOworICAgIHJldHVybiB0ZW1wbGF0ZS5yZW5kZXIoc2NvcGUuc2VsZiwgZW52LCB7fSku
ZnJhZ21lbnQ7CisgIH0KKworICAvKioKKyAgICBIb3N0IGhvb2s6IHJhbmdlCisgIAorICAgIEBw
YXJhbSB7UmVuZGVyTm9kZX0gcmVuZGVyTm9kZQorICAgIEBwYXJhbSB7RW52aXJvbm1lbnR9IGVu
dgorICAgIEBwYXJhbSB7U2NvcGV9IHNjb3BlCisgICAgQHBhcmFtIHthbnl9IHZhbHVlCisgIAor
ICAgIENvcnJlc3BvbmRzIHRvOgorICAKKyAgICBgYGBoYnMKKyAgICB7e2NvbnRlbnR9fQorICAg
IHt7e3VuZXNjYXBlZH19fQorICAgIGBgYAorICAKKyAgICBUaGlzIGhvb2sgaXMgcmVzcG9uc2li
bGUgZm9yIHVwZGF0aW5nIGEgcmVuZGVyIG5vZGUKKyAgICB0aGF0IHJlcHJlc2VudHMgYSByYW5n
ZSBvZiBjb250ZW50IHdpdGggYSB2YWx1ZS4KKyAgKi8KKworICBmdW5jdGlvbiByYW5nZShtb3Jw
aCwgZW52LCBzY29wZSwgcGF0aCwgdmFsdWUsIHZpc2l0b3IpIHsKKyAgICBpZiAoaGFuZGxlUmVk
aXJlY3QobW9ycGgsIGVudiwgc2NvcGUsIHBhdGgsIFtdLCB7fSwgbnVsbCwgbnVsbCwgdmlzaXRv
cikpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2YWx1ZSA9IGVudi5ob29rcy5nZXRW
YWx1ZSh2YWx1ZSk7CisKKyAgICBpZiAobW9ycGgubGFzdFZhbHVlICE9PSB2YWx1ZSkgeworICAg
ICAgbW9ycGguc2V0Q29udGVudCh2YWx1ZSk7CisgICAgfQorCisgICAgbW9ycGgubGFzdFZhbHVl
ID0gdmFsdWU7CisgIH0KKworICAvKioKKyAgICBIb3N0IGhvb2s6IGVsZW1lbnQKKyAgCisgICAg
QHBhcmFtIHtSZW5kZXJOb2RlfSByZW5kZXJOb2RlCisgICAgQHBhcmFtIHtFbnZpcm9ubWVudH0g
ZW52CisgICAgQHBhcmFtIHtTY29wZX0gc2NvcGUKKyAgICBAcGFyYW0ge1N0cmluZ30gcGF0aAor
ICAgIEBwYXJhbSB7QXJyYXl9IHBhcmFtcworICAgIEBwYXJhbSB7SGFzaH0gaGFzaAorICAKKyAg
ICBDb3JyZXNwb25kcyB0bzoKKyAgCisgICAgYGBgaGJzCisgICAgPGRpdiB7e2JpbmQtYXR0ciBm
b289YmFyfX0+PC9kaXY+CisgICAgYGBgCisgIAorICAgIFRoaXMgaG9vayBpcyByZXNwb25zaWJs
ZSBmb3IgaW52b2tpbmcgYSBoZWxwZXIgdGhhdAorICAgIG1vZGlmaWVzIGFuIGVsZW1lbnQuCisg
IAorICAgIEl0cyBwdXJwb3NlIGlzIGxhcmdlbHkgbGVnYWN5IHN1cHBvcnQgZm9yIGF3a3dhcmQK
KyAgICBpZGlvbXMgdGhhdCBiZWNhbWUgY29tbW9uIHdoZW4gdXNpbmcgdGhlIHN0cmluZy1iYXNl
ZAorICAgIEhhbmRsZWJhcnMgZW5naW5lLgorICAKKyAgICBNb3N0IG9mIHRoZSB1c2VzIG9mIHRo
ZSBgZWxlbWVudGAgaG9vayBhcmUgZXhwZWN0ZWQKKyAgICB0byBiZSBzdXBlcnNlZGVkIGJ5IGNv
bXBvbmVudCBzeW50YXggYW5kIHRoZQorICAgIGBhdHRyaWJ1dGVgIGhvb2suCisgICovCisKKyAg
ZnVuY3Rpb24gZWxlbWVudChtb3JwaCwgZW52LCBzY29wZSwgcGF0aCwgcGFyYW1zLCBoYXNoLCB2
aXNpdG9yKSB7CisgICAgaWYgKGhhbmRsZVJlZGlyZWN0KG1vcnBoLCBlbnYsIHNjb3BlLCBwYXRo
LCBwYXJhbXMsIGhhc2gsIG51bGwsIG51bGwsIHZpc2l0b3IpKSB7CisgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgdmFyIGhlbHBlciA9IGVudi5ob29rcy5sb29rdXBIZWxwZXIoZW52LCBzY29w
ZSwgcGF0aCk7CisgICAgaWYgKGhlbHBlcikgeworICAgICAgZW52Lmhvb2tzLmludm9rZUhlbHBl
cihudWxsLCBlbnYsIHNjb3BlLCBudWxsLCBwYXJhbXMsIGhhc2gsIGhlbHBlciwgeyBlbGVtZW50
OiBtb3JwaC5lbGVtZW50IH0pOworICAgIH0KKyAgfQorCisgIC8qKgorICAgIEhvc3QgaG9vazog
YXR0cmlidXRlCisgIAorICAgIEBwYXJhbSB7UmVuZGVyTm9kZX0gcmVuZGVyTm9kZQorICAgIEBw
YXJhbSB7RW52aXJvbm1lbnR9IGVudgorICAgIEBwYXJhbSB7U3RyaW5nfSBuYW1lCisgICAgQHBh
cmFtIHthbnl9IHZhbHVlCisgIAorICAgIENvcnJlc3BvbmRzIHRvOgorICAKKyAgICBgYGBoYnMK
KyAgICA8ZGl2IGZvbz17e2Jhcn19PjwvZGl2PgorICAgIGBgYAorICAKKyAgICBUaGlzIGhvb2sg
aXMgcmVzcG9uc2libGUgZm9yIHVwZGF0aW5nIGEgcmVuZGVyIG5vZGUKKyAgICB0aGF0IHJlcHJl
c2VudHMgYW4gZWxlbWVudCdzIGF0dHJpYnV0ZSB3aXRoIGEgdmFsdWUuCisgIAorICAgIEl0IHJl
Y2VpdmVzIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgYXMgd2VsbCBhcyBhbgorICAgIGFscmVh
ZHktcmVzb2x2ZWQgdmFsdWUsIGFuZCBzaG91bGQgdXBkYXRlIHRoZSByZW5kZXIKKyAgICBub2Rl
IHdpdGggdGhlIHZhbHVlIGlmIGFwcHJvcHJpYXRlLgorICAqLworCisgIGZ1bmN0aW9uIGF0dHJp
YnV0ZShtb3JwaCwgZW52LCBzY29wZSwgbmFtZSwgdmFsdWUpIHsKKyAgICB2YWx1ZSA9IGVudi5o
b29rcy5nZXRWYWx1ZSh2YWx1ZSk7CisKKyAgICBpZiAobW9ycGgubGFzdFZhbHVlICE9PSB2YWx1
ZSkgeworICAgICAgbW9ycGguc2V0Q29udGVudCh2YWx1ZSk7CisgICAgfQorCisgICAgbW9ycGgu
bGFzdFZhbHVlID0gdmFsdWU7CisgIH0KKworICBmdW5jdGlvbiBzdWJleHByKGVudiwgc2NvcGUs
IGhlbHBlck5hbWUsIHBhcmFtcywgaGFzaCkgeworICAgIHZhciBoZWxwZXIgPSBlbnYuaG9va3Mu
bG9va3VwSGVscGVyKGVudiwgc2NvcGUsIGhlbHBlck5hbWUpOworICAgIHZhciByZXN1bHQgPSBl
bnYuaG9va3MuaW52b2tlSGVscGVyKG51bGwsIGVudiwgc2NvcGUsIG51bGwsIHBhcmFtcywgaGFz
aCwgaGVscGVyLCB7fSk7CisgICAgaWYgKHJlc3VsdCAmJiAndmFsdWUnIGluIHJlc3VsdCkgewor
ICAgICAgcmV0dXJuIGVudi5ob29rcy5nZXRWYWx1ZShyZXN1bHQudmFsdWUpOworICAgIH0KKyAg
fQorCisgIC8qKgorICAgIEhvc3QgSG9vazogZ2V0CisgIAorICAgIEBwYXJhbSB7RW52aXJvbm1l
bnR9IGVudgorICAgIEBwYXJhbSB7U2NvcGV9IHNjb3BlCisgICAgQHBhcmFtIHtTdHJpbmd9IHBh
dGgKKyAgCisgICAgQ29ycmVzcG9uZHMgdG86CisgIAorICAgIGBgYGhicworICAgIHt7Zm9vLmJh
cn19CisgICAgICBeCisgIAorICAgIHt7aGVscGVyIGZvby5iYXIga2V5PXZhbHVlfX0KKyAgICAg
ICAgICAgICBeICAgICAgICAgICBeCisgICAgYGBgCisgIAorICAgIFRoaXMgaG9vayBpcyB0aGUg
ImxlYWYiIGhvb2sgb2YgdGhlIHN5c3RlbS4gSXQgaXMgdXNlZCB0bworICAgIHJlc29sdmUgYSBw
YXRoIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHNjb3BlLgorICAqLworCisgIGZ1bmN0aW9uIGdl
dChlbnYsIHNjb3BlLCBwYXRoKSB7CisgICAgaWYgKHBhdGggPT09ICcnKSB7CisgICAgICByZXR1
cm4gc2NvcGUuc2VsZjsKKyAgICB9CisKKyAgICB2YXIga2V5cyA9IHBhdGguc3BsaXQoJy4nKTsK
KyAgICB2YXIgdmFsdWUgPSBlbnYuaG9va3MuZ2V0Um9vdChzY29wZSwga2V5c1swXSlbMF07CisK
KyAgICBmb3IgKHZhciBpID0gMTsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKKyAgICAgIGlmICh2
YWx1ZSkgeworICAgICAgICB2YWx1ZSA9IGVudi5ob29rcy5nZXRDaGlsZCh2YWx1ZSwga2V5c1tp
XSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gdmFsdWU7CisgIH0KKworICBmdW5jdGlvbiBnZXRSb290KHNjb3BlLCBrZXkpIHsK
KyAgICBpZiAoc2NvcGUubG9jYWxQcmVzZW50W2tleV0pIHsKKyAgICAgIHJldHVybiBbc2NvcGUu
bG9jYWxzW2tleV1dOworICAgIH0gZWxzZSBpZiAoc2NvcGUuc2VsZikgeworICAgICAgcmV0dXJu
IFtzY29wZS5zZWxmW2tleV1dOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gW3VuZGVmaW5l
ZF07CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gZ2V0QmxvY2soc2NvcGUsIGtleSkgeworICAg
IHJldHVybiBzY29wZS5ibG9ja3Nba2V5XTsKKyAgfQorCisgIGZ1bmN0aW9uIGdldENoaWxkKHZh
bHVlLCBrZXkpIHsKKyAgICByZXR1cm4gdmFsdWVba2V5XTsKKyAgfQorCisgIGZ1bmN0aW9uIGdl
dFZhbHVlKHJlZmVyZW5jZSkgeworICAgIHJldHVybiByZWZlcmVuY2U7CisgIH0KKworICBmdW5j
dGlvbiBnZXRDZWxsT3JWYWx1ZShyZWZlcmVuY2UpIHsKKyAgICByZXR1cm4gcmVmZXJlbmNlOwor
ICB9CisKKyAgZnVuY3Rpb24gY29tcG9uZW50KG1vcnBoLCBlbnYsIHNjb3BlLCB0YWdOYW1lLCBw
YXJhbXMsIGF0dHJzLCB0ZW1wbGF0ZXMsIHZpc2l0b3IpIHsKKyAgICBpZiAoZW52Lmhvb2tzLmhh
c0hlbHBlcihlbnYsIHNjb3BlLCB0YWdOYW1lKSkgeworICAgICAgcmV0dXJuIGVudi5ob29rcy5i
bG9jayhtb3JwaCwgZW52LCBzY29wZSwgdGFnTmFtZSwgcGFyYW1zLCBhdHRycywgdGVtcGxhdGVz
LmRlZmF1bHQsIHRlbXBsYXRlcy5pbnZlcnNlLCB2aXNpdG9yKTsKKyAgICB9CisKKyAgICBjb21w
b25lbnRGYWxsYmFjayhtb3JwaCwgZW52LCBzY29wZSwgdGFnTmFtZSwgYXR0cnMsIHRlbXBsYXRl
cy5kZWZhdWx0KTsKKyAgfQorCisgIGZ1bmN0aW9uIGNvbmNhdChlbnYsIHBhcmFtcykgeworICAg
IHZhciB2YWx1ZSA9ICIiOworICAgIGZvciAodmFyIGkgPSAwLCBsID0gcGFyYW1zLmxlbmd0aDsg
aSA8IGw7IGkrKykgeworICAgICAgdmFsdWUgKz0gZW52Lmhvb2tzLmdldFZhbHVlKHBhcmFtc1tp
XSk7CisgICAgfQorICAgIHJldHVybiB2YWx1ZTsKKyAgfQorCisgIGZ1bmN0aW9uIGNvbXBvbmVu
dEZhbGxiYWNrKG1vcnBoLCBlbnYsIHNjb3BlLCB0YWdOYW1lLCBhdHRycywgdGVtcGxhdGUpIHsK
KyAgICB2YXIgZWxlbWVudCA9IGVudi5kb20uY3JlYXRlRWxlbWVudCh0YWdOYW1lKTsKKyAgICBm
b3IgKHZhciBuYW1lIGluIGF0dHJzKSB7CisgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShuYW1l
LCBlbnYuaG9va3MuZ2V0VmFsdWUoYXR0cnNbbmFtZV0pKTsKKyAgICB9CisgICAgdmFyIGZyYWdt
ZW50ID0gX2h0bWxiYXJzUnVudGltZVJlbmRlci5kZWZhdWx0KHRlbXBsYXRlLCBlbnYsIHNjb3Bl
LCB7fSkuZnJhZ21lbnQ7CisgICAgZWxlbWVudC5hcHBlbmRDaGlsZChmcmFnbWVudCk7CisgICAg
bW9ycGguc2V0Tm9kZShlbGVtZW50KTsKKyAgfQorCisgIGZ1bmN0aW9uIGhhc0hlbHBlcihlbnYs
IHNjb3BlLCBoZWxwZXJOYW1lKSB7CisgICAgcmV0dXJuIGVudi5oZWxwZXJzW2hlbHBlck5hbWVd
ICE9PSB1bmRlZmluZWQ7CisgIH0KKworICBmdW5jdGlvbiBsb29rdXBIZWxwZXIoZW52LCBzY29w
ZSwgaGVscGVyTmFtZSkgeworICAgIHJldHVybiBlbnYuaGVscGVyc1toZWxwZXJOYW1lXTsKKyAg
fQorCisgIGZ1bmN0aW9uIGJpbmRTY29wZSgpIC8qIGVudiwgc2NvcGUgKi97CisgICAgLy8gdGhp
cyBmdW5jdGlvbiBpcyB1c2VkIHRvIGhhbmRsZSBob3N0LXNwZWNpZmllZCBleHRlbnNpb25zIHRv
IHNjb3BlCisgICAgLy8gb3RoZXIgdGhhbiBgc2VsZmAsIGBsb2NhbHNgIGFuZCBgYmxvY2tgLgor
ICB9CisKKyAgZnVuY3Rpb24gdXBkYXRlU2NvcGUoZW52LCBzY29wZSkgeworICAgIGVudi5ob29r
cy5iaW5kU2NvcGUoZW52LCBzY29wZSk7CisgIH0KKworICBleHBvcnRzLmRlZmF1bHQgPSB7Cisg
ICAgLy8gZnVuZGFtZW50YWwgaG9va3MgdGhhdCB5b3Ugd2lsbCBsaWtlbHkgd2FudCB0byBvdmVy
cmlkZQorICAgIGJpbmRMb2NhbDogYmluZExvY2FsLAorICAgIGJpbmRTZWxmOiBiaW5kU2VsZiwK
KyAgICBiaW5kU2NvcGU6IGJpbmRTY29wZSwKKyAgICBjbGFzc2lmeTogY2xhc3NpZnksCisgICAg
Y29tcG9uZW50OiBjb21wb25lbnQsCisgICAgY29uY2F0OiBjb25jYXQsCisgICAgY3JlYXRlRnJl
c2hTY29wZTogY3JlYXRlRnJlc2hTY29wZSwKKyAgICBnZXRDaGlsZDogZ2V0Q2hpbGQsCisgICAg
Z2V0Um9vdDogZ2V0Um9vdCwKKyAgICBnZXRCbG9jazogZ2V0QmxvY2ssCisgICAgZ2V0VmFsdWU6
IGdldFZhbHVlLAorICAgIGdldENlbGxPclZhbHVlOiBnZXRDZWxsT3JWYWx1ZSwKKyAgICBrZXl3
b3Jkczoga2V5d29yZHMsCisgICAgbGlua1JlbmRlck5vZGU6IGxpbmtSZW5kZXJOb2RlLAorICAg
IHBhcnRpYWw6IHBhcnRpYWwsCisgICAgc3ViZXhwcjogc3ViZXhwciwKKworICAgIC8vIGZ1bmRh
bWVudGFsIGhvb2tzIHdpdGggZ29vZCBkZWZhdWx0IGJlaGF2aW9yCisgICAgYmluZEJsb2NrOiBi
aW5kQmxvY2ssCisgICAgYmluZFNoYWRvd1Njb3BlOiBiaW5kU2hhZG93U2NvcGUsCisgICAgdXBk
YXRlTG9jYWw6IHVwZGF0ZUxvY2FsLAorICAgIHVwZGF0ZVNlbGY6IHVwZGF0ZVNlbGYsCisgICAg
dXBkYXRlU2NvcGU6IHVwZGF0ZVNjb3BlLAorICAgIGNyZWF0ZUNoaWxkU2NvcGU6IGNyZWF0ZUNo
aWxkU2NvcGUsCisgICAgaGFzSGVscGVyOiBoYXNIZWxwZXIsCisgICAgbG9va3VwSGVscGVyOiBs
b29rdXBIZWxwZXIsCisgICAgaW52b2tlSGVscGVyOiBpbnZva2VIZWxwZXIsCisgICAgY2xlYW51
cFJlbmRlck5vZGU6IG51bGwsCisgICAgZGVzdHJveVJlbmRlck5vZGU6IG51bGwsCisgICAgd2ls
bENsZWFudXBUcmVlOiBudWxsLAorICAgIGRpZENsZWFudXBUcmVlOiBudWxsLAorICAgIHdpbGxS
ZW5kZXJOb2RlOiBudWxsLAorICAgIGRpZFJlbmRlck5vZGU6IG51bGwsCisKKyAgICAvLyBkZXJp
dmVkIGhvb2tzCisgICAgYXR0cmlidXRlOiBhdHRyaWJ1dGUsCisgICAgYmxvY2s6IGJsb2NrLAor
ICAgIGNyZWF0ZVNjb3BlOiBjcmVhdGVTY29wZSwKKyAgICBlbGVtZW50OiBlbGVtZW50LAorICAg
IGdldDogZ2V0LAorICAgIGlubGluZTogaW5saW5lLAorICAgIHJhbmdlOiByYW5nZSwKKyAgICBr
ZXl3b3JkOiBrZXl3b3JkCisgIH07Cit9KTsKK2VuaWZlZCgiaHRtbGJhcnMtcnVudGltZS9tb3Jw
aCIsIFsiZXhwb3J0cyIsICJtb3JwaC1yYW5nZSJdLCBmdW5jdGlvbiAoZXhwb3J0cywgX21vcnBo
UmFuZ2UpIHsKKyAgInVzZSBzdHJpY3QiOworCisgIHZhciBndWlkID0gMTsKKworICBmdW5jdGlv
biBIVE1MQmFyc01vcnBoKGRvbUhlbHBlciwgY29udGV4dHVhbEVsZW1lbnQpIHsKKyAgICB0aGlz
LnN1cGVyJGNvbnN0cnVjdG9yKGRvbUhlbHBlciwgY29udGV4dHVhbEVsZW1lbnQpOworCisgICAg
dGhpcy5fc3RhdGUgPSB1bmRlZmluZWQ7CisgICAgdGhpcy5vd25lck5vZGUgPSBudWxsOworICAg
IHRoaXMuaXNEaXJ0eSA9IGZhbHNlOworICAgIHRoaXMuaXNTdWJ0cmVlRGlydHkgPSBmYWxzZTsK
KyAgICB0aGlzLmxhc3RZaWVsZGVkID0gbnVsbDsKKyAgICB0aGlzLmxhc3RSZXN1bHQgPSBudWxs
OworICAgIHRoaXMubGFzdFZhbHVlID0gbnVsbDsKKyAgICB0aGlzLmJ1aWxkQ2hpbGRFbnYgPSBu
dWxsOworICAgIHRoaXMubW9ycGhMaXN0ID0gbnVsbDsKKyAgICB0aGlzLm1vcnBoTWFwID0gbnVs
bDsKKyAgICB0aGlzLmtleSA9IG51bGw7CisgICAgdGhpcy5saW5rZWRQYXJhbXMgPSBudWxsOwor
ICAgIHRoaXMubGlua2VkUmVzdWx0ID0gbnVsbDsKKyAgICB0aGlzLmNoaWxkTm9kZXMgPSBudWxs
OworICAgIHRoaXMucmVuZGVyZWQgPSBmYWxzZTsKKyAgICB0aGlzLmd1aWQgPSAicmFuZ2UiICsg
Z3VpZCsrOworICAgIHRoaXMuc2VlbiA9IGZhbHNlOworICB9CisKKyAgSFRNTEJhcnNNb3JwaC5l
bXB0eSA9IGZ1bmN0aW9uIChkb21IZWxwZXIsIGNvbnRleHR1YWxFbGVtZW50KSB7CisgICAgdmFy
IG1vcnBoID0gbmV3IEhUTUxCYXJzTW9ycGgoZG9tSGVscGVyLCBjb250ZXh0dWFsRWxlbWVudCk7
CisgICAgbW9ycGguY2xlYXIoKTsKKyAgICByZXR1cm4gbW9ycGg7CisgIH07CisKKyAgSFRNTEJh
cnNNb3JwaC5jcmVhdGUgPSBmdW5jdGlvbiAoZG9tSGVscGVyLCBjb250ZXh0dWFsRWxlbWVudCwg
bm9kZSkgeworICAgIHZhciBtb3JwaCA9IG5ldyBIVE1MQmFyc01vcnBoKGRvbUhlbHBlciwgY29u
dGV4dHVhbEVsZW1lbnQpOworICAgIG1vcnBoLnNldE5vZGUobm9kZSk7CisgICAgcmV0dXJuIG1v
cnBoOworICB9OworCisgIEhUTUxCYXJzTW9ycGguYXR0YWNoID0gZnVuY3Rpb24gKGRvbUhlbHBl
ciwgY29udGV4dHVhbEVsZW1lbnQsIGZpcnN0Tm9kZSwgbGFzdE5vZGUpIHsKKyAgICB2YXIgbW9y
cGggPSBuZXcgSFRNTEJhcnNNb3JwaChkb21IZWxwZXIsIGNvbnRleHR1YWxFbGVtZW50KTsKKyAg
ICBtb3JwaC5zZXRSYW5nZShmaXJzdE5vZGUsIGxhc3ROb2RlKTsKKyAgICByZXR1cm4gbW9ycGg7
CisgIH07CisKKyAgdmFyIHByb3RvdHlwZSA9IEhUTUxCYXJzTW9ycGgucHJvdG90eXBlID0gT2Jq
ZWN0LmNyZWF0ZShfbW9ycGhSYW5nZS5kZWZhdWx0LnByb3RvdHlwZSk7CisgIHByb3RvdHlwZS5j
b25zdHJ1Y3RvciA9IEhUTUxCYXJzTW9ycGg7CisgIHByb3RvdHlwZS5zdXBlciRjb25zdHJ1Y3Rv
ciA9IF9tb3JwaFJhbmdlLmRlZmF1bHQ7CisKKyAgcHJvdG90eXBlLmdldFN0YXRlID0gZnVuY3Rp
b24gKCkgeworICAgIGlmICghdGhpcy5fc3RhdGUpIHsKKyAgICAgIHRoaXMuX3N0YXRlID0ge307
CisgICAgfQorCisgICAgcmV0dXJuIHRoaXMuX3N0YXRlOworICB9OworCisgIHByb3RvdHlwZS5z
ZXRTdGF0ZSA9IGZ1bmN0aW9uIChuZXdTdGF0ZSkgeworICAgIC8qanNoaW50IC1XMDkzICovCisK
KyAgICByZXR1cm4gdGhpcy5fc3RhdGUgPSBuZXdTdGF0ZTsKKyAgfTsKKworICBleHBvcnRzLmRl
ZmF1bHQgPSBIVE1MQmFyc01vcnBoOworfSk7CitlbmlmZWQoImh0bWxiYXJzLXJ1bnRpbWUvbm9k
ZS12aXNpdG9yIiwgWyJleHBvcnRzIiwgImh0bWxiYXJzLXV0aWwvbW9ycGgtdXRpbHMiLCAiaHRt
bGJhcnMtcnVudGltZS9leHByZXNzaW9uLXZpc2l0b3IiXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9o
dG1sYmFyc1V0aWxNb3JwaFV0aWxzLCBfaHRtbGJhcnNSdW50aW1lRXhwcmVzc2lvblZpc2l0b3Ip
IHsKKyAgInVzZSBzdHJpY3QiOworCisgIC8qKgorICAgIE5vZGUgY2xhc3NpZmljYXRpb246Cisg
IAorICAgICMgUHJpbWFyeSBTdGF0ZW1lbnQgTm9kZXM6CisgIAorICAgIFRoZXNlIG5vZGVzIGFy
ZSByZXNwb25zaWJsZSBmb3IgYSByZW5kZXIgbm9kZSB0aGF0IHJlcHJlc2VudHMgYSBtb3JwaC1y
YW5nZS4KKyAgCisgICAgKiBibG9jaworICAgICogaW5saW5lCisgICAgKiBjb250ZW50CisgICAg
KiBlbGVtZW50CisgICAgKiBjb21wb25lbnQKKyAgCisgICAgIyBMZWFmIFN0YXRlbWVudCBOb2Rl
czoKKyAgCisgICAgVGhpcyBub2RlIGlzIHJlc3BvbnNpYmxlIGZvciBhIHJlbmRlciBub2RlIHRo
YXQgcmVwcmVzZW50cyBhIG1vcnBoLWF0dHIuCisgIAorICAgICogYXR0cmlidXRlCisgICovCisK
KyAgZnVuY3Rpb24gbGlua1BhcmFtc0FuZEhhc2goZW52LCBzY29wZSwgbW9ycGgsIHBhdGgsIHBh
cmFtcywgaGFzaCkgeworICAgIGlmIChtb3JwaC5saW5rZWRQYXJhbXMpIHsKKyAgICAgIHBhcmFt
cyA9IG1vcnBoLmxpbmtlZFBhcmFtcy5wYXJhbXM7CisgICAgICBoYXNoID0gbW9ycGgubGlua2Vk
UGFyYW1zLmhhc2g7CisgICAgfSBlbHNlIHsKKyAgICAgIHBhcmFtcyA9IHBhcmFtcyAmJiBfaHRt
bGJhcnNSdW50aW1lRXhwcmVzc2lvblZpc2l0b3IuYWNjZXB0UGFyYW1zKHBhcmFtcywgZW52LCBz
Y29wZSk7CisgICAgICBoYXNoID0gaGFzaCAmJiBfaHRtbGJhcnNSdW50aW1lRXhwcmVzc2lvblZp
c2l0b3IuYWNjZXB0SGFzaChoYXNoLCBlbnYsIHNjb3BlKTsKKyAgICB9CisKKyAgICBfaHRtbGJh
cnNVdGlsTW9ycGhVdGlscy5saW5rUGFyYW1zKGVudiwgc2NvcGUsIG1vcnBoLCBwYXRoLCBwYXJh
bXMsIGhhc2gpOworICAgIHJldHVybiBbcGFyYW1zLCBoYXNoXTsKKyAgfQorCisgIHZhciBBbHdh
eXNEaXJ0eVZpc2l0b3IgPSB7CisKKyAgICBibG9jazogZnVuY3Rpb24gKG5vZGUsIG1vcnBoLCBl
bnYsIHNjb3BlLCB0ZW1wbGF0ZSwgdmlzaXRvcikgeworICAgICAgdmFyIHBhdGggPSBub2RlWzFd
OworICAgICAgdmFyIHBhcmFtcyA9IG5vZGVbMl07CisgICAgICB2YXIgaGFzaCA9IG5vZGVbM107
CisgICAgICB2YXIgdGVtcGxhdGVJZCA9IG5vZGVbNF07CisgICAgICB2YXIgaW52ZXJzZUlkID0g
bm9kZVs1XTsKKworICAgICAgdmFyIHBhcmFtc0FuZEhhc2ggPSBsaW5rUGFyYW1zQW5kSGFzaChl
bnYsIHNjb3BlLCBtb3JwaCwgcGF0aCwgcGFyYW1zLCBoYXNoKTsKKworICAgICAgbW9ycGguaXNE
aXJ0eSA9IG1vcnBoLmlzU3VidHJlZURpcnR5ID0gZmFsc2U7CisgICAgICBlbnYuaG9va3MuYmxv
Y2sobW9ycGgsIGVudiwgc2NvcGUsIHBhdGgsIHBhcmFtc0FuZEhhc2hbMF0sIHBhcmFtc0FuZEhh
c2hbMV0sIHRlbXBsYXRlSWQgPT09IG51bGwgPyBudWxsIDogdGVtcGxhdGUudGVtcGxhdGVzW3Rl
bXBsYXRlSWRdLCBpbnZlcnNlSWQgPT09IG51bGwgPyBudWxsIDogdGVtcGxhdGUudGVtcGxhdGVz
W2ludmVyc2VJZF0sIHZpc2l0b3IpOworICAgIH0sCisKKyAgICBpbmxpbmU6IGZ1bmN0aW9uIChu
b2RlLCBtb3JwaCwgZW52LCBzY29wZSwgdmlzaXRvcikgeworICAgICAgdmFyIHBhdGggPSBub2Rl
WzFdOworICAgICAgdmFyIHBhcmFtcyA9IG5vZGVbMl07CisgICAgICB2YXIgaGFzaCA9IG5vZGVb
M107CisKKyAgICAgIHZhciBwYXJhbXNBbmRIYXNoID0gbGlua1BhcmFtc0FuZEhhc2goZW52LCBz
Y29wZSwgbW9ycGgsIHBhdGgsIHBhcmFtcywgaGFzaCk7CisKKyAgICAgIG1vcnBoLmlzRGlydHkg
PSBtb3JwaC5pc1N1YnRyZWVEaXJ0eSA9IGZhbHNlOworICAgICAgZW52Lmhvb2tzLmlubGluZSht
b3JwaCwgZW52LCBzY29wZSwgcGF0aCwgcGFyYW1zQW5kSGFzaFswXSwgcGFyYW1zQW5kSGFzaFsx
XSwgdmlzaXRvcik7CisgICAgfSwKKworICAgIGNvbnRlbnQ6IGZ1bmN0aW9uIChub2RlLCBtb3Jw
aCwgZW52LCBzY29wZSwgdmlzaXRvcikgeworICAgICAgdmFyIHBhdGggPSBub2RlWzFdOworCisg
ICAgICBtb3JwaC5pc0RpcnR5ID0gbW9ycGguaXNTdWJ0cmVlRGlydHkgPSBmYWxzZTsKKworICAg
ICAgaWYgKGlzSGVscGVyKGVudiwgc2NvcGUsIHBhdGgpKSB7CisgICAgICAgIGVudi5ob29rcy5p
bmxpbmUobW9ycGgsIGVudiwgc2NvcGUsIHBhdGgsIFtdLCB7fSwgdmlzaXRvcik7CisgICAgICAg
IGlmIChtb3JwaC5saW5rZWRSZXN1bHQpIHsKKyAgICAgICAgICBfaHRtbGJhcnNVdGlsTW9ycGhV
dGlscy5saW5rUGFyYW1zKGVudiwgc2NvcGUsIG1vcnBoLCAnQGNvbnRlbnQtaGVscGVyJywgW21v
cnBoLmxpbmtlZFJlc3VsdF0sIG51bGwpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAg
ICAgIH0KKworICAgICAgdmFyIHBhcmFtcyA9IHVuZGVmaW5lZDsKKyAgICAgIGlmIChtb3JwaC5s
aW5rZWRQYXJhbXMpIHsKKyAgICAgICAgcGFyYW1zID0gbW9ycGgubGlua2VkUGFyYW1zLnBhcmFt
czsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHBhcmFtcyA9IFtlbnYuaG9va3MuZ2V0KGVudiwg
c2NvcGUsIHBhdGgpXTsKKyAgICAgIH0KKworICAgICAgX2h0bWxiYXJzVXRpbE1vcnBoVXRpbHMu
bGlua1BhcmFtcyhlbnYsIHNjb3BlLCBtb3JwaCwgJ0ByYW5nZScsIHBhcmFtcywgbnVsbCk7Cisg
ICAgICBlbnYuaG9va3MucmFuZ2UobW9ycGgsIGVudiwgc2NvcGUsIHBhdGgsIHBhcmFtc1swXSwg
dmlzaXRvcik7CisgICAgfSwKKworICAgIGVsZW1lbnQ6IGZ1bmN0aW9uIChub2RlLCBtb3JwaCwg
ZW52LCBzY29wZSwgdmlzaXRvcikgeworICAgICAgdmFyIHBhdGggPSBub2RlWzFdOworICAgICAg
dmFyIHBhcmFtcyA9IG5vZGVbMl07CisgICAgICB2YXIgaGFzaCA9IG5vZGVbM107CisKKyAgICAg
IHZhciBwYXJhbXNBbmRIYXNoID0gbGlua1BhcmFtc0FuZEhhc2goZW52LCBzY29wZSwgbW9ycGgs
IHBhdGgsIHBhcmFtcywgaGFzaCk7CisKKyAgICAgIG1vcnBoLmlzRGlydHkgPSBtb3JwaC5pc1N1
YnRyZWVEaXJ0eSA9IGZhbHNlOworICAgICAgZW52Lmhvb2tzLmVsZW1lbnQobW9ycGgsIGVudiwg
c2NvcGUsIHBhdGgsIHBhcmFtc0FuZEhhc2hbMF0sIHBhcmFtc0FuZEhhc2hbMV0sIHZpc2l0b3Ip
OworICAgIH0sCisKKyAgICBhdHRyaWJ1dGU6IGZ1bmN0aW9uIChub2RlLCBtb3JwaCwgZW52LCBz
Y29wZSkgeworICAgICAgdmFyIG5hbWUgPSBub2RlWzFdOworICAgICAgdmFyIHZhbHVlID0gbm9k
ZVsyXTsKKworICAgICAgdmFyIHBhcmFtc0FuZEhhc2ggPSBsaW5rUGFyYW1zQW5kSGFzaChlbnYs
IHNjb3BlLCBtb3JwaCwgJ0BhdHRyaWJ1dGUnLCBbdmFsdWVdLCBudWxsKTsKKworICAgICAgbW9y
cGguaXNEaXJ0eSA9IG1vcnBoLmlzU3VidHJlZURpcnR5ID0gZmFsc2U7CisgICAgICBlbnYuaG9v
a3MuYXR0cmlidXRlKG1vcnBoLCBlbnYsIHNjb3BlLCBuYW1lLCBwYXJhbXNBbmRIYXNoWzBdWzBd
KTsKKyAgICB9LAorCisgICAgY29tcG9uZW50OiBmdW5jdGlvbiAobm9kZSwgbW9ycGgsIGVudiwg
c2NvcGUsIHRlbXBsYXRlLCB2aXNpdG9yKSB7CisgICAgICB2YXIgcGF0aCA9IG5vZGVbMV07Cisg
ICAgICB2YXIgYXR0cnMgPSBub2RlWzJdOworICAgICAgdmFyIHRlbXBsYXRlSWQgPSBub2RlWzNd
OworICAgICAgdmFyIGludmVyc2VJZCA9IG5vZGVbNF07CisKKyAgICAgIHZhciBwYXJhbXNBbmRI
YXNoID0gbGlua1BhcmFtc0FuZEhhc2goZW52LCBzY29wZSwgbW9ycGgsIHBhdGgsIFtdLCBhdHRy
cyk7CisgICAgICB2YXIgdGVtcGxhdGVzID0geworICAgICAgICBkZWZhdWx0OiB0ZW1wbGF0ZS50
ZW1wbGF0ZXNbdGVtcGxhdGVJZF0sCisgICAgICAgIGludmVyc2U6IHRlbXBsYXRlLnRlbXBsYXRl
c1tpbnZlcnNlSWRdCisgICAgICB9OworCisgICAgICBtb3JwaC5pc0RpcnR5ID0gbW9ycGguaXNT
dWJ0cmVlRGlydHkgPSBmYWxzZTsKKyAgICAgIGVudi5ob29rcy5jb21wb25lbnQobW9ycGgsIGVu
diwgc2NvcGUsIHBhdGgsIHBhcmFtc0FuZEhhc2hbMF0sIHBhcmFtc0FuZEhhc2hbMV0sIHRlbXBs
YXRlcywgdmlzaXRvcik7CisgICAgfSwKKworICAgIGF0dHJpYnV0ZXM6IGZ1bmN0aW9uIChub2Rl
LCBtb3JwaCwgZW52LCBzY29wZSwgcGFyZW50TW9ycGgsIHZpc2l0b3IpIHsKKyAgICAgIHZhciB0
ZW1wbGF0ZSA9IG5vZGVbMV07CisKKyAgICAgIGVudi5ob29rcy5hdHRyaWJ1dGVzKG1vcnBoLCBl
bnYsIHNjb3BlLCB0ZW1wbGF0ZSwgcGFyZW50TW9ycGgsIHZpc2l0b3IpOworICAgIH0KKworICB9
OworCisgIGV4cG9ydHMuQWx3YXlzRGlydHlWaXNpdG9yID0gQWx3YXlzRGlydHlWaXNpdG9yOwor
ICBleHBvcnRzLmRlZmF1bHQgPSB7CisgICAgYmxvY2s6IGZ1bmN0aW9uIChub2RlLCBtb3JwaCwg
ZW52LCBzY29wZSwgdGVtcGxhdGUsIHZpc2l0b3IpIHsKKyAgICAgIGRpcnR5Q2hlY2soZW52LCBt
b3JwaCwgdmlzaXRvciwgZnVuY3Rpb24gKHZpc2l0b3IpIHsKKyAgICAgICAgQWx3YXlzRGlydHlW
aXNpdG9yLmJsb2NrKG5vZGUsIG1vcnBoLCBlbnYsIHNjb3BlLCB0ZW1wbGF0ZSwgdmlzaXRvcik7
CisgICAgICB9KTsKKyAgICB9LAorCisgICAgaW5saW5lOiBmdW5jdGlvbiAobm9kZSwgbW9ycGgs
IGVudiwgc2NvcGUsIHZpc2l0b3IpIHsKKyAgICAgIGRpcnR5Q2hlY2soZW52LCBtb3JwaCwgdmlz
aXRvciwgZnVuY3Rpb24gKHZpc2l0b3IpIHsKKyAgICAgICAgQWx3YXlzRGlydHlWaXNpdG9yLmlu
bGluZShub2RlLCBtb3JwaCwgZW52LCBzY29wZSwgdmlzaXRvcik7CisgICAgICB9KTsKKyAgICB9
LAorCisgICAgY29udGVudDogZnVuY3Rpb24gKG5vZGUsIG1vcnBoLCBlbnYsIHNjb3BlLCB2aXNp
dG9yKSB7CisgICAgICBkaXJ0eUNoZWNrKGVudiwgbW9ycGgsIHZpc2l0b3IsIGZ1bmN0aW9uICh2
aXNpdG9yKSB7CisgICAgICAgIEFsd2F5c0RpcnR5VmlzaXRvci5jb250ZW50KG5vZGUsIG1vcnBo
LCBlbnYsIHNjb3BlLCB2aXNpdG9yKTsKKyAgICAgIH0pOworICAgIH0sCisKKyAgICBlbGVtZW50
OiBmdW5jdGlvbiAobm9kZSwgbW9ycGgsIGVudiwgc2NvcGUsIHRlbXBsYXRlLCB2aXNpdG9yKSB7
CisgICAgICBkaXJ0eUNoZWNrKGVudiwgbW9ycGgsIHZpc2l0b3IsIGZ1bmN0aW9uICh2aXNpdG9y
KSB7CisgICAgICAgIEFsd2F5c0RpcnR5VmlzaXRvci5lbGVtZW50KG5vZGUsIG1vcnBoLCBlbnYs
IHNjb3BlLCB0ZW1wbGF0ZSwgdmlzaXRvcik7CisgICAgICB9KTsKKyAgICB9LAorCisgICAgYXR0
cmlidXRlOiBmdW5jdGlvbiAobm9kZSwgbW9ycGgsIGVudiwgc2NvcGUsIHRlbXBsYXRlKSB7Cisg
ICAgICBkaXJ0eUNoZWNrKGVudiwgbW9ycGgsIG51bGwsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
QWx3YXlzRGlydHlWaXNpdG9yLmF0dHJpYnV0ZShub2RlLCBtb3JwaCwgZW52LCBzY29wZSwgdGVt
cGxhdGUpOworICAgICAgfSk7CisgICAgfSwKKworICAgIGNvbXBvbmVudDogZnVuY3Rpb24gKG5v
ZGUsIG1vcnBoLCBlbnYsIHNjb3BlLCB0ZW1wbGF0ZSwgdmlzaXRvcikgeworICAgICAgZGlydHlD
aGVjayhlbnYsIG1vcnBoLCB2aXNpdG9yLCBmdW5jdGlvbiAodmlzaXRvcikgeworICAgICAgICBB
bHdheXNEaXJ0eVZpc2l0b3IuY29tcG9uZW50KG5vZGUsIG1vcnBoLCBlbnYsIHNjb3BlLCB0ZW1w
bGF0ZSwgdmlzaXRvcik7CisgICAgICB9KTsKKyAgICB9LAorCisgICAgYXR0cmlidXRlczogZnVu
Y3Rpb24gKG5vZGUsIG1vcnBoLCBlbnYsIHNjb3BlLCBwYXJlbnRNb3JwaCwgdmlzaXRvcikgewor
ICAgICAgQWx3YXlzRGlydHlWaXNpdG9yLmF0dHJpYnV0ZXMobm9kZSwgbW9ycGgsIGVudiwgc2Nv
cGUsIHBhcmVudE1vcnBoLCB2aXNpdG9yKTsKKyAgICB9CisgIH07CisKKyAgZnVuY3Rpb24gZGly
dHlDaGVjayhfZW52LCBtb3JwaCwgdmlzaXRvciwgY2FsbGJhY2spIHsKKyAgICB2YXIgaXNEaXJ0
eSA9IG1vcnBoLmlzRGlydHk7CisgICAgdmFyIGlzU3VidHJlZURpcnR5ID0gbW9ycGguaXNTdWJ0
cmVlRGlydHk7CisgICAgdmFyIGVudiA9IF9lbnY7CisKKyAgICBpZiAoaXNTdWJ0cmVlRGlydHkp
IHsKKyAgICAgIHZpc2l0b3IgPSBBbHdheXNEaXJ0eVZpc2l0b3I7CisgICAgfQorCisgICAgaWYg
KGlzRGlydHkgfHwgaXNTdWJ0cmVlRGlydHkpIHsKKyAgICAgIGNhbGxiYWNrKHZpc2l0b3IpOwor
ICAgIH0gZWxzZSB7CisgICAgICBpZiAobW9ycGguYnVpbGRDaGlsZEVudikgeworICAgICAgICBl
bnYgPSBtb3JwaC5idWlsZENoaWxkRW52KG1vcnBoLmdldFN0YXRlKCksIGVudik7CisgICAgICB9
CisgICAgICBfaHRtbGJhcnNVdGlsTW9ycGhVdGlscy52YWxpZGF0ZUNoaWxkTW9ycGhzKGVudiwg
bW9ycGgsIHZpc2l0b3IpOworICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIGlzSGVscGVyKGVudiwg
c2NvcGUsIHBhdGgpIHsKKyAgICByZXR1cm4gZW52Lmhvb2tzLmtleXdvcmRzW3BhdGhdICE9PSB1
bmRlZmluZWQgfHwgZW52Lmhvb2tzLmhhc0hlbHBlcihlbnYsIHNjb3BlLCBwYXRoKTsKKyAgfQor
fSk7CitlbmlmZWQoImh0bWxiYXJzLXJ1bnRpbWUvcmVuZGVyIiwgWyJleHBvcnRzIiwgImh0bWxi
YXJzLXV0aWwvbW9ycGgtdXRpbHMiLCAiaHRtbGJhcnMtcnVudGltZS9ub2RlLXZpc2l0b3IiLCAi
aHRtbGJhcnMtcnVudGltZS9tb3JwaCIsICJodG1sYmFycy11dGlsL3RlbXBsYXRlLXV0aWxzIiwg
Imh0bWxiYXJzLXV0aWwvdm9pZC10YWctbmFtZXMiXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9odG1s
YmFyc1V0aWxNb3JwaFV0aWxzLCBfaHRtbGJhcnNSdW50aW1lTm9kZVZpc2l0b3IsIF9odG1sYmFy
c1J1bnRpbWVNb3JwaCwgX2h0bWxiYXJzVXRpbFRlbXBsYXRlVXRpbHMsIF9odG1sYmFyc1V0aWxW
b2lkVGFnTmFtZXMpIHsKKyAgInVzZSBzdHJpY3QiOworCisgIGV4cG9ydHMuZGVmYXVsdCA9IHJl
bmRlcjsKKyAgZXhwb3J0cy5SZW5kZXJPcHRpb25zID0gUmVuZGVyT3B0aW9uczsKKyAgZXhwb3J0
cy5tYW51YWxFbGVtZW50ID0gbWFudWFsRWxlbWVudDsKKyAgZXhwb3J0cy5hdHRhY2hBdHRyaWJ1
dGVzID0gYXR0YWNoQXR0cmlidXRlczsKKyAgZXhwb3J0cy5jcmVhdGVDaGlsZE1vcnBoID0gY3Jl
YXRlQ2hpbGRNb3JwaDsKKyAgZXhwb3J0cy5nZXRDYWNoZWRGcmFnbWVudCA9IGdldENhY2hlZEZy
YWdtZW50OworCisgIHZhciBzdmdOYW1lc3BhY2UgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMC9z
dmciOworCisgIGZ1bmN0aW9uIHJlbmRlcih0ZW1wbGF0ZSwgZW52LCBzY29wZSwgb3B0aW9ucykg
eworICAgIHZhciBkb20gPSBlbnYuZG9tOworICAgIHZhciBjb250ZXh0dWFsRWxlbWVudDsKKwor
ICAgIGlmIChvcHRpb25zKSB7CisgICAgICBpZiAob3B0aW9ucy5yZW5kZXJOb2RlKSB7CisgICAg
ICAgIGNvbnRleHR1YWxFbGVtZW50ID0gb3B0aW9ucy5yZW5kZXJOb2RlLmNvbnRleHR1YWxFbGVt
ZW50OworICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmNvbnRleHR1YWxFbGVtZW50KSB7CisgICAg
ICAgIGNvbnRleHR1YWxFbGVtZW50ID0gb3B0aW9ucy5jb250ZXh0dWFsRWxlbWVudDsKKyAgICAg
IH0KKyAgICB9CisKKyAgICBkb20uZGV0ZWN0TmFtZXNwYWNlKGNvbnRleHR1YWxFbGVtZW50KTsK
KworICAgIHZhciByZW5kZXJSZXN1bHQgPSBSZW5kZXJSZXN1bHQuYnVpbGQoZW52LCBzY29wZSwg
dGVtcGxhdGUsIG9wdGlvbnMsIGNvbnRleHR1YWxFbGVtZW50KTsKKyAgICByZW5kZXJSZXN1bHQu
cmVuZGVyKCk7CisKKyAgICByZXR1cm4gcmVuZGVyUmVzdWx0OworICB9CisKKyAgZnVuY3Rpb24g
UmVuZGVyT3B0aW9ucyhyZW5kZXJOb2RlLCBzZWxmLCBibG9ja0FyZ3VtZW50cywgY29udGV4dHVh
bEVsZW1lbnQpIHsKKyAgICB0aGlzLnJlbmRlck5vZGUgPSByZW5kZXJOb2RlIHx8IG51bGw7Cisg
ICAgdGhpcy5zZWxmID0gc2VsZjsKKyAgICB0aGlzLmJsb2NrQXJndW1lbnRzID0gYmxvY2tBcmd1
bWVudHMgfHwgbnVsbDsKKyAgICB0aGlzLmNvbnRleHR1YWxFbGVtZW50ID0gY29udGV4dHVhbEVs
ZW1lbnQgfHwgbnVsbDsKKyAgfQorCisgIGZ1bmN0aW9uIFJlbmRlclJlc3VsdChlbnYsIHNjb3Bl
LCBvcHRpb25zLCByb290Tm9kZSwgb3duZXJOb2RlLCBub2RlcywgZnJhZ21lbnQsIHRlbXBsYXRl
LCBzaG91bGRTZXRDb250ZW50KSB7CisgICAgdGhpcy5yb290ID0gcm9vdE5vZGU7CisgICAgdGhp
cy5mcmFnbWVudCA9IGZyYWdtZW50OworCisgICAgdGhpcy5ub2RlcyA9IG5vZGVzOworICAgIHRo
aXMudGVtcGxhdGUgPSB0ZW1wbGF0ZTsKKyAgICB0aGlzLnN0YXRlbWVudHMgPSB0ZW1wbGF0ZS5z
dGF0ZW1lbnRzLnNsaWNlKCk7CisgICAgdGhpcy5lbnYgPSBlbnY7CisgICAgdGhpcy5zY29wZSA9
IHNjb3BlOworICAgIHRoaXMuc2hvdWxkU2V0Q29udGVudCA9IHNob3VsZFNldENvbnRlbnQ7CisK
KyAgICBpZiAob3B0aW9ucy5zZWxmICE9PSB1bmRlZmluZWQpIHsKKyAgICAgIHRoaXMuYmluZFNl
bGYob3B0aW9ucy5zZWxmKTsKKyAgICB9CisgICAgaWYgKG9wdGlvbnMuYmxvY2tBcmd1bWVudHMg
IT09IHVuZGVmaW5lZCkgeworICAgICAgdGhpcy5iaW5kTG9jYWxzKG9wdGlvbnMuYmxvY2tBcmd1
bWVudHMpOworICAgIH0KKworICAgIHRoaXMuaW5pdGlhbGl6ZU5vZGVzKG93bmVyTm9kZSk7Cisg
IH0KKworICBSZW5kZXJSZXN1bHQuYnVpbGQgPSBmdW5jdGlvbiAoZW52LCBzY29wZSwgdGVtcGxh
dGUsIG9wdGlvbnMsIGNvbnRleHR1YWxFbGVtZW50KSB7CisgICAgdmFyIGRvbSA9IGVudi5kb207
CisgICAgdmFyIGZyYWdtZW50ID0gZ2V0Q2FjaGVkRnJhZ21lbnQodGVtcGxhdGUsIGVudik7Cisg
ICAgdmFyIG5vZGVzID0gdGVtcGxhdGUuYnVpbGRSZW5kZXJOb2Rlcyhkb20sIGZyYWdtZW50LCBj
b250ZXh0dWFsRWxlbWVudCk7CisKKyAgICB2YXIgcm9vdE5vZGUsIG93bmVyTm9kZSwgc2hvdWxk
U2V0Q29udGVudDsKKworICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMucmVuZGVyTm9kZSkgewor
ICAgICAgcm9vdE5vZGUgPSBvcHRpb25zLnJlbmRlck5vZGU7CisgICAgICBvd25lck5vZGUgPSBy
b290Tm9kZS5vd25lck5vZGU7CisgICAgICBzaG91bGRTZXRDb250ZW50ID0gdHJ1ZTsKKyAgICB9
IGVsc2UgeworICAgICAgcm9vdE5vZGUgPSBkb20uY3JlYXRlTW9ycGgobnVsbCwgZnJhZ21lbnQu
Zmlyc3RDaGlsZCwgZnJhZ21lbnQubGFzdENoaWxkLCBjb250ZXh0dWFsRWxlbWVudCk7CisgICAg
ICBvd25lck5vZGUgPSByb290Tm9kZTsKKyAgICAgIHJvb3ROb2RlLm93bmVyTm9kZSA9IG93bmVy
Tm9kZTsKKyAgICAgIHNob3VsZFNldENvbnRlbnQgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAo
cm9vdE5vZGUuY2hpbGROb2RlcykgeworICAgICAgX2h0bWxiYXJzVXRpbE1vcnBoVXRpbHMudmlz
aXRDaGlsZHJlbihyb290Tm9kZS5jaGlsZE5vZGVzLCBmdW5jdGlvbiAobm9kZSkgeworICAgICAg
ICBfaHRtbGJhcnNVdGlsVGVtcGxhdGVVdGlscy5jbGVhck1vcnBoKG5vZGUsIGVudiwgdHJ1ZSk7
CisgICAgICB9KTsKKyAgICB9CisKKyAgICByb290Tm9kZS5jaGlsZE5vZGVzID0gbm9kZXM7Cisg
ICAgcmV0dXJuIG5ldyBSZW5kZXJSZXN1bHQoZW52LCBzY29wZSwgb3B0aW9ucywgcm9vdE5vZGUs
IG93bmVyTm9kZSwgbm9kZXMsIGZyYWdtZW50LCB0ZW1wbGF0ZSwgc2hvdWxkU2V0Q29udGVudCk7
CisgIH07CisKKyAgZnVuY3Rpb24gbWFudWFsRWxlbWVudCh0YWdOYW1lLCBhdHRyaWJ1dGVzLCBf
aXNFbXB0eSkgeworICAgIHZhciBzdGF0ZW1lbnRzID0gW107CisKKyAgICBmb3IgKHZhciBrZXkg
aW4gYXR0cmlidXRlcykgeworICAgICAgaWYgKHR5cGVvZiBhdHRyaWJ1dGVzW2tleV0gPT09ICdz
dHJpbmcnKSB7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorICAgICAgc3RhdGVtZW50cy5w
dXNoKFsiYXR0cmlidXRlIiwga2V5LCBhdHRyaWJ1dGVzW2tleV1dKTsKKyAgICB9CisKKyAgICB2
YXIgaXNFbXB0eSA9IF9pc0VtcHR5IHx8IF9odG1sYmFyc1V0aWxWb2lkVGFnTmFtZXMuZGVmYXVs
dFt0YWdOYW1lXTsKKworICAgIGlmICghaXNFbXB0eSkgeworICAgICAgc3RhdGVtZW50cy5wdXNo
KFsnY29udGVudCcsICd5aWVsZCddKTsKKyAgICB9CisKKyAgICB2YXIgdGVtcGxhdGUgPSB7Cisg
ICAgICBhcml0eTogMCwKKyAgICAgIGNhY2hlZEZyYWdtZW50OiBudWxsLAorICAgICAgaGFzUmVu
ZGVyZWQ6IGZhbHNlLAorICAgICAgYnVpbGRGcmFnbWVudDogZnVuY3Rpb24gYnVpbGRGcmFnbWVu
dChkb20pIHsKKyAgICAgICAgdmFyIGVsMCA9IGRvbS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7
CisgICAgICAgIGlmICh0YWdOYW1lID09PSAnc3ZnJykgeworICAgICAgICAgIGRvbS5zZXROYW1l
c3BhY2Uoc3ZnTmFtZXNwYWNlKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgZWwxID0gZG9tLmNy
ZWF0ZUVsZW1lbnQodGFnTmFtZSk7CisKKyAgICAgICAgZm9yICh2YXIga2V5IGluIGF0dHJpYnV0
ZXMpIHsKKyAgICAgICAgICBpZiAodHlwZW9mIGF0dHJpYnV0ZXNba2V5XSAhPT0gJ3N0cmluZycp
IHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIH0KKyAgICAgICAgICBkb20uc2V0
QXR0cmlidXRlKGVsMSwga2V5LCBhdHRyaWJ1dGVzW2tleV0pOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKCFpc0VtcHR5KSB7CisgICAgICAgICAgdmFyIGVsMiA9IGRvbS5jcmVhdGVDb21tZW50
KCIiKTsKKyAgICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwxLCBlbDIpOworICAgICAgICB9CisK
KyAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVsMCwgZWwxKTsKKworICAgICAgICByZXR1cm4gZWww
OworICAgICAgfSwKKyAgICAgIGJ1aWxkUmVuZGVyTm9kZXM6IGZ1bmN0aW9uIGJ1aWxkUmVuZGVy
Tm9kZXMoZG9tLCBmcmFnbWVudCkgeworICAgICAgICB2YXIgZWxlbWVudCA9IGRvbS5jaGlsZEF0
KGZyYWdtZW50LCBbMF0pOworICAgICAgICB2YXIgbW9ycGhzID0gW107CisKKyAgICAgICAgZm9y
ICh2YXIga2V5IGluIGF0dHJpYnV0ZXMpIHsKKyAgICAgICAgICBpZiAodHlwZW9mIGF0dHJpYnV0
ZXNba2V5XSA9PT0gJ3N0cmluZycpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
IH0KKyAgICAgICAgICBtb3JwaHMucHVzaChkb20uY3JlYXRlQXR0ck1vcnBoKGVsZW1lbnQsIGtl
eSkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFpc0VtcHR5KSB7CisgICAgICAgICAgbW9y
cGhzLnB1c2goZG9tLmNyZWF0ZU1vcnBoQXQoZWxlbWVudCwgMCwgMCkpOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIG1vcnBoczsKKyAgICAgIH0sCisgICAgICBzdGF0ZW1lbnRzOiBzdGF0
ZW1lbnRzLAorICAgICAgbG9jYWxzOiBbXSwKKyAgICAgIHRlbXBsYXRlczogW10KKyAgICB9Owor
CisgICAgcmV0dXJuIHRlbXBsYXRlOworICB9CisKKyAgZnVuY3Rpb24gYXR0YWNoQXR0cmlidXRl
cyhhdHRyaWJ1dGVzKSB7CisgICAgdmFyIHN0YXRlbWVudHMgPSBbXTsKKworICAgIGZvciAodmFy
IGtleSBpbiBhdHRyaWJ1dGVzKSB7CisgICAgICBpZiAodHlwZW9mIGF0dHJpYnV0ZXNba2V5XSA9
PT0gJ3N0cmluZycpIHsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisgICAgICBzdGF0ZW1l
bnRzLnB1c2goWyJhdHRyaWJ1dGUiLCBrZXksIGF0dHJpYnV0ZXNba2V5XV0pOworICAgIH0KKwor
ICAgIHZhciB0ZW1wbGF0ZSA9IHsKKyAgICAgIGFyaXR5OiAwLAorICAgICAgY2FjaGVkRnJhZ21l
bnQ6IG51bGwsCisgICAgICBoYXNSZW5kZXJlZDogZmFsc2UsCisgICAgICBidWlsZEZyYWdtZW50
OiBmdW5jdGlvbiBidWlsZEZyYWdtZW50KGRvbSkgeworICAgICAgICB2YXIgZWwwID0gdGhpcy5l
bGVtZW50OworICAgICAgICBpZiAoZWwwLm5hbWVzcGFjZVVSSSA9PT0gImh0dHA6Ly93d3cudzMu
b3JnLzIwMDAvc3ZnIikgeworICAgICAgICAgIGRvbS5zZXROYW1lc3BhY2Uoc3ZnTmFtZXNwYWNl
KTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBrZXkgaW4gYXR0cmlidXRlcykgeworICAg
ICAgICAgIGlmICh0eXBlb2YgYXR0cmlidXRlc1trZXldICE9PSAnc3RyaW5nJykgeworICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgfQorICAgICAgICAgIGRvbS5zZXRBdHRyaWJ1dGUo
ZWwwLCBrZXksIGF0dHJpYnV0ZXNba2V5XSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
ZWwwOworICAgICAgfSwKKyAgICAgIGJ1aWxkUmVuZGVyTm9kZXM6IGZ1bmN0aW9uIGJ1aWxkUmVu
ZGVyTm9kZXMoZG9tKSB7CisgICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5lbGVtZW50OworICAg
ICAgICB2YXIgbW9ycGhzID0gW107CisKKyAgICAgICAgZm9yICh2YXIga2V5IGluIGF0dHJpYnV0
ZXMpIHsKKyAgICAgICAgICBpZiAodHlwZW9mIGF0dHJpYnV0ZXNba2V5XSA9PT0gJ3N0cmluZycp
IHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIH0KKyAgICAgICAgICBtb3JwaHMu
cHVzaChkb20uY3JlYXRlQXR0ck1vcnBoKGVsZW1lbnQsIGtleSkpOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIG1vcnBoczsKKyAgICAgIH0sCisgICAgICBzdGF0ZW1lbnRzOiBzdGF0ZW1l
bnRzLAorICAgICAgbG9jYWxzOiBbXSwKKyAgICAgIHRlbXBsYXRlczogW10sCisgICAgICBlbGVt
ZW50OiBudWxsCisgICAgfTsKKworICAgIHJldHVybiB0ZW1wbGF0ZTsKKyAgfQorCisgIFJlbmRl
clJlc3VsdC5wcm90b3R5cGUuaW5pdGlhbGl6ZU5vZGVzID0gZnVuY3Rpb24gKG93bmVyTm9kZSkg
eworICAgIHZhciBjaGlsZE5vZGVzID0gdGhpcy5yb290LmNoaWxkTm9kZXM7CisKKyAgICBmb3Ig
KHZhciBpID0gMCwgbCA9IGNoaWxkTm9kZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CisgICAgICBj
aGlsZE5vZGVzW2ldLm93bmVyTm9kZSA9IG93bmVyTm9kZTsKKyAgICB9CisgIH07CisKKyAgUmVu
ZGVyUmVzdWx0LnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7CisgICAgdGhpcy5yb290
Lmxhc3RSZXN1bHQgPSB0aGlzOworICAgIHRoaXMucm9vdC5yZW5kZXJlZCA9IHRydWU7CisgICAg
dGhpcy5wb3B1bGF0ZU5vZGVzKF9odG1sYmFyc1J1bnRpbWVOb2RlVmlzaXRvci5BbHdheXNEaXJ0
eVZpc2l0b3IpOworCisgICAgaWYgKHRoaXMuc2hvdWxkU2V0Q29udGVudCAmJiB0aGlzLnJvb3Qu
c2V0Q29udGVudCkgeworICAgICAgdGhpcy5yb290LnNldENvbnRlbnQodGhpcy5mcmFnbWVudCk7
CisgICAgfQorICB9OworCisgIFJlbmRlclJlc3VsdC5wcm90b3R5cGUuZGlydHkgPSBmdW5jdGlv
biAoKSB7CisgICAgX2h0bWxiYXJzVXRpbE1vcnBoVXRpbHMudmlzaXRDaGlsZHJlbihbdGhpcy5y
b290XSwgZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAgIG5vZGUuaXNEaXJ0eSA9IHRydWU7CisgICAg
fSk7CisgIH07CisKKyAgUmVuZGVyUmVzdWx0LnByb3RvdHlwZS5yZXZhbGlkYXRlID0gZnVuY3Rp
b24gKGVudiwgc2VsZiwgYmxvY2tBcmd1bWVudHMsIHNjb3BlKSB7CisgICAgdGhpcy5yZXZhbGlk
YXRlV2l0aChlbnYsIHNjb3BlLCBzZWxmLCBibG9ja0FyZ3VtZW50cywgX2h0bWxiYXJzUnVudGlt
ZU5vZGVWaXNpdG9yLmRlZmF1bHQpOworICB9OworCisgIFJlbmRlclJlc3VsdC5wcm90b3R5cGUu
cmVyZW5kZXIgPSBmdW5jdGlvbiAoZW52LCBzZWxmLCBibG9ja0FyZ3VtZW50cywgc2NvcGUpIHsK
KyAgICB0aGlzLnJldmFsaWRhdGVXaXRoKGVudiwgc2NvcGUsIHNlbGYsIGJsb2NrQXJndW1lbnRz
LCBfaHRtbGJhcnNSdW50aW1lTm9kZVZpc2l0b3IuQWx3YXlzRGlydHlWaXNpdG9yKTsKKyAgfTsK
KworICBSZW5kZXJSZXN1bHQucHJvdG90eXBlLnJldmFsaWRhdGVXaXRoID0gZnVuY3Rpb24gKGVu
diwgc2NvcGUsIHNlbGYsIGJsb2NrQXJndW1lbnRzLCB2aXNpdG9yKSB7CisgICAgaWYgKGVudiAh
PT0gdW5kZWZpbmVkKSB7CisgICAgICB0aGlzLmVudiA9IGVudjsKKyAgICB9CisgICAgaWYgKHNj
b3BlICE9PSB1bmRlZmluZWQpIHsKKyAgICAgIHRoaXMuc2NvcGUgPSBzY29wZTsKKyAgICB9Cisg
ICAgdGhpcy51cGRhdGVTY29wZSgpOworCisgICAgaWYgKHNlbGYgIT09IHVuZGVmaW5lZCkgewor
ICAgICAgdGhpcy51cGRhdGVTZWxmKHNlbGYpOworICAgIH0KKyAgICBpZiAoYmxvY2tBcmd1bWVu
dHMgIT09IHVuZGVmaW5lZCkgeworICAgICAgdGhpcy51cGRhdGVMb2NhbHMoYmxvY2tBcmd1bWVu
dHMpOworICAgIH0KKworICAgIHRoaXMucG9wdWxhdGVOb2Rlcyh2aXNpdG9yKTsKKyAgfTsKKwor
ICBSZW5kZXJSZXN1bHQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7CisgICAgdmFy
IHJvb3ROb2RlID0gdGhpcy5yb290OworICAgIF9odG1sYmFyc1V0aWxUZW1wbGF0ZVV0aWxzLmNs
ZWFyTW9ycGgocm9vdE5vZGUsIHRoaXMuZW52LCB0cnVlKTsKKyAgfTsKKworICBSZW5kZXJSZXN1
bHQucHJvdG90eXBlLnBvcHVsYXRlTm9kZXMgPSBmdW5jdGlvbiAodmlzaXRvcikgeworICAgIHZh
ciBlbnYgPSB0aGlzLmVudjsKKyAgICB2YXIgc2NvcGUgPSB0aGlzLnNjb3BlOworICAgIHZhciB0
ZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGU7CisgICAgdmFyIG5vZGVzID0gdGhpcy5ub2RlczsKKyAg
ICB2YXIgc3RhdGVtZW50cyA9IHRoaXMuc3RhdGVtZW50czsKKyAgICB2YXIgaSwgbDsKKworICAg
IGZvciAoaSA9IDAsIGwgPSBzdGF0ZW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykgeworICAgICAg
dmFyIHN0YXRlbWVudCA9IHN0YXRlbWVudHNbaV07CisgICAgICB2YXIgbW9ycGggPSBub2Rlc1tp
XTsKKworICAgICAgaWYgKGVudi5ob29rcy53aWxsUmVuZGVyTm9kZSkgeworICAgICAgICBlbnYu
aG9va3Mud2lsbFJlbmRlck5vZGUobW9ycGgsIGVudiwgc2NvcGUpOworICAgICAgfQorCisgICAg
ICBzd2l0Y2ggKHN0YXRlbWVudFswXSkgeworICAgICAgICBjYXNlICdibG9jayc6CisgICAgICAg
ICAgdmlzaXRvci5ibG9jayhzdGF0ZW1lbnQsIG1vcnBoLCBlbnYsIHNjb3BlLCB0ZW1wbGF0ZSwg
dmlzaXRvcik7YnJlYWs7CisgICAgICAgIGNhc2UgJ2lubGluZSc6CisgICAgICAgICAgdmlzaXRv
ci5pbmxpbmUoc3RhdGVtZW50LCBtb3JwaCwgZW52LCBzY29wZSwgdmlzaXRvcik7YnJlYWs7Cisg
ICAgICAgIGNhc2UgJ2NvbnRlbnQnOgorICAgICAgICAgIHZpc2l0b3IuY29udGVudChzdGF0ZW1l
bnQsIG1vcnBoLCBlbnYsIHNjb3BlLCB2aXNpdG9yKTticmVhazsKKyAgICAgICAgY2FzZSAnZWxl
bWVudCc6CisgICAgICAgICAgdmlzaXRvci5lbGVtZW50KHN0YXRlbWVudCwgbW9ycGgsIGVudiwg
c2NvcGUsIHRlbXBsYXRlLCB2aXNpdG9yKTticmVhazsKKyAgICAgICAgY2FzZSAnYXR0cmlidXRl
JzoKKyAgICAgICAgICB2aXNpdG9yLmF0dHJpYnV0ZShzdGF0ZW1lbnQsIG1vcnBoLCBlbnYsIHNj
b3BlKTticmVhazsKKyAgICAgICAgY2FzZSAnY29tcG9uZW50JzoKKyAgICAgICAgICB2aXNpdG9y
LmNvbXBvbmVudChzdGF0ZW1lbnQsIG1vcnBoLCBlbnYsIHNjb3BlLCB0ZW1wbGF0ZSwgdmlzaXRv
cik7YnJlYWs7CisgICAgICB9CisKKyAgICAgIGlmIChlbnYuaG9va3MuZGlkUmVuZGVyTm9kZSkg
eworICAgICAgICBlbnYuaG9va3MuZGlkUmVuZGVyTm9kZShtb3JwaCwgZW52LCBzY29wZSk7Cisg
ICAgICB9CisgICAgfQorICB9OworCisgIFJlbmRlclJlc3VsdC5wcm90b3R5cGUuYmluZFNjb3Bl
ID0gZnVuY3Rpb24gKCkgeworICAgIHRoaXMuZW52Lmhvb2tzLmJpbmRTY29wZSh0aGlzLmVudiwg
dGhpcy5zY29wZSk7CisgIH07CisKKyAgUmVuZGVyUmVzdWx0LnByb3RvdHlwZS51cGRhdGVTY29w
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICB0aGlzLmVudi5ob29rcy51cGRhdGVTY29wZSh0aGlzLmVu
diwgdGhpcy5zY29wZSk7CisgIH07CisKKyAgUmVuZGVyUmVzdWx0LnByb3RvdHlwZS5iaW5kU2Vs
ZiA9IGZ1bmN0aW9uIChzZWxmKSB7CisgICAgdGhpcy5lbnYuaG9va3MuYmluZFNlbGYodGhpcy5l
bnYsIHRoaXMuc2NvcGUsIHNlbGYpOworICB9OworCisgIFJlbmRlclJlc3VsdC5wcm90b3R5cGUu
dXBkYXRlU2VsZiA9IGZ1bmN0aW9uIChzZWxmKSB7CisgICAgdGhpcy5lbnYuaG9va3MudXBkYXRl
U2VsZih0aGlzLmVudiwgdGhpcy5zY29wZSwgc2VsZik7CisgIH07CisKKyAgUmVuZGVyUmVzdWx0
LnByb3RvdHlwZS5iaW5kTG9jYWxzID0gZnVuY3Rpb24gKGJsb2NrQXJndW1lbnRzKSB7CisgICAg
dmFyIGxvY2FsTmFtZXMgPSB0aGlzLnRlbXBsYXRlLmxvY2FsczsKKworICAgIGZvciAodmFyIGkg
PSAwLCBsID0gbG9jYWxOYW1lcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKKyAgICAgIHRoaXMuZW52
Lmhvb2tzLmJpbmRMb2NhbCh0aGlzLmVudiwgdGhpcy5zY29wZSwgbG9jYWxOYW1lc1tpXSwgYmxv
Y2tBcmd1bWVudHNbaV0pOworICAgIH0KKyAgfTsKKworICBSZW5kZXJSZXN1bHQucHJvdG90eXBl
LnVwZGF0ZUxvY2FscyA9IGZ1bmN0aW9uIChibG9ja0FyZ3VtZW50cykgeworICAgIHZhciBsb2Nh
bE5hbWVzID0gdGhpcy50ZW1wbGF0ZS5sb2NhbHM7CisKKyAgICBmb3IgKHZhciBpID0gMCwgbCA9
IGxvY2FsTmFtZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CisgICAgICB0aGlzLmVudi5ob29rcy51
cGRhdGVMb2NhbCh0aGlzLmVudiwgdGhpcy5zY29wZSwgbG9jYWxOYW1lc1tpXSwgYmxvY2tBcmd1
bWVudHNbaV0pOworICAgIH0KKyAgfTsKKworICBmdW5jdGlvbiBpbml0aWFsaXplTm9kZShub2Rl
LCBvd25lcikgeworICAgIG5vZGUub3duZXJOb2RlID0gb3duZXI7CisgIH0KKworICBmdW5jdGlv
biBjcmVhdGVDaGlsZE1vcnBoKGRvbSwgcGFyZW50TW9ycGgsIGNvbnRleHR1YWxFbGVtZW50KSB7
CisgICAgdmFyIG1vcnBoID0gX2h0bWxiYXJzUnVudGltZU1vcnBoLmRlZmF1bHQuZW1wdHkoZG9t
LCBjb250ZXh0dWFsRWxlbWVudCB8fCBwYXJlbnRNb3JwaC5jb250ZXh0dWFsRWxlbWVudCk7Cisg
ICAgaW5pdGlhbGl6ZU5vZGUobW9ycGgsIHBhcmVudE1vcnBoLm93bmVyTm9kZSk7CisgICAgcmV0
dXJuIG1vcnBoOworICB9CisKKyAgZnVuY3Rpb24gZ2V0Q2FjaGVkRnJhZ21lbnQodGVtcGxhdGUs
IGVudikgeworICAgIHZhciBkb20gPSBlbnYuZG9tLAorICAgICAgICBmcmFnbWVudDsKKyAgICBp
ZiAoZW52LnVzZUZyYWdtZW50Q2FjaGUgJiYgZG9tLmNhbkNsb25lKSB7CisgICAgICBpZiAodGVt
cGxhdGUuY2FjaGVkRnJhZ21lbnQgPT09IG51bGwpIHsKKyAgICAgICAgZnJhZ21lbnQgPSB0ZW1w
bGF0ZS5idWlsZEZyYWdtZW50KGRvbSk7CisgICAgICAgIGlmICh0ZW1wbGF0ZS5oYXNSZW5kZXJl
ZCkgeworICAgICAgICAgIHRlbXBsYXRlLmNhY2hlZEZyYWdtZW50ID0gZnJhZ21lbnQ7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgdGVtcGxhdGUuaGFzUmVuZGVyZWQgPSB0cnVlOworICAg
ICAgICB9CisgICAgICB9CisgICAgICBpZiAodGVtcGxhdGUuY2FjaGVkRnJhZ21lbnQpIHsKKyAg
ICAgICAgZnJhZ21lbnQgPSBkb20uY2xvbmVOb2RlKHRlbXBsYXRlLmNhY2hlZEZyYWdtZW50LCB0
cnVlKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCFmcmFnbWVudCkgeworICAgICAgZnJhZ21l
bnQgPSB0ZW1wbGF0ZS5idWlsZEZyYWdtZW50KGRvbSk7CisgICAgfQorCisgICAgcmV0dXJuIGZy
YWdtZW50OworICB9Cit9KTsKK2VuaWZlZCgnaHRtbGJhcnMtdXRpbCcsIFsnZXhwb3J0cycsICdo
dG1sYmFycy11dGlsL3NhZmUtc3RyaW5nJywgJ2h0bWxiYXJzLXV0aWwvaGFuZGxlYmFycy91dGls
cycsICdodG1sYmFycy11dGlsL25hbWVzcGFjZXMnLCAnaHRtbGJhcnMtdXRpbC9tb3JwaC11dGls
cyddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2h0bWxiYXJzVXRpbFNhZmVTdHJpbmcsIF9odG1sYmFy
c1V0aWxIYW5kbGViYXJzVXRpbHMsIF9odG1sYmFyc1V0aWxOYW1lc3BhY2VzLCBfaHRtbGJhcnNV
dGlsTW9ycGhVdGlscykgeworICAndXNlIHN0cmljdCc7CisKKyAgZXhwb3J0cy5TYWZlU3RyaW5n
ID0gX2h0bWxiYXJzVXRpbFNhZmVTdHJpbmcuZGVmYXVsdDsKKyAgZXhwb3J0cy5lc2NhcGVFeHBy
ZXNzaW9uID0gX2h0bWxiYXJzVXRpbEhhbmRsZWJhcnNVdGlscy5lc2NhcGVFeHByZXNzaW9uOwor
ICBleHBvcnRzLmdldEF0dHJOYW1lc3BhY2UgPSBfaHRtbGJhcnNVdGlsTmFtZXNwYWNlcy5nZXRB
dHRyTmFtZXNwYWNlOworICBleHBvcnRzLnZhbGlkYXRlQ2hpbGRNb3JwaHMgPSBfaHRtbGJhcnNV
dGlsTW9ycGhVdGlscy52YWxpZGF0ZUNoaWxkTW9ycGhzOworICBleHBvcnRzLmxpbmtQYXJhbXMg
PSBfaHRtbGJhcnNVdGlsTW9ycGhVdGlscy5saW5rUGFyYW1zOworICBleHBvcnRzLmR1bXAgPSBf
aHRtbGJhcnNVdGlsTW9ycGhVdGlscy5kdW1wOworfSk7CitlbmlmZWQoJ2h0bWxiYXJzLXV0aWwv
YXJyYXktdXRpbHMnLCBbJ2V4cG9ydHMnXSwgZnVuY3Rpb24gKGV4cG9ydHMpIHsKKyAgJ3VzZSBz
dHJpY3QnOworCisgIGV4cG9ydHMuZm9yRWFjaCA9IGZvckVhY2g7CisgIGV4cG9ydHMubWFwID0g
bWFwOworCisgIGZ1bmN0aW9uIGZvckVhY2goYXJyYXksIGNhbGxiYWNrLCBiaW5kaW5nKSB7Cisg
ICAgdmFyIGksIGw7CisgICAgaWYgKGJpbmRpbmcgPT09IHVuZGVmaW5lZCkgeworICAgICAgZm9y
IChpID0gMCwgbCA9IGFycmF5Lmxlbmd0aDsgaSA8IGw7IGkrKykgeworICAgICAgICBjYWxsYmFj
ayhhcnJheVtpXSwgaSwgYXJyYXkpOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBmb3Ig
KGkgPSAwLCBsID0gYXJyYXkubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CisgICAgICAgIGNhbGxiYWNr
LmNhbGwoYmluZGluZywgYXJyYXlbaV0sIGksIGFycmF5KTsKKyAgICAgIH0KKyAgICB9CisgIH0K
KworICBmdW5jdGlvbiBtYXAoYXJyYXksIGNhbGxiYWNrKSB7CisgICAgdmFyIG91dHB1dCA9IFtd
OworICAgIHZhciBpLCBsOworCisgICAgZm9yIChpID0gMCwgbCA9IGFycmF5Lmxlbmd0aDsgaSA8
IGw7IGkrKykgeworICAgICAgb3V0cHV0LnB1c2goY2FsbGJhY2soYXJyYXlbaV0sIGksIGFycmF5
KSk7CisgICAgfQorCisgICAgcmV0dXJuIG91dHB1dDsKKyAgfQorCisgIHZhciBnZXRJZHg7Cisg
IGlmIChBcnJheS5wcm90b3R5cGUuaW5kZXhPZikgeworICAgIGdldElkeCA9IGZ1bmN0aW9uIChh
cnJheSwgb2JqLCBmcm9tKSB7CisgICAgICByZXR1cm4gYXJyYXkuaW5kZXhPZihvYmosIGZyb20p
OworICAgIH07CisgIH0gZWxzZSB7CisgICAgZ2V0SWR4ID0gZnVuY3Rpb24gKGFycmF5LCBvYmos
IGZyb20pIHsKKyAgICAgIGlmIChmcm9tID09PSB1bmRlZmluZWQgfHwgZnJvbSA9PT0gbnVsbCkg
eworICAgICAgICBmcm9tID0gMDsKKyAgICAgIH0gZWxzZSBpZiAoZnJvbSA8IDApIHsKKyAgICAg
ICAgZnJvbSA9IE1hdGgubWF4KDAsIGFycmF5Lmxlbmd0aCArIGZyb20pOworICAgICAgfQorICAg
ICAgZm9yICh2YXIgaSA9IGZyb20sIGwgPSBhcnJheS5sZW5ndGg7IGkgPCBsOyBpKyspIHsKKyAg
ICAgICAgaWYgKGFycmF5W2ldID09PSBvYmopIHsKKyAgICAgICAgICByZXR1cm4gaTsKKyAgICAg
ICAgfQorICAgICAgfQorICAgICAgcmV0dXJuIC0xOworICAgIH07CisgIH0KKworICB2YXIgaXNB
cnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKGFycmF5KSB7CisgICAgcmV0dXJuIE9i
amVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcnJheSkgPT09ICdbb2JqZWN0IEFycmF5XSc7
CisgIH07CisKKyAgZXhwb3J0cy5pc0FycmF5ID0gaXNBcnJheTsKKyAgdmFyIGluZGV4T2ZBcnJh
eSA9IGdldElkeDsKKyAgZXhwb3J0cy5pbmRleE9mQXJyYXkgPSBpbmRleE9mQXJyYXk7Cit9KTsK
K2VuaWZlZCgnaHRtbGJhcnMtdXRpbC9oYW5kbGViYXJzL3NhZmUtc3RyaW5nJywgWydleHBvcnRz
J10sIGZ1bmN0aW9uIChleHBvcnRzKSB7CisgIC8vIEJ1aWxkIG91dCBvdXIgYmFzaWMgU2FmZVN0
cmluZyB0eXBlCisgICd1c2Ugc3RyaWN0JzsKKworICBmdW5jdGlvbiBTYWZlU3RyaW5nKHN0cmlu
ZykgeworICAgIHRoaXMuc3RyaW5nID0gc3RyaW5nOworICB9CisKKyAgU2FmZVN0cmluZy5wcm90
b3R5cGUudG9TdHJpbmcgPSBTYWZlU3RyaW5nLnByb3RvdHlwZS50b0hUTUwgPSBmdW5jdGlvbiAo
KSB7CisgICAgcmV0dXJuICcnICsgdGhpcy5zdHJpbmc7CisgIH07CisKKyAgZXhwb3J0cy5kZWZh
dWx0ID0gU2FmZVN0cmluZzsKK30pOworZW5pZmVkKCdodG1sYmFycy11dGlsL2hhbmRsZWJhcnMv
dXRpbHMnLCBbJ2V4cG9ydHMnXSwgZnVuY3Rpb24gKGV4cG9ydHMpIHsKKyAgJ3VzZSBzdHJpY3Qn
OworCisgIGV4cG9ydHMuZXh0ZW5kID0gZXh0ZW5kOworICBleHBvcnRzLmluZGV4T2YgPSBpbmRl
eE9mOworICBleHBvcnRzLmVzY2FwZUV4cHJlc3Npb24gPSBlc2NhcGVFeHByZXNzaW9uOworICBl
eHBvcnRzLmlzRW1wdHkgPSBpc0VtcHR5OworICBleHBvcnRzLmJsb2NrUGFyYW1zID0gYmxvY2tQ
YXJhbXM7CisgIGV4cG9ydHMuYXBwZW5kQ29udGV4dFBhdGggPSBhcHBlbmRDb250ZXh0UGF0aDsK
KyAgdmFyIGVzY2FwZSA9IHsKKyAgICAnJic6ICcmYW1wOycsCisgICAgJzwnOiAnJmx0OycsCisg
ICAgJz4nOiAnJmd0OycsCisgICAgJyInOiAnJnF1b3Q7JywKKyAgICAiJyI6ICcmI3gyNzsnLAor
ICAgICdgJzogJyYjeDYwOycKKyAgfTsKKworICB2YXIgYmFkQ2hhcnMgPSAvWyY8PiInYF0vZywK
KyAgICAgIHBvc3NpYmxlID0gL1smPD4iJ2BdLzsKKworICBmdW5jdGlvbiBlc2NhcGVDaGFyKGNo
cikgeworICAgIHJldHVybiBlc2NhcGVbY2hyXTsKKyAgfQorCisgIGZ1bmN0aW9uIGV4dGVuZChv
YmogLyogLCAuLi5zb3VyY2UgKi8pIHsKKyAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50
cy5sZW5ndGg7IGkrKykgeworICAgICAgZm9yICh2YXIga2V5IGluIGFyZ3VtZW50c1tpXSkgewor
ICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFyZ3VtZW50
c1tpXSwga2V5KSkgeworICAgICAgICAgIG9ialtrZXldID0gYXJndW1lbnRzW2ldW2tleV07Cisg
ICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gb2JqOworICB9CisKKyAgdmFy
IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzsKKworICBleHBvcnRzLnRvU3Ry
aW5nID0gdG9TdHJpbmc7CisgIC8vIFNvdXJjZWQgZnJvbSBsb2Rhc2gKKyAgLy8gaHR0cHM6Ly9n
aXRodWIuY29tL2Jlc3RpZWpzL2xvZGFzaC9ibG9iL21hc3Rlci9MSUNFTlNFLnR4dAorICAvKmVz
bGludC1kaXNhYmxlIGZ1bmMtc3R5bGUsIG5vLXZhciAqLworICB2YXIgaXNGdW5jdGlvbiA9IGZ1
bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7
CisgIH07CisgIC8vIGZhbGxiYWNrIGZvciBvbGRlciB2ZXJzaW9ucyBvZiBDaHJvbWUgYW5kIFNh
ZmFyaQorICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLworICBpZiAoaXNGdW5jdGlvbigveC8p
KSB7CisgICAgZXhwb3J0cy5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiA9IGZ1bmN0aW9uICh2YWx1
ZSkgeworICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0b1N0cmlu
Zy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJzsKKyAgICB9OworICB9CisgIHZh
ciBpc0Z1bmN0aW9uOworICBleHBvcnRzLmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uOworICAvKmVz
bGludC1lbmFibGUgZnVuYy1zdHlsZSwgbm8tdmFyICovCisKKyAgLyogaXN0YW5idWwgaWdub3Jl
IG5leHQgKi8KKyAgdmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uICh2YWx1
ZSkgeworICAgIHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnID8gdG9T
dHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEFycmF5XScgOiBmYWxzZTsKKyAgfTsKKwor
ICBleHBvcnRzLmlzQXJyYXkgPSBpc0FycmF5OworICAvLyBPbGRlciBJRSB2ZXJzaW9ucyBkbyBu
b3QgZGlyZWN0bHkgc3VwcG9ydCBpbmRleE9mIHNvIHdlIG11c3QgaW1wbGVtZW50IG91ciBvd24s
IHNhZGx5LgorCisgIGZ1bmN0aW9uIGluZGV4T2YoYXJyYXksIHZhbHVlKSB7CisgICAgZm9yICh2
YXIgaSA9IDAsIGxlbiA9IGFycmF5Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICBpZiAo
YXJyYXlbaV0gPT09IHZhbHVlKSB7CisgICAgICAgIHJldHVybiBpOworICAgICAgfQorICAgIH0K
KyAgICByZXR1cm4gLTE7CisgIH0KKworICBmdW5jdGlvbiBlc2NhcGVFeHByZXNzaW9uKHN0cmlu
ZykgeworICAgIGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykgeworICAgICAgLy8gZG9u
J3QgZXNjYXBlIFNhZmVTdHJpbmdzLCBzaW5jZSB0aGV5J3JlIGFscmVhZHkgc2FmZQorICAgICAg
aWYgKHN0cmluZyAmJiBzdHJpbmcudG9IVE1MKSB7CisgICAgICAgIHJldHVybiBzdHJpbmcudG9I
VE1MKCk7CisgICAgICB9IGVsc2UgaWYgKHN0cmluZyA9PSBudWxsKSB7CisgICAgICAgIHJldHVy
biAnJzsKKyAgICAgIH0gZWxzZSBpZiAoIXN0cmluZykgeworICAgICAgICByZXR1cm4gc3RyaW5n
ICsgJyc7CisgICAgICB9CisKKyAgICAgIC8vIEZvcmNlIGEgc3RyaW5nIGNvbnZlcnNpb24gYXMg
dGhpcyB3aWxsIGJlIGRvbmUgYnkgdGhlIGFwcGVuZCByZWdhcmRsZXNzIGFuZAorICAgICAgLy8g
dGhlIHJlZ2V4IHRlc3Qgd2lsbCBkbyB0aGlzIHRyYW5zcGFyZW50bHkgYmVoaW5kIHRoZSBzY2Vu
ZXMsIGNhdXNpbmcgaXNzdWVzIGlmCisgICAgICAvLyBhbiBvYmplY3QncyB0byBzdHJpbmcgaGFz
IGVzY2FwZWQgY2hhcmFjdGVycyBpbiBpdC4KKyAgICAgIHN0cmluZyA9ICcnICsgc3RyaW5nOwor
ICAgIH0KKworICAgIGlmICghcG9zc2libGUudGVzdChzdHJpbmcpKSB7CisgICAgICByZXR1cm4g
c3RyaW5nOworICAgIH0KKyAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoYmFkQ2hhcnMsIGVzY2Fw
ZUNoYXIpOworICB9CisKKyAgZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZSkgeworICAgIGlmICghdmFs
dWUgJiYgdmFsdWUgIT09IDApIHsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0gZWxzZSBpZiAo
aXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKSB7CisgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfQorCisgIGZ1
bmN0aW9uIGJsb2NrUGFyYW1zKHBhcmFtcywgaWRzKSB7CisgICAgcGFyYW1zLnBhdGggPSBpZHM7
CisgICAgcmV0dXJuIHBhcmFtczsKKyAgfQorCisgIGZ1bmN0aW9uIGFwcGVuZENvbnRleHRQYXRo
KGNvbnRleHRQYXRoLCBpZCkgeworICAgIHJldHVybiAoY29udGV4dFBhdGggPyBjb250ZXh0UGF0
aCArICcuJyA6ICcnKSArIGlkOworICB9Cit9KTsKK2VuaWZlZCgiaHRtbGJhcnMtdXRpbC9tb3Jw
aC11dGlscyIsIFsiZXhwb3J0cyJdLCBmdW5jdGlvbiAoZXhwb3J0cykgeworICAvKmdsb2JhbHMg
Y29uc29sZSovCisKKyAgInVzZSBzdHJpY3QiOworCisgIGV4cG9ydHMudmlzaXRDaGlsZHJlbiA9
IHZpc2l0Q2hpbGRyZW47CisgIGV4cG9ydHMudmFsaWRhdGVDaGlsZE1vcnBocyA9IHZhbGlkYXRl
Q2hpbGRNb3JwaHM7CisgIGV4cG9ydHMubGlua1BhcmFtcyA9IGxpbmtQYXJhbXM7CisgIGV4cG9y
dHMuZHVtcCA9IGR1bXA7CisKKyAgZnVuY3Rpb24gdmlzaXRDaGlsZHJlbihub2RlcywgY2FsbGJh
Y2spIHsKKyAgICBpZiAoIW5vZGVzIHx8IG5vZGVzLmxlbmd0aCA9PT0gMCkgeworICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIG5vZGVzID0gbm9kZXMuc2xpY2UoKTsKKworICAgIHdoaWxlIChu
b2Rlcy5sZW5ndGgpIHsKKyAgICAgIHZhciBub2RlID0gbm9kZXMucG9wKCk7CisgICAgICBjYWxs
YmFjayhub2RlKTsKKworICAgICAgaWYgKG5vZGUuY2hpbGROb2RlcykgeworICAgICAgICBub2Rl
cy5wdXNoLmFwcGx5KG5vZGVzLCBub2RlLmNoaWxkTm9kZXMpOworICAgICAgfSBlbHNlIGlmIChu
b2RlLmZpcnN0Q2hpbGRNb3JwaCkgeworICAgICAgICB2YXIgY3VycmVudCA9IG5vZGUuZmlyc3RD
aGlsZE1vcnBoOworCisgICAgICAgIHdoaWxlIChjdXJyZW50KSB7CisgICAgICAgICAgbm9kZXMu
cHVzaChjdXJyZW50KTsKKyAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0TW9ycGg7Cisg
ICAgICAgIH0KKyAgICAgIH0gZWxzZSBpZiAobm9kZS5tb3JwaExpc3QpIHsKKyAgICAgICAgdmFy
IGN1cnJlbnQgPSBub2RlLm1vcnBoTGlzdC5maXJzdENoaWxkTW9ycGg7CisKKyAgICAgICAgd2hp
bGUgKGN1cnJlbnQpIHsKKyAgICAgICAgICBub2Rlcy5wdXNoKGN1cnJlbnQpOworICAgICAgICAg
IGN1cnJlbnQgPSBjdXJyZW50Lm5leHRNb3JwaDsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0K
KyAgfQorCisgIGZ1bmN0aW9uIHZhbGlkYXRlQ2hpbGRNb3JwaHMoZW52LCBtb3JwaCwgdmlzaXRv
cikgeworICAgIHZhciBtb3JwaExpc3QgPSBtb3JwaC5tb3JwaExpc3Q7CisgICAgaWYgKG1vcnBo
Lm1vcnBoTGlzdCkgeworICAgICAgdmFyIGN1cnJlbnQgPSBtb3JwaExpc3QuZmlyc3RDaGlsZE1v
cnBoOworCisgICAgICB3aGlsZSAoY3VycmVudCkgeworICAgICAgICB2YXIgbmV4dCA9IGN1cnJl
bnQubmV4dE1vcnBoOworICAgICAgICB2YWxpZGF0ZUNoaWxkTW9ycGhzKGVudiwgY3VycmVudCwg
dmlzaXRvcik7CisgICAgICAgIGN1cnJlbnQgPSBuZXh0OworICAgICAgfQorICAgIH0gZWxzZSBp
ZiAobW9ycGgubGFzdFJlc3VsdCkgeworICAgICAgbW9ycGgubGFzdFJlc3VsdC5yZXZhbGlkYXRl
V2l0aChlbnYsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHZpc2l0b3IpOworICAg
IH0gZWxzZSBpZiAobW9ycGguY2hpbGROb2RlcykgeworICAgICAgLy8gVGhpcyBtZWFucyB0aGF0
IHRoZSBjaGlsZE5vZGVzIHdlcmUgd2lyZWQgdXAgbWFudWFsbHkKKyAgICAgIGZvciAodmFyIGkg
PSAwLCBsID0gbW9ycGguY2hpbGROb2Rlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKKyAgICAgICAg
dmFsaWRhdGVDaGlsZE1vcnBocyhlbnYsIG1vcnBoLmNoaWxkTm9kZXNbaV0sIHZpc2l0b3IpOwor
ICAgICAgfQorICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIGxpbmtQYXJhbXMoZW52LCBzY29wZSwg
bW9ycGgsIHBhdGgsIHBhcmFtcywgaGFzaCkgeworICAgIGlmIChtb3JwaC5saW5rZWRQYXJhbXMp
IHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZW52Lmhvb2tzLmxpbmtSZW5kZXJO
b2RlKG1vcnBoLCBlbnYsIHNjb3BlLCBwYXRoLCBwYXJhbXMsIGhhc2gpKSB7CisgICAgICBtb3Jw
aC5saW5rZWRQYXJhbXMgPSB7IHBhcmFtczogcGFyYW1zLCBoYXNoOiBoYXNoIH07CisgICAgfQor
ICB9CisKKyAgZnVuY3Rpb24gZHVtcChub2RlKSB7CisgICAgY29uc29sZS5ncm91cChub2RlLCBu
b2RlLmlzRGlydHkpOworCisgICAgaWYgKG5vZGUuY2hpbGROb2RlcykgeworICAgICAgbWFwKG5v
ZGUuY2hpbGROb2RlcywgZHVtcCk7CisgICAgfSBlbHNlIGlmIChub2RlLmZpcnN0Q2hpbGRNb3Jw
aCkgeworICAgICAgdmFyIGN1cnJlbnQgPSBub2RlLmZpcnN0Q2hpbGRNb3JwaDsKKworICAgICAg
d2hpbGUgKGN1cnJlbnQpIHsKKyAgICAgICAgZHVtcChjdXJyZW50KTsKKyAgICAgICAgY3VycmVu
dCA9IGN1cnJlbnQubmV4dE1vcnBoOworICAgICAgfQorICAgIH0gZWxzZSBpZiAobm9kZS5tb3Jw
aExpc3QpIHsKKyAgICAgIGR1bXAobm9kZS5tb3JwaExpc3QpOworICAgIH0KKworICAgIGNvbnNv
bGUuZ3JvdXBFbmQoKTsKKyAgfQorCisgIGZ1bmN0aW9uIG1hcChub2RlcywgY2IpIHsKKyAgICBm
b3IgKHZhciBpID0gMCwgbCA9IG5vZGVzLmxlbmd0aDsgaSA8IGw7IGkrKykgeworICAgICAgY2Io
bm9kZXNbaV0pOworICAgIH0KKyAgfQorfSk7CitlbmlmZWQoJ2h0bWxiYXJzLXV0aWwvbmFtZXNw
YWNlcycsIFsnZXhwb3J0cyddLCBmdW5jdGlvbiAoZXhwb3J0cykgeworICAvLyByZWYgaHR0cDov
L2Rldi53My5vcmcvaHRtbDUvc3BlYy1MQy9uYW1lc3BhY2VzLmh0bWwKKyAgJ3VzZSBzdHJpY3Qn
OworCisgIGV4cG9ydHMuZ2V0QXR0ck5hbWVzcGFjZSA9IGdldEF0dHJOYW1lc3BhY2U7CisgIHZh
ciBkZWZhdWx0TmFtZXNwYWNlcyA9IHsKKyAgICBodG1sOiAnaHR0cDovL3d3dy53My5vcmcvMTk5
OS94aHRtbCcsCisgICAgbWF0aG1sOiAnaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhN
TCcsCisgICAgc3ZnOiAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLAorICAgIHhsaW5rOiAn
aHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycsCisgICAgeG1sOiAnaHR0cDovL3d3dy53My5v
cmcvWE1MLzE5OTgvbmFtZXNwYWNlJworICB9OworCisgIGZ1bmN0aW9uIGdldEF0dHJOYW1lc3Bh
Y2UoYXR0ck5hbWUsIGRldGVjdGVkTmFtZXNwYWNlKSB7CisgICAgaWYgKGRldGVjdGVkTmFtZXNw
YWNlKSB7CisgICAgICByZXR1cm4gZGV0ZWN0ZWROYW1lc3BhY2U7CisgICAgfQorCisgICAgdmFy
IG5hbWVzcGFjZTsKKworICAgIHZhciBjb2xvbkluZGV4ID0gYXR0ck5hbWUuaW5kZXhPZignOicp
OworICAgIGlmIChjb2xvbkluZGV4ICE9PSAtMSkgeworICAgICAgdmFyIHByZWZpeCA9IGF0dHJO
YW1lLnNsaWNlKDAsIGNvbG9uSW5kZXgpOworICAgICAgbmFtZXNwYWNlID0gZGVmYXVsdE5hbWVz
cGFjZXNbcHJlZml4XTsKKyAgICB9CisKKyAgICByZXR1cm4gbmFtZXNwYWNlIHx8IG51bGw7Cisg
IH0KK30pOworZW5pZmVkKCJodG1sYmFycy11dGlsL29iamVjdC11dGlscyIsIFsiZXhwb3J0cyJd
LCBmdW5jdGlvbiAoZXhwb3J0cykgeworICAidXNlIHN0cmljdCI7CisKKyAgZXhwb3J0cy5tZXJn
ZSA9IG1lcmdlOworICBleHBvcnRzLnNoYWxsb3dDb3B5ID0gc2hhbGxvd0NvcHk7CisgIGV4cG9y
dHMua2V5U2V0ID0ga2V5U2V0OworICBleHBvcnRzLmtleUxlbmd0aCA9IGtleUxlbmd0aDsKKwor
ICBmdW5jdGlvbiBtZXJnZShvcHRpb25zLCBkZWZhdWx0cykgeworICAgIGZvciAodmFyIHByb3Ag
aW4gZGVmYXVsdHMpIHsKKyAgICAgIGlmIChvcHRpb25zLmhhc093blByb3BlcnR5KHByb3ApKSB7
CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorICAgICAgb3B0aW9uc1twcm9wXSA9IGRlZmF1
bHRzW3Byb3BdOworICAgIH0KKyAgICByZXR1cm4gb3B0aW9uczsKKyAgfQorCisgIGZ1bmN0aW9u
IHNoYWxsb3dDb3B5KG9iaikgeworICAgIHJldHVybiBtZXJnZSh7fSwgb2JqKTsKKyAgfQorCisg
IGZ1bmN0aW9uIGtleVNldChvYmopIHsKKyAgICB2YXIgc2V0ID0ge307CisKKyAgICBmb3IgKHZh
ciBwcm9wIGluIG9iaikgeworICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewor
ICAgICAgICBzZXRbcHJvcF0gPSB0cnVlOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBz
ZXQ7CisgIH0KKworICBmdW5jdGlvbiBrZXlMZW5ndGgob2JqKSB7CisgICAgdmFyIGNvdW50ID0g
MDsKKworICAgIGZvciAodmFyIHByb3AgaW4gb2JqKSB7CisgICAgICBpZiAob2JqLmhhc093blBy
b3BlcnR5KHByb3ApKSB7CisgICAgICAgIGNvdW50Kys7CisgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIGNvdW50OworICB9Cit9KTsKK2VuaWZlZCgiaHRtbGJhcnMtdXRpbC9xdW90aW5nIiwg
WyJleHBvcnRzIl0sIGZ1bmN0aW9uIChleHBvcnRzKSB7CisgICJ1c2Ugc3RyaWN0IjsKKworICBl
eHBvcnRzLmhhc2ggPSBoYXNoOworICBleHBvcnRzLnJlcGVhdCA9IHJlcGVhdDsKKyAgZnVuY3Rp
b24gZXNjYXBlU3RyaW5nKHN0cikgeworICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXC9nLCAiXFxc
XCIpOworICAgIHN0ciA9IHN0ci5yZXBsYWNlKC8iL2csICdcXCInKTsKKyAgICBzdHIgPSBzdHIu
cmVwbGFjZSgvXG4vZywgIlxcbiIpOworICAgIHJldHVybiBzdHI7CisgIH0KKworICBleHBvcnRz
LmVzY2FwZVN0cmluZyA9IGVzY2FwZVN0cmluZzsKKworICBmdW5jdGlvbiBzdHJpbmcoc3RyKSB7
CisgICAgcmV0dXJuICciJyArIGVzY2FwZVN0cmluZyhzdHIpICsgJyInOworICB9CisKKyAgZXhw
b3J0cy5zdHJpbmcgPSBzdHJpbmc7CisKKyAgZnVuY3Rpb24gYXJyYXkoYSkgeworICAgIHJldHVy
biAiWyIgKyBhICsgIl0iOworICB9CisKKyAgZXhwb3J0cy5hcnJheSA9IGFycmF5OworCisgIGZ1
bmN0aW9uIGhhc2gocGFpcnMpIHsKKyAgICByZXR1cm4gInsiICsgcGFpcnMuam9pbigiLCAiKSAr
ICJ9IjsKKyAgfQorCisgIGZ1bmN0aW9uIHJlcGVhdChjaGFycywgdGltZXMpIHsKKyAgICB2YXIg
c3RyID0gIiI7CisgICAgd2hpbGUgKHRpbWVzLS0pIHsKKyAgICAgIHN0ciArPSBjaGFyczsKKyAg
ICB9CisgICAgcmV0dXJuIHN0cjsKKyAgfQorfSk7CitlbmlmZWQoJ2h0bWxiYXJzLXV0aWwvc2Fm
ZS1zdHJpbmcnLCBbJ2V4cG9ydHMnLCAnaHRtbGJhcnMtdXRpbC9oYW5kbGViYXJzL3NhZmUtc3Ry
aW5nJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfaHRtbGJhcnNVdGlsSGFuZGxlYmFyc1NhZmVTdHJp
bmcpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIGV4cG9ydHMuZGVmYXVsdCA9IF9odG1sYmFyc1V0
aWxIYW5kbGViYXJzU2FmZVN0cmluZy5kZWZhdWx0OworfSk7CitlbmlmZWQoImh0bWxiYXJzLXV0
aWwvdGVtcGxhdGUtdXRpbHMiLCBbImV4cG9ydHMiLCAiaHRtbGJhcnMtdXRpbC9tb3JwaC11dGls
cyIsICJodG1sYmFycy1ydW50aW1lL3JlbmRlciJdLCBmdW5jdGlvbiAoZXhwb3J0cywgX2h0bWxi
YXJzVXRpbE1vcnBoVXRpbHMsIF9odG1sYmFyc1J1bnRpbWVSZW5kZXIpIHsKKyAgInVzZSBzdHJp
Y3QiOworCisgIGV4cG9ydHMuUmVuZGVyU3RhdGUgPSBSZW5kZXJTdGF0ZTsKKyAgZXhwb3J0cy5i
bG9ja0ZvciA9IGJsb2NrRm9yOworICBleHBvcnRzLnJlbmRlckFuZENsZWFudXAgPSByZW5kZXJB
bmRDbGVhbnVwOworICBleHBvcnRzLmNsZWFyTW9ycGggPSBjbGVhck1vcnBoOworICBleHBvcnRz
LmNsZWFyTW9ycGhMaXN0ID0gY2xlYXJNb3JwaExpc3Q7CisKKyAgZnVuY3Rpb24gUmVuZGVyU3Rh
dGUocmVuZGVyTm9kZSwgbW9ycGhMaXN0KSB7CisgICAgLy8gVGhlIG1vcnBoIGxpc3QgdGhhdCBp
cyBubyBsb25nZXIgbmVlZGVkIGFuZCBjYW4gYmUKKyAgICAvLyBkZXN0cm95ZWQuCisgICAgdGhp
cy5tb3JwaExpc3RUb0NsZWFyID0gbW9ycGhMaXN0OworCisgICAgLy8gVGhlIG1vcnBoIGxpc3Qg
dGhhdCBuZWVkcyB0byBiZSBwcnVuZWQgb2YgYW55IGl0ZW1zCisgICAgLy8gdGhhdCB3ZXJlIG5v
dCB5aWVsZGVkIG9uIGEgc3Vic2VxdWVudCByZW5kZXIuCisgICAgdGhpcy5tb3JwaExpc3RUb1By
dW5lID0gbnVsbDsKKworICAgIC8vIEEgbWFwIG9mIG1vcnBocyBmb3IgZWFjaCBpdGVtIHlpZWxk
ZWQgaW4gZHVyaW5nIHRoaXMKKyAgICAvLyByZW5kZXJpbmcgcGFzcy4gQW55IG1vcnBocyBpbiB0
aGUgRE9NIGJ1dCBub3QgaW4gdGhpcyBtYXAKKyAgICAvLyB3aWxsIGJlIHBydW5lZCBkdXJpbmcg
Y2xlYW51cC4KKyAgICB0aGlzLmhhbmRsZWRNb3JwaHMgPSB7fTsKKyAgICB0aGlzLmNvbGxpc2lv
bnMgPSB1bmRlZmluZWQ7CisKKyAgICAvLyBUaGUgbW9ycGggdG8gY2xlYXIgb25jZSByZW5kZXJp
bmcgaXMgY29tcGxldGUuIEJ5CisgICAgLy8gZGVmYXVsdCwgd2Ugc2V0IHRoaXMgdG8gdGhlIHBy
ZXZpb3VzIG1vcnBoICh0byBjYXRjaAorICAgIC8vIHRoZSBjYXNlIHdoZXJlIG5vdGhpbmcgaXMg
eWllbGRlZDsgaW4gdGhhdCBjYXNlLCB3ZQorICAgIC8vIHNob3VsZCBqdXN0IGNsZWFyIHRoZSBt
b3JwaCkuIE90aGVyd2lzZSB0aGlzIGdldHMgc2V0CisgICAgLy8gdG8gbnVsbCBpZiBhbnl0aGlu
ZyBpcyByZW5kZXJlZC4KKyAgICB0aGlzLm1vcnBoVG9DbGVhciA9IHJlbmRlck5vZGU7CisKKyAg
ICB0aGlzLnNoYWRvd09wdGlvbnMgPSBudWxsOworICB9CisKKyAgZnVuY3Rpb24gQmxvY2socmVu
ZGVyLCB0ZW1wbGF0ZSwgYmxvY2tPcHRpb25zKSB7CisgICAgdGhpcy5yZW5kZXIgPSByZW5kZXI7
CisgICAgdGhpcy50ZW1wbGF0ZSA9IHRlbXBsYXRlOworICAgIHRoaXMuYmxvY2tPcHRpb25zID0g
YmxvY2tPcHRpb25zOworICAgIHRoaXMuYXJpdHkgPSB0ZW1wbGF0ZS5hcml0eTsKKyAgfQorCisg
IEJsb2NrLnByb3RvdHlwZS5pbnZva2UgPSBmdW5jdGlvbiAoZW52LCBibG9ja0FyZ3VtZW50cywg
X3NlbGYsIHJlbmRlck5vZGUsIHBhcmVudFNjb3BlLCB2aXNpdG9yKSB7CisgICAgaWYgKHJlbmRl
ck5vZGUubGFzdFJlc3VsdCkgeworICAgICAgcmVuZGVyTm9kZS5sYXN0UmVzdWx0LnJldmFsaWRh
dGVXaXRoKGVudiwgdW5kZWZpbmVkLCBfc2VsZiwgYmxvY2tBcmd1bWVudHMsIHZpc2l0b3IpOwor
ICAgIH0gZWxzZSB7CisgICAgICB0aGlzLl9maXJzdFJlbmRlcihlbnYsIGJsb2NrQXJndW1lbnRz
LCBfc2VsZiwgcmVuZGVyTm9kZSwgcGFyZW50U2NvcGUpOworICAgIH0KKyAgfTsKKworICBCbG9j
ay5wcm90b3R5cGUuX2ZpcnN0UmVuZGVyID0gZnVuY3Rpb24gKGVudiwgYmxvY2tBcmd1bWVudHMs
IF9zZWxmLCByZW5kZXJOb2RlLCBwYXJlbnRTY29wZSkgeworICAgIHZhciBvcHRpb25zID0geyBy
ZW5kZXJTdGF0ZTogbmV3IFJlbmRlclN0YXRlKHJlbmRlck5vZGUpIH07CisgICAgdmFyIHJlbmRl
ciA9IHRoaXMucmVuZGVyOworICAgIHZhciB0ZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGU7CisgICAg
dmFyIHNjb3BlID0gdGhpcy5ibG9ja09wdGlvbnMuc2NvcGU7CisKKyAgICB2YXIgc2hhZG93U2Nv
cGUgPSBzY29wZSA/IGVudi5ob29rcy5jcmVhdGVDaGlsZFNjb3BlKHNjb3BlKSA6IGVudi5ob29r
cy5jcmVhdGVGcmVzaFNjb3BlKCk7CisKKyAgICBlbnYuaG9va3MuYmluZFNoYWRvd1Njb3BlKGVu
diwgcGFyZW50U2NvcGUsIHNoYWRvd1Njb3BlLCB0aGlzLmJsb2NrT3B0aW9ucy5vcHRpb25zKTsK
KworICAgIGlmIChfc2VsZiAhPT0gdW5kZWZpbmVkKSB7CisgICAgICBlbnYuaG9va3MuYmluZFNl
bGYoZW52LCBzaGFkb3dTY29wZSwgX3NlbGYpOworICAgIH0gZWxzZSBpZiAodGhpcy5ibG9ja09w
dGlvbnMuc2VsZiAhPT0gdW5kZWZpbmVkKSB7CisgICAgICBlbnYuaG9va3MuYmluZFNlbGYoZW52
LCBzaGFkb3dTY29wZSwgdGhpcy5ibG9ja09wdGlvbnMuc2VsZik7CisgICAgfQorCisgICAgYmlu
ZEJsb2NrcyhlbnYsIHNoYWRvd1Njb3BlLCB0aGlzLmJsb2NrT3B0aW9ucy55aWVsZFRvKTsKKwor
ICAgIHJlbmRlckFuZENsZWFudXAocmVuZGVyTm9kZSwgZW52LCBvcHRpb25zLCBudWxsLCBmdW5j
dGlvbiAoKSB7CisgICAgICBvcHRpb25zLnJlbmRlclN0YXRlLm1vcnBoVG9DbGVhciA9IG51bGw7
CisgICAgICB2YXIgcmVuZGVyT3B0aW9ucyA9IG5ldyBfaHRtbGJhcnNSdW50aW1lUmVuZGVyLlJl
bmRlck9wdGlvbnMocmVuZGVyTm9kZSwgdW5kZWZpbmVkLCBibG9ja0FyZ3VtZW50cyk7CisgICAg
ICByZW5kZXIodGVtcGxhdGUsIGVudiwgc2hhZG93U2NvcGUsIHJlbmRlck9wdGlvbnMpOworICAg
IH0pOworICB9OworCisgIGZ1bmN0aW9uIGJsb2NrRm9yKHJlbmRlciwgdGVtcGxhdGUsIGJsb2Nr
T3B0aW9ucykgeworICAgIHJldHVybiBuZXcgQmxvY2socmVuZGVyLCB0ZW1wbGF0ZSwgYmxvY2tP
cHRpb25zKTsKKyAgfQorCisgIGZ1bmN0aW9uIGJpbmRCbG9ja3MoZW52LCBzaGFkb3dTY29wZSwg
YmxvY2tzKSB7CisgICAgaWYgKCFibG9ja3MpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAg
aWYgKGJsb2NrcyBpbnN0YW5jZW9mIEJsb2NrKSB7CisgICAgICBlbnYuaG9va3MuYmluZEJsb2Nr
KGVudiwgc2hhZG93U2NvcGUsIGJsb2Nrcyk7CisgICAgfSBlbHNlIHsKKyAgICAgIGZvciAodmFy
IG5hbWUgaW4gYmxvY2tzKSB7CisgICAgICAgIGlmIChibG9ja3MuaGFzT3duUHJvcGVydHkobmFt
ZSkpIHsKKyAgICAgICAgICBlbnYuaG9va3MuYmluZEJsb2NrKGVudiwgc2hhZG93U2NvcGUsIGJs
b2Nrc1tuYW1lXSwgbmFtZSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICBm
dW5jdGlvbiByZW5kZXJBbmRDbGVhbnVwKG1vcnBoLCBlbnYsIG9wdGlvbnMsIHNoYWRvd09wdGlv
bnMsIGNhbGxiYWNrKSB7CisgICAgLy8gVGhlIFJlbmRlclN0YXRlIG9iamVjdCBpcyB1c2VkIHRv
IGNvbGxlY3QgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCB0aGUKKyAgICAvLyBoZWxwZXIgb3IgaG9v
ayBiZWluZyBpbnZva2VkIGhhcyB5aWVsZGVkLiBPbmNlIGl0IGhhcyBmaW5pc2hlZCBlaXRoZXIK
KyAgICAvLyB5aWVsZGluZyBtdWx0aXBsZSBpdGVtcyAodmlhIHlpZWxkSXRlbSkgb3IgYSBzaW5n
bGUgdGVtcGxhdGUgKHZpYQorICAgIC8vIHlpZWxkVGVtcGxhdGUpLCB3ZSBkZXRlY3Qgd2hhdCB3
YXMgcmVuZGVyZWQgYW5kIGhvdyBpdCBkaWZmZXJzIGZyb20KKyAgICAvLyB0aGUgcHJldmlvdXMg
cmVuZGVyLCBjbGVhbmluZyB1cCBvbGQgc3RhdGUgaW4gRE9NIGFzIGFwcHJvcHJpYXRlLgorICAg
IHZhciByZW5kZXJTdGF0ZSA9IG9wdGlvbnMucmVuZGVyU3RhdGU7CisgICAgcmVuZGVyU3RhdGUu
Y29sbGlzaW9ucyA9IHVuZGVmaW5lZDsKKyAgICByZW5kZXJTdGF0ZS5zaGFkb3dPcHRpb25zID0g
c2hhZG93T3B0aW9uczsKKworICAgIC8vIEludm9rZSB0aGUgY2FsbGJhY2ssIGluc3RydWN0aW5n
IGl0IHRvIHNhdmUgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBpdAorICAgIC8vIHJlbmRlcnMgaW50
byBSZW5kZXJTdGF0ZS4KKyAgICB2YXIgcmVzdWx0ID0gY2FsbGJhY2sob3B0aW9ucyk7CisKKyAg
ICAvLyBUaGUgaG9vayBjYW4gb3B0LW91dCBvZiBjbGVhbnVwIGlmIGl0IGhhbmRsZWQgY2xlYW51
cCBpdHNlbGYuCisgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuaGFuZGxlZCkgeworICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIHZhciBtb3JwaE1hcCA9IG1vcnBoLm1vcnBoTWFwOworCisgICAg
Ly8gV2FsayB0aGUgbW9ycGggbGlzdCwgY2xlYXJpbmcgYW55IGl0ZW1zIHRoYXQgd2VyZSB5aWVs
ZGVkIGluIGEgcHJldmlvdXMKKyAgICAvLyByZW5kZXIgYnV0IHdlcmUgbm90IHlpZWxkZWQgZHVy
aW5nIHRoaXMgcmVuZGVyLgorICAgIHZhciBtb3JwaExpc3QgPSByZW5kZXJTdGF0ZS5tb3JwaExp
c3RUb1BydW5lOworICAgIGlmIChtb3JwaExpc3QpIHsKKyAgICAgIHZhciBoYW5kbGVkTW9ycGhz
ID0gcmVuZGVyU3RhdGUuaGFuZGxlZE1vcnBoczsKKyAgICAgIHZhciBpdGVtID0gbW9ycGhMaXN0
LmZpcnN0Q2hpbGRNb3JwaDsKKworICAgICAgd2hpbGUgKGl0ZW0pIHsKKyAgICAgICAgdmFyIG5l
eHQgPSBpdGVtLm5leHRNb3JwaDsKKworICAgICAgICAvLyBJZiB3ZSBkb24ndCBzZWUgdGhlIGtl
eSBpbiBoYW5kbGVkTW9ycGhzLCBpdCB3YXNuJ3QKKyAgICAgICAgLy8geWllbGRlZCBpbiBhbmQg
d2UgY2FuIHNhZmVseSByZW1vdmUgaXQgZnJvbSBET00uCisgICAgICAgIGlmICghKGl0ZW0ua2V5
IGluIGhhbmRsZWRNb3JwaHMpKSB7CisgICAgICAgICAgbW9ycGhNYXBbaXRlbS5rZXldID0gdW5k
ZWZpbmVkOworICAgICAgICAgIGNsZWFyTW9ycGgoaXRlbSwgZW52LCB0cnVlKTsKKyAgICAgICAg
ICBpdGVtLmRlc3Ryb3koKTsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZW0gPSBuZXh0OworICAg
ICAgfQorICAgIH0KKworICAgIG1vcnBoTGlzdCA9IHJlbmRlclN0YXRlLm1vcnBoTGlzdFRvQ2xl
YXI7CisgICAgaWYgKG1vcnBoTGlzdCkgeworICAgICAgY2xlYXJNb3JwaExpc3QobW9ycGhMaXN0
LCBtb3JwaCwgZW52KTsKKyAgICB9CisKKyAgICB2YXIgdG9DbGVhciA9IHJlbmRlclN0YXRlLm1v
cnBoVG9DbGVhcjsKKyAgICBpZiAodG9DbGVhcikgeworICAgICAgY2xlYXJNb3JwaCh0b0NsZWFy
LCBlbnYpOworICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIGNsZWFyTW9ycGgobW9ycGgsIGVudiwg
ZGVzdHJveVNlbGYpIHsKKyAgICB2YXIgY2xlYW51cCA9IGVudi5ob29rcy5jbGVhbnVwUmVuZGVy
Tm9kZTsKKyAgICB2YXIgZGVzdHJveSA9IGVudi5ob29rcy5kZXN0cm95UmVuZGVyTm9kZTsKKyAg
ICB2YXIgd2lsbENsZWFudXAgPSBlbnYuaG9va3Mud2lsbENsZWFudXBUcmVlOworICAgIHZhciBk
aWRDbGVhbnVwID0gZW52Lmhvb2tzLmRpZENsZWFudXBUcmVlOworCisgICAgZnVuY3Rpb24gZGVz
dHJveU5vZGUobm9kZSkgeworICAgICAgaWYgKGNsZWFudXApIHsKKyAgICAgICAgY2xlYW51cChu
b2RlKTsKKyAgICAgIH0KKyAgICAgIGlmIChkZXN0cm95KSB7CisgICAgICAgIGRlc3Ryb3kobm9k
ZSk7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKHdpbGxDbGVhbnVwKSB7CisgICAgICB3aWxs
Q2xlYW51cChlbnYsIG1vcnBoLCBkZXN0cm95U2VsZik7CisgICAgfQorICAgIGlmIChjbGVhbnVw
KSB7CisgICAgICBjbGVhbnVwKG1vcnBoKTsKKyAgICB9CisgICAgaWYgKGRlc3Ryb3lTZWxmICYm
IGRlc3Ryb3kpIHsKKyAgICAgIGRlc3Ryb3kobW9ycGgpOworICAgIH0KKworICAgIF9odG1sYmFy
c1V0aWxNb3JwaFV0aWxzLnZpc2l0Q2hpbGRyZW4obW9ycGguY2hpbGROb2RlcywgZGVzdHJveU5v
ZGUpOworCisgICAgLy8gVE9ETzogRGVhbCB3aXRoIGxvZ2ljYWwgY2hpbGRyZW4gdGhhdCBhcmUg
bm90IGluIHRoZSBET00gdHJlZQorICAgIG1vcnBoLmNsZWFyKCk7CisgICAgaWYgKGRpZENsZWFu
dXApIHsKKyAgICAgIGRpZENsZWFudXAoZW52LCBtb3JwaCwgZGVzdHJveVNlbGYpOworICAgIH0K
KworICAgIG1vcnBoLmxhc3RSZXN1bHQgPSBudWxsOworICAgIG1vcnBoLmxhc3RZaWVsZGVkID0g
bnVsbDsKKyAgICBtb3JwaC5jaGlsZE5vZGVzID0gbnVsbDsKKyAgfQorCisgIGZ1bmN0aW9uIGNs
ZWFyTW9ycGhMaXN0KG1vcnBoTGlzdCwgbW9ycGgsIGVudikgeworICAgIHZhciBpdGVtID0gbW9y
cGhMaXN0LmZpcnN0Q2hpbGRNb3JwaDsKKworICAgIHdoaWxlIChpdGVtKSB7CisgICAgICB2YXIg
bmV4dCA9IGl0ZW0ubmV4dE1vcnBoOworICAgICAgbW9ycGgubW9ycGhNYXBbaXRlbS5rZXldID0g
dW5kZWZpbmVkOworICAgICAgY2xlYXJNb3JwaChpdGVtLCBlbnYsIHRydWUpOworICAgICAgaXRl
bS5kZXN0cm95KCk7CisKKyAgICAgIGl0ZW0gPSBuZXh0OworICAgIH0KKworICAgIC8vIFJlbW92
ZSB0aGUgTW9ycGhMaXN0IGZyb20gdGhlIG1vcnBoLgorICAgIG1vcnBoTGlzdC5jbGVhcigpOwor
ICAgIG1vcnBoLm1vcnBoTGlzdCA9IG51bGw7CisgIH0KK30pOworZW5pZmVkKCJodG1sYmFycy11
dGlsL3ZvaWQtdGFnLW5hbWVzIiwgWyJleHBvcnRzIiwgImh0bWxiYXJzLXV0aWwvYXJyYXktdXRp
bHMiXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9odG1sYmFyc1V0aWxBcnJheVV0aWxzKSB7CisgICJ1
c2Ugc3RyaWN0IjsKKworICAvLyBUaGUgSFRNTCBlbGVtZW50cyBpbiB0aGlzIGxpc3QgYXJlIHNw
ZWNlZCBieQorICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sLW1hcmt1cC9zeW50YXguaHRt
bCNzeW50YXgtZWxlbWVudHMsCisgIC8vIGFuZCB3aWxsIGJlIGZvcmNlZCB0byBjbG9zZSByZWdh
cmRsZXNzIG9mIGlmIHRoZXkgaGF2ZSBhCisgIC8vIHNlbGYtY2xvc2luZyAvPiBhdCB0aGUgZW5k
LgorICB2YXIgdm9pZFRhZ05hbWVzID0gImFyZWEgYmFzZSBiciBjb2wgY29tbWFuZCBlbWJlZCBo
ciBpbWcgaW5wdXQga2V5Z2VuIGxpbmsgbWV0YSBwYXJhbSBzb3VyY2UgdHJhY2sgd2JyIjsKKyAg
dmFyIHZvaWRNYXAgPSB7fTsKKworICBfaHRtbGJhcnNVdGlsQXJyYXlVdGlscy5mb3JFYWNoKHZv
aWRUYWdOYW1lcy5zcGxpdCgiICIpLCBmdW5jdGlvbiAodGFnTmFtZSkgeworICAgIHZvaWRNYXBb
dGFnTmFtZV0gPSB0cnVlOworICB9KTsKKworICBleHBvcnRzLmRlZmF1bHQgPSB2b2lkTWFwOwor
fSk7CitlbmlmZWQoIm1vcnBoLWF0dHIiLCBbImV4cG9ydHMiLCAibW9ycGgtYXR0ci9zYW5pdGl6
ZS1hdHRyaWJ1dGUtdmFsdWUiLCAiZG9tLWhlbHBlci9wcm9wIiwgImRvbS1oZWxwZXIvYnVpbGQt
aHRtbC1kb20iLCAiaHRtbGJhcnMtdXRpbCJdLCBmdW5jdGlvbiAoZXhwb3J0cywgX21vcnBoQXR0
clNhbml0aXplQXR0cmlidXRlVmFsdWUsIF9kb21IZWxwZXJQcm9wLCBfZG9tSGVscGVyQnVpbGRI
dG1sRG9tLCBfaHRtbGJhcnNVdGlsKSB7CisgICJ1c2Ugc3RyaWN0IjsKKworICBmdW5jdGlvbiBn
ZXRQcm9wZXJ0eSgpIHsKKyAgICByZXR1cm4gdGhpcy5kb21IZWxwZXIuZ2V0UHJvcGVydHlTdHJp
Y3QodGhpcy5lbGVtZW50LCB0aGlzLmF0dHJOYW1lKTsKKyAgfQorCisgIGZ1bmN0aW9uIHVwZGF0
ZVByb3BlcnR5KHZhbHVlKSB7CisgICAgaWYgKHRoaXMuX3JlbmRlcmVkSW5pdGlhbGx5ID09PSB0
cnVlIHx8ICFfZG9tSGVscGVyUHJvcC5pc0F0dHJSZW1vdmFsVmFsdWUodmFsdWUpKSB7CisgICAg
ICB2YXIgZWxlbWVudCA9IHRoaXMuZWxlbWVudDsKKyAgICAgIHZhciBhdHRyTmFtZSA9IHRoaXMu
YXR0ck5hbWU7CisKKyAgICAgIGlmIChhdHRyTmFtZSA9PT0gJ3ZhbHVlJyAmJiBlbGVtZW50LnRh
Z05hbWUgPT09ICdJTlBVVCcgJiYgZWxlbWVudC52YWx1ZSA9PT0gdmFsdWUpIHsKKyAgICAgICAg
Ly8gRG8gbm90aGluZy4gQXR0ZW1wdHMgdG8gYXZvaWQgYWNjaWRlbnRseSBjaGFuZ2luZyB0aGUg
aW5wdXQgY3Vyc29yIGxvY2F0aW9uLgorICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29t
L3RpbGRlaW8vaHRtbGJhcnMvcHVsbC80NDcgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgLy8gZG8gbm90IHJlbmRlciBpZiBpbml0aWFsIHZhbHVlIGlzIHVuZGVm
aW5lZCBvciBudWxsCisgICAgICAgICAgdGhpcy5kb21IZWxwZXIuc2V0UHJvcGVydHlTdHJpY3Qo
ZWxlbWVudCwgYXR0ck5hbWUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHRoaXMu
X3JlbmRlcmVkSW5pdGlhbGx5ID0gdHJ1ZTsKKyAgfQorCisgIGZ1bmN0aW9uIGdldEF0dHJpYnV0
ZSgpIHsKKyAgICByZXR1cm4gdGhpcy5kb21IZWxwZXIuZ2V0QXR0cmlidXRlKHRoaXMuZWxlbWVu
dCwgdGhpcy5hdHRyTmFtZSk7CisgIH0KKworICBmdW5jdGlvbiB1cGRhdGVBdHRyaWJ1dGUodmFs
dWUpIHsKKyAgICBpZiAoX2RvbUhlbHBlclByb3AuaXNBdHRyUmVtb3ZhbFZhbHVlKHZhbHVlKSkg
eworICAgICAgdGhpcy5kb21IZWxwZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWxlbWVudCwgdGhp
cy5hdHRyTmFtZSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMuZG9tSGVscGVyLnNldEF0dHJp
YnV0ZSh0aGlzLmVsZW1lbnQsIHRoaXMuYXR0ck5hbWUsIHZhbHVlKTsKKyAgICB9CisgIH0KKwor
ICBmdW5jdGlvbiBnZXRBdHRyaWJ1dGVOUygpIHsKKyAgICByZXR1cm4gdGhpcy5kb21IZWxwZXIu
Z2V0QXR0cmlidXRlTlModGhpcy5lbGVtZW50LCB0aGlzLm5hbWVzcGFjZSwgdGhpcy5hdHRyTmFt
ZSk7CisgIH0KKworICBmdW5jdGlvbiB1cGRhdGVBdHRyaWJ1dGVOUyh2YWx1ZSkgeworICAgIGlm
IChfZG9tSGVscGVyUHJvcC5pc0F0dHJSZW1vdmFsVmFsdWUodmFsdWUpKSB7CisgICAgICB0aGlz
LmRvbUhlbHBlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5lbGVtZW50LCB0aGlzLmF0dHJOYW1lKTsK
KyAgICB9IGVsc2UgeworICAgICAgdGhpcy5kb21IZWxwZXIuc2V0QXR0cmlidXRlTlModGhpcy5l
bGVtZW50LCB0aGlzLm5hbWVzcGFjZSwgdGhpcy5hdHRyTmFtZSwgdmFsdWUpOworICAgIH0KKyAg
fQorCisgIHZhciBVTlNFVCA9IHsgdW5zZXQ6IHRydWUgfTsKKworICB2YXIgZ3VpZCA9IDE7CisK
KyAgQXR0ck1vcnBoLmNyZWF0ZSA9IGZ1bmN0aW9uIChlbGVtZW50LCBhdHRyTmFtZSwgZG9tSGVs
cGVyLCBuYW1lc3BhY2UpIHsKKyAgICB2YXIgbnMgPSBfaHRtbGJhcnNVdGlsLmdldEF0dHJOYW1l
c3BhY2UoYXR0ck5hbWUsIG5hbWVzcGFjZSk7CisKKyAgICBpZiAobnMpIHsKKyAgICAgIHJldHVy
biBuZXcgQXR0cmlidXRlTlNBdHRyTW9ycGgoZWxlbWVudCwgYXR0ck5hbWUsIGRvbUhlbHBlciwg
bnMpOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gY3JlYXRlTm9uTmFtZXNwYWNlZEF0dHJN
b3JwaChlbGVtZW50LCBhdHRyTmFtZSwgZG9tSGVscGVyKTsKKyAgICB9CisgIH07CisKKyAgZnVu
Y3Rpb24gY3JlYXRlTm9uTmFtZXNwYWNlZEF0dHJNb3JwaChlbGVtZW50LCBhdHRyTmFtZSwgZG9t
SGVscGVyKSB7CisgICAgdmFyIF9ub3JtYWxpemVQcm9wZXJ0eSA9IF9kb21IZWxwZXJQcm9wLm5v
cm1hbGl6ZVByb3BlcnR5KGVsZW1lbnQsIGF0dHJOYW1lKTsKKworICAgIHZhciBub3JtYWxpemVk
ID0gX25vcm1hbGl6ZVByb3BlcnR5Lm5vcm1hbGl6ZWQ7CisgICAgdmFyIHR5cGUgPSBfbm9ybWFs
aXplUHJvcGVydHkudHlwZTsKKworICAgIGlmIChlbGVtZW50Lm5hbWVzcGFjZVVSSSA9PT0gX2Rv
bUhlbHBlckJ1aWxkSHRtbERvbS5zdmdOYW1lc3BhY2UgfHwgYXR0ck5hbWUgPT09ICdzdHlsZScg
fHwgdHlwZSA9PT0gJ2F0dHInKSB7CisgICAgICByZXR1cm4gbmV3IEF0dHJpYnV0ZUF0dHJNb3Jw
aChlbGVtZW50LCBub3JtYWxpemVkLCBkb21IZWxwZXIpOworICAgIH0gZWxzZSB7CisgICAgICBy
ZXR1cm4gbmV3IFByb3BlcnR5QXR0ck1vcnBoKGVsZW1lbnQsIG5vcm1hbGl6ZWQsIGRvbUhlbHBl
cik7CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gQXR0ck1vcnBoKGVsZW1lbnQsIGF0dHJOYW1l
LCBkb21IZWxwZXIpIHsKKyAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50OworICAgIHRoaXMuZG9t
SGVscGVyID0gZG9tSGVscGVyOworICAgIHRoaXMuYXR0ck5hbWUgPSBhdHRyTmFtZTsKKyAgICB0
aGlzLl9zdGF0ZSA9IHVuZGVmaW5lZDsKKyAgICB0aGlzLmlzRGlydHkgPSBmYWxzZTsKKyAgICB0
aGlzLmlzU3VidHJlZURpcnR5ID0gZmFsc2U7CisgICAgdGhpcy5lc2NhcGVkID0gdHJ1ZTsKKyAg
ICB0aGlzLmxhc3RWYWx1ZSA9IFVOU0VUOworICAgIHRoaXMubGFzdFJlc3VsdCA9IG51bGw7Cisg
ICAgdGhpcy5sYXN0WWllbGRlZCA9IG51bGw7CisgICAgdGhpcy5jaGlsZE5vZGVzID0gbnVsbDsK
KyAgICB0aGlzLmxpbmtlZFBhcmFtcyA9IG51bGw7CisgICAgdGhpcy5saW5rZWRSZXN1bHQgPSBu
dWxsOworICAgIHRoaXMuZ3VpZCA9ICJhdHRyIiArIGd1aWQrKzsKKyAgICB0aGlzLnNlZW4gPSBm
YWxzZTsKKyAgICB0aGlzLm93bmVyTm9kZSA9IG51bGw7CisgICAgdGhpcy5yZW5kZXJlZCA9IGZh
bHNlOworICAgIHRoaXMuX3JlbmRlcmVkSW5pdGlhbGx5ID0gZmFsc2U7CisgICAgdGhpcy5uYW1l
c3BhY2UgPSB1bmRlZmluZWQ7CisgICAgdGhpcy5kaWRJbml0KCk7CisgIH0KKworICBBdHRyTW9y
cGgucHJvdG90eXBlLmdldFN0YXRlID0gZnVuY3Rpb24gKCkgeworICAgIGlmICghdGhpcy5fc3Rh
dGUpIHsKKyAgICAgIHRoaXMuX3N0YXRlID0ge307CisgICAgfQorCisgICAgcmV0dXJuIHRoaXMu
X3N0YXRlOworICB9OworCisgIEF0dHJNb3JwaC5wcm90b3R5cGUuc2V0U3RhdGUgPSBmdW5jdGlv
biAobmV3U3RhdGUpIHsKKyAgICAvKmpzaGludCAtVzA5MyAqLworCisgICAgcmV0dXJuIHRoaXMu
X3N0YXRlID0gbmV3U3RhdGU7CisgIH07CisKKyAgQXR0ck1vcnBoLnByb3RvdHlwZS5kaWRJbml0
ID0gZnVuY3Rpb24gKCkge307CisgIEF0dHJNb3JwaC5wcm90b3R5cGUud2lsbFNldENvbnRlbnQg
PSBmdW5jdGlvbiAoKSB7fTsKKworICBBdHRyTW9ycGgucHJvdG90eXBlLnNldENvbnRlbnQgPSBm
dW5jdGlvbiAodmFsdWUpIHsKKyAgICB0aGlzLndpbGxTZXRDb250ZW50KHZhbHVlKTsKKworICAg
IGlmICh0aGlzLmxhc3RWYWx1ZSA9PT0gdmFsdWUpIHsKKyAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgdGhpcy5sYXN0VmFsdWUgPSB2YWx1ZTsKKworICAgIGlmICh0aGlzLmVzY2FwZWQpIHsKKyAg
ICAgIHZhciBzYW5pdGl6ZWQgPSBfbW9ycGhBdHRyU2FuaXRpemVBdHRyaWJ1dGVWYWx1ZS5zYW5p
dGl6ZUF0dHJpYnV0ZVZhbHVlKHRoaXMuZG9tSGVscGVyLCB0aGlzLmVsZW1lbnQsIHRoaXMuYXR0
ck5hbWUsIHZhbHVlKTsKKyAgICAgIHRoaXMuX3VwZGF0ZShzYW5pdGl6ZWQsIHRoaXMubmFtZXNw
YWNlKTsKKyAgICB9IGVsc2UgeworICAgICAgdGhpcy5fdXBkYXRlKHZhbHVlLCB0aGlzLm5hbWVz
cGFjZSk7CisgICAgfQorICB9OworCisgIEF0dHJNb3JwaC5wcm90b3R5cGUuZ2V0Q29udGVudCA9
IGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgdmFsdWUgPSB0aGlzLmxhc3RWYWx1ZSA9IHRoaXMuX2dl
dCgpOworICAgIHJldHVybiB2YWx1ZTsKKyAgfTsKKworICAvLyByZW5kZXJBbmRDbGVhbnVwIGNh
bGxzIGBjbGVhcmAgb24gYWxsIGl0ZW1zIGluIHRoZSBtb3JwaCBtYXAKKyAgLy8ganVzdCBiZWZv
cmUgY2FsbGluZyBgZGVzdHJveWAgb24gdGhlIG1vcnBoLgorICAvLworICAvLyBBcyBhIGZ1dHVy
ZSByZWZhY3RvciB0aGlzIGNvdWxkIGJlIGNoYW5nZWQgdG8gc2V0IHRoZSBwcm9wZXJ0eQorICAv
LyBiYWNrIHRvIGl0cyBvcmlnaW5hbC9kZWZhdWx0IHZhbHVlLgorICBBdHRyTW9ycGgucHJvdG90
eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge307CisKKyAgQXR0ck1vcnBoLnByb3RvdHlwZS5kZXN0
cm95ID0gZnVuY3Rpb24gKCkgeworICAgIHRoaXMuZWxlbWVudCA9IG51bGw7CisgICAgdGhpcy5k
b21IZWxwZXIgPSBudWxsOworICB9OworCisgIEF0dHJNb3JwaC5wcm90b3R5cGUuXyRzdXBlckF0
dHJNb3JwaCA9IEF0dHJNb3JwaDsKKworICBmdW5jdGlvbiBQcm9wZXJ0eUF0dHJNb3JwaChlbGVt
ZW50LCBhdHRyTmFtZSwgZG9tSGVscGVyKSB7CisgICAgdGhpcy5fJHN1cGVyQXR0ck1vcnBoKGVs
ZW1lbnQsIGF0dHJOYW1lLCBkb21IZWxwZXIpOworICB9CisKKyAgUHJvcGVydHlBdHRyTW9ycGgu
cHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBdHRyTW9ycGgucHJvdG90eXBlKTsKKyAgUHJvcGVy
dHlBdHRyTW9ycGgucHJvdG90eXBlLl91cGRhdGUgPSB1cGRhdGVQcm9wZXJ0eTsKKyAgUHJvcGVy
dHlBdHRyTW9ycGgucHJvdG90eXBlLl9nZXQgPSBnZXRQcm9wZXJ0eTsKKworICBmdW5jdGlvbiBB
dHRyaWJ1dGVOU0F0dHJNb3JwaChlbGVtZW50LCBhdHRyTmFtZSwgZG9tSGVscGVyLCBuYW1lc3Bh
Y2UpIHsKKyAgICB0aGlzLl8kc3VwZXJBdHRyTW9ycGgoZWxlbWVudCwgYXR0ck5hbWUsIGRvbUhl
bHBlcik7CisgICAgdGhpcy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7CisgIH0KKworICBBdHRyaWJ1
dGVOU0F0dHJNb3JwaC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEF0dHJNb3JwaC5wcm90b3R5
cGUpOworICBBdHRyaWJ1dGVOU0F0dHJNb3JwaC5wcm90b3R5cGUuX3VwZGF0ZSA9IHVwZGF0ZUF0
dHJpYnV0ZU5TOworICBBdHRyaWJ1dGVOU0F0dHJNb3JwaC5wcm90b3R5cGUuX2dldCA9IGdldEF0
dHJpYnV0ZU5TOworCisgIGZ1bmN0aW9uIEF0dHJpYnV0ZUF0dHJNb3JwaChlbGVtZW50LCBhdHRy
TmFtZSwgZG9tSGVscGVyKSB7CisgICAgdGhpcy5fJHN1cGVyQXR0ck1vcnBoKGVsZW1lbnQsIGF0
dHJOYW1lLCBkb21IZWxwZXIpOworICB9CisKKyAgQXR0cmlidXRlQXR0ck1vcnBoLnByb3RvdHlw
ZSA9IE9iamVjdC5jcmVhdGUoQXR0ck1vcnBoLnByb3RvdHlwZSk7CisgIEF0dHJpYnV0ZUF0dHJN
b3JwaC5wcm90b3R5cGUuX3VwZGF0ZSA9IHVwZGF0ZUF0dHJpYnV0ZTsKKyAgQXR0cmlidXRlQXR0
ck1vcnBoLnByb3RvdHlwZS5fZ2V0ID0gZ2V0QXR0cmlidXRlOworCisgIGV4cG9ydHMuZGVmYXVs
dCA9IEF0dHJNb3JwaDsKKyAgZXhwb3J0cy5zYW5pdGl6ZUF0dHJpYnV0ZVZhbHVlID0gX21vcnBo
QXR0clNhbml0aXplQXR0cmlidXRlVmFsdWUuc2FuaXRpemVBdHRyaWJ1dGVWYWx1ZTsKK30pOwor
ZW5pZmVkKCdtb3JwaC1hdHRyL3Nhbml0aXplLWF0dHJpYnV0ZS12YWx1ZScsIFsnZXhwb3J0cydd
LCBmdW5jdGlvbiAoZXhwb3J0cykgeworICAvKiBqc2hpbnQgc2NyaXB0dXJsOnRydWUgKi8KKwor
ICAndXNlIHN0cmljdCc7CisKKyAgZXhwb3J0cy5zYW5pdGl6ZUF0dHJpYnV0ZVZhbHVlID0gc2Fu
aXRpemVBdHRyaWJ1dGVWYWx1ZTsKKyAgdmFyIGJhZFByb3RvY29scyA9IHsKKyAgICAnamF2YXNj
cmlwdDonOiB0cnVlLAorICAgICd2YnNjcmlwdDonOiB0cnVlCisgIH07CisKKyAgdmFyIGJhZFRh
Z3MgPSB7CisgICAgJ0EnOiB0cnVlLAorICAgICdCT0RZJzogdHJ1ZSwKKyAgICAnTElOSyc6IHRy
dWUsCisgICAgJ0lNRyc6IHRydWUsCisgICAgJ0lGUkFNRSc6IHRydWUsCisgICAgJ0JBU0UnOiB0
cnVlLAorICAgICdGT1JNJzogdHJ1ZQorICB9OworCisgIHZhciBiYWRUYWdzRm9yRGF0YVVSSSA9
IHsKKyAgICAnRU1CRUQnOiB0cnVlCisgIH07CisKKyAgdmFyIGJhZEF0dHJpYnV0ZXMgPSB7Cisg
ICAgJ2hyZWYnOiB0cnVlLAorICAgICdzcmMnOiB0cnVlLAorICAgICdiYWNrZ3JvdW5kJzogdHJ1
ZSwKKyAgICAnYWN0aW9uJzogdHJ1ZQorICB9OworCisgIGV4cG9ydHMuYmFkQXR0cmlidXRlcyA9
IGJhZEF0dHJpYnV0ZXM7CisgIHZhciBiYWRBdHRyaWJ1dGVzRm9yRGF0YVVSSSA9IHsKKyAgICAn
c3JjJzogdHJ1ZQorICB9OworCisgIGZ1bmN0aW9uIHNhbml0aXplQXR0cmlidXRlVmFsdWUoZG9t
LCBlbGVtZW50LCBhdHRyaWJ1dGUsIHZhbHVlKSB7CisgICAgdmFyIHRhZ05hbWU7CisKKyAgICBp
ZiAoIWVsZW1lbnQpIHsKKyAgICAgIHRhZ05hbWUgPSBudWxsOworICAgIH0gZWxzZSB7CisgICAg
ICB0YWdOYW1lID0gZWxlbWVudC50YWdOYW1lLnRvVXBwZXJDYXNlKCk7CisgICAgfQorCisgICAg
aWYgKHZhbHVlICYmIHZhbHVlLnRvSFRNTCkgeworICAgICAgcmV0dXJuIHZhbHVlLnRvSFRNTCgp
OworICAgIH0KKworICAgIGlmICgodGFnTmFtZSA9PT0gbnVsbCB8fCBiYWRUYWdzW3RhZ05hbWVd
KSAmJiBiYWRBdHRyaWJ1dGVzW2F0dHJpYnV0ZV0pIHsKKyAgICAgIHZhciBwcm90b2NvbCA9IGRv
bS5wcm90b2NvbEZvclVSTCh2YWx1ZSk7CisgICAgICBpZiAoYmFkUHJvdG9jb2xzW3Byb3RvY29s
XSA9PT0gdHJ1ZSkgeworICAgICAgICByZXR1cm4gJ3Vuc2FmZTonICsgdmFsdWU7CisgICAgICB9
CisgICAgfQorCisgICAgaWYgKGJhZFRhZ3NGb3JEYXRhVVJJW3RhZ05hbWVdICYmIGJhZEF0dHJp
YnV0ZXNGb3JEYXRhVVJJW2F0dHJpYnV0ZV0pIHsKKyAgICAgIHJldHVybiAndW5zYWZlOicgKyB2
YWx1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gdmFsdWU7CisgIH0KK30pOworZW5pZmVkKCdtb3Jw
aC1yYW5nZScsIFsnZXhwb3J0cycsICdtb3JwaC1yYW5nZS91dGlscyddLCBmdW5jdGlvbiAoZXhw
b3J0cywgX21vcnBoUmFuZ2VVdGlscykgeworICAndXNlIHN0cmljdCc7CisKKyAgLy8gY29uc3Ry
dWN0b3IganVzdCBpbml0aWFsaXplcyB0aGUgZmllbGRzCisgIC8vIHVzZSBvbmUgb2YgdGhlIHN0
YXRpYyBpbml0aWFsaXplcnMgdG8gY3JlYXRlIGEgdmFsaWQgbW9ycGguCisgIGZ1bmN0aW9uIE1v
cnBoKGRvbUhlbHBlciwgY29udGV4dHVhbEVsZW1lbnQpIHsKKyAgICB0aGlzLmRvbUhlbHBlciA9
IGRvbUhlbHBlcjsKKyAgICAvLyBjb250ZXh0IGlmIGNvbnRlbnQgaWYgY3VycmVudCBjb250ZW50
IGlzIGRldGFjaGVkCisgICAgdGhpcy5jb250ZXh0dWFsRWxlbWVudCA9IGNvbnRleHR1YWxFbGVt
ZW50OworICAgIC8vIGluY2x1c2l2ZSByYW5nZSBvZiBtb3JwaAorICAgIC8vIHRoZXNlIHNob3Vs
ZCBiZSBub2RlVHlwZSAxLCAzLCBvciA4CisgICAgdGhpcy5maXJzdE5vZGUgPSBudWxsOworICAg
IHRoaXMubGFzdE5vZGUgPSBudWxsOworCisgICAgLy8gZmxhZyB0byBmb3JjZSB0ZXh0IHRvIHNl
dENvbnRlbnQgdG8gYmUgdHJlYXRlZCBhcyBodG1sCisgICAgdGhpcy5wYXJzZVRleHRBc0hUTUwg
PSBmYWxzZTsKKworICAgIC8vIG1vcnBoIGxpc3QgZ3JhcGgKKyAgICB0aGlzLnBhcmVudE1vcnBo
TGlzdCA9IG51bGw7CisgICAgdGhpcy5wcmV2aW91c01vcnBoID0gbnVsbDsKKyAgICB0aGlzLm5l
eHRNb3JwaCA9IG51bGw7CisgIH0KKworICBNb3JwaC5lbXB0eSA9IGZ1bmN0aW9uIChkb21IZWxw
ZXIsIGNvbnRleHR1YWxFbGVtZW50KSB7CisgICAgdmFyIG1vcnBoID0gbmV3IE1vcnBoKGRvbUhl
bHBlciwgY29udGV4dHVhbEVsZW1lbnQpOworICAgIG1vcnBoLmNsZWFyKCk7CisgICAgcmV0dXJu
IG1vcnBoOworICB9OworCisgIE1vcnBoLmNyZWF0ZSA9IGZ1bmN0aW9uIChkb21IZWxwZXIsIGNv
bnRleHR1YWxFbGVtZW50LCBub2RlKSB7CisgICAgdmFyIG1vcnBoID0gbmV3IE1vcnBoKGRvbUhl
bHBlciwgY29udGV4dHVhbEVsZW1lbnQpOworICAgIG1vcnBoLnNldE5vZGUobm9kZSk7CisgICAg
cmV0dXJuIG1vcnBoOworICB9OworCisgIE1vcnBoLmF0dGFjaCA9IGZ1bmN0aW9uIChkb21IZWxw
ZXIsIGNvbnRleHR1YWxFbGVtZW50LCBmaXJzdE5vZGUsIGxhc3ROb2RlKSB7CisgICAgdmFyIG1v
cnBoID0gbmV3IE1vcnBoKGRvbUhlbHBlciwgY29udGV4dHVhbEVsZW1lbnQpOworICAgIG1vcnBo
LnNldFJhbmdlKGZpcnN0Tm9kZSwgbGFzdE5vZGUpOworICAgIHJldHVybiBtb3JwaDsKKyAgfTsK
KworICBNb3JwaC5wcm90b3R5cGUuc2V0Q29udGVudCA9IGZ1bmN0aW9uIE1vcnBoJHNldENvbnRl
bnQoY29udGVudCkgeworICAgIGlmIChjb250ZW50ID09PSBudWxsIHx8IGNvbnRlbnQgPT09IHVu
ZGVmaW5lZCkgeworICAgICAgcmV0dXJuIHRoaXMuY2xlYXIoKTsKKyAgICB9CisKKyAgICB2YXIg
dHlwZSA9IHR5cGVvZiBjb250ZW50OworICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgY2FzZSAn
c3RyaW5nJzoKKyAgICAgICAgaWYgKHRoaXMucGFyc2VUZXh0QXNIVE1MKSB7CisgICAgICAgICAg
cmV0dXJuIHRoaXMuZG9tSGVscGVyLnNldE1vcnBoSFRNTCh0aGlzLCBjb250ZW50KTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gdGhpcy5zZXRUZXh0KGNvbnRlbnQpOworICAgICAgY2FzZSAn
b2JqZWN0JzoKKyAgICAgICAgaWYgKHR5cGVvZiBjb250ZW50Lm5vZGVUeXBlID09PSAnbnVtYmVy
JykgeworICAgICAgICAgIHJldHVybiB0aGlzLnNldE5vZGUoY29udGVudCk7CisgICAgICAgIH0K
KyAgICAgICAgLyogSGFuZGxlYmFycy5TYWZlU3RyaW5nICovCisgICAgICAgIGlmICh0eXBlb2Yg
Y29udGVudC50b0hUTUwgPT09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgICByZXR1cm4gdGhpcy5z
ZXRIVE1MKGNvbnRlbnQudG9IVE1MKCkpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLnBh
cnNlVGV4dEFzSFRNTCkgeworICAgICAgICAgIHJldHVybiB0aGlzLnNldEhUTUwoY29udGVudC50
b1N0cmluZygpKTsKKyAgICAgICAgfQorICAgICAgLyogZmFsbHMgdGhyb3VnaCAqLworICAgICAg
Y2FzZSAnYm9vbGVhbic6CisgICAgICBjYXNlICdudW1iZXInOgorICAgICAgICByZXR1cm4gdGhp
cy5zZXRUZXh0KGNvbnRlbnQudG9TdHJpbmcoKSk7CisgICAgICBjYXNlICdmdW5jdGlvbic6Cisg
ICAgICAgIHJhaXNlQ2Fubm90QmluZFRvRnVuY3Rpb24oY29udGVudCk7CisgICAgICBkZWZhdWx0
OgorICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bnN1cHBvcnRlZCBjb250ZW50Jyk7Cisg
ICAgfQorICB9OworCisgIGZ1bmN0aW9uIHJhaXNlQ2Fubm90QmluZFRvRnVuY3Rpb24oY29udGVu
dCkgeworICAgIHZhciBmdW5jdGlvbk5hbWUgPSBjb250ZW50Lm5hbWU7CisgICAgdmFyIG1lc3Nh
Z2U7CisKKyAgICBpZiAoZnVuY3Rpb25OYW1lKSB7CisgICAgICBtZXNzYWdlID0gJ1Vuc3VwcG9y
dGVkIENvbnRlbnQ6IENhbm5vdCBiaW5kIHRvIGZ1bmN0aW9uIGAnICsgZnVuY3Rpb25OYW1lICsg
J2AnOworICAgIH0gZWxzZSB7CisgICAgICBtZXNzYWdlID0gJ1Vuc3VwcG9ydGVkIENvbnRlbnQ6
IENhbm5vdCBiaW5kIHRvIGZ1bmN0aW9uJzsKKyAgICB9CisKKyAgICB0aHJvdyBuZXcgVHlwZUVy
cm9yKG1lc3NhZ2UpOworICB9CisKKyAgTW9ycGgucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24g
TW9ycGgkY2xlYXIoKSB7CisgICAgdmFyIG5vZGUgPSB0aGlzLnNldE5vZGUodGhpcy5kb21IZWxw
ZXIuY3JlYXRlQ29tbWVudCgnJykpOworICAgIHJldHVybiBub2RlOworICB9OworCisgIE1vcnBo
LnByb3RvdHlwZS5zZXRUZXh0ID0gZnVuY3Rpb24gTW9ycGgkc2V0VGV4dCh0ZXh0KSB7CisgICAg
dmFyIGZpcnN0Tm9kZSA9IHRoaXMuZmlyc3ROb2RlOworICAgIHZhciBsYXN0Tm9kZSA9IHRoaXMu
bGFzdE5vZGU7CisKKyAgICBpZiAoZmlyc3ROb2RlICYmIGxhc3ROb2RlID09PSBmaXJzdE5vZGUg
JiYgZmlyc3ROb2RlLm5vZGVUeXBlID09PSAzKSB7CisgICAgICBmaXJzdE5vZGUubm9kZVZhbHVl
ID0gdGV4dDsKKyAgICAgIHJldHVybiBmaXJzdE5vZGU7CisgICAgfQorCisgICAgcmV0dXJuIHRo
aXMuc2V0Tm9kZSh0ZXh0ID8gdGhpcy5kb21IZWxwZXIuY3JlYXRlVGV4dE5vZGUodGV4dCkgOiB0
aGlzLmRvbUhlbHBlci5jcmVhdGVDb21tZW50KCcnKSk7CisgIH07CisKKyAgTW9ycGgucHJvdG90
eXBlLnNldE5vZGUgPSBmdW5jdGlvbiBNb3JwaCRzZXROb2RlKG5ld05vZGUpIHsKKyAgICB2YXIg
Zmlyc3ROb2RlLCBsYXN0Tm9kZTsKKyAgICBzd2l0Y2ggKG5ld05vZGUubm9kZVR5cGUpIHsKKyAg
ICAgIGNhc2UgMzoKKyAgICAgICAgZmlyc3ROb2RlID0gbmV3Tm9kZTsKKyAgICAgICAgbGFzdE5v
ZGUgPSBuZXdOb2RlOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgMTE6CisgICAgICAgIGZp
cnN0Tm9kZSA9IG5ld05vZGUuZmlyc3RDaGlsZDsKKyAgICAgICAgbGFzdE5vZGUgPSBuZXdOb2Rl
Lmxhc3RDaGlsZDsKKyAgICAgICAgaWYgKGZpcnN0Tm9kZSA9PT0gbnVsbCkgeworICAgICAgICAg
IGZpcnN0Tm9kZSA9IHRoaXMuZG9tSGVscGVyLmNyZWF0ZUNvbW1lbnQoJycpOworICAgICAgICAg
IG5ld05vZGUuYXBwZW5kQ2hpbGQoZmlyc3ROb2RlKTsKKyAgICAgICAgICBsYXN0Tm9kZSA9IGZp
cnN0Tm9kZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAg
ICAgIGZpcnN0Tm9kZSA9IG5ld05vZGU7CisgICAgICAgIGxhc3ROb2RlID0gbmV3Tm9kZTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgdGhpcy5zZXRSYW5nZShmaXJzdE5vZGUsIGxhc3RO
b2RlKTsKKworICAgIHJldHVybiBuZXdOb2RlOworICB9OworCisgIE1vcnBoLnByb3RvdHlwZS5z
ZXRSYW5nZSA9IGZ1bmN0aW9uIChmaXJzdE5vZGUsIGxhc3ROb2RlKSB7CisgICAgdmFyIHByZXZp
b3VzRmlyc3ROb2RlID0gdGhpcy5maXJzdE5vZGU7CisgICAgaWYgKHByZXZpb3VzRmlyc3ROb2Rl
ICE9PSBudWxsKSB7CisKKyAgICAgIHZhciBwYXJlbnROb2RlID0gcHJldmlvdXNGaXJzdE5vZGUu
cGFyZW50Tm9kZTsKKyAgICAgIGlmIChwYXJlbnROb2RlICE9PSBudWxsKSB7CisgICAgICAgIF9t
b3JwaFJhbmdlVXRpbHMuaW5zZXJ0QmVmb3JlKHBhcmVudE5vZGUsIGZpcnN0Tm9kZSwgbGFzdE5v
ZGUsIHByZXZpb3VzRmlyc3ROb2RlKTsKKyAgICAgICAgX21vcnBoUmFuZ2VVdGlscy5jbGVhcihw
YXJlbnROb2RlLCBwcmV2aW91c0ZpcnN0Tm9kZSwgdGhpcy5sYXN0Tm9kZSk7CisgICAgICB9Cisg
ICAgfQorCisgICAgdGhpcy5maXJzdE5vZGUgPSBmaXJzdE5vZGU7CisgICAgdGhpcy5sYXN0Tm9k
ZSA9IGxhc3ROb2RlOworCisgICAgaWYgKHRoaXMucGFyZW50TW9ycGhMaXN0KSB7CisgICAgICB0
aGlzLl9zeW5jRmlyc3ROb2RlKCk7CisgICAgICB0aGlzLl9zeW5jTGFzdE5vZGUoKTsKKyAgICB9
CisgIH07CisKKyAgTW9ycGgucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiBNb3JwaCRkZXN0
cm95KCkgeworICAgIHRoaXMudW5saW5rKCk7CisKKyAgICB2YXIgZmlyc3ROb2RlID0gdGhpcy5m
aXJzdE5vZGU7CisgICAgdmFyIGxhc3ROb2RlID0gdGhpcy5sYXN0Tm9kZTsKKyAgICB2YXIgcGFy
ZW50Tm9kZSA9IGZpcnN0Tm9kZSAmJiBmaXJzdE5vZGUucGFyZW50Tm9kZTsKKworICAgIHRoaXMu
Zmlyc3ROb2RlID0gbnVsbDsKKyAgICB0aGlzLmxhc3ROb2RlID0gbnVsbDsKKworICAgIF9tb3Jw
aFJhbmdlVXRpbHMuY2xlYXIocGFyZW50Tm9kZSwgZmlyc3ROb2RlLCBsYXN0Tm9kZSk7CisgIH07
CisKKyAgTW9ycGgucHJvdG90eXBlLnVubGluayA9IGZ1bmN0aW9uIE1vcnBoJHVubGluaygpIHsK
KyAgICB2YXIgcGFyZW50TW9ycGhMaXN0ID0gdGhpcy5wYXJlbnRNb3JwaExpc3Q7CisgICAgdmFy
IHByZXZpb3VzTW9ycGggPSB0aGlzLnByZXZpb3VzTW9ycGg7CisgICAgdmFyIG5leHRNb3JwaCA9
IHRoaXMubmV4dE1vcnBoOworCisgICAgaWYgKHByZXZpb3VzTW9ycGgpIHsKKyAgICAgIGlmIChu
ZXh0TW9ycGgpIHsKKyAgICAgICAgcHJldmlvdXNNb3JwaC5uZXh0TW9ycGggPSBuZXh0TW9ycGg7
CisgICAgICAgIG5leHRNb3JwaC5wcmV2aW91c01vcnBoID0gcHJldmlvdXNNb3JwaDsKKyAgICAg
IH0gZWxzZSB7CisgICAgICAgIHByZXZpb3VzTW9ycGgubmV4dE1vcnBoID0gbnVsbDsKKyAgICAg
ICAgcGFyZW50TW9ycGhMaXN0Lmxhc3RDaGlsZE1vcnBoID0gcHJldmlvdXNNb3JwaDsKKyAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgaWYgKG5leHRNb3JwaCkgeworICAgICAgICBuZXh0TW9y
cGgucHJldmlvdXNNb3JwaCA9IG51bGw7CisgICAgICAgIHBhcmVudE1vcnBoTGlzdC5maXJzdENo
aWxkTW9ycGggPSBuZXh0TW9ycGg7CisgICAgICB9IGVsc2UgaWYgKHBhcmVudE1vcnBoTGlzdCkg
eworICAgICAgICBwYXJlbnRNb3JwaExpc3QubGFzdENoaWxkTW9ycGggPSBwYXJlbnRNb3JwaExp
c3QuZmlyc3RDaGlsZE1vcnBoID0gbnVsbDsKKyAgICAgIH0KKyAgICB9CisKKyAgICB0aGlzLnBh
cmVudE1vcnBoTGlzdCA9IG51bGw7CisgICAgdGhpcy5uZXh0TW9ycGggPSBudWxsOworICAgIHRo
aXMucHJldmlvdXNNb3JwaCA9IG51bGw7CisKKyAgICBpZiAocGFyZW50TW9ycGhMaXN0ICYmIHBh
cmVudE1vcnBoTGlzdC5tb3VudGVkTW9ycGgpIHsKKyAgICAgIGlmICghcGFyZW50TW9ycGhMaXN0
LmZpcnN0Q2hpbGRNb3JwaCkgeworICAgICAgICAvLyBsaXN0IGlzIGVtcHR5CisgICAgICAgIHBh
cmVudE1vcnBoTGlzdC5tb3VudGVkTW9ycGguY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOworICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgcGFyZW50TW9ycGhMaXN0LmZpcnN0Q2hpbGRNb3JwaC5fc3lu
Y0ZpcnN0Tm9kZSgpOworICAgICAgICBwYXJlbnRNb3JwaExpc3QubGFzdENoaWxkTW9ycGguX3N5
bmNMYXN0Tm9kZSgpOworICAgICAgfQorICAgIH0KKyAgfTsKKworICBNb3JwaC5wcm90b3R5cGUu
c2V0SFRNTCA9IGZ1bmN0aW9uICh0ZXh0KSB7CisgICAgdmFyIGZyYWdtZW50ID0gdGhpcy5kb21I
ZWxwZXIucGFyc2VIVE1MKHRleHQsIHRoaXMuY29udGV4dHVhbEVsZW1lbnQpOworICAgIHJldHVy
biB0aGlzLnNldE5vZGUoZnJhZ21lbnQpOworICB9OworCisgIE1vcnBoLnByb3RvdHlwZS5zZXRN
b3JwaExpc3QgPSBmdW5jdGlvbiBNb3JwaCRhcHBlbmRNb3JwaExpc3QobW9ycGhMaXN0KSB7Cisg
ICAgbW9ycGhMaXN0Lm1vdW50ZWRNb3JwaCA9IHRoaXM7CisgICAgdGhpcy5jbGVhcigpOworCisg
ICAgdmFyIG9yaWdpbmFsRmlyc3ROb2RlID0gdGhpcy5maXJzdE5vZGU7CisKKyAgICBpZiAobW9y
cGhMaXN0LmZpcnN0Q2hpbGRNb3JwaCkgeworICAgICAgdGhpcy5maXJzdE5vZGUgPSBtb3JwaExp
c3QuZmlyc3RDaGlsZE1vcnBoLmZpcnN0Tm9kZTsKKyAgICAgIHRoaXMubGFzdE5vZGUgPSBtb3Jw
aExpc3QubGFzdENoaWxkTW9ycGgubGFzdE5vZGU7CisKKyAgICAgIHZhciBjdXJyZW50ID0gbW9y
cGhMaXN0LmZpcnN0Q2hpbGRNb3JwaDsKKworICAgICAgd2hpbGUgKGN1cnJlbnQpIHsKKyAgICAg
ICAgdmFyIG5leHQgPSBjdXJyZW50Lm5leHRNb3JwaDsKKyAgICAgICAgY3VycmVudC5pbnNlcnRC
ZWZvcmVOb2RlKG9yaWdpbmFsRmlyc3ROb2RlLCBudWxsKTsKKyAgICAgICAgY3VycmVudCA9IG5l
eHQ7CisgICAgICB9CisgICAgICBvcmlnaW5hbEZpcnN0Tm9kZS5wYXJlbnROb2RlLnJlbW92ZUNo
aWxkKG9yaWdpbmFsRmlyc3ROb2RlKTsKKyAgICB9CisgIH07CisKKyAgTW9ycGgucHJvdG90eXBl
Ll9zeW5jRmlyc3ROb2RlID0gZnVuY3Rpb24gTW9ycGgkc3luY0ZpcnN0Tm9kZSgpIHsKKyAgICB2
YXIgbW9ycGggPSB0aGlzOworICAgIHZhciBwYXJlbnRNb3JwaExpc3Q7CisgICAgd2hpbGUgKHBh
cmVudE1vcnBoTGlzdCA9IG1vcnBoLnBhcmVudE1vcnBoTGlzdCkgeworICAgICAgaWYgKHBhcmVu
dE1vcnBoTGlzdC5tb3VudGVkTW9ycGggPT09IG51bGwpIHsKKyAgICAgICAgYnJlYWs7CisgICAg
ICB9CisgICAgICBpZiAobW9ycGggIT09IHBhcmVudE1vcnBoTGlzdC5maXJzdENoaWxkTW9ycGgp
IHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpZiAobW9ycGguZmlyc3ROb2RlID09
PSBwYXJlbnRNb3JwaExpc3QubW91bnRlZE1vcnBoLmZpcnN0Tm9kZSkgeworICAgICAgICBicmVh
azsKKyAgICAgIH0KKworICAgICAgcGFyZW50TW9ycGhMaXN0Lm1vdW50ZWRNb3JwaC5maXJzdE5v
ZGUgPSBtb3JwaC5maXJzdE5vZGU7CisKKyAgICAgIG1vcnBoID0gcGFyZW50TW9ycGhMaXN0Lm1v
dW50ZWRNb3JwaDsKKyAgICB9CisgIH07CisKKyAgTW9ycGgucHJvdG90eXBlLl9zeW5jTGFzdE5v
ZGUgPSBmdW5jdGlvbiBNb3JwaCRzeW5jTGFzdE5vZGUoKSB7CisgICAgdmFyIG1vcnBoID0gdGhp
czsKKyAgICB2YXIgcGFyZW50TW9ycGhMaXN0OworICAgIHdoaWxlIChwYXJlbnRNb3JwaExpc3Qg
PSBtb3JwaC5wYXJlbnRNb3JwaExpc3QpIHsKKyAgICAgIGlmIChwYXJlbnRNb3JwaExpc3QubW91
bnRlZE1vcnBoID09PSBudWxsKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgaWYg
KG1vcnBoICE9PSBwYXJlbnRNb3JwaExpc3QubGFzdENoaWxkTW9ycGgpIHsKKyAgICAgICAgYnJl
YWs7CisgICAgICB9CisgICAgICBpZiAobW9ycGgubGFzdE5vZGUgPT09IHBhcmVudE1vcnBoTGlz
dC5tb3VudGVkTW9ycGgubGFzdE5vZGUpIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAg
ICAgIHBhcmVudE1vcnBoTGlzdC5tb3VudGVkTW9ycGgubGFzdE5vZGUgPSBtb3JwaC5sYXN0Tm9k
ZTsKKworICAgICAgbW9ycGggPSBwYXJlbnRNb3JwaExpc3QubW91bnRlZE1vcnBoOworICAgIH0K
KyAgfTsKKworICBNb3JwaC5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlTm9kZSA9IGZ1bmN0aW9uIE1v
cnBoJGluc2VydEJlZm9yZU5vZGUocGFyZW50Tm9kZSwgcmVmTm9kZSkgeworICAgIF9tb3JwaFJh
bmdlVXRpbHMuaW5zZXJ0QmVmb3JlKHBhcmVudE5vZGUsIHRoaXMuZmlyc3ROb2RlLCB0aGlzLmxh
c3ROb2RlLCByZWZOb2RlKTsKKyAgfTsKKworICBNb3JwaC5wcm90b3R5cGUuYXBwZW5kVG9Ob2Rl
ID0gZnVuY3Rpb24gTW9ycGgkYXBwZW5kVG9Ob2RlKHBhcmVudE5vZGUpIHsKKyAgICBfbW9ycGhS
YW5nZVV0aWxzLmluc2VydEJlZm9yZShwYXJlbnROb2RlLCB0aGlzLmZpcnN0Tm9kZSwgdGhpcy5s
YXN0Tm9kZSwgbnVsbCk7CisgIH07CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gTW9ycGg7Cit9KTsK
K2VuaWZlZCgnbW9ycGgtcmFuZ2UvbW9ycGgtbGlzdCcsIFsnZXhwb3J0cycsICdtb3JwaC1yYW5n
ZS91dGlscyddLCBmdW5jdGlvbiAoZXhwb3J0cywgX21vcnBoUmFuZ2VVdGlscykgeworICAndXNl
IHN0cmljdCc7CisKKyAgZnVuY3Rpb24gTW9ycGhMaXN0KCkgeworICAgIC8vIG1vcnBoIGdyYXBo
CisgICAgdGhpcy5maXJzdENoaWxkTW9ycGggPSBudWxsOworICAgIHRoaXMubGFzdENoaWxkTW9y
cGggPSBudWxsOworCisgICAgdGhpcy5tb3VudGVkTW9ycGggPSBudWxsOworICB9CisKKyAgdmFy
IHByb3RvdHlwZSA9IE1vcnBoTGlzdC5wcm90b3R5cGU7CisKKyAgcHJvdG90eXBlLmNsZWFyID0g
ZnVuY3Rpb24gTW9ycGhMaXN0JGNsZWFyKCkgeworICAgIHZhciBjdXJyZW50ID0gdGhpcy5maXJz
dENoaWxkTW9ycGg7CisKKyAgICB3aGlsZSAoY3VycmVudCkgeworICAgICAgdmFyIG5leHQgPSBj
dXJyZW50Lm5leHRNb3JwaDsKKyAgICAgIGN1cnJlbnQucHJldmlvdXNNb3JwaCA9IG51bGw7Cisg
ICAgICBjdXJyZW50Lm5leHRNb3JwaCA9IG51bGw7CisgICAgICBjdXJyZW50LnBhcmVudE1vcnBo
TGlzdCA9IG51bGw7CisgICAgICBjdXJyZW50ID0gbmV4dDsKKyAgICB9CisKKyAgICB0aGlzLmZp
cnN0Q2hpbGRNb3JwaCA9IHRoaXMubGFzdENoaWxkTW9ycGggPSBudWxsOworICB9OworCisgIHBy
b3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gTW9ycGhMaXN0JGRlc3Ryb3koKSB7fTsKKworICBw
cm90b3R5cGUuYXBwZW5kTW9ycGggPSBmdW5jdGlvbiBNb3JwaExpc3QkYXBwZW5kTW9ycGgobW9y
cGgpIHsKKyAgICB0aGlzLmluc2VydEJlZm9yZU1vcnBoKG1vcnBoLCBudWxsKTsKKyAgfTsKKwor
ICBwcm90b3R5cGUuaW5zZXJ0QmVmb3JlTW9ycGggPSBmdW5jdGlvbiBNb3JwaExpc3QkaW5zZXJ0
QmVmb3JlTW9ycGgobW9ycGgsIHJlZmVyZW5jZU1vcnBoKSB7CisgICAgaWYgKG1vcnBoLnBhcmVu
dE1vcnBoTGlzdCAhPT0gbnVsbCkgeworICAgICAgbW9ycGgudW5saW5rKCk7CisgICAgfQorICAg
IGlmIChyZWZlcmVuY2VNb3JwaCAmJiByZWZlcmVuY2VNb3JwaC5wYXJlbnRNb3JwaExpc3QgIT09
IHRoaXMpIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIG1vcnBoIGJlZm9yZSB3aGljaCB0
aGUgbmV3IG1vcnBoIGlzIHRvIGJlIGluc2VydGVkIGlzIG5vdCBhIGNoaWxkIG9mIHRoaXMgbW9y
cGguJyk7CisgICAgfQorCisgICAgdmFyIG1vdW50ZWRNb3JwaCA9IHRoaXMubW91bnRlZE1vcnBo
OworCisgICAgaWYgKG1vdW50ZWRNb3JwaCkgeworCisgICAgICB2YXIgcGFyZW50Tm9kZSA9IG1v
dW50ZWRNb3JwaC5maXJzdE5vZGUucGFyZW50Tm9kZTsKKyAgICAgIHZhciByZWZlcmVuY2VOb2Rl
ID0gcmVmZXJlbmNlTW9ycGggPyByZWZlcmVuY2VNb3JwaC5maXJzdE5vZGUgOiBtb3VudGVkTW9y
cGgubGFzdE5vZGUubmV4dFNpYmxpbmc7CisKKyAgICAgIF9tb3JwaFJhbmdlVXRpbHMuaW5zZXJ0
QmVmb3JlKHBhcmVudE5vZGUsIG1vcnBoLmZpcnN0Tm9kZSwgbW9ycGgubGFzdE5vZGUsIHJlZmVy
ZW5jZU5vZGUpOworCisgICAgICAvLyB3YXMgbm90IGluIGxpc3QgbW9kZSByZXBsYWNlIGN1cnJl
bnQgY29udGVudAorICAgICAgaWYgKCF0aGlzLmZpcnN0Q2hpbGRNb3JwaCkgeworICAgICAgICBf
bW9ycGhSYW5nZVV0aWxzLmNsZWFyKHRoaXMubW91bnRlZE1vcnBoLmZpcnN0Tm9kZS5wYXJlbnRO
b2RlLCB0aGlzLm1vdW50ZWRNb3JwaC5maXJzdE5vZGUsIHRoaXMubW91bnRlZE1vcnBoLmxhc3RO
b2RlKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBtb3JwaC5wYXJlbnRNb3JwaExpc3QgPSB0aGlz
OworCisgICAgdmFyIHByZXZpb3VzTW9ycGggPSByZWZlcmVuY2VNb3JwaCA/IHJlZmVyZW5jZU1v
cnBoLnByZXZpb3VzTW9ycGggOiB0aGlzLmxhc3RDaGlsZE1vcnBoOworICAgIGlmIChwcmV2aW91
c01vcnBoKSB7CisgICAgICBwcmV2aW91c01vcnBoLm5leHRNb3JwaCA9IG1vcnBoOworICAgICAg
bW9ycGgucHJldmlvdXNNb3JwaCA9IHByZXZpb3VzTW9ycGg7CisgICAgfSBlbHNlIHsKKyAgICAg
IHRoaXMuZmlyc3RDaGlsZE1vcnBoID0gbW9ycGg7CisgICAgfQorCisgICAgaWYgKHJlZmVyZW5j
ZU1vcnBoKSB7CisgICAgICByZWZlcmVuY2VNb3JwaC5wcmV2aW91c01vcnBoID0gbW9ycGg7Cisg
ICAgICBtb3JwaC5uZXh0TW9ycGggPSByZWZlcmVuY2VNb3JwaDsKKyAgICB9IGVsc2UgeworICAg
ICAgdGhpcy5sYXN0Q2hpbGRNb3JwaCA9IG1vcnBoOworICAgIH0KKworICAgIHRoaXMuZmlyc3RD
aGlsZE1vcnBoLl9zeW5jRmlyc3ROb2RlKCk7CisgICAgdGhpcy5sYXN0Q2hpbGRNb3JwaC5fc3lu
Y0xhc3ROb2RlKCk7CisgIH07CisKKyAgcHJvdG90eXBlLnJlbW92ZUNoaWxkTW9ycGggPSBmdW5j
dGlvbiBNb3JwaExpc3QkcmVtb3ZlQ2hpbGRNb3JwaChtb3JwaCkgeworICAgIGlmIChtb3JwaC5w
YXJlbnRNb3JwaExpc3QgIT09IHRoaXMpIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigiQ2Fubm90
IHJlbW92ZSBhIG1vcnBoIGZyb20gYSBwYXJlbnQgaXQgaXMgbm90IGluc2lkZSBvZiIpOworICAg
IH0KKworICAgIG1vcnBoLmRlc3Ryb3koKTsKKyAgfTsKKworICBleHBvcnRzLmRlZmF1bHQgPSBN
b3JwaExpc3Q7Cit9KTsKK2VuaWZlZCgnbW9ycGgtcmFuZ2UvbW9ycGgtbGlzdC51bWQnLCBbJ2V4
cG9ydHMnLCAnbW9ycGgtcmFuZ2UvbW9ycGgtbGlzdCddLCBmdW5jdGlvbiAoZXhwb3J0cywgX21v
cnBoUmFuZ2VNb3JwaExpc3QpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIChmdW5jdGlvbiAocm9v
dCwgZmFjdG9yeSkgeworICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRl
ZmluZS5hbWQpIHsKKyAgICAgIGRlZmluZShbXSwgZmFjdG9yeSk7CisgICAgfSBlbHNlIGlmICh0
eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHsKKyAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFj
dG9yeSgpOworICAgIH0gZWxzZSB7CisgICAgICByb290Lk1vcnBoTGlzdCA9IGZhY3RvcnkoKTsK
KyAgICB9CisgIH0pKHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkgeworICAgIHJldHVybiBfbW9ycGhS
YW5nZU1vcnBoTGlzdC5kZWZhdWx0OworICB9KTsKK30pOworZW5pZmVkKCJtb3JwaC1yYW5nZS91
dGlscyIsIFsiZXhwb3J0cyJdLCBmdW5jdGlvbiAoZXhwb3J0cykgeworICAvLyBpbmNsdXNpdmUg
b2YgYm90aCBub2RlcworICAidXNlIHN0cmljdCI7CisKKyAgZXhwb3J0cy5jbGVhciA9IGNsZWFy
OworICBleHBvcnRzLmluc2VydEJlZm9yZSA9IGluc2VydEJlZm9yZTsKKworICBmdW5jdGlvbiBj
bGVhcihwYXJlbnROb2RlLCBmaXJzdE5vZGUsIGxhc3ROb2RlKSB7CisgICAgaWYgKCFwYXJlbnRO
b2RlKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgdmFyIG5vZGUgPSBmaXJzdE5vZGU7
CisgICAgdmFyIG5leHROb2RlOworICAgIGRvIHsKKyAgICAgIG5leHROb2RlID0gbm9kZS5uZXh0
U2libGluZzsKKyAgICAgIHBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7CisgICAgICBpZiAo
bm9kZSA9PT0gbGFzdE5vZGUpIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBub2Rl
ID0gbmV4dE5vZGU7CisgICAgfSB3aGlsZSAobm9kZSk7CisgIH0KKworICBmdW5jdGlvbiBpbnNl
cnRCZWZvcmUocGFyZW50Tm9kZSwgZmlyc3ROb2RlLCBsYXN0Tm9kZSwgcmVmTm9kZSkgeworICAg
IHZhciBub2RlID0gZmlyc3ROb2RlOworICAgIHZhciBuZXh0Tm9kZTsKKyAgICBkbyB7CisgICAg
ICBuZXh0Tm9kZSA9IG5vZGUubmV4dFNpYmxpbmc7CisgICAgICBwYXJlbnROb2RlLmluc2VydEJl
Zm9yZShub2RlLCByZWZOb2RlKTsKKyAgICAgIGlmIChub2RlID09PSBsYXN0Tm9kZSkgeworICAg
ICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIG5vZGUgPSBuZXh0Tm9kZTsKKyAgICB9IHdoaWxl
IChub2RlKTsKKyAgfQorfSk7CitlbmlmZWQoJ3JvdXRlLXJlY29nbml6ZXInLCBbJ2V4cG9ydHMn
LCAncm91dGUtcmVjb2duaXplci9kc2wnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9yb3V0ZVJlY29n
bml6ZXJEc2wpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIHZhciBzcGVjaWFscyA9IFsnLycsICcu
JywgJyonLCAnKycsICc/JywgJ3wnLCAnKCcsICcpJywgJ1snLCAnXScsICd7JywgJ30nLCAnXFwn
XTsKKworICB2YXIgZXNjYXBlUmVnZXggPSBuZXcgUmVnRXhwKCcoXFwnICsgc3BlY2lhbHMuam9p
bignfFxcJykgKyAnKScsICdnJyk7CisKKyAgZnVuY3Rpb24gaXNBcnJheSh0ZXN0KSB7CisgICAg
cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0ZXN0KSA9PT0gIltvYmplY3Qg
QXJyYXldIjsKKyAgfQorCisgIC8vIEEgU2VnbWVudCByZXByZXNlbnRzIGEgc2VnbWVudCBpbiB0
aGUgb3JpZ2luYWwgcm91dGUgZGVzY3JpcHRpb24uCisgIC8vIEVhY2ggU2VnbWVudCB0eXBlIHBy
b3ZpZGVzIGFuIGBlYWNoQ2hhcmAgYW5kIGByZWdleGAgbWV0aG9kLgorICAvLworICAvLyBUaGUg
YGVhY2hDaGFyYCBtZXRob2QgaW52b2tlcyB0aGUgY2FsbGJhY2sgd2l0aCBvbmUgb3IgbW9yZSBj
aGFyYWN0ZXIKKyAgLy8gc3BlY2lmaWNhdGlvbnMuIEEgY2hhcmFjdGVyIHNwZWNpZmljYXRpb24g
Y29uc3VtZXMgb25lIG9yIG1vcmUgaW5wdXQKKyAgLy8gY2hhcmFjdGVycy4KKyAgLy8KKyAgLy8g
VGhlIGByZWdleGAgbWV0aG9kIHJldHVybnMgYSByZWdleCBmcmFnbWVudCBmb3IgdGhlIHNlZ21l
bnQuIElmIHRoZQorICAvLyBzZWdtZW50IGlzIGEgZHluYW1pYyBvZiBzdGFyIHNlZ21lbnQsIHRo
ZSByZWdleCBmcmFnbWVudCBhbHNvIGluY2x1ZGVzCisgIC8vIGEgY2FwdHVyZS4KKyAgLy8KKyAg
Ly8gQSBjaGFyYWN0ZXIgc3BlY2lmaWNhdGlvbiBjb250YWluczoKKyAgLy8KKyAgLy8gKiBgdmFs
aWRDaGFyc2A6IGEgU3RyaW5nIHdpdGggYSBsaXN0IG9mIGFsbCB2YWxpZCBjaGFyYWN0ZXJzLCBv
cgorICAvLyAqIGBpbnZhbGlkQ2hhcnNgOiBhIFN0cmluZyB3aXRoIGEgbGlzdCBvZiBhbGwgaW52
YWxpZCBjaGFyYWN0ZXJzCisgIC8vICogYHJlcGVhdGA6IHRydWUgaWYgdGhlIGNoYXJhY3RlciBz
cGVjaWZpY2F0aW9uIGNhbiByZXBlYXQKKworICBmdW5jdGlvbiBTdGF0aWNTZWdtZW50KHN0cmlu
ZykgeworICAgIHRoaXMuc3RyaW5nID0gc3RyaW5nOworICB9CisgIFN0YXRpY1NlZ21lbnQucHJv
dG90eXBlID0geworICAgIGVhY2hDaGFyOiBmdW5jdGlvbiAoY2FsbGJhY2spIHsKKyAgICAgIHZh
ciBzdHJpbmcgPSB0aGlzLnN0cmluZywKKyAgICAgICAgICBjaDsKKworICAgICAgZm9yICh2YXIg
aSA9IDAsIGwgPSBzdHJpbmcubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CisgICAgICAgIGNoID0gc3Ry
aW5nLmNoYXJBdChpKTsKKyAgICAgICAgY2FsbGJhY2soeyB2YWxpZENoYXJzOiBjaCB9KTsKKyAg
ICAgIH0KKyAgICB9LAorCisgICAgcmVnZXg6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHJldHVybiB0
aGlzLnN0cmluZy5yZXBsYWNlKGVzY2FwZVJlZ2V4LCAnXFwkMScpOworICAgIH0sCisKKyAgICBn
ZW5lcmF0ZTogZnVuY3Rpb24gKCkgeworICAgICAgcmV0dXJuIHRoaXMuc3RyaW5nOworICAgIH0K
KyAgfTsKKworICBmdW5jdGlvbiBEeW5hbWljU2VnbWVudChuYW1lKSB7CisgICAgdGhpcy5uYW1l
ID0gbmFtZTsKKyAgfQorICBEeW5hbWljU2VnbWVudC5wcm90b3R5cGUgPSB7CisgICAgZWFjaENo
YXI6IGZ1bmN0aW9uIChjYWxsYmFjaykgeworICAgICAgY2FsbGJhY2soeyBpbnZhbGlkQ2hhcnM6
ICIvIiwgcmVwZWF0OiB0cnVlIH0pOworICAgIH0sCisKKyAgICByZWdleDogZnVuY3Rpb24gKCkg
eworICAgICAgcmV0dXJuICIoW14vXSspIjsKKyAgICB9LAorCisgICAgZ2VuZXJhdGU6IGZ1bmN0
aW9uIChwYXJhbXMpIHsKKyAgICAgIHJldHVybiBwYXJhbXNbdGhpcy5uYW1lXTsKKyAgICB9Cisg
IH07CisKKyAgZnVuY3Rpb24gU3RhclNlZ21lbnQobmFtZSkgeworICAgIHRoaXMubmFtZSA9IG5h
bWU7CisgIH0KKyAgU3RhclNlZ21lbnQucHJvdG90eXBlID0geworICAgIGVhY2hDaGFyOiBmdW5j
dGlvbiAoY2FsbGJhY2spIHsKKyAgICAgIGNhbGxiYWNrKHsgaW52YWxpZENoYXJzOiAiIiwgcmVw
ZWF0OiB0cnVlIH0pOworICAgIH0sCisKKyAgICByZWdleDogZnVuY3Rpb24gKCkgeworICAgICAg
cmV0dXJuICIoLispIjsKKyAgICB9LAorCisgICAgZ2VuZXJhdGU6IGZ1bmN0aW9uIChwYXJhbXMp
IHsKKyAgICAgIHJldHVybiBwYXJhbXNbdGhpcy5uYW1lXTsKKyAgICB9CisgIH07CisKKyAgZnVu
Y3Rpb24gRXBzaWxvblNlZ21lbnQoKSB7fQorICBFcHNpbG9uU2VnbWVudC5wcm90b3R5cGUgPSB7
CisgICAgZWFjaENoYXI6IGZ1bmN0aW9uICgpIHt9LAorICAgIHJlZ2V4OiBmdW5jdGlvbiAoKSB7
CisgICAgICByZXR1cm4gIiI7CisgICAgfSwKKyAgICBnZW5lcmF0ZTogZnVuY3Rpb24gKCkgewor
ICAgICAgcmV0dXJuICIiOworICAgIH0KKyAgfTsKKworICBmdW5jdGlvbiBwYXJzZShyb3V0ZSwg
bmFtZXMsIHR5cGVzKSB7CisgICAgLy8gbm9ybWFsaXplIHJvdXRlIGFzIG5vdCBzdGFydGluZyB3
aXRoIGEgIi8iLiBSZWNvZ25pdGlvbiB3aWxsCisgICAgLy8gYWxzbyBub3JtYWxpemUuCisgICAg
aWYgKHJvdXRlLmNoYXJBdCgwKSA9PT0gIi8iKSB7CisgICAgICByb3V0ZSA9IHJvdXRlLnN1YnN0
cigxKTsKKyAgICB9CisKKyAgICB2YXIgc2VnbWVudHMgPSByb3V0ZS5zcGxpdCgiLyIpLAorICAg
ICAgICByZXN1bHRzID0gW107CisKKyAgICBmb3IgKHZhciBpID0gMCwgbCA9IHNlZ21lbnRzLmxl
bmd0aDsgaSA8IGw7IGkrKykgeworICAgICAgdmFyIHNlZ21lbnQgPSBzZWdtZW50c1tpXSwKKyAg
ICAgICAgICBtYXRjaDsKKworICAgICAgaWYgKG1hdGNoID0gc2VnbWVudC5tYXRjaCgvXjooW15c
L10rKSQvKSkgeworICAgICAgICByZXN1bHRzLnB1c2gobmV3IER5bmFtaWNTZWdtZW50KG1hdGNo
WzFdKSk7CisgICAgICAgIG5hbWVzLnB1c2gobWF0Y2hbMV0pOworICAgICAgICB0eXBlcy5keW5h
bWljcysrOworICAgICAgfSBlbHNlIGlmIChtYXRjaCA9IHNlZ21lbnQubWF0Y2goL15cKihbXlwv
XSspJC8pKSB7CisgICAgICAgIHJlc3VsdHMucHVzaChuZXcgU3RhclNlZ21lbnQobWF0Y2hbMV0p
KTsKKyAgICAgICAgbmFtZXMucHVzaChtYXRjaFsxXSk7CisgICAgICAgIHR5cGVzLnN0YXJzKys7
CisgICAgICB9IGVsc2UgaWYgKHNlZ21lbnQgPT09ICIiKSB7CisgICAgICAgIHJlc3VsdHMucHVz
aChuZXcgRXBzaWxvblNlZ21lbnQoKSk7CisgICAgICB9IGVsc2UgeworICAgICAgICByZXN1bHRz
LnB1c2gobmV3IFN0YXRpY1NlZ21lbnQoc2VnbWVudCkpOworICAgICAgICB0eXBlcy5zdGF0aWNz
Kys7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdHM7CisgIH0KKworICAvLyBB
IFN0YXRlIGhhcyBhIGNoYXJhY3RlciBzcGVjaWZpY2F0aW9uIGFuZCAoYGNoYXJTcGVjYCkgYW5k
IGEgbGlzdCBvZiBwb3NzaWJsZQorICAvLyBzdWJzZXF1ZW50IHN0YXRlcyAoYG5leHRTdGF0ZXNg
KS4KKyAgLy8KKyAgLy8gSWYgYSBTdGF0ZSBpcyBhbiBhY2NlcHRpbmcgc3RhdGUsIGl0IHdpbGwg
YWxzbyBoYXZlIHNldmVyYWwgYWRkaXRpb25hbAorICAvLyBwcm9wZXJ0aWVzOgorICAvLworICAv
LyAqIGByZWdleGA6IEEgcmVndWxhciBleHByZXNzaW9uIHRoYXQgaXMgdXNlZCB0byBleHRyYWN0
IHBhcmFtZXRlcnMgZnJvbSBwYXRocworICAvLyAgIHRoYXQgcmVhY2hlZCB0aGlzIGFjY2VwdGlu
ZyBzdGF0ZS4KKyAgLy8gKiBgaGFuZGxlcnNgOiBJbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udmVy
dCB0aGUgbGlzdCBvZiBjYXB0dXJlcyBpbnRvIGNhbGxzCisgIC8vICAgdG8gcmVnaXN0ZXJlZCBo
YW5kbGVycyB3aXRoIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycworICAvLyAqIGB0eXBlc2A6IEhv
dyBtYW55IHN0YXRpYywgZHluYW1pYyBvciBzdGFyIHNlZ21lbnRzIGluIHRoaXMgcm91dGUuIFVz
ZWQgdG8KKyAgLy8gICBkZWNpZGUgd2hpY2ggcm91dGUgdG8gdXNlIGlmIG11bHRpcGxlIHJlZ2lz
dGVyZWQgcm91dGVzIG1hdGNoIGEgcGF0aC4KKyAgLy8KKyAgLy8gQ3VycmVudGx5LCBTdGF0ZSBp
cyBpbXBsZW1lbnRlZCBuYWl2ZWx5IGJ5IGxvb3Bpbmcgb3ZlciBgbmV4dFN0YXRlc2AgYW5kCisg
IC8vIGNvbXBhcmluZyBhIGNoYXJhY3RlciBzcGVjaWZpY2F0aW9uIGFnYWluc3QgYSBjaGFyYWN0
ZXIuIEEgbW9yZSBlZmZpY2llbnQKKyAgLy8gaW1wbGVtZW50YXRpb24gd291bGQgdXNlIGEgaGFz
aCBvZiBrZXlzIHBvaW50aW5nIGF0IG9uZSBvciBtb3JlIG5leHQgc3RhdGVzLgorCisgIGZ1bmN0
aW9uIFN0YXRlKGNoYXJTcGVjKSB7CisgICAgdGhpcy5jaGFyU3BlYyA9IGNoYXJTcGVjOworICAg
IHRoaXMubmV4dFN0YXRlcyA9IFtdOworICB9CisKKyAgU3RhdGUucHJvdG90eXBlID0geworICAg
IGdldDogZnVuY3Rpb24gKGNoYXJTcGVjKSB7CisgICAgICB2YXIgbmV4dFN0YXRlcyA9IHRoaXMu
bmV4dFN0YXRlczsKKworICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBuZXh0U3RhdGVzLmxlbmd0
aDsgaSA8IGw7IGkrKykgeworICAgICAgICB2YXIgY2hpbGQgPSBuZXh0U3RhdGVzW2ldOworCisg
ICAgICAgIHZhciBpc0VxdWFsID0gY2hpbGQuY2hhclNwZWMudmFsaWRDaGFycyA9PT0gY2hhclNw
ZWMudmFsaWRDaGFyczsKKyAgICAgICAgaXNFcXVhbCA9IGlzRXF1YWwgJiYgY2hpbGQuY2hhclNw
ZWMuaW52YWxpZENoYXJzID09PSBjaGFyU3BlYy5pbnZhbGlkQ2hhcnM7CisKKyAgICAgICAgaWYg
KGlzRXF1YWwpIHsKKyAgICAgICAgICByZXR1cm4gY2hpbGQ7CisgICAgICAgIH0KKyAgICAgIH0K
KyAgICB9LAorCisgICAgcHV0OiBmdW5jdGlvbiAoY2hhclNwZWMpIHsKKyAgICAgIHZhciBzdGF0
ZTsKKworICAgICAgLy8gSWYgdGhlIGNoYXJhY3RlciBzcGVjaWZpY2F0aW9uIGFscmVhZHkgZXhp
c3RzIGluIGEgY2hpbGQgb2YgdGhlIGN1cnJlbnQKKyAgICAgIC8vIHN0YXRlLCBqdXN0IHJldHVy
biB0aGF0IHN0YXRlLgorICAgICAgaWYgKHN0YXRlID0gdGhpcy5nZXQoY2hhclNwZWMpKSB7Cisg
ICAgICAgIHJldHVybiBzdGF0ZTsKKyAgICAgIH0KKworICAgICAgLy8gTWFrZSBhIG5ldyBzdGF0
ZSBmb3IgdGhlIGNoYXJhY3RlciBzcGVjCisgICAgICBzdGF0ZSA9IG5ldyBTdGF0ZShjaGFyU3Bl
Yyk7CisKKyAgICAgIC8vIEluc2VydCB0aGUgbmV3IHN0YXRlIGFzIGEgY2hpbGQgb2YgdGhlIGN1
cnJlbnQgc3RhdGUKKyAgICAgIHRoaXMubmV4dFN0YXRlcy5wdXNoKHN0YXRlKTsKKworICAgICAg
Ly8gSWYgdGhpcyBjaGFyYWN0ZXIgc3BlY2lmaWNhdGlvbiByZXBlYXRzLCBpbnNlcnQgdGhlIG5l
dyBzdGF0ZSBhcyBhIGNoaWxkCisgICAgICAvLyBvZiBpdHNlbGYuIE5vdGUgdGhhdCB0aGlzIHdp
bGwgbm90IHRyaWdnZXIgYW4gaW5maW5pdGUgbG9vcCBiZWNhdXNlIGVhY2gKKyAgICAgIC8vIHRy
YW5zaXRpb24gZHVyaW5nIHJlY29nbml0aW9uIGNvbnN1bWVzIGEgY2hhcmFjdGVyLgorICAgICAg
aWYgKGNoYXJTcGVjLnJlcGVhdCkgeworICAgICAgICBzdGF0ZS5uZXh0U3RhdGVzLnB1c2goc3Rh
dGUpOworICAgICAgfQorCisgICAgICAvLyBSZXR1cm4gdGhlIG5ldyBzdGF0ZQorICAgICAgcmV0
dXJuIHN0YXRlOworICAgIH0sCisKKyAgICAvLyBGaW5kIGEgbGlzdCBvZiBjaGlsZCBzdGF0ZXMg
bWF0Y2hpbmcgdGhlIG5leHQgY2hhcmFjdGVyCisgICAgbWF0Y2g6IGZ1bmN0aW9uIChjaCkgewor
ICAgICAgLy8gREVCVUcgIlByb2Nlc3NpbmcgYCIgKyBjaCArICJgOiIKKyAgICAgIHZhciBuZXh0
U3RhdGVzID0gdGhpcy5uZXh0U3RhdGVzLAorICAgICAgICAgIGNoaWxkLAorICAgICAgICAgIGNo
YXJTcGVjLAorICAgICAgICAgIGNoYXJzOworCisgICAgICAvLyBERUJVRyAiICAiICsgZGVidWdT
dGF0ZSh0aGlzKQorICAgICAgdmFyIHJldHVybmVkID0gW107CisKKyAgICAgIGZvciAodmFyIGkg
PSAwLCBsID0gbmV4dFN0YXRlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKKyAgICAgICAgY2hpbGQg
PSBuZXh0U3RhdGVzW2ldOworCisgICAgICAgIGNoYXJTcGVjID0gY2hpbGQuY2hhclNwZWM7CisK
KyAgICAgICAgaWYgKHR5cGVvZiAoY2hhcnMgPSBjaGFyU3BlYy52YWxpZENoYXJzKSAhPT0gJ3Vu
ZGVmaW5lZCcpIHsKKyAgICAgICAgICBpZiAoY2hhcnMuaW5kZXhPZihjaCkgIT09IC0xKSB7Cisg
ICAgICAgICAgICByZXR1cm5lZC5wdXNoKGNoaWxkKTsKKyAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSBpZiAodHlwZW9mIChjaGFycyA9IGNoYXJTcGVjLmludmFsaWRDaGFycykgIT09ICd1bmRl
ZmluZWQnKSB7CisgICAgICAgICAgaWYgKGNoYXJzLmluZGV4T2YoY2gpID09PSAtMSkgeworICAg
ICAgICAgICAgcmV0dXJuZWQucHVzaChjaGlsZCk7CisgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICB9CisKKyAgICAgIHJldHVybiByZXR1cm5lZDsKKyAgICB9CisKKyAgICAvKiogSUYgREVC
VUcKKyAgICAsIGRlYnVnOiBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBjaGFyU3BlYyA9IHRoaXMu
Y2hhclNwZWMsCisgICAgICAgICAgZGVidWcgPSAiWyIsCisgICAgICAgICAgY2hhcnMgPSBjaGFy
U3BlYy52YWxpZENoYXJzIHx8IGNoYXJTcGVjLmludmFsaWRDaGFyczsKKyAgICAgICBpZiAoY2hh
clNwZWMuaW52YWxpZENoYXJzKSB7IGRlYnVnICs9ICJeIjsgfQorICAgICAgZGVidWcgKz0gY2hh
cnM7CisgICAgICBkZWJ1ZyArPSAiXSI7CisgICAgICAgaWYgKGNoYXJTcGVjLnJlcGVhdCkgeyBk
ZWJ1ZyArPSAiKyI7IH0KKyAgICAgICByZXR1cm4gZGVidWc7CisgICAgfQorICAgIEVORCBJRiAq
Ki8KKyAgfTsKKworICAvKiogSUYgREVCVUcKKyAgZnVuY3Rpb24gZGVidWcobG9nKSB7CisgICAg
Y29uc29sZS5sb2cobG9nKTsKKyAgfQorICAKKyAgZnVuY3Rpb24gZGVidWdTdGF0ZShzdGF0ZSkg
eworICAgIHJldHVybiBzdGF0ZS5uZXh0U3RhdGVzLm1hcChmdW5jdGlvbihuKSB7CisgICAgICBp
ZiAobi5uZXh0U3RhdGVzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gIiggIiArIG4uZGVidWcoKSAr
ICIgW2FjY2VwdGluZ10gKSI7IH0KKyAgICAgIHJldHVybiAiKCAiICsgbi5kZWJ1ZygpICsgIiA8
dGhlbj4gIiArIG4ubmV4dFN0YXRlcy5tYXAoZnVuY3Rpb24ocykgeyByZXR1cm4gcy5kZWJ1Zygp
IH0pLmpvaW4oIiBvciAiKSArICIgKSI7CisgICAgfSkuam9pbigiLCAiKQorICB9CisgIEVORCBJ
RiAqKi8KKworICAvLyBUaGlzIGlzIGEgc29tZXdoYXQgbmFpdmUgc3RyYXRlZ3ksIGJ1dCBzaG91
bGQgd29yayBpbiBhIGxvdCBvZiBjYXNlcworICAvLyBBIGJldHRlciBzdHJhdGVneSB3b3VsZCBw
cm9wZXJseSByZXNvbHZlIC9wb3N0cy86aWQvbmV3IGFuZCAvcG9zdHMvZWRpdC86aWQuCisgIC8v
CisgIC8vIFRoaXMgc3RyYXRlZ3kgZ2VuZXJhbGx5IHByZWZlcnMgbW9yZSBzdGF0aWMgYW5kIGxl
c3MgZHluYW1pYyBtYXRjaGluZy4KKyAgLy8gU3BlY2lmaWNhbGx5LCBpdAorICAvLworICAvLyAg
KiBwcmVmZXJzIGZld2VyIHN0YXJzIHRvIG1vcmUsIHRoZW4KKyAgLy8gICogcHJlZmVycyB1c2lu
ZyBzdGFycyBmb3IgbGVzcyBvZiB0aGUgbWF0Y2ggdG8gbW9yZSwgdGhlbgorICAvLyAgKiBwcmVm
ZXJzIGZld2VyIGR5bmFtaWMgc2VnbWVudHMgdG8gbW9yZSwgdGhlbgorICAvLyAgKiBwcmVmZXJz
IG1vcmUgc3RhdGljIHNlZ21lbnRzIHRvIG1vcmUKKyAgZnVuY3Rpb24gc29ydFNvbHV0aW9ucyhz
dGF0ZXMpIHsKKyAgICByZXR1cm4gc3RhdGVzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsKKyAgICAg
IGlmIChhLnR5cGVzLnN0YXJzICE9PSBiLnR5cGVzLnN0YXJzKSB7CisgICAgICAgIHJldHVybiBh
LnR5cGVzLnN0YXJzIC0gYi50eXBlcy5zdGFyczsKKyAgICAgIH0KKworICAgICAgaWYgKGEudHlw
ZXMuc3RhcnMpIHsKKyAgICAgICAgaWYgKGEudHlwZXMuc3RhdGljcyAhPT0gYi50eXBlcy5zdGF0
aWNzKSB7CisgICAgICAgICAgcmV0dXJuIGIudHlwZXMuc3RhdGljcyAtIGEudHlwZXMuc3RhdGlj
czsKKyAgICAgICAgfQorICAgICAgICBpZiAoYS50eXBlcy5keW5hbWljcyAhPT0gYi50eXBlcy5k
eW5hbWljcykgeworICAgICAgICAgIHJldHVybiBiLnR5cGVzLmR5bmFtaWNzIC0gYS50eXBlcy5k
eW5hbWljczsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoYS50eXBlcy5keW5hbWlj
cyAhPT0gYi50eXBlcy5keW5hbWljcykgeworICAgICAgICByZXR1cm4gYS50eXBlcy5keW5hbWlj
cyAtIGIudHlwZXMuZHluYW1pY3M7CisgICAgICB9CisgICAgICBpZiAoYS50eXBlcy5zdGF0aWNz
ICE9PSBiLnR5cGVzLnN0YXRpY3MpIHsKKyAgICAgICAgcmV0dXJuIGIudHlwZXMuc3RhdGljcyAt
IGEudHlwZXMuc3RhdGljczsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIDA7CisgICAgfSk7Cisg
IH0KKworICBmdW5jdGlvbiByZWNvZ25pemVDaGFyKHN0YXRlcywgY2gpIHsKKyAgICB2YXIgbmV4
dFN0YXRlcyA9IFtdOworCisgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBzdGF0ZXMubGVuZ3RoOyBp
IDwgbDsgaSsrKSB7CisgICAgICB2YXIgc3RhdGUgPSBzdGF0ZXNbaV07CisKKyAgICAgIG5leHRT
dGF0ZXMgPSBuZXh0U3RhdGVzLmNvbmNhdChzdGF0ZS5tYXRjaChjaCkpOworICAgIH0KKworICAg
IHJldHVybiBuZXh0U3RhdGVzOworICB9CisKKyAgdmFyIG9DcmVhdGUgPSBPYmplY3QuY3JlYXRl
IHx8IGZ1bmN0aW9uIChwcm90bykgeworICAgIGZ1bmN0aW9uIEYoKSB7fQorICAgIEYucHJvdG90
eXBlID0gcHJvdG87CisgICAgcmV0dXJuIG5ldyBGKCk7CisgIH07CisKKyAgZnVuY3Rpb24gUmVj
b2duaXplUmVzdWx0cyhxdWVyeVBhcmFtcykgeworICAgIHRoaXMucXVlcnlQYXJhbXMgPSBxdWVy
eVBhcmFtcyB8fCB7fTsKKyAgfQorICBSZWNvZ25pemVSZXN1bHRzLnByb3RvdHlwZSA9IG9DcmVh
dGUoeworICAgIHNwbGljZTogQXJyYXkucHJvdG90eXBlLnNwbGljZSwKKyAgICBzbGljZTogQXJy
YXkucHJvdG90eXBlLnNsaWNlLAorICAgIHB1c2g6IEFycmF5LnByb3RvdHlwZS5wdXNoLAorICAg
IGxlbmd0aDogMCwKKyAgICBxdWVyeVBhcmFtczogbnVsbAorICB9KTsKKworICBmdW5jdGlvbiBm
aW5kSGFuZGxlcihzdGF0ZSwgcGF0aCwgcXVlcnlQYXJhbXMpIHsKKyAgICB2YXIgaGFuZGxlcnMg
PSBzdGF0ZS5oYW5kbGVycywKKyAgICAgICAgcmVnZXggPSBzdGF0ZS5yZWdleDsKKyAgICB2YXIg
Y2FwdHVyZXMgPSBwYXRoLm1hdGNoKHJlZ2V4KSwKKyAgICAgICAgY3VycmVudENhcHR1cmUgPSAx
OworICAgIHZhciByZXN1bHQgPSBuZXcgUmVjb2duaXplUmVzdWx0cyhxdWVyeVBhcmFtcyk7CisK
KyAgICBmb3IgKHZhciBpID0gMCwgbCA9IGhhbmRsZXJzLmxlbmd0aDsgaSA8IGw7IGkrKykgewor
ICAgICAgdmFyIGhhbmRsZXIgPSBoYW5kbGVyc1tpXSwKKyAgICAgICAgICBuYW1lcyA9IGhhbmRs
ZXIubmFtZXMsCisgICAgICAgICAgcGFyYW1zID0ge307CisKKyAgICAgIGZvciAodmFyIGogPSAw
LCBtID0gbmFtZXMubGVuZ3RoOyBqIDwgbTsgaisrKSB7CisgICAgICAgIHBhcmFtc1tuYW1lc1tq
XV0gPSBjYXB0dXJlc1tjdXJyZW50Q2FwdHVyZSsrXTsKKyAgICAgIH0KKworICAgICAgcmVzdWx0
LnB1c2goeyBoYW5kbGVyOiBoYW5kbGVyLmhhbmRsZXIsIHBhcmFtczogcGFyYW1zLCBpc0R5bmFt
aWM6ICEhbmFtZXMubGVuZ3RoIH0pOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7CisgIH0K
KworICBmdW5jdGlvbiBhZGRTZWdtZW50KGN1cnJlbnRTdGF0ZSwgc2VnbWVudCkgeworICAgIHNl
Z21lbnQuZWFjaENoYXIoZnVuY3Rpb24gKGNoKSB7CisgICAgICB2YXIgc3RhdGU7CisKKyAgICAg
IGN1cnJlbnRTdGF0ZSA9IGN1cnJlbnRTdGF0ZS5wdXQoY2gpOworICAgIH0pOworCisgICAgcmV0
dXJuIGN1cnJlbnRTdGF0ZTsKKyAgfQorCisgIGZ1bmN0aW9uIGRlY29kZVF1ZXJ5UGFyYW1QYXJ0
KHBhcnQpIHsKKyAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNDAxL2ludGVyYWN0L2Zv
cm1zLmh0bWwjaC0xNy4xMy40LjEKKyAgICBwYXJ0ID0gcGFydC5yZXBsYWNlKC9cKy9nbSwgJyUy
MCcpOworICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQocGFydCk7CisgIH0KKworICAvLyBU
aGUgbWFpbiBpbnRlcmZhY2UKKworICB2YXIgUm91dGVSZWNvZ25pemVyID0gZnVuY3Rpb24gKCkg
eworICAgIHRoaXMucm9vdFN0YXRlID0gbmV3IFN0YXRlKCk7CisgICAgdGhpcy5uYW1lcyA9IHt9
OworICB9OworCisgIFJvdXRlUmVjb2duaXplci5wcm90b3R5cGUgPSB7CisgICAgYWRkOiBmdW5j
dGlvbiAocm91dGVzLCBvcHRpb25zKSB7CisgICAgICB2YXIgY3VycmVudFN0YXRlID0gdGhpcy5y
b290U3RhdGUsCisgICAgICAgICAgcmVnZXggPSAiXiIsCisgICAgICAgICAgdHlwZXMgPSB7IHN0
YXRpY3M6IDAsIGR5bmFtaWNzOiAwLCBzdGFyczogMCB9LAorICAgICAgICAgIGhhbmRsZXJzID0g
W10sCisgICAgICAgICAgYWxsU2VnbWVudHMgPSBbXSwKKyAgICAgICAgICBuYW1lOworCisgICAg
ICB2YXIgaXNFbXB0eSA9IHRydWU7CisKKyAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcm91dGVz
Lmxlbmd0aDsgaSA8IGw7IGkrKykgeworICAgICAgICB2YXIgcm91dGUgPSByb3V0ZXNbaV0sCisg
ICAgICAgICAgICBuYW1lcyA9IFtdOworCisgICAgICAgIHZhciBzZWdtZW50cyA9IHBhcnNlKHJv
dXRlLnBhdGgsIG5hbWVzLCB0eXBlcyk7CisKKyAgICAgICAgYWxsU2VnbWVudHMgPSBhbGxTZWdt
ZW50cy5jb25jYXQoc2VnbWVudHMpOworCisgICAgICAgIGZvciAodmFyIGogPSAwLCBtID0gc2Vn
bWVudHMubGVuZ3RoOyBqIDwgbTsgaisrKSB7CisgICAgICAgICAgdmFyIHNlZ21lbnQgPSBzZWdt
ZW50c1tqXTsKKworICAgICAgICAgIGlmIChzZWdtZW50IGluc3RhbmNlb2YgRXBzaWxvblNlZ21l
bnQpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIH0KKworICAgICAgICAgIGlz
RW1wdHkgPSBmYWxzZTsKKworICAgICAgICAgIC8vIEFkZCBhICIvIiBmb3IgdGhlIG5ldyBzZWdt
ZW50CisgICAgICAgICAgY3VycmVudFN0YXRlID0gY3VycmVudFN0YXRlLnB1dCh7IHZhbGlkQ2hh
cnM6ICIvIiB9KTsKKyAgICAgICAgICByZWdleCArPSAiLyI7CisKKyAgICAgICAgICAvLyBBZGQg
YSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc2VnbWVudCB0byB0aGUgTkZBIGFuZCByZWdleAorICAg
ICAgICAgIGN1cnJlbnRTdGF0ZSA9IGFkZFNlZ21lbnQoY3VycmVudFN0YXRlLCBzZWdtZW50KTsK
KyAgICAgICAgICByZWdleCArPSBzZWdtZW50LnJlZ2V4KCk7CisgICAgICAgIH0KKworICAgICAg
ICB2YXIgaGFuZGxlciA9IHsgaGFuZGxlcjogcm91dGUuaGFuZGxlciwgbmFtZXM6IG5hbWVzIH07
CisgICAgICAgIGhhbmRsZXJzLnB1c2goaGFuZGxlcik7CisgICAgICB9CisKKyAgICAgIGlmIChp
c0VtcHR5KSB7CisgICAgICAgIGN1cnJlbnRTdGF0ZSA9IGN1cnJlbnRTdGF0ZS5wdXQoeyB2YWxp
ZENoYXJzOiAiLyIgfSk7CisgICAgICAgIHJlZ2V4ICs9ICIvIjsKKyAgICAgIH0KKworICAgICAg
Y3VycmVudFN0YXRlLmhhbmRsZXJzID0gaGFuZGxlcnM7CisgICAgICBjdXJyZW50U3RhdGUucmVn
ZXggPSBuZXcgUmVnRXhwKHJlZ2V4ICsgIiQiKTsKKyAgICAgIGN1cnJlbnRTdGF0ZS50eXBlcyA9
IHR5cGVzOworCisgICAgICBpZiAobmFtZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5hcykgeworICAg
ICAgICB0aGlzLm5hbWVzW25hbWVdID0geworICAgICAgICAgIHNlZ21lbnRzOiBhbGxTZWdtZW50
cywKKyAgICAgICAgICBoYW5kbGVyczogaGFuZGxlcnMKKyAgICAgICAgfTsKKyAgICAgIH0KKyAg
ICB9LAorCisgICAgaGFuZGxlcnNGb3I6IGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICB2YXIgcm91
dGUgPSB0aGlzLm5hbWVzW25hbWVdLAorICAgICAgICAgIHJlc3VsdCA9IFtdOworICAgICAgaWYg
KCFyb3V0ZSkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlRoZXJlIGlzIG5vIHJvdXRlIG5h
bWVkICIgKyBuYW1lKTsKKyAgICAgIH0KKworICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSByb3V0
ZS5oYW5kbGVycy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKKyAgICAgICAgcmVzdWx0LnB1c2gocm91
dGUuaGFuZGxlcnNbaV0pOworICAgICAgfQorCisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0s
CisKKyAgICBoYXNSb3V0ZTogZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgIHJldHVybiAhIXRoaXMu
bmFtZXNbbmFtZV07CisgICAgfSwKKworICAgIGdlbmVyYXRlOiBmdW5jdGlvbiAobmFtZSwgcGFy
YW1zKSB7CisgICAgICB2YXIgcm91dGUgPSB0aGlzLm5hbWVzW25hbWVdLAorICAgICAgICAgIG91
dHB1dCA9ICIiOworICAgICAgaWYgKCFyb3V0ZSkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
IlRoZXJlIGlzIG5vIHJvdXRlIG5hbWVkICIgKyBuYW1lKTsKKyAgICAgIH0KKworICAgICAgdmFy
IHNlZ21lbnRzID0gcm91dGUuc2VnbWVudHM7CisKKyAgICAgIGZvciAodmFyIGkgPSAwLCBsID0g
c2VnbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CisgICAgICAgIHZhciBzZWdtZW50ID0gc2Vn
bWVudHNbaV07CisKKyAgICAgICAgaWYgKHNlZ21lbnQgaW5zdGFuY2VvZiBFcHNpbG9uU2VnbWVu
dCkgeworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgb3V0cHV0ICs9
ICIvIjsKKyAgICAgICAgb3V0cHV0ICs9IHNlZ21lbnQuZ2VuZXJhdGUocGFyYW1zKTsKKyAgICAg
IH0KKworICAgICAgaWYgKG91dHB1dC5jaGFyQXQoMCkgIT09ICcvJykgeworICAgICAgICBvdXRw
dXQgPSAnLycgKyBvdXRwdXQ7CisgICAgICB9CisKKyAgICAgIGlmIChwYXJhbXMgJiYgcGFyYW1z
LnF1ZXJ5UGFyYW1zKSB7CisgICAgICAgIG91dHB1dCArPSB0aGlzLmdlbmVyYXRlUXVlcnlTdHJp
bmcocGFyYW1zLnF1ZXJ5UGFyYW1zLCByb3V0ZS5oYW5kbGVycyk7CisgICAgICB9CisKKyAgICAg
IHJldHVybiBvdXRwdXQ7CisgICAgfSwKKworICAgIGdlbmVyYXRlUXVlcnlTdHJpbmc6IGZ1bmN0
aW9uIChwYXJhbXMsIGhhbmRsZXJzKSB7CisgICAgICB2YXIgcGFpcnMgPSBbXTsKKyAgICAgIHZh
ciBrZXlzID0gW107CisgICAgICBmb3IgKHZhciBrZXkgaW4gcGFyYW1zKSB7CisgICAgICAgIGlm
IChwYXJhbXMuaGFzT3duUHJvcGVydHkoa2V5KSkgeworICAgICAgICAgIGtleXMucHVzaChrZXkp
OworICAgICAgICB9CisgICAgICB9CisgICAgICBrZXlzLnNvcnQoKTsKKyAgICAgIGZvciAodmFy
IGkgPSAwLCBsZW4gPSBrZXlzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgIGtleSA9
IGtleXNbaV07CisgICAgICAgIHZhciB2YWx1ZSA9IHBhcmFtc1trZXldOworICAgICAgICBpZiAo
dmFsdWUgPT0gbnVsbCkgeworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAg
IHZhciBwYWlyID0gZW5jb2RlVVJJQ29tcG9uZW50KGtleSk7CisgICAgICAgIGlmIChpc0FycmF5
KHZhbHVlKSkgeworICAgICAgICAgIGZvciAodmFyIGogPSAwLCBsID0gdmFsdWUubGVuZ3RoOyBq
IDwgbDsgaisrKSB7CisgICAgICAgICAgICB2YXIgYXJyYXlQYWlyID0ga2V5ICsgJ1tdJyArICc9
JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZVtqXSk7CisgICAgICAgICAgICBwYWlycy5wdXNo
KGFycmF5UGFpcik7CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHBh
aXIgKz0gIj0iICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTsKKyAgICAgICAgICBwYWlycy5w
dXNoKHBhaXIpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmIChwYWlycy5sZW5ndGgg
PT09IDApIHsKKyAgICAgICAgcmV0dXJuICcnOworICAgICAgfQorCisgICAgICByZXR1cm4gIj8i
ICsgcGFpcnMuam9pbigiJiIpOworICAgIH0sCisKKyAgICBwYXJzZVF1ZXJ5U3RyaW5nOiBmdW5j
dGlvbiAocXVlcnlTdHJpbmcpIHsKKyAgICAgIHZhciBwYWlycyA9IHF1ZXJ5U3RyaW5nLnNwbGl0
KCImIiksCisgICAgICAgICAgcXVlcnlQYXJhbXMgPSB7fTsKKyAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgcGFpcnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdmFyIHBhaXIgPSBwYWlyc1tpXS5z
cGxpdCgnPScpLAorICAgICAgICAgICAga2V5ID0gZGVjb2RlUXVlcnlQYXJhbVBhcnQocGFpclsw
XSksCisgICAgICAgICAgICBrZXlMZW5ndGggPSBrZXkubGVuZ3RoLAorICAgICAgICAgICAgaXNB
cnJheSA9IGZhbHNlLAorICAgICAgICAgICAgdmFsdWU7CisgICAgICAgIGlmIChwYWlyLmxlbmd0
aCA9PT0gMSkgeworICAgICAgICAgIHZhbHVlID0gJ3RydWUnOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgIC8vSGFuZGxlIGFycmF5cworICAgICAgICAgIGlmIChrZXlMZW5ndGggPiAyICYm
IGtleS5zbGljZShrZXlMZW5ndGggLSAyKSA9PT0gJ1tdJykgeworICAgICAgICAgICAgaXNBcnJh
eSA9IHRydWU7CisgICAgICAgICAgICBrZXkgPSBrZXkuc2xpY2UoMCwga2V5TGVuZ3RoIC0gMik7
CisgICAgICAgICAgICBpZiAoIXF1ZXJ5UGFyYW1zW2tleV0pIHsKKyAgICAgICAgICAgICAgcXVl
cnlQYXJhbXNba2V5XSA9IFtdOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAg
ICB2YWx1ZSA9IHBhaXJbMV0gPyBkZWNvZGVRdWVyeVBhcmFtUGFydChwYWlyWzFdKSA6ICcnOwor
ICAgICAgICB9CisgICAgICAgIGlmIChpc0FycmF5KSB7CisgICAgICAgICAgcXVlcnlQYXJhbXNb
a2V5XS5wdXNoKHZhbHVlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBxdWVyeVBhcmFt
c1trZXldID0gdmFsdWU7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHJldHVybiBxdWVyeVBh
cmFtczsKKyAgICB9LAorCisgICAgcmVjb2duaXplOiBmdW5jdGlvbiAocGF0aCkgeworICAgICAg
dmFyIHN0YXRlcyA9IFt0aGlzLnJvb3RTdGF0ZV0sCisgICAgICAgICAgcGF0aExlbiwKKyAgICAg
ICAgICBpLAorICAgICAgICAgIGwsCisgICAgICAgICAgcXVlcnlTdGFydCwKKyAgICAgICAgICBx
dWVyeVBhcmFtcyA9IHt9LAorICAgICAgICAgIGlzU2xhc2hEcm9wcGVkID0gZmFsc2U7CisKKyAg
ICAgIHF1ZXJ5U3RhcnQgPSBwYXRoLmluZGV4T2YoJz8nKTsKKyAgICAgIGlmIChxdWVyeVN0YXJ0
ICE9PSAtMSkgeworICAgICAgICB2YXIgcXVlcnlTdHJpbmcgPSBwYXRoLnN1YnN0cihxdWVyeVN0
YXJ0ICsgMSwgcGF0aC5sZW5ndGgpOworICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHIoMCwgcXVl
cnlTdGFydCk7CisgICAgICAgIHF1ZXJ5UGFyYW1zID0gdGhpcy5wYXJzZVF1ZXJ5U3RyaW5nKHF1
ZXJ5U3RyaW5nKTsKKyAgICAgIH0KKworICAgICAgcGF0aCA9IGRlY29kZVVSSShwYXRoKTsKKwor
ICAgICAgLy8gREVCVUcgR1JPVVAgcGF0aAorCisgICAgICBpZiAocGF0aC5jaGFyQXQoMCkgIT09
ICIvIikgeworICAgICAgICBwYXRoID0gIi8iICsgcGF0aDsKKyAgICAgIH0KKworICAgICAgcGF0
aExlbiA9IHBhdGgubGVuZ3RoOworICAgICAgaWYgKHBhdGhMZW4gPiAxICYmIHBhdGguY2hhckF0
KHBhdGhMZW4gLSAxKSA9PT0gIi8iKSB7CisgICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cigwLCBw
YXRoTGVuIC0gMSk7CisgICAgICAgIGlzU2xhc2hEcm9wcGVkID0gdHJ1ZTsKKyAgICAgIH0KKwor
ICAgICAgZm9yIChpID0gMCwgbCA9IHBhdGgubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CisgICAgICAg
IHN0YXRlcyA9IHJlY29nbml6ZUNoYXIoc3RhdGVzLCBwYXRoLmNoYXJBdChpKSk7CisgICAgICAg
IGlmICghc3RhdGVzLmxlbmd0aCkgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICB9CisKKyAgICAgIC8vIEVORCBERUJVRyBHUk9VUAorCisgICAgICB2YXIgc29sdXRpb25zID0g
W107CisgICAgICBmb3IgKGkgPSAwLCBsID0gc3RhdGVzLmxlbmd0aDsgaSA8IGw7IGkrKykgewor
ICAgICAgICBpZiAoc3RhdGVzW2ldLmhhbmRsZXJzKSB7CisgICAgICAgICAgc29sdXRpb25zLnB1
c2goc3RhdGVzW2ldKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBzdGF0ZXMgPSBzb3J0
U29sdXRpb25zKHNvbHV0aW9ucyk7CisKKyAgICAgIHZhciBzdGF0ZSA9IHNvbHV0aW9uc1swXTsK
KworICAgICAgaWYgKHN0YXRlICYmIHN0YXRlLmhhbmRsZXJzKSB7CisgICAgICAgIC8vIGlmIGEg
dHJhaWxpbmcgc2xhc2ggd2FzIGRyb3BwZWQgYW5kIGEgc3RhciBzZWdtZW50IGlzIHRoZSBsYXN0
IHNlZ21lbnQKKyAgICAgICAgLy8gc3BlY2lmaWVkLCBwdXQgdGhlIHRyYWlsaW5nIHNsYXNoIGJh
Y2sKKyAgICAgICAgaWYgKGlzU2xhc2hEcm9wcGVkICYmIHN0YXRlLnJlZ2V4LnNvdXJjZS5zbGlj
ZSgtNSkgPT09ICIoLispJCIpIHsKKyAgICAgICAgICBwYXRoID0gcGF0aCArICIvIjsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gZmluZEhhbmRsZXIoc3RhdGUsIHBhdGgsIHF1ZXJ5UGFyYW1z
KTsKKyAgICAgIH0KKyAgICB9CisgIH07CisKKyAgUm91dGVSZWNvZ25pemVyLnByb3RvdHlwZS5t
YXAgPSBfcm91dGVSZWNvZ25pemVyRHNsLmRlZmF1bHQ7CisKKyAgUm91dGVSZWNvZ25pemVyLlZF
UlNJT04gPSAnMC4xLjUnOworCisgIGV4cG9ydHMuZGVmYXVsdCA9IFJvdXRlUmVjb2duaXplcjsK
K30pOworZW5pZmVkKCJyb3V0ZS1yZWNvZ25pemVyL2RzbCIsIFsiZXhwb3J0cyJdLCBmdW5jdGlv
biAoZXhwb3J0cykgeworICAidXNlIHN0cmljdCI7CisKKyAgZnVuY3Rpb24gVGFyZ2V0KHBhdGgs
IG1hdGNoZXIsIGRlbGVnYXRlKSB7CisgICAgdGhpcy5wYXRoID0gcGF0aDsKKyAgICB0aGlzLm1h
dGNoZXIgPSBtYXRjaGVyOworICAgIHRoaXMuZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKKyAgfQorCisg
IFRhcmdldC5wcm90b3R5cGUgPSB7CisgICAgdG86IGZ1bmN0aW9uICh0YXJnZXQsIGNhbGxiYWNr
KSB7CisgICAgICB2YXIgZGVsZWdhdGUgPSB0aGlzLmRlbGVnYXRlOworCisgICAgICBpZiAoZGVs
ZWdhdGUgJiYgZGVsZWdhdGUud2lsbEFkZFJvdXRlKSB7CisgICAgICAgIHRhcmdldCA9IGRlbGVn
YXRlLndpbGxBZGRSb3V0ZSh0aGlzLm1hdGNoZXIudGFyZ2V0LCB0YXJnZXQpOworICAgICAgfQor
CisgICAgICB0aGlzLm1hdGNoZXIuYWRkKHRoaXMucGF0aCwgdGFyZ2V0KTsKKworICAgICAgaWYg
KGNhbGxiYWNrKSB7CisgICAgICAgIGlmIChjYWxsYmFjay5sZW5ndGggPT09IDApIHsKKyAgICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoIllvdSBtdXN0IGhhdmUgYW4gYXJndW1lbnQgaW4gdGhlIGZ1
bmN0aW9uIHBhc3NlZCB0byBgdG9gIik7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5tYXRjaGVy
LmFkZENoaWxkKHRoaXMucGF0aCwgdGFyZ2V0LCBjYWxsYmFjaywgdGhpcy5kZWxlZ2F0ZSk7Cisg
ICAgICB9CisgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisgIH07CisKKyAgZnVuY3Rpb24gTWF0
Y2hlcih0YXJnZXQpIHsKKyAgICB0aGlzLnJvdXRlcyA9IHt9OworICAgIHRoaXMuY2hpbGRyZW4g
PSB7fTsKKyAgICB0aGlzLnRhcmdldCA9IHRhcmdldDsKKyAgfQorCisgIE1hdGNoZXIucHJvdG90
eXBlID0geworICAgIGFkZDogZnVuY3Rpb24gKHBhdGgsIGhhbmRsZXIpIHsKKyAgICAgIHRoaXMu
cm91dGVzW3BhdGhdID0gaGFuZGxlcjsKKyAgICB9LAorCisgICAgYWRkQ2hpbGQ6IGZ1bmN0aW9u
IChwYXRoLCB0YXJnZXQsIGNhbGxiYWNrLCBkZWxlZ2F0ZSkgeworICAgICAgdmFyIG1hdGNoZXIg
PSBuZXcgTWF0Y2hlcih0YXJnZXQpOworICAgICAgdGhpcy5jaGlsZHJlbltwYXRoXSA9IG1hdGNo
ZXI7CisKKyAgICAgIHZhciBtYXRjaCA9IGdlbmVyYXRlTWF0Y2gocGF0aCwgbWF0Y2hlciwgZGVs
ZWdhdGUpOworCisgICAgICBpZiAoZGVsZWdhdGUgJiYgZGVsZWdhdGUuY29udGV4dEVudGVyZWQp
IHsKKyAgICAgICAgZGVsZWdhdGUuY29udGV4dEVudGVyZWQodGFyZ2V0LCBtYXRjaCk7CisgICAg
ICB9CisKKyAgICAgIGNhbGxiYWNrKG1hdGNoKTsKKyAgICB9CisgIH07CisKKyAgZnVuY3Rpb24g
Z2VuZXJhdGVNYXRjaChzdGFydGluZ1BhdGgsIG1hdGNoZXIsIGRlbGVnYXRlKSB7CisgICAgcmV0
dXJuIGZ1bmN0aW9uIChwYXRoLCBuZXN0ZWRDYWxsYmFjaykgeworICAgICAgdmFyIGZ1bGxQYXRo
ID0gc3RhcnRpbmdQYXRoICsgcGF0aDsKKworICAgICAgaWYgKG5lc3RlZENhbGxiYWNrKSB7Cisg
ICAgICAgIG5lc3RlZENhbGxiYWNrKGdlbmVyYXRlTWF0Y2goZnVsbFBhdGgsIG1hdGNoZXIsIGRl
bGVnYXRlKSk7CisgICAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gbmV3IFRhcmdldChzdGFy
dGluZ1BhdGggKyBwYXRoLCBtYXRjaGVyLCBkZWxlZ2F0ZSk7CisgICAgICB9CisgICAgfTsKKyAg
fQorCisgIGZ1bmN0aW9uIGFkZFJvdXRlKHJvdXRlQXJyYXksIHBhdGgsIGhhbmRsZXIpIHsKKyAg
ICB2YXIgbGVuID0gMDsKKyAgICBmb3IgKHZhciBpID0gMCwgbCA9IHJvdXRlQXJyYXkubGVuZ3Ro
OyBpIDwgbDsgaSsrKSB7CisgICAgICBsZW4gKz0gcm91dGVBcnJheVtpXS5wYXRoLmxlbmd0aDsK
KyAgICB9CisKKyAgICBwYXRoID0gcGF0aC5zdWJzdHIobGVuKTsKKyAgICB2YXIgcm91dGUgPSB7
IHBhdGg6IHBhdGgsIGhhbmRsZXI6IGhhbmRsZXIgfTsKKyAgICByb3V0ZUFycmF5LnB1c2gocm91
dGUpOworICB9CisKKyAgZnVuY3Rpb24gZWFjaFJvdXRlKGJhc2VSb3V0ZSwgbWF0Y2hlciwgY2Fs
bGJhY2ssIGJpbmRpbmcpIHsKKyAgICB2YXIgcm91dGVzID0gbWF0Y2hlci5yb3V0ZXM7CisKKyAg
ICBmb3IgKHZhciBwYXRoIGluIHJvdXRlcykgeworICAgICAgaWYgKHJvdXRlcy5oYXNPd25Qcm9w
ZXJ0eShwYXRoKSkgeworICAgICAgICB2YXIgcm91dGVBcnJheSA9IGJhc2VSb3V0ZS5zbGljZSgp
OworICAgICAgICBhZGRSb3V0ZShyb3V0ZUFycmF5LCBwYXRoLCByb3V0ZXNbcGF0aF0pOworCisg
ICAgICAgIGlmIChtYXRjaGVyLmNoaWxkcmVuW3BhdGhdKSB7CisgICAgICAgICAgZWFjaFJvdXRl
KHJvdXRlQXJyYXksIG1hdGNoZXIuY2hpbGRyZW5bcGF0aF0sIGNhbGxiYWNrLCBiaW5kaW5nKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBjYWxsYmFjay5jYWxsKGJpbmRpbmcsIHJvdXRl
QXJyYXkpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKyAgZXhwb3J0cy5kZWZh
dWx0ID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBhZGRSb3V0ZUNhbGxiYWNrKSB7CisgICAgdmFyIG1h
dGNoZXIgPSBuZXcgTWF0Y2hlcigpOworCisgICAgY2FsbGJhY2soZ2VuZXJhdGVNYXRjaCgiIiwg
bWF0Y2hlciwgdGhpcy5kZWxlZ2F0ZSkpOworCisgICAgZWFjaFJvdXRlKFtdLCBtYXRjaGVyLCBm
dW5jdGlvbiAocm91dGUpIHsKKyAgICAgIGlmIChhZGRSb3V0ZUNhbGxiYWNrKSB7CisgICAgICAg
IGFkZFJvdXRlQ2FsbGJhY2sodGhpcywgcm91dGUpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAg
dGhpcy5hZGQocm91dGUpOworICAgICAgfQorICAgIH0sIHRoaXMpOworICB9OworfSk7Citlbmlm
ZWQoJ3JvdXRlcicsIFsnZXhwb3J0cycsICdyb3V0ZXIvcm91dGVyJ10sIGZ1bmN0aW9uIChleHBv
cnRzLCBfcm91dGVyUm91dGVyKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICBleHBvcnRzLmRlZmF1
bHQgPSBfcm91dGVyUm91dGVyLmRlZmF1bHQ7Cit9KTsKK2VuaWZlZCgncm91dGVyL2hhbmRsZXIt
aW5mbycsIFsnZXhwb3J0cycsICdyb3V0ZXIvdXRpbHMnLCAncnN2cC9wcm9taXNlJ10sIGZ1bmN0
aW9uIChleHBvcnRzLCBfcm91dGVyVXRpbHMsIF9yc3ZwUHJvbWlzZSkgeworICAndXNlIHN0cmlj
dCc7CisKKyAgZnVuY3Rpb24gSGFuZGxlckluZm8oX3Byb3BzKSB7CisgICAgdmFyIHByb3BzID0g
X3Byb3BzIHx8IHt9OworICAgIF9yb3V0ZXJVdGlscy5tZXJnZSh0aGlzLCBwcm9wcyk7CisgICAg
dGhpcy5pbml0aWFsaXplKHByb3BzKTsKKyAgfQorCisgIEhhbmRsZXJJbmZvLnByb3RvdHlwZSA9
IHsKKyAgICBuYW1lOiBudWxsLAorICAgIGhhbmRsZXI6IG51bGwsCisgICAgcGFyYW1zOiBudWxs
LAorICAgIGNvbnRleHQ6IG51bGwsCisKKyAgICAvLyBJbmplY3RlZCBieSB0aGUgaGFuZGxlciBp
bmZvIGZhY3RvcnkuCisgICAgZmFjdG9yeTogbnVsbCwKKworICAgIGluaXRpYWxpemU6IGZ1bmN0
aW9uICgpIHt9LAorCisgICAgbG9nOiBmdW5jdGlvbiAocGF5bG9hZCwgbWVzc2FnZSkgeworICAg
ICAgaWYgKHBheWxvYWQubG9nKSB7CisgICAgICAgIHBheWxvYWQubG9nKHRoaXMubmFtZSArICc6
ICcgKyBtZXNzYWdlKTsKKyAgICAgIH0KKyAgICB9LAorCisgICAgcHJvbWlzZUxhYmVsOiBmdW5j
dGlvbiAobGFiZWwpIHsKKyAgICAgIHJldHVybiBfcm91dGVyVXRpbHMucHJvbWlzZUxhYmVsKCIn
IiArIHRoaXMubmFtZSArICInICIgKyBsYWJlbCk7CisgICAgfSwKKworICAgIGdldFVucmVzb2x2
ZWQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHJldHVybiB0aGlzOworICAgIH0sCisKKyAgICBzZXJp
YWxpemU6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHJldHVybiB0aGlzLnBhcmFtcyB8fCB7fTsKKyAg
ICB9LAorCisgICAgcmVzb2x2ZTogZnVuY3Rpb24gKHNob3VsZENvbnRpbnVlLCBwYXlsb2FkKSB7
CisgICAgICB2YXIgY2hlY2tGb3JBYm9ydCA9IF9yb3V0ZXJVdGlscy5iaW5kKHRoaXMsIHRoaXMu
Y2hlY2tGb3JBYm9ydCwgc2hvdWxkQ29udGludWUpLAorICAgICAgICAgIGJlZm9yZU1vZGVsID0g
X3JvdXRlclV0aWxzLmJpbmQodGhpcywgdGhpcy5ydW5CZWZvcmVNb2RlbEhvb2ssIHBheWxvYWQp
LAorICAgICAgICAgIG1vZGVsID0gX3JvdXRlclV0aWxzLmJpbmQodGhpcywgdGhpcy5nZXRNb2Rl
bCwgcGF5bG9hZCksCisgICAgICAgICAgYWZ0ZXJNb2RlbCA9IF9yb3V0ZXJVdGlscy5iaW5kKHRo
aXMsIHRoaXMucnVuQWZ0ZXJNb2RlbEhvb2ssIHBheWxvYWQpLAorICAgICAgICAgIGJlY29tZVJl
c29sdmVkID0gX3JvdXRlclV0aWxzLmJpbmQodGhpcywgdGhpcy5iZWNvbWVSZXNvbHZlZCwgcGF5
bG9hZCk7CisKKyAgICAgIHJldHVybiBfcnN2cFByb21pc2UuZGVmYXVsdC5yZXNvbHZlKHVuZGVm
aW5lZCwgdGhpcy5wcm9taXNlTGFiZWwoIlN0YXJ0IGhhbmRsZXIiKSkudGhlbihjaGVja0ZvckFi
b3J0LCBudWxsLCB0aGlzLnByb21pc2VMYWJlbCgiQ2hlY2sgZm9yIGFib3J0IikpLnRoZW4oYmVm
b3JlTW9kZWwsIG51bGwsIHRoaXMucHJvbWlzZUxhYmVsKCJCZWZvcmUgbW9kZWwiKSkudGhlbihj
aGVja0ZvckFib3J0LCBudWxsLCB0aGlzLnByb21pc2VMYWJlbCgiQ2hlY2sgaWYgYWJvcnRlZCBk
dXJpbmcgJ2JlZm9yZU1vZGVsJyBob29rIikpLnRoZW4obW9kZWwsIG51bGwsIHRoaXMucHJvbWlz
ZUxhYmVsKCJNb2RlbCIpKS50aGVuKGNoZWNrRm9yQWJvcnQsIG51bGwsIHRoaXMucHJvbWlzZUxh
YmVsKCJDaGVjayBpZiBhYm9ydGVkIGluICdtb2RlbCcgaG9vayIpKS50aGVuKGFmdGVyTW9kZWws
IG51bGwsIHRoaXMucHJvbWlzZUxhYmVsKCJBZnRlciBtb2RlbCIpKS50aGVuKGNoZWNrRm9yQWJv
cnQsIG51bGwsIHRoaXMucHJvbWlzZUxhYmVsKCJDaGVjayBpZiBhYm9ydGVkIGluICdhZnRlck1v
ZGVsJyBob29rIikpLnRoZW4oYmVjb21lUmVzb2x2ZWQsIG51bGwsIHRoaXMucHJvbWlzZUxhYmVs
KCJCZWNvbWUgcmVzb2x2ZWQiKSk7CisgICAgfSwKKworICAgIHJ1bkJlZm9yZU1vZGVsSG9vazog
ZnVuY3Rpb24gKHBheWxvYWQpIHsKKyAgICAgIGlmIChwYXlsb2FkLnRyaWdnZXIpIHsKKyAgICAg
ICAgcGF5bG9hZC50cmlnZ2VyKHRydWUsICd3aWxsUmVzb2x2ZU1vZGVsJywgcGF5bG9hZCwgdGhp
cy5oYW5kbGVyKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiB0aGlzLnJ1blNoYXJlZE1vZGVsSG9v
ayhwYXlsb2FkLCAnYmVmb3JlTW9kZWwnLCBbXSk7CisgICAgfSwKKworICAgIHJ1bkFmdGVyTW9k
ZWxIb29rOiBmdW5jdGlvbiAocGF5bG9hZCwgcmVzb2x2ZWRNb2RlbCkgeworICAgICAgLy8gU3Rh
c2ggdGhlIHJlc29sdmVkIG1vZGVsIG9uIHRoZSBwYXlsb2FkLgorICAgICAgLy8gVGhpcyBtYWtl
cyBpdCBwb3NzaWJsZSBmb3IgdXNlcnMgdG8gc3dhcCBvdXQKKyAgICAgIC8vIHRoZSByZXNvbHZl
ZCBtb2RlbCBpbiBhZnRlck1vZGVsLgorICAgICAgdmFyIG5hbWUgPSB0aGlzLm5hbWU7CisgICAg
ICB0aGlzLnN0YXNoUmVzb2x2ZWRNb2RlbChwYXlsb2FkLCByZXNvbHZlZE1vZGVsKTsKKworICAg
ICAgcmV0dXJuIHRoaXMucnVuU2hhcmVkTW9kZWxIb29rKHBheWxvYWQsICdhZnRlck1vZGVsJywg
W3Jlc29sdmVkTW9kZWxdKS50aGVuKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLy8gSWdub3JlIHRo
ZSBmdWxmaWxsZWQgdmFsdWUgcmV0dXJuZWQgZnJvbSBhZnRlck1vZGVsLgorICAgICAgICAvLyBS
ZXR1cm4gdGhlIHZhbHVlIHN0YXNoZWQgaW4gcmVzb2x2ZWRNb2RlbHMsIHdoaWNoCisgICAgICAg
IC8vIG1pZ2h0IGhhdmUgYmVlbiBzd2FwcGVkIG91dCBpbiBhZnRlck1vZGVsLgorICAgICAgICBy
ZXR1cm4gcGF5bG9hZC5yZXNvbHZlZE1vZGVsc1tuYW1lXTsKKyAgICAgIH0sIG51bGwsIHRoaXMu
cHJvbWlzZUxhYmVsKCJJZ25vcmUgZnVsZmlsbG1lbnQgdmFsdWUgYW5kIHJldHVybiBtb2RlbCB2
YWx1ZSIpKTsKKyAgICB9LAorCisgICAgcnVuU2hhcmVkTW9kZWxIb29rOiBmdW5jdGlvbiAocGF5
bG9hZCwgaG9va05hbWUsIGFyZ3MpIHsKKyAgICAgIHRoaXMubG9nKHBheWxvYWQsICJjYWxsaW5n
ICIgKyBob29rTmFtZSArICIgaG9vayIpOworCisgICAgICBpZiAodGhpcy5xdWVyeVBhcmFtcykg
eworICAgICAgICBhcmdzLnB1c2godGhpcy5xdWVyeVBhcmFtcyk7CisgICAgICB9CisgICAgICBh
cmdzLnB1c2gocGF5bG9hZCk7CisKKyAgICAgIHZhciByZXN1bHQgPSBfcm91dGVyVXRpbHMuYXBw
bHlIb29rKHRoaXMuaGFuZGxlciwgaG9va05hbWUsIGFyZ3MpOworCisgICAgICBpZiAocmVzdWx0
ICYmIHJlc3VsdC5pc1RyYW5zaXRpb24pIHsKKyAgICAgICAgcmVzdWx0ID0gbnVsbDsKKyAgICAg
IH0KKworICAgICAgcmV0dXJuIF9yc3ZwUHJvbWlzZS5kZWZhdWx0LnJlc29sdmUocmVzdWx0LCB0
aGlzLnByb21pc2VMYWJlbCgiUmVzb2x2ZSB2YWx1ZSByZXR1cm5lZCBmcm9tIG9uZSBvZiB0aGUg
bW9kZWwgaG9va3MiKSk7CisgICAgfSwKKworICAgIC8vIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3Nl
cworICAgIGdldE1vZGVsOiBudWxsLAorCisgICAgY2hlY2tGb3JBYm9ydDogZnVuY3Rpb24gKHNo
b3VsZENvbnRpbnVlLCBwcm9taXNlVmFsdWUpIHsKKyAgICAgIHJldHVybiBfcnN2cFByb21pc2Uu
ZGVmYXVsdC5yZXNvbHZlKHNob3VsZENvbnRpbnVlKCksIHRoaXMucHJvbWlzZUxhYmVsKCJDaGVj
ayBmb3IgYWJvcnQiKSkudGhlbihmdW5jdGlvbiAoKSB7CisgICAgICAgIC8vIFdlIGRvbid0IGNh
cmUgYWJvdXQgc2hvdWxkQ29udGludWUncyByZXNvbHZlIHZhbHVlOworICAgICAgICAvLyBwYXNz
IGFsb25nIHRoZSBvcmlnaW5hbCB2YWx1ZSBwYXNzZWQgdG8gdGhpcyBmbi4KKyAgICAgICAgcmV0
dXJuIHByb21pc2VWYWx1ZTsKKyAgICAgIH0sIG51bGwsIHRoaXMucHJvbWlzZUxhYmVsKCJJZ25v
cmUgZnVsZmlsbG1lbnQgdmFsdWUgYW5kIGNvbnRpbnVlIikpOworICAgIH0sCisKKyAgICBzdGFz
aFJlc29sdmVkTW9kZWw6IGZ1bmN0aW9uIChwYXlsb2FkLCByZXNvbHZlZE1vZGVsKSB7CisgICAg
ICBwYXlsb2FkLnJlc29sdmVkTW9kZWxzID0gcGF5bG9hZC5yZXNvbHZlZE1vZGVscyB8fCB7fTsK
KyAgICAgIHBheWxvYWQucmVzb2x2ZWRNb2RlbHNbdGhpcy5uYW1lXSA9IHJlc29sdmVkTW9kZWw7
CisgICAgfSwKKworICAgIGJlY29tZVJlc29sdmVkOiBmdW5jdGlvbiAocGF5bG9hZCwgcmVzb2x2
ZWRDb250ZXh0KSB7CisgICAgICB2YXIgcGFyYW1zID0gdGhpcy5zZXJpYWxpemUocmVzb2x2ZWRD
b250ZXh0KTsKKworICAgICAgaWYgKHBheWxvYWQpIHsKKyAgICAgICAgdGhpcy5zdGFzaFJlc29s
dmVkTW9kZWwocGF5bG9hZCwgcmVzb2x2ZWRDb250ZXh0KTsKKyAgICAgICAgcGF5bG9hZC5wYXJh
bXMgPSBwYXlsb2FkLnBhcmFtcyB8fCB7fTsKKyAgICAgICAgcGF5bG9hZC5wYXJhbXNbdGhpcy5u
YW1lXSA9IHBhcmFtczsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHRoaXMuZmFjdG9yeSgncmVz
b2x2ZWQnLCB7CisgICAgICAgIGNvbnRleHQ6IHJlc29sdmVkQ29udGV4dCwKKyAgICAgICAgbmFt
ZTogdGhpcy5uYW1lLAorICAgICAgICBoYW5kbGVyOiB0aGlzLmhhbmRsZXIsCisgICAgICAgIHBh
cmFtczogcGFyYW1zCisgICAgICB9KTsKKyAgICB9LAorCisgICAgc2hvdWxkU3VwZXJjZWRlOiBm
dW5jdGlvbiAob3RoZXIpIHsKKyAgICAgIC8vIFByZWZlciB0aGlzIG5ld2VyIGhhbmRsZXJJbmZv
IG92ZXIgYG90aGVyYCBpZjoKKyAgICAgIC8vIDEpIFRoZSBvdGhlciBvbmUgZG9lc24ndCBleGlz
dAorICAgICAgLy8gMikgVGhlIG5hbWVzIGRvbid0IG1hdGNoCisgICAgICAvLyAzKSBUaGlzIGhh
bmRsZXIgaGFzIGEgY29udGV4dCB0aGF0IGRvZXNuJ3QgbWF0Y2gKKyAgICAgIC8vICAgIHRoZSBv
dGhlciBvbmUgKG9yIHRoZSBvdGhlciBvbmUgZG9lc24ndCBoYXZlIG9uZSkuCisgICAgICAvLyA0
KSBUaGlzIGhhbmRsZXIgaGFzIHBhcmFtZXRlcnMgdGhhdCBkb24ndCBtYXRjaCB0aGUgb3RoZXIu
CisgICAgICBpZiAoIW90aGVyKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgfQorCisg
ICAgICB2YXIgY29udGV4dHNNYXRjaCA9IG90aGVyLmNvbnRleHQgPT09IHRoaXMuY29udGV4dDsK
KyAgICAgIHJldHVybiBvdGhlci5uYW1lICE9PSB0aGlzLm5hbWUgfHwgdGhpcy5oYXNPd25Qcm9w
ZXJ0eSgnY29udGV4dCcpICYmICFjb250ZXh0c01hdGNoIHx8IHRoaXMuaGFzT3duUHJvcGVydHko
J3BhcmFtcycpICYmICFwYXJhbXNNYXRjaCh0aGlzLnBhcmFtcywgb3RoZXIucGFyYW1zKTsKKyAg
ICB9CisgIH07CisKKyAgZnVuY3Rpb24gcGFyYW1zTWF0Y2goYSwgYikgeworICAgIGlmICghYSBe
ICFiKSB7CisgICAgICAvLyBPbmx5IG9uZSBpcyBudWxsLgorICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIGlmICghYSkgeworICAgICAgLy8gQm90aCBtdXN0IGJlIG51bGwuCisgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBOb3RlOiB0aGlzIGFzc3VtZXMgdGhhdCBi
b3RoIHBhcmFtcyBoYXZlIHRoZSBzYW1lCisgICAgLy8gbnVtYmVyIG9mIGtleXMsIGJ1dCBzaW5j
ZSB3ZSdyZSBjb21wYXJpbmcgdGhlCisgICAgLy8gc2FtZSBoYW5kbGVycywgdGhleSBzaG91bGQu
CisgICAgZm9yICh2YXIgayBpbiBhKSB7CisgICAgICBpZiAoYS5oYXNPd25Qcm9wZXJ0eShrKSAm
JiBhW2tdICE9PSBiW2tdKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICB9
CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBleHBvcnRzLmRlZmF1bHQgPSBIYW5kbGVySW5m
bzsKK30pOworZW5pZmVkKCdyb3V0ZXIvaGFuZGxlci1pbmZvL2ZhY3RvcnknLCBbJ2V4cG9ydHMn
LCAncm91dGVyL2hhbmRsZXItaW5mby9yZXNvbHZlZC1oYW5kbGVyLWluZm8nLCAncm91dGVyL2hh
bmRsZXItaW5mby91bnJlc29sdmVkLWhhbmRsZXItaW5mby1ieS1vYmplY3QnLCAncm91dGVyL2hh
bmRsZXItaW5mby91bnJlc29sdmVkLWhhbmRsZXItaW5mby1ieS1wYXJhbSddLCBmdW5jdGlvbiAo
ZXhwb3J0cywgX3JvdXRlckhhbmRsZXJJbmZvUmVzb2x2ZWRIYW5kbGVySW5mbywgX3JvdXRlckhh
bmRsZXJJbmZvVW5yZXNvbHZlZEhhbmRsZXJJbmZvQnlPYmplY3QsIF9yb3V0ZXJIYW5kbGVySW5m
b1VucmVzb2x2ZWRIYW5kbGVySW5mb0J5UGFyYW0pIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIGhh
bmRsZXJJbmZvRmFjdG9yeS5rbGFzc2VzID0geworICAgIHJlc29sdmVkOiBfcm91dGVySGFuZGxl
ckluZm9SZXNvbHZlZEhhbmRsZXJJbmZvLmRlZmF1bHQsCisgICAgcGFyYW06IF9yb3V0ZXJIYW5k
bGVySW5mb1VucmVzb2x2ZWRIYW5kbGVySW5mb0J5UGFyYW0uZGVmYXVsdCwKKyAgICBvYmplY3Q6
IF9yb3V0ZXJIYW5kbGVySW5mb1VucmVzb2x2ZWRIYW5kbGVySW5mb0J5T2JqZWN0LmRlZmF1bHQK
KyAgfTsKKworICBmdW5jdGlvbiBoYW5kbGVySW5mb0ZhY3RvcnkobmFtZSwgcHJvcHMpIHsKKyAg
ICB2YXIgQ3RvciA9IGhhbmRsZXJJbmZvRmFjdG9yeS5rbGFzc2VzW25hbWVdLAorICAgICAgICBo
YW5kbGVySW5mbyA9IG5ldyBDdG9yKHByb3BzIHx8IHt9KTsKKyAgICBoYW5kbGVySW5mby5mYWN0
b3J5ID0gaGFuZGxlckluZm9GYWN0b3J5OworICAgIHJldHVybiBoYW5kbGVySW5mbzsKKyAgfQor
CisgIGV4cG9ydHMuZGVmYXVsdCA9IGhhbmRsZXJJbmZvRmFjdG9yeTsKK30pOworZW5pZmVkKCdy
b3V0ZXIvaGFuZGxlci1pbmZvL3Jlc29sdmVkLWhhbmRsZXItaW5mbycsIFsnZXhwb3J0cycsICdy
b3V0ZXIvaGFuZGxlci1pbmZvJywgJ3JvdXRlci91dGlscycsICdyc3ZwL3Byb21pc2UnXSwgZnVu
Y3Rpb24gKGV4cG9ydHMsIF9yb3V0ZXJIYW5kbGVySW5mbywgX3JvdXRlclV0aWxzLCBfcnN2cFBy
b21pc2UpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIHZhciBSZXNvbHZlZEhhbmRsZXJJbmZvID0g
X3JvdXRlclV0aWxzLnN1YmNsYXNzKF9yb3V0ZXJIYW5kbGVySW5mby5kZWZhdWx0LCB7CisgICAg
cmVzb2x2ZTogZnVuY3Rpb24gKHNob3VsZENvbnRpbnVlLCBwYXlsb2FkKSB7CisgICAgICAvLyBB
IFJlc29sdmVkSGFuZGxlckluZm8ganVzdCByZXNvbHZlZCB3aXRoIGl0c2VsZi4KKyAgICAgIGlm
IChwYXlsb2FkICYmIHBheWxvYWQucmVzb2x2ZWRNb2RlbHMpIHsKKyAgICAgICAgcGF5bG9hZC5y
ZXNvbHZlZE1vZGVsc1t0aGlzLm5hbWVdID0gdGhpcy5jb250ZXh0OworICAgICAgfQorICAgICAg
cmV0dXJuIF9yc3ZwUHJvbWlzZS5kZWZhdWx0LnJlc29sdmUodGhpcywgdGhpcy5wcm9taXNlTGFi
ZWwoIlJlc29sdmUiKSk7CisgICAgfSwKKworICAgIGdldFVucmVzb2x2ZWQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgIHJldHVybiB0aGlzLmZhY3RvcnkoJ3BhcmFtJywgeworICAgICAgICBuYW1lOiB0
aGlzLm5hbWUsCisgICAgICAgIGhhbmRsZXI6IHRoaXMuaGFuZGxlciwKKyAgICAgICAgcGFyYW1z
OiB0aGlzLnBhcmFtcworICAgICAgfSk7CisgICAgfSwKKworICAgIGlzUmVzb2x2ZWQ6IHRydWUK
KyAgfSk7CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gUmVzb2x2ZWRIYW5kbGVySW5mbzsKK30pOwor
ZW5pZmVkKCdyb3V0ZXIvaGFuZGxlci1pbmZvL3VucmVzb2x2ZWQtaGFuZGxlci1pbmZvLWJ5LW9i
amVjdCcsIFsnZXhwb3J0cycsICdyb3V0ZXIvaGFuZGxlci1pbmZvJywgJ3JvdXRlci91dGlscycs
ICdyc3ZwL3Byb21pc2UnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9yb3V0ZXJIYW5kbGVySW5mbywg
X3JvdXRlclV0aWxzLCBfcnN2cFByb21pc2UpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIHZhciBV
bnJlc29sdmVkSGFuZGxlckluZm9CeU9iamVjdCA9IF9yb3V0ZXJVdGlscy5zdWJjbGFzcyhfcm91
dGVySGFuZGxlckluZm8uZGVmYXVsdCwgeworICAgIGdldE1vZGVsOiBmdW5jdGlvbiAocGF5bG9h
ZCkgeworICAgICAgdGhpcy5sb2cocGF5bG9hZCwgdGhpcy5uYW1lICsgIjogcmVzb2x2aW5nIHBy
b3ZpZGVkIG1vZGVsIik7CisgICAgICByZXR1cm4gX3JzdnBQcm9taXNlLmRlZmF1bHQucmVzb2x2
ZSh0aGlzLmNvbnRleHQpOworICAgIH0sCisKKyAgICBpbml0aWFsaXplOiBmdW5jdGlvbiAocHJv
cHMpIHsKKyAgICAgIHRoaXMubmFtZXMgPSBwcm9wcy5uYW1lcyB8fCBbXTsKKyAgICAgIHRoaXMu
Y29udGV4dCA9IHByb3BzLmNvbnRleHQ7CisgICAgfSwKKworICAgIC8qKgorICAgICAgQHByaXZh
dGUKKyAgICAgICBTZXJpYWxpemVzIGEgaGFuZGxlciB1c2luZyBpdHMgY3VzdG9tIGBzZXJpYWxp
emVgIG1ldGhvZCBvcgorICAgICAgYnkgYSBkZWZhdWx0IHRoYXQgbG9va3MgdXAgdGhlIGV4cGVj
dGVkIHByb3BlcnR5IG5hbWUgZnJvbQorICAgICAgdGhlIGR5bmFtaWMgc2VnbWVudC4KKyAgICAg
ICBAcGFyYW0ge09iamVjdH0gbW9kZWwgdGhlIG1vZGVsIHRvIGJlIHNlcmlhbGl6ZWQgZm9yIHRo
aXMgaGFuZGxlcgorICAgICovCisgICAgc2VyaWFsaXplOiBmdW5jdGlvbiAoX21vZGVsKSB7Cisg
ICAgICB2YXIgbW9kZWwgPSBfbW9kZWwgfHwgdGhpcy5jb250ZXh0LAorICAgICAgICAgIG5hbWVz
ID0gdGhpcy5uYW1lcywKKyAgICAgICAgICBoYW5kbGVyID0gdGhpcy5oYW5kbGVyOworCisgICAg
ICB2YXIgb2JqZWN0ID0ge307CisgICAgICBpZiAoX3JvdXRlclV0aWxzLmlzUGFyYW0obW9kZWwp
KSB7CisgICAgICAgIG9iamVjdFtuYW1lc1swXV0gPSBtb2RlbDsKKyAgICAgICAgcmV0dXJuIG9i
amVjdDsKKyAgICAgIH0KKworICAgICAgLy8gVXNlIGN1c3RvbSBzZXJpYWxpemUgaWYgaXQgZXhp
c3RzLgorICAgICAgaWYgKGhhbmRsZXIuc2VyaWFsaXplKSB7CisgICAgICAgIHJldHVybiBoYW5k
bGVyLnNlcmlhbGl6ZShtb2RlbCwgbmFtZXMpOworICAgICAgfQorCisgICAgICBpZiAobmFtZXMu
bGVuZ3RoICE9PSAxKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKworICAgICAgdmFyIG5h
bWUgPSBuYW1lc1swXTsKKworICAgICAgaWYgKC9faWQkLy50ZXN0KG5hbWUpKSB7CisgICAgICAg
IG9iamVjdFtuYW1lXSA9IG1vZGVsLmlkOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgb2JqZWN0
W25hbWVdID0gbW9kZWw7CisgICAgICB9CisgICAgICByZXR1cm4gb2JqZWN0OworICAgIH0KKyAg
fSk7CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gVW5yZXNvbHZlZEhhbmRsZXJJbmZvQnlPYmplY3Q7
Cit9KTsKK2VuaWZlZCgncm91dGVyL2hhbmRsZXItaW5mby91bnJlc29sdmVkLWhhbmRsZXItaW5m
by1ieS1wYXJhbScsIFsnZXhwb3J0cycsICdyb3V0ZXIvaGFuZGxlci1pbmZvJywgJ3JvdXRlci91
dGlscyddLCBmdW5jdGlvbiAoZXhwb3J0cywgX3JvdXRlckhhbmRsZXJJbmZvLCBfcm91dGVyVXRp
bHMpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIC8vIEdlbmVyYXRlZCBieSBVUkwgdHJhbnNpdGlv
bnMgYW5kIG5vbi1keW5hbWljIHJvdXRlIHNlZ21lbnRzIGluIG5hbWVkIFRyYW5zaXRpb25zLgor
ICB2YXIgVW5yZXNvbHZlZEhhbmRsZXJJbmZvQnlQYXJhbSA9IF9yb3V0ZXJVdGlscy5zdWJjbGFz
cyhfcm91dGVySGFuZGxlckluZm8uZGVmYXVsdCwgeworICAgIGluaXRpYWxpemU6IGZ1bmN0aW9u
IChwcm9wcykgeworICAgICAgdGhpcy5wYXJhbXMgPSBwcm9wcy5wYXJhbXMgfHwge307CisgICAg
fSwKKworICAgIGdldE1vZGVsOiBmdW5jdGlvbiAocGF5bG9hZCkgeworICAgICAgdmFyIGZ1bGxQ
YXJhbXMgPSB0aGlzLnBhcmFtczsKKyAgICAgIGlmIChwYXlsb2FkICYmIHBheWxvYWQucXVlcnlQ
YXJhbXMpIHsKKyAgICAgICAgZnVsbFBhcmFtcyA9IHt9OworICAgICAgICBfcm91dGVyVXRpbHMu
bWVyZ2UoZnVsbFBhcmFtcywgdGhpcy5wYXJhbXMpOworICAgICAgICBmdWxsUGFyYW1zLnF1ZXJ5
UGFyYW1zID0gcGF5bG9hZC5xdWVyeVBhcmFtczsKKyAgICAgIH0KKworICAgICAgdmFyIGhhbmRs
ZXIgPSB0aGlzLmhhbmRsZXI7CisgICAgICB2YXIgaG9va05hbWUgPSBfcm91dGVyVXRpbHMucmVz
b2x2ZUhvb2soaGFuZGxlciwgJ2Rlc2VyaWFsaXplJykgfHwgX3JvdXRlclV0aWxzLnJlc29sdmVI
b29rKGhhbmRsZXIsICdtb2RlbCcpOworCisgICAgICByZXR1cm4gdGhpcy5ydW5TaGFyZWRNb2Rl
bEhvb2socGF5bG9hZCwgaG9va05hbWUsIFtmdWxsUGFyYW1zXSk7CisgICAgfQorICB9KTsKKwor
ICBleHBvcnRzLmRlZmF1bHQgPSBVbnJlc29sdmVkSGFuZGxlckluZm9CeVBhcmFtOworfSk7Citl
bmlmZWQoJ3JvdXRlci9yb3V0ZXInLCBbJ2V4cG9ydHMnLCAncm91dGUtcmVjb2duaXplcicsICdy
c3ZwL3Byb21pc2UnLCAncm91dGVyL3V0aWxzJywgJ3JvdXRlci90cmFuc2l0aW9uLXN0YXRlJywg
J3JvdXRlci90cmFuc2l0aW9uJywgJ3JvdXRlci90cmFuc2l0aW9uLWludGVudC9uYW1lZC10cmFu
c2l0aW9uLWludGVudCcsICdyb3V0ZXIvdHJhbnNpdGlvbi1pbnRlbnQvdXJsLXRyYW5zaXRpb24t
aW50ZW50JywgJ3JvdXRlci9oYW5kbGVyLWluZm8nXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9yb3V0
ZVJlY29nbml6ZXIsIF9yc3ZwUHJvbWlzZSwgX3JvdXRlclV0aWxzLCBfcm91dGVyVHJhbnNpdGlv
blN0YXRlLCBfcm91dGVyVHJhbnNpdGlvbiwgX3JvdXRlclRyYW5zaXRpb25JbnRlbnROYW1lZFRy
YW5zaXRpb25JbnRlbnQsIF9yb3V0ZXJUcmFuc2l0aW9uSW50ZW50VXJsVHJhbnNpdGlvbkludGVu
dCwgX3JvdXRlckhhbmRsZXJJbmZvKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICB2YXIgcG9wID0g
QXJyYXkucHJvdG90eXBlLnBvcDsKKworICBmdW5jdGlvbiBSb3V0ZXIoX29wdGlvbnMpIHsKKyAg
ICB2YXIgb3B0aW9ucyA9IF9vcHRpb25zIHx8IHt9OworICAgIHRoaXMuZ2V0SGFuZGxlciA9IG9w
dGlvbnMuZ2V0SGFuZGxlciB8fCB0aGlzLmdldEhhbmRsZXI7CisgICAgdGhpcy51cGRhdGVVUkwg
PSBvcHRpb25zLnVwZGF0ZVVSTCB8fCB0aGlzLnVwZGF0ZVVSTDsKKyAgICB0aGlzLnJlcGxhY2VV
UkwgPSBvcHRpb25zLnJlcGxhY2VVUkwgfHwgdGhpcy5yZXBsYWNlVVJMOworICAgIHRoaXMuZGlk
VHJhbnNpdGlvbiA9IG9wdGlvbnMuZGlkVHJhbnNpdGlvbiB8fCB0aGlzLmRpZFRyYW5zaXRpb247
CisgICAgdGhpcy53aWxsVHJhbnNpdGlvbiA9IG9wdGlvbnMud2lsbFRyYW5zaXRpb24gfHwgdGhp
cy53aWxsVHJhbnNpdGlvbjsKKyAgICB0aGlzLmRlbGVnYXRlID0gb3B0aW9ucy5kZWxlZ2F0ZSB8
fCB0aGlzLmRlbGVnYXRlOworICAgIHRoaXMudHJpZ2dlckV2ZW50ID0gb3B0aW9ucy50cmlnZ2Vy
RXZlbnQgfHwgdGhpcy50cmlnZ2VyRXZlbnQ7CisgICAgdGhpcy5sb2cgPSBvcHRpb25zLmxvZyB8
fCB0aGlzLmxvZzsKKworICAgIHRoaXMucmVjb2duaXplciA9IG5ldyBfcm91dGVSZWNvZ25pemVy
LmRlZmF1bHQoKTsKKyAgICB0aGlzLnJlc2V0KCk7CisgIH0KKworICBmdW5jdGlvbiBnZXRUcmFu
c2l0aW9uQnlJbnRlbnQoaW50ZW50LCBpc0ludGVybWVkaWF0ZSkgeworICAgIHZhciB3YXNUcmFu
c2l0aW9uaW5nID0gISF0aGlzLmFjdGl2ZVRyYW5zaXRpb247CisgICAgdmFyIG9sZFN0YXRlID0g
d2FzVHJhbnNpdGlvbmluZyA/IHRoaXMuYWN0aXZlVHJhbnNpdGlvbi5zdGF0ZSA6IHRoaXMuc3Rh
dGU7CisgICAgdmFyIG5ld1RyYW5zaXRpb247CisKKyAgICB2YXIgbmV3U3RhdGUgPSBpbnRlbnQu
YXBwbHlUb1N0YXRlKG9sZFN0YXRlLCB0aGlzLnJlY29nbml6ZXIsIHRoaXMuZ2V0SGFuZGxlciwg
aXNJbnRlcm1lZGlhdGUpOworICAgIHZhciBxdWVyeVBhcmFtQ2hhbmdlbGlzdCA9IF9yb3V0ZXJV
dGlscy5nZXRDaGFuZ2VsaXN0KG9sZFN0YXRlLnF1ZXJ5UGFyYW1zLCBuZXdTdGF0ZS5xdWVyeVBh
cmFtcyk7CisKKyAgICBpZiAoaGFuZGxlckluZm9zRXF1YWwobmV3U3RhdGUuaGFuZGxlckluZm9z
LCBvbGRTdGF0ZS5oYW5kbGVySW5mb3MpKSB7CisKKyAgICAgIC8vIFRoaXMgaXMgYSBuby1vcCB0
cmFuc2l0aW9uLiBTZWUgaWYgcXVlcnkgcGFyYW1zIGNoYW5nZWQuCisgICAgICBpZiAocXVlcnlQ
YXJhbUNoYW5nZWxpc3QpIHsKKyAgICAgICAgbmV3VHJhbnNpdGlvbiA9IHRoaXMucXVlcnlQYXJh
bXNUcmFuc2l0aW9uKHF1ZXJ5UGFyYW1DaGFuZ2VsaXN0LCB3YXNUcmFuc2l0aW9uaW5nLCBvbGRT
dGF0ZSwgbmV3U3RhdGUpOworICAgICAgICBpZiAobmV3VHJhbnNpdGlvbikgeworICAgICAgICAg
IHJldHVybiBuZXdUcmFuc2l0aW9uOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIC8vIE5v
LW9wLiBObyBuZWVkIHRvIGNyZWF0ZSBhIG5ldyB0cmFuc2l0aW9uLgorICAgICAgcmV0dXJuIHRo
aXMuYWN0aXZlVHJhbnNpdGlvbiB8fCBuZXcgX3JvdXRlclRyYW5zaXRpb24uVHJhbnNpdGlvbih0
aGlzKTsKKyAgICB9CisKKyAgICBpZiAoaXNJbnRlcm1lZGlhdGUpIHsKKyAgICAgIHNldHVwQ29u
dGV4dHModGhpcywgbmV3U3RhdGUpOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIENy
ZWF0ZSBhIG5ldyB0cmFuc2l0aW9uIHRvIHRoZSBkZXN0aW5hdGlvbiByb3V0ZS4KKyAgICBuZXdU
cmFuc2l0aW9uID0gbmV3IF9yb3V0ZXJUcmFuc2l0aW9uLlRyYW5zaXRpb24odGhpcywgaW50ZW50
LCBuZXdTdGF0ZSk7CisKKyAgICAvLyBBYm9ydCBhbmQgdXN1cnAgYW55IHByZXZpb3VzbHkgYWN0
aXZlIHRyYW5zaXRpb24uCisgICAgaWYgKHRoaXMuYWN0aXZlVHJhbnNpdGlvbikgeworICAgICAg
dGhpcy5hY3RpdmVUcmFuc2l0aW9uLmFib3J0KCk7CisgICAgfQorICAgIHRoaXMuYWN0aXZlVHJh
bnNpdGlvbiA9IG5ld1RyYW5zaXRpb247CisKKyAgICAvLyBUcmFuc2l0aW9uIHByb21pc2VzIGJ5
IGRlZmF1bHQgcmVzb2x2ZSB3aXRoIHJlc29sdmVkIHN0YXRlLgorICAgIC8vIEZvciBvdXIgcHVy
cG9zZXMsIHN3YXAgb3V0IHRoZSBwcm9taXNlIHRvIHJlc29sdmUKKyAgICAvLyBhZnRlciB0aGUg
dHJhbnNpdGlvbiBoYXMgYmVlbiBmaW5hbGl6ZWQuCisgICAgbmV3VHJhbnNpdGlvbi5wcm9taXNl
ID0gbmV3VHJhbnNpdGlvbi5wcm9taXNlLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkgeworICAgICAg
cmV0dXJuIGZpbmFsaXplVHJhbnNpdGlvbihuZXdUcmFuc2l0aW9uLCByZXN1bHQuc3RhdGUpOwor
ICAgIH0sIG51bGwsIF9yb3V0ZXJVdGlscy5wcm9taXNlTGFiZWwoIlNldHRsZSB0cmFuc2l0aW9u
IHByb21pc2Ugd2hlbiB0cmFuc2l0aW9uIGlzIGZpbmFsaXplZCIpKTsKKworICAgIGlmICghd2Fz
VHJhbnNpdGlvbmluZykgeworICAgICAgbm90aWZ5RXhpc3RpbmdIYW5kbGVycyh0aGlzLCBuZXdT
dGF0ZSwgbmV3VHJhbnNpdGlvbik7CisgICAgfQorCisgICAgZmlyZVF1ZXJ5UGFyYW1EaWRDaGFu
Z2UodGhpcywgbmV3U3RhdGUsIHF1ZXJ5UGFyYW1DaGFuZ2VsaXN0KTsKKworICAgIHJldHVybiBu
ZXdUcmFuc2l0aW9uOworICB9CisKKyAgUm91dGVyLnByb3RvdHlwZSA9IHsKKworICAgIC8qKgor
ICAgICAgVGhlIG1haW4gZW50cnkgcG9pbnQgaW50byB0aGUgcm91dGVyLiBUaGUgQVBJIGlzIGVz
c2VudGlhbGx5CisgICAgICB0aGUgc2FtZSBhcyB0aGUgYG1hcGAgbWV0aG9kIGluIGByb3V0ZS1y
ZWNvZ25pemVyYC4KKyAgICAgICBUaGlzIG1ldGhvZCBleHRyYWN0cyB0aGUgU3RyaW5nIGhhbmRs
ZXIgYXQgdGhlIGxhc3QgYC50bygpYAorICAgICAgY2FsbCBhbmQgdXNlcyBpdCBhcyB0aGUgbmFt
ZSBvZiB0aGUgd2hvbGUgcm91dGUuCisgICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sK
KyAgICAqLworICAgIG1hcDogZnVuY3Rpb24gKGNhbGxiYWNrKSB7CisgICAgICB0aGlzLnJlY29n
bml6ZXIuZGVsZWdhdGUgPSB0aGlzLmRlbGVnYXRlOworCisgICAgICB0aGlzLnJlY29nbml6ZXIu
bWFwKGNhbGxiYWNrLCBmdW5jdGlvbiAocmVjb2duaXplciwgcm91dGVzKSB7CisgICAgICAgIGZv
ciAodmFyIGkgPSByb3V0ZXMubGVuZ3RoIC0gMSwgcHJvY2VlZCA9IHRydWU7IGkgPj0gMCAmJiBw
cm9jZWVkOyAtLWkpIHsKKyAgICAgICAgICB2YXIgcm91dGUgPSByb3V0ZXNbaV07CisgICAgICAg
ICAgcmVjb2duaXplci5hZGQocm91dGVzLCB7IGFzOiByb3V0ZS5oYW5kbGVyIH0pOworICAgICAg
ICAgIHByb2NlZWQgPSByb3V0ZS5wYXRoID09PSAnLycgfHwgcm91dGUucGF0aCA9PT0gJycgfHwg
cm91dGUuaGFuZGxlci5zbGljZSgtNikgPT09ICcuaW5kZXgnOworICAgICAgICB9CisgICAgICB9
KTsKKyAgICB9LAorCisgICAgaGFzUm91dGU6IGZ1bmN0aW9uIChyb3V0ZSkgeworICAgICAgcmV0
dXJuIHRoaXMucmVjb2duaXplci5oYXNSb3V0ZShyb3V0ZSk7CisgICAgfSwKKworICAgIGdldEhh
bmRsZXI6IGZ1bmN0aW9uICgpIHt9LAorCisgICAgcXVlcnlQYXJhbXNUcmFuc2l0aW9uOiBmdW5j
dGlvbiAoY2hhbmdlbGlzdCwgd2FzVHJhbnNpdGlvbmluZywgb2xkU3RhdGUsIG5ld1N0YXRlKSB7
CisgICAgICB2YXIgcm91dGVyID0gdGhpczsKKworICAgICAgZmlyZVF1ZXJ5UGFyYW1EaWRDaGFu
Z2UodGhpcywgbmV3U3RhdGUsIGNoYW5nZWxpc3QpOworCisgICAgICBpZiAoIXdhc1RyYW5zaXRp
b25pbmcgJiYgdGhpcy5hY3RpdmVUcmFuc2l0aW9uKSB7CisgICAgICAgIC8vIE9uZSBvZiB0aGUg
aGFuZGxlcnMgaW4gcXVlcnlQYXJhbXNEaWRDaGFuZ2UKKyAgICAgICAgLy8gY2F1c2VkIGEgdHJh
bnNpdGlvbi4gSnVzdCByZXR1cm4gdGhhdCB0cmFuc2l0aW9uLgorICAgICAgICByZXR1cm4gdGhp
cy5hY3RpdmVUcmFuc2l0aW9uOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gUnVubmluZyBx
dWVyeVBhcmFtc0RpZENoYW5nZSBkaWRuJ3QgY2hhbmdlIGFueXRoaW5nLgorICAgICAgICAvLyBK
dXN0IHVwZGF0ZSBxdWVyeSBwYXJhbXMgYW5kIGJlIG9uIG91ciB3YXkuCisKKyAgICAgICAgLy8g
V2UgaGF2ZSB0byByZXR1cm4gYSBub29wIHRyYW5zaXRpb24gdGhhdCB3aWxsCisgICAgICAgIC8v
IHBlcmZvcm0gYSBVUkwgdXBkYXRlIGF0IHRoZSBlbmQuIFRoaXMgZ2l2ZXMKKyAgICAgICAgLy8g
dGhlIHVzZXIgdGhlIGFiaWxpdHkgdG8gc2V0IHRoZSB1cmwgdXBkYXRlCisgICAgICAgIC8vIG1l
dGhvZCAoZGVmYXVsdCBpcyByZXBsYWNlU3RhdGUpLgorICAgICAgICB2YXIgbmV3VHJhbnNpdGlv
biA9IG5ldyBfcm91dGVyVHJhbnNpdGlvbi5UcmFuc2l0aW9uKHRoaXMpOworICAgICAgICBuZXdU
cmFuc2l0aW9uLnF1ZXJ5UGFyYW1zT25seSA9IHRydWU7CisKKyAgICAgICAgb2xkU3RhdGUucXVl
cnlQYXJhbXMgPSBmaW5hbGl6ZVF1ZXJ5UGFyYW1DaGFuZ2UodGhpcywgbmV3U3RhdGUuaGFuZGxl
ckluZm9zLCBuZXdTdGF0ZS5xdWVyeVBhcmFtcywgbmV3VHJhbnNpdGlvbik7CisKKyAgICAgICAg
bmV3VHJhbnNpdGlvbi5wcm9taXNlID0gbmV3VHJhbnNpdGlvbi5wcm9taXNlLnRoZW4oZnVuY3Rp
b24gKHJlc3VsdCkgeworICAgICAgICAgIHVwZGF0ZVVSTChuZXdUcmFuc2l0aW9uLCBvbGRTdGF0
ZSwgdHJ1ZSk7CisgICAgICAgICAgaWYgKHJvdXRlci5kaWRUcmFuc2l0aW9uKSB7CisgICAgICAg
ICAgICByb3V0ZXIuZGlkVHJhbnNpdGlvbihyb3V0ZXIuY3VycmVudEhhbmRsZXJJbmZvcyk7Cisg
ICAgICAgICAgfQorICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0sIG51bGwsIF9y
b3V0ZXJVdGlscy5wcm9taXNlTGFiZWwoIlRyYW5zaXRpb24gY29tcGxldGUiKSk7CisgICAgICAg
IHJldHVybiBuZXdUcmFuc2l0aW9uOworICAgICAgfQorICAgIH0sCisKKyAgICAvLyBOT1RFOiB0
aGlzIGRvZXNuJ3QgcmVhbGx5IGJlbG9uZyBoZXJlLCBidXQgaGVyZQorICAgIC8vIGl0IHNoYWxs
IHJlbWFpbiB1bnRpbCBvdXIgRVM2IHRyYW5zcGlsZXIgY2FuCisgICAgLy8gaGFuZGxlIGN5Y2xp
Y2FsIGRlcHMuCisgICAgdHJhbnNpdGlvbkJ5SW50ZW50OiBmdW5jdGlvbiAoaW50ZW50LCBpc0lu
dGVybWVkaWF0ZSkgeworICAgICAgdHJ5IHsKKyAgICAgICAgcmV0dXJuIGdldFRyYW5zaXRpb25C
eUludGVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgICAgfSBjYXRjaCAoZSkgeworICAg
ICAgICByZXR1cm4gbmV3IF9yb3V0ZXJUcmFuc2l0aW9uLlRyYW5zaXRpb24odGhpcywgaW50ZW50
LCBudWxsLCBlKTsKKyAgICAgIH0KKyAgICB9LAorCisgICAgLyoqCisgICAgICBDbGVhcnMgdGhl
IGN1cnJlbnQgYW5kIHRhcmdldCByb3V0ZSBoYW5kbGVycyBhbmQgdHJpZ2dlcnMgZXhpdAorICAg
ICAgb24gZWFjaCBvZiB0aGVtIHN0YXJ0aW5nIGF0IHRoZSBsZWFmIGFuZCB0cmF2ZXJzaW5nIHVw
IHRocm91Z2gKKyAgICAgIGl0cyBhbmNlc3RvcnMuCisgICAgKi8KKyAgICByZXNldDogZnVuY3Rp
b24gKCkgeworICAgICAgaWYgKHRoaXMuc3RhdGUpIHsKKyAgICAgICAgX3JvdXRlclV0aWxzLmZv
ckVhY2godGhpcy5zdGF0ZS5oYW5kbGVySW5mb3Muc2xpY2UoKS5yZXZlcnNlKCksIGZ1bmN0aW9u
IChoYW5kbGVySW5mbykgeworICAgICAgICAgIHZhciBoYW5kbGVyID0gaGFuZGxlckluZm8uaGFu
ZGxlcjsKKyAgICAgICAgICBfcm91dGVyVXRpbHMuY2FsbEhvb2soaGFuZGxlciwgJ2V4aXQnKTsK
KyAgICAgICAgfSk7CisgICAgICB9CisKKyAgICAgIHRoaXMuc3RhdGUgPSBuZXcgX3JvdXRlclRy
YW5zaXRpb25TdGF0ZS5kZWZhdWx0KCk7CisgICAgICB0aGlzLmN1cnJlbnRIYW5kbGVySW5mb3Mg
PSBudWxsOworICAgIH0sCisKKyAgICBhY3RpdmVUcmFuc2l0aW9uOiBudWxsLAorCisgICAgLyoq
CisgICAgICB2YXIgaGFuZGxlciA9IGhhbmRsZXJJbmZvLmhhbmRsZXI7CisgICAgICBUaGUgZW50
cnkgcG9pbnQgZm9yIGhhbmRsaW5nIGEgY2hhbmdlIHRvIHRoZSBVUkwgKHVzdWFsbHkKKyAgICAg
IHZpYSB0aGUgYmFjayBhbmQgZm9yd2FyZCBidXR0b24pLgorICAgICAgIFJldHVybnMgYW4gQXJy
YXkgb2YgaGFuZGxlcnMgYW5kIHRoZSBwYXJhbWV0ZXJzIGFzc29jaWF0ZWQKKyAgICAgIHdpdGgg
dGhvc2UgcGFyYW1ldGVycy4KKyAgICAgICBAcGFyYW0ge1N0cmluZ30gdXJsIGEgVVJMIHRvIHBy
b2Nlc3MKKyAgICAgICBAcmV0dXJuIHtBcnJheX0gYW4gQXJyYXkgb2YgYFtoYW5kbGVyLCBwYXJh
bWV0ZXJdYCB0dXBsZXMKKyAgICAqLworICAgIGhhbmRsZVVSTDogZnVuY3Rpb24gKHVybCkgewor
ICAgICAgLy8gUGVyZm9ybSBhIFVSTC1iYXNlZCB0cmFuc2l0aW9uLCBidXQgZG9uJ3QgY2hhbmdl
CisgICAgICAvLyB0aGUgVVJMIGFmdGVyd2FyZCwgc2luY2UgaXQgYWxyZWFkeSBoYXBwZW5lZC4K
KyAgICAgIHZhciBhcmdzID0gX3JvdXRlclV0aWxzLnNsaWNlLmNhbGwoYXJndW1lbnRzKTsKKyAg
ICAgIGlmICh1cmwuY2hhckF0KDApICE9PSAnLycpIHsKKyAgICAgICAgYXJnc1swXSA9ICcvJyAr
IHVybDsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIGRvVHJhbnNpdGlvbih0aGlzLCBhcmdzKS5t
ZXRob2QobnVsbCk7CisgICAgfSwKKworICAgIC8qKgorICAgICAgSG9vayBwb2ludCBmb3IgdXBk
YXRpbmcgdGhlIFVSTC4KKyAgICAgICBAcGFyYW0ge1N0cmluZ30gdXJsIGEgVVJMIHRvIHVwZGF0
ZSB0bworICAgICovCisgICAgdXBkYXRlVVJMOiBmdW5jdGlvbiAoKSB7CisgICAgICB0aHJvdyBu
ZXcgRXJyb3IoInVwZGF0ZVVSTCBpcyBub3QgaW1wbGVtZW50ZWQiKTsKKyAgICB9LAorCisgICAg
LyoqCisgICAgICBIb29rIHBvaW50IGZvciByZXBsYWNpbmcgdGhlIGN1cnJlbnQgVVJMLCBpLmUu
IHdpdGggcmVwbGFjZVN0YXRlCisgICAgICAgQnkgZGVmYXVsdCB0aGlzIGJlaGF2ZXMgdGhlIHNh
bWUgYXMgYHVwZGF0ZVVSTGAKKyAgICAgICBAcGFyYW0ge1N0cmluZ30gdXJsIGEgVVJMIHRvIHVw
ZGF0ZSB0bworICAgICovCisgICAgcmVwbGFjZVVSTDogZnVuY3Rpb24gKHVybCkgeworICAgICAg
dGhpcy51cGRhdGVVUkwodXJsKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICBUcmFuc2l0aW9u
IGludG8gdGhlIHNwZWNpZmllZCBuYW1lZCByb3V0ZS4KKyAgICAgICBJZiBuZWNlc3NhcnksIHRy
aWdnZXIgdGhlIGV4aXQgY2FsbGJhY2sgb24gYW55IGhhbmRsZXJzCisgICAgICB0aGF0IGFyZSBu
byBsb25nZXIgcmVwcmVzZW50ZWQgYnkgdGhlIHRhcmdldCByb3V0ZS4KKyAgICAgICBAcGFyYW0g
e1N0cmluZ30gbmFtZSB0aGUgbmFtZSBvZiB0aGUgcm91dGUKKyAgICAqLworICAgIHRyYW5zaXRp
b25UbzogZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgIHJldHVybiBkb1RyYW5zaXRpb24odGhpcywg
YXJndW1lbnRzKTsKKyAgICB9LAorCisgICAgaW50ZXJtZWRpYXRlVHJhbnNpdGlvblRvOiBmdW5j
dGlvbiAobmFtZSkgeworICAgICAgcmV0dXJuIGRvVHJhbnNpdGlvbih0aGlzLCBhcmd1bWVudHMs
IHRydWUpOworICAgIH0sCisKKyAgICByZWZyZXNoOiBmdW5jdGlvbiAocGl2b3RIYW5kbGVyKSB7
CisgICAgICB2YXIgc3RhdGUgPSB0aGlzLmFjdGl2ZVRyYW5zaXRpb24gPyB0aGlzLmFjdGl2ZVRy
YW5zaXRpb24uc3RhdGUgOiB0aGlzLnN0YXRlOworICAgICAgdmFyIGhhbmRsZXJJbmZvcyA9IHN0
YXRlLmhhbmRsZXJJbmZvczsKKyAgICAgIHZhciBwYXJhbXMgPSB7fTsKKyAgICAgIGZvciAodmFy
IGkgPSAwLCBsZW4gPSBoYW5kbGVySW5mb3MubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsKKyAgICAg
ICAgdmFyIGhhbmRsZXJJbmZvID0gaGFuZGxlckluZm9zW2ldOworICAgICAgICBwYXJhbXNbaGFu
ZGxlckluZm8ubmFtZV0gPSBoYW5kbGVySW5mby5wYXJhbXMgfHwge307CisgICAgICB9CisKKyAg
ICAgIF9yb3V0ZXJVdGlscy5sb2codGhpcywgIlN0YXJ0aW5nIGEgcmVmcmVzaCB0cmFuc2l0aW9u
Iik7CisgICAgICB2YXIgaW50ZW50ID0gbmV3IF9yb3V0ZXJUcmFuc2l0aW9uSW50ZW50TmFtZWRU
cmFuc2l0aW9uSW50ZW50LmRlZmF1bHQoeworICAgICAgICBuYW1lOiBoYW5kbGVySW5mb3NbaGFu
ZGxlckluZm9zLmxlbmd0aCAtIDFdLm5hbWUsCisgICAgICAgIHBpdm90SGFuZGxlcjogcGl2b3RI
YW5kbGVyIHx8IGhhbmRsZXJJbmZvc1swXS5oYW5kbGVyLAorICAgICAgICBjb250ZXh0czogW10s
IC8vIFRPRE8gY29sbGVjdCBjb250ZXh0cy4uLj8KKyAgICAgICAgcXVlcnlQYXJhbXM6IHRoaXMu
X2NoYW5nZWRRdWVyeVBhcmFtcyB8fCBzdGF0ZS5xdWVyeVBhcmFtcyB8fCB7fQorICAgICAgfSk7
CisKKyAgICAgIHJldHVybiB0aGlzLnRyYW5zaXRpb25CeUludGVudChpbnRlbnQsIGZhbHNlKTsK
KyAgICB9LAorCisgICAgLyoqCisgICAgICBJZGVudGljYWwgdG8gYHRyYW5zaXRpb25Ub2AgZXhj
ZXB0IHRoYXQgdGhlIGN1cnJlbnQgVVJMIHdpbGwgYmUgcmVwbGFjZWQKKyAgICAgIGlmIHBvc3Np
YmxlLgorICAgICAgIFRoaXMgbWV0aG9kIGlzIGludGVuZGVkIHByaW1hcmlseSBmb3IgdXNlIHdp
dGggYHJlcGxhY2VTdGF0ZWAuCisgICAgICAgQHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhlIG5hbWUg
b2YgdGhlIHJvdXRlCisgICAgKi8KKyAgICByZXBsYWNlV2l0aDogZnVuY3Rpb24gKG5hbWUpIHsK
KyAgICAgIHJldHVybiBkb1RyYW5zaXRpb24odGhpcywgYXJndW1lbnRzKS5tZXRob2QoJ3JlcGxh
Y2UnKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICBUYWtlIGEgbmFtZWQgcm91dGUgYW5kIGNv
bnRleHQgb2JqZWN0cyBhbmQgZ2VuZXJhdGUgYQorICAgICAgVVJMLgorICAgICAgIEBwYXJhbSB7
U3RyaW5nfSBuYW1lIHRoZSBuYW1lIG9mIHRoZSByb3V0ZSB0byBnZW5lcmF0ZQorICAgICAgICBh
IFVSTCBmb3IKKyAgICAgIEBwYXJhbSB7Li4uT2JqZWN0fSBvYmplY3RzIGEgbGlzdCBvZiBvYmpl
Y3RzIHRvIHNlcmlhbGl6ZQorICAgICAgIEByZXR1cm4ge1N0cmluZ30gYSBVUkwKKyAgICAqLwor
ICAgIGdlbmVyYXRlOiBmdW5jdGlvbiAoaGFuZGxlck5hbWUpIHsKKworICAgICAgdmFyIHBhcnRp
dGlvbmVkQXJncyA9IF9yb3V0ZXJVdGlscy5leHRyYWN0UXVlcnlQYXJhbXMoX3JvdXRlclV0aWxz
LnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSksCisgICAgICAgICAgc3VwcGxpZWRQYXJhbXMgPSBw
YXJ0aXRpb25lZEFyZ3NbMF0sCisgICAgICAgICAgcXVlcnlQYXJhbXMgPSBwYXJ0aXRpb25lZEFy
Z3NbMV07CisKKyAgICAgIC8vIENvbnN0cnVjdCBhIFRyYW5zaXRpb25JbnRlbnQgd2l0aCB0aGUg
cHJvdmlkZWQgcGFyYW1zCisgICAgICAvLyBhbmQgYXBwbHkgaXQgdG8gdGhlIHByZXNlbnQgc3Rh
dGUgb2YgdGhlIHJvdXRlci4KKyAgICAgIHZhciBpbnRlbnQgPSBuZXcgX3JvdXRlclRyYW5zaXRp
b25JbnRlbnROYW1lZFRyYW5zaXRpb25JbnRlbnQuZGVmYXVsdCh7IG5hbWU6IGhhbmRsZXJOYW1l
LCBjb250ZXh0czogc3VwcGxpZWRQYXJhbXMgfSk7CisgICAgICB2YXIgc3RhdGUgPSBpbnRlbnQu
YXBwbHlUb1N0YXRlKHRoaXMuc3RhdGUsIHRoaXMucmVjb2duaXplciwgdGhpcy5nZXRIYW5kbGVy
KTsKKyAgICAgIHZhciBwYXJhbXMgPSB7fTsKKworICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9
IHN0YXRlLmhhbmRsZXJJbmZvcy5sZW5ndGg7IGkgPCBsZW47ICsraSkgeworICAgICAgICB2YXIg
aGFuZGxlckluZm8gPSBzdGF0ZS5oYW5kbGVySW5mb3NbaV07CisgICAgICAgIHZhciBoYW5kbGVy
UGFyYW1zID0gaGFuZGxlckluZm8uc2VyaWFsaXplKCk7CisgICAgICAgIF9yb3V0ZXJVdGlscy5t
ZXJnZShwYXJhbXMsIGhhbmRsZXJQYXJhbXMpOworICAgICAgfQorICAgICAgcGFyYW1zLnF1ZXJ5
UGFyYW1zID0gcXVlcnlQYXJhbXM7CisKKyAgICAgIHJldHVybiB0aGlzLnJlY29nbml6ZXIuZ2Vu
ZXJhdGUoaGFuZGxlck5hbWUsIHBhcmFtcyk7CisgICAgfSwKKworICAgIGFwcGx5SW50ZW50OiBm
dW5jdGlvbiAoaGFuZGxlck5hbWUsIGNvbnRleHRzKSB7CisgICAgICB2YXIgaW50ZW50ID0gbmV3
IF9yb3V0ZXJUcmFuc2l0aW9uSW50ZW50TmFtZWRUcmFuc2l0aW9uSW50ZW50LmRlZmF1bHQoewor
ICAgICAgICBuYW1lOiBoYW5kbGVyTmFtZSwKKyAgICAgICAgY29udGV4dHM6IGNvbnRleHRzCisg
ICAgICB9KTsKKworICAgICAgdmFyIHN0YXRlID0gdGhpcy5hY3RpdmVUcmFuc2l0aW9uICYmIHRo
aXMuYWN0aXZlVHJhbnNpdGlvbi5zdGF0ZSB8fCB0aGlzLnN0YXRlOworICAgICAgcmV0dXJuIGlu
dGVudC5hcHBseVRvU3RhdGUoc3RhdGUsIHRoaXMucmVjb2duaXplciwgdGhpcy5nZXRIYW5kbGVy
KTsKKyAgICB9LAorCisgICAgaXNBY3RpdmVJbnRlbnQ6IGZ1bmN0aW9uIChoYW5kbGVyTmFtZSwg
Y29udGV4dHMsIHF1ZXJ5UGFyYW1zLCBfc3RhdGUpIHsKKyAgICAgIHZhciBzdGF0ZSA9IF9zdGF0
ZSB8fCB0aGlzLnN0YXRlLAorICAgICAgICAgIHRhcmdldEhhbmRsZXJJbmZvcyA9IHN0YXRlLmhh
bmRsZXJJbmZvcywKKyAgICAgICAgICBmb3VuZCA9IGZhbHNlLAorICAgICAgICAgIG5hbWVzLAor
ICAgICAgICAgIG9iamVjdCwKKyAgICAgICAgICBoYW5kbGVySW5mbywKKyAgICAgICAgICBoYW5k
bGVyT2JqLAorICAgICAgICAgIGksCisgICAgICAgICAgbGVuOworCisgICAgICBpZiAoIXRhcmdl
dEhhbmRsZXJJbmZvcy5sZW5ndGgpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQor
CisgICAgICB2YXIgdGFyZ2V0SGFuZGxlciA9IHRhcmdldEhhbmRsZXJJbmZvc1t0YXJnZXRIYW5k
bGVySW5mb3MubGVuZ3RoIC0gMV0ubmFtZTsKKyAgICAgIHZhciByZWNvZ0hhbmRsZXJzID0gdGhp
cy5yZWNvZ25pemVyLmhhbmRsZXJzRm9yKHRhcmdldEhhbmRsZXIpOworCisgICAgICB2YXIgaW5k
ZXggPSAwOworICAgICAgZm9yIChsZW4gPSByZWNvZ0hhbmRsZXJzLmxlbmd0aDsgaW5kZXggPCBs
ZW47ICsraW5kZXgpIHsKKyAgICAgICAgaGFuZGxlckluZm8gPSB0YXJnZXRIYW5kbGVySW5mb3Nb
aW5kZXhdOworICAgICAgICBpZiAoaGFuZGxlckluZm8ubmFtZSA9PT0gaGFuZGxlck5hbWUpIHsK
KyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoaW5kZXgg
PT09IHJlY29nSGFuZGxlcnMubGVuZ3RoKSB7CisgICAgICAgIC8vIFRoZSBwcm92aWRlZCByb3V0
ZSBuYW1lIGlzbid0IGV2ZW4gaW4gdGhlIHJvdXRlIGhpZXJhcmNoeS4KKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgfQorCisgICAgICB2YXIgdGVzdFN0YXRlID0gbmV3IF9yb3V0ZXJUcmFu
c2l0aW9uU3RhdGUuZGVmYXVsdCgpOworICAgICAgdGVzdFN0YXRlLmhhbmRsZXJJbmZvcyA9IHRh
cmdldEhhbmRsZXJJbmZvcy5zbGljZSgwLCBpbmRleCArIDEpOworICAgICAgcmVjb2dIYW5kbGVy
cyA9IHJlY29nSGFuZGxlcnMuc2xpY2UoMCwgaW5kZXggKyAxKTsKKworICAgICAgdmFyIGludGVu
dCA9IG5ldyBfcm91dGVyVHJhbnNpdGlvbkludGVudE5hbWVkVHJhbnNpdGlvbkludGVudC5kZWZh
dWx0KHsKKyAgICAgICAgbmFtZTogdGFyZ2V0SGFuZGxlciwKKyAgICAgICAgY29udGV4dHM6IGNv
bnRleHRzCisgICAgICB9KTsKKworICAgICAgdmFyIG5ld1N0YXRlID0gaW50ZW50LmFwcGx5VG9I
YW5kbGVycyh0ZXN0U3RhdGUsIHJlY29nSGFuZGxlcnMsIHRoaXMuZ2V0SGFuZGxlciwgdGFyZ2V0
SGFuZGxlciwgdHJ1ZSwgdHJ1ZSk7CisKKyAgICAgIHZhciBoYW5kbGVyc0VxdWFsID0gaGFuZGxl
ckluZm9zRXF1YWwobmV3U3RhdGUuaGFuZGxlckluZm9zLCB0ZXN0U3RhdGUuaGFuZGxlckluZm9z
KTsKKyAgICAgIGlmICghcXVlcnlQYXJhbXMgfHwgIWhhbmRsZXJzRXF1YWwpIHsKKyAgICAgICAg
cmV0dXJuIGhhbmRsZXJzRXF1YWw7CisgICAgICB9CisKKyAgICAgIC8vIEdldCBhIGhhc2ggb2Yg
UVBzIHRoYXQgd2lsbCBzdGlsbCBiZSBhY3RpdmUgb24gbmV3IHJvdXRlCisgICAgICB2YXIgYWN0
aXZlUVBzT25OZXdIYW5kbGVyID0ge307CisgICAgICBfcm91dGVyVXRpbHMubWVyZ2UoYWN0aXZl
UVBzT25OZXdIYW5kbGVyLCBxdWVyeVBhcmFtcyk7CisKKyAgICAgIHZhciBhY3RpdmVRdWVyeVBh
cmFtcyA9IHN0YXRlLnF1ZXJ5UGFyYW1zOworICAgICAgZm9yICh2YXIga2V5IGluIGFjdGl2ZVF1
ZXJ5UGFyYW1zKSB7CisgICAgICAgIGlmIChhY3RpdmVRdWVyeVBhcmFtcy5oYXNPd25Qcm9wZXJ0
eShrZXkpICYmIGFjdGl2ZVFQc09uTmV3SGFuZGxlci5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7Cisg
ICAgICAgICAgYWN0aXZlUVBzT25OZXdIYW5kbGVyW2tleV0gPSBhY3RpdmVRdWVyeVBhcmFtc1tr
ZXldOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHJldHVybiBoYW5kbGVyc0VxdWFsICYm
ICFfcm91dGVyVXRpbHMuZ2V0Q2hhbmdlbGlzdChhY3RpdmVRUHNPbk5ld0hhbmRsZXIsIHF1ZXJ5
UGFyYW1zKTsKKyAgICB9LAorCisgICAgaXNBY3RpdmU6IGZ1bmN0aW9uIChoYW5kbGVyTmFtZSkg
eworICAgICAgdmFyIHBhcnRpdGlvbmVkQXJncyA9IF9yb3V0ZXJVdGlscy5leHRyYWN0UXVlcnlQ
YXJhbXMoX3JvdXRlclV0aWxzLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7CisgICAgICByZXR1
cm4gdGhpcy5pc0FjdGl2ZUludGVudChoYW5kbGVyTmFtZSwgcGFydGl0aW9uZWRBcmdzWzBdLCBw
YXJ0aXRpb25lZEFyZ3NbMV0pOworICAgIH0sCisKKyAgICB0cmlnZ2VyOiBmdW5jdGlvbiAobmFt
ZSkgeworICAgICAgdmFyIGFyZ3MgPSBfcm91dGVyVXRpbHMuc2xpY2UuY2FsbChhcmd1bWVudHMp
OworICAgICAgX3JvdXRlclV0aWxzLnRyaWdnZXIodGhpcywgdGhpcy5jdXJyZW50SGFuZGxlcklu
Zm9zLCBmYWxzZSwgYXJncyk7CisgICAgfSwKKworICAgIC8qKgorICAgICAgSG9vayBwb2ludCBm
b3IgbG9nZ2luZyB0cmFuc2l0aW9uIHN0YXR1cyB1cGRhdGVzLgorICAgICAgIEBwYXJhbSB7U3Ry
aW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGxvZy4KKyAgICAqLworICAgIGxvZzogbnVsbAor
ICB9OworCisgIC8qKgorICAgIEBwcml2YXRlCisgIAorICAgIEZpcmVzIHF1ZXJ5UGFyYW1zRGlk
Q2hhbmdlIGV2ZW50CisgICovCisgIGZ1bmN0aW9uIGZpcmVRdWVyeVBhcmFtRGlkQ2hhbmdlKHJv
dXRlciwgbmV3U3RhdGUsIHF1ZXJ5UGFyYW1DaGFuZ2VsaXN0KSB7CisgICAgLy8gSWYgcXVlcnlQ
YXJhbXMgY2hhbmdlZCB0cmlnZ2VyIGV2ZW50CisgICAgaWYgKHF1ZXJ5UGFyYW1DaGFuZ2VsaXN0
KSB7CisKKyAgICAgIC8vIFRoaXMgaXMgYSBsaXR0bGUgaGFja3kgYnV0IHdlIG5lZWQgc29tZSB3
YXkgb2Ygc3RvcmluZworICAgICAgLy8gY2hhbmdlZCBxdWVyeSBwYXJhbXMgZ2l2ZW4gdGhhdCBu
byBhY3RpdmVUcmFuc2l0aW9uCisgICAgICAvLyBpcyBndWFyYW50ZWVkIHRvIGhhdmUgb2NjdXJy
ZWQuCisgICAgICByb3V0ZXIuX2NoYW5nZWRRdWVyeVBhcmFtcyA9IHF1ZXJ5UGFyYW1DaGFuZ2Vs
aXN0LmFsbDsKKyAgICAgIF9yb3V0ZXJVdGlscy50cmlnZ2VyKHJvdXRlciwgbmV3U3RhdGUuaGFu
ZGxlckluZm9zLCB0cnVlLCBbJ3F1ZXJ5UGFyYW1zRGlkQ2hhbmdlJywgcXVlcnlQYXJhbUNoYW5n
ZWxpc3QuY2hhbmdlZCwgcXVlcnlQYXJhbUNoYW5nZWxpc3QuYWxsLCBxdWVyeVBhcmFtQ2hhbmdl
bGlzdC5yZW1vdmVkXSk7CisgICAgICByb3V0ZXIuX2NoYW5nZWRRdWVyeVBhcmFtcyA9IG51bGw7
CisgICAgfQorICB9CisKKyAgLyoqCisgICAgQHByaXZhdGUKKyAgCisgICAgVGFrZXMgYW4gQXJy
YXkgb2YgYEhhbmRsZXJJbmZvYHMsIGZpZ3VyZXMgb3V0IHdoaWNoIG9uZXMgYXJlCisgICAgZXhp
dGluZywgZW50ZXJpbmcsIG9yIGNoYW5naW5nIGNvbnRleHRzLCBhbmQgY2FsbHMgdGhlCisgICAg
cHJvcGVyIGhhbmRsZXIgaG9va3MuCisgIAorICAgIEZvciBleGFtcGxlLCBjb25zaWRlciB0aGUg
Zm9sbG93aW5nIHRyZWUgb2YgaGFuZGxlcnMuIEVhY2ggaGFuZGxlciBpcworICAgIGZvbGxvd2Vk
IGJ5IHRoZSBVUkwgc2VnbWVudCBpdCBoYW5kbGVzLgorICAKKyAgICBgYGAKKyAgICB8fmluZGV4
ICgiLyIpCisgICAgfCB8fnBvc3RzICgiL3Bvc3RzIikKKyAgICB8IHwgfC1zaG93UG9zdCAoIi86
aWQiKQorICAgIHwgfCB8LW5ld1Bvc3QgKCIvbmV3IikKKyAgICB8IHwgfC1lZGl0UG9zdCAoIi9l
ZGl0IikKKyAgICB8IHx+YWJvdXQgKCIvYWJvdXQvOmlkIikKKyAgICBgYGAKKyAgCisgICAgQ29u
c2lkZXIgdGhlIGZvbGxvd2luZyB0cmFuc2l0aW9uczoKKyAgCisgICAgMS4gQSBVUkwgdHJhbnNp
dGlvbiB0byBgL3Bvc3RzLzFgLgorICAgICAgIDEuIFRyaWdnZXJzIHRoZSBgKm1vZGVsYCBjYWxs
YmFja3Mgb24gdGhlCisgICAgICAgICAgYGluZGV4YCwgYHBvc3RzYCwgYW5kIGBzaG93UG9zdGAg
aGFuZGxlcnMKKyAgICAgICAyLiBUcmlnZ2VycyB0aGUgYGVudGVyYCBjYWxsYmFjayBvbiB0aGUg
c2FtZQorICAgICAgIDMuIFRyaWdnZXJzIHRoZSBgc2V0dXBgIGNhbGxiYWNrIG9uIHRoZSBzYW1l
CisgICAgMi4gQSBkaXJlY3QgdHJhbnNpdGlvbiB0byBgbmV3UG9zdGAKKyAgICAgICAxLiBUcmln
Z2VycyB0aGUgYGV4aXRgIGNhbGxiYWNrIG9uIGBzaG93UG9zdGAKKyAgICAgICAyLiBUcmlnZ2Vy
cyB0aGUgYGVudGVyYCBjYWxsYmFjayBvbiBgbmV3UG9zdGAKKyAgICAgICAzLiBUcmlnZ2VycyB0
aGUgYHNldHVwYCBjYWxsYmFjayBvbiBgbmV3UG9zdGAKKyAgICAzLiBBIGRpcmVjdCB0cmFuc2l0
aW9uIHRvIGBhYm91dGAgd2l0aCBhIHNwZWNpZmllZAorICAgICAgIGNvbnRleHQgb2JqZWN0Cisg
ICAgICAgMS4gVHJpZ2dlcnMgdGhlIGBleGl0YCBjYWxsYmFjayBvbiBgbmV3UG9zdGAKKyAgICAg
ICAgICBhbmQgYHBvc3RzYAorICAgICAgIDIuIFRyaWdnZXJzIHRoZSBgc2VyaWFsaXplYCBjYWxs
YmFjayBvbiBgYWJvdXRgCisgICAgICAgMy4gVHJpZ2dlcnMgdGhlIGBlbnRlcmAgY2FsbGJhY2sg
b24gYGFib3V0YAorICAgICAgIDQuIFRyaWdnZXJzIHRoZSBgc2V0dXBgIGNhbGxiYWNrIG9uIGBh
Ym91dGAKKyAgCisgICAgQHBhcmFtIHtSb3V0ZXJ9IHRyYW5zaXRpb24KKyAgICBAcGFyYW0ge1Ry
YW5zaXRpb25TdGF0ZX0gbmV3U3RhdGUKKyAgKi8KKyAgZnVuY3Rpb24gc2V0dXBDb250ZXh0cyhy
b3V0ZXIsIG5ld1N0YXRlLCB0cmFuc2l0aW9uKSB7CisgICAgdmFyIHBhcnRpdGlvbiA9IHBhcnRp
dGlvbkhhbmRsZXJzKHJvdXRlci5zdGF0ZSwgbmV3U3RhdGUpOworICAgIHZhciBpLCBsLCBoYW5k
bGVyOworCisgICAgZm9yIChpID0gMCwgbCA9IHBhcnRpdGlvbi5leGl0ZWQubGVuZ3RoOyBpIDwg
bDsgaSsrKSB7CisgICAgICBoYW5kbGVyID0gcGFydGl0aW9uLmV4aXRlZFtpXS5oYW5kbGVyOwor
ICAgICAgZGVsZXRlIGhhbmRsZXIuY29udGV4dDsKKworICAgICAgX3JvdXRlclV0aWxzLmNhbGxI
b29rKGhhbmRsZXIsICdyZXNldCcsIHRydWUsIHRyYW5zaXRpb24pOworICAgICAgX3JvdXRlclV0
aWxzLmNhbGxIb29rKGhhbmRsZXIsICdleGl0JywgdHJhbnNpdGlvbik7CisgICAgfQorCisgICAg
dmFyIG9sZFN0YXRlID0gcm91dGVyLm9sZFN0YXRlID0gcm91dGVyLnN0YXRlOworICAgIHJvdXRl
ci5zdGF0ZSA9IG5ld1N0YXRlOworICAgIHZhciBjdXJyZW50SGFuZGxlckluZm9zID0gcm91dGVy
LmN1cnJlbnRIYW5kbGVySW5mb3MgPSBwYXJ0aXRpb24udW5jaGFuZ2VkLnNsaWNlKCk7CisKKyAg
ICB0cnkgeworICAgICAgZm9yIChpID0gMCwgbCA9IHBhcnRpdGlvbi5yZXNldC5sZW5ndGg7IGkg
PCBsOyBpKyspIHsKKyAgICAgICAgaGFuZGxlciA9IHBhcnRpdGlvbi5yZXNldFtpXS5oYW5kbGVy
OworICAgICAgICBfcm91dGVyVXRpbHMuY2FsbEhvb2soaGFuZGxlciwgJ3Jlc2V0JywgZmFsc2Us
IHRyYW5zaXRpb24pOworICAgICAgfQorCisgICAgICBmb3IgKGkgPSAwLCBsID0gcGFydGl0aW9u
LnVwZGF0ZWRDb250ZXh0Lmxlbmd0aDsgaSA8IGw7IGkrKykgeworICAgICAgICBoYW5kbGVyRW50
ZXJlZE9yVXBkYXRlZChjdXJyZW50SGFuZGxlckluZm9zLCBwYXJ0aXRpb24udXBkYXRlZENvbnRl
eHRbaV0sIGZhbHNlLCB0cmFuc2l0aW9uKTsKKyAgICAgIH0KKworICAgICAgZm9yIChpID0gMCwg
bCA9IHBhcnRpdGlvbi5lbnRlcmVkLmxlbmd0aDsgaSA8IGw7IGkrKykgeworICAgICAgICBoYW5k
bGVyRW50ZXJlZE9yVXBkYXRlZChjdXJyZW50SGFuZGxlckluZm9zLCBwYXJ0aXRpb24uZW50ZXJl
ZFtpXSwgdHJ1ZSwgdHJhbnNpdGlvbik7CisgICAgICB9CisgICAgfSBjYXRjaCAoZSkgeworICAg
ICAgcm91dGVyLnN0YXRlID0gb2xkU3RhdGU7CisgICAgICByb3V0ZXIuY3VycmVudEhhbmRsZXJJ
bmZvcyA9IG9sZFN0YXRlLmhhbmRsZXJJbmZvczsKKyAgICAgIHRocm93IGU7CisgICAgfQorCisg
ICAgcm91dGVyLnN0YXRlLnF1ZXJ5UGFyYW1zID0gZmluYWxpemVRdWVyeVBhcmFtQ2hhbmdlKHJv
dXRlciwgY3VycmVudEhhbmRsZXJJbmZvcywgbmV3U3RhdGUucXVlcnlQYXJhbXMsIHRyYW5zaXRp
b24pOworICB9CisKKyAgLyoqCisgICAgQHByaXZhdGUKKyAgCisgICAgSGVscGVyIG1ldGhvZCB1
c2VkIGJ5IHNldHVwQ29udGV4dHMuIEhhbmRsZXMgZXJyb3JzIG9yIHJlZGlyZWN0cworICAgIHRo
YXQgbWF5IGhhcHBlbiBpbiBlbnRlci9zZXR1cC4KKyAgKi8KKyAgZnVuY3Rpb24gaGFuZGxlckVu
dGVyZWRPclVwZGF0ZWQoY3VycmVudEhhbmRsZXJJbmZvcywgaGFuZGxlckluZm8sIGVudGVyLCB0
cmFuc2l0aW9uKSB7CisKKyAgICB2YXIgaGFuZGxlciA9IGhhbmRsZXJJbmZvLmhhbmRsZXIsCisg
ICAgICAgIGNvbnRleHQgPSBoYW5kbGVySW5mby5jb250ZXh0OworCisgICAgaWYgKGVudGVyKSB7
CisgICAgICBfcm91dGVyVXRpbHMuY2FsbEhvb2soaGFuZGxlciwgJ2VudGVyJywgdHJhbnNpdGlv
bik7CisgICAgfQorICAgIGlmICh0cmFuc2l0aW9uICYmIHRyYW5zaXRpb24uaXNBYm9ydGVkKSB7
CisgICAgICB0aHJvdyBuZXcgX3JvdXRlclRyYW5zaXRpb24uVHJhbnNpdGlvbkFib3J0ZWQoKTsK
KyAgICB9CisKKyAgICBoYW5kbGVyLmNvbnRleHQgPSBjb250ZXh0OworICAgIF9yb3V0ZXJVdGls
cy5jYWxsSG9vayhoYW5kbGVyLCAnY29udGV4dERpZENoYW5nZScpOworCisgICAgX3JvdXRlclV0
aWxzLmNhbGxIb29rKGhhbmRsZXIsICdzZXR1cCcsIGNvbnRleHQsIHRyYW5zaXRpb24pOworICAg
IGlmICh0cmFuc2l0aW9uICYmIHRyYW5zaXRpb24uaXNBYm9ydGVkKSB7CisgICAgICB0aHJvdyBu
ZXcgX3JvdXRlclRyYW5zaXRpb24uVHJhbnNpdGlvbkFib3J0ZWQoKTsKKyAgICB9CisKKyAgICBj
dXJyZW50SGFuZGxlckluZm9zLnB1c2goaGFuZGxlckluZm8pOworCisgICAgcmV0dXJuIHRydWU7
CisgIH0KKworICAvKioKKyAgICBAcHJpdmF0ZQorICAKKyAgICBUaGlzIGZ1bmN0aW9uIGlzIGNh
bGxlZCB3aGVuIHRyYW5zaXRpb25pbmcgZnJvbSBvbmUgVVJMIHRvCisgICAgYW5vdGhlciB0byBk
ZXRlcm1pbmUgd2hpY2ggaGFuZGxlcnMgYXJlIG5vIGxvbmdlciBhY3RpdmUsCisgICAgd2hpY2gg
aGFuZGxlcnMgYXJlIG5ld2x5IGFjdGl2ZSwgYW5kIHdoaWNoIGhhbmRsZXJzIHJlbWFpbgorICAg
IGFjdGl2ZSBidXQgaGF2ZSB0aGVpciBjb250ZXh0IGNoYW5nZWQuCisgIAorICAgIFRha2UgYSBs
aXN0IG9mIG9sZCBoYW5kbGVycyBhbmQgbmV3IGhhbmRsZXJzIGFuZCBwYXJ0aXRpb24KKyAgICB0
aGVtIGludG8gZm91ciBidWNrZXRzOgorICAKKyAgICAqIHVuY2hhbmdlZDogdGhlIGhhbmRsZXIg
d2FzIGFjdGl2ZSBpbiBib3RoIHRoZSBvbGQgYW5kCisgICAgICBuZXcgVVJMLCBhbmQgaXRzIGNv
bnRleHQgcmVtYWlucyB0aGUgc2FtZQorICAgICogdXBkYXRlZCBjb250ZXh0OiB0aGUgaGFuZGxl
ciB3YXMgYWN0aXZlIGluIGJvdGggdGhlCisgICAgICBvbGQgYW5kIG5ldyBVUkwsIGJ1dCBpdHMg
Y29udGV4dCBjaGFuZ2VkLiBUaGUgaGFuZGxlcidzCisgICAgICBgc2V0dXBgIG1ldGhvZCwgaWYg
YW55LCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcKKyAgICAgIGNvbnRleHQuCisgICAgKiBl
eGl0ZWQ6IHRoZSBoYW5kbGVyIHdhcyBhY3RpdmUgaW4gdGhlIG9sZCBVUkwsIGJ1dCBpcworICAg
ICAgbm8gbG9uZ2VyIGFjdGl2ZS4KKyAgICAqIGVudGVyZWQ6IHRoZSBoYW5kbGVyIHdhcyBub3Qg
YWN0aXZlIGluIHRoZSBvbGQgVVJMLCBidXQKKyAgICAgIGlzIG5vdyBhY3RpdmUuCisgIAorICAg
IFRoZSBQYXJ0aXRpb25lZEhhbmRsZXJzIHN0cnVjdHVyZSBoYXMgZm91ciBmaWVsZHM6CisgIAor
ICAgICogYHVwZGF0ZWRDb250ZXh0YDogYSBsaXN0IG9mIGBIYW5kbGVySW5mb2Agb2JqZWN0cyB0
aGF0CisgICAgICByZXByZXNlbnQgaGFuZGxlcnMgdGhhdCByZW1haW4gYWN0aXZlIGJ1dCBoYXZl
IGEgY2hhbmdlZAorICAgICAgY29udGV4dAorICAgICogYGVudGVyZWRgOiBhIGxpc3Qgb2YgYEhh
bmRsZXJJbmZvYCBvYmplY3RzIHRoYXQgcmVwcmVzZW50CisgICAgICBoYW5kbGVycyB0aGF0IGFy
ZSBuZXdseSBhY3RpdmUKKyAgICAqIGBleGl0ZWRgOiBhIGxpc3Qgb2YgYEhhbmRsZXJJbmZvYCBv
YmplY3RzIHRoYXQgYXJlIG5vCisgICAgICBsb25nZXIgYWN0aXZlLgorICAgICogYHVuY2hhbmdl
ZGA6IGEgbGlzdCBvZiBgSGFuZGVySW5mb2Agb2JqZWN0cyB0aGF0IHJlbWFpbiBhY3RpdmUuCisg
IAorICAgIEBwYXJhbSB7QXJyYXlbSGFuZGxlckluZm9dfSBvbGRIYW5kbGVycyBhIGxpc3Qgb2Yg
dGhlIGhhbmRsZXIKKyAgICAgIGluZm9ybWF0aW9uIGZvciB0aGUgcHJldmlvdXMgVVJMIChvciBg
W11gIGlmIHRoaXMgaXMgdGhlCisgICAgICBmaXJzdCBoYW5kbGVkIHRyYW5zaXRpb24pCisgICAg
QHBhcmFtIHtBcnJheVtIYW5kbGVySW5mb119IG5ld0hhbmRsZXJzIGEgbGlzdCBvZiB0aGUgaGFu
ZGxlcgorICAgICAgaW5mb3JtYXRpb24gZm9yIHRoZSBuZXcgVVJMCisgIAorICAgIEByZXR1cm4g
e1BhcnRpdGlvbn0KKyAgKi8KKyAgZnVuY3Rpb24gcGFydGl0aW9uSGFuZGxlcnMob2xkU3RhdGUs
IG5ld1N0YXRlKSB7CisgICAgdmFyIG9sZEhhbmRsZXJzID0gb2xkU3RhdGUuaGFuZGxlckluZm9z
OworICAgIHZhciBuZXdIYW5kbGVycyA9IG5ld1N0YXRlLmhhbmRsZXJJbmZvczsKKworICAgIHZh
ciBoYW5kbGVycyA9IHsKKyAgICAgIHVwZGF0ZWRDb250ZXh0OiBbXSwKKyAgICAgIGV4aXRlZDog
W10sCisgICAgICBlbnRlcmVkOiBbXSwKKyAgICAgIHVuY2hhbmdlZDogW10KKyAgICB9OworCisg
ICAgdmFyIGhhbmRsZXJDaGFuZ2VkLAorICAgICAgICBjb250ZXh0Q2hhbmdlZCA9IGZhbHNlLAor
ICAgICAgICBpLAorICAgICAgICBsOworCisgICAgZm9yIChpID0gMCwgbCA9IG5ld0hhbmRsZXJz
Lmxlbmd0aDsgaSA8IGw7IGkrKykgeworICAgICAgdmFyIG9sZEhhbmRsZXIgPSBvbGRIYW5kbGVy
c1tpXSwKKyAgICAgICAgICBuZXdIYW5kbGVyID0gbmV3SGFuZGxlcnNbaV07CisKKyAgICAgIGlm
ICghb2xkSGFuZGxlciB8fCBvbGRIYW5kbGVyLmhhbmRsZXIgIT09IG5ld0hhbmRsZXIuaGFuZGxl
cikgeworICAgICAgICBoYW5kbGVyQ2hhbmdlZCA9IHRydWU7CisgICAgICB9CisKKyAgICAgIGlm
IChoYW5kbGVyQ2hhbmdlZCkgeworICAgICAgICBoYW5kbGVycy5lbnRlcmVkLnB1c2gobmV3SGFu
ZGxlcik7CisgICAgICAgIGlmIChvbGRIYW5kbGVyKSB7CisgICAgICAgICAgaGFuZGxlcnMuZXhp
dGVkLnVuc2hpZnQob2xkSGFuZGxlcik7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSBpZiAoY29u
dGV4dENoYW5nZWQgfHwgb2xkSGFuZGxlci5jb250ZXh0ICE9PSBuZXdIYW5kbGVyLmNvbnRleHQp
IHsKKyAgICAgICAgY29udGV4dENoYW5nZWQgPSB0cnVlOworICAgICAgICBoYW5kbGVycy51cGRh
dGVkQ29udGV4dC5wdXNoKG5ld0hhbmRsZXIpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaGFu
ZGxlcnMudW5jaGFuZ2VkLnB1c2gob2xkSGFuZGxlcik7CisgICAgICB9CisgICAgfQorCisgICAg
Zm9yIChpID0gbmV3SGFuZGxlcnMubGVuZ3RoLCBsID0gb2xkSGFuZGxlcnMubGVuZ3RoOyBpIDwg
bDsgaSsrKSB7CisgICAgICBoYW5kbGVycy5leGl0ZWQudW5zaGlmdChvbGRIYW5kbGVyc1tpXSk7
CisgICAgfQorCisgICAgaGFuZGxlcnMucmVzZXQgPSBoYW5kbGVycy51cGRhdGVkQ29udGV4dC5z
bGljZSgpOworICAgIGhhbmRsZXJzLnJlc2V0LnJldmVyc2UoKTsKKworICAgIHJldHVybiBoYW5k
bGVyczsKKyAgfQorCisgIGZ1bmN0aW9uIHVwZGF0ZVVSTCh0cmFuc2l0aW9uLCBzdGF0ZSwgaW5w
dXRVcmwpIHsKKyAgICB2YXIgdXJsTWV0aG9kID0gdHJhbnNpdGlvbi51cmxNZXRob2Q7CisKKyAg
ICBpZiAoIXVybE1ldGhvZCkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZhciByb3V0
ZXIgPSB0cmFuc2l0aW9uLnJvdXRlciwKKyAgICAgICAgaGFuZGxlckluZm9zID0gc3RhdGUuaGFu
ZGxlckluZm9zLAorICAgICAgICBoYW5kbGVyTmFtZSA9IGhhbmRsZXJJbmZvc1toYW5kbGVySW5m
b3MubGVuZ3RoIC0gMV0ubmFtZSwKKyAgICAgICAgcGFyYW1zID0ge307CisKKyAgICBmb3IgKHZh
ciBpID0gaGFuZGxlckluZm9zLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICB2YXIg
aGFuZGxlckluZm8gPSBoYW5kbGVySW5mb3NbaV07CisgICAgICBfcm91dGVyVXRpbHMubWVyZ2Uo
cGFyYW1zLCBoYW5kbGVySW5mby5wYXJhbXMpOworICAgICAgaWYgKGhhbmRsZXJJbmZvLmhhbmRs
ZXIuaW5hY2Nlc3NpYmxlQnlVUkwpIHsKKyAgICAgICAgdXJsTWV0aG9kID0gbnVsbDsKKyAgICAg
IH0KKyAgICB9CisKKyAgICBpZiAodXJsTWV0aG9kKSB7CisgICAgICBwYXJhbXMucXVlcnlQYXJh
bXMgPSB0cmFuc2l0aW9uLl92aXNpYmxlUXVlcnlQYXJhbXMgfHwgc3RhdGUucXVlcnlQYXJhbXM7
CisgICAgICB2YXIgdXJsID0gcm91dGVyLnJlY29nbml6ZXIuZ2VuZXJhdGUoaGFuZGxlck5hbWUs
IHBhcmFtcyk7CisKKyAgICAgIGlmICh1cmxNZXRob2QgPT09ICdyZXBsYWNlJykgeworICAgICAg
ICByb3V0ZXIucmVwbGFjZVVSTCh1cmwpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcm91dGVy
LnVwZGF0ZVVSTCh1cmwpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIC8qKgorICAgIEBwcml2
YXRlCisgIAorICAgIFVwZGF0ZXMgdGhlIFVSTCAoaWYgbmVjZXNzYXJ5KSBhbmQgY2FsbHMgYHNl
dHVwQ29udGV4dHNgCisgICAgdG8gdXBkYXRlIHRoZSByb3V0ZXIncyBhcnJheSBvZiBgY3VycmVu
dEhhbmRsZXJJbmZvc2AuCisgICAqLworICBmdW5jdGlvbiBmaW5hbGl6ZVRyYW5zaXRpb24odHJh
bnNpdGlvbiwgbmV3U3RhdGUpIHsKKworICAgIHRyeSB7CisgICAgICBfcm91dGVyVXRpbHMubG9n
KHRyYW5zaXRpb24ucm91dGVyLCB0cmFuc2l0aW9uLnNlcXVlbmNlLCAiUmVzb2x2ZWQgYWxsIG1v
ZGVscyBvbiBkZXN0aW5hdGlvbiByb3V0ZTsgZmluYWxpemluZyB0cmFuc2l0aW9uLiIpOworCisg
ICAgICB2YXIgcm91dGVyID0gdHJhbnNpdGlvbi5yb3V0ZXIsCisgICAgICAgICAgaGFuZGxlcklu
Zm9zID0gbmV3U3RhdGUuaGFuZGxlckluZm9zLAorICAgICAgICAgIHNlcSA9IHRyYW5zaXRpb24u
c2VxdWVuY2U7CisKKyAgICAgIC8vIFJ1biBhbGwgdGhlIG5lY2Vzc2FyeSBlbnRlci9zZXR1cC9l
eGl0IGhvb2tzCisgICAgICBzZXR1cENvbnRleHRzKHJvdXRlciwgbmV3U3RhdGUsIHRyYW5zaXRp
b24pOworCisgICAgICAvLyBDaGVjayBpZiBhIHJlZGlyZWN0IG9jY3VycmVkIGluIGVudGVyL3Nl
dHVwCisgICAgICBpZiAodHJhbnNpdGlvbi5pc0Fib3J0ZWQpIHsKKyAgICAgICAgLy8gVE9ETzog
Y2xlYW5lciB3YXk/IGRpc3Rpbmd1aXNoIGIvdyB0YXJnZXRIYW5kbGVySW5mb3M/CisgICAgICAg
IHJvdXRlci5zdGF0ZS5oYW5kbGVySW5mb3MgPSByb3V0ZXIuY3VycmVudEhhbmRsZXJJbmZvczsK
KyAgICAgICAgcmV0dXJuIF9yc3ZwUHJvbWlzZS5kZWZhdWx0LnJlamVjdChfcm91dGVyVHJhbnNp
dGlvbi5sb2dBYm9ydCh0cmFuc2l0aW9uKSk7CisgICAgICB9CisKKyAgICAgIHVwZGF0ZVVSTCh0
cmFuc2l0aW9uLCBuZXdTdGF0ZSwgdHJhbnNpdGlvbi5pbnRlbnQudXJsKTsKKworICAgICAgdHJh
bnNpdGlvbi5pc0FjdGl2ZSA9IGZhbHNlOworICAgICAgcm91dGVyLmFjdGl2ZVRyYW5zaXRpb24g
PSBudWxsOworCisgICAgICBfcm91dGVyVXRpbHMudHJpZ2dlcihyb3V0ZXIsIHJvdXRlci5jdXJy
ZW50SGFuZGxlckluZm9zLCB0cnVlLCBbJ2RpZFRyYW5zaXRpb24nXSk7CisKKyAgICAgIGlmIChy
b3V0ZXIuZGlkVHJhbnNpdGlvbikgeworICAgICAgICByb3V0ZXIuZGlkVHJhbnNpdGlvbihyb3V0
ZXIuY3VycmVudEhhbmRsZXJJbmZvcyk7CisgICAgICB9CisKKyAgICAgIF9yb3V0ZXJVdGlscy5s
b2cocm91dGVyLCB0cmFuc2l0aW9uLnNlcXVlbmNlLCAiVFJBTlNJVElPTiBDT01QTEVURS4iKTsK
KworICAgICAgLy8gUmVzb2x2ZSB3aXRoIHRoZSBmaW5hbCBoYW5kbGVyLgorICAgICAgcmV0dXJu
IGhhbmRsZXJJbmZvc1toYW5kbGVySW5mb3MubGVuZ3RoIC0gMV0uaGFuZGxlcjsKKyAgICB9IGNh
dGNoIChlKSB7CisgICAgICBpZiAoIShlIGluc3RhbmNlb2YgX3JvdXRlclRyYW5zaXRpb24uVHJh
bnNpdGlvbkFib3J0ZWQpKSB7CisgICAgICAgIC8vdmFyIGVycm9uZW91c0hhbmRsZXIgPSBoYW5k
bGVySW5mb3MucG9wKCk7CisgICAgICAgIHZhciBpbmZvcyA9IHRyYW5zaXRpb24uc3RhdGUuaGFu
ZGxlckluZm9zOworICAgICAgICB0cmFuc2l0aW9uLnRyaWdnZXIodHJ1ZSwgJ2Vycm9yJywgZSwg
dHJhbnNpdGlvbiwgaW5mb3NbaW5mb3MubGVuZ3RoIC0gMV0uaGFuZGxlcik7CisgICAgICAgIHRy
YW5zaXRpb24uYWJvcnQoKTsKKyAgICAgIH0KKworICAgICAgdGhyb3cgZTsKKyAgICB9CisgIH0K
KworICAvKioKKyAgICBAcHJpdmF0ZQorICAKKyAgICBCZWdpbnMgYW5kIHJldHVybnMgYSBUcmFu
c2l0aW9uIGJhc2VkIG9uIHRoZSBwcm92aWRlZAorICAgIGFyZ3VtZW50cy4gQWNjZXB0cyBhcmd1
bWVudHMgaW4gdGhlIGZvcm0gb2YgYm90aCBVUkwKKyAgICB0cmFuc2l0aW9ucyBhbmQgbmFtZWQg
dHJhbnNpdGlvbnMuCisgIAorICAgIEBwYXJhbSB7Um91dGVyfSByb3V0ZXIKKyAgICBAcGFyYW0g
e0FycmF5W09iamVjdF19IGFyZ3MgYXJndW1lbnRzIHBhc3NlZCB0byB0cmFuc2l0aW9uVG8sCisg
ICAgICByZXBsYWNlV2l0aCwgb3IgaGFuZGxlVVJMCisgICovCisgIGZ1bmN0aW9uIGRvVHJhbnNp
dGlvbihyb3V0ZXIsIGFyZ3MsIGlzSW50ZXJtZWRpYXRlKSB7CisgICAgLy8gTm9ybWFsaXplIGJs
YW5rIHRyYW5zaXRpb25zIHRvIHJvb3QgVVJMIHRyYW5zaXRpb25zLgorICAgIHZhciBuYW1lID0g
YXJnc1swXSB8fCAnLyc7CisKKyAgICB2YXIgbGFzdEFyZyA9IGFyZ3NbYXJncy5sZW5ndGggLSAx
XTsKKyAgICB2YXIgcXVlcnlQYXJhbXMgPSB7fTsKKyAgICBpZiAobGFzdEFyZyAmJiBsYXN0QXJn
Lmhhc093blByb3BlcnR5KCdxdWVyeVBhcmFtcycpKSB7CisgICAgICBxdWVyeVBhcmFtcyA9IHBv
cC5jYWxsKGFyZ3MpLnF1ZXJ5UGFyYW1zOworICAgIH0KKworICAgIHZhciBpbnRlbnQ7CisgICAg
aWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7CisKKyAgICAgIF9yb3V0ZXJVdGlscy5sb2cocm91dGVy
LCAiVXBkYXRpbmcgcXVlcnkgcGFyYW1zIik7CisKKyAgICAgIC8vIEEgcXVlcnkgcGFyYW0gdXBk
YXRlIGlzIHJlYWxseSBqdXN0IGEgdHJhbnNpdGlvbgorICAgICAgLy8gaW50byB0aGUgcm91dGUg
eW91J3JlIGFscmVhZHkgb24uCisgICAgICB2YXIgaGFuZGxlckluZm9zID0gcm91dGVyLnN0YXRl
LmhhbmRsZXJJbmZvczsKKyAgICAgIGludGVudCA9IG5ldyBfcm91dGVyVHJhbnNpdGlvbkludGVu
dE5hbWVkVHJhbnNpdGlvbkludGVudC5kZWZhdWx0KHsKKyAgICAgICAgbmFtZTogaGFuZGxlcklu
Zm9zW2hhbmRsZXJJbmZvcy5sZW5ndGggLSAxXS5uYW1lLAorICAgICAgICBjb250ZXh0czogW10s
CisgICAgICAgIHF1ZXJ5UGFyYW1zOiBxdWVyeVBhcmFtcworICAgICAgfSk7CisgICAgfSBlbHNl
IGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSB7CisKKyAgICAgIF9yb3V0ZXJVdGlscy5sb2co
cm91dGVyLCAiQXR0ZW1wdGluZyBVUkwgdHJhbnNpdGlvbiB0byAiICsgbmFtZSk7CisgICAgICBp
bnRlbnQgPSBuZXcgX3JvdXRlclRyYW5zaXRpb25JbnRlbnRVcmxUcmFuc2l0aW9uSW50ZW50LmRl
ZmF1bHQoeyB1cmw6IG5hbWUgfSk7CisgICAgfSBlbHNlIHsKKworICAgICAgX3JvdXRlclV0aWxz
LmxvZyhyb3V0ZXIsICJBdHRlbXB0aW5nIHRyYW5zaXRpb24gdG8gIiArIG5hbWUpOworICAgICAg
aW50ZW50ID0gbmV3IF9yb3V0ZXJUcmFuc2l0aW9uSW50ZW50TmFtZWRUcmFuc2l0aW9uSW50ZW50
LmRlZmF1bHQoeworICAgICAgICBuYW1lOiBhcmdzWzBdLAorICAgICAgICBjb250ZXh0czogX3Jv
dXRlclV0aWxzLnNsaWNlLmNhbGwoYXJncywgMSksCisgICAgICAgIHF1ZXJ5UGFyYW1zOiBxdWVy
eVBhcmFtcworICAgICAgfSk7CisgICAgfQorCisgICAgcmV0dXJuIHJvdXRlci50cmFuc2l0aW9u
QnlJbnRlbnQoaW50ZW50LCBpc0ludGVybWVkaWF0ZSk7CisgIH0KKworICBmdW5jdGlvbiBoYW5k
bGVySW5mb3NFcXVhbChoYW5kbGVySW5mb3MsIG90aGVySGFuZGxlckluZm9zKSB7CisgICAgaWYg
KGhhbmRsZXJJbmZvcy5sZW5ndGggIT09IG90aGVySGFuZGxlckluZm9zLmxlbmd0aCkgeworICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBoYW5k
bGVySW5mb3MubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgIGlmIChoYW5kbGVySW5mb3Nb
aV0gIT09IG90aGVySGFuZGxlckluZm9zW2ldKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBmdW5jdGlvbiBmaW5hbGl6
ZVF1ZXJ5UGFyYW1DaGFuZ2Uocm91dGVyLCByZXNvbHZlZEhhbmRsZXJzLCBuZXdRdWVyeVBhcmFt
cywgdHJhbnNpdGlvbikgeworICAgIC8vIFdlIGZpcmUgYSBmaW5hbGl6ZVF1ZXJ5UGFyYW1DaGFu
Z2UgZXZlbnQgd2hpY2gKKyAgICAvLyBnaXZlcyB0aGUgbmV3IHJvdXRlIGhpZXJhcmNoeSBhIGNo
YW5jZSB0byB0ZWxsCisgICAgLy8gdXMgd2hpY2ggcXVlcnkgcGFyYW1zIGl0J3MgY29uc3VtaW5n
IGFuZCB3aGF0CisgICAgLy8gdGhlaXIgZmluYWwgdmFsdWVzIGFyZS4gSWYgYSBxdWVyeSBwYXJh
bSBpcworICAgIC8vIG5vIGxvbmdlciBjb25zdW1lZCBpbiB0aGUgZmluYWwgcm91dGUgaGllcmFy
Y2h5LAorICAgIC8vIGl0cyBzZXJpYWxpemVkIHNlZ21lbnQgd2lsbCBiZSByZW1vdmVkCisgICAg
Ly8gZnJvbSB0aGUgVVJMLgorCisgICAgZm9yICh2YXIgayBpbiBuZXdRdWVyeVBhcmFtcykgewor
ICAgICAgaWYgKG5ld1F1ZXJ5UGFyYW1zLmhhc093blByb3BlcnR5KGspICYmIG5ld1F1ZXJ5UGFy
YW1zW2tdID09PSBudWxsKSB7CisgICAgICAgIGRlbGV0ZSBuZXdRdWVyeVBhcmFtc1trXTsKKyAg
ICAgIH0KKyAgICB9CisKKyAgICB2YXIgZmluYWxRdWVyeVBhcmFtc0FycmF5ID0gW107CisgICAg
X3JvdXRlclV0aWxzLnRyaWdnZXIocm91dGVyLCByZXNvbHZlZEhhbmRsZXJzLCB0cnVlLCBbJ2Zp
bmFsaXplUXVlcnlQYXJhbUNoYW5nZScsIG5ld1F1ZXJ5UGFyYW1zLCBmaW5hbFF1ZXJ5UGFyYW1z
QXJyYXksIHRyYW5zaXRpb25dKTsKKworICAgIGlmICh0cmFuc2l0aW9uKSB7CisgICAgICB0cmFu
c2l0aW9uLl92aXNpYmxlUXVlcnlQYXJhbXMgPSB7fTsKKyAgICB9CisKKyAgICB2YXIgZmluYWxR
dWVyeVBhcmFtcyA9IHt9OworICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBmaW5hbFF1ZXJ5UGFy
YW1zQXJyYXkubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgIHZhciBxcCA9IGZpbmFsUXVl
cnlQYXJhbXNBcnJheVtpXTsKKyAgICAgIGZpbmFsUXVlcnlQYXJhbXNbcXAua2V5XSA9IHFwLnZh
bHVlOworICAgICAgaWYgKHRyYW5zaXRpb24gJiYgcXAudmlzaWJsZSAhPT0gZmFsc2UpIHsKKyAg
ICAgICAgdHJhbnNpdGlvbi5fdmlzaWJsZVF1ZXJ5UGFyYW1zW3FwLmtleV0gPSBxcC52YWx1ZTsK
KyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZpbmFsUXVlcnlQYXJhbXM7CisgIH0KKworICBm
dW5jdGlvbiBub3RpZnlFeGlzdGluZ0hhbmRsZXJzKHJvdXRlciwgbmV3U3RhdGUsIG5ld1RyYW5z
aXRpb24pIHsKKyAgICB2YXIgb2xkSGFuZGxlcnMgPSByb3V0ZXIuc3RhdGUuaGFuZGxlckluZm9z
LAorICAgICAgICBjaGFuZ2luZyA9IFtdLAorICAgICAgICBsZWF2aW5nSW5kZXggPSBudWxsLAor
ICAgICAgICBsZWF2aW5nLAorICAgICAgICBsZWF2aW5nQ2hlY2tlciwKKyAgICAgICAgaSwKKyAg
ICAgICAgb2xkSGFuZGxlckxlbiwKKyAgICAgICAgb2xkSGFuZGxlciwKKyAgICAgICAgbmV3SGFu
ZGxlcjsKKworICAgIG9sZEhhbmRsZXJMZW4gPSBvbGRIYW5kbGVycy5sZW5ndGg7CisgICAgZm9y
IChpID0gMDsgaSA8IG9sZEhhbmRsZXJMZW47IGkrKykgeworICAgICAgb2xkSGFuZGxlciA9IG9s
ZEhhbmRsZXJzW2ldOworICAgICAgbmV3SGFuZGxlciA9IG5ld1N0YXRlLmhhbmRsZXJJbmZvc1tp
XTsKKworICAgICAgaWYgKCFuZXdIYW5kbGVyIHx8IG9sZEhhbmRsZXIubmFtZSAhPT0gbmV3SGFu
ZGxlci5uYW1lKSB7CisgICAgICAgIGxlYXZpbmdJbmRleCA9IGk7CisgICAgICAgIGJyZWFrOwor
ICAgICAgfQorCisgICAgICBpZiAoIW5ld0hhbmRsZXIuaXNSZXNvbHZlZCkgeworICAgICAgICBj
aGFuZ2luZy5wdXNoKG9sZEhhbmRsZXIpOworICAgICAgfQorICAgIH0KKworICAgIGlmIChsZWF2
aW5nSW5kZXggIT09IG51bGwpIHsKKyAgICAgIGxlYXZpbmcgPSBvbGRIYW5kbGVycy5zbGljZShs
ZWF2aW5nSW5kZXgsIG9sZEhhbmRsZXJMZW4pOworICAgICAgbGVhdmluZ0NoZWNrZXIgPSBmdW5j
dGlvbiAobmFtZSkgeworICAgICAgICBmb3IgKHZhciBoID0gMCwgbGVuID0gbGVhdmluZy5sZW5n
dGg7IGggPCBsZW47IGgrKykgeworICAgICAgICAgIGlmIChsZWF2aW5nW2hdLm5hbWUgPT09IG5h
bWUpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9OworICAgIH0KKworICAgIF9yb3V0ZXJVdGls
cy50cmlnZ2VyKHJvdXRlciwgb2xkSGFuZGxlcnMsIHRydWUsIFsnd2lsbFRyYW5zaXRpb24nLCBu
ZXdUcmFuc2l0aW9uXSk7CisKKyAgICBpZiAocm91dGVyLndpbGxUcmFuc2l0aW9uKSB7CisgICAg
ICByb3V0ZXIud2lsbFRyYW5zaXRpb24ob2xkSGFuZGxlcnMsIG5ld1N0YXRlLmhhbmRsZXJJbmZv
cywgbmV3VHJhbnNpdGlvbik7CisgICAgfQorICB9CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gUm91
dGVyOworfSk7CitlbmlmZWQoJ3JvdXRlci90cmFuc2l0aW9uLWludGVudCcsIFsnZXhwb3J0cycs
ICdyb3V0ZXIvdXRpbHMnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9yb3V0ZXJVdGlscykgeworICAn
dXNlIHN0cmljdCc7CisKKyAgZnVuY3Rpb24gVHJhbnNpdGlvbkludGVudChwcm9wcykgeworICAg
IHRoaXMuaW5pdGlhbGl6ZShwcm9wcyk7CisKKyAgICAvLyBUT0RPOiB3YXQKKyAgICB0aGlzLmRh
dGEgPSB0aGlzLmRhdGEgfHwge307CisgIH0KKworICBUcmFuc2l0aW9uSW50ZW50LnByb3RvdHlw
ZSA9IHsKKyAgICBpbml0aWFsaXplOiBudWxsLAorICAgIGFwcGx5VG9TdGF0ZTogbnVsbAorICB9
OworCisgIGV4cG9ydHMuZGVmYXVsdCA9IFRyYW5zaXRpb25JbnRlbnQ7Cit9KTsKK2VuaWZlZCgn
cm91dGVyL3RyYW5zaXRpb24taW50ZW50L25hbWVkLXRyYW5zaXRpb24taW50ZW50JywgWydleHBv
cnRzJywgJ3JvdXRlci90cmFuc2l0aW9uLWludGVudCcsICdyb3V0ZXIvdHJhbnNpdGlvbi1zdGF0
ZScsICdyb3V0ZXIvaGFuZGxlci1pbmZvL2ZhY3RvcnknLCAncm91dGVyL3V0aWxzJ10sIGZ1bmN0
aW9uIChleHBvcnRzLCBfcm91dGVyVHJhbnNpdGlvbkludGVudCwgX3JvdXRlclRyYW5zaXRpb25T
dGF0ZSwgX3JvdXRlckhhbmRsZXJJbmZvRmFjdG9yeSwgX3JvdXRlclV0aWxzKSB7CisgICd1c2Ug
c3RyaWN0JzsKKworICBleHBvcnRzLmRlZmF1bHQgPSBfcm91dGVyVXRpbHMuc3ViY2xhc3MoX3Jv
dXRlclRyYW5zaXRpb25JbnRlbnQuZGVmYXVsdCwgeworICAgIG5hbWU6IG51bGwsCisgICAgcGl2
b3RIYW5kbGVyOiBudWxsLAorICAgIGNvbnRleHRzOiBudWxsLAorICAgIHF1ZXJ5UGFyYW1zOiBu
dWxsLAorCisgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKHByb3BzKSB7CisgICAgICB0aGlzLm5h
bWUgPSBwcm9wcy5uYW1lOworICAgICAgdGhpcy5waXZvdEhhbmRsZXIgPSBwcm9wcy5waXZvdEhh
bmRsZXI7CisgICAgICB0aGlzLmNvbnRleHRzID0gcHJvcHMuY29udGV4dHMgfHwgW107CisgICAg
ICB0aGlzLnF1ZXJ5UGFyYW1zID0gcHJvcHMucXVlcnlQYXJhbXM7CisgICAgfSwKKworICAgIGFw
cGx5VG9TdGF0ZTogZnVuY3Rpb24gKG9sZFN0YXRlLCByZWNvZ25pemVyLCBnZXRIYW5kbGVyLCBp
c0ludGVybWVkaWF0ZSkgeworCisgICAgICB2YXIgcGFydGl0aW9uZWRBcmdzID0gX3JvdXRlclV0
aWxzLmV4dHJhY3RRdWVyeVBhcmFtcyhbdGhpcy5uYW1lXS5jb25jYXQodGhpcy5jb250ZXh0cykp
LAorICAgICAgICAgIHB1cmVBcmdzID0gcGFydGl0aW9uZWRBcmdzWzBdLAorICAgICAgICAgIHF1
ZXJ5UGFyYW1zID0gcGFydGl0aW9uZWRBcmdzWzFdLAorICAgICAgICAgIGhhbmRsZXJzID0gcmVj
b2duaXplci5oYW5kbGVyc0ZvcihwdXJlQXJnc1swXSk7CisKKyAgICAgIHZhciB0YXJnZXRSb3V0
ZU5hbWUgPSBoYW5kbGVyc1toYW5kbGVycy5sZW5ndGggLSAxXS5oYW5kbGVyOworCisgICAgICBy
ZXR1cm4gdGhpcy5hcHBseVRvSGFuZGxlcnMob2xkU3RhdGUsIGhhbmRsZXJzLCBnZXRIYW5kbGVy
LCB0YXJnZXRSb3V0ZU5hbWUsIGlzSW50ZXJtZWRpYXRlKTsKKyAgICB9LAorCisgICAgYXBwbHlU
b0hhbmRsZXJzOiBmdW5jdGlvbiAob2xkU3RhdGUsIGhhbmRsZXJzLCBnZXRIYW5kbGVyLCB0YXJn
ZXRSb3V0ZU5hbWUsIGlzSW50ZXJtZWRpYXRlLCBjaGVja2luZ0lmQWN0aXZlKSB7CisKKyAgICAg
IHZhciBpLCBsZW47CisgICAgICB2YXIgbmV3U3RhdGUgPSBuZXcgX3JvdXRlclRyYW5zaXRpb25T
dGF0ZS5kZWZhdWx0KCk7CisgICAgICB2YXIgb2JqZWN0cyA9IHRoaXMuY29udGV4dHMuc2xpY2Uo
MCk7CisKKyAgICAgIHZhciBpbnZhbGlkYXRlSW5kZXggPSBoYW5kbGVycy5sZW5ndGg7CisKKyAg
ICAgIC8vIFBpdm90IGhhbmRsZXJzIGFyZSBwcm92aWRlZCBmb3IgcmVmcmVzaCB0cmFuc2l0aW9u
cworICAgICAgaWYgKHRoaXMucGl2b3RIYW5kbGVyKSB7CisgICAgICAgIGZvciAoaSA9IDAsIGxl
biA9IGhhbmRsZXJzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAgICAgaWYgKGdldEhh
bmRsZXIoaGFuZGxlcnNbaV0uaGFuZGxlcikgPT09IHRoaXMucGl2b3RIYW5kbGVyKSB7CisgICAg
ICAgICAgICBpbnZhbGlkYXRlSW5kZXggPSBpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHZhciBwaXZvdEhhbmRsZXJGb3VuZCA9
ICF0aGlzLnBpdm90SGFuZGxlcjsKKworICAgICAgZm9yIChpID0gaGFuZGxlcnMubGVuZ3RoIC0g
MTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGhhbmRsZXJzW2ldOworICAg
ICAgICB2YXIgbmFtZSA9IHJlc3VsdC5oYW5kbGVyOworICAgICAgICB2YXIgaGFuZGxlciA9IGdl
dEhhbmRsZXIobmFtZSk7CisKKyAgICAgICAgdmFyIG9sZEhhbmRsZXJJbmZvID0gb2xkU3RhdGUu
aGFuZGxlckluZm9zW2ldOworICAgICAgICB2YXIgbmV3SGFuZGxlckluZm8gPSBudWxsOworCisg
ICAgICAgIGlmIChyZXN1bHQubmFtZXMubGVuZ3RoID4gMCkgeworICAgICAgICAgIGlmIChpID49
IGludmFsaWRhdGVJbmRleCkgeworICAgICAgICAgICAgbmV3SGFuZGxlckluZm8gPSB0aGlzLmNy
ZWF0ZVBhcmFtSGFuZGxlckluZm8obmFtZSwgaGFuZGxlciwgcmVzdWx0Lm5hbWVzLCBvYmplY3Rz
LCBvbGRIYW5kbGVySW5mbyk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG5ld0hh
bmRsZXJJbmZvID0gdGhpcy5nZXRIYW5kbGVySW5mb0ZvckR5bmFtaWNTZWdtZW50KG5hbWUsIGhh
bmRsZXIsIHJlc3VsdC5uYW1lcywgb2JqZWN0cywgb2xkSGFuZGxlckluZm8sIHRhcmdldFJvdXRl
TmFtZSwgaSk7CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIC8vIFRo
aXMgcm91dGUgaGFzIG5vIGR5bmFtaWMgc2VnbWVudC4KKyAgICAgICAgICAvLyBUaGVyZWZvcmUg
dHJlYXQgYXMgYSBwYXJhbS1iYXNlZCBoYW5kbGVySW5mbworICAgICAgICAgIC8vIHdpdGggZW1w
dHkgcGFyYW1zLiBUaGlzIHdpbGwgY2F1c2UgdGhlIGBtb2RlbGAKKyAgICAgICAgICAvLyBob29r
IHRvIGJlIGNhbGxlZCB3aXRoIGVtcHR5IHBhcmFtcywgd2hpY2ggaXMgZGVzaXJhYmxlLgorICAg
ICAgICAgIG5ld0hhbmRsZXJJbmZvID0gdGhpcy5jcmVhdGVQYXJhbUhhbmRsZXJJbmZvKG5hbWUs
IGhhbmRsZXIsIHJlc3VsdC5uYW1lcywgb2JqZWN0cywgb2xkSGFuZGxlckluZm8pOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGNoZWNraW5nSWZBY3RpdmUpIHsKKyAgICAgICAgICAvLyBJZiB3
ZSdyZSBwZXJmb3JtaW5nIGFuIGlzQWN0aXZlIGNoZWNrLCB3ZSB3YW50IHRvCisgICAgICAgICAg
Ly8gc2VyaWFsaXplIFVSTCBwYXJhbXMgd2l0aCB0aGUgcHJvdmlkZWQgY29udGV4dCwgYnV0Cisg
ICAgICAgICAgLy8gaWdub3JlIG1pc21hdGNoZXMgYmV0d2VlbiBvbGQgYW5kIG5ldyBjb250ZXh0
LgorICAgICAgICAgIG5ld0hhbmRsZXJJbmZvID0gbmV3SGFuZGxlckluZm8uYmVjb21lUmVzb2x2
ZWQobnVsbCwgbmV3SGFuZGxlckluZm8uY29udGV4dCk7CisgICAgICAgICAgdmFyIG9sZENvbnRl
eHQgPSBvbGRIYW5kbGVySW5mbyAmJiBvbGRIYW5kbGVySW5mby5jb250ZXh0OworICAgICAgICAg
IGlmIChyZXN1bHQubmFtZXMubGVuZ3RoID4gMCAmJiBuZXdIYW5kbGVySW5mby5jb250ZXh0ID09
PSBvbGRDb250ZXh0KSB7CisgICAgICAgICAgICAvLyBJZiBjb250ZXh0cyBtYXRjaCBpbiBpc0Fj
dGl2ZSB0ZXN0LCBhc3N1bWUgcGFyYW1zIGFsc28gbWF0Y2guCisgICAgICAgICAgICAvLyBUaGlz
IGFsbG93cyBmb3IgZmxleGliaWxpdHkgaW4gbm90IHJlcXVpcmluZyB0aGF0IGV2ZXJ5IGxhc3QK
KyAgICAgICAgICAgIC8vIGhhbmRsZXIgcHJvdmlkZSBhIGBzZXJpYWxpemVgIG1ldGhvZAorICAg
ICAgICAgICAgbmV3SGFuZGxlckluZm8ucGFyYW1zID0gb2xkSGFuZGxlckluZm8gJiYgb2xkSGFu
ZGxlckluZm8ucGFyYW1zOworICAgICAgICAgIH0KKyAgICAgICAgICBuZXdIYW5kbGVySW5mby5j
b250ZXh0ID0gb2xkQ29udGV4dDsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBoYW5kbGVyVG9V
c2UgPSBvbGRIYW5kbGVySW5mbzsKKyAgICAgICAgaWYgKGkgPj0gaW52YWxpZGF0ZUluZGV4IHx8
IG5ld0hhbmRsZXJJbmZvLnNob3VsZFN1cGVyY2VkZShvbGRIYW5kbGVySW5mbykpIHsKKyAgICAg
ICAgICBpbnZhbGlkYXRlSW5kZXggPSBNYXRoLm1pbihpLCBpbnZhbGlkYXRlSW5kZXgpOworICAg
ICAgICAgIGhhbmRsZXJUb1VzZSA9IG5ld0hhbmRsZXJJbmZvOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGlzSW50ZXJtZWRpYXRlICYmICFjaGVja2luZ0lmQWN0aXZlKSB7CisgICAgICAgICAg
aGFuZGxlclRvVXNlID0gaGFuZGxlclRvVXNlLmJlY29tZVJlc29sdmVkKG51bGwsIGhhbmRsZXJU
b1VzZS5jb250ZXh0KTsKKyAgICAgICAgfQorCisgICAgICAgIG5ld1N0YXRlLmhhbmRsZXJJbmZv
cy51bnNoaWZ0KGhhbmRsZXJUb1VzZSk7CisgICAgICB9CisKKyAgICAgIGlmIChvYmplY3RzLmxl
bmd0aCA+IDApIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJNb3JlIGNvbnRleHQgb2JqZWN0
cyB3ZXJlIHBhc3NlZCB0aGFuIHRoZXJlIGFyZSBkeW5hbWljIHNlZ21lbnRzIGZvciB0aGUgcm91
dGU6ICIgKyB0YXJnZXRSb3V0ZU5hbWUpOworICAgICAgfQorCisgICAgICBpZiAoIWlzSW50ZXJt
ZWRpYXRlKSB7CisgICAgICAgIHRoaXMuaW52YWxpZGF0ZUNoaWxkcmVuKG5ld1N0YXRlLmhhbmRs
ZXJJbmZvcywgaW52YWxpZGF0ZUluZGV4KTsKKyAgICAgIH0KKworICAgICAgX3JvdXRlclV0aWxz
Lm1lcmdlKG5ld1N0YXRlLnF1ZXJ5UGFyYW1zLCB0aGlzLnF1ZXJ5UGFyYW1zIHx8IHt9KTsKKwor
ICAgICAgcmV0dXJuIG5ld1N0YXRlOworICAgIH0sCisKKyAgICBpbnZhbGlkYXRlQ2hpbGRyZW46
IGZ1bmN0aW9uIChoYW5kbGVySW5mb3MsIGludmFsaWRhdGVJbmRleCkgeworICAgICAgZm9yICh2
YXIgaSA9IGludmFsaWRhdGVJbmRleCwgbCA9IGhhbmRsZXJJbmZvcy5sZW5ndGg7IGkgPCBsOyAr
K2kpIHsKKyAgICAgICAgdmFyIGhhbmRsZXJJbmZvID0gaGFuZGxlckluZm9zW2ldOworICAgICAg
ICBoYW5kbGVySW5mb3NbaV0gPSBoYW5kbGVySW5mb3NbaV0uZ2V0VW5yZXNvbHZlZCgpOworICAg
ICAgfQorICAgIH0sCisKKyAgICBnZXRIYW5kbGVySW5mb0ZvckR5bmFtaWNTZWdtZW50OiBmdW5j
dGlvbiAobmFtZSwgaGFuZGxlciwgbmFtZXMsIG9iamVjdHMsIG9sZEhhbmRsZXJJbmZvLCB0YXJn
ZXRSb3V0ZU5hbWUsIGkpIHsKKworICAgICAgdmFyIG51bU5hbWVzID0gbmFtZXMubGVuZ3RoOwor
ICAgICAgdmFyIG9iamVjdFRvVXNlOworICAgICAgaWYgKG9iamVjdHMubGVuZ3RoID4gMCkgewor
CisgICAgICAgIC8vIFVzZSB0aGUgb2JqZWN0cyBwcm92aWRlZCBmb3IgdGhpcyB0cmFuc2l0aW9u
LgorICAgICAgICBvYmplY3RUb1VzZSA9IG9iamVjdHNbb2JqZWN0cy5sZW5ndGggLSAxXTsKKyAg
ICAgICAgaWYgKF9yb3V0ZXJVdGlscy5pc1BhcmFtKG9iamVjdFRvVXNlKSkgeworICAgICAgICAg
IHJldHVybiB0aGlzLmNyZWF0ZVBhcmFtSGFuZGxlckluZm8obmFtZSwgaGFuZGxlciwgbmFtZXMs
IG9iamVjdHMsIG9sZEhhbmRsZXJJbmZvKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBv
YmplY3RzLnBvcCgpOworICAgICAgICB9CisgICAgICB9IGVsc2UgaWYgKG9sZEhhbmRsZXJJbmZv
ICYmIG9sZEhhbmRsZXJJbmZvLm5hbWUgPT09IG5hbWUpIHsKKyAgICAgICAgLy8gUmV1c2UgdGhl
IG1hdGNoaW5nIG9sZEhhbmRsZXJJbmZvCisgICAgICAgIHJldHVybiBvbGRIYW5kbGVySW5mbzsK
KyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmICh0aGlzLnByZVRyYW5zaXRpb25TdGF0ZSkgewor
ICAgICAgICAgIHZhciBwcmVUcmFuc2l0aW9uSGFuZGxlckluZm8gPSB0aGlzLnByZVRyYW5zaXRp
b25TdGF0ZS5oYW5kbGVySW5mb3NbaV07CisgICAgICAgICAgb2JqZWN0VG9Vc2UgPSBwcmVUcmFu
c2l0aW9uSGFuZGxlckluZm8gJiYgcHJlVHJhbnNpdGlvbkhhbmRsZXJJbmZvLmNvbnRleHQ7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgLy8gSWRlYWxseSB3ZSBzaG91bGQgdGhyb3cgdGhp
cyBlcnJvciB0byBwcm92aWRlIG1heGltYWwKKyAgICAgICAgICAvLyBpbmZvcm1hdGlvbiB0byB0
aGUgdXNlciB0aGF0IG5vdCBlbm91Z2ggY29udGV4dCBvYmplY3RzCisgICAgICAgICAgLy8gd2Vy
ZSBwcm92aWRlZCwgYnV0IHRoaXMgcHJvdmVzIHRvbyBjdW1iZXJzb21lIGluIEVtYmVyCisgICAg
ICAgICAgLy8gaW4gY2FzZXMgd2hlcmUgaW5uZXIgdGVtcGxhdGUgaGVscGVycyBhcmUgZXZhbHVh
dGVkCisgICAgICAgICAgLy8gYmVmb3JlIHBhcmVudCBoZWxwZXJzIHVuLXJlbmRlciwgaW4gd2hp
Y2ggY2FzZXMgdGhpcworICAgICAgICAgIC8vIGVycm9yIHNvbWV3aGF0IHByZW1hdHVyZWx5IGZp
cmVzLgorICAgICAgICAgIC8vdGhyb3cgbmV3IEVycm9yKCJOb3QgZW5vdWdoIGNvbnRleHQgb2Jq
ZWN0cyB3ZXJlIHByb3ZpZGVkIHRvIGNvbXBsZXRlIGEgdHJhbnNpdGlvbiB0byAiICsgdGFyZ2V0
Um91dGVOYW1lICsgIi4gU3BlY2lmaWNhbGx5LCB0aGUgIiArIG5hbWUgKyAiIHJvdXRlIG5lZWRz
IGFuIG9iamVjdCB0aGF0IGNhbiBiZSBzZXJpYWxpemVkIGludG8gaXRzIGR5bmFtaWMgVVJMIHNl
Z21lbnRzIFsiICsgbmFtZXMuam9pbignLCAnKSArICJdIik7CisgICAgICAgICAgcmV0dXJuIG9s
ZEhhbmRsZXJJbmZvOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHJldHVybiBfcm91dGVy
SGFuZGxlckluZm9GYWN0b3J5LmRlZmF1bHQoJ29iamVjdCcsIHsKKyAgICAgICAgbmFtZTogbmFt
ZSwKKyAgICAgICAgaGFuZGxlcjogaGFuZGxlciwKKyAgICAgICAgY29udGV4dDogb2JqZWN0VG9V
c2UsCisgICAgICAgIG5hbWVzOiBuYW1lcworICAgICAgfSk7CisgICAgfSwKKworICAgIGNyZWF0
ZVBhcmFtSGFuZGxlckluZm86IGZ1bmN0aW9uIChuYW1lLCBoYW5kbGVyLCBuYW1lcywgb2JqZWN0
cywgb2xkSGFuZGxlckluZm8pIHsKKyAgICAgIHZhciBwYXJhbXMgPSB7fTsKKworICAgICAgLy8g
U29hayB1cCBhbGwgdGhlIHByb3ZpZGVkIHN0cmluZy9udW1iZXJzCisgICAgICB2YXIgbnVtTmFt
ZXMgPSBuYW1lcy5sZW5ndGg7CisgICAgICB3aGlsZSAobnVtTmFtZXMtLSkgeworCisgICAgICAg
IC8vIE9ubHkgdXNlIG9sZCBwYXJhbXMgaWYgdGhlIG5hbWVzIG1hdGNoIHdpdGggdGhlIG5ldyBo
YW5kbGVyCisgICAgICAgIHZhciBvbGRQYXJhbXMgPSBvbGRIYW5kbGVySW5mbyAmJiBuYW1lID09
PSBvbGRIYW5kbGVySW5mby5uYW1lICYmIG9sZEhhbmRsZXJJbmZvLnBhcmFtcyB8fCB7fTsKKwor
ICAgICAgICB2YXIgcGVlayA9IG9iamVjdHNbb2JqZWN0cy5sZW5ndGggLSAxXTsKKyAgICAgICAg
dmFyIHBhcmFtTmFtZSA9IG5hbWVzW251bU5hbWVzXTsKKyAgICAgICAgaWYgKF9yb3V0ZXJVdGls
cy5pc1BhcmFtKHBlZWspKSB7CisgICAgICAgICAgcGFyYW1zW3BhcmFtTmFtZV0gPSAiIiArIG9i
amVjdHMucG9wKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgLy8gSWYgd2UncmUgaGVy
ZSwgdGhpcyBtZWFucyBvbmx5IHNvbWUgb2YgdGhlIHBhcmFtcworICAgICAgICAgIC8vIHdlcmUg
c3RyaW5nL251bWJlciBwYXJhbXMsIHNvIHRyeSBhbmQgdXNlIGEgcGFyYW0KKyAgICAgICAgICAv
LyB2YWx1ZSBmcm9tIGEgcHJldmlvdXMgaGFuZGxlci4KKyAgICAgICAgICBpZiAob2xkUGFyYW1z
Lmhhc093blByb3BlcnR5KHBhcmFtTmFtZSkpIHsKKyAgICAgICAgICAgIHBhcmFtc1twYXJhbU5h
bWVdID0gb2xkUGFyYW1zW3BhcmFtTmFtZV07CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHRocm93IG5ldyBFcnJvcigiWW91IGRpZG4ndCBwcm92aWRlIGVub3VnaCBzdHJpbmcvbnVt
ZXJpYyBwYXJhbWV0ZXJzIHRvIHNhdGlzZnkgYWxsIG9mIHRoZSBkeW5hbWljIHNlZ21lbnRzIGZv
ciByb3V0ZSAiICsgbmFtZSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAg
ICAgIHJldHVybiBfcm91dGVySGFuZGxlckluZm9GYWN0b3J5LmRlZmF1bHQoJ3BhcmFtJywgewor
ICAgICAgICBuYW1lOiBuYW1lLAorICAgICAgICBoYW5kbGVyOiBoYW5kbGVyLAorICAgICAgICBw
YXJhbXM6IHBhcmFtcworICAgICAgfSk7CisgICAgfQorICB9KTsKK30pOworZW5pZmVkKCdyb3V0
ZXIvdHJhbnNpdGlvbi1pbnRlbnQvdXJsLXRyYW5zaXRpb24taW50ZW50JywgWydleHBvcnRzJywg
J3JvdXRlci90cmFuc2l0aW9uLWludGVudCcsICdyb3V0ZXIvdHJhbnNpdGlvbi1zdGF0ZScsICdy
b3V0ZXIvaGFuZGxlci1pbmZvL2ZhY3RvcnknLCAncm91dGVyL3V0aWxzJywgJ3JvdXRlci91bnJl
Y29nbml6ZWQtdXJsLWVycm9yJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfcm91dGVyVHJhbnNpdGlv
bkludGVudCwgX3JvdXRlclRyYW5zaXRpb25TdGF0ZSwgX3JvdXRlckhhbmRsZXJJbmZvRmFjdG9y
eSwgX3JvdXRlclV0aWxzLCBfcm91dGVyVW5yZWNvZ25pemVkVXJsRXJyb3IpIHsKKyAgJ3VzZSBz
dHJpY3QnOworCisgIGV4cG9ydHMuZGVmYXVsdCA9IF9yb3V0ZXJVdGlscy5zdWJjbGFzcyhfcm91
dGVyVHJhbnNpdGlvbkludGVudC5kZWZhdWx0LCB7CisgICAgdXJsOiBudWxsLAorCisgICAgaW5p
dGlhbGl6ZTogZnVuY3Rpb24gKHByb3BzKSB7CisgICAgICB0aGlzLnVybCA9IHByb3BzLnVybDsK
KyAgICB9LAorCisgICAgYXBwbHlUb1N0YXRlOiBmdW5jdGlvbiAob2xkU3RhdGUsIHJlY29nbml6
ZXIsIGdldEhhbmRsZXIpIHsKKyAgICAgIHZhciBuZXdTdGF0ZSA9IG5ldyBfcm91dGVyVHJhbnNp
dGlvblN0YXRlLmRlZmF1bHQoKTsKKworICAgICAgdmFyIHJlc3VsdHMgPSByZWNvZ25pemVyLnJl
Y29nbml6ZSh0aGlzLnVybCksCisgICAgICAgICAgcXVlcnlQYXJhbXMgPSB7fSwKKyAgICAgICAg
ICBpLAorICAgICAgICAgIGxlbjsKKworICAgICAgaWYgKCFyZXN1bHRzKSB7CisgICAgICAgIHRo
cm93IG5ldyBfcm91dGVyVW5yZWNvZ25pemVkVXJsRXJyb3IuZGVmYXVsdCh0aGlzLnVybCk7Cisg
ICAgICB9CisKKyAgICAgIHZhciBzdGF0ZXNEaWZmZXIgPSBmYWxzZTsKKworICAgICAgZm9yIChp
ID0gMCwgbGVuID0gcmVzdWx0cy5sZW5ndGg7IGkgPCBsZW47ICsraSkgeworICAgICAgICB2YXIg
cmVzdWx0ID0gcmVzdWx0c1tpXTsKKyAgICAgICAgdmFyIG5hbWUgPSByZXN1bHQuaGFuZGxlcjsK
KyAgICAgICAgdmFyIGhhbmRsZXIgPSBnZXRIYW5kbGVyKG5hbWUpOworCisgICAgICAgIGlmICho
YW5kbGVyLmluYWNjZXNzaWJsZUJ5VVJMKSB7CisgICAgICAgICAgdGhyb3cgbmV3IF9yb3V0ZXJV
bnJlY29nbml6ZWRVcmxFcnJvci5kZWZhdWx0KHRoaXMudXJsKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHZhciBuZXdIYW5kbGVySW5mbyA9IF9yb3V0ZXJIYW5kbGVySW5mb0ZhY3RvcnkuZGVmYXVs
dCgncGFyYW0nLCB7CisgICAgICAgICAgbmFtZTogbmFtZSwKKyAgICAgICAgICBoYW5kbGVyOiBo
YW5kbGVyLAorICAgICAgICAgIHBhcmFtczogcmVzdWx0LnBhcmFtcworICAgICAgICB9KTsKKwor
ICAgICAgICB2YXIgb2xkSGFuZGxlckluZm8gPSBvbGRTdGF0ZS5oYW5kbGVySW5mb3NbaV07Cisg
ICAgICAgIGlmIChzdGF0ZXNEaWZmZXIgfHwgbmV3SGFuZGxlckluZm8uc2hvdWxkU3VwZXJjZWRl
KG9sZEhhbmRsZXJJbmZvKSkgeworICAgICAgICAgIHN0YXRlc0RpZmZlciA9IHRydWU7CisgICAg
ICAgICAgbmV3U3RhdGUuaGFuZGxlckluZm9zW2ldID0gbmV3SGFuZGxlckluZm87CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgbmV3U3RhdGUuaGFuZGxlckluZm9zW2ldID0gb2xkSGFuZGxl
ckluZm87CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgX3JvdXRlclV0aWxzLm1lcmdlKG5l
d1N0YXRlLnF1ZXJ5UGFyYW1zLCByZXN1bHRzLnF1ZXJ5UGFyYW1zKTsKKworICAgICAgcmV0dXJu
IG5ld1N0YXRlOworICAgIH0KKyAgfSk7Cit9KTsKK2VuaWZlZCgncm91dGVyL3RyYW5zaXRpb24t
c3RhdGUnLCBbJ2V4cG9ydHMnLCAncm91dGVyL2hhbmRsZXItaW5mbycsICdyb3V0ZXIvdXRpbHMn
LCAncnN2cC9wcm9taXNlJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfcm91dGVySGFuZGxlckluZm8s
IF9yb3V0ZXJVdGlscywgX3JzdnBQcm9taXNlKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICBmdW5j
dGlvbiBUcmFuc2l0aW9uU3RhdGUob3RoZXIpIHsKKyAgICB0aGlzLmhhbmRsZXJJbmZvcyA9IFtd
OworICAgIHRoaXMucXVlcnlQYXJhbXMgPSB7fTsKKyAgICB0aGlzLnBhcmFtcyA9IHt9OworICB9
CisKKyAgVHJhbnNpdGlvblN0YXRlLnByb3RvdHlwZSA9IHsKKyAgICBoYW5kbGVySW5mb3M6IG51
bGwsCisgICAgcXVlcnlQYXJhbXM6IG51bGwsCisgICAgcGFyYW1zOiBudWxsLAorCisgICAgcHJv
bWlzZUxhYmVsOiBmdW5jdGlvbiAobGFiZWwpIHsKKyAgICAgIHZhciB0YXJnZXROYW1lID0gJyc7
CisgICAgICBfcm91dGVyVXRpbHMuZm9yRWFjaCh0aGlzLmhhbmRsZXJJbmZvcywgZnVuY3Rpb24g
KGhhbmRsZXJJbmZvKSB7CisgICAgICAgIGlmICh0YXJnZXROYW1lICE9PSAnJykgeworICAgICAg
ICAgIHRhcmdldE5hbWUgKz0gJy4nOworICAgICAgICB9CisgICAgICAgIHRhcmdldE5hbWUgKz0g
aGFuZGxlckluZm8ubmFtZTsKKyAgICAgIH0pOworICAgICAgcmV0dXJuIF9yb3V0ZXJVdGlscy5w
cm9taXNlTGFiZWwoIiciICsgdGFyZ2V0TmFtZSArICInOiAiICsgbGFiZWwpOworICAgIH0sCisK
KyAgICByZXNvbHZlOiBmdW5jdGlvbiAoc2hvdWxkQ29udGludWUsIHBheWxvYWQpIHsKKyAgICAg
IHZhciBzZWxmID0gdGhpczsKKyAgICAgIC8vIEZpcnN0LCBjYWxjdWxhdGUgcGFyYW1zIGZvciB0
aGlzIHN0YXRlLiBUaGlzIGlzIHVzZWZ1bAorICAgICAgLy8gaW5mb3JtYXRpb24gdG8gcHJvdmlk
ZSB0byB0aGUgdmFyaW91cyByb3V0ZSBob29rcy4KKyAgICAgIHZhciBwYXJhbXMgPSB0aGlzLnBh
cmFtczsKKyAgICAgIF9yb3V0ZXJVdGlscy5mb3JFYWNoKHRoaXMuaGFuZGxlckluZm9zLCBmdW5j
dGlvbiAoaGFuZGxlckluZm8pIHsKKyAgICAgICAgcGFyYW1zW2hhbmRsZXJJbmZvLm5hbWVdID0g
aGFuZGxlckluZm8ucGFyYW1zIHx8IHt9OworICAgICAgfSk7CisKKyAgICAgIHBheWxvYWQgPSBw
YXlsb2FkIHx8IHt9OworICAgICAgcGF5bG9hZC5yZXNvbHZlSW5kZXggPSAwOworCisgICAgICB2
YXIgY3VycmVudFN0YXRlID0gdGhpczsKKyAgICAgIHZhciB3YXNBYm9ydGVkID0gZmFsc2U7CisK
KyAgICAgIC8vIFRoZSBwcmVsdWRlIFJTVlAucmVzb2x2ZSgpIGFzeW5jcyB1cyBpbnRvIHRoZSBw
cm9taXNlIGxhbmQuCisgICAgICByZXR1cm4gX3JzdnBQcm9taXNlLmRlZmF1bHQucmVzb2x2ZShu
dWxsLCB0aGlzLnByb21pc2VMYWJlbCgiU3RhcnQgdHJhbnNpdGlvbiIpKS50aGVuKHJlc29sdmVP
bmVIYW5kbGVySW5mbywgbnVsbCwgdGhpcy5wcm9taXNlTGFiZWwoJ1Jlc29sdmUgaGFuZGxlcicp
KVsnY2F0Y2gnXShoYW5kbGVFcnJvciwgdGhpcy5wcm9taXNlTGFiZWwoJ0hhbmRsZSBlcnJvcicp
KTsKKworICAgICAgZnVuY3Rpb24gaW5uZXJTaG91bGRDb250aW51ZSgpIHsKKyAgICAgICAgcmV0
dXJuIF9yc3ZwUHJvbWlzZS5kZWZhdWx0LnJlc29sdmUoc2hvdWxkQ29udGludWUoKSwgY3VycmVu
dFN0YXRlLnByb21pc2VMYWJlbCgiQ2hlY2sgaWYgc2hvdWxkIGNvbnRpbnVlIikpWydjYXRjaCdd
KGZ1bmN0aW9uIChyZWFzb24pIHsKKyAgICAgICAgICAvLyBXZSBkaXN0aW5ndWlzaCBiZXR3ZWVu
IGVycm9ycyB0aGF0IG9jY3VycmVkCisgICAgICAgICAgLy8gZHVyaW5nIHJlc29sdXRpb24gKGUu
Zy4gYmVmb3JlTW9kZWwvbW9kZWwvYWZ0ZXJNb2RlbCksCisgICAgICAgICAgLy8gYW5kIGFib3J0
cyBkdWUgdG8gYSByZWplY3RpbmcgcHJvbWlzZSBmcm9tIHNob3VsZENvbnRpbnVlKCkuCisgICAg
ICAgICAgd2FzQWJvcnRlZCA9IHRydWU7CisgICAgICAgICAgcmV0dXJuIF9yc3ZwUHJvbWlzZS5k
ZWZhdWx0LnJlamVjdChyZWFzb24pOworICAgICAgICB9LCBjdXJyZW50U3RhdGUucHJvbWlzZUxh
YmVsKCJIYW5kbGUgYWJvcnQiKSk7CisgICAgICB9CisKKyAgICAgIGZ1bmN0aW9uIGhhbmRsZUVy
cm9yKGVycm9yKSB7CisgICAgICAgIC8vIFRoaXMgaXMgdGhlIG9ubHkgcG9zc2libGUKKyAgICAg
ICAgLy8gcmVqZWN0IHZhbHVlIG9mIFRyYW5zaXRpb25TdGF0ZSNyZXNvbHZlCisgICAgICAgIHZh
ciBoYW5kbGVySW5mb3MgPSBjdXJyZW50U3RhdGUuaGFuZGxlckluZm9zOworICAgICAgICB2YXIg
ZXJyb3JIYW5kbGVySW5kZXggPSBwYXlsb2FkLnJlc29sdmVJbmRleCA+PSBoYW5kbGVySW5mb3Mu
bGVuZ3RoID8gaGFuZGxlckluZm9zLmxlbmd0aCAtIDEgOiBwYXlsb2FkLnJlc29sdmVJbmRleDsK
KyAgICAgICAgcmV0dXJuIF9yc3ZwUHJvbWlzZS5kZWZhdWx0LnJlamVjdCh7CisgICAgICAgICAg
ZXJyb3I6IGVycm9yLAorICAgICAgICAgIGhhbmRsZXJXaXRoRXJyb3I6IGN1cnJlbnRTdGF0ZS5o
YW5kbGVySW5mb3NbZXJyb3JIYW5kbGVySW5kZXhdLmhhbmRsZXIsCisgICAgICAgICAgd2FzQWJv
cnRlZDogd2FzQWJvcnRlZCwKKyAgICAgICAgICBzdGF0ZTogY3VycmVudFN0YXRlCisgICAgICAg
IH0pOworICAgICAgfQorCisgICAgICBmdW5jdGlvbiBwcm9jZWVkKHJlc29sdmVkSGFuZGxlcklu
Zm8pIHsKKyAgICAgICAgdmFyIHdhc0FscmVhZHlSZXNvbHZlZCA9IGN1cnJlbnRTdGF0ZS5oYW5k
bGVySW5mb3NbcGF5bG9hZC5yZXNvbHZlSW5kZXhdLmlzUmVzb2x2ZWQ7CisKKyAgICAgICAgLy8g
U3dhcCB0aGUgcHJldmlvdXNseSB1bnJlc29sdmVkIGhhbmRsZXJJbmZvIHdpdGgKKyAgICAgICAg
Ly8gdGhlIHJlc29sdmVkIGhhbmRsZXJJbmZvCisgICAgICAgIGN1cnJlbnRTdGF0ZS5oYW5kbGVy
SW5mb3NbcGF5bG9hZC5yZXNvbHZlSW5kZXgrK10gPSByZXNvbHZlZEhhbmRsZXJJbmZvOworCisg
ICAgICAgIGlmICghd2FzQWxyZWFkeVJlc29sdmVkKSB7CisgICAgICAgICAgLy8gQ2FsbCB0aGUg
cmVkaXJlY3QgaG9vay4gVGhlIHJlYXNvbiB3ZSBjYWxsIGl0IGhlcmUKKyAgICAgICAgICAvLyB2
cy4gYWZ0ZXJNb2RlbCBpcyBzbyB0aGF0IHJlZGlyZWN0cyBpbnRvIGNoaWxkCisgICAgICAgICAg
Ly8gcm91dGVzIGRvbid0IHJlLXJ1biB0aGUgbW9kZWwgaG9va3MgZm9yIHRoaXMKKyAgICAgICAg
ICAvLyBhbHJlYWR5LXJlc29sdmVkIHJvdXRlLgorICAgICAgICAgIHZhciBoYW5kbGVyID0gcmVz
b2x2ZWRIYW5kbGVySW5mby5oYW5kbGVyOworICAgICAgICAgIF9yb3V0ZXJVdGlscy5jYWxsSG9v
ayhoYW5kbGVyLCAncmVkaXJlY3QnLCByZXNvbHZlZEhhbmRsZXJJbmZvLmNvbnRleHQsIHBheWxv
YWQpOworICAgICAgICB9CisKKyAgICAgICAgLy8gUHJvY2VlZCBhZnRlciBlbnN1cmluZyB0aGF0
IHRoZSByZWRpcmVjdCBob29rCisgICAgICAgIC8vIGRpZG4ndCBhYm9ydCB0aGlzIHRyYW5zaXRp
b24gYnkgdHJhbnNpdGlvbmluZyBlbHNld2hlcmUuCisgICAgICAgIHJldHVybiBpbm5lclNob3Vs
ZENvbnRpbnVlKCkudGhlbihyZXNvbHZlT25lSGFuZGxlckluZm8sIG51bGwsIGN1cnJlbnRTdGF0
ZS5wcm9taXNlTGFiZWwoJ1Jlc29sdmUgaGFuZGxlcicpKTsKKyAgICAgIH0KKworICAgICAgZnVu
Y3Rpb24gcmVzb2x2ZU9uZUhhbmRsZXJJbmZvKCkgeworICAgICAgICBpZiAocGF5bG9hZC5yZXNv
bHZlSW5kZXggPT09IGN1cnJlbnRTdGF0ZS5oYW5kbGVySW5mb3MubGVuZ3RoKSB7CisgICAgICAg
ICAgLy8gVGhpcyBpcyBpcyB0aGUgb25seSBwb3NzaWJsZQorICAgICAgICAgIC8vIGZ1bGZpbGwg
dmFsdWUgb2YgVHJhbnNpdGlvblN0YXRlI3Jlc29sdmUKKyAgICAgICAgICByZXR1cm4geworICAg
ICAgICAgICAgZXJyb3I6IG51bGwsCisgICAgICAgICAgICBzdGF0ZTogY3VycmVudFN0YXRlCisg
ICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBoYW5kbGVySW5mbyA9IGN1cnJl
bnRTdGF0ZS5oYW5kbGVySW5mb3NbcGF5bG9hZC5yZXNvbHZlSW5kZXhdOworCisgICAgICAgIHJl
dHVybiBoYW5kbGVySW5mby5yZXNvbHZlKGlubmVyU2hvdWxkQ29udGludWUsIHBheWxvYWQpLnRo
ZW4ocHJvY2VlZCwgbnVsbCwgY3VycmVudFN0YXRlLnByb21pc2VMYWJlbCgnUHJvY2VlZCcpKTsK
KyAgICAgIH0KKyAgICB9CisgIH07CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gVHJhbnNpdGlvblN0
YXRlOworfSk7CitlbmlmZWQoJ3JvdXRlci90cmFuc2l0aW9uJywgWydleHBvcnRzJywgJ3JzdnAv
cHJvbWlzZScsICdyb3V0ZXIvaGFuZGxlci1pbmZvJywgJ3JvdXRlci91dGlscyddLCBmdW5jdGlv
biAoZXhwb3J0cywgX3JzdnBQcm9taXNlLCBfcm91dGVySGFuZGxlckluZm8sIF9yb3V0ZXJVdGls
cykgeworICAndXNlIHN0cmljdCc7CisKKyAgLyoqCisgICAgQSBUcmFuc2l0aW9uIGlzIGEgdGhl
bm5hYmxlIChhIHByb21pc2UtbGlrZSBvYmplY3QpIHRoYXQgcmVwcmVzZW50cworICAgIGFuIGF0
dGVtcHQgdG8gdHJhbnNpdGlvbiB0byBhbm90aGVyIHJvdXRlLiBJdCBjYW4gYmUgYWJvcnRlZCwg
ZWl0aGVyCisgICAgZXhwbGljaXRseSB2aWEgYGFib3J0YCBvciBieSBhdHRlbXB0aW5nIGFub3Ro
ZXIgdHJhbnNpdGlvbiB3aGlsZSBhCisgICAgcHJldmlvdXMgb25lIGlzIHN0aWxsIHVuZGVyd2F5
LiBBbiBhYm9ydGVkIHRyYW5zaXRpb24gY2FuIGFsc28KKyAgICBiZSBgcmV0cnkoKWBkIGxhdGVy
LgorICAKKyAgICBAY2xhc3MgVHJhbnNpdGlvbgorICAgIEBjb25zdHJ1Y3RvcgorICAgIEBwYXJh
bSB7T2JqZWN0fSByb3V0ZXIKKyAgICBAcGFyYW0ge09iamVjdH0gaW50ZW50CisgICAgQHBhcmFt
IHtPYmplY3R9IHN0YXRlCisgICAgQHBhcmFtIHtPYmplY3R9IGVycm9yCisgICAgQHByaXZhdGUK
KyAgICovCisgIGZ1bmN0aW9uIFRyYW5zaXRpb24ocm91dGVyLCBpbnRlbnQsIHN0YXRlLCBlcnJv
cikgeworICAgIHZhciB0cmFuc2l0aW9uID0gdGhpczsKKyAgICB0aGlzLnN0YXRlID0gc3RhdGUg
fHwgcm91dGVyLnN0YXRlOworICAgIHRoaXMuaW50ZW50ID0gaW50ZW50OworICAgIHRoaXMucm91
dGVyID0gcm91dGVyOworICAgIHRoaXMuZGF0YSA9IHRoaXMuaW50ZW50ICYmIHRoaXMuaW50ZW50
LmRhdGEgfHwge307CisgICAgdGhpcy5yZXNvbHZlZE1vZGVscyA9IHt9OworICAgIHRoaXMucXVl
cnlQYXJhbXMgPSB7fTsKKworICAgIGlmIChlcnJvcikgeworICAgICAgdGhpcy5wcm9taXNlID0g
X3JzdnBQcm9taXNlLmRlZmF1bHQucmVqZWN0KGVycm9yKTsKKyAgICAgIHRoaXMuZXJyb3IgPSBl
cnJvcjsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoc3RhdGUpIHsKKyAgICAgIHRo
aXMucGFyYW1zID0gc3RhdGUucGFyYW1zOworICAgICAgdGhpcy5xdWVyeVBhcmFtcyA9IHN0YXRl
LnF1ZXJ5UGFyYW1zOworICAgICAgdGhpcy5oYW5kbGVySW5mb3MgPSBzdGF0ZS5oYW5kbGVySW5m
b3M7CisKKyAgICAgIHZhciBsZW4gPSBzdGF0ZS5oYW5kbGVySW5mb3MubGVuZ3RoOworICAgICAg
aWYgKGxlbikgeworICAgICAgICB0aGlzLnRhcmdldE5hbWUgPSBzdGF0ZS5oYW5kbGVySW5mb3Nb
bGVuIC0gMV0ubmFtZTsKKyAgICAgIH0KKworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47
ICsraSkgeworICAgICAgICB2YXIgaGFuZGxlckluZm8gPSBzdGF0ZS5oYW5kbGVySW5mb3NbaV07
CisKKyAgICAgICAgLy8gVE9ETzogdGhpcyBhbGwgc2VlbXMgaGFja3kKKyAgICAgICAgaWYgKCFo
YW5kbGVySW5mby5pc1Jlc29sdmVkKSB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy5waXZvdEhhbmRsZXIgPSBoYW5kbGVySW5mby5oYW5kbGVyOworICAgICAgfQor
CisgICAgICB0aGlzLnNlcXVlbmNlID0gVHJhbnNpdGlvbi5jdXJyZW50U2VxdWVuY2UrKzsKKyAg
ICAgIHRoaXMucHJvbWlzZSA9IHN0YXRlLnJlc29sdmUoY2hlY2tGb3JBYm9ydCwgdGhpcylbJ2Nh
dGNoJ10oZnVuY3Rpb24gKHJlc3VsdCkgeworICAgICAgICBpZiAocmVzdWx0Lndhc0Fib3J0ZWQg
fHwgdHJhbnNpdGlvbi5pc0Fib3J0ZWQpIHsKKyAgICAgICAgICByZXR1cm4gX3JzdnBQcm9taXNl
LmRlZmF1bHQucmVqZWN0KGxvZ0Fib3J0KHRyYW5zaXRpb24pKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICB0cmFuc2l0aW9uLnRyaWdnZXIoJ2Vycm9yJywgcmVzdWx0LmVycm9yLCB0cmFu
c2l0aW9uLCByZXN1bHQuaGFuZGxlcldpdGhFcnJvcik7CisgICAgICAgICAgdHJhbnNpdGlvbi5h
Ym9ydCgpOworICAgICAgICAgIHJldHVybiBfcnN2cFByb21pc2UuZGVmYXVsdC5yZWplY3QocmVz
dWx0LmVycm9yKTsKKyAgICAgICAgfQorICAgICAgfSwgX3JvdXRlclV0aWxzLnByb21pc2VMYWJl
bCgnSGFuZGxlIEFib3J0JykpOworICAgIH0gZWxzZSB7CisgICAgICB0aGlzLnByb21pc2UgPSBf
cnN2cFByb21pc2UuZGVmYXVsdC5yZXNvbHZlKHRoaXMuc3RhdGUpOworICAgICAgdGhpcy5wYXJh
bXMgPSB7fTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjaGVja0ZvckFib3J0KCkgeworICAgICAg
aWYgKHRyYW5zaXRpb24uaXNBYm9ydGVkKSB7CisgICAgICAgIHJldHVybiBfcnN2cFByb21pc2Uu
ZGVmYXVsdC5yZWplY3QodW5kZWZpbmVkLCBfcm91dGVyVXRpbHMucHJvbWlzZUxhYmVsKCJUcmFu
c2l0aW9uIGFib3J0ZWQgLSByZWplY3QiKSk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgVHJh
bnNpdGlvbi5jdXJyZW50U2VxdWVuY2UgPSAwOworCisgIFRyYW5zaXRpb24ucHJvdG90eXBlID0g
eworICAgIHRhcmdldE5hbWU6IG51bGwsCisgICAgdXJsTWV0aG9kOiAndXBkYXRlJywKKyAgICBp
bnRlbnQ6IG51bGwsCisgICAgcGFyYW1zOiBudWxsLAorICAgIHBpdm90SGFuZGxlcjogbnVsbCwK
KyAgICByZXNvbHZlSW5kZXg6IDAsCisgICAgaGFuZGxlckluZm9zOiBudWxsLAorICAgIHJlc29s
dmVkTW9kZWxzOiBudWxsLAorICAgIGlzQWN0aXZlOiB0cnVlLAorICAgIHN0YXRlOiBudWxsLAor
ICAgIHF1ZXJ5UGFyYW1zT25seTogZmFsc2UsCisKKyAgICBpc1RyYW5zaXRpb246IHRydWUsCisK
KyAgICBpc0V4aXRpbmc6IGZ1bmN0aW9uIChoYW5kbGVyKSB7CisgICAgICB2YXIgaGFuZGxlcklu
Zm9zID0gdGhpcy5oYW5kbGVySW5mb3M7CisgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gaGFu
ZGxlckluZm9zLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAgIHZhciBoYW5kbGVySW5m
byA9IGhhbmRsZXJJbmZvc1tpXTsKKyAgICAgICAgaWYgKGhhbmRsZXJJbmZvLm5hbWUgPT09IGhh
bmRsZXIgfHwgaGFuZGxlckluZm8uaGFuZGxlciA9PT0gaGFuZGxlcikgeworICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgcmV0dXJuIHRydWU7CisgICAg
fSwKKworICAgIC8qKgorICAgICAgVGhlIFRyYW5zaXRpb24ncyBpbnRlcm5hbCBwcm9taXNlLiBD
YWxsaW5nIGAudGhlbmAgb24gdGhpcyBwcm9wZXJ0eQorICAgICAgaXMgdGhhdCBzYW1lIGFzIGNh
bGxpbmcgYC50aGVuYCBvbiB0aGUgVHJhbnNpdGlvbiBvYmplY3QgaXRzZWxmLCBidXQKKyAgICAg
IHRoaXMgcHJvcGVydHkgaXMgZXhwb3NlZCBmb3Igd2hlbiB5b3Ugd2FudCB0byBwYXNzIGFyb3Vu
ZCBhCisgICAgICBUcmFuc2l0aW9uJ3MgcHJvbWlzZSwgYnV0IG5vdCB0aGUgVHJhbnNpdGlvbiBv
YmplY3QgaXRzZWxmLCBzaW5jZQorICAgICAgVHJhbnNpdGlvbiBvYmplY3QgY2FuIGJlIGV4dGVy
bmFsbHkgYGFib3J0YGVkLCB3aGlsZSB0aGUgcHJvbWlzZQorICAgICAgY2Fubm90LgorICAgICAg
IEBwcm9wZXJ0eSBwcm9taXNlCisgICAgICBAdHlwZSB7T2JqZWN0fQorICAgICAgQHB1YmxpYwor
ICAgICAqLworICAgIHByb21pc2U6IG51bGwsCisKKyAgICAvKioKKyAgICAgIEN1c3RvbSBzdGF0
ZSBjYW4gYmUgc3RvcmVkIG9uIGEgVHJhbnNpdGlvbidzIGBkYXRhYCBvYmplY3QuCisgICAgICBU
aGlzIGNhbiBiZSB1c2VmdWwgZm9yIGRlY29yYXRpbmcgYSBUcmFuc2l0aW9uIHdpdGhpbiBhbiBl
YXJsaWVyCisgICAgICBob29rIGFuZCBzaGFyZWQgd2l0aCBhIGxhdGVyIGhvb2suIFByb3BlcnRp
ZXMgc2V0IG9uIGBkYXRhYCB3aWxsCisgICAgICBiZSBjb3BpZWQgdG8gbmV3IHRyYW5zaXRpb25z
IGdlbmVyYXRlZCBieSBjYWxsaW5nIGByZXRyeWAgb24gdGhpcworICAgICAgdHJhbnNpdGlvbi4K
KyAgICAgCisgICAgICBAcHJvcGVydHkgZGF0YQorICAgICAgQHR5cGUge09iamVjdH0KKyAgICAg
IEBwdWJsaWMKKyAgICAgKi8KKyAgICBkYXRhOiBudWxsLAorCisgICAgLyoqCisgICAgICBBIHN0
YW5kYXJkIHByb21pc2UgaG9vayB0aGF0IHJlc29sdmVzIGlmIHRoZSB0cmFuc2l0aW9uCisgICAg
ICBzdWNjZWVkcyBhbmQgcmVqZWN0cyBpZiBpdCBmYWlscy9yZWRpcmVjdHMvYWJvcnRzLgorICAg
ICAgIEZvcndhcmRzIHRvIHRoZSBpbnRlcm5hbCBgcHJvbWlzZWAgcHJvcGVydHkgd2hpY2ggeW91
IGNhbgorICAgICAgdXNlIGluIHNpdHVhdGlvbnMgd2hlcmUgeW91IHdhbnQgdG8gcGFzcyBhcm91
bmQgYSB0aGVubmFibGUsCisgICAgICBidXQgbm90IHRoZSBUcmFuc2l0aW9uIGl0c2VsZi4KKyAg
ICAgICBAbWV0aG9kIHRoZW4KKyAgICAgIEBwYXJhbSB7RnVuY3Rpb259IG9uRnVsZmlsbGVkCisg
ICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBvblJlamVjdGVkCisgICAgICBAcGFyYW0ge1N0cmluZ30g
bGFiZWwgb3B0aW9uYWwgc3RyaW5nIGZvciBsYWJlbGluZyB0aGUgcHJvbWlzZS4KKyAgICAgIFVz
ZWZ1bCBmb3IgdG9vbGluZy4KKyAgICAgIEByZXR1cm4ge1Byb21pc2V9CisgICAgICBAcHVibGlj
CisgICAgICovCisgICAgdGhlbjogZnVuY3Rpb24gKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBs
YWJlbCkgeworICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZS50aGVuKG9uRnVsZmlsbGVkLCBvblJl
amVjdGVkLCBsYWJlbCk7CisgICAgfSwKKworICAgIC8qKgorICAgICAgIEZvcndhcmRzIHRvIHRo
ZSBpbnRlcm5hbCBgcHJvbWlzZWAgcHJvcGVydHkgd2hpY2ggeW91IGNhbgorICAgICAgdXNlIGlu
IHNpdHVhdGlvbnMgd2hlcmUgeW91IHdhbnQgdG8gcGFzcyBhcm91bmQgYSB0aGVubmFibGUsCisg
ICAgICBidXQgbm90IHRoZSBUcmFuc2l0aW9uIGl0c2VsZi4KKyAgICAgICBAbWV0aG9kIGNhdGNo
CisgICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBvblJlamVjdGlvbgorICAgICAgQHBhcmFtIHtTdHJp
bmd9IGxhYmVsIG9wdGlvbmFsIHN0cmluZyBmb3IgbGFiZWxpbmcgdGhlIHByb21pc2UuCisgICAg
ICBVc2VmdWwgZm9yIHRvb2xpbmcuCisgICAgICBAcmV0dXJuIHtQcm9taXNlfQorICAgICAgQHB1
YmxpYworICAgICAqLworICAgIGNhdGNoOiBmdW5jdGlvbiAob25SZWplY3Rpb24sIGxhYmVsKSB7
CisgICAgICByZXR1cm4gdGhpcy5wcm9taXNlLmNhdGNoKG9uUmVqZWN0aW9uLCBsYWJlbCk7Cisg
ICAgfSwKKworICAgIC8qKgorICAgICAgIEZvcndhcmRzIHRvIHRoZSBpbnRlcm5hbCBgcHJvbWlz
ZWAgcHJvcGVydHkgd2hpY2ggeW91IGNhbgorICAgICAgdXNlIGluIHNpdHVhdGlvbnMgd2hlcmUg
eW91IHdhbnQgdG8gcGFzcyBhcm91bmQgYSB0aGVubmFibGUsCisgICAgICBidXQgbm90IHRoZSBU
cmFuc2l0aW9uIGl0c2VsZi4KKyAgICAgICBAbWV0aG9kIGZpbmFsbHkKKyAgICAgIEBwYXJhbSB7
RnVuY3Rpb259IGNhbGxiYWNrCisgICAgICBAcGFyYW0ge1N0cmluZ30gbGFiZWwgb3B0aW9uYWwg
c3RyaW5nIGZvciBsYWJlbGluZyB0aGUgcHJvbWlzZS4KKyAgICAgIFVzZWZ1bCBmb3IgdG9vbGlu
Zy4KKyAgICAgIEByZXR1cm4ge1Byb21pc2V9CisgICAgICBAcHVibGljCisgICAgICovCisgICAg
ZmluYWxseTogZnVuY3Rpb24gKGNhbGxiYWNrLCBsYWJlbCkgeworICAgICAgcmV0dXJuIHRoaXMu
cHJvbWlzZS5maW5hbGx5KGNhbGxiYWNrLCBsYWJlbCk7CisgICAgfSwKKworICAgIC8qKgorICAg
ICAgQWJvcnRzIHRoZSBUcmFuc2l0aW9uLiBOb3RlIHlvdSBjYW4gYWxzbyBpbXBsaWNpdGx5IGFi
b3J0IGEgdHJhbnNpdGlvbgorICAgICAgYnkgaW5pdGlhdGluZyBhbm90aGVyIHRyYW5zaXRpb24g
d2hpbGUgYSBwcmV2aW91cyBvbmUgaXMgdW5kZXJ3YXkuCisgICAgICAgQG1ldGhvZCBhYm9ydAor
ICAgICAgQHJldHVybiB7VHJhbnNpdGlvbn0gdGhpcyB0cmFuc2l0aW9uCisgICAgICBAcHVibGlj
CisgICAgICovCisgICAgYWJvcnQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgIGlmICh0aGlzLmlzQWJv
cnRlZCkgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgIH0KKyAgICAgIF9yb3V0ZXJVdGls
cy5sb2codGhpcy5yb3V0ZXIsIHRoaXMuc2VxdWVuY2UsIHRoaXMudGFyZ2V0TmFtZSArICI6IHRy
YW5zaXRpb24gd2FzIGFib3J0ZWQiKTsKKyAgICAgIHRoaXMuaW50ZW50LnByZVRyYW5zaXRpb25T
dGF0ZSA9IHRoaXMucm91dGVyLnN0YXRlOworICAgICAgdGhpcy5pc0Fib3J0ZWQgPSB0cnVlOwor
ICAgICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlOworICAgICAgdGhpcy5yb3V0ZXIuYWN0aXZlVHJh
bnNpdGlvbiA9IG51bGw7CisgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgLyoqCisg
ICAgICAgUmV0cmllcyBhIHByZXZpb3VzbHktYWJvcnRlZCB0cmFuc2l0aW9uIChtYWtpbmcgc3Vy
ZSB0byBhYm9ydCB0aGUKKyAgICAgIHRyYW5zaXRpb24gaWYgaXQncyBzdGlsbCBhY3RpdmUpLiBS
ZXR1cm5zIGEgbmV3IHRyYW5zaXRpb24gdGhhdAorICAgICAgcmVwcmVzZW50cyB0aGUgbmV3IGF0
dGVtcHQgdG8gdHJhbnNpdGlvbi4KKyAgICAgICBAbWV0aG9kIHJldHJ5CisgICAgICBAcmV0dXJu
IHtUcmFuc2l0aW9ufSBuZXcgdHJhbnNpdGlvbgorICAgICAgQHB1YmxpYworICAgICAqLworICAg
IHJldHJ5OiBmdW5jdGlvbiAoKSB7CisgICAgICAvLyBUT0RPOiBhZGQgdGVzdHMgZm9yIG1lcmdl
ZCBzdGF0ZSByZXRyeSgpcworICAgICAgdGhpcy5hYm9ydCgpOworICAgICAgcmV0dXJuIHRoaXMu
cm91dGVyLnRyYW5zaXRpb25CeUludGVudCh0aGlzLmludGVudCwgZmFsc2UpOworICAgIH0sCisK
KyAgICAvKioKKyAgICAgICBTZXRzIHRoZSBVUkwtY2hhbmdpbmcgbWV0aG9kIHRvIGJlIGVtcGxv
eWVkIGF0IHRoZSBlbmQgb2YgYQorICAgICAgc3VjY2Vzc2Z1bCB0cmFuc2l0aW9uLiBCeSBkZWZh
dWx0LCBhIG5ldyBUcmFuc2l0aW9uIHdpbGwganVzdAorICAgICAgdXNlIGB1cGRhdGVVUkxgLCBi
dXQgcGFzc2luZyAncmVwbGFjZScgdG8gdGhpcyBtZXRob2Qgd2lsbAorICAgICAgY2F1c2UgdGhl
IFVSTCB0byB1cGRhdGUgdXNpbmcgJ3JlcGxhY2VXaXRoJyBpbnN0ZWFkLiBPbWl0dGluZworICAg
ICAgYSBwYXJhbWV0ZXIgd2lsbCBkaXNhYmxlIHRoZSBVUkwgY2hhbmdlLCBhbGxvd2luZyBmb3Ig
dHJhbnNpdGlvbnMKKyAgICAgIHRoYXQgZG9uJ3QgdXBkYXRlIHRoZSBVUkwgYXQgY29tcGxldGlv
biAodGhpcyBpcyBhbHNvIHVzZWQgZm9yCisgICAgICBoYW5kbGVVUkwsIHNpbmNlIHRoZSBVUkwg
aGFzIGFscmVhZHkgY2hhbmdlZCBiZWZvcmUgdGhlCisgICAgICB0cmFuc2l0aW9uIHRvb2sgcGxh
Y2UpLgorICAgICAgIEBtZXRob2QgbWV0aG9kCisgICAgICBAcGFyYW0ge1N0cmluZ30gbWV0aG9k
IHRoZSB0eXBlIG9mIFVSTC1jaGFuZ2luZyBtZXRob2QgdG8gdXNlCisgICAgICAgIGF0IHRoZSBl
bmQgb2YgYSB0cmFuc2l0aW9uLiBBY2NlcHRlZCB2YWx1ZXMgYXJlICdyZXBsYWNlJywKKyAgICAg
ICAgZmFsc3kgdmFsdWVzLCBvciBhbnkgb3RoZXIgbm9uLWZhbHN5IHZhbHVlICh3aGljaCBpcwor
ICAgICAgICBpbnRlcnByZXRlZCBhcyBhbiB1cGRhdGVVUkwgdHJhbnNpdGlvbikuCisgICAgICAg
QHJldHVybiB7VHJhbnNpdGlvbn0gdGhpcyB0cmFuc2l0aW9uCisgICAgICBAcHVibGljCisgICAg
ICovCisgICAgbWV0aG9kOiBmdW5jdGlvbiAobWV0aG9kKSB7CisgICAgICB0aGlzLnVybE1ldGhv
ZCA9IG1ldGhvZDsKKyAgICAgIHJldHVybiB0aGlzOworICAgIH0sCisKKyAgICAvKioKKyAgICAg
ICBGaXJlcyBhbiBldmVudCBvbiB0aGUgY3VycmVudCBsaXN0IG9mIHJlc29sdmVkL3Jlc29sdmlu
ZworICAgICAgaGFuZGxlcnMgd2l0aGluIHRoaXMgdHJhbnNpdGlvbi4gVXNlZnVsIGZvciBmaXJp
bmcgZXZlbnRzCisgICAgICBvbiByb3V0ZSBoaWVyYXJjaGllcyB0aGF0IGhhdmVuJ3QgZnVsbHkg
YmVlbiBlbnRlcmVkIHlldC4KKyAgICAgICBOb3RlOiBUaGlzIG1ldGhvZCBpcyBhbHNvIGFsaWFz
ZWQgYXMgYHNlbmRgCisgICAgICAgQG1ldGhvZCB0cmlnZ2VyCisgICAgICBAcGFyYW0ge0Jvb2xl
YW59IFtpZ25vcmVGYWlsdXJlPWZhbHNlXSBhIGJvb2xlYW4gc3BlY2lmeWluZyB3aGV0aGVyIHVu
aGFuZGxlZCBldmVudHMgdGhyb3cgYW4gZXJyb3IKKyAgICAgIEBwYXJhbSB7U3RyaW5nfSBuYW1l
IHRoZSBuYW1lIG9mIHRoZSBldmVudCB0byBmaXJlCisgICAgICBAcHVibGljCisgICAgICovCisg
ICAgdHJpZ2dlcjogZnVuY3Rpb24gKGlnbm9yZUZhaWx1cmUpIHsKKyAgICAgIHZhciBhcmdzID0g
X3JvdXRlclV0aWxzLnNsaWNlLmNhbGwoYXJndW1lbnRzKTsKKyAgICAgIGlmICh0eXBlb2YgaWdu
b3JlRmFpbHVyZSA9PT0gJ2Jvb2xlYW4nKSB7CisgICAgICAgIGFyZ3Muc2hpZnQoKTsKKyAgICAg
IH0gZWxzZSB7CisgICAgICAgIC8vIFRocm93IGVycm9ycyBvbiB1bmhhbmRsZWQgdHJpZ2dlciBl
dmVudHMgYnkgZGVmYXVsdAorICAgICAgICBpZ25vcmVGYWlsdXJlID0gZmFsc2U7CisgICAgICB9
CisgICAgICBfcm91dGVyVXRpbHMudHJpZ2dlcih0aGlzLnJvdXRlciwgdGhpcy5zdGF0ZS5oYW5k
bGVySW5mb3Muc2xpY2UoMCwgdGhpcy5yZXNvbHZlSW5kZXggKyAxKSwgaWdub3JlRmFpbHVyZSwg
YXJncyk7CisgICAgfSwKKworICAgIC8qKgorICAgICAgVHJhbnNpdGlvbnMgYXJlIGFib3J0ZWQg
YW5kIHRoZWlyIHByb21pc2VzIHJlamVjdGVkCisgICAgICB3aGVuIHJlZGlyZWN0cyBvY2N1cjsg
dGhpcyBtZXRob2QgcmV0dXJucyBhIHByb21pc2UKKyAgICAgIHRoYXQgd2lsbCBmb2xsb3cgYW55
IHJlZGlyZWN0cyB0aGF0IG9jY3VyIGFuZCBmdWxmaWxsCisgICAgICB3aXRoIHRoZSB2YWx1ZSBm
dWxmaWxsZWQgYnkgYW55IHJlZGlyZWN0aW5nIHRyYW5zaXRpb25zCisgICAgICB0aGF0IG9jY3Vy
LgorICAgICAgIEBtZXRob2QgZm9sbG93UmVkaXJlY3RzCisgICAgICBAcmV0dXJuIHtQcm9taXNl
fSBhIHByb21pc2UgdGhhdCBmdWxmaWxscyB3aXRoIHRoZSBzYW1lCisgICAgICAgIHZhbHVlIHRo
YXQgdGhlIGZpbmFsIHJlZGlyZWN0aW5nIHRyYW5zaXRpb24gZnVsZmlsbHMgd2l0aAorICAgICAg
QHB1YmxpYworICAgICAqLworICAgIGZvbGxvd1JlZGlyZWN0czogZnVuY3Rpb24gKCkgeworICAg
ICAgdmFyIHJvdXRlciA9IHRoaXMucm91dGVyOworICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZVsn
Y2F0Y2gnXShmdW5jdGlvbiAocmVhc29uKSB7CisgICAgICAgIGlmIChyb3V0ZXIuYWN0aXZlVHJh
bnNpdGlvbikgeworICAgICAgICAgIHJldHVybiByb3V0ZXIuYWN0aXZlVHJhbnNpdGlvbi5mb2xs
b3dSZWRpcmVjdHMoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gX3JzdnBQcm9taXNlLmRl
ZmF1bHQucmVqZWN0KHJlYXNvbik7CisgICAgICB9KTsKKyAgICB9LAorCisgICAgdG9TdHJpbmc6
IGZ1bmN0aW9uICgpIHsKKyAgICAgIHJldHVybiAiVHJhbnNpdGlvbiAoc2VxdWVuY2UgIiArIHRo
aXMuc2VxdWVuY2UgKyAiKSI7CisgICAgfSwKKworICAgIC8qKgorICAgICAgQHByaXZhdGUKKyAg
ICAgKi8KKyAgICBsb2c6IGZ1bmN0aW9uIChtZXNzYWdlKSB7CisgICAgICBfcm91dGVyVXRpbHMu
bG9nKHRoaXMucm91dGVyLCB0aGlzLnNlcXVlbmNlLCBtZXNzYWdlKTsKKyAgICB9CisgIH07CisK
KyAgLy8gQWxpYXMgJ3RyaWdnZXInIGFzICdzZW5kJworICBUcmFuc2l0aW9uLnByb3RvdHlwZS5z
ZW5kID0gVHJhbnNpdGlvbi5wcm90b3R5cGUudHJpZ2dlcjsKKworICAvKioKKyAgICBAcHJpdmF0
ZQorICAKKyAgICBMb2dzIGFuZCByZXR1cm5zIGEgVHJhbnNpdGlvbkFib3J0ZWQgZXJyb3IuCisg
ICAqLworICBmdW5jdGlvbiBsb2dBYm9ydCh0cmFuc2l0aW9uKSB7CisgICAgX3JvdXRlclV0aWxz
LmxvZyh0cmFuc2l0aW9uLnJvdXRlciwgdHJhbnNpdGlvbi5zZXF1ZW5jZSwgImRldGVjdGVkIGFi
b3J0LiIpOworICAgIHJldHVybiBuZXcgVHJhbnNpdGlvbkFib3J0ZWQoKTsKKyAgfQorCisgIGZ1
bmN0aW9uIFRyYW5zaXRpb25BYm9ydGVkKG1lc3NhZ2UpIHsKKyAgICB0aGlzLm1lc3NhZ2UgPSBt
ZXNzYWdlIHx8ICJUcmFuc2l0aW9uQWJvcnRlZCI7CisgICAgdGhpcy5uYW1lID0gIlRyYW5zaXRp
b25BYm9ydGVkIjsKKyAgfQorCisgIGV4cG9ydHMuVHJhbnNpdGlvbiA9IFRyYW5zaXRpb247Cisg
IGV4cG9ydHMubG9nQWJvcnQgPSBsb2dBYm9ydDsKKyAgZXhwb3J0cy5UcmFuc2l0aW9uQWJvcnRl
ZCA9IFRyYW5zaXRpb25BYm9ydGVkOworfSk7CitlbmlmZWQoInJvdXRlci91bnJlY29nbml6ZWQt
dXJsLWVycm9yIiwgWyJleHBvcnRzIiwgInJvdXRlci91dGlscyJdLCBmdW5jdGlvbiAoZXhwb3J0
cywgX3JvdXRlclV0aWxzKSB7CisgICJ1c2Ugc3RyaWN0IjsKKworICAvKioKKyAgICBQcm9taXNl
IHJlamVjdCByZWFzb25zIHBhc3NlZCB0byBwcm9taXNlIHJlamVjdGlvbgorICAgIGhhbmRsZXJz
IGZvciBmYWlsZWQgdHJhbnNpdGlvbnMuCisgICAqLworICBmdW5jdGlvbiBVbnJlY29nbml6ZWRV
UkxFcnJvcihtZXNzYWdlKSB7CisgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAiVW5yZWNv
Z25pemVkVVJMRXJyb3IiOworICAgIHRoaXMubmFtZSA9ICJVbnJlY29nbml6ZWRVUkxFcnJvciI7
CisgICAgRXJyb3IuY2FsbCh0aGlzKTsKKyAgfQorCisgIFVucmVjb2duaXplZFVSTEVycm9yLnBy
b3RvdHlwZSA9IF9yb3V0ZXJVdGlscy5vQ3JlYXRlKEVycm9yLnByb3RvdHlwZSk7CisKKyAgZXhw
b3J0cy5kZWZhdWx0ID0gVW5yZWNvZ25pemVkVVJMRXJyb3I7Cit9KTsKK2VuaWZlZCgncm91dGVy
L3V0aWxzJywgWydleHBvcnRzJ10sIGZ1bmN0aW9uIChleHBvcnRzKSB7CisgICd1c2Ugc3RyaWN0
JzsKKworICBleHBvcnRzLmV4dHJhY3RRdWVyeVBhcmFtcyA9IGV4dHJhY3RRdWVyeVBhcmFtczsK
KyAgZXhwb3J0cy5sb2cgPSBsb2c7CisgIGV4cG9ydHMuYmluZCA9IGJpbmQ7CisgIGV4cG9ydHMu
Zm9yRWFjaCA9IGZvckVhY2g7CisgIGV4cG9ydHMudHJpZ2dlciA9IHRyaWdnZXI7CisgIGV4cG9y
dHMuZ2V0Q2hhbmdlbGlzdCA9IGdldENoYW5nZWxpc3Q7CisgIGV4cG9ydHMucHJvbWlzZUxhYmVs
ID0gcHJvbWlzZUxhYmVsOworICBleHBvcnRzLnN1YmNsYXNzID0gc3ViY2xhc3M7CisgIHZhciBz
bGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTsKKworICB2YXIgX2lzQXJyYXk7CisgIGlmICgh
QXJyYXkuaXNBcnJheSkgeworICAgIF9pc0FycmF5ID0gZnVuY3Rpb24gKHgpIHsKKyAgICAgIHJl
dHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeCkgPT09ICJbb2JqZWN0IEFycmF5
XSI7CisgICAgfTsKKyAgfSBlbHNlIHsKKyAgICBfaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7Cisg
IH0KKworICB2YXIgaXNBcnJheSA9IF9pc0FycmF5OworCisgIGV4cG9ydHMuaXNBcnJheSA9IGlz
QXJyYXk7CisgIGZ1bmN0aW9uIG1lcmdlKGhhc2gsIG90aGVyKSB7CisgICAgZm9yICh2YXIgcHJv
cCBpbiBvdGhlcikgeworICAgICAgaWYgKG90aGVyLmhhc093blByb3BlcnR5KHByb3ApKSB7Cisg
ICAgICAgIGhhc2hbcHJvcF0gPSBvdGhlcltwcm9wXTsKKyAgICAgIH0KKyAgICB9CisgIH0KKwor
ICB2YXIgb0NyZWF0ZSA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gKHByb3RvKSB7CisgICAg
ZnVuY3Rpb24gRigpIHt9CisgICAgRi5wcm90b3R5cGUgPSBwcm90bzsKKyAgICByZXR1cm4gbmV3
IEYoKTsKKyAgfTsKKworICBleHBvcnRzLm9DcmVhdGUgPSBvQ3JlYXRlOworICAvKioKKyAgICBA
cHJpdmF0ZQorICAKKyAgICBFeHRyYWN0cyBxdWVyeSBwYXJhbXMgZnJvbSB0aGUgZW5kIG9mIGFu
IGFycmF5CisgICoqLworCisgIGZ1bmN0aW9uIGV4dHJhY3RRdWVyeVBhcmFtcyhhcnJheSkgewor
ICAgIHZhciBsZW4gPSBhcnJheSAmJiBhcnJheS5sZW5ndGgsCisgICAgICAgIGhlYWQsCisgICAg
ICAgIHF1ZXJ5UGFyYW1zOworCisgICAgaWYgKGxlbiAmJiBsZW4gPiAwICYmIGFycmF5W2xlbiAt
IDFdICYmIGFycmF5W2xlbiAtIDFdLmhhc093blByb3BlcnR5KCdxdWVyeVBhcmFtcycpKSB7Cisg
ICAgICBxdWVyeVBhcmFtcyA9IGFycmF5W2xlbiAtIDFdLnF1ZXJ5UGFyYW1zOworICAgICAgaGVh
ZCA9IHNsaWNlLmNhbGwoYXJyYXksIDAsIGxlbiAtIDEpOworICAgICAgcmV0dXJuIFtoZWFkLCBx
dWVyeVBhcmFtc107CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBbYXJyYXksIG51bGxdOwor
ICAgIH0KKyAgfQorCisgIC8qKgorICAgIEBwcml2YXRlCisgIAorICAgIENvZXJjZXMgcXVlcnkg
cGFyYW0gcHJvcGVydGllcyBhbmQgYXJyYXkgZWxlbWVudHMgaW50byBzdHJpbmdzLgorICAqKi8K
KyAgZnVuY3Rpb24gY29lcmNlUXVlcnlQYXJhbXNUb1N0cmluZyhxdWVyeVBhcmFtcykgeworICAg
IGZvciAodmFyIGtleSBpbiBxdWVyeVBhcmFtcykgeworICAgICAgaWYgKHR5cGVvZiBxdWVyeVBh
cmFtc1trZXldID09PSAnbnVtYmVyJykgeworICAgICAgICBxdWVyeVBhcmFtc1trZXldID0gJycg
KyBxdWVyeVBhcmFtc1trZXldOworICAgICAgfSBlbHNlIGlmIChpc0FycmF5KHF1ZXJ5UGFyYW1z
W2tleV0pKSB7CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcXVlcnlQYXJhbXNba2V5XS5s
ZW5ndGg7IGkgPCBsOyBpKyspIHsKKyAgICAgICAgICBxdWVyeVBhcmFtc1trZXldW2ldID0gJycg
KyBxdWVyeVBhcmFtc1trZXldW2ldOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9Cisg
IC8qKgorICAgIEBwcml2YXRlCisgICAqLworCisgIGZ1bmN0aW9uIGxvZyhyb3V0ZXIsIHNlcXVl
bmNlLCBtc2cpIHsKKyAgICBpZiAoIXJvdXRlci5sb2cpIHsKKyAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykgeworICAgICAgcm91dGVyLmxvZygi
VHJhbnNpdGlvbiAjIiArIHNlcXVlbmNlICsgIjogIiArIG1zZyk7CisgICAgfSBlbHNlIHsKKyAg
ICAgIG1zZyA9IHNlcXVlbmNlOworICAgICAgcm91dGVyLmxvZyhtc2cpOworICAgIH0KKyAgfQor
CisgIGZ1bmN0aW9uIGJpbmQoY29udGV4dCwgZm4pIHsKKyAgICB2YXIgYm91bmRBcmdzID0gYXJn
dW1lbnRzOworICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgIHZhciBhcmdzID0g
c2xpY2UuY2FsbChib3VuZEFyZ3MsIDIpOworICAgICAgYXJncy5wdXNoKHZhbHVlKTsKKyAgICAg
IHJldHVybiBmbi5hcHBseShjb250ZXh0LCBhcmdzKTsKKyAgICB9OworICB9CisKKyAgZnVuY3Rp
b24gaXNQYXJhbShvYmplY3QpIHsKKyAgICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gInN0cmlu
ZyIgfHwgb2JqZWN0IGluc3RhbmNlb2YgU3RyaW5nIHx8IHR5cGVvZiBvYmplY3QgPT09ICJudW1i
ZXIiIHx8IG9iamVjdCBpbnN0YW5jZW9mIE51bWJlcjsKKyAgfQorCisgIGZ1bmN0aW9uIGZvckVh
Y2goYXJyYXksIGNhbGxiYWNrKSB7CisgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcnJheS5sZW5n
dGg7IGkgPCBsICYmIGZhbHNlICE9PSBjYWxsYmFjayhhcnJheVtpXSk7IGkrKykge30KKyAgfQor
CisgIGZ1bmN0aW9uIHRyaWdnZXIocm91dGVyLCBoYW5kbGVySW5mb3MsIGlnbm9yZUZhaWx1cmUs
IGFyZ3MpIHsKKyAgICBpZiAocm91dGVyLnRyaWdnZXJFdmVudCkgeworICAgICAgcm91dGVyLnRy
aWdnZXJFdmVudChoYW5kbGVySW5mb3MsIGlnbm9yZUZhaWx1cmUsIGFyZ3MpOworICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIHZhciBuYW1lID0gYXJncy5zaGlmdCgpOworCisgICAgaWYgKCFo
YW5kbGVySW5mb3MpIHsKKyAgICAgIGlmIChpZ25vcmVGYWlsdXJlKSB7CisgICAgICAgIHJldHVy
bjsKKyAgICAgIH0KKyAgICAgIHRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IHRyaWdnZXIgZXZl
bnQgJyIgKyBuYW1lICsgIicuIFRoZXJlIGFyZSBubyBhY3RpdmUgaGFuZGxlcnMiKTsKKyAgICB9
CisKKyAgICB2YXIgZXZlbnRXYXNIYW5kbGVkID0gZmFsc2U7CisKKyAgICBmb3IgKHZhciBpID0g
aGFuZGxlckluZm9zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICB2YXIgaGFuZGxl
ckluZm8gPSBoYW5kbGVySW5mb3NbaV0sCisgICAgICAgICAgaGFuZGxlciA9IGhhbmRsZXJJbmZv
LmhhbmRsZXI7CisKKyAgICAgIGlmIChoYW5kbGVyLmV2ZW50cyAmJiBoYW5kbGVyLmV2ZW50c1tu
YW1lXSkgeworICAgICAgICBpZiAoaGFuZGxlci5ldmVudHNbbmFtZV0uYXBwbHkoaGFuZGxlciwg
YXJncykgPT09IHRydWUpIHsKKyAgICAgICAgICBldmVudFdhc0hhbmRsZWQgPSB0cnVlOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgfQorICAg
IH0KKworICAgIGlmICghZXZlbnRXYXNIYW5kbGVkICYmICFpZ25vcmVGYWlsdXJlKSB7CisgICAg
ICB0aHJvdyBuZXcgRXJyb3IoIk5vdGhpbmcgaGFuZGxlZCB0aGUgZXZlbnQgJyIgKyBuYW1lICsg
IicuIik7CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gZ2V0Q2hhbmdlbGlzdChvbGRPYmplY3Qs
IG5ld09iamVjdCkgeworICAgIHZhciBrZXk7CisgICAgdmFyIHJlc3VsdHMgPSB7CisgICAgICBh
bGw6IHt9LAorICAgICAgY2hhbmdlZDoge30sCisgICAgICByZW1vdmVkOiB7fQorICAgIH07CisK
KyAgICBtZXJnZShyZXN1bHRzLmFsbCwgbmV3T2JqZWN0KTsKKworICAgIHZhciBkaWRDaGFuZ2Ug
PSBmYWxzZTsKKyAgICBjb2VyY2VRdWVyeVBhcmFtc1RvU3RyaW5nKG9sZE9iamVjdCk7CisgICAg
Y29lcmNlUXVlcnlQYXJhbXNUb1N0cmluZyhuZXdPYmplY3QpOworCisgICAgLy8gQ2FsY3VsYXRl
IHJlbW92YWxzCisgICAgZm9yIChrZXkgaW4gb2xkT2JqZWN0KSB7CisgICAgICBpZiAob2xkT2Jq
ZWN0Lmhhc093blByb3BlcnR5KGtleSkpIHsKKyAgICAgICAgaWYgKCFuZXdPYmplY3QuaGFzT3du
UHJvcGVydHkoa2V5KSkgeworICAgICAgICAgIGRpZENoYW5nZSA9IHRydWU7CisgICAgICAgICAg
cmVzdWx0cy5yZW1vdmVkW2tleV0gPSBvbGRPYmplY3Rba2V5XTsKKyAgICAgICAgfQorICAgICAg
fQorICAgIH0KKworICAgIC8vIENhbGN1bGF0ZSBjaGFuZ2VzCisgICAgZm9yIChrZXkgaW4gbmV3
T2JqZWN0KSB7CisgICAgICBpZiAobmV3T2JqZWN0Lmhhc093blByb3BlcnR5KGtleSkpIHsKKyAg
ICAgICAgaWYgKGlzQXJyYXkob2xkT2JqZWN0W2tleV0pICYmIGlzQXJyYXkobmV3T2JqZWN0W2tl
eV0pKSB7CisgICAgICAgICAgaWYgKG9sZE9iamVjdFtrZXldLmxlbmd0aCAhPT0gbmV3T2JqZWN0
W2tleV0ubGVuZ3RoKSB7CisgICAgICAgICAgICByZXN1bHRzLmNoYW5nZWRba2V5XSA9IG5ld09i
amVjdFtrZXldOworICAgICAgICAgICAgZGlkQ2hhbmdlID0gdHJ1ZTsKKyAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBvbGRPYmplY3Rba2V5XS5sZW5n
dGg7IGkgPCBsOyBpKyspIHsKKyAgICAgICAgICAgICAgaWYgKG9sZE9iamVjdFtrZXldW2ldICE9
PSBuZXdPYmplY3Rba2V5XVtpXSkgeworICAgICAgICAgICAgICAgIHJlc3VsdHMuY2hhbmdlZFtr
ZXldID0gbmV3T2JqZWN0W2tleV07CisgICAgICAgICAgICAgICAgZGlkQ2hhbmdlID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICBpZiAob2xkT2JqZWN0W2tleV0gIT09IG5ld09iamVjdFtrZXldKSB7
CisgICAgICAgICAgICByZXN1bHRzLmNoYW5nZWRba2V5XSA9IG5ld09iamVjdFtrZXldOworICAg
ICAgICAgICAgZGlkQ2hhbmdlID0gdHJ1ZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gZGlkQ2hhbmdlICYmIHJlc3VsdHM7CisgIH0KKworICBm
dW5jdGlvbiBwcm9taXNlTGFiZWwobGFiZWwpIHsKKyAgICByZXR1cm4gJ1JvdXRlcjogJyArIGxh
YmVsOworICB9CisKKyAgZnVuY3Rpb24gc3ViY2xhc3MocGFyZW50Q29uc3RydWN0b3IsIHByb3Rv
KSB7CisgICAgZnVuY3Rpb24gQyhwcm9wcykgeworICAgICAgcGFyZW50Q29uc3RydWN0b3IuY2Fs
bCh0aGlzLCBwcm9wcyB8fCB7fSk7CisgICAgfQorICAgIEMucHJvdG90eXBlID0gb0NyZWF0ZShw
YXJlbnRDb25zdHJ1Y3Rvci5wcm90b3R5cGUpOworICAgIG1lcmdlKEMucHJvdG90eXBlLCBwcm90
byk7CisgICAgcmV0dXJuIEM7CisgIH0KKworICBmdW5jdGlvbiByZXNvbHZlSG9vayhvYmosIGhv
b2tOYW1lKSB7CisgICAgaWYgKCFvYmopIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgdmFy
IHVuZGVyc2NvcmVkID0gIl8iICsgaG9va05hbWU7CisgICAgcmV0dXJuIG9ialt1bmRlcnNjb3Jl
ZF0gJiYgdW5kZXJzY29yZWQgfHwgb2JqW2hvb2tOYW1lXSAmJiBob29rTmFtZTsKKyAgfQorCisg
IGZ1bmN0aW9uIGNhbGxIb29rKG9iaiwgX2hvb2tOYW1lLCBhcmcxLCBhcmcyKSB7CisgICAgdmFy
IGhvb2tOYW1lID0gcmVzb2x2ZUhvb2sob2JqLCBfaG9va05hbWUpOworICAgIHJldHVybiBob29r
TmFtZSAmJiBvYmpbaG9va05hbWVdLmNhbGwob2JqLCBhcmcxLCBhcmcyKTsKKyAgfQorCisgIGZ1
bmN0aW9uIGFwcGx5SG9vayhvYmosIF9ob29rTmFtZSwgYXJncykgeworICAgIHZhciBob29rTmFt
ZSA9IHJlc29sdmVIb29rKG9iaiwgX2hvb2tOYW1lKTsKKyAgICBpZiAoaG9va05hbWUpIHsKKyAg
ICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkgeworICAgICAgICByZXR1cm4gb2JqW2hvb2tOYW1l
XS5jYWxsKG9iaik7CisgICAgICB9IGVsc2UgaWYgKGFyZ3MubGVuZ3RoID09PSAxKSB7CisgICAg
ICAgIHJldHVybiBvYmpbaG9va05hbWVdLmNhbGwob2JqLCBhcmdzWzBdKTsKKyAgICAgIH0gZWxz
ZSBpZiAoYXJncy5sZW5ndGggPT09IDIpIHsKKyAgICAgICAgcmV0dXJuIG9ialtob29rTmFtZV0u
Y2FsbChvYmosIGFyZ3NbMF0sIGFyZ3NbMV0pOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0
dXJuIG9ialtob29rTmFtZV0uYXBwbHkob2JqLCBhcmdzKTsKKyAgICAgIH0KKyAgICB9CisgIH0K
KworICBleHBvcnRzLm1lcmdlID0gbWVyZ2U7CisgIGV4cG9ydHMuc2xpY2UgPSBzbGljZTsKKyAg
ZXhwb3J0cy5pc1BhcmFtID0gaXNQYXJhbTsKKyAgZXhwb3J0cy5jb2VyY2VRdWVyeVBhcmFtc1Rv
U3RyaW5nID0gY29lcmNlUXVlcnlQYXJhbXNUb1N0cmluZzsKKyAgZXhwb3J0cy5jYWxsSG9vayA9
IGNhbGxIb29rOworICBleHBvcnRzLnJlc29sdmVIb29rID0gcmVzb2x2ZUhvb2s7CisgIGV4cG9y
dHMuYXBwbHlIb29rID0gYXBwbHlIb29rOworfSk7CitlbmlmZWQoJ3JzdnAnLCBbJ2V4cG9ydHMn
LCAncnN2cC9wcm9taXNlJywgJ3JzdnAvZXZlbnRzJywgJ3JzdnAvbm9kZScsICdyc3ZwL2FsbCcs
ICdyc3ZwL2FsbC1zZXR0bGVkJywgJ3JzdnAvcmFjZScsICdyc3ZwL2hhc2gnLCAncnN2cC9oYXNo
LXNldHRsZWQnLCAncnN2cC9yZXRocm93JywgJ3JzdnAvZGVmZXInLCAncnN2cC9jb25maWcnLCAn
cnN2cC9tYXAnLCAncnN2cC9yZXNvbHZlJywgJ3JzdnAvcmVqZWN0JywgJ3JzdnAvZmlsdGVyJywg
J3JzdnAvYXNhcCddLCBmdW5jdGlvbiAoZXhwb3J0cywgX3JzdnBQcm9taXNlLCBfcnN2cEV2ZW50
cywgX3JzdnBOb2RlLCBfcnN2cEFsbCwgX3JzdnBBbGxTZXR0bGVkLCBfcnN2cFJhY2UsIF9yc3Zw
SGFzaCwgX3JzdnBIYXNoU2V0dGxlZCwgX3JzdnBSZXRocm93LCBfcnN2cERlZmVyLCBfcnN2cENv
bmZpZywgX3JzdnBNYXAsIF9yc3ZwUmVzb2x2ZSwgX3JzdnBSZWplY3QsIF9yc3ZwRmlsdGVyLCBf
cnN2cEFzYXApIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIC8vIGRlZmF1bHRzCisgIF9yc3ZwQ29u
ZmlnLmNvbmZpZy5hc3luYyA9IF9yc3ZwQXNhcC5kZWZhdWx0OworICBfcnN2cENvbmZpZy5jb25m
aWcuYWZ0ZXIgPSBmdW5jdGlvbiAoY2IpIHsKKyAgICBzZXRUaW1lb3V0KGNiLCAwKTsKKyAgfTsK
KyAgdmFyIGNhc3QgPSBfcnN2cFJlc29sdmUuZGVmYXVsdDsKKyAgZnVuY3Rpb24gYXN5bmMoY2Fs
bGJhY2ssIGFyZykgeworICAgIF9yc3ZwQ29uZmlnLmNvbmZpZy5hc3luYyhjYWxsYmFjaywgYXJn
KTsKKyAgfQorCisgIGZ1bmN0aW9uIG9uKCkgeworICAgIF9yc3ZwQ29uZmlnLmNvbmZpZ1snb24n
XS5hcHBseShfcnN2cENvbmZpZy5jb25maWcsIGFyZ3VtZW50cyk7CisgIH0KKworICBmdW5jdGlv
biBvZmYoKSB7CisgICAgX3JzdnBDb25maWcuY29uZmlnWydvZmYnXS5hcHBseShfcnN2cENvbmZp
Zy5jb25maWcsIGFyZ3VtZW50cyk7CisgIH0KKworICAvLyBTZXQgdXAgaW5zdHJ1bWVudGF0aW9u
IHRocm91Z2ggYHdpbmRvdy5fX1BST01JU0VfSU5UUlVNRU5UQVRJT05fX2AKKyAgaWYgKHR5cGVv
ZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3dbJ19fUFJPTUlTRV9JTlNU
UlVNRU5UQVRJT05fXyddID09PSAnb2JqZWN0JykgeworICAgIHZhciBjYWxsYmFja3MgPSB3aW5k
b3dbJ19fUFJPTUlTRV9JTlNUUlVNRU5UQVRJT05fXyddOworICAgIF9yc3ZwQ29uZmlnLmNvbmZp
Z3VyZSgnaW5zdHJ1bWVudCcsIHRydWUpOworICAgIGZvciAodmFyIGV2ZW50TmFtZSBpbiBjYWxs
YmFja3MpIHsKKyAgICAgIGlmIChjYWxsYmFja3MuaGFzT3duUHJvcGVydHkoZXZlbnROYW1lKSkg
eworICAgICAgICBvbihldmVudE5hbWUsIGNhbGxiYWNrc1tldmVudE5hbWVdKTsKKyAgICAgIH0K
KyAgICB9CisgIH0KKworICBleHBvcnRzLmNhc3QgPSBjYXN0OworICBleHBvcnRzLlByb21pc2Ug
PSBfcnN2cFByb21pc2UuZGVmYXVsdDsKKyAgZXhwb3J0cy5FdmVudFRhcmdldCA9IF9yc3ZwRXZl
bnRzLmRlZmF1bHQ7CisgIGV4cG9ydHMuYWxsID0gX3JzdnBBbGwuZGVmYXVsdDsKKyAgZXhwb3J0
cy5hbGxTZXR0bGVkID0gX3JzdnBBbGxTZXR0bGVkLmRlZmF1bHQ7CisgIGV4cG9ydHMucmFjZSA9
IF9yc3ZwUmFjZS5kZWZhdWx0OworICBleHBvcnRzLmhhc2ggPSBfcnN2cEhhc2guZGVmYXVsdDsK
KyAgZXhwb3J0cy5oYXNoU2V0dGxlZCA9IF9yc3ZwSGFzaFNldHRsZWQuZGVmYXVsdDsKKyAgZXhw
b3J0cy5yZXRocm93ID0gX3JzdnBSZXRocm93LmRlZmF1bHQ7CisgIGV4cG9ydHMuZGVmZXIgPSBf
cnN2cERlZmVyLmRlZmF1bHQ7CisgIGV4cG9ydHMuZGVub2RlaWZ5ID0gX3JzdnBOb2RlLmRlZmF1
bHQ7CisgIGV4cG9ydHMuY29uZmlndXJlID0gX3JzdnBDb25maWcuY29uZmlndXJlOworICBleHBv
cnRzLm9uID0gb247CisgIGV4cG9ydHMub2ZmID0gb2ZmOworICBleHBvcnRzLnJlc29sdmUgPSBf
cnN2cFJlc29sdmUuZGVmYXVsdDsKKyAgZXhwb3J0cy5yZWplY3QgPSBfcnN2cFJlamVjdC5kZWZh
dWx0OworICBleHBvcnRzLmFzeW5jID0gYXN5bmM7CisgIGV4cG9ydHMubWFwID0gX3JzdnBNYXAu
ZGVmYXVsdDsKKyAgZXhwb3J0cy5maWx0ZXIgPSBfcnN2cEZpbHRlci5kZWZhdWx0OworfSk7Citl
bmlmZWQoJ3JzdnAudW1kJywgWydleHBvcnRzJywgJ3JzdnAvcGxhdGZvcm0nLCAncnN2cCddLCBm
dW5jdGlvbiAoZXhwb3J0cywgX3JzdnBQbGF0Zm9ybSwgX3JzdnApIHsKKyAgJ3VzZSBzdHJpY3Qn
OworCisgIHZhciBSU1ZQID0geworICAgICdyYWNlJzogX3JzdnAucmFjZSwKKyAgICAnUHJvbWlz
ZSc6IF9yc3ZwLlByb21pc2UsCisgICAgJ2FsbFNldHRsZWQnOiBfcnN2cC5hbGxTZXR0bGVkLAor
ICAgICdoYXNoJzogX3JzdnAuaGFzaCwKKyAgICAnaGFzaFNldHRsZWQnOiBfcnN2cC5oYXNoU2V0
dGxlZCwKKyAgICAnZGVub2RlaWZ5JzogX3JzdnAuZGVub2RlaWZ5LAorICAgICdvbic6IF9yc3Zw
Lm9uLAorICAgICdvZmYnOiBfcnN2cC5vZmYsCisgICAgJ21hcCc6IF9yc3ZwLm1hcCwKKyAgICAn
ZmlsdGVyJzogX3JzdnAuZmlsdGVyLAorICAgICdyZXNvbHZlJzogX3JzdnAucmVzb2x2ZSwKKyAg
ICAncmVqZWN0JzogX3JzdnAucmVqZWN0LAorICAgICdhbGwnOiBfcnN2cC5hbGwsCisgICAgJ3Jl
dGhyb3cnOiBfcnN2cC5yZXRocm93LAorICAgICdkZWZlcic6IF9yc3ZwLmRlZmVyLAorICAgICdF
dmVudFRhcmdldCc6IF9yc3ZwLkV2ZW50VGFyZ2V0LAorICAgICdjb25maWd1cmUnOiBfcnN2cC5j
b25maWd1cmUsCisgICAgJ2FzeW5jJzogX3JzdnAuYXN5bmMKKyAgfTsKKworICAvKiBnbG9iYWwg
ZGVmaW5lOnRydWUgbW9kdWxlOnRydWUgd2luZG93OiB0cnVlICovCisgIGlmICh0eXBlb2YgZGVm
aW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZVsnYW1kJ10pIHsKKyAgICBkZWZpbmUoZnVuY3Rp
b24gKCkgeworICAgICAgcmV0dXJuIFJTVlA7CisgICAgfSk7CisgIH0gZWxzZSBpZiAodHlwZW9m
IG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlWydleHBvcnRzJ10pIHsKKyAgICBtb2R1
bGVbJ2V4cG9ydHMnXSA9IFJTVlA7CisgIH0gZWxzZSBpZiAodHlwZW9mIF9yc3ZwUGxhdGZvcm0u
ZGVmYXVsdCAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICBfcnN2cFBsYXRmb3JtLmRlZmF1bHRbJ1JT
VlAnXSA9IFJTVlA7CisgIH0KK30pOworZW5pZmVkKCdyc3ZwLy1pbnRlcm5hbCcsIFsnZXhwb3J0
cycsICdyc3ZwL3V0aWxzJywgJ3JzdnAvaW5zdHJ1bWVudCcsICdyc3ZwL2NvbmZpZyddLCBmdW5j
dGlvbiAoZXhwb3J0cywgX3JzdnBVdGlscywgX3JzdnBJbnN0cnVtZW50LCBfcnN2cENvbmZpZykg
eworICAndXNlIHN0cmljdCc7CisKKyAgZnVuY3Rpb24gd2l0aE93blByb21pc2UoKSB7CisgICAg
cmV0dXJuIG5ldyBUeXBlRXJyb3IoJ0EgcHJvbWlzZXMgY2FsbGJhY2sgY2Fubm90IHJldHVybiB0
aGF0IHNhbWUgcHJvbWlzZS4nKTsKKyAgfQorCisgIGZ1bmN0aW9uIG5vb3AoKSB7fQorCisgIHZh
ciBQRU5ESU5HID0gdm9pZCAwOworICB2YXIgRlVMRklMTEVEID0gMTsKKyAgdmFyIFJFSkVDVEVE
ID0gMjsKKworICB2YXIgR0VUX1RIRU5fRVJST1IgPSBuZXcgRXJyb3JPYmplY3QoKTsKKworICBm
dW5jdGlvbiBnZXRUaGVuKHByb21pc2UpIHsKKyAgICB0cnkgeworICAgICAgcmV0dXJuIHByb21p
c2UudGhlbjsKKyAgICB9IGNhdGNoIChlcnJvcikgeworICAgICAgR0VUX1RIRU5fRVJST1IuZXJy
b3IgPSBlcnJvcjsKKyAgICAgIHJldHVybiBHRVRfVEhFTl9FUlJPUjsKKyAgICB9CisgIH0KKwor
ICBmdW5jdGlvbiB0cnlUaGVuKHRoZW4sIHZhbHVlLCBmdWxmaWxsbWVudEhhbmRsZXIsIHJlamVj
dGlvbkhhbmRsZXIpIHsKKyAgICB0cnkgeworICAgICAgdGhlbi5jYWxsKHZhbHVlLCBmdWxmaWxs
bWVudEhhbmRsZXIsIHJlamVjdGlvbkhhbmRsZXIpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAg
IHJldHVybiBlOworICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIGhhbmRsZUZvcmVpZ25UaGVuYWJs
ZShwcm9taXNlLCB0aGVuYWJsZSwgdGhlbikgeworICAgIF9yc3ZwQ29uZmlnLmNvbmZpZy5hc3lu
YyhmdW5jdGlvbiAocHJvbWlzZSkgeworICAgICAgdmFyIHNlYWxlZCA9IGZhbHNlOworICAgICAg
dmFyIGVycm9yID0gdHJ5VGhlbih0aGVuLCB0aGVuYWJsZSwgZnVuY3Rpb24gKHZhbHVlKSB7Cisg
ICAgICAgIGlmIChzZWFsZWQpIHsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgc2VhbGVkID0gdHJ1ZTsKKyAgICAgICAgaWYgKHRoZW5hYmxlICE9PSB2YWx1ZSkgeworICAg
ICAgICAgIHJlc29sdmUocHJvbWlzZSwgdmFsdWUpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgIGZ1bGZpbGwocHJvbWlzZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICB9LCBmdW5jdGlv
biAocmVhc29uKSB7CisgICAgICAgIGlmIChzZWFsZWQpIHsKKyAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgc2VhbGVkID0gdHJ1ZTsKKworICAgICAgICByZWplY3QocHJvbWlz
ZSwgcmVhc29uKTsKKyAgICAgIH0sICdTZXR0bGU6ICcgKyAocHJvbWlzZS5fbGFiZWwgfHwgJyB1
bmtub3duIHByb21pc2UnKSk7CisKKyAgICAgIGlmICghc2VhbGVkICYmIGVycm9yKSB7CisgICAg
ICAgIHNlYWxlZCA9IHRydWU7CisgICAgICAgIHJlamVjdChwcm9taXNlLCBlcnJvcik7CisgICAg
ICB9CisgICAgfSwgcHJvbWlzZSk7CisgIH0KKworICBmdW5jdGlvbiBoYW5kbGVPd25UaGVuYWJs
ZShwcm9taXNlLCB0aGVuYWJsZSkgeworICAgIGlmICh0aGVuYWJsZS5fc3RhdGUgPT09IEZVTEZJ
TExFRCkgeworICAgICAgZnVsZmlsbChwcm9taXNlLCB0aGVuYWJsZS5fcmVzdWx0KTsKKyAgICB9
IGVsc2UgaWYgKHRoZW5hYmxlLl9zdGF0ZSA9PT0gUkVKRUNURUQpIHsKKyAgICAgIHRoZW5hYmxl
Ll9vbkVycm9yID0gbnVsbDsKKyAgICAgIHJlamVjdChwcm9taXNlLCB0aGVuYWJsZS5fcmVzdWx0
KTsKKyAgICB9IGVsc2UgeworICAgICAgc3Vic2NyaWJlKHRoZW5hYmxlLCB1bmRlZmluZWQsIGZ1
bmN0aW9uICh2YWx1ZSkgeworICAgICAgICBpZiAodGhlbmFibGUgIT09IHZhbHVlKSB7CisgICAg
ICAgICAgcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgZnVsZmlsbChwcm9taXNlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgIH0sIGZ1bmN0aW9u
IChyZWFzb24pIHsKKyAgICAgICAgcmVqZWN0KHByb21pc2UsIHJlYXNvbik7CisgICAgICB9KTsK
KyAgICB9CisgIH0KKworICBmdW5jdGlvbiBoYW5kbGVNYXliZVRoZW5hYmxlKHByb21pc2UsIG1h
eWJlVGhlbmFibGUpIHsKKyAgICBpZiAobWF5YmVUaGVuYWJsZS5jb25zdHJ1Y3RvciA9PT0gcHJv
bWlzZS5jb25zdHJ1Y3RvcikgeworICAgICAgaGFuZGxlT3duVGhlbmFibGUocHJvbWlzZSwgbWF5
YmVUaGVuYWJsZSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHZhciB0aGVuID0gZ2V0VGhlbihtYXli
ZVRoZW5hYmxlKTsKKworICAgICAgaWYgKHRoZW4gPT09IEdFVF9USEVOX0VSUk9SKSB7CisgICAg
ICAgIHJlamVjdChwcm9taXNlLCBHRVRfVEhFTl9FUlJPUi5lcnJvcik7CisgICAgICB9IGVsc2Ug
aWYgKHRoZW4gPT09IHVuZGVmaW5lZCkgeworICAgICAgICBmdWxmaWxsKHByb21pc2UsIG1heWJl
VGhlbmFibGUpOworICAgICAgfSBlbHNlIGlmIChfcnN2cFV0aWxzLmlzRnVuY3Rpb24odGhlbikp
IHsKKyAgICAgICAgaGFuZGxlRm9yZWlnblRoZW5hYmxlKHByb21pc2UsIG1heWJlVGhlbmFibGUs
IHRoZW4pOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZnVsZmlsbChwcm9taXNlLCBtYXliZVRo
ZW5hYmxlKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBmdW5jdGlvbiByZXNvbHZlKHByb21p
c2UsIHZhbHVlKSB7CisgICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB7CisgICAgICBmdWxmaWxs
KHByb21pc2UsIHZhbHVlKTsKKyAgICB9IGVsc2UgaWYgKF9yc3ZwVXRpbHMub2JqZWN0T3JGdW5j
dGlvbih2YWx1ZSkpIHsKKyAgICAgIGhhbmRsZU1heWJlVGhlbmFibGUocHJvbWlzZSwgdmFsdWUp
OworICAgIH0gZWxzZSB7CisgICAgICBmdWxmaWxsKHByb21pc2UsIHZhbHVlKTsKKyAgICB9Cisg
IH0KKworICBmdW5jdGlvbiBwdWJsaXNoUmVqZWN0aW9uKHByb21pc2UpIHsKKyAgICBpZiAocHJv
bWlzZS5fb25FcnJvcikgeworICAgICAgcHJvbWlzZS5fb25FcnJvcihwcm9taXNlLl9yZXN1bHQp
OworICAgIH0KKworICAgIHB1Ymxpc2gocHJvbWlzZSk7CisgIH0KKworICBmdW5jdGlvbiBmdWxm
aWxsKHByb21pc2UsIHZhbHVlKSB7CisgICAgaWYgKHByb21pc2UuX3N0YXRlICE9PSBQRU5ESU5H
KSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgcHJvbWlzZS5fcmVzdWx0ID0gdmFsdWU7
CisgICAgcHJvbWlzZS5fc3RhdGUgPSBGVUxGSUxMRUQ7CisKKyAgICBpZiAocHJvbWlzZS5fc3Vi
c2NyaWJlcnMubGVuZ3RoID09PSAwKSB7CisgICAgICBpZiAoX3JzdnBDb25maWcuY29uZmlnLmlu
c3RydW1lbnQpIHsKKyAgICAgICAgX3JzdnBJbnN0cnVtZW50LmRlZmF1bHQoJ2Z1bGZpbGxlZCcs
IHByb21pc2UpOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBfcnN2cENvbmZpZy5jb25m
aWcuYXN5bmMocHVibGlzaCwgcHJvbWlzZSk7CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gcmVq
ZWN0KHByb21pc2UsIHJlYXNvbikgeworICAgIGlmIChwcm9taXNlLl9zdGF0ZSAhPT0gUEVORElO
RykgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBwcm9taXNlLl9zdGF0ZSA9IFJFSkVDVEVE
OworICAgIHByb21pc2UuX3Jlc3VsdCA9IHJlYXNvbjsKKyAgICBfcnN2cENvbmZpZy5jb25maWcu
YXN5bmMocHVibGlzaFJlamVjdGlvbiwgcHJvbWlzZSk7CisgIH0KKworICBmdW5jdGlvbiBzdWJz
Y3JpYmUocGFyZW50LCBjaGlsZCwgb25GdWxmaWxsbWVudCwgb25SZWplY3Rpb24pIHsKKyAgICB2
YXIgc3Vic2NyaWJlcnMgPSBwYXJlbnQuX3N1YnNjcmliZXJzOworICAgIHZhciBsZW5ndGggPSBz
dWJzY3JpYmVycy5sZW5ndGg7CisKKyAgICBwYXJlbnQuX29uRXJyb3IgPSBudWxsOworCisgICAg
c3Vic2NyaWJlcnNbbGVuZ3RoXSA9IGNoaWxkOworICAgIHN1YnNjcmliZXJzW2xlbmd0aCArIEZV
TEZJTExFRF0gPSBvbkZ1bGZpbGxtZW50OworICAgIHN1YnNjcmliZXJzW2xlbmd0aCArIFJFSkVD
VEVEXSA9IG9uUmVqZWN0aW9uOworCisgICAgaWYgKGxlbmd0aCA9PT0gMCAmJiBwYXJlbnQuX3N0
YXRlKSB7CisgICAgICBfcnN2cENvbmZpZy5jb25maWcuYXN5bmMocHVibGlzaCwgcGFyZW50KTsK
KyAgICB9CisgIH0KKworICBmdW5jdGlvbiBwdWJsaXNoKHByb21pc2UpIHsKKyAgICB2YXIgc3Vi
c2NyaWJlcnMgPSBwcm9taXNlLl9zdWJzY3JpYmVyczsKKyAgICB2YXIgc2V0dGxlZCA9IHByb21p
c2UuX3N0YXRlOworCisgICAgaWYgKF9yc3ZwQ29uZmlnLmNvbmZpZy5pbnN0cnVtZW50KSB7Cisg
ICAgICBfcnN2cEluc3RydW1lbnQuZGVmYXVsdChzZXR0bGVkID09PSBGVUxGSUxMRUQgPyAnZnVs
ZmlsbGVkJyA6ICdyZWplY3RlZCcsIHByb21pc2UpOworICAgIH0KKworICAgIGlmIChzdWJzY3Jp
YmVycy5sZW5ndGggPT09IDApIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2YXIgY2hp
bGQsCisgICAgICAgIGNhbGxiYWNrLAorICAgICAgICBkZXRhaWwgPSBwcm9taXNlLl9yZXN1bHQ7
CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN1YnNjcmliZXJzLmxlbmd0aDsgaSArPSAzKSB7
CisgICAgICBjaGlsZCA9IHN1YnNjcmliZXJzW2ldOworICAgICAgY2FsbGJhY2sgPSBzdWJzY3Jp
YmVyc1tpICsgc2V0dGxlZF07CisKKyAgICAgIGlmIChjaGlsZCkgeworICAgICAgICBpbnZva2VD
YWxsYmFjayhzZXR0bGVkLCBjaGlsZCwgY2FsbGJhY2ssIGRldGFpbCk7CisgICAgICB9IGVsc2Ug
eworICAgICAgICBjYWxsYmFjayhkZXRhaWwpOworICAgICAgfQorICAgIH0KKworICAgIHByb21p
c2UuX3N1YnNjcmliZXJzLmxlbmd0aCA9IDA7CisgIH0KKworICBmdW5jdGlvbiBFcnJvck9iamVj
dCgpIHsKKyAgICB0aGlzLmVycm9yID0gbnVsbDsKKyAgfQorCisgIHZhciBUUllfQ0FUQ0hfRVJS
T1IgPSBuZXcgRXJyb3JPYmplY3QoKTsKKworICBmdW5jdGlvbiB0cnlDYXRjaChjYWxsYmFjaywg
ZGV0YWlsKSB7CisgICAgdHJ5IHsKKyAgICAgIHJldHVybiBjYWxsYmFjayhkZXRhaWwpOworICAg
IH0gY2F0Y2ggKGUpIHsKKyAgICAgIFRSWV9DQVRDSF9FUlJPUi5lcnJvciA9IGU7CisgICAgICBy
ZXR1cm4gVFJZX0NBVENIX0VSUk9SOworICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIGludm9rZUNh
bGxiYWNrKHNldHRsZWQsIHByb21pc2UsIGNhbGxiYWNrLCBkZXRhaWwpIHsKKyAgICB2YXIgaGFz
Q2FsbGJhY2sgPSBfcnN2cFV0aWxzLmlzRnVuY3Rpb24oY2FsbGJhY2spLAorICAgICAgICB2YWx1
ZSwKKyAgICAgICAgZXJyb3IsCisgICAgICAgIHN1Y2NlZWRlZCwKKyAgICAgICAgZmFpbGVkOwor
CisgICAgaWYgKGhhc0NhbGxiYWNrKSB7CisgICAgICB2YWx1ZSA9IHRyeUNhdGNoKGNhbGxiYWNr
LCBkZXRhaWwpOworCisgICAgICBpZiAodmFsdWUgPT09IFRSWV9DQVRDSF9FUlJPUikgeworICAg
ICAgICBmYWlsZWQgPSB0cnVlOworICAgICAgICBlcnJvciA9IHZhbHVlLmVycm9yOworICAgICAg
ICB2YWx1ZSA9IG51bGw7CisgICAgICB9IGVsc2UgeworICAgICAgICBzdWNjZWVkZWQgPSB0cnVl
OworICAgICAgfQorCisgICAgICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHsKKyAgICAgICAgcmVq
ZWN0KHByb21pc2UsIHdpdGhPd25Qcm9taXNlKCkpOworICAgICAgICByZXR1cm47CisgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgIHZhbHVlID0gZGV0YWlsOworICAgICAgc3VjY2VlZGVkID0g
dHJ1ZTsKKyAgICB9CisKKyAgICBpZiAocHJvbWlzZS5fc3RhdGUgIT09IFBFTkRJTkcpIHsKKyAg
ICAgIC8vIG5vb3AKKyAgICB9IGVsc2UgaWYgKGhhc0NhbGxiYWNrICYmIHN1Y2NlZWRlZCkgewor
ICAgICAgICByZXNvbHZlKHByb21pc2UsIHZhbHVlKTsKKyAgICAgIH0gZWxzZSBpZiAoZmFpbGVk
KSB7CisgICAgICAgIHJlamVjdChwcm9taXNlLCBlcnJvcik7CisgICAgICB9IGVsc2UgaWYgKHNl
dHRsZWQgPT09IEZVTEZJTExFRCkgeworICAgICAgICBmdWxmaWxsKHByb21pc2UsIHZhbHVlKTsK
KyAgICAgIH0gZWxzZSBpZiAoc2V0dGxlZCA9PT0gUkVKRUNURUQpIHsKKyAgICAgICAgcmVqZWN0
KHByb21pc2UsIHZhbHVlKTsKKyAgICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIGluaXRpYWxpemVQ
cm9taXNlKHByb21pc2UsIHJlc29sdmVyKSB7CisgICAgdmFyIHJlc29sdmVkID0gZmFsc2U7Cisg
ICAgdHJ5IHsKKyAgICAgIHJlc29sdmVyKGZ1bmN0aW9uIHJlc29sdmVQcm9taXNlKHZhbHVlKSB7
CisgICAgICAgIGlmIChyZXNvbHZlZCkgeworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICByZXNvbHZlZCA9IHRydWU7CisgICAgICAgIHJlc29sdmUocHJvbWlzZSwgdmFsdWUp
OworICAgICAgfSwgZnVuY3Rpb24gcmVqZWN0UHJvbWlzZShyZWFzb24pIHsKKyAgICAgICAgaWYg
KHJlc29sdmVkKSB7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHJlc29s
dmVkID0gdHJ1ZTsKKyAgICAgICAgcmVqZWN0KHByb21pc2UsIHJlYXNvbik7CisgICAgICB9KTsK
KyAgICB9IGNhdGNoIChlKSB7CisgICAgICByZWplY3QocHJvbWlzZSwgZSk7CisgICAgfQorICB9
CisKKyAgZXhwb3J0cy5ub29wID0gbm9vcDsKKyAgZXhwb3J0cy5yZXNvbHZlID0gcmVzb2x2ZTsK
KyAgZXhwb3J0cy5yZWplY3QgPSByZWplY3Q7CisgIGV4cG9ydHMuZnVsZmlsbCA9IGZ1bGZpbGw7
CisgIGV4cG9ydHMuc3Vic2NyaWJlID0gc3Vic2NyaWJlOworICBleHBvcnRzLnB1Ymxpc2ggPSBw
dWJsaXNoOworICBleHBvcnRzLnB1Ymxpc2hSZWplY3Rpb24gPSBwdWJsaXNoUmVqZWN0aW9uOwor
ICBleHBvcnRzLmluaXRpYWxpemVQcm9taXNlID0gaW5pdGlhbGl6ZVByb21pc2U7CisgIGV4cG9y
dHMuaW52b2tlQ2FsbGJhY2sgPSBpbnZva2VDYWxsYmFjazsKKyAgZXhwb3J0cy5GVUxGSUxMRUQg
PSBGVUxGSUxMRUQ7CisgIGV4cG9ydHMuUkVKRUNURUQgPSBSRUpFQ1RFRDsKKyAgZXhwb3J0cy5Q
RU5ESU5HID0gUEVORElORzsKK30pOworZW5pZmVkKCdyc3ZwL2FsbC1zZXR0bGVkJywgWydleHBv
cnRzJywgJ3JzdnAvZW51bWVyYXRvcicsICdyc3ZwL3Byb21pc2UnLCAncnN2cC91dGlscyddLCBm
dW5jdGlvbiAoZXhwb3J0cywgX3JzdnBFbnVtZXJhdG9yLCBfcnN2cFByb21pc2UsIF9yc3ZwVXRp
bHMpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIGV4cG9ydHMuZGVmYXVsdCA9IGFsbFNldHRsZWQ7
CisKKyAgZnVuY3Rpb24gQWxsU2V0dGxlZChDb25zdHJ1Y3RvciwgZW50cmllcywgbGFiZWwpIHsK
KyAgICB0aGlzLl9zdXBlckNvbnN0cnVjdG9yKENvbnN0cnVjdG9yLCBlbnRyaWVzLCBmYWxzZSwg
LyogZG9uJ3QgYWJvcnQgb24gcmVqZWN0ICovbGFiZWwpOworICB9CisKKyAgQWxsU2V0dGxlZC5w
cm90b3R5cGUgPSBfcnN2cFV0aWxzLm9fY3JlYXRlKF9yc3ZwRW51bWVyYXRvci5kZWZhdWx0LnBy
b3RvdHlwZSk7CisgIEFsbFNldHRsZWQucHJvdG90eXBlLl9zdXBlckNvbnN0cnVjdG9yID0gX3Jz
dnBFbnVtZXJhdG9yLmRlZmF1bHQ7CisgIEFsbFNldHRsZWQucHJvdG90eXBlLl9tYWtlUmVzdWx0
ID0gX3JzdnBFbnVtZXJhdG9yLm1ha2VTZXR0bGVkUmVzdWx0OworICBBbGxTZXR0bGVkLnByb3Rv
dHlwZS5fdmFsaWRhdGlvbkVycm9yID0gZnVuY3Rpb24gKCkgeworICAgIHJldHVybiBuZXcgRXJy
b3IoJ2FsbFNldHRsZWQgbXVzdCBiZSBjYWxsZWQgd2l0aCBhbiBhcnJheScpOworICB9OworCisg
IC8qKgorICAgIGBSU1ZQLmFsbFNldHRsZWRgIGlzIHNpbWlsYXIgdG8gYFJTVlAuYWxsYCwgYnV0
IGluc3RlYWQgb2YgaW1wbGVtZW50aW5nCisgICAgYSBmYWlsLWZhc3QgbWV0aG9kLCBpdCB3YWl0
cyB1bnRpbCBhbGwgdGhlIHByb21pc2VzIGhhdmUgcmV0dXJuZWQgYW5kCisgICAgc2hvd3MgeW91
IGFsbCB0aGUgcmVzdWx0cy4gVGhpcyBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gaGFuZGxlIG11
bHRpcGxlCisgICAgcHJvbWlzZXMnIGZhaWx1cmUgc3RhdGVzIHRvZ2V0aGVyIGFzIGEgc2V0Lgor
ICAKKyAgICBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCB3aGVuIGFsbCB0aGUg
Z2l2ZW4gcHJvbWlzZXMgaGF2ZSBiZWVuCisgICAgc2V0dGxlZC4gVGhlIHJldHVybiBwcm9taXNl
IGlzIGZ1bGZpbGxlZCB3aXRoIGFuIGFycmF5IG9mIHRoZSBzdGF0ZXMgb2YKKyAgICB0aGUgcHJv
bWlzZXMgcGFzc2VkIGludG8gdGhlIGBwcm9taXNlc2AgYXJyYXkgYXJndW1lbnQuCisgIAorICAg
IEVhY2ggc3RhdGUgb2JqZWN0IHdpbGwgZWl0aGVyIGluZGljYXRlIGZ1bGZpbGxtZW50IG9yIHJl
amVjdGlvbiwgYW5kCisgICAgcHJvdmlkZSB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBvciByZWFz
b24uIFRoZSBzdGF0ZXMgd2lsbCB0YWtlIG9uZSBvZgorICAgIHRoZSBmb2xsb3dpbmcgZm9ybWF0
czoKKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIHsgc3RhdGU6ICdmdWxmaWxsZWQnLCB2YWx1
ZTogdmFsdWUgfQorICAgICAgb3IKKyAgICB7IHN0YXRlOiAncmVqZWN0ZWQnLCByZWFzb246IHJl
YXNvbiB9CisgICAgYGBgCisgIAorICAgIEV4YW1wbGU6CisgIAorICAgIGBgYGphdmFzY3JpcHQK
KyAgICB2YXIgcHJvbWlzZTEgPSBSU1ZQLlByb21pc2UucmVzb2x2ZSgxKTsKKyAgICB2YXIgcHJv
bWlzZTIgPSBSU1ZQLlByb21pc2UucmVqZWN0KG5ldyBFcnJvcignMicpKTsKKyAgICB2YXIgcHJv
bWlzZTMgPSBSU1ZQLlByb21pc2UucmVqZWN0KG5ldyBFcnJvcignMycpKTsKKyAgICB2YXIgcHJv
bWlzZXMgPSBbIHByb21pc2UxLCBwcm9taXNlMiwgcHJvbWlzZTMgXTsKKyAgCisgICAgUlNWUC5h
bGxTZXR0bGVkKHByb21pc2VzKS50aGVuKGZ1bmN0aW9uKGFycmF5KXsKKyAgICAgIC8vIGFycmF5
ID09IFsKKyAgICAgIC8vICAgeyBzdGF0ZTogJ2Z1bGZpbGxlZCcsIHZhbHVlOiAxIH0sCisgICAg
ICAvLyAgIHsgc3RhdGU6ICdyZWplY3RlZCcsIHJlYXNvbjogRXJyb3IgfSwKKyAgICAgIC8vICAg
eyBzdGF0ZTogJ3JlamVjdGVkJywgcmVhc29uOiBFcnJvciB9CisgICAgICAvLyBdCisgICAgICAv
LyBOb3RlIHRoYXQgZm9yIHRoZSBzZWNvbmQgaXRlbSwgcmVhc29uLm1lc3NhZ2Ugd2lsbCBiZSAn
MicsIGFuZCBmb3IgdGhlCisgICAgICAvLyB0aGlyZCBpdGVtLCByZWFzb24ubWVzc2FnZSB3aWxs
IGJlICczJy4KKyAgICB9LCBmdW5jdGlvbihlcnJvcikgeworICAgICAgLy8gTm90IHJ1bi4gKFRo
aXMgYmxvY2sgd291bGQgb25seSBiZSBjYWxsZWQgaWYgYWxsU2V0dGxlZCBoYWQgZmFpbGVkLAor
ICAgICAgLy8gZm9yIGluc3RhbmNlIGlmIHBhc3NlZCBhbiBpbmNvcnJlY3QgYXJndW1lbnQgdHlw
ZS4pCisgICAgfSk7CisgICAgYGBgCisgIAorICAgIEBtZXRob2QgYWxsU2V0dGxlZAorICAgIEBz
dGF0aWMKKyAgICBAZm9yIFJTVlAKKyAgICBAcGFyYW0ge0FycmF5fSBlbnRyaWVzCisgICAgQHBh
cmFtIHtTdHJpbmd9IGxhYmVsIC0gb3B0aW9uYWwgc3RyaW5nIHRoYXQgZGVzY3JpYmVzIHRoZSBw
cm9taXNlLgorICAgIFVzZWZ1bCBmb3IgdG9vbGluZy4KKyAgICBAcmV0dXJuIHtQcm9taXNlfSBw
cm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdpdGggYW4gYXJyYXkgb2YgdGhlIHNldHRsZWQKKyAg
ICBzdGF0ZXMgb2YgdGhlIGNvbnN0aXR1ZW50IHByb21pc2VzLgorICAqLworCisgIGZ1bmN0aW9u
IGFsbFNldHRsZWQoZW50cmllcywgbGFiZWwpIHsKKyAgICByZXR1cm4gbmV3IEFsbFNldHRsZWQo
X3JzdnBQcm9taXNlLmRlZmF1bHQsIGVudHJpZXMsIGxhYmVsKS5wcm9taXNlOworICB9Cit9KTsK
K2VuaWZlZCgicnN2cC9hbGwiLCBbImV4cG9ydHMiLCAicnN2cC9wcm9taXNlIl0sIGZ1bmN0aW9u
IChleHBvcnRzLCBfcnN2cFByb21pc2UpIHsKKyAgInVzZSBzdHJpY3QiOworCisgIGV4cG9ydHMu
ZGVmYXVsdCA9IGFsbDsKKworICAvKioKKyAgICBUaGlzIGlzIGEgY29udmVuaWVudCBhbGlhcyBm
b3IgYFJTVlAuUHJvbWlzZS5hbGxgLgorICAKKyAgICBAbWV0aG9kIGFsbAorICAgIEBzdGF0aWMK
KyAgICBAZm9yIFJTVlAKKyAgICBAcGFyYW0ge0FycmF5fSBhcnJheSBBcnJheSBvZiBwcm9taXNl
cy4KKyAgICBAcGFyYW0ge1N0cmluZ30gbGFiZWwgQW4gb3B0aW9uYWwgbGFiZWwuIFRoaXMgaXMg
dXNlZnVsCisgICAgZm9yIHRvb2xpbmcuCisgICovCisKKyAgZnVuY3Rpb24gYWxsKGFycmF5LCBs
YWJlbCkgeworICAgIHJldHVybiBfcnN2cFByb21pc2UuZGVmYXVsdC5hbGwoYXJyYXksIGxhYmVs
KTsKKyAgfQorfSk7CitlbmlmZWQoJ3JzdnAvYXNhcCcsIFsnZXhwb3J0cyddLCBmdW5jdGlvbiAo
ZXhwb3J0cykgeworICAndXNlIHN0cmljdCc7CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gYXNhcDsK
KyAgdmFyIGxlbiA9IDA7CisgIHZhciB0b1N0cmluZyA9ICh7fSkudG9TdHJpbmc7CisgIHZhciB2
ZXJ0eE5leHQ7CisKKyAgZnVuY3Rpb24gYXNhcChjYWxsYmFjaywgYXJnKSB7CisgICAgcXVldWVb
bGVuXSA9IGNhbGxiYWNrOworICAgIHF1ZXVlW2xlbiArIDFdID0gYXJnOworICAgIGxlbiArPSAy
OworICAgIGlmIChsZW4gPT09IDIpIHsKKyAgICAgIC8vIElmIGxlbiBpcyAxLCB0aGF0IG1lYW5z
IHRoYXQgd2UgbmVlZCB0byBzY2hlZHVsZSBhbiBhc3luYyBmbHVzaC4KKyAgICAgIC8vIElmIGFk
ZGl0aW9uYWwgY2FsbGJhY2tzIGFyZSBxdWV1ZWQgYmVmb3JlIHRoZSBxdWV1ZSBpcyBmbHVzaGVk
LCB0aGV5CisgICAgICAvLyB3aWxsIGJlIHByb2Nlc3NlZCBieSB0aGlzIGZsdXNoIHRoYXQgd2Ug
YXJlIHNjaGVkdWxpbmcuCisgICAgICBzY2hlZHVsZUZsdXNoKCk7CisgICAgfQorICB9CisKKyAg
dmFyIGJyb3dzZXJXaW5kb3cgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRv
dyA6IHVuZGVmaW5lZDsKKyAgdmFyIGJyb3dzZXJHbG9iYWwgPSBicm93c2VyV2luZG93IHx8IHt9
OworICB2YXIgQnJvd3Nlck11dGF0aW9uT2JzZXJ2ZXIgPSBicm93c2VyR2xvYmFsLk11dGF0aW9u
T2JzZXJ2ZXIgfHwgYnJvd3Nlckdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyOworICB2YXIg
aXNOb2RlID0gdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHByb2Nlc3Mg
IT09ICd1bmRlZmluZWQnICYmICh7fSkudG9TdHJpbmcuY2FsbChwcm9jZXNzKSA9PT0gJ1tvYmpl
Y3QgcHJvY2Vzc10nOworCisgIC8vIHRlc3QgZm9yIHdlYiB3b3JrZXIgYnV0IG5vdCBpbiBJRTEw
CisgIHZhciBpc1dvcmtlciA9IHR5cGVvZiBVaW50OENsYW1wZWRBcnJheSAhPT0gJ3VuZGVmaW5l
ZCcgJiYgdHlwZW9mIGltcG9ydFNjcmlwdHMgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBNZXNz
YWdlQ2hhbm5lbCAhPT0gJ3VuZGVmaW5lZCc7CisKKyAgLy8gbm9kZQorICBmdW5jdGlvbiB1c2VO
ZXh0VGljaygpIHsKKyAgICB2YXIgbmV4dFRpY2sgPSBwcm9jZXNzLm5leHRUaWNrOworICAgIC8v
IG5vZGUgdmVyc2lvbiAwLjEwLnggZGlzcGxheXMgYSBkZXByZWNhdGlvbiB3YXJuaW5nIHdoZW4g
bmV4dFRpY2sgaXMgdXNlZCByZWN1cnNpdmVseQorICAgIC8vIHNldEltbWVkaWF0ZSBzaG91bGQg
YmUgdXNlZCBpbnN0ZWFkIGluc3RlYWQKKyAgICB2YXIgdmVyc2lvbiA9IHByb2Nlc3MudmVyc2lv
bnMubm9kZS5tYXRjaCgvXig/OihcZCspXC4pPyg/OihcZCspXC4pPyhcKnxcZCspJC8pOworICAg
IGlmIChBcnJheS5pc0FycmF5KHZlcnNpb24pICYmIHZlcnNpb25bMV0gPT09ICcwJyAmJiB2ZXJz
aW9uWzJdID09PSAnMTAnKSB7CisgICAgICBuZXh0VGljayA9IHNldEltbWVkaWF0ZTsKKyAgICB9
CisgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsKKyAgICAgIG5leHRUaWNrKGZsdXNoKTsKKyAgICB9
OworICB9CisKKyAgLy8gdmVydHgKKyAgZnVuY3Rpb24gdXNlVmVydHhUaW1lcigpIHsKKyAgICBy
ZXR1cm4gZnVuY3Rpb24gKCkgeworICAgICAgdmVydHhOZXh0KGZsdXNoKTsKKyAgICB9OworICB9
CisKKyAgZnVuY3Rpb24gdXNlTXV0YXRpb25PYnNlcnZlcigpIHsKKyAgICB2YXIgaXRlcmF0aW9u
cyA9IDA7CisgICAgdmFyIG9ic2VydmVyID0gbmV3IEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyKGZs
dXNoKTsKKyAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTsKKyAgICBv
YnNlcnZlci5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTsKKworICAgIHJl
dHVybiBmdW5jdGlvbiAoKSB7CisgICAgICBub2RlLmRhdGEgPSBpdGVyYXRpb25zID0gKytpdGVy
YXRpb25zICUgMjsKKyAgICB9OworICB9CisKKyAgLy8gd2ViIHdvcmtlcgorICBmdW5jdGlvbiB1
c2VNZXNzYWdlQ2hhbm5lbCgpIHsKKyAgICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5l
bCgpOworICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gZmx1c2g7CisgICAgcmV0dXJuIGZ1
bmN0aW9uICgpIHsKKyAgICAgIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoMCk7CisgICAgfTsK
KyAgfQorCisgIGZ1bmN0aW9uIHVzZVNldFRpbWVvdXQoKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9u
ICgpIHsKKyAgICAgIHNldFRpbWVvdXQoZmx1c2gsIDEpOworICAgIH07CisgIH0KKworICB2YXIg
cXVldWUgPSBuZXcgQXJyYXkoMTAwMCk7CisgIGZ1bmN0aW9uIGZsdXNoKCkgeworICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpIHsKKyAgICAgIHZhciBjYWxsYmFjayA9IHF1ZXVl
W2ldOworICAgICAgdmFyIGFyZyA9IHF1ZXVlW2kgKyAxXTsKKworICAgICAgY2FsbGJhY2soYXJn
KTsKKworICAgICAgcXVldWVbaV0gPSB1bmRlZmluZWQ7CisgICAgICBxdWV1ZVtpICsgMV0gPSB1
bmRlZmluZWQ7CisgICAgfQorCisgICAgbGVuID0gMDsKKyAgfQorCisgIGZ1bmN0aW9uIGF0dGVt
cHRWZXJ0ZXgoKSB7CisgICAgdHJ5IHsKKyAgICAgIHZhciByID0gcmVxdWlyZTsKKyAgICAgIHZh
ciB2ZXJ0eCA9IHIoJ3ZlcnR4Jyk7CisgICAgICB2ZXJ0eE5leHQgPSB2ZXJ0eC5ydW5Pbkxvb3Ag
fHwgdmVydHgucnVuT25Db250ZXh0OworICAgICAgcmV0dXJuIHVzZVZlcnR4VGltZXIoKTsKKyAg
ICB9IGNhdGNoIChlKSB7CisgICAgICByZXR1cm4gdXNlU2V0VGltZW91dCgpOworICAgIH0KKyAg
fQorCisgIHZhciBzY2hlZHVsZUZsdXNoOworICAvLyBEZWNpZGUgd2hhdCBhc3luYyBtZXRob2Qg
dG8gdXNlIHRvIHRyaWdnZXJpbmcgcHJvY2Vzc2luZyBvZiBxdWV1ZWQgY2FsbGJhY2tzOgorICBp
ZiAoaXNOb2RlKSB7CisgICAgc2NoZWR1bGVGbHVzaCA9IHVzZU5leHRUaWNrKCk7CisgIH0gZWxz
ZSBpZiAoQnJvd3Nlck11dGF0aW9uT2JzZXJ2ZXIpIHsKKyAgICBzY2hlZHVsZUZsdXNoID0gdXNl
TXV0YXRpb25PYnNlcnZlcigpOworICB9IGVsc2UgaWYgKGlzV29ya2VyKSB7CisgICAgc2NoZWR1
bGVGbHVzaCA9IHVzZU1lc3NhZ2VDaGFubmVsKCk7CisgIH0gZWxzZSBpZiAoYnJvd3NlcldpbmRv
dyA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nKSB7CisgICAg
c2NoZWR1bGVGbHVzaCA9IGF0dGVtcHRWZXJ0ZXgoKTsKKyAgfSBlbHNlIHsKKyAgICBzY2hlZHVs
ZUZsdXNoID0gdXNlU2V0VGltZW91dCgpOworICB9Cit9KTsKK2VuaWZlZCgncnN2cC9jb25maWcn
LCBbJ2V4cG9ydHMnLCAncnN2cC9ldmVudHMnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9yc3ZwRXZl
bnRzKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICB2YXIgY29uZmlnID0geworICAgIGluc3RydW1l
bnQ6IGZhbHNlCisgIH07CisKKyAgX3JzdnBFdmVudHMuZGVmYXVsdFsnbWl4aW4nXShjb25maWcp
OworCisgIGZ1bmN0aW9uIGNvbmZpZ3VyZShuYW1lLCB2YWx1ZSkgeworICAgIGlmIChuYW1lID09
PSAnb25lcnJvcicpIHsKKyAgICAgIC8vIGhhbmRsZSBmb3IgbGVnYWN5IHVzZXJzIHRoYXQgZXhw
ZWN0IHRoZSBhY3R1YWwKKyAgICAgIC8vIGVycm9yIHRvIGJlIHBhc3NlZCB0byB0aGVpciBmdW5j
dGlvbiBhZGRlZCB2aWEKKyAgICAgIC8vIGBSU1ZQLmNvbmZpZ3VyZSgnb25lcnJvcicsIHNvbWVG
dW5jdGlvbkhlcmUpO2AKKyAgICAgIGNvbmZpZ1snb24nXSgnZXJyb3InLCB2YWx1ZSk7CisgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHsKKyAg
ICAgIGNvbmZpZ1tuYW1lXSA9IHZhbHVlOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gY29u
ZmlnW25hbWVdOworICAgIH0KKyAgfQorCisgIGV4cG9ydHMuY29uZmlnID0gY29uZmlnOworICBl
eHBvcnRzLmNvbmZpZ3VyZSA9IGNvbmZpZ3VyZTsKK30pOworZW5pZmVkKCdyc3ZwL2RlZmVyJywg
WydleHBvcnRzJywgJ3JzdnAvcHJvbWlzZSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX3JzdnBQcm9t
aXNlKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICBleHBvcnRzLmRlZmF1bHQgPSBkZWZlcjsKKwor
ICAvKioKKyAgICBgUlNWUC5kZWZlcmAgcmV0dXJucyBhbiBvYmplY3Qgc2ltaWxhciB0byBqUXVl
cnkncyBgJC5EZWZlcnJlZGAuCisgICAgYFJTVlAuZGVmZXJgIHNob3VsZCBiZSB1c2VkIHdoZW4g
cG9ydGluZyBvdmVyIGNvZGUgcmVsaWFudCBvbiBgJC5EZWZlcnJlZGAncworICAgIGludGVyZmFj
ZS4gTmV3IGNvZGUgc2hvdWxkIHVzZSB0aGUgYFJTVlAuUHJvbWlzZWAgY29uc3RydWN0b3IgaW5z
dGVhZC4KKyAgCisgICAgVGhlIG9iamVjdCByZXR1cm5lZCBmcm9tIGBSU1ZQLmRlZmVyYCBpcyBh
IHBsYWluIG9iamVjdCB3aXRoIHRocmVlIHByb3BlcnRpZXM6CisgIAorICAgICogcHJvbWlzZSAt
IGFuIGBSU1ZQLlByb21pc2VgLgorICAgICogcmVqZWN0IC0gYSBmdW5jdGlvbiB0aGF0IGNhdXNl
cyB0aGUgYHByb21pc2VgIHByb3BlcnR5IG9uIHRoaXMgb2JqZWN0IHRvCisgICAgICBiZWNvbWUg
cmVqZWN0ZWQKKyAgICAqIHJlc29sdmUgLSBhIGZ1bmN0aW9uIHRoYXQgY2F1c2VzIHRoZSBgcHJv
bWlzZWAgcHJvcGVydHkgb24gdGhpcyBvYmplY3QgdG8KKyAgICAgIGJlY29tZSBmdWxmaWxsZWQu
CisgIAorICAgIEV4YW1wbGU6CisgIAorICAgICBgYGBqYXZhc2NyaXB0CisgICAgIHZhciBkZWZl
cnJlZCA9IFJTVlAuZGVmZXIoKTsKKyAgCisgICAgIGRlZmVycmVkLnJlc29sdmUoIlN1Y2Nlc3Mh
Iik7CisgIAorICAgICBkZWZlcnJlZC5wcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpeworICAg
ICAgIC8vIHZhbHVlIGhlcmUgaXMgIlN1Y2Nlc3MhIgorICAgICB9KTsKKyAgICAgYGBgCisgIAor
ICAgIEBtZXRob2QgZGVmZXIKKyAgICBAc3RhdGljCisgICAgQGZvciBSU1ZQCisgICAgQHBhcmFt
IHtTdHJpbmd9IGxhYmVsIG9wdGlvbmFsIHN0cmluZyBmb3IgbGFiZWxpbmcgdGhlIHByb21pc2Uu
CisgICAgVXNlZnVsIGZvciB0b29saW5nLgorICAgIEByZXR1cm4ge09iamVjdH0KKyAgICovCisK
KyAgZnVuY3Rpb24gZGVmZXIobGFiZWwpIHsKKyAgICB2YXIgZGVmZXJyZWQgPSB7fTsKKworICAg
IGRlZmVycmVkWydwcm9taXNlJ10gPSBuZXcgX3JzdnBQcm9taXNlLmRlZmF1bHQoZnVuY3Rpb24g
KHJlc29sdmUsIHJlamVjdCkgeworICAgICAgZGVmZXJyZWRbJ3Jlc29sdmUnXSA9IHJlc29sdmU7
CisgICAgICBkZWZlcnJlZFsncmVqZWN0J10gPSByZWplY3Q7CisgICAgfSwgbGFiZWwpOworCisg
ICAgcmV0dXJuIGRlZmVycmVkOworICB9Cit9KTsKK2VuaWZlZCgncnN2cC9lbnVtZXJhdG9yJywg
WydleHBvcnRzJywgJ3JzdnAvdXRpbHMnLCAncnN2cC8taW50ZXJuYWwnXSwgZnVuY3Rpb24gKGV4
cG9ydHMsIF9yc3ZwVXRpbHMsIF9yc3ZwSW50ZXJuYWwpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisg
IGV4cG9ydHMubWFrZVNldHRsZWRSZXN1bHQgPSBtYWtlU2V0dGxlZFJlc3VsdDsKKworICBmdW5j
dGlvbiBtYWtlU2V0dGxlZFJlc3VsdChzdGF0ZSwgcG9zaXRpb24sIHZhbHVlKSB7CisgICAgaWYg
KHN0YXRlID09PSBfcnN2cEludGVybmFsLkZVTEZJTExFRCkgeworICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgc3RhdGU6ICdmdWxmaWxsZWQnLAorICAgICAgICB2YWx1ZTogdmFsdWUKKyAgICAgIH07
CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiB7CisgICAgICAgIHN0YXRlOiAncmVqZWN0ZWQn
LAorICAgICAgICByZWFzb246IHZhbHVlCisgICAgICB9OworICAgIH0KKyAgfQorCisgIGZ1bmN0
aW9uIEVudW1lcmF0b3IoQ29uc3RydWN0b3IsIGlucHV0LCBhYm9ydE9uUmVqZWN0LCBsYWJlbCkg
eworICAgIHZhciBlbnVtZXJhdG9yID0gdGhpczsKKworICAgIGVudW1lcmF0b3IuX2luc3RhbmNl
Q29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcjsKKyAgICBlbnVtZXJhdG9yLnByb21pc2UgPSBuZXcg
Q29uc3RydWN0b3IoX3JzdnBJbnRlcm5hbC5ub29wLCBsYWJlbCk7CisgICAgZW51bWVyYXRvci5f
YWJvcnRPblJlamVjdCA9IGFib3J0T25SZWplY3Q7CisKKyAgICBpZiAoZW51bWVyYXRvci5fdmFs
aWRhdGVJbnB1dChpbnB1dCkpIHsKKyAgICAgIGVudW1lcmF0b3IuX2lucHV0ID0gaW5wdXQ7Cisg
ICAgICBlbnVtZXJhdG9yLmxlbmd0aCA9IGlucHV0Lmxlbmd0aDsKKyAgICAgIGVudW1lcmF0b3Iu
X3JlbWFpbmluZyA9IGlucHV0Lmxlbmd0aDsKKworICAgICAgZW51bWVyYXRvci5faW5pdCgpOwor
CisgICAgICBpZiAoZW51bWVyYXRvci5sZW5ndGggPT09IDApIHsKKyAgICAgICAgX3JzdnBJbnRl
cm5hbC5mdWxmaWxsKGVudW1lcmF0b3IucHJvbWlzZSwgZW51bWVyYXRvci5fcmVzdWx0KTsKKyAg
ICAgIH0gZWxzZSB7CisgICAgICAgIGVudW1lcmF0b3IubGVuZ3RoID0gZW51bWVyYXRvci5sZW5n
dGggfHwgMDsKKyAgICAgICAgZW51bWVyYXRvci5fZW51bWVyYXRlKCk7CisgICAgICAgIGlmIChl
bnVtZXJhdG9yLl9yZW1haW5pbmcgPT09IDApIHsKKyAgICAgICAgICBfcnN2cEludGVybmFsLmZ1
bGZpbGwoZW51bWVyYXRvci5wcm9taXNlLCBlbnVtZXJhdG9yLl9yZXN1bHQpOworICAgICAgICB9
CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIF9yc3ZwSW50ZXJuYWwucmVqZWN0KGVudW1l
cmF0b3IucHJvbWlzZSwgZW51bWVyYXRvci5fdmFsaWRhdGlvbkVycm9yKCkpOworICAgIH0KKyAg
fQorCisgIGV4cG9ydHMuZGVmYXVsdCA9IEVudW1lcmF0b3I7CisKKyAgRW51bWVyYXRvci5wcm90
b3R5cGUuX3ZhbGlkYXRlSW5wdXQgPSBmdW5jdGlvbiAoaW5wdXQpIHsKKyAgICByZXR1cm4gX3Jz
dnBVdGlscy5pc0FycmF5KGlucHV0KTsKKyAgfTsKKworICBFbnVtZXJhdG9yLnByb3RvdHlwZS5f
dmFsaWRhdGlvbkVycm9yID0gZnVuY3Rpb24gKCkgeworICAgIHJldHVybiBuZXcgRXJyb3IoJ0Fy
cmF5IE1ldGhvZHMgbXVzdCBiZSBwcm92aWRlZCBhbiBBcnJheScpOworICB9OworCisgIEVudW1l
cmF0b3IucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gKCkgeworICAgIHRoaXMuX3Jlc3VsdCA9
IG5ldyBBcnJheSh0aGlzLmxlbmd0aCk7CisgIH07CisKKyAgRW51bWVyYXRvci5wcm90b3R5cGUu
X2VudW1lcmF0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgZW51bWVyYXRvciA9IHRoaXM7Cisg
ICAgdmFyIGxlbmd0aCA9IGVudW1lcmF0b3IubGVuZ3RoOworICAgIHZhciBwcm9taXNlID0gZW51
bWVyYXRvci5wcm9taXNlOworICAgIHZhciBpbnB1dCA9IGVudW1lcmF0b3IuX2lucHV0OworCisg
ICAgZm9yICh2YXIgaSA9IDA7IHByb21pc2UuX3N0YXRlID09PSBfcnN2cEludGVybmFsLlBFTkRJ
TkcgJiYgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICBlbnVtZXJhdG9yLl9lYWNoRW50cnkoaW5w
dXRbaV0sIGkpOworICAgIH0KKyAgfTsKKworICBFbnVtZXJhdG9yLnByb3RvdHlwZS5fZWFjaEVu
dHJ5ID0gZnVuY3Rpb24gKGVudHJ5LCBpKSB7CisgICAgdmFyIGVudW1lcmF0b3IgPSB0aGlzOwor
ICAgIHZhciBjID0gZW51bWVyYXRvci5faW5zdGFuY2VDb25zdHJ1Y3RvcjsKKyAgICBpZiAoX3Jz
dnBVdGlscy5pc01heWJlVGhlbmFibGUoZW50cnkpKSB7CisgICAgICBpZiAoZW50cnkuY29uc3Ry
dWN0b3IgPT09IGMgJiYgZW50cnkuX3N0YXRlICE9PSBfcnN2cEludGVybmFsLlBFTkRJTkcpIHsK
KyAgICAgICAgZW50cnkuX29uRXJyb3IgPSBudWxsOworICAgICAgICBlbnVtZXJhdG9yLl9zZXR0
bGVkQXQoZW50cnkuX3N0YXRlLCBpLCBlbnRyeS5fcmVzdWx0KTsKKyAgICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVudW1lcmF0b3IuX3dpbGxTZXR0bGVBdChjLnJlc29sdmUoZW50cnkpLCBpKTsKKyAg
ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgZW51bWVyYXRvci5fcmVtYWluaW5nLS07CisgICAg
ICBlbnVtZXJhdG9yLl9yZXN1bHRbaV0gPSBlbnVtZXJhdG9yLl9tYWtlUmVzdWx0KF9yc3ZwSW50
ZXJuYWwuRlVMRklMTEVELCBpLCBlbnRyeSk7CisgICAgfQorICB9OworCisgIEVudW1lcmF0b3Iu
cHJvdG90eXBlLl9zZXR0bGVkQXQgPSBmdW5jdGlvbiAoc3RhdGUsIGksIHZhbHVlKSB7CisgICAg
dmFyIGVudW1lcmF0b3IgPSB0aGlzOworICAgIHZhciBwcm9taXNlID0gZW51bWVyYXRvci5wcm9t
aXNlOworCisgICAgaWYgKHByb21pc2UuX3N0YXRlID09PSBfcnN2cEludGVybmFsLlBFTkRJTkcp
IHsKKyAgICAgIGVudW1lcmF0b3IuX3JlbWFpbmluZy0tOworCisgICAgICBpZiAoZW51bWVyYXRv
ci5fYWJvcnRPblJlamVjdCAmJiBzdGF0ZSA9PT0gX3JzdnBJbnRlcm5hbC5SRUpFQ1RFRCkgewor
ICAgICAgICBfcnN2cEludGVybmFsLnJlamVjdChwcm9taXNlLCB2YWx1ZSk7CisgICAgICB9IGVs
c2UgeworICAgICAgICBlbnVtZXJhdG9yLl9yZXN1bHRbaV0gPSBlbnVtZXJhdG9yLl9tYWtlUmVz
dWx0KHN0YXRlLCBpLCB2YWx1ZSk7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKGVudW1lcmF0
b3IuX3JlbWFpbmluZyA9PT0gMCkgeworICAgICAgX3JzdnBJbnRlcm5hbC5mdWxmaWxsKHByb21p
c2UsIGVudW1lcmF0b3IuX3Jlc3VsdCk7CisgICAgfQorICB9OworCisgIEVudW1lcmF0b3IucHJv
dG90eXBlLl9tYWtlUmVzdWx0ID0gZnVuY3Rpb24gKHN0YXRlLCBpLCB2YWx1ZSkgeworICAgIHJl
dHVybiB2YWx1ZTsKKyAgfTsKKworICBFbnVtZXJhdG9yLnByb3RvdHlwZS5fd2lsbFNldHRsZUF0
ID0gZnVuY3Rpb24gKHByb21pc2UsIGkpIHsKKyAgICB2YXIgZW51bWVyYXRvciA9IHRoaXM7CisK
KyAgICBfcnN2cEludGVybmFsLnN1YnNjcmliZShwcm9taXNlLCB1bmRlZmluZWQsIGZ1bmN0aW9u
ICh2YWx1ZSkgeworICAgICAgZW51bWVyYXRvci5fc2V0dGxlZEF0KF9yc3ZwSW50ZXJuYWwuRlVM
RklMTEVELCBpLCB2YWx1ZSk7CisgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikgeworICAgICAgZW51
bWVyYXRvci5fc2V0dGxlZEF0KF9yc3ZwSW50ZXJuYWwuUkVKRUNURUQsIGksIHJlYXNvbik7Cisg
ICAgfSk7CisgIH07Cit9KTsKK2VuaWZlZCgncnN2cC9ldmVudHMnLCBbJ2V4cG9ydHMnXSwgZnVu
Y3Rpb24gKGV4cG9ydHMpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIGZ1bmN0aW9uIGluZGV4T2Yo
Y2FsbGJhY2tzLCBjYWxsYmFjaykgeworICAgIGZvciAodmFyIGkgPSAwLCBsID0gY2FsbGJhY2tz
Lmxlbmd0aDsgaSA8IGw7IGkrKykgeworICAgICAgaWYgKGNhbGxiYWNrc1tpXSA9PT0gY2FsbGJh
Y2spIHsKKyAgICAgICAgcmV0dXJuIGk7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIC0x
OworICB9CisKKyAgZnVuY3Rpb24gY2FsbGJhY2tzRm9yKG9iamVjdCkgeworICAgIHZhciBjYWxs
YmFja3MgPSBvYmplY3QuX3Byb21pc2VDYWxsYmFja3M7CisKKyAgICBpZiAoIWNhbGxiYWNrcykg
eworICAgICAgY2FsbGJhY2tzID0gb2JqZWN0Ll9wcm9taXNlQ2FsbGJhY2tzID0ge307CisgICAg
fQorCisgICAgcmV0dXJuIGNhbGxiYWNrczsKKyAgfQorCisgIC8qKgorICAgIEBjbGFzcyBSU1ZQ
LkV2ZW50VGFyZ2V0CisgICovCisgIGV4cG9ydHMuZGVmYXVsdCA9IHsKKworICAgIC8qKgorICAg
ICAgYFJTVlAuRXZlbnRUYXJnZXQubWl4aW5gIGV4dGVuZHMgYW4gb2JqZWN0IHdpdGggRXZlbnRU
YXJnZXQgbWV0aG9kcy4gRm9yCisgICAgICBFeGFtcGxlOgorICAgICAgIGBgYGphdmFzY3JpcHQK
KyAgICAgIHZhciBvYmplY3QgPSB7fTsKKyAgICAgICBSU1ZQLkV2ZW50VGFyZ2V0Lm1peGluKG9i
amVjdCk7CisgICAgICAgb2JqZWN0Lm9uKCdmaW5pc2hlZCcsIGZ1bmN0aW9uKGV2ZW50KSB7Cisg
ICAgICAgIC8vIGhhbmRsZSBldmVudAorICAgICAgfSk7CisgICAgICAgb2JqZWN0LnRyaWdnZXIo
J2ZpbmlzaGVkJywgeyBkZXRhaWw6IHZhbHVlIH0pOworICAgICAgYGBgCisgICAgICAgYEV2ZW50
VGFyZ2V0Lm1peGluYCBhbHNvIHdvcmtzIHdpdGggcHJvdG90eXBlczoKKyAgICAgICBgYGBqYXZh
c2NyaXB0CisgICAgICB2YXIgUGVyc29uID0gZnVuY3Rpb24oKSB7fTsKKyAgICAgIFJTVlAuRXZl
bnRUYXJnZXQubWl4aW4oUGVyc29uLnByb3RvdHlwZSk7CisgICAgICAgdmFyIHllaHVkYSA9IG5l
dyBQZXJzb24oKTsKKyAgICAgIHZhciB0b20gPSBuZXcgUGVyc29uKCk7CisgICAgICAgeWVodWRh
Lm9uKCdwb2tlJywgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgY29uc29sZS5sb2coJ1llaHVk
YSBzYXlzIE9XJyk7CisgICAgICB9KTsKKyAgICAgICB0b20ub24oJ3Bva2UnLCBmdW5jdGlvbihl
dmVudCkgeworICAgICAgICBjb25zb2xlLmxvZygnVG9tIHNheXMgT1cnKTsKKyAgICAgIH0pOwor
ICAgICAgIHllaHVkYS50cmlnZ2VyKCdwb2tlJyk7CisgICAgICB0b20udHJpZ2dlcigncG9rZScp
OworICAgICAgYGBgCisgICAgICAgQG1ldGhvZCBtaXhpbgorICAgICAgQGZvciBSU1ZQLkV2ZW50
VGFyZ2V0CisgICAgICBAcHJpdmF0ZQorICAgICAgQHBhcmFtIHtPYmplY3R9IG9iamVjdCBvYmpl
Y3QgdG8gZXh0ZW5kIHdpdGggRXZlbnRUYXJnZXQgbWV0aG9kcworICAgICovCisgICAgJ21peGlu
JzogZnVuY3Rpb24gKG9iamVjdCkgeworICAgICAgb2JqZWN0WydvbiddID0gdGhpc1snb24nXTsK
KyAgICAgIG9iamVjdFsnb2ZmJ10gPSB0aGlzWydvZmYnXTsKKyAgICAgIG9iamVjdFsndHJpZ2dl
ciddID0gdGhpc1sndHJpZ2dlciddOworICAgICAgb2JqZWN0Ll9wcm9taXNlQ2FsbGJhY2tzID0g
dW5kZWZpbmVkOworICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9LAorCisgICAgLyoqCisgICAg
ICBSZWdpc3RlcnMgYSBjYWxsYmFjayB0byBiZSBleGVjdXRlZCB3aGVuIGBldmVudE5hbWVgIGlz
IHRyaWdnZXJlZAorICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgIG9iamVjdC5vbignZXZlbnQn
LCBmdW5jdGlvbihldmVudEluZm8peworICAgICAgICAvLyBoYW5kbGUgdGhlIGV2ZW50CisgICAg
ICB9KTsKKyAgICAgICBvYmplY3QudHJpZ2dlcignZXZlbnQnKTsKKyAgICAgIGBgYAorICAgICAg
IEBtZXRob2Qgb24KKyAgICAgIEBmb3IgUlNWUC5FdmVudFRhcmdldAorICAgICAgQHByaXZhdGUK
KyAgICAgIEBwYXJhbSB7U3RyaW5nfSBldmVudE5hbWUgbmFtZSBvZiB0aGUgZXZlbnQgdG8gbGlz
dGVuIGZvcgorICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUg
Y2FsbGVkIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC4KKyAgICAqLworICAgICdvbic6IGZ1
bmN0aW9uIChldmVudE5hbWUsIGNhbGxiYWNrKSB7CisgICAgICBpZiAodHlwZW9mIGNhbGxiYWNr
ICE9PSAnZnVuY3Rpb24nKSB7CisgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0NhbGxiYWNr
IG11c3QgYmUgYSBmdW5jdGlvbicpOworICAgICAgfQorCisgICAgICB2YXIgYWxsQ2FsbGJhY2tz
ID0gY2FsbGJhY2tzRm9yKHRoaXMpLAorICAgICAgICAgIGNhbGxiYWNrczsKKworICAgICAgY2Fs
bGJhY2tzID0gYWxsQ2FsbGJhY2tzW2V2ZW50TmFtZV07CisKKyAgICAgIGlmICghY2FsbGJhY2tz
KSB7CisgICAgICAgIGNhbGxiYWNrcyA9IGFsbENhbGxiYWNrc1tldmVudE5hbWVdID0gW107Cisg
ICAgICB9CisKKyAgICAgIGlmIChpbmRleE9mKGNhbGxiYWNrcywgY2FsbGJhY2spID09PSAtMSkg
eworICAgICAgICBjYWxsYmFja3MucHVzaChjYWxsYmFjayk7CisgICAgICB9CisgICAgfSwKKwor
ICAgIC8qKgorICAgICAgWW91IGNhbiB1c2UgYG9mZmAgdG8gc3RvcCBmaXJpbmcgYSBwYXJ0aWN1
bGFyIGNhbGxiYWNrIGZvciBhbiBldmVudDoKKyAgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICBm
dW5jdGlvbiBkb1N0dWZmKCkgeyAvLyBkbyBzdHVmZiEgfQorICAgICAgb2JqZWN0Lm9uKCdzdHVm
ZicsIGRvU3R1ZmYpOworICAgICAgIG9iamVjdC50cmlnZ2VyKCdzdHVmZicpOyAvLyBkb1N0dWZm
IHdpbGwgYmUgY2FsbGVkCisgICAgICAgLy8gVW5yZWdpc3RlciBPTkxZIHRoZSBkb1N0dWZmIGNh
bGxiYWNrCisgICAgICBvYmplY3Qub2ZmKCdzdHVmZicsIGRvU3R1ZmYpOworICAgICAgb2JqZWN0
LnRyaWdnZXIoJ3N0dWZmJyk7IC8vIGRvU3R1ZmYgd2lsbCBOT1QgYmUgY2FsbGVkCisgICAgICBg
YGAKKyAgICAgICBJZiB5b3UgZG9uJ3QgcGFzcyBhIGBjYWxsYmFja2AgYXJndW1lbnQgdG8gYG9m
ZmAsIEFMTCBjYWxsYmFja3MgZm9yIHRoZQorICAgICAgZXZlbnQgd2lsbCBub3QgYmUgZXhlY3V0
ZWQgd2hlbiB0aGUgZXZlbnQgZmlyZXMuIEZvciBleGFtcGxlOgorICAgICAgIGBgYGphdmFzY3Jp
cHQKKyAgICAgIHZhciBjYWxsYmFjazEgPSBmdW5jdGlvbigpe307CisgICAgICB2YXIgY2FsbGJh
Y2syID0gZnVuY3Rpb24oKXt9OworICAgICAgIG9iamVjdC5vbignc3R1ZmYnLCBjYWxsYmFjazEp
OworICAgICAgb2JqZWN0Lm9uKCdzdHVmZicsIGNhbGxiYWNrMik7CisgICAgICAgb2JqZWN0LnRy
aWdnZXIoJ3N0dWZmJyk7IC8vIGNhbGxiYWNrMSBhbmQgY2FsbGJhY2syIHdpbGwgYmUgZXhlY3V0
ZWQuCisgICAgICAgb2JqZWN0Lm9mZignc3R1ZmYnKTsKKyAgICAgIG9iamVjdC50cmlnZ2VyKCdz
dHVmZicpOyAvLyBjYWxsYmFjazEgYW5kIGNhbGxiYWNrMiB3aWxsIG5vdCBiZSBleGVjdXRlZCEK
KyAgICAgIGBgYAorICAgICAgIEBtZXRob2Qgb2ZmCisgICAgICBAZm9yIFJTVlAuRXZlbnRUYXJn
ZXQKKyAgICAgIEBwcml2YXRlCisgICAgICBAcGFyYW0ge1N0cmluZ30gZXZlbnROYW1lIGV2ZW50
IHRvIHN0b3AgbGlzdGVuaW5nIHRvCisgICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBv
cHRpb25hbCBhcmd1bWVudC4gSWYgZ2l2ZW4sIG9ubHkgdGhlIGZ1bmN0aW9uCisgICAgICBnaXZl
biB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgZXZlbnQncyBjYWxsYmFjayBxdWV1ZS4gSWYgbm8g
YGNhbGxiYWNrYAorICAgICAgYXJndW1lbnQgaXMgZ2l2ZW4sIGFsbCBjYWxsYmFja3Mgd2lsbCBi
ZSByZW1vdmVkIGZyb20gdGhlIGV2ZW50J3MgY2FsbGJhY2sKKyAgICAgIHF1ZXVlLgorICAgICov
CisgICAgJ29mZic6IGZ1bmN0aW9uIChldmVudE5hbWUsIGNhbGxiYWNrKSB7CisgICAgICB2YXIg
YWxsQ2FsbGJhY2tzID0gY2FsbGJhY2tzRm9yKHRoaXMpLAorICAgICAgICAgIGNhbGxiYWNrcywK
KyAgICAgICAgICBpbmRleDsKKworICAgICAgaWYgKCFjYWxsYmFjaykgeworICAgICAgICBhbGxD
YWxsYmFja3NbZXZlbnROYW1lXSA9IFtdOworICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAg
ICAgIGNhbGxiYWNrcyA9IGFsbENhbGxiYWNrc1tldmVudE5hbWVdOworCisgICAgICBpbmRleCA9
IGluZGV4T2YoY2FsbGJhY2tzLCBjYWxsYmFjayk7CisKKyAgICAgIGlmIChpbmRleCAhPT0gLTEp
IHsKKyAgICAgICAgY2FsbGJhY2tzLnNwbGljZShpbmRleCwgMSk7CisgICAgICB9CisgICAgfSwK
KworICAgIC8qKgorICAgICAgVXNlIGB0cmlnZ2VyYCB0byBmaXJlIGN1c3RvbSBldmVudHMuIEZv
ciBleGFtcGxlOgorICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgIG9iamVjdC5vbignZm9vJywg
ZnVuY3Rpb24oKXsKKyAgICAgICAgY29uc29sZS5sb2coJ2ZvbyBldmVudCBoYXBwZW5lZCEnKTsK
KyAgICAgIH0pOworICAgICAgb2JqZWN0LnRyaWdnZXIoJ2ZvbycpOworICAgICAgLy8gJ2ZvbyBl
dmVudCBoYXBwZW5lZCEnIGxvZ2dlZCB0byB0aGUgY29uc29sZQorICAgICAgYGBgCisgICAgICAg
WW91IGNhbiBhbHNvIHBhc3MgYSB2YWx1ZSBhcyBhIHNlY29uZCBhcmd1bWVudCB0byBgdHJpZ2dl
cmAgdGhhdCB3aWxsIGJlCisgICAgICBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gYWxsIGV2ZW50
IGxpc3RlbmVycyBmb3IgdGhlIGV2ZW50OgorICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgIG9i
amVjdC5vbignZm9vJywgZnVuY3Rpb24odmFsdWUpeworICAgICAgICBjb25zb2xlLmxvZyh2YWx1
ZS5uYW1lKTsKKyAgICAgIH0pOworICAgICAgIG9iamVjdC50cmlnZ2VyKCdmb28nLCB7IG5hbWU6
ICdiYXInIH0pOworICAgICAgLy8gJ2JhcicgbG9nZ2VkIHRvIHRoZSBjb25zb2xlCisgICAgICBg
YGAKKyAgICAgICBAbWV0aG9kIHRyaWdnZXIKKyAgICAgIEBmb3IgUlNWUC5FdmVudFRhcmdldAor
ICAgICAgQHByaXZhdGUKKyAgICAgIEBwYXJhbSB7U3RyaW5nfSBldmVudE5hbWUgbmFtZSBvZiB0
aGUgZXZlbnQgdG8gYmUgdHJpZ2dlcmVkCisgICAgICBAcGFyYW0geyp9IG9wdGlvbnMgb3B0aW9u
YWwgdmFsdWUgdG8gYmUgcGFzc2VkIHRvIGFueSBldmVudCBoYW5kbGVycyBmb3IKKyAgICAgIHRo
ZSBnaXZlbiBgZXZlbnROYW1lYAorICAgICovCisgICAgJ3RyaWdnZXInOiBmdW5jdGlvbiAoZXZl
bnROYW1lLCBvcHRpb25zKSB7CisgICAgICB2YXIgYWxsQ2FsbGJhY2tzID0gY2FsbGJhY2tzRm9y
KHRoaXMpLAorICAgICAgICAgIGNhbGxiYWNrcywKKyAgICAgICAgICBjYWxsYmFjazsKKworICAg
ICAgaWYgKGNhbGxiYWNrcyA9IGFsbENhbGxiYWNrc1tldmVudE5hbWVdKSB7CisgICAgICAgIC8v
IERvbid0IGNhY2hlIHRoZSBjYWxsYmFja3MubGVuZ3RoIHNpbmNlIGl0IG1heSBncm93CisgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7CisgICAgICAg
ICAgY2FsbGJhY2sgPSBjYWxsYmFja3NbaV07CisKKyAgICAgICAgICBjYWxsYmFjayhvcHRpb25z
KTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfTsKK30pOworZW5pZmVkKCdyc3ZwL2Zp
bHRlcicsIFsnZXhwb3J0cycsICdyc3ZwL3Byb21pc2UnLCAncnN2cC91dGlscyddLCBmdW5jdGlv
biAoZXhwb3J0cywgX3JzdnBQcm9taXNlLCBfcnN2cFV0aWxzKSB7CisgICd1c2Ugc3RyaWN0JzsK
KworICBleHBvcnRzLmRlZmF1bHQgPSBmaWx0ZXI7CisKKyAgLyoqCisgICBgUlNWUC5maWx0ZXJg
IGlzIHNpbWlsYXIgdG8gSmF2YVNjcmlwdCdzIG5hdGl2ZSBgZmlsdGVyYCBtZXRob2QsIGV4Y2Vw
dCB0aGF0IGl0CisgICAgd2FpdHMgZm9yIGFsbCBwcm9taXNlcyB0byBiZWNvbWUgZnVsZmlsbGVk
IGJlZm9yZSBydW5uaW5nIHRoZSBgZmlsdGVyRm5gIG9uCisgICAgZWFjaCBpdGVtIGluIGdpdmVu
IHRvIGBwcm9taXNlc2AuIGBSU1ZQLmZpbHRlcmAgcmV0dXJucyBhIHByb21pc2UgdGhhdCB3aWxs
CisgICAgYmVjb21lIGZ1bGZpbGxlZCB3aXRoIHRoZSByZXN1bHQgb2YgcnVubmluZyBgZmlsdGVy
Rm5gIG9uIHRoZSB2YWx1ZXMgdGhlCisgICAgcHJvbWlzZXMgYmVjb21lIGZ1bGZpbGxlZCB3aXRo
LgorICAKKyAgICBGb3IgZXhhbXBsZToKKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAKKyAgICB2
YXIgcHJvbWlzZTEgPSBSU1ZQLnJlc29sdmUoMSk7CisgICAgdmFyIHByb21pc2UyID0gUlNWUC5y
ZXNvbHZlKDIpOworICAgIHZhciBwcm9taXNlMyA9IFJTVlAucmVzb2x2ZSgzKTsKKyAgCisgICAg
dmFyIHByb21pc2VzID0gW3Byb21pc2UxLCBwcm9taXNlMiwgcHJvbWlzZTNdOworICAKKyAgICB2
YXIgZmlsdGVyRm4gPSBmdW5jdGlvbihpdGVtKXsKKyAgICAgIHJldHVybiBpdGVtID4gMTsKKyAg
ICB9OworICAKKyAgICBSU1ZQLmZpbHRlcihwcm9taXNlcywgZmlsdGVyRm4pLnRoZW4oZnVuY3Rp
b24ocmVzdWx0KXsKKyAgICAgIC8vIHJlc3VsdCBpcyBbIDIsIDMgXQorICAgIH0pOworICAgIGBg
YAorICAKKyAgICBJZiBhbnkgb2YgdGhlIGBwcm9taXNlc2AgZ2l2ZW4gdG8gYFJTVlAuZmlsdGVy
YCBhcmUgcmVqZWN0ZWQsIHRoZSBmaXJzdCBwcm9taXNlCisgICAgdGhhdCBpcyByZWplY3RlZCB3
aWxsIGJlIGdpdmVuIGFzIGFuIGFyZ3VtZW50IHRvIHRoZSByZXR1cm5lZCBwcm9taXNlJ3MKKyAg
ICByZWplY3Rpb24gaGFuZGxlci4gRm9yIGV4YW1wbGU6CisgIAorICAgIGBgYGphdmFzY3JpcHQK
KyAgICB2YXIgcHJvbWlzZTEgPSBSU1ZQLnJlc29sdmUoMSk7CisgICAgdmFyIHByb21pc2UyID0g
UlNWUC5yZWplY3QobmV3IEVycm9yKCcyJykpOworICAgIHZhciBwcm9taXNlMyA9IFJTVlAucmVq
ZWN0KG5ldyBFcnJvcignMycpKTsKKyAgICB2YXIgcHJvbWlzZXMgPSBbIHByb21pc2UxLCBwcm9t
aXNlMiwgcHJvbWlzZTMgXTsKKyAgCisgICAgdmFyIGZpbHRlckZuID0gZnVuY3Rpb24oaXRlbSl7
CisgICAgICByZXR1cm4gaXRlbSA+IDE7CisgICAgfTsKKyAgCisgICAgUlNWUC5maWx0ZXIocHJv
bWlzZXMsIGZpbHRlckZuKS50aGVuKGZ1bmN0aW9uKGFycmF5KXsKKyAgICAgIC8vIENvZGUgaGVy
ZSBuZXZlciBydW5zIGJlY2F1c2UgdGhlcmUgYXJlIHJlamVjdGVkIHByb21pc2VzIQorICAgIH0s
IGZ1bmN0aW9uKHJlYXNvbikgeworICAgICAgLy8gcmVhc29uLm1lc3NhZ2UgPT09ICcyJworICAg
IH0pOworICAgIGBgYAorICAKKyAgICBgUlNWUC5maWx0ZXJgIHdpbGwgYWxzbyB3YWl0IGZvciBh
bnkgcHJvbWlzZXMgcmV0dXJuZWQgZnJvbSBgZmlsdGVyRm5gLgorICAgIEZvciBpbnN0YW5jZSwg
eW91IG1heSB3YW50IHRvIGZldGNoIGEgbGlzdCBvZiB1c2VycyB0aGVuIHJldHVybiBhIHN1YnNl
dAorICAgIG9mIHRob3NlIHVzZXJzIGJhc2VkIG9uIHNvbWUgYXN5bmNocm9ub3VzIG9wZXJhdGlv
bjoKKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAKKyAgICB2YXIgYWxpY2UgPSB7IG5hbWU6ICdh
bGljZScgfTsKKyAgICB2YXIgYm9iICAgPSB7IG5hbWU6ICdib2InIH07CisgICAgdmFyIHVzZXJz
ID0gWyBhbGljZSwgYm9iIF07CisgIAorICAgIHZhciBwcm9taXNlcyA9IHVzZXJzLm1hcChmdW5j
dGlvbih1c2VyKXsKKyAgICAgIHJldHVybiBSU1ZQLnJlc29sdmUodXNlcik7CisgICAgfSk7Cisg
IAorICAgIHZhciBmaWx0ZXJGbiA9IGZ1bmN0aW9uKHVzZXIpeworICAgICAgLy8gSGVyZSwgQWxp
Y2UgaGFzIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBhIGJsb2cgcG9zdCwgYnV0IEJvYiBkb2VzIG5v
dC4KKyAgICAgIHJldHVybiBnZXRQcml2aWxlZ2VzRm9yVXNlcih1c2VyKS50aGVuKGZ1bmN0aW9u
KHByaXZzKXsKKyAgICAgICAgcmV0dXJuIHByaXZzLmNhbl9jcmVhdGVfYmxvZ19wb3N0ID09PSB0
cnVlOworICAgICAgfSk7CisgICAgfTsKKyAgICBSU1ZQLmZpbHRlcihwcm9taXNlcywgZmlsdGVy
Rm4pLnRoZW4oZnVuY3Rpb24odXNlcnMpeworICAgICAgLy8gdHJ1ZSwgYmVjYXVzZSB0aGUgc2Vy
dmVyIHRvbGQgdXMgb25seSBBbGljZSBjYW4gY3JlYXRlIGEgYmxvZyBwb3N0LgorICAgICAgdXNl
cnMubGVuZ3RoID09PSAxOworICAgICAgLy8gZmFsc2UsIGJlY2F1c2UgQWxpY2UgaXMgdGhlIG9u
bHkgdXNlciBwcmVzZW50IGluIGB1c2Vyc2AKKyAgICAgIHVzZXJzWzBdID09PSBib2I7CisgICAg
fSk7CisgICAgYGBgCisgIAorICAgIEBtZXRob2QgZmlsdGVyCisgICAgQHN0YXRpYworICAgIEBm
b3IgUlNWUAorICAgIEBwYXJhbSB7QXJyYXl9IHByb21pc2VzCisgICAgQHBhcmFtIHtGdW5jdGlv
bn0gZmlsdGVyRm4gLSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgb24gZWFjaCByZXNvbHZlZCB2YWx1
ZSB0bworICAgIGZpbHRlciB0aGUgZmluYWwgcmVzdWx0cy4KKyAgICBAcGFyYW0ge1N0cmluZ30g
bGFiZWwgb3B0aW9uYWwgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHByb21pc2UuIFVzZWZ1bCBmb3IK
KyAgICB0b29saW5nLgorICAgIEByZXR1cm4ge1Byb21pc2V9CisgICovCisKKyAgZnVuY3Rpb24g
ZmlsdGVyKHByb21pc2VzLCBmaWx0ZXJGbiwgbGFiZWwpIHsKKyAgICByZXR1cm4gX3JzdnBQcm9t
aXNlLmRlZmF1bHQuYWxsKHByb21pc2VzLCBsYWJlbCkudGhlbihmdW5jdGlvbiAodmFsdWVzKSB7
CisgICAgICBpZiAoIV9yc3ZwVXRpbHMuaXNGdW5jdGlvbihmaWx0ZXJGbikpIHsKKyAgICAgICAg
dGhyb3cgbmV3IFR5cGVFcnJvcigiWW91IG11c3QgcGFzcyBhIGZ1bmN0aW9uIGFzIGZpbHRlcidz
IHNlY29uZCBhcmd1bWVudC4iKTsKKyAgICAgIH0KKworICAgICAgdmFyIGxlbmd0aCA9IHZhbHVl
cy5sZW5ndGg7CisgICAgICB2YXIgZmlsdGVyZWQgPSBuZXcgQXJyYXkobGVuZ3RoKTsKKworICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBmaWx0ZXJlZFtp
XSA9IGZpbHRlckZuKHZhbHVlc1tpXSk7CisgICAgICB9CisKKyAgICAgIHJldHVybiBfcnN2cFBy
b21pc2UuZGVmYXVsdC5hbGwoZmlsdGVyZWQsIGxhYmVsKS50aGVuKGZ1bmN0aW9uIChmaWx0ZXJl
ZCkgeworICAgICAgICB2YXIgcmVzdWx0cyA9IG5ldyBBcnJheShsZW5ndGgpOworICAgICAgICB2
YXIgbmV3TGVuZ3RoID0gMDsKKworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKSB7CisgICAgICAgICAgaWYgKGZpbHRlcmVkW2ldKSB7CisgICAgICAgICAgICByZXN1bHRz
W25ld0xlbmd0aF0gPSB2YWx1ZXNbaV07CisgICAgICAgICAgICBuZXdMZW5ndGgrKzsKKyAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXN1bHRzLmxlbmd0aCA9IG5ld0xlbmd0aDsK
KworICAgICAgICByZXR1cm4gcmVzdWx0czsKKyAgICAgIH0pOworICAgIH0pOworICB9Cit9KTsK
K2VuaWZlZCgncnN2cC9oYXNoLXNldHRsZWQnLCBbJ2V4cG9ydHMnLCAncnN2cC9wcm9taXNlJywg
J3JzdnAvZW51bWVyYXRvcicsICdyc3ZwL3Byb21pc2UtaGFzaCcsICdyc3ZwL3V0aWxzJ10sIGZ1
bmN0aW9uIChleHBvcnRzLCBfcnN2cFByb21pc2UsIF9yc3ZwRW51bWVyYXRvciwgX3JzdnBQcm9t
aXNlSGFzaCwgX3JzdnBVdGlscykgeworICAndXNlIHN0cmljdCc7CisKKyAgZXhwb3J0cy5kZWZh
dWx0ID0gaGFzaFNldHRsZWQ7CisKKyAgZnVuY3Rpb24gSGFzaFNldHRsZWQoQ29uc3RydWN0b3Is
IG9iamVjdCwgbGFiZWwpIHsKKyAgICB0aGlzLl9zdXBlckNvbnN0cnVjdG9yKENvbnN0cnVjdG9y
LCBvYmplY3QsIGZhbHNlLCBsYWJlbCk7CisgIH0KKworICBIYXNoU2V0dGxlZC5wcm90b3R5cGUg
PSBfcnN2cFV0aWxzLm9fY3JlYXRlKF9yc3ZwUHJvbWlzZUhhc2guZGVmYXVsdC5wcm90b3R5cGUp
OworICBIYXNoU2V0dGxlZC5wcm90b3R5cGUuX3N1cGVyQ29uc3RydWN0b3IgPSBfcnN2cEVudW1l
cmF0b3IuZGVmYXVsdDsKKyAgSGFzaFNldHRsZWQucHJvdG90eXBlLl9tYWtlUmVzdWx0ID0gX3Jz
dnBFbnVtZXJhdG9yLm1ha2VTZXR0bGVkUmVzdWx0OworCisgIEhhc2hTZXR0bGVkLnByb3RvdHlw
ZS5fdmFsaWRhdGlvbkVycm9yID0gZnVuY3Rpb24gKCkgeworICAgIHJldHVybiBuZXcgRXJyb3Io
J2hhc2hTZXR0bGVkIG11c3QgYmUgY2FsbGVkIHdpdGggYW4gb2JqZWN0Jyk7CisgIH07CisKKyAg
LyoqCisgICAgYFJTVlAuaGFzaFNldHRsZWRgIGlzIHNpbWlsYXIgdG8gYFJTVlAuYWxsU2V0dGxl
ZGAsIGJ1dCB0YWtlcyBhbiBvYmplY3QKKyAgICBpbnN0ZWFkIG9mIGFuIGFycmF5IGZvciBpdHMg
YHByb21pc2VzYCBhcmd1bWVudC4KKyAgCisgICAgVW5saWtlIGBSU1ZQLmFsbGAgb3IgYFJTVlAu
aGFzaGAsIHdoaWNoIGltcGxlbWVudCBhIGZhaWwtZmFzdCBtZXRob2QsCisgICAgYnV0IGxpa2Ug
YFJTVlAuYWxsU2V0dGxlZGAsIGBoYXNoU2V0dGxlZGAgd2FpdHMgdW50aWwgYWxsIHRoZQorICAg
IGNvbnN0aXR1ZW50IHByb21pc2VzIGhhdmUgcmV0dXJuZWQgYW5kIHRoZW4gc2hvd3MgeW91IGFs
bCB0aGUgcmVzdWx0cworICAgIHdpdGggdGhlaXIgc3RhdGVzIGFuZCB2YWx1ZXMvcmVhc29ucy4g
VGhpcyBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8KKyAgICBoYW5kbGUgbXVsdGlwbGUgcHJvbWlz
ZXMnIGZhaWx1cmUgc3RhdGVzIHRvZ2V0aGVyIGFzIGEgc2V0LgorICAKKyAgICBSZXR1cm5zIGEg
cHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCB3aGVuIGFsbCB0aGUgZ2l2ZW4gcHJvbWlzZXMgaGF2
ZSBiZWVuCisgICAgc2V0dGxlZCwgb3IgcmVqZWN0ZWQgaWYgdGhlIHBhc3NlZCBwYXJhbWV0ZXJz
IGFyZSBpbnZhbGlkLgorICAKKyAgICBUaGUgcmV0dXJuZWQgcHJvbWlzZSBpcyBmdWxmaWxsZWQg
d2l0aCBhIGhhc2ggdGhhdCBoYXMgdGhlIHNhbWUga2V5IG5hbWVzIGFzCisgICAgdGhlIGBwcm9t
aXNlc2Agb2JqZWN0IGFyZ3VtZW50LiBJZiBhbnkgb2YgdGhlIHZhbHVlcyBpbiB0aGUgb2JqZWN0
IGFyZSBub3QKKyAgICBwcm9taXNlcywgdGhleSB3aWxsIGJlIGNvcGllZCBvdmVyIHRvIHRoZSBm
dWxmaWxsZWQgb2JqZWN0IGFuZCBtYXJrZWQgd2l0aCBzdGF0ZQorICAgICdmdWxmaWxsZWQnLgor
ICAKKyAgICBFeGFtcGxlOgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgdmFyIHByb21pc2Vz
ID0geworICAgICAgbXlQcm9taXNlOiBSU1ZQLlByb21pc2UucmVzb2x2ZSgxKSwKKyAgICAgIHlv
dXJQcm9taXNlOiBSU1ZQLlByb21pc2UucmVzb2x2ZSgyKSwKKyAgICAgIHRoZWlyUHJvbWlzZTog
UlNWUC5Qcm9taXNlLnJlc29sdmUoMyksCisgICAgICBub3RBUHJvbWlzZTogNAorICAgIH07Cisg
IAorICAgIFJTVlAuaGFzaFNldHRsZWQocHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24oaGFzaCl7Cisg
ICAgICAvLyBoYXNoIGhlcmUgaXMgYW4gb2JqZWN0IHRoYXQgbG9va3MgbGlrZToKKyAgICAgIC8v
IHsKKyAgICAgIC8vICAgbXlQcm9taXNlOiB7IHN0YXRlOiAnZnVsZmlsbGVkJywgdmFsdWU6IDEg
fSwKKyAgICAgIC8vICAgeW91clByb21pc2U6IHsgc3RhdGU6ICdmdWxmaWxsZWQnLCB2YWx1ZTog
MiB9LAorICAgICAgLy8gICB0aGVpclByb21pc2U6IHsgc3RhdGU6ICdmdWxmaWxsZWQnLCB2YWx1
ZTogMyB9LAorICAgICAgLy8gICBub3RBUHJvbWlzZTogeyBzdGF0ZTogJ2Z1bGZpbGxlZCcsIHZh
bHVlOiA0IH0KKyAgICAgIC8vIH0KKyAgICB9KTsKKyAgICBgYGAKKyAgCisgICAgSWYgYW55IG9m
IHRoZSBgcHJvbWlzZXNgIGdpdmVuIHRvIGBSU1ZQLmhhc2hgIGFyZSByZWplY3RlZCwgdGhlIHN0
YXRlIHdpbGwKKyAgICBiZSBzZXQgdG8gJ3JlamVjdGVkJyBhbmQgdGhlIHJlYXNvbiBmb3IgcmVq
ZWN0aW9uIHByb3ZpZGVkLgorICAKKyAgICBFeGFtcGxlOgorICAKKyAgICBgYGBqYXZhc2NyaXB0
CisgICAgdmFyIHByb21pc2VzID0geworICAgICAgbXlQcm9taXNlOiBSU1ZQLlByb21pc2UucmVz
b2x2ZSgxKSwKKyAgICAgIHJlamVjdGVkUHJvbWlzZTogUlNWUC5Qcm9taXNlLnJlamVjdChuZXcg
RXJyb3IoJ3JlamVjdGlvbicpKSwKKyAgICAgIGFub3RoZXJSZWplY3RlZFByb21pc2U6IFJTVlAu
UHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdtb3JlIHJlamVjdGlvbicpKSwKKyAgICB9OworICAK
KyAgICBSU1ZQLmhhc2hTZXR0bGVkKHByb21pc2VzKS50aGVuKGZ1bmN0aW9uKGhhc2gpeworICAg
ICAgLy8gaGFzaCBoZXJlIGlzIGFuIG9iamVjdCB0aGF0IGxvb2tzIGxpa2U6CisgICAgICAvLyB7
CisgICAgICAvLyAgIG15UHJvbWlzZTogICAgICAgICAgICAgIHsgc3RhdGU6ICdmdWxmaWxsZWQn
LCB2YWx1ZTogMSB9LAorICAgICAgLy8gICByZWplY3RlZFByb21pc2U6ICAgICAgICB7IHN0YXRl
OiAncmVqZWN0ZWQnLCByZWFzb246IEVycm9yIH0sCisgICAgICAvLyAgIGFub3RoZXJSZWplY3Rl
ZFByb21pc2U6IHsgc3RhdGU6ICdyZWplY3RlZCcsIHJlYXNvbjogRXJyb3IgfSwKKyAgICAgIC8v
IH0KKyAgICAgIC8vIE5vdGUgdGhhdCBmb3IgcmVqZWN0ZWRQcm9taXNlLCByZWFzb24ubWVzc2Fn
ZSA9PSAncmVqZWN0aW9uJywKKyAgICAgIC8vIGFuZCBmb3IgYW5vdGhlclJlamVjdGVkUHJvbWlz
ZSwgcmVhc29uLm1lc3NhZ2UgPT0gJ21vcmUgcmVqZWN0aW9uJy4KKyAgICB9KTsKKyAgICBgYGAK
KyAgCisgICAgQW4gaW1wb3J0YW50IG5vdGU6IGBSU1ZQLmhhc2hTZXR0bGVkYCBpcyBpbnRlbmRl
ZCBmb3IgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3RzIHRoYXQKKyAgICBhcmUganVzdCBhIHNldCBv
ZiBrZXlzIGFuZCB2YWx1ZXMuIGBSU1ZQLmhhc2hTZXR0bGVkYCB3aWxsIE5PVCBwcmVzZXJ2ZSBw
cm90b3R5cGUKKyAgICBjaGFpbnMuCisgIAorICAgIEV4YW1wbGU6CisgIAorICAgIGBgYGphdmFz
Y3JpcHQKKyAgICBmdW5jdGlvbiBNeUNvbnN0cnVjdG9yKCl7CisgICAgICB0aGlzLmV4YW1wbGUg
PSBSU1ZQLlByb21pc2UucmVzb2x2ZSgnRXhhbXBsZScpOworICAgIH0KKyAgCisgICAgTXlDb25z
dHJ1Y3Rvci5wcm90b3R5cGUgPSB7CisgICAgICBwcm90b1Byb3BlcnR5OiBSU1ZQLlByb21pc2Uu
cmVzb2x2ZSgnUHJvdG8gUHJvcGVydHknKQorICAgIH07CisgIAorICAgIHZhciBteU9iamVjdCA9
IG5ldyBNeUNvbnN0cnVjdG9yKCk7CisgIAorICAgIFJTVlAuaGFzaFNldHRsZWQobXlPYmplY3Qp
LnRoZW4oZnVuY3Rpb24oaGFzaCl7CisgICAgICAvLyBwcm90b1Byb3BlcnR5IHdpbGwgbm90IGJl
IHByZXNlbnQsIGluc3RlYWQgeW91IHdpbGwganVzdCBoYXZlIGFuCisgICAgICAvLyBvYmplY3Qg
dGhhdCBsb29rcyBsaWtlOgorICAgICAgLy8geworICAgICAgLy8gICBleGFtcGxlOiB7IHN0YXRl
OiAnZnVsZmlsbGVkJywgdmFsdWU6ICdFeGFtcGxlJyB9CisgICAgICAvLyB9CisgICAgICAvLwor
ICAgICAgLy8gaGFzaC5oYXNPd25Qcm9wZXJ0eSgncHJvdG9Qcm9wZXJ0eScpOyAvLyBmYWxzZQor
ICAgICAgLy8gJ3VuZGVmaW5lZCcgPT09IHR5cGVvZiBoYXNoLnByb3RvUHJvcGVydHkKKyAgICB9
KTsKKyAgICBgYGAKKyAgCisgICAgQG1ldGhvZCBoYXNoU2V0dGxlZAorICAgIEBmb3IgUlNWUAor
ICAgIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QKKyAgICBAcGFyYW0ge1N0cmluZ30gbGFiZWwgb3B0
aW9uYWwgc3RyaW5nIHRoYXQgZGVzY3JpYmVzIHRoZSBwcm9taXNlLgorICAgIFVzZWZ1bCBmb3Ig
dG9vbGluZy4KKyAgICBAcmV0dXJuIHtQcm9taXNlfSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVk
IHdoZW4gd2hlbiBhbGwgcHJvcGVydGllcyBvZiBgcHJvbWlzZXNgCisgICAgaGF2ZSBiZWVuIHNl
dHRsZWQuCisgICAgQHN0YXRpYworICAqLworCisgIGZ1bmN0aW9uIGhhc2hTZXR0bGVkKG9iamVj
dCwgbGFiZWwpIHsKKyAgICByZXR1cm4gbmV3IEhhc2hTZXR0bGVkKF9yc3ZwUHJvbWlzZS5kZWZh
dWx0LCBvYmplY3QsIGxhYmVsKS5wcm9taXNlOworICB9Cit9KTsKK2VuaWZlZCgncnN2cC9oYXNo
JywgWydleHBvcnRzJywgJ3JzdnAvcHJvbWlzZScsICdyc3ZwL3Byb21pc2UtaGFzaCddLCBmdW5j
dGlvbiAoZXhwb3J0cywgX3JzdnBQcm9taXNlLCBfcnN2cFByb21pc2VIYXNoKSB7CisgICd1c2Ug
c3RyaWN0JzsKKworICBleHBvcnRzLmRlZmF1bHQgPSBoYXNoOworCisgIC8qKgorICAgIGBSU1ZQ
Lmhhc2hgIGlzIHNpbWlsYXIgdG8gYFJTVlAuYWxsYCwgYnV0IHRha2VzIGFuIG9iamVjdCBpbnN0
ZWFkIG9mIGFuIGFycmF5CisgICAgZm9yIGl0cyBgcHJvbWlzZXNgIGFyZ3VtZW50LgorICAKKyAg
ICBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCB3aGVuIGFsbCB0aGUgZ2l2ZW4g
cHJvbWlzZXMgaGF2ZSBiZWVuCisgICAgZnVsZmlsbGVkLCBvciByZWplY3RlZCBpZiBhbnkgb2Yg
dGhlbSBiZWNvbWUgcmVqZWN0ZWQuIFRoZSByZXR1cm5lZCBwcm9taXNlCisgICAgaXMgZnVsZmls
bGVkIHdpdGggYSBoYXNoIHRoYXQgaGFzIHRoZSBzYW1lIGtleSBuYW1lcyBhcyB0aGUgYHByb21p
c2VzYCBvYmplY3QKKyAgICBhcmd1bWVudC4gSWYgYW55IG9mIHRoZSB2YWx1ZXMgaW4gdGhlIG9i
amVjdCBhcmUgbm90IHByb21pc2VzLCB0aGV5IHdpbGwKKyAgICBzaW1wbHkgYmUgY29waWVkIG92
ZXIgdG8gdGhlIGZ1bGZpbGxlZCBvYmplY3QuCisgIAorICAgIEV4YW1wbGU6CisgIAorICAgIGBg
YGphdmFzY3JpcHQKKyAgICB2YXIgcHJvbWlzZXMgPSB7CisgICAgICBteVByb21pc2U6IFJTVlAu
cmVzb2x2ZSgxKSwKKyAgICAgIHlvdXJQcm9taXNlOiBSU1ZQLnJlc29sdmUoMiksCisgICAgICB0
aGVpclByb21pc2U6IFJTVlAucmVzb2x2ZSgzKSwKKyAgICAgIG5vdEFQcm9taXNlOiA0CisgICAg
fTsKKyAgCisgICAgUlNWUC5oYXNoKHByb21pc2VzKS50aGVuKGZ1bmN0aW9uKGhhc2gpeworICAg
ICAgLy8gaGFzaCBoZXJlIGlzIGFuIG9iamVjdCB0aGF0IGxvb2tzIGxpa2U6CisgICAgICAvLyB7
CisgICAgICAvLyAgIG15UHJvbWlzZTogMSwKKyAgICAgIC8vICAgeW91clByb21pc2U6IDIsCisg
ICAgICAvLyAgIHRoZWlyUHJvbWlzZTogMywKKyAgICAgIC8vICAgbm90QVByb21pc2U6IDQKKyAg
ICAgIC8vIH0KKyAgICB9KTsKKyAgICBgYGBgCisgIAorICAgIElmIGFueSBvZiB0aGUgYHByb21p
c2VzYCBnaXZlbiB0byBgUlNWUC5oYXNoYCBhcmUgcmVqZWN0ZWQsIHRoZSBmaXJzdCBwcm9taXNl
CisgICAgdGhhdCBpcyByZWplY3RlZCB3aWxsIGJlIGdpdmVuIGFzIHRoZSByZWFzb24gdG8gdGhl
IHJlamVjdGlvbiBoYW5kbGVyLgorICAKKyAgICBFeGFtcGxlOgorICAKKyAgICBgYGBqYXZhc2Ny
aXB0CisgICAgdmFyIHByb21pc2VzID0geworICAgICAgbXlQcm9taXNlOiBSU1ZQLnJlc29sdmUo
MSksCisgICAgICByZWplY3RlZFByb21pc2U6IFJTVlAucmVqZWN0KG5ldyBFcnJvcigncmVqZWN0
ZWRQcm9taXNlJykpLAorICAgICAgYW5vdGhlclJlamVjdGVkUHJvbWlzZTogUlNWUC5yZWplY3Qo
bmV3IEVycm9yKCdhbm90aGVyUmVqZWN0ZWRQcm9taXNlJykpLAorICAgIH07CisgIAorICAgIFJT
VlAuaGFzaChwcm9taXNlcykudGhlbihmdW5jdGlvbihoYXNoKXsKKyAgICAgIC8vIENvZGUgaGVy
ZSBuZXZlciBydW5zIGJlY2F1c2UgdGhlcmUgYXJlIHJlamVjdGVkIHByb21pc2VzIQorICAgIH0s
IGZ1bmN0aW9uKHJlYXNvbikgeworICAgICAgLy8gcmVhc29uLm1lc3NhZ2UgPT09ICdyZWplY3Rl
ZFByb21pc2UnCisgICAgfSk7CisgICAgYGBgCisgIAorICAgIEFuIGltcG9ydGFudCBub3RlOiBg
UlNWUC5oYXNoYCBpcyBpbnRlbmRlZCBmb3IgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3RzIHRoYXQK
KyAgICBhcmUganVzdCBhIHNldCBvZiBrZXlzIGFuZCB2YWx1ZXMuIGBSU1ZQLmhhc2hgIHdpbGwg
Tk9UIHByZXNlcnZlIHByb3RvdHlwZQorICAgIGNoYWlucy4KKyAgCisgICAgRXhhbXBsZToKKyAg
CisgICAgYGBgamF2YXNjcmlwdAorICAgIGZ1bmN0aW9uIE15Q29uc3RydWN0b3IoKXsKKyAgICAg
IHRoaXMuZXhhbXBsZSA9IFJTVlAucmVzb2x2ZSgnRXhhbXBsZScpOworICAgIH0KKyAgCisgICAg
TXlDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSB7CisgICAgICBwcm90b1Byb3BlcnR5OiBSU1ZQLnJl
c29sdmUoJ1Byb3RvIFByb3BlcnR5JykKKyAgICB9OworICAKKyAgICB2YXIgbXlPYmplY3QgPSBu
ZXcgTXlDb25zdHJ1Y3RvcigpOworICAKKyAgICBSU1ZQLmhhc2gobXlPYmplY3QpLnRoZW4oZnVu
Y3Rpb24oaGFzaCl7CisgICAgICAvLyBwcm90b1Byb3BlcnR5IHdpbGwgbm90IGJlIHByZXNlbnQs
IGluc3RlYWQgeW91IHdpbGwganVzdCBoYXZlIGFuCisgICAgICAvLyBvYmplY3QgdGhhdCBsb29r
cyBsaWtlOgorICAgICAgLy8geworICAgICAgLy8gICBleGFtcGxlOiAnRXhhbXBsZScKKyAgICAg
IC8vIH0KKyAgICAgIC8vCisgICAgICAvLyBoYXNoLmhhc093blByb3BlcnR5KCdwcm90b1Byb3Bl
cnR5Jyk7IC8vIGZhbHNlCisgICAgICAvLyAndW5kZWZpbmVkJyA9PT0gdHlwZW9mIGhhc2gucHJv
dG9Qcm9wZXJ0eQorICAgIH0pOworICAgIGBgYAorICAKKyAgICBAbWV0aG9kIGhhc2gKKyAgICBA
c3RhdGljCisgICAgQGZvciBSU1ZQCisgICAgQHBhcmFtIHtPYmplY3R9IG9iamVjdAorICAgIEBw
YXJhbSB7U3RyaW5nfSBsYWJlbCBvcHRpb25hbCBzdHJpbmcgdGhhdCBkZXNjcmliZXMgdGhlIHBy
b21pc2UuCisgICAgVXNlZnVsIGZvciB0b29saW5nLgorICAgIEByZXR1cm4ge1Byb21pc2V9IHBy
b21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgd2hlbiBhbGwgcHJvcGVydGllcyBvZiBgcHJvbWlzZXNg
CisgICAgaGF2ZSBiZWVuIGZ1bGZpbGxlZCwgb3IgcmVqZWN0ZWQgaWYgYW55IG9mIHRoZW0gYmVj
b21lIHJlamVjdGVkLgorICAqLworCisgIGZ1bmN0aW9uIGhhc2gob2JqZWN0LCBsYWJlbCkgewor
ICAgIHJldHVybiBuZXcgX3JzdnBQcm9taXNlSGFzaC5kZWZhdWx0KF9yc3ZwUHJvbWlzZS5kZWZh
dWx0LCBvYmplY3QsIGxhYmVsKS5wcm9taXNlOworICB9Cit9KTsKK2VuaWZlZCgncnN2cC9pbnN0
cnVtZW50JywgWydleHBvcnRzJywgJ3JzdnAvY29uZmlnJywgJ3JzdnAvdXRpbHMnXSwgZnVuY3Rp
b24gKGV4cG9ydHMsIF9yc3ZwQ29uZmlnLCBfcnN2cFV0aWxzKSB7CisgICd1c2Ugc3RyaWN0JzsK
KworICBleHBvcnRzLmRlZmF1bHQgPSBpbnN0cnVtZW50OworCisgIHZhciBxdWV1ZSA9IFtdOwor
CisgIGZ1bmN0aW9uIHNjaGVkdWxlRmx1c2goKSB7CisgICAgc2V0VGltZW91dChmdW5jdGlvbiAo
KSB7CisgICAgICB2YXIgZW50cnk7CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXVlLmxl
bmd0aDsgaSsrKSB7CisgICAgICAgIGVudHJ5ID0gcXVldWVbaV07CisKKyAgICAgICAgdmFyIHBh
eWxvYWQgPSBlbnRyeS5wYXlsb2FkOworCisgICAgICAgIHBheWxvYWQuZ3VpZCA9IHBheWxvYWQu
a2V5ICsgcGF5bG9hZC5pZDsKKyAgICAgICAgcGF5bG9hZC5jaGlsZEd1aWQgPSBwYXlsb2FkLmtl
eSArIHBheWxvYWQuY2hpbGRJZDsKKyAgICAgICAgaWYgKHBheWxvYWQuZXJyb3IpIHsKKyAgICAg
ICAgICBwYXlsb2FkLnN0YWNrID0gcGF5bG9hZC5lcnJvci5zdGFjazsKKyAgICAgICAgfQorCisg
ICAgICAgIF9yc3ZwQ29uZmlnLmNvbmZpZ1sndHJpZ2dlciddKGVudHJ5Lm5hbWUsIGVudHJ5LnBh
eWxvYWQpOworICAgICAgfQorICAgICAgcXVldWUubGVuZ3RoID0gMDsKKyAgICB9LCA1MCk7Cisg
IH0KKworICBmdW5jdGlvbiBpbnN0cnVtZW50KGV2ZW50TmFtZSwgcHJvbWlzZSwgY2hpbGQpIHsK
KyAgICBpZiAoMSA9PT0gcXVldWUucHVzaCh7CisgICAgICBuYW1lOiBldmVudE5hbWUsCisgICAg
ICBwYXlsb2FkOiB7CisgICAgICAgIGtleTogcHJvbWlzZS5fZ3VpZEtleSwKKyAgICAgICAgaWQ6
IHByb21pc2UuX2lkLAorICAgICAgICBldmVudE5hbWU6IGV2ZW50TmFtZSwKKyAgICAgICAgZGV0
YWlsOiBwcm9taXNlLl9yZXN1bHQsCisgICAgICAgIGNoaWxkSWQ6IGNoaWxkICYmIGNoaWxkLl9p
ZCwKKyAgICAgICAgbGFiZWw6IHByb21pc2UuX2xhYmVsLAorICAgICAgICB0aW1lU3RhbXA6IF9y
c3ZwVXRpbHMubm93KCksCisgICAgICAgIGVycm9yOiBfcnN2cENvbmZpZy5jb25maWdbImluc3Ry
dW1lbnQtd2l0aC1zdGFjayJdID8gbmV3IEVycm9yKHByb21pc2UuX2xhYmVsKSA6IG51bGwKKyAg
ICAgIH0gfSkpIHsKKyAgICAgIHNjaGVkdWxlRmx1c2goKTsKKyAgICB9CisgIH0KK30pOworZW5p
ZmVkKCdyc3ZwL21hcCcsIFsnZXhwb3J0cycsICdyc3ZwL3Byb21pc2UnLCAncnN2cC91dGlscydd
LCBmdW5jdGlvbiAoZXhwb3J0cywgX3JzdnBQcm9taXNlLCBfcnN2cFV0aWxzKSB7CisgICd1c2Ug
c3RyaWN0JzsKKworICBleHBvcnRzLmRlZmF1bHQgPSBtYXA7CisKKyAgLyoqCisgICBgUlNWUC5t
YXBgIGlzIHNpbWlsYXIgdG8gSmF2YVNjcmlwdCdzIG5hdGl2ZSBgbWFwYCBtZXRob2QsIGV4Y2Vw
dCB0aGF0IGl0CisgICAgd2FpdHMgZm9yIGFsbCBwcm9taXNlcyB0byBiZWNvbWUgZnVsZmlsbGVk
IGJlZm9yZSBydW5uaW5nIHRoZSBgbWFwRm5gIG9uCisgICAgZWFjaCBpdGVtIGluIGdpdmVuIHRv
IGBwcm9taXNlc2AuIGBSU1ZQLm1hcGAgcmV0dXJucyBhIHByb21pc2UgdGhhdCB3aWxsCisgICAg
YmVjb21lIGZ1bGZpbGxlZCB3aXRoIHRoZSByZXN1bHQgb2YgcnVubmluZyBgbWFwRm5gIG9uIHRo
ZSB2YWx1ZXMgdGhlIHByb21pc2VzCisgICAgYmVjb21lIGZ1bGZpbGxlZCB3aXRoLgorICAKKyAg
ICBGb3IgZXhhbXBsZToKKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAKKyAgICB2YXIgcHJvbWlz
ZTEgPSBSU1ZQLnJlc29sdmUoMSk7CisgICAgdmFyIHByb21pc2UyID0gUlNWUC5yZXNvbHZlKDIp
OworICAgIHZhciBwcm9taXNlMyA9IFJTVlAucmVzb2x2ZSgzKTsKKyAgICB2YXIgcHJvbWlzZXMg
PSBbIHByb21pc2UxLCBwcm9taXNlMiwgcHJvbWlzZTMgXTsKKyAgCisgICAgdmFyIG1hcEZuID0g
ZnVuY3Rpb24oaXRlbSl7CisgICAgICByZXR1cm4gaXRlbSArIDE7CisgICAgfTsKKyAgCisgICAg
UlNWUC5tYXAocHJvbWlzZXMsIG1hcEZuKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCl7CisgICAgICAv
LyByZXN1bHQgaXMgWyAyLCAzLCA0IF0KKyAgICB9KTsKKyAgICBgYGAKKyAgCisgICAgSWYgYW55
IG9mIHRoZSBgcHJvbWlzZXNgIGdpdmVuIHRvIGBSU1ZQLm1hcGAgYXJlIHJlamVjdGVkLCB0aGUg
Zmlyc3QgcHJvbWlzZQorICAgIHRoYXQgaXMgcmVqZWN0ZWQgd2lsbCBiZSBnaXZlbiBhcyBhbiBh
cmd1bWVudCB0byB0aGUgcmV0dXJuZWQgcHJvbWlzZSdzCisgICAgcmVqZWN0aW9uIGhhbmRsZXIu
IEZvciBleGFtcGxlOgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgdmFyIHByb21pc2UxID0g
UlNWUC5yZXNvbHZlKDEpOworICAgIHZhciBwcm9taXNlMiA9IFJTVlAucmVqZWN0KG5ldyBFcnJv
cignMicpKTsKKyAgICB2YXIgcHJvbWlzZTMgPSBSU1ZQLnJlamVjdChuZXcgRXJyb3IoJzMnKSk7
CisgICAgdmFyIHByb21pc2VzID0gWyBwcm9taXNlMSwgcHJvbWlzZTIsIHByb21pc2UzIF07Cisg
IAorICAgIHZhciBtYXBGbiA9IGZ1bmN0aW9uKGl0ZW0peworICAgICAgcmV0dXJuIGl0ZW0gKyAx
OworICAgIH07CisgIAorICAgIFJTVlAubWFwKHByb21pc2VzLCBtYXBGbikudGhlbihmdW5jdGlv
bihhcnJheSl7CisgICAgICAvLyBDb2RlIGhlcmUgbmV2ZXIgcnVucyBiZWNhdXNlIHRoZXJlIGFy
ZSByZWplY3RlZCBwcm9taXNlcyEKKyAgICB9LCBmdW5jdGlvbihyZWFzb24pIHsKKyAgICAgIC8v
IHJlYXNvbi5tZXNzYWdlID09PSAnMicKKyAgICB9KTsKKyAgICBgYGAKKyAgCisgICAgYFJTVlAu
bWFwYCB3aWxsIGFsc28gd2FpdCBpZiBhIHByb21pc2UgaXMgcmV0dXJuZWQgZnJvbSBgbWFwRm5g
LiBGb3IgZXhhbXBsZSwKKyAgICBzYXkgeW91IHdhbnQgdG8gZ2V0IGFsbCBjb21tZW50cyBmcm9t
IGEgc2V0IG9mIGJsb2cgcG9zdHMsIGJ1dCB5b3UgbmVlZAorICAgIHRoZSBibG9nIHBvc3RzIGZp
cnN0IGJlY2F1c2UgdGhleSBjb250YWluIGEgdXJsIHRvIHRob3NlIGNvbW1lbnRzLgorICAKKyAg
ICBgYGBqYXZzY3JpcHQKKyAgCisgICAgdmFyIG1hcEZuID0gZnVuY3Rpb24oYmxvZ1Bvc3Qpewor
ICAgICAgLy8gZ2V0Q29tbWVudHMgZG9lcyBzb21lIGFqYXggYW5kIHJldHVybnMgYW4gUlNWUC5Q
cm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkCisgICAgICAvLyB3aXRoIHNvbWUgY29tbWVudHMgZGF0
YQorICAgICAgcmV0dXJuIGdldENvbW1lbnRzKGJsb2dQb3N0LmNvbW1lbnRzX3VybCk7CisgICAg
fTsKKyAgCisgICAgLy8gZ2V0QmxvZ1Bvc3RzIGRvZXMgc29tZSBhamF4IGFuZCByZXR1cm5zIGFu
IFJTVlAuUHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZAorICAgIC8vIHdpdGggc29tZSBibG9nIHBv
c3QgZGF0YQorICAgIFJTVlAubWFwKGdldEJsb2dQb3N0cygpLCBtYXBGbikudGhlbihmdW5jdGlv
bihjb21tZW50cyl7CisgICAgICAvLyBjb21tZW50cyBpcyB0aGUgcmVzdWx0IG9mIGFza2luZyB0
aGUgc2VydmVyIGZvciB0aGUgY29tbWVudHMKKyAgICAgIC8vIG9mIGFsbCBibG9nIHBvc3RzIHJl
dHVybmVkIGZyb20gZ2V0QmxvZ1Bvc3RzKCkKKyAgICB9KTsKKyAgICBgYGAKKyAgCisgICAgQG1l
dGhvZCBtYXAKKyAgICBAc3RhdGljCisgICAgQGZvciBSU1ZQCisgICAgQHBhcmFtIHtBcnJheX0g
cHJvbWlzZXMKKyAgICBAcGFyYW0ge0Z1bmN0aW9ufSBtYXBGbiBmdW5jdGlvbiB0byBiZSBjYWxs
ZWQgb24gZWFjaCBmdWxmaWxsZWQgcHJvbWlzZS4KKyAgICBAcGFyYW0ge1N0cmluZ30gbGFiZWwg
b3B0aW9uYWwgc3RyaW5nIGZvciBsYWJlbGluZyB0aGUgcHJvbWlzZS4KKyAgICBVc2VmdWwgZm9y
IHRvb2xpbmcuCisgICAgQHJldHVybiB7UHJvbWlzZX0gcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxl
ZCB3aXRoIHRoZSByZXN1bHQgb2YgY2FsbGluZworICAgIGBtYXBGbmAgb24gZWFjaCBmdWxmaWxs
ZWQgcHJvbWlzZSBvciB2YWx1ZSB3aGVuIHRoZXkgYmVjb21lIGZ1bGZpbGxlZC4KKyAgICAgVGhl
IHByb21pc2Ugd2lsbCBiZSByZWplY3RlZCBpZiBhbnkgb2YgdGhlIGdpdmVuIGBwcm9taXNlc2Ag
YmVjb21lIHJlamVjdGVkLgorICAgIEBzdGF0aWMKKyAgKi8KKworICBmdW5jdGlvbiBtYXAocHJv
bWlzZXMsIG1hcEZuLCBsYWJlbCkgeworICAgIHJldHVybiBfcnN2cFByb21pc2UuZGVmYXVsdC5h
bGwocHJvbWlzZXMsIGxhYmVsKS50aGVuKGZ1bmN0aW9uICh2YWx1ZXMpIHsKKyAgICAgIGlmICgh
X3JzdnBVdGlscy5pc0Z1bmN0aW9uKG1hcEZuKSkgeworICAgICAgICB0aHJvdyBuZXcgVHlwZUVy
cm9yKCJZb3UgbXVzdCBwYXNzIGEgZnVuY3Rpb24gYXMgbWFwJ3Mgc2Vjb25kIGFyZ3VtZW50LiIp
OworICAgICAgfQorCisgICAgICB2YXIgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aDsKKyAgICAgIHZh
ciByZXN1bHRzID0gbmV3IEFycmF5KGxlbmd0aCk7CisKKyAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgcmVzdWx0c1tpXSA9IG1hcEZuKHZhbHVlc1tpXSk7
CisgICAgICB9CisKKyAgICAgIHJldHVybiBfcnN2cFByb21pc2UuZGVmYXVsdC5hbGwocmVzdWx0
cywgbGFiZWwpOworICAgIH0pOworICB9Cit9KTsKK2VuaWZlZCgncnN2cC9ub2RlJywgWydleHBv
cnRzJywgJ3JzdnAvcHJvbWlzZScsICdyc3ZwLy1pbnRlcm5hbCcsICdyc3ZwL3V0aWxzJ10sIGZ1
bmN0aW9uIChleHBvcnRzLCBfcnN2cFByb21pc2UsIF9yc3ZwSW50ZXJuYWwsIF9yc3ZwVXRpbHMp
IHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIGV4cG9ydHMuZGVmYXVsdCA9IGRlbm9kZWlmeTsKKwor
ICBmdW5jdGlvbiBfZGVmYXVsdHMob2JqLCBkZWZhdWx0cykgeyB2YXIga2V5cyA9IE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eU5hbWVzKGRlZmF1bHRzKTsgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxl
bmd0aDsgaSsrKSB7IHZhciBrZXkgPSBrZXlzW2ldOyB2YXIgdmFsdWUgPSBPYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKGRlZmF1bHRzLCBrZXkpOyBpZiAodmFsdWUgJiYgdmFsdWUuY29u
ZmlndXJhYmxlICYmIG9ialtrZXldID09PSB1bmRlZmluZWQpIHsgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KG9iaiwga2V5LCB2YWx1ZSk7IH0gfSByZXR1cm4gb2JqOyB9CisKKyAgZnVuY3Rpb24gUmVz
dWx0KCkgeworICAgIHRoaXMudmFsdWUgPSB1bmRlZmluZWQ7CisgIH0KKworICB2YXIgRVJST1Ig
PSBuZXcgUmVzdWx0KCk7CisgIHZhciBHRVRfVEhFTl9FUlJPUiA9IG5ldyBSZXN1bHQoKTsKKwor
ICBmdW5jdGlvbiBnZXRUaGVuKG9iaikgeworICAgIHRyeSB7CisgICAgICByZXR1cm4gb2JqLnRo
ZW47CisgICAgfSBjYXRjaCAoZXJyb3IpIHsKKyAgICAgIEVSUk9SLnZhbHVlID0gZXJyb3I7Cisg
ICAgICByZXR1cm4gRVJST1I7CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gdHJ5QXBwbHkoZiwg
cywgYSkgeworICAgIHRyeSB7CisgICAgICBmLmFwcGx5KHMsIGEpOworICAgIH0gY2F0Y2ggKGVy
cm9yKSB7CisgICAgICBFUlJPUi52YWx1ZSA9IGVycm9yOworICAgICAgcmV0dXJuIEVSUk9SOwor
ICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIG1ha2VPYmplY3QoXywgYXJndW1lbnROYW1lcykgewor
ICAgIHZhciBvYmogPSB7fTsKKyAgICB2YXIgbmFtZTsKKyAgICB2YXIgaTsKKyAgICB2YXIgbGVu
Z3RoID0gXy5sZW5ndGg7CisgICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobGVuZ3RoKTsKKworICAg
IGZvciAodmFyIHggPSAwOyB4IDwgbGVuZ3RoOyB4KyspIHsKKyAgICAgIGFyZ3NbeF0gPSBfW3hd
OworICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCBhcmd1bWVudE5hbWVzLmxlbmd0aDsgaSsr
KSB7CisgICAgICBuYW1lID0gYXJndW1lbnROYW1lc1tpXTsKKyAgICAgIG9ialtuYW1lXSA9IGFy
Z3NbaSArIDFdOworICAgIH0KKworICAgIHJldHVybiBvYmo7CisgIH0KKworICBmdW5jdGlvbiBh
cnJheVJlc3VsdChfKSB7CisgICAgdmFyIGxlbmd0aCA9IF8ubGVuZ3RoOworICAgIHZhciBhcmdz
ID0gbmV3IEFycmF5KGxlbmd0aCAtIDEpOworCisgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBsZW5n
dGg7IGkrKykgeworICAgICAgYXJnc1tpIC0gMV0gPSBfW2ldOworICAgIH0KKworICAgIHJldHVy
biBhcmdzOworICB9CisKKyAgZnVuY3Rpb24gd3JhcFRoZW5hYmxlKHRoZW4sIHByb21pc2UpIHsK
KyAgICByZXR1cm4geworICAgICAgdGhlbjogZnVuY3Rpb24gKG9uRnVsRmlsbG1lbnQsIG9uUmVq
ZWN0aW9uKSB7CisgICAgICAgIHJldHVybiB0aGVuLmNhbGwocHJvbWlzZSwgb25GdWxGaWxsbWVu
dCwgb25SZWplY3Rpb24pOworICAgICAgfQorICAgIH07CisgIH0KKworICAvKioKKyAgICBgUlNW
UC5kZW5vZGVpZnlgIHRha2VzIGEgJ25vZGUtc3R5bGUnIGZ1bmN0aW9uIGFuZCByZXR1cm5zIGEg
ZnVuY3Rpb24gdGhhdAorICAgIHdpbGwgcmV0dXJuIGFuIGBSU1ZQLlByb21pc2VgLiBZb3UgY2Fu
IHVzZSBgZGVub2RlaWZ5YCBpbiBOb2RlLmpzIG9yIHRoZQorICAgIGJyb3dzZXIgd2hlbiB5b3Un
ZCBwcmVmZXIgdG8gdXNlIHByb21pc2VzIG92ZXIgdXNpbmcgY2FsbGJhY2tzLiBGb3IgZXhhbXBs
ZSwKKyAgICBgZGVub2RlaWZ5YCB0cmFuc2Zvcm1zIHRoZSBmb2xsb3dpbmc6CisgIAorICAgIGBg
YGphdmFzY3JpcHQKKyAgICB2YXIgZnMgPSByZXF1aXJlKCdmcycpOworICAKKyAgICBmcy5yZWFk
RmlsZSgnbXlmaWxlLnR4dCcsIGZ1bmN0aW9uKGVyciwgZGF0YSl7CisgICAgICBpZiAoZXJyKSBy
ZXR1cm4gaGFuZGxlRXJyb3IoZXJyKTsKKyAgICAgIGhhbmRsZURhdGEoZGF0YSk7CisgICAgfSk7
CisgICAgYGBgCisgIAorICAgIGludG86CisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAgICB2YXIg
ZnMgPSByZXF1aXJlKCdmcycpOworICAgIHZhciByZWFkRmlsZSA9IFJTVlAuZGVub2RlaWZ5KGZz
LnJlYWRGaWxlKTsKKyAgCisgICAgcmVhZEZpbGUoJ215ZmlsZS50eHQnKS50aGVuKGhhbmRsZURh
dGEsIGhhbmRsZUVycm9yKTsKKyAgICBgYGAKKyAgCisgICAgSWYgdGhlIG5vZGUgZnVuY3Rpb24g
aGFzIG11bHRpcGxlIHN1Y2Nlc3MgcGFyYW1ldGVycywgdGhlbiBgZGVub2RlaWZ5YAorICAgIGp1
c3QgcmV0dXJucyB0aGUgZmlyc3Qgb25lOgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgdmFy
IHJlcXVlc3QgPSBSU1ZQLmRlbm9kZWlmeShyZXF1aXJlKCdyZXF1ZXN0JykpOworICAKKyAgICBy
ZXF1ZXN0KCdodHRwOi8vZXhhbXBsZS5jb20nKS50aGVuKGZ1bmN0aW9uKHJlcykgeworICAgICAg
Ly8gLi4uCisgICAgfSk7CisgICAgYGBgCisgIAorICAgIEhvd2V2ZXIsIGlmIHlvdSBuZWVkIGFs
bCBzdWNjZXNzIHBhcmFtZXRlcnMsIHNldHRpbmcgYGRlbm9kZWlmeWAncworICAgIHNlY29uZCBw
YXJhbWV0ZXIgdG8gYHRydWVgIGNhdXNlcyBpdCB0byByZXR1cm4gYWxsIHN1Y2Nlc3MgcGFyYW1l
dGVycworICAgIGFzIGFuIGFycmF5OgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgdmFyIHJl
cXVlc3QgPSBSU1ZQLmRlbm9kZWlmeShyZXF1aXJlKCdyZXF1ZXN0JyksIHRydWUpOworICAKKyAg
ICByZXF1ZXN0KCdodHRwOi8vZXhhbXBsZS5jb20nKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkgewor
ICAgICAgLy8gcmVzdWx0WzBdIC0+IHJlcworICAgICAgLy8gcmVzdWx0WzFdIC0+IGJvZHkKKyAg
ICB9KTsKKyAgICBgYGAKKyAgCisgICAgT3IgaWYgeW91IHBhc3MgaXQgYW4gYXJyYXkgd2l0aCBu
YW1lcyBpdCByZXR1cm5zIHRoZSBwYXJhbWV0ZXJzIGFzIGEgaGFzaDoKKyAgCisgICAgYGBgamF2
YXNjcmlwdAorICAgIHZhciByZXF1ZXN0ID0gUlNWUC5kZW5vZGVpZnkocmVxdWlyZSgncmVxdWVz
dCcpLCBbJ3JlcycsICdib2R5J10pOworICAKKyAgICByZXF1ZXN0KCdodHRwOi8vZXhhbXBsZS5j
b20nKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgICAgLy8gcmVzdWx0LnJlcworICAgICAg
Ly8gcmVzdWx0LmJvZHkKKyAgICB9KTsKKyAgICBgYGAKKyAgCisgICAgU29tZXRpbWVzIHlvdSBu
ZWVkIHRvIHJldGFpbiB0aGUgYHRoaXNgOgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgdmFy
IGFwcCA9IHJlcXVpcmUoJ2V4cHJlc3MnKSgpOworICAgIHZhciByZW5kZXIgPSBSU1ZQLmRlbm9k
ZWlmeShhcHAucmVuZGVyLmJpbmQoYXBwKSk7CisgICAgYGBgCisgIAorICAgIFRoZSBkZW5vZGlm
aWVkIGZ1bmN0aW9uIGluaGVyaXRzIGZyb20gdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLiBJdCB3b3Jr
cyBpbiBhbGwKKyAgICBlbnZpcm9ubWVudHMsIGV4Y2VwdCBJRSAxMCBhbmQgYmVsb3cuIENvbnNl
cXVlbnRseSBhbGwgcHJvcGVydGllcyBvZiB0aGUgb3JpZ2luYWwKKyAgICBmdW5jdGlvbiBhcmUg
YXZhaWxhYmxlIHRvIHlvdS4gSG93ZXZlciwgYW55IHByb3BlcnRpZXMgeW91IGNoYW5nZSBvbiB0
aGUKKyAgICBkZW5vZGVpZmllZCBmdW5jdGlvbiB3b24ndCBiZSBjaGFuZ2VkIG9uIHRoZSBvcmln
aW5hbCBmdW5jdGlvbi4gRXhhbXBsZToKKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIHZhciBy
ZXF1ZXN0ID0gUlNWUC5kZW5vZGVpZnkocmVxdWlyZSgncmVxdWVzdCcpKSwKKyAgICAgICAgY29v
a2llSmFyID0gcmVxdWVzdC5qYXIoKTsgLy8gPC0gSW5oZXJpdGFuY2UgaXMgdXNlZCBoZXJlCisg
IAorICAgIHJlcXVlc3QoJ2h0dHA6Ly9leGFtcGxlLmNvbScsIHtqYXI6IGNvb2tpZUphcn0pLnRo
ZW4oZnVuY3Rpb24ocmVzKSB7CisgICAgICAvLyBjb29raWVKYXIuY29va2llcyBob2xkcyBub3cg
dGhlIGNvb2tpZXMgcmV0dXJuZWQgYnkgZXhhbXBsZS5jb20KKyAgICB9KTsKKyAgICBgYGAKKyAg
CisgICAgVXNpbmcgYGRlbm9kZWlmeWAgbWFrZXMgaXQgZWFzaWVyIHRvIGNvbXBvc2UgYXN5bmNo
cm9ub3VzIG9wZXJhdGlvbnMgaW5zdGVhZAorICAgIG9mIHVzaW5nIGNhbGxiYWNrcy4gRm9yIGV4
YW1wbGUsIGluc3RlYWQgb2Y6CisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAgICB2YXIgZnMgPSBy
ZXF1aXJlKCdmcycpOworICAKKyAgICBmcy5yZWFkRmlsZSgnbXlmaWxlLnR4dCcsIGZ1bmN0aW9u
KGVyciwgZGF0YSl7CisgICAgICBpZiAoZXJyKSB7IC4uLiB9IC8vIEhhbmRsZSBlcnJvcgorICAg
ICAgZnMud3JpdGVGaWxlKCdteWZpbGUyLnR4dCcsIGRhdGEsIGZ1bmN0aW9uKGVycil7CisgICAg
ICAgIGlmIChlcnIpIHsgLi4uIH0gLy8gSGFuZGxlIGVycm9yCisgICAgICAgIGNvbnNvbGUubG9n
KCdkb25lJykKKyAgICAgIH0pOworICAgIH0pOworICAgIGBgYAorICAKKyAgICB5b3UgY2FuIGNo
YWluIHRoZSBvcGVyYXRpb25zIHRvZ2V0aGVyIHVzaW5nIGB0aGVuYCBmcm9tIHRoZSByZXR1cm5l
ZCBwcm9taXNlOgorICAKKyAgICBgYGBqYXZhc2NyaXB0CisgICAgdmFyIGZzID0gcmVxdWlyZSgn
ZnMnKTsKKyAgICB2YXIgcmVhZEZpbGUgPSBSU1ZQLmRlbm9kZWlmeShmcy5yZWFkRmlsZSk7Cisg
ICAgdmFyIHdyaXRlRmlsZSA9IFJTVlAuZGVub2RlaWZ5KGZzLndyaXRlRmlsZSk7CisgIAorICAg
IHJlYWRGaWxlKCdteWZpbGUudHh0JykudGhlbihmdW5jdGlvbihkYXRhKXsKKyAgICAgIHJldHVy
biB3cml0ZUZpbGUoJ215ZmlsZTIudHh0JywgZGF0YSk7CisgICAgfSkudGhlbihmdW5jdGlvbigp
eworICAgICAgY29uc29sZS5sb2coJ2RvbmUnKQorICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycm9y
KXsKKyAgICAgIC8vIEhhbmRsZSBlcnJvcgorICAgIH0pOworICAgIGBgYAorICAKKyAgICBAbWV0
aG9kIGRlbm9kZWlmeQorICAgIEBzdGF0aWMKKyAgICBAZm9yIFJTVlAKKyAgICBAcGFyYW0ge0Z1
bmN0aW9ufSBub2RlRnVuYyBhICdub2RlLXN0eWxlJyBmdW5jdGlvbiB0aGF0IHRha2VzIGEgY2Fs
bGJhY2sgYXMKKyAgICBpdHMgbGFzdCBhcmd1bWVudC4gVGhlIGNhbGxiYWNrIGV4cGVjdHMgYW4g
ZXJyb3IgdG8gYmUgcGFzc2VkIGFzIGl0cyBmaXJzdAorICAgIGFyZ3VtZW50IChpZiBhbiBlcnJv
ciBvY2N1cnJlZCwgb3RoZXJ3aXNlIG51bGwpLCBhbmQgdGhlIHZhbHVlIGZyb20gdGhlCisgICAg
b3BlcmF0aW9uIGFzIGl0cyBzZWNvbmQgYXJndW1lbnQgKCdmdW5jdGlvbihlcnIsIHZhbHVlKXsg
fScpLgorICAgIEBwYXJhbSB7Qm9vbGVhbnxBcnJheX0gW29wdGlvbnNdIEFuIG9wdGlvbmFsIHBh
cmFtdGVyIHRoYXQgaWYgc2V0CisgICAgdG8gYHRydWVgIGNhdXNlcyB0aGUgcHJvbWlzZSB0byBm
dWxmaWxsIHdpdGggdGhlIGNhbGxiYWNrJ3Mgc3VjY2VzcyBhcmd1bWVudHMKKyAgICBhcyBhbiBh
cnJheS4gVGhpcyBpcyB1c2VmdWwgaWYgdGhlIG5vZGUgZnVuY3Rpb24gaGFzIG11bHRpcGxlIHN1
Y2Nlc3MKKyAgICBwYXJhbXRlcnMuIElmIHlvdSBzZXQgdGhpcyBwYXJhbXRlciB0byBhbiBhcnJh
eSB3aXRoIG5hbWVzLCB0aGUgcHJvbWlzZSB3aWxsCisgICAgZnVsZmlsbCB3aXRoIGEgaGFzaCB3
aXRoIHRoZXNlIG5hbWVzIGFzIGtleXMgYW5kIHRoZSBzdWNjZXNzIHBhcmFtZXRlcnMgYXMKKyAg
ICB2YWx1ZXMuCisgICAgQHJldHVybiB7RnVuY3Rpb259IGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBg
bm9kZUZ1bmNgIHRvIHJldHVybiBhbgorICAgIGBSU1ZQLlByb21pc2VgCisgICAgQHN0YXRpYwor
ICAqLworCisgIGZ1bmN0aW9uIGRlbm9kZWlmeShub2RlRnVuYywgb3B0aW9ucykgeworICAgIHZh
ciBmbiA9IGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAgIHZhciBs
ID0gYXJndW1lbnRzLmxlbmd0aDsKKyAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGwgKyAxKTsK
KyAgICAgIHZhciBhcmc7CisgICAgICB2YXIgcHJvbWlzZUlucHV0ID0gZmFsc2U7CisKKyAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgbDsgKytpKSB7CisgICAgICAgIGFyZyA9IGFyZ3VtZW50c1tp
XTsKKworICAgICAgICBpZiAoIXByb21pc2VJbnB1dCkgeworICAgICAgICAgIC8vIFRPRE86IGNs
ZWFuIHRoaXMgdXAKKyAgICAgICAgICBwcm9taXNlSW5wdXQgPSBuZWVkc1Byb21pc2VJbnB1dChh
cmcpOworICAgICAgICAgIGlmIChwcm9taXNlSW5wdXQgPT09IEdFVF9USEVOX0VSUk9SKSB7Cisg
ICAgICAgICAgICB2YXIgcCA9IG5ldyBfcnN2cFByb21pc2UuZGVmYXVsdChfcnN2cEludGVybmFs
Lm5vb3ApOworICAgICAgICAgICAgX3JzdnBJbnRlcm5hbC5yZWplY3QocCwgR0VUX1RIRU5fRVJS
T1IudmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIHA7CisgICAgICAgICAgfSBlbHNlIGlmIChw
cm9taXNlSW5wdXQgJiYgcHJvbWlzZUlucHV0ICE9PSB0cnVlKSB7CisgICAgICAgICAgICBhcmcg
PSB3cmFwVGhlbmFibGUocHJvbWlzZUlucHV0LCBhcmcpOworICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBhcmdzW2ldID0gYXJnOworICAgICAgfQorCisgICAgICB2YXIgcHJvbWlzZSA9
IG5ldyBfcnN2cFByb21pc2UuZGVmYXVsdChfcnN2cEludGVybmFsLm5vb3ApOworCisgICAgICBh
cmdzW2xdID0gZnVuY3Rpb24gKGVyciwgdmFsKSB7CisgICAgICAgIGlmIChlcnIpIF9yc3ZwSW50
ZXJuYWwucmVqZWN0KHByb21pc2UsIGVycik7ZWxzZSBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVk
KSBfcnN2cEludGVybmFsLnJlc29sdmUocHJvbWlzZSwgdmFsKTtlbHNlIGlmIChvcHRpb25zID09
PSB0cnVlKSBfcnN2cEludGVybmFsLnJlc29sdmUocHJvbWlzZSwgYXJyYXlSZXN1bHQoYXJndW1l
bnRzKSk7ZWxzZSBpZiAoX3JzdnBVdGlscy5pc0FycmF5KG9wdGlvbnMpKSBfcnN2cEludGVybmFs
LnJlc29sdmUocHJvbWlzZSwgbWFrZU9iamVjdChhcmd1bWVudHMsIG9wdGlvbnMpKTtlbHNlIF9y
c3ZwSW50ZXJuYWwucmVzb2x2ZShwcm9taXNlLCB2YWwpOworICAgICAgfTsKKworICAgICAgaWYg
KHByb21pc2VJbnB1dCkgeworICAgICAgICByZXR1cm4gaGFuZGxlUHJvbWlzZUlucHV0KHByb21p
c2UsIGFyZ3MsIG5vZGVGdW5jLCBzZWxmKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVy
biBoYW5kbGVWYWx1ZUlucHV0KHByb21pc2UsIGFyZ3MsIG5vZGVGdW5jLCBzZWxmKTsKKyAgICAg
IH0KKyAgICB9OworCisgICAgX2RlZmF1bHRzKGZuLCBub2RlRnVuYyk7CisKKyAgICByZXR1cm4g
Zm47CisgIH0KKworICBmdW5jdGlvbiBoYW5kbGVWYWx1ZUlucHV0KHByb21pc2UsIGFyZ3MsIG5v
ZGVGdW5jLCBzZWxmKSB7CisgICAgdmFyIHJlc3VsdCA9IHRyeUFwcGx5KG5vZGVGdW5jLCBzZWxm
LCBhcmdzKTsKKyAgICBpZiAocmVzdWx0ID09PSBFUlJPUikgeworICAgICAgX3JzdnBJbnRlcm5h
bC5yZWplY3QocHJvbWlzZSwgcmVzdWx0LnZhbHVlKTsKKyAgICB9CisgICAgcmV0dXJuIHByb21p
c2U7CisgIH0KKworICBmdW5jdGlvbiBoYW5kbGVQcm9taXNlSW5wdXQocHJvbWlzZSwgYXJncywg
bm9kZUZ1bmMsIHNlbGYpIHsKKyAgICByZXR1cm4gX3JzdnBQcm9taXNlLmRlZmF1bHQuYWxsKGFy
Z3MpLnRoZW4oZnVuY3Rpb24gKGFyZ3MpIHsKKyAgICAgIHZhciByZXN1bHQgPSB0cnlBcHBseShu
b2RlRnVuYywgc2VsZiwgYXJncyk7CisgICAgICBpZiAocmVzdWx0ID09PSBFUlJPUikgeworICAg
ICAgICBfcnN2cEludGVybmFsLnJlamVjdChwcm9taXNlLCByZXN1bHQudmFsdWUpOworICAgICAg
fQorICAgICAgcmV0dXJuIHByb21pc2U7CisgICAgfSk7CisgIH0KKworICBmdW5jdGlvbiBuZWVk
c1Byb21pc2VJbnB1dChhcmcpIHsKKyAgICBpZiAoYXJnICYmIHR5cGVvZiBhcmcgPT09ICdvYmpl
Y3QnKSB7CisgICAgICBpZiAoYXJnLmNvbnN0cnVjdG9yID09PSBfcnN2cFByb21pc2UuZGVmYXVs
dCkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVy
biBnZXRUaGVuKGFyZyk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgIH0KK30pOworZW5pZmVkKCdyc3ZwL3BsYXRmb3JtJywgWydleHBvcnRzJ10s
IGZ1bmN0aW9uIChleHBvcnRzKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICB2YXIgcGxhdGZvcm07
CisKKyAgLyogZ2xvYmFsIHNlbGYgKi8KKyAgaWYgKHR5cGVvZiBzZWxmID09PSAnb2JqZWN0Jykg
eworICAgIHBsYXRmb3JtID0gc2VsZjsKKworICAgIC8qIGdsb2JhbCBnbG9iYWwgKi8KKyAgfSBl
bHNlIGlmICh0eXBlb2YgZ2xvYmFsID09PSAnb2JqZWN0JykgeworICAgICAgcGxhdGZvcm0gPSBn
bG9iYWw7CisgICAgfSBlbHNlIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcignbm8gZ2xvYmFsOiBg
c2VsZmAgb3IgYGdsb2JhbGAgZm91bmQnKTsKKyAgICB9CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0g
cGxhdGZvcm07Cit9KTsKK2VuaWZlZCgncnN2cC9wcm9taXNlLWhhc2gnLCBbJ2V4cG9ydHMnLCAn
cnN2cC9lbnVtZXJhdG9yJywgJ3JzdnAvLWludGVybmFsJywgJ3JzdnAvdXRpbHMnXSwgZnVuY3Rp
b24gKGV4cG9ydHMsIF9yc3ZwRW51bWVyYXRvciwgX3JzdnBJbnRlcm5hbCwgX3JzdnBVdGlscykg
eworICAndXNlIHN0cmljdCc7CisKKyAgZnVuY3Rpb24gUHJvbWlzZUhhc2goQ29uc3RydWN0b3Is
IG9iamVjdCwgbGFiZWwpIHsKKyAgICB0aGlzLl9zdXBlckNvbnN0cnVjdG9yKENvbnN0cnVjdG9y
LCBvYmplY3QsIHRydWUsIGxhYmVsKTsKKyAgfQorCisgIGV4cG9ydHMuZGVmYXVsdCA9IFByb21p
c2VIYXNoOworCisgIFByb21pc2VIYXNoLnByb3RvdHlwZSA9IF9yc3ZwVXRpbHMub19jcmVhdGUo
X3JzdnBFbnVtZXJhdG9yLmRlZmF1bHQucHJvdG90eXBlKTsKKyAgUHJvbWlzZUhhc2gucHJvdG90
eXBlLl9zdXBlckNvbnN0cnVjdG9yID0gX3JzdnBFbnVtZXJhdG9yLmRlZmF1bHQ7CisgIFByb21p
c2VIYXNoLnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uICgpIHsKKyAgICB0aGlzLl9yZXN1bHQg
PSB7fTsKKyAgfTsKKworICBQcm9taXNlSGFzaC5wcm90b3R5cGUuX3ZhbGlkYXRlSW5wdXQgPSBm
dW5jdGlvbiAoaW5wdXQpIHsKKyAgICByZXR1cm4gaW5wdXQgJiYgdHlwZW9mIGlucHV0ID09PSAn
b2JqZWN0JzsKKyAgfTsKKworICBQcm9taXNlSGFzaC5wcm90b3R5cGUuX3ZhbGlkYXRpb25FcnJv
ciA9IGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4gbmV3IEVycm9yKCdQcm9taXNlLmhhc2ggbXVz
dCBiZSBjYWxsZWQgd2l0aCBhbiBvYmplY3QnKTsKKyAgfTsKKworICBQcm9taXNlSGFzaC5wcm90
b3R5cGUuX2VudW1lcmF0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgZW51bWVyYXRvciA9IHRo
aXM7CisgICAgdmFyIHByb21pc2UgPSBlbnVtZXJhdG9yLnByb21pc2U7CisgICAgdmFyIGlucHV0
ID0gZW51bWVyYXRvci5faW5wdXQ7CisgICAgdmFyIHJlc3VsdHMgPSBbXTsKKworICAgIGZvciAo
dmFyIGtleSBpbiBpbnB1dCkgeworICAgICAgaWYgKHByb21pc2UuX3N0YXRlID09PSBfcnN2cElu
dGVybmFsLlBFTkRJTkcgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGlu
cHV0LCBrZXkpKSB7CisgICAgICAgIHJlc3VsdHMucHVzaCh7CisgICAgICAgICAgcG9zaXRpb246
IGtleSwKKyAgICAgICAgICBlbnRyeTogaW5wdXRba2V5XQorICAgICAgICB9KTsKKyAgICAgIH0K
KyAgICB9CisKKyAgICB2YXIgbGVuZ3RoID0gcmVzdWx0cy5sZW5ndGg7CisgICAgZW51bWVyYXRv
ci5fcmVtYWluaW5nID0gbGVuZ3RoOworICAgIHZhciByZXN1bHQ7CisKKyAgICBmb3IgKHZhciBp
ID0gMDsgcHJvbWlzZS5fc3RhdGUgPT09IF9yc3ZwSW50ZXJuYWwuUEVORElORyAmJiBpIDwgbGVu
Z3RoOyBpKyspIHsKKyAgICAgIHJlc3VsdCA9IHJlc3VsdHNbaV07CisgICAgICBlbnVtZXJhdG9y
Ll9lYWNoRW50cnkocmVzdWx0LmVudHJ5LCByZXN1bHQucG9zaXRpb24pOworICAgIH0KKyAgfTsK
K30pOworZW5pZmVkKCdyc3ZwL3Byb21pc2UnLCBbJ2V4cG9ydHMnLCAncnN2cC9jb25maWcnLCAn
cnN2cC9pbnN0cnVtZW50JywgJ3JzdnAvdXRpbHMnLCAncnN2cC8taW50ZXJuYWwnLCAncnN2cC9w
cm9taXNlL2FsbCcsICdyc3ZwL3Byb21pc2UvcmFjZScsICdyc3ZwL3Byb21pc2UvcmVzb2x2ZScs
ICdyc3ZwL3Byb21pc2UvcmVqZWN0J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfcnN2cENvbmZpZywg
X3JzdnBJbnN0cnVtZW50LCBfcnN2cFV0aWxzLCBfcnN2cEludGVybmFsLCBfcnN2cFByb21pc2VB
bGwsIF9yc3ZwUHJvbWlzZVJhY2UsIF9yc3ZwUHJvbWlzZVJlc29sdmUsIF9yc3ZwUHJvbWlzZVJl
amVjdCkgeworICAndXNlIHN0cmljdCc7CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gUHJvbWlzZTsK
KworICB2YXIgZ3VpZEtleSA9ICdyc3ZwXycgKyBfcnN2cFV0aWxzLm5vdygpICsgJy0nOworICB2
YXIgY291bnRlciA9IDA7CisKKyAgZnVuY3Rpb24gbmVlZHNSZXNvbHZlcigpIHsKKyAgICB0aHJv
dyBuZXcgVHlwZUVycm9yKCdZb3UgbXVzdCBwYXNzIGEgcmVzb2x2ZXIgZnVuY3Rpb24gYXMgdGhl
IGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBwcm9taXNlIGNvbnN0cnVjdG9yJyk7CisgIH0KKworICBm
dW5jdGlvbiBuZWVkc05ldygpIHsKKyAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJGYWlsZWQgdG8g
Y29uc3RydWN0ICdQcm9taXNlJzogUGxlYXNlIHVzZSB0aGUgJ25ldycgb3BlcmF0b3IsIHRoaXMg
b2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4iKTsKKyAg
fQorCisgIC8qKgorICAgIFByb21pc2Ugb2JqZWN0cyByZXByZXNlbnQgdGhlIGV2ZW50dWFsIHJl
c3VsdCBvZiBhbiBhc3luY2hyb25vdXMgb3BlcmF0aW9uLiBUaGUKKyAgICBwcmltYXJ5IHdheSBv
ZiBpbnRlcmFjdGluZyB3aXRoIGEgcHJvbWlzZSBpcyB0aHJvdWdoIGl0cyBgdGhlbmAgbWV0aG9k
LCB3aGljaAorICAgIHJlZ2lzdGVycyBjYWxsYmFja3MgdG8gcmVjZWl2ZSBlaXRoZXIgYSBwcm9t
aXNl4oCZcyBldmVudHVhbCB2YWx1ZSBvciB0aGUgcmVhc29uCisgICAgd2h5IHRoZSBwcm9taXNl
IGNhbm5vdCBiZSBmdWxmaWxsZWQuCisgIAorICAgIFRlcm1pbm9sb2d5CisgICAgLS0tLS0tLS0t
LS0KKyAgCisgICAgLSBgcHJvbWlzZWAgaXMgYW4gb2JqZWN0IG9yIGZ1bmN0aW9uIHdpdGggYSBg
dGhlbmAgbWV0aG9kIHdob3NlIGJlaGF2aW9yIGNvbmZvcm1zIHRvIHRoaXMgc3BlY2lmaWNhdGlv
bi4KKyAgICAtIGB0aGVuYWJsZWAgaXMgYW4gb2JqZWN0IG9yIGZ1bmN0aW9uIHRoYXQgZGVmaW5l
cyBhIGB0aGVuYCBtZXRob2QuCisgICAgLSBgdmFsdWVgIGlzIGFueSBsZWdhbCBKYXZhU2NyaXB0
IHZhbHVlIChpbmNsdWRpbmcgdW5kZWZpbmVkLCBhIHRoZW5hYmxlLCBvciBhIHByb21pc2UpLgor
ICAgIC0gYGV4Y2VwdGlvbmAgaXMgYSB2YWx1ZSB0aGF0IGlzIHRocm93biB1c2luZyB0aGUgdGhy
b3cgc3RhdGVtZW50LgorICAgIC0gYHJlYXNvbmAgaXMgYSB2YWx1ZSB0aGF0IGluZGljYXRlcyB3
aHkgYSBwcm9taXNlIHdhcyByZWplY3RlZC4KKyAgICAtIGBzZXR0bGVkYCB0aGUgZmluYWwgcmVz
dGluZyBzdGF0ZSBvZiBhIHByb21pc2UsIGZ1bGZpbGxlZCBvciByZWplY3RlZC4KKyAgCisgICAg
QSBwcm9taXNlIGNhbiBiZSBpbiBvbmUgb2YgdGhyZWUgc3RhdGVzOiBwZW5kaW5nLCBmdWxmaWxs
ZWQsIG9yIHJlamVjdGVkLgorICAKKyAgICBQcm9taXNlcyB0aGF0IGFyZSBmdWxmaWxsZWQgaGF2
ZSBhIGZ1bGZpbGxtZW50IHZhbHVlIGFuZCBhcmUgaW4gdGhlIGZ1bGZpbGxlZAorICAgIHN0YXRl
LiAgUHJvbWlzZXMgdGhhdCBhcmUgcmVqZWN0ZWQgaGF2ZSBhIHJlamVjdGlvbiByZWFzb24gYW5k
IGFyZSBpbiB0aGUKKyAgICByZWplY3RlZCBzdGF0ZS4gIEEgZnVsZmlsbG1lbnQgdmFsdWUgaXMg
bmV2ZXIgYSB0aGVuYWJsZS4KKyAgCisgICAgUHJvbWlzZXMgY2FuIGFsc28gYmUgc2FpZCB0byAq
cmVzb2x2ZSogYSB2YWx1ZS4gIElmIHRoaXMgdmFsdWUgaXMgYWxzbyBhCisgICAgcHJvbWlzZSwg
dGhlbiB0aGUgb3JpZ2luYWwgcHJvbWlzZSdzIHNldHRsZWQgc3RhdGUgd2lsbCBtYXRjaCB0aGUg
dmFsdWUncworICAgIHNldHRsZWQgc3RhdGUuICBTbyBhIHByb21pc2UgdGhhdCAqcmVzb2x2ZXMq
IGEgcHJvbWlzZSB0aGF0IHJlamVjdHMgd2lsbAorICAgIGl0c2VsZiByZWplY3QsIGFuZCBhIHBy
b21pc2UgdGhhdCAqcmVzb2x2ZXMqIGEgcHJvbWlzZSB0aGF0IGZ1bGZpbGxzIHdpbGwKKyAgICBp
dHNlbGYgZnVsZmlsbC4KKyAgCisgIAorICAgIEJhc2ljIFVzYWdlOgorICAgIC0tLS0tLS0tLS0t
LQorICAKKyAgICBgYGBqcworICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24o
cmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICAvLyBvbiBzdWNjZXNzCisgICAgICByZXNvbHZlKHZh
bHVlKTsKKyAgCisgICAgICAvLyBvbiBmYWlsdXJlCisgICAgICByZWplY3QocmVhc29uKTsKKyAg
ICB9KTsKKyAgCisgICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICAvLyBv
biBmdWxmaWxsbWVudAorICAgIH0sIGZ1bmN0aW9uKHJlYXNvbikgeworICAgICAgLy8gb24gcmVq
ZWN0aW9uCisgICAgfSk7CisgICAgYGBgCisgIAorICAgIEFkdmFuY2VkIFVzYWdlOgorICAgIC0t
LS0tLS0tLS0tLS0tLQorICAKKyAgICBQcm9taXNlcyBzaGluZSB3aGVuIGFic3RyYWN0aW5nIGF3
YXkgYXN5bmNocm9ub3VzIGludGVyYWN0aW9ucyBzdWNoIGFzCisgICAgYFhNTEh0dHBSZXF1ZXN0
YHMuCisgIAorICAgIGBgYGpzCisgICAgZnVuY3Rpb24gZ2V0SlNPTih1cmwpIHsKKyAgICAgIHJl
dHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpeworICAgICAgICB2YXIg
eGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgIAorICAgICAgICB4aHIub3BlbignR0VUJywg
dXJsKTsKKyAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGhhbmRsZXI7CisgICAgICAg
IHhoci5yZXNwb25zZVR5cGUgPSAnanNvbic7CisgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVy
KCdBY2NlcHQnLCAnYXBwbGljYXRpb24vanNvbicpOworICAgICAgICB4aHIuc2VuZCgpOworICAK
KyAgICAgICAgZnVuY3Rpb24gaGFuZGxlcigpIHsKKyAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0
YXRlID09PSB0aGlzLkRPTkUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAw
KSB7CisgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5yZXNwb25zZSk7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdnZXRKU09OOiBgJyArIHVy
bCArICdgIGZhaWxlZCB3aXRoIHN0YXR1czogWycgKyB0aGlzLnN0YXR1cyArICddJykpOworICAg
ICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgIH0pOworICAgIH0KKyAg
CisgICAgZ2V0SlNPTignL3Bvc3RzLmpzb24nKS50aGVuKGZ1bmN0aW9uKGpzb24pIHsKKyAgICAg
IC8vIG9uIGZ1bGZpbGxtZW50CisgICAgfSwgZnVuY3Rpb24ocmVhc29uKSB7CisgICAgICAvLyBv
biByZWplY3Rpb24KKyAgICB9KTsKKyAgICBgYGAKKyAgCisgICAgVW5saWtlIGNhbGxiYWNrcywg
cHJvbWlzZXMgYXJlIGdyZWF0IGNvbXBvc2FibGUgcHJpbWl0aXZlcy4KKyAgCisgICAgYGBganMK
KyAgICBQcm9taXNlLmFsbChbCisgICAgICBnZXRKU09OKCcvcG9zdHMnKSwKKyAgICAgIGdldEpT
T04oJy9jb21tZW50cycpCisgICAgXSkudGhlbihmdW5jdGlvbih2YWx1ZXMpeworICAgICAgdmFs
dWVzWzBdIC8vID0+IHBvc3RzSlNPTgorICAgICAgdmFsdWVzWzFdIC8vID0+IGNvbW1lbnRzSlNP
TgorICAKKyAgICAgIHJldHVybiB2YWx1ZXM7CisgICAgfSk7CisgICAgYGBgCisgIAorICAgIEBj
bGFzcyBSU1ZQLlByb21pc2UKKyAgICBAcGFyYW0ge2Z1bmN0aW9ufSByZXNvbHZlcgorICAgIEBw
YXJhbSB7U3RyaW5nfSBsYWJlbCBvcHRpb25hbCBzdHJpbmcgZm9yIGxhYmVsaW5nIHRoZSBwcm9t
aXNlLgorICAgIFVzZWZ1bCBmb3IgdG9vbGluZy4KKyAgICBAY29uc3RydWN0b3IKKyAgKi8KKwor
ICBmdW5jdGlvbiBQcm9taXNlKHJlc29sdmVyLCBsYWJlbCkgeworICAgIHZhciBwcm9taXNlID0g
dGhpczsKKworICAgIHByb21pc2UuX2lkID0gY291bnRlcisrOworICAgIHByb21pc2UuX2xhYmVs
ID0gbGFiZWw7CisgICAgcHJvbWlzZS5fc3RhdGUgPSB1bmRlZmluZWQ7CisgICAgcHJvbWlzZS5f
cmVzdWx0ID0gdW5kZWZpbmVkOworICAgIHByb21pc2UuX3N1YnNjcmliZXJzID0gW107CisKKyAg
ICBpZiAoX3JzdnBDb25maWcuY29uZmlnLmluc3RydW1lbnQpIHsKKyAgICAgIF9yc3ZwSW5zdHJ1
bWVudC5kZWZhdWx0KCdjcmVhdGVkJywgcHJvbWlzZSk7CisgICAgfQorCisgICAgaWYgKF9yc3Zw
SW50ZXJuYWwubm9vcCAhPT0gcmVzb2x2ZXIpIHsKKyAgICAgIGlmICghX3JzdnBVdGlscy5pc0Z1
bmN0aW9uKHJlc29sdmVyKSkgeworICAgICAgICBuZWVkc1Jlc29sdmVyKCk7CisgICAgICB9CisK
KyAgICAgIGlmICghKHByb21pc2UgaW5zdGFuY2VvZiBQcm9taXNlKSkgeworICAgICAgICBuZWVk
c05ldygpOworICAgICAgfQorCisgICAgICBfcnN2cEludGVybmFsLmluaXRpYWxpemVQcm9taXNl
KHByb21pc2UsIHJlc29sdmVyKTsKKyAgICB9CisgIH0KKworICBQcm9taXNlLmNhc3QgPSBfcnN2
cFByb21pc2VSZXNvbHZlLmRlZmF1bHQ7IC8vIGRlcHJlY2F0ZWQKKyAgUHJvbWlzZS5hbGwgPSBf
cnN2cFByb21pc2VBbGwuZGVmYXVsdDsKKyAgUHJvbWlzZS5yYWNlID0gX3JzdnBQcm9taXNlUmFj
ZS5kZWZhdWx0OworICBQcm9taXNlLnJlc29sdmUgPSBfcnN2cFByb21pc2VSZXNvbHZlLmRlZmF1
bHQ7CisgIFByb21pc2UucmVqZWN0ID0gX3JzdnBQcm9taXNlUmVqZWN0LmRlZmF1bHQ7CisKKyAg
UHJvbWlzZS5wcm90b3R5cGUgPSB7CisgICAgY29uc3RydWN0b3I6IFByb21pc2UsCisKKyAgICBf
Z3VpZEtleTogZ3VpZEtleSwKKworICAgIF9vbkVycm9yOiBmdW5jdGlvbiAocmVhc29uKSB7Cisg
ICAgICB2YXIgcHJvbWlzZSA9IHRoaXM7CisgICAgICBfcnN2cENvbmZpZy5jb25maWcuYWZ0ZXIo
ZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAocHJvbWlzZS5fb25FcnJvcikgeworICAgICAgICAg
IF9yc3ZwQ29uZmlnLmNvbmZpZ1sndHJpZ2dlciddKCdlcnJvcicsIHJlYXNvbik7CisgICAgICAg
IH0KKyAgICAgIH0pOworICAgIH0sCisKKyAgICAvKioKKyAgICAgIFRoZSBwcmltYXJ5IHdheSBv
ZiBpbnRlcmFjdGluZyB3aXRoIGEgcHJvbWlzZSBpcyB0aHJvdWdoIGl0cyBgdGhlbmAgbWV0aG9k
LAorICAgICAgd2hpY2ggcmVnaXN0ZXJzIGNhbGxiYWNrcyB0byByZWNlaXZlIGVpdGhlciBhIHBy
b21pc2UncyBldmVudHVhbCB2YWx1ZSBvciB0aGUKKyAgICAgIHJlYXNvbiB3aHkgdGhlIHByb21p
c2UgY2Fubm90IGJlIGZ1bGZpbGxlZC4KKyAgICAKKyAgICAgIGBgYGpzCisgICAgICBmaW5kVXNl
cigpLnRoZW4oZnVuY3Rpb24odXNlcil7CisgICAgICAgIC8vIHVzZXIgaXMgYXZhaWxhYmxlCisg
ICAgICB9LCBmdW5jdGlvbihyZWFzb24peworICAgICAgICAvLyB1c2VyIGlzIHVuYXZhaWxhYmxl
LCBhbmQgeW91IGFyZSBnaXZlbiB0aGUgcmVhc29uIHdoeQorICAgICAgfSk7CisgICAgICBgYGAK
KyAgICAKKyAgICAgIENoYWluaW5nCisgICAgICAtLS0tLS0tLQorICAgIAorICAgICAgVGhlIHJl
dHVybiB2YWx1ZSBvZiBgdGhlbmAgaXMgaXRzZWxmIGEgcHJvbWlzZS4gIFRoaXMgc2Vjb25kLCAn
ZG93bnN0cmVhbScKKyAgICAgIHByb21pc2UgaXMgcmVzb2x2ZWQgd2l0aCB0aGUgcmV0dXJuIHZh
bHVlIG9mIHRoZSBmaXJzdCBwcm9taXNlJ3MgZnVsZmlsbG1lbnQKKyAgICAgIG9yIHJlamVjdGlv
biBoYW5kbGVyLCBvciByZWplY3RlZCBpZiB0aGUgaGFuZGxlciB0aHJvd3MgYW4gZXhjZXB0aW9u
LgorICAgIAorICAgICAgYGBganMKKyAgICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNl
cikgeworICAgICAgICByZXR1cm4gdXNlci5uYW1lOworICAgICAgfSwgZnVuY3Rpb24gKHJlYXNv
bikgeworICAgICAgICByZXR1cm4gJ2RlZmF1bHQgbmFtZSc7CisgICAgICB9KS50aGVuKGZ1bmN0
aW9uICh1c2VyTmFtZSkgeworICAgICAgICAvLyBJZiBgZmluZFVzZXJgIGZ1bGZpbGxlZCwgYHVz
ZXJOYW1lYCB3aWxsIGJlIHRoZSB1c2VyJ3MgbmFtZSwgb3RoZXJ3aXNlIGl0CisgICAgICAgIC8v
IHdpbGwgYmUgYCdkZWZhdWx0IG5hbWUnYAorICAgICAgfSk7CisgICAgCisgICAgICBmaW5kVXNl
cigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3Vu
ZCB1c2VyLCBidXQgc3RpbGwgdW5oYXBweScpOworICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikg
eworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2BmaW5kVXNlcmAgcmVqZWN0ZWQgYW5kIHdlJ3Jl
IHVuaGFwcHknKTsKKyAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgIC8v
IG5ldmVyIHJlYWNoZWQKKyAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHsKKyAgICAgICAgLy8g
aWYgYGZpbmRVc2VyYCBmdWxmaWxsZWQsIGByZWFzb25gIHdpbGwgYmUgJ0ZvdW5kIHVzZXIsIGJ1
dCBzdGlsbCB1bmhhcHB5Jy4KKyAgICAgICAgLy8gSWYgYGZpbmRVc2VyYCByZWplY3RlZCwgYHJl
YXNvbmAgd2lsbCBiZSAnYGZpbmRVc2VyYCByZWplY3RlZCBhbmQgd2UncmUgdW5oYXBweScuCisg
ICAgICB9KTsKKyAgICAgIGBgYAorICAgICAgSWYgdGhlIGRvd25zdHJlYW0gcHJvbWlzZSBkb2Vz
IG5vdCBzcGVjaWZ5IGEgcmVqZWN0aW9uIGhhbmRsZXIsIHJlamVjdGlvbiByZWFzb25zIHdpbGwg
YmUgcHJvcGFnYXRlZCBmdXJ0aGVyIGRvd25zdHJlYW0uCisgICAgCisgICAgICBgYGBqcworICAg
ICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7CisgICAgICAgIHRocm93IG5ldyBQ
ZWRhZ29naWNhbEV4Y2VwdGlvbignVXBzdHJlYW0gZXJyb3InKTsKKyAgICAgIH0pLnRoZW4oZnVu
Y3Rpb24gKHZhbHVlKSB7CisgICAgICAgIC8vIG5ldmVyIHJlYWNoZWQKKyAgICAgIH0pLnRoZW4o
ZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgIC8vIG5ldmVyIHJlYWNoZWQKKyAgICAgIH0sIGZ1
bmN0aW9uIChyZWFzb24pIHsKKyAgICAgICAgLy8gVGhlIGBQZWRnYWdvY2lhbEV4Y2VwdGlvbmAg
aXMgcHJvcGFnYXRlZCBhbGwgdGhlIHdheSBkb3duIHRvIGhlcmUKKyAgICAgIH0pOworICAgICAg
YGBgCisgICAgCisgICAgICBBc3NpbWlsYXRpb24KKyAgICAgIC0tLS0tLS0tLS0tLQorICAgIAor
ICAgICAgU29tZXRpbWVzIHRoZSB2YWx1ZSB5b3Ugd2FudCB0byBwcm9wYWdhdGUgdG8gYSBkb3du
c3RyZWFtIHByb21pc2UgY2FuIG9ubHkgYmUKKyAgICAgIHJldHJpZXZlZCBhc3luY2hyb25vdXNs
eS4gVGhpcyBjYW4gYmUgYWNoaWV2ZWQgYnkgcmV0dXJuaW5nIGEgcHJvbWlzZSBpbiB0aGUKKyAg
ICAgIGZ1bGZpbGxtZW50IG9yIHJlamVjdGlvbiBoYW5kbGVyLiBUaGUgZG93bnN0cmVhbSBwcm9t
aXNlIHdpbGwgdGhlbiBiZSBwZW5kaW5nCisgICAgICB1bnRpbCB0aGUgcmV0dXJuZWQgcHJvbWlz
ZSBpcyBzZXR0bGVkLiBUaGlzIGlzIGNhbGxlZCAqYXNzaW1pbGF0aW9uKi4KKyAgICAKKyAgICAg
IGBgYGpzCisgICAgICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHsKKyAgICAgICAg
cmV0dXJuIGZpbmRDb21tZW50c0J5QXV0aG9yKHVzZXIpOworICAgICAgfSkudGhlbihmdW5jdGlv
biAoY29tbWVudHMpIHsKKyAgICAgICAgLy8gVGhlIHVzZXIncyBjb21tZW50cyBhcmUgbm93IGF2
YWlsYWJsZQorICAgICAgfSk7CisgICAgICBgYGAKKyAgICAKKyAgICAgIElmIHRoZSBhc3NpbWxp
YXRlZCBwcm9taXNlIHJlamVjdHMsIHRoZW4gdGhlIGRvd25zdHJlYW0gcHJvbWlzZSB3aWxsIGFs
c28gcmVqZWN0LgorICAgIAorICAgICAgYGBganMKKyAgICAgIGZpbmRVc2VyKCkudGhlbihmdW5j
dGlvbiAodXNlcikgeworICAgICAgICByZXR1cm4gZmluZENvbW1lbnRzQnlBdXRob3IodXNlcik7
CisgICAgICB9KS50aGVuKGZ1bmN0aW9uIChjb21tZW50cykgeworICAgICAgICAvLyBJZiBgZmlu
ZENvbW1lbnRzQnlBdXRob3JgIGZ1bGZpbGxzLCB3ZSdsbCBoYXZlIHRoZSB2YWx1ZSBoZXJlCisg
ICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7CisgICAgICAgIC8vIElmIGBmaW5kQ29tbWVudHNC
eUF1dGhvcmAgcmVqZWN0cywgd2UnbGwgaGF2ZSB0aGUgcmVhc29uIGhlcmUKKyAgICAgIH0pOwor
ICAgICAgYGBgCisgICAgCisgICAgICBTaW1wbGUgRXhhbXBsZQorICAgICAgLS0tLS0tLS0tLS0t
LS0KKyAgICAKKyAgICAgIFN5bmNocm9ub3VzIEV4YW1wbGUKKyAgICAKKyAgICAgIGBgYGphdmFz
Y3JpcHQKKyAgICAgIHZhciByZXN1bHQ7CisgICAgCisgICAgICB0cnkgeworICAgICAgICByZXN1
bHQgPSBmaW5kUmVzdWx0KCk7CisgICAgICAgIC8vIHN1Y2Nlc3MKKyAgICAgIH0gY2F0Y2gocmVh
c29uKSB7CisgICAgICAgIC8vIGZhaWx1cmUKKyAgICAgIH0KKyAgICAgIGBgYAorICAgIAorICAg
ICAgRXJyYmFjayBFeGFtcGxlCisgICAgCisgICAgICBgYGBqcworICAgICAgZmluZFJlc3VsdChm
dW5jdGlvbihyZXN1bHQsIGVycil7CisgICAgICAgIGlmIChlcnIpIHsKKyAgICAgICAgICAvLyBm
YWlsdXJlCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgLy8gc3VjY2VzcworICAgICAgICB9
CisgICAgICB9KTsKKyAgICAgIGBgYAorICAgIAorICAgICAgUHJvbWlzZSBFeGFtcGxlOworICAg
IAorICAgICAgYGBgamF2YXNjcmlwdAorICAgICAgZmluZFJlc3VsdCgpLnRoZW4oZnVuY3Rpb24o
cmVzdWx0KXsKKyAgICAgICAgLy8gc3VjY2VzcworICAgICAgfSwgZnVuY3Rpb24ocmVhc29uKXsK
KyAgICAgICAgLy8gZmFpbHVyZQorICAgICAgfSk7CisgICAgICBgYGAKKyAgICAKKyAgICAgIEFk
dmFuY2VkIEV4YW1wbGUKKyAgICAgIC0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgICBTeW5jaHJv
bm91cyBFeGFtcGxlCisgICAgCisgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICB2YXIgYXV0aG9y
LCBib29rczsKKyAgICAKKyAgICAgIHRyeSB7CisgICAgICAgIGF1dGhvciA9IGZpbmRBdXRob3Io
KTsKKyAgICAgICAgYm9va3MgID0gZmluZEJvb2tzQnlBdXRob3IoYXV0aG9yKTsKKyAgICAgICAg
Ly8gc3VjY2VzcworICAgICAgfSBjYXRjaChyZWFzb24pIHsKKyAgICAgICAgLy8gZmFpbHVyZQor
ICAgICAgfQorICAgICAgYGBgCisgICAgCisgICAgICBFcnJiYWNrIEV4YW1wbGUKKyAgICAKKyAg
ICAgIGBgYGpzCisgICAgCisgICAgICBmdW5jdGlvbiBmb3VuZEJvb2tzKGJvb2tzKSB7CisgICAg
CisgICAgICB9CisgICAgCisgICAgICBmdW5jdGlvbiBmYWlsdXJlKHJlYXNvbikgeworICAgIAor
ICAgICAgfQorICAgIAorICAgICAgZmluZEF1dGhvcihmdW5jdGlvbihhdXRob3IsIGVycil7Cisg
ICAgICAgIGlmIChlcnIpIHsKKyAgICAgICAgICBmYWlsdXJlKGVycik7CisgICAgICAgICAgLy8g
ZmFpbHVyZQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICBm
aW5kQm9vb2tzQnlBdXRob3IoYXV0aG9yLCBmdW5jdGlvbihib29rcywgZXJyKSB7CisgICAgICAg
ICAgICAgIGlmIChlcnIpIHsKKyAgICAgICAgICAgICAgICBmYWlsdXJlKGVycik7CisgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAg
IGZvdW5kQm9va3MoYm9va3MpOworICAgICAgICAgICAgICAgIH0gY2F0Y2gocmVhc29uKSB7Cisg
ICAgICAgICAgICAgICAgICBmYWlsdXJlKHJlYXNvbik7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICB9IGNhdGNoKGVycm9yKSB7
CisgICAgICAgICAgICBmYWlsdXJlKGVycik7CisgICAgICAgICAgfQorICAgICAgICAgIC8vIHN1
Y2Nlc3MKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgICBgYGAKKyAgICAKKyAgICAgIFByb21p
c2UgRXhhbXBsZTsKKyAgICAKKyAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgIGZpbmRBdXRob3Io
KS4KKyAgICAgICAgdGhlbihmaW5kQm9va3NCeUF1dGhvcikuCisgICAgICAgIHRoZW4oZnVuY3Rp
b24oYm9va3MpeworICAgICAgICAgIC8vIGZvdW5kIGJvb2tzCisgICAgICB9KS5jYXRjaChmdW5j
dGlvbihyZWFzb24peworICAgICAgICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZworICAgICAgfSk7
CisgICAgICBgYGAKKyAgICAKKyAgICAgIEBtZXRob2QgdGhlbgorICAgICAgQHBhcmFtIHtGdW5j
dGlvbn0gb25GdWxmaWxsbWVudAorICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gb25SZWplY3Rpb24K
KyAgICAgIEBwYXJhbSB7U3RyaW5nfSBsYWJlbCBvcHRpb25hbCBzdHJpbmcgZm9yIGxhYmVsaW5n
IHRoZSBwcm9taXNlLgorICAgICAgVXNlZnVsIGZvciB0b29saW5nLgorICAgICAgQHJldHVybiB7
UHJvbWlzZX0KKyAgICAqLworICAgIHRoZW46IGZ1bmN0aW9uIChvbkZ1bGZpbGxtZW50LCBvblJl
amVjdGlvbiwgbGFiZWwpIHsKKyAgICAgIHZhciBwYXJlbnQgPSB0aGlzOworICAgICAgdmFyIHN0
YXRlID0gcGFyZW50Ll9zdGF0ZTsKKworICAgICAgaWYgKHN0YXRlID09PSBfcnN2cEludGVybmFs
LkZVTEZJTExFRCAmJiAhb25GdWxmaWxsbWVudCB8fCBzdGF0ZSA9PT0gX3JzdnBJbnRlcm5hbC5S
RUpFQ1RFRCAmJiAhb25SZWplY3Rpb24pIHsKKyAgICAgICAgaWYgKF9yc3ZwQ29uZmlnLmNvbmZp
Zy5pbnN0cnVtZW50KSB7CisgICAgICAgICAgX3JzdnBJbnN0cnVtZW50LmRlZmF1bHQoJ2NoYWlu
ZWQnLCBwYXJlbnQsIHBhcmVudCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHBhcmVudDsK
KyAgICAgIH0KKworICAgICAgcGFyZW50Ll9vbkVycm9yID0gbnVsbDsKKworICAgICAgdmFyIGNo
aWxkID0gbmV3IHBhcmVudC5jb25zdHJ1Y3RvcihfcnN2cEludGVybmFsLm5vb3AsIGxhYmVsKTsK
KyAgICAgIHZhciByZXN1bHQgPSBwYXJlbnQuX3Jlc3VsdDsKKworICAgICAgaWYgKF9yc3ZwQ29u
ZmlnLmNvbmZpZy5pbnN0cnVtZW50KSB7CisgICAgICAgIF9yc3ZwSW5zdHJ1bWVudC5kZWZhdWx0
KCdjaGFpbmVkJywgcGFyZW50LCBjaGlsZCk7CisgICAgICB9CisKKyAgICAgIGlmIChzdGF0ZSkg
eworICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHNbc3RhdGUgLSAxXTsKKyAgICAgICAg
X3JzdnBDb25maWcuY29uZmlnLmFzeW5jKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICBfcnN2cElu
dGVybmFsLmludm9rZUNhbGxiYWNrKHN0YXRlLCBjaGlsZCwgY2FsbGJhY2ssIHJlc3VsdCk7Cisg
ICAgICAgIH0pOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgX3JzdnBJbnRlcm5hbC5zdWJzY3Jp
YmUocGFyZW50LCBjaGlsZCwgb25GdWxmaWxsbWVudCwgb25SZWplY3Rpb24pOworICAgICAgfQor
CisgICAgICByZXR1cm4gY2hpbGQ7CisgICAgfSwKKworICAgIC8qKgorICAgICAgYGNhdGNoYCBp
cyBzaW1wbHkgc3VnYXIgZm9yIGB0aGVuKHVuZGVmaW5lZCwgb25SZWplY3Rpb24pYCB3aGljaCBt
YWtlcyBpdCB0aGUgc2FtZQorICAgICAgYXMgdGhlIGNhdGNoIGJsb2NrIG9mIGEgdHJ5L2NhdGNo
IHN0YXRlbWVudC4KKyAgICAKKyAgICAgIGBgYGpzCisgICAgICBmdW5jdGlvbiBmaW5kQXV0aG9y
KCl7CisgICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGRuJ3QgZmluZCB0aGF0IGF1dGhvcicp
OworICAgICAgfQorICAgIAorICAgICAgLy8gc3luY2hyb25vdXMKKyAgICAgIHRyeSB7CisgICAg
ICAgIGZpbmRBdXRob3IoKTsKKyAgICAgIH0gY2F0Y2gocmVhc29uKSB7CisgICAgICAgIC8vIHNv
bWV0aGluZyB3ZW50IHdyb25nCisgICAgICB9CisgICAgCisgICAgICAvLyBhc3luYyB3aXRoIHBy
b21pc2VzCisgICAgICBmaW5kQXV0aG9yKCkuY2F0Y2goZnVuY3Rpb24ocmVhc29uKXsKKyAgICAg
ICAgLy8gc29tZXRoaW5nIHdlbnQgd3JvbmcKKyAgICAgIH0pOworICAgICAgYGBgCisgICAgCisg
ICAgICBAbWV0aG9kIGNhdGNoCisgICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBvblJlamVjdGlvbgor
ICAgICAgQHBhcmFtIHtTdHJpbmd9IGxhYmVsIG9wdGlvbmFsIHN0cmluZyBmb3IgbGFiZWxpbmcg
dGhlIHByb21pc2UuCisgICAgICBVc2VmdWwgZm9yIHRvb2xpbmcuCisgICAgICBAcmV0dXJuIHtQ
cm9taXNlfQorICAgICovCisgICAgJ2NhdGNoJzogZnVuY3Rpb24gKG9uUmVqZWN0aW9uLCBsYWJl
bCkgeworICAgICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0aW9uLCBsYWJl
bCk7CisgICAgfSwKKworICAgIC8qKgorICAgICAgYGZpbmFsbHlgIHdpbGwgYmUgaW52b2tlZCBy
ZWdhcmRsZXNzIG9mIHRoZSBwcm9taXNlJ3MgZmF0ZSBqdXN0IGFzIG5hdGl2ZQorICAgICAgdHJ5
L2NhdGNoL2ZpbmFsbHkgYmVoYXZlcworICAgIAorICAgICAgU3luY2hyb25vdXMgZXhhbXBsZToK
KyAgICAKKyAgICAgIGBgYGpzCisgICAgICBmaW5kQXV0aG9yKCkgeworICAgICAgICBpZiAoTWF0
aC5yYW5kb20oKSA+IDAuNSkgeworICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBuZXcgQXV0aG9yKCk7CisgICAgICB9CisgICAgCisgICAgICB0
cnkgeworICAgICAgICByZXR1cm4gZmluZEF1dGhvcigpOyAvLyBzdWNjZWVkIG9yIGZhaWwKKyAg
ICAgIH0gY2F0Y2goZXJyb3IpIHsKKyAgICAgICAgcmV0dXJuIGZpbmRPdGhlckF1dGhlcigpOwor
ICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgLy8gYWx3YXlzIHJ1bnMKKyAgICAgICAgLy8gZG9l
c24ndCBhZmZlY3QgdGhlIHJldHVybiB2YWx1ZQorICAgICAgfQorICAgICAgYGBgCisgICAgCisg
ICAgICBBc3luY2hyb25vdXMgZXhhbXBsZToKKyAgICAKKyAgICAgIGBgYGpzCisgICAgICBmaW5k
QXV0aG9yKCkuY2F0Y2goZnVuY3Rpb24ocmVhc29uKXsKKyAgICAgICAgcmV0dXJuIGZpbmRPdGhl
ckF1dGhlcigpOworICAgICAgfSkuZmluYWxseShmdW5jdGlvbigpeworICAgICAgICAvLyBhdXRo
b3Igd2FzIGVpdGhlciBmb3VuZCwgb3Igbm90CisgICAgICB9KTsKKyAgICAgIGBgYAorICAgIAor
ICAgICAgQG1ldGhvZCBmaW5hbGx5CisgICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjawor
ICAgICAgQHBhcmFtIHtTdHJpbmd9IGxhYmVsIG9wdGlvbmFsIHN0cmluZyBmb3IgbGFiZWxpbmcg
dGhlIHByb21pc2UuCisgICAgICBVc2VmdWwgZm9yIHRvb2xpbmcuCisgICAgICBAcmV0dXJuIHtQ
cm9taXNlfQorICAgICovCisgICAgJ2ZpbmFsbHknOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGxhYmVs
KSB7CisgICAgICB2YXIgcHJvbWlzZSA9IHRoaXM7CisgICAgICB2YXIgY29uc3RydWN0b3IgPSBw
cm9taXNlLmNvbnN0cnVjdG9yOworCisgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKGZ1bmN0aW9u
ICh2YWx1ZSkgeworICAgICAgICByZXR1cm4gY29uc3RydWN0b3IucmVzb2x2ZShjYWxsYmFjaygp
KS50aGVuKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICAgIH0p
OworICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikgeworICAgICAgICByZXR1cm4gY29uc3RydWN0
b3IucmVzb2x2ZShjYWxsYmFjaygpKS50aGVuKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICB0aHJv
dyByZWFzb247CisgICAgICAgIH0pOworICAgICAgfSwgbGFiZWwpOworICAgIH0KKyAgfTsKK30p
OworZW5pZmVkKCdyc3ZwL3Byb21pc2UvYWxsJywgWydleHBvcnRzJywgJ3JzdnAvZW51bWVyYXRv
ciddLCBmdW5jdGlvbiAoZXhwb3J0cywgX3JzdnBFbnVtZXJhdG9yKSB7CisgICd1c2Ugc3RyaWN0
JzsKKworICBleHBvcnRzLmRlZmF1bHQgPSBhbGw7CisKKyAgLyoqCisgICAgYFJTVlAuUHJvbWlz
ZS5hbGxgIGFjY2VwdHMgYW4gYXJyYXkgb2YgcHJvbWlzZXMsIGFuZCByZXR1cm5zIGEgbmV3IHBy
b21pc2Ugd2hpY2gKKyAgICBpcyBmdWxmaWxsZWQgd2l0aCBhbiBhcnJheSBvZiBmdWxmaWxsbWVu
dCB2YWx1ZXMgZm9yIHRoZSBwYXNzZWQgcHJvbWlzZXMsIG9yCisgICAgcmVqZWN0ZWQgd2l0aCB0
aGUgcmVhc29uIG9mIHRoZSBmaXJzdCBwYXNzZWQgcHJvbWlzZSB0byBiZSByZWplY3RlZC4gSXQg
Y2FzdHMgYWxsCisgICAgZWxlbWVudHMgb2YgdGhlIHBhc3NlZCBpdGVyYWJsZSB0byBwcm9taXNl
cyBhcyBpdCBydW5zIHRoaXMgYWxnb3JpdGhtLgorICAKKyAgICBFeGFtcGxlOgorICAKKyAgICBg
YGBqYXZhc2NyaXB0CisgICAgdmFyIHByb21pc2UxID0gUlNWUC5yZXNvbHZlKDEpOworICAgIHZh
ciBwcm9taXNlMiA9IFJTVlAucmVzb2x2ZSgyKTsKKyAgICB2YXIgcHJvbWlzZTMgPSBSU1ZQLnJl
c29sdmUoMyk7CisgICAgdmFyIHByb21pc2VzID0gWyBwcm9taXNlMSwgcHJvbWlzZTIsIHByb21p
c2UzIF07CisgIAorICAgIFJTVlAuUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24o
YXJyYXkpeworICAgICAgLy8gVGhlIGFycmF5IGhlcmUgd291bGQgYmUgWyAxLCAyLCAzIF07Cisg
ICAgfSk7CisgICAgYGBgCisgIAorICAgIElmIGFueSBvZiB0aGUgYHByb21pc2VzYCBnaXZlbiB0
byBgUlNWUC5hbGxgIGFyZSByZWplY3RlZCwgdGhlIGZpcnN0IHByb21pc2UKKyAgICB0aGF0IGlz
IHJlamVjdGVkIHdpbGwgYmUgZ2l2ZW4gYXMgYW4gYXJndW1lbnQgdG8gdGhlIHJldHVybmVkIHBy
b21pc2VzJ3MKKyAgICByZWplY3Rpb24gaGFuZGxlci4gRm9yIGV4YW1wbGU6CisgIAorICAgIEV4
YW1wbGU6CisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAgICB2YXIgcHJvbWlzZTEgPSBSU1ZQLnJl
c29sdmUoMSk7CisgICAgdmFyIHByb21pc2UyID0gUlNWUC5yZWplY3QobmV3IEVycm9yKCIyIikp
OworICAgIHZhciBwcm9taXNlMyA9IFJTVlAucmVqZWN0KG5ldyBFcnJvcigiMyIpKTsKKyAgICB2
YXIgcHJvbWlzZXMgPSBbIHByb21pc2UxLCBwcm9taXNlMiwgcHJvbWlzZTMgXTsKKyAgCisgICAg
UlNWUC5Qcm9taXNlLmFsbChwcm9taXNlcykudGhlbihmdW5jdGlvbihhcnJheSl7CisgICAgICAv
LyBDb2RlIGhlcmUgbmV2ZXIgcnVucyBiZWNhdXNlIHRoZXJlIGFyZSByZWplY3RlZCBwcm9taXNl
cyEKKyAgICB9LCBmdW5jdGlvbihlcnJvcikgeworICAgICAgLy8gZXJyb3IubWVzc2FnZSA9PT0g
IjIiCisgICAgfSk7CisgICAgYGBgCisgIAorICAgIEBtZXRob2QgYWxsCisgICAgQHN0YXRpYwor
ICAgIEBwYXJhbSB7QXJyYXl9IGVudHJpZXMgYXJyYXkgb2YgcHJvbWlzZXMKKyAgICBAcGFyYW0g
e1N0cmluZ30gbGFiZWwgb3B0aW9uYWwgc3RyaW5nIGZvciBsYWJlbGluZyB0aGUgcHJvbWlzZS4K
KyAgICBVc2VmdWwgZm9yIHRvb2xpbmcuCisgICAgQHJldHVybiB7UHJvbWlzZX0gcHJvbWlzZSB0
aGF0IGlzIGZ1bGZpbGxlZCB3aGVuIGFsbCBgcHJvbWlzZXNgIGhhdmUgYmVlbgorICAgIGZ1bGZp
bGxlZCwgb3IgcmVqZWN0ZWQgaWYgYW55IG9mIHRoZW0gYmVjb21lIHJlamVjdGVkLgorICAgIEBz
dGF0aWMKKyAgKi8KKworICBmdW5jdGlvbiBhbGwoZW50cmllcywgbGFiZWwpIHsKKyAgICByZXR1
cm4gbmV3IF9yc3ZwRW51bWVyYXRvci5kZWZhdWx0KHRoaXMsIGVudHJpZXMsIHRydWUsIC8qIGFi
b3J0IG9uIHJlamVjdCAqL2xhYmVsKS5wcm9taXNlOworICB9Cit9KTsKK2VuaWZlZCgncnN2cC9w
cm9taXNlL3JhY2UnLCBbJ2V4cG9ydHMnLCAncnN2cC91dGlscycsICdyc3ZwLy1pbnRlcm5hbCdd
LCBmdW5jdGlvbiAoZXhwb3J0cywgX3JzdnBVdGlscywgX3JzdnBJbnRlcm5hbCkgeworICAndXNl
IHN0cmljdCc7CisKKyAgZXhwb3J0cy5kZWZhdWx0ID0gcmFjZTsKKworICAvKioKKyAgICBgUlNW
UC5Qcm9taXNlLnJhY2VgIHJldHVybnMgYSBuZXcgcHJvbWlzZSB3aGljaCBpcyBzZXR0bGVkIGlu
IHRoZSBzYW1lIHdheSBhcyB0aGUKKyAgICBmaXJzdCBwYXNzZWQgcHJvbWlzZSB0byBzZXR0bGUu
CisgIAorICAgIEV4YW1wbGU6CisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAgICB2YXIgcHJvbWlz
ZTEgPSBuZXcgUlNWUC5Qcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7CisgICAgICBz
ZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CisgICAgICAgIHJlc29sdmUoJ3Byb21pc2UgMScpOworICAg
ICAgfSwgMjAwKTsKKyAgICB9KTsKKyAgCisgICAgdmFyIHByb21pc2UyID0gbmV3IFJTVlAuUHJv
bWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpeworICAgICAgc2V0VGltZW91dChmdW5jdGlv
bigpeworICAgICAgICByZXNvbHZlKCdwcm9taXNlIDInKTsKKyAgICAgIH0sIDEwMCk7CisgICAg
fSk7CisgIAorICAgIFJTVlAuUHJvbWlzZS5yYWNlKFtwcm9taXNlMSwgcHJvbWlzZTJdKS50aGVu
KGZ1bmN0aW9uKHJlc3VsdCl7CisgICAgICAvLyByZXN1bHQgPT09ICdwcm9taXNlIDInIGJlY2F1
c2UgaXQgd2FzIHJlc29sdmVkIGJlZm9yZSBwcm9taXNlMQorICAgICAgLy8gd2FzIHJlc29sdmVk
LgorICAgIH0pOworICAgIGBgYAorICAKKyAgICBgUlNWUC5Qcm9taXNlLnJhY2VgIGlzIGRldGVy
bWluaXN0aWMgaW4gdGhhdCBvbmx5IHRoZSBzdGF0ZSBvZiB0aGUgZmlyc3QKKyAgICBzZXR0bGVk
IHByb21pc2UgbWF0dGVycy4gRm9yIGV4YW1wbGUsIGV2ZW4gaWYgb3RoZXIgcHJvbWlzZXMgZ2l2
ZW4gdG8gdGhlCisgICAgYHByb21pc2VzYCBhcnJheSBhcmd1bWVudCBhcmUgcmVzb2x2ZWQsIGJ1
dCB0aGUgZmlyc3Qgc2V0dGxlZCBwcm9taXNlIGhhcworICAgIGJlY29tZSByZWplY3RlZCBiZWZv
cmUgdGhlIG90aGVyIHByb21pc2VzIGJlY2FtZSBmdWxmaWxsZWQsIHRoZSByZXR1cm5lZAorICAg
IHByb21pc2Ugd2lsbCBiZWNvbWUgcmVqZWN0ZWQ6CisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAg
ICB2YXIgcHJvbWlzZTEgPSBuZXcgUlNWUC5Qcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVj
dCl7CisgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CisgICAgICAgIHJlc29sdmUoJ3Byb21p
c2UgMScpOworICAgICAgfSwgMjAwKTsKKyAgICB9KTsKKyAgCisgICAgdmFyIHByb21pc2UyID0g
bmV3IFJTVlAuUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpeworICAgICAgc2V0VGlt
ZW91dChmdW5jdGlvbigpeworICAgICAgICByZWplY3QobmV3IEVycm9yKCdwcm9taXNlIDInKSk7
CisgICAgICB9LCAxMDApOworICAgIH0pOworICAKKyAgICBSU1ZQLlByb21pc2UucmFjZShbcHJv
bWlzZTEsIHByb21pc2UyXSkudGhlbihmdW5jdGlvbihyZXN1bHQpeworICAgICAgLy8gQ29kZSBo
ZXJlIG5ldmVyIHJ1bnMKKyAgICB9LCBmdW5jdGlvbihyZWFzb24peworICAgICAgLy8gcmVhc29u
Lm1lc3NhZ2UgPT09ICdwcm9taXNlIDInIGJlY2F1c2UgcHJvbWlzZSAyIGJlY2FtZSByZWplY3Rl
ZCBiZWZvcmUKKyAgICAgIC8vIHByb21pc2UgMSBiZWNhbWUgZnVsZmlsbGVkCisgICAgfSk7Cisg
ICAgYGBgCisgIAorICAgIEFuIGV4YW1wbGUgcmVhbC13b3JsZCB1c2UgY2FzZSBpcyBpbXBsZW1l
bnRpbmcgdGltZW91dHM6CisgIAorICAgIGBgYGphdmFzY3JpcHQKKyAgICBSU1ZQLlByb21pc2Uu
cmFjZShbYWpheCgnZm9vLmpzb24nKSwgdGltZW91dCg1MDAwKV0pCisgICAgYGBgCisgIAorICAg
IEBtZXRob2QgcmFjZQorICAgIEBzdGF0aWMKKyAgICBAcGFyYW0ge0FycmF5fSBlbnRyaWVzIGFy
cmF5IG9mIHByb21pc2VzIHRvIG9ic2VydmUKKyAgICBAcGFyYW0ge1N0cmluZ30gbGFiZWwgb3B0
aW9uYWwgc3RyaW5nIGZvciBkZXNjcmliaW5nIHRoZSBwcm9taXNlIHJldHVybmVkLgorICAgIFVz
ZWZ1bCBmb3IgdG9vbGluZy4KKyAgICBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2Ugd2hpY2gg
c2V0dGxlcyBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlIGZpcnN0IHBhc3NlZAorICAgIHByb21pc2Ug
dG8gc2V0dGxlLgorICAqLworCisgIGZ1bmN0aW9uIHJhY2UoZW50cmllcywgbGFiZWwpIHsKKyAg
ICAvKmpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqLworICAgIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7
CisKKyAgICB2YXIgcHJvbWlzZSA9IG5ldyBDb25zdHJ1Y3RvcihfcnN2cEludGVybmFsLm5vb3As
IGxhYmVsKTsKKworICAgIGlmICghX3JzdnBVdGlscy5pc0FycmF5KGVudHJpZXMpKSB7CisgICAg
ICBfcnN2cEludGVybmFsLnJlamVjdChwcm9taXNlLCBuZXcgVHlwZUVycm9yKCdZb3UgbXVzdCBw
YXNzIGFuIGFycmF5IHRvIHJhY2UuJykpOworICAgICAgcmV0dXJuIHByb21pc2U7CisgICAgfQor
CisgICAgdmFyIGxlbmd0aCA9IGVudHJpZXMubGVuZ3RoOworCisgICAgZnVuY3Rpb24gb25GdWxm
aWxsbWVudCh2YWx1ZSkgeworICAgICAgX3JzdnBJbnRlcm5hbC5yZXNvbHZlKHByb21pc2UsIHZh
bHVlKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBvblJlamVjdGlvbihyZWFzb24pIHsKKyAgICAg
IF9yc3ZwSW50ZXJuYWwucmVqZWN0KHByb21pc2UsIHJlYXNvbik7CisgICAgfQorCisgICAgZm9y
ICh2YXIgaSA9IDA7IHByb21pc2UuX3N0YXRlID09PSBfcnN2cEludGVybmFsLlBFTkRJTkcgJiYg
aSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICBfcnN2cEludGVybmFsLnN1YnNjcmliZShDb25zdHJ1
Y3Rvci5yZXNvbHZlKGVudHJpZXNbaV0pLCB1bmRlZmluZWQsIG9uRnVsZmlsbG1lbnQsIG9uUmVq
ZWN0aW9uKTsKKyAgICB9CisKKyAgICByZXR1cm4gcHJvbWlzZTsKKyAgfQorfSk7CitlbmlmZWQo
J3JzdnAvcHJvbWlzZS9yZWplY3QnLCBbJ2V4cG9ydHMnLCAncnN2cC8taW50ZXJuYWwnXSwgZnVu
Y3Rpb24gKGV4cG9ydHMsIF9yc3ZwSW50ZXJuYWwpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIGV4
cG9ydHMuZGVmYXVsdCA9IHJlamVjdDsKKworICAvKioKKyAgICBgUlNWUC5Qcm9taXNlLnJlamVj
dGAgcmV0dXJucyBhIHByb21pc2UgcmVqZWN0ZWQgd2l0aCB0aGUgcGFzc2VkIGByZWFzb25gLgor
ICAgIEl0IGlzIHNob3J0aGFuZCBmb3IgdGhlIGZvbGxvd2luZzoKKyAgCisgICAgYGBgamF2YXNj
cmlwdAorICAgIHZhciBwcm9taXNlID0gbmV3IFJTVlAuUHJvbWlzZShmdW5jdGlvbihyZXNvbHZl
LCByZWplY3QpeworICAgICAgcmVqZWN0KG5ldyBFcnJvcignV0hPT1BTJykpOworICAgIH0pOwor
ICAKKyAgICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpeworICAgICAgLy8gQ29kZSBoZXJl
IGRvZXNuJ3QgcnVuIGJlY2F1c2UgdGhlIHByb21pc2UgaXMgcmVqZWN0ZWQhCisgICAgfSwgZnVu
Y3Rpb24ocmVhc29uKXsKKyAgICAgIC8vIHJlYXNvbi5tZXNzYWdlID09PSAnV0hPT1BTJworICAg
IH0pOworICAgIGBgYAorICAKKyAgICBJbnN0ZWFkIG9mIHdyaXRpbmcgdGhlIGFib3ZlLCB5b3Vy
IGNvZGUgbm93IHNpbXBseSBiZWNvbWVzIHRoZSBmb2xsb3dpbmc6CisgIAorICAgIGBgYGphdmFz
Y3JpcHQKKyAgICB2YXIgcHJvbWlzZSA9IFJTVlAuUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdX
SE9PUFMnKSk7CisgIAorICAgIHByb21pc2UudGhlbihmdW5jdGlvbih2YWx1ZSl7CisgICAgICAv
LyBDb2RlIGhlcmUgZG9lc24ndCBydW4gYmVjYXVzZSB0aGUgcHJvbWlzZSBpcyByZWplY3RlZCEK
KyAgICB9LCBmdW5jdGlvbihyZWFzb24peworICAgICAgLy8gcmVhc29uLm1lc3NhZ2UgPT09ICdX
SE9PUFMnCisgICAgfSk7CisgICAgYGBgCisgIAorICAgIEBtZXRob2QgcmVqZWN0CisgICAgQHN0
YXRpYworICAgIEBwYXJhbSB7Kn0gcmVhc29uIHZhbHVlIHRoYXQgdGhlIHJldHVybmVkIHByb21p
c2Ugd2lsbCBiZSByZWplY3RlZCB3aXRoLgorICAgIEBwYXJhbSB7U3RyaW5nfSBsYWJlbCBvcHRp
b25hbCBzdHJpbmcgZm9yIGlkZW50aWZ5aW5nIHRoZSByZXR1cm5lZCBwcm9taXNlLgorICAgIFVz
ZWZ1bCBmb3IgdG9vbGluZy4KKyAgICBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2UgcmVqZWN0
ZWQgd2l0aCB0aGUgZ2l2ZW4gYHJlYXNvbmAuCisgICovCisKKyAgZnVuY3Rpb24gcmVqZWN0KHJl
YXNvbiwgbGFiZWwpIHsKKyAgICAvKmpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqLworICAgIHZhciBD
b25zdHJ1Y3RvciA9IHRoaXM7CisgICAgdmFyIHByb21pc2UgPSBuZXcgQ29uc3RydWN0b3IoX3Jz
dnBJbnRlcm5hbC5ub29wLCBsYWJlbCk7CisgICAgX3JzdnBJbnRlcm5hbC5yZWplY3QocHJvbWlz
ZSwgcmVhc29uKTsKKyAgICByZXR1cm4gcHJvbWlzZTsKKyAgfQorfSk7CitlbmlmZWQoJ3JzdnAv
cHJvbWlzZS9yZXNvbHZlJywgWydleHBvcnRzJywgJ3JzdnAvLWludGVybmFsJ10sIGZ1bmN0aW9u
IChleHBvcnRzLCBfcnN2cEludGVybmFsKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICBleHBvcnRz
LmRlZmF1bHQgPSByZXNvbHZlOworCisgIC8qKgorICAgIGBSU1ZQLlByb21pc2UucmVzb2x2ZWAg
cmV0dXJucyBhIHByb21pc2UgdGhhdCB3aWxsIGJlY29tZSByZXNvbHZlZCB3aXRoIHRoZQorICAg
IHBhc3NlZCBgdmFsdWVgLiBJdCBpcyBzaG9ydGhhbmQgZm9yIHRoZSBmb2xsb3dpbmc6CisgIAor
ICAgIGBgYGphdmFzY3JpcHQKKyAgICB2YXIgcHJvbWlzZSA9IG5ldyBSU1ZQLlByb21pc2UoZnVu
Y3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXsKKyAgICAgIHJlc29sdmUoMSk7CisgICAgfSk7CisgIAor
ICAgIHByb21pc2UudGhlbihmdW5jdGlvbih2YWx1ZSl7CisgICAgICAvLyB2YWx1ZSA9PT0gMQor
ICAgIH0pOworICAgIGBgYAorICAKKyAgICBJbnN0ZWFkIG9mIHdyaXRpbmcgdGhlIGFib3ZlLCB5
b3VyIGNvZGUgbm93IHNpbXBseSBiZWNvbWVzIHRoZSBmb2xsb3dpbmc6CisgIAorICAgIGBgYGph
dmFzY3JpcHQKKyAgICB2YXIgcHJvbWlzZSA9IFJTVlAuUHJvbWlzZS5yZXNvbHZlKDEpOworICAK
KyAgICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpeworICAgICAgLy8gdmFsdWUgPT09IDEK
KyAgICB9KTsKKyAgICBgYGAKKyAgCisgICAgQG1ldGhvZCByZXNvbHZlCisgICAgQHN0YXRpYwor
ICAgIEBwYXJhbSB7Kn0gb2JqZWN0IHZhbHVlIHRoYXQgdGhlIHJldHVybmVkIHByb21pc2Ugd2ls
bCBiZSByZXNvbHZlZCB3aXRoCisgICAgQHBhcmFtIHtTdHJpbmd9IGxhYmVsIG9wdGlvbmFsIHN0
cmluZyBmb3IgaWRlbnRpZnlpbmcgdGhlIHJldHVybmVkIHByb21pc2UuCisgICAgVXNlZnVsIGZv
ciB0b29saW5nLgorICAgIEByZXR1cm4ge1Byb21pc2V9IGEgcHJvbWlzZSB0aGF0IHdpbGwgYmVj
b21lIGZ1bGZpbGxlZCB3aXRoIHRoZSBnaXZlbgorICAgIGB2YWx1ZWAKKyAgKi8KKworICBmdW5j
dGlvbiByZXNvbHZlKG9iamVjdCwgbGFiZWwpIHsKKyAgICAvKmpzaGludCB2YWxpZHRoaXM6dHJ1
ZSAqLworICAgIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7CisKKyAgICBpZiAob2JqZWN0ICYmIHR5
cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdC5jb25zdHJ1Y3RvciA9PT0gQ29uc3Ry
dWN0b3IpIHsKKyAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfQorCisgICAgdmFyIHByb21pc2Ug
PSBuZXcgQ29uc3RydWN0b3IoX3JzdnBJbnRlcm5hbC5ub29wLCBsYWJlbCk7CisgICAgX3JzdnBJ
bnRlcm5hbC5yZXNvbHZlKHByb21pc2UsIG9iamVjdCk7CisgICAgcmV0dXJuIHByb21pc2U7Cisg
IH0KK30pOworZW5pZmVkKCdyc3ZwL3JhY2UnLCBbJ2V4cG9ydHMnLCAncnN2cC9wcm9taXNlJ10s
IGZ1bmN0aW9uIChleHBvcnRzLCBfcnN2cFByb21pc2UpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisg
IGV4cG9ydHMuZGVmYXVsdCA9IHJhY2U7CisKKyAgLyoqCisgICAgVGhpcyBpcyBhIGNvbnZlbmll
bnQgYWxpYXMgZm9yIGBSU1ZQLlByb21pc2UucmFjZWAuCisgIAorICAgIEBtZXRob2QgcmFjZQor
ICAgIEBzdGF0aWMKKyAgICBAZm9yIFJTVlAKKyAgICBAcGFyYW0ge0FycmF5fSBhcnJheSBBcnJh
eSBvZiBwcm9taXNlcy4KKyAgICBAcGFyYW0ge1N0cmluZ30gbGFiZWwgQW4gb3B0aW9uYWwgbGFi
ZWwuIFRoaXMgaXMgdXNlZnVsCisgICAgZm9yIHRvb2xpbmcuCisgICAqLworCisgIGZ1bmN0aW9u
IHJhY2UoYXJyYXksIGxhYmVsKSB7CisgICAgcmV0dXJuIF9yc3ZwUHJvbWlzZS5kZWZhdWx0LnJh
Y2UoYXJyYXksIGxhYmVsKTsKKyAgfQorfSk7CitlbmlmZWQoJ3JzdnAvcmVqZWN0JywgWydleHBv
cnRzJywgJ3JzdnAvcHJvbWlzZSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX3JzdnBQcm9taXNlKSB7
CisgICd1c2Ugc3RyaWN0JzsKKworICBleHBvcnRzLmRlZmF1bHQgPSByZWplY3Q7CisKKyAgLyoq
CisgICAgVGhpcyBpcyBhIGNvbnZlbmllbnQgYWxpYXMgZm9yIGBSU1ZQLlByb21pc2UucmVqZWN0
YC4KKyAgCisgICAgQG1ldGhvZCByZWplY3QKKyAgICBAc3RhdGljCisgICAgQGZvciBSU1ZQCisg
ICAgQHBhcmFtIHsqfSByZWFzb24gdmFsdWUgdGhhdCB0aGUgcmV0dXJuZWQgcHJvbWlzZSB3aWxs
IGJlIHJlamVjdGVkIHdpdGguCisgICAgQHBhcmFtIHtTdHJpbmd9IGxhYmVsIG9wdGlvbmFsIHN0
cmluZyBmb3IgaWRlbnRpZnlpbmcgdGhlIHJldHVybmVkIHByb21pc2UuCisgICAgVXNlZnVsIGZv
ciB0b29saW5nLgorICAgIEByZXR1cm4ge1Byb21pc2V9IGEgcHJvbWlzZSByZWplY3RlZCB3aXRo
IHRoZSBnaXZlbiBgcmVhc29uYC4KKyAgKi8KKworICBmdW5jdGlvbiByZWplY3QocmVhc29uLCBs
YWJlbCkgeworICAgIHJldHVybiBfcnN2cFByb21pc2UuZGVmYXVsdC5yZWplY3QocmVhc29uLCBs
YWJlbCk7CisgIH0KK30pOworZW5pZmVkKCdyc3ZwL3Jlc29sdmUnLCBbJ2V4cG9ydHMnLCAncnN2
cC9wcm9taXNlJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfcnN2cFByb21pc2UpIHsKKyAgJ3VzZSBz
dHJpY3QnOworCisgIGV4cG9ydHMuZGVmYXVsdCA9IHJlc29sdmU7CisKKyAgLyoqCisgICAgVGhp
cyBpcyBhIGNvbnZlbmllbnQgYWxpYXMgZm9yIGBSU1ZQLlByb21pc2UucmVzb2x2ZWAuCisgIAor
ICAgIEBtZXRob2QgcmVzb2x2ZQorICAgIEBzdGF0aWMKKyAgICBAZm9yIFJTVlAKKyAgICBAcGFy
YW0geyp9IHZhbHVlIHZhbHVlIHRoYXQgdGhlIHJldHVybmVkIHByb21pc2Ugd2lsbCBiZSByZXNv
bHZlZCB3aXRoCisgICAgQHBhcmFtIHtTdHJpbmd9IGxhYmVsIG9wdGlvbmFsIHN0cmluZyBmb3Ig
aWRlbnRpZnlpbmcgdGhlIHJldHVybmVkIHByb21pc2UuCisgICAgVXNlZnVsIGZvciB0b29saW5n
LgorICAgIEByZXR1cm4ge1Byb21pc2V9IGEgcHJvbWlzZSB0aGF0IHdpbGwgYmVjb21lIGZ1bGZp
bGxlZCB3aXRoIHRoZSBnaXZlbgorICAgIGB2YWx1ZWAKKyAgKi8KKworICBmdW5jdGlvbiByZXNv
bHZlKHZhbHVlLCBsYWJlbCkgeworICAgIHJldHVybiBfcnN2cFByb21pc2UuZGVmYXVsdC5yZXNv
bHZlKHZhbHVlLCBsYWJlbCk7CisgIH0KK30pOworZW5pZmVkKCJyc3ZwL3JldGhyb3ciLCBbImV4
cG9ydHMiXSwgZnVuY3Rpb24gKGV4cG9ydHMpIHsKKyAgLyoqCisgICAgYFJTVlAucmV0aHJvd2Ag
d2lsbCByZXRocm93IGFuIGVycm9yIG9uIHRoZSBuZXh0IHR1cm4gb2YgdGhlIEphdmFTY3JpcHQg
ZXZlbnQKKyAgICBsb29wIGluIG9yZGVyIHRvIGFpZCBkZWJ1Z2dpbmcuCisgIAorICAgIFByb21p
c2VzIEErIHNwZWNpZmllcyB0aGF0IGFueSBleGNlcHRpb25zIHRoYXQgb2NjdXIgd2l0aCBhIHBy
b21pc2UgbXVzdCBiZQorICAgIGNhdWdodCBieSB0aGUgcHJvbWlzZXMgaW1wbGVtZW50YXRpb24g
YW5kIGJ1YmJsZWQgdG8gdGhlIGxhc3QgaGFuZGxlci4gRm9yCisgICAgdGhpcyByZWFzb24sIGl0
IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IGFsd2F5cyBzcGVjaWZ5IGEgc2Vjb25kIHJlamVjdGlv
bgorICAgIGhhbmRsZXIgZnVuY3Rpb24gdG8gYHRoZW5gLiBIb3dldmVyLCBgUlNWUC5yZXRocm93
YCB3aWxsIHRocm93IHRoZSBleGNlcHRpb24KKyAgICBvdXRzaWRlIG9mIHRoZSBwcm9taXNlLCBz
byBpdCBidWJibGVzIHVwIHRvIHlvdXIgY29uc29sZSBpZiBpbiB0aGUgYnJvd3NlciwKKyAgICBv
ciBkb21haW4vY2F1c2UgdW5jYXVnaHQgZXhjZXB0aW9uIGluIE5vZGUuIGByZXRocm93YCB3aWxs
IGFsc28gdGhyb3cgdGhlCisgICAgZXJyb3IgYWdhaW4gc28gdGhlIGVycm9yIGNhbiBiZSBoYW5k
bGVkIGJ5IHRoZSBwcm9taXNlIHBlciB0aGUgc3BlYy4KKyAgCisgICAgYGBgamF2YXNjcmlwdAor
ICAgIGZ1bmN0aW9uIHRocm93cygpeworICAgICAgdGhyb3cgbmV3IEVycm9yKCdXaG9vcHMhJyk7
CisgICAgfQorICAKKyAgICB2YXIgcHJvbWlzZSA9IG5ldyBSU1ZQLlByb21pc2UoZnVuY3Rpb24o
cmVzb2x2ZSwgcmVqZWN0KXsKKyAgICAgIHRocm93cygpOworICAgIH0pOworICAKKyAgICBwcm9t
aXNlLmNhdGNoKFJTVlAucmV0aHJvdykudGhlbihmdW5jdGlvbigpeworICAgICAgLy8gQ29kZSBo
ZXJlIGRvZXNuJ3QgcnVuIGJlY2F1c2UgdGhlIHByb21pc2UgYmVjYW1lIHJlamVjdGVkIGR1ZSB0
byBhbgorICAgICAgLy8gZXJyb3IhCisgICAgfSwgZnVuY3Rpb24gKGVycil7CisgICAgICAvLyBo
YW5kbGUgdGhlIGVycm9yIGhlcmUKKyAgICB9KTsKKyAgICBgYGAKKyAgCisgICAgVGhlICdXaG9v
cHMnIGVycm9yIHdpbGwgYmUgdGhyb3duIG9uIHRoZSBuZXh0IHR1cm4gb2YgdGhlIGV2ZW50IGxv
b3AKKyAgICBhbmQgeW91IGNhbiB3YXRjaCBmb3IgaXQgaW4geW91ciBjb25zb2xlLiBZb3UgY2Fu
IGFsc28gaGFuZGxlIGl0IHVzaW5nIGEKKyAgICByZWplY3Rpb24gaGFuZGxlciBnaXZlbiB0byBg
LnRoZW5gIG9yIGAuY2F0Y2hgIG9uIHRoZSByZXR1cm5lZCBwcm9taXNlLgorICAKKyAgICBAbWV0
aG9kIHJldGhyb3cKKyAgICBAc3RhdGljCisgICAgQGZvciBSU1ZQCisgICAgQHBhcmFtIHtFcnJv
cn0gcmVhc29uIHJlYXNvbiB0aGUgcHJvbWlzZSBiZWNhbWUgcmVqZWN0ZWQuCisgICAgQHRocm93
cyBFcnJvcgorICAgIEBzdGF0aWMKKyAgKi8KKyAgInVzZSBzdHJpY3QiOworCisgIGV4cG9ydHMu
ZGVmYXVsdCA9IHJldGhyb3c7CisKKyAgZnVuY3Rpb24gcmV0aHJvdyhyZWFzb24pIHsKKyAgICBz
ZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKKyAgICAgIHRocm93IHJlYXNvbjsKKyAgICB9KTsKKyAg
ICB0aHJvdyByZWFzb247CisgIH0KK30pOworZW5pZmVkKCdyc3ZwL3V0aWxzJywgWydleHBvcnRz
J10sIGZ1bmN0aW9uIChleHBvcnRzKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICBleHBvcnRzLm9i
amVjdE9yRnVuY3Rpb24gPSBvYmplY3RPckZ1bmN0aW9uOworICBleHBvcnRzLmlzRnVuY3Rpb24g
PSBpc0Z1bmN0aW9uOworICBleHBvcnRzLmlzTWF5YmVUaGVuYWJsZSA9IGlzTWF5YmVUaGVuYWJs
ZTsKKworICBmdW5jdGlvbiBvYmplY3RPckZ1bmN0aW9uKHgpIHsKKyAgICByZXR1cm4gdHlwZW9m
IHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnICYmIHggIT09IG51bGw7
CisgIH0KKworICBmdW5jdGlvbiBpc0Z1bmN0aW9uKHgpIHsKKyAgICByZXR1cm4gdHlwZW9mIHgg
PT09ICdmdW5jdGlvbic7CisgIH0KKworICBmdW5jdGlvbiBpc01heWJlVGhlbmFibGUoeCkgewor
ICAgIHJldHVybiB0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiYgeCAhPT0gbnVsbDsKKyAgfQorCisg
IHZhciBfaXNBcnJheTsKKyAgaWYgKCFBcnJheS5pc0FycmF5KSB7CisgICAgX2lzQXJyYXkgPSBm
dW5jdGlvbiAoeCkgeworICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2Fs
bCh4KSA9PT0gJ1tvYmplY3QgQXJyYXldJzsKKyAgICB9OworICB9IGVsc2UgeworICAgIF9pc0Fy
cmF5ID0gQXJyYXkuaXNBcnJheTsKKyAgfQorCisgIHZhciBpc0FycmF5ID0gX2lzQXJyYXk7CisK
KyAgZXhwb3J0cy5pc0FycmF5ID0gaXNBcnJheTsKKyAgLy8gRGF0ZS5ub3cgaXMgbm90IGF2YWls
YWJsZSBpbiBicm93c2VycyA8IElFOQorICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9y
Zy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9EYXRl
L25vdyNDb21wYXRpYmlsaXR5CisgIHZhciBub3cgPSBEYXRlLm5vdyB8fCBmdW5jdGlvbiAoKSB7
CisgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpOworICB9OworCisgIGV4cG9ydHMubm93
ID0gbm93OworICBmdW5jdGlvbiBGKCkge30KKworICB2YXIgb19jcmVhdGUgPSBPYmplY3QuY3Jl
YXRlIHx8IGZ1bmN0aW9uIChvKSB7CisgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7Cisg
ICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlY29uZCBhcmd1bWVudCBub3Qgc3VwcG9ydGVkJyk7Cisg
ICAgfQorICAgIGlmICh0eXBlb2YgbyAhPT0gJ29iamVjdCcpIHsKKyAgICAgIHRocm93IG5ldyBU
eXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0Jyk7CisgICAgfQorICAgIEYucHJv
dG90eXBlID0gbzsKKyAgICByZXR1cm4gbmV3IEYoKTsKKyAgfTsKKyAgZXhwb3J0cy5vX2NyZWF0
ZSA9IG9fY3JlYXRlOworfSk7CitlbmlmZWQoInZlcnRleCIsIFsiZXhwb3J0cyJdLCBmdW5jdGlv
biAoZXhwb3J0cykgeworICAvKioKKyAgICogREFHIFZlcnRleAorICAgKgorICAgKiBAY2xhc3Mg
VmVydGV4CisgICAqIEBjb25zdHJ1Y3RvcgorICAgKi8KKworICAidXNlIHN0cmljdCI7CisKKyAg
ZXhwb3J0cy5kZWZhdWx0ID0gVmVydGV4OworCisgIGZ1bmN0aW9uIFZlcnRleChuYW1lKSB7Cisg
ICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICB0aGlzLmluY29taW5nID0ge307CisgICAgdGhpcy5p
bmNvbWluZ05hbWVzID0gW107CisgICAgdGhpcy5oYXNPdXRnb2luZyA9IGZhbHNlOworICAgIHRo
aXMudmFsdWUgPSBudWxsOworICB9Cit9KTsKK2VuaWZlZCgidmlzaXQiLCBbImV4cG9ydHMiXSwg
ZnVuY3Rpb24gKGV4cG9ydHMpIHsKKyAgInVzZSBzdHJpY3QiOworCisgIGV4cG9ydHMuZGVmYXVs
dCA9IHZpc2l0OworCisgIGZ1bmN0aW9uIHZpc2l0KHZlcnRleCwgZm4sIHZpc2l0ZWQsIHBhdGgp
IHsKKyAgICB2YXIgbmFtZSA9IHZlcnRleC5uYW1lOworICAgIHZhciB2ZXJ0aWNlcyA9IHZlcnRl
eC5pbmNvbWluZzsKKyAgICB2YXIgbmFtZXMgPSB2ZXJ0ZXguaW5jb21pbmdOYW1lczsKKyAgICB2
YXIgbGVuID0gbmFtZXMubGVuZ3RoOworICAgIHZhciBpOworCisgICAgaWYgKCF2aXNpdGVkKSB7
CisgICAgICB2aXNpdGVkID0ge307CisgICAgfQorICAgIGlmICghcGF0aCkgeworICAgICAgcGF0
aCA9IFtdOworICAgIH0KKyAgICBpZiAodmlzaXRlZC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgewor
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBwYXRoLnB1c2gobmFtZSk7CisgICAgdmlzaXRlZFtu
YW1lXSA9IHRydWU7CisgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICB2aXNp
dCh2ZXJ0aWNlc1tuYW1lc1tpXV0sIGZuLCB2aXNpdGVkLCBwYXRoKTsKKyAgICB9CisgICAgZm4o
dmVydGV4LCBwYXRoKTsKKyAgICBwYXRoLnBvcCgpOworICB9Cit9KTsKK3JlcXVpcmVNb2R1bGUo
ImVtYmVyIik7CisKK30oKSk7CisKKzsoZnVuY3Rpb24oKSB7CisvKiBnbG9iYWxzIGRlZmluZSwg
RW1iZXIsIGpRdWVyeSAqLworCisgIGZ1bmN0aW9uIHByb2Nlc3NFbWJlclNoaW1zKCkgeworICAg
IHZhciBzaGltcyA9IHsKKyAgICAgICdlbWJlcic6IHsKKyAgICAgICAgJ2RlZmF1bHQnOiBFbWJl
cgorICAgICAgfSwKKyAgICAgICdlbWJlci1hcHBsaWNhdGlvbic6IHsKKyAgICAgICAgJ2RlZmF1
bHQnOiBFbWJlci5BcHBsaWNhdGlvbgorICAgICAgfSwKKyAgICAgICdlbWJlci1hcnJheSc6IHsK
KyAgICAgICAgJ2RlZmF1bHQnOiBFbWJlci5BcnJheQorICAgICAgfSwKKyAgICAgICdlbWJlci1h
cnJheS9tdXRhYmxlJzogeworICAgICAgICAnZGVmYXVsdCc6IEVtYmVyLk11dGFibGVBcnJheQor
ICAgICAgfSwKKyAgICAgICdlbWJlci1hcnJheS91dGlscyc6IHsKKyAgICAgICAgJ0EnOiAgICAg
ICAgICAgIEVtYmVyLkEsCisgICAgICAgICdpc0VtYmVyQXJyYXknOiBFbWJlci5pc0FycmF5LAor
ICAgICAgICAnd3JhcCc6ICAgICAgICAgRW1iZXIubWFrZUFycmF5CisgICAgICB9LAorICAgICAg
J2VtYmVyLWNvbXBvbmVudCc6IHsKKyAgICAgICAgJ2RlZmF1bHQnOiBFbWJlci5Db21wb25lbnQK
KyAgICAgIH0sCisgICAgICAnZW1iZXItY29tcG9uZW50cy9jaGVja2JveCc6IHsKKyAgICAgICAg
J2RlZmF1bHQnOiBFbWJlci5DaGVja2JveAorICAgICAgfSwKKyAgICAgICdlbWJlci1jb21wb25l
bnRzL3RleHQtYXJlYSc6IHsKKyAgICAgICAgJ2RlZmF1bHQnOiBFbWJlci5UZXh0QXJlYQorICAg
ICAgfSwKKyAgICAgICdlbWJlci1jb21wb25lbnRzL3RleHQtZmllbGQnOiB7CisgICAgICAgICdk
ZWZhdWx0JzogRW1iZXIuVGV4dEZpZWxkCisgICAgICB9LAorICAgICAgJ2VtYmVyLWNvbnRyb2xs
ZXInOiB7CisgICAgICAgICdkZWZhdWx0JzogRW1iZXIuQ29udHJvbGxlcgorICAgICAgfSwKKyAg
ICAgICdlbWJlci1jb250cm9sbGVyL2luamVjdCc6IHsKKyAgICAgICAgJ2RlZmF1bHQnOiBFbWJl
ci5pbmplY3QuY29udHJvbGxlcgorICAgICAgfSwKKyAgICAgICdlbWJlci1jb250cm9sbGVyL3By
b3h5JzogeworICAgICAgICAnZGVmYXVsdCc6IEVtYmVyLkFycmF5UHJveHkKKyAgICAgIH0sCisg
ICAgICAnZW1iZXItY29udHJvbGxlcnMvc29ydGFibGUnOiB7CisgICAgICAgICdkZWZhdWx0Jzog
RW1iZXIuU29ydGFibGVNaXhpbgorICAgICAgfSwKKyAgICAgICdlbWJlci1kZWJ1Zyc6IHsKKyAg
ICAgICAgJ2xvZyc6ICAgICAgRW1iZXIuZGVidWcsCisgICAgICAgICdpbnNwZWN0JzogIEVtYmVy
Lmluc3BlY3QsCisgICAgICAgICdydW4nOiAgICAgIEVtYmVyLnJ1bkluRGVidWcsCisgICAgICAg
ICd3YXJuJzogICAgIEVtYmVyLndhcm4KKyAgICAgIH0sCisgICAgICAnZW1iZXItZGVidWcvY29u
dGFpbmVyLWRlYnVnLWFkYXB0ZXInOiB7CisgICAgICAgICdkZWZhdWx0JzogRW1iZXIuQ29udGFp
bmVyRGVidWdBZGFwdGVyCisgICAgICB9LAorICAgICAgJ2VtYmVyLWRlYnVnL2RhdGEtYWRhcHRl
cic6IHsKKyAgICAgICAgJ2RlZmF1bHQnOiBFbWJlci5EYXRhQWRhcHRlcgorICAgICAgfSwKKyAg
ICAgICdlbWJlci1kZXByZWNhdGlvbnMnOiB7CisgICAgICAgICdkZXByZWNhdGUnOiAgICAgIEVt
YmVyLmRlcHJlY2F0ZSwKKyAgICAgICAgJ2RlcHJlY2F0ZUZ1bmMnOiAgRW1iZXIuZGVwcmVjYXRl
RnVuYworICAgICAgfSwKKyAgICAgICdlbWJlci1lbnVtZXJhYmxlJzogeworICAgICAgICAnZGVm
YXVsdCc6IEVtYmVyLkVudW1lcmFibGUKKyAgICAgIH0sCisgICAgICAnZW1iZXItZXZlbnRlZCc6
IHsKKyAgICAgICAgJ2RlZmF1bHQnOiBFbWJlci5FdmVudGVkCisgICAgICB9LAorICAgICAgJ2Vt
YmVyLWV2ZW50ZWQvb24nOiB7CisgICAgICAgICdkZWZhdWx0JzogRW1iZXIub24KKyAgICAgIH0s
CisgICAgICAnZW1iZXItZ2xvYmFscy1yZXNvbHZlcic6IHsKKyAgICAgICAgJ2RlZmF1bHQnOiBF
bWJlci5EZWZhdWx0UmVzb2x2ZXIKKyAgICAgIH0sCisgICAgICAnZW1iZXItaGVscGVyJzogewor
ICAgICAgICAnZGVmYXVsdCc6ICBFbWJlci5IZWxwZXIsCisgICAgICAgICdoZWxwZXInOiAgIEVt
YmVyLkhlbHBlciAmJiBFbWJlci5IZWxwZXIuaGVscGVyCisgICAgICB9LAorICAgICAgJ2VtYmVy
LWluc3RydW1lbnRhdGlvbic6IHsKKyAgICAgICAgJ2luc3RydW1lbnQnOiAgIEVtYmVyLkluc3Ry
dW1lbnRhdGlvbi5pbnN0cnVtZW50LAorICAgICAgICAncmVzZXQnOiAgICAgICAgRW1iZXIuSW5z
dHJ1bWVudGF0aW9uLnJlc2V0LAorICAgICAgICAnc3Vic2NyaWJlJzogICAgRW1iZXIuSW5zdHJ1
bWVudGF0aW9uLnN1YnNjcmliZSwKKyAgICAgICAgJ3Vuc3Vic2NyaWJlJzogIEVtYmVyLkluc3Ry
dW1lbnRhdGlvbi51bnN1YnNjcmliZQorICAgICAgfSwKKyAgICAgICdlbWJlci1sb2NhdGlvbnMv
aGFzaCc6IHsKKyAgICAgICAgJ2RlZmF1bHQnOiBFbWJlci5IYXNoTG9jYXRpb24KKyAgICAgIH0s
CisgICAgICAnZW1iZXItbG9jYXRpb25zL2hpc3RvcnknOiB7CisgICAgICAgICdkZWZhdWx0Jzog
RW1iZXIuSGlzdG9yeUxvY2F0aW9uCisgICAgICB9LAorICAgICAgJ2VtYmVyLWxvY2F0aW9ucy9u
b25lJzogeworICAgICAgICAnZGVmYXVsdCc6IEVtYmVyLk5vbmVMb2NhdGlvbgorICAgICAgfSwK
KyAgICAgICdlbWJlci1tYXAnOiB7CisgICAgICAgICdkZWZhdWx0JzogICAgICBFbWJlci5NYXAs
CisgICAgICAgICd3aXRoRGVmYXVsdCc6ICBFbWJlci5NYXBXaXRoRGVmYXVsdAorICAgICAgfSwK
KyAgICAgICdlbWJlci1tZXRhbC9kZXN0cm95JzogeworICAgICAgICAnZGVmYXVsdCc6IEVtYmVy
LmRlc3Ryb3kKKyAgICAgIH0sCisgICAgICAnZW1iZXItbWV0YWwvZXZlbnRzJzogeworICAgICAg
ICAnYWRkTGlzdGVuZXInOiAgICBFbWJlci5hZGRMaXN0ZW5lciwKKyAgICAgICAgJ3JlbW92ZUxp
c3RlbmVyJzogRW1iZXIucmVtb3ZlTGlzdGVuZXIsCisgICAgICAgICdzZW5kJzogICAgICAgICAg
IEVtYmVyLnNlbmRFdmVudAorICAgICAgfSwKKyAgICAgICdlbWJlci1tZXRhbC9nZXQnOiB7Cisg
ICAgICAgICdkZWZhdWx0JzogRW1iZXIuZ2V0LAorICAgICAgICAnZ2V0UHJvcGVydGllcyc6IEVt
YmVyLmdldFByb3BlcnRpZXMKKyAgICAgIH0sCisgICAgICAnZW1iZXItbWV0YWwvbWl4aW4nOiB7
CisgICAgICAgICdkZWZhdWx0JzogRW1iZXIuTWl4aW4KKyAgICAgIH0sCisgICAgICAnZW1iZXIt
bWV0YWwvb2JzZXJ2ZXInOiB7CisgICAgICAgICdkZWZhdWx0JzogICAgICAgIEVtYmVyLm9ic2Vy
dmVyLAorICAgICAgICAnYWRkT2JzZXJ2ZXInOiAgICBFbWJlci5hZGRPYnNlcnZlciwKKyAgICAg
ICAgJ3JlbW92ZU9ic2VydmVyJzogRW1iZXIucmVtb3ZlT2JzZXJ2ZXIKKyAgICAgIH0sCisgICAg
ICAnZW1iZXItbWV0YWwvb24tbG9hZCc6IHsKKyAgICAgICAgJ2RlZmF1bHQnOiAgRW1iZXIub25M
b2FkLAorICAgICAgICAncnVuJzogICAgICBFbWJlci5ydW5Mb2FkSG9va3MKKyAgICAgIH0sCisg
ICAgICAnZW1iZXItbWV0YWwvc2V0JzogeworICAgICAgICAnZGVmYXVsdCc6ICAgICAgICBFbWJl
ci5zZXQsCisgICAgICAgICdzZXRQcm9wZXJ0aWVzJzogIEVtYmVyLnNldFByb3BlcnRpZXMsCisg
ICAgICAgICd0cnlTZXQnOiAgICAgICAgIEVtYmVyLnRyeVNldAorICAgICAgfSwKKyAgICAgICdl
bWJlci1tZXRhbC91dGlscyc6IHsKKyAgICAgICAgJ2FsaWFzTWV0aG9kJzogIEVtYmVyLmFsaWFz
TWV0aG9kLAorICAgICAgICAnYXNzZXJ0JzogICAgICAgRW1iZXIuYXNzZXJ0LAorICAgICAgICAn
Y2FjaGVGb3InOiAgICAgRW1iZXIuY2FjaGVGb3IsCisgICAgICAgICdjb3B5JzogICAgICAgICBF
bWJlci5jb3B5LAorICAgICAgICAnZ3VpZEZvcic6ICAgICAgRW1iZXIuZ3VpZEZvcgorICAgICAg
fSwKKyAgICAgICdlbWJlci1vYmplY3QnOiB7CisgICAgICAgICdkZWZhdWx0JzogRW1iZXIuT2Jq
ZWN0CisgICAgICB9LAorICAgICAgJ2VtYmVyLXBsYXRmb3JtJzogeworICAgICAgICAnYXNzaWdu
JzogICAgICAgICBFbWJlci5tZXJnZSwKKyAgICAgICAgJ2NyZWF0ZSc6ICAgICAgICAgRW1iZXIu
Y3JlYXRlLAorICAgICAgICAnZGVmaW5lUHJvcGVydHknOiBFbWJlci5wbGF0Zm9ybS5kZWZpbmVQ
cm9wZXJ0eSwKKyAgICAgICAgJ2hhc0FjY2Vzc29ycyc6ICAgRW1iZXIucGxhdGZvcm0uaGFzUHJv
cGVydHlBY2Nlc3NvcnMsCisgICAgICAgICdrZXlzJzogICAgICAgICAgIEVtYmVyLmtleXMKKyAg
ICAgIH0sCisgICAgICAnZW1iZXItcm91dGUnOiB7CisgICAgICAgICdkZWZhdWx0JzogRW1iZXIu
Um91dGUKKyAgICAgIH0sCisgICAgICAnZW1iZXItcm91dGVyJzogeworICAgICAgICAnZGVmYXVs
dCc6IEVtYmVyLlJvdXRlcgorICAgICAgfSwKKyAgICAgICdlbWJlci1ydW5sb29wJzogeworICAg
ICAgICAnZGVmYXVsdCc6ICAgICAgRW1iZXIucnVuLAorICAgICAgICAnYmVnaW4nOiAgICAgICAg
RW1iZXIucnVuLmJlZ2luLAorICAgICAgICAnYmluZCc6ICAgICAgICAgRW1iZXIucnVuLmJpbmQs
CisgICAgICAgICdjYW5jZWwnOiAgICAgICBFbWJlci5ydW4uY2FuY2VsLAorICAgICAgICAnZGVi
b3VuY2UnOiAgICAgRW1iZXIucnVuLmRlYm91bmNlLAorICAgICAgICAnZW5kJzogICAgICAgICAg
RW1iZXIucnVuLmVuZCwKKyAgICAgICAgJ2pvaW4nOiAgICAgICAgIEVtYmVyLnJ1bi5qb2luLAor
ICAgICAgICAnbGF0ZXInOiAgICAgICAgRW1iZXIucnVuLmxhdGVyLAorICAgICAgICAnbmV4dCc6
ICAgICAgICAgRW1iZXIucnVuLm5leHQsCisgICAgICAgICdvbmNlJzogICAgICAgICBFbWJlci5y
dW4ub25jZSwKKyAgICAgICAgJ3NjaGVkdWxlJzogICAgIEVtYmVyLnJ1bi5zY2hlZHVsZSwKKyAg
ICAgICAgJ3NjaGVkdWxlT25jZSc6IEVtYmVyLnJ1bi5zY2hlZHVsZU9uY2UsCisgICAgICAgICd0
aHJvdHRsZSc6ICAgICBFbWJlci5ydW4udGhyb3R0bGUKKyAgICAgIH0sCisgICAgICAnZW1iZXIt
c2VydmljZSc6IHsKKyAgICAgICAgJ2RlZmF1bHQnOiBFbWJlci5TZXJ2aWNlCisgICAgICB9LAor
ICAgICAgJ2VtYmVyLXNlcnZpY2UvaW5qZWN0JzogeworICAgICAgICAnZGVmYXVsdCc6IEVtYmVy
LmluamVjdC5zZXJ2aWNlCisgICAgICB9LAorICAgICAgJ2VtYmVyLXNldC9vcmRlcmVkJzogewor
ICAgICAgICAnZGVmYXVsdCc6IEVtYmVyLk9yZGVyZWRTZXQKKyAgICAgIH0sCisgICAgICAnZW1i
ZXItc3RyaW5nJzogeworICAgICAgICAnY2FtZWxpemUnOiAgICAgRW1iZXIuU3RyaW5nLmNhbWVs
aXplLAorICAgICAgICAnY2FwaXRhbGl6ZSc6ICAgRW1iZXIuU3RyaW5nLmNhcGl0YWxpemUsCisg
ICAgICAgICdjbGFzc2lmeSc6ICAgICBFbWJlci5TdHJpbmcuY2xhc3NpZnksCisgICAgICAgICdk
YXNoZXJpemUnOiAgICBFbWJlci5TdHJpbmcuZGFzaGVyaXplLAorICAgICAgICAnZGVjYW1lbGl6
ZSc6ICAgRW1iZXIuU3RyaW5nLmRlY2FtZWxpemUsCisgICAgICAgICdmbXQnOiAgICAgICAgICBF
bWJlci5TdHJpbmcuZm10LAorICAgICAgICAnaHRtbFNhZmUnOiAgICAgRW1iZXIuU3RyaW5nLmh0
bWxTYWZlLAorICAgICAgICAnbG9jJzogICAgICAgICAgRW1iZXIuU3RyaW5nLmxvYywKKyAgICAg
ICAgJ3VuZGVyc2NvcmUnOiAgIEVtYmVyLlN0cmluZy51bmRlcnNjb3JlLAorICAgICAgICAndyc6
ICAgICAgICAgICAgRW1iZXIuU3RyaW5nLncKKyAgICAgIH0sCisgICAgICAnZW1iZXItdXRpbHMn
OiB7CisgICAgICAgICdpc0JsYW5rJzogICAgRW1iZXIuaXNCbGFuaywKKyAgICAgICAgJ2lzRW1w
dHknOiAgICBFbWJlci5pc0VtcHR5LAorICAgICAgICAnaXNOb25lJzogICAgIEVtYmVyLmlzTm9u
ZSwKKyAgICAgICAgJ2lzUHJlc2VudCc6ICBFbWJlci5pc1ByZXNlbnQsCisgICAgICAgICd0cnlJ
bnZva2UnOiAgRW1iZXIudHJ5SW52b2tlLAorICAgICAgICAndHlwZU9mJzogICAgIEVtYmVyLnR5
cGVPZgorICAgICAgfQorICAgIH07CisKKyAgICAvLyBwb3B1bGF0ZSBgZW1iZXIvY29tcHV0ZWRg
IG5hbWVkIGV4cG9ydHMKKyAgICBzaGltc1snZW1iZXItY29tcHV0ZWQnXSA9IHsKKyAgICAgICdk
ZWZhdWx0JzogRW1iZXIuY29tcHV0ZWQKKyAgICB9OworICAgIHZhciBjb21wdXRlZE1hY3JvcyA9
IFsKKyAgICAgICJlbXB0eSIsIm5vdEVtcHR5IiwgIm5vbmUiLCAibm90IiwgImJvb2wiLCAibWF0
Y2giLAorICAgICAgImVxdWFsIiwgImd0IiwgImd0ZSIsICJsdCIsICJsdGUiLCAiYWxpYXMiLCAi
b25lV2F5IiwKKyAgICAgICJyZWFkcyIsICJyZWFkT25seSIsICJkZXByZWNhdGluZ0FsaWFzIiwK
KyAgICAgICJhbmQiLCAib3IiLCAiY29sbGVjdCIsICJzdW0iLCAibWluIiwgIm1heCIsCisgICAg
ICAibWFwIiwgInNvcnQiLCAic2V0RGlmZiIsICJtYXBCeSIsICJtYXBQcm9wZXJ0eSIsCisgICAg
ICAiZmlsdGVyIiwgImZpbHRlckJ5IiwgImZpbHRlclByb3BlcnR5IiwgInVuaXEiLAorICAgICAg
InVuaW9uIiwgImludGVyc2VjdCIKKyAgICBdOworICAgIGZvciAodmFyIGkgPSAwLCBsID0gY29t
cHV0ZWRNYWNyb3MubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CisgICAgICB2YXIga2V5ID0gY29tcHV0
ZWRNYWNyb3NbaV07CisgICAgICBzaGltc1snZW1iZXItY29tcHV0ZWQnXVtrZXldID0gRW1iZXIu
Y29tcHV0ZWRba2V5XTsKKyAgICB9CisKKyAgICBmb3IgKHZhciBtb2R1bGVOYW1lIGluIHNoaW1z
KSB7CisgICAgICBnZW5lcmF0ZU1vZHVsZShtb2R1bGVOYW1lLCBzaGltc1ttb2R1bGVOYW1lXSk7
CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gcHJvY2Vzc1Rlc3RTaGltcygpIHsKKyAgICBpZiAo
RW1iZXIuVGVzdCkgeworICAgICAgdmFyIHRlc3RTaGltcyA9IHsKKyAgICAgICAgJ2VtYmVyLXRl
c3QnOiB7CisgICAgICAgICAgJ2RlZmF1bHQnOiBFbWJlci5UZXN0CisgICAgICAgIH0sCisgICAg
ICAgICdlbWJlci10ZXN0L2FkYXB0ZXInOiB7CisgICAgICAgICAgJ2RlZmF1bHQnOiBFbWJlci5U
ZXN0LkFkYXB0ZXIKKyAgICAgICAgfSwKKyAgICAgICAgJ2VtYmVyLXRlc3QvcXVuaXQtYWRhcHRl
cic6IHsKKyAgICAgICAgICAnZGVmYXVsdCc6IEVtYmVyLlRlc3QuUVVuaXRBZGFwdGVyCisgICAg
ICAgIH0KKyAgICAgIH07CisKKyAgICAgIGZvciAodmFyIG1vZHVsZU5hbWUgaW4gdGVzdFNoaW1z
KSB7CisgICAgICAgIGdlbmVyYXRlTW9kdWxlKG1vZHVsZU5hbWUsIHRlc3RTaGltc1ttb2R1bGVO
YW1lXSk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gZ2VuZXJhdGVNb2R1bGUo
bmFtZSwgdmFsdWVzKSB7CisgICAgZGVmaW5lKG5hbWUsIFtdLCBmdW5jdGlvbigpIHsKKyAgICAg
ICd1c2Ugc3RyaWN0JzsKKworICAgICAgcmV0dXJuIHZhbHVlczsKKyAgICB9KTsKKyAgfQorCisg
IHByb2Nlc3NFbWJlclNoaW1zKCk7CisgIHByb2Nlc3NUZXN0U2hpbXMoKTsKKyAgZ2VuZXJhdGVN
b2R1bGUoJ2pxdWVyeScsIHsgJ2RlZmF1bHQnOiBzZWxmLmpRdWVyeSB9KTsKKyAgZ2VuZXJhdGVN
b2R1bGUoJ3JzdnAnLCB7ICdkZWZhdWx0JzogRW1iZXIuUlNWUCB9KTsKK30pKCk7CisKKzsvKiBn
bG9iYWxzIGRlZmluZSAqLworZGVmaW5lKCdlbWJlci9sb2FkLWluaXRpYWxpemVycycsIFsnZXhw
b3J0cycsICdlbWJlci1sb2FkLWluaXRpYWxpemVycycsICdlbWJlciddLCBmdW5jdGlvbihleHBv
cnRzLCBsb2FkSW5pdGlhbGl6ZXJzLCBFbWJlcikgeworICBFbWJlclsnZGVmYXVsdCddLmRlcHJl
Y2F0ZSgKKyAgICAnVXNhZ2Ugb2YgYCcgKyAnZW1iZXIvbG9hZC1pbml0aWFsaXplcnMnICsgJ2Ag
bW9kdWxlIGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSB1cGRhdGUgdG8gYGVtYmVyLWxvYWQtaW5pdGlh
bGl6ZXJzYC4nLAorICAgIGZhbHNlLAorICAgIHsgaWQ6ICdlbWJlci1sb2FkLWluaXRpYWxpemVy
cy5sZWdhY3ktc2hpbXMnLCB1bnRpbDogJzMuMC4wJyB9CisgICk7CisKKyAgZXhwb3J0c1snZGVm
YXVsdCddID0gbG9hZEluaXRpYWxpemVyc1snZGVmYXVsdCddOworfSk7CisKKzsvKiBnbG9iYWxz
IGRlZmluZSAqLworCitmdW5jdGlvbiBjcmVhdGVEZXByZWNhdGVkTW9kdWxlKG1vZHVsZUlkKSB7
CisgIGRlZmluZShtb2R1bGVJZCwgWydleHBvcnRzJywgJ2VtYmVyLXJlc29sdmVyL3Jlc29sdmVy
JywgJ2VtYmVyJ10sIGZ1bmN0aW9uKGV4cG9ydHMsIFJlc29sdmVyLCBFbWJlcikgeworICAgIEVt
YmVyWydkZWZhdWx0J10uZGVwcmVjYXRlKAorICAgICAgJ1VzYWdlIG9mIGAnICsgbW9kdWxlSWQg
KyAnYCBtb2R1bGUgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVwZGF0ZSB0byBgZW1iZXItcmVzb2x2
ZXJgLicsCisgICAgICBmYWxzZSwKKyAgICAgIHsgaWQ6ICdlbWJlci1yZXNvbHZlci5sZWdhY3kt
c2hpbXMnLCB1bnRpbDogJzMuMC4wJyB9CisgICAgKTsKKworICAgIGV4cG9ydHNbJ2RlZmF1bHQn
XSA9IFJlc29sdmVyWydkZWZhdWx0J107CisgIH0pOworfQorCitjcmVhdGVEZXByZWNhdGVkTW9k
dWxlKCdlbWJlci9yZXNvbHZlcicpOworY3JlYXRlRGVwcmVjYXRlZE1vZHVsZSgncmVzb2x2ZXIn
KTsKKworO2RlZmluZSgnZW1iZXItYWpheC9lcnJvcnMnLCBbJ2V4cG9ydHMnLCAnZW1iZXInXSwg
ZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlcikgeworICAndXNlIHN0cmljdCc7CisKKyAgZXhwb3J0
cy5BamF4RXJyb3IgPSBBamF4RXJyb3I7CisgIGV4cG9ydHMuSW52YWxpZEVycm9yID0gSW52YWxp
ZEVycm9yOworICBleHBvcnRzLlVuYXV0aG9yaXplZEVycm9yID0gVW5hdXRob3JpemVkRXJyb3I7
CisgIGV4cG9ydHMuRm9yYmlkZGVuRXJyb3IgPSBGb3JiaWRkZW5FcnJvcjsKKworICB2YXIgRW1i
ZXJFcnJvciA9IF9lbWJlclsnZGVmYXVsdCddLkVycm9yOworCisgIC8qKgorICAgIEBjbGFzcyBB
amF4RXJyb3IKKyAgICBAbmFtZXNwYWNlIERTCisgICovCisKKyAgZnVuY3Rpb24gQWpheEVycm9y
KGVycm9ycykgeworICAgIHZhciBtZXNzYWdlID0gYXJndW1lbnRzLmxlbmd0aCA8PSAxIHx8IGFy
Z3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkID8gJ0FqYXggb3BlcmF0aW9uIGZhaWxlZCcgOiBhcmd1
bWVudHNbMV07CisKKyAgICBFbWJlckVycm9yLmNhbGwodGhpcywgbWVzc2FnZSk7CisKKyAgICB0
aGlzLmVycm9ycyA9IGVycm9ycyB8fCBbeworICAgICAgdGl0bGU6ICdBamF4IEVycm9yJywKKyAg
ICAgIGRldGFpbDogbWVzc2FnZQorICAgIH1dOworICB9CisKKyAgQWpheEVycm9yLnByb3RvdHlw
ZSA9IE9iamVjdC5jcmVhdGUoRW1iZXJFcnJvci5wcm90b3R5cGUpOworCisgIGZ1bmN0aW9uIElu
dmFsaWRFcnJvcihlcnJvcnMpIHsKKyAgICBBamF4RXJyb3IuY2FsbCh0aGlzLCBlcnJvcnMsICdS
ZXF1ZXN0IHdhcyByZWplY3RlZCBiZWNhdXNlIGl0IHdhcyBpbnZhbGlkJyk7CisgIH0KKworICBJ
bnZhbGlkRXJyb3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBamF4RXJyb3IucHJvdG90eXBl
KTsKKworICBmdW5jdGlvbiBVbmF1dGhvcml6ZWRFcnJvcihlcnJvcnMpIHsKKyAgICBBamF4RXJy
b3IuY2FsbCh0aGlzLCBlcnJvcnMsICdBamF4IGF1dGhvcml6YXRpb24gZmFpbGVkJyk7CisgIH0K
KworICBVbmF1dGhvcml6ZWRFcnJvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFqYXhFcnJv
ci5wcm90b3R5cGUpOworCisgIGZ1bmN0aW9uIEZvcmJpZGRlbkVycm9yKGVycm9ycykgeworICAg
IEFqYXhFcnJvci5jYWxsKHRoaXMsIGVycm9ycywgJ1JlcXVlc3Qgd2FzIHJlamVjdGVkIGJlY2F1
c2UgdXNlciBpcyBub3QgcGVybWl0dGVkIHRvIHBlcmZvcm0gdGhpcyBvcGVyYXRpb24uJyk7Cisg
IH0KKworICBGb3JiaWRkZW5FcnJvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFqYXhFcnJv
ci5wcm90b3R5cGUpOworfSk7CitkZWZpbmUoJ2VtYmVyLWFqYXgvaW5kZXgnLCBbJ2V4cG9ydHMn
LCAnZW1iZXItYWpheC9yZXF1ZXN0J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJBamF4UmVx
dWVzdCkgeworICAndXNlIHN0cmljdCc7CisKKyAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9y
dHMsICdkZWZhdWx0JywgeworICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgZ2V0OiBmdW5jdGlv
biBnZXQoKSB7CisgICAgICByZXR1cm4gX2VtYmVyQWpheFJlcXVlc3RbJ2RlZmF1bHQnXTsKKyAg
ICB9CisgIH0pOworfSk7CitkZWZpbmUoJ2VtYmVyLWFqYXgvbWFrZS1wcm9taXNlJywgWydleHBv
cnRzJywgJ2VtYmVyJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXIpIHsKKyAgJ3VzZSBzdHJp
Y3QnOworCisgIGV4cG9ydHNbJ2RlZmF1bHQnXSA9IG1ha2VQcm9taXNlOworCisgIHZhciBydW4g
PSBfZW1iZXJbJ2RlZmF1bHQnXS5ydW47CisgIHZhciBSU1ZQID0gX2VtYmVyWydkZWZhdWx0J10u
UlNWUDsKKworICBmdW5jdGlvbiBtYWtlUHJvbWlzZShzZXR0aW5ncykgeworICAgIHZhciB0eXBl
ID0gc2V0dGluZ3MudHlwZSB8fCAnR0VUJzsKKyAgICByZXR1cm4gbmV3IFJTVlAuUHJvbWlzZShm
dW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICBzZXR0aW5ncy5zdWNjZXNzID0gbWFr
ZVN1Y2Nlc3MocmVzb2x2ZSk7CisgICAgICBzZXR0aW5ncy5lcnJvciA9IG1ha2VFcnJvcihyZWpl
Y3QpOworICAgICAgX2VtYmVyWydkZWZhdWx0J10uJC5hamF4KHNldHRpbmdzKTsKKyAgICB9LCAn
ZW1iZXItYWpheDogJyArIHR5cGUgKyAnIHRvICcgKyBzZXR0aW5ncy51cmwpOworICB9CisKKyAg
ZnVuY3Rpb24gbWFrZVN1Y2Nlc3MocmVzb2x2ZSkgeworICAgIHJldHVybiBmdW5jdGlvbiBzdWNj
ZXNzKHJlc3BvbnNlLCB0ZXh0U3RhdHVzLCBqcVhIUikgeworICAgICAgcnVuKG51bGwsIHJlc29s
dmUsIHsKKyAgICAgICAgcmVzcG9uc2U6IHJlc3BvbnNlLAorICAgICAgICB0ZXh0U3RhdHVzOiB0
ZXh0U3RhdHVzLAorICAgICAgICBqcVhIUjoganFYSFIKKyAgICAgIH0pOworICAgIH07CisgIH0K
KworICBmdW5jdGlvbiBtYWtlRXJyb3IocmVqZWN0KSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uIGVy
cm9yKGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93bikgeworICAgICAgcnVuKG51bGwsIHJl
amVjdCwgeworICAgICAgICBqcVhIUjoganFYSFIsCisgICAgICAgIHRleHRTdGF0dXM6IHRleHRT
dGF0dXMsCisgICAgICAgIGVycm9yVGhyb3duOiBlcnJvclRocm93bgorICAgICAgfSk7CisgICAg
fTsKKyAgfQorfSk7CitkZWZpbmUoJ2VtYmVyLWFqYXgvcmF3JywgWydleHBvcnRzJywgJ2VtYmVy
LWFqYXgvbWFrZS1wcm9taXNlJywgJ2VtYmVyLWFqYXgvdXRpbHMvcGFyc2UtYXJncycsICdlbWJl
ciddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyQWpheE1ha2VQcm9taXNlLCBfZW1iZXJBamF4
VXRpbHNQYXJzZUFyZ3MsIF9lbWJlcikgeworICAndXNlIHN0cmljdCc7CisKKyAgdmFyIF9zbGlj
ZWRUb0FycmF5ID0gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBzbGljZUl0ZXJhdG9yKGFy
ciwgaSkgeworICAgICAgdmFyIF9hcnIgPSBbXTt2YXIgX24gPSB0cnVlO3ZhciBfZCA9IGZhbHNl
O3ZhciBfZSA9IHVuZGVmaW5lZDt0cnkgeworICAgICAgICBmb3IgKHZhciBfaSA9IGFycltTeW1i
b2wuaXRlcmF0b3JdKCksIF9zOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0
cnVlKSB7CisgICAgICAgICAgX2Fyci5wdXNoKF9zLnZhbHVlKTtpZiAoaSAmJiBfYXJyLmxlbmd0
aCA9PT0gaSkgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0gY2F0Y2ggKGVycikgeworICAgICAg
ICBfZCA9IHRydWU7X2UgPSBlcnI7CisgICAgICB9IGZpbmFsbHkgeworICAgICAgICB0cnkgewor
ICAgICAgICAgIGlmICghX24gJiYgX2lbJ3JldHVybiddKSBfaVsncmV0dXJuJ10oKTsKKyAgICAg
ICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICBpZiAoX2QpIHRocm93IF9lOworICAgICAgICB9Cisg
ICAgICB9cmV0dXJuIF9hcnI7CisgICAgfXJldHVybiBmdW5jdGlvbiAoYXJyLCBpKSB7CisgICAg
ICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7CisgICAgICAgIHJldHVybiBhcnI7CisgICAgICB9
IGVsc2UgaWYgKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoYXJyKSkgeworICAgICAgICByZXR1
cm4gc2xpY2VJdGVyYXRvcihhcnIsIGkpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdGhyb3cg
bmV3IFR5cGVFcnJvcignSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJs
ZSBpbnN0YW5jZScpOworICAgICAgfQorICAgIH07CisgIH0pKCk7CisKKyAgZXhwb3J0c1snZGVm
YXVsdCddID0gcmF3OworCisgIHZhciBkZXByZWNhdGUgPSBfZW1iZXJbJ2RlZmF1bHQnXS5kZXBy
ZWNhdGU7CisKKyAgLyoKKyAgICogU2FtZSBhcyBgcmVxdWVzdGAgZXhjZXB0IGl0IHJlc29sdmVz
IGFuIG9iamVjdCB3aXRoIGB7cmVzcG9uc2UsIHRleHRTdGF0dXMsCisgICAqIGpxWEhSfWAsIHVz
ZWZ1bCBpZiB5b3UgbmVlZCBhY2Nlc3MgdG8gdGhlIGpxWEhSIG9iamVjdCBmb3IgaGVhZGVycywg
ZXRjLgorICAgKi8KKyAgZnVuY3Rpb24gcmF3KCkgeworICAgIGRlcHJlY2F0ZSgnZW1iZXItYWph
eC9yYXcgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGVtYmVyLWFqYXhAMi4w
LjAnLCBmYWxzZSwgeyBpZDogJ2VtYmVyLWFqYXgucmF3JyB9KTsKKworICAgIHZhciBfcGFyc2VB
cmdzJGFwcGx5ID0gX2VtYmVyQWpheFV0aWxzUGFyc2VBcmdzWydkZWZhdWx0J10uYXBwbHkobnVs
bCwgYXJndW1lbnRzKTsKKworICAgIHZhciBfcGFyc2VBcmdzJGFwcGx5MiA9IF9zbGljZWRUb0Fy
cmF5KF9wYXJzZUFyZ3MkYXBwbHksIDMpOworCisgICAgdmFyIHVybCA9IF9wYXJzZUFyZ3MkYXBw
bHkyWzBdOworICAgIHZhciB0eXBlID0gX3BhcnNlQXJncyRhcHBseTJbMV07CisgICAgdmFyIHNl
dHRpbmdzID0gX3BhcnNlQXJncyRhcHBseTJbMl07CisKKyAgICBpZiAoIXNldHRpbmdzKSB7Cisg
ICAgICBzZXR0aW5ncyA9IHt9OworICAgIH0KKyAgICBzZXR0aW5ncy51cmwgPSB1cmw7CisgICAg
c2V0dGluZ3MudHlwZSA9IHR5cGU7CisgICAgcmV0dXJuICgwLCBfZW1iZXJBamF4TWFrZVByb21p
c2VbJ2RlZmF1bHQnXSkoc2V0dGluZ3MpOworICB9Cit9KTsKK2RlZmluZSgnZW1iZXItYWpheC9y
ZXF1ZXN0JywgWydleHBvcnRzJywgJ2VtYmVyLWFqYXgvcmF3JywgJ2VtYmVyJ10sIGZ1bmN0aW9u
IChleHBvcnRzLCBfZW1iZXJBamF4UmF3LCBfZW1iZXIpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisg
IGV4cG9ydHNbJ2RlZmF1bHQnXSA9IHJlcXVlc3Q7CisKKyAgdmFyIGRlcHJlY2F0ZSA9IF9lbWJl
clsnZGVmYXVsdCddLmRlcHJlY2F0ZTsKKworICAvKgorICAgKiBqUXVlcnkuYWpheCB3cmFwcGVy
LCBzdXBwb3J0cyB0aGUgc2FtZSBzaWduYXR1cmUgZXhjZXB0IHByb3ZpZGluZworICAgKiBgc3Vj
Y2Vzc2AgYW5kIGBlcnJvcmAgaGFuZGxlcnMgd2lsbCB0aHJvdyBhbiBlcnJvciAodXNlIHByb21p
c2VzIGluc3RlYWQpCisgICAqIGFuZCBpdCByZXNvbHZlcyBvbmx5IHRoZSByZXNwb25zZSAobm8g
YWNjZXNzIHRvIGpxWEhSIG9yIHRleHRTdGF0dXMpLgorICAgKi8KKyAgZnVuY3Rpb24gcmVxdWVz
dCgpIHsKKyAgICBkZXByZWNhdGUoJ2VtYmVyLWFqYXgvcmVxdWVzdCBpcyBkZXByZWNhdGVkIGFu
ZCB3aWxsIGJlIHJlbW92ZWQgaW4gZW1iZXItYWpheEAyLjAuMCcsIGZhbHNlLCB7IGlkOiAnZW1i
ZXItYWpheC5yYXcnIH0pOworICAgIHJldHVybiBfZW1iZXJBamF4UmF3WydkZWZhdWx0J10uYXBw
bHkodW5kZWZpbmVkLCBhcmd1bWVudHMpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkgeworICAgICAg
cmV0dXJuIHJlc3VsdC5yZXNwb25zZTsKKyAgICB9LCBudWxsLCAnZW1iZXItYWpheDogdW53cmFw
IHJhdyBhamF4IHJlc3BvbnNlJyk7CisgIH0KK30pOworZGVmaW5lKCdlbWJlci1hamF4L3NlcnZp
Y2VzL2FqYXgnLCBbJ2V4cG9ydHMnLCAnZW1iZXInLCAnZW1iZXItYWpheC9lcnJvcnMnLCAnZW1i
ZXItYWpheC91dGlscy9wYXJzZS1yZXNwb25zZS1oZWFkZXJzJ10sIGZ1bmN0aW9uIChleHBvcnRz
LCBfZW1iZXIsIF9lbWJlckFqYXhFcnJvcnMsIF9lbWJlckFqYXhVdGlsc1BhcnNlUmVzcG9uc2VI
ZWFkZXJzKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICB2YXIgZGVwcmVjYXRlID0gX2VtYmVyWydk
ZWZhdWx0J10uZGVwcmVjYXRlOworICB2YXIgZ2V0ID0gX2VtYmVyWydkZWZhdWx0J10uZ2V0Owor
ICB2YXIgaXNCbGFuayA9IF9lbWJlclsnZGVmYXVsdCddLmlzQmxhbms7CisKKyAgLyoqCisgICAg
IyMjIEhlYWRlcnMgY3VzdG9taXphdGlvbgorICAKKyAgICBTb21lIEFQSXMgcmVxdWlyZSBIVFRQ
IGhlYWRlcnMsIGUuZy4gdG8gcHJvdmlkZSBhbiBBUEkga2V5LiBBcmJpdHJhcnkKKyAgICBoZWFk
ZXJzIGNhbiBiZSBzZXQgYXMga2V5L3ZhbHVlIHBhaXJzIG9uIHRoZSBgUkVTVEFkYXB0ZXJgJ3Mg
YGhlYWRlcnNgCisgICAgb2JqZWN0IGFuZCBFbWJlciBEYXRhIHdpbGwgc2VuZCB0aGVtIGFsb25n
IHdpdGggZWFjaCBhamF4IHJlcXVlc3QuCisgIAorICAgIGBgYGFwcC9zZXJ2aWNlcy9hamF4Cisg
ICAgaW1wb3J0IEFqYXhTZXJ2aWNlIGZyb20gJ2VtYmVyLWFqYXgvc2VydmljZXMvYWpheCc7Cisg
IAorICAgIGV4cG9ydCBkZWZhdWx0IEFqYXhTZXJ2aWNlLmV4dGVuZCh7CisgICAgICBoZWFkZXJz
OiB7CisgICAgICAgICJBUElfS0VZIjogInNlY3JldCBrZXkiLAorICAgICAgICAiQU5PVEhFUl9I
RUFERVIiOiAiU29tZSBoZWFkZXIgdmFsdWUiCisgICAgICB9CisgICAgfSk7CisgICAgYGBgCisg
IAorICAgIGBoZWFkZXJzYCBjYW4gYWxzbyBiZSB1c2VkIGFzIGEgY29tcHV0ZWQgcHJvcGVydHkg
dG8gc3VwcG9ydCBkeW5hbWljCisgICAgaGVhZGVycy4KKyAgCisgICAgYGBgYXBwL3NlcnZpY2Vz
L2FqYXguanMKKyAgICBpbXBvcnQgRW1iZXIgZnJvbSAnZW1iZXInOworICAgIGltcG9ydCBBamF4
U2VydmljZSBmcm9tICdlbWJlci1hamF4L3NlcnZpY2VzL2FqYXgnOworICAKKyAgICBleHBvcnQg
ZGVmYXVsdCBBamF4U2VydmljZS5leHRlbmQoeworICAgICAgc2Vzc2lvbjogRW1iZXIuaW5qZWN0
LnNlcnZpY2UoKSwKKyAgICAgIGhlYWRlcnM6IEVtYmVyLmNvbXB1dGVkKCJzZXNzaW9uLmF1dGhU
b2tlbiIsIGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4geworICAgICAgICAgICJBUElfS0VZ
IjogdGhpcy5nZXQoInNlc3Npb24uYXV0aFRva2VuIiksCisgICAgICAgICAgIkFOT1RIRVJfSEVB
REVSIjogIlNvbWUgaGVhZGVyIHZhbHVlIgorICAgICAgICB9OworICAgICAgfSkKKyAgICB9KTsK
KyAgICBgYGAKKyAgCisgICAgSW4gc29tZSBjYXNlcywgeW91ciBkeW5hbWljIGhlYWRlcnMgbWF5
IHJlcXVpcmUgZGF0YSBmcm9tIHNvbWUKKyAgICBvYmplY3Qgb3V0c2lkZSBvZiBFbWJlcidzIG9i
c2VydmVyIHN5c3RlbSAoZm9yIGV4YW1wbGUKKyAgICBgZG9jdW1lbnQuY29va2llYCkuIFlvdSBj
YW4gdXNlIHRoZQorICAgIFt2b2xhdGlsZV0oL2FwaS9jbGFzc2VzL0VtYmVyLkNvbXB1dGVkUHJv
cGVydHkuaHRtbCNtZXRob2Rfdm9sYXRpbGUpCisgICAgZnVuY3Rpb24gdG8gc2V0IHRoZSBwcm9w
ZXJ0eSBpbnRvIGEgbm9uLWNhY2hlZCBtb2RlIGNhdXNpbmcgdGhlIGhlYWRlcnMgdG8KKyAgICBi
ZSByZWNvbXB1dGVkIHdpdGggZXZlcnkgcmVxdWVzdC4KKyAgCisgICAgYGBgYXBwL3NlcnZpY2Vz
L2FqYXguanMKKyAgICBpbXBvcnQgRW1iZXIgZnJvbSAnZW1iZXInOworICAgIGltcG9ydCBBamF4
U2VydmljZSBmcm9tICdlbWJlci1hamF4L3NlcnZpY2VzL2FqYXgnOworICAKKyAgICBleHBvcnQg
ZGVmYXVsdCBBamF4U2VydmljZS5leHRlbmQoeworICAgICAgc2Vzc2lvbjogRW1iZXIuaW5qZWN0
LnNlcnZpY2UoKSwKKyAgICAgIGhlYWRlcnM6IEVtYmVyLmNvbXB1dGVkKCJzZXNzaW9uLmF1dGhU
b2tlbiIsIGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4geworICAgICAgICAgICJBUElfS0VZ
IjogRW1iZXIuZ2V0KGRvY3VtZW50LmNvb2tpZS5tYXRjaCgvYXBpS2V5XD0oW147XSopLyksICIx
IiksCisgICAgICAgICAgIkFOT1RIRVJfSEVBREVSIjogIlNvbWUgaGVhZGVyIHZhbHVlIgorICAg
ICAgICB9OworICAgICAgfSkudm9sYXRpbGUoKQorICAgIH0pOworICAgIGBgYAorICAKKyAgKiov
CisgIGV4cG9ydHNbJ2RlZmF1bHQnXSA9IF9lbWJlclsnZGVmYXVsdCddLlNlcnZpY2UuZXh0ZW5k
KHsKKworICAgIHJlcXVlc3Q6IGZ1bmN0aW9uIHJlcXVlc3QodXJsLCBvcHRpb25zKSB7CisgICAg
ICB2YXIgX3RoaXMgPSB0aGlzOworCisgICAgICB2YXIgb3B0czsKKworICAgICAgaWYgKGFyZ3Vt
ZW50cy5sZW5ndGggPiAyIHx8IHR5cGVvZiBvcHRpb25zID09PSAnc3RyaW5nJykgeworICAgICAg
ICBkZXByZWNhdGUoJ2VtYmVyLWFqYXgvYWpheCNyZXF1ZXN0IGNhbGxpbmcgcmVxdWVzdCB3aXRo
IGB0eXBlYCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gZW1iZXItYWpheEAx
LjAuMC4gSWYgeW91IHdhbnQgdG8gc3BlY2lmeSBhIHR5cGUgcGFzcyBhbiBvYmplY3QgbGlrZSB7
dHlwZTogXCdERUxFVEVcJ30nLCBmYWxzZSwgeyBpZDogJ2VtYmVyLWFqYXguc2VydmljZS5yZXF1
ZXN0JyB9KTsKKworICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHsKKyAgICAgICAg
ICBvcHRzID0gYXJndW1lbnRzWzJdOworICAgICAgICAgIG9wdHMudHlwZSA9IG9wdGlvbnM7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgb3B0cyA9IHsgdHlwZTogb3B0aW9ucyB9OworICAg
ICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICBvcHRzID0gb3B0aW9uczsKKyAgICAgIH0K
KworICAgICAgdmFyIGhhc2ggPSB0aGlzLm9wdGlvbnModXJsLCBvcHRzKTsKKworICAgICAgcmV0
dXJuIG5ldyBfZW1iZXJbJ2RlZmF1bHQnXS5SU1ZQLlByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUs
IHJlamVjdCkgeworCisgICAgICAgIGhhc2guc3VjY2VzcyA9IGZ1bmN0aW9uIChwYXlsb2FkLCB0
ZXh0U3RhdHVzLCBqcVhIUikgeworICAgICAgICAgIHZhciByZXNwb25zZSA9IF90aGlzLmhhbmRs
ZVJlc3BvbnNlKGpxWEhSLnN0YXR1cywgKDAsIF9lbWJlckFqYXhVdGlsc1BhcnNlUmVzcG9uc2VI
ZWFkZXJzWydkZWZhdWx0J10pKGpxWEhSLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSwgcGF5bG9h
ZCk7CisKKyAgICAgICAgICBpZiAocmVzcG9uc2UgaW5zdGFuY2VvZiBfZW1iZXJBamF4RXJyb3Jz
LkFqYXhFcnJvcikgeworICAgICAgICAgICAgcmVqZWN0KHJlc3BvbnNlKTsKKyAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7CisgICAgICAgICAgfQorICAg
ICAgICB9OworCisgICAgICAgIGhhc2guZXJyb3IgPSBmdW5jdGlvbiAoanFYSFIsIHRleHRTdGF0
dXMsIGVycm9yVGhyb3duKSB7CisgICAgICAgICAgdmFyIGVycm9yID0gdW5kZWZpbmVkOworCisg
ICAgICAgICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikpIHsKKyAgICAgICAgICAgIGlm
IChlcnJvclRocm93biBpbnN0YW5jZW9mIEVycm9yKSB7CisgICAgICAgICAgICAgIGVycm9yID0g
ZXJyb3JUaHJvd247CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBlcnJvciA9
IF90aGlzLmhhbmRsZVJlc3BvbnNlKGpxWEhSLnN0YXR1cywgKDAsIF9lbWJlckFqYXhVdGlsc1Bh
cnNlUmVzcG9uc2VIZWFkZXJzWydkZWZhdWx0J10pKGpxWEhSLmdldEFsbFJlc3BvbnNlSGVhZGVy
cygpKSwgX3RoaXMucGFyc2VFcnJvclJlc3BvbnNlKGpxWEhSLnJlc3BvbnNlVGV4dCkgfHwgZXJy
b3JUaHJvd24pOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICByZWplY3Qo
ZXJyb3IpOworICAgICAgICB9OworCisgICAgICAgIF9lbWJlclsnZGVmYXVsdCddLiQuYWpheCho
YXNoKTsKKyAgICAgIH0sICdlbWJlci1hamF4OiAnICsgaGFzaC50eXBlICsgJyB0byAnICsgdXJs
KTsKKyAgICB9LAorCisgICAgLy8gY2FsbHMgYHJlcXVlc3QoKWAgYnV0IGZvcmNlcyBgb3B0aW9u
cy50eXBlYCB0byBgUE9TVGAKKyAgICBwb3N0OiBmdW5jdGlvbiBwb3N0KHVybCwgb3B0aW9ucykg
eworICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdCh1cmwsIHRoaXMuX2FkZFR5cGVUb09wdGlvbnNG
b3Iob3B0aW9ucywgJ1BPU1QnKSk7CisgICAgfSwKKworICAgIC8vIGNhbGxzIGByZXF1ZXN0KClg
IGJ1dCBmb3JjZXMgYG9wdGlvbnMudHlwZWAgdG8gYFBVVGAKKyAgICBwdXQ6IGZ1bmN0aW9uIHB1
dCh1cmwsIG9wdGlvbnMpIHsKKyAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QodXJsLCB0aGlzLl9h
ZGRUeXBlVG9PcHRpb25zRm9yKG9wdGlvbnMsICdQVVQnKSk7CisgICAgfSwKKworICAgIC8vIGNh
bGxzIGByZXF1ZXN0KClgIGJ1dCBmb3JjZXMgYG9wdGlvbnMudHlwZWAgdG8gYFBBVENIYAorICAg
IHBhdGNoOiBmdW5jdGlvbiBwYXRjaCh1cmwsIG9wdGlvbnMpIHsKKyAgICAgIHJldHVybiB0aGlz
LnJlcXVlc3QodXJsLCB0aGlzLl9hZGRUeXBlVG9PcHRpb25zRm9yKG9wdGlvbnMsICdQQVRDSCcp
KTsKKyAgICB9LAorCisgICAgLy8gY2FsbHMgYHJlcXVlc3QoKWAgYnV0IGZvcmNlcyBgb3B0aW9u
cy50eXBlYCB0byBgREVMRVRFYAorICAgIGRlbDogZnVuY3Rpb24gZGVsKHVybCwgb3B0aW9ucykg
eworICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdCh1cmwsIHRoaXMuX2FkZFR5cGVUb09wdGlvbnNG
b3Iob3B0aW9ucywgJ0RFTEVURScpKTsKKyAgICB9LAorCisgICAgLy8gZm9yY2libHkgbWFuaXB1
bGF0ZXMgdGhlIG9wdGlvbnMgaGFzaCB0byBpbmNsdWRlIHRoZSBIVFRQIG1ldGhvZCBvbiB0aGUg
dHlwZSBrZXkKKyAgICBfYWRkVHlwZVRvT3B0aW9uc0ZvcjogZnVuY3Rpb24gX2FkZFR5cGVUb09w
dGlvbnNGb3Iob3B0aW9ucywgbWV0aG9kKSB7CisgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7
fTsKKyAgICAgIG9wdGlvbnMudHlwZSA9IG1ldGhvZDsKKyAgICAgIHJldHVybiBvcHRpb25zOwor
ICAgIH0sCisKKyAgICAvKioKKyAgICAgIEBtZXRob2Qgb3B0aW9ucworICAgICAgQHByaXZhdGUK
KyAgICAgIEBwYXJhbSB7U3RyaW5nfSB1cmwKKyAgICAgIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25z
CisgICAgICBAcmV0dXJuIHtPYmplY3R9CisgICAgKi8KKyAgICBvcHRpb25zOiBmdW5jdGlvbiBv
cHRpb25zKHVybCwgX29wdGlvbnMpIHsKKyAgICAgIHZhciBoYXNoID0gX29wdGlvbnMgfHwge307
CisgICAgICBoYXNoLnVybCA9IHRoaXMuX2J1aWxkVVJMKHVybCk7CisgICAgICBoYXNoLnR5cGUg
PSBoYXNoLnR5cGUgfHwgJ0dFVCc7CisgICAgICBoYXNoLmRhdGFUeXBlID0gaGFzaC5kYXRhVHlw
ZSB8fCAnanNvbic7CisgICAgICBoYXNoLmNvbnRleHQgPSB0aGlzOworCisgICAgICB2YXIgaGVh
ZGVycyA9IGdldCh0aGlzLCAnaGVhZGVycycpOworICAgICAgaWYgKGhlYWRlcnMgIT09IHVuZGVm
aW5lZCkgeworICAgICAgICBoYXNoLmJlZm9yZVNlbmQgPSBmdW5jdGlvbiAoeGhyKSB7CisgICAg
ICAgICAgT2JqZWN0LmtleXMoaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7CisgICAg
ICAgICAgICByZXR1cm4geGhyLnNldFJlcXVlc3RIZWFkZXIoa2V5LCBoZWFkZXJzW2tleV0pOwor
ICAgICAgICAgIH0pOworICAgICAgICB9OworICAgICAgfQorCisgICAgICByZXR1cm4gaGFzaDsK
KyAgICB9LAorCisgICAgX2J1aWxkVVJMOiBmdW5jdGlvbiBfYnVpbGRVUkwodXJsKSB7CisgICAg
ICB2YXIgaG9zdCA9IGdldCh0aGlzLCAnaG9zdCcpOworICAgICAgaWYgKGlzQmxhbmsoaG9zdCkp
IHsKKyAgICAgICAgcmV0dXJuIHVybDsKKyAgICAgIH0KKyAgICAgIHZhciBzdGFydHNXaXRoID0g
U3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoIHx8IGZ1bmN0aW9uIChzZWFyY2hTdHJpbmcsIHBv
c2l0aW9uKSB7CisgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gfHwgMDsKKyAgICAgICAgcmV0
dXJuIHRoaXMuaW5kZXhPZihzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKSA9PT0gcG9zaXRpb247Cisg
ICAgICB9OworICAgICAgaWYgKHN0YXJ0c1dpdGguY2FsbCh1cmwsICcvJykpIHsKKyAgICAgICAg
cmV0dXJuICcnICsgaG9zdCArIHVybDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBo
b3N0ICsgJy8nICsgdXJsOworICAgICAgfQorICAgIH0sCisKKyAgICAvKioKKyAgICAgVGFrZXMg
YW4gYWpheCByZXNwb25zZSwgYW5kIHJldHVybnMgdGhlIGpzb24gcGF5bG9hZCBvciBhbiBlcnJv
ci4KKyAgICAgIEJ5IGRlZmF1bHQgdGhpcyBob29rIGp1c3QgcmV0dXJucyB0aGUganNvbiBwYXls
b2FkIHBhc3NlZCB0byBpdC4KKyAgICAgWW91IG1pZ2h0IHdhbnQgdG8gb3ZlcnJpZGUgaXQgaW4g
dHdvIGNhc2VzOgorICAgICAgMS4gWW91ciBBUEkgbWlnaHQgcmV0dXJuIHVzZWZ1bCByZXN1bHRz
IGluIHRoZSByZXNwb25zZSBoZWFkZXJzLgorICAgICBSZXNwb25zZSBoZWFkZXJzIGFyZSBwYXNz
ZWQgaW4gYXMgdGhlIHNlY29uZCBhcmd1bWVudC4KKyAgICAgIDIuIFlvdXIgQVBJIG1pZ2h0IHJl
dHVybiBlcnJvcnMgYXMgc3VjY2Vzc2Z1bCByZXNwb25zZXMgd2l0aCBzdGF0dXMgY29kZQorICAg
ICAyMDAgYW5kIGFuIEVycm9ycyB0ZXh0IG9yIG9iamVjdC4KKyAgICAgQG1ldGhvZCBoYW5kbGVS
ZXNwb25zZQorICAgICBAcGFyYW0gIHtOdW1iZXJ9IHN0YXR1cworICAgICBAcGFyYW0gIHtPYmpl
Y3R9IGhlYWRlcnMKKyAgICAgQHBhcmFtICB7T2JqZWN0fSBwYXlsb2FkCisgICAgIEByZXR1cm4g
e09iamVjdCB8IERTLkFkYXB0ZXJFcnJvcn0gcmVzcG9uc2UKKyAgICAqLworICAgIGhhbmRsZVJl
c3BvbnNlOiBmdW5jdGlvbiBoYW5kbGVSZXNwb25zZShzdGF0dXMsIGhlYWRlcnMsIHBheWxvYWQp
IHsKKyAgICAgIGlmICh0aGlzLmlzU3VjY2VzcyhzdGF0dXMsIGhlYWRlcnMsIHBheWxvYWQpKSB7
CisgICAgICAgIHJldHVybiBwYXlsb2FkOworICAgICAgfSBlbHNlIGlmICh0aGlzLmlzVW5hdXRo
b3JpemVkKHN0YXR1cywgaGVhZGVycywgcGF5bG9hZCkpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBf
ZW1iZXJBamF4RXJyb3JzLlVuYXV0aG9yaXplZEVycm9yKHBheWxvYWQuZXJyb3JzKTsKKyAgICAg
IH0gZWxzZSBpZiAodGhpcy5pc0ZvcmJpZGRlbihzdGF0dXMsIGhlYWRlcnMsIHBheWxvYWQpKSB7
CisgICAgICAgIHJldHVybiBuZXcgX2VtYmVyQWpheEVycm9ycy5Gb3JiaWRkZW5FcnJvcihwYXls
b2FkLmVycm9ycyk7CisgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNJbnZhbGlkKHN0YXR1cywgaGVh
ZGVycywgcGF5bG9hZCkpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBfZW1iZXJBamF4RXJyb3JzLklu
dmFsaWRFcnJvcihwYXlsb2FkLmVycm9ycyk7CisgICAgICB9CisKKyAgICAgIHZhciBlcnJvcnMg
PSB0aGlzLm5vcm1hbGl6ZUVycm9yUmVzcG9uc2Uoc3RhdHVzLCBoZWFkZXJzLCBwYXlsb2FkKTsK
KworICAgICAgcmV0dXJuIG5ldyBfZW1iZXJBamF4RXJyb3JzLkFqYXhFcnJvcihlcnJvcnMpOwor
ICAgIH0sCisKKyAgICAvKioKKyAgICAgRGVmYXVsdCBgaGFuZGxlUmVzcG9uc2VgIGltcGxlbWVu
dGF0aW9uIHVzZXMgdGhpcyBob29rIHRvIGRlY2lkZSBpZiB0aGUKKyAgICAgcmVzcG9uc2UgaXMg
YSBhbiBhdXRob3JpemVkIGVycm9yLgorICAgICBAbWV0aG9kIGlzVW5hdXRob3JpemVkCisgICAg
IEBwYXJhbSAge051bWJlcn0gc3RhdHVzCisgICAgIEBwYXJhbSAge09iamVjdH0gaGVhZGVycwor
ICAgICBAcGFyYW0gIHtPYmplY3R9IHBheWxvYWQKKyAgICAgQHJldHVybiB7Qm9vbGVhbn0KKyAg
ICAqLworICAgIGlzVW5hdXRob3JpemVkOiBmdW5jdGlvbiBpc1VuYXV0aG9yaXplZChzdGF0dXMg
LyosIGhlYWRlcnMsIHBheWxvYWQgKi8pIHsKKyAgICAgIHJldHVybiBzdGF0dXMgPT09IDQwMTsK
KyAgICB9LAorCisgICAgLyoqCisgICAgICAgRGVmYXVsdCBgaGFuZGxlUmVzcG9uc2VgIGltcGxl
bWVudGF0aW9uIHVzZXMgdGhpcyBob29rIHRvIGRlY2lkZSBpZiB0aGUKKyAgICAgICByZXNwb25z
ZSBpcyBhIGZvcmJpZGRlbiBlcnJvci4KKyAgICAgICBAbWV0aG9kIGlzRm9yYmlkZGVuCisgICAg
ICAgQHBhcmFtICB7TnVtYmVyfSBzdGF0dXMKKyAgICAgICBAcGFyYW0gIHtPYmplY3R9IGhlYWRl
cnMKKyAgICAgICBAcGFyYW0gIHtPYmplY3R9IHBheWxvYWQKKyAgICAgICBAcmV0dXJuIHtCb29s
ZWFufQorICAgICAqLworICAgIGlzRm9yYmlkZGVuOiBmdW5jdGlvbiBpc0ZvcmJpZGRlbihzdGF0
dXMgLyosIGhlYWRlcnMsIHBheWxvYWQgKi8pIHsKKyAgICAgIHJldHVybiBzdGF0dXMgPT09IDQw
MzsKKyAgICB9LAorCisgICAgLyoqCisgICAgICBEZWZhdWx0IGBoYW5kbGVSZXNwb25zZWAgaW1w
bGVtZW50YXRpb24gdXNlcyB0aGlzIGhvb2sgdG8gZGVjaWRlIGlmIHRoZQorICAgICAgcmVzcG9u
c2UgaXMgYSBhbiBpbnZhbGlkIGVycm9yLgorICAgICAgQG1ldGhvZCBpc0ludmFsaWQKKyAgICAg
IEBwYXJhbSAge051bWJlcn0gc3RhdHVzCisgICAgICBAcGFyYW0gIHtPYmplY3R9IGhlYWRlcnMK
KyAgICAgIEBwYXJhbSAge09iamVjdH0gcGF5bG9hZAorICAgICAgQHJldHVybiB7Qm9vbGVhbn0K
KyAgICAqLworICAgIGlzSW52YWxpZDogZnVuY3Rpb24gaXNJbnZhbGlkKHN0YXR1cyAvKiwgaGVh
ZGVycywgcGF5bG9hZCAqLykgeworICAgICAgcmV0dXJuIHN0YXR1cyA9PT0gNDIyOworICAgIH0s
CisKKyAgICAvKioKKyAgICAgRGVmYXVsdCBgaGFuZGxlUmVzcG9uc2VgIGltcGxlbWVudGF0aW9u
IHVzZXMgdGhpcyBob29rIHRvIGRlY2lkZSBpZiB0aGUKKyAgICAgcmVzcG9uc2UgaXMgYSBzdWNj
ZXNzLgorICAgICBAbWV0aG9kIGlzU3VjY2VzcworICAgICBAcGFyYW0gIHtOdW1iZXJ9IHN0YXR1
cworICAgICBAcGFyYW0gIHtPYmplY3R9IGhlYWRlcnMKKyAgICAgQHBhcmFtICB7T2JqZWN0fSBw
YXlsb2FkCisgICAgIEByZXR1cm4ge0Jvb2xlYW59CisgICAgKi8KKyAgICBpc1N1Y2Nlc3M6IGZ1
bmN0aW9uIGlzU3VjY2VzcyhzdGF0dXMgLyosIGhlYWRlcnMsIHBheWxvYWQgKi8pIHsKKyAgICAg
IHJldHVybiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCB8fCBzdGF0dXMgPT09IDMwNDsK
KyAgICB9LAorCisgICAgLyoqCisgICAgICBAbWV0aG9kIHBhcnNlRXJyb3JSZXNwb25zZQorICAg
ICAgQHByaXZhdGUKKyAgICAgIEBwYXJhbSB7U3RyaW5nfSByZXNwb25zZVRleHQKKyAgICAgIEBy
ZXR1cm4ge09iamVjdH0KKyAgICAqLworICAgIHBhcnNlRXJyb3JSZXNwb25zZTogZnVuY3Rpb24g
cGFyc2VFcnJvclJlc3BvbnNlKHJlc3BvbnNlVGV4dCkgeworICAgICAgdmFyIGpzb24gPSByZXNw
b25zZVRleHQ7CisKKyAgICAgIHRyeSB7CisgICAgICAgIGpzb24gPSBfZW1iZXJbJ2RlZmF1bHQn
XS4kLnBhcnNlSlNPTihyZXNwb25zZVRleHQpOworICAgICAgfSBjYXRjaCAoZSkge30KKworICAg
ICAgcmV0dXJuIGpzb247CisgICAgfSwKKworICAgIC8qKgorICAgICAgQG1ldGhvZCBub3JtYWxp
emVFcnJvclJlc3BvbnNlCisgICAgICBAcHJpdmF0ZQorICAgICAgQHBhcmFtICB7TnVtYmVyfSBz
dGF0dXMKKyAgICAgIEBwYXJhbSAge09iamVjdH0gaGVhZGVycworICAgICAgQHBhcmFtICB7T2Jq
ZWN0fSBwYXlsb2FkCisgICAgICBAcmV0dXJuIHtPYmplY3R9IGVycm9ycyBwYXlsb2FkCisgICAg
Ki8KKyAgICBub3JtYWxpemVFcnJvclJlc3BvbnNlOiBmdW5jdGlvbiBub3JtYWxpemVFcnJvclJl
c3BvbnNlKHN0YXR1cywgaGVhZGVycywgcGF5bG9hZCkgeworICAgICAgaWYgKHBheWxvYWQgJiYg
dHlwZW9mIHBheWxvYWQgPT09ICdvYmplY3QnICYmIHBheWxvYWQuZXJyb3JzKSB7CisgICAgICAg
IHJldHVybiBwYXlsb2FkLmVycm9yczsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBb
eworICAgICAgICAgIHN0YXR1czogJycgKyBzdGF0dXMsCisgICAgICAgICAgdGl0bGU6ICJUaGUg
YmFja2VuZCByZXNwb25kZWQgd2l0aCBhbiBlcnJvciIsCisgICAgICAgICAgZGV0YWlsOiAnJyAr
IHBheWxvYWQKKyAgICAgICAgfV07CisgICAgICB9CisgICAgfQorICB9KTsKK30pOworZGVmaW5l
KCJlbWJlci1hamF4L3V0aWxzL3BhcnNlLWFyZ3MiLCBbImV4cG9ydHMiXSwgZnVuY3Rpb24gKGV4
cG9ydHMpIHsKKyAgInVzZSBzdHJpY3QiOworCisgIHZhciBfc2xpY2VkVG9BcnJheSA9IChmdW5j
dGlvbiAoKSB7CisgICAgZnVuY3Rpb24gc2xpY2VJdGVyYXRvcihhcnIsIGkpIHsKKyAgICAgIHZh
ciBfYXJyID0gW107dmFyIF9uID0gdHJ1ZTt2YXIgX2QgPSBmYWxzZTt2YXIgX2UgPSB1bmRlZmlu
ZWQ7dHJ5IHsKKyAgICAgICAgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBf
czsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeworICAgICAgICAg
IF9hcnIucHVzaChfcy52YWx1ZSk7aWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOwor
ICAgICAgICB9CisgICAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgICAgX2QgPSB0cnVlO19lID0g
ZXJyOworICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICBpZiAoIV9u
ICYmIF9pWyJyZXR1cm4iXSkgX2lbInJldHVybiJdKCk7CisgICAgICAgIH0gZmluYWxseSB7Cisg
ICAgICAgICAgaWYgKF9kKSB0aHJvdyBfZTsKKyAgICAgICAgfQorICAgICAgfXJldHVybiBfYXJy
OworICAgIH1yZXR1cm4gZnVuY3Rpb24gKGFyciwgaSkgeworICAgICAgaWYgKEFycmF5LmlzQXJy
YXkoYXJyKSkgeworICAgICAgICByZXR1cm4gYXJyOworICAgICAgfSBlbHNlIGlmIChTeW1ib2wu
aXRlcmF0b3IgaW4gT2JqZWN0KGFycikpIHsKKyAgICAgICAgcmV0dXJuIHNsaWNlSXRlcmF0b3Io
YXJyLCBpKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIklu
dmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKTsKKyAg
ICAgIH0KKyAgICB9OworICB9KSgpOworCisgIGV4cG9ydHNbImRlZmF1bHQiXSA9IHBhcnNlQXJn
czsKKworICBmdW5jdGlvbiBwYXJzZUFyZ3MoKSB7CisgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5h
cHBseShhcmd1bWVudHMpOworICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSkgeworICAgICAgaWYg
KHR5cGVvZiBhcmdzWzBdID09PSAic3RyaW5nIikgeworICAgICAgICB2YXIgX2FyZ3MgPSBfc2xp
Y2VkVG9BcnJheShhcmdzLCAxKTsKKworICAgICAgICB2YXIgdXJsID0gX2FyZ3NbMF07CisKKyAg
ICAgICAgcmV0dXJuIFt1cmxdOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIF9hcmdzMiA9
IF9zbGljZWRUb0FycmF5KGFyZ3MsIDEpOworCisgICAgICAgIHZhciBvcHRpb25zID0gX2FyZ3My
WzBdOworICAgICAgICB2YXIgdXJsID0gb3B0aW9ucy51cmw7CisKKyAgICAgICAgZGVsZXRlIG9w
dGlvbnMudXJsOworICAgICAgICB2YXIgdHlwZSA9IG9wdGlvbnMudHlwZSB8fCBvcHRpb25zLm1l
dGhvZDsKKyAgICAgICAgZGVsZXRlIG9wdGlvbnMudHlwZTsKKyAgICAgICAgZGVsZXRlIG9wdGlv
bnMubWV0aG9kOworICAgICAgICByZXR1cm4gW3VybCwgdHlwZSwgb3B0aW9uc107CisgICAgICB9
CisgICAgfQorICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMikgeworICAgICAgdmFyIF9hcmdzMyA9
IF9zbGljZWRUb0FycmF5KGFyZ3MsIDEpOworCisgICAgICB2YXIgdXJsID0gX2FyZ3MzWzBdOwor
CisgICAgICBpZiAodHlwZW9mIGFyZ3NbMV0gPT09ICdvYmplY3QnKSB7CisgICAgICAgIHZhciBv
cHRpb25zID0gYXJnc1sxXTsKKyAgICAgICAgdmFyIHR5cGUgPSBvcHRpb25zLnR5cGUgfHwgb3B0
aW9ucy5tZXRob2Q7CisgICAgICAgIGRlbGV0ZSBvcHRpb25zLnR5cGU7CisgICAgICAgIGRlbGV0
ZSBvcHRpb25zLm1ldGhvZDsKKyAgICAgICAgcmV0dXJuIFt1cmwsIHR5cGUsIG9wdGlvbnNdOwor
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIHR5cGUgPSBhcmdzWzFdOworICAgICAgICByZXR1
cm4gW3VybCwgdHlwZV07CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBhcmdzOworICB9Cit9
KTsKK2RlZmluZSgnZW1iZXItYWpheC91dGlscy9wYXJzZS1yZXNwb25zZS1oZWFkZXJzJywgWydl
eHBvcnRzJ10sIGZ1bmN0aW9uIChleHBvcnRzKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICBleHBv
cnRzWydkZWZhdWx0J10gPSBwYXJzZVJlc3BvbnNlSGVhZGVyczsKKworICBmdW5jdGlvbiBwYXJz
ZVJlc3BvbnNlSGVhZGVycyhoZWFkZXJTdHIpIHsKKyAgICB2YXIgaGVhZGVycyA9IE9iamVjdC5j
cmVhdGUobnVsbCk7CisgICAgaWYgKCFoZWFkZXJTdHIpIHsKKyAgICAgIHJldHVybiBoZWFkZXJz
OworICAgIH0KKworICAgIHZhciBoZWFkZXJQYWlycyA9IGhlYWRlclN0ci5zcGxpdCgnXHJcbicp
OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGVhZGVyUGFpcnMubGVuZ3RoOyBpKyspIHsKKyAg
ICAgIHZhciBoZWFkZXJQYWlyID0gaGVhZGVyUGFpcnNbaV07CisgICAgICAvLyBDYW4ndCB1c2Ug
c3BsaXQoKSBoZXJlIGJlY2F1c2UgaXQgZG9lcyB0aGUgd3JvbmcgdGhpbmcKKyAgICAgIC8vIGlm
IHRoZSBoZWFkZXIgdmFsdWUgaGFzIHRoZSBzdHJpbmcgIjogIiBpbiBpdC4KKyAgICAgIHZhciBp
bmRleCA9IGhlYWRlclBhaXIuaW5kZXhPZignOiAnKTsKKyAgICAgIGlmIChpbmRleCA+IDApIHsK
KyAgICAgICAgdmFyIGtleSA9IGhlYWRlclBhaXIuc3Vic3RyaW5nKDAsIGluZGV4KTsKKyAgICAg
ICAgdmFyIHZhbCA9IGhlYWRlclBhaXIuc3Vic3RyaW5nKGluZGV4ICsgMik7CisgICAgICAgIGhl
YWRlcnNba2V5XSA9IHZhbDsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gaGVhZGVyczsK
KyAgfQorfSk7CitkZWZpbmUoJ2VtYmVyLWNsaS1hcHAtdmVyc2lvbi9jb21wb25lbnRzL2FwcC12
ZXJzaW9uJywgWydleHBvcnRzJywgJ2VtYmVyJywgJ2VtYmVyLWNsaS1hcHAtdmVyc2lvbi90ZW1w
bGF0ZXMvYXBwLXZlcnNpb24nXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlciwgX2VtYmVyQ2xp
QXBwVmVyc2lvblRlbXBsYXRlc0FwcFZlcnNpb24pIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIGV4
cG9ydHNbJ2RlZmF1bHQnXSA9IF9lbWJlclsnZGVmYXVsdCddLkNvbXBvbmVudC5leHRlbmQoewor
ICAgIHRhZ05hbWU6ICdzcGFuJywKKyAgICBsYXlvdXQ6IF9lbWJlckNsaUFwcFZlcnNpb25UZW1w
bGF0ZXNBcHBWZXJzaW9uWydkZWZhdWx0J10KKyAgfSk7Cit9KTsKK2RlZmluZSgnZW1iZXItY2xp
LWFwcC12ZXJzaW9uL2luaXRpYWxpemVyLWZhY3RvcnknLCBbJ2V4cG9ydHMnLCAnZW1iZXInXSwg
ZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlcikgeworICAndXNlIHN0cmljdCc7CisKKyAgZXhwb3J0
c1snZGVmYXVsdCddID0gaW5pdGlhbGl6ZXJGYWN0b3J5OworCisgIHZhciBjbGFzc2lmeSA9IF9l
bWJlclsnZGVmYXVsdCddLlN0cmluZy5jbGFzc2lmeTsKKworICBmdW5jdGlvbiBpbml0aWFsaXpl
ckZhY3RvcnkobmFtZSwgdmVyc2lvbikgeworICAgIHZhciByZWdpc3RlcmVkID0gZmFsc2U7CisK
KyAgICByZXR1cm4gZnVuY3Rpb24gKCkgeworICAgICAgaWYgKCFyZWdpc3RlcmVkICYmIG5hbWUg
JiYgdmVyc2lvbikgeworICAgICAgICB2YXIgYXBwTmFtZSA9IGNsYXNzaWZ5KG5hbWUpOworICAg
ICAgICBfZW1iZXJbJ2RlZmF1bHQnXS5saWJyYXJpZXMucmVnaXN0ZXIoYXBwTmFtZSwgdmVyc2lv
bik7CisgICAgICAgIHJlZ2lzdGVyZWQgPSB0cnVlOworICAgICAgfQorICAgIH07CisgIH0KK30p
OworZGVmaW5lKCJlbWJlci1jbGktYXBwLXZlcnNpb24vdGVtcGxhdGVzL2FwcC12ZXJzaW9uIiwg
WyJleHBvcnRzIl0sIGZ1bmN0aW9uIChleHBvcnRzKSB7CisgICJ1c2Ugc3RyaWN0IjsKKworICBl
eHBvcnRzWyJkZWZhdWx0Il0gPSBFbWJlci5IVE1MQmFycy50ZW1wbGF0ZSgoZnVuY3Rpb24gKCkg
eworICAgIHJldHVybiB7CisgICAgICBtZXRhOiB7CisgICAgICAgICJmcmFnbWVudFJlYXNvbiI6
IHsKKyAgICAgICAgICAibmFtZSI6ICJtaXNzaW5nLXdyYXBwZXIiLAorICAgICAgICAgICJwcm9i
bGVtcyI6IFsid3JvbmctdHlwZSJdCisgICAgICAgIH0sCisgICAgICAgICJyZXZpc2lvbiI6ICJF
bWJlckAyLjYuMiIsCisgICAgICAgICJsb2MiOiB7CisgICAgICAgICAgInNvdXJjZSI6IG51bGws
CisgICAgICAgICAgInN0YXJ0IjogeworICAgICAgICAgICAgImxpbmUiOiAxLAorICAgICAgICAg
ICAgImNvbHVtbiI6IDAKKyAgICAgICAgICB9LAorICAgICAgICAgICJlbmQiOiB7CisgICAgICAg
ICAgICAibGluZSI6IDIsCisgICAgICAgICAgICAiY29sdW1uIjogMAorICAgICAgICAgIH0KKyAg
ICAgICAgfSwKKyAgICAgICAgIm1vZHVsZU5hbWUiOiAibW9kdWxlcy9lbWJlci1jbGktYXBwLXZl
cnNpb24vdGVtcGxhdGVzL2FwcC12ZXJzaW9uLmhicyIKKyAgICAgIH0sCisgICAgICBpc0VtcHR5
OiBmYWxzZSwKKyAgICAgIGFyaXR5OiAwLAorICAgICAgY2FjaGVkRnJhZ21lbnQ6IG51bGwsCisg
ICAgICBoYXNSZW5kZXJlZDogZmFsc2UsCisgICAgICBidWlsZEZyYWdtZW50OiBmdW5jdGlvbiBi
dWlsZEZyYWdtZW50KGRvbSkgeworICAgICAgICB2YXIgZWwwID0gZG9tLmNyZWF0ZURvY3VtZW50
RnJhZ21lbnQoKTsKKyAgICAgICAgdmFyIGVsMSA9IGRvbS5jcmVhdGVDb21tZW50KCIiKTsKKyAg
ICAgICAgZG9tLmFwcGVuZENoaWxkKGVsMCwgZWwxKTsKKyAgICAgICAgdmFyIGVsMSA9IGRvbS5j
cmVhdGVUZXh0Tm9kZSgiXG4iKTsKKyAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVsMCwgZWwxKTsK
KyAgICAgICAgcmV0dXJuIGVsMDsKKyAgICAgIH0sCisgICAgICBidWlsZFJlbmRlck5vZGVzOiBm
dW5jdGlvbiBidWlsZFJlbmRlck5vZGVzKGRvbSwgZnJhZ21lbnQsIGNvbnRleHR1YWxFbGVtZW50
KSB7CisgICAgICAgIHZhciBtb3JwaHMgPSBuZXcgQXJyYXkoMSk7CisgICAgICAgIG1vcnBoc1sw
XSA9IGRvbS5jcmVhdGVNb3JwaEF0KGZyYWdtZW50LCAwLCAwLCBjb250ZXh0dWFsRWxlbWVudCk7
CisgICAgICAgIGRvbS5pbnNlcnRCb3VuZGFyeShmcmFnbWVudCwgMCk7CisgICAgICAgIHJldHVy
biBtb3JwaHM7CisgICAgICB9LAorICAgICAgc3RhdGVtZW50czogW1siY29udGVudCIsICJ2ZXJz
aW9uIiwgWyJsb2MiLCBbbnVsbCwgWzEsIDBdLCBbMSwgMTFdXV1dXSwKKyAgICAgIGxvY2Fsczog
W10sCisgICAgICB0ZW1wbGF0ZXM6IFtdCisgICAgfTsKKyAgfSkoKSk7Cit9KTsKK2RlZmluZSgi
ZW1iZXItaW5mbGVjdG9yL2luZGV4IiwgWyJleHBvcnRzIiwgImVtYmVyIiwgImVtYmVyLWluZmxl
Y3Rvci9saWIvc3lzdGVtIiwgImVtYmVyLWluZmxlY3Rvci9saWIvZXh0L3N0cmluZyJdLCBmdW5j
dGlvbiAoZXhwb3J0cywgX2VtYmVyLCBfZW1iZXJJbmZsZWN0b3JMaWJTeXN0ZW0sIF9lbWJlcklu
ZmxlY3RvckxpYkV4dFN0cmluZykgeworICAvKiBnbG9iYWwgZGVmaW5lLCBtb2R1bGUgKi8KKwor
ICAidXNlIHN0cmljdCI7CisKKyAgX2VtYmVySW5mbGVjdG9yTGliU3lzdGVtLkluZmxlY3Rvci5k
ZWZhdWx0UnVsZXMgPSBfZW1iZXJJbmZsZWN0b3JMaWJTeXN0ZW0uZGVmYXVsdFJ1bGVzOworICBf
ZW1iZXJbImRlZmF1bHQiXS5JbmZsZWN0b3IgPSBfZW1iZXJJbmZsZWN0b3JMaWJTeXN0ZW0uSW5m
bGVjdG9yOworCisgIF9lbWJlclsiZGVmYXVsdCJdLlN0cmluZy5wbHVyYWxpemUgPSBfZW1iZXJJ
bmZsZWN0b3JMaWJTeXN0ZW0ucGx1cmFsaXplOworICBfZW1iZXJbImRlZmF1bHQiXS5TdHJpbmcu
c2luZ3VsYXJpemUgPSBfZW1iZXJJbmZsZWN0b3JMaWJTeXN0ZW0uc2luZ3VsYXJpemU7ZXhwb3J0
c1siZGVmYXVsdCJdID0gX2VtYmVySW5mbGVjdG9yTGliU3lzdGVtLkluZmxlY3RvcjsKKyAgZXhw
b3J0cy5wbHVyYWxpemUgPSBfZW1iZXJJbmZsZWN0b3JMaWJTeXN0ZW0ucGx1cmFsaXplOworICBl
eHBvcnRzLnNpbmd1bGFyaXplID0gX2VtYmVySW5mbGVjdG9yTGliU3lzdGVtLnNpbmd1bGFyaXpl
OworICBleHBvcnRzLmRlZmF1bHRSdWxlcyA9IF9lbWJlckluZmxlY3RvckxpYlN5c3RlbS5kZWZh
dWx0UnVsZXM7CisKKyAgaWYgKHR5cGVvZiBkZWZpbmUgIT09ICd1bmRlZmluZWQnICYmIGRlZmlu
ZS5hbWQpIHsKKyAgICBkZWZpbmUoJ2VtYmVyLWluZmxlY3RvcicsIFsnZXhwb3J0cyddLCBmdW5j
dGlvbiAoX19leHBvcnRzX18pIHsKKyAgICAgIF9fZXhwb3J0c19fWydkZWZhdWx0J10gPSBfZW1i
ZXJJbmZsZWN0b3JMaWJTeXN0ZW0uSW5mbGVjdG9yOworICAgICAgcmV0dXJuIF9lbWJlckluZmxl
Y3RvckxpYlN5c3RlbS5JbmZsZWN0b3I7CisgICAgfSk7CisgIH0gZWxzZSBpZiAodHlwZW9mIG1v
ZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlWydleHBvcnRzJ10pIHsKKyAgICBtb2R1bGVb
J2V4cG9ydHMnXSA9IF9lbWJlckluZmxlY3RvckxpYlN5c3RlbS5JbmZsZWN0b3I7CisgIH0KK30p
OworZGVmaW5lKCdlbWJlci1pbmZsZWN0b3IvbGliL2V4dC9zdHJpbmcnLCBbJ2V4cG9ydHMnLCAn
ZW1iZXInLCAnZW1iZXItaW5mbGVjdG9yL2xpYi9zeXN0ZW0vc3RyaW5nJ10sIGZ1bmN0aW9uIChl
eHBvcnRzLCBfZW1iZXIsIF9lbWJlckluZmxlY3RvckxpYlN5c3RlbVN0cmluZykgeworICAndXNl
IHN0cmljdCc7CisKKyAgaWYgKF9lbWJlclsnZGVmYXVsdCddLkVYVEVORF9QUk9UT1RZUEVTID09
PSB0cnVlIHx8IF9lbWJlclsnZGVmYXVsdCddLkVYVEVORF9QUk9UT1RZUEVTLlN0cmluZykgewor
ICAgIC8qKgorICAgICAgU2VlIHt7I2Nyb3NzTGluayAiRW1iZXIuU3RyaW5nL3BsdXJhbGl6ZSJ9
fXt7L2Nyb3NzTGlua319CisgICAgICAgQG1ldGhvZCBwbHVyYWxpemUKKyAgICAgIEBmb3IgU3Ry
aW5nCisgICAgKi8KKyAgICBTdHJpbmcucHJvdG90eXBlLnBsdXJhbGl6ZSA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgIHJldHVybiAoMCwgX2VtYmVySW5mbGVjdG9yTGliU3lzdGVtU3RyaW5nLnBsdXJh
bGl6ZSkodGhpcyk7CisgICAgfTsKKworICAgIC8qKgorICAgICAgU2VlIHt7I2Nyb3NzTGluayAi
RW1iZXIuU3RyaW5nL3Npbmd1bGFyaXplIn19e3svY3Jvc3NMaW5rfX0KKyAgICAgICBAbWV0aG9k
IHNpbmd1bGFyaXplCisgICAgICBAZm9yIFN0cmluZworICAgICovCisgICAgU3RyaW5nLnByb3Rv
dHlwZS5zaW5ndWxhcml6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgIHJldHVybiAoMCwgX2VtYmVy
SW5mbGVjdG9yTGliU3lzdGVtU3RyaW5nLnNpbmd1bGFyaXplKSh0aGlzKTsKKyAgICB9OworICB9
Cit9KTsKK2RlZmluZSgnZW1iZXItaW5mbGVjdG9yL2xpYi9oZWxwZXJzL3BsdXJhbGl6ZScsIFsn
ZXhwb3J0cycsICdlbWJlci1pbmZsZWN0b3InLCAnZW1iZXItaW5mbGVjdG9yL2xpYi91dGlscy9t
YWtlLWhlbHBlciddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVySW5mbGVjdG9yLCBfZW1iZXJJ
bmZsZWN0b3JMaWJVdGlsc01ha2VIZWxwZXIpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIC8qKgor
ICAgKgorICAgKiBJZiB5b3UgaGF2ZSBFbWJlciBJbmZsZWN0b3IgKHN1Y2ggYXMgaWYgRW1iZXIg
RGF0YSBpcyBwcmVzZW50KSwKKyAgICogcGx1cmFsaXplIGEgd29yZC4gRm9yIGV4YW1wbGUsIHR1
cm4gIm94IiBpbnRvICJveGVuIi4KKyAgICoKKyAgICogRXhhbXBsZToKKyAgICoKKyAgICoge3tw
bHVyYWxpemUgY291bnQgbXlQcm9wZXJ0eX19CisgICAqIHt7cGx1cmFsaXplIDEgIm94ZW4ifX0K
KyAgICoge3twbHVyYWxpemUgbXlQcm9wZXJ0eX19CisgICAqIHt7cGx1cmFsaXplICJveCJ9fQor
ICAgKgorICAgKiBAZm9yIEVtYmVyLkhUTUxCYXJzLmhlbHBlcnMKKyAgICogQG1ldGhvZCBwbHVy
YWxpemUKKyAgICogQHBhcmFtIHtOdW1iZXJ8UHJvcGVydHl9IFtjb3VudF0gY291bnQgb2Ygb2Jq
ZWN0cworICAgKiBAcGFyYW0ge1N0cmluZ3xQcm9wZXJ0eX0gd29yZCB3b3JkIHRvIHBsdXJhbGl6
ZQorICAqLworICBleHBvcnRzWydkZWZhdWx0J10gPSAoMCwgX2VtYmVySW5mbGVjdG9yTGliVXRp
bHNNYWtlSGVscGVyWydkZWZhdWx0J10pKGZ1bmN0aW9uIChwYXJhbXMpIHsKKyAgICB2YXIgY291
bnQgPSB1bmRlZmluZWQsCisgICAgICAgIHdvcmQgPSB1bmRlZmluZWQ7CisKKyAgICBpZiAocGFy
YW1zLmxlbmd0aCA9PT0gMSkgeworICAgICAgd29yZCA9IHBhcmFtc1swXTsKKyAgICAgIHJldHVy
biAoMCwgX2VtYmVySW5mbGVjdG9yLnBsdXJhbGl6ZSkod29yZCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgIGNvdW50ID0gcGFyYW1zWzBdOworICAgICAgd29yZCA9IHBhcmFtc1sxXTsKKworICAgICAg
aWYgKHBhcnNlRmxvYXQoY291bnQpICE9PSAxKSB7CisgICAgICAgIHdvcmQgPSAoMCwgX2VtYmVy
SW5mbGVjdG9yLnBsdXJhbGl6ZSkod29yZCk7CisgICAgICB9CisKKyAgICAgIHJldHVybiBjb3Vu
dCArICIgIiArIHdvcmQ7CisgICAgfQorICB9KTsKK30pOworZGVmaW5lKCdlbWJlci1pbmZsZWN0
b3IvbGliL2hlbHBlcnMvc2luZ3VsYXJpemUnLCBbJ2V4cG9ydHMnLCAnZW1iZXItaW5mbGVjdG9y
JywgJ2VtYmVyLWluZmxlY3Rvci9saWIvdXRpbHMvbWFrZS1oZWxwZXInXSwgZnVuY3Rpb24gKGV4
cG9ydHMsIF9lbWJlckluZmxlY3RvciwgX2VtYmVySW5mbGVjdG9yTGliVXRpbHNNYWtlSGVscGVy
KSB7CisgICd1c2Ugc3RyaWN0JzsKKworICAvKioKKyAgICoKKyAgICogSWYgeW91IGhhdmUgRW1i
ZXIgSW5mbGVjdG9yIChzdWNoIGFzIGlmIEVtYmVyIERhdGEgaXMgcHJlc2VudCksCisgICAqIHNp
bmd1bGFyaXplIGEgd29yZC4gRm9yIGV4YW1wbGUsIHR1cm4gIm94ZW4iIGludG8gIm94Ii4KKyAg
ICoKKyAgICogRXhhbXBsZToKKyAgICoKKyAgICoge3tzaW5ndWxhcml6ZSBteVByb3BlcnR5fX0K
KyAgICoge3tzaW5ndWxhcml6ZSAib3hlbiJ9fQorICAgKgorICAgKiBAZm9yIEVtYmVyLkhUTUxC
YXJzLmhlbHBlcnMKKyAgICogQG1ldGhvZCBzaW5ndWxhcml6ZQorICAgKiBAcGFyYW0ge1N0cmlu
Z3xQcm9wZXJ0eX0gd29yZCB3b3JkIHRvIHNpbmd1bGFyaXplCisgICovCisgIGV4cG9ydHNbJ2Rl
ZmF1bHQnXSA9ICgwLCBfZW1iZXJJbmZsZWN0b3JMaWJVdGlsc01ha2VIZWxwZXJbJ2RlZmF1bHQn
XSkoZnVuY3Rpb24gKHBhcmFtcykgeworICAgIHJldHVybiAoMCwgX2VtYmVySW5mbGVjdG9yLnNp
bmd1bGFyaXplKShwYXJhbXNbMF0pOworICB9KTsKK30pOworZGVmaW5lKCJlbWJlci1pbmZsZWN0
b3IvbGliL3N5c3RlbSIsIFsiZXhwb3J0cyIsICJlbWJlci1pbmZsZWN0b3IvbGliL3N5c3RlbS9p
bmZsZWN0b3IiLCAiZW1iZXItaW5mbGVjdG9yL2xpYi9zeXN0ZW0vc3RyaW5nIiwgImVtYmVyLWlu
ZmxlY3Rvci9saWIvc3lzdGVtL2luZmxlY3Rpb25zIl0sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1i
ZXJJbmZsZWN0b3JMaWJTeXN0ZW1JbmZsZWN0b3IsIF9lbWJlckluZmxlY3RvckxpYlN5c3RlbVN0
cmluZywgX2VtYmVySW5mbGVjdG9yTGliU3lzdGVtSW5mbGVjdGlvbnMpIHsKKyAgInVzZSBzdHJp
Y3QiOworCisgIF9lbWJlckluZmxlY3RvckxpYlN5c3RlbUluZmxlY3RvclsiZGVmYXVsdCJdLmlu
ZmxlY3RvciA9IG5ldyBfZW1iZXJJbmZsZWN0b3JMaWJTeXN0ZW1JbmZsZWN0b3JbImRlZmF1bHQi
XShfZW1iZXJJbmZsZWN0b3JMaWJTeXN0ZW1JbmZsZWN0aW9uc1siZGVmYXVsdCJdKTsKKworICBl
eHBvcnRzLkluZmxlY3RvciA9IF9lbWJlckluZmxlY3RvckxpYlN5c3RlbUluZmxlY3RvclsiZGVm
YXVsdCJdOworICBleHBvcnRzLnNpbmd1bGFyaXplID0gX2VtYmVySW5mbGVjdG9yTGliU3lzdGVt
U3RyaW5nLnNpbmd1bGFyaXplOworICBleHBvcnRzLnBsdXJhbGl6ZSA9IF9lbWJlckluZmxlY3Rv
ckxpYlN5c3RlbVN0cmluZy5wbHVyYWxpemU7CisgIGV4cG9ydHMuZGVmYXVsdFJ1bGVzID0gX2Vt
YmVySW5mbGVjdG9yTGliU3lzdGVtSW5mbGVjdGlvbnNbImRlZmF1bHQiXTsKK30pOworZGVmaW5l
KCdlbWJlci1pbmZsZWN0b3IvbGliL3N5c3RlbS9pbmZsZWN0aW9ucycsIFsnZXhwb3J0cyddLCBm
dW5jdGlvbiAoZXhwb3J0cykgeworICAndXNlIHN0cmljdCc7CisKKyAgZXhwb3J0c1snZGVmYXVs
dCddID0geworICAgIHBsdXJhbHM6IFtbLyQvLCAncyddLCBbL3MkL2ksICdzJ10sIFsvXihheHx0
ZXN0KWlzJC9pLCAnJDFlcyddLCBbLyhvY3RvcHx2aXIpdXMkL2ksICckMWknXSwgWy8ob2N0b3B8
dmlyKWkkL2ksICckMWknXSwgWy8oYWxpYXN8c3RhdHVzKSQvaSwgJyQxZXMnXSwgWy8oYnUpcyQv
aSwgJyQxc2VzJ10sIFsvKGJ1ZmZhbHx0b21hdClvJC9pLCAnJDFvZXMnXSwgWy8oW3RpXSl1bSQv
aSwgJyQxYSddLCBbLyhbdGldKWEkL2ksICckMWEnXSwgWy9zaXMkL2ksICdzZXMnXSwgWy8oPzoo
W15mXSlmZXwoW2xyXSlmKSQvaSwgJyQxJDJ2ZXMnXSwgWy8oaGl2ZSkkL2ksICckMXMnXSwgWy8o
W15hZWlvdXldfHF1KXkkL2ksICckMWllcyddLCBbLyh4fGNofHNzfHNoKSQvaSwgJyQxZXMnXSwg
Wy8obWF0cnx2ZXJ0fGluZCkoPzppeHxleCkkL2ksICckMWljZXMnXSwgWy9eKG18bClvdXNlJC9p
LCAnJDFpY2UnXSwgWy9eKG18bClpY2UkL2ksICckMWljZSddLCBbL14ob3gpJC9pLCAnJDFlbidd
LCBbL14ob3hlbikkL2ksICckMSddLCBbLyhxdWl6KSQvaSwgJyQxemVzJ11dLAorCisgICAgc2lu
Z3VsYXI6IFtbL3MkL2ksICcnXSwgWy8oc3MpJC9pLCAnJDEnXSwgWy8obilld3MkL2ksICckMWV3
cyddLCBbLyhbdGldKWEkL2ksICckMXVtJ10sIFsvKChhKW5hbHl8KGIpYXwoZClpYWdub3wocClh
cmVudGhlfChwKXJvZ25vfChzKXlub3B8KHQpaGUpKHNpc3xzZXMpJC9pLCAnJDFzaXMnXSwgWy8o
XmFuYWx5KShzaXN8c2VzKSQvaSwgJyQxc2lzJ10sIFsvKFteZl0pdmVzJC9pLCAnJDFmZSddLCBb
LyhoaXZlKXMkL2ksICckMSddLCBbLyh0aXZlKXMkL2ksICckMSddLCBbLyhbbHJdKXZlcyQvaSwg
JyQxZiddLCBbLyhbXmFlaW91eV18cXUpaWVzJC9pLCAnJDF5J10sIFsvKHMpZXJpZXMkL2ksICck
MWVyaWVzJ10sIFsvKG0pb3ZpZXMkL2ksICckMW92aWUnXSwgWy8oeHxjaHxzc3xzaCllcyQvaSwg
JyQxJ10sIFsvXihtfGwpaWNlJC9pLCAnJDFvdXNlJ10sIFsvKGJ1cykoZXMpPyQvaSwgJyQxJ10s
IFsvKG8pZXMkL2ksICckMSddLCBbLyhzaG9lKXMkL2ksICckMSddLCBbLyhjcmlzfHRlc3QpKGlz
fGVzKSQvaSwgJyQxaXMnXSwgWy9eKGEpeFtpZV1zJC9pLCAnJDF4aXMnXSwgWy8ob2N0b3B8dmly
KSh1c3xpKSQvaSwgJyQxdXMnXSwgWy8oYWxpYXN8c3RhdHVzKShlcyk/JC9pLCAnJDEnXSwgWy9e
KG94KWVuL2ksICckMSddLCBbLyh2ZXJ0fGluZClpY2VzJC9pLCAnJDFleCddLCBbLyhtYXRyKWlj
ZXMkL2ksICckMWl4J10sIFsvKHF1aXopemVzJC9pLCAnJDEnXSwgWy8oZGF0YWJhc2UpcyQvaSwg
JyQxJ11dLAorCisgICAgaXJyZWd1bGFyUGFpcnM6IFtbJ3BlcnNvbicsICdwZW9wbGUnXSwgWydt
YW4nLCAnbWVuJ10sIFsnY2hpbGQnLCAnY2hpbGRyZW4nXSwgWydzZXgnLCAnc2V4ZXMnXSwgWydt
b3ZlJywgJ21vdmVzJ10sIFsnY293JywgJ2tpbmUnXSwgWyd6b21iaWUnLCAnem9tYmllcyddXSwK
KworICAgIHVuY291bnRhYmxlOiBbJ2VxdWlwbWVudCcsICdpbmZvcm1hdGlvbicsICdyaWNlJywg
J21vbmV5JywgJ3NwZWNpZXMnLCAnc2VyaWVzJywgJ2Zpc2gnLCAnc2hlZXAnLCAnamVhbnMnLCAn
cG9saWNlJ10KKyAgfTsKK30pOworZGVmaW5lKCdlbWJlci1pbmZsZWN0b3IvbGliL3N5c3RlbS9p
bmZsZWN0b3InLCBbJ2V4cG9ydHMnLCAnZW1iZXInXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJl
cikgeworICAndXNlIHN0cmljdCc7CisKKyAgdmFyIGNhcGl0YWxpemUgPSBfZW1iZXJbJ2RlZmF1
bHQnXS5TdHJpbmcuY2FwaXRhbGl6ZTsKKworICB2YXIgQkxBTktfUkVHRVggPSAvXlxzKiQvOwor
ICB2YXIgTEFTVF9XT1JEX0RBU0hFRF9SRUdFWCA9IC8oW1x3Ly1dK1tfL1xzLV0pKFthLXpcZF0r
JCkvOworICB2YXIgTEFTVF9XT1JEX0NBTUVMSVpFRF9SRUdFWCA9IC8oW1x3L1xzLV0rKShbQS1a
XVthLXpcZF0qJCkvOworICB2YXIgQ0FNRUxJWkVEX1JFR0VYID0gL1tBLVpdW2EtelxkXSokLzsK
KworICBmdW5jdGlvbiBsb2FkVW5jb3VudGFibGUocnVsZXMsIHVuY291bnRhYmxlKSB7CisgICAg
Zm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IHVuY291bnRhYmxlLmxlbmd0aDsgaSA8IGxlbmd0aDsg
aSsrKSB7CisgICAgICBydWxlcy51bmNvdW50YWJsZVt1bmNvdW50YWJsZVtpXS50b0xvd2VyQ2Fz
ZSgpXSA9IHRydWU7CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gbG9hZElycmVndWxhcihydWxl
cywgaXJyZWd1bGFyUGFpcnMpIHsKKyAgICB2YXIgcGFpcjsKKworICAgIGZvciAodmFyIGkgPSAw
LCBsZW5ndGggPSBpcnJlZ3VsYXJQYWlycy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgeworICAg
ICAgcGFpciA9IGlycmVndWxhclBhaXJzW2ldOworCisgICAgICAvL3BsdXJhbGl6aW5nCisgICAg
ICBydWxlcy5pcnJlZ3VsYXJbcGFpclswXS50b0xvd2VyQ2FzZSgpXSA9IHBhaXJbMV07CisgICAg
ICBydWxlcy5pcnJlZ3VsYXJbcGFpclsxXS50b0xvd2VyQ2FzZSgpXSA9IHBhaXJbMV07CisKKyAg
ICAgIC8vc2luZ3VsYXJpemluZworICAgICAgcnVsZXMuaXJyZWd1bGFySW52ZXJzZVtwYWlyWzFd
LnRvTG93ZXJDYXNlKCldID0gcGFpclswXTsKKyAgICAgIHJ1bGVzLmlycmVndWxhckludmVyc2Vb
cGFpclswXS50b0xvd2VyQ2FzZSgpXSA9IHBhaXJbMF07CisgICAgfQorICB9CisKKyAgLyoqCisg
ICAgSW5mbGVjdG9yLkVtYmVyIHByb3ZpZGVzIGEgbWVjaGFuaXNtIGZvciBzdXBwbHlpbmcgaW5m
bGVjdGlvbiBydWxlcyBmb3IgeW91cgorICAgIGFwcGxpY2F0aW9uLiBFbWJlciBpbmNsdWRlcyBh
IGRlZmF1bHQgc2V0IG9mIGluZmxlY3Rpb24gcnVsZXMsIGFuZCBwcm92aWRlcyBhbgorICAgIEFQ
SSBmb3IgcHJvdmlkaW5nIGFkZGl0aW9uYWwgcnVsZXMuCisgIAorICAgIEV4YW1wbGVzOgorICAK
KyAgICBDcmVhdGluZyBhbiBpbmZsZWN0b3Igd2l0aCBubyBydWxlcy4KKyAgCisgICAgYGBganMK
KyAgICB2YXIgaW5mbGVjdG9yID0gbmV3IEVtYmVyLkluZmxlY3RvcigpOworICAgIGBgYAorICAK
KyAgICBDcmVhdGluZyBhbiBpbmZsZWN0b3Igd2l0aCB0aGUgZGVmYXVsdCBlbWJlciBydWxlc2V0
LgorICAKKyAgICBgYGBqcworICAgIHZhciBpbmZsZWN0b3IgPSBuZXcgRW1iZXIuSW5mbGVjdG9y
KEVtYmVyLkluZmxlY3Rvci5kZWZhdWx0UnVsZXMpOworICAKKyAgICBpbmZsZWN0b3IucGx1cmFs
aXplKCdjb3cnKTsgLy89PiAna2luZScKKyAgICBpbmZsZWN0b3Iuc2luZ3VsYXJpemUoJ2tpbmUn
KTsgLy89PiAnY293JworICAgIGBgYAorICAKKyAgICBDcmVhdGluZyBhbiBpbmZsZWN0b3IgYW5k
IGFkZGluZyBydWxlcyBsYXRlci4KKyAgCisgICAgYGBgamF2YXNjcmlwdAorICAgIHZhciBpbmZs
ZWN0b3IgPSBFbWJlci5JbmZsZWN0b3IuaW5mbGVjdG9yOworICAKKyAgICBpbmZsZWN0b3IucGx1
cmFsaXplKCdhZHZpY2UnKTsgLy8gPT4gJ2FkdmljZXMnCisgICAgaW5mbGVjdG9yLnVuY291bnRh
YmxlKCdhZHZpY2UnKTsKKyAgICBpbmZsZWN0b3IucGx1cmFsaXplKCdhZHZpY2UnKTsgLy8gPT4g
J2FkdmljZScKKyAgCisgICAgaW5mbGVjdG9yLnBsdXJhbGl6ZSgnZm9ybXVsYScpOyAvLyA9PiAn
Zm9ybXVsYXMnCisgICAgaW5mbGVjdG9yLmlycmVndWxhcignZm9ybXVsYScsICdmb3JtdWxhZScp
OworICAgIGluZmxlY3Rvci5wbHVyYWxpemUoJ2Zvcm11bGEnKTsgLy8gPT4gJ2Zvcm11bGFlJwor
ICAKKyAgICAvLyB5b3Ugd291bGQgbm90IG5lZWQgdG8gYWRkIHRoZXNlIGFzIHRoZXkgYXJlIHRo
ZSBkZWZhdWx0IHJ1bGVzCisgICAgaW5mbGVjdG9yLnBsdXJhbCgvJC8sICdzJyk7CisgICAgaW5m
bGVjdG9yLnNpbmd1bGFyKC9zJC9pLCAnJyk7CisgICAgYGBgCisgIAorICAgIENyZWF0aW5nIGFu
IGluZmxlY3RvciB3aXRoIGEgbm9uZGVmYXVsdCBydWxlc2V0LgorICAKKyAgICBgYGBqYXZhc2Ny
aXB0CisgICAgdmFyIHJ1bGVzID0geworICAgICAgcGx1cmFsczogIFsgLyQvLCAncycgXSwKKyAg
ICAgIHNpbmd1bGFyOiBbIC9ccyQvLCAnJyBdLAorICAgICAgaXJyZWd1bGFyUGFpcnM6IFsKKyAg
ICAgICAgWyAnY293JywgJ2tpbmUnIF0KKyAgICAgIF0sCisgICAgICB1bmNvdW50YWJsZTogWyAn
ZmlzaCcgXQorICAgIH07CisgIAorICAgIHZhciBpbmZsZWN0b3IgPSBuZXcgRW1iZXIuSW5mbGVj
dG9yKHJ1bGVzKTsKKyAgICBgYGAKKyAgCisgICAgQGNsYXNzIEluZmxlY3RvcgorICAgIEBuYW1l
c3BhY2UgRW1iZXIKKyAgKi8KKyAgZnVuY3Rpb24gSW5mbGVjdG9yKHJ1bGVTZXQpIHsKKyAgICBy
dWxlU2V0ID0gcnVsZVNldCB8fCB7fTsKKyAgICBydWxlU2V0LnVuY291bnRhYmxlID0gcnVsZVNl
dC51bmNvdW50YWJsZSB8fCBtYWtlRGljdGlvbmFyeSgpOworICAgIHJ1bGVTZXQuaXJyZWd1bGFy
UGFpcnMgPSBydWxlU2V0LmlycmVndWxhclBhaXJzIHx8IG1ha2VEaWN0aW9uYXJ5KCk7CisKKyAg
ICB2YXIgcnVsZXMgPSB0aGlzLnJ1bGVzID0geworICAgICAgcGx1cmFsczogcnVsZVNldC5wbHVy
YWxzIHx8IFtdLAorICAgICAgc2luZ3VsYXI6IHJ1bGVTZXQuc2luZ3VsYXIgfHwgW10sCisgICAg
ICBpcnJlZ3VsYXI6IG1ha2VEaWN0aW9uYXJ5KCksCisgICAgICBpcnJlZ3VsYXJJbnZlcnNlOiBt
YWtlRGljdGlvbmFyeSgpLAorICAgICAgdW5jb3VudGFibGU6IG1ha2VEaWN0aW9uYXJ5KCkKKyAg
ICB9OworCisgICAgbG9hZFVuY291bnRhYmxlKHJ1bGVzLCBydWxlU2V0LnVuY291bnRhYmxlKTsK
KyAgICBsb2FkSXJyZWd1bGFyKHJ1bGVzLCBydWxlU2V0LmlycmVndWxhclBhaXJzKTsKKworICAg
IHRoaXMuZW5hYmxlQ2FjaGUoKTsKKyAgfQorCisgIGlmICghT2JqZWN0LmNyZWF0ZSAmJiAhT2Jq
ZWN0LmNyZWF0ZShudWxsKS5oYXNPd25Qcm9wZXJ0eSkgeworICAgIHRocm93IG5ldyBFcnJvcigi
VGhpcyBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgT2JqZWN0LmNyZWF0ZShudWxsKSwgcGxlYXNl
IHBvbHlmaWwgd2l0aCBlczUtc2hhbTogaHR0cDovL2dpdC5pby95QlUycmciKTsKKyAgfQorCisg
IGZ1bmN0aW9uIG1ha2VEaWN0aW9uYXJ5KCkgeworICAgIHZhciBjYWNoZSA9IE9iamVjdC5jcmVh
dGUobnVsbCk7CisgICAgY2FjaGVbJ19kaWN0J10gPSBudWxsOworICAgIGRlbGV0ZSBjYWNoZVsn
X2RpY3QnXTsKKyAgICByZXR1cm4gY2FjaGU7CisgIH0KKworICBJbmZsZWN0b3IucHJvdG90eXBl
ID0geworICAgIC8qKgorICAgICAgQHB1YmxpYworICAgICAgIEFzIGluZmxlY3Rpb25zIGNhbiBi
ZSBjb3N0bHksIGFuZCBjb21tb25seSB0aGUgc2FtZSBzdWJzZXQgb2Ygd29yZHMgYXJlIHJlcGVh
dGVkbHkKKyAgICAgIGluZmxlY3RlZCBhbiBvcHRpb25hbCBjYWNoZSBpcyBwcm92aWRlZC4KKyAg
ICAgICBAbWV0aG9kIGVuYWJsZUNhY2hlCisgICAgKi8KKyAgICBlbmFibGVDYWNoZTogZnVuY3Rp
b24gZW5hYmxlQ2FjaGUoKSB7CisgICAgICB0aGlzLnB1cmdlQ2FjaGUoKTsKKworICAgICAgdGhp
cy5zaW5ndWxhcml6ZSA9IGZ1bmN0aW9uICh3b3JkKSB7CisgICAgICAgIHRoaXMuX2NhY2hlVXNl
ZCA9IHRydWU7CisgICAgICAgIHJldHVybiB0aGlzLl9zQ2FjaGVbd29yZF0gfHwgKHRoaXMuX3ND
YWNoZVt3b3JkXSA9IHRoaXMuX3Npbmd1bGFyaXplKHdvcmQpKTsKKyAgICAgIH07CisKKyAgICAg
IHRoaXMucGx1cmFsaXplID0gZnVuY3Rpb24gKHdvcmQpIHsKKyAgICAgICAgdGhpcy5fY2FjaGVV
c2VkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3BDYWNoZVt3b3JkXSB8fCAodGhpcy5f
cENhY2hlW3dvcmRdID0gdGhpcy5fcGx1cmFsaXplKHdvcmQpKTsKKyAgICAgIH07CisgICAgfSwK
KworICAgIC8qKgorICAgICAgQHB1YmxpYworICAgICAgIEBtZXRob2QgcHVyZ2VkQ2FjaGUKKyAg
ICAqLworICAgIHB1cmdlQ2FjaGU6IGZ1bmN0aW9uIHB1cmdlQ2FjaGUoKSB7CisgICAgICB0aGlz
Ll9jYWNoZVVzZWQgPSBmYWxzZTsKKyAgICAgIHRoaXMuX3NDYWNoZSA9IG1ha2VEaWN0aW9uYXJ5
KCk7CisgICAgICB0aGlzLl9wQ2FjaGUgPSBtYWtlRGljdGlvbmFyeSgpOworICAgIH0sCisKKyAg
ICAvKioKKyAgICAgIEBwdWJsaWMKKyAgICAgIGRpc2FibGUgY2FjaGluZworICAgICAgIEBtZXRo
b2QgZGlzYWJsZUNhY2hlOworICAgICovCisgICAgZGlzYWJsZUNhY2hlOiBmdW5jdGlvbiBkaXNh
YmxlQ2FjaGUoKSB7CisgICAgICB0aGlzLl9zQ2FjaGUgPSBudWxsOworICAgICAgdGhpcy5fcENh
Y2hlID0gbnVsbDsKKyAgICAgIHRoaXMuc2luZ3VsYXJpemUgPSBmdW5jdGlvbiAod29yZCkgewor
ICAgICAgICByZXR1cm4gdGhpcy5fc2luZ3VsYXJpemUod29yZCk7CisgICAgICB9OworCisgICAg
ICB0aGlzLnBsdXJhbGl6ZSA9IGZ1bmN0aW9uICh3b3JkKSB7CisgICAgICAgIHJldHVybiB0aGlz
Ll9wbHVyYWxpemUod29yZCk7CisgICAgICB9OworICAgIH0sCisKKyAgICAvKioKKyAgICAgIEBt
ZXRob2QgcGx1cmFsCisgICAgICBAcGFyYW0ge1JlZ0V4cH0gcmVnZXgKKyAgICAgIEBwYXJhbSB7
U3RyaW5nfSBzdHJpbmcKKyAgICAqLworICAgIHBsdXJhbDogZnVuY3Rpb24gcGx1cmFsKHJlZ2V4
LCBzdHJpbmcpIHsKKyAgICAgIGlmICh0aGlzLl9jYWNoZVVzZWQpIHsKKyAgICAgICAgdGhpcy5w
dXJnZUNhY2hlKCk7CisgICAgICB9CisgICAgICB0aGlzLnJ1bGVzLnBsdXJhbHMucHVzaChbcmVn
ZXgsIHN0cmluZy50b0xvd2VyQ2FzZSgpXSk7CisgICAgfSwKKworICAgIC8qKgorICAgICAgQG1l
dGhvZCBzaW5ndWxhcgorICAgICAgQHBhcmFtIHtSZWdFeHB9IHJlZ2V4CisgICAgICBAcGFyYW0g
e1N0cmluZ30gc3RyaW5nCisgICAgKi8KKyAgICBzaW5ndWxhcjogZnVuY3Rpb24gc2luZ3VsYXIo
cmVnZXgsIHN0cmluZykgeworICAgICAgaWYgKHRoaXMuX2NhY2hlVXNlZCkgeworICAgICAgICB0
aGlzLnB1cmdlQ2FjaGUoKTsKKyAgICAgIH0KKyAgICAgIHRoaXMucnVsZXMuc2luZ3VsYXIucHVz
aChbcmVnZXgsIHN0cmluZy50b0xvd2VyQ2FzZSgpXSk7CisgICAgfSwKKworICAgIC8qKgorICAg
ICAgQG1ldGhvZCB1bmNvdW50YWJsZQorICAgICAgQHBhcmFtIHtTdHJpbmd9IHJlZ2V4CisgICAg
Ki8KKyAgICB1bmNvdW50YWJsZTogZnVuY3Rpb24gdW5jb3VudGFibGUoc3RyaW5nKSB7CisgICAg
ICBpZiAodGhpcy5fY2FjaGVVc2VkKSB7CisgICAgICAgIHRoaXMucHVyZ2VDYWNoZSgpOworICAg
ICAgfQorICAgICAgbG9hZFVuY291bnRhYmxlKHRoaXMucnVsZXMsIFtzdHJpbmcudG9Mb3dlckNh
c2UoKV0pOworICAgIH0sCisKKyAgICAvKioKKyAgICAgIEBtZXRob2QgaXJyZWd1bGFyCisgICAg
ICBAcGFyYW0ge1N0cmluZ30gc2luZ3VsYXIKKyAgICAgIEBwYXJhbSB7U3RyaW5nfSBwbHVyYWwK
KyAgICAqLworICAgIGlycmVndWxhcjogZnVuY3Rpb24gaXJyZWd1bGFyKHNpbmd1bGFyLCBwbHVy
YWwpIHsKKyAgICAgIGlmICh0aGlzLl9jYWNoZVVzZWQpIHsKKyAgICAgICAgdGhpcy5wdXJnZUNh
Y2hlKCk7CisgICAgICB9CisgICAgICBsb2FkSXJyZWd1bGFyKHRoaXMucnVsZXMsIFtbc2luZ3Vs
YXIsIHBsdXJhbF1dKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICBAbWV0aG9kIHBsdXJhbGl6
ZQorICAgICAgQHBhcmFtIHtTdHJpbmd9IHdvcmQKKyAgICAqLworICAgIHBsdXJhbGl6ZTogZnVu
Y3Rpb24gcGx1cmFsaXplKHdvcmQpIHsKKyAgICAgIHJldHVybiB0aGlzLl9wbHVyYWxpemUod29y
ZCk7CisgICAgfSwKKworICAgIF9wbHVyYWxpemU6IGZ1bmN0aW9uIF9wbHVyYWxpemUod29yZCkg
eworICAgICAgcmV0dXJuIHRoaXMuaW5mbGVjdCh3b3JkLCB0aGlzLnJ1bGVzLnBsdXJhbHMsIHRo
aXMucnVsZXMuaXJyZWd1bGFyKTsKKyAgICB9LAorICAgIC8qKgorICAgICAgQG1ldGhvZCBzaW5n
dWxhcml6ZQorICAgICAgQHBhcmFtIHtTdHJpbmd9IHdvcmQKKyAgICAqLworICAgIHNpbmd1bGFy
aXplOiBmdW5jdGlvbiBzaW5ndWxhcml6ZSh3b3JkKSB7CisgICAgICByZXR1cm4gdGhpcy5fc2lu
Z3VsYXJpemUod29yZCk7CisgICAgfSwKKworICAgIF9zaW5ndWxhcml6ZTogZnVuY3Rpb24gX3Np
bmd1bGFyaXplKHdvcmQpIHsKKyAgICAgIHJldHVybiB0aGlzLmluZmxlY3Qod29yZCwgdGhpcy5y
dWxlcy5zaW5ndWxhciwgdGhpcy5ydWxlcy5pcnJlZ3VsYXJJbnZlcnNlKTsKKyAgICB9LAorCisg
ICAgLyoqCisgICAgICBAcHJvdGVjdGVkCisgICAgICAgQG1ldGhvZCBpbmZsZWN0CisgICAgICBA
cGFyYW0ge1N0cmluZ30gd29yZAorICAgICAgQHBhcmFtIHtPYmplY3R9IHR5cGVSdWxlcworICAg
ICAgQHBhcmFtIHtPYmplY3R9IGlycmVndWxhcgorICAgICovCisgICAgaW5mbGVjdDogZnVuY3Rp
b24gaW5mbGVjdCh3b3JkLCB0eXBlUnVsZXMsIGlycmVndWxhcikgeworICAgICAgdmFyIGluZmxl
Y3Rpb24sIHN1YnN0aXR1dGlvbiwgcmVzdWx0LCBsb3dlcmNhc2UsIHdvcmRTcGxpdCwgZmlyc3RQ
aHJhc2UsIGxhc3RXb3JkLCBpc0JsYW5rLCBpc0NhbWVsaXplZCwgcnVsZSwgaXNVbmNvdW50YWJs
ZTsKKworICAgICAgaXNCbGFuayA9ICF3b3JkIHx8IEJMQU5LX1JFR0VYLnRlc3Qod29yZCk7CisK
KyAgICAgIGlzQ2FtZWxpemVkID0gQ0FNRUxJWkVEX1JFR0VYLnRlc3Qod29yZCk7CisgICAgICBm
aXJzdFBocmFzZSA9ICIiOworCisgICAgICBpZiAoaXNCbGFuaykgeworICAgICAgICByZXR1cm4g
d29yZDsKKyAgICAgIH0KKworICAgICAgbG93ZXJjYXNlID0gd29yZC50b0xvd2VyQ2FzZSgpOwor
ICAgICAgd29yZFNwbGl0ID0gTEFTVF9XT1JEX0RBU0hFRF9SRUdFWC5leGVjKHdvcmQpIHx8IExB
U1RfV09SRF9DQU1FTElaRURfUkVHRVguZXhlYyh3b3JkKTsKKworICAgICAgaWYgKHdvcmRTcGxp
dCkgeworICAgICAgICBmaXJzdFBocmFzZSA9IHdvcmRTcGxpdFsxXTsKKyAgICAgICAgbGFzdFdv
cmQgPSB3b3JkU3BsaXRbMl0udG9Mb3dlckNhc2UoKTsKKyAgICAgIH0KKworICAgICAgaXNVbmNv
dW50YWJsZSA9IHRoaXMucnVsZXMudW5jb3VudGFibGVbbG93ZXJjYXNlXSB8fCB0aGlzLnJ1bGVz
LnVuY291bnRhYmxlW2xhc3RXb3JkXTsKKworICAgICAgaWYgKGlzVW5jb3VudGFibGUpIHsKKyAg
ICAgICAgcmV0dXJuIHdvcmQ7CisgICAgICB9CisKKyAgICAgIGZvciAocnVsZSBpbiB0aGlzLnJ1
bGVzLmlycmVndWxhcikgeworICAgICAgICBpZiAobG93ZXJjYXNlLm1hdGNoKHJ1bGUgKyAiJCIp
KSB7CisgICAgICAgICAgc3Vic3RpdHV0aW9uID0gaXJyZWd1bGFyW3J1bGVdOworCisgICAgICAg
ICAgaWYgKGlzQ2FtZWxpemVkICYmIGlycmVndWxhcltsYXN0V29yZF0pIHsKKyAgICAgICAgICAg
IHN1YnN0aXR1dGlvbiA9IGNhcGl0YWxpemUoc3Vic3RpdHV0aW9uKTsKKyAgICAgICAgICAgIHJ1
bGUgPSBjYXBpdGFsaXplKHJ1bGUpOworICAgICAgICAgIH0KKworICAgICAgICAgIHJldHVybiB3
b3JkLnJlcGxhY2UocnVsZSwgc3Vic3RpdHV0aW9uKTsKKyAgICAgICAgfQorICAgICAgfQorCisg
ICAgICBmb3IgKHZhciBpID0gdHlwZVJ1bGVzLmxlbmd0aCwgbWluID0gMDsgaSA+IG1pbjsgaS0t
KSB7CisgICAgICAgIGluZmxlY3Rpb24gPSB0eXBlUnVsZXNbaSAtIDFdOworICAgICAgICBydWxl
ID0gaW5mbGVjdGlvblswXTsKKworICAgICAgICBpZiAocnVsZS50ZXN0KHdvcmQpKSB7CisgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaW5mbGVjdGlvbiA9IGlu
ZmxlY3Rpb24gfHwgW107CisKKyAgICAgIHJ1bGUgPSBpbmZsZWN0aW9uWzBdOworICAgICAgc3Vi
c3RpdHV0aW9uID0gaW5mbGVjdGlvblsxXTsKKworICAgICAgcmVzdWx0ID0gd29yZC5yZXBsYWNl
KHJ1bGUsIHN1YnN0aXR1dGlvbik7CisKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICB9
OworCisgIGV4cG9ydHNbJ2RlZmF1bHQnXSA9IEluZmxlY3RvcjsKK30pOworZGVmaW5lKCdlbWJl
ci1pbmZsZWN0b3IvbGliL3N5c3RlbS9zdHJpbmcnLCBbJ2V4cG9ydHMnLCAnZW1iZXItaW5mbGVj
dG9yL2xpYi9zeXN0ZW0vaW5mbGVjdG9yJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJJbmZs
ZWN0b3JMaWJTeXN0ZW1JbmZsZWN0b3IpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIGZ1bmN0aW9u
IHBsdXJhbGl6ZSh3b3JkKSB7CisgICAgcmV0dXJuIF9lbWJlckluZmxlY3RvckxpYlN5c3RlbUlu
ZmxlY3RvclsnZGVmYXVsdCddLmluZmxlY3Rvci5wbHVyYWxpemUod29yZCk7CisgIH0KKworICBm
dW5jdGlvbiBzaW5ndWxhcml6ZSh3b3JkKSB7CisgICAgcmV0dXJuIF9lbWJlckluZmxlY3Rvckxp
YlN5c3RlbUluZmxlY3RvclsnZGVmYXVsdCddLmluZmxlY3Rvci5zaW5ndWxhcml6ZSh3b3JkKTsK
KyAgfQorCisgIGV4cG9ydHMucGx1cmFsaXplID0gcGx1cmFsaXplOworICBleHBvcnRzLnNpbmd1
bGFyaXplID0gc2luZ3VsYXJpemU7Cit9KTsKK2RlZmluZSgnZW1iZXItaW5mbGVjdG9yL2xpYi91
dGlscy9tYWtlLWhlbHBlcicsIFsnZXhwb3J0cycsICdlbWJlciddLCBmdW5jdGlvbiAoZXhwb3J0
cywgX2VtYmVyKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICBleHBvcnRzWydkZWZhdWx0J10gPSBt
YWtlSGVscGVyOworCisgIGZ1bmN0aW9uIG1ha2VIZWxwZXIoaGVscGVyRnVuY3Rpb24pIHsKKyAg
ICBpZiAoX2VtYmVyWydkZWZhdWx0J10uSGVscGVyKSB7CisgICAgICByZXR1cm4gX2VtYmVyWydk
ZWZhdWx0J10uSGVscGVyLmhlbHBlcihoZWxwZXJGdW5jdGlvbik7CisgICAgfQorICAgIGlmIChf
ZW1iZXJbJ2RlZmF1bHQnXS5IVE1MQmFycykgeworICAgICAgcmV0dXJuIF9lbWJlclsnZGVmYXVs
dCddLkhUTUxCYXJzLm1ha2VCb3VuZEhlbHBlcihoZWxwZXJGdW5jdGlvbik7CisgICAgfQorICAg
IHJldHVybiBfZW1iZXJbJ2RlZmF1bHQnXS5IYW5kbGViYXJzLm1ha2VCb3VuZEhlbHBlcihoZWxw
ZXJGdW5jdGlvbik7CisgIH0KK30pOworZGVmaW5lKCdlbWJlci1sb2FkLWluaXRpYWxpemVycy9p
bmRleCcsIFsnZXhwb3J0cycsICdlbWJlciddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyKSB7
CisgICd1c2Ugc3RyaWN0JzsKKworICBleHBvcnRzWydkZWZhdWx0J10gPSBmdW5jdGlvbiAoYXBw
LCBwcmVmaXgpIHsKKyAgICB2YXIgcmVnZXggPSBuZXcgUmVnRXhwKCdeJyArIHByZWZpeCArICdc
LygoPzppbnN0YW5jZS0pP2luaXRpYWxpemVycylcLycpOworICAgIHZhciBnZXRLZXlzID0gT2Jq
ZWN0LmtleXMgfHwgX2VtYmVyWydkZWZhdWx0J10ua2V5czsKKworICAgIGdldEtleXMocmVxdWly
ZWpzLl9lYWtfc2VlbikubWFwKGZ1bmN0aW9uIChtb2R1bGVOYW1lKSB7CisgICAgICByZXR1cm4g
eworICAgICAgICBtb2R1bGVOYW1lOiBtb2R1bGVOYW1lLAorICAgICAgICBtYXRjaGVzOiByZWdl
eC5leGVjKG1vZHVsZU5hbWUpCisgICAgICB9OworICAgIH0pLmZpbHRlcihmdW5jdGlvbiAoZGVw
KSB7CisgICAgICByZXR1cm4gZGVwLm1hdGNoZXMgJiYgZGVwLm1hdGNoZXMubGVuZ3RoID09PSAy
OworICAgIH0pLmZvckVhY2goZnVuY3Rpb24gKGRlcCkgeworICAgICAgdmFyIG1vZHVsZU5hbWUg
PSBkZXAubW9kdWxlTmFtZTsKKworICAgICAgdmFyIG1vZHVsZSA9IHJlcXVpcmUobW9kdWxlTmFt
ZSwgbnVsbCwgbnVsbCwgdHJ1ZSk7CisgICAgICBpZiAoIW1vZHVsZSkgeworICAgICAgICB0aHJv
dyBuZXcgRXJyb3IobW9kdWxlTmFtZSArICcgbXVzdCBleHBvcnQgYW4gaW5pdGlhbGl6ZXIuJyk7
CisgICAgICB9CisKKyAgICAgIHZhciBpbml0aWFsaXplclR5cGUgPSBfZW1iZXJbJ2RlZmF1bHQn
XS5TdHJpbmcuY2FtZWxpemUoZGVwLm1hdGNoZXNbMV0uc3Vic3RyaW5nKDAsIGRlcC5tYXRjaGVz
WzFdLmxlbmd0aCAtIDEpKTsKKyAgICAgIHZhciBpbml0aWFsaXplciA9IG1vZHVsZVsnZGVmYXVs
dCddOworICAgICAgaWYgKCFpbml0aWFsaXplci5uYW1lKSB7CisgICAgICAgIHZhciBpbml0aWFs
aXplck5hbWUgPSBtb2R1bGVOYW1lLm1hdGNoKC9bXlwvXStcLz8kLylbMF07CisgICAgICAgIGlu
aXRpYWxpemVyLm5hbWUgPSBpbml0aWFsaXplck5hbWU7CisgICAgICB9CisKKyAgICAgIGlmIChh
cHBbaW5pdGlhbGl6ZXJUeXBlXSkgeworICAgICAgICBhcHBbaW5pdGlhbGl6ZXJUeXBlXShpbml0
aWFsaXplcik7CisgICAgICB9CisgICAgfSk7CisgIH07Cit9KTsKK2RlZmluZSgnZW1iZXItcmVz
b2x2ZXIvY29udGFpbmVyLWRlYnVnLWFkYXB0ZXInLCBbJ2V4cG9ydHMnLCAnZW1iZXInLCAnZW1i
ZXItcmVzb2x2ZXIvdXRpbHMvbW9kdWxlLXJlZ2lzdHJ5J10sIGZ1bmN0aW9uIChleHBvcnRzLCBf
ZW1iZXIsIF9lbWJlclJlc29sdmVyVXRpbHNNb2R1bGVSZWdpc3RyeSkgeworICAndXNlIHN0cmlj
dCc7CisKKyAgdmFyIENvbnRhaW5lckRlYnVnQWRhcHRlciA9IF9lbWJlclsnZGVmYXVsdCddLkNv
bnRhaW5lckRlYnVnQWRhcHRlcjsKKworICB2YXIgTW9kdWxlc0NvbnRhaW5lckRlYnVnQWRhcHRl
ciA9IG51bGw7CisKKyAgZnVuY3Rpb24gZ2V0UG9kKHR5cGUsIGtleSwgcHJlZml4KSB7CisgICAg
dmFyIG1hdGNoID0ga2V5Lm1hdGNoKG5ldyBSZWdFeHAoJ14vPycgKyBwcmVmaXggKyAnLyguKykv
JyArIHR5cGUgKyAnJCcpKTsKKyAgICBpZiAobWF0Y2gpIHsKKyAgICAgIHJldHVybiBtYXRjaFsx
XTsKKyAgICB9CisgIH0KKworICAvLyBTdXBwb3J0IEVtYmVyIDwgMS41LWJldGEuNAorICAvLyBU
T0RPOiBSZW1vdmUgdGhpcyBhZnRlciAxLjUuMCBpcyByZWxlYXNlZAorICBpZiAodHlwZW9mIENv
bnRhaW5lckRlYnVnQWRhcHRlciAhPT0gJ3VuZGVmaW5lZCcpIHsKKworICAgIC8qCisgICAgICog
VGhpcyBtb2R1bGUgZGVmaW5lcyBhIHN1YmNsYXNzIG9mIEVtYmVyLkNvbnRhaW5lckRlYnVnQWRh
cHRlciB0aGF0IGFkZHMgdHdvCisgICAgICogaW1wb3J0YW50IGZlYXR1cmVzOgorICAgICAqCisg
ICAgICogIDEpIGlzIGFibGUgcHJvdmlkZSBpbmplY3Rpb25zIHRvIGNsYXNzZXMgdGhhdCBpbXBs
ZW1lbnQgYGV4dGVuZGAKKyAgICAgKiAgICAgKGFzIGlzIHR5cGljYWwgd2l0aCBFbWJlcikuCisg
ICAgICovCisKKyAgICBNb2R1bGVzQ29udGFpbmVyRGVidWdBZGFwdGVyID0gQ29udGFpbmVyRGVi
dWdBZGFwdGVyLmV4dGVuZCh7CisgICAgICBfbW9kdWxlUmVnaXN0cnk6IG51bGwsCisKKyAgICAg
IGluaXQ6IGZ1bmN0aW9uIGluaXQoKSB7CisgICAgICAgIHRoaXMuX3N1cGVyLmFwcGx5KHRoaXMs
IGFyZ3VtZW50cyk7CisKKyAgICAgICAgaWYgKCF0aGlzLl9tb2R1bGVSZWdpc3RyeSkgeworICAg
ICAgICAgIHRoaXMuX21vZHVsZVJlZ2lzdHJ5ID0gbmV3IF9lbWJlclJlc29sdmVyVXRpbHNNb2R1
bGVSZWdpc3RyeVsnZGVmYXVsdCddKCk7CisgICAgICAgIH0KKyAgICAgIH0sCisKKyAgICAgIC8q
KgorICAgICAgICBUaGUgY29udGFpbmVyIG9mIHRoZSBhcHBsaWNhdGlvbiBiZWluZyBkZWJ1Z2dl
ZC4KKyAgICAgICAgVGhpcyBwcm9wZXJ0eSB3aWxsIGJlIGluamVjdGVkCisgICAgICAgIG9uIGNy
ZWF0aW9uLgorICAgICAgICAgQHByb3BlcnR5IGNvbnRhaW5lcgorICAgICAgICBAZGVmYXVsdCBu
dWxsCisgICAgICAqLworCisgICAgICAvKioKKyAgICAgICAgVGhlIHJlc29sdmVyIGluc3RhbmNl
IG9mIHRoZSBhcHBsaWNhdGlvbgorICAgICAgICBiZWluZyBkZWJ1Z2dlZC4gVGhpcyBwcm9wZXJ0
eSB3aWxsIGJlIGluamVjdGVkCisgICAgICAgIG9uIGNyZWF0aW9uLgorICAgICAgICAgQHByb3Bl
cnR5IHJlc29sdmVyCisgICAgICAgIEBkZWZhdWx0IG51bGwKKyAgICAgICovCisKKyAgICAgIC8q
KgorICAgICAgICBSZXR1cm5zIHRydWUgaWYgaXQgaXMgcG9zc2libGUgdG8gY2F0YWxvZyBhIGxp
c3Qgb2YgYXZhaWxhYmxlCisgICAgICAgIGNsYXNzZXMgaW4gdGhlIHJlc29sdmVyIGZvciBhIGdp
dmVuIHR5cGUuCisgICAgICAgICBAbWV0aG9kIGNhbkNhdGFsb2dFbnRyaWVzQnlUeXBlCisgICAg
ICAgIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFRoZSB0eXBlLiBlLmcuICJtb2RlbCIsICJjb250cm9s
bGVyIiwgInJvdXRlIgorICAgICAgICBAcmV0dXJuIHtib29sZWFufSB3aGV0aGVyIGEgbGlzdCBp
cyBhdmFpbGFibGUgZm9yIHRoaXMgdHlwZS4KKyAgICAgICovCisgICAgICBjYW5DYXRhbG9nRW50
cmllc0J5VHlwZTogZnVuY3Rpb24gY2FuQ2F0YWxvZ0VudHJpZXNCeVR5cGUoKSAvKiB0eXBlICov
eworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0sCisKKyAgICAgIC8qKgorICAgICAgICBS
ZXR1cm5zIHRoZSBhdmFpbGFibGUgY2xhc3NlcyBhIGdpdmVuIHR5cGUuCisgICAgICAgICBAbWV0
aG9kIGNhdGFsb2dFbnRyaWVzQnlUeXBlCisgICAgICAgIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFRo
ZSB0eXBlLiBlLmcuICJtb2RlbCIsICJjb250cm9sbGVyIiwgInJvdXRlIgorICAgICAgICBAcmV0
dXJuIHtBcnJheX0gQW4gYXJyYXkgb2YgY2xhc3Nlcy4KKyAgICAgICovCisgICAgICBjYXRhbG9n
RW50cmllc0J5VHlwZTogZnVuY3Rpb24gY2F0YWxvZ0VudHJpZXNCeVR5cGUodHlwZSkgeworICAg
ICAgICB2YXIgbW9kdWxlTmFtZXMgPSB0aGlzLl9tb2R1bGVSZWdpc3RyeS5tb2R1bGVOYW1lcygp
OworICAgICAgICB2YXIgdHlwZXMgPSBfZW1iZXJbJ2RlZmF1bHQnXS5BKCk7CisKKyAgICAgICAg
dmFyIHByZWZpeCA9IHRoaXMubmFtZXNwYWNlLm1vZHVsZVByZWZpeDsKKworICAgICAgICBmb3Ig
KHZhciBpID0gMCwgbCA9IG1vZHVsZU5hbWVzLmxlbmd0aDsgaSA8IGw7IGkrKykgeworICAgICAg
ICAgIHZhciBrZXkgPSBtb2R1bGVOYW1lc1tpXTsKKworICAgICAgICAgIGlmIChrZXkuaW5kZXhP
Zih0eXBlKSAhPT0gLTEpIHsKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIGl0J3MgYSBwb2QgbW9k
dWxlCisgICAgICAgICAgICB2YXIgbmFtZSA9IGdldFBvZCh0eXBlLCBrZXksIHRoaXMubmFtZXNw
YWNlLnBvZE1vZHVsZVByZWZpeCB8fCBwcmVmaXgpOworICAgICAgICAgICAgaWYgKCFuYW1lKSB7
CisgICAgICAgICAgICAgIC8vIE5vdCBwb2QKKyAgICAgICAgICAgICAgbmFtZSA9IGtleS5zcGxp
dCh0eXBlICsgJ3MvJykucG9wKCk7CisKKyAgICAgICAgICAgICAgLy8gU3VwcG9ydCBmb3IgZGlm
ZmVyZW50IHByZWZpeCAoc3VjaCBhcyBlbWJlci1jbGkgYWRkb25zKS4KKyAgICAgICAgICAgICAg
Ly8gVW5jb21tZW50IHRoZSBjb2RlIGJlbG93IHdoZW4KKyAgICAgICAgICAgICAgLy8gaHR0cHM6
Ly9naXRodWIuY29tL2VtYmVyLWNsaS9lbWJlci1yZXNvbHZlci9wdWxsLzgwIGlzIG1lcmdlZC4K
KworICAgICAgICAgICAgICAvL3ZhciBtYXRjaCA9IGtleS5tYXRjaCgnXi8/KC4rKS8nICsgdHlw
ZSk7CisgICAgICAgICAgICAgIC8vaWYgKG1hdGNoICYmIG1hdGNoWzFdICE9PSBwcmVmaXgpIHsK
KyAgICAgICAgICAgICAgLy8gRGlmZmVyZW50IHByZWZpeCBzdWNoIGFzIGFuIGFkZG9uCisgICAg
ICAgICAgICAgIC8vbmFtZSA9IG1hdGNoWzFdICsgJ0AnICsgbmFtZTsKKyAgICAgICAgICAgICAg
Ly99CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0eXBlcy5hZGRPYmplY3QobmFtZSk7Cisg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0eXBlczsKKyAgICAgIH0KKyAg
ICB9KTsKKyAgfQorCisgIGV4cG9ydHNbJ2RlZmF1bHQnXSA9IE1vZHVsZXNDb250YWluZXJEZWJ1
Z0FkYXB0ZXI7Cit9KTsKK2RlZmluZSgnZW1iZXItcmVzb2x2ZXIvaW5kZXgnLCBbJ2V4cG9ydHMn
LCAnZW1iZXItcmVzb2x2ZXIvcmVzb2x2ZXInXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlclJl
c29sdmVyUmVzb2x2ZXIpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShleHBvcnRzLCAnZGVmYXVsdCcsIHsKKyAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgIGdl
dDogZnVuY3Rpb24gZ2V0KCkgeworICAgICAgcmV0dXJuIF9lbWJlclJlc29sdmVyUmVzb2x2ZXJb
J2RlZmF1bHQnXTsKKyAgICB9CisgIH0pOworfSk7CitkZWZpbmUoJ2VtYmVyLXJlc29sdmVyL3Jl
c29sdmVyJywgWydleHBvcnRzJywgJ2VtYmVyJywgJ2VtYmVyLXJlc29sdmVyL3V0aWxzL21vZHVs
ZS1yZWdpc3RyeScsICdlbWJlci1yZXNvbHZlci91dGlscy9jbGFzcy1mYWN0b3J5JywgJ2VtYmVy
LXJlc29sdmVyL3V0aWxzL21ha2UtZGljdGlvbmFyeSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2Vt
YmVyLCBfZW1iZXJSZXNvbHZlclV0aWxzTW9kdWxlUmVnaXN0cnksIF9lbWJlclJlc29sdmVyVXRp
bHNDbGFzc0ZhY3RvcnksIF9lbWJlclJlc29sdmVyVXRpbHNNYWtlRGljdGlvbmFyeSkgeworICAv
Kmdsb2JhbHMgcmVxdWlyZSAqLworCisgICd1c2Ugc3RyaWN0JzsKKworICAvKgorICAgKiBUaGlz
IG1vZHVsZSBkZWZpbmVzIGEgc3ViY2xhc3Mgb2YgRW1iZXIuRGVmYXVsdFJlc29sdmVyIHRoYXQg
YWRkcyB0d28KKyAgICogaW1wb3J0YW50IGZlYXR1cmVzOgorICAgKgorICAgKiAgMSkgVGhlIHJl
c29sdmVyIG1ha2VzIHRoZSBjb250YWluZXIgYXdhcmUgb2YgZXM2IG1vZHVsZXMgdmlhIHRoZSBB
TUQKKyAgICogICAgIG91dHB1dC4gVGhlIGxvYWRlcidzIF9tb2R1bGVFbnRyaWVzIGlzIGNvbnN1
bHRlZCBzbyB0aGF0IGNsYXNzZXMgY2FuIGJlCisgICAqICAgICByZXNvbHZlZCBkaXJlY3RseSB2
aWEgdGhlIG1vZHVsZSBsb2FkZXIsIHdpdGhvdXQgbmVlZGluZyBhIG1hbnVhbAorICAgKiAgICAg
YGltcG9ydGAuCisgICAqICAyKSBpcyBhYmxlIHRvIHByb3ZpZGUgaW5qZWN0aW9ucyB0byBjbGFz
c2VzIHRoYXQgaW1wbGVtZW50IGBleHRlbmRgCisgICAqICAgICAoYXMgaXMgdHlwaWNhbCB3aXRo
IEVtYmVyKS4KKyAgICovCisKKyAgdmFyIF9FbWJlciRTdHJpbmcgPSBfZW1iZXJbJ2RlZmF1bHQn
XS5TdHJpbmc7CisgIHZhciB1bmRlcnNjb3JlID0gX0VtYmVyJFN0cmluZy51bmRlcnNjb3JlOwor
ICB2YXIgY2xhc3NpZnkgPSBfRW1iZXIkU3RyaW5nLmNsYXNzaWZ5OworICB2YXIgZGFzaGVyaXpl
ID0gX0VtYmVyJFN0cmluZy5kYXNoZXJpemU7CisgIHZhciBnZXQgPSBfZW1iZXJbJ2RlZmF1bHQn
XS5nZXQ7CisgIHZhciBEZWZhdWx0UmVzb2x2ZXIgPSBfZW1iZXJbJ2RlZmF1bHQnXS5EZWZhdWx0
UmVzb2x2ZXI7CisKKyAgZnVuY3Rpb24gcGFyc2VOYW1lKGZ1bGxOYW1lKSB7CisgICAgLypqc2hp
bnQgdmFsaWR0aGlzOnRydWUgKi8KKworICAgIGlmIChmdWxsTmFtZS5wYXJzZWROYW1lID09PSB0
cnVlKSB7CisgICAgICByZXR1cm4gZnVsbE5hbWU7CisgICAgfQorCisgICAgdmFyIHByZWZpeCwg
dHlwZSwgbmFtZTsKKyAgICB2YXIgZnVsbE5hbWVQYXJ0cyA9IGZ1bGxOYW1lLnNwbGl0KCdAJyk7
CisKKyAgICAvLyBIVE1MQmFycyB1c2VzIGhlbHBlcjpAY29udGVudC1oZWxwZXIgd2hpY2ggY29s
bGlkZXMKKyAgICAvLyB3aXRoIGVtYmVyLWNsaSBuYW1lc3BhY2UgZGV0ZWN0aW9uLgorICAgIC8v
IFRoaXMgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHJlbGVhc2Ugb2YgSFRNTEJhcnMuCisg
ICAgaWYgKGZ1bGxOYW1lICE9PSAnaGVscGVyOkBjb250ZW50LWhlbHBlcicgJiYgZnVsbE5hbWVQ
YXJ0cy5sZW5ndGggPT09IDIpIHsKKyAgICAgIHZhciBwcmVmaXhQYXJ0cyA9IGZ1bGxOYW1lUGFy
dHNbMF0uc3BsaXQoJzonKTsKKworICAgICAgaWYgKHByZWZpeFBhcnRzLmxlbmd0aCA9PT0gMikg
eworICAgICAgICBwcmVmaXggPSBwcmVmaXhQYXJ0c1sxXTsKKyAgICAgICAgdHlwZSA9IHByZWZp
eFBhcnRzWzBdOworICAgICAgICBuYW1lID0gZnVsbE5hbWVQYXJ0c1sxXTsKKyAgICAgIH0gZWxz
ZSB7CisgICAgICAgIHZhciBuYW1lUGFydHMgPSBmdWxsTmFtZVBhcnRzWzFdLnNwbGl0KCc6Jyk7
CisKKyAgICAgICAgcHJlZml4ID0gZnVsbE5hbWVQYXJ0c1swXTsKKyAgICAgICAgdHlwZSA9IG5h
bWVQYXJ0c1swXTsKKyAgICAgICAgbmFtZSA9IG5hbWVQYXJ0c1sxXTsKKyAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgZnVsbE5hbWVQYXJ0cyA9IGZ1bGxOYW1lLnNwbGl0KCc6Jyk7CisgICAg
ICB0eXBlID0gZnVsbE5hbWVQYXJ0c1swXTsKKyAgICAgIG5hbWUgPSBmdWxsTmFtZVBhcnRzWzFd
OworICAgIH0KKworICAgIHZhciBmdWxsTmFtZVdpdGhvdXRUeXBlID0gbmFtZTsKKyAgICB2YXIg
bmFtZXNwYWNlID0gZ2V0KHRoaXMsICduYW1lc3BhY2UnKTsKKyAgICB2YXIgcm9vdCA9IG5hbWVz
cGFjZTsKKworICAgIHJldHVybiB7CisgICAgICBwYXJzZWROYW1lOiB0cnVlLAorICAgICAgZnVs
bE5hbWU6IGZ1bGxOYW1lLAorICAgICAgcHJlZml4OiBwcmVmaXggfHwgdGhpcy5wcmVmaXgoeyB0
eXBlOiB0eXBlIH0pLAorICAgICAgdHlwZTogdHlwZSwKKyAgICAgIGZ1bGxOYW1lV2l0aG91dFR5
cGU6IGZ1bGxOYW1lV2l0aG91dFR5cGUsCisgICAgICBuYW1lOiBuYW1lLAorICAgICAgcm9vdDog
cm9vdCwKKyAgICAgIHJlc29sdmVNZXRob2ROYW1lOiAicmVzb2x2ZSIgKyBjbGFzc2lmeSh0eXBl
KQorICAgIH07CisgIH0KKworICBmdW5jdGlvbiByZXNvbHZlT3RoZXIocGFyc2VkTmFtZSkgewor
ICAgIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovCisKKyAgICBfZW1iZXJbJ2RlZmF1bHQnXS5h
c3NlcnQoJ2Btb2R1bGVQcmVmaXhgIG11c3QgYmUgZGVmaW5lZCcsIHRoaXMubmFtZXNwYWNlLm1v
ZHVsZVByZWZpeCk7CisKKyAgICB2YXIgbm9ybWFsaXplZE1vZHVsZU5hbWUgPSB0aGlzLmZpbmRN
b2R1bGVOYW1lKHBhcnNlZE5hbWUpOworCisgICAgaWYgKG5vcm1hbGl6ZWRNb2R1bGVOYW1lKSB7
CisgICAgICB2YXIgZGVmYXVsdEV4cG9ydCA9IHRoaXMuX2V4dHJhY3REZWZhdWx0RXhwb3J0KG5v
cm1hbGl6ZWRNb2R1bGVOYW1lLCBwYXJzZWROYW1lKTsKKworICAgICAgaWYgKGRlZmF1bHRFeHBv
cnQgPT09IHVuZGVmaW5lZCkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIiBFeHBlY3RlZCB0
byBmaW5kOiAnIiArIHBhcnNlZE5hbWUuZnVsbE5hbWUgKyAiJyB3aXRoaW4gJyIgKyBub3JtYWxp
emVkTW9kdWxlTmFtZSArICInIGJ1dCBnb3QgJ3VuZGVmaW5lZCcuIERpZCB5b3UgZm9yZ2V0IHRv
IGBleHBvcnQgZGVmYXVsdGAgd2l0aGluICciICsgbm9ybWFsaXplZE1vZHVsZU5hbWUgKyAiJz8i
KTsKKyAgICAgIH0KKworICAgICAgaWYgKHRoaXMuc2hvdWxkV3JhcEluQ2xhc3NGYWN0b3J5KGRl
ZmF1bHRFeHBvcnQsIHBhcnNlZE5hbWUpKSB7CisgICAgICAgIGRlZmF1bHRFeHBvcnQgPSAoMCwg
X2VtYmVyUmVzb2x2ZXJVdGlsc0NsYXNzRmFjdG9yeVsnZGVmYXVsdCddKShkZWZhdWx0RXhwb3J0
KTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIGRlZmF1bHRFeHBvcnQ7CisgICAgfSBlbHNlIHsK
KyAgICAgIHJldHVybiB0aGlzLl9zdXBlcihwYXJzZWROYW1lKTsKKyAgICB9CisgIH0KKworICAv
LyBFbWJlci5EZWZhdWx0UmVzb2x2ZXIgZG9jczoKKyAgLy8gICBodHRwczovL2dpdGh1Yi5jb20v
ZW1iZXJqcy9lbWJlci5qcy9ibG9iL21hc3Rlci9wYWNrYWdlcy9lbWJlci1hcHBsaWNhdGlvbi9s
aWIvc3lzdGVtL3Jlc29sdmVyLmpzCisgIHZhciBSZXNvbHZlciA9IERlZmF1bHRSZXNvbHZlci5l
eHRlbmQoeworICAgIHJlc29sdmVPdGhlcjogcmVzb2x2ZU90aGVyLAorICAgIHBhcnNlTmFtZTog
cGFyc2VOYW1lLAorICAgIHJlc29sdmVUZW1wbGF0ZTogcmVzb2x2ZU90aGVyLAorICAgIHBsdXJh
bGl6ZWRUeXBlczogbnVsbCwKKyAgICBtb2R1bGVSZWdpc3RyeTogbnVsbCwKKworICAgIG1ha2VU
b1N0cmluZzogZnVuY3Rpb24gbWFrZVRvU3RyaW5nKGZhY3RvcnksIGZ1bGxOYW1lKSB7CisgICAg
ICByZXR1cm4gJycgKyB0aGlzLm5hbWVzcGFjZS5tb2R1bGVQcmVmaXggKyAnQCcgKyBmdWxsTmFt
ZSArICc6JzsKKyAgICB9LAorCisgICAgc2hvdWxkV3JhcEluQ2xhc3NGYWN0b3J5OiBmdW5jdGlv
biBzaG91bGRXcmFwSW5DbGFzc0ZhY3RvcnkoKSAvKiBtb2R1bGUsIHBhcnNlZE5hbWUgKi97Cisg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfSwKKworICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoKSB7
CisgICAgICB0aGlzLl9zdXBlcigpOworICAgICAgdGhpcy5tb2R1bGVCYXNlZFJlc29sdmVyID0g
dHJ1ZTsKKworICAgICAgaWYgKCF0aGlzLl9tb2R1bGVSZWdpc3RyeSkgeworICAgICAgICB0aGlz
Ll9tb2R1bGVSZWdpc3RyeSA9IG5ldyBfZW1iZXJSZXNvbHZlclV0aWxzTW9kdWxlUmVnaXN0cnlb
J2RlZmF1bHQnXSgpOworICAgICAgfQorCisgICAgICB0aGlzLl9ub3JtYWxpemVDYWNoZSA9ICgw
LCBfZW1iZXJSZXNvbHZlclV0aWxzTWFrZURpY3Rpb25hcnlbJ2RlZmF1bHQnXSkoKTsKKworICAg
ICAgdGhpcy5wbHVyYWxpemVkVHlwZXMgPSB0aGlzLnBsdXJhbGl6ZWRUeXBlcyB8fCAoMCwgX2Vt
YmVyUmVzb2x2ZXJVdGlsc01ha2VEaWN0aW9uYXJ5WydkZWZhdWx0J10pKCk7CisKKyAgICAgIGlm
ICghdGhpcy5wbHVyYWxpemVkVHlwZXMuY29uZmlnKSB7CisgICAgICAgIHRoaXMucGx1cmFsaXpl
ZFR5cGVzLmNvbmZpZyA9ICdjb25maWcnOworICAgICAgfQorICAgICAgdGhpcy5fZGVwcmVjYXRl
ZFBvZE1vZHVsZVByZWZpeCA9IGZhbHNlOworICAgIH0sCisKKyAgICBub3JtYWxpemU6IGZ1bmN0
aW9uIG5vcm1hbGl6ZShmdWxsTmFtZSkgeworICAgICAgcmV0dXJuIHRoaXMuX25vcm1hbGl6ZUNh
Y2hlW2Z1bGxOYW1lXSB8fCAodGhpcy5fbm9ybWFsaXplQ2FjaGVbZnVsbE5hbWVdID0gdGhpcy5f
bm9ybWFsaXplKGZ1bGxOYW1lKSk7CisgICAgfSwKKworICAgIF9ub3JtYWxpemU6IGZ1bmN0aW9u
IF9ub3JtYWxpemUoZnVsbE5hbWUpIHsKKyAgICAgIC8vIEEpIENvbnZlcnQgdW5kZXJzY29yZXMg
dG8gZGFzaGVzCisgICAgICAvLyBCKSBDb252ZXJ0IGNhbWVsQ2FzZSB0byBkYXNoLWNhc2UsIGV4
Y2VwdCBmb3IgaGVscGVycyB3aGVyZSB3ZSB3YW50IHRvIGF2b2lkIHNoYWRvd2luZyBjYW1lbENh
c2UgZXhwcmVzc2lvbnMKKyAgICAgIC8vIEMpIHJlcGxhY2UgYC5gIHdpdGggYC9gIGluIG9yZGVy
IHRvIG1ha2UgbmVzdGVkIGNvbnRyb2xsZXJzIHdvcmsgaW4gdGhlIGZvbGxvd2luZyBjYXNlcwor
ICAgICAgLy8gICAgICAxLiBgbmVlZHM6IFsncG9zdHMvcG9zdCddYAorICAgICAgLy8gICAgICAy
LiBge3tyZW5kZXIgInBvc3RzL3Bvc3QifX1gCisgICAgICAvLyAgICAgIDMuIGB0aGlzLnJlbmRl
cigncG9zdHMvcG9zdCcpYCBmcm9tIFJvdXRlCisKKyAgICAgIHZhciBzcGxpdCA9IGZ1bGxOYW1l
LnNwbGl0KCc6Jyk7CisgICAgICBpZiAoc3BsaXQubGVuZ3RoID4gMSkgeworICAgICAgICBpZiAo
c3BsaXRbMF0gPT09ICdoZWxwZXInKSB7CisgICAgICAgICAgcmV0dXJuIHNwbGl0WzBdICsgJzon
ICsgc3BsaXRbMV0ucmVwbGFjZSgvXy9nLCAnLScpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgIHJldHVybiBzcGxpdFswXSArICc6JyArIGRhc2hlcml6ZShzcGxpdFsxXS5yZXBsYWNlKC9c
Li9nLCAnLycpKTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGZ1
bGxOYW1lOworICAgICAgfQorICAgIH0sCisKKyAgICBwbHVyYWxpemU6IGZ1bmN0aW9uIHBsdXJh
bGl6ZSh0eXBlKSB7CisgICAgICByZXR1cm4gdGhpcy5wbHVyYWxpemVkVHlwZXNbdHlwZV0gfHwg
KHRoaXMucGx1cmFsaXplZFR5cGVzW3R5cGVdID0gdHlwZSArICdzJyk7CisgICAgfSwKKworICAg
IHBvZEJhc2VkTG9va3VwV2l0aFByZWZpeDogZnVuY3Rpb24gcG9kQmFzZWRMb29rdXBXaXRoUHJl
Zml4KHBvZFByZWZpeCwgcGFyc2VkTmFtZSkgeworICAgICAgdmFyIGZ1bGxOYW1lV2l0aG91dFR5
cGUgPSBwYXJzZWROYW1lLmZ1bGxOYW1lV2l0aG91dFR5cGU7CisKKyAgICAgIGlmIChwYXJzZWRO
YW1lLnR5cGUgPT09ICd0ZW1wbGF0ZScpIHsKKyAgICAgICAgZnVsbE5hbWVXaXRob3V0VHlwZSA9
IGZ1bGxOYW1lV2l0aG91dFR5cGUucmVwbGFjZSgvXmNvbXBvbmVudHNcLy8sICcnKTsKKyAgICAg
IH0KKworICAgICAgcmV0dXJuIHBvZFByZWZpeCArICcvJyArIGZ1bGxOYW1lV2l0aG91dFR5cGUg
KyAnLycgKyBwYXJzZWROYW1lLnR5cGU7CisgICAgfSwKKworICAgIHBvZEJhc2VkTW9kdWxlTmFt
ZTogZnVuY3Rpb24gcG9kQmFzZWRNb2R1bGVOYW1lKHBhcnNlZE5hbWUpIHsKKyAgICAgIHZhciBw
b2RQcmVmaXggPSB0aGlzLm5hbWVzcGFjZS5wb2RNb2R1bGVQcmVmaXggfHwgdGhpcy5uYW1lc3Bh
Y2UubW9kdWxlUHJlZml4OworCisgICAgICByZXR1cm4gdGhpcy5wb2RCYXNlZExvb2t1cFdpdGhQ
cmVmaXgocG9kUHJlZml4LCBwYXJzZWROYW1lKTsKKyAgICB9LAorCisgICAgcG9kQmFzZWRDb21w
b25lbnRzSW5TdWJkaXI6IGZ1bmN0aW9uIHBvZEJhc2VkQ29tcG9uZW50c0luU3ViZGlyKHBhcnNl
ZE5hbWUpIHsKKyAgICAgIHZhciBwb2RQcmVmaXggPSB0aGlzLm5hbWVzcGFjZS5wb2RNb2R1bGVQ
cmVmaXggfHwgdGhpcy5uYW1lc3BhY2UubW9kdWxlUHJlZml4OworICAgICAgcG9kUHJlZml4ID0g
cG9kUHJlZml4ICsgJy9jb21wb25lbnRzJzsKKworICAgICAgaWYgKHBhcnNlZE5hbWUudHlwZSA9
PT0gJ2NvbXBvbmVudCcgfHwgcGFyc2VkTmFtZS5mdWxsTmFtZVdpdGhvdXRUeXBlLm1hdGNoKC9e
Y29tcG9uZW50cy8pKSB7CisgICAgICAgIHJldHVybiB0aGlzLnBvZEJhc2VkTG9va3VwV2l0aFBy
ZWZpeChwb2RQcmVmaXgsIHBhcnNlZE5hbWUpOworICAgICAgfQorICAgIH0sCisKKyAgICByZXNv
bHZlRW5naW5lOiBmdW5jdGlvbiByZXNvbHZlRW5naW5lKHBhcnNlZE5hbWUpIHsKKyAgICAgIHZh
ciBlbmdpbmVOYW1lID0gcGFyc2VkTmFtZS5mdWxsTmFtZVdpdGhvdXRUeXBlOworICAgICAgdmFy
IGVuZ2luZU1vZHVsZSA9IGVuZ2luZU5hbWUgKyAnL2VuZ2luZSc7CisKKyAgICAgIGlmICh0aGlz
Ll9tb2R1bGVSZWdpc3RyeS5oYXMoZW5naW5lTW9kdWxlKSkgeworICAgICAgICByZXR1cm4gdGhp
cy5fZXh0cmFjdERlZmF1bHRFeHBvcnQoZW5naW5lTW9kdWxlKTsKKyAgICAgIH0KKyAgICB9LAor
CisgICAgcmVzb2x2ZVJvdXRlTWFwOiBmdW5jdGlvbiByZXNvbHZlUm91dGVNYXAocGFyc2VkTmFt
ZSkgeworICAgICAgdmFyIGVuZ2luZU5hbWUgPSBwYXJzZWROYW1lLmZ1bGxOYW1lV2l0aG91dFR5
cGU7CisgICAgICB2YXIgZW5naW5lUm91dGVzTW9kdWxlID0gZW5naW5lTmFtZSArICcvcm91dGVz
JzsKKworICAgICAgaWYgKHRoaXMuX21vZHVsZVJlZ2lzdHJ5LmhhcyhlbmdpbmVSb3V0ZXNNb2R1
bGUpKSB7CisgICAgICAgIHZhciByb3V0ZU1hcCA9IHRoaXMuX2V4dHJhY3REZWZhdWx0RXhwb3J0
KGVuZ2luZVJvdXRlc01vZHVsZSk7CisKKyAgICAgICAgX2VtYmVyWydkZWZhdWx0J10uYXNzZXJ0
KCdUaGUgcm91dGUgbWFwIGZvciAnICsgZW5naW5lTmFtZSArICcgc2hvdWxkIGJlIHdyYXBwZWQg
YnkgXCdidWlsZFJvdXRlc1wnIGJlZm9yZSBleHBvcnRpbmcuJywgcm91dGVNYXAuaXNSb3V0ZU1h
cCk7CisKKyAgICAgICAgcmV0dXJuIHJvdXRlTWFwOworICAgICAgfQorICAgIH0sCisKKyAgICBt
YWluTW9kdWxlTmFtZTogZnVuY3Rpb24gbWFpbk1vZHVsZU5hbWUocGFyc2VkTmFtZSkgeworICAg
ICAgLy8gaWYgcm91dGVyOm1haW4gb3IgYWRhcHRlcjptYWluIGxvb2sgZm9yIGEgbW9kdWxlIHdp
dGgganVzdCB0aGUgdHlwZSBmaXJzdAorICAgICAgdmFyIHRtcE1vZHVsZU5hbWUgPSBwYXJzZWRO
YW1lLnByZWZpeCArICcvJyArIHBhcnNlZE5hbWUudHlwZTsKKworICAgICAgaWYgKHBhcnNlZE5h
bWUuZnVsbE5hbWVXaXRob3V0VHlwZSA9PT0gJ21haW4nKSB7CisgICAgICAgIHJldHVybiB0bXBN
b2R1bGVOYW1lOworICAgICAgfQorICAgIH0sCisKKyAgICBkZWZhdWx0TW9kdWxlTmFtZTogZnVu
Y3Rpb24gZGVmYXVsdE1vZHVsZU5hbWUocGFyc2VkTmFtZSkgeworICAgICAgcmV0dXJuIHBhcnNl
ZE5hbWUucHJlZml4ICsgJy8nICsgdGhpcy5wbHVyYWxpemUocGFyc2VkTmFtZS50eXBlKSArICcv
JyArIHBhcnNlZE5hbWUuZnVsbE5hbWVXaXRob3V0VHlwZTsKKyAgICB9LAorCisgICAgcHJlZml4
OiBmdW5jdGlvbiBwcmVmaXgocGFyc2VkTmFtZSkgeworICAgICAgdmFyIHRtcFByZWZpeCA9IHRo
aXMubmFtZXNwYWNlLm1vZHVsZVByZWZpeDsKKworICAgICAgaWYgKHRoaXMubmFtZXNwYWNlW3Bh
cnNlZE5hbWUudHlwZSArICdQcmVmaXgnXSkgeworICAgICAgICB0bXBQcmVmaXggPSB0aGlzLm5h
bWVzcGFjZVtwYXJzZWROYW1lLnR5cGUgKyAnUHJlZml4J107CisgICAgICB9CisKKyAgICAgIHJl
dHVybiB0bXBQcmVmaXg7CisgICAgfSwKKworICAgIC8qKgorICAgICAgQSBsaXN0aW5nIG9mIGZ1
bmN0aW9ucyB0byB0ZXN0IGZvciBtb2R1bGVOYW1lJ3MgYmFzZWQgb24gdGhlIHByb3ZpZGVkCisg
ICAgIGBwYXJzZWROYW1lYC4gVGhpcyBhbGxvd3MgZWFzeSBjdXN0b21pemF0aW9uIG9mIGFkZGl0
aW9uYWwgbW9kdWxlIGJhc2VkCisgICAgIGxvb2t1cCBwYXR0ZXJucy4KKyAgICAgIEBwcm9wZXJ0
eSBtb2R1bGVOYW1lTG9va3VwUGF0dGVybnMKKyAgICAgQHJldHVybnMge0VtYmVyLkFycmF5fQor
ICAgICAqLworICAgIG1vZHVsZU5hbWVMb29rdXBQYXR0ZXJuczogX2VtYmVyWydkZWZhdWx0J10u
Y29tcHV0ZWQoZnVuY3Rpb24gKCkgeworICAgICAgcmV0dXJuIFt0aGlzLnBvZEJhc2VkTW9kdWxl
TmFtZSwgdGhpcy5wb2RCYXNlZENvbXBvbmVudHNJblN1YmRpciwgdGhpcy5tYWluTW9kdWxlTmFt
ZSwgdGhpcy5kZWZhdWx0TW9kdWxlTmFtZV07CisgICAgfSksCisKKyAgICBmaW5kTW9kdWxlTmFt
ZTogZnVuY3Rpb24gZmluZE1vZHVsZU5hbWUocGFyc2VkTmFtZSwgbG9nZ2luZ0Rpc2FibGVkKSB7
CisgICAgICB2YXIgbW9kdWxlTmFtZUxvb2t1cFBhdHRlcm5zID0gdGhpcy5nZXQoJ21vZHVsZU5h
bWVMb29rdXBQYXR0ZXJucycpOworICAgICAgdmFyIG1vZHVsZU5hbWU7CisKKyAgICAgIGZvciAo
dmFyIGluZGV4ID0gMCwgX2xlbmd0aCA9IG1vZHVsZU5hbWVMb29rdXBQYXR0ZXJucy5sZW5ndGg7
IGluZGV4IDwgX2xlbmd0aDsgaW5kZXgrKykgeworICAgICAgICB2YXIgaXRlbSA9IG1vZHVsZU5h
bWVMb29rdXBQYXR0ZXJuc1tpbmRleF07CisKKyAgICAgICAgdmFyIHRtcE1vZHVsZU5hbWUgPSBp
dGVtLmNhbGwodGhpcywgcGFyc2VkTmFtZSk7CisKKyAgICAgICAgLy8gYWxsb3cgdHJlYXQgYWxs
IGRhc2hlZCBhbmQgYWxsIHVuZGVyc2NvcmVkIGFzIHRoZSBzYW1lIHRoaW5nCisgICAgICAgIC8v
IHN1cHBvcnRzIGNvbXBvbmVudHMgd2l0aCBkYXNoZXMgYW5kIG90aGVyIHN0dWZmIHdpdGggdW5k
ZXJzY29yZXMuCisgICAgICAgIGlmICh0bXBNb2R1bGVOYW1lKSB7CisgICAgICAgICAgdG1wTW9k
dWxlTmFtZSA9IHRoaXMuY2hvb3NlTW9kdWxlTmFtZSh0bXBNb2R1bGVOYW1lLCBwYXJzZWROYW1l
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0bXBNb2R1bGVOYW1lICYmIHRoaXMuX21vZHVs
ZVJlZ2lzdHJ5Lmhhcyh0bXBNb2R1bGVOYW1lKSkgeworICAgICAgICAgIG1vZHVsZU5hbWUgPSB0
bXBNb2R1bGVOYW1lOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFsb2dnaW5nRGlzYWJsZWQp
IHsKKyAgICAgICAgICB0aGlzLl9sb2dMb29rdXAobW9kdWxlTmFtZSwgcGFyc2VkTmFtZSwgdG1w
TW9kdWxlTmFtZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobW9kdWxlTmFtZSkgeworICAg
ICAgICAgIHJldHVybiBtb2R1bGVOYW1lOworICAgICAgICB9CisgICAgICB9CisgICAgfSwKKwor
ICAgIGNob29zZU1vZHVsZU5hbWU6IGZ1bmN0aW9uIGNob29zZU1vZHVsZU5hbWUobW9kdWxlTmFt
ZSwgcGFyc2VkTmFtZSkgeworICAgICAgdmFyIF90aGlzID0gdGhpczsKKworICAgICAgdmFyIHVu
ZGVyc2NvcmVkTW9kdWxlTmFtZSA9IHVuZGVyc2NvcmUobW9kdWxlTmFtZSk7CisKKyAgICAgIGlm
IChtb2R1bGVOYW1lICE9PSB1bmRlcnNjb3JlZE1vZHVsZU5hbWUgJiYgdGhpcy5fbW9kdWxlUmVn
aXN0cnkuaGFzKG1vZHVsZU5hbWUpICYmIHRoaXMuX21vZHVsZVJlZ2lzdHJ5Lmhhcyh1bmRlcnNj
b3JlZE1vZHVsZU5hbWUpKSB7CisgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkFtYmlndW91
cyBtb2R1bGUgbmFtZXM6IGAiICsgbW9kdWxlTmFtZSArICJgIGFuZCBgIiArIHVuZGVyc2NvcmVk
TW9kdWxlTmFtZSArICJgIik7CisgICAgICB9CisKKyAgICAgIGlmICh0aGlzLl9tb2R1bGVSZWdp
c3RyeS5oYXMobW9kdWxlTmFtZSkpIHsKKyAgICAgICAgcmV0dXJuIG1vZHVsZU5hbWU7CisgICAg
ICB9IGVsc2UgaWYgKHRoaXMuX21vZHVsZVJlZ2lzdHJ5Lmhhcyh1bmRlcnNjb3JlZE1vZHVsZU5h
bWUpKSB7CisgICAgICAgIHJldHVybiB1bmRlcnNjb3JlZE1vZHVsZU5hbWU7CisgICAgICB9Cisg
ICAgICAvLyB3b3JrYXJvdW5kIGZvciBkYXNoZXJpemVkIHBhcnRpYWxzOgorICAgICAgLy8gc29t
ZXRoaW5nL3NvbWV0aGluZy8tc29tZXRoaW5nID0+IHNvbWV0aGluZy9zb21ldGhpbmcvX3NvbWV0
aGluZworICAgICAgdmFyIHBhcnRpYWxpemVkTW9kdWxlTmFtZSA9IG1vZHVsZU5hbWUucmVwbGFj
ZSgvXC8tKFteXC9dKikkLywgJy9fJDEnKTsKKworICAgICAgaWYgKHRoaXMuX21vZHVsZVJlZ2lz
dHJ5LmhhcyhwYXJ0aWFsaXplZE1vZHVsZU5hbWUpKSB7CisgICAgICAgIF9lbWJlclsnZGVmYXVs
dCddLmRlcHJlY2F0ZSgnTW9kdWxlcyBzaG91bGQgbm90IGNvbnRhaW4gdW5kZXJzY29yZXMuICcg
KyAnQXR0ZW1wdGVkIHRvIGxvb2t1cCAiJyArIG1vZHVsZU5hbWUgKyAnIiB3aGljaCAnICsgJ3dh
cyBub3QgZm91bmQuIFBsZWFzZSByZW5hbWUgIicgKyBwYXJ0aWFsaXplZE1vZHVsZU5hbWUgKyAn
IiAnICsgJ3RvICInICsgbW9kdWxlTmFtZSArICciIGluc3RlYWQuJywgZmFsc2UsIHsgaWQ6ICdl
bWJlci1yZXNvbHZlci51bmRlcnNjb3JlZC1tb2R1bGVzJywgdW50aWw6ICczLjAuMCcgfSk7CisK
KyAgICAgICAgcmV0dXJuIHBhcnRpYWxpemVkTW9kdWxlTmFtZTsKKyAgICAgIH0KKyAgICAgIF9l
bWJlclsnZGVmYXVsdCddLnJ1bkluRGVidWcoZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgaXND
YW1lbENhc2VIZWxwZXIgPSBwYXJzZWROYW1lLnR5cGUgPT09ICdoZWxwZXInICYmICEhbW9kdWxl
TmFtZS5tYXRjaCgvW2Etel0rW0EtWl0rLyk7CisgICAgICAgIGlmIChpc0NhbWVsQ2FzZUhlbHBl
cikgeworICAgICAgICAgIF90aGlzLl9jYW1lbENhc2VIZWxwZXJXYXJuZWROYW1lcyA9IF90aGlz
Ll9jYW1lbENhc2VIZWxwZXJXYXJuZWROYW1lcyB8fCBbXTsKKyAgICAgICAgICB2YXIgYWxyZWFk
eVdhcm5lZCA9IF90aGlzLl9jYW1lbENhc2VIZWxwZXJXYXJuZWROYW1lcy5pbmRleE9mKHBhcnNl
ZE5hbWUuZnVsbE5hbWUpID4gLTE7CisgICAgICAgICAgaWYgKCFhbHJlYWR5V2FybmVkICYmIF90
aGlzLl9tb2R1bGVSZWdpc3RyeS5oYXMoZGFzaGVyaXplKG1vZHVsZU5hbWUpKSkgeworICAgICAg
ICAgICAgX3RoaXMuX2NhbWVsQ2FzZUhlbHBlcldhcm5lZE5hbWVzLnB1c2gocGFyc2VkTmFtZS5m
dWxsTmFtZSk7CisgICAgICAgICAgICBfZW1iZXJbJ2RlZmF1bHQnXS53YXJuKCdBdHRlbXB0ZWQg
dG8gbG9va3VwICInICsgcGFyc2VkTmFtZS5mdWxsTmFtZSArICciIHdoaWNoICcgKyAnd2FzIG5v
dCBmb3VuZC4gSW4gcHJldmlvdXMgdmVyc2lvbnMgb2YgZW1iZXItcmVzb2x2ZXIsIGEgYnVnIHdv
dWxkIGhhdmUgJyArICdjYXVzZWQgdGhlIG1vZHVsZSBhdCAiJyArIGRhc2hlcml6ZShtb2R1bGVO
YW1lKSArICciIHRvIGJlICcgKyAncmV0dXJuZWQgZm9yIHRoaXMgY2FtZWwgY2FzZSBoZWxwZXIg
bmFtZS4gVGhpcyBoYXMgYmVlbiBmaXhlZC4gJyArICdVc2UgdGhlIGRhc2hlcml6ZWQgbmFtZSB0
byByZXNvbHZlIHRoZSBtb2R1bGUgdGhhdCB3b3VsZCBoYXZlIGJlZW4gJyArICdyZXR1cm5lZCBp
biBwcmV2aW91cyB2ZXJzaW9ucy4nLCBmYWxzZSwgeyBpZDogJ2VtYmVyLXJlc29sdmVyLmNhbWVs
Y2FzZS1oZWxwZXItbmFtZXMnLCB1bnRpbDogJzMuMC4wJyB9KTsKKyAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgIH0pOworICAgIH0sCisKKyAgICAvLyB1c2VkIGJ5IEVtYmVyLkRlZmF1bHRS
ZXNvbHZlci5wcm90b3R5cGUuX2xvZ0xvb2t1cAorICAgIGxvb2t1cERlc2NyaXB0aW9uOiBmdW5j
dGlvbiBsb29rdXBEZXNjcmlwdGlvbihmdWxsTmFtZSkgeworICAgICAgdmFyIHBhcnNlZE5hbWUg
PSB0aGlzLnBhcnNlTmFtZShmdWxsTmFtZSk7CisKKyAgICAgIHZhciBtb2R1bGVOYW1lID0gdGhp
cy5maW5kTW9kdWxlTmFtZShwYXJzZWROYW1lLCB0cnVlKTsKKworICAgICAgcmV0dXJuIG1vZHVs
ZU5hbWU7CisgICAgfSwKKworICAgIC8vIG9ubHkgbmVlZGVkIHVudGlsIDEuNi4wLWJldGEuMiBj
YW4gYmUgcmVxdWlyZWQKKyAgICBfbG9nTG9va3VwOiBmdW5jdGlvbiBfbG9nTG9va3VwKGZvdW5k
LCBwYXJzZWROYW1lLCBkZXNjcmlwdGlvbikgeworICAgICAgaWYgKCFfZW1iZXJbJ2RlZmF1bHQn
XS5FTlYuTE9HX01PRFVMRV9SRVNPTFZFUiAmJiAhcGFyc2VkTmFtZS5yb290LkxPR19SRVNPTFZF
UikgeworICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICAgIHZhciBzeW1ib2wsIHBhZGRp
bmc7CisKKyAgICAgIGlmIChmb3VuZCkgeworICAgICAgICBzeW1ib2wgPSAnW+Kck10nOworICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgc3ltYm9sID0gJ1sgXSc7CisgICAgICB9CisKKyAgICAgIGlm
IChwYXJzZWROYW1lLmZ1bGxOYW1lLmxlbmd0aCA+IDYwKSB7CisgICAgICAgIHBhZGRpbmcgPSAn
Lic7CisgICAgICB9IGVsc2UgeworICAgICAgICBwYWRkaW5nID0gbmV3IEFycmF5KDYwIC0gcGFy
c2VkTmFtZS5mdWxsTmFtZS5sZW5ndGgpLmpvaW4oJy4nKTsKKyAgICAgIH0KKworICAgICAgaWYg
KCFkZXNjcmlwdGlvbikgeworICAgICAgICBkZXNjcmlwdGlvbiA9IHRoaXMubG9va3VwRGVzY3Jp
cHRpb24ocGFyc2VkTmFtZSk7CisgICAgICB9CisKKyAgICAgIF9lbWJlclsnZGVmYXVsdCddLkxv
Z2dlci5pbmZvKHN5bWJvbCwgcGFyc2VkTmFtZS5mdWxsTmFtZSwgcGFkZGluZywgZGVzY3JpcHRp
b24pOworICAgIH0sCisKKyAgICBrbm93bkZvclR5cGU6IGZ1bmN0aW9uIGtub3duRm9yVHlwZSh0
eXBlKSB7CisgICAgICB2YXIgbW9kdWxlS2V5cyA9IHRoaXMuX21vZHVsZVJlZ2lzdHJ5Lm1vZHVs
ZU5hbWVzKCk7CisKKyAgICAgIHZhciBpdGVtcyA9ICgwLCBfZW1iZXJSZXNvbHZlclV0aWxzTWFr
ZURpY3Rpb25hcnlbJ2RlZmF1bHQnXSkoKTsKKyAgICAgIGZvciAodmFyIGluZGV4ID0gMCwgbGVu
Z3RoID0gbW9kdWxlS2V5cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7CisgICAg
ICAgIHZhciBtb2R1bGVOYW1lID0gbW9kdWxlS2V5c1tpbmRleF07CisgICAgICAgIHZhciBmdWxs
bmFtZSA9IHRoaXMudHJhbnNsYXRlVG9Db250YWluZXJGdWxsbmFtZSh0eXBlLCBtb2R1bGVOYW1l
KTsKKworICAgICAgICBpZiAoZnVsbG5hbWUpIHsKKyAgICAgICAgICBpdGVtc1tmdWxsbmFtZV0g
PSB0cnVlOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHJldHVybiBpdGVtczsKKyAgICB9
LAorCisgICAgdHJhbnNsYXRlVG9Db250YWluZXJGdWxsbmFtZTogZnVuY3Rpb24gdHJhbnNsYXRl
VG9Db250YWluZXJGdWxsbmFtZSh0eXBlLCBtb2R1bGVOYW1lKSB7CisgICAgICB2YXIgcHJlZml4
ID0gdGhpcy5wcmVmaXgoeyB0eXBlOiB0eXBlIH0pOworCisgICAgICAvLyBOb3RlOiB1c2luZyBz
dHJpbmcgbWFuaXB1bGF0aW9uIGhlcmUgcmF0aGVyIHRoYW4gcmVnZXhlcyBmb3IgYmV0dGVyIHBl
cmZvcm1hbmNlLgorICAgICAgLy8gcG9kIG1vZHVsZXMKKyAgICAgIC8vICdeJyArIHByZWZpeCAr
ICcvKC4rKS8nICsgdHlwZSArICckJworICAgICAgdmFyIHBvZFByZWZpeCA9IHByZWZpeCArICcv
JzsKKyAgICAgIHZhciBwb2RTdWZmaXggPSAnLycgKyB0eXBlOworICAgICAgdmFyIHN0YXJ0ID0g
bW9kdWxlTmFtZS5pbmRleE9mKHBvZFByZWZpeCk7CisgICAgICB2YXIgZW5kID0gbW9kdWxlTmFt
ZS5pbmRleE9mKHBvZFN1ZmZpeCk7CisKKyAgICAgIGlmIChzdGFydCA9PT0gMCAmJiBlbmQgPT09
IG1vZHVsZU5hbWUubGVuZ3RoIC0gcG9kU3VmZml4Lmxlbmd0aCAmJiBtb2R1bGVOYW1lLmxlbmd0
aCA+IHBvZFByZWZpeC5sZW5ndGggKyBwb2RTdWZmaXgubGVuZ3RoKSB7CisgICAgICAgIHJldHVy
biB0eXBlICsgJzonICsgbW9kdWxlTmFtZS5zbGljZShzdGFydCArIHBvZFByZWZpeC5sZW5ndGgs
IGVuZCk7CisgICAgICB9CisKKyAgICAgIC8vIG5vbi1wb2QgbW9kdWxlcworICAgICAgLy8gJ14n
ICsgcHJlZml4ICsgJy8nICsgcGx1cmFsaXplZFR5cGUgKyAnLyguKykkJworICAgICAgdmFyIHBs
dXJhbGl6ZWRUeXBlID0gdGhpcy5wbHVyYWxpemUodHlwZSk7CisgICAgICB2YXIgbm9uUG9kUHJl
Zml4ID0gcHJlZml4ICsgJy8nICsgcGx1cmFsaXplZFR5cGUgKyAnLyc7CisKKyAgICAgIGlmICht
b2R1bGVOYW1lLmluZGV4T2Yobm9uUG9kUHJlZml4KSA9PT0gMCAmJiBtb2R1bGVOYW1lLmxlbmd0
aCA+IG5vblBvZFByZWZpeC5sZW5ndGgpIHsKKyAgICAgICAgcmV0dXJuIHR5cGUgKyAnOicgKyBt
b2R1bGVOYW1lLnNsaWNlKG5vblBvZFByZWZpeC5sZW5ndGgpOworICAgICAgfQorICAgIH0sCisK
KyAgICBfZXh0cmFjdERlZmF1bHRFeHBvcnQ6IGZ1bmN0aW9uIF9leHRyYWN0RGVmYXVsdEV4cG9y
dChub3JtYWxpemVkTW9kdWxlTmFtZSkgeworICAgICAgdmFyIG1vZHVsZSA9IHJlcXVpcmUobm9y
bWFsaXplZE1vZHVsZU5hbWUsIG51bGwsIG51bGwsIHRydWUgLyogZm9yY2Ugc3luYyAqLyk7CisK
KyAgICAgIGlmIChtb2R1bGUgJiYgbW9kdWxlWydkZWZhdWx0J10pIHsKKyAgICAgICAgbW9kdWxl
ID0gbW9kdWxlWydkZWZhdWx0J107CisgICAgICB9CisKKyAgICAgIHJldHVybiBtb2R1bGU7Cisg
ICAgfQorICB9KTsKKworICBSZXNvbHZlci5yZW9wZW5DbGFzcyh7CisgICAgbW9kdWxlQmFzZWRS
ZXNvbHZlcjogdHJ1ZQorICB9KTsKKworICBleHBvcnRzWydkZWZhdWx0J10gPSBSZXNvbHZlcjsK
K30pOworZGVmaW5lKCdlbWJlci1yZXNvbHZlci91dGlscy9jbGFzcy1mYWN0b3J5JywgWydleHBv
cnRzJ10sIGZ1bmN0aW9uIChleHBvcnRzKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICBleHBvcnRz
WydkZWZhdWx0J10gPSBjbGFzc0ZhY3Rvcnk7CisKKyAgZnVuY3Rpb24gY2xhc3NGYWN0b3J5KGts
YXNzKSB7CisgICAgcmV0dXJuIHsKKyAgICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKGluamVj
dGlvbnMpIHsKKyAgICAgICAgaWYgKHR5cGVvZiBrbGFzcy5leHRlbmQgPT09ICdmdW5jdGlvbicp
IHsKKyAgICAgICAgICByZXR1cm4ga2xhc3MuZXh0ZW5kKGluamVjdGlvbnMpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgIHJldHVybiBrbGFzczsKKyAgICAgICAgfQorICAgICAgfQorICAg
IH07CisgIH0KK30pOworZGVmaW5lKCJlbWJlci1yZXNvbHZlci91dGlscy9jcmVhdGUiLCBbImV4
cG9ydHMiLCAiZW1iZXIiXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlcikgeworICAidXNlIHN0
cmljdCI7CisKKyAgdmFyIGNyZWF0ZSA9IE9iamVjdC5jcmVhdGUgfHwgX2VtYmVyWyJkZWZhdWx0
Il0uY3JlYXRlOworICBpZiAoIShjcmVhdGUgJiYgIWNyZWF0ZShudWxsKS5oYXNPd25Qcm9wZXJ0
eSkpIHsKKyAgICB0aHJvdyBuZXcgRXJyb3IoIlRoaXMgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0
IE9iamVjdC5jcmVhdGUobnVsbCksIHBsZWFzZSBwb2x5ZmlsIHdpdGggZXM1LXNoYW06IGh0dHA6
Ly9naXQuaW8veUJVMnJnIik7CisgIH0KKworICBleHBvcnRzWyJkZWZhdWx0Il0gPSBjcmVhdGU7
Cit9KTsKK2RlZmluZSgnZW1iZXItcmVzb2x2ZXIvdXRpbHMvbWFrZS1kaWN0aW9uYXJ5JywgWydl
eHBvcnRzJywgJ2VtYmVyLXJlc29sdmVyL3V0aWxzL2NyZWF0ZSddLCBmdW5jdGlvbiAoZXhwb3J0
cywgX2VtYmVyUmVzb2x2ZXJVdGlsc0NyZWF0ZSkgeworICAndXNlIHN0cmljdCc7CisKKyAgZXhw
b3J0c1snZGVmYXVsdCddID0gbWFrZURpY3Rpb25hcnk7CisKKyAgZnVuY3Rpb24gbWFrZURpY3Rp
b25hcnkoKSB7CisgICAgdmFyIGNhY2hlID0gKDAsIF9lbWJlclJlc29sdmVyVXRpbHNDcmVhdGVb
J2RlZmF1bHQnXSkobnVsbCk7CisgICAgY2FjaGVbJ19kaWN0J10gPSBudWxsOworICAgIGRlbGV0
ZSBjYWNoZVsnX2RpY3QnXTsKKyAgICByZXR1cm4gY2FjaGU7CisgIH0KK30pOworZGVmaW5lKCdl
bWJlci1yZXNvbHZlci91dGlscy9tb2R1bGUtcmVnaXN0cnknLCBbJ2V4cG9ydHMnLCAnZW1iZXIn
XSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlcikgeworICAvKmdsb2JhbHMgcmVxdWlyZWpzLCBy
ZXF1aXJlICovCisKKyAgJ3VzZSBzdHJpY3QnOworCisgIGlmICh0eXBlb2YgcmVxdWlyZWpzLmVu
dHJpZXMgPT09ICd1bmRlZmluZWQnKSB7CisgICAgcmVxdWlyZWpzLmVudHJpZXMgPSByZXF1aXJl
anMuX2Vha19zZWVuOworICB9CisKKyAgZnVuY3Rpb24gTW9kdWxlUmVnaXN0cnkoZW50cmllcykg
eworICAgIHRoaXMuX2VudHJpZXMgPSBlbnRyaWVzIHx8IHJlcXVpcmVqcy5lbnRyaWVzOworICB9
CisKKyAgTW9kdWxlUmVnaXN0cnkucHJvdG90eXBlLm1vZHVsZU5hbWVzID0gZnVuY3Rpb24gTW9k
dWxlUmVnaXN0cnlfbW9kdWxlTmFtZXMoKSB7CisgICAgcmV0dXJuIChPYmplY3Qua2V5cyB8fCBf
ZW1iZXJbJ2RlZmF1bHQnXS5rZXlzKSh0aGlzLl9lbnRyaWVzKTsKKyAgfTsKKworICBNb2R1bGVS
ZWdpc3RyeS5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gTW9kdWxlUmVnaXN0cnlfaGFzKG1vZHVs
ZU5hbWUpIHsKKyAgICByZXR1cm4gbW9kdWxlTmFtZSBpbiB0aGlzLl9lbnRyaWVzOworICB9Owor
CisgIE1vZHVsZVJlZ2lzdHJ5LnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiBNb2R1bGVSZWdpc3Ry
eV9nZXQobW9kdWxlTmFtZSkgeworICAgIHZhciBleHBvcnROYW1lID0gYXJndW1lbnRzLmxlbmd0
aCA8PSAxIHx8IGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkID8gJ2RlZmF1bHQnIDogYXJndW1l
bnRzWzFdOworCisgICAgdmFyIG1vZHVsZSA9IHJlcXVpcmUobW9kdWxlTmFtZSk7CisgICAgcmV0
dXJuIG1vZHVsZSAmJiBtb2R1bGVbZXhwb3J0TmFtZV07CisgIH07CisKKyAgZXhwb3J0c1snZGVm
YXVsdCddID0gTW9kdWxlUmVnaXN0cnk7Cit9KTsKKzsvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICov
CisKKworCisvKiBqc2hpbnQgaWdub3JlOmVuZCAqLworLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmVu
ZG9yLm1hcApkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRl
cjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy1kZWJ1
Zy9jcm9zc2RvbWFpbi54bWwgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVy
Mi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzLWRlYnVn
L2Nyb3NzZG9tYWluLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYzE2YTdhMDdiMzdlNWQ1ZjdlMGU1NmM4Mjlm
NzIwMDY3NDU4NDAzCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9y
Zy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
ZW1iZXJqcy1kZWJ1Zy9jcm9zc2RvbWFpbi54bWwKQEAgLTAsMCArMSwxNSBAQAorPD94bWwgdmVy
c2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgY3Jvc3MtZG9tYWluLXBvbGljeSBTWVNURU0gImh0dHA6
Ly93d3cuYWRvYmUuY29tL3htbC9kdGRzL2Nyb3NzLWRvbWFpbi1wb2xpY3kuZHRkIj4KKzxjcm9z
cy1kb21haW4tcG9saWN5PgorICA8IS0tIFJlYWQgdGhpczogd3d3LmFkb2JlLmNvbS9kZXZuZXQv
YXJ0aWNsZXMvY3Jvc3Nkb21haW5fcG9saWN5X2ZpbGVfc3BlYy5odG1sIC0tPgorCisgIDwhLS0g
TW9zdCByZXN0cmljdGl2ZSBwb2xpY3k6IC0tPgorICA8c2l0ZS1jb250cm9sIHBlcm1pdHRlZC1j
cm9zcy1kb21haW4tcG9saWNpZXM9Im5vbmUiLz4KKworICA8IS0tIExlYXN0IHJlc3RyaWN0aXZl
IHBvbGljeTogLS0+CisgIDwhLS0KKyAgPHNpdGUtY29udHJvbCBwZXJtaXR0ZWQtY3Jvc3MtZG9t
YWluLXBvbGljaWVzPSJhbGwiLz4KKyAgPGFsbG93LWFjY2Vzcy1mcm9tIGRvbWFpbj0iKiIgdG8t
cG9ydHM9IioiIHNlY3VyZT0iZmFsc2UiLz4KKyAgPGFsbG93LWh0dHAtcmVxdWVzdC1oZWFkZXJz
LWZyb20gZG9tYWluPSIqIiBoZWFkZXJzPSIqIiBzZWN1cmU9ImZhbHNlIi8+CisgIC0tPgorPC9j
cm9zcy1kb21haW4tcG9saWN5PgpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9y
Zy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
ZW1iZXJqcy1kZWJ1Zy9pbmRleC5odG1sIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVl
ZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJq
cy1kZWJ1Zy9pbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVkMmExY2YyMzVjYzMyZjgxNTg2OTU1ZTg2
ODRjZjgxNmNmMjY0ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gu
b3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9lbWJlcmpzLWRlYnVnL2luZGV4Lmh0bWwKQEAgLTAsMCArMSwyNCBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICAgIDxt
ZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSI+CisgICAg
PHRpdGxlPlRvZG9tdmM8L3RpdGxlPgorICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250
ZW50PSIiPgorICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Ut
d2lkdGgsIGluaXRpYWwtc2NhbGU9MSI+CisgICAKKzxtZXRhIG5hbWU9InRvZG9tdmMvY29uZmln
L2Vudmlyb25tZW50IiBjb250ZW50PSIlN0IlMjJtb2R1bGVQcmVmaXglMjIlM0ElMjJ0b2RvbXZj
JTIyJTJDJTIyZW52aXJvbm1lbnQlMjIlM0ElMjJkZXZlbG9wbWVudCUyMiUyQyUyMmxvY2F0aW9u
VHlwZSUyMiUzQSUyMm5vbmUlMjIlMkMlMjJFbWJlckVOViUyMiUzQSU3QiUyMkZFQVRVUkVTJTIy
JTNBJTdCJTdEJTdEJTJDJTIyQVBQJTIyJTNBJTdCJTIybmFtZSUyMiUzQSUyMnRvZG9tdmMlMjIl
MkMlMjJ2ZXJzaW9uJTIyJTNBJTIyMC4wLjAlMjAyYzNmODE1OCUyMiU3RCUyQyUyMmV4cG9ydEFw
cGxpY2F0aW9uR2xvYmFsJTIyJTNBdHJ1ZSU3RCIgLz4KKworICAgIDxsaW5rIHJlbD0ic3R5bGVz
aGVldCIgaHJlZj0iYXNzZXRzL3ZlbmRvci5jc3MiPgorCisgICAgCisgIDwvaGVhZD4KKyAgPGJv
ZHk+CisgICAgCisKKyAgICA8c2NyaXB0IHNyYz0iYXNzZXRzL3ZlbmRvci5qcyI+PC9zY3JpcHQ+
CisgICAgPHNjcmlwdCBzcmM9ImFzc2V0cy90b2RvbXZjLmpzIj48L3NjcmlwdD4KKworICAgIAor
ICA8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0
IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9k
b212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy1kZWJ1Zy9yb2JvdHMudHh0IGIvV2Vi
c2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy1kZWJ1Zy9yb2JvdHMudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmY1OTE2NDUyZTVmZjZjOGI0M2Q2ZDdjNzNkMDAxNTNkMzRhYzM1ZGUKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90
b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzLWRlYnVnL3JvYm90cy50eHQKQEAg
LTAsMCArMSwzIEBACisjIGh0dHA6Ly93d3cucm9ib3RzdHh0Lm9yZworVXNlci1hZ2VudDogKgor
RGlzYWxsb3c6CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21l
dGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzLWRl
YnVnL3NvdXJjZS8uYm93ZXJyYyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0
ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMtZGVi
dWcvc291cmNlLy5ib3dlcnJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk1OWUxNjk2ZTdiMmM5NzAwMDVjMzVlYzhh
MGY5NGFlYTVkZjM2YWMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gu
b3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9lbWJlcmpzLWRlYnVnL3NvdXJjZS8uYm93ZXJyYwpAQCAtMCwwICsxLDQgQEAKK3sKKyAgImRp
cmVjdG9yeSI6ICJib3dlcl9jb21wb25lbnRzIiwKKyAgImFuYWx5dGljcyI6IGZhbHNlCit9CmRp
ZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzLWRlYnVnL3NvdXJjZS8u
ZW1iZXItY2xpIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy1kZWJ1Zy9zb3VyY2Uv
LmVtYmVyLWNsaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZTY0Y2ZlZDJhODkwNWRjMjM1MDZhZjEwNjBlYzgwY2Y4
ODc1ODJkCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVl
ZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJq
cy1kZWJ1Zy9zb3VyY2UvLmVtYmVyLWNsaQpAQCAtMCwwICsxLDkgQEAKK3sKKyAgLyoqCisgICAg
RW1iZXIgQ0xJIHNlbmRzIGFuYWx5dGljcyBpbmZvcm1hdGlvbiBieSBkZWZhdWx0LiBUaGUgZGF0
YSBpcyBjb21wbGV0ZWx5CisgICAgYW5vbnltb3VzLCBidXQgdGhlcmUgYXJlIHRpbWVzIHdoZW4g
eW91IG1pZ2h0IHdhbnQgdG8gZGlzYWJsZSB0aGlzIGJlaGF2aW9yLgorCisgICAgU2V0dGluZyBg
ZGlzYWJsZUFuYWx5dGljc2AgdG8gdHJ1ZSB3aWxsIHByZXZlbnQgYW55IGRhdGEgZnJvbSBiZWlu
ZyBzZW50LgorICAqLworICAiZGlzYWJsZUFuYWx5dGljcyI6IGZhbHNlCit9CmRpZmYgLS1naXQg
YS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2Rv
bXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzLWRlYnVnL3NvdXJjZS8uZ2l0aWdub3Jl
IGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9k
b212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy1kZWJ1Zy9zb3VyY2UvLmdpdGlnbm9y
ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5iZTA5ZTAzOGI3NWVjMmE3MjU4MDg5MzZhOGM2YjMyYzZhMmY2MzJiCi0t
LSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIu
MS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy1kZWJ1Zy9z
b3VyY2UvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDE3IEBACisjIFNlZSBodHRwOi8vaGVscC5naXRo
dWIuY29tL2lnbm9yZS1maWxlcy8gZm9yIG1vcmUgYWJvdXQgaWdub3JpbmcgZmlsZXMuCisKKyMg
Y29tcGlsZWQgb3V0cHV0CisjIC9kaXN0CisvdG1wCisKKyMgZGVwZW5kZW5jaWVzCisvbm9kZV9t
b2R1bGVzCisvYm93ZXJfY29tcG9uZW50cworCisjIG1pc2MKKy8uc2Fzcy1jYWNoZQorL2Nvbm5l
Y3QubG9jaworL2NvdmVyYWdlLyoKKy9saWJwZWVyY29ubmVjdGlvbi5sb2cKK25wbS1kZWJ1Zy5s
b2cKK3Rlc3RlbS5sb2cKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3Bl
ZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVy
anMtZGVidWcvc291cmNlLy5qc2hpbnRyYyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3Bl
ZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVy
anMtZGVidWcvc291cmNlLy5qc2hpbnRyYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wODA5NmVmZmFhYjM3NDk5NGFk
Y2IzNTc4ZTk4ODY3NWE0YmVmYTgyCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3Nl
cmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvZW1iZXJqcy1kZWJ1Zy9zb3VyY2UvLmpzaGludHJjCkBAIC0wLDAgKzEsMzIgQEAK
K3sKKyAgInByZWRlZiI6IFsKKyAgICAiZG9jdW1lbnQiLAorICAgICJ3aW5kb3ciLAorICAgICIt
UHJvbWlzZSIKKyAgXSwKKyAgImJyb3dzZXIiOiB0cnVlLAorICAiYm9zcyI6IHRydWUsCisgICJj
dXJseSI6IHRydWUsCisgICJkZWJ1ZyI6IGZhbHNlLAorICAiZGV2ZWwiOiB0cnVlLAorICAiZXFl
cWVxIjogdHJ1ZSwKKyAgImV2aWwiOiB0cnVlLAorICAiZm9yaW4iOiBmYWxzZSwKKyAgImltbWVk
IjogZmFsc2UsCisgICJsYXhicmVhayI6IGZhbHNlLAorICAibmV3Y2FwIjogdHJ1ZSwKKyAgIm5v
YXJnIjogdHJ1ZSwKKyAgIm5vZW1wdHkiOiBmYWxzZSwKKyAgIm5vbmV3IjogZmFsc2UsCisgICJu
b21lbiI6IGZhbHNlLAorICAib25ldmFyIjogZmFsc2UsCisgICJwbHVzcGx1cyI6IGZhbHNlLAor
ICAicmVnZXhwIjogZmFsc2UsCisgICJ1bmRlZiI6IHRydWUsCisgICJzdWIiOiB0cnVlLAorICAi
c3RyaWN0IjogZmFsc2UsCisgICJ3aGl0ZSI6IGZhbHNlLAorICAiZXFudWxsIjogdHJ1ZSwKKyAg
ImVzbmV4dCI6IHRydWUsCisgICJ1bnVzZWQiOiB0cnVlCit9CmRpZmYgLS1naXQgYS9XZWJzaXRl
cy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hp
dGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzLWRlYnVnL3NvdXJjZS8udHJhdmlzLnltbCBiL1dlYnNp
dGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMtZGVidWcvc291cmNlLy50cmF2aXMueW1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjY0NTMzYmVhODliY2MwZjAwOWFmMGNkMjNmZGUwZTRkMDZiOTQ5MWEKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzLWRlYnVnL3NvdXJjZS8u
dHJhdmlzLnltbApAQCAtMCwwICsxLDIyIEBACistLS0KK2xhbmd1YWdlOiBub2RlX2pzCitub2Rl
X2pzOgorICAtICI0IgorCitzdWRvOiBmYWxzZQorCitjYWNoZToKKyAgZGlyZWN0b3JpZXM6Cisg
ICAgLSBub2RlX21vZHVsZXMKKworYmVmb3JlX2luc3RhbGw6CisgIC0gbnBtIGNvbmZpZyBzZXQg
c3BpbiBmYWxzZQorICAtIG5wbSBpbnN0YWxsIC1nIGJvd2VyCisgIC0gbnBtIGluc3RhbGwgcGhh
bnRvbWpzLXByZWJ1aWx0CisKK2luc3RhbGw6CisgIC0gbnBtIGluc3RhbGwKKyAgLSBib3dlciBp
bnN0YWxsCisKK3NjcmlwdDoKKyAgLSBucG0gdGVzdApkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJv
d3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1
cmUtZXhhbXBsZXMvZW1iZXJqcy1kZWJ1Zy9zb3VyY2UvLndhdGNobWFuY29uZmlnIGIvV2Vic2l0
ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy1kZWJ1Zy9zb3VyY2UvLndhdGNobWFuY29uZmlnCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmU3ODM0ZTNlNGYzOWMxYTc0NTk0MmRmZTkwODkxNzA4NTkzZTBlYTYKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jl
c291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzLWRlYnVnL3NvdXJj
ZS8ud2F0Y2htYW5jb25maWcKQEAgLTAsMCArMSwzIEBACit7CisgICJpZ25vcmVfZGlycyI6IFsi
dG1wIiwgImRpc3QiXQorfQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9T
cGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1i
ZXJqcy1kZWJ1Zy9zb3VyY2UvUkVBRE1FLm1kIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9T
cGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1i
ZXJqcy1kZWJ1Zy9zb3VyY2UvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjViZDhhODNkYmUxNWMzNTg3
ODRiNWUxOWU4OGVhZWZmY2M2YTQzNjQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93
c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVy
ZS1leGFtcGxlcy9lbWJlcmpzLWRlYnVnL3NvdXJjZS9SRUFETUUubWQKQEAgLTAsMCArMSwxNSBA
QAorIyBFbWJlci5qcyBUb2RvTVZDIEV4YW1wbGUgdXNpbmcgRW1iZXIgQ0xJCisKKz4gQSBmcmFt
ZXdvcmsgZm9yIGNyZWF0aW5nIGFtYml0aW91cyB3ZWIgYXBwbGljYXRpb25zLgorCis+IF9bRW1i
ZXIuanMgLSBlbWJlcmpzLmNvbV0oaHR0cDovL2VtYmVyanMuY29tKV8KKz4gX1tFbWJlciBDTEkg
LSBlbWJlci1jbGkuY29tXShodHRwOi8vZW1iZXItY2xpLmNvbSlfCisKKyMjIE5vdGUgZm9yIHBl
b3BsZSB1cGRhdGluZyB0aGlzIGFwcC4KKworVGhlIGBpbmRleC5odG1sYCBhbmQgdGhlIGBhc3Nl
dHNgIGZvbGRlciBpbiB0aGUgcGFyZW50IGZvbGRlciBhcyBzaW1saW5rcyBpbnRvIHRoZSBpdGVt
cyB3aXRoIHRoZQorc2FtZSBuYW1lcyBpbnNpZGUgYGRpc3RgLiBUaGUgYGRpc3RgIGZvbGRlciBo
YXMgdG8gYmUgY2hlY2tlZCBpbiBnaXQgYW5kIGJ1aWx0IGZvciBwcm9kdWN0aW9uLgorCitUbyB3
b3JrIG9uIHRoaXMgY29tbWVudCBgPGJhc2UgaHJlZj0iL2V4YW1wbGVzL2VtYmVyLWNsaS9pbmRl
eC5odG1sIiAvPmAgaW4gdGhlIGBhcHAvaW5kZXguaHRtbGAKK2FuZCB1bmNvbW1lbnRlZCBpdCBi
YWNrIGJlZm9yZSBkb2luZyB0aGUgcHJvZHVjdGlvbiBidWlsZC4KKwpkaWZmIC0tZ2l0IGEvV2Vi
c2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy1kZWJ1Zy9zb3VyY2UvYXBwL2FwcC5qcyBiL1dl
YnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMtZGVidWcvc291cmNlL2FwcC9hcHAuanMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZjI2MGM0YzcwNmQwYWUzNzVjZmZjNjk2OWRmZTQzNGI1OWQyOTliNQotLS0gL2Rl
di9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVz
b3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMtZGVidWcvc291cmNl
L2FwcC9hcHAuanMKQEAgLTAsMCArMSwxOCBAQAoraW1wb3J0IEVtYmVyIGZyb20gJ2VtYmVyJzsK
K2ltcG9ydCBSZXNvbHZlciBmcm9tICcuL3Jlc29sdmVyJzsKK2ltcG9ydCBsb2FkSW5pdGlhbGl6
ZXJzIGZyb20gJ2VtYmVyLWxvYWQtaW5pdGlhbGl6ZXJzJzsKK2ltcG9ydCBjb25maWcgZnJvbSAn
Li9jb25maWcvZW52aXJvbm1lbnQnOworCitsZXQgQXBwOworCitFbWJlci5NT0RFTF9GQUNUT1JZ
X0lOSkVDVElPTlMgPSB0cnVlOworCitBcHAgPSBFbWJlci5BcHBsaWNhdGlvbi5leHRlbmQoewor
ICAgIG1vZHVsZVByZWZpeDogY29uZmlnLm1vZHVsZVByZWZpeCwKKyAgICBwb2RNb2R1bGVQcmVm
aXg6IGNvbmZpZy5wb2RNb2R1bGVQcmVmaXgsCisgICAgUmVzb2x2ZXIKK30pOworCitsb2FkSW5p
dGlhbGl6ZXJzKEFwcCwgY29uZmlnLm1vZHVsZVByZWZpeCk7CisKK2V4cG9ydCBkZWZhdWx0IEFw
cDsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEv
cmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMtZGVidWcvc291
cmNlL2FwcC9jb21wb25lbnRzL3RvZG8taXRlbS5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5v
cmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L2VtYmVyanMtZGVidWcvc291cmNlL2FwcC9jb21wb25lbnRzL3RvZG8taXRlbS5qcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4wZGU3ZmJmMTE2NWIyNjE0NTQxYTU2YTM5MGQxYzMzOGM0OThlMDkzCi0tLSAvZGV2L251
bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy1kZWJ1Zy9zb3VyY2UvYXBw
L2NvbXBvbmVudHMvdG9kby1pdGVtLmpzCkBAIC0wLDAgKzEsNDkgQEAKK2ltcG9ydCBFbWJlciBm
cm9tICdlbWJlcic7CisKK2V4cG9ydCBkZWZhdWx0IEVtYmVyLkNvbXBvbmVudC5leHRlbmQoewor
ICAgIHJlcG86IEVtYmVyLmluamVjdC5zZXJ2aWNlKCksCisgICAgdGFnTmFtZTogJ2xpJywKKyAg
ICBlZGl0aW5nOiBmYWxzZSwKKyAgICBjbGFzc05hbWVCaW5kaW5nczogWyd0b2RvLmNvbXBsZXRl
ZCcsICdlZGl0aW5nJ10sCisKKyAgICBhY3Rpb25zOiB7CisgICAgICAgIHN0YXJ0RWRpdGluZygp
IHsKKyAgICAgICAgICAgIHRoaXMuZ2V0KCdvblN0YXJ0RWRpdCcpKCk7CisgICAgICAgICAgICB0
aGlzLnNldCgnZWRpdGluZycsIHRydWUpOworICAgICAgICAgICAgRW1iZXIucnVuLnNjaGVkdWxl
T25jZSgnYWZ0ZXJSZW5kZXInLCB0aGlzLCAnZm9jdXNJbnB1dCcpOworICAgICAgICB9LAorCisg
ICAgICAgIGRvbmVFZGl0aW5nKHRvZG9UaXRsZSkgeworICAgICAgICAgICAgaWYgKCF0aGlzLmdl
dCgnZWRpdGluZycpKSB7IHJldHVybjsgfQorICAgICAgICAgICAgaWYgKEVtYmVyLmlzQmxhbmso
dG9kb1RpdGxlKSkgeworICAgICAgICAgICAgICAgIHRoaXMuc2VuZCgncmVtb3ZlVG9kbycpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLnNldCgndG9kby50aXRs
ZScsIHRvZG9UaXRsZS50cmltKCkpOworICAgICAgICAgICAgICAgIHRoaXMuc2V0KCdlZGl0aW5n
JywgZmFsc2UpOworICAgICAgICAgICAgICAgIHRoaXMuZ2V0KCdvbkVuZEVkaXQnKSgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9LAorCisgICAgICAgIGhhbmRsZUtleWRvd24oZSkgeworICAg
ICAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMTMpIHsKKyAgICAgICAgICAgICAgICBlLnRhcmdl
dC5ibHVyKCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGUua2V5Q29kZSA9PT0gMjcpIHsKKyAg
ICAgICAgICAgICAgICB0aGlzLnNldCgnZWRpdGluZycsIGZhbHNlKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSwKKworICAgICAgICB0b2dnbGVDb21wbGV0ZWQoZSkgeworICAgICAgICAgICAg
bGV0IHRvZG8gPSB0aGlzLmdldCgndG9kbycpOworICAgICAgICAgICAgRW1iZXIuc2V0KHRvZG8s
ICdjb21wbGV0ZWQnLCBlLnRhcmdldC5jaGVja2VkKTsKKyAgICAgICAgICAgIHRoaXMuZ2V0KCdy
ZXBvJykucGVyc2lzdCgpOworICAgICAgICB9LAorCisgICAgICAgIHJlbW92ZVRvZG8oKSB7Cisg
ICAgICAgICAgICB0aGlzLmdldCgncmVwbycpLmRlbGV0ZSh0aGlzLmdldCgndG9kbycpKTsKKyAg
ICAgICAgfQorICAgIH0sCisKKyAgICBmb2N1c0lucHV0KCkgeworICAgICAgICB0aGlzLmVsZW1l
bnQucXVlcnlTZWxlY3RvcignaW5wdXQuZWRpdCcpLmZvY3VzKCk7CisgICAgfQorfSk7CmRpZmYg
LS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzLWRlYnVnL3NvdXJjZS9hcHAv
Y29tcG9uZW50cy90b2RvLWxpc3QuanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVk
b21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpz
LWRlYnVnL3NvdXJjZS9hcHAvY29tcG9uZW50cy90b2RvLWxpc3QuanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDg0
ZTBlM2ExZmUyOTdmZjVkOGFkYjE0MTYzMmNhZTk0MjY4ZDJhOQotLS0gL2Rldi9udWxsCisrKyBi
L1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9t
dmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMtZGVidWcvc291cmNlL2FwcC9jb21wb25l
bnRzL3RvZG8tbGlzdC5qcwpAQCAtMCwwICsxLDI3IEBACitpbXBvcnQgRW1iZXIgZnJvbSAnZW1i
ZXInOworCitleHBvcnQgZGVmYXVsdCBFbWJlci5Db21wb25lbnQuZXh0ZW5kKHsKKyAgICByZXBv
OiBFbWJlci5pbmplY3Quc2VydmljZSgpLAorICAgIHRhZ05hbWU6ICdzZWN0aW9uJywKKyAgICBl
bGVtZW50SWQ6ICdtYWluJywKKyAgICBjYW5Ub2dnbGU6IHRydWUsCisgICAgYWxsQ29tcGxldGVk
OiBFbWJlci5jb21wdXRlZCgndG9kb3MuQGVhY2guY29tcGxldGVkJywgZnVuY3Rpb24gKCkgewor
ICAgICAgICByZXR1cm4gdGhpcy5nZXQoJ3RvZG9zJykuaXNFdmVyeSgnY29tcGxldGVkJyk7Cisg
ICAgfSksCisKKyAgICBhY3Rpb25zOiB7CisgICAgICAgIGVuYWJsZVRvZ2dsZSgpIHsKKyAgICAg
ICAgICAgIHRoaXMuc2V0KCdjYW5Ub2dnbGUnLCB0cnVlKTsKKyAgICAgICAgfSwKKworICAgICAg
ICBkaXNhYmxlVG9nZ2xlKCkgeworICAgICAgICAgICAgdGhpcy5zZXQoJ2NhblRvZ2dsZScsIGZh
bHNlKTsKKyAgICAgICAgfSwKKworICAgICAgICB0b2dnbGVBbGwoKSB7CisgICAgICAgICAgICBs
ZXQgYWxsQ29tcGxldGVkID0gdGhpcy5nZXQoJ2FsbENvbXBsZXRlZCcpOworICAgICAgICAgICAg
dGhpcy5nZXQoJ3RvZG9zJykuZm9yRWFjaCh0b2RvID0+IEVtYmVyLnNldCh0b2RvLCAnY29tcGxl
dGVkJywgIWFsbENvbXBsZXRlZCkpOworICAgICAgICAgICAgdGhpcy5nZXQoJ3JlcG8nKS5wZXJz
aXN0KCk7CisgICAgICAgIH0KKyAgICB9Cit9KTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dz
ZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL2VtYmVyanMtZGVidWcvc291cmNlL2FwcC9jb250cm9sbGVycy9hY3RpdmUuanMg
Yi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2Rv
bXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzLWRlYnVnL3NvdXJjZS9hcHAvY29udHJv
bGxlcnMvYWN0aXZlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRmMDNkNDA3OTAzODg5YTE0MTM3NzFhMzFkZmMx
NGJhNDg5MzViMjUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3Jn
L1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9l
bWJlcmpzLWRlYnVnL3NvdXJjZS9hcHAvY29udHJvbGxlcnMvYWN0aXZlLmpzCkBAIC0wLDAgKzEs
NSBAQAoraW1wb3J0IEVtYmVyIGZyb20gJ2VtYmVyJzsKKworZXhwb3J0IGRlZmF1bHQgRW1iZXIu
Q29udHJvbGxlci5leHRlbmQoeworICAgIHRvZG9zOiBFbWJlci5jb21wdXRlZC5maWx0ZXJCeSgn
bW9kZWwnLCAnY29tcGxldGVkJywgZmFsc2UpCit9KTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jy
b3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL2VtYmVyanMtZGVidWcvc291cmNlL2FwcC9jb250cm9sbGVycy9hcHBsaWNh
dGlvbi5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMtZGVidWcvc291cmNlL2Fw
cC9jb250cm9sbGVycy9hcHBsaWNhdGlvbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jODE0ZTVmYTczY2Q5ZTgx
YzYzNTdmZDcxMWU1ZTY4N2MwOWJjYWZmCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJv
d3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1
cmUtZXhhbXBsZXMvZW1iZXJqcy1kZWJ1Zy9zb3VyY2UvYXBwL2NvbnRyb2xsZXJzL2FwcGxpY2F0
aW9uLmpzCkBAIC0wLDAgKzEsMjAgQEAKK2ltcG9ydCBFbWJlciBmcm9tICdlbWJlcic7CisKK2V4
cG9ydCBkZWZhdWx0IEVtYmVyLkNvbnRyb2xsZXIuZXh0ZW5kKHsKKyAgICByZXBvOiBFbWJlci5p
bmplY3Quc2VydmljZSgpLAorICAgIHJlbWFpbmluZzogRW1iZXIuY29tcHV0ZWQuZmlsdGVyQnko
J21vZGVsJywgJ2NvbXBsZXRlZCcsIGZhbHNlKSwKKyAgICBjb21wbGV0ZWQ6IEVtYmVyLmNvbXB1
dGVkLmZpbHRlckJ5KCdtb2RlbCcsICdjb21wbGV0ZWQnKSwKKyAgICBhY3Rpb25zOiB7CisgICAg
ICAgIGNyZWF0ZVRvZG8oZSkgeworICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMTMgJiYg
IUVtYmVyLmlzQmxhbmsoZS50YXJnZXQudmFsdWUpKSB7CisgICAgICAgICAgICAgICAgdGhpcy5n
ZXQoJ3JlcG8nKS5hZGQoeyB0aXRsZTogZS50YXJnZXQudmFsdWUudHJpbSgpLCBjb21wbGV0ZWQ6
IGZhbHNlIH0pOworICAgICAgICAgICAgICAgIGUudGFyZ2V0LnZhbHVlID0gJyc7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0sCisKKyAgICAgICAgY2xlYXJDb21wbGV0ZWQoKSB7CisgICAgICAg
ICAgICB0aGlzLmdldCgnbW9kZWwnKS5yZW1vdmVPYmplY3RzKHRoaXMuZ2V0KCdjb21wbGV0ZWQn
KSk7CisgICAgICAgICAgICB0aGlzLmdldCgncmVwbycpLnBlcnNpc3QoKTsKKyAgICAgICAgfQor
ICAgIH0KK30pOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9t
ZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy1k
ZWJ1Zy9zb3VyY2UvYXBwL2NvbnRyb2xsZXJzL2NvbXBsZXRlZC5qcyBiL1dlYnNpdGVzL2Jyb3dz
ZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL2VtYmVyanMtZGVidWcvc291cmNlL2FwcC9jb250cm9sbGVycy9jb21wbGV0ZWQu
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNjM0ZDAwYWZlZjc4MDlhNzNkNDE5MTUxYjhmMDJlYzVlMDU2N2Y1Ygot
LS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIy
LjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMtZGVidWcv
c291cmNlL2FwcC9jb250cm9sbGVycy9jb21wbGV0ZWQuanMKQEAgLTAsMCArMSw1IEBACitpbXBv
cnQgRW1iZXIgZnJvbSAnZW1iZXInOworCitleHBvcnQgZGVmYXVsdCBFbWJlci5Db250cm9sbGVy
LmV4dGVuZCh7CisgICAgdG9kb3M6IEVtYmVyLmNvbXB1dGVkLmZpbHRlckJ5KCdtb2RlbCcsICdj
b21wbGV0ZWQnLCB0cnVlKQorfSk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gu
b3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9lbWJlcmpzLWRlYnVnL3NvdXJjZS9hcHAvaGVscGVycy9ndC5qcyBiL1dlYnNpdGVzL2Jyb3dz
ZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL2VtYmVyanMtZGVidWcvc291cmNlL2FwcC9oZWxwZXJzL2d0LmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmYzNzA2OTVhMmY5NDU2NTlkOWY1ODQ3ZGIxMzc2NGVhZjY2MTEwZWIKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzLWRlYnVnL3NvdXJjZS9hcHAv
aGVscGVycy9ndC5qcwpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCBFbWJlciBmcm9tICdlbWJlcic7
CisKK2V4cG9ydCBmdW5jdGlvbiBndChbbjEsIG4yXS8qLCBoYXNoKi8pIHsKKyAgICByZXR1cm4g
bjEgPiBuMjsKK30KKworZXhwb3J0IGRlZmF1bHQgRW1iZXIuSGVscGVyLmhlbHBlcihndCk7CmRp
ZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzLWRlYnVnL3NvdXJjZS9h
cHAvaGVscGVycy9wbHVyYWxpemUuanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVk
b21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpz
LWRlYnVnL3NvdXJjZS9hcHAvaGVscGVycy9wbHVyYWxpemUuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjFmMWEy
YWNjOGY4NTYxNzgwZDBiOTVkZmY3M2NhOTYzM2I2ODlhNQotLS0gL2Rldi9udWxsCisrKyBiL1dl
YnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMtZGVidWcvc291cmNlL2FwcC9oZWxwZXJzL3Bs
dXJhbGl6ZS5qcwpAQCAtMCwwICsxLDggQEAKK2ltcG9ydCBFbWJlciBmcm9tICdlbWJlcic7Citp
bXBvcnQgeyBwbHVyYWxpemUgfSBmcm9tICdlbWJlci1pbmZsZWN0b3InOworCitleHBvcnQgZnVu
Y3Rpb24gcGx1cmFsaXplSGVscGVyKFtzaW5ndWxhciwgY291bnRdLyosIGhhc2gqLykgeworICAg
IHJldHVybiBjb3VudCA9PT0gMSA/IHNpbmd1bGFyIDogcGx1cmFsaXplKHNpbmd1bGFyKTsKK30K
KworZXhwb3J0IGRlZmF1bHQgRW1iZXIuSGVscGVyLmhlbHBlcihwbHVyYWxpemVIZWxwZXIpOwpk
aWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy1kZWJ1Zy9zb3VyY2Uv
YXBwL2luZGV4Lmh0bWwgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4x
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzLWRlYnVnL3Nv
dXJjZS9hcHAvaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMTczMGZiYjY3Zjg5ZGEyYTU3OGM0ZjFm
MTU4ZmQ0MWQ0ZmFiM2M1Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNo
Lm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvZW1iZXJqcy1kZWJ1Zy9zb3VyY2UvYXBwL2luZGV4Lmh0bWwKQEAgLTAsMCArMSwyNCBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNldD0idXRm
LTgiPgorICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9
ZWRnZSI+CisgICAgPHRpdGxlPlRvZG9tdmM8L3RpdGxlPgorICAgIDxtZXRhIG5hbWU9ImRlc2Ny
aXB0aW9uIiBjb250ZW50PSIiPgorICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3
aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSI+CisgICAge3tjb250ZW50LWZvciAi
aGVhZCJ9fQorCisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJhc3NldHMvdmVuZG9y
LmNzcyI+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJhc3NldHMvdG9kb212Yy5j
c3MiPgorCisgICAge3tjb250ZW50LWZvciAiaGVhZC1mb290ZXIifX0KKyAgPC9oZWFkPgorICA8
Ym9keT4KKyAgICB7e2NvbnRlbnQtZm9yICJib2R5In19CisKKyAgICA8c2NyaXB0IHNyYz0iYXNz
ZXRzL3ZlbmRvci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9ImFzc2V0cy90b2RvbXZj
LmpzIj48L3NjcmlwdD4KKworICAgIHt7Y29udGVudC1mb3IgImJvZHktZm9vdGVyIn19CisgIDwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3Bl
ZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVy
anMtZGVidWcvc291cmNlL2FwcC9pbnN0YW5jZS1pbml0aWFsaXplcnMvZ2xvYmFsLmpzIGIvV2Vi
c2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy1kZWJ1Zy9zb3VyY2UvYXBwL2luc3RhbmNlLWlu
aXRpYWxpemVycy9nbG9iYWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzRjOWE5ZGFkZTdiMTAzNTkxYjU4ZmQ2
YzQ2MGE4ODZjOTcyYTEyNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5j
aC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL2VtYmVyanMtZGVidWcvc291cmNlL2FwcC9pbnN0YW5jZS1pbml0aWFsaXplcnMvZ2xvYmFs
LmpzCkBAIC0wLDAgKzEsMTAgQEAKKy8vIGFwcC9pbnN0YW5jZS1pbml0aWFsaXplcnMvZ2xvYmFs
LmpzCisKK2V4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplKGFwcGxpY2F0aW9uKSB7CisgIHdpbmRv
dy5BcHAgPSBhcHBsaWNhdGlvbjsgIC8vIG9yIHdpbmRvdy5XaGF0ZXZlcgorfQorCitleHBvcnQg
ZGVmYXVsdCB7CisgIG5hbWU6ICdnbG9iYWwnLAorICBpbml0aWFsaXplOiBpbml0aWFsaXplCit9
OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dz
ZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL2VtYmVyanMtZGVidWcvc291cmNlL2FwcC9yZXNvbHZlci5qcyBiL1dlYnNpdGVz
L2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMtZGVidWcvc291cmNlL2FwcC9yZXNvbHZlci5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yZmI1NjNkNmMwNDg4ZjQxYmVjNDU0ZmUxZmE3YzIyOTk3NWE1OGRmCi0tLSAvZGV2
L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy1kZWJ1Zy9zb3VyY2Uv
YXBwL3Jlc29sdmVyLmpzCkBAIC0wLDAgKzEsMyBAQAoraW1wb3J0IFJlc29sdmVyIGZyb20gJ2Vt
YmVyLXJlc29sdmVyJzsKKworZXhwb3J0IGRlZmF1bHQgUmVzb2x2ZXI7CmRpZmYgLS1naXQgYS9X
ZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZj
L2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzLWRlYnVnL3NvdXJjZS9hcHAvcm91dGVyLmpz
IGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9k
b212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy1kZWJ1Zy9zb3VyY2UvYXBwL3JvdXRl
ci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi40YzYwYmY5M2ZjODdiNjdmNjAyM2ZkYzk0Mzk2YzQxNDdiNWEzZDZj
Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRl
cjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy1kZWJ1
Zy9zb3VyY2UvYXBwL3JvdXRlci5qcwpAQCAtMCwwICsxLDEzIEBACitpbXBvcnQgRW1iZXIgZnJv
bSAnZW1iZXInOworaW1wb3J0IGNvbmZpZyBmcm9tICcuL2NvbmZpZy9lbnZpcm9ubWVudCc7CisK
K2NvbnN0IFJvdXRlciA9IEVtYmVyLlJvdXRlci5leHRlbmQoeworICAgIGxvY2F0aW9uOiBjb25m
aWcubG9jYXRpb25UeXBlCit9KTsKKworUm91dGVyLm1hcChmdW5jdGlvbiAoKSB7CisgICAgdGhp
cy5yb3V0ZSgnYWN0aXZlJyk7CisgICAgdGhpcy5yb3V0ZSgnY29tcGxldGVkJyk7Cit9KTsKKwor
ZXhwb3J0IGRlZmF1bHQgUm91dGVyOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNo
Lm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvZW1iZXJqcy1kZWJ1Zy9zb3VyY2UvYXBwL3JvdXRlcy9hcHBsaWNhdGlvbi5qcyBiL1dlYnNp
dGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMtZGVidWcvc291cmNlL2FwcC9yb3V0ZXMvYXBwbGlj
YXRpb24uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMjk2YTM3NWJhMmE2NTBjYmExMTk2OTc5NTE3ODQ3ZjllZjY3
ZjgxMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRv
bWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMt
ZGVidWcvc291cmNlL2FwcC9yb3V0ZXMvYXBwbGljYXRpb24uanMKQEAgLTAsMCArMSw4IEBACitp
bXBvcnQgRW1iZXIgZnJvbSAnZW1iZXInOworCitleHBvcnQgZGVmYXVsdCBFbWJlci5Sb3V0ZS5l
eHRlbmQoeworICAgIHJlcG86IEVtYmVyLmluamVjdC5zZXJ2aWNlKCksCisgICAgbW9kZWwoKSB7
CisgICAgICAgIHJldHVybiB0aGlzLmdldCgncmVwbycpLmZpbmRBbGwoKTsKKyAgICB9Cit9KTsK
ZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVz
b3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMtZGVidWcvc291cmNl
L2FwcC9zZXJ2aWNlcy9tZW1vcnkuanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVk
b21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpz
LWRlYnVnL3NvdXJjZS9hcHAvc2VydmljZXMvbWVtb3J5LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc0YzVjZGYx
OWZkOWZkYjI2YTkwZjA5YTMwMWQ0M2RiZDM1MjdkNjEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJz
aXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzLWRlYnVnL3NvdXJjZS9hcHAvc2VydmljZXMvbWVt
b3J5LmpzCkBAIC0wLDAgKzEsNzggQEAKKyhmdW5jdGlvbihyb290KSB7CisgIHZhciBsb2NhbFN0
b3JhZ2VNZW1vcnkgPSB7fTsKKyAgdmFyIGNhY2hlID0ge307CisKKyAgLyoqCisgICAqIG51bWJl
ciBvZiBzdG9yZWQgaXRlbXMuCisgICAqLworICBsb2NhbFN0b3JhZ2VNZW1vcnkubGVuZ3RoID0g
MDsKKworICAvKioKKyAgICogcmV0dXJucyBpdGVtIGZvciBwYXNzZWQga2V5LCBvciBudWxsCisg
ICAqCisgICAqIEBwYXJhIHtTdHJpbmd9IGtleQorICAgKiAgICAgICBuYW1lIG9mIGl0ZW0gdG8g
YmUgcmV0dXJuZWQKKyAgICogQHJldHVybnMge1N0cmluZ3xudWxsfQorICAgKi8KKyAgbG9jYWxT
dG9yYWdlTWVtb3J5LmdldEl0ZW0gPSBmdW5jdGlvbihrZXkpIHsKKyAgICByZXR1cm4gY2FjaGVb
a2V5XSB8fCBudWxsOworICB9OworCisgIC8qKgorICAgKiBzZXRzIGl0ZW0gZm9yIGtleSB0byBw
YXNzZWQgdmFsdWUsIGFzIFN0cmluZworICAgKgorICAgKiBAcGFyYSB7U3RyaW5nfSBrZXkKKyAg
ICogICAgICAgbmFtZSBvZiBpdGVtIHRvIGJlIHNldAorICAgKiBAcGFyYSB7U3RyaW5nfSB2YWx1
ZQorICAgKiAgICAgICB2YWx1ZSwgd2lsbCBhbHdheXMgYmUgdHVybmVkIGludG8gYSBTdHJpbmcK
KyAgICogQHJldHVybnMge3VuZGVmaW5lZH0KKyAgICovCisgIGxvY2FsU3RvcmFnZU1lbW9yeS5z
ZXRJdGVtID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSkgeworICAgIGlmICh0eXBlb2YgdmFsdWUgPT09
ICd1bmRlZmluZWQnKSB7CisgICAgICBsb2NhbFN0b3JhZ2VNZW1vcnkucmVtb3ZlSXRlbShrZXkp
OworICAgIH0gZWxzZSB7CisgICAgICBpZiAoIShjYWNoZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSkg
eworICAgICAgICBsb2NhbFN0b3JhZ2VNZW1vcnkubGVuZ3RoKys7CisgICAgICB9CisKKyAgICAg
IGNhY2hlW2tleV0gPSAnJyArIHZhbHVlOworICAgIH0KKyAgfTsKKworICAvKioKKyAgICogcmVt
b3ZlcyBpdGVtIGZvciBwYXNzZWQga2V5CisgICAqCisgICAqIEBwYXJhIHtTdHJpbmd9IGtleQor
ICAgKiAgICAgICBuYW1lIG9mIGl0ZW0gdG8gYmUgcmVtb3ZlZAorICAgKiBAcmV0dXJucyB7dW5k
ZWZpbmVkfQorICAgKi8KKyAgbG9jYWxTdG9yYWdlTWVtb3J5LnJlbW92ZUl0ZW0gPSBmdW5jdGlv
bihrZXkpIHsKKyAgICBpZiAoY2FjaGUuaGFzT3duUHJvcGVydHkoa2V5KSkgeworICAgICAgZGVs
ZXRlIGNhY2hlW2tleV07CisgICAgICBsb2NhbFN0b3JhZ2VNZW1vcnkubGVuZ3RoLS07CisgICAg
fQorICB9OworCisgIC8qKgorICAgKiByZXR1cm5zIG5hbWUgb2Yga2V5IGF0IHBhc3NlZCBpbmRl
eAorICAgKgorICAgKiBAcGFyYSB7TnVtYmVyfSBpbmRleAorICAgKiAgICAgICBQb3NpdGlvbiBm
b3Iga2V5IHRvIGJlIHJldHVybmVkIChzdGFydHMgYXQgMCkKKyAgICogQHJldHVybnMge1N0cmlu
Z3xudWxsfQorICAgKi8KKyAgbG9jYWxTdG9yYWdlTWVtb3J5LmtleSA9IGZ1bmN0aW9uKGluZGV4
KSB7CisgICAgcmV0dXJuIE9iamVjdC5rZXlzKGNhY2hlKVtpbmRleF0gfHwgbnVsbDsKKyAgfTsK
KworICAvKioKKyAgICogcmVtb3ZlcyBhbGwgc3RvcmVkIGl0ZW1zIGFuZCBzZXRzIGxlbmd0aCB0
byAwCisgICAqCisgICAqIEByZXR1cm5zIHt1bmRlZmluZWR9CisgICAqLworICBsb2NhbFN0b3Jh
Z2VNZW1vcnkuY2xlYXIgPSBmdW5jdGlvbigpIHsKKyAgICBjYWNoZSA9IHt9OworICAgIGxvY2Fs
U3RvcmFnZU1lbW9yeS5sZW5ndGggPSAwOworICB9OworCisgICAgcm9vdC5sb2NhbFN0b3JhZ2VN
ZW1vcnkgPSBsb2NhbFN0b3JhZ2VNZW1vcnk7Cit9KSh3aW5kb3cpOwpkaWZmIC0tZ2l0IGEvV2Vi
c2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy1kZWJ1Zy9zb3VyY2UvYXBwL3NlcnZpY2VzL3Jl
cG8uanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzLWRlYnVnL3NvdXJjZS9hcHAv
c2VydmljZXMvcmVwby5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZmZhMzg1OGZkNzdiYmJhNWM0MzVlYTVjOWM4
ODk4YWQxNzczYjhhCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9y
Zy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
ZW1iZXJqcy1kZWJ1Zy9zb3VyY2UvYXBwL3NlcnZpY2VzL3JlcG8uanMKQEAgLTAsMCArMSwyNyBA
QAoraW1wb3J0IEVtYmVyIGZyb20gJ2VtYmVyJzsKK2ltcG9ydCBsb2NhbFN0b3JhZ2VNZW1vcnkg
ZnJvbSAnLi9tZW1vcnknOworCitleHBvcnQgZGVmYXVsdCBFbWJlci5TZXJ2aWNlLmV4dGVuZCh7
CisgICAgbGFzdElkOiAwLAorICAgIGRhdGE6IG51bGwsCisgICAgZmluZEFsbCgpIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuZ2V0KCdkYXRhJykgfHwKKyAgICAgICAgICAgIHRoaXMuc2V0KCdkYXRh
JywgSlNPTi5wYXJzZSh3aW5kb3cubG9jYWxTdG9yYWdlTWVtb3J5LmdldEl0ZW0oJ3RvZG9zJykg
fHwgJ1tdJykpOworICAgIH0sCisKKyAgICBhZGQoYXR0cnMpIHsKKyAgICAgICAgbGV0IHRvZG8g
PSBPYmplY3QuYXNzaWduKHsgaWQ6IHRoaXMuaW5jcmVtZW50UHJvcGVydHkoJ2xhc3RJZCcpIH0s
IGF0dHJzKTsKKyAgICAgICAgdGhpcy5nZXQoJ2RhdGEnKS5wdXNoT2JqZWN0KHRvZG8pOworICAg
ICAgICB0aGlzLnBlcnNpc3QoKTsKKyAgICAgICAgcmV0dXJuIHRvZG87CisgICAgfSwKKworICAg
IGRlbGV0ZSh0b2RvKSB7CisgICAgICAgIHRoaXMuZ2V0KCdkYXRhJykucmVtb3ZlT2JqZWN0KHRv
ZG8pOworICAgICAgICB0aGlzLnBlcnNpc3QoKTsKKyAgICB9LAorCisgICAgcGVyc2lzdCgpIHsK
KyAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZU1lbW9yeS5zZXRJdGVtKCd0b2RvcycsIEpTT04u
c3RyaW5naWZ5KHRoaXMuZ2V0KCdkYXRhJykpKTsKKyAgICB9Cit9KTsKZGlmZiAtLWdpdCBhL1dl
YnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMtZGVidWcvc291cmNlL2FwcC90ZW1wbGF0ZXMv
YWN0aXZlLmhicyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVz
b3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMtZGVidWcvc291cmNl
L2FwcC90ZW1wbGF0ZXMvYWN0aXZlLmhicwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZTI0NGY0ODdkMjM4MzQ0OGE0
MmE1OWRmMGJmNDI1NjRlMjFmNTczCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3Nl
cmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvZW1iZXJqcy1kZWJ1Zy9zb3VyY2UvYXBwL3RlbXBsYXRlcy9hY3RpdmUuaGJzCkBA
IC0wLDAgKzEgQEAKK3t7dG9kby1saXN0IHRvZG9zPXRvZG9zfX0KXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21l
dGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzLWRl
YnVnL3NvdXJjZS9hcHAvdGVtcGxhdGVzL2FwcGxpY2F0aW9uLmhicyBiL1dlYnNpdGVzL2Jyb3dz
ZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL2VtYmVyanMtZGVidWcvc291cmNlL2FwcC90ZW1wbGF0ZXMvYXBwbGljYXRpb24u
aGJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjUxOWI2MjBjZDYzMDE4ZjY3M2VhYTlhN2I5MDhkNTg5OGE5MjE1OGYK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVy
Mi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzLWRlYnVn
L3NvdXJjZS9hcHAvdGVtcGxhdGVzL2FwcGxpY2F0aW9uLmhicwpAQCAtMCwwICsxLDI5IEBACis8
c2VjdGlvbiBpZD0idG9kb2FwcCI+CisgIDxoZWFkZXIgaWQ9ImhlYWRlciI+CisgICAgPGgxPnRv
ZG9zPC9oMT4KKyAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9Im5ldy10b2RvIiBvbmtleWRvd249
e3thY3Rpb24gJ2NyZWF0ZVRvZG8nfX0gcGxhY2Vob2xkZXI9IldoYXQgbmVlZHMgdG8gYmUgZG9u
ZT8iIGF1dG9mb2N1cz4KKyAgPC9oZWFkZXI+CisgICAge3tvdXRsZXR9fQorICAgIHt7I2lmIChn
dCBtb2RlbC5sZW5ndGggMCl9fQorICAgICAgPGZvb3RlciBpZD0iZm9vdGVyIj4KKyAgICAgICAg
PHNwYW4gaWQ9InRvZG8tY291bnQiPjxzdHJvbmc+e3tyZW1haW5pbmcubGVuZ3RofX08L3N0cm9u
Zz4ge3twbHVyYWxpemUgJ2l0ZW0nIHJlbWFpbmluZy5sZW5ndGh9fSBsZWZ0PC9zcGFuPgorICAg
ICAgICA8dWwgaWQ9ImZpbHRlcnMiPgorICAgICAgICAgIDxsaT57eyNsaW5rLXRvICJpbmRleCIg
YWN0aXZlQ2xhc3M9InNlbGVjdGVkIn19QWxse3svbGluay10b319PC9saT4KKyAgICAgICAgICA8
bGk+e3sjbGluay10byAiYWN0aXZlIiBhY3RpdmVDbGFzcz0ic2VsZWN0ZWQifX1BY3RpdmV7ey9s
aW5rLXRvfX08L2xpPgorICAgICAgICAgIDxsaT57eyNsaW5rLXRvICJjb21wbGV0ZWQiIGFjdGl2
ZUNsYXNzPSJzZWxlY3RlZCJ9fUNvbXBsZXRlZHt7L2xpbmstdG99fTwvbGk+CisgICAgICAgIDwv
dWw+CisgICAgICAgIHt7I2lmIGNvbXBsZXRlZC5sZW5ndGh9fQorICAgICAgICAgIDxidXR0b24g
aWQ9ImNsZWFyLWNvbXBsZXRlZCIgb25jbGljaz17e2FjdGlvbiAnY2xlYXJDb21wbGV0ZWQnfX0+
Q2xlYXIgY29tcGxldGVkPC9idXR0b24+CisgICAgICAgIHt7L2lmfX0KKyAgICAgIDwvZm9vdGVy
PgorICAgIHt7L2lmfX0KKzwvc2VjdGlvbj4KKzxmb290ZXIgaWQ9ImluZm8iPgorICA8cD5Eb3Vi
bGUtY2xpY2sgdG8gZWRpdCBhIHRvZG88L3A+CisgIDxwPgorICAgIENyZWF0ZWQgYnkKKyAgICA8
YSBocmVmPSJodHRwOi8vZ2l0aHViLmNvbS9jaWJlcm5veCI+TWlndWVsIENhbWJhPC9hPiwKKyAg
ICA8YSBocmVmPSJodHRwOi8vZ2l0aHViLmNvbS9hZGR5b3NtYW5pIj5BZGR5IE9zbWFuaTwvYT4K
KyAgPC9wPgorICA8cD5QYXJ0IG9mIDxhIGhyZWY9Imh0dHA6Ly90b2RvbXZjLmNvbSI+VG9kb01W
QzwvYT48L3A+Cis8L2Zvb3Rlcj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1n
aXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90
b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzLWRlYnVnL3NvdXJjZS9hcHAvdGVt
cGxhdGVzL2NvbXBsZXRlZC5oYnMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21l
dGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzLWRl
YnVnL3NvdXJjZS9hcHAvdGVtcGxhdGVzL2NvbXBsZXRlZC5oYnMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGUyNDRm
NDg3ZDIzODM0NDhhNDJhNTlkZjBiZjQyNTY0ZTIxZjU3MwotLS0gL2Rldi9udWxsCisrKyBiL1dl
YnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMtZGVidWcvc291cmNlL2FwcC90ZW1wbGF0ZXMv
Y29tcGxldGVkLmhicwpAQCAtMCwwICsxIEBACit7e3RvZG8tbGlzdCB0b2Rvcz10b2Rvc319Clwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJl
bmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvZW1iZXJqcy1kZWJ1Zy9zb3VyY2UvYXBwL3RlbXBsYXRlcy9jb21wb25lbnRzL3RvZG8t
aXRlbS5oYnMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzLWRlYnVnL3NvdXJjZS9h
cHAvdGVtcGxhdGVzL2NvbXBvbmVudHMvdG9kby1pdGVtLmhicwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMDY5NzVl
ODY1ZTdiOWEwNDI3ODVlOGIzODk3N2YzNGFhZDNkYmM2Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vi
c2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy1kZWJ1Zy9zb3VyY2UvYXBwL3RlbXBsYXRlcy9j
b21wb25lbnRzL3RvZG8taXRlbS5oYnMKQEAgLTAsMCArMSw2IEBACis8ZGl2IGNsYXNzPSJ2aWV3
Ij4KKyAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBjbGFzcz0idG9nZ2xlIiBjaGVja2VkPXt7dG9k
by5jb21wbGV0ZWR9fSBvbmNoYW5nZT17e2FjdGlvbiAndG9nZ2xlQ29tcGxldGVkJ319PgorICA8
bGFiZWwgb25kYmxjbGljaz17e2FjdGlvbiAnc3RhcnRFZGl0aW5nJ319Pnt7dG9kby50aXRsZX19
PC9sYWJlbD4KKyAgPGJ1dHRvbiBvbmNsaWNrPXt7YWN0aW9uICdyZW1vdmVUb2RvJ319IGNsYXNz
PSJkZXN0cm95Ij48L2J1dHRvbj4KKzwvZGl2PgorPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJl
ZGl0IiB2YWx1ZT17e3RvZG8udGl0bGV9fSBvbmJsdXI9e3thY3Rpb24gJ2RvbmVFZGl0aW5nJyB2
YWx1ZT0ndGFyZ2V0LnZhbHVlJ319IG9ua2V5ZG93bj17e2FjdGlvbiAnaGFuZGxlS2V5ZG93bid9
fSBhdXRvZm9jdXM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2Vi
c2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy1kZWJ1Zy9zb3VyY2UvYXBwL3RlbXBsYXRlcy9j
b21wb25lbnRzL3RvZG8tbGlzdC5oYnMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVk
b21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpz
LWRlYnVnL3NvdXJjZS9hcHAvdGVtcGxhdGVzL2NvbXBvbmVudHMvdG9kby1saXN0LmhicwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4zMDlkMDdhMWY0MTdjZjFjMTg4OTMwYzVjYmZiMzNhNzA1MWM3ODY2Ci0tLSAvZGV2
L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy1kZWJ1Zy9zb3VyY2Uv
YXBwL3RlbXBsYXRlcy9jb21wb25lbnRzL3RvZG8tbGlzdC5oYnMKQEAgLTAsMCArMSwxMCBAQAor
e3sjaWYgdG9kb3MubGVuZ3RofX0KKyAge3sjaWYgY2FuVG9nZ2xlfX0KKyAgICA8aW5wdXQgdHlw
ZT0iY2hlY2tib3giIGlkPSJ0b2dnbGUtYWxsIiBjaGVja2VkPXt7YWxsQ29tcGxldGVkfX0gb25j
aGFuZ2U9e3thY3Rpb24gJ3RvZ2dsZUFsbCd9fT4KKyAge3svaWZ9fQorICA8dWwgaWQ9InRvZG8t
bGlzdCIgY2xhc3M9InRvZG8tbGlzdCI+CisgICAge3sjZWFjaCB0b2RvcyBhcyB8dG9kb3x9fQor
ICAgICAge3t0b2RvLWl0ZW0gdG9kbz10b2RvIG9uU3RhcnRFZGl0PShhY3Rpb24gJ2Rpc2FibGVU
b2dnbGUnKSBvbkVuZEVkaXQ9KGFjdGlvbiAnZW5hYmxlVG9nZ2xlJyl9fQorICAgIHt7L2VhY2h9
fQorICA8L3VsPgore3svaWZ9fQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9y
Zy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
ZW1iZXJqcy1kZWJ1Zy9zb3VyY2UvYXBwL3RlbXBsYXRlcy9pbmRleC5oYnMgYi9XZWJzaXRlcy9i
cm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9lbWJlcmpzLWRlYnVnL3NvdXJjZS9hcHAvdGVtcGxhdGVzL2luZGV4Lmhi
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi43ZDU1NjVjMzZhYjM3ZGVhOWExYzQxOWRkZWE3NTNiZjE5NThjZDZmCi0t
LSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIu
MS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy1kZWJ1Zy9z
b3VyY2UvYXBwL3RlbXBsYXRlcy9pbmRleC5oYnMKQEAgLTAsMCArMSwzIEBACit7eyNpZiBtb2Rl
bC5sZW5ndGh9fQorICB7e3RvZG8tbGlzdCB0b2Rvcz1tb2RlbH19Cit7ey9pZn19CmRpZmYgLS1n
aXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90
b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzLWRlYnVnL3NvdXJjZS9jb25maWcv
ZW52aXJvbm1lbnQuanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4x
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzLWRlYnVnL3Nv
dXJjZS9jb25maWcvZW52aXJvbm1lbnQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTk3NDRiM2RlYzllZDdhOGZj
NTQ0OTBhNWU5YTRmY2I0MThhZDU2YgotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dz
ZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL2VtYmVyanMtZGVidWcvc291cmNlL2NvbmZpZy9lbnZpcm9ubWVudC5qcwpAQCAt
MCwwICsxLDQ3IEBACisvKiBqc2hpbnQgbm9kZTogdHJ1ZSAqLworCittb2R1bGUuZXhwb3J0cyA9
IGZ1bmN0aW9uIChlbnZpcm9ubWVudCkgeworICAgIHZhciBFTlYgPSB7CisgICAgICAgIG1vZHVs
ZVByZWZpeDogJ3RvZG9tdmMnLAorICAgICAgICBlbnZpcm9ubWVudDogZW52aXJvbm1lbnQsCisg
ICAgICAgIGJhc2VVUkw6IG51bGwsCisgICAgICAgIGxvY2F0aW9uVHlwZTogJ2F1dG8nLAorICAg
ICAgICBFbWJlckVOVjogeworICAgICAgICAgICAgRkVBVFVSRVM6IHsKKyAgICAgICAgICAgICAg
ICAvLyBIZXJlIHlvdSBjYW4gZW5hYmxlIGV4cGVyaW1lbnRhbCBmZWF0dXJlcyBvbiBhbiBlbWJl
ciBjYW5hcnkgYnVpbGQKKyAgICAgICAgICAgICAgICAvLyBlLmcuICd3aXRoLWNvbnRyb2xsZXIn
OiB0cnVlCisgICAgICAgICAgICB9CisgICAgICAgIH0sCisKKyAgICAgICAgQVBQOiB7CisgICAg
ICAgICAgICAvLyBIZXJlIHlvdSBjYW4gcGFzcyBmbGFncy9vcHRpb25zIHRvIHlvdXIgYXBwbGlj
YXRpb24gaW5zdGFuY2UKKyAgICAgICAgICAgIC8vIHdoZW4gaXQgaXMgY3JlYXRlZAorICAgICAg
ICB9CisgICAgfTsKKworICAgIC8vIGlmIChlbnZpcm9ubWVudCA9PT0gJ2RldmVsb3BtZW50Jykg
eworICAgIC8vICBFTlYuQVBQLkxPR19SRVNPTFZFUiA9IHRydWU7CisgICAgLy8gIEVOVi5BUFAu
TE9HX0FDVElWRV9HRU5FUkFUSU9OID0gdHJ1ZTsKKyAgICAvLyAgRU5WLkFQUC5MT0dfVFJBTlNJ
VElPTlMgPSB0cnVlOworICAgIC8vICBFTlYuQVBQLkxPR19UUkFOU0lUSU9OU19JTlRFUk5BTCA9
IHRydWU7CisgICAgLy8gIEVOVi5BUFAuTE9HX1ZJRVdfTE9PS1VQUyA9IHRydWU7CisgICAgLy8g
fQorCisgICAgaWYgKGVudmlyb25tZW50ID09PSAndGVzdCcpIHsKKyAgICAgICAgLy8gVGVzdGVt
IHByZWZlcnMgdGhpcy4uLgorICAgICAgICBFTlYuYmFzZVVSTCA9ICcvJzsKKyAgICAgICAgRU5W
LmxvY2F0aW9uVHlwZSA9ICdub25lJzsKKworICAgICAgICAvLyBrZWVwIHRlc3QgY29uc29sZSBv
dXRwdXQgcXVpZXRlcgorICAgICAgICBFTlYuQVBQLkxPR19BQ1RJVkVfR0VORVJBVElPTiA9IGZh
bHNlOworICAgICAgICBFTlYuQVBQLkxPR19WSUVXX0xPT0tVUFMgPSBmYWxzZTsKKworICAgICAg
ICBFTlYuQVBQLnJvb3RFbGVtZW50ID0gJyNlbWJlci10ZXN0aW5nJzsKKyAgICB9CisKKyAgICAv
LyBpZiAoZW52aXJvbm1lbnQgPT09ICdwcm9kdWN0aW9uJykgeworCisgICAgLy8gfQorCisgICAg
cmV0dXJuIEVOVjsKK307CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1Nw
ZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJl
cmpzLWRlYnVnL3NvdXJjZS9lbWJlci1jbGktYnVpbGQuanMgYi9XZWJzaXRlcy9icm93c2VyYmVu
Y2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9lbWJlcmpzLWRlYnVnL3NvdXJjZS9lbWJlci1jbGktYnVpbGQuanMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YjFkYmY1OTE4Y2I4MTA5OGM4MzBiZjM4NWIxYmM1ZDk0NGNlMDk1YwotLS0gL2Rldi9udWxsCisr
KyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMtZGVidWcvc291cmNlL2VtYmVyLWNs
aS1idWlsZC5qcwpAQCAtMCwwICsxLDI2IEBACisvKmpzaGludCBub2RlOnRydWUqLworLyogZ2xv
YmFsIHJlcXVpcmUsIG1vZHVsZSAqLwordmFyIEVtYmVyQXBwID0gcmVxdWlyZSgnZW1iZXItY2xp
L2xpYi9icm9jY29saS9lbWJlci1hcHAnKTsKKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAo
ZGVmYXVsdHMpIHsKKyAgICB2YXIgYXBwID0gbmV3IEVtYmVyQXBwKGRlZmF1bHRzLCB7CisgICAg
ICAgIC8vIEFkZCBvcHRpb25zIGhlcmUKKyAgICB9KTsKKworICAgIGFwcC5pbXBvcnQoJ3ZlbmRv
ci9iYXNlLmNzcycpOworICAgIGFwcC5pbXBvcnQoJ3ZlbmRvci9pbmRleC5jc3MnKTsKKyAgICAv
LyBVc2UgYGFwcC5pbXBvcnRgIHRvIGFkZCBhZGRpdGlvbmFsIGxpYnJhcmllcyB0byB0aGUgZ2Vu
ZXJhdGVkCisgICAgLy8gb3V0cHV0IGZpbGVzLgorICAgIC8vCisgICAgLy8gSWYgeW91IG5lZWQg
dG8gdXNlIGRpZmZlcmVudCBhc3NldHMgaW4gZGlmZmVyZW50CisgICAgLy8gZW52aXJvbm1lbnRz
LCBzcGVjaWZ5IGFuIG9iamVjdCBhcyB0aGUgZmlyc3QgcGFyYW1ldGVyLiBUaGF0CisgICAgLy8g
b2JqZWN0J3Mga2V5cyBzaG91bGQgYmUgdGhlIGVudmlyb25tZW50IG5hbWUgYW5kIHRoZSB2YWx1
ZXMKKyAgICAvLyBzaG91bGQgYmUgdGhlIGFzc2V0IHRvIHVzZSBpbiB0aGF0IGVudmlyb25tZW50
LgorICAgIC8vCisgICAgLy8gSWYgdGhlIGxpYnJhcnkgdGhhdCB5b3UgYXJlIGluY2x1ZGluZyBj
b250YWlucyBBTUQgb3IgRVM2CisgICAgLy8gbW9kdWxlcyB0aGF0IHlvdSB3b3VsZCBsaWtlIHRv
IGltcG9ydCBpbnRvIHlvdXIgYXBwbGljYXRpb24KKyAgICAvLyBwbGVhc2Ugc3BlY2lmeSBhbiBv
YmplY3Qgd2l0aCB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGtleXMKKyAgICAvLyBhbG9uZyB3aXRo
IHRoZSBleHBvcnRzIG9mIGVhY2ggbW9kdWxlIGFzIGl0cyB2YWx1ZS4KKworICAgIHJldHVybiBh
cHAudG9UcmVlKCk7Cit9OwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9T
cGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1i
ZXJqcy1kZWJ1Zy9zb3VyY2UvcHVibGljL2Nyb3NzZG9tYWluLnhtbCBiL1dlYnNpdGVzL2Jyb3dz
ZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL2VtYmVyanMtZGVidWcvc291cmNlL3B1YmxpYy9jcm9zc2RvbWFpbi54bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMGMxNmE3YTA3YjM3ZTVkNWY3ZTBlNTZjODI5ZjcyMDA2NzQ1ODQwMwotLS0gL2Rl
di9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVz
b3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMtZGVidWcvc291cmNl
L3B1YmxpYy9jcm9zc2RvbWFpbi54bWwKQEAgLTAsMCArMSwxNSBAQAorPD94bWwgdmVyc2lvbj0i
MS4wIj8+Cis8IURPQ1RZUEUgY3Jvc3MtZG9tYWluLXBvbGljeSBTWVNURU0gImh0dHA6Ly93d3cu
YWRvYmUuY29tL3htbC9kdGRzL2Nyb3NzLWRvbWFpbi1wb2xpY3kuZHRkIj4KKzxjcm9zcy1kb21h
aW4tcG9saWN5PgorICA8IS0tIFJlYWQgdGhpczogd3d3LmFkb2JlLmNvbS9kZXZuZXQvYXJ0aWNs
ZXMvY3Jvc3Nkb21haW5fcG9saWN5X2ZpbGVfc3BlYy5odG1sIC0tPgorCisgIDwhLS0gTW9zdCBy
ZXN0cmljdGl2ZSBwb2xpY3k6IC0tPgorICA8c2l0ZS1jb250cm9sIHBlcm1pdHRlZC1jcm9zcy1k
b21haW4tcG9saWNpZXM9Im5vbmUiLz4KKworICA8IS0tIExlYXN0IHJlc3RyaWN0aXZlIHBvbGlj
eTogLS0+CisgIDwhLS0KKyAgPHNpdGUtY29udHJvbCBwZXJtaXR0ZWQtY3Jvc3MtZG9tYWluLXBv
bGljaWVzPSJhbGwiLz4KKyAgPGFsbG93LWFjY2Vzcy1mcm9tIGRvbWFpbj0iKiIgdG8tcG9ydHM9
IioiIHNlY3VyZT0iZmFsc2UiLz4KKyAgPGFsbG93LWh0dHAtcmVxdWVzdC1oZWFkZXJzLWZyb20g
ZG9tYWluPSIqIiBoZWFkZXJzPSIqIiBzZWN1cmU9ImZhbHNlIi8+CisgIC0tPgorPC9jcm9zcy1k
b21haW4tcG9saWN5PgpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVl
ZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJq
cy1kZWJ1Zy9zb3VyY2UvcHVibGljL3JvYm90cy50eHQgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gu
b3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9lbWJlcmpzLWRlYnVnL3NvdXJjZS9wdWJsaWMvcm9ib3RzLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNTkx
NjQ1MmU1ZmY2YzhiNDNkNmQ3YzczZDAwMTUzZDM0YWMzNWRlCi0tLSAvZGV2L251bGwKKysrIGIv
V2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212
Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy1kZWJ1Zy9zb3VyY2UvcHVibGljL3JvYm90
cy50eHQKQEAgLTAsMCArMSwzIEBACisjIGh0dHA6Ly93d3cucm9ib3RzdHh0Lm9yZworVXNlci1h
Z2VudDogKgorRGlzYWxsb3c6CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3Jn
L1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9l
bWJlcmpzLWRlYnVnL3NvdXJjZS90ZXN0ZW0uanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3Jn
L1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9l
bWJlcmpzLWRlYnVnL3NvdXJjZS90ZXN0ZW0uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGUxNDJlZTEwNGZlNmM2
MWE2ZDJhYjlhNzU1NDA1Mzc0ZDA4MjJiNQotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jy
b3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL2VtYmVyanMtZGVidWcvc291cmNlL3Rlc3RlbS5qcwpAQCAtMCwwICsxLDEz
IEBACisvKmpzaGludCBub2RlOnRydWUqLworbW9kdWxlLmV4cG9ydHMgPSB7CisgICAgZnJhbWV3
b3JrOiAncXVuaXQnLAorICAgIHRlc3RfcGFnZTogJ3Rlc3RzL2luZGV4Lmh0bWw/aGlkZXBhc3Nl
ZCcsCisgICAgZGlzYWJsZV93YXRjaGluZzogdHJ1ZSwKKyAgICBsYXVuY2hfaW5fY2k6IFsKKyAg
ICAgICAgJ1BoYW50b21KUycKKyAgICBdLAorICAgIGxhdW5jaF9pbl9kZXY6IFsKKyAgICAgICAg
J1BoYW50b21KUycsCisgICAgICAgICdDaHJvbWUnCisgICAgXQorfTsKZGlmZiAtLWdpdCBhL1dl
YnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMtZGVidWcvc291cmNlL3Rlc3RzLy5qc2hpbnRy
YyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMtZGVidWcvc291cmNlL3Rlc3RzLy5q
c2hpbnRyYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi42ZWMwYjdjMTU0YjA5MzM3MjkxYzVkNzM2ZTk5ZDU5MjhkNTYw
NTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9t
ZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy1k
ZWJ1Zy9zb3VyY2UvdGVzdHMvLmpzaGludHJjCkBAIC0wLDAgKzEsNTIgQEAKK3sKKyAgInByZWRl
ZiI6IFsKKyAgICAiZG9jdW1lbnQiLAorICAgICJ3aW5kb3ciLAorICAgICJsb2NhdGlvbiIsCisg
ICAgInNldFRpbWVvdXQiLAorICAgICIkIiwKKyAgICAiLVByb21pc2UiLAorICAgICJkZWZpbmUi
LAorICAgICJjb25zb2xlIiwKKyAgICAidmlzaXQiLAorICAgICJleGlzdHMiLAorICAgICJmaWxs
SW4iLAorICAgICJjbGljayIsCisgICAgImtleUV2ZW50IiwKKyAgICAidHJpZ2dlckV2ZW50IiwK
KyAgICAiZmluZCIsCisgICAgImZpbmRXaXRoQXNzZXJ0IiwKKyAgICAid2FpdCIsCisgICAgIkRT
IiwKKyAgICAiYW5kVGhlbiIsCisgICAgImN1cnJlbnRVUkwiLAorICAgICJjdXJyZW50UGF0aCIs
CisgICAgImN1cnJlbnRSb3V0ZU5hbWUiCisgIF0sCisgICJub2RlIjogZmFsc2UsCisgICJicm93
c2VyIjogZmFsc2UsCisgICJib3NzIjogdHJ1ZSwKKyAgImN1cmx5IjogdHJ1ZSwKKyAgImRlYnVn
IjogZmFsc2UsCisgICJkZXZlbCI6IGZhbHNlLAorICAiZXFlcWVxIjogdHJ1ZSwKKyAgImV2aWwi
OiB0cnVlLAorICAiZm9yaW4iOiBmYWxzZSwKKyAgImltbWVkIjogZmFsc2UsCisgICJsYXhicmVh
ayI6IGZhbHNlLAorICAibmV3Y2FwIjogdHJ1ZSwKKyAgIm5vYXJnIjogdHJ1ZSwKKyAgIm5vZW1w
dHkiOiBmYWxzZSwKKyAgIm5vbmV3IjogZmFsc2UsCisgICJub21lbiI6IGZhbHNlLAorICAib25l
dmFyIjogZmFsc2UsCisgICJwbHVzcGx1cyI6IGZhbHNlLAorICAicmVnZXhwIjogZmFsc2UsCisg
ICJ1bmRlZiI6IHRydWUsCisgICJzdWIiOiB0cnVlLAorICAic3RyaWN0IjogZmFsc2UsCisgICJ3
aGl0ZSI6IGZhbHNlLAorICAiZXFudWxsIjogdHJ1ZSwKKyAgImVzbmV4dCI6IHRydWUsCisgICJ1
bnVzZWQiOiB0cnVlCit9CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1Nw
ZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJl
cmpzLWRlYnVnL3NvdXJjZS90ZXN0cy9oZWxwZXJzL2Rlc3Ryb3ktYXBwLmpzIGIvV2Vic2l0ZXMv
YnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvZW1iZXJqcy1kZWJ1Zy9zb3VyY2UvdGVzdHMvaGVscGVycy9kZXN0cm95
LWFwcC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xM2Q0OTg5NTAxMmQ5NmEyOWNhNWFjN2M2MWRhZGFmYWE5YjNj
YTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9t
ZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy1k
ZWJ1Zy9zb3VyY2UvdGVzdHMvaGVscGVycy9kZXN0cm95LWFwcC5qcwpAQCAtMCwwICsxLDUgQEAK
K2ltcG9ydCBFbWJlciBmcm9tICdlbWJlcic7CisKK2V4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRl
c3Ryb3lBcHAoYXBwbGljYXRpb24pIHsKKyAgICBFbWJlci5ydW4oYXBwbGljYXRpb24sICdkZXN0
cm95Jyk7Cit9CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21l
dGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzLWRl
YnVnL3NvdXJjZS90ZXN0cy9oZWxwZXJzL21vZHVsZS1mb3ItYWNjZXB0YW5jZS5qcyBiL1dlYnNp
dGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMtZGVidWcvc291cmNlL3Rlc3RzL2hlbHBlcnMvbW9k
dWxlLWZvci1hY2NlcHRhbmNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRiZDgwZmMwNDJjNjgyY2FhMjBlZjBk
MGU2ODQ1ZTQ3NDVlMWFiMGUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVu
Y2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9lbWJlcmpzLWRlYnVnL3NvdXJjZS90ZXN0cy9oZWxwZXJzL21vZHVsZS1mb3ItYWNjZXB0
YW5jZS5qcwpAQCAtMCwwICsxLDIyIEBACitpbXBvcnQgeyBtb2R1bGUgfSBmcm9tICdxdW5pdCc7
CitpbXBvcnQgc3RhcnRBcHAgZnJvbSAnLi4vaGVscGVycy9zdGFydC1hcHAnOworaW1wb3J0IGRl
c3Ryb3lBcHAgZnJvbSAnLi4vaGVscGVycy9kZXN0cm95LWFwcCc7CisKK2V4cG9ydCBkZWZhdWx0
IGZ1bmN0aW9uIChuYW1lLCBvcHRpb25zID0ge30pIHsKKyAgICBtb2R1bGUobmFtZSwgeworICAg
ICAgICBiZWZvcmVFYWNoKCkgeworICAgICAgICAgICAgdGhpcy5hcHBsaWNhdGlvbiA9IHN0YXJ0
QXBwKCk7CisKKyAgICAgICAgICAgIGlmIChvcHRpb25zLmJlZm9yZUVhY2gpIHsKKyAgICAgICAg
ICAgICAgICBvcHRpb25zLmJlZm9yZUVhY2guYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSwKKworICAgICAgICBhZnRlckVhY2goKSB7CisgICAgICAgICAg
ICBpZiAob3B0aW9ucy5hZnRlckVhY2gpIHsKKyAgICAgICAgICAgICAgICBvcHRpb25zLmFmdGVy
RWFjaC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZGVzdHJveUFwcCh0aGlzLmFwcGxpY2F0aW9uKTsKKyAgICAgICAgfQorICAgIH0pOworfQpkaWZm
IC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy1kZWJ1Zy9zb3VyY2UvdGVz
dHMvaGVscGVycy9yZXNvbHZlci5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRv
bWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMt
ZGVidWcvc291cmNlL3Rlc3RzL2hlbHBlcnMvcmVzb2x2ZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTBlOTE3
OWY1NDYzNTAyNWY5NTA0YTM0OWU0MjMwMmE4MDA1ZmMzMgotLS0gL2Rldi9udWxsCisrKyBiL1dl
YnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMtZGVidWcvc291cmNlL3Rlc3RzL2hlbHBlcnMv
cmVzb2x2ZXIuanMKQEAgLTAsMCArMSwxMSBAQAoraW1wb3J0IFJlc29sdmVyIGZyb20gJy4uLy4u
L3Jlc29sdmVyJzsKK2ltcG9ydCBjb25maWcgZnJvbSAnLi4vLi4vY29uZmlnL2Vudmlyb25tZW50
JzsKKworY29uc3QgcmVzb2x2ZXIgPSBSZXNvbHZlci5jcmVhdGUoKTsKKworcmVzb2x2ZXIubmFt
ZXNwYWNlID0geworICAgIG1vZHVsZVByZWZpeDogY29uZmlnLm1vZHVsZVByZWZpeCwKKyAgICBw
b2RNb2R1bGVQcmVmaXg6IGNvbmZpZy5wb2RNb2R1bGVQcmVmaXgKK307CisKK2V4cG9ydCBkZWZh
dWx0IHJlc29sdmVyOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVl
ZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJq
cy1kZWJ1Zy9zb3VyY2UvdGVzdHMvaGVscGVycy9zdGFydC1hcHAuanMgYi9XZWJzaXRlcy9icm93
c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVy
ZS1leGFtcGxlcy9lbWJlcmpzLWRlYnVnL3NvdXJjZS90ZXN0cy9oZWxwZXJzL3N0YXJ0LWFwcC5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5lZjFiNmI1NWVlOGU3OTY5NzgzNzFkMjdiMGEzM2ZjZjc0MTk2OWRlCi0t
LSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIu
MS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy1kZWJ1Zy9z
b3VyY2UvdGVzdHMvaGVscGVycy9zdGFydC1hcHAuanMKQEAgLTAsMCArMSwxOCBAQAoraW1wb3J0
IEVtYmVyIGZyb20gJ2VtYmVyJzsKK2ltcG9ydCBBcHBsaWNhdGlvbiBmcm9tICcuLi8uLi9hcHAn
OworaW1wb3J0IGNvbmZpZyBmcm9tICcuLi8uLi9jb25maWcvZW52aXJvbm1lbnQnOworCitleHBv
cnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydEFwcChhdHRycykgeworICAgIGxldCBhcHBsaWNhdGlv
bjsKKworICAgIGxldCBhdHRyaWJ1dGVzID0gRW1iZXIubWVyZ2Uoe30sIGNvbmZpZy5BUFApOwor
ICAgIGF0dHJpYnV0ZXMgPSBFbWJlci5tZXJnZShhdHRyaWJ1dGVzLCBhdHRycyk7IC8vIHVzZSBk
ZWZhdWx0cywgYnV0IHlvdSBjYW4gb3ZlcnJpZGU7CisKKyAgICBFbWJlci5ydW4oKCkgPT4gewor
ICAgICAgICBhcHBsaWNhdGlvbiA9IEFwcGxpY2F0aW9uLmNyZWF0ZShhdHRyaWJ1dGVzKTsKKyAg
ICAgICAgYXBwbGljYXRpb24uc2V0dXBGb3JUZXN0aW5nKCk7CisgICAgICAgIGFwcGxpY2F0aW9u
LmluamVjdFRlc3RIZWxwZXJzKCk7CisgICAgfSk7CisKKyAgICByZXR1cm4gYXBwbGljYXRpb247
Cit9CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4x
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzLWRlYnVnL3Nv
dXJjZS90ZXN0cy9pbmRleC5odG1sIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9t
ZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy1k
ZWJ1Zy9zb3VyY2UvdGVzdHMvaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZjQ0MjA4MzMyOWE3YjAx
YzUwYWM4ODE1OTU0ZDc2YzQ5YThmNWU1Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJv
d3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1
cmUtZXhhbXBsZXMvZW1iZXJqcy1kZWJ1Zy9zb3VyY2UvdGVzdHMvaW5kZXguaHRtbApAQCAtMCww
ICsxLDM0IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorICA8aGVhZD4KKyAgICA8bWV0YSBj
aGFyc2V0PSJ1dGYtOCI+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBj
b250ZW50PSJJRT1lZGdlIj4KKyAgICA8dGl0bGU+VG9kb212YyBUZXN0czwvdGl0bGU+CisgICAg
PG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IiI+CisgICAgPG1ldGEgbmFtZT0idmll
d3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIj4KKwor
ICAgIHt7Y29udGVudC1mb3IgImhlYWQifX0KKyAgICB7e2NvbnRlbnQtZm9yICJ0ZXN0LWhlYWQi
fX0KKworICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iYXNzZXRzL3ZlbmRvci5jc3Mi
PgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iYXNzZXRzL3RvZG9tdmMuY3NzIj4K
KyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImFzc2V0cy90ZXN0LXN1cHBvcnQuY3Nz
Ij4KKworICAgIHt7Y29udGVudC1mb3IgImhlYWQtZm9vdGVyIn19CisgICAge3tjb250ZW50LWZv
ciAidGVzdC1oZWFkLWZvb3RlciJ9fQorICA8L2hlYWQ+CisgIDxib2R5PgorICAgIHt7Y29udGVu
dC1mb3IgImJvZHkifX0KKyAgICB7e2NvbnRlbnQtZm9yICJ0ZXN0LWJvZHkifX0KKworICAgIDxz
Y3JpcHQgc3JjPSJ0ZXN0ZW0uanMiIGludGVncml0eT0iIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0
IHNyYz0iYXNzZXRzL3ZlbmRvci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9ImFzc2V0
cy90ZXN0LXN1cHBvcnQuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJhc3NldHMvdG9k
b212Yy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9ImFzc2V0cy90ZXN0cy5qcyI+PC9z
Y3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9ImFzc2V0cy90ZXN0LWxvYWRlci5qcyI+PC9zY3JpcHQ+
CisKKyAgICB7e2NvbnRlbnQtZm9yICJib2R5LWZvb3RlciJ9fQorICAgIHt7Y29udGVudC1mb3Ig
InRlc3QtYm9keS1mb290ZXIifX0KKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvV2Vi
c2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy1kZWJ1Zy9zb3VyY2UvdGVzdHMvdGVzdC1oZWxw
ZXIuanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzLWRlYnVnL3NvdXJjZS90ZXN0
cy90ZXN0LWhlbHBlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYzk5NjFmZDU2YTEyYjdlZTJiMmQ4YzE3NTIw
ZWZkYTNkNmEwZDc5Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9y
Zy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
ZW1iZXJqcy1kZWJ1Zy9zb3VyY2UvdGVzdHMvdGVzdC1oZWxwZXIuanMKQEAgLTAsMCArMSw2IEBA
CitpbXBvcnQgcmVzb2x2ZXIgZnJvbSAnLi9oZWxwZXJzL3Jlc29sdmVyJzsKK2ltcG9ydCB7Cisg
ICAgc2V0UmVzb2x2ZXIKK30gZnJvbSAnZW1iZXItcXVuaXQnOworCitzZXRSZXNvbHZlcihyZXNv
bHZlcik7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVy
Mi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzLWRlYnVn
L3NvdXJjZS92ZW5kb3IvYmFzZS5jc3MgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVk
b21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpz
LWRlYnVnL3NvdXJjZS92ZW5kb3IvYmFzZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGQyNWQzYzg0YWM2YzZh
ZWYyNmI5NjgzYTJiYzEwYzYxZjk2MGM4ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jy
b3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL2VtYmVyanMtZGVidWcvc291cmNlL3ZlbmRvci9iYXNlLmNzcwpAQCAtMCww
ICsxLDE0MSBAQAoraHIgeworICAgIG1hcmdpbjogMjBweCAwOworICAgIGJvcmRlcjogMDsKKyAg
ICBib3JkZXItdG9wOiAxcHggZGFzaGVkICNjNWM1YzU7CisgICAgYm9yZGVyLWJvdHRvbTogMXB4
IGRhc2hlZCAjZjdmN2Y3OworfQorCisubGVhcm4gYSB7CisgICAgZm9udC13ZWlnaHQ6IG5vcm1h
bDsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgICAgY29sb3I6ICNiODNmNDU7Cit9CisK
Ky5sZWFybiBhOmhvdmVyIHsKKyAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgICBj
b2xvcjogIzc4N2U3ZTsKK30KKworLmxlYXJuIGgzLAorLmxlYXJuIGg0LAorLmxlYXJuIGg1IHsK
KyAgICBtYXJnaW46IDEwcHggMDsKKyAgICBmb250LXdlaWdodDogNTAwOworICAgIGxpbmUtaGVp
Z2h0OiAxLjI7CisgICAgY29sb3I6ICMwMDA7Cit9CisKKy5sZWFybiBoMyB7CisgICAgZm9udC1z
aXplOiAyNHB4OworfQorCisubGVhcm4gaDQgeworICAgIGZvbnQtc2l6ZTogMThweDsKK30KKwor
LmxlYXJuIGg1IHsKKyAgICBtYXJnaW4tYm90dG9tOiAwOworICAgIGZvbnQtc2l6ZTogMTRweDsK
K30KKworLmxlYXJuIHVsIHsKKyAgICBwYWRkaW5nOiAwOworICAgIG1hcmdpbjogMCAwIDMwcHgg
MjVweDsKK30KKworLmxlYXJuIGxpIHsKKyAgICBsaW5lLWhlaWdodDogMjBweDsKK30KKworLmxl
YXJuIHAgeworICAgIGZvbnQtc2l6ZTogMTVweDsKKyAgICBmb250LXdlaWdodDogMzAwOworICAg
IGxpbmUtaGVpZ2h0OiAxLjM7CisgICAgbWFyZ2luLXRvcDogMDsKKyAgICBtYXJnaW4tYm90dG9t
OiAwOworfQorCisjaXNzdWUtY291bnQgeworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisKKy5xdW90
ZSB7CisgICAgYm9yZGVyOiBub25lOworICAgIG1hcmdpbjogMjBweCAwIDYwcHggMDsKK30KKwor
LnF1b3RlIHAgeworICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworLnF1b3RlIHA6YmVmb3Jl
IHsKKyAgICBjb250ZW50OiAn4oCcJzsKKyAgICBmb250LXNpemU6IDUwcHg7CisgICAgb3BhY2l0
eTogLjE1OworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IC0yMHB4OworICAgIGxl
ZnQ6IDNweDsKK30KKworLnF1b3RlIHA6YWZ0ZXIgeworICAgIGNvbnRlbnQ6ICfigJ0nOworICAg
IGZvbnQtc2l6ZTogNTBweDsKKyAgICBvcGFjaXR5OiAuMTU7CisgICAgcG9zaXRpb246IGFic29s
dXRlOworICAgIGJvdHRvbTogLTQycHg7CisgICAgcmlnaHQ6IDNweDsKK30KKworLnF1b3RlIGZv
b3RlciB7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIGJvdHRvbTogLTQwcHg7CisgICAg
cmlnaHQ6IDA7Cit9CisKKy5xdW90ZSBmb290ZXIgaW1nIHsKKyAgICBib3JkZXItcmFkaXVzOiAz
cHg7Cit9CisKKy5xdW90ZSBmb290ZXIgYSB7CisgICAgbWFyZ2luLWxlZnQ6IDVweDsKKyAgICB2
ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOworfQorCisuc3BlZWNoLWJ1YmJsZSB7CisgICAgcG9zaXRp
b246IHJlbGF0aXZlOworICAgIHBhZGRpbmc6IDEwcHg7CisgICAgYmFja2dyb3VuZDogcmdiYSgw
LCAwLCAwLCAuMDQpOworICAgIGJvcmRlci1yYWRpdXM6IDVweDsKK30KKworLnNwZWVjaC1idWJi
bGU6YWZ0ZXIgeworICAgIGNvbnRlbnQ6ICcnOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAg
ICB0b3A6IDEwMCU7CisgICAgcmlnaHQ6IDMwcHg7CisgICAgYm9yZGVyOiAxM3B4IHNvbGlkIHRy
YW5zcGFyZW50OworICAgIGJvcmRlci10b3AtY29sb3I6IHJnYmEoMCwgMCwgMCwgLjA0KTsKK30K
KworLmxlYXJuLWJhciA+IC5sZWFybiB7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHdp
ZHRoOiAyNzJweDsKKyAgICB0b3A6IDhweDsKKyAgICBsZWZ0OiAtMzAwcHg7CisgICAgcGFkZGlu
ZzogMTBweDsKKyAgICBib3JkZXItcmFkaXVzOiA1cHg7CisgICAgYmFja2dyb3VuZC1jb2xvcjog
cmdiYSgyNTUsIDI1NSwgMjU1LCAuNik7CisgICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogbGVmdDsK
KyAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiA1MDBtczsKK30KKworQG1lZGlhIChtaW4td2lkdGg6
IDg5OXB4KSB7CisgICAgLmxlYXJuLWJhciB7CisgICAgICAgIHdpZHRoOiBhdXRvOworICAgICAg
ICBwYWRkaW5nLWxlZnQ6IDMwMHB4OworICAgIH0KKworICAgIC5sZWFybi1iYXIgPiAubGVhcm4g
eworICAgICAgICBsZWZ0OiA4cHg7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJv
d3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1
cmUtZXhhbXBsZXMvZW1iZXJqcy1kZWJ1Zy9zb3VyY2UvdmVuZG9yL2luZGV4LmNzcyBiL1dlYnNp
dGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMtZGVidWcvc291cmNlL3ZlbmRvci9pbmRleC5jc3MK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMTdlYTE4MDE2MTIxMjZmMWRiNjVjZTA1NjhmMmEwMjM3M2I5M2I1NQotLS0g
L2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEv
cmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMtZGVidWcvc291
cmNlL3ZlbmRvci9pbmRleC5jc3MKQEAgLTAsMCArMSwzNzggQEAKK2h0bWwsCitib2R5IHsKKyAg
ICBtYXJnaW46IDA7CisgICAgcGFkZGluZzogMDsKK30KKworYnV0dG9uIHsKKyAgICBtYXJnaW46
IDA7CisgICAgcGFkZGluZzogMDsKKyAgICBib3JkZXI6IDA7CisgICAgYmFja2dyb3VuZDogbm9u
ZTsKKyAgICBmb250LXNpemU6IDEwMCU7CisgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOwor
ICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OworICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0OworICAg
IGNvbG9yOiBpbmhlcml0OworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKKyAgICBhcHBl
YXJhbmNlOiBub25lOworICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwor
ICAgIC1tb3otZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOworICAgIGZvbnQtc21vb3RoaW5n
OiBhbnRpYWxpYXNlZDsKK30KKworYm9keSB7CisgICAgZm9udDogMTRweCAnSGVsdmV0aWNhIE5l
dWUnLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOworICAgIGxpbmUtaGVpZ2h0OiAxLjRl
bTsKKyAgICBiYWNrZ3JvdW5kOiAjZjVmNWY1OworICAgIGNvbG9yOiAjNGQ0ZDRkOworICAgIG1p
bi13aWR0aDogMjMwcHg7CisgICAgbWF4LXdpZHRoOiA1NTBweDsKKyAgICBtYXJnaW46IDAgYXV0
bzsKKyAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKKyAgICAtbW96LWZv
bnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKKyAgICBmb250LXNtb290aGluZzogYW50aWFsaWFz
ZWQ7CisgICAgZm9udC13ZWlnaHQ6IDMwMDsKK30KKworYnV0dG9uLAoraW5wdXRbdHlwZT0iY2hl
Y2tib3giXSB7CisgICAgb3V0bGluZTogbm9uZTsKK30KKworLmhpZGRlbiB7CisgICAgZGlzcGxh
eTogbm9uZTsKK30KKworI3RvZG9hcHAgeworICAgIGJhY2tncm91bmQ6ICNmZmY7CisgICAgbWFy
Z2luOiAxMzBweCAwIDQwcHggMDsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgYm94LXNo
YWRvdzogMCAycHggNHB4IDAgcmdiYSgwLCAwLCAwLCAwLjIpLAorICAgICAgICAgICAgICAgIDAg
MjVweCA1MHB4IDAgcmdiYSgwLCAwLCAwLCAwLjEpOworfQorCisjdG9kb2FwcCBpbnB1dDo6LXdl
YmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7CisgICAgZm9udC1zdHlsZTogaXRhbGljOworICAgIGZv
bnQtd2VpZ2h0OiAzMDA7CisgICAgY29sb3I6ICNlNmU2ZTY7Cit9CisKKyN0b2RvYXBwIGlucHV0
OjotbW96LXBsYWNlaG9sZGVyIHsKKyAgICBmb250LXN0eWxlOiBpdGFsaWM7CisgICAgZm9udC13
ZWlnaHQ6IDMwMDsKKyAgICBjb2xvcjogI2U2ZTZlNjsKK30KKworI3RvZG9hcHAgaW5wdXQ6Omlu
cHV0LXBsYWNlaG9sZGVyIHsKKyAgICBmb250LXN0eWxlOiBpdGFsaWM7CisgICAgZm9udC13ZWln
aHQ6IDMwMDsKKyAgICBjb2xvcjogI2U2ZTZlNjsKK30KKworI3RvZG9hcHAgaDEgeworICAgIHBv
c2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IC0xNTVweDsKKyAgICB3aWR0aDogMTAwJTsKKyAg
ICBmb250LXNpemU6IDEwMHB4OworICAgIGZvbnQtd2VpZ2h0OiAxMDA7CisgICAgdGV4dC1hbGln
bjogY2VudGVyOworICAgIGNvbG9yOiByZ2JhKDE3NSwgNDcsIDQ3LCAwLjE1KTsKKyAgICAtd2Vi
a2l0LXRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7CisgICAgLW1vei10ZXh0LXJl
bmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OworICAgIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6
ZUxlZ2liaWxpdHk7Cit9CisKKyNuZXctdG9kbywKKy5lZGl0IHsKKyAgICBwb3NpdGlvbjogcmVs
YXRpdmU7CisgICAgbWFyZ2luOiAwOworICAgIHdpZHRoOiAxMDAlOworICAgIGZvbnQtc2l6ZTog
MjRweDsKKyAgICBmb250LWZhbWlseTogaW5oZXJpdDsKKyAgICBmb250LXdlaWdodDogaW5oZXJp
dDsKKyAgICBsaW5lLWhlaWdodDogMS40ZW07CisgICAgYm9yZGVyOiAwOworICAgIG91dGxpbmU6
IG5vbmU7CisgICAgY29sb3I6IGluaGVyaXQ7CisgICAgcGFkZGluZzogNnB4OworICAgIGJvcmRl
cjogMXB4IHNvbGlkICM5OTk7CisgICAgYm94LXNoYWRvdzogaW5zZXQgMCAtMXB4IDVweCAwIHJn
YmEoMCwgMCwgMCwgMC4yKTsKKyAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OworICAgIC13ZWJr
aXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOworICAgIC1tb3otZm9udC1zbW9vdGhpbmc6
IGFudGlhbGlhc2VkOworICAgIGZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKK30KKworI25l
dy10b2RvIHsKKyAgICBwYWRkaW5nOiAxNnB4IDE2cHggMTZweCA2MHB4OworICAgIGJvcmRlcjog
bm9uZTsKKyAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMDAzKTsKKyAgICBib3gtc2hh
ZG93OiBpbnNldCAwIC0ycHggMXB4IHJnYmEoMCwwLDAsMC4wMyk7Cit9CisKKyNtYWluIHsKKyAg
ICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgei1pbmRleDogMjsKKyAgICBib3JkZXItdG9wOiAx
cHggc29saWQgI2U2ZTZlNjsKK30KKworbGFiZWxbZm9yPSd0b2dnbGUtYWxsJ10geworICAgIGRp
c3BsYXk6IG5vbmU7Cit9CisKKyN0b2dnbGUtYWxsIHsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7
CisgICAgdG9wOiAtNTVweDsKKyAgICBsZWZ0OiAtMTJweDsKKyAgICB3aWR0aDogNjBweDsKKyAg
ICBoZWlnaHQ6IDM0cHg7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgIGJvcmRlcjogbm9u
ZTsgLyogTW9iaWxlIFNhZmFyaSAqLworfQorCisjdG9nZ2xlLWFsbDpiZWZvcmUgeworICAgIGNv
bnRlbnQ6ICfina8nOworICAgIGZvbnQtc2l6ZTogMjJweDsKKyAgICBjb2xvcjogI2U2ZTZlNjsK
KyAgICBwYWRkaW5nOiAxMHB4IDI3cHggMTBweCAyN3B4OworfQorCisjdG9nZ2xlLWFsbDpjaGVj
a2VkOmJlZm9yZSB7CisgICAgY29sb3I6ICM3MzczNzM7Cit9CisKKyN0b2RvLWxpc3QgeworICAg
IG1hcmdpbjogMDsKKyAgICBwYWRkaW5nOiAwOworICAgIGxpc3Qtc3R5bGU6IG5vbmU7Cit9CisK
KyN0b2RvLWxpc3QgbGkgeworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBmb250LXNpemU6
IDI0cHg7CisgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZGVkZWQ7Cit9CisKKyN0b2Rv
LWxpc3QgbGk6bGFzdC1jaGlsZCB7CisgICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKK30KKworI3Rv
ZG8tbGlzdCBsaS5lZGl0aW5nIHsKKyAgICBib3JkZXItYm90dG9tOiBub25lOworICAgIHBhZGRp
bmc6IDA7Cit9CisKKyN0b2RvLWxpc3QgbGkuZWRpdGluZyAuZWRpdCB7CisgICAgZGlzcGxheTog
YmxvY2s7CisgICAgd2lkdGg6IDUwNnB4OworICAgIHBhZGRpbmc6IDEzcHggMTdweCAxMnB4IDE3
cHg7CisgICAgbWFyZ2luOiAwIDAgMCA0M3B4OworfQorCisjdG9kby1saXN0IGxpLmVkaXRpbmcg
LnZpZXcgeworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisKKyN0b2RvLWxpc3QgbGkgLnRvZ2dsZSB7
CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgIHdpZHRoOiA0MHB4OworICAgIC8qIGF1dG8s
IHNpbmNlIG5vbi1XZWJLaXQgYnJvd3NlcnMgZG9lc24ndCBzdXBwb3J0IGlucHV0IHN0eWxpbmcg
Ki8KKyAgICBoZWlnaHQ6IGF1dG87CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHRvcDog
MDsKKyAgICBib3R0b206IDA7CisgICAgbWFyZ2luOiBhdXRvIDA7CisgICAgYm9yZGVyOiBub25l
OyAvKiBNb2JpbGUgU2FmYXJpICovCisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOworICAg
IGFwcGVhcmFuY2U6IG5vbmU7Cit9CisKKyN0b2RvLWxpc3QgbGkgLnRvZ2dsZTphZnRlciB7Cisg
ICAgY29udGVudDogdXJsKCdkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPSJodHRw
Oi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiB2aWV3Qm94PSIt
MTAgLTE4IDEwMCAxMzUiPjxjaXJjbGUgY3g9IjUwIiBjeT0iNTAiIHI9IjUwIiBmaWxsPSJub25l
IiBzdHJva2U9IiNlZGVkZWQiIHN0cm9rZS13aWR0aD0iMyIvPjwvc3ZnPicpOworfQorCisjdG9k
by1saXN0IGxpIC50b2dnbGU6Y2hlY2tlZDphZnRlciB7CisgICAgY29udGVudDogdXJsKCdkYXRh
OmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2
ZyIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiB2aWV3Qm94PSItMTAgLTE4IDEwMCAxMzUiPjxjaXJj
bGUgY3g9IjUwIiBjeT0iNTAiIHI9IjUwIiBmaWxsPSJub25lIiBzdHJva2U9IiNiZGRhZDUiIHN0
cm9rZS13aWR0aD0iMyIvPjxwYXRoIGZpbGw9IiM1ZGMyYWYiIGQ9Ik03MiAyNUw0MiA3MSAyNyA1
NmwtNCA0IDIwIDIwIDM0LTUyeiIvPjwvc3ZnPicpOworfQorCisjdG9kby1saXN0IGxpIGxhYmVs
IHsKKyAgICB3aGl0ZS1zcGFjZTogcHJlOworICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7Cisg
ICAgcGFkZGluZzogMTVweCA2MHB4IDE1cHggMTVweDsKKyAgICBtYXJnaW4tbGVmdDogNDVweDsK
KyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBsaW5lLWhlaWdodDogMS4yOworICAgIHRyYW5zaXRp
b246IGNvbG9yIDAuNHM7Cit9CisKKyN0b2RvLWxpc3QgbGkuY29tcGxldGVkIGxhYmVsIHsKKyAg
ICBjb2xvcjogI2Q5ZDlkOTsKKyAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsKK30K
KworI3RvZG8tbGlzdCBsaSAuZGVzdHJveSB7CisgICAgZGlzcGxheTogbm9uZTsKKyAgICBwb3Np
dGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAwOworICAgIHJpZ2h0OiAxMHB4OworICAgIGJvdHRv
bTogMDsKKyAgICB3aWR0aDogNDBweDsKKyAgICBoZWlnaHQ6IDQwcHg7CisgICAgbWFyZ2luOiBh
dXRvIDA7CisgICAgZm9udC1zaXplOiAzMHB4OworICAgIGNvbG9yOiAjY2M5YTlhOworICAgIG1h
cmdpbi1ib3R0b206IDExcHg7CisgICAgdHJhbnNpdGlvbjogY29sb3IgMC4ycyBlYXNlLW91dDsK
K30KKworI3RvZG8tbGlzdCBsaSAuZGVzdHJveTpob3ZlciB7CisgICAgY29sb3I6ICNhZjViNWU7
Cit9CisKKyN0b2RvLWxpc3QgbGkgLmRlc3Ryb3k6YWZ0ZXIgeworICAgIGNvbnRlbnQ6ICfDlyc7
Cit9CisKKyN0b2RvLWxpc3QgbGk6aG92ZXIgLmRlc3Ryb3kgeworICAgIGRpc3BsYXk6IGJsb2Nr
OworfQorCisjdG9kby1saXN0IGxpIC5lZGl0IHsKKyAgICBkaXNwbGF5OiBub25lOworfQorCisj
dG9kby1saXN0IGxpLmVkaXRpbmc6bGFzdC1jaGlsZCB7CisgICAgbWFyZ2luLWJvdHRvbTogLTFw
eDsKK30KKworI2Zvb3RlciB7CisgICAgY29sb3I6ICM3Nzc7CisgICAgcGFkZGluZzogMTBweCAx
NXB4OworICAgIGhlaWdodDogMjBweDsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgYm9y
ZGVyLXRvcDogMXB4IHNvbGlkICNlNmU2ZTY7Cit9CisKKyNmb290ZXI6YmVmb3JlIHsKKyAgICBj
b250ZW50OiAnJzsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgcmlnaHQ6IDA7CisgICAg
Ym90dG9tOiAwOworICAgIGxlZnQ6IDA7CisgICAgaGVpZ2h0OiA1MHB4OworICAgIG92ZXJmbG93
OiBoaWRkZW47CisgICAgYm94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwK
KyAgICAgICAgICAgICAgICAwIDhweCAwIC0zcHggI2Y2ZjZmNiwKKyAgICAgICAgICAgICAgICAw
IDlweCAxcHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksCisgICAgICAgICAgICAgICAgMCAxNnB4
IDAgLTZweCAjZjZmNmY2LAorICAgICAgICAgICAgICAgIDAgMTdweCAycHggLTZweCByZ2JhKDAs
IDAsIDAsIDAuMik7Cit9CisKKyN0b2RvLWNvdW50IHsKKyAgICBmbG9hdDogbGVmdDsKKyAgICB0
ZXh0LWFsaWduOiBsZWZ0OworfQorCisjdG9kby1jb3VudCBzdHJvbmcgeworICAgIGZvbnQtd2Vp
Z2h0OiAzMDA7Cit9CisKKyNmaWx0ZXJzIHsKKyAgICBtYXJnaW46IDA7CisgICAgcGFkZGluZzog
MDsKKyAgICBsaXN0LXN0eWxlOiBub25lOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICBy
aWdodDogMDsKKyAgICBsZWZ0OiAwOworfQorCisjZmlsdGVycyBsaSB7CisgICAgZGlzcGxheTog
aW5saW5lOworfQorCisjZmlsdGVycyBsaSBhIHsKKyAgICBjb2xvcjogaW5oZXJpdDsKKyAgICBt
YXJnaW46IDNweDsKKyAgICBwYWRkaW5nOiAzcHggN3B4OworICAgIHRleHQtZGVjb3JhdGlvbjog
bm9uZTsKKyAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKKyAgICBib3JkZXItcmFk
aXVzOiAzcHg7Cit9CisKKyNmaWx0ZXJzIGxpIGEuc2VsZWN0ZWQsCisjZmlsdGVycyBsaSBhOmhv
dmVyIHsKKyAgICBib3JkZXItY29sb3I6IHJnYmEoMTc1LCA0NywgNDcsIDAuMSk7Cit9CisKKyNm
aWx0ZXJzIGxpIGEuc2VsZWN0ZWQgeworICAgIGJvcmRlci1jb2xvcjogcmdiYSgxNzUsIDQ3LCA0
NywgMC4yKTsKK30KKworI2NsZWFyLWNvbXBsZXRlZCwKK2h0bWwgI2NsZWFyLWNvbXBsZXRlZDph
Y3RpdmUgeworICAgIGZsb2F0OiByaWdodDsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAg
bGluZS1oZWlnaHQ6IDIwcHg7CisgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgIGN1cnNv
cjogcG9pbnRlcjsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cit9CisKKyNjbGVhci1jb21wbGV0
ZWQ6aG92ZXIgeworICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCisjaW5mbyB7
CisgICAgbWFyZ2luOiA2NXB4IGF1dG8gMDsKKyAgICBjb2xvcjogI2JmYmZiZjsKKyAgICBmb250
LXNpemU6IDEwcHg7CisgICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1
LCAwLjUpOworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworI2luZm8gcCB7CisgICAgbGlu
ZS1oZWlnaHQ6IDE7Cit9CisKKyNpbmZvIGEgeworICAgIGNvbG9yOiBpbmhlcml0OworICAgIHRl
eHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICBmb250LXdlaWdodDogNDAwOworfQorCisjaW5mbyBh
OmhvdmVyIHsKKyAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKworLyoKKyAgICBI
YWNrIHRvIHJlbW92ZSBiYWNrZ3JvdW5kIGZyb20gTW9iaWxlIFNhZmFyaS4KKyAgICBDYW4ndCB1
c2UgaXQgZ2xvYmFsbHkgc2luY2UgaXQgZGVzdHJveXMgY2hlY2tib3hlcyBpbiBGaXJlZm94Cisq
LworQG1lZGlhIHNjcmVlbiBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzowKSB7
CisgICAgI3RvZ2dsZS1hbGwsCisgICAgI3RvZG8tbGlzdCBsaSAudG9nZ2xlIHsKKyAgICAgICAg
YmFja2dyb3VuZDogbm9uZTsKKyAgICB9CisKKyAgICAjdG9kby1saXN0IGxpIC50b2dnbGUgewor
ICAgICAgICBoZWlnaHQ6IDQwcHg7CisgICAgfQorCisgICAgI3RvZ2dsZS1hbGwgeworICAgICAg
ICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKKyAgICAgICAgdHJhbnNmb3JtOiBy
b3RhdGUoOTBkZWcpOworICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CisgICAgICAg
IGFwcGVhcmFuY2U6IG5vbmU7CisgICAgfQorfQorCitAbWVkaWEgKG1heC13aWR0aDogNDMwcHgp
IHsKKyAgICAjZm9vdGVyIHsKKyAgICAgICAgaGVpZ2h0OiA1MHB4OworICAgIH0KKworICAgICNm
aWx0ZXJzIHsKKyAgICAgICAgYm90dG9tOiAxMHB4OworICAgIH0KK30KZGlmZiAtLWdpdCBhL1dl
YnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMtZGVidWcvdGVzdGVtLmpzIGIvV2Vic2l0ZXMv
YnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvZW1iZXJqcy1kZWJ1Zy90ZXN0ZW0uanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWZlMDg0
YzY4Mzg4Y2NmYzJhYTczNDQ1ZDFkNGM1N2MzNmNlYzZmOQotLS0gL2Rldi9udWxsCisrKyBiL1dl
YnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMtZGVidWcvdGVzdGVtLmpzCkBAIC0wLDAgKzEs
MTkgQEAKKy8qKgorICogVGhpcyBpcyBkdW1teSBmaWxlIHRoYXQgZXhpc3RzIGZvciB0aGUgc29s
ZSBwdXJwb3NlCisgKiBvZiBhbGxvd2luZyB0ZXN0cyB0byBydW4gZGlyZWN0bHkgaW4gdGhlIGJy
b3dzZXIgYXMKKyAqIHdlbGwgYXMgYnkgVGVzdGVtLgorICoKKyAqIFRlc3RlbSBpcyBjb25maWd1
cmVkIHRvIHJ1biB0ZXN0cyBkaXJlY3RseSBhZ2FpbnN0CisgKiB0aGUgdGVzdCBidWlsZCBvZiBp
bmRleC5odG1sLCB3aGljaCByZXF1aXJlcyBhCisgKiBzbmlwcGV0IHRvIGxvYWQgdGhlIHRlc3Rl
bS5qcyBmaWxlOgorICogICA8c2NyaXB0IHNyYz0iL3Rlc3RlbS5qcyI+PC9zY3JpcHQ+CisgKiBU
aGlzIGhhcyB0byBnbyBiZWZvcmUgdGhlIHF1bml0IGZyYW1ld29yayBhbmQgYXBwCisgKiB0ZXN0
cyBhcmUgbG9hZGVkLgorICoKKyAqIFRlc3RlbSBpbnRlcm5hbGx5IHN1cHBsaWVzIHRoaXMgZmls
ZS4gSG93ZXZlciwgaWYgeW91CisgKiBydW4gdGhlIHRlc3RzIGRpcmVjdGx5IGluIHRoZSBicm93
c2VyIChsb2NhbGhvc3Q6ODAwMC90ZXN0cyksCisgKiB0aGlzIGZpbGUgZG9lcyBub3QgZXhpc3Qu
CisgKgorICogSGVuY2UgdGhlIHB1cnBvc2Ugb2YgdGhpcyBmYWtlIGZpbGUuIFRoaXMgZmlsZSBp
cyBzZXJ2ZWQKKyAqIGRpcmVjdGx5IGZyb20gdGhlIGV4cHJlc3Mgc2VydmVyIHRvIHNhdGlzaWZ5
IHRoZSBzY3JpcHQgbG9hZC4KKyAqLwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNo
Lm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvZW1iZXJqcy1kZWJ1Zy90ZXN0cy9pbmRleC5odG1sIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNo
Lm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvZW1iZXJqcy1kZWJ1Zy90ZXN0cy9pbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJhYjIxOGU3YTk1
NDNlZjIwYWNkNGEzZTc2ZWU1YTU3MDYzNjM1MTMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRl
cy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hp
dGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzLWRlYnVnL3Rlc3RzL2luZGV4Lmh0bWwKQEAgLTAsMCAr
MSw0MSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPG1ldGEgY2hh
cnNldD0idXRmLTgiPgorICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29u
dGVudD0iSUU9ZWRnZSI+CisgICAgPHRpdGxlPlRvZG9tdmMgVGVzdHM8L3RpdGxlPgorICAgIDxt
ZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSIiPgorICAgIDxtZXRhIG5hbWU9InZpZXdw
b3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSI+CisKKyAg
ICA8YmFzZSBocmVmPSIvIiAvPgorPG1ldGEgbmFtZT0idG9kb212Yy9jb25maWcvZW52aXJvbm1l
bnQiIGNvbnRlbnQ9IiU3QiUyMm1vZHVsZVByZWZpeCUyMiUzQSUyMnRvZG9tdmMlMjIlMkMlMjJl
bnZpcm9ubWVudCUyMiUzQSUyMnRlc3QlMjIlMkMlMjJiYXNlVVJMJTIyJTNBJTIyLyUyMiUyQyUy
MmxvY2F0aW9uVHlwZSUyMiUzQSUyMm5vbmUlMjIlMkMlMjJFbWJlckVOViUyMiUzQSU3QiUyMkZF
QVRVUkVTJTIyJTNBJTdCJTdEJTdEJTJDJTIyQVBQJTIyJTNBJTdCJTIyTE9HX0FDVElWRV9HRU5F
UkFUSU9OJTIyJTNBZmFsc2UlMkMlMjJMT0dfVklFV19MT09LVVBTJTIyJTNBZmFsc2UlMkMlMjJy
b290RWxlbWVudCUyMiUzQSUyMiUyM2VtYmVyLXRlc3RpbmclMjIlMkMlMjJuYW1lJTIyJTNBJTIy
dG9kb212YyUyMiUyQyUyMnZlcnNpb24lMjIlM0ElMjIwLjAuMCslMjIlN0QlMkMlMjJleHBvcnRB
cHBsaWNhdGlvbkdsb2JhbCUyMiUzQXRydWUlN0QiIC8+CisgICAgCisKKyAgICA8bGluayByZWw9
InN0eWxlc2hlZXQiIGhyZWY9ImFzc2V0cy92ZW5kb3IuY3NzIj4KKyAgICA8bGluayByZWw9InN0
eWxlc2hlZXQiIGhyZWY9ImFzc2V0cy90b2RvbXZjLmNzcyI+CisgICAgPGxpbmsgcmVsPSJzdHls
ZXNoZWV0IiBocmVmPSJhc3NldHMvdGVzdC1zdXBwb3J0LmNzcyI+CisKKyAgICAKKyAgICAKKyAg
PC9oZWFkPgorICA8Ym9keT4KKyAgICAKKyAgICA8ZGl2IGlkPSJxdW5pdCI+PC9kaXY+Cis8ZGl2
IGlkPSJxdW5pdC1maXh0dXJlIj48L2Rpdj4KKworPGRpdiBpZD0iZW1iZXItdGVzdGluZy1jb250
YWluZXIiPgorICA8ZGl2IGlkPSJlbWJlci10ZXN0aW5nIj48L2Rpdj4KKzwvZGl2PgorCisKKyAg
ICA8c2NyaXB0IHNyYz0idGVzdGVtLmpzIiBpbnRlZ3JpdHk9IiI+PC9zY3JpcHQ+CisgICAgPHNj
cmlwdCBzcmM9ImFzc2V0cy92ZW5kb3IuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJh
c3NldHMvdGVzdC1zdXBwb3J0LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iYXNzZXRz
L3RvZG9tdmMuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJhc3NldHMvdGVzdHMuanMi
Pjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJhc3NldHMvdGVzdC1sb2FkZXIuanMiPjwvc2Ny
aXB0PgorCisgICAgCisgICAgPHNjcmlwdD5FbWJlci5hc3NlcnQoJ1RoZSB0ZXN0cyBmaWxlIHdh
cyBub3QgbG9hZGVkLiBNYWtlIHN1cmUgeW91ciB0ZXN0cyBpbmRleC5odG1sIGluY2x1ZGVzICJh
c3NldHMvdGVzdHMuanMiLicsIEVtYmVyRU5WLlRFU1RTX0ZJTEVfTE9BREVEKTs8L3NjcmlwdD4K
KyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9y
Zy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
ZW1iZXJqcy8uYm93ZXJyYyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIy
LjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvLmJvd2Vy
cmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOTU5ZTE2OTZlN2IyYzk3MDAwNWMzNWVjOGEwZjk0YWVhNWRmMzZhYwot
LS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIy
LjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvLmJvd2Vy
cmMKQEAgLTAsMCArMSw0IEBACit7CisgICJkaXJlY3RvcnkiOiAiYm93ZXJfY29tcG9uZW50cyIs
CisgICJhbmFseXRpY3MiOiBmYWxzZQorfQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJl
bmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvZW1iZXJqcy8uZW1iZXItY2xpIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVl
ZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJq
cy8uZW1iZXItY2xpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVlNjRjZmVkMmE4OTA1ZGMyMzUwNmFmMTA2MGVjODBj
Zjg4NzU4MmQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1Nw
ZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJl
cmpzLy5lbWJlci1jbGkKQEAgLTAsMCArMSw5IEBACit7CisgIC8qKgorICAgIEVtYmVyIENMSSBz
ZW5kcyBhbmFseXRpY3MgaW5mb3JtYXRpb24gYnkgZGVmYXVsdC4gVGhlIGRhdGEgaXMgY29tcGxl
dGVseQorICAgIGFub255bW91cywgYnV0IHRoZXJlIGFyZSB0aW1lcyB3aGVuIHlvdSBtaWdodCB3
YW50IHRvIGRpc2FibGUgdGhpcyBiZWhhdmlvci4KKworICAgIFNldHRpbmcgYGRpc2FibGVBbmFs
eXRpY3NgIHRvIHRydWUgd2lsbCBwcmV2ZW50IGFueSBkYXRhIGZyb20gYmVpbmcgc2VudC4KKyAg
Ki8KKyAgImRpc2FibGVBbmFseXRpY3MiOiBmYWxzZQorfQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMv
YnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvZW1iZXJqcy8uZ2l0aWdub3JlIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNo
Lm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvZW1iZXJqcy8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc2Y2ExZTU1YTVlMGQ3NGRhMzhiNzll
NTA2MGZhODM5NzllNWQ5NmUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVu
Y2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9lbWJlcmpzLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxOCBAQAorIyBTZWUgaHR0cDovL2hl
bHAuZ2l0aHViLmNvbS9pZ25vcmUtZmlsZXMvIGZvciBtb3JlIGFib3V0IGlnbm9yaW5nIGZpbGVz
LgorCisjIGNvbXBpbGVkIG91dHB1dAorIyAvZGlzdAorL2Rpc3QvYXNzZXRzLy5naXRrZWVwCisv
dG1wCisKKyMgZGVwZW5kZW5jaWVzCisvbm9kZV9tb2R1bGVzCisvYm93ZXJfY29tcG9uZW50cwor
CisjIG1pc2MKKy8uc2Fzcy1jYWNoZQorL2Nvbm5lY3QubG9jaworL2NvdmVyYWdlLyoKKy9saWJw
ZWVyY29ubmVjdGlvbi5sb2cKK25wbS1kZWJ1Zy5sb2cKK3Rlc3RlbS5sb2cKZGlmZiAtLWdpdCBh
L1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9t
dmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvLmpzaGludHJjIGIvV2Vic2l0ZXMvYnJv
d3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1
cmUtZXhhbXBsZXMvZW1iZXJqcy8uanNoaW50cmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDgwOTZlZmZhYWIzNzQ5
OTRhZGNiMzU3OGU5ODg2NzVhNGJlZmE4MgotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jy
b3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL2VtYmVyanMvLmpzaGludHJjCkBAIC0wLDAgKzEsMzIgQEAKK3sKKyAgInBy
ZWRlZiI6IFsKKyAgICAiZG9jdW1lbnQiLAorICAgICJ3aW5kb3ciLAorICAgICItUHJvbWlzZSIK
KyAgXSwKKyAgImJyb3dzZXIiOiB0cnVlLAorICAiYm9zcyI6IHRydWUsCisgICJjdXJseSI6IHRy
dWUsCisgICJkZWJ1ZyI6IGZhbHNlLAorICAiZGV2ZWwiOiB0cnVlLAorICAiZXFlcWVxIjogdHJ1
ZSwKKyAgImV2aWwiOiB0cnVlLAorICAiZm9yaW4iOiBmYWxzZSwKKyAgImltbWVkIjogZmFsc2Us
CisgICJsYXhicmVhayI6IGZhbHNlLAorICAibmV3Y2FwIjogdHJ1ZSwKKyAgIm5vYXJnIjogdHJ1
ZSwKKyAgIm5vZW1wdHkiOiBmYWxzZSwKKyAgIm5vbmV3IjogZmFsc2UsCisgICJub21lbiI6IGZh
bHNlLAorICAib25ldmFyIjogZmFsc2UsCisgICJwbHVzcGx1cyI6IGZhbHNlLAorICAicmVnZXhw
IjogZmFsc2UsCisgICJ1bmRlZiI6IHRydWUsCisgICJzdWIiOiB0cnVlLAorICAic3RyaWN0Ijog
ZmFsc2UsCisgICJ3aGl0ZSI6IGZhbHNlLAorICAiZXFudWxsIjogdHJ1ZSwKKyAgImVzbmV4dCI6
IHRydWUsCisgICJ1bnVzZWQiOiB0cnVlCit9CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2Vy
YmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9lbWJlcmpzL1JFQURNRS5tZCBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3Bl
ZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVy
anMvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1NjkwY2IzMGVlNmZkMTZmYTYzODliNTA1Y2RhMjI3
OWE0YjQ2OWMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1Nw
ZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJl
cmpzL1JFQURNRS5tZApAQCAtMCwwICsxLDggQEAKKyMgU3BlZWRvbWV0ZXIgMi4xOiBFbWJlci5q
cyBUb2RvTVZDIGV4YW1wbGUKKworIyMgVGVzdCBsb2NhbGx5CisKKzEuIGBucG0gaW5zdGFsbCAm
JiBib3dlciBpbnN0YWxsYAorMi4gYG5wbSBydW4gYnVpbGRgCiszLiBSdW4gYSBsb2NhbCBzZXJ2
ZXIgZnJvbSB0aGUgYGRpc3RgIGRpcmVjdG9yeS4gKFlvdSBjb3VsZCB1c2UgW2BucG0gaSAtZyBo
dHRwLXNlcnZlcmBdKGh0dHBzOi8vZ2l0aHViLmNvbS9pbmRleHplcm8vaHR0cC1zZXJ2ZXIpLikK
KzQuIE9wZW4gdGhlIFVSTCBwb2ludGluZyB0byB0aGUgbG9jYWwgc2VydmVyIGluIHlvdXIgd2Vi
IGJyb3dzZXIgb2YgY2hvaWNlLgpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9y
Zy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
ZW1iZXJqcy9hcHAvYXBwLmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRl
cjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9hcHAv
YXBwLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmYyNjBjNGM3MDZkMGFlMzc1Y2ZmYzY5NjlkZmU0MzRiNTlkMjk5
YjUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21l
dGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL2Fw
cC9hcHAuanMKQEAgLTAsMCArMSwxOCBAQAoraW1wb3J0IEVtYmVyIGZyb20gJ2VtYmVyJzsKK2lt
cG9ydCBSZXNvbHZlciBmcm9tICcuL3Jlc29sdmVyJzsKK2ltcG9ydCBsb2FkSW5pdGlhbGl6ZXJz
IGZyb20gJ2VtYmVyLWxvYWQtaW5pdGlhbGl6ZXJzJzsKK2ltcG9ydCBjb25maWcgZnJvbSAnLi9j
b25maWcvZW52aXJvbm1lbnQnOworCitsZXQgQXBwOworCitFbWJlci5NT0RFTF9GQUNUT1JZX0lO
SkVDVElPTlMgPSB0cnVlOworCitBcHAgPSBFbWJlci5BcHBsaWNhdGlvbi5leHRlbmQoeworICAg
IG1vZHVsZVByZWZpeDogY29uZmlnLm1vZHVsZVByZWZpeCwKKyAgICBwb2RNb2R1bGVQcmVmaXg6
IGNvbmZpZy5wb2RNb2R1bGVQcmVmaXgsCisgICAgUmVzb2x2ZXIKK30pOworCitsb2FkSW5pdGlh
bGl6ZXJzKEFwcCwgY29uZmlnLm1vZHVsZVByZWZpeCk7CisKK2V4cG9ydCBkZWZhdWx0IEFwcDsK
ZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVz
b3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvYXBwL2NvbXBvbmVu
dHMvdG9kby1pdGVtLmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIu
MS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9hcHAvY29t
cG9uZW50cy90b2RvLWl0ZW0uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGRlN2ZiZjExNjViMjYxNDU0MWE1NmEz
OTBkMWMzMzhjNDk4ZTA5MwotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5j
aC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL2VtYmVyanMvYXBwL2NvbXBvbmVudHMvdG9kby1pdGVtLmpzCkBAIC0wLDAgKzEsNDkgQEAK
K2ltcG9ydCBFbWJlciBmcm9tICdlbWJlcic7CisKK2V4cG9ydCBkZWZhdWx0IEVtYmVyLkNvbXBv
bmVudC5leHRlbmQoeworICAgIHJlcG86IEVtYmVyLmluamVjdC5zZXJ2aWNlKCksCisgICAgdGFn
TmFtZTogJ2xpJywKKyAgICBlZGl0aW5nOiBmYWxzZSwKKyAgICBjbGFzc05hbWVCaW5kaW5nczog
Wyd0b2RvLmNvbXBsZXRlZCcsICdlZGl0aW5nJ10sCisKKyAgICBhY3Rpb25zOiB7CisgICAgICAg
IHN0YXJ0RWRpdGluZygpIHsKKyAgICAgICAgICAgIHRoaXMuZ2V0KCdvblN0YXJ0RWRpdCcpKCk7
CisgICAgICAgICAgICB0aGlzLnNldCgnZWRpdGluZycsIHRydWUpOworICAgICAgICAgICAgRW1i
ZXIucnVuLnNjaGVkdWxlT25jZSgnYWZ0ZXJSZW5kZXInLCB0aGlzLCAnZm9jdXNJbnB1dCcpOwor
ICAgICAgICB9LAorCisgICAgICAgIGRvbmVFZGl0aW5nKHRvZG9UaXRsZSkgeworICAgICAgICAg
ICAgaWYgKCF0aGlzLmdldCgnZWRpdGluZycpKSB7IHJldHVybjsgfQorICAgICAgICAgICAgaWYg
KEVtYmVyLmlzQmxhbmsodG9kb1RpdGxlKSkgeworICAgICAgICAgICAgICAgIHRoaXMuc2VuZCgn
cmVtb3ZlVG9kbycpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlz
LnNldCgndG9kby50aXRsZScsIHRvZG9UaXRsZS50cmltKCkpOworICAgICAgICAgICAgICAgIHRo
aXMuc2V0KCdlZGl0aW5nJywgZmFsc2UpOworICAgICAgICAgICAgICAgIHRoaXMuZ2V0KCdvbkVu
ZEVkaXQnKSgpOworICAgICAgICAgICAgfQorICAgICAgICB9LAorCisgICAgICAgIGhhbmRsZUtl
eWRvd24oZSkgeworICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMTMpIHsKKyAgICAgICAg
ICAgICAgICBlLnRhcmdldC5ibHVyKCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGUua2V5Q29k
ZSA9PT0gMjcpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnNldCgnZWRpdGluZycsIGZhbHNlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKworICAgICAgICB0b2dnbGVDb21wbGV0ZWQoZSkg
eworICAgICAgICAgICAgbGV0IHRvZG8gPSB0aGlzLmdldCgndG9kbycpOworICAgICAgICAgICAg
RW1iZXIuc2V0KHRvZG8sICdjb21wbGV0ZWQnLCBlLnRhcmdldC5jaGVja2VkKTsKKyAgICAgICAg
ICAgIHRoaXMuZ2V0KCdyZXBvJykucGVyc2lzdCgpOworICAgICAgICB9LAorCisgICAgICAgIHJl
bW92ZVRvZG8oKSB7CisgICAgICAgICAgICB0aGlzLmdldCgncmVwbycpLmRlbGV0ZSh0aGlzLmdl
dCgndG9kbycpKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBmb2N1c0lucHV0KCkgeworICAg
ICAgICB0aGlzLmVsZW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXQuZWRpdCcpLmZvY3VzKCk7Cisg
ICAgfQorfSk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21l
dGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL2Fw
cC9jb21wb25lbnRzL3RvZG8tbGlzdC5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3Bl
ZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVy
anMvYXBwL2NvbXBvbmVudHMvdG9kby1saXN0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNkODE4M2NmYWNiODZi
NDYzZDA3OWU3NjE4ODAwZDQ1NGEzYzRmMzMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9i
cm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9lbWJlcmpzL2FwcC9jb21wb25lbnRzL3RvZG8tbGlzdC5qcwpAQCAtMCww
ICsxLDI4IEBACitpbXBvcnQgRW1iZXIgZnJvbSAnZW1iZXInOworCitleHBvcnQgZGVmYXVsdCBF
bWJlci5Db21wb25lbnQuZXh0ZW5kKHsKKyAgICByZXBvOiBFbWJlci5pbmplY3Quc2VydmljZSgp
LAorICAgIHRhZ05hbWU6ICdzZWN0aW9uJywKKyAgICBlbGVtZW50SWQ6ICdtYWluJywKKyAgICBj
bGFzc05hbWVzOiBbJ21haW4nXSwKKyAgICBjYW5Ub2dnbGU6IHRydWUsCisgICAgYWxsQ29tcGxl
dGVkOiBFbWJlci5jb21wdXRlZCgndG9kb3MuQGVhY2guY29tcGxldGVkJywgZnVuY3Rpb24gKCkg
eworICAgICAgICByZXR1cm4gdGhpcy5nZXQoJ3RvZG9zJykuaXNFdmVyeSgnY29tcGxldGVkJyk7
CisgICAgfSksCisKKyAgICBhY3Rpb25zOiB7CisgICAgICAgIGVuYWJsZVRvZ2dsZSgpIHsKKyAg
ICAgICAgICAgIHRoaXMuc2V0KCdjYW5Ub2dnbGUnLCB0cnVlKTsKKyAgICAgICAgfSwKKworICAg
ICAgICBkaXNhYmxlVG9nZ2xlKCkgeworICAgICAgICAgICAgdGhpcy5zZXQoJ2NhblRvZ2dsZScs
IGZhbHNlKTsKKyAgICAgICAgfSwKKworICAgICAgICB0b2dnbGVBbGwoKSB7CisgICAgICAgICAg
ICBsZXQgYWxsQ29tcGxldGVkID0gdGhpcy5nZXQoJ2FsbENvbXBsZXRlZCcpOworICAgICAgICAg
ICAgdGhpcy5nZXQoJ3RvZG9zJykuZm9yRWFjaCh0b2RvID0+IEVtYmVyLnNldCh0b2RvLCAnY29t
cGxldGVkJywgIWFsbENvbXBsZXRlZCkpOworICAgICAgICAgICAgdGhpcy5nZXQoJ3JlcG8nKS5w
ZXJzaXN0KCk7CisgICAgICAgIH0KKyAgICB9Cit9KTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jy
b3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL2VtYmVyanMvYXBwL2NvbnRyb2xsZXJzL2FjdGl2ZS5qcyBiL1dlYnNpdGVz
L2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvYXBwL2NvbnRyb2xsZXJzL2FjdGl2ZS5qcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5kZjAzZDQwNzkwMzg4OWExNDEzNzcxYTMxZGZjMTRiYTQ4OTM1YjI1Ci0tLSAvZGV2L251
bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9hcHAvY29udHJvbGxlcnMv
YWN0aXZlLmpzCkBAIC0wLDAgKzEsNSBAQAoraW1wb3J0IEVtYmVyIGZyb20gJ2VtYmVyJzsKKwor
ZXhwb3J0IGRlZmF1bHQgRW1iZXIuQ29udHJvbGxlci5leHRlbmQoeworICAgIHRvZG9zOiBFbWJl
ci5jb21wdXRlZC5maWx0ZXJCeSgnbW9kZWwnLCAnY29tcGxldGVkJywgZmFsc2UpCit9KTsKZGlm
ZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvYXBwL2NvbnRyb2xsZXJz
L2FwcGxpY2F0aW9uLmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIu
MS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9hcHAvY29u
dHJvbGxlcnMvYXBwbGljYXRpb24uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzgxNGU1ZmE3M2NkOWU4MWM2MzU3
ZmQ3MTFlNWU2ODdjMDliY2FmZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJi
ZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL2VtYmVyanMvYXBwL2NvbnRyb2xsZXJzL2FwcGxpY2F0aW9uLmpzCkBAIC0wLDAgKzEs
MjAgQEAKK2ltcG9ydCBFbWJlciBmcm9tICdlbWJlcic7CisKK2V4cG9ydCBkZWZhdWx0IEVtYmVy
LkNvbnRyb2xsZXIuZXh0ZW5kKHsKKyAgICByZXBvOiBFbWJlci5pbmplY3Quc2VydmljZSgpLAor
ICAgIHJlbWFpbmluZzogRW1iZXIuY29tcHV0ZWQuZmlsdGVyQnkoJ21vZGVsJywgJ2NvbXBsZXRl
ZCcsIGZhbHNlKSwKKyAgICBjb21wbGV0ZWQ6IEVtYmVyLmNvbXB1dGVkLmZpbHRlckJ5KCdtb2Rl
bCcsICdjb21wbGV0ZWQnKSwKKyAgICBhY3Rpb25zOiB7CisgICAgICAgIGNyZWF0ZVRvZG8oZSkg
eworICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMTMgJiYgIUVtYmVyLmlzQmxhbmsoZS50
YXJnZXQudmFsdWUpKSB7CisgICAgICAgICAgICAgICAgdGhpcy5nZXQoJ3JlcG8nKS5hZGQoeyB0
aXRsZTogZS50YXJnZXQudmFsdWUudHJpbSgpLCBjb21wbGV0ZWQ6IGZhbHNlIH0pOworICAgICAg
ICAgICAgICAgIGUudGFyZ2V0LnZhbHVlID0gJyc7CisgICAgICAgICAgICB9CisgICAgICAgIH0s
CisKKyAgICAgICAgY2xlYXJDb21wbGV0ZWQoKSB7CisgICAgICAgICAgICB0aGlzLmdldCgnbW9k
ZWwnKS5yZW1vdmVPYmplY3RzKHRoaXMuZ2V0KCdjb21wbGV0ZWQnKSk7CisgICAgICAgICAgICB0
aGlzLmdldCgncmVwbycpLnBlcnNpc3QoKTsKKyAgICAgICAgfQorICAgIH0KK30pOwpkaWZmIC0t
Z2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9hcHAvY29udHJvbGxlcnMvY29t
cGxldGVkLmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9hcHAvY29udHJvbGxl
cnMvY29tcGxldGVkLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYzNGQwMGFmZWY3ODA5YTczZDQxOTE1MWI4ZjAy
ZWM1ZTA1NjdmNWIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3Jn
L1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9l
bWJlcmpzL2FwcC9jb250cm9sbGVycy9jb21wbGV0ZWQuanMKQEAgLTAsMCArMSw1IEBACitpbXBv
cnQgRW1iZXIgZnJvbSAnZW1iZXInOworCitleHBvcnQgZGVmYXVsdCBFbWJlci5Db250cm9sbGVy
LmV4dGVuZCh7CisgICAgdG9kb3M6IEVtYmVyLmNvbXB1dGVkLmZpbHRlckJ5KCdtb2RlbCcsICdj
b21wbGV0ZWQnLCB0cnVlKQorfSk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gu
b3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9lbWJlcmpzL2FwcC9oZWxwZXJzL2d0LmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9T
cGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1i
ZXJqcy9hcHAvaGVscGVycy9ndC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMzcwNjk1YTJmOTQ1NjU5ZDlmNTg0
N2RiMTM3NjRlYWY2NjExMGViCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJl
bmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvZW1iZXJqcy9hcHAvaGVscGVycy9ndC5qcwpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCBF
bWJlciBmcm9tICdlbWJlcic7CisKK2V4cG9ydCBmdW5jdGlvbiBndChbbjEsIG4yXS8qLCBoYXNo
Ki8pIHsKKyAgICByZXR1cm4gbjEgPiBuMjsKK30KKworZXhwb3J0IGRlZmF1bHQgRW1iZXIuSGVs
cGVyLmhlbHBlcihndCk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1Nw
ZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJl
cmpzL2FwcC9oZWxwZXJzL3BsdXJhbGl6ZS5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcv
U3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2Vt
YmVyanMvYXBwL2hlbHBlcnMvcGx1cmFsaXplLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIxZjFhMmFjYzhmODU2
MTc4MGQwYjk1ZGZmNzNjYTk2MzNiNjg5YTUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9i
cm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9lbWJlcmpzL2FwcC9oZWxwZXJzL3BsdXJhbGl6ZS5qcwpAQCAtMCwwICsx
LDggQEAKK2ltcG9ydCBFbWJlciBmcm9tICdlbWJlcic7CitpbXBvcnQgeyBwbHVyYWxpemUgfSBm
cm9tICdlbWJlci1pbmZsZWN0b3InOworCitleHBvcnQgZnVuY3Rpb24gcGx1cmFsaXplSGVscGVy
KFtzaW5ndWxhciwgY291bnRdLyosIGhhc2gqLykgeworICAgIHJldHVybiBjb3VudCA9PT0gMSA/
IHNpbmd1bGFyIDogcGx1cmFsaXplKHNpbmd1bGFyKTsKK30KKworZXhwb3J0IGRlZmF1bHQgRW1i
ZXIuSGVscGVyLmhlbHBlcihwbHVyYWxpemVIZWxwZXIpOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMv
YnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9hcHAvaW5kZXguaHRtbCBiL1dlYnNpdGVzL2Jyb3dzZXJi
ZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL2VtYmVyanMvYXBwL2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmU0YWYwYmI0NzYwMDQ3
NWRhODk4NWZmOWUxOTUzMDFkOTBjZGU2YwotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jy
b3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL2VtYmVyanMvYXBwL2luZGV4Lmh0bWwKQEAgLTAsMCArMSwxOSBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNldD0idXRmLTgi
PgorICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRn
ZSI+CisgICAgPHRpdGxlPkVtYmVyLmpzIFRvZG9NVkMgZXhhbXBsZTwvdGl0bGU+CisgICAgPG1l
dGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IiI+CisgICAgPG1ldGEgbmFtZT0idmlld3Bv
cnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIj4KKyAgICB7
e2NvbnRlbnQtZm9yICJoZWFkIn19CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJ7
e3Jvb3RVUkx9fWFzc2V0cy92ZW5kb3IuY3NzIj4KKyAgICB7e2NvbnRlbnQtZm9yICJoZWFkLWZv
b3RlciJ9fQorICA8L2hlYWQ+CisgIDxib2R5PgorICAgIHt7Y29udGVudC1mb3IgImJvZHkifX0K
KyAgICA8c2NyaXB0IHNyYz0ie3tyb290VVJMfX1hc3NldHMvdmVuZG9yLmpzIj48L3NjcmlwdD4K
KyAgICA8c2NyaXB0IHNyYz0ie3tyb290VVJMfX1hc3NldHMvdG9kb212Yy5qcyI+PC9zY3JpcHQ+
CisgICAge3tjb250ZW50LWZvciAiYm9keS1mb290ZXIifX0KKyAgPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9hcHAvcmVzb2x2ZXIu
anMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90
b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL2FwcC9yZXNvbHZlci5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yZmI1NjNkNmMwNDg4ZjQxYmVjNDU0ZmUxZmE3YzIyOTk3NWE1OGRmCi0tLSAvZGV2
L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9hcHAvcmVzb2x2ZXIu
anMKQEAgLTAsMCArMSwzIEBACitpbXBvcnQgUmVzb2x2ZXIgZnJvbSAnZW1iZXItcmVzb2x2ZXIn
OworCitleHBvcnQgZGVmYXVsdCBSZXNvbHZlcjsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dz
ZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL2VtYmVyanMvYXBwL3JvdXRlci5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5v
cmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L2VtYmVyanMvYXBwL3JvdXRlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMGIzYmZjNDk2YWUxYmNmNjc1OGNk
OTNhZjZiZTE3NGZlY2JiNDY1Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJl
bmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvZW1iZXJqcy9hcHAvcm91dGVyLmpzCkBAIC0wLDAgKzEsMTQgQEAKK2ltcG9ydCBFbWJl
ciBmcm9tICdlbWJlcic7CitpbXBvcnQgY29uZmlnIGZyb20gJy4vY29uZmlnL2Vudmlyb25tZW50
JzsKKworY29uc3QgUm91dGVyID0gRW1iZXIuUm91dGVyLmV4dGVuZCh7CisgICAgbG9jYXRpb246
IGNvbmZpZy5sb2NhdGlvblR5cGUsCisgICAgcm9vdFVSTDogY29uZmlnLnJvb3RVUkwKK30pOwor
CitSb3V0ZXIubWFwKGZ1bmN0aW9uICgpIHsKKyAgICB0aGlzLnJvdXRlKCdhY3RpdmUnKTsKKyAg
ICB0aGlzLnJvdXRlKCdjb21wbGV0ZWQnKTsKK30pOworCitleHBvcnQgZGVmYXVsdCBSb3V0ZXI7
CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jl
c291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL2FwcC9yb3V0ZXMv
YXBwbGljYXRpb24uanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4x
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL2FwcC9yb3V0
ZXMvYXBwbGljYXRpb24uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjk2YTM3NWJhMmE2NTBjYmExMTk2OTc5NTE3
ODQ3ZjllZjY3ZjgxMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5v
cmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L2VtYmVyanMvYXBwL3JvdXRlcy9hcHBsaWNhdGlvbi5qcwpAQCAtMCwwICsxLDggQEAKK2ltcG9y
dCBFbWJlciBmcm9tICdlbWJlcic7CisKK2V4cG9ydCBkZWZhdWx0IEVtYmVyLlJvdXRlLmV4dGVu
ZCh7CisgICAgcmVwbzogRW1iZXIuaW5qZWN0LnNlcnZpY2UoKSwKKyAgICBtb2RlbCgpIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuZ2V0KCdyZXBvJykuZmluZEFsbCgpOworICAgIH0KK30pOwpkaWZm
IC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9hcHAvc2VydmljZXMvbWVt
b3J5LmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9hcHAvc2VydmljZXMvbWVt
b3J5LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjc0YzVjZGYxOWZkOWZkYjI2YTkwZjA5YTMwMWQ0M2RiZDM1Mjdk
NjEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21l
dGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL2Fw
cC9zZXJ2aWNlcy9tZW1vcnkuanMKQEAgLTAsMCArMSw3OCBAQAorKGZ1bmN0aW9uKHJvb3QpIHsK
KyAgdmFyIGxvY2FsU3RvcmFnZU1lbW9yeSA9IHt9OworICB2YXIgY2FjaGUgPSB7fTsKKworICAv
KioKKyAgICogbnVtYmVyIG9mIHN0b3JlZCBpdGVtcy4KKyAgICovCisgIGxvY2FsU3RvcmFnZU1l
bW9yeS5sZW5ndGggPSAwOworCisgIC8qKgorICAgKiByZXR1cm5zIGl0ZW0gZm9yIHBhc3NlZCBr
ZXksIG9yIG51bGwKKyAgICoKKyAgICogQHBhcmEge1N0cmluZ30ga2V5CisgICAqICAgICAgIG5h
bWUgb2YgaXRlbSB0byBiZSByZXR1cm5lZAorICAgKiBAcmV0dXJucyB7U3RyaW5nfG51bGx9Cisg
ICAqLworICBsb2NhbFN0b3JhZ2VNZW1vcnkuZ2V0SXRlbSA9IGZ1bmN0aW9uKGtleSkgeworICAg
IHJldHVybiBjYWNoZVtrZXldIHx8IG51bGw7CisgIH07CisKKyAgLyoqCisgICAqIHNldHMgaXRl
bSBmb3Iga2V5IHRvIHBhc3NlZCB2YWx1ZSwgYXMgU3RyaW5nCisgICAqCisgICAqIEBwYXJhIHtT
dHJpbmd9IGtleQorICAgKiAgICAgICBuYW1lIG9mIGl0ZW0gdG8gYmUgc2V0CisgICAqIEBwYXJh
IHtTdHJpbmd9IHZhbHVlCisgICAqICAgICAgIHZhbHVlLCB3aWxsIGFsd2F5cyBiZSB0dXJuZWQg
aW50byBhIFN0cmluZworICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQorICAgKi8KKyAgbG9jYWxT
dG9yYWdlTWVtb3J5LnNldEl0ZW0gPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7CisgICAgaWYgKHR5
cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgIGxvY2FsU3RvcmFnZU1lbW9yeS5y
ZW1vdmVJdGVtKGtleSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGlmICghKGNhY2hlLmhhc093blBy
b3BlcnR5KGtleSkpKSB7CisgICAgICAgIGxvY2FsU3RvcmFnZU1lbW9yeS5sZW5ndGgrKzsKKyAg
ICAgIH0KKworICAgICAgY2FjaGVba2V5XSA9ICcnICsgdmFsdWU7CisgICAgfQorICB9OworCisg
IC8qKgorICAgKiByZW1vdmVzIGl0ZW0gZm9yIHBhc3NlZCBrZXkKKyAgICoKKyAgICogQHBhcmEg
e1N0cmluZ30ga2V5CisgICAqICAgICAgIG5hbWUgb2YgaXRlbSB0byBiZSByZW1vdmVkCisgICAq
IEByZXR1cm5zIHt1bmRlZmluZWR9CisgICAqLworICBsb2NhbFN0b3JhZ2VNZW1vcnkucmVtb3Zl
SXRlbSA9IGZ1bmN0aW9uKGtleSkgeworICAgIGlmIChjYWNoZS5oYXNPd25Qcm9wZXJ0eShrZXkp
KSB7CisgICAgICBkZWxldGUgY2FjaGVba2V5XTsKKyAgICAgIGxvY2FsU3RvcmFnZU1lbW9yeS5s
ZW5ndGgtLTsKKyAgICB9CisgIH07CisKKyAgLyoqCisgICAqIHJldHVybnMgbmFtZSBvZiBrZXkg
YXQgcGFzc2VkIGluZGV4CisgICAqCisgICAqIEBwYXJhIHtOdW1iZXJ9IGluZGV4CisgICAqICAg
ICAgIFBvc2l0aW9uIGZvciBrZXkgdG8gYmUgcmV0dXJuZWQgKHN0YXJ0cyBhdCAwKQorICAgKiBA
cmV0dXJucyB7U3RyaW5nfG51bGx9CisgICAqLworICBsb2NhbFN0b3JhZ2VNZW1vcnkua2V5ID0g
ZnVuY3Rpb24oaW5kZXgpIHsKKyAgICByZXR1cm4gT2JqZWN0LmtleXMoY2FjaGUpW2luZGV4XSB8
fCBudWxsOworICB9OworCisgIC8qKgorICAgKiByZW1vdmVzIGFsbCBzdG9yZWQgaXRlbXMgYW5k
IHNldHMgbGVuZ3RoIHRvIDAKKyAgICoKKyAgICogQHJldHVybnMge3VuZGVmaW5lZH0KKyAgICov
CisgIGxvY2FsU3RvcmFnZU1lbW9yeS5jbGVhciA9IGZ1bmN0aW9uKCkgeworICAgIGNhY2hlID0g
e307CisgICAgbG9jYWxTdG9yYWdlTWVtb3J5Lmxlbmd0aCA9IDA7CisgIH07CisKKyAgICByb290
LmxvY2FsU3RvcmFnZU1lbW9yeSA9IGxvY2FsU3RvcmFnZU1lbW9yeTsKK30pKHdpbmRvdyk7CmRp
ZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL2FwcC9zZXJ2aWNlcy9y
ZXBvLmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9hcHAvc2VydmljZXMvcmVw
by5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5jZmZhMzg1OGZkNzdiYmJhNWM0MzVlYTVjOWM4ODk4YWQxNzczYjhh
Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRl
cjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9hcHAv
c2VydmljZXMvcmVwby5qcwpAQCAtMCwwICsxLDI3IEBACitpbXBvcnQgRW1iZXIgZnJvbSAnZW1i
ZXInOworaW1wb3J0IGxvY2FsU3RvcmFnZU1lbW9yeSBmcm9tICcuL21lbW9yeSc7CisKK2V4cG9y
dCBkZWZhdWx0IEVtYmVyLlNlcnZpY2UuZXh0ZW5kKHsKKyAgICBsYXN0SWQ6IDAsCisgICAgZGF0
YTogbnVsbCwKKyAgICBmaW5kQWxsKCkgeworICAgICAgICByZXR1cm4gdGhpcy5nZXQoJ2RhdGEn
KSB8fAorICAgICAgICAgICAgdGhpcy5zZXQoJ2RhdGEnLCBKU09OLnBhcnNlKHdpbmRvdy5sb2Nh
bFN0b3JhZ2VNZW1vcnkuZ2V0SXRlbSgndG9kb3MnKSB8fCAnW10nKSk7CisgICAgfSwKKworICAg
IGFkZChhdHRycykgeworICAgICAgICBsZXQgdG9kbyA9IE9iamVjdC5hc3NpZ24oeyBpZDogdGhp
cy5pbmNyZW1lbnRQcm9wZXJ0eSgnbGFzdElkJykgfSwgYXR0cnMpOworICAgICAgICB0aGlzLmdl
dCgnZGF0YScpLnB1c2hPYmplY3QodG9kbyk7CisgICAgICAgIHRoaXMucGVyc2lzdCgpOworICAg
ICAgICByZXR1cm4gdG9kbzsKKyAgICB9LAorCisgICAgZGVsZXRlKHRvZG8pIHsKKyAgICAgICAg
dGhpcy5nZXQoJ2RhdGEnKS5yZW1vdmVPYmplY3QodG9kbyk7CisgICAgICAgIHRoaXMucGVyc2lz
dCgpOworICAgIH0sCisKKyAgICBwZXJzaXN0KCkgeworICAgICAgICB3aW5kb3cubG9jYWxTdG9y
YWdlTWVtb3J5LnNldEl0ZW0oJ3RvZG9zJywgSlNPTi5zdHJpbmdpZnkodGhpcy5nZXQoJ2RhdGEn
KSkpOworICAgIH0KK30pOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9T
cGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1i
ZXJqcy9hcHAvc3R5bGVzLy5naXRrZWVwIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVl
ZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJq
cy9hcHAvc3R5bGVzLy5naXRrZWVwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVkZjU4MTkyMTI5MDE4MTQzOGI0NzQ4
YzdlNjI3MmI1MzI4NDIzZjEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVu
Y2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9lbWJlcmpzL2FwcC9zdHlsZXMvLmdpdGtlZXAKQEAgLTAsMCArMSwyIEBACisjIFRoaXMg
ZmlsZSBlbnN1cmVzIHRoZSBgYXBwL3N0eWxlc2AgZGlyZWN0b3J5IGlzIGluY2x1ZGVkIGluIHRo
ZSByZXBvc2l0b3J5LgorIyBXaXRob3V0IHRoYXQgZGlyZWN0b3J5IHByZXNlbnQsIHRoZSBFbWJl
ciBUb2RvTVZDIGV4YW1wbGUgZmFpbHMgdG8gYnVpbGQuCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9i
cm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9lbWJlcmpzL2FwcC90ZW1wbGF0ZXMvYWN0aXZlLmhicyBiL1dlYnNpdGVz
L2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvYXBwL3RlbXBsYXRlcy9hY3RpdmUuaGJzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmRlMjQ0ZjQ4N2QyMzgzNDQ4YTQyYTU5ZGYwYmY0MjU2NGUyMWY1NzMKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL2FwcC90ZW1wbGF0ZXMvYWN0
aXZlLmhicwpAQCAtMCwwICsxIEBACit7e3RvZG8tbGlzdCB0b2Rvcz10b2Rvc319ClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9y
Zy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
ZW1iZXJqcy9hcHAvdGVtcGxhdGVzL2FwcGxpY2F0aW9uLmhicyBiL1dlYnNpdGVzL2Jyb3dzZXJi
ZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL2VtYmVyanMvYXBwL3RlbXBsYXRlcy9hcHBsaWNhdGlvbi5oYnMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NzBiZjExOTZhOTJhZjIyZWEzMDQzOTNiYjg0NjMxOTE2ZTQ4MGI0ZAotLS0gL2Rldi9udWxsCisr
KyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvYXBwL3RlbXBsYXRlcy9hcHBsaWNh
dGlvbi5oYnMKQEAgLTAsMCArMSwyOSBAQAorPHNlY3Rpb24gaWQ9InRvZG9hcHAiIGNsYXNzPSJ0
b2RvYXBwIj4KKyAgPGhlYWRlciBpZD0iaGVhZGVyIiBjbGFzcz0iaGVhZGVyIj4KKyAgICA8aDE+
dG9kb3M8L2gxPgorICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ibmV3LXRvZG8iIGNsYXNzPSJu
ZXctdG9kbyIgb25rZXlkb3duPXt7YWN0aW9uICdjcmVhdGVUb2RvJ319IHBsYWNlaG9sZGVyPSJX
aGF0IG5lZWRzIHRvIGJlIGRvbmU/IiBhdXRvZm9jdXM+CisgIDwvaGVhZGVyPgorICAgIHt7b3V0
bGV0fX0KKyAgICB7eyNpZiAoZ3QgbW9kZWwubGVuZ3RoIDApfX0KKyAgICAgIDxmb290ZXIgaWQ9
ImZvb3RlciIgY2xhc3M9ImZvb3RlciI+CisgICAgICAgIDxzcGFuIGlkPSJ0b2RvLWNvdW50IiBj
bGFzcz0idG9kby1jb3VudCI+PHN0cm9uZz57e3JlbWFpbmluZy5sZW5ndGh9fTwvc3Ryb25nPiB7
e3BsdXJhbGl6ZSAnaXRlbScgcmVtYWluaW5nLmxlbmd0aH19IGxlZnQ8L3NwYW4+CisgICAgICAg
IDx1bCBpZD0iZmlsdGVycyIgY2xhc3M9ImZpbHRlcnMiPgorICAgICAgICAgIDxsaT57eyNsaW5r
LXRvICJpbmRleCIgYWN0aXZlQ2xhc3M9InNlbGVjdGVkIn19QWxse3svbGluay10b319PC9saT4K
KyAgICAgICAgICA8bGk+e3sjbGluay10byAiYWN0aXZlIiBhY3RpdmVDbGFzcz0ic2VsZWN0ZWQi
fX1BY3RpdmV7ey9saW5rLXRvfX08L2xpPgorICAgICAgICAgIDxsaT57eyNsaW5rLXRvICJjb21w
bGV0ZWQiIGFjdGl2ZUNsYXNzPSJzZWxlY3RlZCJ9fUNvbXBsZXRlZHt7L2xpbmstdG99fTwvbGk+
CisgICAgICAgIDwvdWw+CisgICAgICAgIHt7I2lmIGNvbXBsZXRlZC5sZW5ndGh9fQorICAgICAg
ICAgIDxidXR0b24gaWQ9ImNsZWFyLWNvbXBsZXRlZCIgY2xhc3M9ImNsZWFyLWNvbXBsZXRlZCIg
b25jbGljaz17e2FjdGlvbiAnY2xlYXJDb21wbGV0ZWQnfX0+Q2xlYXIgY29tcGxldGVkPC9idXR0
b24+CisgICAgICAgIHt7L2lmfX0KKyAgICAgIDwvZm9vdGVyPgorICAgIHt7L2lmfX0KKzwvc2Vj
dGlvbj4KKzxmb290ZXIgaWQ9ImluZm8iIGNsYXNzPSJpbmZvIj4KKyAgPHA+RG91YmxlLWNsaWNr
IHRvIGVkaXQgYSB0b2RvPC9wPgorICA8cD4KKyAgICBDcmVhdGVkIGJ5CisgICAgPGEgaHJlZj0i
aHR0cDovL2dpdGh1Yi5jb20vY2liZXJub3giPk1pZ3VlbCBDYW1iYTwvYT4sCisgICAgPGEgaHJl
Zj0iaHR0cDovL2dpdGh1Yi5jb20vYWRkeW9zbWFuaSI+QWRkeSBPc21hbmk8L2E+CisgIDwvcD4K
KyAgPHA+UGFydCBvZiA8YSBocmVmPSJodHRwOi8vdG9kb212Yy5jb20iPlRvZG9NVkM8L2E+PC9w
PgorPC9mb290ZXI+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2Vi
c2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9hcHAvdGVtcGxhdGVzL2NvbXBsZXRlZC5oYnMg
Yi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2Rv
bXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL2FwcC90ZW1wbGF0ZXMvY29tcGxldGVk
LmhicwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5kZTI0NGY0ODdkMjM4MzQ0OGE0MmE1OWRmMGJmNDI1NjRlMjFmNTcz
Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRl
cjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9hcHAv
dGVtcGxhdGVzL2NvbXBsZXRlZC5oYnMKQEAgLTAsMCArMSBAQAore3t0b2RvLWxpc3QgdG9kb3M9
dG9kb3N9fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1dlYnNpdGVz
L2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvYXBwL3RlbXBsYXRlcy9jb21wb25lbnRzL3RvZG8taXRl
bS5oYnMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL2FwcC90ZW1wbGF0ZXMvY29t
cG9uZW50cy90b2RvLWl0ZW0uaGJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMwNjk3NWU4NjVlN2I5YTA0Mjc4NWU4
YjM4OTc3ZjM0YWFkM2RiYzYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVu
Y2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9lbWJlcmpzL2FwcC90ZW1wbGF0ZXMvY29tcG9uZW50cy90b2RvLWl0ZW0uaGJzCkBAIC0w
LDAgKzEsNiBAQAorPGRpdiBjbGFzcz0idmlldyI+CisgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIg
Y2xhc3M9InRvZ2dsZSIgY2hlY2tlZD17e3RvZG8uY29tcGxldGVkfX0gb25jaGFuZ2U9e3thY3Rp
b24gJ3RvZ2dsZUNvbXBsZXRlZCd9fT4KKyAgPGxhYmVsIG9uZGJsY2xpY2s9e3thY3Rpb24gJ3N0
YXJ0RWRpdGluZyd9fT57e3RvZG8udGl0bGV9fTwvbGFiZWw+CisgIDxidXR0b24gb25jbGljaz17
e2FjdGlvbiAncmVtb3ZlVG9kbyd9fSBjbGFzcz0iZGVzdHJveSI+PC9idXR0b24+Cis8L2Rpdj4K
KzxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZWRpdCIgdmFsdWU9e3t0b2RvLnRpdGxlfX0gb25i
bHVyPXt7YWN0aW9uICdkb25lRWRpdGluZycgdmFsdWU9J3RhcmdldC52YWx1ZSd9fSBvbmtleWRv
d249e3thY3Rpb24gJ2hhbmRsZUtleWRvd24nfX0gYXV0b2ZvY3VzPgpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRv
bWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMv
YXBwL3RlbXBsYXRlcy9jb21wb25lbnRzL3RvZG8tbGlzdC5oYnMgYi9XZWJzaXRlcy9icm93c2Vy
YmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9lbWJlcmpzL2FwcC90ZW1wbGF0ZXMvY29tcG9uZW50cy90b2RvLWxpc3QuaGJzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjRlM2MyYjI5ZjFlODcwZDg3ZWY5ZmFjNGE2N2I5YjcxYmYzNDAxODAKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jl
c291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL2FwcC90ZW1wbGF0
ZXMvY29tcG9uZW50cy90b2RvLWxpc3QuaGJzCkBAIC0wLDAgKzEsMTAgQEAKK3t7I2lmIHRvZG9z
Lmxlbmd0aH19CisgIHt7I2lmIGNhblRvZ2dsZX19CisgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94
IiBpZD0idG9nZ2xlLWFsbCIgY2xhc3M9InRvZ2dsZS1hbGwiIGNoZWNrZWQ9e3thbGxDb21wbGV0
ZWR9fSBvbmNoYW5nZT17e2FjdGlvbiAndG9nZ2xlQWxsJ319PgorICB7ey9pZn19CisgIDx1bCBp
ZD0idG9kby1saXN0IiBjbGFzcz0idG9kby1saXN0Ij4KKyAgICB7eyNlYWNoIHRvZG9zIGFzIHx0
b2RvfH19CisgICAgICB7e3RvZG8taXRlbSB0b2RvPXRvZG8gb25TdGFydEVkaXQ9KGFjdGlvbiAn
ZGlzYWJsZVRvZ2dsZScpIG9uRW5kRWRpdD0oYWN0aW9uICdlbmFibGVUb2dnbGUnKX19CisgICAg
e3svZWFjaH19CisgIDwvdWw+Cit7ey9pZn19CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2Vy
YmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9lbWJlcmpzL2FwcC90ZW1wbGF0ZXMvaW5kZXguaGJzIGIvV2Vic2l0ZXMvYnJvd3Nl
cmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvZW1iZXJqcy9hcHAvdGVtcGxhdGVzL2luZGV4LmhicwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZDU1
NjVjMzZhYjM3ZGVhOWExYzQxOWRkZWE3NTNiZjE5NThjZDZmCi0tLSAvZGV2L251bGwKKysrIGIv
V2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212
Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9hcHAvdGVtcGxhdGVzL2luZGV4LmhicwpA
QCAtMCwwICsxLDMgQEAKK3t7I2lmIG1vZGVsLmxlbmd0aH19CisgIHt7dG9kby1saXN0IHRvZG9z
PW1vZGVsfX0KK3t7L2lmfX0KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcv
U3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2Vt
YmVyanMvY29uZmlnL2Vudmlyb25tZW50LmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9T
cGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1i
ZXJqcy9jb25maWcvZW52aXJvbm1lbnQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2QzMGQ5YjljNzFiM2E2NDNk
M2VlNjI3MThjZGJmNGE2ODNjNmQ5ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dz
ZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL2VtYmVyanMvY29uZmlnL2Vudmlyb25tZW50LmpzCkBAIC0wLDAgKzEsNTEgQEAK
Ky8qIGpzaGludCBub2RlOiB0cnVlICovCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGVu
dmlyb25tZW50KSB7CisgICAgdmFyIEVOViA9IHsKKyAgICAgICAgbW9kdWxlUHJlZml4OiAndG9k
b212YycsCisgICAgICAgIGVudmlyb25tZW50OiBlbnZpcm9ubWVudCwKKyAgICAgICAgYmFzZVVS
TDogbnVsbCwKKyAgICAgICAgbG9jYXRpb25UeXBlOiAnaGFzaCcsCisgICAgICAgIEVtYmVyRU5W
OiB7CisgICAgICAgICAgICBGRUFUVVJFUzogeworICAgICAgICAgICAgICAgIC8vIEhlcmUgeW91
IGNhbiBlbmFibGUgZXhwZXJpbWVudGFsIGZlYXR1cmVzIG9uIGFuIGVtYmVyIGNhbmFyeSBidWls
ZAorICAgICAgICAgICAgICAgIC8vIGUuZy4gJ3dpdGgtY29udHJvbGxlcic6IHRydWUKKyAgICAg
ICAgICAgIH0sCisgICAgICAgICAgICBFWFRFTkRfUFJPVE9UWVBFUzogeworICAgICAgICAgICAg
ICAgIC8vIFByZXZlbnQgRW1iZXIgRGF0YSBmcm9tIG92ZXJyaWRpbmcgRGF0ZS5wYXJzZS4KKyAg
ICAgICAgICAgICAgICBEYXRlOiBmYWxzZQorICAgICAgICAgICAgfQorICAgICAgICB9LAorCisg
ICAgICAgIEFQUDogeworICAgICAgICAgICAgLy8gSGVyZSB5b3UgY2FuIHBhc3MgZmxhZ3Mvb3B0
aW9ucyB0byB5b3VyIGFwcGxpY2F0aW9uIGluc3RhbmNlCisgICAgICAgICAgICAvLyB3aGVuIGl0
IGlzIGNyZWF0ZWQKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvLyBpZiAoZW52aXJvbm1lbnQg
PT09ICdkZXZlbG9wbWVudCcpIHsKKyAgICAvLyAgICAgRU5WLkFQUC5MT0dfUkVTT0xWRVIgPSB0
cnVlOworICAgIC8vICAgICBFTlYuQVBQLkxPR19BQ1RJVkVfR0VORVJBVElPTiA9IHRydWU7Cisg
ICAgLy8gICAgIEVOVi5BUFAuTE9HX1RSQU5TSVRJT05TID0gdHJ1ZTsKKyAgICAvLyAgICAgRU5W
LkFQUC5MT0dfVFJBTlNJVElPTlNfSU5URVJOQUwgPSB0cnVlOworICAgIC8vICAgICBFTlYuQVBQ
LkxPR19WSUVXX0xPT0tVUFMgPSB0cnVlOworICAgIC8vIH0KKworICAgIGlmIChlbnZpcm9ubWVu
dCA9PT0gJ3Rlc3QnKSB7CisgICAgICAgIC8vIFRlc3RlbSBwcmVmZXJzIHRoaXMuLi4KKyAgICAg
ICAgRU5WLnJvb3RVUkwgPSAnLyc7CisgICAgICAgIEVOVi5sb2NhdGlvblR5cGUgPSAnbm9uZSc7
CisKKyAgICAgICAgLy8ga2VlcCB0ZXN0IGNvbnNvbGUgb3V0cHV0IHF1aWV0ZXIKKyAgICAgICAg
RU5WLkFQUC5MT0dfQUNUSVZFX0dFTkVSQVRJT04gPSBmYWxzZTsKKyAgICAgICAgRU5WLkFQUC5M
T0dfVklFV19MT09LVVBTID0gZmFsc2U7CisKKyAgICAgICAgRU5WLkFQUC5yb290RWxlbWVudCA9
ICcjZW1iZXItdGVzdGluZyc7CisgICAgfQorCisgICAgLy8gaWYgKGVudmlyb25tZW50ID09PSAn
cHJvZHVjdGlvbicpIHsKKworICAgIC8vIH0KKworICAgIHJldHVybiBFTlY7Cit9OwpkaWZmIC0t
Z2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9kaXN0L2Fzc2V0cy90b2RvbXZj
LTVkM2U4ZWIzZDViMzc0MGEzMzE4NWVkY2IxMWVlYjU3LmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJl
bmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvZW1iZXJqcy9kaXN0L2Fzc2V0cy90b2RvbXZjLTVkM2U4ZWIzZDViMzc0MGEzMzE4NWVk
Y2IxMWVlYjU3LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYzOTAyMzdiYmE1OGUwODdkMzg0ZmZlZWNjNDM4MjEy
YWI1MzA5NzcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1Nw
ZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJl
cmpzL2Rpc3QvYXNzZXRzL3RvZG9tdmMtNWQzZThlYjNkNWIzNzQwYTMzMTg1ZWRjYjExZWViNTcu
anMKQEAgLTAsMCArMSwzMCBAQAorInVzZSBzdHJpY3QiCitkZWZpbmUoInRvZG9tdmMvYXBwIixb
ImV4cG9ydHMiLCJlbWJlciIsInRvZG9tdmMvcmVzb2x2ZXIiLCJlbWJlci1sb2FkLWluaXRpYWxp
emVycyIsInRvZG9tdmMvY29uZmlnL2Vudmlyb25tZW50Il0sZnVuY3Rpb24oZSx0LG8sbixsKXt2
YXIgaT12b2lkIDAKK3QuZGVmYXVsdC5NT0RFTF9GQUNUT1JZX0lOSkVDVElPTlM9ITAsaT10LmRl
ZmF1bHQuQXBwbGljYXRpb24uZXh0ZW5kKHttb2R1bGVQcmVmaXg6bC5kZWZhdWx0Lm1vZHVsZVBy
ZWZpeCxwb2RNb2R1bGVQcmVmaXg6bC5kZWZhdWx0LnBvZE1vZHVsZVByZWZpeCxSZXNvbHZlcjpv
LmRlZmF1bHR9KSwoMCxuLmRlZmF1bHQpKGksbC5kZWZhdWx0Lm1vZHVsZVByZWZpeCksZS5kZWZh
dWx0PWl9KSxkZWZpbmUoInRvZG9tdmMvY29tcG9uZW50cy90b2RvLWl0ZW0iLFsiZXhwb3J0cyIs
ImVtYmVyIl0sZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dC5kZWZhdWx0LkNvbXBvbmVudC5leHRl
bmQoe3JlcG86dC5kZWZhdWx0LmluamVjdC5zZXJ2aWNlKCksdGFnTmFtZToibGkiLGVkaXRpbmc6
ITEsY2xhc3NOYW1lQmluZGluZ3M6WyJ0b2RvLmNvbXBsZXRlZCIsImVkaXRpbmciXSxhY3Rpb25z
OntzdGFydEVkaXRpbmc6ZnVuY3Rpb24oKXt0aGlzLmdldCgib25TdGFydEVkaXQiKSgpLHRoaXMu
c2V0KCJlZGl0aW5nIiwhMCksdC5kZWZhdWx0LnJ1bi5zY2hlZHVsZU9uY2UoImFmdGVyUmVuZGVy
Iix0aGlzLCJmb2N1c0lucHV0Iil9LGRvbmVFZGl0aW5nOmZ1bmN0aW9uKGUpe3RoaXMuZ2V0KCJl
ZGl0aW5nIikmJih0LmRlZmF1bHQuaXNCbGFuayhlKT90aGlzLnNlbmQoInJlbW92ZVRvZG8iKToo
dGhpcy5zZXQoInRvZG8udGl0bGUiLGUudHJpbSgpKSx0aGlzLnNldCgiZWRpdGluZyIsITEpLHRo
aXMuZ2V0KCJvbkVuZEVkaXQiKSgpKSl9LGhhbmRsZUtleWRvd246ZnVuY3Rpb24oZSl7MTM9PT1l
LmtleUNvZGU/ZS50YXJnZXQuYmx1cigpOjI3PT09ZS5rZXlDb2RlJiZ0aGlzLnNldCgiZWRpdGlu
ZyIsITEpfSx0b2dnbGVDb21wbGV0ZWQ6ZnVuY3Rpb24oZSl7dmFyIG89dGhpcy5nZXQoInRvZG8i
KQordC5kZWZhdWx0LnNldChvLCJjb21wbGV0ZWQiLGUudGFyZ2V0LmNoZWNrZWQpLHRoaXMuZ2V0
KCJyZXBvIikucGVyc2lzdCgpfSxyZW1vdmVUb2RvOmZ1bmN0aW9uKCl7dGhpcy5nZXQoInJlcG8i
KS5kZWxldGUodGhpcy5nZXQoInRvZG8iKSl9fSxmb2N1c0lucHV0OmZ1bmN0aW9uKCl7dGhpcy5l
bGVtZW50LnF1ZXJ5U2VsZWN0b3IoImlucHV0LmVkaXQiKS5mb2N1cygpfX0pfSksZGVmaW5lKCJ0
b2RvbXZjL2NvbXBvbmVudHMvdG9kby1saXN0IixbImV4cG9ydHMiLCJlbWJlciJdLGZ1bmN0aW9u
KGUsdCl7ZS5kZWZhdWx0PXQuZGVmYXVsdC5Db21wb25lbnQuZXh0ZW5kKHtyZXBvOnQuZGVmYXVs
dC5pbmplY3Quc2VydmljZSgpLHRhZ05hbWU6InNlY3Rpb24iLGVsZW1lbnRJZDoibWFpbiIsY2xh
c3NOYW1lczpbIm1haW4iXSxjYW5Ub2dnbGU6ITAsYWxsQ29tcGxldGVkOnQuZGVmYXVsdC5jb21w
dXRlZCgidG9kb3MuQGVhY2guY29tcGxldGVkIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldCgi
dG9kb3MiKS5pc0V2ZXJ5KCJjb21wbGV0ZWQiKX0pLGFjdGlvbnM6e2VuYWJsZVRvZ2dsZTpmdW5j
dGlvbigpe3RoaXMuc2V0KCJjYW5Ub2dnbGUiLCEwKX0sZGlzYWJsZVRvZ2dsZTpmdW5jdGlvbigp
e3RoaXMuc2V0KCJjYW5Ub2dnbGUiLCExKX0sdG9nZ2xlQWxsOmZ1bmN0aW9uKCl7dmFyIGU9dGhp
cy5nZXQoImFsbENvbXBsZXRlZCIpCit0aGlzLmdldCgidG9kb3MiKS5mb3JFYWNoKGZ1bmN0aW9u
KG8pe3JldHVybiB0LmRlZmF1bHQuc2V0KG8sImNvbXBsZXRlZCIsIWUpfSksdGhpcy5nZXQoInJl
cG8iKS5wZXJzaXN0KCl9fX0pfSksZGVmaW5lKCJ0b2RvbXZjL2NvbnRyb2xsZXJzL2FjdGl2ZSIs
WyJleHBvcnRzIiwiZW1iZXIiXSxmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10LmRlZmF1bHQuQ29u
dHJvbGxlci5leHRlbmQoe3RvZG9zOnQuZGVmYXVsdC5jb21wdXRlZC5maWx0ZXJCeSgibW9kZWwi
LCJjb21wbGV0ZWQiLCExKX0pfSksZGVmaW5lKCJ0b2RvbXZjL2NvbnRyb2xsZXJzL2FwcGxpY2F0
aW9uIixbImV4cG9ydHMiLCJlbWJlciJdLGZ1bmN0aW9uKGUsdCl7ZS5kZWZhdWx0PXQuZGVmYXVs
dC5Db250cm9sbGVyLmV4dGVuZCh7cmVwbzp0LmRlZmF1bHQuaW5qZWN0LnNlcnZpY2UoKSxyZW1h
aW5pbmc6dC5kZWZhdWx0LmNvbXB1dGVkLmZpbHRlckJ5KCJtb2RlbCIsImNvbXBsZXRlZCIsITEp
LGNvbXBsZXRlZDp0LmRlZmF1bHQuY29tcHV0ZWQuZmlsdGVyQnkoIm1vZGVsIiwiY29tcGxldGVk
IiksYWN0aW9uczp7Y3JlYXRlVG9kbzpmdW5jdGlvbihlKXsxMyE9PWUua2V5Q29kZXx8dC5kZWZh
dWx0LmlzQmxhbmsoZS50YXJnZXQudmFsdWUpfHwodGhpcy5nZXQoInJlcG8iKS5hZGQoe3RpdGxl
OmUudGFyZ2V0LnZhbHVlLnRyaW0oKSxjb21wbGV0ZWQ6ITF9KSxlLnRhcmdldC52YWx1ZT0iIil9
LGNsZWFyQ29tcGxldGVkOmZ1bmN0aW9uKCl7dGhpcy5nZXQoIm1vZGVsIikucmVtb3ZlT2JqZWN0
cyh0aGlzLmdldCgiY29tcGxldGVkIikpLHRoaXMuZ2V0KCJyZXBvIikucGVyc2lzdCgpfX19KX0p
LGRlZmluZSgidG9kb212Yy9jb250cm9sbGVycy9jb21wbGV0ZWQiLFsiZXhwb3J0cyIsImVtYmVy
Il0sZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dC5kZWZhdWx0LkNvbnRyb2xsZXIuZXh0ZW5kKHt0
b2Rvczp0LmRlZmF1bHQuY29tcHV0ZWQuZmlsdGVyQnkoIm1vZGVsIiwiY29tcGxldGVkIiwhMCl9
KX0pLGRlZmluZSgidG9kb212Yy9oZWxwZXJzL2FwcC12ZXJzaW9uIixbImV4cG9ydHMiLCJlbWJl
ciIsInRvZG9tdmMvY29uZmlnL2Vudmlyb25tZW50IiwiZW1iZXItY2xpLWFwcC12ZXJzaW9uL3V0
aWxzL3JlZ2V4cCJdLGZ1bmN0aW9uKGUsdCxvLG4pe2Z1bmN0aW9uIGwoZSl7dmFyIHQ9YXJndW1l
bnRzLmxlbmd0aDw9MXx8dm9pZCAwPT09YXJndW1lbnRzWzFdP3t9OmFyZ3VtZW50c1sxXQorcmV0
dXJuIHQuaGlkZVNoYT9pLm1hdGNoKG4udmVyc2lvblJlZ0V4cClbMF06dC5oaWRlVmVyc2lvbj9p
Lm1hdGNoKG4uc2hhUmVnRXhwKVswXTppfWUuYXBwVmVyc2lvbj1sCit2YXIgaT1vLmRlZmF1bHQu
QVBQLnZlcnNpb24KK2UuZGVmYXVsdD10LmRlZmF1bHQuSGVscGVyLmhlbHBlcihsKX0pLGRlZmlu
ZSgidG9kb212Yy9oZWxwZXJzL2d0IixbImV4cG9ydHMiLCJlbWJlciJdLGZ1bmN0aW9uKGUsdCl7
ZnVuY3Rpb24gbyhlKXt2YXIgdD1uKGUsMikKK3JldHVybiB0WzBdPnRbMV19dmFyIG49ZnVuY3Rp
b24oKXtmdW5jdGlvbiBlKGUsdCl7dmFyIG89W10sbj0hMCxsPSExLGk9dm9pZCAwCit0cnl7Zm9y
KHZhciBhLGQ9ZVtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShhPWQubmV4dCgpKS5kb25lKSYmKG8u
cHVzaChhLnZhbHVlKSwhdHx8by5sZW5ndGghPT10KTtuPSEwKTt9Y2F0Y2goZSl7bD0hMCxpPWV9
ZmluYWxseXt0cnl7IW4mJmQucmV0dXJuJiZkLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyBp
fX1yZXR1cm4gb31yZXR1cm4gZnVuY3Rpb24odCxvKXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVy
biB0CitpZihTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KHQpKXJldHVybiBlKHQsbykKK3Rocm93
IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFi
bGUgaW5zdGFuY2UiKX19KCkKK2UuZ3Q9byxlLmRlZmF1bHQ9dC5kZWZhdWx0LkhlbHBlci5oZWxw
ZXIobyl9KSxkZWZpbmUoInRvZG9tdmMvaGVscGVycy9wbHVyYWxpemUiLFsiZXhwb3J0cyIsImVt
YmVyIiwiZW1iZXItaW5mbGVjdG9yIl0sZnVuY3Rpb24oZSx0LG8pe2Z1bmN0aW9uIG4oZSl7dmFy
IHQ9bChlLDIpLG49dFswXQorcmV0dXJuIDE9PT10WzFdP246KDAsby5wbHVyYWxpemUpKG4pfXZh
ciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZhciBvPVtdLG49ITAsbD0hMSxpPXZvaWQg
MAordHJ5e2Zvcih2YXIgYSxkPWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEobj0oYT1kLm5leHQoKSku
ZG9uZSkmJihvLnB1c2goYS52YWx1ZSksIXR8fG8ubGVuZ3RoIT09dCk7bj0hMCk7fWNhdGNoKGUp
e2w9ITAsaT1lfWZpbmFsbHl7dHJ5eyFuJiZkLnJldHVybiYmZC5yZXR1cm4oKX1maW5hbGx5e2lm
KGwpdGhyb3cgaX19cmV0dXJuIG99cmV0dXJuIGZ1bmN0aW9uKHQsbyl7aWYoQXJyYXkuaXNBcnJh
eSh0KSlyZXR1cm4gdAoraWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdCh0KSlyZXR1cm4gZSh0
LG8pCit0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUg
bm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9fSgpCitlLnBsdXJhbGl6ZUhlbHBlcj1uLGUuZGVmYXVs
dD10LmRlZmF1bHQuSGVscGVyLmhlbHBlcihuKX0pLGRlZmluZSgidG9kb212Yy9oZWxwZXJzL3Np
bmd1bGFyaXplIixbImV4cG9ydHMiLCJlbWJlci1pbmZsZWN0b3IvbGliL2hlbHBlcnMvc2luZ3Vs
YXJpemUiXSxmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10LmRlZmF1bHR9KSxkZWZpbmUoInRvZG9t
dmMvaW5pdGlhbGl6ZXJzL2FwcC12ZXJzaW9uIixbImV4cG9ydHMiLCJlbWJlci1jbGktYXBwLXZl
cnNpb24vaW5pdGlhbGl6ZXItZmFjdG9yeSIsInRvZG9tdmMvY29uZmlnL2Vudmlyb25tZW50Il0s
ZnVuY3Rpb24oZSx0LG8pe3ZhciBuPW8uZGVmYXVsdC5BUFAsbD1uLm5hbWUsaT1uLnZlcnNpb24K
K2UuZGVmYXVsdD17bmFtZToiQXBwIFZlcnNpb24iLGluaXRpYWxpemU6KDAsdC5kZWZhdWx0KShs
LGkpfX0pLGRlZmluZSgidG9kb212Yy9pbml0aWFsaXplcnMvY29udGFpbmVyLWRlYnVnLWFkYXB0
ZXIiLFsiZXhwb3J0cyIsImVtYmVyLXJlc29sdmVyL2NvbnRhaW5lci1kZWJ1Zy1hZGFwdGVyIl0s
ZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9e25hbWU6ImNvbnRhaW5lci1kZWJ1Zy1hZGFwdGVyIixp
bml0aWFsaXplOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzWzFdfHxhcmd1bWVudHNbMF0KK2Uu
cmVnaXN0ZXIoImNvbnRhaW5lci1kZWJ1Zy1hZGFwdGVyOm1haW4iLHQuZGVmYXVsdCksZS5pbmpl
Y3QoImNvbnRhaW5lci1kZWJ1Zy1hZGFwdGVyOm1haW4iLCJuYW1lc3BhY2UiLCJhcHBsaWNhdGlv
bjptYWluIil9fX0pLGRlZmluZSgidG9kb212Yy9pbml0aWFsaXplcnMvZXhwb3J0LWFwcGxpY2F0
aW9uLWdsb2JhbCIsWyJleHBvcnRzIiwiZW1iZXIiLCJ0b2RvbXZjL2NvbmZpZy9lbnZpcm9ubWVu
dCJdLGZ1bmN0aW9uKGUsdCxvKXtmdW5jdGlvbiBuKCl7dmFyIGU9YXJndW1lbnRzWzFdfHxhcmd1
bWVudHNbMF0KK2lmKCExIT09by5kZWZhdWx0LmV4cG9ydEFwcGxpY2F0aW9uR2xvYmFsKXt2YXIg
bgoraWYoInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cpbj13aW5kb3cKK2Vsc2UgaWYoInVuZGVm
aW5lZCIhPXR5cGVvZiBnbG9iYWwpbj1nbG9iYWwKK2Vsc2V7aWYoInVuZGVmaW5lZCI9PXR5cGVv
ZiBzZWxmKXJldHVybgorbj1zZWxmfXZhciBsLGk9by5kZWZhdWx0LmV4cG9ydEFwcGxpY2F0aW9u
R2xvYmFsCitsPSJzdHJpbmciPT10eXBlb2YgaT9pOnQuZGVmYXVsdC5TdHJpbmcuY2xhc3NpZnko
by5kZWZhdWx0Lm1vZHVsZVByZWZpeCksbltsXXx8KG5bbF09ZSxlLnJlb3Blbih7d2lsbERlc3Ry
b3k6ZnVuY3Rpb24oKXt0aGlzLl9zdXBlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksZGVsZXRlIG5b
bF19fSkpfX1lLmluaXRpYWxpemU9bixlLmRlZmF1bHQ9e25hbWU6ImV4cG9ydC1hcHBsaWNhdGlv
bi1nbG9iYWwiLGluaXRpYWxpemU6bn19KSxkZWZpbmUoInRvZG9tdmMvcmVzb2x2ZXIiLFsiZXhw
b3J0cyIsImVtYmVyLXJlc29sdmVyIl0sZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dC5kZWZhdWx0
fSksZGVmaW5lKCJ0b2RvbXZjL3JvdXRlciIsWyJleHBvcnRzIiwiZW1iZXIiLCJ0b2RvbXZjL2Nv
bmZpZy9lbnZpcm9ubWVudCJdLGZ1bmN0aW9uKGUsdCxvKXt2YXIgbj10LmRlZmF1bHQuUm91dGVy
LmV4dGVuZCh7bG9jYXRpb246by5kZWZhdWx0LmxvY2F0aW9uVHlwZSxyb290VVJMOm8uZGVmYXVs
dC5yb290VVJMfSkKK24ubWFwKGZ1bmN0aW9uKCl7dGhpcy5yb3V0ZSgiYWN0aXZlIiksdGhpcy5y
b3V0ZSgiY29tcGxldGVkIil9KSxlLmRlZmF1bHQ9bn0pLGRlZmluZSgidG9kb212Yy9yb3V0ZXMv
YXBwbGljYXRpb24iLFsiZXhwb3J0cyIsImVtYmVyIl0sZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9
dC5kZWZhdWx0LlJvdXRlLmV4dGVuZCh7cmVwbzp0LmRlZmF1bHQuaW5qZWN0LnNlcnZpY2UoKSxt
b2RlbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldCgicmVwbyIpLmZpbmRBbGwoKX19KX0pLGRl
ZmluZSgidG9kb212Yy9zZXJ2aWNlcy9hamF4IixbImV4cG9ydHMiLCJlbWJlci1hamF4L3NlcnZp
Y2VzL2FqYXgiXSxmdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJkZWZhdWx0
Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdC5kZWZhdWx0fX0pfSksZGVm
aW5lKCJ0b2RvbXZjL3NlcnZpY2VzL21lbW9yeSIsWyJleHBvcnRzIl0sZnVuY3Rpb24oZSl7KGZ1
bmN0aW9uKGUpe3ZhciB0PXt9LG89e30KK3QubGVuZ3RoPTAsdC5nZXRJdGVtPWZ1bmN0aW9uKGUp
e3JldHVybiBvW2VdfHxudWxsfSx0LnNldEl0ZW09ZnVuY3Rpb24oZSxuKXt2b2lkIDA9PT1uP3Qu
cmVtb3ZlSXRlbShlKTooby5oYXNPd25Qcm9wZXJ0eShlKXx8dC5sZW5ndGgrKyxvW2VdPSIiK24p
fSx0LnJlbW92ZUl0ZW09ZnVuY3Rpb24oZSl7by5oYXNPd25Qcm9wZXJ0eShlKSYmKGRlbGV0ZSBv
W2VdLHQubGVuZ3RoLS0pfSx0LmtleT1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmtleXMobylb
ZV18fG51bGx9LHQuY2xlYXI9ZnVuY3Rpb24oKXtvPXt9LHQubGVuZ3RoPTB9LGUubG9jYWxTdG9y
YWdlTWVtb3J5PXR9KSh3aW5kb3cpfSksZGVmaW5lKCJ0b2RvbXZjL3NlcnZpY2VzL3JlcG8iLFsi
ZXhwb3J0cyIsImVtYmVyIiwidG9kb212Yy9zZXJ2aWNlcy9tZW1vcnkiXSxmdW5jdGlvbihlLHQs
byl7ZS5kZWZhdWx0PXQuZGVmYXVsdC5TZXJ2aWNlLmV4dGVuZCh7bGFzdElkOjAsZGF0YTpudWxs
LGZpbmRBbGw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXQoImRhdGEiKXx8dGhpcy5zZXQoImRh
dGEiLEpTT04ucGFyc2Uod2luZG93LmxvY2FsU3RvcmFnZU1lbW9yeS5nZXRJdGVtKCJ0b2RvcyIp
fHwiW10iKSl9LGFkZDpmdW5jdGlvbihlKXt2YXIgdD1PYmplY3QuYXNzaWduKHtpZDp0aGlzLmlu
Y3JlbWVudFByb3BlcnR5KCJsYXN0SWQiKX0sZSkKK3JldHVybiB0aGlzLmdldCgiZGF0YSIpLnB1
c2hPYmplY3QodCksdGhpcy5wZXJzaXN0KCksdH0sZGVsZXRlOmZ1bmN0aW9uKGUpe3RoaXMuZ2V0
KCJkYXRhIikucmVtb3ZlT2JqZWN0KGUpLHRoaXMucGVyc2lzdCgpfSxwZXJzaXN0OmZ1bmN0aW9u
KCl7d2luZG93LmxvY2FsU3RvcmFnZU1lbW9yeS5zZXRJdGVtKCJ0b2RvcyIsSlNPTi5zdHJpbmdp
ZnkodGhpcy5nZXQoImRhdGEiKSkpfX0pfSksZGVmaW5lKCJ0b2RvbXZjL3RlbXBsYXRlcy9hY3Rp
dmUiLFsiZXhwb3J0cyJdLGZ1bmN0aW9uKGUpe2UuZGVmYXVsdD1FbWJlci5IVE1MQmFycy50ZW1w
bGF0ZSh7aWQ6ImFBc2M0THQ4IixibG9jazoneyJzdGF0ZW1lbnRzIjpbWzEsWzMzLFsidG9kby1s
aXN0Il0sbnVsbCxbWyJ0b2RvcyJdLFtbMjgsWyJ0b2RvcyJdXV1dXSxmYWxzZV1dLCJsb2NhbHMi
OltdLCJuYW1lZCI6W10sInlpZWxkcyI6W10sImhhc1BhcnRpYWxzIjpmYWxzZX0nLG1ldGE6e21v
ZHVsZU5hbWU6InRvZG9tdmMvdGVtcGxhdGVzL2FjdGl2ZS5oYnMifX0pfSksZGVmaW5lKCJ0b2Rv
bXZjL3RlbXBsYXRlcy9hcHBsaWNhdGlvbiIsWyJleHBvcnRzIl0sZnVuY3Rpb24oZSl7ZS5kZWZh
dWx0PUVtYmVyLkhUTUxCYXJzLnRlbXBsYXRlKHtpZDoiTE81QnIvZEQiLGJsb2NrOid7InN0YXRl
bWVudHMiOltbMTEsInNlY3Rpb24iLFtdXSxbMTUsImlkIiwidG9kb2FwcCJdLFsxNSwiY2xhc3Mi
LCJ0b2RvYXBwIl0sWzEzXSxbMCwiXFxuICAiXSxbMTEsImhlYWRlciIsW11dLFsxNSwiaWQiLCJo
ZWFkZXIiXSxbMTUsImNsYXNzIiwiaGVhZGVyIl0sWzEzXSxbMCwiXFxuICAgICJdLFsxMSwiaDEi
LFtdXSxbMTNdLFswLCJ0b2RvcyJdLFsxNF0sWzAsIlxcbiAgICAiXSxbMTEsImlucHV0IixbXV0s
WzE1LCJ0eXBlIiwidGV4dCJdLFsxNSwiaWQiLCJuZXctdG9kbyJdLFsxNSwiY2xhc3MiLCJuZXct
dG9kbyJdLFsxNiwib25rZXlkb3duIixbMzMsWyJhY3Rpb24iXSxbWzI4LFtudWxsXV0sImNyZWF0
ZVRvZG8iXSxudWxsXSxudWxsXSxbMTUsInBsYWNlaG9sZGVyIiwiV2hhdCBuZWVkcyB0byBiZSBk
b25lPyJdLFsxNSwiYXV0b2ZvY3VzIiwiIl0sWzEzXSxbMTRdLFswLCJcXG4gICJdLFsxNF0sWzAs
IlxcbiAgICAiXSxbMSxbMjYsWyJvdXRsZXQiXV0sZmFsc2VdLFswLCJcXG4iXSxbNixbImlmIl0s
W1szMyxbImd0Il0sW1syOCxbIm1vZGVsIiwibGVuZ3RoIl1dLDBdLG51bGxdXSxudWxsLHsic3Rh
dGVtZW50cyI6W1swLCIgICAgICAiXSxbMTEsImZvb3RlciIsW11dLFsxNSwiaWQiLCJmb290ZXIi
XSxbMTUsImNsYXNzIiwiZm9vdGVyIl0sWzEzXSxbMCwiXFxuICAgICAgICAiXSxbMTEsInNwYW4i
LFtdXSxbMTUsImlkIiwidG9kby1jb3VudCJdLFsxNSwiY2xhc3MiLCJ0b2RvLWNvdW50Il0sWzEz
XSxbMTEsInN0cm9uZyIsW11dLFsxM10sWzEsWzI4LFsicmVtYWluaW5nIiwibGVuZ3RoIl1dLGZh
bHNlXSxbMTRdLFswLCIgIl0sWzEsWzMzLFsicGx1cmFsaXplIl0sWyJpdGVtIixbMjgsWyJyZW1h
aW5pbmciLCJsZW5ndGgiXV1dLG51bGxdLGZhbHNlXSxbMCwiIGxlZnQiXSxbMTRdLFswLCJcXG4g
ICAgICAgICJdLFsxMSwidWwiLFtdXSxbMTUsImlkIiwiZmlsdGVycyJdLFsxNSwiY2xhc3MiLCJm
aWx0ZXJzIl0sWzEzXSxbMCwiXFxuICAgICAgICAgICJdLFsxMSwibGkiLFtdXSxbMTNdLFs2LFsi
bGluay10byJdLFsiaW5kZXgiXSxbWyJhY3RpdmVDbGFzcyJdLFsic2VsZWN0ZWQiXV0seyJzdGF0
ZW1lbnRzIjpbWzAsIkFsbCJdXSwibG9jYWxzIjpbXX0sbnVsbF0sWzE0XSxbMCwiXFxuICAgICAg
ICAgICJdLFsxMSwibGkiLFtdXSxbMTNdLFs2LFsibGluay10byJdLFsiYWN0aXZlIl0sW1siYWN0
aXZlQ2xhc3MiXSxbInNlbGVjdGVkIl1dLHsic3RhdGVtZW50cyI6W1swLCJBY3RpdmUiXV0sImxv
Y2FscyI6W119LG51bGxdLFsxNF0sWzAsIlxcbiAgICAgICAgICAiXSxbMTEsImxpIixbXV0sWzEz
XSxbNixbImxpbmstdG8iXSxbImNvbXBsZXRlZCJdLFtbImFjdGl2ZUNsYXNzIl0sWyJzZWxlY3Rl
ZCJdXSx7InN0YXRlbWVudHMiOltbMCwiQ29tcGxldGVkIl1dLCJsb2NhbHMiOltdfSxudWxsXSxb
MTRdLFswLCJcXG4gICAgICAgICJdLFsxNF0sWzAsIlxcbiJdLFs2LFsiaWYiXSxbWzI4LFsiY29t
cGxldGVkIiwibGVuZ3RoIl1dXSxudWxsLHsic3RhdGVtZW50cyI6W1swLCIgICAgICAgICAgIl0s
WzExLCJidXR0b24iLFtdXSxbMTUsImlkIiwiY2xlYXItY29tcGxldGVkIl0sWzE1LCJjbGFzcyIs
ImNsZWFyLWNvbXBsZXRlZCJdLFsxNiwib25jbGljayIsWzMzLFsiYWN0aW9uIl0sW1syOCxbbnVs
bF1dLCJjbGVhckNvbXBsZXRlZCJdLG51bGxdLG51bGxdLFsxM10sWzAsIkNsZWFyIGNvbXBsZXRl
ZCJdLFsxNF0sWzAsIlxcbiJdXSwibG9jYWxzIjpbXX0sbnVsbF0sWzAsIiAgICAgICJdLFsxNF0s
WzAsIlxcbiJdXSwibG9jYWxzIjpbXX0sbnVsbF0sWzE0XSxbMCwiXFxuIl0sWzExLCJmb290ZXIi
LFtdXSxbMTUsImlkIiwiaW5mbyJdLFsxNSwiY2xhc3MiLCJpbmZvIl0sWzEzXSxbMCwiXFxuICAi
XSxbMTEsInAiLFtdXSxbMTNdLFswLCJEb3VibGUtY2xpY2sgdG8gZWRpdCBhIHRvZG8iXSxbMTRd
LFswLCJcXG4gICJdLFsxMSwicCIsW11dLFsxM10sWzAsIlxcbiAgICBDcmVhdGVkIGJ5XFxuICAg
ICJdLFsxMSwiYSIsW11dLFsxNSwiaHJlZiIsImh0dHA6Ly9naXRodWIuY29tL2NpYmVybm94Il0s
WzEzXSxbMCwiTWlndWVsIENhbWJhIl0sWzE0XSxbMCwiLFxcbiAgICAiXSxbMTEsImEiLFtdXSxb
MTUsImhyZWYiLCJodHRwOi8vZ2l0aHViLmNvbS9hZGR5b3NtYW5pIl0sWzEzXSxbMCwiQWRkeSBP
c21hbmkiXSxbMTRdLFswLCJcXG4gICJdLFsxNF0sWzAsIlxcbiAgIl0sWzExLCJwIixbXV0sWzEz
XSxbMCwiUGFydCBvZiAiXSxbMTEsImEiLFtdXSxbMTUsImhyZWYiLCJodHRwOi8vdG9kb212Yy5j
b20iXSxbMTNdLFswLCJUb2RvTVZDIl0sWzE0XSxbMTRdLFswLCJcXG4iXSxbMTRdXSwibG9jYWxz
IjpbXSwibmFtZWQiOltdLCJ5aWVsZHMiOltdLCJoYXNQYXJ0aWFscyI6ZmFsc2V9JyxtZXRhOntt
b2R1bGVOYW1lOiJ0b2RvbXZjL3RlbXBsYXRlcy9hcHBsaWNhdGlvbi5oYnMifX0pfSksZGVmaW5l
KCJ0b2RvbXZjL3RlbXBsYXRlcy9jb21wbGV0ZWQiLFsiZXhwb3J0cyJdLGZ1bmN0aW9uKGUpe2Uu
ZGVmYXVsdD1FbWJlci5IVE1MQmFycy50ZW1wbGF0ZSh7aWQ6IkY0bGE5d3RiIixibG9jazoneyJz
dGF0ZW1lbnRzIjpbWzEsWzMzLFsidG9kby1saXN0Il0sbnVsbCxbWyJ0b2RvcyJdLFtbMjgsWyJ0
b2RvcyJdXV1dXSxmYWxzZV1dLCJsb2NhbHMiOltdLCJuYW1lZCI6W10sInlpZWxkcyI6W10sImhh
c1BhcnRpYWxzIjpmYWxzZX0nLG1ldGE6e21vZHVsZU5hbWU6InRvZG9tdmMvdGVtcGxhdGVzL2Nv
bXBsZXRlZC5oYnMifX0pfSksZGVmaW5lKCJ0b2RvbXZjL3RlbXBsYXRlcy9jb21wb25lbnRzL3Rv
ZG8taXRlbSIsWyJleHBvcnRzIl0sZnVuY3Rpb24oZSl7ZS5kZWZhdWx0PUVtYmVyLkhUTUxCYXJz
LnRlbXBsYXRlKHtpZDoiZFEzK2NLNUUiLGJsb2NrOid7InN0YXRlbWVudHMiOltbMTEsImRpdiIs
W11dLFsxNSwiY2xhc3MiLCJ2aWV3Il0sWzEzXSxbMCwiXFxuICAiXSxbMTEsImlucHV0IixbXV0s
WzE1LCJ0eXBlIiwiY2hlY2tib3giXSxbMTUsImNsYXNzIiwidG9nZ2xlIl0sWzE2LCJjaGVja2Vk
IixbMjgsWyJ0b2RvIiwiY29tcGxldGVkIl1dLG51bGxdLFsxNiwib25jaGFuZ2UiLFszMyxbImFj
dGlvbiJdLFtbMjgsW251bGxdXSwidG9nZ2xlQ29tcGxldGVkIl0sbnVsbF0sbnVsbF0sWzEzXSxb
MTRdLFswLCJcXG4gICJdLFsxMSwibGFiZWwiLFtdXSxbMTYsIm9uZGJsY2xpY2siLFszMyxbImFj
dGlvbiJdLFtbMjgsW251bGxdXSwic3RhcnRFZGl0aW5nIl0sbnVsbF0sbnVsbF0sWzEzXSxbMSxb
MjgsWyJ0b2RvIiwidGl0bGUiXV0sZmFsc2VdLFsxNF0sWzAsIlxcbiAgIl0sWzExLCJidXR0b24i
LFtdXSxbMTYsIm9uY2xpY2siLFszMyxbImFjdGlvbiJdLFtbMjgsW251bGxdXSwicmVtb3ZlVG9k
byJdLG51bGxdLG51bGxdLFsxNSwiY2xhc3MiLCJkZXN0cm95Il0sWzEzXSxbMTRdLFswLCJcXG4i
XSxbMTRdLFswLCJcXG4iXSxbMTEsImlucHV0IixbXV0sWzE1LCJ0eXBlIiwidGV4dCJdLFsxNSwi
Y2xhc3MiLCJlZGl0Il0sWzE2LCJ2YWx1ZSIsWzI4LFsidG9kbyIsInRpdGxlIl1dLG51bGxdLFsx
Niwib25ibHVyIixbMzMsWyJhY3Rpb24iXSxbWzI4LFtudWxsXV0sImRvbmVFZGl0aW5nIl0sW1si
dmFsdWUiXSxbInRhcmdldC52YWx1ZSJdXV0sbnVsbF0sWzE2LCJvbmtleWRvd24iLFszMyxbImFj
dGlvbiJdLFtbMjgsW251bGxdXSwiaGFuZGxlS2V5ZG93biJdLG51bGxdLG51bGxdLFsxNSwiYXV0
b2ZvY3VzIiwiIl0sWzEzXSxbMTRdXSwibG9jYWxzIjpbXSwibmFtZWQiOltdLCJ5aWVsZHMiOltd
LCJoYXNQYXJ0aWFscyI6ZmFsc2V9JyxtZXRhOnttb2R1bGVOYW1lOiJ0b2RvbXZjL3RlbXBsYXRl
cy9jb21wb25lbnRzL3RvZG8taXRlbS5oYnMifX0pfSksZGVmaW5lKCJ0b2RvbXZjL3RlbXBsYXRl
cy9jb21wb25lbnRzL3RvZG8tbGlzdCIsWyJleHBvcnRzIl0sZnVuY3Rpb24oZSl7ZS5kZWZhdWx0
PUVtYmVyLkhUTUxCYXJzLnRlbXBsYXRlKHtpZDoiVVB5Y0RoWk8iLGJsb2NrOid7InN0YXRlbWVu
dHMiOltbNixbImlmIl0sW1syOCxbInRvZG9zIiwibGVuZ3RoIl1dXSxudWxsLHsic3RhdGVtZW50
cyI6W1s2LFsiaWYiXSxbWzI4LFsiY2FuVG9nZ2xlIl1dXSxudWxsLHsic3RhdGVtZW50cyI6W1sw
LCIgICAgIl0sWzExLCJpbnB1dCIsW11dLFsxNSwidHlwZSIsImNoZWNrYm94Il0sWzE1LCJpZCIs
InRvZ2dsZS1hbGwiXSxbMTUsImNsYXNzIiwidG9nZ2xlLWFsbCJdLFsxNiwiY2hlY2tlZCIsWzI2
LFsiYWxsQ29tcGxldGVkIl1dLG51bGxdLFsxNiwib25jaGFuZ2UiLFszMyxbImFjdGlvbiJdLFtb
MjgsW251bGxdXSwidG9nZ2xlQWxsIl0sbnVsbF0sbnVsbF0sWzEzXSxbMTRdLFswLCJcXG4iXV0s
ImxvY2FscyI6W119LG51bGxdLFswLCIgICJdLFsxMSwidWwiLFtdXSxbMTUsImlkIiwidG9kby1s
aXN0Il0sWzE1LCJjbGFzcyIsInRvZG8tbGlzdCJdLFsxM10sWzAsIlxcbiJdLFs2LFsiZWFjaCJd
LFtbMjgsWyJ0b2RvcyJdXV0sbnVsbCx7InN0YXRlbWVudHMiOltbMCwiICAgICAgIl0sWzEsWzMz
LFsidG9kby1pdGVtIl0sbnVsbCxbWyJ0b2RvIiwib25TdGFydEVkaXQiLCJvbkVuZEVkaXQiXSxb
WzI4LFsidG9kbyJdXSxbMzMsWyJhY3Rpb24iXSxbWzI4LFtudWxsXV0sImRpc2FibGVUb2dnbGUi
XSxudWxsXSxbMzMsWyJhY3Rpb24iXSxbWzI4LFtudWxsXV0sImVuYWJsZVRvZ2dsZSJdLG51bGxd
XV1dLGZhbHNlXSxbMCwiXFxuIl1dLCJsb2NhbHMiOlsidG9kbyJdfSxudWxsXSxbMCwiICAiXSxb
MTRdLFswLCJcXG4iXV0sImxvY2FscyI6W119LG51bGxdXSwibG9jYWxzIjpbXSwibmFtZWQiOltd
LCJ5aWVsZHMiOltdLCJoYXNQYXJ0aWFscyI6ZmFsc2V9JyxtZXRhOnttb2R1bGVOYW1lOiJ0b2Rv
bXZjL3RlbXBsYXRlcy9jb21wb25lbnRzL3RvZG8tbGlzdC5oYnMifX0pfSksZGVmaW5lKCJ0b2Rv
bXZjL3RlbXBsYXRlcy9pbmRleCIsWyJleHBvcnRzIl0sZnVuY3Rpb24oZSl7ZS5kZWZhdWx0PUVt
YmVyLkhUTUxCYXJzLnRlbXBsYXRlKHtpZDoiaEJhZE5JcG8iLGJsb2NrOid7InN0YXRlbWVudHMi
OltbNixbImlmIl0sW1syOCxbIm1vZGVsIiwibGVuZ3RoIl1dXSxudWxsLHsic3RhdGVtZW50cyI6
W1swLCIgICJdLFsxLFszMyxbInRvZG8tbGlzdCJdLG51bGwsW1sidG9kb3MiXSxbWzI4LFsibW9k
ZWwiXV1dXV0sZmFsc2VdLFswLCJcXG4iXV0sImxvY2FscyI6W119LG51bGxdXSwibG9jYWxzIjpb
XSwibmFtZWQiOltdLCJ5aWVsZHMiOltdLCJoYXNQYXJ0aWFscyI6ZmFsc2V9JyxtZXRhOnttb2R1
bGVOYW1lOiJ0b2RvbXZjL3RlbXBsYXRlcy9pbmRleC5oYnMifX0pfSksZGVmaW5lKCJ0b2RvbXZj
L2NvbmZpZy9lbnZpcm9ubWVudCIsWyJlbWJlciJdLGZ1bmN0aW9uKGUpe3RyeXt2YXIgdD0idG9k
b212Yy9jb25maWcvZW52aXJvbm1lbnQiLG89ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbWV0YVtu
YW1lPSInK3QrJyJdJykuZ2V0QXR0cmlidXRlKCJjb250ZW50Iiksbj1KU09OLnBhcnNlKHVuZXNj
YXBlKG8pKSxsPXtkZWZhdWx0Om59CityZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsIl9f
ZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGx9Y2F0Y2goZSl7dGhyb3cgbmV3IEVycm9yKCdDb3VsZCBu
b3QgcmVhZCBjb25maWcgZnJvbSBtZXRhIHRhZyB3aXRoIG5hbWUgIicrdCsnIi4nKX19KSxydW5u
aW5nVGVzdHN8fHJlcXVpcmUoInRvZG9tdmMvYXBwIikuZGVmYXVsdC5jcmVhdGUoe25hbWU6InRv
ZG9tdmMiLHZlcnNpb246IjAuMC4wK2JjMzc3NTJmIn0pCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9i
cm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9lbWJlcmpzL2Rpc3QvYXNzZXRzL3ZlbmRvci04MjA5MTk1NjdlYjdiZDRk
OWZhYzM1OGE5MGE1YWFjNC5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0
ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvZGlz
dC9hc3NldHMvdmVuZG9yLTgyMDkxOTU2N2ViN2JkNGQ5ZmFjMzU4YTkwYTVhYWM0LmpzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmI5ZDliMWY0MDVmZGM0ODY3OTBiN2Q0NzExNWI0ZjhjODQ1MzliNmEKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL2Rpc3QvYXNzZXRzL3Zl
bmRvci04MjA5MTk1NjdlYjdiZDRkOWZhYzM1OGE5MGE1YWFjNC5qcwpAQCAtMCwwICsxLDMzNjQg
QEAKK2Z1bmN0aW9uIGNyZWF0ZURlcHJlY2F0ZWRNb2R1bGUoZSl7ZGVmaW5lKGUsWyJleHBvcnRz
IiwiZW1iZXItcmVzb2x2ZXIvcmVzb2x2ZXIiLCJlbWJlciJdLGZ1bmN0aW9uKHQsbixyKXtyLmRl
ZmF1bHQuZGVwcmVjYXRlKCJVc2FnZSBvZiBgIitlKyJgIG1vZHVsZSBpcyBkZXByZWNhdGVkLCBw
bGVhc2UgdXBkYXRlIHRvIGBlbWJlci1yZXNvbHZlcmAuIiwhMSx7aWQ6ImVtYmVyLXJlc29sdmVy
LmxlZ2FjeS1zaGltcyIsdW50aWw6IjMuMC4wIn0pLHQuZGVmYXVsdD1uLmRlZmF1bHR9KX13aW5k
b3cuRW1iZXJFTlY9e0ZFQVRVUkVTOnt9LEVYVEVORF9QUk9UT1RZUEVTOntEYXRlOiExfX0KK3Zh
ciBydW5uaW5nVGVzdHM9ITEsbG9hZGVyLGRlZmluZSxyZXF1aXJlTW9kdWxlLHJlcXVpcmUscmVx
dWlyZWpzOyhmdW5jdGlvbihlKXsidXNlIHN0cmljdCIKK2Z1bmN0aW9uIHQoKXt2YXIgZT1PYmpl
Y3QuY3JlYXRlKG51bGwpCityZXR1cm4gZS5fXz12b2lkIDAsZGVsZXRlIGUuX18sZX1mdW5jdGlv
biBuKGUpe3Rocm93IG5ldyBFcnJvcigiYW4gdW5zdXBwb3J0ZWQgbW9kdWxlIHdhcyBkZWZpbmVk
LCBleHBlY3RlZCBgZGVmaW5lKGlkLCBkZXBzLCBtb2R1bGUpYCBpbnN0ZWFkIGdvdDogYCIrZSsi
YCBhcmd1bWVudHMgdG8gZGVmaW5lYCIpfWZ1bmN0aW9uIHIoZSx0LG4scil7dGhpcy51dWlkPWgr
Kyx0aGlzLmlkPWUsdGhpcy5kZXBzPSF0Lmxlbmd0aCYmbi5sZW5ndGg/ZDp0LHRoaXMubW9kdWxl
PXtleHBvcnRzOnt9fSx0aGlzLmNhbGxiYWNrPW4sdGhpcy5oYXNFeHBvcnRzQXNEZXA9ITEsdGhp
cy5pc0FsaWFzPXIsdGhpcy5yZWlmaWVkPW5ldyBBcnJheSh0Lmxlbmd0aCksdGhpcy5zdGF0ZT0i
bmV3In1mdW5jdGlvbiBpKCl7fWZ1bmN0aW9uIG8oZSl7dGhpcy5pZD1lfWZ1bmN0aW9uIHMoZSx0
KXt0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIG1vZHVsZSBgIitlKyJgIGltcG9ydGVk
IGZyb20gYCIrdCsiYCIpfWZ1bmN0aW9uIGEoZSx0LG4pe2Zvcih2YXIgcj1wW2VdfHxwW2UrIi9p
bmRleCJdO3ImJnIuaXNBbGlhczspcj1wW3IuaWRdCityZXR1cm4gcnx8cyhlLHQpLG4mJiJwZW5k
aW5nIiE9PXIuc3RhdGUmJiJmaW5hbGl6ZWQiIT09ci5zdGF0ZSYmKHIuZmluZERlcHMobiksbi5w
dXNoKHIpKSxyfWZ1bmN0aW9uIHUoZSx0KXtpZigiLiIhPT1lLmNoYXJBdCgwKSlyZXR1cm4gZQor
Zm9yKHZhciBuPWUuc3BsaXQoIi8iKSxyPXQuc3BsaXQoIi8iKSxpPXIuc2xpY2UoMCwtMSksbz0w
LHM9bi5sZW5ndGg7bzxzO28rKyl7dmFyIGE9bltvXQoraWYoIi4uIj09PWEpe2lmKDA9PT1pLmxl
bmd0aCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBhY2Nlc3MgcGFyZW50IG1vZHVsZSBvZiByb290
IikKK2kucG9wKCl9ZWxzZXtpZigiLiI9PT1hKWNvbnRpbnVlCitpLnB1c2goYSl9fXJldHVybiBp
LmpvaW4oIi8iKX1mdW5jdGlvbiBsKGUpe3JldHVybiEoIXBbZV0mJiFwW2UrIi9pbmRleCJdKX12
YXIgYz17bG9hZGVyOmxvYWRlcixkZWZpbmU6ZGVmaW5lLHJlcXVpcmVNb2R1bGU6cmVxdWlyZU1v
ZHVsZSxyZXF1aXJlOnJlcXVpcmUscmVxdWlyZWpzOnJlcXVpcmVqc30KK3JlcXVpcmVqcz1yZXF1
aXJlPXJlcXVpcmVNb2R1bGU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49YShlLCIocmVxdWly
ZSkiLHQpLHI9dC5sZW5ndGgtMTtyPj0wO3ItLSl0W3JdLmV4cG9ydHMoKQorcmV0dXJuIG4ubW9k
dWxlLmV4cG9ydHN9LGxvYWRlcj17bm9Db25mbGljdDpmdW5jdGlvbih0KXt2YXIgbixyCitmb3Io
biBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJmMuaGFzT3duUHJvcGVydHkobikmJihyPXRbbl0s
ZVtyXT1lW25dLGVbbl09Y1tuXSl9LG1ha2VEZWZhdWx0RXhwb3J0OiEwfQordmFyIHA9dCgpLGY9
dCgpLGg9MCxkPVsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXQorci5wcm90b3R5cGUubWFr
ZURlZmF1bHRFeHBvcnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm1vZHVsZS5leHBvcnRzCitudWxs
PT09ZXx8Im9iamVjdCIhPXR5cGVvZiBlJiYiZnVuY3Rpb24iIT10eXBlb2YgZXx8dm9pZCAwIT09
ZS5kZWZhdWx0fHwhT2JqZWN0LmlzRXh0ZW5zaWJsZShlKXx8KGUuZGVmYXVsdD1lKX0sci5wcm90
b3R5cGUuZXhwb3J0cz1mdW5jdGlvbigpe2lmKCJmaW5hbGl6ZWQiPT09dGhpcy5zdGF0ZXx8InJl
aWZ5aW5nIj09PXRoaXMuc3RhdGUpcmV0dXJuIHRoaXMubW9kdWxlLmV4cG9ydHMKK2xvYWRlci53
cmFwTW9kdWxlcyYmKHRoaXMuY2FsbGJhY2s9bG9hZGVyLndyYXBNb2R1bGVzKHRoaXMuaWQsdGhp
cy5jYWxsYmFjaykpLHRoaXMucmVpZnkoKQordmFyIGU9dGhpcy5jYWxsYmFjay5hcHBseSh0aGlz
LHRoaXMucmVpZmllZCkKK3JldHVybiB0aGlzLnJlaWZpZWQubGVuZ3RoPTAsdGhpcy5zdGF0ZT0i
ZmluYWxpemVkIix0aGlzLmhhc0V4cG9ydHNBc0RlcCYmdm9pZCAwPT09ZXx8KHRoaXMubW9kdWxl
LmV4cG9ydHM9ZSksbG9hZGVyLm1ha2VEZWZhdWx0RXhwb3J0JiZ0aGlzLm1ha2VEZWZhdWx0RXhw
b3J0KCksdGhpcy5tb2R1bGUuZXhwb3J0c30sci5wcm90b3R5cGUudW5zZWU9ZnVuY3Rpb24oKXt0
aGlzLnN0YXRlPSJuZXciLHRoaXMubW9kdWxlPXtleHBvcnRzOnt9fX0sci5wcm90b3R5cGUucmVp
Znk9ZnVuY3Rpb24oKXtpZigicmVpZmllZCIhPT10aGlzLnN0YXRlKXt0aGlzLnN0YXRlPSJyZWlm
eWluZyIKK3RyeXt0aGlzLnJlaWZpZWQ9dGhpcy5fcmVpZnkoKSx0aGlzLnN0YXRlPSJyZWlmaWVk
In1maW5hbGx5eyJyZWlmeWluZyI9PT10aGlzLnN0YXRlJiYodGhpcy5zdGF0ZT0iZXJyb3JlZCIp
fX19LHIucHJvdG90eXBlLl9yZWlmeT1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLnJlaWZpZWQu
c2xpY2UoKSx0PTA7dDxlLmxlbmd0aDt0Kyspe3ZhciBuPWVbdF0KK2VbdF09bi5leHBvcnRzP24u
ZXhwb3J0czpuLm1vZHVsZS5leHBvcnRzKCl9cmV0dXJuIGV9LHIucHJvdG90eXBlLmZpbmREZXBz
PWZ1bmN0aW9uKGUpe2lmKCJuZXciPT09dGhpcy5zdGF0ZSl7dGhpcy5zdGF0ZT0icGVuZGluZyIK
K2Zvcih2YXIgdD10aGlzLmRlcHMsbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dLGk9dGhp
cy5yZWlmaWVkW25dPXtleHBvcnRzOnZvaWQgMCxtb2R1bGU6dm9pZCAwfQorImV4cG9ydHMiPT09
cj8odGhpcy5oYXNFeHBvcnRzQXNEZXA9ITAsaS5leHBvcnRzPXRoaXMubW9kdWxlLmV4cG9ydHMp
OiJyZXF1aXJlIj09PXI/aS5leHBvcnRzPXRoaXMubWFrZVJlcXVpcmUoKToibW9kdWxlIj09PXI/
aS5leHBvcnRzPXRoaXMubW9kdWxlOmkubW9kdWxlPWEodShyLHRoaXMuaWQpLHRoaXMuaWQsZSl9
fX0sci5wcm90b3R5cGUubWFrZVJlcXVpcmU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmlkLHQ9ZnVu
Y3Rpb24odCl7cmV0dXJuIHJlcXVpcmUodSh0LGUpKX0KK3JldHVybiB0LmRlZmF1bHQ9dCx0Lm1v
ZHVsZUlkPWUsdC5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIGwodSh0LGUpKX0sdH0sZGVmaW5lPWZ1
bmN0aW9uKGUsdCxpKXt2YXIgcz1wW2VdCitzJiYibmV3IiE9PXMuc3RhdGV8fChhcmd1bWVudHMu
bGVuZ3RoPDImJm4oYXJndW1lbnRzLmxlbmd0aCksQXJyYXkuaXNBcnJheSh0KXx8KGk9dCx0PVtd
KSxwW2VdPWkgaW5zdGFuY2VvZiBvP25ldyByKGkuaWQsdCxpLCEwKTpuZXcgcihlLHQsaSwhMSkp
fSxkZWZpbmUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuPXBbZV0KK2lmKCFufHwibmV3Ij09
PW4uc3RhdGUpcmV0dXJuIG49bmV3IHIoZSxbXSxpLG51bGwpLG4ubW9kdWxlLmV4cG9ydHM9dCxu
LnN0YXRlPSJmaW5hbGl6ZWQiLHBbZV09bixufSxkZWZpbmUuYWxpYXM9ZnVuY3Rpb24oZSx0KXty
ZXR1cm4gMj09PWFyZ3VtZW50cy5sZW5ndGg/ZGVmaW5lKHQsbmV3IG8oZSkpOm5ldyBvKGUpfSxy
ZXF1aXJlanMuZW50cmllcz1yZXF1aXJlanMuX2Vha19zZWVuPXAscmVxdWlyZWpzLmhhcz1sLHJl
cXVpcmVqcy51bnNlZT1mdW5jdGlvbihlKXthKGUsIih1bnNlZSkiLCExKS51bnNlZSgpfSxyZXF1
aXJlanMuY2xlYXI9ZnVuY3Rpb24oKXtyZXF1aXJlanMuZW50cmllcz1yZXF1aXJlanMuX2Vha19z
ZWVuPXA9dCgpLGY9dCgpfSxkZWZpbmUoImZvbyIsZnVuY3Rpb24oKXt9KSxkZWZpbmUoImZvby9i
YXIiLFtdLGZ1bmN0aW9uKCl7fSksZGVmaW5lKCJmb28vYXNkZiIsWyJtb2R1bGUiLCJleHBvcnRz
IiwicmVxdWlyZSJdLGZ1bmN0aW9uKGUsdCxuKXtuLmhhcygiZm9vL2JhciIpJiZuKCJmb28vYmFy
Iil9KSxkZWZpbmUoImZvby9iYXoiLFtdLGRlZmluZS5hbGlhcygiZm9vIikpLGRlZmluZSgiZm9v
L3F1eiIsZGVmaW5lLmFsaWFzKCJmb28iKSksZGVmaW5lLmFsaWFzKCJmb28iLCJmb28vcXV4Iiks
ZGVmaW5lKCJmb28vYmFyIixbImZvbyIsIi4vcXV6IiwiLi9iYXoiLCIuL2FzZGYiLCIuL2JhciIs
Ii4uL2ZvbyJdLGZ1bmN0aW9uKCl7fSksZGVmaW5lKCJmb28vbWFpbiIsWyJmb28vYmFyIl0sZnVu
Y3Rpb24oKXt9KSxkZWZpbmUuZXhwb3J0cygiZm9vL2V4cG9ydHMiLHt9KSxyZXF1aXJlKCJmb28v
ZXhwb3J0cyIpLHJlcXVpcmUoImZvby9tYWluIikscmVxdWlyZS51bnNlZSgiZm9vL2JhciIpLHJl
cXVpcmVqcy5jbGVhcigpLCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmIm9iamVjdCI9PXR5cGVv
ZiBtb2R1bGUmJm1vZHVsZS5leHBvcnRzJiYobW9kdWxlLmV4cG9ydHM9e3JlcXVpcmU6cmVxdWly
ZSxkZWZpbmU6ZGVmaW5lfSl9KSh0aGlzKSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IgorIm9i
amVjdCI9PXR5cGVvZiBtb2R1bGUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlLmV4cG9ydHM/bW9k
dWxlLmV4cG9ydHM9ZS5kb2N1bWVudD90KGUsITApOmZ1bmN0aW9uKGUpe2lmKCFlLmRvY3VtZW50
KXRocm93IG5ldyBFcnJvcigialF1ZXJ5IHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVu
dCIpCityZXR1cm4gdChlKX06dChlKX0oInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93
OnRoaXMsZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCIKK2Z1bmN0aW9uIG4oZSx0KXt0PXR8fG5l
Cit2YXIgbj10LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpCituLnRleHQ9ZSx0LmhlYWQuYXBwZW5k
Q2hpbGQobikucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKX1mdW5jdGlvbiByKGUpe3ZhciB0PSEh
ZSYmImxlbmd0aCJpbiBlJiZlLmxlbmd0aCxuPWRlLnR5cGUoZSkKK3JldHVybiJmdW5jdGlvbiIh
PT1uJiYhZGUuaXNXaW5kb3coZSkmJigiYXJyYXkiPT09bnx8MD09PXR8fCJudW1iZXIiPT10eXBl
b2YgdCYmdD4wJiZ0LTEgaW4gZSl9ZnVuY3Rpb24gaShlLHQpe3JldHVybiBlLm5vZGVOYW1lJiZl
Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT10LnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gbyhlLHQs
bil7cmV0dXJuIGRlLmlzRnVuY3Rpb24odCk/ZGUuZ3JlcChlLGZ1bmN0aW9uKGUscil7cmV0dXJu
ISF0LmNhbGwoZSxyLGUpIT09bn0pOnQubm9kZVR5cGU/ZGUuZ3JlcChlLGZ1bmN0aW9uKGUpe3Jl
dHVybiBlPT09dCE9PW59KToic3RyaW5nIiE9dHlwZW9mIHQ/ZGUuZ3JlcChlLGZ1bmN0aW9uKGUp
e3JldHVybiBhZS5jYWxsKHQsZSk+LTEhPT1ufSk6Q2UudGVzdCh0KT9kZS5maWx0ZXIodCxlLG4p
Oih0PWRlLmZpbHRlcih0LGUpLGRlLmdyZXAoZSxmdW5jdGlvbihlKXtyZXR1cm4gYWUuY2FsbCh0
LGUpPi0xIT09biYmMT09PWUubm9kZVR5cGV9KSl9ZnVuY3Rpb24gcyhlLHQpe2Zvcig7KGU9ZVt0
XSkmJjEhPT1lLm5vZGVUeXBlOyk7cmV0dXJuIGV9ZnVuY3Rpb24gYShlKXt2YXIgdD17fQorcmV0
dXJuIGRlLmVhY2goZS5tYXRjaChSZSl8fFtdLGZ1bmN0aW9uKGUsbil7dFtuXT0hMH0pLHR9ZnVu
Y3Rpb24gdShlKXtyZXR1cm4gZX1mdW5jdGlvbiBsKGUpe3Rocm93IGV9ZnVuY3Rpb24gYyhlLHQs
bixyKXt2YXIgaQordHJ5e2UmJmRlLmlzRnVuY3Rpb24oaT1lLnByb21pc2UpP2kuY2FsbChlKS5k
b25lKHQpLmZhaWwobik6ZSYmZGUuaXNGdW5jdGlvbihpPWUudGhlbik/aS5jYWxsKGUsdCxuKTp0
LmFwcGx5KHZvaWQgMCxbZV0uc2xpY2UocikpfWNhdGNoKGUpe24uYXBwbHkodm9pZCAwLFtlXSl9
fWZ1bmN0aW9uIHAoKXtuZS5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixw
KSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLHApLGRlLnJlYWR5KCl9ZnVuY3Rpb24gZigp
e3RoaXMuZXhwYW5kbz1kZS5leHBhbmRvK2YudWlkKyt9ZnVuY3Rpb24gaChlKXtyZXR1cm4idHJ1
ZSI9PT1lfHwiZmFsc2UiIT09ZSYmKCJudWxsIj09PWU/bnVsbDplPT09K2UrIiI/K2U6SWUudGVz
dChlKT9KU09OLnBhcnNlKGUpOmUpfWZ1bmN0aW9uIGQoZSx0LG4pe3ZhciByCitpZih2b2lkIDA9
PT1uJiYxPT09ZS5ub2RlVHlwZSlpZihyPSJkYXRhLSIrdC5yZXBsYWNlKE1lLCItJCYiKS50b0xv
d2VyQ2FzZSgpLCJzdHJpbmciPT10eXBlb2Yobj1lLmdldEF0dHJpYnV0ZShyKSkpe3RyeXtuPWgo
bil9Y2F0Y2goZSl7fUxlLnNldChlLHQsbil9ZWxzZSBuPXZvaWQgMAorcmV0dXJuIG59ZnVuY3Rp
b24gbShlLHQsbixyKXt2YXIgaSxvPTEscz0yMCxhPXI/ZnVuY3Rpb24oKXtyZXR1cm4gci5jdXIo
KX06ZnVuY3Rpb24oKXtyZXR1cm4gZGUuY3NzKGUsdCwiIil9LHU9YSgpLGw9biYmblszXXx8KGRl
LmNzc051bWJlclt0XT8iIjoicHgiKSxjPShkZS5jc3NOdW1iZXJbdF18fCJweCIhPT1sJiYrdSkm
JnplLmV4ZWMoZGUuY3NzKGUsdCkpCitpZihjJiZjWzNdIT09bCl7bD1sfHxjWzNdLG49bnx8W10s
Yz0rdXx8MQorZG97bz1vfHwiLjUiLGMvPW8sZGUuc3R5bGUoZSx0LGMrbCl9d2hpbGUobyE9PShv
PWEoKS91KSYmMSE9PW8mJi0tcyl9cmV0dXJuIG4mJihjPStjfHwrdXx8MCxpPW5bMV0/Yysoblsx
XSsxKSpuWzJdOituWzJdLHImJihyLnVuaXQ9bCxyLnN0YXJ0PWMsci5lbmQ9aSkpLGl9ZnVuY3Rp
b24gZyhlKXt2YXIgdCxuPWUub3duZXJEb2N1bWVudCxyPWUubm9kZU5hbWUsaT1IZVtyXQorcmV0
dXJuIGl8fCh0PW4uYm9keS5hcHBlbmRDaGlsZChuLmNyZWF0ZUVsZW1lbnQocikpLGk9ZGUuY3Nz
KHQsImRpc3BsYXkiKSx0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCksIm5vbmUiPT09aSYmKGk9
ImJsb2NrIiksSGVbcl09aSxpKX1mdW5jdGlvbiB5KGUsdCl7Zm9yKHZhciBuLHIsaT1bXSxvPTAs
cz1lLmxlbmd0aDtvPHM7bysrKXI9ZVtvXSxyLnN0eWxlJiYobj1yLnN0eWxlLmRpc3BsYXksdD8o
Im5vbmUiPT09biYmKGlbb109RGUuZ2V0KHIsImRpc3BsYXkiKXx8bnVsbCxpW29dfHwoci5zdHls
ZS5kaXNwbGF5PSIiKSksIiI9PT1yLnN0eWxlLmRpc3BsYXkmJkJlKHIpJiYoaVtvXT1nKHIpKSk6
Im5vbmUiIT09biYmKGlbb109Im5vbmUiLERlLnNldChyLCJkaXNwbGF5IixuKSkpCitmb3Iobz0w
O288cztvKyspbnVsbCE9aVtvXSYmKGVbb10uc3R5bGUuZGlzcGxheT1pW29dKQorcmV0dXJuIGV9
ZnVuY3Rpb24gdihlLHQpe3ZhciBuCityZXR1cm4gbj12b2lkIDAhPT1lLmdldEVsZW1lbnRzQnlU
YWdOYW1lP2UuZ2V0RWxlbWVudHNCeVRhZ05hbWUodHx8IioiKTp2b2lkIDAhPT1lLnF1ZXJ5U2Vs
ZWN0b3JBbGw/ZS5xdWVyeVNlbGVjdG9yQWxsKHR8fCIqIik6W10sdm9pZCAwPT09dHx8dCYmaShl
LHQpP2RlLm1lcmdlKFtlXSxuKTpufWZ1bmN0aW9uIGIoZSx0KXtmb3IodmFyIG49MCxyPWUubGVu
Z3RoO248cjtuKyspRGUuc2V0KGVbbl0sImdsb2JhbEV2YWwiLCF0fHxEZS5nZXQodFtuXSwiZ2xv
YmFsRXZhbCIpKX1mdW5jdGlvbiBfKGUsdCxuLHIsaSl7Zm9yKHZhciBvLHMsYSx1LGwsYyxwPXQu
Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGY9W10saD0wLGQ9ZS5sZW5ndGg7aDxkO2grKylpZigo
bz1lW2hdKXx8MD09PW8paWYoIm9iamVjdCI9PT1kZS50eXBlKG8pKWRlLm1lcmdlKGYsby5ub2Rl
VHlwZT9bb106bykKK2Vsc2UgaWYoS2UudGVzdChvKSl7Zm9yKHM9c3x8cC5hcHBlbmRDaGlsZCh0
LmNyZWF0ZUVsZW1lbnQoImRpdiIpKSxhPShXZS5leGVjKG8pfHxbIiIsIiJdKVsxXS50b0xvd2Vy
Q2FzZSgpLHU9R2VbYV18fEdlLl9kZWZhdWx0LHMuaW5uZXJIVE1MPXVbMV0rZGUuaHRtbFByZWZp
bHRlcihvKSt1WzJdLGM9dVswXTtjLS07KXM9cy5sYXN0Q2hpbGQKK2RlLm1lcmdlKGYscy5jaGls
ZE5vZGVzKSxzPXAuZmlyc3RDaGlsZCxzLnRleHRDb250ZW50PSIifWVsc2UgZi5wdXNoKHQuY3Jl
YXRlVGV4dE5vZGUobykpCitmb3IocC50ZXh0Q29udGVudD0iIixoPTA7bz1mW2grK107KWlmKHIm
JmRlLmluQXJyYXkobyxyKT4tMSlpJiZpLnB1c2gobykKK2Vsc2UgaWYobD1kZS5jb250YWlucyhv
Lm93bmVyRG9jdW1lbnQsbykscz12KHAuYXBwZW5kQ2hpbGQobyksInNjcmlwdCIpLGwmJmIocyks
bilmb3IoYz0wO289c1tjKytdOykkZS50ZXN0KG8udHlwZXx8IiIpJiZuLnB1c2gobykKK3JldHVy
biBwfWZ1bmN0aW9uIHcoKXtyZXR1cm4hMH1mdW5jdGlvbiBFKCl7cmV0dXJuITF9ZnVuY3Rpb24g
eCgpe3RyeXtyZXR1cm4gbmUuYWN0aXZlRWxlbWVudH1jYXRjaChlKXt9fWZ1bmN0aW9uIEMoZSx0
LG4scixpLG8pe3ZhciBzLGEKK2lmKCJvYmplY3QiPT10eXBlb2YgdCl7InN0cmluZyIhPXR5cGVv
ZiBuJiYocj1yfHxuLG49dm9pZCAwKQorZm9yKGEgaW4gdClDKGUsYSxuLHIsdFthXSxvKQorcmV0
dXJuIGV9aWYobnVsbD09ciYmbnVsbD09aT8oaT1uLHI9bj12b2lkIDApOm51bGw9PWkmJigic3Ry
aW5nIj09dHlwZW9mIG4/KGk9cixyPXZvaWQgMCk6KGk9cixyPW4sbj12b2lkIDApKSwhMT09PWkp
aT1FCitlbHNlIGlmKCFpKXJldHVybiBlCityZXR1cm4gMT09PW8mJihzPWksaT1mdW5jdGlvbihl
KXtyZXR1cm4gZGUoKS5vZmYoZSkscy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGkuZ3VpZD1zLmd1
aWR8fChzLmd1aWQ9ZGUuZ3VpZCsrKSksZS5lYWNoKGZ1bmN0aW9uKCl7ZGUuZXZlbnQuYWRkKHRo
aXMsdCxpLHIsbil9KX1mdW5jdGlvbiBPKGUsdCl7cmV0dXJuIGkoZSwidGFibGUiKSYmaSgxMSE9
PXQubm9kZVR5cGU/dDp0LmZpcnN0Q2hpbGQsInRyIik/ZGUoIj50Ym9keSIsZSlbMF18fGU6ZX1m
dW5jdGlvbiBBKGUpe3JldHVybiBlLnR5cGU9KG51bGwhPT1lLmdldEF0dHJpYnV0ZSgidHlwZSIp
KSsiLyIrZS50eXBlLGV9ZnVuY3Rpb24gVChlKXt2YXIgdD1udC5leGVjKGUudHlwZSkKK3JldHVy
biB0P2UudHlwZT10WzFdOmUucmVtb3ZlQXR0cmlidXRlKCJ0eXBlIiksZX1mdW5jdGlvbiBTKGUs
dCl7dmFyIG4scixpLG8scyxhLHUsbAoraWYoMT09PXQubm9kZVR5cGUpe2lmKERlLmhhc0RhdGEo
ZSkmJihvPURlLmFjY2VzcyhlKSxzPURlLnNldCh0LG8pLGw9by5ldmVudHMpKXtkZWxldGUgcy5o
YW5kbGUscy5ldmVudHM9e30KK2ZvcihpIGluIGwpZm9yKG49MCxyPWxbaV0ubGVuZ3RoO248cjtu
KyspZGUuZXZlbnQuYWRkKHQsaSxsW2ldW25dKX1MZS5oYXNEYXRhKGUpJiYoYT1MZS5hY2Nlc3Mo
ZSksdT1kZS5leHRlbmQoe30sYSksTGUuc2V0KHQsdSkpfX1mdW5jdGlvbiBSKGUsdCl7dmFyIG49
dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpCisiaW5wdXQiPT09biYmVmUudGVzdChlLnR5cGUpP3Qu
Y2hlY2tlZD1lLmNoZWNrZWQ6ImlucHV0IiE9PW4mJiJ0ZXh0YXJlYSIhPT1ufHwodC5kZWZhdWx0
VmFsdWU9ZS5kZWZhdWx0VmFsdWUpfWZ1bmN0aW9uIGsoZSx0LHIsaSl7dD1vZS5hcHBseShbXSx0
KQordmFyIG8scyxhLHUsbCxjLHA9MCxmPWUubGVuZ3RoLGg9Zi0xLGQ9dFswXSxtPWRlLmlzRnVu
Y3Rpb24oZCkKK2lmKG18fGY+MSYmInN0cmluZyI9PXR5cGVvZiBkJiYhaGUuY2hlY2tDbG9uZSYm
dHQudGVzdChkKSlyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKG4pe3ZhciBvPWUuZXEobikKK20mJih0
WzBdPWQuY2FsbCh0aGlzLG4sby5odG1sKCkpKSxrKG8sdCxyLGkpfSkKK2lmKGYmJihvPV8odCxl
WzBdLm93bmVyRG9jdW1lbnQsITEsZSxpKSxzPW8uZmlyc3RDaGlsZCwxPT09by5jaGlsZE5vZGVz
Lmxlbmd0aCYmKG89cyksc3x8aSkpe2ZvcihhPWRlLm1hcCh2KG8sInNjcmlwdCIpLEEpLHU9YS5s
ZW5ndGg7cDxmO3ArKylsPW8scCE9PWgmJihsPWRlLmNsb25lKGwsITAsITApLHUmJmRlLm1lcmdl
KGEsdihsLCJzY3JpcHQiKSkpLHIuY2FsbChlW3BdLGwscCkKK2lmKHUpZm9yKGM9YVthLmxlbmd0
aC0xXS5vd25lckRvY3VtZW50LGRlLm1hcChhLFQpLHA9MDtwPHU7cCsrKWw9YVtwXSwkZS50ZXN0
KGwudHlwZXx8IiIpJiYhRGUuYWNjZXNzKGwsImdsb2JhbEV2YWwiKSYmZGUuY29udGFpbnMoYyxs
KSYmKGwuc3JjP2RlLl9ldmFsVXJsJiZkZS5fZXZhbFVybChsLnNyYyk6bihsLnRleHRDb250ZW50
LnJlcGxhY2UocnQsIiIpLGMpKX1yZXR1cm4gZX1mdW5jdGlvbiBOKGUsdCxuKXtmb3IodmFyIHIs
aT10P2RlLmZpbHRlcih0LGUpOmUsbz0wO251bGwhPShyPWlbb10pO28rKylufHwxIT09ci5ub2Rl
VHlwZXx8ZGUuY2xlYW5EYXRhKHYocikpLHIucGFyZW50Tm9kZSYmKG4mJmRlLmNvbnRhaW5zKHIu
b3duZXJEb2N1bWVudCxyKSYmYih2KHIsInNjcmlwdCIpKSxyLnBhcmVudE5vZGUucmVtb3ZlQ2hp
bGQocikpCityZXR1cm4gZX1mdW5jdGlvbiBQKGUsdCxuKXt2YXIgcixpLG8scyxhPWUuc3R5bGUK
K3JldHVybiBuPW58fHN0KGUpLG4mJihzPW4uZ2V0UHJvcGVydHlWYWx1ZSh0KXx8blt0XSwiIiE9
PXN8fGRlLmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKXx8KHM9ZGUuc3R5bGUoZSx0KSksIWhl
LnBpeGVsTWFyZ2luUmlnaHQoKSYmb3QudGVzdChzKSYmaXQudGVzdCh0KSYmKHI9YS53aWR0aCxp
PWEubWluV2lkdGgsbz1hLm1heFdpZHRoLGEubWluV2lkdGg9YS5tYXhXaWR0aD1hLndpZHRoPXMs
cz1uLndpZHRoLGEud2lkdGg9cixhLm1pbldpZHRoPWksYS5tYXhXaWR0aD1vKSksdm9pZCAwIT09
cz9zKyIiOnN9ZnVuY3Rpb24gaihlLHQpe3JldHVybntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZSgp
P3ZvaWQgZGVsZXRlIHRoaXMuZ2V0Oih0aGlzLmdldD10KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9
fX1mdW5jdGlvbiBEKGUpe2lmKGUgaW4gZnQpcmV0dXJuIGUKK2Zvcih2YXIgdD1lWzBdLnRvVXBw
ZXJDYXNlKCkrZS5zbGljZSgxKSxuPXB0Lmxlbmd0aDtuLS07KWlmKChlPXB0W25dK3QpaW4gZnQp
cmV0dXJuIGV9ZnVuY3Rpb24gTChlKXt2YXIgdD1kZS5jc3NQcm9wc1tlXQorcmV0dXJuIHR8fCh0
PWRlLmNzc1Byb3BzW2VdPUQoZSl8fGUpLHR9ZnVuY3Rpb24gSShlLHQsbil7dmFyIHI9emUuZXhl
Yyh0KQorcmV0dXJuIHI/TWF0aC5tYXgoMCxyWzJdLShufHwwKSkrKHJbM118fCJweCIpOnR9ZnVu
Y3Rpb24gTShlLHQsbixyLGkpe3ZhciBvLHM9MAorZm9yKG89bj09PShyPyJib3JkZXIiOiJjb250
ZW50Iik/NDoid2lkdGgiPT09dD8xOjA7bzw0O28rPTIpIm1hcmdpbiI9PT1uJiYocys9ZGUuY3Nz
KGUsbitVZVtvXSwhMCxpKSkscj8oImNvbnRlbnQiPT09biYmKHMtPWRlLmNzcyhlLCJwYWRkaW5n
IitVZVtvXSwhMCxpKSksIm1hcmdpbiIhPT1uJiYocy09ZGUuY3NzKGUsImJvcmRlciIrVWVbb10r
IldpZHRoIiwhMCxpKSkpOihzKz1kZS5jc3MoZSwicGFkZGluZyIrVWVbb10sITAsaSksInBhZGRp
bmciIT09biYmKHMrPWRlLmNzcyhlLCJib3JkZXIiK1VlW29dKyJXaWR0aCIsITAsaSkpKQorcmV0
dXJuIHN9ZnVuY3Rpb24gRihlLHQsbil7dmFyIHIsaT1zdChlKSxvPVAoZSx0LGkpLHM9ImJvcmRl
ci1ib3giPT09ZGUuY3NzKGUsImJveFNpemluZyIsITEsaSkKK3JldHVybiBvdC50ZXN0KG8pP286
KHI9cyYmKGhlLmJveFNpemluZ1JlbGlhYmxlKCl8fG89PT1lLnN0eWxlW3RdKSwiYXV0byI9PT1v
JiYobz1lWyJvZmZzZXQiK3RbMF0udG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpXSksKG89cGFyc2VG
bG9hdChvKXx8MCkrTShlLHQsbnx8KHM/ImJvcmRlciI6ImNvbnRlbnQiKSxyLGkpKyJweCIpfWZ1
bmN0aW9uIHooZSx0LG4scixpKXtyZXR1cm4gbmV3IHoucHJvdG90eXBlLmluaXQoZSx0LG4scixp
KX1mdW5jdGlvbiBVKCl7ZHQmJighMT09PW5lLmhpZGRlbiYmZS5yZXF1ZXN0QW5pbWF0aW9uRnJh
bWU/ZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoVSk6ZS5zZXRUaW1lb3V0KFUsZGUuZnguaW50ZXJ2
YWwpLGRlLmZ4LnRpY2soKSl9ZnVuY3Rpb24gQigpe3JldHVybiBlLnNldFRpbWVvdXQoZnVuY3Rp
b24oKXtodD12b2lkIDB9KSxodD1kZS5ub3coKX1mdW5jdGlvbiBxKGUsdCl7dmFyIG4scj0wLGk9
e2hlaWdodDplfQorZm9yKHQ9dD8xOjA7cjw0O3IrPTItdCluPVVlW3JdLGlbIm1hcmdpbiIrbl09
aVsicGFkZGluZyIrbl09ZQorcmV0dXJuIHQmJihpLm9wYWNpdHk9aS53aWR0aD1lKSxpfWZ1bmN0
aW9uIEgoZSx0LG4pe2Zvcih2YXIgcixpPSgkLnR3ZWVuZXJzW3RdfHxbXSkuY29uY2F0KCQudHdl
ZW5lcnNbIioiXSksbz0wLHM9aS5sZW5ndGg7bzxzO28rKylpZihyPWlbb10uY2FsbChuLHQsZSkp
cmV0dXJuIHJ9ZnVuY3Rpb24gVihlLHQsbil7dmFyIHIsaSxvLHMsYSx1LGwsYyxwPSJ3aWR0aCJp
biB0fHwiaGVpZ2h0ImluIHQsZj10aGlzLGg9e30sZD1lLnN0eWxlLG09ZS5ub2RlVHlwZSYmQmUo
ZSksZz1EZS5nZXQoZSwiZnhzaG93IikKK24ucXVldWV8fChzPWRlLl9xdWV1ZUhvb2tzKGUsImZ4
IiksbnVsbD09cy51bnF1ZXVlZCYmKHMudW5xdWV1ZWQ9MCxhPXMuZW1wdHkuZmlyZSxzLmVtcHR5
LmZpcmU9ZnVuY3Rpb24oKXtzLnVucXVldWVkfHxhKCl9KSxzLnVucXVldWVkKyssZi5hbHdheXMo
ZnVuY3Rpb24oKXtmLmFsd2F5cyhmdW5jdGlvbigpe3MudW5xdWV1ZWQtLSxkZS5xdWV1ZShlLCJm
eCIpLmxlbmd0aHx8cy5lbXB0eS5maXJlKCl9KX0pKQorZm9yKHIgaW4gdClpZihpPXRbcl0sbXQu
dGVzdChpKSl7aWYoZGVsZXRlIHRbcl0sbz1vfHwidG9nZ2xlIj09PWksaT09PShtPyJoaWRlIjoi
c2hvdyIpKXtpZigic2hvdyIhPT1pfHwhZ3x8dm9pZCAwPT09Z1tyXSljb250aW51ZQorbT0hMH1o
W3JdPWcmJmdbcl18fGRlLnN0eWxlKGUscil9aWYoKHU9IWRlLmlzRW1wdHlPYmplY3QodCkpfHwh
ZGUuaXNFbXB0eU9iamVjdChoKSl7cCYmMT09PWUubm9kZVR5cGUmJihuLm92ZXJmbG93PVtkLm92
ZXJmbG93LGQub3ZlcmZsb3dYLGQub3ZlcmZsb3dZXSxsPWcmJmcuZGlzcGxheSxudWxsPT1sJiYo
bD1EZS5nZXQoZSwiZGlzcGxheSIpKSxjPWRlLmNzcyhlLCJkaXNwbGF5IiksIm5vbmUiPT09YyYm
KGw/Yz1sOih5KFtlXSwhMCksbD1lLnN0eWxlLmRpc3BsYXl8fGwsYz1kZS5jc3MoZSwiZGlzcGxh
eSIpLHkoW2VdKSkpLCgiaW5saW5lIj09PWN8fCJpbmxpbmUtYmxvY2siPT09YyYmbnVsbCE9bCkm
JiJub25lIj09PWRlLmNzcyhlLCJmbG9hdCIpJiYodXx8KGYuZG9uZShmdW5jdGlvbigpe2QuZGlz
cGxheT1sfSksbnVsbD09bCYmKGM9ZC5kaXNwbGF5LGw9Im5vbmUiPT09Yz8iIjpjKSksZC5kaXNw
bGF5PSJpbmxpbmUtYmxvY2siKSksbi5vdmVyZmxvdyYmKGQub3ZlcmZsb3c9ImhpZGRlbiIsZi5h
bHdheXMoZnVuY3Rpb24oKXtkLm92ZXJmbG93PW4ub3ZlcmZsb3dbMF0sZC5vdmVyZmxvd1g9bi5v
dmVyZmxvd1sxXSxkLm92ZXJmbG93WT1uLm92ZXJmbG93WzJdfSkpLHU9ITEKK2ZvcihyIGluIGgp
dXx8KGc/ImhpZGRlbiJpbiBnJiYobT1nLmhpZGRlbik6Zz1EZS5hY2Nlc3MoZSwiZnhzaG93Iix7
ZGlzcGxheTpsfSksbyYmKGcuaGlkZGVuPSFtKSxtJiZ5KFtlXSwhMCksZi5kb25lKGZ1bmN0aW9u
KCl7bXx8eShbZV0pLERlLnJlbW92ZShlLCJmeHNob3ciKQorZm9yKHIgaW4gaClkZS5zdHlsZShl
LHIsaFtyXSl9KSksdT1IKG0/Z1tyXTowLHIsZiksciBpbiBnfHwoZ1tyXT11LnN0YXJ0LG0mJih1
LmVuZD11LnN0YXJ0LHUuc3RhcnQ9MCkpfX1mdW5jdGlvbiBXKGUsdCl7dmFyIG4scixpLG8scwor
Zm9yKG4gaW4gZSlpZihyPWRlLmNhbWVsQ2FzZShuKSxpPXRbcl0sbz1lW25dLEFycmF5LmlzQXJy
YXkobykmJihpPW9bMV0sbz1lW25dPW9bMF0pLG4hPT1yJiYoZVtyXT1vLGRlbGV0ZSBlW25dKSwo
cz1kZS5jc3NIb29rc1tyXSkmJiJleHBhbmQiaW4gcyl7bz1zLmV4cGFuZChvKSxkZWxldGUgZVty
XQorZm9yKG4gaW4gbyluIGluIGV8fChlW25dPW9bbl0sdFtuXT1pKX1lbHNlIHRbcl09aX1mdW5j
dGlvbiAkKGUsdCxuKXt2YXIgcixpLG89MCxzPSQucHJlZmlsdGVycy5sZW5ndGgsYT1kZS5EZWZl
cnJlZCgpLmFsd2F5cyhmdW5jdGlvbigpe2RlbGV0ZSB1LmVsZW19KSx1PWZ1bmN0aW9uKCl7aWYo
aSlyZXR1cm4hMQorZm9yKHZhciB0PWh0fHxCKCksbj1NYXRoLm1heCgwLGwuc3RhcnRUaW1lK2wu
ZHVyYXRpb24tdCkscj1uL2wuZHVyYXRpb258fDAsbz0xLXIscz0wLHU9bC50d2VlbnMubGVuZ3Ro
O3M8dTtzKyspbC50d2VlbnNbc10ucnVuKG8pCityZXR1cm4gYS5ub3RpZnlXaXRoKGUsW2wsbyxu
XSksbzwxJiZ1P246KHV8fGEubm90aWZ5V2l0aChlLFtsLDEsMF0pLGEucmVzb2x2ZVdpdGgoZSxb
bF0pLCExKX0sbD1hLnByb21pc2Uoe2VsZW06ZSxwcm9wczpkZS5leHRlbmQoe30sdCksb3B0czpk
ZS5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e30sZWFzaW5nOmRlLmVhc2luZy5fZGVmYXVsdH0s
biksb3JpZ2luYWxQcm9wZXJ0aWVzOnQsb3JpZ2luYWxPcHRpb25zOm4sc3RhcnRUaW1lOmh0fHxC
KCksZHVyYXRpb246bi5kdXJhdGlvbix0d2VlbnM6W10sY3JlYXRlVHdlZW46ZnVuY3Rpb24odCxu
KXt2YXIgcj1kZS5Ud2VlbihlLGwub3B0cyx0LG4sbC5vcHRzLnNwZWNpYWxFYXNpbmdbdF18fGwu
b3B0cy5lYXNpbmcpCityZXR1cm4gbC50d2VlbnMucHVzaChyKSxyfSxzdG9wOmZ1bmN0aW9uKHQp
e3ZhciBuPTAscj10P2wudHdlZW5zLmxlbmd0aDowCitpZihpKXJldHVybiB0aGlzCitmb3IoaT0h
MDtuPHI7bisrKWwudHdlZW5zW25dLnJ1bigxKQorcmV0dXJuIHQ/KGEubm90aWZ5V2l0aChlLFts
LDEsMF0pLGEucmVzb2x2ZVdpdGgoZSxbbCx0XSkpOmEucmVqZWN0V2l0aChlLFtsLHRdKSx0aGlz
fX0pLGM9bC5wcm9wcworZm9yKFcoYyxsLm9wdHMuc3BlY2lhbEVhc2luZyk7bzxzO28rKylpZihy
PSQucHJlZmlsdGVyc1tvXS5jYWxsKGwsZSxjLGwub3B0cykpcmV0dXJuIGRlLmlzRnVuY3Rpb24o
ci5zdG9wKSYmKGRlLl9xdWV1ZUhvb2tzKGwuZWxlbSxsLm9wdHMucXVldWUpLnN0b3A9ZGUucHJv
eHkoci5zdG9wLHIpKSxyCityZXR1cm4gZGUubWFwKGMsSCxsKSxkZS5pc0Z1bmN0aW9uKGwub3B0
cy5zdGFydCkmJmwub3B0cy5zdGFydC5jYWxsKGUsbCksbC5wcm9ncmVzcyhsLm9wdHMucHJvZ3Jl
c3MpLmRvbmUobC5vcHRzLmRvbmUsbC5vcHRzLmNvbXBsZXRlKS5mYWlsKGwub3B0cy5mYWlsKS5h
bHdheXMobC5vcHRzLmFsd2F5cyksZGUuZngudGltZXIoZGUuZXh0ZW5kKHUse2VsZW06ZSxhbmlt
OmwscXVldWU6bC5vcHRzLnF1ZXVlfSkpLGx9ZnVuY3Rpb24gRyhlKXtyZXR1cm4oZS5tYXRjaChS
ZSl8fFtdKS5qb2luKCIgIil9ZnVuY3Rpb24gSyhlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUmJmUu
Z2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIn1mdW5jdGlvbiBRKGUsdCxuLHIpe3ZhciBpCitpZihB
cnJheS5pc0FycmF5KHQpKWRlLmVhY2godCxmdW5jdGlvbih0LGkpe258fEF0LnRlc3QoZSk/cihl
LGkpOlEoZSsiWyIrKCJvYmplY3QiPT10eXBlb2YgaSYmbnVsbCE9aT90OiIiKSsiXSIsaSxuLHIp
fSkKK2Vsc2UgaWYobnx8Im9iamVjdCIhPT1kZS50eXBlKHQpKXIoZSx0KQorZWxzZSBmb3IoaSBp
biB0KVEoZSsiWyIraSsiXSIsdFtpXSxuLHIpfWZ1bmN0aW9uIFkoZSl7cmV0dXJuIGZ1bmN0aW9u
KHQsbil7InN0cmluZyIhPXR5cGVvZiB0JiYobj10LHQ9IioiKQordmFyIHIsaT0wLG89dC50b0xv
d2VyQ2FzZSgpLm1hdGNoKFJlKXx8W10KK2lmKGRlLmlzRnVuY3Rpb24obikpZm9yKDtyPW9baSsr
XTspIisiPT09clswXT8ocj1yLnNsaWNlKDEpfHwiKiIsKGVbcl09ZVtyXXx8W10pLnVuc2hpZnQo
bikpOihlW3JdPWVbcl18fFtdKS5wdXNoKG4pfX1mdW5jdGlvbiBKKGUsdCxuLHIpe2Z1bmN0aW9u
IGkoYSl7dmFyIHUKK3JldHVybiBvW2FdPSEwLGRlLmVhY2goZVthXXx8W10sZnVuY3Rpb24oZSxh
KXt2YXIgbD1hKHQsbixyKQorcmV0dXJuInN0cmluZyIhPXR5cGVvZiBsfHxzfHxvW2xdP3M/ISh1
PWwpOnZvaWQgMDoodC5kYXRhVHlwZXMudW5zaGlmdChsKSxpKGwpLCExKX0pLHV9dmFyIG89e30s
cz1lPT09RnQKK3JldHVybiBpKHQuZGF0YVR5cGVzWzBdKXx8IW9bIioiXSYmaSgiKiIpfWZ1bmN0
aW9uIFgoZSx0KXt2YXIgbixyLGk9ZGUuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zfHx7fQorZm9y
KG4gaW4gdCl2b2lkIDAhPT10W25dJiYoKGlbbl0/ZTpyfHwocj17fSkpW25dPXRbbl0pCityZXR1
cm4gciYmZGUuZXh0ZW5kKCEwLGUsciksZX1mdW5jdGlvbiBaKGUsdCxuKXtmb3IodmFyIHIsaSxv
LHMsYT1lLmNvbnRlbnRzLHU9ZS5kYXRhVHlwZXM7IioiPT09dVswXTspdS5zaGlmdCgpLHZvaWQg
MD09PXImJihyPWUubWltZVR5cGV8fHQuZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtVHlwZSIp
KQoraWYocilmb3IoaSBpbiBhKWlmKGFbaV0mJmFbaV0udGVzdChyKSl7dS51bnNoaWZ0KGkpCiti
cmVha31pZih1WzBdaW4gbilvPXVbMF0KK2Vsc2V7Zm9yKGkgaW4gbil7aWYoIXVbMF18fGUuY29u
dmVydGVyc1tpKyIgIit1WzBdXSl7bz1pCiticmVha31zfHwocz1pKX1vPW98fHN9aWYobylyZXR1
cm4gbyE9PXVbMF0mJnUudW5zaGlmdChvKSxuW29dfWZ1bmN0aW9uIGVlKGUsdCxuLHIpe3ZhciBp
LG8scyxhLHUsbD17fSxjPWUuZGF0YVR5cGVzLnNsaWNlKCkKK2lmKGNbMV0pZm9yKHMgaW4gZS5j
b252ZXJ0ZXJzKWxbcy50b0xvd2VyQ2FzZSgpXT1lLmNvbnZlcnRlcnNbc10KK2ZvcihvPWMuc2hp
ZnQoKTtvOylpZihlLnJlc3BvbnNlRmllbGRzW29dJiYobltlLnJlc3BvbnNlRmllbGRzW29dXT10
KSwhdSYmciYmZS5kYXRhRmlsdGVyJiYodD1lLmRhdGFGaWx0ZXIodCxlLmRhdGFUeXBlKSksdT1v
LG89Yy5zaGlmdCgpKWlmKCIqIj09PW8pbz11CitlbHNlIGlmKCIqIiE9PXUmJnUhPT1vKXtpZigh
KHM9bFt1KyIgIitvXXx8bFsiKiAiK29dKSlmb3IoaSBpbiBsKWlmKGE9aS5zcGxpdCgiICIpLGFb
MV09PT1vJiYocz1sW3UrIiAiK2FbMF1dfHxsWyIqICIrYVswXV0pKXshMD09PXM/cz1sW2ldOiEw
IT09bFtpXSYmKG89YVswXSxjLnVuc2hpZnQoYVsxXSkpCiticmVha31pZighMCE9PXMpaWYocyYm
ZS50aHJvd3MpdD1zKHQpCitlbHNlIHRyeXt0PXModCl9Y2F0Y2goZSl7cmV0dXJue3N0YXRlOiJw
YXJzZXJlcnJvciIsZXJyb3I6cz9lOiJObyBjb252ZXJzaW9uIGZyb20gIit1KyIgdG8gIitvfX19
cmV0dXJue3N0YXRlOiJzdWNjZXNzIixkYXRhOnR9fXZhciB0ZT1bXSxuZT1lLmRvY3VtZW50LHJl
PU9iamVjdC5nZXRQcm90b3R5cGVPZixpZT10ZS5zbGljZSxvZT10ZS5jb25jYXQsc2U9dGUucHVz
aCxhZT10ZS5pbmRleE9mLHVlPXt9LGxlPXVlLnRvU3RyaW5nLGNlPXVlLmhhc093blByb3BlcnR5
LHBlPWNlLnRvU3RyaW5nLGZlPXBlLmNhbGwoT2JqZWN0KSxoZT17fSxkZT1mdW5jdGlvbihlLHQp
e3JldHVybiBuZXcgZGUuZm4uaW5pdChlLHQpfSxtZT0vXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZF
RkZceEEwXSskL2csZ2U9L14tbXMtLyx5ZT0vLShbYS16XSkvZyx2ZT1mdW5jdGlvbihlLHQpe3Jl
dHVybiB0LnRvVXBwZXJDYXNlKCl9CitkZS5mbj1kZS5wcm90b3R5cGU9e2pxdWVyeToiMy4yLjEi
LGNvbnN0cnVjdG9yOmRlLGxlbmd0aDowLHRvQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gaWUuY2Fs
bCh0aGlzKX0sZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP2llLmNhbGwodGhpcyk6ZTww
P3RoaXNbZSt0aGlzLmxlbmd0aF06dGhpc1tlXX0scHVzaFN0YWNrOmZ1bmN0aW9uKGUpe3ZhciB0
PWRlLm1lcmdlKHRoaXMuY29uc3RydWN0b3IoKSxlKQorcmV0dXJuIHQucHJldk9iamVjdD10aGlz
LHR9LGVhY2g6ZnVuY3Rpb24oZSl7cmV0dXJuIGRlLmVhY2godGhpcyxlKX0sbWFwOmZ1bmN0aW9u
KGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhkZS5tYXAodGhpcyxmdW5jdGlvbih0LG4pe3JldHVy
biBlLmNhbGwodCxuLHQpfSkpfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFj
ayhpZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlz
LmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxlcTpmdW5jdGlvbihl
KXt2YXIgdD10aGlzLmxlbmd0aCxuPStlKyhlPDA/dDowKQorcmV0dXJuIHRoaXMucHVzaFN0YWNr
KG4+PTAmJm48dD9bdGhpc1tuXV06W10pfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmV2
T2JqZWN0fHx0aGlzLmNvbnN0cnVjdG9yKCl9LHB1c2g6c2Usc29ydDp0ZS5zb3J0LHNwbGljZTp0
ZS5zcGxpY2V9LGRlLmV4dGVuZD1kZS5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgZSx0LG4scixp
LG8scz1hcmd1bWVudHNbMF18fHt9LGE9MSx1PWFyZ3VtZW50cy5sZW5ndGgsbD0hMQorZm9yKCJi
b29sZWFuIj09dHlwZW9mIHMmJihsPXMscz1hcmd1bWVudHNbYV18fHt9LGErKyksIm9iamVjdCI9
PXR5cGVvZiBzfHxkZS5pc0Z1bmN0aW9uKHMpfHwocz17fSksYT09PXUmJihzPXRoaXMsYS0tKTth
PHU7YSsrKWlmKG51bGwhPShlPWFyZ3VtZW50c1thXSkpZm9yKHQgaW4gZSluPXNbdF0scj1lW3Rd
LHMhPT1yJiYobCYmciYmKGRlLmlzUGxhaW5PYmplY3Qocil8fChpPUFycmF5LmlzQXJyYXkocikp
KT8oaT8oaT0hMSxvPW4mJkFycmF5LmlzQXJyYXkobik/bjpbXSk6bz1uJiZkZS5pc1BsYWluT2Jq
ZWN0KG4pP246e30sc1t0XT1kZS5leHRlbmQobCxvLHIpKTp2b2lkIDAhPT1yJiYoc1t0XT1yKSkK
K3JldHVybiBzfSxkZS5leHRlbmQoe2V4cGFuZG86ImpRdWVyeSIrKCIzLjIuMSIrTWF0aC5yYW5k
b20oKSkucmVwbGFjZSgvXEQvZywiIiksaXNSZWFkeTohMCxlcnJvcjpmdW5jdGlvbihlKXt0aHJv
dyBuZXcgRXJyb3IoZSl9LG5vb3A6ZnVuY3Rpb24oKXt9LGlzRnVuY3Rpb246ZnVuY3Rpb24oZSl7
cmV0dXJuImZ1bmN0aW9uIj09PWRlLnR5cGUoZSl9LGlzV2luZG93OmZ1bmN0aW9uKGUpe3JldHVy
biBudWxsIT1lJiZlPT09ZS53aW5kb3d9LGlzTnVtZXJpYzpmdW5jdGlvbihlKXt2YXIgdD1kZS50
eXBlKGUpCityZXR1cm4oIm51bWJlciI9PT10fHwic3RyaW5nIj09PXQpJiYhaXNOYU4oZS1wYXJz
ZUZsb2F0KGUpKX0saXNQbGFpbk9iamVjdDpmdW5jdGlvbihlKXt2YXIgdCxuCityZXR1cm4hKCFl
fHwiW29iamVjdCBPYmplY3RdIiE9PWxlLmNhbGwoZSkpJiYoISh0PXJlKGUpKXx8ImZ1bmN0aW9u
Ij09dHlwZW9mKG49Y2UuY2FsbCh0LCJjb25zdHJ1Y3RvciIpJiZ0LmNvbnN0cnVjdG9yKSYmcGUu
Y2FsbChuKT09PWZlKX0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihlKXt2YXIgdAorZm9yKHQgaW4g
ZSlyZXR1cm4hMQorcmV0dXJuITB9LHR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/ZSsi
Ijoib2JqZWN0Ij09dHlwZW9mIGV8fCJmdW5jdGlvbiI9PXR5cGVvZiBlP3VlW2xlLmNhbGwoZSld
fHwib2JqZWN0Ijp0eXBlb2YgZX0sZ2xvYmFsRXZhbDpmdW5jdGlvbihlKXtuKGUpfSxjYW1lbENh
c2U6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZShnZSwibXMtIikucmVwbGFjZSh5ZSx2ZSl9
LGVhY2g6ZnVuY3Rpb24oZSx0KXt2YXIgbixpPTAKK2lmKHIoZSkpZm9yKG49ZS5sZW5ndGg7aTxu
JiYhMSE9PXQuY2FsbChlW2ldLGksZVtpXSk7aSsrKTtlbHNlIGZvcihpIGluIGUpaWYoITE9PT10
LmNhbGwoZVtpXSxpLGVbaV0pKWJyZWFrCityZXR1cm4gZX0sdHJpbTpmdW5jdGlvbihlKXtyZXR1
cm4gbnVsbD09ZT8iIjooZSsiIikucmVwbGFjZShtZSwiIil9LG1ha2VBcnJheTpmdW5jdGlvbihl
LHQpe3ZhciBuPXR8fFtdCityZXR1cm4gbnVsbCE9ZSYmKHIoT2JqZWN0KGUpKT9kZS5tZXJnZShu
LCJzdHJpbmciPT10eXBlb2YgZT9bZV06ZSk6c2UuY2FsbChuLGUpKSxufSxpbkFycmF5OmZ1bmN0
aW9uKGUsdCxuKXtyZXR1cm4gbnVsbD09dD8tMTphZS5jYWxsKHQsZSxuKX0sbWVyZ2U6ZnVuY3Rp
b24oZSx0KXtmb3IodmFyIG49K3QubGVuZ3RoLHI9MCxpPWUubGVuZ3RoO3I8bjtyKyspZVtpKytd
PXRbcl0KK3JldHVybiBlLmxlbmd0aD1pLGV9LGdyZXA6ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIg
cj1bXSxpPTAsbz1lLmxlbmd0aCxzPSFuO2k8bztpKyspIXQoZVtpXSxpKSE9PXMmJnIucHVzaChl
W2ldKQorcmV0dXJuIHJ9LG1hcDpmdW5jdGlvbihlLHQsbil7dmFyIGksbyxzPTAsYT1bXQoraWYo
cihlKSlmb3IoaT1lLmxlbmd0aDtzPGk7cysrKW51bGwhPShvPXQoZVtzXSxzLG4pKSYmYS5wdXNo
KG8pCitlbHNlIGZvcihzIGluIGUpbnVsbCE9KG89dChlW3NdLHMsbikpJiZhLnB1c2gobykKK3Jl
dHVybiBvZS5hcHBseShbXSxhKX0sZ3VpZDoxLHByb3h5OmZ1bmN0aW9uKGUsdCl7dmFyIG4scixp
CitpZigic3RyaW5nIj09dHlwZW9mIHQmJihuPWVbdF0sdD1lLGU9biksZGUuaXNGdW5jdGlvbihl
KSlyZXR1cm4gcj1pZS5jYWxsKGFyZ3VtZW50cywyKSxpPWZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBw
bHkodHx8dGhpcyxyLmNvbmNhdChpZS5jYWxsKGFyZ3VtZW50cykpKX0saS5ndWlkPWUuZ3VpZD1l
Lmd1aWR8fGRlLmd1aWQrKyxpfSxub3c6RGF0ZS5ub3csc3VwcG9ydDpoZX0pLCJmdW5jdGlvbiI9
PXR5cGVvZiBTeW1ib2wmJihkZS5mbltTeW1ib2wuaXRlcmF0b3JdPXRlW1N5bWJvbC5pdGVyYXRv
cl0pLGRlLmVhY2goIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJl
Z0V4cCBPYmplY3QgRXJyb3IgU3ltYm9sIi5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsdCl7dWVbIltv
YmplY3QgIit0KyJdIl09dC50b0xvd2VyQ2FzZSgpfSkKK3ZhciBiZT1mdW5jdGlvbihlKXtmdW5j
dGlvbiB0KGUsdCxuLHIpe3ZhciBpLG8scyxhLHUsYyxmLGg9dCYmdC5vd25lckRvY3VtZW50LGQ9
dD90Lm5vZGVUeXBlOjkKK2lmKG49bnx8W10sInN0cmluZyIhPXR5cGVvZiBlfHwhZXx8MSE9PWQm
JjkhPT1kJiYxMSE9PWQpcmV0dXJuIG4KK2lmKCFyJiYoKHQ/dC5vd25lckRvY3VtZW50fHx0Onop
IT09TiYmayh0KSx0PXR8fE4saikpe2lmKDExIT09ZCYmKHU9bWUuZXhlYyhlKSkpaWYoaT11WzFd
KXtpZig5PT09ZCl7aWYoIShzPXQuZ2V0RWxlbWVudEJ5SWQoaSkpKXJldHVybiBuCitpZihzLmlk
PT09aSlyZXR1cm4gbi5wdXNoKHMpLG59ZWxzZSBpZihoJiYocz1oLmdldEVsZW1lbnRCeUlkKGkp
KSYmTSh0LHMpJiZzLmlkPT09aSlyZXR1cm4gbi5wdXNoKHMpLG59ZWxzZXtpZih1WzJdKXJldHVy
biBZLmFwcGx5KG4sdC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKSksbgoraWYoKGk9dVszXSkmJl8u
Z2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXJldHVybiBZ
LmFwcGx5KG4sdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGkpKSxufWlmKF8ucXNhJiYhVltlKyIg
Il0mJighRHx8IUQudGVzdChlKSkpe2lmKDEhPT1kKWg9dCxmPWUKK2Vsc2UgaWYoIm9iamVjdCIh
PT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpe2ZvcigoYT10LmdldEF0dHJpYnV0ZSgiaWQiKSk/
YT1hLnJlcGxhY2UoYmUsX2UpOnQuc2V0QXR0cmlidXRlKCJpZCIsYT1GKSxjPUMoZSksbz1jLmxl
bmd0aDtvLS07KWNbb109IiMiK2ErIiAiK3AoY1tvXSkKK2Y9Yy5qb2luKCIsIiksaD1nZS50ZXN0
KGUpJiZsKHQucGFyZW50Tm9kZSl8fHR9aWYoZil0cnl7cmV0dXJuIFkuYXBwbHkobixoLnF1ZXJ5
U2VsZWN0b3JBbGwoZikpLG59Y2F0Y2goZSl7fWZpbmFsbHl7YT09PUYmJnQucmVtb3ZlQXR0cmli
dXRlKCJpZCIpfX19cmV0dXJuIEEoZS5yZXBsYWNlKG9lLCIkMSIpLHQsbixyKX1mdW5jdGlvbiBu
KCl7ZnVuY3Rpb24gZShuLHIpe3JldHVybiB0LnB1c2gobisiICIpPncuY2FjaGVMZW5ndGgmJmRl
bGV0ZSBlW3Quc2hpZnQoKV0sZVtuKyIgIl09cn12YXIgdD1bXQorcmV0dXJuIGV9ZnVuY3Rpb24g
cihlKXtyZXR1cm4gZVtGXT0hMCxlfWZ1bmN0aW9uIGkoZSl7dmFyIHQ9Ti5jcmVhdGVFbGVtZW50
KCJmaWVsZHNldCIpCit0cnl7cmV0dXJuISFlKHQpfWNhdGNoKGUpe3JldHVybiExfWZpbmFsbHl7
dC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCksdD1udWxsfX1mdW5jdGlv
biBvKGUsdCl7Zm9yKHZhciBuPWUuc3BsaXQoInwiKSxyPW4ubGVuZ3RoO3ItLTspdy5hdHRySGFu
ZGxlW25bcl1dPXR9ZnVuY3Rpb24gcyhlLHQpe3ZhciBuPXQmJmUscj1uJiYxPT09ZS5ub2RlVHlw
ZSYmMT09PXQubm9kZVR5cGUmJmUuc291cmNlSW5kZXgtdC5zb3VyY2VJbmRleAoraWYocilyZXR1
cm4gcgoraWYobilmb3IoO249bi5uZXh0U2libGluZzspaWYobj09PXQpcmV0dXJuLTEKK3JldHVy
biBlPzE6LTF9ZnVuY3Rpb24gYShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuImZvcm0iaW4g
dD90LnBhcmVudE5vZGUmJiExPT09dC5kaXNhYmxlZD8ibGFiZWwiaW4gdD8ibGFiZWwiaW4gdC5w
YXJlbnROb2RlP3QucGFyZW50Tm9kZS5kaXNhYmxlZD09PWU6dC5kaXNhYmxlZD09PWU6dC5pc0Rp
c2FibGVkPT09ZXx8dC5pc0Rpc2FibGVkIT09IWUmJkVlKHQpPT09ZTp0LmRpc2FibGVkPT09ZToi
bGFiZWwiaW4gdCYmdC5kaXNhYmxlZD09PWV9fWZ1bmN0aW9uIHUoZSl7cmV0dXJuIHIoZnVuY3Rp
b24odCl7cmV0dXJuIHQ9K3QscihmdW5jdGlvbihuLHIpe2Zvcih2YXIgaSxvPWUoW10sbi5sZW5n
dGgsdCkscz1vLmxlbmd0aDtzLS07KW5baT1vW3NdXSYmKG5baV09IShyW2ldPW5baV0pKX0pfSl9
ZnVuY3Rpb24gbChlKXtyZXR1cm4gZSYmdm9pZCAwIT09ZS5nZXRFbGVtZW50c0J5VGFnTmFtZSYm
ZX1mdW5jdGlvbiBjKCl7fWZ1bmN0aW9uIHAoZSl7Zm9yKHZhciB0PTAsbj1lLmxlbmd0aCxyPSIi
O3Q8bjt0Kyspcis9ZVt0XS52YWx1ZQorcmV0dXJuIHJ9ZnVuY3Rpb24gZihlLHQsbil7dmFyIHI9
dC5kaXIsaT10Lm5leHQsbz1pfHxyLHM9biYmInBhcmVudE5vZGUiPT09byxhPUIrKworcmV0dXJu
IHQuZmlyc3Q/ZnVuY3Rpb24odCxuLGkpe2Zvcig7dD10W3JdOylpZigxPT09dC5ub2RlVHlwZXx8
cylyZXR1cm4gZSh0LG4saSkKK3JldHVybiExfTpmdW5jdGlvbih0LG4sdSl7dmFyIGwsYyxwLGY9
W1UsYV0KK2lmKHUpe2Zvcig7dD10W3JdOylpZigoMT09PXQubm9kZVR5cGV8fHMpJiZlKHQsbix1
KSlyZXR1cm4hMH1lbHNlIGZvcig7dD10W3JdOylpZigxPT09dC5ub2RlVHlwZXx8cylpZihwPXRb
Rl18fCh0W0ZdPXt9KSxjPXBbdC51bmlxdWVJRF18fChwW3QudW5pcXVlSURdPXt9KSxpJiZpPT09
dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXQ9dFtyXXx8dAorZWxzZXtpZigobD1jW29dKSYmbFsw
XT09PVUmJmxbMV09PT1hKXJldHVybiBmWzJdPWxbMl0KK2lmKGNbb109ZixmWzJdPWUodCxuLHUp
KXJldHVybiEwfXJldHVybiExfX1mdW5jdGlvbiBoKGUpe3JldHVybiBlLmxlbmd0aD4xP2Z1bmN0
aW9uKHQsbixyKXtmb3IodmFyIGk9ZS5sZW5ndGg7aS0tOylpZighZVtpXSh0LG4scikpcmV0dXJu
ITEKK3JldHVybiEwfTplWzBdfWZ1bmN0aW9uIGQoZSxuLHIpe2Zvcih2YXIgaT0wLG89bi5sZW5n
dGg7aTxvO2krKyl0KGUsbltpXSxyKQorcmV0dXJuIHJ9ZnVuY3Rpb24gbShlLHQsbixyLGkpe2Zv
cih2YXIgbyxzPVtdLGE9MCx1PWUubGVuZ3RoLGw9bnVsbCE9dDthPHU7YSsrKShvPWVbYV0pJiYo
biYmIW4obyxyLGkpfHwocy5wdXNoKG8pLGwmJnQucHVzaChhKSkpCityZXR1cm4gc31mdW5jdGlv
biBnKGUsdCxuLGksbyxzKXtyZXR1cm4gaSYmIWlbRl0mJihpPWcoaSkpLG8mJiFvW0ZdJiYobz1n
KG8scykpLHIoZnVuY3Rpb24ocixzLGEsdSl7dmFyIGwsYyxwLGY9W10saD1bXSxnPXMubGVuZ3Ro
LHk9cnx8ZCh0fHwiKiIsYS5ub2RlVHlwZT9bYV06YSxbXSksdj0hZXx8IXImJnQ/eTptKHksZixl
LGEsdSksYj1uP298fChyP2U6Z3x8aSk/W106czp2CitpZihuJiZuKHYsYixhLHUpLGkpZm9yKGw9
bShiLGgpLGkobCxbXSxhLHUpLGM9bC5sZW5ndGg7Yy0tOykocD1sW2NdKSYmKGJbaFtjXV09ISh2
W2hbY11dPXApKQoraWYocil7aWYob3x8ZSl7aWYobyl7Zm9yKGw9W10sYz1iLmxlbmd0aDtjLS07
KShwPWJbY10pJiZsLnB1c2godltjXT1wKQorbyhudWxsLGI9W10sbCx1KX1mb3IoYz1iLmxlbmd0
aDtjLS07KShwPWJbY10pJiYobD1vP1gocixwKTpmW2NdKT4tMSYmKHJbbF09IShzW2xdPXApKX19
ZWxzZSBiPW0oYj09PXM/Yi5zcGxpY2UoZyxiLmxlbmd0aCk6Yiksbz9vKG51bGwscyxiLHUpOlku
YXBwbHkocyxiKX0pfWZ1bmN0aW9uIHkoZSl7Zm9yKHZhciB0LG4scixpPWUubGVuZ3RoLG89dy5y
ZWxhdGl2ZVtlWzBdLnR5cGVdLHM9b3x8dy5yZWxhdGl2ZVsiICJdLGE9bz8xOjAsdT1mKGZ1bmN0
aW9uKGUpe3JldHVybiBlPT09dH0scywhMCksbD1mKGZ1bmN0aW9uKGUpe3JldHVybiBYKHQsZSk+
LTF9LHMsITApLGM9W2Z1bmN0aW9uKGUsbixyKXt2YXIgaT0hbyYmKHJ8fG4hPT1UKXx8KCh0PW4p
Lm5vZGVUeXBlP3UoZSxuLHIpOmwoZSxuLHIpKQorcmV0dXJuIHQ9bnVsbCxpfV07YTxpO2ErKylp
ZihuPXcucmVsYXRpdmVbZVthXS50eXBlXSljPVtmKGgoYyksbildCitlbHNle2lmKG49dy5maWx0
ZXJbZVthXS50eXBlXS5hcHBseShudWxsLGVbYV0ubWF0Y2hlcyksbltGXSl7Zm9yKHI9KythO3I8
aSYmIXcucmVsYXRpdmVbZVtyXS50eXBlXTtyKyspO3JldHVybiBnKGE+MSYmaChjKSxhPjEmJnAo
ZS5zbGljZSgwLGEtMSkuY29uY2F0KHt2YWx1ZToiICI9PT1lW2EtMl0udHlwZT8iKiI6IiJ9KSku
cmVwbGFjZShvZSwiJDEiKSxuLGE8ciYmeShlLnNsaWNlKGEscikpLHI8aSYmeShlPWUuc2xpY2Uo
cikpLHI8aSYmcChlKSl9Yy5wdXNoKG4pfXJldHVybiBoKGMpfWZ1bmN0aW9uIHYoZSxuKXt2YXIg
aT1uLmxlbmd0aD4wLG89ZS5sZW5ndGg+MCxzPWZ1bmN0aW9uKHIscyxhLHUsbCl7dmFyIGMscCxm
LGg9MCxkPSIwIixnPXImJltdLHk9W10sdj1ULGI9cnx8byYmdy5maW5kLlRBRygiKiIsbCksXz1V
Kz1udWxsPT12PzE6TWF0aC5yYW5kb20oKXx8LjEsRT1iLmxlbmd0aAorZm9yKGwmJihUPXM9PT1O
fHxzfHxsKTtkIT09RSYmbnVsbCE9KGM9YltkXSk7ZCsrKXtpZihvJiZjKXtmb3IocD0wLHN8fGMu
b3duZXJEb2N1bWVudD09PU58fChrKGMpLGE9IWopO2Y9ZVtwKytdOylpZihmKGMsc3x8TixhKSl7
dS5wdXNoKGMpCiticmVha31sJiYoVT1fKX1pJiYoKGM9IWYmJmMpJiZoLS0sciYmZy5wdXNoKGMp
KX1pZihoKz1kLGkmJmQhPT1oKXtmb3IocD0wO2Y9bltwKytdOylmKGcseSxzLGEpCitpZihyKXtp
ZihoPjApZm9yKDtkLS07KWdbZF18fHlbZF18fCh5W2RdPUsuY2FsbCh1KSkKK3k9bSh5KX1ZLmFw
cGx5KHUseSksbCYmIXImJnkubGVuZ3RoPjAmJmgrbi5sZW5ndGg+MSYmdC51bmlxdWVTb3J0KHUp
fXJldHVybiBsJiYoVT1fLFQ9diksZ30KK3JldHVybiBpP3Iocyk6c312YXIgYixfLHcsRSx4LEMs
TyxBLFQsUyxSLGssTixQLGosRCxMLEksTSxGPSJzaXp6bGUiKzEqbmV3IERhdGUsej1lLmRvY3Vt
ZW50LFU9MCxCPTAscT1uKCksSD1uKCksVj1uKCksVz1mdW5jdGlvbihlLHQpe3JldHVybiBlPT09
dCYmKFI9ITApLDB9LCQ9e30uaGFzT3duUHJvcGVydHksRz1bXSxLPUcucG9wLFE9Ry5wdXNoLFk9
Ry5wdXNoLEo9Ry5zbGljZSxYPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTAscj1lLmxlbmd0aDtu
PHI7bisrKWlmKGVbbl09PT10KXJldHVybiBuCityZXR1cm4tMX0sWj0iY2hlY2tlZHxzZWxlY3Rl
ZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVu
fGlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWQiLGVlPSJb
XFx4MjBcXHRcXHJcXG5cXGZdIix0ZT0iKD86XFxcXC58W1xcdy1dfFteXDAtXFx4YTBdKSsiLG5l
PSJcXFsiK2VlKyIqKCIrdGUrIikoPzoiK2VlKyIqKFsqXiR8IX5dPz0pIitlZSsiKig/OicoKD86
XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwifCgiK3RlKyIpKXwp
IitlZSsiKlxcXSIscmU9IjooIit0ZSsiKSg/OlxcKCgoJygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8
XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCIpfCgoPzpcXFxcLnxbXlxcXFwoKVtcXF1dfCIrbmUr
IikqKXwuKilcXCl8KSIsaWU9bmV3IFJlZ0V4cChlZSsiKyIsImciKSxvZT1uZXcgUmVnRXhwKCJe
IitlZSsiK3woKD86XnxbXlxcXFxdKSg/OlxcXFwuKSopIitlZSsiKyQiLCJnIiksc2U9bmV3IFJl
Z0V4cCgiXiIrZWUrIiosIitlZSsiKiIpLGFlPW5ldyBSZWdFeHAoIl4iK2VlKyIqKFs+K35dfCIr
ZWUrIikiK2VlKyIqIiksdWU9bmV3IFJlZ0V4cCgiPSIrZWUrIiooW15cXF0nXCJdKj8pIitlZSsi
KlxcXSIsImciKSxsZT1uZXcgUmVnRXhwKHJlKSxjZT1uZXcgUmVnRXhwKCJeIit0ZSsiJCIpLHBl
PXtJRDpuZXcgUmVnRXhwKCJeIygiK3RlKyIpIiksQ0xBU1M6bmV3IFJlZ0V4cCgiXlxcLigiK3Rl
KyIpIiksVEFHOm5ldyBSZWdFeHAoIl4oIit0ZSsifFsqXSkiKSxBVFRSOm5ldyBSZWdFeHAoIl4i
K25lKSxQU0VVRE86bmV3IFJlZ0V4cCgiXiIrcmUpLENISUxEOm5ldyBSZWdFeHAoIl46KG9ubHl8
Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcKCIrZWUrIiooZXZl
bnxvZGR8KChbKy1dfCkoXFxkKilufCkiK2VlKyIqKD86KFsrLV18KSIrZWUrIiooXFxkKyl8KSki
K2VlKyIqXFwpfCkiLCJpIiksYm9vbDpuZXcgUmVnRXhwKCJeKD86IitaKyIpJCIsImkiKSxuZWVk
c0NvbnRleHQ6bmV3IFJlZ0V4cCgiXiIrZWUrIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50
aHxmaXJzdHxsYXN0KSg/OlxcKCIrZWUrIiooKD86LVxcZCk/XFxkKikiK2VlKyIqXFwpfCkoPz1b
Xi1dfCQpIiwiaSIpfSxmZT0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLGhl
PS9eaFxkJC9pLGRlPS9eW157XStce1xzKlxbbmF0aXZlIFx3LyxtZT0vXig/OiMoW1x3LV0rKXwo
XHcrKXxcLihbXHctXSspKSQvLGdlPS9bK35dLyx5ZT1uZXcgUmVnRXhwKCJcXFxcKFtcXGRhLWZd
ezEsNn0iK2VlKyI/fCgiK2VlKyIpfC4pIiwiaWciKSx2ZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9
IjB4Iit0LTY1NTM2CityZXR1cm4gciE9PXJ8fG4/dDpyPDA/U3RyaW5nLmZyb21DaGFyQ29kZShy
KzY1NTM2KTpTdHJpbmcuZnJvbUNoYXJDb2RlKHI+PjEwfDU1Mjk2LDEwMjMmcnw1NjMyMCl9LGJl
PS8oW1wwLVx4MWZceDdmXXxeLT9cZCl8Xi0kfFteXDAtXHgxZlx4N2YtXHVGRkZGXHctXS9nLF9l
PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/IlwwIj09PWU/Iu+/vSI6ZS5zbGljZSgwLC0xKSsiXFwi
K2UuY2hhckNvZGVBdChlLmxlbmd0aC0xKS50b1N0cmluZygxNikrIiAiOiJcXCIrZX0sd2U9ZnVu
Y3Rpb24oKXtrKCl9LEVlPWYoZnVuY3Rpb24oZSl7cmV0dXJuITA9PT1lLmRpc2FibGVkJiYoImZv
cm0iaW4gZXx8ImxhYmVsImluIGUpfSx7ZGlyOiJwYXJlbnROb2RlIixuZXh0OiJsZWdlbmQifSkK
K3RyeXtZLmFwcGx5KEc9Si5jYWxsKHouY2hpbGROb2Rlcyksei5jaGlsZE5vZGVzKSxHW3ouY2hp
bGROb2Rlcy5sZW5ndGhdLm5vZGVUeXBlfWNhdGNoKGUpe1k9e2FwcGx5OkcubGVuZ3RoP2Z1bmN0
aW9uKGUsdCl7US5hcHBseShlLEouY2FsbCh0KSl9OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPWUu
bGVuZ3RoLHI9MDtlW24rK109dFtyKytdOyk7ZS5sZW5ndGg9bi0xfX19Xz10LnN1cHBvcnQ9e30s
eD10LmlzWE1MPWZ1bmN0aW9uKGUpe3ZhciB0PWUmJihlLm93bmVyRG9jdW1lbnR8fGUpLmRvY3Vt
ZW50RWxlbWVudAorcmV0dXJuISF0JiYiSFRNTCIhPT10Lm5vZGVOYW1lfSxrPXQuc2V0RG9jdW1l
bnQ9ZnVuY3Rpb24oZSl7dmFyIHQsbixyPWU/ZS5vd25lckRvY3VtZW50fHxlOnoKK3JldHVybiBy
IT09TiYmOT09PXIubm9kZVR5cGUmJnIuZG9jdW1lbnRFbGVtZW50PyhOPXIsUD1OLmRvY3VtZW50
RWxlbWVudCxqPSF4KE4pLHohPT1OJiYobj1OLmRlZmF1bHRWaWV3KSYmbi50b3AhPT1uJiYobi5h
ZGRFdmVudExpc3RlbmVyP24uYWRkRXZlbnRMaXN0ZW5lcigidW5sb2FkIix3ZSwhMSk6bi5hdHRh
Y2hFdmVudCYmbi5hdHRhY2hFdmVudCgib251bmxvYWQiLHdlKSksXy5hdHRyaWJ1dGVzPWkoZnVu
Y3Rpb24oZSl7cmV0dXJuIGUuY2xhc3NOYW1lPSJpIiwhZS5nZXRBdHRyaWJ1dGUoImNsYXNzTmFt
ZSIpfSksXy5nZXRFbGVtZW50c0J5VGFnTmFtZT1pKGZ1bmN0aW9uKGUpe3JldHVybiBlLmFwcGVu
ZENoaWxkKE4uY3JlYXRlQ29tbWVudCgiIikpLCFlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIiku
bGVuZ3RofSksXy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lPWRlLnRlc3QoTi5nZXRFbGVtZW50c0J5
Q2xhc3NOYW1lKSxfLmdldEJ5SWQ9aShmdW5jdGlvbihlKXtyZXR1cm4gUC5hcHBlbmRDaGlsZChl
KS5pZD1GLCFOLmdldEVsZW1lbnRzQnlOYW1lfHwhTi5nZXRFbGVtZW50c0J5TmFtZShGKS5sZW5n
dGh9KSxfLmdldEJ5SWQ/KHcuZmlsdGVyLklEPWZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZSh5
ZSx2ZSkKK3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUoImlkIik9PT10
fX0sdy5maW5kLklEPWZ1bmN0aW9uKGUsdCl7aWYodm9pZCAwIT09dC5nZXRFbGVtZW50QnlJZCYm
ail7dmFyIG49dC5nZXRFbGVtZW50QnlJZChlKQorcmV0dXJuIG4/W25dOltdfX0pOih3LmZpbHRl
ci5JRD1mdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UoeWUsdmUpCityZXR1cm4gZnVuY3Rpb24o
ZSl7dmFyIG49dm9pZCAwIT09ZS5nZXRBdHRyaWJ1dGVOb2RlJiZlLmdldEF0dHJpYnV0ZU5vZGUo
ImlkIikKK3JldHVybiBuJiZuLnZhbHVlPT09dH19LHcuZmluZC5JRD1mdW5jdGlvbihlLHQpe2lm
KHZvaWQgMCE9PXQuZ2V0RWxlbWVudEJ5SWQmJmope3ZhciBuLHIsaSxvPXQuZ2V0RWxlbWVudEJ5
SWQoZSkKK2lmKG8pe2lmKChuPW8uZ2V0QXR0cmlidXRlTm9kZSgiaWQiKSkmJm4udmFsdWU9PT1l
KXJldHVybltvXQorZm9yKGk9dC5nZXRFbGVtZW50c0J5TmFtZShlKSxyPTA7bz1pW3IrK107KWlm
KChuPW8uZ2V0QXR0cmlidXRlTm9kZSgiaWQiKSkmJm4udmFsdWU9PT1lKXJldHVybltvXX1yZXR1
cm5bXX19KSx3LmZpbmQuVEFHPV8uZ2V0RWxlbWVudHNCeVRhZ05hbWU/ZnVuY3Rpb24oZSx0KXty
ZXR1cm4gdm9pZCAwIT09dC5nZXRFbGVtZW50c0J5VGFnTmFtZT90LmdldEVsZW1lbnRzQnlUYWdO
YW1lKGUpOl8ucXNhP3QucXVlcnlTZWxlY3RvckFsbChlKTp2b2lkIDB9OmZ1bmN0aW9uKGUsdCl7
dmFyIG4scj1bXSxpPTAsbz10LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpCitpZigiKiI9PT1lKXtm
b3IoO249b1tpKytdOykxPT09bi5ub2RlVHlwZSYmci5wdXNoKG4pCityZXR1cm4gcn1yZXR1cm4g
b30sdy5maW5kLkNMQVNTPV8uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmZnVuY3Rpb24oZSx0KXtp
Zih2b2lkIDAhPT10LmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmopcmV0dXJuIHQuZ2V0RWxlbWVu
dHNCeUNsYXNzTmFtZShlKX0sTD1bXSxEPVtdLChfLnFzYT1kZS50ZXN0KE4ucXVlcnlTZWxlY3Rv
ckFsbCkpJiYoaShmdW5jdGlvbihlKXtQLmFwcGVuZENoaWxkKGUpLmlubmVySFRNTD0iPGEgaWQ9
JyIrRisiJz48L2E+PHNlbGVjdCBpZD0nIitGKyItXHJcXCcgbXNhbGxvd2NhcHR1cmU9Jyc+PG9w
dGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iLGUucXVlcnlTZWxlY3RvckFsbCgi
W21zYWxsb3djYXB0dXJlXj0nJ10iKS5sZW5ndGgmJkQucHVzaCgiWypeJF09IitlZSsiKig/Oicn
fFwiXCIpIiksZS5xdWVyeVNlbGVjdG9yQWxsKCJbc2VsZWN0ZWRdIikubGVuZ3RofHxELnB1c2go
IlxcWyIrZWUrIiooPzp2YWx1ZXwiK1orIikiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIltpZH49IitG
KyItXSIpLmxlbmd0aHx8RC5wdXNoKCJ+PSIpLGUucXVlcnlTZWxlY3RvckFsbCgiOmNoZWNrZWQi
KS5sZW5ndGh8fEQucHVzaCgiOmNoZWNrZWQiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoImEjIitGKyIr
KiIpLmxlbmd0aHx8RC5wdXNoKCIuIy4rWyt+XSIpfSksaShmdW5jdGlvbihlKXtlLmlubmVySFRN
TD0iPGEgaHJlZj0nJyBkaXNhYmxlZD0nZGlzYWJsZWQnPjwvYT48c2VsZWN0IGRpc2FibGVkPSdk
aXNhYmxlZCc+PG9wdGlvbi8+PC9zZWxlY3Q+IgordmFyIHQ9Ti5jcmVhdGVFbGVtZW50KCJpbnB1
dCIpCit0LnNldEF0dHJpYnV0ZSgidHlwZSIsImhpZGRlbiIpLGUuYXBwZW5kQ2hpbGQodCkuc2V0
QXR0cmlidXRlKCJuYW1lIiwiRCIpLGUucXVlcnlTZWxlY3RvckFsbCgiW25hbWU9ZF0iKS5sZW5n
dGgmJkQucHVzaCgibmFtZSIrZWUrIipbKl4kfCF+XT89IiksMiE9PWUucXVlcnlTZWxlY3RvckFs
bCgiOmVuYWJsZWQiKS5sZW5ndGgmJkQucHVzaCgiOmVuYWJsZWQiLCI6ZGlzYWJsZWQiKSxQLmFw
cGVuZENoaWxkKGUpLmRpc2FibGVkPSEwLDIhPT1lLnF1ZXJ5U2VsZWN0b3JBbGwoIjpkaXNhYmxl
ZCIpLmxlbmd0aCYmRC5wdXNoKCI6ZW5hYmxlZCIsIjpkaXNhYmxlZCIpLGUucXVlcnlTZWxlY3Rv
ckFsbCgiKiw6eCIpLEQucHVzaCgiLC4qOiIpfSkpLChfLm1hdGNoZXNTZWxlY3Rvcj1kZS50ZXN0
KEk9UC5tYXRjaGVzfHxQLndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8UC5tb3pNYXRjaGVzU2VsZWN0
b3J8fFAub01hdGNoZXNTZWxlY3Rvcnx8UC5tc01hdGNoZXNTZWxlY3RvcikpJiZpKGZ1bmN0aW9u
KGUpe18uZGlzY29ubmVjdGVkTWF0Y2g9SS5jYWxsKGUsIioiKSxJLmNhbGwoZSwiW3MhPScnXTp4
IiksTC5wdXNoKCIhPSIscmUpfSksRD1ELmxlbmd0aCYmbmV3IFJlZ0V4cChELmpvaW4oInwiKSks
TD1MLmxlbmd0aCYmbmV3IFJlZ0V4cChMLmpvaW4oInwiKSksdD1kZS50ZXN0KFAuY29tcGFyZURv
Y3VtZW50UG9zaXRpb24pLE09dHx8ZGUudGVzdChQLmNvbnRhaW5zKT9mdW5jdGlvbihlLHQpe3Zh
ciBuPTk9PT1lLm5vZGVUeXBlP2UuZG9jdW1lbnRFbGVtZW50OmUscj10JiZ0LnBhcmVudE5vZGUK
K3JldHVybiBlPT09cnx8ISghcnx8MSE9PXIubm9kZVR5cGV8fCEobi5jb250YWlucz9uLmNvbnRh
aW5zKHIpOmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24mJjE2JmUuY29tcGFyZURvY3VtZW50UG9z
aXRpb24ocikpKX06ZnVuY3Rpb24oZSx0KXtpZih0KWZvcig7dD10LnBhcmVudE5vZGU7KWlmKHQ9
PT1lKXJldHVybiEwCityZXR1cm4hMX0sVz10P2Z1bmN0aW9uKGUsdCl7aWYoZT09PXQpcmV0dXJu
IFI9ITAsMAordmFyIG49IWUuY29tcGFyZURvY3VtZW50UG9zaXRpb24tIXQuY29tcGFyZURvY3Vt
ZW50UG9zaXRpb24KK3JldHVybiBufHwobj0oZS5vd25lckRvY3VtZW50fHxlKT09PSh0Lm93bmVy
RG9jdW1lbnR8fHQpP2UuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCk6MSwxJm58fCFfLnNvcnRE
ZXRhY2hlZCYmdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlKT09PW4/ZT09PU58fGUub3duZXJE
b2N1bWVudD09PXomJk0oeixlKT8tMTp0PT09Tnx8dC5vd25lckRvY3VtZW50PT09eiYmTSh6LHQp
PzE6Uz9YKFMsZSktWChTLHQpOjA6NCZuPy0xOjEpfTpmdW5jdGlvbihlLHQpe2lmKGU9PT10KXJl
dHVybiBSPSEwLDAKK3ZhciBuLHI9MCxpPWUucGFyZW50Tm9kZSxvPXQucGFyZW50Tm9kZSxhPVtl
XSx1PVt0XQoraWYoIWl8fCFvKXJldHVybiBlPT09Tj8tMTp0PT09Tj8xOmk/LTE6bz8xOlM/WChT
LGUpLVgoUyx0KTowCitpZihpPT09bylyZXR1cm4gcyhlLHQpCitmb3Iobj1lO249bi5wYXJlbnRO
b2RlOylhLnVuc2hpZnQobikKK2ZvcihuPXQ7bj1uLnBhcmVudE5vZGU7KXUudW5zaGlmdChuKQor
Zm9yKDthW3JdPT09dVtyXTspcisrCityZXR1cm4gcj9zKGFbcl0sdVtyXSk6YVtyXT09PXo/LTE6
dVtyXT09PXo/MTowfSxOKTpOfSx0Lm1hdGNoZXM9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdChlLG51
bGwsbnVsbCxuKX0sdC5tYXRjaGVzU2VsZWN0b3I9ZnVuY3Rpb24oZSxuKXtpZigoZS5vd25lckRv
Y3VtZW50fHxlKSE9PU4mJmsoZSksbj1uLnJlcGxhY2UodWUsIj0nJDEnXSIpLF8ubWF0Y2hlc1Nl
bGVjdG9yJiZqJiYhVltuKyIgIl0mJighTHx8IUwudGVzdChuKSkmJighRHx8IUQudGVzdChuKSkp
dHJ5e3ZhciByPUkuY2FsbChlLG4pCitpZihyfHxfLmRpc2Nvbm5lY3RlZE1hdGNofHxlLmRvY3Vt
ZW50JiYxMSE9PWUuZG9jdW1lbnQubm9kZVR5cGUpcmV0dXJuIHJ9Y2F0Y2goZSl7fXJldHVybiB0
KG4sTixudWxsLFtlXSkubGVuZ3RoPjB9LHQuY29udGFpbnM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4o
ZS5vd25lckRvY3VtZW50fHxlKSE9PU4mJmsoZSksTShlLHQpfSx0LmF0dHI9ZnVuY3Rpb24oZSx0
KXsoZS5vd25lckRvY3VtZW50fHxlKSE9PU4mJmsoZSkKK3ZhciBuPXcuYXR0ckhhbmRsZVt0LnRv
TG93ZXJDYXNlKCldLHI9biYmJC5jYWxsKHcuYXR0ckhhbmRsZSx0LnRvTG93ZXJDYXNlKCkpP24o
ZSx0LCFqKTp2b2lkIDAKK3JldHVybiB2b2lkIDAhPT1yP3I6Xy5hdHRyaWJ1dGVzfHwhaj9lLmdl
dEF0dHJpYnV0ZSh0KToocj1lLmdldEF0dHJpYnV0ZU5vZGUodCkpJiZyLnNwZWNpZmllZD9yLnZh
bHVlOm51bGx9LHQuZXNjYXBlPWZ1bmN0aW9uKGUpe3JldHVybihlKyIiKS5yZXBsYWNlKGJlLF9l
KX0sdC5lcnJvcj1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoIlN5bnRheCBlcnJvciwgdW5y
ZWNvZ25pemVkIGV4cHJlc3Npb246ICIrZSl9LHQudW5pcXVlU29ydD1mdW5jdGlvbihlKXt2YXIg
dCxuPVtdLHI9MCxpPTAKK2lmKFI9IV8uZGV0ZWN0RHVwbGljYXRlcyxTPSFfLnNvcnRTdGFibGUm
JmUuc2xpY2UoMCksZS5zb3J0KFcpLFIpe2Zvcig7dD1lW2krK107KXQ9PT1lW2ldJiYocj1uLnB1
c2goaSkpCitmb3IoO3ItLTspZS5zcGxpY2UobltyXSwxKX1yZXR1cm4gUz1udWxsLGV9LEU9dC5n
ZXRUZXh0PWZ1bmN0aW9uKGUpe3ZhciB0LG49IiIscj0wLGk9ZS5ub2RlVHlwZQoraWYoaSl7aWYo
MT09PWl8fDk9PT1pfHwxMT09PWkpe2lmKCJzdHJpbmciPT10eXBlb2YgZS50ZXh0Q29udGVudCly
ZXR1cm4gZS50ZXh0Q29udGVudAorZm9yKGU9ZS5maXJzdENoaWxkO2U7ZT1lLm5leHRTaWJsaW5n
KW4rPUUoZSl9ZWxzZSBpZigzPT09aXx8ND09PWkpcmV0dXJuIGUubm9kZVZhbHVlfWVsc2UgZm9y
KDt0PWVbcisrXTspbis9RSh0KQorcmV0dXJuIG59LHc9dC5zZWxlY3RvcnM9e2NhY2hlTGVuZ3Ro
OjUwLGNyZWF0ZVBzZXVkbzpyLG1hdGNoOnBlLGF0dHJIYW5kbGU6e30sZmluZDp7fSxyZWxhdGl2
ZTp7Ij4iOntkaXI6InBhcmVudE5vZGUiLGZpcnN0OiEwfSwiICI6e2RpcjoicGFyZW50Tm9kZSJ9
LCIrIjp7ZGlyOiJwcmV2aW91c1NpYmxpbmciLGZpcnN0OiEwfSwifiI6e2RpcjoicHJldmlvdXNT
aWJsaW5nIn19LHByZUZpbHRlcjp7QVRUUjpmdW5jdGlvbihlKXtyZXR1cm4gZVsxXT1lWzFdLnJl
cGxhY2UoeWUsdmUpLGVbM109KGVbM118fGVbNF18fGVbNV18fCIiKS5yZXBsYWNlKHllLHZlKSwi
fj0iPT09ZVsyXSYmKGVbM109IiAiK2VbM10rIiAiKSxlLnNsaWNlKDAsNCl9LENISUxEOmZ1bmN0
aW9uKGUpe3JldHVybiBlWzFdPWVbMV0udG9Mb3dlckNhc2UoKSwibnRoIj09PWVbMV0uc2xpY2Uo
MCwzKT8oZVszXXx8dC5lcnJvcihlWzBdKSxlWzRdPSsoZVs0XT9lWzVdKyhlWzZdfHwxKToyKigi
ZXZlbiI9PT1lWzNdfHwib2RkIj09PWVbM10pKSxlWzVdPSsoZVs3XStlWzhdfHwib2RkIj09PWVb
M10pKTplWzNdJiZ0LmVycm9yKGVbMF0pLGV9LFBTRVVETzpmdW5jdGlvbihlKXt2YXIgdCxuPSFl
WzZdJiZlWzJdCityZXR1cm4gcGUuQ0hJTEQudGVzdChlWzBdKT9udWxsOihlWzNdP2VbMl09ZVs0
XXx8ZVs1XXx8IiI6biYmbGUudGVzdChuKSYmKHQ9QyhuLCEwKSkmJih0PW4uaW5kZXhPZigiKSIs
bi5sZW5ndGgtdCktbi5sZW5ndGgpJiYoZVswXT1lWzBdLnNsaWNlKDAsdCksZVsyXT1uLnNsaWNl
KDAsdCkpLGUuc2xpY2UoMCwzKSl9fSxmaWx0ZXI6e1RBRzpmdW5jdGlvbihlKXt2YXIgdD1lLnJl
cGxhY2UoeWUsdmUpLnRvTG93ZXJDYXNlKCkKK3JldHVybiIqIj09PWU/ZnVuY3Rpb24oKXtyZXR1
cm4hMH06ZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNh
c2UoKT09PXR9fSxDTEFTUzpmdW5jdGlvbihlKXt2YXIgdD1xW2UrIiAiXQorcmV0dXJuIHR8fCh0
PW5ldyBSZWdFeHAoIihefCIrZWUrIikiK2UrIigiK2VlKyJ8JCkiKSkmJnEoZSxmdW5jdGlvbihl
KXtyZXR1cm4gdC50ZXN0KCJzdHJpbmciPT10eXBlb2YgZS5jbGFzc05hbWUmJmUuY2xhc3NOYW1l
fHx2b2lkIDAhPT1lLmdldEF0dHJpYnV0ZSYmZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX0p
fSxBVFRSOmZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gZnVuY3Rpb24oaSl7dmFyIG89dC5hdHRyKGks
ZSkKK3JldHVybiBudWxsPT1vPyIhPSI9PT1uOiFufHwobys9IiIsIj0iPT09bj9vPT09cjoiIT0i
PT09bj9vIT09cjoiXj0iPT09bj9yJiYwPT09by5pbmRleE9mKHIpOiIqPSI9PT1uP3ImJm8uaW5k
ZXhPZihyKT4tMToiJD0iPT09bj9yJiZvLnNsaWNlKC1yLmxlbmd0aCk9PT1yOiJ+PSI9PT1uPygi
ICIrby5yZXBsYWNlKGllLCIgIikrIiAiKS5pbmRleE9mKHIpPi0xOiJ8PSI9PT1uJiYobz09PXJ8
fG8uc2xpY2UoMCxyLmxlbmd0aCsxKT09PXIrIi0iKSl9fSxDSElMRDpmdW5jdGlvbihlLHQsbixy
LGkpe3ZhciBvPSJudGgiIT09ZS5zbGljZSgwLDMpLHM9Imxhc3QiIT09ZS5zbGljZSgtNCksYT0i
b2YtdHlwZSI9PT10CityZXR1cm4gMT09PXImJjA9PT1pP2Z1bmN0aW9uKGUpe3JldHVybiEhZS5w
YXJlbnROb2RlfTpmdW5jdGlvbih0LG4sdSl7dmFyIGwsYyxwLGYsaCxkLG09byE9PXM/Im5leHRT
aWJsaW5nIjoicHJldmlvdXNTaWJsaW5nIixnPXQucGFyZW50Tm9kZSx5PWEmJnQubm9kZU5hbWUu
dG9Mb3dlckNhc2UoKSx2PSF1JiYhYSxiPSExCitpZihnKXtpZihvKXtmb3IoO207KXtmb3IoZj10
O2Y9ZlttXTspaWYoYT9mLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT15OjE9PT1mLm5vZGVUeXBl
KXJldHVybiExCitkPW09Im9ubHkiPT09ZSYmIWQmJiJuZXh0U2libGluZyJ9cmV0dXJuITB9aWYo
ZD1bcz9nLmZpcnN0Q2hpbGQ6Zy5sYXN0Q2hpbGRdLHMmJnYpe2ZvcihmPWcscD1mW0ZdfHwoZltG
XT17fSksYz1wW2YudW5pcXVlSURdfHwocFtmLnVuaXF1ZUlEXT17fSksbD1jW2VdfHxbXSxoPWxb
MF09PT1VJiZsWzFdLGI9aCYmbFsyXSxmPWgmJmcuY2hpbGROb2Rlc1toXTtmPSsraCYmZiYmZltt
XXx8KGI9aD0wKXx8ZC5wb3AoKTspaWYoMT09PWYubm9kZVR5cGUmJisrYiYmZj09PXQpe2NbZV09
W1UsaCxiXQorYnJlYWt9fWVsc2UgaWYodiYmKGY9dCxwPWZbRl18fChmW0ZdPXt9KSxjPXBbZi51
bmlxdWVJRF18fChwW2YudW5pcXVlSURdPXt9KSxsPWNbZV18fFtdLGg9bFswXT09PVUmJmxbMV0s
Yj1oKSwhMT09PWIpZm9yKDsoZj0rK2gmJmYmJmZbbV18fChiPWg9MCl8fGQucG9wKCkpJiYoKGE/
Zi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT09eToxIT09Zi5ub2RlVHlwZSl8fCErK2J8fCh2JiYo
cD1mW0ZdfHwoZltGXT17fSksYz1wW2YudW5pcXVlSURdfHwocFtmLnVuaXF1ZUlEXT17fSksY1tl
XT1bVSxiXSksZiE9PXQpKTspO3JldHVybihiLT1pKT09PXJ8fGIlcj09MCYmYi9yPj0wfX19LFBT
RVVETzpmdW5jdGlvbihlLG4pe3ZhciBpLG89dy5wc2V1ZG9zW2VdfHx3LnNldEZpbHRlcnNbZS50
b0xvd2VyQ2FzZSgpXXx8dC5lcnJvcigidW5zdXBwb3J0ZWQgcHNldWRvOiAiK2UpCityZXR1cm4g
b1tGXT9vKG4pOm8ubGVuZ3RoPjE/KGk9W2UsZSwiIixuXSx3LnNldEZpbHRlcnMuaGFzT3duUHJv
cGVydHkoZS50b0xvd2VyQ2FzZSgpKT9yKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByLGk9byhlLG4p
LHM9aS5sZW5ndGg7cy0tOylyPVgoZSxpW3NdKSxlW3JdPSEodFtyXT1pW3NdKX0pOmZ1bmN0aW9u
KGUpe3JldHVybiBvKGUsMCxpKX0pOm99fSxwc2V1ZG9zOntub3Q6cihmdW5jdGlvbihlKXt2YXIg
dD1bXSxuPVtdLGk9TyhlLnJlcGxhY2Uob2UsIiQxIikpCityZXR1cm4gaVtGXT9yKGZ1bmN0aW9u
KGUsdCxuLHIpe2Zvcih2YXIgbyxzPWkoZSxudWxsLHIsW10pLGE9ZS5sZW5ndGg7YS0tOykobz1z
W2FdKSYmKGVbYV09ISh0W2FdPW8pKX0pOmZ1bmN0aW9uKGUscixvKXtyZXR1cm4gdFswXT1lLGko
dCxudWxsLG8sbiksdFswXT1udWxsLCFuLnBvcCgpfX0pLGhhczpyKGZ1bmN0aW9uKGUpe3JldHVy
biBmdW5jdGlvbihuKXtyZXR1cm4gdChlLG4pLmxlbmd0aD4wfX0pLGNvbnRhaW5zOnIoZnVuY3Rp
b24oZSl7cmV0dXJuIGU9ZS5yZXBsYWNlKHllLHZlKSxmdW5jdGlvbih0KXtyZXR1cm4odC50ZXh0
Q29udGVudHx8dC5pbm5lclRleHR8fEUodCkpLmluZGV4T2YoZSk+LTF9fSksbGFuZzpyKGZ1bmN0
aW9uKGUpe3JldHVybiBjZS50ZXN0KGV8fCIiKXx8dC5lcnJvcigidW5zdXBwb3J0ZWQgbGFuZzog
IitlKSxlPWUucmVwbGFjZSh5ZSx2ZSkudG9Mb3dlckNhc2UoKSxmdW5jdGlvbih0KXt2YXIgbgor
ZG97aWYobj1qP3QubGFuZzp0LmdldEF0dHJpYnV0ZSgieG1sOmxhbmciKXx8dC5nZXRBdHRyaWJ1
dGUoImxhbmciKSlyZXR1cm4obj1uLnRvTG93ZXJDYXNlKCkpPT09ZXx8MD09PW4uaW5kZXhPZihl
KyItIil9d2hpbGUoKHQ9dC5wYXJlbnROb2RlKSYmMT09PXQubm9kZVR5cGUpCityZXR1cm4hMX19
KSx0YXJnZXQ6ZnVuY3Rpb24odCl7dmFyIG49ZS5sb2NhdGlvbiYmZS5sb2NhdGlvbi5oYXNoCity
ZXR1cm4gbiYmbi5zbGljZSgxKT09PXQuaWR9LHJvb3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1Q
fSxmb2N1czpmdW5jdGlvbihlKXtyZXR1cm4gZT09PU4uYWN0aXZlRWxlbWVudCYmKCFOLmhhc0Zv
Y3VzfHxOLmhhc0ZvY3VzKCkpJiYhIShlLnR5cGV8fGUuaHJlZnx8fmUudGFiSW5kZXgpfSxlbmFi
bGVkOmEoITEpLGRpc2FibGVkOmEoITApLGNoZWNrZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2Rl
TmFtZS50b0xvd2VyQ2FzZSgpCityZXR1cm4iaW5wdXQiPT09dCYmISFlLmNoZWNrZWR8fCJvcHRp
b24iPT09dCYmISFlLnNlbGVjdGVkfSxzZWxlY3RlZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5wYXJl
bnROb2RlJiZlLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCwhMD09PWUuc2VsZWN0ZWR9LGVtcHR5
OmZ1bmN0aW9uKGUpe2ZvcihlPWUuZmlyc3RDaGlsZDtlO2U9ZS5uZXh0U2libGluZylpZihlLm5v
ZGVUeXBlPDYpcmV0dXJuITEKK3JldHVybiEwfSxwYXJlbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIXcu
cHNldWRvcy5lbXB0eShlKX0saGVhZGVyOmZ1bmN0aW9uKGUpe3JldHVybiBoZS50ZXN0KGUubm9k
ZU5hbWUpfSxpbnB1dDpmdW5jdGlvbihlKXtyZXR1cm4gZmUudGVzdChlLm5vZGVOYW1lKX0sYnV0
dG9uOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKQorcmV0dXJuImlu
cHV0Ij09PXQmJiJidXR0b24iPT09ZS50eXBlfHwiYnV0dG9uIj09PXR9LHRleHQ6ZnVuY3Rpb24o
ZSl7dmFyIHQKK3JldHVybiJpbnB1dCI9PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJiJ0ZXh0
Ij09PWUudHlwZSYmKG51bGw9PSh0PWUuZ2V0QXR0cmlidXRlKCJ0eXBlIikpfHwidGV4dCI9PT10
LnRvTG93ZXJDYXNlKCkpfSxmaXJzdDp1KGZ1bmN0aW9uKCl7cmV0dXJuWzBdfSksbGFzdDp1KGZ1
bmN0aW9uKGUsdCl7cmV0dXJuW3QtMV19KSxlcTp1KGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm5bbjww
P24rdDpuXX0pLGV2ZW46dShmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248dDtuKz0yKWUucHVz
aChuKQorcmV0dXJuIGV9KSxvZGQ6dShmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0xO248dDtuKz0y
KWUucHVzaChuKQorcmV0dXJuIGV9KSxsdDp1KGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bjww
P24rdDpuOy0tcj49MDspZS5wdXNoKHIpCityZXR1cm4gZX0pLGd0OnUoZnVuY3Rpb24oZSx0LG4p
e2Zvcih2YXIgcj1uPDA/bit0Om47KytyPHQ7KWUucHVzaChyKQorcmV0dXJuIGV9KX19LHcucHNl
dWRvcy5udGg9dy5wc2V1ZG9zLmVxCitmb3IoYiBpbntyYWRpbzohMCxjaGVja2JveDohMCxmaWxl
OiEwLHBhc3N3b3JkOiEwLGltYWdlOiEwfSl3LnBzZXVkb3NbYl09ZnVuY3Rpb24oZSl7cmV0dXJu
IGZ1bmN0aW9uKHQpe3JldHVybiJpbnB1dCI9PT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJnQu
dHlwZT09PWV9fShiKQorZm9yKGIgaW57c3VibWl0OiEwLHJlc2V0OiEwfSl3LnBzZXVkb3NbYl09
ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPXQubm9kZU5hbWUudG9Mb3dlckNh
c2UoKQorcmV0dXJuKCJpbnB1dCI9PT1ufHwiYnV0dG9uIj09PW4pJiZ0LnR5cGU9PT1lfX0oYikK
K3JldHVybiBjLnByb3RvdHlwZT13LmZpbHRlcnM9dy5wc2V1ZG9zLHcuc2V0RmlsdGVycz1uZXcg
YyxDPXQudG9rZW5pemU9ZnVuY3Rpb24oZSxuKXt2YXIgcixpLG8scyxhLHUsbCxjPUhbZSsiICJd
CitpZihjKXJldHVybiBuPzA6Yy5zbGljZSgwKQorZm9yKGE9ZSx1PVtdLGw9dy5wcmVGaWx0ZXI7
YTspe3ImJiEoaT1zZS5leGVjKGEpKXx8KGkmJihhPWEuc2xpY2UoaVswXS5sZW5ndGgpfHxhKSx1
LnB1c2gobz1bXSkpLHI9ITEsKGk9YWUuZXhlYyhhKSkmJihyPWkuc2hpZnQoKSxvLnB1c2goe3Zh
bHVlOnIsdHlwZTppWzBdLnJlcGxhY2Uob2UsIiAiKX0pLGE9YS5zbGljZShyLmxlbmd0aCkpCitm
b3IocyBpbiB3LmZpbHRlcikhKGk9cGVbc10uZXhlYyhhKSl8fGxbc10mJiEoaT1sW3NdKGkpKXx8
KHI9aS5zaGlmdCgpLG8ucHVzaCh7dmFsdWU6cix0eXBlOnMsbWF0Y2hlczppfSksYT1hLnNsaWNl
KHIubGVuZ3RoKSkKK2lmKCFyKWJyZWFrfXJldHVybiBuP2EubGVuZ3RoOmE/dC5lcnJvcihlKTpI
KGUsdSkuc2xpY2UoMCl9LE89dC5jb21waWxlPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPVtd
LG89VltlKyIgIl0KK2lmKCFvKXtmb3IodHx8KHQ9QyhlKSksbj10Lmxlbmd0aDtuLS07KW89eSh0
W25dKSxvW0ZdP3IucHVzaChvKTppLnB1c2gobykKK289VihlLHYoaSxyKSksby5zZWxlY3Rvcj1l
fXJldHVybiBvfSxBPXQuc2VsZWN0PWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8scyxhLHUsYz0i
ZnVuY3Rpb24iPT10eXBlb2YgZSYmZSxmPSFyJiZDKGU9Yy5zZWxlY3Rvcnx8ZSkKK2lmKG49bnx8
W10sMT09PWYubGVuZ3RoKXtpZihvPWZbMF09ZlswXS5zbGljZSgwKSxvLmxlbmd0aD4yJiYiSUQi
PT09KHM9b1swXSkudHlwZSYmOT09PXQubm9kZVR5cGUmJmomJncucmVsYXRpdmVbb1sxXS50eXBl
XSl7aWYoISh0PSh3LmZpbmQuSUQocy5tYXRjaGVzWzBdLnJlcGxhY2UoeWUsdmUpLHQpfHxbXSlb
MF0pKXJldHVybiBuCitjJiYodD10LnBhcmVudE5vZGUpLGU9ZS5zbGljZShvLnNoaWZ0KCkudmFs
dWUubGVuZ3RoKX1mb3IoaT1wZS5uZWVkc0NvbnRleHQudGVzdChlKT8wOm8ubGVuZ3RoO2ktLSYm
KHM9b1tpXSwhdy5yZWxhdGl2ZVthPXMudHlwZV0pOylpZigodT13LmZpbmRbYV0pJiYocj11KHMu
bWF0Y2hlc1swXS5yZXBsYWNlKHllLHZlKSxnZS50ZXN0KG9bMF0udHlwZSkmJmwodC5wYXJlbnRO
b2RlKXx8dCkpKXtpZihvLnNwbGljZShpLDEpLCEoZT1yLmxlbmd0aCYmcChvKSkpcmV0dXJuIFku
YXBwbHkobixyKSxuCiticmVha319cmV0dXJuKGN8fE8oZSxmKSkocix0LCFqLG4sIXR8fGdlLnRl
c3QoZSkmJmwodC5wYXJlbnROb2RlKXx8dCksbn0sXy5zb3J0U3RhYmxlPUYuc3BsaXQoIiIpLnNv
cnQoVykuam9pbigiIik9PT1GLF8uZGV0ZWN0RHVwbGljYXRlcz0hIVIsaygpLF8uc29ydERldGFj
aGVkPWkoZnVuY3Rpb24oZSl7cmV0dXJuIDEmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihOLmNy
ZWF0ZUVsZW1lbnQoImZpZWxkc2V0IikpfSksaShmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhU
TUw9IjxhIGhyZWY9JyMnPjwvYT4iLCIjIj09PWUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhy
ZWYiKX0pfHxvKCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoIixmdW5jdGlvbihlLHQsbil7aWYoIW4p
cmV0dXJuIGUuZ2V0QXR0cmlidXRlKHQsInR5cGUiPT09dC50b0xvd2VyQ2FzZSgpPzE6Mil9KSxf
LmF0dHJpYnV0ZXMmJmkoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaW5uZXJIVE1MPSI8aW5wdXQvPiIs
ZS5maXJzdENoaWxkLnNldEF0dHJpYnV0ZSgidmFsdWUiLCIiKSwiIj09PWUuZmlyc3RDaGlsZC5n
ZXRBdHRyaWJ1dGUoInZhbHVlIil9KXx8bygidmFsdWUiLGZ1bmN0aW9uKGUsdCxuKXtpZighbiYm
ImlucHV0Ij09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSlyZXR1cm4gZS5kZWZhdWx0VmFsdWV9
KSxpKGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKX0p
fHxvKFosZnVuY3Rpb24oZSx0LG4pe3ZhciByCitpZighbilyZXR1cm4hMD09PWVbdF0/dC50b0xv
d2VyQ2FzZSgpOihyPWUuZ2V0QXR0cmlidXRlTm9kZSh0KSkmJnIuc3BlY2lmaWVkP3IudmFsdWU6
bnVsbH0pLHR9KGUpCitkZS5maW5kPWJlLGRlLmV4cHI9YmUuc2VsZWN0b3JzLGRlLmV4cHJbIjoi
XT1kZS5leHByLnBzZXVkb3MsZGUudW5pcXVlU29ydD1kZS51bmlxdWU9YmUudW5pcXVlU29ydCxk
ZS50ZXh0PWJlLmdldFRleHQsZGUuaXNYTUxEb2M9YmUuaXNYTUwsZGUuY29udGFpbnM9YmUuY29u
dGFpbnMsZGUuZXNjYXBlU2VsZWN0b3I9YmUuZXNjYXBlCit2YXIgX2U9ZnVuY3Rpb24oZSx0LG4p
e2Zvcih2YXIgcj1bXSxpPXZvaWQgMCE9PW47KGU9ZVt0XSkmJjkhPT1lLm5vZGVUeXBlOylpZigx
PT09ZS5ub2RlVHlwZSl7aWYoaSYmZGUoZSkuaXMobikpYnJlYWsKK3IucHVzaChlKX1yZXR1cm4g
cn0sd2U9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W107ZTtlPWUubmV4dFNpYmxpbmcpMT09PWUu
bm9kZVR5cGUmJmUhPT10JiZuLnB1c2goZSkKK3JldHVybiBufSxFZT1kZS5leHByLm1hdGNoLm5l
ZWRzQ29udGV4dCx4ZT0vXjwoW2Etel1bXlwvXDA+Olx4MjBcdFxyXG5cZl0qKVtceDIwXHRcclxu
XGZdKlwvPz4oPzo8XC9cMT58KSQvaSxDZT0vXi5bXjojXFtcLixdKiQvCitkZS5maWx0ZXI9ZnVu
Y3Rpb24oZSx0LG4pe3ZhciByPXRbMF0KK3JldHVybiBuJiYoZT0iOm5vdCgiK2UrIikiKSwxPT09
dC5sZW5ndGgmJjE9PT1yLm5vZGVUeXBlP2RlLmZpbmQubWF0Y2hlc1NlbGVjdG9yKHIsZSk/W3Jd
OltdOmRlLmZpbmQubWF0Y2hlcyhlLGRlLmdyZXAodCxmdW5jdGlvbihlKXtyZXR1cm4gMT09PWUu
bm9kZVR5cGV9KSl9LGRlLmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihlKXt2YXIgdCxuLHI9dGhp
cy5sZW5ndGgsaT10aGlzCitpZigic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIHRoaXMucHVzaFN0
YWNrKGRlKGUpLmZpbHRlcihmdW5jdGlvbigpe2Zvcih0PTA7dDxyO3QrKylpZihkZS5jb250YWlu
cyhpW3RdLHRoaXMpKXJldHVybiEwfSkpCitmb3Iobj10aGlzLnB1c2hTdGFjayhbXSksdD0wO3Q8
cjt0KyspZGUuZmluZChlLGlbdF0sbikKK3JldHVybiByPjE/ZGUudW5pcXVlU29ydChuKTpufSxm
aWx0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKG8odGhpcyxlfHxbXSwhMSkp
fSxub3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKG8odGhpcyxlfHxbXSwhMCkp
fSxpczpmdW5jdGlvbihlKXtyZXR1cm4hIW8odGhpcywic3RyaW5nIj09dHlwZW9mIGUmJkVlLnRl
c3QoZSk/ZGUoZSk6ZXx8W10sITEpLmxlbmd0aH19KQordmFyIE9lLEFlPS9eKD86XHMqKDxbXHdc
V10rPilbXj5dKnwjKFtcdy1dKykpJC87KGRlLmZuLmluaXQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciBy
LGkKK2lmKCFlKXJldHVybiB0aGlzCitpZihuPW58fE9lLCJzdHJpbmciPT10eXBlb2YgZSl7aWYo
IShyPSI8Ij09PWVbMF0mJiI+Ij09PWVbZS5sZW5ndGgtMV0mJmUubGVuZ3RoPj0zP1tudWxsLGUs
bnVsbF06QWUuZXhlYyhlKSl8fCFyWzFdJiZ0KXJldHVybiF0fHx0LmpxdWVyeT8odHx8bikuZmlu
ZChlKTp0aGlzLmNvbnN0cnVjdG9yKHQpLmZpbmQoZSkKK2lmKHJbMV0pe2lmKHQ9dCBpbnN0YW5j
ZW9mIGRlP3RbMF06dCxkZS5tZXJnZSh0aGlzLGRlLnBhcnNlSFRNTChyWzFdLHQmJnQubm9kZVR5
cGU/dC5vd25lckRvY3VtZW50fHx0Om5lLCEwKSkseGUudGVzdChyWzFdKSYmZGUuaXNQbGFpbk9i
amVjdCh0KSlmb3IociBpbiB0KWRlLmlzRnVuY3Rpb24odGhpc1tyXSk/dGhpc1tyXSh0W3JdKTp0
aGlzLmF0dHIocix0W3JdKQorcmV0dXJuIHRoaXN9cmV0dXJuIGk9bmUuZ2V0RWxlbWVudEJ5SWQo
clsyXSksaSYmKHRoaXNbMF09aSx0aGlzLmxlbmd0aD0xKSx0aGlzfXJldHVybiBlLm5vZGVUeXBl
Pyh0aGlzWzBdPWUsdGhpcy5sZW5ndGg9MSx0aGlzKTpkZS5pc0Z1bmN0aW9uKGUpP3ZvaWQgMCE9
PW4ucmVhZHk/bi5yZWFkeShlKTplKGRlKTpkZS5tYWtlQXJyYXkoZSx0aGlzKX0pLnByb3RvdHlw
ZT1kZS5mbixPZT1kZShuZSkKK3ZhciBUZT0vXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkp
LyxTZT17Y2hpbGRyZW46ITAsY29udGVudHM6ITAsbmV4dDohMCxwcmV2OiEwfQorZGUuZm4uZXh0
ZW5kKHtoYXM6ZnVuY3Rpb24oZSl7dmFyIHQ9ZGUoZSx0aGlzKSxuPXQubGVuZ3RoCityZXR1cm4g
dGhpcy5maWx0ZXIoZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPG47ZSsrKWlmKGRlLmNvbnRhaW5z
KHRoaXMsdFtlXSkpcmV0dXJuITB9KX0sY2xvc2VzdDpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MCxp
PXRoaXMubGVuZ3RoLG89W10scz0ic3RyaW5nIiE9dHlwZW9mIGUmJmRlKGUpCitpZighRWUudGVz
dChlKSlmb3IoO3I8aTtyKyspZm9yKG49dGhpc1tyXTtuJiZuIT09dDtuPW4ucGFyZW50Tm9kZSlp
ZihuLm5vZGVUeXBlPDExJiYocz9zLmluZGV4KG4pPi0xOjE9PT1uLm5vZGVUeXBlJiZkZS5maW5k
Lm1hdGNoZXNTZWxlY3RvcihuLGUpKSl7by5wdXNoKG4pCiticmVha31yZXR1cm4gdGhpcy5wdXNo
U3RhY2soby5sZW5ndGg+MT9kZS51bmlxdWVTb3J0KG8pOm8pfSxpbmRleDpmdW5jdGlvbihlKXty
ZXR1cm4gZT8ic3RyaW5nIj09dHlwZW9mIGU/YWUuY2FsbChkZShlKSx0aGlzWzBdKTphZS5jYWxs
KHRoaXMsZS5qcXVlcnk/ZVswXTplKTp0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGU/dGhpcy5m
aXJzdCgpLnByZXZBbGwoKS5sZW5ndGg6LTF9LGFkZDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlz
LnB1c2hTdGFjayhkZS51bmlxdWVTb3J0KGRlLm1lcmdlKHRoaXMuZ2V0KCksZGUoZSx0KSkpKX0s
YWRkQmFjazpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hZGQobnVsbD09ZT90aGlzLnByZXZPYmpl
Y3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcihlKSl9fSksZGUuZWFjaCh7cGFyZW50OmZ1bmN0aW9u
KGUpe3ZhciB0PWUucGFyZW50Tm9kZQorcmV0dXJuIHQmJjExIT09dC5ub2RlVHlwZT90Om51bGx9
LHBhcmVudHM6ZnVuY3Rpb24oZSl7cmV0dXJuIF9lKGUsInBhcmVudE5vZGUiKX0scGFyZW50c1Vu
dGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gX2UoZSwicGFyZW50Tm9kZSIsbil9LG5leHQ6ZnVu
Y3Rpb24oZSl7cmV0dXJuIHMoZSwibmV4dFNpYmxpbmciKX0scHJldjpmdW5jdGlvbihlKXtyZXR1
cm4gcyhlLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihlKXtyZXR1cm4gX2Uo
ZSwibmV4dFNpYmxpbmciKX0scHJldkFsbDpmdW5jdGlvbihlKXtyZXR1cm4gX2UoZSwicHJldmlv
dXNTaWJsaW5nIil9LG5leHRVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIF9lKGUsIm5leHRT
aWJsaW5nIixuKX0scHJldlVudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gX2UoZSwicHJldmlv
dXNTaWJsaW5nIixuKX0sc2libGluZ3M6ZnVuY3Rpb24oZSl7cmV0dXJuIHdlKChlLnBhcmVudE5v
ZGV8fHt9KS5maXJzdENoaWxkLGUpfSxjaGlsZHJlbjpmdW5jdGlvbihlKXtyZXR1cm4gd2UoZS5m
aXJzdENoaWxkKX0sY29udGVudHM6ZnVuY3Rpb24oZSl7cmV0dXJuIGkoZSwiaWZyYW1lIik/ZS5j
b250ZW50RG9jdW1lbnQ6KGkoZSwidGVtcGxhdGUiKSYmKGU9ZS5jb250ZW50fHxlKSxkZS5tZXJn
ZShbXSxlLmNoaWxkTm9kZXMpKX19LGZ1bmN0aW9uKGUsdCl7ZGUuZm5bZV09ZnVuY3Rpb24obixy
KXt2YXIgaT1kZS5tYXAodGhpcyx0LG4pCityZXR1cm4iVW50aWwiIT09ZS5zbGljZSgtNSkmJihy
PW4pLHImJiJzdHJpbmciPT10eXBlb2YgciYmKGk9ZGUuZmlsdGVyKHIsaSkpLHRoaXMubGVuZ3Ro
PjEmJihTZVtlXXx8ZGUudW5pcXVlU29ydChpKSxUZS50ZXN0KGUpJiZpLnJldmVyc2UoKSksdGhp
cy5wdXNoU3RhY2soaSl9fSkKK3ZhciBSZT0vW15ceDIwXHRcclxuXGZdKy9nCitkZS5DYWxsYmFj
a3M9ZnVuY3Rpb24oZSl7ZT0ic3RyaW5nIj09dHlwZW9mIGU/YShlKTpkZS5leHRlbmQoe30sZSkK
K3ZhciB0LG4scixpLG89W10scz1bXSx1PS0xLGw9ZnVuY3Rpb24oKXtmb3IoaT1pfHxlLm9uY2Us
cj10PSEwO3MubGVuZ3RoO3U9LTEpZm9yKG49cy5zaGlmdCgpOysrdTxvLmxlbmd0aDspITE9PT1v
W3VdLmFwcGx5KG5bMF0sblsxXSkmJmUuc3RvcE9uRmFsc2UmJih1PW8ubGVuZ3RoLG49ITEpCitl
Lm1lbW9yeXx8KG49ITEpLHQ9ITEsaSYmKG89bj9bXToiIil9LGM9e2FkZDpmdW5jdGlvbigpe3Jl
dHVybiBvJiYobiYmIXQmJih1PW8ubGVuZ3RoLTEscy5wdXNoKG4pKSxmdW5jdGlvbiB0KG4pe2Rl
LmVhY2gobixmdW5jdGlvbihuLHIpe2RlLmlzRnVuY3Rpb24ocik/ZS51bmlxdWUmJmMuaGFzKHIp
fHxvLnB1c2gocik6ciYmci5sZW5ndGgmJiJzdHJpbmciIT09ZGUudHlwZShyKSYmdChyKX0pfShh
cmd1bWVudHMpLG4mJiF0JiZsKCkpLHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiBkZS5l
YWNoKGFyZ3VtZW50cyxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbjsobj1kZS5pbkFycmF5KHQsbyxu
KSk+LTE7KW8uc3BsaWNlKG4sMSksbjw9dSYmdS0tfSksdGhpc30saGFzOmZ1bmN0aW9uKGUpe3Jl
dHVybiBlP2RlLmluQXJyYXkoZSxvKT4tMTpvLmxlbmd0aD4wfSxlbXB0eTpmdW5jdGlvbigpe3Jl
dHVybiBvJiYobz1bXSksdGhpc30sZGlzYWJsZTpmdW5jdGlvbigpe3JldHVybiBpPXM9W10sbz1u
PSIiLHRoaXN9LGRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIW99LGxvY2s6ZnVuY3Rpb24oKXty
ZXR1cm4gaT1zPVtdLG58fHR8fChvPW49IiIpLHRoaXN9LGxvY2tlZDpmdW5jdGlvbigpe3JldHVy
biEhaX0sZmlyZVdpdGg6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gaXx8KG49bnx8W10sbj1bZSxuLnNs
aWNlP24uc2xpY2UoKTpuXSxzLnB1c2gobiksdHx8bCgpKSx0aGlzfSxmaXJlOmZ1bmN0aW9uKCl7
cmV0dXJuIGMuZmlyZVdpdGgodGhpcyxhcmd1bWVudHMpLHRoaXN9LGZpcmVkOmZ1bmN0aW9uKCl7
cmV0dXJuISFyfX0KK3JldHVybiBjfSxkZS5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKHQpe3Zh
ciBuPVtbIm5vdGlmeSIsInByb2dyZXNzIixkZS5DYWxsYmFja3MoIm1lbW9yeSIpLGRlLkNhbGxi
YWNrcygibWVtb3J5IiksMl0sWyJyZXNvbHZlIiwiZG9uZSIsZGUuQ2FsbGJhY2tzKCJvbmNlIG1l
bW9yeSIpLGRlLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwwLCJyZXNvbHZlZCJdLFsicmVqZWN0
IiwiZmFpbCIsZGUuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLGRlLkNhbGxiYWNrcygib25jZSBt
ZW1vcnkiKSwxLCJyZWplY3RlZCJdXSxyPSJwZW5kaW5nIixpPXtzdGF0ZTpmdW5jdGlvbigpe3Jl
dHVybiByfSxhbHdheXM6ZnVuY3Rpb24oKXtyZXR1cm4gby5kb25lKGFyZ3VtZW50cykuZmFpbChh
cmd1bWVudHMpLHRoaXN9LGNhdGNoOmZ1bmN0aW9uKGUpe3JldHVybiBpLnRoZW4obnVsbCxlKX0s
cGlwZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cworcmV0dXJuIGRlLkRlZmVycmVkKGZ1bmN0
aW9uKHQpe2RlLmVhY2gobixmdW5jdGlvbihuLHIpe3ZhciBpPWRlLmlzRnVuY3Rpb24oZVtyWzRd
XSkmJmVbcls0XV0KK29bclsxXV0oZnVuY3Rpb24oKXt2YXIgZT1pJiZpLmFwcGx5KHRoaXMsYXJn
dW1lbnRzKQorZSYmZGUuaXNGdW5jdGlvbihlLnByb21pc2UpP2UucHJvbWlzZSgpLnByb2dyZXNz
KHQubm90aWZ5KS5kb25lKHQucmVzb2x2ZSkuZmFpbCh0LnJlamVjdCk6dFtyWzBdKyJXaXRoIl0o
dGhpcyxpP1tlXTphcmd1bWVudHMpfSl9KSxlPW51bGx9KS5wcm9taXNlKCl9LHRoZW46ZnVuY3Rp
b24odCxyLGkpe2Z1bmN0aW9uIG8odCxuLHIsaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9dGhp
cyxjPWFyZ3VtZW50cyxwPWZ1bmN0aW9uKCl7dmFyIGUscAoraWYoISh0PHMpKXtpZigoZT1yLmFw
cGx5KGEsYykpPT09bi5wcm9taXNlKCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlbmFibGUgc2Vs
Zi1yZXNvbHV0aW9uIikKK3A9ZSYmKCJvYmplY3QiPT10eXBlb2YgZXx8ImZ1bmN0aW9uIj09dHlw
ZW9mIGUpJiZlLnRoZW4sZGUuaXNGdW5jdGlvbihwKT9pP3AuY2FsbChlLG8ocyxuLHUsaSksbyhz
LG4sbCxpKSk6KHMrKyxwLmNhbGwoZSxvKHMsbix1LGkpLG8ocyxuLGwsaSksbyhzLG4sdSxuLm5v
dGlmeVdpdGgpKSk6KHIhPT11JiYoYT12b2lkIDAsYz1bZV0pLChpfHxuLnJlc29sdmVXaXRoKShh
LGMpKX19LGY9aT9wOmZ1bmN0aW9uKCl7dHJ5e3AoKX1jYXRjaChlKXtkZS5EZWZlcnJlZC5leGNl
cHRpb25Ib29rJiZkZS5EZWZlcnJlZC5leGNlcHRpb25Ib29rKGUsZi5zdGFja1RyYWNlKSx0KzE+
PXMmJihyIT09bCYmKGE9dm9pZCAwLGM9W2VdKSxuLnJlamVjdFdpdGgoYSxjKSl9fQordD9mKCk6
KGRlLkRlZmVycmVkLmdldFN0YWNrSG9vayYmKGYuc3RhY2tUcmFjZT1kZS5EZWZlcnJlZC5nZXRT
dGFja0hvb2soKSksZS5zZXRUaW1lb3V0KGYpKX19dmFyIHM9MAorcmV0dXJuIGRlLkRlZmVycmVk
KGZ1bmN0aW9uKGUpe25bMF1bM10uYWRkKG8oMCxlLGRlLmlzRnVuY3Rpb24oaSk/aTp1LGUubm90
aWZ5V2l0aCkpLG5bMV1bM10uYWRkKG8oMCxlLGRlLmlzRnVuY3Rpb24odCk/dDp1KSksblsyXVsz
XS5hZGQobygwLGUsZGUuaXNGdW5jdGlvbihyKT9yOmwpKX0pLnByb21pc2UoKX0scHJvbWlzZTpm
dW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZT9kZS5leHRlbmQoZSxpKTppfX0sbz17fQorcmV0dXJu
IGRlLmVhY2gobixmdW5jdGlvbihlLHQpe3ZhciBzPXRbMl0sYT10WzVdCitpW3RbMV1dPXMuYWRk
LGEmJnMuYWRkKGZ1bmN0aW9uKCl7cj1hfSxuWzMtZV1bMl0uZGlzYWJsZSxuWzBdWzJdLmxvY2sp
LHMuYWRkKHRbM10uZmlyZSksb1t0WzBdXT1mdW5jdGlvbigpe3JldHVybiBvW3RbMF0rIldpdGgi
XSh0aGlzPT09bz92b2lkIDA6dGhpcyxhcmd1bWVudHMpLHRoaXN9LG9bdFswXSsiV2l0aCJdPXMu
ZmlyZVdpdGh9KSxpLnByb21pc2UobyksdCYmdC5jYWxsKG8sbyksb30sd2hlbjpmdW5jdGlvbihl
KXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49dCxyPUFycmF5KG4pLGk9aWUuY2FsbChhcmd1bWVu
dHMpLG89ZGUuRGVmZXJyZWQoKSxzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihuKXtyW2Vd
PXRoaXMsaVtlXT1hcmd1bWVudHMubGVuZ3RoPjE/aWUuY2FsbChhcmd1bWVudHMpOm4sLS10fHxv
LnJlc29sdmVXaXRoKHIsaSl9fQoraWYodDw9MSYmKGMoZSxvLmRvbmUocyhuKSkucmVzb2x2ZSxv
LnJlamVjdCwhdCksInBlbmRpbmciPT09by5zdGF0ZSgpfHxkZS5pc0Z1bmN0aW9uKGlbbl0mJmlb
bl0udGhlbikpKXJldHVybiBvLnRoZW4oKQorZm9yKDtuLS07KWMoaVtuXSxzKG4pLG8ucmVqZWN0
KQorcmV0dXJuIG8ucHJvbWlzZSgpfX0pCit2YXIga2U9L14oRXZhbHxJbnRlcm5hbHxSYW5nZXxS
ZWZlcmVuY2V8U3ludGF4fFR5cGV8VVJJKUVycm9yJC8KK2RlLkRlZmVycmVkLmV4Y2VwdGlvbkhv
b2s9ZnVuY3Rpb24odCxuKXtlLmNvbnNvbGUmJmUuY29uc29sZS53YXJuJiZ0JiZrZS50ZXN0KHQu
bmFtZSkmJmUuY29uc29sZS53YXJuKCJqUXVlcnkuRGVmZXJyZWQgZXhjZXB0aW9uOiAiK3QubWVz
c2FnZSx0LnN0YWNrLG4pfSxkZS5yZWFkeUV4Y2VwdGlvbj1mdW5jdGlvbih0KXtlLnNldFRpbWVv
dXQoZnVuY3Rpb24oKXt0aHJvdyB0fSl9Cit2YXIgTmU9ZGUuRGVmZXJyZWQoKQorZGUuZm4ucmVh
ZHk9ZnVuY3Rpb24oZSl7cmV0dXJuIE5lLnRoZW4oZSkuY2F0Y2goZnVuY3Rpb24oZSl7ZGUucmVh
ZHlFeGNlcHRpb24oZSl9KSx0aGlzfSxkZS5leHRlbmQoe2lzUmVhZHk6ITEscmVhZHlXYWl0OjEs
cmVhZHk6ZnVuY3Rpb24oZSl7KCEwPT09ZT8tLWRlLnJlYWR5V2FpdDpkZS5pc1JlYWR5KXx8KGRl
LmlzUmVhZHk9ITAsITAhPT1lJiYtLWRlLnJlYWR5V2FpdD4wfHxOZS5yZXNvbHZlV2l0aChuZSxb
ZGVdKSl9fSksZGUucmVhZHkudGhlbj1OZS50aGVuLCJjb21wbGV0ZSI9PT1uZS5yZWFkeVN0YXRl
fHwibG9hZGluZyIhPT1uZS5yZWFkeVN0YXRlJiYhbmUuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xs
P2Uuc2V0VGltZW91dChkZS5yZWFkeSk6KG5lLmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRM
b2FkZWQiLHApLGUuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIscCkpCit2YXIgUGU9ZnVuY3Rpb24o
ZSx0LG4scixpLG8scyl7dmFyIGE9MCx1PWUubGVuZ3RoLGw9bnVsbD09bgoraWYoIm9iamVjdCI9
PT1kZS50eXBlKG4pKXtpPSEwCitmb3IoYSBpbiBuKVBlKGUsdCxhLG5bYV0sITAsbyxzKX1lbHNl
IGlmKHZvaWQgMCE9PXImJihpPSEwLGRlLmlzRnVuY3Rpb24ocil8fChzPSEwKSxsJiYocz8odC5j
YWxsKGUsciksdD1udWxsKToobD10LHQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBsLmNhbGwoZGUo
ZSksbil9KSksdCkpZm9yKDthPHU7YSsrKXQoZVthXSxuLHM/cjpyLmNhbGwoZVthXSxhLHQoZVth
XSxuKSkpCityZXR1cm4gaT9lOmw/dC5jYWxsKGUpOnU/dChlWzBdLG4pOm99LGplPWZ1bmN0aW9u
KGUpe3JldHVybiAxPT09ZS5ub2RlVHlwZXx8OT09PWUubm9kZVR5cGV8fCErZS5ub2RlVHlwZX0K
K2YudWlkPTEsZi5wcm90b3R5cGU9e2NhY2hlOmZ1bmN0aW9uKGUpe3ZhciB0PWVbdGhpcy5leHBh
bmRvXQorcmV0dXJuIHR8fCh0PXt9LGplKGUpJiYoZS5ub2RlVHlwZT9lW3RoaXMuZXhwYW5kb109
dDpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0aGlzLmV4cGFuZG8se3ZhbHVlOnQsY29uZmlndXJh
YmxlOiEwfSkpKSx0fSxzZXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9dGhpcy5jYWNoZShlKQor
aWYoInN0cmluZyI9PXR5cGVvZiB0KWlbZGUuY2FtZWxDYXNlKHQpXT1uCitlbHNlIGZvcihyIGlu
IHQpaVtkZS5jYW1lbENhc2UocildPXRbcl0KK3JldHVybiBpfSxnZXQ6ZnVuY3Rpb24oZSx0KXty
ZXR1cm4gdm9pZCAwPT09dD90aGlzLmNhY2hlKGUpOmVbdGhpcy5leHBhbmRvXSYmZVt0aGlzLmV4
cGFuZG9dW2RlLmNhbWVsQ2FzZSh0KV19LGFjY2VzczpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHZv
aWQgMD09PXR8fHQmJiJzdHJpbmciPT10eXBlb2YgdCYmdm9pZCAwPT09bj90aGlzLmdldChlLHQp
Oih0aGlzLnNldChlLHQsbiksdm9pZCAwIT09bj9uOnQpfSxyZW1vdmU6ZnVuY3Rpb24oZSx0KXt2
YXIgbixyPWVbdGhpcy5leHBhbmRvXQoraWYodm9pZCAwIT09cil7aWYodm9pZCAwIT09dCl7QXJy
YXkuaXNBcnJheSh0KT90PXQubWFwKGRlLmNhbWVsQ2FzZSk6KHQ9ZGUuY2FtZWxDYXNlKHQpLHQ9
dCBpbiByP1t0XTp0Lm1hdGNoKFJlKXx8W10pLG49dC5sZW5ndGgKK2Zvcig7bi0tOylkZWxldGUg
clt0W25dXX0odm9pZCAwPT09dHx8ZGUuaXNFbXB0eU9iamVjdChyKSkmJihlLm5vZGVUeXBlP2Vb
dGhpcy5leHBhbmRvXT12b2lkIDA6ZGVsZXRlIGVbdGhpcy5leHBhbmRvXSl9fSxoYXNEYXRhOmZ1
bmN0aW9uKGUpe3ZhciB0PWVbdGhpcy5leHBhbmRvXQorcmV0dXJuIHZvaWQgMCE9PXQmJiFkZS5p
c0VtcHR5T2JqZWN0KHQpfX0KK3ZhciBEZT1uZXcgZixMZT1uZXcgZixJZT0vXig/Olx7W1x3XFdd
Klx9fFxbW1x3XFddKlxdKSQvLE1lPS9bQS1aXS9nCitkZS5leHRlbmQoe2hhc0RhdGE6ZnVuY3Rp
b24oZSl7cmV0dXJuIExlLmhhc0RhdGEoZSl8fERlLmhhc0RhdGEoZSl9LGRhdGE6ZnVuY3Rpb24o
ZSx0LG4pe3JldHVybiBMZS5hY2Nlc3MoZSx0LG4pfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGUsdCl7
TGUucmVtb3ZlKGUsdCl9LF9kYXRhOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gRGUuYWNjZXNzKGUs
dCxuKX0sX3JlbW92ZURhdGE6ZnVuY3Rpb24oZSx0KXtEZS5yZW1vdmUoZSx0KX19KSxkZS5mbi5l
eHRlbmQoe2RhdGE6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbz10aGlzWzBdLHM9byYmby5hdHRy
aWJ1dGVzCitpZih2b2lkIDA9PT1lKXtpZih0aGlzLmxlbmd0aCYmKGk9TGUuZ2V0KG8pLDE9PT1v
Lm5vZGVUeXBlJiYhRGUuZ2V0KG8sImhhc0RhdGFBdHRycyIpKSl7Zm9yKG49cy5sZW5ndGg7bi0t
OylzW25dJiYocj1zW25dLm5hbWUsMD09PXIuaW5kZXhPZigiZGF0YS0iKSYmKHI9ZGUuY2FtZWxD
YXNlKHIuc2xpY2UoNSkpLGQobyxyLGlbcl0pKSkKK0RlLnNldChvLCJoYXNEYXRhQXR0cnMiLCEw
KX1yZXR1cm4gaX1yZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGU/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7
TGUuc2V0KHRoaXMsZSl9KTpQZSh0aGlzLGZ1bmN0aW9uKHQpe3ZhciBuCitpZihvJiZ2b2lkIDA9
PT10KXtpZih2b2lkIDAhPT0obj1MZS5nZXQobyxlKSkpcmV0dXJuIG4KK2lmKHZvaWQgMCE9PShu
PWQobyxlKSkpcmV0dXJuIG59ZWxzZSB0aGlzLmVhY2goZnVuY3Rpb24oKXtMZS5zZXQodGhpcyxl
LHQpfSl9LG51bGwsdCxhcmd1bWVudHMubGVuZ3RoPjEsbnVsbCwhMCl9LHJlbW92ZURhdGE6ZnVu
Y3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe0xlLnJlbW92ZSh0aGlzLGUpfSl9
fSksZGUuZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihlLHQsbil7dmFyIHIKK2lmKGUpcmV0dXJuIHQ9
KHR8fCJmeCIpKyJxdWV1ZSIscj1EZS5nZXQoZSx0KSxuJiYoIXJ8fEFycmF5LmlzQXJyYXkobik/
cj1EZS5hY2Nlc3MoZSx0LGRlLm1ha2VBcnJheShuKSk6ci5wdXNoKG4pKSxyfHxbXX0sZGVxdWV1
ZTpmdW5jdGlvbihlLHQpe3Q9dHx8ImZ4IgordmFyIG49ZGUucXVldWUoZSx0KSxyPW4ubGVuZ3Ro
LGk9bi5zaGlmdCgpLG89ZGUuX3F1ZXVlSG9va3MoZSx0KSxzPWZ1bmN0aW9uKCl7ZGUuZGVxdWV1
ZShlLHQpfQorImlucHJvZ3Jlc3MiPT09aSYmKGk9bi5zaGlmdCgpLHItLSksaSYmKCJmeCI9PT10
JiZuLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSxkZWxldGUgby5zdG9wLGkuY2FsbChlLHMsbykpLCFy
JiZvJiZvLmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10KyJx
dWV1ZUhvb2tzIgorcmV0dXJuIERlLmdldChlLG4pfHxEZS5hY2Nlc3MoZSxuLHtlbXB0eTpkZS5D
YWxsYmFja3MoIm9uY2UgbWVtb3J5IikuYWRkKGZ1bmN0aW9uKCl7RGUucmVtb3ZlKGUsW3QrInF1
ZXVlIixuXSl9KX0pfX0pLGRlLmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj0y
CityZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGUmJih0PWUsZT0iZngiLG4tLSksYXJndW1lbnRzLmxl
bmd0aDxuP2RlLnF1ZXVlKHRoaXNbMF0sZSk6dm9pZCAwPT09dD90aGlzOnRoaXMuZWFjaChmdW5j
dGlvbigpe3ZhciBuPWRlLnF1ZXVlKHRoaXMsZSx0KQorZGUuX3F1ZXVlSG9va3ModGhpcyxlKSwi
ZngiPT09ZSYmImlucHJvZ3Jlc3MiIT09blswXSYmZGUuZGVxdWV1ZSh0aGlzLGUpfSl9LGRlcXVl
dWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2RlLmRlcXVldWUodGhp
cyxlKX0pfSxjbGVhclF1ZXVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnF1ZXVlKGV8fCJmeCIs
W10pfSxwcm9taXNlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0xLGk9ZGUuRGVmZXJyZWQoKSxvPXRo
aXMscz10aGlzLmxlbmd0aCxhPWZ1bmN0aW9uKCl7LS1yfHxpLnJlc29sdmVXaXRoKG8sW29dKX0K
K2Zvcigic3RyaW5nIiE9dHlwZW9mIGUmJih0PWUsZT12b2lkIDApLGU9ZXx8ImZ4IjtzLS07KShu
PURlLmdldChvW3NdLGUrInF1ZXVlSG9va3MiKSkmJm4uZW1wdHkmJihyKyssbi5lbXB0eS5hZGQo
YSkpCityZXR1cm4gYSgpLGkucHJvbWlzZSh0KX19KQordmFyIEZlPS9bKy1dPyg/OlxkKlwufClc
ZCsoPzpbZUVdWystXT9cZCt8KS8uc291cmNlLHplPW5ldyBSZWdFeHAoIl4oPzooWystXSk9fCko
IitGZSsiKShbYS16JV0qKSQiLCJpIiksVWU9WyJUb3AiLCJSaWdodCIsIkJvdHRvbSIsIkxlZnQi
XSxCZT1mdW5jdGlvbihlLHQpe3JldHVybiBlPXR8fGUsIm5vbmUiPT09ZS5zdHlsZS5kaXNwbGF5
fHwiIj09PWUuc3R5bGUuZGlzcGxheSYmZGUuY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpJiYi
bm9uZSI9PT1kZS5jc3MoZSwiZGlzcGxheSIpfSxxZT1mdW5jdGlvbihlLHQsbixyKXt2YXIgaSxv
LHM9e30KK2ZvcihvIGluIHQpc1tvXT1lLnN0eWxlW29dLGUuc3R5bGVbb109dFtvXQoraT1uLmFw
cGx5KGUscnx8W10pCitmb3IobyBpbiB0KWUuc3R5bGVbb109c1tvXQorcmV0dXJuIGl9LEhlPXt9
CitkZS5mbi5leHRlbmQoe3Nob3c6ZnVuY3Rpb24oKXtyZXR1cm4geSh0aGlzLCEwKX0saGlkZTpm
dW5jdGlvbigpe3JldHVybiB5KHRoaXMpfSx0b2dnbGU6ZnVuY3Rpb24oZSl7cmV0dXJuImJvb2xl
YW4iPT10eXBlb2YgZT9lP3RoaXMuc2hvdygpOnRoaXMuaGlkZSgpOnRoaXMuZWFjaChmdW5jdGlv
bigpe0JlKHRoaXMpP2RlKHRoaXMpLnNob3coKTpkZSh0aGlzKS5oaWRlKCl9KX19KQordmFyIFZl
PS9eKD86Y2hlY2tib3h8cmFkaW8pJC9pLFdlPS88KFthLXpdW15cL1wwPlx4MjBcdFxyXG5cZl0r
KS9pLCRlPS9eJHxcLyg/OmphdmF8ZWNtYSlzY3JpcHQvaSxHZT17b3B0aW9uOlsxLCI8c2VsZWN0
IG11bHRpcGxlPSdtdWx0aXBsZSc+IiwiPC9zZWxlY3Q+Il0sdGhlYWQ6WzEsIjx0YWJsZT4iLCI8
L3RhYmxlPiJdLGNvbDpbMiwiPHRhYmxlPjxjb2xncm91cD4iLCI8L2NvbGdyb3VwPjwvdGFibGU+
Il0sdHI6WzIsIjx0YWJsZT48dGJvZHk+IiwiPC90Ym9keT48L3RhYmxlPiJdLHRkOlszLCI8dGFi
bGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXSxfZGVmYXVsdDpbMCwiIiwi
Il19CitHZS5vcHRncm91cD1HZS5vcHRpb24sR2UudGJvZHk9R2UudGZvb3Q9R2UuY29sZ3JvdXA9
R2UuY2FwdGlvbj1HZS50aGVhZCxHZS50aD1HZS50ZAordmFyIEtlPS88fCYjP1x3KzsvOyhmdW5j
dGlvbigpe3ZhciBlPW5lLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSx0PWUuYXBwZW5kQ2hpbGQo
bmUuY3JlYXRlRWxlbWVudCgiZGl2IikpLG49bmUuY3JlYXRlRWxlbWVudCgiaW5wdXQiKQorbi5z
ZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIpLG4uc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hl
Y2tlZCIpLG4uc2V0QXR0cmlidXRlKCJuYW1lIiwidCIpLHQuYXBwZW5kQ2hpbGQobiksaGUuY2hl
Y2tDbG9uZT10LmNsb25lTm9kZSghMCkuY2xvbmVOb2RlKCEwKS5sYXN0Q2hpbGQuY2hlY2tlZCx0
LmlubmVySFRNTD0iPHRleHRhcmVhPng8L3RleHRhcmVhPiIsaGUubm9DbG9uZUNoZWNrZWQ9ISF0
LmNsb25lTm9kZSghMCkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZX0pKCkKK3ZhciBRZT1uZS5kb2N1
bWVudEVsZW1lbnQsWWU9L15rZXkvLEplPS9eKD86bW91c2V8cG9pbnRlcnxjb250ZXh0bWVudXxk
cmFnfGRyb3ApfGNsaWNrLyxYZT0vXihbXi5dKikoPzpcLiguKyl8KS8KK2RlLmV2ZW50PXtnbG9i
YWw6e30sYWRkOmZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG8scyxhLHUsbCxjLHAsZixoLGQsbSxn
PURlLmdldChlKQoraWYoZylmb3Iobi5oYW5kbGVyJiYobz1uLG49by5oYW5kbGVyLGk9by5zZWxl
Y3RvciksaSYmZGUuZmluZC5tYXRjaGVzU2VsZWN0b3IoUWUsaSksbi5ndWlkfHwobi5ndWlkPWRl
Lmd1aWQrKyksKHU9Zy5ldmVudHMpfHwodT1nLmV2ZW50cz17fSksKHM9Zy5oYW5kbGUpfHwocz1n
LmhhbmRsZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09ZGUmJmRlLmV2ZW50LnRyaWdnZXJl
ZCE9PXQudHlwZT9kZS5ldmVudC5kaXNwYXRjaC5hcHBseShlLGFyZ3VtZW50cyk6dm9pZCAwfSks
dD0odHx8IiIpLm1hdGNoKFJlKXx8WyIiXSxsPXQubGVuZ3RoO2wtLTspYT1YZS5leGVjKHRbbF0p
fHxbXSxoPW09YVsxXSxkPShhWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksaCYmKHA9ZGUuZXZl
bnQuc3BlY2lhbFtoXXx8e30saD0oaT9wLmRlbGVnYXRlVHlwZTpwLmJpbmRUeXBlKXx8aCxwPWRl
LmV2ZW50LnNwZWNpYWxbaF18fHt9LGM9ZGUuZXh0ZW5kKHt0eXBlOmgsb3JpZ1R5cGU6bSxkYXRh
OnIsaGFuZGxlcjpuLGd1aWQ6bi5ndWlkLHNlbGVjdG9yOmksbmVlZHNDb250ZXh0OmkmJmRlLmV4
cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoaSksbmFtZXNwYWNlOmQuam9pbigiLiIpfSxvKSwo
Zj11W2hdKXx8KGY9dVtoXT1bXSxmLmRlbGVnYXRlQ291bnQ9MCxwLnNldHVwJiYhMSE9PXAuc2V0
dXAuY2FsbChlLHIsZCxzKXx8ZS5hZGRFdmVudExpc3RlbmVyJiZlLmFkZEV2ZW50TGlzdGVuZXIo
aCxzKSkscC5hZGQmJihwLmFkZC5jYWxsKGUsYyksYy5oYW5kbGVyLmd1aWR8fChjLmhhbmRsZXIu
Z3VpZD1uLmd1aWQpKSxpP2Yuc3BsaWNlKGYuZGVsZWdhdGVDb3VudCsrLDAsYyk6Zi5wdXNoKGMp
LGRlLmV2ZW50Lmdsb2JhbFtoXT0hMCl9LHJlbW92ZTpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBv
LHMsYSx1LGwsYyxwLGYsaCxkLG0sZz1EZS5oYXNEYXRhKGUpJiZEZS5nZXQoZSkKK2lmKGcmJih1
PWcuZXZlbnRzKSl7Zm9yKHQ9KHR8fCIiKS5tYXRjaChSZSl8fFsiIl0sbD10Lmxlbmd0aDtsLS07
KWlmKGE9WGUuZXhlYyh0W2xdKXx8W10saD1tPWFbMV0sZD0oYVsyXXx8IiIpLnNwbGl0KCIuIiku
c29ydCgpLGgpe2ZvcihwPWRlLmV2ZW50LnNwZWNpYWxbaF18fHt9LGg9KHI/cC5kZWxlZ2F0ZVR5
cGU6cC5iaW5kVHlwZSl8fGgsZj11W2hdfHxbXSxhPWFbMl0mJm5ldyBSZWdFeHAoIihefFxcLiki
K2Quam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIikscz1vPWYubGVuZ3RoO28tLTspYz1m
W29dLCFpJiZtIT09Yy5vcmlnVHlwZXx8biYmbi5ndWlkIT09Yy5ndWlkfHxhJiYhYS50ZXN0KGMu
bmFtZXNwYWNlKXx8ciYmciE9PWMuc2VsZWN0b3ImJigiKioiIT09cnx8IWMuc2VsZWN0b3IpfHwo
Zi5zcGxpY2UobywxKSxjLnNlbGVjdG9yJiZmLmRlbGVnYXRlQ291bnQtLSxwLnJlbW92ZSYmcC5y
ZW1vdmUuY2FsbChlLGMpKQorcyYmIWYubGVuZ3RoJiYocC50ZWFyZG93biYmITEhPT1wLnRlYXJk
b3duLmNhbGwoZSxkLGcuaGFuZGxlKXx8ZGUucmVtb3ZlRXZlbnQoZSxoLGcuaGFuZGxlKSxkZWxl
dGUgdVtoXSl9ZWxzZSBmb3IoaCBpbiB1KWRlLmV2ZW50LnJlbW92ZShlLGgrdFtsXSxuLHIsITAp
CitkZS5pc0VtcHR5T2JqZWN0KHUpJiZEZS5yZW1vdmUoZSwiaGFuZGxlIGV2ZW50cyIpfX0sZGlz
cGF0Y2g6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbyxzLGE9ZGUuZXZlbnQuZml4KGUpLHU9bmV3
IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLGw9KERlLmdldCh0aGlzLCJldmVudHMiKXx8e30pW2Eu
dHlwZV18fFtdLGM9ZGUuZXZlbnQuc3BlY2lhbFthLnR5cGVdfHx7fQorZm9yKHVbMF09YSx0PTE7
dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl1W3RdPWFyZ3VtZW50c1t0XQoraWYoYS5kZWxlZ2F0ZVRh
cmdldD10aGlzLCFjLnByZURpc3BhdGNofHwhMSE9PWMucHJlRGlzcGF0Y2guY2FsbCh0aGlzLGEp
KXtmb3Iocz1kZS5ldmVudC5oYW5kbGVycy5jYWxsKHRoaXMsYSxsKSx0PTA7KGk9c1t0KytdKSYm
IWEuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTspZm9yKGEuY3VycmVudFRhcmdldD1pLmVsZW0sbj0w
OyhvPWkuaGFuZGxlcnNbbisrXSkmJiFhLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCk7
KWEucm5hbWVzcGFjZSYmIWEucm5hbWVzcGFjZS50ZXN0KG8ubmFtZXNwYWNlKXx8KGEuaGFuZGxl
T2JqPW8sYS5kYXRhPW8uZGF0YSx2b2lkIDAhPT0ocj0oKGRlLmV2ZW50LnNwZWNpYWxbby5vcmln
VHlwZV18fHt9KS5oYW5kbGV8fG8uaGFuZGxlcikuYXBwbHkoaS5lbGVtLHUpKSYmITE9PT0oYS5y
ZXN1bHQ9cikmJihhLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKSkpCityZXR1
cm4gYy5wb3N0RGlzcGF0Y2gmJmMucG9zdERpc3BhdGNoLmNhbGwodGhpcyxhKSxhLnJlc3VsdH19
LGhhbmRsZXJzOmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8scyxhPVtdLHU9dC5kZWxlZ2F0ZUNv
dW50LGw9ZS50YXJnZXQKK2lmKHUmJmwubm9kZVR5cGUmJiEoImNsaWNrIj09PWUudHlwZSYmZS5i
dXR0b24+PTEpKWZvcig7bCE9PXRoaXM7bD1sLnBhcmVudE5vZGV8fHRoaXMpaWYoMT09PWwubm9k
ZVR5cGUmJigiY2xpY2siIT09ZS50eXBlfHwhMCE9PWwuZGlzYWJsZWQpKXtmb3Iobz1bXSxzPXt9
LG49MDtuPHU7bisrKXI9dFtuXSxpPXIuc2VsZWN0b3IrIiAiLHZvaWQgMD09PXNbaV0mJihzW2ld
PXIubmVlZHNDb250ZXh0P2RlKGksdGhpcykuaW5kZXgobCk+LTE6ZGUuZmluZChpLHRoaXMsbnVs
bCxbbF0pLmxlbmd0aCksc1tpXSYmby5wdXNoKHIpCitvLmxlbmd0aCYmYS5wdXNoKHtlbGVtOmws
aGFuZGxlcnM6b30pfXJldHVybiBsPXRoaXMsdTx0Lmxlbmd0aCYmYS5wdXNoKHtlbGVtOmwsaGFu
ZGxlcnM6dC5zbGljZSh1KX0pLGF9LGFkZFByb3A6ZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5l
UHJvcGVydHkoZGUuRXZlbnQucHJvdG90eXBlLGUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxl
OiEwLGdldDpkZS5pc0Z1bmN0aW9uKHQpP2Z1bmN0aW9uKCl7aWYodGhpcy5vcmlnaW5hbEV2ZW50
KXJldHVybiB0KHRoaXMub3JpZ2luYWxFdmVudCl9OmZ1bmN0aW9uKCl7aWYodGhpcy5vcmlnaW5h
bEV2ZW50KXJldHVybiB0aGlzLm9yaWdpbmFsRXZlbnRbZV19LHNldDpmdW5jdGlvbih0KXtPYmpl
Y3QuZGVmaW5lUHJvcGVydHkodGhpcyxlLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3
cml0YWJsZTohMCx2YWx1ZTp0fSl9fSl9LGZpeDpmdW5jdGlvbihlKXtyZXR1cm4gZVtkZS5leHBh
bmRvXT9lOm5ldyBkZS5FdmVudChlKX0sc3BlY2lhbDp7bG9hZDp7bm9CdWJibGU6ITB9LGZvY3Vz
Ont0cmlnZ2VyOmZ1bmN0aW9uKCl7aWYodGhpcyE9PXgoKSYmdGhpcy5mb2N1cylyZXR1cm4gdGhp
cy5mb2N1cygpLCExfSxkZWxlZ2F0ZVR5cGU6ImZvY3VzaW4ifSxibHVyOnt0cmlnZ2VyOmZ1bmN0
aW9uKCl7aWYodGhpcz09PXgoKSYmdGhpcy5ibHVyKXJldHVybiB0aGlzLmJsdXIoKSwhMX0sZGVs
ZWdhdGVUeXBlOiJmb2N1c291dCJ9LGNsaWNrOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7aWYoImNoZWNr
Ym94Ij09PXRoaXMudHlwZSYmdGhpcy5jbGljayYmaSh0aGlzLCJpbnB1dCIpKXJldHVybiB0aGlz
LmNsaWNrKCksITF9LF9kZWZhdWx0OmZ1bmN0aW9uKGUpe3JldHVybiBpKGUudGFyZ2V0LCJhIil9
fSxiZWZvcmV1bmxvYWQ6e3Bvc3REaXNwYXRjaDpmdW5jdGlvbihlKXt2b2lkIDAhPT1lLnJlc3Vs
dCYmZS5vcmlnaW5hbEV2ZW50JiYoZS5vcmlnaW5hbEV2ZW50LnJldHVyblZhbHVlPWUucmVzdWx0
KX19fX0sZGUucmVtb3ZlRXZlbnQ9ZnVuY3Rpb24oZSx0LG4pe2UucmVtb3ZlRXZlbnRMaXN0ZW5l
ciYmZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbil9LGRlLkV2ZW50PWZ1bmN0aW9uKGUsdCl7aWYo
ISh0aGlzIGluc3RhbmNlb2YgZGUuRXZlbnQpKXJldHVybiBuZXcgZGUuRXZlbnQoZSx0KQorZSYm
ZS50eXBlPyh0aGlzLm9yaWdpbmFsRXZlbnQ9ZSx0aGlzLnR5cGU9ZS50eXBlLHRoaXMuaXNEZWZh
dWx0UHJldmVudGVkPWUuZGVmYXVsdFByZXZlbnRlZHx8dm9pZCAwPT09ZS5kZWZhdWx0UHJldmVu
dGVkJiYhMT09PWUucmV0dXJuVmFsdWU/dzpFLHRoaXMudGFyZ2V0PWUudGFyZ2V0JiYzPT09ZS50
YXJnZXQubm9kZVR5cGU/ZS50YXJnZXQucGFyZW50Tm9kZTplLnRhcmdldCx0aGlzLmN1cnJlbnRU
YXJnZXQ9ZS5jdXJyZW50VGFyZ2V0LHRoaXMucmVsYXRlZFRhcmdldD1lLnJlbGF0ZWRUYXJnZXQp
OnRoaXMudHlwZT1lLHQmJmRlLmV4dGVuZCh0aGlzLHQpLHRoaXMudGltZVN0YW1wPWUmJmUudGlt
ZVN0YW1wfHxkZS5ub3coKSx0aGlzW2RlLmV4cGFuZG9dPSEwfSxkZS5FdmVudC5wcm90b3R5cGU9
e2NvbnN0cnVjdG9yOmRlLkV2ZW50LGlzRGVmYXVsdFByZXZlbnRlZDpFLGlzUHJvcGFnYXRpb25T
dG9wcGVkOkUsaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6RSxpc1NpbXVsYXRlZDohMSxw
cmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudAordGhpcy5p
c0RlZmF1bHRQcmV2ZW50ZWQ9dyxlJiYhdGhpcy5pc1NpbXVsYXRlZCYmZS5wcmV2ZW50RGVmYXVs
dCgpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQK
K3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9dyxlJiYhdGhpcy5pc1NpbXVsYXRlZCYmZS5zdG9w
UHJvcGFnYXRpb24oKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9
dGhpcy5vcmlnaW5hbEV2ZW50Cit0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkPXcs
ZSYmIXRoaXMuaXNTaW11bGF0ZWQmJmUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdGhpcy5z
dG9wUHJvcGFnYXRpb24oKX19LGRlLmVhY2goe2FsdEtleTohMCxidWJibGVzOiEwLGNhbmNlbGFi
bGU6ITAsY2hhbmdlZFRvdWNoZXM6ITAsY3RybEtleTohMCxkZXRhaWw6ITAsZXZlbnRQaGFzZToh
MCxtZXRhS2V5OiEwLHBhZ2VYOiEwLHBhZ2VZOiEwLHNoaWZ0S2V5OiEwLHZpZXc6ITAsY2hhcjoh
MCxjaGFyQ29kZTohMCxrZXk6ITAsa2V5Q29kZTohMCxidXR0b246ITAsYnV0dG9uczohMCxjbGll
bnRYOiEwLGNsaWVudFk6ITAsb2Zmc2V0WDohMCxvZmZzZXRZOiEwLHBvaW50ZXJJZDohMCxwb2lu
dGVyVHlwZTohMCxzY3JlZW5YOiEwLHNjcmVlblk6ITAsdGFyZ2V0VG91Y2hlczohMCx0b0VsZW1l
bnQ6ITAsdG91Y2hlczohMCx3aGljaDpmdW5jdGlvbihlKXt2YXIgdD1lLmJ1dHRvbgorcmV0dXJu
IG51bGw9PWUud2hpY2gmJlllLnRlc3QoZS50eXBlKT9udWxsIT1lLmNoYXJDb2RlP2UuY2hhckNv
ZGU6ZS5rZXlDb2RlOiFlLndoaWNoJiZ2b2lkIDAhPT10JiZKZS50ZXN0KGUudHlwZSk/MSZ0PzE6
MiZ0PzM6NCZ0PzI6MDplLndoaWNofX0sZGUuZXZlbnQuYWRkUHJvcCksZGUuZWFjaCh7bW91c2Vl
bnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCIscG9pbnRlcmVudGVyOiJwb2lu
dGVyb3ZlciIscG9pbnRlcmxlYXZlOiJwb2ludGVyb3V0In0sZnVuY3Rpb24oZSx0KXtkZS5ldmVu
dC5zcGVjaWFsW2VdPXtkZWxlZ2F0ZVR5cGU6dCxiaW5kVHlwZTp0LGhhbmRsZTpmdW5jdGlvbihl
KXt2YXIgbixyPXRoaXMsaT1lLnJlbGF0ZWRUYXJnZXQsbz1lLmhhbmRsZU9iagorcmV0dXJuIGkm
JihpPT09cnx8ZGUuY29udGFpbnMocixpKSl8fChlLnR5cGU9by5vcmlnVHlwZSxuPW8uaGFuZGxl
ci5hcHBseSh0aGlzLGFyZ3VtZW50cyksZS50eXBlPXQpLG59fX0pLGRlLmZuLmV4dGVuZCh7b246
ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIEModGhpcyxlLHQsbixyKX0sb25lOmZ1bmN0aW9uKGUs
dCxuLHIpe3JldHVybiBDKHRoaXMsZSx0LG4sciwxKX0sb2ZmOmZ1bmN0aW9uKGUsdCxuKXt2YXIg
cixpCitpZihlJiZlLnByZXZlbnREZWZhdWx0JiZlLmhhbmRsZU9iailyZXR1cm4gcj1lLmhhbmRs
ZU9iaixkZShlLmRlbGVnYXRlVGFyZ2V0KS5vZmYoci5uYW1lc3BhY2U/ci5vcmlnVHlwZSsiLiIr
ci5uYW1lc3BhY2U6ci5vcmlnVHlwZSxyLnNlbGVjdG9yLHIuaGFuZGxlciksdGhpcworaWYoIm9i
amVjdCI9PXR5cGVvZiBlKXtmb3IoaSBpbiBlKXRoaXMub2ZmKGksdCxlW2ldKQorcmV0dXJuIHRo
aXN9cmV0dXJuITEhPT10JiYiZnVuY3Rpb24iIT10eXBlb2YgdHx8KG49dCx0PXZvaWQgMCksITE9
PT1uJiYobj1FKSx0aGlzLmVhY2goZnVuY3Rpb24oKXtkZS5ldmVudC5yZW1vdmUodGhpcyxlLG4s
dCl9KX19KQordmFyIFplPS88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8
bWV0YXxwYXJhbSkoKFthLXpdW15cL1wwPlx4MjBcdFxyXG5cZl0qKVtePl0qKVwvPi9naSxldD0v
PHNjcmlwdHw8c3R5bGV8PGxpbmsvaSx0dD0vY2hlY2tlZFxzKig/OltePV18PVxzKi5jaGVja2Vk
LikvaSxudD0vXnRydWVcLyguKikvLHJ0PS9eXHMqPCEoPzpcW0NEQVRBXFt8LS0pfCg/OlxdXF18
LS0pPlxzKiQvZworZGUuZXh0ZW5kKHtodG1sUHJlZmlsdGVyOmZ1bmN0aW9uKGUpe3JldHVybiBl
LnJlcGxhY2UoWmUsIjwkMT48LyQyPiIpfSxjbG9uZTpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxv
LHMsYT1lLmNsb25lTm9kZSghMCksdT1kZS5jb250YWlucyhlLm93bmVyRG9jdW1lbnQsZSkKK2lm
KCEoaGUubm9DbG9uZUNoZWNrZWR8fDEhPT1lLm5vZGVUeXBlJiYxMSE9PWUubm9kZVR5cGV8fGRl
LmlzWE1MRG9jKGUpKSlmb3Iocz12KGEpLG89dihlKSxyPTAsaT1vLmxlbmd0aDtyPGk7cisrKVIo
b1tyXSxzW3JdKQoraWYodClpZihuKWZvcihvPW98fHYoZSkscz1zfHx2KGEpLHI9MCxpPW8ubGVu
Z3RoO3I8aTtyKyspUyhvW3JdLHNbcl0pCitlbHNlIFMoZSxhKQorcmV0dXJuIHM9dihhLCJzY3Jp
cHQiKSxzLmxlbmd0aD4wJiZiKHMsIXUmJnYoZSwic2NyaXB0IikpLGF9LGNsZWFuRGF0YTpmdW5j
dGlvbihlKXtmb3IodmFyIHQsbixyLGk9ZGUuZXZlbnQuc3BlY2lhbCxvPTA7dm9pZCAwIT09KG49
ZVtvXSk7bysrKWlmKGplKG4pKXtpZih0PW5bRGUuZXhwYW5kb10pe2lmKHQuZXZlbnRzKWZvcihy
IGluIHQuZXZlbnRzKWlbcl0/ZGUuZXZlbnQucmVtb3ZlKG4scik6ZGUucmVtb3ZlRXZlbnQobixy
LHQuaGFuZGxlKQorbltEZS5leHBhbmRvXT12b2lkIDB9bltMZS5leHBhbmRvXSYmKG5bTGUuZXhw
YW5kb109dm9pZCAwKX19fSksZGUuZm4uZXh0ZW5kKHtkZXRhY2g6ZnVuY3Rpb24oZSl7cmV0dXJu
IE4odGhpcyxlLCEwKX0scmVtb3ZlOmZ1bmN0aW9uKGUpe3JldHVybiBOKHRoaXMsZSl9LHRleHQ6
ZnVuY3Rpb24oZSl7cmV0dXJuIFBlKHRoaXMsZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWU/
ZGUudGV4dCh0aGlzKTp0aGlzLmVtcHR5KCkuZWFjaChmdW5jdGlvbigpezEhPT10aGlzLm5vZGVU
eXBlJiYxMSE9PXRoaXMubm9kZVR5cGUmJjkhPT10aGlzLm5vZGVUeXBlfHwodGhpcy50ZXh0Q29u
dGVudD1lKX0pfSxudWxsLGUsYXJndW1lbnRzLmxlbmd0aCl9LGFwcGVuZDpmdW5jdGlvbigpe3Jl
dHVybiBrKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpe2lmKDE9PT10aGlzLm5vZGVUeXBlfHwx
MT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKXtPKHRoaXMsZSkuYXBwZW5kQ2hp
bGQoZSl9fSl9LHByZXBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLGFyZ3VtZW50cyxmdW5j
dGlvbihlKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBlfHw5PT09dGhp
cy5ub2RlVHlwZSl7dmFyIHQ9Tyh0aGlzLGUpCit0Lmluc2VydEJlZm9yZShlLHQuZmlyc3RDaGls
ZCl9fSl9LGJlZm9yZTpmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9u
KGUpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHRoaXMp
fSl9LGFmdGVyOmZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7
dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0
U2libGluZyl9KX0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIGUsdD0wO251bGwhPShlPXRoaXNb
dF0pO3QrKykxPT09ZS5ub2RlVHlwZSYmKGRlLmNsZWFuRGF0YSh2KGUsITEpKSxlLnRleHRDb250
ZW50PSIiKQorcmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9bnVsbCE9
ZSYmZSx0PW51bGw9PXQ/ZTp0LHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGRlLmNsb25lKHRo
aXMsZSx0KX0pfSxodG1sOmZ1bmN0aW9uKGUpe3JldHVybiBQZSh0aGlzLGZ1bmN0aW9uKGUpe3Zh
ciB0PXRoaXNbMF18fHt9LG49MCxyPXRoaXMubGVuZ3RoCitpZih2b2lkIDA9PT1lJiYxPT09dC5u
b2RlVHlwZSlyZXR1cm4gdC5pbm5lckhUTUwKK2lmKCJzdHJpbmciPT10eXBlb2YgZSYmIWV0LnRl
c3QoZSkmJiFHZVsoV2UuZXhlYyhlKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKV0pe2U9ZGUu
aHRtbFByZWZpbHRlcihlKQordHJ5e2Zvcig7bjxyO24rKyl0PXRoaXNbbl18fHt9LDE9PT10Lm5v
ZGVUeXBlJiYoZGUuY2xlYW5EYXRhKHYodCwhMSkpLHQuaW5uZXJIVE1MPWUpCit0PTB9Y2F0Y2go
ZSl7fX10JiZ0aGlzLmVtcHR5KCkuYXBwZW5kKGUpfSxudWxsLGUsYXJndW1lbnRzLmxlbmd0aCl9
LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKCl7dmFyIGU9W10KK3JldHVybiBrKHRoaXMsYXJndW1lbnRz
LGZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMucGFyZW50Tm9kZQorZGUuaW5BcnJheSh0aGlzLGUpPDAm
JihkZS5jbGVhbkRhdGEodih0aGlzKSksbiYmbi5yZXBsYWNlQ2hpbGQodCx0aGlzKSl9LGUpfX0p
LGRlLmVhY2goe2FwcGVuZFRvOiJhcHBlbmQiLHByZXBlbmRUbzoicHJlcGVuZCIsaW5zZXJ0QmVm
b3JlOiJiZWZvcmUiLGluc2VydEFmdGVyOiJhZnRlciIscmVwbGFjZUFsbDoicmVwbGFjZVdpdGgi
fSxmdW5jdGlvbihlLHQpe2RlLmZuW2VdPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbixyPVtdLGk9ZGUo
ZSksbz1pLmxlbmd0aC0xLHM9MDtzPD1vO3MrKyluPXM9PT1vP3RoaXM6dGhpcy5jbG9uZSghMCks
ZGUoaVtzXSlbdF0obiksc2UuYXBwbHkocixuLmdldCgpKQorcmV0dXJuIHRoaXMucHVzaFN0YWNr
KHIpfX0pCit2YXIgaXQ9L15tYXJnaW4vLG90PW5ldyBSZWdFeHAoIl4oIitGZSsiKSg/IXB4KVth
LXolXSskIiwiaSIpLHN0PWZ1bmN0aW9uKHQpe3ZhciBuPXQub3duZXJEb2N1bWVudC5kZWZhdWx0
VmlldworcmV0dXJuIG4mJm4ub3BlbmVyfHwobj1lKSxuLmdldENvbXB1dGVkU3R5bGUodCl9Oyhm
dW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtpZihhKXthLnN0eWxlLmNzc1RleHQ9ImJveC1zaXppbmc6
Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO21hcmdpbjphdXRvO2Jv
cmRlcjoxcHg7cGFkZGluZzoxcHg7dG9wOjElO3dpZHRoOjUwJSIsYS5pbm5lckhUTUw9IiIsUWUu
YXBwZW5kQ2hpbGQocykKK3ZhciB0PWUuZ2V0Q29tcHV0ZWRTdHlsZShhKQorbj0iMSUiIT09dC50
b3Asbz0iMnB4Ij09PXQubWFyZ2luTGVmdCxyPSI0cHgiPT09dC53aWR0aCxhLnN0eWxlLm1hcmdp
blJpZ2h0PSI1MCUiLGk9IjRweCI9PT10Lm1hcmdpblJpZ2h0LFFlLnJlbW92ZUNoaWxkKHMpLGE9
bnVsbH19dmFyIG4scixpLG8scz1uZS5jcmVhdGVFbGVtZW50KCJkaXYiKSxhPW5lLmNyZWF0ZUVs
ZW1lbnQoImRpdiIpCithLnN0eWxlJiYoYS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD0iY29udGVudC1i
b3giLGEuY2xvbmVOb2RlKCEwKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD0iIixoZS5jbGVhckNsb25l
U3R5bGU9ImNvbnRlbnQtYm94Ij09PWEuc3R5bGUuYmFja2dyb3VuZENsaXAscy5zdHlsZS5jc3NU
ZXh0PSJib3JkZXI6MDt3aWR0aDo4cHg7aGVpZ2h0OjA7dG9wOjA7bGVmdDotOTk5OXB4O3BhZGRp
bmc6MDttYXJnaW4tdG9wOjFweDtwb3NpdGlvbjphYnNvbHV0ZSIscy5hcHBlbmRDaGlsZChhKSxk
ZS5leHRlbmQoaGUse3BpeGVsUG9zaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdCgpLG59LGJveFNp
emluZ1JlbGlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHQoKSxyfSxwaXhlbE1hcmdpblJpZ2h0OmZ1
bmN0aW9uKCl7cmV0dXJuIHQoKSxpfSxyZWxpYWJsZU1hcmdpbkxlZnQ6ZnVuY3Rpb24oKXtyZXR1
cm4gdCgpLG99fSkpfSkoKQordmFyIGF0PS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyx1dD0v
Xi0tLyxsdD17cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4iLGRpc3BsYXk6
ImJsb2NrIn0sY3Q9e2xldHRlclNwYWNpbmc6IjAiLGZvbnRXZWlnaHQ6IjQwMCJ9LHB0PVsiV2Vi
a2l0IiwiTW96IiwibXMiXSxmdD1uZS5jcmVhdGVFbGVtZW50KCJkaXYiKS5zdHlsZQorZGUuZXh0
ZW5kKHtjc3NIb29rczp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9uKGUsdCl7aWYodCl7dmFyIG49UChl
LCJvcGFjaXR5IikKK3JldHVybiIiPT09bj8iMSI6bn19fX0sY3NzTnVtYmVyOnthbmltYXRpb25J
dGVyYXRpb25Db3VudDohMCxjb2x1bW5Db3VudDohMCxmaWxsT3BhY2l0eTohMCxmbGV4R3Jvdzoh
MCxmbGV4U2hyaW5rOiEwLGZvbnRXZWlnaHQ6ITAsbGluZUhlaWdodDohMCxvcGFjaXR5OiEwLG9y
ZGVyOiEwLG9ycGhhbnM6ITAsd2lkb3dzOiEwLHpJbmRleDohMCx6b29tOiEwfSxjc3NQcm9wczp7
ZmxvYXQ6ImNzc0Zsb2F0In0sc3R5bGU6ZnVuY3Rpb24oZSx0LG4scil7aWYoZSYmMyE9PWUubm9k
ZVR5cGUmJjghPT1lLm5vZGVUeXBlJiZlLnN0eWxlKXt2YXIgaSxvLHMsYT1kZS5jYW1lbENhc2Uo
dCksdT11dC50ZXN0KHQpLGw9ZS5zdHlsZQoraWYodXx8KHQ9TChhKSkscz1kZS5jc3NIb29rc1t0
XXx8ZGUuY3NzSG9va3NbYV0sdm9pZCAwPT09bilyZXR1cm4gcyYmImdldCJpbiBzJiZ2b2lkIDAh
PT0oaT1zLmdldChlLCExLHIpKT9pOmxbdF0KK289dHlwZW9mIG4sInN0cmluZyI9PT1vJiYoaT16
ZS5leGVjKG4pKSYmaVsxXSYmKG49bShlLHQsaSksbz0ibnVtYmVyIiksbnVsbCE9biYmbj09PW4m
JigibnVtYmVyIj09PW8mJihuKz1pJiZpWzNdfHwoZGUuY3NzTnVtYmVyW2FdPyIiOiJweCIpKSxo
ZS5jbGVhckNsb25lU3R5bGV8fCIiIT09bnx8MCE9PXQuaW5kZXhPZigiYmFja2dyb3VuZCIpfHwo
bFt0XT0iaW5oZXJpdCIpLHMmJiJzZXQiaW4gcyYmdm9pZCAwPT09KG49cy5zZXQoZSxuLHIpKXx8
KHU/bC5zZXRQcm9wZXJ0eSh0LG4pOmxbdF09bikpfX0sY3NzOmZ1bmN0aW9uKGUsdCxuLHIpe3Zh
ciBpLG8scyxhPWRlLmNhbWVsQ2FzZSh0KQorcmV0dXJuIHV0LnRlc3QodCl8fCh0PUwoYSkpLHM9
ZGUuY3NzSG9va3NbdF18fGRlLmNzc0hvb2tzW2FdLHMmJiJnZXQiaW4gcyYmKGk9cy5nZXQoZSwh
MCxuKSksdm9pZCAwPT09aSYmKGk9UChlLHQscikpLCJub3JtYWwiPT09aSYmdCBpbiBjdCYmKGk9
Y3RbdF0pLCIiPT09bnx8bj8obz1wYXJzZUZsb2F0KGkpLCEwPT09bnx8aXNGaW5pdGUobyk/b3x8
MDppKTppfX0pLGRlLmVhY2goWyJoZWlnaHQiLCJ3aWR0aCJdLGZ1bmN0aW9uKGUsdCl7ZGUuY3Nz
SG9va3NbdF09e2dldDpmdW5jdGlvbihlLG4scil7aWYobilyZXR1cm4hYXQudGVzdChkZS5jc3Mo
ZSwiZGlzcGxheSIpKXx8ZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCYmZS5nZXRCb3VuZGluZ0Ns
aWVudFJlY3QoKS53aWR0aD9GKGUsdCxyKTpxZShlLGx0LGZ1bmN0aW9uKCl7cmV0dXJuIEYoZSx0
LHIpfSl9LHNldDpmdW5jdGlvbihlLG4scil7dmFyIGksbz1yJiZzdChlKSxzPXImJk0oZSx0LHIs
ImJvcmRlci1ib3giPT09ZGUuY3NzKGUsImJveFNpemluZyIsITEsbyksbykKK3JldHVybiBzJiYo
aT16ZS5leGVjKG4pKSYmInB4IiE9PShpWzNdfHwicHgiKSYmKGUuc3R5bGVbdF09bixuPWRlLmNz
cyhlLHQpKSxJKGUsbixzKX19fSksZGUuY3NzSG9va3MubWFyZ2luTGVmdD1qKGhlLnJlbGlhYmxl
TWFyZ2luTGVmdCxmdW5jdGlvbihlLHQpe2lmKHQpcmV0dXJuKHBhcnNlRmxvYXQoUChlLCJtYXJn
aW5MZWZ0IikpfHxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQtcWUoZSx7bWFyZ2luTGVm
dDowfSxmdW5jdGlvbigpe3JldHVybiBlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnR9KSkr
InB4In0pLGRlLmVhY2goe21hcmdpbjoiIixwYWRkaW5nOiIiLGJvcmRlcjoiV2lkdGgifSxmdW5j
dGlvbihlLHQpe2RlLmNzc0hvb2tzW2UrdF09e2V4cGFuZDpmdW5jdGlvbihuKXtmb3IodmFyIHI9
MCxpPXt9LG89InN0cmluZyI9PXR5cGVvZiBuP24uc3BsaXQoIiAiKTpbbl07cjw0O3IrKylpW2Ur
VWVbcl0rdF09b1tyXXx8b1tyLTJdfHxvWzBdCityZXR1cm4gaX19LGl0LnRlc3QoZSl8fChkZS5j
c3NIb29rc1tlK3RdLnNldD1JKX0pLGRlLmZuLmV4dGVuZCh7Y3NzOmZ1bmN0aW9uKGUsdCl7cmV0
dXJuIFBlKHRoaXMsZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbz17fSxzPTAKK2lmKEFycmF5Lmlz
QXJyYXkodCkpe2ZvcihyPXN0KGUpLGk9dC5sZW5ndGg7czxpO3MrKylvW3Rbc11dPWRlLmNzcyhl
LHRbc10sITEscikKK3JldHVybiBvfXJldHVybiB2b2lkIDAhPT1uP2RlLnN0eWxlKGUsdCxuKTpk
ZS5jc3MoZSx0KX0sZSx0LGFyZ3VtZW50cy5sZW5ndGg+MSl9fSksZGUuVHdlZW49eix6LnByb3Rv
dHlwZT17Y29uc3RydWN0b3I6eixpbml0OmZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt0aGlzLmVsZW09
ZSx0aGlzLnByb3A9bix0aGlzLmVhc2luZz1pfHxkZS5lYXNpbmcuX2RlZmF1bHQsdGhpcy5vcHRp
b25zPXQsdGhpcy5zdGFydD10aGlzLm5vdz10aGlzLmN1cigpLHRoaXMuZW5kPXIsdGhpcy51bml0
PW98fChkZS5jc3NOdW1iZXJbbl0/IiI6InB4Iil9LGN1cjpmdW5jdGlvbigpe3ZhciBlPXoucHJv
cEhvb2tzW3RoaXMucHJvcF0KK3JldHVybiBlJiZlLmdldD9lLmdldCh0aGlzKTp6LnByb3BIb29r
cy5fZGVmYXVsdC5nZXQodGhpcyl9LHJ1bjpmdW5jdGlvbihlKXt2YXIgdCxuPXoucHJvcEhvb2tz
W3RoaXMucHJvcF0KK3JldHVybiB0aGlzLm9wdGlvbnMuZHVyYXRpb24/dGhpcy5wb3M9dD1kZS5l
YXNpbmdbdGhpcy5lYXNpbmddKGUsdGhpcy5vcHRpb25zLmR1cmF0aW9uKmUsMCwxLHRoaXMub3B0
aW9ucy5kdXJhdGlvbik6dGhpcy5wb3M9dD1lLHRoaXMubm93PSh0aGlzLmVuZC10aGlzLnN0YXJ0
KSp0K3RoaXMuc3RhcnQsdGhpcy5vcHRpb25zLnN0ZXAmJnRoaXMub3B0aW9ucy5zdGVwLmNhbGwo
dGhpcy5lbGVtLHRoaXMubm93LHRoaXMpLG4mJm4uc2V0P24uc2V0KHRoaXMpOnoucHJvcEhvb2tz
Ll9kZWZhdWx0LnNldCh0aGlzKSx0aGlzfX0sei5wcm90b3R5cGUuaW5pdC5wcm90b3R5cGU9ei5w
cm90b3R5cGUsei5wcm9wSG9va3M9e19kZWZhdWx0OntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQKK3Jl
dHVybiAxIT09ZS5lbGVtLm5vZGVUeXBlfHxudWxsIT1lLmVsZW1bZS5wcm9wXSYmbnVsbD09ZS5l
bGVtLnN0eWxlW2UucHJvcF0/ZS5lbGVtW2UucHJvcF06KHQ9ZGUuY3NzKGUuZWxlbSxlLnByb3As
IiIpLHQmJiJhdXRvIiE9PXQ/dDowKX0sc2V0OmZ1bmN0aW9uKGUpe2RlLmZ4LnN0ZXBbZS5wcm9w
XT9kZS5meC5zdGVwW2UucHJvcF0oZSk6MSE9PWUuZWxlbS5ub2RlVHlwZXx8bnVsbD09ZS5lbGVt
LnN0eWxlW2RlLmNzc1Byb3BzW2UucHJvcF1dJiYhZGUuY3NzSG9va3NbZS5wcm9wXT9lLmVsZW1b
ZS5wcm9wXT1lLm5vdzpkZS5zdHlsZShlLmVsZW0sZS5wcm9wLGUubm93K2UudW5pdCl9fX0sei5w
cm9wSG9va3Muc2Nyb2xsVG9wPXoucHJvcEhvb2tzLnNjcm9sbExlZnQ9e3NldDpmdW5jdGlvbihl
KXtlLmVsZW0ubm9kZVR5cGUmJmUuZWxlbS5wYXJlbnROb2RlJiYoZS5lbGVtW2UucHJvcF09ZS5u
b3cpfX0sZGUuZWFzaW5nPXtsaW5lYXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHN3aW5nOmZ1bmN0
aW9uKGUpe3JldHVybi41LU1hdGguY29zKGUqTWF0aC5QSSkvMn0sX2RlZmF1bHQ6InN3aW5nIn0s
ZGUuZng9ei5wcm90b3R5cGUuaW5pdCxkZS5meC5zdGVwPXt9Cit2YXIgaHQsZHQsbXQ9L14oPzp0
b2dnbGV8c2hvd3xoaWRlKSQvLGd0PS9xdWV1ZUhvb2tzJC8KK2RlLkFuaW1hdGlvbj1kZS5leHRl
bmQoJCx7dHdlZW5lcnM6eyIqIjpbZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNyZWF0ZVR3ZWVu
KGUsdCkKK3JldHVybiBtKG4uZWxlbSxlLHplLmV4ZWModCksbiksbn1dfSx0d2VlbmVyOmZ1bmN0
aW9uKGUsdCl7ZGUuaXNGdW5jdGlvbihlKT8odD1lLGU9WyIqIl0pOmU9ZS5tYXRjaChSZSkKK2Zv
cih2YXIgbixyPTAsaT1lLmxlbmd0aDtyPGk7cisrKW49ZVtyXSwkLnR3ZWVuZXJzW25dPSQudHdl
ZW5lcnNbbl18fFtdLCQudHdlZW5lcnNbbl0udW5zaGlmdCh0KX0scHJlZmlsdGVyczpbVl0scHJl
ZmlsdGVyOmZ1bmN0aW9uKGUsdCl7dD8kLnByZWZpbHRlcnMudW5zaGlmdChlKTokLnByZWZpbHRl
cnMucHVzaChlKX19KSxkZS5zcGVlZD1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZSYmIm9iamVjdCI9
PXR5cGVvZiBlP2RlLmV4dGVuZCh7fSxlKTp7Y29tcGxldGU6bnx8IW4mJnR8fGRlLmlzRnVuY3Rp
b24oZSkmJmUsZHVyYXRpb246ZSxlYXNpbmc6biYmdHx8dCYmIWRlLmlzRnVuY3Rpb24odCkmJnR9
CityZXR1cm4gZGUuZngub2ZmP3IuZHVyYXRpb249MDoibnVtYmVyIiE9dHlwZW9mIHIuZHVyYXRp
b24mJihyLmR1cmF0aW9uIGluIGRlLmZ4LnNwZWVkcz9yLmR1cmF0aW9uPWRlLmZ4LnNwZWVkc1ty
LmR1cmF0aW9uXTpyLmR1cmF0aW9uPWRlLmZ4LnNwZWVkcy5fZGVmYXVsdCksbnVsbCE9ci5xdWV1
ZSYmITAhPT1yLnF1ZXVlfHwoci5xdWV1ZT0iZngiKSxyLm9sZD1yLmNvbXBsZXRlLHIuY29tcGxl
dGU9ZnVuY3Rpb24oKXtkZS5pc0Z1bmN0aW9uKHIub2xkKSYmci5vbGQuY2FsbCh0aGlzKSxyLnF1
ZXVlJiZkZS5kZXF1ZXVlKHRoaXMsci5xdWV1ZSl9LHJ9LGRlLmZuLmV4dGVuZCh7ZmFkZVRvOmZ1
bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLmZpbHRlcihCZSkuY3NzKCJvcGFjaXR5IiwwKS5z
aG93KCkuZW5kKCkuYW5pbWF0ZSh7b3BhY2l0eTp0fSxlLG4scil9LGFuaW1hdGU6ZnVuY3Rpb24o
ZSx0LG4scil7dmFyIGk9ZGUuaXNFbXB0eU9iamVjdChlKSxvPWRlLnNwZWVkKHQsbixyKSxzPWZ1
bmN0aW9uKCl7dmFyIHQ9JCh0aGlzLGRlLmV4dGVuZCh7fSxlKSxvKTsoaXx8RGUuZ2V0KHRoaXMs
ImZpbmlzaCIpKSYmdC5zdG9wKCEwKX0KK3JldHVybiBzLmZpbmlzaD1zLGl8fCExPT09by5xdWV1
ZT90aGlzLmVhY2gocyk6dGhpcy5xdWV1ZShvLnF1ZXVlLHMpfSxzdG9wOmZ1bmN0aW9uKGUsdCxu
KXt2YXIgcj1mdW5jdGlvbihlKXt2YXIgdD1lLnN0b3AKK2RlbGV0ZSBlLnN0b3AsdChuKX0KK3Jl
dHVybiJzdHJpbmciIT10eXBlb2YgZSYmKG49dCx0PWUsZT12b2lkIDApLHQmJiExIT09ZSYmdGhp
cy5xdWV1ZShlfHwiZngiLFtdKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD0hMCxpPW51bGwh
PWUmJmUrInF1ZXVlSG9va3MiLG89ZGUudGltZXJzLHM9RGUuZ2V0KHRoaXMpCitpZihpKXNbaV0m
JnNbaV0uc3RvcCYmcihzW2ldKQorZWxzZSBmb3IoaSBpbiBzKXNbaV0mJnNbaV0uc3RvcCYmZ3Qu
dGVzdChpKSYmcihzW2ldKQorZm9yKGk9by5sZW5ndGg7aS0tOylvW2ldLmVsZW0hPT10aGlzfHxu
dWxsIT1lJiZvW2ldLnF1ZXVlIT09ZXx8KG9baV0uYW5pbS5zdG9wKG4pLHQ9ITEsby5zcGxpY2Uo
aSwxKSkKKyF0JiZufHxkZS5kZXF1ZXVlKHRoaXMsZSl9KX0sZmluaXNoOmZ1bmN0aW9uKGUpe3Jl
dHVybiExIT09ZSYmKGU9ZXx8ImZ4IiksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQsbj1EZS5n
ZXQodGhpcykscj1uW2UrInF1ZXVlIl0saT1uW2UrInF1ZXVlSG9va3MiXSxvPWRlLnRpbWVycyxz
PXI/ci5sZW5ndGg6MAorZm9yKG4uZmluaXNoPSEwLGRlLnF1ZXVlKHRoaXMsZSxbXSksaSYmaS5z
dG9wJiZpLnN0b3AuY2FsbCh0aGlzLCEwKSx0PW8ubGVuZ3RoO3QtLTspb1t0XS5lbGVtPT09dGhp
cyYmb1t0XS5xdWV1ZT09PWUmJihvW3RdLmFuaW0uc3RvcCghMCksby5zcGxpY2UodCwxKSkKK2Zv
cih0PTA7dDxzO3QrKylyW3RdJiZyW3RdLmZpbmlzaCYmclt0XS5maW5pc2guY2FsbCh0aGlzKQor
ZGVsZXRlIG4uZmluaXNofSl9fSksZGUuZWFjaChbInRvZ2dsZSIsInNob3ciLCJoaWRlIl0sZnVu
Y3Rpb24oZSx0KXt2YXIgbj1kZS5mblt0XQorZGUuZm5bdF09ZnVuY3Rpb24oZSxyLGkpe3JldHVy
biBudWxsPT1lfHwiYm9vbGVhbiI9PXR5cGVvZiBlP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOnRo
aXMuYW5pbWF0ZShxKHQsITApLGUscixpKX19KSxkZS5lYWNoKHtzbGlkZURvd246cSgic2hvdyIp
LHNsaWRlVXA6cSgiaGlkZSIpLHNsaWRlVG9nZ2xlOnEoInRvZ2dsZSIpLGZhZGVJbjp7b3BhY2l0
eToic2hvdyJ9LGZhZGVPdXQ6e29wYWNpdHk6ImhpZGUifSxmYWRlVG9nZ2xlOntvcGFjaXR5OiJ0
b2dnbGUifX0sZnVuY3Rpb24oZSx0KXtkZS5mbltlXT1mdW5jdGlvbihlLG4scil7cmV0dXJuIHRo
aXMuYW5pbWF0ZSh0LGUsbixyKX19KSxkZS50aW1lcnM9W10sZGUuZngudGljaz1mdW5jdGlvbigp
e3ZhciBlLHQ9MCxuPWRlLnRpbWVycworZm9yKGh0PWRlLm5vdygpO3Q8bi5sZW5ndGg7dCsrKShl
PW5bdF0pKCl8fG5bdF0hPT1lfHxuLnNwbGljZSh0LS0sMSkKK24ubGVuZ3RofHxkZS5meC5zdG9w
KCksaHQ9dm9pZCAwfSxkZS5meC50aW1lcj1mdW5jdGlvbihlKXtkZS50aW1lcnMucHVzaChlKSxk
ZS5meC5zdGFydCgpfSxkZS5meC5pbnRlcnZhbD0xMyxkZS5meC5zdGFydD1mdW5jdGlvbigpe2R0
fHwoZHQ9ITAsVSgpKX0sZGUuZnguc3RvcD1mdW5jdGlvbigpe2R0PW51bGx9LGRlLmZ4LnNwZWVk
cz17c2xvdzo2MDAsZmFzdDoyMDAsX2RlZmF1bHQ6NDAwfSxkZS5mbi5kZWxheT1mdW5jdGlvbih0
LG4pe3JldHVybiB0PWRlLmZ4P2RlLmZ4LnNwZWVkc1t0XXx8dDp0LG49bnx8ImZ4Iix0aGlzLnF1
ZXVlKG4sZnVuY3Rpb24obixyKXt2YXIgaT1lLnNldFRpbWVvdXQobix0KQorci5zdG9wPWZ1bmN0
aW9uKCl7ZS5jbGVhclRpbWVvdXQoaSl9fSl9LGZ1bmN0aW9uKCl7dmFyIGU9bmUuY3JlYXRlRWxl
bWVudCgiaW5wdXQiKSx0PW5lLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLG49dC5hcHBlbmRDaGls
ZChuZS5jcmVhdGVFbGVtZW50KCJvcHRpb24iKSkKK2UudHlwZT0iY2hlY2tib3giLGhlLmNoZWNr
T249IiIhPT1lLnZhbHVlLGhlLm9wdFNlbGVjdGVkPW4uc2VsZWN0ZWQsZT1uZS5jcmVhdGVFbGVt
ZW50KCJpbnB1dCIpLGUudmFsdWU9InQiLGUudHlwZT0icmFkaW8iLGhlLnJhZGlvVmFsdWU9InQi
PT09ZS52YWx1ZX0oKQordmFyIHl0LHZ0PWRlLmV4cHIuYXR0ckhhbmRsZQorZGUuZm4uZXh0ZW5k
KHthdHRyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFBlKHRoaXMsZGUuYXR0cixlLHQsYXJndW1lbnRz
Lmxlbmd0aD4xKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0
aW9uKCl7ZGUucmVtb3ZlQXR0cih0aGlzLGUpfSl9fSksZGUuZXh0ZW5kKHthdHRyOmZ1bmN0aW9u
KGUsdCxuKXt2YXIgcixpLG89ZS5ub2RlVHlwZQoraWYoMyE9PW8mJjghPT1vJiYyIT09bylyZXR1
cm4gdm9pZCAwPT09ZS5nZXRBdHRyaWJ1dGU/ZGUucHJvcChlLHQsbik6KDE9PT1vJiZkZS5pc1hN
TERvYyhlKXx8KGk9ZGUuYXR0ckhvb2tzW3QudG9Mb3dlckNhc2UoKV18fChkZS5leHByLm1hdGNo
LmJvb2wudGVzdCh0KT95dDp2b2lkIDApKSx2b2lkIDAhPT1uP251bGw9PT1uP3ZvaWQgZGUucmVt
b3ZlQXR0cihlLHQpOmkmJiJzZXQiaW4gaSYmdm9pZCAwIT09KHI9aS5zZXQoZSxuLHQpKT9yOihl
LnNldEF0dHJpYnV0ZSh0LG4rIiIpLG4pOmkmJiJnZXQiaW4gaSYmbnVsbCE9PShyPWkuZ2V0KGUs
dCkpP3I6KHI9ZGUuZmluZC5hdHRyKGUsdCksbnVsbD09cj92b2lkIDA6cikpfSxhdHRySG9va3M6
e3R5cGU6e3NldDpmdW5jdGlvbihlLHQpe2lmKCFoZS5yYWRpb1ZhbHVlJiYicmFkaW8iPT09dCYm
aShlLCJpbnB1dCIpKXt2YXIgbj1lLnZhbHVlCityZXR1cm4gZS5zZXRBdHRyaWJ1dGUoInR5cGUi
LHQpLG4mJihlLnZhbHVlPW4pLHR9fX19LHJlbW92ZUF0dHI6ZnVuY3Rpb24oZSx0KXt2YXIgbixy
PTAsaT10JiZ0Lm1hdGNoKFJlKQoraWYoaSYmMT09PWUubm9kZVR5cGUpZm9yKDtuPWlbcisrXTsp
ZS5yZW1vdmVBdHRyaWJ1dGUobil9fSkseXQ9e3NldDpmdW5jdGlvbihlLHQsbil7cmV0dXJuITE9
PT10P2RlLnJlbW92ZUF0dHIoZSxuKTplLnNldEF0dHJpYnV0ZShuLG4pLG59fSxkZS5lYWNoKGRl
LmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goL1x3Ky9nKSxmdW5jdGlvbihlLHQpe3ZhciBu
PXZ0W3RdfHxkZS5maW5kLmF0dHIKK3Z0W3RdPWZ1bmN0aW9uKGUsdCxyKXt2YXIgaSxvLHM9dC50
b0xvd2VyQ2FzZSgpCityZXR1cm4gcnx8KG89dnRbc10sdnRbc109aSxpPW51bGwhPW4oZSx0LHIp
P3M6bnVsbCx2dFtzXT1vKSxpfX0pCit2YXIgYnQ9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8
YnV0dG9uKSQvaSxfdD0vXig/OmF8YXJlYSkkL2kKK2RlLmZuLmV4dGVuZCh7cHJvcDpmdW5jdGlv
bihlLHQpe3JldHVybiBQZSh0aGlzLGRlLnByb3AsZSx0LGFyZ3VtZW50cy5sZW5ndGg+MSl9LHJl
bW92ZVByb3A6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2RlbGV0ZSB0
aGlzW2RlLnByb3BGaXhbZV18fGVdfSl9fSksZGUuZXh0ZW5kKHtwcm9wOmZ1bmN0aW9uKGUsdCxu
KXt2YXIgcixpLG89ZS5ub2RlVHlwZQoraWYoMyE9PW8mJjghPT1vJiYyIT09bylyZXR1cm4gMT09
PW8mJmRlLmlzWE1MRG9jKGUpfHwodD1kZS5wcm9wRml4W3RdfHx0LGk9ZGUucHJvcEhvb2tzW3Rd
KSx2b2lkIDAhPT1uP2kmJiJzZXQiaW4gaSYmdm9pZCAwIT09KHI9aS5zZXQoZSxuLHQpKT9yOmVb
dF09bjppJiYiZ2V0ImluIGkmJm51bGwhPT0ocj1pLmdldChlLHQpKT9yOmVbdF19LHByb3BIb29r
czp7dGFiSW5kZXg6e2dldDpmdW5jdGlvbihlKXt2YXIgdD1kZS5maW5kLmF0dHIoZSwidGFiaW5k
ZXgiKQorcmV0dXJuIHQ/cGFyc2VJbnQodCwxMCk6YnQudGVzdChlLm5vZGVOYW1lKXx8X3QudGVz
dChlLm5vZGVOYW1lKSYmZS5ocmVmPzA6LTF9fX0scHJvcEZpeDp7Zm9yOiJodG1sRm9yIixjbGFz
czoiY2xhc3NOYW1lIn19KSxoZS5vcHRTZWxlY3RlZHx8KGRlLnByb3BIb29rcy5zZWxlY3RlZD17
Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyZW50Tm9kZQorcmV0dXJuIHQmJnQucGFyZW50Tm9k
ZSYmdC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsbnVsbH0sc2V0OmZ1bmN0aW9uKGUpe3ZhciB0
PWUucGFyZW50Tm9kZQordCYmKHQuc2VsZWN0ZWRJbmRleCx0LnBhcmVudE5vZGUmJnQucGFyZW50
Tm9kZS5zZWxlY3RlZEluZGV4KX19KSxkZS5lYWNoKFsidGFiSW5kZXgiLCJyZWFkT25seSIsIm1h
eExlbmd0aCIsImNlbGxTcGFjaW5nIiwiY2VsbFBhZGRpbmciLCJyb3dTcGFuIiwiY29sU3BhbiIs
InVzZU1hcCIsImZyYW1lQm9yZGVyIiwiY29udGVudEVkaXRhYmxlIl0sZnVuY3Rpb24oKXtkZS5w
cm9wRml4W3RoaXMudG9Mb3dlckNhc2UoKV09dGhpc30pLGRlLmZuLmV4dGVuZCh7YWRkQ2xhc3M6
ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbyxzLGEsdT0wCitpZihkZS5pc0Z1bmN0aW9uKGUpKXJl
dHVybiB0aGlzLmVhY2goZnVuY3Rpb24odCl7ZGUodGhpcykuYWRkQ2xhc3MoZS5jYWxsKHRoaXMs
dCxLKHRoaXMpKSl9KQoraWYoInN0cmluZyI9PXR5cGVvZiBlJiZlKWZvcih0PWUubWF0Y2goUmUp
fHxbXTtuPXRoaXNbdSsrXTspaWYoaT1LKG4pLHI9MT09PW4ubm9kZVR5cGUmJiIgIitHKGkpKyIg
Iil7Zm9yKHM9MDtvPXRbcysrXTspci5pbmRleE9mKCIgIitvKyIgIik8MCYmKHIrPW8rIiAiKQor
YT1HKHIpLGkhPT1hJiZuLnNldEF0dHJpYnV0ZSgiY2xhc3MiLGEpfXJldHVybiB0aGlzfSxyZW1v
dmVDbGFzczpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLHMsYSx1PTAKK2lmKGRlLmlzRnVuY3Rp
b24oZSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXtkZSh0aGlzKS5yZW1vdmVDbGFzcyhl
LmNhbGwodGhpcyx0LEsodGhpcykpKX0pCitpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGhp
cy5hdHRyKCJjbGFzcyIsIiIpCitpZigic3RyaW5nIj09dHlwZW9mIGUmJmUpZm9yKHQ9ZS5tYXRj
aChSZSl8fFtdO249dGhpc1t1KytdOylpZihpPUsobikscj0xPT09bi5ub2RlVHlwZSYmIiAiK0co
aSkrIiAiKXtmb3Iocz0wO289dFtzKytdOylmb3IoO3IuaW5kZXhPZigiICIrbysiICIpPi0xOyly
PXIucmVwbGFjZSgiICIrbysiICIsIiAiKQorYT1HKHIpLGkhPT1hJiZuLnNldEF0dHJpYnV0ZSgi
Y2xhc3MiLGEpfXJldHVybiB0aGlzfSx0b2dnbGVDbGFzczpmdW5jdGlvbihlLHQpe3ZhciBuPXR5
cGVvZiBlCityZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiB0JiYic3RyaW5nIj09PW4/dD90aGlzLmFk
ZENsYXNzKGUpOnRoaXMucmVtb3ZlQ2xhc3MoZSk6ZGUuaXNGdW5jdGlvbihlKT90aGlzLmVhY2go
ZnVuY3Rpb24obil7ZGUodGhpcykudG9nZ2xlQ2xhc3MoZS5jYWxsKHRoaXMsbixLKHRoaXMpLHQp
LHQpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQscixpLG8KK2lmKCJzdHJpbmciPT09bilm
b3Iocj0wLGk9ZGUodGhpcyksbz1lLm1hdGNoKFJlKXx8W107dD1vW3IrK107KWkuaGFzQ2xhc3Mo
dCk/aS5yZW1vdmVDbGFzcyh0KTppLmFkZENsYXNzKHQpCitlbHNlIHZvaWQgMCE9PWUmJiJib29s
ZWFuIiE9PW58fCh0PUsodGhpcyksdCYmRGUuc2V0KHRoaXMsIl9fY2xhc3NOYW1lX18iLHQpLHRo
aXMuc2V0QXR0cmlidXRlJiZ0aGlzLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHR8fCExPT09ZT8iIjpE
ZS5nZXQodGhpcywiX19jbGFzc05hbWVfXyIpfHwiIikpfSl9LGhhc0NsYXNzOmZ1bmN0aW9uKGUp
e3ZhciB0LG4scj0wCitmb3IodD0iICIrZSsiICI7bj10aGlzW3IrK107KWlmKDE9PT1uLm5vZGVU
eXBlJiYoIiAiK0coSyhuKSkrIiAiKS5pbmRleE9mKHQpPi0xKXJldHVybiEwCityZXR1cm4hMX19
KQordmFyIHd0PS9cci9nCitkZS5mbi5leHRlbmQoe3ZhbDpmdW5jdGlvbihlKXt2YXIgdCxuLHIs
aT10aGlzWzBdCit7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcj1kZS5pc0Z1bmN0aW9uKGUp
LHRoaXMuZWFjaChmdW5jdGlvbihuKXt2YXIgaQorMT09PXRoaXMubm9kZVR5cGUmJihpPXI/ZS5j
YWxsKHRoaXMsbixkZSh0aGlzKS52YWwoKSk6ZSxudWxsPT1pP2k9IiI6Im51bWJlciI9PXR5cGVv
ZiBpP2krPSIiOkFycmF5LmlzQXJyYXkoaSkmJihpPWRlLm1hcChpLGZ1bmN0aW9uKGUpe3JldHVy
biBudWxsPT1lPyIiOmUrIiJ9KSksKHQ9ZGUudmFsSG9va3NbdGhpcy50eXBlXXx8ZGUudmFsSG9v
a3NbdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSkmJiJzZXQiaW4gdCYmdm9pZCAwIT09dC5z
ZXQodGhpcyxpLCJ2YWx1ZSIpfHwodGhpcy52YWx1ZT1pKSl9KQoraWYoaSlyZXR1cm4odD1kZS52
YWxIb29rc1tpLnR5cGVdfHxkZS52YWxIb29rc1tpLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKSYm
ImdldCJpbiB0JiZ2b2lkIDAhPT0obj10LmdldChpLCJ2YWx1ZSIpKT9uOihuPWkudmFsdWUsInN0
cmluZyI9PXR5cGVvZiBuP24ucmVwbGFjZSh3dCwiIik6bnVsbD09bj8iIjpuKX19fSksZGUuZXh0
ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZGUuZmluZC5hdHRy
KGUsInZhbHVlIikKK3JldHVybiBudWxsIT10P3Q6RyhkZS50ZXh0KGUpKX19LHNlbGVjdDp7Z2V0
OmZ1bmN0aW9uKGUpe3ZhciB0LG4scixvPWUub3B0aW9ucyxzPWUuc2VsZWN0ZWRJbmRleCxhPSJz
ZWxlY3Qtb25lIj09PWUudHlwZSx1PWE/bnVsbDpbXSxsPWE/cysxOm8ubGVuZ3RoCitmb3Iocj1z
PDA/bDphP3M6MDtyPGw7cisrKWlmKG49b1tyXSwobi5zZWxlY3RlZHx8cj09PXMpJiYhbi5kaXNh
YmxlZCYmKCFuLnBhcmVudE5vZGUuZGlzYWJsZWR8fCFpKG4ucGFyZW50Tm9kZSwib3B0Z3JvdXAi
KSkpe2lmKHQ9ZGUobikudmFsKCksYSlyZXR1cm4gdAordS5wdXNoKHQpfXJldHVybiB1fSxzZXQ6
ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4scixpPWUub3B0aW9ucyxvPWRlLm1ha2VBcnJheSh0KSxz
PWkubGVuZ3RoO3MtLTspcj1pW3NdLChyLnNlbGVjdGVkPWRlLmluQXJyYXkoZGUudmFsSG9va3Mu
b3B0aW9uLmdldChyKSxvKT4tMSkmJihuPSEwKQorcmV0dXJuIG58fChlLnNlbGVjdGVkSW5kZXg9
LTEpLG99fX19KSxkZS5lYWNoKFsicmFkaW8iLCJjaGVja2JveCJdLGZ1bmN0aW9uKCl7ZGUudmFs
SG9va3NbdGhpc109e3NldDpmdW5jdGlvbihlLHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJu
IGUuY2hlY2tlZD1kZS5pbkFycmF5KGRlKGUpLnZhbCgpLHQpPi0xfX0saGUuY2hlY2tPbnx8KGRl
LnZhbEhvb2tzW3RoaXNdLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09PWUuZ2V0QXR0cmli
dXRlKCJ2YWx1ZSIpPyJvbiI6ZS52YWx1ZX0pfSkKK3ZhciBFdD0vXig/OmZvY3VzaW5mb2N1c3xm
b2N1c291dGJsdXIpJC8KK2RlLmV4dGVuZChkZS5ldmVudCx7dHJpZ2dlcjpmdW5jdGlvbih0LG4s
cixpKXt2YXIgbyxzLGEsdSxsLGMscCxmPVtyfHxuZV0saD1jZS5jYWxsKHQsInR5cGUiKT90LnR5
cGU6dCxkPWNlLmNhbGwodCwibmFtZXNwYWNlIik/dC5uYW1lc3BhY2Uuc3BsaXQoIi4iKTpbXQor
aWYocz1hPXI9cnx8bmUsMyE9PXIubm9kZVR5cGUmJjghPT1yLm5vZGVUeXBlJiYhRXQudGVzdCho
K2RlLmV2ZW50LnRyaWdnZXJlZCkmJihoLmluZGV4T2YoIi4iKT4tMSYmKGQ9aC5zcGxpdCgiLiIp
LGg9ZC5zaGlmdCgpLGQuc29ydCgpKSxsPWguaW5kZXhPZigiOiIpPDAmJiJvbiIraCx0PXRbZGUu
ZXhwYW5kb10/dDpuZXcgZGUuRXZlbnQoaCwib2JqZWN0Ij09dHlwZW9mIHQmJnQpLHQuaXNUcmln
Z2VyPWk/MjozLHQubmFtZXNwYWNlPWQuam9pbigiLiIpLHQucm5hbWVzcGFjZT10Lm5hbWVzcGFj
ZT9uZXcgUmVnRXhwKCIoXnxcXC4pIitkLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIp
Om51bGwsdC5yZXN1bHQ9dm9pZCAwLHQudGFyZ2V0fHwodC50YXJnZXQ9ciksbj1udWxsPT1uP1t0
XTpkZS5tYWtlQXJyYXkobixbdF0pLHA9ZGUuZXZlbnQuc3BlY2lhbFtoXXx8e30saXx8IXAudHJp
Z2dlcnx8ITEhPT1wLnRyaWdnZXIuYXBwbHkocixuKSkpe2lmKCFpJiYhcC5ub0J1YmJsZSYmIWRl
LmlzV2luZG93KHIpKXtmb3IodT1wLmRlbGVnYXRlVHlwZXx8aCxFdC50ZXN0KHUraCl8fChzPXMu
cGFyZW50Tm9kZSk7cztzPXMucGFyZW50Tm9kZSlmLnB1c2gocyksYT1zCithPT09KHIub3duZXJE
b2N1bWVudHx8bmUpJiZmLnB1c2goYS5kZWZhdWx0Vmlld3x8YS5wYXJlbnRXaW5kb3d8fGUpfWZv
cihvPTA7KHM9ZltvKytdKSYmIXQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTspdC50eXBlPW8+MT91
OnAuYmluZFR5cGV8fGgsYz0oRGUuZ2V0KHMsImV2ZW50cyIpfHx7fSlbdC50eXBlXSYmRGUuZ2V0
KHMsImhhbmRsZSIpLGMmJmMuYXBwbHkocyxuKSwoYz1sJiZzW2xdKSYmYy5hcHBseSYmamUocykm
Jih0LnJlc3VsdD1jLmFwcGx5KHMsbiksITE9PT10LnJlc3VsdCYmdC5wcmV2ZW50RGVmYXVsdCgp
KQorcmV0dXJuIHQudHlwZT1oLGl8fHQuaXNEZWZhdWx0UHJldmVudGVkKCl8fHAuX2RlZmF1bHQm
JiExIT09cC5fZGVmYXVsdC5hcHBseShmLnBvcCgpLG4pfHwhamUocil8fGwmJmRlLmlzRnVuY3Rp
b24ocltoXSkmJiFkZS5pc1dpbmRvdyhyKSYmKGE9cltsXSxhJiYocltsXT1udWxsKSxkZS5ldmVu
dC50cmlnZ2VyZWQ9aCxyW2hdKCksZGUuZXZlbnQudHJpZ2dlcmVkPXZvaWQgMCxhJiYocltsXT1h
KSksdC5yZXN1bHR9fSxzaW11bGF0ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9ZGUuZXh0ZW5kKG5l
dyBkZS5FdmVudCxuLHt0eXBlOmUsaXNTaW11bGF0ZWQ6ITB9KQorZGUuZXZlbnQudHJpZ2dlcihy
LG51bGwsdCl9fSksZGUuZm4uZXh0ZW5kKHt0cmlnZ2VyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRo
aXMuZWFjaChmdW5jdGlvbigpe2RlLmV2ZW50LnRyaWdnZXIoZSx0LHRoaXMpfSl9LHRyaWdnZXJI
YW5kbGVyOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpc1swXQoraWYobilyZXR1cm4gZGUuZXZlbnQu
dHJpZ2dlcihlLHQsbiwhMCl9fSksZGUuZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0
IHJlc2l6ZSBzY3JvbGwgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3Zl
IG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBz
dWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSxmdW5j
dGlvbihlLHQpe2RlLmZuW3RdPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+
MD90aGlzLm9uKHQsbnVsbCxlLG4pOnRoaXMudHJpZ2dlcih0KX19KSxkZS5mbi5leHRlbmQoe2hv
dmVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMubW91c2VlbnRlcihlKS5tb3VzZWxlYXZlKHR8
fGUpfX0pLGhlLmZvY3VzaW49Im9uZm9jdXNpbiJpbiBlLGhlLmZvY3VzaW58fGRlLmVhY2goe2Zv
Y3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0aW9uKGUsdCl7dmFyIG49ZnVuY3Rp
b24oZSl7ZGUuZXZlbnQuc2ltdWxhdGUodCxlLnRhcmdldCxkZS5ldmVudC5maXgoZSkpfQorZGUu
ZXZlbnQuc3BlY2lhbFt0XT17c2V0dXA6ZnVuY3Rpb24oKXt2YXIgcj10aGlzLm93bmVyRG9jdW1l
bnR8fHRoaXMsaT1EZS5hY2Nlc3Mocix0KQoraXx8ci5hZGRFdmVudExpc3RlbmVyKGUsbiwhMCks
RGUuYWNjZXNzKHIsdCwoaXx8MCkrMSl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5v
d25lckRvY3VtZW50fHx0aGlzLGk9RGUuYWNjZXNzKHIsdCktMQoraT9EZS5hY2Nlc3Mocix0LGkp
OihyLnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxuLCEwKSxEZS5yZW1vdmUocix0KSl9fX0pCit2YXIg
eHQ9ZS5sb2NhdGlvbixDdD1kZS5ub3coKSxPdD0vXD8vCitkZS5wYXJzZVhNTD1mdW5jdGlvbih0
KXt2YXIgbgoraWYoIXR8fCJzdHJpbmciIT10eXBlb2YgdClyZXR1cm4gbnVsbAordHJ5e249KG5l
dyBlLkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKHQsInRleHQveG1sIil9Y2F0Y2goZSl7bj12
b2lkIDB9cmV0dXJuIG4mJiFuLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwYXJzZXJlcnJvciIpLmxl
bmd0aHx8ZGUuZXJyb3IoIkludmFsaWQgWE1MOiAiK3QpLG59Cit2YXIgQXQ9L1xbXF0kLyxUdD0v
XHI/XG4vZyxTdD0vXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksUnQ9L14o
PzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pCitkZS5wYXJhbT1mdW5jdGlvbihlLHQp
e3ZhciBuLHI9W10saT1mdW5jdGlvbihlLHQpe3ZhciBuPWRlLmlzRnVuY3Rpb24odCk/dCgpOnQK
K3Jbci5sZW5ndGhdPWVuY29kZVVSSUNvbXBvbmVudChlKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50
KG51bGw9PW4/IiI6bil9CitpZihBcnJheS5pc0FycmF5KGUpfHxlLmpxdWVyeSYmIWRlLmlzUGxh
aW5PYmplY3QoZSkpZGUuZWFjaChlLGZ1bmN0aW9uKCl7aSh0aGlzLm5hbWUsdGhpcy52YWx1ZSl9
KQorZWxzZSBmb3IobiBpbiBlKVEobixlW25dLHQsaSkKK3JldHVybiByLmpvaW4oIiYiKX0sZGUu
Zm4uZXh0ZW5kKHtzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gZGUucGFyYW0odGhpcy5zZXJp
YWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAo
ZnVuY3Rpb24oKXt2YXIgZT1kZS5wcm9wKHRoaXMsImVsZW1lbnRzIikKK3JldHVybiBlP2RlLm1h
a2VBcnJheShlKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50eXBlCityZXR1
cm4gdGhpcy5uYW1lJiYhZGUodGhpcykuaXMoIjpkaXNhYmxlZCIpJiZSdC50ZXN0KHRoaXMubm9k
ZU5hbWUpJiYhU3QudGVzdChlKSYmKHRoaXMuY2hlY2tlZHx8IVZlLnRlc3QoZSkpfSkubWFwKGZ1
bmN0aW9uKGUsdCl7dmFyIG49ZGUodGhpcykudmFsKCkKK3JldHVybiBudWxsPT1uP251bGw6QXJy
YXkuaXNBcnJheShuKT9kZS5tYXAobixmdW5jdGlvbihlKXtyZXR1cm57bmFtZTp0Lm5hbWUsdmFs
dWU6ZS5yZXBsYWNlKFR0LCJcclxuIil9fSk6e25hbWU6dC5uYW1lLHZhbHVlOm4ucmVwbGFjZShU
dCwiXHJcbiIpfX0pLmdldCgpfX0pCit2YXIga3Q9LyUyMC9nLE50PS8jLiokLyxQdD0vKFs/Jl0p
Xz1bXiZdKi8sanQ9L14oLio/KTpbIFx0XSooW15cclxuXSopJC9nbSxEdD0vXig/OmFib3V0fGFw
cHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxMdD0vXig/OkdF
VHxIRUFEKSQvLEl0PS9eXC9cLy8sTXQ9e30sRnQ9e30senQ9IiovIi5jb25jYXQoIioiKSxVdD1u
ZS5jcmVhdGVFbGVtZW50KCJhIikKK1V0LmhyZWY9eHQuaHJlZixkZS5leHRlbmQoe2FjdGl2ZTow
LGxhc3RNb2RpZmllZDp7fSxldGFnOnt9LGFqYXhTZXR0aW5nczp7dXJsOnh0LmhyZWYsdHlwZToi
R0VUIixpc0xvY2FsOkR0LnRlc3QoeHQucHJvdG9jb2wpLGdsb2JhbDohMCxwcm9jZXNzRGF0YToh
MCxhc3luYzohMCxjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVk
OyBjaGFyc2V0PVVURi04IixhY2NlcHRzOnsiKiI6enQsdGV4dDoidGV4dC9wbGFpbiIsaHRtbDoi
dGV4dC9odG1sIix4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGpzb246ImFwcGxpY2F0
aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCJ9LGNvbnRlbnRzOnt4bWw6L1xieG1sXGIvLGh0bWw6
L1xiaHRtbC8sanNvbjovXGJqc29uXGIvfSxyZXNwb25zZUZpZWxkczp7eG1sOiJyZXNwb25zZVhN
TCIsdGV4dDoicmVzcG9uc2VUZXh0Iixqc29uOiJyZXNwb25zZUpTT04ifSxjb252ZXJ0ZXJzOnsi
KiB0ZXh0IjpTdHJpbmcsInRleHQgaHRtbCI6ITAsInRleHQganNvbiI6SlNPTi5wYXJzZSwidGV4
dCB4bWwiOmRlLnBhcnNlWE1MfSxmbGF0T3B0aW9uczp7dXJsOiEwLGNvbnRleHQ6ITB9fSxhamF4
U2V0dXA6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD9YKFgoZSxkZS5hamF4U2V0dGluZ3MpLHQpOlgo
ZGUuYWpheFNldHRpbmdzLGUpfSxhamF4UHJlZmlsdGVyOlkoTXQpLGFqYXhUcmFuc3BvcnQ6WShG
dCksYWpheDpmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHIodCxuLHIsYSl7dmFyIGwsZixoLF8sdyxF
PW4KK2N8fChjPSEwLHUmJmUuY2xlYXJUaW1lb3V0KHUpLGk9dm9pZCAwLHM9YXx8IiIseC5yZWFk
eVN0YXRlPXQ+MD80OjAsbD10Pj0yMDAmJnQ8MzAwfHwzMDQ9PT10LHImJihfPVooZCx4LHIpKSxf
PWVlKGQsXyx4LGwpLGw/KGQuaWZNb2RpZmllZCYmKHc9eC5nZXRSZXNwb25zZUhlYWRlcigiTGFz
dC1Nb2RpZmllZCIpLHcmJihkZS5sYXN0TW9kaWZpZWRbb109dyksKHc9eC5nZXRSZXNwb25zZUhl
YWRlcigiZXRhZyIpKSYmKGRlLmV0YWdbb109dykpLDIwND09PXR8fCJIRUFEIj09PWQudHlwZT9F
PSJub2NvbnRlbnQiOjMwND09PXQ/RT0ibm90bW9kaWZpZWQiOihFPV8uc3RhdGUsZj1fLmRhdGEs
aD1fLmVycm9yLGw9IWgpKTooaD1FLCF0JiZFfHwoRT0iZXJyb3IiLHQ8MCYmKHQ9MCkpKSx4LnN0
YXR1cz10LHguc3RhdHVzVGV4dD0obnx8RSkrIiIsbD95LnJlc29sdmVXaXRoKG0sW2YsRSx4XSk6
eS5yZWplY3RXaXRoKG0sW3gsRSxoXSkseC5zdGF0dXNDb2RlKGIpLGI9dm9pZCAwLHAmJmcudHJp
Z2dlcihsPyJhamF4U3VjY2VzcyI6ImFqYXhFcnJvciIsW3gsZCxsP2Y6aF0pLHYuZmlyZVdpdGgo
bSxbeCxFXSkscCYmKGcudHJpZ2dlcigiYWpheENvbXBsZXRlIixbeCxkXSksLS1kZS5hY3RpdmV8
fGRlLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIikpKX0ib2JqZWN0Ij09dHlwZW9mIHQmJihuPXQs
dD12b2lkIDApLG49bnx8e30KK3ZhciBpLG8scyxhLHUsbCxjLHAsZixoLGQ9ZGUuYWpheFNldHVw
KHt9LG4pLG09ZC5jb250ZXh0fHxkLGc9ZC5jb250ZXh0JiYobS5ub2RlVHlwZXx8bS5qcXVlcnkp
P2RlKG0pOmRlLmV2ZW50LHk9ZGUuRGVmZXJyZWQoKSx2PWRlLkNhbGxiYWNrcygib25jZSBtZW1v
cnkiKSxiPWQuc3RhdHVzQ29kZXx8e30sXz17fSx3PXt9LEU9ImNhbmNlbGVkIix4PXtyZWFkeVN0
YXRlOjAsZ2V0UmVzcG9uc2VIZWFkZXI6ZnVuY3Rpb24oZSl7dmFyIHQKK2lmKGMpe2lmKCFhKWZv
cihhPXt9O3Q9anQuZXhlYyhzKTspYVt0WzFdLnRvTG93ZXJDYXNlKCldPXRbMl0KK3Q9YVtlLnRv
TG93ZXJDYXNlKCldfXJldHVybiBudWxsPT10P251bGw6dH0sZ2V0QWxsUmVzcG9uc2VIZWFkZXJz
OmZ1bmN0aW9uKCl7cmV0dXJuIGM/czpudWxsfSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGUs
dCl7cmV0dXJuIG51bGw9PWMmJihlPXdbZS50b0xvd2VyQ2FzZSgpXT13W2UudG9Mb3dlckNhc2Uo
KV18fGUsX1tlXT10KSx0aGlzfSxvdmVycmlkZU1pbWVUeXBlOmZ1bmN0aW9uKGUpe3JldHVybiBu
dWxsPT1jJiYoZC5taW1lVHlwZT1lKSx0aGlzfSxzdGF0dXNDb2RlOmZ1bmN0aW9uKGUpe3ZhciB0
CitpZihlKWlmKGMpeC5hbHdheXMoZVt4LnN0YXR1c10pCitlbHNlIGZvcih0IGluIGUpYlt0XT1b
Ylt0XSxlW3RdXQorcmV0dXJuIHRoaXN9LGFib3J0OmZ1bmN0aW9uKGUpe3ZhciB0PWV8fEUKK3Jl
dHVybiBpJiZpLmFib3J0KHQpLHIoMCx0KSx0aGlzfX0KK2lmKHkucHJvbWlzZSh4KSxkLnVybD0o
KHR8fGQudXJsfHx4dC5ocmVmKSsiIikucmVwbGFjZShJdCx4dC5wcm90b2NvbCsiLy8iKSxkLnR5
cGU9bi5tZXRob2R8fG4udHlwZXx8ZC5tZXRob2R8fGQudHlwZSxkLmRhdGFUeXBlcz0oZC5kYXRh
VHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLm1hdGNoKFJlKXx8WyIiXSxudWxsPT1kLmNyb3NzRG9t
YWluKXtsPW5lLmNyZWF0ZUVsZW1lbnQoImEiKQordHJ5e2wuaHJlZj1kLnVybCxsLmhyZWY9bC5o
cmVmLGQuY3Jvc3NEb21haW49VXQucHJvdG9jb2wrIi8vIitVdC5ob3N0IT1sLnByb3RvY29sKyIv
LyIrbC5ob3N0fWNhdGNoKGUpe2QuY3Jvc3NEb21haW49ITB9fWlmKGQuZGF0YSYmZC5wcm9jZXNz
RGF0YSYmInN0cmluZyIhPXR5cGVvZiBkLmRhdGEmJihkLmRhdGE9ZGUucGFyYW0oZC5kYXRhLGQu
dHJhZGl0aW9uYWwpKSxKKE10LGQsbix4KSxjKXJldHVybiB4CitwPWRlLmV2ZW50JiZkLmdsb2Jh
bCxwJiYwPT1kZS5hY3RpdmUrKyYmZGUuZXZlbnQudHJpZ2dlcigiYWpheFN0YXJ0IiksZC50eXBl
PWQudHlwZS50b1VwcGVyQ2FzZSgpLGQuaGFzQ29udGVudD0hTHQudGVzdChkLnR5cGUpLG89ZC51
cmwucmVwbGFjZShOdCwiIiksZC5oYXNDb250ZW50P2QuZGF0YSYmZC5wcm9jZXNzRGF0YSYmMD09
PShkLmNvbnRlbnRUeXBlfHwiIikuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxl
bmNvZGVkIikmJihkLmRhdGE9ZC5kYXRhLnJlcGxhY2Uoa3QsIisiKSk6KGg9ZC51cmwuc2xpY2Uo
by5sZW5ndGgpLGQuZGF0YSYmKG8rPShPdC50ZXN0KG8pPyImIjoiPyIpK2QuZGF0YSxkZWxldGUg
ZC5kYXRhKSwhMT09PWQuY2FjaGUmJihvPW8ucmVwbGFjZShQdCwiJDEiKSxoPShPdC50ZXN0KG8p
PyImIjoiPyIpKyJfPSIrQ3QrKytoKSxkLnVybD1vK2gpLGQuaWZNb2RpZmllZCYmKGRlLmxhc3RN
b2RpZmllZFtvXSYmeC5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Nb2RpZmllZC1TaW5jZSIsZGUubGFz
dE1vZGlmaWVkW29dKSxkZS5ldGFnW29dJiZ4LnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0
Y2giLGRlLmV0YWdbb10pKSwoZC5kYXRhJiZkLmhhc0NvbnRlbnQmJiExIT09ZC5jb250ZW50VHlw
ZXx8bi5jb250ZW50VHlwZSkmJnguc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixkLmNv
bnRlbnRUeXBlKSx4LnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsZC5kYXRhVHlwZXNbMF0mJmQu
YWNjZXB0c1tkLmRhdGFUeXBlc1swXV0/ZC5hY2NlcHRzW2QuZGF0YVR5cGVzWzBdXSsoIioiIT09
ZC5kYXRhVHlwZXNbMF0/IiwgIit6dCsiOyBxPTAuMDEiOiIiKTpkLmFjY2VwdHNbIioiXSkKK2Zv
cihmIGluIGQuaGVhZGVycyl4LnNldFJlcXVlc3RIZWFkZXIoZixkLmhlYWRlcnNbZl0pCitpZihk
LmJlZm9yZVNlbmQmJighMT09PWQuYmVmb3JlU2VuZC5jYWxsKG0seCxkKXx8YykpcmV0dXJuIHgu
YWJvcnQoKQoraWYoRT0iYWJvcnQiLHYuYWRkKGQuY29tcGxldGUpLHguZG9uZShkLnN1Y2Nlc3Mp
LHguZmFpbChkLmVycm9yKSxpPUooRnQsZCxuLHgpKXtpZih4LnJlYWR5U3RhdGU9MSxwJiZnLnRy
aWdnZXIoImFqYXhTZW5kIixbeCxkXSksYylyZXR1cm4geAorZC5hc3luYyYmZC50aW1lb3V0PjAm
Jih1PWUuc2V0VGltZW91dChmdW5jdGlvbigpe3guYWJvcnQoInRpbWVvdXQiKX0sZC50aW1lb3V0
KSkKK3RyeXtjPSExLGkuc2VuZChfLHIpfWNhdGNoKGUpe2lmKGMpdGhyb3cgZQorcigtMSxlKX19
ZWxzZSByKC0xLCJObyBUcmFuc3BvcnQiKQorcmV0dXJuIHh9LGdldEpTT046ZnVuY3Rpb24oZSx0
LG4pe3JldHVybiBkZS5nZXQoZSx0LG4sImpzb24iKX0sZ2V0U2NyaXB0OmZ1bmN0aW9uKGUsdCl7
cmV0dXJuIGRlLmdldChlLHZvaWQgMCx0LCJzY3JpcHQiKX19KSxkZS5lYWNoKFsiZ2V0IiwicG9z
dCJdLGZ1bmN0aW9uKGUsdCl7ZGVbdF09ZnVuY3Rpb24oZSxuLHIsaSl7cmV0dXJuIGRlLmlzRnVu
Y3Rpb24obikmJihpPWl8fHIscj1uLG49dm9pZCAwKSxkZS5hamF4KGRlLmV4dGVuZCh7dXJsOmUs
dHlwZTp0LGRhdGFUeXBlOmksZGF0YTpuLHN1Y2Nlc3M6cn0sZGUuaXNQbGFpbk9iamVjdChlKSYm
ZSkpfX0pLGRlLl9ldmFsVXJsPWZ1bmN0aW9uKGUpe3JldHVybiBkZS5hamF4KHt1cmw6ZSx0eXBl
OiJHRVQiLGRhdGFUeXBlOiJzY3JpcHQiLGNhY2hlOiEwLGFzeW5jOiExLGdsb2JhbDohMSx0aHJv
d3M6ITB9KX0sZGUuZm4uZXh0ZW5kKHt3cmFwQWxsOmZ1bmN0aW9uKGUpe3ZhciB0CityZXR1cm4g
dGhpc1swXSYmKGRlLmlzRnVuY3Rpb24oZSkmJihlPWUuY2FsbCh0aGlzWzBdKSksdD1kZShlLHRo
aXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xvbmUoITApLHRoaXNbMF0ucGFyZW50Tm9kZSYm
dC5pbnNlcnRCZWZvcmUodGhpc1swXSksdC5tYXAoZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcztl
LmZpcnN0RWxlbWVudENoaWxkOyllPWUuZmlyc3RFbGVtZW50Q2hpbGQKK3JldHVybiBlfSkuYXBw
ZW5kKHRoaXMpKSx0aGlzfSx3cmFwSW5uZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGRlLmlzRnVuY3Rp
b24oZSk/dGhpcy5lYWNoKGZ1bmN0aW9uKHQpe2RlKHRoaXMpLndyYXBJbm5lcihlLmNhbGwodGhp
cyx0KSl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1kZSh0aGlzKSxuPXQuY29udGVudHMo
KQorbi5sZW5ndGg/bi53cmFwQWxsKGUpOnQuYXBwZW5kKGUpfSl9LHdyYXA6ZnVuY3Rpb24oZSl7
dmFyIHQ9ZGUuaXNGdW5jdGlvbihlKQorcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihuKXtkZSh0
aGlzKS53cmFwQWxsKHQ/ZS5jYWxsKHRoaXMsbik6ZSl9KX0sdW53cmFwOmZ1bmN0aW9uKGUpe3Jl
dHVybiB0aGlzLnBhcmVudChlKS5ub3QoImJvZHkiKS5lYWNoKGZ1bmN0aW9uKCl7ZGUodGhpcyku
cmVwbGFjZVdpdGgodGhpcy5jaGlsZE5vZGVzKX0pLHRoaXN9fSksZGUuZXhwci5wc2V1ZG9zLmhp
ZGRlbj1mdW5jdGlvbihlKXtyZXR1cm4hZGUuZXhwci5wc2V1ZG9zLnZpc2libGUoZSl9LGRlLmV4
cHIucHNldWRvcy52aXNpYmxlPWZ1bmN0aW9uKGUpe3JldHVybiEhKGUub2Zmc2V0V2lkdGh8fGUu
b2Zmc2V0SGVpZ2h0fHxlLmdldENsaWVudFJlY3RzKCkubGVuZ3RoKX0sZGUuYWpheFNldHRpbmdz
Lnhocj1mdW5jdGlvbigpe3RyeXtyZXR1cm4gbmV3IGUuWE1MSHR0cFJlcXVlc3R9Y2F0Y2goZSl7
fX0KK3ZhciBCdD17MDoyMDAsMTIyMzoyMDR9LHF0PWRlLmFqYXhTZXR0aW5ncy54aHIoKQoraGUu
Y29ycz0hIXF0JiYid2l0aENyZWRlbnRpYWxzImluIHF0LGhlLmFqYXg9cXQ9ISFxdCxkZS5hamF4
VHJhbnNwb3J0KGZ1bmN0aW9uKHQpe3ZhciBuLHIKK2lmKGhlLmNvcnN8fHF0JiYhdC5jcm9zc0Rv
bWFpbilyZXR1cm57c2VuZDpmdW5jdGlvbihpLG8pe3ZhciBzLGE9dC54aHIoKQoraWYoYS5vcGVu
KHQudHlwZSx0LnVybCx0LmFzeW5jLHQudXNlcm5hbWUsdC5wYXNzd29yZCksdC54aHJGaWVsZHMp
Zm9yKHMgaW4gdC54aHJGaWVsZHMpYVtzXT10LnhockZpZWxkc1tzXQordC5taW1lVHlwZSYmYS5v
dmVycmlkZU1pbWVUeXBlJiZhLm92ZXJyaWRlTWltZVR5cGUodC5taW1lVHlwZSksdC5jcm9zc0Rv
bWFpbnx8aVsiWC1SZXF1ZXN0ZWQtV2l0aCJdfHwoaVsiWC1SZXF1ZXN0ZWQtV2l0aCJdPSJYTUxI
dHRwUmVxdWVzdCIpCitmb3IocyBpbiBpKWEuc2V0UmVxdWVzdEhlYWRlcihzLGlbc10pCituPWZ1
bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe24mJihuPXI9YS5vbmxvYWQ9YS5vbmVycm9yPWEu
b25hYm9ydD1hLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLCJhYm9ydCI9PT1lP2EuYWJvcnQoKToi
ZXJyb3IiPT09ZT8ibnVtYmVyIiE9dHlwZW9mIGEuc3RhdHVzP28oMCwiZXJyb3IiKTpvKGEuc3Rh
dHVzLGEuc3RhdHVzVGV4dCk6byhCdFthLnN0YXR1c118fGEuc3RhdHVzLGEuc3RhdHVzVGV4dCwi
dGV4dCIhPT0oYS5yZXNwb25zZVR5cGV8fCJ0ZXh0Iil8fCJzdHJpbmciIT10eXBlb2YgYS5yZXNw
b25zZVRleHQ/e2JpbmFyeTphLnJlc3BvbnNlfTp7dGV4dDphLnJlc3BvbnNlVGV4dH0sYS5nZXRB
bGxSZXNwb25zZUhlYWRlcnMoKSkpfX0sYS5vbmxvYWQ9bigpLHI9YS5vbmVycm9yPW4oImVycm9y
Iiksdm9pZCAwIT09YS5vbmFib3J0P2Eub25hYm9ydD1yOmEub25yZWFkeXN0YXRlY2hhbmdlPWZ1
bmN0aW9uKCl7ND09PWEucmVhZHlTdGF0ZSYmZS5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7biYmcigp
fSl9LG49bigiYWJvcnQiKQordHJ5e2Euc2VuZCh0Lmhhc0NvbnRlbnQmJnQuZGF0YXx8bnVsbCl9
Y2F0Y2goZSl7aWYobil0aHJvdyBlfX0sYWJvcnQ6ZnVuY3Rpb24oKXtuJiZuKCl9fX0pLGRlLmFq
YXhQcmVmaWx0ZXIoZnVuY3Rpb24oZSl7ZS5jcm9zc0RvbWFpbiYmKGUuY29udGVudHMuc2NyaXB0
PSExKX0pLGRlLmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0OiJ0ZXh0L2phdmFzY3JpcHQsIGFw
cGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9u
L3gtZWNtYXNjcmlwdCJ9LGNvbnRlbnRzOntzY3JpcHQ6L1xiKD86amF2YXxlY21hKXNjcmlwdFxi
L30sY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbihlKXtyZXR1cm4gZGUuZ2xvYmFs
RXZhbChlKSxlfX19KSxkZS5hamF4UHJlZmlsdGVyKCJzY3JpcHQiLGZ1bmN0aW9uKGUpe3ZvaWQg
MD09PWUuY2FjaGUmJihlLmNhY2hlPSExKSxlLmNyb3NzRG9tYWluJiYoZS50eXBlPSJHRVQiKX0p
LGRlLmFqYXhUcmFuc3BvcnQoInNjcmlwdCIsZnVuY3Rpb24oZSl7aWYoZS5jcm9zc0RvbWFpbil7
dmFyIHQsbgorcmV0dXJue3NlbmQ6ZnVuY3Rpb24ocixpKXt0PWRlKCI8c2NyaXB0PiIpLnByb3Ao
e2NoYXJzZXQ6ZS5zY3JpcHRDaGFyc2V0LHNyYzplLnVybH0pLm9uKCJsb2FkIGVycm9yIixuPWZ1
bmN0aW9uKGUpe3QucmVtb3ZlKCksbj1udWxsLGUmJmkoImVycm9yIj09PWUudHlwZT80MDQ6MjAw
LGUudHlwZSl9KSxuZS5oZWFkLmFwcGVuZENoaWxkKHRbMF0pfSxhYm9ydDpmdW5jdGlvbigpe24m
Jm4oKX19fX0pCit2YXIgSHQ9W10sVnQ9Lyg9KVw/KD89JnwkKXxcP1w/LworZGUuYWpheFNldHVw
KHtqc29ucDoiY2FsbGJhY2siLGpzb25wQ2FsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgZT1IdC5wb3Ao
KXx8ZGUuZXhwYW5kbysiXyIrQ3QrKworcmV0dXJuIHRoaXNbZV09ITAsZX19KSxkZS5hamF4UHJl
ZmlsdGVyKCJqc29uIGpzb25wIixmdW5jdGlvbih0LG4scil7dmFyIGksbyxzLGE9ITEhPT10Lmpz
b25wJiYoVnQudGVzdCh0LnVybCk/InVybCI6InN0cmluZyI9PXR5cGVvZiB0LmRhdGEmJjA9PT0o
dC5jb250ZW50VHlwZXx8IiIpLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5j
b2RlZCIpJiZWdC50ZXN0KHQuZGF0YSkmJiJkYXRhIikKK2lmKGF8fCJqc29ucCI9PT10LmRhdGFU
eXBlc1swXSlyZXR1cm4gaT10Lmpzb25wQ2FsbGJhY2s9ZGUuaXNGdW5jdGlvbih0Lmpzb25wQ2Fs
bGJhY2spP3QuanNvbnBDYWxsYmFjaygpOnQuanNvbnBDYWxsYmFjayxhP3RbYV09dFthXS5yZXBs
YWNlKFZ0LCIkMSIraSk6ITEhPT10Lmpzb25wJiYodC51cmwrPShPdC50ZXN0KHQudXJsKT8iJiI6
Ij8iKSt0Lmpzb25wKyI9IitpKSx0LmNvbnZlcnRlcnNbInNjcmlwdCBqc29uIl09ZnVuY3Rpb24o
KXtyZXR1cm4gc3x8ZGUuZXJyb3IoaSsiIHdhcyBub3QgY2FsbGVkIiksc1swXX0sdC5kYXRhVHlw
ZXNbMF09Impzb24iLG89ZVtpXSxlW2ldPWZ1bmN0aW9uKCl7cz1hcmd1bWVudHN9LHIuYWx3YXlz
KGZ1bmN0aW9uKCl7dm9pZCAwPT09bz9kZShlKS5yZW1vdmVQcm9wKGkpOmVbaV09byx0W2ldJiYo
dC5qc29ucENhbGxiYWNrPW4uanNvbnBDYWxsYmFjayxIdC5wdXNoKGkpKSxzJiZkZS5pc0Z1bmN0
aW9uKG8pJiZvKHNbMF0pLHM9bz12b2lkIDB9KSwic2NyaXB0In0pLGhlLmNyZWF0ZUhUTUxEb2N1
bWVudD1mdW5jdGlvbigpe3ZhciBlPW5lLmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVu
dCgiIikuYm9keQorcmV0dXJuIGUuaW5uZXJIVE1MPSI8Zm9ybT48L2Zvcm0+PGZvcm0+PC9mb3Jt
PiIsMj09PWUuY2hpbGROb2Rlcy5sZW5ndGh9KCksZGUucGFyc2VIVE1MPWZ1bmN0aW9uKGUsdCxu
KXtpZigic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuW10KKyJib29sZWFuIj09dHlwZW9mIHQmJihu
PXQsdD0hMSkKK3ZhciByLGksbworcmV0dXJuIHR8fChoZS5jcmVhdGVIVE1MRG9jdW1lbnQ/KHQ9
bmUuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCIiKSxyPXQuY3JlYXRlRWxlbWVu
dCgiYmFzZSIpLHIuaHJlZj1uZS5sb2NhdGlvbi5ocmVmLHQuaGVhZC5hcHBlbmRDaGlsZChyKSk6
dD1uZSksaT14ZS5leGVjKGUpLG89IW4mJltdLGk/W3QuY3JlYXRlRWxlbWVudChpWzFdKV06KGk9
XyhbZV0sdCxvKSxvJiZvLmxlbmd0aCYmZGUobykucmVtb3ZlKCksZGUubWVyZ2UoW10saS5jaGls
ZE5vZGVzKSl9LGRlLmZuLmxvYWQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxzPXRoaXMsYT1l
LmluZGV4T2YoIiAiKQorcmV0dXJuIGE+LTEmJihyPUcoZS5zbGljZShhKSksZT1lLnNsaWNlKDAs
YSkpLGRlLmlzRnVuY3Rpb24odCk/KG49dCx0PXZvaWQgMCk6dCYmIm9iamVjdCI9PXR5cGVvZiB0
JiYoaT0iUE9TVCIpLHMubGVuZ3RoPjAmJmRlLmFqYXgoe3VybDplLHR5cGU6aXx8IkdFVCIsZGF0
YVR5cGU6Imh0bWwiLGRhdGE6dH0pLmRvbmUoZnVuY3Rpb24oZSl7bz1hcmd1bWVudHMscy5odG1s
KHI/ZGUoIjxkaXY+IikuYXBwZW5kKGRlLnBhcnNlSFRNTChlKSkuZmluZChyKTplKX0pLmFsd2F5
cyhuJiZmdW5jdGlvbihlLHQpe3MuZWFjaChmdW5jdGlvbigpe24uYXBwbHkodGhpcyxvfHxbZS5y
ZXNwb25zZVRleHQsdCxlXSl9KX0pLHRoaXN9LGRlLmVhY2goWyJhamF4U3RhcnQiLCJhamF4U3Rv
cCIsImFqYXhDb21wbGV0ZSIsImFqYXhFcnJvciIsImFqYXhTdWNjZXNzIiwiYWpheFNlbmQiXSxm
dW5jdGlvbihlLHQpe2RlLmZuW3RdPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9uKHQsZSl9fSks
ZGUuZXhwci5wc2V1ZG9zLmFuaW1hdGVkPWZ1bmN0aW9uKGUpe3JldHVybiBkZS5ncmVwKGRlLnRp
bWVycyxmdW5jdGlvbih0KXtyZXR1cm4gZT09PXQuZWxlbX0pLmxlbmd0aH0sZGUub2Zmc2V0PXtz
ZXRPZmZzZXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxzLGEsdSxsLGM9ZGUuY3NzKGUsInBv
c2l0aW9uIikscD1kZShlKSxmPXt9Cisic3RhdGljIj09PWMmJihlLnN0eWxlLnBvc2l0aW9uPSJy
ZWxhdGl2ZSIpLGE9cC5vZmZzZXQoKSxvPWRlLmNzcyhlLCJ0b3AiKSx1PWRlLmNzcyhlLCJsZWZ0
IiksbD0oImFic29sdXRlIj09PWN8fCJmaXhlZCI9PT1jKSYmKG8rdSkuaW5kZXhPZigiYXV0byIp
Pi0xLGw/KHI9cC5wb3NpdGlvbigpLHM9ci50b3AsaT1yLmxlZnQpOihzPXBhcnNlRmxvYXQobyl8
fDAsaT1wYXJzZUZsb2F0KHUpfHwwKSxkZS5pc0Z1bmN0aW9uKHQpJiYodD10LmNhbGwoZSxuLGRl
LmV4dGVuZCh7fSxhKSkpLG51bGwhPXQudG9wJiYoZi50b3A9dC50b3AtYS50b3ArcyksbnVsbCE9
dC5sZWZ0JiYoZi5sZWZ0PXQubGVmdC1hLmxlZnQraSksInVzaW5nImluIHQ/dC51c2luZy5jYWxs
KGUsZik6cC5jc3MoZil9fSxkZS5mbi5leHRlbmQoe29mZnNldDpmdW5jdGlvbihlKXtpZihhcmd1
bWVudHMubGVuZ3RoKXJldHVybiB2b2lkIDA9PT1lP3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKHQp
e2RlLm9mZnNldC5zZXRPZmZzZXQodGhpcyxlLHQpfSkKK3ZhciB0LG4scixpLG89dGhpc1swXQor
aWYobylyZXR1cm4gby5nZXRDbGllbnRSZWN0cygpLmxlbmd0aD8ocj1vLmdldEJvdW5kaW5nQ2xp
ZW50UmVjdCgpLHQ9by5vd25lckRvY3VtZW50LG49dC5kb2N1bWVudEVsZW1lbnQsaT10LmRlZmF1
bHRWaWV3LHt0b3A6ci50b3AraS5wYWdlWU9mZnNldC1uLmNsaWVudFRvcCxsZWZ0OnIubGVmdCtp
LnBhZ2VYT2Zmc2V0LW4uY2xpZW50TGVmdH0pOnt0b3A6MCxsZWZ0OjB9fSxwb3NpdGlvbjpmdW5j
dGlvbigpe2lmKHRoaXNbMF0pe3ZhciBlLHQsbj10aGlzWzBdLHI9e3RvcDowLGxlZnQ6MH0KK3Jl
dHVybiJmaXhlZCI9PT1kZS5jc3MobiwicG9zaXRpb24iKT90PW4uZ2V0Qm91bmRpbmdDbGllbnRS
ZWN0KCk6KGU9dGhpcy5vZmZzZXRQYXJlbnQoKSx0PXRoaXMub2Zmc2V0KCksaShlWzBdLCJodG1s
Iil8fChyPWUub2Zmc2V0KCkpLHI9e3RvcDpyLnRvcCtkZS5jc3MoZVswXSwiYm9yZGVyVG9wV2lk
dGgiLCEwKSxsZWZ0OnIubGVmdCtkZS5jc3MoZVswXSwiYm9yZGVyTGVmdFdpZHRoIiwhMCl9KSx7
dG9wOnQudG9wLXIudG9wLWRlLmNzcyhuLCJtYXJnaW5Ub3AiLCEwKSxsZWZ0OnQubGVmdC1yLmxl
ZnQtZGUuY3NzKG4sIm1hcmdpbkxlZnQiLCEwKX19fSxvZmZzZXRQYXJlbnQ6ZnVuY3Rpb24oKXty
ZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5vZmZzZXRQYXJlbnQ7ZSYm
InN0YXRpYyI9PT1kZS5jc3MoZSwicG9zaXRpb24iKTspZT1lLm9mZnNldFBhcmVudAorcmV0dXJu
IGV8fFFlfSl9fSksZGUuZWFjaCh7c2Nyb2xsTGVmdDoicGFnZVhPZmZzZXQiLHNjcm9sbFRvcDoi
cGFnZVlPZmZzZXQifSxmdW5jdGlvbihlLHQpe3ZhciBuPSJwYWdlWU9mZnNldCI9PT10CitkZS5m
bltlXT1mdW5jdGlvbihyKXtyZXR1cm4gUGUodGhpcyxmdW5jdGlvbihlLHIsaSl7dmFyIG8KK2lm
KGRlLmlzV2luZG93KGUpP289ZTo5PT09ZS5ub2RlVHlwZSYmKG89ZS5kZWZhdWx0Vmlldyksdm9p
ZCAwPT09aSlyZXR1cm4gbz9vW3RdOmVbcl0KK28/by5zY3JvbGxUbyhuP28ucGFnZVhPZmZzZXQ6
aSxuP2k6by5wYWdlWU9mZnNldCk6ZVtyXT1pfSxlLHIsYXJndW1lbnRzLmxlbmd0aCl9fSksZGUu
ZWFjaChbInRvcCIsImxlZnQiXSxmdW5jdGlvbihlLHQpe2RlLmNzc0hvb2tzW3RdPWooaGUucGl4
ZWxQb3NpdGlvbixmdW5jdGlvbihlLG4pe2lmKG4pcmV0dXJuIG49UChlLHQpLG90LnRlc3Qobik/
ZGUoZSkucG9zaXRpb24oKVt0XSsicHgiOm59KX0pLGRlLmVhY2goe0hlaWdodDoiaGVpZ2h0IixX
aWR0aDoid2lkdGgifSxmdW5jdGlvbihlLHQpe2RlLmVhY2goe3BhZGRpbmc6ImlubmVyIitlLGNv
bnRlbnQ6dCwiIjoib3V0ZXIiK2V9LGZ1bmN0aW9uKG4scil7ZGUuZm5bcl09ZnVuY3Rpb24oaSxv
KXt2YXIgcz1hcmd1bWVudHMubGVuZ3RoJiYobnx8ImJvb2xlYW4iIT10eXBlb2YgaSksYT1ufHwo
ITA9PT1pfHwhMD09PW8/Im1hcmdpbiI6ImJvcmRlciIpCityZXR1cm4gUGUodGhpcyxmdW5jdGlv
bih0LG4saSl7dmFyIG8KK3JldHVybiBkZS5pc1dpbmRvdyh0KT8wPT09ci5pbmRleE9mKCJvdXRl
ciIpP3RbImlubmVyIitlXTp0LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsiY2xpZW50IitlXTo5
PT09dC5ub2RlVHlwZT8obz10LmRvY3VtZW50RWxlbWVudCxNYXRoLm1heCh0LmJvZHlbInNjcm9s
bCIrZV0sb1sic2Nyb2xsIitlXSx0LmJvZHlbIm9mZnNldCIrZV0sb1sib2Zmc2V0IitlXSxvWyJj
bGllbnQiK2VdKSk6dm9pZCAwPT09aT9kZS5jc3ModCxuLGEpOmRlLnN0eWxlKHQsbixpLGEpfSx0
LHM/aTp2b2lkIDAscyl9fSl9KSxkZS5mbi5leHRlbmQoe2JpbmQ6ZnVuY3Rpb24oZSx0LG4pe3Jl
dHVybiB0aGlzLm9uKGUsbnVsbCx0LG4pfSx1bmJpbmQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhp
cy5vZmYoZSxudWxsLHQpfSxkZWxlZ2F0ZTpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5v
bih0LGUsbixyKX0sdW5kZWxlZ2F0ZTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIDE9PT1hcmd1bWVu
dHMubGVuZ3RoP3RoaXMub2ZmKGUsIioqIik6dGhpcy5vZmYodCxlfHwiKioiLG4pfX0pLGRlLmhv
bGRSZWFkeT1mdW5jdGlvbihlKXtlP2RlLnJlYWR5V2FpdCsrOmRlLnJlYWR5KCEwKX0sZGUuaXNB
cnJheT1BcnJheS5pc0FycmF5LGRlLnBhcnNlSlNPTj1KU09OLnBhcnNlLGRlLm5vZGVOYW1lPWks
ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZCYmZGVmaW5lKCJqcXVlcnkiLFtd
LGZ1bmN0aW9uKCl7cmV0dXJuIGRlfSkKK3ZhciBXdD1lLmpRdWVyeSwkdD1lLiQKK3JldHVybiBk
ZS5ub0NvbmZsaWN0PWZ1bmN0aW9uKHQpe3JldHVybiBlLiQ9PT1kZSYmKGUuJD0kdCksdCYmZS5q
UXVlcnk9PT1kZSYmKGUualF1ZXJ5PVd0KSxkZX0sdHx8KGUualF1ZXJ5PWUuJD1kZSksZGV9KSxm
dW5jdGlvbigpe3ZhciBlLHQsbixyPXRoaXM7KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLHQpe3Ro
cm93IHQ/bmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCBtb2R1bGUgIitlKyIgcmVxdWlyZWQgYnk6
ICIrdCk6bmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCBtb2R1bGUgIitlKX1mdW5jdGlvbiBpKGUs
bil7dmFyIGE9ZSx1PW9bYV0KK3V8fChhKz0iL2luZGV4Iix1PW9bYV0pCit2YXIgbD1zW2FdCitp
Zih2b2lkIDAhPT1sKXJldHVybiBsCitsPXNbYV09e30sdXx8cihlLG4pCitmb3IodmFyIGM9dS5k
ZXBzLHA9dS5jYWxsYmFjayxmPW5ldyBBcnJheShjLmxlbmd0aCksaD0wO2g8Yy5sZW5ndGg7aCsr
KSJleHBvcnRzIj09PWNbaF0/ZltoXT1sOiJyZXF1aXJlIj09PWNbaF0/ZltoXT10OmZbaF09aShj
W2hdLGEpCityZXR1cm4gcC5hcHBseSh0aGlzLGYpLGx9aWYoInVuZGVmaW5lZCI9PXR5cGVvZiB3
aW5kb3cmJiJ1bmRlZmluZWQiIT10eXBlb2YgcHJvY2VzcyYmIltvYmplY3QgcHJvY2Vzc10iPT09
e30udG9TdHJpbmcuY2FsbChwcm9jZXNzKXx8KG49dGhpcy5FbWJlcj10aGlzLkVtYmVyfHx7fSks
dm9pZCAwPT09biYmKG49e30pLHZvaWQgMD09PW4uX19sb2FkZXIpe3ZhciBvPXt9LHM9e30KK2U9
ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXt9CituPyhyLmRlcHM9dCxyLmNhbGxiYWNrPW4pOihyLmRl
cHM9W10sci5jYWxsYmFjaz10KSxvW2VdPXJ9LHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGkoZSxudWxs
KX0sdC5kZWZhdWx0PXQsdC5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuISFvW2VdfHwhIW9bZSsiL2lu
ZGV4Il19LHQuX2Vha19zZWVuPW8sbi5fX2xvYWRlcj17ZGVmaW5lOmUscmVxdWlyZTp0LHJlZ2lz
dHJ5Om99fWVsc2UgZT1uLl9fbG9hZGVyLmRlZmluZSx0PW4uX19sb2FkZXIucmVxdWlyZX0pKCks
ZSgiQGdsaW1tZXIvbm9kZSIsWyJleHBvcnRzIiwiZW1iZXItYmFiZWwiLCJAZ2xpbW1lci9ydW50
aW1lIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IgorZS5Ob2RlRE9NVHJlZUNvbnN0cnVj
dGlvbj12b2lkIDAKK3ZhciByPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIobil7cmV0dXJuKDAsdC5w
b3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuY2FsbCh0aGlzLG4pKX1yZXR1cm4oMCx0
LmluaGVyaXRzKShyLGUpLHIucHJvdG90eXBlLnNldHVwVXNlbGVzc0VsZW1lbnQ9ZnVuY3Rpb24o
KXt9LHIucHJvdG90eXBlLmluc2VydEhUTUxCZWZvcmU9ZnVuY3Rpb24oZSx0LHIpe3ZhciBpPXI/
ci5wcmV2aW91c1NpYmxpbmc6ZS5sYXN0Q2hpbGQsbz10aGlzLmRvY3VtZW50LmNyZWF0ZVJhd0hU
TUxTZWN0aW9uKHQpCitlLmluc2VydEJlZm9yZShvLHIpCit2YXIgcz1pP2kubmV4dFNpYmxpbmc6
ZS5maXJzdENoaWxkLGE9cj9yLnByZXZpb3VzU2libGluZzplLmxhc3RDaGlsZAorcmV0dXJuIG5l
dyBuLkNvbmNyZXRlQm91bmRzKGUscyxhKX0sci5wcm90b3R5cGUuY3JlYXRlRWxlbWVudD1mdW5j
dGlvbihlKXtyZXR1cm4gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KGUpfSxyLnByb3RvdHlw
ZS5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24oZSx0LG4pe2Uuc2V0QXR0cmlidXRlKHQsbil9LHJ9KG4u
RE9NVHJlZUNvbnN0cnVjdGlvbikKK2UuTm9kZURPTVRyZWVDb25zdHJ1Y3Rpb249cn0pLGUoIkBn
bGltbWVyL3JlZmVyZW5jZSIsWyJleHBvcnRzIiwiZW1iZXItYmFiZWwiLCJAZ2xpbW1lci91dGls
Il0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IgorZnVuY3Rpb24gcihlKXtzd2l0Y2goZS5s
ZW5ndGgpe2Nhc2UgMDpyZXR1cm4gaAorY2FzZSAxOnJldHVybiBlWzBdCitjYXNlIDI6cmV0dXJu
IG5ldyBjKGVbMF0sZVsxXSkKK2RlZmF1bHQ6cmV0dXJuIG5ldyBwKGUpfX1lLmlzTW9kaWZpZWQ9
ZS5SZWZlcmVuY2VDYWNoZT1lLm1hcD1lLkNhY2hlZFJlZmVyZW5jZT1lLkNVUlJFTlRfVEFHPWUu
Vk9MQVRJTEVfVEFHPWUuQ09OU1RBTlRfVEFHPWUuVXBkYXRhYmxlVGFnPWUuQ2FjaGVkVGFnPWUu
Y29tYmluZT1lLmNvbWJpbmVTbGljZT1lLmNvbWJpbmVUYWdnZWQ9ZS5EaXJ0eWFibGVUYWc9ZS5S
ZXZpc2lvblRhZz1lLlZPTEFUSUxFPWUuSU5JVElBTD1lLkNPTlNUQU5UPWUuSXRlcmF0b3JTeW5j
aHJvbml6ZXI9ZS5SZWZlcmVuY2VJdGVyYXRvcj1lLkl0ZXJhdGlvbkFydGlmYWN0cz1lLnJlZmVy
ZW5jZUZyb21QYXJ0cz1lLkxpc3RJdGVtPWUuaXNDb25zdD1lLkNvbnN0UmVmZXJlbmNlPXZvaWQg
MAordmFyIGksbz0xLHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlw
ZS52YWxpZGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy52YWx1ZSgpPT09ZX0sZX0oKSxhPW8s
dT1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lk
IDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOmEscj0oMCx0LnBvc3NpYmxlQ29uc3RydWN0
b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMpKQorcmV0dXJuIHIucmV2aXNpb249bixyfXJldHVy
bigwLHQuaW5oZXJpdHMpKG4sZSksbi5wcm90b3R5cGUudmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4g
dGhpcy5yZXZpc2lvbn0sbi5wcm90b3R5cGUuZGlydHk9ZnVuY3Rpb24oKXt0aGlzLnJldmlzaW9u
PSsrYX0sbn0ocyksbD1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7dmFyIG49KDAsdC5wb3NzaWJs
ZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKQorcmV0dXJu
IG4ubGFzdENoZWNrZWQ9bnVsbCxuLmxhc3RWYWx1ZT1udWxsLG59cmV0dXJuKDAsdC5pbmhlcml0
cykobixlKSxuLnByb3RvdHlwZS52YWx1ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGFzdENoZWNr
ZWQKK3RoaXMubGFzdFZhbHVlCityZXR1cm4gZSE9PWEmJih0aGlzLmxhc3RDaGVja2VkPWEsdGhp
cy5sYXN0VmFsdWU9dGhpcy5jb21wdXRlKCkpLHRoaXMubGFzdFZhbHVlfSxuLnByb3RvdHlwZS5p
bnZhbGlkYXRlPWZ1bmN0aW9uKCl7dGhpcy5sYXN0Q2hlY2tlZD1udWxsfSxufShzKSxjPWZ1bmN0
aW9uKGUpe2Z1bmN0aW9uIG4obixyKXt2YXIgaT0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1
cm4pKHRoaXMsZS5jYWxsKHRoaXMpKQorcmV0dXJuIGkuZmlyc3Q9bixpLnNlY29uZD1yLGl9cmV0
dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS5jb21wdXRlPWZ1bmN0aW9uKCl7cmV0
dXJuIE1hdGgubWF4KHRoaXMuZmlyc3QudmFsdWUoKSx0aGlzLnNlY29uZC52YWx1ZSgpKX0sbn0o
bCkscD1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKG4pe3ZhciByPSgwLHQucG9zc2libGVDb25zdHJ1
Y3RvclJldHVybikodGhpcyxlLmNhbGwodGhpcykpCityZXR1cm4gci50YWdzPW4scn1yZXR1cm4o
MCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLmNvbXB1dGU9ZnVuY3Rpb24oKXt2YXIgZSx0
LG49dGhpcy50YWdzLHI9LTEKK2ZvcihlPTA7ZTxuLmxlbmd0aDtlKyspdD1uW2VdLnZhbHVlKCks
cj1NYXRoLm1heCh0LHIpCityZXR1cm4gcn0sbn0obCksZj1mdW5jdGlvbihlKXtmdW5jdGlvbiBu
KG4pe3ZhciByPSgwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmNhbGwodGhp
cykpCityZXR1cm4gci50YWc9bixyLmxhc3RVcGRhdGVkPW8scn1yZXR1cm4oMCx0LmluaGVyaXRz
KShuLGUpLG4ucHJvdG90eXBlLmNvbXB1dGU9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5tYXgodGhp
cy5sYXN0VXBkYXRlZCx0aGlzLnRhZy52YWx1ZSgpKX0sbi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0
aW9uKGUpe2UhPT10aGlzLnRhZyYmKHRoaXMudGFnPWUsdGhpcy5sYXN0VXBkYXRlZD1hLHRoaXMu
aW52YWxpZGF0ZSgpKX0sbn0obCksaD1uZXcoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3JldHVy
bigwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmFwcGx5KHRoaXMsYXJndW1l
bnRzKSl9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS52YWx1ZT1mdW5jdGlv
bigpe3JldHVybiAwfSxufShzKSksZD1uZXcoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3JldHVy
bigwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmFwcGx5KHRoaXMsYXJndW1l
bnRzKSl9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS52YWx1ZT1mdW5jdGlv
bigpe3JldHVybiBOYU59LG59KHMpKSxtPW5ldyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7cmV0
dXJuKDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuYXBwbHkodGhpcyxhcmd1
bWVudHMpKX1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLnZhbHVlPWZ1bmN0
aW9uKCl7cmV0dXJuIGF9LG59KHUpKSxnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMubGFz
dFJldmlzaW9uPW51bGwsdGhpcy5sYXN0VmFsdWU9bnVsbH1yZXR1cm4gZS5wcm90b3R5cGUudmFs
dWU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnRhZyx0PXRoaXMubGFzdFJldmlzaW9uLG49dGhpcy5s
YXN0VmFsdWUKK3JldHVybiB0JiZlLnZhbGlkYXRlKHQpfHwobj10aGlzLmxhc3RWYWx1ZT10aGlz
LmNvbXB1dGUoKSx0aGlzLmxhc3RSZXZpc2lvbj1lLnZhbHVlKCkpLG59LGUucHJvdG90eXBlLmlu
dmFsaWRhdGU9ZnVuY3Rpb24oKXt0aGlzLmxhc3RSZXZpc2lvbj1udWxsfSxlfSgpLHk9ZnVuY3Rp
b24oZSl7ZnVuY3Rpb24gbihuLHIpe3ZhciBpPSgwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVy
bikodGhpcyxlLmNhbGwodGhpcykpCityZXR1cm4gaS50YWc9bi50YWcsaS5yZWZlcmVuY2U9bixp
Lm1hcHBlcj1yLGl9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS5jb21wdXRl
PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yZWZlcmVuY2UKK3JldHVybigwLHRoaXMubWFwcGVyKShl
LnZhbHVlKCkpfSxufShnKSx2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLmxhc3RWYWx1
ZT1udWxsLHRoaXMubGFzdFJldmlzaW9uPW51bGwsdGhpcy5pbml0aWFsaXplZD0hMSx0aGlzLnRh
Zz1lLnRhZyx0aGlzLnJlZmVyZW5jZT1lfXJldHVybiBlLnByb3RvdHlwZS5wZWVrPWZ1bmN0aW9u
KCl7cmV0dXJuIHRoaXMuaW5pdGlhbGl6ZWQ/dGhpcy5sYXN0VmFsdWU6dGhpcy5pbml0aWFsaXpl
KCl9LGUucHJvdG90eXBlLnJldmFsaWRhdGU9ZnVuY3Rpb24oKXtpZighdGhpcy5pbml0aWFsaXpl
ZClyZXR1cm4gdGhpcy5pbml0aWFsaXplKCkKK3ZhciBlPXRoaXMucmVmZXJlbmNlLHQ9dGhpcy5s
YXN0UmV2aXNpb24sbj1lLnRhZworaWYobi52YWxpZGF0ZSh0KSlyZXR1cm4gYgordGhpcy5sYXN0
UmV2aXNpb249bi52YWx1ZSgpCit2YXIgcj10aGlzLmxhc3RWYWx1ZSxpPWUudmFsdWUoKQorcmV0
dXJuIGk9PT1yP2I6KHRoaXMubGFzdFZhbHVlPWksaSl9LGUucHJvdG90eXBlLmluaXRpYWxpemU9
ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJlZmVyZW5jZSx0PXRoaXMubGFzdFZhbHVlPWUudmFsdWUo
KQorcmV0dXJuIHRoaXMubGFzdFJldmlzaW9uPWUudGFnLnZhbHVlKCksdGhpcy5pbml0aWFsaXpl
ZD0hMCx0fSxlfSgpLGI9ImFkYjNiNzhlLTNkMjItNGU0Yi04NzdhLTYzMTdjMmM1YzE0NSIsXz1m
dW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5pbm5lcj1lLHRoaXMudGFnPWh9cmV0dXJuIGUu
cHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5uZXJ9LGV9KCksdz1mdW5j
dGlvbihlKXtmdW5jdGlvbiBuKG4scil7dmFyIGk9KDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0
dXJuKSh0aGlzLGUuY2FsbCh0aGlzLG4udmFsdWVSZWZlcmVuY2VGb3IocikpKQorcmV0dXJuIGku
cmV0YWluZWQ9ITEsaS5zZWVuPSExLGkua2V5PXIua2V5LGkuaXRlcmFibGU9bixpLm1lbW89bi5t
ZW1vUmVmZXJlbmNlRm9yKHIpLGl9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlw
ZS51cGRhdGU9ZnVuY3Rpb24oZSl7dGhpcy5yZXRhaW5lZD0hMCx0aGlzLml0ZXJhYmxlLnVwZGF0
ZVZhbHVlUmVmZXJlbmNlKHRoaXMudmFsdWUsZSksdGhpcy5pdGVyYWJsZS51cGRhdGVNZW1vUmVm
ZXJlbmNlKHRoaXMubWVtbyxlKX0sbi5wcm90b3R5cGUuc2hvdWxkUmVtb3ZlPWZ1bmN0aW9uKCl7
cmV0dXJuIXRoaXMucmV0YWluZWR9LG4ucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5y
ZXRhaW5lZD0hMSx0aGlzLnNlZW49ITF9LG59KG4uTGlzdE5vZGUpLEU9ZnVuY3Rpb24oKXtmdW5j
dGlvbiBlKGUpe3RoaXMubWFwPSgwLG4uZGljdCkoKSx0aGlzLmxpc3Q9bmV3IG4uTGlua2VkTGlz
dCx0aGlzLnRhZz1lLnRhZyx0aGlzLml0ZXJhYmxlPWV9cmV0dXJuIGUucHJvdG90eXBlLmlzRW1w
dHk9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5pdGVyYXRvcj10aGlzLml0ZXJhYmxlLml0ZXJhdGUo
KSkuaXNFbXB0eSgpfSxlLnByb3RvdHlwZS5pdGVyYXRlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5p
dGVyYXRvcnx8dGhpcy5pdGVyYWJsZS5pdGVyYXRlKCkKK3JldHVybiB0aGlzLml0ZXJhdG9yPW51
bGwsZX0sZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiEhdGhpcy5tYXBbZV19LGUu
cHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5tYXBbZV19LGUucHJvdG90eXBl
Lndhc1NlZW49ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5tYXBbZV0KK3JldHVybiB0JiZ0LnNlZW59
LGUucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLm1hcCxuPXRoaXMubGlz
dCxyPXRoaXMuaXRlcmFibGUsaT10W2Uua2V5XT1uZXcgdyhyLGUpCityZXR1cm4gbi5hcHBlbmQo
aSksaX0sZS5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5t
YXAscj10aGlzLmxpc3QsaT10aGlzLml0ZXJhYmxlLG89bltlLmtleV09bmV3IHcoaSxlKQorcmV0
dXJuIG8ucmV0YWluZWQ9ITAsci5pbnNlcnRCZWZvcmUobyx0KSxvfSxlLnByb3RvdHlwZS5tb3Zl
PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5saXN0CitlLnJldGFpbmVkPSEwLG4ucmVtb3ZlKGUp
LG4uaW5zZXJ0QmVmb3JlKGUsdCl9LGUucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihlKXt0aGlz
Lmxpc3QucmVtb3ZlKGUpLGRlbGV0ZSB0aGlzLm1hcFtlLmtleV19LGUucHJvdG90eXBlLm5leHRO
b2RlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmxpc3QubmV4dE5vZGUoZSl9LGUucHJvdG90eXBl
LmhlYWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5saXN0LmhlYWQoKX0sZX0oKSx4PWZ1bmN0aW9u
KCl7ZnVuY3Rpb24gZShlKXt0aGlzLml0ZXJhdG9yPW51bGwKK3ZhciB0PW5ldyBFKGUpCit0aGlz
LmFydGlmYWN0cz10fXJldHVybiBlLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7dmFyIGU9dGhp
cy5hcnRpZmFjdHMsdD10aGlzLml0ZXJhdG9yPXRoaXMuaXRlcmF0b3J8fGUuaXRlcmF0ZSgpLG49
dC5uZXh0KCkKK3JldHVybiBuP2UuYXBwZW5kKG4pOm51bGx9LGV9KCk7KGZ1bmN0aW9uKGUpe2Vb
ZS5BcHBlbmQ9MF09IkFwcGVuZCIsZVtlLlBydW5lPTFdPSJQcnVuZSIsZVtlLkRvbmU9Ml09IkRv
bmUifSkoaXx8KGk9e30pKQordmFyIEM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZhciB0PWUu
dGFyZ2V0LG49ZS5hcnRpZmFjdHMKK3RoaXMudGFyZ2V0PXQsdGhpcy5hcnRpZmFjdHM9bix0aGlz
Lml0ZXJhdG9yPW4uaXRlcmF0ZSgpLHRoaXMuY3VycmVudD1uLmhlYWQoKX1yZXR1cm4gZS5wcm90
b3R5cGUuc3luYz1mdW5jdGlvbigpe2Zvcih2YXIgZT1pLkFwcGVuZDs7KXN3aXRjaChlKXtjYXNl
IGkuQXBwZW5kOmU9dGhpcy5uZXh0QXBwZW5kKCkKK2JyZWFrCitjYXNlIGkuUHJ1bmU6ZT10aGlz
Lm5leHRQcnVuZSgpCiticmVhaworY2FzZSBpLkRvbmU6cmV0dXJuIHZvaWQgdGhpcy5uZXh0RG9u
ZSgpfX0sZS5wcm90b3R5cGUuYWR2YW5jZVRvS2V5PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlz
LmN1cnJlbnQsbj10aGlzLmFydGlmYWN0cyxyPXQ7ciYmci5rZXkhPT1lOylyLnNlZW49ITAscj1u
Lm5leHROb2RlKHIpCit0aGlzLmN1cnJlbnQ9ciYmbi5uZXh0Tm9kZShyKX0sZS5wcm90b3R5cGUu
bmV4dEFwcGVuZD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuaXRlcmF0b3IsdD10aGlzLmN1cnJlbnQs
bj10aGlzLmFydGlmYWN0cyxyPWUubmV4dCgpCitpZihudWxsPT09cilyZXR1cm4gdGhpcy5zdGFy
dFBydW5lKCkKK3ZhciBvPXIua2V5CityZXR1cm4gdCYmdC5rZXk9PT1vP3RoaXMubmV4dFJldGFp
bihyKTpuLmhhcyhvKT90aGlzLm5leHRNb3ZlKHIpOnRoaXMubmV4dEluc2VydChyKSxpLkFwcGVu
ZH0sZS5wcm90b3R5cGUubmV4dFJldGFpbj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmFydGlmYWN0
cyxyPXRoaXMuY3VycmVudAorcj0oMCxuLmV4cGVjdCkociwiQlVHOiBjdXJyZW50IGlzIGVtcHR5
Iiksci51cGRhdGUoZSksdGhpcy5jdXJyZW50PXQubmV4dE5vZGUociksdGhpcy50YXJnZXQucmV0
YWluKGUua2V5LHIudmFsdWUsci5tZW1vKX0sZS5wcm90b3R5cGUubmV4dE1vdmU9ZnVuY3Rpb24o
ZSl7dmFyIHQ9dGhpcy5jdXJyZW50LG49dGhpcy5hcnRpZmFjdHMscj10aGlzLnRhcmdldCxpPWUu
a2V5LG89bi5nZXQoZS5rZXkpCitvLnVwZGF0ZShlKSxuLndhc1NlZW4oZS5rZXkpPyhuLm1vdmUo
byx0KSxyLm1vdmUoby5rZXksby52YWx1ZSxvLm1lbW8sdD90LmtleTpudWxsKSk6dGhpcy5hZHZh
bmNlVG9LZXkoaSl9LGUucHJvdG90eXBlLm5leHRJbnNlcnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhp
cy5hcnRpZmFjdHMsbj10aGlzLnRhcmdldCxyPXRoaXMuY3VycmVudCxpPXQuaW5zZXJ0QmVmb3Jl
KGUscikKK24uaW5zZXJ0KGkua2V5LGkudmFsdWUsaS5tZW1vLHI/ci5rZXk6bnVsbCl9LGUucHJv
dG90eXBlLnN0YXJ0UHJ1bmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50PXRoaXMuYXJ0
aWZhY3RzLmhlYWQoKSxpLlBydW5lfSxlLnByb3RvdHlwZS5uZXh0UHJ1bmU9ZnVuY3Rpb24oKXt2
YXIgZT10aGlzLmFydGlmYWN0cyx0PXRoaXMudGFyZ2V0LG49dGhpcy5jdXJyZW50CitpZihudWxs
PT09bilyZXR1cm4gaS5Eb25lCit2YXIgcj1uCityZXR1cm4gdGhpcy5jdXJyZW50PWUubmV4dE5v
ZGUociksci5zaG91bGRSZW1vdmUoKT8oZS5yZW1vdmUociksdC5kZWxldGUoci5rZXkpKTpyLnJl
c2V0KCksaS5QcnVuZX0sZS5wcm90b3R5cGUubmV4dERvbmU9ZnVuY3Rpb24oKXt0aGlzLnRhcmdl
dC5kb25lKCl9LGV9KCkKK2UuQ29uc3RSZWZlcmVuY2U9XyxlLmlzQ29uc3Q9ZnVuY3Rpb24oZSl7
cmV0dXJuIGUudGFnPT09aH0sZS5MaXN0SXRlbT13LGUucmVmZXJlbmNlRnJvbVBhcnRzPWZ1bmN0
aW9uKGUsdCl7dmFyIG4scj1lCitmb3Iobj0wO248dC5sZW5ndGg7bisrKXI9ci5nZXQodFtuXSkK
K3JldHVybiByfSxlLkl0ZXJhdGlvbkFydGlmYWN0cz1FLGUuUmVmZXJlbmNlSXRlcmF0b3I9eCxl
Lkl0ZXJhdG9yU3luY2hyb25pemVyPUMsZS5DT05TVEFOVD0wLGUuSU5JVElBTD1vLGUuVk9MQVRJ
TEU9TmFOLGUuUmV2aXNpb25UYWc9cyxlLkRpcnR5YWJsZVRhZz11LGUuY29tYmluZVRhZ2dlZD1m
dW5jdGlvbihlKXt2YXIgdCxuLGksbz1bXQorZm9yKHQ9MCxuPWUubGVuZ3RoO3Q8bjt0Kyspe2lm
KChpPWVbdF0udGFnKT09PWQpcmV0dXJuIGQKK2khPT1oJiZvLnB1c2goaSl9cmV0dXJuIHIobyl9
LGUuY29tYmluZVNsaWNlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPVtdLGk9ZS5oZWFkKCk7bnVs
bCE9PWk7KXtpZigodD1pLnRhZyk9PT1kKXJldHVybiBkCit0IT09aCYmbi5wdXNoKHQpLGk9ZS5u
ZXh0Tm9kZShpKX1yZXR1cm4gcihuKX0sZS5jb21iaW5lPWZ1bmN0aW9uKGUpe3ZhciB0LG4saSxv
PVtdCitmb3IodD0wLG49ZS5sZW5ndGg7dDxuO3QrKyl7aWYoKGk9ZVt0XSk9PT1kKXJldHVybiBk
CitpIT09aCYmby5wdXNoKGkpfXJldHVybiByKG8pfSxlLkNhY2hlZFRhZz1sLGUuVXBkYXRhYmxl
VGFnPWYsZS5DT05TVEFOVF9UQUc9aCxlLlZPTEFUSUxFX1RBRz1kLGUuQ1VSUkVOVF9UQUc9bSxl
LkNhY2hlZFJlZmVyZW5jZT1nLGUubWFwPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyB5KGUsdCl9
LGUuUmVmZXJlbmNlQ2FjaGU9dixlLmlzTW9kaWZpZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUhPT1i
fX0pLGUoIkBnbGltbWVyL3J1bnRpbWUiLFsiZXhwb3J0cyIsImVtYmVyLWJhYmVsIiwiQGdsaW1t
ZXIvdXRpbCIsIkBnbGltbWVyL3JlZmVyZW5jZSIsIkBnbGltbWVyL3dpcmUtZm9ybWF0Il0sZnVu
Y3Rpb24oZSx0LG4scixpKXsidXNlIHN0cmljdCIKK2Z1bmN0aW9uIG8oZSx0KXtyZXR1cm4gbmV3
IEplKGUsdCl9ZnVuY3Rpb24gcyhlLHQpe2Zvcih2YXIgbixyPWUucGFyZW50RWxlbWVudCgpLGk9
ZS5maXJzdE5vZGUoKSxvPWUubGFzdE5vZGUoKSxzPWk7czspe2lmKG49cy5uZXh0U2libGluZyxy
Lmluc2VydEJlZm9yZShzLHQpLHM9PT1vKXJldHVybiBuCitzPW59cmV0dXJuIG51bGx9ZnVuY3Rp
b24gYShlKXtmb3IodmFyIHQsbj1lLnBhcmVudEVsZW1lbnQoKSxyPWUuZmlyc3ROb2RlKCksaT1l
Lmxhc3ROb2RlKCksbz1yO287KXtpZih0PW8ubmV4dFNpYmxpbmcsbi5yZW1vdmVDaGlsZChvKSxv
PT09aSlyZXR1cm4gdAorbz10fXJldHVybiBudWxsfWZ1bmN0aW9uIHUoZSl7cmV0dXJuISFlJiYi
ZnVuY3Rpb24iPT10eXBlb2YgZS50b0hUTUx9ZnVuY3Rpb24gbChlKXtyZXR1cm4gbnVsbCE9PWUm
JiJvYmplY3QiPT10eXBlb2YgZSYmIm51bWJlciI9PXR5cGVvZiBlLm5vZGVUeXBlfWZ1bmN0aW9u
IGMoZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlfWZ1bmN0aW9uIHAoZSx0LHIpe2lmKGMocikp
cmV0dXJuIFplLmluc2VydChlLHQscikKK2lmKHUocikpcmV0dXJuIHR0Lmluc2VydChlLHQscikK
K2lmKGwocikpcmV0dXJuIG50Lmluc2VydChlLHQscikKK3Rocm93KDAsbi51bnJlYWNoYWJsZSko
KX1mdW5jdGlvbiBmKGUsdCxyKXtpZihjKHIpKXJldHVybiBldC5pbnNlcnQoZSx0LHIpCitpZihs
KHIpKXJldHVybiBudC5pbnNlcnQoZSx0LHIpCit0aHJvdygwLG4udW5yZWFjaGFibGUpKCl9ZnVu
Y3Rpb24gaChlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGUmJmUmJmVbcnRdfWZ1bmN0aW9uIGQo
ZSl7dmFyIHQsbixyPVtdCitmb3IodD0wO3Q8ZS5sZW5ndGg7dCsrKSExIT09KG49ZVt0XS52YWx1
ZSgpKSYmbnVsbCE9PW4mJnZvaWQgMCE9PW4mJnIucHVzaChuKQorcmV0dXJuIDA9PT1yLmxlbmd0
aD9udWxsOnIuam9pbigiICIpfWZ1bmN0aW9uIG0oZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KCI8
IitlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSsiIC8+Iil9ZnVuY3Rpb24gZyhlKXtyZXR1cm4gZSYm
ImZ1bmN0aW9uIj09dHlwZW9mIGUuY29tcGlsZX1mdW5jdGlvbiB5KGUpe3ZhciB0PWVbMF0KK3Jl
dHVybiB0PT09aS5PcHMuT3BlbkVsZW1lbnR8fHQ9PT1pLk9wcy5PcGVuUHJpbWl0aXZlRWxlbWVu
dH1mdW5jdGlvbiB2KGUsdCl7cmV0dXJuIG5ldyBrdCh0LGUpfWZ1bmN0aW9uIGIoZSl7cmV0dXJu
IG5ldyBNdChlKX1mdW5jdGlvbiBfKGUsdCxuLHIpe3ZhciBpPUUodCxuLHIpLG89aS5uYW1lZCxz
PWkueWllbGRzLGE9aS5wYXJ0aWFsU3ltYm9sLHU9aS5zaXplCityZXR1cm4gbmV3IE10KGUsbyxz
LGEsdSl9ZnVuY3Rpb24gdyhlLHQpe3ZhciByLGk9bnVsbCxvPWUucHJvZ3JhbQorcmV0dXJuIDAh
PT10Lmxlbmd0aCYmKHI9aT0oMCxuLmRpY3QpKCksdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVy
biByW2VdPW8uc2l6ZSsrfSkpLG5ldyBGdChlLG8saSl9ZnVuY3Rpb24gRShlLHQscil7dmFyIGks
byxzPW51bGwsYT1udWxsLHU9MQorcmV0dXJuIDAhPT10Lmxlbmd0aCYmKGk9cz0oMCxuLmRpY3Qp
KCksdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBpW2VdPXUrK30pKSwwIT09ZS5sZW5ndGgm
JihvPWE9KDAsbi5kaWN0KSgpLGUuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gb1tlXT11Kyt9
KSkse25hbWVkOmEseWllbGRzOnMscGFydGlhbFN5bWJvbDpyP3UrKzpudWxsLHNpemU6dX19ZnVu
Y3Rpb24geChlLHQpe3ZhciBuPVV0LnNwZWNpYWxpemUoZSx0LnN5bWJvbFRhYmxlKQorZG4uY29t
cGlsZShuLHQpfWZ1bmN0aW9uIEMoZSx0LG4pe3ZhciByPWUuc3RhdGVtZW50cworcmV0dXJuIG5l
dyBKdChuLHQscikuc2NhbigpfWZ1bmN0aW9uIE8oZSl7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9m
IGUudG9TdHJpbmc/IiI6U3RyaW5nKGUpfWZ1bmN0aW9uIEEoZSx0KXtyZXR1cm4gY29uc29sZS5p
bmZvKCJVc2UgYGNvbnRleHRgLCBhbmQgYGdldCg8cGF0aD4pYCB0byBkZWJ1ZyB0aGlzIHRlbXBs
YXRlLiIpLHtjb250ZXh0OmUsZ2V0OnR9fWZ1bmN0aW9uIFQoZSx0KXtyZXR1cm4gZnVuY3Rpb24o
bil7dmFyIHI9bi5zcGxpdCgiLiIpCityZXR1cm4idGhpcyI9PT1yWzBdJiYoclswXT1udWxsKSxE
KHIsdCkuZXZhbHVhdGUoZSl9fWZ1bmN0aW9uIFMoZSx0KXtyZXR1cm4gQXJyYXkuaXNBcnJheShl
KT9tbi5jb21waWxlKGUsdCk6bmV3IHd0KGUpfWZ1bmN0aW9uIFIoZSx0LG4pe3ZhciByPVAoZSxu
KSxpPWoodCxuKQorcmV0dXJuIEhlLmNyZWF0ZShyLGkscWUpfWZ1bmN0aW9uIGsoZSx0LG4scil7
dmFyIGk9UChlLHIpLG89aih0LHIpCityZXR1cm4gSGUuY3JlYXRlKGksbyxuKX1mdW5jdGlvbiBO
KGUsdCl7dmFyIG49ZVswXSxyPWVbMV0saT1lWzJdLG89ZVszXQorcmV0dXJuIEhlLmNyZWF0ZShQ
KG4sdCksaihyLHQpLHtkZWZhdWx0OmksaW52ZXJzZTpvfSl9ZnVuY3Rpb24gUChlLHQpe2lmKCFl
fHwwPT09ZS5sZW5ndGgpcmV0dXJuIExlCit2YXIgbixyPW5ldyBBcnJheShlLmxlbmd0aCkKK2Zv
cihuPTA7bjxlLmxlbmd0aDtuKyspcltuXT1TKGVbbl0sdCkKK3JldHVybiBEZS5jcmVhdGUocil9
ZnVuY3Rpb24gaihlLHQpe2lmKCFlKXJldHVybiB6ZQordmFyIG4scj1lWzBdLGk9ZVsxXQoraWYo
MD09PXIubGVuZ3RoKXJldHVybiB6ZQordmFyIG89bmV3IEFycmF5KGkubGVuZ3RoKQorZm9yKG49
MDtuPGkubGVuZ3RoO24rKylvW25dPVMoaVtuXSx0KQorcmV0dXJuIG5ldyBGZShyLG8pfWZ1bmN0
aW9uIEQoZSx0KXt2YXIgbixyLGksbyxzLGE9ZVswXSx1PXZvaWQgMAorcmV0dXJuIG51bGw9PT1h
PyhuPW5ldyBadCxyPWUuc2xpY2UoMSksWHQuY3JlYXRlKG4scikpOih1PXQuc3ltYm9sVGFibGUu
Z2V0U3ltYm9sKCJsb2NhbCIsYSkpPyhpPWUuc2xpY2UoMSksbz1uZXcgZW4odSxhKSxYdC5jcmVh
dGUobyxpKSk6KHM9bmV3IFp0LFh0LmNyZWF0ZShzLGUpKX1mdW5jdGlvbiBMKCl7dmFyIGU9YXJn
dW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm5ldyBn
bix0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sx
XTpuZXcgdm4KK3JldHVybiBlLmFkZCgiaWYiLGZ1bmN0aW9uKGUsdCl7dmFyIHI9ZVsyXSxpPWVb
M10sbz1lWzRdLHM9ZVs1XSxhPVIocixpLHQpCit0LnB1dEFyZ3MoYSksdC50ZXN0KCJlbnZpcm9u
bWVudCIpLHQubGFiZWxsZWQobnVsbCxmdW5jdGlvbihlKXtpZihvJiZzKWUuanVtcFVubGVzcygi
RUxTRSIpLGUuZXZhbHVhdGUobyksZS5qdW1wKCJFTkQiKSxlLmxhYmVsKCJFTFNFIiksZS5ldmFs
dWF0ZShzKQorZWxzZXtpZighbyl0aHJvdygwLG4udW5yZWFjaGFibGUpKCkKK2UuanVtcFVubGVz
cygiRU5EIiksZS5ldmFsdWF0ZShvKX19KX0pLGUuYWRkKCItaW4tZWxlbWVudCIsZnVuY3Rpb24o
ZSx0KXt2YXIgcj11bihlKSxpPVIobG4oZSksbnVsbCx0KQordC5wdXRBcmdzKGkpLHQudGVzdCgi
c2ltcGxlIiksdC5sYWJlbGxlZChudWxsLGZ1bmN0aW9uKGUpe2UuanVtcFVubGVzcygiRU5EIiks
ZS5wdXNoUmVtb3RlRWxlbWVudCgpLGUuZXZhbHVhdGUoKDAsbi51bndyYXApKHIpKSxlLnBvcFJl
bW90ZUVsZW1lbnQoKX0pfSksZS5hZGQoIi13aXRoLWR5bmFtaWMtdmFycyIsZnVuY3Rpb24oZSx0
KXt2YXIgcj11bihlKSxpPVIobG4oZSksY24oZSksdCkKK3QudW5pdChmdW5jdGlvbihlKXtlLnB1
dEFyZ3MoaSksZS5wdXNoRHluYW1pY1Njb3BlKCksZS5iaW5kRHluYW1pY1Njb3BlKGkubmFtZWQu
a2V5cyksZS5ldmFsdWF0ZSgoMCxuLnVud3JhcCkocikpLGUucG9wRHluYW1pY1Njb3BlKCl9KX0p
LGUuYWRkKCJ1bmxlc3MiLGZ1bmN0aW9uKGUsdCl7dmFyIHI9ZVsyXSxpPWVbM10sbz1lWzRdLHM9
ZVs1XSxhPVIocixpLHQpCit0LnB1dEFyZ3MoYSksdC50ZXN0KCJlbnZpcm9ubWVudCIpLHQubGFi
ZWxsZWQobnVsbCxmdW5jdGlvbihlKXtpZihvJiZzKWUuanVtcElmKCJFTFNFIiksZS5ldmFsdWF0
ZShvKSxlLmp1bXAoIkVORCIpLGUubGFiZWwoIkVMU0UiKSxlLmV2YWx1YXRlKHMpCitlbHNle2lm
KCFvKXRocm93KDAsbi51bnJlYWNoYWJsZSkoKQorZS5qdW1wSWYoIkVORCIpLGUuZXZhbHVhdGUo
byl9fSl9KSxlLmFkZCgid2l0aCIsZnVuY3Rpb24oZSx0KXt2YXIgcj1lWzJdLGk9ZVszXSxvPWVb
NF0scz1lWzVdLGE9UihyLGksdCkKK3QucHV0QXJncyhhKSx0LnRlc3QoImVudmlyb25tZW50Iiks
dC5sYWJlbGxlZChudWxsLGZ1bmN0aW9uKGUpe2lmKG8mJnMpZS5qdW1wVW5sZXNzKCJFTFNFIiks
ZS5ldmFsdWF0ZShvKSxlLmp1bXAoIkVORCIpLGUubGFiZWwoIkVMU0UiKSxlLmV2YWx1YXRlKHMp
CitlbHNle2lmKCFvKXRocm93KDAsbi51bnJlYWNoYWJsZSkoKQorZS5qdW1wVW5sZXNzKCJFTkQi
KSxlLmV2YWx1YXRlKG8pfX0pfSksZS5hZGQoImVhY2giLGZ1bmN0aW9uKGUsdCl7dmFyIHI9ZVsy
XSxpPWVbM10sbz1lWzRdLHM9ZVs1XSxhPVIocixpLHQpCit0LmxhYmVsbGVkKGEsZnVuY3Rpb24o
ZSl7ZS5wdXRJdGVyYXRvcigpLHM/ZS5qdW1wVW5sZXNzKCJFTFNFIik6ZS5qdW1wVW5sZXNzKCJF
TkQiKSxlLml0ZXIoZnVuY3Rpb24oZSl7ZS5ldmFsdWF0ZSgoMCxuLnVud3JhcCkobykpfSkscyYm
KGUuanVtcCgiRU5EIiksZS5sYWJlbCgiRUxTRSIpLGUuZXZhbHVhdGUocykpfSl9KSx7YmxvY2tz
OmUsaW5saW5lczp0fX1mdW5jdGlvbiBJKGUsdCl7cmV0dXJuLTEhPT1lLmluZGV4T2YodCl9ZnVu
Y3Rpb24gTShlLHQpe3JldHVybihudWxsPT09ZXx8SShfbixlKSkmJkkoRW4sdCl9ZnVuY3Rpb24g
RihlLHQpe3JldHVybiBudWxsIT09ZSYmKEkod24sZSkmJkkoeG4sdCkpfWZ1bmN0aW9uIHooZSx0
KXtyZXR1cm4gTShlLHQpfHxGKGUsdCl9ZnVuY3Rpb24gVShlLHQsbixyKXt2YXIgaSxvPW51bGwK
K2lmKG51bGw9PT1yfHx2b2lkIDA9PT1yKXJldHVybiByCitpZih1KHIpKXJldHVybiByLnRvSFRN
TCgpCitvPXQ/dC50YWdOYW1lLnRvVXBwZXJDYXNlKCk6bnVsbAordmFyIHM9dWUocikKK3JldHVy
biBNKG8sbikmJihpPWUucHJvdG9jb2xGb3JVUkwocyksSShibixpKSk/InVuc2FmZToiK3M6Rihv
LG4pPyJ1bnNhZmU6IitzOnN9ZnVuY3Rpb24gQihlLHQpe3ZhciBuLHI9dm9pZCAwLGk9dm9pZCAw
CityZXR1cm4gdCBpbiBlPyhpPXQscj0icHJvcCIpOihuPXQudG9Mb3dlckNhc2UoKSxuIGluIGU/
KHI9InByb3AiLGk9bik6KHI9ImF0dHIiLGk9dCkpLCJwcm9wIiE9PXJ8fCJzdHlsZSIhPT1pLnRv
TG93ZXJDYXNlKCkmJiFxKGUudGFnTmFtZSxpKXx8KHI9ImF0dHIiKSx7bm9ybWFsaXplZDppLHR5
cGU6cn19ZnVuY3Rpb24gcShlLHQpe3ZhciBuPUNuW2UudG9VcHBlckNhc2UoKV0KK3JldHVybiBu
JiZuW3QudG9Mb3dlckNhc2UoKV18fCExfWZ1bmN0aW9uIEgoZSxuKXtpZighZSlyZXR1cm4gbgor
aWYoIVcoZSkpcmV0dXJuIG4KK3ZhciByPWUuY3JlYXRlRWxlbWVudCgiZGl2IikKK3JldHVybiBm
dW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7cmV0dXJuKDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0
dXJuKSh0aGlzLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCx0LmluaGVyaXRzKShu
LGUpLG4ucHJvdG90eXBlLmluc2VydEhUTUxCZWZvcmU9ZnVuY3Rpb24odCxuLGkpe2lmKG51bGw9
PT1ufHwiIj09PW4pcmV0dXJuIGUucHJvdG90eXBlLmluc2VydEhUTUxCZWZvcmUuY2FsbCh0aGlz
LHQsbixpKQordmFyIG89dC50YWdOYW1lLnRvTG93ZXJDYXNlKCkscz1PbltvXQorcmV0dXJuIHZv
aWQgMD09PXM/ZS5wcm90b3R5cGUuaW5zZXJ0SFRNTEJlZm9yZS5jYWxsKHRoaXMsdCxuLGkpOlYo
dCxzLHIsbixpKX0sbn0obil9ZnVuY3Rpb24gVihlLHQsbixyLGkpe3ZhciBvLHM9dC5iZWZvcmUr
cit0LmFmdGVyCituLmlubmVySFRNTD1zCit2YXIgYT1uCitmb3Iobz0wO288dC5kZXB0aDtvKysp
YT1hLmNoaWxkTm9kZXNbMF0KK3ZhciB1PUooYSxlLGkpLGw9dVswXSxjPXVbMV0KK3JldHVybiBu
ZXcgWWUoZSxsLGMpfWZ1bmN0aW9uIFcoZSl7dmFyIHQ9ZS5jcmVhdGVFbGVtZW50KCJ0YWJsZSIp
Cit0cnl7dC5pbm5lckhUTUw9Ijx0Ym9keT48L3Rib2R5PiJ9Y2F0Y2goZSl7fWZpbmFsbHl7aWYo
MCE9PXQuY2hpbGROb2Rlcy5sZW5ndGgpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gJChlLG4s
cil7aWYoIWUpcmV0dXJuIG4KK2lmKCFLKGUscikpcmV0dXJuIG4KK3ZhciBpPWUuY3JlYXRlRWxl
bWVudCgiZGl2IikKK3JldHVybiBmdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7cmV0dXJuKDAsdC5w
b3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1y
ZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLmluc2VydEhUTUxCZWZvcmU9ZnVu
Y3Rpb24odCxuLG8pe3JldHVybiBudWxsPT09bnx8IiI9PT1uP2UucHJvdG90eXBlLmluc2VydEhU
TUxCZWZvcmUuY2FsbCh0aGlzLHQsbixvKTp0Lm5hbWVzcGFjZVVSSSE9PXI/ZS5wcm90b3R5cGUu
aW5zZXJ0SFRNTEJlZm9yZS5jYWxsKHRoaXMsdCxuLG8pOkcodCxpLG4sbyl9LG59KG4pfWZ1bmN0
aW9uIEcoZSx0LG4scil7dC5pbm5lckhUTUw9Ijxzdmc+IituKyI8L3N2Zz4iCit2YXIgaT1KKHQu
Zmlyc3RDaGlsZCxlLHIpLG89aVswXSxzPWlbMV0KK3JldHVybiBuZXcgWWUoZSxvLHMpfWZ1bmN0
aW9uIEsoZSx0KXt2YXIgcj1lLmNyZWF0ZUVsZW1lbnROUyh0LCJzdmciKQordHJ5e3IuaW5zZXJ0
QWRqYWNlbnRIVE1MKCJiZWZvcmVFbmQiLCI8Y2lyY2xlPjwvY2lyY2xlPiIpfWNhdGNoKGUpe31m
aW5hbGx5e3JldHVybiAxIT09ci5jaGlsZE5vZGVzLmxlbmd0aHx8Imh0dHA6Ly93d3cudzMub3Jn
LzIwMDAvc3ZnIiE9PSgwLG4udW53cmFwKShyLmZpcnN0Q2hpbGQpLm5hbWVzcGFjZVVSSX19ZnVu
Y3Rpb24gUShlLG4pe3JldHVybiBlJiZZKGUpP2Z1bmN0aW9uKGUpe2Z1bmN0aW9uIG4obil7dmFy
IHI9KDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuY2FsbCh0aGlzLG4pKQor
cmV0dXJuIHIudXNlbGVzc0NvbW1lbnQ9ci5jcmVhdGVDb21tZW50KCIiKSxyfXJldHVybigwLHQu
aW5oZXJpdHMpKG4sZSksbi5wcm90b3R5cGUuaW5zZXJ0SFRNTEJlZm9yZT1mdW5jdGlvbih0LG4s
cil7aWYobnVsbD09PW4pcmV0dXJuIGUucHJvdG90eXBlLmluc2VydEhUTUxCZWZvcmUuY2FsbCh0
aGlzLHQsbixyKQordmFyIGk9ITEsbz1yP3IucHJldmlvdXNTaWJsaW5nOnQubGFzdENoaWxkCitv
JiZvIGluc3RhbmNlb2YgVGV4dCYmKGk9ITAsdC5pbnNlcnRCZWZvcmUodGhpcy51c2VsZXNzQ29t
bWVudCxyKSkKK3ZhciBzPWUucHJvdG90eXBlLmluc2VydEhUTUxCZWZvcmUuY2FsbCh0aGlzLHQs
bixyKQorcmV0dXJuIGkmJnQucmVtb3ZlQ2hpbGQodGhpcy51c2VsZXNzQ29tbWVudCksc30sbn0o
bik6bn1mdW5jdGlvbiBZKGUpe3ZhciB0PWUuY3JlYXRlRWxlbWVudCgiZGl2IikKK3JldHVybiB0
LmlubmVySFRNTD0iZmlyc3QiLHQuaW5zZXJ0QWRqYWNlbnRIVE1MKCJiZWZvcmVFbmQiLCJzZWNv
bmQiKSwyIT09dC5jaGlsZE5vZGVzLmxlbmd0aH1mdW5jdGlvbiBKKGUsdCxuKXtmb3IodmFyIHI9
ZS5maXJzdENoaWxkLGk9bnVsbCxvPXI7bzspaT1vLG89by5uZXh0U2libGluZyx0Lmluc2VydEJl
Zm9yZShpLG4pCityZXR1cm5bcixpXX1mdW5jdGlvbiBYKGUsdCxuLHIpe3ZhciBpPXQsbz1lLHM9
bixhPXM/cy5wcmV2aW91c1NpYmxpbmc6aS5sYXN0Q2hpbGQsdT12b2lkIDAKK2lmKG51bGw9PT1y
fHwiIj09PXIpcmV0dXJuIG5ldyBZZShpLG51bGwsbnVsbCkKK251bGw9PT1zPyhpLmluc2VydEFk
amFjZW50SFRNTCgiYmVmb3JlRW5kIixyKSx1PWkubGFzdENoaWxkKTpzIGluc3RhbmNlb2YgSFRN
TEVsZW1lbnQ/KHMuaW5zZXJ0QWRqYWNlbnRIVE1MKCJiZWZvcmVCZWdpbiIsciksdT1zLnByZXZp
b3VzU2libGluZyk6KGkuaW5zZXJ0QmVmb3JlKG8scyksby5pbnNlcnRBZGphY2VudEhUTUwoImJl
Zm9yZUJlZ2luIixyKSx1PW8ucHJldmlvdXNTaWJsaW5nLGkucmVtb3ZlQ2hpbGQobykpCit2YXIg
bD1hP2EubmV4dFNpYmxpbmc6aS5maXJzdENoaWxkCityZXR1cm4gbmV3IFllKGksbCx1KX1mdW5j
dGlvbiBaKGUpe3JldHVybiBlLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RF
fWZ1bmN0aW9uIGVlKGUsdCl7dmFyIG49ZS50YWdOYW1lCitpZihlLm5hbWVzcGFjZVVSST09PUFu
KXJldHVybiBuZShuLHQpCit2YXIgcj1CKGUsdCksaT1yLnR5cGUsbz1yLm5vcm1hbGl6ZWQKK3Jl
dHVybiJhdHRyIj09PWk/bmUobixvKTp0ZShuLG8pfWZ1bmN0aW9uIHRlKGUsdCl7cmV0dXJuIHoo
ZSx0KT9uZXcgRm4odCk6b2UoZSx0KT9VbjpzZShlLHQpP3FuOm5ldyBNbih0KX1mdW5jdGlvbiBu
ZShlLHQpe3JldHVybiB6KGUsdCk/bmV3IEhuKHQpOm5ldyBJbih0KX1mdW5jdGlvbiByZShlKXty
ZXR1cm4hMT09PWV8fHZvaWQgMD09PWV8fG51bGw9PT1lP251bGw6ITA9PT1lPyIiOiJmdW5jdGlv
biI9PXR5cGVvZiBlP251bGw6U3RyaW5nKGUpfWZ1bmN0aW9uIGllKGUpe3JldHVybiBudWxsPT09
ZXx8dm9pZCAwPT09ZX1mdW5jdGlvbiBvZShlLHQpe3JldHVybigiSU5QVVQiPT09ZXx8IlRFWFRB
UkVBIj09PWUpJiYidmFsdWUiPT09dH1mdW5jdGlvbiBzZShlLHQpe3JldHVybiJPUFRJT04iPT09
ZSYmInNlbGVjdGVkIj09PXR9ZnVuY3Rpb24gYWUoZSl7cmV0dXJuIG51bGw9PT1lfHx2b2lkIDA9
PT1lfHwiZnVuY3Rpb24iIT10eXBlb2YgZS50b1N0cmluZ31mdW5jdGlvbiB1ZShlKXtyZXR1cm4g
YWUoZSk/IiI6U3RyaW5nKGUpfWZ1bmN0aW9uIGxlKGUpe3JldHVybiBhZShlKT8iIjpjKGUpP2U6
dShlKT9lLnRvSFRNTCgpOmwoZSk/ZTpTdHJpbmcoZSl9ZnVuY3Rpb24gY2UoZSl7cmV0dXJuIGFl
KGUpPyIiOmMoZSk/ZTp1KGUpfHxsKGUpP2U6U3RyaW5nKGUpfWZ1bmN0aW9uIHBlKGUsdCxuLHIp
e3ZhciBpPW5ldyBRdChlLG4sciksbz12b2lkIDAscz1mdW5jdGlvbigpe3JldHVybiBvfHwobz1p
LnNjYW5FbnRyeVBvaW50KCkpLG99LGE9dm9pZCAwCityZXR1cm57aWQ6dCxtZXRhOm4sX2Jsb2Nr
OmUsYXNFbnRyeVBvaW50OnMsYXNMYXlvdXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYXx8KGE9aS5zY2Fu
TGF5b3V0KCkpLGF9LGFzUGFydGlhbDpmdW5jdGlvbihlKXtyZXR1cm4gaS5zY2FuUGFydGlhbChl
KX0scmVuZGVyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1ndC5mb3JJbml0aWFsUmVuZGVyKHIsdCxu
dWxsKSxvPXMoKS5jb21waWxlKHIpLGE9Wm4uaW5pdGlhbChyLGUsbixpLG8pCityZXR1cm4gbmV3
IHhyKGEpfX19ZS5Db25jcmV0ZUJvdW5kcz1lLkVsZW1lbnRTdGFjaz1lLmluc2VydEhUTUxCZWZv
cmU9ZS5pc1doaXRlc3BhY2U9ZS5ET01UcmVlQ29uc3RydWN0aW9uPWUuSURPTUNoYW5nZXM9ZS5E
T01DaGFuZ2VzPWUuaXNDb21wb25lbnREZWZpbml0aW9uPWUuQ29tcG9uZW50RGVmaW5pdGlvbj1l
LlBhcnRpYWxEZWZpbml0aW9uPWUuRW52aXJvbm1lbnQ9ZS5TY29wZT1lLmlzU2FmZVN0cmluZz1l
LlJlbmRlclJlc3VsdD1lLlVwZGF0aW5nVk09ZS5MYXlvdXQ9ZS5CYXNlbGluZVN5bnRheD1lLnJl
c2V0RGVidWdnZXJDYWxsYmFjaz1lLnNldERlYnVnZ2VyQ2FsbGJhY2s9ZS5jb21waWxlQXJncz1l
LklubGluZU1hY3Jvcz1lLkJsb2NrTWFjcm9zPWUuZ2V0RHluYW1pY1Zhcj1lLkV2YWx1YXRlZFBv
c2l0aW9uYWxBcmdzPWUuRXZhbHVhdGVkTmFtZWRBcmdzPWUuRXZhbHVhdGVkQXJncz1lLkNvbXBp
bGVkUG9zaXRpb25hbEFyZ3M9ZS5Db21waWxlZE5hbWVkQXJncz1lLkNvbXBpbGVkQXJncz1lLkNv
bXBpbGVkRXhwcmVzc2lvbj1lLm5vcm1hbGl6ZVRleHRWYWx1ZT1lLnJlYWRET01BdHRyPWUuZGVm
YXVsdFByb3BlcnR5TWFuYWdlcnM9ZS5kZWZhdWx0QXR0cmlidXRlTWFuYWdlcnM9ZS5kZWZhdWx0
TWFuYWdlcnM9ZS5JTlBVVF9WQUxVRV9QUk9QRVJUWV9NQU5BR0VSPWUuUHJvcGVydHlNYW5hZ2Vy
PWUuQXR0cmlidXRlTWFuYWdlcj1lLklBdHRyaWJ1dGVNYW5hZ2VyPWUuQ29tcGlsZWRQcm9ncmFt
PWUuQ29tcGlsZWRCbG9jaz1lLmNvbXBpbGVMYXlvdXQ9ZS5PcGNvZGVCdWlsZGVyRFNMPWUuQ29u
ZGl0aW9uYWxSZWZlcmVuY2U9ZS5QcmltaXRpdmVSZWZlcmVuY2U9ZS5VTkRFRklORURfUkVGRVJF
TkNFPWUuTlVMTF9SRUZFUkVOQ0U9ZS50ZW1wbGF0ZUZhY3Rvcnk9ZS5TaW1wbGU9dm9pZCAwCit2
YXIgZmU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihuKXtyZXR1cm4oMCx0LnBvc3NpYmxlQ29uc3Ry
dWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMsbikpfXJldHVybigwLHQuaW5oZXJpdHMpKG4s
ZSksbi5jcmVhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWU/bWU6bnVsbD09PWU/Z2U6
ITA9PT1lP3llOiExPT09ZT92ZToibnVtYmVyIj09dHlwZW9mIGU/bmV3IGRlKGUpOm5ldyBoZShl
KX0sbi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIG1lfSxufShyLkNvbnN0UmVmZXJl
bmNlKSxoZT1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7dmFyIG49KDAsdC5wb3NzaWJsZUNvbnN0
cnVjdG9yUmV0dXJuKSh0aGlzLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKQorcmV0dXJuIG4ubGVu
Z3RoUmVmZXJlbmNlPW51bGwsbn1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBl
LmdldD1mdW5jdGlvbih0KXt2YXIgbgorcmV0dXJuImxlbmd0aCI9PT10PyhuPXRoaXMubGVuZ3Ro
UmVmZXJlbmNlLG51bGw9PT1uJiYobj10aGlzLmxlbmd0aFJlZmVyZW5jZT1uZXcgZGUodGhpcy5p
bm5lci5sZW5ndGgpKSxuKTplLnByb3RvdHlwZS5nZXQuY2FsbCh0aGlzLHQpfSxufShmZSksZGU9
ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihuKXtyZXR1cm4oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JS
ZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMsbikpfXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbn0o
ZmUpLG1lPW5ldyBkZSh2b2lkIDApLGdlPW5ldyBkZShudWxsKSx5ZT1uZXcgZGUoITApLHZlPW5l
dyBkZSghMSksYmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuaW5uZXI9ZSx0aGlzLnRh
Zz1lLnRhZ31yZXR1cm4gZS5wcm90b3R5cGUudmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50
b0Jvb2wodGhpcy5pbm5lci52YWx1ZSgpKX0sZS5wcm90b3R5cGUudG9Cb29sPWZ1bmN0aW9uKGUp
e3JldHVybiEhZX0sZX0oKSxfZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLnJlZmVyZW5j
ZXM9W10sdGhpcy5zdHJpbmdzPVtdLHRoaXMuZXhwcmVzc2lvbnM9W10sdGhpcy5hcnJheXM9W10s
dGhpcy5ibG9ja3M9W10sdGhpcy5mdW5jdGlvbnM9W10sdGhpcy5vdGhlcnM9W10sdGhpcy5OVUxM
X1JFRkVSRU5DRT10aGlzLnJlZmVyZW5jZShnZSksdGhpcy5VTkRFRklORURfUkVGRVJFTkNFPXRo
aXMucmVmZXJlbmNlKG1lKX1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0UmVmZXJlbmNlPWZ1bmN0aW9u
KGUpe3JldHVybiB0aGlzLnJlZmVyZW5jZXNbZS0xXX0sZS5wcm90b3R5cGUucmVmZXJlbmNlPWZ1
bmN0aW9uKGUpe3ZhciB0PXRoaXMucmVmZXJlbmNlcy5sZW5ndGgKK3JldHVybiB0aGlzLnJlZmVy
ZW5jZXMucHVzaChlKSx0KzF9LGUucHJvdG90eXBlLmdldFN0cmluZz1mdW5jdGlvbihlKXtyZXR1
cm4gdGhpcy5zdHJpbmdzW2UtMV19LGUucHJvdG90eXBlLnN0cmluZz1mdW5jdGlvbihlKXt2YXIg
dD10aGlzLnN0cmluZ3MubGVuZ3RoCityZXR1cm4gdGhpcy5zdHJpbmdzLnB1c2goZSksdCsxfSxl
LnByb3RvdHlwZS5nZXRFeHByZXNzaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmV4cHJlc3Np
b25zW2UtMV19LGUucHJvdG90eXBlLmV4cHJlc3Npb249ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5l
eHByZXNzaW9ucy5sZW5ndGgKK3JldHVybiB0aGlzLmV4cHJlc3Npb25zLnB1c2goZSksdCsxfSxl
LnByb3RvdHlwZS5nZXRBcnJheT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hcnJheXNbZS0xXX0s
ZS5wcm90b3R5cGUuYXJyYXk9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5hcnJheXMubGVuZ3RoCity
ZXR1cm4gdGhpcy5hcnJheXMucHVzaChlKSx0KzF9LGUucHJvdG90eXBlLmdldEJsb2NrPWZ1bmN0
aW9uKGUpe3JldHVybiB0aGlzLmJsb2Nrc1tlLTFdfSxlLnByb3RvdHlwZS5ibG9jaz1mdW5jdGlv
bihlKXt2YXIgdD10aGlzLmJsb2Nrcy5sZW5ndGgKK3JldHVybiB0aGlzLmJsb2Nrcy5wdXNoKGUp
LHQrMX0sZS5wcm90b3R5cGUuZ2V0RnVuY3Rpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZnVu
Y3Rpb25zW2UtMV19LGUucHJvdG90eXBlLmZ1bmN0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMu
ZnVuY3Rpb25zLmxlbmd0aAorcmV0dXJuIHRoaXMuZnVuY3Rpb25zLnB1c2goZSksdCsxfSxlLnBy
b3RvdHlwZS5nZXRPdGhlcj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vdGhlcnNbZS0xXX0sZS5w
cm90b3R5cGUub3RoZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5vdGhlcnMubGVuZ3RoCityZXR1
cm4gdGhpcy5vdGhlcnMucHVzaChlKSx0KzF9LGV9KCksd2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBl
KCl7dGhpcy5ldmFsdWF0ZU9wY29kZT0oMCxuLmZpbGxOdWxscykoNTIpfXJldHVybiBlLnByb3Rv
dHlwZS5hZGQ9ZnVuY3Rpb24oZSx0KXt0aGlzLmV2YWx1YXRlT3Bjb2RlW2VdPXR9LGUucHJvdG90
eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKGUsdCl7KDAsdGhpcy5ldmFsdWF0ZU9wY29kZVt0LnR5cGVd
KShlLHQpfSxlfSgpLEVlPW5ldyB3ZSx4ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXsoMCxuLmlu
aXRpYWxpemVHdWlkKSh0aGlzKX1yZXR1cm4gZS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7
cmV0dXJue2d1aWQ6dGhpcy5fZ3VpZCx0eXBlOnRoaXMudHlwZX19LGV9KCksQ2U9ZnVuY3Rpb24o
ZSl7ZnVuY3Rpb24gbigpe3ZhciBuPSgwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhp
cyxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkKK3JldHVybiBuLm5leHQ9bnVsbCxuLnByZXY9bnVs
bCxufXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbn0oeGUpCitFZS5hZGQoMjAsZnVuY3Rpb24o
ZSx0KXt2YXIgbj10Lm9wMSxyPXQub3AyLGk9ZS5jb25zdGFudHMuZ2V0T3RoZXIobiksbz1lLmNv
bnN0YW50cy5nZXRFeHByZXNzaW9uKHIpLHM9bnVsbCxhPWkuZXZhbHVhdGUoZSkKK2EmJihzPW8u
ZXZhbHVhdGUoZSkpLGUucHVzaENhbGxlclNjb3BlKCksYSYmZS5pbnZva2VCbG9jayhhLHN8fG51
bGwpfSksRWUuYWRkKDIxLGZ1bmN0aW9uKGUpe3JldHVybiBlLnBvcFNjb3BlKCl9KSxFZS5hZGQo
MCxmdW5jdGlvbihlKXtyZXR1cm4gZS5wdXNoQ2hpbGRTY29wZSgpfSksRWUuYWRkKDEsZnVuY3Rp
b24oZSl7cmV0dXJuIGUucG9wU2NvcGUoKX0pLEVlLmFkZCgyLGZ1bmN0aW9uKGUpe3JldHVybiBl
LnB1c2hEeW5hbWljU2NvcGUoKX0pLEVlLmFkZCgzLGZ1bmN0aW9uKGUpe3JldHVybiBlLnBvcER5
bmFtaWNTY29wZSgpfSksRWUuYWRkKDQsZnVuY3Rpb24oZSx0KXt2YXIgbj10Lm9wMQorZS5mcmFt
ZS5zZXRPcGVyYW5kKGUuY29uc3RhbnRzLmdldFJlZmVyZW5jZShuKSl9KSxFZS5hZGQoNSxmdW5j
dGlvbihlLHQpe3ZhciBuPXQub3AxLHI9ZS5jb25zdGFudHMuZ2V0RXhwcmVzc2lvbihuKQorZS5l
dmFsdWF0ZU9wZXJhbmQocil9KSxFZS5hZGQoNixmdW5jdGlvbihlLHQpe3ZhciBuPXQub3AxCitl
LmV2YWx1YXRlQXJncyhlLmNvbnN0YW50cy5nZXRFeHByZXNzaW9uKG4pKX0pLEVlLmFkZCg3LGZ1
bmN0aW9uKGUsdCl7dmFyIG49dC5vcDEscj1lLmNvbnN0YW50cy5nZXRBcnJheShuKQorZS5iaW5k
UG9zaXRpb25hbEFyZ3Mocil9KSxFZS5hZGQoOCxmdW5jdGlvbihlLHQpe3ZhciBuPXQub3AxLHI9
dC5vcDIsaT1lLmNvbnN0YW50cy5nZXRBcnJheShuKSxvPWUuY29uc3RhbnRzLmdldEFycmF5KHIp
CitlLmJpbmROYW1lZEFyZ3MoaSxvKX0pLEVlLmFkZCg5LGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5v
cDEscj10Lm9wMixpPWUuY29uc3RhbnRzLmdldEFycmF5KG4pLG89ZS5jb25zdGFudHMuZ2V0QXJy
YXkocikKK2UuYmluZEJsb2NrcyhpLG8pfSksRWUuYWRkKDEwLGZ1bmN0aW9uKGUsdCl7dmFyIG49
dC5vcDEKK2UuYmluZFBhcnRpYWxBcmdzKG4pfSksRWUuYWRkKDExLGZ1bmN0aW9uKGUpe3JldHVy
biBlLmJpbmRDYWxsZXJTY29wZSgpfSksRWUuYWRkKDEyLGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5v
cDEscj1lLmNvbnN0YW50cy5nZXRBcnJheShuKQorZS5iaW5kRHluYW1pY1Njb3BlKHIpfSksRWUu
YWRkKDEzLGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5vcDEscj10Lm9wMgorcmV0dXJuIGUuZW50ZXIo
bixyKX0pLEVlLmFkZCgxNCxmdW5jdGlvbihlKXtyZXR1cm4gZS5leGl0KCl9KSxFZS5hZGQoMTUs
ZnVuY3Rpb24oZSx0KXt2YXIgbj10Lm9wMSxyPWUuY29uc3RhbnRzLmdldEJsb2NrKG4pLGk9ZS5m
cmFtZS5nZXRBcmdzKCkKK2UuaW52b2tlQmxvY2socixpKX0pLEVlLmFkZCgxNixmdW5jdGlvbihl
LHQpe3ZhciBuPXQub3AxCityZXR1cm4gZS5nb3RvKG4pfSksRWUuYWRkKDE3LGZ1bmN0aW9uKGUs
dCl7dmFyIG4saT10Lm9wMSxvPWUuZnJhbWUuZ2V0Q29uZGl0aW9uKCk7KDAsci5pc0NvbnN0KShv
KT9vLnZhbHVlKCkmJmUuZ290byhpKToobj1uZXcgci5SZWZlcmVuY2VDYWNoZShvKSxuLnBlZWso
KSYmZS5nb3RvKGkpLGUudXBkYXRlV2l0aChuZXcgU2UobikpKX0pLEVlLmFkZCgxOCxmdW5jdGlv
bihlLHQpe3ZhciBuLGk9dC5vcDEsbz1lLmZyYW1lLmdldENvbmRpdGlvbigpOygwLHIuaXNDb25z
dCkobyk/by52YWx1ZSgpfHxlLmdvdG8oaSk6KG49bmV3IHIuUmVmZXJlbmNlQ2FjaGUobyksbi5w
ZWVrKCl8fGUuZ290byhpKSxlLnVwZGF0ZVdpdGgobmV3IFNlKG4pKSl9KQordmFyIE9lPWZ1bmN0
aW9uKGUpe3JldHVybiBuZXcgci5Db25zdFJlZmVyZW5jZSghIWUudmFsdWUoKSl9LEFlPWZ1bmN0
aW9uKGUpe3JldHVybiBlfSxUZT1mdW5jdGlvbihlLHQpe3JldHVybiB0LnRvQ29uZGl0aW9uYWxS
ZWZlcmVuY2UoZSl9CitFZS5hZGQoMTksZnVuY3Rpb24oZSx0KXt2YXIgbj10Lm9wMSxyPWUuZnJh
bWUuZ2V0T3BlcmFuZCgpLGk9ZS5jb25zdGFudHMuZ2V0RnVuY3Rpb24obikKK2UuZnJhbWUuc2V0
Q29uZGl0aW9uKGkocixlLmVudikpfSkKK3ZhciBTZT1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKG4p
e3ZhciByPSgwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmNhbGwodGhpcykp
CityZXR1cm4gci50eXBlPSJhc3NlcnQiLHIudGFnPW4udGFnLHIuY2FjaGU9bixyfXJldHVybigw
LHQuaW5oZXJpdHMpKG4sZSksbi5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9
dGhpcy5jYWNoZTsoMCxyLmlzTW9kaWZpZWQpKHQucmV2YWxpZGF0ZSgpKSYmZS50aHJvdygpfSxu
LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnR5cGUsdD10aGlzLl9ndWlk
LG49dGhpcy5jYWNoZSxyPXZvaWQgMAordHJ5e3I9SlNPTi5zdHJpbmdpZnkobi5wZWVrKCkpfWNh
dGNoKGUpe3I9U3RyaW5nKG4ucGVlaygpKX1yZXR1cm57Z3VpZDp0LHR5cGU6ZSxhcmdzOltdLGRl
dGFpbHM6e2V4cGVjdGVkOnJ9fX0sbn0oQ2UpLFJlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4obixy
KXt2YXIgaT0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMp
KQorcmV0dXJuIGkudGFyZ2V0PXIsaS50eXBlPSJqdW1wLWlmLW5vdC1tb2RpZmllZCIsaS50YWc9
bixpLmxhc3RSZXZpc2lvbj1uLnZhbHVlKCksaX1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4u
cHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMudGFnLG49dGhpcy50YXJn
ZXQscj10aGlzLmxhc3RSZXZpc2lvbgorIWUuYWx3YXlzUmV2YWxpZGF0ZSYmdC52YWxpZGF0ZShy
KSYmZS5nb3RvKG4pfSxuLnByb3RvdHlwZS5kaWRNb2RpZnk9ZnVuY3Rpb24oKXt0aGlzLmxhc3RS
ZXZpc2lvbj10aGlzLnRhZy52YWx1ZSgpfSxuLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXty
ZXR1cm57Z3VpZDp0aGlzLl9ndWlkLHR5cGU6dGhpcy50eXBlLGFyZ3M6W0pTT04uc3RyaW5naWZ5
KHRoaXMudGFyZ2V0Lmluc3BlY3QoKSldfX0sbn0oQ2UpLGtlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9u
IG4obil7dmFyIGk9KDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuY2FsbCh0
aGlzKSkKK3JldHVybiBpLnRhcmdldD1uLGkudHlwZT0iZGlkLW1vZGlmeSIsaS50YWc9ci5DT05T
VEFOVF9UQUcsaX1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLmV2YWx1YXRl
PWZ1bmN0aW9uKCl7dGhpcy50YXJnZXQuZGlkTW9kaWZ5KCl9LG59KENlKSxOZT1mdW5jdGlvbigp
e2Z1bmN0aW9uIGUoZSl7dGhpcy50YWc9ci5DT05TVEFOVF9UQUcsdGhpcy50eXBlPSJsYWJlbCIs
dGhpcy5sYWJlbD1udWxsLHRoaXMucHJldj1udWxsLHRoaXMubmV4dD1udWxsLCgwLG4uaW5pdGlh
bGl6ZUd1aWQpKHRoaXMpLGUmJih0aGlzLmxhYmVsPWUpfXJldHVybiBlLnByb3RvdHlwZS5ldmFs
dWF0ZT1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0
aGlzLmxhYmVsKyIgWyIrdGhpcy5fZ3VpZCsiXSJ9LGUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlv
bigpe3JldHVybntndWlkOnRoaXMuX2d1aWQsdHlwZTp0aGlzLnR5cGUsYXJnczpbSlNPTi5zdHJp
bmdpZnkodGhpcy5pbnNwZWN0KCkpXX19LGV9KCksUGU9bi5IQVNfTkFUSVZFX1dFQUtNQVA/T2Jq
ZWN0LmZyZWV6ZShbXSk6W10samU9bi5IQVNfTkFUSVZFX1dFQUtNQVA/T2JqZWN0LmZyZWV6ZSgo
MCxuLmRpY3QpKCkpOigwLG4uZGljdCkoKSxEZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhp
cy52YWx1ZXM9ZSx0aGlzLmxlbmd0aD1lLmxlbmd0aH1yZXR1cm4gZS5jcmVhdGU9ZnVuY3Rpb24o
ZSl7cmV0dXJuIGUubGVuZ3RoP25ldyB0aGlzKGUpOkxlfSxlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0
dXJuIExlfSxlLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbihlKXt2YXIgdCxuPXRoaXMudmFs
dWVzLHI9dGhpcy5sZW5ndGgsaT1uZXcgQXJyYXkocikKK2Zvcih0PTA7dDxyO3QrKylpW3RdPW5b
dF0uZXZhbHVhdGUoZSkKK3JldHVybiBJZS5jcmVhdGUoaSl9LGUucHJvdG90eXBlLnRvSlNPTj1m
dW5jdGlvbigpe3JldHVybiJbIit0aGlzLnZhbHVlcy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUu
dG9KU09OKCl9KS5qb2luKCIsICIpKyJdIn0sZX0oKSxMZT1uZXcoZnVuY3Rpb24oZSl7ZnVuY3Rp
b24gbigpe3JldHVybigwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmNhbGwo
dGhpcyxQZSkpfXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbi5wcm90b3R5cGUuZXZhbHVhdGU9
ZnVuY3Rpb24oKXtyZXR1cm4gTWV9LG4ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVy
biI8RU1QVFk+In0sbn0oRGUpKSxJZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy52YWx1
ZXM9ZSx0aGlzLnRhZz0oMCxyLmNvbWJpbmVUYWdnZWQpKGUpLHRoaXMubGVuZ3RoPWUubGVuZ3Ro
fXJldHVybiBlLmNyZWF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHRoaXMoZSl9LGUuZW1wdHk9
ZnVuY3Rpb24oKXtyZXR1cm4gTWV9LGUucHJvdG90eXBlLmF0PWZ1bmN0aW9uKGUpe3ZhciB0PXRo
aXMudmFsdWVzCityZXR1cm4gZTx0aGlzLmxlbmd0aD90W2VdOm1lfSxlLnByb3RvdHlwZS52YWx1
ZT1mdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy52YWx1ZXMsbj10aGlzLmxlbmd0aCxyPW5ldyBBcnJh
eShuKQorZm9yKGU9MDtlPG47ZSsrKXJbZV09dFtlXS52YWx1ZSgpCityZXR1cm4gcn0sZX0oKSxN
ZT1uZXcoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3JldHVybigwLHQucG9zc2libGVDb25zdHJ1
Y3RvclJldHVybikodGhpcyxlLmNhbGwodGhpcyxQZSkpfXJldHVybigwLHQuaW5oZXJpdHMpKG4s
ZSksbi5wcm90b3R5cGUuYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbWV9LG4ucHJvdG90eXBlLnZhbHVl
PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWVzfSxufShJZSkpLEZlPWZ1bmN0aW9uKCl7ZnVu
Y3Rpb24gZShlLHQpe3RoaXMua2V5cz1lLHRoaXMudmFsdWVzPXQsdGhpcy5sZW5ndGg9ZS5sZW5n
dGgsKDAsbi5hc3NlcnQpKGUubGVuZ3RoPT09dC5sZW5ndGgsIktleXMgYW5kIHZhbHVlcyBkbyBu
b3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGgiKX1yZXR1cm4gZS5lbXB0eT1mdW5jdGlvbigpe3JldHVy
biB6ZX0sZS5jcmVhdGU9ZnVuY3Rpb24oZSl7dmFyIHQsbixyPU9iamVjdC5rZXlzKGUpLGk9ci5s
ZW5ndGgKK2lmKGk+MCl7Zm9yKHQ9W10sbj0wO248aTtuKyspdFtuXT1lW3Jbbl1dCityZXR1cm4g
bmV3IHRoaXMocix0KX1yZXR1cm4gemV9LGUucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKGUp
e3ZhciB0LG49dGhpcy5rZXlzLHI9dGhpcy52YWx1ZXMsaT10aGlzLmxlbmd0aCxvPW5ldyBBcnJh
eShpKQorZm9yKHQ9MDt0PGk7dCsrKW9bdF09clt0XS5ldmFsdWF0ZShlKQorcmV0dXJuIG5ldyBV
ZShuLG8pfSxlLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmtleXMsdD10
aGlzLnZhbHVlcworcmV0dXJuInsiK2UubWFwKGZ1bmN0aW9uKGUsbil7cmV0dXJuIGUrIjogIit0
W25dLnRvSlNPTigpfSkuam9pbigiLCAiKSsifSJ9LGV9KCksemU9bmV3KGZ1bmN0aW9uKGUpe2Z1
bmN0aW9uIG4oKXtyZXR1cm4oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5j
YWxsKHRoaXMsUGUsUGUpKX1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLmV2
YWx1YXRlPWZ1bmN0aW9uKCl7cmV0dXJuIEJlfSxuLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24o
KXtyZXR1cm4iPEVNUFRZPiJ9LG59KEZlKSksVWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7
dmFyIGk9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRz
WzJdOm51bGwKK3RoaXMua2V5cz1lLHRoaXMudmFsdWVzPXQsdGhpcy5fbWFwPWksdGhpcy50YWc9
KDAsci5jb21iaW5lVGFnZ2VkKSh0KSx0aGlzLmxlbmd0aD1lLmxlbmd0aCwoMCxuLmFzc2VydCko
ZS5sZW5ndGg9PT10Lmxlbmd0aCwiS2V5cyBhbmQgdmFsdWVzIGRvIG5vdCBoYXZlIHRoZSBzYW1l
IGxlbmd0aCIpfXJldHVybiBlLmNyZWF0ZT1mdW5jdGlvbihlKXt2YXIgdCxuLHI9T2JqZWN0Lmtl
eXMoZSksaT1yLmxlbmd0aAoraWYoaT4wKXtmb3IodD1uZXcgQXJyYXkoaSksbj0wO248aTtuKysp
dFtuXT1lW3Jbbl1dCityZXR1cm4gbmV3IHRoaXMocix0LGUpfXJldHVybiBCZX0sZS5lbXB0eT1m
dW5jdGlvbigpe3JldHVybiBCZX0sZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3ZhciB0PXRo
aXMua2V5cyxuPXRoaXMudmFsdWVzLHI9dC5pbmRleE9mKGUpCityZXR1cm4tMT09PXI/bWU6blty
XX0sZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybi0xIT09dGhpcy5rZXlzLmluZGV4
T2YoZSl9LGUucHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uKCl7dmFyIGUsdCxyLGk9dGhpcy5rZXlz
LG89dGhpcy52YWx1ZXMscz0oMCxuLmRpY3QpKCkKK2ZvcihlPTA7ZTxpLmxlbmd0aDtlKyspdD1p
W2VdLHI9b1tlXSxzW3RdPXIudmFsdWUoKQorcmV0dXJuIHN9LCgwLHQuY3JlYXRlQ2xhc3MpKGUs
W3trZXk6Im1hcCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLl9tYXAKK2lmKHQpcmV0dXJu
IHQKK3Q9dGhpcy5fbWFwPSgwLG4uZGljdCkoKQordmFyIHI9dGhpcy5rZXlzLGk9dGhpcy52YWx1
ZXMsbz10aGlzLmxlbmd0aAorZm9yKGU9MDtlPG87ZSsrKXRbcltlXV09aVtlXQorcmV0dXJuIHR9
fV0pLGV9KCksQmU9bmV3KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXtyZXR1cm4oMCx0LnBvc3Np
YmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMsUGUsUGUsamUpKX1yZXR1cm4o
MCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiBtZX0s
bi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKCl7cmV0dXJuITF9LG4ucHJvdG90eXBlLnZhbHVlPWZ1
bmN0aW9uKCl7cmV0dXJuIGplfSxufShVZSkpLHFlPXtkZWZhdWx0Om51bGwsaW52ZXJzZTpudWxs
fSxIZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3RoaXMucG9zaXRpb25hbD1lLHRoaXMu
bmFtZWQ9dCx0aGlzLmJsb2Nrcz1uLHRoaXMudHlwZT0iY29tcGlsZWQtYXJncyJ9cmV0dXJuIGUu
Y3JlYXRlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT09PUxlJiZ0PT09emUmJm49PT1xZT90aGlz
LmVtcHR5KCk6bmV3IHRoaXMoZSx0LG4pfSxlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIFZlfSxl
LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnBvc2l0aW9uYWwsbj10
aGlzLm5hbWVkLHI9dGhpcy5ibG9ja3MKK3JldHVybiBXZS5jcmVhdGUodC5ldmFsdWF0ZShlKSxu
LmV2YWx1YXRlKGUpLHIpfSxlfSgpLFZlPW5ldyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7cmV0
dXJuKDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuY2FsbCh0aGlzLExlLHpl
LHFlKSl9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5j
dGlvbigpe3JldHVybiAkZX0sbn0oSGUpKSxXZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4p
e3RoaXMucG9zaXRpb25hbD1lLHRoaXMubmFtZWQ9dCx0aGlzLmJsb2Nrcz1uLHRoaXMudGFnPSgw
LHIuY29tYmluZVRhZ2dlZCkoW2UsdF0pfXJldHVybiBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJu
ICRlfSxlLmNyZWF0ZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG5ldyB0aGlzKGUsdCxuKX0sZS5w
b3NpdGlvbmFsPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09
YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpxZQorcmV0dXJuIG5ldyB0aGlzKEllLmNyZWF0ZShl
KSxCZSx0KX0sZS5uYW1lZD1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZv
aWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cWUKK3JldHVybiBuZXcgdGhpcyhNZSxV
ZS5jcmVhdGUoZSksdCl9LGV9KCksJGU9bmV3IFdlKE1lLEJlLHFlKQorRWUuYWRkKDIyLGZ1bmN0
aW9uKGUpe3ZhciB0PWUuZnJhbWUuZ2V0T3BlcmFuZCgpLG49KDAsci5pc0NvbnN0KSh0KT92b2lk
IDA6bmV3IHIuUmVmZXJlbmNlQ2FjaGUodCksaT1uP24ucGVlaygpOnQudmFsdWUoKQorZS5mcmFt
ZS5zZXRJbW1lZGlhdGUoaSksbiYmZS51cGRhdGVXaXRoKG5ldyBTZShuKSl9KSxFZS5hZGQoMjMs
ZnVuY3Rpb24oZSx0KXt2YXIgbj10Lm9wMSxyPWUuY29uc3RhbnRzLmdldE90aGVyKG4pCitlLmZy
YW1lLnNldEltbWVkaWF0ZShyKX0pLEVlLmFkZCgyNCxmdW5jdGlvbihlLHQpe3ZhciBuPXQub3Ax
LHI9dC5vcDIsaT1lLmNvbnN0YW50cy5nZXRFeHByZXNzaW9uKG4pLG89ZS5jb25zdGFudHMuZ2V0
QmxvY2socikscz1lLmZyYW1lLmdldEltbWVkaWF0ZSgpLGE9ZS5wdXNoRHluYW1pY1Njb3BlKCks
dT1lLnNjb3BlKCksbD1zLm1hbmFnZXIsYz1sLnByZXBhcmVBcmdzKHMsaS5ldmFsdWF0ZShlKSxh
KSxwPSEhYy5ibG9ja3MuZGVmYXVsdCxmPWwuY3JlYXRlKGUuZW52LHMsYyxhLGUuZ2V0U2VsZigp
LHApLGg9bC5nZXREZXN0cnVjdG9yKGYpCitoJiZlLm5ld0Rlc3Ryb3lhYmxlKGgpCit2YXIgZD1s
LmxheW91dEZvcihzLGYsZS5lbnYpLG09bC5nZXRTZWxmKGYpCitlLmJlZ2luQ2FjaGVHcm91cCgp
LGUuc3RhY2soKS5wdXNoU2ltcGxlQmxvY2soKSxlLnB1c2hSb290U2NvcGUobSxkLnN5bWJvbHMp
LGUuaW52b2tlTGF5b3V0KGMsZCx1LGYsbCxvKSxlLnVwZGF0ZVdpdGgobmV3IEdlKHMubmFtZSxm
LGwsYyxhKSl9KSxFZS5hZGQoMjUsZnVuY3Rpb24oZSl7dmFyIHQ9ZS5mcmFtZS5nZXRNYW5hZ2Vy
KCksbj1lLmZyYW1lLmdldENvbXBvbmVudCgpLHI9IkRpZENyZWF0ZUVsZW1lbnRPcGNvZGUjZXZh
bHVhdGUiCit0LmRpZENyZWF0ZUVsZW1lbnQobixlLnN0YWNrKCkuZXhwZWN0Q29uc3RydWN0aW5n
KHIpLGUuc3RhY2soKS5leHBlY3RPcGVyYXRpb25zKHIpKX0pLEVlLmFkZCgyNixmdW5jdGlvbihl
KXt2YXIgdD1lLmZyYW1lLmdldFNoYWRvdygpCitlLnB1c2hDYWxsZXJTY29wZSgpLHQmJmUuaW52
b2tlQmxvY2sodCxXZS5lbXB0eSgpKX0pLEVlLmFkZCgyNyxmdW5jdGlvbihlKXt2YXIgdD1lLmZy
YW1lLmdldE1hbmFnZXIoKSxuPWUuZnJhbWUuZ2V0Q29tcG9uZW50KCkscj1lLnN0YWNrKCkucG9w
QmxvY2soKQordC5kaWRSZW5kZXJMYXlvdXQobixyKSxlLmVudi5kaWRDcmVhdGUobix0KSxlLnVw
ZGF0ZVdpdGgobmV3IEtlKHQsbixyKSl9KSxFZS5hZGQoMjgsZnVuY3Rpb24oZSl7ZS5wb3BTY29w
ZSgpLGUucG9wRHluYW1pY1Njb3BlKCksZS5jb21taXRDYWNoZUdyb3VwKCl9KQordmFyIEdlPWZ1
bmN0aW9uKGUpe2Z1bmN0aW9uIG4obixpLG8scyxhKXt2YXIgdT0oMCx0LnBvc3NpYmxlQ29uc3Ry
dWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMpKQordS5uYW1lPW4sdS5jb21wb25lbnQ9aSx1
Lm1hbmFnZXI9byx1LmFyZ3M9cyx1LmR5bmFtaWNTY29wZT1hLHUudHlwZT0idXBkYXRlLWNvbXBv
bmVudCIKK3ZhciBsPW8uZ2V0VGFnKGkpCityZXR1cm4gdS50YWc9bD8oMCxyLmNvbWJpbmUpKFtz
LnRhZyxsXSk6cy50YWcsdX1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLmV2
YWx1YXRlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb21wb25lbnQsdD10aGlzLm1hbmFnZXIsbj10
aGlzLmFyZ3Mscj10aGlzLmR5bmFtaWNTY29wZQordC51cGRhdGUoZSxuLHIpfSxuLnByb3RvdHlw
ZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57Z3VpZDp0aGlzLl9ndWlkLHR5cGU6dGhpcy50eXBl
LGFyZ3M6W0pTT04uc3RyaW5naWZ5KHRoaXMubmFtZSldfX0sbn0oQ2UpLEtlPWZ1bmN0aW9uKGUp
e2Z1bmN0aW9uIG4obixpLG8pe3ZhciBzPSgwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybiko
dGhpcyxlLmNhbGwodGhpcykpCityZXR1cm4gcy5tYW5hZ2VyPW4scy5jb21wb25lbnQ9aSxzLmJv
dW5kcz1vLHMudHlwZT0iZGlkLXVwZGF0ZS1sYXlvdXQiLHMudGFnPXIuQ09OU1RBTlRfVEFHLHN9
cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbihl
KXt2YXIgdD10aGlzLm1hbmFnZXIsbj10aGlzLmNvbXBvbmVudCxyPXRoaXMuYm91bmRzCit0LmRp
ZFVwZGF0ZUxheW91dChuLHIpLGUuZW52LmRpZFVwZGF0ZShuLHQpfSxufShDZSksUWU9ZnVuY3Rp
b24oZSx0KXt0aGlzLmVsZW1lbnQ9ZSx0aGlzLm5leHRTaWJsaW5nPXR9LFllPWZ1bmN0aW9uKCl7
ZnVuY3Rpb24gZShlLHQsbil7dGhpcy5wYXJlbnROb2RlPWUsdGhpcy5maXJzdD10LHRoaXMubGFz
dD1ufXJldHVybiBlLnByb3RvdHlwZS5wYXJlbnRFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRo
aXMucGFyZW50Tm9kZX0sZS5wcm90b3R5cGUuZmlyc3ROb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRo
aXMuZmlyc3R9LGUucHJvdG90eXBlLmxhc3ROb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGFz
dH0sZX0oKSxKZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnBhcmVudE5vZGU9ZSx0
aGlzLm5vZGU9dH1yZXR1cm4gZS5wcm90b3R5cGUucGFyZW50RWxlbWVudD1mdW5jdGlvbigpe3Jl
dHVybiB0aGlzLnBhcmVudE5vZGV9LGUucHJvdG90eXBlLmZpcnN0Tm9kZT1mdW5jdGlvbigpe3Jl
dHVybiB0aGlzLm5vZGV9LGUucHJvdG90eXBlLmxhc3ROb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRo
aXMubm9kZX0sZX0oKSxYZT1mdW5jdGlvbihlKXt0aGlzLmJvdW5kcz1lfSxaZT1mdW5jdGlvbihl
KXtmdW5jdGlvbiBuKG4scil7dmFyIGk9KDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0
aGlzLGUuY2FsbCh0aGlzLG4pKQorcmV0dXJuIGkudGV4dE5vZGU9cixpfXJldHVybigwLHQuaW5o
ZXJpdHMpKG4sZSksbi5pbnNlcnQ9ZnVuY3Rpb24oZSx0LHIpe3ZhciBpPWUuY3JlYXRlVGV4dE5v
ZGUocikKK3JldHVybiBlLmluc2VydEJlZm9yZSh0LmVsZW1lbnQsaSx0Lm5leHRTaWJsaW5nKSxu
ZXcgbihuZXcgSmUodC5lbGVtZW50LGkpLGkpfSxuLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24o
ZSx0KXt2YXIgbgorcmV0dXJuISFjKHQpJiYobj10aGlzLnRleHROb2RlLG4ubm9kZVZhbHVlPXQs
ITApfSxufShYZSksZXQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3JldHVybigwLHQucG9zc2li
bGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJu
KDAsdC5pbmhlcml0cykobixlKSxuLmluc2VydD1mdW5jdGlvbihlLHQscil7cmV0dXJuIG5ldyBu
KGUuaW5zZXJ0SFRNTEJlZm9yZSh0LmVsZW1lbnQscix0Lm5leHRTaWJsaW5nKSl9LG4ucHJvdG90
eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQpe3ZhciBuLHIsaQorcmV0dXJuISFjKHQpJiYobj10aGlz
LmJvdW5kcyxyPW4ucGFyZW50RWxlbWVudCgpLGk9YShuKSx0aGlzLmJvdW5kcz1lLmluc2VydEhU
TUxCZWZvcmUocixpLHQpLCEwKX0sbn0oWGUpLHR0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4obixy
KXt2YXIgaT0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMs
bikpCityZXR1cm4gaS5sYXN0U3RyaW5nVmFsdWU9cixpfXJldHVybigwLHQuaW5oZXJpdHMpKG4s
ZSksbi5pbnNlcnQ9ZnVuY3Rpb24oZSx0LHIpe3ZhciBpPXIudG9IVE1MKCkKK3JldHVybiBuZXcg
bihlLmluc2VydEhUTUxCZWZvcmUodC5lbGVtZW50LGksdC5uZXh0U2libGluZyksaSl9LG4ucHJv
dG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvCityZXR1cm4hIXUodCkmJihu
PXQudG9IVE1MKCksbiE9PXRoaXMubGFzdFN0cmluZ1ZhbHVlJiYocj10aGlzLmJvdW5kcyxpPXIu
cGFyZW50RWxlbWVudCgpLG89YShyKSx0aGlzLmJvdW5kcz1lLmluc2VydEhUTUxCZWZvcmUoaSxv
LG4pLHRoaXMubGFzdFN0cmluZ1ZhbHVlPW4pLCEwKX0sbn0oWGUpLG50PWZ1bmN0aW9uKGUpe2Z1
bmN0aW9uIG4oKXtyZXR1cm4oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5h
cHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbi5pbnNlcnQ9
ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlLmluc2VydEJlZm9yZSh0LmVsZW1lbnQscix0Lm5leHRT
aWJsaW5nKSxuZXcgbihvKHQuZWxlbWVudCxyKSl9LG4ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlv
bihlLHQpe3ZhciBuLHIsaQorcmV0dXJuISFsKHQpJiYobj10aGlzLmJvdW5kcyxyPW4ucGFyZW50
RWxlbWVudCgpLGk9YShuKSx0aGlzLmJvdW5kcz1lLmluc2VydE5vZGVCZWZvcmUocix0LGkpLCEw
KX0sbn0oWGUpLHJ0PSJDT01QT05FTlQgREVGSU5JVElPTiBbaWQ9ZTU5Yzc1NGUtNjFlYi00Mzky
LThjNGEtMmMwYWM3MmJmY2Q0XSIsaXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBl
LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4iVU5JTVBMOiAiK3RoaXMudHlwZS50
b1VwcGVyQ2FzZSgpfSxlfSgpCitFZS5hZGQoMjksZnVuY3Rpb24oZSx0KXt2YXIgbj10Lm9wMQor
ZS5zdGFjaygpLmFwcGVuZFRleHQoZS5jb25zdGFudHMuZ2V0U3RyaW5nKG4pKX0pLEVlLmFkZCgz
MCxmdW5jdGlvbihlLHQpe3ZhciBuPXQub3AxCitlLnN0YWNrKCkuYXBwZW5kQ29tbWVudChlLmNv
bnN0YW50cy5nZXRTdHJpbmcobikpfSksRWUuYWRkKDMyLGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5v
cDEKK2Uuc3RhY2soKS5vcGVuRWxlbWVudChlLmNvbnN0YW50cy5nZXRTdHJpbmcobikpfSksRWUu
YWRkKDMzLGZ1bmN0aW9uKGUpe3ZhciB0PWUuZnJhbWUuZ2V0T3BlcmFuZCgpLG49KDAsci5pc0Nv
bnN0KSh0KT92b2lkIDA6bmV3IHIuUmVmZXJlbmNlQ2FjaGUodCksaT1uP24ucGVlaygpOnQudmFs
dWUoKQorZS5zdGFjaygpLnB1c2hSZW1vdGVFbGVtZW50KGkpLG4mJmUudXBkYXRlV2l0aChuZXcg
U2UobikpfSksRWUuYWRkKDM0LGZ1bmN0aW9uKGUpe3JldHVybiBlLnN0YWNrKCkucG9wUmVtb3Rl
RWxlbWVudCgpfSksRWUuYWRkKDM1LGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5vcDEscj1lLmNvbnN0
YW50cy5nZXRTdHJpbmcobikKK2Uuc3RhY2soKS5vcGVuRWxlbWVudChyLG5ldyB1dChlLmVudikp
fSksRWUuYWRkKDM2LGZ1bmN0aW9uKGUpe3ZhciB0PWUuZnJhbWUuZ2V0T3BlcmFuZCgpLnZhbHVl
KCkKK2Uuc3RhY2soKS5vcGVuRWxlbWVudCh0KX0pCit2YXIgb3Q9ZnVuY3Rpb24oKXtmdW5jdGlv
biBlKCl7dGhpcy5saXN0PW51bGwsdGhpcy5pc0NvbnN0PSEwfXJldHVybiBlLnByb3RvdHlwZS5h
cHBlbmQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5saXN0LG49dGhpcy5pc0NvbnN0CitudWxsPT09
dCYmKHQ9dGhpcy5saXN0PVtdKSx0LnB1c2goZSksdGhpcy5pc0NvbnN0PW4mJigwLHIuaXNDb25z
dCkoZSl9LGUucHJvdG90eXBlLnRvUmVmZXJlbmNlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5saXN0
LHQ9dGhpcy5pc0NvbnN0CityZXR1cm4gZT90P2ZlLmNyZWF0ZShkKGUpKTpuZXcgc3QoZSk6Z2V9
LGV9KCksc3Q9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihuKXt2YXIgaT0oMCx0LnBvc3NpYmxlQ29u
c3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMpKQorcmV0dXJuIGkubGlzdD1bXSxpLnRh
Zz0oMCxyLmNvbWJpbmVUYWdnZWQpKG4pLGkubGlzdD1uLGl9cmV0dXJuKDAsdC5pbmhlcml0cyko
bixlKSxuLnByb3RvdHlwZS5jb21wdXRlPWZ1bmN0aW9uKCl7cmV0dXJuIGQodGhpcy5saXN0KX0s
bn0oci5DYWNoZWRSZWZlcmVuY2UpLGF0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLmVu
dj1lLHRoaXMub3Bjb2Rlcz1udWxsLHRoaXMuY2xhc3NMaXN0PW51bGx9cmV0dXJuIGUucHJvdG90
eXBlLmFkZFN0YXRpY0F0dHJpYnV0ZT1mdW5jdGlvbihlLHQsbil7ImNsYXNzIj09PXQ/dGhpcy5h
ZGRDbGFzcyhmZS5jcmVhdGUobikpOnRoaXMuZW52LmdldEFwcGVuZE9wZXJhdGlvbnMoKS5zZXRB
dHRyaWJ1dGUoZSx0LG4pfSxlLnByb3RvdHlwZS5hZGRTdGF0aWNBdHRyaWJ1dGVOUz1mdW5jdGlv
bihlLHQsbixyKXt0aGlzLmVudi5nZXRBcHBlbmRPcGVyYXRpb25zKCkuc2V0QXR0cmlidXRlKGUs
bixyLHQpfSxlLnByb3RvdHlwZS5hZGREeW5hbWljQXR0cmlidXRlPWZ1bmN0aW9uKGUsdCxuLHIp
e3ZhciBpLG8KKyJjbGFzcyI9PT10P3RoaXMuYWRkQ2xhc3Mobik6KGk9dGhpcy5lbnYuYXR0cmli
dXRlRm9yKGUsdCxyKSxvPW5ldyBwdChlLGksdCxuKSx0aGlzLmFkZEF0dHJpYnV0ZShvKSl9LGUu
cHJvdG90eXBlLmFkZER5bmFtaWNBdHRyaWJ1dGVOUz1mdW5jdGlvbihlLHQsbixyLGkpe3ZhciBv
PXRoaXMuZW52LmF0dHJpYnV0ZUZvcihlLG4saSx0KSxzPW5ldyBwdChlLG8sbixyLHQpCit0aGlz
LmFkZEF0dHJpYnV0ZShzKX0sZS5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oZSx0KXt2YXIgbixy
LGksbyxzPXQuZW52LGE9dGhpcy5vcGNvZGVzLHU9dGhpcy5jbGFzc0xpc3QKK2ZvcihuPTA7YSYm
bjxhLmxlbmd0aDtuKyspdC51cGRhdGVXaXRoKGFbbl0pCit1JiYocj1zLmF0dHJpYnV0ZUZvcihl
LCJjbGFzcyIsITEpLGk9bmV3IHB0KGUsciwiY2xhc3MiLHUudG9SZWZlcmVuY2UoKSksKG89aS5m
bHVzaChzKSkmJnQudXBkYXRlV2l0aChvKSksdGhpcy5vcGNvZGVzPW51bGwsdGhpcy5jbGFzc0xp
c3Q9bnVsbH0sZS5wcm90b3R5cGUuYWRkQ2xhc3M9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jbGFz
c0xpc3QKK3R8fCh0PXRoaXMuY2xhc3NMaXN0PW5ldyBvdCksdC5hcHBlbmQoZSl9LGUucHJvdG90
eXBlLmFkZEF0dHJpYnV0ZT1mdW5jdGlvbihlKXt2YXIgdCxuPWUuZmx1c2godGhpcy5lbnYpCitu
JiYodD10aGlzLm9wY29kZXMsdHx8KHQ9dGhpcy5vcGNvZGVzPVtdKSx0LnB1c2gobikpfSxlfSgp
LHV0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLmVudj1lLHRoaXMuYXR0cmlidXRlTmFt
ZXM9bnVsbCx0aGlzLmF0dHJpYnV0ZXM9bnVsbCx0aGlzLmNsYXNzTGlzdD1udWxsfXJldHVybiBl
LnByb3RvdHlwZS5hZGRTdGF0aWNBdHRyaWJ1dGU9ZnVuY3Rpb24oZSx0LG4peyJjbGFzcyI9PT10
P3RoaXMuYWRkQ2xhc3MoZmUuY3JlYXRlKG4pKTp0aGlzLnNob3VsZEFkZEF0dHJpYnV0ZSh0KSYm
dGhpcy5hZGRBdHRyaWJ1dGUodCxuZXcgY3QoZSx0LG4pKX0sZS5wcm90b3R5cGUuYWRkU3RhdGlj
QXR0cmlidXRlTlM9ZnVuY3Rpb24oZSx0LG4scil7dGhpcy5zaG91bGRBZGRBdHRyaWJ1dGUobikm
JnRoaXMuYWRkQXR0cmlidXRlKG4sbmV3IGN0KGUsbixyLHQpKX0sZS5wcm90b3R5cGUuYWRkRHlu
YW1pY0F0dHJpYnV0ZT1mdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvCisiY2xhc3MiPT09dD90aGlz
LmFkZENsYXNzKG4pOnRoaXMuc2hvdWxkQWRkQXR0cmlidXRlKHQpJiYoaT10aGlzLmVudi5hdHRy
aWJ1dGVGb3IoZSx0LHIpLG89bmV3IHB0KGUsaSx0LG4pLHRoaXMuYWRkQXR0cmlidXRlKHQsbykp
fSxlLnByb3RvdHlwZS5hZGREeW5hbWljQXR0cmlidXRlTlM9ZnVuY3Rpb24oZSx0LG4scixpKXt2
YXIgbyxzCit0aGlzLnNob3VsZEFkZEF0dHJpYnV0ZShuKSYmKG89dGhpcy5lbnYuYXR0cmlidXRl
Rm9yKGUsbixpLHQpLHM9bmV3IHB0KGUsbyxuLHIsdCksdGhpcy5hZGRBdHRyaWJ1dGUobixzKSl9
LGUucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8scyxhPXRoaXMuZW52
LHU9dGhpcy5hdHRyaWJ1dGVzLGw9dGhpcy5jbGFzc0xpc3QKK2ZvcihuPTA7dSYmbjx1Lmxlbmd0
aDtuKyspKHI9dVtuXS5mbHVzaChhKSkmJnQudXBkYXRlV2l0aChyKQorbCYmKGk9YS5hdHRyaWJ1
dGVGb3IoZSwiY2xhc3MiLCExKSxvPW5ldyBwdChlLGksImNsYXNzIixsLnRvUmVmZXJlbmNlKCkp
LChzPW8uZmx1c2goYSkpJiZ0LnVwZGF0ZVdpdGgocykpfSxlLnByb3RvdHlwZS5zaG91bGRBZGRB
dHRyaWJ1dGU9ZnVuY3Rpb24oZSl7cmV0dXJuIXRoaXMuYXR0cmlidXRlTmFtZXN8fC0xPT09dGhp
cy5hdHRyaWJ1dGVOYW1lcy5pbmRleE9mKGUpfSxlLnByb3RvdHlwZS5hZGRDbGFzcz1mdW5jdGlv
bihlKXt2YXIgdD10aGlzLmNsYXNzTGlzdAordHx8KHQ9dGhpcy5jbGFzc0xpc3Q9bmV3IG90KSx0
LmFwcGVuZChlKX0sZS5wcm90b3R5cGUuYWRkQXR0cmlidXRlPWZ1bmN0aW9uKGUsdCl7dmFyIHI9
dGhpcy5hdHRyaWJ1dGVOYW1lcyxpPXRoaXMuYXR0cmlidXRlcworcnx8KHI9dGhpcy5hdHRyaWJ1
dGVOYW1lcz1bXSxpPXRoaXMuYXR0cmlidXRlcz1bXSksci5wdXNoKGUpLCgwLG4udW53cmFwKShp
KS5wdXNoKHQpfSxlfSgpCitFZS5hZGQoMzcsZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdGFjaygpLG49
IkZsdXNoRWxlbWVudE9wY29kZSNldmFsdWF0ZSIKK3QuZXhwZWN0T3BlcmF0aW9ucyhuKS5mbHVz
aCh0LmV4cGVjdENvbnN0cnVjdGluZyhuKSxlKSx0LmZsdXNoRWxlbWVudCgpfSksRWUuYWRkKDM4
LGZ1bmN0aW9uKGUpe3JldHVybiBlLnN0YWNrKCkuY2xvc2VFbGVtZW50KCl9KSxFZS5hZGQoMzks
ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3RhY2soKS5wb3BFbGVtZW50KCl9KSxFZS5hZGQoNDAsZnVu
Y3Rpb24oZSx0KXt2YXIgbixyPXQub3AxLGk9dC5vcDIsbz10Lm9wMyxzPWUuY29uc3RhbnRzLmdl
dFN0cmluZyhyKSxhPWUuY29uc3RhbnRzLmdldFN0cmluZyhpKQorbz8obj1lLmNvbnN0YW50cy5n
ZXRTdHJpbmcobyksZS5zdGFjaygpLnNldFN0YXRpY0F0dHJpYnV0ZU5TKG4scyxhKSk6ZS5zdGFj
aygpLnNldFN0YXRpY0F0dHJpYnV0ZShzLGEpfSksRWUuYWRkKDQxLGZ1bmN0aW9uKGUsdCl7dmFy
IG49KHQub3AxLHQub3AyKSxyPXQub3AzLGk9ZS5jb25zdGFudHMuZ2V0T3RoZXIobiksbz1lLmNv
bnN0YW50cy5nZXRFeHByZXNzaW9uKHIpLHM9ZS5zdGFjaygpLGE9cy5jb25zdHJ1Y3RpbmcsdT1z
LnVwZGF0ZU9wZXJhdGlvbnMsbD1vLmV2YWx1YXRlKGUpLGM9ZS5keW5hbWljU2NvcGUoKSxwPWku
Y3JlYXRlKGEsbCxjLHUpCitlLmVudi5zY2hlZHVsZUluc3RhbGxNb2RpZmllcihwLGkpCit2YXIg
Zj1pLmdldERlc3RydWN0b3IocCkKK2YmJmUubmV3RGVzdHJveWFibGUoZiksZS51cGRhdGVXaXRo
KG5ldyBsdChpLHAsbCkpfSkKK3ZhciBsdD1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKG4scixpKXt2
YXIgbz0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMpKQor
cmV0dXJuIG8ubWFuYWdlcj1uLG8ubW9kaWZpZXI9cixvLmFyZ3M9aSxvLnR5cGU9InVwZGF0ZS1t
b2RpZmllciIsby50YWc9aS50YWcsby5sYXN0VXBkYXRlZD1pLnRhZy52YWx1ZSgpLG99cmV0dXJu
KDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbihlKXt2YXIg
dD10aGlzLm1hbmFnZXIsbj10aGlzLm1vZGlmaWVyLHI9dGhpcy50YWcsaT10aGlzLmxhc3RVcGRh
dGVkCityLnZhbGlkYXRlKGkpfHwoZS5lbnYuc2NoZWR1bGVVcGRhdGVNb2RpZmllcihuLHQpLHRo
aXMubGFzdFVwZGF0ZWQ9ci52YWx1ZSgpKX0sbi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7
cmV0dXJue2d1aWQ6dGhpcy5fZ3VpZCx0eXBlOnRoaXMudHlwZSxhcmdzOltKU09OLnN0cmluZ2lm
eSh0aGlzLmFyZ3MpXX19LG59KENlKSxjdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4scil7
dGhpcy5lbGVtZW50PWUsdGhpcy5uYW1lPXQsdGhpcy52YWx1ZT1uLHRoaXMubmFtZXNwYWNlPXJ9
cmV0dXJuIGUucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEFwcGVuZE9w
ZXJhdGlvbnMoKS5zZXRBdHRyaWJ1dGUodGhpcy5lbGVtZW50LHRoaXMubmFtZSx0aGlzLnZhbHVl
LHRoaXMubmFtZXNwYWNlKSxudWxsfSxlfSgpLHB0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQs
bixyLGkpe3RoaXMuZWxlbWVudD1lLHRoaXMuYXR0cmlidXRlTWFuYWdlcj10LHRoaXMubmFtZT1u
LHRoaXMucmVmZXJlbmNlPXIsdGhpcy5uYW1lc3BhY2U9aSx0aGlzLmNhY2hlPW51bGwsdGhpcy50
YWc9ci50YWd9cmV0dXJuIGUucHJvdG90eXBlLnBhdGNoPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMu
ZWxlbWVudCxpPXRoaXMuY2FjaGUsbz0oMCxuLmV4cGVjdCkoaSwibXVzdCBwYXRjaCBhZnRlciBm
bHVzaCIpLnJldmFsaWRhdGUoKTsoMCxyLmlzTW9kaWZpZWQpKG8pJiZ0aGlzLmF0dHJpYnV0ZU1h
bmFnZXIudXBkYXRlQXR0cmlidXRlKGUsdCxvLHRoaXMubmFtZXNwYWNlKX0sZS5wcm90b3R5cGUu
Zmx1c2g9ZnVuY3Rpb24oZSl7dmFyIHQsbixpLG89dGhpcy5yZWZlcmVuY2Uscz10aGlzLmVsZW1l
bnQKK3JldHVybigwLHIuaXNDb25zdCkobyk/KHQ9by52YWx1ZSgpLHRoaXMuYXR0cmlidXRlTWFu
YWdlci5zZXRBdHRyaWJ1dGUoZSxzLHQsdGhpcy5uYW1lc3BhY2UpLG51bGwpOihuPXRoaXMuY2Fj
aGU9bmV3IHIuUmVmZXJlbmNlQ2FjaGUobyksaT1uLnBlZWsoKSx0aGlzLmF0dHJpYnV0ZU1hbmFn
ZXIuc2V0QXR0cmlidXRlKGUscyxpLHRoaXMubmFtZXNwYWNlKSxuZXcgZnQodGhpcykpfSxlLnBy
b3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVsZW1lbnQsdD10aGlzLm5hbWVz
cGFjZSxyPXRoaXMubmFtZSxpPXRoaXMuY2FjaGUsbz1tKGUpLHM9KDAsbi5leHBlY3QpKGksIm11
c3Qgc2VyaWFsaXplIGFmdGVyIGZsdXNoIikucGVlaygpCityZXR1cm4gdD97ZWxlbWVudDpvLHR5
cGU6ImF0dHJpYnV0ZSIsbmFtZXNwYWNlOnQsbmFtZTpyLGxhc3RWYWx1ZTpzfTp7ZWxlbWVudDpv
LHR5cGU6ImF0dHJpYnV0ZSIsbmFtZXNwYWNlOnZvaWQgMD09PXQ/bnVsbDp0LG5hbWU6cixsYXN0
VmFsdWU6c319LGV9KCkKK0VlLmFkZCg0MixmdW5jdGlvbihlLHQpe3ZhciBuPXQub3AxLHI9dC5v
cDIsaT10Lm9wMyxvPWUuY29uc3RhbnRzLmdldFN0cmluZyhuKSxzPWUuY29uc3RhbnRzLmdldFN0
cmluZyhyKSxhPWUuZnJhbWUuZ2V0T3BlcmFuZCgpCitlLnN0YWNrKCkuc2V0RHluYW1pY0F0dHJp
YnV0ZU5TKHMsbyxhLCEhaSl9KSxFZS5hZGQoNDMsZnVuY3Rpb24oZSx0KXt2YXIgbj10Lm9wMSxy
PXQub3AyLGk9ZS5jb25zdGFudHMuZ2V0U3RyaW5nKG4pLG89ZS5mcmFtZS5nZXRPcGVyYW5kKCkK
K2Uuc3RhY2soKS5zZXREeW5hbWljQXR0cmlidXRlKGksbywhIXIpfSkKK3ZhciBmdD1mdW5jdGlv
bihlKXtmdW5jdGlvbiBuKG4pe3ZhciByPSgwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybiko
dGhpcyxlLmNhbGwodGhpcykpCityZXR1cm4gci50eXBlPSJwYXRjaC1lbGVtZW50IixyLnRhZz1u
LnRhZyxyLm9wZXJhdGlvbj1uLHJ9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlw
ZS5ldmFsdWF0ZT1mdW5jdGlvbihlKXt0aGlzLm9wZXJhdGlvbi5wYXRjaChlLmVudil9LG4ucHJv
dG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybntndWlkOnRoaXMuX2d1aWQsdHlwZTp0aGlz
LnR5cGUsZGV0YWlsczp0aGlzLm9wZXJhdGlvbi50b0pTT04oKX19LG59KENlKSxodD1mdW5jdGlv
bigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5ub2RlPWV9cmV0dXJuIGUucHJvdG90eXBlLmZpcnN0Tm9k
ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGV9LGV9KCksZHQ9ZnVuY3Rpb24oKXtmdW5jdGlv
biBlKGUpe3RoaXMubm9kZT1lfXJldHVybiBlLnByb3RvdHlwZS5sYXN0Tm9kZT1mdW5jdGlvbigp
e3JldHVybiB0aGlzLm5vZGV9LGV9KCksbXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMu
Ym91bmRzPWV9cmV0dXJuIGUucHJvdG90eXBlLnBhcmVudEVsZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1
cm4gdGhpcy5ib3VuZHMucGFyZW50RWxlbWVudCgpfSxlLnByb3RvdHlwZS5maXJzdE5vZGU9ZnVu
Y3Rpb24oKXtyZXR1cm4gdGhpcy5ib3VuZHMuZmlyc3ROb2RlKCl9LGUucHJvdG90eXBlLmxhc3RO
b2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYm91bmRzLmxhc3ROb2RlKCl9LGUucHJvdG90eXBl
LnVwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLmJvdW5kcz1lfSxlfSgpLGd0PWZ1bmN0aW9uKCl7ZnVu
Y3Rpb24gZShlLHQscil7dGhpcy5jb25zdHJ1Y3Rpbmc9bnVsbCx0aGlzLm9wZXJhdGlvbnM9bnVs
bCx0aGlzLmVsZW1lbnRTdGFjaz1uZXcgbi5TdGFjayx0aGlzLm5leHRTaWJsaW5nU3RhY2s9bmV3
IG4uU3RhY2ssdGhpcy5ibG9ja1N0YWNrPW5ldyBuLlN0YWNrLHRoaXMuZW52PWUsdGhpcy5kb209
ZS5nZXRBcHBlbmRPcGVyYXRpb25zKCksdGhpcy51cGRhdGVPcGVyYXRpb25zPWUuZ2V0RE9NKCks
dGhpcy5lbGVtZW50PXQsdGhpcy5uZXh0U2libGluZz1yLHRoaXMuZGVmYXVsdE9wZXJhdGlvbnM9
bmV3IGF0KGUpLHRoaXMuZWxlbWVudFN0YWNrLnB1c2godGhpcy5lbGVtZW50KSx0aGlzLm5leHRT
aWJsaW5nU3RhY2sucHVzaCh0aGlzLm5leHRTaWJsaW5nKX1yZXR1cm4gZS5mb3JJbml0aWFsUmVu
ZGVyPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gbmV3IGUodCxuLHIpfSxlLnJlc3VtZT1mdW5jdGlv
bih0LG4scil7dmFyIGk9bi5wYXJlbnRFbGVtZW50KCksbz1uZXcgZSh0LGkscikKK3JldHVybiBv
LnB1c2hCbG9ja1RyYWNrZXIobiksb30sZS5wcm90b3R5cGUuZXhwZWN0Q29uc3RydWN0aW5nPWZ1
bmN0aW9uKGUpe3JldHVybigwLG4uZXhwZWN0KSh0aGlzLmNvbnN0cnVjdGluZyxlKyIgc2hvdWxk
IG9ubHkgYmUgY2FsbGVkIHdoaWxlIGNvbnN0cnVjdGluZyBhbiBlbGVtZW50Iil9LGUucHJvdG90
eXBlLmV4cGVjdE9wZXJhdGlvbnM9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsbi5leHBlY3QpKHRoaXMu
b3BlcmF0aW9ucyxlKyIgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoaWxlIGNvbnN0cnVjdGluZyBh
biBlbGVtZW50Iil9LGUucHJvdG90eXBlLmJsb2NrPWZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5leHBl
Y3QpKHRoaXMuYmxvY2tTdGFjay5jdXJyZW50LCJFeHBlY3RlZCBhIGN1cnJlbnQgYmxvY2sgdHJh
Y2tlciIpfSxlLnByb3RvdHlwZS5wb3BFbGVtZW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5lbGVt
ZW50U3RhY2ssdD10aGlzLm5leHRTaWJsaW5nU3RhY2sscj1lLnBvcCgpCityZXR1cm4gdC5wb3Ao
KSx0aGlzLmVsZW1lbnQ9KDAsbi5leHBlY3QpKGUuY3VycmVudCwiY2FuJ3QgcG9wIHBhc3QgdGhl
IGxhc3QgZWxlbWVudCIpLHRoaXMubmV4dFNpYmxpbmc9dC5jdXJyZW50LHJ9LGUucHJvdG90eXBl
LnB1c2hTaW1wbGVCbG9jaz1mdW5jdGlvbigpe3ZhciBlPW5ldyB5dCh0aGlzLmVsZW1lbnQpCity
ZXR1cm4gdGhpcy5wdXNoQmxvY2tUcmFja2VyKGUpLGV9LGUucHJvdG90eXBlLnB1c2hVcGRhdGFi
bGVCbG9jaz1mdW5jdGlvbigpe3ZhciBlPW5ldyBidCh0aGlzLmVsZW1lbnQpCityZXR1cm4gdGhp
cy5wdXNoQmxvY2tUcmFja2VyKGUpLGV9LGUucHJvdG90eXBlLnB1c2hCbG9ja1RyYWNrZXI9ZnVu
Y3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0m
JmFyZ3VtZW50c1sxXSxuPXRoaXMuYmxvY2tTdGFjay5jdXJyZW50CityZXR1cm4gbnVsbCE9PW4m
JihuLm5ld0Rlc3Ryb3lhYmxlKGUpLHR8fG4ubmV3Qm91bmRzKGUpKSx0aGlzLmJsb2NrU3RhY2su
cHVzaChlKSxlfSxlLnByb3RvdHlwZS5wdXNoQmxvY2tMaXN0PWZ1bmN0aW9uKGUpe3ZhciB0PW5l
dyBfdCh0aGlzLmVsZW1lbnQsZSksbj10aGlzLmJsb2NrU3RhY2suY3VycmVudAorcmV0dXJuIG51
bGwhPT1uJiYobi5uZXdEZXN0cm95YWJsZSh0KSxuLm5ld0JvdW5kcyh0KSksdGhpcy5ibG9ja1N0
YWNrLnB1c2godCksdH0sZS5wcm90b3R5cGUucG9wQmxvY2s9ZnVuY3Rpb24oKXtyZXR1cm4gdGhp
cy5ibG9jaygpLmZpbmFsaXplKHRoaXMpLCgwLG4uZXhwZWN0KSh0aGlzLmJsb2NrU3RhY2sucG9w
KCksIkV4cGVjdGVkIHBvcEJsb2NrIHRvIHJldHVybiBhIGJsb2NrIil9LGUucHJvdG90eXBlLm9w
ZW5FbGVtZW50PWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09
YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0aGlzLmRlZmF1bHRPcGVyYXRpb25zLG49dGhpcy5k
b20uY3JlYXRlRWxlbWVudChlLHRoaXMuZWxlbWVudCkKK3JldHVybiB0aGlzLmNvbnN0cnVjdGlu
Zz1uLHRoaXMub3BlcmF0aW9ucz10LG59LGUucHJvdG90eXBlLmZsdXNoRWxlbWVudD1mdW5jdGlv
bigpe3ZhciBlPXRoaXMuZWxlbWVudCx0PSgwLG4uZXhwZWN0KSh0aGlzLmNvbnN0cnVjdGluZywi
Zmx1c2hFbGVtZW50IHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIGNvbnN0cnVjdGluZyBhbiBl
bGVtZW50IikKK3RoaXMuZG9tLmluc2VydEJlZm9yZShlLHQsdGhpcy5uZXh0U2libGluZyksdGhp
cy5jb25zdHJ1Y3Rpbmc9bnVsbCx0aGlzLm9wZXJhdGlvbnM9bnVsbCx0aGlzLnB1c2hFbGVtZW50
KHQpLHRoaXMuYmxvY2soKS5vcGVuRWxlbWVudCh0KX0sZS5wcm90b3R5cGUucHVzaFJlbW90ZUVs
ZW1lbnQ9ZnVuY3Rpb24oZSl7dGhpcy5wdXNoRWxlbWVudChlKQordmFyIHQ9bmV3IHZ0KGUpCit0
aGlzLnB1c2hCbG9ja1RyYWNrZXIodCwhMCl9LGUucHJvdG90eXBlLnBvcFJlbW90ZUVsZW1lbnQ9
ZnVuY3Rpb24oKXt0aGlzLnBvcEJsb2NrKCksdGhpcy5wb3BFbGVtZW50KCl9LGUucHJvdG90eXBl
LnB1c2hFbGVtZW50PWZ1bmN0aW9uKGUpe3RoaXMuZWxlbWVudD1lLHRoaXMuZWxlbWVudFN0YWNr
LnB1c2goZSksdGhpcy5uZXh0U2libGluZz1udWxsLHRoaXMubmV4dFNpYmxpbmdTdGFjay5wdXNo
KG51bGwpfSxlLnByb3RvdHlwZS5uZXdEZXN0cm95YWJsZT1mdW5jdGlvbihlKXt0aGlzLmJsb2Nr
KCkubmV3RGVzdHJveWFibGUoZSl9LGUucHJvdG90eXBlLm5ld0JvdW5kcz1mdW5jdGlvbihlKXt0
aGlzLmJsb2NrKCkubmV3Qm91bmRzKGUpfSxlLnByb3RvdHlwZS5hcHBlbmRUZXh0PWZ1bmN0aW9u
KGUpe3ZhciB0PXRoaXMuZG9tLG49dC5jcmVhdGVUZXh0Tm9kZShlKQorcmV0dXJuIHQuaW5zZXJ0
QmVmb3JlKHRoaXMuZWxlbWVudCxuLHRoaXMubmV4dFNpYmxpbmcpLHRoaXMuYmxvY2soKS5uZXdO
b2RlKG4pLG59LGUucHJvdG90eXBlLmFwcGVuZENvbW1lbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhp
cy5kb20sbj10LmNyZWF0ZUNvbW1lbnQoZSkKK3JldHVybiB0Lmluc2VydEJlZm9yZSh0aGlzLmVs
ZW1lbnQsbix0aGlzLm5leHRTaWJsaW5nKSx0aGlzLmJsb2NrKCkubmV3Tm9kZShuKSxufSxlLnBy
b3RvdHlwZS5zZXRTdGF0aWNBdHRyaWJ1dGU9ZnVuY3Rpb24oZSx0KXt0aGlzLmV4cGVjdE9wZXJh
dGlvbnMoInNldFN0YXRpY0F0dHJpYnV0ZSIpLmFkZFN0YXRpY0F0dHJpYnV0ZSh0aGlzLmV4cGVj
dENvbnN0cnVjdGluZygic2V0U3RhdGljQXR0cmlidXRlIiksZSx0KX0sZS5wcm90b3R5cGUuc2V0
U3RhdGljQXR0cmlidXRlTlM9ZnVuY3Rpb24oZSx0LG4pe3RoaXMuZXhwZWN0T3BlcmF0aW9ucygi
c2V0U3RhdGljQXR0cmlidXRlTlMiKS5hZGRTdGF0aWNBdHRyaWJ1dGVOUyh0aGlzLmV4cGVjdENv
bnN0cnVjdGluZygic2V0U3RhdGljQXR0cmlidXRlTlMiKSxlLHQsbil9LGUucHJvdG90eXBlLnNl
dER5bmFtaWNBdHRyaWJ1dGU9ZnVuY3Rpb24oZSx0LG4pe3RoaXMuZXhwZWN0T3BlcmF0aW9ucygi
c2V0RHluYW1pY0F0dHJpYnV0ZSIpLmFkZER5bmFtaWNBdHRyaWJ1dGUodGhpcy5leHBlY3RDb25z
dHJ1Y3RpbmcoInNldER5bmFtaWNBdHRyaWJ1dGUiKSxlLHQsbil9LGUucHJvdG90eXBlLnNldER5
bmFtaWNBdHRyaWJ1dGVOUz1mdW5jdGlvbihlLHQsbixyKXt0aGlzLmV4cGVjdE9wZXJhdGlvbnMo
InNldER5bmFtaWNBdHRyaWJ1dGVOUyIpLmFkZER5bmFtaWNBdHRyaWJ1dGVOUyh0aGlzLmV4cGVj
dENvbnN0cnVjdGluZygic2V0RHluYW1pY0F0dHJpYnV0ZU5TIiksZSx0LG4scil9LGUucHJvdG90
eXBlLmNsb3NlRWxlbWVudD1mdW5jdGlvbigpe3RoaXMuYmxvY2soKS5jbG9zZUVsZW1lbnQoKSx0
aGlzLnBvcEVsZW1lbnQoKX0sZX0oKSx5dD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5w
YXJlbnQ9ZSx0aGlzLmZpcnN0PW51bGwsdGhpcy5sYXN0PW51bGwsdGhpcy5kZXN0cm95YWJsZXM9
bnVsbCx0aGlzLm5lc3Rpbmc9MH1yZXR1cm4gZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigp
e3ZhciBlLHQ9dGhpcy5kZXN0cm95YWJsZXMKK2lmKHQmJnQubGVuZ3RoKWZvcihlPTA7ZTx0Lmxl
bmd0aDtlKyspdFtlXS5kZXN0cm95KCl9LGUucHJvdG90eXBlLnBhcmVudEVsZW1lbnQ9ZnVuY3Rp
b24oKXtyZXR1cm4gdGhpcy5wYXJlbnR9LGUucHJvdG90eXBlLmZpcnN0Tm9kZT1mdW5jdGlvbigp
e3JldHVybiB0aGlzLmZpcnN0JiZ0aGlzLmZpcnN0LmZpcnN0Tm9kZSgpfSxlLnByb3RvdHlwZS5s
YXN0Tm9kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxhc3QmJnRoaXMubGFzdC5sYXN0Tm9kZSgp
fSxlLnByb3RvdHlwZS5vcGVuRWxlbWVudD1mdW5jdGlvbihlKXt0aGlzLm5ld05vZGUoZSksdGhp
cy5uZXN0aW5nKyt9LGUucHJvdG90eXBlLmNsb3NlRWxlbWVudD1mdW5jdGlvbigpe3RoaXMubmVz
dGluZy0tfSxlLnByb3RvdHlwZS5uZXdOb2RlPWZ1bmN0aW9uKGUpezA9PT10aGlzLm5lc3Rpbmcm
Jih0aGlzLmZpcnN0fHwodGhpcy5maXJzdD1uZXcgaHQoZSkpLHRoaXMubGFzdD1uZXcgZHQoZSkp
fSxlLnByb3RvdHlwZS5uZXdCb3VuZHM9ZnVuY3Rpb24oZSl7MD09PXRoaXMubmVzdGluZyYmKHRo
aXMuZmlyc3R8fCh0aGlzLmZpcnN0PWUpLHRoaXMubGFzdD1lKX0sZS5wcm90b3R5cGUubmV3RGVz
dHJveWFibGU9ZnVuY3Rpb24oZSl7dGhpcy5kZXN0cm95YWJsZXM9dGhpcy5kZXN0cm95YWJsZXN8
fFtdLHRoaXMuZGVzdHJveWFibGVzLnB1c2goZSl9LGUucHJvdG90eXBlLmZpbmFsaXplPWZ1bmN0
aW9uKGUpe3RoaXMuZmlyc3R8fGUuYXBwZW5kQ29tbWVudCgiIil9LGV9KCksdnQ9ZnVuY3Rpb24o
ZSl7ZnVuY3Rpb24gbigpe3JldHVybigwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhp
cyxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnBy
b3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMp
LGEodGhpcyl9LG59KHl0KSxidD1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7cmV0dXJuKDAsdC5w
b3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1y
ZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKGUpe3Zh
ciB0LG49dGhpcy5kZXN0cm95YWJsZXMKK2lmKG4mJm4ubGVuZ3RoKWZvcih0PTA7dDxuLmxlbmd0
aDt0KyspZS5kaWREZXN0cm95KG5bdF0pCit2YXIgcj1hKHRoaXMpCityZXR1cm4gdGhpcy5kZXN0
cm95YWJsZXM9bnVsbCx0aGlzLmZpcnN0PW51bGwsdGhpcy5sYXN0PW51bGwscn0sbn0oeXQpLF90
PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMucGFyZW50PWUsdGhpcy5ib3VuZExpc3Q9
dCx0aGlzLnBhcmVudD1lLHRoaXMuYm91bmRMaXN0PXR9cmV0dXJuIGUucHJvdG90eXBlLmRlc3Ry
b3k9ZnVuY3Rpb24oKXt0aGlzLmJvdW5kTGlzdC5mb3JFYWNoTm9kZShmdW5jdGlvbihlKXtyZXR1
cm4gZS5kZXN0cm95KCl9KX0sZS5wcm90b3R5cGUucGFyZW50RWxlbWVudD1mdW5jdGlvbigpe3Jl
dHVybiB0aGlzLnBhcmVudH0sZS5wcm90b3R5cGUuZmlyc3ROb2RlPWZ1bmN0aW9uKCl7dmFyIGU9
dGhpcy5ib3VuZExpc3QuaGVhZCgpCityZXR1cm4gZSYmZS5maXJzdE5vZGUoKX0sZS5wcm90b3R5
cGUubGFzdE5vZGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJvdW5kTGlzdC50YWlsKCkKK3JldHVy
biBlJiZlLmxhc3ROb2RlKCl9LGUucHJvdG90eXBlLm9wZW5FbGVtZW50PWZ1bmN0aW9uKCl7KDAs
bi5hc3NlcnQpKCExLCJDYW5ub3Qgb3BlbkVsZW1lbnQgZGlyZWN0bHkgaW5zaWRlIGEgYmxvY2sg
bGlzdCIpfSxlLnByb3RvdHlwZS5jbG9zZUVsZW1lbnQ9ZnVuY3Rpb24oKXsoMCxuLmFzc2VydCko
ITEsIkNhbm5vdCBjbG9zZUVsZW1lbnQgZGlyZWN0bHkgaW5zaWRlIGEgYmxvY2sgbGlzdCIpfSxl
LnByb3RvdHlwZS5uZXdOb2RlPWZ1bmN0aW9uKCl7KDAsbi5hc3NlcnQpKCExLCJDYW5ub3QgY3Jl
YXRlIGEgbmV3IG5vZGUgZGlyZWN0bHkgaW5zaWRlIGEgYmxvY2sgbGlzdCIpfSxlLnByb3RvdHlw
ZS5uZXdCb3VuZHM9ZnVuY3Rpb24oKXt9LGUucHJvdG90eXBlLm5ld0Rlc3Ryb3lhYmxlPWZ1bmN0
aW9uKCl7fSxlLnByb3RvdHlwZS5maW5hbGl6ZT1mdW5jdGlvbigpe30sZX0oKSx3dD1mdW5jdGlv
bihlKXtmdW5jdGlvbiBuKG4pe3ZhciByPSgwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybiko
dGhpcyxlLmNhbGwodGhpcykpCityZXR1cm4gci50eXBlPSJ2YWx1ZSIsci5yZWZlcmVuY2U9ZmUu
Y3JlYXRlKG4pLHJ9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS5ldmFsdWF0
ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlZmVyZW5jZX0sbi5wcm90b3R5cGUudG9KU09OPWZ1
bmN0aW9uKCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMucmVmZXJlbmNlLnZhbHVlKCkpfSxu
fShpdCksRXQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihuKXt2YXIgcj0oMCx0LnBvc3NpYmxlQ29u
c3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMpKQorcmV0dXJuIHIuaW5uZXI9bixyLnR5
cGU9Imhhcy1ibG9jayIscn1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLmV2
YWx1YXRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaW5uZXIuZXZhbHVhdGUoZSkKK3JldHVybiBm
ZS5jcmVhdGUoISF0KX0sbi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuImhhcy1i
bG9jaygiK3RoaXMuaW5uZXIudG9KU09OKCkrIikifSxufShpdCkseHQ9ZnVuY3Rpb24oZSl7ZnVu
Y3Rpb24gbihuKXt2YXIgcj0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5j
YWxsKHRoaXMpKQorcmV0dXJuIHIuaW5uZXI9bixyLnR5cGU9Imhhcy1ibG9jay1wYXJhbXMiLHJ9
cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbihl
KXt2YXIgdD10aGlzLmlubmVyLmV2YWx1YXRlKGUpLG49dCYmdC5zeW1ib2xUYWJsZS5nZXRTeW1i
b2xzKCkubG9jYWxzCityZXR1cm4gZmUuY3JlYXRlKCEhbil9LG4ucHJvdG90eXBlLnRvSlNPTj1m
dW5jdGlvbigpe3JldHVybiJoYXMtYmxvY2stcGFyYW1zKCIrdGhpcy5pbm5lci50b0pTT04oKSsi
KSJ9LG59KGl0KSxDdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnN5bWJvbD1lLHRo
aXMuZGVidWc9dH1yZXR1cm4gZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oZSl7cmV0dXJu
IGUuc2NvcGUoKS5nZXRCbG9jayh0aGlzLnN5bWJvbCl9LGUucHJvdG90eXBlLnRvSlNPTj1mdW5j
dGlvbigpe3JldHVybiJnZXQtYmxvY2soJCIrdGhpcy5zeW1ib2wrIigiK3RoaXMuZGVidWcrIikp
In0sZX0oKSxPdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnN5bWJvbD1lLHRoaXMu
bmFtZT10fXJldHVybiBlLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlz
LnN5bWJvbCxuPXRoaXMubmFtZQorcmV0dXJuIGUuc2NvcGUoKS5nZXRQYXJ0aWFsQXJncyh0KS5i
bG9ja3Nbbl19LGUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiJnZXQtYmxvY2so
JCIrdGhpcy5zeW1ib2wrIigkQVJHUykuIit0aGlzLm5hbWUrIikpIn0sZX0oKSxBdD1mdW5jdGlv
bihlLHQpe3RoaXMuc3RhcnQ9ZSx0aGlzLmVuZD10fSxUdD1mdW5jdGlvbihlKXtmdW5jdGlvbiBu
KG4scixpKXt2YXIgbz0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxs
KHRoaXMsbixyKSkKK3JldHVybiBvLnN5bWJvbHM9aSxvfXJldHVybigwLHQuaW5oZXJpdHMpKG4s
ZSksbn0oQXQpLFN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMubGFiZWxzPSgwLG4uZGlj
dCkoKSx0aGlzLmp1bXBzPVtdLHRoaXMucmFuZ2VzPVtdfXJldHVybiBlLnByb3RvdHlwZS5sYWJl
bD1mdW5jdGlvbihlLHQpe3RoaXMubGFiZWxzW2VdPXR9LGUucHJvdG90eXBlLmp1bXA9ZnVuY3Rp
b24oZSx0LG4pe3RoaXMuanVtcHMucHVzaCh7YXQ6ZSx0YXJnZXQ6bixUYXJnZXQ6dH0pfSxlLnBy
b3RvdHlwZS5yYW5nZT1mdW5jdGlvbihlLHQsbixyKXt0aGlzLnJhbmdlcy5wdXNoKHthdDplLHN0
YXJ0Om4sZW5kOnIsUmFuZ2U6dH0pfSxlLnByb3RvdHlwZS5wYXRjaD1mdW5jdGlvbihlKXt2YXIg
dCxuLHIsaSxvLHMscixhLHUsbCxjCitmb3IodD0wO3Q8dGhpcy5qdW1wcy5sZW5ndGg7dCsrKW49
dGhpcy5qdW1wc1t0XSxyPW4uYXQsaT1uLnRhcmdldCxvPW4uVGFyZ2V0LGUuc2V0KHIsbyx0aGlz
LmxhYmVsc1tpXSkKK2ZvcihjPTA7Yzx0aGlzLnJhbmdlcy5sZW5ndGg7YysrKXM9dGhpcy5yYW5n
ZXNbY10scj1zLmF0LGE9cy5zdGFydCx1PXMuZW5kLGw9cy5SYW5nZSxlLnNldChyLGwsdGhpcy5s
YWJlbHNbYV0sdGhpcy5sYWJlbHNbdV0tMSl9LGV9KCksUnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBl
KGUsdCxyKXt0aGlzLnN5bWJvbFRhYmxlPWUsdGhpcy5lbnY9dCx0aGlzLnByb2dyYW09cix0aGlz
LmxhYmVsc1N0YWNrPW5ldyBuLlN0YWNrLHRoaXMuY29uc3RhbnRzPXQuY29uc3RhbnRzLHRoaXMu
c3RhcnQ9ci5uZXh0fXJldHVybiBlLnByb3RvdHlwZS5vcGNvZGU9ZnVuY3Rpb24oZSx0LG4scil7
dGhpcy5wdXNoKGUsdCxuLHIpfSxlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUpe3ZhciB0PWFy
Z3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowLG49
YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjAs
cj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106
MAordGhpcy5wcm9ncmFtLnB1c2goZSx0LG4scil9LGUucHJvdG90eXBlLnN0YXJ0TGFiZWxzPWZ1
bmN0aW9uKCl7dGhpcy5sYWJlbHNTdGFjay5wdXNoKG5ldyBTdCl9LGUucHJvdG90eXBlLnN0b3BM
YWJlbHM9ZnVuY3Rpb24oKXsoMCxuLmV4cGVjdCkodGhpcy5sYWJlbHNTdGFjay5wb3AoKSwidW5i
YWxhbmNlZCBwdXNoIGFuZCBwb3AgbGFiZWxzIikucGF0Y2godGhpcy5wcm9ncmFtKX0sZS5wcm90
b3R5cGUucHV0UGFydGlhbERlZmluaXRpb249ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jb25zdGFu
dHMub3RoZXIoZSkKK3RoaXMub3Bjb2RlKDUwLHQpfSxlLnByb3RvdHlwZS5wdXREeW5hbWljUGFy
dGlhbERlZmluaXRpb249ZnVuY3Rpb24oKXt0aGlzLm9wY29kZSg0OSx0aGlzLmNvbnN0YW50cy5v
dGhlcih0aGlzLnN5bWJvbFRhYmxlKSl9LGUucHJvdG90eXBlLmV2YWx1YXRlUGFydGlhbD1mdW5j
dGlvbigpe3RoaXMub3Bjb2RlKDUxLHRoaXMuY29uc3RhbnRzLm90aGVyKHRoaXMuc3ltYm9sVGFi
bGUpLHRoaXMuY29uc3RhbnRzLm90aGVyKCgwLG4uZGljdCkoKSkpfSxlLnByb3RvdHlwZS5wdXRD
b21wb25lbnREZWZpbml0aW9uPWZ1bmN0aW9uKGUpe3RoaXMub3Bjb2RlKDIzLHRoaXMub3RoZXIo
ZSkpfSxlLnByb3RvdHlwZS5wdXREeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbj1mdW5jdGlvbigp
e3RoaXMub3Bjb2RlKDIyKX0sZS5wcm90b3R5cGUub3BlbkNvbXBvbmVudD1mdW5jdGlvbihlLHQp
e3RoaXMub3Bjb2RlKDI0LHRoaXMuYXJncyhlKSx0P3RoaXMuYmxvY2sodCk6MCl9LGUucHJvdG90
eXBlLmRpZENyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24oKXt0aGlzLm9wY29kZSgyNSl9LGUucHJvdG90
eXBlLnNoYWRvd0F0dHJpYnV0ZXM9ZnVuY3Rpb24oKXt0aGlzLm9wY29kZSgyNiksdGhpcy5vcGNv
ZGUoMjEpfSxlLnByb3RvdHlwZS5kaWRSZW5kZXJMYXlvdXQ9ZnVuY3Rpb24oKXt0aGlzLm9wY29k
ZSgyNyl9LGUucHJvdG90eXBlLmNsb3NlQ29tcG9uZW50PWZ1bmN0aW9uKCl7dGhpcy5vcGNvZGUo
MjgpfSxlLnByb3RvdHlwZS5keW5hbWljQ29udGVudD1mdW5jdGlvbihlKXt0aGlzLm9wY29kZSgz
MSx0aGlzLm90aGVyKGUpKX0sZS5wcm90b3R5cGUuY2F1dGlvdXNBcHBlbmQ9ZnVuY3Rpb24oKXt0
aGlzLmR5bmFtaWNDb250ZW50KG5ldyBwcil9LGUucHJvdG90eXBlLnRydXN0aW5nQXBwZW5kPWZ1
bmN0aW9uKCl7dGhpcy5keW5hbWljQ29udGVudChuZXcgbXIpfSxlLnByb3RvdHlwZS5ndWFyZGVk
Q2F1dGlvdXNBcHBlbmQ9ZnVuY3Rpb24oZSl7dGhpcy5keW5hbWljQ29udGVudChuZXcgaHIodGhp
cy5jb21waWxlRXhwcmVzc2lvbihlKSx0aGlzLnN5bWJvbFRhYmxlKSl9LGUucHJvdG90eXBlLmd1
YXJkZWRUcnVzdGluZ0FwcGVuZD1mdW5jdGlvbihlKXt0aGlzLmR5bmFtaWNDb250ZW50KG5ldyB5
cih0aGlzLmNvbXBpbGVFeHByZXNzaW9uKGUpLHRoaXMuc3ltYm9sVGFibGUpKX0sZS5wcm90b3R5
cGUudGV4dD1mdW5jdGlvbihlKXt0aGlzLm9wY29kZSgyOSx0aGlzLmNvbnN0YW50cy5zdHJpbmco
ZSkpfSxlLnByb3RvdHlwZS5vcGVuUHJpbWl0aXZlRWxlbWVudD1mdW5jdGlvbihlKXt0aGlzLm9w
Y29kZSgzMix0aGlzLmNvbnN0YW50cy5zdHJpbmcoZSkpfSxlLnByb3RvdHlwZS5vcGVuQ29tcG9u
ZW50RWxlbWVudD1mdW5jdGlvbihlKXt0aGlzLm9wY29kZSgzNSx0aGlzLmNvbnN0YW50cy5zdHJp
bmcoZSkpfSxlLnByb3RvdHlwZS5vcGVuRHluYW1pY1ByaW1pdGl2ZUVsZW1lbnQ9ZnVuY3Rpb24o
KXt0aGlzLm9wY29kZSgzNil9LGUucHJvdG90eXBlLmZsdXNoRWxlbWVudD1mdW5jdGlvbigpe3Ro
aXMub3Bjb2RlKDM3KX0sZS5wcm90b3R5cGUuY2xvc2VFbGVtZW50PWZ1bmN0aW9uKCl7dGhpcy5v
cGNvZGUoMzgpfSxlLnByb3RvdHlwZS5zdGF0aWNBdHRyPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10
aGlzLmNvbnN0YW50cy5zdHJpbmcoZSksaT10P3RoaXMuY29uc3RhbnRzLnN0cmluZyh0KTowLG89
dGhpcy5jb25zdGFudHMuc3RyaW5nKG4pCit0aGlzLm9wY29kZSg0MCxyLG8saSl9LGUucHJvdG90
eXBlLmR5bmFtaWNBdHRyTlM9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuY29uc3RhbnRzLnN0
cmluZyhlKSxpPXRoaXMuY29uc3RhbnRzLnN0cmluZyh0KQordGhpcy5vcGNvZGUoNDIscixpLDB8
bil9LGUucHJvdG90eXBlLmR5bmFtaWNBdHRyPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5jb25z
dGFudHMuc3RyaW5nKGUpCit0aGlzLm9wY29kZSg0MyxuLDB8dCl9LGUucHJvdG90eXBlLmNvbW1l
bnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jb25zdGFudHMuc3RyaW5nKGUpCit0aGlzLm9wY29k
ZSgzMCx0KX0sZS5wcm90b3R5cGUubW9kaWZpZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNv
bnN0YW50cy5leHByZXNzaW9uKHRoaXMuY29tcGlsZSh0KSkscj10aGlzLmVudi5sb29rdXBNb2Rp
ZmllcihlLHRoaXMuc3ltYm9sVGFibGUpLGk9dGhpcy5jb25zdGFudHMub3RoZXIociksbz10aGlz
LmNvbnN0YW50cy5zdHJpbmcoZSkKK3RoaXMub3Bjb2RlKDQxLG8saSxuKX0sZS5wcm90b3R5cGUu
cHV0SXRlcmF0b3I9ZnVuY3Rpb24oKXt0aGlzLm9wY29kZSg0NCl9LGUucHJvdG90eXBlLmVudGVy
TGlzdD1mdW5jdGlvbihlLHQpe3RoaXMucHVzaCg0NSksdGhpcy5sYWJlbHMucmFuZ2UodGhpcy5w
b3MsNDUsZSx0KX0sZS5wcm90b3R5cGUuZXhpdExpc3Q9ZnVuY3Rpb24oKXt0aGlzLm9wY29kZSg0
Nil9LGUucHJvdG90eXBlLmVudGVyV2l0aEtleT1mdW5jdGlvbihlLHQpe3RoaXMucHVzaCg0Nyks
dGhpcy5sYWJlbHMucmFuZ2UodGhpcy5wb3MsNDcsZSx0KX0sZS5wcm90b3R5cGUubmV4dEl0ZXI9
ZnVuY3Rpb24oZSl7dGhpcy5wdXNoKDQ4KSx0aGlzLmxhYmVscy5qdW1wKHRoaXMucG9zLDQ4LGUp
fSxlLnByb3RvdHlwZS5vcGVuQmxvY2s9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNvbnN0YW50
cy5leHByZXNzaW9uKHRoaXMuY29tcGlsZShlKSkscj10aGlzLmNvbnN0YW50cy5vdGhlcih0KQor
dGhpcy5vcGNvZGUoMjAscixuKX0sZS5wcm90b3R5cGUuY2xvc2VCbG9jaz1mdW5jdGlvbigpe3Ro
aXMub3Bjb2RlKDIxKX0sZS5wcm90b3R5cGUucHVzaFJlbW90ZUVsZW1lbnQ9ZnVuY3Rpb24oKXt0
aGlzLm9wY29kZSgzMyl9LGUucHJvdG90eXBlLnBvcFJlbW90ZUVsZW1lbnQ9ZnVuY3Rpb24oKXt0
aGlzLm9wY29kZSgzNCl9LGUucHJvdG90eXBlLnBvcEVsZW1lbnQ9ZnVuY3Rpb24oKXt0aGlzLm9w
Y29kZSgzOSl9LGUucHJvdG90eXBlLmxhYmVsPWZ1bmN0aW9uKGUpe3RoaXMubGFiZWxzLmxhYmVs
KGUsdGhpcy5uZXh0UG9zKX0sZS5wcm90b3R5cGUucHVzaENoaWxkU2NvcGU9ZnVuY3Rpb24oKXt0
aGlzLm9wY29kZSgwKX0sZS5wcm90b3R5cGUucG9wU2NvcGU9ZnVuY3Rpb24oKXt0aGlzLm9wY29k
ZSgxKX0sZS5wcm90b3R5cGUucHVzaER5bmFtaWNTY29wZT1mdW5jdGlvbigpe3RoaXMub3Bjb2Rl
KDIpfSxlLnByb3RvdHlwZS5wb3BEeW5hbWljU2NvcGU9ZnVuY3Rpb24oKXt0aGlzLm9wY29kZSgz
KX0sZS5wcm90b3R5cGUucHV0TnVsbD1mdW5jdGlvbigpe3RoaXMub3Bjb2RlKDQsdGhpcy5jb25z
dGFudHMuTlVMTF9SRUZFUkVOQ0UpfSxlLnByb3RvdHlwZS5wdXRWYWx1ZT1mdW5jdGlvbihlKXt2
YXIgdD10aGlzLmNvbnN0YW50cy5leHByZXNzaW9uKHRoaXMuY29tcGlsZUV4cHJlc3Npb24oZSkp
Cit0aGlzLm9wY29kZSg1LHQpfSxlLnByb3RvdHlwZS5wdXRBcmdzPWZ1bmN0aW9uKGUpe3ZhciB0
PXRoaXMuY29uc3RhbnRzLmV4cHJlc3Npb24odGhpcy5jb21waWxlKGUpKQordGhpcy5vcGNvZGUo
Nix0KX0sZS5wcm90b3R5cGUuYmluZER5bmFtaWNTY29wZT1mdW5jdGlvbihlKXt0aGlzLm9wY29k
ZSgxMix0aGlzLm5hbWVzKGUpKX0sZS5wcm90b3R5cGUuYmluZFBvc2l0aW9uYWxBcmdzPWZ1bmN0
aW9uKGUsdCl7dGhpcy5vcGNvZGUoNyx0aGlzLm5hbWVzKGUpLHRoaXMuc3ltYm9scyh0KSl9LGUu
cHJvdG90eXBlLmJpbmROYW1lZEFyZ3M9ZnVuY3Rpb24oZSx0KXt0aGlzLm9wY29kZSg4LHRoaXMu
bmFtZXMoZSksdGhpcy5zeW1ib2xzKHQpKX0sZS5wcm90b3R5cGUuYmluZEJsb2Nrcz1mdW5jdGlv
bihlLHQpe3RoaXMub3Bjb2RlKDksdGhpcy5uYW1lcyhlKSx0aGlzLnN5bWJvbHModCkpfSxlLnBy
b3RvdHlwZS5lbnRlcj1mdW5jdGlvbihlLHQpe3RoaXMucHVzaCgxMyksdGhpcy5sYWJlbHMucmFu
Z2UodGhpcy5wb3MsMTMsZSx0KX0sZS5wcm90b3R5cGUuZXhpdD1mdW5jdGlvbigpe3RoaXMub3Bj
b2RlKDE0KX0sZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jb25z
dGFudHMuYmxvY2soZSkKK3RoaXMub3Bjb2RlKDE1LHQpfSxlLnByb3RvdHlwZS50ZXN0PWZ1bmN0
aW9uKGUpe3ZhciB0PXZvaWQgMAoraWYoImNvbnN0Ij09PWUpdD1PZQorZWxzZSBpZigic2ltcGxl
Ij09PWUpdD1BZQorZWxzZSBpZigiZW52aXJvbm1lbnQiPT09ZSl0PVRlCitlbHNle2lmKCJmdW5j
dGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigidW5yZWFjaGFibGUiKQordD1lfXZhciBu
PXRoaXMuY29uc3RhbnRzLmZ1bmN0aW9uKHQpCit0aGlzLm9wY29kZSgxOSxuKX0sZS5wcm90b3R5
cGUuanVtcD1mdW5jdGlvbihlKXt0aGlzLnB1c2goMTYpLHRoaXMubGFiZWxzLmp1bXAodGhpcy5w
b3MsMTYsZSl9LGUucHJvdG90eXBlLmp1bXBJZj1mdW5jdGlvbihlKXt0aGlzLnB1c2goMTcpLHRo
aXMubGFiZWxzLmp1bXAodGhpcy5wb3MsMTcsZSl9LGUucHJvdG90eXBlLmp1bXBVbmxlc3M9ZnVu
Y3Rpb24oZSl7dGhpcy5wdXNoKDE4KSx0aGlzLmxhYmVscy5qdW1wKHRoaXMucG9zLDE4LGUpfSxl
LnByb3RvdHlwZS5uYW1lcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49ZS5tYXAoZnVuY3Rpb24o
ZSl7cmV0dXJuIHQuY29uc3RhbnRzLnN0cmluZyhlKX0pCityZXR1cm4gdGhpcy5jb25zdGFudHMu
YXJyYXkobil9LGUucHJvdG90eXBlLnN5bWJvbHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY29u
c3RhbnRzLmFycmF5KGUpfSxlLnByb3RvdHlwZS5vdGhlcj1mdW5jdGlvbihlKXtyZXR1cm4gdGhp
cy5jb25zdGFudHMub3RoZXIoZSl9LGUucHJvdG90eXBlLmFyZ3M9ZnVuY3Rpb24oZSl7cmV0dXJu
IHRoaXMuY29uc3RhbnRzLmV4cHJlc3Npb24odGhpcy5jb21waWxlKGUpKX0sZS5wcm90b3R5cGUu
YmxvY2s9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY29uc3RhbnRzLmJsb2NrKGUpfSwoMCx0LmNy
ZWF0ZUNsYXNzKShlLFt7a2V5OiJlbmQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb2dy
YW0ubmV4dH19LHtrZXk6InBvcyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvZ3JhbS5j
dXJyZW50fX0se2tleToibmV4dFBvcyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvZ3Jh
bS5uZXh0fX0se2tleToibGFiZWxzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLmV4cGVjdCko
dGhpcy5sYWJlbHNTdGFjay5jdXJyZW50LCJidWc6IG5vdCBpbiBhIGxhYmVsIHN0YWNrIil9fV0p
LGV9KCksa3Q9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihuLHIpe3ZhciBpPWFyZ3VtZW50cy5sZW5n
dGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpyLnByb2dyYW0sbz0oMCx0
LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMsbixyLGkpKQorcmV0
dXJuIG8uY29tcG9uZW50PW5ldyBJdChvKSxvfXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbi5w
cm90b3R5cGUuY29tcGlsZT1mdW5jdGlvbihlKXtyZXR1cm4gZyhlKT9lLmNvbXBpbGUodGhpcyk6
ZX0sbi5wcm90b3R5cGUuY29tcGlsZUV4cHJlc3Npb249ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5z
dGFuY2VvZiBpdD9lOlMoZSx0aGlzKX0sbi5wcm90b3R5cGUuYmluZFBvc2l0aW9uYWxBcmdzRm9y
TG9jYWxzPWZ1bmN0aW9uKGUpe3ZhciB0LG49T2JqZWN0LmtleXMoZSkscj1uZXcgQXJyYXkobi5s
ZW5ndGgpCitmb3IodD0wO3Q8bi5sZW5ndGg7dCsrKXJbdF09ZVtuW3RdXQordGhpcy5vcGNvZGUo
Nyx0aGlzLnN5bWJvbHMocikpfSxuLnByb3RvdHlwZS5wcmVsdWRlRm9yTGF5b3V0PWZ1bmN0aW9u
KGUpe3ZhciB0LG4scixpLG8scyxhPWUuc3ltYm9sVGFibGUuZ2V0U3ltYm9scygpCithLm5hbWVk
JiYodD1hLm5hbWVkLG49T2JqZWN0LmtleXModCkscj1uLm1hcChmdW5jdGlvbihlKXtyZXR1cm4g
dFtlXX0pLHRoaXMub3Bjb2RlKDgsdGhpcy5uYW1lcyhuKSx0aGlzLnN5bWJvbHMocikpKSx0aGlz
Lm9wY29kZSgxMSksYS55aWVsZHMmJihpPWEueWllbGRzLG89T2JqZWN0LmtleXMoaSkscz1vLm1h
cChmdW5jdGlvbihlKXtyZXR1cm4gaVtlXX0pLHRoaXMub3Bjb2RlKDksdGhpcy5uYW1lcyhvKSx0
aGlzLnN5bWJvbHMocykpKSxhLnBhcnRpYWxBcmdzJiZ0aGlzLm9wY29kZSgxMCxhLnBhcnRpYWxB
cmdzKX0sbi5wcm90b3R5cGUueWllbGQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj12b2lkIDAscj12b2lk
IDAsaT12b2lkIDAKK2lmKG49dGhpcy5zeW1ib2xUYWJsZS5nZXRTeW1ib2woInlpZWxkcyIsdCkp
aT1uZXcgQ3Qobix0KQorZWxzZXtpZighKHI9dGhpcy5zeW1ib2xUYWJsZS5nZXRQYXJ0aWFsQXJn
cygpKSl0aHJvdyBuZXcgRXJyb3IoIltCVUddICR7dG99IGlzIG5vdCBhIHZhbGlkIGJsb2NrIG5h
bWUuIikKK2k9bmV3IE90KHIsdCl9dGhpcy5vcGVuQmxvY2soZSxpKSx0aGlzLmNsb3NlQmxvY2so
KX0sbi5wcm90b3R5cGUubGFiZWxsZWQ9ZnVuY3Rpb24oZSx0KXtlJiZ0aGlzLnB1dEFyZ3MoZSks
dGhpcy5zdGFydExhYmVscygpLHRoaXMuZW50ZXIoIkJFR0lOIiwiRU5EIiksdGhpcy5sYWJlbCgi
QkVHSU4iKSx0KHRoaXMsIkJFR0lOIiwiRU5EIiksdGhpcy5sYWJlbCgiRU5EIiksdGhpcy5leGl0
KCksdGhpcy5zdG9wTGFiZWxzKCl9LG4ucHJvdG90eXBlLml0ZXI9ZnVuY3Rpb24oZSl7dGhpcy5z
dGFydExhYmVscygpLHRoaXMuZW50ZXJMaXN0KCJCRUdJTiIsIkVORCIpLHRoaXMubGFiZWwoIklU
RVIiKSx0aGlzLm5leHRJdGVyKCJCUkVBSyIpLHRoaXMuZW50ZXJXaXRoS2V5KCJCRUdJTiIsIkVO
RCIpLHRoaXMubGFiZWwoIkJFR0lOIiksZSh0aGlzLCJCRUdJTiIsIkVORCIpLHRoaXMubGFiZWwo
IkVORCIpLHRoaXMuZXhpdCgpLHRoaXMuanVtcCgiSVRFUiIpLHRoaXMubGFiZWwoIkJSRUFLIiks
dGhpcy5leGl0TGlzdCgpLHRoaXMuc3RvcExhYmVscygpfSxuLnByb3RvdHlwZS51bml0PWZ1bmN0
aW9uKGUpe3RoaXMuc3RhcnRMYWJlbHMoKSxlKHRoaXMpLHRoaXMuc3RvcExhYmVscygpfSxufShS
dCksTnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuZW52PWV9cmV0dXJuIGUucHJvdG90
eXBlLndyYXBMYXlvdXQ9ZnVuY3Rpb24oZSl7dGhpcy5pbm5lcj1uZXcgUHQodGhpcy5lbnYsZSl9
LGUucHJvdG90eXBlLmZyb21MYXlvdXQ9ZnVuY3Rpb24oZSl7dGhpcy5pbm5lcj1uZXcganQodGhp
cy5lbnYsZSl9LGUucHJvdG90eXBlLmNvbXBpbGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbm5l
ci5jb21waWxlKCl9LCgwLHQuY3JlYXRlQ2xhc3MpKGUsW3trZXk6InRhZyIsZ2V0OmZ1bmN0aW9u
KCl7cmV0dXJuIHRoaXMuaW5uZXIudGFnfX0se2tleToiYXR0cnMiLGdldDpmdW5jdGlvbigpe3Jl
dHVybiB0aGlzLmlubmVyLmF0dHJzfX1dKSxlfSgpLFB0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShl
LHQpe3RoaXMuZW52PWUsdGhpcy5sYXlvdXQ9dCx0aGlzLnRhZz1uZXcgRHQsdGhpcy5hdHRycz1u
ZXcgTHR9cmV0dXJuIGUucHJvdG90eXBlLmNvbXBpbGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVu
dix0PXRoaXMubGF5b3V0LG49dC5zeW1ib2xUYWJsZSxyPXYoZSx0LnN5bWJvbFRhYmxlKQorci5z
dGFydExhYmVscygpCit2YXIgaT10aGlzLnRhZy5nZXREeW5hbWljKCksbz12b2lkIDAKK3JldHVy
biBpPyhyLnB1dFZhbHVlKGkpLHIudGVzdCgic2ltcGxlIiksci5qdW1wVW5sZXNzKCJCT0RZIiks
ci5vcGVuRHluYW1pY1ByaW1pdGl2ZUVsZW1lbnQoKSxyLmRpZENyZWF0ZUVsZW1lbnQoKSx0aGlz
LmF0dHJzLmJ1ZmZlci5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiB4KGUscil9KSxyLmZsdXNo
RWxlbWVudCgpLHIubGFiZWwoIkJPRFkiKSk6KG89dGhpcy50YWcuZ2V0U3RhdGljKCkpJiYoci5v
cGVuUHJpbWl0aXZlRWxlbWVudChvKSxyLmRpZENyZWF0ZUVsZW1lbnQoKSx0aGlzLmF0dHJzLmJ1
ZmZlci5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiB4KGUscil9KSxyLmZsdXNoRWxlbWVudCgp
KSxyLnByZWx1ZGVGb3JMYXlvdXQodCksdC5zdGF0ZW1lbnRzLmZvckVhY2goZnVuY3Rpb24oZSl7
cmV0dXJuIHgoZSxyKX0pLGk/KHIucHV0VmFsdWUoaSksci50ZXN0KCJzaW1wbGUiKSxyLmp1bXBV
bmxlc3MoIkVORCIpLHIuY2xvc2VFbGVtZW50KCksci5sYWJlbCgiRU5EIikpOm8mJnIuY2xvc2VF
bGVtZW50KCksci5kaWRSZW5kZXJMYXlvdXQoKSxyLnN0b3BMYWJlbHMoKSxuZXcgVHQoci5zdGFy
dCxyLmVuZCxuLnNpemUpfSxlfSgpLGp0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMu
ZW52PWUsdGhpcy5sYXlvdXQ9dCx0aGlzLmF0dHJzPW5ldyBMdH1yZXR1cm4gZS5wcm90b3R5cGUu
Y29tcGlsZT1mdW5jdGlvbigpe3ZhciBlLHQsbj10aGlzLmVudixyPXRoaXMubGF5b3V0LGk9dihu
LHIuc3ltYm9sVGFibGUpCitpLnN0YXJ0TGFiZWxzKCksaS5wcmVsdWRlRm9yTGF5b3V0KHIpCit2
YXIgbz10aGlzLmF0dHJzLmJ1ZmZlcixzPSExCitmb3IoZT0wO2U8ci5zdGF0ZW1lbnRzLmxlbmd0
aDtlKyspdD1yLnN0YXRlbWVudHNbZV0sIXMmJnkodCk/KGkub3BlbkNvbXBvbmVudEVsZW1lbnQo
dFsxXSksaS5kaWRDcmVhdGVFbGVtZW50KCksaS5zaGFkb3dBdHRyaWJ1dGVzKCksby5mb3JFYWNo
KGZ1bmN0aW9uKGUpe3JldHVybiB4KGUsaSl9KSxzPSEwKTp4KHQsaSkKK3JldHVybiBpLmRpZFJl
bmRlckxheW91dCgpLGkuc3RvcExhYmVscygpLG5ldyBUdChpLnN0YXJ0LGkuZW5kLHIuc3ltYm9s
VGFibGUuc2l6ZSl9LCgwLHQuY3JlYXRlQ2xhc3MpKGUsW3trZXk6InRhZyIsZ2V0OmZ1bmN0aW9u
KCl7dGhyb3cgbmV3IEVycm9yKCJCVUc6IENhbm5vdCBjYWxsIGB0YWdgIG9uIGFuIFVud3JhcHBl
ZEJ1aWxkZXIiKX19XSksZX0oKSxEdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmlzRHlu
YW1pYz1udWxsLHRoaXMuaXNTdGF0aWM9bnVsbCx0aGlzLnN0YXRpY1RhZ05hbWU9bnVsbCx0aGlz
LmR5bmFtaWNUYWdOYW1lPW51bGx9cmV0dXJuIGUucHJvdG90eXBlLmdldER5bmFtaWM9ZnVuY3Rp
b24oKXtpZih0aGlzLmlzRHluYW1pYylyZXR1cm4gdGhpcy5keW5hbWljVGFnTmFtZX0sZS5wcm90
b3R5cGUuZ2V0U3RhdGljPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1N0YXRpYylyZXR1cm4gdGhpcy5z
dGF0aWNUYWdOYW1lfSxlLnByb3RvdHlwZS5zdGF0aWM9ZnVuY3Rpb24oZSl7dGhpcy5pc1N0YXRp
Yz0hMCx0aGlzLnN0YXRpY1RhZ05hbWU9ZX0sZS5wcm90b3R5cGUuZHluYW1pYz1mdW5jdGlvbihl
KXt0aGlzLmlzRHluYW1pYz0hMCx0aGlzLmR5bmFtaWNUYWdOYW1lPVtpLk9wcy5GdW5jdGlvbixl
XX0sZX0oKSxMdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmJ1ZmZlcj1bXX1yZXR1cm4g
ZS5wcm90b3R5cGUuc3RhdGljPWZ1bmN0aW9uKGUsdCl7dGhpcy5idWZmZXIucHVzaChbaS5PcHMu
U3RhdGljQXR0cixlLHQsbnVsbF0pfSxlLnByb3RvdHlwZS5keW5hbWljPWZ1bmN0aW9uKGUsdCl7
dGhpcy5idWZmZXIucHVzaChbaS5PcHMuRHluYW1pY0F0dHIsZSxbaS5PcHMuRnVuY3Rpb24sdF0s
bnVsbF0pfSxlfSgpLEl0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLmJ1aWxkZXI9ZSx0
aGlzLmVudj1lLmVudn1yZXR1cm4gZS5wcm90b3R5cGUuc3RhdGljPWZ1bmN0aW9uKGUsdCxuLHIp
e3RoaXMuYnVpbGRlci51bml0KGZ1bmN0aW9uKG4pe24ucHV0Q29tcG9uZW50RGVmaW5pdGlvbihl
KSxuLm9wZW5Db21wb25lbnQoTih0LG4pLHIpLG4uY2xvc2VDb21wb25lbnQoKX0pfSxlLnByb3Rv
dHlwZS5keW5hbWljPWZ1bmN0aW9uKGUsdCxuLHIsbyl7dGhpcy5idWlsZGVyLnVuaXQoZnVuY3Rp
b24ocil7ci5wdXRBcmdzKFIoZVswXSxlWzFdLHIpKSxyLnB1dFZhbHVlKFtpLk9wcy5GdW5jdGlv
bix0XSksci50ZXN0KCJzaW1wbGUiKSxyLmVudGVyKCJCRUdJTiIsIkVORCIpLHIubGFiZWwoIkJF
R0lOIiksci5qdW1wVW5sZXNzKCJFTkQiKSxyLnB1dER5bmFtaWNDb21wb25lbnREZWZpbml0aW9u
KCksci5vcGVuQ29tcG9uZW50KE4obixyKSxvKSxyLmNsb3NlQ29tcG9uZW50KCksci5sYWJlbCgi
RU5EIiksci5leGl0KCl9KX0sZX0oKSxNdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dmFyIHQ9
YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51
bGwsbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNb
Ml06bnVsbCxyPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3Vt
ZW50c1szXTpudWxsLGk9YXJndW1lbnRzLmxlbmd0aD40JiZ2b2lkIDAhPT1hcmd1bWVudHNbNF0/
YXJndW1lbnRzWzRdOjEKK3RoaXMubWV0YT1lLHRoaXMubmFtZWQ9dCx0aGlzLnlpZWxkcz1uLHRo
aXMucGFydGlhbEFyZ3M9cix0aGlzLnNpemU9aSx0aGlzLnByb2dyYW09dGhpc31yZXR1cm4gZS5w
cm90b3R5cGUuZ2V0TWV0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1ldGF9LGUucHJvdG90eXBl
LmdldFN5bWJvbHM9ZnVuY3Rpb24oKXtyZXR1cm57bmFtZWQ6dGhpcy5uYW1lZCx5aWVsZHM6dGhp
cy55aWVsZHMsbG9jYWxzOm51bGwscGFydGlhbEFyZ3M6dGhpcy5wYXJ0aWFsQXJnc319LGUucHJv
dG90eXBlLmdldFN5bWJvbD1mdW5jdGlvbihlLHQpe3JldHVybiJsb2NhbCI9PT1lP251bGw6dGhp
c1tlXSYmdGhpc1tlXVt0XX0sZS5wcm90b3R5cGUuZ2V0UGFydGlhbEFyZ3M9ZnVuY3Rpb24oKXty
ZXR1cm4gdGhpcy5wYXJ0aWFsQXJnc3x8MH0sZX0oKSxGdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUo
ZSx0LG4pe3RoaXMucGFyZW50PWUsdGhpcy5wcm9ncmFtPXQsdGhpcy5sb2NhbHM9bn1yZXR1cm4g
ZS5wcm90b3R5cGUuZ2V0TWV0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByb2dyYW0uZ2V0TWV0
YSgpfSxlLnByb3RvdHlwZS5nZXRTeW1ib2xzPWZ1bmN0aW9uKCl7cmV0dXJue25hbWVkOm51bGws
eWllbGRzOm51bGwsbG9jYWxzOnRoaXMubG9jYWxzLHBhcnRpYWxBcmdzOm51bGx9fSxlLnByb3Rv
dHlwZS5nZXRTeW1ib2w9ZnVuY3Rpb24oZSx0KXtyZXR1cm4ibG9jYWwiPT09ZT90aGlzLmdldExv
Y2FsKHQpOnRoaXMucHJvZ3JhbS5nZXRTeW1ib2woZSx0KX0sZS5wcm90b3R5cGUuZ2V0TG9jYWw9
ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5sb2NhbHMsbj10aGlzLnBhcmVudCxyPXQmJnRbZV0KK3Jl
dHVybiFyJiZuJiYocj1uLmdldFN5bWJvbCgibG9jYWwiLGUpKSxyfSxlLnByb3RvdHlwZS5nZXRQ
YXJ0aWFsQXJncz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByb2dyYW0uZ2V0UGFydGlhbEFyZ3Mo
KX0sZX0oKSx6dD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLm5hbWVzPSgwLG4uZGljdCko
KSx0aGlzLmZ1bmNzPVtdfXJldHVybiBlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSx0KXt0aGlz
LmZ1bmNzLnB1c2godCksdGhpcy5uYW1lc1tlXT10aGlzLmZ1bmNzLmxlbmd0aC0xfSxlLnByb3Rv
dHlwZS5zcGVjaWFsaXplPWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZVswXSxpPXRoaXMubmFtZXNbcl0K
K2lmKHZvaWQgMD09PWkpcmV0dXJuIGUKK3ZhciBvPXRoaXMuZnVuY3NbaV0KK3JldHVybigwLG4u
YXNzZXJ0KSghIW8sImV4cGVjdGVkIGEgc3BlY2lhbGl6YXRpb24gZm9yICIrZVswXSksbyhlLHQp
fSxlfSgpLFV0PW5ldyB6dCxCdD1pLkV4cHJlc3Npb25zLHF0PWkuT3BzCitVdC5hZGQocXQuQXBw
ZW5kLGZ1bmN0aW9uKGUpe3ZhciB0LG49ZVsxXQorcmV0dXJuIEFycmF5LmlzQXJyYXkobikmJkJ0
LmlzR2V0KG4pJiYodD1uWzFdLDEhPT10Lmxlbmd0aCk/W3F0LlVub3B0aW1pemVkQXBwZW5kLGVb
MV0sZVsyXV06W3F0Lk9wdGltaXplZEFwcGVuZCxlWzFdLGVbMl1dfSksVXQuYWRkKHF0LkR5bmFt
aWNBdHRyLGZ1bmN0aW9uKGUpe3JldHVybltxdC5BbnlEeW5hbWljQXR0cixlWzFdLGVbMl0sZVsz
XSwhMV19KSxVdC5hZGQocXQuVHJ1c3RpbmdBdHRyLGZ1bmN0aW9uKGUpe3JldHVybltxdC5BbnlE
eW5hbWljQXR0cixlWzFdLGVbMl0sZVszXSwhMF19KSxVdC5hZGQocXQuUGFydGlhbCxmdW5jdGlv
bihlKXt2YXIgdD1lWzFdCityZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/W3F0LlN0YXRpY1BhcnRp
YWwsdF06W3F0LkR5bmFtaWNQYXJ0aWFsLHRdfSkKK3ZhciBIdCxWdD1mdW5jdGlvbihlLHQpe3Ro
aXMuc3RhdGVtZW50cz1lLHRoaXMuc3ltYm9sVGFibGU9dH0sV3Q9ZnVuY3Rpb24oZSl7ZnVuY3Rp
b24gbigpe3JldHVybigwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmFwcGx5
KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxufShWdCksJHQ9ZnVu
Y3Rpb24oZSl7ZnVuY3Rpb24gbigpe3ZhciBuPSgwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVy
bikodGhpcyxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkKK3JldHVybiBuLmNvbXBpbGVkPW51bGws
bn1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLmNvbXBpbGU9ZnVuY3Rpb24o
ZSl7dmFyIHQsbixyLGksbyxzPXRoaXMuY29tcGlsZWQKK2lmKCFzKXtmb3IodD10aGlzLnN5bWJv
bFRhYmxlLG49dihlLHQpLHI9MDtyPHRoaXMuc3RhdGVtZW50cy5sZW5ndGg7cisrKWk9dGhpcy5z
dGF0ZW1lbnRzW3JdLG89VXQuc3BlY2lhbGl6ZShpLHQpLGRuLmNvbXBpbGUobyxuKQorcz10aGlz
LmNvbXBpbGVkPW5ldyBUdChuLnN0YXJ0LG4uZW5kLHRoaXMuc3ltYm9sVGFibGUuc2l6ZSl9cmV0
dXJuIHN9LG59KFZ0KSxHdD1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7dmFyIG49KDAsdC5wb3Nz
aWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKQorcmV0
dXJuIG4uY29tcGlsZWQ9bnVsbCxufXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbi5wcm90b3R5
cGUuc3BsYXQ9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGk9ZS5zeW1ib2xUYWJsZSxvPWkuZ2V0U3lt
Ym9scygpLmxvY2FscworZm9yKG8mJihlLnB1c2hDaGlsZFNjb3BlKCksZS5iaW5kUG9zaXRpb25h
bEFyZ3NGb3JMb2NhbHMobykpLHQ9MDt0PHRoaXMuc3RhdGVtZW50cy5sZW5ndGg7dCsrKW49dGhp
cy5zdGF0ZW1lbnRzW3RdLHI9VXQuc3BlY2lhbGl6ZShuLGkpLGRuLmNvbXBpbGUocixlKQorbyYm
ZS5wb3BTY29wZSgpfSxuLnByb3RvdHlwZS5jb21waWxlPWZ1bmN0aW9uKGUpe3ZhciB0LG4scj10
aGlzLmNvbXBpbGVkCityZXR1cm4gcnx8KHQ9dGhpcy5zeW1ib2xUYWJsZSxuPXYoZSx0KSx0aGlz
LnNwbGF0KG4pLHI9dGhpcy5jb21waWxlZD1uZXcgQXQobi5zdGFydCxuLmVuZCkpLHJ9LG59KFZ0
KSxLdD1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7dmFyIG49KDAsdC5wb3NzaWJsZUNvbnN0cnVj
dG9yUmV0dXJuKSh0aGlzLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKQorcmV0dXJuIG4uY29tcGls
ZWQ9bnVsbCxufXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbi5wcm90b3R5cGUuY29tcGlsZT1m
dW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLHM9dGhpcy5jb21waWxlZAoraWYoIXMpe2Zvcih0PXRo
aXMuc3ltYm9sVGFibGUsbj12KGUsdCkscj0wO3I8dGhpcy5zdGF0ZW1lbnRzLmxlbmd0aDtyKysp
aT10aGlzLnN0YXRlbWVudHNbcl0sbz1VdC5zcGVjaWFsaXplKGksdCksZG4uY29tcGlsZShvLG4p
CitzPXRoaXMuY29tcGlsZWQ9bmV3IFR0KG4uc3RhcnQsbi5lbmQsdC5zaXplKX1yZXR1cm4gc30s
bn0oVnQpLFF0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy5ibG9jaz1lLHRoaXMu
bWV0YT10LHRoaXMuZW52PW59cmV0dXJuIGUucHJvdG90eXBlLnNjYW5FbnRyeVBvaW50PWZ1bmN0
aW9uKCl7dmFyIGU9dGhpcy5ibG9jayx0PXRoaXMubWV0YSxuPWIodCkscj1DKGUsbix0aGlzLmVu
dikKK3JldHVybiBuZXcgJHQoci5zdGF0ZW1lbnRzLG4pfSxlLnByb3RvdHlwZS5zY2FuTGF5b3V0
PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5ibG9jayx0PXRoaXMubWV0YSxuPWUubmFtZWQscj1lLnlp
ZWxkcyxpPWUuaGFzUGFydGlhbHMsbz1fKHQsbixyLGkpLHM9QyhlLG8sdGhpcy5lbnYpCityZXR1
cm4gbmV3IFd0KHMuc3RhdGVtZW50cyxvKX0sZS5wcm90b3R5cGUuc2NhblBhcnRpYWw9ZnVuY3Rp
b24oZSl7dmFyIHQ9dGhpcy5ibG9jayxuPUModCxlLHRoaXMuZW52KQorcmV0dXJuIG5ldyBLdChu
LnN0YXRlbWVudHMsZSl9LGV9KCk7KGZ1bmN0aW9uKGUpe3ZhciB0PWkuT3BzCitlLmlzU2Nhbm5l
ZENvbXBvbmVudD0oMCxpLmlzKSh0LlNjYW5uZWRDb21wb25lbnQpLGUuaXNQcmltaXRpdmVFbGVt
ZW50PSgwLGkuaXMpKHQuT3BlblByaW1pdGl2ZUVsZW1lbnQpLGUuaXNPcHRpbWl6ZWRBcHBlbmQ9
KDAsaS5pcykodC5PcHRpbWl6ZWRBcHBlbmQpLGUuaXNVbm9wdGltaXplZEFwcGVuZD0oMCxpLmlz
KSh0LlVub3B0aW1pemVkQXBwZW5kKSxlLmlzQW55QXR0cj0oMCxpLmlzKSh0LkFueUR5bmFtaWNB
dHRyKSxlLmlzU3RhdGljUGFydGlhbD0oMCxpLmlzKSh0LlN0YXRpY1BhcnRpYWwpLGUuaXNEeW5h
bWljUGFydGlhbD0oMCxpLmlzKSh0LkR5bmFtaWNQYXJ0aWFsKSxlLmlzRnVuY3Rpb25FeHByZXNz
aW9uPSgwLGkuaXMpKHQuRnVuY3Rpb24pLGUuaXNOZXN0ZWRCbG9jaz0oMCxpLmlzKSh0Lk5lc3Rl
ZEJsb2NrKSxlLmlzU2Nhbm5lZEJsb2NrPSgwLGkuaXMpKHQuU2Nhbm5lZEJsb2NrKSxlLmlzRGVi
dWdnZXI9KDAsaS5pcykodC5EZWJ1Z2dlcik7KGZ1bmN0aW9uKGUpe2UuZGVmYXVsdEJsb2NrPWZ1
bmN0aW9uKGUpe3JldHVybiBlWzRdfSxlLmludmVyc2VCbG9jaz1mdW5jdGlvbihlKXtyZXR1cm4g
ZVs1XX0sZS5wYXJhbXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMl19LGUuaGFzaD1mdW5jdGlvbihl
KXtyZXR1cm4gZVszXX19KShlLk5lc3RlZEJsb2NrfHwoZS5OZXN0ZWRCbG9jaz17fSkpfSkoSHR8
fChlLkJhc2VsaW5lU3ludGF4PUh0PXt9KSkKK3ZhciBZdD1pLk9wcyxKdD1mdW5jdGlvbigpe2Z1
bmN0aW9uIGUoZSx0LG4pe3RoaXMuZW52PWUsdGhpcy50YWJsZT10LHRoaXMuc3RhdGVtZW50cz1u
fXJldHVybiBlLnByb3RvdHlwZS5zY2FuPWZ1bmN0aW9uKCl7dmFyIGU9W10KK3JldHVybiB0aGlz
LnNwZWNpYWxpemVTdGF0ZW1lbnRzKHRoaXMuc3RhdGVtZW50cyxlKSxuZXcgR3QoZSx0aGlzLnRh
YmxlKX0sZS5wcm90b3R5cGUuc3BlY2lhbGl6ZVN0YXRlbWVudHM9ZnVuY3Rpb24oZSx0KXt2YXIg
bixyCitmb3Iobj0wO248ZS5sZW5ndGg7bisrKXI9ZVtuXSx0aGlzLnNwZWNpYWxpemVTdGF0ZW1l
bnQocix0KX0sZS5wcm90b3R5cGUuc3BlY2lhbGl6ZVN0YXRlbWVudD1mdW5jdGlvbihlLHQpe2ku
U3RhdGVtZW50cy5pc0Jsb2NrKGUpP3QucHVzaCh0aGlzLnNwZWNpYWxpemVCbG9jayhlKSk6aS5T
dGF0ZW1lbnRzLmlzQ29tcG9uZW50KGUpP3QucHVzaC5hcHBseSh0LHRoaXMuc3BlY2lhbGl6ZUNv
bXBvbmVudChlKSk6dC5wdXNoKGUpfSxlLnByb3RvdHlwZS5zcGVjaWFsaXplQmxvY2s9ZnVuY3Rp
b24oZSl7dmFyIHQ9ZVsxXSxuPWVbMl0scj1lWzNdLGk9ZVs0XSxvPWVbNV0KK3JldHVybltZdC5T
Y2FubmVkQmxvY2ssdCxuLHIsdGhpcy5jaGlsZChpKSx0aGlzLmNoaWxkKG8pXX0sZS5wcm90b3R5
cGUuc3BlY2lhbGl6ZUNvbXBvbmVudD1mdW5jdGlvbih0KXt2YXIgbixyLGksbz10WzFdLHM9dFsy
XQorcmV0dXJuIHRoaXMuZW52Lmhhc0NvbXBvbmVudERlZmluaXRpb24obyx0aGlzLnRhYmxlKT8o
bj10aGlzLmNoaWxkKHMpLHI9bmV3IGUodGhpcy5lbnYsdGhpcy50YWJsZSxzLmF0dHJzKSxbW1l0
LlNjYW5uZWRDb21wb25lbnQsbyxyLHMuYXJncyxuXV0pOihpPVtdLGkucHVzaChbWXQuT3BlbkVs
ZW1lbnQsbyxbXV0pLHRoaXMuc3BlY2lhbGl6ZVN0YXRlbWVudHMocy5hdHRycyxpKSxpLnB1c2go
W1l0LkZsdXNoRWxlbWVudF0pLHRoaXMuc3BlY2lhbGl6ZVN0YXRlbWVudHMocy5zdGF0ZW1lbnRz
LGkpLGkucHVzaChbWXQuQ2xvc2VFbGVtZW50XSksaSl9LGUucHJvdG90eXBlLmNoaWxkPWZ1bmN0
aW9uKHQpe2lmKCF0KXJldHVybiBudWxsCit2YXIgbj13KHRoaXMudGFibGUsdC5sb2NhbHMpCity
ZXR1cm4gbmV3IGUodGhpcy5lbnYsbix0LnN0YXRlbWVudHMpfSxlfSgpLFh0PWZ1bmN0aW9uKGUp
e2Z1bmN0aW9uIG4obixyKXt2YXIgaT0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRo
aXMsZS5jYWxsKHRoaXMpKQorcmV0dXJuIGkuYmFzZT1uLGkucGF0aD1yLGkudHlwZT0ibG9va3Vw
IixpfXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbi5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1
cm4gMD09PXQubGVuZ3RoP2U6bmV3IHRoaXMoZSx0KX0sbi5wcm90b3R5cGUuZXZhbHVhdGU9ZnVu
Y3Rpb24oZSl7dmFyIHQ9dGhpcy5iYXNlLG49dGhpcy5wYXRoCityZXR1cm4oMCxyLnJlZmVyZW5j
ZUZyb21QYXJ0cykodC5ldmFsdWF0ZShlKSxuKX0sbi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9u
KCl7cmV0dXJuIHRoaXMuYmFzZS50b0pTT04oKSsiLiIrdGhpcy5wYXRoLmpvaW4oIi4iKX0sbn0o
aXQpLFp0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXtyZXR1cm4oMCx0LnBvc3NpYmxlQ29uc3Ry
dWN0b3JSZXR1cm4pKHRoaXMsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybigwLHQuaW5o
ZXJpdHMpKG4sZSksbi5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0
U2VsZigpfSxuLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4ic2VsZiJ9LG59KGl0
KSxlbj1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKG4scil7dmFyIGk9KDAsdC5wb3NzaWJsZUNvbnN0
cnVjdG9yUmV0dXJuKSh0aGlzLGUuY2FsbCh0aGlzKSkKK3JldHVybiBpLnN5bWJvbD1uLGkuZGVi
dWc9cixpfXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbi5wcm90b3R5cGUuZXZhbHVhdGU9ZnVu
Y3Rpb24oZSl7cmV0dXJuIGUucmVmZXJlbmNlRm9yU3ltYm9sKHRoaXMuc3ltYm9sKX0sbi5wcm90
b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIiQiK3RoaXMuc3ltYm9sKyIoIit0aGlzLmRl
YnVnKyIpIn0sbn0oaXQpLHRuPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4obixyKXt2YXIgaT0oMCx0
LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMpKQorcmV0dXJuIGku
c3ltYm9sPW4saS5uYW1lPXIsaX1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBl
LmV2YWx1YXRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuc3ltYm9sLG49dGhpcy5uYW1lCityZXR1
cm4gZS5zY29wZSgpLmdldFBhcnRpYWxBcmdzKHQpLm5hbWVkLmdldChuKX0sbi5wcm90b3R5cGUu
dG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIiQiK3RoaXMuc3ltYm9sKyIoJEFSR1MpLiIrdGhpcy5u
YW1lfSxufShpdCksbm49ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihuLHIsaSxvKXt2YXIgcz0oMCx0
LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMpKQorcmV0dXJuIHMu
bmFtZT1uLHMuaGVscGVyPXIscy5hcmdzPWkscy5zeW1ib2xUYWJsZT1vLHMudHlwZT0iaGVscGVy
IixzfXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbi5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rp
b24oZSl7cmV0dXJuKDAsdGhpcy5oZWxwZXIpKGUsdGhpcy5hcmdzLmV2YWx1YXRlKGUpLHRoaXMu
c3ltYm9sVGFibGUpfSxuLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4iYCIrdGhp
cy5uYW1lKyIoJEFSR1MpYCJ9LG59KGl0KSxybj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhp
cy5wYXJ0cz1lLHRoaXMudHlwZT0iY29uY2F0In1yZXR1cm4gZS5wcm90b3R5cGUuZXZhbHVhdGU9
ZnVuY3Rpb24oZSl7dmFyIHQsbj1uZXcgQXJyYXkodGhpcy5wYXJ0cy5sZW5ndGgpCitmb3IodD0w
O3Q8dGhpcy5wYXJ0cy5sZW5ndGg7dCsrKW5bdF09dGhpcy5wYXJ0c1t0XS5ldmFsdWF0ZShlKQor
cmV0dXJuIG5ldyBvbihuKX0sZS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuImNv
bmNhdCgiK3RoaXMucGFydHMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRvSlNPTigpfSkuam9p
bigiLCAiKSsiKSJ9LGV9KCksb249ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihuKXt2YXIgaT0oMCx0
LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMpKQorcmV0dXJuIGku
cGFydHM9bixpLnRhZz0oMCxyLmNvbWJpbmVUYWdnZWQpKG4pLGl9cmV0dXJuKDAsdC5pbmhlcml0
cykobixlKSxuLnByb3RvdHlwZS5jb21wdXRlPWZ1bmN0aW9uKCl7dmFyIGUsdCxuPW5ldyBBcnJh
eQorZm9yKGU9MDtlPHRoaXMucGFydHMubGVuZ3RoO2UrKyludWxsIT09KHQ9dGhpcy5wYXJ0c1tl
XS52YWx1ZSgpKSYmdm9pZCAwIT09dCYmKG5bZV09Tyh0KSkKK3JldHVybiBuLmxlbmd0aD4wP24u
am9pbigiIik6bnVsbH0sbn0oci5DYWNoZWRSZWZlcmVuY2UpLHNuPWZ1bmN0aW9uKGUpe2Z1bmN0
aW9uIG4obixyKXt2YXIgaT0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5j
YWxsKHRoaXMpKQorcmV0dXJuIGkuZnVuYz1uLGkuc3ltYm9sVGFibGU9cixpLnR5cGU9ImZ1bmN0
aW9uIixpLmZ1bmM9bixpfXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbi5wcm90b3R5cGUuZXZh
bHVhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsdGhpcy5mdW5jKShlLHRoaXMuc3ltYm9sVGFibGUp
fSxuLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmZ1bmMKK3JldHVybiBl
Lm5hbWU/ImAiK2UubmFtZSsiKC4uLilgIjoiYGZ1bmMoLi4uKWAifSxufShpdCksYW49SHQuTmVz
dGVkQmxvY2ssdW49YW4uZGVmYXVsdEJsb2NrLGxuPWFuLnBhcmFtcyxjbj1hbi5oYXNoLHBuPUEs
Zm49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5uYW1lcz0oMCxuLmRpY3QpKCksdGhpcy5m
dW5jcz1bXX1yZXR1cm4gZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUsdCl7dGhpcy5mdW5jcy5w
dXNoKHQpLHRoaXMubmFtZXNbZV09dGhpcy5mdW5jcy5sZW5ndGgtMX0sZS5wcm90b3R5cGUuY29t
cGlsZT1mdW5jdGlvbihlLHQpe3ZhciByPWVbMF0saT10aGlzLm5hbWVzW3JdLG89dGhpcy5mdW5j
c1tpXQorcmV0dXJuKDAsbi5hc3NlcnQpKCEhbywiZXhwZWN0ZWQgYW4gaW1wbGVtZW50YXRpb24g
Zm9yICIrZVswXSksbyhlLHQpfSxlfSgpLGhuPWkuT3BzLGRuPW5ldyBmbgorZG4uYWRkKGhuLlRl
eHQsZnVuY3Rpb24oZSx0KXt0LnRleHQoZVsxXSl9KSxkbi5hZGQoaG4uQ29tbWVudCxmdW5jdGlv
bihlLHQpe3QuY29tbWVudChlWzFdKX0pLGRuLmFkZChobi5DbG9zZUVsZW1lbnQsZnVuY3Rpb24o
ZSx0KXtuLkxPR0dFUi50cmFjZSgiY2xvc2UtZWxlbWVudCBzdGF0ZW1lbnQiKSx0LmNsb3NlRWxl
bWVudCgpfSksZG4uYWRkKGhuLkZsdXNoRWxlbWVudCxmdW5jdGlvbihlLHQpe3QuZmx1c2hFbGVt
ZW50KCl9KSxkbi5hZGQoaG4uTW9kaWZpZXIsZnVuY3Rpb24oZSx0KXt2YXIgbj1lWzFdLHI9ZVsy
XSxpPWVbM10sbz1SKHIsaSx0KQoraWYoIXQuZW52Lmhhc01vZGlmaWVyKG5bMF0sdC5zeW1ib2xU
YWJsZSkpdGhyb3cgbmV3IEVycm9yKCJDb21waWxlIEVycm9yICIrbi5qb2luKCIuIikrIiBpcyBu
b3QgYSBtb2RpZmllcjogSGVscGVycyBtYXkgbm90IGJlIHVzZWQgaW4gdGhlIGVsZW1lbnQgZm9y
bS4iKQordC5tb2RpZmllcihuWzBdLG8pfSksZG4uYWRkKGhuLlN0YXRpY0F0dHIsZnVuY3Rpb24o
ZSx0KXt2YXIgbj1lWzFdLHI9ZVsyXSxpPWVbM10KK3Quc3RhdGljQXR0cihuLGkscil9KSxkbi5h
ZGQoaG4uQW55RHluYW1pY0F0dHIsZnVuY3Rpb24oZSx0KXt2YXIgbj1lWzFdLHI9ZVsyXSxpPWVb
M10sbz1lWzRdCit0LnB1dFZhbHVlKHIpLGk/dC5keW5hbWljQXR0ck5TKG4saSxvKTp0LmR5bmFt
aWNBdHRyKG4sbyl9KSxkbi5hZGQoaG4uT3BlbkVsZW1lbnQsZnVuY3Rpb24oZSx0KXtuLkxPR0dF
Ui50cmFjZSgib3Blbi1lbGVtZW50IHN0YXRlbWVudCIpLHQub3BlblByaW1pdGl2ZUVsZW1lbnQo
ZVsxXSl9KSxkbi5hZGQoaG4uT3B0aW1pemVkQXBwZW5kLGZ1bmN0aW9uKGUsdCl7dmFyIG49ZVsx
XSxyPWVbMl0saT10LmVudi5tYWNyb3MoKSxvPWkuaW5saW5lcyxzPW8uY29tcGlsZShlLHQpfHxu
CishMCE9PXMmJih0LnB1dFZhbHVlKHNbMV0pLHI/dC50cnVzdGluZ0FwcGVuZCgpOnQuY2F1dGlv
dXNBcHBlbmQoKSl9KSxkbi5hZGQoaG4uVW5vcHRpbWl6ZWRBcHBlbmQsZnVuY3Rpb24oZSx0KXt2
YXIgbj1lWzFdLHI9ZVsyXSxpPXQuZW52Lm1hY3JvcygpLG89aS5pbmxpbmVzLHM9by5jb21waWxl
KGUsdCl8fG4KKyEwIT09cyYmKHI/dC5ndWFyZGVkVHJ1c3RpbmdBcHBlbmQoc1sxXSk6dC5ndWFy
ZGVkQ2F1dGlvdXNBcHBlbmQoc1sxXSkpfSksZG4uYWRkKGhuLk5lc3RlZEJsb2NrLGZ1bmN0aW9u
KGUsdCl7dC5lbnYubWFjcm9zKCkuYmxvY2tzLmNvbXBpbGUoZSx0KX0pLGRuLmFkZChobi5TY2Fu
bmVkQmxvY2ssZnVuY3Rpb24oZSx0KXt2YXIgbj1lWzFdLHI9ZVsyXSxpPWVbM10sbz1lWzRdLHM9
ZVs1XSxhPW8mJm8uc2NhbigpLHU9cyYmcy5zY2FuKCkKK3QuZW52Lm1hY3JvcygpLmJsb2Nrcy5j
b21waWxlKFtobi5OZXN0ZWRCbG9jayxuLHIsaSxhLHVdLHQpfSksZG4uYWRkKGhuLlNjYW5uZWRD
b21wb25lbnQsZnVuY3Rpb24oZSx0KXt2YXIgbj1lWzFdLHI9ZVsyXSxpPWVbM10sbz1lWzRdLHM9
byYmby5zY2FuKCksYT1rKG51bGwsaSx7ZGVmYXVsdDpzLGludmVyc2U6bnVsbH0sdCksdT10LmVu
di5nZXRDb21wb25lbnREZWZpbml0aW9uKG4sdC5zeW1ib2xUYWJsZSkKK3QucHV0Q29tcG9uZW50
RGVmaW5pdGlvbih1KSx0Lm9wZW5Db21wb25lbnQoYSxyLnNjYW4oKSksdC5jbG9zZUNvbXBvbmVu
dCgpfSksZG4uYWRkKGhuLlN0YXRpY1BhcnRpYWwsZnVuY3Rpb24oZSx0KXt2YXIgbj1lWzFdCitp
ZighdC5lbnYuaGFzUGFydGlhbChuLHQuc3ltYm9sVGFibGUpKXRocm93IG5ldyBFcnJvcignQ29t
cGlsZSBFcnJvcjogQ291bGQgbm90IGZpbmQgYSBwYXJ0aWFsIG5hbWVkICInK24rJyInKQordmFy
IHI9dC5lbnYubG9va3VwUGFydGlhbChuLHQuc3ltYm9sVGFibGUpCit0LnB1dFBhcnRpYWxEZWZp
bml0aW9uKHIpLHQuZXZhbHVhdGVQYXJ0aWFsKCl9KSxkbi5hZGQoaG4uRHluYW1pY1BhcnRpYWws
ZnVuY3Rpb24oZSx0KXt2YXIgbj1lWzFdCit0LnN0YXJ0TGFiZWxzKCksdC5wdXRWYWx1ZShuKSx0
LnRlc3QoInNpbXBsZSIpLHQuZW50ZXIoIkJFR0lOIiwiRU5EIiksdC5sYWJlbCgiQkVHSU4iKSx0
Lmp1bXBVbmxlc3MoIkVORCIpLHQucHV0RHluYW1pY1BhcnRpYWxEZWZpbml0aW9uKCksdC5ldmFs
dWF0ZVBhcnRpYWwoKSx0LmxhYmVsKCJFTkQiKSx0LmV4aXQoKSx0LnN0b3BMYWJlbHMoKX0pLGRu
LmFkZChobi5ZaWVsZCxmdW5jdGlvbihlLHQpe3ZhciBuPWVbMV0scj1lWzJdLGk9UihyLG51bGws
dCkKK3QueWllbGQoaSxuKX0pLGRuLmFkZChobi5EZWJ1Z2dlcixmdW5jdGlvbihlLHQpe3JldHVy
biB0LnB1dFZhbHVlKFtobi5GdW5jdGlvbixmdW5jdGlvbihlKXt2YXIgbj1lLmdldFNlbGYoKS52
YWx1ZSgpCitwbihuLGZ1bmN0aW9uKG4pe3JldHVybiBUKGUsdCkobikudmFsdWUoKX0pfV0pLGV9
KQordmFyIG1uPW5ldyBmbgorbW4uYWRkKGhuLlVua25vd24sZnVuY3Rpb24oZSx0KXt2YXIgbj1l
WzFdLHI9blswXQorcmV0dXJuIHQuZW52Lmhhc0hlbHBlcihyLHQuc3ltYm9sVGFibGUpP25ldyBu
bihyLHQuZW52Lmxvb2t1cEhlbHBlcihyLHQuc3ltYm9sVGFibGUpLEhlLmVtcHR5KCksdC5zeW1i
b2xUYWJsZSk6RChuLHQpfSksbW4uYWRkKGhuLkNvbmNhdCxmdW5jdGlvbihlLHQpe3ZhciBuPWVb
MV0ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBTKGUsdCl9KQorcmV0dXJuIG5ldyBybihuKX0pLG1u
LmFkZChobi5GdW5jdGlvbixmdW5jdGlvbihlLHQpe3JldHVybiBuZXcgc24oZVsxXSx0LnN5bWJv
bFRhYmxlKX0pLG1uLmFkZChobi5IZWxwZXIsZnVuY3Rpb24oZSx0KXt2YXIgbixyPXQuZW52LGk9
dC5zeW1ib2xUYWJsZSxvPWVbMV0scz1vWzBdLGE9ZVsyXSx1PWVbM10KK2lmKHIuaGFzSGVscGVy
KHMsaSkpcmV0dXJuIG49UihhLHUsdCksbmV3IG5uKHMsci5sb29rdXBIZWxwZXIocyxpKSxuLGkp
Cit0aHJvdyBuZXcgRXJyb3IoIkNvbXBpbGUgRXJyb3I6ICIrcysiIGlzIG5vdCBhIGhlbHBlciIp
fSksbW4uYWRkKGhuLkdldCxmdW5jdGlvbihlLHQpe3JldHVybiBEKGVbMV0sdCl9KSxtbi5hZGQo
aG4uVW5kZWZpbmVkLGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB3dCh2b2lkIDApfSksbW4uYWRkKGhu
LkFyZyxmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvLHM9ZVsxXSxhPXNbMF0sdT12b2lkIDAsbD12
b2lkIDAKK2lmKHU9dC5zeW1ib2xUYWJsZS5nZXRTeW1ib2woIm5hbWVkIixhKSlyZXR1cm4gbj1z
LnNsaWNlKDEpLHI9bmV3IGVuKHUsYSksWHQuY3JlYXRlKHIsbikKK2lmKGw9dC5zeW1ib2xUYWJs
ZS5nZXRQYXJ0aWFsQXJncygpKXJldHVybiBpPXMuc2xpY2UoMSksbz1uZXcgdG4obCxhKSxYdC5j
cmVhdGUobyxpKQordGhyb3cgbmV3IEVycm9yKCJbQlVHXSBAIitzLmpvaW4oIi4iKSsiIGlzIG5v
dCBhIHZhbGlkIGxvb2t1cCBwYXRoLiIpfSksbW4uYWRkKGhuLkhhc0Jsb2NrLGZ1bmN0aW9uKGUs
dCl7dmFyIG4scixpPWVbMV0sbz12b2lkIDAscz12b2lkIDAKK2lmKG89dC5zeW1ib2xUYWJsZS5n
ZXRTeW1ib2woInlpZWxkcyIsaSkpcmV0dXJuIG49bmV3IEN0KG8saSksbmV3IEV0KG4pCitpZihz
PXQuc3ltYm9sVGFibGUuZ2V0UGFydGlhbEFyZ3MoKSlyZXR1cm4gcj1uZXcgT3QocyxpKSxuZXcg
RXQocikKK3Rocm93IG5ldyBFcnJvcigiW0JVR10gJHtibG9ja05hbWV9IGlzIG5vdCBhIHZhbGlk
IGJsb2NrIG5hbWUuIil9KSxtbi5hZGQoaG4uSGFzQmxvY2tQYXJhbXMsZnVuY3Rpb24oZSx0KXt2
YXIgbixyLGk9ZVsxXSxvPXZvaWQgMCxzPXZvaWQgMAoraWYobz10LnN5bWJvbFRhYmxlLmdldFN5
bWJvbCgieWllbGRzIixpKSlyZXR1cm4gbj1uZXcgQ3QobyxpKSxuZXcgeHQobikKK2lmKHM9dC5z
eW1ib2xUYWJsZS5nZXRQYXJ0aWFsQXJncygpKXJldHVybiByPW5ldyBPdChzLGkpLG5ldyB4dChy
KQordGhyb3cgbmV3IEVycm9yKCJbQlVHXSAke2Jsb2NrTmFtZX0gaXMgbm90IGEgdmFsaWQgYmxv
Y2sgbmFtZS4iKX0pCit2YXIgZ249ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5uYW1lcz0o
MCxuLmRpY3QpKCksdGhpcy5mdW5jcz1bXX1yZXR1cm4gZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9u
KGUsdCl7dGhpcy5mdW5jcy5wdXNoKHQpLHRoaXMubmFtZXNbZV09dGhpcy5mdW5jcy5sZW5ndGgt
MX0sZS5wcm90b3R5cGUuYWRkTWlzc2luZz1mdW5jdGlvbihlKXt0aGlzLm1pc3Npbmc9ZX0sZS5w
cm90b3R5cGUuY29tcGlsZT1mdW5jdGlvbihlLHQpe3ZhciByLGksbz1lWzFdWzBdLHM9dGhpcy5u
YW1lc1tvXQordm9pZCAwPT09cz8oKDAsbi5hc3NlcnQpKCEhdGhpcy5taXNzaW5nLG8rIiBub3Qg
Zm91bmQsIGFuZCBubyBjYXRjaC1hbGwgYmxvY2sgaGFuZGxlciB3YXMgcmVnaXN0ZXJlZCIpLHI9
dGhpcy5taXNzaW5nLGk9cihlLHQpLCgwLG4uYXNzZXJ0KSghIWksbysiIG5vdCBmb3VuZCwgYW5k
IHRoZSBjYXRjaC1hbGwgYmxvY2sgaGFuZGxlciBkaWRuJ3QgaGFuZGxlIGl0IikpOigwLHRoaXMu
ZnVuY3Nbc10pKGUsdCl9LGV9KCkseW49bmV3IGduLHZuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgp
e3RoaXMubmFtZXM9KDAsbi5kaWN0KSgpLHRoaXMuZnVuY3M9W119cmV0dXJuIGUucHJvdG90eXBl
LmFkZD1mdW5jdGlvbihlLHQpe3RoaXMuZnVuY3MucHVzaCh0KSx0aGlzLm5hbWVzW2VdPXRoaXMu
ZnVuY3MubGVuZ3RoLTF9LGUucHJvdG90eXBlLmFkZE1pc3Npbmc9ZnVuY3Rpb24oZSl7dGhpcy5t
aXNzaW5nPWV9LGUucHJvdG90eXBlLmNvbXBpbGU9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbyxz
PWVbMV0KK2lmKCFBcnJheS5pc0FycmF5KHMpKXJldHVyblsiZXhwciIsc10KK3ZhciBhPXZvaWQg
MCx1PXZvaWQgMCxsPXZvaWQgMAoraWYoc1swXT09PWhuLkhlbHBlcilhPXNbMV0sdT1zWzJdLGw9
c1szXQorZWxzZXtpZihzWzBdIT09aG4uVW5rbm93bilyZXR1cm5bImV4cHIiLHNdCithPXNbMV0s
dT1sPW51bGx9aWYoYS5sZW5ndGg+MSYmIXUmJiFsKXJldHVyblsiZXhwciIsc10KK3ZhciBjPWFb
MF0scD10aGlzLm5hbWVzW2NdCityZXR1cm4gdm9pZCAwPT09cCYmdGhpcy5taXNzaW5nPyhuPXRo
aXMubWlzc2luZyxyPW4oYSx1LGwsdCksITE9PT1yP1siZXhwciIsc106cik6dm9pZCAwIT09cD8o
aT10aGlzLmZ1bmNzW3BdLG89aShhLHUsbCx0KSwhMT09PW8/WyJleHByIixzXTpvKTpbImV4cHIi
LHNdfSxlfSgpCitMKHluLG5ldyB2bikKK3ZhciBibj1bImphdmFzY3JpcHQ6IiwidmJzY3JpcHQ6
Il0sX249WyJBIiwiQk9EWSIsIkxJTksiLCJJTUciLCJJRlJBTUUiLCJCQVNFIiwiRk9STSJdLHdu
PVsiRU1CRUQiXSxFbj1bImhyZWYiLCJzcmMiLCJiYWNrZ3JvdW5kIiwiYWN0aW9uIl0seG49WyJz
cmMiXSxDbj17QlVUVE9OOnt0eXBlOiEwLGZvcm06ITB9LElOUFVUOnt0eXBlOiEwLGZvcm06ITAs
YXV0b2NvcnJlY3Q6ITAsbGlzdDohMH0sU0VMRUNUOntmb3JtOiEwfSxPUFRJT046e2Zvcm06ITB9
LFRFWFRBUkVBOntmb3JtOiEwfSxMQUJFTDp7Zm9ybTohMH0sRklFTERTRVQ6e2Zvcm06ITB9LExF
R0VORDp7Zm9ybTohMH0sT0JKRUNUOntmb3JtOiEwfX0sT249e2NvbGdyb3VwOntkZXB0aDoyLGJl
Zm9yZToiPHRhYmxlPjxjb2xncm91cD4iLGFmdGVyOiI8L2NvbGdyb3VwPjwvdGFibGU+In0sdGFi
bGU6e2RlcHRoOjEsYmVmb3JlOiI8dGFibGU+IixhZnRlcjoiPC90YWJsZT4ifSx0Ym9keTp7ZGVw
dGg6MixiZWZvcmU6Ijx0YWJsZT48dGJvZHk+IixhZnRlcjoiPC90Ym9keT48L3RhYmxlPiJ9LHRm
b290OntkZXB0aDoyLGJlZm9yZToiPHRhYmxlPjx0Zm9vdD4iLGFmdGVyOiI8L3Rmb290PjwvdGFi
bGU+In0sdGhlYWQ6e2RlcHRoOjIsYmVmb3JlOiI8dGFibGU+PHRoZWFkPiIsYWZ0ZXI6IjwvdGhl
YWQ+PC90YWJsZT4ifSx0cjp7ZGVwdGg6MyxiZWZvcmU6Ijx0YWJsZT48dGJvZHk+PHRyPiIsYWZ0
ZXI6IjwvdHI+PC90Ym9keT48L3RhYmxlPiJ9fSxBbj0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9z
dmciLFRuPXtmb3JlaWduT2JqZWN0OjEsZGVzYzoxLHRpdGxlOjF9LFNuPU9iamVjdC5jcmVhdGUo
bnVsbCk7WyJiIiwiYmlnIiwiYmxvY2txdW90ZSIsImJvZHkiLCJiciIsImNlbnRlciIsImNvZGUi
LCJkZCIsImRpdiIsImRsIiwiZHQiLCJlbSIsImVtYmVkIiwiaDEiLCJoMiIsImgzIiwiaDQiLCJo
NSIsImg2IiwiaGVhZCIsImhyIiwiaSIsImltZyIsImxpIiwibGlzdGluZyIsIm1haW4iLCJtZXRh
Iiwibm9iciIsIm9sIiwicCIsInByZSIsInJ1YnkiLCJzIiwic21hbGwiLCJzcGFuIiwic3Ryb25n
Iiwic3RyaWtlIiwic3ViIiwic3VwIiwidGFibGUiLCJ0dCIsInUiLCJ1bCIsInZhciJdLmZvckVh
Y2goZnVuY3Rpb24oZSl7cmV0dXJuIFNuW2VdPTF9KQordmFyIFJuLGtuPS9bXHQtXHIgXHhBMFx1
MTY4MFx1MTgwRVx1MjAwMC1cdTIwMEFcdTIwMjhcdTIwMjlcdTIwMkZcdTIwNUZcdTMwMDBcdUZF
RkZdLyxObj0idW5kZWZpbmVkIj09dHlwZW9mIGRvY3VtZW50P251bGw6ZG9jdW1lbnQ7KGZ1bmN0
aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLmRvY3VtZW50PWUsdGhp
cy5zZXR1cFVzZWxlc3NFbGVtZW50KCl9cmV0dXJuIGUucHJvdG90eXBlLnNldHVwVXNlbGVzc0Vs
ZW1lbnQ9ZnVuY3Rpb24oKXt0aGlzLnVzZWxlc3NFbGVtZW50PXRoaXMuZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiZGl2Iil9LGUucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24oZSx0KXt2
YXIgbj12b2lkIDAscj12b2lkIDAKK2lmKHQ/KG49dC5uYW1lc3BhY2VVUkk9PT1Bbnx8InN2ZyI9
PT1lLHI9VG5bdC50YWdOYW1lXSk6KG49InN2ZyI9PT1lLHI9ITEpLG4mJiFyKXtpZihTbltlXSl0
aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjcmVhdGUgYSAiK2UrIiBpbnNpZGUgYW4gU1ZHIGNvbnRl
eHQiKQorcmV0dXJuIHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKEFuLGUpfXJldHVybiB0
aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZSl9LGUucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnRO
Uz1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLHQp
fSxlLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24oZSx0LG4scil7cj9lLnNldEF0dHJp
YnV0ZU5TKHIsdCxuKTplLnNldEF0dHJpYnV0ZSh0LG4pfSxlLnByb3RvdHlwZS5jcmVhdGVUZXh0
Tm9kZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKX0s
ZS5wcm90b3R5cGUuY3JlYXRlQ29tbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5kb2N1bWVu
dC5jcmVhdGVDb21tZW50KGUpfSxlLnByb3RvdHlwZS5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24oZSx0
LG4pe2UuaW5zZXJ0QmVmb3JlKHQsbil9LGUucHJvdG90eXBlLmluc2VydEhUTUxCZWZvcmU9ZnVu
Y3Rpb24oZSx0LG4pe3JldHVybiBYKHRoaXMudXNlbGVzc0VsZW1lbnQsZSxuLHQpfSxlfSgpCitl
LlRyZWVDb25zdHJ1Y3Rpb249dAordmFyIG49dAorbj1RKE5uLG4pLG49SChObixuKSxuPSQoTm4s
bixBbiksZS5ET01UcmVlQ29uc3RydWN0aW9uPW59KShSbnx8KFJuPXt9KSkKK3ZhciBQbj1mdW5j
dGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5kb2N1bWVudD1lLHRoaXMubmFtZXNwYWNlPW51bGws
dGhpcy51c2VsZXNzRWxlbWVudD10aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpfXJl
dHVybiBlLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24oZSx0LG4pe2Uuc2V0QXR0cmli
dXRlKHQsbil9LGUucHJvdG90eXBlLnNldEF0dHJpYnV0ZU5TPWZ1bmN0aW9uKGUsdCxuLHIpe2Uu
c2V0QXR0cmlidXRlTlModCxuLHIpfSxlLnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGU9ZnVuY3Rp
b24oZSx0KXtlLnJlbW92ZUF0dHJpYnV0ZSh0KX0sZS5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRl
TlM9ZnVuY3Rpb24oZSx0LG4pe2UucmVtb3ZlQXR0cmlidXRlTlModCxuKX0sZS5wcm90b3R5cGUu
Y3JlYXRlVGV4dE5vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZG9jdW1lbnQuY3JlYXRlVGV4
dE5vZGUoZSl9LGUucHJvdG90eXBlLmNyZWF0ZUNvbW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRo
aXMuZG9jdW1lbnQuY3JlYXRlQ29tbWVudChlKX0sZS5wcm90b3R5cGUuY3JlYXRlRWxlbWVudD1m
dW5jdGlvbihlLHQpe3ZhciBuPXZvaWQgMCxyPXZvaWQgMAoraWYodD8obj10Lm5hbWVzcGFjZVVS
ST09PUFufHwic3ZnIj09PWUscj1Ublt0LnRhZ05hbWVdKToobj0ic3ZnIj09PWUscj0hMSksbiYm
IXIpe2lmKFNuW2VdKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNyZWF0ZSBhICIrZSsiIGluc2lk
ZSBhbiBTVkcgY29udGV4dCIpCityZXR1cm4gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMo
QW4sZSl9cmV0dXJuIHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlKX0sZS5wcm90b3R5cGUu
aW5zZXJ0SFRNTEJlZm9yZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIFgodGhpcy51c2VsZXNzRWxl
bWVudCxlLHQsbil9LGUucHJvdG90eXBlLmluc2VydE5vZGVCZWZvcmU9ZnVuY3Rpb24oZSx0LG4p
e3ZhciByLGkKK3JldHVybiBaKHQpPyhyPXQuZmlyc3RDaGlsZCxpPXQubGFzdENoaWxkLHRoaXMu
aW5zZXJ0QmVmb3JlKGUsdCxuKSxuZXcgWWUoZSxyLGkpKToodGhpcy5pbnNlcnRCZWZvcmUoZSx0
LG4pLG5ldyBKZShlLHQpKX0sZS5wcm90b3R5cGUuaW5zZXJ0VGV4dEJlZm9yZT1mdW5jdGlvbihl
LHQsbil7dmFyIHI9dGhpcy5jcmVhdGVUZXh0Tm9kZShuKQorcmV0dXJuIHRoaXMuaW5zZXJ0QmVm
b3JlKGUscix0KSxyfSxlLnByb3RvdHlwZS5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24oZSx0LG4pe2Uu
aW5zZXJ0QmVmb3JlKHQsbil9LGUucHJvdG90eXBlLmluc2VydEFmdGVyPWZ1bmN0aW9uKGUsdCxu
KXt0aGlzLmluc2VydEJlZm9yZShlLHQsbi5uZXh0U2libGluZyl9LGV9KCksam49UG4KK2puPWZ1
bmN0aW9uKGUsbil7cmV0dXJuIGUmJlkoZSk/ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihuKXt2YXIg
cj0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMsbikpCity
ZXR1cm4gci51c2VsZXNzQ29tbWVudD1uLmNyZWF0ZUNvbW1lbnQoIiIpLHJ9cmV0dXJuKDAsdC5p
bmhlcml0cykobixlKSxuLnByb3RvdHlwZS5pbnNlcnRIVE1MQmVmb3JlPWZ1bmN0aW9uKHQsbixy
KXtpZihudWxsPT09cilyZXR1cm4gZS5wcm90b3R5cGUuaW5zZXJ0SFRNTEJlZm9yZS5jYWxsKHRo
aXMsdCxuLHIpCit2YXIgaT0hMSxvPW4/bi5wcmV2aW91c1NpYmxpbmc6dC5sYXN0Q2hpbGQKK28m
Jm8gaW5zdGFuY2VvZiBUZXh0JiYoaT0hMCx0Lmluc2VydEJlZm9yZSh0aGlzLnVzZWxlc3NDb21t
ZW50LG4pKQordmFyIHM9ZS5wcm90b3R5cGUuaW5zZXJ0SFRNTEJlZm9yZS5jYWxsKHRoaXMsdCxu
LHIpCityZXR1cm4gaSYmdC5yZW1vdmVDaGlsZCh0aGlzLnVzZWxlc3NDb21tZW50KSxzfSxufShu
KTpufShObixqbiksam49ZnVuY3Rpb24oZSxuKXtpZighZSlyZXR1cm4gbgoraWYoIVcoZSkpcmV0
dXJuIG4KK3ZhciByPWUuY3JlYXRlRWxlbWVudCgiZGl2IikKK3JldHVybiBmdW5jdGlvbihlKXtm
dW5jdGlvbiBuKCl7cmV0dXJuKDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUu
YXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90
eXBlLmluc2VydEhUTUxCZWZvcmU9ZnVuY3Rpb24odCxuLGkpe2lmKG51bGw9PT1pfHwiIj09PWkp
cmV0dXJuIGUucHJvdG90eXBlLmluc2VydEhUTUxCZWZvcmUuY2FsbCh0aGlzLHQsbixpKQordmFy
IG89dC50YWdOYW1lLnRvTG93ZXJDYXNlKCkscz1PbltvXQorcmV0dXJuIHZvaWQgMD09PXM/ZS5w
cm90b3R5cGUuaW5zZXJ0SFRNTEJlZm9yZS5jYWxsKHRoaXMsdCxuLGkpOlYodCxzLHIsaSxuKX0s
bn0obil9KE5uLGpuKSxqbj1mdW5jdGlvbihlLG4scil7aWYoIWUpcmV0dXJuIG4KK2lmKCFLKGUs
cikpcmV0dXJuIG4KK3ZhciBpPWUuY3JlYXRlRWxlbWVudCgiZGl2IikKK3JldHVybiBmdW5jdGlv
bihlKXtmdW5jdGlvbiBuKCl7cmV0dXJuKDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0
aGlzLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4u
cHJvdG90eXBlLmluc2VydEhUTUxCZWZvcmU9ZnVuY3Rpb24odCxuLG8pe3JldHVybiBudWxsPT09
b3x8IiI9PT1vP2UucHJvdG90eXBlLmluc2VydEhUTUxCZWZvcmUuY2FsbCh0aGlzLHQsbixvKTp0
Lm5hbWVzcGFjZVVSSSE9PXI/ZS5wcm90b3R5cGUuaW5zZXJ0SFRNTEJlZm9yZS5jYWxsKHRoaXMs
dCxuLG8pOkcodCxpLG8sbil9LG59KG4pfShObixqbixBbikKK3ZhciBEbj1qbixMbj1Sbi5ET01U
cmVlQ29uc3RydWN0aW9uLEluPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLmF0dHI9ZX1y
ZXR1cm4gZS5wcm90b3R5cGUuc2V0QXR0cmlidXRlPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPWUu
Z2V0QXBwZW5kT3BlcmF0aW9ucygpLG89cmUobikKK2llKG8pfHxpLnNldEF0dHJpYnV0ZSh0LHRo
aXMuYXR0cixvLHIpfSxlLnByb3RvdHlwZS51cGRhdGVBdHRyaWJ1dGU9ZnVuY3Rpb24oZSx0LG4s
cil7bnVsbD09PW58fHZvaWQgMD09PW58fCExPT09bj9yP2UuZ2V0RE9NKCkucmVtb3ZlQXR0cmli
dXRlTlModCxyLHRoaXMuYXR0cik6ZS5nZXRET00oKS5yZW1vdmVBdHRyaWJ1dGUodCx0aGlzLmF0
dHIpOnRoaXMuc2V0QXR0cmlidXRlKGUsdCxuKX0sZX0oKSxNbj1mdW5jdGlvbihlKXtmdW5jdGlv
biBuKCl7cmV0dXJuKDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuYXBwbHko
dGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLnNl
dEF0dHJpYnV0ZT1mdW5jdGlvbihlLHQsbil7aWUobil8fCh0W3RoaXMuYXR0cl09bil9LG4ucHJv
dG90eXBlLnJlbW92ZUF0dHJpYnV0ZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5hdHRyCitu
P2UuZ2V0RE9NKCkucmVtb3ZlQXR0cmlidXRlTlModCxuLHIpOmUuZ2V0RE9NKCkucmVtb3ZlQXR0
cmlidXRlKHQscil9LG4ucHJvdG90eXBlLnVwZGF0ZUF0dHJpYnV0ZT1mdW5jdGlvbihlLHQsbixy
KXt0W3RoaXMuYXR0cl09bixpZShuKSYmdGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSx0LHIpfSxufShJ
biksRm49ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3JldHVybigwLHQucG9zc2libGVDb25zdHJ1
Y3RvclJldHVybikodGhpcyxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsdC5pbmhl
cml0cykobixlKSxuLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24odCxuLHIpe2UucHJv
dG90eXBlLnNldEF0dHJpYnV0ZS5jYWxsKHRoaXMsdCxuLFUodCxuLHRoaXMuYXR0cixyKSl9LG4u
cHJvdG90eXBlLnVwZGF0ZUF0dHJpYnV0ZT1mdW5jdGlvbih0LG4scil7ZS5wcm90b3R5cGUudXBk
YXRlQXR0cmlidXRlLmNhbGwodGhpcyx0LG4sVSh0LG4sdGhpcy5hdHRyLHIpKX0sbn0oTW4pLHpu
PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXtyZXR1cm4oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JS
ZXR1cm4pKHRoaXMsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybigwLHQuaW5oZXJpdHMp
KG4sZSksbi5wcm90b3R5cGUuc2V0QXR0cmlidXRlPWZ1bmN0aW9uKGUsdCxuKXt0LnZhbHVlPXVl
KG4pfSxuLnByb3RvdHlwZS51cGRhdGVBdHRyaWJ1dGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQs
aT1yLnZhbHVlLG89dWUobikKK2khPT1vJiYoci52YWx1ZT1vKX0sbn0oSW4pLFVuPW5ldyB6bigi
dmFsdWUiKSxCbj1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7cmV0dXJuKDAsdC5wb3NzaWJsZUNv
bnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCx0
LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLnNldEF0dHJpYnV0ZT1mdW5jdGlvbihlLHQsbil7
bnVsbCE9PW4mJnZvaWQgMCE9PW4mJiExIT09biYmKHQuc2VsZWN0ZWQ9ITApfSxuLnByb3RvdHlw
ZS51cGRhdGVBdHRyaWJ1dGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQKK3Iuc2VsZWN0ZWQ9ISFu
fSxufShNbikscW49bmV3IEJuKCJzZWxlY3RlZCIpLEhuPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4o
KXtyZXR1cm4oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5hcHBseSh0aGlz
LGFyZ3VtZW50cykpfXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbi5wcm90b3R5cGUuc2V0QXR0
cmlidXRlPWZ1bmN0aW9uKHQsbixyKXtlLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGUuY2FsbCh0aGlz
LHQsbixVKHQsbix0aGlzLmF0dHIscikpfSxuLnByb3RvdHlwZS51cGRhdGVBdHRyaWJ1dGU9ZnVu
Y3Rpb24odCxuLHIpe2UucHJvdG90eXBlLnVwZGF0ZUF0dHJpYnV0ZS5jYWxsKHRoaXMsdCxuLFUo
dCxuLHRoaXMuYXR0cixyKSl9LG59KEluKSxWbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dmFy
IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFd
Om51bGwKK3RoaXMuY2FsbGVyU2NvcGU9bnVsbCx0aGlzLnNsb3RzPWUsdGhpcy5jYWxsZXJTY29w
ZT10fXJldHVybiBlLnJvb3Q9ZnVuY3Rpb24odCl7dmFyIG4scj1hcmd1bWVudHMubGVuZ3RoPjEm
JnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxpPW5ldyBBcnJheShyKzEpCitm
b3Iobj0wO248PXI7bisrKWlbbl09bWUKK3JldHVybiBuZXcgZShpKS5pbml0KHtzZWxmOnR9KX0s
ZS5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbihlKXt2YXIgdD1lLnNlbGYKK3JldHVybiB0aGlzLnNs
b3RzWzBdPXQsdGhpc30sZS5wcm90b3R5cGUuZ2V0U2VsZj1mdW5jdGlvbigpe3JldHVybiB0aGlz
LnNsb3RzWzBdfSxlLnByb3RvdHlwZS5nZXRTeW1ib2w9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMu
c2xvdHNbZV19LGUucHJvdG90eXBlLmdldEJsb2NrPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnNs
b3RzW2VdfSxlLnByb3RvdHlwZS5nZXRQYXJ0aWFsQXJncz1mdW5jdGlvbihlKXtyZXR1cm4gdGhp
cy5zbG90c1tlXX0sZS5wcm90b3R5cGUuYmluZFN5bWJvbD1mdW5jdGlvbihlLHQpe3RoaXMuc2xv
dHNbZV09dH0sZS5wcm90b3R5cGUuYmluZEJsb2NrPWZ1bmN0aW9uKGUsdCl7dGhpcy5zbG90c1tl
XT10fSxlLnByb3RvdHlwZS5iaW5kUGFydGlhbEFyZ3M9ZnVuY3Rpb24oZSx0KXt0aGlzLnNsb3Rz
W2VdPXR9LGUucHJvdG90eXBlLmJpbmRDYWxsZXJTY29wZT1mdW5jdGlvbihlKXt0aGlzLmNhbGxl
clNjb3BlPWV9LGUucHJvdG90eXBlLmdldENhbGxlclNjb3BlPWZ1bmN0aW9uKCl7cmV0dXJuIHRo
aXMuY2FsbGVyU2NvcGV9LGUucHJvdG90eXBlLmNoaWxkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBl
KHRoaXMuc2xvdHMuc2xpY2UoKSx0aGlzLmNhbGxlclNjb3BlKX0sZX0oKSxXbj1mdW5jdGlvbigp
e2Z1bmN0aW9uIGUoKXt0aGlzLnNjaGVkdWxlZEluc3RhbGxNYW5hZ2Vycz1bXSx0aGlzLnNjaGVk
dWxlZEluc3RhbGxNb2RpZmllcnM9W10sdGhpcy5zY2hlZHVsZWRVcGRhdGVNb2RpZmllck1hbmFn
ZXJzPVtdLHRoaXMuc2NoZWR1bGVkVXBkYXRlTW9kaWZpZXJzPVtdLHRoaXMuY3JlYXRlZENvbXBv
bmVudHM9W10sdGhpcy5jcmVhdGVkTWFuYWdlcnM9W10sdGhpcy51cGRhdGVkQ29tcG9uZW50cz1b
XSx0aGlzLnVwZGF0ZWRNYW5hZ2Vycz1bXSx0aGlzLmRlc3RydWN0b3JzPVtdfXJldHVybiBlLnBy
b3RvdHlwZS5kaWRDcmVhdGU9ZnVuY3Rpb24oZSx0KXt0aGlzLmNyZWF0ZWRDb21wb25lbnRzLnB1
c2goZSksdGhpcy5jcmVhdGVkTWFuYWdlcnMucHVzaCh0KX0sZS5wcm90b3R5cGUuZGlkVXBkYXRl
PWZ1bmN0aW9uKGUsdCl7dGhpcy51cGRhdGVkQ29tcG9uZW50cy5wdXNoKGUpLHRoaXMudXBkYXRl
ZE1hbmFnZXJzLnB1c2godCl9LGUucHJvdG90eXBlLnNjaGVkdWxlSW5zdGFsbE1vZGlmaWVyPWZ1
bmN0aW9uKGUsdCl7dGhpcy5zY2hlZHVsZWRJbnN0YWxsTWFuYWdlcnMucHVzaCh0KSx0aGlzLnNj
aGVkdWxlZEluc3RhbGxNb2RpZmllcnMucHVzaChlKX0sZS5wcm90b3R5cGUuc2NoZWR1bGVVcGRh
dGVNb2RpZmllcj1mdW5jdGlvbihlLHQpe3RoaXMuc2NoZWR1bGVkVXBkYXRlTW9kaWZpZXJNYW5h
Z2Vycy5wdXNoKHQpLHRoaXMuc2NoZWR1bGVkVXBkYXRlTW9kaWZpZXJzLnB1c2goZSl9LGUucHJv
dG90eXBlLmRpZERlc3Ryb3k9ZnVuY3Rpb24oZSl7dGhpcy5kZXN0cnVjdG9ycy5wdXNoKGUpfSxl
LnByb3RvdHlwZS5jb21taXQ9ZnVuY3Rpb24oKXt2YXIgZSx0LG4scixpLG8scyxhLHUsbCxjLHAs
ZixoPXRoaXMuY3JlYXRlZENvbXBvbmVudHMsZD10aGlzLmNyZWF0ZWRNYW5hZ2VycworZm9yKGU9
MDtlPGgubGVuZ3RoO2UrKyl0PWhbZV0sbj1kW2VdLG4uZGlkQ3JlYXRlKHQpCit2YXIgbT10aGlz
LnVwZGF0ZWRDb21wb25lbnRzLGc9dGhpcy51cGRhdGVkTWFuYWdlcnMKK2ZvcihyPTA7cjxtLmxl
bmd0aDtyKyspaT1tW3JdLG89Z1tyXSxvLmRpZFVwZGF0ZShpKQordmFyIHk9dGhpcy5kZXN0cnVj
dG9ycworZm9yKHM9MDtzPHkubGVuZ3RoO3MrKyl5W3NdLmRlc3Ryb3koKQordmFyIHY9dGhpcy5z
Y2hlZHVsZWRJbnN0YWxsTWFuYWdlcnMsYj10aGlzLnNjaGVkdWxlZEluc3RhbGxNb2RpZmllcnMK
K2ZvcihhPTA7YTx2Lmxlbmd0aDthKyspdT12W2FdLGw9YlthXSx1Lmluc3RhbGwobCkKK3ZhciBf
PXRoaXMuc2NoZWR1bGVkVXBkYXRlTW9kaWZpZXJNYW5hZ2Vycyx3PXRoaXMuc2NoZWR1bGVkVXBk
YXRlTW9kaWZpZXJzCitmb3IoYz0wO2M8Xy5sZW5ndGg7YysrKXA9X1tjXSxmPXdbY10scC51cGRh
dGUoZil9LGV9KCksJG49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuYXJyYXk9ZSx0aGlz
Lm9mZnNldD0wfXJldHVybigwLHQuY3JlYXRlQ2xhc3MpKGUsW3trZXk6InR5cGUiLGdldDpmdW5j
dGlvbigpe3JldHVybiB0aGlzLmFycmF5W3RoaXMub2Zmc2V0XX19LHtrZXk6Im9wMSIsZ2V0OmZ1
bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXJyYXlbdGhpcy5vZmZzZXQrMV19fSx7a2V5OiJvcDIiLGdl
dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFycmF5W3RoaXMub2Zmc2V0KzJdfX0se2tleToib3Az
IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcnJheVt0aGlzLm9mZnNldCszXX19XSksZX0o
KSxHbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLm9wY29kZXM9W10sdGhpcy5fb2Zmc2V0
PTAsdGhpcy5fb3Bjb2RlPW5ldyAkbih0aGlzLm9wY29kZXMpfXJldHVybiBlLnByb3RvdHlwZS5v
cGNvZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX29wY29kZS5vZmZzZXQ9ZSx0aGlzLl9vcGNv
ZGV9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+
MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTowLHI9YXJndW1lbnRzLmxlbmd0
aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOjAsaT1hcmd1bWVudHMubGVu
Z3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XT9hcmd1bWVudHNbNF06MAordGhpcy5vcGNvZGVz
W2VdPXQsdGhpcy5vcGNvZGVzW2UrMV09bix0aGlzLm9wY29kZXNbZSsyXT1yLHRoaXMub3Bjb2Rl
c1tlKzNdPWl9LGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxl
bmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjAsbj1hcmd1bWVudHMu
bGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MCxyPWFyZ3VtZW50
cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTowLGk9dGhpcy5f
b2Zmc2V0CityZXR1cm4gdGhpcy5vcGNvZGVzW3RoaXMuX29mZnNldCsrXT1lLHRoaXMub3Bjb2Rl
c1t0aGlzLl9vZmZzZXQrK109dCx0aGlzLm9wY29kZXNbdGhpcy5fb2Zmc2V0KytdPW4sdGhpcy5v
cGNvZGVzW3RoaXMuX29mZnNldCsrXT1yLGl9LCgwLHQuY3JlYXRlQ2xhc3MpKGUsW3trZXk6Im5l
eHQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vZmZzZXR9fSx7a2V5OiJjdXJyZW50Iixn
ZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb2Zmc2V0LTR9fV0pLGV9KCksS249ZnVuY3Rpb24o
KXtmdW5jdGlvbiBlKGUpe3ZhciB0PWUuYXBwZW5kT3BlcmF0aW9ucyxuPWUudXBkYXRlT3BlcmF0
aW9ucwordGhpcy5fbWFjcm9zPW51bGwsdGhpcy5fdHJhbnNhY3Rpb249bnVsbCx0aGlzLmNvbnN0
YW50cz1uZXcgX2UsdGhpcy5wcm9ncmFtPW5ldyBHbix0aGlzLmFwcGVuZE9wZXJhdGlvbnM9dCx0
aGlzLnVwZGF0ZU9wZXJhdGlvbnM9bn1yZXR1cm4gZS5wcm90b3R5cGUudG9Db25kaXRpb25hbFJl
ZmVyZW5jZT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGJlKGUpfSxlLnByb3RvdHlwZS5nZXRBcHBl
bmRPcGVyYXRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kT3BlcmF0aW9uc30sZS5w
cm90b3R5cGUuZ2V0RE9NPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudXBkYXRlT3BlcmF0aW9uc30s
ZS5wcm90b3R5cGUuZ2V0SWRlbnRpdHk9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsbi5lbnN1cmVHdWlk
KShlKSsiIn0sZS5wcm90b3R5cGUuYmVnaW49ZnVuY3Rpb24oKXt0aGlzLl90cmFuc2FjdGlvbj1u
ZXcgV259LGUucHJvdG90eXBlLmRpZENyZWF0ZT1mdW5jdGlvbihlLHQpe3RoaXMudHJhbnNhY3Rp
b24uZGlkQ3JlYXRlKGUsdCl9LGUucHJvdG90eXBlLmRpZFVwZGF0ZT1mdW5jdGlvbihlLHQpe3Ro
aXMudHJhbnNhY3Rpb24uZGlkVXBkYXRlKGUsdCl9LGUucHJvdG90eXBlLnNjaGVkdWxlSW5zdGFs
bE1vZGlmaWVyPWZ1bmN0aW9uKGUsdCl7dGhpcy50cmFuc2FjdGlvbi5zY2hlZHVsZUluc3RhbGxN
b2RpZmllcihlLHQpfSxlLnByb3RvdHlwZS5zY2hlZHVsZVVwZGF0ZU1vZGlmaWVyPWZ1bmN0aW9u
KGUsdCl7dGhpcy50cmFuc2FjdGlvbi5zY2hlZHVsZVVwZGF0ZU1vZGlmaWVyKGUsdCl9LGUucHJv
dG90eXBlLmRpZERlc3Ryb3k9ZnVuY3Rpb24oZSl7dGhpcy50cmFuc2FjdGlvbi5kaWREZXN0cm95
KGUpfSxlLnByb3RvdHlwZS5jb21taXQ9ZnVuY3Rpb24oKXt0aGlzLnRyYW5zYWN0aW9uLmNvbW1p
dCgpLHRoaXMuX3RyYW5zYWN0aW9uPW51bGx9LGUucHJvdG90eXBlLmF0dHJpYnV0ZUZvcj1mdW5j
dGlvbihlLHQsbixyKXtyZXR1cm4gZWUoZSx0KX0sZS5wcm90b3R5cGUubWFjcm9zPWZ1bmN0aW9u
KCl7dmFyIGU9dGhpcy5fbWFjcm9zCityZXR1cm4gZXx8KHRoaXMuX21hY3Jvcz1lPUwoKSksZX0s
KDAsdC5jcmVhdGVDbGFzcykoZSxbe2tleToidHJhbnNhY3Rpb24iLGdldDpmdW5jdGlvbigpe3Jl
dHVybigwLG4uZXhwZWN0KSh0aGlzLl90cmFuc2FjdGlvbiwibXVzdCBiZSBpbiBhIHRyYW5zYWN0
aW9uIil9fV0pLGV9KCksUW49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt0aGlzLmVudj1l
LHRoaXMudXBkYXRpbmc9dCx0aGlzLmJvdW5kcz1ufXJldHVybiBlLnByb3RvdHlwZS5yZXJlbmRl
cj1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRz
WzBdP2FyZ3VtZW50c1swXTp7YWx3YXlzUmV2YWxpZGF0ZTohMX0sdD1lLmFsd2F5c1JldmFsaWRh
dGUsbj12b2lkIDAhPT10JiZ0LHI9dGhpcy5lbnYsaT10aGlzLnVwZGF0aW5nCituZXcgZXIocix7
YWx3YXlzUmV2YWxpZGF0ZTpufSkuZXhlY3V0ZShpLHRoaXMpfSxlLnByb3RvdHlwZS5wYXJlbnRF
bGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYm91bmRzLnBhcmVudEVsZW1lbnQoKX0sZS5w
cm90b3R5cGUuZmlyc3ROb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYm91bmRzLmZpcnN0Tm9k
ZSgpfSxlLnByb3RvdHlwZS5sYXN0Tm9kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJvdW5kcy5s
YXN0Tm9kZSgpfSxlLnByb3RvdHlwZS5vcGNvZGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudXBk
YXRpbmd9LGUucHJvdG90eXBlLmhhbmRsZUV4Y2VwdGlvbj1mdW5jdGlvbigpe3Rocm93InRoaXMg
c2hvdWxkIG5ldmVyIGhhcHBlbiJ9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlz
LmJvdW5kcy5kZXN0cm95KCksYSh0aGlzLmJvdW5kcyl9LGV9KCksWW49ZnVuY3Rpb24oZSx0LG4p
e3RoaXMub3BlcmFuZD1lLHRoaXMuYXJncz10LHRoaXMuY29uZGl0aW9uPW59LEpuPWZ1bmN0aW9u
KCl7ZnVuY3Rpb24gZShlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJn
dW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsLHI9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAh
PT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOm51bGwsaT1hcmd1bWVudHMubGVuZ3RoPjQmJnZv
aWQgMCE9PWFyZ3VtZW50c1s0XT9hcmd1bWVudHNbNF06bnVsbAordGhpcy5zdGFydD1lLHRoaXMu
ZW5kPXQsdGhpcy5jb21wb25lbnQ9bix0aGlzLm1hbmFnZXI9cix0aGlzLnNoYWRvdz1pLHRoaXMu
b3BlcmFuZD1udWxsLHRoaXMuaW1tZWRpYXRlPW51bGwsdGhpcy5hcmdzPW51bGwsdGhpcy5jYWxs
ZXJTY29wZT1udWxsLHRoaXMuYmxvY2tzPW51bGwsdGhpcy5jb25kaXRpb249bnVsbCx0aGlzLml0
ZXJhdG9yPW51bGwsdGhpcy5rZXk9bnVsbCx0aGlzLmlwPWV9cmV0dXJuIGUucHJvdG90eXBlLmNh
cHR1cmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFluKHRoaXMub3BlcmFuZCx0aGlzLmFyZ3MsdGhp
cy5jb25kaXRpb24pfSxlLnByb3RvdHlwZS5yZXN0b3JlPWZ1bmN0aW9uKGUpe3RoaXMub3BlcmFu
ZD1lLm9wZXJhbmQsdGhpcy5hcmdzPWUuYXJncyx0aGlzLmNvbmRpdGlvbj1lLmNvbmRpdGlvbn0s
ZX0oKSxYbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmZyYW1lcz1bXSx0aGlzLmZyYW1l
PS0xfXJldHVybiBlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1hcmd1bWVu
dHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbCxpPWFy
Z3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTpudWxs
LG89YXJndW1lbnRzLmxlbmd0aD40JiZ2b2lkIDAhPT1hcmd1bWVudHNbNF0/YXJndW1lbnRzWzRd
Om51bGwscz0rK3RoaXMuZnJhbWUKK3M8dGhpcy5mcmFtZXMubGVuZ3RoPyhuPXRoaXMuZnJhbWVz
W3NdLG4uc3RhcnQ9bi5pcD1lLG4uZW5kPXQsbi5jb21wb25lbnQ9cixuLm1hbmFnZXI9aSxuLnNo
YWRvdz1vLG4ub3BlcmFuZD1udWxsLG4uaW1tZWRpYXRlPW51bGwsbi5hcmdzPW51bGwsbi5jYWxs
ZXJTY29wZT1udWxsLG4uYmxvY2tzPW51bGwsbi5jb25kaXRpb249bnVsbCxuLml0ZXJhdG9yPW51
bGwsbi5rZXk9bnVsbCk6dGhpcy5mcmFtZXNbc109bmV3IEpuKGUsdCxyLGksbyl9LGUucHJvdG90
eXBlLnBvcD1mdW5jdGlvbigpe3RoaXMuZnJhbWUtLX0sZS5wcm90b3R5cGUuY2FwdHVyZT1mdW5j
dGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRGcmFtZS5jYXB0dXJlKCl9LGUucHJvdG90eXBlLnJl
c3RvcmU9ZnVuY3Rpb24oZSl7dGhpcy5jdXJyZW50RnJhbWUucmVzdG9yZShlKX0sZS5wcm90b3R5
cGUuZ2V0U3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50RnJhbWUuc3RhcnR9LGUu
cHJvdG90eXBlLmdldEVuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRGcmFtZS5lbmR9
LGUucHJvdG90eXBlLmdldEN1cnJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50RnJh
bWUuaXB9LGUucHJvdG90eXBlLnNldEN1cnJlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY3Vy
cmVudEZyYW1lLmlwPWV9LGUucHJvdG90eXBlLmdldE9wZXJhbmQ9ZnVuY3Rpb24oKXtyZXR1cm4o
MCxuLnVud3JhcCkodGhpcy5jdXJyZW50RnJhbWUub3BlcmFuZCl9LGUucHJvdG90eXBlLnNldE9w
ZXJhbmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY3VycmVudEZyYW1lLm9wZXJhbmQ9ZX0sZS5w
cm90b3R5cGUuZ2V0SW1tZWRpYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudEZyYW1l
LmltbWVkaWF0ZX0sZS5wcm90b3R5cGUuc2V0SW1tZWRpYXRlPWZ1bmN0aW9uKGUpe3JldHVybiB0
aGlzLmN1cnJlbnRGcmFtZS5pbW1lZGlhdGU9ZX0sZS5wcm90b3R5cGUuZ2V0QXJncz1mdW5jdGlv
bigpe3JldHVybiB0aGlzLmN1cnJlbnRGcmFtZS5hcmdzfSxlLnByb3RvdHlwZS5zZXRBcmdzPWZ1
bmN0aW9uKGUpe3JldHVybiB0aGlzLmN1cnJlbnRGcmFtZS5hcmdzPWV9LGUucHJvdG90eXBlLmdl
dENvbmRpdGlvbj1mdW5jdGlvbigpe3JldHVybigwLG4udW53cmFwKSh0aGlzLmN1cnJlbnRGcmFt
ZS5jb25kaXRpb24pfSxlLnByb3RvdHlwZS5zZXRDb25kaXRpb249ZnVuY3Rpb24oZSl7cmV0dXJu
IHRoaXMuY3VycmVudEZyYW1lLmNvbmRpdGlvbj1lfSxlLnByb3RvdHlwZS5nZXRJdGVyYXRvcj1m
dW5jdGlvbigpe3JldHVybigwLG4udW53cmFwKSh0aGlzLmN1cnJlbnRGcmFtZS5pdGVyYXRvcil9
LGUucHJvdG90eXBlLnNldEl0ZXJhdG9yPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmN1cnJlbnRG
cmFtZS5pdGVyYXRvcj1lfSxlLnByb3RvdHlwZS5nZXRLZXk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhp
cy5jdXJyZW50RnJhbWUua2V5fSxlLnByb3RvdHlwZS5zZXRLZXk9ZnVuY3Rpb24oZSl7cmV0dXJu
IHRoaXMuY3VycmVudEZyYW1lLmtleT1lfSxlLnByb3RvdHlwZS5nZXRCbG9ja3M9ZnVuY3Rpb24o
KXtyZXR1cm4oMCxuLnVud3JhcCkodGhpcy5jdXJyZW50RnJhbWUuYmxvY2tzKX0sZS5wcm90b3R5
cGUuc2V0QmxvY2tzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmN1cnJlbnRGcmFtZS5ibG9ja3M9
ZX0sZS5wcm90b3R5cGUuZ2V0Q2FsbGVyU2NvcGU9ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnVud3Jh
cCkodGhpcy5jdXJyZW50RnJhbWUuY2FsbGVyU2NvcGUpfSxlLnByb3RvdHlwZS5zZXRDYWxsZXJT
Y29wZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jdXJyZW50RnJhbWUuY2FsbGVyU2NvcGU9ZX0s
ZS5wcm90b3R5cGUuZ2V0Q29tcG9uZW50PWZ1bmN0aW9uKCl7cmV0dXJuKDAsbi51bndyYXApKHRo
aXMuY3VycmVudEZyYW1lLmNvbXBvbmVudCl9LGUucHJvdG90eXBlLmdldE1hbmFnZXI9ZnVuY3Rp
b24oKXtyZXR1cm4oMCxuLnVud3JhcCkodGhpcy5jdXJyZW50RnJhbWUubWFuYWdlcil9LGUucHJv
dG90eXBlLmdldFNoYWRvdz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRGcmFtZS5zaGFk
b3d9LGUucHJvdG90eXBlLmdvdG89ZnVuY3Rpb24oZSl7dGhpcy5zZXRDdXJyZW50KGUpfSxlLnBy
b3RvdHlwZS5uZXh0U3RhdGVtZW50PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLHIsaTstMSE9PXRo
aXMuZnJhbWU7KXtpZih0PXRoaXMuZnJhbWVzW3RoaXMuZnJhbWVdLG49dC5pcCxyPXQuZW5kLG48
cilyZXR1cm4gaT1lLnByb2dyYW0sdC5pcCs9NCxpLm9wY29kZShuKQordGhpcy5wb3AoKX1yZXR1
cm4gbnVsbH0sKDAsdC5jcmVhdGVDbGFzcykoZSxbe2tleToiY3VycmVudEZyYW1lIixnZXQ6ZnVu
Y3Rpb24oKXtyZXR1cm4gdGhpcy5mcmFtZXNbdGhpcy5mcmFtZV19fV0pLGV9KCksWm49ZnVuY3Rp
b24oKXtmdW5jdGlvbiBlKGUsdCxyLGkpe3RoaXMuZW52PWUsdGhpcy5lbGVtZW50U3RhY2s9aSx0
aGlzLmR5bmFtaWNTY29wZVN0YWNrPW5ldyBuLlN0YWNrLHRoaXMuc2NvcGVTdGFjaz1uZXcgbi5T
dGFjayx0aGlzLnVwZGF0aW5nT3Bjb2RlU3RhY2s9bmV3IG4uU3RhY2ssdGhpcy5jYWNoZUdyb3Vw
cz1uZXcgbi5TdGFjayx0aGlzLmxpc3RCbG9ja1N0YWNrPW5ldyBuLlN0YWNrLHRoaXMuZnJhbWU9
bmV3IFhuLHRoaXMuZW52PWUsdGhpcy5jb25zdGFudHM9ZS5jb25zdGFudHMsdGhpcy5lbGVtZW50
U3RhY2s9aSx0aGlzLnNjb3BlU3RhY2sucHVzaCh0KSx0aGlzLmR5bmFtaWNTY29wZVN0YWNrLnB1
c2gocil9cmV0dXJuIGUuaW5pdGlhbD1mdW5jdGlvbih0LG4scixpLG8pe3ZhciBzPW8uc3ltYm9s
cyxhPW8uc3RhcnQsdT1vLmVuZCxsPVZuLnJvb3QobixzKSxjPW5ldyBlKHQsbCxyLGkpCityZXR1
cm4gYy5wcmVwYXJlKGEsdSksY30sZS5wcm90b3R5cGUuY2FwdHVyZT1mdW5jdGlvbigpe3JldHVy
bntlbnY6dGhpcy5lbnYsc2NvcGU6dGhpcy5zY29wZSgpLGR5bmFtaWNTY29wZTp0aGlzLmR5bmFt
aWNTY29wZSgpLGZyYW1lOnRoaXMuZnJhbWUuY2FwdHVyZSgpfX0sZS5wcm90b3R5cGUuZ290bz1m
dW5jdGlvbihlKXt0aGlzLmZyYW1lLmdvdG8oZSl9LGUucHJvdG90eXBlLmJlZ2luQ2FjaGVHcm91
cD1mdW5jdGlvbigpe3RoaXMuY2FjaGVHcm91cHMucHVzaCh0aGlzLnVwZGF0aW5nKCkudGFpbCgp
KX0sZS5wcm90b3R5cGUuY29tbWl0Q2FjaGVHcm91cD1mdW5jdGlvbigpe3ZhciBlPW5ldyBOZSgi
RU5EIiksdD10aGlzLnVwZGF0aW5nKCksaT10aGlzLmNhY2hlR3JvdXBzLnBvcCgpLG89aT90Lm5l
eHROb2RlKGkpOnQuaGVhZCgpLHM9dC50YWlsKCksYT0oMCxyLmNvbWJpbmVTbGljZSkobmV3IG4u
TGlzdFNsaWNlKG8scykpLHU9bmV3IFJlKGEsZSkKK3QuaW5zZXJ0QmVmb3JlKHUsbyksdC5hcHBl
bmQobmV3IGtlKHUpKSx0LmFwcGVuZChlKX0sZS5wcm90b3R5cGUuZW50ZXI9ZnVuY3Rpb24oZSx0
KXt2YXIgcj1uZXcgbi5MaW5rZWRMaXN0LGk9dGhpcy5zdGFjaygpLnB1c2hVcGRhdGFibGVCbG9j
aygpLG89dGhpcy5jYXB0dXJlKCkscz1uZXcgbnIoZSx0LG8saSxyKQordGhpcy5kaWRFbnRlcihz
LHIpfSxlLnByb3RvdHlwZS5lbnRlcldpdGhLZXk9ZnVuY3Rpb24oZSx0LHIpe3ZhciBpPW5ldyBu
LkxpbmtlZExpc3Qsbz10aGlzLnN0YWNrKCkucHVzaFVwZGF0YWJsZUJsb2NrKCkscz10aGlzLmNh
cHR1cmUoKSxhPW5ldyBucih0LHIscyxvLGkpCit0aGlzLmxpc3RCbG9jaygpLm1hcFtlXT1hLHRo
aXMuZGlkRW50ZXIoYSxpKX0sZS5wcm90b3R5cGUuZW50ZXJMaXN0PWZ1bmN0aW9uKGUsdCl7dmFy
IHI9bmV3IG4uTGlua2VkTGlzdCxpPXRoaXMuc3RhY2soKS5wdXNoQmxvY2tMaXN0KHIpLG89dGhp
cy5jYXB0dXJlKCkscz10aGlzLmZyYW1lLmdldEl0ZXJhdG9yKCkuYXJ0aWZhY3RzLGE9bmV3IGly
KGUsdCxvLGkscixzKQordGhpcy5saXN0QmxvY2tTdGFjay5wdXNoKGEpLHRoaXMuZGlkRW50ZXIo
YSxyKX0sZS5wcm90b3R5cGUuZGlkRW50ZXI9ZnVuY3Rpb24oZSx0KXt0aGlzLnVwZGF0ZVdpdGgo
ZSksdGhpcy51cGRhdGluZ09wY29kZVN0YWNrLnB1c2godCl9LGUucHJvdG90eXBlLmV4aXQ9ZnVu
Y3Rpb24oKXt0aGlzLnN0YWNrKCkucG9wQmxvY2soKSx0aGlzLnVwZGF0aW5nT3Bjb2RlU3RhY2su
cG9wKCksdGhpcy51cGRhdGluZygpLnRhaWwoKS5kaWRJbml0aWFsaXplQ2hpbGRyZW4oKX0sZS5w
cm90b3R5cGUuZXhpdExpc3Q9ZnVuY3Rpb24oKXt0aGlzLmV4aXQoKSx0aGlzLmxpc3RCbG9ja1N0
YWNrLnBvcCgpfSxlLnByb3RvdHlwZS51cGRhdGVXaXRoPWZ1bmN0aW9uKGUpe3RoaXMudXBkYXRp
bmcoKS5hcHBlbmQoZSl9LGUucHJvdG90eXBlLmxpc3RCbG9jaz1mdW5jdGlvbigpe3JldHVybigw
LG4uZXhwZWN0KSh0aGlzLmxpc3RCbG9ja1N0YWNrLmN1cnJlbnQsImV4cGVjdGVkIGEgbGlzdCBi
bG9jayIpfSxlLnByb3RvdHlwZS51cGRhdGluZz1mdW5jdGlvbigpe3JldHVybigwLG4uZXhwZWN0
KSh0aGlzLnVwZGF0aW5nT3Bjb2RlU3RhY2suY3VycmVudCwiZXhwZWN0ZWQgdXBkYXRpbmcgb3Bj
b2RlIG9uIHRoZSB1cGRhdGluZyBvcGNvZGUgc3RhY2siKX0sZS5wcm90b3R5cGUuc3RhY2s9ZnVu
Y3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50U3RhY2t9LGUucHJvdG90eXBlLnNjb3BlPWZ1bmN0
aW9uKCl7cmV0dXJuKDAsbi5leHBlY3QpKHRoaXMuc2NvcGVTdGFjay5jdXJyZW50LCJleHBlY3Rl
ZCBzY29wZSBvbiB0aGUgc2NvcGUgc3RhY2siKX0sZS5wcm90b3R5cGUuZHluYW1pY1Njb3BlPWZ1
bmN0aW9uKCl7cmV0dXJuKDAsbi5leHBlY3QpKHRoaXMuZHluYW1pY1Njb3BlU3RhY2suY3VycmVu
dCwiZXhwZWN0ZWQgZHluYW1pYyBzY29wZSBvbiB0aGUgZHluYW1pYyBzY29wZSBzdGFjayIpfSxl
LnByb3RvdHlwZS5wdXNoRnJhbWU9ZnVuY3Rpb24oZSx0LG4pe3RoaXMuZnJhbWUucHVzaChlLnN0
YXJ0LGUuZW5kKSx0JiZ0aGlzLmZyYW1lLnNldEFyZ3ModCksdCYmdC5ibG9ja3MmJnRoaXMuZnJh
bWUuc2V0QmxvY2tzKHQuYmxvY2tzKSxuJiZ0aGlzLmZyYW1lLnNldENhbGxlclNjb3BlKG4pfSxl
LnByb3RvdHlwZS5wdXNoQ29tcG9uZW50RnJhbWU9ZnVuY3Rpb24oZSx0LG4scixpLG8pe3RoaXMu
ZnJhbWUucHVzaChlLnN0YXJ0LGUuZW5kLHIsaSxvKSx0JiZ0aGlzLmZyYW1lLnNldEFyZ3ModCks
dCYmdC5ibG9ja3MmJnRoaXMuZnJhbWUuc2V0QmxvY2tzKHQuYmxvY2tzKSxuJiZ0aGlzLmZyYW1l
LnNldENhbGxlclNjb3BlKG4pfSxlLnByb3RvdHlwZS5wdXNoRXZhbEZyYW1lPWZ1bmN0aW9uKGUs
dCl7dGhpcy5mcmFtZS5wdXNoKGUsdCl9LGUucHJvdG90eXBlLnB1c2hDaGlsZFNjb3BlPWZ1bmN0
aW9uKCl7dGhpcy5zY29wZVN0YWNrLnB1c2godGhpcy5zY29wZSgpLmNoaWxkKCkpfSxlLnByb3Rv
dHlwZS5wdXNoQ2FsbGVyU2NvcGU9ZnVuY3Rpb24oKXt0aGlzLnNjb3BlU3RhY2sucHVzaCgoMCxu
LmV4cGVjdCkodGhpcy5zY29wZSgpLmdldENhbGxlclNjb3BlKCksInB1c2hDYWxsZXJTY29wZSBp
cyBjYWxsZWQgd2hlbiBhIGNhbGxlciBzY29wZSBpcyBwcmVzZW50IikpfSxlLnByb3RvdHlwZS5w
dXNoRHluYW1pY1Njb3BlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5keW5hbWljU2NvcGUoKS5jaGls
ZCgpCityZXR1cm4gdGhpcy5keW5hbWljU2NvcGVTdGFjay5wdXNoKGUpLGV9LGUucHJvdG90eXBl
LnB1c2hSb290U2NvcGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1Wbi5yb290KGUsdCkKK3JldHVybiB0
aGlzLnNjb3BlU3RhY2sucHVzaChuKSxufSxlLnByb3RvdHlwZS5wb3BTY29wZT1mdW5jdGlvbigp
e3RoaXMuc2NvcGVTdGFjay5wb3AoKX0sZS5wcm90b3R5cGUucG9wRHluYW1pY1Njb3BlPWZ1bmN0
aW9uKCl7dGhpcy5keW5hbWljU2NvcGVTdGFjay5wb3AoKX0sZS5wcm90b3R5cGUubmV3RGVzdHJv
eWFibGU9ZnVuY3Rpb24oZSl7dGhpcy5zdGFjaygpLm5ld0Rlc3Ryb3lhYmxlKGUpfSxlLnByb3Rv
dHlwZS5nZXRTZWxmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2NvcGUoKS5nZXRTZWxmKCl9LGUu
cHJvdG90eXBlLnJlZmVyZW5jZUZvclN5bWJvbD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zY29w
ZSgpLmdldFN5bWJvbChlKX0sZS5wcm90b3R5cGUuZ2V0QXJncz1mdW5jdGlvbigpe3JldHVybiB0
aGlzLmZyYW1lLmdldEFyZ3MoKX0sZS5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKGUsdCxuKXty
ZXR1cm4gdGhpcy5leGVjdXRlKGUsdCxmdW5jdGlvbihlKXtyZXR1cm4gZS5mcmFtZS5yZXN0b3Jl
KG4pfSl9LGUucHJvdG90eXBlLmV4ZWN1dGU9ZnVuY3Rpb24oZSx0LG4pe3RoaXMucHJlcGFyZShl
LHQsbikKK2Zvcih2YXIgcj12b2lkIDA7OylpZihyPXRoaXMubmV4dCgpLHIuZG9uZSlicmVhawor
cmV0dXJuIHIudmFsdWV9LGUucHJvdG90eXBlLnByZXBhcmU9ZnVuY3Rpb24oZSx0LHIpe3ZhciBp
PXRoaXMuZWxlbWVudFN0YWNrLG89dGhpcy5mcmFtZSxzPXRoaXMudXBkYXRpbmdPcGNvZGVTdGFj
aworaS5wdXNoU2ltcGxlQmxvY2soKSxzLnB1c2gobmV3IG4uTGlua2VkTGlzdCksby5wdXNoKGUs
dCksciYmcih0aGlzKX0sZS5wcm90b3R5cGUubmV4dD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZnJh
bWUsdD10aGlzLmVudixyPXRoaXMudXBkYXRpbmdPcGNvZGVTdGFjayxpPXRoaXMuZWxlbWVudFN0
YWNrLG89dm9pZCAwCityZXR1cm4obz1lLm5leHRTdGF0ZW1lbnQodCkpPyhFZS5ldmFsdWF0ZSh0
aGlzLG8pLHtkb25lOiExLHZhbHVlOm51bGx9KTp7ZG9uZTohMCx2YWx1ZTpuZXcgUW4odCwoMCxu
LmV4cGVjdCkoci5wb3AoKSwidGhlcmUgc2hvdWxkIGJlIGEgZmluYWwgdXBkYXRpbmcgb3Bjb2Rl
IHN0YWNrIiksaS5wb3BCbG9jaygpKX19LGUucHJvdG90eXBlLmV2YWx1YXRlT3Bjb2RlPWZ1bmN0
aW9uKGUpe0VlLmV2YWx1YXRlKHRoaXMsZSl9LGUucHJvdG90eXBlLmludm9rZUJsb2NrPWZ1bmN0
aW9uKGUsdCl7dmFyIG49ZS5jb21waWxlKHRoaXMuZW52KQordGhpcy5wdXNoRnJhbWUobix0KX0s
ZS5wcm90b3R5cGUuaW52b2tlUGFydGlhbD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbXBpbGUodGhp
cy5lbnYpCit0aGlzLnB1c2hGcmFtZSh0KX0sZS5wcm90b3R5cGUuaW52b2tlTGF5b3V0PWZ1bmN0
aW9uKGUsdCxuLHIsaSxvKXt0aGlzLnB1c2hDb21wb25lbnRGcmFtZSh0LGUsbixyLGksbyl9LGUu
cHJvdG90eXBlLmV2YWx1YXRlT3BlcmFuZD1mdW5jdGlvbihlKXt0aGlzLmZyYW1lLnNldE9wZXJh
bmQoZS5ldmFsdWF0ZSh0aGlzKSl9LGUucHJvdG90eXBlLmV2YWx1YXRlQXJncz1mdW5jdGlvbihl
KXt2YXIgdD10aGlzLmZyYW1lLnNldEFyZ3MoZS5ldmFsdWF0ZSh0aGlzKSkKK3RoaXMuZnJhbWUu
c2V0T3BlcmFuZCh0LnBvc2l0aW9uYWwuYXQoMCkpfSxlLnByb3RvdHlwZS5iaW5kUG9zaXRpb25h
bEFyZ3M9ZnVuY3Rpb24oZSl7dmFyIHQscj0oMCxuLmV4cGVjdCkodGhpcy5mcmFtZS5nZXRBcmdz
KCksImJpbmRQb3NpdGlvbmFsQXJncyBhc3N1bWVzIGEgcHJldmlvdXMgc2V0QXJncyIpLGk9ci5w
b3NpdGlvbmFsLG89dGhpcy5zY29wZSgpCitmb3IodD0wO3Q8ZS5sZW5ndGg7dCsrKW8uYmluZFN5
bWJvbChlW3RdLGkuYXQodCkpfSxlLnByb3RvdHlwZS5iaW5kTmFtZWRBcmdzPWZ1bmN0aW9uKGUs
dCl7dmFyIHIsaSxvPSgwLG4uZXhwZWN0KSh0aGlzLmZyYW1lLmdldEFyZ3MoKSwiYmluZE5hbWVk
QXJncyBhc3N1bWVzIGEgcHJldmlvdXMgc2V0QXJncyIpLHM9dGhpcy5zY29wZSgpLGE9by5uYW1l
ZAorZm9yKHI9MDtyPGUubGVuZ3RoO3IrKylpPXRoaXMuY29uc3RhbnRzLmdldFN0cmluZyhlW3Jd
KSxzLmJpbmRTeW1ib2wodFtyXSxhLmdldChpKSl9LGUucHJvdG90eXBlLmJpbmRCbG9ja3M9ZnVu
Y3Rpb24oZSx0KXt2YXIgbixyLGk9dGhpcy5mcmFtZS5nZXRCbG9ja3MoKSxvPXRoaXMuc2NvcGUo
KQorZm9yKG49MDtuPGUubGVuZ3RoO24rKylyPXRoaXMuY29uc3RhbnRzLmdldFN0cmluZyhlW25d
KSxvLmJpbmRCbG9jayh0W25dLGkmJmlbcl18fG51bGwpfSxlLnByb3RvdHlwZS5iaW5kUGFydGlh
bEFyZ3M9ZnVuY3Rpb24oZSl7dmFyIHQ9KDAsbi5leHBlY3QpKHRoaXMuZnJhbWUuZ2V0QXJncygp
LCJiaW5kUGFydGlhbEFyZ3MgYXNzdW1lcyBhIHByZXZpb3VzIHNldEFyZ3MiKSxyPXRoaXMuc2Nv
cGUoKTsoMCxuLmFzc2VydCkodCwiQ2Fubm90IGJpbmQgbmFtZWQgYXJncyIpLHIuYmluZFBhcnRp
YWxBcmdzKGUsdCl9LGUucHJvdG90eXBlLmJpbmRDYWxsZXJTY29wZT1mdW5jdGlvbigpe3ZhciBl
PXRoaXMuZnJhbWUuZ2V0Q2FsbGVyU2NvcGUoKSx0PXRoaXMuc2NvcGUoKTsoMCxuLmFzc2VydCko
ZSwiQ2Fubm90IGJpbmQgY2FsbGVyIHNjb3BlIiksdC5iaW5kQ2FsbGVyU2NvcGUoZSl9LGUucHJv
dG90eXBlLmJpbmREeW5hbWljU2NvcGU9ZnVuY3Rpb24oZSl7dmFyIHQscixpPSgwLG4uZXhwZWN0
KSh0aGlzLmZyYW1lLmdldEFyZ3MoKSwiYmluZER5bmFtaWNTY29wZSBhc3N1bWVzIGEgcHJldmlv
dXMgc2V0QXJncyIpLG89dGhpcy5keW5hbWljU2NvcGUoKQorZm9yKCgwLG4uYXNzZXJ0KShpLCJD
YW5ub3QgYmluZCBkeW5hbWljIHNjb3BlIiksdD0wO3Q8ZS5sZW5ndGg7dCsrKXI9dGhpcy5jb25z
dGFudHMuZ2V0U3RyaW5nKGVbdF0pLG8uc2V0KHIsaS5uYW1lZC5nZXQocikpfSxlfSgpLGVyPWZ1
bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZhciByPXQuYWx3YXlzUmV2YWxpZGF0ZSxpPXZvaWQg
MCE9PXImJnIKK3RoaXMuZnJhbWVTdGFjaz1uZXcgbi5TdGFjayx0aGlzLmVudj1lLHRoaXMuY29u
c3RhbnRzPWUuY29uc3RhbnRzLHRoaXMuZG9tPWUuZ2V0RE9NKCksdGhpcy5hbHdheXNSZXZhbGlk
YXRlPWl9cmV0dXJuIGUucHJvdG90eXBlLmV4ZWN1dGU9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPXRo
aXMuZnJhbWVTdGFjaworZm9yKHRoaXMudHJ5KGUsdCk7Oyl7aWYoci5pc0VtcHR5KCkpYnJlYWsK
K249dGhpcy5mcmFtZS5uZXh0U3RhdGVtZW50KCksbnVsbCE9PW4/bi5ldmFsdWF0ZSh0aGlzKTp0
aGlzLmZyYW1lU3RhY2sucG9wKCl9fSxlLnByb3RvdHlwZS5nb3RvPWZ1bmN0aW9uKGUpe3RoaXMu
ZnJhbWUuZ290byhlKX0sZS5wcm90b3R5cGUudHJ5PWZ1bmN0aW9uKGUsdCl7dGhpcy5mcmFtZVN0
YWNrLnB1c2gobmV3IG9yKHRoaXMsZSx0KSl9LGUucHJvdG90eXBlLnRocm93PWZ1bmN0aW9uKCl7
dGhpcy5mcmFtZS5oYW5kbGVFeGNlcHRpb24oKSx0aGlzLmZyYW1lU3RhY2sucG9wKCl9LGUucHJv
dG90eXBlLmV2YWx1YXRlT3Bjb2RlPWZ1bmN0aW9uKGUpe2UuZXZhbHVhdGUodGhpcyl9LCgwLHQu
Y3JlYXRlQ2xhc3MpKGUsW3trZXk6ImZyYW1lIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLmV4
cGVjdCkodGhpcy5mcmFtZVN0YWNrLmN1cnJlbnQsImJ1ZzogZXhwZWN0ZWQgYSBmcmFtZSIpfX1d
KSxlfSgpLHRyPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIobixyLGksbyxzKXt2YXIgYT0oMCx0LnBv
c3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMpKQorYS5zdGFydD1uLGEu
ZW5kPXIsYS50eXBlPSJibG9jayIsYS5uZXh0PW51bGwsYS5wcmV2PW51bGwKK3ZhciB1PWkuZW52
LGw9aS5zY29wZSxjPWkuZHluYW1pY1Njb3BlLHA9aS5mcmFtZQorcmV0dXJuIGEuY2hpbGRyZW49
cyxhLmVudj11LGEuc2NvcGU9bCxhLmR5bmFtaWNTY29wZT1jLGEuZnJhbWU9cCxhLmJvdW5kcz1v
LGF9cmV0dXJuKDAsdC5pbmhlcml0cykocixlKSxyLnByb3RvdHlwZS5wYXJlbnRFbGVtZW50PWZ1
bmN0aW9uKCl7cmV0dXJuIHRoaXMuYm91bmRzLnBhcmVudEVsZW1lbnQoKX0sci5wcm90b3R5cGUu
Zmlyc3ROb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYm91bmRzLmZpcnN0Tm9kZSgpfSxyLnBy
b3RvdHlwZS5sYXN0Tm9kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJvdW5kcy5sYXN0Tm9kZSgp
fSxyLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbihlKXtlLnRyeSh0aGlzLmNoaWxkcmVuLG51
bGwpfSxyLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5ib3VuZHMuZGVzdHJveSgp
fSxyLnByb3RvdHlwZS5kaWREZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5lbnYuZGlkRGVzdHJveSh0
aGlzLmJvdW5kcyl9LHIucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3ZhciBlPSgwLG4uZGlj
dCkoKQorcmV0dXJuIGUuZ3VpZD0iIit0aGlzLl9ndWlkLHtndWlkOnRoaXMuX2d1aWQsdHlwZTp0
aGlzLnR5cGUsZGV0YWlsczplLGNoaWxkcmVuOnRoaXMuY2hpbGRyZW4udG9BcnJheSgpLm1hcChm
dW5jdGlvbihlKXtyZXR1cm4gZS50b0pTT04oKX0pfX0scn0oQ2UpLG5yPWZ1bmN0aW9uKGUpe2Z1
bmN0aW9uIG4obixpLG8scyxhKXt2YXIgdT0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4p
KHRoaXMsZS5jYWxsKHRoaXMsbixpLG8scyxhKSkKK3JldHVybiB1LnR5cGU9InRyeSIsdS50YWc9
dS5fdGFnPW5ldyByLlVwZGF0YWJsZVRhZyhyLkNPTlNUQU5UX1RBRyksdX1yZXR1cm4oMCx0Lmlu
aGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLmRpZEluaXRpYWxpemVDaGlsZHJlbj1mdW5jdGlvbigp
e3RoaXMuX3RhZy51cGRhdGUoKDAsci5jb21iaW5lU2xpY2UpKHRoaXMuY2hpbGRyZW4pKX0sbi5w
cm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oZSl7ZS50cnkodGhpcy5jaGlsZHJlbix0aGlzKX0s
bi5wcm90b3R5cGUuaGFuZGxlRXhjZXB0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5lbnYsdD10
aGlzLnNjb3BlLG49dGhpcy5zdGFydCxyPXRoaXMuZW5kLGk9dGhpcy5keW5hbWljU2NvcGUsbz10
aGlzLmZyYW1lLHM9Z3QucmVzdW1lKHRoaXMuZW52LHRoaXMuYm91bmRzLHRoaXMuYm91bmRzLnJl
c2V0KGUpKSxhPW5ldyBabihlLHQsaSxzKSx1PWEucmVzdW1lKG4scixvKQordGhpcy5jaGlsZHJl
bj11Lm9wY29kZXMoKSx0aGlzLmRpZEluaXRpYWxpemVDaGlsZHJlbigpfSxuLnByb3RvdHlwZS50
b0pTT049ZnVuY3Rpb24oKXt2YXIgdD1lLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKSxuPXQu
ZGV0YWlscworcmV0dXJuIG58fChuPXQuZGV0YWlscz17fSksZS5wcm90b3R5cGUudG9KU09OLmNh
bGwodGhpcyl9LG59KHRyKSxycj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLm9wY29k
ZT1lLHRoaXMubWFya2VyPXQsdGhpcy5kaWRJbnNlcnQ9ITEsdGhpcy5kaWREZWxldGU9ITEsdGhp
cy5tYXA9ZS5tYXAsdGhpcy51cGRhdGluZz1lLmNoaWxkcmVufXJldHVybiBlLnByb3RvdHlwZS5p
bnNlcnQ9ZnVuY3Rpb24oZSx0LG4saSl7dmFyIG89dGhpcy5tYXAscz10aGlzLm9wY29kZSxhPXRo
aXMudXBkYXRpbmcsdT1udWxsLGw9bnVsbAoraT8obD1vW2ldLHU9bC5ib3VuZHMuZmlyc3ROb2Rl
KCkpOnU9dGhpcy5tYXJrZXIKK3ZhciBjPXMudm1Gb3JJbnNlcnRpb24odSkscD1udWxsCitjLmV4
ZWN1dGUocy5zdGFydCxzLmVuZCxmdW5jdGlvbihpKXtpLmZyYW1lLnNldEFyZ3MoV2UucG9zaXRp
b25hbChbdCxuXSkpLGkuZnJhbWUuc2V0T3BlcmFuZCh0KSxpLmZyYW1lLnNldENvbmRpdGlvbihu
ZXcgci5Db25zdFJlZmVyZW5jZSghMCkpLGkuZnJhbWUuc2V0S2V5KGUpCit2YXIgbz1pLmNhcHR1
cmUoKSxhPWkuc3RhY2soKS5wdXNoVXBkYXRhYmxlQmxvY2soKQorcD1uZXcgbnIocy5zdGFydCxz
LmVuZCxvLGEsaS51cGRhdGluZygpKX0pLHAuZGlkSW5pdGlhbGl6ZUNoaWxkcmVuKCksYS5pbnNl
cnRCZWZvcmUocCxsKSxvW2VdPXAsdGhpcy5kaWRJbnNlcnQ9ITB9LGUucHJvdG90eXBlLnJldGFp
bj1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUubW92ZT1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT10
aGlzLm1hcCxvPXRoaXMudXBkYXRpbmcsYT1pW2VdLHU9aVtyXXx8bnVsbAorcj9zKGEsdS5maXJz
dE5vZGUoKSk6cyhhLHRoaXMubWFya2VyKSxvLnJlbW92ZShhKSxvLmluc2VydEJlZm9yZShhLHUp
fSxlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5tYXAsbj10W2VdCitu
LmRpZERlc3Ryb3koKSxhKG4pLHRoaXMudXBkYXRpbmcucmVtb3ZlKG4pLGRlbGV0ZSB0W2VdLHRo
aXMuZGlkRGVsZXRlPSEwfSxlLnByb3RvdHlwZS5kb25lPWZ1bmN0aW9uKCl7dGhpcy5vcGNvZGUu
ZGlkSW5pdGlhbGl6ZUNoaWxkcmVuKHRoaXMuZGlkSW5zZXJ0fHx0aGlzLmRpZERlbGV0ZSl9LGV9
KCksaXI9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gaShpLG8scyxhLHUsbCl7dmFyIGM9KDAsdC5wb3Nz
aWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuY2FsbCh0aGlzLGksbyxzLGEsdSkpCitjLnR5
cGU9Imxpc3QtYmxvY2siLGMubWFwPSgwLG4uZGljdCkoKSxjLmxhc3RJdGVyYXRlZD1yLklOSVRJ
QUwsYy5hcnRpZmFjdHM9bAordmFyIHA9Yy5fdGFnPW5ldyByLlVwZGF0YWJsZVRhZyhyLkNPTlNU
QU5UX1RBRykKK3JldHVybiBjLnRhZz0oMCxyLmNvbWJpbmUpKFtsLnRhZyxwXSksY31yZXR1cm4o
MCx0LmluaGVyaXRzKShpLGUpLGkucHJvdG90eXBlLmRpZEluaXRpYWxpemVDaGlsZHJlbj1mdW5j
dGlvbigpe3ZhciBlPSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0p
fHxhcmd1bWVudHNbMF0KK3RoaXMubGFzdEl0ZXJhdGVkPXRoaXMuYXJ0aWZhY3RzLnRhZy52YWx1
ZSgpLGUmJnRoaXMuX3RhZy51cGRhdGUoKDAsci5jb21iaW5lU2xpY2UpKHRoaXMuY2hpbGRyZW4p
KX0saS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7dmFyIGksbyxzLGEsdSxsPXRoaXMu
YXJ0aWZhY3RzLGM9dGhpcy5sYXN0SXRlcmF0ZWQKK2wudGFnLnZhbGlkYXRlKGMpfHwoaT10aGlz
LmJvdW5kcyxvPXQuZG9tLHM9by5jcmVhdGVDb21tZW50KCIiKSxvLmluc2VydEFmdGVyKGkucGFy
ZW50RWxlbWVudCgpLHMsKDAsbi5leHBlY3QpKGkubGFzdE5vZGUoKSwiY2FuJ3QgaW5zZXJ0IGFm
dGVyIGFuIGVtcHR5IGJvdW5kcyIpKSxhPW5ldyBycih0aGlzLHMpLHU9bmV3IHIuSXRlcmF0b3JT
eW5jaHJvbml6ZXIoe3RhcmdldDphLGFydGlmYWN0czpsfSksdS5zeW5jKCksdGhpcy5wYXJlbnRF
bGVtZW50KCkucmVtb3ZlQ2hpbGQocykpLGUucHJvdG90eXBlLmV2YWx1YXRlLmNhbGwodGhpcyx0
KX0saS5wcm90b3R5cGUudm1Gb3JJbnNlcnRpb249ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5lbnYs
bj10aGlzLnNjb3BlLHI9dGhpcy5keW5hbWljU2NvcGUsaT1ndC5mb3JJbml0aWFsUmVuZGVyKHRo
aXMuZW52LHRoaXMuYm91bmRzLnBhcmVudEVsZW1lbnQoKSxlKQorcmV0dXJuIG5ldyBabih0LG4s
cixpKX0saS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7dmFyIHQ9ZS5wcm90b3R5cGUudG9K
U09OLmNhbGwodGhpcyksbj10aGlzLm1hcCxyPU9iamVjdC5rZXlzKG4pLm1hcChmdW5jdGlvbihl
KXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSkrIjogIituW2VdLl9ndWlkfSkuam9pbigiLCAiKSxp
PXQuZGV0YWlscworcmV0dXJuIGl8fChpPXQuZGV0YWlscz17fSksaS5tYXA9InsiK3IrIn0iLHR9
LGl9KHRyKSxvcj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3RoaXMudm09ZSx0aGlzLm9w
cz10LHRoaXMuZXhjZXB0aW9uSGFuZGxlcj1uLHRoaXMudm09ZSx0aGlzLm9wcz10LHRoaXMuY3Vy
cmVudD10LmhlYWQoKX1yZXR1cm4gZS5wcm90b3R5cGUuZ290bz1mdW5jdGlvbihlKXt0aGlzLmN1
cnJlbnQ9ZX0sZS5wcm90b3R5cGUubmV4dFN0YXRlbWVudD1mdW5jdGlvbigpe3ZhciBlPXRoaXMu
Y3VycmVudCx0PXRoaXMub3BzCityZXR1cm4gZSYmKHRoaXMuY3VycmVudD10Lm5leHROb2RlKGUp
KSxlfSxlLnByb3RvdHlwZS5oYW5kbGVFeGNlcHRpb249ZnVuY3Rpb24oKXt0aGlzLmV4Y2VwdGlv
bkhhbmRsZXImJnRoaXMuZXhjZXB0aW9uSGFuZGxlci5oYW5kbGVFeGNlcHRpb24oKX0sZX0oKQor
RWUuYWRkKDMxLGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5vcDEKK2UuY29uc3RhbnRzLmdldE90aGVy
KG4pLmV2YWx1YXRlKGUpfSkKK3ZhciBzcj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJu
IGUucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZnJhbWUuZ2V0T3BlcmFu
ZCgpLG49dGhpcy5ub3JtYWxpemUodCksaT12b2lkIDAsbz12b2lkIDA7KDAsci5pc0NvbnN0KSh0
KT9pPW4udmFsdWUoKToobz1uZXcgci5SZWZlcmVuY2VDYWNoZShuKSxpPW8ucGVlaygpKQordmFy
IHM9ZS5zdGFjaygpLGE9dGhpcy5pbnNlcnQoZS5lbnYuZ2V0QXBwZW5kT3BlcmF0aW9ucygpLHMs
aSksdT1uZXcgbXQoYS5ib3VuZHMpCitzLm5ld0JvdW5kcyh1KSxvJiZlLnVwZGF0ZVdpdGgodGhp
cy51cGRhdGVXaXRoKGUsdCxvLHUsYSkpfSxlfSgpLGFyPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4o
bixyKXt2YXIgaT0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRo
aXMpKQorcmV0dXJuIGkuZXhwcmVzc2lvbj1uLGkuc3ltYm9sVGFibGU9cixpLnN0YXJ0PS0xLGku
ZW5kPS0xLGl9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS5ldmFsdWF0ZT1m
dW5jdGlvbih0KXt2YXIgbjstMT09PXRoaXMuc3RhcnQ/KHQuZXZhbHVhdGVPcGVyYW5kKHRoaXMu
ZXhwcmVzc2lvbiksbj10LmZyYW1lLmdldE9wZXJhbmQoKS52YWx1ZSgpLGgobik/KHRoaXMuZGVv
cHQodC5lbnYpLHQucHVzaEV2YWxGcmFtZSh0aGlzLnN0YXJ0LHRoaXMuZW5kKSk6ZS5wcm90b3R5
cGUuZXZhbHVhdGUuY2FsbCh0aGlzLHQpKTp0LnB1c2hFdmFsRnJhbWUodGhpcy5zdGFydCx0aGlz
LmVuZCl9LG4ucHJvdG90eXBlLmRlb3B0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj1uZXcga3Qo
dGhpcy5zeW1ib2xUYWJsZSxlKQorcmV0dXJuIG4ucHV0VmFsdWUodGhpcy5leHByZXNzaW9uKSxu
LnRlc3QodXIuY3JlYXRlKSxuLmxhYmVsbGVkKG51bGwsZnVuY3Rpb24oZSxuLHIpe2UuanVtcFVu
bGVzcygiVkFMVUUiKSxlLnB1dER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uKCksZS5vcGVuQ29t
cG9uZW50KEhlLmVtcHR5KCkpLGUuY2xvc2VDb21wb25lbnQoKSxlLmp1bXAociksZS5sYWJlbCgi
VkFMVUUiKSxlLmR5bmFtaWNDb250ZW50KG5ldyB0LkFwcGVuZE9wY29kZSl9KSx0aGlzLnN0YXJ0
PW4uc3RhcnQsdGhpcy5lbmQ9bi5lbmQsdGhpcy5leHByZXNzaW9uPW51bGwsbi5zdGFydH0sbn0o
c3IpLHVyPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXtyZXR1cm4oMCx0LnBvc3NpYmxlQ29uc3Ry
dWN0b3JSZXR1cm4pKHRoaXMsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybigwLHQuaW5o
ZXJpdHMpKG4sZSksbi5jcmVhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBuKGUpfSxuLnByb3Rv
dHlwZS50b0Jvb2w9ZnVuY3Rpb24oZSl7cmV0dXJuIGgoZSl9LG59KGJlKSxscj1mdW5jdGlvbihl
KXtmdW5jdGlvbiBuKG4scixpKXt2YXIgbz0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4p
KHRoaXMsZS5jYWxsKHRoaXMpKQorcmV0dXJuIG8uY2FjaGU9bixvLmJvdW5kcz1yLG8udXBzZXJ0
PWksby50YWc9bi50YWcsb31yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLmV2
YWx1YXRlPWZ1bmN0aW9uKGUpe3ZhciB0LG4saSxvLHM9dGhpcy5jYWNoZS5yZXZhbGlkYXRlKCk7
KDAsci5pc01vZGlmaWVkKShzKSYmKHQ9dGhpcy5ib3VuZHMsbj10aGlzLnVwc2VydCxpPWUuZG9t
LHRoaXMudXBzZXJ0LnVwZGF0ZShpLHMpfHwobz1uZXcgUWUodC5wYXJlbnRFbGVtZW50KCksYSh0
KSksbj10aGlzLnVwc2VydD10aGlzLmluc2VydChlLmVudi5nZXRBcHBlbmRPcGVyYXRpb25zKCks
byxzKSksdC51cGRhdGUobi5ib3VuZHMpKX0sbi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7
dmFyIGU9dGhpcy5fZ3VpZCx0PXRoaXMudHlwZSxuPXRoaXMuY2FjaGUKK3JldHVybntndWlkOmUs
dHlwZTp0LGRldGFpbHM6e2xhc3RWYWx1ZTpKU09OLnN0cmluZ2lmeShuLnBlZWsoKSl9fX0sbn0o
Q2UpLGNyPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGkobixpLG8scyxhLHUpe3ZhciBsPSgwLHQucG9z
c2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmNhbGwodGhpcyxpLG8scykpCityZXR1cm4g
bC5yZWZlcmVuY2U9bixsLmFwcGVuZE9wY29kZT1hLGwuc3RhdGU9dSxsLmRlb3B0ZWQ9bnVsbCxs
LnRhZz1sLl90YWc9bmV3IHIuVXBkYXRhYmxlVGFnKGwudGFnKSxsfXJldHVybigwLHQuaW5oZXJp
dHMpKGksZSksaS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7dGhpcy5kZW9wdGVkP3Qu
ZXZhbHVhdGVPcGNvZGUodGhpcy5kZW9wdGVkKTpoKHRoaXMucmVmZXJlbmNlLnZhbHVlKCkpP3Ro
aXMubGF6eURlb3B0KHQpOmUucHJvdG90eXBlLmV2YWx1YXRlLmNhbGwodGhpcyx0KX0saS5wcm90
b3R5cGUubGF6eURlb3B0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYm91bmRzLHI9dGhpcy5hcHBl
bmRPcGNvZGUsaT10aGlzLnN0YXRlLG89ZS5lbnYscz1yLmRlb3B0KG8pLGE9KDAsbi5leHBlY3Qp
KG8ucHJvZ3JhbS5vcGNvZGUocys4KSwiaGFyZGNvZGVkIGRlb3B0IGxvY2F0aW9uIiksdT1hLm9w
MSxsPWEub3AyLGM9bmV3IGJ0KHQucGFyZW50RWxlbWVudCgpKQorYy5uZXdCb3VuZHModGhpcy5i
b3VuZHMpCit2YXIgcD1uZXcgbi5MaW5rZWRMaXN0CitpLmZyYW1lLmNvbmRpdGlvbj11ci5jcmVh
dGUoKDAsbi5leHBlY3QpKGkuZnJhbWUub3BlcmFuZCwib3BlcmFuZCBzaG91bGQgYmUgcG9wdWxh
dGVkIikpCit2YXIgZj10aGlzLmRlb3B0ZWQ9bmV3IG5yKHUsbCxpLGMscCkKK3RoaXMuX3RhZy51
cGRhdGUoZi50YWcpLGUuZXZhbHVhdGVPcGNvZGUoZiksZS50aHJvdygpLHRoaXMuX3RhZz1udWxs
LHRoaXMucmVmZXJlbmNlPW51bGwsdGhpcy5jYWNoZT1udWxsLHRoaXMuYm91bmRzPW51bGwsdGhp
cy51cHNlcnQ9bnVsbCx0aGlzLmFwcGVuZE9wY29kZT1udWxsLHRoaXMuc3RhdGU9bnVsbH0saS5w
cm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZ3VpZCxuPXRoaXMudHlwZSxy
PXRoaXMuZGVvcHRlZAorcmV0dXJuIHI/e2d1aWQ6dCx0eXBlOm4sZGVvcHRlZDohMCxjaGlsZHJl
bjpbci50b0pTT04oKV19OmUucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpfSxpfShscikscHI9
ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3ZhciBuPSgwLHQucG9zc2libGVDb25zdHJ1Y3RvclJl
dHVybikodGhpcyxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkKK3JldHVybiBuLnR5cGU9Im9wdGlt
aXplZC1jYXV0aW91cy1hcHBlbmQiLG59cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3Rv
dHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsci5tYXApKGUsY2UpfSxuLnByb3Rv
dHlwZS5pbnNlcnQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBwKGUsdCxuKX0sbi5wcm90b3R5cGUu
dXBkYXRlV2l0aD1mdW5jdGlvbihlLHQsbixyLGkpe3JldHVybiBuZXcgZnIobixyLGkpfSxufShz
ciksZnI9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3ZhciBuPSgwLHQucG9zc2libGVDb25zdHJ1
Y3RvclJldHVybikodGhpcyxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkKK3JldHVybiBuLnR5cGU9
Im9wdGltaXplZC1jYXV0aW91cy11cGRhdGUiLG59cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxu
LnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBwKGUsdCxuKX0sbn0obHIp
LGhyPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXt2YXIgbj0oMCx0LnBvc3NpYmxlQ29uc3RydWN0
b3JSZXR1cm4pKHRoaXMsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpCityZXR1cm4gbi50eXBlPSJn
dWFyZGVkLWNhdXRpb3VzLWFwcGVuZCIsbi5BcHBlbmRPcGNvZGU9cHIsbn1yZXR1cm4oMCx0Lmlu
aGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbihlKXtyZXR1cm4oMCxy
Lm1hcCkoZSxjZSl9LG4ucHJvdG90eXBlLmluc2VydD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHAo
ZSx0LG4pfSxuLnByb3RvdHlwZS51cGRhdGVXaXRoPWZ1bmN0aW9uKGUsdCxuLHIsaSl7cmV0dXJu
IG5ldyBkcih0LG4scixpLHRoaXMsZS5jYXB0dXJlKCkpfSxufShhciksZHI9ZnVuY3Rpb24oZSl7
ZnVuY3Rpb24gbigpe3ZhciBuPSgwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxl
LmFwcGx5KHRoaXMsYXJndW1lbnRzKSkKK3JldHVybiBuLnR5cGU9Imd1YXJkZWQtY2F1dGlvdXMt
dXBkYXRlIixufXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbi5wcm90b3R5cGUuaW5zZXJ0PWZ1
bmN0aW9uKGUsdCxuKXtyZXR1cm4gcChlLHQsbil9LG59KGNyKSxtcj1mdW5jdGlvbihlKXtmdW5j
dGlvbiBuKCl7dmFyIG49KDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuYXBw
bHkodGhpcyxhcmd1bWVudHMpKQorcmV0dXJuIG4udHlwZT0ib3B0aW1pemVkLXRydXN0aW5nLWFw
cGVuZCIsbn1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLm5vcm1hbGl6ZT1m
dW5jdGlvbihlKXtyZXR1cm4oMCxyLm1hcCkoZSxsZSl9LG4ucHJvdG90eXBlLmluc2VydD1mdW5j
dGlvbihlLHQsbil7cmV0dXJuIGYoZSx0LG4pfSxuLnByb3RvdHlwZS51cGRhdGVXaXRoPWZ1bmN0
aW9uKGUsdCxuLHIsaSl7cmV0dXJuIG5ldyBncihuLHIsaSl9LG59KHNyKSxncj1mdW5jdGlvbihl
KXtmdW5jdGlvbiBuKCl7dmFyIG49KDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlz
LGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKQorcmV0dXJuIG4udHlwZT0ib3B0aW1pemVkLXRydXN0
aW5nLXVwZGF0ZSIsbn1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLmluc2Vy
dD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGYoZSx0LG4pfSxufShscikseXI9ZnVuY3Rpb24oZSl7
ZnVuY3Rpb24gbigpe3ZhciBuPSgwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxl
LmFwcGx5KHRoaXMsYXJndW1lbnRzKSkKK3JldHVybiBuLnR5cGU9Imd1YXJkZWQtdHJ1c3Rpbmct
YXBwZW5kIixuLkFwcGVuZE9wY29kZT1tcixufXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbi5w
cm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKGUpe3JldHVybigwLHIubWFwKShlLGxlKX0sbi5w
cm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZihlLHQsbil9LG4ucHJvdG90
eXBlLnVwZGF0ZVdpdGg9ZnVuY3Rpb24oZSx0LG4scixpKXtyZXR1cm4gbmV3IHZyKHQsbixyLGks
dGhpcyxlLmNhcHR1cmUoKSl9LG59KGFyKSx2cj1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7dmFy
IG49KDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuYXBwbHkodGhpcyxhcmd1
bWVudHMpKQorcmV0dXJuIG4udHlwZT0idHJ1c3RpbmctdXBkYXRlIixufXJldHVybigwLHQuaW5o
ZXJpdHMpKG4sZSksbi5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZihl
LHQsbil9LG59KGNyKQorRWUuYWRkKDQ5LGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5vcDEsaT1lLmVu
dixvPWUuY29uc3RhbnRzLmdldE90aGVyKG4pLHM9KDAsci5tYXApKGUuZnJhbWUuZ2V0T3BlcmFu
ZCgpLGZ1bmN0aW9uKGUpe3ZhciB0PVN0cmluZyhlKQoraWYoIWkuaGFzUGFydGlhbCh0LG8pKXRo
cm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgYSBwYXJ0aWFsIG5hbWVkICInK3QrJyInKQor
cmV0dXJuIGkubG9va3VwUGFydGlhbCh0LG8pfSksYT0oMCxyLmlzQ29uc3QpKHMpP3ZvaWQgMDpu
ZXcgci5SZWZlcmVuY2VDYWNoZShzKSx1PWE/YS5wZWVrKCk6cy52YWx1ZSgpCitlLmZyYW1lLnNl
dEltbWVkaWF0ZSh1KSxhJiZlLnVwZGF0ZVdpdGgobmV3IFNlKGEpKX0pLEVlLmFkZCg1MCxmdW5j
dGlvbihlLHQpe3ZhciBuPXQub3AxLHI9ZS5jb25zdGFudHMuZ2V0T3RoZXIobikKK2UuZnJhbWUu
c2V0SW1tZWRpYXRlKHIpfSksRWUuYWRkKDUxLGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5vcDEscj10
Lm9wMixpPWUuY29uc3RhbnRzLmdldE90aGVyKG4pLG89ZS5jb25zdGFudHMuZ2V0T3RoZXIociks
cz1lLmZyYW1lLmdldEltbWVkaWF0ZSgpLGE9cy50ZW1wbGF0ZSx1PW9bYS5pZF0KK3V8fCh1PWEu
YXNQYXJ0aWFsKGkpKSxlLmludm9rZVBhcnRpYWwodSl9KQordmFyIGJyPWZ1bmN0aW9uKCl7ZnVu
Y3Rpb24gZShlKXt0aGlzLnRhZz1lLnRhZyx0aGlzLmFydGlmYWN0cz1lfXJldHVybiBlLnByb3Rv
dHlwZS52YWx1ZT1mdW5jdGlvbigpe3JldHVybiF0aGlzLmFydGlmYWN0cy5pc0VtcHR5KCl9LGV9
KCkKK0VlLmFkZCg0NCxmdW5jdGlvbihlKXt2YXIgdD1lLmZyYW1lLmdldE9wZXJhbmQoKSxpPSgw
LG4uZXhwZWN0KShlLmZyYW1lLmdldEFyZ3MoKSwiUHV0SXRlcmF0b3JPcGNvZGUgZXhwZWN0cyBh
IHBvcHVsYXRlZCBhcmdzIHJlZ2lzdGVyIiksbz1lLmVudi5pdGVyYWJsZUZvcih0LGkpLHM9bmV3
IHIuUmVmZXJlbmNlSXRlcmF0b3IobykKK2UuZnJhbWUuc2V0SXRlcmF0b3IocyksZS5mcmFtZS5z
ZXRDb25kaXRpb24obmV3IGJyKHMuYXJ0aWZhY3RzKSl9KSxFZS5hZGQoNDUsZnVuY3Rpb24oZSx0
KXt2YXIgbj10Lm9wMSxyPXQub3AyCitlLmVudGVyTGlzdChuLHIpfSksRWUuYWRkKDQ2LGZ1bmN0
aW9uKGUpe3JldHVybiBlLmV4aXRMaXN0KCl9KSxFZS5hZGQoNDcsZnVuY3Rpb24oZSx0KXt2YXIg
cj10Lm9wMSxpPXQub3AyLG89KDAsbi5leHBlY3QpKGUuZnJhbWUuZ2V0S2V5KCksIkVudGVyV2l0
aEtleU9wY29kZSBleHBlY3RzIGEgcG9wdWxhdGVkIGtleSByZWdpc3RlciIpCitlLmVudGVyV2l0
aEtleShvLHIsaSl9KQordmFyIF9yPW5ldyByLkNvbnN0UmVmZXJlbmNlKCEwKSx3cj1uZXcgci5D
b25zdFJlZmVyZW5jZSghMSkKK0VlLmFkZCg0OCxmdW5jdGlvbihlLHQpe3ZhciBuPXQub3AxLHI9
ZS5mcmFtZS5nZXRJdGVyYXRvcigpLm5leHQoKQorcj8oZS5mcmFtZS5zZXRDb25kaXRpb24oX3Ip
LGUuZnJhbWUuc2V0S2V5KHIua2V5KSxlLmZyYW1lLnNldE9wZXJhbmQoci52YWx1ZSksZS5mcmFt
ZS5zZXRBcmdzKFdlLnBvc2l0aW9uYWwoW3IudmFsdWUsci5tZW1vXSkpKTooZS5mcmFtZS5zZXRD
b25kaXRpb24od3IpLGUuZ290byhuKSl9KQordmFyIEVyLHhyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24g
ZShlKXt0aGlzLnZtPWV9cmV0dXJuIGUucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXtyZXR1cm4g
dGhpcy52bS5uZXh0KCl9LGV9KCksQ3I9MCxPcj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0
aGlzLnNjb3BlPWUsdGhpcy5uYW1lUmVmPXQKK3ZhciBuPXRoaXMudmFyVGFnPW5ldyByLlVwZGF0
YWJsZVRhZyhyLkNPTlNUQU5UX1RBRykKK3RoaXMudGFnPSgwLHIuY29tYmluZSkoW3QudGFnLG5d
KX1yZXR1cm4gZS5wcm90b3R5cGUudmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRWYXIo
KS52YWx1ZSgpfSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZ2V0VmFy
KCkuZ2V0KGUpfSxlLnByb3RvdHlwZS5nZXRWYXI9ZnVuY3Rpb24oKXt2YXIgZT1TdHJpbmcodGhp
cy5uYW1lUmVmLnZhbHVlKCkpLHQ9dGhpcy5zY29wZS5nZXQoZSkKK3JldHVybiB0aGlzLnZhclRh
Zy51cGRhdGUodC50YWcpLHR9LGV9KCk7KGZ1bmN0aW9uKGUpe2VbZS5FbGVtZW50PTBdPSJFbGVt
ZW50IixlW2UuQXR0cmlidXRlPTFdPSJBdHRyaWJ1dGUiLGVbZS5UZXh0PTJdPSJUZXh0IixlW2Uu
Q2RhdGFTZWN0aW9uPTNdPSJDZGF0YVNlY3Rpb24iLGVbZS5FbnRpdHlSZWZlcmVuY2U9NF09IkVu
dGl0eVJlZmVyZW5jZSIsZVtlLkVudGl0eT01XT0iRW50aXR5IixlW2UuUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uPTZdPSJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24iLGVbZS5Db21tZW50PTddPSJDb21tZW50
IixlW2UuRG9jdW1lbnQ9OF09IkRvY3VtZW50IixlW2UuRG9jdW1lbnRUeXBlPTldPSJEb2N1bWVu
dFR5cGUiLGVbZS5Eb2N1bWVudEZyYWdtZW50PTEwXT0iRG9jdW1lbnRGcmFnbWVudCIsZVtlLk5v
dGF0aW9uPTExXT0iTm90YXRpb24ifSkoRXJ8fChFcj17fSkpCit2YXIgQXI9T2JqZWN0LmZyZWV6
ZSh7Z2V0IE5vZGVUeXBlKCl7cmV0dXJuIEVyfX0pCitlLlNpbXBsZT1BcixlLnRlbXBsYXRlRmFj
dG9yeT1mdW5jdGlvbihlKXt2YXIgdD1lLmlkLHI9ZS5tZXRhLGk9ZS5ibG9jayxvPXZvaWQgMCxz
PXR8fCJjbGllbnQtIitDcisrCityZXR1cm57aWQ6cyxtZXRhOnIsY3JlYXRlOmZ1bmN0aW9uKGUs
dCl7dmFyIGE9dD8oMCxuLmFzc2lnbikoe30sdCxyKTpyCityZXR1cm4gb3x8KG89SlNPTi5wYXJz
ZShpKSkscGUobyxzLGEsZSl9fX0sZS5OVUxMX1JFRkVSRU5DRT1nZSxlLlVOREVGSU5FRF9SRUZF
UkVOQ0U9bWUsZS5QcmltaXRpdmVSZWZlcmVuY2U9ZmUsZS5Db25kaXRpb25hbFJlZmVyZW5jZT1i
ZSxlLk9wY29kZUJ1aWxkZXJEU0w9a3QsZS5jb21waWxlTGF5b3V0PWZ1bmN0aW9uKGUsdCl7dmFy
IG49bmV3IE50KHQpCityZXR1cm4gZS5jb21waWxlKG4pLG4uY29tcGlsZSgpfSxlLkNvbXBpbGVk
QmxvY2s9QXQsZS5Db21waWxlZFByb2dyYW09VHQsZS5JQXR0cmlidXRlTWFuYWdlcj1JbixlLkF0
dHJpYnV0ZU1hbmFnZXI9SW4sZS5Qcm9wZXJ0eU1hbmFnZXI9TW4sZS5JTlBVVF9WQUxVRV9QUk9Q
RVJUWV9NQU5BR0VSPVVuLGUuZGVmYXVsdE1hbmFnZXJzPWVlLGUuZGVmYXVsdEF0dHJpYnV0ZU1h
bmFnZXJzPW5lLGUuZGVmYXVsdFByb3BlcnR5TWFuYWdlcnM9dGUsZS5yZWFkRE9NQXR0cj1mdW5j
dGlvbihlLHQpe3ZhciBuPWUubmFtZXNwYWNlVVJJPT09QW4scj1CKGUsdCksaT1yLnR5cGUsbz1y
Lm5vcm1hbGl6ZWQKK3JldHVybiBuP2UuZ2V0QXR0cmlidXRlKG8pOiJhdHRyIj09PWk/ZS5nZXRB
dHRyaWJ1dGUobyk6ZVtvXX0sZS5ub3JtYWxpemVUZXh0VmFsdWU9dWUsZS5Db21waWxlZEV4cHJl
c3Npb249aXQsZS5Db21waWxlZEFyZ3M9SGUsZS5Db21waWxlZE5hbWVkQXJncz1GZSxlLkNvbXBp
bGVkUG9zaXRpb25hbEFyZ3M9RGUsZS5FdmFsdWF0ZWRBcmdzPVdlLGUuRXZhbHVhdGVkTmFtZWRB
cmdzPVVlLGUuRXZhbHVhdGVkUG9zaXRpb25hbEFyZ3M9SWUsZS5nZXREeW5hbWljVmFyPWZ1bmN0
aW9uKGUsdCl7dmFyIG49ZS5keW5hbWljU2NvcGUoKSxyPXQucG9zaXRpb25hbC5hdCgwKQorcmV0
dXJuIG5ldyBPcihuLHIpfSxlLkJsb2NrTWFjcm9zPWduLGUuSW5saW5lTWFjcm9zPXZuLGUuY29t
cGlsZUFyZ3M9UgorZS5zZXREZWJ1Z2dlckNhbGxiYWNrPWZ1bmN0aW9uKGUpe3BuPWV9LGUucmVz
ZXREZWJ1Z2dlckNhbGxiYWNrPWZ1bmN0aW9uKCl7cG49QX0sZS5CYXNlbGluZVN5bnRheD1IdCxl
LkxheW91dD1XdCxlLlVwZGF0aW5nVk09ZXIsZS5SZW5kZXJSZXN1bHQ9UW4sZS5pc1NhZmVTdHJp
bmc9dSxlLlNjb3BlPVZuLGUuRW52aXJvbm1lbnQ9S24sZS5QYXJ0aWFsRGVmaW5pdGlvbj1mdW5j
dGlvbihlLHQpe3RoaXMubmFtZT1lLHRoaXMudGVtcGxhdGU9dH0sZS5Db21wb25lbnREZWZpbml0
aW9uPWZ1bmN0aW9uKGUsdCxuKXt0aGlzW3J0XT0hMCx0aGlzLm5hbWU9ZSx0aGlzLm1hbmFnZXI9
dCx0aGlzLkNvbXBvbmVudENsYXNzPW59LGUuaXNDb21wb25lbnREZWZpbml0aW9uPWgsZS5ET01D
aGFuZ2VzPURuLGUuSURPTUNoYW5nZXM9UG4sZS5ET01UcmVlQ29uc3RydWN0aW9uPUxuLGUuaXNX
aGl0ZXNwYWNlPWZ1bmN0aW9uKGUpe3JldHVybiBrbi50ZXN0KGUpfSxlLmluc2VydEhUTUxCZWZv
cmU9WCxlLkVsZW1lbnRTdGFjaz1ndCxlLkNvbmNyZXRlQm91bmRzPVllfSksZSgiQGdsaW1tZXIv
dXRpbCIsWyJleHBvcnRzIl0sZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiCitmdW5jdGlvbiB0KGUp
e3JldHVybiBlLl9ndWlkPSsreX1mdW5jdGlvbiBuKGUpe3JldHVybiBlLl9ndWlkfHx0KGUpfWZ1
bmN0aW9uIHIoKXt9ZnVuY3Rpb24gaSgpe3JldHVybiBuZXcgcn1lLnVucmVhY2hhYmxlPWUuZXhw
ZWN0PWUudW53cmFwPWUuSEFTX05BVElWRV9XRUFLTUFQPWUuQT1lLkxpc3RTbGljZT1lLkxpc3RO
b2RlPWUuTGlua2VkTGlzdD1lLkVNUFRZX1NMSUNFPWUuZGljdD1lLkRpY3RTZXQ9ZS5TdGFjaz1l
LmluaXRpYWxpemVHdWlkPWUuZW5zdXJlR3VpZD1lLmZpbGxOdWxscz1lLmFzc2lnbj1lLkxvZ0xl
dmVsPWUuTG9nZ2VyPWUuTE9HR0VSPWUuYXNzZXJ0PWUuZ2V0QXR0ck5hbWVzcGFjZT12b2lkIDAK
K3ZhciBvLHM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLGE9Imh0dHA6Ly93d3cudzMu
b3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsdT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8i
LGw9eyJ4bGluazphY3R1YXRlIjpzLCJ4bGluazphcmNyb2xlIjpzLCJ4bGluazpocmVmIjpzLCJ4
bGluazpyb2xlIjpzLCJ4bGluazpzaG93IjpzLCJ4bGluazp0aXRsZSI6cywieGxpbms6dHlwZSI6
cywieG1sOmJhc2UiOmEsInhtbDpsYW5nIjphLCJ4bWw6c3BhY2UiOmEseG1sbnM6dSwieG1sbnM6
eGxpbmsiOnV9OyhmdW5jdGlvbihlKXtlW2UuVHJhY2U9MF09IlRyYWNlIixlW2UuRGVidWc9MV09
IkRlYnVnIixlW2UuV2Fybj0yXT0iV2FybiIsZVtlLkVycm9yPTNdPSJFcnJvciJ9KShvfHwoZS5M
b2dMZXZlbD1vPXt9KSkKK3ZhciBjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5w
cm90b3R5cGUubG9nPWZ1bmN0aW9uKCl7fSxlLnByb3RvdHlwZS53YXJuPWZ1bmN0aW9uKCl7fSxl
LnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUudHJhY2U9ZnVuY3Rpb24o
KXt9LGV9KCkscD12b2lkIDAsZj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dmFyIHQ9ZS5jb25z
b2xlLG49ZS5sZXZlbAordGhpcy5mPXAsdGhpcy5mb3JjZT1wLHRoaXMuY29uc29sZT10LHRoaXMu
bGV2ZWw9bn1yZXR1cm4gZS5wcm90b3R5cGUuc2tpcHBlZD1mdW5jdGlvbihlKXtyZXR1cm4gZTx0
aGlzLmxldmVsfSxlLnByb3RvdHlwZS50cmFjZT1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMu
bGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sbj10LnN0YWNr
VHJhY2Uscj12b2lkIDAhPT1uJiZuCit0aGlzLnNraXBwZWQoby5UcmFjZSl8fCh0aGlzLmNvbnNv
bGUubG9nKGUpLHImJnRoaXMuY29uc29sZS50cmFjZSgpKX0sZS5wcm90b3R5cGUuZGVidWc9ZnVu
Y3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/
YXJndW1lbnRzWzFdOnt9LG49dC5zdGFja1RyYWNlLHI9dm9pZCAwIT09biYmbgordGhpcy5za2lw
cGVkKG8uRGVidWcpfHwodGhpcy5jb25zb2xlLmxvZyhlKSxyJiZ0aGlzLmNvbnNvbGUudHJhY2Uo
KSl9LGUucHJvdG90eXBlLndhcm49ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4x
JiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LG49dC5zdGFja1RyYWNlLHI9
dm9pZCAwIT09biYmbgordGhpcy5za2lwcGVkKG8uV2Fybil8fCh0aGlzLmNvbnNvbGUud2Fybihl
KSxyJiZ0aGlzLmNvbnNvbGUudHJhY2UoKSl9LGUucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKGUp
e3RoaXMuc2tpcHBlZChvLkVycm9yKXx8dGhpcy5jb25zb2xlLmVycm9yKGUpfSxlfSgpLGg9InVu
ZGVmaW5lZCI9PXR5cGVvZiBjb25zb2xlP25ldyBjOmNvbnNvbGUKK3A9bmV3IGYoe2NvbnNvbGU6
aCxsZXZlbDpvLlRyYWNlfSkKK3ZhciBkPW8uV2FybixtPW5ldyBmKHtjb25zb2xlOmgsbGV2ZWw6
ZH0pLGc9T2JqZWN0LmtleXMseT0wLHY9T2JqZWN0LmNyZWF0ZShudWxsLHtjb25zdHJ1Y3Rvcjp7
dmFsdWU6dm9pZCAwLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITB9fSkKK3IucHJvdG90eXBlPXYK
K3ZhciBiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuZGljdD1pKCl9cmV0dXJuIGUucHJv
dG90eXBlLmFkZD1mdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/dGhpcy5kaWN0
W2VdPWU6dGhpcy5kaWN0W24oZSldPWUsdGhpc30sZS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9u
KGUpeyJzdHJpbmciPT10eXBlb2YgZT9kZWxldGUgdGhpcy5kaWN0W2VdOmUuX2d1aWQmJmRlbGV0
ZSB0aGlzLmRpY3RbZS5fZ3VpZF19LGUucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSl7dmFy
IHQ9dGhpcy5kaWN0CitPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiBl
KHRbbl0pfSl9LGUucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0Lmtl
eXModGhpcy5kaWN0KX0sZX0oKSxfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuc3RhY2s9
W10sdGhpcy5jdXJyZW50PW51bGx9cmV0dXJuIGUucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24o
KXtyZXR1cm4gdGhpcy5zdGFja30sZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlKXt0aGlzLmN1
cnJlbnQ9ZSx0aGlzLnN0YWNrLnB1c2goZSl9LGUucHJvdG90eXBlLnBvcD1mdW5jdGlvbigpe3Zh
ciBlPXRoaXMuc3RhY2sucG9wKCksdD10aGlzLnN0YWNrLmxlbmd0aAorcmV0dXJuIHRoaXMuY3Vy
cmVudD0wPT09dD9udWxsOnRoaXMuc3RhY2tbdC0xXSx2b2lkIDA9PT1lP251bGw6ZX0sZS5wcm90
b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5zdGFjay5sZW5ndGh9LGV9
KCksdz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmNsZWFyKCl9cmV0dXJuIGUuZnJvbVNs
aWNlPWZ1bmN0aW9uKHQpe3ZhciBuPW5ldyBlCityZXR1cm4gdC5mb3JFYWNoTm9kZShmdW5jdGlv
bihlKXtyZXR1cm4gbi5hcHBlbmQoZS5jbG9uZSgpKX0pLG59LGUucHJvdG90eXBlLmhlYWQ9ZnVu
Y3Rpb24oKXtyZXR1cm4gdGhpcy5faGVhZH0sZS5wcm90b3R5cGUudGFpbD1mdW5jdGlvbigpe3Jl
dHVybiB0aGlzLl90YWlsfSxlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX2hlYWQ9
dGhpcy5fdGFpbD1udWxsfSxlLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIG51
bGw9PT10aGlzLl9oZWFkfSxlLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7dmFyIGU9W10K
K3JldHVybiB0aGlzLmZvckVhY2hOb2RlKGZ1bmN0aW9uKHQpe3JldHVybiBlLnB1c2godCl9KSxl
fSxlLnByb3RvdHlwZS5zcGxpY2U9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXZvaWQgMAorbnVsbD09
PW4/KHI9dGhpcy5fdGFpbCx0aGlzLl90YWlsPXQpOihyPW4ucHJldix0Lm5leHQ9bixuLnByZXY9
dCksciYmKHIubmV4dD1lLGUucHJldj1yKX0sZS5wcm90b3R5cGUubmV4dE5vZGU9ZnVuY3Rpb24o
ZSl7cmV0dXJuIGUubmV4dH0sZS5wcm90b3R5cGUucHJldk5vZGU9ZnVuY3Rpb24oZSl7cmV0dXJu
IGUucHJldn0sZS5wcm90b3R5cGUuZm9yRWFjaE5vZGU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRo
aXMuX2hlYWQ7bnVsbCE9PXQ7KWUodCksdD10Lm5leHR9LGUucHJvdG90eXBlLmNvbnRhaW5zPWZ1
bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLl9oZWFkO251bGwhPT10Oyl7aWYodD09PWUpcmV0dXJu
ITAKK3Q9dC5uZXh0fXJldHVybiExfSxlLnByb3RvdHlwZS5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24o
ZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1l
bnRzWzFdOm51bGwKK3JldHVybiBudWxsPT09dD90aGlzLmFwcGVuZChlKToodC5wcmV2P3QucHJl
di5uZXh0PWU6dGhpcy5faGVhZD1lLGUucHJldj10LnByZXYsZS5uZXh0PXQsdC5wcmV2PWUsZSl9
LGUucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl90YWlsCityZXR1cm4g
dD8odC5uZXh0PWUsZS5wcmV2PXQsZS5uZXh0PW51bGwpOnRoaXMuX2hlYWQ9ZSx0aGlzLl90YWls
PWV9LGUucHJvdG90eXBlLnBvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90YWlsP3RoaXMucmVt
b3ZlKHRoaXMuX3RhaWwpOm51bGx9LGUucHJvdG90eXBlLnByZXBlbmQ9ZnVuY3Rpb24oZSl7cmV0
dXJuIHRoaXMuX2hlYWQ/dGhpcy5pbnNlcnRCZWZvcmUoZSx0aGlzLl9oZWFkKTp0aGlzLl9oZWFk
PXRoaXMuX3RhaWw9ZX0sZS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGUpe3JldHVybiBlLnBy
ZXY/ZS5wcmV2Lm5leHQ9ZS5uZXh0OnRoaXMuX2hlYWQ9ZS5uZXh0LGUubmV4dD9lLm5leHQucHJl
dj1lLnByZXY6dGhpcy5fdGFpbD1lLnByZXYsZX0sZX0oKSxFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24g
ZShlLHQpe3RoaXMuX2hlYWQ9ZSx0aGlzLl90YWlsPXR9cmV0dXJuIGUudG9MaXN0PWZ1bmN0aW9u
KGUpe3ZhciB0PW5ldyB3CityZXR1cm4gZS5mb3JFYWNoTm9kZShmdW5jdGlvbihlKXtyZXR1cm4g
dC5hcHBlbmQoZS5jbG9uZSgpKX0pLHR9LGUucHJvdG90eXBlLmZvckVhY2hOb2RlPWZ1bmN0aW9u
KGUpe2Zvcih2YXIgdD10aGlzLl9oZWFkO251bGwhPT10OyllKHQpLHQ9dGhpcy5uZXh0Tm9kZSh0
KX0sZS5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuX2hlYWQ7
bnVsbCE9PXQ7KXtpZih0PT09ZSlyZXR1cm4hMAordD10Lm5leHR9cmV0dXJuITF9LGUucHJvdG90
eXBlLmhlYWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGVhZH0sZS5wcm90b3R5cGUudGFpbD1m
dW5jdGlvbigpe3JldHVybiB0aGlzLl90YWlsfSxlLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9u
KCl7dmFyIGU9W10KK3JldHVybiB0aGlzLmZvckVhY2hOb2RlKGZ1bmN0aW9uKHQpe3JldHVybiBl
LnB1c2godCl9KSxlfSxlLnByb3RvdHlwZS5uZXh0Tm9kZT1mdW5jdGlvbihlKXtyZXR1cm4gZT09
PXRoaXMuX3RhaWw/bnVsbDplLm5leHR9LGUucHJvdG90eXBlLnByZXZOb2RlPWZ1bmN0aW9uKGUp
e3JldHVybiBlPT09dGhpcy5faGVhZD9udWxsOmUucHJldn0sZS5wcm90b3R5cGUuaXNFbXB0eT1m
dW5jdGlvbigpe3JldHVybiExfSxlfSgpLHg9bmV3IEUobnVsbCxudWxsKSxDPSJ1bmRlZmluZWQi
IT10eXBlb2YgVWludDMyQXJyYXksTz12b2lkIDAKK089Qz9VaW50MzJBcnJheTpBcnJheQordmFy
IEE9TyxUPWZ1bmN0aW9uKCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFdlYWtNYXApcmV0dXJuITEK
K3ZhciBlPW5ldyBXZWFrTWFwCityZXR1cm4iW29iamVjdCBXZWFrTWFwXSI9PT1PYmplY3QucHJv
dG90eXBlLnRvU3RyaW5nLmNhbGwoZSl9KCkKK2UuZ2V0QXR0ck5hbWVzcGFjZT1mdW5jdGlvbihl
KXtyZXR1cm4gbFtlXXx8bnVsbH0sZS5hc3NlcnQ9ZnVuY3Rpb24oZSx0KXtpZighZSl0aHJvdyBu
ZXcgRXJyb3IodHx8ImFzc2VydGlvbiBmYWlsdXJlIil9LGUuTE9HR0VSPW0sZS5Mb2dnZXI9Zixl
LkxvZ0xldmVsPW8sZS5hc3NpZ249ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbworZm9yKHQ9MTt0
PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWlmKG51bGwhPT0obj1hcmd1bWVudHNbdF0pJiYib2JqZWN0
Ij09dHlwZW9mIG4pZm9yKHI9ZyhuKSxpPTA7aTxyLmxlbmd0aDtpKyspbz1yW2ldLGVbb109bltv
XQorcmV0dXJuIGV9LGUuZmlsbE51bGxzPWZ1bmN0aW9uKGUpe3ZhciB0LG49bmV3IEFycmF5KGUp
Citmb3IodD0wO3Q8ZTt0Kyspblt0XT1udWxsCityZXR1cm4gbn0sZS5lbnN1cmVHdWlkPW4sZS5p
bml0aWFsaXplR3VpZD10LGUuU3RhY2s9XyxlLkRpY3RTZXQ9YixlLmRpY3Q9aSxlLkVNUFRZX1NM
SUNFPXgsZS5MaW5rZWRMaXN0PXcsZS5MaXN0Tm9kZT1mdW5jdGlvbihlKXt0aGlzLm5leHQ9bnVs
bCx0aGlzLnByZXY9bnVsbCx0aGlzLnZhbHVlPWV9LGUuTGlzdFNsaWNlPUUsZS5BPUEsZS5IQVNf
TkFUSVZFX1dFQUtNQVA9VCxlLnVud3JhcD1mdW5jdGlvbihlKXtpZihudWxsPT09ZXx8dm9pZCAw
PT09ZSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHZhbHVlIHRvIGJlIHByZXNlbnQiKQorcmV0
dXJuIGV9LGUuZXhwZWN0PWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09PWV8fHZvaWQgMD09PWUpdGhy
b3cgbmV3IEVycm9yKHQpCityZXR1cm4gZX0sZS51bnJlYWNoYWJsZT1mdW5jdGlvbigpe3JldHVy
biBuZXcgRXJyb3IoInVucmVhY2hhYmxlIil9fSksZSgiQGdsaW1tZXIvd2lyZS1mb3JtYXQiLFsi
ZXhwb3J0cyJdLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IgorZnVuY3Rpb24gdChlKXtyZXR1cm4g
ZnVuY3Rpb24odCl7cmV0dXJuIHRbMF09PT1lfX12YXIgbjsoZnVuY3Rpb24oZSl7ZVtlLlRleHQ9
MF09IlRleHQiLGVbZS5BcHBlbmQ9MV09IkFwcGVuZCIsZVtlLlVub3B0aW1pemVkQXBwZW5kPTJd
PSJVbm9wdGltaXplZEFwcGVuZCIsZVtlLk9wdGltaXplZEFwcGVuZD0zXT0iT3B0aW1pemVkQXBw
ZW5kIixlW2UuQ29tbWVudD00XT0iQ29tbWVudCIsZVtlLk1vZGlmaWVyPTVdPSJNb2RpZmllciIs
ZVtlLkJsb2NrPTZdPSJCbG9jayIsZVtlLlNjYW5uZWRCbG9jaz03XT0iU2Nhbm5lZEJsb2NrIixl
W2UuTmVzdGVkQmxvY2s9OF09Ik5lc3RlZEJsb2NrIixlW2UuQ29tcG9uZW50PTldPSJDb21wb25l
bnQiLGVbZS5TY2FubmVkQ29tcG9uZW50PTEwXT0iU2Nhbm5lZENvbXBvbmVudCIsZVtlLk9wZW5F
bGVtZW50PTExXT0iT3BlbkVsZW1lbnQiLGVbZS5PcGVuUHJpbWl0aXZlRWxlbWVudD0xMl09Ik9w
ZW5QcmltaXRpdmVFbGVtZW50IixlW2UuRmx1c2hFbGVtZW50PTEzXT0iRmx1c2hFbGVtZW50Iixl
W2UuQ2xvc2VFbGVtZW50PTE0XT0iQ2xvc2VFbGVtZW50IixlW2UuU3RhdGljQXR0cj0xNV09IlN0
YXRpY0F0dHIiLGVbZS5EeW5hbWljQXR0cj0xNl09IkR5bmFtaWNBdHRyIixlW2UuQW55RHluYW1p
Y0F0dHI9MTddPSJBbnlEeW5hbWljQXR0ciIsZVtlLllpZWxkPTE4XT0iWWllbGQiLGVbZS5QYXJ0
aWFsPTE5XT0iUGFydGlhbCIsZVtlLlN0YXRpY1BhcnRpYWw9MjBdPSJTdGF0aWNQYXJ0aWFsIixl
W2UuRHluYW1pY1BhcnRpYWw9MjFdPSJEeW5hbWljUGFydGlhbCIsZVtlLkR5bmFtaWNBcmc9MjJd
PSJEeW5hbWljQXJnIixlW2UuU3RhdGljQXJnPTIzXT0iU3RhdGljQXJnIixlW2UuVHJ1c3RpbmdB
dHRyPTI0XT0iVHJ1c3RpbmdBdHRyIixlW2UuRGVidWdnZXI9MjVdPSJEZWJ1Z2dlciIsZVtlLlVu
a25vd249MjZdPSJVbmtub3duIixlW2UuQXJnPTI3XT0iQXJnIixlW2UuR2V0PTI4XT0iR2V0Iixl
W2UuSGFzQmxvY2s9MjldPSJIYXNCbG9jayIKK2VbZS5IYXNCbG9ja1BhcmFtcz0zMF09Ikhhc0Js
b2NrUGFyYW1zIixlW2UuVW5kZWZpbmVkPTMxXT0iVW5kZWZpbmVkIixlW2UuRnVuY3Rpb249MzJd
PSJGdW5jdGlvbiIsZVtlLkhlbHBlcj0zM109IkhlbHBlciIsZVtlLkNvbmNhdD0zNF09IkNvbmNh
dCJ9KShufHwoZS5PcHM9bj17fSkpCit2YXIgcjsoZnVuY3Rpb24oZSl7ZS5pc1Vua25vd249dChu
LlVua25vd24pLGUuaXNBcmc9dChuLkFyZyksZS5pc0dldD10KG4uR2V0KSxlLmlzQ29uY2F0PXQo
bi5Db25jYXQpLGUuaXNIZWxwZXI9dChuLkhlbHBlciksZS5pc0hhc0Jsb2NrPXQobi5IYXNCbG9j
ayksZS5pc0hhc0Jsb2NrUGFyYW1zPXQobi5IYXNCbG9ja1BhcmFtcyksZS5pc1VuZGVmaW5lZD10
KG4uVW5kZWZpbmVkKSxlLmlzUHJpbWl0aXZlVmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9
PT1lfHwib2JqZWN0IiE9dHlwZW9mIGV9fSkocnx8KGUuRXhwcmVzc2lvbnM9cj17fSkpCit2YXIg
aTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZVswXT09PW4uU3RhdGljQXR0cnx8
ZVswXT09PW4uRHluYW1pY0F0dHJ9ZnVuY3Rpb24gaShlKXtyZXR1cm4gZVswXT09PW4uU3RhdGlj
QXJnfHxlWzBdPT09bi5EeW5hbWljQXJnfWUuaXNUZXh0PXQobi5UZXh0KSxlLmlzQXBwZW5kPXQo
bi5BcHBlbmQpLGUuaXNDb21tZW50PXQobi5Db21tZW50KSxlLmlzTW9kaWZpZXI9dChuLk1vZGlm
aWVyKSxlLmlzQmxvY2s9dChuLkJsb2NrKSxlLmlzQ29tcG9uZW50PXQobi5Db21wb25lbnQpLGUu
aXNPcGVuRWxlbWVudD10KG4uT3BlbkVsZW1lbnQpLGUuaXNGbHVzaEVsZW1lbnQ9dChuLkZsdXNo
RWxlbWVudCksZS5pc0Nsb3NlRWxlbWVudD10KG4uQ2xvc2VFbGVtZW50KSxlLmlzU3RhdGljQXR0
cj10KG4uU3RhdGljQXR0ciksZS5pc0R5bmFtaWNBdHRyPXQobi5EeW5hbWljQXR0ciksZS5pc1lp
ZWxkPXQobi5ZaWVsZCksZS5pc1BhcnRpYWw9dChuLlBhcnRpYWwpLGUuaXNEeW5hbWljQXJnPXQo
bi5EeW5hbWljQXJnKSxlLmlzU3RhdGljQXJnPXQobi5TdGF0aWNBcmcpLGUuaXNUcnVzdGluZ0F0
dHI9dChuLlRydXN0aW5nQXR0ciksZS5pc0RlYnVnZ2VyPXQobi5EZWJ1Z2dlciksZS5pc0F0dHJp
YnV0ZT1yLGUuaXNBcmd1bWVudD1pLGUuaXNQYXJhbWV0ZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHIo
ZSl8fGkoZSl9LGUuZ2V0UGFyYW1ldGVyTmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gZVsxXX19KShp
fHwoZS5TdGF0ZW1lbnRzPWk9e30pKSxlLmlzPXQsZS5FeHByZXNzaW9ucz1yLGUuU3RhdGVtZW50
cz1pLGUuT3BzPW59KSxlKCJiYWNrYnVybmVyIixbImV4cG9ydHMiXSxmdW5jdGlvbihlKXsidXNl
IHN0cmljdCIKK2Z1bmN0aW9uIHQoZSx0KXt2YXIgbgorZm9yKG49MDtuPGUubGVuZ3RoO24rKyl0
KGVbbl0pfWZ1bmN0aW9uIG4oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlfWZ1bmN0aW9uIHIo
ZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGV9ZnVuY3Rpb24gaShlKXtyZXR1cm4ibnVtYmVy
Ij09dHlwZW9mIGV9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gaShlKXx8aC50ZXN0KGUpfWZ1bmN0aW9u
IHMoZSl7dGhyb3cgbmV3IEVycm9yKCJZb3UgYXR0ZW1wdGVkIHRvIHNjaGVkdWxlIGFuIGFjdGlv
biBpbiBhIHF1ZXVlICgiK2UrIikgdGhhdCBkb2Vzbid0IGV4aXN0Iil9ZnVuY3Rpb24gYShlKXt0
aHJvdyBuZXcgRXJyb3IoIllvdSBhdHRlbXB0ZWQgdG8gc2NoZWR1bGUgYW4gYWN0aW9uIGluIGEg
cXVldWUgKCIrZSsiKSBmb3IgYSBtZXRob2QgdGhhdCBkb2Vzbid0IGV4aXN0Iil9ZnVuY3Rpb24g
dShlKXtyZXR1cm4gZS5vbkVycm9yfHxlLm9uRXJyb3JUYXJnZXQmJmUub25FcnJvclRhcmdldFtl
Lm9uRXJyb3JNZXRob2RdfWZ1bmN0aW9uIGwoZSx0LG4pe3JldHVybiBwKGUsdCxuKX1mdW5jdGlv
biBjKGUsdCxuKXtyZXR1cm4gcChlLHQsbil9ZnVuY3Rpb24gcChlLHQsbil7dmFyIHIsaSxvPXZv
aWQgMCxzPS0xCitmb3Iocj0wLGk9bi5sZW5ndGg7cjxpO3IrKylpZihvPW5bcl0sb1swXT09PWUm
Jm9bMV09PT10KXtzPXIKK2JyZWFrfXJldHVybiBzfWZ1bmN0aW9uIGYoZSx0KXtmb3IodmFyIG49
MCxyPXQubGVuZ3RoLTIsaT12b2lkIDAsbz12b2lkIDA7bjxyOylvPShyLW4pLzIsaT1uK28tbyUy
LGU+PXRbaV0/bj1pKzI6cj1pCityZXR1cm4gZT49dFtuXT9uKzI6bn12YXIgaD0vXGQrLyxkPURh
dGUubm93LG09ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt0aGlzLm5hbWU9ZSx0aGlzLmds
b2JhbE9wdGlvbnM9bnx8e30sdGhpcy5vcHRpb25zPXQsdGhpcy5fcXVldWU9W10sdGhpcy50YXJn
ZXRRdWV1ZXM9e30sdGhpcy5fcXVldWVCZWluZ0ZsdXNoZWQ9dm9pZCAwfXJldHVybiBlLnByb3Rv
dHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLl9xdWV1ZS5wdXNoKGUsdCxu
LHIpLHtxdWV1ZTp0aGlzLHRhcmdldDplLG1ldGhvZDp0fX0sZS5wcm90b3R5cGUucHVzaFVuaXF1
ZT1mdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvPXRoaXMuZ2xvYmFsT3B0aW9ucy5HVUlEX0tFWQor
cmV0dXJuIGUmJm8mJihpPWVbb10pP3RoaXMucHVzaFVuaXF1ZVdpdGhHdWlkKGksZSx0LG4scik6
KHRoaXMucHVzaFVuaXF1ZVdpdGhvdXRHdWlkKGUsdCxuLHIpLHtxdWV1ZTp0aGlzLHRhcmdldDpl
LG1ldGhvZDp0fSl9LGUucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKGUpe3ZhciB0LHI9dGhpcy5f
cXVldWUsaT1yLmxlbmd0aAoraWYoMCE9PWkpe3ZhciBvPXRoaXMuZ2xvYmFsT3B0aW9ucyxzPXRo
aXMub3B0aW9ucyxhPXMmJnMuYmVmb3JlLHU9cyYmcy5hZnRlcixsPW8ub25FcnJvcnx8by5vbkVy
cm9yVGFyZ2V0JiZvLm9uRXJyb3JUYXJnZXRbby5vbkVycm9yTWV0aG9kXSxjPXZvaWQgMCxwPXZv
aWQgMCxmPXZvaWQgMCxoPXZvaWQgMCxkPWw/dGhpcy5pbnZva2VXaXRoT25FcnJvcjp0aGlzLmlu
dm9rZQordGhpcy50YXJnZXRRdWV1ZXM9T2JqZWN0LmNyZWF0ZShudWxsKQordmFyIG09dGhpcy5f
cXVldWVCZWluZ0ZsdXNoZWQ9dGhpcy5fcXVldWUKK2Zvcih0aGlzLl9xdWV1ZT1bXSxhJiZhKCks
dD0wO3Q8aTt0Kz00KWM9bVt0XSxwPW1bdCsxXSxmPW1bdCsyXSxoPW1bdCszXSxuKHApJiYocD1j
W3BdKSxwJiZkKGMscCxmLGwsaCkKK3UmJnUoKSx0aGlzLl9xdWV1ZUJlaW5nRmx1c2hlZD12b2lk
IDAsITEhPT1lJiZ0aGlzLl9xdWV1ZS5sZW5ndGg+MCYmdGhpcy5mbHVzaCghMCl9fSxlLnByb3Rv
dHlwZS5jYW5jZWw9ZnVuY3Rpb24oZSl7dmFyIHQsbj10aGlzLl9xdWV1ZSxyPXZvaWQgMCxpPXZv
aWQgMCxvPXZvaWQgMCxzPXZvaWQgMCxhPWUudGFyZ2V0LHU9ZS5tZXRob2QsbD10aGlzLmdsb2Jh
bE9wdGlvbnMuR1VJRF9LRVkKK2lmKGwmJnRoaXMudGFyZ2V0UXVldWVzJiZhJiYodD10aGlzLnRh
cmdldFF1ZXVlc1thW2xdXSkpZm9yKG89MCxzPXQubGVuZ3RoO288cztvKyspdFtvXT09PXUmJnQu
c3BsaWNlKG8sMSkKK2ZvcihvPTAscz1uLmxlbmd0aDtvPHM7bys9NClpZihyPW5bb10saT1uW28r
MV0scj09PWEmJmk9PT11KXJldHVybiBuLnNwbGljZShvLDQpLCEwCitpZihuPXRoaXMuX3F1ZXVl
QmVpbmdGbHVzaGVkKWZvcihvPTAscz1uLmxlbmd0aDtvPHM7bys9NClpZihyPW5bb10saT1uW28r
MV0scj09PWEmJmk9PT11KXJldHVybiBuW28rMV09bnVsbCwhMH0sZS5wcm90b3R5cGUucHVzaFVu
aXF1ZVdpdGhvdXRHdWlkPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8scyxhLHU9dGhpcy5fcXVl
dWUKK2ZvcihpPTAsbz11Lmxlbmd0aDtpPG87aSs9NClpZihzPXVbaV0sYT11W2krMV0scz09PWUm
JmE9PT10KXJldHVybiB1W2krMl09bix2b2lkKHVbaSszXT1yKQordS5wdXNoKGUsdCxuLHIpfSxl
LnByb3RvdHlwZS50YXJnZXRRdWV1ZT1mdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvLHMsYSx1LGw9
dGhpcy5fcXVldWUKK2ZvcihvPTAscz1lLmxlbmd0aDtvPHM7bys9MilpZihhPWVbb10sdT1lW28r
MV0sYT09PW4pcmV0dXJuIGxbdSsyXT1yLHZvaWQobFt1KzNdPWkpCitlLnB1c2gobixsLnB1c2go
dCxuLHIsaSktNCl9LGUucHJvdG90eXBlLnB1c2hVbmlxdWVXaXRoR3VpZD1mdW5jdGlvbihlLHQs
bixyLGkpe3ZhciBvPXRoaXMudGFyZ2V0UXVldWVzW2VdCityZXR1cm4gbz90aGlzLnRhcmdldFF1
ZXVlKG8sdCxuLHIsaSk6dGhpcy50YXJnZXRRdWV1ZXNbZV09W24sdGhpcy5fcXVldWUucHVzaCh0
LG4scixpKS00XSx7cXVldWU6dGhpcyx0YXJnZXQ6dCxtZXRob2Q6bn19LGUucHJvdG90eXBlLmlu
dm9rZT1mdW5jdGlvbihlLHQsbil7biYmbi5sZW5ndGg+MD90LmFwcGx5KGUsbik6dC5jYWxsKGUp
fSxlLnByb3RvdHlwZS5pbnZva2VXaXRoT25FcnJvcj1mdW5jdGlvbihlLHQsbixyLGkpe3RyeXtu
JiZuLmxlbmd0aD4wP3QuYXBwbHkoZSxuKTp0LmNhbGwoZSl9Y2F0Y2goZSl7cihlLGkpfX0sZX0o
KSxnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXRoaXMucXVldWVzPXt9Cit0aGlz
LnF1ZXVlTmFtZXM9ZT1lfHxbXSx0aGlzLm9wdGlvbnM9bix0KGUsZnVuY3Rpb24oZSl7cltlXT1u
ZXcgbShlLG5bZV0sbil9KX1yZXR1cm4gZS5wcm90b3R5cGUuc2NoZWR1bGU9ZnVuY3Rpb24oZSx0
LG4scixpLG8pe3ZhciB1PXRoaXMucXVldWVzLGw9dVtlXQorcmV0dXJuIGx8fHMoZSksbnx8YShl
KSxpP2wucHVzaFVuaXF1ZSh0LG4scixvKTpsLnB1c2godCxuLHIsbyl9LGUucHJvdG90eXBlLmZs
dXNoPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXZvaWQgMCx0PXZvaWQgMCxuPTAscj10aGlzLnF1ZXVl
TmFtZXMubGVuZ3RoO248cjspdD10aGlzLnF1ZXVlTmFtZXNbbl0sZT10aGlzLnF1ZXVlc1t0XSww
PT09ZS5fcXVldWUubGVuZ3RoP24rKzooZS5mbHVzaCghMSksbj0wKX0sZX0oKSx5PWZ1bmN0aW9u
KCl7ZnVuY3Rpb24gZShlLHQpe3ZhciBuPXRoaXMKK3RoaXMuREVCVUc9ITEsdGhpcy5fYXV0b3J1
bj1udWxsLHRoaXMucXVldWVOYW1lcz1lLHRoaXMub3B0aW9ucz10fHx7fSx0aGlzLm9wdGlvbnMu
ZGVmYXVsdFF1ZXVlfHwodGhpcy5vcHRpb25zLmRlZmF1bHRRdWV1ZT1lWzBdKSx0aGlzLmN1cnJl
bnRJbnN0YW5jZT1udWxsLHRoaXMuaW5zdGFuY2VTdGFjaz1bXSx0aGlzLl9kZWJvdW5jZWVzPVtd
LHRoaXMuX3Rocm90dGxlcnM9W10sdGhpcy5fZXZlbnRDYWxsYmFja3M9e2VuZDpbXSxiZWdpbjpb
XX0sdGhpcy5fYm91bmRDbGVhckl0ZW1zPWZ1bmN0aW9uKGUpe24uX3BsYXRmb3JtLmNsZWFyVGlt
ZW91dChlWzJdKX0sdGhpcy5fdGltZXJUaW1lb3V0SWQ9dm9pZCAwLHRoaXMuX3RpbWVycz1bXSx0
aGlzLl9wbGF0Zm9ybT10aGlzLm9wdGlvbnMuX3BsYXRmb3JtfHx7c2V0VGltZW91dDpmdW5jdGlv
bihlLHQpe3JldHVybiBzZXRUaW1lb3V0KGUsdCl9LGNsZWFyVGltZW91dDpmdW5jdGlvbihlKXtj
bGVhclRpbWVvdXQoZSl9fSx0aGlzLl9ib3VuZFJ1bkV4cGlyZWRUaW1lcnM9ZnVuY3Rpb24oKXtu
Ll9ydW5FeHBpcmVkVGltZXJzKCl9LHRoaXMuX2JvdW5kQXV0b3J1bkVuZD1mdW5jdGlvbigpe24u
X2F1dG9ydW49bnVsbCxuLmVuZCgpfX1yZXR1cm4gZS5wcm90b3R5cGUuYmVnaW49ZnVuY3Rpb24o
KXt2YXIgZT10aGlzLm9wdGlvbnMsdD1lJiZlLm9uQmVnaW4sbj10aGlzLmN1cnJlbnRJbnN0YW5j
ZQorbiYmdGhpcy5pbnN0YW5jZVN0YWNrLnB1c2gobikKK3ZhciByPXRoaXMuY3VycmVudEluc3Rh
bmNlPW5ldyBnKHRoaXMucXVldWVOYW1lcyxlKQorcmV0dXJuIHRoaXMuX3RyaWdnZXIoImJlZ2lu
IixyLG4pLHQmJnQocixuKSxyfSxlLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlz
Lm9wdGlvbnMsdD1lJiZlLm9uRW5kLG49dGhpcy5jdXJyZW50SW5zdGFuY2Uscj1udWxsCitpZigh
bil0aHJvdyBuZXcgRXJyb3IoImVuZCBjYWxsZWQgd2l0aG91dCBiZWdpbiIpCit2YXIgaT0hMQor
dHJ5e24uZmx1c2goKX1maW5hbGx5e2l8fChpPSEwLHRoaXMuY3VycmVudEluc3RhbmNlPW51bGws
dGhpcy5pbnN0YW5jZVN0YWNrLmxlbmd0aCYmKHI9dGhpcy5pbnN0YW5jZVN0YWNrLnBvcCgpLHRo
aXMuY3VycmVudEluc3RhbmNlPXIpLHRoaXMuX3RyaWdnZXIoImVuZCIsbixyKSx0JiZ0KG4scikp
fX0sZS5wcm90b3R5cGUub249ZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0
aHJvdyBuZXcgVHlwZUVycm9yKCJDYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24iKQordmFyIG49
dGhpcy5fZXZlbnRDYWxsYmFja3NbZV0KK2lmKCFuKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5v
dCBvbigpIGV2ZW50ICIrZSsiIGJlY2F1c2UgaXQgZG9lcyBub3QgZXhpc3QiKQorbi5wdXNoKHQp
fSxlLnByb3RvdHlwZS5vZmY9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGkKK2lmKCFlKXRocm93IG5l
dyBUeXBlRXJyb3IoIkNhbm5vdCBvZmYoKSBldmVudCAiK2UrIiBiZWNhdXNlIGl0IGRvZXMgbm90
IGV4aXN0IikKK2lmKG49dGhpcy5fZXZlbnRDYWxsYmFja3NbZV0scj0hMSxuKXtpZih0KWZvcihp
PTA7aTxuLmxlbmd0aDtpKyspbltpXT09PXQmJihyPSEwLG4uc3BsaWNlKGksMSksaS0tKQoraWYo
IXIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IG9mZigpIGNhbGxiYWNrIHRoYXQgZG9lcyBu
b3QgZXhpc3QiKX19LGUucHJvdG90eXBlLnJ1bj1mdW5jdGlvbihlLHQpe2ZvcihyPWFyZ3VtZW50
cy5sZW5ndGgsaT1BcnJheShyPjI/ci0yOjApLG89MjtvPHI7bysrKWlbby0yXT1hcmd1bWVudHNb
b10KK3ZhciByLGksbyxzPWFyZ3VtZW50cy5sZW5ndGgsYT12b2lkIDAsbD12b2lkIDAKKzE9PT1z
PyhhPWUsbD1udWxsKToobD1lLGE9dCksbihhKSYmKGE9bFthXSkKK3ZhciBjPXUodGhpcy5vcHRp
b25zKQoraWYodGhpcy5iZWdpbigpLGMpdHJ5e3JldHVybiBhLmFwcGx5KGwsaSl9Y2F0Y2goZSl7
YyhlKX1maW5hbGx5e3RoaXMuZW5kKCl9ZWxzZSB0cnl7cmV0dXJuIGEuYXBwbHkobCxpKX1maW5h
bGx5e3RoaXMuZW5kKCl9fSxlLnByb3RvdHlwZS5qb2luPWZ1bmN0aW9uKCl7aWYoIXRoaXMuY3Vy
cmVudEluc3RhbmNlKXJldHVybiB0aGlzLnJ1bi5hcHBseSh0aGlzLGFyZ3VtZW50cykKK3ZhciBl
LHQscj1hcmd1bWVudHMubGVuZ3RoLGk9dm9pZCAwLG89dm9pZCAwCitpZigxPT09cj8oaT1hcmd1
bWVudHNbMF0sbz1udWxsKToobz1hcmd1bWVudHNbMF0saT1hcmd1bWVudHNbMV0pLG4oaSkmJihp
PW9baV0pLDE9PT1yKXJldHVybiBpKCkKK2lmKDI9PT1yKXJldHVybiBpLmNhbGwobykKK2Zvcihl
PW5ldyBBcnJheShyLTIpLHQ9MDt0PHItMjt0KyspZVt0XT1hcmd1bWVudHNbdCsyXQorcmV0dXJu
IGkuYXBwbHkobyxlKX0sZS5wcm90b3R5cGUuZGVmZXI9ZnVuY3Rpb24oZSl7dmFyIHQscj1hcmd1
bWVudHMubGVuZ3RoLGk9dm9pZCAwLG89dm9pZCAwLHM9dm9pZCAwCisyPT09cj8oaT1hcmd1bWVu
dHNbMV0sbz1udWxsKToobz1hcmd1bWVudHNbMV0saT1hcmd1bWVudHNbMl0pLG4oaSkmJihpPW9b
aV0pCit2YXIgYT10aGlzLkRFQlVHP25ldyBFcnJvcjp2b2lkIDAKK2lmKHI+Mylmb3Iocz1uZXcg
QXJyYXkoci0zKSx0PTM7dDxyO3QrKylzW3QtM109YXJndW1lbnRzW3RdCitlbHNlIHM9dm9pZCAw
CityZXR1cm4gdGhpcy5fZW5zdXJlSW5zdGFuY2UoKS5zY2hlZHVsZShlLG8saSxzLCExLGEpfSxl
LnByb3RvdHlwZS5kZWZlck9uY2U9ZnVuY3Rpb24oZSl7dmFyIHQscj1hcmd1bWVudHMubGVuZ3Ro
LGk9dm9pZCAwLG89dm9pZCAwLHM9dm9pZCAwCisyPT09cj8oaT1hcmd1bWVudHNbMV0sbz1udWxs
KToobz1hcmd1bWVudHNbMV0saT1hcmd1bWVudHNbMl0pLG4oaSkmJihpPW9baV0pCit2YXIgYT10
aGlzLkRFQlVHP25ldyBFcnJvcjp2b2lkIDAKK2lmKHI+Mylmb3Iocz1uZXcgQXJyYXkoci0zKSx0
PTM7dDxyO3QrKylzW3QtM109YXJndW1lbnRzW3RdCitlbHNlIHM9dm9pZCAwCityZXR1cm4gdGhp
cy5fZW5zdXJlSW5zdGFuY2UoKS5zY2hlZHVsZShlLG8saSxzLCEwLGEpfSxlLnByb3RvdHlwZS5z
ZXRUaW1lb3V0PWZ1bmN0aW9uKCl7dmFyIGUsdCxpPWFyZ3VtZW50cy5sZW5ndGgscz1uZXcgQXJy
YXkoaSkKK2ZvcihlPTA7ZTxpO2UrKylzW2VdPWFyZ3VtZW50c1tlXQordmFyIGE9cy5sZW5ndGgs
bD12b2lkIDAsYz12b2lkIDAscD12b2lkIDAsZj12b2lkIDAsaD12b2lkIDAsbT12b2lkIDAKK2lm
KDAhPT1hKXsxPT09YT8obD1zLnNoaWZ0KCksYz0wKToyPT09YT8oZj1zWzBdLGg9c1sxXSxyKGgp
fHxyKGZbaF0pPyhwPXMuc2hpZnQoKSxsPXMuc2hpZnQoKSxjPTApOm8oaCk/KGw9cy5zaGlmdCgp
LGM9cy5zaGlmdCgpKToobD1zLnNoaWZ0KCksYz0wKSk6KHQ9c1tzLmxlbmd0aC0xXSxjPW8odCk/
cy5wb3AoKTowLGY9c1swXSxtPXNbMV0scihtKXx8bihtKSYmbnVsbCE9PWYmJm0gaW4gZj8ocD1z
LnNoaWZ0KCksbD1zLnNoaWZ0KCkpOmw9cy5zaGlmdCgpKQordmFyIGc9ZCgpK3BhcnNlSW50KGMh
PT1jPzA6YywxMCkKK24obCkmJihsPXBbbF0pCit2YXIgeT11KHRoaXMub3B0aW9ucykKK3JldHVy
biB0aGlzLl9zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYoeSl0cnl7bC5hcHBseShwLHMpfWNhdGNo
KGUpe3koZSl9ZWxzZSBsLmFwcGx5KHAscyl9LGcpfX0sZS5wcm90b3R5cGUudGhyb3R0bGU9ZnVu
Y3Rpb24oZSx0KXt2YXIgcixvPXRoaXMscz1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCkKK2Zv
cihyPTA7cjxhcmd1bWVudHMubGVuZ3RoO3IrKylzW3JdPWFyZ3VtZW50c1tyXQordmFyIGE9cy5w
b3AoKSx1PXZvaWQgMCxsPXZvaWQgMCxwPXZvaWQgMCxmPXZvaWQgMAorcmV0dXJuIGkoYSl8fG4o
YSk/KHU9YSxhPSEwKTp1PXMucG9wKCksdT1wYXJzZUludCh1LDEwKSwocD1jKGUsdCx0aGlzLl90
aHJvdHRsZXJzKSk+LTE/dGhpcy5fdGhyb3R0bGVyc1twXTooZj10aGlzLl9wbGF0Zm9ybS5zZXRU
aW1lb3V0KGZ1bmN0aW9uKCl7YXx8by5ydW4uYXBwbHkobyxzKSwocD1jKGUsdCxvLl90aHJvdHRs
ZXJzKSk+LTEmJm8uX3Rocm90dGxlcnMuc3BsaWNlKHAsMSl9LHUpLGEmJnRoaXMuam9pbi5hcHBs
eSh0aGlzLHMpLGw9W2UsdCxmXSx0aGlzLl90aHJvdHRsZXJzLnB1c2gobCksbCl9LGUucHJvdG90
eXBlLmRlYm91bmNlPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbz10aGlzLHM9bmV3IEFycmF5KGFyZ3Vt
ZW50cy5sZW5ndGgpCitmb3Iocj0wO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspc1tyXT1hcmd1bWVu
dHNbcl0KK3ZhciBhPXMucG9wKCksdT12b2lkIDAsYz12b2lkIDAscD12b2lkIDAsZj12b2lkIDAK
K3JldHVybiBpKGEpfHxuKGEpPyh1PWEsYT0hMSk6dT1zLnBvcCgpLHU9cGFyc2VJbnQodSwxMCks
Yz1sKGUsdCx0aGlzLl9kZWJvdW5jZWVzKSxjPi0xJiYocD10aGlzLl9kZWJvdW5jZWVzW2NdLHRo
aXMuX2RlYm91bmNlZXMuc3BsaWNlKGMsMSksdGhpcy5fcGxhdGZvcm0uY2xlYXJUaW1lb3V0KHBb
Ml0pKSxmPXRoaXMuX3BsYXRmb3JtLnNldFRpbWVvdXQoZnVuY3Rpb24oKXthfHxvLnJ1bi5hcHBs
eShvLHMpLChjPWwoZSx0LG8uX2RlYm91bmNlZXMpKT4tMSYmby5fZGVib3VuY2Vlcy5zcGxpY2Uo
YywxKX0sdSksYSYmLTE9PT1jJiZvLnJ1bi5hcHBseShvLHMpLHA9W2UsdCxmXSxvLl9kZWJvdW5j
ZWVzLnB1c2gocCkscH0sZS5wcm90b3R5cGUuY2FuY2VsVGltZXJzPWZ1bmN0aW9uKCl7dCh0aGlz
Ll90aHJvdHRsZXJzLHRoaXMuX2JvdW5kQ2xlYXJJdGVtcyksdGhpcy5fdGhyb3R0bGVycz1bXSx0
KHRoaXMuX2RlYm91bmNlZXMsdGhpcy5fYm91bmRDbGVhckl0ZW1zKSx0aGlzLl9kZWJvdW5jZWVz
PVtdLHRoaXMuX2NsZWFyVGltZXJUaW1lb3V0KCksdGhpcy5fdGltZXJzPVtdLHRoaXMuX2F1dG9y
dW4mJih0aGlzLl9wbGF0Zm9ybS5jbGVhclRpbWVvdXQodGhpcy5fYXV0b3J1biksdGhpcy5fYXV0
b3J1bj1udWxsKX0sZS5wcm90b3R5cGUuaGFzVGltZXJzPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlz
Ll90aW1lcnMubGVuZ3RofHwhIXRoaXMuX2RlYm91bmNlZXMubGVuZ3RofHwhIXRoaXMuX3Rocm90
dGxlcnMubGVuZ3RofHx0aGlzLl9hdXRvcnVufSxlLnByb3RvdHlwZS5jYW5jZWw9ZnVuY3Rpb24o
ZSl7dmFyIHQsbixyPXR5cGVvZiBlCitpZihlJiYib2JqZWN0Ij09PXImJmUucXVldWUmJmUubWV0
aG9kKXJldHVybiBlLnF1ZXVlLmNhbmNlbChlKQoraWYoImZ1bmN0aW9uIj09PXIpe2Zvcih0PTAs
bj10aGlzLl90aW1lcnMubGVuZ3RoO3Q8bjt0Kz0yKWlmKHRoaXMuX3RpbWVyc1t0KzFdPT09ZSly
ZXR1cm4gdGhpcy5fdGltZXJzLnNwbGljZSh0LDIpLDA9PT10JiZ0aGlzLl9yZWluc3RhbGxUaW1l
clRpbWVvdXQoKSwhMH1lbHNlIGlmKCJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBl
LnRvU3RyaW5nLmNhbGwoZSkpcmV0dXJuIHRoaXMuX2NhbmNlbEl0ZW0oYyx0aGlzLl90aHJvdHRs
ZXJzLGUpfHx0aGlzLl9jYW5jZWxJdGVtKGwsdGhpcy5fZGVib3VuY2VlcyxlKX0sZS5wcm90b3R5
cGUuX3NldFRpbWVvdXQ9ZnVuY3Rpb24oZSx0KXtpZigwPT09dGhpcy5fdGltZXJzLmxlbmd0aCly
ZXR1cm4gdGhpcy5fdGltZXJzLnB1c2godCxlKSx0aGlzLl9pbnN0YWxsVGltZXJUaW1lb3V0KCks
ZQordmFyIG49Zih0LHRoaXMuX3RpbWVycykKK3JldHVybiB0aGlzLl90aW1lcnMuc3BsaWNlKG4s
MCx0LGUpLDA9PT1uJiZ0aGlzLl9yZWluc3RhbGxUaW1lclRpbWVvdXQoKSxlfSxlLnByb3RvdHlw
ZS5fY2FuY2VsSXRlbT1mdW5jdGlvbihlLHQsbil7dmFyIHI9dm9pZCAwLGk9dm9pZCAwCityZXR1
cm4hKG4ubGVuZ3RoPDMpJiYoKGk9ZShuWzBdLG5bMV0sdCkpPi0xJiYocj10W2ldLHJbMl09PT1u
WzJdKSYmKHQuc3BsaWNlKGksMSksdGhpcy5fcGxhdGZvcm0uY2xlYXJUaW1lb3V0KG5bMl0pLCEw
KSl9LGUucHJvdG90eXBlLl90cmlnZ2VyPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPXRoaXMuX2V2
ZW50Q2FsbGJhY2tzW2VdCitpZihpKWZvcihyPTA7cjxpLmxlbmd0aDtyKyspaVtyXSh0LG4pfSxl
LnByb3RvdHlwZS5fcnVuRXhwaXJlZFRpbWVycz1mdW5jdGlvbigpe3RoaXMuX3RpbWVyVGltZW91
dElkPXZvaWQgMCx0aGlzLnJ1bih0aGlzLHRoaXMuX3NjaGVkdWxlRXhwaXJlZFRpbWVycyl9LGUu
cHJvdG90eXBlLl9zY2hlZHVsZUV4cGlyZWRUaW1lcnM9ZnVuY3Rpb24oKXtmb3IodmFyIGUsdCxu
PWQoKSxyPXRoaXMuX3RpbWVycyxpPTAsbz1yLmxlbmd0aDtpPG8mJihlPXJbaV0sdD1yW2krMV0s
ZTw9bik7aSs9Mil0aGlzLmRlZmVyKHRoaXMub3B0aW9ucy5kZWZhdWx0UXVldWUsbnVsbCx0KQor
ci5zcGxpY2UoMCxpKSx0aGlzLl9pbnN0YWxsVGltZXJUaW1lb3V0KCl9LGUucHJvdG90eXBlLl9y
ZWluc3RhbGxUaW1lclRpbWVvdXQ9ZnVuY3Rpb24oKXt0aGlzLl9jbGVhclRpbWVyVGltZW91dCgp
LHRoaXMuX2luc3RhbGxUaW1lclRpbWVvdXQoKX0sZS5wcm90b3R5cGUuX2NsZWFyVGltZXJUaW1l
b3V0PWZ1bmN0aW9uKCl7dGhpcy5fdGltZXJUaW1lb3V0SWQmJih0aGlzLl9wbGF0Zm9ybS5jbGVh
clRpbWVvdXQodGhpcy5fdGltZXJUaW1lb3V0SWQpLHRoaXMuX3RpbWVyVGltZW91dElkPXZvaWQg
MCl9LGUucHJvdG90eXBlLl9pbnN0YWxsVGltZXJUaW1lb3V0PWZ1bmN0aW9uKCl7aWYodGhpcy5f
dGltZXJzLmxlbmd0aCl7dmFyIGU9dGhpcy5fdGltZXJzWzBdLHQ9ZCgpLG49TWF0aC5tYXgoMCxl
LXQpCit0aGlzLl90aW1lclRpbWVvdXRJZD10aGlzLl9wbGF0Zm9ybS5zZXRUaW1lb3V0KHRoaXMu
X2JvdW5kUnVuRXhwaXJlZFRpbWVycyxuKX19LGUucHJvdG90eXBlLl9lbnN1cmVJbnN0YW5jZT1m
dW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5jdXJyZW50SW5zdGFuY2UKK3JldHVybiB0fHwoZT10aGlz
Ll9wbGF0Zm9ybS5zZXRUaW1lb3V0LHQ9dGhpcy5iZWdpbigpLHRoaXMuX2F1dG9ydW49ZSh0aGlz
Ll9ib3VuZEF1dG9ydW5FbmQsMCkpLHR9LGV9KCkKK3kuUXVldWU9bSx5LnByb3RvdHlwZS5zY2hl
ZHVsZT15LnByb3RvdHlwZS5kZWZlcix5LnByb3RvdHlwZS5zY2hlZHVsZU9uY2U9eS5wcm90b3R5
cGUuZGVmZXJPbmNlLHkucHJvdG90eXBlLmxhdGVyPXkucHJvdG90eXBlLnNldFRpbWVvdXQsZS5k
ZWZhdWx0PXl9KSxlKCJjb250YWluZXIiLFsiZXhwb3J0cyIsImVtYmVyLXV0aWxzIiwiZW1iZXIt
ZGVidWciLCJlbWJlci1lbnZpcm9ubWVudCJdLGZ1bmN0aW9uKGUsdCxuLHIpeyJ1c2Ugc3RyaWN0
IgorZnVuY3Rpb24gaShlLG4pe3RoaXMucmVnaXN0cnk9ZSx0aGlzLm93bmVyPW4mJm4ub3duZXI/
bi5vd25lcjpudWxsLHRoaXMuY2FjaGU9KDAsdC5kaWN0aW9uYXJ5KShuJiZuLmNhY2hlP24uY2Fj
aGU6bnVsbCksdGhpcy5mYWN0b3J5Q2FjaGU9KDAsdC5kaWN0aW9uYXJ5KShuJiZuLmZhY3RvcnlD
YWNoZT9uLmZhY3RvcnlDYWNoZTpudWxsKSx0aGlzLmZhY3RvcnlNYW5hZ2VyQ2FjaGU9KDAsdC5k
aWN0aW9uYXJ5KShuJiZuLmZhY3RvcnlNYW5hZ2VyQ2FjaGU/bi5mYWN0b3J5TWFuYWdlckNhY2hl
Om51bGwpLHRoaXMudmFsaWRhdGlvbkNhY2hlPSgwLHQuZGljdGlvbmFyeSkobiYmbi52YWxpZGF0
aW9uQ2FjaGU/bi52YWxpZGF0aW9uQ2FjaGU6bnVsbCksdGhpcy5fZmFrZUNvbnRhaW5lclRvSW5q
ZWN0PXgodGhpcyksdGhpc1trXT12b2lkIDAsdGhpcy5pc0Rlc3Ryb3llZD0hMX1mdW5jdGlvbiBv
KGUsdCl7cmV0dXJuITEhPT1lLnJlZ2lzdHJ5LmdldE9wdGlvbih0LCJzaW5nbGV0b24iKX1mdW5j
dGlvbiBzKGUsdCl7cmV0dXJuITEhPT1lLnJlZ2lzdHJ5LmdldE9wdGlvbih0LCJpbnN0YW50aWF0
ZSIpfWZ1bmN0aW9uIGEoZSx0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFy
Z3VtZW50c1syXT9hcmd1bWVudHNbMl06e30KK2lmKCFuLnNvdXJjZXx8KHQ9ZS5yZWdpc3RyeS5l
eHBhbmRMb2NhbExvb2t1cCh0LG4pKSlyZXR1cm4gdm9pZCAwIT09ZS5jYWNoZVt0XSYmITEhPT1u
LnNpbmdsZXRvbj9lLmNhY2hlW3RdOmYoZSx0LG4pfWZ1bmN0aW9uIHUoZSx0LG4pe3ZhciByPW4u
aW5zdGFudGlhdGUKK3JldHVybiExIT09bi5zaW5nbGV0b24mJm8oZSx0KSYmIXImJiFzKGUsdCl9
ZnVuY3Rpb24gbChlLHQsbil7dmFyIHI9bi5pbnN0YW50aWF0ZQorcmV0dXJuITEhPT1uLnNpbmds
ZXRvbiYmbyhlLHQpJiYhMSE9PXImJnMoZSx0KX1mdW5jdGlvbiBjKGUsdCxuKXt2YXIgcj1uLmlu
c3RhbnRpYXRlCityZXR1cm4hKCExIT09bi5zaW5nbGV0b24mJm8oZSx0KXx8ITEhPT1yfHxzKGUs
dCkpfWZ1bmN0aW9uIHAoZSx0LG4pe3ZhciByPW4uaW5zdGFudGlhdGUKK3JldHVybighMSE9PW4u
c2luZ2xldG9ufHxvKGUsdCkpJiYhMSE9PXImJnMoZSx0KX1mdW5jdGlvbiBmKGUsdCxuKXt2YXIg
cj1lLmZhY3RvcnlGb3IodCkKK2lmKHZvaWQgMCE9PXIpe2lmKGwoZSx0LG4pKXJldHVybiBlLmNh
Y2hlW3RdPXIuY3JlYXRlKCkKK2lmKHAoZSx0LG4pKXJldHVybiByLmNyZWF0ZSgpCitpZih1KGUs
dCxuKXx8YyhlLHQsbikpcmV0dXJuIHIuY2xhc3MKK3Rocm93IG5ldyBFcnJvcigiQ291bGQgbm90
IGNyZWF0ZSBmYWN0b3J5Iil9fWZ1bmN0aW9uIGgoZSl7ZS5fZHluYW1pYz0hMH1mdW5jdGlvbiBk
KGUpe3JldHVybiEhZS5fZHluYW1pY31mdW5jdGlvbiBtKCl7dmFyIGUsdCxuLHIsaSxzLHU9e30K
K2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl7Zm9yKGU9YXJndW1lbnRzWzBdLHQ9W10sbj12b2lkIDAs
cj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspYXJndW1lbnRzW3JdJiYodD10LmNvbmNhdChhcmd1
bWVudHNbcl0pKQorZm9yKGk9ITEscz0wO3M8dC5sZW5ndGg7cysrKW49dFtzXSx1W24ucHJvcGVy
dHldPWEoZSxuLmZ1bGxOYW1lKSxpfHwoaT0hbyhlLG4uZnVsbE5hbWUpKQoraSYmaCh1KX1yZXR1
cm4gdX1mdW5jdGlvbiBnKGUsbil7dmFyIGksbyxzLGEsdT1hcmd1bWVudHMubGVuZ3RoPjImJnZv
aWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e30sbD1lLnJlZ2lzdHJ5CitpZighdS5z
b3VyY2V8fChuPWwuZXhwYW5kTG9jYWxMb29rdXAobix1KSkpe3ZhciBjPWUuZmFjdG9yeUNhY2hl
CitpZihjW25dKXJldHVybiBjW25dCit2YXIgcD1sLnJlc29sdmUobikKK2lmKHZvaWQgMCE9PXAp
e3ZhciBmPW4uc3BsaXQoIjoiKVswXQorcmV0dXJuIXB8fCJmdW5jdGlvbiIhPXR5cGVvZiBwLmV4
dGVuZHx8IXIuRU5WLk1PREVMX0ZBQ1RPUllfSU5KRUNUSU9OUyYmIm1vZGVsIj09PWY/KHAmJiJm
dW5jdGlvbiI9PXR5cGVvZiBwLl9vbkxvb2t1cCYmcC5fb25Mb29rdXAobiksY1tuXT1wLHApOihp
PXkoZSxuKSxvPXYoZSxuKSxzPSFkKGkpJiYhZChvKSxvW3QuTkFNRV9LRVldPWwubWFrZVRvU3Ry
aW5nKHAsbiksaS5fZGVidWdDb250YWluZXJLZXk9biwoMCx0LnNldE93bmVyKShpLGUub3duZXIp
LGE9cC5leHRlbmQoaSksYihhLnByb3RvdHlwZSksYS5yZW9wZW5DbGFzcyhvKSxwJiYiZnVuY3Rp
b24iPT10eXBlb2YgcC5fb25Mb29rdXAmJnAuX29uTG9va3VwKG4pLHMmJihjW25dPWEpLGEpfX19
ZnVuY3Rpb24geShlLHQpe3ZhciBuPWUucmVnaXN0cnkscj10LnNwbGl0KCI6IiksaT1yWzBdCity
ZXR1cm4gbShlLG4uZ2V0VHlwZUluamVjdGlvbnMoaSksbi5nZXRJbmplY3Rpb25zKHQpKX1mdW5j
dGlvbiB2KGUsdCl7dmFyIG49ZS5yZWdpc3RyeSxyPXQuc3BsaXQoIjoiKSxpPXJbMF0sbz1tKGUs
bi5nZXRGYWN0b3J5VHlwZUluamVjdGlvbnMoaSksbi5nZXRGYWN0b3J5SW5qZWN0aW9ucyh0KSkK
K3JldHVybiBvLl9kZWJ1Z0NvbnRhaW5lcktleT10LG99ZnVuY3Rpb24gYihlKXsiY29udGFpbmVy
ImluIGV8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJjb250YWluZXIiLE4pfWZ1bmN0aW9uIF8o
ZSl7dmFyIHQsbixyLGk9ZS5jYWNoZSxvPU9iamVjdC5rZXlzKGkpCitmb3IodD0wO3Q8by5sZW5n
dGg7dCsrKW49b1t0XSxyPWlbbl0scyhlLG4pJiZyLmRlc3Ryb3kmJnIuZGVzdHJveSgpfWZ1bmN0
aW9uIHcoZSl7XyhlKSxlLmNhY2hlLmRpY3Q9KDAsdC5kaWN0aW9uYXJ5KShudWxsKX1mdW5jdGlv
biBFKGUsdCl7dmFyIG49ZS5jYWNoZVt0XQorZGVsZXRlIGUuZmFjdG9yeUNhY2hlW3RdLG4mJihk
ZWxldGUgZS5jYWNoZVt0XSxuLmRlc3Ryb3kmJm4uZGVzdHJveSgpKX1mdW5jdGlvbiB4KGUpe3Zh
ciB0PXt9LG49e2xvb2t1cDoibG9va3VwIixsb29rdXBGYWN0b3J5OiJfbG9va3VwRmFjdG9yeSJ9
Citmb3IodmFyIHIgaW4gbil0W3JdPUMoZSxyLG5bcl0pCityZXR1cm4gdH1mdW5jdGlvbiBDKGUs
dCxuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZVt0XS5hcHBseShlLGFyZ3VtZW50cyl9fWZ1
bmN0aW9uIE8oZSl7dGhpcy5mYWxsYmFjaz1lJiZlLmZhbGxiYWNrP2UuZmFsbGJhY2s6bnVsbCxl
JiZlLnJlc29sdmVyJiYodGhpcy5yZXNvbHZlcj1lLnJlc29sdmVyLCJmdW5jdGlvbiI9PXR5cGVv
ZiB0aGlzLnJlc29sdmVyJiZBKHRoaXMpKSx0aGlzLnJlZ2lzdHJhdGlvbnM9KDAsdC5kaWN0aW9u
YXJ5KShlJiZlLnJlZ2lzdHJhdGlvbnM/ZS5yZWdpc3RyYXRpb25zOm51bGwpLHRoaXMuX3R5cGVJ
bmplY3Rpb25zPSgwLHQuZGljdGlvbmFyeSkobnVsbCksdGhpcy5faW5qZWN0aW9ucz0oMCx0LmRp
Y3Rpb25hcnkpKG51bGwpLHRoaXMuX2ZhY3RvcnlUeXBlSW5qZWN0aW9ucz0oMCx0LmRpY3Rpb25h
cnkpKG51bGwpLHRoaXMuX2ZhY3RvcnlJbmplY3Rpb25zPSgwLHQuZGljdGlvbmFyeSkobnVsbCks
dGhpcy5fbG9jYWxMb29rdXBDYWNoZT1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX25vcm1hbGl6
ZUNhY2hlPSgwLHQuZGljdGlvbmFyeSkobnVsbCksdGhpcy5fcmVzb2x2ZUNhY2hlPSgwLHQuZGlj
dGlvbmFyeSkobnVsbCksdGhpcy5fZmFpbENhY2hlPSgwLHQuZGljdGlvbmFyeSkobnVsbCksdGhp
cy5fb3B0aW9ucz0oMCx0LmRpY3Rpb25hcnkpKG51bGwpLHRoaXMuX3R5cGVPcHRpb25zPSgwLHQu
ZGljdGlvbmFyeSkobnVsbCl9ZnVuY3Rpb24gQShlKXtlLnJlc29sdmVyPXtyZXNvbHZlOmUucmVz
b2x2ZXJ9fWZ1bmN0aW9uIFQoZSx0LG4pe3ZhciByPWUuX2xvY2FsTG9va3VwQ2FjaGUsaT1yW3Rd
CitpfHwoaT1yW3RdPU9iamVjdC5jcmVhdGUobnVsbCkpCit2YXIgbz1pW25dCitpZih2b2lkIDAh
PT1vKXJldHVybiBvCit2YXIgcz1lLnJlc29sdmVyLmV4cGFuZExvY2FsTG9va3VwKHQsbikKK3Jl
dHVybiBpW25dPXN9ZnVuY3Rpb24gUyhlLHQsbil7aWYoIW58fCFuLnNvdXJjZXx8KHQ9ZS5leHBh
bmRMb2NhbExvb2t1cCh0LG4pKSl7dmFyIHI9ZS5fcmVzb2x2ZUNhY2hlW3RdCitpZih2b2lkIDAh
PT1yKXJldHVybiByCitpZighZS5fZmFpbENhY2hlW3RdKXt2YXIgaT12b2lkIDAKK3JldHVybiBl
LnJlc29sdmVyJiYoaT1lLnJlc29sdmVyLnJlc29sdmUodCkpLHZvaWQgMD09PWkmJihpPWUucmVn
aXN0cmF0aW9uc1t0XSksdm9pZCAwPT09aT9lLl9mYWlsQ2FjaGVbdF09ITA6ZS5fcmVzb2x2ZUNh
Y2hlW3RdPWksaX19fWZ1bmN0aW9uIFIoZSx0LG4pe3JldHVybiB2b2lkIDAhPT1lLnJlc29sdmUo
dCx7c291cmNlOm59KX1lLmJ1aWxkRmFrZUNvbnRhaW5lcldpdGhEZXByZWNhdGlvbnM9ZS5Db250
YWluZXI9ZS5wcml2YXRpemU9ZS5SZWdpc3RyeT12b2lkIDAKK3ZhciBrPSgwLHQuc3ltYm9sKSgi
Q09OVEFJTkVSX09WRVJSSURFIikKK2kucHJvdG90eXBlPXtsb29rdXA6ZnVuY3Rpb24oZSx0KXty
ZXR1cm4gYSh0aGlzLHRoaXMucmVnaXN0cnkubm9ybWFsaXplKGUpLHQpfSxsb29rdXBGYWN0b3J5
OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGcodGhpcyx0aGlzLnJlZ2lzdHJ5Lm5vcm1hbGl6ZShlKSx0
KX0sZGVzdHJveTpmdW5jdGlvbigpe18odGhpcyksdGhpcy5pc0Rlc3Ryb3llZD0hMH0scmVzZXQ6
ZnVuY3Rpb24oZSl7YXJndW1lbnRzLmxlbmd0aD4wP0UodGhpcyx0aGlzLnJlZ2lzdHJ5Lm5vcm1h
bGl6ZShlKSk6dyh0aGlzKX0sb3duZXJJbmplY3Rpb246ZnVuY3Rpb24oKXt2YXIgZQorcmV0dXJu
IGU9e30sZVt0Lk9XTkVSXT10aGlzLm93bmVyLGV9LGZhY3RvcnlGb3I6ZnVuY3Rpb24oZSl7dmFy
IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFd
Ont9LG49dGhpcy5yZWdpc3RyeS5ub3JtYWxpemUoZSkKK2lmKCF0LnNvdXJjZXx8KG49dGhpcy5y
ZWdpc3RyeS5leHBhbmRMb2NhbExvb2t1cChlLHQpKSl7dmFyIHI9dGhpcy5mYWN0b3J5TWFuYWdl
ckNhY2hlW25dCitpZihyKXJldHVybiByCit2YXIgaT10aGlzLnJlZ2lzdHJ5LnJlc29sdmUobikK
K2lmKHZvaWQgMCE9PWkpe3ZhciBvPW5ldyBQKHRoaXMsaSxlLG4pCityZXR1cm4gdGhpcy5mYWN0
b3J5TWFuYWdlckNhY2hlW25dPW8sb319fX0KK3ZhciBOPXtjb25maWd1cmFibGU6ITAsZW51bWVy
YWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1trXXx8KDAsdC5nZXRPd25lcikodGhp
cykuX19jb250YWluZXJfX30sc2V0OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzW2tdPWUsZX19LFA9
ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLHIpe3RoaXMuY29udGFpbmVyPWUsdGhpcy5vd25l
cj1lLm93bmVyLHRoaXMuY2xhc3M9dCx0aGlzLmZ1bGxOYW1lPW4sdGhpcy5ub3JtYWxpemVkTmFt
ZT1yLHRoaXMubWFkZVRvU3RyaW5nPXZvaWQgMCx0aGlzLmluamVjdGlvbnM9dm9pZCAwfXJldHVy
biBlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1hZGVUb1N0cmlu
Z3x8KHRoaXMubWFkZVRvU3RyaW5nPXRoaXMuY29udGFpbmVyLnJlZ2lzdHJ5Lm1ha2VUb1N0cmlu
Zyh0aGlzLmNsYXNzLHRoaXMuZnVsbE5hbWUpKSx0aGlzLm1hZGVUb1N0cmluZ30sZS5wcm90b3R5
cGUuY3JlYXRlPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1h
cmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LG49dGhpcy5pbmplY3Rpb25zCit2b2lkIDA9PT1u
JiYobj15KHRoaXMuY29udGFpbmVyLHRoaXMubm9ybWFsaXplZE5hbWUpLCExPT09ZChuKSYmKHRo
aXMuaW5qZWN0aW9ucz1uKSkKK3ZhciByPSgwLHQuYXNzaWduKSh7fSxuLGUpCitpZighdGhpcy5j
bGFzcy5jcmVhdGUpdGhyb3cgbmV3IEVycm9yKCJGYWlsZWQgdG8gY3JlYXRlIGFuIGluc3RhbmNl
IG9mICciK3RoaXMubm9ybWFsaXplZE5hbWUrIicuIE1vc3QgbGlrZWx5IGFuIGltcHJvcGVybHkg
ZGVmaW5lZCBjbGFzcyBvciBhbiBpbnZhbGlkIG1vZHVsZSBleHBvcnQuIikKK3ZhciBpPXRoaXMu
Y2xhc3MucHJvdG90eXBlCityZXR1cm4gaSYmYihpLHRoaXMuY29udGFpbmVyKSwiZnVuY3Rpb24i
PT10eXBlb2YgdGhpcy5jbGFzcy5faW5pdEZhY3Rvcnk/dGhpcy5jbGFzcy5faW5pdEZhY3Rvcnko
dGhpcyk6KDAsdC5zZXRPd25lcikocix0aGlzLm93bmVyKSx0aGlzLmNsYXNzLmNyZWF0ZShyKX0s
ZX0oKSxqPS9eW146XSs6W146XSskLworTy5wcm90b3R5cGU9e2ZhbGxiYWNrOm51bGwscmVzb2x2
ZXI6bnVsbCxyZWdpc3RyYXRpb25zOm51bGwsX3R5cGVJbmplY3Rpb25zOm51bGwsX2luamVjdGlv
bnM6bnVsbCxfZmFjdG9yeVR5cGVJbmplY3Rpb25zOm51bGwsX2ZhY3RvcnlJbmplY3Rpb25zOm51
bGwsX25vcm1hbGl6ZUNhY2hlOm51bGwsX3Jlc29sdmVDYWNoZTpudWxsLF9vcHRpb25zOm51bGws
X3R5cGVPcHRpb25zOm51bGwsY29udGFpbmVyOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaSh0aGlz
LGUpfSxyZWdpc3RlcjpmdW5jdGlvbihlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9p
ZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fQoraWYodm9pZCAwPT09dCl0aHJvdyBu
ZXcgVHlwZUVycm9yKCJBdHRlbXB0aW5nIHRvIHJlZ2lzdGVyIGFuIHVua25vd24gZmFjdG9yeTog
JyIrZSsiJyIpCit2YXIgcj10aGlzLm5vcm1hbGl6ZShlKQoraWYodGhpcy5fcmVzb2x2ZUNhY2hl
W3JdKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlLXJlZ2lzdGVyOiAnIitlKyInLCBhcyBpdCBo
YXMgYWxyZWFkeSBiZWVuIHJlc29sdmVkLiIpCitkZWxldGUgdGhpcy5fZmFpbENhY2hlW3JdLHRo
aXMucmVnaXN0cmF0aW9uc1tyXT10LHRoaXMuX29wdGlvbnNbcl09bn0sdW5yZWdpc3RlcjpmdW5j
dGlvbihlKXt2YXIgdD10aGlzLm5vcm1hbGl6ZShlKQordGhpcy5fbG9jYWxMb29rdXBDYWNoZT1P
YmplY3QuY3JlYXRlKG51bGwpLGRlbGV0ZSB0aGlzLnJlZ2lzdHJhdGlvbnNbdF0sZGVsZXRlIHRo
aXMuX3Jlc29sdmVDYWNoZVt0XSxkZWxldGUgdGhpcy5fZmFpbENhY2hlW3RdLGRlbGV0ZSB0aGlz
Ll9vcHRpb25zW3RdfSxyZXNvbHZlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1TKHRoaXMsdGhpcy5u
b3JtYWxpemUoZSksdCkKK3JldHVybiB2b2lkIDA9PT1yJiZ0aGlzLmZhbGxiYWNrJiYocj0obj10
aGlzLmZhbGxiYWNrKS5yZXNvbHZlLmFwcGx5KG4sYXJndW1lbnRzKSkscn0sZGVzY3JpYmU6ZnVu
Y3Rpb24oZSl7cmV0dXJuIHRoaXMucmVzb2x2ZXImJnRoaXMucmVzb2x2ZXIubG9va3VwRGVzY3Jp
cHRpb24/dGhpcy5yZXNvbHZlci5sb29rdXBEZXNjcmlwdGlvbihlKTp0aGlzLmZhbGxiYWNrP3Ro
aXMuZmFsbGJhY2suZGVzY3JpYmUoZSk6ZX0sbm9ybWFsaXplRnVsbE5hbWU6ZnVuY3Rpb24oZSl7
cmV0dXJuIHRoaXMucmVzb2x2ZXImJnRoaXMucmVzb2x2ZXIubm9ybWFsaXplP3RoaXMucmVzb2x2
ZXIubm9ybWFsaXplKGUpOnRoaXMuZmFsbGJhY2s/dGhpcy5mYWxsYmFjay5ub3JtYWxpemVGdWxs
TmFtZShlKTplfSxub3JtYWxpemU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX25vcm1hbGl6ZUNh
Y2hlW2VdfHwodGhpcy5fbm9ybWFsaXplQ2FjaGVbZV09dGhpcy5ub3JtYWxpemVGdWxsTmFtZShl
KSl9LG1ha2VUb1N0cmluZzpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnJlc29sdmVyJiZ0aGlz
LnJlc29sdmVyLm1ha2VUb1N0cmluZz90aGlzLnJlc29sdmVyLm1ha2VUb1N0cmluZyhlLHQpOnRo
aXMuZmFsbGJhY2s/dGhpcy5mYWxsYmFjay5tYWtlVG9TdHJpbmcoZSx0KTplLnRvU3RyaW5nKCl9
LGhhczpmdW5jdGlvbihlLHQpe2lmKCF0aGlzLmlzVmFsaWRGdWxsTmFtZShlKSlyZXR1cm4hMQor
dmFyIG49dCYmdC5zb3VyY2UmJnRoaXMubm9ybWFsaXplKHQuc291cmNlKQorcmV0dXJuIFIodGhp
cyx0aGlzLm5vcm1hbGl6ZShlKSxuKX0sb3B0aW9uc0ZvclR5cGU6ZnVuY3Rpb24oZSx0KXt0aGlz
Ll90eXBlT3B0aW9uc1tlXT10fSxnZXRPcHRpb25zRm9yVHlwZTpmdW5jdGlvbihlKXt2YXIgdD10
aGlzLl90eXBlT3B0aW9uc1tlXQorcmV0dXJuIHZvaWQgMD09PXQmJnRoaXMuZmFsbGJhY2smJih0
PXRoaXMuZmFsbGJhY2suZ2V0T3B0aW9uc0ZvclR5cGUoZSkpLHR9LG9wdGlvbnM6ZnVuY3Rpb24o
ZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1l
bnRzWzFdOnt9LG49dGhpcy5ub3JtYWxpemUoZSkKK3RoaXMuX29wdGlvbnNbbl09dH0sZ2V0T3B0
aW9uczpmdW5jdGlvbihlKXt2YXIgdD10aGlzLm5vcm1hbGl6ZShlKSxuPXRoaXMuX29wdGlvbnNb
dF0KK3JldHVybiB2b2lkIDA9PT1uJiZ0aGlzLmZhbGxiYWNrJiYobj10aGlzLmZhbGxiYWNrLmdl
dE9wdGlvbnMoZSkpLG59LGdldE9wdGlvbjpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX29wdGlv
bnNbZV0KK2lmKG4mJnZvaWQgMCE9PW5bdF0pcmV0dXJuIG5bdF0KK3ZhciByPWUuc3BsaXQoIjoi
KVswXQorcmV0dXJuIG49dGhpcy5fdHlwZU9wdGlvbnNbcl0sbiYmdm9pZCAwIT09blt0XT9uW3Rd
OnRoaXMuZmFsbGJhY2s/dGhpcy5mYWxsYmFjay5nZXRPcHRpb24oZSx0KTp2b2lkIDB9LHR5cGVJ
bmplY3Rpb246ZnVuY3Rpb24oZSx0LG4pe2lmKG4uc3BsaXQoIjoiKVswXT09PWUpdGhyb3cgbmV3
IEVycm9yKCJDYW5ub3QgaW5qZWN0IGEgJyIrbisiJyBvbiBvdGhlciAiK2UrIihzKS4iKTsodGhp
cy5fdHlwZUluamVjdGlvbnNbZV18fCh0aGlzLl90eXBlSW5qZWN0aW9uc1tlXT1bXSkpLnB1c2go
e3Byb3BlcnR5OnQsZnVsbE5hbWU6bn0pfSxpbmplY3Rpb246ZnVuY3Rpb24oZSx0LG4pe3RoaXMu
dmFsaWRhdGVGdWxsTmFtZShuKQordmFyIHI9dGhpcy5ub3JtYWxpemUobikKK2lmKC0xPT09ZS5p
bmRleE9mKCI6IikpcmV0dXJuIHRoaXMudHlwZUluamVjdGlvbihlLHQscikKK3ZhciBpPXRoaXMu
bm9ybWFsaXplKGUpOyh0aGlzLl9pbmplY3Rpb25zW2ldfHwodGhpcy5faW5qZWN0aW9uc1tpXT1b
XSkpLnB1c2goe3Byb3BlcnR5OnQsZnVsbE5hbWU6cn0pfSxmYWN0b3J5VHlwZUluamVjdGlvbjpm
dW5jdGlvbihlLHQsbil7KHRoaXMuX2ZhY3RvcnlUeXBlSW5qZWN0aW9uc1tlXXx8KHRoaXMuX2Zh
Y3RvcnlUeXBlSW5qZWN0aW9uc1tlXT1bXSkpLnB1c2goe3Byb3BlcnR5OnQsZnVsbE5hbWU6dGhp
cy5ub3JtYWxpemUobil9KX0sZmFjdG9yeUluamVjdGlvbjpmdW5jdGlvbihlLHQsbil7dmFyIHI9
dGhpcy5ub3JtYWxpemUoZSksaT10aGlzLm5vcm1hbGl6ZShuKQoraWYodGhpcy52YWxpZGF0ZUZ1
bGxOYW1lKG4pLC0xPT09ZS5pbmRleE9mKCI6IikpcmV0dXJuIHRoaXMuZmFjdG9yeVR5cGVJbmpl
Y3Rpb24ocix0LGkpOyh0aGlzLl9mYWN0b3J5SW5qZWN0aW9uc1tyXXx8KHRoaXMuX2ZhY3RvcnlJ
bmplY3Rpb25zW3JdPVtdKSkucHVzaCh7cHJvcGVydHk6dCxmdWxsTmFtZTppfSl9LGtub3duRm9y
VHlwZTpmdW5jdGlvbihlKXt2YXIgbixyLGk9dm9pZCAwLG89dm9pZCAwLHM9KDAsdC5kaWN0aW9u
YXJ5KShudWxsKSxhPU9iamVjdC5rZXlzKHRoaXMucmVnaXN0cmF0aW9ucykKK2ZvcihuPTA7bjxh
Lmxlbmd0aDtuKyspcj1hW25dLHIuc3BsaXQoIjoiKVswXT09PWUmJihzW3JdPSEwKQorcmV0dXJu
IHRoaXMuZmFsbGJhY2smJihpPXRoaXMuZmFsbGJhY2sua25vd25Gb3JUeXBlKGUpKSx0aGlzLnJl
c29sdmVyJiZ0aGlzLnJlc29sdmVyLmtub3duRm9yVHlwZSYmKG89dGhpcy5yZXNvbHZlci5rbm93
bkZvclR5cGUoZSkpLCgwLHQuYXNzaWduKSh7fSxpLHMsbyl9LHZhbGlkYXRlRnVsbE5hbWU6ZnVu
Y3Rpb24oZSl7aWYoIXRoaXMuaXNWYWxpZEZ1bGxOYW1lKGUpKXRocm93IG5ldyBUeXBlRXJyb3Io
IkludmFsaWQgRnVsbG5hbWUsIGV4cGVjdGVkOiAndHlwZTpuYW1lJyBnb3Q6ICIrZSkKK3JldHVy
biEwfSxpc1ZhbGlkRnVsbE5hbWU6ZnVuY3Rpb24oZSl7cmV0dXJuISFqLnRlc3QoZSl9LHZhbGlk
YXRlSW5qZWN0aW9uczpmdW5jdGlvbihlKXtpZihlKXt2YXIgdAorZm9yKHQ9MDt0PGUubGVuZ3Ro
O3QrKyllW3RdLmZ1bGxOYW1lfX0sbm9ybWFsaXplSW5qZWN0aW9uc0hhc2g6ZnVuY3Rpb24oZSl7
dmFyIHQ9W10KK2Zvcih2YXIgbiBpbiBlKWUuaGFzT3duUHJvcGVydHkobikmJnQucHVzaCh7cHJv
cGVydHk6bixmdWxsTmFtZTplW25dfSkKK3JldHVybiB0fSxnZXRJbmplY3Rpb25zOmZ1bmN0aW9u
KGUpe3ZhciB0PXRoaXMuX2luamVjdGlvbnNbZV18fFtdCityZXR1cm4gdGhpcy5mYWxsYmFjayYm
KHQ9dC5jb25jYXQodGhpcy5mYWxsYmFjay5nZXRJbmplY3Rpb25zKGUpKSksdH0sZ2V0VHlwZUlu
amVjdGlvbnM6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fdHlwZUluamVjdGlvbnNbZV18fFtdCity
ZXR1cm4gdGhpcy5mYWxsYmFjayYmKHQ9dC5jb25jYXQodGhpcy5mYWxsYmFjay5nZXRUeXBlSW5q
ZWN0aW9ucyhlKSkpLHR9LGdldEZhY3RvcnlJbmplY3Rpb25zOmZ1bmN0aW9uKGUpe3ZhciB0PXRo
aXMuX2ZhY3RvcnlJbmplY3Rpb25zW2VdfHxbXQorcmV0dXJuIHRoaXMuZmFsbGJhY2smJih0PXQu
Y29uY2F0KHRoaXMuZmFsbGJhY2suZ2V0RmFjdG9yeUluamVjdGlvbnMoZSkpKSx0fSxnZXRGYWN0
b3J5VHlwZUluamVjdGlvbnM6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZmFjdG9yeVR5cGVJbmpl
Y3Rpb25zW2VdfHxbXQorcmV0dXJuIHRoaXMuZmFsbGJhY2smJih0PXQuY29uY2F0KHRoaXMuZmFs
bGJhY2suZ2V0RmFjdG9yeVR5cGVJbmplY3Rpb25zKGUpKSksdH19LE8ucHJvdG90eXBlLmV4cGFu
ZExvY2FsTG9va3VwPWZ1bmN0aW9uKGUsdCl7dmFyIG4scgorcmV0dXJuIHRoaXMucmVzb2x2ZXIm
JnRoaXMucmVzb2x2ZXIuZXhwYW5kTG9jYWxMb29rdXA/KG49dGhpcy5ub3JtYWxpemUoZSkscj10
aGlzLm5vcm1hbGl6ZSh0LnNvdXJjZSksVCh0aGlzLG4scikpOnRoaXMuZmFsbGJhY2s/dGhpcy5m
YWxsYmFjay5leHBhbmRMb2NhbExvb2t1cChlLHQpOm51bGx9Cit2YXIgRD0oMCx0LmRpY3Rpb25h
cnkpKG51bGwpLEw9IiIrTWF0aC5yYW5kb20oKStEYXRlLm5vdygpCitlLlJlZ2lzdHJ5PU8sZS5w
cml2YXRpemU9ZnVuY3Rpb24oZSl7dmFyIG49ZVswXSxyPURbbl0KK2lmKHIpcmV0dXJuIHIKK3Zh
ciBpPW4uc3BsaXQoIjoiKSxvPWlbMF0scz1pWzFdCityZXR1cm4gRFtuXT0oMCx0LmludGVybiko
bysiOiIrcysiLSIrTCl9LGUuQ29udGFpbmVyPWksZS5idWlsZEZha2VDb250YWluZXJXaXRoRGVw
cmVjYXRpb25zPXh9KSxlKCJkYWctbWFwIixbImV4cG9ydHMiXSxmdW5jdGlvbihlKXsidXNlIHN0
cmljdCIKK3ZhciB0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuX3ZlcnRpY2VzPW5ldyBu
fXJldHVybiBlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSx0LG4scil7aWYoIWUpdGhyb3cgbmV3
IEVycm9yKCJhcmd1bWVudCBga2V5YCBpcyByZXF1aXJlZCIpCit2YXIgaSxvPXRoaXMuX3ZlcnRp
Y2VzLHM9by5hZGQoZSkKK2lmKHMudmFsPXQsbilpZigic3RyaW5nIj09dHlwZW9mIG4pby5hZGRF
ZGdlKHMsby5hZGQobikpCitlbHNlIGZvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKW8uYWRkRWRn
ZShzLG8uYWRkKG5baV0pKQoraWYocilpZigic3RyaW5nIj09dHlwZW9mIHIpby5hZGRFZGdlKG8u
YWRkKHIpLHMpCitlbHNlIGZvcihpPTA7aTxyLmxlbmd0aDtpKyspby5hZGRFZGdlKG8uYWRkKHJb
aV0pLHMpfSxlLnByb3RvdHlwZS5hZGRFZGdlcz1mdW5jdGlvbihlLHQsbixyKXt0aGlzLmFkZChl
LHQsbixyKX0sZS5wcm90b3R5cGUuZWFjaD1mdW5jdGlvbihlKXt0aGlzLl92ZXJ0aWNlcy53YWxr
KGUpfSxlLnByb3RvdHlwZS50b3Bzb3J0PWZ1bmN0aW9uKGUpe3RoaXMuZWFjaChlKX0sZX0oKQor
ZS5kZWZhdWx0PXQKK3ZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMubGVuZ3RoPTAs
dGhpcy5zdGFjaz1uZXcgcix0aGlzLnBhdGg9bmV3IHIsdGhpcy5yZXN1bHQ9bmV3IHJ9cmV0dXJu
IGUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXtpZighZSl0aHJvdyBuZXcgRXJyb3IoIm1pc3Np
bmcga2V5IikKK3ZhciB0LG4scj0wfHRoaXMubGVuZ3RoCitmb3IodD0wO3Q8cjt0KyspaWYobj10
aGlzW3RdLG4ua2V5PT09ZSlyZXR1cm4gbgorcmV0dXJuIHRoaXMubGVuZ3RoPXIrMSx0aGlzW3Jd
PXtpZHg6cixrZXk6ZSx2YWw6dm9pZCAwLG91dDohMSxmbGFnOiExLGxlbmd0aDowfX0sZS5wcm90
b3R5cGUuYWRkRWRnZT1mdW5jdGlvbihlLHQpe3RoaXMuY2hlY2soZSx0LmtleSkKK3ZhciBuLHI9
MHx0Lmxlbmd0aAorZm9yKG49MDtuPHI7bisrKWlmKHRbbl09PT1lLmlkeClyZXR1cm4KK3QubGVu
Z3RoPXIrMSx0W3JdPWUuaWR4LGUub3V0PSEwfSxlLnByb3RvdHlwZS53YWxrPWZ1bmN0aW9uKGUp
e3ZhciB0LG4KK2Zvcih0aGlzLnJlc2V0KCksdD0wO3Q8dGhpcy5sZW5ndGg7dCsrKW49dGhpc1t0
XSxuLm91dHx8dGhpcy52aXNpdChuLCIiKQordGhpcy5lYWNoKHRoaXMucmVzdWx0LGUpfSxlLnBy
b3RvdHlwZS5jaGVjaz1mdW5jdGlvbihlLHQpe3ZhciBuLHIKK2lmKGUua2V5PT09dCl0aHJvdyBu
ZXcgRXJyb3IoImN5Y2xlIGRldGVjdGVkOiAiK3QrIiA8LSAiK3QpCitpZigwIT09ZS5sZW5ndGgp
e2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspaWYodGhpc1tlW25dXS5rZXk9PT10KXRocm93IG5ldyBF
cnJvcigiY3ljbGUgZGV0ZWN0ZWQ6ICIrdCsiIDwtICIrZS5rZXkrIiA8LSAiK3QpCitpZih0aGlz
LnJlc2V0KCksdGhpcy52aXNpdChlLHQpLHRoaXMucGF0aC5sZW5ndGg+MCl0aHJvdyByPSJjeWNs
ZSBkZXRlY3RlZDogIit0LHRoaXMuZWFjaCh0aGlzLnBhdGgsZnVuY3Rpb24oZSl7cis9IiA8LSAi
K2V9KSxuZXcgRXJyb3Iocil9fSxlLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3ZhciBlLHQK
K2Zvcih0aGlzLnN0YWNrLmxlbmd0aD0wLHRoaXMucGF0aC5sZW5ndGg9MCx0aGlzLnJlc3VsdC5s
ZW5ndGg9MCxlPTAsdD10aGlzLmxlbmd0aDtlPHQ7ZSsrKXRoaXNbZV0uZmxhZz0hMX0sZS5wcm90
b3R5cGUudmlzaXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk9dGhpcyxvPWkuc3RhY2sscz1pLnBh
dGgsYT1pLnJlc3VsdAorZm9yKG8ucHVzaChlLmlkeCk7by5sZW5ndGg7KWlmKChuPTB8by5wb3Ao
KSk+PTApe2lmKHI9dGhpc1tuXSxyLmZsYWcpY29udGludWUKK2lmKHIuZmxhZz0hMCxzLnB1c2go
biksdD09PXIua2V5KWJyZWFrCitvLnB1c2gofm4pLHRoaXMucHVzaEluY29taW5nKHIpfWVsc2Ug
cy5wb3AoKSxhLnB1c2gofm4pfSxlLnByb3RvdHlwZS5wdXNoSW5jb21pbmc9ZnVuY3Rpb24oZSl7
dmFyIHQsbixyPXRoaXMuc3RhY2sKK2Zvcih0PWUubGVuZ3RoLTE7dD49MDt0LS0pbj1lW3RdLHRo
aXNbbl0uZmxhZ3x8ci5wdXNoKG4pfSxlLnByb3RvdHlwZS5lYWNoPWZ1bmN0aW9uKGUsdCl7dmFy
IG4scixpCitmb3Iobj0wLHI9ZS5sZW5ndGg7bjxyO24rKylpPXRoaXNbZVtuXV0sdChpLmtleSxp
LnZhbCl9LGV9KCkscj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmxlbmd0aD0wfXJldHVy
biBlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUpe3RoaXNbdGhpcy5sZW5ndGgrK109MHxlfSxl
LnByb3RvdHlwZS5wb3A9ZnVuY3Rpb24oKXtyZXR1cm4gMHx0aGlzWy0tdGhpcy5sZW5ndGhdfSxl
fSgpfSksZSgiZW1iZXItYXBwbGljYXRpb24vaW5kZXgiLFsiZXhwb3J0cyIsImVtYmVyLWFwcGxp
Y2F0aW9uL3N5c3RlbS9hcHBsaWNhdGlvbiIsImVtYmVyLWFwcGxpY2F0aW9uL3N5c3RlbS9hcHBs
aWNhdGlvbi1pbnN0YW5jZSIsImVtYmVyLWFwcGxpY2F0aW9uL3N5c3RlbS9yZXNvbHZlciIsImVt
YmVyLWFwcGxpY2F0aW9uL3N5c3RlbS9lbmdpbmUiLCJlbWJlci1hcHBsaWNhdGlvbi9zeXN0ZW0v
ZW5naW5lLWluc3RhbmNlIiwiZW1iZXItYXBwbGljYXRpb24vc3lzdGVtL2VuZ2luZS1wYXJlbnQi
LCJlbWJlci1hcHBsaWNhdGlvbi9pbml0aWFsaXplcnMvZG9tLXRlbXBsYXRlcyJdLGZ1bmN0aW9u
KGUsdCxuLHIsaSxvLHMpeyJ1c2Ugc3RyaWN0IgorZS5zZXRFbmdpbmVQYXJlbnQ9ZS5nZXRFbmdp
bmVQYXJlbnQ9ZS5FbmdpbmVJbnN0YW5jZT1lLkVuZ2luZT1lLlJlc29sdmVyPWUuQXBwbGljYXRp
b25JbnN0YW5jZT1lLkFwcGxpY2F0aW9uPXZvaWQgMCxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwi
QXBwbGljYXRpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0LmRlZmF1
bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIkFwcGxpY2F0aW9uSW5zdGFuY2UiLHtlbnVt
ZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLmRlZmF1bHR9fSksT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KGUsIlJlc29sdmVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1
cm4gci5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJFbmdpbmUiLHtlbnVtZXJh
YmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVBy
b3BlcnR5KGUsIkVuZ2luZUluc3RhbmNlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXty
ZXR1cm4gby5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJnZXRFbmdpbmVQYXJl
bnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLmdldEVuZ2luZVBhcmVu
dH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwic2V0RW5naW5lUGFyZW50Iix7ZW51bWVyYWJs
ZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5zZXRFbmdpbmVQYXJlbnR9fSl9KSxlKCJlbWJl
ci1hcHBsaWNhdGlvbi9pbml0aWFsaXplcnMvZG9tLXRlbXBsYXRlcyIsWyJyZXF1aXJlIiwiZW1i
ZXItZ2xpbW1lciIsImVtYmVyLWVudmlyb25tZW50IiwiZW1iZXItYXBwbGljYXRpb24vc3lzdGVt
L2FwcGxpY2F0aW9uIl0sZnVuY3Rpb24oZSx0LG4scil7InVzZSBzdHJpY3QiCit2YXIgaT1mdW5j
dGlvbigpe30KK3IuZGVmYXVsdC5pbml0aWFsaXplcih7bmFtZToiZG9tVGVtcGxhdGVzIixpbml0
aWFsaXplOmZ1bmN0aW9uKCl7dmFyIHI9dm9pZCAwCituLmVudmlyb25tZW50Lmhhc0RPTSYmKDAs
ZS5oYXMpKCJlbWJlci10ZW1wbGF0ZS1jb21waWxlci9zeXN0ZW0vYm9vdHN0cmFwIikmJihpPSgw
LGUuZGVmYXVsdCkoImVtYmVyLXRlbXBsYXRlLWNvbXBpbGVyL3N5c3RlbS9ib290c3RyYXAiKS5k
ZWZhdWx0LHI9ZG9jdW1lbnQpLGkoe2NvbnRleHQ6cixoYXNUZW1wbGF0ZTp0Lmhhc1RlbXBsYXRl
LHNldFRlbXBsYXRlOnQuc2V0VGVtcGxhdGV9KX19KX0pLGUoImVtYmVyLWFwcGxpY2F0aW9uL3N5
c3RlbS9hcHBsaWNhdGlvbi1pbnN0YW5jZSIsWyJleHBvcnRzIiwiZW1iZXItdXRpbHMiLCJlbWJl
ci1kZWJ1ZyIsImVtYmVyLW1ldGFsIiwiZW1iZXItcnVudGltZSIsImVtYmVyLWVudmlyb25tZW50
IiwiZW1iZXItdmlld3MiLCJlbWJlci1hcHBsaWNhdGlvbi9zeXN0ZW0vZW5naW5lLWluc3RhbmNl
Il0sZnVuY3Rpb24oZSx0LG4scixpLG8scyxhKXsidXNlIHN0cmljdCIKK3ZhciB1PXZvaWQgMCxs
PWEuZGVmYXVsdC5leHRlbmQoe2FwcGxpY2F0aW9uOm51bGwsY3VzdG9tRXZlbnRzOm51bGwscm9v
dEVsZW1lbnQ6bnVsbCxpbml0OmZ1bmN0aW9uKCl7dGhpcy5fc3VwZXIuYXBwbHkodGhpcyxhcmd1
bWVudHMpLHRoaXMucmVnaXN0ZXIoIi1hcHBsaWNhdGlvbi1pbnN0YW5jZTptYWluIix0aGlzLHtp
bnN0YW50aWF0ZTohMX0pfSxfYm9vdFN5bmM6ZnVuY3Rpb24oZSl7dmFyIHQKK3JldHVybiB0aGlz
Ll9ib290ZWQ/dGhpczooZT1uZXcgdShlKSx0aGlzLnNldHVwUmVnaXN0cnkoZSksZS5yb290RWxl
bWVudD90aGlzLnJvb3RFbGVtZW50PWUucm9vdEVsZW1lbnQ6dGhpcy5yb290RWxlbWVudD10aGlz
LmFwcGxpY2F0aW9uLnJvb3RFbGVtZW50LGUubG9jYXRpb24mJih0PSgwLHIuZ2V0KSh0aGlzLCJy
b3V0ZXIiKSwoMCxyLnNldCkodCwibG9jYXRpb24iLGUubG9jYXRpb24pKSx0aGlzLmFwcGxpY2F0
aW9uLnJ1bkluc3RhbmNlSW5pdGlhbGl6ZXJzKHRoaXMpLGUuaXNJbnRlcmFjdGl2ZSYmdGhpcy5z
ZXR1cEV2ZW50RGlzcGF0Y2hlcigpLHRoaXMuX2Jvb3RlZD0hMCx0aGlzKX0sc2V0dXBSZWdpc3Ry
eTpmdW5jdGlvbihlKXt0aGlzLmNvbnN0cnVjdG9yLnNldHVwUmVnaXN0cnkodGhpcy5fX3JlZ2lz
dHJ5X18sZSl9LHJvdXRlcjooMCxyLmNvbXB1dGVkKShmdW5jdGlvbigpe3JldHVybiB0aGlzLmxv
b2t1cCgicm91dGVyOm1haW4iKX0pLnJlYWRPbmx5KCksZGlkQ3JlYXRlUm9vdFZpZXc6ZnVuY3Rp
b24oZSl7ZS5hcHBlbmRUbyh0aGlzLnJvb3RFbGVtZW50KX0sc3RhcnRSb3V0aW5nOmZ1bmN0aW9u
KCl7KDAsci5nZXQpKHRoaXMsInJvdXRlciIpLnN0YXJ0Um91dGluZygpLHRoaXMuX2RpZFNldHVw
Um91dGVyPSEwfSxzZXR1cFJvdXRlcjpmdW5jdGlvbigpe2lmKCF0aGlzLl9kaWRTZXR1cFJvdXRl
cil7dGhpcy5fZGlkU2V0dXBSb3V0ZXI9ITA7KDAsci5nZXQpKHRoaXMsInJvdXRlciIpLnNldHVw
Um91dGVyKCl9fSxoYW5kbGVVUkw6ZnVuY3Rpb24oZSl7dmFyIHQ9KDAsci5nZXQpKHRoaXMsInJv
dXRlciIpCityZXR1cm4gdGhpcy5zZXR1cFJvdXRlcigpLHQuaGFuZGxlVVJMKGUpfSxzZXR1cEV2
ZW50RGlzcGF0Y2hlcjpmdW5jdGlvbigpe3ZhciBlPXRoaXMubG9va3VwKCJldmVudF9kaXNwYXRj
aGVyOm1haW4iKSxuPSgwLHIuZ2V0KSh0aGlzLmFwcGxpY2F0aW9uLCJjdXN0b21FdmVudHMiKSxp
PSgwLHIuZ2V0KSh0aGlzLCJjdXN0b21FdmVudHMiKSxvPSgwLHQuYXNzaWduKSh7fSxuLGkpCity
ZXR1cm4gZS5zZXR1cChvLHRoaXMucm9vdEVsZW1lbnQpLGV9LGdldFVSTDpmdW5jdGlvbigpe3Zh
ciBlPSgwLHIuZ2V0KSh0aGlzLCJyb3V0ZXIiKQorcmV0dXJuKDAsci5nZXQpKGUsInVybCIpfSx2
aXNpdDpmdW5jdGlvbihlKXt2YXIgdD10aGlzCit0aGlzLnNldHVwUm91dGVyKCkKK3ZhciBuPXRo
aXMuX19jb250YWluZXJfXy5sb29rdXAoIi1lbnZpcm9ubWVudDptYWluIiksbz0oMCxyLmdldCko
dGhpcywicm91dGVyIikscz1mdW5jdGlvbigpe3JldHVybiBuLm9wdGlvbnMuc2hvdWxkUmVuZGVy
P25ldyBpLlJTVlAuUHJvbWlzZShmdW5jdGlvbihlKXtyLnJ1bi5zY2hlZHVsZSgiYWZ0ZXJSZW5k
ZXIiLG51bGwsZSx0KX0pOnR9LGE9ZnVuY3Rpb24oZSl7aWYoZS5lcnJvcil0aHJvdyBlLmVycm9y
CitpZigiVHJhbnNpdGlvbkFib3J0ZWQiPT09ZS5uYW1lJiZvLl9yb3V0ZXJNaWNyb2xpYi5hY3Rp
dmVUcmFuc2l0aW9uKXJldHVybiBvLl9yb3V0ZXJNaWNyb2xpYi5hY3RpdmVUcmFuc2l0aW9uLnRo
ZW4ocyxhKQordGhyb3ciVHJhbnNpdGlvbkFib3J0ZWQiPT09ZS5uYW1lP25ldyBFcnJvcihlLm1l
c3NhZ2UpOmV9LHU9KDAsci5nZXQpKG8sImxvY2F0aW9uIikKK3JldHVybiB1LnNldFVSTChlKSxv
LmhhbmRsZVVSTCh1LmdldFVSTCgpKS50aGVuKHMsYSl9fSkKK2wucmVvcGVuQ2xhc3Moe3NldHVw
UmVnaXN0cnk6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1h
cmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9Cit0LnRvRW52aXJvbm1lbnR8fCh0PW5ldyB1KHQp
KSxlLnJlZ2lzdGVyKCItZW52aXJvbm1lbnQ6bWFpbiIsdC50b0Vudmlyb25tZW50KCkse2luc3Rh
bnRpYXRlOiExfSksZS5yZWdpc3Rlcigic2VydmljZTotZG9jdW1lbnQiLHQuZG9jdW1lbnQse2lu
c3RhbnRpYXRlOiExfSksdGhpcy5fc3VwZXIoZSx0KX19KSx1PWZ1bmN0aW9uKCl7dmFyIGU9YXJn
dW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9Cit0
aGlzLmpRdWVyeT1zLmpRdWVyeSx0aGlzLmlzSW50ZXJhY3RpdmU9by5lbnZpcm9ubWVudC5oYXNE
T00sdm9pZCAwIT09ZS5pc0Jyb3dzZXI/dGhpcy5pc0Jyb3dzZXI9ISFlLmlzQnJvd3Nlcjp0aGlz
LmlzQnJvd3Nlcj1vLmVudmlyb25tZW50Lmhhc0RPTSx0aGlzLmlzQnJvd3Nlcnx8KHRoaXMualF1
ZXJ5PW51bGwsdGhpcy5pc0ludGVyYWN0aXZlPSExLHRoaXMubG9jYXRpb249Im5vbmUiKSx2b2lk
IDAhPT1lLnNob3VsZFJlbmRlcj90aGlzLnNob3VsZFJlbmRlcj0hIWUuc2hvdWxkUmVuZGVyOnRo
aXMuc2hvdWxkUmVuZGVyPSEwLHRoaXMuc2hvdWxkUmVuZGVyfHwodGhpcy5qUXVlcnk9bnVsbCx0
aGlzLmlzSW50ZXJhY3RpdmU9ITEpLGUuZG9jdW1lbnQ/dGhpcy5kb2N1bWVudD1lLmRvY3VtZW50
OnRoaXMuZG9jdW1lbnQ9InVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudD9kb2N1bWVudDpudWxs
LGUucm9vdEVsZW1lbnQmJih0aGlzLnJvb3RFbGVtZW50PWUucm9vdEVsZW1lbnQpLHZvaWQgMCE9
PWUubG9jYXRpb24mJih0aGlzLmxvY2F0aW9uPWUubG9jYXRpb24pLHZvaWQgMCE9PWUualF1ZXJ5
JiYodGhpcy5qUXVlcnk9ZS5qUXVlcnkpLHZvaWQgMCE9PWUuaXNJbnRlcmFjdGl2ZSYmKHRoaXMu
aXNJbnRlcmFjdGl2ZT0hIWUuaXNJbnRlcmFjdGl2ZSl9LHUucHJvdG90eXBlLnRvRW52aXJvbm1l
bnQ9ZnVuY3Rpb24oKXt2YXIgZT0oMCx0LmFzc2lnbikoe30sby5lbnZpcm9ubWVudCkKK3JldHVy
biBlLmhhc0RPTT10aGlzLmlzQnJvd3NlcixlLmlzSW50ZXJhY3RpdmU9dGhpcy5pc0ludGVyYWN0
aXZlLGUub3B0aW9ucz10aGlzLGV9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLnByb3RvdHlwZSwi
Y29udGFpbmVyIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7
dmFyIGU9dGhpcworcmV0dXJue2xvb2t1cDpmdW5jdGlvbigpe3JldHVybiBlLmxvb2t1cC5hcHBs
eShlLGFyZ3VtZW50cyl9fX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5wcm90b3R5cGUsInJl
Z2lzdHJ5Iix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0
dXJuKDAsaS5idWlsZEZha2VSZWdpc3RyeVdpdGhEZXByZWNhdGlvbnMpKHRoaXMsIkFwcGxpY2F0
aW9uSW5zdGFuY2UiKX19KSxlLmRlZmF1bHQ9bH0pLGUoImVtYmVyLWFwcGxpY2F0aW9uL3N5c3Rl
bS9hcHBsaWNhdGlvbiIsWyJleHBvcnRzIiwiZW1iZXItYmFiZWwiLCJlbWJlci11dGlscyIsImVt
YmVyLWVudmlyb25tZW50IiwiZW1iZXItZGVidWciLCJlbWJlci1tZXRhbCIsImVtYmVyLXJ1bnRp
bWUiLCJlbWJlci12aWV3cyIsImVtYmVyLXJvdXRpbmciLCJlbWJlci1hcHBsaWNhdGlvbi9zeXN0
ZW0vYXBwbGljYXRpb24taW5zdGFuY2UiLCJjb250YWluZXIiLCJlbWJlci1hcHBsaWNhdGlvbi9z
eXN0ZW0vZW5naW5lIiwiZW1iZXItZ2xpbW1lciJdLGZ1bmN0aW9uKGUsdCxuLHIsaSxvLHMsYSx1
LGwsYyxwLGYpeyJ1c2Ugc3RyaWN0IgorZnVuY3Rpb24gaChlKXtlLnJlZ2lzdGVyKCJyb3V0ZXI6
bWFpbiIsdS5Sb3V0ZXIpLGUucmVnaXN0ZXIoIi12aWV3LXJlZ2lzdHJ5Om1haW4iLHtjcmVhdGU6
ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLmRpY3Rpb25hcnkpKG51bGwpfX0pLGUucmVnaXN0ZXIoInJv
dXRlOmJhc2ljIix1LlJvdXRlKSxlLnJlZ2lzdGVyKCJldmVudF9kaXNwYXRjaGVyOm1haW4iLGEu
RXZlbnREaXNwYXRjaGVyKSxlLmluamVjdGlvbigicm91dGVyOm1haW4iLCJuYW1lc3BhY2UiLCJh
cHBsaWNhdGlvbjptYWluIiksZS5yZWdpc3RlcigibG9jYXRpb246YXV0byIsdS5BdXRvTG9jYXRp
b24pLGUucmVnaXN0ZXIoImxvY2F0aW9uOmhhc2giLHUuSGFzaExvY2F0aW9uKSxlLnJlZ2lzdGVy
KCJsb2NhdGlvbjpoaXN0b3J5Iix1Lkhpc3RvcnlMb2NhdGlvbiksZS5yZWdpc3RlcigibG9jYXRp
b246bm9uZSIsdS5Ob25lTG9jYXRpb24pLGUucmVnaXN0ZXIoKDAsYy5wcml2YXRpemUpKG0pLHUu
QnVja2V0Q2FjaGUpfWZ1bmN0aW9uIGQoKXtnfHwoZz0hMCxyLmVudmlyb25tZW50Lmhhc0RPTSYm
ImZ1bmN0aW9uIj09dHlwZW9mIGEualF1ZXJ5JiZvLmxpYnJhcmllcy5yZWdpc3RlckNvcmVMaWJy
YXJ5KCJqUXVlcnkiLCgwLGEualF1ZXJ5KSgpLmpxdWVyeSkpfXZhciBtPSgwLHQudGFnZ2VkVGVt
cGxhdGVMaXRlcmFsTG9vc2UpKFsiLWJ1Y2tldC1jYWNoZTptYWluIl0sWyItYnVja2V0LWNhY2hl
Om1haW4iXSksZz0hMSx5PXAuZGVmYXVsdC5leHRlbmQoe3Jvb3RFbGVtZW50OiJib2R5IixldmVu
dERpc3BhdGNoZXI6bnVsbCxjdXN0b21FdmVudHM6bnVsbCxhdXRvYm9vdDohMCxfZ2xvYmFsc01v
ZGU6ITAsaW5pdDpmdW5jdGlvbigpe3RoaXMuX3N1cGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0
aGlzLiR8fCh0aGlzLiQ9YS5qUXVlcnkpLGQoKSx0aGlzLl9yZWFkaW5lc3NEZWZlcnJhbHM9MSx0
aGlzLl9ib290ZWQ9ITEsdGhpcy5hdXRvYm9vdD10aGlzLl9nbG9iYWxzTW9kZT0hIXRoaXMuYXV0
b2Jvb3QsdGhpcy5fZ2xvYmFsc01vZGUmJnRoaXMuX3ByZXBhcmVGb3JHbG9iYWxzTW9kZSgpLHRo
aXMuYXV0b2Jvb3QmJnRoaXMud2FpdEZvckRPTVJlYWR5KCl9LGJ1aWxkSW5zdGFuY2U6ZnVuY3Rp
b24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1
bWVudHNbMF06e30KK3JldHVybiBlLmJhc2U9dGhpcyxlLmFwcGxpY2F0aW9uPXRoaXMsbC5kZWZh
dWx0LmNyZWF0ZShlKX0sX3ByZXBhcmVGb3JHbG9iYWxzTW9kZTpmdW5jdGlvbigpe3RoaXMuUm91
dGVyPSh0aGlzLlJvdXRlcnx8dS5Sb3V0ZXIpLmV4dGVuZCgpLHRoaXMuX2J1aWxkRGVwcmVjYXRl
ZEluc3RhbmNlKCl9LF9idWlsZERlcHJlY2F0ZWRJbnN0YW5jZTpmdW5jdGlvbigpe3ZhciBlPXRo
aXMuYnVpbGRJbnN0YW5jZSgpCit0aGlzLl9fZGVwcmVjYXRlZEluc3RhbmNlX189ZSx0aGlzLl9f
Y29udGFpbmVyX189ZS5fX2NvbnRhaW5lcl9ffSx3YWl0Rm9yRE9NUmVhZHk6ZnVuY3Rpb24oKXsh
dGhpcy4kfHx0aGlzLiQuaXNSZWFkeT9vLnJ1bi5zY2hlZHVsZSgiYWN0aW9ucyIsdGhpcywiZG9t
UmVhZHkiKTp0aGlzLiQoKS5yZWFkeShvLnJ1bi5iaW5kKHRoaXMsImRvbVJlYWR5IikpfSxkb21S
ZWFkeTpmdW5jdGlvbigpe3RoaXMuaXNEZXN0cm95ZWR8fHRoaXMuX2Jvb3RTeW5jKCl9LGRlZmVy
UmVhZGluZXNzOmZ1bmN0aW9uKCl7dGhpcy5fcmVhZGluZXNzRGVmZXJyYWxzKyt9LGFkdmFuY2VS
ZWFkaW5lc3M6ZnVuY3Rpb24oKXswPT09LS10aGlzLl9yZWFkaW5lc3NEZWZlcnJhbHMmJm8ucnVu
Lm9uY2UodGhpcyx0aGlzLmRpZEJlY29tZVJlYWR5KX0sYm9vdDpmdW5jdGlvbigpe2lmKHRoaXMu
X2Jvb3RQcm9taXNlKXJldHVybiB0aGlzLl9ib290UHJvbWlzZQordHJ5e3RoaXMuX2Jvb3RTeW5j
KCl9Y2F0Y2goZSl7fXJldHVybiB0aGlzLl9ib290UHJvbWlzZX0sX2Jvb3RTeW5jOmZ1bmN0aW9u
KCl7aWYoIXRoaXMuX2Jvb3RlZCl7dmFyIGU9dGhpcy5fYm9vdFJlc29sdmVyPW5ldyBzLlJTVlAu
ZGVmZXIKK3RoaXMuX2Jvb3RQcm9taXNlPWUucHJvbWlzZQordHJ5e3RoaXMucnVuSW5pdGlhbGl6
ZXJzKCksKDAscy5ydW5Mb2FkSG9va3MpKCJhcHBsaWNhdGlvbiIsdGhpcyksdGhpcy5hZHZhbmNl
UmVhZGluZXNzKCl9Y2F0Y2godCl7dGhyb3cgZS5yZWplY3QodCksdH19fSxyZXNldDpmdW5jdGlv
bigpe3ZhciBlPXRoaXMuX19kZXByZWNhdGVkSW5zdGFuY2VfXwordGhpcy5fcmVhZGluZXNzRGVm
ZXJyYWxzPTEsdGhpcy5fYm9vdFByb21pc2U9bnVsbCx0aGlzLl9ib290UmVzb2x2ZXI9bnVsbCx0
aGlzLl9ib290ZWQ9ITEsby5ydW4uam9pbih0aGlzLGZ1bmN0aW9uKCl7KDAsby5ydW4pKGUsImRl
c3Ryb3kiKSx0aGlzLl9idWlsZERlcHJlY2F0ZWRJbnN0YW5jZSgpLG8ucnVuLnNjaGVkdWxlKCJh
Y3Rpb25zIix0aGlzLCJfYm9vdFN5bmMiKX0pfSxkaWRCZWNvbWVSZWFkeTpmdW5jdGlvbigpe3Zh
ciBlCit0cnl7KDAsaS5pc1Rlc3RpbmcpKCl8fChzLk5hbWVzcGFjZS5wcm9jZXNzQWxsKCksKDAs
cy5zZXROYW1lc3BhY2VTZWFyY2hEaXNhYmxlZCkoITApKSx0aGlzLmF1dG9ib290JiYoZT12b2lk
IDAsZT10aGlzLl9nbG9iYWxzTW9kZT90aGlzLl9fZGVwcmVjYXRlZEluc3RhbmNlX186dGhpcy5i
dWlsZEluc3RhbmNlKCksZS5fYm9vdFN5bmMoKSx0aGlzLnJlYWR5KCksZS5zdGFydFJvdXRpbmco
KSksdGhpcy5fYm9vdFJlc29sdmVyLnJlc29sdmUodGhpcyksdGhpcy5fYm9vdGVkPSEwfWNhdGNo
KGUpe3Rocm93IHRoaXMuX2Jvb3RSZXNvbHZlci5yZWplY3QoZSksZX19LHJlYWR5OmZ1bmN0aW9u
KCl7cmV0dXJuIHRoaXN9LHdpbGxEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fc3VwZXIuYXBwbHko
dGhpcyxhcmd1bWVudHMpLCgwLHMuc2V0TmFtZXNwYWNlU2VhcmNoRGlzYWJsZWQpKCExKSx0aGlz
Ll9ib290ZWQ9ITEsdGhpcy5fYm9vdFByb21pc2U9bnVsbCx0aGlzLl9ib290UmVzb2x2ZXI9bnVs
bCxzLl9sb2FkZWQuYXBwbGljYXRpb249PT10aGlzJiYocy5fbG9hZGVkLmFwcGxpY2F0aW9uPXZv
aWQgMCksdGhpcy5fZ2xvYmFsc01vZGUmJnRoaXMuX19kZXByZWNhdGVkSW5zdGFuY2VfXyYmdGhp
cy5fX2RlcHJlY2F0ZWRJbnN0YW5jZV9fLmRlc3Ryb3koKX0sdmlzaXQ6ZnVuY3Rpb24oZSx0KXt2
YXIgbj10aGlzCityZXR1cm4gdGhpcy5ib290KCkudGhlbihmdW5jdGlvbigpe3ZhciByPW4uYnVp
bGRJbnN0YW5jZSgpCityZXR1cm4gci5ib290KHQpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gci52
aXNpdChlKX0pLmNhdGNoKGZ1bmN0aW9uKGUpe3Rocm93KDAsby5ydW4pKHIsImRlc3Ryb3kiKSxl
fSl9KX19KQorT2JqZWN0LmRlZmluZVByb3BlcnR5KHkucHJvdG90eXBlLCJyZWdpc3RyeSIse2Nv
bmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybigwLHMuYnVp
bGRGYWtlUmVnaXN0cnlXaXRoRGVwcmVjYXRpb25zKSh0aGlzLCJBcHBsaWNhdGlvbiIpfX0pLHku
cmVvcGVuQ2xhc3Moe2J1aWxkUmVnaXN0cnk6ZnVuY3Rpb24oKXthcmd1bWVudHMubGVuZ3RoPjEm
JnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdCit2YXIgZT10aGlzLl9zdXBlci5h
cHBseSh0aGlzLGFyZ3VtZW50cykKK3JldHVybiBoKGUpLCgwLGYuc2V0dXBBcHBsaWNhdGlvblJl
Z2lzdHJ5KShlKSxlfX0pLGUuZGVmYXVsdD15fSksZSgiZW1iZXItYXBwbGljYXRpb24vc3lzdGVt
L2VuZ2luZS1pbnN0YW5jZSIsWyJleHBvcnRzIiwiZW1iZXItYmFiZWwiLCJlbWJlci11dGlscyIs
ImVtYmVyLXJ1bnRpbWUiLCJlbWJlci1kZWJ1ZyIsImVtYmVyLW1ldGFsIiwiY29udGFpbmVyIiwi
ZW1iZXItYXBwbGljYXRpb24vc3lzdGVtL2VuZ2luZS1wYXJlbnQiXSxmdW5jdGlvbihlLHQsbixy
LGksbyxzLGEpeyJ1c2Ugc3RyaWN0IgordmFyIHU9KDAsdC50YWdnZWRUZW1wbGF0ZUxpdGVyYWxM
b29zZSkoWyItYnVja2V0LWNhY2hlOm1haW4iXSxbIi1idWNrZXQtY2FjaGU6bWFpbiJdKSxsPXIu
T2JqZWN0LmV4dGVuZChyLlJlZ2lzdHJ5UHJveHlNaXhpbixyLkNvbnRhaW5lclByb3h5TWl4aW4s
e2Jhc2U6bnVsbCxpbml0OmZ1bmN0aW9uKCl7dGhpcy5fc3VwZXIuYXBwbHkodGhpcyxhcmd1bWVu
dHMpLCgwLG4uZ3VpZEZvcikodGhpcykKK3ZhciBlPXRoaXMuYmFzZQorZXx8KGU9dGhpcy5hcHBs
aWNhdGlvbix0aGlzLmJhc2U9ZSkKK3ZhciB0PXRoaXMuX19yZWdpc3RyeV9fPW5ldyBzLlJlZ2lz
dHJ5KHtmYWxsYmFjazplLl9fcmVnaXN0cnlfX30pCit0aGlzLl9fY29udGFpbmVyX189dC5jb250
YWluZXIoe293bmVyOnRoaXN9KSx0aGlzLl9ib290ZWQ9ITF9LGJvb3Q6ZnVuY3Rpb24oZSl7dmFy
IHQ9dGhpcworcmV0dXJuIHRoaXMuX2Jvb3RQcm9taXNlP3RoaXMuX2Jvb3RQcm9taXNlOih0aGlz
Ll9ib290UHJvbWlzZT1uZXcgci5SU1ZQLlByb21pc2UoZnVuY3Rpb24obil7cmV0dXJuIG4odC5f
Ym9vdFN5bmMoZSkpfSksdGhpcy5fYm9vdFByb21pc2UpfSxfYm9vdFN5bmM6ZnVuY3Rpb24oZSl7
cmV0dXJuIHRoaXMuX2Jvb3RlZD90aGlzOih0aGlzLmNsb25lUGFyZW50RGVwZW5kZW5jaWVzKCks
dGhpcy5zZXR1cFJlZ2lzdHJ5KGUpLHRoaXMuYmFzZS5ydW5JbnN0YW5jZUluaXRpYWxpemVycyh0
aGlzKSx0aGlzLl9ib290ZWQ9ITAsdGhpcyl9LHNldHVwUmVnaXN0cnk6ZnVuY3Rpb24oKXt2YXIg
ZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06
dGhpcy5fX2NvbnRhaW5lcl9fLmxvb2t1cCgiLWVudmlyb25tZW50Om1haW4iKQordGhpcy5jb25z
dHJ1Y3Rvci5zZXR1cFJlZ2lzdHJ5KHRoaXMuX19yZWdpc3RyeV9fLGUpfSx1bnJlZ2lzdGVyOmZ1
bmN0aW9uKGUpe3RoaXMuX19jb250YWluZXJfXy5yZXNldChlKSx0aGlzLl9zdXBlci5hcHBseSh0
aGlzLGFyZ3VtZW50cyl9LGJ1aWxkQ2hpbGRFbmdpbmVJbnN0YW5jZTpmdW5jdGlvbihlKXt2YXIg
dD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06
e30sbj10aGlzLmxvb2t1cCgiZW5naW5lOiIrZSkKK2lmKCFuKXRocm93IG5ldyBpLkVycm9yKCJZ
b3UgYXR0ZW1wdGVkIHRvIG1vdW50IHRoZSBlbmdpbmUgJyIrZSsiJywgYnV0IGl0IGlzIG5vdCBy
ZWdpc3RlcmVkIHdpdGggaXRzIHBhcmVudC4iKQordmFyIHI9bi5idWlsZEluc3RhbmNlKHQpCity
ZXR1cm4oMCxhLnNldEVuZ2luZVBhcmVudCkocix0aGlzKSxyfSxjbG9uZVBhcmVudERlcGVuZGVu
Y2llczpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD0oMCxhLmdldEVuZ2luZVBhcmVudCkodGhpcyk7
WyJyb3V0ZTpiYXNpYyIsInNlcnZpY2U6LXJvdXRpbmciLCJzZXJ2aWNlOi1nbGltbWVyLWVudmly
b25tZW50Il0uZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gZS5yZWdpc3RlcihuLHQucmVzb2x2
ZVJlZ2lzdHJhdGlvbihuKSl9KQordmFyIG49dC5sb29rdXAoIi1lbnZpcm9ubWVudDptYWluIikK
K3RoaXMucmVnaXN0ZXIoIi1lbnZpcm9ubWVudDptYWluIixuLHtpbnN0YW50aWF0ZTohMX0pLFsi
cm91dGVyOm1haW4iLCgwLHMucHJpdmF0aXplKSh1KSwiLXZpZXctcmVnaXN0cnk6bWFpbiIsInJl
bmRlcmVyOi0iKyhuLmlzSW50ZXJhY3RpdmU/ImRvbSI6ImluZXJ0IiksInNlcnZpY2U6LWRvY3Vt
ZW50IiwiZXZlbnRfZGlzcGF0Y2hlcjptYWluIl0uZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4g
ZS5yZWdpc3RlcihuLHQubG9va3VwKG4pLHtpbnN0YW50aWF0ZTohMX0pfSksdGhpcy5pbmplY3Qo
InZpZXciLCJfZW52aXJvbm1lbnQiLCItZW52aXJvbm1lbnQ6bWFpbiIpLHRoaXMuaW5qZWN0KCJy
b3V0ZSIsIl9lbnZpcm9ubWVudCIsIi1lbnZpcm9ubWVudDptYWluIil9fSkKK2wucmVvcGVuQ2xh
c3Moe3NldHVwUmVnaXN0cnk6ZnVuY3Rpb24oZSx0KXt0JiYoZS5pbmplY3Rpb24oInZpZXciLCJf
ZW52aXJvbm1lbnQiLCItZW52aXJvbm1lbnQ6bWFpbiIpLGUuaW5qZWN0aW9uKCJyb3V0ZSIsIl9l
bnZpcm9ubWVudCIsIi1lbnZpcm9ubWVudDptYWluIiksdC5pc0ludGVyYWN0aXZlPyhlLmluamVj
dGlvbigidmlldyIsInJlbmRlcmVyIiwicmVuZGVyZXI6LWRvbSIpLGUuaW5qZWN0aW9uKCJjb21w
b25lbnQiLCJyZW5kZXJlciIsInJlbmRlcmVyOi1kb20iKSk6KGUuaW5qZWN0aW9uKCJ2aWV3Iiwi
cmVuZGVyZXIiLCJyZW5kZXJlcjotaW5lcnQiKSxlLmluamVjdGlvbigiY29tcG9uZW50IiwicmVu
ZGVyZXIiLCJyZW5kZXJlcjotaW5lcnQiKSkpfX0pLGUuZGVmYXVsdD1sfSksZSgiZW1iZXItYXBw
bGljYXRpb24vc3lzdGVtL2VuZ2luZS1wYXJlbnQiLFsiZXhwb3J0cyIsImVtYmVyLXV0aWxzIl0s
ZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCIKK2UuRU5HSU5FX1BBUkVOVD12b2lkIDAsZS5nZXRF
bmdpbmVQYXJlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGVbbl19LGUuc2V0RW5naW5lUGFyZW50PWZ1
bmN0aW9uKGUsdCl7ZVtuXT10fQordmFyIG49ZS5FTkdJTkVfUEFSRU5UPSgwLHQuc3ltYm9sKSgi
RU5HSU5FX1BBUkVOVCIpfSksZSgiZW1iZXItYXBwbGljYXRpb24vc3lzdGVtL2VuZ2luZSIsWyJl
eHBvcnRzIiwiZW1iZXItYmFiZWwiLCJlbWJlci11dGlscyIsImVtYmVyLXJ1bnRpbWUiLCJjb250
YWluZXIiLCJkYWctbWFwIiwiZW1iZXItZGVidWciLCJlbWJlci1tZXRhbCIsImVtYmVyLWFwcGxp
Y2F0aW9uL3N5c3RlbS9yZXNvbHZlciIsImVtYmVyLWFwcGxpY2F0aW9uL3N5c3RlbS9lbmdpbmUt
aW5zdGFuY2UiLCJlbWJlci1yb3V0aW5nIiwiZW1iZXItZXh0ZW5zaW9uLXN1cHBvcnQiLCJlbWJl
ci12aWV3cyIsImVtYmVyLWdsaW1tZXIiXSxmdW5jdGlvbihlLHQsbixyLGksbyxzLGEsdSxsLGMs
cCxmLGgpeyJ1c2Ugc3RyaWN0IgorZnVuY3Rpb24gZChlKXt2YXIgdD1bXQorZm9yKHZhciBuIGlu
IGUpdC5wdXNoKG4pCityZXR1cm4gdH1mdW5jdGlvbiBtKGUpe3JldHVybihlLmdldCgiUmVzb2x2
ZXIiKXx8dS5kZWZhdWx0KS5jcmVhdGUoe25hbWVzcGFjZTplfSl9ZnVuY3Rpb24gZyhlLHQpe3Jl
dHVybiBmdW5jdGlvbih0KXt2YXIgbgordm9pZCAwIT09dGhpcy5zdXBlcmNsYXNzW2VdJiZ0aGlz
LnN1cGVyY2xhc3NbZV09PT10aGlzW2VdJiYobj17fSxuW2VdPU9iamVjdC5jcmVhdGUodGhpc1tl
XSksdGhpcy5yZW9wZW5DbGFzcyhuKSksdGhpc1tlXVt0Lm5hbWVdPXR9fWZ1bmN0aW9uIHkoZSl7
ZS5vcHRpb25zRm9yVHlwZSgiY29tcG9uZW50Iix7c2luZ2xldG9uOiExfSksZS5vcHRpb25zRm9y
VHlwZSgidmlldyIse3NpbmdsZXRvbjohMX0pLGUucmVnaXN0ZXIoImNvbnRyb2xsZXI6YmFzaWMi
LHIuQ29udHJvbGxlcix7aW5zdGFudGlhdGU6ITF9KSxlLmluamVjdGlvbigidmlldyIsIl92aWV3
UmVnaXN0cnkiLCItdmlldy1yZWdpc3RyeTptYWluIiksZS5pbmplY3Rpb24oInJlbmRlcmVyIiwi
X3ZpZXdSZWdpc3RyeSIsIi12aWV3LXJlZ2lzdHJ5Om1haW4iKSxlLmluamVjdGlvbigiZXZlbnRf
ZGlzcGF0Y2hlcjptYWluIiwiX3ZpZXdSZWdpc3RyeSIsIi12aWV3LXJlZ2lzdHJ5Om1haW4iKSxl
LmluamVjdGlvbigicm91dGUiLCJfdG9wTGV2ZWxWaWV3VGVtcGxhdGUiLCJ0ZW1wbGF0ZTotb3V0
bGV0IiksZS5pbmplY3Rpb24oInZpZXc6LW91dGxldCIsIm5hbWVzcGFjZSIsImFwcGxpY2F0aW9u
Om1haW4iKSxlLmluamVjdGlvbigiY29udHJvbGxlciIsInRhcmdldCIsInJvdXRlcjptYWluIiks
ZS5pbmplY3Rpb24oImNvbnRyb2xsZXIiLCJuYW1lc3BhY2UiLCJhcHBsaWNhdGlvbjptYWluIiks
ZS5pbmplY3Rpb24oInJvdXRlciIsIl9idWNrZXRDYWNoZSIsKDAsaS5wcml2YXRpemUpKHYpKSxl
LmluamVjdGlvbigicm91dGUiLCJfYnVja2V0Q2FjaGUiLCgwLGkucHJpdmF0aXplKSh2KSksZS5p
bmplY3Rpb24oInJvdXRlIiwicm91dGVyIiwicm91dGVyOm1haW4iKSxlLnJlZ2lzdGVyKCJzZXJ2
aWNlOi1yb3V0aW5nIixjLlJvdXRpbmdTZXJ2aWNlKSxlLmluamVjdGlvbigic2VydmljZTotcm91
dGluZyIsInJvdXRlciIsInJvdXRlcjptYWluIiksZS5yZWdpc3RlcigicmVzb2x2ZXItZm9yLWRl
YnVnZ2luZzptYWluIixlLnJlc29sdmVyLHtpbnN0YW50aWF0ZTohMX0pLGUuaW5qZWN0aW9uKCJj
b250YWluZXItZGVidWctYWRhcHRlcjptYWluIiwicmVzb2x2ZXIiLCJyZXNvbHZlci1mb3ItZGVi
dWdnaW5nOm1haW4iKSxlLmluamVjdGlvbigiZGF0YS1hZGFwdGVyOm1haW4iLCJjb250YWluZXJE
ZWJ1Z0FkYXB0ZXIiLCJjb250YWluZXItZGVidWctYWRhcHRlcjptYWluIiksZS5yZWdpc3Rlcigi
Y29udGFpbmVyLWRlYnVnLWFkYXB0ZXI6bWFpbiIscC5Db250YWluZXJEZWJ1Z0FkYXB0ZXIpLGUu
cmVnaXN0ZXIoImNvbXBvbmVudC1sb29rdXA6bWFpbiIsZi5Db21wb25lbnRMb29rdXApfXZhciB2
PSgwLHQudGFnZ2VkVGVtcGxhdGVMaXRlcmFsTG9vc2UpKFsiLWJ1Y2tldC1jYWNoZTptYWluIl0s
WyItYnVja2V0LWNhY2hlOm1haW4iXSksYj1yLk5hbWVzcGFjZS5leHRlbmQoci5SZWdpc3RyeVBy
b3h5TWl4aW4se2luaXQ6ZnVuY3Rpb24oKXt0aGlzLl9zdXBlci5hcHBseSh0aGlzLGFyZ3VtZW50
cyksdGhpcy5idWlsZFJlZ2lzdHJ5KCl9LF9pbml0aWFsaXplcnNSYW46ITEsZW5zdXJlSW5pdGlh
bGl6ZXJzOmZ1bmN0aW9uKCl7dGhpcy5faW5pdGlhbGl6ZXJzUmFufHwodGhpcy5ydW5Jbml0aWFs
aXplcnMoKSx0aGlzLl9pbml0aWFsaXplcnNSYW49ITApfSxidWlsZEluc3RhbmNlOmZ1bmN0aW9u
KCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1l
bnRzWzBdOnt9CityZXR1cm4gdGhpcy5lbnN1cmVJbml0aWFsaXplcnMoKSxlLmJhc2U9dGhpcyxs
LmRlZmF1bHQuY3JlYXRlKGUpfSxidWlsZFJlZ2lzdHJ5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu
X19yZWdpc3RyeV9fPXRoaXMuY29uc3RydWN0b3IuYnVpbGRSZWdpc3RyeSh0aGlzKX0saW5pdGlh
bGl6ZXI6ZnVuY3Rpb24oZSl7dGhpcy5jb25zdHJ1Y3Rvci5pbml0aWFsaXplcihlKX0saW5zdGFu
Y2VJbml0aWFsaXplcjpmdW5jdGlvbihlKXt0aGlzLmNvbnN0cnVjdG9yLmluc3RhbmNlSW5pdGlh
bGl6ZXIoZSl9LHJ1bkluaXRpYWxpemVyczpmdW5jdGlvbigpe3ZhciBlPXRoaXMKK3RoaXMuX3J1
bkluaXRpYWxpemVyKCJpbml0aWFsaXplcnMiLGZ1bmN0aW9uKHQsbil7Mj09PW4uaW5pdGlhbGl6
ZS5sZW5ndGg/bi5pbml0aWFsaXplKGUuX19yZWdpc3RyeV9fLGUpOm4uaW5pdGlhbGl6ZShlKX0p
fSxydW5JbnN0YW5jZUluaXRpYWxpemVyczpmdW5jdGlvbihlKXt0aGlzLl9ydW5Jbml0aWFsaXpl
cigiaW5zdGFuY2VJbml0aWFsaXplcnMiLGZ1bmN0aW9uKHQsbil7bi5pbml0aWFsaXplKGUpfSl9
LF9ydW5Jbml0aWFsaXplcjpmdW5jdGlvbihlLHQpe3ZhciBuLHI9KDAsYS5nZXQpKHRoaXMuY29u
c3RydWN0b3IsZSksaT1kKHIpLHM9bmV3IG8uZGVmYXVsdCx1PXZvaWQgMAorZm9yKG49MDtuPGku
bGVuZ3RoO24rKyl1PXJbaVtuXV0scy5hZGQodS5uYW1lLHUsdS5iZWZvcmUsdS5hZnRlcikKK3Mu
dG9wc29ydCh0KX19KQorYi5yZW9wZW5DbGFzcyh7aW5pdGlhbGl6ZXJzOk9iamVjdC5jcmVhdGUo
bnVsbCksaW5zdGFuY2VJbml0aWFsaXplcnM6T2JqZWN0LmNyZWF0ZShudWxsKSxpbml0aWFsaXpl
cjpnKCJpbml0aWFsaXplcnMiLCJpbml0aWFsaXplciIpLGluc3RhbmNlSW5pdGlhbGl6ZXI6Zygi
aW5zdGFuY2VJbml0aWFsaXplcnMiLCJpbnN0YW5jZSBpbml0aWFsaXplciIpLGJ1aWxkUmVnaXN0
cnk6ZnVuY3Rpb24oZSl7YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0m
JmFyZ3VtZW50c1sxXQordmFyIHQ9bmV3IGkuUmVnaXN0cnkoe3Jlc29sdmVyOm0oZSl9KQorcmV0
dXJuIHQuc2V0PWEuc2V0LHQucmVnaXN0ZXIoImFwcGxpY2F0aW9uOm1haW4iLGUse2luc3RhbnRp
YXRlOiExfSkseSh0KSwoMCxoLnNldHVwRW5naW5lUmVnaXN0cnkpKHQpLHR9LHJlc29sdmVyOm51
bGwsUmVzb2x2ZXI6bnVsbH0pLGUuZGVmYXVsdD1ifSksZSgiZW1iZXItYXBwbGljYXRpb24vc3lz
dGVtL3Jlc29sdmVyIixbImV4cG9ydHMiLCJlbWJlci11dGlscyIsImVtYmVyLW1ldGFsIiwiZW1i
ZXItZGVidWciLCJlbWJlci1ydW50aW1lIiwiZW1iZXItYXBwbGljYXRpb24vdXRpbHMvdmFsaWRh
dGUtdHlwZSIsImVtYmVyLWdsaW1tZXIiXSxmdW5jdGlvbihlLHQsbixyLGksbyxzKXsidXNlIHN0
cmljdCIKK2UuUmVzb2x2ZXI9dm9pZCAwLGUuUmVzb2x2ZXI9aS5PYmplY3QuZXh0ZW5kKHtuYW1l
c3BhY2U6bnVsbCxub3JtYWxpemU6bnVsbCxyZXNvbHZlOm51bGwscGFyc2VOYW1lOm51bGwsbG9v
a3VwRGVzY3JpcHRpb246bnVsbCxtYWtlVG9TdHJpbmc6bnVsbCxyZXNvbHZlT3RoZXI6bnVsbCxf
bG9nTG9va3VwOm51bGx9KSxlLmRlZmF1bHQ9aS5PYmplY3QuZXh0ZW5kKHtuYW1lc3BhY2U6bnVs
bCxpbml0OmZ1bmN0aW9uKCl7dGhpcy5fcGFyc2VOYW1lQ2FjaGU9KDAsdC5kaWN0aW9uYXJ5KShu
dWxsKX0sbm9ybWFsaXplOmZ1bmN0aW9uKGUpe3ZhciB0LG49ZS5zcGxpdCgiOiIsMikscj1uWzBd
LGk9blsxXQorcmV0dXJuInRlbXBsYXRlIiE9PXI/KHQ9aSx0LmluZGV4T2YoIi4iKT4tMSYmKHQ9
dC5yZXBsYWNlKC9cLiguKS9nLGZ1bmN0aW9uKGUpe3JldHVybiBlLmNoYXJBdCgxKS50b1VwcGVy
Q2FzZSgpfSkpLGkuaW5kZXhPZigiXyIpPi0xJiYodD10LnJlcGxhY2UoL18oLikvZyxmdW5jdGlv
bihlKXtyZXR1cm4gZS5jaGFyQXQoMSkudG9VcHBlckNhc2UoKX0pKSxpLmluZGV4T2YoIi0iKT4t
MSYmKHQ9dC5yZXBsYWNlKC8tKC4pL2csZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2hhckF0KDEpLnRv
VXBwZXJDYXNlKCl9KSkscisiOiIrdCk6ZX0scmVzb2x2ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlz
LnBhcnNlTmFtZShlKSxuPXQucmVzb2x2ZU1ldGhvZE5hbWUscj12b2lkIDAKK3JldHVybiB0aGlz
W25dJiYocj10aGlzW25dKHQpKSxyPXJ8fHRoaXMucmVzb2x2ZU90aGVyKHQpLHImJigwLG8uZGVm
YXVsdCkocix0KSxyfSxwYXJzZU5hbWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcnNlTmFt
ZUNhY2hlW2VdfHwodGhpcy5fcGFyc2VOYW1lQ2FjaGVbZV09dGhpcy5fcGFyc2VOYW1lKGUpKX0s
X3BhcnNlTmFtZTpmdW5jdGlvbihlKXt2YXIgdCxyLG89ZS5zcGxpdCgiOiIpLHM9b1swXSxhPW9b
MV0sdT1hLGw9KDAsbi5nZXQpKHRoaXMsIm5hbWVzcGFjZSIpLGM9bCxwPXUubGFzdEluZGV4T2Yo
Ii8iKSxmPS0xIT09cD91LnNsaWNlKDAscCk6bnVsbAorInRlbXBsYXRlIiE9PXMmJi0xIT09cCYm
KHQ9dS5zcGxpdCgiLyIpLHU9dFt0Lmxlbmd0aC0xXSxyPWkuU3RyaW5nLmNhcGl0YWxpemUodC5z
bGljZSgwLC0xKS5qb2luKCIuIikpLGM9aS5OYW1lc3BhY2UuYnlOYW1lKHIpKQordmFyIGg9Im1h
aW4iPT09YT8iTWFpbiI6aS5TdHJpbmcuY2xhc3NpZnkocykKK2lmKCF1fHwhcyl0aHJvdyBuZXcg
VHlwZUVycm9yKCJJbnZhbGlkIGZ1bGxOYW1lOiBgIitlKyJgLCBtdXN0IGJlIG9mIHRoZSBmb3Jt
IGB0eXBlOm5hbWVgICIpCityZXR1cm57ZnVsbE5hbWU6ZSx0eXBlOnMsZnVsbE5hbWVXaXRob3V0
VHlwZTphLGRpcm5hbWU6ZixuYW1lOnUscm9vdDpjLHJlc29sdmVNZXRob2ROYW1lOiJyZXNvbHZl
IitofX0sbG9va3VwRGVzY3JpcHRpb246ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wYXJzZU5hbWUo
ZSksbj12b2lkIDAKK3JldHVybiJ0ZW1wbGF0ZSI9PT10LnR5cGU/InRlbXBsYXRlIGF0ICIrdC5m
dWxsTmFtZVdpdGhvdXRUeXBlLnJlcGxhY2UoL1wuL2csIi8iKToobj10LnJvb3QrIi4iK2kuU3Ry
aW5nLmNsYXNzaWZ5KHQubmFtZSkucmVwbGFjZSgvXC4vZywiIiksIm1vZGVsIiE9PXQudHlwZSYm
KG4rPWkuU3RyaW5nLmNsYXNzaWZ5KHQudHlwZSkpLG4pfSxtYWtlVG9TdHJpbmc6ZnVuY3Rpb24o
ZSl7cmV0dXJuIGUudG9TdHJpbmcoKX0sdXNlUm91dGVyTmFtaW5nOmZ1bmN0aW9uKGUpe2UubmFt
ZT1lLm5hbWUucmVwbGFjZSgvXC4vZywiXyIpLCJiYXNpYyI9PT1lLm5hbWUmJihlLm5hbWU9IiIp
fSxyZXNvbHZlVGVtcGxhdGU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5mdWxsTmFtZVdpdGhvdXRUeXBl
LnJlcGxhY2UoL1wuL2csIi8iKQorcmV0dXJuKDAscy5nZXRUZW1wbGF0ZSkodCl8fCgwLHMuZ2V0
VGVtcGxhdGUpKGkuU3RyaW5nLmRlY2FtZWxpemUodCkpfSxyZXNvbHZlVmlldzpmdW5jdGlvbihl
KXtyZXR1cm4gdGhpcy51c2VSb3V0ZXJOYW1pbmcoZSksdGhpcy5yZXNvbHZlT3RoZXIoZSl9LHJl
c29sdmVDb250cm9sbGVyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnVzZVJvdXRlck5hbWluZyhl
KSx0aGlzLnJlc29sdmVPdGhlcihlKX0scmVzb2x2ZVJvdXRlOmZ1bmN0aW9uKGUpe3JldHVybiB0
aGlzLnVzZVJvdXRlck5hbWluZyhlKSx0aGlzLnJlc29sdmVPdGhlcihlKX0scmVzb2x2ZU1vZGVs
OmZ1bmN0aW9uKGUpe3ZhciB0PWkuU3RyaW5nLmNsYXNzaWZ5KGUubmFtZSkKK3JldHVybigwLG4u
Z2V0KShlLnJvb3QsdCl9LHJlc29sdmVIZWxwZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmVz
b2x2ZU90aGVyKGUpfSxyZXNvbHZlT3RoZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9aS5TdHJpbmcuY2xh
c3NpZnkoZS5uYW1lKStpLlN0cmluZy5jbGFzc2lmeShlLnR5cGUpCityZXR1cm4oMCxuLmdldCko
ZS5yb290LHQpfSxyZXNvbHZlTWFpbjpmdW5jdGlvbihlKXt2YXIgdD1pLlN0cmluZy5jbGFzc2lm
eShlLnR5cGUpCityZXR1cm4oMCxuLmdldCkoZS5yb290LHQpfSxfbG9nTG9va3VwOmZ1bmN0aW9u
KGUsdCl7dmFyIG49dm9pZCAwLGk9dm9pZCAwCituPWU/IlvinJNdIjoiWyBdIixpPXQuZnVsbE5h
bWUubGVuZ3RoPjYwPyIuIjpuZXcgQXJyYXkoNjAtdC5mdWxsTmFtZS5sZW5ndGgpLmpvaW4oIi4i
KSwoMCxyLmluZm8pKG4sdC5mdWxsTmFtZSxpLHRoaXMubG9va3VwRGVzY3JpcHRpb24odC5mdWxs
TmFtZSkpfSxrbm93bkZvclR5cGU6ZnVuY3Rpb24oZSl7dmFyIHIsbyxzLGE9KDAsbi5nZXQpKHRo
aXMsIm5hbWVzcGFjZSIpLHU9aS5TdHJpbmcuY2xhc3NpZnkoZSksbD1uZXcgUmVnRXhwKHUrIiQi
KSxjPSgwLHQuZGljdGlvbmFyeSkobnVsbCkscD1PYmplY3Qua2V5cyhhKQorZm9yKHI9MDtyPHAu
bGVuZ3RoO3IrKylvPXBbcl0sbC50ZXN0KG8pJiYocz10aGlzLnRyYW5zbGF0ZVRvQ29udGFpbmVy
RnVsbG5hbWUoZSxvKSxjW3NdPSEwKQorcmV0dXJuIGN9LHRyYW5zbGF0ZVRvQ29udGFpbmVyRnVs
bG5hbWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj1pLlN0cmluZy5jbGFzc2lmeShlKSxyPXQuc2xpY2Uo
MCwtMSpuLmxlbmd0aCkKK3JldHVybiBlKyI6IitpLlN0cmluZy5kYXNoZXJpemUocil9fSl9KSxl
KCJlbWJlci1hcHBsaWNhdGlvbi91dGlscy92YWxpZGF0ZS10eXBlIixbImV4cG9ydHMiLCJlbWJl
ci1kZWJ1ZyJdLGZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiCitlLmRlZmF1bHQ9ZnVuY3Rpb24o
ZSx0KXt2YXIgcj1uW3QudHlwZV0KK2lmKHIpe3JbMF0sclsxXSxyWzJdfX0KK3ZhciBuPXtyb3V0
ZTpbImFzc2VydCIsImlzUm91dGVGYWN0b3J5IiwiRW1iZXIuUm91dGUiXSxjb21wb25lbnQ6WyJk
ZXByZWNhdGUiLCJpc0NvbXBvbmVudEZhY3RvcnkiLCJFbWJlci5Db21wb25lbnQiXSx2aWV3Olsi
ZGVwcmVjYXRlIiwiaXNWaWV3RmFjdG9yeSIsIkVtYmVyLlZpZXciXSxzZXJ2aWNlOlsiZGVwcmVj
YXRlIiwiaXNTZXJ2aWNlRmFjdG9yeSIsIkVtYmVyLlNlcnZpY2UiXX19KSxlKCJlbWJlci1iYWJl
bCIsWyJleHBvcnRzIl0sZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiCitmdW5jdGlvbiB0KGUsdCl7
ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3Zh
bHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmKE9i
amVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KTpvKGUsdCkpfWZ1
bmN0aW9uIG4oZSx0KXtyZXR1cm4gZS5yYXc9dCxlfWZ1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49
MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXQorci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8
ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19ZnVuY3Rpb24gaShlLHQsbil7cmV0dXJuIHQmJnIo
ZS5wcm90b3R5cGUsdCksbiYmcihlLG4pLGV9ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgbj1PYmpl
Y3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KSxyPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBpPW5bcl0s
bz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsaSkKK28mJm8uY29uZmlndXJhYmxl
JiZ2b2lkIDA9PT1lW2ldJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxpLG8pfXJldHVybiBlfWUu
aW5oZXJpdHM9dCxlLnRhZ2dlZFRlbXBsYXRlTGl0ZXJhbExvb3NlPW4sZS5jcmVhdGVDbGFzcz1p
LGUuZGVmYXVsdHM9bworZS5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuPWZ1bmN0aW9uKGUsdCl7
cmV0dXJuIXR8fCJvYmplY3QiIT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZTp0fSxl
LnNsaWNlPUFycmF5LnByb3RvdHlwZS5zbGljZX0pLGUoImVtYmVyLWNvbnNvbGUiLFsiZXhwb3J0
cyIsImVtYmVyLWVudmlyb25tZW50Il0sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCIKK2Z1bmN0
aW9uIG4oKXt9ZnVuY3Rpb24gcihlKXt2YXIgbj12b2lkIDAKK3QuY29udGV4dC5pbXBvcnRzLmNv
bnNvbGU/bj10LmNvbnRleHQuaW1wb3J0cy5jb25zb2xlOiJ1bmRlZmluZWQiIT10eXBlb2YgY29u
c29sZSYmKG49Y29uc29sZSkKK3ZhciByPSJvYmplY3QiPT10eXBlb2Ygbj9uW2VdOm51bGwKK2lm
KCJmdW5jdGlvbiI9PXR5cGVvZiByKXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiByLmJpbmQ/ci5i
aW5kKG4pOmZ1bmN0aW9uKCl7ci5hcHBseShuLGFyZ3VtZW50cyl9fXZhciBpPXtsb2c6cigibG9n
Iil8fG4sd2FybjpyKCJ3YXJuIil8fG4sZXJyb3I6cigiZXJyb3IiKXx8bixpbmZvOnIoImluZm8i
KXx8bixkZWJ1ZzpyKCJkZWJ1ZyIpfHxyKCJpbmZvIil8fG4sYXNzZXJ0OnIoImFzc2VydCIpfHxm
dW5jdGlvbihlLHQpe2lmKCFlKXRyeXt0aHJvdyBuZXcgRXJyb3IoImFzc2VydGlvbiBmYWlsZWQ6
ICIrdCl9Y2F0Y2goZSl7c2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IGV9LDApfX19CitlLmRl
ZmF1bHQ9aX0pLGUoImVtYmVyLWRlYnVnL2RlcHJlY2F0ZSIsWyJleHBvcnRzIiwiZW1iZXItZGVi
dWcvZXJyb3IiLCJlbWJlci1jb25zb2xlIiwiZW1iZXItZW52aXJvbm1lbnQiLCJlbWJlci1kZWJ1
Zy9oYW5kbGVycyJdLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IgorZS5taXNzaW5nT3B0aW9uc1Vu
dGlsRGVwcmVjYXRpb249ZS5taXNzaW5nT3B0aW9uc0lkRGVwcmVjYXRpb249ZS5taXNzaW5nT3B0
aW9uc0RlcHJlY2F0aW9uPWUucmVnaXN0ZXJIYW5kbGVyPXZvaWQgMCxlLmRlZmF1bHQ9dm9pZCAw
LGUucmVnaXN0ZXJIYW5kbGVyPWZ1bmN0aW9uKCl7fSxlLm1pc3NpbmdPcHRpb25zRGVwcmVjYXRp
b249dm9pZCAwLGUubWlzc2luZ09wdGlvbnNJZERlcHJlY2F0aW9uPXZvaWQgMCxlLm1pc3NpbmdP
cHRpb25zVW50aWxEZXByZWNhdGlvbj12b2lkIDB9KSxlKCJlbWJlci1kZWJ1Zy9lcnJvciIsWyJl
eHBvcnRzIiwiZW1iZXItYmFiZWwiXSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IgordmFyIG49
ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihyKXt2YXIgaSxvPSgwLHQucG9zc2libGVDb25zdHJ1Y3Rv
clJldHVybikodGhpcyxlLmNhbGwodGhpcykpCitpZighKG8gaW5zdGFuY2VvZiBuKSlyZXR1cm4g
aT1uZXcgbihyKSwoMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKG8saSkKK3ZhciBzPUVy
cm9yLmNhbGwobyxyKQorcmV0dXJuIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1
cmVTdGFja1RyYWNlKG8sbik6by5zdGFjaz1zLnN0YWNrLG8uZGVzY3JpcHRpb249cy5kZXNjcmlw
dGlvbixvLmZpbGVOYW1lPXMuZmlsZU5hbWUsby5saW5lTnVtYmVyPXMubGluZU51bWJlcixvLm1l
c3NhZ2U9cy5tZXNzYWdlLG8ubmFtZT1zLm5hbWUsby5udW1iZXI9cy5udW1iZXIsby5jb2RlPXMu
Y29kZSxvfXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbn0oZnVuY3Rpb24oZSl7ZnVuY3Rpb24g
dCgpe2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0LnByb3RvdHlwZT1PYmplY3QuY3Jl
YXRlKGUucHJvdG90eXBlKSx0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10LHR9KEVycm9yKSkKK2Uu
ZGVmYXVsdD1ufSksZSgiZW1iZXItZGVidWcvZmVhdHVyZXMiLFsiZXhwb3J0cyIsImVtYmVyLWVu
dmlyb25tZW50IiwiZW1iZXIvZmVhdHVyZXMiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3Qi
CitlLmRlZmF1bHQ9ZnVuY3Rpb24oZSl7dmFyIG49cltlXQorcmV0dXJuITA9PT1ufHwhMT09PW58
fHZvaWQgMD09PW4/bjohIXQuRU5WLkVOQUJMRV9PUFRJT05BTF9GRUFUVVJFU30KK3ZhciByPW4u
RkVBVFVSRVN9KSxlKCJlbWJlci1kZWJ1Zy9oYW5kbGVycyIsWyJleHBvcnRzIl0sZnVuY3Rpb24o
ZSl7InVzZSBzdHJpY3QiCitlLkhBTkRMRVJTPXt9LGUucmVnaXN0ZXJIYW5kbGVyPWZ1bmN0aW9u
KCl7fSxlLmludm9rZT1mdW5jdGlvbigpe319KSxlKCJlbWJlci1kZWJ1Zy9pbmRleCIsWyJleHBv
cnRzIiwiZW1iZXItZGVidWcvd2FybiIsImVtYmVyLWRlYnVnL2RlcHJlY2F0ZSIsImVtYmVyLWRl
YnVnL2ZlYXR1cmVzIiwiZW1iZXItZGVidWcvZXJyb3IiLCJlbWJlci1kZWJ1Zy90ZXN0aW5nIiwi
ZW1iZXItZW52aXJvbm1lbnQiLCJlbWJlci1jb25zb2xlIiwiZW1iZXIvZmVhdHVyZXMiXSxmdW5j
dGlvbihlLHQsbixyLGksbyxzLGEsdSl7InVzZSBzdHJpY3QiCitlLl93YXJuSWZVc2luZ1N0cmlw
cGVkRmVhdHVyZUZsYWdzPWUuZ2V0RGVidWdGdW5jdGlvbj1lLnNldERlYnVnRnVuY3Rpb249ZS5k
ZXByZWNhdGVGdW5jPWUucnVuSW5EZWJ1Zz1lLmRlYnVnRnJlZXplPWUuZGVidWdTZWFsPWUuZGVw
cmVjYXRlPWUuZGVidWc9ZS53YXJuPWUuaW5mbz1lLmFzc2VydD1lLnNldFRlc3Rpbmc9ZS5pc1Rl
c3Rpbmc9ZS5FcnJvcj1lLmlzRmVhdHVyZUVuYWJsZWQ9ZS5yZWdpc3RlckRlcHJlY2F0aW9uSGFu
ZGxlcj1lLnJlZ2lzdGVyV2FybkhhbmRsZXI9dm9pZCAwLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShl
LCJyZWdpc3Rlcldhcm5IYW5kbGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1
cm4gdC5yZWdpc3RlckhhbmRsZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInJlZ2lzdGVy
RGVwcmVjYXRpb25IYW5kbGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4g
bi5yZWdpc3RlckhhbmRsZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImlzRmVhdHVyZUVu
YWJsZWQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmRlZmF1bHR9fSks
T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIkVycm9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rp
b24oKXtyZXR1cm4gaS5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJpc1Rlc3Rp
bmciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLmlzVGVzdGluZ319KSxP
YmplY3QuZGVmaW5lUHJvcGVydHkoZSwic2V0VGVzdGluZyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1
bmN0aW9uKCl7cmV0dXJuIG8uc2V0VGVzdGluZ319KQordS5ERUZBVUxUX0ZFQVRVUkVTLHUuRkVB
VFVSRVMKK2UuYXNzZXJ0PWZ1bmN0aW9uKCl7fSxlLmluZm89ZnVuY3Rpb24oKXt9LGUud2Fybj1m
dW5jdGlvbigpe30sZS5kZWJ1Zz1mdW5jdGlvbigpe30sZS5kZXByZWNhdGU9ZnVuY3Rpb24oKXt9
LGUuZGVidWdTZWFsPWZ1bmN0aW9uKCl7fSxlLmRlYnVnRnJlZXplPWZ1bmN0aW9uKCl7fSxlLnJ1
bkluRGVidWc9ZnVuY3Rpb24oKXt9LGUuZGVwcmVjYXRlRnVuYz1mdW5jdGlvbigpe3JldHVybiBh
cmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXX0sZS5zZXREZWJ1Z0Z1bmN0aW9uPWZ1bmN0aW9u
KCl7fSxlLmdldERlYnVnRnVuY3Rpb249ZnVuY3Rpb24oKXt9LGUuX3dhcm5JZlVzaW5nU3RyaXBw
ZWRGZWF0dXJlRmxhZ3M9dm9pZCAwfSksZSgiZW1iZXItZGVidWcvdGVzdGluZyIsWyJleHBvcnRz
Il0sZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiCitlLmlzVGVzdGluZz1mdW5jdGlvbigpe3JldHVy
biB0fSxlLnNldFRlc3Rpbmc9ZnVuY3Rpb24oZSl7dD0hIWV9Cit2YXIgdD0hMX0pLGUoImVtYmVy
LWRlYnVnL3dhcm4iLFsiZXhwb3J0cyIsImVtYmVyLWNvbnNvbGUiLCJlbWJlci1kZWJ1Zy9kZXBy
ZWNhdGUiLCJlbWJlci1kZWJ1Zy9oYW5kbGVycyJdLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Igor
ZS5taXNzaW5nT3B0aW9uc0RlcHJlY2F0aW9uPWUubWlzc2luZ09wdGlvbnNJZERlcHJlY2F0aW9u
PWUucmVnaXN0ZXJIYW5kbGVyPXZvaWQgMCxlLmRlZmF1bHQ9ZnVuY3Rpb24oKXt9LGUucmVnaXN0
ZXJIYW5kbGVyPWZ1bmN0aW9uKCl7fSxlLm1pc3NpbmdPcHRpb25zSWREZXByZWNhdGlvbj12b2lk
IDAsZS5taXNzaW5nT3B0aW9uc0RlcHJlY2F0aW9uPXZvaWQgMH0pLGUoImVtYmVyLWVudmlyb25t
ZW50IixbImV4cG9ydHMiXSxmdW5jdGlvbihlKXsidXNlIHN0cmljdCIKK2Z1bmN0aW9uIHQoZSl7
cmV0dXJuIGUmJmUuT2JqZWN0PT09T2JqZWN0P2U6dm9pZCAwfWZ1bmN0aW9uIG4oZSl7cmV0dXJu
ITEhPT1lfWZ1bmN0aW9uIGkoZSl7cmV0dXJuITA9PT1lfXZhciBvPXQoZnVuY3Rpb24oZSl7cmV0
dXJuIGUmJnZvaWQgMD09PWUubm9kZVR5cGU/ZTp2b2lkIDB9KCJvYmplY3QiPT10eXBlb2YgZ2xv
YmFsJiZnbG9iYWwpKXx8dCgib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYpfHx0KCJvYmplY3Qi
PT10eXBlb2Ygd2luZG93JiZ3aW5kb3cpfHxyfHxuZXcgRnVuY3Rpb24oInJldHVybiB0aGlzIiko
KSxzPSJvYmplY3QiPT10eXBlb2Ygby5FbWJlckVOViYmby5FbWJlckVOVnx8Im9iamVjdCI9PXR5
cGVvZiBvLkVOViYmby5FTlZ8fHt9CitzLkVOQUJMRV9BTExfRkVBVFVSRVMmJihzLkVOQUJMRV9P
UFRJT05BTF9GRUFUVVJFUz0hMCkscy5FWFRFTkRfUFJPVE9UWVBFUz1mdW5jdGlvbihlKXtyZXR1
cm4hMT09PWU/e1N0cmluZzohMSxBcnJheTohMSxGdW5jdGlvbjohMX06ZSYmITAhPT1lP3tTdHJp
bmc6bihlLlN0cmluZyksQXJyYXk6bihlLkFycmF5KSxGdW5jdGlvbjpuKGUuRnVuY3Rpb24pfTp7
U3RyaW5nOiEwLEFycmF5OiEwLEZ1bmN0aW9uOiEwfX0ocy5FWFRFTkRfUFJPVE9UWVBFUykscy5M
T0dfU1RBQ0tUUkFDRV9PTl9ERVBSRUNBVElPTj1uKHMuTE9HX1NUQUNLVFJBQ0VfT05fREVQUkVD
QVRJT04pLHMuTE9HX1ZFUlNJT049bihzLkxPR19WRVJTSU9OKSxzLkxPR19CSU5ESU5HUz1pKHMu
TE9HX0JJTkRJTkdTKSxzLlJBSVNFX09OX0RFUFJFQ0FUSU9OPWkocy5SQUlTRV9PTl9ERVBSRUNB
VElPTikKK3ZhciBhPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3c9PT1vJiZ3aW5k
b3cuZG9jdW1lbnQmJndpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50JiYhcy5kaXNhYmxlQnJv
d3NlckVudmlyb25tZW50LHU9by5FbWJlcnx8e30sbD17aW1wb3J0czp1LmltcG9ydHN8fG8sZXhw
b3J0czp1LmV4cG9ydHN8fG8sbG9va3VwOnUubG9va3VwfHxvfSxjPWE/e2hhc0RPTTohMCxpc0No
cm9tZTohIXdpbmRvdy5jaHJvbWUmJiF3aW5kb3cub3BlcmEsaXNGaXJlZm94OiJ1bmRlZmluZWQi
IT10eXBlb2YgSW5zdGFsbFRyaWdnZXIsaXNQaGFudG9tOiEhd2luZG93LmNhbGxQaGFudG9tLGxv
Y2F0aW9uOndpbmRvdy5sb2NhdGlvbixoaXN0b3J5OndpbmRvdy5oaXN0b3J5LHVzZXJBZ2VudDp3
aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCx3aW5kb3c6d2luZG93fTp7aGFzRE9NOiExLGlzQ2hy
b21lOiExLGlzRmlyZWZveDohMSxpc1BoYW50b206ITEsbG9jYXRpb246bnVsbCxoaXN0b3J5Om51
bGwsdXNlckFnZW50OiJMeW54ICh0ZXh0bW9kZSkiLHdpbmRvdzpudWxsfQorZS5FTlY9cyxlLmNv
bnRleHQ9bCxlLmVudmlyb25tZW50PWN9KSxlKCJlbWJlci1leHRlbnNpb24tc3VwcG9ydC9jb250
YWluZXJfZGVidWdfYWRhcHRlciIsWyJleHBvcnRzIiwiZW1iZXItbWV0YWwiLCJlbWJlci1ydW50
aW1lIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IgorZS5kZWZhdWx0PW4uT2JqZWN0LmV4
dGVuZCh7cmVzb2x2ZXI6bnVsbCxjYW5DYXRhbG9nRW50cmllc0J5VHlwZTpmdW5jdGlvbihlKXty
ZXR1cm4ibW9kZWwiIT09ZSYmInRlbXBsYXRlIiE9PWV9LGNhdGFsb2dFbnRyaWVzQnlUeXBlOmZ1
bmN0aW9uKGUpe3ZhciByPSgwLG4uQSkobi5OYW1lc3BhY2UuTkFNRVNQQUNFUyksaT0oMCxuLkEp
KCksbz1uZXcgUmVnRXhwKG4uU3RyaW5nLmNsYXNzaWZ5KGUpKyIkIikKK3JldHVybiByLmZvckVh
Y2goZnVuY3Rpb24oZSl7dmFyIHIKK2lmKGUhPT10LmRlZmF1bHQpZm9yKHZhciBzIGluIGUpZS5o
YXNPd25Qcm9wZXJ0eShzKSYmby50ZXN0KHMpJiYocj1lW3NdLCJjbGFzcyI9PT0oMCxuLnR5cGVP
ZikocikmJmkucHVzaChuLlN0cmluZy5kYXNoZXJpemUocy5yZXBsYWNlKG8sIiIpKSkpfSksaX19
KX0pLGUoImVtYmVyLWV4dGVuc2lvbi1zdXBwb3J0L2RhdGFfYWRhcHRlciIsWyJleHBvcnRzIiwi
ZW1iZXItdXRpbHMiLCJlbWJlci1tZXRhbCIsImVtYmVyLXJ1bnRpbWUiXSxmdW5jdGlvbihlLHQs
bixyKXsidXNlIHN0cmljdCIKK2UuZGVmYXVsdD1yLk9iamVjdC5leHRlbmQoe2luaXQ6ZnVuY3Rp
b24oKXt0aGlzLl9zdXBlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5yZWxlYXNlTWV0aG9k
cz0oMCxyLkEpKCl9LGNvbnRhaW5lckRlYnVnQWRhcHRlcjp2b2lkIDAsYXR0cmlidXRlTGltaXQ6
MyxhY2NlcHRzTW9kZWxOYW1lOiEwLHJlbGVhc2VNZXRob2RzOigwLHIuQSkoKSxnZXRGaWx0ZXJz
OmZ1bmN0aW9uKCl7cmV0dXJuKDAsci5BKSgpfSx3YXRjaE1vZGVsVHlwZXM6ZnVuY3Rpb24oZSx0
KXt2YXIgbj10aGlzLGk9dGhpcy5nZXRNb2RlbFR5cGVzKCksbz0oMCxyLkEpKCkscz12b2lkIDAK
K3M9aS5tYXAoZnVuY3Rpb24oZSl7dmFyIHI9ZS5rbGFzcyxpPW4ud3JhcE1vZGVsVHlwZShyLGUu
bmFtZSkKK3JldHVybiBvLnB1c2gobi5vYnNlcnZlTW9kZWxUeXBlKGUubmFtZSx0KSksaX0pLGUo
cykKK3ZhciBhPWZ1bmN0aW9uKCl7by5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBlKCl9KSxu
LnJlbGVhc2VNZXRob2RzLnJlbW92ZU9iamVjdChhKX0KK3JldHVybiB0aGlzLnJlbGVhc2VNZXRo
b2RzLnB1c2hPYmplY3QoYSksYX0sX25hbWVUb0NsYXNzOmZ1bmN0aW9uKGUpe3ZhciBuLHIKK3Jl
dHVybiJzdHJpbmciPT10eXBlb2YgZSYmKG49KDAsdC5nZXRPd25lcikodGhpcykscj1uLmZhY3Rv
cnlGb3IoIm1vZGVsOiIrZSksZT1yJiZyLmNsYXNzKSxlfSx3YXRjaFJlY29yZHM6ZnVuY3Rpb24o
ZSx0LG4saSl7ZnVuY3Rpb24gbyhlKXtuKFtlXSl9dmFyIHM9dGhpcyxhPSgwLHIuQSkoKSx1PXRo
aXMuX25hbWVUb0NsYXNzKGUpLGw9dGhpcy5nZXRSZWNvcmRzKHUsZSksYz12b2lkIDAscD1sLm1h
cChmdW5jdGlvbihlKXtyZXR1cm4gYS5wdXNoKHMub2JzZXJ2ZVJlY29yZChlLG8pKSxzLndyYXBS
ZWNvcmQoZSl9KSxmPXtkaWRDaGFuZ2U6ZnVuY3Rpb24oZSxuLHUsbCl7dmFyIGMscCxmCitmb3Io
Yz1uO2M8bitsO2MrKylwPSgwLHIub2JqZWN0QXQpKGUsYyksZj1zLndyYXBSZWNvcmQocCksYS5w
dXNoKHMub2JzZXJ2ZVJlY29yZChwLG8pKSx0KFtmXSkKK3UmJmkobix1KX0sd2lsbENoYW5nZTpm
dW5jdGlvbigpe3JldHVybiB0aGlzfX0KK3JldHVybigwLHIuYWRkQXJyYXlPYnNlcnZlcikobCx0
aGlzLGYpLGM9ZnVuY3Rpb24oKXthLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIGUoKX0pLCgw
LHIucmVtb3ZlQXJyYXlPYnNlcnZlcikobCxzLGYpLHMucmVsZWFzZU1ldGhvZHMucmVtb3ZlT2Jq
ZWN0KGMpfSx0KHApLHRoaXMucmVsZWFzZU1ldGhvZHMucHVzaE9iamVjdChjKSxjfSx3aWxsRGVz
dHJveTpmdW5jdGlvbigpe3RoaXMuX3N1cGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLnJl
bGVhc2VNZXRob2RzLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIGUoKX0pfSxkZXRlY3Q6ZnVu
Y3Rpb24oKXtyZXR1cm4hMX0sY29sdW1uc0ZvclR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4oMCxyLkEp
KCl9LG9ic2VydmVNb2RlbFR5cGU6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKCl7dChbdGhpcy53
cmFwTW9kZWxUeXBlKHMsZSldKX12YXIgbz10aGlzLHM9dGhpcy5fbmFtZVRvQ2xhc3MoZSksYT10
aGlzLmdldFJlY29yZHMocyxlKSx1PXtkaWRDaGFuZ2U6ZnVuY3Rpb24oKXtuLnJ1bi5zY2hlZHVs
ZU9uY2UoImFjdGlvbnMiLHRoaXMsaSl9LHdpbGxDaGFuZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhp
c319CityZXR1cm4oMCxyLmFkZEFycmF5T2JzZXJ2ZXIpKGEsdGhpcyx1KSxmdW5jdGlvbigpe3Jl
dHVybigwLHIucmVtb3ZlQXJyYXlPYnNlcnZlcikoYSxvLHUpfX0sd3JhcE1vZGVsVHlwZTpmdW5j
dGlvbihlLHQpe3ZhciByPXRoaXMuZ2V0UmVjb3JkcyhlLHQpCityZXR1cm57bmFtZTp0LGNvdW50
OigwLG4uZ2V0KShyLCJsZW5ndGgiKSxjb2x1bW5zOnRoaXMuY29sdW1uc0ZvclR5cGUoZSksb2Jq
ZWN0OmV9fSxnZXRNb2RlbFR5cGVzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMuZ2V0KCJj
b250YWluZXJEZWJ1Z0FkYXB0ZXIiKSxuPXZvaWQgMAorcmV0dXJuIG49dC5jYW5DYXRhbG9nRW50
cmllc0J5VHlwZSgibW9kZWwiKT90LmNhdGFsb2dFbnRyaWVzQnlUeXBlKCJtb2RlbCIpOnRoaXMu
X2dldE9iamVjdHNPbk5hbWVzcGFjZXMoKSxuPSgwLHIuQSkobikubWFwKGZ1bmN0aW9uKHQpe3Jl
dHVybntrbGFzczplLl9uYW1lVG9DbGFzcyh0KSxuYW1lOnR9fSksbj0oMCxyLkEpKG4pLmZpbHRl
cihmdW5jdGlvbih0KXtyZXR1cm4gZS5kZXRlY3QodC5rbGFzcyl9KSwoMCxyLkEpKG4pfSxfZ2V0
T2JqZWN0c09uTmFtZXNwYWNlczpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD0oMCxyLkEpKHIuTmFt
ZXNwYWNlLk5BTUVTUEFDRVMpLG49KDAsci5BKSgpCityZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9u
KHQpe3ZhciBpCitmb3IodmFyIG8gaW4gdCl0Lmhhc093blByb3BlcnR5KG8pJiZlLmRldGVjdCh0
W29dKSYmKGk9ci5TdHJpbmcuZGFzaGVyaXplKG8pLG4ucHVzaChpKSl9KSxufSxnZXRSZWNvcmRz
OmZ1bmN0aW9uKCl7cmV0dXJuKDAsci5BKSgpfSx3cmFwUmVjb3JkOmZ1bmN0aW9uKGUpe3ZhciB0
PXtvYmplY3Q6ZX0KK3JldHVybiB0LmNvbHVtblZhbHVlcz10aGlzLmdldFJlY29yZENvbHVtblZh
bHVlcyhlKSx0LnNlYXJjaEtleXdvcmRzPXRoaXMuZ2V0UmVjb3JkS2V5d29yZHMoZSksdC5maWx0
ZXJWYWx1ZXM9dGhpcy5nZXRSZWNvcmRGaWx0ZXJWYWx1ZXMoZSksdC5jb2xvcj10aGlzLmdldFJl
Y29yZENvbG9yKGUpLHR9LGdldFJlY29yZENvbHVtblZhbHVlczpmdW5jdGlvbigpe3JldHVybnt9
fSxnZXRSZWNvcmRLZXl3b3JkczpmdW5jdGlvbigpe3JldHVybigwLHIuQSkoKX0sZ2V0UmVjb3Jk
RmlsdGVyVmFsdWVzOmZ1bmN0aW9uKCl7cmV0dXJue319LGdldFJlY29yZENvbG9yOmZ1bmN0aW9u
KCl7cmV0dXJuIG51bGx9LG9ic2VydmVSZWNvcmQ6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24o
KXt9fX0pfSkKK2UoImVtYmVyLWV4dGVuc2lvbi1zdXBwb3J0L2luZGV4IixbImV4cG9ydHMiLCJl
bWJlci1leHRlbnNpb24tc3VwcG9ydC9kYXRhX2FkYXB0ZXIiLCJlbWJlci1leHRlbnNpb24tc3Vw
cG9ydC9jb250YWluZXJfZGVidWdfYWRhcHRlciJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmlj
dCIKK09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJEYXRhQWRhcHRlciIse2VudW1lcmFibGU6ITAs
Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHQuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHko
ZSwiQ29udGFpbmVyRGVidWdBZGFwdGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXty
ZXR1cm4gbi5kZWZhdWx0fX0pfSksZSgiZW1iZXItZ2xpbW1lci9jb21wb25lbnQiLFsiZXhwb3J0
cyIsImVtYmVyLXV0aWxzIiwiZW1iZXItdmlld3MiLCJlbWJlci1ydW50aW1lIiwiZW1iZXItZGVi
dWciLCJlbWJlci1tZXRhbCIsImVtYmVyLWdsaW1tZXIvdXRpbHMvcmVmZXJlbmNlcyIsIkBnbGlt
bWVyL3JlZmVyZW5jZSIsIkBnbGltbWVyL3J1bnRpbWUiXSxmdW5jdGlvbihlLHQsbixyLGksbyxz
LGEsdSl7InVzZSBzdHJpY3QiCitlLkJPVU5EUz1lLkhBU19CTE9DSz1lLklTX0RJU1BBVENISU5H
X0FUVFJTPWUuUk9PVF9SRUY9ZS5BUkdTPWUuRElSVFlfVEFHPXZvaWQgMAordmFyIGwsYz1lLkRJ
UlRZX1RBRz0oMCx0LnN5bWJvbCkoIkRJUlRZX1RBRyIpLHA9ZS5BUkdTPSgwLHQuc3ltYm9sKSgi
QVJHUyIpLGY9ZS5ST09UX1JFRj0oMCx0LnN5bWJvbCkoIlJPT1RfUkVGIiksaD1lLklTX0RJU1BB
VENISU5HX0FUVFJTPSgwLHQuc3ltYm9sKSgiSVNfRElTUEFUQ0hJTkdfQVRUUlMiKQorZS5IQVNf
QkxPQ0s9KDAsdC5zeW1ib2wpKCJIQVNfQkxPQ0siKQordmFyIGQ9ZS5CT1VORFM9KDAsdC5zeW1i
b2wpKCJCT1VORFMiKSxtPW4uQ29yZVZpZXcuZXh0ZW5kKG4uQ2hpbGRWaWV3c1N1cHBvcnQsbi5W
aWV3U3RhdGVTdXBwb3J0LG4uQ2xhc3NOYW1lc1N1cHBvcnQsci5UYXJnZXRBY3Rpb25TdXBwb3J0
LG4uQWN0aW9uU3VwcG9ydCxuLlZpZXdNaXhpbiwobD17aXNDb21wb25lbnQ6ITAsaW5pdDpmdW5j
dGlvbigpe3RoaXMuX3N1cGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzW2hdPSExLHRoaXNb
Y109bmV3IGEuRGlydHlhYmxlVGFnLHRoaXNbZl09bmV3IHMuUm9vdFJlZmVyZW5jZSh0aGlzKSx0
aGlzW2RdPW51bGwsdGhpcy5kZWZhdWx0TGF5b3V0JiYhdGhpcy5sYXlvdXQmJih0aGlzLmxheW91
dD10aGlzLmRlZmF1bHRMYXlvdXQpfSxyZXJlbmRlcjpmdW5jdGlvbigpe3RoaXNbY10uZGlydHko
KSx0aGlzLl9zdXBlcigpfSxfX2RlZmluZU5vbkVudW1lcmFibGU6ZnVuY3Rpb24oZSl7dGhpc1tl
Lm5hbWVdPWUuZGVzY3JpcHRvci52YWx1ZX19LGxbby5QUk9QRVJUWV9ESURfQ0hBTkdFXT1mdW5j
dGlvbihlKXtpZighdGhpc1toXSl7dmFyIHQ9dm9pZCAwLG49dm9pZCAwOyh0PXRoaXNbcF0pJiYo
bj10W2VdKSYmbltzLlVQREFURV0mJm5bcy5VUERBVEVdKCgwLG8uZ2V0KSh0aGlzLGUpKX19LGwu
Z2V0QXR0cj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5nZXQoZSl9LGwucmVhZERPTUF0dHI9ZnVu
Y3Rpb24oZSl7dmFyIHQ9KDAsbi5nZXRWaWV3RWxlbWVudCkodGhpcykKK3JldHVybigwLHUucmVh
ZERPTUF0dHIpKHQsZSl9LGwpKQorbVt0Lk5BTUVfS0VZXT0iRW1iZXIuQ29tcG9uZW50IixtLnJl
b3BlbkNsYXNzKHtpc0NvbXBvbmVudEZhY3Rvcnk6ITAscG9zaXRpb25hbFBhcmFtczpbXX0pLGUu
ZGVmYXVsdD1tfSksZSgiZW1iZXItZ2xpbW1lci9jb21wb25lbnRzL2NoZWNrYm94IixbImV4cG9y
dHMiLCJlbWJlci1tZXRhbCIsImVtYmVyLWdsaW1tZXIvY29tcG9uZW50IiwiZW1iZXItZ2xpbW1l
ci90ZW1wbGF0ZXMvZW1wdHkiXSxmdW5jdGlvbihlLHQsbixyKXsidXNlIHN0cmljdCIKK2UuZGVm
YXVsdD1uLmRlZmF1bHQuZXh0ZW5kKHtsYXlvdXQ6ci5kZWZhdWx0LGNsYXNzTmFtZXM6WyJlbWJl
ci1jaGVja2JveCJdLHRhZ05hbWU6ImlucHV0IixhdHRyaWJ1dGVCaW5kaW5nczpbInR5cGUiLCJj
aGVja2VkIiwiaW5kZXRlcm1pbmF0ZSIsImRpc2FibGVkIiwidGFiaW5kZXgiLCJuYW1lIiwiYXV0
b2ZvY3VzIiwicmVxdWlyZWQiLCJmb3JtIl0sdHlwZToiY2hlY2tib3giLGRpc2FibGVkOiExLGlu
ZGV0ZXJtaW5hdGU6ITEsZGlkSW5zZXJ0RWxlbWVudDpmdW5jdGlvbigpe3RoaXMuX3N1cGVyLmFw
cGx5KHRoaXMsYXJndW1lbnRzKSwoMCx0LmdldCkodGhpcywiZWxlbWVudCIpLmluZGV0ZXJtaW5h
dGU9ISEoMCx0LmdldCkodGhpcywiaW5kZXRlcm1pbmF0ZSIpfSxjaGFuZ2U6ZnVuY3Rpb24oKXso
MCx0LnNldCkodGhpcywiY2hlY2tlZCIsdGhpcy4kKCkucHJvcCgiY2hlY2tlZCIpKX19KX0pLGUo
ImVtYmVyLWdsaW1tZXIvY29tcG9uZW50cy9saW5rLXRvIixbImV4cG9ydHMiLCJlbWJlci1jb25z
b2xlIiwiZW1iZXItZGVidWciLCJlbWJlci1tZXRhbCIsImVtYmVyLXJ1bnRpbWUiLCJlbWJlci12
aWV3cyIsImVtYmVyLWdsaW1tZXIvdGVtcGxhdGVzL2xpbmstdG8iLCJlbWJlci1nbGltbWVyL2Nv
bXBvbmVudCJdLGZ1bmN0aW9uKGUsdCxuLHIsaSxvLHMsYSl7InVzZSBzdHJpY3QiCit2YXIgdT1h
LmRlZmF1bHQuZXh0ZW5kKHtsYXlvdXQ6cy5kZWZhdWx0LHRhZ05hbWU6ImEiLGN1cnJlbnRXaGVu
OigwLGkuZGVwcmVjYXRpbmdBbGlhcykoImN1cnJlbnQtd2hlbiIse2lkOiJlbWJlci1yb3V0aW5n
LXZpZXcuZGVwcmVjYXRlZC1jdXJyZW50LXdoZW4iLHVudGlsOiIzLjAuMCJ9KSwiY3VycmVudC13
aGVuIjpudWxsLHRpdGxlOm51bGwscmVsOm51bGwsdGFiaW5kZXg6bnVsbCx0YXJnZXQ6bnVsbCxh
Y3RpdmVDbGFzczoiYWN0aXZlIixsb2FkaW5nQ2xhc3M6ImxvYWRpbmciLGRpc2FibGVkQ2xhc3M6
ImRpc2FibGVkIixfaXNEaXNhYmxlZDohMSxyZXBsYWNlOiExLGF0dHJpYnV0ZUJpbmRpbmdzOlsi
aHJlZiIsInRpdGxlIiwicmVsIiwidGFiaW5kZXgiLCJ0YXJnZXQiXSxjbGFzc05hbWVCaW5kaW5n
czpbImFjdGl2ZSIsImxvYWRpbmciLCJkaXNhYmxlZCIsInRyYW5zaXRpb25pbmdJbiIsInRyYW5z
aXRpb25pbmdPdXQiXSxldmVudE5hbWU6ImNsaWNrIixpbml0OmZ1bmN0aW9uKCl7dGhpcy5fc3Vw
ZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpCit2YXIgZT0oMCxyLmdldCkodGhpcywiZXZlbnROYW1l
IikKK3RoaXMub24oZSx0aGlzLHRoaXMuX2ludm9rZSl9LF9yb3V0aW5nOmkuaW5qZWN0LnNlcnZp
Y2UoIi1yb3V0aW5nIiksZGlzYWJsZWQ6KDAsci5jb21wdXRlZCkoe2dldDpmdW5jdGlvbigpe3Jl
dHVybiExfSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwIT09dCYmdGhpcy5zZXQoIl9p
c0Rpc2FibGVkIix0KSwhIXQmJigwLHIuZ2V0KSh0aGlzLCJkaXNhYmxlZENsYXNzIil9fSksX2Nv
bXB1dGVBY3RpdmU6ZnVuY3Rpb24oZSl7aWYoKDAsci5nZXQpKHRoaXMsImxvYWRpbmciKSlyZXR1
cm4hMQordmFyIHQsbj0oMCxyLmdldCkodGhpcywiX3JvdXRpbmciKSxpPSgwLHIuZ2V0KSh0aGlz
LCJtb2RlbHMiKSxvPSgwLHIuZ2V0KSh0aGlzLCJyZXNvbHZlZFF1ZXJ5UGFyYW1zIikscz0oMCxy
LmdldCkodGhpcywiY3VycmVudC13aGVuIiksYT0hIXMKK2ZvcihzPXN8fCgwLHIuZ2V0KSh0aGlz
LCJxdWFsaWZpZWRSb3V0ZU5hbWUiKSxzPXMuc3BsaXQoIiAiKSx0PTA7dDxzLmxlbmd0aDt0Kysp
aWYobi5pc0FjdGl2ZUZvclJvdXRlKGksbyxzW3RdLGUsYSkpcmV0dXJuKDAsci5nZXQpKHRoaXMs
ImFjdGl2ZUNsYXNzIikKK3JldHVybiExfSxhY3RpdmU6KDAsci5jb21wdXRlZCkoImF0dHJzLnBh
cmFtcyIsIl9yb3V0aW5nLmN1cnJlbnRTdGF0ZSIsZnVuY3Rpb24oKXt2YXIgZT0oMCxyLmdldCko
dGhpcywiX3JvdXRpbmcuY3VycmVudFN0YXRlIikKK3JldHVybiEhZSYmdGhpcy5fY29tcHV0ZUFj
dGl2ZShlKX0pLHdpbGxCZUFjdGl2ZTooMCxyLmNvbXB1dGVkKSgiX3JvdXRpbmcudGFyZ2V0U3Rh
dGUiLGZ1bmN0aW9uKCl7dmFyIGU9KDAsci5nZXQpKHRoaXMsIl9yb3V0aW5nIiksdD0oMCxyLmdl
dCkoZSwidGFyZ2V0U3RhdGUiKQoraWYoKDAsci5nZXQpKGUsImN1cnJlbnRTdGF0ZSIpIT09dCly
ZXR1cm4hIXRoaXMuX2NvbXB1dGVBY3RpdmUodCl9KSx0cmFuc2l0aW9uaW5nSW46KDAsci5jb21w
dXRlZCkoImFjdGl2ZSIsIndpbGxCZUFjdGl2ZSIsZnVuY3Rpb24oKXt2YXIgZT0oMCxyLmdldCko
dGhpcywid2lsbEJlQWN0aXZlIikKK3JldHVybiB2b2lkIDAhPT1lJiYoISgwLHIuZ2V0KSh0aGlz
LCJhY3RpdmUiKSYmZSYmImVtYmVyLXRyYW5zaXRpb25pbmctaW4iKX0pLHRyYW5zaXRpb25pbmdP
dXQ6KDAsci5jb21wdXRlZCkoImFjdGl2ZSIsIndpbGxCZUFjdGl2ZSIsZnVuY3Rpb24oKXt2YXIg
ZT0oMCxyLmdldCkodGhpcywid2lsbEJlQWN0aXZlIikKK3JldHVybiB2b2lkIDAhPT1lJiYoKDAs
ci5nZXQpKHRoaXMsImFjdGl2ZSIpJiYhZSYmImVtYmVyLXRyYW5zaXRpb25pbmctb3V0Iil9KSxf
aW52b2tlOmZ1bmN0aW9uKGUpe2lmKCEoMCxvLmlzU2ltcGxlQ2xpY2spKGUpKXJldHVybiEwCit2
YXIgbj0oMCxyLmdldCkodGhpcywicHJldmVudERlZmF1bHQiKSxpPSgwLHIuZ2V0KSh0aGlzLCJ0
YXJnZXQiKQoraWYoITEhPT1uJiYoaSYmIl9zZWxmIiE9PWl8fGUucHJldmVudERlZmF1bHQoKSks
ITE9PT0oMCxyLmdldCkodGhpcywiYnViYmxlcyIpJiZlLnN0b3BQcm9wYWdhdGlvbigpLCgwLHIu
Z2V0KSh0aGlzLCJfaXNEaXNhYmxlZCIpKXJldHVybiExCitpZigoMCxyLmdldCkodGhpcywibG9h
ZGluZyIpKXJldHVybiB0LmRlZmF1bHQud2FybigiVGhpcyBsaW5rLXRvIGlzIGluIGFuIGluYWN0
aXZlIGxvYWRpbmcgc3RhdGUgYmVjYXVzZSBhdCBsZWFzdCBvbmUgb2YgaXRzIHBhcmFtZXRlcnMg
cHJlc2VudGx5IGhhcyBhIG51bGwvdW5kZWZpbmVkIHZhbHVlLCBvciB0aGUgcHJvdmlkZWQgcm91
dGUgbmFtZSBpcyBpbnZhbGlkLiIpLCExCitpZihpJiYiX3NlbGYiIT09aSlyZXR1cm4hMQordmFy
IHM9KDAsci5nZXQpKHRoaXMsInF1YWxpZmllZFJvdXRlTmFtZSIpLGE9KDAsci5nZXQpKHRoaXMs
Im1vZGVscyIpLHU9KDAsci5nZXQpKHRoaXMsInF1ZXJ5UGFyYW1zLnZhbHVlcyIpLGw9KDAsci5n
ZXQpKHRoaXMsInJlcGxhY2UiKSxjPXtxdWVyeVBhcmFtczp1LHJvdXRlTmFtZTpzfTsoMCxyLmZs
YWdnZWRJbnN0cnVtZW50KSgiaW50ZXJhY3Rpb24ubGluay10byIsYyx0aGlzLl9nZW5lcmF0ZVRy
YW5zaXRpb24oYyxzLGEsdSxsKSl9LF9nZW5lcmF0ZVRyYW5zaXRpb246ZnVuY3Rpb24oZSx0LG4s
aSxvKXt2YXIgcz0oMCxyLmdldCkodGhpcywiX3JvdXRpbmciKQorcmV0dXJuIGZ1bmN0aW9uKCl7
ZS50cmFuc2l0aW9uPXMudHJhbnNpdGlvblRvKHQsbixpLG8pfX0scXVlcnlQYXJhbXM6bnVsbCxx
dWFsaWZpZWRSb3V0ZU5hbWU6KDAsci5jb21wdXRlZCkoInRhcmdldFJvdXRlTmFtZSIsIl9yb3V0
aW5nLmN1cnJlbnRTdGF0ZSIsZnVuY3Rpb24oKXt2YXIgZT0oMCxyLmdldCkodGhpcywicGFyYW1z
Iikuc2xpY2UoKSx0PWVbZS5sZW5ndGgtMV0KK3JldHVybiB0JiZ0LmlzUXVlcnlQYXJhbXMmJmUu
cG9wKCksKHRoaXNbYS5IQVNfQkxPQ0tdPzA9PT1lLmxlbmd0aDoxPT09ZS5sZW5ndGgpPygwLHIu
Z2V0KSh0aGlzLCJfcm91dGluZy5jdXJyZW50Um91dGVOYW1lIik6KDAsci5nZXQpKHRoaXMsInRh
cmdldFJvdXRlTmFtZSIpfSkscmVzb2x2ZWRRdWVyeVBhcmFtczooMCxyLmNvbXB1dGVkKSgicXVl
cnlQYXJhbXMiLGZ1bmN0aW9uKCl7dmFyIGU9e30sdD0oMCxyLmdldCkodGhpcywicXVlcnlQYXJh
bXMiKQoraWYoIXQpcmV0dXJuIGUKK3ZhciBuPXQudmFsdWVzCitmb3IodmFyIGkgaW4gbiluLmhh
c093blByb3BlcnR5KGkpJiYoZVtpXT1uW2ldKQorcmV0dXJuIGV9KSxocmVmOigwLHIuY29tcHV0
ZWQpKCJtb2RlbHMiLCJxdWFsaWZpZWRSb3V0ZU5hbWUiLGZ1bmN0aW9uKCl7aWYoImEiPT09KDAs
ci5nZXQpKHRoaXMsInRhZ05hbWUiKSl7dmFyIGU9KDAsci5nZXQpKHRoaXMsInF1YWxpZmllZFJv
dXRlTmFtZSIpLHQ9KDAsci5nZXQpKHRoaXMsIm1vZGVscyIpCitpZigoMCxyLmdldCkodGhpcywi
bG9hZGluZyIpKXJldHVybigwLHIuZ2V0KSh0aGlzLCJsb2FkaW5nSHJlZiIpCit2YXIgbj0oMCxy
LmdldCkodGhpcywiX3JvdXRpbmciKSxpPSgwLHIuZ2V0KSh0aGlzLCJxdWVyeVBhcmFtcy52YWx1
ZXMiKQorcmV0dXJuIG4uZ2VuZXJhdGVVUkwoZSx0LGkpfX0pLGxvYWRpbmc6KDAsci5jb21wdXRl
ZCkoIl9tb2RlbHNBcmVMb2FkZWQiLCJxdWFsaWZpZWRSb3V0ZU5hbWUiLGZ1bmN0aW9uKCl7dmFy
IGU9KDAsci5nZXQpKHRoaXMsInF1YWxpZmllZFJvdXRlTmFtZSIpCitpZighKDAsci5nZXQpKHRo
aXMsIl9tb2RlbHNBcmVMb2FkZWQiKXx8bnVsbD09ZSlyZXR1cm4oMCxyLmdldCkodGhpcywibG9h
ZGluZ0NsYXNzIil9KSxfbW9kZWxzQXJlTG9hZGVkOigwLHIuY29tcHV0ZWQpKCJtb2RlbHMiLGZ1
bmN0aW9uKCl7dmFyIGUsdD0oMCxyLmdldCkodGhpcywibW9kZWxzIikKK2ZvcihlPTA7ZTx0Lmxl
bmd0aDtlKyspaWYobnVsbD09dFtlXSlyZXR1cm4hMQorcmV0dXJuITB9KSxfZ2V0TW9kZWxzOmZ1
bmN0aW9uKGUpe3ZhciB0LG4scj1lLmxlbmd0aC0xLG89bmV3IEFycmF5KHIpCitmb3IodD0wO3Q8
cjt0Kyspe2ZvcihuPWVbdCsxXTtpLkNvbnRyb2xsZXJNaXhpbi5kZXRlY3Qobik7KW49bi5nZXQo
Im1vZGVsIikKK29bdF09bn1yZXR1cm4gb30sbG9hZGluZ0hyZWY6IiMiLGRpZFJlY2VpdmVBdHRy
czpmdW5jdGlvbigpe3ZhciBlPXZvaWQgMCx0PSgwLHIuZ2V0KSh0aGlzLCJwYXJhbXMiKQordCYm
KHQ9dC5zbGljZSgpKQordmFyIG49KDAsci5nZXQpKHRoaXMsImRpc2FibGVkV2hlbiIpCit2b2lk
IDAhPT1uJiZ0aGlzLnNldCgiZGlzYWJsZWQiLG4pLHRoaXNbYS5IQVNfQkxPQ0tdfHx0aGlzLnNl
dCgibGlua1RpdGxlIix0LnNoaWZ0KCkpLHRoaXMuc2V0KCJ0YXJnZXRSb3V0ZU5hbWUiLHRbMF0p
Cit2YXIgaT10W3QubGVuZ3RoLTFdCitlPWkmJmkuaXNRdWVyeVBhcmFtcz90LnBvcCgpOnt2YWx1
ZXM6e319LHRoaXMuc2V0KCJxdWVyeVBhcmFtcyIsZSksdC5sZW5ndGg+MT90aGlzLnNldCgibW9k
ZWxzIix0aGlzLl9nZXRNb2RlbHModCkpOnRoaXMuc2V0KCJtb2RlbHMiLFtdKX19KQordS50b1N0
cmluZz1mdW5jdGlvbigpe3JldHVybiJMaW5rQ29tcG9uZW50In0sdS5yZW9wZW5DbGFzcyh7cG9z
aXRpb25hbFBhcmFtczoicGFyYW1zIn0pLGUuZGVmYXVsdD11fSksZSgiZW1iZXItZ2xpbW1lci9j
b21wb25lbnRzL3RleHRfYXJlYSIsWyJleHBvcnRzIiwiZW1iZXItZ2xpbW1lci9jb21wb25lbnQi
LCJlbWJlci12aWV3cyIsImVtYmVyLWdsaW1tZXIvdGVtcGxhdGVzL2VtcHR5Il0sZnVuY3Rpb24o
ZSx0LG4scil7InVzZSBzdHJpY3QiCitlLmRlZmF1bHQ9dC5kZWZhdWx0LmV4dGVuZChuLlRleHRT
dXBwb3J0LHtjbGFzc05hbWVzOlsiZW1iZXItdGV4dC1hcmVhIl0sbGF5b3V0OnIuZGVmYXVsdCx0
YWdOYW1lOiJ0ZXh0YXJlYSIsYXR0cmlidXRlQmluZGluZ3M6WyJyb3dzIiwiY29scyIsIm5hbWUi
LCJzZWxlY3Rpb25FbmQiLCJzZWxlY3Rpb25TdGFydCIsIndyYXAiLCJsYW5nIiwiZGlyIiwidmFs
dWUiXSxyb3dzOm51bGwsY29sczpudWxsfSl9KSxlKCJlbWJlci1nbGltbWVyL2NvbXBvbmVudHMv
dGV4dF9maWVsZCIsWyJleHBvcnRzIiwiZW1iZXItbWV0YWwiLCJlbWJlci1lbnZpcm9ubWVudCIs
ImVtYmVyLWdsaW1tZXIvY29tcG9uZW50IiwiZW1iZXItZ2xpbW1lci90ZW1wbGF0ZXMvZW1wdHki
LCJlbWJlci12aWV3cyJdLGZ1bmN0aW9uKGUsdCxuLHIsaSxvKXsidXNlIHN0cmljdCIKK2Z1bmN0
aW9uIHMoZSl7aWYoZSBpbiB1KXJldHVybiB1W2VdCitpZighbi5lbnZpcm9ubWVudC5oYXNET00p
cmV0dXJuIHVbZV09ZSxlCithfHwoYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpKQor
dHJ5e2EudHlwZT1lfWNhdGNoKGUpe31yZXR1cm4gdVtlXT1hLnR5cGU9PT1lfXZhciBhPXZvaWQg
MCx1PU9iamVjdC5jcmVhdGUobnVsbCkKK2UuZGVmYXVsdD1yLmRlZmF1bHQuZXh0ZW5kKG8uVGV4
dFN1cHBvcnQse2xheW91dDppLmRlZmF1bHQsY2xhc3NOYW1lczpbImVtYmVyLXRleHQtZmllbGQi
XSx0YWdOYW1lOiJpbnB1dCIsYXR0cmlidXRlQmluZGluZ3M6WyJhY2NlcHQiLCJhdXRvY29tcGxl
dGUiLCJhdXRvc2F2ZSIsImRpciIsImZvcm1hY3Rpb24iLCJmb3JtZW5jdHlwZSIsImZvcm1tZXRo
b2QiLCJmb3Jtbm92YWxpZGF0ZSIsImZvcm10YXJnZXQiLCJoZWlnaHQiLCJpbnB1dG1vZGUiLCJs
YW5nIiwibGlzdCIsIm1heCIsIm1pbiIsIm11bHRpcGxlIiwibmFtZSIsInBhdHRlcm4iLCJzaXpl
Iiwic3RlcCIsInR5cGUiLCJ2YWx1ZSIsIndpZHRoIl0sdmFsdWU6IiIsdHlwZTooMCx0LmNvbXB1
dGVkKSh7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuInRleHQifSxzZXQ6ZnVuY3Rpb24oZSx0KXt2YXIg
bj0idGV4dCIKK3JldHVybiBzKHQpJiYobj10KSxufX0pLHNpemU6bnVsbCxwYXR0ZXJuOm51bGws
bWluOm51bGwsbWF4Om51bGx9KX0pLGUoImVtYmVyLWdsaW1tZXIvZG9tIixbImV4cG9ydHMiLCJA
Z2xpbW1lci9ydW50aW1lIiwiQGdsaW1tZXIvbm9kZSJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0
cmljdCIKK09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJET01DaGFuZ2VzIix7ZW51bWVyYWJsZToh
MCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdC5ET01DaGFuZ2VzfX0pLE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShlLCJET01UcmVlQ29uc3RydWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24o
KXtyZXR1cm4gdC5ET01UcmVlQ29uc3RydWN0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShl
LCJOb2RlRE9NVHJlZUNvbnN0cnVjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7
cmV0dXJuIG4uTm9kZURPTVRyZWVDb25zdHJ1Y3Rpb259fSl9KSxlKCJlbWJlci1nbGltbWVyL2Vu
dmlyb25tZW50IixbImV4cG9ydHMiLCJlbWJlci1iYWJlbCIsImVtYmVyLXV0aWxzIiwiZW1iZXIt
bWV0YWwiLCJlbWJlci1kZWJ1ZyIsImVtYmVyLXZpZXdzIiwiQGdsaW1tZXIvcnVudGltZSIsImVt
YmVyLWdsaW1tZXIvc3ludGF4L2N1cmx5LWNvbXBvbmVudCIsImVtYmVyLWdsaW1tZXIvc3ludGF4
IiwiZW1iZXItZ2xpbW1lci91dGlscy9pdGVyYWJsZSIsImVtYmVyLWdsaW1tZXIvdXRpbHMvcmVm
ZXJlbmNlcyIsImVtYmVyLWdsaW1tZXIvdXRpbHMvZGVidWctc3RhY2siLCJlbWJlci1nbGltbWVy
L2hlbHBlcnMvaWYtdW5sZXNzIiwiZW1iZXItZ2xpbW1lci9oZWxwZXJzL2FjdGlvbiIsImVtYmVy
LWdsaW1tZXIvaGVscGVycy9jb21wb25lbnQiLCJlbWJlci1nbGltbWVyL2hlbHBlcnMvY29uY2F0
IiwiZW1iZXItZ2xpbW1lci9oZWxwZXJzL2dldCIsImVtYmVyLWdsaW1tZXIvaGVscGVycy9oYXNo
IiwiZW1iZXItZ2xpbW1lci9oZWxwZXJzL2xvYyIsImVtYmVyLWdsaW1tZXIvaGVscGVycy9sb2ci
LCJlbWJlci1nbGltbWVyL2hlbHBlcnMvbXV0IiwiZW1iZXItZ2xpbW1lci9oZWxwZXJzL3JlYWRv
bmx5IiwiZW1iZXItZ2xpbW1lci9oZWxwZXJzL3VuYm91bmQiLCJlbWJlci1nbGltbWVyL2hlbHBl
cnMvLWNsYXNzIiwiZW1iZXItZ2xpbW1lci9oZWxwZXJzLy1pbnB1dC10eXBlIiwiZW1iZXItZ2xp
bW1lci9oZWxwZXJzL3F1ZXJ5LXBhcmFtIiwiZW1iZXItZ2xpbW1lci9oZWxwZXJzL2VhY2gtaW4i
LCJlbWJlci1nbGltbWVyL2hlbHBlcnMvLW5vcm1hbGl6ZS1jbGFzcyIsImVtYmVyLWdsaW1tZXIv
aGVscGVycy8taHRtbC1zYWZlIiwiZW1iZXItZ2xpbW1lci9wcm90b2NvbC1mb3ItdXJsIiwiZW1i
ZXItZ2xpbW1lci9tb2RpZmllcnMvYWN0aW9uIl0sZnVuY3Rpb24oZSx0LG4scixpLG8scyxhLHUs
bCxjLHAsZixoLGQsbSxnLHksdixiLF8sdyxFLHgsQyxPLEEsVCxTLFIsayl7InVzZSBzdHJpY3Qi
CitmdW5jdGlvbiBOKGUpe3JldHVybntvYmplY3Q6ImNvbXBvbmVudDoiK2V9fXZhciBQPWZ1bmN0
aW9uKGUpe2Z1bmN0aW9uIGkoaSl7dmFyIHU9aVtuLk9XTkVSXSxsPSgwLHQucG9zc2libGVDb25z
dHJ1Y3RvclJldHVybikodGhpcyxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkKK3JldHVybiBsLm93
bmVyPXUsbC5pc0ludGVyYWN0aXZlPXUubG9va3VwKCItZW52aXJvbm1lbnQ6bWFpbiIpLmlzSW50
ZXJhY3RpdmUsbC5kZXN0cm95ZWRDb21wb25lbnRzPVtdLCgwLFIuZGVmYXVsdCkobCksbC5fZGVm
aW5pdGlvbkNhY2hlPW5ldyByLkNhY2hlKDJlMyxmdW5jdGlvbihlKXt2YXIgdD1lLm5hbWUsbj1l
LnNvdXJjZSxyPWUub3duZXIsaT0oMCxvLmxvb2t1cENvbXBvbmVudCkocix0LHtzb3VyY2U6bn0p
LHM9aS5jb21wb25lbnQsdT1pLmxheW91dAoraWYoc3x8dSlyZXR1cm4gbmV3IGEuQ3VybHlDb21w
b25lbnREZWZpbml0aW9uKHQscyx1KX0sZnVuY3Rpb24oZSl7dmFyIHQ9ZS5uYW1lLHI9ZS5zb3Vy
Y2UsaT1lLm93bmVyLG89ciYmaS5fcmVzb2x2ZUxvY2FsTG9va3VwTmFtZSh0LHIpfHx0CityZXR1
cm4oMCxuLmd1aWRGb3IpKGkpKyJ8IitvfSksbC5fdGVtcGxhdGVDYWNoZT1uZXcgci5DYWNoZSgx
ZTMsZnVuY3Rpb24oZSl7dmFyIHQscj1lLlRlbXBsYXRlLGk9ZS5vd25lcgorcmV0dXJuIHIuY3Jl
YXRlP3IuY3JlYXRlKCh0PXtlbnY6bH0sdFtuLk9XTkVSXT1pLHQpKTpyfSxmdW5jdGlvbihlKXt2
YXIgdD1lLlRlbXBsYXRlLHI9ZS5vd25lcgorcmV0dXJuKDAsbi5ndWlkRm9yKShyKSsifCIrdC5p
ZH0pLGwuX2NvbXBpbGVyQ2FjaGU9bmV3IHIuQ2FjaGUoMTAsZnVuY3Rpb24oZSl7cmV0dXJuIG5l
dyByLkNhY2hlKDJlMyxmdW5jdGlvbih0KXt2YXIgbj1uZXcgZSh0KQorcmV0dXJuKDAscy5jb21w
aWxlTGF5b3V0KShuLGwpfSxmdW5jdGlvbihlKXt2YXIgdD1lLm1ldGEub3duZXIKK3JldHVybigw
LG4uZ3VpZEZvcikodCkrInwiK2UuaWR9KX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWR9KSxsLmJ1
aWx0SW5Nb2RpZmllcnM9e2FjdGlvbjpuZXcgay5kZWZhdWx0fSxsLmJ1aWx0SW5IZWxwZXJzPXtp
ZjpmLmlubGluZUlmLGFjdGlvbjpoLmRlZmF1bHQsY29tcG9uZW50OmQuZGVmYXVsdCxjb25jYXQ6
bS5kZWZhdWx0LGdldDpnLmRlZmF1bHQsaGFzaDp5LmRlZmF1bHQsbG9jOnYuZGVmYXVsdCxsb2c6
Yi5kZWZhdWx0LG11dDpfLmRlZmF1bHQsInF1ZXJ5LXBhcmFtcyI6Ty5kZWZhdWx0LHJlYWRvbmx5
OncuZGVmYXVsdCx1bmJvdW5kOkUuZGVmYXVsdCx1bmxlc3M6Zi5pbmxpbmVVbmxlc3MsIi1jbGFz
cyI6eC5kZWZhdWx0LCItZWFjaC1pbiI6QS5kZWZhdWx0LCItaW5wdXQtdHlwZSI6Qy5kZWZhdWx0
LCItbm9ybWFsaXplLWNsYXNzIjpULmRlZmF1bHQsIi1odG1sLXNhZmUiOlMuZGVmYXVsdCwiLWdl
dC1keW5hbWljLXZhciI6cy5nZXREeW5hbWljVmFyfSxsfXJldHVybigwLHQuaW5oZXJpdHMpKGks
ZSksaS5jcmVhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBpKGUpfSxpLnByb3RvdHlwZS5tYWNy
b3M9ZnVuY3Rpb24oKXt2YXIgdD1lLnByb3RvdHlwZS5tYWNyb3MuY2FsbCh0aGlzKQorcmV0dXJu
KDAsdS5wb3B1bGF0ZU1hY3JvcykodC5ibG9ja3MsdC5pbmxpbmVzKSx0fSxpLnByb3RvdHlwZS5o
YXNDb21wb25lbnREZWZpbml0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGkucHJvdG90eXBlLmdl
dENvbXBvbmVudERlZmluaXRpb249ZnVuY3Rpb24oZSx0KXt2YXIgbj1lWzBdLGk9KDAsci5faW5z
dHJ1bWVudFN0YXJ0KSgicmVuZGVyLmdldENvbXBvbmVudERlZmluaXRpb24iLE4sbiksbz10Lmdl
dE1ldGEoKSxzPW8ub3duZXIsYT1vLm1vZHVsZU5hbWUmJiJ0ZW1wbGF0ZToiK28ubW9kdWxlTmFt
ZSx1PXRoaXMuX2RlZmluaXRpb25DYWNoZS5nZXQoe25hbWU6bixzb3VyY2U6YSxvd25lcjpzfSkK
K3JldHVybiBpKCksdX0saS5wcm90b3R5cGUuZ2V0VGVtcGxhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1
cm4gdGhpcy5fdGVtcGxhdGVDYWNoZS5nZXQoe1RlbXBsYXRlOmUsb3duZXI6dH0pfSxpLnByb3Rv
dHlwZS5nZXRDb21waWxlZEJsb2NrPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2NvbXBpbGVy
Q2FjaGUuZ2V0KGUpLmdldCh0KX0saS5wcm90b3R5cGUuaGFzUGFydGlhbD1mdW5jdGlvbihlLHQp
e3ZhciBuPXQuZ2V0TWV0YSgpLHI9bi5vd25lcgorcmV0dXJuKDAsby5oYXNQYXJ0aWFsKShlLHIp
fSxpLnByb3RvdHlwZS5sb29rdXBQYXJ0aWFsPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5nZXRNZXRh
KCkscj1uLm93bmVyLGk9e3RlbXBsYXRlOigwLG8ubG9va3VwUGFydGlhbCkoZSxyKX0KK2lmKGku
dGVtcGxhdGUpcmV0dXJuIGkKK3Rocm93IG5ldyBFcnJvcihlKyIgaXMgbm90IGEgcGFydGlhbCIp
fSxpLnByb3RvdHlwZS5oYXNIZWxwZXI9ZnVuY3Rpb24oZSx0KXtpZih0aGlzLmJ1aWx0SW5IZWxw
ZXJzW2VdKXJldHVybiEwCit2YXIgbj10LmdldE1ldGEoKSxyPW4ub3duZXIsaT17c291cmNlOiJ0
ZW1wbGF0ZToiK24ubW9kdWxlTmFtZX0KK3JldHVybiByLmhhc1JlZ2lzdHJhdGlvbigiaGVscGVy
OiIrZSxpKXx8ci5oYXNSZWdpc3RyYXRpb24oImhlbHBlcjoiK2UpfSxpLnByb3RvdHlwZS5sb29r
dXBIZWxwZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmJ1aWx0SW5IZWxwZXJzW2VdCitpZihu
KXJldHVybiBuCit2YXIgcj10LmdldE1ldGEoKSxpPXIub3duZXIsbz1yLm1vZHVsZU5hbWUmJntz
b3VyY2U6InRlbXBsYXRlOiIrci5tb2R1bGVOYW1lfXx8e30scz1pLmZhY3RvcnlGb3IoImhlbHBl
cjoiK2Usbyl8fGkuZmFjdG9yeUZvcigiaGVscGVyOiIrZSkKK2lmKHMuY2xhc3MuaXNIZWxwZXJJ
bnN0YW5jZSlyZXR1cm4gZnVuY3Rpb24oZSx0KXtyZXR1cm4gYy5TaW1wbGVIZWxwZXJSZWZlcmVu
Y2UuY3JlYXRlKHMuY2xhc3MuY29tcHV0ZSx0KX0KK2lmKHMuY2xhc3MuaXNIZWxwZXJGYWN0b3J5
KXJldHVybiBmdW5jdGlvbihlLHQpe3JldHVybiBjLkNsYXNzQmFzZWRIZWxwZXJSZWZlcmVuY2Uu
Y3JlYXRlKHMsZSx0KX0KK3Rocm93IG5ldyBFcnJvcihlKyIgaXMgbm90IGEgaGVscGVyIil9LGku
cHJvdG90eXBlLmhhc01vZGlmaWVyPWZ1bmN0aW9uKGUpe3JldHVybiEhdGhpcy5idWlsdEluTW9k
aWZpZXJzW2VdfSxpLnByb3RvdHlwZS5sb29rdXBNb2RpZmllcj1mdW5jdGlvbihlKXt2YXIgdD10
aGlzLmJ1aWx0SW5Nb2RpZmllcnNbZV0KK2lmKHQpcmV0dXJuIHQKK3Rocm93IG5ldyBFcnJvcihl
KyIgaXMgbm90IGEgbW9kaWZpZXIiKX0saS5wcm90b3R5cGUudG9Db25kaXRpb25hbFJlZmVyZW5j
ZT1mdW5jdGlvbihlKXtyZXR1cm4gYy5Db25kaXRpb25hbFJlZmVyZW5jZS5jcmVhdGUoZSl9LGku
cHJvdG90eXBlLml0ZXJhYmxlRm9yPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5uYW1lZC5nZXQoImtl
eSIpLnZhbHVlKCkKK3JldHVybigwLGwuZGVmYXVsdCkoZSxuKX0saS5wcm90b3R5cGUuc2NoZWR1
bGVJbnN0YWxsTW9kaWZpZXI9ZnVuY3Rpb24oKXt2YXIgdAordGhpcy5pc0ludGVyYWN0aXZlJiYo
dD1lLnByb3RvdHlwZS5zY2hlZHVsZUluc3RhbGxNb2RpZmllcikuY2FsbC5hcHBseSh0LFt0aGlz
XS5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSkpfSxpLnByb3Rv
dHlwZS5zY2hlZHVsZVVwZGF0ZU1vZGlmaWVyPWZ1bmN0aW9uKCl7dmFyIHQKK3RoaXMuaXNJbnRl
cmFjdGl2ZSYmKHQ9ZS5wcm90b3R5cGUuc2NoZWR1bGVVcGRhdGVNb2RpZmllcikuY2FsbC5hcHBs
eSh0LFt0aGlzXS5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSkp
fSxpLnByb3RvdHlwZS5kaWREZXN0cm95PWZ1bmN0aW9uKGUpe2UuZGVzdHJveSgpfSxpLnByb3Rv
dHlwZS5iZWdpbj1mdW5jdGlvbigpe3RoaXMuaW5UcmFuc2FjdGlvbj0hMCxlLnByb3RvdHlwZS5i
ZWdpbi5jYWxsKHRoaXMpfSxpLnByb3RvdHlwZS5jb21taXQ9ZnVuY3Rpb24oKXt2YXIgdCxuPXRo
aXMuZGVzdHJveWVkQ29tcG9uZW50cworZm9yKHRoaXMuZGVzdHJveWVkQ29tcG9uZW50cz1bXSx0
PTA7dDxuLmxlbmd0aDt0Kyspblt0XS5kZXN0cm95KCkKK2UucHJvdG90eXBlLmNvbW1pdC5jYWxs
KHRoaXMpLHRoaXMuaW5UcmFuc2FjdGlvbj0hMX0saX0ocy5FbnZpcm9ubWVudCkKK2UuZGVmYXVs
dD1QfSksZSgiZW1iZXItZ2xpbW1lci9oZWxwZXIiLFsiZXhwb3J0cyIsImVtYmVyLXV0aWxzIiwi
ZW1iZXItcnVudGltZSIsIkBnbGltbWVyL3JlZmVyZW5jZSJdLGZ1bmN0aW9uKGUsdCxuLHIpeyJ1
c2Ugc3RyaWN0IgorZS5SRUNPTVBVVEVfVEFHPXZvaWQgMCxlLmhlbHBlcj1mdW5jdGlvbihlKXty
ZXR1cm57aXNIZWxwZXJJbnN0YW5jZTohMCxjb21wdXRlOmV9fQordmFyIGk9ZS5SRUNPTVBVVEVf
VEFHPSgwLHQuc3ltYm9sKSgiUkVDT01QVVRFX1RBRyIpLG89bi5GcmFtZXdvcmtPYmplY3QuZXh0
ZW5kKHtpc0hlbHBlckluc3RhbmNlOiEwLGluaXQ6ZnVuY3Rpb24oKXt0aGlzLl9zdXBlci5hcHBs
eSh0aGlzLGFyZ3VtZW50cyksdGhpc1tpXT1uZXcgci5EaXJ0eWFibGVUYWd9LHJlY29tcHV0ZTpm
dW5jdGlvbigpe3RoaXNbaV0uZGlydHkoKX19KQorby5yZW9wZW5DbGFzcyh7aXNIZWxwZXJGYWN0
b3J5OiEwfSksZS5kZWZhdWx0PW99KSxlKCJlbWJlci1nbGltbWVyL2hlbHBlcnMvLWNsYXNzIixb
ImV4cG9ydHMiLCJlbWJlci1nbGltbWVyL3V0aWxzL3JlZmVyZW5jZXMiLCJlbWJlci1ydW50aW1l
Il0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IgorZnVuY3Rpb24gcihlKXt2YXIgdD1lLnBv
c2l0aW9uYWwscj10LmF0KDApLGk9dC5sZW5ndGgsbz1yLnZhbHVlKCkKK3JldHVybiEwPT09bz9p
PjE/bi5TdHJpbmcuZGFzaGVyaXplKHQuYXQoMSkudmFsdWUoKSk6bnVsbDohMT09PW8/aT4yP24u
U3RyaW5nLmRhc2hlcml6ZSh0LmF0KDIpLnZhbHVlKCkpOm51bGw6b31lLmRlZmF1bHQ9ZnVuY3Rp
b24oZSxuKXtyZXR1cm4gbmV3IHQuSW50ZXJuYWxIZWxwZXJSZWZlcmVuY2UocixuKX19KSxlKCJl
bWJlci1nbGltbWVyL2hlbHBlcnMvLWh0bWwtc2FmZSIsWyJleHBvcnRzIiwiZW1iZXItZ2xpbW1l
ci91dGlscy9yZWZlcmVuY2VzIiwiZW1iZXItZ2xpbW1lci91dGlscy9zdHJpbmciXSxmdW5jdGlv
bihlLHQsbil7InVzZSBzdHJpY3QiCitmdW5jdGlvbiByKGUpe3ZhciB0PWUucG9zaXRpb25hbCxy
PXQuYXQoMCkKK3JldHVybiBuZXcgbi5TYWZlU3RyaW5nKHIudmFsdWUoKSl9ZS5kZWZhdWx0PWZ1
bmN0aW9uKGUsbil7cmV0dXJuIG5ldyB0LkludGVybmFsSGVscGVyUmVmZXJlbmNlKHIsbil9fSks
ZSgiZW1iZXItZ2xpbW1lci9oZWxwZXJzLy1pbnB1dC10eXBlIixbImV4cG9ydHMiLCJlbWJlci1n
bGltbWVyL3V0aWxzL3JlZmVyZW5jZXMiXSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IgorZnVu
Y3Rpb24gbihlKXt2YXIgdD1lLnBvc2l0aW9uYWwKK2UubmFtZWQKK3JldHVybiJjaGVja2JveCI9
PT10LmF0KDApLnZhbHVlKCk/Ii1jaGVja2JveCI6Ii10ZXh0LWZpZWxkIn1lLmRlZmF1bHQ9ZnVu
Y3Rpb24oZSxyKXtyZXR1cm4gbmV3IHQuSW50ZXJuYWxIZWxwZXJSZWZlcmVuY2UobixyKX19KSxl
KCJlbWJlci1nbGltbWVyL2hlbHBlcnMvLW5vcm1hbGl6ZS1jbGFzcyIsWyJleHBvcnRzIiwiZW1i
ZXItZ2xpbW1lci91dGlscy9yZWZlcmVuY2VzIiwiZW1iZXItcnVudGltZSJdLGZ1bmN0aW9uKGUs
dCxuKXsidXNlIHN0cmljdCIKK2Z1bmN0aW9uIHIoZSl7dmFyIHQ9ZS5wb3NpdGlvbmFsLHI9KGUu
bmFtZWQsdC5hdCgwKS52YWx1ZSgpLnNwbGl0KCIuIikpLGk9cltyLmxlbmd0aC0xXSxvPXQuYXQo
MSkudmFsdWUoKQorcmV0dXJuITA9PT1vP24uU3RyaW5nLmRhc2hlcml6ZShpKTpvfHwwPT09bz9T
dHJpbmcobyk6IiJ9ZS5kZWZhdWx0PWZ1bmN0aW9uKGUsbil7cmV0dXJuIG5ldyB0LkludGVybmFs
SGVscGVyUmVmZXJlbmNlKHIsbil9fSksZSgiZW1iZXItZ2xpbW1lci9oZWxwZXJzL2FjdGlvbiIs
WyJleHBvcnRzIiwiZW1iZXItdXRpbHMiLCJlbWJlci1tZXRhbCIsImVtYmVyLWdsaW1tZXIvdXRp
bHMvcmVmZXJlbmNlcyIsIkBnbGltbWVyL3J1bnRpbWUiLCJAZ2xpbW1lci9yZWZlcmVuY2UiLCJl
bWJlci1kZWJ1ZyJdLGZ1bmN0aW9uKGUsdCxuLHIsaSxvLHMpeyJ1c2Ugc3RyaWN0IgorZnVuY3Rp
b24gYShlKXtyZXR1cm4gZX1mdW5jdGlvbiB1KGUsdCl7dmFyIHI9bnVsbAordC5sZW5ndGg+MCYm
KHI9ZnVuY3Rpb24oZSl7cmV0dXJuIHQudmFsdWUoKS5jb25jYXQoZSl9KQordmFyIGk9bnVsbAor
cmV0dXJuIGUmJihpPWZ1bmN0aW9uKHQpe3ZhciByPWUudmFsdWUoKQorcmV0dXJuIHImJnQubGVu
Z3RoPjAmJih0WzBdPSgwLG4uZ2V0KSh0WzBdLHIpKSx0fSksciYmaT9mdW5jdGlvbihlKXtyZXR1
cm4gaShyKGUpKX06cnx8aXx8YX1mdW5jdGlvbiBsKGUsdCxuLHIsaSl7cmV0dXJuIGZ1bmN0aW9u
KCl7cmV0dXJuIGMoZSx0LnZhbHVlKCksbi52YWx1ZSgpLHIsaSkuYXBwbHkodm9pZCAwLGFyZ3Vt
ZW50cyl9fWZ1bmN0aW9uIGMoZSx0LHIsaSxvKXt2YXIgcyxhPXZvaWQgMCx1PXZvaWQgMAorcmV0
dXJuImZ1bmN0aW9uIj09dHlwZW9mIHJbcF0/KGE9cix1PXJbcF0pOihzPXR5cGVvZiByLCJzdHJp
bmciPT09cz8oYT10LHU9dC5hY3Rpb25zJiZ0LmFjdGlvbnNbcl0pOiJmdW5jdGlvbiI9PT1zJiYo
YT1lLHU9cikpLGZ1bmN0aW9uKCl7Zm9yKGU9YXJndW1lbnRzLmxlbmd0aCx0PUFycmF5KGUpLHI9
MDtyPGU7cisrKXRbcl09YXJndW1lbnRzW3JdCit2YXIgZSx0LHIsbz17dGFyZ2V0OmEsYXJnczp0
LGxhYmVsOiJAZ2xpbW1lci9jbG9zdXJlLWFjdGlvbiJ9CityZXR1cm4oMCxuLmZsYWdnZWRJbnN0
cnVtZW50KSgiaW50ZXJhY3Rpb24uZW1iZXItYWN0aW9uIixvLGZ1bmN0aW9uKCl7cmV0dXJuIG4u
cnVuLmpvaW4uYXBwbHkobi5ydW4sW2EsdV0uY29uY2F0KGkodCkpKX0pfX1lLkFDVElPTj1lLklO
Vk9LRT12b2lkIDAsZS5kZWZhdWx0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5uYW1lZCxzPXQucG9z
aXRpb25hbCxhPXMuYXQoMCksaD1zLmF0KDEpLGQ9aC5fcHJvcGVydHlLZXksbT12b2lkIDAKK209
Mj09PXMubGVuZ3RoP2kuRXZhbHVhdGVkUG9zaXRpb25hbEFyZ3MuZW1wdHkoKTppLkV2YWx1YXRl
ZFBvc2l0aW9uYWxBcmdzLmNyZWF0ZShzLnZhbHVlcy5zbGljZSgyKSkKK3ZhciBnPW4uaGFzKCJ0
YXJnZXQiKT9uLmdldCgidGFyZ2V0Iik6YSx5PXUobi5oYXMoInZhbHVlIikmJm4uZ2V0KCJ2YWx1
ZSIpLG0pLHY9dm9pZCAwCityZXR1cm4gdj0iZnVuY3Rpb24iPT10eXBlb2YgaFtwXT9jKGgsaCxo
W3BdLHksZCk6KDAsby5pc0NvbnN0KShnKSYmKDAsby5pc0NvbnN0KShoKT9jKGEudmFsdWUoKSxn
LnZhbHVlKCksaC52YWx1ZSgpLHksZCk6bChhLnZhbHVlKCksZyxoLHksZCksdltmXT0hMCxuZXcg
ci5VbmJvdW5kUmVmZXJlbmNlKHYpfQordmFyIHA9ZS5JTlZPS0U9KDAsdC5zeW1ib2wpKCJJTlZP
S0UiKSxmPWUuQUNUSU9OPSgwLHQuc3ltYm9sKSgiQUNUSU9OIil9KSxlKCJlbWJlci1nbGltbWVy
L2hlbHBlcnMvY29tcG9uZW50IixbImV4cG9ydHMiLCJlbWJlci1iYWJlbCIsImVtYmVyLXV0aWxz
IiwiZW1iZXItZ2xpbW1lci91dGlscy9yZWZlcmVuY2VzIiwiZW1iZXItZ2xpbW1lci9zeW50YXgv
Y3VybHktY29tcG9uZW50IiwiQGdsaW1tZXIvcnVudGltZSIsImVtYmVyLWRlYnVnIl0sZnVuY3Rp
b24oZSx0LG4scixpLG8scyl7InVzZSBzdHJpY3QiCitmdW5jdGlvbiBhKGUsdCl7dmFyIG49dShl
LHQpCityZXR1cm4gbmV3IGkuQ3VybHlDb21wb25lbnREZWZpbml0aW9uKGUubmFtZSxlLkNvbXBv
bmVudENsYXNzLGUudGVtcGxhdGUsbil9ZnVuY3Rpb24gdShlLHQpe3ZhciByLHMsYSx1PWUuYXJn
cyxsPWUuQ29tcG9uZW50Q2xhc3MscD1sLmNsYXNzLnBvc2l0aW9uYWxQYXJhbXMsZj10LnBvc2l0
aW9uYWwudmFsdWVzLGg9Zi5zbGljZSgxKQorcCYmaC5sZW5ndGgmJigwLGkudmFsaWRhdGVQb3Np
dGlvbmFsUGFyYW1ldGVycykodC5uYW1lZCxoLHApCit2YXIgZD17fQoraWYoInN0cmluZyIhPXR5
cGVvZiBwJiZwJiZwLmxlbmd0aD4wKXtmb3Iocj1NYXRoLm1pbihwLmxlbmd0aCxoLmxlbmd0aCks
cz0wO3M8cjtzKyspYT1wW3NdLGRbYV09aFtzXQoraC5sZW5ndGg9MH12YXIgbT11JiZ1Lm5hbWVk
JiZ1Lm5hbWVkLm1hcHx8e30sZz11JiZ1LnBvc2l0aW9uYWwmJnUucG9zaXRpb25hbC52YWx1ZXN8
fFtdLHk9bmV3IEFycmF5KE1hdGgubWF4KGcubGVuZ3RoLGgubGVuZ3RoKSkKK3kuc3BsaWNlLmFw
cGx5KHksWzAsZy5sZW5ndGhdLmNvbmNhdChnKSkseS5zcGxpY2UuYXBwbHkoeSxbMCxoLmxlbmd0
aF0uY29uY2F0KGgpKQordmFyIHY9KDAsbi5hc3NpZ24pKHt9LG0sZCx0Lm5hbWVkLm1hcCkKK3Jl
dHVybiBvLkV2YWx1YXRlZEFyZ3MuY3JlYXRlKG8uRXZhbHVhdGVkUG9zaXRpb25hbEFyZ3MuY3Jl
YXRlKHkpLG8uRXZhbHVhdGVkTmFtZWRBcmdzLmNyZWF0ZSh2KSxjKX1lLkNsb3N1cmVDb21wb25l
bnRSZWZlcmVuY2U9dm9pZCAwLGUuZGVmYXVsdD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGwuY3Jl
YXRlKHQsbixlLmVudil9Cit2YXIgbD1lLkNsb3N1cmVDb21wb25lbnRSZWZlcmVuY2U9ZnVuY3Rp
b24oZSl7ZnVuY3Rpb24gbihuLHIsaSl7dmFyIG89KDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0
dXJuKSh0aGlzLGUuY2FsbCh0aGlzKSkscz1uLnBvc2l0aW9uYWwuYXQoMCkKK3JldHVybiBvLmRl
ZlJlZj1zLG8udGFnPXMudGFnLG8uZW52PWksby5zeW1ib2xUYWJsZT1yLG8uYXJncz1uLG8ubGFz
dERlZmluaXRpb249dm9pZCAwLG8ubGFzdE5hbWU9dm9pZCAwLG99cmV0dXJuKDAsdC5pbmhlcml0
cykobixlKSxuLmNyZWF0ZT1mdW5jdGlvbihlLHQscil7cmV0dXJuIG5ldyBuKGUsdCxyKX0sbi5w
cm90b3R5cGUuY29tcHV0ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuYXJncyx0PXRoaXMuZGVmUmVm
LG49dGhpcy5lbnYscj10aGlzLnN5bWJvbFRhYmxlLGk9dGhpcy5sYXN0RGVmaW5pdGlvbixzPXRo
aXMubGFzdE5hbWUsdT10LnZhbHVlKCksbD1udWxsCitpZih1JiZ1PT09cylyZXR1cm4gaQoraWYo
dGhpcy5sYXN0TmFtZT11LCJzdHJpbmciPT10eXBlb2YgdSlsPW4uZ2V0Q29tcG9uZW50RGVmaW5p
dGlvbihbdV0scikKK2Vsc2V7aWYoISgwLG8uaXNDb21wb25lbnREZWZpbml0aW9uKSh1KSlyZXR1
cm4gbnVsbAorbD11fXZhciBjPWEobCxlKQorcmV0dXJuIHRoaXMubGFzdERlZmluaXRpb249Yyxj
fSxufShyLkNhY2hlZFJlZmVyZW5jZSksYz17ZGVmYXVsdDpudWxsLGludmVyc2U6bnVsbH19KSxl
KCJlbWJlci1nbGltbWVyL2hlbHBlcnMvY29uY2F0IixbImV4cG9ydHMiLCJlbWJlci1nbGltbWVy
L3V0aWxzL3JlZmVyZW5jZXMiLCJAZ2xpbW1lci9ydW50aW1lIl0sZnVuY3Rpb24oZSx0LG4peyJ1
c2Ugc3RyaWN0IgorZnVuY3Rpb24gcihlKXtyZXR1cm4gZS5wb3NpdGlvbmFsLnZhbHVlKCkubWFw
KG4ubm9ybWFsaXplVGV4dFZhbHVlKS5qb2luKCIiKX1lLmRlZmF1bHQ9ZnVuY3Rpb24oZSxuKXty
ZXR1cm4gbmV3IHQuSW50ZXJuYWxIZWxwZXJSZWZlcmVuY2UocixuKX19KSxlKCJlbWJlci1nbGlt
bWVyL2hlbHBlcnMvZWFjaC1pbiIsWyJleHBvcnRzIiwiZW1iZXItdXRpbHMiXSxmdW5jdGlvbihl
LHQpeyJ1c2Ugc3RyaWN0IgorZS5pc0VhY2hJbj1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZVtuXX0s
ZS5kZWZhdWx0PWZ1bmN0aW9uKGUsdCl7dmFyIHI9T2JqZWN0LmNyZWF0ZSh0LnBvc2l0aW9uYWwu
YXQoMCkpCityZXR1cm4gcltuXT0hMCxyfQordmFyIG49KDAsdC5zeW1ib2wpKCJFQUNIX0lOIil9
KSxlKCJlbWJlci1nbGltbWVyL2hlbHBlcnMvZ2V0IixbImV4cG9ydHMiLCJlbWJlci1iYWJlbCIs
ImVtYmVyLW1ldGFsIiwiZW1iZXItZ2xpbW1lci91dGlscy9yZWZlcmVuY2VzIiwiQGdsaW1tZXIv
cmVmZXJlbmNlIl0sZnVuY3Rpb24oZSx0LG4scixpKXsidXNlIHN0cmljdCIKK2UuZGVmYXVsdD1m
dW5jdGlvbihlLHQpe3JldHVybiBvLmNyZWF0ZSh0LnBvc2l0aW9uYWwuYXQoMCksdC5wb3NpdGlv
bmFsLmF0KDEpKX0KK3ZhciBvPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG8obixyKXt2YXIgbz0oMCx0
LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMpKQorby5zb3VyY2VS
ZWZlcmVuY2U9bixvLnBhdGhSZWZlcmVuY2U9cixvLmxhc3RQYXRoPW51bGwsby5pbm5lclJlZmVy
ZW5jZT1udWxsCit2YXIgcz1vLmlubmVyVGFnPW5ldyBpLlVwZGF0YWJsZVRhZyhpLkNPTlNUQU5U
X1RBRykKK3JldHVybiBvLnRhZz0oMCxpLmNvbWJpbmUpKFtuLnRhZyxyLnRhZyxzXSksb31yZXR1
cm4oMCx0LmluaGVyaXRzKShvLGUpLG8uY3JlYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG4KK3JldHVy
bigwLGkuaXNDb25zdCkodCk/KG49dC52YWx1ZSgpLnNwbGl0KCIuIiksKDAsaS5yZWZlcmVuY2VG
cm9tUGFydHMpKGUsbikpOm5ldyBvKGUsdCl9LG8ucHJvdG90eXBlLmNvbXB1dGU9ZnVuY3Rpb24o
KXt2YXIgZSx0PXRoaXMubGFzdFBhdGgsbj10aGlzLmlubmVyUmVmZXJlbmNlLHI9dGhpcy5pbm5l
clRhZyxvPXRoaXMubGFzdFBhdGg9dGhpcy5wYXRoUmVmZXJlbmNlLnZhbHVlKCkKK3JldHVybiBv
IT09dCYmKG8/KGU9dHlwZW9mIG8sInN0cmluZyI9PT1lP249dGhpcy5pbm5lclJlZmVyZW5jZT0o
MCxpLnJlZmVyZW5jZUZyb21QYXJ0cykodGhpcy5zb3VyY2VSZWZlcmVuY2Usby5zcGxpdCgiLiIp
KToibnVtYmVyIj09PWUmJihuPXRoaXMuaW5uZXJSZWZlcmVuY2U9dGhpcy5zb3VyY2VSZWZlcmVu
Y2UuZ2V0KCIiK28pKSxyLnVwZGF0ZShuLnRhZykpOihuPXRoaXMuaW5uZXJSZWZlcmVuY2U9bnVs
bCxyLnVwZGF0ZShpLkNPTlNUQU5UX1RBRykpKSxuP24udmFsdWUoKTpudWxsfSxvLnByb3RvdHlw
ZVtyLlVQREFURV09ZnVuY3Rpb24oZSl7KDAsbi5zZXQpKHRoaXMuc291cmNlUmVmZXJlbmNlLnZh
bHVlKCksdGhpcy5wYXRoUmVmZXJlbmNlLnZhbHVlKCksZSl9LG99KHIuQ2FjaGVkUmVmZXJlbmNl
KX0pLGUoImVtYmVyLWdsaW1tZXIvaGVscGVycy9oYXNoIixbImV4cG9ydHMiXSxmdW5jdGlvbihl
KXsidXNlIHN0cmljdCIKK2UuZGVmYXVsdD1mdW5jdGlvbihlLHQpe3JldHVybiB0Lm5hbWVkfX0p
LGUoImVtYmVyLWdsaW1tZXIvaGVscGVycy9pZi11bmxlc3MiLFsiZXhwb3J0cyIsImVtYmVyLWJh
YmVsIiwiZW1iZXItZGVidWciLCJlbWJlci1nbGltbWVyL3V0aWxzL3JlZmVyZW5jZXMiLCJAZ2xp
bW1lci9yZWZlcmVuY2UiXSxmdW5jdGlvbihlLHQsbixyLGkpeyJ1c2Ugc3RyaWN0IgorZS5pbmxp
bmVJZj1mdW5jdGlvbihlLHQpe3ZhciBuPXQucG9zaXRpb25hbAorc3dpdGNoKG4ubGVuZ3RoKXtj
YXNlIDI6cmV0dXJuIG8uY3JlYXRlKG4uYXQoMCksbi5hdCgxKSxudWxsKQorY2FzZSAzOnJldHVy
biBvLmNyZWF0ZShuLmF0KDApLG4uYXQoMSksbi5hdCgyKSl9fSxlLmlubGluZVVubGVzcz1mdW5j
dGlvbihlLHQpe3ZhciBuPXQucG9zaXRpb25hbAorc3dpdGNoKG4ubGVuZ3RoKXtjYXNlIDI6cmV0
dXJuIG8uY3JlYXRlKG4uYXQoMCksbnVsbCxuLmF0KDEpKQorY2FzZSAzOnJldHVybiBvLmNyZWF0
ZShuLmF0KDApLG4uYXQoMiksbi5hdCgxKSl9fQordmFyIG89ZnVuY3Rpb24oZSl7ZnVuY3Rpb24g
bihuLHIsbyl7dmFyIHM9KDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuY2Fs
bCh0aGlzKSkKK3JldHVybiBzLmJyYW5jaFRhZz1uZXcgaS5VcGRhdGFibGVUYWcoaS5DT05TVEFO
VF9UQUcpLHMudGFnPSgwLGkuY29tYmluZSkoW24udGFnLHMuYnJhbmNoVGFnXSkscy5jb25kPW4s
cy50cnV0aHk9cixzLmZhbHN5PW8sc31yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4uY3JlYXRl
PWZ1bmN0aW9uKGUsdCxvKXt2YXIgcz1yLkNvbmRpdGlvbmFsUmVmZXJlbmNlLmNyZWF0ZShlKSxh
PXR8fHIuVU5ERUZJTkVEX1JFRkVSRU5DRSx1PW98fHIuVU5ERUZJTkVEX1JFRkVSRU5DRQorcmV0
dXJuKDAsaS5pc0NvbnN0KShzKT9zLnZhbHVlKCk/YTp1Om5ldyBuKHMsYSx1KX0sbi5wcm90b3R5
cGUuY29tcHV0ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY29uZCx0PXRoaXMudHJ1dGh5LG49dGhp
cy5mYWxzeSxyPWUudmFsdWUoKT90Om4KK3JldHVybiB0aGlzLmJyYW5jaFRhZy51cGRhdGUoci50
YWcpLHIudmFsdWUoKX0sbn0oci5DYWNoZWRSZWZlcmVuY2UpfSksZSgiZW1iZXItZ2xpbW1lci9o
ZWxwZXJzL2xvYyIsWyJleHBvcnRzIiwiZW1iZXItZ2xpbW1lci91dGlscy9yZWZlcmVuY2VzIiwi
ZW1iZXItcnVudGltZSJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCIKK2Z1bmN0aW9uIHIo
ZSl7dmFyIHQ9ZS5wb3NpdGlvbmFsCityZXR1cm4gbi5TdHJpbmcubG9jLmFwcGx5KG51bGwsdC52
YWx1ZSgpKX1lLmRlZmF1bHQ9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbmV3IHQuSW50ZXJuYWxIZWxw
ZXJSZWZlcmVuY2UocixuKX19KSxlKCJlbWJlci1nbGltbWVyL2hlbHBlcnMvbG9nIixbImV4cG9y
dHMiLCJlbWJlci1nbGltbWVyL3V0aWxzL3JlZmVyZW5jZXMiLCJlbWJlci1jb25zb2xlIl0sZnVu
Y3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IgorZnVuY3Rpb24gcihlKXt2YXIgdD1lLnBvc2l0aW9u
YWwKK24uZGVmYXVsdC5sb2cuYXBwbHkobnVsbCx0LnZhbHVlKCkpfWUuZGVmYXVsdD1mdW5jdGlv
bihlLG4pe3JldHVybiBuZXcgdC5JbnRlcm5hbEhlbHBlclJlZmVyZW5jZShyLG4pfX0pLGUoImVt
YmVyLWdsaW1tZXIvaGVscGVycy9tdXQiLFsiZXhwb3J0cyIsImVtYmVyLXV0aWxzIiwiZW1iZXIt
ZGVidWciLCJlbWJlci1nbGltbWVyL3V0aWxzL3JlZmVyZW5jZXMiLCJlbWJlci1nbGltbWVyL2hl
bHBlcnMvYWN0aW9uIl0sZnVuY3Rpb24oZSx0LG4scixpKXsidXNlIHN0cmljdCIKK2Z1bmN0aW9u
IG8oZSl7cmV0dXJuIGUmJmVbc119ZS5pc011dD1vLGUudW5NdXQ9ZnVuY3Rpb24oZSl7cmV0dXJu
IGVbYV18fGV9LGUuZGVmYXVsdD1mdW5jdGlvbihlLHQpe3ZhciBuPXQucG9zaXRpb25hbC5hdCgw
KQoraWYobyhuKSlyZXR1cm4gbgordmFyIHU9T2JqZWN0LmNyZWF0ZShuKQorcmV0dXJuIHVbYV09
bix1W2kuSU5WT0tFXT1uW3IuVVBEQVRFXSx1W3NdPSEwLHV9Cit2YXIgcz0oMCx0LnN5bWJvbCko
Ik1VVCIpLGE9KDAsdC5zeW1ib2wpKCJTT1VSQ0UiKX0pLGUoImVtYmVyLWdsaW1tZXIvaGVscGVy
cy9xdWVyeS1wYXJhbSIsWyJleHBvcnRzIiwiZW1iZXItdXRpbHMiLCJlbWJlci1nbGltbWVyL3V0
aWxzL3JlZmVyZW5jZXMiLCJlbWJlci1kZWJ1ZyIsImVtYmVyLXJvdXRpbmciXSxmdW5jdGlvbihl
LHQsbixyLGkpeyJ1c2Ugc3RyaWN0IgorZnVuY3Rpb24gbyhlKXt2YXIgbj0oZS5wb3NpdGlvbmFs
LGUubmFtZWQpCityZXR1cm4gaS5RdWVyeVBhcmFtcy5jcmVhdGUoe3ZhbHVlczooMCx0LmFzc2ln
bikoe30sbi52YWx1ZSgpKX0pfWUuZGVmYXVsdD1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgbi5J
bnRlcm5hbEhlbHBlclJlZmVyZW5jZShvLHQpfX0pLGUoImVtYmVyLWdsaW1tZXIvaGVscGVycy9y
ZWFkb25seSIsWyJleHBvcnRzIiwiZW1iZXItZ2xpbW1lci91dGlscy9yZWZlcmVuY2VzIiwiZW1i
ZXItZ2xpbW1lci9oZWxwZXJzL211dCJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCIKK2Uu
ZGVmYXVsdD1mdW5jdGlvbihlLHIpe3ZhciBpPSgwLG4udW5NdXQpKHIucG9zaXRpb25hbC5hdCgw
KSksbz1PYmplY3QuY3JlYXRlKGkpCityZXR1cm4gb1t0LlVQREFURV09dm9pZCAwLG99fSksZSgi
ZW1iZXItZ2xpbW1lci9oZWxwZXJzL3VuYm91bmQiLFsiZXhwb3J0cyIsImVtYmVyLWRlYnVnIiwi
ZW1iZXItZ2xpbW1lci91dGlscy9yZWZlcmVuY2VzIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3Ry
aWN0IgorZS5kZWZhdWx0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4uVW5ib3VuZFJlZmVyZW5jZS5j
cmVhdGUodC5wb3NpdGlvbmFsLmF0KDApLnZhbHVlKCkpfX0pLGUoImVtYmVyLWdsaW1tZXIvaW5k
ZXgiLFsiZXhwb3J0cyIsImVtYmVyLWdsaW1tZXIvaGVscGVycy9hY3Rpb24iLCJlbWJlci1nbGlt
bWVyL3RlbXBsYXRlcy9yb290IiwiZW1iZXItZ2xpbW1lci90ZW1wbGF0ZSIsImVtYmVyLWdsaW1t
ZXIvY29tcG9uZW50cy9jaGVja2JveCIsImVtYmVyLWdsaW1tZXIvY29tcG9uZW50cy90ZXh0X2Zp
ZWxkIiwiZW1iZXItZ2xpbW1lci9jb21wb25lbnRzL3RleHRfYXJlYSIsImVtYmVyLWdsaW1tZXIv
Y29tcG9uZW50cy9saW5rLXRvIiwiZW1iZXItZ2xpbW1lci9jb21wb25lbnQiLCJlbWJlci1nbGlt
bWVyL2hlbHBlciIsImVtYmVyLWdsaW1tZXIvZW52aXJvbm1lbnQiLCJlbWJlci1nbGltbWVyL3V0
aWxzL3N0cmluZyIsImVtYmVyLWdsaW1tZXIvcmVuZGVyZXIiLCJlbWJlci1nbGltbWVyL3RlbXBs
YXRlX3JlZ2lzdHJ5IiwiZW1iZXItZ2xpbW1lci9zZXR1cC1yZWdpc3RyeSIsImVtYmVyLWdsaW1t
ZXIvZG9tIiwiZW1iZXItZ2xpbW1lci9zeW50YXgiXSxmdW5jdGlvbihlLHQsbixyLGksbyxzLGEs
dSxsLGMscCxmLGgsZCxtLGcpeyJ1c2Ugc3RyaWN0IgorT2JqZWN0LmRlZmluZVByb3BlcnR5KGUs
IklOVk9LRSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHQuSU5WT0tFfX0p
LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJSb290VGVtcGxhdGUiLHtlbnVtZXJhYmxlOiEwLGdl
dDpmdW5jdGlvbigpe3JldHVybiBuLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUs
InRlbXBsYXRlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5kZWZhdWx0
fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJDaGVja2JveCIse2VudW1lcmFibGU6ITAsZ2V0
OmZ1bmN0aW9uKCl7cmV0dXJuIGkuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwi
VGV4dEZpZWxkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5kZWZhdWx0
fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJUZXh0QXJlYSIse2VudW1lcmFibGU6ITAsZ2V0
OmZ1bmN0aW9uKCl7cmV0dXJuIHMuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwi
TGlua0NvbXBvbmVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuZGVm
YXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiQ29tcG9uZW50Iix7ZW51bWVyYWJsZToh
MCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdS5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShlLCJIZWxwZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBsLmRlZmF1
bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImhlbHBlciIse2VudW1lcmFibGU6ITAsZ2V0
OmZ1bmN0aW9uKCl7cmV0dXJuIGwuaGVscGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJF
bnZpcm9ubWVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuZGVmYXVs
dH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiU2FmZVN0cmluZyIse2VudW1lcmFibGU6ITAs
Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAuU2FmZVN0cmluZ319KSxPYmplY3QuZGVmaW5lUHJvcGVy
dHkoZSwiZXNjYXBlRXhwcmVzc2lvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0
dXJuIHAuZXNjYXBlRXhwcmVzc2lvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiaHRtbFNh
ZmUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmh0bWxTYWZlfX0pLE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShlLCJpc0hUTUxTYWZlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVu
Y3Rpb24oKXtyZXR1cm4gcC5pc0hUTUxTYWZlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJf
Z2V0U2FmZVN0cmluZyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAuZ2V0
U2FmZVN0cmluZ319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiUmVuZGVyZXIiLHtlbnVtZXJh
YmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBmLlJlbmRlcmVyfX0pLE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShlLCJJbmVydFJlbmRlcmVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXty
ZXR1cm4gZi5JbmVydFJlbmRlcmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJJbnRlcmFj
dGl2ZVJlbmRlcmVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZi5JbnRl
cmFjdGl2ZVJlbmRlcmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJnZXRUZW1wbGF0ZSIs
e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGguZ2V0VGVtcGxhdGV9fSksT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KGUsInNldFRlbXBsYXRlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVu
Y3Rpb24oKXtyZXR1cm4gaC5zZXRUZW1wbGF0ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwi
aGFzVGVtcGxhdGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBoLmhhc1Rl
bXBsYXRlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJnZXRUZW1wbGF0ZXMiLHtlbnVtZXJh
YmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBoLmdldFRlbXBsYXRlc319KSxPYmplY3QuZGVm
aW5lUHJvcGVydHkoZSwic2V0VGVtcGxhdGVzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24o
KXtyZXR1cm4gaC5zZXRUZW1wbGF0ZXN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInNldHVw
RW5naW5lUmVnaXN0cnkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBkLnNl
dHVwRW5naW5lUmVnaXN0cnl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInNldHVwQXBwbGlj
YXRpb25SZWdpc3RyeSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGQuc2V0
dXBBcHBsaWNhdGlvblJlZ2lzdHJ5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJET01DaGFu
Z2VzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbS5ET01DaGFuZ2VzfX0p
LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJOb2RlRE9NVHJlZUNvbnN0cnVjdGlvbiIse2VudW1l
cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG0uTm9kZURPTVRyZWVDb25zdHJ1Y3Rpb259
fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIkRPTVRyZWVDb25zdHJ1Y3Rpb24iLHtlbnVtZXJh
YmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBtLkRPTVRyZWVDb25zdHJ1Y3Rpb259fSksT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KGUsIl9yZWdpc3Rlck1hY3JvcyIse2VudW1lcmFibGU6ITAsZ2V0
OmZ1bmN0aW9uKCl7cmV0dXJuIGcucmVnaXN0ZXJNYWNyb3N9fSkKK09iamVjdC5kZWZpbmVQcm9w
ZXJ0eShlLCJfZXhwZXJpbWVudGFsTWFjcm9zIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24o
KXtyZXR1cm4gZy5leHBlcmltZW50YWxNYWNyb3N9fSl9KSxlKCJlbWJlci1nbGltbWVyL21vZGlm
aWVycy9hY3Rpb24iLFsiZXhwb3J0cyIsImVtYmVyLXV0aWxzIiwiZW1iZXItbWV0YWwiLCJlbWJl
ci1kZWJ1ZyIsImVtYmVyLXZpZXdzIiwiZW1iZXItZ2xpbW1lci9oZWxwZXJzL2FjdGlvbiJdLGZ1
bmN0aW9uKGUsdCxuLHIsaSxvKXsidXNlIHN0cmljdCIKK2Z1bmN0aW9uIHMoZSx0KXt2YXIgbgor
aWYobnVsbD09PXR8fHZvaWQgMD09PXQpe2lmKHUudGVzdChlLnR5cGUpKXJldHVybigwLGkuaXNT
aW1wbGVDbGljaykoZSkKK3Q9IiJ9aWYodC5pbmRleE9mKCJhbnkiKT49MClyZXR1cm4hMAorZm9y
KG49MDtuPGEubGVuZ3RoO24rKylpZihlW2Fbbl0rIktleSJdJiYtMT09PXQuaW5kZXhPZihhW25d
KSlyZXR1cm4hMQorcmV0dXJuITB9ZS5BY3Rpb25TdGF0ZT1lLkFjdGlvbkhlbHBlcj12b2lkIDAK
K3ZhciBhPVsiYWx0Iiwic2hpZnQiLCJtZXRhIiwiY3RybCJdLHU9L15jbGlja3xtb3VzZXx0b3Vj
aC8sbD1lLkFjdGlvbkhlbHBlcj17cmVnaXN0ZXJlZEFjdGlvbnM6aS5BY3Rpb25NYW5hZ2VyLnJl
Z2lzdGVyZWRBY3Rpb25zLHJlZ2lzdGVyQWN0aW9uOmZ1bmN0aW9uKGUpe3ZhciB0PWUuYWN0aW9u
SWQKK3JldHVybiBpLkFjdGlvbk1hbmFnZXIucmVnaXN0ZXJlZEFjdGlvbnNbdF09ZSx0fSx1bnJl
Z2lzdGVyQWN0aW9uOmZ1bmN0aW9uKGUpe3ZhciB0PWUuYWN0aW9uSWQKK2RlbGV0ZSBpLkFjdGlv
bk1hbmFnZXIucmVnaXN0ZXJlZEFjdGlvbnNbdF19fSxjPWUuQWN0aW9uU3RhdGU9ZnVuY3Rpb24o
KXtmdW5jdGlvbiBlKGUsdCxuLHIsaSxvLHMsYSl7dGhpcy5lbGVtZW50PWUsdGhpcy5hY3Rpb25J
ZD10LHRoaXMuYWN0aW9uTmFtZT1uLHRoaXMuYWN0aW9uQXJncz1yLHRoaXMubmFtZWRBcmdzPWks
dGhpcy5wb3NpdGlvbmFsPW8sdGhpcy5pbXBsaWNpdFRhcmdldD1zLHRoaXMuZG9tPWEsdGhpcy5l
dmVudE5hbWU9dGhpcy5nZXRFdmVudE5hbWUoKX1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0RXZlbnRO
YW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZWRBcmdzLmdldCgib24iKS52YWx1ZSgpfHwi
Y2xpY2sifSxlLnByb3RvdHlwZS5nZXRBY3Rpb25BcmdzPWZ1bmN0aW9uKCl7dmFyIGUsdD1uZXcg
QXJyYXkodGhpcy5hY3Rpb25BcmdzLmxlbmd0aCkKK2ZvcihlPTA7ZTx0aGlzLmFjdGlvbkFyZ3Mu
bGVuZ3RoO2UrKyl0W2VdPXRoaXMuYWN0aW9uQXJnc1tlXS52YWx1ZSgpCityZXR1cm4gdH0sZS5w
cm90b3R5cGUuZ2V0VGFyZ2V0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5pbXBsaWNpdFRhcmdldCx0
PXRoaXMubmFtZWRBcmdzCityZXR1cm4gdC5oYXMoInRhcmdldCIpP3QuZ2V0KCJ0YXJnZXQiKS52
YWx1ZSgpOmUudmFsdWUoKX0sZS5wcm90b3R5cGUuaGFuZGxlcj1mdW5jdGlvbihlKXt2YXIgdD10
aGlzLHI9dGhpcy5hY3Rpb25OYW1lLGk9dGhpcy5uYW1lZEFyZ3MsYT1pLmdldCgiYnViYmxlcyIp
LHU9aS5nZXQoInByZXZlbnREZWZhdWx0IiksbD1pLmdldCgiYWxsb3dlZEtleXMiKSxjPXRoaXMu
Z2V0VGFyZ2V0KCkKK2lmKCFzKGUsbC52YWx1ZSgpKSlyZXR1cm4hMAorITEhPT11LnZhbHVlKCkm
JmUucHJldmVudERlZmF1bHQoKSwhMT09PWEudmFsdWUoKSYmZS5zdG9wUHJvcGFnYXRpb24oKSwo
MCxuLnJ1bikoZnVuY3Rpb24oKXt2YXIgZT10LmdldEFjdGlvbkFyZ3MoKSxpPXthcmdzOmUsdGFy
Z2V0OmN9CityZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgcltvLklOVk9LRV0/dm9pZCgwLG4uZmxh
Z2dlZEluc3RydW1lbnQpKCJpbnRlcmFjdGlvbi5lbWJlci1hY3Rpb24iLGksZnVuY3Rpb24oKXty
W28uSU5WT0tFXS5hcHBseShyLGUpfSk6ImZ1bmN0aW9uIj09dHlwZW9mIHI/dm9pZCgwLG4uZmxh
Z2dlZEluc3RydW1lbnQpKCJpbnRlcmFjdGlvbi5lbWJlci1hY3Rpb24iLGksZnVuY3Rpb24oKXty
LmFwcGx5KGMsZSl9KTooaS5uYW1lPXIsdm9pZChjLnNlbmQ/KDAsbi5mbGFnZ2VkSW5zdHJ1bWVu
dCkoImludGVyYWN0aW9uLmVtYmVyLWFjdGlvbiIsaSxmdW5jdGlvbigpe2Muc2VuZC5hcHBseShj
LFtyXS5jb25jYXQoZSkpfSk6KDAsbi5mbGFnZ2VkSW5zdHJ1bWVudCkoImludGVyYWN0aW9uLmVt
YmVyLWFjdGlvbiIsaSxmdW5jdGlvbigpe2Nbcl0uYXBwbHkoYyxlKX0pKSl9KX0sZS5wcm90b3R5
cGUuZGVzdHJveT1mdW5jdGlvbigpe2wudW5yZWdpc3RlckFjdGlvbih0aGlzKX0sZX0oKSxwPWZ1
bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9u
KGUsbixyLGkpe3ZhciBzLGE9bi5uYW1lZCx1PW4ucG9zaXRpb25hbCxsPXZvaWQgMCxwPXZvaWQg
MCxmPXZvaWQgMAordS5sZW5ndGg+MSYmKGw9dS5hdCgwKSxmPXUuYXQoMSksZltvLklOVk9LRV0/
cD1mOihmLl9wcm9wZXJ0eUtleSxwPWYudmFsdWUoKSkpCit2YXIgaD1bXQorZm9yKHM9MjtzPHUu
bGVuZ3RoO3MrKyloLnB1c2godS5hdChzKSkKK3ZhciBkPSgwLHQudXVpZCkoKQorcmV0dXJuIG5l
dyBjKGUsZCxwLGgsYSx1LGwsaSl9LGUucHJvdG90eXBlLmluc3RhbGw9ZnVuY3Rpb24oZSl7dmFy
IHQ9ZS5kb20sbj1lLmVsZW1lbnQscj1lLmFjdGlvbklkCitsLnJlZ2lzdGVyQWN0aW9uKGUpLHQu
c2V0QXR0cmlidXRlKG4sImRhdGEtZW1iZXItYWN0aW9uIiwiIiksdC5zZXRBdHRyaWJ1dGUobiwi
ZGF0YS1lbWJlci1hY3Rpb24tIityLHIpfSxlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSl7
dmFyIHQ9ZS5wb3NpdGlvbmFsLG49dC5hdCgxKQorbltvLklOVk9LRV18fChlLmFjdGlvbk5hbWU9
bi52YWx1ZSgpKSxlLmV2ZW50TmFtZT1lLmdldEV2ZW50TmFtZSgpfSxlLnByb3RvdHlwZS5nZXRE
ZXN0cnVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBlfSxlfSgpCitlLmRlZmF1bHQ9cH0pLGUoImVt
YmVyLWdsaW1tZXIvcHJvdG9jb2wtZm9yLXVybCIsWyJleHBvcnRzIiwiZW1iZXItZW52aXJvbm1l
bnQiLCJub2RlLW1vZHVsZSJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCIKK2Z1bmN0aW9u
IHIoZSl7cmV0dXJuIHN8fChzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSkscy5ocmVmPWUs
cy5wcm90b2NvbH1mdW5jdGlvbiBpKGUpe3ZhciB0PW51bGwKK3JldHVybiJzdHJpbmciPT10eXBl
b2YgZSYmKHQ9by5wYXJzZShlKS5wcm90b2NvbCksbnVsbD09PXQ/IjoiOnR9ZS5kZWZhdWx0PWZ1
bmN0aW9uKGUpe3ZhciBzPXZvaWQgMAoraWYodC5lbnZpcm9ubWVudC5oYXNET00mJihzPXIuY2Fs
bChlLCJmb29iYXI6YmF6IikpLCJmb29iYXI6Ij09PXMpZS5wcm90b2NvbEZvclVSTD1yCitlbHNl
IGlmKCJvYmplY3QiPT10eXBlb2YgVVJMKW89VVJMLGUucHJvdG9jb2xGb3JVUkw9aQorZWxzZXtp
Zighbi5JU19OT0RFKXRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgdmFsaWQgVVJMIHBh
cnNpbmcgbWVjaGFuaXNtIGZvciBVUkwgU2FuaXRpemF0aW9uIikKK289KDAsbi5yZXF1aXJlKSgi
dXJsIiksZS5wcm90b2NvbEZvclVSTD1pfX0KK3ZhciBvPXZvaWQgMCxzPXZvaWQgMH0pLGUoImVt
YmVyLWdsaW1tZXIvcmVuZGVyZXIiLFsiZXhwb3J0cyIsImVtYmVyLWJhYmVsIiwiZW1iZXItZ2xp
bW1lci91dGlscy9yZWZlcmVuY2VzIiwiZW1iZXItbWV0YWwiLCJAZ2xpbW1lci9yZWZlcmVuY2Ui
LCJlbWJlci12aWV3cyIsImVtYmVyLWdsaW1tZXIvY29tcG9uZW50IiwiZW1iZXItZ2xpbW1lci9z
eW50YXgvY3VybHktY29tcG9uZW50IiwiZW1iZXItZ2xpbW1lci9zeW50YXgvb3V0bGV0IiwiZW1i
ZXItZGVidWciXSxmdW5jdGlvbihlLHQsbixyLGksbyxzLGEsdSxsKXsidXNlIHN0cmljdCIKK2Z1
bmN0aW9uIGMoZSl7Zy5wdXNoKGUpfWZ1bmN0aW9uIHAoZSl7dmFyIHQ9Zy5pbmRleE9mKGUpCitn
LnNwbGljZSh0LDEpfWZ1bmN0aW9uIGYoKXt9ZS5JbnRlcmFjdGl2ZVJlbmRlcmVyPWUuSW5lcnRS
ZW5kZXJlcj12b2lkIDAKK3ZhciBoPXIucnVuLmJhY2tidXJuZXIsZD1mdW5jdGlvbigpe2Z1bmN0
aW9uIGUoZSx0LG4pe3RoaXMudmlldz1lLHRoaXMub3V0bGV0U3RhdGU9dCx0aGlzLnJvb3RPdXRs
ZXRTdGF0ZT1ufXJldHVybiBlLnByb3RvdHlwZS5jaGlsZD1mdW5jdGlvbigpe3JldHVybiBuZXcg
ZSh0aGlzLnZpZXcsdGhpcy5vdXRsZXRTdGF0ZSx0aGlzLnJvb3RPdXRsZXRTdGF0ZSl9LGUucHJv
dG90eXBlLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vdXRsZXRTdGF0ZX0sZS5wcm90b3R5
cGUuc2V0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMub3V0bGV0U3RhdGU9dCx0fSxlfSgpLG09
ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLHIsaSxzKXt2YXIgYT10aGlzCit0aGlzLmlkPSgw
LG8uZ2V0Vmlld0lkKShlKSx0aGlzLmVudj10LHRoaXMucm9vdD1lLHRoaXMucmVzdWx0PXZvaWQg
MCx0aGlzLnNob3VsZFJlZmx1c2g9ITEsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5fcmVtb3Zpbmc9
ITEKK3ZhciB1PXRoaXMub3B0aW9ucz17YWx3YXlzUmV2YWxpZGF0ZTohMX0KK3RoaXMucmVuZGVy
PWZ1bmN0aW9uKCl7dmFyIGU9bi5yZW5kZXIocixpLHMpLHQ9dm9pZCAwCitkb3t0PWUubmV4dCgp
fXdoaWxlKCF0LmRvbmUpCit2YXIgbz1hLnJlc3VsdD10LnZhbHVlCithLnJlbmRlcj1mdW5jdGlv
bigpe28ucmVyZW5kZXIodSl9fX1yZXR1cm4gZS5wcm90b3R5cGUuaXNGb3I9ZnVuY3Rpb24oZSl7
cmV0dXJuIHRoaXMucm9vdD09PWV9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIg
ZSx0PXRoaXMucmVzdWx0LG49dGhpcy5lbnYKK3RoaXMuZGVzdHJveWVkPSEwLHRoaXMuZW52PW51
bGwsdGhpcy5yb290PW51bGwsdGhpcy5yZXN1bHQ9bnVsbCx0aGlzLnJlbmRlcj1udWxsLHQmJihl
PSFuLmluVHJhbnNhY3Rpb24sZSYmbi5iZWdpbigpLHQuZGVzdHJveSgpLGUmJm4uY29tbWl0KCkp
fSxlfSgpLGc9W107KDAsci5zZXRIYXNWaWV3cykoZnVuY3Rpb24oKXtyZXR1cm4gZy5sZW5ndGg+
MH0pCit2YXIgeT0wCitoLm9uKCJiZWdpbiIsZnVuY3Rpb24oKXt2YXIgZQorZm9yKGU9MDtlPGcu
bGVuZ3RoO2UrKylnW2VdLl9zY2hlZHVsZVJldmFsaWRhdGUoKX0pLGgub24oImVuZCIsZnVuY3Rp
b24oKXt2YXIgZQorZm9yKGU9MDtlPGcubGVuZ3RoO2UrKylpZighZ1tlXS5faXNWYWxpZCgpKXtp
Zih5PjEwKXRocm93IHk9MCxnW2VdLmRlc3Ryb3koKSxuZXcgRXJyb3IoImluZmluaXRlIHJlbmRl
cmluZyBpbnZhbGlkYXRpb24gZGV0ZWN0ZWQiKQorcmV0dXJuIHkrKyxoLmpvaW4obnVsbCxmKX15
PTB9KQordmFyIHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dmFyIG49YXJndW1lbnRzLmxl
bmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm8uZmFsbGJhY2tWaWV3
UmVnaXN0cnkscj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJn
dW1lbnRzWzNdCit0aGlzLl9lbnY9ZSx0aGlzLl9yb290VGVtcGxhdGU9dCx0aGlzLl92aWV3UmVn
aXN0cnk9bix0aGlzLl9kZXN0aW5lZEZvckRPTT1yLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9y
b290cz1bXSx0aGlzLl9sYXN0UmV2aXNpb249bnVsbCx0aGlzLl9pc1JlbmRlcmluZ1Jvb3RzPSEx
LHRoaXMuX3JlbW92ZWRSb290cz1bXX1yZXR1cm4gZS5wcm90b3R5cGUuYXBwZW5kT3V0bGV0Vmll
dz1mdW5jdGlvbihlLHQpe3ZhciBuPW5ldyB1LlRvcExldmVsT3V0bGV0Q29tcG9uZW50RGVmaW5p
dGlvbihlKSxyPWUudG9SZWZlcmVuY2UoKSxpPWUub3V0bGV0U3RhdGUucmVuZGVyLmNvbnRyb2xs
ZXIKK3RoaXMuX2FwcGVuZERlZmluaXRpb24oZSxuLHQscixpKX0sZS5wcm90b3R5cGUuYXBwZW5k
VG89ZnVuY3Rpb24oZSx0KXt2YXIgbj1uZXcgYS5Sb290Q29tcG9uZW50RGVmaW5pdGlvbihlKQor
dGhpcy5fYXBwZW5kRGVmaW5pdGlvbihlLG4sdCl9LGUucHJvdG90eXBlLl9hcHBlbmREZWZpbml0
aW9uPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbz1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFy
Z3VtZW50c1szXT9hcmd1bWVudHNbM106aS5VTkRFRklORURfUkVGRVJFTkNFLHM9YXJndW1lbnRz
Lmxlbmd0aD40JiZ2b2lkIDAhPT1hcmd1bWVudHNbNF0/YXJndW1lbnRzWzRdOm51bGwsYT1uZXcg
bi5Sb290UmVmZXJlbmNlKHQpLHU9bmV3IGQobnVsbCxvLG8sITAscyksbD1uZXcgbShlLHRoaXMu
X2Vudix0aGlzLl9yb290VGVtcGxhdGUsYSxyLHUpCit0aGlzLl9yZW5kZXJSb290KGwpfSxlLnBy
b3RvdHlwZS5yZXJlbmRlcj1mdW5jdGlvbigpe3RoaXMuX3NjaGVkdWxlUmV2YWxpZGF0ZSgpfSxl
LnByb3RvdHlwZS5yZWdpc3Rlcj1mdW5jdGlvbihlKXt2YXIgdD0oMCxvLmdldFZpZXdJZCkoZSkK
K3RoaXMuX3ZpZXdSZWdpc3RyeVt0XT1lfSxlLnByb3RvdHlwZS51bnJlZ2lzdGVyPWZ1bmN0aW9u
KGUpe2RlbGV0ZSB0aGlzLl92aWV3UmVnaXN0cnlbKDAsby5nZXRWaWV3SWQpKGUpXX0sZS5wcm90
b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGUpe2UuX3RyYW5zaXRpb25UbygiZGVzdHJveWluZyIpLHRo
aXMuY2xlYW51cFJvb3RGb3IoZSksKDAsby5zZXRWaWV3RWxlbWVudCkoZSxudWxsKSx0aGlzLl9k
ZXN0aW5lZEZvckRPTSYmZS50cmlnZ2VyKCJkaWREZXN0cm95RWxlbWVudCIpLGUuaXNEZXN0cm95
aW5nfHxlLmRlc3Ryb3koKX0sZS5wcm90b3R5cGUuY2xlYW51cFJvb3RGb3I9ZnVuY3Rpb24oZSl7
aWYoIXRoaXMuX2Rlc3Ryb3llZClmb3IodmFyIHQsbj10aGlzLl9yb290cyxyPXRoaXMuX3Jvb3Rz
Lmxlbmd0aDtyLS07KXQ9bltyXSx0LmlzRm9yKGUpJiZ0LmRlc3Ryb3koKX0sZS5wcm90b3R5cGUu
ZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0
aGlzLl9jbGVhckFsbFJvb3RzKCkpfSxlLnByb3RvdHlwZS5nZXRFbGVtZW50PWZ1bmN0aW9uKCl7
fSxlLnByb3RvdHlwZS5nZXRCb3VuZHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZVtzLkJPVU5EU10KK3Jl
dHVybntwYXJlbnRFbGVtZW50OnQucGFyZW50RWxlbWVudCgpLGZpcnN0Tm9kZTp0LmZpcnN0Tm9k
ZSgpLGxhc3ROb2RlOnQubGFzdE5vZGUoKX19LGUucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQ9ZnVu
Y3Rpb24oZSl7cmV0dXJuIHRoaXMuX2Vudi5nZXRBcHBlbmRPcGVyYXRpb25zKCkuY3JlYXRlRWxl
bWVudChlKX0sZS5wcm90b3R5cGUuX3JlbmRlclJvb3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5f
cm9vdHMKK3QucHVzaChlKSwxPT09dC5sZW5ndGgmJmModGhpcyksdGhpcy5fcmVuZGVyUm9vdHNU
cmFuc2FjdGlvbigpfSxlLnByb3RvdHlwZS5fcmVuZGVyUm9vdHM9ZnVuY3Rpb24oKXt2YXIgZSx0
LG4sbyxzLGE9dGhpcy5fcm9vdHMsdT10aGlzLl9lbnYsbD10aGlzLl9yZW1vdmVkUm9vdHMsYz12
b2lkIDAsZj12b2lkIDAKK2Rve2Zvcih1LmJlZ2luKCksZj1hLmxlbmd0aCxjPSExLGU9MDtlPGEu
bGVuZ3RoO2UrKyl0PWFbZV0sdC5kZXN0cm95ZWQ/bC5wdXNoKHQpOihuPXQuc2hvdWxkUmVmbHVz
aCxlPj1mJiYhbnx8KHQub3B0aW9ucy5hbHdheXNSZXZhbGlkYXRlPW4sbj10LnNob3VsZFJlZmx1
c2g9KDAsci5ydW5JblRyYW5zYWN0aW9uKSh0LCJyZW5kZXIiKSxjPWN8fG4pKQordGhpcy5fbGFz
dFJldmlzaW9uPWkuQ1VSUkVOVF9UQUcudmFsdWUoKSx1LmNvbW1pdCgpfXdoaWxlKGN8fGEubGVu
Z3RoPmYpCitmb3IoO2wubGVuZ3RoOylvPWwucG9wKCkscz1hLmluZGV4T2YobyksYS5zcGxpY2Uo
cywxKQorMD09PXRoaXMuX3Jvb3RzLmxlbmd0aCYmcCh0aGlzKX0sZS5wcm90b3R5cGUuX3JlbmRl
clJvb3RzVHJhbnNhY3Rpb249ZnVuY3Rpb24oKXtpZighdGhpcy5faXNSZW5kZXJpbmdSb290cyl7
dGhpcy5faXNSZW5kZXJpbmdSb290cz0hMAordmFyIGU9ITEKK3RyeXt0aGlzLl9yZW5kZXJSb290
cygpLGU9ITB9ZmluYWxseXtlfHwodGhpcy5fbGFzdFJldmlzaW9uPWkuQ1VSUkVOVF9UQUcudmFs
dWUoKSksdGhpcy5faXNSZW5kZXJpbmdSb290cz0hMX19fSxlLnByb3RvdHlwZS5fY2xlYXJBbGxS
b290cz1mdW5jdGlvbigpe3ZhciBlLHQsbj10aGlzLl9yb290cworZm9yKGU9MDtlPG4ubGVuZ3Ro
O2UrKyl0PW5bZV0sdC5kZXN0cm95KCkKK3RoaXMuX3JlbW92ZWRSb290cy5sZW5ndGg9MCx0aGlz
Ll9yb290cz1udWxsLG4ubGVuZ3RoJiZwKHRoaXMpfSxlLnByb3RvdHlwZS5fc2NoZWR1bGVSZXZh
bGlkYXRlPWZ1bmN0aW9uKCl7aC5zY2hlZHVsZU9uY2UoInJlbmRlciIsdGhpcyx0aGlzLl9yZXZh
bGlkYXRlKX0sZS5wcm90b3R5cGUuX2lzVmFsaWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVz
dHJveWVkfHwwPT09dGhpcy5fcm9vdHMubGVuZ3RofHxpLkNVUlJFTlRfVEFHLnZhbGlkYXRlKHRo
aXMuX2xhc3RSZXZpc2lvbil9LGUucHJvdG90eXBlLl9yZXZhbGlkYXRlPWZ1bmN0aW9uKCl7dGhp
cy5faXNWYWxpZCgpfHx0aGlzLl9yZW5kZXJSb290c1RyYW5zYWN0aW9uKCl9LGV9KCkKK2UuSW5l
cnRSZW5kZXJlcj1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7cmV0dXJuKDAsdC5wb3NzaWJsZUNv
bnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCx0
LmluaGVyaXRzKShuLGUpLG4uY3JlYXRlPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdGhpcyhlLmVu
dixlLnJvb3RUZW1wbGF0ZSxlLl92aWV3UmVnaXN0cnksITEpfSxuLnByb3RvdHlwZS5nZXRFbGVt
ZW50PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJBY2Nlc3NpbmcgYHRoaXMuZWxlbWVudGAg
aXMgbm90IGFsbG93ZWQgaW4gbm9uLWludGVyYWN0aXZlIGVudmlyb25tZW50cyAoc3VjaCBhcyBG
YXN0Qm9vdCkuIil9LG59KHYpLGUuSW50ZXJhY3RpdmVSZW5kZXJlcj1mdW5jdGlvbihlKXtmdW5j
dGlvbiBuKCl7cmV0dXJuKDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuYXBw
bHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4uY3JlYXRlPWZ1
bmN0aW9uKGUpe3JldHVybiBuZXcgdGhpcyhlLmVudixlLnJvb3RUZW1wbGF0ZSxlLl92aWV3UmVn
aXN0cnksITApfSxuLnByb3RvdHlwZS5nZXRFbGVtZW50PWZ1bmN0aW9uKGUpe3JldHVybigwLG8u
Z2V0Vmlld0VsZW1lbnQpKGUpfSxufSh2KX0pCitlKCJlbWJlci1nbGltbWVyL3NldHVwLXJlZ2lz
dHJ5IixbImV4cG9ydHMiLCJlbWJlci1iYWJlbCIsImVtYmVyLWVudmlyb25tZW50IiwiY29udGFp
bmVyIiwiZW1iZXItZ2xpbW1lci9yZW5kZXJlciIsImVtYmVyLWdsaW1tZXIvZG9tIiwiZW1iZXIt
Z2xpbW1lci92aWV3cy9vdXRsZXQiLCJlbWJlci1nbGltbWVyL2NvbXBvbmVudHMvdGV4dF9maWVs
ZCIsImVtYmVyLWdsaW1tZXIvY29tcG9uZW50cy90ZXh0X2FyZWEiLCJlbWJlci1nbGltbWVyL2Nv
bXBvbmVudHMvY2hlY2tib3giLCJlbWJlci1nbGltbWVyL2NvbXBvbmVudHMvbGluay10byIsImVt
YmVyLWdsaW1tZXIvY29tcG9uZW50IiwiZW1iZXItZ2xpbW1lci90ZW1wbGF0ZXMvY29tcG9uZW50
IiwiZW1iZXItZ2xpbW1lci90ZW1wbGF0ZXMvcm9vdCIsImVtYmVyLWdsaW1tZXIvdGVtcGxhdGVz
L291dGxldCIsImVtYmVyLWdsaW1tZXIvZW52aXJvbm1lbnQiXSxmdW5jdGlvbihlLHQsbixyLGks
byxzLGEsdSxsLGMscCxmLGgsZCxtKXsidXNlIHN0cmljdCIKK2Uuc2V0dXBBcHBsaWNhdGlvblJl
Z2lzdHJ5PWZ1bmN0aW9uKGUpe2UuaW5qZWN0aW9uKCJzZXJ2aWNlOi1nbGltbWVyLWVudmlyb25t
ZW50IiwiYXBwZW5kT3BlcmF0aW9ucyIsInNlcnZpY2U6LWRvbS10cmVlLWNvbnN0cnVjdGlvbiIp
LGUuaW5qZWN0aW9uKCJyZW5kZXJlciIsImVudiIsInNlcnZpY2U6LWdsaW1tZXItZW52aXJvbm1l
bnQiKSxlLnJlZ2lzdGVyKCgwLHIucHJpdmF0aXplKShnKSxoLmRlZmF1bHQpLGUuaW5qZWN0aW9u
KCJyZW5kZXJlciIsInJvb3RUZW1wbGF0ZSIsKDAsci5wcml2YXRpemUpKGcpKSxlLnJlZ2lzdGVy
KCJyZW5kZXJlcjotZG9tIixpLkludGVyYWN0aXZlUmVuZGVyZXIpLGUucmVnaXN0ZXIoInJlbmRl
cmVyOi1pbmVydCIsaS5JbmVydFJlbmRlcmVyKSxuLmVudmlyb25tZW50Lmhhc0RPTSYmZS5pbmpl
Y3Rpb24oInNlcnZpY2U6LWdsaW1tZXItZW52aXJvbm1lbnQiLCJ1cGRhdGVPcGVyYXRpb25zIiwi
c2VydmljZTotZG9tLWNoYW5nZXMiKSxlLnJlZ2lzdGVyKCJzZXJ2aWNlOi1kb20tY2hhbmdlcyIs
e2NyZWF0ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmRvY3VtZW50CityZXR1cm4gbmV3IG8uRE9NQ2hh
bmdlcyh0KX19KSxlLnJlZ2lzdGVyKCJzZXJ2aWNlOi1kb20tdHJlZS1jb25zdHJ1Y3Rpb24iLHtj
cmVhdGU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kb2N1bWVudAorcmV0dXJuIG5ldyhuLmVudmlyb25t
ZW50Lmhhc0RPTT9vLkRPTVRyZWVDb25zdHJ1Y3Rpb246by5Ob2RlRE9NVHJlZUNvbnN0cnVjdGlv
bikodCl9fSl9LGUuc2V0dXBFbmdpbmVSZWdpc3RyeT1mdW5jdGlvbihlKXtlLnJlZ2lzdGVyKCJ2
aWV3Oi1vdXRsZXQiLHMuZGVmYXVsdCksZS5yZWdpc3RlcigidGVtcGxhdGU6LW91dGxldCIsZC5k
ZWZhdWx0KSxlLmluamVjdGlvbigidmlldzotb3V0bGV0IiwidGVtcGxhdGUiLCJ0ZW1wbGF0ZTot
b3V0bGV0IiksZS5pbmplY3Rpb24oInNlcnZpY2U6LWRvbS1jaGFuZ2VzIiwiZG9jdW1lbnQiLCJz
ZXJ2aWNlOi1kb2N1bWVudCIpLGUuaW5qZWN0aW9uKCJzZXJ2aWNlOi1kb20tdHJlZS1jb25zdHJ1
Y3Rpb24iLCJkb2N1bWVudCIsInNlcnZpY2U6LWRvY3VtZW50IiksZS5yZWdpc3RlcigoMCxyLnBy
aXZhdGl6ZSkoeSksZi5kZWZhdWx0KSxlLnJlZ2lzdGVyKCJzZXJ2aWNlOi1nbGltbWVyLWVudmly
b25tZW50IixtLmRlZmF1bHQpLGUuaW5qZWN0aW9uKCJ0ZW1wbGF0ZSIsImVudiIsInNlcnZpY2U6
LWdsaW1tZXItZW52aXJvbm1lbnQiKSxlLm9wdGlvbnNGb3JUeXBlKCJoZWxwZXIiLHtpbnN0YW50
aWF0ZTohMX0pLGUucmVnaXN0ZXIoImNvbXBvbmVudDotdGV4dC1maWVsZCIsYS5kZWZhdWx0KSxl
LnJlZ2lzdGVyKCJjb21wb25lbnQ6LXRleHQtYXJlYSIsdS5kZWZhdWx0KSxlLnJlZ2lzdGVyKCJj
b21wb25lbnQ6LWNoZWNrYm94IixsLmRlZmF1bHQpLGUucmVnaXN0ZXIoImNvbXBvbmVudDpsaW5r
LXRvIixjLmRlZmF1bHQpLGUucmVnaXN0ZXIoKDAsci5wcml2YXRpemUpKHYpLHAuZGVmYXVsdCl9
Cit2YXIgZz0oMCx0LnRhZ2dlZFRlbXBsYXRlTGl0ZXJhbExvb3NlKShbInRlbXBsYXRlOi1yb290
Il0sWyJ0ZW1wbGF0ZTotcm9vdCJdKSx5PSgwLHQudGFnZ2VkVGVtcGxhdGVMaXRlcmFsTG9vc2Up
KFsidGVtcGxhdGU6Y29tcG9uZW50cy8tZGVmYXVsdCJdLFsidGVtcGxhdGU6Y29tcG9uZW50cy8t
ZGVmYXVsdCJdKSx2PSgwLHQudGFnZ2VkVGVtcGxhdGVMaXRlcmFsTG9vc2UpKFsiY29tcG9uZW50
Oi1kZWZhdWx0Il0sWyJjb21wb25lbnQ6LWRlZmF1bHQiXSl9KSxlKCJlbWJlci1nbGltbWVyL3N5
bnRheCIsWyJleHBvcnRzIiwiZW1iZXItZ2xpbW1lci9zeW50YXgvcmVuZGVyIiwiZW1iZXItZ2xp
bW1lci9zeW50YXgvb3V0bGV0IiwiZW1iZXItZ2xpbW1lci9zeW50YXgvbW91bnQiLCJlbWJlci1n
bGltbWVyL3N5bnRheC9keW5hbWljLWNvbXBvbmVudCIsImVtYmVyLWdsaW1tZXIvdXRpbHMvYmlu
ZGluZ3MiLCJlbWJlci1nbGltbWVyL3N5bnRheC8td2l0aC1keW5hbWljLXZhcnMiLCJlbWJlci1n
bGltbWVyL3N5bnRheC8taW4tZWxlbWVudCIsImVtYmVyLWdsaW1tZXIvc3ludGF4L2lucHV0Iiwi
ZW1iZXItZ2xpbW1lci9zeW50YXgvLXRleHQtYXJlYSIsImVtYmVyLWRlYnVnIl0sZnVuY3Rpb24o
ZSx0LG4scixpLG8scyxhLHUsbCxjKXsidXNlIHN0cmljdCIKK2Z1bmN0aW9uIHAoZSx0LG4scil7
dmFyIHM9ZVswXQoraWYoZS5sZW5ndGg+MSlyZXR1cm4oMCxpLmNsb3N1cmVDb21wb25lbnRNYWNy
bykoZSx0LG4sbnVsbCxudWxsLHIpCit2YXIgYT1yLnN5bWJvbFRhYmxlLHU9dm9pZCAwCityZXR1
cm4gcy5pbmRleE9mKCItIik+LTEmJih1PXIuZW52LmdldENvbXBvbmVudERlZmluaXRpb24oZSxh
KSksISF1JiYoKDAsby53cmFwQ29tcG9uZW50Q2xhc3NBdHRyaWJ1dGUpKG4pLHIuY29tcG9uZW50
LnN0YXRpYyh1LFt0LG4sbnVsbCxudWxsXSxhKSwhMCl9ZnVuY3Rpb24gZihlLHQpe3ZhciBuPWVb
MV0scj1lWzJdLHM9ZVszXSxhPWVbNF0sdT1lWzVdLGw9blswXQoraWYobi5sZW5ndGg+MSlyZXR1
cm4oMCxpLmNsb3N1cmVDb21wb25lbnRNYWNybykobixyLHMsYSx1LHQpCitpZigtMT09PWwuaW5k
ZXhPZigiLSIpKXJldHVybiExCit2YXIgYz10LnN5bWJvbFRhYmxlLHA9dm9pZCAwCityZXR1cm4g
bC5pbmRleE9mKCItIik+LTEmJihwPXQuZW52LmdldENvbXBvbmVudERlZmluaXRpb24obixjKSks
ISFwJiYoKDAsby53cmFwQ29tcG9uZW50Q2xhc3NBdHRyaWJ1dGUpKHMpLHQuY29tcG9uZW50LnN0
YXRpYyhwLFtyLHMsYSx1XSxjKSwhMCl9ZS5leHBlcmltZW50YWxNYWNyb3M9dm9pZCAwLGUucmVn
aXN0ZXJNYWNyb3M9ZnVuY3Rpb24oZSl7aC5wdXNoKGUpfSxlLnBvcHVsYXRlTWFjcm9zPWZ1bmN0
aW9uKGUsbyl7dmFyIGMKK2ZvcihvLmFkZCgib3V0bGV0IixuLm91dGxldE1hY3JvKSxvLmFkZCgi
Y29tcG9uZW50IixpLmlubGluZUNvbXBvbmVudE1hY3JvKSxvLmFkZCgicmVuZGVyIix0LnJlbmRl
ck1hY3JvKSxvLmFkZCgibW91bnQiLHIubW91bnRNYWNybyksby5hZGQoImlucHV0Iix1LmlucHV0
TWFjcm8pLG8uYWRkKCJ0ZXh0YXJlYSIsbC50ZXh0QXJlYU1hY3JvKSxvLmFkZE1pc3NpbmcocCks
ZS5hZGQoImNvbXBvbmVudCIsaS5ibG9ja0NvbXBvbmVudE1hY3JvKSxlLmFkZCgiLXdpdGgtZHlu
YW1pYy12YXJzIixzLl93aXRoRHluYW1pY1ZhcnNNYWNybyksZS5hZGQoIi1pbi1lbGVtZW50Iixh
Ll9pbkVsZW1lbnRNYWNybyksZS5hZGRNaXNzaW5nKGYpLGM9MDtjPGgubGVuZ3RoO2MrKykoMCxo
W2NdKShlLG8pCityZXR1cm57YmxvY2tzOmUsaW5saW5lczpvfX0KK3ZhciBoPWUuZXhwZXJpbWVu
dGFsTWFjcm9zPVtdfSksZSgiZW1iZXItZ2xpbW1lci9zeW50YXgvLWluLWVsZW1lbnQiLFsiZXhw
b3J0cyIsIkBnbGltbWVyL3J1bnRpbWUiLCJAZ2xpbW1lci91dGlsIl0sZnVuY3Rpb24oZSx0LG4p
eyJ1c2Ugc3RyaWN0IgorZS5faW5FbGVtZW50TWFjcm89ZnVuY3Rpb24oZSxyKXt2YXIgYT1pKGUp
LHU9KDAsdC5jb21waWxlQXJncykobyhlKSxzKGUpLHIpCityLnB1dEFyZ3ModSksci50ZXN0KCJz
aW1wbGUiKSxyLmxhYmVsbGVkKG51bGwsZnVuY3Rpb24oZSl7ZS5qdW1wVW5sZXNzKCJFTkQiKSxl
LnB1c2hSZW1vdGVFbGVtZW50KCksZS5ldmFsdWF0ZSgoMCxuLnVud3JhcCkoYSkpLGUucG9wUmVt
b3RlRWxlbWVudCgpfSl9Cit2YXIgcj10LkJhc2VsaW5lU3ludGF4Lk5lc3RlZEJsb2NrLGk9ci5k
ZWZhdWx0QmxvY2ssbz1yLnBhcmFtcyxzPXIuaGFzaH0pLGUoImVtYmVyLWdsaW1tZXIvc3ludGF4
Ly10ZXh0LWFyZWEiLFsiZXhwb3J0cyIsImVtYmVyLWdsaW1tZXIvdXRpbHMvYmluZGluZ3MiXSxm
dW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IgorZS50ZXh0QXJlYU1hY3JvPWZ1bmN0aW9uKGUsbixy
LGkpe3ZhciBvPWkuZW52LmdldENvbXBvbmVudERlZmluaXRpb24oWyItdGV4dC1hcmVhIl0saS5z
eW1ib2xUYWJsZSkKK3JldHVybigwLHQud3JhcENvbXBvbmVudENsYXNzQXR0cmlidXRlKShyKSxp
LmNvbXBvbmVudC5zdGF0aWMobyxbbixyLG51bGwsbnVsbF0saS5zeW1ib2xUYWJsZSksITB9fSks
ZSgiZW1iZXItZ2xpbW1lci9zeW50YXgvLXdpdGgtZHluYW1pYy12YXJzIixbImV4cG9ydHMiLCJA
Z2xpbW1lci9ydW50aW1lIiwiQGdsaW1tZXIvdXRpbCJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0
cmljdCIKK2UuX3dpdGhEeW5hbWljVmFyc01hY3JvPWZ1bmN0aW9uKGUscil7dmFyIGE9aShlKSx1
PSgwLHQuY29tcGlsZUFyZ3MpKG8oZSkscyhlKSxyKQorci51bml0KGZ1bmN0aW9uKGUpe2UucHV0
QXJncyh1KSxlLnB1c2hEeW5hbWljU2NvcGUoKSxlLmJpbmREeW5hbWljU2NvcGUodS5uYW1lZC5r
ZXlzKSxlLmV2YWx1YXRlKCgwLG4udW53cmFwKShhKSksZS5wb3BEeW5hbWljU2NvcGUoKX0pfQor
dmFyIHI9dC5CYXNlbGluZVN5bnRheC5OZXN0ZWRCbG9jayxpPXIuZGVmYXVsdEJsb2NrLG89ci5w
YXJhbXMscz1yLmhhc2h9KSxlKCJlbWJlci1nbGltbWVyL3N5bnRheC9hYnN0cmFjdC1tYW5hZ2Vy
IixbImV4cG9ydHMiXSxmdW5jdGlvbihlKXsidXNlIHN0cmljdCIKK2UuZGVmYXVsdD1mdW5jdGlv
bigpe319KSxlKCJlbWJlci1nbGltbWVyL3N5bnRheC9jdXJseS1jb21wb25lbnQiLFsiZXhwb3J0
cyIsImVtYmVyLWJhYmVsIiwiZW1iZXItdXRpbHMiLCJAZ2xpbW1lci9ydW50aW1lIiwiZW1iZXIt
Z2xpbW1lci91dGlscy9iaW5kaW5ncyIsImVtYmVyLWdsaW1tZXIvY29tcG9uZW50IiwiZW1iZXIt
bWV0YWwiLCJlbWJlci1kZWJ1ZyIsImVtYmVyLXZpZXdzIiwiZW1iZXItZ2xpbW1lci91dGlscy9w
cm9jZXNzLWFyZ3MiLCJjb250YWluZXIiLCJlbWJlci1nbGltbWVyL3N5bnRheC9hYnN0cmFjdC1t
YW5hZ2VyIl0sZnVuY3Rpb24oZSx0LG4scixpLG8scyxhLHUsbCxjLHApeyJ1c2Ugc3RyaWN0Igor
ZnVuY3Rpb24gZigpe31mdW5jdGlvbiBoKGUsdCl7ZS5uYW1lZC5oYXMoImlkIikmJih0LmVsZW1l
bnRJZD10LmlkKX1mdW5jdGlvbiBkKGUsdCxuLHIpe2Zvcih2YXIgbyxzLGEsdT1bXSxsPXQubGVu
Z3RoLTE7LTEhPT1sOylvPXRbbF0scz1pLkF0dHJpYnV0ZUJpbmRpbmcucGFyc2UobyksYT1zWzFd
LC0xPT09dS5pbmRleE9mKGEpJiYodS5wdXNoKGEpLGkuQXR0cmlidXRlQmluZGluZy5pbnN0YWxs
KGUsbixzLHIpKSxsLS07LTE9PT11LmluZGV4T2YoImlkIikmJnIuYWRkU3RhdGljQXR0cmlidXRl
KGUsImlkIixuLmVsZW1lbnRJZCksLTE9PT11LmluZGV4T2YoInN0eWxlIikmJmkuSXNWaXNpYmxl
QmluZGluZy5pbnN0YWxsKGUsbixyKX1mdW5jdGlvbiBtKCl7fWZ1bmN0aW9uIGcoZSl7cmV0dXJu
IGUuaW5zdHJ1bWVudERldGFpbHMoe2luaXRpYWxSZW5kZXI6ITB9KX1mdW5jdGlvbiB5KGUpe3Jl
dHVybiBlLmluc3RydW1lbnREZXRhaWxzKHtpbml0aWFsUmVuZGVyOiExfSl9ZnVuY3Rpb24gdihl
KXt2YXIgdD1lLmR5bmFtaWNTY29wZSgpLnZpZXcudGFnTmFtZQorcmV0dXJuIHIuUHJpbWl0aXZl
UmVmZXJlbmNlLmNyZWF0ZSgiIj09PXQ/bnVsbDp0fHwiZGl2Iil9ZnVuY3Rpb24gYihlKXtyZXR1
cm4gZS5nZXRTZWxmKCkuZ2V0KCJhcmlhUm9sZSIpfWUuUm9vdENvbXBvbmVudERlZmluaXRpb249
ZS5DdXJseUNvbXBvbmVudERlZmluaXRpb249dm9pZCAwLGUudmFsaWRhdGVQb3NpdGlvbmFsUGFy
YW1ldGVycz1mCit2YXIgXz0oMCx0LnRhZ2dlZFRlbXBsYXRlTGl0ZXJhbExvb3NlKShbInRlbXBs
YXRlOmNvbXBvbmVudHMvLWRlZmF1bHQiXSxbInRlbXBsYXRlOmNvbXBvbmVudHMvLWRlZmF1bHQi
XSksdz0oMCxjLnByaXZhdGl6ZSkoXyksRT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4scil7
dGhpcy5lbnZpcm9ubWVudD1lLHRoaXMuY29tcG9uZW50PXQsdGhpcy5jbGFzc1JlZj1udWxsLHRo
aXMuYXJncz1uLHRoaXMuYXJnc1JldmlzaW9uPW4udGFnLnZhbHVlKCksdGhpcy5maW5hbGl6ZXI9
cn1yZXR1cm4gZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY29tcG9u
ZW50LHQ9dGhpcy5lbnZpcm9ubWVudAordC5pc0ludGVyYWN0aXZlJiYoZS50cmlnZ2VyKCJ3aWxs
RGVzdHJveUVsZW1lbnQiKSxlLnRyaWdnZXIoIndpbGxDbGVhclJlbmRlciIpKSx0LmRlc3Ryb3ll
ZENvbXBvbmVudHMucHVzaChlKX0sZS5wcm90b3R5cGUuZmluYWxpemU9ZnVuY3Rpb24oKXsoMCx0
aGlzLmZpbmFsaXplcikoKSx0aGlzLmZpbmFsaXplcj1tfSxlfSgpLHg9ZnVuY3Rpb24oZSl7ZnVu
Y3Rpb24gcigpe3JldHVybigwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmFw
cGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsdC5pbmhlcml0cykocixlKSxyLnByb3RvdHlw
ZS5wcmVwYXJlQXJncz1mdW5jdGlvbihlLHQpe3JldHVybiBlLkNvbXBvbmVudENsYXNzJiYodC5u
YW1lZCx0LnBvc2l0aW9uYWwudmFsdWVzLGUuQ29tcG9uZW50Q2xhc3MuY2xhc3MucG9zaXRpb25h
bFBhcmFtcyksKDAsbC5nYXRoZXJBcmdzKSh0LGUpfSxyLnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rp
b24oZSx0LG4scixpLGEpe3ZhciB1PXIudmlldyxjPXQuQ29tcG9uZW50Q2xhc3MscD1sLkNvbXBv
bmVudEFyZ3MuY3JlYXRlKG4pLGY9cC52YWx1ZSgpLGQ9Zi5wcm9wcworaChuLGQpLGQucGFyZW50
Vmlldz11LGRbby5IQVNfQkxPQ0tdPWEsZC5fdGFyZ2V0T2JqZWN0PWkudmFsdWUoKQordmFyIG09
Yy5jcmVhdGUoZCkseT0oMCxzLl9pbnN0cnVtZW50U3RhcnQpKCJyZW5kZXIuY29tcG9uZW50Iixn
LG0pCityLnZpZXc9bSxudWxsIT09dSYmdS5hcHBlbmRDaGlsZChtKSwiIj09PW0udGFnTmFtZSYm
KGUuaXNJbnRlcmFjdGl2ZSYmbS50cmlnZ2VyKCJ3aWxsUmVuZGVyIiksbS5fdHJhbnNpdGlvblRv
KCJoYXNFbGVtZW50IiksZS5pc0ludGVyYWN0aXZlJiZtLnRyaWdnZXIoIndpbGxJbnNlcnRFbGVt
ZW50IikpCit2YXIgdj1uZXcgRShlLG0scCx5KQorcmV0dXJuIG4ubmFtZWQuaGFzKCJjbGFzcyIp
JiYodi5jbGFzc1JlZj1uLm5hbWVkLmdldCgiY2xhc3MiKSksZS5pc0ludGVyYWN0aXZlJiYiIiE9
PW0udGFnTmFtZSYmbS50cmlnZ2VyKCJ3aWxsUmVuZGVyIiksdn0sci5wcm90b3R5cGUubGF5b3V0
Rm9yPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPWUudGVtcGxhdGUKK3JldHVybiBpfHwocj10LmNv
bXBvbmVudCxpPXRoaXMudGVtcGxhdGVGb3IocixuKSksbi5nZXRDb21waWxlZEJsb2NrKFQsaSl9
LHIucHJvdG90eXBlLnRlbXBsYXRlRm9yPWZ1bmN0aW9uKGUsdCl7dmFyIHIsaT0oMCxzLmdldCko
ZSwibGF5b3V0Iiksbz1lW24uT1dORVJdCitpZihpKXJldHVybiB0LmdldFRlbXBsYXRlKGksbykK
K3ZhciBhPSgwLHMuZ2V0KShlLCJsYXlvdXROYW1lIikKK3JldHVybiBhJiYocj1vLmxvb2t1cCgi
dGVtcGxhdGU6IithKSk/cjpvLmxvb2t1cCh3KX0sci5wcm90b3R5cGUuZ2V0U2VsZj1mdW5jdGlv
bihlKXtyZXR1cm4gZS5jb21wb25lbnRbby5ST09UX1JFRl19LHIucHJvdG90eXBlLmRpZENyZWF0
ZUVsZW1lbnQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUuY29tcG9uZW50LG89ZS5jbGFzc1JlZixz
PWUuZW52aXJvbm1lbnQ7KDAsdS5zZXRWaWV3RWxlbWVudCkocix0KQordmFyIGE9ci5hdHRyaWJ1
dGVCaW5kaW5ncyxsPXIuY2xhc3NOYW1lcyxjPXIuY2xhc3NOYW1lQmluZGluZ3MKK2EmJmEubGVu
Z3RoP2QodCxhLHIsbik6KG4uYWRkU3RhdGljQXR0cmlidXRlKHQsImlkIixyLmVsZW1lbnRJZCks
aS5Jc1Zpc2libGVCaW5kaW5nLmluc3RhbGwodCxyLG4pKSxvJiZuLmFkZER5bmFtaWNBdHRyaWJ1
dGUodCwiY2xhc3MiLG8pLGwmJmwubGVuZ3RoJiZsLmZvckVhY2goZnVuY3Rpb24oZSl7bi5hZGRT
dGF0aWNBdHRyaWJ1dGUodCwiY2xhc3MiLGUpfSksYyYmYy5sZW5ndGgmJmMuZm9yRWFjaChmdW5j
dGlvbihlKXtpLkNsYXNzTmFtZUJpbmRpbmcuaW5zdGFsbCh0LHIsZSxuKX0pLHIuX3RyYW5zaXRp
b25UbygiaGFzRWxlbWVudCIpLHMuaXNJbnRlcmFjdGl2ZSYmci50cmlnZ2VyKCJ3aWxsSW5zZXJ0
RWxlbWVudCIpfSxyLnByb3RvdHlwZS5kaWRSZW5kZXJMYXlvdXQ9ZnVuY3Rpb24oZSx0KXtlLmNv
bXBvbmVudFtvLkJPVU5EU109dCxlLmZpbmFsaXplKCl9LHIucHJvdG90eXBlLmdldFRhZz1mdW5j
dGlvbihlKXtyZXR1cm4gZS5jb21wb25lbnRbby5ESVJUWV9UQUddfSxyLnByb3RvdHlwZS5kaWRD
cmVhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb21wb25lbnQKK2UuZW52aXJvbm1lbnQuaXNJbnRl
cmFjdGl2ZSYmKHQuX3RyYW5zaXRpb25UbygiaW5ET00iKSx0LnRyaWdnZXIoImRpZEluc2VydEVs
ZW1lbnQiKSx0LnRyaWdnZXIoImRpZFJlbmRlciIpKX0sci5wcm90b3R5cGUudXBkYXRlPWZ1bmN0
aW9uKGUpe3ZhciB0LG4scixpLGEsbD1lLmNvbXBvbmVudCxjPWUuYXJncyxwPWUuYXJnc1Jldmlz
aW9uLGY9ZS5lbnZpcm9ubWVudAorZS5maW5hbGl6ZXI9KDAscy5faW5zdHJ1bWVudFN0YXJ0KSgi
cmVuZGVyLmNvbXBvbmVudCIseSxsKSxjLnRhZy52YWxpZGF0ZShwKXx8KHQ9Yy52YWx1ZSgpLG49
dC5hdHRycyxyPXQucHJvcHMsZS5hcmdzUmV2aXNpb249Yy50YWcudmFsdWUoKSxpPWwuYXR0cnMs
YT1uLGxbby5JU19ESVNQQVRDSElOR19BVFRSU109ITAsbC5zZXRQcm9wZXJ0aWVzKHIpLGxbby5J
U19ESVNQQVRDSElOR19BVFRSU109ITEsKDAsdS5kaXNwYXRjaExpZmVDeWNsZUhvb2spKGwsImRp
ZFVwZGF0ZUF0dHJzIixpLGEpLCgwLHUuZGlzcGF0Y2hMaWZlQ3ljbGVIb29rKShsLCJkaWRSZWNl
aXZlQXR0cnMiLGksYSkpLGYuaXNJbnRlcmFjdGl2ZSYmKGwudHJpZ2dlcigid2lsbFVwZGF0ZSIp
LGwudHJpZ2dlcigid2lsbFJlbmRlciIpKX0sci5wcm90b3R5cGUuZGlkVXBkYXRlTGF5b3V0PWZ1
bmN0aW9uKGUpe2UuZmluYWxpemUoKX0sci5wcm90b3R5cGUuZGlkVXBkYXRlPWZ1bmN0aW9uKGUp
e3ZhciB0PWUuY29tcG9uZW50CitlLmVudmlyb25tZW50LmlzSW50ZXJhY3RpdmUmJih0LnRyaWdn
ZXIoImRpZFVwZGF0ZSIpLHQudHJpZ2dlcigiZGlkUmVuZGVyIikpfSxyLnByb3RvdHlwZS5nZXRE
ZXN0cnVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBlfSxyfShwLmRlZmF1bHQpLEM9bmV3IHgsTz1m
dW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7cmV0dXJuKDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0
dXJuKSh0aGlzLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCx0LmluaGVyaXRzKShu
LGUpLG4ucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT10LkNvbXBvbmVu
dENsYXNzLmNyZWF0ZSgpLG89KDAscy5faW5zdHJ1bWVudFN0YXJ0KSgicmVuZGVyLmNvbXBvbmVu
dCIsZyxpKQorcmV0dXJuIHIudmlldz1pLCIiPT09aS50YWdOYW1lJiYoZS5pc0ludGVyYWN0aXZl
JiZpLnRyaWdnZXIoIndpbGxSZW5kZXIiKSxpLl90cmFuc2l0aW9uVG8oImhhc0VsZW1lbnQiKSxl
LmlzSW50ZXJhY3RpdmUmJmkudHJpZ2dlcigid2lsbEluc2VydEVsZW1lbnQiKSksbmV3IEUoZSxp
LG4sbyl9LG59KHgpLEE9bmV3IE8KK2UuQ3VybHlDb21wb25lbnREZWZpbml0aW9uPWZ1bmN0aW9u
KGUpe2Z1bmN0aW9uIG4obixyLGksbyl7dmFyIHM9KDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0
dXJuKSh0aGlzLGUuY2FsbCh0aGlzLG4sQyxyKSkKK3JldHVybiBzLnRlbXBsYXRlPWkscy5hcmdz
PW8sc31yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG59KHIuQ29tcG9uZW50RGVmaW5pdGlvbiks
ZS5Sb290Q29tcG9uZW50RGVmaW5pdGlvbj1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKG4pe3ZhciBy
PSgwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmNhbGwodGhpcywiLXJvb3Qi
LEEse2NsYXNzOm4uY29uc3RydWN0b3IsY3JlYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIG59fSkpCity
ZXR1cm4gci50ZW1wbGF0ZT12b2lkIDAsci5hcmdzPXZvaWQgMCxyfXJldHVybigwLHQuaW5oZXJp
dHMpKG4sZSksbn0oci5Db21wb25lbnREZWZpbml0aW9uKQordmFyIFQ9ZnVuY3Rpb24oKXtmdW5j
dGlvbiBlKGUpe3RoaXMudGVtcGxhdGU9ZX1yZXR1cm4gZS5wcm90b3R5cGUuY29tcGlsZT1mdW5j
dGlvbihlKXtlLndyYXBMYXlvdXQodGhpcy50ZW1wbGF0ZS5hc0xheW91dCgpKSxlLnRhZy5keW5h
bWljKHYpLGUuYXR0cnMuZHluYW1pYygicm9sZSIsYiksZS5hdHRycy5zdGF0aWMoImNsYXNzIiwi
ZW1iZXItdmlldyIpfSxlfSgpCitULmlkPSJjdXJseSJ9KSxlKCJlbWJlci1nbGltbWVyL3N5bnRh
eC9keW5hbWljLWNvbXBvbmVudCIsWyJleHBvcnRzIiwiQGdsaW1tZXIvcnVudGltZSIsIkBnbGlt
bWVyL3JlZmVyZW5jZSIsImVtYmVyLWRlYnVnIl0sZnVuY3Rpb24oZSx0LG4scil7InVzZSBzdHJp
Y3QiCitmdW5jdGlvbiBpKGUsdCl7dmFyIG49ZS5lbnYscj1lLmdldEFyZ3MoKSxpPXIucG9zaXRp
b25hbC5hdCgwKQorcmV0dXJuIG5ldyBvKHtuYW1lUmVmOmksZW52Om4sc3ltYm9sVGFibGU6dH0p
fWUuY2xvc3VyZUNvbXBvbmVudE1hY3JvPWZ1bmN0aW9uKGUsdCxuLHIsbyxzKXtyZXR1cm4gcy5j
b21wb25lbnQuZHluYW1pYyhbW1siZ2V0IixlXV0sbixyLG9dLGksW3QsbixyLG9dLHMuc3ltYm9s
VGFibGUpLCEwfSxlLmR5bmFtaWNDb21wb25lbnRNYWNybz1mdW5jdGlvbihlLHQsbixyLG8pe3Zh
ciBzPVtlLnNsaWNlKDAsMSksbnVsbCxudWxsLG51bGxdLGE9W2Uuc2xpY2UoMSksdCxudWxsLG51
bGxdCityZXR1cm4gby5jb21wb25lbnQuZHluYW1pYyhzLGksYSxvLnN5bWJvbFRhYmxlKSwhMH0s
ZS5ibG9ja0NvbXBvbmVudE1hY3JvPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZVsyXSxyPWVbM10sbz1l
WzRdLHM9ZVs1XSxhPVtuLnNsaWNlKDAsMSksbnVsbCxudWxsLG51bGxdLHU9W24uc2xpY2UoMSks
cixvLHNdCityZXR1cm4gdC5jb21wb25lbnQuZHluYW1pYyhhLGksdSx0LnN5bWJvbFRhYmxlKSwh
MH0sZS5pbmxpbmVDb21wb25lbnRNYWNybz1mdW5jdGlvbihlLHQsbixyKXt2YXIgbz1bdC5zbGlj
ZSgwLDEpLG51bGwsbnVsbCxudWxsXSxzPVt0LnNsaWNlKDEpLG4sbnVsbCxudWxsXQorcmV0dXJu
IHIuY29tcG9uZW50LmR5bmFtaWMobyxpLHMsci5zeW1ib2xUYWJsZSksITB9Cit2YXIgbz1mdW5j
dGlvbigpe2Z1bmN0aW9uIGUoZSl7dmFyIHQ9ZS5uYW1lUmVmLG49ZS5lbnYscj1lLnN5bWJvbFRh
YmxlLGk9ZS5hcmdzCit0aGlzLnRhZz10LnRhZyx0aGlzLm5hbWVSZWY9dCx0aGlzLmVudj1uLHRo
aXMuc3ltYm9sVGFibGU9cix0aGlzLmFyZ3M9aX1yZXR1cm4gZS5wcm90b3R5cGUudmFsdWU9ZnVu
Y3Rpb24oKXt2YXIgZT10aGlzLmVudixuPXRoaXMubmFtZVJlZixyPXRoaXMuc3ltYm9sVGFibGUs
aT1uLnZhbHVlKCkKK3JldHVybiJzdHJpbmciPT10eXBlb2YgaT9lLmdldENvbXBvbmVudERlZmlu
aXRpb24oW2ldLHIpOigwLHQuaXNDb21wb25lbnREZWZpbml0aW9uKShpKT9pOm51bGx9LGUucHJv
dG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiBuLlVOREVGSU5FRF9SRUZFUkVOQ0V9LGV9KCl9
KSxlKCJlbWJlci1nbGltbWVyL3N5bnRheC9pbnB1dCIsWyJleHBvcnRzIiwiZW1iZXItZGVidWci
LCJlbWJlci1nbGltbWVyL3V0aWxzL2JpbmRpbmdzIiwiZW1iZXItZ2xpbW1lci9zeW50YXgvZHlu
YW1pYy1jb21wb25lbnQiXSxmdW5jdGlvbihlLHQsbixyKXsidXNlIHN0cmljdCIKK2Z1bmN0aW9u
IGkoZSx0LG4pe3ZhciByPW4uZW52LmdldENvbXBvbmVudERlZmluaXRpb24oWyItdGV4dC1maWVs
ZCJdLG4uc3ltYm9sVGFibGUpCityZXR1cm4gbi5jb21wb25lbnQuc3RhdGljKHIsW2UsdCxudWxs
LG51bGxdLG4uc3ltYm9sVGFibGUpLCEwfWUuaW5wdXRNYWNybz1mdW5jdGlvbihlLHQsbyxzKXt2
YXIgYSx1LGw9dm9pZCAwLGM9dm9pZCAwLHA9LTEKK3JldHVybiBvJiYobD1vWzBdLGM9b1sxXSxw
PWwuaW5kZXhPZigidHlwZSIpLGwuaW5kZXhPZigidmFsdWUiKSksdHx8KHQ9W10pLHA+LTE/KGE9
Y1twXSxBcnJheS5pc0FycmF5KGEpPygwLHIuZHluYW1pY0NvbXBvbmVudE1hY3JvKSh0LG8sbnVs
bCxudWxsLHMpOiJjaGVja2JveCI9PT1hPygoMCxuLndyYXBDb21wb25lbnRDbGFzc0F0dHJpYnV0
ZSkobyksdT1zLmVudi5nZXRDb21wb25lbnREZWZpbml0aW9uKFsiLWNoZWNrYm94Il0scy5zeW1i
b2xUYWJsZSkscy5jb21wb25lbnQuc3RhdGljKHUsW3QsbyxudWxsLG51bGxdLHMuc3ltYm9sVGFi
bGUpLCEwKTppKHQsbyxzKSk6aSh0LG8scyl9fSksZSgiZW1iZXItZ2xpbW1lci9zeW50YXgvbW91
bnQiLFsiZXhwb3J0cyIsImVtYmVyLWJhYmVsIiwiQGdsaW1tZXIvcnVudGltZSIsIkBnbGltbWVy
L3JlZmVyZW5jZSIsImVtYmVyLWRlYnVnIiwiZW1iZXItZ2xpbW1lci91dGlscy9yZWZlcmVuY2Vz
IiwiZW1iZXItcm91dGluZyIsImVtYmVyLWdsaW1tZXIvc3ludGF4L291dGxldCIsImVtYmVyLWds
aW1tZXIvc3ludGF4L2Fic3RyYWN0LW1hbmFnZXIiXSxmdW5jdGlvbihlLHQsbixyLGksbyxzLGEs
dSl7InVzZSBzdHJpY3QiCitmdW5jdGlvbiBsKGUsdCl7dmFyIG49ZS5lbnYscj1lLmdldEFyZ3Mo
KSxpPXIucG9zaXRpb25hbC5hdCgwKQorcmV0dXJuIG5ldyBjKHtuYW1lUmVmOmksZW52Om4sc3lt
Ym9sVGFibGU6dH0pfWUubW91bnRNYWNybz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT1bdC5zbGlj
ZSgwLDEpLG51bGwsbnVsbCxudWxsXQorcmV0dXJuIHIuY29tcG9uZW50LmR5bmFtaWMoaSxsLFtu
dWxsLG51bGwsbnVsbCxudWxsXSxyLnN5bWJvbFRhYmxlKSwhMH0KK3ZhciBjPWZ1bmN0aW9uKCl7
ZnVuY3Rpb24gZShlKXt2YXIgdD1lLm5hbWVSZWYsbj1lLmVudixyPWUuc3ltYm9sVGFibGUKK2Uu
YXJncwordGhpcy50YWc9dC50YWcsdGhpcy5uYW1lUmVmPXQsdGhpcy5lbnY9bix0aGlzLnN5bWJv
bFRhYmxlPXIsdGhpcy5fbGFzdE5hbWU9dm9pZCAwLHRoaXMuX2xhc3REZWY9dm9pZCAwfXJldHVy
biBlLnByb3RvdHlwZS52YWx1ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZW52LHQ9dGhpcy5uYW1l
UmVmLG49dC52YWx1ZSgpCityZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/dGhpcy5fbGFzdE5hbWU9
PT1uP3RoaXMuX2xhc3REZWY6ZS5vd25lci5oYXNSZWdpc3RyYXRpb24oImVuZ2luZToiK24pPyh0
aGlzLl9sYXN0TmFtZT1uLHRoaXMuX2xhc3REZWY9bmV3IGgobiksdGhpcy5fbGFzdERlZik6bnVs
bDpudWxsfSxlfSgpLHA9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3JldHVybigwLHQucG9zc2li
bGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJu
KDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS5wcmVwYXJlQXJncz1mdW5jdGlvbihlLHQp
e3JldHVybiB0fSxuLnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4saSl7dmFyIG89dC5u
YW1lCitpLm91dGxldFN0YXRlPXIuVU5ERUZJTkVEX1JFRkVSRU5DRQordmFyIHM9ZS5vd25lci5i
dWlsZENoaWxkRW5naW5lSW5zdGFuY2UobykKK3JldHVybiBzLmJvb3QoKSxzfSxuLnByb3RvdHlw
ZS5sYXlvdXRGb3I9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQubG9va3VwKCJ0ZW1wbGF0ZTphcHBs
aWNhdGlvbiIpCityZXR1cm4gbi5nZXRDb21waWxlZEJsb2NrKGEuT3V0bGV0TGF5b3V0Q29tcGls
ZXIscil9LG4ucHJvdG90eXBlLmdldFNlbGY9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5mYWN0b3J5Rm9y
KCJjb250cm9sbGVyOmFwcGxpY2F0aW9uIiksbj10fHwoMCxzLmdlbmVyYXRlQ29udHJvbGxlckZh
Y3RvcnkpKGUsImFwcGxpY2F0aW9uIikKK3JldHVybiBuZXcgby5Sb290UmVmZXJlbmNlKG4uY3Jl
YXRlKCkpfSxuLnByb3RvdHlwZS5nZXRUYWc9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbi5wcm90
b3R5cGUuZ2V0RGVzdHJ1Y3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gZX0sbi5wcm90b3R5cGUuZGlk
Q3JlYXRlRWxlbWVudD1mdW5jdGlvbigpe30sbi5wcm90b3R5cGUuZGlkUmVuZGVyTGF5b3V0PWZ1
bmN0aW9uKCl7fSxuLnByb3RvdHlwZS5kaWRDcmVhdGU9ZnVuY3Rpb24oKXt9LG4ucHJvdG90eXBl
LnVwZGF0ZT1mdW5jdGlvbigpe30sbi5wcm90b3R5cGUuZGlkVXBkYXRlTGF5b3V0PWZ1bmN0aW9u
KCl7fSxuLnByb3RvdHlwZS5kaWRVcGRhdGU9ZnVuY3Rpb24oKXt9LG59KHUuZGVmYXVsdCksZj1u
ZXcgcCxoPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4obil7cmV0dXJuKDAsdC5wb3NzaWJsZUNvbnN0
cnVjdG9yUmV0dXJuKSh0aGlzLGUuY2FsbCh0aGlzLG4sZixudWxsKSl9cmV0dXJuKDAsdC5pbmhl
cml0cykobixlKSxufShuLkNvbXBvbmVudERlZmluaXRpb24pfSksZSgiZW1iZXItZ2xpbW1lci9z
eW50YXgvb3V0bGV0IixbImV4cG9ydHMiLCJlbWJlci1iYWJlbCIsImVtYmVyLXV0aWxzIiwiQGds
aW1tZXIvcnVudGltZSIsImVtYmVyLW1ldGFsIiwiZW1iZXItZ2xpbW1lci91dGlscy9yZWZlcmVu
Y2VzIiwiZW1iZXItZ2xpbW1lci9zeW50YXgvYWJzdHJhY3QtbWFuYWdlciIsIkBnbGltbWVyL3Jl
ZmVyZW5jZSJdLGZ1bmN0aW9uKGUsdCxuLHIsaSxvLHMsYSl7InVzZSBzdHJpY3QiCitmdW5jdGlv
biB1KGUpe3ZhciB0PWUuZHluYW1pY1Njb3BlKCksbj10Lm91dGxldFN0YXRlLHI9ZS5nZXRBcmdz
KCksaT12b2lkIDAKK3JldHVybiBpPTA9PT1yLnBvc2l0aW9uYWwubGVuZ3RoP25ldyBhLkNvbnN0
UmVmZXJlbmNlKCJtYWluIik6ci5wb3NpdGlvbmFsLmF0KDApLG5ldyBmKGksbil9ZnVuY3Rpb24g
bChlLHQsbil7cmV0dXJuIHR8fG4/IXQmJm58fHQmJiFuP251bGw6bi5yZW5kZXIudGVtcGxhdGU9
PT10LnJlbmRlci50ZW1wbGF0ZSYmbi5yZW5kZXIuY29udHJvbGxlcj09PXQucmVuZGVyLmNvbnRy
b2xsZXI/ZTpudWxsOmV9ZnVuY3Rpb24gYyhlKXt2YXIgdD1lLnJlbmRlcgorcmV0dXJue29iamVj
dDp0Lm5hbWUrIjoiK3Qub3V0bGV0fX1mdW5jdGlvbiBwKCl7fWUuT3V0bGV0TGF5b3V0Q29tcGls
ZXI9ZS5Ub3BMZXZlbE91dGxldENvbXBvbmVudERlZmluaXRpb249dm9pZCAwLGUub3V0bGV0TWFj
cm89ZnVuY3Rpb24oZSx0LG4saSl7dHx8KHQ9W10pCit2YXIgbz1bdC5zbGljZSgwLDEpLG51bGws
bnVsbCxudWxsXQorcmV0dXJuIGkuY29tcG9uZW50LmR5bmFtaWMobyx1LHIuQ29tcGlsZWRBcmdz
LmVtcHR5KCksaS5zeW1ib2xUYWJsZSxudWxsKSwhMH0KK3ZhciBmPWZ1bmN0aW9uKCl7ZnVuY3Rp
b24gZShlLHQpe3RoaXMub3V0bGV0TmFtZVJlZj1lLHRoaXMucGFyZW50T3V0bGV0U3RhdGVSZWY9
dCx0aGlzLmRlZmluaXRpb249bnVsbCx0aGlzLmxhc3RTdGF0ZT1udWxsCit2YXIgbj10aGlzLm91
dGxldFN0YXRlVGFnPW5ldyBhLlVwZGF0YWJsZVRhZyh0LnRhZykKK3RoaXMudGFnPSgwLGEuY29t
YmluZSkoW24udGFnLGUudGFnXSl9cmV0dXJuIGUucHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uKCl7
dmFyIGU9dGhpcy5vdXRsZXROYW1lUmVmLHQ9dGhpcy5wYXJlbnRPdXRsZXRTdGF0ZVJlZixuPXRo
aXMuZGVmaW5pdGlvbixyPXRoaXMubGFzdFN0YXRlLGk9ZS52YWx1ZSgpLG89dC5nZXQoIm91dGxl
dHMiKS5nZXQoaSkscz10aGlzLmxhc3RTdGF0ZT1vLnZhbHVlKCkKK3RoaXMub3V0bGV0U3RhdGVU
YWcudXBkYXRlKG8udGFnKSxuPWwobixyLHMpCit2YXIgYT1zJiZzLnJlbmRlci50ZW1wbGF0ZQor
cmV0dXJuIG58fCh0aGlzLmRlZmluaXRpb249YT9uZXcgYihpLHMucmVuZGVyLnRlbXBsYXRlKTpu
dWxsKX0sZX0oKSxoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLm91dGxldFN0YXRlPWUs
dGhpcy5pbnN0cnVtZW50KCl9cmV0dXJuIGUucHJvdG90eXBlLmluc3RydW1lbnQ9ZnVuY3Rpb24o
KXt0aGlzLmZpbmFsaXplcj0oMCxpLl9pbnN0cnVtZW50U3RhcnQpKCJyZW5kZXIub3V0bGV0Iixj
LHRoaXMub3V0bGV0U3RhdGUpfSxlLnByb3RvdHlwZS5maW5hbGl6ZT1mdW5jdGlvbigpeygwLHRo
aXMuZmluYWxpemVyKSgpLHRoaXMuZmluYWxpemVyPXB9LGV9KCksZD1mdW5jdGlvbihlKXtmdW5j
dGlvbiBuKCl7cmV0dXJuKDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuYXBw
bHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBl
LnByZXBhcmVBcmdzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR9LG4ucHJvdG90eXBlLmNyZWF0ZT1m
dW5jdGlvbihlLHQsbixyKXt2YXIgaT1yLm91dGxldFN0YXRlPXIub3V0bGV0U3RhdGUuZ2V0KCJv
dXRsZXRzIikuZ2V0KHQub3V0bGV0TmFtZSksbz1pLnZhbHVlKCkKK3JldHVybiBuZXcgaChvKX0s
bi5wcm90b3R5cGUubGF5b3V0Rm9yPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbi5nZXRDb21waWxl
ZEJsb2NrKF8sZS50ZW1wbGF0ZSl9LG4ucHJvdG90eXBlLmdldFNlbGY9ZnVuY3Rpb24oZSl7dmFy
IHQ9ZS5vdXRsZXRTdGF0ZQorcmV0dXJuIG5ldyBvLlJvb3RSZWZlcmVuY2UodC5yZW5kZXIuY29u
dHJvbGxlcil9LG4ucHJvdG90eXBlLmdldFRhZz1mdW5jdGlvbigpe3JldHVybiBudWxsfSxuLnBy
b3RvdHlwZS5nZXREZXN0cnVjdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LG4ucHJvdG90eXBl
LmRpZFJlbmRlckxheW91dD1mdW5jdGlvbihlKXtlLmZpbmFsaXplKCl9LG4ucHJvdG90eXBlLmRp
ZENyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24oKXt9LG4ucHJvdG90eXBlLmRpZENyZWF0ZT1mdW5jdGlv
bigpe30sbi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7fSxuLnByb3RvdHlwZS5kaWRVcGRh
dGVMYXlvdXQ9ZnVuY3Rpb24oKXt9LG4ucHJvdG90eXBlLmRpZFVwZGF0ZT1mdW5jdGlvbigpe30s
bn0ocy5kZWZhdWx0KSxtPW5ldyBkLGc9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3JldHVybigw
LHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmFwcGx5KHRoaXMsYXJndW1lbnRz
KSl9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24o
ZSx0LG4scil7cmV0dXJuIG5ldyBoKHIub3V0bGV0U3RhdGUudmFsdWUoKSl9LG4ucHJvdG90eXBl
LmxheW91dEZvcj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG4uZ2V0Q29tcGlsZWRCbG9jayh2LGUu
dGVtcGxhdGUpfSxufShkKSx5PW5ldyBnCitlLlRvcExldmVsT3V0bGV0Q29tcG9uZW50RGVmaW5p
dGlvbj1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIpe3ZhciBpPSgwLHQucG9zc2libGVDb25zdHJ1
Y3RvclJldHVybikodGhpcyxlLmNhbGwodGhpcywib3V0bGV0Iix5LHIpKQorcmV0dXJuIGkudGVt
cGxhdGU9ci50ZW1wbGF0ZSwoMCxuLmdlbmVyYXRlR3VpZCkoaSksaX1yZXR1cm4oMCx0LmluaGVy
aXRzKShyLGUpLHJ9KHIuQ29tcG9uZW50RGVmaW5pdGlvbikKK3ZhciB2PWZ1bmN0aW9uKCl7ZnVu
Y3Rpb24gZShlKXt0aGlzLnRlbXBsYXRlPWV9cmV0dXJuIGUucHJvdG90eXBlLmNvbXBpbGU9ZnVu
Y3Rpb24oZSl7ZS53cmFwTGF5b3V0KHRoaXMudGVtcGxhdGUuYXNMYXlvdXQoKSksZS50YWcuc3Rh
dGljKCJkaXYiKSxlLmF0dHJzLnN0YXRpYygiaWQiLCgwLG4uZ3VpZEZvcikodGhpcykpLGUuYXR0
cnMuc3RhdGljKCJjbGFzcyIsImVtYmVyLXZpZXciKX0sZX0oKQordi5pZD0idG9wLWxldmVsLW91
dGxldCIKK3ZhciBiPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixpKXt2YXIgbz0oMCx0LnBvc3Np
YmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMsIm91dGxldCIsbSxudWxsKSkK
K3JldHVybiBvLm91dGxldE5hbWU9cixvLnRlbXBsYXRlPWksKDAsbi5nZW5lcmF0ZUd1aWQpKG8p
LG99cmV0dXJuKDAsdC5pbmhlcml0cykocixlKSxyfShyLkNvbXBvbmVudERlZmluaXRpb24pLF89
ZS5PdXRsZXRMYXlvdXRDb21waWxlcj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy50ZW1w
bGF0ZT1lfXJldHVybiBlLnByb3RvdHlwZS5jb21waWxlPWZ1bmN0aW9uKGUpe2Uud3JhcExheW91
dCh0aGlzLnRlbXBsYXRlLmFzTGF5b3V0KCkpfSxlfSgpCitfLmlkPSJvdXRsZXQifSksZSgiZW1i
ZXItZ2xpbW1lci9zeW50YXgvcmVuZGVyIixbImV4cG9ydHMiLCJlbWJlci1iYWJlbCIsIkBnbGlt
bWVyL3J1bnRpbWUiLCJAZ2xpbW1lci9yZWZlcmVuY2UiLCJlbWJlci1kZWJ1ZyIsImVtYmVyLWds
aW1tZXIvdXRpbHMvcmVmZXJlbmNlcyIsImVtYmVyLXJvdXRpbmciLCJlbWJlci1nbGltbWVyL3N5
bnRheC9vdXRsZXQiLCJlbWJlci1nbGltbWVyL3N5bnRheC9hYnN0cmFjdC1tYW5hZ2VyIl0sZnVu
Y3Rpb24oZSx0LG4scixpLG8scyxhLHUpeyJ1c2Ugc3RyaWN0IgorZnVuY3Rpb24gbChlKXt2YXIg
dCxuPWUuZW52LGk9ZS5nZXRBcmdzKCksbz1pLnBvc2l0aW9uYWwuYXQoMCkscz1vLnZhbHVlKCks
YT1uLm93bmVyLmxvb2t1cCgidGVtcGxhdGU6IitzKSx1PXZvaWQgMAorcmV0dXJuIGkubmFtZWQu
aGFzKCJjb250cm9sbGVyIik/KHQ9aS5uYW1lZC5nZXQoImNvbnRyb2xsZXIiKSx1PXQudmFsdWUo
KSk6dT1zLDE9PT1pLnBvc2l0aW9uYWwubGVuZ3RoP25ldyByLkNvbnN0UmVmZXJlbmNlKG5ldyBt
KHUsYSxuLGYpKTpuZXcgci5Db25zdFJlZmVyZW5jZShuZXcgbSh1LGEsbixkKSl9ZS5yZW5kZXJN
YWNybz1mdW5jdGlvbihlLHQsbixyKXt0fHwodD1bXSkKK3ZhciBpPVt0LnNsaWNlKDApLG4sbnVs
bCxudWxsXSxvPVt0LnNsaWNlKDEpLG4sbnVsbCxudWxsXQorcmV0dXJuIHIuY29tcG9uZW50LmR5
bmFtaWMoaSxsLG8sci5zeW1ib2xUYWJsZSksITB9Cit2YXIgYz1mdW5jdGlvbihlKXtmdW5jdGlv
biBuKCl7cmV0dXJuKDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuYXBwbHko
dGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLnBy
ZXBhcmVBcmdzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR9LG4ucHJvdG90eXBlLmxheW91dEZvcj1m
dW5jdGlvbihlLHQsbil7cmV0dXJuIG4uZ2V0Q29tcGlsZWRCbG9jayhhLk91dGxldExheW91dENv
bXBpbGVyLGUudGVtcGxhdGUpfSxuLnByb3RvdHlwZS5nZXRTZWxmPWZ1bmN0aW9uKGUpe3ZhciB0
PWUuY29udHJvbGxlcgorcmV0dXJuIG5ldyBvLlJvb3RSZWZlcmVuY2UodCl9LG4ucHJvdG90eXBl
LmdldFRhZz1mdW5jdGlvbigpe3JldHVybiBudWxsfSxuLnByb3RvdHlwZS5nZXREZXN0cnVjdG9y
PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LG4ucHJvdG90eXBlLmRpZENyZWF0ZUVsZW1lbnQ9ZnVu
Y3Rpb24oKXt9LG4ucHJvdG90eXBlLmRpZFJlbmRlckxheW91dD1mdW5jdGlvbigpe30sbi5wcm90
b3R5cGUuZGlkQ3JlYXRlPWZ1bmN0aW9uKCl7fSxuLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24o
KXt9LG4ucHJvdG90eXBlLmRpZFVwZGF0ZUxheW91dD1mdW5jdGlvbigpe30sbi5wcm90b3R5cGUu
ZGlkVXBkYXRlPWZ1bmN0aW9uKCl7fSxufSh1LmRlZmF1bHQpLHA9ZnVuY3Rpb24oZSl7ZnVuY3Rp
b24gbigpe3JldHVybigwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmFwcGx5
KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS5j
cmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dC5uYW1lLG89dC5lbnYsYT1vLm93bmVyLmxv
b2t1cCgiY29udHJvbGxlcjoiK2kpfHwoMCxzLmdlbmVyYXRlQ29udHJvbGxlcikoby5vd25lcixp
KQorcmV0dXJuIHIucm9vdE91dGxldFN0YXRlJiYoci5vdXRsZXRTdGF0ZT1yLnJvb3RPdXRsZXRT
dGF0ZS5nZXRPcnBoYW4oaSkpLHtjb250cm9sbGVyOmF9fSxufShjKSxmPW5ldyBwLGg9ZnVuY3Rp
b24oZSl7ZnVuY3Rpb24gbigpe3JldHVybigwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybiko
dGhpcyxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxu
LnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dC5uYW1lLG89dC5lbnYs
YT1uLnBvc2l0aW9uYWwuYXQoMCksdT1vLm93bmVyLmZhY3RvcnlGb3IoImNvbnRyb2xsZXI6Iitp
KSxsPXV8fCgwLHMuZ2VuZXJhdGVDb250cm9sbGVyRmFjdG9yeSkoby5vd25lcixpKSxjPWwuY3Jl
YXRlKHttb2RlbDphLnZhbHVlKCl9KQorcmV0dXJuIHIucm9vdE91dGxldFN0YXRlJiYoci5vdXRs
ZXRTdGF0ZT1yLnJvb3RPdXRsZXRTdGF0ZS5nZXRPcnBoYW4oaSkpLHtjb250cm9sbGVyOmN9fSxu
LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSx0KXtlLmNvbnRyb2xsZXIuc2V0KCJtb2RlbCIs
dC5wb3NpdGlvbmFsLmF0KDApLnZhbHVlKCkpfSxuLnByb3RvdHlwZS5nZXREZXN0cnVjdG9yPWZ1
bmN0aW9uKGUpe3JldHVybiBlLmNvbnRyb2xsZXJ9LG59KGMpLGQ9bmV3IGgsbT1mdW5jdGlvbihl
KXtmdW5jdGlvbiBuKG4scixpLG8pe3ZhciBzPSgwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVy
bikodGhpcyxlLmNhbGwodGhpcywicmVuZGVyIixvLG51bGwpKQorcmV0dXJuIHMubmFtZT1uLHMu
dGVtcGxhdGU9cixzLmVudj1pLHN9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxufShuLkNvbXBv
bmVudERlZmluaXRpb24pfSksZSgiZW1iZXItZ2xpbW1lci90ZW1wbGF0ZSIsWyJleHBvcnRzIiwi
ZW1iZXItdXRpbHMiLCJAZ2xpbW1lci9ydW50aW1lIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3Ry
aWN0IgorZS5kZWZhdWx0PWZ1bmN0aW9uKGUpe3ZhciByPSgwLG4udGVtcGxhdGVGYWN0b3J5KShl
KQorcmV0dXJue2lkOnIuaWQsbWV0YTpyLm1ldGEsY3JlYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBy
LmNyZWF0ZShlLmVudix7b3duZXI6ZVt0Lk9XTkVSXX0pfX19fSksZSgiZW1iZXItZ2xpbW1lci90
ZW1wbGF0ZV9yZWdpc3RyeSIsWyJleHBvcnRzIl0sZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiCitl
LnNldFRlbXBsYXRlcz1mdW5jdGlvbihlKXt0PWV9LGUuZ2V0VGVtcGxhdGVzPWZ1bmN0aW9uKCl7
cmV0dXJuIHR9LGUuZ2V0VGVtcGxhdGU9ZnVuY3Rpb24oZSl7aWYodC5oYXNPd25Qcm9wZXJ0eShl
KSlyZXR1cm4gdFtlXX0sZS5oYXNUZW1wbGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gdC5oYXNPd25Q
cm9wZXJ0eShlKX0sZS5zZXRUZW1wbGF0ZT1mdW5jdGlvbihlLG4pe3JldHVybiB0W2VdPW59Cit2
YXIgdD17fX0pLGUoImVtYmVyLWdsaW1tZXIvdGVtcGxhdGVzL2NvbXBvbmVudCIsWyJleHBvcnRz
IiwiZW1iZXItZ2xpbW1lci90ZW1wbGF0ZSJdLGZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiCitl
LmRlZmF1bHQ9KDAsdC5kZWZhdWx0KSh7aWQ6Im4rM21LU25CIixibG9jazoneyJzdGF0ZW1lbnRz
IjpbWzE4LCJkZWZhdWx0Il1dLCJsb2NhbHMiOltdLCJuYW1lZCI6W10sInlpZWxkcyI6WyJkZWZh
dWx0Il0sImhhc1BhcnRpYWxzIjpmYWxzZX0nLG1ldGE6e21vZHVsZU5hbWU6ImVtYmVyLWdsaW1t
ZXIvdGVtcGxhdGVzL2NvbXBvbmVudC5oYnMifX0pfSksZSgiZW1iZXItZ2xpbW1lci90ZW1wbGF0
ZXMvZW1wdHkiLFsiZXhwb3J0cyIsImVtYmVyLWdsaW1tZXIvdGVtcGxhdGUiXSxmdW5jdGlvbihl
LHQpeyJ1c2Ugc3RyaWN0IgorZS5kZWZhdWx0PSgwLHQuZGVmYXVsdCkoe2lkOiI1UUpKam5pTSIs
YmxvY2s6J3sic3RhdGVtZW50cyI6W10sImxvY2FscyI6W10sIm5hbWVkIjpbXSwieWllbGRzIjpb
XSwiaGFzUGFydGlhbHMiOmZhbHNlfScsbWV0YTp7bW9kdWxlTmFtZToiZW1iZXItZ2xpbW1lci90
ZW1wbGF0ZXMvZW1wdHkuaGJzIn19KX0pLGUoImVtYmVyLWdsaW1tZXIvdGVtcGxhdGVzL2xpbmst
dG8iLFsiZXhwb3J0cyIsImVtYmVyLWdsaW1tZXIvdGVtcGxhdGUiXSxmdW5jdGlvbihlLHQpeyJ1
c2Ugc3RyaWN0IgorZS5kZWZhdWx0PSgwLHQuZGVmYXVsdCkoe2lkOiJZVXdISUNBayIsYmxvY2s6
J3sic3RhdGVtZW50cyI6W1s2LFsiaWYiXSxbWzI4LFsibGlua1RpdGxlIl1dXSxudWxsLHsic3Rh
dGVtZW50cyI6W1sxLFsyNixbImxpbmtUaXRsZSJdXSxmYWxzZV1dLCJsb2NhbHMiOltdfSx7InN0
YXRlbWVudHMiOltbMTgsImRlZmF1bHQiXV0sImxvY2FscyI6W119XV0sImxvY2FscyI6W10sIm5h
bWVkIjpbXSwieWllbGRzIjpbImRlZmF1bHQiXSwiaGFzUGFydGlhbHMiOmZhbHNlfScsbWV0YTp7
bW9kdWxlTmFtZToiZW1iZXItZ2xpbW1lci90ZW1wbGF0ZXMvbGluay10by5oYnMifX0pfSksZSgi
ZW1iZXItZ2xpbW1lci90ZW1wbGF0ZXMvb3V0bGV0IixbImV4cG9ydHMiLCJlbWJlci1nbGltbWVy
L3RlbXBsYXRlIl0sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCIKK2UuZGVmYXVsdD0oMCx0LmRl
ZmF1bHQpKHtpZDoiYlZQMVdWTFIiLGJsb2NrOid7InN0YXRlbWVudHMiOltbMSxbMjYsWyJvdXRs
ZXQiXV0sZmFsc2VdXSwibG9jYWxzIjpbXSwibmFtZWQiOltdLCJ5aWVsZHMiOltdLCJoYXNQYXJ0
aWFscyI6ZmFsc2V9JyxtZXRhOnttb2R1bGVOYW1lOiJlbWJlci1nbGltbWVyL3RlbXBsYXRlcy9v
dXRsZXQuaGJzIn19KX0pLGUoImVtYmVyLWdsaW1tZXIvdGVtcGxhdGVzL3Jvb3QiLFsiZXhwb3J0
cyIsImVtYmVyLWdsaW1tZXIvdGVtcGxhdGUiXSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Igor
ZS5kZWZhdWx0PSgwLHQuZGVmYXVsdCkoe2lkOiJDamsydlMxMCIsYmxvY2s6J3sic3RhdGVtZW50
cyI6W1sxLFszMyxbImNvbXBvbmVudCJdLFtbMjgsW251bGxdXV0sbnVsbF0sZmFsc2VdXSwibG9j
YWxzIjpbXSwibmFtZWQiOltdLCJ5aWVsZHMiOltdLCJoYXNQYXJ0aWFscyI6ZmFsc2V9JyxtZXRh
Onttb2R1bGVOYW1lOiJlbWJlci1nbGltbWVyL3RlbXBsYXRlcy9yb290LmhicyJ9fSl9KSxlKCJl
bWJlci1nbGltbWVyL3V0aWxzL2JpbmRpbmdzIixbImV4cG9ydHMiLCJlbWJlci1iYWJlbCIsIkBn
bGltbWVyL3JlZmVyZW5jZSIsIkBnbGltbWVyL3dpcmUtZm9ybWF0IiwiZW1iZXItZGVidWciLCJl
bWJlci1tZXRhbCIsImVtYmVyLXJ1bnRpbWUiLCJlbWJlci1nbGltbWVyL2NvbXBvbmVudCIsImVt
YmVyLWdsaW1tZXIvdXRpbHMvc3RyaW5nIl0sZnVuY3Rpb24oZSx0LG4scixpLG8scyxhLHUpeyJ1
c2Ugc3RyaWN0IgorZnVuY3Rpb24gbChlLHQpe3JldHVybiBlW2EuUk9PVF9SRUZdLmdldCh0KX1m
dW5jdGlvbiBjKGUsdCl7cmV0dXJuImF0dHJzIj09PXRbMF0mJih0LnNoaWZ0KCksMT09PXQubGVu
Z3RoKT9sKGUsdFswXSk6KDAsbi5yZWZlcmVuY2VGcm9tUGFydHMpKGVbYS5ST09UX1JFRl0sdCl9
ZS5DbGFzc05hbWVCaW5kaW5nPWUuSXNWaXNpYmxlQmluZGluZz1lLkF0dHJpYnV0ZUJpbmRpbmc9
dm9pZCAwLGUud3JhcENvbXBvbmVudENsYXNzQXR0cmlidXRlPWZ1bmN0aW9uKGUpe2lmKCFlKXJl
dHVybiBlCit2YXIgdCxuLGksbyxzLGE9ZVswXSx1PWVbMV0sbD1hLmluZGV4T2YoImNsYXNzIikK
K3JldHVybi0xIT09bCYmKHQ9dVtsXSxuPXRbMF0sbj09PXIuT3BzLkdldCYmKGk9dVtsXSxvPWlb
MV0scz1vW28ubGVuZ3RoLTFdLGVbMV1bbF09W3IuT3BzLkhlbHBlcixbIi1jbGFzcyJdLFtpLHNd
XSkpLGV9LGUuQXR0cmlidXRlQmluZGluZz17cGFyc2U6ZnVuY3Rpb24oZSl7dmFyIHQsbixyPWUu
aW5kZXhPZigiOiIpCityZXR1cm4tMT09PXI/W2UsZSwhMF06KHQ9ZS5zdWJzdHJpbmcoMCxyKSxu
PWUuc3Vic3RyaW5nKHIrMSksW3QsbiwhMV0pfSxpbnN0YWxsOmZ1bmN0aW9uKGUsdCxuLHIpe3Zh
ciBpLHM9blswXSxhPW5bMV0KK25bMl0KK2lmKCJpZCI9PT1hKXJldHVybiBpPSgwLG8uZ2V0KSh0
LHMpLHZvaWQgMCE9PWkmJm51bGwhPT1pfHwoaT10LmVsZW1lbnRJZCksdm9pZCByLmFkZFN0YXRp
Y0F0dHJpYnV0ZShlLCJpZCIsaSkKK3ZhciB1PXMuaW5kZXhPZigiLiIpPi0xLHA9dT9jKHQscy5z
cGxpdCgiLiIpKTpsKHQscykKKyJzdHlsZSI9PT1hJiYocD1uZXcgZihwLGwodCwiaXNWaXNpYmxl
IikpKSxyLmFkZER5bmFtaWNBdHRyaWJ1dGUoZSxhLHApfX0KK3ZhciBwPSgwLHUuaHRtbFNhZmUp
KCJkaXNwbGF5OiBub25lOyIpLGY9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyLGkpe3ZhciBvPSgw
LHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmNhbGwodGhpcykpCityZXR1cm4g
by50YWc9KDAsbi5jb21iaW5lKShbci50YWcsaS50YWddKSxvLmlubmVyPXIsby5pc1Zpc2libGU9
aSxvfXJldHVybigwLHQuaW5oZXJpdHMpKHIsZSksci5wcm90b3R5cGUuY29tcHV0ZT1mdW5jdGlv
bigpe3ZhciBlLHQ9dGhpcy5pbm5lci52YWx1ZSgpCityZXR1cm4hMSE9PXRoaXMuaXNWaXNpYmxl
LnZhbHVlKCk/dDp0fHwwPT09dD8oZT10KyIgZGlzcGxheTogbm9uZTsiLCgwLHUuaXNIVE1MU2Fm
ZSkodCk/KDAsdS5odG1sU2FmZSkoZSk6ZSk6cH0scn0obi5DYWNoZWRSZWZlcmVuY2UpCitlLklz
VmlzaWJsZUJpbmRpbmc9e2luc3RhbGw6ZnVuY3Rpb24oZSx0LHIpe3IuYWRkRHluYW1pY0F0dHJp
YnV0ZShlLCJzdHlsZSIsKDAsbi5tYXApKGwodCwiaXNWaXNpYmxlIiksdGhpcy5tYXBTdHlsZVZh
bHVlKSl9LG1hcFN0eWxlVmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuITE9PT1lP3A6bnVsbH19LGUu
Q2xhc3NOYW1lQmluZGluZz17aW5zdGFsbDpmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLHMsYSx1
PW4uc3BsaXQoIjoiKSxwPXVbMF0sZj11WzFdLG09dVsyXQorIiI9PT1wP3IuYWRkU3RhdGljQXR0
cmlidXRlKGUsImNsYXNzIixmKTooaT1wLmluZGV4T2YoIi4iKT4tMSxvPWkmJnAuc3BsaXQoIi4i
KSxzPWk/Yyh0LG8pOmwodCxwKSxhPXZvaWQgMCxhPXZvaWQgMD09PWY/bmV3IGgocyxpP29bby5s
ZW5ndGgtMV06cCk6bmV3IGQocyxmLG0pLHIuYWRkRHluYW1pY0F0dHJpYnV0ZShlLCJjbGFzcyIs
YSkpfX0KK3ZhciBoPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4obixyKXt2YXIgaT0oMCx0LnBvc3Np
YmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMpKQorcmV0dXJuIGkudGFnPW4u
dGFnLGkuaW5uZXI9bixpLnBhdGg9cixpLmRhc2hlcml6ZWRQYXRoPW51bGwsaX1yZXR1cm4oMCx0
LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLmNvbXB1dGU9ZnVuY3Rpb24oKXt2YXIgZSx0PXRo
aXMuaW5uZXIudmFsdWUoKQorcmV0dXJuITA9PT10PyhlPXRoaXMucGF0aCx0aGlzLmRhc2hlcml6
ZWRQYXRofHwodGhpcy5kYXNoZXJpemVkUGF0aD1zLlN0cmluZy5kYXNoZXJpemUoZSkpKTp0fHww
PT09dD90Om51bGx9LG59KG4uQ2FjaGVkUmVmZXJlbmNlKSxkPWZ1bmN0aW9uKGUpe2Z1bmN0aW9u
IG4obixyLGkpe3ZhciBvPSgwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmNh
bGwodGhpcykpCityZXR1cm4gby50YWc9bi50YWcsby5pbm5lcj1uLG8udHJ1dGh5PXJ8fG51bGws
by5mYWxzeT1pfHxudWxsLG99cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS5j
b21wdXRlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5pbm5lcix0PXRoaXMudHJ1dGh5LG49dGhpcy5m
YWxzeQorcmV0dXJuIGUudmFsdWUoKT90Om59LG59KG4uQ2FjaGVkUmVmZXJlbmNlKX0pLGUoImVt
YmVyLWdsaW1tZXIvdXRpbHMvZGVidWctc3RhY2siLFsiZXhwb3J0cyJdLGZ1bmN0aW9uKGUpeyJ1
c2Ugc3RyaWN0IgorZS5kZWZhdWx0PXZvaWQgMH0pLGUoImVtYmVyLWdsaW1tZXIvdXRpbHMvaXRl
cmFibGUiLFsiZXhwb3J0cyIsImVtYmVyLXV0aWxzIiwiZW1iZXItbWV0YWwiLCJlbWJlci1ydW50
aW1lIiwiZW1iZXItZ2xpbW1lci91dGlscy9yZWZlcmVuY2VzIiwiZW1iZXItZ2xpbW1lci9oZWxw
ZXJzL2VhY2gtaW4iLCJAZ2xpbW1lci9yZWZlcmVuY2UiXSxmdW5jdGlvbihlLHQsbixyLGksbyxz
KXsidXNlIHN0cmljdCIKK2Z1bmN0aW9uIGEoZSl7c3dpdGNoKGUpe2Nhc2UiQGluZGV4IjpjYXNl
IHZvaWQgMDpjYXNlIG51bGw6cmV0dXJuIGwKK2Nhc2UiQGlkZW50aXR5IjpyZXR1cm4gYworZGVm
YXVsdDpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuKDAsbi5nZXQpKHQsZSl9fX1mdW5jdGlvbiB1
KGUpe3N3aXRjaChlKXtjYXNlIkBpbmRleCI6cmV0dXJuIGwKK2Nhc2UiQGlkZW50aXR5IjpjYXNl
IHZvaWQgMDpjYXNlIG51bGw6cmV0dXJuIGMKK2RlZmF1bHQ6cmV0dXJuIGZ1bmN0aW9uKHQpe3Jl
dHVybigwLG4uZ2V0KSh0LGUpfX19ZnVuY3Rpb24gbChlLHQpe3JldHVybiBTdHJpbmcodCl9ZnVu
Y3Rpb24gYyhlKXtzd2l0Y2godHlwZW9mIGUpe2Nhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6cmV0
dXJuIFN0cmluZyhlKQorZGVmYXVsdDpyZXR1cm4oMCx0Lmd1aWRGb3IpKGUpfX1mdW5jdGlvbiBw
KGUsdCl7dmFyIG49ZVt0XQorcmV0dXJuIG4/KGVbdF0rKyx0KyJiZTI3Nzc1Ny1iYmJlLTQ2MjAt
OWZjYi0yMTNlZjQzM2NjYTIiK24pOihlW3RdPTEsdCl9ZS5kZWZhdWx0PWZ1bmN0aW9uKGUsdCl7
cmV0dXJuKDAsby5pc0VhY2hJbikoZSk/bmV3IHkoZSxhKHQpKTpuZXcgdihlLHUodCkpfQordmFy
IGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5hcnJheT1lLHRoaXMubGVuZ3RoPWUu
bGVuZ3RoLHRoaXMua2V5Rm9yPXQsdGhpcy5wb3NpdGlvbj0wLHRoaXMuc2Vlbj1PYmplY3QuY3Jl
YXRlKG51bGwpfXJldHVybiBlLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuITF9
LGUucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmFycmF5LHQ9dGhpcy5sZW5n
dGgsbj10aGlzLmtleUZvcixyPXRoaXMucG9zaXRpb24saT10aGlzLnNlZW4KK2lmKHI+PXQpcmV0
dXJuIG51bGwKK3ZhciBvPWVbcl0scz1yLGE9cChpLG4obyxzKSkKK3JldHVybiB0aGlzLnBvc2l0
aW9uKysse2tleTphLHZhbHVlOm8sbWVtbzpzfX0sZX0oKSxoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24g
ZShlLHQpe3RoaXMuYXJyYXk9ZSx0aGlzLmxlbmd0aD0oMCxuLmdldCkoZSwibGVuZ3RoIiksdGhp
cy5rZXlGb3I9dCx0aGlzLnBvc2l0aW9uPTAsdGhpcy5zZWVuPU9iamVjdC5jcmVhdGUobnVsbCl9
cmV0dXJuIGUucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMubGVu
Z3RofSxlLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5hcnJheSx0PXRoaXMu
bGVuZ3RoLG49dGhpcy5rZXlGb3IsaT10aGlzLnBvc2l0aW9uLG89dGhpcy5zZWVuCitpZihpPj10
KXJldHVybiBudWxsCit2YXIgcz0oMCxyLm9iamVjdEF0KShlLGkpLGE9aSx1PXAobyxuKHMsYSkp
CityZXR1cm4gdGhpcy5wb3NpdGlvbisrLHtrZXk6dSx2YWx1ZTpzLG1lbW86YX19LGV9KCksZD1m
dW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3RoaXMua2V5cz1lLHRoaXMudmFsdWVzPXQsdGhp
cy5rZXlGb3I9bix0aGlzLnBvc2l0aW9uPTAsdGhpcy5zZWVuPU9iamVjdC5jcmVhdGUobnVsbCl9
cmV0dXJuIGUucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMua2V5
cy5sZW5ndGh9LGUucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmtleXMsdD10
aGlzLnZhbHVlcyxuPXRoaXMua2V5Rm9yLHI9dGhpcy5wb3NpdGlvbixpPXRoaXMuc2VlbgoraWYo
cj49ZS5sZW5ndGgpcmV0dXJuIG51bGwKK3ZhciBvPXRbcl0scz1lW3JdLGE9cChpLG4obyxzKSkK
K3JldHVybiB0aGlzLnBvc2l0aW9uKysse2tleTphLHZhbHVlOm8sbWVtbzpzfX0sZX0oKSxtPWZ1
bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlv
bigpe3JldHVybiEwfSxlLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9y
KCJDYW5ub3QgY2FsbCBuZXh0KCkgb24gYW4gZW1wdHkgaXRlcmF0b3IiKX0sZX0oKSxnPW5ldyBt
LHk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5yZWY9ZSx0aGlzLmtleUZvcj10Cit2
YXIgbj10aGlzLnZhbHVlVGFnPW5ldyBzLlVwZGF0YWJsZVRhZyhzLkNPTlNUQU5UX1RBRykKK3Ro
aXMudGFnPSgwLHMuY29tYmluZSkoW2UudGFnLG5dKX1yZXR1cm4gZS5wcm90b3R5cGUuaXRlcmF0
ZT1mdW5jdGlvbigpe3ZhciBlLHQscj10aGlzLnJlZixpPXRoaXMua2V5Rm9yLG89dGhpcy52YWx1
ZVRhZyxzPXIudmFsdWUoKQorby51cGRhdGUoKDAsbi50YWdGb3IpKHMpKSwoMCxuLmlzUHJveHkp
KHMpJiYocz0oMCxuLmdldCkocywiY29udGVudCIpKQordmFyIGE9dHlwZW9mIHMKK3JldHVybiFz
fHwib2JqZWN0IiE9PWEmJiJmdW5jdGlvbiIhPT1hP2c6KGU9T2JqZWN0LmtleXMocyksdD1lLm1h
cChmdW5jdGlvbihlKXtyZXR1cm4gc1tlXX0pLGUubGVuZ3RoPjA/bmV3IGQoZSx0LGkpOmcpfSxl
LnByb3RvdHlwZS52YWx1ZVJlZmVyZW5jZUZvcj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGkuVXBk
YXRhYmxlUHJpbWl0aXZlUmVmZXJlbmNlKGUubWVtbyl9LGUucHJvdG90eXBlLnVwZGF0ZVZhbHVl
UmVmZXJlbmNlPWZ1bmN0aW9uKGUsdCl7ZS51cGRhdGUodC5tZW1vKX0sZS5wcm90b3R5cGUubWVt
b1JlZmVyZW5jZUZvcj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGkuVXBkYXRhYmxlUmVmZXJlbmNl
KGUudmFsdWUpfSxlLnByb3RvdHlwZS51cGRhdGVNZW1vUmVmZXJlbmNlPWZ1bmN0aW9uKGUsdCl7
ZS51cGRhdGUodC52YWx1ZSl9LGV9KCksdj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlz
LnJlZj1lLHRoaXMua2V5Rm9yPXQKK3ZhciBuPXRoaXMudmFsdWVUYWc9bmV3IHMuVXBkYXRhYmxl
VGFnKHMuQ09OU1RBTlRfVEFHKQordGhpcy50YWc9KDAscy5jb21iaW5lKShbZS50YWcsbl0pfXJl
dHVybiBlLnByb3RvdHlwZS5pdGVyYXRlPWZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLnJlZixpPXRo
aXMua2V5Rm9yLG89dGhpcy52YWx1ZVRhZyxzPXQudmFsdWUoKQorcmV0dXJuIG8udXBkYXRlKCgw
LG4udGFnRm9yUHJvcGVydHkpKHMsIltdIikpLHMmJiJvYmplY3QiPT10eXBlb2Ygcz9BcnJheS5p
c0FycmF5KHMpP3MubGVuZ3RoPjA/bmV3IGYocyxpKTpnOigwLHIuaXNFbWJlckFycmF5KShzKT8o
MCxuLmdldCkocywibGVuZ3RoIik+MD9uZXcgaChzLGkpOmc6ImZ1bmN0aW9uIj09dHlwZW9mIHMu
Zm9yRWFjaD8oZT1bXSxzLmZvckVhY2goZnVuY3Rpb24odCl7ZS5wdXNoKHQpfSksZS5sZW5ndGg+
MD9uZXcgZihlLGkpOmcpOmc6Z30sZS5wcm90b3R5cGUudmFsdWVSZWZlcmVuY2VGb3I9ZnVuY3Rp
b24oZSl7cmV0dXJuIG5ldyBpLlVwZGF0YWJsZVJlZmVyZW5jZShlLnZhbHVlKX0sZS5wcm90b3R5
cGUudXBkYXRlVmFsdWVSZWZlcmVuY2U9ZnVuY3Rpb24oZSx0KXtlLnVwZGF0ZSh0LnZhbHVlKX0s
ZS5wcm90b3R5cGUubWVtb1JlZmVyZW5jZUZvcj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGkuVXBk
YXRhYmxlUHJpbWl0aXZlUmVmZXJlbmNlKGUubWVtbyl9LGUucHJvdG90eXBlLnVwZGF0ZU1lbW9S
ZWZlcmVuY2U9ZnVuY3Rpb24oZSx0KXtlLnVwZGF0ZSh0Lm1lbW8pfSxlfSgpfSksZSgiZW1iZXIt
Z2xpbW1lci91dGlscy9wcm9jZXNzLWFyZ3MiLFsiZXhwb3J0cyIsImVtYmVyLXV0aWxzIiwiQGds
aW1tZXIvcmVmZXJlbmNlIiwiZW1iZXItZ2xpbW1lci9jb21wb25lbnQiLCJlbWJlci1nbGltbWVy
L3V0aWxzL3JlZmVyZW5jZXMiLCJlbWJlci12aWV3cyIsImVtYmVyLWdsaW1tZXIvaGVscGVycy9h
Y3Rpb24iLCJAZ2xpbW1lci9ydW50aW1lIl0sZnVuY3Rpb24oZSx0LG4scixpLG8scyxhKXsidXNl
IHN0cmljdCIKK2Z1bmN0aW9uIHUoZSxuKXt2YXIgcj1lLm5hbWVkLm1hcAorcmV0dXJuIG4uYXJn
cz8oMCx0LmFzc2lnbikoe30sbi5hcmdzLm5hbWVkLm1hcCxyKTpyfWZ1bmN0aW9uIGwoZSx0KXt2
YXIgbixyLGk9ZS5wb3NpdGlvbmFsLnZhbHVlcworcmV0dXJuIHQuYXJncz8obj10LmFyZ3MucG9z
aXRpb25hbC52YWx1ZXMscj1bXSxyLnB1c2guYXBwbHkocixuKSxyLnNwbGljZS5hcHBseShyLFsw
LGkubGVuZ3RoXS5jb25jYXQoaSkpLHIpOml9ZnVuY3Rpb24gYyhlLHQsbixyKXt2YXIgaT1yLnBv
c2l0aW9uYWxQYXJhbXMKK3JldHVybiBpJiZpLmxlbmd0aD4wJiZ0Lmxlbmd0aD4wJiYoZT0ic3Ry
aW5nIj09dHlwZW9mIGk/cChlLHQsaSk6ZihlLHQsaSkpLGEuRXZhbHVhdGVkQXJncy5uYW1lZChl
LG4pfWZ1bmN0aW9uIHAoZSxuLHIpe3ZhciBpPSgwLHQuYXNzaWduKSh7fSxlKQorcmV0dXJuIGlb
cl09YS5FdmFsdWF0ZWRQb3NpdGlvbmFsQXJncy5jcmVhdGUobiksaX1mdW5jdGlvbiBmKGUsbixy
KXt2YXIgaSxvLHM9KDAsdC5hc3NpZ24pKHt9LGUpLGE9TWF0aC5taW4obi5sZW5ndGgsci5sZW5n
dGgpCitmb3IoaT0wO2k8YTtpKyspbz1yW2ldLHNbb109bltpXQorcmV0dXJuIHN9ZS5Db21wb25l
bnRBcmdzPXZvaWQgMCxlLmdhdGhlckFyZ3M9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYyh1KGUsdCks
bChlLHQpLGUuYmxvY2tzLHQuQ29tcG9uZW50Q2xhc3MuY2xhc3MpfQordmFyIGg9e3RhZzpuLkNP
TlNUQU5UX1RBRyx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlCityZXR1cm57YXR0cnM6e30scHJvcHM6
KGU9e2F0dHJzOnt9fSxlW3IuQVJHU109e30sZSl9fX0KK2UuQ29tcG9uZW50QXJncz1mdW5jdGlv
bigpe2Z1bmN0aW9uIGUoZSl7dGhpcy50YWc9ZS50YWcsdGhpcy5uYW1lZEFyZ3M9ZX1yZXR1cm4g
ZS5jcmVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10Lm5hbWVkLmtleXMubGVuZ3RoP2g6bmV3
IGUodC5uYW1lZCl9LGUucHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uKCl7dmFyIGUsdCxuLG8sYSx1
PXRoaXMubmFtZWRBcmdzLGw9dS5rZXlzLGM9dS52YWx1ZSgpLHA9T2JqZWN0LmNyZWF0ZShudWxs
KSxmPU9iamVjdC5jcmVhdGUobnVsbCkKK2ZvcihwW3IuQVJHU109Zix0PTAsbj1sLmxlbmd0aDt0
PG47dCsrKW89bFt0XSxhPXUuZ2V0KG8pLGU9Y1tvXSwiZnVuY3Rpb24iPT10eXBlb2YgZSYmZVtz
LkFDVElPTl0/Y1tvXT1lOmFbaS5VUERBVEVdJiYoY1tvXT1uZXcgbShhLGUpKSxmW29dPWEscFtv
XT1lCityZXR1cm4gcC5hdHRycz1jLHthdHRyczpjLHByb3BzOnB9fSxlfSgpCit2YXIgZD0oMCx0
LnN5bWJvbCkoIlJFRiIpLG09ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpc1tvLk1VVEFC
TEVfQ0VMTF09ITAsdGhpc1tkXT1lLHRoaXMudmFsdWU9dH1yZXR1cm4gZS5wcm90b3R5cGUudXBk
YXRlPWZ1bmN0aW9uKGUpe3RoaXNbZF1baS5VUERBVEVdKGUpfSxlfSgpfSksZSgiZW1iZXItZ2xp
bW1lci91dGlscy9yZWZlcmVuY2VzIixbImV4cG9ydHMiLCJAZ2xpbW1lci9ydW50aW1lIiwiZW1i
ZXItYmFiZWwiLCJlbWJlci11dGlscyIsImVtYmVyLW1ldGFsIiwiQGdsaW1tZXIvcmVmZXJlbmNl
IiwiZW1iZXItZ2xpbW1lci91dGlscy90by1ib29sIiwiZW1iZXItZ2xpbW1lci9oZWxwZXIiXSxm
dW5jdGlvbihlLHQsbixyLGksbyxzLGEpeyJ1c2Ugc3RyaWN0IgorZS5VbmJvdW5kUmVmZXJlbmNl
PWUuSW50ZXJuYWxIZWxwZXJSZWZlcmVuY2U9ZS5DbGFzc0Jhc2VkSGVscGVyUmVmZXJlbmNlPWUu
U2ltcGxlSGVscGVyUmVmZXJlbmNlPWUuQ29uZGl0aW9uYWxSZWZlcmVuY2U9ZS5VcGRhdGFibGVQ
cmltaXRpdmVSZWZlcmVuY2U9ZS5VcGRhdGFibGVSZWZlcmVuY2U9ZS5OZXN0ZWRQcm9wZXJ0eVJl
ZmVyZW5jZT1lLlJvb3RQcm9wZXJ0eVJlZmVyZW5jZT1lLlByb3BlcnR5UmVmZXJlbmNlPWUuUm9v
dFJlZmVyZW5jZT1lLkNhY2hlZFJlZmVyZW5jZT1lLlVOREVGSU5FRF9SRUZFUkVOQ0U9ZS5OVUxM
X1JFRkVSRU5DRT1lLlVQREFURT12b2lkIDAsT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIk5VTExf
UkVGRVJFTkNFIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdC5OVUxMX1JF
RkVSRU5DRX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiVU5ERUZJTkVEX1JFRkVSRU5DRSIs
e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHQuVU5ERUZJTkVEX1JFRkVSRU5D
RX19KQordmFyIHU9ZS5VUERBVEU9KDAsci5zeW1ib2wpKCJVUERBVEUiKSxsPWZ1bmN0aW9uKCl7
ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBm
LmNyZWF0ZSh0aGlzLGUpfSxlfSgpLGM9ZS5DYWNoZWRSZWZlcmVuY2U9ZnVuY3Rpb24oZSl7ZnVu
Y3Rpb24gdCgpe3ZhciB0PSgwLG4ucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmNh
bGwodGhpcykpCityZXR1cm4gdC5fbGFzdFJldmlzaW9uPW51bGwsdC5fbGFzdFZhbHVlPW51bGws
dH1yZXR1cm4oMCxuLmluaGVyaXRzKSh0LGUpLHQucHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uKCl7
dmFyIGU9dGhpcy50YWcsdD10aGlzLl9sYXN0UmV2aXNpb24sbj10aGlzLl9sYXN0VmFsdWUKK3Jl
dHVybiB0JiZlLnZhbGlkYXRlKHQpfHwobj10aGlzLl9sYXN0VmFsdWU9dGhpcy5jb21wdXRlKCks
dGhpcy5fbGFzdFJldmlzaW9uPWUudmFsdWUoKSksbn0sdH0obCkscD1lLlJvb3RSZWZlcmVuY2U9
ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0KXt2YXIgcj0oMCxuLnBvc3NpYmxlQ29uc3RydWN0b3JS
ZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMsdCkpCityZXR1cm4gci5jaGlsZHJlbj1PYmplY3QuY3Jl
YXRlKG51bGwpLHJ9cmV0dXJuKDAsbi5pbmhlcml0cykodCxlKSx0LnByb3RvdHlwZS5nZXQ9ZnVu
Y3Rpb24oZSl7dmFyIHQ9dGhpcy5jaGlsZHJlbltlXQorcmV0dXJuIHR8fCh0PXRoaXMuY2hpbGRy
ZW5bZV09bmV3IGgodGhpcy5pbm5lcixlKSksdH0sdH0oby5Db25zdFJlZmVyZW5jZSksZj1lLlBy
b3BlcnR5UmVmZXJlbmNlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4oMCxuLnBvc3Np
YmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVy
bigwLG4uaW5oZXJpdHMpKHQsZSksdC5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oMCxvLmlz
Q29uc3QpKGUpP25ldyBoKGUudmFsdWUoKSx0KTpuZXcgZChlLHQpfSx0LnByb3RvdHlwZS5nZXQ9
ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBkKHRoaXMsZSl9LHR9KGMpLGg9ZS5Sb290UHJvcGVydHlS
ZWZlcmVuY2U9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LHIpe3ZhciBvPSgwLG4ucG9zc2libGVD
b25zdHJ1Y3RvclJldHVybikodGhpcyxlLmNhbGwodGhpcykpCityZXR1cm4gby5fcGFyZW50VmFs
dWU9dCxvLl9wcm9wZXJ0eUtleT1yLG8udGFnPSgwLGkudGFnRm9yUHJvcGVydHkpKHQsciksb31y
ZXR1cm4oMCxuLmluaGVyaXRzKSh0LGUpLHQucHJvdG90eXBlLmNvbXB1dGU9ZnVuY3Rpb24oKXt2
YXIgZT10aGlzLl9wYXJlbnRWYWx1ZSx0PXRoaXMuX3Byb3BlcnR5S2V5CityZXR1cm4oMCxpLmdl
dCkoZSx0KX0sdC5wcm90b3R5cGVbdV09ZnVuY3Rpb24oZSl7KDAsaS5zZXQpKHRoaXMuX3BhcmVu
dFZhbHVlLHRoaXMuX3Byb3BlcnR5S2V5LGUpfSx0fShmKSxkPWUuTmVzdGVkUHJvcGVydHlSZWZl
cmVuY2U9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LHIpe3ZhciBpPSgwLG4ucG9zc2libGVDb25z
dHJ1Y3RvclJldHVybikodGhpcyxlLmNhbGwodGhpcykpLHM9dC50YWcsYT1uZXcgby5VcGRhdGFi
bGVUYWcoby5DT05TVEFOVF9UQUcpCityZXR1cm4gaS5fcGFyZW50UmVmZXJlbmNlPXQsaS5fcGFy
ZW50T2JqZWN0VGFnPWEsaS5fcHJvcGVydHlLZXk9cixpLnRhZz0oMCxvLmNvbWJpbmUpKFtzLGFd
KSxpfXJldHVybigwLG4uaW5oZXJpdHMpKHQsZSksdC5wcm90b3R5cGUuY29tcHV0ZT1mdW5jdGlv
bigpe3ZhciBlPXRoaXMuX3BhcmVudFJlZmVyZW5jZSx0PXRoaXMuX3BhcmVudE9iamVjdFRhZyxu
PXRoaXMuX3Byb3BlcnR5S2V5LHI9ZS52YWx1ZSgpCityZXR1cm4gdC51cGRhdGUoKDAsaS50YWdG
b3JQcm9wZXJ0eSkocixuKSksInN0cmluZyI9PXR5cGVvZiByJiYibGVuZ3RoIj09PW4/ci5sZW5n
dGg6Im9iamVjdCI9PXR5cGVvZiByJiZyPygwLGkuZ2V0KShyLG4pOnZvaWQgMH0sdC5wcm90b3R5
cGVbdV09ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fcGFyZW50UmVmZXJlbmNlLnZhbHVlKCk7KDAs
aS5zZXQpKHQsdGhpcy5fcHJvcGVydHlLZXksZSl9LHR9KGYpLG09ZS5VcGRhdGFibGVSZWZlcmVu
Y2U9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0KXt2YXIgcj0oMCxuLnBvc3NpYmxlQ29uc3RydWN0
b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMpKQorcmV0dXJuIHIudGFnPW5ldyBvLkRpcnR5YWJs
ZVRhZyxyLl92YWx1ZT10LHJ9cmV0dXJuKDAsbi5pbmhlcml0cykodCxlKSx0LnByb3RvdHlwZS52
YWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl92YWx1ZX0sdC5wcm90b3R5cGUudXBkYXRlPWZ1
bmN0aW9uKGUpe2UhPT10aGlzLl92YWx1ZSYmKHRoaXMudGFnLmRpcnR5KCksdGhpcy5fdmFsdWU9
ZSl9LHR9KGwpCitlLlVwZGF0YWJsZVByaW1pdGl2ZVJlZmVyZW5jZT1mdW5jdGlvbihlKXtmdW5j
dGlvbiByKCl7cmV0dXJuKDAsbi5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuYXBw
bHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCxuLmluaGVyaXRzKShyLGUpLHIucHJvdG90eXBl
LmdldD1mdW5jdGlvbigpe3JldHVybiB0LlVOREVGSU5FRF9SRUZFUkVOQ0V9LHJ9KG0pLGUuQ29u
ZGl0aW9uYWxSZWZlcmVuY2U9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcih0KXt2YXIgcj0oMCxuLnBv
c3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMsdCkpCityZXR1cm4gci5v
YmplY3RUYWc9bmV3IG8uVXBkYXRhYmxlVGFnKG8uQ09OU1RBTlRfVEFHKSxyLnRhZz0oMCxvLmNv
bWJpbmUpKFt0LnRhZyxyLm9iamVjdFRhZ10pLHJ9cmV0dXJuKDAsbi5pbmhlcml0cykocixlKSxy
LmNyZWF0ZT1mdW5jdGlvbihlKXt2YXIgbgorcmV0dXJuKDAsby5pc0NvbnN0KShlKT8obj1lLnZh
bHVlKCksKDAsaS5pc1Byb3h5KShuKT9uZXcgaChuLCJpc1RydXRoeSIpOnQuUHJpbWl0aXZlUmVm
ZXJlbmNlLmNyZWF0ZSgoMCxzLmRlZmF1bHQpKG4pKSk6bmV3IHIoZSl9LHIucHJvdG90eXBlLnRv
Qm9vbD1mdW5jdGlvbihlKXtyZXR1cm4oMCxpLmlzUHJveHkpKGUpPyh0aGlzLm9iamVjdFRhZy51
cGRhdGUoKDAsaS50YWdGb3JQcm9wZXJ0eSkoZSwiaXNUcnV0aHkiKSksKDAsaS5nZXQpKGUsImlz
VHJ1dGh5IikpOih0aGlzLm9iamVjdFRhZy51cGRhdGUoKDAsaS50YWdGb3IpKGUpKSwoMCxzLmRl
ZmF1bHQpKGUpKX0scn0odC5Db25kaXRpb25hbFJlZmVyZW5jZSksZS5TaW1wbGVIZWxwZXJSZWZl
cmVuY2U9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcih0LHIpe3ZhciBpPSgwLG4ucG9zc2libGVDb25z
dHJ1Y3RvclJldHVybikodGhpcyxlLmNhbGwodGhpcykpCityZXR1cm4gaS50YWc9ci50YWcsaS5o
ZWxwZXI9dCxpLmFyZ3M9cixpfXJldHVybigwLG4uaW5oZXJpdHMpKHIsZSksci5jcmVhdGU9ZnVu
Y3Rpb24oZSxuKXt2YXIgaSxzLGEsdSxsCityZXR1cm4oMCxvLmlzQ29uc3QpKG4pPyhpPW4ucG9z
aXRpb25hbCxzPW4ubmFtZWQsYT1pLnZhbHVlKCksdT1zLnZhbHVlKCksbD1lKGEsdSksbnVsbD09
PWw/dC5OVUxMX1JFRkVSRU5DRTp2b2lkIDA9PT1sP3QuVU5ERUZJTkVEX1JFRkVSRU5DRToib2Jq
ZWN0Ij09dHlwZW9mIGw/bmV3IHAobCk6dC5QcmltaXRpdmVSZWZlcmVuY2UuY3JlYXRlKGwpKTpu
ZXcgcihlLG4pfSxyLnByb3RvdHlwZS5jb21wdXRlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5oZWxw
ZXIsdD10aGlzLmFyZ3Msbj10LnBvc2l0aW9uYWwscj10Lm5hbWVkCityZXR1cm4gZShuLnZhbHVl
KCksci52YWx1ZSgpKX0scn0oYyksZS5DbGFzc0Jhc2VkSGVscGVyUmVmZXJlbmNlPWZ1bmN0aW9u
KGUpe2Z1bmN0aW9uIHQodCxyKXt2YXIgaT0oMCxuLnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4p
KHRoaXMsZS5jYWxsKHRoaXMpKQorcmV0dXJuIGkudGFnPSgwLG8uY29tYmluZSkoW3RbYS5SRUNP
TVBVVEVfVEFHXSxyLnRhZ10pLGkuaW5zdGFuY2U9dCxpLmFyZ3M9cixpfXJldHVybigwLG4uaW5o
ZXJpdHMpKHQsZSksdC5jcmVhdGU9ZnVuY3Rpb24oZSxuLHIpe3ZhciBpPWUuY3JlYXRlKCkKK3Jl
dHVybiBuLm5ld0Rlc3Ryb3lhYmxlKGkpLG5ldyB0KGkscil9LHQucHJvdG90eXBlLmNvbXB1dGU9
ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmluc3RhbmNlLHQ9dGhpcy5hcmdzLG49dC5wb3NpdGlvbmFs
LHI9dC5uYW1lZCxpPW4udmFsdWUoKSxvPXIudmFsdWUoKQorcmV0dXJuIGUuY29tcHV0ZShpLG8p
fSx0fShjKSxlLkludGVybmFsSGVscGVyUmVmZXJlbmNlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQo
dCxyKXt2YXIgaT0oMCxuLnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRo
aXMpKQorcmV0dXJuIGkudGFnPXIudGFnLGkuaGVscGVyPXQsaS5hcmdzPXIsaX1yZXR1cm4oMCxu
LmluaGVyaXRzKSh0LGUpLHQucHJvdG90eXBlLmNvbXB1dGU9ZnVuY3Rpb24oKXtyZXR1cm4oMCx0
aGlzLmhlbHBlcikodGhpcy5hcmdzKX0sdH0oYyksZS5VbmJvdW5kUmVmZXJlbmNlPWZ1bmN0aW9u
KGUpe2Z1bmN0aW9uIHIoKXtyZXR1cm4oMCxuLnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRo
aXMsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybigwLG4uaW5oZXJpdHMpKHIsZSksci5j
cmVhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PT1lP3QuTlVMTF9SRUZFUkVOQ0U6dm9pZCAw
PT09ZT90LlVOREVGSU5FRF9SRUZFUkVOQ0U6Im9iamVjdCI9PXR5cGVvZiBlP25ldyByKGUpOnQu
UHJpbWl0aXZlUmVmZXJlbmNlLmNyZWF0ZShlKX0sci5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUp
e3JldHVybiBuZXcgcigoMCxpLmdldCkodGhpcy5pbm5lcixlKSl9LHJ9KG8uQ29uc3RSZWZlcmVu
Y2UpfSksZSgiZW1iZXItZ2xpbW1lci91dGlscy9zdHJpbmciLFsiZXhwb3J0cyIsImVtYmVyLWRl
YnVnIl0sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCIKK2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGlb
ZV19ZS5TYWZlU3RyaW5nPXZvaWQgMCxlLmdldFNhZmVTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4g
cn0sZS5lc2NhcGVFeHByZXNzaW9uPWZ1bmN0aW9uKGUpe2lmKCJzdHJpbmciIT10eXBlb2YgZSl7
aWYoZSYmZS50b0hUTUwpcmV0dXJuIGUudG9IVE1MKCkKK2lmKG51bGw9PWUpcmV0dXJuIiIKK2lm
KCFlKXJldHVybiBlKyIiCitlPSIiK2V9cmV0dXJuIG8udGVzdChlKT9lLnJlcGxhY2UocyxuKTpl
fSxlLmh0bWxTYWZlPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZXx8dm9pZCAwPT09ZT9lPSIi
OiJzdHJpbmciIT10eXBlb2YgZSYmKGU9IiIrZSksbmV3IHIoZSl9LGUuaXNIVE1MU2FmZT1mdW5j
dGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIGUudG9IVE1MfQordmFyIHI9ZS5T
YWZlU3RyaW5nPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnN0cmluZz1lfXJldHVybiBl
LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiIiK3RoaXMuc3RyaW5nfSxlLnBy
b3RvdHlwZS50b0hUTUw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygpfSxlfSgpLGk9
eyImIjoiJmFtcDsiLCI8IjoiJmx0OyIsIj4iOiImZ3Q7IiwnIic6IiZxdW90OyIsIiciOiImI3gy
NzsiLCJgIjoiJiN4NjA7IiwiPSI6IiYjeDNEOyJ9LG89L1smPD4iJ2A9XS8scz0vWyY8PiInYD1d
L2d9KSxlKCJlbWJlci1nbGltbWVyL3V0aWxzL3RvLWJvb2wiLFsiZXhwb3J0cyIsImVtYmVyLXJ1
bnRpbWUiLCJlbWJlci1tZXRhbCJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCIKK2UuZGVm
YXVsdD1mdW5jdGlvbihlKXtyZXR1cm4hIWUmJighMD09PWV8fCghKDAsdC5pc0FycmF5KShlKXx8
MCE9PSgwLG4uZ2V0KShlLCJsZW5ndGgiKSkpfX0pLGUoImVtYmVyLWdsaW1tZXIvdmlld3Mvb3V0
bGV0IixbImV4cG9ydHMiLCJlbWJlci1iYWJlbCIsImVtYmVyLXV0aWxzIiwiQGdsaW1tZXIvcmVm
ZXJlbmNlIiwiZW1iZXItZW52aXJvbm1lbnQiLCJlbWJlci1tZXRhbCJdLGZ1bmN0aW9uKGUsdCxu
LHIsaSxvKXsidXNlIHN0cmljdCIKK3ZhciBzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlz
Lm91dGxldFZpZXc9ZSx0aGlzLnRhZz1lLl90YWd9cmV0dXJuIGUucHJvdG90eXBlLmdldD1mdW5j
dGlvbihlKXtyZXR1cm4gbmV3IHUodGhpcyxlKX0sZS5wcm90b3R5cGUudmFsdWU9ZnVuY3Rpb24o
KXtyZXR1cm4gdGhpcy5vdXRsZXRWaWV3Lm91dGxldFN0YXRlfSxlLnByb3RvdHlwZS5nZXRPcnBo
YW49ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBhKHRoaXMsZSl9LGUucHJvdG90eXBlLnVwZGF0ZT1m
dW5jdGlvbihlKXt0aGlzLm91dGxldFZpZXcuc2V0T3V0bGV0U3RhdGUoZSl9LGV9KCksYT1mdW5j
dGlvbihlKXtmdW5jdGlvbiBuKG4scil7dmFyIGk9KDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0
dXJuKSh0aGlzLGUuY2FsbCh0aGlzLG4ub3V0bGV0VmlldykpCityZXR1cm4gaS5yb290PW4saS5u
YW1lPXIsaX1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLnZhbHVlPWZ1bmN0
aW9uKCl7dmFyIGU9dGhpcy5yb290LnZhbHVlKCksdD1lLm91dGxldHMubWFpbi5vdXRsZXRzLl9f
ZW1iZXJfb3JwaGFuc19fCitpZighdClyZXR1cm4gbnVsbAordmFyIG49dC5vdXRsZXRzW3RoaXMu
bmFtZV0KK2lmKCFuKXJldHVybiBudWxsCit2YXIgcj1PYmplY3QuY3JlYXRlKG51bGwpCityZXR1
cm4gcltuLnJlbmRlci5vdXRsZXRdPW4sbi53YXNVc2VkPSEwLHtvdXRsZXRzOnJ9fSxufShzKSx1
PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMucGFyZW50PWUsdGhpcy5rZXk9dCx0aGlz
LnRhZz1lLnRhZ31yZXR1cm4gZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcg
ZSh0aGlzLHQpfSxlLnByb3RvdHlwZS52YWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVu
dC52YWx1ZSgpW3RoaXMua2V5XX0sZX0oKSxsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbixp
KXt0aGlzLl9lbnZpcm9ubWVudD1lLHRoaXMucmVuZGVyZXI9dCx0aGlzLm93bmVyPW4sdGhpcy50
ZW1wbGF0ZT1pLHRoaXMub3V0bGV0U3RhdGU9bnVsbCx0aGlzLl90YWc9bmV3IHIuRGlydHlhYmxl
VGFnfXJldHVybiBlLmV4dGVuZD1mdW5jdGlvbihyKXtyZXR1cm4gZnVuY3Rpb24oZSl7ZnVuY3Rp
b24gaSgpe3JldHVybigwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmFwcGx5
KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsdC5pbmhlcml0cykoaSxlKSxpLmNyZWF0ZT1mdW5j
dGlvbih0KXtyZXR1cm4gdD9lLmNyZWF0ZS5jYWxsKHRoaXMsKDAsbi5hc3NpZ24pKHt9LHIsdCkp
OmUuY3JlYXRlLmNhbGwodGhpcyxyKX0saX0oZSl9LGUucmVvcGVuQ2xhc3M9ZnVuY3Rpb24oZSl7
KDAsbi5hc3NpZ24pKHRoaXMsZSl9LGUuY3JlYXRlPWZ1bmN0aW9uKHQpe3ZhciByPXQuX2Vudmly
b25tZW50LGk9dC5yZW5kZXJlcixvPXQudGVtcGxhdGUKK3JldHVybiBuZXcgZShyLGksdFtuLk9X
TkVSXSxvKX0sZS5wcm90b3R5cGUuYXBwZW5kVG89ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZW52
aXJvbm1lbnR8fGkuZW52aXJvbm1lbnQsbj12b2lkIDAKK249dC5oYXNET00mJiJzdHJpbmciPT10
eXBlb2YgZT9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGUpOmUsby5ydW4uc2NoZWR1bGUoInJlbmRl
ciIsdGhpcy5yZW5kZXJlciwiYXBwZW5kT3V0bGV0VmlldyIsdGhpcyxuKX0sZS5wcm90b3R5cGUu
cmVyZW5kZXI9ZnVuY3Rpb24oKXt9LGUucHJvdG90eXBlLnNldE91dGxldFN0YXRlPWZ1bmN0aW9u
KGUpe3RoaXMub3V0bGV0U3RhdGU9e291dGxldHM6e21haW46ZX0scmVuZGVyOntvd25lcjp2b2lk
IDAsaW50bzp2b2lkIDAsb3V0bGV0OiJtYWluIixuYW1lOiItdG9wLWxldmVsIixjb250cm9sbGVy
OnZvaWQgMCxWaWV3Q2xhc3M6dm9pZCAwLHRlbXBsYXRlOnZvaWQgMH19LHRoaXMuX3RhZy5kaXJ0
eSgpfSxlLnByb3RvdHlwZS50b1JlZmVyZW5jZT1mdW5jdGlvbigpe3JldHVybiBuZXcgcyh0aGlz
KX0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe30sZX0oKQorZS5kZWZhdWx0PWx9KSxl
KCJlbWJlci1tZXRhbCIsWyJleHBvcnRzIiwiZW1iZXItZW52aXJvbm1lbnQiLCJlbWJlci11dGls
cyIsImVtYmVyLWRlYnVnIiwiZW1iZXItYmFiZWwiLCJAZ2xpbW1lci9yZWZlcmVuY2UiLCJyZXF1
aXJlIiwiZW1iZXItY29uc29sZSIsImJhY2tidXJuZXIiXSxmdW5jdGlvbihlLHQsbixyLGksbyxz
LGEsdSl7InVzZSBzdHJpY3QiCitmdW5jdGlvbiBsKGUsdCxuKXt2YXIgcixpPXRbbisxXSxvPXRb
bisyXQorZm9yKHI9MDtyPGUubGVuZ3RoLTI7cis9MylpZihlW3JdPT09aSYmZVtyKzFdPT09byly
ZXR1cm4KK2UucHVzaChpLG8sdFtuKzNdKX1mdW5jdGlvbiBjKGUsdCxuKXt2YXIgcixpPS0xCitm
b3Iocj1lLmxlbmd0aC0zO3I+PTA7ci09MylpZih0PT09ZVtyXSYmbj09PWVbcisxXSl7aT1yCiti
cmVha31yZXR1cm4gaX1mdW5jdGlvbiBwKHQsbixyKXt2YXIgaSxvLHMsYSx1PWUucGVla01ldGEo
dCkKK2lmKHUpe3ZhciBsPXUubWF0Y2hpbmdMaXN0ZW5lcnMobikKK2lmKHZvaWQgMCE9PWwpe3Zh
ciBwPVtdCitmb3IoaT1sLmxlbmd0aC0zO2k+PTA7aS09MylvPWxbaV0scz1sW2krMV0sYT1sW2kr
Ml0sLTE9PT1jKHIsbyxzKSYmKHIucHVzaChvLHMsYSkscC5wdXNoKG8scyxhKSkKK3JldHVybiBw
fX19ZnVuY3Rpb24gZihlLHQsbixyLGkpe3J8fCJmdW5jdGlvbiIhPXR5cGVvZiBufHwocj1uLG49
bnVsbCkKK3ZhciBvPTAKK2kmJihvfD1DdCksaWUoZSkuYWRkVG9MaXN0ZW5lcnModCxuLHIsbyks
ImZ1bmN0aW9uIj09dHlwZW9mIGUuZGlkQWRkTGlzdGVuZXImJmUuZGlkQWRkTGlzdGVuZXIodCxu
LHIpfWZ1bmN0aW9uIGgoZSx0LG4scil7cnx8ImZ1bmN0aW9uIiE9dHlwZW9mIG58fChyPW4sbj1u
dWxsKSxpZShlKS5yZW1vdmVGcm9tTGlzdGVuZXJzKHQsbixyLGZ1bmN0aW9uKCl7ImZ1bmN0aW9u
Ij09dHlwZW9mIGUuZGlkUmVtb3ZlTGlzdGVuZXImJmUuZGlkUmVtb3ZlTGlzdGVuZXIuYXBwbHko
ZSxhcmd1bWVudHMpfSl9ZnVuY3Rpb24gZChlLHQsbixyLGkpe3JldHVybiBtKGUsW3RdLG4scixp
KX1mdW5jdGlvbiBtKGUsdCxuLHIsaSl7cmV0dXJuIHJ8fCJmdW5jdGlvbiIhPXR5cGVvZiBufHwo
cj1uLG49bnVsbCksaWUoZSkuc3VzcGVuZExpc3RlbmVycyh0LG4scixpKX1mdW5jdGlvbiBnKHQs
cixpLG8scyl7dmFyIGEsdSxsLGMscAoraWYodm9pZCAwPT09byYmKGE9c3x8ZS5wZWVrTWV0YSh0
KSxvPSJvYmplY3QiPT10eXBlb2YgYSYmbnVsbCE9PWEmJmEubWF0Y2hpbmdMaXN0ZW5lcnMocikp
LHZvaWQgMCE9PW8mJjAhPT1vLmxlbmd0aCl7Zm9yKHU9by5sZW5ndGgtMzt1Pj0wO3UtPTMpbD1v
W3VdLGM9b1t1KzFdLHA9b1t1KzJdLGMmJihwJk90fHwocCZDdCYmaCh0LHIsbCxjKSxsfHwobD10
KSwic3RyaW5nIj09dHlwZW9mIGM/aT9uLmFwcGx5U3RyKGwsYyxpKTpsW2NdKCk6aT9jLmFwcGx5
KGwsaSk6Yy5jYWxsKGwpKSkKK3JldHVybiEwfX1mdW5jdGlvbiB5KHQsbil7dmFyIHIsaSxvLHM9
W10sYT1lLnBlZWtNZXRhKHQpLHU9YSYmYS5tYXRjaGluZ0xpc3RlbmVycyhuKQoraWYoIXUpcmV0
dXJuIHMKK2ZvcihyPTA7cjx1Lmxlbmd0aDtyKz0zKWk9dVtyXSxvPXVbcisxXSxzLnB1c2goW2ks
b10pCityZXR1cm4gc31mdW5jdGlvbiB2KCl7cmV0dXJuIG5ldyBvLkRpcnR5YWJsZVRhZ31mdW5j
dGlvbiBiKGUsdCl7dmFyIG4KK3JldHVybiJvYmplY3QiPT10eXBlb2YgZSYmZT8obj10fHxpZShl
KSxuLndyaXRhYmxlVGFnKHYpKTpvLkNPTlNUQU5UX1RBR31mdW5jdGlvbiBfKGUsdCl7dmFyIG49
ZS5yZWFkYWJsZVRhZygpCituJiZuLmRpcnR5KCkKK3ZhciByPWUucmVhZGFibGVUYWdzKCksaT1y
JiZyW3RdCitpJiZpLmRpcnR5KCksImNvbnRlbnQiPT09dCYmZS5pc1Byb3h5KCkmJmUuZ2V0VGFn
KCkuY29udGVudERpZENoYW5nZSgpLChufHxpKSYmRSgpfWZ1bmN0aW9uIHcoKXt9ZnVuY3Rpb24g
RSgpe1N0fHwoU3Q9RXQoImVtYmVyLW1ldGFsIikucnVuKSxUdCgpJiYhU3QuYmFja2J1cm5lci5j
dXJyZW50SW5zdGFuY2UmJlN0LnNjaGVkdWxlKCJhY3Rpb25zIix3KX1mdW5jdGlvbiB4KHQsbixy
KXt2YXIgaT1yfHxlLnBlZWtNZXRhKHQpCitpZighaXx8aS5pc0luaXRpYWxpemVkKHQpKXt2YXIg
bz1pJiZpLnBlZWtXYXRjaGluZyhuKT4wLHM9dFtuXSxhPW51bGwhPT1zJiYib2JqZWN0Ij09dHlw
ZW9mIHMmJnMuaXNEZXNjcmlwdG9yP3M6dm9pZCAwCithJiZhLndpbGxDaGFuZ2UmJmEud2lsbENo
YW5nZSh0LG4pLG8mJihPKHQsbixpKSxTKHQsbixpKSxEKHQsbixpKSl9fWZ1bmN0aW9uIEModCxu
LHIpe3ZhciBpPXJ8fGUucGVla01ldGEodCksbz0hIWkKK2lmKCFvfHxpLmlzSW5pdGlhbGl6ZWQo
dCkpe3ZhciBzPXRbbl0sYT1udWxsIT09cyYmIm9iamVjdCI9PXR5cGVvZiBzJiZzLmlzRGVzY3Jp
cHRvcj9zOnZvaWQgMAoraWYoYSYmYS5kaWRDaGFuZ2UmJmEuZGlkQ2hhbmdlKHQsbiksbyYmaS5w
ZWVrV2F0Y2hpbmcobik+MCYmKGkuaGFzRGVwcyhuKSYmIWkuaXNTb3VyY2VEZXN0cm95aW5nKCkm
JkEodCxuLGkpLFIodCxuLGkpLEwodCxuLGkpKSx0W2t0XSYmdFtrdF0obiksbyl7aWYoaS5pc1Nv
dXJjZURlc3Ryb3lpbmcoKSlyZXR1cm4KK18oaSxuKX19fWZ1bmN0aW9uIE8oZSx0LG4pe3ZhciBy
LGkKK24uaXNTb3VyY2VEZXN0cm95aW5nKCl8fG4uaGFzRGVwcyh0KSYmKHI9RHQsaT0hcixpJiYo
cj1EdD17fSksVCh4LGUsdCxyLG4pLGkmJihEdD1udWxsKSl9ZnVuY3Rpb24gQShlLHQsbil7dmFy
IHI9THQsaT0hcgoraSYmKHI9THQ9e30pLFQoQyxlLHQscixuKSxpJiYoTHQ9bnVsbCl9ZnVuY3Rp
b24gVChlLHQscixpLG8pe3ZhciBzPXZvaWQgMCxhPXZvaWQgMCx1PW4uZ3VpZEZvcih0KSxsPWlb
dV0KK2x8fChsPWlbdV09e30pLGxbcl18fChsW3JdPSEwLG8uZm9yRWFjaEluRGVwcyhyLGZ1bmN0
aW9uKG4scil7ciYmKHM9dFtuXSwoYT1udWxsIT09cyYmIm9iamVjdCI9PXR5cGVvZiBzJiZzLmlz
RGVzY3JpcHRvcj9zOnZvaWQgMCkmJmEuX3N1c3BlbmRlZD09PXR8fGUodCxuLG8pKX0pKX1mdW5j
dGlvbiBTKGUsdCxuKXt2YXIgcj1uLnJlYWRhYmxlQ2hhaW5XYXRjaGVycygpCityJiZyLm5vdGlm
eSh0LCExLHgpfWZ1bmN0aW9uIFIoZSx0LG4pe3ZhciByPW4ucmVhZGFibGVDaGFpbldhdGNoZXJz
KCkKK3ImJnIubm90aWZ5KHQsITAsQyl9ZnVuY3Rpb24gayhlLHQsbil7dmFyIHI9bi5yZWFkYWJs
ZUNoYWluV2F0Y2hlcnMoKQorciYmci5yZXZhbGlkYXRlKHQpfWZ1bmN0aW9uIE4oKXtqdCsrfWZ1
bmN0aW9uIFAoKXstLWp0PD0wJiYoTnQuY2xlYXIoKSxQdC5mbHVzaCgpKX1mdW5jdGlvbiBqKGUs
dCl7TigpCit0cnl7ZS5jYWxsKHQpfWZpbmFsbHl7UC5jYWxsKHQpfX1mdW5jdGlvbiBEKGUsdCxu
KXtpZighbi5pc1NvdXJjZURlc3Ryb3lpbmcoKSl7dmFyIHI9dCsiOmJlZm9yZSIsaT12b2lkIDAs
bz12b2lkIDAKK2p0PyhpPU50LmFkZChlLHQsciksbz1wKGUscixpKSxnKGUscixbZSx0XSxvKSk6
ZyhlLHIsW2UsdF0pfX1mdW5jdGlvbiBMKGUsdCxuKXtpZighbi5pc1NvdXJjZURlc3Ryb3lpbmco
KSl7dmFyIHI9dCsiOmNoYW5nZSIsaT12b2lkIDAKK2p0PyhpPVB0LmFkZChlLHQscikscChlLHIs
aSkpOmcoZSxyLFtlLHRdKX19ZnVuY3Rpb24gSSgpe3RoaXMuaXNEZXNjcmlwdG9yPSEwfWZ1bmN0
aW9uIE0oZSx0LG4scixpKXtpfHwoaT1pZShlKSkKK3ZhciBvPWkucGVla1dhdGNoaW5nKHQpLHM9
ZVt0XSxhPW51bGwhPT1zJiYib2JqZWN0Ij09dHlwZW9mIHMmJnMuaXNEZXNjcmlwdG9yP3M6dm9p
ZCAwLHU9dm9pZCAwIT09byYmbz4wCithJiZhLnRlYXJkb3duKGUsdCkKK3ZhciBsPXZvaWQgMAor
cmV0dXJuIG4gaW5zdGFuY2VvZiBJPyhsPW4sZVt0XT1sLEYoZS5jb25zdHJ1Y3RvciksImZ1bmN0
aW9uIj09dHlwZW9mIG4uc2V0dXAmJm4uc2V0dXAoZSx0KSk6bnVsbD09bj8obD1yLGVbdF09cik6
KGw9bixPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LG4pKSx1JiZrKGUsdCxpKSwiZnVuY3Rpb24i
PT10eXBlb2YgZS5kaWREZWZpbmVQcm9wZXJ0eSYmZS5kaWREZWZpbmVQcm9wZXJ0eShlLHQsbCks
dGhpc31mdW5jdGlvbiBGKGUpe2lmKCExIT09SXQpe3ZhciB0PWllKGUpLnJlYWRhYmxlQ2FjaGUo
KQordCYmdm9pZCAwIT09dC5fY29tcHV0ZWRQcm9wZXJ0aWVzJiYodC5fY29tcHV0ZWRQcm9wZXJ0
aWVzPXZvaWQgMCl9fWZ1bmN0aW9uIHooZSx0LG4pe2lmKCJvYmplY3QiPT10eXBlb2YgZSYmbnVs
bCE9PWUpe3ZhciByLGksbz1ufHxpZShlKQorby5wZWVrV2F0Y2hpbmcodCk/by53cml0ZVdhdGNo
aW5nKHQsKG8ucGVla1dhdGNoaW5nKHQpfHwwKSsxKTooby53cml0ZVdhdGNoaW5nKHQsMSkscj1l
W3RdLGk9bnVsbCE9PXImJiJvYmplY3QiPT10eXBlb2YgciYmci5pc0Rlc2NyaXB0b3I/cjp2b2lk
IDAsaSYmaS53aWxsV2F0Y2gmJmkud2lsbFdhdGNoKGUsdCksImZ1bmN0aW9uIj09dHlwZW9mIGUu
d2lsbFdhdGNoUHJvcGVydHkmJmUud2lsbFdhdGNoUHJvcGVydHkodCkpfX1mdW5jdGlvbiBVKGUs
dCxuKXtpZigib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1lKXt2YXIgcixpLG89bnx8aWUoZSkK
K2lmKCFvLmlzU291cmNlRGVzdHJveWVkKCkpe3ZhciBzPW8ucGVla1dhdGNoaW5nKHQpCisxPT09
cz8oby53cml0ZVdhdGNoaW5nKHQsMCkscj1lW3RdLGk9bnVsbCE9PXImJiJvYmplY3QiPT10eXBl
b2YgciYmci5pc0Rlc2NyaXB0b3I/cjp2b2lkIDAsaSYmaS5kaWRVbndhdGNoJiZpLmRpZFVud2F0
Y2goZSx0KSwiZnVuY3Rpb24iPT10eXBlb2YgZS5kaWRVbndhdGNoUHJvcGVydHkmJmUuZGlkVW53
YXRjaFByb3BlcnR5KHQpKTpzPjEmJm8ud3JpdGVXYXRjaGluZyh0LHMtMSl9fX1mdW5jdGlvbiBC
KGUsdCl7cmV0dXJuKHR8fGllKGUpKS53cml0YWJsZUNoYWlucyhxKX1mdW5jdGlvbiBxKGUpe3Jl
dHVybiBuZXcgenQobnVsbCxudWxsLGUpfWZ1bmN0aW9uIEgoZSx0LG4pe2lmKCJvYmplY3QiPT10
eXBlb2YgZSYmbnVsbCE9PWUpe3ZhciByPW58fGllKGUpLGk9ci5wZWVrV2F0Y2hpbmcodCl8fDAK
K2k/ci53cml0ZVdhdGNoaW5nKHQsaSsxKTooci53cml0ZVdhdGNoaW5nKHQsMSksQihlLHIpLmFk
ZCh0KSl9fWZ1bmN0aW9uIFYoZSx0LG4pe2lmKCJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9PWUp
e3ZhciByPW58fGllKGUpLGk9ci5wZWVrV2F0Y2hpbmcodCl8fDAKKzE9PT1pPyhyLndyaXRlV2F0
Y2hpbmcodCwwKSxCKGUscikucmVtb3ZlKHQpKTppPjEmJnIud3JpdGVXYXRjaGluZyh0LGktMSl9
fWZ1bmN0aW9uIFcoZSl7cmV0dXJuIGUubWF0Y2goTXQpWzBdfWZ1bmN0aW9uICQoZSl7cmV0dXJu
Im9iamVjdCI9PXR5cGVvZiBlJiZlfWZ1bmN0aW9uIEcoZSl7cmV0dXJuISgkKGUpJiZlLmlzRGVz
Y3JpcHRvciYmITE9PT1lLl92b2xhdGlsZSl9ZnVuY3Rpb24gSygpe3JldHVybiBuZXcgRnR9ZnVu
Y3Rpb24gUShlLHQsbil7dmFyIHI9aWUoZSkKK3Iud3JpdGFibGVDaGFpbldhdGNoZXJzKEspLmFk
ZCh0LG4pLHooZSx0LHIpfWZ1bmN0aW9uIFkodCxuLHIsaSl7aWYoJCh0KSl7dmFyIG89aXx8ZS5w
ZWVrTWV0YSh0KQorbyYmby5yZWFkYWJsZUNoYWluV2F0Y2hlcnMoKSYmKG89aWUodCksby5yZWFk
YWJsZUNoYWluV2F0Y2hlcnMoKS5yZW1vdmUobixyKSxVKHQsbixvKSl9fWZ1bmN0aW9uIEoodCxu
KXtpZigkKHQpKXt2YXIgcixpPWUucGVla01ldGEodCkKK2lmKHZvaWQgMD09PWl8fGkucHJvdG8h
PT10KXJldHVybiEwPT09Ryh0W25dKT9sZSh0LG4pOihyPWkucmVhZGFibGVDYWNoZSgpKT9FZS5n
ZXQocixuKTp2b2lkIDB9fWZ1bmN0aW9uIFgoZSx0KXt2YXIgbj10ZShlKSxyPW5lKGUpCit0LnBy
b3RvdHlwZVsid3JpdGFibGUiK3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2dldE9yQ3JlYXRl
T3duTWFwKG4pfSx0LnByb3RvdHlwZVsicmVhZGFibGUiK3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRo
aXNbbl19fWZ1bmN0aW9uIFooZSx0KXt2YXIgbj10ZShlKSxyPW5lKGUpCit0LnByb3RvdHlwZVsi
d3JpdGUiK3JdPWZ1bmN0aW9uKGUsdCl7dGhpcy5fZ2V0T3JDcmVhdGVPd25NYXAobilbZV09dH0s
dC5wcm90b3R5cGVbInBlZWsiK3JdPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9maW5kSW5oZXJp
dGVkKG4sZSl9LHQucHJvdG90eXBlWyJmb3JFYWNoIityXT1mdW5jdGlvbihlKXtmb3IodmFyIHQs
cj10aGlzLGk9dm9pZCAwO3ZvaWQgMCE9PXI7KXtpZih2b2lkIDAhPT0odD1yW25dKSlmb3IodmFy
IG8gaW4gdClpPWl8fE9iamVjdC5jcmVhdGUobnVsbCksdm9pZCAwPT09aVtvXSYmKGlbb109ITAs
ZShvLHRbb10pKQorcj1yLnBhcmVudH19LHQucHJvdG90eXBlWyJjbGVhciIrcl09ZnVuY3Rpb24o
KXt0aGlzW25dPXZvaWQgMH0sdC5wcm90b3R5cGVbImRlbGV0ZUZyb20iK3JdPWZ1bmN0aW9uKGUp
e2RlbGV0ZSB0aGlzLl9nZXRPckNyZWF0ZU93bk1hcChuKVtlXX0sdC5wcm90b3R5cGVbImhhc0lu
IityXT1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fZmluZEluaGVyaXRlZChuLGUp
fX1mdW5jdGlvbiBlZShlLHQpe3ZhciBuPXRlKGUpLHI9bmUoZSkKK3QucHJvdG90eXBlWyJ3cml0
YWJsZSIrcl09ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpc1tuXQorcmV0dXJuIHZvaWQgMD09PXQmJih0
PXRoaXNbbl09ZSh0aGlzLnNvdXJjZSkpLHR9LHQucHJvdG90eXBlWyJyZWFkYWJsZSIrcl09ZnVu
Y3Rpb24oKXtyZXR1cm4gdGhpc1tuXX19ZnVuY3Rpb24gdGUoZSl7cmV0dXJuIl8iK2V9ZnVuY3Rp
b24gbmUoZSl7cmV0dXJuIGUucmVwbGFjZSgvXlx3LyxmdW5jdGlvbihlKXtyZXR1cm4gZS50b1Vw
cGVyQ2FzZSgpfSl9ZnVuY3Rpb24gcmUodCl7dmFyIG49ZS5wZWVrTWV0YSh0KQordm9pZCAwIT09
biYmbi5kZXN0cm95KCl9ZnVuY3Rpb24gaWUodCl7dmFyIG49ZS5wZWVrTWV0YSh0KSxyPXZvaWQg
MAoraWYodm9pZCAwIT09bil7aWYobi5zb3VyY2U9PT10KXJldHVybiBuCityPW59dmFyIGk9bmV3
IHF0KHQscikKK3JldHVybiBLdCh0LGkpLGl9ZnVuY3Rpb24gb2UoZSl7cmV0dXJuIFp0LmdldChl
KX1mdW5jdGlvbiBzZShlKXtyZXR1cm4tMSE9PWVuLmdldChlKX1mdW5jdGlvbiBhZShlKXtyZXR1
cm4gdG4uZ2V0KGUpfWZ1bmN0aW9uIHVlKGUpe3JldHVybiBubi5nZXQoZSl9ZnVuY3Rpb24gbGUo
ZSx0KXt2YXIgbj1lW3RdLHI9bnVsbCE9PW4mJiJvYmplY3QiPT10eXBlb2YgbiYmbi5pc0Rlc2Ny
aXB0b3I/bjp2b2lkIDAsaT12b2lkIDAKK3JldHVybiB2b2lkIDA9PT1yJiZzZSh0KT9jZShlLHQp
OnI/ci5nZXQoZSx0KTooaT1uLHZvaWQgMCE9PWl8fCJvYmplY3QiIT10eXBlb2YgZXx8dCBpbiBl
fHwiZnVuY3Rpb24iIT10eXBlb2YgZS51bmtub3duUHJvcGVydHk/aTplLnVua25vd25Qcm9wZXJ0
eSh0KSl9ZnVuY3Rpb24gY2UoZSx0KXt2YXIgbixyPWUsaT10LnNwbGl0KCIuIikKK2ZvcihuPTA7
bjxpLmxlbmd0aDtuKyspe2lmKCFwZShyKSlyZXR1cm4KK2lmKChyPWxlKHIsaVtuXSkpJiZyLmlz
RGVzdHJveWVkKXJldHVybn1yZXR1cm4gcn1mdW5jdGlvbiBwZShlKXtyZXR1cm4gbnVsbCE9ZSYm
cm5bdHlwZW9mIGVdfWZ1bmN0aW9uIGZlKHQsbixyLGkpe2lmKHNlKG4pKXJldHVybiBoZSh0LG4s
cixpKQordmFyIG89ZS5wZWVrTWV0YSh0KSxzPXRbbl0sYT12b2lkIDAsdT12b2lkIDAKK2lmKG51
bGwhPT1zJiYib2JqZWN0Ij09dHlwZW9mIHMmJnMuaXNEZXNjcmlwdG9yP2E9czp1PXMsYSlhLnNl
dCh0LG4scikKK2Vsc2UgaWYoIXQuc2V0VW5rbm93blByb3BlcnR5fHx2b2lkIDAhPT11fHxuIGlu
IHQpe2lmKHU9PT1yKXJldHVybiByCit4KHQsbixvKSx0W25dPXIsQyh0LG4sbyl9ZWxzZSB0LnNl
dFVua25vd25Qcm9wZXJ0eShuLHIpCityZXR1cm4gcn1mdW5jdGlvbiBoZShlLHQsbixpKXt2YXIg
bz10LnNsaWNlKHQubGFzdEluZGV4T2YoIi4iKSsxKQoraWYodD10PT09bz9vOnQuc2xpY2UoMCx0
Lmxlbmd0aC0oby5sZW5ndGgrMSkpLCJ0aGlzIiE9PXQmJihlPWNlKGUsdCkpLCFvfHwwPT09by5s
ZW5ndGgpdGhyb3cgbmV3IHIuRXJyb3IoIlByb3BlcnR5IHNldCBmYWlsZWQ6IFlvdSBwYXNzZWQg
YW4gZW1wdHkgcGF0aCIpCitpZighZSl7aWYoaSlyZXR1cm4KK3Rocm93IG5ldyByLkVycm9yKCdQ
cm9wZXJ0eSBzZXQgZmFpbGVkOiBvYmplY3QgaW4gcGF0aCAiJyt0KyciIGNvdWxkIG5vdCBiZSBm
b3VuZCBvciB3YXMgZGVzdHJveWVkLicpfXJldHVybiBmZShlLG8sbil9ZnVuY3Rpb24gZGUoZSx0
LG4pe3JldHVybiBmZShlLHQsbiwhMCl9ZnVuY3Rpb24gbWUoZSx0KXt2YXIgbj1lLmluZGV4T2Yo
InsiKQorbjwwP3QoZS5yZXBsYWNlKG9uLCIuW10iKSk6Z2UoIiIsZSxuLHQpfWZ1bmN0aW9uIGdl
KGUsdCxuLHIpe3ZhciBpPXQuaW5kZXhPZigifSIpLG89MCxzPXZvaWQgMCxhPXZvaWQgMCx1PXQu
c3Vic3RyaW5nKG4rMSxpKS5zcGxpdCgiLCIpLGw9dC5zdWJzdHJpbmcoaSsxKQorZm9yKGUrPXQu
c3Vic3RyaW5nKDAsbiksYT11Lmxlbmd0aDtvPGE7KXM9bC5pbmRleE9mKCJ7IiksczwwP3IoKGUr
dVtvKytdK2wpLnJlcGxhY2Uob24sIi5bXSIpKTpnZShlK3VbbysrXSxsLHMscil9ZnVuY3Rpb24g
eWUoZSx0LG4pe3NlKHQpP0goZSx0LG4pOnooZSx0LG4pfWZ1bmN0aW9uIHZlKGUsdCxuKXtzZSh0
KT9WKGUsdCxuKTpVKGUsdCxuKX1mdW5jdGlvbiBiZShlLHQsbixyKXt2YXIgaT12b2lkIDAsbz12
b2lkIDAscz1lLl9kZXBlbmRlbnRLZXlzCitpZihzKWZvcihpPTA7aTxzLmxlbmd0aDtpKyspbz1z
W2ldLHIud3JpdGVEZXBzKG8sbiwoci5wZWVrRGVwcyhvLG4pfHwwKSsxKSx5ZSh0LG8scil9ZnVu
Y3Rpb24gX2UoZSx0LG4scil7dmFyIGksbyxzPWUuX2RlcGVuZGVudEtleXMKK2lmKHMpZm9yKGk9
MDtpPHMubGVuZ3RoO2krKylvPXNbaV0sci53cml0ZURlcHMobyxuLChyLnBlZWtEZXBzKG8sbil8
fDApLTEpLHZlKHQsbyxyKX1mdW5jdGlvbiB3ZShlLHQpe3RoaXMuaXNEZXNjcmlwdG9yPSEwLCJm
dW5jdGlvbiI9PXR5cGVvZiBlP3RoaXMuX2dldHRlcj1lOih0aGlzLl9nZXR0ZXI9ZS5nZXQsdGhp
cy5fc2V0dGVyPWUuc2V0KSx0aGlzLl9kZXBlbmRlbnRLZXlzPXZvaWQgMCx0aGlzLl9zdXNwZW5k
ZWQ9dm9pZCAwLHRoaXMuX21ldGE9dm9pZCAwLHRoaXMuX3ZvbGF0aWxlPSExLHRoaXMuX2RlcGVu
ZGVudEtleXM9dCYmdC5kZXBlbmRlbnRLZXlzLHRoaXMuX3JlYWRPbmx5PSExfWZ1bmN0aW9uIEVl
KHQsbil7dmFyIHI9ZS5wZWVrTWV0YSh0KSxpPXImJnIuc291cmNlPT09dCYmci5yZWFkYWJsZUNh
Y2hlKCksbz1pJiZpW25dCitpZihvIT09V3QpcmV0dXJuIG99ZnVuY3Rpb24geGUoZSx0KXt0aHJv
dyBuZXcgci5FcnJvcigiQ2Fubm90IHNldCByZWFkLW9ubHkgcHJvcGVydHkgJyIrdCsiJyBvbiBv
YmplY3Q6ICIrbi5pbnNwZWN0KGUpKX1mdW5jdGlvbiBDZShlLHQsbil7cmV0dXJuIE0oZSx0LG51
bGwpLGZlKGUsdCxuKX1mdW5jdGlvbiBPZShlKXt2YXIgdCxuPVtdLHI9dm9pZCAwCitmb3IodD0w
O3Q8bG4ubGVuZ3RoO3QrKylyPWxuW3RdLHIucmVnZXgudGVzdChlKSYmbi5wdXNoKHIub2JqZWN0
KQorcmV0dXJuIGNuW2VdPW4sbn1mdW5jdGlvbiBBZShlLHQsbixyKXt2YXIgaT12b2lkIDAKK3Ry
eXtpPWUuY2FsbChyKX1jYXRjaChlKXtuLmV4Y2VwdGlvbj1lLGk9bn1maW5hbGx5e3QoKX1yZXR1
cm4gaX1mdW5jdGlvbiBUZSgpe31mdW5jdGlvbiBTZShlLG4scil7aWYoMD09PWxuLmxlbmd0aCly
ZXR1cm4gVGUKK3ZhciBpPWNuW2VdCitpZihpfHwoaT1PZShlKSksMD09PWkubGVuZ3RoKXJldHVy
biBUZQordmFyIG89bihyKSxzPXQuRU5WLlNUUlVDVFVSRURfUFJPRklMRSxhPXZvaWQgMAorcyYm
KGE9ZSsiOiAiK28ub2JqZWN0LGNvbnNvbGUudGltZShhKSkKK3ZhciB1PW5ldyBBcnJheShpLmxl
bmd0aCksbD12b2lkIDAsYz12b2lkIDAscD1wbigpCitmb3IobD0wO2w8aS5sZW5ndGg7bCsrKWM9
aVtsXSx1W2xdPWMuYmVmb3JlKGUscCxvKQorcmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dm9pZCAw
LG49dm9pZCAwLHI9cG4oKQorZm9yKHQ9MDt0PGkubGVuZ3RoO3QrKyluPWlbdF0sImZ1bmN0aW9u
Ij09dHlwZW9mIG4uYWZ0ZXImJm4uYWZ0ZXIoZSxyLG8sdVt0XSkKK3MmJmNvbnNvbGUudGltZUVu
ZChhKX19ZnVuY3Rpb24gUmUoZSl7aG49ZX1mdW5jdGlvbiBrZShlKXtkbj9kbihlKTpOZShlKX1m
dW5jdGlvbiBOZShlKXtpZihyLmlzVGVzdGluZygpKXRocm93IGUKK2huP2huKGUpOmEuZXJyb3Io
Zm4oZSkpfWZ1bmN0aW9uIFBlKGUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9PWV8
fCJmdW5jdGlvbiI9PXR5cGVvZiBlfWZ1bmN0aW9uIGplKGUpe3ZhciB0LHIsaSxvCitpZighKHRo
aXMgaW5zdGFuY2VvZiBqZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ29uc3RydWN0b3IgV2Vha01h
cCByZXF1aXJlcyAnbmV3JyIpCitpZih0aGlzLl9pZD1uLkdVSURfS0VZK21uKyssbnVsbD09PWV8
fHZvaWQgMD09PWUpO2Vsc2V7aWYoIUFycmF5LmlzQXJyYXkoZSkpdGhyb3cgbmV3IFR5cGVFcnJv
cigiVGhlIHdlYWsgbWFwIGNvbnN0cnVjdG9yIHBvbHlmaWxsIG9ubHkgc3VwcG9ydHMgYW4gYXJy
YXkgYXJndW1lbnQiKQorZm9yKHQ9MDt0PGUubGVuZ3RoO3QrKylyPWVbdF0saT1yWzBdLG89clsx
XSx0aGlzLnNldChpLG8pfX1mdW5jdGlvbiBEZShlKXtyZXR1cm4gbnVsbD09PWV8fHZvaWQgMD09
PWV9ZnVuY3Rpb24gTGUoZSl7dmFyIHQsbixyPURlKGUpCitpZihyKXJldHVybiByCitpZigibnVt
YmVyIj09dHlwZW9mIGUuc2l6ZSlyZXR1cm4hZS5zaXplCit2YXIgaT10eXBlb2YgZQorcmV0dXJu
Im9iamVjdCI9PT1pJiYibnVtYmVyIj09dHlwZW9mKHQ9bGUoZSwic2l6ZSIpKT8hdDoibnVtYmVy
Ij09dHlwZW9mIGUubGVuZ3RoJiYiZnVuY3Rpb24iIT09aT8hZS5sZW5ndGg6Im9iamVjdCI9PT1p
JiYibnVtYmVyIj09dHlwZW9mKG49bGUoZSwibGVuZ3RoIikpJiYhbn1mdW5jdGlvbiBJZShlKXty
ZXR1cm4gTGUoZSl8fCJzdHJpbmciPT10eXBlb2YgZSYmbnVsbD09PWUubWF0Y2goL1xTLyl9ZnVu
Y3Rpb24gTWUoKXtyZXR1cm4geW4ucnVuLmFwcGx5KHluLGFyZ3VtZW50cyl9ZnVuY3Rpb24gRmUo
ZSl7dGhyb3cgbmV3IFR5cGVFcnJvcihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkr
IiBpcyBub3QgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHplKGUpe3Rocm93IG5ldyBUeXBlRXJyb3Io
IkNvbnN0cnVjdG9yICIrZSsiIHJlcXVpcmVzICduZXcnIil9ZnVuY3Rpb24gVWUoZSl7dmFyIHQ9
T2JqZWN0LmNyZWF0ZShudWxsKQorZm9yKHZhciBuIGluIGUpdFtuXT1lW25dCityZXR1cm4gdH1m
dW5jdGlvbiBCZShlLHQpe3ZhciBuPWUuX2tleXMuY29weSgpLHI9VWUoZS5fdmFsdWVzKQorcmV0
dXJuIHQuX2tleXM9bix0Ll92YWx1ZXM9cix0LnNpemU9ZS5zaXplLHR9ZnVuY3Rpb24gcWUoKXt0
aGlzIGluc3RhbmNlb2YgcWU/dGhpcy5jbGVhcigpOnplKCJPcmRlcmVkU2V0Iil9ZnVuY3Rpb24g
SGUoKXt0aGlzIGluc3RhbmNlb2YgSGU/KHRoaXMuX2tleXM9cWUuY3JlYXRlKCksdGhpcy5fdmFs
dWVzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5zaXplPTApOnplKCJNYXAiKX1mdW5jdGlvbiBW
ZShlKXt0aGlzLl9zdXBlciRjb25zdHJ1Y3RvcigpLHRoaXMuZGVmYXVsdFZhbHVlPWUuZGVmYXVs
dFZhbHVlfWZ1bmN0aW9uIFdlKGUpe3JldHVybiBlKyI6Y2hhbmdlIn1mdW5jdGlvbiAkZShlKXty
ZXR1cm4gZSsiOmJlZm9yZSJ9ZnVuY3Rpb24gR2UoZSx0LG4scil7cmV0dXJuIGYoZSxXZSh0KSxu
LHIpLHllKGUsdCksdGhpc31mdW5jdGlvbiBLZShlLHQsbixyKXtyZXR1cm4gdmUoZSx0KSxoKGUs
V2UodCksbixyKSx0aGlzfWZ1bmN0aW9uIFFlKGUsdCxuLHIpe3JldHVybiBmKGUsJGUodCksbixy
KSx5ZShlLHQpLHRoaXN9ZnVuY3Rpb24gWWUoZSx0LG4scixpKXtyZXR1cm4gZChlLFdlKHQpLG4s
cixpKX1mdW5jdGlvbiBKZShlLHQsbixyKXtyZXR1cm4gdmUoZSx0KSxoKGUsJGUodCksbixyKSx0
aGlzfWZ1bmN0aW9uIFhlKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlJiYhMSE9PWUuaXNN
ZXRob2QmJmUhPT1Cb29sZWFuJiZlIT09T2JqZWN0JiZlIT09TnVtYmVyJiZlIT09QXJyYXkmJmUh
PT1EYXRlJiZlIT09U3RyaW5nfWZ1bmN0aW9uIFplKGUsdCl7dmFyIHI9dm9pZCAwCityZXR1cm4g
dCBpbnN0YW5jZW9mIENuPyhyPW4uZ3VpZEZvcih0KSxlLnBlZWtNaXhpbnMocik/eG46KGUud3Jp
dGVNaXhpbnMocix0KSx0LnByb3BlcnRpZXMpKTp0fWZ1bmN0aW9uIGV0KGUsdCxuLHIpe3ZhciBp
PW5bZV18fHJbZV0KK3JldHVybiB0W2VdJiYoaT1pP3duLmNhbGwoaSx0W2VdKTp0W2VdKSxpfWZ1
bmN0aW9uIHR0KGUsdCxyLGksbyxzKXt2YXIgYSx1LGw9dm9pZCAwCityZXR1cm4gdm9pZCAwPT09
aVt0XSYmKGw9b1t0XSksbHx8KGE9c1t0XSx1PW51bGwhPT1hJiYib2JqZWN0Ij09dHlwZW9mIGEm
JmEuaXNEZXNjcmlwdG9yP2E6dm9pZCAwLGw9dSksdm9pZCAwIT09bCYmbCBpbnN0YW5jZW9mIHdl
PyhyPU9iamVjdC5jcmVhdGUociksci5fZ2V0dGVyPW4ud3JhcChyLl9nZXR0ZXIsbC5fZ2V0dGVy
KSxsLl9zZXR0ZXImJihyLl9zZXR0ZXI/ci5fc2V0dGVyPW4ud3JhcChyLl9zZXR0ZXIsbC5fc2V0
dGVyKTpyLl9zZXR0ZXI9bC5fc2V0dGVyKSxyKTpyfWZ1bmN0aW9uIG50KGUsdCxyLGksbyl7dmFy
IHM9dm9pZCAwCityZXR1cm4gdm9pZCAwPT09b1t0XSYmKHM9aVt0XSkscz1zfHxlW3RdLHZvaWQg
MD09PXN8fCJmdW5jdGlvbiIhPXR5cGVvZiBzP3I6bi53cmFwKHIscyl9ZnVuY3Rpb24gcnQoZSx0
LHIsaSl7dmFyIG89aVt0XXx8ZVt0XQorcmV0dXJuIG51bGw9PT1vfHx2b2lkIDA9PT1vP24ubWFr
ZUFycmF5KHIpOkVuKG8pP251bGw9PT1yfHx2b2lkIDA9PT1yP286d24uY2FsbChvLHIpOnduLmNh
bGwobi5tYWtlQXJyYXkobykscil9ZnVuY3Rpb24gaXQoZSx0LHIsaSl7dmFyIG8scz1pW3RdfHxl
W3RdCitpZighcylyZXR1cm4gcgordmFyIGE9bi5hc3NpZ24oe30scyksdT0hMQorZm9yKHZhciBs
IGluIHIpci5oYXNPd25Qcm9wZXJ0eShsKSYmKG89cltsXSxYZShvKT8odT0hMCxhW2xdPW50KGUs
bCxvLHMse30pKTphW2xdPW8pCityZXR1cm4gdSYmKGEuX3N1cGVyPW4uUk9PVCksYX1mdW5jdGlv
biBvdChlLHQsbixyLGksbyxzLGEpe2lmKG4gaW5zdGFuY2VvZiBJKXtpZihuPT09VG4mJmlbdF0p
cmV0dXJuIHhuCituLl9nZXR0ZXImJihuPXR0KHIsdCxuLG8saSxlKSksaVt0XT1uLG9bdF09dm9p
ZCAwfWVsc2UgcyYmcy5pbmRleE9mKHQpPj0wfHwiY29uY2F0ZW5hdGVkUHJvcGVydGllcyI9PT10
fHwibWVyZ2VkUHJvcGVydGllcyI9PT10P249cnQoZSx0LG4sbyk6YSYmYS5pbmRleE9mKHQpPj0w
P249aXQoZSx0LG4sbyk6WGUobikmJihuPW50KGUsdCxuLG8saSkpLGlbdF09dm9pZCAwLG9bdF09
bn1mdW5jdGlvbiBzdChlLHQsbixyLGksbyl7ZnVuY3Rpb24gcyhlKXtkZWxldGUgbltlXSxkZWxl
dGUgcltlXX12YXIgYSx1PXZvaWQgMCxsPXZvaWQgMCxjPXZvaWQgMCxwPXZvaWQgMCxmPXZvaWQg
MAorZm9yKGE9MDthPGUubGVuZ3RoO2ErKylpZih1PWVbYV0sKGw9WmUodCx1KSkhPT14bilpZihs
KXtpLndpbGxNZXJnZU1peGluJiZpLndpbGxNZXJnZU1peGluKGwpLHA9ZXQoImNvbmNhdGVuYXRl
ZFByb3BlcnRpZXMiLGwscixpKSxmPWV0KCJtZXJnZWRQcm9wZXJ0aWVzIixsLHIsaSkKK2Zvcihj
IGluIGwpbC5oYXNPd25Qcm9wZXJ0eShjKSYmKG8ucHVzaChjKSxvdChpLGMsbFtjXSx0LG4scixw
LGYpKQorbC5oYXNPd25Qcm9wZXJ0eSgidG9TdHJpbmciKSYmKGkudG9TdHJpbmc9bC50b1N0cmlu
Zyl9ZWxzZSB1Lm1peGlucyYmKHN0KHUubWl4aW5zLHQsbixyLGksbyksdS5fd2l0aG91dCYmdS5f
d2l0aG91dC5mb3JFYWNoKHMpKX1mdW5jdGlvbiBhdChlKXt2YXIgdD1lLmxlbmd0aAorcmV0dXJu
IHQ+NyYmNjY9PT1lLmNoYXJDb2RlQXQodC03KSYmLTEhPT1lLmluZGV4T2YoImluZGluZyIsdC02
KX1mdW5jdGlvbiB1dChlLHQpe3QuZm9yRWFjaEJpbmRpbmdzKGZ1bmN0aW9uKHQsbil7dmFyIHIK
K24mJihyPXQuc2xpY2UoMCwtNyksbiBpbnN0YW5jZW9mIF9uPyhuPW4uY29weSgpLG4udG8ocikp
Om49bmV3IF9uKHIsbiksbi5jb25uZWN0KGUpLGVbdF09bil9KSx0LmNsZWFyQmluZGluZ3MoKX1m
dW5jdGlvbiBsdChlLHQpe3JldHVybiB1dChlLHR8fGllKGUpKSxlfWZ1bmN0aW9uIGN0KGUsdCxu
LHIpe3ZhciBpPXQubWV0aG9kTmFtZSxvPXZvaWQgMCxzPXZvaWQgMAorcmV0dXJuIG5baV18fHJb
aV0/KG89cltpXSx0PW5baV0pOihzPWVbaV0pJiZudWxsIT09cyYmIm9iamVjdCI9PXR5cGVvZiBz
JiZzLmlzRGVzY3JpcHRvcj8odD1zLG89dm9pZCAwKToodD12b2lkIDAsbz1lW2ldKSx7ZGVzYzp0
LHZhbHVlOm99fWZ1bmN0aW9uIHB0KGUsdCxuLHIsaSl7dmFyIG8scz1uW3JdCitpZihzKWZvcihv
PTA7bzxzLmxlbmd0aDtvKyspaShlLHNbb10sbnVsbCx0KX1mdW5jdGlvbiBmdChlLHQsbil7dmFy
IHI9ZVt0XQorImZ1bmN0aW9uIj09dHlwZW9mIHImJihwdChlLHQsciwiX19lbWJlcl9vYnNlcnZl
c0JlZm9yZV9fIixKZSkscHQoZSx0LHIsIl9fZW1iZXJfb2JzZXJ2ZXNfXyIsS2UpLHB0KGUsdCxy
LCJfX2VtYmVyX2xpc3RlbnNfXyIsaCkpLCJmdW5jdGlvbiI9PXR5cGVvZiBuJiYocHQoZSx0LG4s
Il9fZW1iZXJfb2JzZXJ2ZXNCZWZvcmVfXyIsUWUpLHB0KGUsdCxuLCJfX2VtYmVyX29ic2VydmVz
X18iLEdlKSxwdChlLHQsbiwiX19lbWJlcl9saXN0ZW5zX18iLGYpKX1mdW5jdGlvbiBodChlLHQs
cil7dmFyIGksbyxzPXt9LGE9e30sdT1pZShlKSxsPVtdLGM9dm9pZCAwLHA9dm9pZCAwLGY9dm9p
ZCAwCitmb3IoZS5fc3VwZXI9bi5ST09ULHN0KHQsdSxzLGEsZSxsKSxpPTA7aTxsLmxlbmd0aDtp
KyspaWYoImNvbnN0cnVjdG9yIiE9PShjPWxbaV0pJiZhLmhhc093blByb3BlcnR5KGMpJiYoZj1z
W2NdLHA9YVtjXSxmIT09VG4pKXtmb3IoO2YmJmYgaW5zdGFuY2VvZiBndDspbz1jdChlLGYscyxh
KSxmPW8uZGVzYyxwPW8udmFsdWUKK3ZvaWQgMD09PWYmJnZvaWQgMD09PXB8fChmdChlLGMscCks
YXQoYykmJnUud3JpdGVCaW5kaW5ncyhjLHApLE0oZSxjLGYscCx1KSl9cmV0dXJuIHJ8fGx0KGUs
dSksZX1mdW5jdGlvbiBkdChlLHQscil7dmFyIGk9bi5ndWlkRm9yKGUpCitpZihyW2ldKXJldHVy
biExCitpZihyW2ldPSEwLGU9PT10KXJldHVybiEwCitmb3IodmFyIG89ZS5taXhpbnMscz1vP28u
bGVuZ3RoOjA7LS1zPj0wOylpZihkdChvW3NdLHQscikpcmV0dXJuITAKK3JldHVybiExfWZ1bmN0
aW9uIG10KGUsdCxyKXt2YXIgaSxvLHMKK2lmKCFyW24uZ3VpZEZvcih0KV0paWYocltuLmd1aWRG
b3IodCldPSEwLHQucHJvcGVydGllcylmb3IoaT1PYmplY3Qua2V5cyh0LnByb3BlcnRpZXMpLG89
MDtvPGkubGVuZ3RoO28rKylzPWlbb10sZVtzXT0hMAorZWxzZSB0Lm1peGlucyYmdC5taXhpbnMu
Zm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gbXQoZSx0LHIpfSl9ZnVuY3Rpb24gZ3QoZSl7dGhp
cy5pc0Rlc2NyaXB0b3I9ITAsdGhpcy5tZXRob2ROYW1lPWV9ZnVuY3Rpb24geXQoKXtmb3IoZT1h
cmd1bWVudHMubGVuZ3RoLHQ9QXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl0K
K3ZhciBlLHQsbixpLG89dC5zbGljZSgtMSlbMF0scz12b2lkIDAsYT1mdW5jdGlvbihlKXtzLnB1
c2goZSl9LHU9dC5zbGljZSgwLC0xKQorZm9yKCJmdW5jdGlvbiIhPXR5cGVvZiBvJiYobz10WzBd
LHU9dC5zbGljZSgxKSkscz1bXSxpPTA7aTx1Lmxlbmd0aDsrK2kpbWUodVtpXSxhKQoraWYoImZ1
bmN0aW9uIiE9dHlwZW9mIG8pdGhyb3cgbmV3IHIuRW1iZXJFcnJvcigiRW1iZXIub2JzZXJ2ZXIg
Y2FsbGVkIHdpdGhvdXQgYSBmdW5jdGlvbiIpCityZXR1cm4gby5fX2VtYmVyX29ic2VydmVzX189
cyxvfWZ1bmN0aW9uIHZ0KGUsdCl7dGhpcy50eXBlPWUsdGhpcy5uYW1lPXQsdGhpcy5fc3VwZXIk
Q29uc3RydWN0b3IoYnQpLGtuLm9uZVdheS5jYWxsKHRoaXMpfWZ1bmN0aW9uIGJ0KGUpe3ZhciB0
PXRoaXNbZV0scj1uLmdldE93bmVyKHRoaXMpfHx0aGlzLmNvbnRhaW5lcgorcmV0dXJuIHIubG9v
a3VwKHQudHlwZSsiOiIrKHQubmFtZXx8ZSkpfXZhciBfdCx3dCxFdD0iZGVmYXVsdCJpbiBzP3Mu
ZGVmYXVsdDpzCithPSJkZWZhdWx0ImluIGE/YS5kZWZhdWx0OmEsdT0iZGVmYXVsdCJpbiB1P3Uu
ZGVmYXVsdDp1Cit2YXIgeHQ9Im9iamVjdCI9PXR5cGVvZiB0LmNvbnRleHQuaW1wb3J0cy5FbWJl
ciYmdC5jb250ZXh0LmltcG9ydHMuRW1iZXJ8fHt9Cit4dC5pc05hbWVzcGFjZT0hMCx4dC50b1N0
cmluZz1mdW5jdGlvbigpe3JldHVybiJFbWJlciJ9Cit2YXIgQ3Q9MSxPdD0yLEF0PXthZGRUb0xp
c3RlbmVyczpmdW5jdGlvbihlLHQsbixyKXt0aGlzLl9saXN0ZW5lcnN8fCh0aGlzLl9saXN0ZW5l
cnM9W10pLHRoaXMuX2xpc3RlbmVycy5wdXNoKGUsdCxuLHIpfSxfZmluYWxpemVMaXN0ZW5lcnM6
ZnVuY3Rpb24oKXtpZighdGhpcy5fbGlzdGVuZXJzRmluYWxpemVkKXt0aGlzLl9saXN0ZW5lcnN8
fCh0aGlzLl9saXN0ZW5lcnM9W10pCitmb3IodmFyIGUsdD10aGlzLnBhcmVudDt0JiYoZT10Ll9s
aXN0ZW5lcnMsZSYmKHRoaXMuX2xpc3RlbmVycz10aGlzLl9saXN0ZW5lcnMuY29uY2F0KGUpKSwh
dC5fbGlzdGVuZXJzRmluYWxpemVkKTspdD10LnBhcmVudAordGhpcy5fbGlzdGVuZXJzRmluYWxp
emVkPSEwfX0scmVtb3ZlRnJvbUxpc3RlbmVyczpmdW5jdGlvbihlLHQsbixyKXtmb3IodmFyIGks
byxzPXRoaXM7czspe2lmKGk9cy5fbGlzdGVuZXJzKWZvcihvPWkubGVuZ3RoLTQ7bz49MDtvLT00
KWlmKGlbb109PT1lJiYoIW58fGlbbysxXT09PXQmJmlbbysyXT09PW4pKXtpZihzIT09dGhpcyly
ZXR1cm4gdGhpcy5fZmluYWxpemVMaXN0ZW5lcnMoKSx0aGlzLnJlbW92ZUZyb21MaXN0ZW5lcnMo
ZSx0LG4pCisiZnVuY3Rpb24iPT10eXBlb2YgciYmcihlLHQsaVtvKzJdKSxpLnNwbGljZShvLDQp
fWlmKHMuX2xpc3RlbmVyc0ZpbmFsaXplZClicmVhaworcz1zLnBhcmVudH19LG1hdGNoaW5nTGlz
dGVuZXJzOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLHIsaSxvPXRoaXMscz12b2lkIDA7dm9pZCAw
IT09bzspe2lmKHZvaWQgMCE9PSh0PW8uX2xpc3RlbmVycykpZm9yKG49MDtuPHQubGVuZ3RoLTM7
bis9NCl0W25dPT09ZSYmKHM9c3x8W10sbChzLHQsbikpCitpZighMD09PW8uX2xpc3RlbmVyc0Zp
bmFsaXplZClicmVhaworbz1vLnBhcmVudH12YXIgYT10aGlzLl9zdXNwZW5kZWRMaXN0ZW5lcnMK
K2lmKHZvaWQgMCE9PWEmJnZvaWQgMCE9PXMpZm9yKHI9MDtyPGEubGVuZ3RoLTI7cis9MylpZihl
PT09YVtyXSlmb3IoaT0wO2k8cy5sZW5ndGgtMjtpKz0zKXNbaV09PT1hW3IrMV0mJnNbaSsxXT09
PWFbcisyXSYmKHNbaSsyXXw9T3QpCityZXR1cm4gc30sc3VzcGVuZExpc3RlbmVyczpmdW5jdGlv
bihlLHQsbixyKXt2YXIgaSxvLHM9dGhpcy5fc3VzcGVuZGVkTGlzdGVuZXJzCitmb3Ioc3x8KHM9
dGhpcy5fc3VzcGVuZGVkTGlzdGVuZXJzPVtdKSxpPTA7aTxlLmxlbmd0aDtpKyspcy5wdXNoKGVb
aV0sdCxuKQordHJ5e3JldHVybiByLmNhbGwodCl9ZmluYWxseXtpZihzLmxlbmd0aD09PWUubGVu
Z3RoKXRoaXMuX3N1c3BlbmRlZExpc3RlbmVycz12b2lkIDAKK2Vsc2UgZm9yKG89cy5sZW5ndGgt
MztvPj0wO28tPTMpc1tvKzFdPT09dCYmc1tvKzJdPT09biYmLTEhPT1lLmluZGV4T2Yoc1tvXSkm
JnMuc3BsaWNlKG8sMyl9fSx3YXRjaGVkRXZlbnRzOmZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQsbj10
aGlzLHI9e307bjspe2lmKGU9bi5fbGlzdGVuZXJzKWZvcih0PTA7dDxlLmxlbmd0aC0zO3QrPTQp
cltlW3RdXT0hMAoraWYobi5fbGlzdGVuZXJzRmluYWxpemVkKWJyZWFrCituPW4ucGFyZW50fXJl
dHVybiBPYmplY3Qua2V5cyhyKX0sX2luaXRpYWxpemVMaXN0ZW5lcnM6ZnVuY3Rpb24oKXt0aGlz
Ll9saXN0ZW5lcnM9dm9pZCAwLHRoaXMuX2xpc3RlbmVyc0ZpbmFsaXplZD12b2lkIDAsdGhpcy5f
c3VzcGVuZGVkTGlzdGVuZXJzPXZvaWQgMH19LFR0PWZ1bmN0aW9uKCl7cmV0dXJuITF9LFN0PXZv
aWQgMCxSdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmNsZWFyKCl9cmV0dXJuIGUucHJv
dG90eXBlLmFkZD1mdW5jdGlvbihlLHQscil7dmFyIGk9dGhpcy5vYnNlcnZlclNldCxvPXRoaXMu
b2JzZXJ2ZXJzLHM9bi5ndWlkRm9yKGUpLGE9aVtzXSx1PXZvaWQgMAorcmV0dXJuIGF8fChpW3Nd
PWE9e30pLHU9YVt0XSx2b2lkIDA9PT11JiYodT1vLnB1c2goe3NlbmRlcjplLGtleU5hbWU6dCxl
dmVudE5hbWU6cixsaXN0ZW5lcnM6W119KS0xLGFbdF09dSksb1t1XS5saXN0ZW5lcnN9LGUucHJv
dG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vYnNlcnZlcnMsdD12b2lkIDAsbj12
b2lkIDAscj12b2lkIDAKK2Zvcih0aGlzLmNsZWFyKCksdD0wO3Q8ZS5sZW5ndGg7Kyt0KW49ZVt0
XSxyPW4uc2VuZGVyLHIuaXNEZXN0cm95aW5nfHxyLmlzRGVzdHJveWVkfHxnKHIsbi5ldmVudE5h
bWUsW3Isbi5rZXlOYW1lXSxuLmxpc3RlbmVycyl9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9u
KCl7dGhpcy5vYnNlcnZlclNldD17fSx0aGlzLm9ic2VydmVycz1bXX0sZX0oKQorZS5ydW5JblRy
YW5zYWN0aW9uPXZvaWQgMCxlLnJ1bkluVHJhbnNhY3Rpb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4g
ZVt0XSgpLCExfQordmFyIGt0PW4uc3ltYm9sKCJQUk9QRVJUWV9ESURfQ0hBTkdFIiksTnQ9bmV3
IFJ0LFB0PW5ldyBSdCxqdD0wLER0PXZvaWQgMCxMdD12b2lkIDA7KGZ1bmN0aW9uKCl7dmFyIGU9
T2JqZWN0LmNyZWF0ZShPYmplY3QucHJvdG90eXBlLHtwcm9wOntjb25maWd1cmFibGU6ITAsdmFs
dWU6MX19KQorT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3AiLHtjb25maWd1cmFibGU6ITAs
dmFsdWU6Mn0pLGUucHJvcH0pKCkKK3ZhciBJdD0hMSxNdD0vXihbXlwuXSspLyxGdD1mdW5jdGlv
bigpe2Z1bmN0aW9uIGUoKXt0aGlzLmNoYWlucz1PYmplY3QuY3JlYXRlKG51bGwpfXJldHVybiBl
LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNoYWluc1tlXQordm9pZCAw
PT09bj90aGlzLmNoYWluc1tlXT1bdF06bi5wdXNoKHQpfSxlLnByb3RvdHlwZS5yZW1vdmU9ZnVu
Y3Rpb24oZSx0KXt2YXIgbixyPXRoaXMuY2hhaW5zW2VdCitpZihyKWZvcihuPTA7bjxyLmxlbmd0
aDtuKyspaWYocltuXT09PXQpe3Iuc3BsaWNlKG4sMSkKK2JyZWFrfX0sZS5wcm90b3R5cGUuaGFz
PWZ1bmN0aW9uKGUsdCl7dmFyIG4scj10aGlzLmNoYWluc1tlXQoraWYocilmb3Iobj0wO248ci5s
ZW5ndGg7bisrKWlmKHJbbl09PT10KXJldHVybiEwCityZXR1cm4hMX0sZS5wcm90b3R5cGUucmV2
YWxpZGF0ZUFsbD1mdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzLmNoYWlucyl0aGlzLm5vdGlm
eShlLCEwLHZvaWQgMCl9LGUucHJvdG90eXBlLnJldmFsaWRhdGU9ZnVuY3Rpb24oZSl7dGhpcy5u
b3RpZnkoZSwhMCx2b2lkIDApfSxlLnByb3RvdHlwZS5ub3RpZnk9ZnVuY3Rpb24oZSx0LG4pe3Zh
ciByLGksbyxzLGE9dGhpcy5jaGFpbnNbZV0KK2lmKHZvaWQgMCE9PWEmJjAhPT1hLmxlbmd0aCl7
dmFyIHU9dm9pZCAwCitmb3IobiYmKHU9W10pLHI9MDtyPGEubGVuZ3RoO3IrKylhW3JdLm5vdGlm
eSh0LHUpCitpZih2b2lkIDAhPT1uKWZvcihpPTA7aTx1Lmxlbmd0aDtpKz0yKW89dVtpXSxzPXVb
aSsxXSxuKG8scyl9fSxlfSgpLHp0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy5f
cGFyZW50PWUsdGhpcy5fa2V5PXQKK3ZhciByLGk9dGhpcy5fd2F0Y2hpbmc9dm9pZCAwPT09bgor
aWYodGhpcy5fY2hhaW5zPXZvaWQgMCx0aGlzLl9vYmplY3Q9dm9pZCAwLHRoaXMuY291bnQ9MCx0
aGlzLl92YWx1ZT1uLHRoaXMuX3BhdGhzPXZvaWQgMCwhMD09PWkpe2lmKHI9ZS52YWx1ZSgpLCEw
PT0hJChyKSlyZXR1cm4KK3RoaXMuX29iamVjdD1yLFEodGhpcy5fb2JqZWN0LHRoaXMuX2tleSx0
aGlzKX19cmV0dXJuIGUucHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uKCl7dmFyIGUKK3JldHVybiB2
b2lkIDA9PT10aGlzLl92YWx1ZSYmITA9PT10aGlzLl93YXRjaGluZyYmKGU9dGhpcy5fcGFyZW50
LnZhbHVlKCksdGhpcy5fdmFsdWU9SihlLHRoaXMuX2tleSkpLHRoaXMuX3ZhbHVlfSxlLnByb3Rv
dHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIGUKKyEwPT09dGhpcy5fd2F0Y2hpbmcmJihlPXRo
aXMuX29iamVjdCxlJiZZKGUsdGhpcy5fa2V5LHRoaXMpLHRoaXMuX3dhdGNoaW5nPSExKX0sZS5w
cm90b3R5cGUuY29weT1mdW5jdGlvbih0KXt2YXIgbj1uZXcgZShudWxsLG51bGwsdCkscj10aGlz
Ll9wYXRocyxpPXZvaWQgMAoraWYodm9pZCAwIT09cilmb3IoaSBpbiByKXJbaV08PTB8fG4uYWRk
KGkpCityZXR1cm4gbn0sZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3Bh
dGhzfHwodGhpcy5fcGF0aHM9e30pCit0W2VdPSh0W2VdfHwwKSsxCit2YXIgbj1XKGUpLHI9ZS5z
bGljZShuLmxlbmd0aCsxKQordGhpcy5jaGFpbihuLHIpfSxlLnByb3RvdHlwZS5yZW1vdmU9ZnVu
Y3Rpb24oZSl7dmFyIHQ9dGhpcy5fcGF0aHMKK2lmKHZvaWQgMCE9PXQpe3RbZV0+MCYmdFtlXS0t
Cit2YXIgbj1XKGUpLHI9ZS5zbGljZShuLmxlbmd0aCsxKQordGhpcy51bmNoYWluKG4scil9fSxl
LnByb3RvdHlwZS5jaGFpbj1mdW5jdGlvbih0LG4pe3ZhciByPXRoaXMuX2NoYWlucyxpPXZvaWQg
MAordm9pZCAwPT09cj9yPXRoaXMuX2NoYWlucz1PYmplY3QuY3JlYXRlKG51bGwpOmk9clt0XSx2
b2lkIDA9PT1pJiYoaT1yW3RdPW5ldyBlKHRoaXMsdCx2b2lkIDApKSxpLmNvdW50KyssbiYmKHQ9
VyhuKSxuPW4uc2xpY2UodC5sZW5ndGgrMSksaS5jaGFpbih0LG4pKX0sZS5wcm90b3R5cGUudW5j
aGFpbj1mdW5jdGlvbihlLHQpe3ZhciBuLHIsaT10aGlzLl9jaGFpbnMsbz1pW2VdCit0JiZ0Lmxl
bmd0aD4xJiYobj1XKHQpLHI9dC5zbGljZShuLmxlbmd0aCsxKSxvLnVuY2hhaW4obixyKSksLS1v
LmNvdW50PD0wJiYoaVtvLl9rZXldPXZvaWQgMCxvLmRlc3Ryb3koKSl9LGUucHJvdG90eXBlLm5v
dGlmeT1mdW5jdGlvbihlLHQpe2UmJiEwPT09dGhpcy5fd2F0Y2hpbmcmJihuPXRoaXMuX3BhcmVu
dC52YWx1ZSgpLG4hPT10aGlzLl9vYmplY3QmJih2b2lkIDAhPT10aGlzLl9vYmplY3QmJlkodGhp
cy5fb2JqZWN0LHRoaXMuX2tleSx0aGlzKSwkKG4pPyh0aGlzLl9vYmplY3Q9bixRKG4sdGhpcy5f
a2V5LHRoaXMpKTp0aGlzLl9vYmplY3Q9dm9pZCAwKSx0aGlzLl92YWx1ZT12b2lkIDApCit2YXIg
bixyPXRoaXMuX2NoYWlucyxpPXZvaWQgMAoraWYodm9pZCAwIT09cilmb3IodmFyIG8gaW4gcil2
b2lkIDAhPT0oaT1yW29dKSYmaS5ub3RpZnkoZSx0KQordCYmdGhpcy5fcGFyZW50JiZ0aGlzLl9w
YXJlbnQucG9wdWxhdGVBZmZlY3RlZCh0aGlzLl9rZXksMSx0KX0sZS5wcm90b3R5cGUucG9wdWxh
dGVBZmZlY3RlZD1mdW5jdGlvbihlLHQsbil7dGhpcy5fa2V5JiYoZT10aGlzLl9rZXkrIi4iK2Up
LHRoaXMuX3BhcmVudD90aGlzLl9wYXJlbnQucG9wdWxhdGVBZmZlY3RlZChlLHQrMSxuKTp0PjEm
Jm4ucHVzaCh0aGlzLnZhbHVlKCksZSl9LGV9KCksVXQ9e2NhY2hlOlgsd2VhazpYLHdhdGNoaW5n
OlosbWl4aW5zOlosYmluZGluZ3M6Wix2YWx1ZXM6WixjaGFpbldhdGNoZXJzOmVlLGNoYWluczpm
dW5jdGlvbihlLHQpe3ZhciBuPXRlKGUpLHI9bmUoZSkKK3QucHJvdG90eXBlWyJ3cml0YWJsZSIr
cl09ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpc1tuXQorcmV0dXJuIHZvaWQgMD09PXQmJih0PXRoaXMu
cGFyZW50P3RoaXNbbl09dGhpcy5wYXJlbnRbIndyaXRhYmxlIityXShlKS5jb3B5KHRoaXMuc291
cmNlKTp0aGlzW25dPWUodGhpcy5zb3VyY2UpKSx0fSx0LnByb3RvdHlwZVsicmVhZGFibGUiK3Jd
PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2dldEluaGVyaXRlZChuKX19LHRhZzplZSx0YWdzOlh9
LEJ0PU9iamVjdC5rZXlzKFV0KSxxdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSx0KXt0aGlzLl9j
YWNoZT12b2lkIDAsdGhpcy5fd2Vhaz12b2lkIDAsdGhpcy5fd2F0Y2hpbmc9dm9pZCAwLHRoaXMu
X21peGlucz12b2lkIDAsdGhpcy5fYmluZGluZ3M9dm9pZCAwLHRoaXMuX3ZhbHVlcz12b2lkIDAs
dGhpcy5fZGVwcz12b2lkIDAsdGhpcy5fY2hhaW5XYXRjaGVycz12b2lkIDAsdGhpcy5fY2hhaW5z
PXZvaWQgMCx0aGlzLl90YWc9dm9pZCAwLHRoaXMuX3RhZ3M9dm9pZCAwLHRoaXMuX2ZhY3Rvcnk9
dm9pZCAwLHRoaXMuX2ZsYWdzPTAsdGhpcy5zb3VyY2U9ZSx0aGlzLnByb3RvPXZvaWQgMCx0aGlz
LnBhcmVudD10LHRoaXMuX2luaXRpYWxpemVMaXN0ZW5lcnMoKX1yZXR1cm4gdC5wcm90b3R5cGUu
aXNJbml0aWFsaXplZD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wcm90byE9PWV9LHQucHJvdG90
eXBlLnNldFRhZz1mdW5jdGlvbihlKXt0aGlzLl90YWc9ZX0sdC5wcm90b3R5cGUuZ2V0VGFnPWZ1
bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RhZ30sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigp
e2lmKCF0aGlzLmlzTWV0YURlc3Ryb3llZCgpKXt2YXIgdCxuPXZvaWQgMCxyPXZvaWQgMCxpPXZv
aWQgMCxvPXRoaXMucmVhZGFibGVDaGFpbnMoKQoraWYobylmb3IoSHQucHVzaChvKTtIdC5sZW5n
dGg+MDspe2lmKG89SHQucG9wKCksbj1vLl9jaGFpbnMpZm9yKHIgaW4gbil2b2lkIDAhPT1uW3Jd
JiZIdC5wdXNoKG5bcl0pCitvLl93YXRjaGluZyYmKGk9by5fb2JqZWN0KSYmKHQ9ZS5wZWVrTWV0
YShpKSkmJiF0LmlzU291cmNlRGVzdHJveWluZygpJiZZKGksby5fa2V5LG8sdCl9dGhpcy5zZXRN
ZXRhRGVzdHJveWVkKCl9fSx0LnByb3RvdHlwZS5pc1NvdXJjZURlc3Ryb3lpbmc9ZnVuY3Rpb24o
KXtyZXR1cm4gMCE9KDImdGhpcy5fZmxhZ3MpfSx0LnByb3RvdHlwZS5zZXRTb3VyY2VEZXN0cm95
aW5nPWZ1bmN0aW9uKCl7dGhpcy5fZmxhZ3N8PTJ9LHQucHJvdG90eXBlLmlzU291cmNlRGVzdHJv
eWVkPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPSg0JnRoaXMuX2ZsYWdzKX0sdC5wcm90b3R5cGUuc2V0
U291cmNlRGVzdHJveWVkPWZ1bmN0aW9uKCl7dGhpcy5fZmxhZ3N8PTR9LHQucHJvdG90eXBlLmlz
TWV0YURlc3Ryb3llZD1mdW5jdGlvbigpe3JldHVybiAwIT0oOCZ0aGlzLl9mbGFncyl9LHQucHJv
dG90eXBlLnNldE1ldGFEZXN0cm95ZWQ9ZnVuY3Rpb24oKXt0aGlzLl9mbGFnc3w9OH0sdC5wcm90
b3R5cGUuaXNQcm94eT1mdW5jdGlvbigpe3JldHVybiAwIT0oMTYmdGhpcy5fZmxhZ3MpfSx0LnBy
b3RvdHlwZS5zZXRQcm94eT1mdW5jdGlvbigpe3RoaXMuX2ZsYWdzfD0xNn0sdC5wcm90b3R5cGUu
X2dldE9yQ3JlYXRlT3duTWFwPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzW2VdfHwodGhpc1tlXT1P
YmplY3QuY3JlYXRlKG51bGwpKX0sdC5wcm90b3R5cGUuX2dldEluaGVyaXRlZD1mdW5jdGlvbihl
KXtmb3IodmFyIHQsbj10aGlzO3ZvaWQgMCE9PW47KXtpZih2b2lkIDAhPT0odD1uW2VdKSlyZXR1
cm4gdAorbj1uLnBhcmVudH19LHQucHJvdG90eXBlLl9maW5kSW5oZXJpdGVkPWZ1bmN0aW9uKGUs
dCl7Zm9yKHZhciBuLHIsaT10aGlzO3ZvaWQgMCE9PWk7KXtpZih2b2lkIDAhPT0obj1pW2VdKSYm
dm9pZCAwIT09KHI9blt0XSkpcmV0dXJuIHIKK2k9aS5wYXJlbnR9fSx0LnByb3RvdHlwZS53cml0
ZURlcHM9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuX2dldE9yQ3JlYXRlT3duTWFwKCJfZGVw
cyIpLGk9cltlXQordm9pZCAwPT09aSYmKGk9cltlXT1PYmplY3QuY3JlYXRlKG51bGwpKSxpW3Rd
PW59LHQucHJvdG90eXBlLnBlZWtEZXBzPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuLHIsaSxvPXRo
aXM7dm9pZCAwIT09bzspe2lmKHZvaWQgMCE9PShuPW8uX2RlcHMpJiZ2b2lkIDAhPT0ocj1uW2Vd
KSYmdm9pZCAwIT09KGk9clt0XSkpcmV0dXJuIGkKK289by5wYXJlbnR9fSx0LnByb3RvdHlwZS5o
YXNEZXBzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPXRoaXM7dm9pZCAwIT09bjspe2lmKHZvaWQg
MCE9PSh0PW4uX2RlcHMpJiZ2b2lkIDAhPT10W2VdKXJldHVybiEwCituPW4ucGFyZW50fXJldHVy
biExfSx0LnByb3RvdHlwZS5mb3JFYWNoSW5EZXBzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMu
X2ZvckVhY2hJbigiX2RlcHMiLGUsdCl9LHQucHJvdG90eXBlLl9mb3JFYWNoSW49ZnVuY3Rpb24o
ZSx0LG4pe2Zvcih2YXIgcixpLG8scyxhLHUsbD10aGlzLGM9dm9pZCAwLHA9dm9pZCAwO3ZvaWQg
MCE9PWw7KXtpZih2b2lkIDAhPT0ocj1sW2VdKSYmdm9pZCAwIT09KGk9clt0XSkpZm9yKHZhciBm
IGluIGkpYz1jfHxPYmplY3QuY3JlYXRlKG51bGwpLHZvaWQgMD09PWNbZl0mJihjW2ZdPSEwLHA9
cHx8W10scC5wdXNoKFtmLGlbZl1dKSkKK2w9bC5wYXJlbnR9aWYodm9pZCAwIT09cClmb3Iobz0w
O288cC5sZW5ndGg7bysrKXM9cFtvXSxhPXNbMF0sdT1zWzFdLG4oYSx1KX0sdC5wcm90b3R5cGUu
cmVhZEluaGVyaXRlZFZhbHVlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuLHIsaT10aGlzO3ZvaWQg
MCE9PWk7KXtpZih2b2lkIDAhPT0obj1pWyJfIitlXSkmJih2b2lkIDAhPT0ocj1uW3RdKXx8dCBp
biBuKSlyZXR1cm4gcgoraT1pLnBhcmVudH1yZXR1cm4gV3R9LHQucHJvdG90eXBlLndyaXRlVmFs
dWU9ZnVuY3Rpb24oZSx0LHIpe3ZhciBpPW4ubG9va3VwRGVzY3JpcHRvcihlLHQpCit2b2lkIDAh
PT1pJiZpLnNldCYmaS5zZXQuaXNNYW5kYXRvcnlTZXR0ZXI/dGhpcy53cml0ZVZhbHVlcyh0LHIp
OmVbdF09cn0saS5jcmVhdGVDbGFzcyh0LFt7a2V5OiJmYWN0b3J5IixzZXQ6ZnVuY3Rpb24oZSl7
dGhpcy5fZmFjdG9yeT1lfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZmFjdG9yeX19XSks
dH0oKSxIdD1bXQorZm9yKHZhciBWdCBpbiBBdClxdC5wcm90b3R5cGVbVnRdPUF0W1Z0XQorQnQu
Zm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gVXRbZV0oZSxxdCl9KQordmFyIFd0PW4uc3ltYm9s
KCJ1bmRlZmluZWQiKSwkdD17d3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6
ITEsdmFsdWU6bnVsbH0sR3Q9e25hbWU6Il9fZW1iZXJfbWV0YV9fIixkZXNjcmlwdG9yOiR0fSxL
dD12b2lkIDAKK2UucGVla01ldGE9dm9pZCAwLG4uSEFTX05BVElWRV9XRUFLTUFQPyhfdD1PYmpl
Y3QuZ2V0UHJvdG90eXBlT2Ysd3Q9bmV3IFdlYWtNYXAsS3Q9ZnVuY3Rpb24oZSx0KXt3dC5zZXQo
ZSx0KX0sZS5wZWVrTWV0YT1mdW5jdGlvbihlKXtyZXR1cm4gd3QuZ2V0KGUpfSxlLnBlZWtNZXRh
PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLG49dm9pZCAwO3ZvaWQgMCE9PXQmJm51bGwhPT10Oyl7
aWYodm9pZCAwIT09KG49d3QuZ2V0KHQpKSlyZXR1cm4gbgordD1fdCh0KX19KTooS3Q9ZnVuY3Rp
b24oZSx0KXtlLl9fZGVmaW5lTm9uRW51bWVyYWJsZT9lLl9fZGVmaW5lTm9uRW51bWVyYWJsZShH
dCk6T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZW1iZXJfbWV0YV9fIiwkdCksZS5fX2VtYmVy
X21ldGFfXz10fSxlLnBlZWtNZXRhPWZ1bmN0aW9uKGUpe3JldHVybiBlLl9fZW1iZXJfbWV0YV9f
fSkKK3ZhciBRdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4scil7dGhpcy5zaXplPTAsdGhp
cy5taXNzZXM9MCx0aGlzLmhpdHM9MCx0aGlzLmxpbWl0PWUsdGhpcy5mdW5jPXQsdGhpcy5rZXk9
bix0aGlzLnN0b3JlPXJ8fG5ldyBZdH1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUp
e3ZhciB0PXZvaWQgMD09PXRoaXMua2V5P2U6dGhpcy5rZXkoZSksbj10aGlzLnN0b3JlLmdldCh0
KQorcmV0dXJuIHZvaWQgMD09PW4/KHRoaXMubWlzc2VzKyssbj10aGlzLl9zZXQodCx0aGlzLmZ1
bmMoZSkpKTpuPT09V3Q/KHRoaXMuaGl0cysrLG49dm9pZCAwKTp0aGlzLmhpdHMrKyxufSxlLnBy
b3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj12b2lkIDA9PT10aGlzLmtleT9lOnRoaXMu
a2V5KGUpCityZXR1cm4gdGhpcy5fc2V0KG4sdCl9LGUucHJvdG90eXBlLl9zZXQ9ZnVuY3Rpb24o
ZSx0KXtyZXR1cm4gdGhpcy5saW1pdD50aGlzLnNpemUmJih0aGlzLnNpemUrKyx2b2lkIDA9PT10
P3RoaXMuc3RvcmUuc2V0KGUsV3QpOnRoaXMuc3RvcmUuc2V0KGUsdCkpLHR9LGUucHJvdG90eXBl
LnB1cmdlPWZ1bmN0aW9uKCl7dGhpcy5zdG9yZS5jbGVhcigpLHRoaXMuc2l6ZT0wLHRoaXMuaGl0
cz0wLHRoaXMubWlzc2VzPTB9LGV9KCksWXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5k
YXRhPU9iamVjdC5jcmVhdGUobnVsbCl9cmV0dXJuIGUucHJvdG90eXBlLmdldD1mdW5jdGlvbihl
KXtyZXR1cm4gdGhpcy5kYXRhW2VdfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt0aGlz
LmRhdGFbZV09dH0sZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmRhdGE9T2JqZWN0
LmNyZWF0ZShudWxsKX0sZX0oKSxKdD0vXltBLVokXS8sWHQ9L15bQS1aJF0uKltcLl0vCituZXcg
UXQoMWUzLGZ1bmN0aW9uKGUpe3JldHVybiBKdC50ZXN0KGUpfSkKK3ZhciBadD1uZXcgUXQoMWUz
LGZ1bmN0aW9uKGUpe3JldHVybiBYdC50ZXN0KGUpfSksZW49KG5ldyBRdCgxZTMsZnVuY3Rpb24o
ZSl7cmV0dXJuIDA9PT1lLmxhc3RJbmRleE9mKCJ0aGlzLiIsMCl9KSxuZXcgUXQoMWUzLGZ1bmN0
aW9uKGUpe3JldHVybiBlLmluZGV4T2YoIi4iKX0pKSx0bj1uZXcgUXQoMWUzLGZ1bmN0aW9uKGUp
e3ZhciB0PWVuLmdldChlKQorcmV0dXJuLTE9PT10P2U6ZS5zbGljZSgwLHQpfSksbm49bmV3IFF0
KDFlMyxmdW5jdGlvbihlKXt2YXIgdD1lbi5nZXQoZSkKK2lmKC0xIT09dClyZXR1cm4gZS5zbGlj
ZSh0KzEpfSkscm49e29iamVjdDohMCxmdW5jdGlvbjohMCxzdHJpbmc6ITB9LG9uPS9cLkBlYWNo
JC8KK3dlLnByb3RvdHlwZT1uZXcgSSx3ZS5wcm90b3R5cGUuY29uc3RydWN0b3I9d2UKK3ZhciBz
bj13ZS5wcm90b3R5cGUKK3NuLnZvbGF0aWxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZvbGF0
aWxlPSEwLHRoaXN9LHNuLnJlYWRPbmx5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRPbmx5
PSEwLHRoaXN9LHNuLnByb3BlcnR5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXtuLnB1c2goZSl9
dmFyIHQsbj1bXQorZm9yKHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKW1lKGFyZ3VtZW50c1t0
XSxlKQorcmV0dXJuIHRoaXMuX2RlcGVuZGVudEtleXM9bix0aGlzfSxzbi5tZXRhPWZ1bmN0aW9u
KGUpe3JldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLl9tZXRhfHx7fToodGhpcy5fbWV0
YT1lLHRoaXMpfSxzbi5kaWRDaGFuZ2U9ZnVuY3Rpb24odCxuKXtpZighdGhpcy5fdm9sYXRpbGUm
JnRoaXMuX3N1c3BlbmRlZCE9PXQpe3ZhciByPWUucGVla01ldGEodCkKK2lmKHImJnIuc291cmNl
PT09dCl7dmFyIGk9ci5yZWFkYWJsZUNhY2hlKCkKK2kmJnZvaWQgMCE9PWlbbl0mJihpW25dPXZv
aWQgMCxfZSh0aGlzLHQsbixyKSl9fX0sc24uZ2V0PWZ1bmN0aW9uKGUsdCl7aWYodGhpcy5fdm9s
YXRpbGUpcmV0dXJuIHRoaXMuX2dldHRlci5jYWxsKGUsdCkKK3ZhciBuPWllKGUpLHI9bi53cml0
YWJsZUNhY2hlKCksaT1yW3RdCitpZihpIT09V3Qpe2lmKHZvaWQgMCE9PWkpcmV0dXJuIGkKK3Zh
ciBvPXRoaXMuX2dldHRlci5jYWxsKGUsdCkKK3JbdF09dm9pZCAwPT09bz9XdDpvCit2YXIgcz1u
LnJlYWRhYmxlQ2hhaW5XYXRjaGVycygpCityZXR1cm4gcyYmcy5yZXZhbGlkYXRlKHQpLGJlKHRo
aXMsZSx0LG4pLG99fSxzbi5zZXQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLl9yZWFkT25s
eSYmdGhpcy5fdGhyb3dSZWFkT25seUVycm9yKGUsdCksdGhpcy5fc2V0dGVyP3RoaXMuX3ZvbGF0
aWxlP3RoaXMudm9sYXRpbGVTZXQoZSx0LG4pOnRoaXMuc2V0V2l0aFN1c3BlbmQoZSx0LG4pOnRo
aXMuY2xvYmJlclNldChlLHQsbil9LHNuLl90aHJvd1JlYWRPbmx5RXJyb3I9ZnVuY3Rpb24oZSx0
KXt0aHJvdyBuZXcgci5FcnJvcignQ2Fubm90IHNldCByZWFkLW9ubHkgcHJvcGVydHkgIicrdCsn
IiBvbiBvYmplY3Q6ICcrbi5pbnNwZWN0KGUpKX0sc24uY2xvYmJlclNldD1mdW5jdGlvbihlLHQs
bil7cmV0dXJuIE0oZSx0LG51bGwsRWUoZSx0KSksZmUoZSx0LG4pLG59LHNuLnZvbGF0aWxlU2V0
PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5fc2V0dGVyLmNhbGwoZSx0LG4pfSxzbi5zZXRX
aXRoU3VzcGVuZD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5fc3VzcGVuZGVkCit0aGlzLl9z
dXNwZW5kZWQ9ZQordHJ5e3JldHVybiB0aGlzLl9zZXQoZSx0LG4pfWZpbmFsbHl7dGhpcy5fc3Vz
cGVuZGVkPXJ9fSxzbi5fc2V0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1pZShlKSxpPXIud3JpdGFi
bGVDYWNoZSgpLG89ITEscz12b2lkIDAKK3ZvaWQgMCE9PWlbdF0mJihpW3RdIT09V3QmJihzPWlb
dF0pLG89ITApCit2YXIgYT10aGlzLl9zZXR0ZXIuY2FsbChlLHQsbixzKQorcmV0dXJuIG8mJnM9
PT1hP2E6KHgoZSx0LHIpLG8mJihpW3RdPXZvaWQgMCksb3x8YmUodGhpcyxlLHQsciksaVt0XT12
b2lkIDA9PT1hP1d0OmEsQyhlLHQsciksYSl9LHNuLnRlYXJkb3duPWZ1bmN0aW9uKGUsdCl7aWYo
IXRoaXMuX3ZvbGF0aWxlKXt2YXIgbj1pZShlKSxyPW4ucmVhZGFibGVDYWNoZSgpCityJiZ2b2lk
IDAhPT1yW3RdJiYoX2UodGhpcyxlLHQsbiksclt0XT12b2lkIDApfX0sRWUuc2V0PWZ1bmN0aW9u
KGUsdCxuKXtlW3RdPXZvaWQgMD09PW4/V3Q6bn0sRWUuZ2V0PWZ1bmN0aW9uKGUsdCl7dmFyIG49
ZVt0XQoraWYobiE9PVd0KXJldHVybiBufSxFZS5yZW1vdmU9ZnVuY3Rpb24oZSx0KXtlW3RdPXZv
aWQgMH0KK3ZhciBhbj17fSx1bj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe3ZhciBuPWkucG9z
c2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLGUuY2FsbCh0aGlzKSkKK3JldHVybiBuLmlzRGVz
Y3JpcHRvcj0hMCxuLmFsdEtleT10LG4uX2RlcGVuZGVudEtleXM9W3RdLG59cmV0dXJuIGkuaW5o
ZXJpdHModCxlKSx0LnByb3RvdHlwZS5zZXR1cD1mdW5jdGlvbihlLHQpe3ZhciBuPWllKGUpCitu
LnBlZWtXYXRjaGluZyh0KSYmYmUodGhpcyxlLHQsbil9LHQucHJvdG90eXBlLnRlYXJkb3duPWZ1
bmN0aW9uKGUsdCl7dmFyIG49aWUoZSkKK24ucGVla1dhdGNoaW5nKHQpJiZfZSh0aGlzLGUsdCxu
KX0sdC5wcm90b3R5cGUud2lsbFdhdGNoPWZ1bmN0aW9uKGUsdCl7YmUodGhpcyxlLHQsaWUoZSkp
fSx0LnByb3RvdHlwZS5kaWRVbndhdGNoPWZ1bmN0aW9uKGUsdCl7X2UodGhpcyxlLHQsaWUoZSkp
fSx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1sZShlLHRoaXMuYWx0S2V5KSxy
PWllKGUpLGk9ci53cml0YWJsZUNhY2hlKCkKK3JldHVybiBpW3RdIT09YW4mJihpW3RdPWFuLGJl
KHRoaXMsZSx0LHIpKSxufSx0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBm
ZShlLHRoaXMuYWx0S2V5LG4pfSx0LnByb3RvdHlwZS5yZWFkT25seT1mdW5jdGlvbigpe3JldHVy
biB0aGlzLnNldD14ZSx0aGlzfSx0LnByb3RvdHlwZS5vbmVXYXk9ZnVuY3Rpb24oKXtyZXR1cm4g
dGhpcy5zZXQ9Q2UsdGhpc30sdH0oSSkKK3VuLnByb3RvdHlwZS5fbWV0YT12b2lkIDAsdW4ucHJv
dG90eXBlLm1ldGE9d2UucHJvdG90eXBlLm1ldGEKK3ZhciBsbj1bXSxjbj17fSxwbj1mdW5jdGlv
bigpe3ZhciBlPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdy5wZXJmb3JtYW5jZXx8
e306e30sdD1lLm5vd3x8ZS5tb3pOb3d8fGUud2Via2l0Tm93fHxlLm1zTm93fHxlLm9Ob3cKK3Jl
dHVybiB0P3QuYmluZChlKTpmdW5jdGlvbigpe3JldHVybituZXcgRGF0ZX19KCkKK2UuZmxhZ2dl
ZEluc3RydW1lbnQ9dm9pZCAwLGUuZmxhZ2dlZEluc3RydW1lbnQ9ZnVuY3Rpb24oZSx0LG4pe3Jl
dHVybiBuKCl9Cit2YXIgZm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdGFjayxuPWUubWVzc2FnZQor
cmV0dXJuIHQmJi0xPT09dC5pbmRleE9mKG4pJiYodD1uKyJcbiIrdCksdH0saG49dm9pZCAwLGRu
PXZvaWQgMCxtbj0wCitqZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe2lmKFBlKHQpKXt2YXIg
bixyPWUucGVla01ldGEodCkKK2lmKHImJihuPXIucmVhZGFibGVXZWFrKCkpKXtpZihuW3RoaXMu
X2lkXT09PVd0KXJldHVybgorcmV0dXJuIG5bdGhpcy5faWRdfX19LGplLnByb3RvdHlwZS5zZXQ9
ZnVuY3Rpb24oZSx0KXtpZighUGUoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCB2YWx1
ZSB1c2VkIGFzIHdlYWsgbWFwIGtleSIpCityZXR1cm4gdm9pZCAwPT09dCYmKHQ9V3QpLGllKGUp
LndyaXRhYmxlV2VhaygpW3RoaXMuX2lkXT10LHRoaXN9LGplLnByb3RvdHlwZS5oYXM9ZnVuY3Rp
b24odCl7aWYoIVBlKHQpKXJldHVybiExCit2YXIgbixyPWUucGVla01ldGEodCkKK3JldHVybiEo
IXJ8fCEobj1yLnJlYWRhYmxlV2VhaygpKSkmJnZvaWQgMCE9PW5bdGhpcy5faWRdfSxqZS5wcm90
b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3JldHVybiEhdGhpcy5oYXMoZSkmJihkZWxldGUgaWUo
ZSkud3JpdGFibGVXZWFrKClbdGhpcy5faWRdLCEwKX0samUucHJvdG90eXBlLnRvU3RyaW5nPWZ1
bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgV2Vha01hcF0ifQordmFyIGduPXtnZXQgb25lcnJvcigp
e3JldHVybiBrZX0sc2V0IG9uZXJyb3IoZSl7cmV0dXJuIFJlKGUpfX0seW49bmV3IHUoWyJzeW5j
IiwiYWN0aW9ucyIsImRlc3Ryb3kiXSx7R1VJRF9LRVk6bi5HVUlEX0tFWSxzeW5jOntiZWZvcmU6
TixhZnRlcjpQfSxkZWZhdWx0UXVldWU6ImFjdGlvbnMiLG9uQmVnaW46ZnVuY3Rpb24oZSl7TWUu
Y3VycmVudFJ1bkxvb3A9ZX0sb25FbmQ6ZnVuY3Rpb24oZSx0KXtNZS5jdXJyZW50UnVuTG9vcD10
fSxvbkVycm9yVGFyZ2V0OmduLG9uRXJyb3JNZXRob2Q6Im9uZXJyb3IifSkKK01lLmpvaW49ZnVu
Y3Rpb24oKXtyZXR1cm4geW4uam9pbi5hcHBseSh5bixhcmd1bWVudHMpfSxNZS5iaW5kPWZ1bmN0
aW9uKCl7dmFyIGUsdCxuCitmb3IoZT1hcmd1bWVudHMubGVuZ3RoLHQ9QXJyYXkoZSksbj0wO248
ZTtuKyspdFtuXT1hcmd1bWVudHNbbl0KK3JldHVybiBmdW5jdGlvbigpe3ZhciBlLG4scgorZm9y
KGU9YXJndW1lbnRzLmxlbmd0aCxuPUFycmF5KGUpLHI9MDtyPGU7cisrKW5bcl09YXJndW1lbnRz
W3JdCityZXR1cm4gTWUuam9pbi5hcHBseShNZSx0LmNvbmNhdChuKSl9fSxNZS5iYWNrYnVybmVy
PXluLE1lLmN1cnJlbnRSdW5Mb29wPW51bGwsTWUucXVldWVzPXluLnF1ZXVlTmFtZXMsTWUuYmVn
aW49ZnVuY3Rpb24oKXt5bi5iZWdpbigpfSxNZS5lbmQ9ZnVuY3Rpb24oKXt5bi5lbmQoKX0sTWUu
c2NoZWR1bGU9ZnVuY3Rpb24oKXtyZXR1cm4geW4uc2NoZWR1bGUuYXBwbHkoeW4sYXJndW1lbnRz
KX0sTWUuaGFzU2NoZWR1bGVkVGltZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHluLmhhc1RpbWVycygp
fSxNZS5jYW5jZWxUaW1lcnM9ZnVuY3Rpb24oKXt5bi5jYW5jZWxUaW1lcnMoKX0sTWUuc3luYz1m
dW5jdGlvbigpe3luLmN1cnJlbnRJbnN0YW5jZSYmeW4uY3VycmVudEluc3RhbmNlLnF1ZXVlcy5z
eW5jLmZsdXNoKCl9LE1lLmxhdGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHluLmxhdGVyLmFwcGx5KHlu
LGFyZ3VtZW50cyl9LE1lLm9uY2U9ZnVuY3Rpb24oKXt2YXIgZSx0LG4KK2ZvcihlPWFyZ3VtZW50
cy5sZW5ndGgsdD1BcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXQorcmV0dXJu
IHQudW5zaGlmdCgiYWN0aW9ucyIpLHluLnNjaGVkdWxlT25jZS5hcHBseSh5bix0KX0sTWUuc2No
ZWR1bGVPbmNlPWZ1bmN0aW9uKCl7cmV0dXJuIHluLnNjaGVkdWxlT25jZS5hcHBseSh5bixhcmd1
bWVudHMpfSxNZS5uZXh0PWZ1bmN0aW9uKCl7dmFyIGUsdCxuCitmb3IoZT1hcmd1bWVudHMubGVu
Z3RoLHQ9QXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl0KK3JldHVybiB0LnB1
c2goMSkseW4ubGF0ZXIuYXBwbHkoeW4sdCl9LE1lLmNhbmNlbD1mdW5jdGlvbihlKXtyZXR1cm4g
eW4uY2FuY2VsKGUpfSxNZS5kZWJvdW5jZT1mdW5jdGlvbigpe3JldHVybiB5bi5kZWJvdW5jZS5h
cHBseSh5bixhcmd1bWVudHMpfSxNZS50aHJvdHRsZT1mdW5jdGlvbigpe3JldHVybiB5bi50aHJv
dHRsZS5hcHBseSh5bixhcmd1bWVudHMpfSxNZS5fYWRkUXVldWU9ZnVuY3Rpb24oZSx0KXstMT09
PU1lLnF1ZXVlcy5pbmRleE9mKGUpJiZNZS5xdWV1ZXMuc3BsaWNlKE1lLnF1ZXVlcy5pbmRleE9m
KHQpKzEsMCxlKX0KK3ZhciB2bj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLl9yZWdpc3Ry
eT1bXSx0aGlzLl9jb3JlTGliSW5kZXg9MH1yZXR1cm4gZS5wcm90b3R5cGUuaXNSZWdpc3RlcmVk
PWZ1bmN0aW9uKGUpe3JldHVybiEhdGhpcy5fZ2V0TGlicmFyeUJ5TmFtZShlKX0sZX0oKQordm4u
cHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp2bixfZ2V0TGlicmFyeUJ5TmFtZTpmdW5jdGlvbihlKXt2
YXIgdCxuPXRoaXMuX3JlZ2lzdHJ5LHI9bi5sZW5ndGgKK2Zvcih0PTA7dDxyO3QrKylpZihuW3Rd
Lm5hbWU9PT1lKXJldHVybiBuW3RdfSxyZWdpc3RlcjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhp
cy5fcmVnaXN0cnkubGVuZ3RoCit0aGlzLl9nZXRMaWJyYXJ5QnlOYW1lKGUpfHwobiYmKHI9dGhp
cy5fY29yZUxpYkluZGV4KyspLHRoaXMuX3JlZ2lzdHJ5LnNwbGljZShyLDAse25hbWU6ZSx2ZXJz
aW9uOnR9KSl9LHJlZ2lzdGVyQ29yZUxpYnJhcnk6ZnVuY3Rpb24oZSx0KXt0aGlzLnJlZ2lzdGVy
KGUsdCwhMCl9LGRlUmVnaXN0ZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZ2V0TGlicmFyeUJ5
TmFtZShlKSxuPXZvaWQgMAordCYmKG49dGhpcy5fcmVnaXN0cnkuaW5kZXhPZih0KSx0aGlzLl9y
ZWdpc3RyeS5zcGxpY2UobiwxKSl9fQordmFyIGJuPW5ldyB2bgorcWUuY3JlYXRlPWZ1bmN0aW9u
KCl7cmV0dXJuIG5ldyB0aGlzfSxxZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnFlLGNsZWFyOmZ1
bmN0aW9uKCl7dGhpcy5wcmVzZW5jZVNldD1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMubGlzdD1b
XSx0aGlzLnNpemU9MH0sYWRkOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dHx8bi5ndWlkRm9yKGUpLGk9
dGhpcy5wcmVzZW5jZVNldCxvPXRoaXMubGlzdAorcmV0dXJuITAhPT1pW3JdJiYoaVtyXT0hMCx0
aGlzLnNpemU9by5wdXNoKGUpKSx0aGlzfSxkZWxldGU6ZnVuY3Rpb24oZSx0KXt2YXIgcixpPXR8
fG4uZ3VpZEZvcihlKSxvPXRoaXMucHJlc2VuY2VTZXQscz10aGlzLmxpc3QKK3JldHVybiEwPT09
b1tpXSYmKGRlbGV0ZSBvW2ldLHI9cy5pbmRleE9mKGUpLHI+LTEmJnMuc3BsaWNlKHIsMSksdGhp
cy5zaXplPXMubGVuZ3RoLCEwKX0saXNFbXB0eTpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5z
aXplfSxoYXM6ZnVuY3Rpb24oZSl7aWYoMD09PXRoaXMuc2l6ZSlyZXR1cm4hMQordmFyIHQ9bi5n
dWlkRm9yKGUpCityZXR1cm4hMD09PXRoaXMucHJlc2VuY2VTZXRbdF19LGZvckVhY2g6ZnVuY3Rp
b24oZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUmJkZlKGUpLDAhPT10aGlzLnNpemUpe3ZhciB0
LG4scj10aGlzLmxpc3QKK2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoKWZvcih0PTA7dDxyLmxlbmd0
aDt0KyspZS5jYWxsKGFyZ3VtZW50c1sxXSxyW3RdKQorZWxzZSBmb3Iobj0wO248ci5sZW5ndGg7
bisrKWUocltuXSl9fSx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGlzdC5zbGljZSgp
fSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb25zdHJ1Y3Rvcix0PW5ldyBlCityZXR1cm4g
dC5wcmVzZW5jZVNldD1VZSh0aGlzLnByZXNlbmNlU2V0KSx0Lmxpc3Q9dGhpcy50b0FycmF5KCks
dC5zaXplPXRoaXMuc2l6ZSx0fX0sSGUuY3JlYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0aGlz
fSxIZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkhlLHNpemU6MCxnZXQ6ZnVuY3Rpb24oZSl7aWYo
MCE9PXRoaXMuc2l6ZSl7cmV0dXJuIHRoaXMuX3ZhbHVlc1tuLmd1aWRGb3IoZSldfX0sc2V0OmZ1
bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fa2V5cyxpPXRoaXMuX3ZhbHVlcyxvPW4uZ3VpZEZvcihl
KSxzPS0wPT09ZT8wOmUKK3JldHVybiByLmFkZChzLG8pLGlbb109dCx0aGlzLnNpemU9ci5zaXpl
LHRoaXN9LGRlbGV0ZTpmdW5jdGlvbihlKXtpZigwPT09dGhpcy5zaXplKXJldHVybiExCit2YXIg
dD10aGlzLl9rZXlzLHI9dGhpcy5fdmFsdWVzLGk9bi5ndWlkRm9yKGUpCityZXR1cm4hIXQuZGVs
ZXRlKGUsaSkmJihkZWxldGUgcltpXSx0aGlzLnNpemU9dC5zaXplLCEwKX0saGFzOmZ1bmN0aW9u
KGUpe3JldHVybiB0aGlzLl9rZXlzLmhhcyhlKX0sZm9yRWFjaDpmdW5jdGlvbihlKXtpZigiZnVu
Y3Rpb24iIT10eXBlb2YgZSYmRmUoZSksMCE9PXRoaXMuc2l6ZSl7dmFyIHQ9dGhpcyxuPXZvaWQg
MCxyPXZvaWQgMAorMj09PWFyZ3VtZW50cy5sZW5ndGg/KHI9YXJndW1lbnRzWzFdLG49ZnVuY3Rp
b24obil7cmV0dXJuIGUuY2FsbChyLHQuZ2V0KG4pLG4sdCl9KTpuPWZ1bmN0aW9uKG4pe3JldHVy
biBlKHQuZ2V0KG4pLG4sdCl9LHRoaXMuX2tleXMuZm9yRWFjaChuKX19LGNsZWFyOmZ1bmN0aW9u
KCl7dGhpcy5fa2V5cy5jbGVhcigpLHRoaXMuX3ZhbHVlcz1PYmplY3QuY3JlYXRlKG51bGwpLHRo
aXMuc2l6ZT0wfSxjb3B5OmZ1bmN0aW9uKCl7cmV0dXJuIEJlKHRoaXMsbmV3IEhlKX19LFZlLmNy
ZWF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gZT9uZXcgVmUoZSk6bmV3IEhlfSxWZS5wcm90b3R5cGU9
T2JqZWN0LmNyZWF0ZShIZS5wcm90b3R5cGUpLFZlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1WZSxW
ZS5wcm90b3R5cGUuX3N1cGVyJGNvbnN0cnVjdG9yPUhlLFZlLnByb3RvdHlwZS5fc3VwZXIkZ2V0
PUhlLnByb3RvdHlwZS5nZXQsVmUucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXt2YXIgdCxuPXRo
aXMuaGFzKGUpCityZXR1cm4gbj90aGlzLl9zdXBlciRnZXQoZSk6KHQ9dGhpcy5kZWZhdWx0VmFs
dWUoZSksdGhpcy5zZXQoZSx0KSx0KX0sVmUucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1
cm4gQmUodGhpcyxuZXcoMCx0aGlzLmNvbnN0cnVjdG9yKSh7ZGVmYXVsdFZhbHVlOnRoaXMuZGVm
YXVsdFZhbHVlfSkpfQordmFyIF9uPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuX2Zy
b209dCx0aGlzLl90bz1lLHRoaXMuX29uZVdheT12b2lkIDAsdGhpcy5fZGlyZWN0aW9uPXZvaWQg
MCx0aGlzLl9yZWFkeVRvU3luYz12b2lkIDAsdGhpcy5fZnJvbU9iaj12b2lkIDAsdGhpcy5fZnJv
bVBhdGg9dm9pZCAwLHRoaXMuX3RvT2JqPXZvaWQgMH1yZXR1cm4gZS5wcm90b3R5cGUuY29weT1m
dW5jdGlvbigpe3ZhciB0PW5ldyBlKHRoaXMuX3RvLHRoaXMuX2Zyb20pCityZXR1cm4gdGhpcy5f
b25lV2F5JiYodC5fb25lV2F5PSEwKSx0fSxlLnByb3RvdHlwZS5mcm9tPWZ1bmN0aW9uKGUpe3Jl
dHVybiB0aGlzLl9mcm9tPWUsdGhpc30sZS5wcm90b3R5cGUudG89ZnVuY3Rpb24oZSl7cmV0dXJu
IHRoaXMuX3RvPWUsdGhpc30sZS5wcm90b3R5cGUub25lV2F5PWZ1bmN0aW9uKCl7cmV0dXJuIHRo
aXMuX29uZVdheT0hMCx0aGlzfSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBl
PXRoaXMuX29uZVdheT8iW29uZVdheV0iOiIiCityZXR1cm4iRW1iZXIuQmluZGluZzwiK24uZ3Vp
ZEZvcih0aGlzKSsiPigiK3RoaXMuX2Zyb20rIiAtPiAiK3RoaXMuX3RvKyIpIitlfSxlLnByb3Rv
dHlwZS5jb25uZWN0PWZ1bmN0aW9uKGUpe3ZhciBuLHI9dm9pZCAwLGk9dm9pZCAwLG89dm9pZCAw
CityZXR1cm4gb2UodGhpcy5fZnJvbSkmJihuPWFlKHRoaXMuX2Zyb20pLChvPXQuY29udGV4dC5s
b29rdXBbbl0pJiYocj1vLGk9dWUodGhpcy5fZnJvbSkpKSx2b2lkIDA9PT1yJiYocj1lLGk9dGhp
cy5fZnJvbSksZGUoZSx0aGlzLl90byxsZShyLGkpKSxHZShyLGksdGhpcywiZnJvbURpZENoYW5n
ZSIpLHRoaXMuX29uZVdheXx8R2UoZSx0aGlzLl90byx0aGlzLCJ0b0RpZENoYW5nZSIpLGYoZSwi
d2lsbERlc3Ryb3kiLHRoaXMsImRpc2Nvbm5lY3QiKSx0aGlzLl90byx0aGlzLl9mcm9tLHRoaXMu
X29uZVdheSwhbyYmdGhpcy5fb25lV2F5LHRoaXMuX3JlYWR5VG9TeW5jPSEwLHRoaXMuX2Zyb21P
Ymo9cix0aGlzLl9mcm9tUGF0aD1pLHRoaXMuX3RvT2JqPWUsdGhpc30sZS5wcm90b3R5cGUuZGlz
Y29ubmVjdD1mdW5jdGlvbigpe3JldHVybiBLZSh0aGlzLl9mcm9tT2JqLHRoaXMuX2Zyb21QYXRo
LHRoaXMsImZyb21EaWRDaGFuZ2UiKSx0aGlzLl9vbmVXYXl8fEtlKHRoaXMuX3RvT2JqLHRoaXMu
X3RvLHRoaXMsInRvRGlkQ2hhbmdlIiksdGhpcy5fcmVhZHlUb1N5bmM9ITEsdGhpc30sZS5wcm90
b3R5cGUuZnJvbURpZENoYW5nZT1mdW5jdGlvbigpe3RoaXMuX3NjaGVkdWxlU3luYygiZndkIil9
LGUucHJvdG90eXBlLnRvRGlkQ2hhbmdlPWZ1bmN0aW9uKCl7dGhpcy5fc2NoZWR1bGVTeW5jKCJi
YWNrIil9LGUucHJvdG90eXBlLl9zY2hlZHVsZVN5bmM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5f
ZGlyZWN0aW9uCit2b2lkIDA9PT10JiYoTWUuc2NoZWR1bGUoInN5bmMiLHRoaXMsIl9zeW5jIiks
dGhpcy5fZGlyZWN0aW9uPWUpLCJiYWNrIj09PXQmJiJmd2QiPT09ZSYmKHRoaXMuX2RpcmVjdGlv
bj0iZndkIil9LGUucHJvdG90eXBlLl9zeW5jPWZ1bmN0aW9uKCl7dmFyIGUsbixyPXQuRU5WLkxP
R19CSU5ESU5HUyxpPXRoaXMuX3RvT2JqCitpZighaS5pc0Rlc3Ryb3llZCYmdGhpcy5fcmVhZHlU
b1N5bmMpe3ZhciBvPXRoaXMuX2RpcmVjdGlvbixzPXRoaXMuX2Zyb21PYmosdT10aGlzLl9mcm9t
UGF0aAordGhpcy5fZGlyZWN0aW9uPXZvaWQgMCwiZndkIj09PW8/KGU9bGUocyx1KSxyJiZhLmxv
ZygiICIsdGhpcy50b1N0cmluZygpLCItPiIsZSxzKSx0aGlzLl9vbmVXYXk/ZGUoaSx0aGlzLl90
byxlKTpZZShpLHRoaXMuX3RvLHRoaXMsInRvRGlkQ2hhbmdlIixmdW5jdGlvbigpe2RlKGksdGhp
cy5fdG8sZSl9KSk6ImJhY2siPT09byYmKG49bGUoaSx0aGlzLl90byksciYmYS5sb2coIiAiLHRo
aXMudG9TdHJpbmcoKSwiPC0iLG4saSksWWUocyx1LHRoaXMsImZyb21EaWRDaGFuZ2UiLGZ1bmN0
aW9uKCl7ZGUocyx1LG4pfSkpfX0sZX0oKTsoZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCl0
Lmhhc093blByb3BlcnR5KG4pJiYoZVtuXT10W25dKX0pKF9uLHtmcm9tOmZ1bmN0aW9uKGUpe3Jl
dHVybiBuZXcgdGhpcyh2b2lkIDAsZSl9LHRvOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdGhpcyhl
LHZvaWQgMCl9fSkKK3ZhciB3bj1BcnJheS5wcm90b3R5cGUuY29uY2F0LEVuPUFycmF5LmlzQXJy
YXkseG49e30KK2F0KCJub3Rib3VuZCIpLGF0KCJmb29CaW5kaW5nIikKK3ZhciBDbj1mdW5jdGlv
bigpe2Z1bmN0aW9uIHQoZSxpKXt0aGlzLnByb3BlcnRpZXM9aQordmFyIG8scyxhLHU9ZSYmZS5s
ZW5ndGgKK2lmKHU+MCl7Zm9yKG89bmV3IEFycmF5KHUpLHM9MDtzPHU7cysrKWE9ZVtzXSxvW3Nd
PWEgaW5zdGFuY2VvZiB0P2E6bmV3IHQodm9pZCAwLGEpCit0aGlzLm1peGlucz1vfWVsc2UgdGhp
cy5taXhpbnM9dm9pZCAwCit0aGlzLm93bmVyQ29uc3RydWN0b3I9dm9pZCAwLHRoaXMuX3dpdGhv
dXQ9dm9pZCAwLHRoaXNbbi5HVUlEX0tFWV09bnVsbCx0aGlzW24uTkFNRV9LRVldPW51bGwsci5k
ZWJ1Z1NlYWwodGhpcyl9cmV0dXJuIHQuYXBwbHlQYXJ0aWFsPWZ1bmN0aW9uKGUpe3ZhciB0LG4s
cgorZm9yKHQ9YXJndW1lbnRzLmxlbmd0aCxuPUFycmF5KHQ+MT90LTE6MCkscj0xO3I8dDtyKysp
bltyLTFdPWFyZ3VtZW50c1tyXQorcmV0dXJuIGh0KGUsbiwhMCl9LHQuY3JlYXRlPWZ1bmN0aW9u
KCl7T249ITAKK3ZhciBlLHQsbixyPXRoaXMKK2ZvcihlPWFyZ3VtZW50cy5sZW5ndGgsdD1BcnJh
eShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXQorcmV0dXJuIG5ldyByKHQsdm9pZCAw
KX0sdC5taXhpbnM9ZnVuY3Rpb24odCl7dmFyIG49ZS5wZWVrTWV0YSh0KSxyPVtdCityZXR1cm4g
bj8obi5mb3JFYWNoTWl4aW5zKGZ1bmN0aW9uKGUsdCl7dC5wcm9wZXJ0aWVzfHxyLnB1c2godCl9
KSxyKTpyfSx0fSgpCitDbi5fYXBwbHk9aHQsQ24uZmluaXNoUGFydGlhbD1sdAordmFyIE9uPSEx
LEFuPUNuLnByb3RvdHlwZQorQW4ucmVvcGVuPWZ1bmN0aW9uKCl7dmFyIGU9dm9pZCAwCit0aGlz
LnByb3BlcnRpZXM/KGU9bmV3IENuKHZvaWQgMCx0aGlzLnByb3BlcnRpZXMpLHRoaXMucHJvcGVy
dGllcz12b2lkIDAsdGhpcy5taXhpbnM9W2VdKTp0aGlzLm1peGluc3x8KHRoaXMubWl4aW5zPVtd
KQordmFyIHQ9dGhpcy5taXhpbnMsbj12b2lkIDAKK2ZvcihuPTA7bjxhcmd1bWVudHMubGVuZ3Ro
O24rKyllPWFyZ3VtZW50c1tuXSxlIGluc3RhbmNlb2YgQ24/dC5wdXNoKGUpOnQucHVzaChuZXcg
Q24odm9pZCAwLGUpKQorcmV0dXJuIHRoaXN9LEFuLmFwcGx5PWZ1bmN0aW9uKGUpe3JldHVybiBo
dChlLFt0aGlzXSwhMSl9LEFuLmFwcGx5UGFydGlhbD1mdW5jdGlvbihlKXtyZXR1cm4gaHQoZSxb
dGhpc10sITApfSxBbi50b1N0cmluZz1PYmplY3QudG9TdHJpbmcsQW4uZGV0ZWN0PWZ1bmN0aW9u
KHQpe2lmKCJvYmplY3QiIT10eXBlb2YgdHx8bnVsbD09PXQpcmV0dXJuITEKK2lmKHQgaW5zdGFu
Y2VvZiBDbilyZXR1cm4gZHQodCx0aGlzLHt9KQordmFyIHI9ZS5wZWVrTWV0YSh0KQorcmV0dXJu
ISFyJiYhIXIucGVla01peGlucyhuLmd1aWRGb3IodGhpcykpfSxBbi53aXRob3V0PWZ1bmN0aW9u
KCl7dmFyIGUsdCxuLHI9bmV3IENuKFt0aGlzXSkKK2ZvcihlPWFyZ3VtZW50cy5sZW5ndGgsdD1B
cnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXQorcmV0dXJuIHIuX3dpdGhvdXQ9
dCxyfSxBbi5rZXlzPWZ1bmN0aW9uKCl7dmFyIGU9e30KK3JldHVybiBtdChlLHRoaXMse30pLE9i
amVjdC5rZXlzKGUpfSxyLmRlYnVnU2VhbChBbikKK3ZhciBUbj1uZXcgSQorVG4udG9TdHJpbmc9
ZnVuY3Rpb24oKXtyZXR1cm4iKFJlcXVpcmVkIFByb3BlcnR5KSJ9LGd0LnByb3RvdHlwZT1uZXcg
SSx2dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShJLnByb3RvdHlwZSkKK3ZhciBTbj12dC5wcm90
b3R5cGUsUm49d2UucHJvdG90eXBlLGtuPXVuLnByb3RvdHlwZQorU24uX3N1cGVyJENvbnN0cnVj
dG9yPXdlLFNuLmdldD1Sbi5nZXQsU24ucmVhZE9ubHk9Um4ucmVhZE9ubHksU24udGVhcmRvd249
Um4udGVhcmRvd24KK3ZhciBObj1BcnJheS5wcm90b3R5cGUuc3BsaWNlLFBuPWZ1bmN0aW9uKGUp
e2Z1bmN0aW9uIHQodCl7dmFyIG49aS5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsZS5j
YWxsKHRoaXMpKQorcmV0dXJuIG4uZGVzYz10LG59cmV0dXJuIGkuaW5oZXJpdHModCxlKSx0LnBy
b3RvdHlwZS5zZXR1cD1mdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsdGhp
cy5kZXNjKX0sdC5wcm90b3R5cGUudGVhcmRvd249ZnVuY3Rpb24oKXt9LHR9KEkpCitlLmRlZmF1
bHQ9eHQsZS5jb21wdXRlZD1mdW5jdGlvbihlKXt2YXIgdD12b2lkIDAKK2FyZ3VtZW50cy5sZW5n
dGg+MSYmKHQ9W10uc2xpY2UuY2FsbChhcmd1bWVudHMpLGU9dC5wb3AoKSkKK3ZhciBuPW5ldyB3
ZShlKQorcmV0dXJuIHQmJm4ucHJvcGVydHkuYXBwbHkobix0KSxufSxlLmNhY2hlRm9yPUVlLGUu
Q29tcHV0ZWRQcm9wZXJ0eT13ZSxlLmFsaWFzPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdW4oZSl9
LGUubWVyZ2U9ZnVuY3Rpb24oZSx0KXtpZighdHx8Im9iamVjdCIhPXR5cGVvZiB0KXJldHVybiBl
Cit2YXIgbixyPU9iamVjdC5rZXlzKHQpLGk9dm9pZCAwCitmb3Iobj0wO248ci5sZW5ndGg7bisr
KWk9cltuXSxlW2ldPXRbaV0KK3JldHVybiBlfSxlLmRlcHJlY2F0ZVByb3BlcnR5PWZ1bmN0aW9u
KGUsdCxuLHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2NvbmZpZ3VyYWJsZTohMCxlbnVt
ZXJhYmxlOiExLHNldDpmdW5jdGlvbihlKXtmZSh0aGlzLG4sZSl9LGdldDpmdW5jdGlvbigpe3Jl
dHVybiBsZSh0aGlzLG4pfX0pfSxlLmluc3RydW1lbnQ9ZnVuY3Rpb24oZSx0LG4scil7aWYoYXJn
dW1lbnRzLmxlbmd0aDw9MyYmImZ1bmN0aW9uIj09dHlwZW9mIHQmJihyPW4sbj10LHQ9dm9pZCAw
KSwwPT09bG4ubGVuZ3RoKXJldHVybiBuLmNhbGwocikKK3ZhciBpPXR8fHt9LG89U2UoZSxmdW5j
dGlvbigpe3JldHVybiBpfSkKK3JldHVybiBvP0FlKG4sbyxpLHIpOm4uY2FsbChyKX0sZS5faW5z
dHJ1bWVudFN0YXJ0PVNlLGUuaW5zdHJ1bWVudGF0aW9uUmVzZXQ9ZnVuY3Rpb24oKXtsbi5sZW5n
dGg9MCxjbj17fX0sZS5pbnN0cnVtZW50YXRpb25TdWJzY3JpYmU9ZnVuY3Rpb24oZSx0KXt2YXIg
bixyPWUuc3BsaXQoIi4iKSxpPXZvaWQgMCxvPVtdCitmb3Iobj0wO248ci5sZW5ndGg7bisrKWk9
cltuXSwiKiI9PT1pP28ucHVzaCgiW15cXC5dKiIpOm8ucHVzaChpKQorbz1vLmpvaW4oIlxcLiIp
LG8rPSIoXFwuLiopPyIKK3ZhciBzPXtwYXR0ZXJuOmUscmVnZXg6bmV3IFJlZ0V4cCgiXiIrbysi
JCIpLG9iamVjdDp0fQorcmV0dXJuIGxuLnB1c2gocyksY249e30sc30sZS5pbnN0cnVtZW50YXRp
b25VbnN1YnNjcmliZT1mdW5jdGlvbihlKXt2YXIgdCxuPXZvaWQgMAorZm9yKHQ9MDt0PGxuLmxl
bmd0aDt0KyspbG5bdF09PT1lJiYobj10KQorbG4uc3BsaWNlKG4sMSksY249e319LGUuZ2V0T25l
cnJvcj1mdW5jdGlvbigpe3JldHVybiBobn0sZS5zZXRPbmVycm9yPVJlLGUuZGlzcGF0Y2hFcnJv
cj1rZSxlLnNldERpc3BhdGNoT3ZlcnJpZGU9ZnVuY3Rpb24oZSl7ZG49ZX0sZS5nZXREaXNwYXRj
aE92ZXJyaWRlPWZ1bmN0aW9uKCl7cmV0dXJuIGRufSxlLk1FVEFfREVTQz0kdCxlLm1ldGE9aWUs
ZS5DYWNoZT1RdCxlLl9nZXRQYXRoPWNlLGUuZ2V0PWxlLGUuZ2V0V2l0aERlZmF1bHQ9ZnVuY3Rp
b24oZSx0LG4pe3ZhciByPWxlKGUsdCkKK3JldHVybiB2b2lkIDA9PT1yP246cn0sZS5zZXQ9ZmUs
ZS50cnlTZXQ9ZGUsZS5XZWFrTWFwPWplLGUuYWNjdW11bGF0ZUxpc3RlbmVycz1wLGUuYWRkTGlz
dGVuZXI9ZixlLmhhc0xpc3RlbmVycz1mdW5jdGlvbih0LG4pe3ZhciByPWUucGVla01ldGEodCkK
K2lmKCFyKXJldHVybiExCit2YXIgaT1yLm1hdGNoaW5nTGlzdGVuZXJzKG4pCityZXR1cm4gdm9p
ZCAwIT09aSYmaS5sZW5ndGg+MH0sZS5saXN0ZW5lcnNGb3I9eQorZS5vbj1mdW5jdGlvbigpe2Zv
cihlPWFyZ3VtZW50cy5sZW5ndGgsdD1BcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50
c1tuXQordmFyIGUsdCxuLHI9dC5wb3AoKQorcmV0dXJuIHIuX19lbWJlcl9saXN0ZW5zX189dCxy
fSxlLnJlbW92ZUxpc3RlbmVyPWgsZS5zZW5kRXZlbnQ9ZyxlLnN1c3BlbmRMaXN0ZW5lcj1kLGUu
c3VzcGVuZExpc3RlbmVycz1tLGUud2F0Y2hlZEV2ZW50cz1mdW5jdGlvbihlKXtyZXR1cm4gaWUo
ZSkud2F0Y2hlZEV2ZW50cygpfSxlLmlzTm9uZT1EZSxlLmlzRW1wdHk9TGUsZS5pc0JsYW5rPUll
LGUuaXNQcmVzZW50PWZ1bmN0aW9uKGUpe3JldHVybiFJZShlKX0sZS5ydW49TWUsZS5PYnNlcnZl
clNldD1SdCxlLmJlZ2luUHJvcGVydHlDaGFuZ2VzPU4sZS5jaGFuZ2VQcm9wZXJ0aWVzPWosZS5l
bmRQcm9wZXJ0eUNoYW5nZXM9UCxlLm92ZXJyaWRlQ2hhaW5zPWssZS5wcm9wZXJ0eURpZENoYW5n
ZT1DLGUucHJvcGVydHlXaWxsQ2hhbmdlPXgsZS5QUk9QRVJUWV9ESURfQ0hBTkdFPWt0LGUuZGVm
aW5lUHJvcGVydHk9TSxlLkRlc2NyaXB0b3I9SSxlLl9oYXNDYWNoZWRDb21wdXRlZFByb3BlcnRp
ZXM9ZnVuY3Rpb24oKXtJdD0hMH0sZS53YXRjaEtleT16LGUudW53YXRjaEtleT1VLGUuQ2hhaW5O
b2RlPXp0LGUuZmluaXNoQ2hhaW5zPWZ1bmN0aW9uKGUpe3ZhciB0PWUucmVhZGFibGVDaGFpbldh
dGNoZXJzKCkKK3ZvaWQgMCE9PXQmJnQucmV2YWxpZGF0ZUFsbCgpLHZvaWQgMCE9PWUucmVhZGFi
bGVDaGFpbnMoKSYmZS53cml0YWJsZUNoYWlucyhxKX0sZS5yZW1vdmVDaGFpbldhdGNoZXI9WSxl
LndhdGNoUGF0aD1ILGUudW53YXRjaFBhdGg9VixlLmRlc3Ryb3k9ZnVuY3Rpb24oZSl7cmUoZSl9
CitlLmlzV2F0Y2hpbmc9ZnVuY3Rpb24odCxuKXtpZigib2JqZWN0IiE9dHlwZW9mIHR8fG51bGw9
PT10KXJldHVybiExCit2YXIgcj1lLnBlZWtNZXRhKHQpCityZXR1cm4ociYmci5wZWVrV2F0Y2hp
bmcobikpPjB9LGUudW53YXRjaD12ZSxlLndhdGNoPXllLGUud2F0Y2hlckNvdW50PWZ1bmN0aW9u
KHQsbil7dmFyIHI9ZS5wZWVrTWV0YSh0KQorcmV0dXJuIHImJnIucGVla1dhdGNoaW5nKG4pfHww
fSxlLmxpYnJhcmllcz1ibixlLkxpYnJhcmllcz12bixlLk1hcD1IZSxlLk1hcFdpdGhEZWZhdWx0
PVZlLGUuT3JkZXJlZFNldD1xZSxlLmdldFByb3BlcnRpZXM9ZnVuY3Rpb24oZSl7dmFyIHQ9e30s
bj1hcmd1bWVudHMscj0xCitmb3IoMj09PWFyZ3VtZW50cy5sZW5ndGgmJkFycmF5LmlzQXJyYXko
YXJndW1lbnRzWzFdKSYmKHI9MCxuPWFyZ3VtZW50c1sxXSk7cjxuLmxlbmd0aDtyKyspdFtuW3Jd
XT1sZShlLG5bcl0pCityZXR1cm4gdH0sZS5zZXRQcm9wZXJ0aWVzPWZ1bmN0aW9uKGUsdCl7cmV0
dXJuIHQmJiJvYmplY3QiPT10eXBlb2YgdD8oaihmdW5jdGlvbigpe3ZhciBuLHI9T2JqZWN0Lmtl
eXModCksaT12b2lkIDAKK2ZvcihuPTA7bjxyLmxlbmd0aDtuKyspaT1yW25dLGZlKGUsaSx0W2ld
KX0pLHQpOnR9LGUuZXhwYW5kUHJvcGVydGllcz1tZSxlLl9zdXNwZW5kT2JzZXJ2ZXI9WWUsZS5f
c3VzcGVuZE9ic2VydmVycz1mdW5jdGlvbihlLHQsbixyLGkpe3JldHVybiBtKGUsdC5tYXAoV2Up
LG4scixpKX0sZS5hZGRPYnNlcnZlcj1HZSxlLm9ic2VydmVyc0Zvcj1mdW5jdGlvbihlLHQpe3Jl
dHVybiB5KGUsV2UodCkpfSxlLnJlbW92ZU9ic2VydmVyPUtlLGUuX2FkZEJlZm9yZU9ic2VydmVy
PVFlLGUuX3JlbW92ZUJlZm9yZU9ic2VydmVyPUplLGUuTWl4aW49Q24sZS5hbGlhc01ldGhvZD1m
dW5jdGlvbihlKXtyZXR1cm4gbmV3IGd0KGUpfSxlLl9pbW1lZGlhdGVPYnNlcnZlcj1mdW5jdGlv
bigpe3ZhciBlCitmb3IoZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspYXJndW1lbnRzW2VdCity
ZXR1cm4geXQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxlLl9iZWZvcmVPYnNlcnZlcj1mdW5jdGlv
bigpe2ZvcihlPWFyZ3VtZW50cy5sZW5ndGgsdD1BcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFy
Z3VtZW50c1tuXQordmFyIGUsdCxuLGksbz10LnNsaWNlKC0xKVswXSxzPXZvaWQgMCxhPWZ1bmN0
aW9uKGUpe3MucHVzaChlKX0sdT10LnNsaWNlKDAsLTEpCitmb3IoImZ1bmN0aW9uIiE9dHlwZW9m
IG8mJihvPXRbMF0sdT10LnNsaWNlKDEpKSxzPVtdLGk9MDtpPHUubGVuZ3RoOysraSltZSh1W2ld
LGEpCitpZigiZnVuY3Rpb24iIT10eXBlb2Ygbyl0aHJvdyBuZXcgci5FbWJlckVycm9yKCJfYmVm
b3JlT2JzZXJ2ZXIgY2FsbGVkIHdpdGhvdXQgYSBmdW5jdGlvbiIpCityZXR1cm4gby5fX2VtYmVy
X29ic2VydmVzQmVmb3JlX189cyxvfSxlLm1peGluPWZ1bmN0aW9uKGUpe3ZhciB0LG4scgorZm9y
KHQ9YXJndW1lbnRzLmxlbmd0aCxuPUFycmF5KHQ+MT90LTE6MCkscj0xO3I8dDtyKyspbltyLTFd
PWFyZ3VtZW50c1tyXQorcmV0dXJuIGh0KGUsbiwhMSksZX0sZS5vYnNlcnZlcj15dCxlLnJlcXVp
cmVkPWZ1bmN0aW9uKCl7cmV0dXJuIFRufSxlLlJFUVVJUkVEPVRuLGUuaGFzVW5wcm9jZXNzZWRN
aXhpbnM9ZnVuY3Rpb24oKXtyZXR1cm4gT259LGUuY2xlYXJVbnByb2Nlc3NlZE1peGlucz1mdW5j
dGlvbigpe09uPSExfSxlLmRldGVjdEJpbmRpbmc9YXQKK2UuQmluZGluZz1fbixlLmJpbmQ9ZnVu
Y3Rpb24oZSx0LG4pe3JldHVybiBuZXcgX24odCxuKS5jb25uZWN0KGUpfSxlLmlzR2xvYmFsUGF0
aD1vZSxlLkluamVjdGVkUHJvcGVydHk9dnQsZS5zZXRIYXNWaWV3cz1mdW5jdGlvbihlKXtUdD1l
fSxlLnRhZ0ZvclByb3BlcnR5PWZ1bmN0aW9uKGUsdCxuKXtpZigib2JqZWN0IiE9dHlwZW9mIGV8
fG51bGw9PT1lKXJldHVybiBvLkNPTlNUQU5UX1RBRwordmFyIHI9bnx8aWUoZSkKK2lmKHIuaXNQ
cm94eSgpKXJldHVybiBiKGUscikKK3ZhciBpPXIud3JpdGFibGVUYWdzKCkscz1pW3RdCityZXR1
cm4gc3x8KGlbdF09digpKX0sZS50YWdGb3I9YixlLm1hcmtPYmplY3RBc0RpcnR5PV8sZS5yZXBs
YWNlPWZ1bmN0aW9uKGUsdCxuLHIpe2Zvcih2YXIgaT1bXS5jb25jYXQociksbz1bXSxzPXQsYT1u
LHU9dm9pZCAwLGw9dm9pZCAwO2kubGVuZ3RoOyl1PWE+NmU0PzZlNDphLHU8PTAmJih1PTApLGw9
aS5zcGxpY2UoMCw2ZTQpLGw9W3MsdV0uY29uY2F0KGwpLHMrPTZlNCxhLT11LG89by5jb25jYXQo
Tm4uYXBwbHkoZSxsKSkKK3JldHVybiBvfSxlLmRpZFJlbmRlcj12b2lkIDAsZS5hc3NlcnROb3RS
ZW5kZXJlZD12b2lkIDAsZS5pc1Byb3h5PWZ1bmN0aW9uKHQpe3ZhciBuCityZXR1cm4hKCJvYmpl
Y3QiIT10eXBlb2YgdHx8IXQpJiYoKG49ZS5wZWVrTWV0YSh0KSkmJm4uaXNQcm94eSgpKX0sZS5k
ZXNjcmlwdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUG4oZSl9LE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pLGUoImVtYmVyLXJvdXRpbmcvZXh0L2Nv
bnRyb2xsZXIiLFsiZXhwb3J0cyIsImVtYmVyLW1ldGFsIiwiZW1iZXItcnVudGltZSIsImVtYmVy
LXJvdXRpbmcvdXRpbHMiXSxmdW5jdGlvbihlLHQsbixyKXsidXNlIHN0cmljdCIKK24uQ29udHJv
bGxlck1peGluLnJlb3Blbih7Y29uY2F0ZW5hdGVkUHJvcGVydGllczpbInF1ZXJ5UGFyYW1zIl0s
cXVlcnlQYXJhbXM6bnVsbCxfcXBEZWxlZ2F0ZTpudWxsLF9xcENoYW5nZWQ6ZnVuY3Rpb24oZSxu
KXt2YXIgcj1uLnN1YnN0cigwLG4ubGVuZ3RoLTMpOygwLGUuX3FwRGVsZWdhdGUpKHIsKDAsdC5n
ZXQpKGUscikpfSx0cmFuc2l0aW9uVG9Sb3V0ZTpmdW5jdGlvbigpe3ZhciBlLG4saSxvPSgwLHQu
Z2V0KSh0aGlzLCJ0YXJnZXQiKSxzPW8udHJhbnNpdGlvblRvUm91dGV8fG8udHJhbnNpdGlvblRv
Citmb3IoZT1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkoZSksaT0wO2k8ZTtpKyspbltpXT1hcmd1
bWVudHNbaV0KK3JldHVybiBzLmFwcGx5KG8sKDAsci5wcmVmaXhSb3V0ZU5hbWVBcmcpKHRoaXMs
bikpfSxyZXBsYWNlUm91dGU6ZnVuY3Rpb24oKXt2YXIgZSxuLGksbz0oMCx0LmdldCkodGhpcywi
dGFyZ2V0Iikscz1vLnJlcGxhY2VSb3V0ZXx8by5yZXBsYWNlV2l0aAorZm9yKGU9YXJndW1lbnRz
Lmxlbmd0aCxuPUFycmF5KGUpLGk9MDtpPGU7aSsrKW5baV09YXJndW1lbnRzW2ldCityZXR1cm4g
cy5hcHBseShvLCgwLHIucHJlZml4Um91dGVOYW1lQXJnKShvLG4pKX19KSxlLmRlZmF1bHQ9bi5D
b250cm9sbGVyTWl4aW59KSxlKCJlbWJlci1yb3V0aW5nL2V4dC9ydW5fbG9vcCIsWyJlbWJlci1t
ZXRhbCJdLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IgorZS5ydW4uX2FkZFF1ZXVlKCJyb3V0ZXJU
cmFuc2l0aW9ucyIsImFjdGlvbnMiKX0pCitlKCJlbWJlci1yb3V0aW5nL2luZGV4IixbImV4cG9y
dHMiLCJlbWJlci1yb3V0aW5nL2xvY2F0aW9uL2FwaSIsImVtYmVyLXJvdXRpbmcvbG9jYXRpb24v
bm9uZV9sb2NhdGlvbiIsImVtYmVyLXJvdXRpbmcvbG9jYXRpb24vaGFzaF9sb2NhdGlvbiIsImVt
YmVyLXJvdXRpbmcvbG9jYXRpb24vaGlzdG9yeV9sb2NhdGlvbiIsImVtYmVyLXJvdXRpbmcvbG9j
YXRpb24vYXV0b19sb2NhdGlvbiIsImVtYmVyLXJvdXRpbmcvc3lzdGVtL2dlbmVyYXRlX2NvbnRy
b2xsZXIiLCJlbWJlci1yb3V0aW5nL3N5c3RlbS9jb250cm9sbGVyX2ZvciIsImVtYmVyLXJvdXRp
bmcvc3lzdGVtL2RzbCIsImVtYmVyLXJvdXRpbmcvc3lzdGVtL3JvdXRlciIsImVtYmVyLXJvdXRp
bmcvc3lzdGVtL3JvdXRlIiwiZW1iZXItcm91dGluZy9zeXN0ZW0vcXVlcnlfcGFyYW1zIiwiZW1i
ZXItcm91dGluZy9zZXJ2aWNlcy9yb3V0aW5nIiwiZW1iZXItcm91dGluZy9zZXJ2aWNlcy9yb3V0
ZXIiLCJlbWJlci1yb3V0aW5nL3N5c3RlbS9jYWNoZSIsImVtYmVyLXJvdXRpbmcvZXh0L3J1bl9s
b29wIiwiZW1iZXItcm91dGluZy9leHQvY29udHJvbGxlciJdLGZ1bmN0aW9uKGUsdCxuLHIsaSxv
LHMsYSx1LGwsYyxwLGYsaCxkKXsidXNlIHN0cmljdCIKK2UuQnVja2V0Q2FjaGU9ZS5Sb3V0ZXJT
ZXJ2aWNlPWUuUm91dGluZ1NlcnZpY2U9ZS5RdWVyeVBhcmFtcz1lLlJvdXRlPWUuUm91dGVyPWUu
Um91dGVyRFNMPWUuY29udHJvbGxlckZvcj1lLmdlbmVyYXRlQ29udHJvbGxlckZhY3Rvcnk9ZS5n
ZW5lcmF0ZUNvbnRyb2xsZXI9ZS5BdXRvTG9jYXRpb249ZS5IaXN0b3J5TG9jYXRpb249ZS5IYXNo
TG9jYXRpb249ZS5Ob25lTG9jYXRpb249ZS5Mb2NhdGlvbj12b2lkIDAsT2JqZWN0LmRlZmluZVBy
b3BlcnR5KGUsIkxvY2F0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4g
dC5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJOb25lTG9jYXRpb24iLHtlbnVt
ZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLmRlZmF1bHR9fSksT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KGUsIkhhc2hMb2NhdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7
cmV0dXJuIHIuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiSGlzdG9yeUxvY2F0
aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5kZWZhdWx0fX0pLE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShlLCJBdXRvTG9jYXRpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpm
dW5jdGlvbigpe3JldHVybiBvLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImdl
bmVyYXRlQ29udHJvbGxlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMu
ZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiZ2VuZXJhdGVDb250cm9sbGVyRmFj
dG9yeSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuZ2VuZXJhdGVDb250
cm9sbGVyRmFjdG9yeX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiY29udHJvbGxlckZvciIs
e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuZGVmYXVsdH19KSxPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoZSwiUm91dGVyRFNMIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24o
KXtyZXR1cm4gdS5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJSb3V0ZXIiLHtl
bnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBsLmRlZmF1bHR9fSksT2JqZWN0LmRl
ZmluZVByb3BlcnR5KGUsIlJvdXRlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1
cm4gYy5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJRdWVyeVBhcmFtcyIse2Vu
dW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAuZGVmYXVsdH19KSxPYmplY3QuZGVm
aW5lUHJvcGVydHkoZSwiUm91dGluZ1NlcnZpY2UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlv
bigpe3JldHVybiBmLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIlJvdXRlclNl
cnZpY2UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBoLmRlZmF1bHR9fSks
T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIkJ1Y2tldENhY2hlIix7ZW51bWVyYWJsZTohMCxnZXQ6
ZnVuY3Rpb24oKXtyZXR1cm4gZC5kZWZhdWx0fX0pfSksZSgiZW1iZXItcm91dGluZy9sb2NhdGlv
bi9hcGkiLFsiZXhwb3J0cyIsImVtYmVyLWRlYnVnIiwiZW1iZXItZW52aXJvbm1lbnQiLCJlbWJl
ci1yb3V0aW5nL2xvY2F0aW9uL3V0aWwiXSxmdW5jdGlvbihlLHQsbixyKXsidXNlIHN0cmljdCIK
K2UuZGVmYXVsdD17Y3JlYXRlOmZ1bmN0aW9uKGUpe3ZhciB0PWUmJmUuaW1wbGVtZW50YXRpb24s
bj10aGlzLmltcGxlbWVudGF0aW9uc1t0XQorcmV0dXJuIG4uY3JlYXRlLmFwcGx5KG4sYXJndW1l
bnRzKX0saW1wbGVtZW50YXRpb25zOnt9LF9sb2NhdGlvbjpuLmVudmlyb25tZW50LmxvY2F0aW9u
LF9nZXRIYXNoOmZ1bmN0aW9uKCl7cmV0dXJuKDAsci5nZXRIYXNoKSh0aGlzLmxvY2F0aW9uKX19
fSksZSgiZW1iZXItcm91dGluZy9sb2NhdGlvbi9hdXRvX2xvY2F0aW9uIixbImV4cG9ydHMiLCJl
bWJlci11dGlscyIsImVtYmVyLW1ldGFsIiwiZW1iZXItZGVidWciLCJlbWJlci1ydW50aW1lIiwi
ZW1iZXItZW52aXJvbm1lbnQiLCJlbWJlci1yb3V0aW5nL2xvY2F0aW9uL3V0aWwiXSxmdW5jdGlv
bihlLHQsbixyLGksbyxzKXsidXNlIHN0cmljdCIKK2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGZ1bmN0
aW9uKCl7dmFyIHIsaSxvLHM9KDAsbi5nZXQpKHRoaXMsImNvbmNyZXRlSW1wbGVtZW50YXRpb24i
KQorZm9yKHI9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHIpLG89MDtvPHI7bysrKWlbb109YXJn
dW1lbnRzW29dCityZXR1cm4oMCx0LnRyeUludm9rZSkocyxlLGkpfX1mdW5jdGlvbiB1KGUpe3Zh
ciB0LG4scj1lLmxvY2F0aW9uLGk9ZS51c2VyQWdlbnQsbz1lLmhpc3RvcnksYT1lLmRvY3VtZW50
TW9kZSx1PWUuZ2xvYmFsLHA9ZS5yb290VVJMLGY9Im5vbmUiLGg9ITEsZD0oMCxzLmdldEZ1bGxQ
YXRoKShyKQoraWYoKDAscy5zdXBwb3J0c0hpc3RvcnkpKGksbykpe2lmKHQ9bChwLHIpLGQ9PT10
KXJldHVybiJoaXN0b3J5IgorIi8jIj09PWQuc3Vic3RyKDAsMik/KG8ucmVwbGFjZVN0YXRlKHtw
YXRoOnR9LG51bGwsdCksZj0iaGlzdG9yeSIpOihoPSEwLCgwLHMucmVwbGFjZVBhdGgpKHIsdCkp
fWVsc2UoMCxzLnN1cHBvcnRzSGFzaENoYW5nZSkoYSx1KSYmKG49YyhwLHIpLGQ9PT1ufHwiLyI9
PT1kJiYiLyMvIj09PW4/Zj0iaGFzaCI6KGg9ITAsKDAscy5yZXBsYWNlUGF0aCkocixuKSkpCity
ZXR1cm4haCYmZn1mdW5jdGlvbiBsKGUsdCl7dmFyIG49KDAscy5nZXRQYXRoKSh0KSxyPSgwLHMu
Z2V0SGFzaCkodCksaT0oMCxzLmdldFF1ZXJ5KSh0KSxvPShuLmluZGV4T2YoZSksdm9pZCAwKSxh
PXZvaWQgMAorcmV0dXJuIiMvIj09PXIuc3Vic3RyKDAsMik/KGE9ci5zdWJzdHIoMSkuc3BsaXQo
IiMiKSxvPWEuc2hpZnQoKSwiLyI9PT1uLmNoYXJBdChuLmxlbmd0aC0xKSYmKG89by5zdWJzdHIo
MSkpLG4rPW8raSxhLmxlbmd0aCYmKG4rPSIjIithLmpvaW4oIiMiKSkpOm4rPWkrcixufWZ1bmN0
aW9uIGMoZSx0KXt2YXIgbj1lLHI9bChlLHQpLGk9ci5zdWJzdHIoZS5sZW5ndGgpCityZXR1cm4i
IiE9PWkmJigiLyIhPT1pWzBdJiYoaT0iLyIraSksbis9IiMiK2kpLG59ZS5nZXRIaXN0b3J5UGF0
aD1sLGUuZ2V0SGFzaFBhdGg9YyxlLmRlZmF1bHQ9aS5PYmplY3QuZXh0ZW5kKHtsb2NhdGlvbjpv
LmVudmlyb25tZW50LmxvY2F0aW9uLGhpc3Rvcnk6by5lbnZpcm9ubWVudC5oaXN0b3J5LGdsb2Jh
bDpvLmVudmlyb25tZW50LndpbmRvdyx1c2VyQWdlbnQ6by5lbnZpcm9ubWVudC51c2VyQWdlbnQs
Y2FuY2VsUm91dGVyU2V0dXA6ITEscm9vdFVSTDoiLyIsZGV0ZWN0OmZ1bmN0aW9uKCl7dmFyIGU9
dGhpcy5yb290VVJMLHI9dSh7bG9jYXRpb246dGhpcy5sb2NhdGlvbixoaXN0b3J5OnRoaXMuaGlz
dG9yeSx1c2VyQWdlbnQ6dGhpcy51c2VyQWdlbnQscm9vdFVSTDplLGRvY3VtZW50TW9kZTp0aGlz
LmRvY3VtZW50TW9kZSxnbG9iYWw6dGhpcy5nbG9iYWx9KQorITE9PT1yJiYoKDAsbi5zZXQpKHRo
aXMsImNhbmNlbFJvdXRlclNldHVwIiwhMCkscj0ibm9uZSIpCit2YXIgaT0oMCx0LmdldE93bmVy
KSh0aGlzKS5sb29rdXAoImxvY2F0aW9uOiIrcik7KDAsbi5zZXQpKGksInJvb3RVUkwiLGUpLCgw
LG4uc2V0KSh0aGlzLCJjb25jcmV0ZUltcGxlbWVudGF0aW9uIixpKX0saW5pdFN0YXRlOmEoImlu
aXRTdGF0ZSIpLGdldFVSTDphKCJnZXRVUkwiKSxzZXRVUkw6YSgic2V0VVJMIikscmVwbGFjZVVS
TDphKCJyZXBsYWNlVVJMIiksb25VcGRhdGVVUkw6YSgib25VcGRhdGVVUkwiKSxmb3JtYXRVUkw6
YSgiZm9ybWF0VVJMIiksd2lsbERlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgZT0oMCxuLmdldCkodGhp
cywiY29uY3JldGVJbXBsZW1lbnRhdGlvbiIpCitlJiZlLmRlc3Ryb3koKX19KX0pLGUoImVtYmVy
LXJvdXRpbmcvbG9jYXRpb24vaGFzaF9sb2NhdGlvbiIsWyJleHBvcnRzIiwiZW1iZXItbWV0YWwi
LCJlbWJlci1ydW50aW1lIiwiZW1iZXItcm91dGluZy9sb2NhdGlvbi9hcGkiXSxmdW5jdGlvbihl
LHQsbixyKXsidXNlIHN0cmljdCIKK2UuZGVmYXVsdD1uLk9iamVjdC5leHRlbmQoe2ltcGxlbWVu
dGF0aW9uOiJoYXNoIixpbml0OmZ1bmN0aW9uKCl7KDAsdC5zZXQpKHRoaXMsImxvY2F0aW9uIiwo
MCx0LmdldCkodGhpcywiX2xvY2F0aW9uIil8fHdpbmRvdy5sb2NhdGlvbiksdGhpcy5faGFzaGNo
YW5nZUhhbmRsZXI9dm9pZCAwfSxnZXRIYXNoOnIuZGVmYXVsdC5fZ2V0SGFzaCxnZXRVUkw6ZnVu
Y3Rpb24oKXt2YXIgZT10aGlzLmdldEhhc2goKS5zdWJzdHIoMSksdD1lCityZXR1cm4iLyIhPT10
WzBdJiYodD0iLyIsZSYmKHQrPSIjIitlKSksdH0sc2V0VVJMOmZ1bmN0aW9uKGUpeygwLHQuZ2V0
KSh0aGlzLCJsb2NhdGlvbiIpLmhhc2g9ZSwoMCx0LnNldCkodGhpcywibGFzdFNldFVSTCIsZSl9
LHJlcGxhY2VVUkw6ZnVuY3Rpb24oZSl7KDAsdC5nZXQpKHRoaXMsImxvY2F0aW9uIikucmVwbGFj
ZSgiIyIrZSksKDAsdC5zZXQpKHRoaXMsImxhc3RTZXRVUkwiLGUpfSxvblVwZGF0ZVVSTDpmdW5j
dGlvbihlKXt2YXIgbj10aGlzCit0aGlzLl9yZW1vdmVFdmVudExpc3RlbmVyKCksdGhpcy5faGFz
aGNoYW5nZUhhbmRsZXI9ZnVuY3Rpb24oKXsoMCx0LnJ1bikoZnVuY3Rpb24oKXt2YXIgcj1uLmdl
dFVSTCgpOygwLHQuZ2V0KShuLCJsYXN0U2V0VVJMIikhPT1yJiYoKDAsdC5zZXQpKG4sImxhc3RT
ZXRVUkwiLG51bGwpLGUocikpfSl9LHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdl
Iix0aGlzLl9oYXNoY2hhbmdlSGFuZGxlcil9LGZvcm1hdFVSTDpmdW5jdGlvbihlKXtyZXR1cm4i
IyIrZX0sd2lsbERlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl9yZW1vdmVFdmVudExpc3RlbmVyKCl9
LF9yZW1vdmVFdmVudExpc3RlbmVyOmZ1bmN0aW9uKCl7dGhpcy5faGFzaGNoYW5nZUhhbmRsZXIm
JndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIix0aGlzLl9oYXNoY2hhbmdl
SGFuZGxlcil9fSl9KSxlKCJlbWJlci1yb3V0aW5nL2xvY2F0aW9uL2hpc3RvcnlfbG9jYXRpb24i
LFsiZXhwb3J0cyIsImVtYmVyLW1ldGFsIiwiZW1iZXItcnVudGltZSIsImVtYmVyLXJvdXRpbmcv
bG9jYXRpb24vYXBpIl0sZnVuY3Rpb24oZSx0LG4scil7InVzZSBzdHJpY3QiCitmdW5jdGlvbiBp
KCl7cmV0dXJuInh4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCIucmVwbGFjZSgv
W3h5XS9nLGZ1bmN0aW9uKGUpe3ZhciB0LG4KK3JldHVybiB0PTE2Kk1hdGgucmFuZG9tKCl8MCxu
PSJ4Ij09PWU/dDozJnR8OCxuLnRvU3RyaW5nKDE2KX0pfXZhciBvPSExCitlLmRlZmF1bHQ9bi5P
YmplY3QuZXh0ZW5kKHtpbXBsZW1lbnRhdGlvbjoiaGlzdG9yeSIsaW5pdDpmdW5jdGlvbigpe3Ro
aXMuX3N1cGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKQordmFyIGU9ZG9jdW1lbnQucXVlcnlTZWxl
Y3RvcigiYmFzZSIpLG49IiIKK2UmJihuPWUuZ2V0QXR0cmlidXRlKCJocmVmIikpLCgwLHQuc2V0
KSh0aGlzLCJiYXNlVVJMIixuKSwoMCx0LnNldCkodGhpcywibG9jYXRpb24iLCgwLHQuZ2V0KSh0
aGlzLCJsb2NhdGlvbiIpfHx3aW5kb3cubG9jYXRpb24pLHRoaXMuX3BvcHN0YXRlSGFuZGxlcj12
b2lkIDB9LGluaXRTdGF0ZTpmdW5jdGlvbigpe3ZhciBlPSgwLHQuZ2V0KSh0aGlzLCJoaXN0b3J5
Iil8fHdpbmRvdy5oaXN0b3J5OygwLHQuc2V0KSh0aGlzLCJoaXN0b3J5IixlKSxlJiYic3RhdGUi
aW4gZSYmKHRoaXMuc3VwcG9ydHNIaXN0b3J5PSEwKSx0aGlzLnJlcGxhY2VTdGF0ZSh0aGlzLmZv
cm1hdFVSTCh0aGlzLmdldFVSTCgpKSl9LHJvb3RVUkw6Ii8iLGdldFVSTDpmdW5jdGlvbigpe3Zh
ciBlPSgwLHQuZ2V0KSh0aGlzLCJsb2NhdGlvbiIpLG49ZS5wYXRobmFtZSxyPSgwLHQuZ2V0KSh0
aGlzLCJyb290VVJMIiksaT0oMCx0LmdldCkodGhpcywiYmFzZVVSTCIpCityPXIucmVwbGFjZSgv
XC8kLywiIiksaT1pLnJlcGxhY2UoL1wvJC8sIiIpCit2YXIgbz1uLnJlcGxhY2UobmV3IFJlZ0V4
cCgiXiIraSsiKD89L3wkKSIpLCIiKS5yZXBsYWNlKG5ldyBSZWdFeHAoIl4iK3IrIig/PS98JCki
KSwiIikucmVwbGFjZSgvXC9cLyQvZywiLyIpCityZXR1cm4gbys9KGUuc2VhcmNofHwiIikrdGhp
cy5nZXRIYXNoKCl9LHNldFVSTDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldFN0YXRlKCkKK2U9
dGhpcy5mb3JtYXRVUkwoZSksdCYmdC5wYXRoPT09ZXx8dGhpcy5wdXNoU3RhdGUoZSl9LHJlcGxh
Y2VVUkw6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRTdGF0ZSgpCitlPXRoaXMuZm9ybWF0VVJM
KGUpLHQmJnQucGF0aD09PWV8fHRoaXMucmVwbGFjZVN0YXRlKGUpfSxnZXRTdGF0ZTpmdW5jdGlv
bigpe3JldHVybiB0aGlzLnN1cHBvcnRzSGlzdG9yeT8oMCx0LmdldCkodGhpcywiaGlzdG9yeSIp
LnN0YXRlOnRoaXMuX2hpc3RvcnlTdGF0ZX0scHVzaFN0YXRlOmZ1bmN0aW9uKGUpe3ZhciBuPXtw
YXRoOmUsdXVpZDppKCl9OygwLHQuZ2V0KSh0aGlzLCJoaXN0b3J5IikucHVzaFN0YXRlKG4sbnVs
bCxlKSx0aGlzLl9oaXN0b3J5U3RhdGU9bix0aGlzLl9wcmV2aW91c1VSTD10aGlzLmdldFVSTCgp
fSxyZXBsYWNlU3RhdGU6ZnVuY3Rpb24oZSl7dmFyIG49e3BhdGg6ZSx1dWlkOmkoKX07KDAsdC5n
ZXQpKHRoaXMsImhpc3RvcnkiKS5yZXBsYWNlU3RhdGUobixudWxsLGUpLHRoaXMuX2hpc3RvcnlT
dGF0ZT1uLHRoaXMuX3ByZXZpb3VzVVJMPXRoaXMuZ2V0VVJMKCl9LG9uVXBkYXRlVVJMOmZ1bmN0
aW9uKGUpe3ZhciB0PXRoaXMKK3RoaXMuX3JlbW92ZUV2ZW50TGlzdGVuZXIoKSx0aGlzLl9wb3Bz
dGF0ZUhhbmRsZXI9ZnVuY3Rpb24oKXsob3x8KG89ITAsdC5nZXRVUkwoKSE9PXQuX3ByZXZpb3Vz
VVJMKSkmJmUodC5nZXRVUkwoKSl9LHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIs
dGhpcy5fcG9wc3RhdGVIYW5kbGVyKX0sZm9ybWF0VVJMOmZ1bmN0aW9uKGUpe3ZhciBuPSgwLHQu
Z2V0KSh0aGlzLCJyb290VVJMIikscj0oMCx0LmdldCkodGhpcywiYmFzZVVSTCIpCityZXR1cm4i
IiE9PWU/KG49bi5yZXBsYWNlKC9cLyQvLCIiKSxyPXIucmVwbGFjZSgvXC8kLywiIikpOiIvIj09
PXJbMF0mJiIvIj09PW5bMF0mJihyPXIucmVwbGFjZSgvXC8kLywiIikpLHIrbitlfSx3aWxsRGVz
dHJveTpmdW5jdGlvbigpe3RoaXMuX3JlbW92ZUV2ZW50TGlzdGVuZXIoKX0sZ2V0SGFzaDpyLmRl
ZmF1bHQuX2dldEhhc2gsX3JlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oKXt0aGlzLl9wb3Bz
dGF0ZUhhbmRsZXImJndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIsdGhpcy5f
cG9wc3RhdGVIYW5kbGVyKX19KX0pLGUoImVtYmVyLXJvdXRpbmcvbG9jYXRpb24vbm9uZV9sb2Nh
dGlvbiIsWyJleHBvcnRzIiwiZW1iZXItbWV0YWwiLCJlbWJlci1kZWJ1ZyIsImVtYmVyLXJ1bnRp
bWUiXSxmdW5jdGlvbihlLHQsbixyKXsidXNlIHN0cmljdCIKK2UuZGVmYXVsdD1yLk9iamVjdC5l
eHRlbmQoe2ltcGxlbWVudGF0aW9uOiJub25lIixwYXRoOiIiLGRldGVjdDpmdW5jdGlvbigpe3Ro
aXMucm9vdFVSTH0scm9vdFVSTDoiLyIsZ2V0VVJMOmZ1bmN0aW9uKCl7dmFyIGU9KDAsdC5nZXQp
KHRoaXMsInBhdGgiKSxuPSgwLHQuZ2V0KSh0aGlzLCJyb290VVJMIikKK3JldHVybiBuPW4ucmVw
bGFjZSgvXC8kLywiIiksZS5yZXBsYWNlKG5ldyBSZWdFeHAoIl4iK24rIig/PS98JCkiKSwiIil9
LHNldFVSTDpmdW5jdGlvbihlKXsoMCx0LnNldCkodGhpcywicGF0aCIsZSl9LG9uVXBkYXRlVVJM
OmZ1bmN0aW9uKGUpe3RoaXMudXBkYXRlQ2FsbGJhY2s9ZX0saGFuZGxlVVJMOmZ1bmN0aW9uKGUp
eygwLHQuc2V0KSh0aGlzLCJwYXRoIixlKSx0aGlzLnVwZGF0ZUNhbGxiYWNrKGUpfSxmb3JtYXRV
Ukw6ZnVuY3Rpb24oZSl7dmFyIG49KDAsdC5nZXQpKHRoaXMsInJvb3RVUkwiKQorcmV0dXJuIiIh
PT1lJiYobj1uLnJlcGxhY2UoL1wvJC8sIiIpKSxuK2V9fSl9KSxlKCJlbWJlci1yb3V0aW5nL2xv
Y2F0aW9uL3V0aWwiLFsiZXhwb3J0cyJdLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IgorZnVuY3Rp
b24gdChlKXt2YXIgdD1lLnBhdGhuYW1lCityZXR1cm4iLyIhPT10WzBdJiYodD0iLyIrdCksdH1m
dW5jdGlvbiBuKGUpe3JldHVybiBlLnNlYXJjaH1mdW5jdGlvbiByKGUpe3ZhciB0PWUuaHJlZixu
PXQuaW5kZXhPZigiIyIpCityZXR1cm4tMT09PW4/IiI6dC5zdWJzdHIobil9ZnVuY3Rpb24gaShl
KXt2YXIgdD1lLm9yaWdpbgorcmV0dXJuIHR8fCh0PWUucHJvdG9jb2wrIi8vIitlLmhvc3RuYW1l
LGUucG9ydCYmKHQrPSI6IitlLnBvcnQpKSx0fWUuZ2V0UGF0aD10LGUuZ2V0UXVlcnk9bixlLmdl
dEhhc2g9cixlLmdldEZ1bGxQYXRoPWZ1bmN0aW9uKGUpe3JldHVybiB0KGUpK24oZSkrcihlKX0s
ZS5nZXRPcmlnaW49aSxlLnN1cHBvcnRzSGFzaENoYW5nZT1mdW5jdGlvbihlLHQpe3JldHVybiJv
bmhhc2hjaGFuZ2UiaW4gdCYmKHZvaWQgMD09PWV8fGU+Nyl9LGUuc3VwcG9ydHNIaXN0b3J5PWZ1
bmN0aW9uKGUsdCl7cmV0dXJuKC0xPT09ZS5pbmRleE9mKCJBbmRyb2lkIDIuIikmJi0xPT09ZS5p
bmRleE9mKCJBbmRyb2lkIDQuMCIpfHwtMT09PWUuaW5kZXhPZigiTW9iaWxlIFNhZmFyaSIpfHwt
MSE9PWUuaW5kZXhPZigiQ2hyb21lIil8fC0xIT09ZS5pbmRleE9mKCJXaW5kb3dzIFBob25lIikp
JiYhISh0JiYicHVzaFN0YXRlImluIHQpfSxlLnJlcGxhY2VQYXRoPWZ1bmN0aW9uKGUsdCl7ZS5y
ZXBsYWNlKGkoZSkrdCl9fSksZSgiZW1iZXItcm91dGluZy9zZXJ2aWNlcy9yb3V0ZXIiLFsiZXhw
b3J0cyIsImVtYmVyLXJ1bnRpbWUiXSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IgordmFyIG49
dC5TZXJ2aWNlLmV4dGVuZCh7Y3VycmVudFJvdXRlTmFtZTooMCx0LnJlYWRPbmx5KSgicm91dGVy
LmN1cnJlbnRSb3V0ZU5hbWUiKSxjdXJyZW50VVJMOigwLHQucmVhZE9ubHkpKCJyb3V0ZXIuY3Vy
cmVudFVSTCIpLGxvY2F0aW9uOigwLHQucmVhZE9ubHkpKCJyb3V0ZXIubG9jYXRpb24iKSxyb290
VVJMOigwLHQucmVhZE9ubHkpKCJyb3V0ZXIucm9vdFVSTCIpLHJvdXRlcjpudWxsLHRyYW5zaXRp
b25UbzpmdW5jdGlvbigpe3ZhciBlCityZXR1cm4oZT10aGlzLnJvdXRlcikudHJhbnNpdGlvblRv
LmFwcGx5KGUsYXJndW1lbnRzKX0scmVwbGFjZVdpdGg6ZnVuY3Rpb24oKXt2YXIgZQorcmV0dXJu
KGU9dGhpcy5yb3V0ZXIpLnJlcGxhY2VXaXRoLmFwcGx5KGUsYXJndW1lbnRzKX0sdXJsRm9yOmZ1
bmN0aW9uKCl7dmFyIGUKK3JldHVybihlPXRoaXMucm91dGVyKS5nZW5lcmF0ZS5hcHBseShlLGFy
Z3VtZW50cyl9fSkKK2UuZGVmYXVsdD1ufSksZSgiZW1iZXItcm91dGluZy9zZXJ2aWNlcy9yb3V0
aW5nIixbImV4cG9ydHMiLCJlbWJlci11dGlscyIsImVtYmVyLXJ1bnRpbWUiLCJlbWJlci1tZXRh
bCIsImVtYmVyLXJvdXRpbmcvdXRpbHMiXSxmdW5jdGlvbihlLHQsbixyLGkpeyJ1c2Ugc3RyaWN0
IgorZnVuY3Rpb24gbyhlLHQpe3ZhciBuLHI9MAorZm9yKG49MDtuPHQubGVuZ3RoJiYocis9dFtu
XS5uYW1lcy5sZW5ndGgsdFtuXS5oYW5kbGVyIT09ZSk7bisrKTtyZXR1cm4gcn1lLmRlZmF1bHQ9
bi5TZXJ2aWNlLmV4dGVuZCh7cm91dGVyOm51bGwsdGFyZ2V0U3RhdGU6KDAsbi5yZWFkT25seSko
InJvdXRlci50YXJnZXRTdGF0ZSIpLGN1cnJlbnRTdGF0ZTooMCxuLnJlYWRPbmx5KSgicm91dGVy
LmN1cnJlbnRTdGF0ZSIpLGN1cnJlbnRSb3V0ZU5hbWU6KDAsbi5yZWFkT25seSkoInJvdXRlci5j
dXJyZW50Um91dGVOYW1lIiksY3VycmVudFBhdGg6KDAsbi5yZWFkT25seSkoInJvdXRlci5jdXJy
ZW50UGF0aCIpLGF2YWlsYWJsZVJvdXRlczpmdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cygo
MCxyLmdldCkodGhpcywicm91dGVyIikucm91dGVyLnJlY29nbml6ZXIubmFtZXMpfSxoYXNSb3V0
ZTpmdW5jdGlvbihlKXtyZXR1cm4oMCxyLmdldCkodGhpcywicm91dGVyIikuaGFzUm91dGUoZSl9
LHRyYW5zaXRpb25UbzpmdW5jdGlvbihlLHQsbixpKXt2YXIgbz0oMCxyLmdldCkodGhpcywicm91
dGVyIikscz1vLl9kb1RyYW5zaXRpb24oZSx0LG4pCityZXR1cm4gaSYmcy5tZXRob2QoInJlcGxh
Y2UiKSxzfSxub3JtYWxpemVRdWVyeVBhcmFtczpmdW5jdGlvbihlLHQsbil7KDAsci5nZXQpKHRo
aXMsInJvdXRlciIpLl9wcmVwYXJlUXVlcnlQYXJhbXMoZSx0LG4pfSxnZW5lcmF0ZVVSTDpmdW5j
dGlvbihlLG4sbyl7dmFyIHM9KDAsci5nZXQpKHRoaXMsInJvdXRlciIpCitpZihzLl9yb3V0ZXJN
aWNyb2xpYil7dmFyIGE9e307KDAsdC5hc3NpZ24pKGEsbyksdGhpcy5ub3JtYWxpemVRdWVyeVBh
cmFtcyhlLG4sYSkKK3ZhciB1PSgwLGkucm91dGVBcmdzKShlLG4sYSkKK3JldHVybiBzLmdlbmVy
YXRlLmFwcGx5KHMsdSl9fSxpc0FjdGl2ZUZvclJvdXRlOmZ1bmN0aW9uKGUsdCxuLGkscyl7dmFy
IGE9KDAsci5nZXQpKHRoaXMsInJvdXRlciIpLHU9YS5fcm91dGVyTWljcm9saWIucmVjb2duaXpl
ci5oYW5kbGVyc0ZvcihuKSxsPXVbdS5sZW5ndGgtMV0uaGFuZGxlcixjPW8obix1KQorcmV0dXJu
IGUubGVuZ3RoPmMmJihuPWwpLGkuaXNBY3RpdmVJbnRlbnQobixlLHQsIXMpfX0pfSksZSgiZW1i
ZXItcm91dGluZy9zeXN0ZW0vY2FjaGUiLFsiZXhwb3J0cyIsImVtYmVyLXJ1bnRpbWUiXSxmdW5j
dGlvbihlLHQpeyJ1c2Ugc3RyaWN0IgorZS5kZWZhdWx0PXQuT2JqZWN0LmV4dGVuZCh7aW5pdDpm
dW5jdGlvbigpe3RoaXMuY2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKX0saGFzOmZ1bmN0aW9uKGUp
e3JldHVybiEhdGhpcy5jYWNoZVtlXX0sc3Rhc2g6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMu
Y2FjaGVbZV0KK3J8fChyPXRoaXMuY2FjaGVbZV09T2JqZWN0LmNyZWF0ZShudWxsKSksclt0XT1u
fSxsb29rdXA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuY2FjaGUKK2lmKCF0aGlzLmhhcyhl
KSlyZXR1cm4gbgordmFyIGk9cltlXQorcmV0dXJuIHQgaW4gaSYmdm9pZCAwIT09aVt0XT9pW3Rd
Om59fSl9KSxlKCJlbWJlci1yb3V0aW5nL3N5c3RlbS9jb250cm9sbGVyX2ZvciIsWyJleHBvcnRz
Il0sZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiCitlLmRlZmF1bHQ9ZnVuY3Rpb24oZSx0LG4pe3Jl
dHVybiBlLmxvb2t1cCgiY29udHJvbGxlcjoiK3Qsbil9fSksZSgiZW1iZXItcm91dGluZy9zeXN0
ZW0vZHNsIixbImV4cG9ydHMiLCJlbWJlci11dGlscyIsImVtYmVyLWRlYnVnIl0sZnVuY3Rpb24o
ZSx0LG4peyJ1c2Ugc3RyaWN0IgorZnVuY3Rpb24gcihlKXtyZXR1cm4gZS5wYXJlbnQmJiJhcHBs
aWNhdGlvbiIhPT1lLnBhcmVudH1mdW5jdGlvbiBpKGUsdCxuKXtyZXR1cm4gcihlKSYmITAhPT1u
P2UucGFyZW50KyIuIit0OnR9ZnVuY3Rpb24gbyhlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+
MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fSxyPWFyZ3VtZW50c1szXSxv
PWkoZSx0LG4ucmVzZXROYW1lc3BhY2UpCisic3RyaW5nIiE9dHlwZW9mIG4ucGF0aCYmKG4ucGF0
aD0iLyIrdCksZS5wdXNoKG4ucGF0aCxvLHIsbi5zZXJpYWxpemUpfXZhciBzPTAsYT1mdW5jdGlv
bigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnBhcmVudD1lLHRoaXMuZW5hYmxlTG9hZGluZ1N1YnN0
YXRlcz10JiZ0LmVuYWJsZUxvYWRpbmdTdWJzdGF0ZXMsdGhpcy5tYXRjaGVzPVtdLHRoaXMuZXhw
bGljaXRJbmRleD12b2lkIDAsdGhpcy5vcHRpb25zPXR9cmV0dXJuIGUucHJvdG90eXBlLnJvdXRl
PWZ1bmN0aW9uKHQpe3ZhciBuLHIscz1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3Vt
ZW50c1sxXT9hcmd1bWVudHNbMV06e30sYT1hcmd1bWVudHNbMl0sdT0iL191bnVzZWRfZHVtbXlf
ZXJyb3JfcGF0aF9yb3V0ZV8iK3QrIi86ZXJyb3IiCisyPT09YXJndW1lbnRzLmxlbmd0aCYmImZ1
bmN0aW9uIj09dHlwZW9mIHMmJihhPXMscz17fSksdGhpcy5lbmFibGVMb2FkaW5nU3Vic3RhdGVz
JiYobyh0aGlzLHQrIl9sb2FkaW5nIix7cmVzZXROYW1lc3BhY2U6cy5yZXNldE5hbWVzcGFjZX0p
LG8odGhpcyx0KyJfZXJyb3IiLHtyZXNldE5hbWVzcGFjZTpzLnJlc2V0TmFtZXNwYWNlLHBhdGg6
dX0pKSxhPyhuPWkodGhpcyx0LHMucmVzZXROYW1lc3BhY2UpLHI9bmV3IGUobix0aGlzLm9wdGlv
bnMpLG8ociwibG9hZGluZyIpLG8ociwiZXJyb3IiLHtwYXRoOnV9KSxhLmNhbGwociksbyh0aGlz
LHQscyxyLmdlbmVyYXRlKCkpKTpvKHRoaXMsdCxzKX0sZS5wcm90b3R5cGUucHVzaD1mdW5jdGlv
bihlLG4scixpKXt2YXIgbyxzLGE9bi5zcGxpdCgiLiIpCitpZih0aGlzLm9wdGlvbnMuZW5naW5l
SW5mbylvPW4uc2xpY2UodGhpcy5vcHRpb25zLmVuZ2luZUluZm8uZnVsbE5hbWUubGVuZ3RoKzEp
LHM9KDAsdC5hc3NpZ24pKHtsb2NhbEZ1bGxOYW1lOm99LHRoaXMub3B0aW9ucy5lbmdpbmVJbmZv
KSxpJiYocy5zZXJpYWxpemVNZXRob2Q9aSksdGhpcy5vcHRpb25zLmFkZFJvdXRlRm9yRW5naW5l
KG4scykKK2Vsc2UgaWYoaSl0aHJvdyBuZXcgRXJyb3IoIkRlZmluaW5nIGEgcm91dGUgc2VyaWFs
aXplciBvbiByb3V0ZSAnIituKyInIG91dHNpZGUgYW4gRW5naW5lIGlzIG5vdCBhbGxvd2VkLiIp
CisiIiE9PWUmJiIvIiE9PWUmJiJpbmRleCIhPT1hW2EubGVuZ3RoLTFdfHwodGhpcy5leHBsaWNp
dEluZGV4PSEwKSx0aGlzLm1hdGNoZXMucHVzaChbZSxuLHJdKX0sZS5wcm90b3R5cGUucmVzb3Vy
Y2U9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVu
dHNbMV0/YXJndW1lbnRzWzFdOnt9LG49YXJndW1lbnRzWzJdCisyPT09YXJndW1lbnRzLmxlbmd0
aCYmImZ1bmN0aW9uIj09dHlwZW9mIHQmJihuPXQsdD17fSksdC5yZXNldE5hbWVzcGFjZT0hMCx0
aGlzLnJvdXRlKGUsdCxuKX0sZS5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24oKXt2YXIgZT10
aGlzLm1hdGNoZXMKK3JldHVybiB0aGlzLmV4cGxpY2l0SW5kZXh8fHRoaXMucm91dGUoImluZGV4
Iix7cGF0aDoiLyJ9KSxmdW5jdGlvbih0KXt2YXIgbixyCitmb3Iobj0wO248ZS5sZW5ndGg7bisr
KXI9ZVtuXSx0KHJbMF0pLnRvKHJbMV0sclsyXSl9fSxlLnByb3RvdHlwZS5tb3VudD1mdW5jdGlv
bihuKXt2YXIgcixhLHUsbCxjLHAsZixoPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJn
dW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxkPXRoaXMub3B0aW9ucy5yZXNvbHZlUm91dGVNYXAo
biksbT1uCitoLmFzJiYobT1oLmFzKQordmFyIGc9aSh0aGlzLG0saC5yZXNldE5hbWVzcGFjZSks
eT17bmFtZTpuLGluc3RhbmNlSWQ6cysrLG1vdW50UG9pbnQ6ZyxmdWxsTmFtZTpnfSx2PWgucGF0
aAorInN0cmluZyIhPXR5cGVvZiB2JiYodj0iLyIrbSkKK3ZhciBiPXZvaWQgMCxfPSIvX3VudXNl
ZF9kdW1teV9lcnJvcl9wYXRoX3JvdXRlXyIrbSsiLzplcnJvciIKK2QmJihyPSExLGE9dGhpcy5v
cHRpb25zLmVuZ2luZUluZm8sYSYmKHI9ITAsdGhpcy5vcHRpb25zLmVuZ2luZUluZm89eSksdT0o
MCx0LmFzc2lnbikoe2VuZ2luZUluZm86eX0sdGhpcy5vcHRpb25zKSxsPW5ldyBlKGcsdSksbyhs
LCJsb2FkaW5nIiksbyhsLCJlcnJvciIse3BhdGg6X30pLGQuY2xhc3MuY2FsbChsKSxiPWwuZ2Vu
ZXJhdGUoKSxyJiYodGhpcy5vcHRpb25zLmVuZ2luZUluZm89YSkpCit2YXIgdz0oMCx0LmFzc2ln
bikoe2xvY2FsRnVsbE5hbWU6ImFwcGxpY2F0aW9uIn0seSkKK3RoaXMuZW5hYmxlTG9hZGluZ1N1
YnN0YXRlcyYmKGM9bSsiX2xvYWRpbmciLHA9ImFwcGxpY2F0aW9uX2xvYWRpbmciLGY9KDAsdC5h
c3NpZ24pKHtsb2NhbEZ1bGxOYW1lOnB9LHkpLG8odGhpcyxjLHtyZXNldE5hbWVzcGFjZTpoLnJl
c2V0TmFtZXNwYWNlfSksdGhpcy5vcHRpb25zLmFkZFJvdXRlRm9yRW5naW5lKGMsZiksYz1tKyJf
ZXJyb3IiLHA9ImFwcGxpY2F0aW9uX2Vycm9yIixmPSgwLHQuYXNzaWduKSh7bG9jYWxGdWxsTmFt
ZTpwfSx5KSxvKHRoaXMsYyx7cmVzZXROYW1lc3BhY2U6aC5yZXNldE5hbWVzcGFjZSxwYXRoOl99
KSx0aGlzLm9wdGlvbnMuYWRkUm91dGVGb3JFbmdpbmUoYyxmKSksdGhpcy5vcHRpb25zLmFkZFJv
dXRlRm9yRW5naW5lKGcsdyksdGhpcy5wdXNoKHYsZyxiKX0sZX0oKQorZS5kZWZhdWx0PWEsYS5t
YXA9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IGEKK3JldHVybiBlLmNhbGwodCksdH19KSxlKCJlbWJl
ci1yb3V0aW5nL3N5c3RlbS9nZW5lcmF0ZV9jb250cm9sbGVyIixbImV4cG9ydHMiLCJlbWJlci1t
ZXRhbCIsImVtYmVyLWRlYnVnIl0sZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiCitmdW5jdGlvbiB0
KGUsdCl7dmFyIG49ZS5mYWN0b3J5Rm9yKCJjb250cm9sbGVyOmJhc2ljIikuY2xhc3MKK3JldHVy
biBuPW4uZXh0ZW5kKHt0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiIoZ2VuZXJhdGVkICIrdCsi
IGNvbnRyb2xsZXIpIn19KSxlLnJlZ2lzdGVyKCJjb250cm9sbGVyOiIrdCxuKSxufWUuZ2VuZXJh
dGVDb250cm9sbGVyRmFjdG9yeT10LGUuZGVmYXVsdD1mdW5jdGlvbihlLG4pe3JldHVybiB0KGUs
biksZS5sb29rdXAoImNvbnRyb2xsZXI6IituKX19KSxlKCJlbWJlci1yb3V0aW5nL3N5c3RlbS9x
dWVyeV9wYXJhbXMiLFsiZXhwb3J0cyIsImVtYmVyLXJ1bnRpbWUiXSxmdW5jdGlvbihlLHQpeyJ1
c2Ugc3RyaWN0IgorZS5kZWZhdWx0PXQuT2JqZWN0LmV4dGVuZCh7aXNRdWVyeVBhcmFtczohMCx2
YWx1ZXM6bnVsbH0pfSksZSgiZW1iZXItcm91dGluZy9zeXN0ZW0vcm91dGUiLFsiZXhwb3J0cyIs
ImVtYmVyLXV0aWxzIiwiZW1iZXItbWV0YWwiLCJlbWJlci1kZWJ1ZyIsImVtYmVyLXJ1bnRpbWUi
LCJlbWJlci1yb3V0aW5nL3N5c3RlbS9nZW5lcmF0ZV9jb250cm9sbGVyIiwiZW1iZXItcm91dGlu
Zy91dGlscyJdLGZ1bmN0aW9uKGUsdCxuLHIsaSxvLHMpeyJ1c2Ugc3RyaWN0IgorZnVuY3Rpb24g
YSgpe3JldHVybiB0aGlzfWZ1bmN0aW9uIHUoZSx0KXtpZighKHQubGVuZ3RoPDEpJiZlKXt2YXIg
cj10WzBdLGk9e30KK3JldHVybiAxPT09dC5sZW5ndGg/ciBpbiBlP2lbcl09KDAsbi5nZXQpKGUs
cik6L19pZCQvLnRlc3QocikmJihpW3JdPSgwLG4uZ2V0KShlLCJpZCIpKTppPSgwLG4uZ2V0UHJv
cGVydGllcykoZSx0KSxpfX1mdW5jdGlvbiBsKGUpe3ZhciB0PWMoZSxlLnJvdXRlci5fcm91dGVy
TWljcm9saWIuc3RhdGUuaGFuZGxlckluZm9zLC0xKQorcmV0dXJuIHQmJnQuaGFuZGxlcn1mdW5j
dGlvbiBjKGUsdCl7dmFyIG4scj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50
c1syXT9hcmd1bWVudHNbMl06MAoraWYodCl7Zm9yKG49MDtuPHQubGVuZ3RoO24rKylpZih0W25d
LmhhbmRsZXI9PT1lKXJldHVybiB0W24rcl19fWZ1bmN0aW9uIHAoZSxuLGksbyxzKXt2YXIgYSx1
PXMmJnMuaW50byYmcy5pbnRvLnJlcGxhY2UoL1wvL2csIi4iKSxjPXMmJnMub3V0bGV0fHwibWFp
biIscD12b2lkIDAsZj12b2lkIDAKK28/KHA9by5yZXBsYWNlKC9cLy9nLCIuIiksZj1wKToocD1l
LnJvdXRlTmFtZSxmPWUudGVtcGxhdGVOYW1lfHxwKQordmFyIGg9KDAsdC5nZXRPd25lcikoZSks
ZD1zJiZzLmNvbnRyb2xsZXIKK2lmKGR8fChkPW4/aC5sb29rdXAoImNvbnRyb2xsZXI6IitwKXx8
ZS5jb250cm9sbGVyTmFtZXx8ZS5yb3V0ZU5hbWU6ZS5jb250cm9sbGVyTmFtZXx8aC5sb29rdXAo
ImNvbnRyb2xsZXI6IitwKSksInN0cmluZyI9PXR5cGVvZiBkJiYoYT1kLCEoZD1oLmxvb2t1cCgi
Y29udHJvbGxlcjoiK2EpKSkpdGhyb3cgbmV3IHIuRXJyb3IoIllvdSBwYXNzZWQgYGNvbnRyb2xs
ZXI6ICciK2ErIidgIGludG8gdGhlIGByZW5kZXJgIG1ldGhvZCwgYnV0IG5vIHN1Y2ggY29udHJv
bGxlciBjb3VsZCBiZSBmb3VuZC4iKQoraWYocyYmLTEhPT1PYmplY3Qua2V5cyhzKS5pbmRleE9m
KCJvdXRsZXQiKSYmdm9pZCAwPT09cy5vdXRsZXQpdGhyb3cgbmV3IHIuRXJyb3IoIllvdSBwYXNz
ZWQgdW5kZWZpbmVkIGFzIHRoZSBvdXRsZXQgbmFtZS4iKQorcyYmcy5tb2RlbCYmZC5zZXQoIm1v
ZGVsIixzLm1vZGVsKQordmFyIG09aC5sb29rdXAoInRlbXBsYXRlOiIrZiksZz12b2lkIDAKK3Jl
dHVybiB1JiYoZz1sKGUpKSYmdT09PWcucm91dGVOYW1lJiYodT12b2lkIDApLHtvd25lcjpoLGlu
dG86dSxvdXRsZXQ6YyxuYW1lOnAsY29udHJvbGxlcjpkLHRlbXBsYXRlOm18fGUuX3RvcExldmVs
Vmlld1RlbXBsYXRlLFZpZXdDbGFzczp2b2lkIDB9fWZ1bmN0aW9uIGYoZSxuKXtyZXR1cm4gbi5m
dWxsUXVlcnlQYXJhbXM/bi5mdWxsUXVlcnlQYXJhbXM6KG4uZnVsbFF1ZXJ5UGFyYW1zPXt9LCgw
LHQuYXNzaWduKShuLmZ1bGxRdWVyeVBhcmFtcyxuLnF1ZXJ5UGFyYW1zKSxlLl9kZXNlcmlhbGl6
ZVF1ZXJ5UGFyYW1zKG4uaGFuZGxlckluZm9zLG4uZnVsbFF1ZXJ5UGFyYW1zKSxuLmZ1bGxRdWVy
eVBhcmFtcyl9ZnVuY3Rpb24gaChlLHQpe3QucXVlcnlQYXJhbXNGb3I9dC5xdWVyeVBhcmFtc0Zv
cnx8e30KK3ZhciByLGksbyxzPWUuZnVsbFJvdXRlTmFtZQoraWYodC5xdWVyeVBhcmFtc0Zvcltz
XSlyZXR1cm4gdC5xdWVyeVBhcmFtc0ZvcltzXQordmFyIGE9ZihlLnJvdXRlcix0KSx1PXQucXVl
cnlQYXJhbXNGb3Jbc109e30sbD0oMCxuLmdldCkoZSwiX3FwIiksYz1sLnFwcworZm9yKHI9MDty
PGMubGVuZ3RoOysrcilpPWNbcl0sbz1pLnByb3AgaW4gYSx1W2kucHJvcF09bz9hW2kucHJvcF06
ZChpLmRlZmF1bHRWYWx1ZSkKK3JldHVybiB1fWZ1bmN0aW9uIGQoZSl7cmV0dXJuIEFycmF5Lmlz
QXJyYXkoZSk/KDAsaS5BKShlLnNsaWNlKCkpOmV9ZnVuY3Rpb24gbShlLG4pe3ZhciByLGksbz12
b2lkIDAscz17fQorbz17ZGVmYXVsdFZhbHVlOiEwLHR5cGU6ITAsc2NvcGU6ITAsYXM6ITB9Citm
b3IodmFyIGEgaW4gZSllLmhhc093blByb3BlcnR5KGEpJiYocj17fSwoMCx0LmFzc2lnbikocixl
W2FdKSwoMCx0LmFzc2lnbikocixuW2FdKSxzW2FdPXIsb1thXT0hMCkKK2Zvcih2YXIgdSBpbiBu
KW4uaGFzT3duUHJvcGVydHkodSkmJiFvW3VdJiYoaT17fSwoMCx0LmFzc2lnbikoaSxuW3VdLGVb
dV0pLHNbdV09aSkKK3JldHVybiBzfWZ1bmN0aW9uIGcoZSx0KXt0LmZvckVhY2goZnVuY3Rpb24o
dCl7ZS5hZGRPYnNlcnZlcih0KyIuW10iLGUsZS5fcXBDaGFuZ2VkKX0pfWZ1bmN0aW9uIHkoZSx0
KXt2YXIgbgorcmV0dXJuIGUucm91dGFibGU/KG49ZS5tb3VudFBvaW50LCJhcHBsaWNhdGlvbiI9
PT10P246bisiLiIrdCk6dH1lLmRlZmF1bHRTZXJpYWxpemU9dSxlLmhhc0RlZmF1bHRTZXJpYWxp
emU9ZnVuY3Rpb24oZSl7cmV0dXJuISFlLnNlcmlhbGl6ZVtiXX0KK3ZhciB2PUFycmF5LnByb3Rv
dHlwZS5zbGljZSxiPSgwLHQuc3ltYm9sKSgiREVGQVVMVF9TRVJJQUxJWkUiKQordVtiXT0hMAor
dmFyIF89aS5PYmplY3QuZXh0ZW5kKGkuQWN0aW9uSGFuZGxlcixpLkV2ZW50ZWQse3F1ZXJ5UGFy
YW1zOnt9LF9zZXRSb3V0ZU5hbWU6ZnVuY3Rpb24oZSl7dGhpcy5yb3V0ZU5hbWU9ZSx0aGlzLmZ1
bGxSb3V0ZU5hbWU9eSgoMCx0LmdldE93bmVyKSh0aGlzKSxlKX0sX3FwOigwLG4uY29tcHV0ZWQp
KGZ1bmN0aW9uKCl7dmFyIGUscixhLHUsbCxjLHAsZixoLGQsZyx5PXRoaXMsdj12b2lkIDAsYj10
aGlzLmNvbnRyb2xsZXJOYW1lfHx0aGlzLnJvdXRlTmFtZSxfPSgwLHQuZ2V0T3duZXIpKHRoaXMp
LHc9Xy5sb29rdXAoImNvbnRyb2xsZXI6IitiKSxFPSgwLG4uZ2V0KSh0aGlzLCJxdWVyeVBhcmFt
cyIpLHg9ISFPYmplY3Qua2V5cyhFKS5sZW5ndGgKK3c/KGU9KDAsbi5nZXQpKHcsInF1ZXJ5UGFy
YW1zIil8fHt9LHI9KDAscy5ub3JtYWxpemVDb250cm9sbGVyUXVlcnlQYXJhbXMpKGUpLHY9bShy
LEUpKTp4JiYodz0oMCxvLmRlZmF1bHQpKCgwLHQuZ2V0T3duZXIpKHRoaXMpLGIpLHY9RSkKK3Zh
ciBDPVtdLE89e30sQT1bXQorZm9yKHZhciBUIGluIHYpdi5oYXNPd25Qcm9wZXJ0eShUKSYmInVu
a25vd25Qcm9wZXJ0eSIhPT1UJiYiX3N1cGVyIiE9PVQmJihhPXZbVF0sdT1hLnNjb3BlfHwibW9k
ZWwiLGw9dm9pZCAwLCJjb250cm9sbGVyIj09PXUmJihsPVtdKSxjPWEuYXN8fHRoaXMuc2VyaWFs
aXplUXVlcnlQYXJhbUtleShUKSxwPSgwLG4uZ2V0KSh3LFQpLEFycmF5LmlzQXJyYXkocCkmJihw
PSgwLGkuQSkocC5zbGljZSgpKSksZj1hLnR5cGV8fCgwLGkudHlwZU9mKShwKSxoPXRoaXMuc2Vy
aWFsaXplUXVlcnlQYXJhbShwLGMsZiksZD1iKyI6IitULGc9e3VuZGVjb3JhdGVkRGVmYXVsdFZh
bHVlOigwLG4uZ2V0KSh3LFQpLGRlZmF1bHRWYWx1ZTpwLHNlcmlhbGl6ZWREZWZhdWx0VmFsdWU6
aCxzZXJpYWxpemVkVmFsdWU6aCx0eXBlOmYsdXJsS2V5OmMscHJvcDpULHNjb3BlZFByb3BlcnR5
TmFtZTpkLGNvbnRyb2xsZXJOYW1lOmIscm91dGU6dGhpcyxwYXJ0czpsLHZhbHVlczpudWxsLHNj
b3BlOnV9LE9bVF09T1tjXT1PW2RdPWcsQy5wdXNoKGcpLEEucHVzaChUKSkKK3JldHVybntxcHM6
QyxtYXA6Tyxwcm9wZXJ0eU5hbWVzOkEsc3RhdGVzOntpbmFjdGl2ZTpmdW5jdGlvbihlLHQpe3Zh
ciBuPU9bZV0KK3kuX3FwQ2hhbmdlZChlLHQsbil9LGFjdGl2ZTpmdW5jdGlvbihlLHQpe3ZhciBu
PU9bZV0KK3JldHVybiB5Ll9xcENoYW5nZWQoZSx0LG4pLHkuX2FjdGl2ZVFQQ2hhbmdlZChPW2Vd
LHQpfSxhbGxvd092ZXJyaWRlczpmdW5jdGlvbihlLHQpe3ZhciBuPU9bZV0KK3JldHVybiB5Ll9x
cENoYW5nZWQoZSx0LG4pLHkuX3VwZGF0aW5nUVBDaGFuZ2VkKE9bZV0pfX19fSksX25hbWVzOm51
bGwsX3N0YXNoTmFtZXM6ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5fbmFtZXMpe3ZhciByLGksbyxz
PXRoaXMuX25hbWVzPWUuX25hbWVzCitzLmxlbmd0aHx8KGU9dCxzPWUmJmUuX25hbWVzfHxbXSkK
K3ZhciBhPSgwLG4uZ2V0KSh0aGlzLCJfcXAucXBzIiksdT1uZXcgQXJyYXkocy5sZW5ndGgpCitm
b3Iocj0wO3I8cy5sZW5ndGg7KytyKXVbcl09ZS5uYW1lKyIuIitzW3JdCitmb3IoaT0wO2k8YS5s
ZW5ndGg7KytpKW89YVtpXSwibW9kZWwiPT09by5zY29wZSYmKG8ucGFydHM9dSl9fSxfYWN0aXZl
UVBDaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7dGhpcy5yb3V0ZXIuX2FjdGl2ZVFQQ2hhbmdlZChlLnNj
b3BlZFByb3BlcnR5TmFtZSx0KX0sX3VwZGF0aW5nUVBDaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMu
cm91dGVyLl91cGRhdGluZ1FQQ2hhbmdlZChlLnVybEtleSl9LG1lcmdlZFByb3BlcnRpZXM6WyJx
dWVyeVBhcmFtcyJdLHBhcmFtc0ZvcjpmdW5jdGlvbihlKXt2YXIgbj0oMCx0LmdldE93bmVyKSh0
aGlzKS5sb29rdXAoInJvdXRlOiIrZSkKK2lmKCFuKXJldHVybnt9Cit2YXIgcj10aGlzLnJvdXRl
ci5fcm91dGVyTWljcm9saWIuYWN0aXZlVHJhbnNpdGlvbixpPXI/ci5zdGF0ZTp0aGlzLnJvdXRl
ci5fcm91dGVyTWljcm9saWIuc3RhdGUsbz1uLmZ1bGxSb3V0ZU5hbWUscz0oMCx0LmFzc2lnbiko
e30saS5wYXJhbXNbb10pLGE9aChuLGkpCityZXR1cm4gT2JqZWN0LmtleXMoYSkucmVkdWNlKGZ1
bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF09YVt0XSxlfSxzKX0sc2VyaWFsaXplUXVlcnlQYXJhbUtl
eTpmdW5jdGlvbihlKXtyZXR1cm4gZX0sc2VyaWFsaXplUXVlcnlQYXJhbTpmdW5jdGlvbihlLHQs
bil7cmV0dXJuIHRoaXMucm91dGVyLl9zZXJpYWxpemVRdWVyeVBhcmFtKGUsbil9LGRlc2VyaWFs
aXplUXVlcnlQYXJhbTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMucm91dGVyLl9kZXNlcmlh
bGl6ZVF1ZXJ5UGFyYW0oZSxuKX0sX29wdGlvbnNGb3JRdWVyeVBhcmFtOmZ1bmN0aW9uKGUpe3Jl
dHVybigwLG4uZ2V0KSh0aGlzLCJxdWVyeVBhcmFtcy4iK2UudXJsS2V5KXx8KDAsbi5nZXQpKHRo
aXMsInF1ZXJ5UGFyYW1zLiIrZS5wcm9wKXx8e319LHJlc2V0Q29udHJvbGxlcjphLGV4aXQ6ZnVu
Y3Rpb24oKXt0aGlzLmRlYWN0aXZhdGUoKSx0aGlzLnRyaWdnZXIoImRlYWN0aXZhdGUiKSx0aGlz
LnRlYXJkb3duVmlld3MoKX0sX3Jlc2V0OmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5jb250cm9s
bGVyCityLl9xcERlbGVnYXRlPSgwLG4uZ2V0KSh0aGlzLCJfcXAuc3RhdGVzLmluYWN0aXZlIiks
dGhpcy5yZXNldENvbnRyb2xsZXIocixlLHQpfSxlbnRlcjpmdW5jdGlvbigpe3RoaXMuY29ubmVj
dGlvbnM9W10sdGhpcy5hY3RpdmF0ZSgpLHRoaXMudHJpZ2dlcigiYWN0aXZhdGUiKX0sdGVtcGxh
dGVOYW1lOm51bGwsY29udHJvbGxlck5hbWU6bnVsbCxhY3Rpb25zOntxdWVyeVBhcmFtc0RpZENo
YW5nZTpmdW5jdGlvbihlLHQscil7dmFyIGksbyxzPSgwLG4uZ2V0KSh0aGlzLCJfcXAiKS5tYXAs
YT1PYmplY3Qua2V5cyhlKS5jb25jYXQoT2JqZWN0LmtleXMocikpCitmb3IoaT0wO2k8YS5sZW5n
dGg7KytpKWlmKChvPXNbYVtpXV0pJiYoMCxuLmdldCkodGhpcy5fb3B0aW9uc0ZvclF1ZXJ5UGFy
YW0obyksInJlZnJlc2hNb2RlbCIpJiZ0aGlzLnJvdXRlci5jdXJyZW50U3RhdGUpe3RoaXMucmVm
cmVzaCgpCiticmVha31yZXR1cm4hMH0sZmluYWxpemVRdWVyeVBhcmFtQ2hhbmdlOmZ1bmN0aW9u
KGUsdCxyKXtpZigiYXBwbGljYXRpb24iIT09dGhpcy5mdWxsUm91dGVOYW1lKXJldHVybiEwCitp
ZihyKXt2YXIgaSxvLGEsdSxsLGMscCxmLGgsbSxnPXIuc3RhdGUuaGFuZGxlckluZm9zLHk9dGhp
cy5yb3V0ZXIsdj15Ll9xdWVyeVBhcmFtc0ZvcihnKSxiPXkuX3FwVXBkYXRlcyxfPXZvaWQgMAor
Zm9yKCgwLHMuc3Rhc2hQYXJhbU5hbWVzKSh5LGcpLGk9MDtpPHYucXBzLmxlbmd0aDsrK2kpbz12
LnFwc1tpXSxhPW8ucm91dGUsdT1hLmNvbnRyb2xsZXIsbD1vLnVybEtleSBpbiBlJiZvLnVybEtl
eSxjPXZvaWQgMCxwPXZvaWQgMCxiJiZvLnVybEtleSBpbiBiPyhjPSgwLG4uZ2V0KSh1LG8ucHJv
cCkscD1hLnNlcmlhbGl6ZVF1ZXJ5UGFyYW0oYyxvLnVybEtleSxvLnR5cGUpKTpsPyhwPWVbbF0s
Yz1hLmRlc2VyaWFsaXplUXVlcnlQYXJhbShwLG8udXJsS2V5LG8udHlwZSkpOihwPW8uc2VyaWFs
aXplZERlZmF1bHRWYWx1ZSxjPWQoby5kZWZhdWx0VmFsdWUpKSx1Ll9xcERlbGVnYXRlPSgwLG4u
Z2V0KShhLCJfcXAuc3RhdGVzLmluYWN0aXZlIiksZj1wIT09by5zZXJpYWxpemVkVmFsdWUsZiYm
KHIucXVlcnlQYXJhbXNPbmx5JiYhMSE9PV8mJihoPWEuX29wdGlvbnNGb3JRdWVyeVBhcmFtKG8p
LG09KDAsbi5nZXQpKGgsInJlcGxhY2UiKSxtP189ITA6ITE9PT1tJiYoXz0hMSkpLCgwLG4uc2V0
KSh1LG8ucHJvcCxjKSksby5zZXJpYWxpemVkVmFsdWU9cCxvLnNlcmlhbGl6ZWREZWZhdWx0VmFs
dWU9PT1wfHx0LnB1c2goe3ZhbHVlOnAsdmlzaWJsZTohMCxrZXk6bHx8by51cmxLZXl9KQorXyYm
ci5tZXRob2QoInJlcGxhY2UiKSx2LnFwcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PSgwLG4u
Z2V0KShlLnJvdXRlLCJfcXAiKQorZS5yb3V0ZS5jb250cm9sbGVyLl9xcERlbGVnYXRlPSgwLG4u
Z2V0KSh0LCJzdGF0ZXMuYWN0aXZlIil9KSx5Ll9xcFVwZGF0ZXM9bnVsbH19fSxkZWFjdGl2YXRl
OmEsYWN0aXZhdGU6YSx0cmFuc2l0aW9uVG86ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJvdXRlcgor
cmV0dXJuIGUudHJhbnNpdGlvblRvLmFwcGx5KGUsKDAscy5wcmVmaXhSb3V0ZU5hbWVBcmcpKHRo
aXMsYXJndW1lbnRzKSl9LGludGVybWVkaWF0ZVRyYW5zaXRpb25UbzpmdW5jdGlvbigpe3ZhciBl
PXRoaXMucm91dGVyCitlLmludGVybWVkaWF0ZVRyYW5zaXRpb25Uby5hcHBseShlLCgwLHMucHJl
Zml4Um91dGVOYW1lQXJnKSh0aGlzLGFyZ3VtZW50cykpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7cmV0
dXJuIHRoaXMucm91dGVyLl9yb3V0ZXJNaWNyb2xpYi5yZWZyZXNoKHRoaXMpfSxyZXBsYWNlV2l0
aDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucm91dGVyCityZXR1cm4gZS5yZXBsYWNlV2l0aC5hcHBs
eShlLCgwLHMucHJlZml4Um91dGVOYW1lQXJnKSh0aGlzLGFyZ3VtZW50cykpfSxzZW5kOmZ1bmN0
aW9uKCl7dmFyIGUsdCxuLGksbworZm9yKGU9YXJndW1lbnRzLmxlbmd0aCx0PUFycmF5KGUpLG49
MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dCitpZih0aGlzLnJvdXRlciYmdGhpcy5yb3V0ZXIu
X3JvdXRlck1pY3JvbGlifHwhKDAsci5pc1Rlc3RpbmcpKCkpKGk9dGhpcy5yb3V0ZXIpLnNlbmQu
YXBwbHkoaSx0KQorZWxzZSBpZihvPXRbMF0sdD12LmNhbGwodCwxKSx0aGlzLmFjdGlvbnNbb10p
cmV0dXJuIHRoaXMuYWN0aW9uc1tvXS5hcHBseSh0aGlzLHQpfSxzZXR1cDpmdW5jdGlvbihlLHQp
e3ZhciByLGksbyxhLHUsbD12b2lkIDAsYz10aGlzLmNvbnRyb2xsZXJOYW1lfHx0aGlzLnJvdXRl
TmFtZSxwPXRoaXMuY29udHJvbGxlckZvcihjLCEwKQorbD1wfHx0aGlzLmdlbmVyYXRlQ29udHJv
bGxlcihjKSx0aGlzLmNvbnRyb2xsZXJ8fChyPSgwLG4uZ2V0KSh0aGlzLCJfcXAucHJvcGVydHlO
YW1lcyIpLGcobCxyKSx0aGlzLmNvbnRyb2xsZXI9bCkKK3ZhciBmPSgwLG4uZ2V0KSh0aGlzLCJf
cXAiKSxkPWYuc3RhdGVzCitsLl9xcERlbGVnYXRlPWQuYWxsb3dPdmVycmlkZXMsdCYmKCgwLHMu
c3Rhc2hQYXJhbU5hbWVzKSh0aGlzLnJvdXRlcix0LnN0YXRlLmhhbmRsZXJJbmZvcyksaT10LnBh
cmFtcyxvPWYucHJvcGVydHlOYW1lcyxhPXRoaXMuX2J1Y2tldENhY2hlLG8uZm9yRWFjaChmdW5j
dGlvbihlKXt2YXIgdCxyPWYubWFwW2VdCityLnZhbHVlcz1pCit2YXIgbz0oMCxzLmNhbGN1bGF0
ZUNhY2hlS2V5KShyLnJvdXRlLmZ1bGxSb3V0ZU5hbWUsci5wYXJ0cyxyLnZhbHVlcykKK2EmJih0
PWEubG9va3VwKG8sZSxyLnVuZGVjb3JhdGVkRGVmYXVsdFZhbHVlKSwoMCxuLnNldCkobCxlLHQp
KX0pKSx0JiYodT1oKHRoaXMsdC5zdGF0ZSksKDAsbi5zZXRQcm9wZXJ0aWVzKShsLHUpKSx0aGlz
LnNldHVwQ29udHJvbGxlcihsLGUsdCksdGhpcy5fZW52aXJvbm1lbnQub3B0aW9ucy5zaG91bGRS
ZW5kZXImJnRoaXMucmVuZGVyVGVtcGxhdGUobCxlKX0sX3FwQ2hhbmdlZDpmdW5jdGlvbihlLHQs
bil7aWYobil7dmFyIHI9KDAscy5jYWxjdWxhdGVDYWNoZUtleSkobi5yb3V0ZS5mdWxsUm91dGVO
YW1lLG4ucGFydHMsbi52YWx1ZXMpLGk9dGhpcy5fYnVja2V0Q2FjaGUKK2kmJmkuc3Rhc2gocixl
LHQpfX0sYmVmb3JlTW9kZWw6YSxhZnRlck1vZGVsOmEscmVkaXJlY3Q6YSxjb250ZXh0RGlkQ2hh
bmdlOmZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50TW9kZWw9dGhpcy5jb250ZXh0fSxtb2RlbDpmdW5j
dGlvbihlLHQpe3ZhciByLG89dm9pZCAwLHM9dm9pZCAwLGE9dm9pZCAwLHU9KDAsbi5nZXQpKHRo
aXMsIl9xcC5tYXAiKQorZm9yKHZhciBsIGluIGUpInF1ZXJ5UGFyYW1zIj09PWx8fHUmJmwgaW4g
dXx8KHI9bC5tYXRjaCgvXiguKilfaWQkLyksciYmKG89clsxXSxhPWVbbF0pLHM9ITApCitpZigh
byYmcylyZXR1cm4oMCxpLmNvcHkpKGUpCitpZighbyl7aWYodC5yZXNvbHZlSW5kZXg8MSlyZXR1
cm4KK3JldHVybiB0LnN0YXRlLmhhbmRsZXJJbmZvc1t0LnJlc29sdmVJbmRleC0xXS5jb250ZXh0
fXJldHVybiB0aGlzLmZpbmRNb2RlbChvLGEpfSxkZXNlcmlhbGl6ZTpmdW5jdGlvbihlLHQpe3Jl
dHVybiB0aGlzLm1vZGVsKHRoaXMucGFyYW1zRm9yKHRoaXMucm91dGVOYW1lKSx0KX0sZmluZE1v
ZGVsOmZ1bmN0aW9uKCl7dmFyIGU9KDAsbi5nZXQpKHRoaXMsInN0b3JlIikKK3JldHVybiBlLmZp
bmQuYXBwbHkoZSxhcmd1bWVudHMpfSxzdG9yZTooMCxuLmNvbXB1dGVkKShmdW5jdGlvbigpe3Zh
ciBlPSgwLHQuZ2V0T3duZXIpKHRoaXMpCit0aGlzLnJvdXRlTmFtZSwoMCxuLmdldCkodGhpcywi
cm91dGVyLm5hbWVzcGFjZSIpCityZXR1cm57ZmluZDpmdW5jdGlvbih0LG4pe3ZhciByPWUuZmFj
dG9yeUZvcigibW9kZWw6Iit0KQoraWYocilyZXR1cm4gcj1yLmNsYXNzLHIuZmluZChuKX19fSks
c2VyaWFsaXplOnUsc2V0dXBDb250cm9sbGVyOmZ1bmN0aW9uKGUsdCl7ZSYmdm9pZCAwIT09dCYm
KDAsbi5zZXQpKGUsIm1vZGVsIix0KX0sY29udHJvbGxlckZvcjpmdW5jdGlvbihlLG4pe3ZhciBy
PSgwLHQuZ2V0T3duZXIpKHRoaXMpLGk9ci5sb29rdXAoInJvdXRlOiIrZSkKK3JldHVybiBpJiZp
LmNvbnRyb2xsZXJOYW1lJiYoZT1pLmNvbnRyb2xsZXJOYW1lKSxyLmxvb2t1cCgiY29udHJvbGxl
cjoiK2UpfSxnZW5lcmF0ZUNvbnRyb2xsZXI6ZnVuY3Rpb24oZSl7dmFyIG49KDAsdC5nZXRPd25l
cikodGhpcykKK3JldHVybigwLG8uZGVmYXVsdCkobixlKX0sbW9kZWxGb3I6ZnVuY3Rpb24oZSl7
dmFyIG4scj12b2lkIDAsaT0oMCx0LmdldE93bmVyKSh0aGlzKQorcj1pLnJvdXRhYmxlJiZ0aGlz
LnJvdXRlciYmdGhpcy5yb3V0ZXIuX3JvdXRlck1pY3JvbGliLmFjdGl2ZVRyYW5zaXRpb24/eShp
LGUpOmUKK3ZhciBvPSgwLHQuZ2V0T3duZXIpKHRoaXMpLmxvb2t1cCgicm91dGU6IityKSxzPXRo
aXMucm91dGVyP3RoaXMucm91dGVyLl9yb3V0ZXJNaWNyb2xpYi5hY3RpdmVUcmFuc2l0aW9uOm51
bGwKK3JldHVybiBzJiYobj1vJiZvLnJvdXRlTmFtZXx8cixzLnJlc29sdmVkTW9kZWxzLmhhc093
blByb3BlcnR5KG4pKT9zLnJlc29sdmVkTW9kZWxzW25dOm8mJm8uY3VycmVudE1vZGVsfSxyZW5k
ZXJUZW1wbGF0ZTpmdW5jdGlvbigpe3RoaXMucmVuZGVyKCl9LHJlbmRlcjpmdW5jdGlvbihlLHQp
e3ZhciByPTA9PT1hcmd1bWVudHMubGVuZ3RofHwoMCxuLmlzRW1wdHkpKGFyZ3VtZW50c1swXSks
aT12b2lkIDAKKyJvYmplY3QiIT10eXBlb2YgZXx8dD9pPWU6KGk9dGhpcy50ZW1wbGF0ZU5hbWV8
fHRoaXMucm91dGVOYW1lLHQ9ZSkKK3ZhciBvPXAodGhpcywic3RyaW5nIj09dHlwZW9mIGUmJiEh
ZSxyLGksdCkKK3RoaXMuY29ubmVjdGlvbnMucHVzaChvKSxuLnJ1bi5vbmNlKHRoaXMucm91dGVy
LCJfc2V0T3V0bGV0cyIpfSxkaXNjb25uZWN0T3V0bGV0OmZ1bmN0aW9uKGUpe3ZhciB0LG49dm9p
ZCAwLGk9dm9pZCAwCitpZihlJiYic3RyaW5nIiE9dHlwZW9mIGUpe2lmKG49ZS5vdXRsZXQsaT1l
LnBhcmVudFZpZXcsZSYmLTEhPT1PYmplY3Qua2V5cyhlKS5pbmRleE9mKCJvdXRsZXQiKSYmdm9p
ZCAwPT09ZS5vdXRsZXQpdGhyb3cgbmV3IHIuRXJyb3IoIllvdSBwYXNzZWQgdW5kZWZpbmVkIGFz
IHRoZSBvdXRsZXQgbmFtZS4iKX1lbHNlIG49ZQorZm9yKGk9aSYmaS5yZXBsYWNlKC9cLy9nLCIu
Iiksbj1ufHwibWFpbiIsdGhpcy5fZGlzY29ubmVjdE91dGxldChuLGkpLHQ9MDt0PHRoaXMucm91
dGVyLl9yb3V0ZXJNaWNyb2xpYi5jdXJyZW50SGFuZGxlckluZm9zLmxlbmd0aDt0KyspdGhpcy5y
b3V0ZXIuX3JvdXRlck1pY3JvbGliLmN1cnJlbnRIYW5kbGVySW5mb3NbdF0uaGFuZGxlci5fZGlz
Y29ubmVjdE91dGxldChuLGkpfSxfZGlzY29ubmVjdE91dGxldDpmdW5jdGlvbihlLHQpe3ZhciBy
LGksbz1sKHRoaXMpCitmb3IobyYmdD09PW8ucm91dGVOYW1lJiYodD12b2lkIDApLHI9MDtyPHRo
aXMuY29ubmVjdGlvbnMubGVuZ3RoO3IrKylpPXRoaXMuY29ubmVjdGlvbnNbcl0saS5vdXRsZXQ9
PT1lJiZpLmludG89PT10JiYodGhpcy5jb25uZWN0aW9uc1tyXT17b3duZXI6aS5vd25lcixpbnRv
OmkuaW50byxvdXRsZXQ6aS5vdXRsZXQsbmFtZTppLm5hbWUsY29udHJvbGxlcjp2b2lkIDAsdGVt
cGxhdGU6dm9pZCAwLFZpZXdDbGFzczp2b2lkIDB9LG4ucnVuLm9uY2UodGhpcy5yb3V0ZXIsIl9z
ZXRPdXRsZXRzIikpfSx3aWxsRGVzdHJveTpmdW5jdGlvbigpe3RoaXMudGVhcmRvd25WaWV3cygp
fSx0ZWFyZG93blZpZXdzOmZ1bmN0aW9uKCl7dGhpcy5jb25uZWN0aW9ucyYmdGhpcy5jb25uZWN0
aW9ucy5sZW5ndGg+MCYmKHRoaXMuY29ubmVjdGlvbnM9W10sbi5ydW4ub25jZSh0aGlzLnJvdXRl
ciwiX3NldE91dGxldHMiKSl9fSk7KDAsaS5kZXByZWNhdGVVbmRlcnNjb3JlQWN0aW9ucykoXyks
Xy5yZW9wZW5DbGFzcyh7aXNSb3V0ZUZhY3Rvcnk6ITB9KSxlLmRlZmF1bHQ9X30pLGUoImVtYmVy
LXJvdXRpbmcvc3lzdGVtL3JvdXRlciIsWyJleHBvcnRzIiwiZW1iZXItdXRpbHMiLCJlbWJlci1j
b25zb2xlIiwiZW1iZXItbWV0YWwiLCJlbWJlci1kZWJ1ZyIsImVtYmVyLXJ1bnRpbWUiLCJlbWJl
ci1yb3V0aW5nL3N5c3RlbS9yb3V0ZSIsImVtYmVyLXJvdXRpbmcvc3lzdGVtL2RzbCIsImVtYmVy
LXJvdXRpbmcvbG9jYXRpb24vYXBpIiwiZW1iZXItcm91dGluZy91dGlscyIsImVtYmVyLXJvdXRp
bmcvc3lzdGVtL3JvdXRlcl9zdGF0ZSIsInJvdXRlciJdLGZ1bmN0aW9uKGUsdCxuLHIsaSxvLHMs
YSx1LGwsYyxwKXsidXNlIHN0cmljdCIKK2Z1bmN0aW9uIGYoKXtyZXR1cm4gdGhpc31mdW5jdGlv
biBoKGUsdCxuKXt2YXIgcixpLG8scz0hMQorZm9yKHI9dC5sZW5ndGgtMTtyPj0wOy0tcilpZihp
PXRbcl0sbz1pLmhhbmRsZXIsZT09PW8mJihzPSEwKSxzJiYhMCE9PW4obykpcmV0dXJufWZ1bmN0
aW9uIGQoZSx0KXt2YXIgcj1bXSxpPXZvaWQgMAoraT1lJiYib2JqZWN0Ij09dHlwZW9mIGUmJiJv
YmplY3QiPT10eXBlb2YgZS5lcnJvclRocm93bj9lLmVycm9yVGhyb3duOmUsdCYmci5wdXNoKHQp
LGkmJihpLm1lc3NhZ2UmJnIucHVzaChpLm1lc3NhZ2UpLGkuc3RhY2smJnIucHVzaChpLnN0YWNr
KSwic3RyaW5nIj09dHlwZW9mIGkmJnIucHVzaChpKSksbi5kZWZhdWx0LmVycm9yLmFwcGx5KHRo
aXMscil9ZnVuY3Rpb24gbShlLG4pe3ZhciByPWUucm91dGVyLGk9KDAsdC5nZXRPd25lcikoZSks
bz1lLnJvdXRlTmFtZSxzPWUuZnVsbFJvdXRlTmFtZSxhPXMrIl8iK24KK3JldHVybiB5KGkscixv
KyJfIituLGEpP2E6IiJ9ZnVuY3Rpb24gZyhlLG4pe3ZhciByPWUucm91dGVyLGk9KDAsdC5nZXRP
d25lcikoZSksbz1lLnJvdXRlTmFtZSxzPSJhcHBsaWNhdGlvbiI9PT1vP246bysiLiIrbixhPWUu
ZnVsbFJvdXRlTmFtZSx1PSJhcHBsaWNhdGlvbiI9PT1hP246YSsiLiIrbgorcmV0dXJuIHkoaSxy
LHMsdSk/dToiIn1mdW5jdGlvbiB5KGUsdCxuLHIpe3ZhciBpPXQuaGFzUm91dGUociksbz1lLmhh
c1JlZ2lzdHJhdGlvbigidGVtcGxhdGU6IituKXx8ZS5oYXNSZWdpc3RyYXRpb24oInJvdXRlOiIr
bikKK3JldHVybiBpJiZvfWZ1bmN0aW9uIHYoZSxuLHIpe3ZhciBvLHMsYT1yLnNoaWZ0KCkKK2lm
KCFlKXtpZihuKXJldHVybgordGhyb3cgbmV3IGkuRXJyb3IoIkNhbid0IHRyaWdnZXIgYWN0aW9u
ICciK2ErIicgYmVjYXVzZSB5b3VyIGFwcCBoYXNuJ3QgZmluaXNoZWQgdHJhbnNpdGlvbmluZyBp
bnRvIGl0cyBmaXJzdCByb3V0ZS4gVG8gdHJpZ2dlciBhbiBhY3Rpb24gb24gZGVzdGluYXRpb24g
cm91dGVzIGR1cmluZyBhIHRyYW5zaXRpb24sIHlvdSBjYW4gY2FsbCBgLnNlbmQoKWAgb24gdGhl
IGBUcmFuc2l0aW9uYCBvYmplY3QgcGFzc2VkIHRvIHRoZSBgbW9kZWwvYmVmb3JlTW9kZWwvYWZ0
ZXJNb2RlbGAgaG9va3MuIil9dmFyIHU9ITEsbD12b2lkIDAsYz12b2lkIDAKK2ZvcihvPWUubGVu
Z3RoLTE7bz49MDtvLS0paWYobD1lW29dLChjPWwuaGFuZGxlcikmJmMuYWN0aW9ucyYmYy5hY3Rp
b25zW2FdKXtpZighMCE9PWMuYWN0aW9uc1thXS5hcHBseShjLHIpKXJldHVybiB2b2lkKCJlcnJv
ciI9PT1hJiYocz0oMCx0Lmd1aWRGb3IpKHJbMF0pLGMucm91dGVyLl9tYXJrRXJyb3JBc0hhbmRs
ZWQocykpKQordT0hMH1pZihrW2FdKXJldHVybiB2b2lkIGtbYV0uYXBwbHkobnVsbCxyKQoraWYo
IXUmJiFuKXRocm93IG5ldyBpLkVycm9yKCJOb3RoaW5nIGhhbmRsZWQgdGhlIGFjdGlvbiAnIith
KyInLiBJZiB5b3UgZGlkIGhhbmRsZSB0aGUgYWN0aW9uLCB0aGlzIGVycm9yIGNhbiBiZSBjYXVz
ZWQgYnkgcmV0dXJuaW5nIHRydWUgZnJvbSBhbiBhY3Rpb24gaGFuZGxlciBpbiBhIGNvbnRyb2xs
ZXIsIGNhdXNpbmcgdGhlIGFjdGlvbiB0byBidWJibGUuIil9ZnVuY3Rpb24gYihlLHQsbil7dmFy
IHIsaSxvPWUuX3JvdXRlck1pY3JvbGliLHM9by5hcHBseUludGVudCh0LG4pLGE9cy5oYW5kbGVy
SW5mb3MsdT1zLnBhcmFtcworZm9yKHI9MDtyPGEubGVuZ3RoOysrcilpPWFbcl0saS5pc1Jlc29s
dmVkP3VbaS5uYW1lXT1pLnBhcmFtczp1W2kubmFtZV09aS5zZXJpYWxpemUoaS5jb250ZXh0KQor
cmV0dXJuIHN9ZnVuY3Rpb24gXyhlKXt2YXIgbj1lLl9yb3V0ZXJNaWNyb2xpYi5jdXJyZW50SGFu
ZGxlckluZm9zCitpZigwIT09bi5sZW5ndGgpe3ZhciBpPVIuX3JvdXRlUGF0aChuKSxvPW5bbi5s
ZW5ndGgtMV0ubmFtZSxzPWUuZ2V0KCJsb2NhdGlvbiIpLmdldFVSTCgpOygwLHIuc2V0KShlLCJj
dXJyZW50UGF0aCIsaSksKDAsci5zZXQpKGUsImN1cnJlbnRSb3V0ZU5hbWUiLG8pLCgwLHIuc2V0
KShlLCJjdXJyZW50VVJMIixzKQordmFyIGE9KDAsdC5nZXRPd25lcikoZSkubG9va3VwKCJjb250
cm9sbGVyOmFwcGxpY2F0aW9uIikKK2EmJigiY3VycmVudFBhdGgiaW4gYXx8KDAsci5kZWZpbmVQ
cm9wZXJ0eSkoYSwiY3VycmVudFBhdGgiKSwoMCxyLnNldCkoYSwiY3VycmVudFBhdGgiLGkpLCJj
dXJyZW50Um91dGVOYW1lImluIGF8fCgwLHIuZGVmaW5lUHJvcGVydHkpKGEsImN1cnJlbnRSb3V0
ZU5hbWUiKSwoMCxyLnNldCkoYSwiY3VycmVudFJvdXRlTmFtZSIsbykpfX1mdW5jdGlvbiB3KGUs
bil7dmFyIHI9Yy5kZWZhdWx0LmNyZWF0ZSh7ZW1iZXJSb3V0ZXI6bixyb3V0ZXJKczpuLl9yb3V0
ZXJNaWNyb2xpYixyb3V0ZXJKc1N0YXRlOmUuc3RhdGV9KQorbi5jdXJyZW50U3RhdGV8fG4uc2V0
KCJjdXJyZW50U3RhdGUiLHIpLG4uc2V0KCJ0YXJnZXRTdGF0ZSIsciksZS5wcm9taXNlPWUuY2F0
Y2goZnVuY3Rpb24oZSl7dmFyIHI9KDAsdC5ndWlkRm9yKShlKQoraWYoIW4uX2lzRXJyb3JIYW5k
bGVkKHIpKXRocm93IGUKK24uX2NsZWFySGFuZGxlZEVycm9yKHIpfSl9ZnVuY3Rpb24gRShlKXty
ZXR1cm4ic3RyaW5nIj09dHlwZW9mIGUmJigiIj09PWV8fCIvIj09PWVbMF0pfWZ1bmN0aW9uIHgo
ZSx0LG4scil7dmFyIGksbyxzPWUuX3F1ZXJ5UGFyYW1zRm9yKHQpCitmb3IodmFyIGEgaW4gbilu
Lmhhc093blByb3BlcnR5KGEpJiYoaT1uW2FdLG89cy5tYXBbYV0scihhLGksbykpfWZ1bmN0aW9u
IEMoZSx0KXtpZihlKWZvcih2YXIgbixyLGk9W2VdO2kubGVuZ3RoPjA7KXtpZihuPWkuc2hpZnQo
KSxuLnJlbmRlci5uYW1lPT09dClyZXR1cm4gbgorcj1uLm91dGxldHMKK2Zvcih2YXIgbyBpbiBy
KWkucHVzaChyW29dKX19ZnVuY3Rpb24gTyhlLHQsbil7dmFyIGk9dm9pZCAwLG89e3JlbmRlcjpu
LG91dGxldHM6T2JqZWN0LmNyZWF0ZShudWxsKSx3YXNVc2VkOiExfQorcmV0dXJuIGk9bi5pbnRv
P0MoZSxuLmludG8pOnQsaT8oMCxyLnNldCkoaS5vdXRsZXRzLG4ub3V0bGV0LG8pOm4uaW50bz9B
KGUsbi5pbnRvLG8pOmU9byx7bGl2ZVJvdXRlczplLG93blN0YXRlOm99fWZ1bmN0aW9uIEEoZSx0
LG4pe2Uub3V0bGV0cy5fX2VtYmVyX29ycGhhbnNfX3x8KGUub3V0bGV0cy5fX2VtYmVyX29ycGhh
bnNfXz17cmVuZGVyOntuYW1lOiJfX2VtYmVyX29ycGhhbnNfXyJ9LG91dGxldHM6T2JqZWN0LmNy
ZWF0ZShudWxsKX0pLGUub3V0bGV0cy5fX2VtYmVyX29ycGhhbnNfXy5vdXRsZXRzW3RdPW4sci5y
dW4uc2NoZWR1bGUoImFmdGVyUmVuZGVyIixmdW5jdGlvbigpe30pfWZ1bmN0aW9uIFQoZSx0LG4p
e3ZhciByPUMoZSxuLnJvdXRlTmFtZSkKK3JldHVybiByfHwodC5vdXRsZXRzLm1haW49e3JlbmRl
cjp7bmFtZTpuLnJvdXRlTmFtZSxvdXRsZXQ6Im1haW4ifSxvdXRsZXRzOnt9fSx0KX1lLnRyaWdn
ZXJFdmVudD12Cit2YXIgUz1BcnJheS5wcm90b3R5cGUuc2xpY2UsUj1vLk9iamVjdC5leHRlbmQo
by5FdmVudGVkLHtsb2NhdGlvbjoiaGFzaCIscm9vdFVSTDoiLyIsX2luaXRSb3V0ZXJKczpmdW5j
dGlvbigpe3ZhciBlPXRoaXMuX3JvdXRlck1pY3JvbGliPW5ldyBwLmRlZmF1bHQKK2UudHJpZ2dl
ckV2ZW50PXYsZS5fdHJpZ2dlcldpbGxDaGFuZ2VDb250ZXh0PWYsZS5fdHJpZ2dlcldpbGxMZWF2
ZT1mCit2YXIgdD10aGlzLmNvbnN0cnVjdG9yLmRzbENhbGxiYWNrc3x8W2ZdLG49dGhpcy5fYnVp
bGREU0woKQorbi5yb3V0ZSgiYXBwbGljYXRpb24iLHtwYXRoOiIvIixyZXNldE5hbWVzcGFjZToh
MCxvdmVycmlkZU5hbWVBc3NlcnRpb246ITB9LGZ1bmN0aW9uKCl7dmFyIGUKK2ZvcihlPTA7ZTx0
Lmxlbmd0aDtlKyspdFtlXS5jYWxsKHRoaXMpfSksZS5tYXAobi5nZW5lcmF0ZSgpKX0sX2J1aWxk
RFNMOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5faGFzTW9kdWxlQmFzZWRSZXNvbHZlcigpLG49e2Vu
YWJsZUxvYWRpbmdTdWJzdGF0ZXM6ISFlfSxyPSgwLHQuZ2V0T3duZXIpKHRoaXMpLGk9dGhpcwor
cmV0dXJuIG4ucmVzb2x2ZVJvdXRlTWFwPWZ1bmN0aW9uKGUpe3JldHVybiByLmZhY3RvcnlGb3Io
InJvdXRlLW1hcDoiK2UpfSxuLmFkZFJvdXRlRm9yRW5naW5lPWZ1bmN0aW9uKGUsdCl7aS5fZW5n
aW5lSW5mb0J5Um91dGVbZV18fChpLl9lbmdpbmVJbmZvQnlSb3V0ZVtlXT10KX0sbmV3IGEuZGVm
YXVsdChudWxsLG4pfSxpbml0OmZ1bmN0aW9uKCl7dGhpcy5fc3VwZXIuYXBwbHkodGhpcyxhcmd1
bWVudHMpLHRoaXMuY3VycmVudFVSTD1udWxsLHRoaXMuY3VycmVudFJvdXRlTmFtZT1udWxsLHRo
aXMuY3VycmVudFBhdGg9bnVsbCx0aGlzLl9xcENhY2hlPU9iamVjdC5jcmVhdGUobnVsbCksdGhp
cy5fcmVzZXRRdWV1ZWRRdWVyeVBhcmFtZXRlckNoYW5nZXMoKSx0aGlzLl9oYW5kbGVkRXJyb3Jz
PSgwLHQuZGljdGlvbmFyeSkobnVsbCksdGhpcy5fZW5naW5lSW5zdGFuY2VzPU9iamVjdC5jcmVh
dGUobnVsbCksdGhpcy5fZW5naW5lSW5mb0J5Um91dGU9T2JqZWN0LmNyZWF0ZShudWxsKX0sX3Jl
c2V0UXVldWVkUXVlcnlQYXJhbWV0ZXJDaGFuZ2VzOmZ1bmN0aW9uKCl7dGhpcy5fcXVldWVkUVBD
aGFuZ2VzPXt9fSx1cmw6KDAsci5jb21wdXRlZCkoZnVuY3Rpb24oKXtyZXR1cm4oMCxyLmdldCko
dGhpcywibG9jYXRpb24iKS5nZXRVUkwoKX0pLF9oYXNNb2R1bGVCYXNlZFJlc29sdmVyOmZ1bmN0
aW9uKCl7dmFyIGU9KDAsdC5nZXRPd25lcikodGhpcykKK2lmKCFlKXJldHVybiExCit2YXIgbj1l
LmFwcGxpY2F0aW9uJiZlLmFwcGxpY2F0aW9uLl9fcmVnaXN0cnlfXyYmZS5hcHBsaWNhdGlvbi5f
X3JlZ2lzdHJ5X18ucmVzb2x2ZXIKK3JldHVybiEhbiYmISFuLm1vZHVsZUJhc2VkUmVzb2x2ZXJ9
LHN0YXJ0Um91dGluZzpmdW5jdGlvbigpe3ZhciBlLHQ9KDAsci5nZXQpKHRoaXMsImluaXRpYWxV
UkwiKQoraWYodGhpcy5zZXR1cFJvdXRlcigpJiYodm9pZCAwPT09dCYmKHQ9KDAsci5nZXQpKHRo
aXMsImxvY2F0aW9uIikuZ2V0VVJMKCkpLChlPXRoaXMuaGFuZGxlVVJMKHQpKSYmZS5lcnJvcikp
dGhyb3cgZS5lcnJvcn0sc2V0dXBSb3V0ZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzCit0aGlzLl9p
bml0Um91dGVySnMoKSx0aGlzLl9zZXR1cExvY2F0aW9uKCkKK3ZhciB0PSgwLHIuZ2V0KSh0aGlz
LCJsb2NhdGlvbiIpCityZXR1cm4hKDAsci5nZXQpKHQsImNhbmNlbFJvdXRlclNldHVwIikmJih0
aGlzLl9zZXR1cFJvdXRlcih0KSx0Lm9uVXBkYXRlVVJMKGZ1bmN0aW9uKHQpe2UuaGFuZGxlVVJM
KHQpfSksITApfSxkaWRUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7Xyh0aGlzKSx0aGlzLl9jYW5jZWxT
bG93VHJhbnNpdGlvblRpbWVyKCksdGhpcy5ub3RpZnlQcm9wZXJ0eUNoYW5nZSgidXJsIiksdGhp
cy5zZXQoImN1cnJlbnRTdGF0ZSIsdGhpcy50YXJnZXRTdGF0ZSksci5ydW4ub25jZSh0aGlzLHRo
aXMudHJpZ2dlciwiZGlkVHJhbnNpdGlvbiIpfSxfc2V0T3V0bGV0czpmdW5jdGlvbigpe2lmKCF0
aGlzLmlzRGVzdHJveWluZyYmIXRoaXMuaXNEZXN0cm95ZWQpe3ZhciBlLG4scixpLG8scyxhLHUs
bD10aGlzLl9yb3V0ZXJNaWNyb2xpYi5jdXJyZW50SGFuZGxlckluZm9zLGM9dm9pZCAwLHA9dm9p
ZCAwLGY9bnVsbAoraWYobCl7Zm9yKGU9MDtlPGwubGVuZ3RoO2UrKyl7Zm9yKGM9bFtlXS5oYW5k
bGVyLG49Yy5jb25uZWN0aW9ucyxyPXZvaWQgMCxpPTA7aTxuLmxlbmd0aDtpKyspbz1PKGYscCxu
W2ldKSxmPW8ubGl2ZVJvdXRlcyxvLm93blN0YXRlLnJlbmRlci5uYW1lIT09Yy5yb3V0ZU5hbWUm
JiJtYWluIiE9PW8ub3duU3RhdGUucmVuZGVyLm91dGxldHx8KHI9by5vd25TdGF0ZSkKKzA9PT1u
Lmxlbmd0aCYmKHI9VChmLHAsYykpLHA9cn1mJiYodGhpcy5fdG9wbGV2ZWxWaWV3P3RoaXMuX3Rv
cGxldmVsVmlldy5zZXRPdXRsZXRTdGF0ZShmKToocz0oMCx0LmdldE93bmVyKSh0aGlzKSxhPXMu
ZmFjdG9yeUZvcigidmlldzotb3V0bGV0IiksdGhpcy5fdG9wbGV2ZWxWaWV3PWEuY3JlYXRlKCks
dGhpcy5fdG9wbGV2ZWxWaWV3LnNldE91dGxldFN0YXRlKGYpLHU9cy5sb29rdXAoIi1hcHBsaWNh
dGlvbi1pbnN0YW5jZTptYWluIiksdS5kaWRDcmVhdGVSb290Vmlldyh0aGlzLl90b3BsZXZlbFZp
ZXcpKSl9fX0sd2lsbFRyYW5zaXRpb246ZnVuY3Rpb24oZSx0LG4pe3IucnVuLm9uY2UodGhpcyx0
aGlzLnRyaWdnZXIsIndpbGxUcmFuc2l0aW9uIixuKX0saGFuZGxlVVJMOmZ1bmN0aW9uKGUpe3Jl
dHVybiBlPWUuc3BsaXQoLyMoLispPy8pWzBdLHRoaXMuX2RvVVJMVHJhbnNpdGlvbigiaGFuZGxl
VVJMIixlKX0sX2RvVVJMVHJhbnNpdGlvbjpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX3JvdXRl
ck1pY3JvbGliW2VdKHR8fCIvIikKK3JldHVybiB3KG4sdGhpcyksbn0sdHJhbnNpdGlvblRvOmZ1
bmN0aW9uKCl7dmFyIGUsdCxuLHI9dm9pZCAwCitmb3IoZT1hcmd1bWVudHMubGVuZ3RoLHQ9QXJy
YXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl0KK2lmKEUodFswXSkpcmV0dXJuIHRo
aXMuX2RvVVJMVHJhbnNpdGlvbigidHJhbnNpdGlvblRvIix0WzBdKQordmFyIGk9dFt0Lmxlbmd0
aC0xXQorcj1pJiZpLmhhc093blByb3BlcnR5KCJxdWVyeVBhcmFtcyIpP3QucG9wKCkucXVlcnlQ
YXJhbXM6e30KK3ZhciBvPXQuc2hpZnQoKQorcmV0dXJuIHRoaXMuX2RvVHJhbnNpdGlvbihvLHQs
cil9LGludGVybWVkaWF0ZVRyYW5zaXRpb25UbzpmdW5jdGlvbigpe3ZhciBlOyhlPXRoaXMuX3Jv
dXRlck1pY3JvbGliKS5pbnRlcm1lZGlhdGVUcmFuc2l0aW9uVG8uYXBwbHkoZSxhcmd1bWVudHMp
LF8odGhpcyl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNpdGlvblRv
LmFwcGx5KHRoaXMsYXJndW1lbnRzKS5tZXRob2QoInJlcGxhY2UiKX0sZ2VuZXJhdGU6ZnVuY3Rp
b24oKXt2YXIgZSx0PShlPXRoaXMuX3JvdXRlck1pY3JvbGliKS5nZW5lcmF0ZS5hcHBseShlLGFy
Z3VtZW50cykKK3JldHVybiB0aGlzLmxvY2F0aW9uLmZvcm1hdFVSTCh0KX0saXNBY3RpdmU6ZnVu
Y3Rpb24oKXt2YXIgZQorcmV0dXJuKGU9dGhpcy5fcm91dGVyTWljcm9saWIpLmlzQWN0aXZlLmFw
cGx5KGUsYXJndW1lbnRzKX0saXNBY3RpdmVJbnRlbnQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0
aGlzLmN1cnJlbnRTdGF0ZS5pc0FjdGl2ZUludGVudChlLHQsbil9LHNlbmQ6ZnVuY3Rpb24oKXt2
YXIgZTsoZT10aGlzLl9yb3V0ZXJNaWNyb2xpYikudHJpZ2dlci5hcHBseShlLGFyZ3VtZW50cyl9
LGhhc1JvdXRlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9yb3V0ZXJNaWNyb2xpYi5oYXNSb3V0
ZShlKX0scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9yb3V0ZXJNaWNyb2xpYiYmdGhpcy5fcm91dGVy
TWljcm9saWIucmVzZXQoKX0sd2lsbERlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl90b3BsZXZlbFZp
ZXcmJih0aGlzLl90b3BsZXZlbFZpZXcuZGVzdHJveSgpLHRoaXMuX3RvcGxldmVsVmlldz1udWxs
KSx0aGlzLl9zdXBlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5yZXNldCgpCit2YXIgZT10
aGlzLl9lbmdpbmVJbnN0YW5jZXMKK2Zvcih2YXIgdCBpbiBlKWZvcih2YXIgbiBpbiBlW3RdKSgw
LHIucnVuKShlW3RdW25dLCJkZXN0cm95Iil9LF9hY3RpdmVRUENoYW5nZWQ6ZnVuY3Rpb24oZSx0
KXt0aGlzLl9xdWV1ZWRRUENoYW5nZXNbZV09dCxyLnJ1bi5vbmNlKHRoaXMsdGhpcy5fZmlyZVF1
ZXJ5UGFyYW1UcmFuc2l0aW9uKX0sX3VwZGF0aW5nUVBDaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMu
X3FwVXBkYXRlc3x8KHRoaXMuX3FwVXBkYXRlcz17fSksdGhpcy5fcXBVcGRhdGVzW2VdPSEwfSxf
ZmlyZVF1ZXJ5UGFyYW1UcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dGhpcy50cmFuc2l0aW9uVG8oe3F1
ZXJ5UGFyYW1zOnRoaXMuX3F1ZXVlZFFQQ2hhbmdlc30pLHRoaXMuX3Jlc2V0UXVldWVkUXVlcnlQ
YXJhbWV0ZXJDaGFuZ2VzKCl9LF9zZXR1cExvY2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGUsbixpPSgw
LHIuZ2V0KSh0aGlzLCJsb2NhdGlvbiIpLG89KDAsci5nZXQpKHRoaXMsInJvb3RVUkwiKSxzPSgw
LHQuZ2V0T3duZXIpKHRoaXMpCisic3RyaW5nIj09dHlwZW9mIGkmJnMmJihlPXMubG9va3VwKCJs
b2NhdGlvbjoiK2kpLHZvaWQgMCE9PWU/aT0oMCxyLnNldCkodGhpcywibG9jYXRpb24iLGUpOihu
PXtpbXBsZW1lbnRhdGlvbjppfSxpPSgwLHIuc2V0KSh0aGlzLCJsb2NhdGlvbiIsdS5kZWZhdWx0
LmNyZWF0ZShuKSkpKSxudWxsIT09aSYmIm9iamVjdCI9PXR5cGVvZiBpJiYobyYmKDAsci5zZXQp
KGksInJvb3RVUkwiLG8pLCJmdW5jdGlvbiI9PXR5cGVvZiBpLmRldGVjdCYmaS5kZXRlY3QoKSwi
ZnVuY3Rpb24iPT10eXBlb2YgaS5pbml0U3RhdGUmJmkuaW5pdFN0YXRlKCkpfSxfZ2V0SGFuZGxl
ckZ1bmN0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxuPU9iamVjdC5jcmVhdGUobnVsbCkscj0o
MCx0LmdldE93bmVyKSh0aGlzKQorcmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBpLG8sYT10LHU9cixs
PWUuX2VuZ2luZUluZm9CeVJvdXRlW2FdCitsJiYoaT1lLl9nZXRFbmdpbmVJbnN0YW5jZShsKSx1
PWksYT1sLmxvY2FsRnVsbE5hbWUpCit2YXIgYz0icm91dGU6IithLHA9dS5sb29rdXAoYykKK2lm
KG5bdF0pcmV0dXJuIHAKK2lmKG5bdF09ITAscHx8KG89dS5mYWN0b3J5Rm9yKCJyb3V0ZTpiYXNp
YyIpLmNsYXNzLHUucmVnaXN0ZXIoYyxvLmV4dGVuZCgpKSxwPXUubG9va3VwKGMpKSxwLl9zZXRS
b3V0ZU5hbWUoYSksbCYmISgwLHMuaGFzRGVmYXVsdFNlcmlhbGl6ZSkocCkpdGhyb3cgbmV3IEVy
cm9yKCJEZWZpbmluZyBhIGN1c3RvbSBzZXJpYWxpemUgbWV0aG9kIG9uIGFuIEVuZ2luZSByb3V0
ZSBpcyBub3Qgc3VwcG9ydGVkLiIpCityZXR1cm4gcH19LF9nZXRTZXJpYWxpemVyRnVuY3Rpb246
ZnVuY3Rpb24oKXt2YXIgZT10aGlzCityZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49ZS5fZW5naW5l
SW5mb0J5Um91dGVbdF0KK2lmKG4pcmV0dXJuIG4uc2VyaWFsaXplTWV0aG9kfHxzLmRlZmF1bHRT
ZXJpYWxpemV9fSxfc2V0dXBSb3V0ZXI6ZnVuY3Rpb24oZSl7dmFyIHQsbj12b2lkIDAsaT10aGlz
LG89dGhpcy5fcm91dGVyTWljcm9saWIKK28uZ2V0SGFuZGxlcj10aGlzLl9nZXRIYW5kbGVyRnVu
Y3Rpb24oKSxvLmdldFNlcmlhbGl6ZXI9dGhpcy5fZ2V0U2VyaWFsaXplckZ1bmN0aW9uKCkKK3Zh
ciBzPWZ1bmN0aW9uKCl7ZS5zZXRVUkwobiksKDAsci5zZXQpKGksImN1cnJlbnRVUkwiLG4pfQor
by51cGRhdGVVUkw9ZnVuY3Rpb24oZSl7bj1lLHIucnVuLm9uY2Uocyl9LGUucmVwbGFjZVVSTCYm
KHQ9ZnVuY3Rpb24oKXtlLnJlcGxhY2VVUkwobiksKDAsci5zZXQpKGksImN1cnJlbnRVUkwiLG4p
fSxvLnJlcGxhY2VVUkw9ZnVuY3Rpb24oZSl7bj1lLHIucnVuLm9uY2UodCl9KSxvLmRpZFRyYW5z
aXRpb249ZnVuY3Rpb24oZSl7aS5kaWRUcmFuc2l0aW9uKGUpfSxvLndpbGxUcmFuc2l0aW9uPWZ1
bmN0aW9uKGUsdCxuKXtpLndpbGxUcmFuc2l0aW9uKGUsdCxuKX19LF9zZXJpYWxpemVRdWVyeVBh
cmFtczpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMKK3godGhpcyxlLHQsZnVuY3Rpb24oZSxyLGkp
e2k/KGRlbGV0ZSB0W2VdLHRbaS51cmxLZXldPWkucm91dGUuc2VyaWFsaXplUXVlcnlQYXJhbShy
LGkudXJsS2V5LGkudHlwZSkpOnZvaWQgMD09PXJ8fCh0W2VdPW4uX3NlcmlhbGl6ZVF1ZXJ5UGFy
YW0ociwoMCxvLnR5cGVPZikocikpKX0pfSxfc2VyaWFsaXplUXVlcnlQYXJhbTpmdW5jdGlvbihl
LHQpe3JldHVybiJhcnJheSI9PT10P0pTT04uc3RyaW5naWZ5KGUpOiIiK2V9LF9kZXNlcmlhbGl6
ZVF1ZXJ5UGFyYW1zOmZ1bmN0aW9uKGUsdCl7eCh0aGlzLGUsdCxmdW5jdGlvbihlLG4scil7ciYm
KGRlbGV0ZSB0W2VdLHRbci5wcm9wXT1yLnJvdXRlLmRlc2VyaWFsaXplUXVlcnlQYXJhbShuLHIu
dXJsS2V5LHIudHlwZSkpfSl9LF9kZXNlcmlhbGl6ZVF1ZXJ5UGFyYW06ZnVuY3Rpb24oZSx0KXty
ZXR1cm4iYm9vbGVhbiI9PT10PyJ0cnVlIj09PWU6Im51bWJlciI9PT10P051bWJlcihlKS52YWx1
ZU9mKCk6ImFycmF5Ij09PXQ/KDAsby5BKShKU09OLnBhcnNlKGUpKTplfSxfcHJ1bmVEZWZhdWx0
UXVlcnlQYXJhbVZhbHVlczpmdW5jdGlvbihlLHQpe3ZhciBuLHI9dGhpcy5fcXVlcnlQYXJhbXNG
b3IoZSkKK2Zvcih2YXIgaSBpbiB0KShuPXIubWFwW2ldKSYmbi5zZXJpYWxpemVkRGVmYXVsdFZh
bHVlPT09dFtpXSYmZGVsZXRlIHRbaV19LF9kb1RyYW5zaXRpb246ZnVuY3Rpb24oZSxuLHIpe3Zh
ciBpLG89ZXx8KDAsbC5nZXRBY3RpdmVUYXJnZXROYW1lKSh0aGlzLl9yb3V0ZXJNaWNyb2xpYiks
cz17fQordGhpcy5fcHJvY2Vzc0FjdGl2ZVRyYW5zaXRpb25RdWVyeVBhcmFtcyhvLG4scyxyKSwo
MCx0LmFzc2lnbikocyxyKSx0aGlzLl9wcmVwYXJlUXVlcnlQYXJhbXMobyxuLHMpCit2YXIgYT0o
MCxsLnJvdXRlQXJncykobyxuLHMpLHU9KGk9dGhpcy5fcm91dGVyTWljcm9saWIpLnRyYW5zaXRp
b25Uby5hcHBseShpLGEpCityZXR1cm4gdyh1LHRoaXMpLHV9LF9wcm9jZXNzQWN0aXZlVHJhbnNp
dGlvblF1ZXJ5UGFyYW1zOmZ1bmN0aW9uKGUsbixyLGkpe2lmKHRoaXMuX3JvdXRlck1pY3JvbGli
LmFjdGl2ZVRyYW5zaXRpb24pe3ZhciBvPXt9LHM9dGhpcy5fcXBVcGRhdGVzfHx7fQorZm9yKHZh
ciBhIGluIHRoaXMuX3JvdXRlck1pY3JvbGliLmFjdGl2ZVRyYW5zaXRpb24ucXVlcnlQYXJhbXMp
c1thXXx8KG9bYV09dGhpcy5fcm91dGVyTWljcm9saWIuYWN0aXZlVHJhbnNpdGlvbi5xdWVyeVBh
cmFtc1thXSkKK3RoaXMuX2Z1bGx5U2NvcGVRdWVyeVBhcmFtcyhlLG4saSksdGhpcy5fZnVsbHlT
Y29wZVF1ZXJ5UGFyYW1zKGUsbixvKSwoMCx0LmFzc2lnbikocixvKX19LF9wcmVwYXJlUXVlcnlQ
YXJhbXM6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWIodGhpcyxlLHQpCit0aGlzLl9oeWRyYXRlVW5z
dXBwbGllZFF1ZXJ5UGFyYW1zKHIsbiksdGhpcy5fc2VyaWFsaXplUXVlcnlQYXJhbXMoci5oYW5k
bGVySW5mb3MsbiksdGhpcy5fcHJ1bmVEZWZhdWx0UXVlcnlQYXJhbVZhbHVlcyhyLmhhbmRsZXJJ
bmZvcyxuKX0sX2dldFFQTWV0YTpmdW5jdGlvbihlKXt2YXIgdD1lLmhhbmRsZXIKK3JldHVybiB0
JiYoMCxyLmdldCkodCwiX3FwIil9LF9xdWVyeVBhcmFtc0ZvcjpmdW5jdGlvbihlKXt2YXIgbixy
LGksbyxzLGEsdT1lW2UubGVuZ3RoLTFdLm5hbWUKK2lmKHRoaXMuX3FwQ2FjaGVbdV0pcmV0dXJu
IHRoaXMuX3FwQ2FjaGVbdV0KK3ZhciBsPSEwLGM9e30scD17fSxmPVtdCitmb3Iobj0wO248ZS5s
ZW5ndGg7KytuKWlmKHI9dGhpcy5fZ2V0UVBNZXRhKGVbbl0pKXtmb3IoaT0wO2k8ci5xcHMubGVu
Z3RoO2krKylvPXIucXBzW2ldLHM9by51cmxLZXksYT1jW3NdLGEmJmEuY29udHJvbGxlck5hbWUh
PT1vLmNvbnRyb2xsZXJOYW1lJiZjW3NdLGNbc109byxmLnB1c2gobyk7KDAsdC5hc3NpZ24pKHAs
ci5tYXApfWVsc2UgbD0hMQordmFyIGg9e3FwczpmLG1hcDpwfQorcmV0dXJuIGwmJih0aGlzLl9x
cENhY2hlW3VdPWgpLGh9LF9mdWxseVNjb3BlUXVlcnlQYXJhbXM6ZnVuY3Rpb24oZSx0LG4pe3Zh
ciByLGksbyxzLGEsdSxsLGM9Yih0aGlzLGUsdCkscD1jLmhhbmRsZXJJbmZvcworZm9yKHI9MCxp
PXAubGVuZ3RoO3I8aTsrK3IpaWYobz10aGlzLl9nZXRRUE1ldGEocFtyXSkpZm9yKHM9MCxhPW8u
cXBzLmxlbmd0aDtzPGE7KytzKXU9by5xcHNbc10sKGw9dS5wcm9wIGluIG4mJnUucHJvcHx8dS5z
Y29wZWRQcm9wZXJ0eU5hbWUgaW4gbiYmdS5zY29wZWRQcm9wZXJ0eU5hbWV8fHUudXJsS2V5IGlu
IG4mJnUudXJsS2V5KSYmbCE9PXUuc2NvcGVkUHJvcGVydHlOYW1lJiYoblt1LnNjb3BlZFByb3Bl
cnR5TmFtZV09bltsXSxkZWxldGUgbltsXSl9LF9oeWRyYXRlVW5zdXBwbGllZFF1ZXJ5UGFyYW1z
OmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8scyxhLHUsYz1lLmhhbmRsZXJJbmZvcyxwPXRoaXMu
X2J1Y2tldENhY2hlCitmb3Iobj0wO248Yy5sZW5ndGg7KytuKWlmKHI9dGhpcy5fZ2V0UVBNZXRh
KGNbbl0pKWZvcihpPTAsbz1yLnFwcy5sZW5ndGg7aTxvOysraSlzPXIucXBzW2ldLGE9cy5wcm9w
IGluIHQmJnMucHJvcHx8cy5zY29wZWRQcm9wZXJ0eU5hbWUgaW4gdCYmcy5zY29wZWRQcm9wZXJ0
eU5hbWV8fHMudXJsS2V5IGluIHQmJnMudXJsS2V5LGE/YSE9PXMuc2NvcGVkUHJvcGVydHlOYW1l
JiYodFtzLnNjb3BlZFByb3BlcnR5TmFtZV09dFthXSxkZWxldGUgdFthXSk6KHU9KDAsbC5jYWxj
dWxhdGVDYWNoZUtleSkocy5yb3V0ZS5mdWxsUm91dGVOYW1lLHMucGFydHMsZS5wYXJhbXMpLHRb
cy5zY29wZWRQcm9wZXJ0eU5hbWVdPXAubG9va3VwKHUscy5wcm9wLHMuZGVmYXVsdFZhbHVlKSl9
LF9zY2hlZHVsZUxvYWRpbmdFdmVudDpmdW5jdGlvbihlLHQpe3RoaXMuX2NhbmNlbFNsb3dUcmFu
c2l0aW9uVGltZXIoKSx0aGlzLl9zbG93VHJhbnNpdGlvblRpbWVyPXIucnVuLnNjaGVkdWxlT25j
ZSgicm91dGVyVHJhbnNpdGlvbnMiLHRoaXMsIl9oYW5kbGVTbG93VHJhbnNpdGlvbiIsZSx0KX0s
Y3VycmVudFN0YXRlOm51bGwsdGFyZ2V0U3RhdGU6bnVsbCxfaGFuZGxlU2xvd1RyYW5zaXRpb246
ZnVuY3Rpb24oZSx0KXt0aGlzLl9yb3V0ZXJNaWNyb2xpYi5hY3RpdmVUcmFuc2l0aW9uJiYodGhp
cy5zZXQoInRhcmdldFN0YXRlIixjLmRlZmF1bHQuY3JlYXRlKHtlbWJlclJvdXRlcjp0aGlzLHJv
dXRlckpzOnRoaXMuX3JvdXRlck1pY3JvbGliLHJvdXRlckpzU3RhdGU6dGhpcy5fcm91dGVyTWlj
cm9saWIuYWN0aXZlVHJhbnNpdGlvbi5zdGF0ZX0pKSxlLnRyaWdnZXIoITAsImxvYWRpbmciLGUs
dCkpfSxfY2FuY2VsU2xvd1RyYW5zaXRpb25UaW1lcjpmdW5jdGlvbigpe3RoaXMuX3Nsb3dUcmFu
c2l0aW9uVGltZXImJnIucnVuLmNhbmNlbCh0aGlzLl9zbG93VHJhbnNpdGlvblRpbWVyKSx0aGlz
Ll9zbG93VHJhbnNpdGlvblRpbWVyPW51bGx9LF9tYXJrRXJyb3JBc0hhbmRsZWQ6ZnVuY3Rpb24o
ZSl7dGhpcy5faGFuZGxlZEVycm9yc1tlXT0hMH0sX2lzRXJyb3JIYW5kbGVkOmZ1bmN0aW9uKGUp
e3JldHVybiB0aGlzLl9oYW5kbGVkRXJyb3JzW2VdfSxfY2xlYXJIYW5kbGVkRXJyb3I6ZnVuY3Rp
b24oZSl7ZGVsZXRlIHRoaXMuX2hhbmRsZWRFcnJvcnNbZV19LF9nZXRFbmdpbmVJbnN0YW5jZTpm
dW5jdGlvbihlKXt2YXIgbixyPWUubmFtZSxpPWUuaW5zdGFuY2VJZCxvPWUubW91bnRQb2ludCxz
PXRoaXMuX2VuZ2luZUluc3RhbmNlcworc1tyXXx8KHNbcl09T2JqZWN0LmNyZWF0ZShudWxsKSkK
K3ZhciBhPXNbcl1baV0KK3JldHVybiBhfHwobj0oMCx0LmdldE93bmVyKSh0aGlzKSxhPW4uYnVp
bGRDaGlsZEVuZ2luZUluc3RhbmNlKHIse3JvdXRhYmxlOiEwLG1vdW50UG9pbnQ6b30pLGEuYm9v
dCgpLHNbcl1baV09YSksYX19KSxrPXt3aWxsUmVzb2x2ZU1vZGVsOmZ1bmN0aW9uKGUsdCl7dC5y
b3V0ZXIuX3NjaGVkdWxlTG9hZGluZ0V2ZW50KGUsdCl9LGVycm9yOmZ1bmN0aW9uKGUsdCxuKXt2
YXIgcj10LnN0YXRlLmhhbmRsZXJJbmZvcyxpPW4ucm91dGVyCitoKG4scixmdW5jdGlvbih0KXtp
ZihuIT09dCYmKHI9Zyh0LCJlcnJvciIpKSlyZXR1cm4gaS5pbnRlcm1lZGlhdGVUcmFuc2l0aW9u
VG8ocixlKSwhMQordmFyIHIsbz1tKHQsImVycm9yIikKK3JldHVybiFvfHwoaS5pbnRlcm1lZGlh
dGVUcmFuc2l0aW9uVG8obyxlKSwhMSl9KSxkKGUsIkVycm9yIHdoaWxlIHByb2Nlc3Npbmcgcm91
dGU6ICIrdC50YXJnZXROYW1lKX0sbG9hZGluZzpmdW5jdGlvbihlLHQpe3ZhciBuPWUuc3RhdGUu
aGFuZGxlckluZm9zLHI9dC5yb3V0ZXIKK2godCxuLGZ1bmN0aW9uKG4pe2lmKHQhPT1uJiYoaT1n
KG4sImxvYWRpbmciKSkpcmV0dXJuIHIuaW50ZXJtZWRpYXRlVHJhbnNpdGlvblRvKGkpLCExCit2
YXIgaSxvPW0obiwibG9hZGluZyIpCityZXR1cm4gbz8oci5pbnRlcm1lZGlhdGVUcmFuc2l0aW9u
VG8obyksITEpOmUucGl2b3RIYW5kbGVyIT09bn0pfX0KK1IucmVvcGVuQ2xhc3Moe3JvdXRlcjpu
dWxsLG1hcDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5kc2xDYWxsYmFja3N8fCh0aGlzLmRzbENh
bGxiYWNrcz1bXSx0aGlzLnJlb3BlbkNsYXNzKHtkc2xDYWxsYmFja3M6dGhpcy5kc2xDYWxsYmFj
a3N9KSksdGhpcy5kc2xDYWxsYmFja3MucHVzaChlKSx0aGlzfSxfcm91dGVQYXRoOmZ1bmN0aW9u
KGUpe3ZhciB0LG49W10scj12b2lkIDAsaT12b2lkIDAsbz12b2lkIDAKK2Zvcih0PTE7dDxlLmxl
bmd0aDt0Kyspe2ZvcihyPWVbdF0ubmFtZSxpPXIuc3BsaXQoIi4iKSxvPVMuY2FsbChuKTtvLmxl
bmd0aCYmIWZ1bmN0aW9uKGUsdCl7dmFyIG4KK2ZvcihuPTA7bjxlLmxlbmd0aDsrK24paWYoZVtu
XSE9PXRbbl0pcmV0dXJuITEKK3JldHVybiEwfShvLGkpOylvLnNoaWZ0KCkKK24ucHVzaC5hcHBs
eShuLGkuc2xpY2Uoby5sZW5ndGgpKX1yZXR1cm4gbi5qb2luKCIuIil9fSksKDAsci5kZXByZWNh
dGVQcm9wZXJ0eSkoUi5wcm90b3R5cGUsInJvdXRlciIsIl9yb3V0ZXJNaWNyb2xpYiIse2lkOiJl
bWJlci1yb3V0ZXIucm91dGVyIix1bnRpbDoiMi4xNiIsdXJsOiJodHRwOi8vZW1iZXJqcy5jb20v
ZGVwcmVjYXRpb25zL3YyLngvI3RvY19lbWJlci1yb3V0ZXItcm91dGVyLXJlbmFtZWQtdG8tZW1i
ZXItcm91dGVyLV9yb3V0ZXJtaWNyb2xpYiJ9KSxlLmRlZmF1bHQ9Un0pLGUoImVtYmVyLXJvdXRp
bmcvc3lzdGVtL3JvdXRlcl9zdGF0ZSIsWyJleHBvcnRzIiwiZW1iZXItdXRpbHMiLCJlbWJlci1t
ZXRhbCIsImVtYmVyLXJ1bnRpbWUiXSxmdW5jdGlvbihlLHQsbixyKXsidXNlIHN0cmljdCIKK2Z1
bmN0aW9uIGkoZSx0KXt2YXIgbj12b2lkIDAKK2ZvcihuIGluIGUpaWYoZS5oYXNPd25Qcm9wZXJ0
eShuKSYmZVtuXSE9PXRbbl0pcmV0dXJuITEKK2ZvcihuIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0
eShuKSYmZVtuXSE9PXRbbl0pcmV0dXJuITEKK3JldHVybiEwfWUuZGVmYXVsdD1yLk9iamVjdC5l
eHRlbmQoe2VtYmVyUm91dGVyOm51bGwscm91dGVySnM6bnVsbCxyb3V0ZXJKc1N0YXRlOm51bGws
aXNBY3RpdmVJbnRlbnQ6ZnVuY3Rpb24oZSxyLG8scyl7dmFyIGEsdT10aGlzLnJvdXRlckpzU3Rh
dGUKK2lmKCF0aGlzLnJvdXRlckpzLmlzQWN0aXZlSW50ZW50KGUscixudWxsLHUpKXJldHVybiEx
Cit2YXIgbD0oMCxuLmlzRW1wdHkpKE9iamVjdC5rZXlzKG8pKQorcmV0dXJuIShzJiYhbCl8fChh
PXt9LCgwLHQuYXNzaWduKShhLG8pLHRoaXMuZW1iZXJSb3V0ZXIuX3ByZXBhcmVRdWVyeVBhcmFt
cyhlLHIsYSksaShhLHUucXVlcnlQYXJhbXMpKX19KX0pLGUoImVtYmVyLXJvdXRpbmcvdXRpbHMi
LFsiZXhwb3J0cyIsImVtYmVyLXV0aWxzIiwiZW1iZXItbWV0YWwiLCJlbWJlci1kZWJ1ZyJdLGZ1
bmN0aW9uKGUsdCxuLHIpeyJ1c2Ugc3RyaWN0IgorZnVuY3Rpb24gaShlLHQpe3ZhciBuLHIsaT1l
LnNwbGl0KCIuIiksbz0iIgorZm9yKG49MDtuPGkubGVuZ3RoJiYocj1pLnNsaWNlKDAsbisxKS5q
b2luKCIuIiksMD09PXQuaW5kZXhPZihyKSk7bisrKW89cgorcmV0dXJuIG99ZnVuY3Rpb24gbyhl
LG4pe3ZhciByLGk9ZSxvPXZvaWQgMAorInN0cmluZyI9PXR5cGVvZiBpJiYobz17fSxvW2ldPXth
czpudWxsfSxpPW8pCitmb3IodmFyIHMgaW4gaSl7aWYoIWkuaGFzT3duUHJvcGVydHkocykpcmV0
dXJuCityPWlbc10sInN0cmluZyI9PXR5cGVvZiByJiYocj17YXM6cn0pLG89bltzXXx8e2FzOm51
bGwsc2NvcGU6Im1vZGVsIn0sKDAsdC5hc3NpZ24pKG8sciksbltzXT1vfX1mdW5jdGlvbiBzKGUp
e3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmKCIiPT09ZXx8Ii8iPT09ZS5jaGFyQXQoMCkpfWUu
cm91dGVBcmdzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1bXQorcmV0dXJuInN0cmluZyI9PXR5cGVv
ZiBlJiZyLnB1c2goIiIrZSksci5wdXNoLmFwcGx5KHIsdCksci5wdXNoKHtxdWVyeVBhcmFtczpu
fSkscn0sZS5nZXRBY3RpdmVUYXJnZXROYW1lPWZ1bmN0aW9uKGUpe3ZhciB0PWUuYWN0aXZlVHJh
bnNpdGlvbj9lLmFjdGl2ZVRyYW5zaXRpb24uc3RhdGUuaGFuZGxlckluZm9zOmUuc3RhdGUuaGFu
ZGxlckluZm9zCityZXR1cm4gdFt0Lmxlbmd0aC0xXS5uYW1lfSxlLnN0YXNoUGFyYW1OYW1lcz1m
dW5jdGlvbihlLHQpe2lmKCF0Ll9uYW1lc1N0YXNoZWQpe3ZhciBuLHIsaSxvLHM9dFt0Lmxlbmd0
aC0xXS5uYW1lLGE9ZS5fcm91dGVyTWljcm9saWIucmVjb2duaXplci5oYW5kbGVyc0ZvcihzKSx1
PW51bGwKK2ZvcihuPTA7bjx0Lmxlbmd0aDsrK24pcj10W25dLGk9YVtuXS5uYW1lcyxpLmxlbmd0
aCYmKHU9ciksci5fbmFtZXM9aSxvPXIuaGFuZGxlcixvLl9zdGFzaE5hbWVzKHIsdSkKK3QuX25h
bWVzU3Rhc2hlZD0hMH19LGUuY2FsY3VsYXRlQ2FjaGVLZXk9ZnVuY3Rpb24oZSl7dmFyIHQscixv
LHMsdSxsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50
c1sxXTpbXSxjPWFyZ3VtZW50c1syXSxwPSIiCitmb3IodD0wO3Q8bC5sZW5ndGg7Kyt0KXI9bFt0
XSxvPWkoZSxyKSxzPXZvaWQgMCxjJiYobyYmbyBpbiBjPyh1PTA9PT1yLmluZGV4T2Yobyk/ci5z
dWJzdHIoby5sZW5ndGgrMSk6cixzPSgwLG4uZ2V0KShjW29dLHUpKTpzPSgwLG4uZ2V0KShjLHIp
KSxwKz0iOjoiK3IrIjoiK3MKK3JldHVybiBlK3AucmVwbGFjZShhLCItIil9LGUubm9ybWFsaXpl
Q29udHJvbGxlclF1ZXJ5UGFyYW1zPWZ1bmN0aW9uKGUpe3ZhciB0LG49e30KK2Zvcih0PTA7dDxl
Lmxlbmd0aDsrK3QpbyhlW3RdLG4pCityZXR1cm4gbn0sZS5wcmVmaXhSb3V0ZU5hbWVBcmc9ZnVu
Y3Rpb24oZSxuKXt2YXIgaT1uWzBdLG89KDAsdC5nZXRPd25lcikoZSksYT1vLm1vdW50UG9pbnQK
K2lmKG8ucm91dGFibGUmJiJzdHJpbmciPT10eXBlb2YgaSl7aWYocyhpKSl0aHJvdyBuZXcgci5F
cnJvcigiUHJvZ3JhbW1hdGljIHRyYW5zaXRpb25zIGJ5IFVSTCBjYW5ub3QgYmUgdXNlZCB3aXRo
aW4gYW4gRW5naW5lLiBQbGVhc2UgdXNlIHRoZSByb3V0ZSBuYW1lIGluc3RlYWQuIikKK2k9YSsi
LiIraSxuWzBdPWl9cmV0dXJuIG59Cit2YXIgYT0vXC4vZ30pLGUoImVtYmVyLXJ1bnRpbWUvY29t
cGFyZSIsWyJleHBvcnRzIiwiZW1iZXItcnVudGltZS91dGlscyIsImVtYmVyLXJ1bnRpbWUvbWl4
aW5zL2NvbXBhcmFibGUiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiCitmdW5jdGlvbiBy
KGUsdCl7dmFyIG49ZS10CityZXR1cm4obj4wKS0objwwKX1mdW5jdGlvbiBpKGUscyl7aWYoZT09
PXMpcmV0dXJuIDAKK3ZhciBhLHUsbCxjLHAsZj0oMCx0LnR5cGVPZikoZSksaD0oMCx0LnR5cGVP
ZikocykKK2lmKG4uZGVmYXVsdCl7aWYoImluc3RhbmNlIj09PWYmJm4uZGVmYXVsdC5kZXRlY3Qo
ZSkmJmUuY29uc3RydWN0b3IuY29tcGFyZSlyZXR1cm4gZS5jb25zdHJ1Y3Rvci5jb21wYXJlKGUs
cykKK2lmKCJpbnN0YW5jZSI9PT1oJiZuLmRlZmF1bHQuZGV0ZWN0KHMpJiZzLmNvbnN0cnVjdG9y
LmNvbXBhcmUpcmV0dXJuLTEqcy5jb25zdHJ1Y3Rvci5jb21wYXJlKHMsZSl9dmFyIGQ9cihvW2Zd
LG9baF0pCitpZigwIT09ZClyZXR1cm4gZAorc3dpdGNoKGYpe2Nhc2UiYm9vbGVhbiI6Y2FzZSJu
dW1iZXIiOnJldHVybiByKGUscykKK2Nhc2Uic3RyaW5nIjpyZXR1cm4gcihlLmxvY2FsZUNvbXBh
cmUocyksMCkKK2Nhc2UiYXJyYXkiOmZvcihhPWUubGVuZ3RoLHU9cy5sZW5ndGgsbD1NYXRoLm1p
bihhLHUpLGM9MDtjPGw7YysrKWlmKDAhPT0ocD1pKGVbY10sc1tjXSkpKXJldHVybiBwCityZXR1
cm4gcihhLHUpCitjYXNlImluc3RhbmNlIjpyZXR1cm4gbi5kZWZhdWx0JiZuLmRlZmF1bHQuZGV0
ZWN0KGUpP2UuY29tcGFyZShlLHMpOjAKK2Nhc2UiZGF0ZSI6cmV0dXJuIHIoZS5nZXRUaW1lKCks
cy5nZXRUaW1lKCkpCitkZWZhdWx0OnJldHVybiAwfX1lLmRlZmF1bHQ9aQordmFyIG89e3VuZGVm
aW5lZDowLG51bGw6MSxib29sZWFuOjIsbnVtYmVyOjMsc3RyaW5nOjQsYXJyYXk6NSxvYmplY3Q6
NixpbnN0YW5jZTo3LGZ1bmN0aW9uOjgsY2xhc3M6OSxkYXRlOjEwfX0pLGUoImVtYmVyLXJ1bnRp
bWUvY29tcHV0ZWQvY29tcHV0ZWRfbWFjcm9zIixbImV4cG9ydHMiLCJlbWJlci1tZXRhbCIsImVt
YmVyLWRlYnVnIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IgorZnVuY3Rpb24gcihlLG4p
e2Z1bmN0aW9uIHIoZSl7cy5wdXNoKGUpfXZhciBpLG8scz1bXQorZm9yKGk9MDtpPG4ubGVuZ3Ro
O2krKylvPW5baV0sKDAsdC5leHBhbmRQcm9wZXJ0aWVzKShvLHIpCityZXR1cm4gc31mdW5jdGlv
biBpKGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKGk9YXJndW1lbnRzLmxlbmd0aCxvPUFycmF5
KGkpLHM9MDtzPGk7cysrKW9bc109YXJndW1lbnRzW3NdCit2YXIgaSxvLHMsYT1yKGUsbyksdT0o
MCx0LmNvbXB1dGVkKShmdW5jdGlvbigpe3ZhciBlLHIsaT1hLmxlbmd0aC0xCitmb3IoZT0wO2U8
aTtlKyspaWYocj0oMCx0LmdldCkodGhpcyxhW2VdKSwhbihyKSlyZXR1cm4gcgorcmV0dXJuKDAs
dC5nZXQpKHRoaXMsYVtpXSl9KQorcmV0dXJuIHUucHJvcGVydHkuYXBwbHkodSxhKX19ZS5vcj1l
LmFuZD12b2lkIDAsZS5lbXB0eT1mdW5jdGlvbihlKXtyZXR1cm4oMCx0LmNvbXB1dGVkKShlKyIu
bGVuZ3RoIixmdW5jdGlvbigpe3JldHVybigwLHQuaXNFbXB0eSkoKDAsdC5nZXQpKHRoaXMsZSkp
fSl9LGUubm90RW1wdHk9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsdC5jb21wdXRlZCkoZSsiLmxlbmd0
aCIsZnVuY3Rpb24oKXtyZXR1cm4hKDAsdC5pc0VtcHR5KSgoMCx0LmdldCkodGhpcyxlKSl9KX0s
ZS5ub25lPWZ1bmN0aW9uKGUpe3JldHVybigwLHQuY29tcHV0ZWQpKGUsZnVuY3Rpb24oKXtyZXR1
cm4oMCx0LmlzTm9uZSkoKDAsdC5nZXQpKHRoaXMsZSkpfSl9LGUubm90PWZ1bmN0aW9uKGUpe3Jl
dHVybigwLHQuY29tcHV0ZWQpKGUsZnVuY3Rpb24oKXtyZXR1cm4hKDAsdC5nZXQpKHRoaXMsZSl9
KX0sZS5ib29sPWZ1bmN0aW9uKGUpe3JldHVybigwLHQuY29tcHV0ZWQpKGUsZnVuY3Rpb24oKXty
ZXR1cm4hISgwLHQuZ2V0KSh0aGlzLGUpfSl9LGUubWF0Y2g9ZnVuY3Rpb24oZSxuKXtyZXR1cm4o
MCx0LmNvbXB1dGVkKShlLGZ1bmN0aW9uKCl7dmFyIHI9KDAsdC5nZXQpKHRoaXMsZSkKK3JldHVy
biJzdHJpbmciPT10eXBlb2YgciYmbi50ZXN0KHIpfSl9LGUuZXF1YWw9ZnVuY3Rpb24oZSxuKXty
ZXR1cm4oMCx0LmNvbXB1dGVkKShlLGZ1bmN0aW9uKCl7cmV0dXJuKDAsdC5nZXQpKHRoaXMsZSk9
PT1ufSl9LGUuZ3Q9ZnVuY3Rpb24oZSxuKXtyZXR1cm4oMCx0LmNvbXB1dGVkKShlLGZ1bmN0aW9u
KCl7cmV0dXJuKDAsdC5nZXQpKHRoaXMsZSk+bn0pfSxlLmd0ZT1mdW5jdGlvbihlLG4pe3JldHVy
bigwLHQuY29tcHV0ZWQpKGUsZnVuY3Rpb24oKXtyZXR1cm4oMCx0LmdldCkodGhpcyxlKT49bn0p
fSxlLmx0PWZ1bmN0aW9uKGUsbil7cmV0dXJuKDAsdC5jb21wdXRlZCkoZSxmdW5jdGlvbigpe3Jl
dHVybigwLHQuZ2V0KSh0aGlzLGUpPG59KX0sZS5sdGU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4oMCx0
LmNvbXB1dGVkKShlLGZ1bmN0aW9uKCl7cmV0dXJuKDAsdC5nZXQpKHRoaXMsZSk8PW59KX0sZS5v
bmVXYXk9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsdC5hbGlhcykoZSkub25lV2F5KCl9LGUucmVhZE9u
bHk9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsdC5hbGlhcykoZSkucmVhZE9ubHkoKX0sZS5kZXByZWNh
dGluZ0FsaWFzPWZ1bmN0aW9uKGUsbil7cmV0dXJuKDAsdC5jb21wdXRlZCkoZSx7Z2V0OmZ1bmN0
aW9uKG4pe3JldHVybigwLHQuZ2V0KSh0aGlzLGUpfSxzZXQ6ZnVuY3Rpb24obixyKXtyZXR1cm4o
MCx0LnNldCkodGhpcyxlLHIpLHJ9fSl9LGUuYW5kPWkoImFuZCIsZnVuY3Rpb24oZSl7cmV0dXJu
IGV9KSxlLm9yPWkoIm9yIixmdW5jdGlvbihlKXtyZXR1cm4hZX0pfSksZSgiZW1iZXItcnVudGlt
ZS9jb21wdXRlZC9yZWR1Y2VfY29tcHV0ZWRfbWFjcm9zIixbImV4cG9ydHMiLCJlbWJlci11dGls
cyIsImVtYmVyLWRlYnVnIiwiZW1iZXItbWV0YWwiLCJlbWJlci1ydW50aW1lL2NvbXBhcmUiLCJl
bWJlci1ydW50aW1lL3V0aWxzIiwiZW1iZXItcnVudGltZS9zeXN0ZW0vbmF0aXZlX2FycmF5Il0s
ZnVuY3Rpb24oZSx0LG4scixpLG8scyl7InVzZSBzdHJpY3QiCitmdW5jdGlvbiBhKGUsdCxuKXty
ZXR1cm4oMCxyLmNvbXB1dGVkKShlKyIuW10iLGZ1bmN0aW9uKCl7dmFyIGk9dGhpcyxvPSgwLHIu
Z2V0KSh0aGlzLGUpCityZXR1cm4gbnVsbD09PW98fCJvYmplY3QiIT10eXBlb2Ygbz9uOm8ucmVk
dWNlKGZ1bmN0aW9uKGUsbixyLG8pe3JldHVybiB0LmNhbGwoaSxlLG4scixvKX0sbil9KS5yZWFk
T25seSgpfWZ1bmN0aW9uIHUoZSx0KXt2YXIgbj12b2lkIDAKK3JldHVybi9AZWFjaC8udGVzdChl
KT9uPWUucmVwbGFjZSgvXC5AZWFjaC4qJC8sIiIpOihuPWUsZSs9Ii5bXSIpLCgwLHIuY29tcHV0
ZWQpKGUsZnVuY3Rpb24oKXt2YXIgZT0oMCxyLmdldCkodGhpcyxuKQorcmV0dXJuKDAsby5pc0Fy
cmF5KShlKT8oMCxzLkEpKHQuY2FsbCh0aGlzLGUpKTooMCxzLkEpKCl9KS5yZWFkT25seSgpfWZ1
bmN0aW9uIGwoZSx0KXt2YXIgbj1lLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZSsiLltdIn0pCity
ZXR1cm4gbi5wdXNoKGZ1bmN0aW9uKCl7cmV0dXJuKDAscy5BKSh0LmNhbGwodGhpcyxlKSl9KSxy
LmNvbXB1dGVkLmFwcGx5KHRoaXMsbikucmVhZE9ubHkoKX1mdW5jdGlvbiBjKGUsdCl7cmV0dXJu
IHUoZSxmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXAodCx0aGlzKX0pfWZ1bmN0aW9uIHAoZSx0KXty
ZXR1cm4gdShlLGZ1bmN0aW9uKGUpe3JldHVybiBlLmZpbHRlcih0LHRoaXMpfSl9ZnVuY3Rpb24g
Zigpe3ZhciBlLHQsbgorZm9yKGU9YXJndW1lbnRzLmxlbmd0aCx0PUFycmF5KGUpLG49MDtuPGU7
bisrKXRbbl09YXJndW1lbnRzW25dCityZXR1cm4gbCh0LGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMs
bj0oMCxzLkEpKCkKK3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIGk9KDAsci5nZXQp
KHQsZSk7KDAsby5pc0FycmF5KShpKSYmaS5mb3JFYWNoKGZ1bmN0aW9uKGUpey0xPT09bi5pbmRl
eE9mKGUpJiZuLnB1c2goZSl9KX0pLG59KX1mdW5jdGlvbiBoKGUsdCl7cmV0dXJuIHUoZSxmdW5j
dGlvbihlKXt2YXIgbj10aGlzCityZXR1cm4gZS5zbGljZSgpLnNvcnQoZnVuY3Rpb24oZSxyKXty
ZXR1cm4gdC5jYWxsKG4sZSxyKX0pfSl9ZnVuY3Rpb24gZChlLHQpe3ZhciBuPW5ldyByLkNvbXB1
dGVkUHJvcGVydHkoZnVuY3Rpb24oaSl7ZnVuY3Rpb24gYSgpe3RoaXMubm90aWZ5UHJvcGVydHlD
aGFuZ2UoaSl9dmFyIHU9dGhpcyxsPSJAdGhpcyI9PT1lLGM9KDAsci5nZXQpKHRoaXMsdCkscD1t
KGMpLGY9bi5fYWN0aXZlT2JzZXJ2ZXJNYXB8fChuLl9hY3RpdmVPYnNlcnZlck1hcD1uZXcgci5X
ZWFrTWFwKSxoPWYuZ2V0KHRoaXMpCitoJiZoLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIHIu
cmVtb3ZlT2JzZXJ2ZXIuYXBwbHkodm9pZCAwLGUpfSksaD1wLm1hcChmdW5jdGlvbih0KXt2YXIg
bj10WzBdLGk9bD8iQGVhY2guIituOmUrIi5AZWFjaC4iK24sbz1bdSxpLGFdCityZXR1cm4gci5h
ZGRPYnNlcnZlci5hcHBseSh2b2lkIDAsbyksb30pLGYuc2V0KHRoaXMsaCkKK3ZhciBkPWw/dGhp
czooMCxyLmdldCkodGhpcyxlKQorcmV0dXJuKDAsby5pc0FycmF5KShkKT9nKGQscCk6KDAscy5B
KSgpfSkKK3JldHVybiBuLl9hY3RpdmVPYnNlcnZlck1hcD12b2lkIDAsbi5wcm9wZXJ0eSh0KyIu
W10iKS5yZWFkT25seSgpfWZ1bmN0aW9uIG0oZSl7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUpe3Zh
ciB0PWUuc3BsaXQoIjoiKSxuPXRbMF0scj10WzFdCityZXR1cm4gcj1yfHwiYXNjIixbbixyXX0p
fWZ1bmN0aW9uIGcoZSx0KXtyZXR1cm4oMCxzLkEpKGUuc2xpY2UoKS5zb3J0KGZ1bmN0aW9uKGUs
bil7dmFyIG8scyxhLHUsbAorZm9yKG89MDtvPHQubGVuZ3RoO28rKylpZihzPXRbb10sYT1zWzBd
LHU9c1sxXSwwIT09KGw9KDAsaS5kZWZhdWx0KSgoMCxyLmdldCkoZSxhKSwoMCxyLmdldCkobixh
KSkpKXJldHVybiJkZXNjIj09PXU/LTEqbDpsCityZXR1cm4gMH0pKX1lLnVuaW9uPXZvaWQgMCxl
LnN1bT1mdW5jdGlvbihlKXtyZXR1cm4gYShlLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdH0sMCl9
LGUubWF4PWZ1bmN0aW9uKGUpe3JldHVybiBhKGUsZnVuY3Rpb24oZSx0KXtyZXR1cm4gTWF0aC5t
YXgoZSx0KX0sLTEvMCl9LGUubWluPWZ1bmN0aW9uKGUpe3JldHVybiBhKGUsZnVuY3Rpb24oZSx0
KXtyZXR1cm4gTWF0aC5taW4oZSx0KX0sMS8wKX0sZS5tYXA9YyxlLm1hcEJ5PWZ1bmN0aW9uKGUs
dCl7cmV0dXJuIGMoZSsiLkBlYWNoLiIrdCxmdW5jdGlvbihlKXtyZXR1cm4oMCxyLmdldCkoZSx0
KX0pfSxlLmZpbHRlcj1wLGUuZmlsdGVyQnk9ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPXZvaWQgMAor
cmV0dXJuIGk9Mj09PWFyZ3VtZW50cy5sZW5ndGg/ZnVuY3Rpb24oZSl7cmV0dXJuKDAsci5nZXQp
KGUsdCl9OmZ1bmN0aW9uKGUpe3JldHVybigwLHIuZ2V0KShlLHQpPT09bn0scChlKyIuQGVhY2gu
Iit0LGkpfSxlLnVuaXE9ZixlLnVuaXFCeT1mdW5jdGlvbihlLG4pe3JldHVybigwLHIuY29tcHV0
ZWQpKGUrIi5bXSIsZnVuY3Rpb24oKXt2YXIgaT0oMCxzLkEpKCksYT1PYmplY3QuY3JlYXRlKG51
bGwpLHU9KDAsci5nZXQpKHRoaXMsZSkKK3JldHVybigwLG8uaXNBcnJheSkodSkmJnUuZm9yRWFj
aChmdW5jdGlvbihlKXt2YXIgbz0oMCx0Lmd1aWRGb3IpKCgwLHIuZ2V0KShlLG4pKQorbyBpbiBh
fHwoYVtvXT0hMCxpLnB1c2goZSkpfSksaX0pLnJlYWRPbmx5KCl9LGUuaW50ZXJzZWN0PWZ1bmN0
aW9uKCl7dmFyIGUsdCxuCitmb3IoZT1hcmd1bWVudHMubGVuZ3RoLHQ9QXJyYXkoZSksbj0wO248
ZTtuKyspdFtuXT1hcmd1bWVudHNbbl0KK3JldHVybiBsKHQsZnVuY3Rpb24oZSl7dmFyIHQ9dGhp
cyxuPWUubWFwKGZ1bmN0aW9uKGUpe3ZhciBuPSgwLHIuZ2V0KSh0LGUpCityZXR1cm4oMCxvLmlz
QXJyYXkpKG4pP246W119KSxpPW4ucG9wKCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3ZhciB0LHIsaSxv
Citmb3IodD0wO3Q8bi5sZW5ndGg7dCsrKXtmb3Iocj0hMSxpPW5bdF0sbz0wO288aS5sZW5ndGg7
bysrKWlmKGlbb109PT1lKXtyPSEwCiticmVha31pZighMT09PXIpcmV0dXJuITF9cmV0dXJuITB9
KQorcmV0dXJuKDAscy5BKShpKX0pfSxlLnNldERpZmY9ZnVuY3Rpb24oZSx0KXtpZigyIT09YXJn
dW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgbi5FcnJvcigic2V0RGlmZiByZXF1aXJlcyBleGFjdGx5
IHR3byBkZXBlbmRlbnQgYXJyYXlzLiIpCityZXR1cm4oMCxyLmNvbXB1dGVkKShlKyIuW10iLHQr
Ii5bXSIsZnVuY3Rpb24oKXt2YXIgbj10aGlzLmdldChlKSxyPXRoaXMuZ2V0KHQpCityZXR1cm4o
MCxvLmlzQXJyYXkpKG4pPygwLG8uaXNBcnJheSkocik/bi5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0
dXJuLTE9PT1yLmluZGV4T2YoZSl9KTooMCxzLkEpKG4pOigwLHMuQSkoKX0pLnJlYWRPbmx5KCl9
LGUuY29sbGVjdD1mdW5jdGlvbigpe3ZhciBlLHQsbgorZm9yKGU9YXJndW1lbnRzLmxlbmd0aCx0
PUFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dCityZXR1cm4gbCh0LGZ1bmN0
aW9uKCl7dmFyIGU9KDAsci5nZXRQcm9wZXJ0aWVzKSh0aGlzLHQpLG49KDAscy5BKSgpCitmb3Io
dmFyIGkgaW4gZSllLmhhc093blByb3BlcnR5KGkpJiYoKDAsci5pc05vbmUpKGVbaV0pP24ucHVz
aChudWxsKTpuLnB1c2goZVtpXSkpCityZXR1cm4gbn0pfSxlLnNvcnQ9ZnVuY3Rpb24oZSx0KXty
ZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD9oKGUsdCk6ZChlLHQpfSxlLnVuaW9uPWZ9KSxlKCJl
bWJlci1ydW50aW1lL2NvbnRyb2xsZXJzL2NvbnRyb2xsZXIiLFsiZXhwb3J0cyIsImVtYmVyLWRl
YnVnIiwiZW1iZXItcnVudGltZS9zeXN0ZW0vb2JqZWN0IiwiZW1iZXItcnVudGltZS9taXhpbnMv
Y29udHJvbGxlciIsImVtYmVyLXJ1bnRpbWUvaW5qZWN0IiwiZW1iZXItcnVudGltZS9taXhpbnMv
YWN0aW9uX2hhbmRsZXIiXSxmdW5jdGlvbihlLHQsbixyLGksbyl7InVzZSBzdHJpY3QiCit2YXIg
cz1uLmRlZmF1bHQuZXh0ZW5kKHIuZGVmYXVsdCk7KDAsby5kZXByZWNhdGVVbmRlcnNjb3JlQWN0
aW9ucykocyksKDAsaS5jcmVhdGVJbmplY3Rpb25IZWxwZXIpKCJjb250cm9sbGVyIixmdW5jdGlv
bihlKXt9KSxlLmRlZmF1bHQ9c30pLGUoImVtYmVyLXJ1bnRpbWUvY29weSIsWyJleHBvcnRzIiwi
ZW1iZXItZGVidWciLCJlbWJlci1ydW50aW1lL3N5c3RlbS9vYmplY3QiLCJlbWJlci1ydW50aW1l
L21peGlucy9jb3B5YWJsZSJdLGZ1bmN0aW9uKGUsdCxuLHIpeyJ1c2Ugc3RyaWN0IgorZnVuY3Rp
b24gaShlLHQsbixvKXt2YXIgcz12b2lkIDAsYT12b2lkIDAsdT12b2lkIDAKK2lmKCJvYmplY3Qi
IT10eXBlb2YgZXx8bnVsbD09PWUpcmV0dXJuIGUKK2lmKHQmJihhPW4uaW5kZXhPZihlKSk+PTAp
cmV0dXJuIG9bYV0KK2lmKEFycmF5LmlzQXJyYXkoZSkpe2lmKHM9ZS5zbGljZSgpLHQpZm9yKGE9
cy5sZW5ndGg7LS1hPj0wOylzW2FdPWkoc1thXSx0LG4sbyl9ZWxzZSBpZihyLmRlZmF1bHQmJnIu
ZGVmYXVsdC5kZXRlY3QoZSkpcz1lLmNvcHkodCxuLG8pCitlbHNlIGlmKGUgaW5zdGFuY2VvZiBE
YXRlKXM9bmV3IERhdGUoZS5nZXRUaW1lKCkpCitlbHNle3M9e30KK2Zvcih1IGluIGUpT2JqZWN0
LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdSkmJiJfXyIhPT11LnN1YnN0cmluZygw
LDIpJiYoc1t1XT10P2koZVt1XSx0LG4sbyk6ZVt1XSl9cmV0dXJuIHQmJihuLnB1c2goZSksby5w
dXNoKHMpKSxzfWUuZGVmYXVsdD1mdW5jdGlvbihlLHQpe3JldHVybiJvYmplY3QiIT10eXBlb2Yg
ZXx8bnVsbD09PWU/ZTpyLmRlZmF1bHQmJnIuZGVmYXVsdC5kZXRlY3QoZSk/ZS5jb3B5KHQpOmko
ZSx0LHQ/W106bnVsbCx0P1tdOm51bGwpfX0pLGUoImVtYmVyLXJ1bnRpbWUvZXh0L2Z1bmN0aW9u
IixbImVtYmVyLWVudmlyb25tZW50IiwiZW1iZXItbWV0YWwiLCJlbWJlci1kZWJ1ZyJdLGZ1bmN0
aW9uKGUsdCxuKXsidXNlIHN0cmljdCIKK3ZhciByPUFycmF5LnByb3RvdHlwZS5zbGljZSxpPUZ1
bmN0aW9uLnByb3RvdHlwZQorZS5FTlYuRVhURU5EX1BST1RPVFlQRVMuRnVuY3Rpb24mJihpLnBy
b3BlcnR5PWZ1bmN0aW9uKCl7dmFyIGU9KDAsdC5jb21wdXRlZCkodGhpcykKK3JldHVybiBlLnBy
b3BlcnR5LmFwcGx5KGUsYXJndW1lbnRzKX0saS5vYnNlcnZlcz1mdW5jdGlvbigpe3ZhciBlLG4s
cgorZm9yKGU9YXJndW1lbnRzLmxlbmd0aCxuPUFycmF5KGUpLHI9MDtyPGU7cisrKW5bcl09YXJn
dW1lbnRzW3JdCityZXR1cm4gbi5wdXNoKHRoaXMpLHQub2JzZXJ2ZXIuYXBwbHkodGhpcyxuKX0s
aS5fb2JzZXJ2ZXNJbW1lZGlhdGVseT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9ic2VydmVzLmFw
cGx5KHRoaXMsYXJndW1lbnRzKX0saS5vYnNlcnZlc0ltbWVkaWF0ZWx5PSgwLG4uZGVwcmVjYXRl
RnVuYykoIkZ1bmN0aW9uI29ic2VydmVzSW1tZWRpYXRlbHkgaXMgZGVwcmVjYXRlZC4gVXNlIEZ1
bmN0aW9uI29ic2VydmVzIGluc3RlYWQiLHtpZDoiZW1iZXItcnVudGltZS5leHQtZnVuY3Rpb24i
LHVudGlsOiIzLjAuMCJ9LGkuX29ic2VydmVzSW1tZWRpYXRlbHkpLGkub249ZnVuY3Rpb24oKXt2
YXIgZT1yLmNhbGwoYXJndW1lbnRzKQorcmV0dXJuIHRoaXMuX19lbWJlcl9saXN0ZW5zX189ZSx0
aGlzfSl9KSxlKCJlbWJlci1ydW50aW1lL2V4dC9yc3ZwIixbImV4cG9ydHMiLCJyc3ZwIiwiZW1i
ZXItbWV0YWwiLCJlbWJlci1kZWJ1ZyJdLGZ1bmN0aW9uKGUsdCxuLHIpeyJ1c2Ugc3RyaWN0Igor
ZnVuY3Rpb24gaShlKXt2YXIgdD1vKGUpCit0JiYoMCxuLmRpc3BhdGNoRXJyb3IpKHQpfWZ1bmN0
aW9uIG8oZSl7aWYoZSl7aWYoZS5lcnJvclRocm93bilyZXR1cm4gcyhlKQoraWYoIlVucmVjb2du
aXplZFVSTEVycm9yIiE9PWUubmFtZSYmIlRyYW5zaXRpb25BYm9ydGVkIiE9PWUubmFtZSlyZXR1
cm4gZX19ZnVuY3Rpb24gcyhlKXt2YXIgdD1lLmVycm9yVGhyb3duCityZXR1cm4ic3RyaW5nIj09
dHlwZW9mIHQmJih0PW5ldyBFcnJvcih0KSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fcmVh
c29uX3dpdGhfZXJyb3JfdGhyb3duX18iLHt2YWx1ZTplLGVudW1lcmFibGU6ITF9KSx0fWUub25l
cnJvckRlZmF1bHQ9aQordmFyIGE9bi5ydW4uYmFja2J1cm5lcgorbi5ydW4uX2FkZFF1ZXVlKCJy
c3ZwQWZ0ZXIiLCJkZXN0cm95IiksdC5jb25maWd1cmUoImFzeW5jIixmdW5jdGlvbihlLHQpe2Eu
c2NoZWR1bGUoImFjdGlvbnMiLG51bGwsZSx0KX0pLHQuY29uZmlndXJlKCJhZnRlciIsZnVuY3Rp
b24oZSl7YS5zY2hlZHVsZSgicnN2cEFmdGVyIixudWxsLGUpfSksdC5vbigiZXJyb3IiLGkpLGUu
ZGVmYXVsdD10fSksZSgiZW1iZXItcnVudGltZS9leHQvc3RyaW5nIixbImVtYmVyLWVudmlyb25t
ZW50IiwiZW1iZXItcnVudGltZS9zeXN0ZW0vc3RyaW5nIl0sZnVuY3Rpb24oZSx0KXsidXNlIHN0
cmljdCIKK3ZhciBuPVN0cmluZy5wcm90b3R5cGUKK2UuRU5WLkVYVEVORF9QUk9UT1RZUEVTLlN0
cmluZyYmKG4uZm10PWZ1bmN0aW9uKCl7dmFyIGUsbixyCitmb3IoZT1hcmd1bWVudHMubGVuZ3Ro
LG49QXJyYXkoZSkscj0wO3I8ZTtyKyspbltyXT1hcmd1bWVudHNbcl0KK3JldHVybigwLHQuZm10
KSh0aGlzLG4pfSxuLnc9ZnVuY3Rpb24oKXtyZXR1cm4oMCx0LncpKHRoaXMpfSxuLmxvYz1mdW5j
dGlvbigpe3ZhciBlLG4scgorZm9yKGU9YXJndW1lbnRzLmxlbmd0aCxuPUFycmF5KGUpLHI9MDty
PGU7cisrKW5bcl09YXJndW1lbnRzW3JdCityZXR1cm4oMCx0LmxvYykodGhpcyxuKX0sbi5jYW1l
bGl6ZT1mdW5jdGlvbigpe3JldHVybigwLHQuY2FtZWxpemUpKHRoaXMpfSxuLmRlY2FtZWxpemU9
ZnVuY3Rpb24oKXtyZXR1cm4oMCx0LmRlY2FtZWxpemUpKHRoaXMpfSxuLmRhc2hlcml6ZT1mdW5j
dGlvbigpe3JldHVybigwLHQuZGFzaGVyaXplKSh0aGlzKX0sbi51bmRlcnNjb3JlPWZ1bmN0aW9u
KCl7cmV0dXJuKDAsdC51bmRlcnNjb3JlKSh0aGlzKX0sbi5jbGFzc2lmeT1mdW5jdGlvbigpe3Jl
dHVybigwLHQuY2xhc3NpZnkpKHRoaXMpfSxuLmNhcGl0YWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4o
MCx0LmNhcGl0YWxpemUpKHRoaXMpfSl9KSxlKCJlbWJlci1ydW50aW1lL2luZGV4IixbImV4cG9y
dHMiLCJlbWJlci1ydW50aW1lL3N5c3RlbS9vYmplY3QiLCJlbWJlci1ydW50aW1lL3N5c3RlbS9z
dHJpbmciLCJlbWJlci1ydW50aW1lL21peGlucy9yZWdpc3RyeV9wcm94eSIsImVtYmVyLXJ1bnRp
bWUvbWl4aW5zL2NvbnRhaW5lcl9wcm94eSIsImVtYmVyLXJ1bnRpbWUvY29weSIsImVtYmVyLXJ1
bnRpbWUvaW5qZWN0IiwiZW1iZXItcnVudGltZS9jb21wYXJlIiwiZW1iZXItcnVudGltZS9pcy1l
cXVhbCIsImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2FycmF5IiwiZW1iZXItcnVudGltZS9taXhpbnMv
Y29tcGFyYWJsZSIsImVtYmVyLXJ1bnRpbWUvc3lzdGVtL25hbWVzcGFjZSIsImVtYmVyLXJ1bnRp
bWUvc3lzdGVtL2FycmF5X3Byb3h5IiwiZW1iZXItcnVudGltZS9zeXN0ZW0vb2JqZWN0X3Byb3h5
IiwiZW1iZXItcnVudGltZS9zeXN0ZW0vY29yZV9vYmplY3QiLCJlbWJlci1ydW50aW1lL3N5c3Rl
bS9uYXRpdmVfYXJyYXkiLCJlbWJlci1ydW50aW1lL21peGlucy9hY3Rpb25faGFuZGxlciIsImVt
YmVyLXJ1bnRpbWUvbWl4aW5zL2NvcHlhYmxlIiwiZW1iZXItcnVudGltZS9taXhpbnMvZW51bWVy
YWJsZSIsImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2ZyZWV6YWJsZSIsImVtYmVyLXJ1bnRpbWUvbWl4
aW5zLy1wcm94eSIsImVtYmVyLXJ1bnRpbWUvc3lzdGVtL2xhenlfbG9hZCIsImVtYmVyLXJ1bnRp
bWUvbWl4aW5zL29ic2VydmFibGUiLCJlbWJlci1ydW50aW1lL21peGlucy9tdXRhYmxlX2VudW1l
cmFibGUiLCJlbWJlci1ydW50aW1lL21peGlucy9tdXRhYmxlX2FycmF5IiwiZW1iZXItcnVudGlt
ZS9taXhpbnMvdGFyZ2V0X2FjdGlvbl9zdXBwb3J0IiwiZW1iZXItcnVudGltZS9taXhpbnMvZXZl
bnRlZCIsImVtYmVyLXJ1bnRpbWUvbWl4aW5zL3Byb21pc2VfcHJveHkiLCJlbWJlci1ydW50aW1l
L2NvbXB1dGVkL2NvbXB1dGVkX21hY3JvcyIsImVtYmVyLXJ1bnRpbWUvY29tcHV0ZWQvcmVkdWNl
X2NvbXB1dGVkX21hY3JvcyIsImVtYmVyLXJ1bnRpbWUvY29udHJvbGxlcnMvY29udHJvbGxlciIs
ImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2NvbnRyb2xsZXIiLCJlbWJlci1ydW50aW1lL3N5c3RlbS9z
ZXJ2aWNlIiwiZW1iZXItcnVudGltZS9leHQvcnN2cCIsImVtYmVyLXJ1bnRpbWUvdXRpbHMiLCJl
bWJlci1ydW50aW1lL3N0cmluZ19yZWdpc3RyeSIsImVtYmVyLXJ1bnRpbWUvZXh0L3N0cmluZyIs
ImVtYmVyLXJ1bnRpbWUvZXh0L2Z1bmN0aW9uIl0sZnVuY3Rpb24oZSx0LG4scixpLG8scyxhLHUs
bCxjLHAsZixoLGQsbSxnLHksdixiLF8sdyxFLHgsQyxPLEEsVCxTLFIsayxOLFAsaixELEwpeyJ1
c2Ugc3RyaWN0IgorZS5zZXRTdHJpbmdzPWUuZ2V0U3RyaW5ncz1lLnR5cGVPZj1lLmlzQXJyYXk9
ZS5vbmVycm9yRGVmYXVsdD1lLlJTVlA9ZS5TZXJ2aWNlPWUuQ29udHJvbGxlck1peGluPWUuQ29u
dHJvbGxlcj1lLmNvbGxlY3Q9ZS5pbnRlcnNlY3Q9ZS51bmlvbj1lLnVuaXFCeT1lLnVuaXE9ZS5m
aWx0ZXJCeT1lLmZpbHRlcj1lLm1hcEJ5PWUuc2V0RGlmZj1lLnNvcnQ9ZS5tYXA9ZS5tYXg9ZS5t
aW49ZS5zdW09ZS5vcj1lLmFuZD1lLmRlcHJlY2F0aW5nQWxpYXM9ZS5yZWFkT25seT1lLm9uZVdh
eT1lLmx0ZT1lLmx0PWUuZ3RlPWUuZ3Q9ZS5lcXVhbD1lLm1hdGNoPWUuYm9vbD1lLm5vdD1lLm5v
bmU9ZS5ub3RFbXB0eT1lLmVtcHR5PWUuUHJvbWlzZVByb3h5TWl4aW49ZS5FdmVudGVkPWUuVGFy
Z2V0QWN0aW9uU3VwcG9ydD1lLnJlbW92ZUF0PWUuTXV0YWJsZUFycmF5PWUuTXV0YWJsZUVudW1l
cmFibGU9ZS5PYnNlcnZhYmxlPWUuX2xvYWRlZD1lLnJ1bkxvYWRIb29rcz1lLm9uTG9hZD1lLl9Q
cm94eU1peGluPWUuRlJPWkVOX0VSUk9SPWUuRnJlZXphYmxlPWUuRW51bWVyYWJsZT1lLkNvcHlh
YmxlPWUuZGVwcmVjYXRlVW5kZXJzY29yZUFjdGlvbnM9ZS5BY3Rpb25IYW5kbGVyPWUuQT1lLk5h
dGl2ZUFycmF5PWUuQ29yZU9iamVjdD1lLk9iamVjdFByb3h5PWUuQXJyYXlQcm94eT1lLnNldE5h
bWVzcGFjZVNlYXJjaERpc2FibGVkPWUuaXNOYW1lc3BhY2VTZWFyY2hEaXNhYmxlZD1lLk5hbWVz
cGFjZT1lLkNvbXBhcmFibGU9ZS5yZW1vdmVBcnJheU9ic2VydmVyPWUuYWRkQXJyYXlPYnNlcnZl
cj1lLmlzRW1iZXJBcnJheT1lLm9iamVjdEF0PWUuQXJyYXk9ZS5pc0VxdWFsPWUuY29tcGFyZT1l
LmluamVjdD1lLmNvcHk9ZS5Db250YWluZXJQcm94eU1peGluPWUuYnVpbGRGYWtlUmVnaXN0cnlX
aXRoRGVwcmVjYXRpb25zPWUuUmVnaXN0cnlQcm94eU1peGluPWUuU3RyaW5nPWUuRnJhbWV3b3Jr
T2JqZWN0PWUuT2JqZWN0PXZvaWQgMCxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiT2JqZWN0Iix7
ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdC5kZWZhdWx0fX0pLE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShlLCJGcmFtZXdvcmtPYmplY3QiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5j
dGlvbigpe3JldHVybiB0LkZyYW1ld29ya09iamVjdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHko
ZSwiU3RyaW5nIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5kZWZhdWx0
fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJSZWdpc3RyeVByb3h5TWl4aW4iLHtlbnVtZXJh
YmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVBy
b3BlcnR5KGUsImJ1aWxkRmFrZVJlZ2lzdHJ5V2l0aERlcHJlY2F0aW9ucyIse2VudW1lcmFibGU6
ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuYnVpbGRGYWtlUmVnaXN0cnlXaXRoRGVwcmVjYXRp
b25zfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJDb250YWluZXJQcm94eU1peGluIix7ZW51
bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5kZWZhdWx0fX0pLE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShlLCJjb3B5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4g
by5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJpbmplY3QiLHtlbnVtZXJhYmxl
OiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3Bl
cnR5KGUsImNvbXBhcmUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhLmRl
ZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImlzRXF1YWwiLHtlbnVtZXJhYmxlOiEw
LGdldDpmdW5jdGlvbigpe3JldHVybiB1LmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5
KGUsIkFycmF5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5kZWZhdWx0
fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJvYmplY3RBdCIse2VudW1lcmFibGU6ITAsZ2V0
OmZ1bmN0aW9uKCl7cmV0dXJuIGwub2JqZWN0QXR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUs
ImlzRW1iZXJBcnJheSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGwuaXNF
bWJlckFycmF5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJhZGRBcnJheU9ic2VydmVyIix7
ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5hZGRBcnJheU9ic2VydmVyfX0p
LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJyZW1vdmVBcnJheU9ic2VydmVyIix7ZW51bWVyYWJs
ZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5yZW1vdmVBcnJheU9ic2VydmVyfX0pLE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShlLCJDb21wYXJhYmxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rp
b24oKXtyZXR1cm4gYy5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJOYW1lc3Bh
Y2UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmRlZmF1bHR9fSksT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KGUsImlzTmFtZXNwYWNlU2VhcmNoRGlzYWJsZWQiLHtlbnVtZXJh
YmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmlzU2VhcmNoRGlzYWJsZWR9fSksT2JqZWN0
LmRlZmluZVByb3BlcnR5KGUsInNldE5hbWVzcGFjZVNlYXJjaERpc2FibGVkIix7ZW51bWVyYWJs
ZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5zZXRTZWFyY2hEaXNhYmxlZH19KSxPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoZSwiQXJyYXlQcm94eSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9u
KCl7cmV0dXJuIGYuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiT2JqZWN0UHJv
eHkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBoLmRlZmF1bHR9fSksT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KGUsIkNvcmVPYmplY3QiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5j
dGlvbigpe3JldHVybiBkLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIk5hdGl2
ZUFycmF5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbS5kZWZhdWx0fX0p
LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJBIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24o
KXtyZXR1cm4gbS5BfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJBY3Rpb25IYW5kbGVyIix7
ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5kZWZhdWx0fX0pLE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShlLCJkZXByZWNhdGVVbmRlcnNjb3JlQWN0aW9ucyIse2VudW1lcmFibGU6
ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuZGVwcmVjYXRlVW5kZXJzY29yZUFjdGlvbnN9fSks
T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIkNvcHlhYmxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVu
Y3Rpb24oKXtyZXR1cm4geS5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJFbnVt
ZXJhYmxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdi5kZWZhdWx0fX0p
LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJGcmVlemFibGUiLHtlbnVtZXJhYmxlOiEwLGdldDpm
dW5jdGlvbigpe3JldHVybiBiLkZyZWV6YWJsZX19KQorT2JqZWN0LmRlZmluZVByb3BlcnR5KGUs
IkZST1pFTl9FUlJPUiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGIuRlJP
WkVOX0VSUk9SfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfUHJveHlNaXhpbiIse2VudW1l
cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF8uZGVmYXVsdH19KSxPYmplY3QuZGVmaW5l
UHJvcGVydHkoZSwib25Mb2FkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4g
dy5vbkxvYWR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInJ1bkxvYWRIb29rcyIse2VudW1l
cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHcucnVuTG9hZEhvb2tzfX0pLE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShlLCJfbG9hZGVkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXty
ZXR1cm4gdy5fbG9hZGVkfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJPYnNlcnZhYmxlIix7
ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRS5kZWZhdWx0fX0pLE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShlLCJNdXRhYmxlRW51bWVyYWJsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1
bmN0aW9uKCl7cmV0dXJuIHguZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiTXV0
YWJsZUFycmF5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQy5kZWZhdWx0
fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJyZW1vdmVBdCIse2VudW1lcmFibGU6ITAsZ2V0
OmZ1bmN0aW9uKCl7cmV0dXJuIEMucmVtb3ZlQXR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUs
IlRhcmdldEFjdGlvblN1cHBvcnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVy
biBPLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIkV2ZW50ZWQiLHtlbnVtZXJh
YmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBBLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVBy
b3BlcnR5KGUsIlByb21pc2VQcm94eU1peGluIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24o
KXtyZXR1cm4gVC5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJlbXB0eSIse2Vu
dW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFMuZW1wdHl9fSksT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KGUsIm5vdEVtcHR5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1
cm4gUy5ub3RFbXB0eX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwibm9uZSIse2VudW1lcmFi
bGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFMubm9uZX19KSxPYmplY3QuZGVmaW5lUHJvcGVy
dHkoZSwibm90Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUy5ub3R9fSks
T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImJvb2wiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlv
bigpe3JldHVybiBTLmJvb2x9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIm1hdGNoIix7ZW51
bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUy5tYXRjaH19KSxPYmplY3QuZGVmaW5l
UHJvcGVydHkoZSwiZXF1YWwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBT
LmVxdWFsfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJndCIse2VudW1lcmFibGU6ITAsZ2V0
OmZ1bmN0aW9uKCl7cmV0dXJuIFMuZ3R9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImd0ZSIs
e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFMuZ3RlfX0pLE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShlLCJsdCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFMu
bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImx0ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1
bmN0aW9uKCl7cmV0dXJuIFMubHRlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJvbmVXYXki
LHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBTLm9uZVdheX19KSxPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoZSwicmVhZE9ubHkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigp
e3JldHVybiBTLnJlYWRPbmx5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJkZXByZWNhdGlu
Z0FsaWFzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUy5kZXByZWNhdGlu
Z0FsaWFzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJhbmQiLHtlbnVtZXJhYmxlOiEwLGdl
dDpmdW5jdGlvbigpe3JldHVybiBTLmFuZH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwib3Ii
LHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBTLm9yfX0pLE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShlLCJzdW0iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBS
LnN1bX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwibWluIix7ZW51bWVyYWJsZTohMCxnZXQ6
ZnVuY3Rpb24oKXtyZXR1cm4gUi5taW59fSkKK09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJtYXgi
LHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBSLm1heH19KSxPYmplY3QuZGVm
aW5lUHJvcGVydHkoZSwibWFwIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4g
Ui5tYXB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInNvcnQiLHtlbnVtZXJhYmxlOiEwLGdl
dDpmdW5jdGlvbigpe3JldHVybiBSLnNvcnR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInNl
dERpZmYiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBSLnNldERpZmZ9fSks
T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIm1hcEJ5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rp
b24oKXtyZXR1cm4gUi5tYXBCeX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiZmlsdGVyIix7
ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUi5maWx0ZXJ9fSksT2JqZWN0LmRl
ZmluZVByb3BlcnR5KGUsImZpbHRlckJ5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXty
ZXR1cm4gUi5maWx0ZXJCeX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwidW5pcSIse2VudW1l
cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFIudW5pcX19KSxPYmplY3QuZGVmaW5lUHJv
cGVydHkoZSwidW5pcUJ5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUi51
bmlxQnl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInVuaW9uIix7ZW51bWVyYWJsZTohMCxn
ZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUi51bmlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwi
aW50ZXJzZWN0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUi5pbnRlcnNl
Y3R9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImNvbGxlY3QiLHtlbnVtZXJhYmxlOiEwLGdl
dDpmdW5jdGlvbigpe3JldHVybiBSLmNvbGxlY3R9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUs
IkNvbnRyb2xsZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBrLmRlZmF1
bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIkNvbnRyb2xsZXJNaXhpbiIse2VudW1lcmFi
bGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE4uZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJv
cGVydHkoZSwiU2VydmljZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFAu
ZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiUlNWUCIse2VudW1lcmFibGU6ITAs
Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGouZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHko
ZSwib25lcnJvckRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBq
Lm9uZXJyb3JEZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJpc0FycmF5Iix7ZW51
bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRC5pc0FycmF5fX0pLE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShlLCJ0eXBlT2YiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVy
biBELnR5cGVPZn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiZ2V0U3RyaW5ncyIse2VudW1l
cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEwuZ2V0U3RyaW5nc319KSxPYmplY3QuZGVm
aW5lUHJvcGVydHkoZSwic2V0U3RyaW5ncyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7
cmV0dXJuIEwuc2V0U3RyaW5nc319KX0pLGUoImVtYmVyLXJ1bnRpbWUvaW5qZWN0IixbImV4cG9y
dHMiLCJlbWJlci1tZXRhbCIsImVtYmVyLWRlYnVnIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3Ry
aWN0IgorZnVuY3Rpb24gcigpe31lLmRlZmF1bHQ9cixlLmNyZWF0ZUluamVjdGlvbkhlbHBlcj1m
dW5jdGlvbihlLG4pe2lbZV09bixyW2VdPWZ1bmN0aW9uKG4pe3JldHVybiBuZXcgdC5JbmplY3Rl
ZFByb3BlcnR5KGUsbil9fSxlLnZhbGlkYXRlUHJvcGVydHlJbmplY3Rpb25zPWZ1bmN0aW9uKGUp
e3ZhciBuLHIsbyxzPWUucHJvdG8oKSxhPVtdCitmb3IodmFyIHUgaW4gcykobj1zW3VdKWluc3Rh
bmNlb2YgdC5JbmplY3RlZFByb3BlcnR5JiYtMT09PWEuaW5kZXhPZihuLnR5cGUpJiZhLnB1c2go
bi50eXBlKQoraWYoYS5sZW5ndGgpZm9yKHI9MDtyPGEubGVuZ3RoO3IrKykiZnVuY3Rpb24iPT10
eXBlb2Yobz1pW2Fbcl1dKSYmbyhlKQorcmV0dXJuITB9Cit2YXIgaT17fX0pLGUoImVtYmVyLXJ1
bnRpbWUvaXMtZXF1YWwiLFsiZXhwb3J0cyJdLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IgorZS5k
ZWZhdWx0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmlzRXF1
YWw/ZS5pc0VxdWFsKHQpOmUgaW5zdGFuY2VvZiBEYXRlJiZ0IGluc3RhbmNlb2YgRGF0ZT9lLmdl
dFRpbWUoKT09PXQuZ2V0VGltZSgpOmU9PT10fX0pLGUoImVtYmVyLXJ1bnRpbWUvbWl4aW5zLy1w
cm94eSIsWyJleHBvcnRzIiwiZW1iZXItYmFiZWwiLCJAZ2xpbW1lci9yZWZlcmVuY2UiLCJlbWJl
ci1tZXRhbCIsImVtYmVyLWRlYnVnIiwiZW1iZXItcnVudGltZS9jb21wdXRlZC9jb21wdXRlZF9t
YWNyb3MiXSxmdW5jdGlvbihlLHQsbixyLGksbyl7InVzZSBzdHJpY3QiCitmdW5jdGlvbiBzKGUs
dCl7dmFyIG49dC5zbGljZSg4KQorbiBpbiB0aGlzfHwoMCxyLnByb3BlcnR5V2lsbENoYW5nZSko
dGhpcyxuKX1mdW5jdGlvbiBhKGUsdCl7dmFyIG49dC5zbGljZSg4KQorbiBpbiB0aGlzfHwoMCxy
LnByb3BlcnR5RGlkQ2hhbmdlKSh0aGlzLG4pfXZhciB1PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGko
aSl7dmFyIG89KDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuY2FsbCh0aGlz
KSkscz0oMCxyLmdldCkoaSwiY29udGVudCIpCityZXR1cm4gby5wcm94eT1pLG8ucHJveHlXcmFw
cGVyVGFnPW5ldyBuLkRpcnR5YWJsZVRhZyxvLnByb3h5Q29udGVudFRhZz1uZXcgbi5VcGRhdGFi
bGVUYWcoKDAsci50YWdGb3IpKHMpKSxvfXJldHVybigwLHQuaW5oZXJpdHMpKGksZSksaS5wcm90
b3R5cGUuY29tcHV0ZT1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1heCh0aGlzLnByb3h5V3JhcHBl
clRhZy52YWx1ZSgpLHRoaXMucHJveHlDb250ZW50VGFnLnZhbHVlKCkpfSxpLnByb3RvdHlwZS5k
aXJ0eT1mdW5jdGlvbigpe3RoaXMucHJveHlXcmFwcGVyVGFnLmRpcnR5KCl9LGkucHJvdG90eXBl
LmNvbnRlbnREaWRDaGFuZ2U9ZnVuY3Rpb24oKXt2YXIgZT0oMCxyLmdldCkodGhpcy5wcm94eSwi
Y29udGVudCIpCit0aGlzLnByb3h5Q29udGVudFRhZy51cGRhdGUoKDAsci50YWdGb3IpKGUpKX0s
aX0obi5DYWNoZWRUYWcpCitlLmRlZmF1bHQ9ci5NaXhpbi5jcmVhdGUoe2NvbnRlbnQ6bnVsbCxp
bml0OmZ1bmN0aW9uKCl7dGhpcy5fc3VwZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpCit2YXIgZT0o
MCxyLm1ldGEpKHRoaXMpCitlLnNldFByb3h5KCksZS5zZXRUYWcobmV3IHUodGhpcykpfSxpc1Ry
dXRoeTooMCxvLmJvb2wpKCJjb250ZW50Iiksd2lsbFdhdGNoUHJvcGVydHk6ZnVuY3Rpb24oZSl7
dmFyIHQ9ImNvbnRlbnQuIitlOygwLHIuX2FkZEJlZm9yZU9ic2VydmVyKSh0aGlzLHQsbnVsbCxz
KSwoMCxyLmFkZE9ic2VydmVyKSh0aGlzLHQsbnVsbCxhKX0sZGlkVW53YXRjaFByb3BlcnR5OmZ1
bmN0aW9uKGUpe3ZhciB0PSJjb250ZW50LiIrZTsoMCxyLl9yZW1vdmVCZWZvcmVPYnNlcnZlciko
dGhpcyx0LG51bGwscyksKDAsci5yZW1vdmVPYnNlcnZlcikodGhpcyx0LG51bGwsYSl9LHVua25v
d25Qcm9wZXJ0eTpmdW5jdGlvbihlKXt2YXIgdD0oMCxyLmdldCkodGhpcywiY29udGVudCIpCitp
Zih0KXJldHVybigwLHIuZ2V0KSh0LGUpfSxzZXRVbmtub3duUHJvcGVydHk6ZnVuY3Rpb24oZSx0
KXtpZigoMCxyLm1ldGEpKHRoaXMpLnByb3RvPT09dGhpcylyZXR1cm4oMCxyLmRlZmluZVByb3Bl
cnR5KSh0aGlzLGUsbnVsbCx0KSx0Cit2YXIgbj0oMCxyLmdldCkodGhpcywiY29udGVudCIpCity
ZXR1cm4oMCxyLnNldCkobixlLHQpfX0pfSkKK2UoImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2FjdGlv
bl9oYW5kbGVyIixbImV4cG9ydHMiLCJlbWJlci1tZXRhbCIsImVtYmVyLWRlYnVnIl0sZnVuY3Rp
b24oZSx0LG4peyJ1c2Ugc3RyaWN0IgorZS5kZXByZWNhdGVVbmRlcnNjb3JlQWN0aW9ucz1mdW5j
dGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsIl9hY3Rpb25zIix7Y29u
ZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsc2V0OmZ1bmN0aW9uKCl7fSxnZXQ6ZnVuY3Rpb24o
KXtyZXR1cm4oMCx0LmdldCkodGhpcywiYWN0aW9ucyIpfX0pfQordmFyIHI9dC5NaXhpbi5jcmVh
dGUoe21lcmdlZFByb3BlcnRpZXM6WyJhY3Rpb25zIl0sc2VuZDpmdW5jdGlvbihlKXtmb3Iobj1h
cmd1bWVudHMubGVuZ3RoLHI9QXJyYXkobj4xP24tMTowKSxpPTE7aTxuO2krKylyW2ktMV09YXJn
dW1lbnRzW2ldCitpZighdGhpcy5hY3Rpb25zfHwhdGhpcy5hY3Rpb25zW2VdfHwhMD09PXRoaXMu
YWN0aW9uc1tlXS5hcHBseSh0aGlzLHIpKXt2YXIgbixyLGksbz0oMCx0LmdldCkodGhpcywidGFy
Z2V0IikKK28mJm8uc2VuZC5hcHBseShvLGFyZ3VtZW50cyl9fSx3aWxsTWVyZ2VNaXhpbjpmdW5j
dGlvbihlKXtlLl9hY3Rpb25zJiYoZS5hY3Rpb25zPWUuX2FjdGlvbnMsZGVsZXRlIGUuX2FjdGlv
bnMpfX0pCitlLmRlZmF1bHQ9cn0pLGUoImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2FycmF5IixbImV4
cG9ydHMiLCJlbWJlci11dGlscyIsImVtYmVyLW1ldGFsIiwiZW1iZXItZGVidWciLCJlbWJlci1y
dW50aW1lL21peGlucy9lbnVtZXJhYmxlIl0sZnVuY3Rpb24oZSx0LG4scixpKXsidXNlIHN0cmlj
dCIKK2Z1bmN0aW9uIG8oZSx0LHIsaSxvKXt2YXIgcz1yJiZyLndpbGxDaGFuZ2V8fCJhcnJheVdp
bGxDaGFuZ2UiLGE9ciYmci5kaWRDaGFuZ2V8fCJhcnJheURpZENoYW5nZSIsdT0oMCxuLmdldCko
ZSwiaGFzQXJyYXlPYnNlcnZlcnMiKQorcmV0dXJuIHU9PT1vJiYoMCxuLnByb3BlcnR5V2lsbENo
YW5nZSkoZSwiaGFzQXJyYXlPYnNlcnZlcnMiKSxpKGUsIkBhcnJheTpiZWZvcmUiLHQscyksaShl
LCJAYXJyYXk6Y2hhbmdlIix0LGEpLHU9PT1vJiYoMCxuLnByb3BlcnR5RGlkQ2hhbmdlKShlLCJo
YXNBcnJheU9ic2VydmVycyIpLGV9ZnVuY3Rpb24gcyhlLHQscil7cmV0dXJuIG8oZSx0LHIsbi5h
ZGRMaXN0ZW5lciwhMSl9ZnVuY3Rpb24gYShlLHQscil7cmV0dXJuIG8oZSx0LHIsbi5yZW1vdmVM
aXN0ZW5lciwhMCl9ZnVuY3Rpb24gdShlLHQpe3JldHVybiBlLm9iamVjdEF0P2Uub2JqZWN0QXQo
dCk6ZVt0XX1mdW5jdGlvbiBsKGUsdCxyLGkpe3ZhciBvLHM9dm9pZCAwLGE9dm9pZCAwCitpZih2
b2lkIDA9PT10Pyh0PTAscj1pPS0xKToodm9pZCAwPT09ciYmKHI9LTEpLHZvaWQgMD09PWkmJihp
PS0xKSksZS5fX2VhY2gmJmUuX19lYWNoLmFycmF5V2lsbENoYW5nZShlLHQscixpKSwoMCxuLnNl
bmRFdmVudCkoZSwiQGFycmF5OmJlZm9yZSIsW2UsdCxyLGldKSx0Pj0wJiZyPj0wJiYoMCxuLmdl
dCkoZSwiaGFzRW51bWVyYWJsZU9ic2VydmVycyIpKWZvcihzPVtdLGE9dCtyLG89dDtvPGE7bysr
KXMucHVzaCh1KGUsbykpCitlbHNlIHM9cgorcmV0dXJuIGUuZW51bWVyYWJsZUNvbnRlbnRXaWxs
Q2hhbmdlKHMsaSksZX1mdW5jdGlvbiBjKGUsdCxyLGkpe3ZvaWQgMD09PXQ/KHQ9MCxyPWk9LTEp
Oih2b2lkIDA9PT1yJiYocj0tMSksdm9pZCAwPT09aSYmKGk9LTEpKQordmFyIG8scyxhPXZvaWQg
MAoraWYodD49MCYmaT49MCYmKDAsbi5nZXQpKGUsImhhc0VudW1lcmFibGVPYnNlcnZlcnMiKSlm
b3IoYT1bXSxvPXQraSxzPXQ7czxvO3MrKylhLnB1c2godShlLHMpKQorZWxzZSBhPWkKK2UuZW51
bWVyYWJsZUNvbnRlbnREaWRDaGFuZ2UocixhKSxlLl9fZWFjaCYmZS5fX2VhY2guYXJyYXlEaWRD
aGFuZ2UoZSx0LHIsaSksKDAsbi5zZW5kRXZlbnQpKGUsIkBhcnJheTpjaGFuZ2UiLFtlLHQscixp
XSkKK3ZhciBsPSgwLG4ucGVla01ldGEpKGUpLGM9bCYmbC5yZWFkYWJsZUNhY2hlKCkKK3JldHVy
biBjJiYodm9pZCAwIT09Yy5maXJzdE9iamVjdCYmdShlLDApIT09bi5jYWNoZUZvci5nZXQoYywi
Zmlyc3RPYmplY3QiKSYmKCgwLG4ucHJvcGVydHlXaWxsQ2hhbmdlKShlLCJmaXJzdE9iamVjdCIs
bCksKDAsbi5wcm9wZXJ0eURpZENoYW5nZSkoZSwiZmlyc3RPYmplY3QiLGwpKSx2b2lkIDAhPT1j
Lmxhc3RPYmplY3QmJnUoZSwoMCxuLmdldCkoZSwibGVuZ3RoIiktMSkhPT1uLmNhY2hlRm9yLmdl
dChjLCJsYXN0T2JqZWN0IikmJigoMCxuLnByb3BlcnR5V2lsbENoYW5nZSkoZSwibGFzdE9iamVj
dCIsbCksKDAsbi5wcm9wZXJ0eURpZENoYW5nZSkoZSwibGFzdE9iamVjdCIsbCkpKSxlfWZ1bmN0
aW9uIHAoZSl7dGhpcy5fY29udGVudD1lLHRoaXMuX2tleXM9dm9pZCAwLCgwLG4ubWV0YSkodGhp
cyl9ZnVuY3Rpb24gZihlLHQscixpLG8pe2Zvcih2YXIgczstLW8+PWk7KShzPXUoZSxvKSkmJigo
MCxuLl9hZGRCZWZvcmVPYnNlcnZlcikocyx0LHIsImNvbnRlbnRLZXlXaWxsQ2hhbmdlIiksKDAs
bi5hZGRPYnNlcnZlcikocyx0LHIsImNvbnRlbnRLZXlEaWRDaGFuZ2UiKSl9ZnVuY3Rpb24gaChl
LHQscixpLG8pe2Zvcih2YXIgczstLW8+PWk7KShzPXUoZSxvKSkmJigoMCxuLl9yZW1vdmVCZWZv
cmVPYnNlcnZlcikocyx0LHIsImNvbnRlbnRLZXlXaWxsQ2hhbmdlIiksKDAsbi5yZW1vdmVPYnNl
cnZlcikocyx0LHIsImNvbnRlbnRLZXlEaWRDaGFuZ2UiKSl9ZS5hZGRBcnJheU9ic2VydmVyPXMs
ZS5yZW1vdmVBcnJheU9ic2VydmVyPWEsZS5vYmplY3RBdD11LGUuYXJyYXlDb250ZW50V2lsbENo
YW5nZT1sLGUuYXJyYXlDb250ZW50RGlkQ2hhbmdlPWMsZS5pc0VtYmVyQXJyYXk9ZnVuY3Rpb24o
ZSl7cmV0dXJuIGUmJiEhZVttXX0KK3ZhciBkLG09KDAsdC5zeW1ib2wpKCJFTUJFUl9BUlJBWSIp
LGc9bi5NaXhpbi5jcmVhdGUoaS5kZWZhdWx0LChkPXt9LGRbbV09ITAsZC5sZW5ndGg9bnVsbCxk
Lm9iamVjdEF0PWZ1bmN0aW9uKGUpe2lmKCEoZTwwfHxlPj0oMCxuLmdldCkodGhpcywibGVuZ3Ro
IikpKXJldHVybigwLG4uZ2V0KSh0aGlzLGUpfSxkLm9iamVjdHNBdD1mdW5jdGlvbihlKXt2YXIg
dD10aGlzCityZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHUodCxlKX0pfSxkLm5leHRP
YmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHUodGhpcyxlKX0sZFsiW10iXT0oMCxuLmNvbXB1dGVk
KSh7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHNldDpmdW5jdGlvbihlLHQpe3JldHVybiB0
aGlzLnJlcGxhY2UoMCwoMCxuLmdldCkodGhpcywibGVuZ3RoIiksdCksdGhpc319KSxkLmZpcnN0
T2JqZWN0PSgwLG4uY29tcHV0ZWQpKGZ1bmN0aW9uKCl7cmV0dXJuIHUodGhpcywwKX0pLnJlYWRP
bmx5KCksZC5sYXN0T2JqZWN0PSgwLG4uY29tcHV0ZWQpKGZ1bmN0aW9uKCl7cmV0dXJuIHUodGhp
cywoMCxuLmdldCkodGhpcywibGVuZ3RoIiktMSl9KS5yZWFkT25seSgpLGQuY29udGFpbnM9ZnVu
Y3Rpb24oZSl7cmV0dXJuIHRoaXMuaW5kZXhPZihlKT49MH0sZC5zbGljZT1mdW5jdGlvbihlLHQp
e3ZhciByPW4uZGVmYXVsdC5BKCksaT0oMCxuLmdldCkodGhpcywibGVuZ3RoIikKK2ZvcigoMCxu
LmlzTm9uZSkoZSkmJihlPTApLCgoMCxuLmlzTm9uZSkodCl8fHQ+aSkmJih0PWkpLGU8MCYmKGU9
aStlKSx0PDAmJih0PWkrdCk7ZTx0OylyW3IubGVuZ3RoXT11KHRoaXMsZSsrKQorcmV0dXJuIHJ9
LGQuaW5kZXhPZj1mdW5jdGlvbihlLHQpe3ZhciByLGk9KDAsbi5nZXQpKHRoaXMsImxlbmd0aCIp
Citmb3Iodm9pZCAwPT09dCYmKHQ9MCksdDwwJiYodCs9aSkscj10O3I8aTtyKyspaWYodSh0aGlz
LHIpPT09ZSlyZXR1cm4gcgorcmV0dXJuLTF9LGQubGFzdEluZGV4T2Y9ZnVuY3Rpb24oZSx0KXt2
YXIgcixpPSgwLG4uZ2V0KSh0aGlzLCJsZW5ndGgiKQorZm9yKCh2b2lkIDA9PT10fHx0Pj1pKSYm
KHQ9aS0xKSx0PDAmJih0Kz1pKSxyPXQ7cj49MDtyLS0paWYodSh0aGlzLHIpPT09ZSlyZXR1cm4g
cgorcmV0dXJuLTF9LGQuYWRkQXJyYXlPYnNlcnZlcj1mdW5jdGlvbihlLHQpe3JldHVybiBzKHRo
aXMsZSx0KX0sZC5yZW1vdmVBcnJheU9ic2VydmVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEodGhp
cyxlLHQpfSxkLmhhc0FycmF5T2JzZXJ2ZXJzPSgwLG4uY29tcHV0ZWQpKGZ1bmN0aW9uKCl7cmV0
dXJuKDAsbi5oYXNMaXN0ZW5lcnMpKHRoaXMsIkBhcnJheTpjaGFuZ2UiKXx8KDAsbi5oYXNMaXN0
ZW5lcnMpKHRoaXMsIkBhcnJheTpiZWZvcmUiKX0pLGQuYXJyYXlDb250ZW50V2lsbENoYW5nZT1m
dW5jdGlvbihlLHQsbil7cmV0dXJuIGwodGhpcyxlLHQsbil9LGQuYXJyYXlDb250ZW50RGlkQ2hh
bmdlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gYyh0aGlzLGUsdCxuKX0sZC5pbmNsdWRlcz1mdW5j
dGlvbihlLHQpe3ZhciByLGksbz0oMCxuLmdldCkodGhpcywibGVuZ3RoIikKK2Zvcih2b2lkIDA9
PT10JiYodD0wKSx0PDAmJih0Kz1vKSxyPXQ7cjxvO3IrKylpZihpPXUodGhpcyxyKSxlPT09aXx8
ZSE9PWUmJmkhPT1pKXJldHVybiEwCityZXR1cm4hMX0sZFsiQGVhY2giXT0oMCxuLmNvbXB1dGVk
KShmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZWFjaHx8KHRoaXMuX19lYWNoPW5ldyBwKHRoaXMp
KSx0aGlzLl9fZWFjaH0pLnZvbGF0aWxlKCkucmVhZE9ubHkoKSxkKSkKK3AucHJvdG90eXBlPXtf
X2RlZmluZU5vbkVudW1lcmFibGU6ZnVuY3Rpb24oZSl7dGhpc1tlLm5hbWVdPWUuZGVzY3JpcHRv
ci52YWx1ZX0sYXJyYXlXaWxsQ2hhbmdlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgaT10aGlzLl9rZXlz
LG89cj4wP3QrcjotMSxzPXZvaWQgMAorZm9yKHZhciBhIGluIGkpcz1zfHwoMCxuLnBlZWtNZXRh
KSh0aGlzKSxvPjAmJmgoZSxhLHRoaXMsdCxvKSwoMCxuLnByb3BlcnR5V2lsbENoYW5nZSkodGhp
cyxhLHMpfSxhcnJheURpZENoYW5nZTpmdW5jdGlvbihlLHQscixpKXt2YXIgbz10aGlzLl9rZXlz
LHM9aT4wP3QraTotMSxhPXZvaWQgMAorZm9yKHZhciB1IGluIG8pYT1hfHwoMCxuLnBlZWtNZXRh
KSh0aGlzKSxzPjAmJmYoZSx1LHRoaXMsdCxzKSwoMCxuLnByb3BlcnR5RGlkQ2hhbmdlKSh0aGlz
LHUsYSl9LHdpbGxXYXRjaFByb3BlcnR5OmZ1bmN0aW9uKGUpe3RoaXMuYmVnaW5PYnNlcnZpbmdD
b250ZW50S2V5KGUpfSxkaWRVbndhdGNoUHJvcGVydHk6ZnVuY3Rpb24oZSl7dGhpcy5zdG9wT2Jz
ZXJ2aW5nQ29udGVudEtleShlKX0sYmVnaW5PYnNlcnZpbmdDb250ZW50S2V5OmZ1bmN0aW9uKGUp
e3ZhciB0LHIsaT10aGlzLl9rZXlzCitpfHwoaT10aGlzLl9rZXlzPU9iamVjdC5jcmVhdGUobnVs
bCkpLGlbZV0/aVtlXSsrOihpW2VdPTEsdD10aGlzLl9jb250ZW50LHI9KDAsbi5nZXQpKHQsImxl
bmd0aCIpLGYodCxlLHRoaXMsMCxyKSl9LHN0b3BPYnNlcnZpbmdDb250ZW50S2V5OmZ1bmN0aW9u
KGUpe3ZhciB0LHIsaT10aGlzLl9rZXlzCitpJiZpW2VdPjAmJi0taVtlXTw9MCYmKHQ9dGhpcy5f
Y29udGVudCxyPSgwLG4uZ2V0KSh0LCJsZW5ndGgiKSxoKHQsZSx0aGlzLDAscikpfSxjb250ZW50
S2V5V2lsbENoYW5nZTpmdW5jdGlvbihlLHQpeygwLG4ucHJvcGVydHlXaWxsQ2hhbmdlKSh0aGlz
LHQpfSxjb250ZW50S2V5RGlkQ2hhbmdlOmZ1bmN0aW9uKGUsdCl7KDAsbi5wcm9wZXJ0eURpZENo
YW5nZSkodGhpcyx0KX19LGUuZGVmYXVsdD1nfSksZSgiZW1iZXItcnVudGltZS9taXhpbnMvY29t
cGFyYWJsZSIsWyJleHBvcnRzIiwiZW1iZXItbWV0YWwiXSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3Ry
aWN0IgorZS5kZWZhdWx0PXQuTWl4aW4uY3JlYXRlKHtjb21wYXJlOm51bGx9KX0pLGUoImVtYmVy
LXJ1bnRpbWUvbWl4aW5zL2NvbnRhaW5lcl9wcm94eSIsWyJleHBvcnRzIiwiZW1iZXItbWV0YWwi
XSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IgorZS5kZWZhdWx0PXQuTWl4aW4uY3JlYXRlKHtf
X2NvbnRhaW5lcl9fOm51bGwsb3duZXJJbmplY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5f
X2NvbnRhaW5lcl9fLm93bmVySW5qZWN0aW9uKCl9LGxvb2t1cDpmdW5jdGlvbihlLHQpe3JldHVy
biB0aGlzLl9fY29udGFpbmVyX18ubG9va3VwKGUsdCl9LF9sb29rdXBGYWN0b3J5OmZ1bmN0aW9u
KGUsdCl7cmV0dXJuIHRoaXMuX19jb250YWluZXJfXy5sb29rdXBGYWN0b3J5KGUsdCl9LF9yZXNv
bHZlTG9jYWxMb29rdXBOYW1lOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX19jb250YWluZXJf
Xy5yZWdpc3RyeS5leHBhbmRMb2NhbExvb2t1cCgiY29tcG9uZW50OiIrZSx7c291cmNlOnR9KX0s
d2lsbERlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl9zdXBlci5hcHBseSh0aGlzLGFyZ3VtZW50cyks
dGhpcy5fX2NvbnRhaW5lcl9fJiYoMCx0LnJ1bikodGhpcy5fX2NvbnRhaW5lcl9fLCJkZXN0cm95
Iil9LGZhY3RvcnlGb3I6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lk
IDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9CityZXR1cm4gdGhpcy5fX2NvbnRhaW5l
cl9fLmZhY3RvcnlGb3IoZSx0KX19KX0pLGUoImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2NvbnRyb2xs
ZXIiLFsiZXhwb3J0cyIsImVtYmVyLW1ldGFsIiwiZW1iZXItcnVudGltZS9taXhpbnMvYWN0aW9u
X2hhbmRsZXIiLCJlbWJlci1ydW50aW1lL21peGlucy9jb250cm9sbGVyX2NvbnRlbnRfbW9kZWxf
YWxpYXNfZGVwcmVjYXRpb24iXSxmdW5jdGlvbihlLHQsbixyKXsidXNlIHN0cmljdCIKK2UuZGVm
YXVsdD10Lk1peGluLmNyZWF0ZShuLmRlZmF1bHQsci5kZWZhdWx0LHtpc0NvbnRyb2xsZXI6ITAs
dGFyZ2V0Om51bGwsc3RvcmU6bnVsbCxtb2RlbDpudWxsLGNvbnRlbnQ6KDAsdC5hbGlhcykoIm1v
ZGVsIil9KX0pLGUoImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2NvbnRyb2xsZXJfY29udGVudF9tb2Rl
bF9hbGlhc19kZXByZWNhdGlvbiIsWyJleHBvcnRzIiwiZW1iZXItbWV0YWwiLCJlbWJlci1kZWJ1
ZyJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCIKK2UuZGVmYXVsdD10Lk1peGluLmNyZWF0
ZSh7d2lsbE1lcmdlTWl4aW46ZnVuY3Rpb24oZSl7dGhpcy5fc3VwZXIuYXBwbHkodGhpcyxhcmd1
bWVudHMpCit2YXIgdD0hIWUubW9kZWwKK2UuY29udGVudCYmIXQmJihlLm1vZGVsPWUuY29udGVu
dCxkZWxldGUgZS5jb250ZW50KX19KX0pLGUoImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2NvcHlhYmxl
IixbImV4cG9ydHMiLCJlbWJlci1tZXRhbCIsImVtYmVyLWRlYnVnIiwiZW1iZXItcnVudGltZS9t
aXhpbnMvZnJlZXphYmxlIl0sZnVuY3Rpb24oZSx0LG4scil7InVzZSBzdHJpY3QiCitlLmRlZmF1
bHQ9dC5NaXhpbi5jcmVhdGUoe2NvcHk6bnVsbCxmcm96ZW5Db3B5OmZ1bmN0aW9uKCl7aWYoci5G
cmVlemFibGUmJnIuRnJlZXphYmxlLmRldGVjdCh0aGlzKSlyZXR1cm4oMCx0LmdldCkodGhpcywi
aXNGcm96ZW4iKT90aGlzOnRoaXMuY29weSgpLmZyZWV6ZSgpCit0aHJvdyBuZXcgbi5FcnJvcih0
aGlzKyIgZG9lcyBub3Qgc3VwcG9ydCBmcmVlemluZyIpfX0pfSksZSgiZW1iZXItcnVudGltZS9t
aXhpbnMvZW51bWVyYWJsZSIsWyJleHBvcnRzIiwiZW1iZXItdXRpbHMiLCJlbWJlci1tZXRhbCIs
ImVtYmVyLWRlYnVnIiwiZW1iZXItcnVudGltZS9jb21wYXJlIiwicmVxdWlyZSJdLGZ1bmN0aW9u
KGUsdCxuLHIsaSxvKXsidXNlIHN0cmljdCIKK2Z1bmN0aW9uIHMoKXtyZXR1cm4oY3x8KGM9KDAs
by5kZWZhdWx0KSgiZW1iZXItcnVudGltZS9zeXN0ZW0vbmF0aXZlX2FycmF5IikuQSkpKCl9ZnVu
Y3Rpb24gYSgpe3JldHVybiAwPT09cC5sZW5ndGg/e306cC5wb3AoKX1mdW5jdGlvbiB1KGUpe3Jl
dHVybiBwLnB1c2goZSksbnVsbH1mdW5jdGlvbiBsKGUsdCl7dmFyIHI9Mj09PWFyZ3VtZW50cy5s
ZW5ndGgKK3JldHVybiBmdW5jdGlvbihpKXt2YXIgbz0oMCxuLmdldCkoaSxlKQorcmV0dXJuIHI/
dD09PW86ISFvfX12YXIgYz12b2lkIDAscD1bXSxmPW4uTWl4aW4uY3JlYXRlKHtuZXh0T2JqZWN0
Om51bGwsZmlyc3RPYmplY3Q6KDAsbi5jb21wdXRlZCkoIltdIixmdW5jdGlvbigpe2lmKDAhPT0o
MCxuLmdldCkodGhpcywibGVuZ3RoIikpe3ZhciBlPWEoKSx0PXRoaXMubmV4dE9iamVjdCgwLG51
bGwsZSkKK3JldHVybiB1KGUpLHR9fSkucmVhZE9ubHkoKSxsYXN0T2JqZWN0OigwLG4uY29tcHV0
ZWQpKCJbXSIsZnVuY3Rpb24oKXtpZigwIT09KDAsbi5nZXQpKHRoaXMsImxlbmd0aCIpKXt2YXIg
ZT1hKCksdD0wLHI9bnVsbCxpPXZvaWQgMAorZG97cj1pLGk9dGhpcy5uZXh0T2JqZWN0KHQrKyxy
LGUpfXdoaWxlKHZvaWQgMCE9PWkpCityZXR1cm4gdShlKSxyfX0pLnJlYWRPbmx5KCksY29udGFp
bnM6ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuZmluZChmdW5jdGlvbih0KXtyZXR1
cm4gdD09PWV9KX0sZm9yRWFjaDpmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBl
KXRocm93IG5ldyBUeXBlRXJyb3IKK3ZhciByLGksbz1hKCkscz0oMCxuLmdldCkodGhpcywibGVu
Z3RoIiksbD1udWxsCitmb3Iodm9pZCAwPT09dCYmKHQ9bnVsbCkscj0wO3I8cztyKyspaT10aGlz
Lm5leHRPYmplY3QocixsLG8pLGUuY2FsbCh0LGkscix0aGlzKSxsPWkKK3JldHVybiBsPW51bGws
bz11KG8pLHRoaXN9LGdldEVhY2g6KDAsbi5hbGlhc01ldGhvZCkoIm1hcEJ5Iiksc2V0RWFjaDpm
dW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24ocil7cmV0dXJuKDAsbi5z
ZXQpKHIsZSx0KX0pfSxtYXA6ZnVuY3Rpb24oZSx0KXt2YXIgbj1zKCkKK3JldHVybiB0aGlzLmZv
ckVhY2goZnVuY3Rpb24ocixpLG8pe3JldHVybiBuW2ldPWUuY2FsbCh0LHIsaSxvKX0pLG59LG1h
cEJ5OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4oMCxuLmdl
dCkodCxlKX0pfSxmaWx0ZXI6ZnVuY3Rpb24oZSx0KXt2YXIgbj1zKCkKK3JldHVybiB0aGlzLmZv
ckVhY2goZnVuY3Rpb24ocixpLG8pe2UuY2FsbCh0LHIsaSxvKSYmbi5wdXNoKHIpfSksbn0scmVq
ZWN0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIWUu
YXBwbHkodCxhcmd1bWVudHMpfSl9LGZpbHRlckJ5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmls
dGVyKGwuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0scmVqZWN0Qnk6ZnVuY3Rpb24oZSx0KXt2YXIg
cj0yPT09YXJndW1lbnRzLmxlbmd0aD9mdW5jdGlvbihyKXtyZXR1cm4oMCxuLmdldCkocixlKT09
PXR9OmZ1bmN0aW9uKHQpe3JldHVybiEhKDAsbi5nZXQpKHQsZSl9CityZXR1cm4gdGhpcy5yZWpl
Y3Qocil9LGZpbmQ6ZnVuY3Rpb24oZSx0KXt2YXIgcixpPSgwLG4uZ2V0KSh0aGlzLCJsZW5ndGgi
KQordm9pZCAwPT09dCYmKHQ9bnVsbCkKK3ZhciBvPWEoKSxzPSExLGw9bnVsbCxjPXZvaWQgMCxw
PXZvaWQgMAorZm9yKHI9MDtyPGkmJiFzO3IrKyljPXRoaXMubmV4dE9iamVjdChyLGwsbykscz1l
LmNhbGwodCxjLHIsdGhpcykscyYmKHA9YyksbD1jCityZXR1cm4gYz1sPW51bGwsbz11KG8pLHB9
LGZpbmRCeTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbmQobC5hcHBseSh0aGlzLGFyZ3VtZW50
cykpfSxldmVyeTpmdW5jdGlvbihlLHQpe3JldHVybiF0aGlzLmZpbmQoZnVuY3Rpb24obixyLGkp
e3JldHVybiFlLmNhbGwodCxuLHIsaSl9KX0saXNFdmVyeTpmdW5jdGlvbigpe3JldHVybiB0aGlz
LmV2ZXJ5KGwuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sYW55OmZ1bmN0aW9uKGUsdCl7dmFyIHIs
aT0oMCxuLmdldCkodGhpcywibGVuZ3RoIiksbz1hKCkscz0hMSxsPW51bGwsYz12b2lkIDAKK2Zv
cih2b2lkIDA9PT10JiYodD1udWxsKSxyPTA7cjxpJiYhcztyKyspYz10aGlzLm5leHRPYmplY3Qo
cixsLG8pLHM9ZS5jYWxsKHQsYyxyLHRoaXMpLGw9YworcmV0dXJuIGM9bD1udWxsLG89dShvKSxz
fSxpc0FueTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFueShsLmFwcGx5KHRoaXMsYXJndW1lbnRz
KSl9LHJlZHVjZTpmdW5jdGlvbihlLHQsbil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cg
bmV3IFR5cGVFcnJvcgordmFyIHI9dAorcmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbih0LGkp
e3I9ZShyLHQsaSx0aGlzLG4pfSx0aGlzKSxyfSxpbnZva2U6ZnVuY3Rpb24oZSl7Zm9yKHQ9YXJn
dW1lbnRzLmxlbmd0aCxuPUFycmF5KHQ+MT90LTE6MCkscj0xO3I8dDtyKyspbltyLTFdPWFyZ3Vt
ZW50c1tyXQordmFyIHQsbixyLGk9cygpCityZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHQs
cil7dmFyIG89dCYmdFtlXQorImZ1bmN0aW9uIj09dHlwZW9mIG8mJihpW3JdPW4/by5hcHBseSh0
LG4pOnRbZV0oKSl9LHRoaXMpLGl9LHRvQXJyYXk6ZnVuY3Rpb24oKXt2YXIgZT1zKCkKK3JldHVy
biB0aGlzLmZvckVhY2goZnVuY3Rpb24odCxuKXtyZXR1cm4gZVtuXT10fSksZX0sY29tcGFjdDpm
dW5jdGlvbigpe3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZX0p
fSx3aXRob3V0OmZ1bmN0aW9uKGUpe2lmKCF0aGlzLmluY2x1ZGVzKGUpKXJldHVybiB0aGlzCit2
YXIgdD1zKCkKK3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24obil7bj09PWV8fG4hPT1uJiZl
IT09ZXx8KHRbdC5sZW5ndGhdPW4pfSksdH0sdW5pcTpmdW5jdGlvbigpe3ZhciBlPXMoKQorcmV0
dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbih0KXtlLmluZGV4T2YodCk8MCYmZS5wdXNoKHQpfSks
ZX0sIltdIjooMCxuLmNvbXB1dGVkKSh7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fSksYWRk
RW51bWVyYWJsZU9ic2VydmVyOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dCYmdC53aWxsQ2hhbmdlfHwi
ZW51bWVyYWJsZVdpbGxDaGFuZ2UiLGk9dCYmdC5kaWRDaGFuZ2V8fCJlbnVtZXJhYmxlRGlkQ2hh
bmdlIixvPSgwLG4uZ2V0KSh0aGlzLCJoYXNFbnVtZXJhYmxlT2JzZXJ2ZXJzIikKK3JldHVybiBv
fHwoMCxuLnByb3BlcnR5V2lsbENoYW5nZSkodGhpcywiaGFzRW51bWVyYWJsZU9ic2VydmVycyIp
LCgwLG4uYWRkTGlzdGVuZXIpKHRoaXMsIkBlbnVtZXJhYmxlOmJlZm9yZSIsZSxyKSwoMCxuLmFk
ZExpc3RlbmVyKSh0aGlzLCJAZW51bWVyYWJsZTpjaGFuZ2UiLGUsaSksb3x8KDAsbi5wcm9wZXJ0
eURpZENoYW5nZSkodGhpcywiaGFzRW51bWVyYWJsZU9ic2VydmVycyIpLHRoaXN9LHJlbW92ZUVu
dW1lcmFibGVPYnNlcnZlcjpmdW5jdGlvbihlLHQpe3ZhciByPXQmJnQud2lsbENoYW5nZXx8ImVu
dW1lcmFibGVXaWxsQ2hhbmdlIixpPXQmJnQuZGlkQ2hhbmdlfHwiZW51bWVyYWJsZURpZENoYW5n
ZSIsbz0oMCxuLmdldCkodGhpcywiaGFzRW51bWVyYWJsZU9ic2VydmVycyIpCityZXR1cm4gbyYm
KDAsbi5wcm9wZXJ0eVdpbGxDaGFuZ2UpKHRoaXMsImhhc0VudW1lcmFibGVPYnNlcnZlcnMiKSwo
MCxuLnJlbW92ZUxpc3RlbmVyKSh0aGlzLCJAZW51bWVyYWJsZTpiZWZvcmUiLGUsciksKDAsbi5y
ZW1vdmVMaXN0ZW5lcikodGhpcywiQGVudW1lcmFibGU6Y2hhbmdlIixlLGkpLG8mJigwLG4ucHJv
cGVydHlEaWRDaGFuZ2UpKHRoaXMsImhhc0VudW1lcmFibGVPYnNlcnZlcnMiKSx0aGlzfSxoYXNF
bnVtZXJhYmxlT2JzZXJ2ZXJzOigwLG4uY29tcHV0ZWQpKGZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5o
YXNMaXN0ZW5lcnMpKHRoaXMsIkBlbnVtZXJhYmxlOmNoYW5nZSIpfHwoMCxuLmhhc0xpc3RlbmVy
cykodGhpcywiQGVudW1lcmFibGU6YmVmb3JlIil9KSxlbnVtZXJhYmxlQ29udGVudFdpbGxDaGFu
Z2U6ZnVuY3Rpb24oZSx0KXt2YXIgcj12b2lkIDAsaT12b2lkIDAsbz12b2lkIDAKK3JldHVybiBy
PSJudW1iZXIiPT10eXBlb2YgZT9lOmU/KDAsbi5nZXQpKGUsImxlbmd0aCIpOmU9LTEsaT0ibnVt
YmVyIj09dHlwZW9mIHQ/dDp0PygwLG4uZ2V0KSh0LCJsZW5ndGgiKTp0PS0xLG89aTwwfHxyPDB8
fGktciE9MCwtMT09PWUmJihlPW51bGwpLC0xPT09dCYmKHQ9bnVsbCksKDAsbi5wcm9wZXJ0eVdp
bGxDaGFuZ2UpKHRoaXMsIltdIiksbyYmKDAsbi5wcm9wZXJ0eVdpbGxDaGFuZ2UpKHRoaXMsImxl
bmd0aCIpLCgwLG4uc2VuZEV2ZW50KSh0aGlzLCJAZW51bWVyYWJsZTpiZWZvcmUiLFt0aGlzLGUs
dF0pLHRoaXN9LGVudW1lcmFibGVDb250ZW50RGlkQ2hhbmdlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9
dm9pZCAwLGk9dm9pZCAwLG89dm9pZCAwCityZXR1cm4gcj0ibnVtYmVyIj09dHlwZW9mIGU/ZTpl
PygwLG4uZ2V0KShlLCJsZW5ndGgiKTplPS0xLGk9Im51bWJlciI9PXR5cGVvZiB0P3Q6dD8oMCxu
LmdldCkodCwibGVuZ3RoIik6dD0tMSxvPWk8MHx8cjwwfHxpLXIhPTAsLTE9PT1lJiYoZT1udWxs
KSwtMT09PXQmJih0PW51bGwpLCgwLG4uc2VuZEV2ZW50KSh0aGlzLCJAZW51bWVyYWJsZTpjaGFu
Z2UiLFt0aGlzLGUsdF0pLG8mJigwLG4ucHJvcGVydHlEaWRDaGFuZ2UpKHRoaXMsImxlbmd0aCIp
LCgwLG4ucHJvcGVydHlEaWRDaGFuZ2UpKHRoaXMsIltdIiksdGhpc30sc29ydEJ5OmZ1bmN0aW9u
KCl7dmFyIGU9YXJndW1lbnRzCityZXR1cm4gdGhpcy50b0FycmF5KCkuc29ydChmdW5jdGlvbih0
LHIpe3ZhciBvLHMsYSx1LGwKK2ZvcihvPTA7bzxlLmxlbmd0aDtvKyspaWYocz1lW29dLGE9KDAs
bi5nZXQpKHQscyksdT0oMCxuLmdldCkocixzKSxsPSgwLGkuZGVmYXVsdCkoYSx1KSlyZXR1cm4g
bAorcmV0dXJuIDB9KX0sdW5pcUJ5OmZ1bmN0aW9uKGUpe3ZhciByPXMoKSxpPU9iamVjdC5jcmVh
dGUobnVsbCkKK3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24obyl7dmFyIHM9KDAsdC5ndWlk
Rm9yKSgoMCxuLmdldCkobyxlKSkKK3MgaW4gaXx8KGlbc109ITAsci5wdXNoKG8pKX0pLHJ9LGlu
Y2x1ZGVzOmZ1bmN0aW9uKGUpe3ZhciB0PSgwLG4uZ2V0KSh0aGlzLCJsZW5ndGgiKSxyPXZvaWQg
MCxpPXZvaWQgMCxvPW51bGwscz0hMSxsPWEoKQorZm9yKHI9MDtyPHQmJiFzO3IrKylpPXRoaXMu
bmV4dE9iamVjdChyLG8sbCkscz1lPT09aXx8ZSE9PWUmJmkhPT1pLG89aQorcmV0dXJuIGk9bz1u
dWxsLGw9dShsKSxzfX0pCitlLmRlZmF1bHQ9Zn0pLGUoImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2V2
ZW50ZWQiLFsiZXhwb3J0cyIsImVtYmVyLW1ldGFsIl0sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmlj
dCIKK2UuZGVmYXVsdD10Lk1peGluLmNyZWF0ZSh7b246ZnVuY3Rpb24oZSxuLHIpe3JldHVybigw
LHQuYWRkTGlzdGVuZXIpKHRoaXMsZSxuLHIpLHRoaXN9LG9uZTpmdW5jdGlvbihlLG4scil7cmV0
dXJuIHJ8fChyPW4sbj1udWxsKSwoMCx0LmFkZExpc3RlbmVyKSh0aGlzLGUsbixyLCEwKSx0aGlz
fSx0cmlnZ2VyOmZ1bmN0aW9uKGUpe3ZhciBuLHIsaQorZm9yKG49YXJndW1lbnRzLmxlbmd0aCxy
PUFycmF5KG4+MT9uLTE6MCksaT0xO2k8bjtpKyspcltpLTFdPWFyZ3VtZW50c1tpXTsoMCx0LnNl
bmRFdmVudCkodGhpcyxlLHIpfSxvZmY6ZnVuY3Rpb24oZSxuLHIpe3JldHVybigwLHQucmVtb3Zl
TGlzdGVuZXIpKHRoaXMsZSxuLHIpLHRoaXN9LGhhczpmdW5jdGlvbihlKXtyZXR1cm4oMCx0Lmhh
c0xpc3RlbmVycykodGhpcyxlKX19KX0pLGUoImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2ZyZWV6YWJs
ZSIsWyJleHBvcnRzIiwiZW1iZXItbWV0YWwiLCJlbWJlci1kZWJ1ZyJdLGZ1bmN0aW9uKGUsdCxu
KXsidXNlIHN0cmljdCIKK2UuRlJPWkVOX0VSUk9SPWUuRnJlZXphYmxlPXZvaWQgMCxlLkZyZWV6
YWJsZT10Lk1peGluLmNyZWF0ZSh7aW5pdDpmdW5jdGlvbigpe3RoaXMuX3N1cGVyLmFwcGx5KHRo
aXMsYXJndW1lbnRzKX0saXNGcm96ZW46ITEsZnJlZXplOmZ1bmN0aW9uKCl7cmV0dXJuKDAsdC5n
ZXQpKHRoaXMsImlzRnJvemVuIik/dGhpczooKDAsdC5zZXQpKHRoaXMsImlzRnJvemVuIiwhMCks
dGhpcyl9fSksZS5GUk9aRU5fRVJST1I9IkZyb3plbiBvYmplY3QgY2Fubm90IGJlIG1vZGlmaWVk
LiJ9KSxlKCJlbWJlci1ydW50aW1lL21peGlucy9tdXRhYmxlX2FycmF5IixbImV4cG9ydHMiLCJl
bWJlci1tZXRhbCIsImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2FycmF5IiwiZW1iZXItcnVudGltZS9t
aXhpbnMvbXV0YWJsZV9lbnVtZXJhYmxlIiwiZW1iZXItcnVudGltZS9taXhpbnMvZW51bWVyYWJs
ZSIsImVtYmVyLWRlYnVnIl0sZnVuY3Rpb24oZSx0LG4scixpLG8peyJ1c2Ugc3RyaWN0IgorZnVu
Y3Rpb24gcyhlLG4scil7aWYoIm51bWJlciI9PXR5cGVvZiBuKXtpZihuPDB8fG4+PSgwLHQuZ2V0
KShlLCJsZW5ndGgiKSl0aHJvdyBuZXcgby5FcnJvcihhKQordm9pZCAwPT09ciYmKHI9MSksZS5y
ZXBsYWNlKG4scix1KX1yZXR1cm4gZX1lLnJlbW92ZUF0PXMKK3ZhciBhPSJJbmRleCBvdXQgb2Yg
cmFuZ2UiLHU9W10KK2UuZGVmYXVsdD10Lk1peGluLmNyZWF0ZShuLmRlZmF1bHQsci5kZWZhdWx0
LHtyZXBsYWNlOm51bGwsY2xlYXI6ZnVuY3Rpb24oKXt2YXIgZT0oMCx0LmdldCkodGhpcywibGVu
Z3RoIikKK3JldHVybiAwPT09ZT90aGlzOih0aGlzLnJlcGxhY2UoMCxlLHUpLHRoaXMpfSxpbnNl
cnRBdDpmdW5jdGlvbihlLG4pe2lmKGU+KDAsdC5nZXQpKHRoaXMsImxlbmd0aCIpKXRocm93IG5l
dyBvLkVycm9yKGEpCityZXR1cm4gdGhpcy5yZXBsYWNlKGUsMCxbbl0pLHRoaXN9LHJlbW92ZUF0
OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHModGhpcyxlLHQpfSxwdXNoT2JqZWN0OmZ1bmN0aW9uKGUp
e3JldHVybiB0aGlzLmluc2VydEF0KCgwLHQuZ2V0KSh0aGlzLCJsZW5ndGgiKSxlKSxlfSxwdXNo
T2JqZWN0czpmdW5jdGlvbihlKXtpZighaS5kZWZhdWx0LmRldGVjdChlKSYmIUFycmF5LmlzQXJy
YXkoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiTXVzdCBwYXNzIEVtYmVyLkVudW1lcmFibGUgdG8g
RW1iZXIuTXV0YWJsZUFycmF5I3B1c2hPYmplY3RzIikKK3JldHVybiB0aGlzLnJlcGxhY2UoKDAs
dC5nZXQpKHRoaXMsImxlbmd0aCIpLDAsZSksdGhpc30scG9wT2JqZWN0OmZ1bmN0aW9uKCl7dmFy
IGU9KDAsdC5nZXQpKHRoaXMsImxlbmd0aCIpCitpZigwPT09ZSlyZXR1cm4gbnVsbAordmFyIHI9
KDAsbi5vYmplY3RBdCkodGhpcyxlLTEpCityZXR1cm4gdGhpcy5yZW1vdmVBdChlLTEsMSkscn0s
c2hpZnRPYmplY3Q6ZnVuY3Rpb24oKXtpZigwPT09KDAsdC5nZXQpKHRoaXMsImxlbmd0aCIpKXJl
dHVybiBudWxsCit2YXIgZT0oMCxuLm9iamVjdEF0KSh0aGlzLDApCityZXR1cm4gdGhpcy5yZW1v
dmVBdCgwKSxlfSx1bnNoaWZ0T2JqZWN0OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmluc2VydEF0
KDAsZSksZX0sdW5zaGlmdE9iamVjdHM6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmVwbGFjZSgw
LDAsZSksdGhpc30scmV2ZXJzZU9iamVjdHM6ZnVuY3Rpb24oKXt2YXIgZT0oMCx0LmdldCkodGhp
cywibGVuZ3RoIikKK2lmKDA9PT1lKXJldHVybiB0aGlzCit2YXIgbj10aGlzLnRvQXJyYXkoKS5y
ZXZlcnNlKCkKK3JldHVybiB0aGlzLnJlcGxhY2UoMCxlLG4pLHRoaXN9LHNldE9iamVjdHM6ZnVu
Y3Rpb24oZSl7aWYoMD09PWUubGVuZ3RoKXJldHVybiB0aGlzLmNsZWFyKCkKK3ZhciBuPSgwLHQu
Z2V0KSh0aGlzLCJsZW5ndGgiKQorcmV0dXJuIHRoaXMucmVwbGFjZSgwLG4sZSksdGhpc30scmVt
b3ZlT2JqZWN0OmZ1bmN0aW9uKGUpe2Zvcih2YXIgcj0oMCx0LmdldCkodGhpcywibGVuZ3RoIil8
fDA7LS1yPj0wOykoMCxuLm9iamVjdEF0KSh0aGlzLHIpPT09ZSYmdGhpcy5yZW1vdmVBdChyKQor
cmV0dXJuIHRoaXN9LGFkZE9iamVjdDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5pbmNsdWRlcyhl
KXx8dGhpcy5wdXNoT2JqZWN0KGUpLHRoaXN9fSl9KSxlKCJlbWJlci1ydW50aW1lL21peGlucy9t
dXRhYmxlX2VudW1lcmFibGUiLFsiZXhwb3J0cyIsImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2VudW1l
cmFibGUiLCJlbWJlci1tZXRhbCJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCIKK2UuZGVm
YXVsdD1uLk1peGluLmNyZWF0ZSh0LmRlZmF1bHQse2FkZE9iamVjdDpudWxsLGFkZE9iamVjdHM6
ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcworcmV0dXJuKDAsbi5iZWdpblByb3BlcnR5Q2hhbmdlcyko
dGhpcyksZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiB0LmFkZE9iamVjdChlKX0pLCgwLG4u
ZW5kUHJvcGVydHlDaGFuZ2VzKSh0aGlzKSx0aGlzfSxyZW1vdmVPYmplY3Q6bnVsbCxyZW1vdmVP
YmplY3RzOmZ1bmN0aW9uKGUpe3ZhciB0Citmb3IoKDAsbi5iZWdpblByb3BlcnR5Q2hhbmdlcyko
dGhpcyksdD1lLmxlbmd0aC0xO3Q+PTA7dC0tKXRoaXMucmVtb3ZlT2JqZWN0KGVbdF0pCityZXR1
cm4oMCxuLmVuZFByb3BlcnR5Q2hhbmdlcykodGhpcyksdGhpc319KX0pLGUoImVtYmVyLXJ1bnRp
bWUvbWl4aW5zL29ic2VydmFibGUiLFsiZXhwb3J0cyIsImVtYmVyLW1ldGFsIiwiZW1iZXItZGVi
dWciXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiCitlLmRlZmF1bHQ9dC5NaXhpbi5jcmVh
dGUoe2dldDpmdW5jdGlvbihlKXtyZXR1cm4oMCx0LmdldCkodGhpcyxlKX0sZ2V0UHJvcGVydGll
czpmdW5jdGlvbigpe3ZhciBlLG4scgorZm9yKGU9YXJndW1lbnRzLmxlbmd0aCxuPUFycmF5KGUp
LHI9MDtyPGU7cisrKW5bcl09YXJndW1lbnRzW3JdCityZXR1cm4gdC5nZXRQcm9wZXJ0aWVzLmFw
cGx5KHZvaWQgMCxbdGhpc10uY29uY2F0KG4pKX0sc2V0OmZ1bmN0aW9uKGUsbil7cmV0dXJuKDAs
dC5zZXQpKHRoaXMsZSxuKX0sc2V0UHJvcGVydGllczpmdW5jdGlvbihlKXtyZXR1cm4oMCx0LnNl
dFByb3BlcnRpZXMpKHRoaXMsZSl9LGJlZ2luUHJvcGVydHlDaGFuZ2VzOmZ1bmN0aW9uKCl7cmV0
dXJuKDAsdC5iZWdpblByb3BlcnR5Q2hhbmdlcykoKSx0aGlzfSxlbmRQcm9wZXJ0eUNoYW5nZXM6
ZnVuY3Rpb24oKXtyZXR1cm4oMCx0LmVuZFByb3BlcnR5Q2hhbmdlcykoKSx0aGlzfSxwcm9wZXJ0
eVdpbGxDaGFuZ2U6ZnVuY3Rpb24oZSl7cmV0dXJuKDAsdC5wcm9wZXJ0eVdpbGxDaGFuZ2UpKHRo
aXMsZSksdGhpc30scHJvcGVydHlEaWRDaGFuZ2U6ZnVuY3Rpb24oZSl7cmV0dXJuKDAsdC5wcm9w
ZXJ0eURpZENoYW5nZSkodGhpcyxlKSx0aGlzfSxub3RpZnlQcm9wZXJ0eUNoYW5nZTpmdW5jdGlv
bihlKXtyZXR1cm4gdGhpcy5wcm9wZXJ0eVdpbGxDaGFuZ2UoZSksdGhpcy5wcm9wZXJ0eURpZENo
YW5nZShlKSx0aGlzfSxhZGRPYnNlcnZlcjpmdW5jdGlvbihlLG4scil7KDAsdC5hZGRPYnNlcnZl
cikodGhpcyxlLG4scil9LHJlbW92ZU9ic2VydmVyOmZ1bmN0aW9uKGUsbixyKXsoMCx0LnJlbW92
ZU9ic2VydmVyKSh0aGlzLGUsbixyKX0saGFzT2JzZXJ2ZXJGb3I6ZnVuY3Rpb24oZSl7cmV0dXJu
KDAsdC5oYXNMaXN0ZW5lcnMpKHRoaXMsZSsiOmNoYW5nZSIpfSxnZXRXaXRoRGVmYXVsdDpmdW5j
dGlvbihlLG4pe3JldHVybigwLHQuZ2V0V2l0aERlZmF1bHQpKHRoaXMsZSxuKX0saW5jcmVtZW50
UHJvcGVydHk6ZnVuY3Rpb24oZSxuKXtyZXR1cm4oMCx0LmlzTm9uZSkobikmJihuPTEpLCgwLHQu
c2V0KSh0aGlzLGUsKHBhcnNlRmxvYXQoKDAsdC5nZXQpKHRoaXMsZSkpfHwwKStuKX0sZGVjcmVt
ZW50UHJvcGVydHk6ZnVuY3Rpb24oZSxuKXtyZXR1cm4oMCx0LmlzTm9uZSkobikmJihuPTEpLCgw
LHQuc2V0KSh0aGlzLGUsKCgwLHQuZ2V0KSh0aGlzLGUpfHwwKS1uKX0sdG9nZ2xlUHJvcGVydHk6
ZnVuY3Rpb24oZSl7cmV0dXJuKDAsdC5zZXQpKHRoaXMsZSwhKDAsdC5nZXQpKHRoaXMsZSkpfSxj
YWNoZUZvcjpmdW5jdGlvbihlKXtyZXR1cm4oMCx0LmNhY2hlRm9yKSh0aGlzLGUpfSxvYnNlcnZl
cnNGb3JLZXk6ZnVuY3Rpb24oZSl7cmV0dXJuKDAsdC5vYnNlcnZlcnNGb3IpKHRoaXMsZSl9fSl9
KSxlKCJlbWJlci1ydW50aW1lL21peGlucy9wcm9taXNlX3Byb3h5IixbImV4cG9ydHMiLCJlbWJl
ci1tZXRhbCIsImVtYmVyLWRlYnVnIiwiZW1iZXItcnVudGltZS9jb21wdXRlZC9jb21wdXRlZF9t
YWNyb3MiXSxmdW5jdGlvbihlLHQsbixyKXsidXNlIHN0cmljdCIKK2Z1bmN0aW9uIGkoZSxuKXty
ZXR1cm4oMCx0LnNldFByb3BlcnRpZXMpKGUse2lzRnVsZmlsbGVkOiExLGlzUmVqZWN0ZWQ6ITF9
KSxuLnRoZW4oZnVuY3Rpb24obil7cmV0dXJuIGUuaXNEZXN0cm95ZWR8fGUuaXNEZXN0cm95aW5n
fHwoMCx0LnNldFByb3BlcnRpZXMpKGUse2NvbnRlbnQ6bixpc0Z1bGZpbGxlZDohMH0pLG59LGZ1
bmN0aW9uKG4pe3Rocm93IGUuaXNEZXN0cm95ZWR8fGUuaXNEZXN0cm95aW5nfHwoMCx0LnNldFBy
b3BlcnRpZXMpKGUse3JlYXNvbjpuLGlzUmVqZWN0ZWQ6ITB9KSxufSwiRW1iZXI6IFByb21pc2VQ
cm94eSIpfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49KDAsdC5nZXQpKHRo
aXMsInByb21pc2UiKQorcmV0dXJuIG5bZV0uYXBwbHkobixhcmd1bWVudHMpfX1lLmRlZmF1bHQ9
dC5NaXhpbi5jcmVhdGUoe3JlYXNvbjpudWxsLGlzUGVuZGluZzooMCxyLm5vdCkoImlzU2V0dGxl
ZCIpLnJlYWRPbmx5KCksaXNTZXR0bGVkOigwLHIub3IpKCJpc1JlamVjdGVkIiwiaXNGdWxmaWxs
ZWQiKS5yZWFkT25seSgpLGlzUmVqZWN0ZWQ6ITEsaXNGdWxmaWxsZWQ6ITEscHJvbWlzZTooMCx0
LmNvbXB1dGVkKSh7Z2V0OmZ1bmN0aW9uKCl7dGhyb3cgbmV3IG4uRXJyb3IoIlByb21pc2VQcm94
eSdzIHByb21pc2UgbXVzdCBiZSBzZXQiKX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkodGhp
cyx0KX19KSx0aGVuOm8oInRoZW4iKSxjYXRjaDpvKCJjYXRjaCIpLGZpbmFsbHk6bygiZmluYWxs
eSIpfSl9KSxlKCJlbWJlci1ydW50aW1lL21peGlucy9yZWdpc3RyeV9wcm94eSIsWyJleHBvcnRz
IiwiZW1iZXItbWV0YWwiLCJlbWJlci1kZWJ1ZyJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmlj
dCIKK2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQKK3JldHVybih0PXRoaXMu
X19yZWdpc3RyeV9fKVtlXS5hcHBseSh0LGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGkoZSx0LG4scil7
cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGVbcl0uYXBwbHkoZSxhcmd1bWVudHMpfX1lLmJ1aWxk
RmFrZVJlZ2lzdHJ5V2l0aERlcHJlY2F0aW9ucz1mdW5jdGlvbihlLHQpe3ZhciBuPXt9LHI9e3Jl
c29sdmU6InJlc29sdmVSZWdpc3RyYXRpb24iLHJlZ2lzdGVyOiJyZWdpc3RlciIsdW5yZWdpc3Rl
cjoidW5yZWdpc3RlciIsaGFzOiJoYXNSZWdpc3RyYXRpb24iLG9wdGlvbjoicmVnaXN0ZXJPcHRp
b24iLG9wdGlvbnM6InJlZ2lzdGVyT3B0aW9ucyIsZ2V0T3B0aW9uczoicmVnaXN0ZXJlZE9wdGlv
bnMiLG9wdGlvbnNGb3JUeXBlOiJyZWdpc3Rlck9wdGlvbnNGb3JUeXBlIixnZXRPcHRpb25zRm9y
VHlwZToicmVnaXN0ZXJlZE9wdGlvbnNGb3JUeXBlIixpbmplY3Rpb246ImluamVjdCJ9Citmb3Io
dmFyIG8gaW4gciluW29dPWkoZSx0LG8scltvXSkKK3JldHVybiBufSxlLmRlZmF1bHQ9dC5NaXhp
bi5jcmVhdGUoe19fcmVnaXN0cnlfXzpudWxsLHJlc29sdmVSZWdpc3RyYXRpb246cigicmVzb2x2
ZSIpLHJlZ2lzdGVyOnIoInJlZ2lzdGVyIiksdW5yZWdpc3RlcjpyKCJ1bnJlZ2lzdGVyIiksaGFz
UmVnaXN0cmF0aW9uOnIoImhhcyIpLHJlZ2lzdGVyT3B0aW9uOnIoIm9wdGlvbiIpLHJlZ2lzdGVy
ZWRPcHRpb246cigiZ2V0T3B0aW9uIikscmVnaXN0ZXJPcHRpb25zOnIoIm9wdGlvbnMiKSxyZWdp
c3RlcmVkT3B0aW9uczpyKCJnZXRPcHRpb25zIikscmVnaXN0ZXJPcHRpb25zRm9yVHlwZTpyKCJv
cHRpb25zRm9yVHlwZSIpLHJlZ2lzdGVyZWRPcHRpb25zRm9yVHlwZTpyKCJnZXRPcHRpb25zRm9y
VHlwZSIpLGluamVjdDpyKCJpbmplY3Rpb24iKX0pfSksZSgiZW1iZXItcnVudGltZS9taXhpbnMv
dGFyZ2V0X2FjdGlvbl9zdXBwb3J0IixbImV4cG9ydHMiLCJlbWJlci1lbnZpcm9ubWVudCIsImVt
YmVyLW1ldGFsIiwiZW1iZXItZGVidWciXSxmdW5jdGlvbihlLHQsbixyKXsidXNlIHN0cmljdCIK
K2Z1bmN0aW9uIGkoZSl7dmFyIHIsaT0oMCxuLmdldCkoZSwidGFyZ2V0T2JqZWN0IikKK3JldHVy
biBpfHwoZS5fdGFyZ2V0T2JqZWN0P2UuX3RhcmdldE9iamVjdDooaT0oMCxuLmdldCkoZSwidGFy
Z2V0IiksaT8ic3RyaW5nIj09dHlwZW9mIGk/KHI9KDAsbi5nZXQpKGUsaSksdm9pZCAwPT09ciYm
KHI9KDAsbi5nZXQpKHQuY29udGV4dC5sb29rdXAsaSkpLHIpOmk6bnVsbCkpfWUuZGVmYXVsdD1u
Lk1peGluLmNyZWF0ZSh7dGFyZ2V0Om51bGwsYWN0aW9uOm51bGwsYWN0aW9uQ29udGV4dDpudWxs
LGFjdGlvbkNvbnRleHRPYmplY3Q6KDAsbi5jb21wdXRlZCkoImFjdGlvbkNvbnRleHQiLGZ1bmN0
aW9uKCl7dmFyIGUscj0oMCxuLmdldCkodGhpcywiYWN0aW9uQ29udGV4dCIpCityZXR1cm4ic3Ry
aW5nIj09dHlwZW9mIHI/KGU9KDAsbi5nZXQpKHRoaXMsciksdm9pZCAwPT09ZSYmKGU9KDAsbi5n
ZXQpKHQuY29udGV4dC5sb29rdXAscikpLGUpOnJ9KSx0cmlnZ2VyQWN0aW9uOmZ1bmN0aW9uKCl7
ZnVuY3Rpb24gZShlLHQpe3ZhciBuPVtdCityZXR1cm4gdCYmbi5wdXNoKHQpLG4uY29uY2F0KGUp
fXZhciB0LHIsbyxzPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2Fy
Z3VtZW50c1swXTp7fSxhPXMuYWN0aW9ufHwoMCxuLmdldCkodGhpcywiYWN0aW9uIiksdT1zLnRh
cmdldAordXx8KHU9aSh0aGlzKSkKK3ZhciBsPXMuYWN0aW9uQ29udGV4dAorcmV0dXJuIHZvaWQg
MD09PWwmJihsPSgwLG4uZ2V0KSh0aGlzLCJhY3Rpb25Db250ZXh0T2JqZWN0Iil8fHRoaXMpLCEo
IXV8fCFhKSYmKHQ9dm9pZCAwLHQ9dS5zZW5kPyhyPXUpLnNlbmQuYXBwbHkocixlKGwsYSkpOihv
PXUpW2FdLmFwcGx5KG8sZShsKSksITEhPT10JiYodD0hMCksdCl9fSl9KSxlKCJlbWJlci1ydW50
aW1lL3N0cmluZ19yZWdpc3RyeSIsWyJleHBvcnRzIl0sZnVuY3Rpb24oZSl7InVzZSBzdHJpY3Qi
CitlLnNldFN0cmluZ3M9ZnVuY3Rpb24oZSl7dD1lfSxlLmdldFN0cmluZ3M9ZnVuY3Rpb24oKXty
ZXR1cm4gdH0sZS5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19Cit2YXIgdD17fX0pLGUoImVt
YmVyLXJ1bnRpbWUvc3lzdGVtL2FwcGxpY2F0aW9uIixbImV4cG9ydHMiLCJlbWJlci1ydW50aW1l
L3N5c3RlbS9uYW1lc3BhY2UiXSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IgorZS5kZWZhdWx0
PXQuZGVmYXVsdC5leHRlbmQoKX0pLGUoImVtYmVyLXJ1bnRpbWUvc3lzdGVtL2FycmF5X3Byb3h5
IixbImV4cG9ydHMiLCJlbWJlci1tZXRhbCIsImVtYmVyLXJ1bnRpbWUvdXRpbHMiLCJlbWJlci1y
dW50aW1lL3N5c3RlbS9vYmplY3QiLCJlbWJlci1ydW50aW1lL21peGlucy9tdXRhYmxlX2FycmF5
IiwiZW1iZXItcnVudGltZS9taXhpbnMvZW51bWVyYWJsZSIsImVtYmVyLXJ1bnRpbWUvbWl4aW5z
L2FycmF5IiwiZW1iZXItZGVidWciXSxmdW5jdGlvbihlLHQsbixyLGksbyxzLGEpeyJ1c2Ugc3Ry
aWN0IgorZnVuY3Rpb24gdSgpe3JldHVybiB0aGlzfXZhciBsPVtdCitlLmRlZmF1bHQ9ci5kZWZh
dWx0LmV4dGVuZChpLmRlZmF1bHQse2NvbnRlbnQ6bnVsbCxhcnJhbmdlZENvbnRlbnQ6KDAsdC5h
bGlhcykoImNvbnRlbnQiKSxvYmplY3RBdENvbnRlbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuKDAscy5v
YmplY3RBdCkoKDAsdC5nZXQpKHRoaXMsImFycmFuZ2VkQ29udGVudCIpLGUpfSxyZXBsYWNlQ29u
dGVudDpmdW5jdGlvbihlLG4scil7KDAsdC5nZXQpKHRoaXMsImNvbnRlbnQiKS5yZXBsYWNlKGUs
bixyKX0sX2NvbnRlbnRXaWxsQ2hhbmdlOigwLHQuX2JlZm9yZU9ic2VydmVyKSgiY29udGVudCIs
ZnVuY3Rpb24oKXt0aGlzLl90ZWFyZG93bkNvbnRlbnQoKX0pLF90ZWFyZG93bkNvbnRlbnQ6ZnVu
Y3Rpb24oKXt2YXIgZT0oMCx0LmdldCkodGhpcywiY29udGVudCIpCitlJiYoMCxzLnJlbW92ZUFy
cmF5T2JzZXJ2ZXIpKGUsdGhpcyx7d2lsbENoYW5nZToiY29udGVudEFycmF5V2lsbENoYW5nZSIs
ZGlkQ2hhbmdlOiJjb250ZW50QXJyYXlEaWRDaGFuZ2UifSl9LGNvbnRlbnRBcnJheVdpbGxDaGFu
Z2U6dSxjb250ZW50QXJyYXlEaWRDaGFuZ2U6dSxfY29udGVudERpZENoYW5nZTooMCx0Lm9ic2Vy
dmVyKSgiY29udGVudCIsZnVuY3Rpb24oKXsoMCx0LmdldCkodGhpcywiY29udGVudCIpCit0aGlz
Ll9zZXR1cENvbnRlbnQoKX0pLF9zZXR1cENvbnRlbnQ6ZnVuY3Rpb24oKXt2YXIgZT0oMCx0Lmdl
dCkodGhpcywiY29udGVudCIpCitlJiYoMCxzLmFkZEFycmF5T2JzZXJ2ZXIpKGUsdGhpcyx7d2ls
bENoYW5nZToiY29udGVudEFycmF5V2lsbENoYW5nZSIsZGlkQ2hhbmdlOiJjb250ZW50QXJyYXlE
aWRDaGFuZ2UifSl9LF9hcnJhbmdlZENvbnRlbnRXaWxsQ2hhbmdlOigwLHQuX2JlZm9yZU9ic2Vy
dmVyKSgiYXJyYW5nZWRDb250ZW50IixmdW5jdGlvbigpe3ZhciBlPSgwLHQuZ2V0KSh0aGlzLCJh
cnJhbmdlZENvbnRlbnQiKSxuPWU/KDAsdC5nZXQpKGUsImxlbmd0aCIpOjAKK3RoaXMuYXJyYW5n
ZWRDb250ZW50QXJyYXlXaWxsQ2hhbmdlKHRoaXMsMCxuLHZvaWQgMCksdGhpcy5hcnJhbmdlZENv
bnRlbnRXaWxsQ2hhbmdlKHRoaXMpLHRoaXMuX3RlYXJkb3duQXJyYW5nZWRDb250ZW50KGUpfSks
X2FycmFuZ2VkQ29udGVudERpZENoYW5nZTooMCx0Lm9ic2VydmVyKSgiYXJyYW5nZWRDb250ZW50
IixmdW5jdGlvbigpe3ZhciBlPSgwLHQuZ2V0KSh0aGlzLCJhcnJhbmdlZENvbnRlbnQiKSxuPWU/
KDAsdC5nZXQpKGUsImxlbmd0aCIpOjAKK3RoaXMuX3NldHVwQXJyYW5nZWRDb250ZW50KCksdGhp
cy5hcnJhbmdlZENvbnRlbnREaWRDaGFuZ2UodGhpcyksdGhpcy5hcnJhbmdlZENvbnRlbnRBcnJh
eURpZENoYW5nZSh0aGlzLDAsdm9pZCAwLG4pfSksX3NldHVwQXJyYW5nZWRDb250ZW50OmZ1bmN0
aW9uKCl7dmFyIGU9KDAsdC5nZXQpKHRoaXMsImFycmFuZ2VkQ29udGVudCIpCitlJiYoMCxzLmFk
ZEFycmF5T2JzZXJ2ZXIpKGUsdGhpcyx7d2lsbENoYW5nZToiYXJyYW5nZWRDb250ZW50QXJyYXlX
aWxsQ2hhbmdlIixkaWRDaGFuZ2U6ImFycmFuZ2VkQ29udGVudEFycmF5RGlkQ2hhbmdlIn0pfSxf
dGVhcmRvd25BcnJhbmdlZENvbnRlbnQ6ZnVuY3Rpb24oKXt2YXIgZT0oMCx0LmdldCkodGhpcywi
YXJyYW5nZWRDb250ZW50IikKK2UmJigwLHMucmVtb3ZlQXJyYXlPYnNlcnZlcikoZSx0aGlzLHt3
aWxsQ2hhbmdlOiJhcnJhbmdlZENvbnRlbnRBcnJheVdpbGxDaGFuZ2UiLGRpZENoYW5nZToiYXJy
YW5nZWRDb250ZW50QXJyYXlEaWRDaGFuZ2UifSl9LGFycmFuZ2VkQ29udGVudFdpbGxDaGFuZ2U6
dSxhcnJhbmdlZENvbnRlbnREaWRDaGFuZ2U6dSxvYmplY3RBdDpmdW5jdGlvbihlKXtyZXR1cm4o
MCx0LmdldCkodGhpcywiY29udGVudCIpJiZ0aGlzLm9iamVjdEF0Q29udGVudChlKX0sbGVuZ3Ro
OigwLHQuY29tcHV0ZWQpKGZ1bmN0aW9uKCl7dmFyIGU9KDAsdC5nZXQpKHRoaXMsImFycmFuZ2Vk
Q29udGVudCIpCityZXR1cm4gZT8oMCx0LmdldCkoZSwibGVuZ3RoIik6MH0pLF9yZXBsYWNlOmZ1
bmN0aW9uKGUsbixyKXt2YXIgaT0oMCx0LmdldCkodGhpcywiY29udGVudCIpCityZXR1cm4gaSYm
dGhpcy5yZXBsYWNlQ29udGVudChlLG4sciksdGhpc30scmVwbGFjZTpmdW5jdGlvbigpe2lmKCgw
LHQuZ2V0KSh0aGlzLCJhcnJhbmdlZENvbnRlbnQiKSE9PSgwLHQuZ2V0KSh0aGlzLCJjb250ZW50
IikpdGhyb3cgbmV3IGEuRXJyb3IoIlVzaW5nIHJlcGxhY2Ugb24gYW4gYXJyYW5nZWQgQXJyYXlQ
cm94eSBpcyBub3QgYWxsb3dlZC4iKQordGhpcy5fcmVwbGFjZS5hcHBseSh0aGlzLGFyZ3VtZW50
cyl9LF9pbnNlcnRBdDpmdW5jdGlvbihlLG4pe2lmKGU+KDAsdC5nZXQpKHRoaXMsImNvbnRlbnQu
bGVuZ3RoIikpdGhyb3cgbmV3IGEuRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpCityZXR1cm4g
dGhpcy5fcmVwbGFjZShlLDAsW25dKSx0aGlzfSxpbnNlcnRBdDpmdW5jdGlvbihlLG4pe2lmKCgw
LHQuZ2V0KSh0aGlzLCJhcnJhbmdlZENvbnRlbnQiKT09PSgwLHQuZ2V0KSh0aGlzLCJjb250ZW50
IikpcmV0dXJuIHRoaXMuX2luc2VydEF0KGUsbikKK3Rocm93IG5ldyBhLkVycm9yKCJVc2luZyBp
bnNlcnRBdCBvbiBhbiBhcnJhbmdlZCBBcnJheVByb3h5IGlzIG5vdCBhbGxvd2VkLiIpfSxyZW1v
dmVBdDpmdW5jdGlvbihlLG4pe3ZhciByLGksbyx1LGMKK2lmKCJudW1iZXIiPT10eXBlb2YgZSl7
aWYocj0oMCx0LmdldCkodGhpcywiY29udGVudCIpLGk9KDAsdC5nZXQpKHRoaXMsImFycmFuZ2Vk
Q29udGVudCIpLG89W10sZTwwfHxlPj0oMCx0LmdldCkodGhpcywibGVuZ3RoIikpdGhyb3cgbmV3
IGEuRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpCitmb3Iodm9pZCAwPT09biYmKG49MSksdT1l
O3U8ZStuO3UrKylvLnB1c2goci5pbmRleE9mKCgwLHMub2JqZWN0QXQpKGksdSkpKQorZm9yKG8u
c29ydChmdW5jdGlvbihlLHQpe3JldHVybiB0LWV9KSwoMCx0LmJlZ2luUHJvcGVydHlDaGFuZ2Vz
KSgpLGM9MDtjPG8ubGVuZ3RoO2MrKyl0aGlzLl9yZXBsYWNlKG9bY10sMSxsKTsoMCx0LmVuZFBy
b3BlcnR5Q2hhbmdlcykoKX1yZXR1cm4gdGhpc30scHVzaE9iamVjdDpmdW5jdGlvbihlKXtyZXR1
cm4gdGhpcy5faW5zZXJ0QXQoKDAsdC5nZXQpKHRoaXMsImNvbnRlbnQubGVuZ3RoIiksZSksZX0s
cHVzaE9iamVjdHM6ZnVuY3Rpb24oZSl7aWYoIW8uZGVmYXVsdC5kZXRlY3QoZSkmJiEoMCxuLmlz
QXJyYXkpKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIk11c3QgcGFzcyBFbWJlci5FbnVtZXJhYmxl
IHRvIEVtYmVyLk11dGFibGVBcnJheSNwdXNoT2JqZWN0cyIpCityZXR1cm4gdGhpcy5fcmVwbGFj
ZSgoMCx0LmdldCkodGhpcywibGVuZ3RoIiksMCxlKSx0aGlzfSxzZXRPYmplY3RzOmZ1bmN0aW9u
KGUpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gdGhpcy5jbGVhcigpCit2YXIgbj0oMCx0LmdldCko
dGhpcywibGVuZ3RoIikKK3JldHVybiB0aGlzLl9yZXBsYWNlKDAsbixlKSx0aGlzfSx1bnNoaWZ0
T2JqZWN0OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pbnNlcnRBdCgwLGUpLGV9LHVuc2hpZnRP
YmplY3RzOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9yZXBsYWNlKDAsMCxlKSx0aGlzfSxzbGlj
ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMudG9BcnJheSgpCityZXR1cm4gZS5zbGljZS5hcHBseShl
LGFyZ3VtZW50cyl9LGFycmFuZ2VkQ29udGVudEFycmF5V2lsbENoYW5nZTpmdW5jdGlvbihlLHQs
bixyKXt0aGlzLmFycmF5Q29udGVudFdpbGxDaGFuZ2UodCxuLHIpfSxhcnJhbmdlZENvbnRlbnRB
cnJheURpZENoYW5nZTpmdW5jdGlvbihlLHQsbixyKXt0aGlzLmFycmF5Q29udGVudERpZENoYW5n
ZSh0LG4scil9LGluaXQ6ZnVuY3Rpb24oKXt0aGlzLl9zdXBlci5hcHBseSh0aGlzLGFyZ3VtZW50
cyksdGhpcy5fc2V0dXBDb250ZW50KCksdGhpcy5fc2V0dXBBcnJhbmdlZENvbnRlbnQoKX0sd2ls
bERlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl90ZWFyZG93bkFycmFuZ2VkQ29udGVudCgpLHRoaXMu
X3RlYXJkb3duQ29udGVudCgpfX0pfSksZSgiZW1iZXItcnVudGltZS9zeXN0ZW0vY29yZV9vYmpl
Y3QiLFsiZXhwb3J0cyIsImVtYmVyLWJhYmVsIiwiZW1iZXItdXRpbHMiLCJlbWJlci1tZXRhbCIs
ImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2FjdGlvbl9oYW5kbGVyIiwiZW1iZXItcnVudGltZS9pbmpl
Y3QiLCJlbWJlci1kZWJ1ZyJdLGZ1bmN0aW9uKGUsdCxuLHIsaSxvLHMpeyJ1c2Ugc3RyaWN0Igor
ZnVuY3Rpb24gYSgpe3ZhciBlPSExLHQ9dm9pZCAwLGk9dm9pZCAwLG89ZnVuY3Rpb24oKXtmdW5j
dGlvbiBvKCl7ZXx8by5wcm90bygpLGFyZ3VtZW50cy5sZW5ndGg+MCYmKHQ9W2FyZ3VtZW50c1sw
XV0pLHRoaXMuX19kZWZpbmVOb25FbnVtZXJhYmxlKG4uR1VJRF9LRVlfUFJPUEVSVFkpCit2YXIg
YSx1LGwsYyxwLGgsbSxnLHksdixiLF8sdyxFPSgwLHIubWV0YSkodGhpcykseD1FLnByb3RvCitp
ZihFLnByb3RvPXRoaXMsaSYmKEUuZmFjdG9yeT1pLGk9bnVsbCksdClmb3IoYT10LHQ9bnVsbCx1
PXRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllcyxsPXRoaXMubWVyZ2VkUHJvcGVydGllcyxjPTA7
YzxhLmxlbmd0aDtjKyspe2lmKCJvYmplY3QiIT10eXBlb2YocD1hW2NdKSYmdm9pZCAwIT09cCl0
aHJvdyBuZXcgcy5FcnJvcigiRW1iZXIuT2JqZWN0LmNyZWF0ZSBvbmx5IGFjY2VwdHMgb2JqZWN0
cy4iKQoraWYocClmb3IoaD1PYmplY3Qua2V5cyhwKSxtPTA7bTxoLmxlbmd0aDttKyspZz1oW21d
LHk9cFtnXSwoMCxyLmRldGVjdEJpbmRpbmcpKGcpJiZFLndyaXRlQmluZGluZ3MoZyx5KSx2PXRo
aXNbZ10sYj1udWxsIT09diYmIm9iamVjdCI9PXR5cGVvZiB2JiZ2LmlzRGVzY3JpcHRvcj92OnZv
aWQgMCx1JiZ1Lmxlbmd0aD4wJiZ1LmluZGV4T2YoZyk+PTAmJihfPXRoaXNbZ10seT1fPyJmdW5j
dGlvbiI9PXR5cGVvZiBfLmNvbmNhdD9fLmNvbmNhdCh5KTooMCxuLm1ha2VBcnJheSkoXykuY29u
Y2F0KHkpOigwLG4ubWFrZUFycmF5KSh5KSksbCYmbC5sZW5ndGgmJmwuaW5kZXhPZihnKT49MCYm
KHc9dGhpc1tnXSx5PSgwLG4uYXNzaWduKSh7fSx3LHkpKSxiP2Iuc2V0KHRoaXMsZyx5KToiZnVu
Y3Rpb24iIT10eXBlb2YgdGhpcy5zZXRVbmtub3duUHJvcGVydHl8fGcgaW4gdGhpcz90aGlzW2dd
PXk6dGhpcy5zZXRVbmtub3duUHJvcGVydHkoZyx5KX1mKHRoaXMsRSksdGhpcy5pbml0LmFwcGx5
KHRoaXMsYXJndW1lbnRzKSx0aGlzW2RdKCksRS5wcm90bz14LCgwLHIuZmluaXNoQ2hhaW5zKShF
KSwoMCxyLnNlbmRFdmVudCkodGhpcywiaW5pdCIsdm9pZCAwLHZvaWQgMCx2b2lkIDAsRSl9cmV0
dXJuIG8ud2lsbFJlb3Blbj1mdW5jdGlvbigpe2UmJihvLlByb3RvdHlwZU1peGluPXIuTWl4aW4u
Y3JlYXRlKG8uUHJvdG90eXBlTWl4aW4pKSxlPSExfSxvLl9pbml0UHJvcGVydGllcz1mdW5jdGlv
bihlKXt0PWV9LG8uX2luaXRGYWN0b3J5PWZ1bmN0aW9uKGUpe2k9ZX0sby5wcm90bz1mdW5jdGlv
bigpe3ZhciB0PW8uc3VwZXJjbGFzcworcmV0dXJuIHQmJnQucHJvdG8oKSxlfHwoZT0hMCxvLlBy
b3RvdHlwZU1peGluLmFwcGx5UGFydGlhbChvLnByb3RvdHlwZSkpLHRoaXMucHJvdG90eXBlfSxv
fSgpCityZXR1cm4gby50b1N0cmluZz1yLk1peGluLnByb3RvdHlwZS50b1N0cmluZyxvfWUuUE9T
VF9JTklUPXZvaWQgMAordmFyIHUsbCxjPSgoMCx0LnRhZ2dlZFRlbXBsYXRlTGl0ZXJhbExvb3Nl
KShbIi4iXSxbIi4iXSksci5ydW4uc2NoZWR1bGUpLHA9ci5NaXhpbi5fYXBwbHksZj1yLk1peGlu
LmZpbmlzaFBhcnRpYWwsaD1yLk1peGluLnByb3RvdHlwZS5yZW9wZW4sZD1lLlBPU1RfSU5JVD0o
MCxuLnN5bWJvbCkoIlBPU1RfSU5JVCIpLG09YSgpCittLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0
dXJuIkVtYmVyLkNvcmVPYmplY3QifSxtLlByb3RvdHlwZU1peGluPXIuTWl4aW4uY3JlYXRlKCh1
PXtyZW9wZW46ZnVuY3Rpb24oKXt2YXIgZSx0LG4KK2ZvcihlPWFyZ3VtZW50cy5sZW5ndGgsdD1B
cnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXQorcmV0dXJuIHAodGhpcyx0LCEw
KSx0aGlzfSxpbml0OmZ1bmN0aW9uKCl7fX0sdVtkXT1mdW5jdGlvbigpe30sdS5fX2RlZmluZU5v
bkVudW1lcmFibGU9ZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsZS5uYW1l
LGUuZGVzY3JpcHRvcil9LHUuY29uY2F0ZW5hdGVkUHJvcGVydGllcz1udWxsLHUubWVyZ2VkUHJv
cGVydGllcz1udWxsLHUuaXNEZXN0cm95ZWQ9KDAsci5kZXNjcmlwdG9yKSh7Z2V0OmZ1bmN0aW9u
KCl7cmV0dXJuKDAsci5tZXRhKSh0aGlzKS5pc1NvdXJjZURlc3Ryb3llZCgpfSxzZXQ6ZnVuY3Rp
b24oZSl7Im9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmZS5pc0Rlc2NyaXB0b3J9fSksdS5p
c0Rlc3Ryb3lpbmc9KDAsci5kZXNjcmlwdG9yKSh7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsci5t
ZXRhKSh0aGlzKS5pc1NvdXJjZURlc3Ryb3lpbmcoKX0sc2V0OmZ1bmN0aW9uKGUpeyJvYmplY3Qi
PT10eXBlb2YgZSYmbnVsbCE9PWUmJmUuaXNEZXNjcmlwdG9yfX0pLHUuZGVzdHJveT1mdW5jdGlv
bigpe3ZhciBlPSgwLHIubWV0YSkodGhpcykKK2lmKCFlLmlzU291cmNlRGVzdHJveWluZygpKXJl
dHVybiBlLnNldFNvdXJjZURlc3Ryb3lpbmcoKSxjKCJhY3Rpb25zIix0aGlzLHRoaXMud2lsbERl
c3Ryb3kpLGMoImRlc3Ryb3kiLHRoaXMsdGhpcy5fc2NoZWR1bGVkRGVzdHJveSxlKSx0aGlzfSx1
LndpbGxEZXN0cm95PWZ1bmN0aW9uKCl7fSx1Ll9zY2hlZHVsZWREZXN0cm95PWZ1bmN0aW9uKGUp
e2UuaXNTb3VyY2VEZXN0cm95ZWQoKXx8KCgwLHIuZGVzdHJveSkodGhpcyksZS5zZXRTb3VyY2VE
ZXN0cm95ZWQoKSl9LHUuYmluZD1mdW5jdGlvbihlLHQpe3JldHVybiB0IGluc3RhbmNlb2Ygci5C
aW5kaW5nfHwodD1yLkJpbmRpbmcuZnJvbSh0KSksdC50byhlKS5jb25uZWN0KHRoaXMpLHR9LHUu
dG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdGhpcy50b1N0cmlu
Z0V4dGVuc2lvbix0PWU/IjoiK3RoaXMudG9TdHJpbmdFeHRlbnNpb24oKToiIgorcmV0dXJuIjwi
Kyh0aGlzW24uTkFNRV9LRVldfHwoMCxyLm1ldGEpKHRoaXMpLmZhY3Rvcnl8fHRoaXMuY29uc3Ry
dWN0b3IudG9TdHJpbmcoKSkrIjoiKygwLG4uZ3VpZEZvcikodGhpcykrdCsiPiJ9LHUpKSxtLlBy
b3RvdHlwZU1peGluLm93bmVyQ29uc3RydWN0b3I9bSxtLl9fc3VwZXJfXz1udWxsCit2YXIgZz0o
bD17Q2xhc3NNaXhpbjpyLlJFUVVJUkVELFByb3RvdHlwZU1peGluOnIuUkVRVUlSRUQsaXNDbGFz
czohMCxpc01ldGhvZDohMX0sbFtuLk5BTUVfS0VZXT1udWxsLGxbbi5HVUlEX0tFWV09bnVsbCxs
LmV4dGVuZD1mdW5jdGlvbigpe3ZhciBlPWEoKSx0PXZvaWQgMAorcmV0dXJuIGUuQ2xhc3NNaXhp
bj1yLk1peGluLmNyZWF0ZSh0aGlzLkNsYXNzTWl4aW4pLGUuUHJvdG90eXBlTWl4aW49ci5NaXhp
bi5jcmVhdGUodGhpcy5Qcm90b3R5cGVNaXhpbiksZS5DbGFzc01peGluLm93bmVyQ29uc3RydWN0
b3I9ZSxlLlByb3RvdHlwZU1peGluLm93bmVyQ29uc3RydWN0b3I9ZSxoLmFwcGx5KGUuUHJvdG90
eXBlTWl4aW4sYXJndW1lbnRzKSxlLnN1cGVyY2xhc3M9dGhpcyxlLl9fc3VwZXJfXz10aGlzLnBy
b3RvdHlwZSx0PWUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodGhpcy5wcm90b3R5cGUpLHQuY29u
c3RydWN0b3I9ZSwoMCxuLmdlbmVyYXRlR3VpZCkodCksKDAsci5tZXRhKSh0KS5wcm90bz10LGUu
Q2xhc3NNaXhpbi5hcHBseShlKSxlfSxsLmNyZWF0ZT1mdW5jdGlvbigpe3ZhciBlLHQsbixyPXRo
aXMKK2ZvcihlPWFyZ3VtZW50cy5sZW5ndGgsdD1BcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFy
Z3VtZW50c1tuXQorcmV0dXJuIHQubGVuZ3RoPjAmJnRoaXMuX2luaXRQcm9wZXJ0aWVzKHQpLG5l
dyByfSxsLnJlb3Blbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLndpbGxSZW9wZW4oKSxoLmFwcGx5
KHRoaXMuUHJvdG90eXBlTWl4aW4sYXJndW1lbnRzKSx0aGlzfSxsLnJlb3BlbkNsYXNzPWZ1bmN0
aW9uKCl7cmV0dXJuIGguYXBwbHkodGhpcy5DbGFzc01peGluLGFyZ3VtZW50cykscCh0aGlzLGFy
Z3VtZW50cywhMSksdGhpc30sbC5kZXRlY3Q9ZnVuY3Rpb24oZSl7aWYoImZ1bmN0aW9uIiE9dHlw
ZW9mIGUpcmV0dXJuITEKK2Zvcig7ZTspe2lmKGU9PT10aGlzKXJldHVybiEwCitlPWUuc3VwZXJj
bGFzc31yZXR1cm4hMX0sbC5kZXRlY3RJbnN0YW5jZT1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0
YW5jZW9mIHRoaXN9LGwubWV0YUZvclByb3BlcnR5PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJv
dG8oKSxuPXRbZV0scj1udWxsIT09biYmIm9iamVjdCI9PXR5cGVvZiBuJiZuLmlzRGVzY3JpcHRv
cj9uOnZvaWQgMAorcmV0dXJuIHIuX21ldGF8fHt9fSxsLl9jb21wdXRlZFByb3BlcnRpZXM9KDAs
ci5jb21wdXRlZCkoZnVuY3Rpb24oKXsoMCxyLl9oYXNDYWNoZWRDb21wdXRlZFByb3BlcnRpZXMp
KCkKK3ZhciBlPXRoaXMucHJvdG8oKSx0PXZvaWQgMCxuPVtdCitmb3IodmFyIGkgaW4gZSkodD1l
W2ldKSYmdC5pc0Rlc2NyaXB0b3ImJm4ucHVzaCh7bmFtZTppLG1ldGE6dC5fbWV0YX0pCityZXR1
cm4gbn0pLnJlYWRPbmx5KCksbC5lYWNoQ29tcHV0ZWRQcm9wZXJ0eT1mdW5jdGlvbihlLHQpe3Zh
ciBuLGk9dm9pZCAwLG89e30scz0oMCxyLmdldCkodGhpcywiX2NvbXB1dGVkUHJvcGVydGllcyIp
Citmb3Iobj0wO248cy5sZW5ndGg7bisrKWk9c1tuXSxlLmNhbGwodHx8dGhpcyxpLm5hbWUsaS5t
ZXRhfHxvKX0sbCkKK2cuX2xhenlJbmplY3Rpb25zPWZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlz
LnByb3RvKCksbj12b2lkIDAsaT12b2lkIDAKK2ZvcihuIGluIHQpKGk9dFtuXSlpbnN0YW5jZW9m
IHIuSW5qZWN0ZWRQcm9wZXJ0eSYmKGVbbl09aS50eXBlKyI6IisoaS5uYW1lfHxuKSkKK3JldHVy
biBlfQordmFyIHk9ci5NaXhpbi5jcmVhdGUoZykKK3kub3duZXJDb25zdHJ1Y3Rvcj1tLG0uQ2xh
c3NNaXhpbj15LHkuYXBwbHkobSksZS5kZWZhdWx0PW19KSxlKCJlbWJlci1ydW50aW1lL3N5c3Rl
bS9sYXp5X2xvYWQiLFsiZXhwb3J0cyIsImVtYmVyLWVudmlyb25tZW50Il0sZnVuY3Rpb24oZSx0
KXsidXNlIHN0cmljdCIKK2UuX2xvYWRlZD12b2lkIDAsZS5vbkxvYWQ9ZnVuY3Rpb24oZSx0KXt2
YXIgaT1yW2VdCituW2VdPW5bZV18fFtdLG5bZV0ucHVzaCh0KSxpJiZ0KGkpfSxlLnJ1bkxvYWRI
b29rcz1mdW5jdGlvbihlLGkpe3JbZV09aQordmFyIG8scz10LmVudmlyb25tZW50LndpbmRvdwor
cyYmImZ1bmN0aW9uIj09dHlwZW9mIEN1c3RvbUV2ZW50JiYobz1uZXcgQ3VzdG9tRXZlbnQoZSx7
ZGV0YWlsOmksbmFtZTplfSkscy5kaXNwYXRjaEV2ZW50KG8pKSxuW2VdJiZuW2VdLmZvckVhY2go
ZnVuY3Rpb24oZSl7cmV0dXJuIGUoaSl9KX0KK3ZhciBuPXQuRU5WLkVNQkVSX0xPQURfSE9PS1N8
fHt9LHI9e30KK2UuX2xvYWRlZD1yfSksZSgiZW1iZXItcnVudGltZS9zeXN0ZW0vbmFtZXNwYWNl
IixbImV4cG9ydHMiLCJlbWJlci11dGlscyIsImVtYmVyLW1ldGFsIiwiZW1iZXItZW52aXJvbm1l
bnQiLCJlbWJlci1ydW50aW1lL3N5c3RlbS9vYmplY3QiXSxmdW5jdGlvbihlLHQsbixyLGkpeyJ1
c2Ugc3RyaWN0IgorZnVuY3Rpb24gbyhlLG4scil7dmFyIGkscz1lLmxlbmd0aAorbVtlLmpvaW4o
Ii4iKV09bgorZm9yKHZhciBhIGluIG4paWYoZy5jYWxsKG4sYSkpaWYoaT1uW2FdLGVbc109YSxp
JiZpLnRvU3RyaW5nPT09cCYmIWlbdC5OQU1FX0tFWV0paVt0Lk5BTUVfS0VZXT1lLmpvaW4oIi4i
KQorZWxzZSBpZihpJiZpLmlzTmFtZXNwYWNlKXtpZihyWygwLHQuZ3VpZEZvcikoaSldKWNvbnRp
bnVlCityWygwLHQuZ3VpZEZvcikoaSldPSEwLG8oZSxpLHIpfWUubGVuZ3RoPXN9ZnVuY3Rpb24g
cyhlKXtyZXR1cm4gZT49NjUmJmU8PTkwfWZ1bmN0aW9uIGEoZSx0KXt2YXIgbgordHJ5e3JldHVy
bihuPWVbdF0pJiZuLmlzTmFtZXNwYWNlJiZufWNhdGNoKGUpe319ZnVuY3Rpb24gdSgpe2lmKCFk
LlBST0NFU1NFRCl7dmFyIGUsbixpLG89ci5jb250ZXh0Lmxvb2t1cCx1PU9iamVjdC5rZXlzKG8p
Citmb3IoZT0wO2U8dS5sZW5ndGg7ZSsrKW49dVtlXSxzKG4uY2hhckNvZGVBdCgwKSkmJihpPWEo
byxuKSkmJihpW3QuTkFNRV9LRVldPW4pfX1mdW5jdGlvbiBsKGUpe3ZhciBuPWUuc3VwZXJjbGFz
cworaWYobilyZXR1cm4gblt0Lk5BTUVfS0VZXT9uW3QuTkFNRV9LRVldOmwobil9ZnVuY3Rpb24g
YyhlKXt2YXIgbj12b2lkIDAKK2lmKCFoKXtpZihmKCksbj1lW3QuTkFNRV9LRVldKXJldHVybiBu
CituPWwoZSksbj1uPyIoc3ViY2xhc3Mgb2YgIituKyIpIjpufXJldHVybiBufHwiKHVua25vd24g
bWl4aW4pIn1mdW5jdGlvbiBwKCl7dmFyIGU9dGhpc1t0Lk5BTUVfS0VZXQorcmV0dXJuIGV8fCh0
aGlzW3QuTkFNRV9LRVldPWModGhpcykpfWZ1bmN0aW9uIGYoKXt2YXIgZSx0LHIsaT0hZC5QUk9D
RVNTRUQscz0oMCxuLmhhc1VucHJvY2Vzc2VkTWl4aW5zKSgpCitpZihpJiYodSgpLGQuUFJPQ0VT
U0VEPSEwKSxpfHxzKXtmb3IoZT1kLk5BTUVTUEFDRVMsdD12b2lkIDAscj0wO3I8ZS5sZW5ndGg7
cisrKXQ9ZVtyXSxvKFt0LnRvU3RyaW5nKCldLHQse30pOygwLG4uY2xlYXJVbnByb2Nlc3NlZE1p
eGlucykoKX19ZS5pc1NlYXJjaERpc2FibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIGh9LGUuc2V0U2Vh
cmNoRGlzYWJsZWQ9ZnVuY3Rpb24oZSl7aD0hIWV9Cit2YXIgaD0hMSxkPWkuZGVmYXVsdC5leHRl
bmQoe2lzTmFtZXNwYWNlOiEwLGluaXQ6ZnVuY3Rpb24oKXtkLk5BTUVTUEFDRVMucHVzaCh0aGlz
KSxkLlBST0NFU1NFRD0hMX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXt2YXIgZT0oMCxuLmdldCkodGhp
cywibmFtZSIpfHwoMCxuLmdldCkodGhpcywibW9kdWxlUHJlZml4IikKK3JldHVybiBlfHwodSgp
LHRoaXNbdC5OQU1FX0tFWV0pfSxuYW1lQ2xhc3NlczpmdW5jdGlvbigpe28oW3RoaXMudG9TdHJp
bmcoKV0sdGhpcyx7fSl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgZT1kLk5BTUVTUEFDRVMsdD10
aGlzLnRvU3RyaW5nKCkKK3QmJihyLmNvbnRleHQubG9va3VwW3RdPXZvaWQgMCxkZWxldGUgZC5O
QU1FU1BBQ0VTX0JZX0lEW3RdKSxlLnNwbGljZShlLmluZGV4T2YodGhpcyksMSksdGhpcy5fc3Vw
ZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pCitkLnJlb3BlbkNsYXNzKHtOQU1FU1BBQ0VTOltu
LmRlZmF1bHRdLE5BTUVTUEFDRVNfQllfSUQ6e0VtYmVyOm4uZGVmYXVsdH0sUFJPQ0VTU0VEOiEx
LHByb2Nlc3NBbGw6ZixieU5hbWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGh8fGYoKSxtW2VdfX0pCit2
YXIgbT1kLk5BTUVTUEFDRVNfQllfSUQsZz17fS5oYXNPd25Qcm9wZXJ0eQorbi5NaXhpbi5wcm90
b3R5cGUudG9TdHJpbmc9cCxlLmRlZmF1bHQ9ZH0pLGUoImVtYmVyLXJ1bnRpbWUvc3lzdGVtL25h
dGl2ZV9hcnJheSIsWyJleHBvcnRzIiwiZW1iZXItbWV0YWwiLCJlbWJlci1lbnZpcm9ubWVudCIs
ImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2FycmF5IiwiZW1iZXItcnVudGltZS9taXhpbnMvbXV0YWJs
ZV9hcnJheSIsImVtYmVyLXJ1bnRpbWUvbWl4aW5zL29ic2VydmFibGUiLCJlbWJlci1ydW50aW1l
L21peGlucy9jb3B5YWJsZSIsImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2ZyZWV6YWJsZSIsImVtYmVy
LXJ1bnRpbWUvY29weSJdLGZ1bmN0aW9uKGUsdCxuLHIsaSxvLHMsYSx1KXsidXNlIHN0cmljdCIK
K2UuTmF0aXZlQXJyYXk9ZS5BPXZvaWQgMAordmFyIGwsYz10Lk1peGluLmNyZWF0ZShpLmRlZmF1
bHQsby5kZWZhdWx0LHMuZGVmYXVsdCx7Z2V0OmZ1bmN0aW9uKGUpe3JldHVybiJudW1iZXIiPT10
eXBlb2YgZT90aGlzW2VdOnRoaXMuX3N1cGVyKGUpfSxvYmplY3RBdDpmdW5jdGlvbihlKXtyZXR1
cm4gdGhpc1tlXX0scmVwbGFjZTpmdW5jdGlvbihlLG4saSl7aWYodGhpcy5pc0Zyb3plbil0aHJv
dyBhLkZST1pFTl9FUlJPUgordmFyIG89aT8oMCx0LmdldCkoaSwibGVuZ3RoIik6MAorcmV0dXJu
KDAsci5hcnJheUNvbnRlbnRXaWxsQ2hhbmdlKSh0aGlzLGUsbixvKSwwPT09bz90aGlzLnNwbGlj
ZShlLG4pOigwLHQucmVwbGFjZSkodGhpcyxlLG4saSksKDAsci5hcnJheUNvbnRlbnREaWRDaGFu
Z2UpKHRoaXMsZSxuLG8pLHRoaXN9LHVua25vd25Qcm9wZXJ0eTpmdW5jdGlvbihlLHQpe3ZhciBu
PXZvaWQgMAorcmV0dXJuIHZvaWQgMCE9PXQmJnZvaWQgMD09PW4mJihuPXRoaXNbZV09dCksbn0s
aW5kZXhPZjpBcnJheS5wcm90b3R5cGUuaW5kZXhPZixsYXN0SW5kZXhPZjpBcnJheS5wcm90b3R5
cGUubGFzdEluZGV4T2YsY29weTpmdW5jdGlvbihlKXtyZXR1cm4gZT90aGlzLm1hcChmdW5jdGlv
bihlKXtyZXR1cm4oMCx1LmRlZmF1bHQpKGUsITApfSk6dGhpcy5zbGljZSgpfX0pLHA9WyJsZW5n
dGgiXQorYy5rZXlzKCkuZm9yRWFjaChmdW5jdGlvbihlKXtBcnJheS5wcm90b3R5cGVbZV0mJnAu
cHVzaChlKX0pLGUuTmF0aXZlQXJyYXk9Yz0obD1jKS53aXRob3V0LmFwcGx5KGwscCkKK3ZhciBm
PXZvaWQgMAorbi5FTlYuRVhURU5EX1BST1RPVFlQRVMuQXJyYXk/KGMuYXBwbHkoQXJyYXkucHJv
dG90eXBlKSxlLkE9Zj1mdW5jdGlvbihlKXtyZXR1cm4gZXx8W119KTplLkE9Zj1mdW5jdGlvbihl
KXtyZXR1cm4gZXx8KGU9W10pLHIuZGVmYXVsdC5kZXRlY3QoZSk/ZTpjLmFwcGx5KGUpfSx0LmRl
ZmF1bHQuQT1mLGUuQT1mLGUuTmF0aXZlQXJyYXk9YyxlLmRlZmF1bHQ9Y30pLGUoImVtYmVyLXJ1
bnRpbWUvc3lzdGVtL29iamVjdCIsWyJleHBvcnRzIiwiZW1iZXItdXRpbHMiLCJlbWJlci1tZXRh
bCIsImVtYmVyLXJ1bnRpbWUvc3lzdGVtL2NvcmVfb2JqZWN0IiwiZW1iZXItcnVudGltZS9taXhp
bnMvb2JzZXJ2YWJsZSIsImVtYmVyLWRlYnVnIl0sZnVuY3Rpb24oZSx0LG4scixpKXsidXNlIHN0
cmljdCIKK2UuRnJhbWV3b3JrT2JqZWN0PXZvaWQgMAordmFyIG8scz0oMCx0LnN5bWJvbCkoIk9W
RVJSSURFX0NPTlRBSU5FUl9LRVkiKSxhPSgwLHQuc3ltYm9sKSgiT1ZFUlJJREVfT1dORVIiKSx1
PXIuZGVmYXVsdC5leHRlbmQoaS5kZWZhdWx0LChvPXtfZGVidWdDb250YWluZXJLZXk6KDAsbi5k
ZXNjcmlwdG9yKSh7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtpZih0aGlzW3NdKXJldHVy
biB0aGlzW3NdCit2YXIgZT0oMCxuLm1ldGEpKHRoaXMpLHQ9ZS5mYWN0b3J5CityZXR1cm4gdCYm
dC5mdWxsTmFtZX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXNbc109ZX19KX0sb1t0Lk9XTkVSXT0oMCxu
LmRlc2NyaXB0b3IpKHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe2lmKHRoaXNbYV0pcmV0
dXJuIHRoaXNbYV0KK3ZhciBlPSgwLG4ubWV0YSkodGhpcyksdD1lLmZhY3RvcnkKK3JldHVybiB0
JiZ0Lm93bmVyfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpc1thXT1lfX0pLG8pKQordS50b1N0cmluZz1m
dW5jdGlvbigpe3JldHVybiJFbWJlci5PYmplY3QifSxlLkZyYW1ld29ya09iamVjdD11LGUuZGVm
YXVsdD11fSksZSgiZW1iZXItcnVudGltZS9zeXN0ZW0vb2JqZWN0X3Byb3h5IixbImV4cG9ydHMi
LCJlbWJlci1ydW50aW1lL3N5c3RlbS9vYmplY3QiLCJlbWJlci1ydW50aW1lL21peGlucy8tcHJv
eHkiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiCitlLmRlZmF1bHQ9dC5kZWZhdWx0LmV4
dGVuZChuLmRlZmF1bHQpfSksZSgiZW1iZXItcnVudGltZS9zeXN0ZW0vc2VydmljZSIsWyJleHBv
cnRzIiwiZW1iZXItcnVudGltZS9zeXN0ZW0vb2JqZWN0IiwiZW1iZXItcnVudGltZS9pbmplY3Qi
XSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOygwLG4uY3JlYXRlSW5qZWN0aW9uSGVscGVy
KSgic2VydmljZSIpCit2YXIgcj10LmRlZmF1bHQuZXh0ZW5kKCkKK3IucmVvcGVuQ2xhc3Moe2lz
U2VydmljZUZhY3Rvcnk6ITB9KSxlLmRlZmF1bHQ9cn0pLGUoImVtYmVyLXJ1bnRpbWUvc3lzdGVt
L3N0cmluZyIsWyJleHBvcnRzIiwiZW1iZXItbWV0YWwiLCJlbWJlci1kZWJ1ZyIsImVtYmVyLXV0
aWxzIiwiZW1iZXItcnVudGltZS91dGlscyIsImVtYmVyLXJ1bnRpbWUvc3RyaW5nX3JlZ2lzdHJ5
Il0sZnVuY3Rpb24oZSx0LG4scixpLG8peyJ1c2Ugc3RyaWN0IgorZnVuY3Rpb24gcyhlLHQpe3Zh
ciBuLG89dAoraWYoISgwLGkuaXNBcnJheSkobyl8fGFyZ3VtZW50cy5sZW5ndGg+Milmb3Iobz1u
ZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKylv
W24tMV09YXJndW1lbnRzW25dCit2YXIgcz0wCityZXR1cm4gZS5yZXBsYWNlKC8lQChbMC05XSsp
Py9nLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9dD9wYXJzZUludCh0LDEwKS0xOnMrKyxlPW9bdF0s
bnVsbD09PWU/IihudWxsKSI6dm9pZCAwPT09ZT8iIjooMCxyLmluc3BlY3QpKGUpfSl9ZnVuY3Rp
b24gYSgpe3JldHVybiBzLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpfWZ1bmN0aW9uIHUoZSx0KXty
ZXR1cm4oISgwLGkuaXNBcnJheSkodCl8fGFyZ3VtZW50cy5sZW5ndGg+MikmJih0PUFycmF5LnBy
b3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSksZT0oMCxvLmdldCkoZSl8fGUscyhlLHQp
fWZ1bmN0aW9uIGwoZSl7cmV0dXJuIGUuc3BsaXQoL1xzKy8pfWZ1bmN0aW9uIGMoZSl7cmV0dXJu
IE4uZ2V0KGUpfWZ1bmN0aW9uIHAoZSl7cmV0dXJuIHkuZ2V0KGUpfWZ1bmN0aW9uIGYoZSl7cmV0
dXJuIF8uZ2V0KGUpfWZ1bmN0aW9uIGgoZSl7cmV0dXJuIEMuZ2V0KGUpfWZ1bmN0aW9uIGQoZSl7
cmV0dXJuIFQuZ2V0KGUpfWZ1bmN0aW9uIG0oZSl7cmV0dXJuIFIuZ2V0KGUpfWUuY2FwaXRhbGl6
ZT1lLnVuZGVyc2NvcmU9ZS5jbGFzc2lmeT1lLmNhbWVsaXplPWUuZGFzaGVyaXplPWUuZGVjYW1l
bGl6ZT1lLnc9ZS5sb2M9ZS5mbXQ9dm9pZCAwCit2YXIgZz0vWyBfXS9nLHk9bmV3IHQuQ2FjaGUo
MWUzLGZ1bmN0aW9uKGUpe3JldHVybiBjKGUpLnJlcGxhY2UoZywiLSIpfSksdj0vKFwtfFxffFwu
fFxzKSsoLik/L2csYj0vKF58XC8pKFtBLVpdKS9nLF89bmV3IHQuQ2FjaGUoMWUzLGZ1bmN0aW9u
KGUpe3JldHVybiBlLnJlcGxhY2UodixmdW5jdGlvbihlLHQsbil7cmV0dXJuIG4/bi50b1VwcGVy
Q2FzZSgpOiIifSkucmVwbGFjZShiLGZ1bmN0aW9uKGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKCl9
KX0pLHc9L14oXC18XykrKC4pPy8sRT0vKC4pKFwtfFxffFwufFxzKSsoLik/L2cseD0vKF58XC98
XC4pKFthLXpdKS9nLEM9bmV3IHQuQ2FjaGUoMWUzLGZ1bmN0aW9uKGUpe3ZhciB0LG49ZnVuY3Rp
b24oZSx0LG4pe3JldHVybiBuPyJfIituLnRvVXBwZXJDYXNlKCk6IiJ9LHI9ZnVuY3Rpb24oZSx0
LG4scil7cmV0dXJuIHQrKHI/ci50b1VwcGVyQ2FzZSgpOiIiKX0saT1lLnNwbGl0KCIvIikKK2Zv
cih0PTA7dDxpLmxlbmd0aDt0KyspaVt0XT1pW3RdLnJlcGxhY2UodyxuKS5yZXBsYWNlKEUscikK
K3JldHVybiBpLmpvaW4oIi8iKS5yZXBsYWNlKHgsZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9VcHBl
ckNhc2UoKX0pfSksTz0vKFthLXpcZF0pKFtBLVpdKykvZyxBPS9cLXxccysvZyxUPW5ldyB0LkNh
Y2hlKDFlMyxmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKE8sIiQxXyQyIikucmVwbGFjZShB
LCJfIikudG9Mb3dlckNhc2UoKX0pLFM9LyhefFwvKShbYS16XSkvZyxSPW5ldyB0LkNhY2hlKDFl
MyxmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKFMsZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9V
cHBlckNhc2UoKX0pfSksaz0vKFthLXpcZF0pKFtBLVpdKS9nLE49bmV3IHQuQ2FjaGUoMWUzLGZ1
bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoaywiJDFfJDIiKS50b0xvd2VyQ2FzZSgpfSkKK2Uu
ZGVmYXVsdD17Zm10OmEsbG9jOnUsdzpsLGRlY2FtZWxpemU6YyxkYXNoZXJpemU6cCxjYW1lbGl6
ZTpmLGNsYXNzaWZ5OmgsdW5kZXJzY29yZTpkLGNhcGl0YWxpemU6bX0sZS5mbXQ9YSxlLmxvYz11
LGUudz1sLGUuZGVjYW1lbGl6ZT1jLGUuZGFzaGVyaXplPXAsZS5jYW1lbGl6ZT1mLGUuY2xhc3Np
Znk9aCxlLnVuZGVyc2NvcmU9ZCxlLmNhcGl0YWxpemU9bX0pLGUoImVtYmVyLXJ1bnRpbWUvdXRp
bHMiLFsiZXhwb3J0cyIsImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2FycmF5IiwiZW1iZXItcnVudGlt
ZS9zeXN0ZW0vb2JqZWN0Il0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IgorZnVuY3Rpb24g
cihlKXtpZihudWxsPT09ZSlyZXR1cm4ibnVsbCIKK2lmKHZvaWQgMD09PWUpcmV0dXJuInVuZGVm
aW5lZCIKK3ZhciB0PWlbby5jYWxsKGUpXXx8Im9iamVjdCIKK3JldHVybiJmdW5jdGlvbiI9PT10
P24uZGVmYXVsdC5kZXRlY3QoZSkmJih0PSJjbGFzcyIpOiJvYmplY3QiPT09dCYmKGUgaW5zdGFu
Y2VvZiBFcnJvcj90PSJlcnJvciI6ZSBpbnN0YW5jZW9mIG4uZGVmYXVsdD90PSJpbnN0YW5jZSI6
ZSBpbnN0YW5jZW9mIERhdGUmJih0PSJkYXRlIikpLHR9ZS5pc0FycmF5PWZ1bmN0aW9uKGUpe2lm
KCFlfHxlLnNldEludGVydmFsKXJldHVybiExCitpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiEw
CitpZih0LmRlZmF1bHQuZGV0ZWN0KGUpKXJldHVybiEwCit2YXIgbj1yKGUpCitpZigiYXJyYXki
PT09bilyZXR1cm4hMAordmFyIGk9ZS5sZW5ndGgKK3JldHVybiJudW1iZXIiPT10eXBlb2YgaSYm
aT09PWkmJiJvYmplY3QiPT09bn0sZS50eXBlT2Y9cgordmFyIGk9eyJbb2JqZWN0IEJvb2xlYW5d
IjoiYm9vbGVhbiIsIltvYmplY3QgTnVtYmVyXSI6Im51bWJlciIsIltvYmplY3QgU3RyaW5nXSI6
InN0cmluZyIsIltvYmplY3QgRnVuY3Rpb25dIjoiZnVuY3Rpb24iLCJbb2JqZWN0IEFycmF5XSI6
ImFycmF5IiwiW29iamVjdCBEYXRlXSI6ImRhdGUiLCJbb2JqZWN0IFJlZ0V4cF0iOiJyZWdleHAi
LCJbb2JqZWN0IE9iamVjdF0iOiJvYmplY3QiLCJbb2JqZWN0IEZpbGVMaXN0XSI6ImZpbGVsaXN0
In0sbz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nfSksZSgiZW1iZXItdXRpbHMiLFsiZXhwb3J0
cyJdLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IgorZnVuY3Rpb24gdChlKXt2YXIgdD17fQordFtl
XT0xCitmb3IodmFyIG4gaW4gdClpZihuPT09ZSlyZXR1cm4gbgorcmV0dXJuIGV9ZnVuY3Rpb24g
bigpe3JldHVybisrZn1mdW5jdGlvbiByKGUpe3JldHVybiB0KCJfXyIrZSsiX18gW2lkPSIrKG0r
TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm5ldyBEYXRlKSkrIl0iKX1mdW5jdGlvbiBpKGUpe3Zh
ciB0LG4scixpLG8KK2Zvcih0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKylpZihuPWFyZ3VtZW50
c1t0XSlmb3Iocj1PYmplY3Qua2V5cyhuKSxpPTA7aTxyLmxlbmd0aDtpKyspbz1yW2ldLGVbb109
bltvXQorcmV0dXJuIGV9ZnVuY3Rpb24gbygpe31mdW5jdGlvbiBzKGUpe3JldHVybiB2b2lkIDA9
PT1lLl9faGFzU3VwZXImJihlLl9faGFzU3VwZXI9RShlKSksZS5fX2hhc1N1cGVyfWZ1bmN0aW9u
IGEoZSx0KXtmdW5jdGlvbiBuKCl7dmFyIG49dGhpcy5fc3VwZXIKK3RoaXMuX3N1cGVyPXQKK3Zh
ciByPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpCityZXR1cm4gdGhpcy5fc3VwZXI9bixyfXJldHVy
biBuLndyYXBwZWRGdW5jdGlvbj1lLG4uX19lbWJlcl9vYnNlcnZlc19fPWUuX19lbWJlcl9vYnNl
cnZlc19fLG4uX19lbWJlcl9vYnNlcnZlc0JlZm9yZV9fPWUuX19lbWJlcl9vYnNlcnZlc0JlZm9y
ZV9fLG4uX19lbWJlcl9saXN0ZW5zX189ZS5fX2VtYmVyX2xpc3RlbnNfXyxufWZ1bmN0aW9uIHUo
ZSx0LG4pe3ZhciByPW4mJm4ubGVuZ3RoCitpZighbnx8IXIpcmV0dXJuIGVbdF0oKQorc3dpdGNo
KHIpe2Nhc2UgMTpyZXR1cm4gZVt0XShuWzBdKQorY2FzZSAyOnJldHVybiBlW3RdKG5bMF0sblsx
XSkKK2Nhc2UgMzpyZXR1cm4gZVt0XShuWzBdLG5bMV0sblsyXSkKK2Nhc2UgNDpyZXR1cm4gZVt0
XShuWzBdLG5bMV0sblsyXSxuWzNdKQorY2FzZSA1OnJldHVybiBlW3RdKG5bMF0sblsxXSxuWzJd
LG5bM10sbls0XSkKK2RlZmF1bHQ6cmV0dXJuIGVbdF0uYXBwbHkoZSxuKX19ZnVuY3Rpb24gbChl
LHQpe3JldHVybiEoIWV8fCJmdW5jdGlvbiIhPXR5cGVvZiBlW3RdKX1mdW5jdGlvbiBjKGUpe3Jl
dHVybiBudWxsPT09ZXx8dm9pZCAwPT09ZX1mdW5jdGlvbiBwKGUpe3ZhciB0LG4scgoraWYoInN0
cmluZyI9PXR5cGVvZiBlKXJldHVybiBlCitpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodD1lLmxl
bmd0aCxuPSIiLHI9MDtyPHQ7cisrKXI+MCYmKG4rPSIsIiksYyhlW3JdKXx8KG4rPXAoZVtyXSkp
CityZXR1cm4gbn1yZXR1cm4gbnVsbCE9ZSYmImZ1bmN0aW9uIj09dHlwZW9mIGUudG9TdHJpbmc/
ZS50b1N0cmluZygpOkEuY2FsbChlKX12YXIgZj0wLGg9W10sZD17fSxtPXQoIl9fZW1iZXIiKyAr
bmV3IERhdGUpLGc9e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZh
bHVlOm51bGx9LHk9e25hbWU6bSxkZXNjcmlwdG9yOntjb25maWd1cmFibGU6ITAsd3JpdGFibGU6
ITAsZW51bWVyYWJsZTohMSx2YWx1ZTpudWxsfX0sdj1yKCJPV05FUiIpLGI9T2JqZWN0LmFzc2ln
bnx8aSxfPS9cLihfc3VwZXJ8Y2FsbFwodGhpc3xhcHBseVwodGhpcykvLHc9RnVuY3Rpb24ucHJv
dG90eXBlLnRvU3RyaW5nLEU9ZnVuY3Rpb24oKXtyZXR1cm4gdy5jYWxsKGZ1bmN0aW9uKCl7cmV0
dXJuIHRoaXN9KS5pbmRleE9mKCJyZXR1cm4gdGhpcyIpPi0xP2Z1bmN0aW9uKGUpe3JldHVybiBf
LnRlc3Qody5jYWxsKGUpKX06ZnVuY3Rpb24oKXtyZXR1cm4hMH19KCkKK28uX19oYXNTdXBlcj0h
MQordmFyIHg9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxDPUFycmF5LmlzQXJyYXksTz1yKCJO
QU1FX0tFWSIpLEE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxUPWZ1bmN0aW9uKCl7aWYoImZ1
bmN0aW9uIiE9dHlwZW9mIFdlYWtNYXApcmV0dXJuITEKK3ZhciBlPW5ldyBXZWFrTWFwCityZXR1
cm4iW29iamVjdCBXZWFrTWFwXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSl9
KCksUz0iZnVuY3Rpb24iPT10eXBlb2YgUHJveHkKK2Uuc3ltYm9sPXIsZS5nZXRPd25lcj1mdW5j
dGlvbihlKXtyZXR1cm4gZVt2XX0sZS5zZXRPd25lcj1mdW5jdGlvbihlLHQpe2Vbdl09dH0sZS5P
V05FUj12LGUuYXNzaWduPWIsZS5hc3NpZ25Qb2x5ZmlsbD1pLGUuZGljdGlvbmFyeT1mdW5jdGlv
bihlKXt2YXIgdD1PYmplY3QuY3JlYXRlKGUpCityZXR1cm4gdC5fZGljdD1udWxsLGRlbGV0ZSB0
Ll9kaWN0LHR9LGUudXVpZD1uLGUuR1VJRF9LRVk9bSxlLkdVSURfREVTQz1nLGUuR1VJRF9LRVlf
UFJPUEVSVFk9eSxlLmdlbmVyYXRlR3VpZD1mdW5jdGlvbihlLHQpe3R8fCh0PSJlbWJlciIpCit2
YXIgcj10K24oKQorcmV0dXJuIGUmJihudWxsPT09ZVttXT9lW21dPXI6KGcudmFsdWU9cixlLl9f
ZGVmaW5lTm9uRW51bWVyYWJsZT9lLl9fZGVmaW5lTm9uRW51bWVyYWJsZSh5KTpPYmplY3QuZGVm
aW5lUHJvcGVydHkoZSxtLGcpKSkscn0sZS5ndWlkRm9yPWZ1bmN0aW9uKGUpe3ZhciB0PXR5cGVv
ZiBlCitpZigoIm9iamVjdCI9PT10JiZudWxsIT09ZXx8ImZ1bmN0aW9uIj09PXQpJiZlW21dKXJl
dHVybiBlW21dCitpZih2b2lkIDA9PT1lKXJldHVybiIodW5kZWZpbmVkKSIKK2lmKG51bGw9PT1l
KXJldHVybiIobnVsbCkiCit2YXIgcj12b2lkIDAKK3N3aXRjaCh0KXtjYXNlIm51bWJlciI6cmV0
dXJuIHI9aFtlXSxyfHwocj1oW2VdPSJudSIrZSkscgorY2FzZSJzdHJpbmciOnJldHVybiByPWRb
ZV0scnx8KHI9ZFtlXT0ic3QiK24oKSkscgorY2FzZSJib29sZWFuIjpyZXR1cm4gZT8iKHRydWUp
IjoiKGZhbHNlKSIKK2RlZmF1bHQ6cmV0dXJuIGU9PT1PYmplY3Q/IihPYmplY3QpIjplPT09QXJy
YXk/IihBcnJheSkiOihyPSJlbWJlciIrbigpLG51bGw9PT1lW21dP2VbbV09cjooZy52YWx1ZT1y
LGUuX19kZWZpbmVOb25FbnVtZXJhYmxlP2UuX19kZWZpbmVOb25FbnVtZXJhYmxlKHkpOk9iamVj
dC5kZWZpbmVQcm9wZXJ0eShlLG0sZykpLHIpfX0sZS5pbnRlcm49dCxlLmNoZWNrSGFzU3VwZXI9
RSxlLlJPT1Q9byxlLndyYXA9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcyhlKT8hdC53cmFwcGVkRnVu
Y3Rpb24mJnModCk/YShlLGEodCxvKSk6YShlLHQpOmV9LGUuaW5zcGVjdD1mdW5jdGlvbihlKXtp
ZihudWxsPT09ZSlyZXR1cm4ibnVsbCIKK2lmKHZvaWQgMD09PWUpcmV0dXJuInVuZGVmaW5lZCIK
K2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIlsiK2UrIl0iCit2YXIgdD10eXBlb2YgZQoraWYo
Im9iamVjdCIhPT10JiYic3ltYm9sIiE9PXQpcmV0dXJuIiIrZQoraWYoImZ1bmN0aW9uIj09dHlw
ZW9mIGUudG9TdHJpbmcmJmUudG9TdHJpbmchPT14KXJldHVybiBlLnRvU3RyaW5nKCkKK3ZhciBu
PXZvaWQgMCxyPVtdCitmb3IodmFyIGkgaW4gZSlpZihlLmhhc093blByb3BlcnR5KGkpKXtpZigi
dG9TdHJpbmciPT09KG49ZVtpXSkpY29udGludWUKKyJmdW5jdGlvbiI9PXR5cGVvZiBuJiYobj0i
ZnVuY3Rpb24oKSB7IC4uLiB9IiksbiYmImZ1bmN0aW9uIiE9dHlwZW9mIG4udG9TdHJpbmc/ci5w
dXNoKGkrIjogIit4LmNhbGwobikpOnIucHVzaChpKyI6ICIrbil9cmV0dXJuInsiK3Iuam9pbigi
LCAiKSsifSJ9LGUubG9va3VwRGVzY3JpcHRvcj1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbixyPWU7
cjspe2lmKG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLHQpKXJldHVybiBuCity
PU9iamVjdC5nZXRQcm90b3R5cGVPZihyKX1yZXR1cm4gbnVsbH0sZS5jYW5JbnZva2U9bCxlLnRy
eUludm9rZT1mdW5jdGlvbihlLHQsbil7aWYobChlLHQpKXJldHVybiBuP3UoZSx0LG4pOnUoZSx0
KX0sZS5tYWtlQXJyYXk9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PT1lfHx2b2lkIDA9PT1lP1td
OkMoZSk/ZTpbZV19LGUuYXBwbHlTdHI9dSxlLk5BTUVfS0VZPU8sZS50b1N0cmluZz1wLGUuSEFT
X05BVElWRV9XRUFLTUFQPVQsZS5IQVNfTkFUSVZFX1BST1hZPVN9KSxlKCJlbWJlci12aWV3cy9j
b21wYXQvYXR0cnMiLFsiZXhwb3J0cyIsImVtYmVyLXV0aWxzIl0sZnVuY3Rpb24oZSx0KXsidXNl
IHN0cmljdCIKK2UuTVVUQUJMRV9DRUxMPXZvaWQgMCxlLk1VVEFCTEVfQ0VMTD0oMCx0LnN5bWJv
bCkoIk1VVEFCTEVfQ0VMTCIpfSkKK2UoImVtYmVyLXZpZXdzL2NvbXBhdC9mYWxsYmFjay12aWV3
LXJlZ2lzdHJ5IixbImV4cG9ydHMiLCJlbWJlci11dGlscyJdLGZ1bmN0aW9uKGUsdCl7InVzZSBz
dHJpY3QiCitlLmRlZmF1bHQ9KDAsdC5kaWN0aW9uYXJ5KShudWxsKX0pLGUoImVtYmVyLXZpZXdz
L2NvbXBvbmVudF9sb29rdXAiLFsiZXhwb3J0cyIsImVtYmVyLWRlYnVnIiwiZW1iZXItcnVudGlt
ZSJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCIKK2UuZGVmYXVsdD1uLk9iamVjdC5leHRl
bmQoe2NvbXBvbmVudEZvcjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHQuZmFjdG9yeUZvcigiY29t
cG9uZW50OiIrZSxuKX0sbGF5b3V0Rm9yOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdC5sb29rdXAo
InRlbXBsYXRlOmNvbXBvbmVudHMvIitlLG4pfX0pfSksZSgiZW1iZXItdmlld3MvaW5kZXgiLFsi
ZXhwb3J0cyIsImVtYmVyLXZpZXdzL3N5c3RlbS9qcXVlcnkiLCJlbWJlci12aWV3cy9zeXN0ZW0v
dXRpbHMiLCJlbWJlci12aWV3cy9zeXN0ZW0vZXZlbnRfZGlzcGF0Y2hlciIsImVtYmVyLXZpZXdz
L2NvbXBvbmVudF9sb29rdXAiLCJlbWJlci12aWV3cy9taXhpbnMvdGV4dF9zdXBwb3J0IiwiZW1i
ZXItdmlld3Mvdmlld3MvY29yZV92aWV3IiwiZW1iZXItdmlld3MvbWl4aW5zL2NsYXNzX25hbWVz
X3N1cHBvcnQiLCJlbWJlci12aWV3cy9taXhpbnMvY2hpbGRfdmlld3Nfc3VwcG9ydCIsImVtYmVy
LXZpZXdzL21peGlucy92aWV3X3N0YXRlX3N1cHBvcnQiLCJlbWJlci12aWV3cy9taXhpbnMvdmll
d19zdXBwb3J0IiwiZW1iZXItdmlld3MvbWl4aW5zL2FjdGlvbl9zdXBwb3J0IiwiZW1iZXItdmll
d3MvY29tcGF0L2F0dHJzIiwiZW1iZXItdmlld3Mvc3lzdGVtL2xvb2t1cF9wYXJ0aWFsIiwiZW1i
ZXItdmlld3MvdXRpbHMvbG9va3VwLWNvbXBvbmVudCIsImVtYmVyLXZpZXdzL3N5c3RlbS9hY3Rp
b25fbWFuYWdlciIsImVtYmVyLXZpZXdzL2NvbXBhdC9mYWxsYmFjay12aWV3LXJlZ2lzdHJ5Iiwi
ZW1iZXItdmlld3Mvc3lzdGVtL2V4dCJdLGZ1bmN0aW9uKGUsdCxuLHIsaSxvLHMsYSx1LGwsYyxw
LGYsaCxkLG0sZyl7InVzZSBzdHJpY3QiCitlLmZhbGxiYWNrVmlld1JlZ2lzdHJ5PWUuQWN0aW9u
TWFuYWdlcj1lLmxvb2t1cENvbXBvbmVudD1lLmhhc1BhcnRpYWw9ZS5sb29rdXBQYXJ0aWFsPWUu
TVVUQUJMRV9DRUxMPWUuQWN0aW9uU3VwcG9ydD1lLmRpc3BhdGNoTGlmZUN5Y2xlSG9vaz1lLlZp
ZXdNaXhpbj1lLlZpZXdTdGF0ZVN1cHBvcnQ9ZS5DaGlsZFZpZXdzU3VwcG9ydD1lLkNsYXNzTmFt
ZXNTdXBwb3J0PWUuQ29yZVZpZXc9ZS5UZXh0U3VwcG9ydD1lLkNvbXBvbmVudExvb2t1cD1lLkV2
ZW50RGlzcGF0Y2hlcj1lLmNvbnN0cnVjdFN0eWxlRGVwcmVjYXRpb25NZXNzYWdlPWUuc2V0Vmll
d0VsZW1lbnQ9ZS5nZXRWaWV3RWxlbWVudD1lLmdldFZpZXdJZD1lLmdldENoaWxkVmlld3M9ZS5n
ZXRSb290Vmlld3M9ZS5nZXRWaWV3Qm91bmRpbmdDbGllbnRSZWN0PWUuZ2V0Vmlld0NsaWVudFJl
Y3RzPWUuZ2V0Vmlld0JvdW5kcz1lLmlzU2ltcGxlQ2xpY2s9ZS5qUXVlcnk9dm9pZCAwLE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShlLCJqUXVlcnkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigp
e3JldHVybiB0LmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImlzU2ltcGxlQ2xp
Y2siLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLmlzU2ltcGxlQ2xpY2t9
fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImdldFZpZXdCb3VuZHMiLHtlbnVtZXJhYmxlOiEw
LGdldDpmdW5jdGlvbigpe3JldHVybiBuLmdldFZpZXdCb3VuZHN9fSksT2JqZWN0LmRlZmluZVBy
b3BlcnR5KGUsImdldFZpZXdDbGllbnRSZWN0cyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9u
KCl7cmV0dXJuIG4uZ2V0Vmlld0NsaWVudFJlY3RzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShl
LCJnZXRWaWV3Qm91bmRpbmdDbGllbnRSZWN0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24o
KXtyZXR1cm4gbi5nZXRWaWV3Qm91bmRpbmdDbGllbnRSZWN0fX0pLE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShlLCJnZXRSb290Vmlld3MiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVy
biBuLmdldFJvb3RWaWV3c319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiZ2V0Q2hpbGRWaWV3
cyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uZ2V0Q2hpbGRWaWV3c319
KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiZ2V0Vmlld0lkIix7ZW51bWVyYWJsZTohMCxnZXQ6
ZnVuY3Rpb24oKXtyZXR1cm4gbi5nZXRWaWV3SWR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUs
ImdldFZpZXdFbGVtZW50Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5n
ZXRWaWV3RWxlbWVudH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwic2V0Vmlld0VsZW1lbnQi
LHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLnNldFZpZXdFbGVtZW50fX0p
LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJjb25zdHJ1Y3RTdHlsZURlcHJlY2F0aW9uTWVzc2Fn
ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uY29uc3RydWN0U3R5bGVE
ZXByZWNhdGlvbk1lc3NhZ2V9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIkV2ZW50RGlzcGF0
Y2hlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuZGVmYXVsdH19KSxP
YmplY3QuZGVmaW5lUHJvcGVydHkoZSwiQ29tcG9uZW50TG9va3VwIix7ZW51bWVyYWJsZTohMCxn
ZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShl
LCJUZXh0U3VwcG9ydCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uZGVm
YXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiQ29yZVZpZXciLHtlbnVtZXJhYmxlOiEw
LGdldDpmdW5jdGlvbigpe3JldHVybiBzLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5
KGUsIkNsYXNzTmFtZXNTdXBwb3J0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1
cm4gYS5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJDaGlsZFZpZXdzU3VwcG9y
dCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHUuZGVmYXVsdH19KSxPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoZSwiVmlld1N0YXRlU3VwcG9ydCIse2VudW1lcmFibGU6ITAsZ2V0
OmZ1bmN0aW9uKCl7cmV0dXJuIGwuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwi
Vmlld01peGluIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5kZWZhdWx0
fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJkaXNwYXRjaExpZmVDeWNsZUhvb2siLHtlbnVt
ZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBjLmRpc3BhdGNoTGlmZUN5Y2xlSG9va319
KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiQWN0aW9uU3VwcG9ydCIse2VudW1lcmFibGU6ITAs
Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHko
ZSwiTVVUQUJMRV9DRUxMIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZi5N
VVRBQkxFX0NFTEx9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImxvb2t1cFBhcnRpYWwiLHtl
bnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBoLmRlZmF1bHR9fSksT2JqZWN0LmRl
ZmluZVByb3BlcnR5KGUsImhhc1BhcnRpYWwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigp
e3JldHVybiBoLmhhc1BhcnRpYWx9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImxvb2t1cENv
bXBvbmVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGQuZGVmYXVsdH19
KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiQWN0aW9uTWFuYWdlciIse2VudW1lcmFibGU6ITAs
Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG0uZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHko
ZSwiZmFsbGJhY2tWaWV3UmVnaXN0cnkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3Jl
dHVybiBnLmRlZmF1bHR9fSl9KSxlKCJlbWJlci12aWV3cy9taXhpbnMvYWN0aW9uX3N1cHBvcnQi
LFsiZXhwb3J0cyIsImVtYmVyLXV0aWxzIiwiZW1iZXItbWV0YWwiLCJlbWJlci1kZWJ1ZyIsImVt
YmVyLXZpZXdzL2NvbXBhdC9hdHRycyJdLGZ1bmN0aW9uKGUsdCxuLHIsaSl7InVzZSBzdHJpY3Qi
CitmdW5jdGlvbiBvKGUsdCl7cmV0dXJuIHQmJnRbaS5NVVRBQkxFX0NFTExdJiYodD10LnZhbHVl
KSx0fWUuZGVmYXVsdD1uLk1peGluLmNyZWF0ZSh7c2VuZEFjdGlvbjpmdW5jdGlvbihlKXtmb3Io
dD1hcmd1bWVudHMubGVuZ3RoLHI9QXJyYXkodD4xP3QtMTowKSxpPTE7aTx0O2krKylyW2ktMV09
YXJndW1lbnRzW2ldCit2YXIgdCxyLGkscz12b2lkIDAKK3ZvaWQgMD09PWUmJihlPSJhY3Rpb24i
KSxzPSgwLG4uZ2V0KSh0aGlzLCJhdHRycy4iK2UpfHwoMCxuLmdldCkodGhpcyxlKSx2b2lkIDAh
PT0ocz1vKHRoaXMscykpJiYoImZ1bmN0aW9uIj09dHlwZW9mIHM/cy5hcHBseSh2b2lkIDAscik6
dGhpcy50cmlnZ2VyQWN0aW9uKHthY3Rpb246cyxhY3Rpb25Db250ZXh0OnJ9KSl9LHNlbmQ6ZnVu
Y3Rpb24oZSl7Zm9yKHQ9YXJndW1lbnRzLmxlbmd0aCxyPUFycmF5KHQ+MT90LTE6MCksaT0xO2k8
dDtpKyspcltpLTFdPWFyZ3VtZW50c1tpXQordmFyIHQscixpLG89dGhpcy5hY3Rpb25zJiZ0aGlz
LmFjdGlvbnNbZV0KK2lmKCFvfHwhMD09PW8uYXBwbHkodGhpcyxyKSl7dmFyIHM9KDAsbi5nZXQp
KHRoaXMsInRhcmdldCIpCitzJiZzLnNlbmQuYXBwbHkocyxhcmd1bWVudHMpfX19KX0pLGUoImVt
YmVyLXZpZXdzL21peGlucy9jaGlsZF92aWV3c19zdXBwb3J0IixbImV4cG9ydHMiLCJlbWJlci11
dGlscyIsImVtYmVyLW1ldGFsIiwiZW1iZXItdmlld3Mvc3lzdGVtL3V0aWxzIl0sZnVuY3Rpb24o
ZSx0LG4scil7InVzZSBzdHJpY3QiCitlLmRlZmF1bHQ9bi5NaXhpbi5jcmVhdGUoe2luaXQ6ZnVu
Y3Rpb24oKXt0aGlzLl9zdXBlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksKDAsci5pbml0Q2hpbGRW
aWV3cykodGhpcyl9LGNoaWxkVmlld3M6KDAsbi5kZXNjcmlwdG9yKSh7Y29uZmlndXJhYmxlOiEx
LGVudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsci5nZXRDaGlsZFZpZXdzKSh0
aGlzKX19KSxhcHBlbmRDaGlsZDpmdW5jdGlvbihlKXt0aGlzLmxpbmtDaGlsZChlKSwoMCxyLmFk
ZENoaWxkVmlldykodGhpcyxlKX0sbGlua0NoaWxkOmZ1bmN0aW9uKGUpeygwLHQuZ2V0T3duZXIp
KGUpfHwoMCx0LnNldE93bmVyKShlLCgwLHQuZ2V0T3duZXIpKHRoaXMpKX19KX0pLGUoImVtYmVy
LXZpZXdzL21peGlucy9jbGFzc19uYW1lc19zdXBwb3J0IixbImV4cG9ydHMiLCJlbWJlci1tZXRh
bCIsImVtYmVyLWRlYnVnIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IgordmFyIHI9T2Jq
ZWN0LmZyZWV6ZShbXSkKK2UuZGVmYXVsdD10Lk1peGluLmNyZWF0ZSh7Y29uY2F0ZW5hdGVkUHJv
cGVydGllczpbImNsYXNzTmFtZXMiLCJjbGFzc05hbWVCaW5kaW5ncyJdLGluaXQ6ZnVuY3Rpb24o
KXt0aGlzLl9zdXBlci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGNsYXNzTmFtZXM6cixjbGFzc05h
bWVCaW5kaW5nczpyfSl9KSxlKCJlbWJlci12aWV3cy9taXhpbnMvdGV4dF9zdXBwb3J0IixbImV4
cG9ydHMiLCJlbWJlci1tZXRhbCIsImVtYmVyLXJ1bnRpbWUiXSxmdW5jdGlvbihlLHQsbil7InVz
ZSBzdHJpY3QiCitmdW5jdGlvbiByKGUsbixyKXt2YXIgaT0oMCx0LmdldCkobiwiYXR0cnMuIitl
KXx8KDAsdC5nZXQpKG4sZSksbz0oMCx0LmdldCkobiwib25FdmVudCIpLHM9KDAsdC5nZXQpKG4s
InZhbHVlIik7KG89PT1lfHwia2V5UHJlc3MiPT09byYmImtleS1wcmVzcyI9PT1lKSYmbi5zZW5k
QWN0aW9uKCJhY3Rpb24iLHMpLG4uc2VuZEFjdGlvbihlLHMpLChpfHxvPT09ZSkmJigoMCx0Lmdl
dCkobiwiYnViYmxlcyIpfHxyLnN0b3BQcm9wYWdhdGlvbigpKX12YXIgaT17MTM6Imluc2VydE5l
d2xpbmUiLDI3OiJjYW5jZWwifQorZS5kZWZhdWx0PXQuTWl4aW4uY3JlYXRlKG4uVGFyZ2V0QWN0
aW9uU3VwcG9ydCx7dmFsdWU6IiIsYXR0cmlidXRlQmluZGluZ3M6WyJhdXRvY2FwaXRhbGl6ZSIs
ImF1dG9jb3JyZWN0IiwiYXV0b2ZvY3VzIiwiZGlzYWJsZWQiLCJmb3JtIiwibWF4bGVuZ3RoIiwi
bWlubGVuZ3RoIiwicGxhY2Vob2xkZXIiLCJyZWFkb25seSIsInJlcXVpcmVkIiwic2VsZWN0aW9u
RGlyZWN0aW9uIiwic3BlbGxjaGVjayIsInRhYmluZGV4IiwidGl0bGUiXSxwbGFjZWhvbGRlcjpu
dWxsLGRpc2FibGVkOiExLG1heGxlbmd0aDpudWxsLGluaXQ6ZnVuY3Rpb24oKXt0aGlzLl9zdXBl
ci5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5vbigicGFzdGUiLHRoaXMsdGhpcy5fZWxlbWVu
dFZhbHVlRGlkQ2hhbmdlKSx0aGlzLm9uKCJjdXQiLHRoaXMsdGhpcy5fZWxlbWVudFZhbHVlRGlk
Q2hhbmdlKSx0aGlzLm9uKCJpbnB1dCIsdGhpcyx0aGlzLl9lbGVtZW50VmFsdWVEaWRDaGFuZ2Up
fSxhY3Rpb246bnVsbCxvbkV2ZW50OiJlbnRlciIsYnViYmxlczohMSxpbnRlcnByZXRLZXlFdmVu
dHM6ZnVuY3Rpb24oZSl7dmFyIHQ9aVtlLmtleUNvZGVdCitpZih0aGlzLl9lbGVtZW50VmFsdWVE
aWRDaGFuZ2UoKSx0KXJldHVybiB0aGlzW3RdKGUpfSxfZWxlbWVudFZhbHVlRGlkQ2hhbmdlOmZ1
bmN0aW9uKCl7KDAsdC5zZXQpKHRoaXMsInZhbHVlIix0aGlzLmVsZW1lbnQudmFsdWUpfSxjaGFu
Z2U6ZnVuY3Rpb24oZSl7dGhpcy5fZWxlbWVudFZhbHVlRGlkQ2hhbmdlKGUpfSxpbnNlcnROZXds
aW5lOmZ1bmN0aW9uKGUpe3IoImVudGVyIix0aGlzLGUpLHIoImluc2VydC1uZXdsaW5lIix0aGlz
LGUpfSxjYW5jZWw6ZnVuY3Rpb24oZSl7cigiZXNjYXBlLXByZXNzIix0aGlzLGUpfSxmb2N1c0lu
OmZ1bmN0aW9uKGUpe3IoImZvY3VzLWluIix0aGlzLGUpfSxmb2N1c091dDpmdW5jdGlvbihlKXt0
aGlzLl9lbGVtZW50VmFsdWVEaWRDaGFuZ2UoZSkscigiZm9jdXMtb3V0Iix0aGlzLGUpfSxrZXlQ
cmVzczpmdW5jdGlvbihlKXtyKCJrZXktcHJlc3MiLHRoaXMsZSl9LGtleVVwOmZ1bmN0aW9uKGUp
e3RoaXMuaW50ZXJwcmV0S2V5RXZlbnRzKGUpLHRoaXMuc2VuZEFjdGlvbigia2V5LXVwIiwoMCx0
LmdldCkodGhpcywidmFsdWUiKSxlKX0sa2V5RG93bjpmdW5jdGlvbihlKXt0aGlzLnNlbmRBY3Rp
b24oImtleS1kb3duIiwoMCx0LmdldCkodGhpcywidmFsdWUiKSxlKX19KX0pLGUoImVtYmVyLXZp
ZXdzL21peGlucy92aWV3X3N0YXRlX3N1cHBvcnQiLFsiZXhwb3J0cyIsImVtYmVyLW1ldGFsIl0s
ZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCIKK2UuZGVmYXVsdD10Lk1peGluLmNyZWF0ZSh7X3Ry
YW5zaXRpb25UbzpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9jdXJyZW50U3RhdGUsbj10aGlzLl9j
dXJyZW50U3RhdGU9dGhpcy5fc3RhdGVzW2VdCit0aGlzLl9zdGF0ZT1lLHQmJnQuZXhpdCYmdC5l
eGl0KHRoaXMpLG4uZW50ZXImJm4uZW50ZXIodGhpcyl9fSl9KSxlKCJlbWJlci12aWV3cy9taXhp
bnMvdmlld19zdXBwb3J0IixbImV4cG9ydHMiLCJlbWJlci11dGlscyIsImVtYmVyLW1ldGFsIiwi
ZW1iZXItZGVidWciLCJlbWJlci1lbnZpcm9ubWVudCIsImVtYmVyLXZpZXdzL3N5c3RlbS91dGls
cyIsImVtYmVyLXJ1bnRpbWUvc3lzdGVtL2NvcmVfb2JqZWN0IiwiZW1iZXItdmlld3Mvc3lzdGVt
L2pxdWVyeSJdLGZ1bmN0aW9uKGUsdCxuLHIsaSxvLHMsYSl7InVzZSBzdHJpY3QiCitmdW5jdGlv
biB1KCl7cmV0dXJuIHRoaXN9ZS5kaXNwYXRjaExpZmVDeWNsZUhvb2s9dm9pZCAwCit2YXIgbCxj
PWUuZGlzcGF0Y2hMaWZlQ3ljbGVIb29rPWZ1bmN0aW9uKGUsdCxuLHIpe2UudHJpZ2dlcih0LHth
dHRyczpyLG9sZEF0dHJzOm4sbmV3QXR0cnM6cn0pfQorZS5kZWZhdWx0PW4uTWl4aW4uY3JlYXRl
KChsPXtjb25jYXRlbmF0ZWRQcm9wZXJ0aWVzOlsiYXR0cmlidXRlQmluZGluZ3MiXX0sbFtzLlBP
U1RfSU5JVF09ZnVuY3Rpb24oKXtjKHRoaXMsImRpZEluaXRBdHRycyIsdm9pZCAwLHRoaXMuYXR0
cnMpLGModGhpcywiZGlkUmVjZWl2ZUF0dHJzIix2b2lkIDAsdGhpcy5hdHRycyl9LGwubmVhcmVz
dE9mVHlwZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5wYXJlbnRWaWV3LHI9ZSBpbnN0YW5j
ZW9mIG4uTWl4aW4/ZnVuY3Rpb24odCl7cmV0dXJuIGUuZGV0ZWN0KHQpfTpmdW5jdGlvbih0KXty
ZXR1cm4gZS5kZXRlY3QodC5jb25zdHJ1Y3Rvcil9O3Q7KXtpZihyKHQpKXJldHVybiB0Cit0PXQu
cGFyZW50Vmlld319LGwubmVhcmVzdFdpdGhQcm9wZXJ0eT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9
dGhpcy5wYXJlbnRWaWV3O3Q7KXtpZihlIGluIHQpcmV0dXJuIHQKK3Q9dC5wYXJlbnRWaWV3fX0s
bC5yZXJlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jdXJyZW50U3RhdGUucmVyZW5kZXIo
dGhpcyl9LGwuZWxlbWVudD0oMCxuLmRlc2NyaXB0b3IpKHtjb25maWd1cmFibGU6ITEsZW51bWVy
YWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5nZXRFbGVtZW50KHRo
aXMpfX0pLGwuJD1mdW5jdGlvbihlKXtpZih0aGlzLmVsZW1lbnQpcmV0dXJuIGU/KDAsYS5kZWZh
dWx0KShlLHRoaXMuZWxlbWVudCk6KDAsYS5kZWZhdWx0KSh0aGlzLmVsZW1lbnQpfSxsLmFwcGVu
ZFRvPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2Vudmlyb25tZW50fHxpLmVudmlyb25tZW50LG49
dm9pZCAwCityZXR1cm4gbj10Lmhhc0RPTSYmInN0cmluZyI9PXR5cGVvZiBlP2RvY3VtZW50LnF1
ZXJ5U2VsZWN0b3IoZSk6ZSx0aGlzLnJlbmRlcmVyLmFwcGVuZFRvKHRoaXMsbiksdGhpc30sbC5y
ZW5kZXJUb0VsZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQg
MCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06ImJvZHkiLHQ9dGhpcy5yZW5kZXJlci5jcmVh
dGVFbGVtZW50KGUpCityZXR1cm4gdGhpcy5yZW5kZXJlci5hcHBlbmRUbyh0aGlzLHQpLHR9LGwu
YXBwZW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kVG8oZG9jdW1lbnQuYm9keSl9LGwu
ZWxlbWVudElkPW51bGwsbC5maW5kRWxlbWVudEluUGFyZW50RWxlbWVudD1mdW5jdGlvbihlKXt2
YXIgdD0iIyIrdGhpcy5lbGVtZW50SWQKK3JldHVybigwLGEuZGVmYXVsdCkodClbMF18fCgwLGEu
ZGVmYXVsdCkodCxlKVswXX0sbC53aWxsSW5zZXJ0RWxlbWVudD11LGwuZGlkSW5zZXJ0RWxlbWVu
dD11LGwud2lsbENsZWFyUmVuZGVyPXUsbC5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fc3VwZXIu
YXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2N1cnJlbnRTdGF0ZS5kZXN0cm95KHRoaXMpfSxs
LndpbGxEZXN0cm95RWxlbWVudD11LGwucGFyZW50Vmlld0RpZENoYW5nZT11LGwudGFnTmFtZT1u
dWxsLGwuaW5pdD1mdW5jdGlvbigpe3ZhciBlLG4KK3RoaXMuX3N1cGVyLmFwcGx5KHRoaXMsYXJn
dW1lbnRzKSx0aGlzLmVsZW1lbnRJZHx8IiI9PT10aGlzLnRhZ05hbWV8fCh0aGlzLmVsZW1lbnRJ
ZD0oMCx0Lmd1aWRGb3IpKHRoaXMpKSx0aGlzLmV2ZW50TWFuYWdlciYmKGU9KDAsdC5nZXRPd25l
cikodGhpcyksIShuPWUmJmUubG9va3VwKCJldmVudF9kaXNwYXRjaGVyOm1haW4iKSl8fCJjYW5E
aXNwYXRjaFRvRXZlbnRNYW5hZ2VyImluIG58fChuLmNhbkRpc3BhdGNoVG9FdmVudE1hbmFnZXI9
ITApKX0sbC5fX2RlZmluZU5vbkVudW1lcmFibGU9ZnVuY3Rpb24oZSl7dGhpc1tlLm5hbWVdPWUu
ZGVzY3JpcHRvci52YWx1ZX0sbC5oYW5kbGVFdmVudD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlz
Ll9jdXJyZW50U3RhdGUuaGFuZGxlRXZlbnQodGhpcyxlLHQpfSxsKSl9KSxlKCJlbWJlci12aWV3
cy9zeXN0ZW0vYWN0aW9uX21hbmFnZXIiLFsiZXhwb3J0cyJdLGZ1bmN0aW9uKGUpeyJ1c2Ugc3Ry
aWN0IgorZnVuY3Rpb24gdCgpe31lLmRlZmF1bHQ9dCx0LnJlZ2lzdGVyZWRBY3Rpb25zPXt9fSks
ZSgiZW1iZXItdmlld3Mvc3lzdGVtL2V2ZW50X2Rpc3BhdGNoZXIiLFsiZXhwb3J0cyIsImVtYmVy
LXV0aWxzIiwiZW1iZXItZGVidWciLCJlbWJlci1tZXRhbCIsImVtYmVyLXJ1bnRpbWUiLCJlbWJl
ci12aWV3cy9zeXN0ZW0vanF1ZXJ5IiwiZW1iZXItdmlld3Mvc3lzdGVtL2FjdGlvbl9tYW5hZ2Vy
IiwiZW1iZXItZW52aXJvbm1lbnQiLCJlbWJlci12aWV3cy9jb21wYXQvZmFsbGJhY2stdmlldy1y
ZWdpc3RyeSJdLGZ1bmN0aW9uKGUsdCxuLHIsaSxvLHMsYSx1KXsidXNlIHN0cmljdCIKK2UuZGVm
YXVsdD1pLk9iamVjdC5leHRlbmQoe2V2ZW50czp7dG91Y2hzdGFydDoidG91Y2hTdGFydCIsdG91
Y2htb3ZlOiJ0b3VjaE1vdmUiLHRvdWNoZW5kOiJ0b3VjaEVuZCIsdG91Y2hjYW5jZWw6InRvdWNo
Q2FuY2VsIixrZXlkb3duOiJrZXlEb3duIixrZXl1cDoia2V5VXAiLGtleXByZXNzOiJrZXlQcmVz
cyIsbW91c2Vkb3duOiJtb3VzZURvd24iLG1vdXNldXA6Im1vdXNlVXAiLGNvbnRleHRtZW51OiJj
b250ZXh0TWVudSIsY2xpY2s6ImNsaWNrIixkYmxjbGljazoiZG91YmxlQ2xpY2siLG1vdXNlbW92
ZToibW91c2VNb3ZlIixmb2N1c2luOiJmb2N1c0luIixmb2N1c291dDoiZm9jdXNPdXQiLG1vdXNl
ZW50ZXI6Im1vdXNlRW50ZXIiLG1vdXNlbGVhdmU6Im1vdXNlTGVhdmUiLHN1Ym1pdDoic3VibWl0
IixpbnB1dDoiaW5wdXQiLGNoYW5nZToiY2hhbmdlIixkcmFnc3RhcnQ6ImRyYWdTdGFydCIsZHJh
ZzoiZHJhZyIsZHJhZ2VudGVyOiJkcmFnRW50ZXIiLGRyYWdsZWF2ZToiZHJhZ0xlYXZlIixkcmFn
b3ZlcjoiZHJhZ092ZXIiLGRyb3A6ImRyb3AiLGRyYWdlbmQ6ImRyYWdFbmQifSxyb290RWxlbWVu
dDoiYm9keSIsaW5pdDpmdW5jdGlvbigpe3RoaXMuX3N1cGVyKCl9LHNldHVwOmZ1bmN0aW9uKGUs
bil7dmFyIGk9dm9pZCAwLHM9dGhpcy5fZmluYWxFdmVudHM9KDAsdC5hc3NpZ24pKHt9LCgwLHIu
Z2V0KSh0aGlzLCJldmVudHMiKSxlKQoraWYoKDAsci5pc05vbmUpKG4pP249KDAsci5nZXQpKHRo
aXMsInJvb3RFbGVtZW50Iik6KDAsci5zZXQpKHRoaXMsInJvb3RFbGVtZW50IixuKSxuPSgwLG8u
ZGVmYXVsdCkobiksbi5hZGRDbGFzcygiZW1iZXItYXBwbGljYXRpb24iKSwhbi5pcygiLmVtYmVy
LWFwcGxpY2F0aW9uIikpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5hYmxlIHRvIGFkZCAnZW1iZXIt
YXBwbGljYXRpb24nIGNsYXNzIHRvIHJvb3QgZWxlbWVudCAoIisobi5zZWxlY3Rvcnx8blswXS50
YWdOYW1lKSsiKS4gTWFrZSBzdXJlIHlvdSBzZXQgcm9vdEVsZW1lbnQgdG8gdGhlIGJvZHkgb3Ig
YW4gZWxlbWVudCBpbiB0aGUgYm9keS4iKQordmFyIGE9dGhpcy5fZ2V0Vmlld1JlZ2lzdHJ5KCkK
K2ZvcihpIGluIHMpcy5oYXNPd25Qcm9wZXJ0eShpKSYmdGhpcy5zZXR1cEhhbmRsZXIobixpLHNb
aV0sYSl9LHNldHVwSGFuZGxlcjpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT10aGlzCitudWxsIT09
biYmKGUub24odCsiLmVtYmVyIiwiLmVtYmVyLXZpZXciLGZ1bmN0aW9uKGUsdCl7dmFyIG89clt0
aGlzLmlkXSxzPSEwLGE9aS5jYW5EaXNwYXRjaFRvRXZlbnRNYW5hZ2VyP2kuX2ZpbmROZWFyZXN0
RXZlbnRNYW5hZ2VyKG8sbik6bnVsbAorcmV0dXJuIGEmJmEhPT10P3M9aS5fZGlzcGF0Y2hFdmVu
dChhLGUsbixvKTpvJiYocz1pLl9idWJibGVFdmVudChvLGUsbikpLHN9KSxlLm9uKHQrIi5lbWJl
ciIsIltkYXRhLWVtYmVyLWFjdGlvbl0iLGZ1bmN0aW9uKGUpe3ZhciB0LHIsaSxvLGE9ZS5jdXJy
ZW50VGFyZ2V0LmF0dHJpYnV0ZXMsdT1bXQorZm9yKHQ9MDt0PGEubGVuZ3RoO3QrKylyPWEuaXRl
bSh0KSxpPXIubmFtZSwtMSE9PWkubGFzdEluZGV4T2YoImRhdGEtZW1iZXItYWN0aW9uLSIsMCkm
JihvPXMuZGVmYXVsdC5yZWdpc3RlcmVkQWN0aW9uc1tyLnZhbHVlXSkmJm8uZXZlbnROYW1lPT09
biYmLTE9PT11LmluZGV4T2YobykmJihvLmhhbmRsZXIoZSksdS5wdXNoKG8pKX0pKX0sX2dldFZp
ZXdSZWdpc3RyeTpmdW5jdGlvbigpe3ZhciBlPSgwLHQuZ2V0T3duZXIpKHRoaXMpCityZXR1cm4g
ZSYmZS5sb29rdXAoIi12aWV3LXJlZ2lzdHJ5Om1haW4iKXx8dS5kZWZhdWx0fSxfZmluZE5lYXJl
c3RFdmVudE1hbmFnZXI6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49bnVsbDtlJiYoIShuPSgwLHIu
Z2V0KShlLCJldmVudE1hbmFnZXIiKSl8fCFuW3RdKTspZT0oMCxyLmdldCkoZSwicGFyZW50Vmll
dyIpCityZXR1cm4gbn0sX2Rpc3BhdGNoRXZlbnQ6ZnVuY3Rpb24oZSx0LG4saSl7dmFyIG89ITAs
cz1lW25dCityZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygcz8obz0oMCxyLnJ1bikoZSxzLHQsaSks
dC5zdG9wUHJvcGFnYXRpb24oKSk6bz10aGlzLl9idWJibGVFdmVudChpLHQsbiksb30sX2J1YmJs
ZUV2ZW50OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZS5oYW5kbGVFdmVudChuLHQpfSxkZXN0cm95
OmZ1bmN0aW9uKCl7dmFyIGU9KDAsci5nZXQpKHRoaXMsInJvb3RFbGVtZW50IikKK3JldHVybigw
LG8uZGVmYXVsdCkoZSkub2ZmKCIuZW1iZXIiLCIqKiIpLnJlbW92ZUNsYXNzKCJlbWJlci1hcHBs
aWNhdGlvbiIpLHRoaXMuX3N1cGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdG9TdHJpbmc6ZnVu
Y3Rpb24oKXtyZXR1cm4iKEV2ZW50RGlzcGF0Y2hlcikifX0pfSksZSgiZW1iZXItdmlld3Mvc3lz
dGVtL2V4dCIsWyJlbWJlci1tZXRhbCJdLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IgorZS5ydW4u
X2FkZFF1ZXVlKCJyZW5kZXIiLCJhY3Rpb25zIiksZS5ydW4uX2FkZFF1ZXVlKCJhZnRlclJlbmRl
ciIsInJlbmRlciIpfSksZSgiZW1iZXItdmlld3Mvc3lzdGVtL2pxdWVyeSIsWyJleHBvcnRzIiwi
ZW1iZXItZW52aXJvbm1lbnQiXSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IgordmFyIG49dm9p
ZCAwCit0LmVudmlyb25tZW50Lmhhc0RPTSYmKG49dC5jb250ZXh0LmltcG9ydHMualF1ZXJ5KSYm
KG4uZXZlbnQuYWRkUHJvcD9uLmV2ZW50LmFkZFByb3AoImRhdGFUcmFuc2ZlciIpOlsiZHJhZ3N0
YXJ0IiwiZHJhZyIsImRyYWdlbnRlciIsImRyYWdsZWF2ZSIsImRyYWdvdmVyIiwiZHJvcCIsImRy
YWdlbmQiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe24uZXZlbnQuZml4SG9va3NbZV09e3Byb3BzOlsi
ZGF0YVRyYW5zZmVyIl19fSkpLGUuZGVmYXVsdD1ufSksZSgiZW1iZXItdmlld3Mvc3lzdGVtL2xv
b2t1cF9wYXJ0aWFsIixbImV4cG9ydHMiLCJlbWJlci1kZWJ1ZyJdLGZ1bmN0aW9uKGUsdCl7InVz
ZSBzdHJpY3QiCitmdW5jdGlvbiBuKGUpe3ZhciB0PWUuc3BsaXQoIi8iKSxuPXRbdC5sZW5ndGgt
MV0KK3JldHVybiB0W3QubGVuZ3RoLTFdPSJfIituLHQuam9pbigiLyIpfWZ1bmN0aW9uIHIoZSxu
LHIpe2lmKHIpe2lmKCFlKXRocm93IG5ldyB0LkVycm9yKCJDb250YWluZXIgd2FzIG5vdCBmb3Vu
ZCB3aGVuIGxvb2tpbmcgdXAgYSB2aWV3cyB0ZW1wbGF0ZS4gVGhpcyBpcyBtb3N0IGxpa2VseSBk
dWUgdG8gbWFudWFsbHkgaW5zdGFudGlhdGluZyBhbiBFbWJlci5WaWV3LiBTZWU6IGh0dHA6Ly9n
aXQuaW8vRUtQcG5BIikKK3JldHVybiBlLmxvb2t1cCgidGVtcGxhdGU6IituKXx8ZS5sb29rdXAo
InRlbXBsYXRlOiIrcil9fWUuZGVmYXVsdD1mdW5jdGlvbihlLHQpe2lmKG51bGwhPWUpe3ZhciBp
PXIodCxuKGUpLGUpCityZXR1cm4gaX19LGUuaGFzUGFydGlhbD1mdW5jdGlvbihlLHIpe2lmKCFy
KXRocm93IG5ldyB0LkVycm9yKCJDb250YWluZXIgd2FzIG5vdCBmb3VuZCB3aGVuIGxvb2tpbmcg
dXAgYSB2aWV3cyB0ZW1wbGF0ZS4gVGhpcyBpcyBtb3N0IGxpa2VseSBkdWUgdG8gbWFudWFsbHkg
aW5zdGFudGlhdGluZyBhbiBFbWJlci5WaWV3LiBTZWU6IGh0dHA6Ly9naXQuaW8vRUtQcG5BIikK
K3JldHVybiByLmhhc1JlZ2lzdHJhdGlvbigidGVtcGxhdGU6IituKGUpKXx8ci5oYXNSZWdpc3Ry
YXRpb24oInRlbXBsYXRlOiIrZSl9fSksZSgiZW1iZXItdmlld3Mvc3lzdGVtL3V0aWxzIixbImV4
cG9ydHMiLCJlbWJlci11dGlscyJdLGZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiCitmdW5jdGlv
biBuKGUpe3JldHVybiIiPT09ZS50YWdOYW1lPygwLHQuZ3VpZEZvcikoZSk6ZS5lbGVtZW50SWR8
fCgwLHQuZ3VpZEZvcikoZSl9ZnVuY3Rpb24gcihlLHQpe3ZhciBuPVtdLHI9W10KK3JldHVybiBl
W2FdLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIGk9dFtlXQorIWl8fGkuaXNEZXN0cm95aW5nfHxp
LmlzRGVzdHJveWVkfHwtMSE9PW4uaW5kZXhPZihlKXx8KG4ucHVzaChlKSxyLnB1c2goaSkpfSks
ZVthXT1uLHJ9ZnVuY3Rpb24gaShlKXtyZXR1cm4gZS5yZW5kZXJlci5nZXRCb3VuZHMoZSl9ZnVu
Y3Rpb24gbyhlKXt2YXIgdD1pKGUpLG49ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKQorcmV0dXJuIG4u
c2V0U3RhcnRCZWZvcmUodC5maXJzdE5vZGUpLG4uc2V0RW5kQWZ0ZXIodC5sYXN0Tm9kZSksbn1l
LmVsTWF0Y2hlcz12b2lkIDAsZS5pc1NpbXBsZUNsaWNrPWZ1bmN0aW9uKGUpe3ZhciB0PWUuc2hp
ZnRLZXl8fGUubWV0YUtleXx8ZS5hbHRLZXl8fGUuY3RybEtleSxuPWUud2hpY2g+MQorcmV0dXJu
IXQmJiFufSxlLmNvbnN0cnVjdFN0eWxlRGVwcmVjYXRpb25NZXNzYWdlPWZ1bmN0aW9uKGUpe3Jl
dHVybidCaW5kaW5nIHN0eWxlIGF0dHJpYnV0ZXMgbWF5IGludHJvZHVjZSBjcm9zcy1zaXRlIHNj
cmlwdGluZyB2dWxuZXJhYmlsaXRpZXM7IHBsZWFzZSBlbnN1cmUgdGhhdCB2YWx1ZXMgYmVpbmcg
Ym91bmQgYXJlIHByb3Blcmx5IGVzY2FwZWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBpbmNsdWRp
bmcgaG93IHRvIGRpc2FibGUgdGhpcyB3YXJuaW5nLCBzZWUgaHR0cDovL2VtYmVyanMuY29tL2Rl
cHJlY2F0aW9ucy92MS54LyN0b2NfYmluZGluZy1zdHlsZS1hdHRyaWJ1dGVzLiBTdHlsZSBhZmZl
Y3RlZDogIicrZSsnIid9LGUuZ2V0Um9vdFZpZXdzPWZ1bmN0aW9uKGUpe3ZhciB0PWUubG9va3Vw
KCItdmlldy1yZWdpc3RyeTptYWluIiksbj1bXQorcmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVh
Y2goZnVuY3Rpb24oZSl7dmFyIHI9dFtlXQorbnVsbD09PXIucGFyZW50VmlldyYmbi5wdXNoKHIp
fSksbn0sZS5nZXRWaWV3SWQ9bixlLmdldFZpZXdFbGVtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBl
W3NdfSxlLmluaXRWaWV3RWxlbWVudD1mdW5jdGlvbihlKXtlW3NdPW51bGx9LGUuc2V0Vmlld0Vs
ZW1lbnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVtzXT10fSxlLmdldENoaWxkVmlld3M9ZnVuY3Rp
b24oZSl7cmV0dXJuIHIoZSwoMCx0LmdldE93bmVyKShlKS5sb29rdXAoIi12aWV3LXJlZ2lzdHJ5
Om1haW4iKSl9LGUuaW5pdENoaWxkVmlld3M9ZnVuY3Rpb24oZSl7ZVthXT1bXX0sZS5hZGRDaGls
ZFZpZXc9ZnVuY3Rpb24oZSx0KXtlW2FdLnB1c2gobih0KSl9LGUuY29sbGVjdENoaWxkVmlld3M9
cixlLmdldFZpZXdCb3VuZHM9aSxlLmdldFZpZXdSYW5nZT1vLGUuZ2V0Vmlld0NsaWVudFJlY3Rz
PWZ1bmN0aW9uKGUpe3JldHVybiBvKGUpLmdldENsaWVudFJlY3RzKCl9LGUuZ2V0Vmlld0JvdW5k
aW5nQ2xpZW50UmVjdD1mdW5jdGlvbihlKXtyZXR1cm4gbyhlKS5nZXRCb3VuZGluZ0NsaWVudFJl
Y3QoKX0sZS5tYXRjaGVzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUuY2FsbChlLHQpfQordmFyIHM9
KDAsdC5zeW1ib2wpKCJWSUVXX0VMRU1FTlQiKSxhPSgwLHQuc3ltYm9sKSgiQ0hJTERfVklFV19J
RFMiKSx1PWUuZWxNYXRjaGVzPSJ1bmRlZmluZWQiIT10eXBlb2YgRWxlbWVudCYmKEVsZW1lbnQu
cHJvdG90eXBlLm1hdGNoZXN8fEVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXNTZWxlY3Rvcnx8RWxl
bWVudC5wcm90b3R5cGUubW96TWF0Y2hlc1NlbGVjdG9yfHxFbGVtZW50LnByb3RvdHlwZS5tc01h
dGNoZXNTZWxlY3Rvcnx8RWxlbWVudC5wcm90b3R5cGUub01hdGNoZXNTZWxlY3Rvcnx8RWxlbWVu
dC5wcm90b3R5cGUud2Via2l0TWF0Y2hlc1NlbGVjdG9yKX0pLGUoImVtYmVyLXZpZXdzL3V0aWxz
L2xvb2t1cC1jb21wb25lbnQiLFsiZXhwb3J0cyIsImVtYmVyLWJhYmVsIiwiY29udGFpbmVyIl0s
ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IgorZnVuY3Rpb24gcihlLHQscixvKXt2YXIgcz1l
LmNvbXBvbmVudEZvcihyLHQsbyksYT1lLmxheW91dEZvcihyLHQsbyksdT17bGF5b3V0OmEsY29t
cG9uZW50OnN9CityZXR1cm4gYSYmIXMmJih1LmNvbXBvbmVudD10LmZhY3RvcnlGb3IoKDAsbi5w
cml2YXRpemUpKGkpKSksdX1lLmRlZmF1bHQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciBpLG89ZS5sb29r
dXAoImNvbXBvbmVudC1sb29rdXA6bWFpbiIpCityZXR1cm4gbiYmbi5zb3VyY2UmJihpPXIobyxl
LHQsbiksaS5jb21wb25lbnR8fGkubGF5b3V0KT9pOnIobyxlLHQpfQordmFyIGk9KDAsdC50YWdn
ZWRUZW1wbGF0ZUxpdGVyYWxMb29zZSkoWyJjb21wb25lbnQ6LWRlZmF1bHQiXSxbImNvbXBvbmVu
dDotZGVmYXVsdCJdKX0pLGUoImVtYmVyLXZpZXdzL3ZpZXdzL2NvcmVfdmlldyIsWyJleHBvcnRz
IiwiZW1iZXItcnVudGltZSIsImVtYmVyLXZpZXdzL3N5c3RlbS91dGlscyIsImVtYmVyLXZpZXdz
L3ZpZXdzL3N0YXRlcyJdLGZ1bmN0aW9uKGUsdCxuLHIpeyJ1c2Ugc3RyaWN0IgordmFyIGk9dC5G
cmFtZXdvcmtPYmplY3QuZXh0ZW5kKHQuRXZlbnRlZCx0LkFjdGlvbkhhbmRsZXIse2lzVmlldzoh
MCxfc3RhdGVzOigwLHIuY2xvbmVTdGF0ZXMpKHIuc3RhdGVzKSxpbml0OmZ1bmN0aW9uKCl7aWYo
dGhpcy5fc3VwZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX3N0YXRlPSJwcmVSZW5kZXIi
LHRoaXMuX2N1cnJlbnRTdGF0ZT10aGlzLl9zdGF0ZXMucHJlUmVuZGVyLCgwLG4uaW5pdFZpZXdF
bGVtZW50KSh0aGlzKSwhdGhpcy5yZW5kZXJlcil0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBpbnN0
YW50aWF0ZSBhIGNvbXBvbmVudCB3aXRob3V0IGEgcmVuZGVyZXIuIFBsZWFzZSBlbnN1cmUgdGhh
dCB5b3UgYXJlIGNyZWF0aW5nICIrdGhpcysiIHdpdGggYSBwcm9wZXIgY29udGFpbmVyL3JlZ2lz
dHJ5LiIpfSxwYXJlbnRWaWV3Om51bGwsaW5zdHJ1bWVudERldGFpbHM6ZnVuY3Rpb24oZSl7cmV0
dXJuIGUub2JqZWN0PXRoaXMudG9TdHJpbmcoKSxlLmNvbnRhaW5lcktleT10aGlzLl9kZWJ1Z0Nv
bnRhaW5lcktleSxlLnZpZXc9dGhpcyxlfSx0cmlnZ2VyOmZ1bmN0aW9uKCl7dGhpcy5fc3VwZXIu
YXBwbHkodGhpcyxhcmd1bWVudHMpCit2YXIgZSx0LG49YXJndW1lbnRzWzBdLHI9dGhpc1tuXQor
aWYoImZ1bmN0aW9uIj09dHlwZW9mIHIpe2ZvcihlPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3Ro
LTEpLHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWVbdC0xXT1hcmd1bWVudHNbdF0KK3JldHVy
biByLmFwcGx5KHRoaXMsZSl9fSxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlw
ZW9mIHRoaXNbZV18fHRoaXMuX3N1cGVyKGUpfX0pOygwLHQuZGVwcmVjYXRlVW5kZXJzY29yZUFj
dGlvbnMpKGkpLGkucmVvcGVuQ2xhc3Moe2lzVmlld0ZhY3Rvcnk6ITB9KSxlLmRlZmF1bHQ9aX0p
LGUoImVtYmVyLXZpZXdzL3ZpZXdzL3N0YXRlcyIsWyJleHBvcnRzIiwiZW1iZXItdXRpbHMiLCJl
bWJlci12aWV3cy92aWV3cy9zdGF0ZXMvZGVmYXVsdCIsImVtYmVyLXZpZXdzL3ZpZXdzL3N0YXRl
cy9wcmVfcmVuZGVyIiwiZW1iZXItdmlld3Mvdmlld3Mvc3RhdGVzL2hhc19lbGVtZW50IiwiZW1i
ZXItdmlld3Mvdmlld3Mvc3RhdGVzL2luX2RvbSIsImVtYmVyLXZpZXdzL3ZpZXdzL3N0YXRlcy9k
ZXN0cm95aW5nIl0sZnVuY3Rpb24oZSx0LG4scixpLG8scyl7InVzZSBzdHJpY3QiCitlLnN0YXRl
cz12b2lkIDAsZS5jbG9uZVN0YXRlcz1mdW5jdGlvbihlKXt2YXIgbj17fQorbi5fZGVmYXVsdD17
fSxuLnByZVJlbmRlcj1PYmplY3QuY3JlYXRlKG4uX2RlZmF1bHQpLG4uZGVzdHJveWluZz1PYmpl
Y3QuY3JlYXRlKG4uX2RlZmF1bHQpLG4uaGFzRWxlbWVudD1PYmplY3QuY3JlYXRlKG4uX2RlZmF1
bHQpLG4uaW5ET009T2JqZWN0LmNyZWF0ZShuLmhhc0VsZW1lbnQpCitmb3IodmFyIHIgaW4gZSll
Lmhhc093blByb3BlcnR5KHIpJiYoMCx0LmFzc2lnbikobltyXSxlW3JdKQorcmV0dXJuIG59LGUu
c3RhdGVzPXtfZGVmYXVsdDpuLmRlZmF1bHQscHJlUmVuZGVyOnIuZGVmYXVsdCxpbkRPTTpvLmRl
ZmF1bHQsaGFzRWxlbWVudDppLmRlZmF1bHQsZGVzdHJveWluZzpzLmRlZmF1bHR9fSksZSgiZW1i
ZXItdmlld3Mvdmlld3Mvc3RhdGVzL2RlZmF1bHQiLFsiZXhwb3J0cyIsImVtYmVyLWRlYnVnIl0s
ZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCIKK2UuZGVmYXVsdD17YXBwZW5kQ2hpbGQ6ZnVuY3Rp
b24oKXt0aHJvdyBuZXcgdC5FbWJlckVycm9yKCJZb3UgY2FuJ3QgdXNlIGFwcGVuZENoaWxkIG91
dHNpZGUgb2YgdGhlIHJlbmRlcmluZyBwcm9jZXNzIil9LGhhbmRsZUV2ZW50OmZ1bmN0aW9uKCl7
cmV0dXJuITB9LHJlcmVuZGVyOmZ1bmN0aW9uKCl7fSxkZXN0cm95OmZ1bmN0aW9uKCl7fX19KSxl
KCJlbWJlci12aWV3cy92aWV3cy9zdGF0ZXMvZGVzdHJveWluZyIsWyJleHBvcnRzIiwiZW1iZXIt
dXRpbHMiLCJlbWJlci1kZWJ1ZyIsImVtYmVyLXZpZXdzL3ZpZXdzL3N0YXRlcy9kZWZhdWx0Il0s
ZnVuY3Rpb24oZSx0LG4scil7InVzZSBzdHJpY3QiCit2YXIgaT1PYmplY3QuY3JlYXRlKHIuZGVm
YXVsdCk7KDAsdC5hc3NpZ24pKGkse2FwcGVuZENoaWxkOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IG4u
RXJyb3IoIllvdSBjYW4ndCBjYWxsIGFwcGVuZENoaWxkIG9uIGEgdmlldyBiZWluZyBkZXN0cm95
ZWQiKX0scmVyZW5kZXI6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgbi5FcnJvcigiWW91IGNhbid0IGNh
bGwgcmVyZW5kZXIgb24gYSB2aWV3IGJlaW5nIGRlc3Ryb3llZCIpfX0pLGUuZGVmYXVsdD1pfSks
ZSgiZW1iZXItdmlld3Mvdmlld3Mvc3RhdGVzL2hhc19lbGVtZW50IixbImV4cG9ydHMiLCJlbWJl
ci11dGlscyIsImVtYmVyLXZpZXdzL3ZpZXdzL3N0YXRlcy9kZWZhdWx0IiwiZW1iZXItbWV0YWwi
XSxmdW5jdGlvbihlLHQsbixyKXsidXNlIHN0cmljdCIKK3ZhciBpPU9iamVjdC5jcmVhdGUobi5k
ZWZhdWx0KTsoMCx0LmFzc2lnbikoaSx7cmVyZW5kZXI6ZnVuY3Rpb24oZSl7ZS5yZW5kZXJlci5y
ZXJlbmRlcihlKX0sZGVzdHJveTpmdW5jdGlvbihlKXtlLnJlbmRlcmVyLnJlbW92ZShlKX0saGFu
ZGxlRXZlbnQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiFlLmhhcyh0KXx8KDAsci5mbGFnZ2VkSW5z
dHJ1bWVudCkoImludGVyYWN0aW9uLiIrdCx7ZXZlbnQ6bix2aWV3OmV9LGZ1bmN0aW9uKCl7cmV0
dXJuIHIucnVuLmpvaW4oZSxlLnRyaWdnZXIsdCxuKX0pfX0pLGUuZGVmYXVsdD1pfSksZSgiZW1i
ZXItdmlld3Mvdmlld3Mvc3RhdGVzL2luX2RvbSIsWyJleHBvcnRzIiwiZW1iZXItdXRpbHMiLCJl
bWJlci1tZXRhbCIsImVtYmVyLWRlYnVnIiwiZW1iZXItdmlld3Mvdmlld3Mvc3RhdGVzL2hhc19l
bGVtZW50Il0sZnVuY3Rpb24oZSx0LG4scixpKXsidXNlIHN0cmljdCIKK3ZhciBvPU9iamVjdC5j
cmVhdGUoaS5kZWZhdWx0KTsoMCx0LmFzc2lnbikobyx7ZW50ZXI6ZnVuY3Rpb24oZSl7ZS5yZW5k
ZXJlci5yZWdpc3RlcihlKX0sZXhpdDpmdW5jdGlvbihlKXtlLnJlbmRlcmVyLnVucmVnaXN0ZXIo
ZSl9fSksZS5kZWZhdWx0PW99KSxlKCJlbWJlci12aWV3cy92aWV3cy9zdGF0ZXMvcHJlX3JlbmRl
ciIsWyJleHBvcnRzIiwiZW1iZXItdmlld3Mvdmlld3Mvc3RhdGVzL2RlZmF1bHQiXSxmdW5jdGlv
bihlLHQpeyJ1c2Ugc3RyaWN0IgorZS5kZWZhdWx0PU9iamVjdC5jcmVhdGUodC5kZWZhdWx0KX0p
LGUoImVtYmVyL2ZlYXR1cmVzIixbImV4cG9ydHMiLCJlbWJlci1lbnZpcm9ubWVudCIsImVtYmVy
LXV0aWxzIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IgorZS5FTUJFUl9HTElNTUVSX0RF
VEVDVF9CQUNLVFJBQ0tJTkdfUkVSRU5ERVI9ZS5NQU5EQVRPUllfU0VUVEVSPWUuRU1CRVJfUk9V
VElOR19ST1VURVJfU0VSVklDRT1lLkVNQkVSX0dMSU1NRVJfQUxMT1dfQkFDS1RSQUNLSU5HX1JF
UkVOREVSPWUuRU1CRVJfTUVUQUxfV0VBS01BUD1lLkVNQkVSX0lNUFJPVkVEX0lOU1RSVU1FTlRB
VElPTj1lLkVNQkVSX0xJQlJBUklFU19JU1JFR0lTVEVSRUQ9ZS5GRUFUVVJFU19TVFJJUFBFRF9U
RVNUPWUuRkVBVFVSRVM9ZS5ERUZBVUxUX0ZFQVRVUkVTPXZvaWQgMAordmFyIHI9ZS5ERUZBVUxU
X0ZFQVRVUkVTPXsiZmVhdHVyZXMtc3RyaXBwZWQtdGVzdCI6ITEsImVtYmVyLWxpYnJhcmllcy1p
c3JlZ2lzdGVyZWQiOiExLCJlbWJlci1pbXByb3ZlZC1pbnN0cnVtZW50YXRpb24iOiExLCJlbWJl
ci1tZXRhbC13ZWFrbWFwIjohMSwiZW1iZXItZ2xpbW1lci1hbGxvdy1iYWNrdHJhY2tpbmctcmVy
ZW5kZXIiOiExLCJlbWJlci1yb3V0aW5nLXJvdXRlci1zZXJ2aWNlIjohMSwibWFuZGF0b3J5LXNl
dHRlciI6ITEsImVtYmVyLWdsaW1tZXItZGV0ZWN0LWJhY2t0cmFja2luZy1yZXJlbmRlciI6ITF9
LGk9ZS5GRUFUVVJFUz0oMCxuLmFzc2lnbikocix0LkVOVi5GRUFUVVJFUykKK2UuRkVBVFVSRVNf
U1RSSVBQRURfVEVTVD1pWyJmZWF0dXJlcy1zdHJpcHBlZC10ZXN0Il0sZS5FTUJFUl9MSUJSQVJJ
RVNfSVNSRUdJU1RFUkVEPWlbImVtYmVyLWxpYnJhcmllcy1pc3JlZ2lzdGVyZWQiXSxlLkVNQkVS
X0lNUFJPVkVEX0lOU1RSVU1FTlRBVElPTj1pWyJlbWJlci1pbXByb3ZlZC1pbnN0cnVtZW50YXRp
b24iXSxlLkVNQkVSX01FVEFMX1dFQUtNQVA9aVsiZW1iZXItbWV0YWwtd2Vha21hcCJdLGUuRU1C
RVJfR0xJTU1FUl9BTExPV19CQUNLVFJBQ0tJTkdfUkVSRU5ERVI9aVsiZW1iZXItZ2xpbW1lci1h
bGxvdy1iYWNrdHJhY2tpbmctcmVyZW5kZXIiXSxlLkVNQkVSX1JPVVRJTkdfUk9VVEVSX1NFUlZJ
Q0U9aVsiZW1iZXItcm91dGluZy1yb3V0ZXItc2VydmljZSJdLGUuTUFOREFUT1JZX1NFVFRFUj1p
WyJtYW5kYXRvcnktc2V0dGVyIl0sZS5FTUJFUl9HTElNTUVSX0RFVEVDVF9CQUNLVFJBQ0tJTkdf
UkVSRU5ERVI9aVsiZW1iZXItZ2xpbW1lci1kZXRlY3QtYmFja3RyYWNraW5nLXJlcmVuZGVyIl19
KSxlKCJlbWJlci9pbmRleCIsWyJleHBvcnRzIiwicmVxdWlyZSIsImVtYmVyLWVudmlyb25tZW50
Iiwibm9kZS1tb2R1bGUiLCJlbWJlci11dGlscyIsImNvbnRhaW5lciIsImVtYmVyLW1ldGFsIiwi
ZW1iZXIvZmVhdHVyZXMiLCJlbWJlci1kZWJ1ZyIsImJhY2tidXJuZXIiLCJlbWJlci1jb25zb2xl
IiwiZW1iZXItcnVudGltZSIsImVtYmVyLWdsaW1tZXIiLCJlbWJlci92ZXJzaW9uIiwiZW1iZXIt
dmlld3MiLCJlbWJlci1yb3V0aW5nIiwiZW1iZXItYXBwbGljYXRpb24iLCJlbWJlci1leHRlbnNp
b24tc3VwcG9ydCJdLGZ1bmN0aW9uKGUsdCxuLHIsaSxvLHMsYSx1LGwsYyxwLGYsaCxkLG0sZyx5
KXsidXNlIHN0cmljdCIKK2Z1bmN0aW9uIHYoKXtyZXR1cm4gdGhpc31lLlZFUlNJT049dm9pZCAw
LHMuZGVmYXVsdC5nZXRPd25lcj1pLmdldE93bmVyLHMuZGVmYXVsdC5zZXRPd25lcj1pLnNldE93
bmVyLHMuZGVmYXVsdC5nZW5lcmF0ZUd1aWQ9aS5nZW5lcmF0ZUd1aWQscy5kZWZhdWx0LkdVSURf
S0VZPWkuR1VJRF9LRVkscy5kZWZhdWx0Lmd1aWRGb3I9aS5ndWlkRm9yLHMuZGVmYXVsdC5pbnNw
ZWN0PWkuaW5zcGVjdCxzLmRlZmF1bHQubWFrZUFycmF5PWkubWFrZUFycmF5LHMuZGVmYXVsdC5j
YW5JbnZva2U9aS5jYW5JbnZva2Uscy5kZWZhdWx0LnRyeUludm9rZT1pLnRyeUludm9rZSxzLmRl
ZmF1bHQud3JhcD1pLndyYXAscy5kZWZhdWx0LmFwcGx5U3RyPWkuYXBwbHlTdHIscy5kZWZhdWx0
LnV1aWQ9aS51dWlkLHMuZGVmYXVsdC5hc3NpZ249aS5hc3NpZ24scy5kZWZhdWx0LkNvbnRhaW5l
cj1vLkNvbnRhaW5lcixzLmRlZmF1bHQuUmVnaXN0cnk9by5SZWdpc3RyeQordmFyIGIsXz1zLmNv
bXB1dGVkCitfLmFsaWFzPXMuYWxpYXMscy5kZWZhdWx0LmNvbXB1dGVkPV8scy5kZWZhdWx0LkNv
bXB1dGVkUHJvcGVydHk9cy5Db21wdXRlZFByb3BlcnR5LHMuZGVmYXVsdC5jYWNoZUZvcj1zLmNh
Y2hlRm9yLHMuZGVmYXVsdC5hc3NlcnQ9dS5hc3NlcnQscy5kZWZhdWx0Lndhcm49dS53YXJuLHMu
ZGVmYXVsdC5kZWJ1Zz11LmRlYnVnLHMuZGVmYXVsdC5kZXByZWNhdGU9dS5kZXByZWNhdGUscy5k
ZWZhdWx0LmRlcHJlY2F0ZUZ1bmM9dS5kZXByZWNhdGVGdW5jLHMuZGVmYXVsdC5ydW5JbkRlYnVn
PXUucnVuSW5EZWJ1ZyxzLmRlZmF1bHQuRGVidWc9e3JlZ2lzdGVyRGVwcmVjYXRpb25IYW5kbGVy
OnUucmVnaXN0ZXJEZXByZWNhdGlvbkhhbmRsZXIscmVnaXN0ZXJXYXJuSGFuZGxlcjp1LnJlZ2lz
dGVyV2FybkhhbmRsZXJ9LHMuZGVmYXVsdC5tZXJnZT1zLm1lcmdlLHMuZGVmYXVsdC5pbnN0cnVt
ZW50PXMuaW5zdHJ1bWVudCxzLmRlZmF1bHQuc3Vic2NyaWJlPXMuaW5zdHJ1bWVudGF0aW9uU3Vi
c2NyaWJlLHMuZGVmYXVsdC5JbnN0cnVtZW50YXRpb249e2luc3RydW1lbnQ6cy5pbnN0cnVtZW50
LHN1YnNjcmliZTpzLmluc3RydW1lbnRhdGlvblN1YnNjcmliZSx1bnN1YnNjcmliZTpzLmluc3Ry
dW1lbnRhdGlvblVuc3Vic2NyaWJlLHJlc2V0OnMuaW5zdHJ1bWVudGF0aW9uUmVzZXR9LHMuZGVm
YXVsdC5FcnJvcj11LkVycm9yLHMuZGVmYXVsdC5NRVRBX0RFU0M9cy5NRVRBX0RFU0Mscy5kZWZh
dWx0Lm1ldGE9cy5tZXRhLHMuZGVmYXVsdC5nZXQ9cy5nZXQscy5kZWZhdWx0LmdldFdpdGhEZWZh
dWx0PXMuZ2V0V2l0aERlZmF1bHQscy5kZWZhdWx0Ll9nZXRQYXRoPXMuX2dldFBhdGgscy5kZWZh
dWx0LnNldD1zLnNldCxzLmRlZmF1bHQudHJ5U2V0PXMudHJ5U2V0LHMuZGVmYXVsdC5GRUFUVVJF
Uz1hLkZFQVRVUkVTLHMuZGVmYXVsdC5GRUFUVVJFUy5pc0VuYWJsZWQ9dS5pc0ZlYXR1cmVFbmFi
bGVkLHMuZGVmYXVsdC5fQ2FjaGU9cy5DYWNoZSxzLmRlZmF1bHQub249cy5vbixzLmRlZmF1bHQu
YWRkTGlzdGVuZXI9cy5hZGRMaXN0ZW5lcixzLmRlZmF1bHQucmVtb3ZlTGlzdGVuZXI9cy5yZW1v
dmVMaXN0ZW5lcixzLmRlZmF1bHQuX3N1c3BlbmRMaXN0ZW5lcj1zLnN1c3BlbmRMaXN0ZW5lcgor
cy5kZWZhdWx0Ll9zdXNwZW5kTGlzdGVuZXJzPXMuc3VzcGVuZExpc3RlbmVycyxzLmRlZmF1bHQu
c2VuZEV2ZW50PXMuc2VuZEV2ZW50LHMuZGVmYXVsdC5oYXNMaXN0ZW5lcnM9cy5oYXNMaXN0ZW5l
cnMscy5kZWZhdWx0LndhdGNoZWRFdmVudHM9cy53YXRjaGVkRXZlbnRzLHMuZGVmYXVsdC5saXN0
ZW5lcnNGb3I9cy5saXN0ZW5lcnNGb3Iscy5kZWZhdWx0LmFjY3VtdWxhdGVMaXN0ZW5lcnM9cy5h
Y2N1bXVsYXRlTGlzdGVuZXJzLHMuZGVmYXVsdC5pc05vbmU9cy5pc05vbmUscy5kZWZhdWx0Lmlz
RW1wdHk9cy5pc0VtcHR5LHMuZGVmYXVsdC5pc0JsYW5rPXMuaXNCbGFuayxzLmRlZmF1bHQuaXNQ
cmVzZW50PXMuaXNQcmVzZW50LHMuZGVmYXVsdC5ydW49cy5ydW4scy5kZWZhdWx0Ll9PYnNlcnZl
clNldD1zLk9ic2VydmVyU2V0LHMuZGVmYXVsdC5wcm9wZXJ0eVdpbGxDaGFuZ2U9cy5wcm9wZXJ0
eVdpbGxDaGFuZ2Uscy5kZWZhdWx0LnByb3BlcnR5RGlkQ2hhbmdlPXMucHJvcGVydHlEaWRDaGFu
Z2Uscy5kZWZhdWx0Lm92ZXJyaWRlQ2hhaW5zPXMub3ZlcnJpZGVDaGFpbnMscy5kZWZhdWx0LmJl
Z2luUHJvcGVydHlDaGFuZ2VzPXMuYmVnaW5Qcm9wZXJ0eUNoYW5nZXMscy5kZWZhdWx0LmVuZFBy
b3BlcnR5Q2hhbmdlcz1zLmVuZFByb3BlcnR5Q2hhbmdlcyxzLmRlZmF1bHQuY2hhbmdlUHJvcGVy
dGllcz1zLmNoYW5nZVByb3BlcnRpZXMscy5kZWZhdWx0LnBsYXRmb3JtPXtkZWZpbmVQcm9wZXJ0
eTohMCxoYXNQcm9wZXJ0eUFjY2Vzc29yczohMH0scy5kZWZhdWx0LmRlZmluZVByb3BlcnR5PXMu
ZGVmaW5lUHJvcGVydHkscy5kZWZhdWx0LndhdGNoS2V5PXMud2F0Y2hLZXkscy5kZWZhdWx0LnVu
d2F0Y2hLZXk9cy51bndhdGNoS2V5LHMuZGVmYXVsdC5yZW1vdmVDaGFpbldhdGNoZXI9cy5yZW1v
dmVDaGFpbldhdGNoZXIscy5kZWZhdWx0Ll9DaGFpbk5vZGU9cy5DaGFpbk5vZGUscy5kZWZhdWx0
LmZpbmlzaENoYWlucz1zLmZpbmlzaENoYWlucyxzLmRlZmF1bHQud2F0Y2hQYXRoPXMud2F0Y2hQ
YXRoLHMuZGVmYXVsdC51bndhdGNoUGF0aD1zLnVud2F0Y2hQYXRoLHMuZGVmYXVsdC53YXRjaD1z
LndhdGNoLHMuZGVmYXVsdC5pc1dhdGNoaW5nPXMuaXNXYXRjaGluZyxzLmRlZmF1bHQudW53YXRj
aD1zLnVud2F0Y2gKK3MuZGVmYXVsdC5kZXN0cm95PXMuZGVzdHJveSxzLmRlZmF1bHQubGlicmFy
aWVzPXMubGlicmFyaWVzLHMuZGVmYXVsdC5PcmRlcmVkU2V0PXMuT3JkZXJlZFNldCxzLmRlZmF1
bHQuTWFwPXMuTWFwLHMuZGVmYXVsdC5NYXBXaXRoRGVmYXVsdD1zLk1hcFdpdGhEZWZhdWx0LHMu
ZGVmYXVsdC5nZXRQcm9wZXJ0aWVzPXMuZ2V0UHJvcGVydGllcyxzLmRlZmF1bHQuc2V0UHJvcGVy
dGllcz1zLnNldFByb3BlcnRpZXMscy5kZWZhdWx0LmV4cGFuZFByb3BlcnRpZXM9cy5leHBhbmRQ
cm9wZXJ0aWVzLHMuZGVmYXVsdC5OQU1FX0tFWT1pLk5BTUVfS0VZLHMuZGVmYXVsdC5hZGRPYnNl
cnZlcj1zLmFkZE9ic2VydmVyLHMuZGVmYXVsdC5vYnNlcnZlcnNGb3I9cy5vYnNlcnZlcnNGb3Is
cy5kZWZhdWx0LnJlbW92ZU9ic2VydmVyPXMucmVtb3ZlT2JzZXJ2ZXIscy5kZWZhdWx0Ll9zdXNw
ZW5kT2JzZXJ2ZXI9cy5fc3VzcGVuZE9ic2VydmVyLHMuZGVmYXVsdC5fc3VzcGVuZE9ic2VydmVy
cz1zLl9zdXNwZW5kT2JzZXJ2ZXJzLHMuZGVmYXVsdC5yZXF1aXJlZD1zLnJlcXVpcmVkLHMuZGVm
YXVsdC5hbGlhc01ldGhvZD1zLmFsaWFzTWV0aG9kLHMuZGVmYXVsdC5vYnNlcnZlcj1zLm9ic2Vy
dmVyLHMuZGVmYXVsdC5pbW1lZGlhdGVPYnNlcnZlcj1zLl9pbW1lZGlhdGVPYnNlcnZlcixzLmRl
ZmF1bHQubWl4aW49cy5taXhpbixzLmRlZmF1bHQuTWl4aW49cy5NaXhpbixzLmRlZmF1bHQuYmlu
ZD1zLmJpbmQscy5kZWZhdWx0LkJpbmRpbmc9cy5CaW5kaW5nLHMuZGVmYXVsdC5pc0dsb2JhbFBh
dGg9cy5pc0dsb2JhbFBhdGgsT2JqZWN0LmRlZmluZVByb3BlcnR5KHMuZGVmYXVsdCwiRU5WIix7
Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uRU5WfSxlbnVtZXJhYmxlOiExfSksT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KHMuZGVmYXVsdCwibG9va3VwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uY29u
dGV4dC5sb29rdXB9LHNldDpmdW5jdGlvbihlKXtuLmNvbnRleHQubG9va3VwPWV9LGVudW1lcmFi
bGU6ITF9KSxzLmRlZmF1bHQuRVhURU5EX1BST1RPVFlQRVM9bi5FTlYuRVhURU5EX1BST1RPVFlQ
RVMsT2JqZWN0LmRlZmluZVByb3BlcnR5KHMuZGVmYXVsdCwiTE9HX1NUQUNLVFJBQ0VfT05fREVQ
UkVDQVRJT04iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5FTlYuTE9HX1NUQUNLVFJBQ0VfT05f
REVQUkVDQVRJT059LHNldDpmdW5jdGlvbihlKXtuLkVOVi5MT0dfU1RBQ0tUUkFDRV9PTl9ERVBS
RUNBVElPTj0hIWV9LGVudW1lcmFibGU6ITF9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocy5kZWZh
dWx0LCJMT0dfVkVSU0lPTiIse2dldDpmdW5jdGlvbigpe3JldHVybiBuLkVOVi5MT0dfVkVSU0lP
Tn0sc2V0OmZ1bmN0aW9uKGUpe24uRU5WLkxPR19WRVJTSU9OPSEhZX0sZW51bWVyYWJsZTohMX0p
LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLmRlZmF1bHQsIkxPR19CSU5ESU5HUyIse2dldDpmdW5j
dGlvbigpe3JldHVybiBuLkVOVi5MT0dfQklORElOR1N9LHNldDpmdW5jdGlvbihlKXtuLkVOVi5M
T0dfQklORElOR1M9ISFlfSxlbnVtZXJhYmxlOiExfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHMu
ZGVmYXVsdCwib25lcnJvciIse2dldDpzLmdldE9uZXJyb3Isc2V0OnMuc2V0T25lcnJvcixlbnVt
ZXJhYmxlOiExfSkKK09iamVjdC5kZWZpbmVQcm9wZXJ0eShzLmRlZmF1bHQsIksiLHtnZXQ6ZnVu
Y3Rpb24oKXtyZXR1cm4gdn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocy5kZWZhdWx0LCJ0ZXN0
aW5nIix7Z2V0OnUuaXNUZXN0aW5nLHNldDp1LnNldFRlc3RpbmcsZW51bWVyYWJsZTohMX0pLHMu
ZGVmYXVsdC5CYWNrYnVybmVyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4gbC5kZWZh
dWx0LmFwcGx5KHRoaXMsZSl9cmV0dXJuIGUucHJvdG90eXBlPWwuZGVmYXVsdC5wcm90b3R5cGUs
bmV3IGUoYXJndW1lbnRzKX0scy5kZWZhdWx0Ll9CYWNrYnVybmVyPWwuZGVmYXVsdCxzLmRlZmF1
bHQuTG9nZ2VyPWMuZGVmYXVsdCxzLmRlZmF1bHQuU3RyaW5nPXAuU3RyaW5nLHMuZGVmYXVsdC5P
YmplY3Q9cC5PYmplY3Qscy5kZWZhdWx0Ll9SZWdpc3RyeVByb3h5TWl4aW49cC5SZWdpc3RyeVBy
b3h5TWl4aW4scy5kZWZhdWx0Ll9Db250YWluZXJQcm94eU1peGluPXAuQ29udGFpbmVyUHJveHlN
aXhpbixzLmRlZmF1bHQuY29tcGFyZT1wLmNvbXBhcmUscy5kZWZhdWx0LmNvcHk9cC5jb3B5LHMu
ZGVmYXVsdC5pc0VxdWFsPXAuaXNFcXVhbCxzLmRlZmF1bHQuaW5qZWN0PXAuaW5qZWN0LHMuZGVm
YXVsdC5BcnJheT1wLkFycmF5LHMuZGVmYXVsdC5Db21wYXJhYmxlPXAuQ29tcGFyYWJsZSxzLmRl
ZmF1bHQuRW51bWVyYWJsZT1wLkVudW1lcmFibGUscy5kZWZhdWx0LkFycmF5UHJveHk9cC5BcnJh
eVByb3h5LHMuZGVmYXVsdC5PYmplY3RQcm94eT1wLk9iamVjdFByb3h5LHMuZGVmYXVsdC5BY3Rp
b25IYW5kbGVyPXAuQWN0aW9uSGFuZGxlcixzLmRlZmF1bHQuQ29yZU9iamVjdD1wLkNvcmVPYmpl
Y3Qscy5kZWZhdWx0Lk5hdGl2ZUFycmF5PXAuTmF0aXZlQXJyYXkscy5kZWZhdWx0LkNvcHlhYmxl
PXAuQ29weWFibGUscy5kZWZhdWx0LkZyZWV6YWJsZT1wLkZyZWV6YWJsZSxzLmRlZmF1bHQuRlJP
WkVOX0VSUk9SPXAuRlJPWkVOX0VSUk9SLHMuZGVmYXVsdC5NdXRhYmxlRW51bWVyYWJsZT1wLk11
dGFibGVFbnVtZXJhYmxlLHMuZGVmYXVsdC5NdXRhYmxlQXJyYXk9cC5NdXRhYmxlQXJyYXkscy5k
ZWZhdWx0LlRhcmdldEFjdGlvblN1cHBvcnQ9cC5UYXJnZXRBY3Rpb25TdXBwb3J0LHMuZGVmYXVs
dC5FdmVudGVkPXAuRXZlbnRlZCxzLmRlZmF1bHQuUHJvbWlzZVByb3h5TWl4aW49cC5Qcm9taXNl
UHJveHlNaXhpbixzLmRlZmF1bHQuT2JzZXJ2YWJsZT1wLk9ic2VydmFibGUKK3MuZGVmYXVsdC50
eXBlT2Y9cC50eXBlT2Yscy5kZWZhdWx0LmlzQXJyYXk9cC5pc0FycmF5LHMuZGVmYXVsdC5PYmpl
Y3Q9cC5PYmplY3Qscy5kZWZhdWx0Lm9uTG9hZD1wLm9uTG9hZCxzLmRlZmF1bHQucnVuTG9hZEhv
b2tzPXAucnVuTG9hZEhvb2tzLHMuZGVmYXVsdC5Db250cm9sbGVyPXAuQ29udHJvbGxlcixzLmRl
ZmF1bHQuQ29udHJvbGxlck1peGluPXAuQ29udHJvbGxlck1peGluLHMuZGVmYXVsdC5TZXJ2aWNl
PXAuU2VydmljZSxzLmRlZmF1bHQuX1Byb3h5TWl4aW49cC5fUHJveHlNaXhpbixzLmRlZmF1bHQu
UlNWUD1wLlJTVlAscy5kZWZhdWx0Lk5hbWVzcGFjZT1wLk5hbWVzcGFjZSxfLmVtcHR5PXAuZW1w
dHksXy5ub3RFbXB0eT1wLm5vdEVtcHR5LF8ubm9uZT1wLm5vbmUsXy5ub3Q9cC5ub3QsXy5ib29s
PXAuYm9vbCxfLm1hdGNoPXAubWF0Y2gsXy5lcXVhbD1wLmVxdWFsLF8uZ3Q9cC5ndCxfLmd0ZT1w
Lmd0ZSxfLmx0PXAubHQsXy5sdGU9cC5sdGUsXy5vbmVXYXk9cC5vbmVXYXksXy5yZWFkcz1wLm9u
ZVdheSxfLnJlYWRPbmx5PXAucmVhZE9ubHksXy5kZXByZWNhdGluZ0FsaWFzPXAuZGVwcmVjYXRp
bmdBbGlhcyxfLmFuZD1wLmFuZCxfLm9yPXAub3IsXy5hbnk9cC5hbnksXy5zdW09cC5zdW0KK18u
bWluPXAubWluLF8ubWF4PXAubWF4LF8ubWFwPXAubWFwLF8uc29ydD1wLnNvcnQsXy5zZXREaWZm
PXAuc2V0RGlmZixfLm1hcEJ5PXAubWFwQnksXy5maWx0ZXI9cC5maWx0ZXIsXy5maWx0ZXJCeT1w
LmZpbHRlckJ5LF8udW5pcT1wLnVuaXEsXy51bmlxQnk9cC51bmlxQnksXy51bmlvbj1wLnVuaW9u
LF8uaW50ZXJzZWN0PXAuaW50ZXJzZWN0LF8uY29sbGVjdD1wLmNvbGxlY3QsT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KHMuZGVmYXVsdCwiU1RSSU5HUyIse2NvbmZpZ3VyYWJsZTohMSxnZXQ6cC5nZXRT
dHJpbmdzLHNldDpwLnNldFN0cmluZ3N9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocy5kZWZhdWx0
LCJCT09URUQiLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMSxnZXQ6cC5pc05hbWVzcGFj
ZVNlYXJjaERpc2FibGVkLHNldDpwLnNldE5hbWVzcGFjZVNlYXJjaERpc2FibGVkfSkscy5kZWZh
dWx0LkNvbXBvbmVudD1mLkNvbXBvbmVudCxmLkhlbHBlci5oZWxwZXI9Zi5oZWxwZXIscy5kZWZh
dWx0LkhlbHBlcj1mLkhlbHBlcixzLmRlZmF1bHQuQ2hlY2tib3g9Zi5DaGVja2JveCxzLmRlZmF1
bHQuVGV4dEZpZWxkPWYuVGV4dEZpZWxkLHMuZGVmYXVsdC5UZXh0QXJlYT1mLlRleHRBcmVhLHMu
ZGVmYXVsdC5MaW5rQ29tcG9uZW50PWYuTGlua0NvbXBvbmVudCxuLkVOVi5FWFRFTkRfUFJPVE9U
WVBFUy5TdHJpbmcmJihTdHJpbmcucHJvdG90eXBlLmh0bWxTYWZlPWZ1bmN0aW9uKCl7cmV0dXJu
KDAsZi5odG1sU2FmZSkodGhpcyl9KQordmFyIHc9cy5kZWZhdWx0LkhhbmRsZWJhcnM9cy5kZWZh
dWx0LkhhbmRsZWJhcnN8fHt9LEU9cy5kZWZhdWx0LkhUTUxCYXJzPXMuZGVmYXVsdC5IVE1MQmFy
c3x8e30seD13LlV0aWxzPXcuVXRpbHN8fHt9CitPYmplY3QuZGVmaW5lUHJvcGVydHkodywiU2Fm
ZVN0cmluZyIse2dldDpmLl9nZXRTYWZlU3RyaW5nfSksRS50ZW1wbGF0ZT13LnRlbXBsYXRlPWYu
dGVtcGxhdGUseC5lc2NhcGVFeHByZXNzaW9uPWYuZXNjYXBlRXhwcmVzc2lvbixwLlN0cmluZy5o
dG1sU2FmZT1mLmh0bWxTYWZlLHAuU3RyaW5nLmlzSFRNTFNhZmU9Zi5pc0hUTUxTYWZlLE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShzLmRlZmF1bHQsIlRFTVBMQVRFUyIse2dldDpmLmdldFRlbXBsYXRl
cyxzZXQ6Zi5zZXRUZW1wbGF0ZXMsY29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITF9KSxlLlZF
UlNJT049aC5kZWZhdWx0LHMuZGVmYXVsdC5WRVJTSU9OPWguZGVmYXVsdCxzLmxpYnJhcmllcy5y
ZWdpc3RlckNvcmVMaWJyYXJ5KCJFbWJlciIsaC5kZWZhdWx0KSxzLmRlZmF1bHQuJD1kLmpRdWVy
eSxzLmRlZmF1bHQuVmlld1RhcmdldEFjdGlvblN1cHBvcnQ9ZC5WaWV3VGFyZ2V0QWN0aW9uU3Vw
cG9ydCxzLmRlZmF1bHQuVmlld1V0aWxzPXtpc1NpbXBsZUNsaWNrOmQuaXNTaW1wbGVDbGljayxn
ZXRWaWV3RWxlbWVudDpkLmdldFZpZXdFbGVtZW50LGdldFZpZXdCb3VuZHM6ZC5nZXRWaWV3Qm91
bmRzLGdldFZpZXdDbGllbnRSZWN0czpkLmdldFZpZXdDbGllbnRSZWN0cyxnZXRWaWV3Qm91bmRp
bmdDbGllbnRSZWN0OmQuZ2V0Vmlld0JvdW5kaW5nQ2xpZW50UmVjdCxnZXRSb290Vmlld3M6ZC5n
ZXRSb290Vmlld3MsZ2V0Q2hpbGRWaWV3czpkLmdldENoaWxkVmlld3N9LHMuZGVmYXVsdC5UZXh0
U3VwcG9ydD1kLlRleHRTdXBwb3J0LHMuZGVmYXVsdC5Db21wb25lbnRMb29rdXA9ZC5Db21wb25l
bnRMb29rdXAscy5kZWZhdWx0LkV2ZW50RGlzcGF0Y2hlcj1kLkV2ZW50RGlzcGF0Y2hlcixzLmRl
ZmF1bHQuTG9jYXRpb249bS5Mb2NhdGlvbixzLmRlZmF1bHQuQXV0b0xvY2F0aW9uPW0uQXV0b0xv
Y2F0aW9uLHMuZGVmYXVsdC5IYXNoTG9jYXRpb249bS5IYXNoTG9jYXRpb24scy5kZWZhdWx0Lkhp
c3RvcnlMb2NhdGlvbj1tLkhpc3RvcnlMb2NhdGlvbixzLmRlZmF1bHQuTm9uZUxvY2F0aW9uPW0u
Tm9uZUxvY2F0aW9uLHMuZGVmYXVsdC5jb250cm9sbGVyRm9yPW0uY29udHJvbGxlckZvcixzLmRl
ZmF1bHQuZ2VuZXJhdGVDb250cm9sbGVyRmFjdG9yeT1tLmdlbmVyYXRlQ29udHJvbGxlckZhY3Rv
cnkscy5kZWZhdWx0LmdlbmVyYXRlQ29udHJvbGxlcj1tLmdlbmVyYXRlQ29udHJvbGxlcixzLmRl
ZmF1bHQuUm91dGVyRFNMPW0uUm91dGVyRFNMLHMuZGVmYXVsdC5Sb3V0ZXI9bS5Sb3V0ZXIscy5k
ZWZhdWx0LlJvdXRlPW0uUm91dGUscy5kZWZhdWx0LkFwcGxpY2F0aW9uPWcuQXBwbGljYXRpb24s
cy5kZWZhdWx0LkFwcGxpY2F0aW9uSW5zdGFuY2U9Zy5BcHBsaWNhdGlvbkluc3RhbmNlLHMuZGVm
YXVsdC5FbmdpbmU9Zy5FbmdpbmUscy5kZWZhdWx0LkVuZ2luZUluc3RhbmNlPWcuRW5naW5lSW5z
dGFuY2UKK3MuZGVmYXVsdC5EZWZhdWx0UmVzb2x2ZXI9cy5kZWZhdWx0LlJlc29sdmVyPWcuUmVz
b2x2ZXIsKDAscC5ydW5Mb2FkSG9va3MpKCJFbWJlci5BcHBsaWNhdGlvbiIsZy5BcHBsaWNhdGlv
bikscy5kZWZhdWx0LkRhdGFBZGFwdGVyPXkuRGF0YUFkYXB0ZXIscy5kZWZhdWx0LkNvbnRhaW5l
ckRlYnVnQWRhcHRlcj15LkNvbnRhaW5lckRlYnVnQWRhcHRlciwoMCx0LmhhcykoImVtYmVyLXRl
bXBsYXRlLWNvbXBpbGVyIikmJigwLHQuZGVmYXVsdCkoImVtYmVyLXRlbXBsYXRlLWNvbXBpbGVy
IiksKDAsdC5oYXMpKCJlbWJlci10ZXN0aW5nIikmJihiPSgwLHQuZGVmYXVsdCkoImVtYmVyLXRl
c3RpbmciKSxzLmRlZmF1bHQuVGVzdD1iLlRlc3Qscy5kZWZhdWx0LlRlc3QuQWRhcHRlcj1iLkFk
YXB0ZXIscy5kZWZhdWx0LlRlc3QuUVVuaXRBZGFwdGVyPWIuUVVuaXRBZGFwdGVyLHMuZGVmYXVs
dC5zZXR1cEZvclRlc3Rpbmc9Yi5zZXR1cEZvclRlc3RpbmcpLCgwLHAucnVuTG9hZEhvb2tzKSgi
RW1iZXIiKSxlLmRlZmF1bHQ9cy5kZWZhdWx0LHIuSVNfTk9ERT9yLm1vZHVsZS5leHBvcnRzPXMu
ZGVmYXVsdDpuLmNvbnRleHQuZXhwb3J0cy5FbWJlcj1uLmNvbnRleHQuZXhwb3J0cy5FbT1zLmRl
ZmF1bHR9KSxlKCJlbWJlci92ZXJzaW9uIixbImV4cG9ydHMiXSxmdW5jdGlvbihlKXsidXNlIHN0
cmljdCIKK2UuZGVmYXVsdD0iMi4xNC4xIn0pLGUoIm5vZGUtbW9kdWxlIixbImV4cG9ydHMiXSxm
dW5jdGlvbihlKXt2YXIgdD0ib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmImZ1bmN0aW9uIj09dHlw
ZW9mIG1vZHVsZS5yZXF1aXJlCit0PyhlLnJlcXVpcmU9bW9kdWxlLnJlcXVpcmUsZS5tb2R1bGU9
bW9kdWxlLGUuSVNfTk9ERT10KTooZS5yZXF1aXJlPW51bGwsZS5tb2R1bGU9bnVsbCxlLklTX05P
REU9dCl9KSxlKCJyb3V0ZS1yZWNvZ25pemVyIixbImV4cG9ydHMiXSxmdW5jdGlvbihlKXsidXNl
IHN0cmljdCIKK2Z1bmN0aW9uIHQoKXt2YXIgZT1nKG51bGwpCityZXR1cm4gZS5fXz12b2lkIDAs
ZGVsZXRlIGUuX18sZX1mdW5jdGlvbiBuKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24oaSxvKXt2YXIg
cz1lK2kKK2lmKCFvKXJldHVybiBuZXcgeShzLHQscikKK28obihzLHQscikpfX1mdW5jdGlvbiBy
KGUsdCxuKXt2YXIgcixpPTAKK2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspaSs9ZVtyXS5wYXRoLmxl
bmd0aAordD10LnN1YnN0cihpKQordmFyIG89e3BhdGg6dCxoYW5kbGVyOm59CitlLnB1c2gobyl9
ZnVuY3Rpb24gaShlLHQsbixvKXt2YXIgcyxhLHUsbCxjPXQucm91dGVzLHA9T2JqZWN0LmtleXMo
YykKK2ZvcihzPTA7czxwLmxlbmd0aDtzKyspYT1wW3NdLHU9ZS5zbGljZSgpLHIodSxhLGNbYV0p
LGw9dC5jaGlsZHJlblthXSxsP2kodSxsLG4sbyk6bi5jYWxsKG8sdSl9ZnVuY3Rpb24gbyhlKXty
ZXR1cm4gZS5zcGxpdCgiLyIpLm1hcChzKS5qb2luKCIvIil9ZnVuY3Rpb24gcyhlKXtyZXR1cm4g
ZS5sZW5ndGg8M3x8LTE9PT1lLmluZGV4T2YoIiUiKT9lOmRlY29kZVVSSUNvbXBvbmVudChlKS5y
ZXBsYWNlKGIsZW5jb2RlVVJJQ29tcG9uZW50KX1mdW5jdGlvbiBhKGUpe3JldHVybiBlbmNvZGVV
UklDb21wb25lbnQoZSkucmVwbGFjZShfLGRlY29kZVVSSUNvbXBvbmVudCl9ZnVuY3Rpb24gdShl
LHQpe2lmKCJvYmplY3QiIT10eXBlb2YgZXx8bnVsbD09PWUpdGhyb3cgbmV3IEVycm9yKCJZb3Ug
bXVzdCBwYXNzIGFuIG9iamVjdCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGBnZW5lcmF0ZWAu
IikKK2lmKCF4LmNhbGwoZSx0KSl0aHJvdyBuZXcgRXJyb3IoIllvdSBtdXN0IHByb3ZpZGUgcGFy
YW0gYCIrdCsiYCB0byBgZ2VuZXJhdGVgLiIpCit2YXIgbj1lW3RdLHI9InN0cmluZyI9PXR5cGVv
ZiBuP246IiIrbgoraWYoMD09PXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiWW91IG11c3QgcHJv
dmlkZSBhIHBhcmFtIGAiK3QrImAuIikKK3JldHVybiByfWZ1bmN0aW9uIGwoZSx0LG4pe3QubGVu
Z3RoPjAmJjQ3PT09dC5jaGFyQ29kZUF0KDApJiYodD10LnN1YnN0cigxKSkKK3ZhciByLGksbyxh
LHU9dC5zcGxpdCgiLyIpLGw9dm9pZCAwLGM9dm9pZCAwCitmb3Iocj0wO3I8dS5sZW5ndGg7cisr
KWk9dVtyXSxvPTAsYT0wLGE9IiI9PT1pPzQ6NTg9PT1pLmNoYXJDb2RlQXQoMCk/MTo0Mj09PWku
Y2hhckNvZGVBdCgwKT8yOjAsbz0yPDxhLDEyJm8mJihpPWkuc2xpY2UoMSksbD1sfHxbXSxsLnB1
c2goaSksYz1jfHxbXSxjLnB1c2goMCE9KDQmbykpKSwxNCZvJiZuW2FdKyssZS5wdXNoKHt0eXBl
OmEsdmFsdWU6cyhpKX0pCityZXR1cm57bmFtZXM6bHx8UyxzaG91bGREZWNvZGVzOmN8fFN9fWZ1
bmN0aW9uIGMoZSx0LG4pe3JldHVybiBlLmNoYXI9PT10JiZlLm5lZ2F0ZT09PW59ZnVuY3Rpb24g
cChlLHQpe3JldHVybiBlLm5lZ2F0ZT9lLmNoYXIhPT10JiYtMSE9PWUuY2hhcjplLmNoYXI9PT10
fHwtMT09PWUuY2hhcn1mdW5jdGlvbiBmKGUpe3JldHVybiBlLnNvcnQoZnVuY3Rpb24oZSx0KXt2
YXIgbj1lLnR5cGVzfHxbMCwwLDBdLHI9blswXSxpPW5bMV0sbz1uWzJdLHM9dC50eXBlc3x8WzAs
MCwwXSxhPXNbMF0sdT1zWzFdLGw9c1syXQoraWYobyE9PWwpcmV0dXJuIG8tbAoraWYobyl7aWYo
ciE9PWEpcmV0dXJuIGEtcgoraWYoaSE9PXUpcmV0dXJuIHUtaX1yZXR1cm4gaSE9PXU/aS11OnIh
PT1hP2EtcjowfSl9ZnVuY3Rpb24gaChlLHQpe3ZhciBuLHIsaSxvPVtdCitmb3Iobj0wLHI9ZS5s
ZW5ndGg7bjxyO24rKylpPWVbbl0sbz1vLmNvbmNhdChpLm1hdGNoKHQpKQorcmV0dXJuIG99ZnVu
Y3Rpb24gZChlLHQsbil7dmFyIHIsaSxvLHMsYSx1LGwsYyxwLGY9ZS5oYW5kbGVycyxoPWUucmVn
ZXgoKQoraWYoIWh8fCFmKXRocm93IG5ldyBFcnJvcigic3RhdGUgbm90IGluaXRpYWxpemVkIikK
K3ZhciBkPXQubWF0Y2goaCksbT0xLGc9bmV3IGsobikKK2ZvcihnLmxlbmd0aD1mLmxlbmd0aCxy
PTA7cjxmLmxlbmd0aDtyKyspe2lmKGk9ZltyXSxvPWkubmFtZXMscz1pLnNob3VsZERlY29kZXMs
YT1ULHU9ITEsbyE9PVMmJnMhPT1TKWZvcihsPTA7bDxvLmxlbmd0aDtsKyspdT0hMCxjPW9bbF0s
cD1kJiZkW20rK10sYT09PVQmJihhPXt9KSxOLkVOQ09ERV9BTkRfREVDT0RFX1BBVEhfU0VHTUVO
VFMmJnNbbF0/YVtjXT1wJiZkZWNvZGVVUklDb21wb25lbnQocCk6YVtjXT1wCitnW3JdPXtoYW5k
bGVyOmkuaGFuZGxlcixwYXJhbXM6YSxpc0R5bmFtaWM6dX19cmV0dXJuIGd9ZnVuY3Rpb24gbShl
KXtlPWUucmVwbGFjZSgvXCsvZ20sIiUyMCIpCit2YXIgdAordHJ5e3Q9ZGVjb2RlVVJJQ29tcG9u
ZW50KGUpfWNhdGNoKGUpe3Q9IiJ9cmV0dXJuIHR9dmFyIGc9T2JqZWN0LmNyZWF0ZSx5PWZ1bmN0
aW9uKGUsdCxuKXt0aGlzLnBhdGg9ZSx0aGlzLm1hdGNoZXI9dCx0aGlzLmRlbGVnYXRlPW59Cit5
LnByb3RvdHlwZS50bz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZGVsZWdhdGUKK2lmKG4mJm4u
d2lsbEFkZFJvdXRlJiYoZT1uLndpbGxBZGRSb3V0ZSh0aGlzLm1hdGNoZXIudGFyZ2V0LGUpKSx0
aGlzLm1hdGNoZXIuYWRkKHRoaXMucGF0aCxlKSx0KXtpZigwPT09dC5sZW5ndGgpdGhyb3cgbmV3
IEVycm9yKCJZb3UgbXVzdCBoYXZlIGFuIGFyZ3VtZW50IGluIHRoZSBmdW5jdGlvbiBwYXNzZWQg
dG8gYHRvYCIpCit0aGlzLm1hdGNoZXIuYWRkQ2hpbGQodGhpcy5wYXRoLGUsdCx0aGlzLmRlbGVn
YXRlKX19Cit2YXIgdj1mdW5jdGlvbihlKXt0aGlzLnJvdXRlcz10KCksdGhpcy5jaGlsZHJlbj10
KCksdGhpcy50YXJnZXQ9ZX0KK3YucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlLHQpe3RoaXMucm91
dGVzW2VdPXR9LHYucHJvdG90eXBlLmFkZENoaWxkPWZ1bmN0aW9uKGUsdCxyLGkpe3ZhciBvPW5l
dyB2KHQpCit0aGlzLmNoaWxkcmVuW2VdPW8KK3ZhciBzPW4oZSxvLGkpCitpJiZpLmNvbnRleHRF
bnRlcmVkJiZpLmNvbnRleHRFbnRlcmVkKHQscykscihzKX0KK3ZhciBiPS8lfFwvL2csXz0vJSg/
OjIoPzo0fDZ8QnxDKXwzKD86QnxEfEEpfDQwKS9nLHc9LyhcL3xcLnxcKnxcK3xcP3xcfHxcKHxc
KXxcW3xcXXxce3xcfXxcXCkvZyxFPUFycmF5LmlzQXJyYXkseD1PYmplY3QucHJvdG90eXBlLmhh
c093blByb3BlcnR5LEM9W10KK0NbMF09ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk9dCxvPWUudmFs
dWUKK2ZvcihuPTA7bjxvLmxlbmd0aDtuKyspcj1vLmNoYXJDb2RlQXQobiksaT1pLnB1dChyLCEx
LCExKQorcmV0dXJuIGl9LENbMV09ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5wdXQoNDcsITAsITAp
fSxDWzJdPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQucHV0KC0xLCExLCEwKX0sQ1s0XT1mdW5jdGlv
bihlLHQpe3JldHVybiB0fQordmFyIE89W10KK09bMF09ZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFs
dWUucmVwbGFjZSh3LCJcXCQxIil9LE9bMV09ZnVuY3Rpb24oKXtyZXR1cm4iKFteL10rKSJ9LE9b
Ml09ZnVuY3Rpb24oKXtyZXR1cm4iKC4rKSJ9LE9bNF09ZnVuY3Rpb24oKXtyZXR1cm4iIn0KK3Zh
ciBBPVtdCitBWzBdPWZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlfSxBWzFdPWZ1bmN0aW9uKGUs
dCl7dmFyIG49dSh0LGUudmFsdWUpCityZXR1cm4gTi5FTkNPREVfQU5EX0RFQ09ERV9QQVRIX1NF
R01FTlRTP2Eobik6bn0sQVsyXT1mdW5jdGlvbihlLHQpe3JldHVybiB1KHQsZS52YWx1ZSl9LEFb
NF09ZnVuY3Rpb24oKXtyZXR1cm4iIn0KK3ZhciBUPU9iamVjdC5mcmVlemUoe30pLFM9T2JqZWN0
LmZyZWV6ZShbXSksUj1mdW5jdGlvbihlLHQsbixyLGkpe3RoaXMuc3RhdGVzPWUsdGhpcy5pZD10
LHRoaXMuY2hhcj1uLHRoaXMubmVnYXRlPXIsdGhpcy5uZXh0U3RhdGVzPWk/dDpudWxsLHRoaXMu
cGF0dGVybj0iIix0aGlzLl9yZWdleD12b2lkIDAsdGhpcy5oYW5kbGVycz12b2lkIDAsdGhpcy50
eXBlcz12b2lkIDB9CitSLnByb3RvdHlwZS5yZWdleD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9y
ZWdleHx8KHRoaXMuX3JlZ2V4PW5ldyBSZWdFeHAodGhpcy5wYXR0ZXJuKSksdGhpcy5fcmVnZXh9
LFIucHJvdG90eXBlLmdldD1mdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvPXRoaXMscz10aGlzLm5l
eHRTdGF0ZXMKK2lmKG51bGwhPT1zKWlmKEUocykpe2ZvcihuPTA7bjxzLmxlbmd0aDtuKyspaWYo
cj1vLnN0YXRlc1tzW25dXSxjKHIsZSx0KSlyZXR1cm4gcn1lbHNlIGlmKGk9dGhpcy5zdGF0ZXNb
c10sYyhpLGUsdCkpcmV0dXJuIGl9LFIucHJvdG90eXBlLnB1dD1mdW5jdGlvbihlLHQsbil7dmFy
IHIKK2lmKHI9dGhpcy5nZXQoZSx0KSlyZXR1cm4gcgordmFyIGk9dGhpcy5zdGF0ZXMKK3JldHVy
biByPW5ldyBSKGksaS5sZW5ndGgsZSx0LG4pLGlbaS5sZW5ndGhdPXIsbnVsbD09dGhpcy5uZXh0
U3RhdGVzP3RoaXMubmV4dFN0YXRlcz1yLmlkOkUodGhpcy5uZXh0U3RhdGVzKT90aGlzLm5leHRT
dGF0ZXMucHVzaChyLmlkKTp0aGlzLm5leHRTdGF0ZXM9W3RoaXMubmV4dFN0YXRlcyxyLmlkXSxy
fSxSLnByb3RvdHlwZS5tYXRjaD1mdW5jdGlvbihlKXt2YXIgdCxuLHIsaT10aGlzLG89dGhpcy5u
ZXh0U3RhdGVzCitpZighbylyZXR1cm5bXQordmFyIHM9W10KK2lmKEUobykpZm9yKHQ9MDt0PG8u
bGVuZ3RoO3QrKyluPWkuc3RhdGVzW29bdF1dLHAobixlKSYmcy5wdXNoKG4pCitlbHNlIHI9dGhp
cy5zdGF0ZXNbb10scChyLGUpJiZzLnB1c2gocikKK3JldHVybiBzfQordmFyIGs9ZnVuY3Rpb24o
ZSl7dGhpcy5sZW5ndGg9MCx0aGlzLnF1ZXJ5UGFyYW1zPWV8fHt9fQoray5wcm90b3R5cGUuc3Bs
aWNlPUFycmF5LnByb3RvdHlwZS5zcGxpY2Usay5wcm90b3R5cGUuc2xpY2U9QXJyYXkucHJvdG90
eXBlLnNsaWNlLGsucHJvdG90eXBlLnB1c2g9QXJyYXkucHJvdG90eXBlLnB1c2gKK3ZhciBOPWZ1
bmN0aW9uKCl7dGhpcy5uYW1lcz10KCkKK3ZhciBlPVtdLG49bmV3IFIoZSwwLC0xLCEwLCExKQor
ZVswXT1uLHRoaXMuc3RhdGVzPWUsdGhpcy5yb290U3RhdGU9bn0KK04ucHJvdG90eXBlLmFkZD1m
dW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvLHMsYSx1PXRoaXMucm9vdFN0YXRlLGM9Il4iLHA9WzAs
MCwwXSxmPW5ldyBBcnJheShlLmxlbmd0aCksaD1bXSxkPSEwLG09MAorZm9yKG49MDtuPGUubGVu
Z3RoO24rKyl7Zm9yKHI9ZVtuXSxpPWwoaCxyLnBhdGgscCksbz1pLm5hbWVzLHM9aS5zaG91bGRE
ZWNvZGVzO208aC5sZW5ndGg7bSsrKWE9aFttXSw0IT09YS50eXBlJiYoZD0hMSx1PXUucHV0KDQ3
LCExLCExKSxjKz0iLyIsdT1DW2EudHlwZV0oYSx1KSxjKz1PW2EudHlwZV0oYSkpCitmW25dPXto
YW5kbGVyOnIuaGFuZGxlcixuYW1lczpvLHNob3VsZERlY29kZXM6c319ZCYmKHU9dS5wdXQoNDcs
ITEsITEpLGMrPSIvIiksdS5oYW5kbGVycz1mLHUucGF0dGVybj1jKyIkIix1LnR5cGVzPXAKK3Zh
ciBnCisib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPT10JiZ0LmFzJiYoZz10LmFzKSxnJiYodGhp
cy5uYW1lc1tnXT17c2VnbWVudHM6aCxoYW5kbGVyczpmfSl9LE4ucHJvdG90eXBlLmhhbmRsZXJz
Rm9yPWZ1bmN0aW9uKGUpe3ZhciB0LG4scj10aGlzLm5hbWVzW2VdCitpZighcil0aHJvdyBuZXcg
RXJyb3IoIlRoZXJlIGlzIG5vIHJvdXRlIG5hbWVkICIrZSkKK3ZhciBpPW5ldyBBcnJheShyLmhh
bmRsZXJzLmxlbmd0aCkKK2Zvcih0PTA7dDxyLmhhbmRsZXJzLmxlbmd0aDt0Kyspbj1yLmhhbmRs
ZXJzW3RdLGlbdF09bgorcmV0dXJuIGl9LE4ucHJvdG90eXBlLmhhc1JvdXRlPWZ1bmN0aW9uKGUp
e3JldHVybiEhdGhpcy5uYW1lc1tlXX0sTi5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24oZSx0
KXt2YXIgbixyLGk9dGhpcy5uYW1lc1tlXSxvPSIiCitpZighaSl0aHJvdyBuZXcgRXJyb3IoIlRo
ZXJlIGlzIG5vIHJvdXRlIG5hbWVkICIrZSkKK3ZhciBzPWkuc2VnbWVudHMKK2ZvcihuPTA7bjxz
Lmxlbmd0aDtuKyspcj1zW25dLDQhPT1yLnR5cGUmJihvKz0iLyIsbys9QVtyLnR5cGVdKHIsdCkp
CityZXR1cm4iLyIhPT1vLmNoYXJBdCgwKSYmKG89Ii8iK28pLHQmJnQucXVlcnlQYXJhbXMmJihv
Kz10aGlzLmdlbmVyYXRlUXVlcnlTdHJpbmcodC5xdWVyeVBhcmFtcykpLG99LE4ucHJvdG90eXBl
LmdlbmVyYXRlUXVlcnlTdHJpbmc9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbyxzLGE9W10sdT1P
YmplY3Qua2V5cyhlKQorZm9yKHUuc29ydCgpLHQ9MDt0PHUubGVuZ3RoO3QrKylpZihuPXVbdF0s
bnVsbCE9KHI9ZVtuXSkpaWYoaT1lbmNvZGVVUklDb21wb25lbnQobiksRShyKSlmb3Iobz0wO288
ci5sZW5ndGg7bysrKXM9bisiW109IitlbmNvZGVVUklDb21wb25lbnQocltvXSksYS5wdXNoKHMp
CitlbHNlIGkrPSI9IitlbmNvZGVVUklDb21wb25lbnQociksYS5wdXNoKGkpCityZXR1cm4gMD09
PWEubGVuZ3RoPyIiOiI/IithLmpvaW4oIiYiKX0sTi5wcm90b3R5cGUucGFyc2VRdWVyeVN0cmlu
Zz1mdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLHMsYT1lLnNwbGl0KCImIiksdT17fQorZm9yKHQ9
MDt0PGEubGVuZ3RoO3QrKyluPWFbdF0uc3BsaXQoIj0iKSxyPW0oblswXSksaT1yLmxlbmd0aCxv
PSExLHM9dm9pZCAwLDE9PT1uLmxlbmd0aD9zPSJ0cnVlIjooaT4yJiYiW10iPT09ci5zbGljZShp
LTIpJiYobz0hMCxyPXIuc2xpY2UoMCxpLTIpLHVbcl18fCh1W3JdPVtdKSkscz1uWzFdP20oblsx
XSk6IiIpLG8/dVtyXS5wdXNoKHMpOnVbcl09cworcmV0dXJuIHV9LE4ucHJvdG90eXBlLnJlY29n
bml6ZT1mdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxzPVt0aGlzLnJvb3RTdGF0ZV0sYT17fSx1PSEx
LGw9ZS5pbmRleE9mKCIjIik7LTEhPT1sJiYoZT1lLnN1YnN0cigwLGwpKQordmFyIGM9ZS5pbmRl
eE9mKCI/Iik7LTEhPT1jJiYobj1lLnN1YnN0cihjKzEsZS5sZW5ndGgpLGU9ZS5zdWJzdHIoMCxj
KSxhPXRoaXMucGFyc2VRdWVyeVN0cmluZyhuKSksIi8iIT09ZS5jaGFyQXQoMCkmJihlPSIvIitl
KQordmFyIHA9ZQorTi5FTkNPREVfQU5EX0RFQ09ERV9QQVRIX1NFR01FTlRTP2U9byhlKTooZT1k
ZWNvZGVVUkkoZSkscD1kZWNvZGVVUkkocCkpCit2YXIgbT1lLmxlbmd0aAorZm9yKG0+MSYmIi8i
PT09ZS5jaGFyQXQobS0xKSYmKGU9ZS5zdWJzdHIoMCxtLTEpLHA9cC5zdWJzdHIoMCxwLmxlbmd0
aC0xKSx1PSEwKSxyPTA7cjxlLmxlbmd0aCYmKHM9aChzLGUuY2hhckNvZGVBdChyKSkscy5sZW5n
dGgpO3IrKyk7dmFyIGc9W10KK2ZvcihpPTA7aTxzLmxlbmd0aDtpKyspc1tpXS5oYW5kbGVycyYm
Zy5wdXNoKHNbaV0pCitzPWYoZykKK3ZhciB5PWdbMF0KK3JldHVybiB5JiZ5LmhhbmRsZXJzJiYo
dSYmeS5wYXR0ZXJuJiYiKC4rKSQiPT09eS5wYXR0ZXJuLnNsaWNlKC01KSYmKHArPSIvIiksdD1k
KHkscCxhKSksdH0sTi5WRVJTSU9OPSIwLjMuMyIsTi5FTkNPREVfQU5EX0RFQ09ERV9QQVRIX1NF
R01FTlRTPSEwLE4uTm9ybWFsaXplcj17bm9ybWFsaXplU2VnbWVudDpzLG5vcm1hbGl6ZVBhdGg6
byxlbmNvZGVQYXRoU2VnbWVudDphfSxOLnByb3RvdHlwZS5tYXA9ZnVuY3Rpb24oZSx0KXt2YXIg
cj1uZXcgdgorZShuKCIiLHIsdGhpcy5kZWxlZ2F0ZSkpLGkoW10scixmdW5jdGlvbihlKXt0P3Qo
dGhpcyxlKTp0aGlzLmFkZChlKX0sdGhpcyl9LGUuZGVmYXVsdD1OfSksZSgicm91dGVyIixbImV4
cG9ydHMiLCJyb3V0ZS1yZWNvZ25pemVyIiwicnN2cCJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0
cmljdCIKK2Z1bmN0aW9uIHIoZSl7cmV0dXJuKCJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9PWV8
fCJmdW5jdGlvbiI9PXR5cGVvZiBlKSYmImZ1bmN0aW9uIj09dHlwZW9mIGUudGhlbn1mdW5jdGlv
biBpKGUsdCl7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKGVbbl09dFtuXSl9
ZnVuY3Rpb24gbyhlKXt2YXIgdCxuLHI9ZSYmZS5sZW5ndGgKK3JldHVybiByJiZyPjAmJmVbci0x
XSYmZVtyLTFdLmhhc093blByb3BlcnR5KCJxdWVyeVBhcmFtcyIpPyhuPWVbci0xXS5xdWVyeVBh
cmFtcyx0PUguY2FsbChlLDAsci0xKSxbdCxuXSk6W2UsbnVsbF19ZnVuY3Rpb24gcyhlKXt2YXIg
dCxuCitmb3IodmFyIHIgaW4gZSlpZigibnVtYmVyIj09dHlwZW9mIGVbcl0pZVtyXT0iIitlW3Jd
CitlbHNlIGlmKFYoZVtyXSkpZm9yKHQ9MCxuPWVbcl0ubGVuZ3RoO3Q8bjt0KyspZVtyXVt0XT0i
IitlW3JdW3RdfWZ1bmN0aW9uIGEoZSx0LG4pe2UubG9nJiYoMz09PWFyZ3VtZW50cy5sZW5ndGg/
ZS5sb2coIlRyYW5zaXRpb24gIyIrdCsiOiAiK24pOihuPXQsZS5sb2cobikpKX1mdW5jdGlvbiB1
KGUsdCl7dmFyIG49YXJndW1lbnRzCityZXR1cm4gZnVuY3Rpb24ocil7dmFyIGk9SC5jYWxsKG4s
MikKK3JldHVybiBpLnB1c2gociksdC5hcHBseShlLGkpfX1mdW5jdGlvbiBsKGUpe3JldHVybiJz
dHJpbmciPT10eXBlb2YgZXx8ZSBpbnN0YW5jZW9mIFN0cmluZ3x8Im51bWJlciI9PXR5cGVvZiBl
fHxlIGluc3RhbmNlb2YgTnVtYmVyfWZ1bmN0aW9uIGMoZSx0KXt2YXIgbixyCitmb3Iobj0wLHI9
ZS5sZW5ndGg7bjxyJiYhMSE9PXQoZVtuXSk7bisrKTt9ZnVuY3Rpb24gcChlLHQsbixyKXtmdW5j
dGlvbiBpKGUsdCxuKXtuLmV2ZW50c1tlXS5hcHBseShuLHQpfWlmKGUudHJpZ2dlckV2ZW50KXJl
dHVybiB2b2lkIGUudHJpZ2dlckV2ZW50KHQsbixyKQordmFyIG8scyxhLGw9ci5zaGlmdCgpCitp
ZighdCl7aWYobilyZXR1cm4KK3Rocm93IG5ldyBFcnJvcigiQ291bGQgbm90IHRyaWdnZXIgZXZl
bnQgJyIrbCsiJy4gVGhlcmUgYXJlIG5vIGFjdGl2ZSBoYW5kbGVycyIpfXZhciBjPSExCitmb3Io
bz10Lmxlbmd0aC0xO28+PTA7by0tKWlmKHM9dFtvXSxhPXMuaGFuZGxlcil7aWYoYS5ldmVudHMm
JmEuZXZlbnRzW2xdKXtpZighMCE9PWEuZXZlbnRzW2xdLmFwcGx5KGEscikpcmV0dXJuCitjPSEw
fX1lbHNlIHMuaGFuZGxlclByb21pc2UudGhlbih1KG51bGwsaSxsLHIpKQoraWYoImVycm9yIj09
PWwmJiJVbnJlY29nbml6ZWRVUkxFcnJvciI9PT1yWzBdLm5hbWUpdGhyb3cgclswXQoraWYoIWMm
JiFuKXRocm93IG5ldyBFcnJvcigiTm90aGluZyBoYW5kbGVkIHRoZSBldmVudCAnIitsKyInLiIp
fWZ1bmN0aW9uIGYoZSx0KXt2YXIgbixyLG89e2FsbDp7fSxjaGFuZ2VkOnt9LHJlbW92ZWQ6e319
CitpKG8uYWxsLHQpCit2YXIgYT0hMQorcyhlKSxzKHQpCitmb3IodmFyIHUgaW4gZSllLmhhc093
blByb3BlcnR5KHUpJiYodC5oYXNPd25Qcm9wZXJ0eSh1KXx8KGE9ITAsby5yZW1vdmVkW3VdPWVb
dV0pKQorZm9yKHUgaW4gdClpZih0Lmhhc093blByb3BlcnR5KHUpKWlmKFYoZVt1XSkmJlYodFt1
XSkpaWYoZVt1XS5sZW5ndGghPT10W3VdLmxlbmd0aClvLmNoYW5nZWRbdV09dFt1XSxhPSEwCitl
bHNlIGZvcihuPTAscj1lW3VdLmxlbmd0aDtuPHI7bisrKWVbdV1bbl0hPT10W3VdW25dJiYoby5j
aGFuZ2VkW3VdPXRbdV0sYT0hMCkKK2Vsc2UgZVt1XSE9PXRbdV0mJihvLmNoYW5nZWRbdV09dFt1
XSxhPSEwKQorcmV0dXJuIGEmJm99ZnVuY3Rpb24gaChlKXtyZXR1cm4iUm91dGVyOiAiK2V9ZnVu
Y3Rpb24gZChlLHQpe2Z1bmN0aW9uIG4odCl7ZS5jYWxsKHRoaXMsdHx8e30pfXJldHVybiBuLnBy
b3RvdHlwZT1XKGUucHJvdG90eXBlKSxpKG4ucHJvdG90eXBlLHQpLG59ZnVuY3Rpb24gbShlLHQp
e2lmKGUpe3ZhciBuPSJfIit0CityZXR1cm4gZVtuXSYmbnx8ZVt0XSYmdH19ZnVuY3Rpb24gZyhl
LHQsbixyKXt2YXIgaT1tKGUsdCkKK3JldHVybiBpJiZlW2ldLmNhbGwoZSxuLHIpfWZ1bmN0aW9u
IHkoZSx0LG4pe3ZhciByPW0oZSx0KQoraWYocilyZXR1cm4gMD09PW4ubGVuZ3RoP2Vbcl0uY2Fs
bChlKToxPT09bi5sZW5ndGg/ZVtyXS5jYWxsKGUsblswXSk6Mj09PW4ubGVuZ3RoP2Vbcl0uY2Fs
bChlLG5bMF0sblsxXSk6ZVtyXS5hcHBseShlLG4pfWZ1bmN0aW9uIHYoKXt0aGlzLmhhbmRsZXJJ
bmZvcz1bXSx0aGlzLnF1ZXJ5UGFyYW1zPXt9LHRoaXMucGFyYW1zPXt9fWZ1bmN0aW9uIGIoZSl7
aWYoISh0aGlzIGluc3RhbmNlb2YgYikpcmV0dXJuIG5ldyBiKGUpCit2YXIgdD1FcnJvci5jYWxs
KHRoaXMsZSkKK0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNl
KHRoaXMsYik6dGhpcy5zdGFjaz10LnN0YWNrLHRoaXMuZGVzY3JpcHRpb249dC5kZXNjcmlwdGlv
bix0aGlzLmZpbGVOYW1lPXQuZmlsZU5hbWUsdGhpcy5saW5lTnVtYmVyPXQubGluZU51bWJlcix0
aGlzLm1lc3NhZ2U9dC5tZXNzYWdlfHwiVHJhbnNpdGlvbkFib3J0ZWQiLHRoaXMubmFtZT0iVHJh
bnNpdGlvbkFib3J0ZWQiLHRoaXMubnVtYmVyPXQubnVtYmVyLHRoaXMuY29kZT10LmNvZGV9ZnVu
Y3Rpb24gXyhlLHQscixpLG8pe2Z1bmN0aW9uIHMoKXtpZihjLmlzQWJvcnRlZClyZXR1cm4gbi5Q
cm9taXNlLnJlamVjdCh2b2lkIDAsaCgiVHJhbnNpdGlvbiBhYm9ydGVkIC0gcmVqZWN0IikpfXZh
ciBhLHUsbCxjPXRoaXMKK2lmKHRoaXMuc3RhdGU9cnx8ZS5zdGF0ZSx0aGlzLmludGVudD10LHRo
aXMucm91dGVyPWUsdGhpcy5kYXRhPXRoaXMuaW50ZW50JiZ0aGlzLmludGVudC5kYXRhfHx7fSx0
aGlzLnJlc29sdmVkTW9kZWxzPXt9LHRoaXMucXVlcnlQYXJhbXM9e30sdGhpcy5wcm9taXNlPXZv
aWQgMCx0aGlzLmVycm9yPXZvaWQgMCx0aGlzLnBhcmFtcz12b2lkIDAsdGhpcy5oYW5kbGVySW5m
b3M9dm9pZCAwLHRoaXMudGFyZ2V0TmFtZT12b2lkIDAsdGhpcy5waXZvdEhhbmRsZXI9dm9pZCAw
LHRoaXMuc2VxdWVuY2U9dm9pZCAwLHRoaXMuaXNBYm9ydGVkPSExLHRoaXMuaXNBY3RpdmU9ITAs
aSlyZXR1cm4gdGhpcy5wcm9taXNlPW4uUHJvbWlzZS5yZWplY3QoaSksdm9pZCh0aGlzLmVycm9y
PWkpCitpZih0aGlzLmlzQ2F1c2VkQnlBYm9ydGluZ1RyYW5zaXRpb249ISFvLHRoaXMuaXNDYXVz
ZWRCeUluaXRpYWxUcmFuc2l0aW9uPW8mJihvLmlzQ2F1c2VkQnlJbml0aWFsVHJhbnNpdGlvbnx8
MD09PW8uc2VxdWVuY2UpLHIpe2Zvcih0aGlzLnBhcmFtcz1yLnBhcmFtcyx0aGlzLnF1ZXJ5UGFy
YW1zPXIucXVlcnlQYXJhbXMsdGhpcy5oYW5kbGVySW5mb3M9ci5oYW5kbGVySW5mb3MsYT1yLmhh
bmRsZXJJbmZvcy5sZW5ndGgsYSYmKHRoaXMudGFyZ2V0TmFtZT1yLmhhbmRsZXJJbmZvc1thLTFd
Lm5hbWUpLHU9MDt1PGEmJihsPXIuaGFuZGxlckluZm9zW3VdLGwuaXNSZXNvbHZlZCk7Kyt1KXRo
aXMucGl2b3RIYW5kbGVyPWwuaGFuZGxlcgordGhpcy5zZXF1ZW5jZT1lLmN1cnJlbnRTZXF1ZW5j
ZSsrLHRoaXMucHJvbWlzZT1yLnJlc29sdmUocyx0aGlzKS5jYXRjaCh3KGMpLGgoIkhhbmRsZSBB
Ym9ydCIpKX1lbHNlIHRoaXMucHJvbWlzZT1uLlByb21pc2UucmVzb2x2ZSh0aGlzLnN0YXRlKSx0
aGlzLnBhcmFtcz17fX1mdW5jdGlvbiB3KGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdC53
YXNBYm9ydGVkfHxlLmlzQWJvcnRlZD9uLlByb21pc2UucmVqZWN0KEUoZSkpOihlLnRyaWdnZXIo
ImVycm9yIix0LmVycm9yLGUsdC5oYW5kbGVyV2l0aEVycm9yKSxlLmFib3J0KCksbi5Qcm9taXNl
LnJlamVjdCh0LmVycm9yKSl9fWZ1bmN0aW9uIEUoZSl7cmV0dXJuIGEoZS5yb3V0ZXIsZS5zZXF1
ZW5jZSwiZGV0ZWN0ZWQgYWJvcnQuIiksbmV3IGJ9ZnVuY3Rpb24geChlKXt0aGlzLmluaXRpYWxp
emUoZSksdGhpcy5kYXRhPXRoaXMuZGF0YXx8e319ZnVuY3Rpb24gQyhlKXt2YXIgdCxvPWV8fHt9
Cit0aGlzLl9oYW5kbGVyPSQsby5oYW5kbGVyJiYodD1vLm5hbWUsdGhpcy5oYW5kbGVyUHJvbWlz
ZT1uLlByb21pc2UucmVzb2x2ZShvLmhhbmRsZXIpLHIoby5oYW5kbGVyKT8odGhpcy5oYW5kbGVy
UHJvbWlzZT10aGlzLmhhbmRsZXJQcm9taXNlLnRoZW4odSh0aGlzLHRoaXMudXBkYXRlSGFuZGxl
cikpLG8uaGFuZGxlcj12b2lkIDApOm8uaGFuZGxlciYmKG8uaGFuZGxlci5faGFuZGxlck5hbWU9
dCkpLGkodGhpcyxvKSx0aGlzLmluaXRpYWxpemUobyl9ZnVuY3Rpb24gTyhlLHQpe2lmKCFlXiF0
KXJldHVybiExCitpZighZSlyZXR1cm4hMAorZm9yKHZhciBuIGluIGUpaWYoZS5oYXNPd25Qcm9w
ZXJ0eShuKSYmZVtuXSE9PXRbbl0pcmV0dXJuITEKK3JldHVybiEwfWZ1bmN0aW9uIEEoZSx0KXt2
YXIgbj1BLmtsYXNzZXNbZV0scj1uZXcgbih0fHx7fSkKK3JldHVybiByLmZhY3Rvcnk9QSxyfWZ1
bmN0aW9uIFQoZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgVCkpcmV0dXJuIG5ldyBUKGUpCit2YXIg
dD1FcnJvci5jYWxsKHRoaXMsZSkKK0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1
cmVTdGFja1RyYWNlKHRoaXMsVCk6dGhpcy5zdGFjaz10LnN0YWNrLHRoaXMuZGVzY3JpcHRpb249
dC5kZXNjcmlwdGlvbix0aGlzLmZpbGVOYW1lPXQuZmlsZU5hbWUsdGhpcy5saW5lTnVtYmVyPXQu
bGluZU51bWJlcix0aGlzLm1lc3NhZ2U9dC5tZXNzYWdlfHwiVW5yZWNvZ25pemVkVVJMIix0aGlz
Lm5hbWU9IlVucmVjb2duaXplZFVSTEVycm9yIix0aGlzLm51bWJlcj10Lm51bWJlcix0aGlzLmNv
ZGU9dC5jb2RlfWZ1bmN0aW9uIFMoZSl7dmFyIG49ZXx8e30KK3RoaXMuZ2V0SGFuZGxlcj1uLmdl
dEhhbmRsZXJ8fHRoaXMuZ2V0SGFuZGxlcix0aGlzLmdldFNlcmlhbGl6ZXI9bi5nZXRTZXJpYWxp
emVyfHx0aGlzLmdldFNlcmlhbGl6ZXIsdGhpcy51cGRhdGVVUkw9bi51cGRhdGVVUkx8fHRoaXMu
dXBkYXRlVVJMLHRoaXMucmVwbGFjZVVSTD1uLnJlcGxhY2VVUkx8fHRoaXMucmVwbGFjZVVSTCx0
aGlzLmRpZFRyYW5zaXRpb249bi5kaWRUcmFuc2l0aW9ufHx0aGlzLmRpZFRyYW5zaXRpb24sdGhp
cy53aWxsVHJhbnNpdGlvbj1uLndpbGxUcmFuc2l0aW9ufHx0aGlzLndpbGxUcmFuc2l0aW9uLHRo
aXMuZGVsZWdhdGU9bi5kZWxlZ2F0ZXx8dGhpcy5kZWxlZ2F0ZSx0aGlzLnRyaWdnZXJFdmVudD1u
LnRyaWdnZXJFdmVudHx8dGhpcy50cmlnZ2VyRXZlbnQsdGhpcy5sb2c9bi5sb2d8fHRoaXMubG9n
LHRoaXMuZHNsQ2FsbEJhY2tzPVtdLHRoaXMuc3RhdGU9dm9pZCAwLHRoaXMuYWN0aXZlVHJhbnNp
dGlvbj12b2lkIDAsdGhpcy5fY2hhbmdlZFF1ZXJ5UGFyYW1zPXZvaWQgMCx0aGlzLm9sZFN0YXRl
PXZvaWQgMCx0aGlzLmN1cnJlbnRIYW5kbGVySW5mb3M9dm9pZCAwLHRoaXMuc3RhdGU9dm9pZCAw
LHRoaXMuY3VycmVudFNlcXVlbmNlPTAsdGhpcy5yZWNvZ25pemVyPW5ldyB0LmRlZmF1bHQsdGhp
cy5yZXNldCgpfWZ1bmN0aW9uIFIoZSx0KXt2YXIgbixyPSEhdGhpcy5hY3RpdmVUcmFuc2l0aW9u
LGk9cj90aGlzLmFjdGl2ZVRyYW5zaXRpb24uc3RhdGU6dGhpcy5zdGF0ZSxvPWUuYXBwbHlUb1N0
YXRlKGksdGhpcy5yZWNvZ25pemVyLHRoaXMuZ2V0SGFuZGxlcix0LHRoaXMuZ2V0U2VyaWFsaXpl
cikscz1mKGkucXVlcnlQYXJhbXMsby5xdWVyeVBhcmFtcykKK3JldHVybiBNKG8uaGFuZGxlcklu
Zm9zLGkuaGFuZGxlckluZm9zKT9zJiYobj10aGlzLnF1ZXJ5UGFyYW1zVHJhbnNpdGlvbihzLHIs
aSxvKSk/KG4ucXVlcnlQYXJhbXNPbmx5PSEwLG4pOnRoaXMuYWN0aXZlVHJhbnNpdGlvbnx8bmV3
IF8odGhpcyk6dD92b2lkIE4odGhpcyxvKToobj1uZXcgXyh0aGlzLGUsbyx2b2lkIDAsdGhpcy5h
Y3RpdmVUcmFuc2l0aW9uKSxGKG8uaGFuZGxlckluZm9zLGkuaGFuZGxlckluZm9zKSYmKG4ucXVl
cnlQYXJhbXNPbmx5PSEwKSx0aGlzLmFjdGl2ZVRyYW5zaXRpb24mJnRoaXMuYWN0aXZlVHJhbnNp
dGlvbi5hYm9ydCgpLHRoaXMuYWN0aXZlVHJhbnNpdGlvbj1uLG4ucHJvbWlzZT1uLnByb21pc2Uu
dGhlbihmdW5jdGlvbihlKXtyZXR1cm4gTChuLGUuc3RhdGUpfSxudWxsLGgoIlNldHRsZSB0cmFu
c2l0aW9uIHByb21pc2Ugd2hlbiB0cmFuc2l0aW9uIGlzIGZpbmFsaXplZCIpKSxyfHxCKHRoaXMs
byxuKSxrKHRoaXMsbyxzKSxuKX1mdW5jdGlvbiBrKGUsdCxuKXtuJiYoZS5fY2hhbmdlZFF1ZXJ5
UGFyYW1zPW4uYWxsLHAoZSx0LmhhbmRsZXJJbmZvcywhMCxbInF1ZXJ5UGFyYW1zRGlkQ2hhbmdl
IixuLmNoYW5nZWQsbi5hbGwsbi5yZW1vdmVkXSksZS5fY2hhbmdlZFF1ZXJ5UGFyYW1zPW51bGwp
fWZ1bmN0aW9uIE4oZSx0LG4pe3ZhciByLGksbyxzPWooZS5zdGF0ZSx0KQorZm9yKHI9MCxpPXMu
ZXhpdGVkLmxlbmd0aDtyPGk7cisrKW89cy5leGl0ZWRbcl0uaGFuZGxlcixkZWxldGUgby5jb250
ZXh0LGcobywicmVzZXQiLCEwLG4pLGcobywiZXhpdCIsbikKK3ZhciBhPWUub2xkU3RhdGU9ZS5z
dGF0ZQorZS5zdGF0ZT10Cit2YXIgdT1lLmN1cnJlbnRIYW5kbGVySW5mb3M9cy51bmNoYW5nZWQu
c2xpY2UoKQordHJ5e2ZvcihyPTAsaT1zLnJlc2V0Lmxlbmd0aDtyPGk7cisrKW89cy5yZXNldFty
XS5oYW5kbGVyLGcobywicmVzZXQiLCExLG4pCitmb3Iocj0wLGk9cy51cGRhdGVkQ29udGV4dC5s
ZW5ndGg7cjxpO3IrKylQKHUscy51cGRhdGVkQ29udGV4dFtyXSwhMSxuKQorZm9yKHI9MCxpPXMu
ZW50ZXJlZC5sZW5ndGg7cjxpO3IrKylQKHUscy5lbnRlcmVkW3JdLCEwLG4pfWNhdGNoKHQpe3Ro
cm93IGUuc3RhdGU9YSxlLmN1cnJlbnRIYW5kbGVySW5mb3M9YS5oYW5kbGVySW5mb3MsdH1lLnN0
YXRlLnF1ZXJ5UGFyYW1zPVUoZSx1LHQucXVlcnlQYXJhbXMsbil9ZnVuY3Rpb24gUChlLHQsbixy
KXtmdW5jdGlvbiBpKGkpe2lmKG4mJmcoaSwiZW50ZXIiLHIpLHImJnIuaXNBYm9ydGVkKXRocm93
IG5ldyBiCitpZihpLmNvbnRleHQ9cyxnKGksImNvbnRleHREaWRDaGFuZ2UiKSxnKGksInNldHVw
IixzLHIpLHImJnIuaXNBYm9ydGVkKXRocm93IG5ldyBiCitlLnB1c2godCl9dmFyIG89dC5oYW5k
bGVyLHM9dC5jb250ZXh0CityZXR1cm4gbz9pKG8pOnQuaGFuZGxlclByb21pc2U9dC5oYW5kbGVy
UHJvbWlzZS50aGVuKGkpLCEwfWZ1bmN0aW9uIGooZSx0KXt2YXIgbixyLGksbyxzLGE9ZS5oYW5k
bGVySW5mb3MsdT10LmhhbmRsZXJJbmZvcyxsPXt1cGRhdGVkQ29udGV4dDpbXSxleGl0ZWQ6W10s
ZW50ZXJlZDpbXSx1bmNoYW5nZWQ6W10scmVzZXQ6dm9pZCAwfSxjPSExCitmb3Iobz0wLHM9dS5s
ZW5ndGg7bzxzO28rKyluPWFbb10scj11W29dLG4mJm4uaGFuZGxlcj09PXIuaGFuZGxlcnx8KGk9
ITApLGk/KGwuZW50ZXJlZC5wdXNoKHIpLG4mJmwuZXhpdGVkLnVuc2hpZnQobikpOmN8fG4uY29u
dGV4dCE9PXIuY29udGV4dD8oYz0hMCxsLnVwZGF0ZWRDb250ZXh0LnB1c2gocikpOmwudW5jaGFu
Z2VkLnB1c2gobikKK2ZvcihvPXUubGVuZ3RoLHM9YS5sZW5ndGg7bzxzO28rKylsLmV4aXRlZC51
bnNoaWZ0KGFbb10pCityZXR1cm4gbC5yZXNldD1sLnVwZGF0ZWRDb250ZXh0LnNsaWNlKCksbC5y
ZXNldC5yZXZlcnNlKCksbH1mdW5jdGlvbiBEKGUsdCl7dmFyIG4scixvLHMsYSx1LGw9ZS51cmxN
ZXRob2QKK2lmKGwpe3ZhciBjPWUucm91dGVyLHA9dC5oYW5kbGVySW5mb3MsZj1wW3AubGVuZ3Ro
LTFdLm5hbWUsaD17fQorZm9yKG49cC5sZW5ndGgtMTtuPj0wOy0tbilyPXBbbl0saShoLHIucGFy
YW1zKSxyLmhhbmRsZXIuaW5hY2Nlc3NpYmxlQnlVUkwmJihsPW51bGwpCitsJiYoaC5xdWVyeVBh
cmFtcz1lLl92aXNpYmxlUXVlcnlQYXJhbXN8fHQucXVlcnlQYXJhbXMsbz1jLnJlY29nbml6ZXIu
Z2VuZXJhdGUoZixoKSxzPWUuaXNDYXVzZWRCeUluaXRpYWxUcmFuc2l0aW9uLGE9InJlcGxhY2Ui
PT09bCYmIWUuaXNDYXVzZWRCeUFib3J0aW5nVHJhbnNpdGlvbix1PWUucXVlcnlQYXJhbXNPbmx5
JiYicmVwbGFjZSI9PT1sLHN8fGF8fHU/Yy5yZXBsYWNlVVJMKG8pOmMudXBkYXRlVVJMKG8pKX19
ZnVuY3Rpb24gTChlLHQpe3ZhciByLGksbwordHJ5e3JldHVybiBhKGUucm91dGVyLGUuc2VxdWVu
Y2UsIlJlc29sdmVkIGFsbCBtb2RlbHMgb24gZGVzdGluYXRpb24gcm91dGU7IGZpbmFsaXppbmcg
dHJhbnNpdGlvbi4iKSwocj1lLnJvdXRlcixpPXQuaGFuZGxlckluZm9zLE4ocix0LGUpLGUuaXNB
Ym9ydGVkKT8oci5zdGF0ZS5oYW5kbGVySW5mb3M9ci5jdXJyZW50SGFuZGxlckluZm9zLG4uUHJv
bWlzZS5yZWplY3QoRShlKSkpOihEKGUsdCxlLmludGVudC51cmwpLGUuaXNBY3RpdmU9ITEsci5h
Y3RpdmVUcmFuc2l0aW9uPW51bGwscChyLHIuY3VycmVudEhhbmRsZXJJbmZvcywhMCxbImRpZFRy
YW5zaXRpb24iXSksci5kaWRUcmFuc2l0aW9uJiZyLmRpZFRyYW5zaXRpb24oci5jdXJyZW50SGFu
ZGxlckluZm9zKSxhKHIsZS5zZXF1ZW5jZSwiVFJBTlNJVElPTiBDT01QTEVURS4iKSxpW2kubGVu
Z3RoLTFdLmhhbmRsZXIpfWNhdGNoKHQpe3Rocm93IHQgaW5zdGFuY2VvZiBifHwobz1lLnN0YXRl
LmhhbmRsZXJJbmZvcyxlLnRyaWdnZXIoITAsImVycm9yIix0LGUsb1tvLmxlbmd0aC0xXS5oYW5k
bGVyKSxlLmFib3J0KCkpLHR9fWZ1bmN0aW9uIEkoZSx0LG4pe3ZhciByLGk9dFswXXx8Ii8iLG89
dFt0Lmxlbmd0aC0xXSxzPXt9CitvJiZvLmhhc093blByb3BlcnR5KCJxdWVyeVBhcmFtcyIpJiYo
cz1YLmNhbGwodCkucXVlcnlQYXJhbXMpCit2YXIgdQorcmV0dXJuIDA9PT10Lmxlbmd0aD8oYShl
LCJVcGRhdGluZyBxdWVyeSBwYXJhbXMiKSxyPWUuc3RhdGUuaGFuZGxlckluZm9zLHU9bmV3IFko
e25hbWU6cltyLmxlbmd0aC0xXS5uYW1lLGNvbnRleHRzOltdLHF1ZXJ5UGFyYW1zOnN9KSk6Ii8i
PT09aS5jaGFyQXQoMCk/KGEoZSwiQXR0ZW1wdGluZyBVUkwgdHJhbnNpdGlvbiB0byAiK2kpLHU9
bmV3IEooe3VybDppfSkpOihhKGUsIkF0dGVtcHRpbmcgdHJhbnNpdGlvbiB0byAiK2kpLHU9bmV3
IFkoe25hbWU6dFswXSxjb250ZXh0czpILmNhbGwodCwxKSxxdWVyeVBhcmFtczpzfSkpLGUudHJh
bnNpdGlvbkJ5SW50ZW50KHUsbil9ZnVuY3Rpb24gTShlLHQpe3ZhciBuLHIKK2lmKGUubGVuZ3Ro
IT09dC5sZW5ndGgpcmV0dXJuITEKK2ZvcihuPTAscj1lLmxlbmd0aDtuPHI7KytuKWlmKGVbbl0h
PT10W25dKXJldHVybiExCityZXR1cm4hMH1mdW5jdGlvbiBGKGUsdCl7dmFyIG4scgoraWYoZS5s
ZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMQorZm9yKG49MCxyPWUubGVuZ3RoO248cjsrK24pe2lm
KGVbbl0ubmFtZSE9PXRbbl0ubmFtZSlyZXR1cm4hMQoraWYoIXooZVtuXS5wYXJhbXMsdFtuXS5w
YXJhbXMpKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIHooZSx0KXtpZighZSYmIXQpcmV0dXJu
ITAKK2lmKCFlJiZ0fHxlJiYhdClyZXR1cm4hMQordmFyIG4scixpLG89T2JqZWN0LmtleXMoZSks
cz1PYmplY3Qua2V5cyh0KQoraWYoby5sZW5ndGghPT1zLmxlbmd0aClyZXR1cm4hMQorZm9yKG49
MCxyPW8ubGVuZ3RoO248cjsrK24paWYoaT1vW25dLGVbaV0hPT10W2ldKXJldHVybiExCityZXR1
cm4hMH1mdW5jdGlvbiBVKGUsdCxuLHIpe2Zvcih2YXIgaSBpbiBuKW4uaGFzT3duUHJvcGVydHko
aSkmJm51bGw9PT1uW2ldJiZkZWxldGUgbltpXQordmFyIG8scyxhLHU9W10KK3AoZSx0LCEwLFsi
ZmluYWxpemVRdWVyeVBhcmFtQ2hhbmdlIixuLHUscl0pLHImJihyLl92aXNpYmxlUXVlcnlQYXJh
bXM9e30pCit2YXIgbD17fQorZm9yKG89MCxzPXUubGVuZ3RoO288czsrK28pYT11W29dLGxbYS5r
ZXldPWEudmFsdWUsciYmITEhPT1hLnZpc2libGUmJihyLl92aXNpYmxlUXVlcnlQYXJhbXNbYS5r
ZXldPWEudmFsdWUpCityZXR1cm4gbH1mdW5jdGlvbiBCKGUsdCxuKXt2YXIgcixpLG8scyxhPWUu
c3RhdGUuaGFuZGxlckluZm9zLHU9W10sbD1udWxsCitmb3IoaT1hLmxlbmd0aCxyPTA7cjxpO3Ir
Kyl7aWYobz1hW3JdLCEocz10LmhhbmRsZXJJbmZvc1tyXSl8fG8ubmFtZSE9PXMubmFtZSl7bD1y
CiticmVha31zLmlzUmVzb2x2ZWR8fHUucHVzaChvKX1udWxsIT09bCYmYS5zbGljZShsLGkpLHAo
ZSxhLCEwLFsid2lsbFRyYW5zaXRpb24iLG5dKSxlLndpbGxUcmFuc2l0aW9uJiZlLndpbGxUcmFu
c2l0aW9uKGEsdC5oYW5kbGVySW5mb3Msbil9ZS5UcmFuc2l0aW9uPXZvaWQgMAordmFyIHEsSD1B
cnJheS5wcm90b3R5cGUuc2xpY2UKK3E9QXJyYXkuaXNBcnJheT9BcnJheS5pc0FycmF5OmZ1bmN0
aW9uKGUpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5n
LmNhbGwoZSl9Cit2YXIgVj1xLFc9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24oZSl7ZnVuY3Rpb24g
dCgpe31yZXR1cm4gdC5wcm90b3R5cGU9ZSxuZXcgdH0KK3YucHJvdG90eXBlPXtwcm9taXNlTGFi
ZWw6ZnVuY3Rpb24oZSl7dmFyIHQ9IiIKK3JldHVybiBjKHRoaXMuaGFuZGxlckluZm9zLGZ1bmN0
aW9uKGUpeyIiIT09dCYmKHQrPSIuIiksdCs9ZS5uYW1lfSksaCgiJyIrdCsiJzogIitlKX0scmVz
b2x2ZTpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIHIoKXtyZXR1cm4gbi5Qcm9taXNlLnJlc29sdmUo
ZSgpLGEucHJvbWlzZUxhYmVsKCJDaGVjayBpZiBzaG91bGQgY29udGludWUiKSkuY2F0Y2goZnVu
Y3Rpb24oZSl7cmV0dXJuIHU9ITAsbi5Qcm9taXNlLnJlamVjdChlKX0sYS5wcm9taXNlTGFiZWwo
IkhhbmRsZSBhYm9ydCIpKX1mdW5jdGlvbiBpKGUpe3ZhciBuLGk9YS5oYW5kbGVySW5mb3NbdC5y
ZXNvbHZlSW5kZXhdLmlzUmVzb2x2ZWQKK3JldHVybiBhLmhhbmRsZXJJbmZvc1t0LnJlc29sdmVJ
bmRleCsrXT1lLGl8fChuPWUuaGFuZGxlcixnKG4sInJlZGlyZWN0IixlLmNvbnRleHQsdCkpLHIo
KS50aGVuKG8sbnVsbCxhLnByb21pc2VMYWJlbCgiUmVzb2x2ZSBoYW5kbGVyIikpfWZ1bmN0aW9u
IG8oKXtyZXR1cm4gdC5yZXNvbHZlSW5kZXg9PT1hLmhhbmRsZXJJbmZvcy5sZW5ndGg/e2Vycm9y
Om51bGwsc3RhdGU6YX06YS5oYW5kbGVySW5mb3NbdC5yZXNvbHZlSW5kZXhdLnJlc29sdmUocix0
KS50aGVuKGksbnVsbCxhLnByb21pc2VMYWJlbCgiUHJvY2VlZCIpKX12YXIgcz10aGlzLnBhcmFt
cworYyh0aGlzLmhhbmRsZXJJbmZvcyxmdW5jdGlvbihlKXtzW2UubmFtZV09ZS5wYXJhbXN8fHt9
fSksdD10fHx7fSx0LnJlc29sdmVJbmRleD0wCit2YXIgYT10aGlzLHU9ITEKK3JldHVybiBuLlBy
b21pc2UucmVzb2x2ZShudWxsLHRoaXMucHJvbWlzZUxhYmVsKCJTdGFydCB0cmFuc2l0aW9uIikp
LnRoZW4obyxudWxsLHRoaXMucHJvbWlzZUxhYmVsKCJSZXNvbHZlIGhhbmRsZXIiKSkuY2F0Y2go
ZnVuY3Rpb24oZSl7dmFyIHI9YS5oYW5kbGVySW5mb3MsaT10LnJlc29sdmVJbmRleD49ci5sZW5n
dGg/ci5sZW5ndGgtMTp0LnJlc29sdmVJbmRleAorcmV0dXJuIG4uUHJvbWlzZS5yZWplY3Qoe2Vy
cm9yOmUsaGFuZGxlcldpdGhFcnJvcjphLmhhbmRsZXJJbmZvc1tpXS5oYW5kbGVyLHdhc0Fib3J0
ZWQ6dSxzdGF0ZTphfSl9LHRoaXMucHJvbWlzZUxhYmVsKCJIYW5kbGUgZXJyb3IiKSl9fSxiLnBy
b3RvdHlwZT1XKEVycm9yLnByb3RvdHlwZSksXy5wcm90b3R5cGU9e3RhcmdldE5hbWU6bnVsbCx1
cmxNZXRob2Q6InVwZGF0ZSIsaW50ZW50Om51bGwscGl2b3RIYW5kbGVyOm51bGwscmVzb2x2ZUlu
ZGV4OjAscmVzb2x2ZWRNb2RlbHM6bnVsbCxzdGF0ZTpudWxsLHF1ZXJ5UGFyYW1zT25seTohMSxp
c1RyYW5zaXRpb246ITAsaXNFeGl0aW5nOmZ1bmN0aW9uKGUpe3ZhciB0LG4scixpPXRoaXMuaGFu
ZGxlckluZm9zCitmb3IodD0wLG49aS5sZW5ndGg7dDxuOysrdClpZihyPWlbdF0sci5uYW1lPT09
ZXx8ci5oYW5kbGVyPT09ZSlyZXR1cm4hMQorcmV0dXJuITB9LHByb21pc2U6bnVsbCxkYXRhOm51
bGwsdGhlbjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMucHJvbWlzZS50aGVuKGUsdCxuKX0s
Y2F0Y2g6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5wcm9taXNlLmNhdGNoKGUsdCl9LGZpbmFs
bHk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5wcm9taXNlLmZpbmFsbHkoZSx0KX0sYWJvcnQ6
ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0Fib3J0ZWQ/dGhpczooYSh0aGlzLnJvdXRlcix0aGlz
LnNlcXVlbmNlLHRoaXMudGFyZ2V0TmFtZSsiOiB0cmFuc2l0aW9uIHdhcyBhYm9ydGVkIiksdGhp
cy5pbnRlbnQucHJlVHJhbnNpdGlvblN0YXRlPXRoaXMucm91dGVyLnN0YXRlLHRoaXMuaXNBYm9y
dGVkPSEwLHRoaXMuaXNBY3RpdmU9ITEsdGhpcy5yb3V0ZXIuYWN0aXZlVHJhbnNpdGlvbj1udWxs
LHRoaXMpfSxyZXRyeTpmdW5jdGlvbigpe3RoaXMuYWJvcnQoKQordmFyIGU9dGhpcy5yb3V0ZXIu
dHJhbnNpdGlvbkJ5SW50ZW50KHRoaXMuaW50ZW50LCExKQorcmV0dXJuIG51bGwhPT10aGlzLnVy
bE1ldGhvZCYmZS5tZXRob2QodGhpcy51cmxNZXRob2QpLGV9LG1ldGhvZDpmdW5jdGlvbihlKXty
ZXR1cm4gdGhpcy51cmxNZXRob2Q9ZSx0aGlzfSx0cmlnZ2VyOmZ1bmN0aW9uKGUpe3ZhciB0PUgu
Y2FsbChhcmd1bWVudHMpCisiYm9vbGVhbiI9PXR5cGVvZiBlP3Quc2hpZnQoKTplPSExLHAodGhp
cy5yb3V0ZXIsdGhpcy5zdGF0ZS5oYW5kbGVySW5mb3Muc2xpY2UoMCx0aGlzLnJlc29sdmVJbmRl
eCsxKSxlLHQpfSxmb2xsb3dSZWRpcmVjdHM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJvdXRlcgor
cmV0dXJuIHRoaXMucHJvbWlzZS5jYXRjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5hY3RpdmVUcmFu
c2l0aW9uP2UuYWN0aXZlVHJhbnNpdGlvbi5mb2xsb3dSZWRpcmVjdHMoKTpuLlByb21pc2UucmVq
ZWN0KHQpfSl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIlRyYW5zaXRpb24gKHNlcXVlbmNl
ICIrdGhpcy5zZXF1ZW5jZSsiKSJ9LGxvZzpmdW5jdGlvbihlKXthKHRoaXMucm91dGVyLHRoaXMu
c2VxdWVuY2UsZSl9fSxfLnByb3RvdHlwZS5zZW5kPV8ucHJvdG90eXBlLnRyaWdnZXIseC5wcm90
b3R5cGU9e2luaXRpYWxpemU6bnVsbCxhcHBseVRvU3RhdGU6bnVsbH0KK3ZhciAkPU9iamVjdC5m
cmVlemUoe30pCitDLnByb3RvdHlwZT17bmFtZTpudWxsLGdldEhhbmRsZXI6ZnVuY3Rpb24oKXt9
LGZldGNoSGFuZGxlcjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0SGFuZGxlcih0aGlzLm5hbWUp
CitpZih0aGlzLmhhbmRsZXJQcm9taXNlPW4uUHJvbWlzZS5yZXNvbHZlKGUpLHIoZSkpdGhpcy5o
YW5kbGVyUHJvbWlzZT10aGlzLmhhbmRsZXJQcm9taXNlLnRoZW4odSh0aGlzLHRoaXMudXBkYXRl
SGFuZGxlcikpCitlbHNlIGlmKGUpcmV0dXJuIGUuX2hhbmRsZXJOYW1lPXRoaXMubmFtZSx0aGlz
LmhhbmRsZXI9ZQorcmV0dXJuIHRoaXMuaGFuZGxlcj12b2lkIDB9LF9oYW5kbGVyUHJvbWlzZTp2
b2lkIDAscGFyYW1zOm51bGwsY29udGV4dDpudWxsLGZhY3Rvcnk6bnVsbCxpbml0aWFsaXplOmZ1
bmN0aW9uKCl7fSxsb2c6ZnVuY3Rpb24oZSx0KXtlLmxvZyYmZS5sb2codGhpcy5uYW1lKyI6ICIr
dCl9LHByb21pc2VMYWJlbDpmdW5jdGlvbihlKXtyZXR1cm4gaCgiJyIrdGhpcy5uYW1lKyInICIr
ZSl9LGdldFVucmVzb2x2ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sc2VyaWFsaXplOmZ1bmN0
aW9uKCl7cmV0dXJuIHRoaXMucGFyYW1zfHx7fX0sdXBkYXRlSGFuZGxlcjpmdW5jdGlvbihlKXty
ZXR1cm4gZS5faGFuZGxlck5hbWU9dGhpcy5uYW1lLHRoaXMuaGFuZGxlcj1lfSxyZXNvbHZlOmZ1
bmN0aW9uKGUsdCl7dmFyIHI9dSh0aGlzLHRoaXMuY2hlY2tGb3JBYm9ydCxlKSxpPXUodGhpcyx0
aGlzLnJ1bkJlZm9yZU1vZGVsSG9vayx0KSxvPXUodGhpcyx0aGlzLmdldE1vZGVsLHQpLHM9dSh0
aGlzLHRoaXMucnVuQWZ0ZXJNb2RlbEhvb2ssdCksYT11KHRoaXMsdGhpcy5iZWNvbWVSZXNvbHZl
ZCx0KSxsPXRoaXMKK3JldHVybiBuLlByb21pc2UucmVzb2x2ZSh0aGlzLmhhbmRsZXJQcm9taXNl
LHRoaXMucHJvbWlzZUxhYmVsKCJTdGFydCBoYW5kbGVyIikpLnRoZW4oZnVuY3Rpb24oZSl7cmV0
dXJuIG4uUHJvbWlzZS5yZXNvbHZlKGUpLnRoZW4ocixudWxsLGwucHJvbWlzZUxhYmVsKCJDaGVj
ayBmb3IgYWJvcnQiKSkudGhlbihpLG51bGwsbC5wcm9taXNlTGFiZWwoIkJlZm9yZSBtb2RlbCIp
KS50aGVuKHIsbnVsbCxsLnByb21pc2VMYWJlbCgiQ2hlY2sgaWYgYWJvcnRlZCBkdXJpbmcgJ2Jl
Zm9yZU1vZGVsJyBob29rIikpLnRoZW4obyxudWxsLGwucHJvbWlzZUxhYmVsKCJNb2RlbCIpKS50
aGVuKHIsbnVsbCxsLnByb21pc2VMYWJlbCgiQ2hlY2sgaWYgYWJvcnRlZCBpbiAnbW9kZWwnIGhv
b2siKSkudGhlbihzLG51bGwsbC5wcm9taXNlTGFiZWwoIkFmdGVyIG1vZGVsIikpLnRoZW4ocixu
dWxsLGwucHJvbWlzZUxhYmVsKCJDaGVjayBpZiBhYm9ydGVkIGluICdhZnRlck1vZGVsJyBob29r
IikpLnRoZW4oYSxudWxsLGwucHJvbWlzZUxhYmVsKCJCZWNvbWUgcmVzb2x2ZWQiKSl9LGZ1bmN0
aW9uKGUpe3Rocm93IGV9KX0scnVuQmVmb3JlTW9kZWxIb29rOmZ1bmN0aW9uKGUpe3JldHVybiBl
LnRyaWdnZXImJmUudHJpZ2dlcighMCwid2lsbFJlc29sdmVNb2RlbCIsZSx0aGlzLmhhbmRsZXIp
LHRoaXMucnVuU2hhcmVkTW9kZWxIb29rKGUsImJlZm9yZU1vZGVsIixbXSl9LHJ1bkFmdGVyTW9k
ZWxIb29rOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5uYW1lCityZXR1cm4gdGhpcy5zdGFzaFJl
c29sdmVkTW9kZWwoZSx0KSx0aGlzLnJ1blNoYXJlZE1vZGVsSG9vayhlLCJhZnRlck1vZGVsIixb
dF0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gZS5yZXNvbHZlZE1vZGVsc1tuXX0sbnVsbCx0aGlz
LnByb21pc2VMYWJlbCgiSWdub3JlIGZ1bGZpbGxtZW50IHZhbHVlIGFuZCByZXR1cm4gbW9kZWwg
dmFsdWUiKSl9LHJ1blNoYXJlZE1vZGVsSG9vazpmdW5jdGlvbihlLHQscil7dGhpcy5sb2coZSwi
Y2FsbGluZyAiK3QrIiBob29rIiksdGhpcy5xdWVyeVBhcmFtcyYmci5wdXNoKHRoaXMucXVlcnlQ
YXJhbXMpLHIucHVzaChlKQordmFyIGk9eSh0aGlzLmhhbmRsZXIsdCxyKQorcmV0dXJuIGkmJmku
aXNUcmFuc2l0aW9uJiYoaT1udWxsKSxuLlByb21pc2UucmVzb2x2ZShpLHRoaXMucHJvbWlzZUxh
YmVsKCJSZXNvbHZlIHZhbHVlIHJldHVybmVkIGZyb20gb25lIG9mIHRoZSBtb2RlbCBob29rcyIp
KX0sZ2V0TW9kZWw6bnVsbCxjaGVja0ZvckFib3J0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4uUHJv
bWlzZS5yZXNvbHZlKGUoKSx0aGlzLnByb21pc2VMYWJlbCgiQ2hlY2sgZm9yIGFib3J0IikpLnRo
ZW4oZnVuY3Rpb24oKXtyZXR1cm4gdH0sbnVsbCx0aGlzLnByb21pc2VMYWJlbCgiSWdub3JlIGZ1
bGZpbGxtZW50IHZhbHVlIGFuZCBjb250aW51ZSIpKX0sc3Rhc2hSZXNvbHZlZE1vZGVsOmZ1bmN0
aW9uKGUsdCl7ZS5yZXNvbHZlZE1vZGVscz1lLnJlc29sdmVkTW9kZWxzfHx7fSxlLnJlc29sdmVk
TW9kZWxzW3RoaXMubmFtZV09dH0sYmVjb21lUmVzb2x2ZWQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj10
aGlzLnNlcmlhbGl6ZSh0KQorcmV0dXJuIGUmJih0aGlzLnN0YXNoUmVzb2x2ZWRNb2RlbChlLHQp
LGUucGFyYW1zPWUucGFyYW1zfHx7fSxlLnBhcmFtc1t0aGlzLm5hbWVdPW4pLHRoaXMuZmFjdG9y
eSgicmVzb2x2ZWQiLHtjb250ZXh0OnQsbmFtZTp0aGlzLm5hbWUsaGFuZGxlcjp0aGlzLmhhbmRs
ZXIscGFyYW1zOm59KX0sc2hvdWxkU3VwZXJjZWRlOmZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiEw
Cit2YXIgdD1lLmNvbnRleHQ9PT10aGlzLmNvbnRleHQKK3JldHVybiBlLm5hbWUhPT10aGlzLm5h
bWV8fHRoaXMuaGFzT3duUHJvcGVydHkoImNvbnRleHQiKSYmIXR8fHRoaXMuaGFzT3duUHJvcGVy
dHkoInBhcmFtcyIpJiYhTyh0aGlzLnBhcmFtcyxlLnBhcmFtcyl9fSxPYmplY3QuZGVmaW5lUHJv
cGVydHkoQy5wcm90b3R5cGUsImhhbmRsZXIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5f
aGFuZGxlciE9PSQ/dGhpcy5faGFuZGxlcjp0aGlzLmZldGNoSGFuZGxlcigpfSxzZXQ6ZnVuY3Rp
b24oZSl7cmV0dXJuIHRoaXMuX2hhbmRsZXI9ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQy5w
cm90b3R5cGUsImhhbmRsZXJQcm9taXNlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hh
bmRsZXJQcm9taXNlP3RoaXMuX2hhbmRsZXJQcm9taXNlOih0aGlzLmZldGNoSGFuZGxlcigpLHRo
aXMuX2hhbmRsZXJQcm9taXNlKX0sc2V0OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9oYW5kbGVy
UHJvbWlzZT1lfX0pCit2YXIgRz1kKEMse3Jlc29sdmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCYm
dC5yZXNvbHZlZE1vZGVscyYmKHQucmVzb2x2ZWRNb2RlbHNbdGhpcy5uYW1lXT10aGlzLmNvbnRl
eHQpLG4uUHJvbWlzZS5yZXNvbHZlKHRoaXMsdGhpcy5wcm9taXNlTGFiZWwoIlJlc29sdmUiKSl9
LGdldFVucmVzb2x2ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mYWN0b3J5KCJwYXJhbSIse25h
bWU6dGhpcy5uYW1lLGhhbmRsZXI6dGhpcy5oYW5kbGVyLHBhcmFtczp0aGlzLnBhcmFtc30pfSxp
c1Jlc29sdmVkOiEwfSksSz1kKEMse2dldE1vZGVsOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmxv
ZyhlLHRoaXMubmFtZSsiOiByZXNvbHZpbmcgcHJvdmlkZWQgbW9kZWwiKSxuLlByb21pc2UucmVz
b2x2ZSh0aGlzLmNvbnRleHQpfSxpbml0aWFsaXplOmZ1bmN0aW9uKGUpe3RoaXMubmFtZXM9ZS5u
YW1lc3x8W10sdGhpcy5jb250ZXh0PWUuY29udGV4dH0sc2VyaWFsaXplOmZ1bmN0aW9uKGUpe3Zh
ciB0PWV8fHRoaXMuY29udGV4dCxuPXRoaXMubmFtZXMscj10aGlzLnNlcmlhbGl6ZXJ8fHRoaXMu
aGFuZGxlciYmdGhpcy5oYW5kbGVyLnNlcmlhbGl6ZSxpPXt9CitpZihsKHQpKXJldHVybiBpW25b
MF1dPXQsaQoraWYocilyZXR1cm4gcih0LG4pCitpZigxPT09bi5sZW5ndGgpe3ZhciBvPW5bMF0K
K3JldHVybi9faWQkLy50ZXN0KG8pP2lbb109dC5pZDppW29dPXQsaX19fSksUT1kKEMse2luaXRp
YWxpemU6ZnVuY3Rpb24oZSl7dGhpcy5wYXJhbXM9ZS5wYXJhbXN8fHt9fSxnZXRNb2RlbDpmdW5j
dGlvbihlKXt2YXIgdD10aGlzLnBhcmFtcworZSYmZS5xdWVyeVBhcmFtcyYmKHQ9e30saSh0LHRo
aXMucGFyYW1zKSx0LnF1ZXJ5UGFyYW1zPWUucXVlcnlQYXJhbXMpCit2YXIgbj10aGlzLmhhbmRs
ZXIscj1tKG4sImRlc2VyaWFsaXplIil8fG0obiwibW9kZWwiKQorcmV0dXJuIHRoaXMucnVuU2hh
cmVkTW9kZWxIb29rKGUscixbdF0pfX0pCitBLmtsYXNzZXM9e3Jlc29sdmVkOkcscGFyYW06USxv
YmplY3Q6S30KK3ZhciBZPWQoeCx7bmFtZTpudWxsLHBpdm90SGFuZGxlcjpudWxsLGNvbnRleHRz
Om51bGwscXVlcnlQYXJhbXM6bnVsbCxpbml0aWFsaXplOmZ1bmN0aW9uKGUpe3RoaXMubmFtZT1l
Lm5hbWUsdGhpcy5waXZvdEhhbmRsZXI9ZS5waXZvdEhhbmRsZXIsdGhpcy5jb250ZXh0cz1lLmNv
bnRleHRzfHxbXSx0aGlzLnF1ZXJ5UGFyYW1zPWUucXVlcnlQYXJhbXN9LGFwcGx5VG9TdGF0ZTpm
dW5jdGlvbihlLHQsbixyLGkpe3ZhciBzPW8oW3RoaXMubmFtZV0uY29uY2F0KHRoaXMuY29udGV4
dHMpKSxhPXNbMF0sdT10LmhhbmRsZXJzRm9yKGFbMF0pLGw9dVt1Lmxlbmd0aC0xXS5oYW5kbGVy
CityZXR1cm4gdGhpcy5hcHBseVRvSGFuZGxlcnMoZSx1LG4sbCxyLG51bGwsaSl9LGFwcGx5VG9I
YW5kbGVyczpmdW5jdGlvbihlLHQsbixyLG8scyxhKXt2YXIgdSxsLGMscCxmLGgsZCxtLGcseT1u
ZXcgdixiPXRoaXMuY29udGV4dHMuc2xpY2UoMCksXz10Lmxlbmd0aAoraWYodGhpcy5waXZvdEhh
bmRsZXIpZm9yKHU9MCxsPXQubGVuZ3RoO3U8bDsrK3UpaWYodFt1XS5oYW5kbGVyPT09dGhpcy5w
aXZvdEhhbmRsZXIuX2hhbmRsZXJOYW1lKXtfPXUKK2JyZWFrfWZvcih1PXQubGVuZ3RoLTE7dT49
MDstLXUpYz10W3VdLHA9Yy5oYW5kbGVyLGY9ZS5oYW5kbGVySW5mb3NbdV0saD1udWxsLGMubmFt
ZXMubGVuZ3RoPjA/dT49Xz9oPXRoaXMuY3JlYXRlUGFyYW1IYW5kbGVySW5mbyhwLG4sYy5uYW1l
cyxiLGYpOihkPWEocCksaD10aGlzLmdldEhhbmRsZXJJbmZvRm9yRHluYW1pY1NlZ21lbnQocCxu
LGMubmFtZXMsYixmLHIsdSxkKSk6aD10aGlzLmNyZWF0ZVBhcmFtSGFuZGxlckluZm8ocCxuLGMu
bmFtZXMsYixmKSxzJiYoaD1oLmJlY29tZVJlc29sdmVkKG51bGwsaC5jb250ZXh0KSxtPWYmJmYu
Y29udGV4dCxjLm5hbWVzLmxlbmd0aD4wJiZoLmNvbnRleHQ9PT1tJiYoaC5wYXJhbXM9ZiYmZi5w
YXJhbXMpLGguY29udGV4dD1tKSxnPWYsKHU+PV98fGguc2hvdWxkU3VwZXJjZWRlKGYpKSYmKF89
TWF0aC5taW4odSxfKSxnPWgpLG8mJiFzJiYoZz1nLmJlY29tZVJlc29sdmVkKG51bGwsZy5jb250
ZXh0KSkseS5oYW5kbGVySW5mb3MudW5zaGlmdChnKQoraWYoYi5sZW5ndGg+MCl0aHJvdyBuZXcg
RXJyb3IoIk1vcmUgY29udGV4dCBvYmplY3RzIHdlcmUgcGFzc2VkIHRoYW4gdGhlcmUgYXJlIGR5
bmFtaWMgc2VnbWVudHMgZm9yIHRoZSByb3V0ZTogIityKQorcmV0dXJuIG98fHRoaXMuaW52YWxp
ZGF0ZUNoaWxkcmVuKHkuaGFuZGxlckluZm9zLF8pLGkoeS5xdWVyeVBhcmFtcyx0aGlzLnF1ZXJ5
UGFyYW1zfHx7fSkseX0saW52YWxpZGF0ZUNoaWxkcmVuOmZ1bmN0aW9uKGUsdCl7dmFyIG4scixp
Citmb3Iobj10LHI9ZS5sZW5ndGg7bjxyOysrbilpPWVbbl0sZVtuXT1pLmdldFVucmVzb2x2ZWQo
KX0sZ2V0SGFuZGxlckluZm9Gb3JEeW5hbWljU2VnbWVudDpmdW5jdGlvbihlLHQsbixyLGksbyxz
LGEpe3ZhciB1LGMKK2lmKHIubGVuZ3RoPjApe2lmKHU9cltyLmxlbmd0aC0xXSxsKHUpKXJldHVy
biB0aGlzLmNyZWF0ZVBhcmFtSGFuZGxlckluZm8oZSx0LG4scixpKQorci5wb3AoKX1lbHNle2lm
KGkmJmkubmFtZT09PWUpcmV0dXJuIGkKK2lmKCF0aGlzLnByZVRyYW5zaXRpb25TdGF0ZSlyZXR1
cm4gaQorYz10aGlzLnByZVRyYW5zaXRpb25TdGF0ZS5oYW5kbGVySW5mb3Nbc10sdT1jJiZjLmNv
bnRleHR9cmV0dXJuIEEoIm9iamVjdCIse25hbWU6ZSxnZXRIYW5kbGVyOnQsc2VyaWFsaXplcjph
LGNvbnRleHQ6dSxuYW1lczpufSl9LGNyZWF0ZVBhcmFtSGFuZGxlckluZm86ZnVuY3Rpb24oZSx0
LG4scixpKXtmb3IodmFyIG8scyxhLHU9e30sYz1uLmxlbmd0aDtjLS07KWlmKG89aSYmZT09PWku
bmFtZSYmaS5wYXJhbXN8fHt9LHM9cltyLmxlbmd0aC0xXSxhPW5bY10sbChzKSl1W2FdPSIiK3Iu
cG9wKCkKK2Vsc2V7aWYoIW8uaGFzT3duUHJvcGVydHkoYSkpdGhyb3cgbmV3IEVycm9yKCJZb3Ug
ZGlkbid0IHByb3ZpZGUgZW5vdWdoIHN0cmluZy9udW1lcmljIHBhcmFtZXRlcnMgdG8gc2F0aXNm
eSBhbGwgb2YgdGhlIGR5bmFtaWMgc2VnbWVudHMgZm9yIHJvdXRlICIrZSkKK3VbYV09b1thXX1y
ZXR1cm4gQSgicGFyYW0iLHtuYW1lOmUsZ2V0SGFuZGxlcjp0LHBhcmFtczp1fSl9fSkKK1QucHJv
dG90eXBlPVcoRXJyb3IucHJvdG90eXBlKQordmFyIEo9ZCh4LHt1cmw6bnVsbCxpbml0aWFsaXpl
OmZ1bmN0aW9uKGUpe3RoaXMudXJsPWUudXJsfSxhcHBseVRvU3RhdGU6ZnVuY3Rpb24oZSx0LG4p
e2Z1bmN0aW9uIHIoZSl7aWYoZSYmZS5pbmFjY2Vzc2libGVCeVVSTCl0aHJvdyBuZXcgVChtKQor
cmV0dXJuIGV9dmFyIG8scyxhLHUsbCxjLHAsZj1uZXcgdixoPXQucmVjb2duaXplKHRoaXMudXJs
KQoraWYoIWgpdGhyb3cgbmV3IFQodGhpcy51cmwpCit2YXIgZD0hMSxtPXRoaXMudXJsCitmb3Io
Yz0wLHA9aC5sZW5ndGg7YzxwOysrYylvPWhbY10scz1vLmhhbmRsZXIsYT1BKCJwYXJhbSIse25h
bWU6cyxnZXRIYW5kbGVyOm4scGFyYW1zOm8ucGFyYW1zfSksdT1hLmhhbmRsZXIsdT9yKHUpOmEu
aGFuZGxlclByb21pc2U9YS5oYW5kbGVyUHJvbWlzZS50aGVuKHIpLGw9ZS5oYW5kbGVySW5mb3Nb
Y10sZHx8YS5zaG91bGRTdXBlcmNlZGUobCk/KGQ9ITAsZi5oYW5kbGVySW5mb3NbY109YSk6Zi5o
YW5kbGVySW5mb3NbY109bAorcmV0dXJuIGkoZi5xdWVyeVBhcmFtcyxoLnF1ZXJ5UGFyYW1zKSxm
fX0pLFg9QXJyYXkucHJvdG90eXBlLnBvcAorUy5wcm90b3R5cGU9e21hcDpmdW5jdGlvbihlKXt0
aGlzLnJlY29nbml6ZXIuZGVsZWdhdGU9dGhpcy5kZWxlZ2F0ZSx0aGlzLnJlY29nbml6ZXIubWFw
KGUsZnVuY3Rpb24oZSx0KXt2YXIgbixyLGkKK2ZvcihuPXQubGVuZ3RoLTEscj0hMDtuPj0wJiZy
Oy0tbilpPXRbbl0sZS5hZGQodCx7YXM6aS5oYW5kbGVyfSkscj0iLyI9PT1pLnBhdGh8fCIiPT09
aS5wYXRofHwiLmluZGV4Ij09PWkuaGFuZGxlci5zbGljZSgtNil9KX0saGFzUm91dGU6ZnVuY3Rp
b24oZSl7cmV0dXJuIHRoaXMucmVjb2duaXplci5oYXNSb3V0ZShlKX0sZ2V0SGFuZGxlcjpmdW5j
dGlvbigpe30sZ2V0U2VyaWFsaXplcjpmdW5jdGlvbigpe30scXVlcnlQYXJhbXNUcmFuc2l0aW9u
OmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG89dGhpcworcmV0dXJuIGsodGhpcyxyLGUpLCF0JiZ0
aGlzLmFjdGl2ZVRyYW5zaXRpb24/dGhpcy5hY3RpdmVUcmFuc2l0aW9uOihpPW5ldyBfKHRoaXMp
LGkucXVlcnlQYXJhbXNPbmx5PSEwLG4ucXVlcnlQYXJhbXM9VSh0aGlzLHIuaGFuZGxlckluZm9z
LHIucXVlcnlQYXJhbXMsaSksaS5wcm9taXNlPWkucHJvbWlzZS50aGVuKGZ1bmN0aW9uKGUpe3Jl
dHVybiBEKGksbiwhMCksby5kaWRUcmFuc2l0aW9uJiZvLmRpZFRyYW5zaXRpb24oby5jdXJyZW50
SGFuZGxlckluZm9zKSxlfSxudWxsLGgoIlRyYW5zaXRpb24gY29tcGxldGUiKSksaSl9LHRyYW5z
aXRpb25CeUludGVudDpmdW5jdGlvbihlKXt0cnl7cmV0dXJuIFIuYXBwbHkodGhpcyxhcmd1bWVu
dHMpfWNhdGNoKHQpe3JldHVybiBuZXcgXyh0aGlzLGUsbnVsbCx0KX19LHJlc2V0OmZ1bmN0aW9u
KCl7dGhpcy5zdGF0ZSYmYyh0aGlzLnN0YXRlLmhhbmRsZXJJbmZvcy5zbGljZSgpLnJldmVyc2Uo
KSxmdW5jdGlvbihlKXtnKGUuaGFuZGxlciwiZXhpdCIpfSksdGhpcy5vbGRTdGF0ZT12b2lkIDAs
dGhpcy5zdGF0ZT1uZXcgdix0aGlzLmN1cnJlbnRIYW5kbGVySW5mb3M9bnVsbH0sYWN0aXZlVHJh
bnNpdGlvbjpudWxsLGhhbmRsZVVSTDpmdW5jdGlvbihlKXt2YXIgdD1ILmNhbGwoYXJndW1lbnRz
KQorcmV0dXJuIi8iIT09ZS5jaGFyQXQoMCkmJih0WzBdPSIvIitlKSxJKHRoaXMsdCkubWV0aG9k
KG51bGwpfSx1cGRhdGVVUkw6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInVwZGF0ZVVSTCBp
cyBub3QgaW1wbGVtZW50ZWQiKX0scmVwbGFjZVVSTDpmdW5jdGlvbihlKXt0aGlzLnVwZGF0ZVVS
TChlKX0sdHJhbnNpdGlvblRvOmZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxhcmd1bWVudHMpfSxp
bnRlcm1lZGlhdGVUcmFuc2l0aW9uVG86ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGFyZ3VtZW50
cywhMCl9LHJlZnJlc2g6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGk9dGhpcy5hY3RpdmVUcmFuc2l0
aW9uLG89aT9pLnN0YXRlOnRoaXMuc3RhdGUscz1vLmhhbmRsZXJJbmZvcyx1PXt9Citmb3IodD0w
LG49cy5sZW5ndGg7dDxuOysrdClyPXNbdF0sdVtyLm5hbWVdPXIucGFyYW1zfHx7fQorYSh0aGlz
LCJTdGFydGluZyBhIHJlZnJlc2ggdHJhbnNpdGlvbiIpCit2YXIgbD1uZXcgWSh7bmFtZTpzW3Mu
bGVuZ3RoLTFdLm5hbWUscGl2b3RIYW5kbGVyOmV8fHNbMF0uaGFuZGxlcixjb250ZXh0czpbXSxx
dWVyeVBhcmFtczp0aGlzLl9jaGFuZ2VkUXVlcnlQYXJhbXN8fG8ucXVlcnlQYXJhbXN8fHt9fSks
Yz10aGlzLnRyYW5zaXRpb25CeUludGVudChsLCExKQorcmV0dXJuIGkmJiJyZXBsYWNlIj09PWku
dXJsTWV0aG9kJiZjLm1ldGhvZChpLnVybE1ldGhvZCksY30scmVwbGFjZVdpdGg6ZnVuY3Rpb24o
KXtyZXR1cm4gSSh0aGlzLGFyZ3VtZW50cykubWV0aG9kKCJyZXBsYWNlIil9LGdlbmVyYXRlOmZ1
bmN0aW9uKGUpe3ZhciB0LG4scixzLGE9byhILmNhbGwoYXJndW1lbnRzLDEpKSx1PWFbMF0sbD1h
WzFdLGM9bmV3IFkoe25hbWU6ZSxjb250ZXh0czp1fSkscD1jLmFwcGx5VG9TdGF0ZSh0aGlzLnN0
YXRlLHRoaXMucmVjb2duaXplcix0aGlzLmdldEhhbmRsZXIsbnVsbCx0aGlzLmdldFNlcmlhbGl6
ZXIpLGY9e30KK2Zvcih0PTAsbj1wLmhhbmRsZXJJbmZvcy5sZW5ndGg7dDxuOysrdClyPXAuaGFu
ZGxlckluZm9zW3RdLHM9ci5zZXJpYWxpemUoKSxpKGYscykKK3JldHVybiBmLnF1ZXJ5UGFyYW1z
PWwsdGhpcy5yZWNvZ25pemVyLmdlbmVyYXRlKGUsZil9LGFwcGx5SW50ZW50OmZ1bmN0aW9uKGUs
dCl7dmFyIG49bmV3IFkoe25hbWU6ZSxjb250ZXh0czp0fSkscj10aGlzLmFjdGl2ZVRyYW5zaXRp
b24mJnRoaXMuYWN0aXZlVHJhbnNpdGlvbi5zdGF0ZXx8dGhpcy5zdGF0ZQorcmV0dXJuIG4uYXBw
bHlUb1N0YXRlKHIsdGhpcy5yZWNvZ25pemVyLHRoaXMuZ2V0SGFuZGxlcixudWxsLHRoaXMuZ2V0
U2VyaWFsaXplcil9LGlzQWN0aXZlSW50ZW50OmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvLHMsYT1y
fHx0aGlzLnN0YXRlLHU9YS5oYW5kbGVySW5mb3MKK2lmKCF1Lmxlbmd0aClyZXR1cm4hMQordmFy
IGw9dVt1Lmxlbmd0aC0xXS5uYW1lLGM9dGhpcy5yZWNvZ25pemVyLmhhbmRsZXJzRm9yKGwpLHA9
MAorZm9yKHM9Yy5sZW5ndGg7cDxzJiYobz11W3BdLG8ubmFtZSE9PWUpOysrcCk7aWYocD09PWMu
bGVuZ3RoKXJldHVybiExCit2YXIgaD1uZXcgdgoraC5oYW5kbGVySW5mb3M9dS5zbGljZSgwLHAr
MSksYz1jLnNsaWNlKDAscCsxKQordmFyIGQ9bmV3IFkoe25hbWU6bCxjb250ZXh0czp0fSksbT1k
LmFwcGx5VG9IYW5kbGVycyhoLGMsdGhpcy5nZXRIYW5kbGVyLGwsITAsITAsdGhpcy5nZXRTZXJp
YWxpemVyKSxnPU0obS5oYW5kbGVySW5mb3MsaC5oYW5kbGVySW5mb3MpCitpZighbnx8IWcpcmV0
dXJuIGcKK3ZhciB5PXt9CitpKHksbikKK3ZhciBiPWEucXVlcnlQYXJhbXMKK2Zvcih2YXIgXyBp
biBiKWIuaGFzT3duUHJvcGVydHkoXykmJnkuaGFzT3duUHJvcGVydHkoXykmJih5W19dPWJbX10p
CityZXR1cm4gZyYmIWYoeSxuKX0saXNBY3RpdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9byhILmNhbGwo
YXJndW1lbnRzLDEpKQorcmV0dXJuIHRoaXMuaXNBY3RpdmVJbnRlbnQoZSx0WzBdLHRbMV0pfSx0
cmlnZ2VyOmZ1bmN0aW9uKCl7dmFyIGU9SC5jYWxsKGFyZ3VtZW50cykKK3AodGhpcyx0aGlzLmN1
cnJlbnRIYW5kbGVySW5mb3MsITEsZSl9LGxvZzpudWxsfSxlLlRyYW5zaXRpb249XyxlLmRlZmF1
bHQ9U30pLGUoInJzdnAiLFsiZXhwb3J0cyIsImVtYmVyLWJhYmVsIiwibm9kZS1tb2R1bGUiXSxm
dW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiCitmdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuPTAs
cj1lLmxlbmd0aDtuPHI7bisrKWlmKGVbbl09PT10KXJldHVybiBuCityZXR1cm4tMX1mdW5jdGlv
biBpKGUpe3ZhciB0PWUuX3Byb21pc2VDYWxsYmFja3MKK3JldHVybiB0fHwodD1lLl9wcm9taXNl
Q2FsbGJhY2tzPXt9KSx0fWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4ib25lcnJvciI9PT1lP3ZvaWQg
YmUub24oImVycm9yIix0KToyIT09YXJndW1lbnRzLmxlbmd0aD9iZVtlXTp2b2lkKGJlW2VdPXQp
fWZ1bmN0aW9uIHMoZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGV8fCJvYmplY3QiPT10eXBl
b2YgZSYmbnVsbCE9PWV9ZnVuY3Rpb24gYShlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZX1m
dW5jdGlvbiB1KGUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9PWV9ZnVuY3Rpb24g
bCgpe31mdW5jdGlvbiBjKCl7c2V0VGltZW91dChmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8Q2Uu
bGVuZ3RoO2UrKyl7dmFyIHQ9Q2VbZV0sbj10LnBheWxvYWQKK24uZ3VpZD1uLmtleStuLmlkLG4u
Y2hpbGRHdWlkPW4ua2V5K24uY2hpbGRJZCxuLmVycm9yJiYobi5zdGFjaz1uLmVycm9yLnN0YWNr
KSxiZS50cmlnZ2VyKHQubmFtZSx0LnBheWxvYWQpfUNlLmxlbmd0aD0wfSw1MCl9ZnVuY3Rpb24g
cChlLHQsbil7MT09PUNlLnB1c2goe25hbWU6ZSxwYXlsb2FkOntrZXk6dC5fZ3VpZEtleSxpZDp0
Ll9pZCxldmVudE5hbWU6ZSxkZXRhaWw6dC5fcmVzdWx0LGNoaWxkSWQ6biYmbi5faWQsbGFiZWw6
dC5fbGFiZWwsdGltZVN0YW1wOkVlKCksZXJyb3I6YmVbImluc3RydW1lbnQtd2l0aC1zdGFjayJd
P25ldyBFcnJvcih0Ll9sYWJlbCk6bnVsbH19KSYmYygpfWZ1bmN0aW9uIGYoZSx0KXt2YXIgbj10
aGlzCitpZihlJiYib2JqZWN0Ij09dHlwZW9mIGUmJmUuY29uc3RydWN0b3I9PT1uKXJldHVybiBl
Cit2YXIgcj1uZXcgbihkLHQpCityZXR1cm4gXyhyLGUpLHJ9ZnVuY3Rpb24gaCgpe3JldHVybiBu
ZXcgVHlwZUVycm9yKCJBIHByb21pc2VzIGNhbGxiYWNrIGNhbm5vdCByZXR1cm4gdGhhdCBzYW1l
IHByb21pc2UuIil9ZnVuY3Rpb24gZCgpe31mdW5jdGlvbiBtKGUpe3RyeXtyZXR1cm4gZS50aGVu
fWNhdGNoKGUpe3JldHVybiBTZS5lcnJvcj1lLFNlfX1mdW5jdGlvbiBnKGUsdCxuLHIpe3RyeXtl
LmNhbGwodCxuLHIpfWNhdGNoKGUpe3JldHVybiBlfX1mdW5jdGlvbiB5KGUsdCxuKXtiZS5hc3lu
YyhmdW5jdGlvbihlKXt2YXIgcj0hMSxpPWcobix0LGZ1bmN0aW9uKG4pe3J8fChyPSEwLHQhPT1u
P18oZSxuLHZvaWQgMCk6RShlLG4pKX0sZnVuY3Rpb24odCl7cnx8KHI9ITAseChlLHQpKX0sIlNl
dHRsZTogIisoZS5fbGFiZWx8fCIgdW5rbm93biBwcm9taXNlIikpCishciYmaSYmKHI9ITAseChl
LGkpKX0sZSl9ZnVuY3Rpb24gdihlLHQpe3QuX3N0YXRlPT09QWU/RShlLHQuX3Jlc3VsdCk6dC5f
c3RhdGU9PT1UZT8odC5fb25FcnJvcj1udWxsLHgoZSx0Ll9yZXN1bHQpKTpDKHQsdm9pZCAwLGZ1
bmN0aW9uKG4pe3QhPT1uP18oZSxuLHZvaWQgMCk6RShlLG4pfSxmdW5jdGlvbih0KXtyZXR1cm4g
eChlLHQpfSl9ZnVuY3Rpb24gYihlLHQsbil7dC5jb25zdHJ1Y3Rvcj09PWUuY29uc3RydWN0b3Im
Jm49PT1rJiZlLmNvbnN0cnVjdG9yLnJlc29sdmU9PT1mP3YoZSx0KTpuPT09U2U/KHgoZSxTZS5l
cnJvciksU2UuZXJyb3I9bnVsbCk6dm9pZCAwPT09bj9FKGUsdCk6YShuKT95KGUsdCxuKTpFKGUs
dCl9ZnVuY3Rpb24gXyhlLHQpe2U9PT10P0UoZSx0KTpzKHQpP2IoZSx0LG0odCkpOkUoZSx0KX1m
dW5jdGlvbiB3KGUpe2UuX29uRXJyb3ImJmUuX29uRXJyb3IoZS5fcmVzdWx0KSxPKGUpfWZ1bmN0
aW9uIEUoZSx0KXtlLl9zdGF0ZT09PU9lJiYoZS5fcmVzdWx0PXQsZS5fc3RhdGU9QWUsMD09PWUu
X3N1YnNjcmliZXJzLmxlbmd0aD9iZS5pbnN0cnVtZW50JiZwKCJmdWxmaWxsZWQiLGUpOmJlLmFz
eW5jKE8sZSkpfWZ1bmN0aW9uIHgoZSx0KXtlLl9zdGF0ZT09PU9lJiYoZS5fc3RhdGU9VGUsZS5f
cmVzdWx0PXQsYmUuYXN5bmModyxlKSl9ZnVuY3Rpb24gQyhlLHQsbixyKXt2YXIgaT1lLl9zdWJz
Y3JpYmVycyxvPWkubGVuZ3RoCitlLl9vbkVycm9yPW51bGwsaVtvXT10LGlbbytBZV09bixpW28r
VGVdPXIsMD09PW8mJmUuX3N0YXRlJiZiZS5hc3luYyhPLGUpfWZ1bmN0aW9uIE8oZSl7dmFyIHQ9
ZS5fc3Vic2NyaWJlcnMsbj1lLl9zdGF0ZQoraWYoYmUuaW5zdHJ1bWVudCYmcChuPT09QWU/ImZ1
bGZpbGxlZCI6InJlamVjdGVkIixlKSwwIT09dC5sZW5ndGgpe2Zvcih2YXIgcj12b2lkIDAsaT12
b2lkIDAsbz1lLl9yZXN1bHQscz0wO3M8dC5sZW5ndGg7cys9MylyPXRbc10saT10W3Mrbl0scj9T
KG4scixpLG8pOmkobykKK2UuX3N1YnNjcmliZXJzLmxlbmd0aD0wfX1mdW5jdGlvbiBBKCl7dGhp
cy5lcnJvcj1udWxsfWZ1bmN0aW9uIFQoZSx0KXt0cnl7cmV0dXJuIGUodCl9Y2F0Y2goZSl7cmV0
dXJuIFJlLmVycm9yPWUsUmV9fWZ1bmN0aW9uIFMoZSx0LG4scil7dmFyIGk9YShuKSxvPXZvaWQg
MCxzPXZvaWQgMCx1PXZvaWQgMCxsPXZvaWQgMAoraWYoaSl7aWYobz1UKG4sciksbz09PVJlPyhs
PSEwLHM9by5lcnJvcixvLmVycm9yPW51bGwpOnU9ITAsdD09PW8pcmV0dXJuIHZvaWQgeCh0LGgo
KSl9ZWxzZSBvPXIsdT0hMAordC5fc3RhdGUhPT1PZXx8KGkmJnU/Xyh0LG8pOmw/eCh0LHMpOmU9
PT1BZT9FKHQsbyk6ZT09PVRlJiZ4KHQsbykpfWZ1bmN0aW9uIFIoZSx0KXt2YXIgbj0hMQordHJ5
e3QoZnVuY3Rpb24odCl7bnx8KG49ITAsXyhlLHQpKX0sZnVuY3Rpb24odCl7bnx8KG49ITAseChl
LHQpKX0pfWNhdGNoKHQpe3goZSx0KX19ZnVuY3Rpb24gayhlLHQsbil7dmFyIHI9dGhpcyxpPXIu
X3N0YXRlCitpZihpPT09QWUmJiFlfHxpPT09VGUmJiF0KXJldHVybiBiZS5pbnN0cnVtZW50JiZw
KCJjaGFpbmVkIixyLHIpLHIKK3IuX29uRXJyb3I9bnVsbAordmFyIG89bmV3IHIuY29uc3RydWN0
b3IoZCxuKSxzPXIuX3Jlc3VsdAoraWYoYmUuaW5zdHJ1bWVudCYmcCgiY2hhaW5lZCIscixvKSxp
KXt2YXIgYT1hcmd1bWVudHNbaS0xXQorYmUuYXN5bmMoZnVuY3Rpb24oKXtyZXR1cm4gUyhpLG8s
YSxzKX0pfWVsc2UgQyhyLG8sZSx0KQorcmV0dXJuIG99ZnVuY3Rpb24gTihlLHQsbil7cmV0dXJu
IGU9PT1BZT97c3RhdGU6ImZ1bGZpbGxlZCIsdmFsdWU6bn06e3N0YXRlOiJyZWplY3RlZCIscmVh
c29uOm59fWZ1bmN0aW9uIFAoZSx0LG4scil7dGhpcy5faW5zdGFuY2VDb25zdHJ1Y3Rvcj1lLHRo
aXMucHJvbWlzZT1uZXcgZShkLHIpLHRoaXMuX2Fib3J0T25SZWplY3Q9bix0aGlzLl92YWxpZGF0
ZUlucHV0KHQpPyh0aGlzLl9pbnB1dD10LHRoaXMubGVuZ3RoPXQubGVuZ3RoLHRoaXMuX3JlbWFp
bmluZz10Lmxlbmd0aCx0aGlzLl9pbml0KCksMD09PXRoaXMubGVuZ3RoP0UodGhpcy5wcm9taXNl
LHRoaXMuX3Jlc3VsdCk6KHRoaXMubGVuZ3RoPXRoaXMubGVuZ3RofHwwLHRoaXMuX2VudW1lcmF0
ZSgpLDA9PT10aGlzLl9yZW1haW5pbmcmJkUodGhpcy5wcm9taXNlLHRoaXMuX3Jlc3VsdCkpKTp4
KHRoaXMucHJvbWlzZSx0aGlzLl92YWxpZGF0aW9uRXJyb3IoKSl9ZnVuY3Rpb24gaihlLHQpe3Jl
dHVybiBuZXcgUCh0aGlzLGUsITAsdCkucHJvbWlzZX1mdW5jdGlvbiBEKGUsdCl7dmFyIG49dGhp
cyxyPW5ldyBuKGQsdCkKK2lmKCF3ZShlKSlyZXR1cm4geChyLG5ldyBUeXBlRXJyb3IoIllvdSBt
dXN0IHBhc3MgYW4gYXJyYXkgdG8gcmFjZS4iKSkscgorZm9yKHZhciBpPTA7ci5fc3RhdGU9PT1P
ZSYmaTxlLmxlbmd0aDtpKyspQyhuLnJlc29sdmUoZVtpXSksdm9pZCAwLGZ1bmN0aW9uKGUpe3Jl
dHVybiBfKHIsZSl9LGZ1bmN0aW9uKGUpe3JldHVybiB4KHIsZSl9KQorcmV0dXJuIHJ9ZnVuY3Rp
b24gTChlLHQpe3ZhciBuPXRoaXMscj1uZXcgbihkLHQpCityZXR1cm4geChyLGUpLHJ9ZnVuY3Rp
b24gSSgpe3Rocm93IG5ldyBUeXBlRXJyb3IoIllvdSBtdXN0IHBhc3MgYSByZXNvbHZlciBmdW5j
dGlvbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIHByb21pc2UgY29uc3RydWN0b3IiKX1m
dW5jdGlvbiBNKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiRmFpbGVkIHRvIGNvbnN0cnVjdCAnUHJv
bWlzZSc6IFBsZWFzZSB1c2UgdGhlICduZXcnIG9wZXJhdG9yLCB0aGlzIG9iamVjdCBjb25zdHJ1
Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uIil9ZnVuY3Rpb24gRihlLHQpe3Ro
aXMuX2lkPU5lKyssdGhpcy5fbGFiZWw9dCx0aGlzLl9zdGF0ZT12b2lkIDAsdGhpcy5fcmVzdWx0
PXZvaWQgMCx0aGlzLl9zdWJzY3JpYmVycz1bXSxiZS5pbnN0cnVtZW50JiZwKCJjcmVhdGVkIix0
aGlzKSxkIT09ZSYmKCJmdW5jdGlvbiIhPXR5cGVvZiBlJiZJKCksdGhpcyBpbnN0YW5jZW9mIEY/
Uih0aGlzLGUpOk0oKSl9ZnVuY3Rpb24geigpe3RoaXMudmFsdWU9dm9pZCAwfWZ1bmN0aW9uIFUo
ZSl7dHJ5e3JldHVybiBlLnRoZW59Y2F0Y2goZSl7cmV0dXJuIFBlLnZhbHVlPWUsUGV9fWZ1bmN0
aW9uIEIoZSx0LG4pe3RyeXtlLmFwcGx5KHQsbil9Y2F0Y2goZSl7cmV0dXJuIFBlLnZhbHVlPWUs
UGV9fWZ1bmN0aW9uIHEoZSx0KXtmb3IodmFyIG49e30scj1lLmxlbmd0aCxpPW5ldyBBcnJheShy
KSxvPTA7bzxyO28rKylpW29dPWVbb10KK2Zvcih2YXIgcz0wO3M8dC5sZW5ndGg7cysrKXtuW3Rb
c11dPWlbcysxXX1yZXR1cm4gbn1mdW5jdGlvbiBIKGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxuPW5l
dyBBcnJheSh0LTEpLHI9MTtyPHQ7cisrKW5bci0xXT1lW3JdCityZXR1cm4gbn1mdW5jdGlvbiBW
KGUsdCl7cmV0dXJue3RoZW46ZnVuY3Rpb24obixyKXtyZXR1cm4gZS5jYWxsKHQsbixyKX19fWZ1
bmN0aW9uIFcoZSxuKXt2YXIgcj1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLHI9YXJndW1lbnRz
Lmxlbmd0aCxpPW5ldyBBcnJheShyKzEpLG89ITEscz0wO3M8cjsrK3Mpe3ZhciBhPWFyZ3VtZW50
c1tzXQoraWYoIW8pe2lmKChvPUsoYSkpPT09amUpe3ZhciB1PW5ldyBGKGQpCityZXR1cm4geCh1
LGplLnZhbHVlKSx1fW8mJiEwIT09byYmKGE9VihvLGEpKX1pW3NdPWF9dmFyIGw9bmV3IEYoZCkK
K3JldHVybiBpW3JdPWZ1bmN0aW9uKGUsdCl7ZT94KGwsZSk6dm9pZCAwPT09bj9fKGwsdCk6ITA9
PT1uP18obCxIKGFyZ3VtZW50cykpOndlKG4pP18obCxxKGFyZ3VtZW50cyxuKSk6XyhsLHQpfSxv
P0cobCxpLGUsdCk6JChsLGksZSx0KX0KK3JldHVybigwLHQuZGVmYXVsdHMpKHIsZSkscn1mdW5j
dGlvbiAkKGUsdCxuLHIpe3ZhciBpPUIobixyLHQpCityZXR1cm4gaT09PVBlJiZ4KGUsaS52YWx1
ZSksZX1mdW5jdGlvbiBHKGUsdCxuLHIpe3JldHVybiBGLmFsbCh0KS50aGVuKGZ1bmN0aW9uKHQp
e3ZhciBpPUIobixyLHQpCityZXR1cm4gaT09PVBlJiZ4KGUsaS52YWx1ZSksZX0pfWZ1bmN0aW9u
IEsoZSl7cmV0dXJuISghZXx8Im9iamVjdCIhPXR5cGVvZiBlKSYmKGUuY29uc3RydWN0b3I9PT1G
fHxVKGUpKX1mdW5jdGlvbiBRKGUsdCl7cmV0dXJuIEYuYWxsKGUsdCl9ZnVuY3Rpb24gWShlLHQs
bil7dGhpcy5fc3VwZXJDb25zdHJ1Y3RvcihlLHQsITEsbil9ZnVuY3Rpb24gSihlLHQpe3JldHVy
biBuZXcgWShGLGUsdCkucHJvbWlzZX1mdW5jdGlvbiBYKGUsdCl7cmV0dXJuIEYucmFjZShlLHQp
fWZ1bmN0aW9uIFooZSx0LG4pe3RoaXMuX3N1cGVyQ29uc3RydWN0b3IoZSx0LCEwLG4pfWZ1bmN0
aW9uIGVlKGUsdCl7cmV0dXJuIG5ldyBaKEYsZSx0KS5wcm9taXNlfWZ1bmN0aW9uIHRlKGUsdCxu
KXt0aGlzLl9zdXBlckNvbnN0cnVjdG9yKGUsdCwhMSxuKX1mdW5jdGlvbiBuZShlLHQpe3JldHVy
biBuZXcgdGUoRixlLHQpLnByb21pc2V9ZnVuY3Rpb24gcmUoZSl7dGhyb3cgc2V0VGltZW91dChm
dW5jdGlvbigpe3Rocm93IGV9KSxlfWZ1bmN0aW9uIGllKGUpe3ZhciB0PXtyZXNvbHZlOnZvaWQg
MCxyZWplY3Q6dm9pZCAwfQorcmV0dXJuIHQucHJvbWlzZT1uZXcgRihmdW5jdGlvbihlLG4pe3Qu
cmVzb2x2ZT1lLHQucmVqZWN0PW59LGUpLHR9ZnVuY3Rpb24gb2UoZSx0LG4pe3JldHVybiBGLmFs
bChlLG4pLnRoZW4oZnVuY3Rpb24oZSl7aWYoIWEodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiWW91
IG11c3QgcGFzcyBhIGZ1bmN0aW9uIGFzIG1hcCdzIHNlY29uZCBhcmd1bWVudC4iKQorZm9yKHZh
ciByPWUubGVuZ3RoLGk9bmV3IEFycmF5KHIpLG89MDtvPHI7bysrKWlbb109dChlW29dKQorcmV0
dXJuIEYuYWxsKGksbil9KX1mdW5jdGlvbiBzZShlLHQpe3JldHVybiBGLnJlc29sdmUoZSx0KX1m
dW5jdGlvbiBhZShlLHQpe3JldHVybiBGLnJlamVjdChlLHQpfWZ1bmN0aW9uIHVlKGUsdCl7cmV0
dXJuIEYuYWxsKGUsdCl9ZnVuY3Rpb24gbGUoZSx0KXtyZXR1cm4gRi5yZXNvbHZlKGUsdCkudGhl
bihmdW5jdGlvbihlKXtyZXR1cm4gdWUoZSx0KX0pfWZ1bmN0aW9uIGNlKGUsdCxuKXtyZXR1cm4o
d2UoZSk/dWUoZSxuKTpsZShlLG4pKS50aGVuKGZ1bmN0aW9uKGUpe2lmKCFhKHQpKXRocm93IG5l
dyBUeXBlRXJyb3IoIllvdSBtdXN0IHBhc3MgYSBmdW5jdGlvbiBhcyBmaWx0ZXIncyBzZWNvbmQg
YXJndW1lbnQuIikKK2Zvcih2YXIgcj1lLmxlbmd0aCxpPW5ldyBBcnJheShyKSxvPTA7bzxyO28r
KylpW29dPXQoZVtvXSkKK3JldHVybiB1ZShpLG4pLnRoZW4oZnVuY3Rpb24odCl7Zm9yKHZhciBu
PW5ldyBBcnJheShyKSxpPTAsbz0wO288cjtvKyspdFtvXSYmKG5baV09ZVtvXSxpKyspCityZXR1
cm4gbi5sZW5ndGg9aSxufSl9KX1mdW5jdGlvbiBwZShlLHQpe0JlW0RlXT1lLEJlW0RlKzFdPXQs
Mj09PShEZSs9MikmJnFlKCl9ZnVuY3Rpb24gZmUoKXtyZXR1cm4gdm9pZCAwIT09TGU/ZnVuY3Rp
b24oKXtMZShkZSl9OmhlKCl9ZnVuY3Rpb24gaGUoKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4g
c2V0VGltZW91dChkZSwxKX19ZnVuY3Rpb24gZGUoKXtmb3IodmFyIGU9MDtlPERlO2UrPTIpeygw
LEJlW2VdKShCZVtlKzFdKSxCZVtlXT12b2lkIDAsQmVbZSsxXT12b2lkIDB9RGU9MH1mdW5jdGlv
biBtZSgpe2JlLm9uLmFwcGx5KGJlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gZ2UoKXtiZS5vZmYuYXBw
bHkoYmUsYXJndW1lbnRzKX1lLmZpbHRlcj1lLmFzeW5jPWUubWFwPWUucmVqZWN0PWUucmVzb2x2
ZT1lLm9mZj1lLm9uPWUuY29uZmlndXJlPWUuZGVub2RlaWZ5PWUuZGVmZXI9ZS5yZXRocm93PWUu
aGFzaFNldHRsZWQ9ZS5oYXNoPWUucmFjZT1lLmFsbFNldHRsZWQ9ZS5hbGw9ZS5FdmVudFRhcmdl
dD1lLlByb21pc2U9ZS5jYXN0PWUuYXNhcD12b2lkIDAKK3ZhciB5ZSx2ZT17bWl4aW46ZnVuY3Rp
b24oZSl7cmV0dXJuIGUub249dGhpcy5vbixlLm9mZj10aGlzLm9mZixlLnRyaWdnZXI9dGhpcy50
cmlnZ2VyLGUuX3Byb21pc2VDYWxsYmFja3M9dm9pZCAwLGV9LG9uOmZ1bmN0aW9uKGUsdCl7aWYo
ImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2FsbGJhY2sgbXVzdCBi
ZSBhIGZ1bmN0aW9uIikKK3ZhciBuPWkodGhpcyksbz12b2lkIDAKK289bltlXSxvfHwobz1uW2Vd
PVtdKSwtMT09PXIobyx0KSYmby5wdXNoKHQpfSxvZmY6ZnVuY3Rpb24oZSx0KXt2YXIgbj1pKHRo
aXMpLG89dm9pZCAwLHM9dm9pZCAwCitpZighdClyZXR1cm4gdm9pZChuW2VdPVtdKQorbz1uW2Vd
LC0xIT09KHM9cihvLHQpKSYmby5zcGxpY2UocywxKX0sdHJpZ2dlcjpmdW5jdGlvbihlLHQsbil7
dmFyIHI9aSh0aGlzKSxvPXZvaWQgMAoraWYobz1yW2VdKWZvcih2YXIgcz0wO3M8by5sZW5ndGg7
cysrKSgwLG9bc10pKHQsbil9fSxiZT17aW5zdHJ1bWVudDohMX0KK3ZlLm1peGluKGJlKQordmFy
IF9lPXZvaWQgMAorX2U9QXJyYXkuaXNBcnJheT9BcnJheS5pc0FycmF5OmZ1bmN0aW9uKGUpe3Jl
dHVybiJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSl9
Cit2YXIgd2U9X2UsRWU9RGF0ZS5ub3d8fGZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRU
aW1lKCl9LHhlPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKGUpe2lmKGFyZ3VtZW50cy5sZW5ndGg+
MSl0aHJvdyBuZXcgRXJyb3IoIlNlY29uZCBhcmd1bWVudCBub3Qgc3VwcG9ydGVkIikKK2lmKCJv
YmplY3QiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGFu
IG9iamVjdCIpCityZXR1cm4gbC5wcm90b3R5cGU9ZSxuZXcgbH0sQ2U9W10sT2U9dm9pZCAwLEFl
PTEsVGU9MixTZT1uZXcgQSxSZT1uZXcgQQorUC5wcm90b3R5cGUuX3ZhbGlkYXRlSW5wdXQ9ZnVu
Y3Rpb24oZSl7cmV0dXJuIHdlKGUpfSxQLnByb3RvdHlwZS5fdmFsaWRhdGlvbkVycm9yPWZ1bmN0
aW9uKCl7cmV0dXJuIG5ldyBFcnJvcigiQXJyYXkgTWV0aG9kcyBtdXN0IGJlIHByb3ZpZGVkIGFu
IEFycmF5Iil9LFAucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKCl7dGhpcy5fcmVzdWx0PW5ldyBB
cnJheSh0aGlzLmxlbmd0aCl9LFAucHJvdG90eXBlLl9lbnVtZXJhdGU9ZnVuY3Rpb24oKXtmb3Io
dmFyIGU9dGhpcy5sZW5ndGgsdD10aGlzLnByb21pc2Usbj10aGlzLl9pbnB1dCxyPTA7dC5fc3Rh
dGU9PT1PZSYmcjxlO3IrKyl0aGlzLl9lYWNoRW50cnkobltyXSxyKX0sUC5wcm90b3R5cGUuX3Nl
dHRsZU1heWJlVGhlbmFibGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9pbnN0YW5jZUNvbnN0
cnVjdG9yLHI9bi5yZXNvbHZlCitpZihyPT09Zil7dmFyIGk9bShlKQoraWYoaT09PWsmJmUuX3N0
YXRlIT09T2UpZS5fb25FcnJvcj1udWxsLHRoaXMuX3NldHRsZWRBdChlLl9zdGF0ZSx0LGUuX3Jl
c3VsdCkKK2Vsc2UgaWYoImZ1bmN0aW9uIiE9dHlwZW9mIGkpdGhpcy5fcmVtYWluaW5nLS0sdGhp
cy5fcmVzdWx0W3RdPXRoaXMuX21ha2VSZXN1bHQoQWUsdCxlKQorZWxzZSBpZihuPT09Ril7dmFy
IG89bmV3IG4oZCkKK2IobyxlLGkpLHRoaXMuX3dpbGxTZXR0bGVBdChvLHQpfWVsc2UgdGhpcy5f
d2lsbFNldHRsZUF0KG5ldyBuKGZ1bmN0aW9uKHQpe3JldHVybiB0KGUpfSksdCl9ZWxzZSB0aGlz
Ll93aWxsU2V0dGxlQXQocihlKSx0KX0sUC5wcm90b3R5cGUuX2VhY2hFbnRyeT1mdW5jdGlvbihl
LHQpe3UoZSk/dGhpcy5fc2V0dGxlTWF5YmVUaGVuYWJsZShlLHQpOih0aGlzLl9yZW1haW5pbmct
LSx0aGlzLl9yZXN1bHRbdF09dGhpcy5fbWFrZVJlc3VsdChBZSx0LGUpKX0sUC5wcm90b3R5cGUu
X3NldHRsZWRBdD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5wcm9taXNlCityLl9zdGF0ZT09
PU9lJiYodGhpcy5fcmVtYWluaW5nLS0sdGhpcy5fYWJvcnRPblJlamVjdCYmZT09PVRlP3gocixu
KTp0aGlzLl9yZXN1bHRbdF09dGhpcy5fbWFrZVJlc3VsdChlLHQsbikpLDA9PT10aGlzLl9yZW1h
aW5pbmcmJkUocix0aGlzLl9yZXN1bHQpfSxQLnByb3RvdHlwZS5fbWFrZVJlc3VsdD1mdW5jdGlv
bihlLHQsbil7cmV0dXJuIG59LFAucHJvdG90eXBlLl93aWxsU2V0dGxlQXQ9ZnVuY3Rpb24oZSx0
KXt2YXIgbj10aGlzCitDKGUsdm9pZCAwLGZ1bmN0aW9uKGUpe3JldHVybiBuLl9zZXR0bGVkQXQo
QWUsdCxlKX0sZnVuY3Rpb24oZSl7cmV0dXJuIG4uX3NldHRsZWRBdChUZSx0LGUpfSl9Cit2YXIg
a2U9InJzdnBfIitFZSgpKyItIixOZT0wCitGLmNhc3Q9ZixGLmFsbD1qLEYucmFjZT1ELEYucmVz
b2x2ZT1mLEYucmVqZWN0PUwsRi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkYsX2d1aWRLZXk6a2Us
X29uRXJyb3I6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcworYmUuYWZ0ZXIoZnVuY3Rpb24oKXt0Ll9v
bkVycm9yJiZiZS50cmlnZ2VyKCJlcnJvciIsZSx0Ll9sYWJlbCl9KX0sdGhlbjprLGNhdGNoOmZ1
bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMudGhlbih2b2lkIDAsZSx0KX0sZmluYWxseTpmdW5jdGlv
bihlLHQpe3ZhciBuPXRoaXMscj1uLmNvbnN0cnVjdG9yCityZXR1cm4gbi50aGVuKGZ1bmN0aW9u
KHQpe3JldHVybiByLnJlc29sdmUoZSgpKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHR9KX0sZnVu
Y3Rpb24odCl7cmV0dXJuIHIucmVzb2x2ZShlKCkpLnRoZW4oZnVuY3Rpb24oKXt0aHJvdyB0fSl9
LHQpfX0KK3ZhciBQZT1uZXcgeixqZT1uZXcgegorWS5wcm90b3R5cGU9eGUoUC5wcm90b3R5cGUp
LFkucHJvdG90eXBlLl9zdXBlckNvbnN0cnVjdG9yPVAsWS5wcm90b3R5cGUuX21ha2VSZXN1bHQ9
TixZLnByb3RvdHlwZS5fdmFsaWRhdGlvbkVycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBFcnJv
cigiYWxsU2V0dGxlZCBtdXN0IGJlIGNhbGxlZCB3aXRoIGFuIGFycmF5Iil9LFoucHJvdG90eXBl
PXhlKFAucHJvdG90eXBlKSxaLnByb3RvdHlwZS5fc3VwZXJDb25zdHJ1Y3Rvcj1QLFoucHJvdG90
eXBlLl9pbml0PWZ1bmN0aW9uKCl7dGhpcy5fcmVzdWx0PXt9fSxaLnByb3RvdHlwZS5fdmFsaWRh
dGVJbnB1dD1mdW5jdGlvbihlKXtyZXR1cm4gZSYmIm9iamVjdCI9PXR5cGVvZiBlfSxaLnByb3Rv
dHlwZS5fdmFsaWRhdGlvbkVycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBFcnJvcigiUHJvbWlz
ZS5oYXNoIG11c3QgYmUgY2FsbGVkIHdpdGggYW4gb2JqZWN0Iil9LFoucHJvdG90eXBlLl9lbnVt
ZXJhdGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS5wcm9taXNlLG49ZS5faW5wdXQscj1bXQor
Zm9yKHZhciBpIGluIG4pdC5fc3RhdGU9PT1PZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9w
ZXJ0eS5jYWxsKG4saSkmJnIucHVzaCh7cG9zaXRpb246aSxlbnRyeTpuW2ldfSkKK3ZhciBvPXIu
bGVuZ3RoCitlLl9yZW1haW5pbmc9bworZm9yKHZhciBzPXZvaWQgMCxhPTA7dC5fc3RhdGU9PT1P
ZSYmYTxvO2ErKylzPXJbYV0sZS5fZWFjaEVudHJ5KHMuZW50cnkscy5wb3NpdGlvbil9LHRlLnBy
b3RvdHlwZT14ZShaLnByb3RvdHlwZSksdGUucHJvdG90eXBlLl9zdXBlckNvbnN0cnVjdG9yPVAs
dGUucHJvdG90eXBlLl9tYWtlUmVzdWx0PU4sdGUucHJvdG90eXBlLl92YWxpZGF0aW9uRXJyb3I9
ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEVycm9yKCJoYXNoU2V0dGxlZCBtdXN0IGJlIGNhbGxlZCB3
aXRoIGFuIG9iamVjdCIpfQordmFyIERlPTAsTGU9dm9pZCAwLEllPSJ1bmRlZmluZWQiIT10eXBl
b2Ygd2luZG93P3dpbmRvdzp2b2lkIDAsTWU9SWV8fHt9LEZlPU1lLk11dGF0aW9uT2JzZXJ2ZXJ8
fE1lLldlYktpdE11dGF0aW9uT2JzZXJ2ZXIsemU9InVuZGVmaW5lZCI9PXR5cGVvZiBzZWxmJiYi
dW5kZWZpbmVkIiE9dHlwZW9mIHByb2Nlc3MmJiJbb2JqZWN0IHByb2Nlc3NdIj09PXt9LnRvU3Ry
aW5nLmNhbGwocHJvY2VzcyksVWU9InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OENsYW1wZWRBcnJh
eSYmInVuZGVmaW5lZCIhPXR5cGVvZiBpbXBvcnRTY3JpcHRzJiYidW5kZWZpbmVkIiE9dHlwZW9m
IE1lc3NhZ2VDaGFubmVsLEJlPW5ldyBBcnJheSgxZTMpLHFlPXZvaWQgMAorcWU9emU/ZnVuY3Rp
b24oKXt2YXIgZT1wcm9jZXNzLm5leHRUaWNrLHQ9cHJvY2Vzcy52ZXJzaW9ucy5ub2RlLm1hdGNo
KC9eKD86KFxkKylcLik/KD86KFxkKylcLik/KFwqfFxkKykkLykKK3JldHVybiBBcnJheS5pc0Fy
cmF5KHQpJiYiMCI9PT10WzFdJiYiMTAiPT09dFsyXSYmKGU9c2V0SW1tZWRpYXRlKSxmdW5jdGlv
bigpe3JldHVybiBlKGRlKX19KCk6RmU/ZnVuY3Rpb24oKXt2YXIgZT0wLHQ9bmV3IEZlKGRlKSxu
PWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKQorcmV0dXJuIHQub2JzZXJ2ZShuLHtjaGFyYWN0
ZXJEYXRhOiEwfSksZnVuY3Rpb24oKXtyZXR1cm4gbi5kYXRhPWU9KytlJTJ9fSgpOlVlP2Z1bmN0
aW9uKCl7dmFyIGU9bmV3IE1lc3NhZ2VDaGFubmVsCityZXR1cm4gZS5wb3J0MS5vbm1lc3NhZ2U9
ZGUsZnVuY3Rpb24oKXtyZXR1cm4gZS5wb3J0Mi5wb3N0TWVzc2FnZSgwKX19KCk6dm9pZCAwPT09
SWUmJiJmdW5jdGlvbiI9PXR5cGVvZiBuLnJlcXVpcmU/ZnVuY3Rpb24oKXt0cnl7dmFyIGU9bi5y
ZXF1aXJlLHQ9ZSgidmVydHgiKQorcmV0dXJuIExlPXQucnVuT25Mb29wfHx0LnJ1bk9uQ29udGV4
dCxmZSgpfWNhdGNoKGUpe3JldHVybiBoZSgpfX0oKTpoZSgpCitpZigib2JqZWN0Ij09dHlwZW9m
IHNlbGYpc2VsZgorZWxzZXtpZigib2JqZWN0IiE9dHlwZW9mIGdsb2JhbCl0aHJvdyBuZXcgRXJy
b3IoIm5vIGdsb2JhbDogYHNlbGZgIG9yIGBnbG9iYWxgIGZvdW5kIikKK2dsb2JhbH1iZS5hc3lu
Yz1wZSxiZS5hZnRlcj1mdW5jdGlvbihlKXtyZXR1cm4gc2V0VGltZW91dChlLDApfQordmFyIEhl
PXNlLFZlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGJlLmFzeW5jKGUsdCl9CitpZigidW5kZWZpbmVk
IiE9dHlwZW9mIHdpbmRvdyYmIm9iamVjdCI9PXR5cGVvZiB3aW5kb3cuX19QUk9NSVNFX0lOU1RS
VU1FTlRBVElPTl9fKXt2YXIgV2U9d2luZG93Ll9fUFJPTUlTRV9JTlNUUlVNRU5UQVRJT05fXwor
bygiaW5zdHJ1bWVudCIsITApCitmb3IodmFyICRlIGluIFdlKVdlLmhhc093blByb3BlcnR5KCRl
KSYmbWUoJGUsV2VbJGVdKX12YXIgR2U9KHllPXthc2FwOnBlLGNhc3Q6SGUsUHJvbWlzZTpGLEV2
ZW50VGFyZ2V0OnZlLGFsbDpRLGFsbFNldHRsZWQ6SixyYWNlOlgsaGFzaDplZSxoYXNoU2V0dGxl
ZDpuZSxyZXRocm93OnJlLGRlZmVyOmllLGRlbm9kZWlmeTpXLGNvbmZpZ3VyZTpvLG9uOm1lLG9m
ZjpnZSxyZXNvbHZlOnNlLHJlamVjdDphZSxtYXA6b2V9LHllLmFzeW5jPVZlLHllLmZpbHRlcj1j
ZSx5ZSkKK2UuYXNhcD1wZSxlLmNhc3Q9SGUsZS5Qcm9taXNlPUYsZS5FdmVudFRhcmdldD12ZSxl
LmFsbD1RLGUuYWxsU2V0dGxlZD1KLGUucmFjZT1YLGUuaGFzaD1lZSxlLmhhc2hTZXR0bGVkPW5l
LGUucmV0aHJvdz1yZSxlLmRlZmVyPWllLGUuZGVub2RlaWZ5PVcsZS5jb25maWd1cmU9byxlLm9u
PW1lLGUub2ZmPWdlLGUucmVzb2x2ZT1zZSxlLnJlamVjdD1hZSxlLm1hcD1vZSxlLmFzeW5jPVZl
LGUuZmlsdGVyPWNlLGUuZGVmYXVsdD1HZX0pCit0KCJlbWJlciIpfSgpLGZ1bmN0aW9uKCl7ZnVu
Y3Rpb24gZShlLHQpe2RlZmluZShlLFtdLGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiCityZXR1cm4g
T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHR9KX0oZnVu
Y3Rpb24oKXt2YXIgdD17ZW1iZXI6e2RlZmF1bHQ6RW1iZXJ9LCJlbWJlci1hcHBsaWNhdGlvbiI6
e2RlZmF1bHQ6RW1iZXIuQXBwbGljYXRpb259LCJlbWJlci1hcnJheSI6e2RlZmF1bHQ6RW1iZXIu
QXJyYXl9LCJlbWJlci1hcnJheS9tdXRhYmxlIjp7ZGVmYXVsdDpFbWJlci5NdXRhYmxlQXJyYXl9
LCJlbWJlci1hcnJheS91dGlscyI6e0E6RW1iZXIuQSxpc0VtYmVyQXJyYXk6RW1iZXIuaXNBcnJh
eSx3cmFwOkVtYmVyLm1ha2VBcnJheX0sImVtYmVyLWNvbXBvbmVudCI6e2RlZmF1bHQ6RW1iZXIu
Q29tcG9uZW50fSwiZW1iZXItY29tcG9uZW50cy9jaGVja2JveCI6e2RlZmF1bHQ6RW1iZXIuQ2hl
Y2tib3h9LCJlbWJlci1jb21wb25lbnRzL3RleHQtYXJlYSI6e2RlZmF1bHQ6RW1iZXIuVGV4dEFy
ZWF9LCJlbWJlci1jb21wb25lbnRzL3RleHQtZmllbGQiOntkZWZhdWx0OkVtYmVyLlRleHRGaWVs
ZH0sImVtYmVyLWNvbnRyb2xsZXIiOntkZWZhdWx0OkVtYmVyLkNvbnRyb2xsZXJ9LCJlbWJlci1j
b250cm9sbGVyL2luamVjdCI6e2RlZmF1bHQ6RW1iZXIuaW5qZWN0LmNvbnRyb2xsZXJ9LCJlbWJl
ci1jb250cm9sbGVyL3Byb3h5Ijp7ZGVmYXVsdDpFbWJlci5BcnJheVByb3h5fSwiZW1iZXItY29u
dHJvbGxlcnMvc29ydGFibGUiOntkZWZhdWx0OkVtYmVyLlNvcnRhYmxlTWl4aW59LCJlbWJlci1k
ZWJ1ZyI6e2xvZzpFbWJlci5kZWJ1ZyxpbnNwZWN0OkVtYmVyLmluc3BlY3QscnVuOkVtYmVyLnJ1
bkluRGVidWcsd2FybjpFbWJlci53YXJufSwiZW1iZXItZGVidWcvY29udGFpbmVyLWRlYnVnLWFk
YXB0ZXIiOntkZWZhdWx0OkVtYmVyLkNvbnRhaW5lckRlYnVnQWRhcHRlcn0sImVtYmVyLWRlYnVn
L2RhdGEtYWRhcHRlciI6e2RlZmF1bHQ6RW1iZXIuRGF0YUFkYXB0ZXJ9LCJlbWJlci1kZXByZWNh
dGlvbnMiOntkZXByZWNhdGU6RW1iZXIuZGVwcmVjYXRlLGRlcHJlY2F0ZUZ1bmM6RW1iZXIuZGVw
cmVjYXRlRnVuY30sImVtYmVyLWVudW1lcmFibGUiOntkZWZhdWx0OkVtYmVyLkVudW1lcmFibGV9
LCJlbWJlci1ldmVudGVkIjp7ZGVmYXVsdDpFbWJlci5FdmVudGVkfSwiZW1iZXItZXZlbnRlZC9v
biI6e2RlZmF1bHQ6RW1iZXIub259LCJlbWJlci1nbG9iYWxzLXJlc29sdmVyIjp7ZGVmYXVsdDpF
bWJlci5EZWZhdWx0UmVzb2x2ZXJ9LCJlbWJlci1oZWxwZXIiOntkZWZhdWx0OkVtYmVyLkhlbHBl
cixoZWxwZXI6RW1iZXIuSGVscGVyJiZFbWJlci5IZWxwZXIuaGVscGVyfSwiZW1iZXItaW5zdHJ1
bWVudGF0aW9uIjp7aW5zdHJ1bWVudDpFbWJlci5JbnN0cnVtZW50YXRpb24uaW5zdHJ1bWVudCxy
ZXNldDpFbWJlci5JbnN0cnVtZW50YXRpb24ucmVzZXQsc3Vic2NyaWJlOkVtYmVyLkluc3RydW1l
bnRhdGlvbi5zdWJzY3JpYmUsdW5zdWJzY3JpYmU6RW1iZXIuSW5zdHJ1bWVudGF0aW9uLnVuc3Vi
c2NyaWJlfSwiZW1iZXItbG9jYXRpb25zL2hhc2giOntkZWZhdWx0OkVtYmVyLkhhc2hMb2NhdGlv
bn0sImVtYmVyLWxvY2F0aW9ucy9oaXN0b3J5Ijp7ZGVmYXVsdDpFbWJlci5IaXN0b3J5TG9jYXRp
b259LCJlbWJlci1sb2NhdGlvbnMvbm9uZSI6e2RlZmF1bHQ6RW1iZXIuTm9uZUxvY2F0aW9ufSwi
ZW1iZXItbWFwIjp7ZGVmYXVsdDpFbWJlci5NYXAsd2l0aERlZmF1bHQ6RW1iZXIuTWFwV2l0aERl
ZmF1bHR9LCJlbWJlci1tZXRhbC9kZXN0cm95Ijp7ZGVmYXVsdDpFbWJlci5kZXN0cm95fSwiZW1i
ZXItbWV0YWwvZXZlbnRzIjp7YWRkTGlzdGVuZXI6RW1iZXIuYWRkTGlzdGVuZXIscmVtb3ZlTGlz
dGVuZXI6RW1iZXIucmVtb3ZlTGlzdGVuZXIsc2VuZDpFbWJlci5zZW5kRXZlbnR9LCJlbWJlci1t
ZXRhbC9nZXQiOntkZWZhdWx0OkVtYmVyLmdldCxnZXRQcm9wZXJ0aWVzOkVtYmVyLmdldFByb3Bl
cnRpZXN9LCJlbWJlci1tZXRhbC9taXhpbiI6e2RlZmF1bHQ6RW1iZXIuTWl4aW59LCJlbWJlci1t
ZXRhbC9vYnNlcnZlciI6e2RlZmF1bHQ6RW1iZXIub2JzZXJ2ZXIsYWRkT2JzZXJ2ZXI6RW1iZXIu
YWRkT2JzZXJ2ZXIscmVtb3ZlT2JzZXJ2ZXI6RW1iZXIucmVtb3ZlT2JzZXJ2ZXJ9LCJlbWJlci1t
ZXRhbC9vbi1sb2FkIjp7ZGVmYXVsdDpFbWJlci5vbkxvYWQscnVuOkVtYmVyLnJ1bkxvYWRIb29r
c30sImVtYmVyLW1ldGFsL3NldCI6e2RlZmF1bHQ6RW1iZXIuc2V0LHNldFByb3BlcnRpZXM6RW1i
ZXIuc2V0UHJvcGVydGllcyx0cnlTZXQ6RW1iZXIudHJ5U2V0fSwiZW1iZXItbWV0YWwvdXRpbHMi
OnthbGlhc01ldGhvZDpFbWJlci5hbGlhc01ldGhvZCxhc3NlcnQ6RW1iZXIuYXNzZXJ0LGNhY2hl
Rm9yOkVtYmVyLmNhY2hlRm9yLGNvcHk6RW1iZXIuY29weSxndWlkRm9yOkVtYmVyLmd1aWRGb3J9
LCJlbWJlci1vYmplY3QiOntkZWZhdWx0OkVtYmVyLk9iamVjdH0sImVtYmVyLW93bmVyL2dldCI6
e2RlZmF1bHQ6RW1iZXIuZ2V0T3duZXJ9LCJlbWJlci1vd25lci9zZXQiOntkZWZhdWx0OkVtYmVy
LnNldE93bmVyfSwiZW1iZXItcGxhdGZvcm0iOnthc3NpZ246RW1iZXIuYXNzaWdufHxFbWJlci5t
ZXJnZSxjcmVhdGU6RW1iZXIuY3JlYXRlLGRlZmluZVByb3BlcnR5OkVtYmVyLnBsYXRmb3JtLmRl
ZmluZVByb3BlcnR5LGhhc0FjY2Vzc29yczpFbWJlci5wbGF0Zm9ybS5oYXNQcm9wZXJ0eUFjY2Vz
c29ycyxrZXlzOkVtYmVyLmtleXN9LCJlbWJlci1yb3V0ZSI6e2RlZmF1bHQ6RW1iZXIuUm91dGV9
LCJlbWJlci1yb3V0ZXIiOntkZWZhdWx0OkVtYmVyLlJvdXRlcn0sImVtYmVyLXJ1bmxvb3AiOntk
ZWZhdWx0OkVtYmVyLnJ1bixiZWdpbjpFbWJlci5ydW4uYmVnaW4sYmluZDpFbWJlci5ydW4uYmlu
ZCxjYW5jZWw6RW1iZXIucnVuLmNhbmNlbCxkZWJvdW5jZTpFbWJlci5ydW4uZGVib3VuY2UsZW5k
OkVtYmVyLnJ1bi5lbmQsam9pbjpFbWJlci5ydW4uam9pbixsYXRlcjpFbWJlci5ydW4ubGF0ZXIs
bmV4dDpFbWJlci5ydW4ubmV4dCxvbmNlOkVtYmVyLnJ1bi5vbmNlLHNjaGVkdWxlOkVtYmVyLnJ1
bi5zY2hlZHVsZSxzY2hlZHVsZU9uY2U6RW1iZXIucnVuLnNjaGVkdWxlT25jZSx0aHJvdHRsZTpF
bWJlci5ydW4udGhyb3R0bGV9LCJlbWJlci1zZXJ2aWNlIjp7ZGVmYXVsdDpFbWJlci5TZXJ2aWNl
fSwiZW1iZXItc2VydmljZS9pbmplY3QiOntkZWZhdWx0OkVtYmVyLmluamVjdC5zZXJ2aWNlfSwi
ZW1iZXItc2V0L29yZGVyZWQiOntkZWZhdWx0OkVtYmVyLk9yZGVyZWRTZXR9LCJlbWJlci1zdHJp
bmciOntjYW1lbGl6ZTpFbWJlci5TdHJpbmcuY2FtZWxpemUsY2FwaXRhbGl6ZTpFbWJlci5TdHJp
bmcuY2FwaXRhbGl6ZSxjbGFzc2lmeTpFbWJlci5TdHJpbmcuY2xhc3NpZnksZGFzaGVyaXplOkVt
YmVyLlN0cmluZy5kYXNoZXJpemUsZGVjYW1lbGl6ZTpFbWJlci5TdHJpbmcuZGVjYW1lbGl6ZSxm
bXQ6RW1iZXIuU3RyaW5nLmZtdCxodG1sU2FmZTpFbWJlci5TdHJpbmcuaHRtbFNhZmUsbG9jOkVt
YmVyLlN0cmluZy5sb2MsdW5kZXJzY29yZTpFbWJlci5TdHJpbmcudW5kZXJzY29yZSx3OkVtYmVy
LlN0cmluZy53fSwiZW1iZXItdXRpbHMiOntpc0JsYW5rOkVtYmVyLmlzQmxhbmssaXNFbXB0eTpF
bWJlci5pc0VtcHR5LGlzTm9uZTpFbWJlci5pc05vbmUsaXNQcmVzZW50OkVtYmVyLmlzUHJlc2Vu
dCx0cnlJbnZva2U6RW1iZXIudHJ5SW52b2tlLHR5cGVPZjpFbWJlci50eXBlT2Z9fQordFsiZW1i
ZXItY29tcHV0ZWQiXT17ZGVmYXVsdDpFbWJlci5jb21wdXRlZH0KK2Zvcih2YXIgbj1bImVtcHR5
Iiwibm90RW1wdHkiLCJub25lIiwibm90IiwiYm9vbCIsIm1hdGNoIiwiZXF1YWwiLCJndCIsImd0
ZSIsImx0IiwibHRlIiwiYWxpYXMiLCJvbmVXYXkiLCJyZWFkcyIsInJlYWRPbmx5IiwiZGVwcmVj
YXRpbmdBbGlhcyIsImFuZCIsIm9yIiwiY29sbGVjdCIsInN1bSIsIm1pbiIsIm1heCIsIm1hcCIs
InNvcnQiLCJzZXREaWZmIiwibWFwQnkiLCJtYXBQcm9wZXJ0eSIsImZpbHRlciIsImZpbHRlckJ5
IiwiZmlsdGVyUHJvcGVydHkiLCJ1bmlxIiwidW5pb24iLCJpbnRlcnNlY3QiXSxyPTAsaT1uLmxl
bmd0aDtyPGk7cisrKXt2YXIgbz1uW3JdCit0WyJlbWJlci1jb21wdXRlZCJdW29dPUVtYmVyLmNv
bXB1dGVkW29dfWZvcih2YXIgcyBpbiB0KWUocyx0W3NdKX0pKCksZnVuY3Rpb24oKXtpZihFbWJl
ci5UZXN0KXt2YXIgdD17ImVtYmVyLXRlc3QiOntkZWZhdWx0OkVtYmVyLlRlc3R9LCJlbWJlci10
ZXN0L2FkYXB0ZXIiOntkZWZhdWx0OkVtYmVyLlRlc3QuQWRhcHRlcn0sImVtYmVyLXRlc3QvcXVu
aXQtYWRhcHRlciI6e2RlZmF1bHQ6RW1iZXIuVGVzdC5RVW5pdEFkYXB0ZXJ9fQorZm9yKHZhciBu
IGluIHQpZShuLHRbbl0pfX0oKSxlKCJqcXVlcnkiLHtkZWZhdWx0OnNlbGYualF1ZXJ5fSksZSgi
cnN2cCIse2RlZmF1bHQ6RW1iZXIuUlNWUH0pfSgpLGRlZmluZSgiZW1iZXIvbG9hZC1pbml0aWFs
aXplcnMiLFsiZXhwb3J0cyIsImVtYmVyLWxvYWQtaW5pdGlhbGl6ZXJzIiwiZW1iZXIiXSxmdW5j
dGlvbihlLHQsbil7bi5kZWZhdWx0LmRlcHJlY2F0ZSgiVXNhZ2Ugb2YgYGVtYmVyL2xvYWQtaW5p
dGlhbGl6ZXJzYCBtb2R1bGUgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVwZGF0ZSB0byBgZW1iZXIt
bG9hZC1pbml0aWFsaXplcnNgLiIsITEse2lkOiJlbWJlci1sb2FkLWluaXRpYWxpemVycy5sZWdh
Y3ktc2hpbXMiLHVudGlsOiIzLjAuMCJ9KSxlLmRlZmF1bHQ9dC5kZWZhdWx0fSksY3JlYXRlRGVw
cmVjYXRlZE1vZHVsZSgiZW1iZXIvcmVzb2x2ZXIiKSxjcmVhdGVEZXByZWNhdGVkTW9kdWxlKCJy
ZXNvbHZlciIpLGRlZmluZSgiZW1iZXItYWpheC9hamF4LXJlcXVlc3QiLFsiZXhwb3J0cyIsImVt
YmVyIiwiZW1iZXItYWpheC9taXhpbnMvYWpheC1yZXF1ZXN0Il0sZnVuY3Rpb24oZSx0LG4pe3Zh
ciByPXQuZGVmYXVsdC5PYmplY3QKK2UuZGVmYXVsdD1yLmV4dGVuZChuLmRlZmF1bHQpfSksZGVm
aW5lKCJlbWJlci1hamF4L2Vycm9ycyIsWyJleHBvcnRzIiwiZW1iZXIiXSxmdW5jdGlvbihlLHQp
e2Z1bmN0aW9uIG4oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aDw9MXx8dm9pZCAwPT09YXJndW1l
bnRzWzFdPyJBamF4IG9wZXJhdGlvbiBmYWlsZWQiOmFyZ3VtZW50c1sxXQoreC5jYWxsKHRoaXMs
dCksdGhpcy5lcnJvcnM9ZXx8W3t0aXRsZToiQWpheCBFcnJvciIsZGV0YWlsOnR9XX1mdW5jdGlv
biByKGUpe24uY2FsbCh0aGlzLGUsIlJlcXVlc3Qgd2FzIHJlamVjdGVkIGJlY2F1c2UgaXQgd2Fz
IGludmFsaWQiKX1mdW5jdGlvbiBpKGUpe24uY2FsbCh0aGlzLGUsIkFqYXggYXV0aG9yaXphdGlv
biBmYWlsZWQiKX1mdW5jdGlvbiBvKGUpe24uY2FsbCh0aGlzLGUsIlJlcXVlc3Qgd2FzIHJlamVj
dGVkIGJlY2F1c2UgdXNlciBpcyBub3QgcGVybWl0dGVkIHRvIHBlcmZvcm0gdGhpcyBvcGVyYXRp
b24uIil9ZnVuY3Rpb24gcyhlKXtuLmNhbGwodGhpcyxlLCJSZXF1ZXN0IHdhcyBmb3JtYXR0ZWQg
aW5jb3JyZWN0bHkuIil9ZnVuY3Rpb24gYShlKXtuLmNhbGwodGhpcyxlLCJSZXNvdXJjZSB3YXMg
bm90IGZvdW5kLiIpfWZ1bmN0aW9uIHUoKXtuLmNhbGwodGhpcyxudWxsLCJUaGUgYWpheCBvcGVy
YXRpb24gdGltZWQgb3V0Iil9ZnVuY3Rpb24gbCgpe24uY2FsbCh0aGlzLG51bGwsIlRoZSBhamF4
IG9wZXJhdGlvbiB3YXMgYWJvcnRlZCIpfWZ1bmN0aW9uIGMoZSl7bi5jYWxsKHRoaXMsZSwiVGhl
IGFqYXggb3BlcmF0aW9uIGZhaWxlZCBkdWUgdG8gYSBjb25mbGljdCIpfWZ1bmN0aW9uIHAoZSl7
bi5jYWxsKHRoaXMsZSwiUmVxdWVzdCB3YXMgcmVqZWN0ZWQgZHVlIHRvIHNlcnZlciBlcnJvciIp
fWZ1bmN0aW9uIGYoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBufWZ1bmN0aW9uIGgoZSl7cmV0dXJu
IGYoZSk/ZSBpbnN0YW5jZW9mIGk6NDAxPT09ZX1mdW5jdGlvbiBkKGUpe3JldHVybiBmKGUpP2Ug
aW5zdGFuY2VvZiBvOjQwMz09PWV9ZnVuY3Rpb24gbShlKXtyZXR1cm4gZihlKT9lIGluc3RhbmNl
b2Ygcjo0MjI9PT1lfWZ1bmN0aW9uIGcoZSl7cmV0dXJuIGYoZSk/ZSBpbnN0YW5jZW9mIHM6NDAw
PT09ZX1mdW5jdGlvbiB5KGUpe3JldHVybiBmKGUpP2UgaW5zdGFuY2VvZiBhOjQwND09PWV9ZnVu
Y3Rpb24gdihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHV9ZnVuY3Rpb24gYihlKXtyZXR1cm4gZihl
KT9lIGluc3RhbmNlb2YgbDowPT09ZX1mdW5jdGlvbiBfKGUpe3JldHVybiBmKGUpP2UgaW5zdGFu
Y2VvZiBjOjQwOT09PWV9ZnVuY3Rpb24gdyhlKXtyZXR1cm4gZihlKT9lIGluc3RhbmNlb2YgcDpl
Pj01MDAmJmU8NjAwfWZ1bmN0aW9uIEUoZSl7dmFyIHQ9cGFyc2VJbnQoZSwxMCkKK3JldHVybiB0
Pj0yMDAmJnQ8MzAwfHwzMDQ9PT10fWUuQWpheEVycm9yPW4sZS5JbnZhbGlkRXJyb3I9cixlLlVu
YXV0aG9yaXplZEVycm9yPWksZS5Gb3JiaWRkZW5FcnJvcj1vLGUuQmFkUmVxdWVzdEVycm9yPXMs
ZS5Ob3RGb3VuZEVycm9yPWEsZS5UaW1lb3V0RXJyb3I9dSxlLkFib3J0RXJyb3I9bCxlLkNvbmZs
aWN0RXJyb3I9YyxlLlNlcnZlckVycm9yPXAsZS5pc0FqYXhFcnJvcj1mLGUuaXNVbmF1dGhvcml6
ZWRFcnJvcj1oLGUuaXNGb3JiaWRkZW5FcnJvcj1kLGUuaXNJbnZhbGlkRXJyb3I9bSxlLmlzQmFk
UmVxdWVzdEVycm9yPWcsZS5pc05vdEZvdW5kRXJyb3I9eSxlLmlzVGltZW91dEVycm9yPXYsZS5p
c0Fib3J0RXJyb3I9YixlLmlzQ29uZmxpY3RFcnJvcj1fLGUuaXNTZXJ2ZXJFcnJvcj13LGUuaXNT
dWNjZXNzPUUKK3ZhciB4PXQuZGVmYXVsdC5FcnJvcgorbi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0
ZSh4LnByb3RvdHlwZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSksaS5w
cm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSksby5wcm90b3R5cGU9T2JqZWN0LmNy
ZWF0ZShuLnByb3RvdHlwZSkscy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSks
YS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSksdS5wcm90b3R5cGU9T2JqZWN0
LmNyZWF0ZShuLnByb3RvdHlwZSksbC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlw
ZSksYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSkscC5wcm90b3R5cGU9T2Jq
ZWN0LmNyZWF0ZShuLnByb3RvdHlwZSl9KSxkZWZpbmUoImVtYmVyLWFqYXgvaW5kZXgiLFsiZXhw
b3J0cyIsImVtYmVyLWFqYXgvcmVxdWVzdCJdLGZ1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVBy
b3BlcnR5KGUsImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0
LmRlZmF1bHR9fSl9KSxkZWZpbmUoImVtYmVyLWFqYXgvbWl4aW5zL2FqYXgtcmVxdWVzdCIsWyJl
eHBvcnRzIiwiZW1iZXIiLCJlbWJlci1hamF4L2Vycm9ycyIsImVtYmVyLWFqYXgvdXRpbHMvcGFy
c2UtcmVzcG9uc2UtaGVhZGVycyIsImVtYmVyLWFqYXgvdXRpbHMvZ2V0LWhlYWRlciIsImVtYmVy
LWFqYXgvdXRpbHMvdXJsLWhlbHBlcnMiLCJlbWJlci1hamF4L3V0aWxzL2FqYXgiXSxmdW5jdGlv
bihlLHQsbixyLGksbyxzKXtmdW5jdGlvbiBhKGUpe3JldHVybiFFKGUpJiYhIWUubWF0Y2goUyl9
ZnVuY3Rpb24gdShlKXtyZXR1cm4iLyI9PT1lLmNoYXJBdCgwKX1mdW5jdGlvbiBsKGUpe3JldHVy
biIvIj09PWUuY2hhckF0KGUubGVuZ3RoLTEpfWZ1bmN0aW9uIGMoZSl7cmV0dXJuIHUoZSkmJihl
PWUuc3Vic3RyaW5nKDEpKSxsKGUpJiYoZT1lLnNsaWNlKDAsLTEpKSxlfWZ1bmN0aW9uIHAoZSl7
cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlfWZ1bmN0aW9uIGYoZSl7cmV0dXJuInN0cmluZyI9PXR5
cGVvZiBlfXZhciBoPSh0LmRlZmF1bHQuJCx0LmRlZmF1bHQuQSksZD10LmRlZmF1bHQuRXJyb3Is
bT10LmRlZmF1bHQuTG9nZ2VyLGc9dC5kZWZhdWx0Lk1peGluLHk9dC5kZWZhdWx0LlJTVlAuUHJv
bWlzZSx2PXQuZGVmYXVsdC5UZXN0LGI9dC5kZWZhdWx0LmdldCxfPXQuZGVmYXVsdC5pc0FycmF5
LHc9dC5kZWZhdWx0LmlzRW1wdHksRT10LmRlZmF1bHQuaXNOb25lLHg9dC5kZWZhdWx0Lm1lcmdl
LEM9dC5kZWZhdWx0LnJ1bixPPXQuZGVmYXVsdC5ydW5JbkRlYnVnLEE9dC5kZWZhdWx0LnRlc3Rp
bmcsVD10LmRlZmF1bHQud2FybixTPS9eYXBwbGljYXRpb25cL3ZuZFwuYXBpXCtqc29uL2ksUj0w
CitBJiZ2LnJlZ2lzdGVyV2FpdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIDA9PT1SfSksZS5kZWZhdWx0
PWcuY3JlYXRlKHtjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVk
OyBjaGFyc2V0PVVURi04IixoZWFkZXJzOnt9LHJlcXVlc3Q6ZnVuY3Rpb24oZSx0KXt2YXIgbj10
aGlzLHI9dGhpcy5vcHRpb25zKGUsdCkKK3JldHVybiBuZXcgeShmdW5jdGlvbihlLHQpe24uX21h
a2VSZXF1ZXN0KHIpLnRoZW4oZnVuY3Rpb24odCl7dmFyIG49dC5yZXNwb25zZQorZShuKX0pLmNh
dGNoKGZ1bmN0aW9uKGUpe3ZhciBuPWUucmVzcG9uc2UKK3Qobil9KX0sImVtYmVyLWFqYXg6ICIr
ci50eXBlKyIgIityLnVybCsiIHJlc3BvbnNlIil9LHJhdzpmdW5jdGlvbihlLHQpe3ZhciBuPXRo
aXMub3B0aW9ucyhlLHQpCityZXR1cm4gdGhpcy5fbWFrZVJlcXVlc3Qobil9LF9tYWtlUmVxdWVz
dDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLG89ZS5tZXRob2R8fGUudHlwZXx8IkdFVCIsdT17bWV0
aG9kOm8sdHlwZTpvLHVybDplLnVybH0KK3JldHVybiBhKCgwLGkuZGVmYXVsdCkoZS5oZWFkZXJz
LCJDb250ZW50LVR5cGUiKSkmJiJHRVQiIT09dS50eXBlJiYib2JqZWN0Ij09dHlwZW9mIGUuZGF0
YSYmKGUuZGF0YT1KU09OLnN0cmluZ2lmeShlLmRhdGEpKSxuZXcgeShmdW5jdGlvbihpLG8pe2Uu
c3VjY2Vzcz1mdW5jdGlvbihlLHMsYSl7dmFyIGw9dC5oYW5kbGVSZXNwb25zZShhLnN0YXR1cywo
MCxyLmRlZmF1bHQpKGEuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLGUsdSkKK1ItPTEsKDAsbi5p
c0FqYXhFcnJvcikobCk/Qy5qb2luKG51bGwsbyx7cGF5bG9hZDplLHRleHRTdGF0dXM6cyxqcVhI
UjphLHJlc3BvbnNlOmx9KTpDLmpvaW4obnVsbCxpLHtwYXlsb2FkOmUsdGV4dFN0YXR1czpzLGpx
WEhSOmEscmVzcG9uc2U6bH0pfSxlLmVycm9yPWZ1bmN0aW9uKGUsaSxzKXtPKGZ1bmN0aW9uKCl7
dmFyIHQ9IlRoZSBzZXJ2ZXIgcmV0dXJuZWQgYW4gZW1wdHkgc3RyaW5nIGZvciAiK3UudHlwZSsi
ICIrdS51cmwrIiwgd2hpY2ggY2Fubm90IGJlIHBhcnNlZCBpbnRvIGEgdmFsaWQgSlNPTi4gUmV0
dXJuIGVpdGhlciBudWxsIG9yIHt9LiIsbj0hKCJwYXJzZXJlcnJvciI9PT1pJiYiIj09PWUucmVz
cG9uc2VUZXh0KQorVCh0LG4se2lkOiJkcy5hZGFwdGVyLnJldHVybmVkLWVtcHR5LXN0cmluZy1h
cy1KU09OIn0pfSkKK3ZhciBhPXQucGFyc2VFcnJvclJlc3BvbnNlKGUucmVzcG9uc2VUZXh0KXx8
cyxsPXZvaWQgMAorbD1zIGluc3RhbmNlb2YgRXJyb3I/czoidGltZW91dCI9PT1pP25ldyBuLlRp
bWVvdXRFcnJvcjoiYWJvcnQiPT09aT9uZXcgbi5BYm9ydEVycm9yOnQuaGFuZGxlUmVzcG9uc2Uo
ZS5zdGF0dXMsKDAsci5kZWZhdWx0KShlLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSxhLHUpLFIt
PTEsQy5qb2luKG51bGwsbyx7cGF5bG9hZDphLHRleHRTdGF0dXM6aSxqcVhIUjplLGVycm9yVGhy
b3duOnMscmVzcG9uc2U6bH0pfSxSKz0xLCgwLHMuZGVmYXVsdCkoZSl9LCJlbWJlci1hamF4OiAi
K2UudHlwZSsiICIrZS51cmwpfSxwb3N0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMucmVxdWVz
dChlLHRoaXMuX2FkZFR5cGVUb09wdGlvbnNGb3IodCwiUE9TVCIpKX0scHV0OmZ1bmN0aW9uKGUs
dCl7cmV0dXJuIHRoaXMucmVxdWVzdChlLHRoaXMuX2FkZFR5cGVUb09wdGlvbnNGb3IodCwiUFVU
IikpfSxwYXRjaDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnJlcXVlc3QoZSx0aGlzLl9hZGRU
eXBlVG9PcHRpb25zRm9yKHQsIlBBVENIIikpfSxkZWw6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhp
cy5yZXF1ZXN0KGUsdGhpcy5fYWRkVHlwZVRvT3B0aW9uc0Zvcih0LCJERUxFVEUiKSl9LGRlbGV0
ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRlbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGdldDpm
dW5jdGlvbihlKXtpZihhcmd1bWVudHMubGVuZ3RoPjF8fCIvIj09PWUuY2hhckF0KDApKXRocm93
IG5ldyBkKCJJdCBzZWVtcyB5b3UgdHJpZWQgdG8gdXNlIGAuZ2V0YCB0byBtYWtlIGEgcmVxdWVz
dCEgVXNlIHRoZSBgLnJlcXVlc3RgIG1ldGhvZCBpbnN0ZWFkLiIpCityZXR1cm4gdGhpcy5fc3Vw
ZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfYWRkVHlwZVRvT3B0aW9uc0ZvcjpmdW5jdGlvbihl
LHQpe3JldHVybiBlPWV8fHt9LGUudHlwZT10LGV9LF9nZXRGdWxsSGVhZGVyc0hhc2g6ZnVuY3Rp
b24oZSl7dmFyIHQ9Yih0aGlzLCJoZWFkZXJzIiksbj14KHt9LHQpCityZXR1cm4geChuLGUpfSxv
cHRpb25zOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg8PTF8fHZvaWQgMD09PWFy
Z3VtZW50c1sxXT97fTphcmd1bWVudHNbMV0KK3JldHVybiB0PXgoe30sdCksdC51cmw9dGhpcy5f
YnVpbGRVUkwoZSx0KSx0LnR5cGU9dC50eXBlfHwiR0VUIix0LmRhdGFUeXBlPXQuZGF0YVR5cGV8
fCJqc29uIix0LmNvbnRlbnRUeXBlPXcodC5jb250ZW50VHlwZSk/Yih0aGlzLCJjb250ZW50VHlw
ZSIpOnQuY29udGVudFR5cGUsdGhpcy5fc2hvdWxkU2VuZEhlYWRlcnModCk/dC5oZWFkZXJzPXRo
aXMuX2dldEZ1bGxIZWFkZXJzSGFzaCh0LmhlYWRlcnMpOnQuaGVhZGVycz10LmhlYWRlcnN8fHt9
LHR9LF9idWlsZFVSTDpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPD0xfHx2b2lk
IDA9PT1hcmd1bWVudHNbMV0/e306YXJndW1lbnRzWzFdLG49bmV3IG8uUmVxdWVzdFVSTChlKQor
aWYobi5pc0NvbXBsZXRlKXJldHVybiBuLmhyZWYKK3ZhciByPXQuaG9zdHx8Yih0aGlzLCJob3N0
IiksaT10Lm5hbWVzcGFjZXx8Yih0aGlzLCJuYW1lc3BhY2UiKQoraWYoaSYmKGk9YyhpKSksbmV3
IFJlZ0V4cCgiXigvKT8iK2kpLnRlc3QoZSkpcmV0dXJuIGUKK3ZhciBzPSIiCityZXR1cm4gciYm
KHMrPXIpLGkmJihsKHMpfHwocys9Ii8iKSxzKz1pKSxlJiYodShlKXx8KHMrPSIvIikscys9ZSks
c30saGFuZGxlUmVzcG9uc2U6ZnVuY3Rpb24oZSx0LHIsaSl7cj1udWxsPT09cnx8dm9pZCAwPT09
cj97fTpyCit2YXIgbz10aGlzLm5vcm1hbGl6ZUVycm9yUmVzcG9uc2UoZSx0LHIpCitpZih0aGlz
LmlzU3VjY2VzcyhlLHQscikpcmV0dXJuIHIKK2lmKHRoaXMuaXNVbmF1dGhvcml6ZWRFcnJvcihl
LHQscikpcmV0dXJuIG5ldyBuLlVuYXV0aG9yaXplZEVycm9yKG8pCitpZih0aGlzLmlzRm9yYmlk
ZGVuRXJyb3IoZSx0LHIpKXJldHVybiBuZXcgbi5Gb3JiaWRkZW5FcnJvcihvKQoraWYodGhpcy5p
c0ludmFsaWRFcnJvcihlLHQscikpcmV0dXJuIG5ldyBuLkludmFsaWRFcnJvcihvKQoraWYodGhp
cy5pc0JhZFJlcXVlc3RFcnJvcihlLHQscikpcmV0dXJuIG5ldyBuLkJhZFJlcXVlc3RFcnJvcihv
KQoraWYodGhpcy5pc05vdEZvdW5kRXJyb3IoZSx0LHIpKXJldHVybiBuZXcgbi5Ob3RGb3VuZEVy
cm9yKG8pCitpZih0aGlzLmlzQWJvcnRFcnJvcihlLHQscikpcmV0dXJuIG5ldyBuLkFib3J0RXJy
b3IobykKK2lmKHRoaXMuaXNDb25mbGljdEVycm9yKGUsdCxyKSlyZXR1cm4gbmV3IG4uQ29uZmxp
Y3RFcnJvcihvKQoraWYodGhpcy5pc1NlcnZlckVycm9yKGUsdCxyKSlyZXR1cm4gbmV3IG4uU2Vy
dmVyRXJyb3IobykKK3ZhciBzPXRoaXMuZ2VuZXJhdGVEZXRhaWxlZE1lc3NhZ2UoZSx0LHIsaSkK
K3JldHVybiBuZXcgbi5BamF4RXJyb3IobyxzKX0sX21hdGNoSG9zdHM6ZnVuY3Rpb24oZSx0KXty
ZXR1cm4gdC5jb25zdHJ1Y3Rvcj09PVJlZ0V4cD90LnRlc3QoZSk6InN0cmluZyI9PXR5cGVvZiB0
P3Q9PT1lOihtLndhcm4oInRydXN0ZWRIb3N0cyBvbmx5IGhhbmRsZXMgc3RyaW5ncyBvciByZWdl
eGVzLiIsdCwiaXMgbmVpdGhlci4iKSwhMSl9LF9zaG91bGRTZW5kSGVhZGVyczpmdW5jdGlvbihl
KXt2YXIgdD10aGlzLG49ZS51cmwscj1lLmhvc3QKK249bnx8IiIscj1yfHxiKHRoaXMsImhvc3Qi
KXx8IiIKK3ZhciBpPW5ldyBvLlJlcXVlc3RVUkwobikscz1iKHRoaXMsInRydXN0ZWRIb3N0cyIp
fHxoKCkKK2lmKCFpLmlzQ29tcGxldGUpcmV0dXJuITAKK2lmKHMuZmluZChmdW5jdGlvbihlKXty
ZXR1cm4gdC5fbWF0Y2hIb3N0cyhpLmhvc3RuYW1lLGUpfSkpcmV0dXJuITAKK3ZhciBhPW5ldyBv
LlJlcXVlc3RVUkwocikKK3JldHVybiBpLnNhbWVIb3N0KGEpfSxnZW5lcmF0ZURldGFpbGVkTWVz
c2FnZTpmdW5jdGlvbihlLHQsbixyKXt2YXIgbz12b2lkIDAscz0oMCxpLmRlZmF1bHQpKHQsIkNv
bnRlbnQtVHlwZSIpfHwiRW1wdHkgQ29udGVudC1UeXBlIgorcmV0dXJuIG89InRleHQvaHRtbCI9
PT1zLnRvTG93ZXJDYXNlKCkmJm4ubGVuZ3RoPjI1MD8iW09taXR0ZWQgTGVuZ3RoeSBIVE1MXSI6
SlNPTi5zdHJpbmdpZnkobiksWyJFbWJlciBBSkFYIFJlcXVlc3QgIityLnR5cGUrIiAiK3IudXJs
KyIgcmV0dXJuZWQgYSAiK2UsIlBheWxvYWQgKCIrcysiKSIsb10uam9pbigiXG4iKX0saXNVbmF1
dGhvcml6ZWRFcnJvcjpmdW5jdGlvbihlKXtyZXR1cm4oMCxuLmlzVW5hdXRob3JpemVkRXJyb3Ip
KGUpfSxpc0ZvcmJpZGRlbkVycm9yOmZ1bmN0aW9uKGUpe3JldHVybigwLG4uaXNGb3JiaWRkZW5F
cnJvcikoZSl9LGlzSW52YWxpZEVycm9yOmZ1bmN0aW9uKGUpe3JldHVybigwLG4uaXNJbnZhbGlk
RXJyb3IpKGUpfSxpc0JhZFJlcXVlc3RFcnJvcjpmdW5jdGlvbihlKXtyZXR1cm4oMCxuLmlzQmFk
UmVxdWVzdEVycm9yKShlKX0saXNOb3RGb3VuZEVycm9yOmZ1bmN0aW9uKGUpe3JldHVybigwLG4u
aXNOb3RGb3VuZEVycm9yKShlKX0saXNBYm9ydEVycm9yOmZ1bmN0aW9uKGUpe3JldHVybigwLG4u
aXNBYm9ydEVycm9yKShlKX0saXNDb25mbGljdEVycm9yOmZ1bmN0aW9uKGUpe3JldHVybigwLG4u
aXNDb25mbGljdEVycm9yKShlKX0saXNTZXJ2ZXJFcnJvcjpmdW5jdGlvbihlKXtyZXR1cm4oMCxu
LmlzU2VydmVyRXJyb3IpKGUpfSxpc1N1Y2Nlc3M6ZnVuY3Rpb24oZSl7cmV0dXJuKDAsbi5pc1N1
Y2Nlc3MpKGUpfSxwYXJzZUVycm9yUmVzcG9uc2U6ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBKU09O
LnBhcnNlKGUpfWNhdGNoKHQpe3JldHVybiBlfX0sbm9ybWFsaXplRXJyb3JSZXNwb25zZTpmdW5j
dGlvbihlLHQsbil7cmV0dXJuIF8obi5lcnJvcnMpP24uZXJyb3JzLm1hcChmdW5jdGlvbih0KXtp
ZihwKHQpKXt2YXIgbj14KHt9LHQpCityZXR1cm4gbi5zdGF0dXM9IiIrdC5zdGF0dXMsbn1yZXR1
cm57c3RhdHVzOiIiK2UsdGl0bGU6dH19KTpfKG4pP24ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBw
KHQpP3tzdGF0dXM6IiIrZSx0aXRsZTp0LnRpdGxlfHwiVGhlIGJhY2tlbmQgcmVzcG9uZGVkIHdp
dGggYW4gZXJyb3IiLGRldGFpbDp0fTp7c3RhdHVzOiIiK2UsdGl0bGU6IiIrdH19KTpmKG4pP1t7
c3RhdHVzOiIiK2UsdGl0bGU6bn1dOlt7c3RhdHVzOiIiK2UsdGl0bGU6bi50aXRsZXx8IlRoZSBi
YWNrZW5kIHJlc3BvbmRlZCB3aXRoIGFuIGVycm9yIixkZXRhaWw6bn1dfX0pfSksZGVmaW5lKCJl
bWJlci1hamF4L21peGlucy9hamF4LXN1cHBvcnQiLFsiZXhwb3J0cyIsImVtYmVyIl0sZnVuY3Rp
b24oZSx0KXt2YXIgbj10LmRlZmF1bHQuTWl4aW4scj10LmRlZmF1bHQuaW5qZWN0LnNlcnZpY2Us
aT10LmRlZmF1bHQuY29tcHV0ZWQuYWxpYXMKK2UuZGVmYXVsdD1uLmNyZWF0ZSh7YWpheFNlcnZp
Y2U6cigiYWpheCIpLGhvc3Q6aSgiYWpheFNlcnZpY2UuaG9zdCIpLG5hbWVzcGFjZTppKCJhamF4
U2VydmljZS5uYW1lc3BhY2UiKSxoZWFkZXJzOmkoImFqYXhTZXJ2aWNlLmhlYWRlcnMiKSxhamF4
OmZ1bmN0aW9uKGUsdCl7dmFyIG49KGFyZ3VtZW50cy5sZW5ndGg8PTJ8fHZvaWQgMD09PWFyZ3Vt
ZW50c1syXXx8YXJndW1lbnRzWzJdLHRoaXMuYWpheE9wdGlvbnMuYXBwbHkodGhpcyxhcmd1bWVu
dHMpKQorcmV0dXJuIHRoaXMuZ2V0KCJhamF4U2VydmljZSIpLnJlcXVlc3QoZSxuKX19KX0pLGRl
ZmluZSgiZW1iZXItYWpheC9yYXciLFsiZXhwb3J0cyIsImVtYmVyLWFqYXgvYWpheC1yZXF1ZXN0
Il0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKCl7dmFyIGU9bmV3IHQuZGVmYXVsdAorcmV0dXJu
IGUucmF3LmFwcGx5KGUsYXJndW1lbnRzKX1lLmRlZmF1bHQ9bn0pLGRlZmluZSgiZW1iZXItYWph
eC9yZXF1ZXN0IixbImV4cG9ydHMiLCJlbWJlci1hamF4L2FqYXgtcmVxdWVzdCJdLGZ1bmN0aW9u
KGUsdCl7ZnVuY3Rpb24gbigpe3ZhciBlPW5ldyB0LmRlZmF1bHQKK3JldHVybiBlLnJlcXVlc3Qu
YXBwbHkoZSxhcmd1bWVudHMpfWUuZGVmYXVsdD1ufSksZGVmaW5lKCJlbWJlci1hamF4L3NlcnZp
Y2VzL2FqYXgiLFsiZXhwb3J0cyIsImVtYmVyIiwiZW1iZXItYWpheC9taXhpbnMvYWpheC1yZXF1
ZXN0Il0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQuZGVmYXVsdC5TZXJ2aWNlCitlLmRlZmF1bHQ9
ci5leHRlbmQobi5kZWZhdWx0KX0pLGRlZmluZSgiZW1iZXItYWpheC91dGlscy9hamF4IixbImV4
cG9ydHMiLCJlbWJlciIsImVtYmVyLWFqYXgvdXRpbHMvaXMtZmFzdGJvb3QiXSxmdW5jdGlvbihl
LHQsbil7dmFyIHI9dC5kZWZhdWx0LiQKK2UuZGVmYXVsdD1uLmRlZmF1bHQ/bmFqYXg6ci5hamF4
fSksZGVmaW5lKCJlbWJlci1hamF4L3V0aWxzL2dldC1oZWFkZXIiLFsiZXhwb3J0cyIsImVtYmVy
Il0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUsdCl7aWYoIWkoZSkmJiFpKHQpKXtyZXR1cm4g
ZVtyKE9iamVjdC5rZXlzKGUpKS5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRvTG93ZXJDYXNl
KCk9PT10LnRvTG93ZXJDYXNlKCl9KV19fWUuZGVmYXVsdD1uCit2YXIgcj10LmRlZmF1bHQuQSxp
PXQuZGVmYXVsdC5pc05vbmV9KSxkZWZpbmUoImVtYmVyLWFqYXgvdXRpbHMvaXMtZmFzdGJvb3Qi
LFsiZXhwb3J0cyJdLGZ1bmN0aW9uKGUpe3ZhciB0PSJ1bmRlZmluZWQiIT10eXBlb2YgRmFzdEJv
b3QKK2UuZGVmYXVsdD10fSksZGVmaW5lKCJlbWJlci1hamF4L3V0aWxzL3BhcnNlLXJlc3BvbnNl
LWhlYWRlcnMiLFsiZXhwb3J0cyJdLGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuIEFy
cmF5LmlzQXJyYXkoZSk/ZTpBcnJheS5mcm9tKGUpfWZ1bmN0aW9uIG4oZSl7dmFyIG49e30KK3Jl
dHVybiBlPyhlLnNwbGl0KHIpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHI9ZS5zcGxpdCgiOiIp
LGk9dChyKSxvPWlbMF0scz1pLnNsaWNlKDEpCitvPW8udHJpbSgpLChzPXMuam9pbigiOiIpLnRy
aW0oKSkmJihuW29dPXMpfSksbik6bn1lLmRlZmF1bHQ9bgordmFyIHI9IlxyXG4ifSksZGVmaW5l
KCJlbWJlci1hamF4L3V0aWxzL3VybC1oZWxwZXJzIixbImV4cG9ydHMiLCJlbWJlci1hamF4L3V0
aWxzL2lzLWZhc3Rib290Il0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUsdCl7aWYoIShlIGlu
c3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBh
IGZ1bmN0aW9uIil9ZnVuY3Rpb24gcihlKXt2YXIgbj12b2lkIDAKK3N8fHQuZGVmYXVsdD9uPWEu
cGFyc2UoZSk6KGEuaHJlZj1lLG49YSkKK3ZhciByPXt9CityZXR1cm4gci5ocmVmPW4uaHJlZixy
LnByb3RvY29sPW4ucHJvdG9jb2wsci5ob3N0bmFtZT1uLmhvc3RuYW1lLHIucG9ydD1uLnBvcnQs
ci5wYXRobmFtZT1uLnBhdGhuYW1lLHIuc2VhcmNoPW4uc2VhcmNoLHIuaGFzaD1uLmhhc2gscn12
YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24r
Kyl7dmFyIHI9dFtuXQorci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFi
bGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHko
ZSxyLmtleSxyKX19cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gbiYmZSh0LnByb3RvdHlw
ZSxuKSxyJiZlKHQsciksdH19KCksbz0vXihodHRwfGh0dHBzKS8scz0ib2JqZWN0Ij09dHlwZW9m
IG1vZHVsZSYmbW9kdWxlLmV4cG9ydHMsYT1mdW5jdGlvbigpe3JldHVybiB0LmRlZmF1bHQ/VVJM
OnM/cmVxdWlyZSgidXJsIik6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpfSgpLHU9ZnVuY3Rp
b24oKXtmdW5jdGlvbiBlKHQpe24odGhpcyxlKSx0aGlzLnVybD10fXJldHVybiBpKGUsW3trZXk6
InNhbWVIb3N0Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzCityZXR1cm5bInByb3RvY29s
IiwiaG9zdG5hbWUiLCJwb3J0Il0ucmVkdWNlKGZ1bmN0aW9uKG4scil7cmV0dXJuIG4mJnRbcl09
PT1lW3JdfSwhMCl9fSx7a2V5OiJ1cmwiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl91cmx9
LHNldDpmdW5jdGlvbihlKXt0aGlzLl91cmw9ZQordmFyIHQ9cihlKQorZm9yKHZhciBuIGluIHQp
KHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbikmJih0aGlzW25dPXRbbl0pCityZXR1cm4gdGhp
cy5fdXJsfX0se2tleToiaXNDb21wbGV0ZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudXJs
Lm1hdGNoKG8pfX1dKSxlfSgpCitlLlJlcXVlc3RVUkw9dX0pLGRlZmluZSgiZW1iZXItY2xpLWFw
cC12ZXJzaW9uL2luaXRpYWxpemVyLWZhY3RvcnkiLFsiZXhwb3J0cyIsImVtYmVyIl0sZnVuY3Rp
b24oZSx0KXtmdW5jdGlvbiBuKGUsdCl7dmFyIG49ITEKK3JldHVybiBmdW5jdGlvbigpe2lmKCFu
JiZlJiZ0KXt2YXIgbz1yKGUpCitpLnJlZ2lzdGVyKG8sdCksbj0hMH19fWUuZGVmYXVsdD1uCit2
YXIgcj10LmRlZmF1bHQuU3RyaW5nLmNsYXNzaWZ5LGk9dC5kZWZhdWx0LmxpYnJhcmllc30pLGRl
ZmluZSgiZW1iZXItY2xpLWFwcC12ZXJzaW9uL3V0aWxzL3JlZ2V4cCIsWyJleHBvcnRzIl0sZnVu
Y3Rpb24oZSl7dmFyIHQ9L1xkWy5dXGRbLl1cZC8KK2UudmVyc2lvblJlZ0V4cD10Cit2YXIgbj0v
W2EtelxkXXs4fS8KK2Uuc2hhUmVnRXhwPW59KSxkZWZpbmUoImVtYmVyLWluZmxlY3Rvci9pbmRl
eCIsWyJleHBvcnRzIiwiZW1iZXIiLCJlbWJlci1pbmZsZWN0b3IvbGliL3N5c3RlbSIsImVtYmVy
LWluZmxlY3Rvci9saWIvZXh0L3N0cmluZyJdLGZ1bmN0aW9uKGUsdCxuLHIpe24uSW5mbGVjdG9y
LmRlZmF1bHRSdWxlcz1uLmRlZmF1bHRSdWxlcyx0LmRlZmF1bHQuSW5mbGVjdG9yPW4uSW5mbGVj
dG9yLHQuZGVmYXVsdC5TdHJpbmcucGx1cmFsaXplPW4ucGx1cmFsaXplLHQuZGVmYXVsdC5TdHJp
bmcuc2luZ3VsYXJpemU9bi5zaW5ndWxhcml6ZSxlLmRlZmF1bHQ9bi5JbmZsZWN0b3IsZS5wbHVy
YWxpemU9bi5wbHVyYWxpemUsZS5zaW5ndWxhcml6ZT1uLnNpbmd1bGFyaXplLGUuZGVmYXVsdFJ1
bGVzPW4uZGVmYXVsdFJ1bGVzLHZvaWQgMCE9PWRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoImVt
YmVyLWluZmxlY3RvciIsWyJleHBvcnRzIl0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGVmYXVsdD1u
LkluZmxlY3RvcixuLkluZmxlY3Rvcn0pOiJ1bmRlZmluZWQiIT10eXBlb2YgbW9kdWxlJiZtb2R1
bGUuZXhwb3J0cyYmKG1vZHVsZS5leHBvcnRzPW4uSW5mbGVjdG9yKX0pLGRlZmluZSgiZW1iZXIt
aW5mbGVjdG9yL2xpYi9leHQvc3RyaW5nIixbImV4cG9ydHMiLCJlbWJlciIsImVtYmVyLWluZmxl
Y3Rvci9saWIvc3lzdGVtL3N0cmluZyJdLGZ1bmN0aW9uKGUsdCxuKXsoITA9PT10LmRlZmF1bHQu
RVhURU5EX1BST1RPVFlQRVN8fHQuZGVmYXVsdC5FWFRFTkRfUFJPVE9UWVBFUy5TdHJpbmcpJiYo
U3RyaW5nLnByb3RvdHlwZS5wbHVyYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnBsdXJhbGl6
ZSkodGhpcyl9LFN0cmluZy5wcm90b3R5cGUuc2luZ3VsYXJpemU9ZnVuY3Rpb24oKXtyZXR1cm4o
MCxuLnNpbmd1bGFyaXplKSh0aGlzKX0pfSksZGVmaW5lKCJlbWJlci1pbmZsZWN0b3IvbGliL2hl
bHBlcnMvcGx1cmFsaXplIixbImV4cG9ydHMiLCJlbWJlci1pbmZsZWN0b3IiLCJlbWJlci1pbmZs
ZWN0b3IvbGliL3V0aWxzL21ha2UtaGVscGVyIl0sZnVuY3Rpb24oZSx0LG4pe2UuZGVmYXVsdD0o
MCxuLmRlZmF1bHQpKGZ1bmN0aW9uKGUpe3ZhciBuPXZvaWQgMCxyPXZvaWQgMAorcmV0dXJuIDE9
PT1lLmxlbmd0aD8ocj1lWzBdLCgwLHQucGx1cmFsaXplKShyKSk6KG49ZVswXSxyPWVbMV0sMSE9
PXBhcnNlRmxvYXQobikmJihyPSgwLHQucGx1cmFsaXplKShyKSksbisiICIrcil9KX0pLGRlZmlu
ZSgiZW1iZXItaW5mbGVjdG9yL2xpYi9oZWxwZXJzL3Npbmd1bGFyaXplIixbImV4cG9ydHMiLCJl
bWJlci1pbmZsZWN0b3IiLCJlbWJlci1pbmZsZWN0b3IvbGliL3V0aWxzL21ha2UtaGVscGVyIl0s
ZnVuY3Rpb24oZSx0LG4pe2UuZGVmYXVsdD0oMCxuLmRlZmF1bHQpKGZ1bmN0aW9uKGUpe3JldHVy
bigwLHQuc2luZ3VsYXJpemUpKGVbMF0pfSl9KSxkZWZpbmUoImVtYmVyLWluZmxlY3Rvci9saWIv
c3lzdGVtIixbImV4cG9ydHMiLCJlbWJlci1pbmZsZWN0b3IvbGliL3N5c3RlbS9pbmZsZWN0b3Ii
LCJlbWJlci1pbmZsZWN0b3IvbGliL3N5c3RlbS9zdHJpbmciLCJlbWJlci1pbmZsZWN0b3IvbGli
L3N5c3RlbS9pbmZsZWN0aW9ucyJdLGZ1bmN0aW9uKGUsdCxuLHIpe3QuZGVmYXVsdC5pbmZsZWN0
b3I9bmV3IHQuZGVmYXVsdChyLmRlZmF1bHQpLGUuSW5mbGVjdG9yPXQuZGVmYXVsdCxlLnNpbmd1
bGFyaXplPW4uc2luZ3VsYXJpemUsZS5wbHVyYWxpemU9bi5wbHVyYWxpemUsZS5kZWZhdWx0UnVs
ZXM9ci5kZWZhdWx0fSksZGVmaW5lKCJlbWJlci1pbmZsZWN0b3IvbGliL3N5c3RlbS9pbmZsZWN0
aW9ucyIsWyJleHBvcnRzIl0sZnVuY3Rpb24oZSl7ZS5kZWZhdWx0PXtwbHVyYWxzOltbLyQvLCJz
Il0sWy9zJC9pLCJzIl0sWy9eKGF4fHRlc3QpaXMkL2ksIiQxZXMiXSxbLyhvY3RvcHx2aXIpdXMk
L2ksIiQxaSJdLFsvKG9jdG9wfHZpcilpJC9pLCIkMWkiXSxbLyhhbGlhc3xzdGF0dXN8Ym9udXMp
JC9pLCIkMWVzIl0sWy8oYnUpcyQvaSwiJDFzZXMiXSxbLyhidWZmYWx8dG9tYXQpbyQvaSwiJDFv
ZXMiXSxbLyhbdGldKXVtJC9pLCIkMWEiXSxbLyhbdGldKWEkL2ksIiQxYSJdLFsvc2lzJC9pLCJz
ZXMiXSxbLyg/OihbXmZdKWZlfChbbHJdKWYpJC9pLCIkMSQydmVzIl0sWy8oaGl2ZSkkL2ksIiQx
cyJdLFsvKFteYWVpb3V5XXxxdSl5JC9pLCIkMWllcyJdLFsvKHh8Y2h8c3N8c2gpJC9pLCIkMWVz
Il0sWy8obWF0cnx2ZXJ0fGluZCkoPzppeHxleCkkL2ksIiQxaWNlcyJdLFsvXihtfGwpb3VzZSQv
aSwiJDFpY2UiXSxbL14obXxsKWljZSQvaSwiJDFpY2UiXSxbL14ob3gpJC9pLCIkMWVuIl0sWy9e
KG94ZW4pJC9pLCIkMSJdLFsvKHF1aXopJC9pLCIkMXplcyJdXSxzaW5ndWxhcjpbWy9zJC9pLCIi
XSxbLyhzcykkL2ksIiQxIl0sWy8obilld3MkL2ksIiQxZXdzIl0sWy8oW3RpXSlhJC9pLCIkMXVt
Il0sWy8oKGEpbmFseXwoYilhfChkKWlhZ25vfChwKWFyZW50aGV8KHApcm9nbm98KHMpeW5vcHwo
dCloZSkoc2lzfHNlcykkL2ksIiQxc2lzIl0sWy8oXmFuYWx5KShzaXN8c2VzKSQvaSwiJDFzaXMi
XSxbLyhbXmZdKXZlcyQvaSwiJDFmZSJdLFsvKGhpdmUpcyQvaSwiJDEiXSxbLyh0aXZlKXMkL2ks
IiQxIl0sWy8oW2xyXSl2ZXMkL2ksIiQxZiJdLFsvKFteYWVpb3V5XXxxdSlpZXMkL2ksIiQxeSJd
LFsvKHMpZXJpZXMkL2ksIiQxZXJpZXMiXSxbLyhtKW92aWVzJC9pLCIkMW92aWUiXSxbLyh4fGNo
fHNzfHNoKWVzJC9pLCIkMSJdLFsvXihtfGwpaWNlJC9pLCIkMW91c2UiXSxbLyhidXMpKGVzKT8k
L2ksIiQxIl0sWy8obyllcyQvaSwiJDEiXSxbLyhzaG9lKXMkL2ksIiQxIl0sWy8oY3Jpc3x0ZXN0
KShpc3xlcykkL2ksIiQxaXMiXSxbL14oYSl4W2llXXMkL2ksIiQxeGlzIl0sWy8ob2N0b3B8dmly
KSh1c3xpKSQvaSwiJDF1cyJdLFsvKGFsaWFzfHN0YXR1c3xib251cykoZXMpPyQvaSwiJDEiXSxb
L14ob3gpZW4vaSwiJDEiXSxbLyh2ZXJ0fGluZClpY2VzJC9pLCIkMWV4Il0sWy8obWF0cilpY2Vz
JC9pLCIkMWl4Il0sWy8ocXVpeil6ZXMkL2ksIiQxIl0sWy8oZGF0YWJhc2UpcyQvaSwiJDEiXV0s
aXJyZWd1bGFyUGFpcnM6W1sicGVyc29uIiwicGVvcGxlIl0sWyJtYW4iLCJtZW4iXSxbImNoaWxk
IiwiY2hpbGRyZW4iXSxbInNleCIsInNleGVzIl0sWyJtb3ZlIiwibW92ZXMiXSxbImNvdyIsImtp
bmUiXSxbInpvbWJpZSIsInpvbWJpZXMiXV0sdW5jb3VudGFibGU6WyJlcXVpcG1lbnQiLCJpbmZv
cm1hdGlvbiIsInJpY2UiLCJtb25leSIsInNwZWNpZXMiLCJzZXJpZXMiLCJmaXNoIiwic2hlZXAi
LCJqZWFucyIsInBvbGljZSJdfX0pLGRlZmluZSgiZW1iZXItaW5mbGVjdG9yL2xpYi9zeXN0ZW0v
aW5mbGVjdG9yIixbImV4cG9ydHMiLCJlbWJlciJdLGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihl
LHQpe2Zvcih2YXIgbj0wLHI9dC5sZW5ndGg7bjxyO24rKyllLnVuY291bnRhYmxlW3Rbbl0udG9M
b3dlckNhc2UoKV09ITB9ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbixyPTAsaT10Lmxlbmd0aDty
PGk7cisrKW49dFtyXSxlLmlycmVndWxhcltuWzBdLnRvTG93ZXJDYXNlKCldPW5bMV0sZS5pcnJl
Z3VsYXJbblsxXS50b0xvd2VyQ2FzZSgpXT1uWzFdLGUuaXJyZWd1bGFySW52ZXJzZVtuWzFdLnRv
TG93ZXJDYXNlKCldPW5bMF0sZS5pcnJlZ3VsYXJJbnZlcnNlW25bMF0udG9Mb3dlckNhc2UoKV09
blswXX1mdW5jdGlvbiBpKGUpe2U9ZXx8e30sZS51bmNvdW50YWJsZT1lLnVuY291bnRhYmxlfHxv
KCksZS5pcnJlZ3VsYXJQYWlycz1lLmlycmVndWxhclBhaXJzfHxvKCkKK3ZhciB0PXRoaXMucnVs
ZXM9e3BsdXJhbHM6ZS5wbHVyYWxzfHxbXSxzaW5ndWxhcjplLnNpbmd1bGFyfHxbXSxpcnJlZ3Vs
YXI6bygpLGlycmVndWxhckludmVyc2U6bygpLHVuY291bnRhYmxlOm8oKX0KK24odCxlLnVuY291
bnRhYmxlKSxyKHQsZS5pcnJlZ3VsYXJQYWlycyksdGhpcy5lbmFibGVDYWNoZSgpfWZ1bmN0aW9u
IG8oKXt2YXIgZT1PYmplY3QuY3JlYXRlKG51bGwpCityZXR1cm4gZS5fZGljdD1udWxsLGRlbGV0
ZSBlLl9kaWN0LGV9dmFyIHM9dC5kZWZhdWx0LlN0cmluZy5jYXBpdGFsaXplLGE9L15ccyokLyx1
PS8oW1x3XC8tXStbX1wvXHMtXSkoW2EtelxkXSskKS8sbD0vKFtcd1wvXHMtXSspKFtBLVpdW2Et
elxkXSokKS8sYz0vW0EtWl1bYS16XGRdKiQvCitpZighT2JqZWN0LmNyZWF0ZSYmIU9iamVjdC5j
cmVhdGUobnVsbCkuaGFzT3duUHJvcGVydHkpdGhyb3cgbmV3IEVycm9yKCJUaGlzIGJyb3dzZXIg
ZG9lcyBub3Qgc3VwcG9ydCBPYmplY3QuY3JlYXRlKG51bGwpLCBwbGVhc2UgcG9seWZpbCB3aXRo
IGVzNS1zaGFtOiBodHRwOi8vZ2l0LmlvL3lCVTJyZyIpCitpLnByb3RvdHlwZT17ZW5hYmxlQ2Fj
aGU6ZnVuY3Rpb24oKXt0aGlzLnB1cmdlQ2FjaGUoKSx0aGlzLnNpbmd1bGFyaXplPWZ1bmN0aW9u
KGUpe3JldHVybiB0aGlzLl9jYWNoZVVzZWQ9ITAsdGhpcy5fc0NhY2hlW2VdfHwodGhpcy5fc0Nh
Y2hlW2VdPXRoaXMuX3Npbmd1bGFyaXplKGUpKX0sdGhpcy5wbHVyYWxpemU9ZnVuY3Rpb24oZSl7
cmV0dXJuIHRoaXMuX2NhY2hlVXNlZD0hMCx0aGlzLl9wQ2FjaGVbZV18fCh0aGlzLl9wQ2FjaGVb
ZV09dGhpcy5fcGx1cmFsaXplKGUpKX19LHB1cmdlQ2FjaGU6ZnVuY3Rpb24oKXt0aGlzLl9jYWNo
ZVVzZWQ9ITEsdGhpcy5fc0NhY2hlPW8oKSx0aGlzLl9wQ2FjaGU9bygpfSxkaXNhYmxlQ2FjaGU6
ZnVuY3Rpb24oKXt0aGlzLl9zQ2FjaGU9bnVsbCx0aGlzLl9wQ2FjaGU9bnVsbCx0aGlzLnNpbmd1
bGFyaXplPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9zaW5ndWxhcml6ZShlKX0sdGhpcy5wbHVy
YWxpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BsdXJhbGl6ZShlKX19LHBsdXJhbDpmdW5j
dGlvbihlLHQpe3RoaXMuX2NhY2hlVXNlZCYmdGhpcy5wdXJnZUNhY2hlKCksdGhpcy5ydWxlcy5w
bHVyYWxzLnB1c2goW2UsdC50b0xvd2VyQ2FzZSgpXSl9LHNpbmd1bGFyOmZ1bmN0aW9uKGUsdCl7
dGhpcy5fY2FjaGVVc2VkJiZ0aGlzLnB1cmdlQ2FjaGUoKSx0aGlzLnJ1bGVzLnNpbmd1bGFyLnB1
c2goW2UsdC50b0xvd2VyQ2FzZSgpXSl9LHVuY291bnRhYmxlOmZ1bmN0aW9uKGUpe3RoaXMuX2Nh
Y2hlVXNlZCYmdGhpcy5wdXJnZUNhY2hlKCksbih0aGlzLnJ1bGVzLFtlLnRvTG93ZXJDYXNlKCld
KX0saXJyZWd1bGFyOmZ1bmN0aW9uKGUsdCl7dGhpcy5fY2FjaGVVc2VkJiZ0aGlzLnB1cmdlQ2Fj
aGUoKSxyKHRoaXMucnVsZXMsW1tlLHRdXSl9LHBsdXJhbGl6ZTpmdW5jdGlvbihlKXtyZXR1cm4g
dGhpcy5fcGx1cmFsaXplKGUpfSxfcGx1cmFsaXplOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmlu
ZmxlY3QoZSx0aGlzLnJ1bGVzLnBsdXJhbHMsdGhpcy5ydWxlcy5pcnJlZ3VsYXIpfSxzaW5ndWxh
cml6ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fc2luZ3VsYXJpemUoZSl9LF9zaW5ndWxhcml6
ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5pbmZsZWN0KGUsdGhpcy5ydWxlcy5zaW5ndWxhcix0
aGlzLnJ1bGVzLmlycmVndWxhckludmVyc2UpfSxpbmZsZWN0OmZ1bmN0aW9uKGUsdCxuKXt2YXIg
cixpLG8scCxmLGgsZCxtCitpZihoPSFlfHxhLnRlc3QoZSksZD1jLnRlc3QoZSksIiIsaClyZXR1
cm4gZQoraWYobz1lLnRvTG93ZXJDYXNlKCkscD11LmV4ZWMoZSl8fGwuZXhlYyhlKSxwJiYocFsx
XSxmPXBbMl0udG9Mb3dlckNhc2UoKSksdGhpcy5ydWxlcy51bmNvdW50YWJsZVtvXXx8dGhpcy5y
dWxlcy51bmNvdW50YWJsZVtmXSlyZXR1cm4gZQorZm9yKG0gaW4gbilpZihvLm1hdGNoKG0rIiQi
KSlyZXR1cm4gaT1uW21dLGQmJm5bZl0mJihpPXMoaSksbT1zKG0pKSxlLnJlcGxhY2UobmV3IFJl
Z0V4cChtLCJpIiksaSkKK2Zvcih2YXIgZz10Lmxlbmd0aDtnPjAmJihyPXRbZy0xXSxtPXJbMF0s
IW0udGVzdChlKSk7Zy0tKTtyZXR1cm4gcj1yfHxbXSxtPXJbMF0saT1yWzFdLGUucmVwbGFjZSht
LGkpfX0sZS5kZWZhdWx0PWl9KSxkZWZpbmUoImVtYmVyLWluZmxlY3Rvci9saWIvc3lzdGVtL3N0
cmluZyIsWyJleHBvcnRzIiwiZW1iZXItaW5mbGVjdG9yL2xpYi9zeXN0ZW0vaW5mbGVjdG9yIl0s
ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3JldHVybiB0LmRlZmF1bHQuaW5mbGVjdG9yLnBs
dXJhbGl6ZShlKX1mdW5jdGlvbiByKGUpe3JldHVybiB0LmRlZmF1bHQuaW5mbGVjdG9yLnNpbmd1
bGFyaXplKGUpfWUucGx1cmFsaXplPW4sZS5zaW5ndWxhcml6ZT1yfSkKK2RlZmluZSgiZW1iZXIt
aW5mbGVjdG9yL2xpYi91dGlscy9tYWtlLWhlbHBlciIsWyJleHBvcnRzIiwiZW1iZXIiXSxmdW5j
dGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIHQuZGVmYXVsdC5IZWxwZXI/dC5kZWZhdWx0
LkhlbHBlci5oZWxwZXIoZSk6dC5kZWZhdWx0LkhUTUxCYXJzP3QuZGVmYXVsdC5IVE1MQmFycy5t
YWtlQm91bmRIZWxwZXIoZSk6dC5kZWZhdWx0LkhhbmRsZWJhcnMubWFrZUJvdW5kSGVscGVyKGUp
fWUuZGVmYXVsdD1ufSksZGVmaW5lKCJlbWJlci1sb2FkLWluaXRpYWxpemVycy9pbmRleCIsWyJl
eHBvcnRzIiwiZW1iZXIiXSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IgorZS5fX2VzTW9kdWxl
PSEwLGUuZGVmYXVsdD1mdW5jdGlvbihlLG4pe3ZhciByPW5ldyBSZWdFeHAoIl4iK24rIi8oKD86
aW5zdGFuY2UtKT9pbml0aWFsaXplcnMpLyIpOyhPYmplY3Qua2V5c3x8dC5kZWZhdWx0LmtleXMp
KHJlcXVpcmVqcy5fZWFrX3NlZW4pLm1hcChmdW5jdGlvbihlKXtyZXR1cm57bW9kdWxlTmFtZTpl
LG1hdGNoZXM6ci5leGVjKGUpfX0pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXRjaGVz
JiYyPT09ZS5tYXRjaGVzLmxlbmd0aH0pLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHI9bi5tb2R1
bGVOYW1lLGk9cmVxdWlyZShyLG51bGwsbnVsbCwhMCkKK2lmKCFpKXRocm93IG5ldyBFcnJvcihy
KyIgbXVzdCBleHBvcnQgYW4gaW5pdGlhbGl6ZXIuIikKK3ZhciBvPXQuZGVmYXVsdC5TdHJpbmcu
Y2FtZWxpemUobi5tYXRjaGVzWzFdLnN1YnN0cmluZygwLG4ubWF0Y2hlc1sxXS5sZW5ndGgtMSkp
LHM9aS5kZWZhdWx0CitpZighcy5uYW1lKXt2YXIgYT1yLm1hdGNoKC9bXlwvXStcLz8kLylbMF0K
K3MubmFtZT1hfWVbb10mJmVbb10ocyl9KX19KSxkZWZpbmUoImVtYmVyLXJlc29sdmVyL2NvbnRh
aW5lci1kZWJ1Zy1hZGFwdGVyIixbImV4cG9ydHMiLCJlbWJlciIsImVtYmVyLXJlc29sdmVyL3V0
aWxzL21vZHVsZS1yZWdpc3RyeSJdLGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCxuKXt2
YXIgcj10Lm1hdGNoKG5ldyBSZWdFeHAoIl4vPyIrbisiLyguKykvIitlKyIkIikpCitpZihyKXJl
dHVybiByWzFdfXZhciBpPXQuZGVmYXVsdC5Db250YWluZXJEZWJ1Z0FkYXB0ZXIsbz1udWxsCit2
b2lkIDAhPT1pJiYobz1pLmV4dGVuZCh7X21vZHVsZVJlZ2lzdHJ5Om51bGwsaW5pdDpmdW5jdGlv
bigpe3RoaXMuX3N1cGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9tb2R1bGVSZWdpc3Ry
eXx8KHRoaXMuX21vZHVsZVJlZ2lzdHJ5PW5ldyBuLmRlZmF1bHQpfSxjYW5DYXRhbG9nRW50cmll
c0J5VHlwZTpmdW5jdGlvbigpe3JldHVybiEwfSxjYXRhbG9nRW50cmllc0J5VHlwZTpmdW5jdGlv
bihlKXtmb3IodmFyIG49dGhpcy5fbW9kdWxlUmVnaXN0cnkubW9kdWxlTmFtZXMoKSxpPXQuZGVm
YXVsdC5BKCksbz10aGlzLm5hbWVzcGFjZS5tb2R1bGVQcmVmaXgscz0wLGE9bi5sZW5ndGg7czxh
O3MrKyl7dmFyIHU9bltzXQoraWYoLTEhPT11LmluZGV4T2YoZSkpe3ZhciBsPXIoZSx1LHRoaXMu
bmFtZXNwYWNlLnBvZE1vZHVsZVByZWZpeHx8bykKK2x8fChsPXUuc3BsaXQoZSsicy8iKS5wb3Ao
KSksaS5hZGRPYmplY3QobCl9fXJldHVybiBpfX0pKSxlLmRlZmF1bHQ9b30pLGRlZmluZSgiZW1i
ZXItcmVzb2x2ZXIvaW5kZXgiLFsiZXhwb3J0cyIsImVtYmVyLXJlc29sdmVyL3Jlc29sdmVyIl0s
ZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiZGVmYXVsdCIse2VudW1lcmFi
bGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHQuZGVmYXVsdH19KX0pLGRlZmluZSgiZW1iZXIt
cmVzb2x2ZXIvcmVzb2x2ZXIiLFsiZXhwb3J0cyIsImVtYmVyIiwiZW1iZXItcmVzb2x2ZXIvdXRp
bHMvbW9kdWxlLXJlZ2lzdHJ5IiwiZW1iZXItcmVzb2x2ZXIvdXRpbHMvY2xhc3MtZmFjdG9yeSIs
ImVtYmVyLXJlc29sdmVyL3V0aWxzL21ha2UtZGljdGlvbmFyeSJdLGZ1bmN0aW9uKGUsdCxuLHIs
aSl7ZnVuY3Rpb24gbyhlKXtpZighMD09PWUucGFyc2VkTmFtZSlyZXR1cm4gZQordmFyIHQsbixy
LGk9ZS5zcGxpdCgiQCIpCitpZigiaGVscGVyOkBjb250ZW50LWhlbHBlciIhPT1lJiYyPT09aS5s
ZW5ndGgpe3ZhciBvPWlbMF0uc3BsaXQoIjoiKQoraWYoMj09PW8ubGVuZ3RoKXQ9b1sxXSxuPW9b
MF0scj1pWzFdCitlbHNle3ZhciBzPWlbMV0uc3BsaXQoIjoiKQordD1pWzBdLG49c1swXSxyPXNb
MV19fWVsc2UgaT1lLnNwbGl0KCI6Iiksbj1pWzBdLHI9aVsxXQordmFyIGE9cix1PXAodGhpcywi
bmFtZXNwYWNlIiksYz11CityZXR1cm57cGFyc2VkTmFtZTohMCxmdWxsTmFtZTplLHByZWZpeDp0
fHx0aGlzLnByZWZpeCh7dHlwZTpufSksdHlwZTpuLGZ1bGxOYW1lV2l0aG91dFR5cGU6YSxuYW1l
OnIscm9vdDpjLHJlc29sdmVNZXRob2ROYW1lOiJyZXNvbHZlIitsKG4pfX1mdW5jdGlvbiBzKGUp
e3QuZGVmYXVsdC5hc3NlcnQoImBtb2R1bGVQcmVmaXhgIG11c3QgYmUgZGVmaW5lZCIsdGhpcy5u
YW1lc3BhY2UubW9kdWxlUHJlZml4KQordmFyIG49dGhpcy5maW5kTW9kdWxlTmFtZShlKQoraWYo
bil7dmFyIGk9dGhpcy5fZXh0cmFjdERlZmF1bHRFeHBvcnQobixlKQoraWYodm9pZCAwPT09aSl0
aHJvdyBuZXcgRXJyb3IoIiBFeHBlY3RlZCB0byBmaW5kOiAnIitlLmZ1bGxOYW1lKyInIHdpdGhp
biAnIituKyInIGJ1dCBnb3QgJ3VuZGVmaW5lZCcuIERpZCB5b3UgZm9yZ2V0IHRvIGBleHBvcnQg
ZGVmYXVsdGAgd2l0aGluICciK24rIic/IikKK3JldHVybiB0aGlzLnNob3VsZFdyYXBJbkNsYXNz
RmFjdG9yeShpLGUpJiYoaT0oMCxyLmRlZmF1bHQpKGkpKSxpfXJldHVybiB0aGlzLl9zdXBlcihl
KX12YXIgYT10LmRlZmF1bHQuU3RyaW5nLHU9YS51bmRlcnNjb3JlLGw9YS5jbGFzc2lmeSxjPWEu
ZGFzaGVyaXplLHA9dC5kZWZhdWx0LmdldCxmPXQuZGVmYXVsdC5EZWZhdWx0UmVzb2x2ZXIsaD1m
LmV4dGVuZCh7cmVzb2x2ZU90aGVyOnMscGFyc2VOYW1lOm8scmVzb2x2ZVRlbXBsYXRlOnMscGx1
cmFsaXplZFR5cGVzOm51bGwsbW9kdWxlUmVnaXN0cnk6bnVsbCxtYWtlVG9TdHJpbmc6ZnVuY3Rp
b24oZSx0KXtyZXR1cm4gdGhpcy5uYW1lc3BhY2UubW9kdWxlUHJlZml4KyJAIit0KyI6In0sc2hv
dWxkV3JhcEluQ2xhc3NGYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuITF9LGluaXQ6ZnVuY3Rpb24o
KXt0aGlzLl9zdXBlcigpLHRoaXMubW9kdWxlQmFzZWRSZXNvbHZlcj0hMCx0aGlzLl9tb2R1bGVS
ZWdpc3RyeXx8KHRoaXMuX21vZHVsZVJlZ2lzdHJ5PW5ldyBuLmRlZmF1bHQpLHRoaXMuX25vcm1h
bGl6ZUNhY2hlPSgwLGkuZGVmYXVsdCkoKSx0aGlzLnBsdXJhbGl6ZWRUeXBlcz10aGlzLnBsdXJh
bGl6ZWRUeXBlc3x8KDAsaS5kZWZhdWx0KSgpLHRoaXMucGx1cmFsaXplZFR5cGVzLmNvbmZpZ3x8
KHRoaXMucGx1cmFsaXplZFR5cGVzLmNvbmZpZz0iY29uZmlnIiksdGhpcy5fZGVwcmVjYXRlZFBv
ZE1vZHVsZVByZWZpeD0hMX0sbm9ybWFsaXplOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9ub3Jt
YWxpemVDYWNoZVtlXXx8KHRoaXMuX25vcm1hbGl6ZUNhY2hlW2VdPXRoaXMuX25vcm1hbGl6ZShl
KSl9LF9ub3JtYWxpemU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zcGxpdCgiOiIpCityZXR1cm4gdC5s
ZW5ndGg+MT8iaGVscGVyIj09PXRbMF0/dFswXSsiOiIrdFsxXS5yZXBsYWNlKC9fL2csIi0iKTp0
WzBdKyI6IitjKHRbMV0ucmVwbGFjZSgvXC4vZywiLyIpKTplfSxwbHVyYWxpemU6ZnVuY3Rpb24o
ZSl7cmV0dXJuIHRoaXMucGx1cmFsaXplZFR5cGVzW2VdfHwodGhpcy5wbHVyYWxpemVkVHlwZXNb
ZV09ZSsicyIpfSxwb2RCYXNlZExvb2t1cFdpdGhQcmVmaXg6ZnVuY3Rpb24oZSx0KXt2YXIgbj10
LmZ1bGxOYW1lV2l0aG91dFR5cGUKK3JldHVybiJ0ZW1wbGF0ZSI9PT10LnR5cGUmJihuPW4ucmVw
bGFjZSgvXmNvbXBvbmVudHNcLy8sIiIpKSxlKyIvIituKyIvIit0LnR5cGV9LHBvZEJhc2VkTW9k
dWxlTmFtZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLm5hbWVzcGFjZS5wb2RNb2R1bGVQcmVmaXh8
fHRoaXMubmFtZXNwYWNlLm1vZHVsZVByZWZpeAorcmV0dXJuIHRoaXMucG9kQmFzZWRMb29rdXBX
aXRoUHJlZml4KHQsZSl9LHBvZEJhc2VkQ29tcG9uZW50c0luU3ViZGlyOmZ1bmN0aW9uKGUpe3Zh
ciB0PXRoaXMubmFtZXNwYWNlLnBvZE1vZHVsZVByZWZpeHx8dGhpcy5uYW1lc3BhY2UubW9kdWxl
UHJlZml4CitpZih0Kz0iL2NvbXBvbmVudHMiLCJjb21wb25lbnQiPT09ZS50eXBlfHxlLmZ1bGxO
YW1lV2l0aG91dFR5cGUubWF0Y2goL15jb21wb25lbnRzLykpcmV0dXJuIHRoaXMucG9kQmFzZWRM
b29rdXBXaXRoUHJlZml4KHQsZSl9LHJlc29sdmVFbmdpbmU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5m
dWxsTmFtZVdpdGhvdXRUeXBlLG49dCsiL2VuZ2luZSIKK2lmKHRoaXMuX21vZHVsZVJlZ2lzdHJ5
LmhhcyhuKSlyZXR1cm4gdGhpcy5fZXh0cmFjdERlZmF1bHRFeHBvcnQobil9LHJlc29sdmVSb3V0
ZU1hcDpmdW5jdGlvbihlKXt2YXIgbj1lLmZ1bGxOYW1lV2l0aG91dFR5cGUscj1uKyIvcm91dGVz
IgoraWYodGhpcy5fbW9kdWxlUmVnaXN0cnkuaGFzKHIpKXt2YXIgaT10aGlzLl9leHRyYWN0RGVm
YXVsdEV4cG9ydChyKQorcmV0dXJuIHQuZGVmYXVsdC5hc3NlcnQoIlRoZSByb3V0ZSBtYXAgZm9y
ICIrbisiIHNob3VsZCBiZSB3cmFwcGVkIGJ5ICdidWlsZFJvdXRlcycgYmVmb3JlIGV4cG9ydGlu
Zy4iLGkuaXNSb3V0ZU1hcCksaX19LG1haW5Nb2R1bGVOYW1lOmZ1bmN0aW9uKGUpe3ZhciB0PWUu
cHJlZml4KyIvIitlLnR5cGUKK2lmKCJtYWluIj09PWUuZnVsbE5hbWVXaXRob3V0VHlwZSlyZXR1
cm4gdH0sZGVmYXVsdE1vZHVsZU5hbWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucHJlZml4KyIvIit0
aGlzLnBsdXJhbGl6ZShlLnR5cGUpKyIvIitlLmZ1bGxOYW1lV2l0aG91dFR5cGV9LHByZWZpeDpm
dW5jdGlvbihlKXt2YXIgdD10aGlzLm5hbWVzcGFjZS5tb2R1bGVQcmVmaXgKK3JldHVybiB0aGlz
Lm5hbWVzcGFjZVtlLnR5cGUrIlByZWZpeCJdJiYodD10aGlzLm5hbWVzcGFjZVtlLnR5cGUrIlBy
ZWZpeCJdKSx0fSxtb2R1bGVOYW1lTG9va3VwUGF0dGVybnM6dC5kZWZhdWx0LmNvbXB1dGVkKGZ1
bmN0aW9uKCl7cmV0dXJuW3RoaXMucG9kQmFzZWRNb2R1bGVOYW1lLHRoaXMucG9kQmFzZWRDb21w
b25lbnRzSW5TdWJkaXIsdGhpcy5tYWluTW9kdWxlTmFtZSx0aGlzLmRlZmF1bHRNb2R1bGVOYW1l
XX0pLGZpbmRNb2R1bGVOYW1lOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuLHI9dGhpcy5nZXQoIm1v
ZHVsZU5hbWVMb29rdXBQYXR0ZXJucyIpLGk9MCxvPXIubGVuZ3RoO2k8bztpKyspe3ZhciBzPXJb
aV0sYT1zLmNhbGwodGhpcyxlKQoraWYoYSYmKGE9dGhpcy5jaG9vc2VNb2R1bGVOYW1lKGEsZSkp
LGEmJnRoaXMuX21vZHVsZVJlZ2lzdHJ5LmhhcyhhKSYmKG49YSksdHx8dGhpcy5fbG9nTG9va3Vw
KG4sZSxhKSxuKXJldHVybiBufX0sY2hvb3NlTW9kdWxlTmFtZTpmdW5jdGlvbihlLG4pe3ZhciBy
PXRoaXMsaT11KGUpCitpZihlIT09aSYmdGhpcy5fbW9kdWxlUmVnaXN0cnkuaGFzKGUpJiZ0aGlz
Ll9tb2R1bGVSZWdpc3RyeS5oYXMoaSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQW1iaWd1b3VzIG1v
ZHVsZSBuYW1lczogYCIrZSsiYCBhbmQgYCIraSsiYCIpCitpZih0aGlzLl9tb2R1bGVSZWdpc3Ry
eS5oYXMoZSkpcmV0dXJuIGUKK2lmKHRoaXMuX21vZHVsZVJlZ2lzdHJ5LmhhcyhpKSlyZXR1cm4g
aQordmFyIG89ZS5yZXBsYWNlKC9cLy0oW15cL10qKSQvLCIvXyQxIikKK2lmKHRoaXMuX21vZHVs
ZVJlZ2lzdHJ5LmhhcyhvKSlyZXR1cm4gdC5kZWZhdWx0LmRlcHJlY2F0ZSgnTW9kdWxlcyBzaG91
bGQgbm90IGNvbnRhaW4gdW5kZXJzY29yZXMuIEF0dGVtcHRlZCB0byBsb29rdXAgIicrZSsnIiB3
aGljaCB3YXMgbm90IGZvdW5kLiBQbGVhc2UgcmVuYW1lICInK28rJyIgdG8gIicrZSsnIiBpbnN0
ZWFkLicsITEse2lkOiJlbWJlci1yZXNvbHZlci51bmRlcnNjb3JlZC1tb2R1bGVzIix1bnRpbDoi
My4wLjAifSksbwordC5kZWZhdWx0LnJ1bkluRGVidWcoZnVuY3Rpb24oKXsiaGVscGVyIiE9PW4u
dHlwZXx8IWUubWF0Y2goL1thLXpdK1tBLVpdKy8pfHwoci5fY2FtZWxDYXNlSGVscGVyV2FybmVk
TmFtZXM9ci5fY2FtZWxDYXNlSGVscGVyV2FybmVkTmFtZXN8fFtdLCEoci5fY2FtZWxDYXNlSGVs
cGVyV2FybmVkTmFtZXMuaW5kZXhPZihuLmZ1bGxOYW1lKT4tMSkmJnIuX21vZHVsZVJlZ2lzdHJ5
LmhhcyhjKGUpKSYmKHIuX2NhbWVsQ2FzZUhlbHBlcldhcm5lZE5hbWVzLnB1c2gobi5mdWxsTmFt
ZSksdC5kZWZhdWx0Lndhcm4oJ0F0dGVtcHRlZCB0byBsb29rdXAgIicrbi5mdWxsTmFtZSsnIiB3
aGljaCB3YXMgbm90IGZvdW5kLiBJbiBwcmV2aW91cyB2ZXJzaW9ucyBvZiBlbWJlci1yZXNvbHZl
ciwgYSBidWcgd291bGQgaGF2ZSBjYXVzZWQgdGhlIG1vZHVsZSBhdCAiJytjKGUpKyciIHRvIGJl
IHJldHVybmVkIGZvciB0aGlzIGNhbWVsIGNhc2UgaGVscGVyIG5hbWUuIFRoaXMgaGFzIGJlZW4g
Zml4ZWQuIFVzZSB0aGUgZGFzaGVyaXplZCBuYW1lIHRvIHJlc29sdmUgdGhlIG1vZHVsZSB0aGF0
IHdvdWxkIGhhdmUgYmVlbiByZXR1cm5lZCBpbiBwcmV2aW91cyB2ZXJzaW9ucy4nLCExLHtpZDoi
ZW1iZXItcmVzb2x2ZXIuY2FtZWxjYXNlLWhlbHBlci1uYW1lcyIsdW50aWw6IjMuMC4wIn0pKSl9
KX0sbG9va3VwRGVzY3JpcHRpb246ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wYXJzZU5hbWUoZSkK
K3JldHVybiB0aGlzLmZpbmRNb2R1bGVOYW1lKHQsITApfSxfbG9nTG9va3VwOmZ1bmN0aW9uKGUs
bixyKXtpZih0LmRlZmF1bHQuRU5WLkxPR19NT0RVTEVfUkVTT0xWRVJ8fG4ucm9vdC5MT0dfUkVT
T0xWRVIpe3ZhciBpLG8KK2k9ZT8iW+Kck10iOiJbIF0iLG89bi5mdWxsTmFtZS5sZW5ndGg+NjA/
Ii4iOm5ldyBBcnJheSg2MC1uLmZ1bGxOYW1lLmxlbmd0aCkuam9pbigiLiIpLHJ8fChyPXRoaXMu
bG9va3VwRGVzY3JpcHRpb24obikpLHQuZGVmYXVsdC5Mb2dnZXIuaW5mbyhpLG4uZnVsbE5hbWUs
byxyKX19LGtub3duRm9yVHlwZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5fbW9kdWxlUmVn
aXN0cnkubW9kdWxlTmFtZXMoKSxuPSgwLGkuZGVmYXVsdCkoKSxyPTAsbz10Lmxlbmd0aDtyPG87
cisrKXt2YXIgcz10W3JdLGE9dGhpcy50cmFuc2xhdGVUb0NvbnRhaW5lckZ1bGxuYW1lKGUscykK
K2EmJihuW2FdPSEwKX1yZXR1cm4gbn0sdHJhbnNsYXRlVG9Db250YWluZXJGdWxsbmFtZTpmdW5j
dGlvbihlLHQpe3ZhciBuPXRoaXMucHJlZml4KHt0eXBlOmV9KSxyPW4rIi8iLGk9Ii8iK2Usbz10
LmluZGV4T2Yocikscz10LmluZGV4T2YoaSkKK2lmKDA9PT1vJiZzPT09dC5sZW5ndGgtaS5sZW5n
dGgmJnQubGVuZ3RoPnIubGVuZ3RoK2kubGVuZ3RoKXJldHVybiBlKyI6Iit0LnNsaWNlKG8rci5s
ZW5ndGgscykKK3ZhciBhPXRoaXMucGx1cmFsaXplKGUpLHU9bisiLyIrYSsiLyIKK3JldHVybiAw
PT09dC5pbmRleE9mKHUpJiZ0Lmxlbmd0aD51Lmxlbmd0aD9lKyI6Iit0LnNsaWNlKHUubGVuZ3Ro
KTp2b2lkIDB9LF9leHRyYWN0RGVmYXVsdEV4cG9ydDpmdW5jdGlvbihlKXt2YXIgdD1yZXF1aXJl
KGUsbnVsbCxudWxsLCEwKQorcmV0dXJuIHQmJnQuZGVmYXVsdCYmKHQ9dC5kZWZhdWx0KSx0fX0p
CitoLnJlb3BlbkNsYXNzKHttb2R1bGVCYXNlZFJlc29sdmVyOiEwfSksZS5kZWZhdWx0PWh9KSxk
ZWZpbmUoImVtYmVyLXJlc29sdmVyL3V0aWxzL2NsYXNzLWZhY3RvcnkiLFsiZXhwb3J0cyJdLGZ1
bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7cmV0dXJue2NyZWF0ZTpmdW5jdGlvbih0KXtyZXR1cm4i
ZnVuY3Rpb24iPT10eXBlb2YgZS5leHRlbmQ/ZS5leHRlbmQodCk6ZX19fWUuZGVmYXVsdD10fSks
ZGVmaW5lKCJlbWJlci1yZXNvbHZlci91dGlscy9jcmVhdGUiLFsiZXhwb3J0cyIsImVtYmVyIl0s
ZnVuY3Rpb24oZSx0KXt2YXIgbj1PYmplY3QuY3JlYXRlfHx0LmRlZmF1bHQuY3JlYXRlCitpZigh
bnx8bihudWxsKS5oYXNPd25Qcm9wZXJ0eSl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgYnJvd3NlciBk
b2VzIG5vdCBzdXBwb3J0IE9iamVjdC5jcmVhdGUobnVsbCksIHBsZWFzZSBwb2x5ZmlsIHdpdGgg
ZXM1LXNoYW06IGh0dHA6Ly9naXQuaW8veUJVMnJnIikKK2UuZGVmYXVsdD1ufSksZGVmaW5lKCJl
bWJlci1yZXNvbHZlci91dGlscy9tYWtlLWRpY3Rpb25hcnkiLFsiZXhwb3J0cyIsImVtYmVyLXJl
c29sdmVyL3V0aWxzL2NyZWF0ZSJdLGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbigpe3ZhciBlPSgw
LHQuZGVmYXVsdCkobnVsbCkKK3JldHVybiBlLl9kaWN0PW51bGwsZGVsZXRlIGUuX2RpY3QsZX1l
LmRlZmF1bHQ9bn0pLGRlZmluZSgiZW1iZXItcmVzb2x2ZXIvdXRpbHMvbW9kdWxlLXJlZ2lzdHJ5
IixbImV4cG9ydHMiLCJlbWJlciJdLGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlKXt0aGlzLl9l
bnRyaWVzPWV8fHJlcXVpcmVqcy5lbnRyaWVzfXZvaWQgMD09PXJlcXVpcmVqcy5lbnRyaWVzJiYo
cmVxdWlyZWpzLmVudHJpZXM9cmVxdWlyZWpzLl9lYWtfc2Vlbiksbi5wcm90b3R5cGUubW9kdWxl
TmFtZXM9ZnVuY3Rpb24oKXtyZXR1cm4oT2JqZWN0LmtleXN8fHQuZGVmYXVsdC5rZXlzKSh0aGlz
Ll9lbnRyaWVzKX0sbi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluIHRoaXMu
X2VudHJpZXN9LG4ucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVu
Z3RoPD0xfHx2b2lkIDA9PT1hcmd1bWVudHNbMV0/ImRlZmF1bHQiOmFyZ3VtZW50c1sxXSxuPXJl
cXVpcmUoZSkKK3JldHVybiBuJiZuW3RdfSxlLmRlZmF1bHQ9bn0pCmRpZmYgLS1naXQgYS9XZWJz
aXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL2Rpc3QvYXNzZXRzL3ZlbmRvci1hNDVjNDRiYzU2
YjQ2OTJjY2E0YTk2YjY5MTZjMGZkZS5jc3MgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1Nw
ZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJl
cmpzL2Rpc3QvYXNzZXRzL3ZlbmRvci1hNDVjNDRiYzU2YjQ2OTJjY2E0YTk2YjY5MTZjMGZkZS5j
c3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNjMyOWZhMTM4OTQ3Mzg3NTY4YzA3NmRlZDAwNTBhYmM4N2JhOTFjZAot
LS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIy
LjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvZGlzdC9h
c3NldHMvdmVuZG9yLWE0NWM0NGJjNTZiNDY5MmNjYTRhOTZiNjkxNmMwZmRlLmNzcwpAQCAtMCww
ICsxIEBACisjaXNzdWUtY291bnQsLmhpZGRlbntkaXNwbGF5Om5vbmV9LmVkaXQsLm5ldy10b2Rv
LGJvZHksYnV0dG9uey1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZX0uZm9vdGVyLC50
b2RvYXBwIGgxLC50b2dnbGUtYWxse3RleHQtYWxpZ246Y2VudGVyfWhye21hcmdpbjoyMHB4IDA7
Ym9yZGVyOjA7Ym9yZGVyLXRvcDoxcHggZGFzaGVkICNjNWM1YzU7Ym9yZGVyLWJvdHRvbToxcHgg
ZGFzaGVkICNmN2Y3Zjd9LmxlYXJuIGF7Zm9udC13ZWlnaHQ6NDAwO3RleHQtZGVjb3JhdGlvbjpu
b25lO2NvbG9yOiNiODNmNDV9LmxlYXJuIGE6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGlu
ZTtjb2xvcjojNzg3ZTdlfS5sZWFybiBoMywubGVhcm4gaDQsLmxlYXJuIGg1e21hcmdpbjoxMHB4
IDA7Zm9udC13ZWlnaHQ6NTAwO2xpbmUtaGVpZ2h0OjEuMjtjb2xvcjojMDAwfS5sZWFybiBoM3tm
b250LXNpemU6MjRweH0ubGVhcm4gaDR7Zm9udC1zaXplOjE4cHh9LmxlYXJuIGg1e21hcmdpbi1i
b3R0b206MDtmb250LXNpemU6MTRweH0ubGVhcm4gdWx7cGFkZGluZzowO21hcmdpbjowIDAgMzBw
eCAyNXB4fS5sZWFybiBsaXtsaW5lLWhlaWdodDoyMHB4fS5sZWFybiBwe2ZvbnQtc2l6ZToxNXB4
O2ZvbnQtd2VpZ2h0OjMwMDtsaW5lLWhlaWdodDoxLjM7bWFyZ2luLXRvcDowO21hcmdpbi1ib3R0
b206MH0ucXVvdGUgcDphZnRlciwucXVvdGUgcDpiZWZvcmV7Zm9udC1zaXplOjUwcHg7b3BhY2l0
eTouMTU7cG9zaXRpb246YWJzb2x1dGV9LnF1b3Rle2JvcmRlcjpub25lO21hcmdpbjoyMHB4IDAg
NjBweH0ucXVvdGUgcHtmb250LXN0eWxlOml0YWxpY30ucXVvdGUgcDpiZWZvcmV7Y29udGVudDon
4oCcJzt0b3A6LTIwcHg7bGVmdDozcHh9LnF1b3RlIHA6YWZ0ZXJ7Y29udGVudDon4oCdJztib3R0
b206LTQycHg7cmlnaHQ6M3B4fS5xdW90ZSBmb290ZXJ7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9t
Oi00MHB4O3JpZ2h0OjB9LnF1b3RlIGZvb3RlciBpbWd7Ym9yZGVyLXJhZGl1czozcHh9LnF1b3Rl
IGZvb3RlciBhe21hcmdpbi1sZWZ0OjVweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LnNwZWVjaC1i
dWJibGV7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzoxMHB4O2JhY2tncm91bmQ6cmdiYSgwLDAs
MCwuMDQpO2JvcmRlci1yYWRpdXM6NXB4fS5zcGVlY2gtYnViYmxlOmFmdGVye2NvbnRlbnQ6Jyc7
cG9zaXRpb246YWJzb2x1dGU7dG9wOjEwMCU7cmlnaHQ6MzBweDtib3JkZXI6MTNweCBzb2xpZCB0
cmFuc3BhcmVudDtib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjA0KX0ubGVhcm4tYmFyPi5s
ZWFybntwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoyNzJweDt0b3A6OHB4O2xlZnQ6LTMwMHB4O3Bh
ZGRpbmc6MTBweDtib3JkZXItcmFkaXVzOjVweDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1
NSwyNTUsLjYpO3RyYW5zaXRpb24tcHJvcGVydHk6bGVmdDt0cmFuc2l0aW9uLWR1cmF0aW9uOi41
c31AbWVkaWEgKG1pbi13aWR0aDo4OTlweCl7LmxlYXJuLWJhcnt3aWR0aDphdXRvO3BhZGRpbmct
bGVmdDozMDBweH0ubGVhcm4tYmFyPi5sZWFybntsZWZ0OjhweH19Ym9keSxidXR0b24saHRtbHtt
YXJnaW46MDtwYWRkaW5nOjB9YnV0dG9ue2JvcmRlcjowO2JhY2tncm91bmQ6MCAwO2ZvbnQtc2l6
ZToxMDAlO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC13
ZWlnaHQ6aW5oZXJpdDtjb2xvcjppbmhlcml0Oy13ZWJraXQtYXBwZWFyYW5jZTpub25lO2FwcGVh
cmFuY2U6bm9uZTstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkfWJvZHl7Zm9udDox
NHB4ICdIZWx2ZXRpY2EgTmV1ZScsSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7bGluZS1oZWln
aHQ6MS40ZW07YmFja2dyb3VuZDojZjVmNWY1O2NvbG9yOiM0ZDRkNGQ7bWluLXdpZHRoOjIzMHB4
O21heC13aWR0aDo1NTBweDttYXJnaW46MCBhdXRvOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50
aWFsaWFzZWQ7Zm9udC13ZWlnaHQ6MzAwfTpmb2N1c3tvdXRsaW5lOjB9LnRvZG9hcHB7YmFja2dy
b3VuZDojZmZmO21hcmdpbjoxMzBweCAwIDQwcHg7cG9zaXRpb246cmVsYXRpdmU7Ym94LXNoYWRv
dzowIDJweCA0cHggMCByZ2JhKDAsMCwwLC4yKSwwIDI1cHggNTBweCAwIHJnYmEoMCwwLDAsLjEp
fS50b2RvYXBwIGlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2ZvbnQtc3R5bGU6aXRh
bGljO2ZvbnQtd2VpZ2h0OjMwMDtjb2xvcjojZTZlNmU2fS50b2RvYXBwIGlucHV0OjotbW96LXBs
YWNlaG9sZGVye2ZvbnQtc3R5bGU6aXRhbGljO2ZvbnQtd2VpZ2h0OjMwMDtjb2xvcjojZTZlNmU2
fS50b2RvYXBwIGlucHV0OjppbnB1dC1wbGFjZWhvbGRlcntmb250LXN0eWxlOml0YWxpYztmb250
LXdlaWdodDozMDA7Y29sb3I6I2U2ZTZlNn0udG9kb2FwcCBoMXtwb3NpdGlvbjphYnNvbHV0ZTt0
b3A6LTE1NXB4O3dpZHRoOjEwMCU7Zm9udC1zaXplOjEwMHB4O2ZvbnQtd2VpZ2h0OjEwMDtjb2xv
cjpyZ2JhKDE3NSw0Nyw0NywuMTUpOy13ZWJraXQtdGV4dC1yZW5kZXJpbmc6b3B0aW1pemVMZWdp
YmlsaXR5Oy1tb3otdGV4dC1yZW5kZXJpbmc6b3B0aW1pemVMZWdpYmlsaXR5O3RleHQtcmVuZGVy
aW5nOm9wdGltaXplTGVnaWJpbGl0eX0uZWRpdCwubmV3LXRvZG97cG9zaXRpb246cmVsYXRpdmU7
bWFyZ2luOjA7d2lkdGg6MTAwJTtmb250LXNpemU6MjRweDtmb250LWZhbWlseTppbmhlcml0O2Zv
bnQtd2VpZ2h0OmluaGVyaXQ7bGluZS1oZWlnaHQ6MS40ZW07Y29sb3I6aW5oZXJpdDtwYWRkaW5n
OjZweDtib3JkZXI6MXB4IHNvbGlkICM5OTk7Ym94LXNoYWRvdzppbnNldCAwIC0xcHggNXB4IDAg
cmdiYSgwLDAsMCwuMik7Ym94LXNpemluZzpib3JkZXItYm94Oy13ZWJraXQtZm9udC1zbW9vdGhp
bmc6YW50aWFsaWFzZWR9Lm5ldy10b2Rve3BhZGRpbmc6MTZweCAxNnB4IDE2cHggNjBweDtib3Jk
ZXI6bm9uZTtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjAwMyk7Ym94LXNoYWRvdzppbnNldCAwIC0y
cHggMXB4IHJnYmEoMCwwLDAsLjAzKX0ubWFpbntwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjI7
Ym9yZGVyLXRvcDoxcHggc29saWQgI2U2ZTZlNn0udG9nZ2xlLWFsbHtib3JkZXI6bm9uZTtvcGFj
aXR5OjA7cG9zaXRpb246YWJzb2x1dGV9LnRvZ2dsZS1hbGwrbGFiZWx7d2lkdGg6NjBweDtoZWln
aHQ6MzRweDtmb250LXNpemU6MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTUycHg7bGVmdDotMTNw
eDstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoOTBkZWcpO3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcp
fS50b2dnbGUtYWxsK2xhYmVsOmJlZm9yZXtjb250ZW50Oifina8nO2ZvbnQtc2l6ZToyMnB4O2Nv
bG9yOiNlNmU2ZTY7cGFkZGluZzoxMHB4IDI3cHh9LnRvZ2dsZS1hbGw6Y2hlY2tlZCtsYWJlbDpi
ZWZvcmV7Y29sb3I6IzczNzM3M30udG9kby1saXN0e21hcmdpbjowO3BhZGRpbmc6MDtsaXN0LXN0
eWxlOm5vbmV9LnRvZG8tbGlzdCBsaXtwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6MjRweDti
b3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWRlZGVkfS50b2RvLWxpc3QgbGk6bGFzdC1jaGlsZHti
b3JkZXItYm90dG9tOm5vbmV9LnRvZG8tbGlzdCBsaS5lZGl0aW5ne2JvcmRlci1ib3R0b206bm9u
ZTtwYWRkaW5nOjB9LnRvZG8tbGlzdCBsaS5lZGl0aW5nIC5lZGl0e2Rpc3BsYXk6YmxvY2s7d2lk
dGg6NTA2cHg7cGFkZGluZzoxMnB4IDE2cHg7bWFyZ2luOjAgMCAwIDQzcHh9LnRvZG8tbGlzdCBs
aS5lZGl0aW5nIC52aWV3e2Rpc3BsYXk6bm9uZX0udG9kby1saXN0IGxpIC50b2dnbGV7dGV4dC1h
bGlnbjpjZW50ZXI7d2lkdGg6NDBweDtoZWlnaHQ6YXV0bztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6
MDtib3R0b206MDttYXJnaW46YXV0byAwO2JvcmRlcjpub25lOy13ZWJraXQtYXBwZWFyYW5jZTpu
b25lO2FwcGVhcmFuY2U6bm9uZTtvcGFjaXR5OjB9LnRvZG8tbGlzdCBsaSAudG9nZ2xlK2xhYmVs
e2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LCUzQ3N2ZyUyMHht
bG5zJTNEJTIyaHR0cCUzQS8vd3d3LnczLm9yZy8yMDAwL3N2ZyUyMiUyMHdpZHRoJTNEJTIyNDAl
MjIlMjBoZWlnaHQlM0QlMjI0MCUyMiUyMHZpZXdCb3glM0QlMjItMTAlMjAtMTglMjAxMDAlMjAx
MzUlMjIlM0UlM0NjaXJjbGUlMjBjeCUzRCUyMjUwJTIyJTIwY3klM0QlMjI1MCUyMiUyMHIlM0Ql
MjI1MCUyMiUyMGZpbGwlM0QlMjJub25lJTIyJTIwc3Ryb2tlJTNEJTIyJTIzZWRlZGVkJTIyJTIw
c3Ryb2tlLXdpZHRoJTNEJTIyMyUyMi8lM0UlM0Mvc3ZnJTNFKTtiYWNrZ3JvdW5kLXJlcGVhdDpu
by1yZXBlYXQ7YmFja2dyb3VuZC1wb3NpdGlvbjpjZW50ZXIgbGVmdH0udG9kby1saXN0IGxpIC50
b2dnbGU6Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3N2Zyt4
bWw7dXRmOCwlM0NzdmclMjB4bWxucyUzRCUyMmh0dHAlM0EvL3d3dy53My5vcmcvMjAwMC9zdmcl
MjIlMjB3aWR0aCUzRCUyMjQwJTIyJTIwaGVpZ2h0JTNEJTIyNDAlMjIlMjB2aWV3Qm94JTNEJTIy
LTEwJTIwLTE4JTIwMTAwJTIwMTM1JTIyJTNFJTNDY2lyY2xlJTIwY3glM0QlMjI1MCUyMiUyMGN5
JTNEJTIyNTAlMjIlMjByJTNEJTIyNTAlMjIlMjBmaWxsJTNEJTIybm9uZSUyMiUyMHN0cm9rZSUz
RCUyMiUyM2JkZGFkNSUyMiUyMHN0cm9rZS13aWR0aCUzRCUyMjMlMjIvJTNFJTNDcGF0aCUyMGZp
bGwlM0QlMjIlMjM1ZGMyYWYlMjIlMjBkJTNEJTIyTTcyJTIwMjVMNDIlMjA3MSUyMDI3JTIwNTZs
LTQlMjA0JTIwMjAlMjAyMCUyMDM0LTUyeiUyMi8lM0UlM0Mvc3ZnJTNFKX0udG9kby1saXN0IGxp
IGxhYmVse3dvcmQtYnJlYWs6YnJlYWstYWxsO3BhZGRpbmc6MTVweCAxNXB4IDE1cHggNjBweDtk
aXNwbGF5OmJsb2NrO2xpbmUtaGVpZ2h0OjEuMjt0cmFuc2l0aW9uOmNvbG9yIC40c30udG9kby1s
aXN0IGxpLmNvbXBsZXRlZCBsYWJlbHtjb2xvcjojZDlkOWQ5O3RleHQtZGVjb3JhdGlvbjpsaW5l
LXRocm91Z2h9LnRvZG8tbGlzdCBsaSAuZGVzdHJveXtkaXNwbGF5Om5vbmU7cG9zaXRpb246YWJz
b2x1dGU7dG9wOjA7cmlnaHQ6MTBweDtib3R0b206MDt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O21h
cmdpbjphdXRvIDAgMTFweDtmb250LXNpemU6MzBweDtjb2xvcjojY2M5YTlhO3RyYW5zaXRpb246
Y29sb3IgLjJzIGVhc2Utb3V0fS5maWx0ZXJzLC5mb290ZXI6YmVmb3Jle3Bvc2l0aW9uOmFic29s
dXRlO3JpZ2h0OjA7bGVmdDowfS50b2RvLWxpc3QgbGkgLmRlc3Ryb3k6aG92ZXJ7Y29sb3I6I2Fm
NWI1ZX0udG9kby1saXN0IGxpIC5kZXN0cm95OmFmdGVye2NvbnRlbnQ6J8OXJ30udG9kby1saXN0
IGxpOmhvdmVyIC5kZXN0cm95e2Rpc3BsYXk6YmxvY2t9LnRvZG8tbGlzdCBsaSAuZWRpdHtkaXNw
bGF5Om5vbmV9LnRvZG8tbGlzdCBsaS5lZGl0aW5nOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTot
MXB4fS5mb290ZXJ7Y29sb3I6Izc3NztwYWRkaW5nOjEwcHggMTVweDtoZWlnaHQ6MjBweDtib3Jk
ZXItdG9wOjFweCBzb2xpZCAjZTZlNmU2fS5mb290ZXI6YmVmb3Jle2NvbnRlbnQ6Jyc7Ym90dG9t
OjA7aGVpZ2h0OjUwcHg7b3ZlcmZsb3c6aGlkZGVuO2JveC1zaGFkb3c6MCAxcHggMXB4IHJnYmEo
MCwwLDAsLjIpLDAgOHB4IDAgLTNweCAjZjZmNmY2LDAgOXB4IDFweCAtM3B4IHJnYmEoMCwwLDAs
LjIpLDAgMTZweCAwIC02cHggI2Y2ZjZmNiwwIDE3cHggMnB4IC02cHggcmdiYSgwLDAsMCwuMil9
LnRvZG8tY291bnR7ZmxvYXQ6bGVmdDt0ZXh0LWFsaWduOmxlZnR9LnRvZG8tY291bnQgc3Ryb25n
e2ZvbnQtd2VpZ2h0OjMwMH0uZmlsdGVyc3ttYXJnaW46MDtwYWRkaW5nOjA7bGlzdC1zdHlsZTpu
b25lfS5maWx0ZXJzIGxpe2Rpc3BsYXk6aW5saW5lfS5maWx0ZXJzIGxpIGF7Y29sb3I6aW5oZXJp
dDttYXJnaW46M3B4O3BhZGRpbmc6M3B4IDdweDt0ZXh0LWRlY29yYXRpb246bm9uZTtib3JkZXI6
MXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6M3B4fS5maWx0ZXJzIGxpIGE6aG92
ZXJ7Ym9yZGVyLWNvbG9yOnJnYmEoMTc1LDQ3LDQ3LC4xKX0uZmlsdGVycyBsaSBhLnNlbGVjdGVk
e2JvcmRlci1jb2xvcjpyZ2JhKDE3NSw0Nyw0NywuMil9LmNsZWFyLWNvbXBsZXRlZCxodG1sIC5j
bGVhci1jb21wbGV0ZWQ6YWN0aXZle2Zsb2F0OnJpZ2h0O3Bvc2l0aW9uOnJlbGF0aXZlO2xpbmUt
aGVpZ2h0OjIwcHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y3Vyc29yOnBvaW50ZXJ9LmNsZWFyLWNv
bXBsZXRlZDpob3Zlcnt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5pbmZve21hcmdpbjo2NXB4
IGF1dG8gMDtjb2xvcjojYmZiZmJmO2ZvbnQtc2l6ZToxMHB4O3RleHQtc2hhZG93OjAgMXB4IDAg
cmdiYSgyNTUsMjU1LDI1NSwuNSk7dGV4dC1hbGlnbjpjZW50ZXJ9LmluZm8gcHtsaW5lLWhlaWdo
dDoxfS5pbmZvIGF7Y29sb3I6aW5oZXJpdDt0ZXh0LWRlY29yYXRpb246bm9uZTtmb250LXdlaWdo
dDo0MDB9LmluZm8gYTpob3Zlcnt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfUBtZWRpYSBzY3Jl
ZW4gYW5kICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MCl7LnRvZG8tbGlzdCBsaSAu
dG9nZ2xlLC50b2dnbGUtYWxse2JhY2tncm91bmQ6MCAwfS50b2RvLWxpc3QgbGkgLnRvZ2dsZXto
ZWlnaHQ6NDBweH19QG1lZGlhIChtYXgtd2lkdGg6NDMwcHgpey5mb290ZXJ7aGVpZ2h0OjUwcHh9
LmZpbHRlcnN7Ym90dG9tOjEwcHh9fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAt
LWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2Vz
L3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvZGlzdC9jcm9zc2RvbWFpbi54
bWwgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90
b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL2Rpc3QvY3Jvc3Nkb21haW4ueG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjBjMTZhN2EwN2IzN2U1ZDVmN2UwZTU2YzgyOWY3MjAwNjc0NTg0MDMKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4x
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL2Rpc3QvY3Jv
c3Nkb21haW4ueG1sCkBAIC0wLDAgKzEsMTUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFE
T0NUWVBFIGNyb3NzLWRvbWFpbi1wb2xpY3kgU1lTVEVNICJodHRwOi8vd3d3LmFkb2JlLmNvbS94
bWwvZHRkcy9jcm9zcy1kb21haW4tcG9saWN5LmR0ZCI+Cis8Y3Jvc3MtZG9tYWluLXBvbGljeT4K
KyAgPCEtLSBSZWFkIHRoaXM6IHd3dy5hZG9iZS5jb20vZGV2bmV0L2FydGljbGVzL2Nyb3NzZG9t
YWluX3BvbGljeV9maWxlX3NwZWMuaHRtbCAtLT4KKworICA8IS0tIE1vc3QgcmVzdHJpY3RpdmUg
cG9saWN5OiAtLT4KKyAgPHNpdGUtY29udHJvbCBwZXJtaXR0ZWQtY3Jvc3MtZG9tYWluLXBvbGlj
aWVzPSJub25lIi8+CisKKyAgPCEtLSBMZWFzdCByZXN0cmljdGl2ZSBwb2xpY3k6IC0tPgorICA8
IS0tCisgIDxzaXRlLWNvbnRyb2wgcGVybWl0dGVkLWNyb3NzLWRvbWFpbi1wb2xpY2llcz0iYWxs
Ii8+CisgIDxhbGxvdy1hY2Nlc3MtZnJvbSBkb21haW49IioiIHRvLXBvcnRzPSIqIiBzZWN1cmU9
ImZhbHNlIi8+CisgIDxhbGxvdy1odHRwLXJlcXVlc3QtaGVhZGVycy1mcm9tIGRvbWFpbj0iKiIg
aGVhZGVycz0iKiIgc2VjdXJlPSJmYWxzZSIvPgorICAtLT4KKzwvY3Jvc3MtZG9tYWluLXBvbGlj
eT4KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEv
cmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvZGlzdC9pbmRl
eC5odG1sIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9kaXN0L2luZGV4Lmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMWY4MDk3ZDk1OGQ2Yjc3YjQ4NTE2ZGZkNGJhNWIxNDBmNWJjZmJkNgotLS0g
L2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEv
cmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvZGlzdC9pbmRl
eC5odG1sCkBAIC0wLDAgKzEsMjAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+CisgIDxoZWFk
PgorICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVB
LUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UiPgorICAgIDx0aXRsZT5FbWJlci5qcyBUb2Rv
TVZDIGV4YW1wbGU8L3RpdGxlPgorICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50
PSIiPgorICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lk
dGgsIGluaXRpYWwtc2NhbGU9MSI+CisgICAgCis8bWV0YSBuYW1lPSJ0b2RvbXZjL2NvbmZpZy9l
bnZpcm9ubWVudCIgY29udGVudD0iJTdCJTIybW9kdWxlUHJlZml4JTIyJTNBJTIydG9kb212YyUy
MiUyQyUyMmVudmlyb25tZW50JTIyJTNBJTIycHJvZHVjdGlvbiUyMiUyQyUyMmJhc2VVUkwlMjIl
M0FudWxsJTJDJTIybG9jYXRpb25UeXBlJTIyJTNBJTIyaGFzaCUyMiUyQyUyMkVtYmVyRU5WJTIy
JTNBJTdCJTIyRkVBVFVSRVMlMjIlM0ElN0IlN0QlMkMlMjJFWFRFTkRfUFJPVE9UWVBFUyUyMiUz
QSU3QiUyMkRhdGUlMjIlM0FmYWxzZSU3RCU3RCUyQyUyMkFQUCUyMiUzQSU3QiUyMm5hbWUlMjIl
M0ElMjJ0b2RvbXZjJTIyJTJDJTIydmVyc2lvbiUyMiUzQSUyMjAuMC4wK2JjMzc3NTJmJTIyJTdE
JTJDJTIyZXhwb3J0QXBwbGljYXRpb25HbG9iYWwlMjIlM0FmYWxzZSU3RCIgLz4KKyAgICA8bGlu
ayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImFzc2V0cy92ZW5kb3ItYTQ1YzQ0YmM1NmI0NjkyY2Nh
NGE5NmI2OTE2YzBmZGUuY3NzIiBpbnRlZ3JpdHk9InNoYTI1Ni13cmk3MU5nUlNTOFJpMk1ZbXVl
bmNYdllMK3lRRHdlcWM0TFg5eXJDc3R3PSBzaGE1MTItUXV6MXVLWjh0Y0NJdkI5c2FmZHNGaVds
UlN1bkp5Sys4ZWxhcEgrTXg0cUx4MisxQ3pZT0FianBhUURwbWxNdHRMK05yYTFQMzYxeVpySXlS
aFBEREE9PSIgPgorICAgIAorICA8L2hlYWQ+CisgIDxib2R5PgorICAgIAorICAgIDxzY3JpcHQg
c3JjPSJhc3NldHMvdmVuZG9yLTgyMDkxOTU2N2ViN2JkNGQ5ZmFjMzU4YTkwYTVhYWM0LmpzIiBp
bnRlZ3JpdHk9InNoYTI1Ni1CWkhCYmYxVTIxK2tnUFltb0lLN2dMa3FIdTg4djVjd0VWRmZ3VVBY
b2pzPSBzaGE1MTItMllXckFiUjQ1cDhmazMveTRRaGJvay9LVWZMRS92NnlNU1VxSVduY1RtV3Fm
SmJ5SmowK0FpVGtKTDAzazBvUFVNWmJGWXlReDlTdUw2WG9YcDRzZ2c9PSIgPjwvc2NyaXB0Pgor
ICAgIDxzY3JpcHQgc3JjPSJhc3NldHMvdG9kb212Yy01ZDNlOGViM2Q1YjM3NDBhMzMxODVlZGNi
MTFlZWI1Ny5qcyIgaW50ZWdyaXR5PSJzaGEyNTYtVGxSM01TQzArcEVXN3lwV0hvMktiS0o4YUdp
N2ViSzNBQXlYVmRHbEdKaz0gc2hhNTEyLVZyTlY5V2ZJR0Izc1I4Zm0xcWhMUXdJSVNENEFRYmFy
YzVQcXJLQWRkZk5nK2VOWS9OeW5UQTNOL2VXMFNIV1F0T21OeFNNT3RQK2FabEtmTGkzcjJBPT0i
ID48L3NjcmlwdD4KKyAgICAKKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvV2Vic2l0
ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9kaXN0L3JvYm90cy50eHQgYi9XZWJzaXRlcy9icm93
c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVy
ZS1leGFtcGxlcy9lbWJlcmpzL2Rpc3Qvcm9ib3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNTkxNjQ1MmU1
ZmY2YzhiNDNkNmQ3YzczZDAwMTUzZDM0YWMzNWRlCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0
ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9kaXN0L3JvYm90cy50eHQKQEAgLTAsMCArMSwzIEBA
CisjIGh0dHA6Ly93d3cucm9ib3RzdHh0Lm9yZworVXNlci1hZ2VudDogKgorRGlzYWxsb3c6CmRp
ZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL2VtYmVyLWNsaS1idWls
ZC5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2Vz
L3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvZW1iZXItY2xpLWJ1aWxkLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmIxZGJmNTkxOGNiODEwOThjODMwYmYzODViMWJjNWQ5NDRjZTA5NWMKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4x
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL2VtYmVyLWNs
aS1idWlsZC5qcwpAQCAtMCwwICsxLDI2IEBACisvKmpzaGludCBub2RlOnRydWUqLworLyogZ2xv
YmFsIHJlcXVpcmUsIG1vZHVsZSAqLwordmFyIEVtYmVyQXBwID0gcmVxdWlyZSgnZW1iZXItY2xp
L2xpYi9icm9jY29saS9lbWJlci1hcHAnKTsKKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAo
ZGVmYXVsdHMpIHsKKyAgICB2YXIgYXBwID0gbmV3IEVtYmVyQXBwKGRlZmF1bHRzLCB7CisgICAg
ICAgIC8vIEFkZCBvcHRpb25zIGhlcmUKKyAgICB9KTsKKworICAgIGFwcC5pbXBvcnQoJ3ZlbmRv
ci9iYXNlLmNzcycpOworICAgIGFwcC5pbXBvcnQoJ3ZlbmRvci9pbmRleC5jc3MnKTsKKyAgICAv
LyBVc2UgYGFwcC5pbXBvcnRgIHRvIGFkZCBhZGRpdGlvbmFsIGxpYnJhcmllcyB0byB0aGUgZ2Vu
ZXJhdGVkCisgICAgLy8gb3V0cHV0IGZpbGVzLgorICAgIC8vCisgICAgLy8gSWYgeW91IG5lZWQg
dG8gdXNlIGRpZmZlcmVudCBhc3NldHMgaW4gZGlmZmVyZW50CisgICAgLy8gZW52aXJvbm1lbnRz
LCBzcGVjaWZ5IGFuIG9iamVjdCBhcyB0aGUgZmlyc3QgcGFyYW1ldGVyLiBUaGF0CisgICAgLy8g
b2JqZWN0J3Mga2V5cyBzaG91bGQgYmUgdGhlIGVudmlyb25tZW50IG5hbWUgYW5kIHRoZSB2YWx1
ZXMKKyAgICAvLyBzaG91bGQgYmUgdGhlIGFzc2V0IHRvIHVzZSBpbiB0aGF0IGVudmlyb25tZW50
LgorICAgIC8vCisgICAgLy8gSWYgdGhlIGxpYnJhcnkgdGhhdCB5b3UgYXJlIGluY2x1ZGluZyBj
b250YWlucyBBTUQgb3IgRVM2CisgICAgLy8gbW9kdWxlcyB0aGF0IHlvdSB3b3VsZCBsaWtlIHRv
IGltcG9ydCBpbnRvIHlvdXIgYXBwbGljYXRpb24KKyAgICAvLyBwbGVhc2Ugc3BlY2lmeSBhbiBv
YmplY3Qgd2l0aCB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGtleXMKKyAgICAvLyBhbG9uZyB3aXRo
IHRoZSBleHBvcnRzIG9mIGVhY2ggbW9kdWxlIGFzIGl0cyB2YWx1ZS4KKworICAgIHJldHVybiBh
cHAudG9UcmVlKCk7Cit9OwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9T
cGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1i
ZXJqcy9wdWJsaWMvY3Jvc3Nkb21haW4ueG1sIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9T
cGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1i
ZXJqcy9wdWJsaWMvY3Jvc3Nkb21haW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBjMTZhN2EwN2IzN2U1ZDVm
N2UwZTU2YzgyOWY3MjAwNjc0NTg0MDMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93
c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVy
ZS1leGFtcGxlcy9lbWJlcmpzL3B1YmxpYy9jcm9zc2RvbWFpbi54bWwKQEAgLTAsMCArMSwxNSBA
QAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgY3Jvc3MtZG9tYWluLXBvbGljeSBT
WVNURU0gImh0dHA6Ly93d3cuYWRvYmUuY29tL3htbC9kdGRzL2Nyb3NzLWRvbWFpbi1wb2xpY3ku
ZHRkIj4KKzxjcm9zcy1kb21haW4tcG9saWN5PgorICA8IS0tIFJlYWQgdGhpczogd3d3LmFkb2Jl
LmNvbS9kZXZuZXQvYXJ0aWNsZXMvY3Jvc3Nkb21haW5fcG9saWN5X2ZpbGVfc3BlYy5odG1sIC0t
PgorCisgIDwhLS0gTW9zdCByZXN0cmljdGl2ZSBwb2xpY3k6IC0tPgorICA8c2l0ZS1jb250cm9s
IHBlcm1pdHRlZC1jcm9zcy1kb21haW4tcG9saWNpZXM9Im5vbmUiLz4KKworICA8IS0tIExlYXN0
IHJlc3RyaWN0aXZlIHBvbGljeTogLS0+CisgIDwhLS0KKyAgPHNpdGUtY29udHJvbCBwZXJtaXR0
ZWQtY3Jvc3MtZG9tYWluLXBvbGljaWVzPSJhbGwiLz4KKyAgPGFsbG93LWFjY2Vzcy1mcm9tIGRv
bWFpbj0iKiIgdG8tcG9ydHM9IioiIHNlY3VyZT0iZmFsc2UiLz4KKyAgPGFsbG93LWh0dHAtcmVx
dWVzdC1oZWFkZXJzLWZyb20gZG9tYWluPSIqIiBoZWFkZXJzPSIqIiBzZWN1cmU9ImZhbHNlIi8+
CisgIC0tPgorPC9jcm9zcy1kb21haW4tcG9saWN5PgpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJv
d3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1
cmUtZXhhbXBsZXMvZW1iZXJqcy9wdWJsaWMvcm9ib3RzLnR4dCBiL1dlYnNpdGVzL2Jyb3dzZXJi
ZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL2VtYmVyanMvcHVibGljL3JvYm90cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjU5MTY0NTJlNWZm
NmM4YjQzZDZkN2M3M2QwMDE1M2QzNGFjMzVkZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVz
L2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvcHVibGljL3JvYm90cy50eHQKQEAgLTAsMCArMSwzIEBA
CisjIGh0dHA6Ly93d3cucm9ib3RzdHh0Lm9yZworVXNlci1hZ2VudDogKgorRGlzYWxsb3c6CmRp
ZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3Rlc3RlbS5qcyBiL1dl
YnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvdGVzdGVtLmpzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRlMTQy
ZWUxMDRmZTZjNjFhNmQyYWI5YTc1NTQwNTM3NGQwODIyYjUKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZj
L2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3Rlc3RlbS5qcwpAQCAtMCwwICsxLDEzIEBA
CisvKmpzaGludCBub2RlOnRydWUqLworbW9kdWxlLmV4cG9ydHMgPSB7CisgICAgZnJhbWV3b3Jr
OiAncXVuaXQnLAorICAgIHRlc3RfcGFnZTogJ3Rlc3RzL2luZGV4Lmh0bWw/aGlkZXBhc3NlZCcs
CisgICAgZGlzYWJsZV93YXRjaGluZzogdHJ1ZSwKKyAgICBsYXVuY2hfaW5fY2k6IFsKKyAgICAg
ICAgJ1BoYW50b21KUycKKyAgICBdLAorICAgIGxhdW5jaF9pbl9kZXY6IFsKKyAgICAgICAgJ1Bo
YW50b21KUycsCisgICAgICAgICdDaHJvbWUnCisgICAgXQorfTsKZGlmZiAtLWdpdCBhL1dlYnNp
dGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvdGVzdHMvaGVscGVycy9kZXN0cm95LWFwcC5qcyBi
L1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9t
dmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvdGVzdHMvaGVscGVycy9kZXN0cm95LWFw
cC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4xM2Q0OTg5NTAxMmQ5NmEyOWNhNWFjN2M2MWRhZGFmYWE5YjNjYTQ1
Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRl
cjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy90ZXN0
cy9oZWxwZXJzL2Rlc3Ryb3ktYXBwLmpzCkBAIC0wLDAgKzEsNSBAQAoraW1wb3J0IEVtYmVyIGZy
b20gJ2VtYmVyJzsKKworZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVzdHJveUFwcChhcHBsaWNh
dGlvbikgeworICAgIEVtYmVyLnJ1bihhcHBsaWNhdGlvbiwgJ2Rlc3Ryb3knKTsKK30KZGlmZiAt
LWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2Vz
L3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvdGVzdHMvaGVscGVycy9tb2R1
bGUtZm9yLWFjY2VwdGFuY2UuanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21l
dGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3Rl
c3RzL2hlbHBlcnMvbW9kdWxlLWZvci1hY2NlcHRhbmNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZmYmUxMzUw
MGViMDk3NWY3M2U5ZGNjMTM1NjQyODcyZGQ5NGE2MjkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJz
aXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3Rlc3RzL2hlbHBlcnMvbW9kdWxlLWZvci1hY2Nl
cHRhbmNlLmpzCkBAIC0wLDAgKzEsMjMgQEAKK2ltcG9ydCB7IG1vZHVsZSB9IGZyb20gJ3F1bml0
JzsKK2ltcG9ydCBFbWJlciBmcm9tICdlbWJlcic7CitpbXBvcnQgc3RhcnRBcHAgZnJvbSAnLi4v
aGVscGVycy9zdGFydC1hcHAnOworaW1wb3J0IGRlc3Ryb3lBcHAgZnJvbSAnLi4vaGVscGVycy9k
ZXN0cm95LWFwcCc7CisKK2NvbnN0IHsgUlNWUDogeyBQcm9taXNlIH0gfSA9IEVtYmVyOworCitl
eHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAobmFtZSwgb3B0aW9ucyA9IHt9KSB7CisgICAgbW9kdWxl
KG5hbWUsIHsKKyAgICAgICAgYmVmb3JlRWFjaCgpIHsKKyAgICAgICAgICAgIHRoaXMuYXBwbGlj
YXRpb24gPSBzdGFydEFwcCgpOworCisgICAgICAgICAgICBpZiAob3B0aW9ucy5iZWZvcmVFYWNo
KSB7CisgICAgICAgICAgICAgICAgb3B0aW9ucy5iZWZvcmVFYWNoLmFwcGx5KHRoaXMsIGFyZ3Vt
ZW50cyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisKKyAgICAgICAgYWZ0ZXJFYWNoKCkg
eworICAgICAgICAgICAgbGV0IGFmdGVyRWFjaCA9IG9wdGlvbnMuYWZ0ZXJFYWNoICYmIG9wdGlv
bnMuYWZ0ZXJFYWNoLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgICAgICByZXR1cm4g
UHJvbWlzZS5yZXNvbHZlKGFmdGVyRWFjaCkudGhlbigoKSA9PiBkZXN0cm95QXBwKHRoaXMuYXBw
bGljYXRpb24pKTsKKyAgICAgICAgfQorICAgIH0pOworfQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMv
YnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvZW1iZXJqcy90ZXN0cy9oZWxwZXJzL3Jlc29sdmVyLmpzIGIvV2Vic2l0
ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy90ZXN0cy9oZWxwZXJzL3Jlc29sdmVyLmpzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjUwZTkxNzlmNTQ2MzUwMjVmOTUwNGEzNDllNDIzMDJhODAwNWZjMzIKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3Rlc3RzL2hlbHBlcnMv
cmVzb2x2ZXIuanMKQEAgLTAsMCArMSwxMSBAQAoraW1wb3J0IFJlc29sdmVyIGZyb20gJy4uLy4u
L3Jlc29sdmVyJzsKK2ltcG9ydCBjb25maWcgZnJvbSAnLi4vLi4vY29uZmlnL2Vudmlyb25tZW50
JzsKKworY29uc3QgcmVzb2x2ZXIgPSBSZXNvbHZlci5jcmVhdGUoKTsKKworcmVzb2x2ZXIubmFt
ZXNwYWNlID0geworICAgIG1vZHVsZVByZWZpeDogY29uZmlnLm1vZHVsZVByZWZpeCwKKyAgICBw
b2RNb2R1bGVQcmVmaXg6IGNvbmZpZy5wb2RNb2R1bGVQcmVmaXgKK307CisKK2V4cG9ydCBkZWZh
dWx0IHJlc29sdmVyOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVl
ZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJq
cy90ZXN0cy9oZWxwZXJzL3N0YXJ0LWFwcC5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcv
U3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2Vt
YmVyanMvdGVzdHMvaGVscGVycy9zdGFydC1hcHAuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGQ1ZjZhNjM2MWFm
N2VkYmM0ODg0ZDMwOGQ0MmJlODkwZmViOTc0OQotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVz
L2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvdGVzdHMvaGVscGVycy9zdGFydC1hcHAuanMKQEAgLTAs
MCArMSwxOCBAQAoraW1wb3J0IEVtYmVyIGZyb20gJ2VtYmVyJzsKK2ltcG9ydCBBcHBsaWNhdGlv
biBmcm9tICcuLi8uLi9hcHAnOworaW1wb3J0IGNvbmZpZyBmcm9tICcuLi8uLi9jb25maWcvZW52
aXJvbm1lbnQnOworCitleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydEFwcChhdHRycykgewor
ICAgIGxldCBhcHBsaWNhdGlvbjsKKworICAgIC8vIHVzZSBkZWZhdWx0cywgYnV0IHlvdSBjYW4g
b3ZlcnJpZGUKKyAgICBsZXQgYXR0cmlidXRlcyA9IEVtYmVyLmFzc2lnbih7fSwgY29uZmlnLkFQ
UCwgYXR0cnMpOworCisgICAgRW1iZXIucnVuKCgpID0+IHsKKyAgICAgICAgYXBwbGljYXRpb24g
PSBBcHBsaWNhdGlvbi5jcmVhdGUoYXR0cmlidXRlcyk7CisgICAgICAgIGFwcGxpY2F0aW9uLnNl
dHVwRm9yVGVzdGluZygpOworICAgICAgICBhcHBsaWNhdGlvbi5pbmplY3RUZXN0SGVscGVycygp
OworICAgIH0pOworCisgICAgcmV0dXJuIGFwcGxpY2F0aW9uOworfQpkaWZmIC0tZ2l0IGEvV2Vi
c2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy90ZXN0cy9pbmRleC5odG1sIGIvV2Vic2l0ZXMv
YnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvZW1iZXJqcy90ZXN0cy9pbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjExMjc4
N2Y1NzBmOTAyNjlhZWMxYTM3NmY3ZWQ2ZTVmNzRlYjBiMjEKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZj
L2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3Rlc3RzL2luZGV4Lmh0bWwKQEAgLTAsMCAr
MSwzMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPG1ldGEgY2hh
cnNldD0idXRmLTgiPgorICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29u
dGVudD0iSUU9ZWRnZSI+CisgICAgPHRpdGxlPlRvZG9tdmMgVGVzdHM8L3RpdGxlPgorICAgIDxt
ZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSIiPgorICAgIDxtZXRhIG5hbWU9InZpZXdw
b3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSI+CisKKyAg
ICB7e2NvbnRlbnQtZm9yICJoZWFkIn19CisgICAge3tjb250ZW50LWZvciAidGVzdC1oZWFkIn19
CisKKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Int7cm9vdFVSTH19YXNzZXRzL3Zl
bmRvci5jc3MiPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ie3tyb290VVJMfX1h
c3NldHMvdG9kb212Yy5jc3MiPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ie3ty
b290VVJMfX1hc3NldHMvdGVzdC1zdXBwb3J0LmNzcyI+CisKKyAgICB7e2NvbnRlbnQtZm9yICJo
ZWFkLWZvb3RlciJ9fQorICAgIHt7Y29udGVudC1mb3IgInRlc3QtaGVhZC1mb290ZXIifX0KKyAg
PC9oZWFkPgorICA8Ym9keT4KKyAgICB7e2NvbnRlbnQtZm9yICJib2R5In19CisgICAge3tjb250
ZW50LWZvciAidGVzdC1ib2R5In19CisKKyAgICA8c2NyaXB0IHNyYz0iL3Rlc3RlbS5qcyIgaW50
ZWdyaXR5PSIiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJ7e3Jvb3RVUkx9fWFzc2V0cy92
ZW5kb3IuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJ7e3Jvb3RVUkx9fWFzc2V0cy90
ZXN0LXN1cHBvcnQuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJ7e3Jvb3RVUkx9fWFz
c2V0cy90b2RvbXZjLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0ie3tyb290VVJMfX1h
c3NldHMvdGVzdHMuanMiPjwvc2NyaXB0PgorCisgICAge3tjb250ZW50LWZvciAiYm9keS1mb290
ZXIifX0KKyAgICB7e2NvbnRlbnQtZm9yICJ0ZXN0LWJvZHktZm9vdGVyIn19CisgIDwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0
ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvdGVz
dHMvdGVzdC1oZWxwZXIuanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVy
Mi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3Rlc3Rz
L3Rlc3QtaGVscGVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRjOTk2MWZkNTZhMTJiN2VlMmIyZDhjMTc1MjBl
ZmRhM2Q2YTBkNzkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3Jn
L1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9l
bWJlcmpzL3Rlc3RzL3Rlc3QtaGVscGVyLmpzCkBAIC0wLDAgKzEsNiBAQAoraW1wb3J0IHJlc29s
dmVyIGZyb20gJy4vaGVscGVycy9yZXNvbHZlcic7CitpbXBvcnQgeworICAgIHNldFJlc29sdmVy
Cit9IGZyb20gJ2VtYmVyLXF1bml0JzsKKworc2V0UmVzb2x2ZXIocmVzb2x2ZXIpOwpkaWZmIC0t
Z2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy92ZW5kb3IvYmFzZS5jc3MgYi9X
ZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZj
L2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3ZlbmRvci9iYXNlLmNzcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li40ZDI1ZDNjODRhYzZjNmFlZjI2Yjk2ODNhMmJjMTBjNjFmOTYwYzhmCi0tLSAvZGV2L251bGwK
KysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy92ZW5kb3IvYmFzZS5jc3MKQEAg
LTAsMCArMSwxNDEgQEAKK2hyIHsKKyAgICBtYXJnaW46IDIwcHggMDsKKyAgICBib3JkZXI6IDA7
CisgICAgYm9yZGVyLXRvcDogMXB4IGRhc2hlZCAjYzVjNWM1OworICAgIGJvcmRlci1ib3R0b206
IDFweCBkYXNoZWQgI2Y3ZjdmNzsKK30KKworLmxlYXJuIGEgeworICAgIGZvbnQtd2VpZ2h0OiBu
b3JtYWw7CisgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgIGNvbG9yOiAjYjgzZjQ1Owor
fQorCisubGVhcm4gYTpob3ZlciB7CisgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cisg
ICAgY29sb3I6ICM3ODdlN2U7Cit9CisKKy5sZWFybiBoMywKKy5sZWFybiBoNCwKKy5sZWFybiBo
NSB7CisgICAgbWFyZ2luOiAxMHB4IDA7CisgICAgZm9udC13ZWlnaHQ6IDUwMDsKKyAgICBsaW5l
LWhlaWdodDogMS4yOworICAgIGNvbG9yOiAjMDAwOworfQorCisubGVhcm4gaDMgeworICAgIGZv
bnQtc2l6ZTogMjRweDsKK30KKworLmxlYXJuIGg0IHsKKyAgICBmb250LXNpemU6IDE4cHg7Cit9
CisKKy5sZWFybiBoNSB7CisgICAgbWFyZ2luLWJvdHRvbTogMDsKKyAgICBmb250LXNpemU6IDE0
cHg7Cit9CisKKy5sZWFybiB1bCB7CisgICAgcGFkZGluZzogMDsKKyAgICBtYXJnaW46IDAgMCAz
MHB4IDI1cHg7Cit9CisKKy5sZWFybiBsaSB7CisgICAgbGluZS1oZWlnaHQ6IDIwcHg7Cit9CisK
Ky5sZWFybiBwIHsKKyAgICBmb250LXNpemU6IDE1cHg7CisgICAgZm9udC13ZWlnaHQ6IDMwMDsK
KyAgICBsaW5lLWhlaWdodDogMS4zOworICAgIG1hcmdpbi10b3A6IDA7CisgICAgbWFyZ2luLWJv
dHRvbTogMDsKK30KKworI2lzc3VlLWNvdW50IHsKKyAgICBkaXNwbGF5OiBub25lOworfQorCisu
cXVvdGUgeworICAgIGJvcmRlcjogbm9uZTsKKyAgICBtYXJnaW46IDIwcHggMCA2MHB4IDA7Cit9
CisKKy5xdW90ZSBwIHsKKyAgICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKKy5xdW90ZSBwOmJl
Zm9yZSB7CisgICAgY29udGVudDogJ+KAnCc7CisgICAgZm9udC1zaXplOiA1MHB4OworICAgIG9w
YWNpdHk6IC4xNTsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAtMjBweDsKKyAg
ICBsZWZ0OiAzcHg7Cit9CisKKy5xdW90ZSBwOmFmdGVyIHsKKyAgICBjb250ZW50OiAn4oCdJzsK
KyAgICBmb250LXNpemU6IDUwcHg7CisgICAgb3BhY2l0eTogLjE1OworICAgIHBvc2l0aW9uOiBh
YnNvbHV0ZTsKKyAgICBib3R0b206IC00MnB4OworICAgIHJpZ2h0OiAzcHg7Cit9CisKKy5xdW90
ZSBmb290ZXIgeworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICBib3R0b206IC00MHB4Owor
ICAgIHJpZ2h0OiAwOworfQorCisucXVvdGUgZm9vdGVyIGltZyB7CisgICAgYm9yZGVyLXJhZGl1
czogM3B4OworfQorCisucXVvdGUgZm9vdGVyIGEgeworICAgIG1hcmdpbi1sZWZ0OiA1cHg7Cisg
ICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKK30KKworLnNwZWVjaC1idWJibGUgeworICAgIHBv
c2l0aW9uOiByZWxhdGl2ZTsKKyAgICBwYWRkaW5nOiAxMHB4OworICAgIGJhY2tncm91bmQ6IHJn
YmEoMCwgMCwgMCwgLjA0KTsKKyAgICBib3JkZXItcmFkaXVzOiA1cHg7Cit9CisKKy5zcGVlY2gt
YnViYmxlOmFmdGVyIHsKKyAgICBjb250ZW50OiAnJzsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7
CisgICAgdG9wOiAxMDAlOworICAgIHJpZ2h0OiAzMHB4OworICAgIGJvcmRlcjogMTNweCBzb2xp
ZCB0cmFuc3BhcmVudDsKKyAgICBib3JkZXItdG9wLWNvbG9yOiByZ2JhKDAsIDAsIDAsIC4wNCk7
Cit9CisKKy5sZWFybi1iYXIgPiAubGVhcm4geworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAg
ICB3aWR0aDogMjcycHg7CisgICAgdG9wOiA4cHg7CisgICAgbGVmdDogLTMwMHB4OworICAgIHBh
ZGRpbmc6IDEwcHg7CisgICAgYm9yZGVyLXJhZGl1czogNXB4OworICAgIGJhY2tncm91bmQtY29s
b3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgLjYpOworICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IGxl
ZnQ7CisgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogNTAwbXM7Cit9CisKK0BtZWRpYSAobWluLXdp
ZHRoOiA4OTlweCkgeworICAgIC5sZWFybi1iYXIgeworICAgICAgICB3aWR0aDogYXV0bzsKKyAg
ICAgICAgcGFkZGluZy1sZWZ0OiAzMDBweDsKKyAgICB9CisKKyAgICAubGVhcm4tYmFyID4gLmxl
YXJuIHsKKyAgICAgICAgbGVmdDogOHB4OworICAgIH0KK30KZGlmZiAtLWdpdCBhL1dlYnNpdGVz
L2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvdmVuZG9yL2luZGV4LmNzcyBiL1dlYnNpdGVzL2Jyb3dz
ZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL2VtYmVyanMvdmVuZG9yL2luZGV4LmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMDRmYmRiZGI0
ZWQ0YWZlMDlkNTU0M2RiNTIwZGM2YTlkZGQ0MWIyCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0
ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy92ZW5kb3IvaW5kZXguY3NzCkBAIC0wLDAgKzEsMzc2
IEBACitodG1sLAorYm9keSB7CisgICAgbWFyZ2luOiAwOworICAgIHBhZGRpbmc6IDA7Cit9CisK
K2J1dHRvbiB7CisgICAgbWFyZ2luOiAwOworICAgIHBhZGRpbmc6IDA7CisgICAgYm9yZGVyOiAw
OworICAgIGJhY2tncm91bmQ6IG5vbmU7CisgICAgZm9udC1zaXplOiAxMDAlOworICAgIHZlcnRp
Y2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICBmb250LWZhbWlseTogaW5oZXJpdDsKKyAgICBmb250
LXdlaWdodDogaW5oZXJpdDsKKyAgICBjb2xvcjogaW5oZXJpdDsKKyAgICAtd2Via2l0LWFwcGVh
cmFuY2U6IG5vbmU7CisgICAgYXBwZWFyYW5jZTogbm9uZTsKKyAgICAtd2Via2l0LWZvbnQtc21v
b3RoaW5nOiBhbnRpYWxpYXNlZDsKKyAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNj
YWxlOworfQorCitib2R5IHsKKyAgICBmb250OiAxNHB4ICdIZWx2ZXRpY2EgTmV1ZScsIEhlbHZl
dGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7CisgICAgbGluZS1oZWlnaHQ6IDEuNGVtOworICAgIGJh
Y2tncm91bmQ6ICNmNWY1ZjU7CisgICAgY29sb3I6ICM0ZDRkNGQ7CisgICAgbWluLXdpZHRoOiAy
MzBweDsKKyAgICBtYXgtd2lkdGg6IDU1MHB4OworICAgIG1hcmdpbjogMCBhdXRvOworICAgIC13
ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOworICAgIC1tb3otb3N4LWZvbnQtc21v
b3RoaW5nOiBncmF5c2NhbGU7CisgICAgZm9udC13ZWlnaHQ6IDMwMDsKK30KKworOmZvY3VzIHsK
KyAgICBvdXRsaW5lOiAwOworfQorCisuaGlkZGVuIHsKKyAgICBkaXNwbGF5OiBub25lOworfQor
CisudG9kb2FwcCB7CisgICAgYmFja2dyb3VuZDogI2ZmZjsKKyAgICBtYXJnaW46IDEzMHB4IDAg
NDBweCAwOworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBib3gtc2hhZG93OiAwIDJweCA0
cHggMCByZ2JhKDAsIDAsIDAsIDAuMiksCisgICAgICAgICAgICAgICAgMCAyNXB4IDUwcHggMCBy
Z2JhKDAsIDAsIDAsIDAuMSk7Cit9CisKKy50b2RvYXBwIGlucHV0Ojotd2Via2l0LWlucHV0LXBs
YWNlaG9sZGVyIHsKKyAgICBmb250LXN0eWxlOiBpdGFsaWM7CisgICAgZm9udC13ZWlnaHQ6IDMw
MDsKKyAgICBjb2xvcjogI2U2ZTZlNjsKK30KKworLnRvZG9hcHAgaW5wdXQ6Oi1tb3otcGxhY2Vo
b2xkZXIgeworICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKKyAgICBmb250LXdlaWdodDogMzAwOwor
ICAgIGNvbG9yOiAjZTZlNmU2OworfQorCisudG9kb2FwcCBpbnB1dDo6aW5wdXQtcGxhY2Vob2xk
ZXIgeworICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKKyAgICBmb250LXdlaWdodDogMzAwOworICAg
IGNvbG9yOiAjZTZlNmU2OworfQorCisudG9kb2FwcCBoMSB7CisgICAgcG9zaXRpb246IGFic29s
dXRlOworICAgIHRvcDogLTE1NXB4OworICAgIHdpZHRoOiAxMDAlOworICAgIGZvbnQtc2l6ZTog
MTAwcHg7CisgICAgZm9udC13ZWlnaHQ6IDEwMDsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cisg
ICAgY29sb3I6IHJnYmEoMTc1LCA0NywgNDcsIDAuMTUpOworICAgIC13ZWJraXQtdGV4dC1yZW5k
ZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKKyAgICAtbW96LXRleHQtcmVuZGVyaW5nOiBvcHRp
bWl6ZUxlZ2liaWxpdHk7CisgICAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsK
K30KKworLm5ldy10b2RvLAorLmVkaXQgeworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBt
YXJnaW46IDA7CisgICAgd2lkdGg6IDEwMCU7CisgICAgZm9udC1zaXplOiAyNHB4OworICAgIGZv
bnQtZmFtaWx5OiBpbmhlcml0OworICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0OworICAgIGxpbmUt
aGVpZ2h0OiAxLjRlbTsKKyAgICBib3JkZXI6IDA7CisgICAgY29sb3I6IGluaGVyaXQ7CisgICAg
cGFkZGluZzogNnB4OworICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CisgICAgYm94LXNoYWRv
dzogaW5zZXQgMCAtMXB4IDVweCAwIHJnYmEoMCwgMCwgMCwgMC4yKTsKKyAgICBib3gtc2l6aW5n
OiBib3JkZXItYm94OworICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwor
ICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7Cit9CisKKy5uZXctdG9kbyB7
CisgICAgcGFkZGluZzogMTZweCAxNnB4IDE2cHggNjBweDsKKyAgICBib3JkZXI6IG5vbmU7Cisg
ICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjAwMyk7CisgICAgYm94LXNoYWRvdzogaW5z
ZXQgMCAtMnB4IDFweCByZ2JhKDAsMCwwLDAuMDMpOworfQorCisubWFpbiB7CisgICAgcG9zaXRp
b246IHJlbGF0aXZlOworICAgIHotaW5kZXg6IDI7CisgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlk
ICNlNmU2ZTY7Cit9CisKKy50b2dnbGUtYWxsIHsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cisg
ICAgYm9yZGVyOiBub25lOyAvKiBNb2JpbGUgU2FmYXJpICovCisgICAgb3BhY2l0eTogMDsKKyAg
ICBwb3NpdGlvbjogYWJzb2x1dGU7Cit9CisKKy50b2dnbGUtYWxsICsgbGFiZWwgeworICAgIHdp
ZHRoOiA2MHB4OworICAgIGhlaWdodDogMzRweDsKKyAgICBmb250LXNpemU6IDA7CisgICAgcG9z
aXRpb246IGFic29sdXRlOworICAgIHRvcDogLTUycHg7CisgICAgbGVmdDogLTEzcHg7CisgICAg
LXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7CisgICAgdHJhbnNmb3JtOiByb3RhdGUo
OTBkZWcpOworfQorCisudG9nZ2xlLWFsbCArIGxhYmVsOmJlZm9yZSB7CisgICAgY29udGVudDog
J+Kdryc7CisgICAgZm9udC1zaXplOiAyMnB4OworICAgIGNvbG9yOiAjZTZlNmU2OworICAgIHBh
ZGRpbmc6IDEwcHggMjdweCAxMHB4IDI3cHg7Cit9CisKKy50b2dnbGUtYWxsOmNoZWNrZWQgKyBs
YWJlbDpiZWZvcmUgeworICAgIGNvbG9yOiAjNzM3MzczOworfQorCisudG9kby1saXN0IHsKKyAg
ICBtYXJnaW46IDA7CisgICAgcGFkZGluZzogMDsKKyAgICBsaXN0LXN0eWxlOiBub25lOworfQor
CisudG9kby1saXN0IGxpIHsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgZm9udC1zaXpl
OiAyNHB4OworICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWRlZGVkOworfQorCisudG9k
by1saXN0IGxpOmxhc3QtY2hpbGQgeworICAgIGJvcmRlci1ib3R0b206IG5vbmU7Cit9CisKKy50
b2RvLWxpc3QgbGkuZWRpdGluZyB7CisgICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKKyAgICBwYWRk
aW5nOiAwOworfQorCisudG9kby1saXN0IGxpLmVkaXRpbmcgLmVkaXQgeworICAgIGRpc3BsYXk6
IGJsb2NrOworICAgIHdpZHRoOiA1MDZweDsKKyAgICBwYWRkaW5nOiAxMnB4IDE2cHg7CisgICAg
bWFyZ2luOiAwIDAgMCA0M3B4OworfQorCisudG9kby1saXN0IGxpLmVkaXRpbmcgLnZpZXcgewor
ICAgIGRpc3BsYXk6IG5vbmU7Cit9CisKKy50b2RvLWxpc3QgbGkgLnRvZ2dsZSB7CisgICAgdGV4
dC1hbGlnbjogY2VudGVyOworICAgIHdpZHRoOiA0MHB4OworICAgIC8qIGF1dG8sIHNpbmNlIG5v
bi1XZWJLaXQgYnJvd3NlcnMgZG9lc24ndCBzdXBwb3J0IGlucHV0IHN0eWxpbmcgKi8KKyAgICBo
ZWlnaHQ6IGF1dG87CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHRvcDogMDsKKyAgICBi
b3R0b206IDA7CisgICAgbWFyZ2luOiBhdXRvIDA7CisgICAgYm9yZGVyOiBub25lOyAvKiBNb2Jp
bGUgU2FmYXJpICovCisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOworICAgIGFwcGVhcmFu
Y2U6IG5vbmU7Cit9CisKKy50b2RvLWxpc3QgbGkgLnRvZ2dsZSB7CisgICAgb3BhY2l0eTogMDsK
K30KKworLnRvZG8tbGlzdCBsaSAudG9nZ2xlICsgbGFiZWwgeworICAgIC8qCisgICAgICAgIEZp
cmVmb3ggcmVxdWlyZXMgYCNgIHRvIGJlIGVzY2FwZWQgLSBodHRwczovL2J1Z3ppbGxhLm1vemls
bGEub3JnL3Nob3dfYnVnLmNnaT9pZD05MjI0MzMKKyAgICAgICAgSUUgYW5kIEVkZ2UgcmVxdWly
ZXMgKmV2ZXJ5dGhpbmcqIHRvIGJlIGVzY2FwZWQgdG8gcmVuZGVyLCBzbyB3ZSBkbyB0aGF0IGlu
c3RlYWQgb2YganVzdCB0aGUgYCNgIC0gaHR0cHM6Ly9kZXZlbG9wZXIubWljcm9zb2Z0LmNvbS9l
bi11cy9taWNyb3NvZnQtZWRnZS9wbGF0Zm9ybS9pc3N1ZXMvNzE1NzQ1OS8KKyAgICAqLworICAg
IGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsJTNDc3ZnJTIw
eG1sbnMlM0QlMjJodHRwJTNBLy93d3cudzMub3JnLzIwMDAvc3ZnJTIyJTIwd2lkdGglM0QlMjI0
MCUyMiUyMGhlaWdodCUzRCUyMjQwJTIyJTIwdmlld0JveCUzRCUyMi0xMCUyMC0xOCUyMDEwMCUy
MDEzNSUyMiUzRSUzQ2NpcmNsZSUyMGN4JTNEJTIyNTAlMjIlMjBjeSUzRCUyMjUwJTIyJTIwciUz
RCUyMjUwJTIyJTIwZmlsbCUzRCUyMm5vbmUlMjIlMjBzdHJva2UlM0QlMjIlMjNlZGVkZWQlMjIl
MjBzdHJva2Utd2lkdGglM0QlMjIzJTIyLyUzRSUzQy9zdmclM0UnKTsKKyAgICBiYWNrZ3JvdW5k
LXJlcGVhdDogbm8tcmVwZWF0OworICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBsZWZ0
OworfQorCisudG9kby1saXN0IGxpIC50b2dnbGU6Y2hlY2tlZCArIGxhYmVsIHsKKyAgICBiYWNr
Z3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LCUzQ3N2ZyUyMHhtbG5z
JTNEJTIyaHR0cCUzQS8vd3d3LnczLm9yZy8yMDAwL3N2ZyUyMiUyMHdpZHRoJTNEJTIyNDAlMjIl
MjBoZWlnaHQlM0QlMjI0MCUyMiUyMHZpZXdCb3glM0QlMjItMTAlMjAtMTglMjAxMDAlMjAxMzUl
MjIlM0UlM0NjaXJjbGUlMjBjeCUzRCUyMjUwJTIyJTIwY3klM0QlMjI1MCUyMiUyMHIlM0QlMjI1
MCUyMiUyMGZpbGwlM0QlMjJub25lJTIyJTIwc3Ryb2tlJTNEJTIyJTIzYmRkYWQ1JTIyJTIwc3Ry
b2tlLXdpZHRoJTNEJTIyMyUyMi8lM0UlM0NwYXRoJTIwZmlsbCUzRCUyMiUyMzVkYzJhZiUyMiUy
MGQlM0QlMjJNNzIlMjAyNUw0MiUyMDcxJTIwMjclMjA1NmwtNCUyMDQlMjAyMCUyMDIwJTIwMzQt
NTJ6JTIyLyUzRSUzQy9zdmclM0UnKTsKK30KKworLnRvZG8tbGlzdCBsaSBsYWJlbCB7CisgICAg
d29yZC1icmVhazogYnJlYWstYWxsOworICAgIHBhZGRpbmc6IDE1cHggMTVweCAxNXB4IDYwcHg7
CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgbGluZS1oZWlnaHQ6IDEuMjsKKyAgICB0cmFuc2l0
aW9uOiBjb2xvciAwLjRzOworfQorCisudG9kby1saXN0IGxpLmNvbXBsZXRlZCBsYWJlbCB7Cisg
ICAgY29sb3I6ICNkOWQ5ZDk7CisgICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Cit9
CisKKy50b2RvLWxpc3QgbGkgLmRlc3Ryb3kgeworICAgIGRpc3BsYXk6IG5vbmU7CisgICAgcG9z
aXRpb246IGFic29sdXRlOworICAgIHRvcDogMDsKKyAgICByaWdodDogMTBweDsKKyAgICBib3R0
b206IDA7CisgICAgd2lkdGg6IDQwcHg7CisgICAgaGVpZ2h0OiA0MHB4OworICAgIG1hcmdpbjog
YXV0byAwOworICAgIGZvbnQtc2l6ZTogMzBweDsKKyAgICBjb2xvcjogI2NjOWE5YTsKKyAgICBt
YXJnaW4tYm90dG9tOiAxMXB4OworICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMnMgZWFzZS1vdXQ7
Cit9CisKKy50b2RvLWxpc3QgbGkgLmRlc3Ryb3k6aG92ZXIgeworICAgIGNvbG9yOiAjYWY1YjVl
OworfQorCisudG9kby1saXN0IGxpIC5kZXN0cm95OmFmdGVyIHsKKyAgICBjb250ZW50OiAnw5cn
OworfQorCisudG9kby1saXN0IGxpOmhvdmVyIC5kZXN0cm95IHsKKyAgICBkaXNwbGF5OiBibG9j
azsKK30KKworLnRvZG8tbGlzdCBsaSAuZWRpdCB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKwor
LnRvZG8tbGlzdCBsaS5lZGl0aW5nOmxhc3QtY2hpbGQgeworICAgIG1hcmdpbi1ib3R0b206IC0x
cHg7Cit9CisKKy5mb290ZXIgeworICAgIGNvbG9yOiAjNzc3OworICAgIHBhZGRpbmc6IDEwcHgg
MTVweDsKKyAgICBoZWlnaHQ6IDIwcHg7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgIGJv
cmRlci10b3A6IDFweCBzb2xpZCAjZTZlNmU2OworfQorCisuZm9vdGVyOmJlZm9yZSB7CisgICAg
Y29udGVudDogJyc7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHJpZ2h0OiAwOworICAg
IGJvdHRvbTogMDsKKyAgICBsZWZ0OiAwOworICAgIGhlaWdodDogNTBweDsKKyAgICBvdmVyZmxv
dzogaGlkZGVuOworICAgIGJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMiks
CisgICAgICAgICAgICAgICAgMCA4cHggMCAtM3B4ICNmNmY2ZjYsCisgICAgICAgICAgICAgICAg
MCA5cHggMXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLAorICAgICAgICAgICAgICAgIDAgMTZw
eCAwIC02cHggI2Y2ZjZmNiwKKyAgICAgICAgICAgICAgICAwIDE3cHggMnB4IC02cHggcmdiYSgw
LCAwLCAwLCAwLjIpOworfQorCisudG9kby1jb3VudCB7CisgICAgZmxvYXQ6IGxlZnQ7CisgICAg
dGV4dC1hbGlnbjogbGVmdDsKK30KKworLnRvZG8tY291bnQgc3Ryb25nIHsKKyAgICBmb250LXdl
aWdodDogMzAwOworfQorCisuZmlsdGVycyB7CisgICAgbWFyZ2luOiAwOworICAgIHBhZGRpbmc6
IDA7CisgICAgbGlzdC1zdHlsZTogbm9uZTsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAg
cmlnaHQ6IDA7CisgICAgbGVmdDogMDsKK30KKworLmZpbHRlcnMgbGkgeworICAgIGRpc3BsYXk6
IGlubGluZTsKK30KKworLmZpbHRlcnMgbGkgYSB7CisgICAgY29sb3I6IGluaGVyaXQ7CisgICAg
bWFyZ2luOiAzcHg7CisgICAgcGFkZGluZzogM3B4IDdweDsKKyAgICB0ZXh0LWRlY29yYXRpb246
IG5vbmU7CisgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CisgICAgYm9yZGVyLXJh
ZGl1czogM3B4OworfQorCisuZmlsdGVycyBsaSBhOmhvdmVyIHsKKyAgICBib3JkZXItY29sb3I6
IHJnYmEoMTc1LCA0NywgNDcsIDAuMSk7Cit9CisKKy5maWx0ZXJzIGxpIGEuc2VsZWN0ZWQgewor
ICAgIGJvcmRlci1jb2xvcjogcmdiYSgxNzUsIDQ3LCA0NywgMC4yKTsKK30KKworLmNsZWFyLWNv
bXBsZXRlZCwKK2h0bWwgLmNsZWFyLWNvbXBsZXRlZDphY3RpdmUgeworICAgIGZsb2F0OiByaWdo
dDsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgbGluZS1oZWlnaHQ6IDIwcHg7CisgICAg
dGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgIGN1cnNvcjogcG9pbnRlcjsKK30KKworLmNsZWFy
LWNvbXBsZXRlZDpob3ZlciB7CisgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cit9CisK
Ky5pbmZvIHsKKyAgICBtYXJnaW46IDY1cHggYXV0byAwOworICAgIGNvbG9yOiAjYmZiZmJmOwor
ICAgIGZvbnQtc2l6ZTogMTBweDsKKyAgICB0ZXh0LXNoYWRvdzogMCAxcHggMCByZ2JhKDI1NSwg
MjU1LCAyNTUsIDAuNSk7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworfQorCisuaW5mbyBwIHsK
KyAgICBsaW5lLWhlaWdodDogMTsKK30KKworLmluZm8gYSB7CisgICAgY29sb3I6IGluaGVyaXQ7
CisgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgIGZvbnQtd2VpZ2h0OiA0MDA7Cit9CisK
Ky5pbmZvIGE6aG92ZXIgeworICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCisv
KgorICAgIEhhY2sgdG8gcmVtb3ZlIGJhY2tncm91bmQgZnJvbSBNb2JpbGUgU2FmYXJpLgorICAg
IENhbid0IHVzZSBpdCBnbG9iYWxseSBzaW5jZSBpdCBkZXN0cm95cyBjaGVja2JveGVzIGluIEZp
cmVmb3gKKyovCitAbWVkaWEgc2NyZWVuIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJh
dGlvOjApIHsKKyAgICAudG9nZ2xlLWFsbCwKKyAgICAudG9kby1saXN0IGxpIC50b2dnbGUgewor
ICAgICAgICBiYWNrZ3JvdW5kOiBub25lOworICAgIH0KKworICAgIC50b2RvLWxpc3QgbGkgLnRv
Z2dsZSB7CisgICAgICAgIGhlaWdodDogNDBweDsKKyAgICB9Cit9CisKK0BtZWRpYSAobWF4LXdp
ZHRoOiA0MzBweCkgeworICAgIC5mb290ZXIgeworICAgICAgICBoZWlnaHQ6IDUwcHg7CisgICAg
fQorCisgICAgLmZpbHRlcnMgeworICAgICAgICBib3R0b206IDEwcHg7CisgICAgfQorfQpkaWZm
IC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvaW5mZXJuby9kaXN0L2J1bmRsZS5qcyBi
L1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9t
dmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2luZmVybm8vZGlzdC9idW5kbGUuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMmE1NWU5N2RkZDkxYzdlNGUzMjFjZTgxMzM2NjBkMjJiYmU1ZTc0YgotLS0gL2Rldi9udWxs
CisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2Vz
L3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2luZmVybm8vZGlzdC9idW5kbGUuanMKQEAg
LTAsMCArMSwzMjQ4IEBACisvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNr
Qm9vdHN0cmFwCisvKioqKioqLyAgICAvLyBUaGUgbW9kdWxlIGNhY2hlCisvKioqKioqLyAgICB2
YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9OworCisvKioqKioqLyAgICAvLyBUaGUgcmVxdWlyZSBm
dW5jdGlvbgorLyoqKioqKi8gICAgZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJ
ZCkgeworCisvKioqKioqLyAgICAgICAgLy8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlCisv
KioqKioqLyAgICAgICAgaWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pCisvKioqKioqLyAg
ICAgICAgICAgIHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzOworCisv
KioqKioqLyAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRo
ZSBjYWNoZSkKKy8qKioqKiovICAgICAgICB2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1tt
b2R1bGVJZF0gPSB7CisvKioqKioqLyAgICAgICAgICAgIGV4cG9ydHM6IHt9LAorLyoqKioqKi8g
ICAgICAgICAgICBpZDogbW9kdWxlSWQsCisvKioqKioqLyAgICAgICAgICAgIGxvYWRlZDogZmFs
c2UKKy8qKioqKiovICAgICAgICB9OworCisvKioqKioqLyAgICAgICAgLy8gRXhlY3V0ZSB0aGUg
bW9kdWxlIGZ1bmN0aW9uCisvKioqKioqLyAgICAgICAgbW9kdWxlc1ttb2R1bGVJZF0uY2FsbCht
b2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVf
Xyk7CisKKy8qKioqKiovICAgICAgICAvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkCisvKioq
KioqLyAgICAgICAgbW9kdWxlLmxvYWRlZCA9IHRydWU7CisKKy8qKioqKiovICAgICAgICAvLyBS
ZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZQorLyoqKioqKi8gICAgICAgIHJldHVybiBt
b2R1bGUuZXhwb3J0czsKKy8qKioqKiovICAgIH0KKworCisvKioqKioqLyAgICAvLyBleHBvc2Ug
dGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKQorLyoqKioqKi8gICAgX193
ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlczsKKworLyoqKioqKi8gICAgLy8gZXhwb3NlIHRo
ZSBtb2R1bGUgY2FjaGUKKy8qKioqKiovICAgIF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3Rh
bGxlZE1vZHVsZXM7CisKKy8qKioqKiovICAgIC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fCisv
KioqKioqLyAgICBfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSAiZGlzdCI7CisKKy8qKioqKiovICAg
IC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0cworLyoqKioqKi8gICAgcmV0
dXJuIF9fd2VicGFja19yZXF1aXJlX18oMCk7CisvKioqKioqLyB9KQorLyoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KKy8qKioqKiovIChbCisvKiAwICovCisvKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMs
IF9fd2VicGFja19yZXF1aXJlX18pIHsKKworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIHZhciBf
aW5mZXJubyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7CisKKyAgICB2YXIgX2luZmVybm8yID0g
X2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW5mZXJubyk7CisKKyAgICB2YXIgX2luZmVybm9Db21w
b25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpOworCisgICAgdmFyIF9pbmZlcm5vQ29tcG9u
ZW50MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2luZmVybm9Db21wb25lbnQpOworCisgICAg
dmFyIF9zaGFyZSA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7CisKKyAgICB2YXIgX2Jhc2UgPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKDYpOworCisgICAgdmFyIF9tb2RlbCA9IF9fd2VicGFja19yZXF1
aXJlX18oNyk7CisKKyAgICB2YXIgX21vZGVsMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX21v
ZGVsKTsKKworICAgIHZhciBfaXRlbSA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7CisKKyAgICB2
YXIgX2l0ZW0yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaXRlbSk7CisKKyAgICBmdW5jdGlv
biBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9k
dWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfQorCisgICAgZnVuY3Rpb24gX2NsYXNzQ2Fs
bENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9m
IENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNz
IGFzIGEgZnVuY3Rpb24iKTsgfSB9CisKKyAgICBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3Rv
clJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJy
b3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNh
bGxlZCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gIm9iamVjdCIgfHwgdHlw
ZW9mIGNhbGwgPT09ICJmdW5jdGlvbiIpID8gY2FsbCA6IHNlbGY7IH0KKworICAgIGZ1bmN0aW9u
IF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3Mg
IT09ICJmdW5jdGlvbiIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVy
cm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwg
bm90ICIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0
LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9y
OiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBj
b25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5
cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJD
bGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9CisKKyAgICB2YXIgcmVuZGVyID0gX2luZmVy
bm8yLmRlZmF1bHQucmVuZGVyOworCisgICAgdmFyIG1vZGVsID0gbmV3IF9tb2RlbDIuZGVmYXVs
dCgpOworCisgICAgdmFyIEFwcCA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7CisgICAgICAgIF9p
bmhlcml0cyhBcHAsIF9Db21wb25lbnQpOworCisgICAgICAgIGZ1bmN0aW9uIEFwcCgpIHsKKyAg
ICAgICAgICAgIHZhciBfdGVtcCwgX3RoaXMsIF9yZXQ7CisKKyAgICAgICAgICAgIF9jbGFzc0Nh
bGxDaGVjayh0aGlzLCBBcHApOworCisgICAgICAgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1l
bnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9r
ZXkrKykgeworICAgICAgICAgICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBfcmV0ID0gKF90ZW1wID0gKF90aGlz
ID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX0NvbXBvbmVudC5jYWxsLmFwcGx5
KF9Db21wb25lbnQsIFt0aGlzXS5jb25jYXQoYXJncykpKSwgX3RoaXMpLCBfdGhpcy5zdGF0ZSA9
IHsKKyAgICAgICAgICAgICAgICByb3V0ZTogKDAsIF9zaGFyZS5yZWFkKSgpLAorICAgICAgICAg
ICAgICAgIHRvZG9zOiBtb2RlbC5nZXQoKQorICAgICAgICAgICAgfSwgX3RoaXMudXBkYXRlID0g
ZnVuY3Rpb24gKGFycikgeworICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5zZXRTdGF0ZSh7
IHRvZG9zOiBhcnIgfSk7CisgICAgICAgICAgICB9LCBfdGhpcy5jb21wb25lbnRXaWxsTW91bnQg
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgd2luZG93Lm9uaGFzaGNoYW5nZSA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLnNldFN0YXRlKHsg
cm91dGU6ICgwLCBfc2hhcmUucmVhZCkoKSB9KTsKKyAgICAgICAgICAgICAgICB9OworICAgICAg
ICAgICAgfSwgX3RoaXMuYWRkID0gZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgICAgICBpZiAo
ZS53aGljaCAhPT0gX3NoYXJlLkVOVEVSKSByZXR1cm47CisKKyAgICAgICAgICAgICAgICB2YXIg
dmFsID0gZS50YXJnZXQudmFsdWUudHJpbSgpOworICAgICAgICAgICAgICAgIGlmICghdmFsKSBy
ZXR1cm47CisKKyAgICAgICAgICAgICAgICBlLnRhcmdldC52YWx1ZSA9ICcnOworICAgICAgICAg
ICAgICAgIF90aGlzLnVwZGF0ZShtb2RlbC5hZGQodmFsKSk7CisgICAgICAgICAgICB9LCBfdGhp
cy5lZGl0ID0gZnVuY3Rpb24gKHRvZG8sIHZhbCkgeworICAgICAgICAgICAgICAgIHZhbCA9IHZh
bC50cmltKCk7CisgICAgICAgICAgICAgICAgaWYgKHZhbC5sZW5ndGgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgX3RoaXMudXBkYXRlKG1vZGVsLnB1dCh0b2RvLCB7IHRpdGxlOiB2YWwsIGVkaXRp
bmc6IDAgfSkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IF90aGlzLnJlbW92ZSh0b2RvKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LCBf
dGhpcy5mb2N1cyA9IGZ1bmN0aW9uICh0b2RvKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIF90
aGlzLnVwZGF0ZShtb2RlbC5wdXQodG9kbywgeyBlZGl0aW5nOiAxIH0pKTsKKyAgICAgICAgICAg
IH0sIF90aGlzLmJsdXIgPSBmdW5jdGlvbiAodG9kbykgeworICAgICAgICAgICAgICAgIHJldHVy
biBfdGhpcy51cGRhdGUobW9kZWwucHV0KHRvZG8sIHsgZWRpdGluZzogMCB9KSk7CisgICAgICAg
ICAgICB9LCBfdGhpcy5yZW1vdmUgPSBmdW5jdGlvbiAodG9kbykgeworICAgICAgICAgICAgICAg
IHJldHVybiBfdGhpcy51cGRhdGUobW9kZWwuZGVsKHRvZG8pKTsKKyAgICAgICAgICAgIH0sIF90
aGlzLnRvZ2dsZU9uZSA9IGZ1bmN0aW9uICh0b2RvKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IF90aGlzLnVwZGF0ZShtb2RlbC50b2dnbGUodG9kbykpOworICAgICAgICAgICAgfSwgX3RoaXMu
dG9nZ2xlQWxsID0gZnVuY3Rpb24gKGV2KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlz
LnVwZGF0ZShtb2RlbC50b2dnbGVBbGwoZXYudGFyZ2V0LmNoZWNrZWQpKTsKKyAgICAgICAgICAg
IH0sIF90aGlzLmNsZWFyQ29tcGxldGVkID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAg
IHJldHVybiBfdGhpcy51cGRhdGUobW9kZWwuY2xlYXJDb21wbGV0ZWQoKSk7CisgICAgICAgICAg
ICB9LCBfdGVtcCksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKF90aGlzLCBfcmV0KTsKKyAg
ICAgICAgfQorCisgICAgICAgIEFwcC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVy
KF8sIF9yZWYpIHsKKyAgICAgICAgICAgIHZhciBfdGhpczIgPSB0aGlzOworCisgICAgICAgICAg
ICB2YXIgdG9kb3MgPSBfcmVmLnRvZG9zLAorICAgICAgICAgICAgICAgIHJvdXRlID0gX3JlZi5y
b3V0ZTsKKworICAgICAgICAgICAgdmFyIG51bSA9IHRvZG9zLmxlbmd0aDsKKyAgICAgICAgICAg
IHZhciBzaG93biA9IHRvZG9zLmZpbHRlcihfc2hhcmUuZmlsdGVyc1tyb3V0ZV0pOworICAgICAg
ICAgICAgdmFyIG51bURvbmUgPSB0b2Rvcy5maWx0ZXIoX3NoYXJlLmZpbHRlcnMuY29tcGxldGVk
KS5sZW5ndGg7CisgICAgICAgICAgICB2YXIgbnVtQWN0ID0gbnVtIC0gbnVtRG9uZTsKKworICAg
ICAgICAgICAgcmV0dXJuIF9pbmZlcm5vMi5kZWZhdWx0LmNyZWF0ZVZOb2RlKDIsICdkaXYnLCBu
dWxsLCBbX2luZmVybm8yLmRlZmF1bHQuY3JlYXRlVk5vZGUoMTYsIF9iYXNlLkhlYWQsIHsKKyAg
ICAgICAgICAgICAgICAnb25FbnRlcic6IHRoaXMuYWRkCisgICAgICAgICAgICB9KSwgbnVtID8g
X2luZmVybm8yLmRlZmF1bHQuY3JlYXRlVk5vZGUoMiwgJ3NlY3Rpb24nLCB7CisgICAgICAgICAg
ICAgICAgJ2NsYXNzTmFtZSc6ICdtYWluJworICAgICAgICAgICAgfSwgW19pbmZlcm5vMi5kZWZh
dWx0LmNyZWF0ZVZOb2RlKDUxMiwgJ2lucHV0JywgeworICAgICAgICAgICAgICAgICdjbGFzc05h
bWUnOiAndG9nZ2xlLWFsbCcsCisgICAgICAgICAgICAgICAgJ3R5cGUnOiAnY2hlY2tib3gnLAor
ICAgICAgICAgICAgICAgICdjaGVja2VkJzogbnVtQWN0ID09PSAwCisgICAgICAgICAgICB9LCBu
dWxsLCB7CisgICAgICAgICAgICAgICAgJ29uQ2xpY2snOiB0aGlzLnRvZ2dsZUFsbAorICAgICAg
ICAgICAgfSksIF9pbmZlcm5vMi5kZWZhdWx0LmNyZWF0ZVZOb2RlKDIsICd1bCcsIHsKKyAgICAg
ICAgICAgICAgICAnY2xhc3NOYW1lJzogJ3RvZG8tbGlzdCcKKyAgICAgICAgICAgIH0sIHNob3du
Lm1hcChmdW5jdGlvbiAodCkgeworICAgICAgICAgICAgICAgIHJldHVybiBfaW5mZXJubzIuZGVm
YXVsdC5jcmVhdGVWTm9kZSgxNiwgX2l0ZW0yLmRlZmF1bHQsIHsKKyAgICAgICAgICAgICAgICAg
ICAgJ2RhdGEnOiB0LAorICAgICAgICAgICAgICAgICAgICAnb25CbHVyJzogZnVuY3Rpb24gb25C
bHVyKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5ibHVyKHQpOwor
ICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAnb25Gb2N1cyc6IGZ1
bmN0aW9uIG9uRm9jdXMoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMy
LmZvY3VzKHQpOworICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAn
ZG9EZWxldGUnOiBmdW5jdGlvbiBkb0RlbGV0ZSgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBfdGhpczIucmVtb3ZlKHQpOworICAgICAgICAgICAgICAgICAgICB9LAorICAgICAg
ICAgICAgICAgICAgICAnZG9TYXZlJzogZnVuY3Rpb24gZG9TYXZlKHZhbCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5lZGl0KHQsIHZhbCk7CisgICAgICAgICAgICAg
ICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICdkb1RvZ2dsZSc6IGZ1bmN0aW9uIGRvVG9n
Z2xlKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi50b2dnbGVPbmUo
dCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgIH0pKV0pIDogbnVsbCwgbnVtQWN0IHx8IG51bURvbmUgPyBfaW5mZXJubzIuZGVmYXVsdC5j
cmVhdGVWTm9kZSgxNiwgX2Jhc2UuRm9vdCwgeworICAgICAgICAgICAgICAgICdvbkNsZWFyJzog
dGhpcy5jbGVhckNvbXBsZXRlZCwKKyAgICAgICAgICAgICAgICAnbGVmdCc6IG51bUFjdCwKKyAg
ICAgICAgICAgICAgICAnZG9uZSc6IG51bURvbmUsCisgICAgICAgICAgICAgICAgJ3JvdXRlJzog
cm91dGUKKyAgICAgICAgICAgIH0pIDogbnVsbF0pOworICAgICAgICB9OworCisgICAgICAgIHJl
dHVybiBBcHA7CisgICAgfShfaW5mZXJub0NvbXBvbmVudDIuZGVmYXVsdCk7CisKKyAgICByZW5k
ZXIoX2luZmVybm8yLmRlZmF1bHQuY3JlYXRlVk5vZGUoMTYsIEFwcCksIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdhcHAnKSk7CisKKy8qKiovIH0sCisvKiAxICovCisvKioqLyBmdW5jdGlvbiht
b2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworICAgIG1vZHVsZS5leHBv
cnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTsKKworCisvKioqLyB9LAorLyogMiAqLworLyoq
Ki8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyAg
ICAvKiEKKyAgICAgKiBpbmZlcm5vIHYxLjAuMC1iZXRhMzIKKyAgICAgKiAoYykgMjAxNiBEb21p
bmljIEdhbm5hd2F5CisgICAgICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLgorICAg
ICAqLworICAgIChmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7CisgICAgICAgICB0cnVlID8g
ZmFjdG9yeShleHBvcnRzKSA6CisgICAgICAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicg
JiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSkgOgorICAgICAgICAo
ZmFjdG9yeSgoZ2xvYmFsLkluZmVybm8gPSBnbG9iYWwuSW5mZXJubyB8fCB7fSkpKTsKKyAgICB9
KHRoaXMsIChmdW5jdGlvbiAoZXhwb3J0cykgeyAndXNlIHN0cmljdCc7CisKKyAgICB2YXIgTk9f
T1AgPSAnJE5PX09QJzsKKyAgICB2YXIgRVJST1JfTVNHID0gJ2EgcnVudGltZSBlcnJvciBvY2N1
cmVkISBVc2UgSW5mZXJubyBpbiBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCB0byBmaW5kIHRoZSBl
cnJvci4nOworICAgIHZhciBpc0Jyb3dzZXIgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVk
JyAmJiB3aW5kb3cuZG9jdW1lbnQ7CisKKyAgICAvLyB0aGlzIGlzIE1VQ0ggZmFzdGVyIHRoYW4g
LmNvbnN0cnVjdG9yID09PSBBcnJheSBhbmQgaW5zdGFuY2VvZiBBcnJheQorICAgIC8vIGluIE5v
ZGUgNyBhbmQgdGhlIGxhdGVyIHZlcnNpb25zIG9mIFY4LCBzbG93ZXIgaW4gb2xkZXIgdmVyc2lv
bnMgdGhvdWdoCisgICAgdmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5OworICAgIGZ1bmN0aW9u
IGlzU3RhdGVmdWxDb21wb25lbnQobykgeworICAgICAgICByZXR1cm4gIWlzVW5kZWZpbmVkKG8u
cHJvdG90eXBlKSAmJiAhaXNVbmRlZmluZWQoby5wcm90b3R5cGUucmVuZGVyKTsKKyAgICB9Cisg
ICAgZnVuY3Rpb24gaXNTdHJpbmdPck51bWJlcihvYmopIHsKKyAgICAgICAgcmV0dXJuIGlzU3Ry
aW5nKG9iaikgfHwgaXNOdW1iZXIob2JqKTsKKyAgICB9CisgICAgZnVuY3Rpb24gaXNOdWxsT3JV
bmRlZihvYmopIHsKKyAgICAgICAgcmV0dXJuIGlzVW5kZWZpbmVkKG9iaikgfHwgaXNOdWxsKG9i
aik7CisgICAgfQorICAgIGZ1bmN0aW9uIGlzSW52YWxpZChvYmopIHsKKyAgICAgICAgcmV0dXJu
IGlzTnVsbChvYmopIHx8IG9iaiA9PT0gZmFsc2UgfHwgaXNUcnVlKG9iaikgfHwgaXNVbmRlZmlu
ZWQob2JqKTsKKyAgICB9CisgICAgZnVuY3Rpb24gaXNGdW5jdGlvbihvYmopIHsKKyAgICAgICAg
cmV0dXJuIHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbic7CisgICAgfQorICAgIGZ1bmN0aW9uIGlz
QXR0ckFuRXZlbnQoYXR0cikgeworICAgICAgICByZXR1cm4gYXR0clswXSA9PT0gJ28nICYmIGF0
dHJbMV0gPT09ICduJyAmJiBhdHRyLmxlbmd0aCA+IDM7CisgICAgfQorICAgIGZ1bmN0aW9uIGlz
U3RyaW5nKG9iaikgeworICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ3N0cmluZyc7Cisg
ICAgfQorICAgIGZ1bmN0aW9uIGlzTnVtYmVyKG9iaikgeworICAgICAgICByZXR1cm4gdHlwZW9m
IG9iaiA9PT0gJ251bWJlcic7CisgICAgfQorICAgIGZ1bmN0aW9uIGlzTnVsbChvYmopIHsKKyAg
ICAgICAgcmV0dXJuIG9iaiA9PT0gbnVsbDsKKyAgICB9CisgICAgZnVuY3Rpb24gaXNUcnVlKG9i
aikgeworICAgICAgICByZXR1cm4gb2JqID09PSB0cnVlOworICAgIH0KKyAgICBmdW5jdGlvbiBp
c1VuZGVmaW5lZChvYmopIHsKKyAgICAgICAgcmV0dXJuIG9iaiA9PT0gdW5kZWZpbmVkOworICAg
IH0KKyAgICBmdW5jdGlvbiBpc09iamVjdChvKSB7CisgICAgICAgIHJldHVybiB0eXBlb2YgbyA9
PT0gJ29iamVjdCc7CisgICAgfQorICAgIGZ1bmN0aW9uIHRocm93RXJyb3IobWVzc2FnZSkgewor
ICAgICAgICBpZiAoIW1lc3NhZ2UpIHsKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBFUlJPUl9NU0c7
CisgICAgICAgIH0KKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCgiSW5mZXJubyBFcnJvcjogIiAr
IG1lc3NhZ2UpKTsKKyAgICB9CisgICAgZnVuY3Rpb24gd2FybmluZyhjb25kaXRpb24sIG1lc3Nh
Z2UpIHsKKyAgICAgICAgaWYgKCFjb25kaXRpb24pIHsKKyAgICAgICAgICAgIGNvbnNvbGUuZXJy
b3IobWVzc2FnZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgdmFyIEVNUFRZX09CSiA9IHt9Owor
CisgICAgZnVuY3Rpb24gY2xvbmVWTm9kZSh2Tm9kZVRvQ2xvbmUsIHByb3BzKSB7CisgICAgICAg
IHZhciBfY2hpbGRyZW4gPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDI7CisgICAgICAg
IHdoaWxlICggbGVuLS0gPiAwICkgX2NoaWxkcmVuWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuICsg
MiBdOworCisgICAgICAgIHZhciBjaGlsZHJlbiA9IF9jaGlsZHJlbjsKKyAgICAgICAgaWYgKF9j
aGlsZHJlbi5sZW5ndGggPiAwICYmICFpc051bGwoX2NoaWxkcmVuWzBdKSkgeworICAgICAgICAg
ICAgaWYgKCFwcm9wcykgeworICAgICAgICAgICAgICAgIHByb3BzID0ge307CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoX2NoaWxkcmVuLmxlbmd0aCA9PT0gMSkgeworICAgICAgICAg
ICAgICAgIGNoaWxkcmVuID0gX2NoaWxkcmVuWzBdOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKGlzVW5kZWZpbmVkKHByb3BzLmNoaWxkcmVuKSkgeworICAgICAgICAgICAgICAgIHBy
b3BzLmNoaWxkcmVuID0gY2hpbGRyZW47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICBpZiAoaXNBcnJheShjaGlsZHJlbikpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGlzQXJyYXkocHJvcHMuY2hpbGRyZW4pKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBwcm9wcy5jaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLmNvbmNhdChjaGlsZHJlbik7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBwcm9wcy5jaGlsZHJlbiA9IFtwcm9wcy5jaGlsZHJlbl0uY29u
Y2F0KGNoaWxkcmVuKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXko
cHJvcHMuY2hpbGRyZW4pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5jaGlsZHJl
bi5wdXNoKGNoaWxkcmVuKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLmNoaWxkcmVuID0gW3By
b3BzLmNoaWxkcmVuXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLmNoaWxkcmVuLnB1
c2goY2hpbGRyZW4pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNoaWxkcmVuID0gbnVsbDsKKyAgICAg
ICAgdmFyIGZsYWdzID0gdk5vZGVUb0Nsb25lLmZsYWdzOworICAgICAgICB2YXIgZXZlbnRzID0g
dk5vZGVUb0Nsb25lLmV2ZW50cyB8fCAocHJvcHMgJiYgcHJvcHMuZXZlbnRzKSB8fCBudWxsOwor
ICAgICAgICB2YXIgbmV3Vk5vZGU7CisgICAgICAgIGlmIChpc0FycmF5KHZOb2RlVG9DbG9uZSkp
IHsKKyAgICAgICAgICAgIG5ld1ZOb2RlID0gdk5vZGVUb0Nsb25lLm1hcChmdW5jdGlvbiAodk5v
ZGUpIHsgcmV0dXJuIGNsb25lVk5vZGUodk5vZGUpOyB9KTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIGlmIChpc051bGxPclVuZGVmKHByb3BzKSAmJiBpc051bGxPclVuZGVmKGNoaWxkcmVuKSkg
eworICAgICAgICAgICAgbmV3Vk5vZGUgPSBPYmplY3QuYXNzaWduKHt9LCB2Tm9kZVRvQ2xvbmUp
OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdmFyIGtleSA9ICFpc051
bGxPclVuZGVmKHZOb2RlVG9DbG9uZS5rZXkpID8gdk5vZGVUb0Nsb25lLmtleSA6IHByb3BzLmtl
eTsKKyAgICAgICAgICAgIHZhciByZWYgPSB2Tm9kZVRvQ2xvbmUucmVmIHx8IHByb3BzLnJlZjsK
KyAgICAgICAgICAgIGlmIChmbGFncyAmIDI4IC8qIENvbXBvbmVudCAqLykgeworICAgICAgICAg
ICAgICAgIG5ld1ZOb2RlID0gY3JlYXRlVk5vZGUoZmxhZ3MsIHZOb2RlVG9DbG9uZS50eXBlLCBP
YmplY3QuYXNzaWduKHt9LCB2Tm9kZVRvQ2xvbmUucHJvcHMsIHByb3BzKSwgbnVsbCwgZXZlbnRz
LCBrZXksIHJlZiwgdHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChm
bGFncyAmIDM5NzAgLyogRWxlbWVudCAqLykgeworICAgICAgICAgICAgICAgIGNoaWxkcmVuID0g
KHByb3BzICYmIHByb3BzLmNoaWxkcmVuKSB8fCB2Tm9kZVRvQ2xvbmUuY2hpbGRyZW47CisgICAg
ICAgICAgICAgICAgbmV3Vk5vZGUgPSBjcmVhdGVWTm9kZShmbGFncywgdk5vZGVUb0Nsb25lLnR5
cGUsIE9iamVjdC5hc3NpZ24oe30sIHZOb2RlVG9DbG9uZS5wcm9wcywgcHJvcHMpLCBjaGlsZHJl
biwgZXZlbnRzLCBrZXksIHJlZiwgIWNoaWxkcmVuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBpZiAoZmxhZ3MgJiAyOCAvKiBDb21wb25lbnQgKi8pIHsKKyAgICAgICAgICAg
IHZhciBuZXdQcm9wcyA9IG5ld1ZOb2RlLnByb3BzOworICAgICAgICAgICAgaWYgKG5ld1Byb3Bz
KSB7CisgICAgICAgICAgICAgICAgdmFyIG5ld0NoaWxkcmVuID0gbmV3UHJvcHMuY2hpbGRyZW47
CisgICAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBhbHNvIGNsb25lIGNvbXBvbmVudCBjaGls
ZHJlbiB0aGF0IGFyZSBpbiBwcm9wcworICAgICAgICAgICAgICAgIC8vIGFzIHRoZSBjaGlsZHJl
biBtYXkgYWxzbyBoYXZlIGJlZW4gaG9pc3RlZAorICAgICAgICAgICAgICAgIGlmIChuZXdDaGls
ZHJlbikgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXNBcnJheShuZXdDaGlsZHJlbikpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3Q2hpbGRyZW4u
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSBu
ZXdDaGlsZHJlbltpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzSW52YWxp
ZChjaGlsZCkgJiYgaXNWTm9kZShjaGlsZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbmV3UHJvcHMuY2hpbGRyZW5baV0gPSBjbG9uZVZOb2RlKGNoaWxkKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNWTm9kZShuZXdD
aGlsZHJlbikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Byb3BzLmNoaWxkcmVuID0g
Y2xvbmVWTm9kZShuZXdDaGlsZHJlbik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBuZXdWTm9kZS5jaGlsZHJlbiA9
IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgbmV3Vk5vZGUuZG9tID0gbnVsbDsKKyAgICAgICAg
cmV0dXJuIG5ld1ZOb2RlOworICAgIH0KKworICAgIGZ1bmN0aW9uIF9ub3JtYWxpemVWTm9kZXMo
bm9kZXMsIHJlc3VsdCwgaSkgeworICAgICAgICBmb3IgKDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsr
KSB7CisgICAgICAgICAgICB2YXIgbiA9IG5vZGVzW2ldOworICAgICAgICAgICAgaWYgKCFpc0lu
dmFsaWQobikpIHsKKyAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShuKSkgeworICAg
ICAgICAgICAgICAgICAgICBfbm9ybWFsaXplVk5vZGVzKG4sIHJlc3VsdCwgMCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoaXNTdHJpbmdPck51bWJlcihuKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGNy
ZWF0ZVRleHRWTm9kZShuKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBlbHNlIGlmIChpc1ZOb2RlKG4pICYmIG4uZG9tKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBuID0gY2xvbmVWTm9kZShuKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICByZXN1bHQucHVzaChuKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZnVuY3Rpb24gbm9ybWFsaXplVk5vZGVzKG5vZGVz
KSB7CisgICAgICAgIHZhciBuZXdOb2RlczsKKyAgICAgICAgLy8gd2UgYXNzaWduICQgd2hpY2gg
YmFzaWNhbGx5IG1lYW5zIHdlJ3ZlIGZsYWdnZWQgdGhpcyBhcnJheSBmb3IgZnV0dXJlIG5vdGUK
KyAgICAgICAgLy8gaWYgaXQgY29tZXMgYmFjayBhZ2Fpbiwgd2UgbmVlZCB0byBjbG9uZSBpdCwg
YXMgcGVvcGxlIGFyZSB1c2luZyBpdAorICAgICAgICAvLyBpbiBhbiBpbW11dGFibGUgd2F5Cisg
ICAgICAgIC8vIHRzbGludDpkaXNhYmxlCisgICAgICAgIGlmIChub2Rlc1snJCddKSB7CisgICAg
ICAgICAgICBub2RlcyA9IG5vZGVzLnNsaWNlKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBub2Rlc1snJCddID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAvLyB0
c2xpbnQ6ZW5hYmxlCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgICAgIHZhciBuID0gbm9kZXNbaV07CisgICAgICAgICAgICBpZiAoaXNJ
bnZhbGlkKG4pKSB7CisgICAgICAgICAgICAgICAgaWYgKCFuZXdOb2RlcykgeworICAgICAgICAg
ICAgICAgICAgICBuZXdOb2RlcyA9IG5vZGVzLnNsaWNlKDAsIGkpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBuZXdOb2Rlcy5wdXNoKG4pOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShuKSkgeworICAgICAgICAgICAgICAgIHZh
ciByZXN1bHQgPSAobmV3Tm9kZXMgfHwgbm9kZXMpLnNsaWNlKDAsIGkpOworICAgICAgICAgICAg
ICAgIF9ub3JtYWxpemVWTm9kZXMobm9kZXMsIHJlc3VsdCwgaSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGlzU3Ry
aW5nT3JOdW1iZXIobikpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW5ld05vZGVzKSB7CisgICAg
ICAgICAgICAgICAgICAgIG5ld05vZGVzID0gbm9kZXMuc2xpY2UoMCwgaSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIG5ld05vZGVzLnB1c2goY3JlYXRlVGV4dFZOb2RlKG4p
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGlzVk5vZGUobikgJiYgbi5k
b20pIHsKKyAgICAgICAgICAgICAgICBpZiAoIW5ld05vZGVzKSB7CisgICAgICAgICAgICAgICAg
ICAgIG5ld05vZGVzID0gbm9kZXMuc2xpY2UoMCwgaSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIG5ld05vZGVzLnB1c2goY2xvbmVWTm9kZShuKSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIGlmIChuZXdOb2RlcykgeworICAgICAgICAgICAgICAgIG5ld05v
ZGVzLnB1c2goY2xvbmVWTm9kZShuKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIG5ld05vZGVzIHx8IG5vZGVzOworICAgIH0KKyAgICBmdW5jdGlvbiBub3JtYWxp
emVDaGlsZHJlbihjaGlsZHJlbikgeworICAgICAgICBpZiAoaXNBcnJheShjaGlsZHJlbikpIHsK
KyAgICAgICAgICAgIHJldHVybiBub3JtYWxpemVWTm9kZXMoY2hpbGRyZW4pOworICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKGlzVk5vZGUoY2hpbGRyZW4pICYmIGNoaWxkcmVuLmRvbSkgewor
ICAgICAgICAgICAgcmV0dXJuIGNsb25lVk5vZGUoY2hpbGRyZW4pOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBjaGlsZHJlbjsKKyAgICB9CisgICAgZnVuY3Rpb24gbm9ybWFsaXplUHJvcHMo
dk5vZGUsIHByb3BzLCBjaGlsZHJlbikgeworICAgICAgICBpZiAoISh2Tm9kZS5mbGFncyAmIDI4
IC8qIENvbXBvbmVudCAqLykgJiYgaXNOdWxsT3JVbmRlZihjaGlsZHJlbikgJiYgIWlzTnVsbE9y
VW5kZWYocHJvcHMuY2hpbGRyZW4pKSB7CisgICAgICAgICAgICB2Tm9kZS5jaGlsZHJlbiA9IHBy
b3BzLmNoaWxkcmVuOworICAgICAgICB9CisgICAgICAgIGlmIChwcm9wcy5yZWYpIHsKKyAgICAg
ICAgICAgIHZOb2RlLnJlZiA9IHByb3BzLnJlZjsKKyAgICAgICAgfQorICAgICAgICBpZiAocHJv
cHMuZXZlbnRzKSB7CisgICAgICAgICAgICB2Tm9kZS5ldmVudHMgPSBwcm9wcy5ldmVudHM7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKCFpc051bGxPclVuZGVmKHByb3BzLmtleSkpIHsKKyAgICAg
ICAgICAgIHZOb2RlLmtleSA9IHByb3BzLmtleTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmdW5j
dGlvbiBub3JtYWxpemUodk5vZGUpIHsKKyAgICAgICAgdmFyIHByb3BzID0gdk5vZGUucHJvcHM7
CisgICAgICAgIHZhciBjaGlsZHJlbiA9IHZOb2RlLmNoaWxkcmVuOworICAgICAgICAvLyBjb252
ZXJ0IGEgd3JvbmdseSBjcmVhdGVkIHR5cGUgYmFjayB0byBlbGVtZW50CisgICAgICAgIGlmIChp
c1N0cmluZyh2Tm9kZS50eXBlKSAmJiAodk5vZGUuZmxhZ3MgJiAyOCAvKiBDb21wb25lbnQgKi8p
KSB7CisgICAgICAgICAgICB2Tm9kZS5mbGFncyA9IDM5NzAgLyogRWxlbWVudCAqLzsKKyAgICAg
ICAgfQorICAgICAgICBpZiAocHJvcHMpIHsKKyAgICAgICAgICAgIG5vcm1hbGl6ZVByb3BzKHZO
b2RlLCBwcm9wcywgY2hpbGRyZW4pOworICAgICAgICB9CisgICAgICAgIGlmICghaXNJbnZhbGlk
KGNoaWxkcmVuKSkgeworICAgICAgICAgICAgdk5vZGUuY2hpbGRyZW4gPSBub3JtYWxpemVDaGls
ZHJlbihjaGlsZHJlbik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHByb3BzICYmICFpc0ludmFs
aWQocHJvcHMuY2hpbGRyZW4pKSB7CisgICAgICAgICAgICBwcm9wcy5jaGlsZHJlbiA9IG5vcm1h
bGl6ZUNoaWxkcmVuKHByb3BzLmNoaWxkcmVuKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmdW5j
dGlvbiBjcmVhdGVWTm9kZShmbGFncywgdHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBldmVudHMsIGtl
eSwgcmVmLCBub05vcm1hbGlzZSkgeworICAgICAgICBpZiAoZmxhZ3MgJiAxNiAvKiBDb21wb25l
bnRVbmtub3duICovKSB7CisgICAgICAgICAgICBmbGFncyA9IGlzU3RhdGVmdWxDb21wb25lbnQo
dHlwZSkgPyA0IC8qIENvbXBvbmVudENsYXNzICovIDogOCAvKiBDb21wb25lbnRGdW5jdGlvbiAq
LzsKKyAgICAgICAgfQorICAgICAgICB2YXIgdk5vZGUgPSB7CisgICAgICAgICAgICBjaGlsZHJl
bjogaXNVbmRlZmluZWQoY2hpbGRyZW4pID8gbnVsbCA6IGNoaWxkcmVuLAorICAgICAgICAgICAg
ZG9tOiBudWxsLAorICAgICAgICAgICAgZXZlbnRzOiBldmVudHMgfHwgbnVsbCwKKyAgICAgICAg
ICAgIGZsYWdzOiBmbGFncyB8fCAwLAorICAgICAgICAgICAga2V5OiBrZXkgPT09IHVuZGVmaW5l
ZCA/IG51bGwgOiBrZXksCisgICAgICAgICAgICBwcm9wczogcHJvcHMgfHwgbnVsbCwKKyAgICAg
ICAgICAgIHJlZjogcmVmIHx8IG51bGwsCisgICAgICAgICAgICB0eXBlOiB0eXBlCisgICAgICAg
IH07CisgICAgICAgIGlmICghbm9Ob3JtYWxpc2UpIHsKKyAgICAgICAgICAgIG5vcm1hbGl6ZSh2
Tm9kZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZOb2RlOworICAgIH0KKyAgICBmdW5j
dGlvbiBjcmVhdGVWb2lkVk5vZGUoKSB7CisgICAgICAgIHJldHVybiBjcmVhdGVWTm9kZSg0MDk2
IC8qIFZvaWQgKi8pOworICAgIH0KKyAgICBmdW5jdGlvbiBjcmVhdGVUZXh0Vk5vZGUodGV4dCkg
eworICAgICAgICByZXR1cm4gY3JlYXRlVk5vZGUoMSAvKiBUZXh0ICovLCBudWxsLCBudWxsLCB0
ZXh0KTsKKyAgICB9CisgICAgZnVuY3Rpb24gaXNWTm9kZShvKSB7CisgICAgICAgIHJldHVybiAh
IW8uZmxhZ3M7CisgICAgfQorCisgICAgdmFyIGRldlRvb2xzU3RhdHVzID0geworICAgICAgICBj
b25uZWN0ZWQ6IGZhbHNlCisgICAgfTsKKyAgICB2YXIgaW50ZXJuYWxJbmNyZW1lbnRlciA9IHsK
KyAgICAgICAgaWQ6IDAKKyAgICB9OworICAgIHZhciBjb21wb25lbnRJZE1hcCA9IG5ldyBNYXAo
KTsKKyAgICBmdW5jdGlvbiBnZXRJbmNyZW1lbnRhbElkKCkgeworICAgICAgICByZXR1cm4gaW50
ZXJuYWxJbmNyZW1lbnRlci5pZCsrOworICAgIH0KKyAgICBmdW5jdGlvbiBzZW5kVG9EZXZUb29s
cyhnbG9iYWwsIGRhdGEpIHsKKyAgICAgICAgdmFyIGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdp
bmZlcm5vLmNsaWVudC5tZXNzYWdlJywgeworICAgICAgICAgICAgZGV0YWlsOiBKU09OLnN0cmlu
Z2lmeShkYXRhLCBmdW5jdGlvbiAoa2V5LCB2YWwpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWlz
TnVsbCh2YWwpICYmICFpc1VuZGVmaW5lZCh2YWwpKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChrZXkgPT09ICdfdkNvbXBvbmVudCcgfHwgIWlzVW5kZWZpbmVkKHZhbC5ub2RlVHlwZSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpc0Z1bmN0aW9uKHZhbCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAoIiQkZjoiICsgKHZhbC5uYW1lKSk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHZh
bDsKKyAgICAgICAgICAgIH0pCisgICAgICAgIH0pOworICAgICAgICBnbG9iYWwuZGlzcGF0Y2hF
dmVudChldmVudCk7CisgICAgfQorICAgIGZ1bmN0aW9uIHJlcmVuZGVyUm9vdHMoKSB7CisgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm9vdHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAg
IHZhciByb290ID0gcm9vdHNbaV07CisgICAgICAgICAgICByZW5kZXIocm9vdC5pbnB1dCwgcm9v
dC5kb20pOworICAgICAgICB9CisgICAgfQorICAgIGZ1bmN0aW9uIGluaXREZXZUb29sc0hvb2tz
KGdsb2JhbCkgeworICAgICAgICBnbG9iYWwuX19JTkZFUk5PX0RFVlRPT0xTX0dMT0JBTF9IT09L
X18gPSByb290czsKKyAgICAgICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2luZmVybm8uZGV2
dG9vbHMubWVzc2FnZScsIGZ1bmN0aW9uIChtZXNzYWdlKSB7CisgICAgICAgICAgICB2YXIgZGV0
YWlsID0gSlNPTi5wYXJzZShtZXNzYWdlLmRldGFpbCk7CisgICAgICAgICAgICB2YXIgdHlwZSA9
IGRldGFpbC50eXBlOworICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgICAgICAg
ICAgY2FzZSAnZ2V0LXJvb3RzJzoKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFkZXZUb29sc1N0
YXR1cy5jb25uZWN0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldlRvb2xzU3RhdHVz
LmNvbm5lY3RlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICByZXJlbmRlclJvb3Rz
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzZW5kUm9vdHMoZ2xvYmFsKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOj8KKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KKyAgICBmdW5j
dGlvbiBzZW5kUm9vdHMoZ2xvYmFsKSB7CisgICAgICAgIHNlbmRUb0RldlRvb2xzKGdsb2JhbCwg
eyB0eXBlOiAncm9vdHMnLCBkYXRhOiByb290cyB9KTsKKyAgICB9CisKKyAgICB2YXIgTGlmZWN5
Y2xlID0gZnVuY3Rpb24gTGlmZWN5Y2xlKCkgeworICAgICAgICB0aGlzLmxpc3RlbmVycyA9IFtd
OworICAgICAgICB0aGlzLmZhc3RVbm1vdW50ID0gdHJ1ZTsKKyAgICB9OworICAgIExpZmVjeWNs
ZS5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiBhZGRMaXN0ZW5lciAoY2FsbGJhY2sp
IHsKKyAgICAgICAgdGhpcy5saXN0ZW5lcnMucHVzaChjYWxsYmFjayk7CisgICAgfTsKKyAgICBM
aWZlY3ljbGUucHJvdG90eXBlLnRyaWdnZXIgPSBmdW5jdGlvbiB0cmlnZ2VyICgpIHsKKyAgICAg
ICAgICAgIHZhciB0aGlzJDEgPSB0aGlzOworCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
dGhpcy5saXN0ZW5lcnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHRoaXMkMS5saXN0ZW5l
cnNbaV0oKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBmdW5jdGlvbiBjb25zdHJ1Y3REZWZh
dWx0cyhzdHJpbmcsIG9iamVjdCwgdmFsdWUpIHsKKyAgICAgICAgLyogZXNsaW50IG5vLXJldHVy
bi1hc3NpZ246IDAgKi8KKyAgICAgICAgc3RyaW5nLnNwbGl0KCcsJykuZm9yRWFjaChmdW5jdGlv
biAoaSkgeyByZXR1cm4gb2JqZWN0W2ldID0gdmFsdWU7IH0pOworICAgIH0KKyAgICB2YXIgeGxp
bmtOUyA9ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJzsKKyAgICB2YXIgeG1sTlMgPSAn
aHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlJzsKKyAgICB2YXIgc3ZnTlMgPSAn
aHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnOworICAgIHZhciBzdHJpY3RQcm9wcyA9IHt9Owor
ICAgIHZhciBib29sZWFuUHJvcHMgPSB7fTsKKyAgICB2YXIgbmFtZXNwYWNlcyA9IHt9OworICAg
IHZhciBpc1VuaXRsZXNzTnVtYmVyID0ge307CisgICAgdmFyIHNraXBQcm9wcyA9IHt9OworICAg
IHZhciBkZWh5cGhlblByb3BzID0geworICAgICAgICB0ZXh0QW5jaG9yOiAndGV4dC1hbmNob3In
CisgICAgfTsKKyAgICB2YXIgZGVsZWdhdGVkUHJvcHMgPSB7fTsKKyAgICBjb25zdHJ1Y3REZWZh
dWx0cygneGxpbms6aHJlZix4bGluazphcmNyb2xlLHhsaW5rOmFjdHVhdGUseGxpbms6cm9sZSx4
bGluazp0aXRsZWYseGxpbms6dHlwZScsIG5hbWVzcGFjZXMsIHhsaW5rTlMpOworICAgIGNvbnN0
cnVjdERlZmF1bHRzKCd4bWw6YmFzZSx4bWw6bGFuZyx4bWw6c3BhY2UnLCBuYW1lc3BhY2VzLCB4
bWxOUyk7CisgICAgY29uc3RydWN0RGVmYXVsdHMoJ3ZvbHVtZSxkZWZhdWx0VmFsdWUsZGVmYXVs
dENoZWNrZWQnLCBzdHJpY3RQcm9wcywgdHJ1ZSk7CisgICAgY29uc3RydWN0RGVmYXVsdHMoJ2No
aWxkcmVuLHJlZixrZXksc2VsZWN0ZWQsY2hlY2tlZCx2YWx1ZSxtdWx0aXBsZScsIHNraXBQcm9w
cywgdHJ1ZSk7CisgICAgY29uc3RydWN0RGVmYXVsdHMoJ29uQ2xpY2ssb25Nb3VzZURvd24sb25N
b3VzZVVwLG9uTW91c2VNb3ZlJywgZGVsZWdhdGVkUHJvcHMsIHRydWUpOworICAgIGNvbnN0cnVj
dERlZmF1bHRzKCdtdXRlZCxzY29wZWQsbG9vcCxvcGVuLGNoZWNrZWQsZGVmYXVsdCxjYXB0dXJl
LGRpc2FibGVkLHJlYWRvbmx5LHJlcXVpcmVkLGF1dG9wbGF5LGNvbnRyb2xzLHNlYW1sZXNzLHJl
dmVyc2VkLGFsbG93ZnVsbHNjcmVlbixub3ZhbGlkYXRlJywgYm9vbGVhblByb3BzLCB0cnVlKTsK
KyAgICBjb25zdHJ1Y3REZWZhdWx0cygnYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQsYm9yZGVySW1h
Z2VPdXRzZXQsYm9yZGVySW1hZ2VTbGljZSxib3JkZXJJbWFnZVdpZHRoLGJveEZsZXgsYm94Rmxl
eEdyb3VwLGJveE9yZGluYWxHcm91cCxjb2x1bW5Db3VudCxmbGV4LGZsZXhHcm93LGZsZXhQb3Np
dGl2ZSxmbGV4U2hyaW5rLGZsZXhOZWdhdGl2ZSxmbGV4T3JkZXIsZ3JpZFJvdyxncmlkQ29sdW1u
LGZvbnRXZWlnaHQsbGluZUNsYW1wLGxpbmVIZWlnaHQsb3BhY2l0eSxvcmRlcixvcnBoYW5zLHRh
YlNpemUsd2lkb3dzLHpJbmRleCx6b29tLGZpbGxPcGFjaXR5LGZsb29kT3BhY2l0eSxzdG9wT3Bh
Y2l0eSxzdHJva2VEYXNoYXJyYXksc3Ryb2tlRGFzaG9mZnNldCxzdHJva2VNaXRlcmxpbWl0LHN0
cm9rZU9wYWNpdHksc3Ryb2tlV2lkdGgsJywgaXNVbml0bGVzc051bWJlciwgdHJ1ZSk7CisKKyAg
ICB2YXIgZGVsZWdhdGVkRXZlbnRzID0gbmV3IE1hcCgpOworICAgIGZ1bmN0aW9uIGhhbmRsZUV2
ZW50KG5hbWUsIGxhc3RFdmVudCwgbmV4dEV2ZW50LCBkb20pIHsKKyAgICAgICAgdmFyIGRlbGVn
YXRlZFJvb3RzID0gZGVsZWdhdGVkRXZlbnRzLmdldChuYW1lKTsKKyAgICAgICAgaWYgKG5leHRF
dmVudCkgeworICAgICAgICAgICAgaWYgKCFkZWxlZ2F0ZWRSb290cykgeworICAgICAgICAgICAg
ICAgIGRlbGVnYXRlZFJvb3RzID0geyBpdGVtczogbmV3IE1hcCgpLCBjb3VudDogMCwgZG9jRXZl
bnQ6IG51bGwgfTsKKyAgICAgICAgICAgICAgICB2YXIgZG9jRXZlbnQgPSBhdHRhY2hFdmVudFRv
RG9jdW1lbnQobmFtZSwgZGVsZWdhdGVkUm9vdHMpOworICAgICAgICAgICAgICAgIGRlbGVnYXRl
ZFJvb3RzLmRvY0V2ZW50ID0gZG9jRXZlbnQ7CisgICAgICAgICAgICAgICAgZGVsZWdhdGVkRXZl
bnRzLnNldChuYW1lLCBkZWxlZ2F0ZWRSb290cyk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoIWxhc3RFdmVudCkgeworICAgICAgICAgICAgICAgIGRlbGVnYXRlZFJvb3RzLmNvdW50
Kys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWxlZ2F0ZWRSb290cy5pdGVtcy5zZXQo
ZG9tLCBuZXh0RXZlbnQpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGRlbGVnYXRlZFJv
b3RzKSB7CisgICAgICAgICAgICBpZiAoZGVsZWdhdGVkUm9vdHMuaXRlbXMuaGFzKGRvbSkpIHsK
KyAgICAgICAgICAgICAgICBkZWxlZ2F0ZWRSb290cy5jb3VudC0tOworICAgICAgICAgICAgICAg
IGRlbGVnYXRlZFJvb3RzLml0ZW1zLmRlbGV0ZShkb20pOworICAgICAgICAgICAgICAgIGlmIChk
ZWxlZ2F0ZWRSb290cy5jb3VudCA9PT0gMCkgeworICAgICAgICAgICAgICAgICAgICBkb2N1bWVu
dC5yZW1vdmVFdmVudExpc3RlbmVyKG5vcm1hbGl6ZUV2ZW50TmFtZShuYW1lKSwgZGVsZWdhdGVk
Um9vdHMuZG9jRXZlbnQpOworICAgICAgICAgICAgICAgICAgICBkZWxlZ2F0ZWRFdmVudHMuZGVs
ZXRlKG5hbWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICBmdW5jdGlvbiBkaXNwYXRjaEV2ZW50KGV2ZW50LCBkb20sIGl0ZW1zLCBjb3Vu
dCwgZXZlbnREYXRhKSB7CisgICAgICAgIHZhciBldmVudHNUb1RyaWdnZXIgPSBpdGVtcy5nZXQo
ZG9tKTsKKyAgICAgICAgaWYgKGV2ZW50c1RvVHJpZ2dlcikgeworICAgICAgICAgICAgY291bnQt
LTsKKyAgICAgICAgICAgIC8vIGxpbmtFdmVudCBvYmplY3QKKyAgICAgICAgICAgIGV2ZW50RGF0
YS5kb20gPSBkb207CisgICAgICAgICAgICBpZiAoZXZlbnRzVG9UcmlnZ2VyLmV2ZW50KSB7Cisg
ICAgICAgICAgICAgICAgZXZlbnRzVG9UcmlnZ2VyLmV2ZW50KGV2ZW50c1RvVHJpZ2dlci5kYXRh
LCBldmVudCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBldmVudHNUb1RyaWdnZXIoZXZlbnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKGV2ZW50RGF0YS5zdG9wUHJvcGFnYXRpb24pIHsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdmFyIHBhcmVudERvbSA9IGRvbS5w
YXJlbnROb2RlOworICAgICAgICBpZiAoY291bnQgPiAwICYmIChwYXJlbnREb20gfHwgcGFyZW50
RG9tID09PSBkb2N1bWVudC5ib2R5KSkgeworICAgICAgICAgICAgZGlzcGF0Y2hFdmVudChldmVu
dCwgcGFyZW50RG9tLCBpdGVtcywgY291bnQsIGV2ZW50RGF0YSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgZnVuY3Rpb24gbm9ybWFsaXplRXZlbnROYW1lKG5hbWUpIHsKKyAgICAgICAgcmV0dXJu
IG5hbWUuc3Vic3RyKDIpLnRvTG93ZXJDYXNlKCk7CisgICAgfQorICAgIGZ1bmN0aW9uIGF0dGFj
aEV2ZW50VG9Eb2N1bWVudChuYW1lLCBkZWxlZ2F0ZWRSb290cykgeworICAgICAgICB2YXIgZG9j
RXZlbnQgPSBmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgICAgICAgIHZhciBldmVudERhdGEgPSB7
CisgICAgICAgICAgICAgICAgc3RvcFByb3BhZ2F0aW9uOiBmYWxzZSwKKyAgICAgICAgICAgICAg
ICBkb206IGRvY3VtZW50CisgICAgICAgICAgICB9OworICAgICAgICAgICAgLy8gd2UgaGF2ZSB0
byBkbyB0aGlzIGFzIHNvbWUgYnJvd3NlcnMgcmVjeWNsZSB0aGUgc2FtZSBFdmVudCBiZXR3ZWVu
IGNhbGxzCisgICAgICAgICAgICAvLyBzbyB3ZSBuZWVkIHRvIG1ha2UgdGhlIHByb3BlcnR5IGNv
bmZpZ3VyYWJsZQorICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV2ZW50LCAnY3Vy
cmVudFRhcmdldCcsIHsKKyAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCisgICAg
ICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBldmVudERhdGEuZG9tOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgICAgIGV2ZW50RGF0YS5zdG9wUHJvcGFnYXRpb24gPSB0cnVlOworICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgIHZhciBjb3VudCA9IGRlbGVnYXRlZFJvb3RzLmNvdW50OworICAgICAg
ICAgICAgaWYgKGNvdW50ID4gMCkgeworICAgICAgICAgICAgICAgIGRpc3BhdGNoRXZlbnQoZXZl
bnQsIGV2ZW50LnRhcmdldCwgZGVsZWdhdGVkUm9vdHMuaXRlbXMsIGNvdW50LCBldmVudERhdGEp
OworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICBkb2N1bWVudC5hZGRFdmVudExp
c3RlbmVyKG5vcm1hbGl6ZUV2ZW50TmFtZShuYW1lKSwgZG9jRXZlbnQpOworICAgICAgICByZXR1
cm4gZG9jRXZlbnQ7CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNDaGVja2VkVHlwZSh0eXBlKSB7
CisgICAgICAgIHJldHVybiB0eXBlID09PSAnY2hlY2tib3gnIHx8IHR5cGUgPT09ICdyYWRpbyc7
CisgICAgfQorICAgIGZ1bmN0aW9uIGlzQ29udHJvbGxlZChwcm9wcykgeworICAgICAgICB2YXIg
dXNlc0NoZWNrZWQgPSBpc0NoZWNrZWRUeXBlKHByb3BzLnR5cGUpOworICAgICAgICByZXR1cm4g
dXNlc0NoZWNrZWQgPyAhaXNOdWxsT3JVbmRlZihwcm9wcy5jaGVja2VkKSA6ICFpc051bGxPclVu
ZGVmKHByb3BzLnZhbHVlKTsKKyAgICB9CisgICAgZnVuY3Rpb24gb25UZXh0SW5wdXRDaGFuZ2Uo
ZSkgeworICAgICAgICB2YXIgdk5vZGUgPSB0aGlzLnZOb2RlOworICAgICAgICB2YXIgZXZlbnRz
ID0gdk5vZGUuZXZlbnRzIHx8IEVNUFRZX09CSjsKKyAgICAgICAgdmFyIGRvbSA9IHZOb2RlLmRv
bTsKKyAgICAgICAgaWYgKGV2ZW50cy5vbklucHV0KSB7CisgICAgICAgICAgICBldmVudHMub25J
bnB1dChlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChldmVudHMub25pbnB1dCkgewor
ICAgICAgICAgICAgZXZlbnRzLm9uaW5wdXQoZSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gdGhl
IHVzZXIgbWF5IGhhdmUgdXBkYXRlZCB0aGUgdk5vZGUgZnJvbSB0aGUgYWJvdmUgb25JbnB1dCBl
dmVudHMKKyAgICAgICAgLy8gc28gd2UgbmVlZCB0byBnZXQgaXQgZnJvbSB0aGUgY29udGV4dCBv
ZiBgdGhpc2AgYWdhaW4KKyAgICAgICAgYXBwbHlWYWx1ZSh0aGlzLnZOb2RlLCBkb20pOworICAg
IH0KKyAgICBmdW5jdGlvbiBvbkNoZWNrYm94Q2hhbmdlKGUpIHsKKyAgICAgICAgdmFyIHZOb2Rl
ID0gdGhpcy52Tm9kZTsKKyAgICAgICAgdmFyIGV2ZW50cyA9IHZOb2RlLmV2ZW50cyB8fCBFTVBU
WV9PQko7CisgICAgICAgIHZhciBkb20gPSB2Tm9kZS5kb207CisgICAgICAgIGlmIChldmVudHMu
b25DbGljaykgeworICAgICAgICAgICAgZXZlbnRzLm9uQ2xpY2soZSk7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSBpZiAoZXZlbnRzLm9uY2xpY2spIHsKKyAgICAgICAgICAgIGV2ZW50cy5vbmNs
aWNrKGUpOworICAgICAgICB9CisgICAgICAgIC8vIHRoZSB1c2VyIG1heSBoYXZlIHVwZGF0ZWQg
dGhlIHZOb2RlIGZyb20gdGhlIGFib3ZlIG9uQ2xpY2sgZXZlbnRzCisgICAgICAgIC8vIHNvIHdl
IG5lZWQgdG8gZ2V0IGl0IGZyb20gdGhlIGNvbnRleHQgb2YgYHRoaXNgIGFnYWluCisgICAgICAg
IGFwcGx5VmFsdWUodGhpcy52Tm9kZSwgZG9tKTsKKyAgICB9CisgICAgZnVuY3Rpb24gaGFuZGxl
QXNzb2NpYXRlZFJhZGlvSW5wdXRzKG5hbWUpIHsKKyAgICAgICAgdmFyIGlucHV0cyA9IGRvY3Vt
ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoKCJpbnB1dFt0eXBlPVwicmFkaW9cIl1bbmFtZT1cIiIgKyBu
YW1lICsgIlwiXSIpKTsKKyAgICAgICAgW10uZm9yRWFjaC5jYWxsKGlucHV0cywgZnVuY3Rpb24g
KGRvbSkgeworICAgICAgICAgICAgdmFyIGlucHV0V3JhcHBlciA9IHdyYXBwZXJzLmdldChkb20p
OworICAgICAgICAgICAgaWYgKGlucHV0V3JhcHBlcikgeworICAgICAgICAgICAgICAgIHZhciBw
cm9wcyA9IGlucHV0V3JhcHBlci52Tm9kZS5wcm9wczsKKyAgICAgICAgICAgICAgICBpZiAocHJv
cHMpIHsKKyAgICAgICAgICAgICAgICAgICAgZG9tLmNoZWNrZWQgPSBpbnB1dFdyYXBwZXIudk5v
ZGUucHJvcHMuY2hlY2tlZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0pOworICAgIH0KKyAgICBmdW5jdGlvbiBwcm9jZXNzSW5wdXQodk5vZGUsIGRvbSkgewor
ICAgICAgICB2YXIgcHJvcHMgPSB2Tm9kZS5wcm9wcyB8fCBFTVBUWV9PQko7CisgICAgICAgIGFw
cGx5VmFsdWUodk5vZGUsIGRvbSk7CisgICAgICAgIGlmIChpc0NvbnRyb2xsZWQocHJvcHMpKSB7
CisgICAgICAgICAgICB2YXIgaW5wdXRXcmFwcGVyID0gd3JhcHBlcnMuZ2V0KGRvbSk7CisgICAg
ICAgICAgICBpZiAoIWlucHV0V3JhcHBlcikgeworICAgICAgICAgICAgICAgIGlucHV0V3JhcHBl
ciA9IHsKKyAgICAgICAgICAgICAgICAgICAgdk5vZGU6IHZOb2RlCisgICAgICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgICAgICBpZiAoaXNDaGVja2VkVHlwZShwcm9wcy50eXBlKSkgeworICAg
ICAgICAgICAgICAgICAgICBkb20ub25jbGljayA9IG9uQ2hlY2tib3hDaGFuZ2UuYmluZChpbnB1
dFdyYXBwZXIpOworICAgICAgICAgICAgICAgICAgICBkb20ub25jbGljay53cmFwcGVkID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIGRvbS5vbmlucHV0ID0gb25UZXh0SW5wdXRDaGFuZ2UuYmluZChpbnB1dFdyYXBw
ZXIpOworICAgICAgICAgICAgICAgICAgICBkb20ub25pbnB1dC53cmFwcGVkID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgd3JhcHBlcnMuc2V0KGRvbSwgaW5wdXRX
cmFwcGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlucHV0V3JhcHBlci52Tm9kZSA9
IHZOb2RlOworICAgICAgICB9CisgICAgfQorICAgIGZ1bmN0aW9uIGFwcGx5VmFsdWUodk5vZGUs
IGRvbSkgeworICAgICAgICB2YXIgcHJvcHMgPSB2Tm9kZS5wcm9wcyB8fCBFTVBUWV9PQko7Cisg
ICAgICAgIHZhciB0eXBlID0gcHJvcHMudHlwZTsKKyAgICAgICAgdmFyIHZhbHVlID0gcHJvcHMu
dmFsdWU7CisgICAgICAgIHZhciBjaGVja2VkID0gcHJvcHMuY2hlY2tlZDsKKyAgICAgICAgaWYg
KHR5cGUgIT09IGRvbS50eXBlICYmIHR5cGUpIHsKKyAgICAgICAgICAgIGRvbS50eXBlID0gdHlw
ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocHJvcHMubXVsdGlwbGUgIT09IGRvbS5tdWx0aXBs
ZSkgeworICAgICAgICAgICAgZG9tLm11bHRpcGxlID0gcHJvcHMubXVsdGlwbGU7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGlzQ2hlY2tlZFR5cGUodHlwZSkpIHsKKyAgICAgICAgICAgIGlmICgh
aXNOdWxsT3JVbmRlZih2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBkb20udmFsdWUgPSB2YWx1
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRvbS5jaGVja2VkID0gY2hlY2tlZDsKKyAg
ICAgICAgICAgIGlmICh0eXBlID09PSAncmFkaW8nICYmIHByb3BzLm5hbWUpIHsKKyAgICAgICAg
ICAgICAgICBoYW5kbGVBc3NvY2lhdGVkUmFkaW9JbnB1dHMocHJvcHMubmFtZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoIWlzTnVs
bE9yVW5kZWYodmFsdWUpICYmIGRvbS52YWx1ZSAhPT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAg
ICBkb20udmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYg
KCFpc051bGxPclVuZGVmKGNoZWNrZWQpKSB7CisgICAgICAgICAgICAgICAgZG9tLmNoZWNrZWQg
PSBjaGVja2VkOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rp
b24gaXNDb250cm9sbGVkJDEocHJvcHMpIHsKKyAgICAgICAgcmV0dXJuICFpc051bGxPclVuZGVm
KHByb3BzLnZhbHVlKTsKKyAgICB9CisgICAgZnVuY3Rpb24gdXBkYXRlQ2hpbGRPcHRpb24odk5v
ZGUsIHZhbHVlKSB7CisgICAgICAgIHZhciBwcm9wcyA9IHZOb2RlLnByb3BzIHx8IEVNUFRZX09C
SjsKKyAgICAgICAgdmFyIGRvbSA9IHZOb2RlLmRvbTsKKyAgICAgICAgLy8gd2UgZG8gdGhpcyBh
cyBtdWx0aXBsZSBtYXkgaGF2ZSBjaGFuZ2VkCisgICAgICAgIGRvbS52YWx1ZSA9IHByb3BzLnZh
bHVlOworICAgICAgICBpZiAoKGlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmluZGV4T2YocHJvcHMu
dmFsdWUpICE9PSAtMSkgfHwgcHJvcHMudmFsdWUgPT09IHZhbHVlKSB7CisgICAgICAgICAgICBk
b20uc2VsZWN0ZWQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgZG9tLnNlbGVjdGVkID0gcHJvcHMuc2VsZWN0ZWQgfHwgZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisgICAgZnVuY3Rpb24gb25TZWxlY3RDaGFuZ2UoZSkgeworICAgICAgICB2YXIgdk5vZGUg
PSB0aGlzLnZOb2RlOworICAgICAgICB2YXIgZXZlbnRzID0gdk5vZGUuZXZlbnRzIHx8IEVNUFRZ
X09CSjsKKyAgICAgICAgdmFyIGRvbSA9IHZOb2RlLmRvbTsKKyAgICAgICAgaWYgKGV2ZW50cy5v
bkNoYW5nZSkgeworICAgICAgICAgICAgZXZlbnRzLm9uQ2hhbmdlKGUpOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgaWYgKGV2ZW50cy5vbmNoYW5nZSkgeworICAgICAgICAgICAgZXZlbnRzLm9u
Y2hhbmdlKGUpOworICAgICAgICB9CisgICAgICAgIC8vIHRoZSB1c2VyIG1heSBoYXZlIHVwZGF0
ZWQgdGhlIHZOb2RlIGZyb20gdGhlIGFib3ZlIG9uQ2hhbmdlIGV2ZW50cworICAgICAgICAvLyBz
byB3ZSBuZWVkIHRvIGdldCBpdCBmcm9tIHRoZSBjb250ZXh0IG9mIGB0aGlzYCBhZ2FpbgorICAg
ICAgICBhcHBseVZhbHVlJDEodGhpcy52Tm9kZSwgZG9tKTsKKyAgICB9CisgICAgZnVuY3Rpb24g
cHJvY2Vzc1NlbGVjdCh2Tm9kZSwgZG9tKSB7CisgICAgICAgIHZhciBwcm9wcyA9IHZOb2RlLnBy
b3BzIHx8IEVNUFRZX09CSjsKKyAgICAgICAgYXBwbHlWYWx1ZSQxKHZOb2RlLCBkb20pOworICAg
ICAgICBpZiAoaXNDb250cm9sbGVkJDEocHJvcHMpKSB7CisgICAgICAgICAgICB2YXIgc2VsZWN0
V3JhcHBlciA9IHdyYXBwZXJzLmdldChkb20pOworICAgICAgICAgICAgaWYgKCFzZWxlY3RXcmFw
cGVyKSB7CisgICAgICAgICAgICAgICAgc2VsZWN0V3JhcHBlciA9IHsKKyAgICAgICAgICAgICAg
ICAgICAgdk5vZGU6IHZOb2RlCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICBk
b20ub25jaGFuZ2UgPSBvblNlbGVjdENoYW5nZS5iaW5kKHNlbGVjdFdyYXBwZXIpOworICAgICAg
ICAgICAgICAgIGRvbS5vbmNoYW5nZS53cmFwcGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB3
cmFwcGVycy5zZXQoZG9tLCBzZWxlY3RXcmFwcGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHNlbGVjdFdyYXBwZXIudk5vZGUgPSB2Tm9kZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBm
dW5jdGlvbiBhcHBseVZhbHVlJDEodk5vZGUsIGRvbSkgeworICAgICAgICB2YXIgcHJvcHMgPSB2
Tm9kZS5wcm9wcyB8fCBFTVBUWV9PQko7CisgICAgICAgIGlmIChwcm9wcy5tdWx0aXBsZSAhPT0g
ZG9tLm11bHRpcGxlKSB7CisgICAgICAgICAgICBkb20ubXVsdGlwbGUgPSBwcm9wcy5tdWx0aXBs
ZTsKKyAgICAgICAgfQorICAgICAgICB2YXIgY2hpbGRyZW4gPSB2Tm9kZS5jaGlsZHJlbjsKKyAg
ICAgICAgdmFyIHZhbHVlID0gcHJvcHMudmFsdWU7CisgICAgICAgIGlmIChpc0FycmF5KGNoaWxk
cmVuKSkgeworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7
IGkrKykgeworICAgICAgICAgICAgICAgIHVwZGF0ZUNoaWxkT3B0aW9uKGNoaWxkcmVuW2ldLCB2
YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaXNWTm9k
ZShjaGlsZHJlbikpIHsKKyAgICAgICAgICAgIHVwZGF0ZUNoaWxkT3B0aW9uKGNoaWxkcmVuLCB2
YWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc0NvbnRyb2xsZWQkMihw
cm9wcykgeworICAgICAgICByZXR1cm4gIWlzTnVsbE9yVW5kZWYocHJvcHMudmFsdWUpOworICAg
IH0KKyAgICBmdW5jdGlvbiBvblRleHRhcmVhSW5wdXRDaGFuZ2UoZSkgeworICAgICAgICB2YXIg
dk5vZGUgPSB0aGlzLnZOb2RlOworICAgICAgICB2YXIgZXZlbnRzID0gdk5vZGUuZXZlbnRzIHx8
IEVNUFRZX09CSjsKKyAgICAgICAgdmFyIGRvbSA9IHZOb2RlLmRvbTsKKyAgICAgICAgaWYgKGV2
ZW50cy5vbklucHV0KSB7CisgICAgICAgICAgICBldmVudHMub25JbnB1dChlKTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIGlmIChldmVudHMub25pbnB1dCkgeworICAgICAgICAgICAgZXZlbnRz
Lm9uaW5wdXQoZSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gdGhlIHVzZXIgbWF5IGhhdmUgdXBk
YXRlZCB0aGUgdk5vZGUgZnJvbSB0aGUgYWJvdmUgb25JbnB1dCBldmVudHMKKyAgICAgICAgLy8g
c28gd2UgbmVlZCB0byBnZXQgaXQgZnJvbSB0aGUgY29udGV4dCBvZiBgdGhpc2AgYWdhaW4KKyAg
ICAgICAgYXBwbHlWYWx1ZSQyKHRoaXMudk5vZGUsIGRvbSk7CisgICAgfQorICAgIGZ1bmN0aW9u
IHByb2Nlc3NUZXh0YXJlYSh2Tm9kZSwgZG9tKSB7CisgICAgICAgIHZhciBwcm9wcyA9IHZOb2Rl
LnByb3BzIHx8IEVNUFRZX09CSjsKKyAgICAgICAgYXBwbHlWYWx1ZSQyKHZOb2RlLCBkb20pOwor
ICAgICAgICB2YXIgdGV4dGFyZWFXcmFwcGVyID0gd3JhcHBlcnMuZ2V0KGRvbSk7CisgICAgICAg
IGlmIChpc0NvbnRyb2xsZWQkMihwcm9wcykpIHsKKyAgICAgICAgICAgIGlmICghdGV4dGFyZWFX
cmFwcGVyKSB7CisgICAgICAgICAgICAgICAgdGV4dGFyZWFXcmFwcGVyID0geworICAgICAgICAg
ICAgICAgICAgICB2Tm9kZTogdk5vZGUKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAg
ICAgIGRvbS5vbmlucHV0ID0gb25UZXh0YXJlYUlucHV0Q2hhbmdlLmJpbmQodGV4dGFyZWFXcmFw
cGVyKTsKKyAgICAgICAgICAgICAgICBkb20ub25pbnB1dC53cmFwcGVkID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICB3cmFwcGVycy5zZXQoZG9tLCB0ZXh0YXJlYVdyYXBwZXIpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdGV4dGFyZWFXcmFwcGVyLnZOb2RlID0gdk5vZGU7CisgICAgICAg
IH0KKyAgICB9CisgICAgZnVuY3Rpb24gYXBwbHlWYWx1ZSQyKHZOb2RlLCBkb20pIHsKKyAgICAg
ICAgdmFyIHByb3BzID0gdk5vZGUucHJvcHMgfHwgRU1QVFlfT0JKOworICAgICAgICB2YXIgdmFs
dWUgPSBwcm9wcy52YWx1ZTsKKyAgICAgICAgaWYgKGRvbS52YWx1ZSAhPT0gdmFsdWUpIHsKKyAg
ICAgICAgICAgIGRvbS52YWx1ZSA9IHZhbHVlOworICAgICAgICB9CisgICAgfQorCisgICAgdmFy
IHdyYXBwZXJzID0gbmV3IE1hcCgpOworICAgIGZ1bmN0aW9uIHByb2Nlc3NFbGVtZW50KGZsYWdz
LCB2Tm9kZSwgZG9tKSB7CisgICAgICAgIGlmIChmbGFncyAmIDUxMiAvKiBJbnB1dEVsZW1lbnQg
Ki8pIHsKKyAgICAgICAgICAgIHByb2Nlc3NJbnB1dCh2Tm9kZSwgZG9tKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIGlmIChmbGFncyAmIDIwNDggLyogU2VsZWN0RWxlbWVudCAqLykgeworICAg
ICAgICAgICAgcHJvY2Vzc1NlbGVjdCh2Tm9kZSwgZG9tKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIGlmIChmbGFncyAmIDEwMjQgLyogVGV4dGFyZWFFbGVtZW50ICovKSB7CisgICAgICAgICAg
ICBwcm9jZXNzVGV4dGFyZWEodk5vZGUsIGRvbSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBm
dW5jdGlvbiB1bm1vdW50KHZOb2RlLCBwYXJlbnREb20sIGxpZmVjeWNsZSwgY2FuUmVjeWNsZSwg
c2hhbGxvd1VubW91bnQsIGlzUmVjeWNsaW5nKSB7CisgICAgICAgIHZhciBmbGFncyA9IHZOb2Rl
LmZsYWdzOworICAgICAgICBpZiAoZmxhZ3MgJiAyOCAvKiBDb21wb25lbnQgKi8pIHsKKyAgICAg
ICAgICAgIHVubW91bnRDb21wb25lbnQodk5vZGUsIHBhcmVudERvbSwgbGlmZWN5Y2xlLCBjYW5S
ZWN5Y2xlLCBzaGFsbG93VW5tb3VudCwgaXNSZWN5Y2xpbmcpOworICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKGZsYWdzICYgMzk3MCAvKiBFbGVtZW50ICovKSB7CisgICAgICAgICAgICB1bm1v
dW50RWxlbWVudCh2Tm9kZSwgcGFyZW50RG9tLCBsaWZlY3ljbGUsIGNhblJlY3ljbGUsIHNoYWxs
b3dVbm1vdW50LCBpc1JlY3ljbGluZyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZmxh
Z3MgJiAoMSAvKiBUZXh0ICovIHwgNDA5NiAvKiBWb2lkICovKSkgeworICAgICAgICAgICAgdW5t
b3VudFZvaWRPclRleHQodk5vZGUsIHBhcmVudERvbSk7CisgICAgICAgIH0KKyAgICB9CisgICAg
ZnVuY3Rpb24gdW5tb3VudFZvaWRPclRleHQodk5vZGUsIHBhcmVudERvbSkgeworICAgICAgICBp
ZiAocGFyZW50RG9tKSB7CisgICAgICAgICAgICByZW1vdmVDaGlsZChwYXJlbnREb20sIHZOb2Rl
LmRvbSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZnVuY3Rpb24gdW5tb3VudENvbXBvbmVudCh2
Tm9kZSwgcGFyZW50RG9tLCBsaWZlY3ljbGUsIGNhblJlY3ljbGUsIHNoYWxsb3dVbm1vdW50LCBp
c1JlY3ljbGluZykgeworICAgICAgICB2YXIgaW5zdGFuY2UgPSB2Tm9kZS5jaGlsZHJlbjsKKyAg
ICAgICAgdmFyIGZsYWdzID0gdk5vZGUuZmxhZ3M7CisgICAgICAgIHZhciBpc1N0YXRlZnVsQ29t
cG9uZW50JCQxID0gZmxhZ3MgJiA0OworICAgICAgICB2YXIgcmVmID0gdk5vZGUucmVmOworICAg
ICAgICB2YXIgZG9tID0gdk5vZGUuZG9tOworICAgICAgICBpZiAoIWlzUmVjeWNsaW5nKSB7Cisg
ICAgICAgICAgICBpZiAoIXNoYWxsb3dVbm1vdW50KSB7CisgICAgICAgICAgICAgICAgaWYgKGlz
U3RhdGVmdWxDb21wb25lbnQkJDEpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHN1YkxpZmVj
eWNsZSA9IGluc3RhbmNlLl9saWZlY3ljbGU7CisgICAgICAgICAgICAgICAgICAgIGlmICghc3Vi
TGlmZWN5Y2xlLmZhc3RVbm1vdW50KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bm1vdW50
KGluc3RhbmNlLl9sYXN0SW5wdXQsIG51bGwsIGxpZmVjeWNsZSwgZmFsc2UsIHNoYWxsb3dVbm1v
dW50LCBpc1JlY3ljbGluZyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghbGlm
ZWN5Y2xlLmZhc3RVbm1vdW50KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bm1vdW50KGlu
c3RhbmNlLCBudWxsLCBsaWZlY3ljbGUsIGZhbHNlLCBzaGFsbG93VW5tb3VudCwgaXNSZWN5Y2xp
bmcpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKGlzU3RhdGVmdWxDb21wb25lbnQkJDEpIHsKKyAgICAgICAg
ICAgICAgICBpbnN0YW5jZS5faWdub3JlU2V0U3RhdGUgPSB0cnVlOworICAgICAgICAgICAgICAg
IGluc3RhbmNlLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7CisgICAgICAgICAgICAgICAgaWYgKHJl
ZiAmJiAhaXNSZWN5Y2xpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVmKG51bGwpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbnN0YW5jZS5fdW5tb3VudGVkID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICBmaW5kRE9NTm9kZUVuYWJsZWQgJiYgY29tcG9uZW50VG9ET01O
b2RlTWFwLmRlbGV0ZShpbnN0YW5jZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
IGlmICghaXNOdWxsT3JVbmRlZihyZWYpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpc051bGxP
clVuZGVmKHJlZi5vbkNvbXBvbmVudFdpbGxVbm1vdW50KSkgeworICAgICAgICAgICAgICAgICAg
ICByZWYub25Db21wb25lbnRXaWxsVW5tb3VudChkb20pOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAocGFyZW50RG9tKSB7CisgICAgICAg
ICAgICB2YXIgbGFzdElucHV0ID0gaW5zdGFuY2UuX2xhc3RJbnB1dDsKKyAgICAgICAgICAgIGlm
IChpc051bGxPclVuZGVmKGxhc3RJbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBsYXN0SW5wdXQg
PSBpbnN0YW5jZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlbW92ZUNoaWxkKHBhcmVu
dERvbSwgZG9tKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVjeWNsaW5nRW5hYmxlZCAmJiAh
aXNTdGF0ZWZ1bENvbXBvbmVudCQkMSAmJiAocGFyZW50RG9tIHx8IGNhblJlY3ljbGUpKSB7Cisg
ICAgICAgICAgICBwb29sQ29tcG9uZW50KHZOb2RlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBm
dW5jdGlvbiB1bm1vdW50RWxlbWVudCh2Tm9kZSwgcGFyZW50RG9tLCBsaWZlY3ljbGUsIGNhblJl
Y3ljbGUsIHNoYWxsb3dVbm1vdW50LCBpc1JlY3ljbGluZykgeworICAgICAgICB2YXIgZG9tID0g
dk5vZGUuZG9tOworICAgICAgICB2YXIgcmVmID0gdk5vZGUucmVmOworICAgICAgICB2YXIgZXZl
bnRzID0gdk5vZGUuZXZlbnRzOworICAgICAgICBpZiAoIXNoYWxsb3dVbm1vdW50ICYmICFsaWZl
Y3ljbGUuZmFzdFVubW91bnQpIHsKKyAgICAgICAgICAgIGlmIChyZWYgJiYgIWlzUmVjeWNsaW5n
KSB7CisgICAgICAgICAgICAgICAgdW5tb3VudFJlZihyZWYpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgdmFyIGNoaWxkcmVuID0gdk5vZGUuY2hpbGRyZW47CisgICAgICAgICAgICBpZiAo
IWlzTnVsbE9yVW5kZWYoY2hpbGRyZW4pKSB7CisgICAgICAgICAgICAgICAgdW5tb3VudENoaWxk
cmVuJDEoY2hpbGRyZW4sIGxpZmVjeWNsZSwgc2hhbGxvd1VubW91bnQsIGlzUmVjeWNsaW5nKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIWlzTnVsbChldmVudHMpKSB7
CisgICAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIGV2ZW50cykgeworICAgICAgICAgICAgICAg
IC8vIGRvIG5vdCBhZGQgYSBoYXNPd25Qcm9wZXJ0eSBjaGVjayBoZXJlLCBpdCBhZmZlY3RzIHBl
cmZvcm1hbmNlCisgICAgICAgICAgICAgICAgcGF0Y2hFdmVudChuYW1lLCBldmVudHNbbmFtZV0s
IG51bGwsIGRvbSwgbGlmZWN5Y2xlKTsKKyAgICAgICAgICAgICAgICBldmVudHNbbmFtZV0gPSBu
dWxsOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChwYXJlbnREb20pIHsK
KyAgICAgICAgICAgIHJlbW92ZUNoaWxkKHBhcmVudERvbSwgZG9tKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAocmVjeWNsaW5nRW5hYmxlZCAmJiAocGFyZW50RG9tIHx8IGNhblJlY3ljbGUpKSB7
CisgICAgICAgICAgICBwb29sRWxlbWVudCh2Tm9kZSk7CisgICAgICAgIH0KKyAgICB9CisgICAg
ZnVuY3Rpb24gdW5tb3VudENoaWxkcmVuJDEoY2hpbGRyZW4sIGxpZmVjeWNsZSwgc2hhbGxvd1Vu
bW91bnQsIGlzUmVjeWNsaW5nKSB7CisgICAgICAgIGlmIChpc0FycmF5KGNoaWxkcmVuKSkgewor
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykgewor
ICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2ldOworICAgICAgICAgICAgICAg
IGlmICghaXNJbnZhbGlkKGNoaWxkKSAmJiBpc09iamVjdChjaGlsZCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgdW5tb3VudChjaGlsZCwgbnVsbCwgbGlmZWN5Y2xlLCBmYWxzZSwgc2hhbGxvd1Vu
bW91bnQsIGlzUmVjeWNsaW5nKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaXNPYmplY3QoY2hpbGRyZW4pKSB7CisgICAgICAg
ICAgICB1bm1vdW50KGNoaWxkcmVuLCBudWxsLCBsaWZlY3ljbGUsIGZhbHNlLCBzaGFsbG93VW5t
b3VudCwgaXNSZWN5Y2xpbmcpOworICAgICAgICB9CisgICAgfQorICAgIGZ1bmN0aW9uIHVubW91
bnRSZWYocmVmKSB7CisgICAgICAgIGlmIChpc0Z1bmN0aW9uKHJlZikpIHsKKyAgICAgICAgICAg
IHJlZihudWxsKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChp
c0ludmFsaWQocmVmKSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChmYWxzZSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3IoJ3N0
cmluZyAicmVmcyIgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gSW5mZXJubyAxLjAuIFVzZSBjYWxsYmFj
ayAicmVmcyIgaW5zdGVhZC4nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRocm93RXJy
b3IoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIHBhdGNoKGxhc3RWTm9kZSwg
bmV4dFZOb2RlLCBwYXJlbnREb20sIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcsIGlzUmVjeWNs
aW5nKSB7CisgICAgICAgIGlmIChsYXN0Vk5vZGUgIT09IG5leHRWTm9kZSkgeworICAgICAgICAg
ICAgdmFyIGxhc3RGbGFncyA9IGxhc3RWTm9kZS5mbGFnczsKKyAgICAgICAgICAgIHZhciBuZXh0
RmxhZ3MgPSBuZXh0Vk5vZGUuZmxhZ3M7CisgICAgICAgICAgICBpZiAobmV4dEZsYWdzICYgMjgg
LyogQ29tcG9uZW50ICovKSB7CisgICAgICAgICAgICAgICAgaWYgKGxhc3RGbGFncyAmIDI4IC8q
IENvbXBvbmVudCAqLykgeworICAgICAgICAgICAgICAgICAgICBwYXRjaENvbXBvbmVudChsYXN0
Vk5vZGUsIG5leHRWTm9kZSwgcGFyZW50RG9tLCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHLCBu
ZXh0RmxhZ3MgJiA0IC8qIENvbXBvbmVudENsYXNzICovLCBpc1JlY3ljbGluZyk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBy
ZXBsYWNlVk5vZGUocGFyZW50RG9tLCBtb3VudENvbXBvbmVudChuZXh0Vk5vZGUsIG51bGwsIGxp
ZmVjeWNsZSwgY29udGV4dCwgaXNTVkcsIG5leHRGbGFncyAmIDQgLyogQ29tcG9uZW50Q2xhc3Mg
Ki8pLCBsYXN0Vk5vZGUsIGxpZmVjeWNsZSwgaXNSZWN5Y2xpbmcpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG5leHRGbGFncyAmIDM5NzAg
LyogRWxlbWVudCAqLykgeworICAgICAgICAgICAgICAgIGlmIChsYXN0RmxhZ3MgJiAzOTcwIC8q
IEVsZW1lbnQgKi8pIHsKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2hFbGVtZW50KGxhc3RWTm9k
ZSwgbmV4dFZOb2RlLCBwYXJlbnREb20sIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcsIGlzUmVj
eWNsaW5nKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIHJlcGxhY2VWTm9kZShwYXJlbnREb20sIG1vdW50RWxlbWVudChuZXh0
Vk5vZGUsIG51bGwsIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcpLCBsYXN0Vk5vZGUsIGxpZmVj
eWNsZSwgaXNSZWN5Y2xpbmcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UgaWYgKG5leHRGbGFncyAmIDEgLyogVGV4dCAqLykgeworICAgICAgICAg
ICAgICAgIGlmIChsYXN0RmxhZ3MgJiAxIC8qIFRleHQgKi8pIHsKKyAgICAgICAgICAgICAgICAg
ICAgcGF0Y2hUZXh0KGxhc3RWTm9kZSwgbmV4dFZOb2RlKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VWTm9kZShw
YXJlbnREb20sIG1vdW50VGV4dChuZXh0Vk5vZGUsIG51bGwpLCBsYXN0Vk5vZGUsIGxpZmVjeWNs
ZSwgaXNSZWN5Y2xpbmcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UgaWYgKG5leHRGbGFncyAmIDQwOTYgLyogVm9pZCAqLykgeworICAgICAgICAg
ICAgICAgIGlmIChsYXN0RmxhZ3MgJiA0MDk2IC8qIFZvaWQgKi8pIHsKKyAgICAgICAgICAgICAg
ICAgICAgcGF0Y2hWb2lkKGxhc3RWTm9kZSwgbmV4dFZOb2RlKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VWTm9k
ZShwYXJlbnREb20sIG1vdW50Vm9pZChuZXh0Vk5vZGUsIG51bGwpLCBsYXN0Vk5vZGUsIGxpZmVj
eWNsZSwgaXNSZWN5Y2xpbmcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEVycm9yIGNhc2U6IG1vdW50IG5l
dyBvbmUgcmVwbGFjaW5nIG9sZCBvbmUKKyAgICAgICAgICAgICAgICByZXBsYWNlTGFzdENoaWxk
QW5kVW5tb3VudChsYXN0Vk5vZGUsIG5leHRWTm9kZSwgcGFyZW50RG9tLCBsaWZlY3ljbGUsIGNv
bnRleHQsIGlzU1ZHLCBpc1JlY3ljbGluZyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgZnVuY3Rpb24gdW5tb3VudENoaWxkcmVuKGNoaWxkcmVuLCBkb20sIGxpZmVjeWNs
ZSwgaXNSZWN5Y2xpbmcpIHsKKyAgICAgICAgaWYgKGlzVk5vZGUoY2hpbGRyZW4pKSB7CisgICAg
ICAgICAgICB1bm1vdW50KGNoaWxkcmVuLCBkb20sIGxpZmVjeWNsZSwgdHJ1ZSwgZmFsc2UsIGlz
UmVjeWNsaW5nKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpc0FycmF5KGNoaWxkcmVu
KSkgeworICAgICAgICAgICAgcmVtb3ZlQWxsQ2hpbGRyZW4oZG9tLCBjaGlsZHJlbiwgbGlmZWN5
Y2xlLCBmYWxzZSwgaXNSZWN5Y2xpbmcpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgZG9tLnRleHRDb250ZW50ID0gJyc7CisgICAgICAgIH0KKyAgICB9CisgICAgZnVu
Y3Rpb24gcGF0Y2hFbGVtZW50KGxhc3RWTm9kZSwgbmV4dFZOb2RlLCBwYXJlbnREb20sIGxpZmVj
eWNsZSwgY29udGV4dCwgaXNTVkcsIGlzUmVjeWNsaW5nKSB7CisgICAgICAgIHZhciBuZXh0VGFn
ID0gbmV4dFZOb2RlLnR5cGU7CisgICAgICAgIHZhciBsYXN0VGFnID0gbGFzdFZOb2RlLnR5cGU7
CisgICAgICAgIGlmIChsYXN0VGFnICE9PSBuZXh0VGFnKSB7CisgICAgICAgICAgICByZXBsYWNl
V2l0aE5ld05vZGUobGFzdFZOb2RlLCBuZXh0Vk5vZGUsIHBhcmVudERvbSwgbGlmZWN5Y2xlLCBj
b250ZXh0LCBpc1NWRywgaXNSZWN5Y2xpbmcpOworICAgICAgICB9CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgdmFyIGRvbSA9IGxhc3RWTm9kZS5kb207CisgICAgICAgICAgICB2YXIgbGFz
dFByb3BzID0gbGFzdFZOb2RlLnByb3BzOworICAgICAgICAgICAgdmFyIG5leHRQcm9wcyA9IG5l
eHRWTm9kZS5wcm9wczsKKyAgICAgICAgICAgIHZhciBsYXN0Q2hpbGRyZW4gPSBsYXN0Vk5vZGUu
Y2hpbGRyZW47CisgICAgICAgICAgICB2YXIgbmV4dENoaWxkcmVuID0gbmV4dFZOb2RlLmNoaWxk
cmVuOworICAgICAgICAgICAgdmFyIGxhc3RGbGFncyA9IGxhc3RWTm9kZS5mbGFnczsKKyAgICAg
ICAgICAgIHZhciBuZXh0RmxhZ3MgPSBuZXh0Vk5vZGUuZmxhZ3M7CisgICAgICAgICAgICB2YXIg
bGFzdFJlZiA9IGxhc3RWTm9kZS5yZWY7CisgICAgICAgICAgICB2YXIgbmV4dFJlZiA9IG5leHRW
Tm9kZS5yZWY7CisgICAgICAgICAgICB2YXIgbGFzdEV2ZW50cyA9IGxhc3RWTm9kZS5ldmVudHM7
CisgICAgICAgICAgICB2YXIgbmV4dEV2ZW50cyA9IG5leHRWTm9kZS5ldmVudHM7CisgICAgICAg
ICAgICBuZXh0Vk5vZGUuZG9tID0gZG9tOworICAgICAgICAgICAgaWYgKGlzU1ZHIHx8IChuZXh0
RmxhZ3MgJiAxMjggLyogU3ZnRWxlbWVudCAqLykpIHsKKyAgICAgICAgICAgICAgICBpc1NWRyA9
IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobGFzdENoaWxkcmVuICE9PSBu
ZXh0Q2hpbGRyZW4pIHsKKyAgICAgICAgICAgICAgICBwYXRjaENoaWxkcmVuKGxhc3RGbGFncywg
bmV4dEZsYWdzLCBsYXN0Q2hpbGRyZW4sIG5leHRDaGlsZHJlbiwgZG9tLCBsaWZlY3ljbGUsIGNv
bnRleHQsIGlzU1ZHLCBpc1JlY3ljbGluZyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoIShuZXh0RmxhZ3MgJiAyIC8qIEh0bWxFbGVtZW50ICovKSkgeworICAgICAgICAgICAgICAg
IHByb2Nlc3NFbGVtZW50KG5leHRGbGFncywgbmV4dFZOb2RlLCBkb20pOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKGxhc3RQcm9wcyAhPT0gbmV4dFByb3BzKSB7CisgICAgICAgICAg
ICAgICAgcGF0Y2hQcm9wcyhsYXN0UHJvcHMsIG5leHRQcm9wcywgZG9tLCBsaWZlY3ljbGUsIGNv
bnRleHQsIGlzU1ZHKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChsYXN0RXZlbnRz
ICE9PSBuZXh0RXZlbnRzKSB7CisgICAgICAgICAgICAgICAgcGF0Y2hFdmVudHMobGFzdEV2ZW50
cywgbmV4dEV2ZW50cywgZG9tLCBsaWZlY3ljbGUpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKG5leHRSZWYpIHsKKyAgICAgICAgICAgICAgICBpZiAobGFzdFJlZiAhPT0gbmV4dFJl
ZiB8fCBpc1JlY3ljbGluZykgeworICAgICAgICAgICAgICAgICAgICBtb3VudFJlZihkb20sIG5l
eHRSZWYsIGxpZmVjeWNsZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorICAgIGZ1bmN0aW9uIHBhdGNoQ2hpbGRyZW4obGFzdEZsYWdzLCBuZXh0
RmxhZ3MsIGxhc3RDaGlsZHJlbiwgbmV4dENoaWxkcmVuLCBkb20sIGxpZmVjeWNsZSwgY29udGV4
dCwgaXNTVkcsIGlzUmVjeWNsaW5nKSB7CisgICAgICAgIHZhciBwYXRjaEFycmF5ID0gZmFsc2U7
CisgICAgICAgIHZhciBwYXRjaEtleWVkID0gZmFsc2U7CisgICAgICAgIGlmIChuZXh0RmxhZ3Mg
JiA2NCAvKiBIYXNOb25LZXllZENoaWxkcmVuICovKSB7CisgICAgICAgICAgICBwYXRjaEFycmF5
ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgobGFzdEZsYWdzICYgMzIgLyog
SGFzS2V5ZWRDaGlsZHJlbiAqLykgJiYgKG5leHRGbGFncyAmIDMyIC8qIEhhc0tleWVkQ2hpbGRy
ZW4gKi8pKSB7CisgICAgICAgICAgICBwYXRjaEtleWVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHBh
dGNoQXJyYXkgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlzSW52YWxpZChu
ZXh0Q2hpbGRyZW4pKSB7CisgICAgICAgICAgICB1bm1vdW50Q2hpbGRyZW4obGFzdENoaWxkcmVu
LCBkb20sIGxpZmVjeWNsZSwgaXNSZWN5Y2xpbmcpOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
aWYgKGlzSW52YWxpZChsYXN0Q2hpbGRyZW4pKSB7CisgICAgICAgICAgICBpZiAoaXNTdHJpbmdP
ck51bWJlcihuZXh0Q2hpbGRyZW4pKSB7CisgICAgICAgICAgICAgICAgc2V0VGV4dENvbnRlbnQo
ZG9tLCBuZXh0Q2hpbGRyZW4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkobmV4dENoaWxkcmVuKSkgeworICAgICAgICAgICAg
ICAgICAgICBtb3VudEFycmF5Q2hpbGRyZW4obmV4dENoaWxkcmVuLCBkb20sIGxpZmVjeWNsZSwg
Y29udGV4dCwgaXNTVkcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgbW91bnQobmV4dENoaWxkcmVuLCBkb20sIGxpZmVjeWNs
ZSwgY29udGV4dCwgaXNTVkcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBlbHNlIGlmIChpc1N0cmluZ09yTnVtYmVyKG5leHRDaGlsZHJlbikp
IHsKKyAgICAgICAgICAgIGlmIChpc1N0cmluZ09yTnVtYmVyKGxhc3RDaGlsZHJlbikpIHsKKyAg
ICAgICAgICAgICAgICB1cGRhdGVUZXh0Q29udGVudChkb20sIG5leHRDaGlsZHJlbik7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB1bm1vdW50Q2hp
bGRyZW4obGFzdENoaWxkcmVuLCBkb20sIGxpZmVjeWNsZSwgaXNSZWN5Y2xpbmcpOworICAgICAg
ICAgICAgICAgIHNldFRleHRDb250ZW50KGRvbSwgbmV4dENoaWxkcmVuKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpc0FycmF5KG5leHRDaGlsZHJlbikpIHsK
KyAgICAgICAgICAgIGlmIChpc0FycmF5KGxhc3RDaGlsZHJlbikpIHsKKyAgICAgICAgICAgICAg
ICBwYXRjaEFycmF5ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAoaXNLZXllZChsYXN0Q2hp
bGRyZW4sIG5leHRDaGlsZHJlbikpIHsKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2hLZXllZCA9
IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgdW5tb3VudENoaWxkcmVuKGxhc3RDaGlsZHJlbiwgZG9tLCBs
aWZlY3ljbGUsIGlzUmVjeWNsaW5nKTsKKyAgICAgICAgICAgICAgICBtb3VudEFycmF5Q2hpbGRy
ZW4obmV4dENoaWxkcmVuLCBkb20sIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlzQXJyYXkobGFzdENoaWxkcmVu
KSkgeworICAgICAgICAgICAgcmVtb3ZlQWxsQ2hpbGRyZW4oZG9tLCBsYXN0Q2hpbGRyZW4sIGxp
ZmVjeWNsZSwgZmFsc2UsIGlzUmVjeWNsaW5nKTsKKyAgICAgICAgICAgIG1vdW50KG5leHRDaGls
ZHJlbiwgZG9tLCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHKTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIGlmIChpc1ZOb2RlKG5leHRDaGlsZHJlbikpIHsKKyAgICAgICAgICAgIGlmIChpc1ZO
b2RlKGxhc3RDaGlsZHJlbikpIHsKKyAgICAgICAgICAgICAgICBwYXRjaChsYXN0Q2hpbGRyZW4s
IG5leHRDaGlsZHJlbiwgZG9tLCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHLCBpc1JlY3ljbGlu
Zyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB1
bm1vdW50Q2hpbGRyZW4obGFzdENoaWxkcmVuLCBkb20sIGxpZmVjeWNsZSwgaXNSZWN5Y2xpbmcp
OworICAgICAgICAgICAgICAgIG1vdW50KG5leHRDaGlsZHJlbiwgZG9tLCBsaWZlY3ljbGUsIGNv
bnRleHQsIGlzU1ZHKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlm
IChpc1ZOb2RlKGxhc3RDaGlsZHJlbikpIHsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAg
ICAgICAgfQorICAgICAgICBpZiAocGF0Y2hBcnJheSkgeworICAgICAgICAgICAgaWYgKHBhdGNo
S2V5ZWQpIHsKKyAgICAgICAgICAgICAgICBwYXRjaEtleWVkQ2hpbGRyZW4obGFzdENoaWxkcmVu
LCBuZXh0Q2hpbGRyZW4sIGRvbSwgbGlmZWN5Y2xlLCBjb250ZXh0LCBpc1NWRywgaXNSZWN5Y2xp
bmcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
cGF0Y2hOb25LZXllZENoaWxkcmVuKGxhc3RDaGlsZHJlbiwgbmV4dENoaWxkcmVuLCBkb20sIGxp
ZmVjeWNsZSwgY29udGV4dCwgaXNTVkcsIGlzUmVjeWNsaW5nKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICBmdW5jdGlvbiBwYXRjaENvbXBvbmVudChsYXN0Vk5vZGUsIG5l
eHRWTm9kZSwgcGFyZW50RG9tLCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHLCBpc0NsYXNzLCBp
c1JlY3ljbGluZykgeworICAgICAgICB2YXIgbGFzdFR5cGUgPSBsYXN0Vk5vZGUudHlwZTsKKyAg
ICAgICAgdmFyIG5leHRUeXBlID0gbmV4dFZOb2RlLnR5cGU7CisgICAgICAgIHZhciBuZXh0UHJv
cHMgPSBuZXh0Vk5vZGUucHJvcHMgfHwgRU1QVFlfT0JKOworICAgICAgICB2YXIgbGFzdEtleSA9
IGxhc3RWTm9kZS5rZXk7CisgICAgICAgIHZhciBuZXh0S2V5ID0gbmV4dFZOb2RlLmtleTsKKyAg
ICAgICAgaWYgKGxhc3RUeXBlICE9PSBuZXh0VHlwZSkgeworICAgICAgICAgICAgaWYgKGlzQ2xh
c3MpIHsKKyAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld05vZGUobGFzdFZOb2RlLCBuZXh0
Vk5vZGUsIHBhcmVudERvbSwgbGlmZWN5Y2xlLCBjb250ZXh0LCBpc1NWRywgaXNSZWN5Y2xpbmcp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdmFy
IGxhc3RJbnB1dCA9IGxhc3RWTm9kZS5jaGlsZHJlbi5fbGFzdElucHV0IHx8IGxhc3RWTm9kZS5j
aGlsZHJlbjsKKyAgICAgICAgICAgICAgICB2YXIgbmV4dElucHV0ID0gY3JlYXRlU3RhdGVsZXNz
Q29tcG9uZW50SW5wdXQobmV4dFZOb2RlLCBuZXh0VHlwZSwgbmV4dFByb3BzLCBjb250ZXh0KTsK
KyAgICAgICAgICAgICAgICBwYXRjaChsYXN0SW5wdXQsIG5leHRJbnB1dCwgcGFyZW50RG9tLCBs
aWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHLCBpc1JlY3ljbGluZyk7CisgICAgICAgICAgICAgICAg
dmFyIGRvbSA9IG5leHRWTm9kZS5kb20gPSBuZXh0SW5wdXQuZG9tOworICAgICAgICAgICAgICAg
IG5leHRWTm9kZS5jaGlsZHJlbiA9IG5leHRJbnB1dDsKKyAgICAgICAgICAgICAgICBtb3VudFN0
YXRlbGVzc0NvbXBvbmVudENhbGxiYWNrcyhuZXh0Vk5vZGUucmVmLCBkb20sIGxpZmVjeWNsZSk7
CisgICAgICAgICAgICAgICAgdW5tb3VudChsYXN0Vk5vZGUsIG51bGwsIGxpZmVjeWNsZSwgZmFs
c2UsIHRydWUsIGlzUmVjeWNsaW5nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChpc0NsYXNzKSB7CisgICAgICAgICAgICAgICAgaWYg
KGxhc3RLZXkgIT09IG5leHRLZXkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhO
ZXdOb2RlKGxhc3RWTm9kZSwgbmV4dFZOb2RlLCBwYXJlbnREb20sIGxpZmVjeWNsZSwgY29udGV4
dCwgaXNTVkcsIGlzUmVjeWNsaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBsYXN0
Vk5vZGUuY2hpbGRyZW47CisgICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLl91bm1vdW50ZWQp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzTnVsbChwYXJlbnREb20pKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICByZXBsYWNlQ2hpbGQocGFyZW50RG9tLCBtb3VudENvbXBvbmVudChu
ZXh0Vk5vZGUsIG51bGwsIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcsIG5leHRWTm9kZS5mbGFn
cyAmIDQgLyogQ29tcG9uZW50Q2xhc3MgKi8pLCBsYXN0Vk5vZGUuZG9tKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBk
ZWZhdWx0UHJvcHMgPSBuZXh0VHlwZS5kZWZhdWx0UHJvcHM7CisgICAgICAgICAgICAgICAgICAg
IHZhciBsYXN0UHJvcHMgPSBpbnN0YW5jZS5wcm9wczsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGluc3RhbmNlLl9kZXZUb29sc1N0YXR1cy5jb25uZWN0ZWQgJiYgIWluc3RhbmNlLl9kZXZUb29s
c0lkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRJZE1hcC5zZXQoaW5zdGFu
Y2UuX2RldlRvb2xzSWQgPSBnZXRJbmNyZW1lbnRhbElkKCksIGluc3RhbmNlKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBsaWZlY3ljbGUuZmFzdFVubW91bnQg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChkZWZhdWx0UHJv
cHMpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb3B5UHJvcHNUbyhsYXN0UHJvcHMsIG5l
eHRQcm9wcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0Vk5vZGUucHJvcHMgPSBuZXh0
UHJvcHM7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdmFyIGxh
c3RTdGF0ZSA9IGluc3RhbmNlLnN0YXRlOworICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dFN0
YXRlID0gaW5zdGFuY2Uuc3RhdGU7CisgICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZENvbnRl
eHQgPSBpbnN0YW5jZS5nZXRDaGlsZENvbnRleHQoKTsKKyAgICAgICAgICAgICAgICAgICAgbmV4
dFZOb2RlLmNoaWxkcmVuID0gaW5zdGFuY2U7CisgICAgICAgICAgICAgICAgICAgIGluc3RhbmNl
Ll9pc1NWRyA9IGlzU1ZHOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWYo
Y2hpbGRDb250ZXh0KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRDb250ZXh0ID0g
T2JqZWN0LmFzc2lnbih7fSwgY29udGV4dCwgY2hpbGRDb250ZXh0KTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNoaWxkQ29udGV4dCA9IGNvbnRleHQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgdmFyIGxhc3RJbnB1dCQxID0gaW5zdGFuY2UuX2xhc3RJbnB1dDsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIG5leHRJbnB1dCQxID0gaW5zdGFuY2UuX3VwZGF0ZUNvbXBv
bmVudChsYXN0U3RhdGUsIG5leHRTdGF0ZSwgbGFzdFByb3BzLCBuZXh0UHJvcHMsIGNvbnRleHQs
IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGRpZFVwZGF0ZSA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgIGluc3RhbmNlLl9jaGlsZENvbnRleHQgPSBjaGlsZENvbnRleHQ7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChpc0ludmFsaWQobmV4dElucHV0JDEpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBuZXh0SW5wdXQkMSA9IGNyZWF0ZVZvaWRWTm9kZSgpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzQXJyYXkobmV4
dElucHV0JDEpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmFsc2UpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKCdhIHZhbGlkIEluZmVybm8gVk5vZGUg
KG9yIG51bGwpIG11c3QgYmUgcmV0dXJuZWQgZnJvbSBhIGNvbXBvbmVudCByZW5kZXIuIFlvdSBt
YXkgaGF2ZSByZXR1cm5lZCBhbiBhcnJheSBvciBhbiBpbnZhbGlkIG9iamVjdC4nKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Io
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChu
ZXh0SW5wdXQkMSA9PT0gTk9fT1ApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5leHRJbnB1
dCQxID0gbGFzdElucHV0JDE7CisgICAgICAgICAgICAgICAgICAgICAgICBkaWRVcGRhdGUgPSBm
YWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlm
IChpc09iamVjdChuZXh0SW5wdXQkMSkgJiYgbmV4dElucHV0JDEuZG9tKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBuZXh0SW5wdXQkMSA9IGNsb25lVk5vZGUobmV4dElucHV0JDEpOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0SW5wdXQkMS5m
bGFncyAmIDI4IC8qIENvbXBvbmVudCAqLykgeworICAgICAgICAgICAgICAgICAgICAgICAgbmV4
dElucHV0JDEucGFyZW50Vk5vZGUgPSBuZXh0Vk5vZGU7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobGFzdElucHV0JDEuZmxhZ3MgJiAyOCAvKiBD
b21wb25lbnQgKi8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RJbnB1dCQxLnBhcmVu
dFZOb2RlID0gbmV4dFZOb2RlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGluc3RhbmNlLl9sYXN0SW5wdXQgPSBuZXh0SW5wdXQkMTsKKyAgICAgICAgICAgICAg
ICAgICAgaW5zdGFuY2UuX3ZOb2RlID0gbmV4dFZOb2RlOworICAgICAgICAgICAgICAgICAgICBp
ZiAoZGlkVXBkYXRlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmFzdFVubW91bnQg
PSBsaWZlY3ljbGUuZmFzdFVubW91bnQ7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3Vi
TGlmZWN5Y2xlID0gaW5zdGFuY2UuX2xpZmVjeWNsZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGxpZmVjeWNsZS5mYXN0VW5tb3VudCA9IHN1YkxpZmVjeWNsZS5mYXN0VW5tb3VudDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHBhdGNoKGxhc3RJbnB1dCQxLCBuZXh0SW5wdXQkMSwgcGFyZW50
RG9tLCBsaWZlY3ljbGUsIGNoaWxkQ29udGV4dCwgaXNTVkcsIGlzUmVjeWNsaW5nKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHN1YkxpZmVjeWNsZS5mYXN0VW5tb3VudCA9IGxpZmVjeWNsZS51
bm1vdW50OworICAgICAgICAgICAgICAgICAgICAgICAgbGlmZWN5Y2xlLmZhc3RVbm1vdW50ID0g
ZmFzdFVubW91bnQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnRE
aWRVcGRhdGUobGFzdFByb3BzLCBsYXN0U3RhdGUpOworICAgICAgICAgICAgICAgICAgICAgICAg
ZmluZERPTU5vZGVFbmFibGVkICYmIGNvbXBvbmVudFRvRE9NTm9kZU1hcC5zZXQoaW5zdGFuY2Us
IG5leHRJbnB1dCQxLmRvbSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgbmV4dFZOb2RlLmRvbSA9IG5leHRJbnB1dCQxLmRvbTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIg
c2hvdWxkVXBkYXRlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB2YXIgbGFzdFByb3BzJDEgPSBs
YXN0Vk5vZGUucHJvcHM7CisgICAgICAgICAgICAgICAgdmFyIG5leHRIb29rcyA9IG5leHRWTm9k
ZS5yZWY7CisgICAgICAgICAgICAgICAgdmFyIG5leHRIb29rc0RlZmluZWQgPSAhaXNOdWxsT3JV
bmRlZihuZXh0SG9va3MpOworICAgICAgICAgICAgICAgIHZhciBsYXN0SW5wdXQkMiA9IGxhc3RW
Tm9kZS5jaGlsZHJlbjsKKyAgICAgICAgICAgICAgICB2YXIgbmV4dElucHV0JDIgPSBsYXN0SW5w
dXQkMjsKKyAgICAgICAgICAgICAgICBuZXh0Vk5vZGUuZG9tID0gbGFzdFZOb2RlLmRvbTsKKyAg
ICAgICAgICAgICAgICBuZXh0Vk5vZGUuY2hpbGRyZW4gPSBsYXN0SW5wdXQkMjsKKyAgICAgICAg
ICAgICAgICBpZiAobGFzdEtleSAhPT0gbmV4dEtleSkgeworICAgICAgICAgICAgICAgICAgICBz
aG91bGRVcGRhdGUgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRIb29rc0RlZmluZWQgJiYgIWlzTnVs
bE9yVW5kZWYobmV4dEhvb2tzLm9uQ29tcG9uZW50U2hvdWxkVXBkYXRlKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgc2hvdWxkVXBkYXRlID0gbmV4dEhvb2tzLm9uQ29tcG9uZW50U2hvdWxk
VXBkYXRlKGxhc3RQcm9wcyQxLCBuZXh0UHJvcHMpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChzaG91bGRVcGRhdGUgIT09IGZh
bHNlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0SG9va3NEZWZpbmVkICYmICFpc051
bGxPclVuZGVmKG5leHRIb29rcy5vbkNvbXBvbmVudFdpbGxVcGRhdGUpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBsaWZlY3ljbGUuZmFzdFVubW91bnQgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG5leHRIb29rcy5vbkNvbXBvbmVudFdpbGxVcGRhdGUobGFzdFByb3BzJDEs
IG5leHRQcm9wcyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
bmV4dElucHV0JDIgPSBuZXh0VHlwZShuZXh0UHJvcHMsIGNvbnRleHQpOworICAgICAgICAgICAg
ICAgICAgICBpZiAoaXNJbnZhbGlkKG5leHRJbnB1dCQyKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgbmV4dElucHV0JDIgPSBjcmVhdGVWb2lkVk5vZGUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpc0FycmF5KG5leHRJbnB1dCQyKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZhbHNlKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhyb3dFcnJvcignYSB2YWxpZCBJbmZlcm5vIFZOb2RlIChvciBudWxsKSBt
dXN0IGJlIHJldHVybmVkIGZyb20gYSBjb21wb25lbnQgcmVuZGVyLiBZb3UgbWF5IGhhdmUgcmV0
dXJuZWQgYW4gYXJyYXkgb3IgYW4gaW52YWxpZCBvYmplY3QuJyk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKCk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNPYmplY3QobmV4
dElucHV0JDIpICYmIG5leHRJbnB1dCQyLmRvbSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
bmV4dElucHV0JDIgPSBjbG9uZVZOb2RlKG5leHRJbnB1dCQyKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAobmV4dElucHV0JDIgIT09IE5PX09QKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBwYXRjaChsYXN0SW5wdXQkMiwgbmV4dElucHV0JDIsIHBh
cmVudERvbSwgbGlmZWN5Y2xlLCBjb250ZXh0LCBpc1NWRywgaXNSZWN5Y2xpbmcpOworICAgICAg
ICAgICAgICAgICAgICAgICAgbmV4dFZOb2RlLmNoaWxkcmVuID0gbmV4dElucHV0JDI7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAobmV4dEhvb2tzRGVmaW5lZCAmJiAhaXNOdWxsT3JVbmRl
ZihuZXh0SG9va3Mub25Db21wb25lbnREaWRVcGRhdGUpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGlmZWN5Y2xlLmZhc3RVbm1vdW50ID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbmV4dEhvb2tzLm9uQ29tcG9uZW50RGlkVXBkYXRlKGxhc3RQcm9wcyQxLCBu
ZXh0UHJvcHMpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgbmV4dFZOb2RlLmRvbSA9IG5leHRJbnB1dCQyLmRvbTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobmV4dElucHV0JDIu
ZmxhZ3MgJiAyOCAvKiBDb21wb25lbnQgKi8pIHsKKyAgICAgICAgICAgICAgICAgICAgbmV4dElu
cHV0JDIucGFyZW50Vk5vZGUgPSBuZXh0Vk5vZGU7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGxhc3RJbnB1dCQyLmZsYWdzICYgMjggLyogQ29tcG9uZW50ICov
KSB7CisgICAgICAgICAgICAgICAgICAgIGxhc3RJbnB1dCQyLnBhcmVudFZOb2RlID0gbmV4dFZO
b2RlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGZ1bmN0aW9uIHBhdGNoVGV4dChsYXN0Vk5vZGUs
IG5leHRWTm9kZSkgeworICAgICAgICB2YXIgbmV4dFRleHQgPSBuZXh0Vk5vZGUuY2hpbGRyZW47
CisgICAgICAgIHZhciBkb20gPSBsYXN0Vk5vZGUuZG9tOworICAgICAgICBuZXh0Vk5vZGUuZG9t
ID0gZG9tOworICAgICAgICBpZiAobGFzdFZOb2RlLmNoaWxkcmVuICE9PSBuZXh0VGV4dCkgewor
ICAgICAgICAgICAgZG9tLm5vZGVWYWx1ZSA9IG5leHRUZXh0OworICAgICAgICB9CisgICAgfQor
ICAgIGZ1bmN0aW9uIHBhdGNoVm9pZChsYXN0Vk5vZGUsIG5leHRWTm9kZSkgeworICAgICAgICBu
ZXh0Vk5vZGUuZG9tID0gbGFzdFZOb2RlLmRvbTsKKyAgICB9CisgICAgZnVuY3Rpb24gcGF0Y2hO
b25LZXllZENoaWxkcmVuKGxhc3RDaGlsZHJlbiwgbmV4dENoaWxkcmVuLCBkb20sIGxpZmVjeWNs
ZSwgY29udGV4dCwgaXNTVkcsIGlzUmVjeWNsaW5nKSB7CisgICAgICAgIHZhciBsYXN0Q2hpbGRy
ZW5MZW5ndGggPSBsYXN0Q2hpbGRyZW4ubGVuZ3RoOworICAgICAgICB2YXIgbmV4dENoaWxkcmVu
TGVuZ3RoID0gbmV4dENoaWxkcmVuLmxlbmd0aDsKKyAgICAgICAgdmFyIGNvbW1vbkxlbmd0aCA9
IGxhc3RDaGlsZHJlbkxlbmd0aCA+IG5leHRDaGlsZHJlbkxlbmd0aCA/IG5leHRDaGlsZHJlbkxl
bmd0aCA6IGxhc3RDaGlsZHJlbkxlbmd0aDsKKyAgICAgICAgdmFyIGk7CisgICAgICAgIHZhciBu
ZXh0Tm9kZSA9IG51bGw7CisgICAgICAgIHZhciBuZXdOb2RlOworICAgICAgICAvLyBMb29wIGJh
Y2t3YXJkcyBzbyB3ZSBjYW4gdXNlIGluc2VydEJlZm9yZQorICAgICAgICBpZiAobGFzdENoaWxk
cmVuTGVuZ3RoIDwgbmV4dENoaWxkcmVuTGVuZ3RoKSB7CisgICAgICAgICAgICBmb3IgKGkgPSBu
ZXh0Q2hpbGRyZW5MZW5ndGggLSAxOyBpID49IGNvbW1vbkxlbmd0aDsgaS0tKSB7CisgICAgICAg
ICAgICAgICAgdmFyIGNoaWxkID0gbmV4dENoaWxkcmVuW2ldOworICAgICAgICAgICAgICAgIGlm
ICghaXNJbnZhbGlkKGNoaWxkKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQuZG9t
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0Q2hpbGRyZW5baV0gPSBjaGlsZCA9IGNs
b25lVk5vZGUoY2hpbGQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIG5ld05vZGUgPSBtb3VudChjaGlsZCwgbnVsbCwgbGlmZWN5Y2xlLCBjb250ZXh0LCBpc1NW
Ryk7CisgICAgICAgICAgICAgICAgICAgIGluc2VydE9yQXBwZW5kKGRvbSwgbmV3Tm9kZSwgbmV4
dE5vZGUpOworICAgICAgICAgICAgICAgICAgICBuZXh0Tm9kZSA9IG5ld05vZGU7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKG5l
eHRDaGlsZHJlbkxlbmd0aCA9PT0gMCkgeworICAgICAgICAgICAgcmVtb3ZlQWxsQ2hpbGRyZW4o
ZG9tLCBsYXN0Q2hpbGRyZW4sIGxpZmVjeWNsZSwgZmFsc2UsIGlzUmVjeWNsaW5nKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlIGlmIChsYXN0Q2hpbGRyZW5MZW5ndGggPiBuZXh0Q2hpbGRyZW5M
ZW5ndGgpIHsKKyAgICAgICAgICAgIGZvciAoaSA9IGNvbW1vbkxlbmd0aDsgaSA8IGxhc3RDaGls
ZHJlbkxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgdmFyIGNoaWxkJDEgPSBsYXN0Q2hp
bGRyZW5baV07CisgICAgICAgICAgICAgICAgaWYgKCFpc0ludmFsaWQoY2hpbGQkMSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdW5tb3VudChsYXN0Q2hpbGRyZW5baV0sIGRvbSwgbGlmZWN5Y2xl
LCBmYWxzZSwgZmFsc2UsIGlzUmVjeWNsaW5nKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpID0gY29tbW9uTGVuZ3RoIC0gMTsgaSA+
PSAwOyBpLS0pIHsKKyAgICAgICAgICAgIHZhciBsYXN0Q2hpbGQgPSBsYXN0Q2hpbGRyZW5baV07
CisgICAgICAgICAgICB2YXIgbmV4dENoaWxkID0gbmV4dENoaWxkcmVuW2ldOworICAgICAgICAg
ICAgaWYgKGlzSW52YWxpZChuZXh0Q2hpbGQpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpc0lu
dmFsaWQobGFzdENoaWxkKSkgeworICAgICAgICAgICAgICAgICAgICB1bm1vdW50KGxhc3RDaGls
ZCwgZG9tLCBsaWZlY3ljbGUsIHRydWUsIGZhbHNlLCBpc1JlY3ljbGluZyk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgaWYgKG5leHRDaGlsZC5kb20pIHsKKyAgICAgICAgICAgICAgICAgICAgbmV4dENoaWxkcmVu
W2ldID0gbmV4dENoaWxkID0gY2xvbmVWTm9kZShuZXh0Q2hpbGQpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBpZiAoaXNJbnZhbGlkKGxhc3RDaGlsZCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgbmV3Tm9kZSA9IG1vdW50KG5leHRDaGlsZCwgbnVsbCwgbGlmZWN5Y2xlLCBj
b250ZXh0LCBpc1NWRyk7CisgICAgICAgICAgICAgICAgICAgIGluc2VydE9yQXBwZW5kKGRvbSwg
bmV3Tm9kZSwgbmV4dE5vZGUpOworICAgICAgICAgICAgICAgICAgICBuZXh0Tm9kZSA9IG5ld05v
ZGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBwYXRjaChsYXN0Q2hpbGQsIG5leHRDaGlsZCwgZG9tLCBsaWZlY3ljbGUsIGNv
bnRleHQsIGlzU1ZHLCBpc1JlY3ljbGluZyk7CisgICAgICAgICAgICAgICAgICAgIG5leHROb2Rl
ID0gbmV4dENoaWxkLmRvbTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgZnVuY3Rpb24gcGF0Y2hLZXllZENoaWxkcmVuKGEsIGIsIGRvbSwg
bGlmZWN5Y2xlLCBjb250ZXh0LCBpc1NWRywgaXNSZWN5Y2xpbmcpIHsKKyAgICAgICAgdmFyIGFM
ZW5ndGggPSBhLmxlbmd0aDsKKyAgICAgICAgdmFyIGJMZW5ndGggPSBiLmxlbmd0aDsKKyAgICAg
ICAgdmFyIGFFbmQgPSBhTGVuZ3RoIC0gMTsKKyAgICAgICAgdmFyIGJFbmQgPSBiTGVuZ3RoIC0g
MTsKKyAgICAgICAgdmFyIGFTdGFydCA9IDA7CisgICAgICAgIHZhciBiU3RhcnQgPSAwOworICAg
ICAgICB2YXIgaTsKKyAgICAgICAgdmFyIGo7CisgICAgICAgIHZhciBhTm9kZTsKKyAgICAgICAg
dmFyIGJOb2RlOworICAgICAgICB2YXIgbmV4dE5vZGU7CisgICAgICAgIHZhciBuZXh0UG9zOwor
ICAgICAgICB2YXIgbm9kZTsKKyAgICAgICAgaWYgKGFMZW5ndGggPT09IDApIHsKKyAgICAgICAg
ICAgIGlmIChiTGVuZ3RoICE9PSAwKSB7CisgICAgICAgICAgICAgICAgbW91bnRBcnJheUNoaWxk
cmVuKGIsIGRvbSwgbGlmZWN5Y2xlLCBjb250ZXh0LCBpc1NWRyk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYkxlbmd0aCA9
PT0gMCkgeworICAgICAgICAgICAgcmVtb3ZlQWxsQ2hpbGRyZW4oZG9tLCBhLCBsaWZlY3ljbGUs
IGZhbHNlLCBpc1JlY3ljbGluZyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgdmFyIGFTdGFydE5vZGUgPSBhW2FTdGFydF07CisgICAgICAgIHZhciBiU3RhcnROb2Rl
ID0gYltiU3RhcnRdOworICAgICAgICB2YXIgYUVuZE5vZGUgPSBhW2FFbmRdOworICAgICAgICB2
YXIgYkVuZE5vZGUgPSBiW2JFbmRdOworICAgICAgICBpZiAoYlN0YXJ0Tm9kZS5kb20pIHsKKyAg
ICAgICAgICAgIGJbYlN0YXJ0XSA9IGJTdGFydE5vZGUgPSBjbG9uZVZOb2RlKGJTdGFydE5vZGUp
OworICAgICAgICB9CisgICAgICAgIGlmIChiRW5kTm9kZS5kb20pIHsKKyAgICAgICAgICAgIGJb
YkVuZF0gPSBiRW5kTm9kZSA9IGNsb25lVk5vZGUoYkVuZE5vZGUpOworICAgICAgICB9CisgICAg
ICAgIC8vIFN0ZXAgMQorICAgICAgICAvKiBlc2xpbnQgbm8tY29uc3RhbnQtY29uZGl0aW9uOiAw
ICovCisgICAgICAgIG91dGVyOiB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgLy8gU3luYyBu
b2RlcyB3aXRoIHRoZSBzYW1lIGtleSBhdCB0aGUgYmVnaW5uaW5nLgorICAgICAgICAgICAgd2hp
bGUgKGFTdGFydE5vZGUua2V5ID09PSBiU3RhcnROb2RlLmtleSkgeworICAgICAgICAgICAgICAg
IHBhdGNoKGFTdGFydE5vZGUsIGJTdGFydE5vZGUsIGRvbSwgbGlmZWN5Y2xlLCBjb250ZXh0LCBp
c1NWRywgaXNSZWN5Y2xpbmcpOworICAgICAgICAgICAgICAgIGFTdGFydCsrOworICAgICAgICAg
ICAgICAgIGJTdGFydCsrOworICAgICAgICAgICAgICAgIGlmIChhU3RhcnQgPiBhRW5kIHx8IGJT
dGFydCA+IGJFbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsgb3V0ZXI7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGFTdGFydE5vZGUgPSBhW2FTdGFydF07CisgICAg
ICAgICAgICAgICAgYlN0YXJ0Tm9kZSA9IGJbYlN0YXJ0XTsKKyAgICAgICAgICAgICAgICBpZiAo
YlN0YXJ0Tm9kZS5kb20pIHsKKyAgICAgICAgICAgICAgICAgICAgYltiU3RhcnRdID0gYlN0YXJ0
Tm9kZSA9IGNsb25lVk5vZGUoYlN0YXJ0Tm9kZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgLy8gU3luYyBub2RlcyB3aXRoIHRoZSBzYW1lIGtleSBhdCB0
aGUgZW5kLgorICAgICAgICAgICAgd2hpbGUgKGFFbmROb2RlLmtleSA9PT0gYkVuZE5vZGUua2V5
KSB7CisgICAgICAgICAgICAgICAgcGF0Y2goYUVuZE5vZGUsIGJFbmROb2RlLCBkb20sIGxpZmVj
eWNsZSwgY29udGV4dCwgaXNTVkcsIGlzUmVjeWNsaW5nKTsKKyAgICAgICAgICAgICAgICBhRW5k
LS07CisgICAgICAgICAgICAgICAgYkVuZC0tOworICAgICAgICAgICAgICAgIGlmIChhU3RhcnQg
PiBhRW5kIHx8IGJTdGFydCA+IGJFbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsgb3V0
ZXI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGFFbmROb2RlID0gYVthRW5k
XTsKKyAgICAgICAgICAgICAgICBiRW5kTm9kZSA9IGJbYkVuZF07CisgICAgICAgICAgICAgICAg
aWYgKGJFbmROb2RlLmRvbSkgeworICAgICAgICAgICAgICAgICAgICBiW2JFbmRdID0gYkVuZE5v
ZGUgPSBjbG9uZVZOb2RlKGJFbmROb2RlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAvLyBNb3ZlIGFuZCBzeW5jIG5vZGVzIGZyb20gcmlnaHQgdG8gbGVm
dC4KKyAgICAgICAgICAgIGlmIChhRW5kTm9kZS5rZXkgPT09IGJTdGFydE5vZGUua2V5KSB7Cisg
ICAgICAgICAgICAgICAgcGF0Y2goYUVuZE5vZGUsIGJTdGFydE5vZGUsIGRvbSwgbGlmZWN5Y2xl
LCBjb250ZXh0LCBpc1NWRywgaXNSZWN5Y2xpbmcpOworICAgICAgICAgICAgICAgIGluc2VydE9y
QXBwZW5kKGRvbSwgYlN0YXJ0Tm9kZS5kb20sIGFTdGFydE5vZGUuZG9tKTsKKyAgICAgICAgICAg
ICAgICBhRW5kLS07CisgICAgICAgICAgICAgICAgYlN0YXJ0Kys7CisgICAgICAgICAgICAgICAg
YUVuZE5vZGUgPSBhW2FFbmRdOworICAgICAgICAgICAgICAgIGJTdGFydE5vZGUgPSBiW2JTdGFy
dF07CisgICAgICAgICAgICAgICAgaWYgKGJTdGFydE5vZGUuZG9tKSB7CisgICAgICAgICAgICAg
ICAgICAgIGJbYlN0YXJ0XSA9IGJTdGFydE5vZGUgPSBjbG9uZVZOb2RlKGJTdGFydE5vZGUpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIC8vIE1vdmUgYW5kIHN5bmMgbm9kZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0
LgorICAgICAgICAgICAgaWYgKGFTdGFydE5vZGUua2V5ID09PSBiRW5kTm9kZS5rZXkpIHsKKyAg
ICAgICAgICAgICAgICBwYXRjaChhU3RhcnROb2RlLCBiRW5kTm9kZSwgZG9tLCBsaWZlY3ljbGUs
IGNvbnRleHQsIGlzU1ZHLCBpc1JlY3ljbGluZyk7CisgICAgICAgICAgICAgICAgbmV4dFBvcyA9
IGJFbmQgKyAxOworICAgICAgICAgICAgICAgIG5leHROb2RlID0gbmV4dFBvcyA8IGIubGVuZ3Ro
ID8gYltuZXh0UG9zXS5kb20gOiBudWxsOworICAgICAgICAgICAgICAgIGluc2VydE9yQXBwZW5k
KGRvbSwgYkVuZE5vZGUuZG9tLCBuZXh0Tm9kZSk7CisgICAgICAgICAgICAgICAgYVN0YXJ0Kys7
CisgICAgICAgICAgICAgICAgYkVuZC0tOworICAgICAgICAgICAgICAgIGFTdGFydE5vZGUgPSBh
W2FTdGFydF07CisgICAgICAgICAgICAgICAgYkVuZE5vZGUgPSBiW2JFbmRdOworICAgICAgICAg
ICAgICAgIGlmIChiRW5kTm9kZS5kb20pIHsKKyAgICAgICAgICAgICAgICAgICAgYltiRW5kXSA9
IGJFbmROb2RlID0gY2xvbmVWTm9kZShiRW5kTm9kZSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFTdGFydCA+IGFFbmQpIHsKKyAgICAgICAgICAgIGlm
IChiU3RhcnQgPD0gYkVuZCkgeworICAgICAgICAgICAgICAgIG5leHRQb3MgPSBiRW5kICsgMTsK
KyAgICAgICAgICAgICAgICBuZXh0Tm9kZSA9IG5leHRQb3MgPCBiLmxlbmd0aCA/IGJbbmV4dFBv
c10uZG9tIDogbnVsbDsKKyAgICAgICAgICAgICAgICB3aGlsZSAoYlN0YXJ0IDw9IGJFbmQpIHsK
KyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGJbYlN0YXJ0XTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG5vZGUuZG9tKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBiW2JTdGFydF0gPSBu
b2RlID0gY2xvbmVWTm9kZShub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBiU3RhcnQrKzsKKyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0T3JBcHBlbmQo
ZG9tLCBtb3VudChub2RlLCBudWxsLCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHKSwgbmV4dE5v
ZGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBlbHNlIGlmIChiU3RhcnQgPiBiRW5kKSB7CisgICAgICAgICAgICB3aGlsZSAoYVN0YXJ0IDw9
IGFFbmQpIHsKKyAgICAgICAgICAgICAgICB1bm1vdW50KGFbYVN0YXJ0KytdLCBkb20sIGxpZmVj
eWNsZSwgZmFsc2UsIGZhbHNlLCBpc1JlY3ljbGluZyk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhTGVuZ3RoID0gYUVuZCAtIGFTdGFydCAr
IDE7CisgICAgICAgICAgICBiTGVuZ3RoID0gYkVuZCAtIGJTdGFydCArIDE7CisgICAgICAgICAg
ICB2YXIgYU51bGxhYmxlID0gYTsKKyAgICAgICAgICAgIHZhciBzb3VyY2VzID0gbmV3IEFycmF5
KGJMZW5ndGgpOworICAgICAgICAgICAgLy8gTWFyayBhbGwgbm9kZXMgYXMgaW5zZXJ0ZWQuCisg
ICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYkxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAg
ICAgc291cmNlc1tpXSA9IC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIG1vdmVk
ID0gZmFsc2U7CisgICAgICAgICAgICB2YXIgcG9zID0gMDsKKyAgICAgICAgICAgIHZhciBwYXRj
aGVkID0gMDsKKyAgICAgICAgICAgIGlmICgoYkxlbmd0aCA8PSA0KSB8fCAoYUxlbmd0aCAqIGJM
ZW5ndGggPD0gMTYpKSB7CisgICAgICAgICAgICAgICAgZm9yIChpID0gYVN0YXJ0OyBpIDw9IGFF
bmQ7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBhTm9kZSA9IGFbaV07CisgICAgICAgICAg
ICAgICAgICAgIGlmIChwYXRjaGVkIDwgYkxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yIChqID0gYlN0YXJ0OyBqIDw9IGJFbmQ7IGorKykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJOb2RlID0gYltqXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
YU5vZGUua2V5ID09PSBiTm9kZS5rZXkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc291cmNlc1tqIC0gYlN0YXJ0XSA9IGk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChwb3MgPiBqKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
b3ZlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwb3MgPSBqOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiTm9kZS5kb20pIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJbal0gPSBiTm9kZSA9IGNsb25lVk5vZGUoYk5v
ZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhdGNoKGFOb2RlLCBiTm9kZSwgZG9tLCBsaWZlY3ljbGUsIGNvbnRl
eHQsIGlzU1ZHLCBpc1JlY3ljbGluZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBhdGNoZWQrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYU51bGxhYmxlW2ld
ID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIGtleUluZGV4ID0gbmV3IE1hcCgpOwor
ICAgICAgICAgICAgICAgIGZvciAoaSA9IGJTdGFydDsgaSA8PSBiRW5kOyBpKyspIHsKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZSA9IGJbaV07CisgICAgICAgICAgICAgICAgICAgIGtleUluZGV4
LnNldChub2RlLmtleSwgaSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZv
ciAoaSA9IGFTdGFydDsgaSA8PSBhRW5kOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYU5v
ZGUgPSBhW2ldOworICAgICAgICAgICAgICAgICAgICBpZiAocGF0Y2hlZCA8IGJMZW5ndGgpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGogPSBrZXlJbmRleC5nZXQoYU5vZGUua2V5KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQoaikpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBiTm9kZSA9IGJbal07CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc291cmNlc1tqIC0gYlN0YXJ0XSA9IGk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHBvcyA+IGopIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92ZWQgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zID0gajsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGJOb2RlLmRvbSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiW2pd
ID0gYk5vZGUgPSBjbG9uZVZOb2RlKGJOb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2goYU5vZGUsIGJOb2RlLCBkb20s
IGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcsIGlzUmVjeWNsaW5nKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYXRjaGVkKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYU51
bGxhYmxlW2ldID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChhTGVuZ3RoID09PSBhLmxlbmd0aCAmJiBwYXRjaGVkID09PSAwKSB7CisgICAgICAgICAg
ICAgICAgcmVtb3ZlQWxsQ2hpbGRyZW4oZG9tLCBhLCBsaWZlY3ljbGUsIGZhbHNlLCBpc1JlY3lj
bGluZyk7CisgICAgICAgICAgICAgICAgd2hpbGUgKGJTdGFydCA8IGJMZW5ndGgpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZSA9IGJbYlN0YXJ0XTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KG5vZGUuZG9tKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBiW2JTdGFydF0gPSBub2RlID0g
Y2xvbmVWTm9kZShub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBiU3RhcnQrKzsKKyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0T3JBcHBlbmQoZG9tLCBt
b3VudChub2RlLCBudWxsLCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHKSwgbnVsbCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgaSA9IGFMZW5ndGggLSBwYXRjaGVkOworICAgICAgICAgICAgICAgIHdoaWxlIChp
ID4gMCkgeworICAgICAgICAgICAgICAgICAgICBhTm9kZSA9IGFOdWxsYWJsZVthU3RhcnQrK107
CisgICAgICAgICAgICAgICAgICAgIGlmICghaXNOdWxsKGFOb2RlKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgdW5tb3VudChhTm9kZSwgZG9tLCBsaWZlY3ljbGUsIGZhbHNlLCBmYWxzZSwg
aXNSZWN5Y2xpbmcpOworICAgICAgICAgICAgICAgICAgICAgICAgaS0tOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChtb3ZlZCkg
eworICAgICAgICAgICAgICAgICAgICB2YXIgc2VxID0gbGlzX2FsZ29yaXRobShzb3VyY2VzKTsK
KyAgICAgICAgICAgICAgICAgICAgaiA9IHNlcS5sZW5ndGggLSAxOworICAgICAgICAgICAgICAg
ICAgICBmb3IgKGkgPSBiTGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChzb3VyY2VzW2ldID09PSAtMSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBvcyA9IGkgKyBiU3RhcnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZSA9IGJbcG9zXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5kb20pIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYltwb3NdID0gbm9kZSA9IGNsb25lVk5v
ZGUobm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5leHRQb3MgPSBwb3MgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5leHROb2RlID0gbmV4dFBvcyA8IGIubGVuZ3RoID8gYltuZXh0UG9zXS5kb20gOiBudWxs
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydE9yQXBwZW5kKGRvbSwgbW91bnQo
bm9kZSwgZG9tLCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHKSwgbmV4dE5vZGUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGogPCAwIHx8IGkgIT09IHNlcVtqXSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSBpICsgYlN0YXJ0OworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gYltwb3NdOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuZXh0UG9zID0gcG9zICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmV4dE5vZGUgPSBuZXh0UG9zIDwgYi5sZW5ndGggPyBiW25leHRQb3NdLmRvbSA6
IG51bGw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydE9yQXBwZW5kKGRv
bSwgbm9kZS5kb20sIG5leHROb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGotLTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAocGF0Y2hlZCAhPT0gYkxlbmd0aCkgeworICAgICAg
ICAgICAgICAgICAgICBmb3IgKGkgPSBiTGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2VzW2ldID09PSAtMSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBvcyA9IGkgKyBiU3RhcnQ7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZSA9IGJbcG9zXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9k
ZS5kb20pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYltwb3NdID0gbm9kZSA9
IGNsb25lVk5vZGUobm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5leHRQb3MgPSBwb3MgKyAxOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5leHROb2RlID0gbmV4dFBvcyA8IGIubGVuZ3RoID8gYltuZXh0UG9zXS5k
b20gOiBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydE9yQXBwZW5kKGRv
bSwgbW91bnQobm9kZSwgbnVsbCwgbGlmZWN5Y2xlLCBjb250ZXh0LCBpc1NWRyksIG5leHROb2Rl
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAvLyAv
LyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Mb25nZXN0X2luY3JlYXNpbmdfc3Vic2Vx
dWVuY2UKKyAgICBmdW5jdGlvbiBsaXNfYWxnb3JpdGhtKGEpIHsKKyAgICAgICAgdmFyIHAgPSBh
LnNsaWNlKDApOworICAgICAgICB2YXIgcmVzdWx0ID0gW107CisgICAgICAgIHJlc3VsdC5wdXNo
KDApOworICAgICAgICB2YXIgaTsKKyAgICAgICAgdmFyIGo7CisgICAgICAgIHZhciB1OworICAg
ICAgICB2YXIgdjsKKyAgICAgICAgdmFyIGM7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhLmxl
bmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoYVtpXSA9PT0gLTEpIHsKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGogPSByZXN1bHRbcmVz
dWx0Lmxlbmd0aCAtIDFdOworICAgICAgICAgICAgaWYgKGFbal0gPCBhW2ldKSB7CisgICAgICAg
ICAgICAgICAgcFtpXSA9IGo7CisgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goaSk7CisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB1ID0gMDsK
KyAgICAgICAgICAgIHYgPSByZXN1bHQubGVuZ3RoIC0gMTsKKyAgICAgICAgICAgIHdoaWxlICh1
IDwgdikgeworICAgICAgICAgICAgICAgIGMgPSAoKHUgKyB2KSAvIDIpIHwgMDsKKyAgICAgICAg
ICAgICAgICBpZiAoYVtyZXN1bHRbY11dIDwgYVtpXSkgeworICAgICAgICAgICAgICAgICAgICB1
ID0gYyArIDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICB2ID0gYzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoYVtpXSA8IGFbcmVzdWx0W3VdXSkgeworICAgICAgICAgICAgICAg
IGlmICh1ID4gMCkgeworICAgICAgICAgICAgICAgICAgICBwW2ldID0gcmVzdWx0W3UgLSAxXTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmVzdWx0W3VdID0gaTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB1ID0gcmVzdWx0Lmxlbmd0aDsKKyAgICAgICAg
diA9IHJlc3VsdFt1IC0gMV07CisgICAgICAgIHdoaWxlICh1LS0gPiAwKSB7CisgICAgICAgICAg
ICByZXN1bHRbdV0gPSB2OworICAgICAgICAgICAgdiA9IHBbdl07CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgZnVuY3Rpb24gcGF0Y2hQcm9wKHByb3AsIGxh
c3RWYWx1ZSwgbmV4dFZhbHVlLCBkb20sIGlzU1ZHLCBsaWZlY3ljbGUpIHsKKyAgICAgICAgaWYg
KHNraXBQcm9wc1twcm9wXSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIGlmIChib29sZWFuUHJvcHNbcHJvcF0pIHsKKyAgICAgICAgICAgIGRvbVtwcm9wXSA9IG5l
eHRWYWx1ZSA/IHRydWUgOiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdHJp
Y3RQcm9wc1twcm9wXSkgeworICAgICAgICAgICAgdmFyIHZhbHVlID0gaXNOdWxsT3JVbmRlZihu
ZXh0VmFsdWUpID8gJycgOiBuZXh0VmFsdWU7CisgICAgICAgICAgICBpZiAoZG9tW3Byb3BdICE9
PSB2YWx1ZSkgeworICAgICAgICAgICAgICAgIGRvbVtwcm9wXSA9IHZhbHVlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlzQXR0ckFuRXZlbnQocHJvcCkpIHsK
KyAgICAgICAgICAgIHBhdGNoRXZlbnQocHJvcCwgbGFzdFZhbHVlLCBuZXh0VmFsdWUsIGRvbSwg
bGlmZWN5Y2xlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChsYXN0VmFsdWUgIT09IG5l
eHRWYWx1ZSkgeworICAgICAgICAgICAgaWYgKGlzTnVsbE9yVW5kZWYobmV4dFZhbHVlKSkgewor
ICAgICAgICAgICAgICAgIGRvbS5yZW1vdmVBdHRyaWJ1dGUocHJvcCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIGlmIChwcm9wID09PSAnY2xhc3NOYW1lJykgeworICAgICAgICAg
ICAgICAgIGlmIChpc1NWRykgeworICAgICAgICAgICAgICAgICAgICBkb20uc2V0QXR0cmlidXRl
KCdjbGFzcycsIG5leHRWYWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBkb20uY2xhc3NOYW1lID0gbmV4dFZhbHVlOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHBy
b3AgPT09ICdzdHlsZScpIHsKKyAgICAgICAgICAgICAgICBwYXRjaFN0eWxlKGxhc3RWYWx1ZSwg
bmV4dFZhbHVlLCBkb20pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAocHJv
cCA9PT0gJ2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MJykgeworICAgICAgICAgICAgICAgIHZhciBs
YXN0SHRtbCA9IGxhc3RWYWx1ZSAmJiBsYXN0VmFsdWUuX19odG1sOworICAgICAgICAgICAgICAg
IHZhciBuZXh0SHRtbCA9IG5leHRWYWx1ZSAmJiBuZXh0VmFsdWUuX19odG1sOworICAgICAgICAg
ICAgICAgIGlmIChsYXN0SHRtbCAhPT0gbmV4dEh0bWwpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFpc051bGxPclVuZGVmKG5leHRIdG1sKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ZG9tLmlubmVySFRNTCA9IG5leHRIdG1sOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAocHJvcCAhPT0g
J2NoaWxkcmVuVHlwZScgJiYgcHJvcCAhPT0gJ3JlZicgJiYgcHJvcCAhPT0gJ2tleScpIHsKKyAg
ICAgICAgICAgICAgICB2YXIgZGVoeXBoZW5Qcm9wID0gZGVoeXBoZW5Qcm9wc1twcm9wXTsKKyAg
ICAgICAgICAgICAgICB2YXIgbnMgPSBuYW1lc3BhY2VzW3Byb3BdOworICAgICAgICAgICAgICAg
IGlmIChucykgeworICAgICAgICAgICAgICAgICAgICBkb20uc2V0QXR0cmlidXRlTlMobnMsIGRl
aHlwaGVuUHJvcCB8fCBwcm9wLCBuZXh0VmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZG9tLnNldEF0dHJpYnV0ZShk
ZWh5cGhlblByb3AgfHwgcHJvcCwgbmV4dFZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZnVuY3Rpb24gcGF0Y2hFdmVudHMobGFz
dEV2ZW50cywgbmV4dEV2ZW50cywgZG9tLCBsaWZlY3ljbGUpIHsKKyAgICAgICAgbGFzdEV2ZW50
cyA9IGxhc3RFdmVudHMgfHwgRU1QVFlfT0JKOworICAgICAgICBuZXh0RXZlbnRzID0gbmV4dEV2
ZW50cyB8fCBFTVBUWV9PQko7CisgICAgICAgIGlmIChuZXh0RXZlbnRzICE9PSBFTVBUWV9PQkop
IHsKKyAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gbmV4dEV2ZW50cykgeworICAgICAgICAg
ICAgICAgIC8vIGRvIG5vdCBhZGQgYSBoYXNPd25Qcm9wZXJ0eSBjaGVjayBoZXJlLCBpdCBhZmZl
Y3RzIHBlcmZvcm1hbmNlCisgICAgICAgICAgICAgICAgcGF0Y2hFdmVudChuYW1lLCBsYXN0RXZl
bnRzW25hbWVdLCBuZXh0RXZlbnRzW25hbWVdLCBkb20sIGxpZmVjeWNsZSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxhc3RFdmVudHMgIT09IEVNUFRZX09CSikgewor
ICAgICAgICAgICAgZm9yICh2YXIgbmFtZSQxIGluIGxhc3RFdmVudHMpIHsKKyAgICAgICAgICAg
ICAgICAvLyBkbyBub3QgYWRkIGEgaGFzT3duUHJvcGVydHkgY2hlY2sgaGVyZSwgaXQgYWZmZWN0
cyBwZXJmb3JtYW5jZQorICAgICAgICAgICAgICAgIGlmIChpc051bGxPclVuZGVmKG5leHRFdmVu
dHNbbmFtZSQxXSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2hFdmVudChuYW1lJDEsIGxh
c3RFdmVudHNbbmFtZSQxXSwgbnVsbCwgZG9tLCBsaWZlY3ljbGUpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBmdW5jdGlvbiBwYXRjaEV2
ZW50KG5hbWUsIGxhc3RWYWx1ZSwgbmV4dFZhbHVlLCBkb20sIGxpZmVjeWNsZSkgeworICAgICAg
ICBpZiAobGFzdFZhbHVlICE9PSBuZXh0VmFsdWUpIHsKKyAgICAgICAgICAgIHZhciBuYW1lTG93
ZXJDYXNlID0gbmFtZS50b0xvd2VyQ2FzZSgpOworICAgICAgICAgICAgdmFyIGRvbUV2ZW50ID0g
ZG9tW25hbWVMb3dlckNhc2VdOworICAgICAgICAgICAgLy8gaWYgdGhlIGZ1bmN0aW9uIGlzIHdy
YXBwZWQsIHRoYXQgbWVhbnMgaXQncyBiZWVuIGNvbnRyb2xsZWQgYnkgYSB3cmFwcGVyCisgICAg
ICAgICAgICBpZiAoZG9tRXZlbnQgJiYgZG9tRXZlbnQud3JhcHBlZCkgeworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkZWxlZ2F0ZWRQcm9w
c1tuYW1lXSkgeworICAgICAgICAgICAgICAgIGxpZmVjeWNsZS5mYXN0VW5tb3VudCA9IGZhbHNl
OworICAgICAgICAgICAgICAgIGhhbmRsZUV2ZW50KG5hbWUsIGxhc3RWYWx1ZSwgbmV4dFZhbHVl
LCBkb20pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgZG9tW25hbWVMb3dlckNhc2VdID0gbmV4dFZhbHVlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIGZ1bmN0aW9uIHBhdGNoUHJvcHMobGFzdFByb3BzLCBuZXh0UHJvcHMs
IGRvbSwgbGlmZWN5Y2xlLCBjb250ZXh0LCBpc1NWRykgeworICAgICAgICBsYXN0UHJvcHMgPSBs
YXN0UHJvcHMgfHwgRU1QVFlfT0JKOworICAgICAgICBuZXh0UHJvcHMgPSBuZXh0UHJvcHMgfHwg
RU1QVFlfT0JKOworICAgICAgICBpZiAobmV4dFByb3BzICE9PSBFTVBUWV9PQkopIHsKKyAgICAg
ICAgICAgIGZvciAodmFyIHByb3AgaW4gbmV4dFByb3BzKSB7CisgICAgICAgICAgICAgICAgLy8g
ZG8gbm90IGFkZCBhIGhhc093blByb3BlcnR5IGNoZWNrIGhlcmUsIGl0IGFmZmVjdHMgcGVyZm9y
bWFuY2UKKyAgICAgICAgICAgICAgICB2YXIgbmV4dFZhbHVlID0gbmV4dFByb3BzW3Byb3BdOwor
ICAgICAgICAgICAgICAgIHZhciBsYXN0VmFsdWUgPSBsYXN0UHJvcHNbcHJvcF07CisgICAgICAg
ICAgICAgICAgaWYgKGlzTnVsbE9yVW5kZWYobmV4dFZhbHVlKSkgeworICAgICAgICAgICAgICAg
ICAgICByZW1vdmVQcm9wKHByb3AsIGRvbSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwYXRjaFByb3AocHJvcCwgbGFzdFZh
bHVlLCBuZXh0VmFsdWUsIGRvbSwgaXNTVkcsIGxpZmVjeWNsZSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChsYXN0UHJvcHMgIT09IEVN
UFRZX09CSikgeworICAgICAgICAgICAgZm9yICh2YXIgcHJvcCQxIGluIGxhc3RQcm9wcykgewor
ICAgICAgICAgICAgICAgIC8vIGRvIG5vdCBhZGQgYSBoYXNPd25Qcm9wZXJ0eSBjaGVjayBoZXJl
LCBpdCBhZmZlY3RzIHBlcmZvcm1hbmNlCisgICAgICAgICAgICAgICAgaWYgKGlzTnVsbE9yVW5k
ZWYobmV4dFByb3BzW3Byb3AkMV0pKSB7CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZVByb3Ao
cHJvcCQxLCBkb20pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKyAgICAvLyBXZSBhcmUgYXNzdW1pbmcgaGVyZSB0aGF0IHdlIGNvbWUgZnJvbSBw
YXRjaFByb3Agcm91dGluZQorICAgIC8vIC1uZXh0QXR0clZhbHVlIGNhbm5vdCBiZSBudWxsIG9y
IHVuZGVmaW5lZAorICAgIGZ1bmN0aW9uIHBhdGNoU3R5bGUobGFzdEF0dHJWYWx1ZSwgbmV4dEF0
dHJWYWx1ZSwgZG9tKSB7CisgICAgICAgIGlmIChpc1N0cmluZyhuZXh0QXR0clZhbHVlKSkgewor
ICAgICAgICAgICAgZG9tLnN0eWxlLmNzc1RleHQgPSBuZXh0QXR0clZhbHVlOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGZvciAodmFyIHN0eWxlIGluIG5leHRBdHRy
VmFsdWUpIHsKKyAgICAgICAgICAgIC8vIGRvIG5vdCBhZGQgYSBoYXNPd25Qcm9wZXJ0eSBjaGVj
ayBoZXJlLCBpdCBhZmZlY3RzIHBlcmZvcm1hbmNlCisgICAgICAgICAgICB2YXIgdmFsdWUgPSBu
ZXh0QXR0clZhbHVlW3N0eWxlXTsKKyAgICAgICAgICAgIGlmIChpc051bWJlcih2YWx1ZSkgJiYg
IWlzVW5pdGxlc3NOdW1iZXJbc3R5bGVdKSB7CisgICAgICAgICAgICAgICAgZG9tLnN0eWxlW3N0
eWxlXSA9IHZhbHVlICsgJ3B4JzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgIGRvbS5zdHlsZVtzdHlsZV0gPSB2YWx1ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWYobGFzdEF0dHJWYWx1ZSkpIHsK
KyAgICAgICAgICAgIGZvciAodmFyIHN0eWxlJDEgaW4gbGFzdEF0dHJWYWx1ZSkgeworICAgICAg
ICAgICAgICAgIGlmIChpc051bGxPclVuZGVmKG5leHRBdHRyVmFsdWVbc3R5bGUkMV0pKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGRvbS5zdHlsZVtzdHlsZSQxXSA9ICcnOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBmdW5jdGlvbiByZW1v
dmVQcm9wKHByb3AsIGRvbSkgeworICAgICAgICBpZiAocHJvcCA9PT0gJ2NsYXNzTmFtZScpIHsK
KyAgICAgICAgICAgIGRvbS5yZW1vdmVBdHRyaWJ1dGUoJ2NsYXNzJyk7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSBpZiAocHJvcCA9PT0gJ3ZhbHVlJykgeworICAgICAgICAgICAgZG9tLnZhbHVl
ID0gJyc7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocHJvcCA9PT0gJ3N0eWxlJykgewor
ICAgICAgICAgICAgZG9tLnN0eWxlLmNzc1RleHQgPSBudWxsOworICAgICAgICAgICAgZG9tLnJl
bW92ZUF0dHJpYnV0ZSgnc3R5bGUnKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChkZWxl
Z2F0ZWRQcm9wc1twcm9wXSkgeworICAgICAgICAgICAgaGFuZGxlRXZlbnQocHJvcCwgbnVsbCwg
bnVsbCwgZG9tKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGRvbS5y
ZW1vdmVBdHRyaWJ1dGUocHJvcCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2YXIgcmVjeWNs
aW5nRW5hYmxlZCA9IHRydWU7CisgICAgdmFyIGNvbXBvbmVudFBvb2xzID0gbmV3IE1hcCgpOwor
ICAgIHZhciBlbGVtZW50UG9vbHMgPSBuZXcgTWFwKCk7CisgICAgZnVuY3Rpb24gZGlzYWJsZVJl
Y3ljbGluZygpIHsKKyAgICAgICAgcmVjeWNsaW5nRW5hYmxlZCA9IGZhbHNlOworICAgICAgICBj
b21wb25lbnRQb29scy5jbGVhcigpOworICAgICAgICBlbGVtZW50UG9vbHMuY2xlYXIoKTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiByZWN5Y2xlRWxlbWVudCh2Tm9kZSwgbGlmZWN5Y2xlLCBjb250
ZXh0LCBpc1NWRykgeworICAgICAgICB2YXIgdGFnID0gdk5vZGUudHlwZTsKKyAgICAgICAgdmFy
IGtleSA9IHZOb2RlLmtleTsKKyAgICAgICAgdmFyIHBvb2xzID0gZWxlbWVudFBvb2xzLmdldCh0
YWcpOworICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHBvb2xzKSkgeworICAgICAgICAgICAgdmFy
IHBvb2wgPSBrZXkgPT09IG51bGwgPyBwb29scy5ub25LZXllZCA6IHBvb2xzLmtleWVkLmdldChr
ZXkpOworICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChwb29sKSkgeworICAgICAgICAgICAg
ICAgIHZhciByZWN5Y2xlZFZOb2RlID0gcG9vbC5wb3AoKTsKKyAgICAgICAgICAgICAgICBpZiAo
IWlzVW5kZWZpbmVkKHJlY3ljbGVkVk5vZGUpKSB7CisgICAgICAgICAgICAgICAgICAgIHBhdGNo
RWxlbWVudChyZWN5Y2xlZFZOb2RlLCB2Tm9kZSwgbnVsbCwgbGlmZWN5Y2xlLCBjb250ZXh0LCBp
c1NWRywgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB2Tm9kZS5kb207CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBu
dWxsOworICAgIH0KKyAgICBmdW5jdGlvbiBwb29sRWxlbWVudCh2Tm9kZSkgeworICAgICAgICB2
YXIgdGFnID0gdk5vZGUudHlwZTsKKyAgICAgICAgdmFyIGtleSA9IHZOb2RlLmtleTsKKyAgICAg
ICAgdmFyIHBvb2xzID0gZWxlbWVudFBvb2xzLmdldCh0YWcpOworICAgICAgICBpZiAoaXNVbmRl
ZmluZWQocG9vbHMpKSB7CisgICAgICAgICAgICBwb29scyA9IHsKKyAgICAgICAgICAgICAgICBu
b25LZXllZDogW10sCisgICAgICAgICAgICAgICAga2V5ZWQ6IG5ldyBNYXAoKQorICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgIGVsZW1lbnRQb29scy5zZXQodGFnLCBwb29scyk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGlzTnVsbChrZXkpKSB7CisgICAgICAgICAgICBwb29scy5ub25LZXll
ZC5wdXNoKHZOb2RlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZh
ciBwb29sID0gcG9vbHMua2V5ZWQuZ2V0KGtleSk7CisgICAgICAgICAgICBpZiAoaXNVbmRlZmlu
ZWQocG9vbCkpIHsKKyAgICAgICAgICAgICAgICBwb29sID0gW107CisgICAgICAgICAgICAgICAg
cG9vbHMua2V5ZWQuc2V0KGtleSwgcG9vbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBw
b29sLnB1c2godk5vZGUpOworICAgICAgICB9CisgICAgfQorICAgIGZ1bmN0aW9uIHJlY3ljbGVD
b21wb25lbnQodk5vZGUsIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcpIHsKKyAgICAgICAgdmFy
IHR5cGUgPSB2Tm9kZS50eXBlOworICAgICAgICB2YXIga2V5ID0gdk5vZGUua2V5OworICAgICAg
ICB2YXIgcG9vbHMgPSBjb21wb25lbnRQb29scy5nZXQodHlwZSk7CisgICAgICAgIGlmICghaXNV
bmRlZmluZWQocG9vbHMpKSB7CisgICAgICAgICAgICB2YXIgcG9vbCA9IGtleSA9PT0gbnVsbCA/
IHBvb2xzLm5vbktleWVkIDogcG9vbHMua2V5ZWQuZ2V0KGtleSk7CisgICAgICAgICAgICBpZiAo
IWlzVW5kZWZpbmVkKHBvb2wpKSB7CisgICAgICAgICAgICAgICAgdmFyIHJlY3ljbGVkVk5vZGUg
PSBwb29sLnBvcCgpOworICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQocmVjeWNsZWRW
Tm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGZsYWdzID0gdk5vZGUuZmxhZ3M7Cisg
ICAgICAgICAgICAgICAgICAgIHZhciBmYWlsZWQgPSBwYXRjaENvbXBvbmVudChyZWN5Y2xlZFZO
b2RlLCB2Tm9kZSwgbnVsbCwgbGlmZWN5Y2xlLCBjb250ZXh0LCBpc1NWRywgZmxhZ3MgJiA0IC8q
IENvbXBvbmVudENsYXNzICovLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFmYWls
ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2Tm9kZS5kb207CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIGZ1bmN0aW9uIHBvb2xDb21wb25l
bnQodk5vZGUpIHsKKyAgICAgICAgdmFyIHR5cGUgPSB2Tm9kZS50eXBlOworICAgICAgICB2YXIg
a2V5ID0gdk5vZGUua2V5OworICAgICAgICB2YXIgaG9va3MgPSB2Tm9kZS5yZWY7CisgICAgICAg
IHZhciBub25SZWN5Y2xlSG9va3MgPSBob29rcyAmJiAoaG9va3Mub25Db21wb25lbnRXaWxsTW91
bnQgfHwKKyAgICAgICAgICAgIGhvb2tzLm9uQ29tcG9uZW50V2lsbFVubW91bnQgfHwKKyAgICAg
ICAgICAgIGhvb2tzLm9uQ29tcG9uZW50RGlkTW91bnQgfHwKKyAgICAgICAgICAgIGhvb2tzLm9u
Q29tcG9uZW50V2lsbFVwZGF0ZSB8fAorICAgICAgICAgICAgaG9va3Mub25Db21wb25lbnREaWRV
cGRhdGUpOworICAgICAgICBpZiAobm9uUmVjeWNsZUhvb2tzKSB7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIHBvb2xzID0gY29tcG9uZW50UG9vbHMuZ2V0KHR5
cGUpOworICAgICAgICBpZiAoaXNVbmRlZmluZWQocG9vbHMpKSB7CisgICAgICAgICAgICBwb29s
cyA9IHsKKyAgICAgICAgICAgICAgICBub25LZXllZDogW10sCisgICAgICAgICAgICAgICAga2V5
ZWQ6IG5ldyBNYXAoKQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGNvbXBvbmVudFBvb2xz
LnNldCh0eXBlLCBwb29scyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzTnVsbChrZXkpKSB7
CisgICAgICAgICAgICBwb29scy5ub25LZXllZC5wdXNoKHZOb2RlKTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBwb29sID0gcG9vbHMua2V5ZWQuZ2V0KGtleSk7
CisgICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQocG9vbCkpIHsKKyAgICAgICAgICAgICAgICBw
b29sID0gW107CisgICAgICAgICAgICAgICAgcG9vbHMua2V5ZWQuc2V0KGtleSwgcG9vbCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBwb29sLnB1c2godk5vZGUpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gbW91bnQodk5vZGUsIHBhcmVudERvbSwgbGlmZWN5Y2xlLCBj
b250ZXh0LCBpc1NWRykgeworICAgICAgICB2YXIgZmxhZ3MgPSB2Tm9kZS5mbGFnczsKKyAgICAg
ICAgaWYgKGZsYWdzICYgMzk3MCAvKiBFbGVtZW50ICovKSB7CisgICAgICAgICAgICByZXR1cm4g
bW91bnRFbGVtZW50KHZOb2RlLCBwYXJlbnREb20sIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcp
OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGZsYWdzICYgMjggLyogQ29tcG9uZW50ICov
KSB7CisgICAgICAgICAgICByZXR1cm4gbW91bnRDb21wb25lbnQodk5vZGUsIHBhcmVudERvbSwg
bGlmZWN5Y2xlLCBjb250ZXh0LCBpc1NWRywgZmxhZ3MgJiA0IC8qIENvbXBvbmVudENsYXNzICov
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChmbGFncyAmIDQwOTYgLyogVm9pZCAqLykg
eworICAgICAgICAgICAgcmV0dXJuIG1vdW50Vm9pZCh2Tm9kZSwgcGFyZW50RG9tKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlIGlmIChmbGFncyAmIDEgLyogVGV4dCAqLykgeworICAgICAgICAg
ICAgcmV0dXJuIG1vdW50VGV4dCh2Tm9kZSwgcGFyZW50RG9tKTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChmYWxzZSkgeworICAgICAgICAgICAgICAgIHRocm93
RXJyb3IoKCJtb3VudCgpIGV4cGVjdHMgYSB2YWxpZCBWTm9kZSwgaW5zdGVhZCBpdCByZWNlaXZl
ZCBhbiBvYmplY3Qgd2l0aCB0aGUgdHlwZSBcIiIgKyAodHlwZW9mIHZOb2RlKSArICJcIi4iKSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aHJvd0Vycm9yKCk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgZnVuY3Rpb24gbW91bnRUZXh0KHZOb2RlLCBwYXJlbnREb20pIHsKKyAgICAgICAg
dmFyIGRvbSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHZOb2RlLmNoaWxkcmVuKTsKKyAgICAg
ICAgdk5vZGUuZG9tID0gZG9tOworICAgICAgICBpZiAocGFyZW50RG9tKSB7CisgICAgICAgICAg
ICBhcHBlbmRDaGlsZChwYXJlbnREb20sIGRvbSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IGRvbTsKKyAgICB9CisgICAgZnVuY3Rpb24gbW91bnRWb2lkKHZOb2RlLCBwYXJlbnREb20pIHsK
KyAgICAgICAgdmFyIGRvbSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTsKKyAgICAgICAg
dk5vZGUuZG9tID0gZG9tOworICAgICAgICBpZiAocGFyZW50RG9tKSB7CisgICAgICAgICAgICBh
cHBlbmRDaGlsZChwYXJlbnREb20sIGRvbSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGRv
bTsKKyAgICB9CisgICAgZnVuY3Rpb24gbW91bnRFbGVtZW50KHZOb2RlLCBwYXJlbnREb20sIGxp
ZmVjeWNsZSwgY29udGV4dCwgaXNTVkcpIHsKKyAgICAgICAgaWYgKHJlY3ljbGluZ0VuYWJsZWQp
IHsKKyAgICAgICAgICAgIHZhciBkb20kMSA9IHJlY3ljbGVFbGVtZW50KHZOb2RlLCBsaWZlY3lj
bGUsIGNvbnRleHQsIGlzU1ZHKTsKKyAgICAgICAgICAgIGlmICghaXNOdWxsKGRvbSQxKSkgewor
ICAgICAgICAgICAgICAgIGlmICghaXNOdWxsKHBhcmVudERvbSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgYXBwZW5kQ2hpbGQocGFyZW50RG9tLCBkb20kMSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHJldHVybiBkb20kMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICB2YXIgdGFnID0gdk5vZGUudHlwZTsKKyAgICAgICAgdmFyIGZsYWdzID0gdk5vZGUu
ZmxhZ3M7CisgICAgICAgIGlmIChpc1NWRyB8fCAoZmxhZ3MgJiAxMjggLyogU3ZnRWxlbWVudCAq
LykpIHsKKyAgICAgICAgICAgIGlzU1ZHID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICB2YXIg
ZG9tID0gZG9jdW1lbnRDcmVhdGVFbGVtZW50KHRhZywgaXNTVkcpOworICAgICAgICB2YXIgY2hp
bGRyZW4gPSB2Tm9kZS5jaGlsZHJlbjsKKyAgICAgICAgdmFyIHByb3BzID0gdk5vZGUucHJvcHM7
CisgICAgICAgIHZhciBldmVudHMgPSB2Tm9kZS5ldmVudHM7CisgICAgICAgIHZhciByZWYgPSB2
Tm9kZS5yZWY7CisgICAgICAgIHZOb2RlLmRvbSA9IGRvbTsKKyAgICAgICAgaWYgKCFpc051bGwo
Y2hpbGRyZW4pKSB7CisgICAgICAgICAgICBpZiAoaXNTdHJpbmdPck51bWJlcihjaGlsZHJlbikp
IHsKKyAgICAgICAgICAgICAgICBzZXRUZXh0Q29udGVudChkb20sIGNoaWxkcmVuKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGlzQXJyYXkoY2hpbGRyZW4pKSB7CisgICAg
ICAgICAgICAgICAgbW91bnRBcnJheUNoaWxkcmVuKGNoaWxkcmVuLCBkb20sIGxpZmVjeWNsZSwg
Y29udGV4dCwgaXNTVkcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoaXNW
Tm9kZShjaGlsZHJlbikpIHsKKyAgICAgICAgICAgICAgICBtb3VudChjaGlsZHJlbiwgZG9tLCBs
aWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBpZiAoIShmbGFncyAmIDIgLyogSHRtbEVsZW1lbnQgKi8pKSB7CisgICAgICAgICAgICBw
cm9jZXNzRWxlbWVudChmbGFncywgdk5vZGUsIGRvbSk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCFpc051bGwocHJvcHMpKSB7CisgICAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIHByb3BzKSB7
CisgICAgICAgICAgICAgICAgLy8gZG8gbm90IGFkZCBhIGhhc093blByb3BlcnR5IGNoZWNrIGhl
cmUsIGl0IGFmZmVjdHMgcGVyZm9ybWFuY2UKKyAgICAgICAgICAgICAgICBwYXRjaFByb3AocHJv
cCwgbnVsbCwgcHJvcHNbcHJvcF0sIGRvbSwgaXNTVkcsIGxpZmVjeWNsZSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpc051bGwoZXZlbnRzKSkgeworICAgICAgICAg
ICAgZm9yICh2YXIgbmFtZSBpbiBldmVudHMpIHsKKyAgICAgICAgICAgICAgICAvLyBkbyBub3Qg
YWRkIGEgaGFzT3duUHJvcGVydHkgY2hlY2sgaGVyZSwgaXQgYWZmZWN0cyBwZXJmb3JtYW5jZQor
ICAgICAgICAgICAgICAgIHBhdGNoRXZlbnQobmFtZSwgbnVsbCwgZXZlbnRzW25hbWVdLCBkb20s
IGxpZmVjeWNsZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpc051
bGwocmVmKSkgeworICAgICAgICAgICAgbW91bnRSZWYoZG9tLCByZWYsIGxpZmVjeWNsZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKCFpc051bGwocGFyZW50RG9tKSkgeworICAgICAgICAgICAg
YXBwZW5kQ2hpbGQocGFyZW50RG9tLCBkb20pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBk
b207CisgICAgfQorICAgIGZ1bmN0aW9uIG1vdW50QXJyYXlDaGlsZHJlbihjaGlsZHJlbiwgZG9t
LCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHKSB7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBjaGlsZCA9IGNoaWxk
cmVuW2ldOworICAgICAgICAgICAgaWYgKCFpc0ludmFsaWQoY2hpbGQpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGNoaWxkLmRvbSkgeworICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbltpXSA9
IGNoaWxkID0gY2xvbmVWTm9kZShjaGlsZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIG1vdW50KGNoaWxkcmVuW2ldLCBkb20sIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGZ1bmN0aW9uIG1vdW50Q29t
cG9uZW50KHZOb2RlLCBwYXJlbnREb20sIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcsIGlzQ2xh
c3MpIHsKKyAgICAgICAgaWYgKHJlY3ljbGluZ0VuYWJsZWQpIHsKKyAgICAgICAgICAgIHZhciBk
b20kMSA9IHJlY3ljbGVDb21wb25lbnQodk5vZGUsIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcp
OworICAgICAgICAgICAgaWYgKCFpc051bGwoZG9tJDEpKSB7CisgICAgICAgICAgICAgICAgaWYg
KCFpc051bGwocGFyZW50RG9tKSkgeworICAgICAgICAgICAgICAgICAgICBhcHBlbmRDaGlsZChw
YXJlbnREb20sIGRvbSQxKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0
dXJuIGRvbSQxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHZhciB0eXBlID0g
dk5vZGUudHlwZTsKKyAgICAgICAgdmFyIHByb3BzID0gdk5vZGUucHJvcHMgfHwgRU1QVFlfT0JK
OworICAgICAgICB2YXIgcmVmID0gdk5vZGUucmVmOworICAgICAgICB2YXIgZG9tOworICAgICAg
ICBpZiAoaXNDbGFzcykgeworICAgICAgICAgICAgdmFyIGRlZmF1bHRQcm9wcyA9IHR5cGUuZGVm
YXVsdFByb3BzOworICAgICAgICAgICAgbGlmZWN5Y2xlLmZhc3RVbm1vdW50ID0gZmFsc2U7Cisg
ICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGRlZmF1bHRQcm9wcykpIHsKKyAgICAgICAgICAg
ICAgICBjb3B5UHJvcHNUbyhkZWZhdWx0UHJvcHMsIHByb3BzKTsKKyAgICAgICAgICAgICAgICB2
Tm9kZS5wcm9wcyA9IHByb3BzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIGluc3Rh
bmNlID0gY3JlYXRlU3RhdGVmdWxDb21wb25lbnRJbnN0YW5jZSh2Tm9kZSwgdHlwZSwgcHJvcHMs
IGNvbnRleHQsIGlzU1ZHLCBkZXZUb29sc1N0YXR1cyk7CisgICAgICAgICAgICB2YXIgaW5wdXQg
PSBpbnN0YW5jZS5fbGFzdElucHV0OworICAgICAgICAgICAgdmFyIGZhc3RVbm1vdW50ID0gbGlm
ZWN5Y2xlLmZhc3RVbm1vdW50OworICAgICAgICAgICAgLy8gd2Ugc3RvcmUgdGhlIGZhc3RVbm1v
dW50IHZhbHVlLCBidXQgd2Ugc2V0IGl0IGJhY2sgdG8gdHJ1ZSBvbiB0aGUgbGlmZWN5Y2xlCisg
ICAgICAgICAgICAvLyB3ZSBkbyB0aGlzIHNvIHdlIGNhbiBkZXRlcm1pbmUgaWYgdGhlIGNvbXBv
bmVudCByZW5kZXIgaGFzIGEgZmFzdFVubW91bnQgb3Igbm90CisgICAgICAgICAgICBsaWZlY3lj
bGUuZmFzdFVubW91bnQgPSB0cnVlOworICAgICAgICAgICAgaW5zdGFuY2UuX3ZOb2RlID0gdk5v
ZGU7CisgICAgICAgICAgICB2Tm9kZS5kb20gPSBkb20gPSBtb3VudChpbnB1dCwgbnVsbCwgbGlm
ZWN5Y2xlLCBpbnN0YW5jZS5fY2hpbGRDb250ZXh0LCBpc1NWRyk7CisgICAgICAgICAgICAvLyB3
ZSBub3cgY3JlYXRlIGEgbGlmZWN5Y2xlIGZvciB0aGlzIGNvbXBvbmVudCBhbmQgc3RvcmUgdGhl
IGZhc3RVbm1vdW50IHZhbHVlCisgICAgICAgICAgICB2YXIgc3ViTGlmZWN5Y2xlID0gaW5zdGFu
Y2UuX2xpZmVjeWNsZSA9IG5ldyBMaWZlY3ljbGUoKTsKKyAgICAgICAgICAgIHN1YkxpZmVjeWNs
ZS5mYXN0VW5tb3VudCA9IGxpZmVjeWNsZS5mYXN0VW5tb3VudDsKKyAgICAgICAgICAgIC8vIHdl
IHRoZW4gc2V0IHRoZSBsaWZlY3ljbGUgZmFzdFVubW91bnQgdmFsdWUgYmFjayB0byB3aGF0IGl0
IHdhcyBiZWZvcmUgdGhlIG1vdW50CisgICAgICAgICAgICBsaWZlY3ljbGUuZmFzdFVubW91bnQg
PSBmYXN0VW5tb3VudDsKKyAgICAgICAgICAgIGlmICghaXNOdWxsKHBhcmVudERvbSkpIHsKKyAg
ICAgICAgICAgICAgICBhcHBlbmRDaGlsZChwYXJlbnREb20sIGRvbSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBtb3VudFN0YXRlZnVsQ29tcG9uZW50Q2FsbGJhY2tzKHJlZiwgaW5zdGFu
Y2UsIGxpZmVjeWNsZSk7CisgICAgICAgICAgICBmaW5kRE9NTm9kZUVuYWJsZWQgJiYgY29tcG9u
ZW50VG9ET01Ob2RlTWFwLnNldChpbnN0YW5jZSwgZG9tKTsKKyAgICAgICAgICAgIHZOb2RlLmNo
aWxkcmVuID0gaW5zdGFuY2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICB2YXIgaW5wdXQkMSA9IGNyZWF0ZVN0YXRlbGVzc0NvbXBvbmVudElucHV0KHZOb2RlLCB0eXBl
LCBwcm9wcywgY29udGV4dCk7CisgICAgICAgICAgICB2Tm9kZS5kb20gPSBkb20gPSBtb3VudChp
bnB1dCQxLCBudWxsLCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHKTsKKyAgICAgICAgICAgIHZO
b2RlLmNoaWxkcmVuID0gaW5wdXQkMTsKKyAgICAgICAgICAgIG1vdW50U3RhdGVsZXNzQ29tcG9u
ZW50Q2FsbGJhY2tzKHJlZiwgZG9tLCBsaWZlY3ljbGUpOworICAgICAgICAgICAgaWYgKCFpc051
bGwocGFyZW50RG9tKSkgeworICAgICAgICAgICAgICAgIGFwcGVuZENoaWxkKHBhcmVudERvbSwg
ZG9tKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZG9tOworICAg
IH0KKyAgICBmdW5jdGlvbiBtb3VudFN0YXRlZnVsQ29tcG9uZW50Q2FsbGJhY2tzKHJlZiwgaW5z
dGFuY2UsIGxpZmVjeWNsZSkgeworICAgICAgICBpZiAocmVmKSB7CisgICAgICAgICAgICBpZiAo
aXNGdW5jdGlvbihyZWYpKSB7CisgICAgICAgICAgICAgICAgcmVmKGluc3RhbmNlKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChmYWxzZSkg
eworICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKCdzdHJpbmcgInJlZnMiIGFyZSBub3Qg
c3VwcG9ydGVkIGluIEluZmVybm8gMS4wLiBVc2UgY2FsbGJhY2sgInJlZnMiIGluc3RlYWQuJyk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRocm93RXJyb3IoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIWlzTnVsbChpbnN0YW5jZS5jb21wb25l
bnREaWRNb3VudCkpIHsKKyAgICAgICAgICAgIGxpZmVjeWNsZS5hZGRMaXN0ZW5lcihmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQoKTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQorICAgIGZ1bmN0aW9uIG1vdW50U3RhdGVs
ZXNzQ29tcG9uZW50Q2FsbGJhY2tzKHJlZiwgZG9tLCBsaWZlY3ljbGUpIHsKKyAgICAgICAgaWYg
KHJlZikgeworICAgICAgICAgICAgaWYgKCFpc051bGxPclVuZGVmKHJlZi5vbkNvbXBvbmVudFdp
bGxNb3VudCkpIHsKKyAgICAgICAgICAgICAgICBsaWZlY3ljbGUuZmFzdFVubW91bnQgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICByZWYub25Db21wb25lbnRXaWxsTW91bnQoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICghaXNOdWxsT3JVbmRlZihyZWYub25Db21wb25lbnREaWRN
b3VudCkpIHsKKyAgICAgICAgICAgICAgICBsaWZlY3ljbGUuZmFzdFVubW91bnQgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICBsaWZlY3ljbGUuYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkgeyByZXR1
cm4gcmVmLm9uQ29tcG9uZW50RGlkTW91bnQoZG9tKTsgfSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgZnVuY3Rpb24gbW91bnRSZWYoZG9tLCB2YWx1ZSwgbGlmZWN5Y2xl
KSB7CisgICAgICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkgeworICAgICAgICAgICAgbGlmZWN5
Y2xlLmZhc3RVbm1vdW50ID0gZmFsc2U7CisgICAgICAgICAgICBsaWZlY3ljbGUuYWRkTGlzdGVu
ZXIoZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsdWUoZG9tKTsgfSk7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoaXNJbnZhbGlkKHZhbHVlKSkgeworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChmYWxzZSkgewor
ICAgICAgICAgICAgICAgIHRocm93RXJyb3IoJ3N0cmluZyAicmVmcyIgYXJlIG5vdCBzdXBwb3J0
ZWQgaW4gSW5mZXJubyAxLjAuIFVzZSBjYWxsYmFjayAicmVmcyIgaW5zdGVhZC4nKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHRocm93RXJyb3IoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGNvcHlQcm9wc1RvKGNvcHlGcm9tLCBjb3B5VG8pIHsKKyAgICAgICAgZm9y
ICh2YXIgcHJvcCBpbiBjb3B5RnJvbSkgeworICAgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKGNv
cHlUb1twcm9wXSkpIHsKKyAgICAgICAgICAgICAgICBjb3B5VG9bcHJvcF0gPSBjb3B5RnJvbVtw
cm9wXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBmdW5jdGlvbiBjcmVh
dGVTdGF0ZWZ1bENvbXBvbmVudEluc3RhbmNlKHZOb2RlLCBDb21wb25lbnQsIHByb3BzLCBjb250
ZXh0LCBpc1NWRywgZGV2VG9vbHNTdGF0dXMpIHsKKyAgICAgICAgaWYgKGlzVW5kZWZpbmVkKGNv
bnRleHQpKSB7CisgICAgICAgICAgICBjb250ZXh0ID0ge307CisgICAgICAgIH0KKyAgICAgICAg
dmFyIGluc3RhbmNlID0gbmV3IENvbXBvbmVudChwcm9wcywgY29udGV4dCk7CisgICAgICAgIGlu
c3RhbmNlLmNvbnRleHQgPSBjb250ZXh0OworICAgICAgICBpZiAoaW5zdGFuY2UucHJvcHMgPT09
IEVNUFRZX09CSikgeworICAgICAgICAgICAgaW5zdGFuY2UucHJvcHMgPSBwcm9wczsKKyAgICAg
ICAgfQorICAgICAgICBpbnN0YW5jZS5fcGF0Y2ggPSBwYXRjaDsKKyAgICAgICAgaW5zdGFuY2Uu
X2RldlRvb2xzU3RhdHVzID0gZGV2VG9vbHNTdGF0dXM7CisgICAgICAgIGlmIChmaW5kRE9NTm9k
ZUVuYWJsZWQpIHsKKyAgICAgICAgICAgIGluc3RhbmNlLl9jb21wb25lbnRUb0RPTU5vZGVNYXAg
PSBjb21wb25lbnRUb0RPTU5vZGVNYXA7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGNoaWxkQ29u
dGV4dCA9IGluc3RhbmNlLmdldENoaWxkQ29udGV4dCgpOworICAgICAgICBpZiAoIWlzTnVsbE9y
VW5kZWYoY2hpbGRDb250ZXh0KSkgeworICAgICAgICAgICAgaW5zdGFuY2UuX2NoaWxkQ29udGV4
dCA9IE9iamVjdC5hc3NpZ24oe30sIGNvbnRleHQsIGNoaWxkQ29udGV4dCk7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpbnN0YW5jZS5fY2hpbGRDb250ZXh0ID0gY29u
dGV4dDsKKyAgICAgICAgfQorICAgICAgICBpbnN0YW5jZS5fdW5tb3VudGVkID0gZmFsc2U7Cisg
ICAgICAgIGluc3RhbmNlLl9wZW5kaW5nU2V0U3RhdGUgPSB0cnVlOworICAgICAgICBpbnN0YW5j
ZS5faXNTVkcgPSBpc1NWRzsKKyAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50KCk7
CisgICAgICAgIGluc3RhbmNlLl9iZWZvcmVSZW5kZXIgJiYgaW5zdGFuY2UuX2JlZm9yZVJlbmRl
cigpOworICAgICAgICB2YXIgaW5wdXQgPSBpbnN0YW5jZS5yZW5kZXIocHJvcHMsIGluc3RhbmNl
LnN0YXRlLCBjb250ZXh0KTsKKyAgICAgICAgaW5zdGFuY2UuX2FmdGVyUmVuZGVyICYmIGluc3Rh
bmNlLl9hZnRlclJlbmRlcigpOworICAgICAgICBpZiAoaXNBcnJheShpbnB1dCkpIHsKKyAgICAg
ICAgICAgIGlmIChmYWxzZSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3IoJ2EgdmFsaWQg
SW5mZXJubyBWTm9kZSAob3IgbnVsbCkgbXVzdCBiZSByZXR1cm5lZCBmcm9tIGEgY29tcG9uZW50
IHJlbmRlci4gWW91IG1heSBoYXZlIHJldHVybmVkIGFuIGFycmF5IG9yIGFuIGludmFsaWQgb2Jq
ZWN0LicpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhyb3dFcnJvcigpOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgaWYgKGlzSW52YWxpZChpbnB1dCkpIHsKKyAgICAgICAgICAgIGlu
cHV0ID0gY3JlYXRlVm9pZFZOb2RlKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBpZiAoaW5wdXQuZG9tKSB7CisgICAgICAgICAgICAgICAgaW5wdXQgPSBjbG9uZVZO
b2RlKGlucHV0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpbnB1dC5mbGFncyAm
IDI4IC8qIENvbXBvbmVudCAqLykgeworICAgICAgICAgICAgICAgIC8vIGlmIHdlIGhhdmUgYW4g
aW5wdXQgdGhhdCBpcyBhbHNvIGEgY29tcG9uZW50LCB3ZSBydW4gaW50byBhIHRyaWNreSBzaXR1
YXRpb24KKyAgICAgICAgICAgICAgICAvLyB3aGVyZSB0aGUgcm9vdCB2Tm9kZSBuZWVkcyB0byBh
bHdheXMgaGF2ZSB0aGUgY29ycmVjdCBET00gZW50cnkKKyAgICAgICAgICAgICAgICAvLyBzbyB3
ZSBicmVhayBtb25vbW9ycGhpc20gb24gb3VyIGlucHV0IGFuZCBzdXBwbHkgaXQgb3VyIHZOb2Rl
IGFzIHBhcmVudFZOb2RlCisgICAgICAgICAgICAgICAgLy8gd2UgY2FuIG9wdGltaXNlIHRoaXMg
aW4gdGhlIGZ1dHVyZSwgYnV0IHRoaXMgZ2V0cyB1cyBvdXQgb2YgYSBsb3Qgb2YgaXNzdWVzCisg
ICAgICAgICAgICAgICAgaW5wdXQucGFyZW50Vk5vZGUgPSB2Tm9kZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBpbnN0YW5jZS5fcGVuZGluZ1NldFN0YXRlID0gZmFsc2U7Cisg
ICAgICAgIGluc3RhbmNlLl9sYXN0SW5wdXQgPSBpbnB1dDsKKyAgICAgICAgcmV0dXJuIGluc3Rh
bmNlOworICAgIH0KKyAgICBmdW5jdGlvbiByZXBsYWNlTGFzdENoaWxkQW5kVW5tb3VudChsYXN0
SW5wdXQsIG5leHRJbnB1dCwgcGFyZW50RG9tLCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHLCBp
c1JlY3ljbGluZykgeworICAgICAgICByZXBsYWNlVk5vZGUocGFyZW50RG9tLCBtb3VudChuZXh0
SW5wdXQsIG51bGwsIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcpLCBsYXN0SW5wdXQsIGxpZmVj
eWNsZSwgaXNSZWN5Y2xpbmcpOworICAgIH0KKyAgICBmdW5jdGlvbiByZXBsYWNlVk5vZGUocGFy
ZW50RG9tLCBkb20sIHZOb2RlLCBsaWZlY3ljbGUsIGlzUmVjeWNsaW5nKSB7CisgICAgICAgIHZh
ciBzaGFsbG93VW5tb3VudCA9IGZhbHNlOworICAgICAgICAvLyB3ZSBjYW5ub3QgY2FjaGUgbm9k
ZVR5cGUgaGVyZSBhcyB2Tm9kZSBtaWdodCBiZSByZS1hc3NpZ25lZCBiZWxvdworICAgICAgICBp
ZiAodk5vZGUuZmxhZ3MgJiAyOCAvKiBDb21wb25lbnQgKi8pIHsKKyAgICAgICAgICAgIC8vIGlm
IHdlIGFyZSBhY2Nlc3NpbmcgYSBzdGF0ZWZ1bCBvciBzdGF0ZWxlc3MgY29tcG9uZW50LCB3ZSB3
YW50IHRvIGFjY2VzcyB0aGVpciBsYXN0IHJlbmRlcmVkIGlucHV0CisgICAgICAgICAgICAvLyBh
Y2Nlc3NpbmcgdGhlaXIgRE9NIG5vZGUgaXMgbm90IHVzZWZ1bCB0byB1cyBoZXJlCisgICAgICAg
ICAgICB1bm1vdW50KHZOb2RlLCBudWxsLCBsaWZlY3ljbGUsIGZhbHNlLCBmYWxzZSwgaXNSZWN5
Y2xpbmcpOworICAgICAgICAgICAgdk5vZGUgPSB2Tm9kZS5jaGlsZHJlbi5fbGFzdElucHV0IHx8
IHZOb2RlLmNoaWxkcmVuOworICAgICAgICAgICAgc2hhbGxvd1VubW91bnQgPSB0cnVlOworICAg
ICAgICB9CisgICAgICAgIHJlcGxhY2VDaGlsZChwYXJlbnREb20sIGRvbSwgdk5vZGUuZG9tKTsK
KyAgICAgICAgdW5tb3VudCh2Tm9kZSwgbnVsbCwgbGlmZWN5Y2xlLCBmYWxzZSwgc2hhbGxvd1Vu
bW91bnQsIGlzUmVjeWNsaW5nKTsKKyAgICB9CisgICAgZnVuY3Rpb24gY3JlYXRlU3RhdGVsZXNz
Q29tcG9uZW50SW5wdXQodk5vZGUsIGNvbXBvbmVudCwgcHJvcHMsIGNvbnRleHQpIHsKKyAgICAg
ICAgdmFyIGlucHV0ID0gY29tcG9uZW50KHByb3BzLCBjb250ZXh0KTsKKyAgICAgICAgaWYgKGlz
QXJyYXkoaW5wdXQpKSB7CisgICAgICAgICAgICBpZiAoZmFsc2UpIHsKKyAgICAgICAgICAgICAg
ICB0aHJvd0Vycm9yKCdhIHZhbGlkIEluZmVybm8gVk5vZGUgKG9yIG51bGwpIG11c3QgYmUgcmV0
dXJuZWQgZnJvbSBhIGNvbXBvbmVudCByZW5kZXIuIFlvdSBtYXkgaGF2ZSByZXR1cm5lZCBhbiBh
cnJheSBvciBhbiBpbnZhbGlkIG9iamVjdC4nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHRocm93RXJyb3IoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpc0ludmFsaWQoaW5w
dXQpKSB7CisgICAgICAgICAgICBpbnB1dCA9IGNyZWF0ZVZvaWRWTm9kZSgpOworICAgICAgICB9
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKGlucHV0LmRvbSkgeworICAgICAgICAg
ICAgICAgIGlucHV0ID0gY2xvbmVWTm9kZShpbnB1dCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoaW5wdXQuZmxhZ3MgJiAyOCAvKiBDb21wb25lbnQgKi8pIHsKKyAgICAgICAgICAg
ICAgICAvLyBpZiB3ZSBoYXZlIGFuIGlucHV0IHRoYXQgaXMgYWxzbyBhIGNvbXBvbmVudCwgd2Ug
cnVuIGludG8gYSB0cmlja3kgc2l0dWF0aW9uCisgICAgICAgICAgICAgICAgLy8gd2hlcmUgdGhl
IHJvb3Qgdk5vZGUgbmVlZHMgdG8gYWx3YXlzIGhhdmUgdGhlIGNvcnJlY3QgRE9NIGVudHJ5Cisg
ICAgICAgICAgICAgICAgLy8gc28gd2UgYnJlYWsgbW9ub21vcnBoaXNtIG9uIG91ciBpbnB1dCBh
bmQgc3VwcGx5IGl0IG91ciB2Tm9kZSBhcyBwYXJlbnRWTm9kZQorICAgICAgICAgICAgICAgIC8v
IHdlIGNhbiBvcHRpbWlzZSB0aGlzIGluIHRoZSBmdXR1cmUsIGJ1dCB0aGlzIGdldHMgdXMgb3V0
IG9mIGEgbG90IG9mIGlzc3VlcworICAgICAgICAgICAgICAgIGlucHV0LnBhcmVudFZOb2RlID0g
dk5vZGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGlucHV0Owor
ICAgIH0KKyAgICBmdW5jdGlvbiBzZXRUZXh0Q29udGVudChkb20sIHRleHQpIHsKKyAgICAgICAg
aWYgKHRleHQgIT09ICcnKSB7CisgICAgICAgICAgICBkb20udGV4dENvbnRlbnQgPSB0ZXh0Owor
ICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZG9tLmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZnVuY3Rp
b24gdXBkYXRlVGV4dENvbnRlbnQoZG9tLCB0ZXh0KSB7CisgICAgICAgIGRvbS5maXJzdENoaWxk
Lm5vZGVWYWx1ZSA9IHRleHQ7CisgICAgfQorICAgIGZ1bmN0aW9uIGFwcGVuZENoaWxkKHBhcmVu
dERvbSwgZG9tKSB7CisgICAgICAgIHBhcmVudERvbS5hcHBlbmRDaGlsZChkb20pOworICAgIH0K
KyAgICBmdW5jdGlvbiBpbnNlcnRPckFwcGVuZChwYXJlbnREb20sIG5ld05vZGUsIG5leHROb2Rl
KSB7CisgICAgICAgIGlmIChpc051bGxPclVuZGVmKG5leHROb2RlKSkgeworICAgICAgICAgICAg
YXBwZW5kQ2hpbGQocGFyZW50RG9tLCBuZXdOb2RlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIHBhcmVudERvbS5pbnNlcnRCZWZvcmUobmV3Tm9kZSwgbmV4dE5vZGUp
OworICAgICAgICB9CisgICAgfQorICAgIGZ1bmN0aW9uIGRvY3VtZW50Q3JlYXRlRWxlbWVudCh0
YWcsIGlzU1ZHKSB7CisgICAgICAgIGlmIChpc1NWRyA9PT0gdHJ1ZSkgeworICAgICAgICAgICAg
cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhzdmdOUywgdGFnKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KHRhZyk7CisgICAgICAgIH0KKyAgICB9CisgICAgZnVuY3Rpb24gcmVwbGFjZVdpdGhOZXdOb2Rl
KGxhc3ROb2RlLCBuZXh0Tm9kZSwgcGFyZW50RG9tLCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZH
LCBpc1JlY3ljbGluZykgeworICAgICAgICB1bm1vdW50KGxhc3ROb2RlLCBudWxsLCBsaWZlY3lj
bGUsIGZhbHNlLCBmYWxzZSwgaXNSZWN5Y2xpbmcpOworICAgICAgICB2YXIgZG9tID0gbW91bnQo
bmV4dE5vZGUsIG51bGwsIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcpOworICAgICAgICBuZXh0
Tm9kZS5kb20gPSBkb207CisgICAgICAgIHJlcGxhY2VDaGlsZChwYXJlbnREb20sIGRvbSwgbGFz
dE5vZGUuZG9tKTsKKyAgICB9CisgICAgZnVuY3Rpb24gcmVwbGFjZUNoaWxkKHBhcmVudERvbSwg
bmV4dERvbSwgbGFzdERvbSkgeworICAgICAgICBpZiAoIXBhcmVudERvbSkgeworICAgICAgICAg
ICAgcGFyZW50RG9tID0gbGFzdERvbS5wYXJlbnROb2RlOworICAgICAgICB9CisgICAgICAgIHBh
cmVudERvbS5yZXBsYWNlQ2hpbGQobmV4dERvbSwgbGFzdERvbSk7CisgICAgfQorICAgIGZ1bmN0
aW9uIHJlbW92ZUNoaWxkKHBhcmVudERvbSwgZG9tKSB7CisgICAgICAgIHBhcmVudERvbS5yZW1v
dmVDaGlsZChkb20pOworICAgIH0KKyAgICBmdW5jdGlvbiByZW1vdmVBbGxDaGlsZHJlbihkb20s
IGNoaWxkcmVuLCBsaWZlY3ljbGUsIHNoYWxsb3dVbm1vdW50LCBpc1JlY3ljbGluZykgeworICAg
ICAgICBkb20udGV4dENvbnRlbnQgPSAnJzsKKyAgICAgICAgaWYgKCFsaWZlY3ljbGUuZmFzdFVu
bW91bnQpIHsKKyAgICAgICAgICAgIHJlbW92ZUNoaWxkcmVuKG51bGwsIGNoaWxkcmVuLCBsaWZl
Y3ljbGUsIHNoYWxsb3dVbm1vdW50LCBpc1JlY3ljbGluZyk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgZnVuY3Rpb24gcmVtb3ZlQ2hpbGRyZW4oZG9tLCBjaGlsZHJlbiwgbGlmZWN5Y2xlLCBzaGFs
bG93VW5tb3VudCwgaXNSZWN5Y2xpbmcpIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBj
aGlsZHJlbi5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIGNoaWxkID0gY2hpbGRyZW5b
aV07CisgICAgICAgICAgICBpZiAoIWlzSW52YWxpZChjaGlsZCkpIHsKKyAgICAgICAgICAgICAg
ICB1bm1vdW50KGNoaWxkLCBkb20sIGxpZmVjeWNsZSwgdHJ1ZSwgc2hhbGxvd1VubW91bnQsIGlz
UmVjeWNsaW5nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBmdW5jdGlv
biBpc0tleWVkKGxhc3RDaGlsZHJlbiwgbmV4dENoaWxkcmVuKSB7CisgICAgICAgIHJldHVybiBu
ZXh0Q2hpbGRyZW4ubGVuZ3RoICYmICFpc051bGxPclVuZGVmKG5leHRDaGlsZHJlblswXSkgJiYg
IWlzTnVsbE9yVW5kZWYobmV4dENoaWxkcmVuWzBdLmtleSkKKyAgICAgICAgICAgICYmIGxhc3RD
aGlsZHJlbi5sZW5ndGggJiYgIWlzTnVsbE9yVW5kZWYobGFzdENoaWxkcmVuWzBdKSAmJiAhaXNO
dWxsT3JVbmRlZihsYXN0Q2hpbGRyZW5bMF0ua2V5KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBu
b3JtYWxpc2VDaGlsZE5vZGVzKGRvbSkgeworICAgICAgICB2YXIgcmF3Q2hpbGROb2RlcyA9IGRv
bS5jaGlsZE5vZGVzOworICAgICAgICB2YXIgbGVuZ3RoID0gcmF3Q2hpbGROb2Rlcy5sZW5ndGg7
CisgICAgICAgIHZhciBpID0gMDsKKyAgICAgICAgd2hpbGUgKGkgPCBsZW5ndGgpIHsKKyAgICAg
ICAgICAgIHZhciByYXdDaGlsZCA9IHJhd0NoaWxkTm9kZXNbaV07CisgICAgICAgICAgICBpZiAo
cmF3Q2hpbGQubm9kZVR5cGUgPT09IDgpIHsKKyAgICAgICAgICAgICAgICBpZiAocmF3Q2hpbGQu
ZGF0YSA9PT0gJyEnKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBwbGFjZWhvbGRlciA9IGRv
Y3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTsKKyAgICAgICAgICAgICAgICAgICAgZG9tLnJlcGxh
Y2VDaGlsZChwbGFjZWhvbGRlciwgcmF3Q2hpbGQpOworICAgICAgICAgICAgICAgICAgICBpKys7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICBkb20ucmVtb3ZlQ2hpbGQocmF3Q2hpbGQpOworICAgICAgICAgICAgICAgICAgICBs
ZW5ndGgtLTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgZnVuY3Rpb24gaHlkcmF0ZUNvbXBvbmVudCh2Tm9kZSwgZG9tLCBsaWZlY3ljbGUs
IGNvbnRleHQsIGlzU1ZHLCBpc0NsYXNzKSB7CisgICAgICAgIHZhciB0eXBlID0gdk5vZGUudHlw
ZTsKKyAgICAgICAgdmFyIHByb3BzID0gdk5vZGUucHJvcHMgfHwge307CisgICAgICAgIHZhciBy
ZWYgPSB2Tm9kZS5yZWY7CisgICAgICAgIHZOb2RlLmRvbSA9IGRvbTsKKyAgICAgICAgaWYgKGlz
Q2xhc3MpIHsKKyAgICAgICAgICAgIHZhciBfaXNTVkcgPSBkb20ubmFtZXNwYWNlVVJJID09PSBz
dmdOUzsKKyAgICAgICAgICAgIHZhciBkZWZhdWx0UHJvcHMgPSB0eXBlLmRlZmF1bHRQcm9wczsK
KyAgICAgICAgICAgIGxpZmVjeWNsZS5mYXN0VW5tb3VudCA9IGZhbHNlOworICAgICAgICAgICAg
aWYgKCFpc1VuZGVmaW5lZChkZWZhdWx0UHJvcHMpKSB7CisgICAgICAgICAgICAgICAgY29weVBy
b3BzVG8oZGVmYXVsdFByb3BzLCBwcm9wcyk7CisgICAgICAgICAgICAgICAgdk5vZGUucHJvcHMg
PSBwcm9wczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IGNyZWF0
ZVN0YXRlZnVsQ29tcG9uZW50SW5zdGFuY2Uodk5vZGUsIHR5cGUsIHByb3BzLCBjb250ZXh0LCBf
aXNTVkcsIGRldlRvb2xzU3RhdHVzKTsKKyAgICAgICAgICAgIHZhciBpbnB1dCA9IGluc3RhbmNl
Ll9sYXN0SW5wdXQ7CisgICAgICAgICAgICB2YXIgZmFzdFVubW91bnQgPSBsaWZlY3ljbGUuZmFz
dFVubW91bnQ7CisgICAgICAgICAgICAvLyB3ZSBzdG9yZSB0aGUgZmFzdFVubW91bnQgdmFsdWUs
IGJ1dCB3ZSBzZXQgaXQgYmFjayB0byB0cnVlIG9uIHRoZSBsaWZlY3ljbGUKKyAgICAgICAgICAg
IC8vIHdlIGRvIHRoaXMgc28gd2UgY2FuIGRldGVybWluZSBpZiB0aGUgY29tcG9uZW50IHJlbmRl
ciBoYXMgYSBmYXN0VW5tb3VudCBvciBub3QgICAgICAKKyAgICAgICAgICAgIGxpZmVjeWNsZS5m
YXN0VW5tb3VudCA9IHRydWU7CisgICAgICAgICAgICBpbnN0YW5jZS5fdkNvbXBvbmVudCA9IHZO
b2RlOworICAgICAgICAgICAgaW5zdGFuY2UuX3ZOb2RlID0gdk5vZGU7CisgICAgICAgICAgICBo
eWRyYXRlKGlucHV0LCBkb20sIGxpZmVjeWNsZSwgaW5zdGFuY2UuX2NoaWxkQ29udGV4dCwgX2lz
U1ZHKTsKKyAgICAgICAgICAgIHZhciBzdWJMaWZlY3ljbGUgPSBpbnN0YW5jZS5fbGlmZWN5Y2xl
ID0gbmV3IExpZmVjeWNsZSgpOworICAgICAgICAgICAgc3ViTGlmZWN5Y2xlLmZhc3RVbm1vdW50
ID0gbGlmZWN5Y2xlLmZhc3RVbm1vdW50OworICAgICAgICAgICAgLy8gd2UgdGhlbiBzZXQgdGhl
IGxpZmVjeWNsZSBmYXN0VW5tb3VudCB2YWx1ZSBiYWNrIHRvIHdoYXQgaXQgd2FzIGJlZm9yZSB0
aGUgbW91bnQKKyAgICAgICAgICAgIGxpZmVjeWNsZS5mYXN0VW5tb3VudCA9IGZhc3RVbm1vdW50
OworICAgICAgICAgICAgbW91bnRTdGF0ZWZ1bENvbXBvbmVudENhbGxiYWNrcyhyZWYsIGluc3Rh
bmNlLCBsaWZlY3ljbGUpOworICAgICAgICAgICAgZmluZERPTU5vZGVFbmFibGVkICYmIGNvbXBv
bmVudFRvRE9NTm9kZU1hcC5zZXQoaW5zdGFuY2UsIGRvbSk7CisgICAgICAgICAgICB2Tm9kZS5j
aGlsZHJlbiA9IGluc3RhbmNlOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgdmFyIGlucHV0JDEgPSBjcmVhdGVTdGF0ZWxlc3NDb21wb25lbnRJbnB1dCh2Tm9kZSwgdHlw
ZSwgcHJvcHMsIGNvbnRleHQpOworICAgICAgICAgICAgaHlkcmF0ZShpbnB1dCQxLCBkb20sIGxp
ZmVjeWNsZSwgY29udGV4dCwgaXNTVkcpOworICAgICAgICAgICAgdk5vZGUuY2hpbGRyZW4gPSBp
bnB1dCQxOworICAgICAgICAgICAgdk5vZGUuZG9tID0gaW5wdXQkMS5kb207CisgICAgICAgICAg
ICBtb3VudFN0YXRlbGVzc0NvbXBvbmVudENhbGxiYWNrcyhyZWYsIGRvbSwgbGlmZWN5Y2xlKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBmdW5jdGlvbiBoeWRyYXRlRWxlbWVudCh2Tm9kZSwgZG9t
LCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHKSB7CisgICAgICAgIHZhciB0YWcgPSB2Tm9kZS50
eXBlOworICAgICAgICB2YXIgY2hpbGRyZW4gPSB2Tm9kZS5jaGlsZHJlbjsKKyAgICAgICAgdmFy
IHByb3BzID0gdk5vZGUucHJvcHM7CisgICAgICAgIHZhciBldmVudHMgPSB2Tm9kZS5ldmVudHM7
CisgICAgICAgIHZhciBmbGFncyA9IHZOb2RlLmZsYWdzOworICAgICAgICBpZiAoaXNTVkcgfHwg
KGZsYWdzICYgMTI4IC8qIFN2Z0VsZW1lbnQgKi8pKSB7CisgICAgICAgICAgICBpc1NWRyA9IHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRvbS5ub2RlVHlwZSAhPT0gMSB8fCBkb20udGFn
TmFtZS50b0xvd2VyQ2FzZSgpICE9PSB0YWcpIHsKKyAgICAgICAgICAgIHZhciBuZXdEb20gPSBt
b3VudEVsZW1lbnQodk5vZGUsIG51bGwsIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcpOworICAg
ICAgICAgICAgdk5vZGUuZG9tID0gbmV3RG9tOworICAgICAgICAgICAgcmVwbGFjZUNoaWxkKGRv
bS5wYXJlbnROb2RlLCBuZXdEb20sIGRvbSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICB2Tm9kZS5kb20gPSBkb207CisgICAgICAgICAgICBpZiAoY2hpbGRyZW4pIHsK
KyAgICAgICAgICAgICAgICBoeWRyYXRlQ2hpbGRyZW4oY2hpbGRyZW4sIGRvbSwgbGlmZWN5Y2xl
LCBjb250ZXh0LCBpc1NWRyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIShmbGFn
cyAmIDIgLyogSHRtbEVsZW1lbnQgKi8pKSB7CisgICAgICAgICAgICAgICAgcHJvY2Vzc0VsZW1l
bnQoZmxhZ3MsIHZOb2RlLCBkb20pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh2
YXIgcHJvcCBpbiBwcm9wcykgeworICAgICAgICAgICAgICAgIHBhdGNoUHJvcChwcm9wLCBudWxs
LCBwcm9wc1twcm9wXSwgZG9tLCBpc1NWRywgbGlmZWN5Y2xlKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gZXZlbnRzKSB7CisgICAgICAgICAgICAgICAgcGF0
Y2hFdmVudChuYW1lLCBudWxsLCBldmVudHNbbmFtZV0sIGRvbSwgbGlmZWN5Y2xlKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBmdW5jdGlvbiBoeWRyYXRlQ2hpbGRyZW4o
Y2hpbGRyZW4sIGRvbSwgbGlmZWN5Y2xlLCBjb250ZXh0LCBpc1NWRykgeworICAgICAgICBub3Jt
YWxpc2VDaGlsZE5vZGVzKGRvbSk7CisgICAgICAgIHZhciBkb21Ob2RlcyA9IEFycmF5LnByb3Rv
dHlwZS5zbGljZS5jYWxsKGRvbS5jaGlsZE5vZGVzKTsKKyAgICAgICAgdmFyIGNoaWxkTm9kZUlu
ZGV4ID0gMDsKKyAgICAgICAgaWYgKGlzQXJyYXkoY2hpbGRyZW4pKSB7CisgICAgICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAg
ICAgdmFyIGNoaWxkID0gY2hpbGRyZW5baV07CisgICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0
KGNoaWxkKSAmJiAhaXNOdWxsKGNoaWxkKSkgeworICAgICAgICAgICAgICAgICAgICBoeWRyYXRl
KGNoaWxkLCBkb21Ob2Rlc1tjaGlsZE5vZGVJbmRleCsrXSwgbGlmZWN5Y2xlLCBjb250ZXh0LCBp
c1NWRyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKGlzT2JqZWN0KGNoaWxkcmVuKSkgeworICAgICAgICAgICAgaHlkcmF0ZShj
aGlsZHJlbiwgZG9tLmZpcnN0Q2hpbGQsIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcpOworICAg
ICAgICB9CisgICAgfQorICAgIGZ1bmN0aW9uIGh5ZHJhdGVUZXh0KHZOb2RlLCBkb20pIHsKKyAg
ICAgICAgaWYgKGRvbS5ub2RlVHlwZSA9PT0gMykgeworICAgICAgICAgICAgdmFyIG5ld0RvbSA9
IG1vdW50VGV4dCh2Tm9kZSwgbnVsbCk7CisgICAgICAgICAgICB2Tm9kZS5kb20gPSBuZXdEb207
CisgICAgICAgICAgICByZXBsYWNlQ2hpbGQoZG9tLnBhcmVudE5vZGUsIG5ld0RvbSwgZG9tKTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZOb2RlLmRvbSA9IGRvbTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBmdW5jdGlvbiBoeWRyYXRlVm9pZCh2Tm9kZSwgZG9tKSB7
CisgICAgICAgIHZOb2RlLmRvbSA9IGRvbTsKKyAgICB9CisgICAgZnVuY3Rpb24gaHlkcmF0ZSh2
Tm9kZSwgZG9tLCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHKSB7CisgICAgICAgIGlmIChmYWxz
ZSkgeworICAgICAgICAgICAgaWYgKGlzSW52YWxpZChkb20pKSB7CisgICAgICAgICAgICAgICAg
dGhyb3dFcnJvcigiZmFpbGVkIHRvIGh5ZHJhdGUuIFRoZSBzZXJ2ZXItc2lkZSByZW5kZXIgZG9l
c24ndCBtYXRjaCBjbGllbnQgc2lkZS4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICB2YXIgZmxhZ3MgPSB2Tm9kZS5mbGFnczsKKyAgICAgICAgaWYgKGZsYWdzICYgMjggLyog
Q29tcG9uZW50ICovKSB7CisgICAgICAgICAgICByZXR1cm4gaHlkcmF0ZUNvbXBvbmVudCh2Tm9k
ZSwgZG9tLCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHLCBmbGFncyAmIDQgLyogQ29tcG9uZW50
Q2xhc3MgKi8pOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGZsYWdzICYgMzk3MCAvKiBF
bGVtZW50ICovKSB7CisgICAgICAgICAgICByZXR1cm4gaHlkcmF0ZUVsZW1lbnQodk5vZGUsIGRv
bSwgbGlmZWN5Y2xlLCBjb250ZXh0LCBpc1NWRyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBp
ZiAoZmxhZ3MgJiAxIC8qIFRleHQgKi8pIHsKKyAgICAgICAgICAgIHJldHVybiBoeWRyYXRlVGV4
dCh2Tm9kZSwgZG9tKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChmbGFncyAmIDQwOTYg
LyogVm9pZCAqLykgeworICAgICAgICAgICAgcmV0dXJuIGh5ZHJhdGVWb2lkKHZOb2RlLCBkb20p
OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKGZhbHNlKSB7Cisg
ICAgICAgICAgICAgICAgdGhyb3dFcnJvcigoImh5ZHJhdGUoKSBleHBlY3RzIGEgdmFsaWQgVk5v
ZGUsIGluc3RlYWQgaXQgcmVjZWl2ZWQgYW4gb2JqZWN0IHdpdGggdGhlIHR5cGUgXCIiICsgKHR5
cGVvZiB2Tm9kZSkgKyAiXCIuIikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhyb3dF
cnJvcigpOworICAgICAgICB9CisgICAgfQorICAgIGZ1bmN0aW9uIGh5ZHJhdGVSb290KGlucHV0
LCBwYXJlbnREb20sIGxpZmVjeWNsZSkgeworICAgICAgICBpZiAocGFyZW50RG9tICYmIHBhcmVu
dERvbS5ub2RlVHlwZSA9PT0gMSAmJiBwYXJlbnREb20uZmlyc3RDaGlsZCkgeworICAgICAgICAg
ICAgaHlkcmF0ZShpbnB1dCwgcGFyZW50RG9tLmZpcnN0Q2hpbGQsIGxpZmVjeWNsZSwge30sIGZh
bHNlKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICAvLyByYXRoZXIgdGhhbiB1c2UgYSBNYXAsIGxpa2Ugd2Ug
ZGlkIGJlZm9yZSwgd2UgY2FuIHVzZSBhbiBhcnJheSBoZXJlCisgICAgLy8gZ2l2ZW4gdGhlcmUg
c2hvdWxkbid0IGJlIFRIQVQgbWFueSByb290cyBvbiB0aGUgcGFnZSwgdGhlIGRpZmZlcmVuY2UK
KyAgICAvLyBpbiBwZXJmb3JtYW5jZSBpcyBodWdlOiBodHRwczovL2VzYmVuY2guY29tL2JlbmNo
LzU4MDJhNjkxMzMwYWIwOTkwMGExYTJkYQorICAgIHZhciByb290cyA9IFtdOworICAgIHZhciBj
b21wb25lbnRUb0RPTU5vZGVNYXAgPSBuZXcgTWFwKCk7CisgICAgdmFyIGZpbmRET01Ob2RlRW5h
YmxlZCA9IGZhbHNlOworICAgIGZ1bmN0aW9uIGVuYWJsZUZpbmRET01Ob2RlKCkgeworICAgICAg
ICBmaW5kRE9NTm9kZUVuYWJsZWQgPSB0cnVlOworICAgIH0KKyAgICBmdW5jdGlvbiBmaW5kRE9N
Tm9kZShyZWYpIHsKKyAgICAgICAgaWYgKCFmaW5kRE9NTm9kZUVuYWJsZWQpIHsKKyAgICAgICAg
ICAgIGlmIChmYWxzZSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3IoJ2ZpbmRET01Ob2Rl
KCkgaGFzIGJlZW4gZGlzYWJsZWQsIHVzZSBlbmFibGVGaW5kRE9NTm9kZSgpIGVuYWJsZWQgZmlu
ZERPTU5vZGUoKS4gV2FybmluZyB0aGlzIGNhbiBzaWduaWZpY2FudGx5IGltcGFjdCBwZXJmb3Jt
YW5jZSEnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRocm93RXJyb3IoKTsKKyAgICAg
ICAgfQorICAgICAgICB2YXIgZG9tID0gcmVmICYmIHJlZi5ub2RlVHlwZSA/IHJlZiA6IG51bGw7
CisgICAgICAgIHJldHVybiBjb21wb25lbnRUb0RPTU5vZGVNYXAuZ2V0KHJlZikgfHwgZG9tOwor
ICAgIH0KKyAgICBmdW5jdGlvbiBnZXRSb290KGRvbSkgeworICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHJvb3RzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgcm9vdCA9IHJvb3Rz
W2ldOworICAgICAgICAgICAgaWYgKHJvb3QuZG9tID09PSBkb20pIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gcm9vdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
bnVsbDsKKyAgICB9CisgICAgZnVuY3Rpb24gc2V0Um9vdChkb20sIGlucHV0LCBsaWZlY3ljbGUp
IHsKKyAgICAgICAgcm9vdHMucHVzaCh7CisgICAgICAgICAgICBkb206IGRvbSwKKyAgICAgICAg
ICAgIGlucHV0OiBpbnB1dCwKKyAgICAgICAgICAgIGxpZmVjeWNsZTogbGlmZWN5Y2xlCisgICAg
ICAgIH0pOworICAgIH0KKyAgICBmdW5jdGlvbiByZW1vdmVSb290KHJvb3QpIHsKKyAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCByb290cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYg
KHJvb3RzW2ldID09PSByb290KSB7CisgICAgICAgICAgICAgICAgcm9vdHMuc3BsaWNlKGksIDEp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICB2YXIgZG9jdW1lbnRCb2R5ID0gaXNCcm93c2VyID8gZG9jdW1lbnQuYm9keSA6IG51
bGw7CisgICAgZnVuY3Rpb24gcmVuZGVyKGlucHV0LCBwYXJlbnREb20pIHsKKyAgICAgICAgaWYg
KGRvY3VtZW50Qm9keSA9PT0gcGFyZW50RG9tKSB7CisgICAgICAgICAgICBpZiAoZmFsc2UpIHsK
KyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKCd5b3UgY2Fubm90IHJlbmRlcigpIHRvIHRoZSAi
ZG9jdW1lbnQuYm9keSIuIFVzZSBhbiBlbXB0eSBlbGVtZW50IGFzIGEgY29udGFpbmVyIGluc3Rl
YWQuJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aHJvd0Vycm9yKCk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGlucHV0ID09PSBOT19PUCkgeworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIHZhciByb290ID0gZ2V0Um9vdChwYXJlbnREb20pOworICAgICAg
ICBpZiAoaXNOdWxsKHJvb3QpKSB7CisgICAgICAgICAgICB2YXIgbGlmZWN5Y2xlID0gbmV3IExp
ZmVjeWNsZSgpOworICAgICAgICAgICAgaWYgKCFpc0ludmFsaWQoaW5wdXQpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGlucHV0LmRvbSkgeworICAgICAgICAgICAgICAgICAgICBpbnB1dCA9IGNs
b25lVk5vZGUoaW5wdXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
IWh5ZHJhdGVSb290KGlucHV0LCBwYXJlbnREb20sIGxpZmVjeWNsZSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgbW91bnQoaW5wdXQsIHBhcmVudERvbSwgbGlmZWN5Y2xlLCB7fSwgZmFsc2UpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsaWZlY3ljbGUudHJpZ2dlcigpOwor
ICAgICAgICAgICAgICAgIHNldFJvb3QocGFyZW50RG9tLCBpbnB1dCwgbGlmZWN5Y2xlKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBs
aWZlY3ljbGUkMSA9IHJvb3QubGlmZWN5Y2xlOworICAgICAgICAgICAgbGlmZWN5Y2xlJDEubGlz
dGVuZXJzID0gW107CisgICAgICAgICAgICBpZiAoaXNOdWxsT3JVbmRlZihpbnB1dCkpIHsKKyAg
ICAgICAgICAgICAgICB1bm1vdW50KHJvb3QuaW5wdXQsIHBhcmVudERvbSwgbGlmZWN5Y2xlJDEs
IGZhbHNlLCBmYWxzZSwgZmFsc2UpOworICAgICAgICAgICAgICAgIHJlbW92ZVJvb3Qocm9vdCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAo
aW5wdXQuZG9tKSB7CisgICAgICAgICAgICAgICAgICAgIGlucHV0ID0gY2xvbmVWTm9kZShpbnB1
dCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHBhdGNoKHJvb3QuaW5wdXQs
IGlucHV0LCBwYXJlbnREb20sIGxpZmVjeWNsZSQxLCB7fSwgZmFsc2UsIGZhbHNlKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGxpZmVjeWNsZSQxLnRyaWdnZXIoKTsKKyAgICAgICAgICAg
IHJvb3QuaW5wdXQgPSBpbnB1dDsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGV2VG9vbHNTdGF0
dXMuY29ubmVjdGVkKSB7CisgICAgICAgICAgICBzZW5kUm9vdHMod2luZG93KTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBmdW5jdGlvbiBjcmVhdGVSZW5kZXJlcigpIHsKKyAgICAgICAgdmFyIHBh
cmVudERvbTsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHJlbmRlcmVyKGxhc3RJbnB1dCwgbmV4
dElucHV0KSB7CisgICAgICAgICAgICBpZiAoIXBhcmVudERvbSkgeworICAgICAgICAgICAgICAg
IHBhcmVudERvbSA9IGxhc3RJbnB1dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlbmRl
cihuZXh0SW5wdXQsIHBhcmVudERvbSk7CisgICAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rp
b24gbGlua0V2ZW50KGRhdGEsIGV2ZW50KSB7CisgICAgICAgIHJldHVybiB7IGRhdGE6IGRhdGEs
IGV2ZW50OiBldmVudCB9OworICAgIH0KKworICAgIGlmIChpc0Jyb3dzZXIpIHsKKyAgICAgICAg
d2luZG93LnByb2Nlc3MgPSB7CisgICAgICAgICAgICBlbnY6IHsKKyAgICAgICAgICAgICAgICBO
T0RFX0VOVjogJ2RldmVsb3BtZW50JworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAg
ICBpbml0RGV2VG9vbHNIb29rcyh3aW5kb3cpOworICAgIH0KKworICAgIGlmIChmYWxzZSkgewor
ICAgICAgICB2YXIgdGVzdEZ1bmMgPSBmdW5jdGlvbiB0ZXN0Rm4oKSB7fTsKKyAgICAgICAgd2Fy
bmluZygKKyAgICAgICAgICAgICh0ZXN0RnVuYy5uYW1lIHx8IHRlc3RGdW5jLnRvU3RyaW5nKCkp
LmluZGV4T2YoJ3Rlc3RGbicpICE9PSAtMSwKKyAgICAgICAgICAgICdJdCBsb29rcyBsaWtlIHlv
dVwncmUgdXNpbmcgYSBtaW5pZmllZCBjb3B5IG9mIHRoZSBkZXZlbG9wbWVudCBidWlsZCAnICsK
KyAgICAgICAgICAgICdvZiBJbmZlcm5vLiBXaGVuIGRlcGxveWluZyBJbmZlcm5vIGFwcHMgdG8g
cHJvZHVjdGlvbiwgbWFrZSBzdXJlIHRvIHVzZSAnICsKKyAgICAgICAgICAgICd0aGUgcHJvZHVj
dGlvbiBidWlsZCB3aGljaCBza2lwcyBkZXZlbG9wbWVudCB3YXJuaW5ncyBhbmQgaXMgZmFzdGVy
LiAnICsKKyAgICAgICAgICAgICdTZWUgaHR0cDovL2luZmVybm9qcy5vcmcgZm9yIG1vcmUgZGV0
YWlscy4nCisgICAgICAgICk7CisgICAgfQorCisgICAgLy8gd2UgZHVwbGljYXRlIGl0IHNvIGl0
IHBsYXlzIG5pY2VseSB3aXRoIGRpZmZlcmVudCBtb2R1bGUgbG9hZGluZyBzeXN0ZW1zCisgICAg
dmFyIGluZGV4ID0geworICAgICAgICBsaW5rRXZlbnQ6IGxpbmtFdmVudCwKKyAgICAgICAgLy8g
Y29yZSBzaGFwZXMKKyAgICAgICAgY3JlYXRlVk5vZGU6IGNyZWF0ZVZOb2RlLAorCisgICAgICAg
IC8vIGNsb25pbmcKKyAgICAgICAgY2xvbmVWTm9kZTogY2xvbmVWTm9kZSwKKworICAgICAgICAv
LyB1c2VkIHRvIHNoYXJlZCBjb21tb24gaXRlbXMgYmV0d2VlbiBJbmZlcm5vIGxpYnMKKyAgICAg
ICAgTk9fT1A6IE5PX09QLAorICAgICAgICBFTVBUWV9PQko6IEVNUFRZX09CSiwKKworICAgICAg
ICAvL0RPTQorICAgICAgICByZW5kZXI6IHJlbmRlciwKKyAgICAgICAgZmluZERPTU5vZGU6IGZp
bmRET01Ob2RlLAorICAgICAgICBjcmVhdGVSZW5kZXJlcjogY3JlYXRlUmVuZGVyZXIsCisgICAg
ICAgIGRpc2FibGVSZWN5Y2xpbmc6IGRpc2FibGVSZWN5Y2xpbmcsCisgICAgICAgIGVuYWJsZUZp
bmRET01Ob2RlOiBlbmFibGVGaW5kRE9NTm9kZQorICAgIH07CisKKyAgICBleHBvcnRzWydkZWZh
dWx0J10gPSBpbmRleDsKKyAgICBleHBvcnRzLmxpbmtFdmVudCA9IGxpbmtFdmVudDsKKyAgICBl
eHBvcnRzLmNyZWF0ZVZOb2RlID0gY3JlYXRlVk5vZGU7CisgICAgZXhwb3J0cy5jbG9uZVZOb2Rl
ID0gY2xvbmVWTm9kZTsKKyAgICBleHBvcnRzLk5PX09QID0gTk9fT1A7CisgICAgZXhwb3J0cy5F
TVBUWV9PQkogPSBFTVBUWV9PQko7CisgICAgZXhwb3J0cy5yZW5kZXIgPSByZW5kZXI7CisgICAg
ZXhwb3J0cy5maW5kRE9NTm9kZSA9IGZpbmRET01Ob2RlOworICAgIGV4cG9ydHMuY3JlYXRlUmVu
ZGVyZXIgPSBjcmVhdGVSZW5kZXJlcjsKKyAgICBleHBvcnRzLmRpc2FibGVSZWN5Y2xpbmcgPSBk
aXNhYmxlUmVjeWNsaW5nOworICAgIGV4cG9ydHMuZW5hYmxlRmluZERPTU5vZGUgPSBlbmFibGVG
aW5kRE9NTm9kZTsKKworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01v
ZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7CisKKyAgICB9KSkpOworCisKKy8qKiovIH0sCisvKiAz
ICovCisvKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18p
IHsKKworICAgIG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTsKKworCisv
KioqLyB9LAorLyogNCAqLworLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBh
Y2tfcmVxdWlyZV9fKSB7CisKKyAgICAvKiEKKyAgICAgKiBpbmZlcm5vLWNvbXBvbmVudCB2MS4w
LjAtYmV0YTMyCisgICAgICogKGMpIDIwMTYgRG9taW5pYyBHYW5uYXdheQorICAgICAqIFJlbGVh
c2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4KKyAgICAgKi8KKyAgICAoZnVuY3Rpb24gKGdsb2Jh
bCwgZmFjdG9yeSkgeworICAgICAgICAgdHJ1ZSA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShf
X3dlYnBhY2tfcmVxdWlyZV9fKDIpKSA6CisgICAgICAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5j
dGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2luZmVybm8nXSwgZmFjdG9yeSkgOgorICAg
ICAgICAoZ2xvYmFsLkluZmVybm8gPSBnbG9iYWwuSW5mZXJubyB8fCB7fSwgZ2xvYmFsLkluZmVy
bm8uQ29tcG9uZW50ID0gZmFjdG9yeShnbG9iYWwuSW5mZXJubykpOworICAgIH0odGhpcywgKGZ1
bmN0aW9uIChpbmZlcm5vKSB7ICd1c2Ugc3RyaWN0JzsKKworICAgIHZhciBFUlJPUl9NU0cgPSAn
YSBydW50aW1lIGVycm9yIG9jY3VyZWQhIFVzZSBJbmZlcm5vIGluIGRldmVsb3BtZW50IGVudmly
b25tZW50IHRvIGZpbmQgdGhlIGVycm9yLic7CisKKworICAgIC8vIHRoaXMgaXMgTVVDSCBmYXN0
ZXIgdGhhbiAuY29uc3RydWN0b3IgPT09IEFycmF5IGFuZCBpbnN0YW5jZW9mIEFycmF5CisgICAg
Ly8gaW4gTm9kZSA3IGFuZCB0aGUgbGF0ZXIgdmVyc2lvbnMgb2YgVjgsIHNsb3dlciBpbiBvbGRl
ciB2ZXJzaW9ucyB0aG91Z2gKKyAgICB2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7CisKKwor
ICAgIGZ1bmN0aW9uIGlzTnVsbE9yVW5kZWYob2JqKSB7CisgICAgICAgIHJldHVybiBpc1VuZGVm
aW5lZChvYmopIHx8IGlzTnVsbChvYmopOworICAgIH0KKyAgICBmdW5jdGlvbiBpc0ludmFsaWQo
b2JqKSB7CisgICAgICAgIHJldHVybiBpc051bGwob2JqKSB8fCBvYmogPT09IGZhbHNlIHx8IGlz
VHJ1ZShvYmopIHx8IGlzVW5kZWZpbmVkKG9iaik7CisgICAgfQorICAgIGZ1bmN0aW9uIGlzRnVu
Y3Rpb24ob2JqKSB7CisgICAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nOwor
ICAgIH0KKworCisKKyAgICBmdW5jdGlvbiBpc051bGwob2JqKSB7CisgICAgICAgIHJldHVybiBv
YmogPT09IG51bGw7CisgICAgfQorICAgIGZ1bmN0aW9uIGlzVHJ1ZShvYmopIHsKKyAgICAgICAg
cmV0dXJuIG9iaiA9PT0gdHJ1ZTsKKyAgICB9CisgICAgZnVuY3Rpb24gaXNVbmRlZmluZWQob2Jq
KSB7CisgICAgICAgIHJldHVybiBvYmogPT09IHVuZGVmaW5lZDsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiB0aHJvd0Vycm9yKG1lc3NhZ2UpIHsKKyAgICAgICAgaWYgKCFtZXNzYWdlKSB7CisgICAg
ICAgICAgICBtZXNzYWdlID0gRVJST1JfTVNHOworICAgICAgICB9CisgICAgICAgIHRocm93IG5l
dyBFcnJvcigoIkluZmVybm8gRXJyb3I6ICIgKyBtZXNzYWdlKSk7CisgICAgfQorCisgICAgdmFy
IExpZmVjeWNsZSA9IGZ1bmN0aW9uIExpZmVjeWNsZSgpIHsKKyAgICAgICAgdGhpcy5saXN0ZW5l
cnMgPSBbXTsKKyAgICAgICAgdGhpcy5mYXN0VW5tb3VudCA9IHRydWU7CisgICAgfTsKKyAgICBM
aWZlY3ljbGUucHJvdG90eXBlLmFkZExpc3RlbmVyID0gZnVuY3Rpb24gYWRkTGlzdGVuZXIgKGNh
bGxiYWNrKSB7CisgICAgICAgIHRoaXMubGlzdGVuZXJzLnB1c2goY2FsbGJhY2spOworICAgIH07
CisgICAgTGlmZWN5Y2xlLnByb3RvdHlwZS50cmlnZ2VyID0gZnVuY3Rpb24gdHJpZ2dlciAoKSB7
CisgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpczsKKworICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHRoaXMubGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB0aGlzJDEu
bGlzdGVuZXJzW2ldKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdmFyIG5vT3AgPSBFUlJP
Ul9NU0c7CisgICAgaWYgKGZhbHNlKSB7CisgICAgICAgIG5vT3AgPSAnSW5mZXJubyBFcnJvcjog
Q2FuIG9ubHkgdXBkYXRlIGEgbW91bnRlZCBvciBtb3VudGluZyBjb21wb25lbnQuIFRoaXMgdXN1
YWxseSBtZWFucyB5b3UgY2FsbGVkIHNldFN0YXRlKCkgb3IgZm9yY2VVcGRhdGUoKSBvbiBhbiB1
bm1vdW50ZWQgY29tcG9uZW50LiBUaGlzIGlzIGEgbm8tb3AuJzsKKyAgICB9CisgICAgdmFyIGNv
bXBvbmVudENhbGxiYWNrUXVldWUgPSBuZXcgTWFwKCk7CisgICAgLy8gd2hlbiBhIGNvbXBvbmVu
dHMgcm9vdCBWTm9kZSBpcyBhbHNvIGEgY29tcG9uZW50LCB3ZSBjYW4gcnVuIGludG8gaXNzdWVz
CisgICAgLy8gdGhpcyB3aWxsIHJlY3Vyc2l2ZWx5IGxvb2sgZm9yIHZOb2RlLnBhcmVudE5vZGUg
aWYgdGhlIFZOb2RlIGlzIGEgY29tcG9uZW50CisgICAgZnVuY3Rpb24gdXBkYXRlUGFyZW50Q29t
cG9uZW50Vk5vZGVzKHZOb2RlLCBkb20pIHsKKyAgICAgICAgaWYgKHZOb2RlLmZsYWdzICYgMjgg
LyogQ29tcG9uZW50ICovKSB7CisgICAgICAgICAgICB2YXIgcGFyZW50Vk5vZGUgPSB2Tm9kZS5w
YXJlbnRWTm9kZTsKKyAgICAgICAgICAgIGlmIChwYXJlbnRWTm9kZSkgeworICAgICAgICAgICAg
ICAgIHBhcmVudFZOb2RlLmRvbSA9IGRvbTsKKyAgICAgICAgICAgICAgICB1cGRhdGVQYXJlbnRD
b21wb25lbnRWTm9kZXMocGFyZW50Vk5vZGUsIGRvbSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgLy8gdGhpcyBpcyBpbiBzaGFwZXMgdG9vLCBidXQgd2UgZG9uJ3Qgd2Fu
dCB0byBpbXBvcnQgZnJvbSBzaGFwZXMgYXMgaXQgd2lsbCBwdWxsIGluIGEgZHVwbGljYXRlIG9m
IGNyZWF0ZVZOb2RlCisgICAgZnVuY3Rpb24gY3JlYXRlVm9pZFZOb2RlKCkgeworICAgICAgICBy
ZXR1cm4gaW5mZXJuby5jcmVhdGVWTm9kZSg0MDk2IC8qIFZvaWQgKi8pOworICAgIH0KKyAgICBm
dW5jdGlvbiBhZGRUb1F1ZXVlKGNvbXBvbmVudCwgZm9yY2UsIGNhbGxiYWNrKSB7CisgICAgICAg
IC8vIFRPRE8gdGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSByZXZpc2VkIGFuZCBpbXByb3ZlZCBv
bgorICAgICAgICB2YXIgcXVldWUgPSBjb21wb25lbnRDYWxsYmFja1F1ZXVlLmdldChjb21wb25l
bnQpOworICAgICAgICBpZiAoIXF1ZXVlKSB7CisgICAgICAgICAgICBxdWV1ZSA9IFtdOworICAg
ICAgICAgICAgY29tcG9uZW50Q2FsbGJhY2tRdWV1ZS5zZXQoY29tcG9uZW50LCBxdWV1ZSk7Cisg
ICAgICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgICAgICBhcHBseVN0YXRlKGNvbXBvbmVudCwgZm9yY2UsIGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcXVldWVbaV0oKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGNvbXBvbmVudENhbGxiYWNr
UXVldWUuZGVsZXRlKGNvbXBvbmVudCk7CisgICAgICAgICAgICAgICAgY29tcG9uZW50Ll9wcm9j
ZXNzaW5nU2V0U3RhdGUgPSBmYWxzZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAg
ICAgIGlmIChjYWxsYmFjaykgeworICAgICAgICAgICAgcXVldWUucHVzaChjYWxsYmFjayk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgZnVuY3Rpb24gcXVldWVTdGF0ZUNoYW5nZXMoY29tcG9uZW50
LCBuZXdTdGF0ZSwgY2FsbGJhY2spIHsKKyAgICAgICAgaWYgKGlzRnVuY3Rpb24obmV3U3RhdGUp
KSB7CisgICAgICAgICAgICBuZXdTdGF0ZSA9IG5ld1N0YXRlKGNvbXBvbmVudC5zdGF0ZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgc3RhdGVLZXkgaW4gbmV3U3RhdGUpIHsKKyAgICAg
ICAgICAgIGNvbXBvbmVudC5fcGVuZGluZ1N0YXRlW3N0YXRlS2V5XSA9IG5ld1N0YXRlW3N0YXRl
S2V5XTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWNvbXBvbmVudC5fcGVuZGluZ1NldFN0YXRl
KSB7CisgICAgICAgICAgICBpZiAoY29tcG9uZW50Ll9wcm9jZXNzaW5nU2V0U3RhdGUgfHwgY2Fs
bGJhY2spIHsKKyAgICAgICAgICAgICAgICBhZGRUb1F1ZXVlKGNvbXBvbmVudCwgZmFsc2UsIGNh
bGxiYWNrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgIGNvbXBvbmVudC5fcGVuZGluZ1NldFN0YXRlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBj
b21wb25lbnQuX3Byb2Nlc3NpbmdTZXRTdGF0ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgYXBw
bHlTdGF0ZShjb21wb25lbnQsIGZhbHNlLCBjYWxsYmFjayk7CisgICAgICAgICAgICAgICAgY29t
cG9uZW50Ll9wcm9jZXNzaW5nU2V0U3RhdGUgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGNvbXBvbmVudC5zdGF0ZSA9IE9iamVj
dC5hc3NpZ24oe30sIGNvbXBvbmVudC5zdGF0ZSwgY29tcG9uZW50Ll9wZW5kaW5nU3RhdGUpOwor
ICAgICAgICAgICAgY29tcG9uZW50Ll9wZW5kaW5nU3RhdGUgPSB7fTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBmdW5jdGlvbiBhcHBseVN0YXRlKGNvbXBvbmVudCwgZm9yY2UsIGNhbGxiYWNrKSB7
CisgICAgICAgIGlmICgoIWNvbXBvbmVudC5fZGVmZXJTZXRTdGF0ZSB8fCBmb3JjZSkgJiYgIWNv
bXBvbmVudC5fYmxvY2tSZW5kZXIpIHsKKyAgICAgICAgICAgIGNvbXBvbmVudC5fcGVuZGluZ1Nl
dFN0YXRlID0gZmFsc2U7CisgICAgICAgICAgICB2YXIgcGVuZGluZ1N0YXRlID0gY29tcG9uZW50
Ll9wZW5kaW5nU3RhdGU7CisgICAgICAgICAgICB2YXIgcHJldlN0YXRlID0gY29tcG9uZW50LnN0
YXRlOworICAgICAgICAgICAgdmFyIG5leHRTdGF0ZSA9IE9iamVjdC5hc3NpZ24oe30sIHByZXZT
dGF0ZSwgcGVuZGluZ1N0YXRlKTsKKyAgICAgICAgICAgIHZhciBwcm9wcyA9IGNvbXBvbmVudC5w
cm9wczsKKyAgICAgICAgICAgIHZhciBjb250ZXh0ID0gY29tcG9uZW50LmNvbnRleHQ7CisgICAg
ICAgICAgICBjb21wb25lbnQuX3BlbmRpbmdTdGF0ZSA9IHt9OworICAgICAgICAgICAgdmFyIG5l
eHRJbnB1dCA9IGNvbXBvbmVudC5fdXBkYXRlQ29tcG9uZW50KHByZXZTdGF0ZSwgbmV4dFN0YXRl
LCBwcm9wcywgcHJvcHMsIGNvbnRleHQsIGZvcmNlKTsKKyAgICAgICAgICAgIHZhciBkaWRVcGRh
dGUgPSB0cnVlOworICAgICAgICAgICAgaWYgKGlzSW52YWxpZChuZXh0SW5wdXQpKSB7CisgICAg
ICAgICAgICAgICAgbmV4dElucHV0ID0gY3JlYXRlVm9pZFZOb2RlKCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIGlmIChpc0FycmF5KG5leHRJbnB1dCkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoZmFsc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcignYSB2YWxp
ZCBJbmZlcm5vIFZOb2RlIChvciBudWxsKSBtdXN0IGJlIHJldHVybmVkIGZyb20gYSBjb21wb25l
bnQgcmVuZGVyLiBZb3UgbWF5IGhhdmUgcmV0dXJuZWQgYW4gYXJyYXkgb3IgYW4gaW52YWxpZCBv
YmplY3QuJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRocm93RXJyb3Io
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG5leHRJbnB1dCA9PT0gaW5m
ZXJuby5OT19PUCkgeworICAgICAgICAgICAgICAgIG5leHRJbnB1dCA9IGNvbXBvbmVudC5fbGFz
dElucHV0OworICAgICAgICAgICAgICAgIGRpZFVwZGF0ZSA9IGZhbHNlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgdmFyIGxhc3RJbnB1dCA9IGNvbXBvbmVudC5fbGFzdElucHV0OworICAg
ICAgICAgICAgdmFyIHBhcmVudERvbSA9IGxhc3RJbnB1dC5kb20ucGFyZW50Tm9kZTsKKyAgICAg
ICAgICAgIGNvbXBvbmVudC5fbGFzdElucHV0ID0gbmV4dElucHV0OworICAgICAgICAgICAgaWYg
KGRpZFVwZGF0ZSkgeworICAgICAgICAgICAgICAgIHZhciBzdWJMaWZlY3ljbGUgPSBjb21wb25l
bnQuX2xpZmVjeWNsZTsKKyAgICAgICAgICAgICAgICBpZiAoIXN1YkxpZmVjeWNsZSkgeworICAg
ICAgICAgICAgICAgICAgICBzdWJMaWZlY3ljbGUgPSBuZXcgTGlmZWN5Y2xlKCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBz
dWJMaWZlY3ljbGUubGlzdGVuZXJzID0gW107CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGNvbXBvbmVudC5fbGlmZWN5Y2xlID0gc3ViTGlmZWN5Y2xlOworICAgICAgICAgICAg
ICAgIHZhciBjaGlsZENvbnRleHQgPSBjb21wb25lbnQuZ2V0Q2hpbGRDb250ZXh0KCk7CisgICAg
ICAgICAgICAgICAgaWYgKCFpc051bGxPclVuZGVmKGNoaWxkQ29udGV4dCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgY2hpbGRDb250ZXh0ID0gT2JqZWN0LmFzc2lnbih7fSwgY29udGV4dCwgY29t
cG9uZW50Ll9jaGlsZENvbnRleHQsIGNoaWxkQ29udGV4dCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBjaGlsZENvbnRleHQg
PSBPYmplY3QuYXNzaWduKHt9LCBjb250ZXh0LCBjb21wb25lbnQuX2NoaWxkQ29udGV4dCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbXBvbmVudC5fcGF0Y2gobGFzdElu
cHV0LCBuZXh0SW5wdXQsIHBhcmVudERvbSwgc3ViTGlmZWN5Y2xlLCBjaGlsZENvbnRleHQsIGNv
bXBvbmVudC5faXNTVkcsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBzdWJMaWZlY3ljbGUudHJp
Z2dlcigpOworICAgICAgICAgICAgICAgIGNvbXBvbmVudC5jb21wb25lbnREaWRVcGRhdGUocHJv
cHMsIHByZXZTdGF0ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgdk5vZGUgPSBj
b21wb25lbnQuX3ZOb2RlOworICAgICAgICAgICAgdmFyIGRvbSA9IHZOb2RlLmRvbSA9IG5leHRJ
bnB1dC5kb207CisgICAgICAgICAgICB2YXIgY29tcG9uZW50VG9ET01Ob2RlTWFwID0gY29tcG9u
ZW50Ll9jb21wb25lbnRUb0RPTU5vZGVNYXA7CisgICAgICAgICAgICBjb21wb25lbnRUb0RPTU5v
ZGVNYXAgJiYgY29tcG9uZW50VG9ET01Ob2RlTWFwLnNldChjb21wb25lbnQsIG5leHRJbnB1dC5k
b20pOworICAgICAgICAgICAgdXBkYXRlUGFyZW50Q29tcG9uZW50Vk5vZGVzKHZOb2RlLCBkb20p
OworICAgICAgICAgICAgaWYgKCFpc051bGxPclVuZGVmKGNhbGxiYWNrKSkgeworICAgICAgICAg
ICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
dmFyIENvbXBvbmVudCQxID0gZnVuY3Rpb24gQ29tcG9uZW50JDEocHJvcHMsIGNvbnRleHQpIHsK
KyAgICAgICAgdGhpcy5zdGF0ZSA9IHt9OworICAgICAgICB0aGlzLnJlZnMgPSB7fTsKKyAgICAg
ICAgdGhpcy5fcHJvY2Vzc2luZ1NldFN0YXRlID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2Jsb2Nr
UmVuZGVyID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2lnbm9yZVNldFN0YXRlID0gZmFsc2U7Cisg
ICAgICAgIHRoaXMuX2Jsb2NrU2V0U3RhdGUgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fZGVmZXJT
ZXRTdGF0ZSA9IGZhbHNlOworICAgICAgICB0aGlzLl9wZW5kaW5nU2V0U3RhdGUgPSBmYWxzZTsK
KyAgICAgICAgdGhpcy5fcGVuZGluZ1N0YXRlID0ge307CisgICAgICAgIHRoaXMuX2xhc3RJbnB1
dCA9IG51bGw7CisgICAgICAgIHRoaXMuX3ZOb2RlID0gbnVsbDsKKyAgICAgICAgdGhpcy5fdW5t
b3VudGVkID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fZGV2VG9vbHNTdGF0dXMgPSBudWxsOworICAg
ICAgICB0aGlzLl9kZXZUb29sc0lkID0gbnVsbDsKKyAgICAgICAgdGhpcy5fbGlmZWN5Y2xlID0g
bnVsbDsKKyAgICAgICAgdGhpcy5fY2hpbGRDb250ZXh0ID0gbnVsbDsKKyAgICAgICAgdGhpcy5f
cGF0Y2ggPSBudWxsOworICAgICAgICB0aGlzLl9pc1NWRyA9IGZhbHNlOworICAgICAgICB0aGlz
Ll9jb21wb25lbnRUb0RPTU5vZGVNYXAgPSBudWxsOworICAgICAgICAvKiogQHR5cGUge29iamVj
dH0gKi8KKyAgICAgICAgdGhpcy5wcm9wcyA9IHByb3BzIHx8IGluZmVybm8uRU1QVFlfT0JKOwor
ICAgICAgICAvKiogQHR5cGUge29iamVjdH0gKi8KKyAgICAgICAgdGhpcy5jb250ZXh0ID0gY29u
dGV4dCB8fCB7fTsKKyAgICAgICAgaWYgKCF0aGlzLmNvbXBvbmVudERpZE1vdW50KSB7CisgICAg
ICAgICAgICB0aGlzLmNvbXBvbmVudERpZE1vdW50ID0gbnVsbDsKKyAgICAgICAgfQorICAgIH07
CisgICAgQ29tcG9uZW50JDEucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlciAobmV4
dFByb3BzLCBuZXh0U3RhdGUsIG5leHRDb250ZXh0KSB7CisgICAgfTsKKyAgICBDb21wb25lbnQk
MS5wcm90b3R5cGUuZm9yY2VVcGRhdGUgPSBmdW5jdGlvbiBmb3JjZVVwZGF0ZSAoY2FsbGJhY2sp
IHsKKyAgICAgICAgaWYgKHRoaXMuX3VubW91bnRlZCkgeworICAgICAgICAgICAgdGhyb3cgRXJy
b3Iobm9PcCk7CisgICAgICAgIH0KKyAgICAgICAgYXBwbHlTdGF0ZSh0aGlzLCB0cnVlLCBjYWxs
YmFjayk7CisgICAgfTsKKyAgICBDb21wb25lbnQkMS5wcm90b3R5cGUuc2V0U3RhdGUgPSBmdW5j
dGlvbiBzZXRTdGF0ZSAobmV3U3RhdGUsIGNhbGxiYWNrKSB7CisgICAgICAgIGlmICh0aGlzLl91
bm1vdW50ZWQpIHsKKyAgICAgICAgICAgIHRocm93IEVycm9yKG5vT3ApOworICAgICAgICB9Cisg
ICAgICAgIGlmICghdGhpcy5fYmxvY2tTZXRTdGF0ZSkgeworICAgICAgICAgICAgaWYgKCF0aGlz
Ll9pZ25vcmVTZXRTdGF0ZSkgeworICAgICAgICAgICAgICAgIHF1ZXVlU3RhdGVDaGFuZ2VzKHRo
aXMsIG5ld1N0YXRlLCBjYWxsYmFjayk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoZmFsc2UpIHsKKyAgICAgICAgICAgICAgICB0aHJv
d0Vycm9yKCdjYW5ub3QgdXBkYXRlIHN0YXRlIHZpYSBzZXRTdGF0ZSgpIGluIGNvbXBvbmVudFdp
bGxVcGRhdGUoKS4nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRocm93RXJyb3IoKTsK
KyAgICAgICAgfQorICAgIH07CisgICAgQ29tcG9uZW50JDEucHJvdG90eXBlLmNvbXBvbmVudFdp
bGxNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxNb3VudCAoKSB7CisgICAgfTsKKyAgICBD
b21wb25lbnQkMS5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25l
bnREaWRNb3VudCAoKSB7CisgICAgfTsKKyAgICBDb21wb25lbnQkMS5wcm90b3R5cGUuY29tcG9u
ZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCAoKSB7CisgICAg
fTsKKyAgICBDb21wb25lbnQkMS5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rp
b24gY29tcG9uZW50RGlkVXBkYXRlIChwcmV2UHJvcHMsIHByZXZTdGF0ZSwgcHJldkNvbnRleHQp
IHsKKyAgICB9OworICAgIENvbXBvbmVudCQxLnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRh
dGUgPSBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUgKG5leHRQcm9wcywgbmV4dFN0YXRl
LCBjb250ZXh0KSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisgICAgQ29tcG9uZW50
JDEucHJvdG90eXBlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPSBmdW5jdGlvbiBjb21wb25l
bnRXaWxsUmVjZWl2ZVByb3BzIChuZXh0UHJvcHMsIGNvbnRleHQpIHsKKyAgICB9OworICAgIENv
bXBvbmVudCQxLnByb3RvdHlwZS5jb21wb25lbnRXaWxsVXBkYXRlID0gZnVuY3Rpb24gY29tcG9u
ZW50V2lsbFVwZGF0ZSAobmV4dFByb3BzLCBuZXh0U3RhdGUsIG5leHRDb250ZXh0KSB7CisgICAg
fTsKKyAgICBDb21wb25lbnQkMS5wcm90b3R5cGUuZ2V0Q2hpbGRDb250ZXh0ID0gZnVuY3Rpb24g
Z2V0Q2hpbGRDb250ZXh0ICgpIHsKKyAgICB9OworICAgIENvbXBvbmVudCQxLnByb3RvdHlwZS5f
dXBkYXRlQ29tcG9uZW50ID0gZnVuY3Rpb24gX3VwZGF0ZUNvbXBvbmVudCAocHJldlN0YXRlLCBu
ZXh0U3RhdGUsIHByZXZQcm9wcywgbmV4dFByb3BzLCBjb250ZXh0LCBmb3JjZSkgeworICAgICAg
ICBpZiAodGhpcy5fdW5tb3VudGVkID09PSB0cnVlKSB7CisgICAgICAgICAgICBpZiAoZmFsc2Up
IHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKG5vT3ApOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgdGhyb3dFcnJvcigpOworICAgICAgICB9CisgICAgICAgIGlmICgocHJldlByb3Bz
ICE9PSBuZXh0UHJvcHMgfHwgbmV4dFByb3BzID09PSBpbmZlcm5vLkVNUFRZX09CSikgfHwgcHJl
dlN0YXRlICE9PSBuZXh0U3RhdGUgfHwgZm9yY2UpIHsKKyAgICAgICAgICAgIGlmIChwcmV2UHJv
cHMgIT09IG5leHRQcm9wcyB8fCBuZXh0UHJvcHMgPT09IGluZmVybm8uRU1QVFlfT0JKKSB7Cisg
ICAgICAgICAgICAgICAgdGhpcy5fYmxvY2tSZW5kZXIgPSB0cnVlOworICAgICAgICAgICAgICAg
IHRoaXMuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMsIGNvbnRleHQpOworICAg
ICAgICAgICAgICAgIHRoaXMuX2Jsb2NrUmVuZGVyID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
aWYgKHRoaXMuX3BlbmRpbmdTZXRTdGF0ZSkgeworICAgICAgICAgICAgICAgICAgICBuZXh0U3Rh
dGUgPSBPYmplY3QuYXNzaWduKHt9LCBuZXh0U3RhdGUsIHRoaXMuX3BlbmRpbmdTdGF0ZSk7Cisg
ICAgICAgICAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdTZXRTdGF0ZSA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICB0aGlzLl9wZW5kaW5nU3RhdGUgPSB7fTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgc2hvdWxkVXBkYXRlID0gdGhpcy5zaG91
bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUsIGNvbnRleHQpOworICAgICAg
ICAgICAgaWYgKHNob3VsZFVwZGF0ZSAhPT0gZmFsc2UgfHwgZm9yY2UpIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLl9ibG9ja1NldFN0YXRlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB0aGlzLmNv
bXBvbmVudFdpbGxVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUsIGNvbnRleHQpOworICAgICAg
ICAgICAgICAgIHRoaXMuX2Jsb2NrU2V0U3RhdGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB0
aGlzLnByb3BzID0gbmV4dFByb3BzOworICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMu
c3RhdGUgPSBuZXh0U3RhdGU7CisgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4
dDsKKyAgICAgICAgICAgICAgICB0aGlzLl9iZWZvcmVSZW5kZXIgJiYgdGhpcy5fYmVmb3JlUmVu
ZGVyKCk7CisgICAgICAgICAgICAgICAgdmFyIHJlbmRlciA9IHRoaXMucmVuZGVyKG5leHRQcm9w
cywgc3RhdGUsIGNvbnRleHQpOworICAgICAgICAgICAgICAgIHRoaXMuX2FmdGVyUmVuZGVyICYm
IHRoaXMuX2FmdGVyUmVuZGVyKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW5mZXJuby5OT19PUDsKKyAg
ICB9OworCisgICAgcmV0dXJuIENvbXBvbmVudCQxOworCisgICAgfSkpKTsKKworCisvKioqLyB9
LAorLyogNSAqLworLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7CisKKyAgICAndXNl
IHN0cmljdCc7CisKKyAgICBleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlOworICAgIGV4cG9ydHMu
cmVhZCA9IHJlYWQ7CisgICAgZXhwb3J0cy5hc3NpZ24gPSBhc3NpZ247CisgICAgZXhwb3J0cy5p
c0VxdWFsID0gaXNFcXVhbDsKKyAgICAvKioKKyAgICAgKiBTaGFyZWQgZnVuY3MvdmFsdWVzCisg
ICAgICovCisKKyAgICB2YXIgRU5URVIgPSBleHBvcnRzLkVOVEVSID0gMTM7CisgICAgdmFyIEVT
Q0FQRSA9IGV4cG9ydHMuRVNDQVBFID0gMjc7CisKKyAgICB2YXIgZmlsdGVycyA9IGV4cG9ydHMu
ZmlsdGVycyA9IHsKKyAgICAgICAgYWxsOiBmdW5jdGlvbiBhbGwodCkgeworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0sCisgICAgICAgIGFjdGl2ZTogZnVuY3Rpb24gYWN0aXZl
KHQpIHsKKyAgICAgICAgICAgIHJldHVybiAhdC5jb21wbGV0ZWQ7CisgICAgICAgIH0sCisgICAg
ICAgIGNvbXBsZXRlZDogZnVuY3Rpb24gY29tcGxldGVkKHQpIHsKKyAgICAgICAgICAgIHJldHVy
biB0LmNvbXBsZXRlZDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBSZWFk
IHRoZSBgbG9jYXRpb24uaGFzaGAgdmFsdWUKKyAgICAgKiBAcmV0dXJuIHtTdHJpbmd9CisgICAg
ICovCisgICAgZnVuY3Rpb24gcmVhZCgpIHsKKyAgICAgICAgcmV0dXJuIGxvY2F0aW9uLmhhc2gu
cmVwbGFjZSgnIy8nLCAnJykgfHwgJ2FsbCc7CisgICAgfQorCisgICAgLyoqCisgICAgICogTW9k
aWZpZWQgYE9iamVjdC5hc3NpZ25gIHNoaW0KKyAgICAgKiAtIGFsd2F5cyB3cml0ZXMgdG8gbmV3
IG9iamVjdAorICAgICAqIEByZXR1cm4ge09iamVjdH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBh
c3NpZ24oKSB7CisgICAgICAgIHZhciBzcmMgPSB2b2lkIDA7CisgICAgICAgIHZhciB0YXIgPSB7
fTsKKyAgICAgICAgZm9yICh2YXIgcyA9IDA7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHsK
KyAgICAgICAgICAgIHNyYyA9IE9iamVjdChhcmd1bWVudHNbc10pOworICAgICAgICAgICAgZm9y
ICh2YXIgayBpbiBzcmMpIHsKKyAgICAgICAgICAgICAgICB0YXJba10gPSBzcmNba107CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRhcjsKKyAgICB9CisKKyAgICAv
KioKKyAgICAgKiBBcmUgdHdvIE9iamVjdHMgZXF1YWwgdmFsdWVzPworICAgICAqIEBwYXJhbSAg
e09iamVjdH0gYQorICAgICAqIEBwYXJhbSAge09iamVjdH0gYgorICAgICAqIEByZXR1cm4ge0Jv
b2xlYW59CisgICAgICovCisgICAgZnVuY3Rpb24gaXNFcXVhbChhLCBiKSB7CisgICAgICAgIC8v
IENyZWF0ZSBhcnJheXMgb2YgcHJvcGVydHkgbmFtZXMKKyAgICAgICAgdmFyIGFQcm9wcyA9IE9i
amVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGEpOworICAgICAgICB2YXIgYlByb3BzID0gT2JqZWN0
LmdldE93blByb3BlcnR5TmFtZXMoYik7CisKKyAgICAgICAgaWYgKGFQcm9wcy5sZW5ndGggIT09
IGJQcm9wcy5sZW5ndGgpIHJldHVybiBmYWxzZTsKKworICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGFQcm9wcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIGsgPSBhUHJvcHNbaV07
CisgICAgICAgICAgICBpZiAoYVtrXSAhPT0gYltrXSkgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisvKioqLyB9LAorLyogNiAqLworLyoq
Ki8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyAg
ICAndXNlIHN0cmljdCc7CisKKyAgICBleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlOworICAgIGV4
cG9ydHMubGlua3MgPSB1bmRlZmluZWQ7CisgICAgZXhwb3J0cy5IZWFkID0gSGVhZDsKKyAgICBl
eHBvcnRzLkZvb3QgPSBGb290OworCisgICAgdmFyIF9pbmZlcm5vID0gX193ZWJwYWNrX3JlcXVp
cmVfXygxKTsKKworICAgIHZhciBfaW5mZXJubzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9p
bmZlcm5vKTsKKworICAgIHZhciBfc2hhcmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpOworCisg
ICAgZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBv
YmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH0KKworICAgIC8qKgorICAg
ICAqIFN0YXRlbGVzcyBIZWFkZXIgY29tcG9uZW50CisgICAgICovCisgICAgZnVuY3Rpb24gSGVh
ZChfcmVmKSB7CisgICAgICAgIHZhciBvbkVudGVyID0gX3JlZi5vbkVudGVyOworCisgICAgICAg
IHJldHVybiBfaW5mZXJubzIuZGVmYXVsdC5jcmVhdGVWTm9kZSgyLCAnaGVhZGVyJywgeworICAg
ICAgICAgICAgJ2NsYXNzTmFtZSc6ICdoZWFkZXInCisgICAgICAgIH0sIFtfaW5mZXJubzIuZGVm
YXVsdC5jcmVhdGVWTm9kZSgyLCAnaDEnLCBudWxsLCAndG9kb3MnKSwgX2luZmVybm8yLmRlZmF1
bHQuY3JlYXRlVk5vZGUoNTEyLCAnaW5wdXQnLCB7CisgICAgICAgICAgICAnY2xhc3NOYW1lJzog
J25ldy10b2RvJywKKyAgICAgICAgICAgICdhdXRvZm9jdXMnOiB0cnVlLAorICAgICAgICAgICAg
J2F1dG9jb21wbGV0ZSc6ICdvZmYnLAorICAgICAgICAgICAgJ3BsYWNlaG9sZGVyJzogJ1doYXQg
bmVlZHMgdG8gYmUgZG9uZT8nCisgICAgICAgIH0sIG51bGwsIHsKKyAgICAgICAgICAgICdvbmtl
eWRvd24nOiBvbkVudGVyCisgICAgICAgIH0pXSk7CisgICAgfQorCisgICAgdmFyIGxpbmtzID0g
ZXhwb3J0cy5saW5rcyA9IFt7IGhhc2g6ICcjLycsIG5hbWU6ICdBbGwnIH0sIHsgaGFzaDogJyMv
YWN0aXZlJywgbmFtZTogJ0FjdGl2ZScgfSwgeyBoYXNoOiAnIy9jb21wbGV0ZWQnLCBuYW1lOiAn
Q29tcGxldGVkJyB9XTsKKworICAgIC8qKgorICAgICAqIFN0YXRlbGVzcyBGb290ZXIgY29tcG9u
ZW50CisgICAgICovCisgICAgZnVuY3Rpb24gRm9vdChfcmVmMikgeworICAgICAgICB2YXIgbGVm
dCA9IF9yZWYyLmxlZnQsCisgICAgICAgICAgICBkb25lID0gX3JlZjIuZG9uZSwKKyAgICAgICAg
ICAgIHJvdXRlID0gX3JlZjIucm91dGUsCisgICAgICAgICAgICBvbkNsZWFyID0gX3JlZjIub25D
bGVhcjsKKworICAgICAgICByZXR1cm4gX2luZmVybm8yLmRlZmF1bHQuY3JlYXRlVk5vZGUoMiwg
J2Zvb3RlcicsIHsKKyAgICAgICAgICAgICdjbGFzc05hbWUnOiAnZm9vdGVyJworICAgICAgICB9
LCBbX2luZmVybm8yLmRlZmF1bHQuY3JlYXRlVk5vZGUoMiwgJ3NwYW4nLCB7CisgICAgICAgICAg
ICAnY2xhc3NOYW1lJzogJ3RvZG8tY291bnQnCisgICAgICAgIH0sIFtfaW5mZXJubzIuZGVmYXVs
dC5jcmVhdGVWTm9kZSgyLCAnc3Ryb25nJywgbnVsbCwgbGVmdCksICcgJywgbGVmdCA+IDEgPyAn
aXRlbXMnIDogJ2l0ZW0nLCAnIGxlZnQnXSksIF9pbmZlcm5vMi5kZWZhdWx0LmNyZWF0ZVZOb2Rl
KDIsICd1bCcsIHsKKyAgICAgICAgICAgICdjbGFzc05hbWUnOiAnZmlsdGVycycKKyAgICAgICAg
fSwgbGlua3MubWFwKGZ1bmN0aW9uIChfcmVmMykgeworICAgICAgICAgICAgdmFyIGhhc2ggPSBf
cmVmMy5oYXNoLAorICAgICAgICAgICAgICAgIG5hbWUgPSBfcmVmMy5uYW1lOworICAgICAgICAg
ICAgcmV0dXJuIF9pbmZlcm5vMi5kZWZhdWx0LmNyZWF0ZVZOb2RlKDIsICdsaScsIG51bGwsIF9p
bmZlcm5vMi5kZWZhdWx0LmNyZWF0ZVZOb2RlKDIsICdhJywgeworICAgICAgICAgICAgICAgICdo
cmVmJzogaGFzaCwKKyAgICAgICAgICAgICAgICAnY2xhc3NOYW1lJzogbmFtZS50b0xvd2VyQ2Fz
ZSgpID09PSByb3V0ZSA/ICdzZWxlY3RlZCcgOiAnJworICAgICAgICAgICAgfSwgbmFtZSkpOwor
ICAgICAgICB9KSksIGRvbmUgPiAwID8gX2luZmVybm8yLmRlZmF1bHQuY3JlYXRlVk5vZGUoMiwg
J2J1dHRvbicsIHsKKyAgICAgICAgICAgICdjbGFzc05hbWUnOiAnY2xlYXItY29tcGxldGVkJwor
ICAgICAgICB9LCAnQ2xlYXIgY29tcGxldGVkJywgeworICAgICAgICAgICAgJ29uQ2xpY2snOiBv
bkNsZWFyCisgICAgICAgIH0pIDogbnVsbF0pOworICAgIH0KKworLyoqKi8gfSwKKy8qIDcgKi8K
Ky8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewor
CisgICAgJ3VzZSBzdHJpY3QnOworCisgICAgZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTsKKwor
ICAgIHZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBm
b3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0g
YXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90
eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291
cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07CisKKyAgICB2YXIgX3NoYXJlID0gX193
ZWJwYWNrX3JlcXVpcmVfXyg1KTsKKworICAgIGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0
YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3Rv
cikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0
aW9uIik7IH0gfQorCisgICAgdmFyIFNUT1IgPSB7fTsKKyAgICB2YXIgU1RPUl9JRCA9ICd0b2Rv
cy1pbmZlcm5vJzsKKworICAgIHZhciBNb2RlbCA9IGZ1bmN0aW9uIE1vZGVsKCkgeworICAgICAg
ICB2YXIgX3RoaXMgPSB0aGlzOworCisgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBNb2Rl
bCk7CisKKyAgICAgICAgdGhpcy5nZXQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gX3RoaXMuZGF0YSA9IEpTT04ucGFyc2UoU1RPUltTVE9SX0lEXSB8fCAnW10nKTsKKyAgICAg
ICAgfTsKKworICAgICAgICB0aGlzLnNldCA9IGZ1bmN0aW9uIChhcnIpIHsKKyAgICAgICAgICAg
IF90aGlzLmRhdGEgPSBhcnIgfHwgX3RoaXMuZGF0YSB8fCBbXTsKKyAgICAgICAgICAgIFNUT1Jb
U1RPUl9JRF0gPSBKU09OLnN0cmluZ2lmeShfdGhpcy5kYXRhKTsKKyAgICAgICAgICAgIHJldHVy
biBfdGhpcy5kYXRhOworICAgICAgICB9OworCisgICAgICAgIHRoaXMuYWRkID0gZnVuY3Rpb24g
KHN0cikgeworICAgICAgICAgICAgcmV0dXJuIF90aGlzLnNldChfdGhpcy5kYXRhLmNvbmNhdCh7
IHRpdGxlOiBzdHIsIGNvbXBsZXRlZDogZmFsc2UgfSkpOworICAgICAgICB9OworCisgICAgICAg
IHRoaXMucHV0ID0gZnVuY3Rpb24gKHRvZG8sIG9iaikgeworICAgICAgICAgICAgcmV0dXJuIF90
aGlzLnNldChfdGhpcy5kYXRhLm1hcChmdW5jdGlvbiAodCkgeworICAgICAgICAgICAgICAgIHJl
dHVybiAoMCwgX3NoYXJlLmlzRXF1YWwpKHQsIHRvZG8pID8gKDAsIF9zaGFyZS5hc3NpZ24pKHRv
ZG8sIG9iaikgOiB0OworICAgICAgICAgICAgfSkpOworICAgICAgICB9OworCisgICAgICAgIHRo
aXMuZGVsID0gZnVuY3Rpb24gKHRvZG8pIHsKKyAgICAgICAgICAgIHJldHVybiBfdGhpcy5zZXQo
X3RoaXMuZGF0YS5maWx0ZXIoZnVuY3Rpb24gKHQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ISgwLCBfc2hhcmUuaXNFcXVhbCkodCwgdG9kbyk7CisgICAgICAgICAgICB9KSk7CisgICAgICAg
IH07CisKKyAgICAgICAgdGhpcy50b2dnbGUgPSBmdW5jdGlvbiAodG9kbykgeworICAgICAgICAg
ICAgcmV0dXJuIF90aGlzLnB1dCh0b2RvLCB7IGNvbXBsZXRlZDogIXRvZG8uY29tcGxldGVkIH0p
OworICAgICAgICB9OworCisgICAgICAgIHRoaXMudG9nZ2xlQWxsID0gZnVuY3Rpb24gKGNvbXBs
ZXRlZCkgeworICAgICAgICAgICAgcmV0dXJuIF90aGlzLnNldChfdGhpcy5kYXRhLm1hcChmdW5j
dGlvbiAodCkgeworICAgICAgICAgICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgdCwgeyBjb21w
bGV0ZWQ6IGNvbXBsZXRlZCB9KTsKKyAgICAgICAgICAgIH0pKTsKKyAgICAgICAgfTsKKworICAg
ICAgICB0aGlzLmNsZWFyQ29tcGxldGVkID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0
dXJuIF90aGlzLnNldChfdGhpcy5kYXRhLmZpbHRlcihmdW5jdGlvbiAodCkgeworICAgICAgICAg
ICAgICAgIHJldHVybiAhdC5jb21wbGV0ZWQ7CisgICAgICAgICAgICB9KSk7CisgICAgICAgIH07
CisgICAgfTsKKworICAgIGV4cG9ydHMuZGVmYXVsdCA9IE1vZGVsOworCisvKioqLyB9LAorLyog
OCAqLworLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9f
KSB7CisKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICBleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVl
OworCisgICAgdmFyIF9pbmZlcm5vID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTsKKworICAgIHZh
ciBfaW5mZXJubzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmZlcm5vKTsKKworICAgIHZh
ciBfaW5mZXJub0NvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7CisKKyAgICB2YXIg
X2luZmVybm9Db21wb25lbnQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW5mZXJub0NvbXBv
bmVudCk7CisKKyAgICB2YXIgX3NoYXJlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTsKKworICAg
IGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2Jq
Ll9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9CisKKyAgICBmdW5jdGlvbiBf
b2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9y
ICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYg
KCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7
IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9CisKKyAgICBmdW5jdGlvbiBf
Y2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGlu
c3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxs
IGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpOyB9IH0KKworICAgIGZ1bmN0aW9uIF9wb3NzaWJsZUNv
bnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZl
cmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0
IGJlZW4gY2FsbGVkIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSAib2JqZWN0
IiB8fCB0eXBlb2YgY2FsbCA9PT0gImZ1bmN0aW9uIikgPyBjYWxsIDogc2VsZjsgfQorCisgICAg
ZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3Vw
ZXJDbGFzcyAhPT0gImZ1bmN0aW9uIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5l
dyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1
bmN0aW9uLCBub3QgIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUg
PSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29u
c3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6
IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNl
dFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNz
KSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH0KKworICAgIHZhciBJdGVtID0g
ZnVuY3Rpb24gKF9Db21wb25lbnQpIHsKKyAgICAgICAgX2luaGVyaXRzKEl0ZW0sIF9Db21wb25l
bnQpOworCisgICAgICAgIGZ1bmN0aW9uIEl0ZW0oX3JlZikgeworICAgICAgICAgICAgdmFyIGRh
dGEgPSBfcmVmLmRhdGEsCisgICAgICAgICAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFBy
b3BlcnRpZXMoX3JlZiwgWydkYXRhJ10pOworCisgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2so
dGhpcywgSXRlbSk7CisKKyAgICAgICAgICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVj
dG9yUmV0dXJuKHRoaXMsIF9Db21wb25lbnQuY2FsbCh0aGlzLCBwcm9wcykpOworCisgICAgICAg
ICAgICBfaW5pdGlhbGlzZVByb3BzLmNhbGwoX3RoaXMpOworCisgICAgICAgICAgICBfdGhpcy50
b2RvID0gZGF0YTsKKyAgICAgICAgICAgIF90aGlzLnN0YXRlID0geyB0ZXh0OiBkYXRhLnRpdGxl
IH07CisgICAgICAgICAgICBfdGhpcy5lZGl0b3IgPSBudWxsOworICAgICAgICAgICAgcmV0dXJu
IF90aGlzOworICAgICAgICB9CisKKyAgICAgICAgSXRlbS5wcm90b3R5cGUucmVuZGVyID0gZnVu
Y3Rpb24gcmVuZGVyKF9yZWYyLCBfcmVmMykgeworICAgICAgICAgICAgdmFyIF90aGlzMiA9IHRo
aXM7CisKKyAgICAgICAgICAgIHZhciBkb1RvZ2dsZSA9IF9yZWYyLmRvVG9nZ2xlLAorICAgICAg
ICAgICAgICAgIGRvRGVsZXRlID0gX3JlZjIuZG9EZWxldGUsCisgICAgICAgICAgICAgICAgZG9T
YXZlID0gX3JlZjIuZG9TYXZlLAorICAgICAgICAgICAgICAgIG9uQmx1ciA9IF9yZWYyLm9uQmx1
ciwKKyAgICAgICAgICAgICAgICBvbkZvY3VzID0gX3JlZjIub25Gb2N1czsKKyAgICAgICAgICAg
IHZhciB0ZXh0ID0gX3JlZjMudGV4dDsKKyAgICAgICAgICAgIHZhciBfdG9kbyA9IHRoaXMudG9k
bywKKyAgICAgICAgICAgICAgICB0aXRsZSA9IF90b2RvLnRpdGxlLAorICAgICAgICAgICAgICAg
IGNvbXBsZXRlZCA9IF90b2RvLmNvbXBsZXRlZCwKKyAgICAgICAgICAgICAgICBlZGl0aW5nID0g
X3RvZG8uZWRpdGluZzsKKworCisgICAgICAgICAgICB2YXIgY2xzID0gW107CisgICAgICAgICAg
ICBlZGl0aW5nICYmIGNscy5wdXNoKCdlZGl0aW5nJyk7CisgICAgICAgICAgICBjb21wbGV0ZWQg
JiYgY2xzLnB1c2goJ2NvbXBsZXRlZCcpOworCisgICAgICAgICAgICB2YXIgaGFuZGxlS2V5ZG93
biA9IGZ1bmN0aW9uIGhhbmRsZUtleWRvd24oZSkgeworICAgICAgICAgICAgICAgIGlmIChlLndo
aWNoID09PSBfc2hhcmUuRVNDQVBFKSByZXR1cm4gb25CbHVyKCk7CisgICAgICAgICAgICAgICAg
aWYgKGUud2hpY2ggPT09IF9zaGFyZS5FTlRFUikgcmV0dXJuIGRvU2F2ZSh0ZXh0KTsKKyAgICAg
ICAgICAgIH07CisKKyAgICAgICAgICAgIC8vIHRtcCBmaXgKKyAgICAgICAgICAgIHZhciBoYW5k
bGVCbHVyID0gZnVuY3Rpb24gaGFuZGxlQmx1cigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZG9TYXZlKHRleHQpOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHZhciBoYW5kbGVJbnB1
dCA9IGZ1bmN0aW9uIGhhbmRsZUlucHV0KGUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gX3Ro
aXMyLnNldFRleHQoZS50YXJnZXQudmFsdWUpOworICAgICAgICAgICAgfTsKKworICAgICAgICAg
ICAgcmV0dXJuIF9pbmZlcm5vMi5kZWZhdWx0LmNyZWF0ZVZOb2RlKDIsICdsaScsIHsKKyAgICAg
ICAgICAgICAgICAnY2xhc3NOYW1lJzogY2xzLmpvaW4oJyAnKQorICAgICAgICAgICAgfSwgW19p
bmZlcm5vMi5kZWZhdWx0LmNyZWF0ZVZOb2RlKDIsICdkaXYnLCB7CisgICAgICAgICAgICAgICAg
J2NsYXNzTmFtZSc6ICd2aWV3JworICAgICAgICAgICAgfSwgW19pbmZlcm5vMi5kZWZhdWx0LmNy
ZWF0ZVZOb2RlKDUxMiwgJ2lucHV0JywgeworICAgICAgICAgICAgICAgICdjbGFzc05hbWUnOiAn
dG9nZ2xlJywKKyAgICAgICAgICAgICAgICAndHlwZSc6ICdjaGVja2JveCcsCisgICAgICAgICAg
ICAgICAgJ2NoZWNrZWQnOiBjb21wbGV0ZWQKKyAgICAgICAgICAgIH0sIG51bGwsIHsKKyAgICAg
ICAgICAgICAgICAnb25DbGljayc6IGRvVG9nZ2xlCisgICAgICAgICAgICB9KSwgX2luZmVybm8y
LmRlZmF1bHQuY3JlYXRlVk5vZGUoMiwgJ2xhYmVsJywgbnVsbCwgdGl0bGUsIHsKKyAgICAgICAg
ICAgICAgICAnb25kYmxjbGljayc6IG9uRm9jdXMKKyAgICAgICAgICAgIH0pLCBfaW5mZXJubzIu
ZGVmYXVsdC5jcmVhdGVWTm9kZSgyLCAnYnV0dG9uJywgeworICAgICAgICAgICAgICAgICdjbGFz
c05hbWUnOiAnZGVzdHJveScKKyAgICAgICAgICAgIH0sIG51bGwsIHsKKyAgICAgICAgICAgICAg
ICAnb25DbGljayc6IGRvRGVsZXRlCisgICAgICAgICAgICB9KV0pLCBfaW5mZXJubzIuZGVmYXVs
dC5jcmVhdGVWTm9kZSg1MTIsICdpbnB1dCcsIHsKKyAgICAgICAgICAgICAgICAnY2xhc3NOYW1l
JzogJ2VkaXQnLAorICAgICAgICAgICAgICAgICd2YWx1ZSc6IGVkaXRpbmcgJiYgdGV4dAorICAg
ICAgICAgICAgfSwgbnVsbCwgeworICAgICAgICAgICAgICAgICdvbmJsdXInOiBoYW5kbGVCbHVy
LAorICAgICAgICAgICAgICAgICdvbmlucHV0JzogaGFuZGxlSW5wdXQsCisgICAgICAgICAgICAg
ICAgJ29ua2V5ZG93bic6IGhhbmRsZUtleWRvd24KKyAgICAgICAgICAgIH0sIG51bGwsIGZ1bmN0
aW9uIChlbCkgeworICAgICAgICAgICAgICAgIF90aGlzMi5lZGl0b3IgPSBlbDsKKyAgICAgICAg
ICAgIH0pXSk7CisgICAgICAgIH07CisKKyAgICAgICAgcmV0dXJuIEl0ZW07CisgICAgfShfaW5m
ZXJub0NvbXBvbmVudDIuZGVmYXVsdCk7CisKKyAgICB2YXIgX2luaXRpYWxpc2VQcm9wcyA9IGZ1
bmN0aW9uIF9pbml0aWFsaXNlUHJvcHMoKSB7CisgICAgICAgIHZhciBfdGhpczMgPSB0aGlzOwor
CisgICAgICAgIHRoaXMuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9IGZ1bmN0aW9uIChfcmVm
NCkgeworICAgICAgICAgICAgdmFyIGRhdGEgPSBfcmVmNC5kYXRhOworICAgICAgICAgICAgcmV0
dXJuIF90aGlzMy5zZXRUZXh0KGRhdGEudGl0bGUpOworICAgICAgICB9OworCisgICAgICAgIHRo
aXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlID0gZnVuY3Rpb24gKF9yZWY1LCBfcmVmNikgeworICAg
ICAgICAgICAgdmFyIGRhdGEgPSBfcmVmNS5kYXRhOworICAgICAgICAgICAgdmFyIHRleHQgPSBf
cmVmNi50ZXh0OworICAgICAgICAgICAgcmV0dXJuICEoKDAsIF9zaGFyZS5pc0VxdWFsKShkYXRh
LCBfdGhpczMudG9kbykgJiYgdGV4dCA9PT0gX3RoaXMzLnN0YXRlLnRleHQpOworICAgICAgICB9
OworCisgICAgICAgIHRoaXMuY29tcG9uZW50V2lsbFVwZGF0ZSA9IGZ1bmN0aW9uIChfcmVmNykg
eworICAgICAgICAgICAgdmFyIGRhdGEgPSBfcmVmNy5kYXRhOworICAgICAgICAgICAgcmV0dXJu
IF90aGlzMy50b2RvID0gZGF0YTsKKyAgICAgICAgfTsKKworICAgICAgICB0aGlzLmNvbXBvbmVu
dERpZFVwZGF0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiBfdGhpczMuZWRp
dG9yLmZvY3VzKCk7CisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy5zZXRUZXh0ID0gZnVuY3Rp
b24gKHRleHQpIHsKKyAgICAgICAgICAgIHJldHVybiBfdGhpczMuc2V0U3RhdGUoeyB0ZXh0OiB0
ZXh0IH0pOworICAgICAgICB9OworICAgIH07CisKKyAgICBleHBvcnRzLmRlZmF1bHQgPSBJdGVt
OworCisvKioqLyB9CisvKioqKioqLyBdKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRp
ZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9pbmZlcm5vL2luZGV4Lmh0bWwgYi9X
ZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZj
L2FyY2hpdGVjdHVyZS1leGFtcGxlcy9pbmZlcm5vL2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTAx
NTc4MTVkM2NiOWQ5MTU2ZTg4ZmJkMDYyZWRjYTQ4ODNmYzUwNgotLS0gL2Rldi9udWxsCisrKyBi
L1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9t
dmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2luZmVybm8vaW5kZXguaHRtbApAQCAtMCwwICsxLDE4
IEBACis8IWRvY3R5cGUgaHRtbD4KKzxodG1sIGxhbmc9ImVuIiBkYXRhLWZyYW1ld29yaz0iaW5m
ZXJubyI+CisgICAgPGhlYWQ+CisgICAgICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICAg
ICAgPHRpdGxlPkluZmVybm8g4oCiIFRvZG9NVkM8L3RpdGxlPgorICAgICAgICA8bGluayByZWw9
InN0eWxlc2hlZXQiIGhyZWY9Im5vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmNzcyI+
CisgICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ibm9kZV9tb2R1bGVzL3RvZG9t
dmMtYXBwLWNzcy9pbmRleC5jc3MiPgorICAgIDwvaGVhZD4KKyAgICA8Ym9keT4KKyAgICAgICAg
PHNlY3Rpb24gaWQ9ImFwcCIgY2xhc3M9InRvZG9hcHAiPjwvc2VjdGlvbj4KKyAgICAgICAgPGZv
b3RlciBjbGFzcz0iaW5mbyI+CisgICAgICAgICAgICA8cD5Eb3VibGUtY2xpY2sgdG8gZWRpdCBh
IHRvZG88L3A+CisgICAgICAgICAgICA8cD5QYXJ0IG9mIDxhIGhyZWY9Imh0dHA6Ly90b2RvbXZj
LmNvbSI+VG9kb01WQzwvYT48L3A+CisgICAgICAgIDwvZm9vdGVyPgorCisgICAgICAgIDxzY3Jp
cHQgc3JjPSJkaXN0L2J1bmRsZS5qcyI+PC9zY3JpcHQ+CisgICAgPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvaW5mZXJuby9zcmMvYmFzZS5qcyBi
L1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9t
dmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2luZmVybm8vc3JjL2Jhc2UuanMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ODlhMmNhMzBjOGI0OTI0ZmNhZDIzZTc3OTNlMTgwZGRjNTkxODU5YgotLS0gL2Rldi9udWxsCisr
KyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2luZmVybm8vc3JjL2Jhc2UuanMKQEAgLTAsMCAr
MSw0OSBAQAoraW1wb3J0IEluZmVybm8gZnJvbSAnaW5mZXJubyc7CitpbXBvcnQgeyBzdGF0ZXMg
fSBmcm9tICcuL3NoYXJlJzsKKworLyoqCisgKiBTdGF0ZWxlc3MgSGVhZGVyIGNvbXBvbmVudAor
ICovCitleHBvcnQgZnVuY3Rpb24gSGVhZCh7b25FbnRlcn0pIHsKKyAgICByZXR1cm4gKAorICAg
ICAgICA8aGVhZGVyIGNsYXNzTmFtZT0iaGVhZGVyIj4KKyAgICAgICAgICAgIDxoMT50b2Rvczwv
aDE+CisgICAgICAgICAgICA8aW5wdXQgY2xhc3NOYW1lPSJuZXctdG9kbyIgYXV0b2ZvY3VzIG9u
a2V5ZG93bj17IG9uRW50ZXIgfQorICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT0ib2ZmIiBw
bGFjZWhvbGRlcj0iV2hhdCBuZWVkcyB0byBiZSBkb25lPyIKKyAgICAgICAgICAgIC8+CisgICAg
ICAgIDwvaGVhZGVyPgorICAgICk7Cit9CisKK2V4cG9ydCBjb25zdCBsaW5rcyA9IFsKKyAgICB7
aGFzaDogJyMvJywgbmFtZTogJ0FsbCd9LAorICAgIHtoYXNoOiAnIy9hY3RpdmUnLCBuYW1lOiAn
QWN0aXZlJ30sCisgICAge2hhc2g6ICcjL2NvbXBsZXRlZCcsIG5hbWU6ICdDb21wbGV0ZWQnfQor
XTsKKworLyoqCisgKiBTdGF0ZWxlc3MgRm9vdGVyIGNvbXBvbmVudAorICovCitleHBvcnQgZnVu
Y3Rpb24gRm9vdCh7bGVmdCwgZG9uZSwgcm91dGUsIG9uQ2xlYXJ9KSB7CisgICAgcmV0dXJuICgK
KyAgICAgICAgPGZvb3RlciBjbGFzc05hbWU9ImZvb3RlciI+CisgICAgICAgICAgICAgICAgPHNw
YW4gY2xhc3NOYW1lPSJ0b2RvLWNvdW50Ij4KKyAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz57
IGxlZnQgfTwvc3Ryb25nPiB7IGxlZnQgPiAxID8gJ2l0ZW1zJyA6ICdpdGVtJyB9IGxlZnQKKyAg
ICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPHVsIGNsYXNzTmFtZT0iZmls
dGVycyI+CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxp
bmtzLm1hcCgoe2hhc2gsIG5hbWV9KSA9PiAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
PGxpPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPXsgaGFzaCB9IGNs
YXNzTmFtZT17IG5hbWUudG9Mb3dlckNhc2UoKSA9PT0gcm91dGUgPyAnc2VsZWN0ZWQnIDogJycg
fT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZSB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgKSkKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgICAgICAgeyBkb25lID4gMCA/ICgK
KyAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9ImNsZWFyLWNvbXBsZXRlZCIg
b25DbGljaz17IG9uQ2xlYXIgfT5DbGVhciBjb21wbGV0ZWQ8L2J1dHRvbj4KKyAgICAgICAgICAg
ICAgICApIDogbnVsbCB9CisgICAgICAgICAgICA8L2Zvb3Rlcj4KKyAgICApOworfQpkaWZmIC0t
Z2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvaW5mZXJuby9zcmMvaW5kZXguanMgYi9XZWJz
aXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9pbmZlcm5vL3NyYy9pbmRleC5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NzQx
NGMwYjM4NzE5MTlhNzM5OTk2OGM2ZmIxMmQ3YWViMWQyMzM5Ci0tLSAvZGV2L251bGwKKysrIGIv
V2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212
Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvaW5mZXJuby9zcmMvaW5kZXguanMKQEAgLTAsMCArMSwx
MTIgQEAKK2ltcG9ydCBJbmZlcm5vIGZyb20gJ2luZmVybm8nOworaW1wb3J0IENvbXBvbmVudCBm
cm9tICdpbmZlcm5vLWNvbXBvbmVudCc7CitpbXBvcnQgeyBFTlRFUiwgZmlsdGVycywgcmVhZCB9
IGZyb20gJy4vc2hhcmUnOworaW1wb3J0IHsgSGVhZCwgRm9vdCB9IGZyb20gJy4vYmFzZSc7Citp
bXBvcnQgTW9kZWwgZnJvbSAnLi9tb2RlbCc7CitpbXBvcnQgSXRlbSBmcm9tICcuL2l0ZW0nOwor
Citjb25zdCB7IHJlbmRlciB9ID0gSW5mZXJubzsKK2NvbnN0IG1vZGVsID0gbmV3IE1vZGVsKCk7
CisKK2NsYXNzIEFwcCBleHRlbmRzIENvbXBvbmVudCB7CisgICAgc3RhdGUgPSB7CisgICAgICAg
IHJvdXRlOiByZWFkKCksCisgICAgICAgIHRvZG9zOiBtb2RlbC5nZXQoKQorICAgIH07CisKKyAg
ICB1cGRhdGUgPSBhcnIgPT4gdGhpcy5zZXRTdGF0ZSh7dG9kb3M6IGFycn0pOworCisgICAgY29t
cG9uZW50V2lsbE1vdW50ID0gKCkgPT4geworICAgICAgICB3aW5kb3cub25oYXNoY2hhbmdlID0g
KCkgPT4gdGhpcy5zZXRTdGF0ZSh7cm91dGU6IHJlYWQoKX0pOworICAgIH07CisKKyAgICBhZGQg
PSBlID0+IHsKKyAgICAgICAgaWYgKGUud2hpY2ggIT09IEVOVEVSKSByZXR1cm47CisKKyAgICAg
ICAgY29uc3QgdmFsID0gZS50YXJnZXQudmFsdWUudHJpbSgpOworICAgICAgICBpZiAoIXZhbCkg
cmV0dXJuOworCisgICAgICAgIGUudGFyZ2V0LnZhbHVlID0gJyc7CisgICAgICAgIHRoaXMudXBk
YXRlKAorICAgICAgICAgICAgbW9kZWwuYWRkKHZhbCkKKyAgICAgICAgKTsKKyAgICB9OworCisg
ICAgZWRpdCA9ICh0b2RvLCB2YWwpID0+IHsKKyAgICAgICAgdmFsID0gdmFsLnRyaW0oKTsKKyAg
ICAgICAgaWYgKHZhbC5sZW5ndGgpIHsKKyAgICAgICAgICAgIHRoaXMudXBkYXRlKAorICAgICAg
ICAgICAgICAgIG1vZGVsLnB1dCh0b2RvLCB7dGl0bGU6IHZhbCwgZWRpdGluZzogMH0pCisgICAg
ICAgICAgICApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5yZW1vdmUodG9k
byk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZm9jdXMgPSB0b2RvID0+IHRoaXMudXBkYXRl
KAorICAgICAgICBtb2RlbC5wdXQodG9kbywge2VkaXRpbmc6IDF9KQorICAgICk7CisKKyAgICBi
bHVyID0gdG9kbyA9PiB0aGlzLnVwZGF0ZSgKKyAgICAgICAgbW9kZWwucHV0KHRvZG8sIHtlZGl0
aW5nOiAwfSkKKyAgICApOworCisgICAgcmVtb3ZlID0gdG9kbyA9PiB0aGlzLnVwZGF0ZSgKKyAg
ICAgICAgbW9kZWwuZGVsKHRvZG8pCisgICAgKTsKKworICAgIHRvZ2dsZU9uZSA9IHRvZG8gPT4g
dGhpcy51cGRhdGUoCisgICAgICAgIG1vZGVsLnRvZ2dsZSh0b2RvKQorICAgICk7CisKKyAgICB0
b2dnbGVBbGwgPSBldiA9PiB0aGlzLnVwZGF0ZSgKKyAgICAgICAgbW9kZWwudG9nZ2xlQWxsKGV2
LnRhcmdldC5jaGVja2VkKQorICAgICk7CisKKyAgICBjbGVhckNvbXBsZXRlZCA9ICgpID0+IHRo
aXMudXBkYXRlKAorICAgICAgICBtb2RlbC5jbGVhckNvbXBsZXRlZCgpCisgICAgKTsKKworICAg
IHJlbmRlcihfLCB7dG9kb3MsIHJvdXRlfSkgeworICAgICAgICBjb25zdCBudW0gPSB0b2Rvcy5s
ZW5ndGg7CisgICAgICAgIGNvbnN0IHNob3duID0gdG9kb3MuZmlsdGVyKGZpbHRlcnNbcm91dGVd
KTsKKyAgICAgICAgY29uc3QgbnVtRG9uZSA9IHRvZG9zLmZpbHRlcihmaWx0ZXJzLmNvbXBsZXRl
ZCkubGVuZ3RoOworICAgICAgICBjb25zdCBudW1BY3QgPSBudW0gLSBudW1Eb25lOworCisgICAg
ICAgIHJldHVybiAoCisgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgIDxIZWFkIG9u
RW50ZXI9eyB0aGlzLmFkZCB9IC8+CisKKyAgICAgICAgICAgICAgICB7IG51bSA/ICgKKyAgICAg
ICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPSJtYWluIj4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIDxpbnB1dCBjbGFzc05hbWU9InRvZ2dsZS1hbGwiIHR5cGU9ImNoZWNrYm94Igor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyB0aGlzLnRvZ2dsZUFsbCB9IGNo
ZWNrZWQ9eyBudW1BY3QgPT09IDAgfQorICAgICAgICAgICAgICAgICAgICAgICAgLz4KKworICAg
ICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzTmFtZT0idG9kby1saXN0Ij4KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNo
b3duLm1hcCh0ID0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBk
YXRhPXt0fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQmx1cj17
ICgpID0+IHRoaXMuYmx1cih0KSB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb25Gb2N1cz17ICgpID0+IHRoaXMuZm9jdXModCkgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRvRGVsZXRlPXsgKCkgPT4gdGhpcy5yZW1vdmUodCkgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvU2F2ZT17IHZhbCA9PiB0
aGlzLmVkaXQodCwgdmFsKSB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZG9Ub2dnbGU9eyAoKSA9PiB0aGlzLnRvZ2dsZU9uZSh0KSB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
PC91bD4KKyAgICAgICAgICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICAgICAgICAgICkg
OiBudWxsIH0KKworICAgICAgICAgICAgICAgIHsgKG51bUFjdCB8fCBudW1Eb25lKSA/ICgKKyAg
ICAgICAgICAgICAgICAgICAgPEZvb3Qgb25DbGVhcj17IHRoaXMuY2xlYXJDb21wbGV0ZWQgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgbGVmdD17bnVtQWN0fSBkb25lPXtudW1Eb25lfSByb3V0
ZT17cm91dGV9CisgICAgICAgICAgICAgICAgICAgIC8+CisgICAgICAgICAgICAgICAgKSA6IG51
bGwgfQorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICkKKyAgICB9Cit9CisKK3JlbmRlcig8
QXBwIC8+LCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXBwJykpOwpkaWZmIC0tZ2l0IGEvV2Vi
c2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvaW5mZXJuby9zcmMvaXRlbS5qcyBiL1dlYnNpdGVzL2Jyb3dz
ZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL2luZmVybm8vc3JjL2l0ZW0uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTdmOGIxZDBlOGIwOTBi
OTZjNjg1YTk3MTEwODlkOWRjMDAzODNkOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jy
b3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL2luZmVybm8vc3JjL2l0ZW0uanMKQEAgLTAsMCArMSw1OCBAQAoraW1wb3J0
IEluZmVybm8gZnJvbSAnaW5mZXJubyc7CitpbXBvcnQgQ29tcG9uZW50IGZyb20gJ2luZmVybm8t
Y29tcG9uZW50JzsKK2ltcG9ydCB7IEVTQ0FQRSwgRU5URVIsIGlzRXF1YWwgfSBmcm9tICcuL3No
YXJlJzsKKworZXhwb3J0IGRlZmF1bHQgY2xhc3MgSXRlbSBleHRlbmRzIENvbXBvbmVudCB7Cisg
ICAgY29uc3RydWN0b3Ioe2RhdGEsIC4uLnByb3BzfSkgeworICAgICAgICBzdXBlcihwcm9wcyk7
CisgICAgICAgIHRoaXMudG9kbyA9IGRhdGE7CisgICAgICAgIHRoaXMuc3RhdGUgPSB7dGV4dDog
ZGF0YS50aXRsZX07CisgICAgICAgIHRoaXMuZWRpdG9yID0gbnVsbDsKKyAgICB9CisKKyAgICBj
b21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID0gKHtkYXRhfSkgPT4gdGhpcy5zZXRUZXh0KGRhdGEu
dGl0bGUpOworICAgIHNob3VsZENvbXBvbmVudFVwZGF0ZSA9ICh7ZGF0YX0sIHt0ZXh0fSkgPT4g
IShpc0VxdWFsKGRhdGEsIHRoaXMudG9kbykgJiYgdGV4dCA9PT0gdGhpcy5zdGF0ZS50ZXh0KTsK
KyAgICBjb21wb25lbnRXaWxsVXBkYXRlID0gKHtkYXRhfSkgPT4gKHRoaXMudG9kbyA9IGRhdGEp
OworICAgIGNvbXBvbmVudERpZFVwZGF0ZSA9ICgpID0+IHRoaXMuZWRpdG9yLmZvY3VzKCk7CisK
KyAgICBzZXRUZXh0ID0gdGV4dCA9PiB0aGlzLnNldFN0YXRlKHt0ZXh0fSk7CisKKyAgICByZW5k
ZXIoe2RvVG9nZ2xlLCBkb0RlbGV0ZSwgZG9TYXZlLCBvbkJsdXIsIG9uRm9jdXN9LCB7dGV4dH0p
IHsKKyAgICAgICAgY29uc3Qge3RpdGxlLCBjb21wbGV0ZWQsIGVkaXRpbmd9ID0gdGhpcy50b2Rv
OworCisgICAgICAgIGNvbnN0IGNscyA9IFtdOworICAgICAgICBlZGl0aW5nICYmIGNscy5wdXNo
KCdlZGl0aW5nJyk7CisgICAgICAgIGNvbXBsZXRlZCAmJiBjbHMucHVzaCgnY29tcGxldGVkJyk7
CisKKyAgICAgICAgY29uc3QgaGFuZGxlS2V5ZG93biA9IGUgPT4geworICAgICAgICAgICAgaWYg
KGUud2hpY2ggPT09IEVTQ0FQRSkgcmV0dXJuIG9uQmx1cigpOworICAgICAgICAgICAgaWYgKGUu
d2hpY2ggPT09IEVOVEVSKSByZXR1cm4gZG9TYXZlKHRleHQpOworICAgICAgICB9OworCisgICAg
ICAgIC8vIHRtcCBmaXgKKyAgICAgICAgY29uc3QgaGFuZGxlQmx1ciA9ICgpID0+IGRvU2F2ZSh0
ZXh0KTsKKyAgICAgICAgY29uc3QgaGFuZGxlSW5wdXQgPSBlID0+IHRoaXMuc2V0VGV4dChlLnRh
cmdldC52YWx1ZSk7CisKKyAgICAgICAgcmV0dXJuICgKKyAgICAgICAgICAgIDxsaSBjbGFzc05h
bWU9eyBjbHMuam9pbignICcpIH0+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9InZp
ZXciPgorICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3NOYW1lPSJ0b2dnbGUiIHR5cGU9
ImNoZWNrYm94IgorICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17IGNvbXBsZXRlZCB9
IG9uQ2xpY2s9eyBkb1RvZ2dsZSB9CisgICAgICAgICAgICAgICAgICAgIC8+CisKKyAgICAgICAg
ICAgICAgICAgICAgPGxhYmVsIG9uZGJsY2xpY2s9eyBvbkZvY3VzIH0+eyB0aXRsZSB9PC9sYWJl
bD4KKworICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT0iZGVzdHJveSIgb25D
bGljaz17IGRvRGVsZXRlIH0+PC9idXR0b24+CisgICAgICAgICAgICAgICAgPC9kaXY+CisKKyAg
ICAgICAgICAgICAgICA8aW5wdXQgY2xhc3NOYW1lPSJlZGl0IgorICAgICAgICAgICAgICAgICAg
ICByZWY9e2VsID0+IHsgdGhpcy5lZGl0b3IgPSBlbCB9fQorICAgICAgICAgICAgICAgICAgICB2
YWx1ZT17IGVkaXRpbmcgJiYgdGV4dCB9CisgICAgICAgICAgICAgICAgICAgIG9uYmx1cj17IGhh
bmRsZUJsdXIgfQorICAgICAgICAgICAgICAgICAgICBvbmlucHV0PXsgaGFuZGxlSW5wdXQgfQor
ICAgICAgICAgICAgICAgICAgICBvbmtleWRvd249eyBoYW5kbGVLZXlkb3duIH0KKyAgICAgICAg
ICAgICAgICAvPgorICAgICAgICAgICAgPC9saT4KKyAgICAgICAgKTsKKyAgICB9Cit9CmRpZmYg
LS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9pbmZlcm5vL3NyYy9tb2RlbC5qcyBiL1dl
YnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2luZmVybm8vc3JjL21vZGVsLmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUy
ZWFmNDY2MzVhZGNiNzNlZmU1OWQ1ZThkZWI0MGUxNWQ3NDA2MjQKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2Rv
bXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9pbmZlcm5vL3NyYy9tb2RlbC5qcwpAQCAtMCwwICsx
LDM2IEBACitpbXBvcnQgeyBhc3NpZ24sIGlzRXF1YWwgfSBmcm9tICcuL3NoYXJlJzsKKworY29u
c3QgU1RPUiA9IHt9OworY29uc3QgU1RPUl9JRCA9ICd0b2Rvcy1pbmZlcm5vJzsKKworZXhwb3J0
IGRlZmF1bHQgY2xhc3MgTW9kZWwgeworICAgIGdldCA9ICgpID0+ICh0aGlzLmRhdGEgPSBKU09O
LnBhcnNlKFNUT1JbU1RPUl9JRF0gfHwgJ1tdJykpCisKKyAgICBzZXQgPSBhcnIgPT4geworICAg
ICAgICB0aGlzLmRhdGEgPSBhcnIgfHwgdGhpcy5kYXRhIHx8IFtdOworICAgICAgICBTVE9SW1NU
T1JfSURdID0gSlNPTi5zdHJpbmdpZnkodGhpcy5kYXRhKTsKKyAgICAgICAgcmV0dXJuIHRoaXMu
ZGF0YTsKKyAgICB9CisKKyAgICBhZGQgPSBzdHIgPT4gdGhpcy5zZXQoCisgICAgICAgIHRoaXMu
ZGF0YS5jb25jYXQoe3RpdGxlOiBzdHIsIGNvbXBsZXRlZDogZmFsc2V9KQorICAgICkKKworICAg
IHB1dCA9ICh0b2RvLCBvYmopID0+IHRoaXMuc2V0KAorICAgICAgICB0aGlzLmRhdGEubWFwKHQg
PT4gaXNFcXVhbCh0LCB0b2RvKSA/IGFzc2lnbih0b2RvLCBvYmopIDogdCkKKyAgICApCisKKyAg
ICBkZWwgPSB0b2RvID0+IHRoaXMuc2V0KAorICAgICAgICB0aGlzLmRhdGEuZmlsdGVyKHQgPT4g
IWlzRXF1YWwodCwgdG9kbykpCisgICAgKQorCisgICAgdG9nZ2xlID0gdG9kbyA9PiB0aGlzLnB1
dCh0b2RvLCB7Y29tcGxldGVkOiAhdG9kby5jb21wbGV0ZWR9KQorCisgICAgdG9nZ2xlQWxsID0g
Y29tcGxldGVkID0+IHRoaXMuc2V0KAorICAgICAgICB0aGlzLmRhdGEubWFwKHQgPT4gKHsuLi50
LCBjb21wbGV0ZWR9KSkKKyAgICApCisKKyAgICBjbGVhckNvbXBsZXRlZCA9ICgpID0+IHRoaXMu
c2V0KAorICAgICAgICB0aGlzLmRhdGEuZmlsdGVyKHQgPT4gIXQuY29tcGxldGVkKQorICAgICkK
K30KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEv
cmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2luZmVybm8vc3JjL3NoYXJl
LmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvaW5mZXJuby9zcmMvc2hhcmUuanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOWU3ZDk2MmI4ZjE3NzQ3MDJkNzY1NDZjYTEwOWFkOTc5MjQ0YTNlMAotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2luZmVybm8vc3JjL3NoYXJlLmpzCkBA
IC0wLDAgKzEsNTggQEAKKy8qKgorICogU2hhcmVkIGZ1bmNzL3ZhbHVlcworICovCisKK2V4cG9y
dCBjb25zdCBFTlRFUiA9IDEzOworZXhwb3J0IGNvbnN0IEVTQ0FQRSA9IDI3OworCitleHBvcnQg
Y29uc3QgZmlsdGVycyA9IHsKKyAgICBhbGw6IHQgPT4gdHJ1ZSwKKyAgICBhY3RpdmU6IHQgPT4g
IXQuY29tcGxldGVkLAorICAgIGNvbXBsZXRlZDogdCA9PiB0LmNvbXBsZXRlZAorfQorCisvKioK
KyAqIFJlYWQgdGhlIGBsb2NhdGlvbi5oYXNoYCB2YWx1ZQorICogQHJldHVybiB7U3RyaW5nfQor
ICovCitleHBvcnQgZnVuY3Rpb24gcmVhZCgpIHsKKyAgICByZXR1cm4gbG9jYXRpb24uaGFzaC5y
ZXBsYWNlKCcjLycsICcnKSB8fCAnYWxsJzsKK30KKworLyoqCisgKiBNb2RpZmllZCBgT2JqZWN0
LmFzc2lnbmAgc2hpbQorICogLSBhbHdheXMgd3JpdGVzIHRvIG5ldyBvYmplY3QKKyAqIEByZXR1
cm4ge09iamVjdH0KKyAqLworZXhwb3J0IGZ1bmN0aW9uIGFzc2lnbigpIHsKKyAgICBsZXQgc3Jj
OworICAgIGxldCB0YXIgPSB7fTsKKyAgICBmb3IgKGxldCBzID0gMDsgcyA8IGFyZ3VtZW50cy5s
ZW5ndGg7IHMrKykgeworICAgICAgICBzcmMgPSBPYmplY3QoYXJndW1lbnRzW3NdKTsKKyAgICAg
ICAgZm9yIChjb25zdCBrIGluIHNyYykgeworICAgICAgICAgICAgdGFyW2tdID0gc3JjW2tdOwor
ICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0YXI7Cit9CisKKy8qKgorICogQXJlIHR3byBP
YmplY3RzIGVxdWFsIHZhbHVlcz8KKyAqIEBwYXJhbSAge09iamVjdH0gYQorICogQHBhcmFtICB7
T2JqZWN0fSBiCisgKiBAcmV0dXJuIHtCb29sZWFufQorICovCitleHBvcnQgZnVuY3Rpb24gaXNF
cXVhbChhLCBiKSB7CisgICAgLy8gQ3JlYXRlIGFycmF5cyBvZiBwcm9wZXJ0eSBuYW1lcworICAg
IGNvbnN0IGFQcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGEpOworICAgIGNvbnN0
IGJQcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGIpOworCisgICAgaWYgKGFQcm9w
cy5sZW5ndGggIT09IGJQcm9wcy5sZW5ndGgpIHJldHVybiBmYWxzZTsKKworICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgYVByb3BzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGNvbnN0IGsgPSBhUHJv
cHNbaV07CisgICAgICAgIGlmIChhW2tdICE9PSBiW2tdKSByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gu
b3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9pbmZlcm5vL3dlYnBhY2suY29uZmlnLmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9T
cGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvaW5m
ZXJuby93ZWJwYWNrLmNvbmZpZy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jN2IzZTZmN2ZkNjhiYmM2OTNmMmUz
ODVjMGNlMjFhZDQzZTA0NWJkCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJl
bmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvaW5mZXJuby93ZWJwYWNrLmNvbmZpZy5qcwpAQCAtMCwwICsxLDMxIEBACitjb25zdCB3
ZWJwYWNrID0gcmVxdWlyZSgnd2VicGFjaycpOworCittb2R1bGUuZXhwb3J0cyA9IHsKKyAgICBl
bnRyeTogJy4vc3JjL2luZGV4LmpzJywKKyAgICBvdXRwdXQ6IHsKKyAgICAgICAgcGF0aDogJy4v
ZGlzdCcsCisgICAgICAgIHB1YmxpY1BhdGg6ICdkaXN0JywKKyAgICAgICAgZmlsZW5hbWU6ICdi
dW5kbGUuanMnCisgICAgfSwKKyAgICBtb2R1bGU6IHsKKyAgICAgICAgbG9hZGVyczogW3sKKyAg
ICAgICAgICAgIHRlc3Q6IC9cLmpzeD8kLywKKyAgICAgICAgICAgIGV4Y2x1ZGU6IC9ub2RlX21v
ZHVsZXMvLAorICAgICAgICAgICAgbG9hZGVyOiAnYmFiZWwnLAorICAgICAgICAgICAgcXVlcnk6
IHsKKyAgICAgICAgICAgICAgICBwcmVzZXRzOiBbJ2VzMjAxNS1sb29zZScsICdzdGFnZS0wJ10s
CisgICAgICAgICAgICAgICAgcGx1Z2luczogWydzeW50YXgtanN4JywgJ2luZmVybm8nXQorICAg
ICAgICAgICAgfQorICAgICAgICB9XQorICAgIH0sCisgICAgcGx1Z2luczogWworICAgICAgICBu
ZXcgd2VicGFjay5EZWZpbmVQbHVnaW4oeworICAgICAgICAgICAgJ3Byb2Nlc3MuZW52Jzogewor
ICAgICAgICAgICAgICAgICdOT0RFX0VOVic6IEpTT04uc3RyaW5naWZ5KCdwcm9kdWN0aW9uJykK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSksCisgICAgXSwKKyAgICBkZXZTZXJ2ZXI6IHsKKyAg
ICAgICAgcG9ydDogcHJvY2Vzcy5lbnYuUE9SVCB8fCA4MDAwCisgICAgfQorfTsKZGlmZiAtLWdp
dCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2pxdWVyeS9jc3MvYXBwLmNzcyBiL1dlYnNpdGVz
L2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL2pxdWVyeS9jc3MvYXBwLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYzcyM2IwMWMx
ZTc3ZTI1YTJiNzJjOTQzNDZjZjdlMzBlZjUxNzhlCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0
ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5L2Nzcy9hcHAuY3NzCkBAIC0wLDAgKzEsNCBAQAorI21h
aW4sCisjZm9vdGVyIHsKKyAgICBkaXNwbGF5OiBub25lOworfQpkaWZmIC0tZ2l0IGEvV2Vic2l0
ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5L2luZGV4Lmh0bWwgYi9XZWJzaXRlcy9icm93c2VyYmVu
Y2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9qcXVlcnkvaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MzYxMGIyY2M0ZWNmY2M3MzU4OGIx
ZmUxNmNhMzgzMWNlNWU0MjE4Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJl
bmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvanF1ZXJ5L2luZGV4Lmh0bWwKQEAgLTAsMCArMSw2MSBAQAorPCFkb2N0eXBlIGh0bWw+
Cis8aHRtbCBsYW5nPSJlbiIgZGF0YS1mcmFtZXdvcms9ImpxdWVyeSI+CisgICAgPGhlYWQ+Cisg
ICAgICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICAgICAgPHRpdGxlPmpRdWVyeSDigKIg
VG9kb01WQzwvdGl0bGU+CisgICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ibm9k
ZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuY3NzIj4KKyAgICAgICAgPGxpbmsgcmVsPSJz
dHlsZXNoZWV0IiBocmVmPSJub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL2luZGV4LmNzcyI+
CisgICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL2FwcC5jc3MiPgorICAg
IDwvaGVhZD4KKyAgICA8Ym9keT4KKyAgICAgICAgPHNlY3Rpb24gaWQ9InRvZG9hcHAiIGNsYXNz
PSJ0b2RvYXBwIj4KKyAgICAgICAgICAgIDxoZWFkZXIgaWQ9ImhlYWRlciIgY2xhc3M9ImhlYWRl
ciI+CisgICAgICAgICAgICAgICAgPGgxPnRvZG9zPC9oMT4KKyAgICAgICAgICAgICAgICA8aW5w
dXQgaWQ9Im5ldy10b2RvIiBjbGFzcz0ibmV3LXRvZG8iIHBsYWNlaG9sZGVyPSJXaGF0IG5lZWRz
IHRvIGJlIGRvbmU/IiBhdXRvZm9jdXM+CisgICAgICAgICAgICA8L2hlYWRlcj4KKyAgICAgICAg
ICAgIDxzZWN0aW9uIGlkPSJtYWluIiBjbGFzcz0ibWFpbiI+CisgICAgICAgICAgICAgICAgPGlu
cHV0IGlkPSJ0b2dnbGUtYWxsIiBjbGFzcz0idG9nZ2xlLWFsbCIgdHlwZT0iY2hlY2tib3giPgor
ICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9InRvZ2dsZS1hbGwiPk1hcmsgYWxsIGFzIGNvbXBs
ZXRlPC9sYWJlbD4KKyAgICAgICAgICAgICAgICA8dWwgaWQ9InRvZG8tbGlzdCIgY2xhc3M9InRv
ZG8tbGlzdCI+PC91bD4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgICAgIDxmb290
ZXIgaWQ9ImZvb3RlciIgY2xhc3M9ImZvb3RlciI+PC9mb290ZXI+CisgICAgICAgIDwvc2VjdGlv
bj4KKyAgICAgICAgPGZvb3RlciBpZD0iaW5mbyIgY2xhc3M9ImluZm8iPgorICAgICAgICAgICAg
PHA+RG91YmxlLWNsaWNrIHRvIGVkaXQgYSB0b2RvPC9wPgorICAgICAgICAgICAgPHA+Q3JlYXRl
ZCBieSA8YSBocmVmPSJodHRwOi8vc2luZHJlc29yaHVzLmNvbSI+U2luZHJlIFNvcmh1czwvYT48
L3A+CisgICAgICAgICAgICA8cD5QYXJ0IG9mIDxhIGhyZWY9Imh0dHA6Ly90b2RvbXZjLmNvbSI+
VG9kb01WQzwvYT48L3A+CisgICAgICAgIDwvZm9vdGVyPgorICAgICAgICA8c2NyaXB0IGlkPSJ0
b2RvLXRlbXBsYXRlIiB0eXBlPSJ0ZXh0L3gtaGFuZGxlYmFycy10ZW1wbGF0ZSI+CisgICAgICAg
ICAgICB7eyN0aGlzfX0KKyAgICAgICAgICAgIDxsaSB7eyNpZiBjb21wbGV0ZWR9fWNsYXNzPSJj
b21wbGV0ZWQie3svaWZ9fSBkYXRhLWlkPSJ7e2lkfX0iPgorICAgICAgICAgICAgICAgIDxkaXYg
Y2xhc3M9InZpZXciPgorICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9InRvZ2dsZSIg
dHlwZT0iY2hlY2tib3giIHt7I2lmIGNvbXBsZXRlZH19Y2hlY2tlZHt7L2lmfX0+CisgICAgICAg
ICAgICAgICAgICAgIDxsYWJlbD57e3RpdGxlfX08L2xhYmVsPgorICAgICAgICAgICAgICAgICAg
ICA8YnV0dG9uIGNsYXNzPSJkZXN0cm95Ij48L2J1dHRvbj4KKyAgICAgICAgICAgICAgICA8L2Rp
dj4KKyAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImVkaXQiIHZhbHVlPSJ7e3RpdGxlfX0i
PgorICAgICAgICAgICAgPC9saT4KKyAgICAgICAge3svdGhpc319CisgICAgICAgIDwvc2NyaXB0
PgorICAgICAgICA8c2NyaXB0IGlkPSJmb290ZXItdGVtcGxhdGUiIHR5cGU9InRleHQveC1oYW5k
bGViYXJzLXRlbXBsYXRlIj4KKyAgICAgICAgICAgIDxzcGFuIGlkPSJ0b2RvLWNvdW50IiBjbGFz
cz0idG9kby1jb3VudCI+PHN0cm9uZz57e2FjdGl2ZVRvZG9Db3VudH19PC9zdHJvbmc+IHt7YWN0
aXZlVG9kb1dvcmR9fSBsZWZ0PC9zcGFuPgorICAgICAgICAgICAgPHVsIGlkPSJmaWx0ZXJzIiBj
bGFzcz0iZmlsdGVycyI+CisgICAgICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICAgICAg
ICA8YSB7eyNlcSBmaWx0ZXIgJ2FsbCd9fWNsYXNzPSJzZWxlY3RlZCJ7ey9lcX19IGhyZWY9IiMv
YWxsIj5BbGw8L2E+CisgICAgICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGk+
CisgICAgICAgICAgICAgICAgICAgIDxhIHt7I2VxIGZpbHRlciAnYWN0aXZlJ319Y2xhc3M9InNl
bGVjdGVkInt7L2VxfX1ocmVmPSIjL2FjdGl2ZSI+QWN0aXZlPC9hPgorICAgICAgICAgICAgICAg
IDwvbGk+CisgICAgICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICAgICAgICA8YSB7eyNl
cSBmaWx0ZXIgJ2NvbXBsZXRlZCd9fWNsYXNzPSJzZWxlY3RlZCJ7ey9lcX19aHJlZj0iIy9jb21w
bGV0ZWQiPkNvbXBsZXRlZDwvYT4KKyAgICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAg
PC91bD4KKyAgICAgICAgICAgIHt7I2lmIGNvbXBsZXRlZFRvZG9zfX08YnV0dG9uIGlkPSJjbGVh
ci1jb21wbGV0ZWQiPkNsZWFyIGNvbXBsZXRlZDwvYnV0dG9uPnt7L2lmfX0KKyAgICAgICAgPC9z
Y3JpcHQ+CisgICAgICAgIDwhLS0gPHNjcmlwdCBzcmM9Im5vZGVfbW9kdWxlcy90b2RvbXZjLWNv
bW1vbi9iYXNlLmpzIj48L3NjcmlwdD4gLS0+CisgICAgICAgIDxzY3JpcHQgc3JjPSJub2RlX21v
ZHVsZXMvanF1ZXJ5L2Rpc3QvanF1ZXJ5LmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBz
cmM9Im5vZGVfbW9kdWxlcy9oYW5kbGViYXJzL2Rpc3QvaGFuZGxlYmFycy5qcyI+PC9zY3JpcHQ+
CisgICAgICAgIDxzY3JpcHQgc3JjPSJub2RlX21vZHVsZXMvZGlyZWN0b3IvZGlzdC9kaXJlY3Rv
ci5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJqcy9hcHAuanMiPjwvc2NyaXB0
PgorICAgIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5j
aC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL2pxdWVyeS9qcy9hcHAuanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21l
dGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9qcXVlcnkvanMv
YXBwLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmYzNDVkMDk4YzBmOWFjZGRkOWUyNTRmYjJkZjY0NTc1MDE5ZWJi
NGMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21l
dGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9qcXVlcnkvanMv
YXBwLmpzCkBAIC0wLDAgKzEsMTk2IEBACisvKmdsb2JhbCBqUXVlcnksIEhhbmRsZWJhcnMsIFJv
dXRlciAqLworalF1ZXJ5KGZ1bmN0aW9uICgkKSB7CisgICAgJ3VzZSBzdHJpY3QnOworCisgICAg
SGFuZGxlYmFycy5yZWdpc3RlckhlbHBlcignZXEnLCBmdW5jdGlvbiAoYSwgYiwgb3B0aW9ucykg
eworICAgICAgICByZXR1cm4gYSA9PT0gYiA/IG9wdGlvbnMuZm4odGhpcykgOiBvcHRpb25zLmlu
dmVyc2UodGhpcyk7CisgICAgfSk7CisKKworICAgIHZhciB1dGlsID0geworICAgICAgICB1dWlk
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAvKmpzaGludCBiaXR3aXNlOmZhbHNlICovCisg
ICAgICAgICAgICB2YXIgaSwgcmFuZG9tOworICAgICAgICAgICAgdmFyIHV1aWQgPSAnJzsKKwor
ICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKyAgICAgICAgICAgICAgICBy
YW5kb20gPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwOworICAgICAgICAgICAgICAgIGlmIChpID09
PSA4IHx8IGkgPT09IDEyIHx8IGkgPT09IDE2IHx8IGkgPT09IDIwKSB7CisgICAgICAgICAgICAg
ICAgICAgIHV1aWQgKz0gJy0nOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB1
dWlkICs9IChpID09PSAxMiA/IDQgOiAoaSA9PT0gMTYgPyAocmFuZG9tICYgMyB8IDgpIDogcmFu
ZG9tKSkudG9TdHJpbmcoMTYpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4g
dXVpZDsKKyAgICAgICAgfSwKKyAgICAgICAgcGx1cmFsaXplOiBmdW5jdGlvbiAoY291bnQsIHdv
cmQpIHsKKyAgICAgICAgICAgIHJldHVybiBjb3VudCA9PT0gMSA/IHdvcmQgOiB3b3JkICsgJ3Mn
OworICAgICAgICB9LAorICAgICAgICBzdG9yZTogZnVuY3Rpb24gKG5hbWVzcGFjZSwgZGF0YSkg
eworICAgICAgICAgICAgcmV0dXJuIFtdOworICAgICAgICB9CisgICAgfTsKKworICAgIHZhciBB
cHAgPSB7CisgICAgICAgIEVOVEVSX0tFWTogMTMsCisgICAgICAgIEVTQ0FQRV9LRVk6IDI3LAor
ICAgICAgICBpbml0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB0aGlzLnRvZG9zID0gdXRp
bC5zdG9yZSgndG9kb3MtanF1ZXJ5Jyk7CisgICAgICAgICAgICB0aGlzLnRvZG9UZW1wbGF0ZSA9
IEhhbmRsZWJhcnMuY29tcGlsZSgkKCcjdG9kby10ZW1wbGF0ZScpLmh0bWwoKSk7CisgICAgICAg
ICAgICB0aGlzLmZvb3RlclRlbXBsYXRlID0gSGFuZGxlYmFycy5jb21waWxlKCQoJyNmb290ZXIt
dGVtcGxhdGUnKS5odG1sKCkpOworICAgICAgICAgICAgdGhpcy5iaW5kRXZlbnRzKCk7CisKKyAg
ICAgICAgICAgIG5ldyBSb3V0ZXIoeworICAgICAgICAgICAgICAgICcvOmZpbHRlcic6IGZ1bmN0
aW9uIChmaWx0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXIgPSBmaWx0ZXI7
CisgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyKCk7CisgICAgICAgICAgICAgICAgfS5i
aW5kKHRoaXMpCisgICAgICAgICAgICB9KS5pbml0KCcvYWxsJyk7CisKKyAgICAgICAgICAgIHZh
ciBkdW1teU5vZGVUb05vdGlmeUFwcElzUmVhZHkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdk
aXYnKTsKKyAgICAgICAgICAgIGR1bW15Tm9kZVRvTm90aWZ5QXBwSXNSZWFkeS5pZCA9ICdhcHBJ
c1JlYWR5JzsKKyAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZHVtbXlOb2Rl
VG9Ob3RpZnlBcHBJc1JlYWR5KTsKKyAgICAgICAgfSwKKyAgICAgICAgYmluZEV2ZW50czogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgJCgnI25ldy10b2RvJykub24oJ2tleXVwJywgdGhpcy5j
cmVhdGUuYmluZCh0aGlzKSk7CisgICAgICAgICAgICAkKCcjdG9nZ2xlLWFsbCcpLm9uKCdjaGFu
Z2UnLCB0aGlzLnRvZ2dsZUFsbC5iaW5kKHRoaXMpKTsKKyAgICAgICAgICAgICQoJyNmb290ZXIn
KS5vbignY2xpY2snLCAnI2NsZWFyLWNvbXBsZXRlZCcsIHRoaXMuZGVzdHJveUNvbXBsZXRlZC5i
aW5kKHRoaXMpKTsKKyAgICAgICAgICAgICQoJyN0b2RvLWxpc3QnKQorICAgICAgICAgICAgICAg
IC5vbignY2hhbmdlJywgJy50b2dnbGUnLCB0aGlzLnRvZ2dsZS5iaW5kKHRoaXMpKQorICAgICAg
ICAgICAgICAgIC5vbignZGJsY2xpY2snLCAnbGFiZWwnLCB0aGlzLmVkaXQuYmluZCh0aGlzKSkK
KyAgICAgICAgICAgICAgICAub24oJ2tleXVwJywgJy5lZGl0JywgdGhpcy5lZGl0S2V5dXAuYmlu
ZCh0aGlzKSkKKyAgICAgICAgICAgICAgICAub24oJ2ZvY3Vzb3V0JywgJy5lZGl0JywgdGhpcy51
cGRhdGUuYmluZCh0aGlzKSkKKyAgICAgICAgICAgICAgICAub24oJ2NsaWNrJywgJy5kZXN0cm95
JywgdGhpcy5kZXN0cm95LmJpbmQodGhpcykpOworICAgICAgICB9LAorICAgICAgICByZW5kZXI6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciB0b2RvcyA9IHRoaXMuZ2V0RmlsdGVyZWRU
b2RvcygpOworICAgICAgICAgICAgJCgnI3RvZG8tbGlzdCcpLmh0bWwodGhpcy50b2RvVGVtcGxh
dGUodG9kb3MpKTsKKyAgICAgICAgICAgICQoJyNtYWluJykudG9nZ2xlKHRvZG9zLmxlbmd0aCA+
IDApOworICAgICAgICAgICAgJCgnI3RvZ2dsZS1hbGwnKS5wcm9wKCdjaGVja2VkJywgdGhpcy5n
ZXRBY3RpdmVUb2RvcygpLmxlbmd0aCA9PT0gMCk7CisgICAgICAgICAgICB0aGlzLnJlbmRlckZv
b3RlcigpOworICAgICAgICAgICAgJCgnI25ldy10b2RvJykuZm9jdXMoKTsKKyAgICAgICAgICAg
IHV0aWwuc3RvcmUoJ3RvZG9zLWpxdWVyeScsIHRoaXMudG9kb3MpOworICAgICAgICB9LAorICAg
ICAgICByZW5kZXJGb290ZXI6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciB0b2RvQ291
bnQgPSB0aGlzLnRvZG9zLmxlbmd0aDsKKyAgICAgICAgICAgIHZhciBhY3RpdmVUb2RvQ291bnQg
PSB0aGlzLmdldEFjdGl2ZVRvZG9zKCkubGVuZ3RoOworICAgICAgICAgICAgdmFyIHRlbXBsYXRl
ID0gdGhpcy5mb290ZXJUZW1wbGF0ZSh7CisgICAgICAgICAgICAgICAgYWN0aXZlVG9kb0NvdW50
OiBhY3RpdmVUb2RvQ291bnQsCisgICAgICAgICAgICAgICAgYWN0aXZlVG9kb1dvcmQ6IHV0aWwu
cGx1cmFsaXplKGFjdGl2ZVRvZG9Db3VudCwgJ2l0ZW0nKSwKKyAgICAgICAgICAgICAgICBjb21w
bGV0ZWRUb2RvczogdG9kb0NvdW50IC0gYWN0aXZlVG9kb0NvdW50LAorICAgICAgICAgICAgICAg
IGZpbHRlcjogdGhpcy5maWx0ZXIKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAkKCcj
Zm9vdGVyJykudG9nZ2xlKHRvZG9Db3VudCA+IDApLmh0bWwodGVtcGxhdGUpOworICAgICAgICB9
LAorICAgICAgICB0b2dnbGVBbGw6IGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICB2YXIgaXND
aGVja2VkID0gJChlLnRhcmdldCkucHJvcCgnY2hlY2tlZCcpOworCisgICAgICAgICAgICB0aGlz
LnRvZG9zLmZvckVhY2goZnVuY3Rpb24gKHRvZG8pIHsKKyAgICAgICAgICAgICAgICB0b2RvLmNv
bXBsZXRlZCA9IGlzQ2hlY2tlZDsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICB0aGlz
LnJlbmRlcigpOworICAgICAgICB9LAorICAgICAgICBnZXRBY3RpdmVUb2RvczogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9kb3MuZmlsdGVyKGZ1bmN0aW9uICh0b2Rv
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICF0b2RvLmNvbXBsZXRlZDsKKyAgICAgICAgICAg
IH0pOworICAgICAgICB9LAorICAgICAgICBnZXRDb21wbGV0ZWRUb2RvczogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9kb3MuZmlsdGVyKGZ1bmN0aW9uICh0b2RvKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRvZG8uY29tcGxldGVkOworICAgICAgICAgICAgfSk7
CisgICAgICAgIH0sCisgICAgICAgIGdldEZpbHRlcmVkVG9kb3M6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIGlmICh0aGlzLmZpbHRlciA9PT0gJ2FjdGl2ZScpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5nZXRBY3RpdmVUb2RvcygpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAodGhpcy5maWx0ZXIgPT09ICdjb21wbGV0ZWQnKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXMuZ2V0Q29tcGxldGVkVG9kb3MoKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMudG9kb3M7CisgICAgICAgIH0sCisgICAgICAgIGRlc3Ryb3lDb21w
bGV0ZWQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHRoaXMudG9kb3MgPSB0aGlzLmdldEFj
dGl2ZVRvZG9zKCk7CisgICAgICAgICAgICB0aGlzLmZpbHRlciA9ICdhbGwnOworICAgICAgICAg
ICAgdGhpcy5yZW5kZXIoKTsKKyAgICAgICAgfSwKKyAgICAgICAgLy8gYWNjZXB0cyBhbiBlbGVt
ZW50IGZyb20gaW5zaWRlIHRoZSBgLml0ZW1gIGRpdiBhbmQKKyAgICAgICAgLy8gcmV0dXJucyB0
aGUgY29ycmVzcG9uZGluZyBpbmRleCBpbiB0aGUgYHRvZG9zYCBhcnJheQorICAgICAgICBpbmRl
eEZyb21FbDogZnVuY3Rpb24gKGVsKSB7CisgICAgICAgICAgICB2YXIgaWQgPSAkKGVsKS5jbG9z
ZXN0KCdsaScpLmRhdGEoJ2lkJyk7CisgICAgICAgICAgICB2YXIgdG9kb3MgPSB0aGlzLnRvZG9z
OworICAgICAgICAgICAgdmFyIGkgPSB0b2Rvcy5sZW5ndGg7CisKKyAgICAgICAgICAgIHdoaWxl
IChpLS0pIHsKKyAgICAgICAgICAgICAgICBpZiAodG9kb3NbaV0uaWQgPT09IGlkKSB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSwKKyAgICAgICAgY3JlYXRlOiBmdW5jdGlvbiAoZSkgeworICAgICAgICAg
ICAgdmFyICRpbnB1dCA9ICQoZS50YXJnZXQpOworICAgICAgICAgICAgdmFyIHZhbCA9ICQudHJp
bSgkaW5wdXQudmFsKCkpOworCisgICAgICAgICAgICBpZiAoZS53aGljaCAhPT0gdGhpcy5FTlRF
Ul9LRVkgfHwgIXZhbCkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgdGhpcy50b2Rvcy5wdXNoKHsKKyAgICAgICAgICAgICAgICBpZDogdXRp
bC51dWlkKCksCisgICAgICAgICAgICAgICAgdGl0bGU6IHZhbCwKKyAgICAgICAgICAgICAgICBj
b21wbGV0ZWQ6IGZhbHNlCisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgJGlucHV0LnZh
bCgnJyk7CisKKyAgICAgICAgICAgIHRoaXMucmVuZGVyKCk7CisgICAgICAgIH0sCisgICAgICAg
IHRvZ2dsZTogZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgIHZhciBpID0gdGhpcy5pbmRleEZy
b21FbChlLnRhcmdldCk7CisgICAgICAgICAgICB0aGlzLnRvZG9zW2ldLmNvbXBsZXRlZCA9ICF0
aGlzLnRvZG9zW2ldLmNvbXBsZXRlZDsKKyAgICAgICAgICAgIHRoaXMucmVuZGVyKCk7CisgICAg
ICAgIH0sCisgICAgICAgIGVkaXQ6IGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICB2YXIgJGlu
cHV0ID0gJChlLnRhcmdldCkuY2xvc2VzdCgnbGknKS5hZGRDbGFzcygnZWRpdGluZycpLmZpbmQo
Jy5lZGl0Jyk7CisgICAgICAgICAgICAkaW5wdXQudmFsKCRpbnB1dC52YWwoKSkuZm9jdXMoKTsK
KyAgICAgICAgfSwKKyAgICAgICAgZWRpdEtleXVwOiBmdW5jdGlvbiAoZSkgeworICAgICAgICAg
ICAgaWYgKGUud2hpY2ggPT09IHRoaXMuRU5URVJfS0VZKSB7CisgICAgICAgICAgICAgICAgZS50
YXJnZXQuYmx1cigpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZS53aGljaCA9
PT0gdGhpcy5FU0NBUEVfS0VZKSB7CisgICAgICAgICAgICAgICAgJChlLnRhcmdldCkuZGF0YSgn
YWJvcnQnLCB0cnVlKS5ibHVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAg
IHVwZGF0ZTogZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgIHZhciBlbCA9IGUudGFyZ2V0Owor
ICAgICAgICAgICAgdmFyICRlbCA9ICQoZWwpOworICAgICAgICAgICAgdmFyIHZhbCA9ICRlbC52
YWwoKS50cmltKCk7CisKKyAgICAgICAgICAgIGlmICghdmFsKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5kZXN0cm95KGUpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKCRlbC5kYXRhKCdhYm9ydCcpKSB7CisgICAgICAgICAgICAgICAg
JGVsLmRhdGEoJ2Fib3J0JywgZmFsc2UpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLnRvZG9zW3RoaXMuaW5kZXhGcm9tRWwoZWwpXS50aXRsZSA9IHZhbDsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgdGhpcy5yZW5kZXIoKTsKKyAgICAgICAgfSwKKyAg
ICAgICAgZGVzdHJveTogZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgIHRoaXMudG9kb3Muc3Bs
aWNlKHRoaXMuaW5kZXhGcm9tRWwoZS50YXJnZXQpLCAxKTsKKyAgICAgICAgICAgIHRoaXMucmVu
ZGVyKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgd2luZG93LmFwcCA9IEFwcDsKKyAgICB3
aW5kb3cuYXBwLmluaXQoKTsKK30pOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNo
Lm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvanF1ZXJ5L3JlYWRtZS5tZCBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0
ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2pxdWVyeS9yZWFk
bWUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZGFiNmNmMGU2MjBjMmU2ZDI4NjhlZDY0NGI5ZWNiZjYzMGJlOTI4
NgotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0
ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2pxdWVyeS9yZWFk
bWUubWQKQEAgLTAsMCArMSwzMyBAQAorIyBqUXVlcnkgVG9kb01WQyBFeGFtcGxlCisKKz4galF1
ZXJ5IGlzIGEgZmFzdCwgc21hbGwsIGFuZCBmZWF0dXJlLXJpY2ggSmF2YVNjcmlwdCBsaWJyYXJ5
LiBJdCBtYWtlcyB0aGluZ3MgbGlrZSBIVE1MIGRvY3VtZW50IHRyYXZlcnNhbCBhbmQgbWFuaXB1
bGF0aW9uLCBldmVudCBoYW5kbGluZywgYW5pbWF0aW9uLCBhbmQgQWpheCBtdWNoIHNpbXBsZXIg
d2l0aCBhbiBlYXN5LXRvLXVzZSBBUEkgdGhhdCB3b3JrcyBhY3Jvc3MgYSBtdWx0aXR1ZGUgb2Yg
YnJvd3NlcnMuIFdpdGggYSBjb21iaW5hdGlvbiBvZiB2ZXJzYXRpbGl0eSBhbmQgZXh0ZW5zaWJp
bGl0eSwgalF1ZXJ5IGhhcyBjaGFuZ2VkIHRoZSB3YXkgdGhhdCBtaWxsaW9ucyBvZiBwZW9wbGUg
d3JpdGUgSmF2YVNjcmlwdC4KKworPiBfW2pRdWVyeSAtIGpxdWVyeS5jb21dKGh0dHA6Ly9qcXVl
cnkuY29tKV8KKworCisjIyBMZWFybmluZyBqUXVlcnkKKworVGhlIFtqUXVlcnkgd2Vic2l0ZV0o
aHR0cDovL2pxdWVyeS5jb20pIGlzIGEgZ3JlYXQgcmVzb3VyY2UgZm9yIGdldHRpbmcgc3RhcnRl
ZC4KKworSGVyZSBhcmUgc29tZSBsaW5rcyB5b3UgbWF5IGZpbmQgaGVscGZ1bDoKKworKiBbTGVh
cm5pbmcgQ2VudGVyXShodHRwOi8vbGVhcm4uanF1ZXJ5LmNvbS8pCisqIFtBUEkgUmVmZXJlbmNl
XShodHRwOi8vYXBpLmpxdWVyeS5jb20pCisqIFtQbHVnaW5zXShodHRwOi8vcGx1Z2lucy5qcXVl
cnkuY29tKQorKiBbQnJvd3NlciBTdXBwb3J0XShodHRwOi8vanF1ZXJ5LmNvbS9icm93c2VyLXN1
cHBvcnQpCisqIFtCbG9nXShodHRwOi8vYmxvZy5qcXVlcnkuY29tKQorCitBcnRpY2xlcyBhbmQg
Z3VpZGVzIGZyb20gdGhlIGNvbW11bml0eToKKworKiBbVHJ5IGpRdWVyeV0oaHR0cDovL3RyeS5q
cXVlcnkuY29tKQorKiBbalF1ZXJ5IEFubm90YXRlZCBTb3VyY2VdKGh0dHA6Ly9naXRodWIuY29t
L3JvYmZsYWhlcnR5L2pxdWVyeS1hbm5vdGF0ZWQtc291cmNlKQorKiBbMTAgVGhpbmdzIEkgTGVh
cm5lZCBGcm9tIHRoZSBqUXVlcnkgU291cmNlXShodHRwOi8vcGF1bGlyaXNoLmNvbS8yMDEwLzEw
LXRoaW5ncy1pLWxlYXJuZWQtZnJvbS10aGUtanF1ZXJ5LXNvdXJjZSkKKworR2V0IGhlbHAgZnJv
bSBvdGhlciBqUXVlcnkgdXNlcnM6CisKKyogW2pRdWVyeSBvbiBTdGFja092ZXJmbG93XShodHRw
Oi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zL3RhZ2dlZC9qcXVlcnkpCisqIFtGb3J1bXNd
KGh0dHA6Ly9mb3J1bS5qcXVlcnkuY29tKQorKiBbalF1ZXJ5IG9uIFR3aXR0ZXJdKGh0dHA6Ly90
d2l0dGVyLmNvbS9qcXVlcnkpCisqIFtqUXVlcnkgb24gR29vZ2xlICtdKGh0dHBzOi8vcGx1cy5n
b29nbGUuY29tLzEwMjgyODQ5MTg4NDY3MTAwMzYwOC9wb3N0cykKKworX0lmIHlvdSBoYXZlIG90
aGVyIGhlbHBmdWwgbGlua3MgdG8gc2hhcmUsIG9yIGZpbmQgYW55IG9mIHRoZSBsaW5rcyBhYm92
ZSBubyBsb25nZXIgd29yaywgcGxlYXNlIFtsZXQgdXMga25vd10oaHR0cHM6Ly9naXRodWIuY29t
L3Rhc3RlanMvdG9kb212Yy9pc3N1ZXMpLl8KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJi
ZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL3ByZWFjdC8uYmFiZWxyYyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRv
bWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3ByZWFjdC8u
YmFiZWxyYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hYjcyZWQxOTg2ZGViNzc3MGIyNDQyZGYzZWE4NjEwOTU2YWVh
ZjMxCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9t
ZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcHJlYWN0Ly5i
YWJlbHJjCkBAIC0wLDAgKzEsOSBAQAoreworICAicHJlc2V0cyI6IFsKKyAgICAiZXMyMDE1LWxv
b3NlIiwKKyAgICAic3RhZ2UtMCIKKyAgXSwKKyAgInBsdWdpbnMiOiBbCisgICAgWyJ0cmFuc2Zv
cm0tcmVhY3QtanN4IiwgeyAicHJhZ21hIjoiaCIgfV0KKyAgXQorfQpkaWZmIC0tZ2l0IGEvV2Vi
c2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvcHJlYWN0L1JFQURNRS5tZCBiL1dlYnNpdGVzL2Jyb3dzZXJi
ZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL3ByZWFjdC9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDY0ZDE3MWYwYWExNmFmNDcwNmUz
MDRjYTY4MzA5OTUxYmQwYmMzZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJi
ZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL3ByZWFjdC9SRUFETUUubWQKQEAgLTAsMCArMSwxNiBAQAorIyBTcGVlZG9tZXRlciAy
LjE6IFByZWFjdCBUb2RvTVZDIGV4YW1wbGUKKworIyMgVGVzdCBsb2NhbGx5CisKKzEuIGBucG0g
aW5zdGFsbGAKKzIuIGBucG0gc3RhcnRgCisKKyMjIEJ1aWxkCisKKzEuIGBucG0gcnVuIGJ1aWxk
YAorCisjIyBOb3RlcworCitUaGUgY29tcGlsZWQgdmVyc2lvbiBvZiB0aGUgYXBwbGljYXRpb24g
Y2FuIGJlIGZvdW5kIGluIHRoZSBgYnVpbGRgIGRpcmVjdG9yeS4KK1RoaXMgaXMgd2hhdCB0aGUg
YmVuY2htYXJrIHJ1bm5lciB1c2VzIHdoZW4gcnVubmluZyB0aGUgUHJlYWN0IFRvZG9NVkMgYXMg
cGFydAorb2YgYSBiZW5jaG1hcmsgcnVuLgpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJl
bmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvcHJlYWN0L2Rpc3QvYXBwLmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVl
ZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcHJlYWN0
L2Rpc3QvYXBwLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBiZTZjMzJkZDEyN2QwMzcxMTVlYzc0MWM2NDhiYmY5
ZTM4MGRmNzQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1Nw
ZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9wcmVh
Y3QvZGlzdC9hcHAuanMKQEAgLTAsMCArMSwyIEBACishZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7
ZnVuY3Rpb24gZSgpe31mdW5jdGlvbiB0KHQsbil7dmFyIG8scixpLGwsYT1KO2ZvcihsPWFyZ3Vt
ZW50cy5sZW5ndGg7bC0tID4yOylHLnB1c2goYXJndW1lbnRzW2xdKTtmb3IobiYmbnVsbCE9bi5j
aGlsZHJlbiYmKEcubGVuZ3RofHxHLnB1c2gobi5jaGlsZHJlbiksZGVsZXRlIG4uY2hpbGRyZW4p
O0cubGVuZ3RoOylpZigocj1HLnBvcCgpKSYmdm9pZCAwIT09ci5wb3ApZm9yKGw9ci5sZW5ndGg7
bC0tOylHLnB1c2gocltsXSk7ZWxzZSJib29sZWFuIj09dHlwZW9mIHImJihyPW51bGwpLChpPSJm
dW5jdGlvbiIhPXR5cGVvZiB0KSYmKG51bGw9PXI/cj0iIjoibnVtYmVyIj09dHlwZW9mIHI/cis9
IiI6InN0cmluZyIhPXR5cGVvZiByJiYoaT0hMSkpLGkmJm8/YVthLmxlbmd0aC0xXSs9cjphPT09
Sj9hPVtyXTphLnB1c2gociksbz1pO3ZhciBzPW5ldyBlO3JldHVybiBzLm5vZGVOYW1lPXQscy5j
aGlsZHJlbj1hLHMuYXR0cmlidXRlcz1udWxsPT1uP3ZvaWQgMDpuLHMua2V5PW51bGw9PW4/dm9p
ZCAwOm4ua2V5LHZvaWQgMCE9PUYudm5vZGUmJkYudm5vZGUocyksc31mdW5jdGlvbiBuKGUsdCl7
Zm9yKHZhciBuIGluIHQpZVtuXT10W25dO3JldHVybiBlfWZ1bmN0aW9uIG8oZSl7IWUuX2RpcnR5
JiYoZS5fZGlydHk9ITApJiYxPT1ZLnB1c2goZSkmJihGLmRlYm91bmNlUmVuZGVyaW5nfHxRKShy
KX1mdW5jdGlvbiByKCl7dmFyIGUsdD1ZO2ZvcihZPVtdO2U9dC5wb3AoKTspZS5fZGlydHkmJlMo
ZSl9ZnVuY3Rpb24gaShlLHQsbil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0fHwibnVtYmVyIj09
dHlwZW9mIHQ/dm9pZCAwIT09ZS5zcGxpdFRleHQ6InN0cmluZyI9PXR5cGVvZiB0Lm5vZGVOYW1l
PyFlLl9jb21wb25lbnRDb25zdHJ1Y3RvciYmbChlLHQubm9kZU5hbWUpOm58fGUuX2NvbXBvbmVu
dENvbnN0cnVjdG9yPT09dC5ub2RlTmFtZX1mdW5jdGlvbiBsKGUsdCl7cmV0dXJuIGUubm9ybWFs
aXplZE5vZGVOYW1lPT09dHx8ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09dC50b0xvd2VyQ2Fz
ZSgpfWZ1bmN0aW9uIGEoZSl7dmFyIHQ9bih7fSxlLmF0dHJpYnV0ZXMpO3QuY2hpbGRyZW49ZS5j
aGlsZHJlbjt2YXIgbz1lLm5vZGVOYW1lLmRlZmF1bHRQcm9wcztpZih2b2lkIDAhPT1vKWZvcih2
YXIgciBpbiBvKXZvaWQgMD09PXRbcl0mJih0W3JdPW9bcl0pO3JldHVybiB0fWZ1bmN0aW9uIHMo
ZSx0KXt2YXIgbj10P2RvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcv
MjAwMC9zdmciLGUpOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZSk7cmV0dXJuIG4ubm9ybWFsaXpl
ZE5vZGVOYW1lPWUsbn1mdW5jdGlvbiBjKGUpe3ZhciB0PWUucGFyZW50Tm9kZTt0JiZ0LnJlbW92
ZUNoaWxkKGUpfWZ1bmN0aW9uIHUoZSx0LG4sbyxyKXtpZigiY2xhc3NOYW1lIj09PXQmJih0PSJj
bGFzcyIpLCJrZXkiPT09dCk7ZWxzZSBpZigicmVmIj09PXQpbiYmbihudWxsKSxvJiZvKGUpO2Vs
c2UgaWYoImNsYXNzIiE9PXR8fHIpaWYoInN0eWxlIj09PXQpe2lmKG8mJiJzdHJpbmciIT10eXBl
b2YgbyYmInN0cmluZyIhPXR5cGVvZiBufHwoZS5zdHlsZS5jc3NUZXh0PW98fCIiKSxvJiYib2Jq
ZWN0Ij09PSh2b2lkIDA9PT1vPyJ1bmRlZmluZWQiOiQobykpKXtpZigic3RyaW5nIiE9dHlwZW9m
IG4pZm9yKHZhciBpIGluIG4paSBpbiBvfHwoZS5zdHlsZVtpXT0iIik7Zm9yKHZhciBpIGluIG8p
ZS5zdHlsZVtpXT0ibnVtYmVyIj09dHlwZW9mIG9baV0mJlgudGVzdChpKT09PSExP29baV0rInB4
IjpvW2ldfX1lbHNlIGlmKCJkYW5nZXJvdXNseVNldElubmVySFRNTCI9PT10KW8mJihlLmlubmVy
SFRNTD1vLl9faHRtbHx8IiIpO2Vsc2UgaWYoIm8iPT10WzBdJiYibiI9PXRbMV0pe3ZhciBsPXQh
PT0odD10LnJlcGxhY2UoL0NhcHR1cmUkLywiIikpO3Q9dC50b0xvd2VyQ2FzZSgpLnN1YnN0cmlu
ZygyKSxvP258fGUuYWRkRXZlbnRMaXN0ZW5lcih0LGYsbCk6ZS5yZW1vdmVFdmVudExpc3RlbmVy
KHQsZixsKSwoZS5fbGlzdGVuZXJzfHwoZS5fbGlzdGVuZXJzPXt9KSlbdF09b31lbHNlIGlmKCJs
aXN0IiE9PXQmJiJ0eXBlIiE9PXQmJiFyJiZ0IGluIGUpcChlLHQsbnVsbD09bz8iIjpvKSxudWxs
IT1vJiZvIT09ITF8fGUucmVtb3ZlQXR0cmlidXRlKHQpO2Vsc2V7dmFyIGE9ciYmdCE9PSh0PXQu
cmVwbGFjZSgvXnhsaW5rXDo/LywiIikpO251bGw9PW98fG89PT0hMT9hP2UucmVtb3ZlQXR0cmli
dXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHQudG9Mb3dlckNhc2UoKSk6ZS5y
ZW1vdmVBdHRyaWJ1dGUodCk6ImZ1bmN0aW9uIiE9dHlwZW9mIG8mJihhP2Uuc2V0QXR0cmlidXRl
TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHQudG9Mb3dlckNhc2UoKSxvKTplLnNl
dEF0dHJpYnV0ZSh0LG8pKX1lbHNlIGUuY2xhc3NOYW1lPW98fCIifWZ1bmN0aW9uIHAoZSx0LG4p
e3RyeXtlW3RdPW59Y2F0Y2goZSl7fX1mdW5jdGlvbiBmKGUpe3JldHVybiB0aGlzLl9saXN0ZW5l
cnNbZS50eXBlXShGLmV2ZW50JiZGLmV2ZW50KGUpfHxlKX1mdW5jdGlvbiBkKCl7Zm9yKHZhciBl
O2U9Wi5wb3AoKTspRi5hZnRlck1vdW50JiZGLmFmdGVyTW91bnQoZSksZS5jb21wb25lbnREaWRN
b3VudCYmZS5jb21wb25lbnREaWRNb3VudCgpfWZ1bmN0aW9uIGgoZSx0LG4sbyxyLGkpe2VlKyt8
fCh0ZT1udWxsIT1yJiZ2b2lkIDAhPT1yLm93bmVyU1ZHRWxlbWVudCxuZT1udWxsIT1lJiYhKCJf
X3ByZWFjdGF0dHJfImluIGUpKTt2YXIgbD1tKGUsdCxuLG8saSk7cmV0dXJuIHImJmwucGFyZW50
Tm9kZSE9PXImJnIuYXBwZW5kQ2hpbGQobCksLS1lZXx8KG5lPSExLGl8fGQoKSksbH1mdW5jdGlv
biBtKGUsdCxuLG8scil7dmFyIGk9ZSxhPXRlO2lmKG51bGwhPXQmJiJib29sZWFuIiE9dHlwZW9m
IHR8fCh0PSIiKSwic3RyaW5nIj09dHlwZW9mIHR8fCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4g
ZSYmdm9pZCAwIT09ZS5zcGxpdFRleHQmJmUucGFyZW50Tm9kZSYmKCFlLl9jb21wb25lbnR8fHIp
P2Uubm9kZVZhbHVlIT10JiYoZS5ub2RlVmFsdWU9dCk6KGk9ZG9jdW1lbnQuY3JlYXRlVGV4dE5v
ZGUodCksZSYmKGUucGFyZW50Tm9kZSYmZS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChpLGUpLHYo
ZSwhMCkpKSxpLl9fcHJlYWN0YXR0cl89ITAsaTt2YXIgYz10Lm5vZGVOYW1lO2lmKCJmdW5jdGlv
biI9PXR5cGVvZiBjKXJldHVybiBrKGUsdCxuLG8pO2lmKHRlPSJzdmciPT09Y3x8ImZvcmVpZ25P
YmplY3QiIT09YyYmdGUsYys9IiIsKCFlfHwhbChlLGMpKSYmKGk9cyhjLHRlKSxlKSl7Zm9yKDtl
LmZpcnN0Q2hpbGQ7KWkuYXBwZW5kQ2hpbGQoZS5maXJzdENoaWxkKTtlLnBhcmVudE5vZGUmJmUu
cGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoaSxlKSx2KGUsITApfXZhciB1PWkuZmlyc3RDaGlsZCxw
PWkuX19wcmVhY3RhdHRyXyxmPXQuY2hpbGRyZW47aWYobnVsbD09cCl7cD1pLl9fcHJlYWN0YXR0
cl89e307Zm9yKHZhciBkPWkuYXR0cmlidXRlcyxoPWQubGVuZ3RoO2gtLTspcFtkW2hdLm5hbWVd
PWRbaF0udmFsdWV9cmV0dXJuIW5lJiZmJiYxPT09Zi5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2Yg
ZlswXSYmbnVsbCE9dSYmdm9pZCAwIT09dS5zcGxpdFRleHQmJm51bGw9PXUubmV4dFNpYmxpbmc/
dS5ub2RlVmFsdWUhPWZbMF0mJih1Lm5vZGVWYWx1ZT1mWzBdKTooZiYmZi5sZW5ndGh8fG51bGwh
PXUpJiZ5KGksZixuLG8sbmV8fG51bGwhPXAuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpLF8oaSx0
LmF0dHJpYnV0ZXMscCksdGU9YSxpfWZ1bmN0aW9uIHkoZSx0LG4sbyxyKXt2YXIgbCxhLHMsdSxw
LGY9ZS5jaGlsZE5vZGVzLGQ9W10saD17fSx5PTAsYj0wLF89Zi5sZW5ndGgsZz0wLHc9dD90Lmxl
bmd0aDowO2lmKDAhPT1fKWZvcih2YXIgQz0wO0M8XztDKyspe3ZhciB4PWZbQ10sUz14Ll9fcHJl
YWN0YXR0cl8saz13JiZTP3guX2NvbXBvbmVudD94Ll9jb21wb25lbnQuX19rZXk6Uy5rZXk6bnVs
bDtudWxsIT1rPyh5KyssaFtrXT14KTooU3x8KHZvaWQgMCE9PXguc3BsaXRUZXh0PyFyfHx4Lm5v
ZGVWYWx1ZS50cmltKCk6cikpJiYoZFtnKytdPXgpfWlmKDAhPT13KWZvcih2YXIgQz0wO0M8dztD
Kyspe3U9dFtDXSxwPW51bGw7dmFyIGs9dS5rZXk7aWYobnVsbCE9ayl5JiZ2b2lkIDAhPT1oW2td
JiYocD1oW2tdLGhba109dm9pZCAwLHktLSk7ZWxzZSBpZighcCYmYjxnKWZvcihsPWI7bDxnO2wr
KylpZih2b2lkIDAhPT1kW2xdJiZpKGE9ZFtsXSx1LHIpKXtwPWEsZFtsXT12b2lkIDAsbD09PWct
MSYmZy0tLGw9PT1iJiZiKys7YnJlYWt9cD1tKHAsdSxuLG8pLHM9ZltDXSxwJiZwIT09ZSYmcCE9
PXMmJihudWxsPT1zP2UuYXBwZW5kQ2hpbGQocCk6cD09PXMubmV4dFNpYmxpbmc/YyhzKTplLmlu
c2VydEJlZm9yZShwLHMpKX1pZih5KWZvcih2YXIgQyBpbiBoKXZvaWQgMCE9PWhbQ10mJnYoaFtD
XSwhMSk7Zm9yKDtiPD1nOyl2b2lkIDAhPT0ocD1kW2ctLV0pJiZ2KHAsITEpfWZ1bmN0aW9uIHYo
ZSx0KXt2YXIgbj1lLl9jb21wb25lbnQ7bj9OKG4pOihudWxsIT1lLl9fcHJlYWN0YXR0cl8mJmUu
X19wcmVhY3RhdHRyXy5yZWYmJmUuX19wcmVhY3RhdHRyXy5yZWYobnVsbCksdCE9PSExJiZudWxs
IT1lLl9fcHJlYWN0YXR0cl98fGMoZSksYihlKSl9ZnVuY3Rpb24gYihlKXtmb3IoZT1lLmxhc3RD
aGlsZDtlOyl7dmFyIHQ9ZS5wcmV2aW91c1NpYmxpbmc7dihlLCEwKSxlPXR9fWZ1bmN0aW9uIF8o
ZSx0LG4pe3ZhciBvO2ZvcihvIGluIG4pdCYmbnVsbCE9dFtvXXx8bnVsbD09bltvXXx8dShlLG8s
bltvXSxuW29dPXZvaWQgMCx0ZSk7Zm9yKG8gaW4gdCkiY2hpbGRyZW4iPT09b3x8ImlubmVySFRN
TCI9PT1vfHxvIGluIG4mJnRbb109PT0oInZhbHVlIj09PW98fCJjaGVja2VkIj09PW8/ZVtvXTpu
W29dKXx8dShlLG8sbltvXSxuW29dPXRbb10sdGUpfWZ1bmN0aW9uIGcoZSl7dmFyIHQ9ZS5jb25z
dHJ1Y3Rvci5uYW1lOyhvZVt0XXx8KG9lW3RdPVtdKSkucHVzaChlKX1mdW5jdGlvbiB3KGUsdCxu
KXt2YXIgbyxyPW9lW2UubmFtZV07aWYoZS5wcm90b3R5cGUmJmUucHJvdG90eXBlLnJlbmRlcj8o
bz1uZXcgZSh0LG4pLFQuY2FsbChvLHQsbikpOihvPW5ldyBUKHQsbiksby5jb25zdHJ1Y3Rvcj1l
LG8ucmVuZGVyPUMpLHIpZm9yKHZhciBpPXIubGVuZ3RoO2ktLTspaWYocltpXS5jb25zdHJ1Y3Rv
cj09PWUpe28ubmV4dEJhc2U9cltpXS5uZXh0QmFzZSxyLnNwbGljZShpLDEpO2JyZWFrfXJldHVy
biBvfWZ1bmN0aW9uIEMoZSx0LG4pe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yKGUsbil9ZnVuY3Rp
b24geChlLHQsbixyLGkpe2UuX2Rpc2FibGV8fChlLl9kaXNhYmxlPSEwLChlLl9fcmVmPXQucmVm
KSYmZGVsZXRlIHQucmVmLChlLl9fa2V5PXQua2V5KSYmZGVsZXRlIHQua2V5LCFlLmJhc2V8fGk/
ZS5jb21wb25lbnRXaWxsTW91bnQmJmUuY29tcG9uZW50V2lsbE1vdW50KCk6ZS5jb21wb25lbnRX
aWxsUmVjZWl2ZVByb3BzJiZlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHModCxyKSxyJiZyIT09
ZS5jb250ZXh0JiYoZS5wcmV2Q29udGV4dHx8KGUucHJldkNvbnRleHQ9ZS5jb250ZXh0KSxlLmNv
bnRleHQ9ciksZS5wcmV2UHJvcHN8fChlLnByZXZQcm9wcz1lLnByb3BzKSxlLnByb3BzPXQsZS5f
ZGlzYWJsZT0hMSwwIT09biYmKDEhPT1uJiZGLnN5bmNDb21wb25lbnRVcGRhdGVzPT09ITEmJmUu
YmFzZT9vKGUpOlMoZSwxLGkpKSxlLl9fcmVmJiZlLl9fcmVmKGUpKX1mdW5jdGlvbiBTKGUsdCxv
LHIpe2lmKCFlLl9kaXNhYmxlKXt2YXIgaSxsLHMsYz1lLnByb3BzLHU9ZS5zdGF0ZSxwPWUuY29u
dGV4dCxmPWUucHJldlByb3BzfHxjLG09ZS5wcmV2U3RhdGV8fHUseT1lLnByZXZDb250ZXh0fHxw
LGI9ZS5iYXNlLF89ZS5uZXh0QmFzZSxnPWJ8fF8sQz1lLl9jb21wb25lbnQsaz0hMTtpZihiJiYo
ZS5wcm9wcz1mLGUuc3RhdGU9bSxlLmNvbnRleHQ9eSwyIT09dCYmZS5zaG91bGRDb21wb25lbnRV
cGRhdGUmJmUuc2hvdWxkQ29tcG9uZW50VXBkYXRlKGMsdSxwKT09PSExP2s9ITA6ZS5jb21wb25l
bnRXaWxsVXBkYXRlJiZlLmNvbXBvbmVudFdpbGxVcGRhdGUoYyx1LHApLGUucHJvcHM9YyxlLnN0
YXRlPXUsZS5jb250ZXh0PXApLGUucHJldlByb3BzPWUucHJldlN0YXRlPWUucHJldkNvbnRleHQ9
ZS5uZXh0QmFzZT1udWxsLGUuX2RpcnR5PSExLCFrKXtpPWUucmVuZGVyKGMsdSxwKSxlLmdldENo
aWxkQ29udGV4dCYmKHA9bihuKHt9LHApLGUuZ2V0Q2hpbGRDb250ZXh0KCkpKTt2YXIgVCxFLE89
aSYmaS5ub2RlTmFtZTtpZigiZnVuY3Rpb24iPT10eXBlb2YgTyl7dmFyIEQ9YShpKTtsPUMsbCYm
bC5jb25zdHJ1Y3Rvcj09PU8mJkQua2V5PT1sLl9fa2V5P3gobCxELDEscCwhMSk6KFQ9bCxlLl9j
b21wb25lbnQ9bD13KE8sRCxwKSxsLm5leHRCYXNlPWwubmV4dEJhc2V8fF8sbC5fcGFyZW50Q29t
cG9uZW50PWUseChsLEQsMCxwLCExKSxTKGwsMSxvLCEwKSksRT1sLmJhc2V9ZWxzZSBzPWcsVD1D
LFQmJihzPWUuX2NvbXBvbmVudD1udWxsKSwoZ3x8MT09PXQpJiYocyYmKHMuX2NvbXBvbmVudD1u
dWxsKSxFPWgocyxpLHAsb3x8IWIsZyYmZy5wYXJlbnROb2RlLCEwKSk7aWYoZyYmRSE9PWcmJmwh
PT1DKXt2YXIgaj1nLnBhcmVudE5vZGU7aiYmRSE9PWomJihqLnJlcGxhY2VDaGlsZChFLGcpLFR8
fChnLl9jb21wb25lbnQ9bnVsbCx2KGcsITEpKSl9aWYoVCYmTihUKSxlLmJhc2U9RSxFJiYhcil7
Zm9yKHZhciBQPWUsQT1lO0E9QS5fcGFyZW50Q29tcG9uZW50OykoUD1BKS5iYXNlPUU7RS5fY29t
cG9uZW50PVAsRS5fY29tcG9uZW50Q29uc3RydWN0b3I9UC5jb25zdHJ1Y3Rvcn19aWYoIWJ8fG8/
Wi51bnNoaWZ0KGUpOmt8fChlLmNvbXBvbmVudERpZFVwZGF0ZSYmZS5jb21wb25lbnREaWRVcGRh
dGUoZixtLHkpLEYuYWZ0ZXJVcGRhdGUmJkYuYWZ0ZXJVcGRhdGUoZSkpLG51bGwhPWUuX3JlbmRl
ckNhbGxiYWNrcylmb3IoO2UuX3JlbmRlckNhbGxiYWNrcy5sZW5ndGg7KWUuX3JlbmRlckNhbGxi
YWNrcy5wb3AoKS5jYWxsKGUpO2VlfHxyfHxkKCl9fWZ1bmN0aW9uIGsoZSx0LG4sbyl7Zm9yKHZh
ciByPWUmJmUuX2NvbXBvbmVudCxpPXIsbD1lLHM9ciYmZS5fY29tcG9uZW50Q29uc3RydWN0b3I9
PT10Lm5vZGVOYW1lLGM9cyx1PWEodCk7ciYmIWMmJihyPXIuX3BhcmVudENvbXBvbmVudCk7KWM9
ci5jb25zdHJ1Y3Rvcj09PXQubm9kZU5hbWU7cmV0dXJuIHImJmMmJighb3x8ci5fY29tcG9uZW50
KT8oeChyLHUsMyxuLG8pLGU9ci5iYXNlKTooaSYmIXMmJihOKGkpLGU9bD1udWxsKSxyPXcodC5u
b2RlTmFtZSx1LG4pLGUmJiFyLm5leHRCYXNlJiYoci5uZXh0QmFzZT1lLGw9bnVsbCkseChyLHUs
MSxuLG8pLGU9ci5iYXNlLGwmJmUhPT1sJiYobC5fY29tcG9uZW50PW51bGwsdihsLCExKSkpLGV9
ZnVuY3Rpb24gTihlKXtGLmJlZm9yZVVubW91bnQmJkYuYmVmb3JlVW5tb3VudChlKTt2YXIgdD1l
LmJhc2U7ZS5fZGlzYWJsZT0hMCxlLmNvbXBvbmVudFdpbGxVbm1vdW50JiZlLmNvbXBvbmVudFdp
bGxVbm1vdW50KCksZS5iYXNlPW51bGw7dmFyIG49ZS5fY29tcG9uZW50O24/TihuKTp0JiYodC5f
X3ByZWFjdGF0dHJfJiZ0Ll9fcHJlYWN0YXR0cl8ucmVmJiZ0Ll9fcHJlYWN0YXR0cl8ucmVmKG51
bGwpLGUubmV4dEJhc2U9dCxjKHQpLGcoZSksYih0KSksZS5fX3JlZiYmZS5fX3JlZihudWxsKX1m
dW5jdGlvbiBUKGUsdCl7dGhpcy5fZGlydHk9ITAsdGhpcy5jb250ZXh0PXQsdGhpcy5wcm9wcz1l
LHRoaXMuc3RhdGU9dGhpcy5zdGF0ZXx8e319ZnVuY3Rpb24gRShlLHQsbil7cmV0dXJuIGgobixl
LHt9LCExLHQsITEpfWZ1bmN0aW9uIE8oZSx0LG4sbyl7Zm9yKG89MCx0PXQuc3BsaXQ/dC5zcGxp
dCgiLiIpOnQ7ZSYmbzx0Lmxlbmd0aDspZT1lW3RbbysrXV07cmV0dXJuIHZvaWQgMD09PWU/bjpl
fWZ1bmN0aW9uIEQoZSx0LG4pe3ZhciBvPXQuc3BsaXQoIi4iKTtyZXR1cm4gZnVuY3Rpb24odCl7
Zm9yKHZhciByPXQmJnQudGFyZ2V0fHx0aGlzLGk9e30sbD1pLGE9InN0cmluZyI9PXR5cGVvZiBu
P08odCxuKTpyLm5vZGVOYW1lP3IudHlwZS5tYXRjaCgvXmNoZXxyYWQvKT9yLmNoZWNrZWQ6ci52
YWx1ZTp0LHM9MDtzPG8ubGVuZ3RoLTE7cysrKWw9bFtvW3NdXXx8KGxbb1tzXV09IXMmJmUuc3Rh
dGVbb1tzXV18fHt9KTtsW29bc11dPWEsZS5zZXRTdGF0ZShpKX19ZnVuY3Rpb24gaigpe2Zvcih2
YXIgZT0iIix0PTA7dDwzMjt0Kyspe3ZhciBuPTE2Kk1hdGgucmFuZG9tKCl8MDs4IT09dCYmMTIh
PT10JiYxNiE9PXQmJjIwIT09dHx8KGUrPSItIiksZSs9KDEyPT09dD80OjE2PT09dD8zJm58ODpu
KS50b1N0cmluZygxNil9cmV0dXJuIGV9ZnVuY3Rpb24gUChlLHQpe3JldHVybiAxPT09ZT90OnQr
InMifWZ1bmN0aW9uIEEoKXtyZXR1cm5bXX1mdW5jdGlvbiBVKGUsdCl7aWYoIShlIGluc3RhbmNl
b2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0
aW9uIil9ZnVuY3Rpb24gTChlLHQpe3JldHVybiB0PXtleHBvcnRzOnt9fSxlKHQsdC5leHBvcnRz
KSx0LmV4cG9ydHN9ZnVuY3Rpb24gQihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5l
dyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9u
IE0oZSx0KXtpZighZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4g
aW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiF0fHwib2Jq
ZWN0IiE9dHlwZW9mIHQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0P2U6dH1mdW5jdGlvbiBSKGUsdCl7
aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1
cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0
eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3Ry
dWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9
fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KTpl
Ll9fcHJvdG9fXz10KX1mdW5jdGlvbiBXKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cg
bmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rp
b24gSyhlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVl
biBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIXR8fCJv
YmplY3QiIT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZTp0fWZ1bmN0aW9uIFYoZSx0
KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigi
U3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAi
K3R5cGVvZiB0KTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25z
dHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZToh
MH19KSx0JiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHQp
OmUuX19wcm90b19fPXQpfWZ1bmN0aW9uIEgoZSl7aWYobnVsbD09ZSl0aHJvdyBuZXcgVHlwZUVy
cm9yKCJDYW5ub3QgZGVzdHJ1Y3R1cmUgdW5kZWZpbmVkIil9ZnVuY3Rpb24gSShlLHQpe2lmKCEo
ZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3Mg
YXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHooZSx0KXtpZighZSl0aHJvdyBuZXcgUmVmZXJlbmNl
RXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVu
IGNhbGxlZCIpO3JldHVybiF0fHwib2JqZWN0IiE9dHlwZW9mIHQmJiJmdW5jdGlvbiIhPXR5cGVv
ZiB0P2U6dH1mdW5jdGlvbiBxKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10
KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVs
bCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0
ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0
YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmpl
Y3Quc2V0UHJvdG90eXBlT2YoZSx0KTplLl9fcHJvdG9fXz10KX12YXIgJD0iZnVuY3Rpb24iPT10
eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihl
KXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBl
b2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8i
c3ltYm9sIjp0eXBlb2YgZX0sRj17fSxHPVtdLEo9W10sUT0iZnVuY3Rpb24iPT10eXBlb2YgUHJv
bWlzZT9Qcm9taXNlLnJlc29sdmUoKS50aGVuLmJpbmQoUHJvbWlzZS5yZXNvbHZlKCkpOnNldFRp
bWVvdXQsWD0vYWNpdHxleCg/OnN8Z3xufHB8JCl8cnBofG93c3xtbmN8bnR3fGluZVtjaF18em9v
fF5vcmQvaSxZPVtdLFo9W10sZWU9MCx0ZT0hMSxuZT0hMSxvZT17fTtuKFQucHJvdG90eXBlLHtz
ZXRTdGF0ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuc3RhdGU7dGhpcy5wcmV2U3RhdGV8fCh0
aGlzLnByZXZTdGF0ZT1uKHt9LHIpKSxuKHIsImZ1bmN0aW9uIj09dHlwZW9mIGU/ZShyLHRoaXMu
cHJvcHMpOmUpLHQmJih0aGlzLl9yZW5kZXJDYWxsYmFja3M9dGhpcy5fcmVuZGVyQ2FsbGJhY2tz
fHxbXSkucHVzaCh0KSxvKHRoaXMpfSxmb3JjZVVwZGF0ZTpmdW5jdGlvbihlKXtlJiYodGhpcy5f
cmVuZGVyQ2FsbGJhY2tzPXRoaXMuX3JlbmRlckNhbGxiYWNrc3x8W10pLnB1c2goZSksUyh0aGlz
LDIpfSxyZW5kZXI6ZnVuY3Rpb24oKXt9fSk7dmFyIHJlPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9u
KGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0
XTtmb3IodmFyIG8gaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixv
KSYmKGVbb109bltvXSl9cmV0dXJuIGV9LGllPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4pe1Uo
dGhpcyxlKSx0aGlzLmtleT10LHRoaXMudG9kb3M9QSh0KXx8W10sdGhpcy5vbkNoYW5nZXM9W25d
fXJldHVybiBlLnByb3RvdHlwZS5pbmZvcm09ZnVuY3Rpb24oKXtBKHRoaXMua2V5LHRoaXMudG9k
b3MpLHRoaXMub25DaGFuZ2VzLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIGUoKX0pfSxlLnBy
b3RvdHlwZS5hZGRUb2RvPWZ1bmN0aW9uKGUpe3RoaXMudG9kb3M9dGhpcy50b2Rvcy5jb25jYXQo
e2lkOmooKSx0aXRsZTplLGNvbXBsZXRlZDohMX0pLHRoaXMuaW5mb3JtKCl9LGUucHJvdG90eXBl
LnRvZ2dsZUFsbD1mdW5jdGlvbihlKXt0aGlzLnRvZG9zPXRoaXMudG9kb3MubWFwKGZ1bmN0aW9u
KHQpe3JldHVybiByZSh7fSx0LHtjb21wbGV0ZWQ6ZX0pfSksdGhpcy5pbmZvcm0oKX0sZS5wcm90
b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKGUpe3RoaXMudG9kb3M9dGhpcy50b2Rvcy5tYXAoZnVuY3Rp
b24odCl7cmV0dXJuIHQhPT1lP3Q6cmUoe30sdCx7Y29tcGxldGVkOiF0LmNvbXBsZXRlZH0pfSks
dGhpcy5pbmZvcm0oKX0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbihlKXt0aGlzLnRvZG9z
PXRoaXMudG9kb3MuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0IT09ZX0pLHRoaXMuaW5mb3Jt
KCl9LGUucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oZSx0KXt0aGlzLnRvZG9zPXRoaXMudG9kb3Mu
bWFwKGZ1bmN0aW9uKG4pe3JldHVybiBuIT09ZT9uOnJlKHt9LG4se3RpdGxlOnR9KX0pLHRoaXMu
aW5mb3JtKCl9LGUucHJvdG90eXBlLmNsZWFyQ29tcGxldGVkPWZ1bmN0aW9uKCl7dGhpcy50b2Rv
cz10aGlzLnRvZG9zLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5jb21wbGV0ZWR9KSx0aGlz
LmluZm9ybSgpfSxlfSgpLGxlPUwoZnVuY3Rpb24oZSl7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9m
IFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0
dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5
bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJv
bCI6dHlwZW9mIGV9OyFmdW5jdGlvbigpe2Z1bmN0aW9uIG4oKXtmb3IodmFyIGU9W10scj0wO3I8
YXJndW1lbnRzLmxlbmd0aDtyKyspe3ZhciBpPWFyZ3VtZW50c1tyXTtpZihpKXt2YXIgbD12b2lk
IDA9PT1pPyJ1bmRlZmluZWQiOnQoaSk7aWYoInN0cmluZyI9PT1sfHwibnVtYmVyIj09PWwpZS5w
dXNoKGkpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShpKSllLnB1c2gobi5hcHBseShudWxsLGkpKTtl
bHNlIGlmKCJvYmplY3QiPT09bClmb3IodmFyIGEgaW4gaSlvLmNhbGwoaSxhKSYmaVthXSYmZS5w
dXNoKGEpfX1yZXR1cm4gZS5qb2luKCIgIil9dmFyIG89e30uaGFzT3duUHJvcGVydHk7dm9pZCAw
IT09ZSYmZS5leHBvcnRzP2UuZXhwb3J0cz1uOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJiJv
YmplY3QiPT09dChkZWZpbmUuYW1kKSYmZGVmaW5lLmFtZD9kZWZpbmUoImNsYXNzbmFtZXMiLFtd
LGZ1bmN0aW9uKCl7cmV0dXJuIG59KTp3aW5kb3cuY2xhc3NOYW1lcz1ufSgpfSksYWU9ZnVuY3Rp
b24oZSl7ZnVuY3Rpb24gbigpe3JldHVybiBCKHRoaXMsbiksTSh0aGlzLGUuYXBwbHkodGhpcyxh
cmd1bWVudHMpKX1yZXR1cm4gUihuLGUpLG4ucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihlKXt2
YXIgbj1lLm5vd1Nob3dpbmcsbz1lLmNvdW50LHI9ZS5jb21wbGV0ZWRDb3VudCxpPWUub25DbGVh
ckNvbXBsZXRlZDtyZXR1cm4gdCgiZm9vdGVyIix7Y2xhc3M6ImZvb3RlciJ9LHQoInNwYW4iLHtj
bGFzczoidG9kby1jb3VudCJ9LHQoInN0cm9uZyIsbnVsbCxvKSwiICIsUChvLCJpdGVtIiksIiBs
ZWZ0IiksdCgidWwiLHtjbGFzczoiZmlsdGVycyJ9LHQoImxpIixudWxsLHQoImEiLHtocmVmOiIj
LyIsY2xhc3M6bGUoe3NlbGVjdGVkOiJhbGwiPT1ufSl9LCJBbGwiKSksIiAiLHQoImxpIixudWxs
LHQoImEiLHtocmVmOiIjL2FjdGl2ZSIsY2xhc3M6bGUoe3NlbGVjdGVkOiJhY3RpdmUiPT1ufSl9
LCJBY3RpdmUiKSksIiAiLHQoImxpIixudWxsLHQoImEiLHtocmVmOiIjL2NvbXBsZXRlZCIsY2xh
c3M6bGUoe3NlbGVjdGVkOiJjb21wbGV0ZWQiPT1ufSl9LCJDb21wbGV0ZWQiKSkpLHI+MCYmdCgi
YnV0dG9uIix7Y2xhc3M6ImNsZWFyLWNvbXBsZXRlZCIsb25DbGljazppfSwiQ2xlYXIgY29tcGxl
dGVkIikpfSxufShUKSxzZT0yNyxjZT0xMyx1ZT1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7dmFy
IHQsbyxyO1codGhpcyxuKTtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aCxsPUFycmF5KGkpLGE9
MDthPGk7YSsrKWxbYV09YXJndW1lbnRzW2FdO3JldHVybiB0PW89Syh0aGlzLGUuY2FsbC5hcHBs
eShlLFt0aGlzXS5jb25jYXQobCkpKSxvLmhhbmRsZVN1Ym1pdD1mdW5jdGlvbigpe3ZhciBlPW8u
cHJvcHMsdD1lLm9uU2F2ZSxuPWUub25EZXN0cm95LHI9ZS50b2RvLGk9by5zdGF0ZS5lZGl0VGV4
dC50cmltKCk7aT8odChyLGkpLG8uc2V0U3RhdGUoe2VkaXRUZXh0Oml9KSk6bihyKX0sby5oYW5k
bGVFZGl0PWZ1bmN0aW9uKCl7dmFyIGU9by5wcm9wcyx0PWUub25FZGl0LG49ZS50b2RvO3Qobiks
by5zZXRTdGF0ZSh7ZWRpdFRleHQ6bi50aXRsZX0pfSxvLnRvZ2dsZT1mdW5jdGlvbihlKXt2YXIg
dD1vLnByb3BzOygwLHQub25Ub2dnbGUpKHQudG9kbyksZS5wcmV2ZW50RGVmYXVsdCgpfSxvLmhh
bmRsZUtleURvd249ZnVuY3Rpb24oZSl7aWYoZS53aGljaD09PXNlKXt2YXIgdD1vLnByb3BzLnRv
ZG87by5zZXRTdGF0ZSh7ZWRpdFRleHQ6dC50aXRsZX0pLG8ucHJvcHMub25DYW5jZWwodCl9ZWxz
ZSBlLndoaWNoPT09Y2UmJm8uaGFuZGxlU3VibWl0KCl9LG8uaGFuZGxlRGVzdHJveT1mdW5jdGlv
bigpe28ucHJvcHMub25EZXN0cm95KG8ucHJvcHMudG9kbyl9LHI9dCxLKG8scil9cmV0dXJuIFYo
bixlKSxuLnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlz
LmJhc2UmJnRoaXMuYmFzZS5xdWVyeVNlbGVjdG9yKCIuZWRpdCIpO2UmJmUuZm9jdXMoKX0sbi5w
cm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKGUsbil7dmFyIG89ZS50b2RvLHI9by50aXRsZSxpPW8u
Y29tcGxldGVkLGw9ZS5lZGl0aW5nLGE9bi5lZGl0VGV4dDtyZXR1cm4gdCgibGkiLHtjbGFzczps
ZSh7Y29tcGxldGVkOmksZWRpdGluZzpsfSl9LHQoImRpdiIse2NsYXNzOiJ2aWV3In0sdCgiaW5w
dXQiLHtjbGFzczoidG9nZ2xlIix0eXBlOiJjaGVja2JveCIsY2hlY2tlZDppLG9uQ2hhbmdlOnRo
aXMudG9nZ2xlfSksdCgibGFiZWwiLHtvbkRibENsaWNrOnRoaXMuaGFuZGxlRWRpdH0sciksdCgi
YnV0dG9uIix7Y2xhc3M6ImRlc3Ryb3kiLG9uQ2xpY2s6dGhpcy5oYW5kbGVEZXN0cm95fSkpLGwm
JnQoImlucHV0Iix7Y2xhc3M6ImVkaXQiLHZhbHVlOmEsb25CbHVyOnRoaXMuaGFuZGxlU3VibWl0
LG9uSW5wdXQ6dGhpcy5saW5rU3RhdGUoImVkaXRUZXh0Iiksb25LZXlEb3duOnRoaXMuaGFuZGxl
S2V5RG93bn0pKX0sbn0oVCkscGU9e2FsbDpmdW5jdGlvbigpe3JldHVybiEwfSxhY3RpdmU6ZnVu
Y3Rpb24oZSl7cmV0dXJuIWUuY29tcGxldGVkfSxjb21wbGV0ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJu
IGUuY29tcGxldGVkfX07RSh0KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXtJKHRoaXMsbik7dmFy
IHQ9eih0aGlzLGUuY2FsbCh0aGlzKSk7cmV0dXJuIHQuaGFuZGxlTmV3VG9kb0tleURvd249ZnVu
Y3Rpb24oZSl7aWYoMTM9PT1lLmtleUNvZGUpe2UucHJldmVudERlZmF1bHQoKTt2YXIgbj1lLnRh
cmdldC52YWx1ZS50cmltKCk7biYmKHQubW9kZWwuYWRkVG9kbyhuKSx0LnNldFN0YXRlKHtuZXdU
b2RvOiIifSkpfX0sdC50b2dnbGVBbGw9ZnVuY3Rpb24oZSl7dC5tb2RlbC50b2dnbGVBbGwoZS50
YXJnZXQuY2hlY2tlZCl9LHQudG9nZ2xlPWZ1bmN0aW9uKGUpe3QubW9kZWwudG9nZ2xlKGUpfSx0
LmRlc3Ryb3k9ZnVuY3Rpb24oZSl7dC5tb2RlbC5kZXN0cm95KGUpfSx0LmVkaXQ9ZnVuY3Rpb24o
ZSl7dC5zZXRTdGF0ZSh7ZWRpdGluZzplLmlkfSl9LHQuc2F2ZT1mdW5jdGlvbihlLG4pe3QubW9k
ZWwuc2F2ZShlLG4pLHQuc2V0U3RhdGUoe2VkaXRpbmc6bnVsbH0pfSx0LmNhbmNlbD1mdW5jdGlv
bigpe3Quc2V0U3RhdGUoe2VkaXRpbmc6bnVsbH0pfSx0LmNsZWFyQ29tcGxldGVkPWZ1bmN0aW9u
KCl7dC5tb2RlbC5jbGVhckNvbXBsZXRlZCgpfSx0Lm1vZGVsPW5ldyBpZSgicHJlYWN0LXRvZG9z
IixmdW5jdGlvbigpe3JldHVybiB0LnNldFN0YXRlKHt9KX0pLGFkZEV2ZW50TGlzdGVuZXIoImhh
c2hjaGFuZ2UiLHQuaGFuZGxlUm91dGUuYmluZCh0KSksdC5oYW5kbGVSb3V0ZSgpLHR9cmV0dXJu
IHEobixlKSxuLnByb3RvdHlwZS5oYW5kbGVSb3V0ZT1mdW5jdGlvbigpe3ZhciBlPSgobG9jYXRp
b24uaGFzaHx8IiIpKyIiKS5zcGxpdCgiLyIpLnBvcCgpO3BlW2VdfHwoZT0iYWxsIiksdGhpcy5z
ZXRTdGF0ZSh7bm93U2hvd2luZzplfSl9LG4ucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihlLG4p
e3ZhciBvPXRoaXMscj1uLm5vd1Nob3dpbmcsaT12b2lkIDA9PT1yP0FMTF9UT0RPUzpyLGw9bi5u
ZXdUb2RvLGE9bi5lZGl0aW5nO0goZSk7dmFyIHM9dGhpcy5tb2RlbC50b2RvcyxjPXMuZmlsdGVy
KHBlW2ldKSx1PXMucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrKHQuY29tcGxldGVkPzA6
MSl9LDApLHA9cy5sZW5ndGgtdTtyZXR1cm4gdCgiZGl2IixudWxsLHQoImhlYWRlciIse2NsYXNz
OiJoZWFkZXIifSx0KCJoMSIsbnVsbCwidG9kb3MiKSx0KCJpbnB1dCIse2NsYXNzOiJuZXctdG9k
byIscGxhY2Vob2xkZXI6IldoYXQgbmVlZHMgdG8gYmUgZG9uZT8iLHZhbHVlOmwsb25LZXlEb3du
OnRoaXMuaGFuZGxlTmV3VG9kb0tleURvd24sb25JbnB1dDpEKHRoaXMsIm5ld1RvZG8iKSxhdXRv
Rm9jdXM6ITB9KSkscy5sZW5ndGg/dCgic2VjdGlvbiIse2NsYXNzOiJtYWluIn0sdCgiaW5wdXQi
LHtjbGFzczoidG9nZ2xlLWFsbCIsdHlwZToiY2hlY2tib3giLG9uQ2hhbmdlOnRoaXMudG9nZ2xl
QWxsLGNoZWNrZWQ6MD09PXV9KSx0KCJ1bCIse2NsYXNzOiJ0b2RvLWxpc3QifSxjLm1hcChmdW5j
dGlvbihlKXtyZXR1cm4gdCh1ZSx7dG9kbzplLG9uVG9nZ2xlOm8udG9nZ2xlLG9uRGVzdHJveTpv
LmRlc3Ryb3ksb25FZGl0Om8uZWRpdCxlZGl0aW5nOmE9PT1lLmlkLG9uU2F2ZTpvLnNhdmUsb25D
YW5jZWw6by5jYW5jZWx9KX0pKSk6bnVsbCx1fHxwP3QoYWUse2NvdW50OnUsY29tcGxldGVkQ291
bnQ6cCxub3dTaG93aW5nOmksb25DbGVhckNvbXBsZXRlZDp0aGlzLmNsZWFyQ29tcGxldGVkfSk6
bnVsbCl9LG59KFQpLG51bGwpLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi50b2RvYXBwIikpfSgp
OworLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXBwLmpzLm1hcApcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIy
LjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3ByZWFjdC9kaXN0L2Fw
cC5qcy5tYXAgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9wcmVhY3QvZGlzdC9hcHAuanMubWFw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjQzZDQ4OWU3NTkyMDJhMDVlYjNmYTQ5NjZiMGY2MDk0YjMzNmJjNDIKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4x
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9wcmVhY3QvZGlzdC9hcHAu
anMubWFwCkBAIC0wLDAgKzEgQEAKK3sidmVyc2lvbiI6Mywic291cmNlcyI6WyIuLi9ub2RlX21v
ZHVsZXMvcHJlYWN0L2Rpc3QvcHJlYWN0LmVzbS5qcyIsIi4uL25vZGVfbW9kdWxlcy9saW5rc3Rh
dGUvZGlzdC9saW5rc3RhdGUuZXMuanMiLCIuLi9zcmMvYXBwL3V0aWwuanMiLCIuLi9zcmMvYXBw
L21vZGVsLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMiLCIuLi9zcmMv
YXBwL2Zvb3Rlci5qcyIsIi4uL3NyYy9hcHAvaXRlbS5qcyIsIi4uL3NyYy9hcHAvaW5kZXguanMi
LCIuLi9zcmMvaW5kZXguanMiXSwibmFtZXMiOlsiVk5vZGUiLCJoIiwibm9kZU5hbWUiLCJhdHRy
aWJ1dGVzIiwibGFzdFNpbXBsZSIsImNoaWxkIiwic2ltcGxlIiwiaSIsImNoaWxkcmVuIiwiRU1Q
VFlfQ0hJTERSRU4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJHIiwicHVzaCIsInN0YWNrIiwicG9w
IiwidW5kZWZpbmVkIiwiU3RyaW5nIiwicCIsImtleSIsIm9wdGlvbnMiLCJ2bm9kZSIsImV4dGVu
ZCIsIm9iaiIsInByb3BzIiwiZW5xdWV1ZVJlbmRlciIsImNvbXBvbmVudCIsIl9kaXJ0eSIsIml0
ZW1zIiwiZGVib3VuY2VSZW5kZXJpbmciLCJkZWZlciIsInJlcmVuZGVyIiwibGlzdCIsInJlbmRl
ckNvbXBvbmVudCIsImlzU2FtZU5vZGVUeXBlIiwibm9kZSIsImh5ZHJhdGluZyIsInNwbGl0VGV4
dCIsIl9jb21wb25lbnRDb25zdHJ1Y3RvciIsImlzTmFtZWROb2RlIiwibm9ybWFsaXplZE5vZGVO
YW1lIiwidG9Mb3dlckNhc2UiLCJnZXROb2RlUHJvcHMiLCJkZWZhdWx0UHJvcHMiLCJjcmVhdGVO
b2RlIiwiaXNTdmciLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnROUyIsImNyZWF0ZUVsZW1lbnQi
LCJyZW1vdmVOb2RlIiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwic2V0QWNjZXNzb3IiLCJu
YW1lIiwib2xkIiwidmFsdWUiLCJzdHlsZSIsImNzc1RleHQiLCJfdHlwZW9mIiwiSVNfTk9OX0RJ
TUVOU0lPTkFMIiwidGVzdCIsImlubmVySFRNTCIsIl9faHRtbCIsInVzZUNhcHR1cmUiLCJyZXBs
YWNlIiwidCIsInN1YnN0cmluZyIsImFkZEV2ZW50TGlzdGVuZXIiLCJldmVudFByb3h5IiwicmVt
b3ZlRXZlbnRMaXN0ZW5lciIsIl9saXN0ZW5lcnMiLCJyZW1vdmVBdHRyaWJ1dGUiLCJucyIsInJl
bW92ZUF0dHJpYnV0ZU5TIiwic2V0QXR0cmlidXRlTlMiLCJzZXRBdHRyaWJ1dGUiLCJjbGFzc05h
bWUiLCJzZXRQcm9wZXJ0eSIsImUiLCJ0aGlzIiwidHlwZSIsImV2ZW50IiwiZmx1c2hNb3VudHMi
LCJjIiwibW91bnRzIiwiYWZ0ZXJNb3VudCIsImNvbXBvbmVudERpZE1vdW50IiwiZGlmZiIsImRv
bSIsImNvbnRleHQiLCJtb3VudEFsbCIsInBhcmVudCIsImNvbXBvbmVudFJvb3QiLCJkaWZmTGV2
ZWwiLCJvd25lclNWR0VsZW1lbnQiLCJyZXQiLCJpZGlmZiIsImFwcGVuZENoaWxkIiwib3V0Iiwi
cHJldlN2Z01vZGUiLCJpc1N2Z01vZGUiLCJfY29tcG9uZW50Iiwibm9kZVZhbHVlIiwiY3JlYXRl
VGV4dE5vZGUiLCJyZXBsYWNlQ2hpbGQiLCJfX3ByZWFjdGF0dHJfIiwidm5vZGVOYW1lIiwiYnVp
bGRDb21wb25lbnRGcm9tVk5vZGUiLCJmaXJzdENoaWxkIiwiZmMiLCJ2Y2hpbGRyZW4iLCJhIiwi
bmV4dFNpYmxpbmciLCJ1IiwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiLCJpbm5lckRpZmZOb2Rl
IiwiaXNIeWRyYXRpbmciLCJqIiwiZiIsInZjaGlsZCIsIm9yaWdpbmFsQ2hpbGRyZW4iLCJjaGls
ZE5vZGVzIiwia2V5ZWQiLCJrZXllZExlbiIsIm1pbiIsImxlbiIsImNoaWxkcmVuTGVuIiwidmxl
biIsIl9jaGlsZCIsIl9fa2V5IiwidHJpbSIsImluc2VydEJlZm9yZSIsInJlY29sbGVjdE5vZGVU
cmVlIiwidW5tb3VudE9ubHkiLCJyZWYiLCJyZW1vdmVDaGlsZHJlbiIsImxhc3RDaGlsZCIsIm5l
eHQiLCJwcmV2aW91c1NpYmxpbmciLCJkaWZmQXR0cmlidXRlcyIsImF0dHJzIiwiY29sbGVjdENv
bXBvbmVudCIsImNvbnN0cnVjdG9yIiwiY29tcG9uZW50cyIsImNyZWF0ZUNvbXBvbmVudCIsIkN0
b3IiLCJpbnN0IiwicHJvdG90eXBlIiwicmVuZGVyIiwiY2FsbCIsIkNvbXBvbmVudCIsImRvUmVu
ZGVyIiwibyIsIm5leHRCYXNlIiwic3BsaWNlIiwic3RhdGUiLCJzZXRDb21wb25lbnRQcm9wcyIs
Im9wdHMiLCJfZGlzYWJsZSIsIl9fcmVmIiwiYmFzZSIsImNvbXBvbmVudFdpbGxNb3VudCIsImNv
bXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLCJwcmV2Q29udGV4dCIsInByZXZQcm9wcyIsInN5bmND
b21wb25lbnRVcGRhdGVzIiwiaXNDaGlsZCIsInJlbmRlcmVkIiwiY2Jhc2UiLCJwcmV2aW91c1By
b3BzIiwicHJldmlvdXNTdGF0ZSIsInByZXZTdGF0ZSIsInByZXZpb3VzQ29udGV4dCIsImlzVXBk
YXRlIiwiaW5pdGlhbEJhc2UiLCJpbml0aWFsQ2hpbGRDb21wb25lbnQiLCJza2lwIiwic2hvdWxk
Q29tcG9uZW50VXBkYXRlIiwiayIsImNvbXBvbmVudFdpbGxVcGRhdGUiLCJnZXRDaGlsZENvbnRl
eHQiLCJ0b1VubW91bnQiLCJjaGlsZENvbXBvbmVudCIsImNoaWxkUHJvcHMiLCJUIiwiX3BhcmVu
dENvbXBvbmVudCIsIlMiLCJFIiwiYmFzZVBhcmVudCIsInYiLCJjb21wb25lbnRSZWYiLCJ1bnNo
aWZ0IiwiY29tcG9uZW50RGlkVXBkYXRlIiwiYWZ0ZXJVcGRhdGUiLCJfcmVuZGVyQ2FsbGJhY2tz
Iiwib3JpZ2luYWxDb21wb25lbnQiLCJvbGREb20iLCJpc0RpcmVjdE93bmVyIiwiaXNPd25lciIs
InIiLCJ4IiwidW5tb3VudENvbXBvbmVudCIsImJlZm9yZVVubW91bnQiLCJjb21wb25lbnRXaWxs
VW5tb3VudCIsImlubmVyIiwibWVyZ2UiLCJkbHYiLCJkZWYiLCJzcGxpdCIsImxpbmtTdGF0ZSIs
ImV2ZW50UGF0aCIsInBhdGgiLCJ0YXJnZXQiLCJtYXRjaCIsImNoZWNrZWQiLCJzZXRTdGF0ZSIs
InV1aWQiLCJyYW5kb20iLCJNYXRoIiwidG9TdHJpbmciLCJwbHVyYWxpemUiLCJjb3VudCIsIndv
cmQiLCJzdG9yZSIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsImJpbmQiLCJzZXRUaW1lb3V0
IiwiY2FsbGJhY2siLCJzIiwicmUiLCJPYmplY3QiLCJhc3NpZ24iLCJuIiwiaGFzT3duUHJvcGVy
dHkiLCJUb2RvTW9kZWwiLCJzdWIiLCJ0b2RvcyIsIm9uQ2hhbmdlcyIsImluZm9ybSIsImZvckVh
Y2giLCJjYiIsImFkZFRvZG8iLCJ0aXRsZSIsImNvbmNhdCIsInRvZ2dsZUFsbCIsImNvbXBsZXRl
ZCIsIm1hcCIsInRvZG8iLCJ0b2dnbGUiLCJ0b2RvVG9Ub2dnbGUiLCJfZXh0ZW5kcyIsImRlc3Ry
b3kiLCJmaWx0ZXIiLCJzYXZlIiwidG9kb1RvU2F2ZSIsImNsZWFyQ29tcGxldGVkIiwiY2xhc3NO
YW1lcyIsImNsYXNzZXMiLCJhcmciLCJhcmdUeXBlIiwiQXJyYXkiLCJpc0FycmF5IiwiYXBwbHki
LCJoYXNPd24iLCJqb2luIiwibW9kdWxlIiwiZXhwb3J0cyIsImRlZmluZSIsImFtZCIsIlRvZG9G
b290ZXIiLCJub3dTaG93aW5nIiwiX3JlZiIsImNvbXBsZXRlZENvdW50Iiwib25DbGVhckNvbXBs
ZXRlZCIsImNsYXNzIiwiUCIsImhyZWYiLCJjeCIsInNlbGVjdGVkIiwib25DbGljayIsIkVTQ0FQ
RV9LRVkiLCJFTlRFUl9LRVkiLCJUb2RvSXRlbSIsImhhbmRsZVN1Ym1pdCIsIl90aGlzIiwib25T
YXZlIiwiX3RoaXMkcHJvcHMiLCJvbkRlc3Ryb3kiLCJ2YWwiLCJlZGl0VGV4dCIsImhhbmRsZUVk
aXQiLCJvbkVkaXQiLCJfdGhpcyRwcm9wczIiLCJfdGhpcyRwcm9wczMiLCJvblRvZ2dsZSIsInBy
ZXZlbnREZWZhdWx0IiwiaGFuZGxlS2V5RG93biIsIndoaWNoIiwib25DYW5jZWwiLCJoYW5kbGVE
ZXN0cm95IiwicXVlcnlTZWxlY3RvciIsImZvY3VzIiwiX3JlZiR0b2RvIiwiZWRpdGluZyIsIl9y
ZWYyIiwib25EYmxDbGljayIsIm9uS2V5RG93biIsIkZJTFRFUlMiLCJhY3RpdmUiLCJBcHAiLCJf
Q29tcG9uZW50IiwiaGFuZGxlTmV3VG9kb0tleURvd24iLCJrZXlDb2RlIiwibW9kZWwiLCJuZXdU
b2RvIiwiZWRpdCIsImlkIiwidGV4dCIsImNhbmNlbCIsImhhbmRsZVJvdXRlIiwibG9jYXRpb24i
LCJoYXNoIiwiX3JlZjIkbm93U2hvd2luZyIsIkFMTF9UT0RPUyIsInNob3duVG9kb3MiLCJhY3Rp
dmVUb2RvQ291bnQiLCJyZWR1Y2UiLCJwbGFjZWhvbGRlciIsImF1dG9Gb2N1cyIsIm9uQ2hhbmdl
IiwiX3RoaXMyIl0sIm1hcHBpbmdzIjoid0JBQ0EsU0FBU0EsTUF1Q1QsUUFBU0MsR0FBRUMsRUFB
VUMsR0FBQUEsR0FFaEJDLEdBQ0FDLEVBQ0FDLEVBQ0FDLEVBSkFDLEVBQVdDLENBQUFBLEtBS1ZG
LEVBQUlHLFVBQVVDLE9BQVFKLEtBQU0sR0FBQUssRUFDMUJDLEtBQUtILFVBQVVILEdBQUFBLEtB
RWxCSixHQUFxQyxNQUF2QkEsRUFBV0ssV0FDdkJNLEVBQU1ILFFBQVFHLEVBQU1ELEtBQUtWLEVB
QVdLLGdCQUNsQ0wsR0FBV0ssVUFFWk0sRUFBTUgsUUFBQUEsSUFDUE4sRUFBUVMsRUFBTUMsUUFB
d0JDLFNBQWRYLEVBQU1VLElBQUFBLElBQzdCUixFQUFJRixFQUFNTSxPQUFRSixLQUFBQSxFQUNo
Qk0sS0FBS1IsRUFBTUUsUUFHRyxpQkFBVkYsS0FBcUJBLEVBQVEsT0FFcENDLEVBQTZCLGtCQUFi
SixNQUNOLE1BQVRHLEVBQWVBLEVBQVEsR0FBNkIsZ0JBQVZBLEdBQW9CQSxHQUFRWSxHQUF3Qyxn
QkFBVlosS0FBb0JDLEdBQUFBLElBR3pIQSxHQUFVRixFQUFBQSxFQUNKSSxFQUFTRyxPQUFTLElB
QU1OLEVBQ3ZCRyxJQUFhQyxFQUFBQSxHQUNYSixHQUFBQSxFQUVIUSxLQUFLUixHQUFBQSxFQUdG
QyxDQUFBQSxJQUlYWSxHQUFJLEdBQUlsQixFQUFBQSxPQUFBQSxHQUNWRSxTQUFXQSxFQUFBQSxF
QUNYTSxTQUFXQSxFQUFBQSxFQUNYTCxXQUEyQixNQUFkQSxFQUFxQmEsT0FBWWIsRUFBQUEsRUFD
OUNnQixJQUFvQixNQUFkaEIsRUFBcUJhLE9BQVliLEVBQVdnQixJQUc5QkgsU0FBbEJJLEVBQVFD
LE9BQXFCRCxFQUFRQyxNQUFNSCxHQUV4Q0EsRUFPUixRQUFTSSxHQUFPQyxFQUFLQyxHQUFBQSxJ
QUNkLEdBQUlqQixLQUFLaUIsR0FBQUEsRUFDUmpCLEdBQUtpQixFQUFNakIsRUFBQUEsT0FDVGdC
LEdBbUJWLFFBQVNFLEdBQWNDLElBQ2pCQSxFQUFVQyxTQUFXRCxFQUFVQyxRQUFBQSxJQUEyQyxH
QUF6QkMsRUFBTWYsS0FBS2EsS0FDL0ROLEVBQVFTLG1CQUFxQkMsR0FBT0MsR0FJdkMsUUFBU0Es
S0FBQUEsR0FDSmIsR0FDQWMsRUFBT0osQ0FBQUEsS0FBQUEsS0FFSlYsRUFBSWMsRUFBS2pCLE9B
Q1hHLEVBQUVTLFFBQVFNLEVBQWdCZixHQVNoQyxRQUFTZ0IsR0FBZUMsRUFBTWQsRUFBT2UsR0FB
QUEsTUFDZixnQkFBVmYsSUFBdUMsZ0JBQVZBLEdBQ2JMLFNBQW5CbUIsRUFBS0UsVUFFaUIsZ0JB
QW5CaEIsR0FBTW5CLFVBQ1JpQyxFQUFLRyx1QkFBeUJDLEVBQVlKLEVBQU1kLEVBQU1uQixVQUV4
RGtDLEdBQWFELEVBQUtHLHdCQUEwQmpCLEVBQU1uQixTQU8xRCxRQUFTcUMsR0FBWUosRUFBTWpD
LEdBQUFBLE1BQ25CaUMsR0FBS0sscUJBQXVCdEMsR0FBWWlDLEVBQUtqQyxTQUFTdUMsZ0JBQWtC
dkMsRUFBU3VDLGNBVXpGLFFBQVNDLEdBQWFyQixHQUFBQSxHQUNqQkcsR0FBUUYsS0FBV0QsRUFB
TWxCLFdBQUFBLEdBQ3ZCSyxTQUFXYSxFQUFNYixRQUFBQSxJQUVuQm1DLEdBQWV0QixFQUFNbkIs
U0FBU3lDLFlBQUFBLElBQ2IzQixTQUFqQjJCLEVBQUFBLElBQ0UsR0FBSXBDLEtBQUtvQyxHQUNJ
M0IsU0FBYlEsRUFBTWpCLEtBQUFBLEVBQ0hBLEdBQUtvQyxFQUFhcEMsR0FBQUEsT0FLcEJpQixH
QVFSLFFBQVNvQixHQUFXMUMsRUFBVTJDLEdBQUFBLEdBQ3pCVixHQUFPVSxFQUFRQyxTQUFTQyxn
QkFBZ0IsNkJBQThCN0MsR0FBWTRDLFNBQVNFLGNBQWM5QyxFQUFBQSxPQUFBQSxHQUN4R3NDLG1C
QUFxQnRDLEVBQ25CaUMsRUFNUixRQUFTYyxHQUFXZCxHQUFBQSxHQUNmZSxHQUFhZixFQUFLZSxV
QUNsQkEsSUFBWUEsRUFBV0MsWUFBWWhCLEdBWXhDLFFBQVNpQixHQUFZakIsRUFBTWtCLEVBQU1D
LEVBQUtDLEVBQU9WLEdBQUFBLEdBQy9CLGNBQVRRLElBQXNCQSxFQUFPLFNBRXBCLFFBQVRBLE9B
RUcsSUFBYSxRQUFUQSxFQUNOQyxHQUFLQSxFQUFJLE1BQ1RDLEdBQU9BLEVBQU1wQixPQUNYLElB
QWEsVUFBVGtCLEdBQXFCUixFQUV6QixHQUFhLFVBQVRRLEdBQUFBLEdBQ0xFLEdBQTBCLGdCQUFW
QSxJQUFxQyxnQkFBUkQsS0FBQUEsRUFDNUNFLE1BQU1DLFFBQVVGLEdBQVMsSUFFM0JBLEdBQTBC
LFlBQWpCLFNBQU9BLEVBQVAsWUFBQUcsRUFBT0gsSUFBb0IsQ0FBQSxHQUNwQixnQkFBUkQsR0FB
QUEsSUFDTCxHQUFJL0MsS0FBSytDLEdBQ1AvQyxJQUFLZ0QsS0FBUXBCLEVBQUtxQixNQUFNakQs
R0FBSyxHQUFBLEtBR2hDLEdBQUlBLEtBQUtnRCxHQUFBQSxFQUNSQyxNQUFNakQsR0FBeUIsZ0JB
QWJnRCxHQUFNaEQsSUFBbUJvRCxFQUFtQkMsS0FBS3JELE1BQUFBLEVBQWVnRCxFQUFNaEQsR0FB
SyxLQUFPZ0QsRUFBTWhELFFBRzNHLElBQWEsNEJBQVQ4QyxFQUNORSxJQUFPcEIsRUFBSzBCLFVB
QVlOLEVBQU1PLFFBQVUsUUFDdEMsSUFBZSxLQUFYVCxFQUFLLElBQXdCLEtBQVhBLEVBQUssR0FB
VyxDQUFBLEdBQ3hDVSxHQUFhVixLQUFVQSxFQUFPQSxFQUFLVyxRQUFRLFdBQVksSUFBQUMsR0FD
cERaLEVBQUtaLGNBQWN5QixVQUFVLEdBQ2hDWCxFQUNFRCxHQUFLbkIsRUFBS2dDLGlCQUFpQmQs
RUFBTWUsRUFBWUwsR0FBQUEsRUFFN0NNLG9CQUFvQmhCLEVBQU1lLEVBQVlMLElBRTNDNUIsRUFB
S21DLGFBQWVuQyxFQUFLbUMsZ0JBQWtCakIsR0FBUUUsTUFDOUMsSUFBYSxTQUFURixHQUE0QixT
QUFUQSxJQUFvQlIsR0FBU1EsSUFBUWxCLEdBQUFBLEVBQ3REQSxFQUFNa0IsRUFBZSxNQUFURSxF
QUFnQixHQUFLQSxHQUNoQyxNQUFUQSxHQUFpQkEsS0FBQUEsR0FBaUJwQixFQUFLb0MsZ0JBQWdC
bEIsT0FDckQsQ0FBQSxHQUNGbUIsR0FBSzNCLEdBQVNRLEtBQVVBLEVBQU9BLEVBQUtXLFFBQVEs
WUFBYSxJQUNoRCxPQUFUVCxHQUFpQkEsS0FBQUEsRUFDaEJpQixFQUFJckMsRUFBS3NDLGtCQUFr
QiwrQkFBZ0NwQixFQUFLWixlQUFvQk4sRUFBS29DLGdCQUFnQmxCLEdBQ2xGLGtCQUFWRSxLQUNi
aUIsRUFBSXJDLEVBQUt1QyxlQUFlLCtCQUFnQ3JCLEVBQUtaLGNBQWVjLEdBQVlwQixFQUFLd0Ms
YUFBYXRCLEVBQU1FLFFBQUFBLEdBbENoSHFCLFVBQVlyQixHQUFTLEdBMEM1QixRQUFTc0IsR0FB
WTFDLEVBQU1rQixFQUFNRSxHQUFBQSxJQUFBQSxFQUUxQkYsR0FBUUUsRUFDWixNQUFPdUIsS0FN
VixRQUFTVixHQUFXVSxHQUFBQSxNQUNaQyxNQUFLVCxXQUFXUSxFQUFFRSxNQUFNNUQsRUFBUTZE
LE9BQVM3RCxFQUFRNkQsTUFBTUgsSUFBTUEsR0FnQnJFLFFBQVNJLEtBQUFBLElBQUFBLEdBQ0pD
LEdBQ0dBLEVBQUlDLEVBQU9yRSxPQUNiSyxFQUFRaUUsWUFBWWpFLEVBQVFpRSxXQUFXRixHQUN2
Q0EsRUFBRUcsbUJBQW1CSCxFQUFFRyxvQkFVN0IsUUFBU0MsR0FBS0MsRUFBS25FLEVBQU9vRSxF
QUFTQyxFQUFVQyxFQUFRQyxHQUUvQ0MsT0FBQUEsR0FFa0IsTUFBVkYsR0FBNkMzRSxTQUEzQjJF
LEVBQU9HLGdCQUFBQSxHQUdsQixNQUFQTixLQUFpQixpQkFBbUJBLElBQUFBLElBRzdDTyxHQUFN
QyxFQUFNUixFQUFLbkUsRUFBT29FLEVBQVNDLEVBQVVFLEVBQUFBLE9BRzNDRCxJQUFVSSxFQUFJ
N0MsYUFBZXlDLEdBQVFBLEVBQU9NLFlBQVlGLEtBR3BERixLQUFBQSxJQUFBQSxFQUdGRCxHQUFl
VixLQUdkYSxFQUlSLFFBQVNDLEdBQU1SLEVBQUtuRSxFQUFPb0UsRUFBU0MsRUFBVUUsR0FBQUEs
R0FDekNNLEdBQU1WLEVBQ05XLEVBQWNDLEVBQUFBLElBR0wsTUFBVC9FLEdBQWtDLGlCQUFWQSxL
QUFxQkEsRUFBUSxJQUdwQyxnQkFBVkEsSUFBdUMsZ0JBQVZBLEdBQUFBLE1BR25DbUUsSUFBeUJ4
RSxTQUFsQndFLEVBQUluRCxXQUEyQm1ELEVBQUl0QyxjQUFnQnNDLEVBQUlhLFlBQWNULEdBRTNF
SixFQUFJYyxXQUFhakYsSUFBQUEsRUFDaEJpRixVQUFZakYsSUFBQUEsRUFJWHlCLFNBQVN5RCxl
QUFlbEYsR0FDMUJtRSxJQUNDQSxFQUFJdEMsWUFBWXNDLEVBQUl0QyxXQUFXc0QsYUFBYU4sRUFB
S1YsR0FBQUEsRUFDbkNBLEdBQUFBLEtBQUtqRixFQUl6QmtHLGVBQUEsRUFFT1AsQ0FBQUEsSUFJ
SlEsR0FBWXJGLEVBQU1uQixRQUFBQSxJQUNHLGtCQUFkd0csR0FBQUEsTUFDSEMsR0FBd0JuQixF
QUFLbkUsRUFBT29FLEVBQVNDLEVBQUFBLElBQUFBLEdBSTNCLFFBQWRnQixHQUEyQyxrQkFBZEEs
R0FBd0NOLEdBQUFBLEdBR3JFbkYsS0FDUHVFLElBQVFqRCxFQUFZaUQsRUFBS2tCLE1BQUFBLEVB
Q3ZCOUQsRUFBVzhELEVBQVdOLElBRXhCWixHQUFLLENBQUEsS0FFREEsRUFBSW9CLFlBQUFBLEVB
Q05YLFlBQVlULEVBQUlvQixXQUVqQnBCLEdBQUl0QyxZQUFZc0MsRUFBSXRDLFdBQVdzRCxhQUFh
TixFQUFLVixHQUFBQSxFQUduQ0EsR0FBQUEsR0FBSyxHQUlyQnFCLEdBQUtYLEVBQUlVLFdBQ1Rw
RixFQUFRMEUsRUFBQU8sY0FDUkssRUFBWXpGLEVBQU1iLFFBQUFBLElBRVQsTUFBVGdCLEVBQWUs
Q0FBQU4sRUFDVmdGLEVBQUFPLGdCQUFBLEtBQ0gsR0FBSU0sR0FBSWIsRUFBSS9GLFdBQVlJLEVB
QUl3RyxFQUFFcEcsT0FBUUosS0FBQUEsRUFDcEN3RyxFQUFFeEcsR0FBRzhDLE1BQVEwRCxFQUFF
eEcsR0FBR2dELE1BQUFBLE9BS3JCbkIsSUFBYTBFLEdBQWtDLElBQXJCQSxFQUFVbkcsUUFBd0Ms
Z0JBQWpCbUcsR0FBVSxJQUF5QixNQUFORCxHQUErQjdGLFNBQWpCNkYsRUFBR3hFLFdBQTZDLE1B
QWxCd0UsRUFBR0csWUFDdklILEVBQUdQLFdBQWFRLEVBQVUsS0FBQUcsRUFDMUJYLFVBQVlRLEVB
QVUsS0FJbEJBLEdBQWFBLEVBQVVuRyxRQUFnQixNQUFOa0csSUFBQUEsRUFDMUJYLEVBQUtZLEVB
QVdyQixFQUFTQyxFQUFVdEQsSUFBOEMsTUFBakNaLEVBQU0wRix5QkFBQUEsRUFJdkRoQixFQUFL
N0UsRUFBTWxCLFdBQVlxQixHQUFBQSxHQUcxQjJFLEVBRUxELEVBVVIsUUFBU2lCLEdBQWMzQixF
QUFLc0IsRUFBV3JCLEVBQVNDLEVBQVUwQixHQUFBQSxHQVNyREMsR0FDQWxDLEVBQ0FtQyxFQUNB
QyxFQUNBbEgsRUFaQW1ILEVBQW1CaEMsRUFBSWlDLFdBQ3ZCakgsS0FDQWtILEtBQ0FDLEVBQVcs
RUFDWEMsRUFBTSxFQUNOQyxFQUFNTCxFQUFpQjdHLE9BQ3ZCbUgsRUFBYyxFQUNkQyxFQUFPakIs
RUFBWUEsRUFBVW5HLE9BQVMsQ0FBQSxJQVE5QixJQUFSa0gsRUFBQUEsSUFDRSxHQUFJdEgsR0FB
SSxFQUFHQSxFQUFJc0gsRUFBS3RILElBQUssQ0FBQSxHQUN6QnlILEdBQVNSLEVBQWlCakgsR0FD
MUJpQixFQUFRd0csRUFBQXZCLGNBQ1J0RixFQUFNNEcsR0FBUXZHLEVBQVF3RyxFQUFPM0IsV0FB
YTJCLEVBQU8zQixXQUFXNEIsTUFBUXpHLEVBQU1MLElBQU0sSUFDekUsT0FBUEEsR0FBQUEsSUFB
QUEsRUFFR0EsR0FBTzZHLElBQ0h4RyxJQUErQlIsU0FBckJnSCxFQUFPM0YsV0FBMEIrRSxHQUFj
WSxFQUFPMUIsVUFBVTRCLE9BQWdCZCxNQUFBQSxFQUMzRlUsS0FBaUJFLEdBQUFBLEdBS2hCLElB
QVRELEVBQUFBLElBQ0UsR0FBSXhILEdBQUksRUFBR0EsRUFBSXdILEVBQU14SCxJQUFLLENBQUEw
RyxFQUNyQkgsRUFBVXZHLEdBQUFBLEVBQ1gsSUFBQSxJQUdKWSxHQUFNb0csRUFBT3BHLEdBQUFB
LElBQ04sTUFBUEEsRUFDQ3dHLEdBQTJCM0csU0FBZjBHLEVBQU12RyxLQUFBQSxFQUNidUcsRUFB
TXZHLEdBQUFBLEVBQ1JBLEdBQU9ILE9BQUFBLFNBS1YsS0FBS1gsR0FBU3VILEVBQU1FLEVBQUFB
LElBQ2xCVCxFQUFJTyxFQUFLUCxFQUFJUyxFQUFhVCxJQUFBQSxHQUNWckcsU0FBaEJSLEVBQVM2
RyxJQUFvQm5GLEVBQWVpRCxFQUFJM0UsRUFBUzZHLEdBQUlFLEVBQVFILEdBQWMsQ0FBQWxHLEVB
QzlFaUUsRUFBQUEsRUFDQ2tDLEdBQUtyRyxPQUNWcUcsSUFBTVMsRUFBYyxHQUFHQSxJQUN2QlQs
SUFBTU8sR0FBS0EsR0FBQUEsT0FBQUEsRUFPWDVCLEVBQU0zRixFQUFPa0gsRUFBUTlCLEVBQVND
LEdBQUFBLEVBRWxDOEIsRUFBaUJqSCxHQUNqQkYsR0FBU0EsSUFBVW1GLEdBQU9uRixJQUFVaUgs
SUFDOUIsTUFBTEEsRUFBQUEsRUFDQ3JCLFlBQVk1RixHQUNOQSxJQUFVaUgsRUFBRU4sWUFBQUEs
RUFDWE0sR0FBQUEsRUFFUGEsYUFBYTlILEVBQU9pSCxJQUFBQSxHQU94QkssRUFBQUEsSUFDRSxH
QUFJcEgsS0FBS21ILEdBQ0kxRyxTQUFiMEcsRUFBTW5ILElBQWtCNkgsRUFBa0JWLEVBQU1uSCxJ
QUFBQSxFQUFJLE1BS25EcUgsR0FBT0UsR0FDNkI5RyxVQUFyQ1gsRUFBUUcsRUFBU3NILE9BQStC
TSxFQUFrQi9ILEdBQUFBLEdBUXpFLFFBQVMrSCxHQUFrQmpHLEVBQU1rRyxHQUFBQSxHQUM1QjNH
LEdBQVlTLEVBQUtrRSxVQUNqQjNFLEdBQUFBLEVBRWNBLElBSVksTUFBekJTLEVBQUFzRSxlQUFp
Q3RFLEVBQUFzRSxjQUFzQjZCLEtBQUtuRyxFQUFBc0UsY0FBc0I2QixJQUFJLE1BRXRGRCxLQUFB
QSxHQUFrRCxNQUF6QmxHLEVBQUFzRSxlQUFBdEIsRUFDakJoRCxHQUFBQSxFQUdHQSxJQVFqQixR
QUFTb0csR0FBZXBHLEdBQUFBLElBQUFBLEVBQ2hCQSxFQUFLcUcsVUFDTHJHLEdBQU0sQ0FBQSxH
QUNSc0csR0FBT3RHLEVBQUt1RyxlQUFBQSxHQUNFdkcsR0FBQUEsR0FBTTJDLEVBQ2pCMkQsR0FT
VCxRQUFTRSxHQUFlbkQsRUFBS29ELEVBQU90RixHQUFBQSxHQUMvQkQsRUFBQUEsS0FHQ0EsSUFB
UUMsR0FDTnNGLEdBQXdCLE1BQWZBLEVBQU12RixJQUErQixNQUFiQyxFQUFJRCxJQUFBQSxFQUM5
Qm1DLEVBQUtuQyxFQUFNQyxFQUFJRCxHQUFPQyxFQUFJRCxHQUFRckMsT0FBV29GLEdBQUFBLEtB
S3REL0MsSUFBUXVGLEdBQ0MsYUFBVHZGLEdBQWdDLGNBQVRBLEdBQTJCQSxJQUFRQyxJQUFRc0Ys
RUFBTXZGLE1BQW9CLFVBQVRBLEdBQTZCLFlBQVRBLEVBQXFCbUMsRUFBSW5DLEdBQVFDLEVBQUlE
LEtBQUFBLEVBQ25JbUMsRUFBS25DLEVBQU1DLEVBQUlELEdBQU9DLEVBQUlELEdBQVF1RixFQUFN
dkYsR0FBTytDLElBWTlELFFBQVN5QyxHQUFpQm5ILEdBQUFBLEdBQ3JCMkIsR0FBTzNCLEVBQVVv
SCxZQUFZekYsTUFDaEMwRixHQUFXMUYsS0FBVTBGLEdBQVcxRixRQUFheEMsS0FBS2EsR0FJcEQs
UUFBU3NILEdBQWdCQyxFQUFNekgsRUFBT2lFLEdBQUFBLEdBRWpDeUQsR0FEQWxILEVBQU8rRyxH
QUFXRSxFQUFLNUYsS0FBQUEsSUFHdkI0RixFQUFLRSxXQUFhRixFQUFLRSxVQUFVQyxRQUFBQSxF
QUM3QixHQUFJSCxHQUFLekgsRUFBT2lFLEdBQUFBLEVBQ2I0RCxLQUFLSCxFQUFNMUgsRUFBT2lF
LEtBQUFBLEVBRXJCLEdBQUk2RCxHQUFVOUgsRUFBT2lFLEdBQUFBLEVBQ3ZCcUQsWUFBY0csRUFB
QUEsRUFDZEcsT0FBU0csR0FHWHZILEVBQUFBLElBQ0UsR0FBSXpCLEdBQUl5QixFQUFLckIsT0FB
UUosS0FBQUEsR0FDckJ5QixFQUFLekIsR0FBR3VJLGNBQWdCRyxFQUFNLENBQUFPLEVBQzVCQyxT
QUFXekgsRUFBS3pCLEdBQUdrSixTQUFBQSxFQUNuQkMsT0FBT25KLEVBQUcsRUFBQSxPQUFBLE1B
S1gySSxHQUlSLFFBQVNLLEdBQVMvSCxFQUFPbUksRUFBT2xFLEdBQUFBLE1BQ3hCVixNQUFLK0Qs
WUFBWXRILEVBQU9pRSxHQVNoQyxRQUFTbUUsR0FBa0JsSSxFQUFXRixFQUFPcUksRUFBTXBFLEVB
QVNDLEdBQ3ZEaEUsRUFBVW9JLFdBQUFBLEVBQ0pBLFVBQUFBLEdBRU5wSSxFQUFVcUksTUFBUXZJ
LEVBQU04RyxZQUFZOUcsR0FBTThHLEtBQzFDNUcsRUFBVXVHLE1BQVF6RyxFQUFNTCxZQUFZSyxH
QUFNTCxLQUV6Q08sRUFBVXNJLE1BQVF0RSxFQUNsQmhFLEVBQVV1SSxvQkFBb0J2SSxFQUFVdUks
cUJBQ2xDdkksRUFBVXdJLDJCQUFBQSxFQUNWQSwwQkFBMEIxSSxFQUFPaUUsR0FHeENBLEdBQVdB
LElBQVkvRCxFQUFVK0QsVUFDL0IvRCxFQUFVeUksY0FBYXpJLEVBQVV5SSxZQUFjekksRUFBVStE
LFNBQUFBLEVBQ3BEQSxRQUFVQSxHQUdoQi9ELEVBQVUwSSxZQUFXMUksRUFBVTBJLFVBQVkxSSxF
QUFVRixPQUFBQSxFQUNoREEsTUFBUUEsRUFBQUEsRUFFUnNJLFVBQUFBLEVBRUcsSUFBVEQsSUFD
VSxJQUFUQSxHQUFjekksRUFBUWlKLHdCQUFBQSxHQUFtQzNJLEVBQVVzSSxLQUFBQSxFQUd4RHRJ
LEdBQUFBLEVBRkVBLEVBQVcsRUFBR2dFLElBTTVCaEUsRUFBVXFJLE9BQU9ySSxFQUFVcUksTUFB
TXJJLElBU3RDLFFBQVNPLEdBQWdCUCxFQUFXbUksRUFBTW5FLEVBQVU0RSxHQUFBQSxJQUMvQzVJ
LEVBQVVvSSxTQUFBQSxDQUFBQSxHQWFWUyxHQUNBckIsRUFDQXNCLEVBYkFoSixFQUFRRSxFQUFV
RixNQUNsQm1JLEVBQVFqSSxFQUFVaUksTUFDbEJsRSxFQUFVL0QsRUFBVStELFFBQ3BCZ0YsRUFB
Z0IvSSxFQUFVMEksV0FBYTVJLEVBQ3ZDa0osRUFBZ0JoSixFQUFVaUosV0FBYWhCLEVBQ3ZDaUIs
RUFBa0JsSixFQUFVeUksYUFBZTFFLEVBQzNDb0YsRUFBV25KLEVBQVVzSSxLQUNyQlAsRUFBVy9I
LEVBQVUrSCxTQUNyQnFCLEVBQWNELEdBQVlwQixFQUMxQnNCLEVBQXdCckosRUFBVTJFLFdBQ2xD
MkUsR0FBQUEsQ0FBTyxJQU1QSCxJQUFBQSxFQUNPckosTUFBUWlKLEVBQUFBLEVBQ1JkLE1BQVFl
LEVBQUFBLEVBQ1JqRixRQUFVbUYsRUFDUCxJQUFUZixHQUFjbkksRUFBVXVKLHVCQUF5QnZKLEVB
QVV1SixzQkFBc0J6SixFQUFPbUksRUFBT2xFLE1BQUFBLEVBQWF5RixHQUFBLEVBRXJHeEosRUFB
VXlKLHFCQUFBQSxFQUNWQSxvQkFBb0IzSixFQUFPbUksRUFBT2xFLEdBQUFBLEVBRW5DakUsTUFB
UUEsRUFBQUEsRUFDUm1JLE1BQVFBLEVBQUFBLEVBQ1JsRSxRQUFVQSxHQUFBQSxFQUdYMkUsVUFB
WTFJLEVBQVVpSixVQUFZakosRUFBVXlJLFlBQWN6SSxFQUFVK0gsU0FBVyxLQUFBM0UsRUFDL0Vu
RCxRQUFBQSxHQUVMcUosRUFBTSxDQUFBekssRUFDQ21CLEVBQVUwSCxPQUFPNUgsRUFBT21JLEVB
QU9sRSxHQUd0Qy9ELEVBQVUwSixrQkFBQUEsRUFDSDlKLEVBQU9BLEtBQVdtRSxHQUFVL0QsRUFB
VTBKLG1CQUFBQSxJQUk3Q0MsR0FDQXJCLEVBRkFzQixFQUFpQmYsR0FBWUEsRUFBU3JLLFFBQUFB
LElBSVosa0JBQW5Cb0wsR0FBK0IsQ0FBQSxHQUdyQ0MsR0FBYTdJLEVBQWE2SCxFQUFBQSxHQUN2
QlEsRUFFSDdCLEdBQVFBLEVBQUtKLGNBQWdCd0MsR0FBa0JDLEVBQVdwSyxLQUFPK0gsRUFBS2pC
LE1BQUFBLEVBQ3ZEaUIsRUFBTXFDLEVBQVksRUFBRzlGLEdBQUFBLElBQVMrRixFQUVwQ3RDLEVB
QUFBLEVBRUY3QyxXQUFhNkMsRUFBT0YsRUFBZ0JzQyxFQUFnQkMsRUFBWTlGLEdBQUFBLEVBQ3JF
Z0UsU0FBV1AsRUFBS08sVUFBWUEsRUFBQUEsRUFDNUJnQyxpQkFBbUIvSixFQUFBQSxFQUNOd0gs
RUFBTXFDLEVBQVksRUFBRzlGLEdBQUFBLEdBQVNpRyxFQUNoQ3hDLEVBQU0sRUFBR3hELEdBQUFB
LElBQVVpRyxFQUc3QnpDLEVBQUtjLFNBQUFBLEdBRUpjLEVBQUFBLEVBR0lDLEVBQ1JNLElBQUFB
LEVBQ0szSixFQUFVMkUsV0FBYSxPQUc1QnlFLEdBQXdCLElBQVRqQixLQUNkVyxJQUFPQSxFQUFN
bkUsV0FBYSxNQUFBc0YsRUFDdkJwRyxFQUFLaUYsRUFBT0QsRUFBVTlFLEVBQVNDLElBQWFtRixF
QUFVQyxHQUFlQSxFQUFZNUgsWUFBQUEsR0FBWSxJQUlsRzRILEdBQWVkLElBQVNjLEdBQWU1QixJ
QUFTNkIsRUFBdUIsQ0FBQSxHQUN0RWEsR0FBYWQsRUFBWTVILFVBQ3pCMEksSUFBYzVCLElBQVM0
QixJQUFBQSxFQUNmcEYsYUFBYXdELEVBQU1jLEdBRXpCTyxJQUFBQSxFQUNRaEYsV0FBYSxLQUFB
d0YsRUFDUGYsR0FBQUEsS0FBYSxHQUs5Qk8sR0FBQUEsRUFDY0EsR0FBQUEsRUFHUnJCLEtBQU9B
LEVBQ2JBLElBQVNNLEVBQVMsQ0FBQSxJQUFBLEdBQ2pCd0IsR0FBZXBLLEVBQ2Z1QyxFQUFJdkMs
RUFDRHVDLEVBQUlBLEVBQUV3SCxtQkFDWEssRUFBZTdILEdBQUcrRixLQUFPQSxDQUFBQSxHQUV0
QjNELFdBQWF5RixFQUFBQSxFQUNieEosc0JBQXdCd0osRUFBYWhELGFBQUFBLElBSXZDK0IsR0FB
WW5GLEVBQUFBLEVBQ1RxRyxRQUFRckssR0FDSnNKLElBTVB0SixFQUFVc0ssb0JBQUFBLEVBQ0hB
LG1CQUFtQnZCLEVBQWVDLEVBQWVFLEdBRXhEeEosRUFBUTZLLGFBQWE3SyxFQUFRNkssWUFBWXZL
LElBR1osTUFBOUJBLEVBQVV3SyxpQkFBQUEsS0FDTnhLLEVBQVV3SyxpQkFBaUJ2TCxRQUFBQSxF
QUN2QnVMLGlCQUFpQm5MLE1BQU1zSSxLQUFLM0gsRUFJbkNtRSxLQUFjeUUsR0FBU3BGLEtBUzdC
LFFBQVN5QixHQUF3Qm5CLEVBQUtuRSxFQUFPb0UsRUFBU0MsR0FBQUEsSUFBQUEsR0FDakRQLEdB
QUlLLEdBQU9BLEVBQUlhLFdBQ2Y4RixFQUFvQmhILEVBQ3BCaUgsRUFBUzVHLEVBQ1Q2RyxFQUFn
QmxILEdBQUtLLEVBQUlsRCx3QkFBMEJqQixFQUFNbkIsU0FDekRvTSxFQUFVRCxFQUNWN0ssRUFB
UWtCLEVBQWFyQixHQUNsQjhELElBQU1tSCxJQUFZbkgsRUFBSUEsRUFBRXNHLG1CQUFBQSxFQUNw
QnRHLEVBQUUyRCxjQUFnQnpILEVBQU1uQixRQUFBQSxPQUcvQmlGLElBQUttSCxLQUFhNUcsR0FB
WVAsRUFBRWtCLGFBQUFBLEVBQ2pCbEIsRUFBRzNELEVBQU8sRUFBR2lFLEVBQVNDLEdBQUFBLEVB
Q2xDUCxFQUFFNkUsT0FFSm1DLElBQXNCRSxJQUFBQSxFQUNSRixHQUFBQSxFQUNYQyxFQUFTLE1B
QUFHLEVBR1p2RCxFQUFnQjNILEVBQU1uQixTQUFVc0IsRUFBT2lFLEdBQ3ZDRCxJQUFRTCxFQUFF
c0UsV0FBQUEsRUFDWEEsU0FBV2pFLEVBQUFBLEVBRUosTUFBQWdILEVBRVFySCxFQUFHM0QsRUFB
TyxFQUFHaUUsRUFBU0MsR0FBQUEsRUFDbENQLEVBQUU2RSxLQUVKb0MsR0FBVTVHLElBQVE0RyxJ
QUFBQSxFQUNkL0YsV0FBYSxLQUFBd0YsRUFDRk8sR0FBQUEsS0FJYjVHLEVBT1IsUUFBU2lILEdB
QWlCL0ssR0FDckJOLEVBQVFzTCxlQUFldEwsRUFBUXNMLGNBQWNoTCxFQUFBQSxJQUU3Q3NJLEdB
QU90SSxFQUFVc0ksSUFBQUEsR0FFWEYsVUFBQUEsRUFFTnBJLEVBQVVpTCxzQkFBc0JqTCxFQUFV
aUwsdUJBQUFBLEVBRXBDM0MsS0FBTyxJQUFBLElBR2I0QyxHQUFRbEwsRUFBVTJFLFVBQ2xCdUcs
R0FBQUEsRUFDY0EsR0FDUDVDLElBQ05BLEVBQUF2RCxlQUF5QnVELEVBQUF2RCxjQUFzQjZCLEtB
QUswQixFQUFBdkQsY0FBc0I2QixJQUFJLE1BQUF4RCxFQUV4RTJFLFNBQVdPLEVBQUFBLEVBRVZB
LEdBQUFBLEVBQ010SSxHQUFBQSxFQUVGc0ksSUFHWnRJLEVBQVVxSSxPQUFPckksRUFBVXFJLE1B
QU0sTUFjdEMsUUFBU1QsR0FBVTlILEVBQU9pRSxHQUFBQSxLQUNwQjlELFFBQUFBLEVBQVNvRCxL
QUtUVSxRQUFVQSxFQUFBQSxLQUtWakUsTUFBUUEsRUFBQUEsS0FLUm1JLE1BQVE1RSxLQUFLNEUs
VUE4RG5CLFFBQVNQLEdBQU8vSCxFQUFPc0UsRUFBUWtILEdBQUFBLE1BQ3RCdEgsR0FBS3NILEVB
QU94TCxNQUFBQSxFQUFrQnNFLEdBQUFBLEdDcDdCdkMsUUFBU21ILEdBQUl2TCxFQUFLSixFQUFL
NEwsRUFBSzdMLEdBQUFBLElBQUFBLEVBQ3ZCLEVBQUErQyxFQUNFOUMsRUFBSTZMLE1BQVE3TCxF
QUFJNkwsTUFBTSxLQUFPN0wsRUFDNUJJLEdBQU9MLEVBQUVDLEVBQUlSLFFBQUFBLEVBQWdCWSxF
QUFJSixFQUFJRCxLQUFBQSxPQUMvQkYsVUFBTk8sRUFBa0J3TCxFQUFNeEwsRUFTaEMsUUFBUzBM
LEdBQVV2TCxFQUFXUCxFQUFLK0wsR0FBQUEsR0FDOUJDLEdBQU9oTSxFQUFJNkwsTUFBTSxJQUFB
LE9BQ2QsVUFBU2xJLEdBQUFBLElBQUFBLEdBQ1hiLEdBQUlhLEdBQUtBLEVBQUVzSSxRQUFVckks
S0FDeEI0RSxLQUNBcEksRUFBTW9JLEVBQ05rQyxFQUF1QixnQkFBWnFCLEdBQXVCSixFQUFJaEks
RUFBR29JLEdBQWFqSixFQUFFL0QsU0FBWStELEVBQUVlLEtBQUtxSSxNQUFNLFlBQWNwSixFQUFF
cUosUUFBVXJKLEVBQUVWLE1BQVN1QixFQUN0SHZFLEVBQUksRUFDR0EsRUFBRTRNLEVBQUt4TSxP
QUFPLEVBQUdKLElBQUFBLEVBQ2xCZ0IsRUFBSTRMLEVBQUs1TSxNQUFRZ0IsRUFBSTRMLEVBQUs1
TSxLQUFPQSxHQUFLbUIsRUFBVWlJLE1BQU13RCxFQUFLNU0sUUFBQUEsR0FFOUQ0TSxFQUFLNU0s
SUFBTXNMLEVBQUFBLEVBQ0wwQixTQUFTNUQsSUN6QmQsUUFBUzZELEtBQUFBLElBRVAsR0FEREEs
R0FBTyxHQUNGak4sRUFBSSxFQUFHQSxFQUFJLEdBQUlBLElBQUssQ0FBQSxHQUNyQmtOLEdBQXlC
LEdBQWhCQyxLQUFLRCxTQUFnQixDQUN4QixLQUFObE4sR0FBaUIsS0FBTkEsR0FBa0IsS0FBTkEs
R0FBa0IsS0FBTkEsSUFBQUEsR0FDM0IsS0FBQXVFLElBRUcsS0FBTnZFLEVBQVcsRUFBVyxLQUFO
QSxFQUFxQixFQUFUa04sRUFBYSxFQUFLQSxHQUFTRSxTQUFTLElBQUEsTUFFdEVILEdBR1gsUUFB
Z0JJLEdBQVVDLEVBQU9DLEdBQUFBLE1BQ1osS0FBVkQsRUFBY0MsRUFBT0EsRUFBTyxJQUd2QyxR
QUFnQkMsS0FBQUEsU0FBQUEsUUFBQUEsR0FBQUEsRUFBQUEsR0FBQUEsS0FBQUEsWUFBQUEsSUFB
QUEsS0FBQUEsSUFBQUEsV0FBQUEscUNBQUFBLFFBQUFBLEdBQUFBLEVBQUFBLEdBQUFBLE1BQUFB
LElBQUFBLFlBQUFBLEVBQUFBLEVBQUFBLEVBQUFBLFNBQUFBLEVBQUFBLFFBQUFBLFFBQUFBLEdB
QUFBLEVBQUFBLEdBQUFBLEtBQUFBLFlBQUFBLElBQUFBLEtBQUFBLElBQUFBLFdBQUFBLHFDQUFB
QSxRQUFBQSxHQUFBQSxFQUFBQSxHQUFBQSxJQUFBQSxFQUFBQSxLQUFBQSxJQUFBQSxnQkFBQUEs
NERBQUFBLFFBQUFBLEdBQUFBLGdCQUFBQSxJQUFBQSxrQkFBQUEsR0FBQUEsRUFBQUEsRUFBQUEs
UUFBQUEsR0FBQUEsRUFBQUEsR0FBQUEsR0FBQUEsa0JBQUFBLElBQUFBLE9BQUFBLEVBQUFBLEtB
QUFBLElBQUFBLFdBQUFBLGlFQUFBQSxHQUFBQSxHQUFBQSxVQUFBQSxPQUFBQSxPQUFBQSxHQUFB
QSxFQUFBQSxXQUFBQSxhQUFBQSxNQUFBQSxFQUFBQSxZQUFBQSxFQUFBQSxVQUFBQSxFQUFBQSxj
QUFBQSxLQUFBQSxJQUFBQSxPQUFBQSxlQUFBQSxPQUFBQSxlQUFBQSxFQUFBQSxHQUFBQSxFQUFB
QSxVQUFBQSxHQUFBQSxRQUFBQSxHQUFBQSxFQUFBQSxHQUFBQSxLQUFBQSxZQUFBQSxJQUFBQSxL
QUFBQSxJQUFBQSxXQUFBQSxxQ0FBQUEsUUFBQUEsR0FBQUEsRUFBQUEsR0FBQUEsSUFBQUEsRUFB
QUEsS0FBQUEsSUFBQUEsZ0JBQUFBLDREQUFBQSxRQUFBQSxHQUFBQSxnQkFBQUEsSUFBQUEsa0JB
QUFBLEdBQUFBLEVBQUFBLEVBQUFBLFFBQUFBLEdBQUFBLEVBQUFBLEdBQUFBLEdBQUFBLGtCQUFB
QSxJQUFBQSxPQUFBQSxFQUFBQSxLQUFBQSxJQUFBQSxXQUFBQSxpRUFBQUEsR0FBQUEsR0FBQUEs
VUFBQUEsT0FBQUEsT0FBQUEsR0FBQUEsRUFBQUEsV0FBQUEsYUFBQUEsTUFBQUEsRUFBQUEsWUFB
QUEsRUFBQUEsVUFBQUEsRUFBQUEsY0FBQUEsS0FBQUEsSUFBQUEsT0FBQUEsZUFBQUEsT0FBQUEs
ZUFBQUEsRUFBQUEsR0FBQUEsRUFBQUEsVUFBQUEsR0FBQUEsUUFBQUEsR0FBQUEsR0FBQUEsR0FB
QUEsTUFBQUEsRUFBQUEsS0FBQUEsSUFBQUEsV0FBQUEsZ0NBQUFBLFFBQUFBLEdBQUFBLEVBQUFB
LEdBQUFBLEtBQUFBLFlBQUFBLElBQUFBLEtBQUFBLElBQUFBLFdBQUFBLHFDQUFBQSxRQUFBQSxH
QUFBQSxFQUFBQSxHQUFBQSxJQUFBQSxFQUFBQSxLQUFBQSxJQUFBQSxnQkFBQUEsNERBQUFBLFFB
QUFBLEdBQUFBLGdCQUFBQSxJQUFBQSxrQkFBQUEsR0FBQUEsRUFBQUEsRUFBQUEsUUFBQUEsR0FB
QUEsRUFBQUEsR0FBQUEsR0FBQUEsa0JBQUFBLElBQUFBLE9BQUFBLEVBQUFBLEtBQUFBLElBQUFB
LFdBQUFBLGlFQUFBQSxHQUFBQSxHQUFBQSxVQUFBQSxPQUFBQSxPQUFBQSxHQUFBQSxFQUFBQSxX
QUFBQSxhQUFBQSxNQUFBQSxFQUFBQSxZQUFBQSxFQUFBQSxVQUFBQSxFQUFBQSxjQUFBQSxLQUFB
QSxJQUFBQSxPQUFBQSxlQUFBQSxPQUFBQSxlQUFBQSxFQUFBQSxHQUFBQSxFQUFBQSxVQUFBQSxH
QUFBQSxHQUFBQSxHQUFBQSxrQkFBQUEsU0FBQUEsZ0JBQUFBLFFBQUFBLFNBQUFBLFNBQUFBLEdB
QUFBLGFBQUFBLElBQUFBLFNBQUFBLEdBQUFBLE1BQUFBLElBQUFBLGtCQUFBQSxTQUFBQSxFQUFB
QSxjQUFBQSxRQUFBQSxJQUFBQSxPQUFBQSxVQUFBQSxlQUFBQSxJRlRaM00sS0F3QkFOLEtBRUFM
LEtBcUVBcUIsRUFBMEIsa0JBQVhrTSxTQUF3QkEsUUFBUUMsVUFBVUMsS0FBS0MsS0FBS0gsUUFB
UUMsV0FBYUcsV0FPeEZ6SyxFQUFxQix5REFJckIvQixLQTRKQXdELEtBR0FTLEdBQVksRUFHWk8s
SUFBQUEsRUFHQWhFLElBQUFBLEVBNlJBMkcsS0FxVUp6SCxHQUFPZ0ksRUFBVUgsV0FBQUEsU0Fl
TixTQUFrQlEsRUFBTzBFLEdBQUFBLEdBQzlCQyxHQUFJdkosS0FBSzRFLEtBQ1I1RSxNQUFLNEYs
WUFBVzVGLEtBQUs0RixVQUFZckosS0FBV2dOLElBQUFBLEVBQzFDQSxFQUFvQixrQkFBVjNFLEdB
QXVCQSxFQUFNMkUsRUFBR3ZKLEtBQUt2RCxPQUFTbUksR0FDM0QwRSxJQUFXdEosS0FBS21ILGlC
QUFtQm5ILEtBQUttSCxzQkFBd0JyTCxLQUFLd04sR0FBQUEsRUFDM0R0SixPQUFBQSxZQVFGLFNB
QXFCc0osR0FDN0JBLElBQVd0SixLQUFLbUgsaUJBQW1CbkgsS0FBS21ILHNCQUF3QnJMLEtBQUt3
TixHQUFBQSxFQUN6RHRKLEtBQU0sSUFBQXFFLE9BV2YsY0FBQSxJQUFBbUYsSUFBQUMsT0FBQUMs
UUFBQSxTQUFBM0osR0FBQSxJQUFBLEdBQUFiLEdBQUEsRUFBQUEsRUFBQXZELFVBQUFDLE9BQUFz
RCxJQUFBLENBQUEsR0FBQXlLLEdBQUFoTyxVQUFBdUQsRUFBQSxLQUFBLEdBQUF1RixLQUFBa0Ys
R0FBQUYsT0FBQXJGLFVBQUF3RixlQUFBdEYsS0FBQXFGLEVBQUFsRixLQUFBMUUsRUFBQTBFLEdB
QUFrRixFQUFBbEYsSUFBQSxNQUFBMUUsSUcvNUJZOEosR0FBQUEsV0FBQUEsUUFBQUEsR0FDTHpO
LEVBQUswTixHQUFBQSxFQUFBQSxLQUFBQSxHQUFBQSxLQUNSMU4sSUFBTUEsRUFBQUEsS0FDTjJO
LE1BQVFmLEVBQU01TSxPQUFBQSxLQUNkNE4sV0FBYUYsR0FBQUEsTUFBQUEsR0FBQUEsVUFHdEJH
LE9BQUFBLFdBQUFBLEVBQ1VqSyxLQUFLNUQsSUFBSzRELEtBQUsrSixPQUFBQSxLQUNoQkMsVUFB
VUUsUUFBUyxTQUFBQyxHQUFBQSxNQUFNQSxRQUFBQSxFQUFBQSxVQUdsQ0MsUUFBQUEsU0FBUUMs
R0FBQUEsS0FDQ04sTUFBUS9KLEtBQUsrSixNQUFNTyxRQUFBQSxHQUNoQjdCLElBQUFBLE1BQUFB
LEVBQUFBLFdBQUFBLElBRU96SSxLQUVWaUssVUFBQUEsRUFBQUEsVUFHVE0sVUFBQUEsU0FBVUMs
R0FBQUEsS0FDRFQsTUFBUS9KLEtBQUsrSixNQUFNVSxJQUNwQixTQUFBQyxHQUFBQSxNQUFBQSxP
QUFjQSxHQUFNRixVQUFBQSxNQUFBQSxLQUVuQlAsVUFBQUEsRUFBQUEsVUFHVFUsT0FBQUEsU0FB
T0MsR0FBQUEsS0FDRWIsTUFBUS9KLEtBQUsrSixNQUFNVSxJQUFLLFNBQUFDLEdBQUFBLE1BQ3pC
QSxLQUFTRSxFQUFlRixFQUF4QkcsTUFBcUNILEdBQU1GLFdBQVlFLEVBQUtGLGNBQUFBLEtBRTNE
UCxVQUFBQSxFQUFBQSxVQUdUYSxRQUFBQSxTQUFRSixHQUFBQSxLQUNDWCxNQUFRL0osS0FBSytK
LE1BQU1nQixPQUFRLFNBQUE3TCxHQUFBQSxNQUFLQSxLQUFNd0wsSUFBQUEsS0FDdENULFVBQUFB
LEVBQUFBLFVBR1RlLEtBQUFBLFNBQUtDLEVBQVlaLEdBQUFBLEtBQ1JOLE1BQVEvSixLQUFLK0os
TUFBTVUsSUFBSyxTQUFBQyxHQUFBQSxNQUN6QkEsS0FBU08sRUFBYVAsRUFBdEJHLE1BQW1DSCxH
QUFNTCxNQUFBQSxNQUFBQSxLQUV4Q0osVUFBQUEsRUFBQUEsVUFHVGlCLGVBQUFBLFdBQUFBLEtB
Q1NuQixNQUFRL0osS0FBSytKLE1BQU1nQixPQUFRLFNBQUFMLEdBQUFBLE9BQVNBLEVBQUtGLFlB
QUFBLEtBQ3pDUCxVQUFBQSxLQUFBQSxHQUFBQSxFQUFBQSxTQUFBQSxHQUFBQSxHQUFBQSxHQUFB
QSxrQkFBQUEsU0FBQUEsZ0JBQUFBLFFBQUFBLFNBQUFBLFNBQUFBLEdBQUFBLGFBQUFBLElBQUFB
LFNBQUFBLEdBQUFBLE1BQUFBLElBQUFBLGtCQUFBQSxTQUFBQSxFQUFBQSxjQUFBQSxRQUFBQSxJ
QUFBQSxPQUFBQSxVQUFBQSxlQUFBQSxLQzVDWixXQUFBLFFBS1NrQixLQUFBQSxJQUdILEdBRkRD
LE1BRUs1UCxFQUFJLEVBQUdBLEVBQUlHLFVBQVVDLE9BQVFKLElBQUssQ0FBQSxHQUN0QzZQLEdB
QU0xUCxVQUFVSCxFQUFBQSxJQUNmNlAsRUFBQUEsQ0FBQUEsR0FFREMsR0FBQSxTQUFpQkQsRUFB
akIsWUFBQTFNLEVBQWlCME0sRUFBQUEsSUFFTCxXQUFaQyxHQUFvQyxXQUFaQSxFQUFBQSxFQUNu
QnhQLEtBQUt1UCxPQUNQLElBQUlFLE1BQU1DLFFBQVFILEdBQUFBLEVBQ2hCdlAsS0FBS3FQLEVB
QVdNLE1BQU0sS0FBTUosUUFDOUIsSUFBZ0IsV0FBWkMsRUFBQUEsSUFDTCxHQUFJbFAsS0FBT2lQ
LEdBQ1hLLEVBQU9wSCxLQUFLK0csRUFBS2pQLElBQVFpUCxFQUFJalAsSUFBQUEsRUFDeEJOLEtB
QUtNLElBQUFBLE1BTVZnUCxHQUFRTyxLQUFLLEtBQUEsR0F4QmpCRCxNQUFZOUIsY0EyQk0sVUFB
WGdDLEdBQTBCQSxFQUFPQyxRQUFBQSxFQUFBQSxRQUMxQlYsRUFDVyxrQkFBWFcsU0FBK0MsV0FB
dEJuTixFQUFPbU4sT0FBT0MsTUFBb0JELE9BQU9DLElBQUFBLE9BRTVFLGdCQUFrQixXQUFBLE1B
Q2pCWixLQUFBQSxPQUdEQSxXQUFhQSxPQ3pDRGEsR0FBQUEsU0FBQUEsR0FBQUEsUUFBQUEsS0FB
QUEsTUFBQUEsR0FBQUEsS0FBQUEsR0FBQUEsRUFBQUEsS0FBQUEsRUFBQUEsTUFBQUEsS0FBQUEs
WUFBQUEsTUFBQUEsR0FBQUEsRUFBQUEsR0FBQUEsRUFBQUEsVUFDakIzSCxPQUFBQSxTQUFBQSxH
QUFBQSxHQUFTNEgsR0FBdURDLEVBQXZERCxXQUFZbkQsRUFBMkNvRCxFQUEzQ3BELE1BQU9xRCxF
QUFvQ0QsRUFBcENDLGVBQWdCQyxFQUFvQkYsRUFBcEJFLGdCQUFBQSxPQUVwQ2xSLEdBQUFBLFVB
QVFtUixNQUFNLFVBQUFuTixFQUFBLFFBQ0ptTixNQUFNLGNBQUFuTixFQUFBLFNBQUEsS0FBQXVG
LEdBQUEsSUFBQTZILEVBQzRCeEQsRUFBTyxRQUFBLFNBQUE1SixFQUFBLE1BRTNDbU4sTUFBTSxX
QUFBbk4sRUFBQSxLQUFBLEtBQUFBLEVBQUEsS0FFQ3FOLEtBQUssS0FBS0YsTUFBT0csSUFBS0Ms
U0FBd0IsT0FBZFIsS0FBQUEsUUFBQUEsSUFBQUEsRUFBQUEsS0FBQUEsS0FBQUEsRUFBQUEsS0FJ
aENNLEtBQUssV0FBV0YsTUFBT0csSUFBS0MsU0FBd0IsVUFBZFIsS0FBQUEsV0FBQUEsSUFBQUEs
RUFBQUEsS0FBQUEsS0FBQUEsRUFBQUEsS0FJdENNLEtBQUssY0FBY0YsTUFBT0csSUFBS0MsU0FB
d0IsYUFBZFIsS0FBQUEsZUFBQUEsRUFHakMsR0FDZi9RLEVBQUFBLFVBQVFtUixNQUFNLGtCQUFr
QkssUUFBU04sR0FBQUEscUJBQUFBLEdBckJyQjdILEdDRGxDb0ksR0FBYSxHQUNiQyxHQUFZLEdB
RUdDLEdBQUFBLFNBQUFBLEdBQUFBLFFBQUFBLEtBQUFBLEdBQUFBLEdBQUFBLEVBQUFBLENBQUFB
LEdBQUFBLEtBQUFBLEVBQUFBLEtBQUFBLEdBQUFBLEdBQUFBLFVBQUFBLE9BQUFBLEVBQUFBLE1B
QUFBLEdBQUFBLEVBQUFBLEVBQUFBLEVBQUFBLEVBQUFBLElBQUFBLEVBQUFBLEdBQUFBLFVBQUFB
LEVBQUFBLE9BQUFBLEdBQUFBLEVBQUFBLEVBQUFBLEtBQUFBLEVBQUFBLEtBQUFBLE1BQUFBLEdB
QUFBLE1BQUFBLE9BQUFBLEtBQUFBLEVBQ2pCQyxhQUFlLFdBQUEsR0FBQS9NLEdBQ3VCZ04sRUFB
S3RRLE1BQWpDdVEsRUFEV0MsRUFDWEQsT0FBUUUsRUFER0QsRUFDSEMsVUFBV3hDLEVBRFJ1QyxF
QUNRdkMsS0FDckJ5QyxFQUFNSixFQUFLbkksTUFBTXdJLFNBQVNqSyxNQUMxQmdLLElBQUFBLEVB
Q096QyxFQUFNeUMsR0FBQUEsRUFDUjNFLFVBQVc0RSxTQUFVRCxLQUFBQSxFQUdoQnpDLElBQUFB
LEVBSWxCMkMsV0FBYSxXQUFBLEdBQUF0TixHQUNjZ04sRUFBS3RRLE1BQXRCNlEsRUFEU0MsRUFD
VEQsT0FBUTVDLEVBREM2QyxFQUNEN0MsSUFBQUEsR0FDUEEsR0FBQUEsRUFDRmxDLFVBQVc0RSxT
QUFVMUMsRUFBS0wsU0FBQUEsRUFHbkNNLE9BQVMsU0FBQTVLLEdBQUFBLEdBQUFBLEdBQ29CZ04s
RUFBS3RRLE9BQUFBLEVBRHBCK1EsRUFDSkMsVUFESUQsRUFDTTlDLE1BQUFBLEVBRWRnRCxrQkFB
QUEsRUFHTkMsY0FBZ0IsU0FBQTVOLEdBQUFBLEdBQ1JBLEVBQUU2TixRQUFRakIsR0FBWSxDQUFB
LEdBQ2hCakMsR0FBU3FDLEVBQUt0USxNQUFkaU8sSUFBQUEsR0FDRGxDLFVBQVc0RSxTQUFVMUMs
RUFBS0wsUUFBQUEsRUFDMUI1TixNQUFNb1IsU0FBU25ELE9BRWYzSyxHQUFFNk4sUUFBUWhCLElB
QUFBLEVBQ1ZFLGdCQUFBQSxFQUliZ0IsY0FBZ0IsV0FBQXJKLEVBQ1BoSSxNQUFNeVEsVUFBVUgs
RUFBS3RRLE1BQU1pTyxPQUFBQSxFQUFBQSxFQUFBQSxFQUFBQSxFQUFBQSxHQUFBQSxNQUFBQSxH
QUFBQSxFQUFBQSxHQUFBQSxFQUFBQSxVQVdwQ3pELG1CQUFBQSxXQUFBQSxHQUNRN0osR0FBTzRD
LEtBQUtpRixNQUFRakYsS0FBS2lGLEtBQUs4SSxjQUFjLFFBQzVDM1EsSUFBTUEsRUFBSzRRLFNB
QUFBLEVBQUFBLFVBR25CM0osT0FBQUEsU0FBQUEsRUFBQUEsR0FBQUEsR0FBQUEsR0FBQUEsRUFB
U3FHLEtBQU9MLEVBQWtFNEQsRUFBbEU1RCxNQUFPRyxFQUEyRHlELEVBQTNEekQsVUFBa0MwRCxF
QUF5QmhDLEVBQXpCZ0MsUUFBYWQsRUFBWWUsRUFBWmYsUUFBQUEsT0FFOURsUyxHQUFBQSxNQUFJ
bVIsTUFBT0csSUFBS2hDLFVBQUFBLEVBQVcwRCxRQUFBQSxLQUFBQSxFQUFBQSxPQUNsQjdCLE1B
QU0sUUFBQW5OLEVBQUEsU0FBQW1OLE1BRUcsU0FBQXBNLEtBQ0QsV0FBQXNJLFFBQ0lpQyxFQUFB
QSxTQUNDeEssS0FBSzJLLFNBQUFBLEVBQUFBLFNBRVp5RCxXQUFZcE8sS0FBS3FOLFlBQUFBLEdB
QUFBLEVBQUFBLFVBQ2hCaEIsTUFBTSxVQUFVSyxRQUFTMU0sS0FBSzhOLGlCQUFBQSxHQUd0QzVT
LEVBQUEsU0FBQW1SLE1BQ1UsT0FBQTdOLE1BQ0M0TyxFQUFBQSxPQUNDcE4sS0FBSzhNLGFBQUFB
LFFBQ0o5TSxLQUFLa0ksVUFBVSxZQUFBbUcsVUFDYnJPLEtBQUsyTixrQkFBQUEsR0F4RUZwSixH
Q0doQytKLElBQUFBLElBQ0csV0FBQSxPQUFBLEdBQVFDLE9BQ0wsU0FBQTdELEdBQUFBLE9BQVNB
LEVBQUtGLFdBQUFBLFVBQ1gsU0FBQUUsR0FBQUEsTUFBUUEsR0FBS0YsV0NQNUJuRyxHQUFPbkos
RURVY3NULFNBQUFBLEdBQUFBLFFBQUFBLEtBQUFBLEVBQUFBLEtBQUFBLEVBQUFBLElBQUFBLEdB
QUFBLEVBQUFBLEtBRWJDLEVBQUFuSyxLQUFBdEUsTUFBQUEsT0FBQUEsR0FjSjBPLHFCQUF1QixT
QUFDM08sR0FBQUEsR0F4QlYsS0F5Qk5BLEVBQUU0TyxRQUFBQSxDQUFBQSxFQUNKakIsZ0JBQUFB
LElBT0VQLEdBQU1wTixFQUFFc0ksT0FBTzdKLE1BQU0yRSxNQUVyQmdLLEtBQUFBLEVBQ0t5QixN
QUFNeEUsUUFBUStDLEdBQUFBLEVBQ2QzRSxVQUFXcUcsUUFBUyxRQUFBM1AsRUFJakNxTCxVQUFZ
LFNBQUFySyxHQUFBQSxFQUVIME8sTUFBTXJFLFVBREdySyxFQUFNbUksT0FBT0UsVUFBQUEsRUFJ
L0JvQyxPQUFTLFNBQUFELEdBQUFBLEVBQ0FrRSxNQUFNakUsT0FBT0QsSUFBQUEsRUFHdEJJLFFB
QVUsU0FBQUosR0FBQUEsRUFDRGtFLE1BQU05RCxRQUFRSixJQUFBQSxFQUd2Qm9FLEtBQU8sU0FB
QXBFLEdBQUFBLEVBQ0VsQyxVQUFXMEYsUUFBU3hELEVBQUtxRSxNQUFBQSxFQUdsQy9ELEtBQU8s
U0FBQ0MsRUFBWStELEdBQUFBLEVBQ1hKLE1BQU01RCxLQUFLQyxFQUFZK0QsR0FBQUEsRUFDdkJ4
RyxVQUFXMEYsUUFBUyxRQUFBaFAsRUFHN0IrUCxPQUFTLFdBQUEvUCxFQUNBc0osVUFBVzBGLFFB
QVMsUUFBQWhQLEVBRzdCZ00sZUFBaUIsV0FBQWhNLEVBQ1IwUCxNQUFNMUQsa0JBQUFBLEVBekRO
MEQsTUFBUSxHQUFJL0UsSUFBVSxlQUFnQixXQUFBLE1BQU1rRCxHQUFLdkUsZUFBQUEsaUJBQ3JD
LGFBQWN1RSxFQUFLbUMsWUFBWTlGLEtBQWpCMkQsSUFBQUEsRUFDMUJtQyxjQUFBQSxFQUFBQSxN
QUFBQSxHQUFBQSxFQUFBQSxHQUFBQSxFQUFBQSxVQUdUQSxZQUFBQSxXQUFBQSxHQUNRakQsS0FB
b0JrRCxTQUFTQyxNQUFRLElBQXhCbFQsSUFBNEIrTCxNQUFNLEtBQUtqTSxLQUNuRHNTLElBQVFy
QyxLQUFBQSxFQUNJLE9BQUFqTSxLQUVad0ksVUFBV3lELFdBQUFBLEtBQUFBLEVBQUFBLFVBa0Rw
QjVILE9BQUFBLFNBQUFBLEVBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLEtBQUFBLEVBQUFBLEVBQWM0
SCxXQUFBQSxFQUE0Q2hRLFNBQUFvVCxFQUEvQkMsVUFBK0JELEVBQXBCUixFQUFvQlYsRUFBcEJV
LFFBQVNYLEVBQVdDLEVBQVhELE9BQUFBLEdBQUFBLEVBQUFBLElBQ3JDbkUsR0FBVS9KLEtBQUs0
TyxNQUFmN0UsTUFDRndGLEVBQWF4RixFQUFNZ0IsT0FBUXVELEdBQVFyQyxJQUNuQ3VELEVBQWtC
ekYsRUFBTTBGLE9BQVEsU0FBQ3pOLEVBQUcwSSxHQUFBQSxNQUFTMUksSUFBSzBJLEVBQUtGLFVB
QVksRUFBSSxJQUFJLEdBQzNFMkIsRUFBaUJwQyxFQUFNbk8sT0FBUzRULENBQUFBLE9BR2hDdFUs
R0FBQUEsTUFBQUEsS0FBQUEsRUFBQUEsVUFDWW1SLE1BQU0sVUFBQW5OLEVBQUEsS0FBQSxLQUFB
LFNBQUFBLEVBQUEsU0FBQW1OLE1BR0EsV0FBQXFELFlBQ00seUJBQUFsUixNQUNMcVEsRUFBQUEs
VUFDSTdPLEtBQUswTyxxQkFBQUEsUUFDUHhHLEVBQVVsSSxLQUFNLFdBQUEyUCxXQUFBLEtBQ2Rw
RyxFQUlYM04sT0FDSlYsRUFBQUEsV0FBU21SLE1BQU0sUUFBQW5OLEVBQUEsU0FBQW1OLE1BRUQs
YUFBQXBNLEtBQ0QsV0FBQTJQLFNBQ0s1UCxLQUFLdUssVUFBQUEsUUFDYyxJQUFwQmlGLElBQUFB
LEVBQUFBLE1BRVRuRCxNQUFNLGFBQUFqTSxFQUNPcUssSUFBSyxTQUFBQyxHQUFBQSxNQUNkeFAs
R0FBQzJSLElBQUFBLEtBQ1NuQyxFQUFBQSxTQUNJbUYsRUFBS2xGLE9BQUFBLFVBQ0prRixFQUFL
L0UsUUFBQUEsT0FDUitFLEVBQUtmLEtBQUFBLFFBQ0paLElBQVl4RCxFQUFLcUUsR0FBQUEsT0FD
bEJjLEVBQUs3RSxLQUFBQSxTQUNINkUsRUFBS1osYUFLL0IsS0FBQS9NLEdBRWtCaUssRUFDbEJq
UixFQUFDOFEsSUFBQUEsTUFDVXdELEVBQUFBLGVBQ1NyRCxFQUFBQSxXQUNKRixFQUFBQSxpQkFD
TWpNLEtBQUtrTCxpQkFFM0IsT0FBQXZCLEdBbEhhcEYsR0NWMUIsTUFBU3hHLFNBQVNnUSxjQUFj
IiwiZmlsZSI6ImFwcC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBWaXJ0dWFsIERPTSBOb2Rl
ICovXG5mdW5jdGlvbiBWTm9kZSgpIHt9XG5cbi8qKiBHbG9iYWwgb3B0aW9uc1xuICpcdEBwdWJs
aWNcbiAqXHRAbmFtZXNwYWNlIG9wdGlvbnMge09iamVjdH1cbiAqL1xudmFyIG9wdGlvbnMgPSB7
XG5cblx0LyoqIElmIGB0cnVlYCwgYHByb3BgIGNoYW5nZXMgdHJpZ2dlciBzeW5jaHJvbm91cyBj
b21wb25lbnQgdXBkYXRlcy5cbiAgKlx0QG5hbWUgc3luY0NvbXBvbmVudFVwZGF0ZXNcbiAgKlx0
QHR5cGUgQm9vbGVhblxuICAqXHRAZGVmYXVsdCB0cnVlXG4gICovXG5cdC8vc3luY0NvbXBvbmVu
dFVwZGF0ZXM6IHRydWUsXG5cblx0LyoqIFByb2Nlc3NlcyBhbGwgY3JlYXRlZCBWTm9kZXMuXG4g
ICpcdEBwYXJhbSB7Vk5vZGV9IHZub2RlXHRBIG5ld2x5LWNyZWF0ZWQgVk5vZGUgdG8gbm9ybWFs
aXplL3Byb2Nlc3NcbiAgKi9cblx0Ly92bm9kZSh2bm9kZSkgeyB9XG5cblx0LyoqIEhvb2sgaW52
b2tlZCBhZnRlciBhIGNvbXBvbmVudCBpcyBtb3VudGVkLiAqL1xuXHQvLyBhZnRlck1vdW50KGNv
bXBvbmVudCkgeyB9XG5cblx0LyoqIEhvb2sgaW52b2tlZCBhZnRlciB0aGUgRE9NIGlzIHVwZGF0
ZWQgd2l0aCBhIGNvbXBvbmVudCdzIGxhdGVzdCByZW5kZXIuICovXG5cdC8vIGFmdGVyVXBkYXRl
KGNvbXBvbmVudCkgeyB9XG5cblx0LyoqIEhvb2sgaW52b2tlZCBpbW1lZGlhdGVseSBiZWZvcmUg
YSBjb21wb25lbnQgaXMgdW5tb3VudGVkLiAqL1xuXHQvLyBiZWZvcmVVbm1vdW50KGNvbXBvbmVu
dCkgeyB9XG59O1xuXG52YXIgc3RhY2sgPSBbXTtcblxudmFyIEVNUFRZX0NISUxEUkVOID0gW107
XG5cbi8qKiBKU1gvaHlwZXJzY3JpcHQgcmV2aXZlclxuKlx0QmVuY2htYXJrczogaHR0cHM6Ly9l
c2JlbmNoLmNvbS9iZW5jaC81N2VlOGY4ZTMzMGFiMDk5MDBhMWExYTBcbiAqXHRAc2VlIGh0dHA6
Ly9qYXNvbmZvcm1hdC5jb20vd3RmLWlzLWpzeFxuICpcdEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24g
aChub2RlTmFtZSwgYXR0cmlidXRlcykge1xuXHR2YXIgY2hpbGRyZW4gPSBFTVBUWV9DSElMRFJF
Tixcblx0ICAgIGxhc3RTaW1wbGUsXG5cdCAgICBjaGlsZCxcblx0ICAgIHNpbXBsZSxcblx0ICAg
IGk7XG5cdGZvciAoaSA9IGFyZ3VtZW50cy5sZW5ndGg7IGktLSA+IDI7KSB7XG5cdFx0c3RhY2su
cHVzaChhcmd1bWVudHNbaV0pO1xuXHR9XG5cdGlmIChhdHRyaWJ1dGVzICYmIGF0dHJpYnV0ZXMu
Y2hpbGRyZW4gIT0gbnVsbCkge1xuXHRcdGlmICghc3RhY2subGVuZ3RoKSBzdGFjay5wdXNoKGF0
dHJpYnV0ZXMuY2hpbGRyZW4pO1xuXHRcdGRlbGV0ZSBhdHRyaWJ1dGVzLmNoaWxkcmVuO1xuXHR9
XG5cdHdoaWxlIChzdGFjay5sZW5ndGgpIHtcblx0XHRpZiAoKGNoaWxkID0gc3RhY2sucG9wKCkp
ICYmIGNoaWxkLnBvcCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRmb3IgKGkgPSBjaGlsZC5sZW5n
dGg7IGktLTspIHtcblx0XHRcdFx0c3RhY2sucHVzaChjaGlsZFtpXSk7XG5cdFx0XHR9XG5cdFx0
fSBlbHNlIHtcblx0XHRcdGlmICh0eXBlb2YgY2hpbGQgPT09ICdib29sZWFuJykgY2hpbGQgPSBu
dWxsO1xuXG5cdFx0XHRpZiAoc2ltcGxlID0gdHlwZW9mIG5vZGVOYW1lICE9PSAnZnVuY3Rpb24n
KSB7XG5cdFx0XHRcdGlmIChjaGlsZCA9PSBudWxsKSBjaGlsZCA9ICcnO2Vsc2UgaWYgKHR5cGVv
ZiBjaGlsZCA9PT0gJ251bWJlcicpIGNoaWxkID0gU3RyaW5nKGNoaWxkKTtlbHNlIGlmICh0eXBl
b2YgY2hpbGQgIT09ICdzdHJpbmcnKSBzaW1wbGUgPSBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0
aWYgKHNpbXBsZSAmJiBsYXN0U2ltcGxlKSB7XG5cdFx0XHRcdGNoaWxkcmVuW2NoaWxkcmVuLmxl
bmd0aCAtIDFdICs9IGNoaWxkO1xuXHRcdFx0fSBlbHNlIGlmIChjaGlsZHJlbiA9PT0gRU1QVFlf
Q0hJTERSRU4pIHtcblx0XHRcdFx0Y2hpbGRyZW4gPSBbY2hpbGRdO1xuXHRcdFx0fSBlbHNlIHtc
blx0XHRcdFx0Y2hpbGRyZW4ucHVzaChjaGlsZCk7XG5cdFx0XHR9XG5cblx0XHRcdGxhc3RTaW1w
bGUgPSBzaW1wbGU7XG5cdFx0fVxuXHR9XG5cblx0dmFyIHAgPSBuZXcgVk5vZGUoKTtcblx0cC5u
b2RlTmFtZSA9IG5vZGVOYW1lO1xuXHRwLmNoaWxkcmVuID0gY2hpbGRyZW47XG5cdHAuYXR0cmli
dXRlcyA9IGF0dHJpYnV0ZXMgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGF0dHJpYnV0ZXM7XG5cdHAu
a2V5ID0gYXR0cmlidXRlcyA9PSBudWxsID8gdW5kZWZpbmVkIDogYXR0cmlidXRlcy5rZXk7XG5c
blx0Ly8gaWYgYSBcInZub2RlIGhvb2tcIiBpcyBkZWZpbmVkLCBwYXNzIGV2ZXJ5IGNyZWF0ZWQg
Vk5vZGUgdG8gaXRcblx0aWYgKG9wdGlvbnMudm5vZGUgIT09IHVuZGVmaW5lZCkgb3B0aW9ucy52
bm9kZShwKTtcblxuXHRyZXR1cm4gcDtcbn1cblxuLyoqIENvcHkgb3duLXByb3BlcnRpZXMgZnJv
bSBgcHJvcHNgIG9udG8gYG9iamAuXG4gKlx0QHJldHVybnMgb2JqXG4gKlx0QHByaXZhdGVcbiAq
L1xuZnVuY3Rpb24gZXh0ZW5kKG9iaiwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSBpbiBwcm9wcykg
e1xuICAgIG9ialtpXSA9IHByb3BzW2ldO1xuICB9cmV0dXJuIG9iajtcbn1cblxuLyoqIENhbGwg
YSBmdW5jdGlvbiBhc3luY2hyb25vdXNseSwgYXMgc29vbiBhcyBwb3NzaWJsZS5cbiAqXHRAcGFy
YW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICovXG52YXIgZGVmZXIgPSB0eXBlb2YgUHJvbWlzZSA9
PSAnZnVuY3Rpb24nID8gUHJvbWlzZS5yZXNvbHZlKCkudGhlbi5iaW5kKFByb21pc2UucmVzb2x2
ZSgpKSA6IHNldFRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGNsb25lRWxlbWVudCh2bm9kZSwgcHJvcHMp
IHtcblx0cmV0dXJuIGgodm5vZGUubm9kZU5hbWUsIGV4dGVuZChleHRlbmQoe30sIHZub2RlLmF0
dHJpYnV0ZXMpLCBwcm9wcyksIGFyZ3VtZW50cy5sZW5ndGggPiAyID8gW10uc2xpY2UuY2FsbChh
cmd1bWVudHMsIDIpIDogdm5vZGUuY2hpbGRyZW4pO1xufVxuXG4vLyBET00gcHJvcGVydGllcyB0
aGF0IHNob3VsZCBOT1QgaGF2ZSBcInB4XCIgYWRkZWQgd2hlbiBudW1lcmljXG52YXIgSVNfTk9O
X0RJTUVOU0lPTkFMID0gL2FjaXR8ZXgoPzpzfGd8bnxwfCQpfHJwaHxvd3N8bW5jfG50d3xpbmVb
Y2hdfHpvb3xeb3JkL2k7XG5cbi8qKiBNYW5hZ2VkIHF1ZXVlIG9mIGRpcnR5IGNvbXBvbmVudHMg
dG8gYmUgcmUtcmVuZGVyZWQgKi9cblxudmFyIGl0ZW1zID0gW107XG5cbmZ1bmN0aW9uIGVucXVl
dWVSZW5kZXIoY29tcG9uZW50KSB7XG5cdGlmICghY29tcG9uZW50Ll9kaXJ0eSAmJiAoY29tcG9u
ZW50Ll9kaXJ0eSA9IHRydWUpICYmIGl0ZW1zLnB1c2goY29tcG9uZW50KSA9PSAxKSB7XG5cdFx0
KG9wdGlvbnMuZGVib3VuY2VSZW5kZXJpbmcgfHwgZGVmZXIpKHJlcmVuZGVyKTtcblx0fVxufVxu
XG5mdW5jdGlvbiByZXJlbmRlcigpIHtcblx0dmFyIHAsXG5cdCAgICBsaXN0ID0gaXRlbXM7XG5c
dGl0ZW1zID0gW107XG5cdHdoaWxlIChwID0gbGlzdC5wb3AoKSkge1xuXHRcdGlmIChwLl9kaXJ0
eSkgcmVuZGVyQ29tcG9uZW50KHApO1xuXHR9XG59XG5cbi8qKiBDaGVjayBpZiB0d28gbm9kZXMg
YXJlIGVxdWl2YWxlbnQuXG4gKlx0QHBhcmFtIHtFbGVtZW50fSBub2RlXG4gKlx0QHBhcmFtIHtW
Tm9kZX0gdm5vZGVcbiAqXHRAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpc1NhbWVOb2RlVHlwZShu
b2RlLCB2bm9kZSwgaHlkcmF0aW5nKSB7XG5cdGlmICh0eXBlb2Ygdm5vZGUgPT09ICdzdHJpbmcn
IHx8IHR5cGVvZiB2bm9kZSA9PT0gJ251bWJlcicpIHtcblx0XHRyZXR1cm4gbm9kZS5zcGxpdFRl
eHQgIT09IHVuZGVmaW5lZDtcblx0fVxuXHRpZiAodHlwZW9mIHZub2RlLm5vZGVOYW1lID09PSAn
c3RyaW5nJykge1xuXHRcdHJldHVybiAhbm9kZS5fY29tcG9uZW50Q29uc3RydWN0b3IgJiYgaXNO
YW1lZE5vZGUobm9kZSwgdm5vZGUubm9kZU5hbWUpO1xuXHR9XG5cdHJldHVybiBoeWRyYXRpbmcg
fHwgbm9kZS5fY29tcG9uZW50Q29uc3RydWN0b3IgPT09IHZub2RlLm5vZGVOYW1lO1xufVxuXG4v
KiogQ2hlY2sgaWYgYW4gRWxlbWVudCBoYXMgYSBnaXZlbiBub3JtYWxpemVkIG5hbWUuXG4qXHRA
cGFyYW0ge0VsZW1lbnR9IG5vZGVcbipcdEBwYXJhbSB7U3RyaW5nfSBub2RlTmFtZVxuICovXG5m
dW5jdGlvbiBpc05hbWVkTm9kZShub2RlLCBub2RlTmFtZSkge1xuXHRyZXR1cm4gbm9kZS5ub3Jt
YWxpemVkTm9kZU5hbWUgPT09IG5vZGVOYW1lIHx8IG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2Uo
KSA9PT0gbm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbn1cblxuLyoqXG4gKiBSZWNvbnN0cnVjdCBD
b21wb25lbnQtc3R5bGUgYHByb3BzYCBmcm9tIGEgVk5vZGUuXG4gKiBFbnN1cmVzIGRlZmF1bHQv
ZmFsbGJhY2sgdmFsdWVzIGZyb20gYGRlZmF1bHRQcm9wc2A6XG4gKiBPd24tcHJvcGVydGllcyBv
ZiBgZGVmYXVsdFByb3BzYCBub3QgcHJlc2VudCBpbiBgdm5vZGUuYXR0cmlidXRlc2AgYXJlIGFk
ZGVkLlxuICogQHBhcmFtIHtWTm9kZX0gdm5vZGVcbiAqIEByZXR1cm5zIHtPYmplY3R9IHByb3Bz
XG4gKi9cbmZ1bmN0aW9uIGdldE5vZGVQcm9wcyh2bm9kZSkge1xuXHR2YXIgcHJvcHMgPSBleHRl
bmQoe30sIHZub2RlLmF0dHJpYnV0ZXMpO1xuXHRwcm9wcy5jaGlsZHJlbiA9IHZub2RlLmNoaWxk
cmVuO1xuXG5cdHZhciBkZWZhdWx0UHJvcHMgPSB2bm9kZS5ub2RlTmFtZS5kZWZhdWx0UHJvcHM7
XG5cdGlmIChkZWZhdWx0UHJvcHMgIT09IHVuZGVmaW5lZCkge1xuXHRcdGZvciAodmFyIGkgaW4g
ZGVmYXVsdFByb3BzKSB7XG5cdFx0XHRpZiAocHJvcHNbaV0gPT09IHVuZGVmaW5lZCkge1xuXHRc
dFx0XHRwcm9wc1tpXSA9IGRlZmF1bHRQcm9wc1tpXTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxu
XHRyZXR1cm4gcHJvcHM7XG59XG5cbi8qKiBDcmVhdGUgYW4gZWxlbWVudCB3aXRoIHRoZSBnaXZl
biBub2RlTmFtZS5cbiAqXHRAcGFyYW0ge1N0cmluZ30gbm9kZU5hbWVcbiAqXHRAcGFyYW0ge0Jv
b2xlYW59IFtpc1N2Zz1mYWxzZV1cdElmIGB0cnVlYCwgY3JlYXRlcyBhbiBlbGVtZW50IHdpdGhp
biB0aGUgU1ZHIG5hbWVzcGFjZS5cbiAqXHRAcmV0dXJucyB7RWxlbWVudH0gbm9kZVxuICovXG5m
dW5jdGlvbiBjcmVhdGVOb2RlKG5vZGVOYW1lLCBpc1N2Zykge1xuXHR2YXIgbm9kZSA9IGlzU3Zn
ID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycs
IG5vZGVOYW1lKSA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobm9kZU5hbWUpO1xuXHRub2RlLm5v
cm1hbGl6ZWROb2RlTmFtZSA9IG5vZGVOYW1lO1xuXHRyZXR1cm4gbm9kZTtcbn1cblxuLyoqIFJl
bW92ZSBhIGNoaWxkIG5vZGUgZnJvbSBpdHMgcGFyZW50IGlmIGF0dGFjaGVkLlxuICpcdEBwYXJh
bSB7RWxlbWVudH0gbm9kZVx0XHRUaGUgbm9kZSB0byByZW1vdmVcbiAqL1xuZnVuY3Rpb24gcmVt
b3ZlTm9kZShub2RlKSB7XG5cdHZhciBwYXJlbnROb2RlID0gbm9kZS5wYXJlbnROb2RlO1xuXHRp
ZiAocGFyZW50Tm9kZSkgcGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlKTtcbn1cblxuLyoqIFNl
dCBhIG5hbWVkIGF0dHJpYnV0ZSBvbiB0aGUgZ2l2ZW4gTm9kZSwgd2l0aCBzcGVjaWFsIGJlaGF2
aW9yIGZvciBzb21lIG5hbWVzIGFuZCBldmVudCBoYW5kbGVycy5cbiAqXHRJZiBgdmFsdWVgIGlz
IGBudWxsYCwgdGhlIGF0dHJpYnV0ZS9oYW5kbGVyIHdpbGwgYmUgcmVtb3ZlZC5cbiAqXHRAcGFy
YW0ge0VsZW1lbnR9IG5vZGVcdEFuIGVsZW1lbnQgdG8gbXV0YXRlXG4gKlx0QHBhcmFtIHtzdHJp
bmd9IG5hbWVcdFRoZSBuYW1lL2tleSB0byBzZXQsIHN1Y2ggYXMgYW4gZXZlbnQgb3IgYXR0cmli
dXRlIG5hbWVcbiAqXHRAcGFyYW0ge2FueX0gb2xkXHRUaGUgbGFzdCB2YWx1ZSB0aGF0IHdhcyBz
ZXQgZm9yIHRoaXMgbmFtZS9ub2RlIHBhaXJcbiAqXHRAcGFyYW0ge2FueX0gdmFsdWVcdEFuIGF0
dHJpYnV0ZSB2YWx1ZSwgc3VjaCBhcyBhIGZ1bmN0aW9uIHRvIGJlIHVzZWQgYXMgYW4gZXZlbnQg
aGFuZGxlclxuICpcdEBwYXJhbSB7Qm9vbGVhbn0gaXNTdmdcdEFyZSB3ZSBjdXJyZW50bHkgZGlm
ZmluZyBpbnNpZGUgYW4gc3ZnP1xuICpcdEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNldEFjY2Vz
c29yKG5vZGUsIG5hbWUsIG9sZCwgdmFsdWUsIGlzU3ZnKSB7XG5cdGlmIChuYW1lID09PSAnY2xh
c3NOYW1lJykgbmFtZSA9ICdjbGFzcyc7XG5cblx0aWYgKG5hbWUgPT09ICdrZXknKSB7XG5cdFx0
Ly8gaWdub3JlXG5cdH0gZWxzZSBpZiAobmFtZSA9PT0gJ3JlZicpIHtcblx0XHRpZiAob2xkKSBv
bGQobnVsbCk7XG5cdFx0aWYgKHZhbHVlKSB2YWx1ZShub2RlKTtcblx0fSBlbHNlIGlmIChuYW1l
ID09PSAnY2xhc3MnICYmICFpc1N2Zykge1xuXHRcdG5vZGUuY2xhc3NOYW1lID0gdmFsdWUgfHwg
Jyc7XG5cdH0gZWxzZSBpZiAobmFtZSA9PT0gJ3N0eWxlJykge1xuXHRcdGlmICghdmFsdWUgfHwg
dHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB0eXBlb2Ygb2xkID09PSAnc3RyaW5nJykge1xu
XHRcdFx0bm9kZS5zdHlsZS5jc3NUZXh0ID0gdmFsdWUgfHwgJyc7XG5cdFx0fVxuXHRcdGlmICh2
YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRpZiAodHlwZW9mIG9s
ZCAhPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0Zm9yICh2YXIgaSBpbiBvbGQpIHtcblx0XHRcdFx0
XHRpZiAoIShpIGluIHZhbHVlKSkgbm9kZS5zdHlsZVtpXSA9ICcnO1xuXHRcdFx0XHR9XG5cdFx0
XHR9XG5cdFx0XHRmb3IgKHZhciBpIGluIHZhbHVlKSB7XG5cdFx0XHRcdG5vZGUuc3R5bGVbaV0g
PSB0eXBlb2YgdmFsdWVbaV0gPT09ICdudW1iZXInICYmIElTX05PTl9ESU1FTlNJT05BTC50ZXN0
KGkpID09PSBmYWxzZSA/IHZhbHVlW2ldICsgJ3B4JyA6IHZhbHVlW2ldO1xuXHRcdFx0fVxuXHRc
dH1cblx0fSBlbHNlIGlmIChuYW1lID09PSAnZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwnKSB7XG5c
dFx0aWYgKHZhbHVlKSBub2RlLmlubmVySFRNTCA9IHZhbHVlLl9faHRtbCB8fCAnJztcblx0fSBl
bHNlIGlmIChuYW1lWzBdID09ICdvJyAmJiBuYW1lWzFdID09ICduJykge1xuXHRcdHZhciB1c2VD
YXB0dXJlID0gbmFtZSAhPT0gKG5hbWUgPSBuYW1lLnJlcGxhY2UoL0NhcHR1cmUkLywgJycpKTtc
blx0XHRuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpLnN1YnN0cmluZygyKTtcblx0XHRpZiAodmFs
dWUpIHtcblx0XHRcdGlmICghb2xkKSBub2RlLmFkZEV2ZW50TGlzdGVuZXIobmFtZSwgZXZlbnRQ
cm94eSwgdXNlQ2FwdHVyZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5vZGUucmVtb3ZlRXZlbnRM
aXN0ZW5lcihuYW1lLCBldmVudFByb3h5LCB1c2VDYXB0dXJlKTtcblx0XHR9XG5cdFx0KG5vZGUu
X2xpc3RlbmVycyB8fCAobm9kZS5fbGlzdGVuZXJzID0ge30pKVtuYW1lXSA9IHZhbHVlO1xuXHR9
IGVsc2UgaWYgKG5hbWUgIT09ICdsaXN0JyAmJiBuYW1lICE9PSAndHlwZScgJiYgIWlzU3ZnICYm
IG5hbWUgaW4gbm9kZSkge1xuXHRcdHNldFByb3BlcnR5KG5vZGUsIG5hbWUsIHZhbHVlID09IG51
bGwgPyAnJyA6IHZhbHVlKTtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gZmFs
c2UpIG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuXHR9IGVsc2Uge1xuXHRcdHZhciBucyA9
IGlzU3ZnICYmIG5hbWUgIT09IChuYW1lID0gbmFtZS5yZXBsYWNlKC9eeGxpbmtcXDo/LywgJycp
KTtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gZmFsc2UpIHtcblx0XHRcdGlm
IChucykgbm9kZS5yZW1vdmVBdHRyaWJ1dGVOUygnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlu
aycsIG5hbWUudG9Mb3dlckNhc2UoKSk7ZWxzZSBub2RlLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtc
blx0XHR9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0aWYg
KG5zKSBub2RlLnNldEF0dHJpYnV0ZU5TKCdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJywg
bmFtZS50b0xvd2VyQ2FzZSgpLCB2YWx1ZSk7ZWxzZSBub2RlLnNldEF0dHJpYnV0ZShuYW1lLCB2
YWx1ZSk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKiBBdHRlbXB0IHRvIHNldCBhIERPTSBwcm9wZXJ0
eSB0byB0aGUgZ2l2ZW4gdmFsdWUuXG4gKlx0SUUgJiBGRiB0aHJvdyBmb3IgY2VydGFpbiBwcm9w
ZXJ0eS12YWx1ZSBjb21iaW5hdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIHNldFByb3BlcnR5KG5vZGUs
IG5hbWUsIHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0bm9kZVtuYW1lXSA9IHZhbHVlO1xuXHR9IGNh
dGNoIChlKSB7fVxufVxuXG4vKiogUHJveHkgYW4gZXZlbnQgdG8gaG9va2VkIGV2ZW50IGhhbmRs
ZXJzXG4gKlx0QHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZXZlbnRQcm94eShlKSB7XG5cdHJldHVy
biB0aGlzLl9saXN0ZW5lcnNbZS50eXBlXShvcHRpb25zLmV2ZW50ICYmIG9wdGlvbnMuZXZlbnQo
ZSkgfHwgZSk7XG59XG5cbi8qKiBRdWV1ZSBvZiBjb21wb25lbnRzIHRoYXQgaGF2ZSBiZWVuIG1v
dW50ZWQgYW5kIGFyZSBhd2FpdGluZyBjb21wb25lbnREaWRNb3VudCAqL1xudmFyIG1vdW50cyA9
IFtdO1xuXG4vKiogRGlmZiByZWN1cnNpb24gY291bnQsIHVzZWQgdG8gdHJhY2sgdGhlIGVuZCBv
ZiB0aGUgZGlmZiBjeWNsZS4gKi9cbnZhciBkaWZmTGV2ZWwgPSAwO1xuXG4vKiogR2xvYmFsIGZs
YWcgaW5kaWNhdGluZyBpZiB0aGUgZGlmZiBpcyBjdXJyZW50bHkgd2l0aGluIGFuIFNWRyAqL1xu
dmFyIGlzU3ZnTW9kZSA9IGZhbHNlO1xuXG4vKiogR2xvYmFsIGZsYWcgaW5kaWNhdGluZyBpZiB0
aGUgZGlmZiBpcyBwZXJmb3JtaW5nIGh5ZHJhdGlvbiAqL1xudmFyIGh5ZHJhdGluZyA9IGZhbHNl
O1xuXG4vKiogSW52b2tlIHF1ZXVlZCBjb21wb25lbnREaWRNb3VudCBsaWZlY3ljbGUgbWV0aG9k
cyAqL1xuZnVuY3Rpb24gZmx1c2hNb3VudHMoKSB7XG5cdHZhciBjO1xuXHR3aGlsZSAoYyA9IG1v
dW50cy5wb3AoKSkge1xuXHRcdGlmIChvcHRpb25zLmFmdGVyTW91bnQpIG9wdGlvbnMuYWZ0ZXJN
b3VudChjKTtcblx0XHRpZiAoYy5jb21wb25lbnREaWRNb3VudCkgYy5jb21wb25lbnREaWRNb3Vu
dCgpO1xuXHR9XG59XG5cbi8qKiBBcHBseSBkaWZmZXJlbmNlcyBpbiBhIGdpdmVuIHZub2RlIChh
bmQgaXQncyBkZWVwIGNoaWxkcmVuKSB0byBhIHJlYWwgRE9NIE5vZGUuXG4gKlx0QHBhcmFtIHtF
bGVtZW50fSBbZG9tPW51bGxdXHRcdEEgRE9NIG5vZGUgdG8gbXV0YXRlIGludG8gdGhlIHNoYXBl
IG9mIHRoZSBgdm5vZGVgXG4gKlx0QHBhcmFtIHtWTm9kZX0gdm5vZGVcdFx0XHRBIFZOb2RlICh3
aXRoIGRlc2NlbmRhbnRzIGZvcm1pbmcgYSB0cmVlKSByZXByZXNlbnRpbmcgdGhlIGRlc2lyZWQg
RE9NIHN0cnVjdHVyZVxuICpcdEByZXR1cm5zIHtFbGVtZW50fSBkb21cdFx0XHRUaGUgY3JlYXRl
ZC9tdXRhdGVkIGVsZW1lbnRcbiAqXHRAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkaWZmKGRvbSwg
dm5vZGUsIGNvbnRleHQsIG1vdW50QWxsLCBwYXJlbnQsIGNvbXBvbmVudFJvb3QpIHtcblx0Ly8g
ZGlmZkxldmVsIGhhdmluZyBiZWVuIDAgaGVyZSBpbmRpY2F0ZXMgaW5pdGlhbCBlbnRyeSBpbnRv
IHRoZSBkaWZmIChub3QgYSBzdWJkaWZmKVxuXHRpZiAoIWRpZmZMZXZlbCsrKSB7XG5cdFx0Ly8g
d2hlbiBmaXJzdCBzdGFydGluZyB0aGUgZGlmZiwgY2hlY2sgaWYgd2UncmUgZGlmZmluZyBhbiBT
Vkcgb3Igd2l0aGluIGFuIFNWR1xuXHRcdGlzU3ZnTW9kZSA9IHBhcmVudCAhPSBudWxsICYmIHBh
cmVudC5vd25lclNWR0VsZW1lbnQgIT09IHVuZGVmaW5lZDtcblxuXHRcdC8vIGh5ZHJhdGlvbiBp
cyBpbmRpY2F0ZWQgYnkgdGhlIGV4aXN0aW5nIGVsZW1lbnQgdG8gYmUgZGlmZmVkIG5vdCBoYXZp
bmcgYSBwcm9wIGNhY2hlXG5cdFx0aHlkcmF0aW5nID0gZG9tICE9IG51bGwgJiYgISgnX19wcmVh
Y3RhdHRyXycgaW4gZG9tKTtcblx0fVxuXG5cdHZhciByZXQgPSBpZGlmZihkb20sIHZub2RlLCBj
b250ZXh0LCBtb3VudEFsbCwgY29tcG9uZW50Um9vdCk7XG5cblx0Ly8gYXBwZW5kIHRoZSBlbGVt
ZW50IGlmIGl0cyBhIG5ldyBwYXJlbnRcblx0aWYgKHBhcmVudCAmJiByZXQucGFyZW50Tm9kZSAh
PT0gcGFyZW50KSBwYXJlbnQuYXBwZW5kQ2hpbGQocmV0KTtcblxuXHQvLyBkaWZmTGV2ZWwgYmVp
bmcgcmVkdWNlZCB0byAwIG1lYW5zIHdlJ3JlIGV4aXRpbmcgdGhlIGRpZmZcblx0aWYgKCEgLS1k
aWZmTGV2ZWwpIHtcblx0XHRoeWRyYXRpbmcgPSBmYWxzZTtcblx0XHQvLyBpbnZva2UgcXVldWVk
IGNvbXBvbmVudERpZE1vdW50IGxpZmVjeWNsZSBtZXRob2RzXG5cdFx0aWYgKCFjb21wb25lbnRS
b290KSBmbHVzaE1vdW50cygpO1xuXHR9XG5cblx0cmV0dXJuIHJldDtcbn1cblxuLyoqIEludGVy
bmFscyBvZiBgZGlmZigpYCwgc2VwYXJhdGVkIHRvIGFsbG93IGJ5cGFzc2luZyBkaWZmTGV2ZWwg
LyBtb3VudCBmbHVzaGluZy4gKi9cbmZ1bmN0aW9uIGlkaWZmKGRvbSwgdm5vZGUsIGNvbnRleHQs
IG1vdW50QWxsLCBjb21wb25lbnRSb290KSB7XG5cdHZhciBvdXQgPSBkb20sXG5cdCAgICBwcmV2
U3ZnTW9kZSA9IGlzU3ZnTW9kZTtcblxuXHQvLyBlbXB0eSB2YWx1ZXMgKG51bGwsIHVuZGVmaW5l
ZCwgYm9vbGVhbnMpIHJlbmRlciBhcyBlbXB0eSBUZXh0IG5vZGVzXG5cdGlmICh2bm9kZSA9PSBu
dWxsIHx8IHR5cGVvZiB2bm9kZSA9PT0gJ2Jvb2xlYW4nKSB2bm9kZSA9ICcnO1xuXG5cdC8vIEZh
c3QgY2FzZTogU3RyaW5ncyAmIE51bWJlcnMgY3JlYXRlL3VwZGF0ZSBUZXh0IG5vZGVzLlxuXHRp
ZiAodHlwZW9mIHZub2RlID09PSAnc3RyaW5nJyB8fCB0eXBlb2Ygdm5vZGUgPT09ICdudW1iZXIn
KSB7XG5cblx0XHQvLyB1cGRhdGUgaWYgaXQncyBhbHJlYWR5IGEgVGV4dCBub2RlOlxuXHRcdGlm
IChkb20gJiYgZG9tLnNwbGl0VGV4dCAhPT0gdW5kZWZpbmVkICYmIGRvbS5wYXJlbnROb2RlICYm
ICghZG9tLl9jb21wb25lbnQgfHwgY29tcG9uZW50Um9vdCkpIHtcblx0XHRcdC8qIGlzdGFuYnVs
IGlnbm9yZSBpZiAqLyAvKiBCcm93c2VyIHF1aXJrIHRoYXQgY2FuJ3QgYmUgY292ZXJlZDogaHR0
cHM6Ly9naXRodWIuY29tL2RldmVsb3BpdC9wcmVhY3QvY29tbWl0L2ZkNGYyMWY1YzQ1ZGZkNzUx
NTFiZDI3YjRjMjE3ZDgwMDNhYTVlYjkgKi9cblx0XHRcdGlmIChkb20ubm9kZVZhbHVlICE9IHZu
b2RlKSB7XG5cdFx0XHRcdGRvbS5ub2RlVmFsdWUgPSB2bm9kZTtcblx0XHRcdH1cblx0XHR9IGVs
c2Uge1xuXHRcdFx0Ly8gaXQgd2Fzbid0IGEgVGV4dCBub2RlOiByZXBsYWNlIGl0IHdpdGggb25l
IGFuZCByZWN5Y2xlIHRoZSBvbGQgRWxlbWVudFxuXHRcdFx0b3V0ID0gZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUodm5vZGUpO1xuXHRcdFx0aWYgKGRvbSkge1xuXHRcdFx0XHRpZiAoZG9tLnBhcmVu
dE5vZGUpIGRvbS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChvdXQsIGRvbSk7XG5cdFx0XHRcdHJl
Y29sbGVjdE5vZGVUcmVlKGRvbSwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0b3V0Wydf
X3ByZWFjdGF0dHJfJ10gPSB0cnVlO1xuXG5cdFx0cmV0dXJuIG91dDtcblx0fVxuXG5cdC8vIElm
IHRoZSBWTm9kZSByZXByZXNlbnRzIGEgQ29tcG9uZW50LCBwZXJmb3JtIGEgY29tcG9uZW50IGRp
ZmY6XG5cdHZhciB2bm9kZU5hbWUgPSB2bm9kZS5ub2RlTmFtZTtcblx0aWYgKHR5cGVvZiB2bm9k
ZU5hbWUgPT09ICdmdW5jdGlvbicpIHtcblx0XHRyZXR1cm4gYnVpbGRDb21wb25lbnRGcm9tVk5v
ZGUoZG9tLCB2bm9kZSwgY29udGV4dCwgbW91bnRBbGwpO1xuXHR9XG5cblx0Ly8gVHJhY2tzIGVu
dGVyaW5nIGFuZCBleGl0aW5nIFNWRyBuYW1lc3BhY2Ugd2hlbiBkZXNjZW5kaW5nIHRocm91Z2gg
dGhlIHRyZWUuXG5cdGlzU3ZnTW9kZSA9IHZub2RlTmFtZSA9PT0gJ3N2ZycgPyB0cnVlIDogdm5v
ZGVOYW1lID09PSAnZm9yZWlnbk9iamVjdCcgPyBmYWxzZSA6IGlzU3ZnTW9kZTtcblxuXHQvLyBJ
ZiB0aGVyZSdzIG5vIGV4aXN0aW5nIGVsZW1lbnQgb3IgaXQncyB0aGUgd3JvbmcgdHlwZSwgY3Jl
YXRlIGEgbmV3IG9uZTpcblx0dm5vZGVOYW1lID0gU3RyaW5nKHZub2RlTmFtZSk7XG5cdGlmICgh
ZG9tIHx8ICFpc05hbWVkTm9kZShkb20sIHZub2RlTmFtZSkpIHtcblx0XHRvdXQgPSBjcmVhdGVO
b2RlKHZub2RlTmFtZSwgaXNTdmdNb2RlKTtcblxuXHRcdGlmIChkb20pIHtcblx0XHRcdC8vIG1v
dmUgY2hpbGRyZW4gaW50byB0aGUgcmVwbGFjZW1lbnQgbm9kZVxuXHRcdFx0d2hpbGUgKGRvbS5m
aXJzdENoaWxkKSB7XG5cdFx0XHRcdG91dC5hcHBlbmRDaGlsZChkb20uZmlyc3RDaGlsZCk7XG5c
dFx0XHR9IC8vIGlmIHRoZSBwcmV2aW91cyBFbGVtZW50IHdhcyBtb3VudGVkIGludG8gdGhlIERP
TSwgcmVwbGFjZSBpdCBpbmxpbmVcblx0XHRcdGlmIChkb20ucGFyZW50Tm9kZSkgZG9tLnBhcmVu
dE5vZGUucmVwbGFjZUNoaWxkKG91dCwgZG9tKTtcblxuXHRcdFx0Ly8gcmVjeWNsZSB0aGUgb2xk
IGVsZW1lbnQgKHNraXBzIG5vbi1FbGVtZW50IG5vZGUgdHlwZXMpXG5cdFx0XHRyZWNvbGxlY3RO
b2RlVHJlZShkb20sIHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdHZhciBmYyA9IG91dC5maXJzdENo
aWxkLFxuXHQgICAgcHJvcHMgPSBvdXRbJ19fcHJlYWN0YXR0cl8nXSxcblx0ICAgIHZjaGlsZHJl
biA9IHZub2RlLmNoaWxkcmVuO1xuXG5cdGlmIChwcm9wcyA9PSBudWxsKSB7XG5cdFx0cHJvcHMg
PSBvdXRbJ19fcHJlYWN0YXR0cl8nXSA9IHt9O1xuXHRcdGZvciAodmFyIGEgPSBvdXQuYXR0cmli
dXRlcywgaSA9IGEubGVuZ3RoOyBpLS07KSB7XG5cdFx0XHRwcm9wc1thW2ldLm5hbWVdID0gYVtp
XS52YWx1ZTtcblx0XHR9XG5cdH1cblxuXHQvLyBPcHRpbWl6YXRpb246IGZhc3QtcGF0aCBmb3Ig
ZWxlbWVudHMgY29udGFpbmluZyBhIHNpbmdsZSBUZXh0Tm9kZTpcblx0aWYgKCFoeWRyYXRpbmcg
JiYgdmNoaWxkcmVuICYmIHZjaGlsZHJlbi5sZW5ndGggPT09IDEgJiYgdHlwZW9mIHZjaGlsZHJl
blswXSA9PT0gJ3N0cmluZycgJiYgZmMgIT0gbnVsbCAmJiBmYy5zcGxpdFRleHQgIT09IHVuZGVm
aW5lZCAmJiBmYy5uZXh0U2libGluZyA9PSBudWxsKSB7XG5cdFx0aWYgKGZjLm5vZGVWYWx1ZSAh
PSB2Y2hpbGRyZW5bMF0pIHtcblx0XHRcdGZjLm5vZGVWYWx1ZSA9IHZjaGlsZHJlblswXTtcblx0
XHR9XG5cdH1cblx0Ly8gb3RoZXJ3aXNlLCBpZiB0aGVyZSBhcmUgZXhpc3Rpbmcgb3IgbmV3IGNo
aWxkcmVuLCBkaWZmIHRoZW06XG5cdGVsc2UgaWYgKHZjaGlsZHJlbiAmJiB2Y2hpbGRyZW4ubGVu
Z3RoIHx8IGZjICE9IG51bGwpIHtcblx0XHRcdGlubmVyRGlmZk5vZGUob3V0LCB2Y2hpbGRyZW4s
IGNvbnRleHQsIG1vdW50QWxsLCBoeWRyYXRpbmcgfHwgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5l
ckhUTUwgIT0gbnVsbCk7XG5cdFx0fVxuXG5cdC8vIEFwcGx5IGF0dHJpYnV0ZXMvcHJvcHMgZnJv
bSBWTm9kZSB0byB0aGUgRE9NIEVsZW1lbnQ6XG5cdGRpZmZBdHRyaWJ1dGVzKG91dCwgdm5vZGUu
YXR0cmlidXRlcywgcHJvcHMpO1xuXG5cdC8vIHJlc3RvcmUgcHJldmlvdXMgU1ZHIG1vZGU6IChp
biBjYXNlIHdlJ3JlIGV4aXRpbmcgYW4gU1ZHIG5hbWVzcGFjZSlcblx0aXNTdmdNb2RlID0gcHJl
dlN2Z01vZGU7XG5cblx0cmV0dXJuIG91dDtcbn1cblxuLyoqIEFwcGx5IGNoaWxkIGFuZCBhdHRy
aWJ1dGUgY2hhbmdlcyBiZXR3ZWVuIGEgVk5vZGUgYW5kIGEgRE9NIE5vZGUgdG8gdGhlIERPTS5c
biAqXHRAcGFyYW0ge0VsZW1lbnR9IGRvbVx0XHRcdEVsZW1lbnQgd2hvc2UgY2hpbGRyZW4gc2hv
dWxkIGJlIGNvbXBhcmVkICYgbXV0YXRlZFxuICpcdEBwYXJhbSB7QXJyYXl9IHZjaGlsZHJlblx0
XHRBcnJheSBvZiBWTm9kZXMgdG8gY29tcGFyZSB0byBgZG9tLmNoaWxkTm9kZXNgXG4gKlx0QHBh
cmFtIHtPYmplY3R9IGNvbnRleHRcdFx0XHRJbXBsaWNpdGx5IGRlc2NlbmRhbnQgY29udGV4dCBv
YmplY3QgKGZyb20gbW9zdCByZWNlbnQgYGdldENoaWxkQ29udGV4dCgpYClcbiAqXHRAcGFyYW0g
e0Jvb2xlYW59IG1vdW50QWxsXG4gKlx0QHBhcmFtIHtCb29sZWFufSBpc0h5ZHJhdGluZ1x0SWYg
YHRydWVgLCBjb25zdW1lcyBleHRlcm5hbGx5IGNyZWF0ZWQgZWxlbWVudHMgc2ltaWxhciB0byBo
eWRyYXRpb25cbiAqL1xuZnVuY3Rpb24gaW5uZXJEaWZmTm9kZShkb20sIHZjaGlsZHJlbiwgY29u
dGV4dCwgbW91bnRBbGwsIGlzSHlkcmF0aW5nKSB7XG5cdHZhciBvcmlnaW5hbENoaWxkcmVuID0g
ZG9tLmNoaWxkTm9kZXMsXG5cdCAgICBjaGlsZHJlbiA9IFtdLFxuXHQgICAga2V5ZWQgPSB7fSxc
blx0ICAgIGtleWVkTGVuID0gMCxcblx0ICAgIG1pbiA9IDAsXG5cdCAgICBsZW4gPSBvcmlnaW5h
bENoaWxkcmVuLmxlbmd0aCxcblx0ICAgIGNoaWxkcmVuTGVuID0gMCxcblx0ICAgIHZsZW4gPSB2
Y2hpbGRyZW4gPyB2Y2hpbGRyZW4ubGVuZ3RoIDogMCxcblx0ICAgIGosXG5cdCAgICBjLFxuXHQg
ICAgZixcblx0ICAgIHZjaGlsZCxcblx0ICAgIGNoaWxkO1xuXG5cdC8vIEJ1aWxkIHVwIGEgbWFw
IG9mIGtleWVkIGNoaWxkcmVuIGFuZCBhbiBBcnJheSBvZiB1bmtleWVkIGNoaWxkcmVuOlxuXHRp
ZiAobGVuICE9PSAwKSB7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRc
dFx0dmFyIF9jaGlsZCA9IG9yaWdpbmFsQ2hpbGRyZW5baV0sXG5cdFx0XHQgICAgcHJvcHMgPSBf
Y2hpbGRbJ19fcHJlYWN0YXR0cl8nXSxcblx0XHRcdCAgICBrZXkgPSB2bGVuICYmIHByb3BzID8g
X2NoaWxkLl9jb21wb25lbnQgPyBfY2hpbGQuX2NvbXBvbmVudC5fX2tleSA6IHByb3BzLmtleSA6
IG51bGw7XG5cdFx0XHRpZiAoa2V5ICE9IG51bGwpIHtcblx0XHRcdFx0a2V5ZWRMZW4rKztcblx0
XHRcdFx0a2V5ZWRba2V5XSA9IF9jaGlsZDtcblx0XHRcdH0gZWxzZSBpZiAocHJvcHMgfHwgKF9j
aGlsZC5zcGxpdFRleHQgIT09IHVuZGVmaW5lZCA/IGlzSHlkcmF0aW5nID8gX2NoaWxkLm5vZGVW
YWx1ZS50cmltKCkgOiB0cnVlIDogaXNIeWRyYXRpbmcpKSB7XG5cdFx0XHRcdGNoaWxkcmVuW2No
aWxkcmVuTGVuKytdID0gX2NoaWxkO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmICh2bGVu
ICE9PSAwKSB7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB2bGVuOyBpKyspIHtcblx0XHRcdHZj
aGlsZCA9IHZjaGlsZHJlbltpXTtcblx0XHRcdGNoaWxkID0gbnVsbDtcblxuXHRcdFx0Ly8gYXR0
ZW1wdCB0byBmaW5kIGEgbm9kZSBiYXNlZCBvbiBrZXkgbWF0Y2hpbmdcblx0XHRcdHZhciBrZXkg
PSB2Y2hpbGQua2V5O1xuXHRcdFx0aWYgKGtleSAhPSBudWxsKSB7XG5cdFx0XHRcdGlmIChrZXll
ZExlbiAmJiBrZXllZFtrZXldICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRjaGlsZCA9IGtl
eWVkW2tleV07XG5cdFx0XHRcdFx0a2V5ZWRba2V5XSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRr
ZXllZExlbi0tO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBhdHRlbXB0IHRvIHBsdWNr
IGEgbm9kZSBvZiB0aGUgc2FtZSB0eXBlIGZyb20gdGhlIGV4aXN0aW5nIGNoaWxkcmVuXG5cdFx0
XHRlbHNlIGlmICghY2hpbGQgJiYgbWluIDwgY2hpbGRyZW5MZW4pIHtcblx0XHRcdFx0XHRmb3Ig
KGogPSBtaW47IGogPCBjaGlsZHJlbkxlbjsgaisrKSB7XG5cdFx0XHRcdFx0XHRpZiAoY2hpbGRy
ZW5bal0gIT09IHVuZGVmaW5lZCAmJiBpc1NhbWVOb2RlVHlwZShjID0gY2hpbGRyZW5bal0sIHZj
aGlsZCwgaXNIeWRyYXRpbmcpKSB7XG5cdFx0XHRcdFx0XHRcdGNoaWxkID0gYztcblx0XHRcdFx0
XHRcdFx0Y2hpbGRyZW5bal0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdGlmIChqID09PSBj
aGlsZHJlbkxlbiAtIDEpIGNoaWxkcmVuTGVuLS07XG5cdFx0XHRcdFx0XHRcdGlmIChqID09PSBt
aW4pIG1pbisrO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0
XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gbW9ycGggdGhlIG1hdGNoZWQvZm91bmQvY3JlYXRl
ZCBET00gY2hpbGQgdG8gbWF0Y2ggdmNoaWxkIChkZWVwKVxuXHRcdFx0Y2hpbGQgPSBpZGlmZihj
aGlsZCwgdmNoaWxkLCBjb250ZXh0LCBtb3VudEFsbCk7XG5cblx0XHRcdGYgPSBvcmlnaW5hbENo
aWxkcmVuW2ldO1xuXHRcdFx0aWYgKGNoaWxkICYmIGNoaWxkICE9PSBkb20gJiYgY2hpbGQgIT09
IGYpIHtcblx0XHRcdFx0aWYgKGYgPT0gbnVsbCkge1xuXHRcdFx0XHRcdGRvbS5hcHBlbmRDaGls
ZChjaGlsZCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoY2hpbGQgPT09IGYubmV4dFNpYmxpbmcpIHtc
blx0XHRcdFx0XHRyZW1vdmVOb2RlKGYpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRv
bS5pbnNlcnRCZWZvcmUoY2hpbGQsIGYpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9
XG5cblx0Ly8gcmVtb3ZlIHVudXNlZCBrZXllZCBjaGlsZHJlbjpcblx0aWYgKGtleWVkTGVuKSB7
XG5cdFx0Zm9yICh2YXIgaSBpbiBrZXllZCkge1xuXHRcdFx0aWYgKGtleWVkW2ldICE9PSB1bmRl
ZmluZWQpIHJlY29sbGVjdE5vZGVUcmVlKGtleWVkW2ldLCBmYWxzZSk7XG5cdFx0fVxuXHR9XG5c
blx0Ly8gcmVtb3ZlIG9ycGhhbmVkIHVua2V5ZWQgY2hpbGRyZW46XG5cdHdoaWxlIChtaW4gPD0g
Y2hpbGRyZW5MZW4pIHtcblx0XHRpZiAoKGNoaWxkID0gY2hpbGRyZW5bY2hpbGRyZW5MZW4tLV0p
ICE9PSB1bmRlZmluZWQpIHJlY29sbGVjdE5vZGVUcmVlKGNoaWxkLCBmYWxzZSk7XG5cdH1cbn1c
blxuLyoqIFJlY3Vyc2l2ZWx5IHJlY3ljbGUgKG9yIGp1c3QgdW5tb3VudCkgYSBub2RlIGFuZCBp
dHMgZGVzY2VuZGFudHMuXG4gKlx0QHBhcmFtIHtOb2RlfSBub2RlXHRcdFx0XHRcdFx0RE9NIG5v
ZGUgdG8gc3RhcnQgdW5tb3VudC9yZW1vdmFsIGZyb21cbiAqXHRAcGFyYW0ge0Jvb2xlYW59IFt1
bm1vdW50T25seT1mYWxzZV1cdElmIGB0cnVlYCwgb25seSB0cmlnZ2VycyB1bm1vdW50IGxpZmVj
eWNsZSwgc2tpcHMgcmVtb3ZhbFxuICovXG5mdW5jdGlvbiByZWNvbGxlY3ROb2RlVHJlZShub2Rl
LCB1bm1vdW50T25seSkge1xuXHR2YXIgY29tcG9uZW50ID0gbm9kZS5fY29tcG9uZW50O1xuXHRp
ZiAoY29tcG9uZW50KSB7XG5cdFx0Ly8gaWYgbm9kZSBpcyBvd25lZCBieSBhIENvbXBvbmVudCwg
dW5tb3VudCB0aGF0IGNvbXBvbmVudCAoZW5kcyB1cCByZWN1cnNpbmcgYmFjayBoZXJlKVxuXHRc
dHVubW91bnRDb21wb25lbnQoY29tcG9uZW50KTtcblx0fSBlbHNlIHtcblx0XHQvLyBJZiB0aGUg
bm9kZSdzIFZOb2RlIGhhZCBhIHJlZiBmdW5jdGlvbiwgaW52b2tlIGl0IHdpdGggbnVsbCBoZXJl
LlxuXHRcdC8vICh0aGlzIGlzIHBhcnQgb2YgdGhlIFJlYWN0IHNwZWMsIGFuZCBzbWFydCBmb3Ig
dW5zZXR0aW5nIHJlZmVyZW5jZXMpXG5cdFx0aWYgKG5vZGVbJ19fcHJlYWN0YXR0cl8nXSAhPSBu
dWxsICYmIG5vZGVbJ19fcHJlYWN0YXR0cl8nXS5yZWYpIG5vZGVbJ19fcHJlYWN0YXR0cl8nXS5y
ZWYobnVsbCk7XG5cblx0XHRpZiAodW5tb3VudE9ubHkgPT09IGZhbHNlIHx8IG5vZGVbJ19fcHJl
YWN0YXR0cl8nXSA9PSBudWxsKSB7XG5cdFx0XHRyZW1vdmVOb2RlKG5vZGUpO1xuXHRcdH1cblxu
XHRcdHJlbW92ZUNoaWxkcmVuKG5vZGUpO1xuXHR9XG59XG5cbi8qKiBSZWNvbGxlY3QvdW5tb3Vu
dCBhbGwgY2hpbGRyZW4uXG4gKlx0LSB3ZSB1c2UgLmxhc3RDaGlsZCBoZXJlIGJlY2F1c2UgaXQg
Y2F1c2VzIGxlc3MgcmVmbG93IHRoYW4gLmZpcnN0Q2hpbGRcbiAqXHQtIGl0J3MgYWxzbyBjaGVh
cGVyIHRoYW4gYWNjZXNzaW5nIHRoZSAuY2hpbGROb2RlcyBMaXZlIE5vZGVMaXN0XG4gKi9cbmZ1
bmN0aW9uIHJlbW92ZUNoaWxkcmVuKG5vZGUpIHtcblx0bm9kZSA9IG5vZGUubGFzdENoaWxkO1xu
XHR3aGlsZSAobm9kZSkge1xuXHRcdHZhciBuZXh0ID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG5c
dFx0cmVjb2xsZWN0Tm9kZVRyZWUobm9kZSwgdHJ1ZSk7XG5cdFx0bm9kZSA9IG5leHQ7XG5cdH1c
bn1cblxuLyoqIEFwcGx5IGRpZmZlcmVuY2VzIGluIGF0dHJpYnV0ZXMgZnJvbSBhIFZOb2RlIHRv
IHRoZSBnaXZlbiBET00gRWxlbWVudC5cbiAqXHRAcGFyYW0ge0VsZW1lbnR9IGRvbVx0XHRFbGVt
ZW50IHdpdGggYXR0cmlidXRlcyB0byBkaWZmIGBhdHRyc2AgYWdhaW5zdFxuICpcdEBwYXJhbSB7
T2JqZWN0fSBhdHRyc1x0XHRUaGUgZGVzaXJlZCBlbmQtc3RhdGUga2V5LXZhbHVlIGF0dHJpYnV0
ZSBwYWlyc1xuICpcdEBwYXJhbSB7T2JqZWN0fSBvbGRcdFx0XHRDdXJyZW50L3ByZXZpb3VzIGF0
dHJpYnV0ZXMgKGZyb20gcHJldmlvdXMgVk5vZGUgb3IgZWxlbWVudCdzIHByb3AgY2FjaGUpXG4g
Ki9cbmZ1bmN0aW9uIGRpZmZBdHRyaWJ1dGVzKGRvbSwgYXR0cnMsIG9sZCkge1xuXHR2YXIgbmFt
ZTtcblxuXHQvLyByZW1vdmUgYXR0cmlidXRlcyBubyBsb25nZXIgcHJlc2VudCBvbiB0aGUgdm5v
ZGUgYnkgc2V0dGluZyB0aGVtIHRvIHVuZGVmaW5lZFxuXHRmb3IgKG5hbWUgaW4gb2xkKSB7XG5c
dFx0aWYgKCEoYXR0cnMgJiYgYXR0cnNbbmFtZV0gIT0gbnVsbCkgJiYgb2xkW25hbWVdICE9IG51
bGwpIHtcblx0XHRcdHNldEFjY2Vzc29yKGRvbSwgbmFtZSwgb2xkW25hbWVdLCBvbGRbbmFtZV0g
PSB1bmRlZmluZWQsIGlzU3ZnTW9kZSk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gYWRkIG5ldyAmIHVw
ZGF0ZSBjaGFuZ2VkIGF0dHJpYnV0ZXNcblx0Zm9yIChuYW1lIGluIGF0dHJzKSB7XG5cdFx0aWYg
KG5hbWUgIT09ICdjaGlsZHJlbicgJiYgbmFtZSAhPT0gJ2lubmVySFRNTCcgJiYgKCEobmFtZSBp
biBvbGQpIHx8IGF0dHJzW25hbWVdICE9PSAobmFtZSA9PT0gJ3ZhbHVlJyB8fCBuYW1lID09PSAn
Y2hlY2tlZCcgPyBkb21bbmFtZV0gOiBvbGRbbmFtZV0pKSkge1xuXHRcdFx0c2V0QWNjZXNzb3Io
ZG9tLCBuYW1lLCBvbGRbbmFtZV0sIG9sZFtuYW1lXSA9IGF0dHJzW25hbWVdLCBpc1N2Z01vZGUp
O1xuXHRcdH1cblx0fVxufVxuXG4vKiogUmV0YWlucyBhIHBvb2wgb2YgQ29tcG9uZW50cyBmb3Ig
cmUtdXNlLCBrZXllZCBvbiBjb21wb25lbnQgbmFtZS5cbiAqXHROb3RlOiBzaW5jZSBjb21wb25l
bnQgbmFtZXMgYXJlIG5vdCB1bmlxdWUgb3IgZXZlbiBuZWNlc3NhcmlseSBhdmFpbGFibGUsIHRo
ZXNlIGFyZSBwcmltYXJpbHkgYSBmb3JtIG9mIHNoYXJkaW5nLlxuICpcdEBwcml2YXRlXG4gKi9c
bnZhciBjb21wb25lbnRzID0ge307XG5cbi8qKiBSZWNsYWltIGEgY29tcG9uZW50IGZvciBsYXRl
ciByZS11c2UgYnkgdGhlIHJlY3ljbGVyLiAqL1xuZnVuY3Rpb24gY29sbGVjdENvbXBvbmVudChj
b21wb25lbnQpIHtcblx0dmFyIG5hbWUgPSBjb21wb25lbnQuY29uc3RydWN0b3IubmFtZTtcblx0
KGNvbXBvbmVudHNbbmFtZV0gfHwgKGNvbXBvbmVudHNbbmFtZV0gPSBbXSkpLnB1c2goY29tcG9u
ZW50KTtcbn1cblxuLyoqIENyZWF0ZSBhIGNvbXBvbmVudC4gTm9ybWFsaXplcyBkaWZmZXJlbmNl
cyBiZXR3ZWVuIFBGQydzIGFuZCBjbGFzc2Z1bCBDb21wb25lbnRzLiAqL1xuZnVuY3Rpb24gY3Jl
YXRlQ29tcG9uZW50KEN0b3IsIHByb3BzLCBjb250ZXh0KSB7XG5cdHZhciBsaXN0ID0gY29tcG9u
ZW50c1tDdG9yLm5hbWVdLFxuXHQgICAgaW5zdDtcblxuXHRpZiAoQ3Rvci5wcm90b3R5cGUgJiYg
Q3Rvci5wcm90b3R5cGUucmVuZGVyKSB7XG5cdFx0aW5zdCA9IG5ldyBDdG9yKHByb3BzLCBjb250
ZXh0KTtcblx0XHRDb21wb25lbnQuY2FsbChpbnN0LCBwcm9wcywgY29udGV4dCk7XG5cdH0gZWxz
ZSB7XG5cdFx0aW5zdCA9IG5ldyBDb21wb25lbnQocHJvcHMsIGNvbnRleHQpO1xuXHRcdGluc3Qu
Y29uc3RydWN0b3IgPSBDdG9yO1xuXHRcdGluc3QucmVuZGVyID0gZG9SZW5kZXI7XG5cdH1cblxu
XHRpZiAobGlzdCkge1xuXHRcdGZvciAodmFyIGkgPSBsaXN0Lmxlbmd0aDsgaS0tOykge1xuXHRc
dFx0aWYgKGxpc3RbaV0uY29uc3RydWN0b3IgPT09IEN0b3IpIHtcblx0XHRcdFx0aW5zdC5uZXh0
QmFzZSA9IGxpc3RbaV0ubmV4dEJhc2U7XG5cdFx0XHRcdGxpc3Quc3BsaWNlKGksIDEpO1xuXHRc
dFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGluc3Q7XG59XG5cbi8q
KiBUaGUgYC5yZW5kZXIoKWAgbWV0aG9kIGZvciBhIFBGQyBiYWNraW5nIGluc3RhbmNlLiAqL1xu
ZnVuY3Rpb24gZG9SZW5kZXIocHJvcHMsIHN0YXRlLCBjb250ZXh0KSB7XG5cdHJldHVybiB0aGlz
LmNvbnN0cnVjdG9yKHByb3BzLCBjb250ZXh0KTtcbn1cblxuLyoqIFNldCBhIGNvbXBvbmVudCdz
IGBwcm9wc2AgKGdlbmVyYWxseSBkZXJpdmVkIGZyb20gSlNYIGF0dHJpYnV0ZXMpLlxuICpcdEBw
YXJhbSB7T2JqZWN0fSBwcm9wc1xuICpcdEBwYXJhbSB7T2JqZWN0fSBbb3B0c11cbiAqXHRAcGFy
YW0ge2Jvb2xlYW59IFtvcHRzLnJlbmRlclN5bmM9ZmFsc2VdXHRJZiBgdHJ1ZWAgYW5kIHtAbGlu
ayBvcHRpb25zLnN5bmNDb21wb25lbnRVcGRhdGVzfSBpcyBgdHJ1ZWAsIHRyaWdnZXJzIHN5bmNo
cm9ub3VzIHJlbmRlcmluZy5cbiAqXHRAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnJlbmRlcj10cnVl
XVx0XHRcdElmIGBmYWxzZWAsIG5vIHJlbmRlciB3aWxsIGJlIHRyaWdnZXJlZC5cbiAqL1xuZnVu
Y3Rpb24gc2V0Q29tcG9uZW50UHJvcHMoY29tcG9uZW50LCBwcm9wcywgb3B0cywgY29udGV4dCwg
bW91bnRBbGwpIHtcblx0aWYgKGNvbXBvbmVudC5fZGlzYWJsZSkgcmV0dXJuO1xuXHRjb21wb25l
bnQuX2Rpc2FibGUgPSB0cnVlO1xuXG5cdGlmIChjb21wb25lbnQuX19yZWYgPSBwcm9wcy5yZWYp
IGRlbGV0ZSBwcm9wcy5yZWY7XG5cdGlmIChjb21wb25lbnQuX19rZXkgPSBwcm9wcy5rZXkpIGRl
bGV0ZSBwcm9wcy5rZXk7XG5cblx0aWYgKCFjb21wb25lbnQuYmFzZSB8fCBtb3VudEFsbCkge1xu
XHRcdGlmIChjb21wb25lbnQuY29tcG9uZW50V2lsbE1vdW50KSBjb21wb25lbnQuY29tcG9uZW50
V2lsbE1vdW50KCk7XG5cdH0gZWxzZSBpZiAoY29tcG9uZW50LmNvbXBvbmVudFdpbGxSZWNlaXZl
UHJvcHMpIHtcblx0XHRjb21wb25lbnQuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhwcm9wcywg
Y29udGV4dCk7XG5cdH1cblxuXHRpZiAoY29udGV4dCAmJiBjb250ZXh0ICE9PSBjb21wb25lbnQu
Y29udGV4dCkge1xuXHRcdGlmICghY29tcG9uZW50LnByZXZDb250ZXh0KSBjb21wb25lbnQucHJl
dkNvbnRleHQgPSBjb21wb25lbnQuY29udGV4dDtcblx0XHRjb21wb25lbnQuY29udGV4dCA9IGNv
bnRleHQ7XG5cdH1cblxuXHRpZiAoIWNvbXBvbmVudC5wcmV2UHJvcHMpIGNvbXBvbmVudC5wcmV2
UHJvcHMgPSBjb21wb25lbnQucHJvcHM7XG5cdGNvbXBvbmVudC5wcm9wcyA9IHByb3BzO1xuXG5c
dGNvbXBvbmVudC5fZGlzYWJsZSA9IGZhbHNlO1xuXG5cdGlmIChvcHRzICE9PSAwKSB7XG5cdFx0
aWYgKG9wdHMgPT09IDEgfHwgb3B0aW9ucy5zeW5jQ29tcG9uZW50VXBkYXRlcyAhPT0gZmFsc2Ug
fHwgIWNvbXBvbmVudC5iYXNlKSB7XG5cdFx0XHRyZW5kZXJDb21wb25lbnQoY29tcG9uZW50LCAx
LCBtb3VudEFsbCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGVucXVldWVSZW5kZXIoY29tcG9uZW50
KTtcblx0XHR9XG5cdH1cblxuXHRpZiAoY29tcG9uZW50Ll9fcmVmKSBjb21wb25lbnQuX19yZWYo
Y29tcG9uZW50KTtcbn1cblxuLyoqIFJlbmRlciBhIENvbXBvbmVudCwgdHJpZ2dlcmluZyBuZWNl
c3NhcnkgbGlmZWN5Y2xlIGV2ZW50cyBhbmQgdGFraW5nIEhpZ2gtT3JkZXIgQ29tcG9uZW50cyBp
bnRvIGFjY291bnQuXG4gKlx0QHBhcmFtIHtDb21wb25lbnR9IGNvbXBvbmVudFxuICpcdEBwYXJh
bSB7T2JqZWN0fSBbb3B0c11cbiAqXHRAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmJ1aWxkPWZhbHNl
XVx0XHRJZiBgdHJ1ZWAsIGNvbXBvbmVudCB3aWxsIGJ1aWxkIGFuZCBzdG9yZSBhIERPTSBub2Rl
IGlmIG5vdCBhbHJlYWR5IGFzc29jaWF0ZWQgd2l0aCBvbmUuXG4gKlx0QHByaXZhdGVcbiAqL1xu
ZnVuY3Rpb24gcmVuZGVyQ29tcG9uZW50KGNvbXBvbmVudCwgb3B0cywgbW91bnRBbGwsIGlzQ2hp
bGQpIHtcblx0aWYgKGNvbXBvbmVudC5fZGlzYWJsZSkgcmV0dXJuO1xuXG5cdHZhciBwcm9wcyA9
IGNvbXBvbmVudC5wcm9wcyxcblx0ICAgIHN0YXRlID0gY29tcG9uZW50LnN0YXRlLFxuXHQgICAg
Y29udGV4dCA9IGNvbXBvbmVudC5jb250ZXh0LFxuXHQgICAgcHJldmlvdXNQcm9wcyA9IGNvbXBv
bmVudC5wcmV2UHJvcHMgfHwgcHJvcHMsXG5cdCAgICBwcmV2aW91c1N0YXRlID0gY29tcG9uZW50
LnByZXZTdGF0ZSB8fCBzdGF0ZSxcblx0ICAgIHByZXZpb3VzQ29udGV4dCA9IGNvbXBvbmVudC5w
cmV2Q29udGV4dCB8fCBjb250ZXh0LFxuXHQgICAgaXNVcGRhdGUgPSBjb21wb25lbnQuYmFzZSxc
blx0ICAgIG5leHRCYXNlID0gY29tcG9uZW50Lm5leHRCYXNlLFxuXHQgICAgaW5pdGlhbEJhc2Ug
PSBpc1VwZGF0ZSB8fCBuZXh0QmFzZSxcblx0ICAgIGluaXRpYWxDaGlsZENvbXBvbmVudCA9IGNv
bXBvbmVudC5fY29tcG9uZW50LFxuXHQgICAgc2tpcCA9IGZhbHNlLFxuXHQgICAgcmVuZGVyZWQs
XG5cdCAgICBpbnN0LFxuXHQgICAgY2Jhc2U7XG5cblx0Ly8gaWYgdXBkYXRpbmdcblx0aWYgKGlz
VXBkYXRlKSB7XG5cdFx0Y29tcG9uZW50LnByb3BzID0gcHJldmlvdXNQcm9wcztcblx0XHRjb21w
b25lbnQuc3RhdGUgPSBwcmV2aW91c1N0YXRlO1xuXHRcdGNvbXBvbmVudC5jb250ZXh0ID0gcHJl
dmlvdXNDb250ZXh0O1xuXHRcdGlmIChvcHRzICE9PSAyICYmIGNvbXBvbmVudC5zaG91bGRDb21w
b25lbnRVcGRhdGUgJiYgY29tcG9uZW50LnNob3VsZENvbXBvbmVudFVwZGF0ZShwcm9wcywgc3Rh
dGUsIGNvbnRleHQpID09PSBmYWxzZSkge1xuXHRcdFx0c2tpcCA9IHRydWU7XG5cdFx0fSBlbHNl
IGlmIChjb21wb25lbnQuY29tcG9uZW50V2lsbFVwZGF0ZSkge1xuXHRcdFx0Y29tcG9uZW50LmNv
bXBvbmVudFdpbGxVcGRhdGUocHJvcHMsIHN0YXRlLCBjb250ZXh0KTtcblx0XHR9XG5cdFx0Y29t
cG9uZW50LnByb3BzID0gcHJvcHM7XG5cdFx0Y29tcG9uZW50LnN0YXRlID0gc3RhdGU7XG5cdFx0
Y29tcG9uZW50LmNvbnRleHQgPSBjb250ZXh0O1xuXHR9XG5cblx0Y29tcG9uZW50LnByZXZQcm9w
cyA9IGNvbXBvbmVudC5wcmV2U3RhdGUgPSBjb21wb25lbnQucHJldkNvbnRleHQgPSBjb21wb25l
bnQubmV4dEJhc2UgPSBudWxsO1xuXHRjb21wb25lbnQuX2RpcnR5ID0gZmFsc2U7XG5cblx0aWYg
KCFza2lwKSB7XG5cdFx0cmVuZGVyZWQgPSBjb21wb25lbnQucmVuZGVyKHByb3BzLCBzdGF0ZSwg
Y29udGV4dCk7XG5cblx0XHQvLyBjb250ZXh0IHRvIHBhc3MgdG8gdGhlIGNoaWxkLCBjYW4gYmUg
dXBkYXRlZCB2aWEgKGdyYW5kLSlwYXJlbnQgY29tcG9uZW50XG5cdFx0aWYgKGNvbXBvbmVudC5n
ZXRDaGlsZENvbnRleHQpIHtcblx0XHRcdGNvbnRleHQgPSBleHRlbmQoZXh0ZW5kKHt9LCBjb250
ZXh0KSwgY29tcG9uZW50LmdldENoaWxkQ29udGV4dCgpKTtcblx0XHR9XG5cblx0XHR2YXIgY2hp
bGRDb21wb25lbnQgPSByZW5kZXJlZCAmJiByZW5kZXJlZC5ub2RlTmFtZSxcblx0XHQgICAgdG9V
bm1vdW50LFxuXHRcdCAgICBiYXNlO1xuXG5cdFx0aWYgKHR5cGVvZiBjaGlsZENvbXBvbmVudCA9
PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Ly8gc2V0IHVwIGhpZ2ggb3JkZXIgY29tcG9uZW50IGxp
bmtcblxuXHRcdFx0dmFyIGNoaWxkUHJvcHMgPSBnZXROb2RlUHJvcHMocmVuZGVyZWQpO1xuXHRc
dFx0aW5zdCA9IGluaXRpYWxDaGlsZENvbXBvbmVudDtcblxuXHRcdFx0aWYgKGluc3QgJiYgaW5z
dC5jb25zdHJ1Y3RvciA9PT0gY2hpbGRDb21wb25lbnQgJiYgY2hpbGRQcm9wcy5rZXkgPT0gaW5z
dC5fX2tleSkge1xuXHRcdFx0XHRzZXRDb21wb25lbnRQcm9wcyhpbnN0LCBjaGlsZFByb3BzLCAx
LCBjb250ZXh0LCBmYWxzZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0b1VubW91bnQgPSBp
bnN0O1xuXG5cdFx0XHRcdGNvbXBvbmVudC5fY29tcG9uZW50ID0gaW5zdCA9IGNyZWF0ZUNvbXBv
bmVudChjaGlsZENvbXBvbmVudCwgY2hpbGRQcm9wcywgY29udGV4dCk7XG5cdFx0XHRcdGluc3Qu
bmV4dEJhc2UgPSBpbnN0Lm5leHRCYXNlIHx8IG5leHRCYXNlO1xuXHRcdFx0XHRpbnN0Ll9wYXJl
bnRDb21wb25lbnQgPSBjb21wb25lbnQ7XG5cdFx0XHRcdHNldENvbXBvbmVudFByb3BzKGluc3Qs
IGNoaWxkUHJvcHMsIDAsIGNvbnRleHQsIGZhbHNlKTtcblx0XHRcdFx0cmVuZGVyQ29tcG9uZW50
KGluc3QsIDEsIG1vdW50QWxsLCB0cnVlKTtcblx0XHRcdH1cblxuXHRcdFx0YmFzZSA9IGluc3Qu
YmFzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2Jhc2UgPSBpbml0aWFsQmFzZTtcblxuXHRcdFx0
Ly8gZGVzdHJveSBoaWdoIG9yZGVyIGNvbXBvbmVudCBsaW5rXG5cdFx0XHR0b1VubW91bnQgPSBp
bml0aWFsQ2hpbGRDb21wb25lbnQ7XG5cdFx0XHRpZiAodG9Vbm1vdW50KSB7XG5cdFx0XHRcdGNi
YXNlID0gY29tcG9uZW50Ll9jb21wb25lbnQgPSBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAo
aW5pdGlhbEJhc2UgfHwgb3B0cyA9PT0gMSkge1xuXHRcdFx0XHRpZiAoY2Jhc2UpIGNiYXNlLl9j
b21wb25lbnQgPSBudWxsO1xuXHRcdFx0XHRiYXNlID0gZGlmZihjYmFzZSwgcmVuZGVyZWQsIGNv
bnRleHQsIG1vdW50QWxsIHx8ICFpc1VwZGF0ZSwgaW5pdGlhbEJhc2UgJiYgaW5pdGlhbEJhc2Uu
cGFyZW50Tm9kZSwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGluaXRpYWxCYXNl
ICYmIGJhc2UgIT09IGluaXRpYWxCYXNlICYmIGluc3QgIT09IGluaXRpYWxDaGlsZENvbXBvbmVu
dCkge1xuXHRcdFx0dmFyIGJhc2VQYXJlbnQgPSBpbml0aWFsQmFzZS5wYXJlbnROb2RlO1xuXHRc
dFx0aWYgKGJhc2VQYXJlbnQgJiYgYmFzZSAhPT0gYmFzZVBhcmVudCkge1xuXHRcdFx0XHRiYXNl
UGFyZW50LnJlcGxhY2VDaGlsZChiYXNlLCBpbml0aWFsQmFzZSk7XG5cblx0XHRcdFx0aWYgKCF0
b1VubW91bnQpIHtcblx0XHRcdFx0XHRpbml0aWFsQmFzZS5fY29tcG9uZW50ID0gbnVsbDtcblx0
XHRcdFx0XHRyZWNvbGxlY3ROb2RlVHJlZShpbml0aWFsQmFzZSwgZmFsc2UpO1xuXHRcdFx0XHR9
XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRvVW5tb3VudCkge1xuXHRcdFx0dW5tb3VudENv
bXBvbmVudCh0b1VubW91bnQpO1xuXHRcdH1cblxuXHRcdGNvbXBvbmVudC5iYXNlID0gYmFzZTtc
blx0XHRpZiAoYmFzZSAmJiAhaXNDaGlsZCkge1xuXHRcdFx0dmFyIGNvbXBvbmVudFJlZiA9IGNv
bXBvbmVudCxcblx0XHRcdCAgICB0ID0gY29tcG9uZW50O1xuXHRcdFx0d2hpbGUgKHQgPSB0Ll9w
YXJlbnRDb21wb25lbnQpIHtcblx0XHRcdFx0KGNvbXBvbmVudFJlZiA9IHQpLmJhc2UgPSBiYXNl
O1xuXHRcdFx0fVxuXHRcdFx0YmFzZS5fY29tcG9uZW50ID0gY29tcG9uZW50UmVmO1xuXHRcdFx0
YmFzZS5fY29tcG9uZW50Q29uc3RydWN0b3IgPSBjb21wb25lbnRSZWYuY29uc3RydWN0b3I7XG5c
dFx0fVxuXHR9XG5cblx0aWYgKCFpc1VwZGF0ZSB8fCBtb3VudEFsbCkge1xuXHRcdG1vdW50cy51
bnNoaWZ0KGNvbXBvbmVudCk7XG5cdH0gZWxzZSBpZiAoIXNraXApIHtcblx0XHQvLyBFbnN1cmUg
dGhhdCBwZW5kaW5nIGNvbXBvbmVudERpZE1vdW50KCkgaG9va3Mgb2YgY2hpbGQgY29tcG9uZW50
c1xuXHRcdC8vIGFyZSBjYWxsZWQgYmVmb3JlIHRoZSBjb21wb25lbnREaWRVcGRhdGUoKSBob29r
IGluIHRoZSBwYXJlbnQuXG5cdFx0Ly8gTm90ZTogZGlzYWJsZWQgYXMgaXQgY2F1c2VzIGR1cGxp
Y2F0ZSBob29rcywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9kZXZlbG9waXQvcHJlYWN0L2lzc3Vl
cy83NTBcblx0XHQvLyBmbHVzaE1vdW50cygpO1xuXG5cdFx0aWYgKGNvbXBvbmVudC5jb21wb25l
bnREaWRVcGRhdGUpIHtcblx0XHRcdGNvbXBvbmVudC5jb21wb25lbnREaWRVcGRhdGUocHJldmlv
dXNQcm9wcywgcHJldmlvdXNTdGF0ZSwgcHJldmlvdXNDb250ZXh0KTtcblx0XHR9XG5cdFx0aWYg
KG9wdGlvbnMuYWZ0ZXJVcGRhdGUpIG9wdGlvbnMuYWZ0ZXJVcGRhdGUoY29tcG9uZW50KTtcblx0
fVxuXG5cdGlmIChjb21wb25lbnQuX3JlbmRlckNhbGxiYWNrcyAhPSBudWxsKSB7XG5cdFx0d2hp
bGUgKGNvbXBvbmVudC5fcmVuZGVyQ2FsbGJhY2tzLmxlbmd0aCkge1xuXHRcdFx0Y29tcG9uZW50
Ll9yZW5kZXJDYWxsYmFja3MucG9wKCkuY2FsbChjb21wb25lbnQpO1xuXHRcdH1cblx0fVxuXG5c
dGlmICghZGlmZkxldmVsICYmICFpc0NoaWxkKSBmbHVzaE1vdW50cygpO1xufVxuXG4vKiogQXBw
bHkgdGhlIENvbXBvbmVudCByZWZlcmVuY2VkIGJ5IGEgVk5vZGUgdG8gdGhlIERPTS5cbiAqXHRA
cGFyYW0ge0VsZW1lbnR9IGRvbVx0VGhlIERPTSBub2RlIHRvIG11dGF0ZVxuICpcdEBwYXJhbSB7
Vk5vZGV9IHZub2RlXHRBIENvbXBvbmVudC1yZWZlcmVuY2luZyBWTm9kZVxuICpcdEByZXR1cm5z
IHtFbGVtZW50fSBkb21cdFRoZSBjcmVhdGVkL211dGF0ZWQgZWxlbWVudFxuICpcdEBwcml2YXRl
XG4gKi9cbmZ1bmN0aW9uIGJ1aWxkQ29tcG9uZW50RnJvbVZOb2RlKGRvbSwgdm5vZGUsIGNvbnRl
eHQsIG1vdW50QWxsKSB7XG5cdHZhciBjID0gZG9tICYmIGRvbS5fY29tcG9uZW50LFxuXHQgICAg
b3JpZ2luYWxDb21wb25lbnQgPSBjLFxuXHQgICAgb2xkRG9tID0gZG9tLFxuXHQgICAgaXNEaXJl
Y3RPd25lciA9IGMgJiYgZG9tLl9jb21wb25lbnRDb25zdHJ1Y3RvciA9PT0gdm5vZGUubm9kZU5h
bWUsXG5cdCAgICBpc093bmVyID0gaXNEaXJlY3RPd25lcixcblx0ICAgIHByb3BzID0gZ2V0Tm9k
ZVByb3BzKHZub2RlKTtcblx0d2hpbGUgKGMgJiYgIWlzT3duZXIgJiYgKGMgPSBjLl9wYXJlbnRD
b21wb25lbnQpKSB7XG5cdFx0aXNPd25lciA9IGMuY29uc3RydWN0b3IgPT09IHZub2RlLm5vZGVO
YW1lO1xuXHR9XG5cblx0aWYgKGMgJiYgaXNPd25lciAmJiAoIW1vdW50QWxsIHx8IGMuX2NvbXBv
bmVudCkpIHtcblx0XHRzZXRDb21wb25lbnRQcm9wcyhjLCBwcm9wcywgMywgY29udGV4dCwgbW91
bnRBbGwpO1xuXHRcdGRvbSA9IGMuYmFzZTtcblx0fSBlbHNlIHtcblx0XHRpZiAob3JpZ2luYWxD
b21wb25lbnQgJiYgIWlzRGlyZWN0T3duZXIpIHtcblx0XHRcdHVubW91bnRDb21wb25lbnQob3Jp
Z2luYWxDb21wb25lbnQpO1xuXHRcdFx0ZG9tID0gb2xkRG9tID0gbnVsbDtcblx0XHR9XG5cblx0
XHRjID0gY3JlYXRlQ29tcG9uZW50KHZub2RlLm5vZGVOYW1lLCBwcm9wcywgY29udGV4dCk7XG5c
dFx0aWYgKGRvbSAmJiAhYy5uZXh0QmFzZSkge1xuXHRcdFx0Yy5uZXh0QmFzZSA9IGRvbTtcblx0
XHRcdC8vIHBhc3NpbmcgZG9tL29sZERvbSBhcyBuZXh0QmFzZSB3aWxsIHJlY3ljbGUgaXQgaWYg
dW51c2VkLCBzbyBieXBhc3MgcmVjeWNsaW5nIG9uIEwyMjk6XG5cdFx0XHRvbGREb20gPSBudWxs
O1xuXHRcdH1cblx0XHRzZXRDb21wb25lbnRQcm9wcyhjLCBwcm9wcywgMSwgY29udGV4dCwgbW91
bnRBbGwpO1xuXHRcdGRvbSA9IGMuYmFzZTtcblxuXHRcdGlmIChvbGREb20gJiYgZG9tICE9PSBv
bGREb20pIHtcblx0XHRcdG9sZERvbS5fY29tcG9uZW50ID0gbnVsbDtcblx0XHRcdHJlY29sbGVj
dE5vZGVUcmVlKG9sZERvbSwgZmFsc2UpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBkb207XG59
XG5cbi8qKiBSZW1vdmUgYSBjb21wb25lbnQgZnJvbSB0aGUgRE9NIGFuZCByZWN5Y2xlIGl0Llxu
ICpcdEBwYXJhbSB7Q29tcG9uZW50fSBjb21wb25lbnRcdFRoZSBDb21wb25lbnQgaW5zdGFuY2Ug
dG8gdW5tb3VudFxuICpcdEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHVubW91bnRDb21wb25lbnQo
Y29tcG9uZW50KSB7XG5cdGlmIChvcHRpb25zLmJlZm9yZVVubW91bnQpIG9wdGlvbnMuYmVmb3Jl
VW5tb3VudChjb21wb25lbnQpO1xuXG5cdHZhciBiYXNlID0gY29tcG9uZW50LmJhc2U7XG5cblx0
Y29tcG9uZW50Ll9kaXNhYmxlID0gdHJ1ZTtcblxuXHRpZiAoY29tcG9uZW50LmNvbXBvbmVudFdp
bGxVbm1vdW50KSBjb21wb25lbnQuY29tcG9uZW50V2lsbFVubW91bnQoKTtcblxuXHRjb21wb25l
bnQuYmFzZSA9IG51bGw7XG5cblx0Ly8gcmVjdXJzaXZlbHkgdGVhciBkb3duICYgcmVjb2xsZWN0
IGhpZ2gtb3JkZXIgY29tcG9uZW50IGNoaWxkcmVuOlxuXHR2YXIgaW5uZXIgPSBjb21wb25lbnQu
X2NvbXBvbmVudDtcblx0aWYgKGlubmVyKSB7XG5cdFx0dW5tb3VudENvbXBvbmVudChpbm5lcik7
XG5cdH0gZWxzZSBpZiAoYmFzZSkge1xuXHRcdGlmIChiYXNlWydfX3ByZWFjdGF0dHJfJ10gJiYg
YmFzZVsnX19wcmVhY3RhdHRyXyddLnJlZikgYmFzZVsnX19wcmVhY3RhdHRyXyddLnJlZihudWxs
KTtcblxuXHRcdGNvbXBvbmVudC5uZXh0QmFzZSA9IGJhc2U7XG5cblx0XHRyZW1vdmVOb2RlKGJh
c2UpO1xuXHRcdGNvbGxlY3RDb21wb25lbnQoY29tcG9uZW50KTtcblxuXHRcdHJlbW92ZUNoaWxk
cmVuKGJhc2UpO1xuXHR9XG5cblx0aWYgKGNvbXBvbmVudC5fX3JlZikgY29tcG9uZW50Ll9fcmVm
KG51bGwpO1xufVxuXG4vKiogQmFzZSBDb21wb25lbnQgY2xhc3MuXG4gKlx0UHJvdmlkZXMgYHNl
dFN0YXRlKClgIGFuZCBgZm9yY2VVcGRhdGUoKWAsIHdoaWNoIHRyaWdnZXIgcmVuZGVyaW5nLlxu
ICpcdEBwdWJsaWNcbiAqXG4gKlx0QGV4YW1wbGVcbiAqXHRjbGFzcyBNeUZvbyBleHRlbmRzIENv
bXBvbmVudCB7XG4gKlx0XHRyZW5kZXIocHJvcHMsIHN0YXRlKSB7XG4gKlx0XHRcdHJldHVybiA8
ZGl2IC8+O1xuICpcdFx0fVxuICpcdH1cbiAqL1xuZnVuY3Rpb24gQ29tcG9uZW50KHByb3BzLCBj
b250ZXh0KSB7XG5cdHRoaXMuX2RpcnR5ID0gdHJ1ZTtcblxuXHQvKiogQHB1YmxpY1xuICAqXHRA
dHlwZSB7b2JqZWN0fVxuICAqL1xuXHR0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuXG5cdC8qKiBA
cHVibGljXG4gICpcdEB0eXBlIHtvYmplY3R9XG4gICovXG5cdHRoaXMucHJvcHMgPSBwcm9wcztc
blxuXHQvKiogQHB1YmxpY1xuICAqXHRAdHlwZSB7b2JqZWN0fVxuICAqL1xuXHR0aGlzLnN0YXRl
ID0gdGhpcy5zdGF0ZSB8fCB7fTtcbn1cblxuZXh0ZW5kKENvbXBvbmVudC5wcm90b3R5cGUsIHtc
blxuXHQvKiogUmV0dXJucyBhIGBib29sZWFuYCBpbmRpY2F0aW5nIGlmIHRoZSBjb21wb25lbnQg
c2hvdWxkIHJlLXJlbmRlciB3aGVuIHJlY2VpdmluZyB0aGUgZ2l2ZW4gYHByb3BzYCBhbmQgYHN0
YXRlYC5cbiAgKlx0QHBhcmFtIHtvYmplY3R9IG5leHRQcm9wc1xuICAqXHRAcGFyYW0ge29iamVj
dH0gbmV4dFN0YXRlXG4gICpcdEBwYXJhbSB7b2JqZWN0fSBuZXh0Q29udGV4dFxuICAqXHRAcmV0
dXJucyB7Qm9vbGVhbn0gc2hvdWxkIHRoZSBjb21wb25lbnQgcmUtcmVuZGVyXG4gICpcdEBuYW1l
IHNob3VsZENvbXBvbmVudFVwZGF0ZVxuICAqXHRAZnVuY3Rpb25cbiAgKi9cblxuXHQvKiogVXBk
YXRlIGNvbXBvbmVudCBzdGF0ZSBieSBjb3B5aW5nIHByb3BlcnRpZXMgZnJvbSBgc3RhdGVgIHRv
IGB0aGlzLnN0YXRlYC5cbiAgKlx0QHBhcmFtIHtvYmplY3R9IHN0YXRlXHRcdEEgaGFzaCBvZiBz
dGF0ZSBwcm9wZXJ0aWVzIHRvIHVwZGF0ZSB3aXRoIG5ldyB2YWx1ZXNcbiAgKlx0QHBhcmFtIHtm
dW5jdGlvbn0gY2FsbGJhY2tcdEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIG9uY2UgY29tcG9uZW50
IHN0YXRlIGlzIHVwZGF0ZWRcbiAgKi9cblx0c2V0U3RhdGU6IGZ1bmN0aW9uIHNldFN0YXRlKHN0
YXRlLCBjYWxsYmFjaykge1xuXHRcdHZhciBzID0gdGhpcy5zdGF0ZTtcblx0XHRpZiAoIXRoaXMu
cHJldlN0YXRlKSB0aGlzLnByZXZTdGF0ZSA9IGV4dGVuZCh7fSwgcyk7XG5cdFx0ZXh0ZW5kKHMs
IHR5cGVvZiBzdGF0ZSA9PT0gJ2Z1bmN0aW9uJyA/IHN0YXRlKHMsIHRoaXMucHJvcHMpIDogc3Rh
dGUpO1xuXHRcdGlmIChjYWxsYmFjaykgKHRoaXMuX3JlbmRlckNhbGxiYWNrcyA9IHRoaXMuX3Jl
bmRlckNhbGxiYWNrcyB8fCBbXSkucHVzaChjYWxsYmFjayk7XG5cdFx0ZW5xdWV1ZVJlbmRlcih0
aGlzKTtcblx0fSxcblxuXG5cdC8qKiBJbW1lZGlhdGVseSBwZXJmb3JtIGEgc3luY2hyb25vdXMg
cmUtcmVuZGVyIG9mIHRoZSBjb21wb25lbnQuXG4gICpcdEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxi
YWNrXHRcdEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGFmdGVyIGNvbXBvbmVudCBpcyByZS1yZW5k
ZXJlZC5cbiAgKlx0QHByaXZhdGVcbiAgKi9cblx0Zm9yY2VVcGRhdGU6IGZ1bmN0aW9uIGZvcmNl
VXBkYXRlKGNhbGxiYWNrKSB7XG5cdFx0aWYgKGNhbGxiYWNrKSAodGhpcy5fcmVuZGVyQ2FsbGJh
Y2tzID0gdGhpcy5fcmVuZGVyQ2FsbGJhY2tzIHx8IFtdKS5wdXNoKGNhbGxiYWNrKTtcblx0XHRy
ZW5kZXJDb21wb25lbnQodGhpcywgMik7XG5cdH0sXG5cblxuXHQvKiogQWNjZXB0cyBgcHJvcHNg
IGFuZCBgc3RhdGVgLCBhbmQgcmV0dXJucyBhIG5ldyBWaXJ0dWFsIERPTSB0cmVlIHRvIGJ1aWxk
LlxuICAqXHRWaXJ0dWFsIERPTSBpcyBnZW5lcmFsbHkgY29uc3RydWN0ZWQgdmlhIFtKU1hdKGh0
dHA6Ly9qYXNvbmZvcm1hdC5jb20vd3RmLWlzLWpzeCkuXG4gICpcdEBwYXJhbSB7b2JqZWN0fSBw
cm9wc1x0XHRQcm9wcyAoZWc6IEpTWCBhdHRyaWJ1dGVzKSByZWNlaXZlZCBmcm9tIHBhcmVudCBl
bGVtZW50L2NvbXBvbmVudFxuICAqXHRAcGFyYW0ge29iamVjdH0gc3RhdGVcdFx0VGhlIGNvbXBv
bmVudCdzIGN1cnJlbnQgc3RhdGVcbiAgKlx0QHBhcmFtIHtvYmplY3R9IGNvbnRleHRcdFx0Q29u
dGV4dCBvYmplY3QgKGlmIGEgcGFyZW50IGNvbXBvbmVudCBoYXMgcHJvdmlkZWQgY29udGV4dClc
biAgKlx0QHJldHVybnMgVk5vZGVcbiAgKi9cblx0cmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoKSB7
fVxufSk7XG5cbi8qKiBSZW5kZXIgSlNYIGludG8gYSBgcGFyZW50YCBFbGVtZW50LlxuICpcdEBw
YXJhbSB7Vk5vZGV9IHZub2RlXHRcdEEgKEpTWCkgVk5vZGUgdG8gcmVuZGVyXG4gKlx0QHBhcmFt
IHtFbGVtZW50fSBwYXJlbnRcdFx0RE9NIGVsZW1lbnQgdG8gcmVuZGVyIGludG9cbiAqXHRAcGFy
YW0ge0VsZW1lbnR9IFttZXJnZV1cdEF0dGVtcHQgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIERPTSB0
cmVlIHJvb3RlZCBhdCBgbWVyZ2VgXG4gKlx0QHB1YmxpY1xuICpcbiAqXHRAZXhhbXBsZVxuICpc
dC8vIHJlbmRlciBhIGRpdiBpbnRvIDxib2R5PjpcbiAqXHRyZW5kZXIoPGRpdiBpZD1cImhlbGxv
XCI+aGVsbG8hPC9kaXY+LCBkb2N1bWVudC5ib2R5KTtcbiAqXG4gKlx0QGV4YW1wbGVcbiAqXHQv
LyByZW5kZXIgYSBcIlRoaW5nXCIgY29tcG9uZW50IGludG8gI2ZvbzpcbiAqXHRjb25zdCBUaGlu
ZyA9ICh7IG5hbWUgfSkgPT4gPHNwYW4+eyBuYW1lIH08L3NwYW4+O1xuICpcdHJlbmRlcig8VGhp
bmcgbmFtZT1cIm9uZVwiIC8+LCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjZm9vJykpO1xuICov
XG5mdW5jdGlvbiByZW5kZXIodm5vZGUsIHBhcmVudCwgbWVyZ2UpIHtcbiAgcmV0dXJuIGRpZmYo
bWVyZ2UsIHZub2RlLCB7fSwgZmFsc2UsIHBhcmVudCwgZmFsc2UpO1xufVxuXG52YXIgcHJlYWN0
ID0ge1xuXHRoOiBoLFxuXHRjcmVhdGVFbGVtZW50OiBoLFxuXHRjbG9uZUVsZW1lbnQ6IGNsb25l
RWxlbWVudCxcblx0Q29tcG9uZW50OiBDb21wb25lbnQsXG5cdHJlbmRlcjogcmVuZGVyLFxuXHRy
ZXJlbmRlcjogcmVyZW5kZXIsXG5cdG9wdGlvbnM6IG9wdGlvbnNcbn07XG5cbmV4cG9ydCB7IGgs
IGggYXMgY3JlYXRlRWxlbWVudCwgY2xvbmVFbGVtZW50LCBDb21wb25lbnQsIHJlbmRlciwgcmVy
ZW5kZXIsIG9wdGlvbnMgfTtleHBvcnQgZGVmYXVsdCBwcmVhY3Q7XG4vLyMgc291cmNlTWFwcGlu
Z1VSTD1wcmVhY3QuZXNtLmpzLm1hcFxuIiwiZnVuY3Rpb24gZGx2KG9iaiwga2V5LCBkZWYsIHAp
IHtcblx0cCA9IDA7XG5cdGtleSA9IGtleS5zcGxpdCA/IGtleS5zcGxpdCgnLicpIDoga2V5O1xu
XHR3aGlsZSAob2JqICYmIHA8a2V5Lmxlbmd0aCkgeyBvYmogPSBvYmpba2V5W3ArK11dOyB9XG5c
dHJldHVybiBvYmo9PT11bmRlZmluZWQgPyBkZWYgOiBvYmo7XG59XG5cbi8qKiBDcmVhdGUgYW4g
RXZlbnQgaGFuZGxlciBmdW5jdGlvbiB0aGF0IHNldHMgYSBnaXZlbiBzdGF0ZSBwcm9wZXJ0eS5c
biAqXHRAcGFyYW0ge0NvbXBvbmVudH0gY29tcG9uZW50XHRUaGUgY29tcG9uZW50IHdob3NlIHN0
YXRlIHNob3VsZCBiZSB1cGRhdGVkXG4gKlx0QHBhcmFtIHtzdHJpbmd9IGtleVx0XHRcdFx0QSBk
b3Qtbm90YXRlZCBrZXkgcGF0aCB0byB1cGRhdGUgaW4gdGhlIGNvbXBvbmVudCdzIHN0YXRlXG4g
Klx0QHBhcmFtIHtzdHJpbmd9IGV2ZW50UGF0aFx0XHRBIGRvdC1ub3RhdGVkIGtleSBwYXRoIHRv
IHRoZSB2YWx1ZSB0aGF0IHNob3VsZCBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgRXZlbnQgb3IgY29t
cG9uZW50XG4gKlx0QHJldHVybnMge2Z1bmN0aW9ufSBsaW5rZWRTdGF0ZUhhbmRsZXJcbiAqL1xu
ZnVuY3Rpb24gbGlua1N0YXRlKGNvbXBvbmVudCwga2V5LCBldmVudFBhdGgpIHtcblx0dmFyIHBh
dGggPSBrZXkuc3BsaXQoJy4nKTtcblx0cmV0dXJuIGZ1bmN0aW9uKGUpIHtcblx0XHR2YXIgdCA9
IGUgJiYgZS50YXJnZXQgfHwgdGhpcyxcblx0XHRcdHN0YXRlID0ge30sXG5cdFx0XHRvYmogPSBz
dGF0ZSxcblx0XHRcdHYgPSB0eXBlb2YgZXZlbnRQYXRoPT09J3N0cmluZycgPyBkbHYoZSwgZXZl
bnRQYXRoKSA6IHQubm9kZU5hbWUgPyAodC50eXBlLm1hdGNoKC9eY2hlfHJhZC8pID8gdC5jaGVj
a2VkIDogdC52YWx1ZSkgOiBlLFxuXHRcdFx0aSA9IDA7XG5cdFx0Zm9yICggOyBpPHBhdGgubGVu
Z3RoLTE7IGkrKykge1xuXHRcdFx0b2JqID0gb2JqW3BhdGhbaV1dIHx8IChvYmpbcGF0aFtpXV0g
PSAhaSAmJiBjb21wb25lbnQuc3RhdGVbcGF0aFtpXV0gfHwge30pO1xuXHRcdH1cblx0XHRvYmpb
cGF0aFtpXV0gPSB2O1xuXHRcdGNvbXBvbmVudC5zZXRTdGF0ZShzdGF0ZSk7XG5cdH07XG59XG5c
bmV4cG9ydCBkZWZhdWx0IGxpbmtTdGF0ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxpbmtzdGF0
ZS5lcy5qcy5tYXBcbiIsImV4cG9ydCBmdW5jdGlvbiB1dWlkKCkge1xuICAgIGxldCB1dWlkID0g
Jyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzMjsgaSsrKSB7XG4gICAgICAgIGxldCByYW5k
b20gPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwO1xuICAgICAgICBpZiAoaSA9PT0gOCB8fCBpID09
PSAxMiB8fCBpID09PSAxNiB8fCBpID09PSAyMCkge1xuICAgICAgICAgICAgdXVpZCArPSAnLSc7
XG4gICAgICAgIH1cbiAgICAgICAgdXVpZCArPSAoaSA9PT0gMTIgPyA0IDogKGkgPT09IDE2ID8g
KHJhbmRvbSAmIDMgfCA4KSA6IHJhbmRvbSkpLnRvU3RyaW5nKDE2KTtcbiAgICB9XG4gICAgcmV0
dXJuIHV1aWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwbHVyYWxpemUoY291bnQsIHdvcmQpIHtc
biAgICByZXR1cm4gY291bnQgPT09IDEgPyB3b3JkIDogd29yZCArICdzJztcbn1cblxuZXhwb3J0
IGZ1bmN0aW9uIHN0b3JlKG5hbWVzcGFjZSwgZGF0YSkge1xuICAgIC8vIGlmIChkYXRhKSByZXR1
cm4gbG9jYWxTdG9yYWdlW25hbWVzcGFjZV0gPSBKU09OLnN0cmluZ2lmeShkYXRhKTtcblxuICAg
IC8vIGxldCBzdG9yZSA9IGxvY2FsU3RvcmFnZVtuYW1lc3BhY2VdO1xuICAgIC8vIHJldHVybiBz
dG9yZSAmJiBKU09OLnBhcnNlKHN0b3JlKSB8fCBbXTtcbiAgICByZXR1cm4gW107XG59XG4iLCJp
bXBvcnQgeyB1dWlkLCBzdG9yZSB9IGZyb20gJy4vdXRpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNs
YXNzIFRvZG9Nb2RlbCB7XG4gICAgY29uc3RydWN0b3Ioa2V5LCBzdWIpIHtcbiAgICAgICAgdGhp
cy5rZXkgPSBrZXk7XG4gICAgICAgIHRoaXMudG9kb3MgPSBzdG9yZShrZXkpIHx8IFtdO1xuICAg
ICAgICB0aGlzLm9uQ2hhbmdlcyA9IFtzdWJdO1xuICAgIH1cblxuICAgIGluZm9ybSgpIHtcbiAg
ICAgICAgc3RvcmUodGhpcy5rZXksIHRoaXMudG9kb3MpO1xuICAgICAgICB0aGlzLm9uQ2hhbmdl
cy5mb3JFYWNoKCBjYiA9PiBjYigpICk7XG4gICAgfVxuXG4gICAgYWRkVG9kbyh0aXRsZSkge1xu
ICAgICAgICB0aGlzLnRvZG9zID0gdGhpcy50b2Rvcy5jb25jYXQoe1xuICAgICAgICAgICAgaWQ6
IHV1aWQoKSxcbiAgICAgICAgICAgIHRpdGxlLFxuICAgICAgICAgICAgY29tcGxldGVkOiBmYWxz
ZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pbmZvcm0oKTtcbiAgICB9XG5cbiAgICB0b2dn
bGVBbGwoY29tcGxldGVkKSB7XG4gICAgICAgIHRoaXMudG9kb3MgPSB0aGlzLnRvZG9zLm1hcChc
biAgICAgICAgICAgIHRvZG8gPT4gKHsgLi4udG9kbywgY29tcGxldGVkIH0pXG4gICAgICAgICk7
XG4gICAgICAgIHRoaXMuaW5mb3JtKCk7XG4gICAgfVxuXG4gICAgdG9nZ2xlKHRvZG9Ub1RvZ2ds
ZSkge1xuICAgICAgICB0aGlzLnRvZG9zID0gdGhpcy50b2Rvcy5tYXAoIHRvZG8gPT4gKFxuICAg
ICAgICAgICAgdG9kbyAhPT0gdG9kb1RvVG9nZ2xlID8gdG9kbyA6ICh7IC4uLnRvZG8sIGNvbXBs
ZXRlZDogIXRvZG8uY29tcGxldGVkIH0pXG4gICAgICAgICkgKTtcbiAgICAgICAgdGhpcy5pbmZv
cm0oKTtcbiAgICB9XG5cbiAgICBkZXN0cm95KHRvZG8pIHtcbiAgICAgICAgdGhpcy50b2RvcyA9
IHRoaXMudG9kb3MuZmlsdGVyKCB0ID0+IHQgIT09IHRvZG8gKTtcbiAgICAgICAgdGhpcy5pbmZv
cm0oKTtcbiAgICB9XG5cbiAgICBzYXZlKHRvZG9Ub1NhdmUsIHRpdGxlKSB7XG4gICAgICAgIHRo
aXMudG9kb3MgPSB0aGlzLnRvZG9zLm1hcCggdG9kbyA9PiAoXG4gICAgICAgICAgICB0b2RvICE9
PSB0b2RvVG9TYXZlID8gdG9kbyA6ICh7IC4uLnRvZG8sIHRpdGxlIH0pXG4gICAgICAgICkpO1xu
ICAgICAgICB0aGlzLmluZm9ybSgpO1xuICAgIH1cblxuICAgIGNsZWFyQ29tcGxldGVkKCkge1xu
ICAgICAgICB0aGlzLnRvZG9zID0gdGhpcy50b2Rvcy5maWx0ZXIoIHRvZG8gPT4gIXRvZG8uY29t
cGxldGVkICk7XG4gICAgICAgIHRoaXMuaW5mb3JtKCk7XG4gICAgfVxufVxuIiwiLyohXG4gIENv
cHlyaWdodCAoYykgMjAxNiBKZWQgV2F0c29uLlxuICBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExp
Y2Vuc2UgKE1JVCksIHNlZVxuICBodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVz
XG4qL1xuLyogZ2xvYmFsIGRlZmluZSAqL1xuXG4oZnVuY3Rpb24gKCkge1xuXHQndXNlIHN0cmlj
dCc7XG5cblx0dmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXG5cdGZ1bmN0aW9uIGNs
YXNzTmFtZXMgKCkge1xuXHRcdHZhciBjbGFzc2VzID0gW107XG5cblx0XHRmb3IgKHZhciBpID0g
MDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGFyZyA9IGFyZ3VtZW50
c1tpXTtcblx0XHRcdGlmICghYXJnKSBjb250aW51ZTtcblxuXHRcdFx0dmFyIGFyZ1R5cGUgPSB0
eXBlb2YgYXJnO1xuXG5cdFx0XHRpZiAoYXJnVHlwZSA9PT0gJ3N0cmluZycgfHwgYXJnVHlwZSA9
PT0gJ251bWJlcicpIHtcblx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGFyZyk7XG5cdFx0XHR9IGVsc2Ug
aWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuXHRcdFx0XHRjbGFzc2VzLnB1c2goY2xhc3NOYW1l
cy5hcHBseShudWxsLCBhcmcpKTtcblx0XHRcdH0gZWxzZSBpZiAoYXJnVHlwZSA9PT0gJ29iamVj
dCcpIHtcblx0XHRcdFx0Zm9yICh2YXIga2V5IGluIGFyZykge1xuXHRcdFx0XHRcdGlmIChoYXNP
d24uY2FsbChhcmcsIGtleSkgJiYgYXJnW2tleV0pIHtcblx0XHRcdFx0XHRcdGNsYXNzZXMucHVz
aChrZXkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJl
dHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcblx0fVxuXG5cdGlmICh0eXBlb2YgbW9kdWxlICE9PSAn
dW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuXHRcdG1vZHVsZS5leHBvcnRzID0gY2xh
c3NOYW1lcztcblx0fSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIHR5
cGVvZiBkZWZpbmUuYW1kID09PSAnb2JqZWN0JyAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gcmVn
aXN0ZXIgYXMgJ2NsYXNzbmFtZXMnLCBjb25zaXN0ZW50IHdpdGggbnBtIHBhY2thZ2UgbmFtZVxu
XHRcdGRlZmluZSgnY2xhc3NuYW1lcycsIFtdLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4g
Y2xhc3NOYW1lcztcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHR3aW5kb3cuY2xhc3NOYW1lcyA9
IGNsYXNzTmFtZXM7XG5cdH1cbn0oKSk7XG4iLCJpbXBvcnQgY3ggZnJvbSAnY2xhc3NuYW1lcyc7
XG5pbXBvcnQgeyBoLCBDb21wb25lbnQgfSBmcm9tICdwcmVhY3QnO1xuaW1wb3J0IHsgcGx1cmFs
aXplIH0gZnJvbSAnLi91dGlsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9kb0Zvb3RlciBl
eHRlbmRzIENvbXBvbmVudCB7XG4gICAgcmVuZGVyKHsgbm93U2hvd2luZywgY291bnQsIGNvbXBs
ZXRlZENvdW50LCBvbkNsZWFyQ29tcGxldGVkIH0pIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAg
ICAgICAgIDxmb290ZXIgY2xhc3M9XCJmb290ZXJcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBj
bGFzcz1cInRvZG8tY291bnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz57Y291bnR9
PC9zdHJvbmc+IHtwbHVyYWxpemUoY291bnQsICdpdGVtJyl9IGxlZnRcbiAgICAgICAgICAgICAg
ICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiZmlsdGVyc1wiPlxuICAgICAg
ICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiIy9c
IiBjbGFzcz17Y3goeyBzZWxlY3RlZDogbm93U2hvd2luZyA9PSAnYWxsJyB9KX0+QWxsPC9hPlxu
ICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICB7JyAnfVxuICAg
ICAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwi
Iy9hY3RpdmVcIiBjbGFzcz17Y3goeyBzZWxlY3RlZDogbm93U2hvd2luZyA9PSAnYWN0aXZlJyB9
KX0+QWN0aXZlPC9hPlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAg
ICAgICB7JyAnfVxuICAgICAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICAg
ICAgICA8YSBocmVmPVwiIy9jb21wbGV0ZWRcIiBjbGFzcz17Y3goeyBzZWxlY3RlZDogbm93U2hv
d2luZyA9PSAnY29tcGxldGVkJyB9KX0+Q29tcGxldGVkPC9hPlxuICAgICAgICAgICAgICAgICAg
ICA8L2xpPlxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgeyBjb21wbGV0
ZWRDb3VudCA+IDAgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2xl
YXItY29tcGxldGVkXCIgb25DbGljaz17b25DbGVhckNvbXBsZXRlZH0+XG4gICAgICAgICAgICAg
ICAgICAgICAgICBDbGVhciBjb21wbGV0ZWRcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+
XG4gICAgICAgICAgICAgICAgKSB9XG4gICAgICAgICAgICA8L2Zvb3Rlcj5cbiAgICAgICAgKTtc
biAgICB9XG59XG4iLCJpbXBvcnQgY3ggZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBoLCBD
b21wb25lbnQgfSBmcm9tICdwcmVhY3QnO1xuXG5jb25zdCBFU0NBUEVfS0VZID0gMjc7XG5jb25z
dCBFTlRFUl9LRVkgPSAxMztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9kb0l0ZW0gZXh0ZW5k
cyBDb21wb25lbnQge1xuICAgIGhhbmRsZVN1Ym1pdCA9ICgpID0+IHtcbiAgICAgICAgbGV0IHsg
b25TYXZlLCBvbkRlc3Ryb3ksIHRvZG8gfSA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgICB2YWwg
PSB0aGlzLnN0YXRlLmVkaXRUZXh0LnRyaW0oKTtcbiAgICAgICAgaWYgKHZhbCkge1xuICAgICAg
ICAgICAgb25TYXZlKHRvZG8sIHZhbCk7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgZWRp
dFRleHQ6IHZhbCB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG9u
RGVzdHJveSh0b2RvKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBoYW5kbGVFZGl0ID0gKCkg
PT4ge1xuICAgICAgICBsZXQgeyBvbkVkaXQsIHRvZG8gfSA9IHRoaXMucHJvcHM7XG4gICAgICAg
IG9uRWRpdCh0b2RvKTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGVkaXRUZXh0OiB0b2RvLnRp
dGxlIH0pO1xuICAgIH07XG5cbiAgICB0b2dnbGUgPSBlID0+IHtcbiAgICAgICAgbGV0IHsgb25U
b2dnbGUsIHRvZG8gfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIG9uVG9nZ2xlKHRvZG8pO1xuICAg
ICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfTtcblxuICAgIGhhbmRsZUtleURvd24gPSBl
ID0+IHtcbiAgICAgICAgaWYgKGUud2hpY2g9PT1FU0NBUEVfS0VZKSB7XG4gICAgICAgICAgICBs
ZXQgeyB0b2RvIH0gPSB0aGlzLnByb3BzO1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGVk
aXRUZXh0OiB0b2RvLnRpdGxlIH0pO1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkNhbmNlbCh0
b2RvKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChlLndoaWNoPT09RU5URVJfS0VZKSB7
XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVN1Ym1pdCgpO1xuICAgICAgICB9XG4gICAgfTtcblxu
ICAgIGhhbmRsZURlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMucHJvcHMub25EZXN0cm95
KHRoaXMucHJvcHMudG9kbyk7XG4gICAgfTtcblxuICAgIC8vIHNob3VsZENvbXBvbmVudFVwZGF0
ZSh7IHRvZG8sIGVkaXRpbmcsIGVkaXRUZXh0IH0pIHtcbiAgICAvLyAgcmV0dXJuIChcbiAgICAv
LyAgICAgIHRvZG8gIT09IHRoaXMucHJvcHMudG9kbyB8fFxuICAgIC8vICAgICAgZWRpdGluZyAh
PT0gdGhpcy5wcm9wcy5lZGl0aW5nIHx8XG4gICAgLy8gICAgICBlZGl0VGV4dCAhPT0gdGhpcy5z
dGF0ZS5lZGl0VGV4dFxuICAgIC8vICApO1xuICAgIC8vIH1cblxuICAgIGNvbXBvbmVudERpZFVw
ZGF0ZSgpIHtcbiAgICAgICAgbGV0IG5vZGUgPSB0aGlzLmJhc2UgJiYgdGhpcy5iYXNlLnF1ZXJ5
U2VsZWN0b3IoJy5lZGl0Jyk7XG4gICAgICAgIGlmIChub2RlKSBub2RlLmZvY3VzKCk7XG4gICAg
fVxuXG4gICAgcmVuZGVyKHsgdG9kbzp7IHRpdGxlLCBjb21wbGV0ZWQgfSwgb25Ub2dnbGUsIG9u
RGVzdHJveSwgZWRpdGluZyB9LCB7IGVkaXRUZXh0IH0pIHtcbiAgICAgICAgcmV0dXJuIChcbiAg
ICAgICAgICAgIDxsaSBjbGFzcz17Y3goeyBjb21wbGV0ZWQsIGVkaXRpbmcgfSl9PlxuICAgICAg
ICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2aWV3XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1
dFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0b2dnbGVcIlxuICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNo
ZWNrZWQ9e2NvbXBsZXRlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlz
LnRvZ2dsZX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPGxh
YmVsIG9uRGJsQ2xpY2s9e3RoaXMuaGFuZGxlRWRpdH0+e3RpdGxlfTwvbGFiZWw+XG4gICAgICAg
ICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkZXN0cm95XCIgb25DbGljaz17dGhpcy5oYW5k
bGVEZXN0cm95fSAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIHsg
ZWRpdGluZyAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAg
ICAgICAgICAgY2xhc3M9XCJlZGl0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtl
ZGl0VGV4dH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQmx1cj17dGhpcy5oYW5kbGVTdWJt
aXR9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbklucHV0PXt0aGlzLmxpbmtTdGF0ZSgnZWRp
dFRleHQnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uS2V5RG93bj17dGhpcy5oYW5kbGVL
ZXlEb3dufVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICkgfVxuICAg
ICAgICAgICAgPC9saT5cbiAgICAgICAgKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBoLCBDb21w
b25lbnQgfSBmcm9tICdwcmVhY3QnO1xuaW1wb3J0IGxpbmtTdGF0ZSBmcm9tICdsaW5rc3RhdGUn
O1xuXG5pbXBvcnQgVG9kb01vZGVsIGZyb20gJy4vbW9kZWwnO1xuaW1wb3J0IFRvZG9Gb290ZXIg
ZnJvbSAnLi9mb290ZXInO1xuaW1wb3J0IFRvZG9JdGVtIGZyb20gJy4vaXRlbSc7XG5cbmNvbnN0
IEVOVEVSX0tFWSA9IDEzO1xuXG5jb25zdCBGSUxURVJTID0ge1xuICAgIGFsbDogdG9kbyA9PiB0
cnVlLFxuICAgIGFjdGl2ZTogdG9kbyA9PiAhdG9kby5jb21wbGV0ZWQsXG4gICAgY29tcGxldGVk
OiB0b2RvID0+IHRvZG8uY29tcGxldGVkXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHAg
ZXh0ZW5kcyBDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigp
O1xuICAgICAgICB0aGlzLm1vZGVsID0gbmV3IFRvZG9Nb2RlbCgncHJlYWN0LXRvZG9zJywgKCkg
PT4gdGhpcy5zZXRTdGF0ZSh7fSkgKTtcbiAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcignaGFzaGNo
YW5nZScsIHRoaXMuaGFuZGxlUm91dGUuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuaGFuZGxl
Um91dGUoKTtcbiAgICB9XG5cbiAgICBoYW5kbGVSb3V0ZSgpIHtcbiAgICAgICAgbGV0IG5vd1No
b3dpbmcgPSBTdHJpbmcobG9jYXRpb24uaGFzaCB8fCAnJykuc3BsaXQoJy8nKS5wb3AoKTtcbiAg
ICAgICAgaWYgKCFGSUxURVJTW25vd1Nob3dpbmddKSB7XG4gICAgICAgICAgICBub3dTaG93aW5n
ID0gJ2FsbCc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IG5vd1Nob3dpbmcg
fSk7XG4gICAgfVxuXG4gICAgaGFuZGxlTmV3VG9kb0tleURvd24gPSAoZSkgPT4ge1xuICAgICAg
ICBpZiAoZS5rZXlDb2RlICE9PSBFTlRFUl9LRVkpIHJldHVybjtcbiAgICAgICAgZS5wcmV2ZW50
RGVmYXVsdCgpO1xuXG4gICAgICAgIC8vIGxldCB2YWwgPSAnJztcbiAgICAgICAgLy8gaWYgKHRo
aXMuc3RhdGUubmV3VG9kbyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vICB2YWwgPSBlLnRh
cmdldC52YWx1ZS50cmltKCk7XG4gICAgICAgIC8vIH1cblxuICAgICAgICBsZXQgdmFsID0gZS50
YXJnZXQudmFsdWUudHJpbSgpO1xuXG4gICAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgICAgIHRo
aXMubW9kZWwuYWRkVG9kbyh2YWwpO1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IG5ld1Rv
ZG86ICcnIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHRvZ2dsZUFsbCA9IGV2ZW50ID0+
IHtcbiAgICAgICAgbGV0IGNoZWNrZWQgPSBldmVudC50YXJnZXQuY2hlY2tlZDtcbiAgICAgICAg
dGhpcy5tb2RlbC50b2dnbGVBbGwoY2hlY2tlZCk7XG4gICAgfTtcblxuICAgIHRvZ2dsZSA9IHRv
ZG8gPT4ge1xuICAgICAgICB0aGlzLm1vZGVsLnRvZ2dsZSh0b2RvKTtcbiAgICB9O1xuXG4gICAg
ZGVzdHJveSA9IHRvZG8gPT4ge1xuICAgICAgICB0aGlzLm1vZGVsLmRlc3Ryb3kodG9kbyk7XG4g
ICAgfTtcblxuICAgIGVkaXQgPSB0b2RvID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGVk
aXRpbmc6IHRvZG8uaWQgfSk7XG4gICAgfTtcblxuICAgIHNhdmUgPSAodG9kb1RvU2F2ZSwgdGV4
dCkgPT4ge1xuICAgICAgICB0aGlzLm1vZGVsLnNhdmUodG9kb1RvU2F2ZSwgdGV4dCk7XG4gICAg
ICAgIHRoaXMuc2V0U3RhdGUoeyBlZGl0aW5nOiBudWxsIH0pO1xuICAgIH07XG5cbiAgICBjYW5j
ZWwgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBlZGl0aW5nOiBudWxsIH0pO1xu
ICAgIH07XG5cbiAgICBjbGVhckNvbXBsZXRlZCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5tb2Rl
bC5jbGVhckNvbXBsZXRlZCgpO1xuICAgIH07XG5cbiAgICByZW5kZXIoeyB9LCB7IG5vd1Nob3dp
bmcgPSBBTExfVE9ET1MsIG5ld1RvZG8sIGVkaXRpbmcgfSkge1xuICAgICAgICBsZXQgeyB0b2Rv
cyB9ID0gdGhpcy5tb2RlbCxcbiAgICAgICAgICAgIHNob3duVG9kb3MgPSB0b2Rvcy5maWx0ZXIo
IEZJTFRFUlNbbm93U2hvd2luZ10gKSxcbiAgICAgICAgICAgIGFjdGl2ZVRvZG9Db3VudCA9IHRv
ZG9zLnJlZHVjZSggKGEsIHRvZG8pID0+IGEgKyAodG9kby5jb21wbGV0ZWQgPyAwIDogMSksIDAp
LFxuICAgICAgICAgICAgY29tcGxldGVkQ291bnQgPSB0b2Rvcy5sZW5ndGggLSBhY3RpdmVUb2Rv
Q291bnQ7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAg
ICAgICAgPGhlYWRlciBjbGFzcz1cImhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8aDE+
dG9kb3M8L2gxPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAg
ICAgICAgIGNsYXNzPVwibmV3LXRvZG9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vo
b2xkZXI9XCJXaGF0IG5lZWRzIHRvIGJlIGRvbmU/XCJcbiAgICAgICAgICAgICAgICAgICAgICAg
IHZhbHVlPXtuZXdUb2RvfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25LZXlEb3duPXt0aGlz
LmhhbmRsZU5ld1RvZG9LZXlEb3dufVxuICAgICAgICAgICAgICAgICAgICAgICAgb25JbnB1dD17
bGlua1N0YXRlKHRoaXMsICduZXdUb2RvJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRv
Rm9jdXM9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9o
ZWFkZXI+XG5cbiAgICAgICAgICAgICAgICB7IHRvZG9zLmxlbmd0aCA/IChcbiAgICAgICAgICAg
ICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJtYWluXCI+XG4gICAgICAgICAgICAgICAgICAgICAg
ICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRvZ2dsZS1hbGxc
IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMudG9nZ2xlQWxsfVxuICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2FjdGl2ZVRvZG9Db3VudCA9PT0gMH1cbiAgICAg
ICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9
XCJ0b2RvLWxpc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHNob3duVG9kb3Mu
bWFwKCB0b2RvID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRvZG9JdGVt
XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2RvPXt0b2RvfVxuICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Ub2dnbGU9e3RoaXMudG9nZ2xlfVxuICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25EZXN0cm95PXt0aGlzLmRlc3Ryb3l9
XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkVkaXQ9e3RoaXMuZWRpdH1c
biAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRpbmc9e2VkaXRpbmcgPT09
IHRvZG8uaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblNhdmU9e3Ro
aXMuc2F2ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2FuY2VsPXt0
aGlzLmNhbmNlbH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICApKSB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxu
ICAgICAgICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICAgICAgKSA6IG51bGwg
fVxuXG4gICAgICAgICAgICAgICAgeyAoYWN0aXZlVG9kb0NvdW50IHx8IGNvbXBsZXRlZENvdW50
KSA/IChcbiAgICAgICAgICAgICAgICAgICAgPFRvZG9Gb290ZXJcbiAgICAgICAgICAgICAgICAg
ICAgICAgIGNvdW50PXthY3RpdmVUb2RvQ291bnR9XG4gICAgICAgICAgICAgICAgICAgICAgICBj
b21wbGV0ZWRDb3VudD17Y29tcGxldGVkQ291bnR9XG4gICAgICAgICAgICAgICAgICAgICAgICBu
b3dTaG93aW5nPXtub3dTaG93aW5nfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGVhckNv
bXBsZXRlZD17dGhpcy5jbGVhckNvbXBsZXRlZH1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAg
ICAgICAgICAgICAgICApIDogbnVsbCB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtc
biAgICB9XG59XG4iLCJpbXBvcnQgeyBoLCByZW5kZXIgfSBmcm9tICdwcmVhY3QnO1xuaW1wb3J0
IEFwcCBmcm9tICcuL2FwcCc7XG4vLyBpbXBvcnQgJ3RvZG9tdmMtY29tbW9uJztcbi8vIGltcG9y
dCAndG9kb212Yy1jb21tb24vYmFzZS5jc3MnO1xuLy8gaW1wb3J0ICd0b2RvbXZjLWFwcC1jc3Mv
aW5kZXguY3NzJztcbnJlbmRlcig8QXBwIC8+LCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcudG9k
b2FwcCcpKTtcbiJdfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1dl
YnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3ByZWFjdC9kaXN0L2luZGV4Lmh0bWwgYi9XZWJzaXRlcy9i
cm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9wcmVhY3QvZGlzdC9pbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY1ZWVhNTFk
OTI4YTYyMjBkZjkyMjNjOTcwMzkxODA2YmQ1OGUyNDEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJz
aXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9wcmVhY3QvZGlzdC9pbmRleC5odG1sCkBAIC0wLDAgKzEsMTcg
QEAKKzwhZG9jdHlwZSBodG1sPgorPGh0bWwgbGFuZz0iZW4iIGRhdGEtZnJhbWV3b3JrPSJwcmVh
Y3QiPgorICAgIDxoZWFkPgorICAgICAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgICAgICAg
IDx0aXRsZT5QcmVhY3QgVG9kb01WQyBleGFtcGxlPC90aXRsZT4KKyAgICAgICAgPGxpbmsgcmVs
PSJzdHlsZXNoZWV0IiBocmVmPSJ0b2RvbXZjLWNvbW1vbi9iYXNlLmNzcyI+CisgICAgICAgIDxs
aW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0idG9kb212Yy5jc3MiPgorICAgIDwvaGVhZD4KKyAg
ICA8Ym9keT4KKyAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRvZG9hcHAiPjwvc2VjdGlvbj4KKyAg
ICAgICAgPGZvb3RlciBjbGFzcz0iaW5mbyI+CisgICAgICAgICAgICA8cD5Eb3VibGUtY2xpY2sg
dG8gZWRpdCBhIHRvZG88L3A+CisgICAgICAgICAgICA8cD5QYXJ0IG9mIDxhIGhyZWY9Imh0dHA6
Ly90b2RvbXZjLmNvbSI+VG9kb01WQzwvYT48L3A+CisgICAgICAgIDwvZm9vdGVyPgorICAgICAg
ICA8c2NyaXB0IHNyYz0iYXBwLmpzIj48L3NjcmlwdD4KKyAgICA8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9wcmVhY3QvZGlzdC90b2RvbXZjLWNv
bW1vbi9iYXNlLmNzcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEv
cmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3ByZWFjdC9kaXN0L3RvZG9t
dmMtY29tbW9uL2Jhc2UuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRkMjVkM2M4NGFjNmM2YWVmMjZiOTY4M2Ey
YmMxMGM2MWY5NjBjOGYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gu
b3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9wcmVhY3QvZGlzdC90b2RvbXZjLWNvbW1vbi9iYXNlLmNzcwpAQCAtMCwwICsxLDE0MSBAQAor
aHIgeworICAgIG1hcmdpbjogMjBweCAwOworICAgIGJvcmRlcjogMDsKKyAgICBib3JkZXItdG9w
OiAxcHggZGFzaGVkICNjNWM1YzU7CisgICAgYm9yZGVyLWJvdHRvbTogMXB4IGRhc2hlZCAjZjdm
N2Y3OworfQorCisubGVhcm4gYSB7CisgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgICB0ZXh0
LWRlY29yYXRpb246IG5vbmU7CisgICAgY29sb3I6ICNiODNmNDU7Cit9CisKKy5sZWFybiBhOmhv
dmVyIHsKKyAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgICBjb2xvcjogIzc4N2U3
ZTsKK30KKworLmxlYXJuIGgzLAorLmxlYXJuIGg0LAorLmxlYXJuIGg1IHsKKyAgICBtYXJnaW46
IDEwcHggMDsKKyAgICBmb250LXdlaWdodDogNTAwOworICAgIGxpbmUtaGVpZ2h0OiAxLjI7Cisg
ICAgY29sb3I6ICMwMDA7Cit9CisKKy5sZWFybiBoMyB7CisgICAgZm9udC1zaXplOiAyNHB4Owor
fQorCisubGVhcm4gaDQgeworICAgIGZvbnQtc2l6ZTogMThweDsKK30KKworLmxlYXJuIGg1IHsK
KyAgICBtYXJnaW4tYm90dG9tOiAwOworICAgIGZvbnQtc2l6ZTogMTRweDsKK30KKworLmxlYXJu
IHVsIHsKKyAgICBwYWRkaW5nOiAwOworICAgIG1hcmdpbjogMCAwIDMwcHggMjVweDsKK30KKwor
LmxlYXJuIGxpIHsKKyAgICBsaW5lLWhlaWdodDogMjBweDsKK30KKworLmxlYXJuIHAgeworICAg
IGZvbnQtc2l6ZTogMTVweDsKKyAgICBmb250LXdlaWdodDogMzAwOworICAgIGxpbmUtaGVpZ2h0
OiAxLjM7CisgICAgbWFyZ2luLXRvcDogMDsKKyAgICBtYXJnaW4tYm90dG9tOiAwOworfQorCisj
aXNzdWUtY291bnQgeworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisKKy5xdW90ZSB7CisgICAgYm9y
ZGVyOiBub25lOworICAgIG1hcmdpbjogMjBweCAwIDYwcHggMDsKK30KKworLnF1b3RlIHAgewor
ICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworLnF1b3RlIHA6YmVmb3JlIHsKKyAgICBjb250
ZW50OiAn4oCcJzsKKyAgICBmb250LXNpemU6IDUwcHg7CisgICAgb3BhY2l0eTogLjE1OworICAg
IHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IC0yMHB4OworICAgIGxlZnQ6IDNweDsKK30K
KworLnF1b3RlIHA6YWZ0ZXIgeworICAgIGNvbnRlbnQ6ICfigJ0nOworICAgIGZvbnQtc2l6ZTog
NTBweDsKKyAgICBvcGFjaXR5OiAuMTU7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIGJv
dHRvbTogLTQycHg7CisgICAgcmlnaHQ6IDNweDsKK30KKworLnF1b3RlIGZvb3RlciB7CisgICAg
cG9zaXRpb246IGFic29sdXRlOworICAgIGJvdHRvbTogLTQwcHg7CisgICAgcmlnaHQ6IDA7Cit9
CisKKy5xdW90ZSBmb290ZXIgaW1nIHsKKyAgICBib3JkZXItcmFkaXVzOiAzcHg7Cit9CisKKy5x
dW90ZSBmb290ZXIgYSB7CisgICAgbWFyZ2luLWxlZnQ6IDVweDsKKyAgICB2ZXJ0aWNhbC1hbGln
bjogbWlkZGxlOworfQorCisuc3BlZWNoLWJ1YmJsZSB7CisgICAgcG9zaXRpb246IHJlbGF0aXZl
OworICAgIHBhZGRpbmc6IDEwcHg7CisgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAuMDQp
OworICAgIGJvcmRlci1yYWRpdXM6IDVweDsKK30KKworLnNwZWVjaC1idWJibGU6YWZ0ZXIgewor
ICAgIGNvbnRlbnQ6ICcnOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDEwMCU7
CisgICAgcmlnaHQ6IDMwcHg7CisgICAgYm9yZGVyOiAxM3B4IHNvbGlkIHRyYW5zcGFyZW50Owor
ICAgIGJvcmRlci10b3AtY29sb3I6IHJnYmEoMCwgMCwgMCwgLjA0KTsKK30KKworLmxlYXJuLWJh
ciA+IC5sZWFybiB7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHdpZHRoOiAyNzJweDsK
KyAgICB0b3A6IDhweDsKKyAgICBsZWZ0OiAtMzAwcHg7CisgICAgcGFkZGluZzogMTBweDsKKyAg
ICBib3JkZXItcmFkaXVzOiA1cHg7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1
NSwgMjU1LCAuNik7CisgICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogbGVmdDsKKyAgICB0cmFuc2l0
aW9uLWR1cmF0aW9uOiA1MDBtczsKK30KKworQG1lZGlhIChtaW4td2lkdGg6IDg5OXB4KSB7Cisg
ICAgLmxlYXJuLWJhciB7CisgICAgICAgIHdpZHRoOiBhdXRvOworICAgICAgICBwYWRkaW5nLWxl
ZnQ6IDMwMHB4OworICAgIH0KKworICAgIC5sZWFybi1iYXIgPiAubGVhcm4geworICAgICAgICBs
ZWZ0OiA4cHg7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9y
Zy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
cHJlYWN0L2Rpc3QvdG9kb212Yy1jb21tb24vYmFzZS5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5j
aC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL3ByZWFjdC9kaXN0L3RvZG9tdmMtY29tbW9uL2Jhc2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODFlMDA2
YmM1MDJkZGM0Yzc0ZjQ3YmQxM2E4MzkyMjc3ZjgzMGRiOAotLS0gL2Rldi9udWxsCisrKyBiL1dl
YnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3ByZWFjdC9kaXN0L3RvZG9tdmMtY29tbW9uL2Jhc2UuanMK
QEAgLTAsMCArMSwyNDkgQEAKKy8qIGdsb2JhbCBfICovCisoZnVuY3Rpb24gKCkgeworICAgICd1
c2Ugc3RyaWN0JzsKKworICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi8KKyAgICAvLyBVbmRl
cnNjb3JlJ3MgVGVtcGxhdGUgTW9kdWxlCisgICAgLy8gQ291cnRlc3kgb2YgdW5kZXJzY29yZWpz
Lm9yZworICAgIHZhciBfID0gKGZ1bmN0aW9uIChfKSB7CisgICAgICAgIF8uZGVmYXVsdHMgPSBm
dW5jdGlvbiAob2JqZWN0KSB7CisgICAgICAgICAgICBpZiAoIW9iamVjdCkgeworICAgICAgICAg
ICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHZh
ciBhcmdzSW5kZXggPSAxLCBhcmdzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsgYXJnc0luZGV4
IDwgYXJnc0xlbmd0aDsgYXJnc0luZGV4KyspIHsKKyAgICAgICAgICAgICAgICB2YXIgaXRlcmFi
bGUgPSBhcmd1bWVudHNbYXJnc0luZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAoaXRlcmFibGUp
IHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGl0ZXJhYmxlKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0W2tleV0gPT0gbnVsbCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG9iamVjdFtrZXldID0gaXRlcmFibGVba2V5XTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgICAgIH0K
KworICAgICAgICAvLyBCeSBkZWZhdWx0LCBVbmRlcnNjb3JlIHVzZXMgRVJCLXN0eWxlIHRlbXBs
YXRlIGRlbGltaXRlcnMsIGNoYW5nZSB0aGUKKyAgICAgICAgLy8gZm9sbG93aW5nIHRlbXBsYXRl
IHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLgorICAgICAgICBfLnRlbXBs
YXRlU2V0dGluZ3MgPSB7CisgICAgICAgICAgICBldmFsdWF0ZSAgICA6IC88JShbXHNcU10rPykl
Pi9nLAorICAgICAgICAgICAgaW50ZXJwb2xhdGUgOiAvPCU9KFtcc1xTXSs/KSU+L2csCisgICAg
ICAgICAgICBlc2NhcGUgICAgICA6IC88JS0oW1xzXFNdKz8pJT4vZworICAgICAgICB9OworCisg
ICAgICAgIC8vIFdoZW4gY3VzdG9taXppbmcgYHRlbXBsYXRlU2V0dGluZ3NgLCBpZiB5b3UgZG9u
J3Qgd2FudCB0byBkZWZpbmUgYW4KKyAgICAgICAgLy8gaW50ZXJwb2xhdGlvbiwgZXZhbHVhdGlv
biBvciBlc2NhcGluZyByZWdleCwgd2UgbmVlZCBvbmUgdGhhdCBpcworICAgICAgICAvLyBndWFy
YW50ZWVkIG5vdCB0byBtYXRjaC4KKyAgICAgICAgdmFyIG5vTWF0Y2ggPSAvKC4pXi87CisKKyAg
ICAgICAgLy8gQ2VydGFpbiBjaGFyYWN0ZXJzIG5lZWQgdG8gYmUgZXNjYXBlZCBzbyB0aGF0IHRo
ZXkgY2FuIGJlIHB1dCBpbnRvIGEKKyAgICAgICAgLy8gc3RyaW5nIGxpdGVyYWwuCisgICAgICAg
IHZhciBlc2NhcGVzID0geworICAgICAgICAgICAgIiciOiAgICAgICInIiwKKyAgICAgICAgICAg
ICdcXCc6ICAgICAnXFwnLAorICAgICAgICAgICAgJ1xyJzogICAgICdyJywKKyAgICAgICAgICAg
ICdcbic6ICAgICAnbicsCisgICAgICAgICAgICAnXHQnOiAgICAgJ3QnLAorICAgICAgICAgICAg
J1x1MjAyOCc6ICd1MjAyOCcsCisgICAgICAgICAgICAnXHUyMDI5JzogJ3UyMDI5JworICAgICAg
ICB9OworCisgICAgICAgIHZhciBlc2NhcGVyID0gL1xcfCd8XHJ8XG58XHR8XHUyMDI4fFx1MjAy
OS9nOworCisgICAgICAgIC8vIEphdmFTY3JpcHQgbWljcm8tdGVtcGxhdGluZywgc2ltaWxhciB0
byBKb2huIFJlc2lnJ3MgaW1wbGVtZW50YXRpb24uCisgICAgICAgIC8vIFVuZGVyc2NvcmUgdGVt
cGxhdGluZyBoYW5kbGVzIGFyYml0cmFyeSBkZWxpbWl0ZXJzLCBwcmVzZXJ2ZXMgd2hpdGVzcGFj
ZSwKKyAgICAgICAgLy8gYW5kIGNvcnJlY3RseSBlc2NhcGVzIHF1b3RlcyB3aXRoaW4gaW50ZXJw
b2xhdGVkIGNvZGUuCisgICAgICAgIF8udGVtcGxhdGUgPSBmdW5jdGlvbih0ZXh0LCBkYXRhLCBz
ZXR0aW5ncykgeworICAgICAgICAgICAgdmFyIHJlbmRlcjsKKyAgICAgICAgICAgIHNldHRpbmdz
ID0gXy5kZWZhdWx0cyh7fSwgc2V0dGluZ3MsIF8udGVtcGxhdGVTZXR0aW5ncyk7CisKKyAgICAg
ICAgICAgIC8vIENvbWJpbmUgZGVsaW1pdGVycyBpbnRvIG9uZSByZWd1bGFyIGV4cHJlc3Npb24g
dmlhIGFsdGVybmF0aW9uLgorICAgICAgICAgICAgdmFyIG1hdGNoZXIgPSBuZXcgUmVnRXhwKFsK
KyAgICAgICAgICAgICAgICAoc2V0dGluZ3MuZXNjYXBlIHx8IG5vTWF0Y2gpLnNvdXJjZSwKKyAg
ICAgICAgICAgICAgICAoc2V0dGluZ3MuaW50ZXJwb2xhdGUgfHwgbm9NYXRjaCkuc291cmNlLAor
ICAgICAgICAgICAgICAgIChzZXR0aW5ncy5ldmFsdWF0ZSB8fCBub01hdGNoKS5zb3VyY2UKKyAg
ICAgICAgICAgIF0uam9pbignfCcpICsgJ3wkJywgJ2cnKTsKKworICAgICAgICAgICAgLy8gQ29t
cGlsZSB0aGUgdGVtcGxhdGUgc291cmNlLCBlc2NhcGluZyBzdHJpbmcgbGl0ZXJhbHMgYXBwcm9w
cmlhdGVseS4KKyAgICAgICAgICAgIHZhciBpbmRleCA9IDA7CisgICAgICAgICAgICB2YXIgc291
cmNlID0gIl9fcCs9JyI7CisgICAgICAgICAgICB0ZXh0LnJlcGxhY2UobWF0Y2hlciwgZnVuY3Rp
b24obWF0Y2gsIGVzY2FwZSwgaW50ZXJwb2xhdGUsIGV2YWx1YXRlLCBvZmZzZXQpIHsKKyAgICAg
ICAgICAgICAgICBzb3VyY2UgKz0gdGV4dC5zbGljZShpbmRleCwgb2Zmc2V0KQorICAgICAgICAg
ICAgICAgICAgICAucmVwbGFjZShlc2NhcGVyLCBmdW5jdGlvbihtYXRjaCkgeyByZXR1cm4gJ1xc
JyArIGVzY2FwZXNbbWF0Y2hdOyB9KTsKKworICAgICAgICAgICAgICAgIGlmIChlc2NhcGUpIHsK
KyAgICAgICAgICAgICAgICAgICAgc291cmNlICs9ICInK1xuKChfX3Q9KCIgKyBlc2NhcGUgKyAi
KSk9PW51bGw/Jyc6Xy5lc2NhcGUoX190KSkrXG4nIjsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgaWYgKGludGVycG9sYXRlKSB7CisgICAgICAgICAgICAgICAgICAgIHNvdXJj
ZSArPSAiJytcbigoX190PSgiICsgaW50ZXJwb2xhdGUgKyAiKSk9PW51bGw/Jyc6X190KStcbici
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoZXZhbHVhdGUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgc291cmNlICs9ICInO1xuIiArIGV2YWx1YXRlICsgIlxuX19wKz0n
IjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW5kZXggPSBvZmZzZXQgKyBt
YXRjaC5sZW5ndGg7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOworICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICBzb3VyY2UgKz0gIic7XG4iOworCisgICAgICAgICAgICAvLyBJZiBh
IHZhcmlhYmxlIGlzIG5vdCBzcGVjaWZpZWQsIHBsYWNlIGRhdGEgdmFsdWVzIGluIGxvY2FsIHNj
b3BlLgorICAgICAgICAgICAgaWYgKCFzZXR0aW5ncy52YXJpYWJsZSkgc291cmNlID0gJ3dpdGgo
b2JqfHx7fSl7XG4nICsgc291cmNlICsgJ31cbic7CisKKyAgICAgICAgICAgIHNvdXJjZSA9ICJ2
YXIgX190LF9fcD0nJyxfX2o9QXJyYXkucHJvdG90eXBlLmpvaW4sIiArCisgICAgICAgICAgICAg
ICAgInByaW50PWZ1bmN0aW9uKCl7X19wKz1fX2ouY2FsbChhcmd1bWVudHMsJycpO307XG4iICsK
KyAgICAgICAgICAgICAgICBzb3VyY2UgKyAicmV0dXJuIF9fcDtcbiI7CisKKyAgICAgICAgICAg
IHRyeSB7CisgICAgICAgICAgICAgICAgcmVuZGVyID0gbmV3IEZ1bmN0aW9uKHNldHRpbmdzLnZh
cmlhYmxlIHx8ICdvYmonLCAnXycsIHNvdXJjZSk7CisgICAgICAgICAgICB9IGNhdGNoIChlKSB7
CisgICAgICAgICAgICAgICAgZS5zb3VyY2UgPSBzb3VyY2U7CisgICAgICAgICAgICAgICAgdGhy
b3cgZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGRhdGEpIHJldHVybiByZW5k
ZXIoZGF0YSwgXyk7CisgICAgICAgICAgICB2YXIgdGVtcGxhdGUgPSBmdW5jdGlvbihkYXRhKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlci5jYWxsKHRoaXMsIGRhdGEsIF8pOworICAg
ICAgICAgICAgfTsKKworICAgICAgICAgICAgLy8gUHJvdmlkZSB0aGUgY29tcGlsZWQgZnVuY3Rp
b24gc291cmNlIGFzIGEgY29udmVuaWVuY2UgZm9yIHByZWNvbXBpbGF0aW9uLgorICAgICAgICAg
ICAgdGVtcGxhdGUuc291cmNlID0gJ2Z1bmN0aW9uKCcgKyAoc2V0dGluZ3MudmFyaWFibGUgfHwg
J29iaicpICsgJyl7XG4nICsgc291cmNlICsgJ30nOworCisgICAgICAgICAgICByZXR1cm4gdGVt
cGxhdGU7CisgICAgICAgIH07CisKKyAgICAgICAgcmV0dXJuIF87CisgICAgfSkoe30pOworCisg
ICAgaWYgKGxvY2F0aW9uLmhvc3RuYW1lID09PSAndG9kb212Yy5jb20nKSB7CisgICAgICAgIChm
dW5jdGlvbihpLHMsbyxnLHIsYSxtKXtpWydHb29nbGVBbmFseXRpY3NPYmplY3QnXT1yO2lbcl09
aVtyXXx8ZnVuY3Rpb24oKXsKKyAgICAgICAgKGlbcl0ucT1pW3JdLnF8fFtdKS5wdXNoKGFyZ3Vt
ZW50cyl9LGlbcl0ubD0xKm5ldyBEYXRlKCk7YT1zLmNyZWF0ZUVsZW1lbnQobyksCisgICAgICAg
IG09cy5nZXRFbGVtZW50c0J5VGFnTmFtZShvKVswXTthLmFzeW5jPTE7YS5zcmM9ZzttLnBhcmVu
dE5vZGUuaW5zZXJ0QmVmb3JlKGEsbSkKKyAgICAgICAgfSkod2luZG93LGRvY3VtZW50LCdzY3Jp
cHQnLCdodHRwczovL3d3dy5nb29nbGUtYW5hbHl0aWNzLmNvbS9hbmFseXRpY3MuanMnLCdnYScp
OworICAgICAgICBnYSgnY3JlYXRlJywgJ1VBLTMxMDgxMDYyLTEnLCAnYXV0bycpOworICAgICAg
ICBnYSgnc2VuZCcsICdwYWdldmlldycpOworICAgIH0KKyAgICAvKiBqc2hpbnQgaWdub3JlOmVu
ZCAqLworCisgICAgZnVuY3Rpb24gcmVkaXJlY3QoKSB7CisgICAgICAgIGlmIChsb2NhdGlvbi5o
b3N0bmFtZSA9PT0gJ3Rhc3RlanMuZ2l0aHViLmlvJykgeworICAgICAgICAgICAgbG9jYXRpb24u
aHJlZiA9IGxvY2F0aW9uLmhyZWYucmVwbGFjZSgndGFzdGVqcy5naXRodWIuaW8vdG9kb212Yycs
ICd0b2RvbXZjLmNvbScpOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gZmluZFJv
b3QoKSB7CisgICAgICAgIHZhciBiYXNlID0gbG9jYXRpb24uaHJlZi5pbmRleE9mKCdleGFtcGxl
cy8nKTsKKyAgICAgICAgcmV0dXJuIGxvY2F0aW9uLmhyZWYuc3Vic3RyKDAsIGJhc2UpOworICAg
IH0KKworICAgIGZ1bmN0aW9uIGdldEZpbGUoZmlsZSwgY2FsbGJhY2spIHsKKyAgICAgICAgaWYg
KCFsb2NhdGlvbi5ob3N0KSB7CisgICAgICAgICAgICByZXR1cm4gY29uc29sZS5pbmZvKCdNaXNz
IHRoZSBpbmZvIGJhcj8gUnVuIFRvZG9NVkMgZnJvbSBhIHNlcnZlciB0byBhdm9pZCBhIGNyb3Nz
LW9yaWdpbiBlcnJvci4nKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciB4aHIgPSBuZXcgWE1M
SHR0cFJlcXVlc3QoKTsKKworICAgICAgICB4aHIub3BlbignR0VUJywgZmluZFJvb3QoKSArIGZp
bGUsIHRydWUpOworICAgICAgICB4aHIuc2VuZCgpOworCisgICAgICAgIHhoci5vbmxvYWQgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwICYmIGNhbGxi
YWNrKSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2soeGhyLnJlc3BvbnNlVGV4dCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gTGVhcm4obGVhcm5K
U09OLCBjb25maWcpIHsKKyAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIExlYXJuKSkgewor
ICAgICAgICAgICAgcmV0dXJuIG5ldyBMZWFybihsZWFybkpTT04sIGNvbmZpZyk7CisgICAgICAg
IH0KKworICAgICAgICB2YXIgdGVtcGxhdGUsIGZyYW1ld29yazsKKworICAgICAgICBpZiAodHlw
ZW9mIGxlYXJuSlNPTiAhPT0gJ29iamVjdCcpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAg
ICAgICAgICAgbGVhcm5KU09OID0gSlNPTi5wYXJzZShsZWFybkpTT04pOworICAgICAgICAgICAg
fSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChjb25maWcpIHsKKyAgICAgICAgICAgIHRlbXBsYXRlID0g
Y29uZmlnLnRlbXBsYXRlOworICAgICAgICAgICAgZnJhbWV3b3JrID0gY29uZmlnLmZyYW1ld29y
azsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghdGVtcGxhdGUgJiYgbGVhcm5KU09OLnRlbXBs
YXRlcykgeworICAgICAgICAgICAgdGVtcGxhdGUgPSBsZWFybkpTT04udGVtcGxhdGVzLnRvZG9t
dmM7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWZyYW1ld29yayAmJiBkb2N1bWVudC5xdWVy
eVNlbGVjdG9yKCdbZGF0YS1mcmFtZXdvcmtdJykpIHsKKyAgICAgICAgICAgIGZyYW1ld29yayA9
IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWZyYW1ld29ya10nKS5kYXRhc2V0LmZyYW1l
d29yazsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMudGVtcGxhdGUgPSB0ZW1wbGF0ZTsKKwor
ICAgICAgICBpZiAobGVhcm5KU09OLmJhY2tlbmQpIHsKKyAgICAgICAgICAgIHRoaXMuZnJhbWV3
b3JrSlNPTiA9IGxlYXJuSlNPTi5iYWNrZW5kOworICAgICAgICAgICAgdGhpcy5mcmFtZXdvcmtK
U09OLmlzc3VlTGFiZWwgPSBmcmFtZXdvcms7CisgICAgICAgICAgICB0aGlzLmFwcGVuZCh7Cisg
ICAgICAgICAgICAgICAgYmFja2VuZDogdHJ1ZQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0g
ZWxzZSBpZiAobGVhcm5KU09OW2ZyYW1ld29ya10pIHsKKyAgICAgICAgICAgIHRoaXMuZnJhbWV3
b3JrSlNPTiA9IGxlYXJuSlNPTltmcmFtZXdvcmtdOworICAgICAgICAgICAgdGhpcy5mcmFtZXdv
cmtKU09OLmlzc3VlTGFiZWwgPSBmcmFtZXdvcms7CisgICAgICAgICAgICB0aGlzLmFwcGVuZCgp
OworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5mZXRjaElzc3VlQ291bnQoKTsKKyAgICB9CisK
KyAgICBMZWFybi5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gKG9wdHMpIHsKKyAgICAgICAg
dmFyIGFzaWRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYXNpZGUnKTsKKyAgICAgICAgYXNp
ZGUuaW5uZXJIVE1MID0gXy50ZW1wbGF0ZSh0aGlzLnRlbXBsYXRlLCB0aGlzLmZyYW1ld29ya0pT
T04pOworICAgICAgICBhc2lkZS5jbGFzc05hbWUgPSAnbGVhcm4nOworCisgICAgICAgIGlmIChv
cHRzICYmIG9wdHMuYmFja2VuZCkgeworICAgICAgICAgICAgLy8gUmVtb3ZlIGRlbW8gbGluawor
ICAgICAgICAgICAgdmFyIHNvdXJjZUxpbmtzID0gYXNpZGUucXVlcnlTZWxlY3RvcignLnNvdXJj
ZS1saW5rcycpOworICAgICAgICAgICAgdmFyIGhlYWRpbmcgPSBzb3VyY2VMaW5rcy5maXJzdEVs
ZW1lbnRDaGlsZDsKKyAgICAgICAgICAgIHZhciBzb3VyY2VMaW5rID0gc291cmNlTGlua3MubGFz
dEVsZW1lbnRDaGlsZDsKKyAgICAgICAgICAgIC8vIENvcnJlY3QgbGluayBwYXRoCisgICAgICAg
ICAgICB2YXIgaHJlZiA9IHNvdXJjZUxpbmsuZ2V0QXR0cmlidXRlKCdocmVmJyk7CisgICAgICAg
ICAgICBzb3VyY2VMaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYuc3Vic3RyKGhyZWYubGFz
dEluZGV4T2YoJ2h0dHAnKSkpOworICAgICAgICAgICAgc291cmNlTGlua3MuaW5uZXJIVE1MID0g
aGVhZGluZy5vdXRlckhUTUwgKyBzb3VyY2VMaW5rLm91dGVySFRNTDsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIC8vIExvY2FsaXplIGRlbW8gbGlua3MKKyAgICAgICAgICAgIHZhciBk
ZW1vTGlua3MgPSBhc2lkZS5xdWVyeVNlbGVjdG9yQWxsKCcuZGVtby1saW5rJyk7CisgICAgICAg
ICAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGRlbW9MaW5rcywgZnVuY3Rpb24gKGRl
bW9MaW5rKSB7CisgICAgICAgICAgICAgICAgaWYgKGRlbW9MaW5rLmdldEF0dHJpYnV0ZSgnaHJl
ZicpLnN1YnN0cigwLCA0KSAhPT0gJ2h0dHAnKSB7CisgICAgICAgICAgICAgICAgICAgIGRlbW9M
aW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIGZpbmRSb290KCkgKyBkZW1vTGluay5nZXRBdHRyaWJ1
dGUoJ2hyZWYnKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAg
IH0KKworICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTmFtZSA9IChkb2N1bWVudC5ib2R5LmNs
YXNzTmFtZSArICcgbGVhcm4tYmFyJykudHJpbSgpOworICAgICAgICBkb2N1bWVudC5ib2R5Lmlu
c2VydEFkamFjZW50SFRNTCgnYWZ0ZXJCZWdpbicsIGFzaWRlLm91dGVySFRNTCk7CisgICAgfTsK
KworICAgIExlYXJuLnByb3RvdHlwZS5mZXRjaElzc3VlQ291bnQgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHZhciBpc3N1ZUxpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaXNzdWUtY291
bnQtbGluaycpOworICAgICAgICBpZiAoaXNzdWVMaW5rKSB7CisgICAgICAgICAgICB2YXIgdXJs
ID0gaXNzdWVMaW5rLmhyZWYucmVwbGFjZSgnaHR0cHM6Ly9naXRodWIuY29tJywgJ2h0dHBzOi8v
YXBpLmdpdGh1Yi5jb20vcmVwb3MnKTsKKyAgICAgICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0
cFJlcXVlc3QoKTsKKyAgICAgICAgICAgIHhoci5vcGVuKCdHRVQnLCB1cmwsIHRydWUpOworICAg
ICAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICAgICAgdmFy
IHBhcnNlZFJlc3BvbnNlID0gSlNPTi5wYXJzZShlLnRhcmdldC5yZXNwb25zZVRleHQpOworICAg
ICAgICAgICAgICAgIGlmIChwYXJzZWRSZXNwb25zZSBpbnN0YW5jZW9mIEFycmF5KSB7CisgICAg
ICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IHBhcnNlZFJlc3BvbnNlLmxlbmd0aDsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGNvdW50ICE9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpc3N1ZUxpbmsuaW5uZXJIVE1MID0gJ1RoaXMgYXBwIGhhcyAnICsgY291bnQgKyAnIG9wZW4g
aXNzdWVzJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdpc3N1ZS1jb3VudCcpLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lJzsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICB4
aHIuc2VuZCgpOworICAgICAgICB9CisgICAgfTsKKworICAgIHJlZGlyZWN0KCk7CisgICAgZ2V0
RmlsZSgnbGVhcm4uanNvbicsIExlYXJuKTsKK30pKCk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9i
cm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9wcmVhY3QvZGlzdC90b2RvbXZjLmNzcyBiL1dlYnNpdGVzL2Jyb3dzZXJi
ZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL3ByZWFjdC9kaXN0L3RvZG9tdmMuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUwNGZiZGJkYjRlZDRh
ZmUwOWQ1NTQzZGI1MjBkYzZhOWRkZDQxYjIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9i
cm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9wcmVhY3QvZGlzdC90b2RvbXZjLmNzcwpAQCAtMCwwICsxLDM3NiBAQAor
aHRtbCwKK2JvZHkgeworICAgIG1hcmdpbjogMDsKKyAgICBwYWRkaW5nOiAwOworfQorCitidXR0
b24geworICAgIG1hcmdpbjogMDsKKyAgICBwYWRkaW5nOiAwOworICAgIGJvcmRlcjogMDsKKyAg
ICBiYWNrZ3JvdW5kOiBub25lOworICAgIGZvbnQtc2l6ZTogMTAwJTsKKyAgICB2ZXJ0aWNhbC1h
bGlnbjogYmFzZWxpbmU7CisgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CisgICAgZm9udC13ZWln
aHQ6IGluaGVyaXQ7CisgICAgY29sb3I6IGluaGVyaXQ7CisgICAgLXdlYmtpdC1hcHBlYXJhbmNl
OiBub25lOworICAgIGFwcGVhcmFuY2U6IG5vbmU7CisgICAgLXdlYmtpdC1mb250LXNtb290aGlu
ZzogYW50aWFsaWFzZWQ7CisgICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTsK
K30KKworYm9keSB7CisgICAgZm9udDogMTRweCAnSGVsdmV0aWNhIE5ldWUnLCBIZWx2ZXRpY2Es
IEFyaWFsLCBzYW5zLXNlcmlmOworICAgIGxpbmUtaGVpZ2h0OiAxLjRlbTsKKyAgICBiYWNrZ3Jv
dW5kOiAjZjVmNWY1OworICAgIGNvbG9yOiAjNGQ0ZDRkOworICAgIG1pbi13aWR0aDogMjMwcHg7
CisgICAgbWF4LXdpZHRoOiA1NTBweDsKKyAgICBtYXJnaW46IDAgYXV0bzsKKyAgICAtd2Via2l0
LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKKyAgICAtbW96LW9zeC1mb250LXNtb290aGlu
ZzogZ3JheXNjYWxlOworICAgIGZvbnQtd2VpZ2h0OiAzMDA7Cit9CisKKzpmb2N1cyB7CisgICAg
b3V0bGluZTogMDsKK30KKworLmhpZGRlbiB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworLnRv
ZG9hcHAgeworICAgIGJhY2tncm91bmQ6ICNmZmY7CisgICAgbWFyZ2luOiAxMzBweCAwIDQwcHgg
MDsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgYm94LXNoYWRvdzogMCAycHggNHB4IDAg
cmdiYSgwLCAwLCAwLCAwLjIpLAorICAgICAgICAgICAgICAgIDAgMjVweCA1MHB4IDAgcmdiYSgw
LCAwLCAwLCAwLjEpOworfQorCisudG9kb2FwcCBpbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhv
bGRlciB7CisgICAgZm9udC1zdHlsZTogaXRhbGljOworICAgIGZvbnQtd2VpZ2h0OiAzMDA7Cisg
ICAgY29sb3I6ICNlNmU2ZTY7Cit9CisKKy50b2RvYXBwIGlucHV0OjotbW96LXBsYWNlaG9sZGVy
IHsKKyAgICBmb250LXN0eWxlOiBpdGFsaWM7CisgICAgZm9udC13ZWlnaHQ6IDMwMDsKKyAgICBj
b2xvcjogI2U2ZTZlNjsKK30KKworLnRvZG9hcHAgaW5wdXQ6OmlucHV0LXBsYWNlaG9sZGVyIHsK
KyAgICBmb250LXN0eWxlOiBpdGFsaWM7CisgICAgZm9udC13ZWlnaHQ6IDMwMDsKKyAgICBjb2xv
cjogI2U2ZTZlNjsKK30KKworLnRvZG9hcHAgaDEgeworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsK
KyAgICB0b3A6IC0xNTVweDsKKyAgICB3aWR0aDogMTAwJTsKKyAgICBmb250LXNpemU6IDEwMHB4
OworICAgIGZvbnQtd2VpZ2h0OiAxMDA7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgIGNv
bG9yOiByZ2JhKDE3NSwgNDcsIDQ3LCAwLjE1KTsKKyAgICAtd2Via2l0LXRleHQtcmVuZGVyaW5n
OiBvcHRpbWl6ZUxlZ2liaWxpdHk7CisgICAgLW1vei10ZXh0LXJlbmRlcmluZzogb3B0aW1pemVM
ZWdpYmlsaXR5OworICAgIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7Cit9CisK
Ky5uZXctdG9kbywKKy5lZGl0IHsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgbWFyZ2lu
OiAwOworICAgIHdpZHRoOiAxMDAlOworICAgIGZvbnQtc2l6ZTogMjRweDsKKyAgICBmb250LWZh
bWlseTogaW5oZXJpdDsKKyAgICBmb250LXdlaWdodDogaW5oZXJpdDsKKyAgICBsaW5lLWhlaWdo
dDogMS40ZW07CisgICAgYm9yZGVyOiAwOworICAgIGNvbG9yOiBpbmhlcml0OworICAgIHBhZGRp
bmc6IDZweDsKKyAgICBib3JkZXI6IDFweCBzb2xpZCAjOTk5OworICAgIGJveC1zaGFkb3c6IGlu
c2V0IDAgLTFweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMik7CisgICAgYm94LXNpemluZzogYm9y
ZGVyLWJveDsKKyAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKKyAgICAt
bW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOworfQorCisubmV3LXRvZG8geworICAg
IHBhZGRpbmc6IDE2cHggMTZweCAxNnB4IDYwcHg7CisgICAgYm9yZGVyOiBub25lOworICAgIGJh
Y2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4wMDMpOworICAgIGJveC1zaGFkb3c6IGluc2V0IDAg
LTJweCAxcHggcmdiYSgwLDAsMCwwLjAzKTsKK30KKworLm1haW4geworICAgIHBvc2l0aW9uOiBy
ZWxhdGl2ZTsKKyAgICB6LWluZGV4OiAyOworICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTZl
NmU2OworfQorCisudG9nZ2xlLWFsbCB7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgIGJv
cmRlcjogbm9uZTsgLyogTW9iaWxlIFNhZmFyaSAqLworICAgIG9wYWNpdHk6IDA7CisgICAgcG9z
aXRpb246IGFic29sdXRlOworfQorCisudG9nZ2xlLWFsbCArIGxhYmVsIHsKKyAgICB3aWR0aDog
NjBweDsKKyAgICBoZWlnaHQ6IDM0cHg7CisgICAgZm9udC1zaXplOiAwOworICAgIHBvc2l0aW9u
OiBhYnNvbHV0ZTsKKyAgICB0b3A6IC01MnB4OworICAgIGxlZnQ6IC0xM3B4OworICAgIC13ZWJr
aXQtdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOworICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVn
KTsKK30KKworLnRvZ2dsZS1hbGwgKyBsYWJlbDpiZWZvcmUgeworICAgIGNvbnRlbnQ6ICfina8n
OworICAgIGZvbnQtc2l6ZTogMjJweDsKKyAgICBjb2xvcjogI2U2ZTZlNjsKKyAgICBwYWRkaW5n
OiAxMHB4IDI3cHggMTBweCAyN3B4OworfQorCisudG9nZ2xlLWFsbDpjaGVja2VkICsgbGFiZWw6
YmVmb3JlIHsKKyAgICBjb2xvcjogIzczNzM3MzsKK30KKworLnRvZG8tbGlzdCB7CisgICAgbWFy
Z2luOiAwOworICAgIHBhZGRpbmc6IDA7CisgICAgbGlzdC1zdHlsZTogbm9uZTsKK30KKworLnRv
ZG8tbGlzdCBsaSB7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIGZvbnQtc2l6ZTogMjRw
eDsKKyAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VkZWRlZDsKK30KKworLnRvZG8tbGlz
dCBsaTpsYXN0LWNoaWxkIHsKKyAgICBib3JkZXItYm90dG9tOiBub25lOworfQorCisudG9kby1s
aXN0IGxpLmVkaXRpbmcgeworICAgIGJvcmRlci1ib3R0b206IG5vbmU7CisgICAgcGFkZGluZzog
MDsKK30KKworLnRvZG8tbGlzdCBsaS5lZGl0aW5nIC5lZGl0IHsKKyAgICBkaXNwbGF5OiBibG9j
azsKKyAgICB3aWR0aDogNTA2cHg7CisgICAgcGFkZGluZzogMTJweCAxNnB4OworICAgIG1hcmdp
bjogMCAwIDAgNDNweDsKK30KKworLnRvZG8tbGlzdCBsaS5lZGl0aW5nIC52aWV3IHsKKyAgICBk
aXNwbGF5OiBub25lOworfQorCisudG9kby1saXN0IGxpIC50b2dnbGUgeworICAgIHRleHQtYWxp
Z246IGNlbnRlcjsKKyAgICB3aWR0aDogNDBweDsKKyAgICAvKiBhdXRvLCBzaW5jZSBub24tV2Vi
S2l0IGJyb3dzZXJzIGRvZXNuJ3Qgc3VwcG9ydCBpbnB1dCBzdHlsaW5nICovCisgICAgaGVpZ2h0
OiBhdXRvOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDA7CisgICAgYm90dG9t
OiAwOworICAgIG1hcmdpbjogYXV0byAwOworICAgIGJvcmRlcjogbm9uZTsgLyogTW9iaWxlIFNh
ZmFyaSAqLworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKKyAgICBhcHBlYXJhbmNlOiBu
b25lOworfQorCisudG9kby1saXN0IGxpIC50b2dnbGUgeworICAgIG9wYWNpdHk6IDA7Cit9CisK
Ky50b2RvLWxpc3QgbGkgLnRvZ2dsZSArIGxhYmVsIHsKKyAgICAvKgorICAgICAgICBGaXJlZm94
IHJlcXVpcmVzIGAjYCB0byBiZSBlc2NhcGVkIC0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTIyNDMzCisgICAgICAgIElFIGFuZCBFZGdlIHJlcXVpcmVzICpl
dmVyeXRoaW5nKiB0byBiZSBlc2NhcGVkIHRvIHJlbmRlciwgc28gd2UgZG8gdGhhdCBpbnN0ZWFk
IG9mIGp1c3QgdGhlIGAjYCAtIGh0dHBzOi8vZGV2ZWxvcGVyLm1pY3Jvc29mdC5jb20vZW4tdXMv
bWljcm9zb2Z0LWVkZ2UvcGxhdGZvcm0vaXNzdWVzLzcxNTc0NTkvCisgICAgKi8KKyAgICBiYWNr
Z3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LCUzQ3N2ZyUyMHhtbG5z
JTNEJTIyaHR0cCUzQS8vd3d3LnczLm9yZy8yMDAwL3N2ZyUyMiUyMHdpZHRoJTNEJTIyNDAlMjIl
MjBoZWlnaHQlM0QlMjI0MCUyMiUyMHZpZXdCb3glM0QlMjItMTAlMjAtMTglMjAxMDAlMjAxMzUl
MjIlM0UlM0NjaXJjbGUlMjBjeCUzRCUyMjUwJTIyJTIwY3klM0QlMjI1MCUyMiUyMHIlM0QlMjI1
MCUyMiUyMGZpbGwlM0QlMjJub25lJTIyJTIwc3Ryb2tlJTNEJTIyJTIzZWRlZGVkJTIyJTIwc3Ry
b2tlLXdpZHRoJTNEJTIyMyUyMi8lM0UlM0Mvc3ZnJTNFJyk7CisgICAgYmFja2dyb3VuZC1yZXBl
YXQ6IG5vLXJlcGVhdDsKKyAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgbGVmdDsKK30K
KworLnRvZG8tbGlzdCBsaSAudG9nZ2xlOmNoZWNrZWQgKyBsYWJlbCB7CisgICAgYmFja2dyb3Vu
ZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCwlM0NzdmclMjB4bWxucyUzRCUy
Mmh0dHAlM0EvL3d3dy53My5vcmcvMjAwMC9zdmclMjIlMjB3aWR0aCUzRCUyMjQwJTIyJTIwaGVp
Z2h0JTNEJTIyNDAlMjIlMjB2aWV3Qm94JTNEJTIyLTEwJTIwLTE4JTIwMTAwJTIwMTM1JTIyJTNF
JTNDY2lyY2xlJTIwY3glM0QlMjI1MCUyMiUyMGN5JTNEJTIyNTAlMjIlMjByJTNEJTIyNTAlMjIl
MjBmaWxsJTNEJTIybm9uZSUyMiUyMHN0cm9rZSUzRCUyMiUyM2JkZGFkNSUyMiUyMHN0cm9rZS13
aWR0aCUzRCUyMjMlMjIvJTNFJTNDcGF0aCUyMGZpbGwlM0QlMjIlMjM1ZGMyYWYlMjIlMjBkJTNE
JTIyTTcyJTIwMjVMNDIlMjA3MSUyMDI3JTIwNTZsLTQlMjA0JTIwMjAlMjAyMCUyMDM0LTUyeiUy
Mi8lM0UlM0Mvc3ZnJTNFJyk7Cit9CisKKy50b2RvLWxpc3QgbGkgbGFiZWwgeworICAgIHdvcmQt
YnJlYWs6IGJyZWFrLWFsbDsKKyAgICBwYWRkaW5nOiAxNXB4IDE1cHggMTVweCA2MHB4OworICAg
IGRpc3BsYXk6IGJsb2NrOworICAgIGxpbmUtaGVpZ2h0OiAxLjI7CisgICAgdHJhbnNpdGlvbjog
Y29sb3IgMC40czsKK30KKworLnRvZG8tbGlzdCBsaS5jb21wbGV0ZWQgbGFiZWwgeworICAgIGNv
bG9yOiAjZDlkOWQ5OworICAgIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOworfQorCisu
dG9kby1saXN0IGxpIC5kZXN0cm95IHsKKyAgICBkaXNwbGF5OiBub25lOworICAgIHBvc2l0aW9u
OiBhYnNvbHV0ZTsKKyAgICB0b3A6IDA7CisgICAgcmlnaHQ6IDEwcHg7CisgICAgYm90dG9tOiAw
OworICAgIHdpZHRoOiA0MHB4OworICAgIGhlaWdodDogNDBweDsKKyAgICBtYXJnaW46IGF1dG8g
MDsKKyAgICBmb250LXNpemU6IDMwcHg7CisgICAgY29sb3I6ICNjYzlhOWE7CisgICAgbWFyZ2lu
LWJvdHRvbTogMTFweDsKKyAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjJzIGVhc2Utb3V0OworfQor
CisudG9kby1saXN0IGxpIC5kZXN0cm95OmhvdmVyIHsKKyAgICBjb2xvcjogI2FmNWI1ZTsKK30K
KworLnRvZG8tbGlzdCBsaSAuZGVzdHJveTphZnRlciB7CisgICAgY29udGVudDogJ8OXJzsKK30K
KworLnRvZG8tbGlzdCBsaTpob3ZlciAuZGVzdHJveSB7CisgICAgZGlzcGxheTogYmxvY2s7Cit9
CisKKy50b2RvLWxpc3QgbGkgLmVkaXQgeworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisKKy50b2Rv
LWxpc3QgbGkuZWRpdGluZzpsYXN0LWNoaWxkIHsKKyAgICBtYXJnaW4tYm90dG9tOiAtMXB4Owor
fQorCisuZm9vdGVyIHsKKyAgICBjb2xvcjogIzc3NzsKKyAgICBwYWRkaW5nOiAxMHB4IDE1cHg7
CisgICAgaGVpZ2h0OiAyMHB4OworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICBib3JkZXIt
dG9wOiAxcHggc29saWQgI2U2ZTZlNjsKK30KKworLmZvb3RlcjpiZWZvcmUgeworICAgIGNvbnRl
bnQ6ICcnOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICByaWdodDogMDsKKyAgICBib3R0
b206IDA7CisgICAgbGVmdDogMDsKKyAgICBoZWlnaHQ6IDUwcHg7CisgICAgb3ZlcmZsb3c6IGhp
ZGRlbjsKKyAgICBib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjIpLAorICAg
ICAgICAgICAgICAgIDAgOHB4IDAgLTNweCAjZjZmNmY2LAorICAgICAgICAgICAgICAgIDAgOXB4
IDFweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwKKyAgICAgICAgICAgICAgICAwIDE2cHggMCAt
NnB4ICNmNmY2ZjYsCisgICAgICAgICAgICAgICAgMCAxN3B4IDJweCAtNnB4IHJnYmEoMCwgMCwg
MCwgMC4yKTsKK30KKworLnRvZG8tY291bnQgeworICAgIGZsb2F0OiBsZWZ0OworICAgIHRleHQt
YWxpZ246IGxlZnQ7Cit9CisKKy50b2RvLWNvdW50IHN0cm9uZyB7CisgICAgZm9udC13ZWlnaHQ6
IDMwMDsKK30KKworLmZpbHRlcnMgeworICAgIG1hcmdpbjogMDsKKyAgICBwYWRkaW5nOiAwOwor
ICAgIGxpc3Qtc3R5bGU6IG5vbmU7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHJpZ2h0
OiAwOworICAgIGxlZnQ6IDA7Cit9CisKKy5maWx0ZXJzIGxpIHsKKyAgICBkaXNwbGF5OiBpbmxp
bmU7Cit9CisKKy5maWx0ZXJzIGxpIGEgeworICAgIGNvbG9yOiBpbmhlcml0OworICAgIG1hcmdp
bjogM3B4OworICAgIHBhZGRpbmc6IDNweCA3cHg7CisgICAgdGV4dC1kZWNvcmF0aW9uOiBub25l
OworICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OworICAgIGJvcmRlci1yYWRpdXM6
IDNweDsKK30KKworLmZpbHRlcnMgbGkgYTpob3ZlciB7CisgICAgYm9yZGVyLWNvbG9yOiByZ2Jh
KDE3NSwgNDcsIDQ3LCAwLjEpOworfQorCisuZmlsdGVycyBsaSBhLnNlbGVjdGVkIHsKKyAgICBi
b3JkZXItY29sb3I6IHJnYmEoMTc1LCA0NywgNDcsIDAuMik7Cit9CisKKy5jbGVhci1jb21wbGV0
ZWQsCitodG1sIC5jbGVhci1jb21wbGV0ZWQ6YWN0aXZlIHsKKyAgICBmbG9hdDogcmlnaHQ7Cisg
ICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIGxpbmUtaGVpZ2h0OiAyMHB4OworICAgIHRleHQt
ZGVjb3JhdGlvbjogbm9uZTsKKyAgICBjdXJzb3I6IHBvaW50ZXI7Cit9CisKKy5jbGVhci1jb21w
bGV0ZWQ6aG92ZXIgeworICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCisuaW5m
byB7CisgICAgbWFyZ2luOiA2NXB4IGF1dG8gMDsKKyAgICBjb2xvcjogI2JmYmZiZjsKKyAgICBm
b250LXNpemU6IDEwcHg7CisgICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwg
MjU1LCAwLjUpOworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworLmluZm8gcCB7CisgICAg
bGluZS1oZWlnaHQ6IDE7Cit9CisKKy5pbmZvIGEgeworICAgIGNvbG9yOiBpbmhlcml0OworICAg
IHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICBmb250LXdlaWdodDogNDAwOworfQorCisuaW5m
byBhOmhvdmVyIHsKKyAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKworLyoKKyAg
ICBIYWNrIHRvIHJlbW92ZSBiYWNrZ3JvdW5kIGZyb20gTW9iaWxlIFNhZmFyaS4KKyAgICBDYW4n
dCB1c2UgaXQgZ2xvYmFsbHkgc2luY2UgaXQgZGVzdHJveXMgY2hlY2tib3hlcyBpbiBGaXJlZm94
CisqLworQG1lZGlhIHNjcmVlbiBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzow
KSB7CisgICAgLnRvZ2dsZS1hbGwsCisgICAgLnRvZG8tbGlzdCBsaSAudG9nZ2xlIHsKKyAgICAg
ICAgYmFja2dyb3VuZDogbm9uZTsKKyAgICB9CisKKyAgICAudG9kby1saXN0IGxpIC50b2dnbGUg
eworICAgICAgICBoZWlnaHQ6IDQwcHg7CisgICAgfQorfQorCitAbWVkaWEgKG1heC13aWR0aDog
NDMwcHgpIHsKKyAgICAuZm9vdGVyIHsKKyAgICAgICAgaGVpZ2h0OiA1MHB4OworICAgIH0KKwor
ICAgIC5maWx0ZXJzIHsKKyAgICAgICAgYm90dG9tOiAxMHB4OworICAgIH0KK30KZGlmZiAtLWdp
dCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3ByZWFjdC9yb2xsdXAuY29uZmlnLmpzIGIvV2Vi
c2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvcHJlYWN0L3JvbGx1cC5jb25maWcuanMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZTZkMjUxZmY2NTg4NTI2YzU3ZjIwYzY1ZjJiMGNhZmEyZjMwN2Q1MgotLS0gL2Rldi9udWxsCisr
KyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3ByZWFjdC9yb2xsdXAuY29uZmlnLmpzCkBAIC0w
LDAgKzEsMjcgQEAKK2ltcG9ydCBub2RlUmVzb2x2ZSBmcm9tICdyb2xsdXAtcGx1Z2luLW5vZGUt
cmVzb2x2ZSc7CitpbXBvcnQgY29tbW9uanMgZnJvbSAncm9sbHVwLXBsdWdpbi1jb21tb25qcyc7
CitpbXBvcnQgYmFiZWwgZnJvbSAncm9sbHVwLXBsdWdpbi1iYWJlbCc7CisKK2V4cG9ydCBkZWZh
dWx0IHsKKyAgICBlbnRyeTogJ3NyYy9pbmRleC5qcycsCisgICAgZGVzdDogJ2Rpc3QvYXBwLmpz
JywKKyAgICBmb3JtYXQ6ICdpaWZlJywKKyAgICBzb3VyY2VNYXA6IHRydWUsCisgICAgZXh0ZXJu
YWw6IFtdLAorICAgIHBsdWdpbnM6IFsKKyAgICAgICAgYmFiZWwoeworICAgICAgICAgICAgYmFi
ZWxyYzogZmFsc2UsCisgICAgICAgICAgICBwcmVzZXRzOiBbCisgICAgICAgICAgICAgICAgWydl
czIwMTUnLCB7IGxvb3NlOnRydWUsIG1vZHVsZXM6ZmFsc2UgfV0sCisgICAgICAgICAgICAgICAg
J3N0YWdlLTAnCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgcGx1Z2luczogWworICAgICAg
ICAgICAgICAgIFsndHJhbnNmb3JtLXJlYWN0LWpzeCcsIHsgcHJhZ21hOidoJyB9XQorICAgICAg
ICAgICAgXQorICAgICAgICB9KSwKKyAgICAgICAgbm9kZVJlc29sdmUoeworICAgICAgICAgICAg
anNuZXh0OiB0cnVlCisgICAgICAgIH0pLAorICAgICAgICBjb21tb25qcygpCisgICAgXQorfTsK
ZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVz
b3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3ByZWFjdC9zcmMvYXBwL2Zvb3Rl
ci5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2Vz
L3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3ByZWFjdC9zcmMvYXBwL2Zvb3Rlci5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi44MTRiY2I4OTc2MDRlZTYyYzJkY2YwZDJjMjg2NzIyNmQwYjY2ZjFkCi0tLSAv
ZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9y
ZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcHJlYWN0L3NyYy9hcHAvZm9v
dGVyLmpzCkBAIC0wLDAgKzEsMzMgQEAKK2ltcG9ydCBjeCBmcm9tICdjbGFzc25hbWVzJzsKK2lt
cG9ydCB7IGgsIENvbXBvbmVudCB9IGZyb20gJ3ByZWFjdCc7CitpbXBvcnQgeyBwbHVyYWxpemUg
fSBmcm9tICcuL3V0aWwnOworCitleHBvcnQgZGVmYXVsdCBjbGFzcyBUb2RvRm9vdGVyIGV4dGVu
ZHMgQ29tcG9uZW50IHsKKyAgICByZW5kZXIoeyBub3dTaG93aW5nLCBjb3VudCwgY29tcGxldGVk
Q291bnQsIG9uQ2xlYXJDb21wbGV0ZWQgfSkgeworICAgICAgICByZXR1cm4gKAorICAgICAgICAg
ICAgPGZvb3RlciBjbGFzcz0iZm9vdGVyIj4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0i
dG9kby1jb3VudCI+CisgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e2NvdW50fTwvc3Ryb25n
PiB7cGx1cmFsaXplKGNvdW50LCAnaXRlbScpfSBsZWZ0CisgICAgICAgICAgICAgICAgPC9zcGFu
PgorICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iZmlsdGVycyI+CisgICAgICAgICAgICAgICAg
ICAgIDxsaT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMvIiBjbGFzcz17Y3go
eyBzZWxlY3RlZDogbm93U2hvd2luZyA9PSAnYWxsJyB9KX0+QWxsPC9hPgorICAgICAgICAgICAg
ICAgICAgICA8L2xpPgorICAgICAgICAgICAgICAgICAgICB7JyAnfQorICAgICAgICAgICAgICAg
ICAgICA8bGk+CisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjL2FjdGl2ZSIgY2xh
c3M9e2N4KHsgc2VsZWN0ZWQ6IG5vd1Nob3dpbmcgPT0gJ2FjdGl2ZScgfSl9PkFjdGl2ZTwvYT4K
KyAgICAgICAgICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICAgICAgeycgJ30KKyAg
ICAgICAgICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0i
Iy9jb21wbGV0ZWQiIGNsYXNzPXtjeCh7IHNlbGVjdGVkOiBub3dTaG93aW5nID09ICdjb21wbGV0
ZWQnIH0pfT5Db21wbGV0ZWQ8L2E+CisgICAgICAgICAgICAgICAgICAgIDwvbGk+CisgICAgICAg
ICAgICAgICAgPC91bD4KKyAgICAgICAgICAgICAgICB7IGNvbXBsZXRlZENvdW50ID4gMCAmJiAo
CisgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImNsZWFyLWNvbXBsZXRlZCIgb25D
bGljaz17b25DbGVhckNvbXBsZXRlZH0+CisgICAgICAgICAgICAgICAgICAgICAgICBDbGVhciBj
b21wbGV0ZWQKKyAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CisgICAgICAgICAgICAgICAg
KSB9CisgICAgICAgICAgICA8L2Zvb3Rlcj4KKyAgICAgICAgKTsKKyAgICB9Cit9CmRpZmYgLS1n
aXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90
b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9wcmVhY3Qvc3JjL2FwcC9pbmRleC5qcyBiL1dl
YnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3ByZWFjdC9zcmMvYXBwL2luZGV4LmpzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjY0MzkwYmUxN2QzZDA1NDRjNDMwODc1YzgxZWE3MjkxNWIzYmQ3ODAKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90
b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9wcmVhY3Qvc3JjL2FwcC9pbmRleC5qcwpAQCAt
MCwwICsxLDEzNCBAQAoraW1wb3J0IHsgaCwgQ29tcG9uZW50IH0gZnJvbSAncHJlYWN0JzsKK2lt
cG9ydCBsaW5rU3RhdGUgZnJvbSAnbGlua3N0YXRlJzsKKworaW1wb3J0IFRvZG9Nb2RlbCBmcm9t
ICcuL21vZGVsJzsKK2ltcG9ydCBUb2RvRm9vdGVyIGZyb20gJy4vZm9vdGVyJzsKK2ltcG9ydCBU
b2RvSXRlbSBmcm9tICcuL2l0ZW0nOworCitjb25zdCBFTlRFUl9LRVkgPSAxMzsKKworY29uc3Qg
RklMVEVSUyA9IHsKKyAgICBhbGw6IHRvZG8gPT4gdHJ1ZSwKKyAgICBhY3RpdmU6IHRvZG8gPT4g
IXRvZG8uY29tcGxldGVkLAorICAgIGNvbXBsZXRlZDogdG9kbyA9PiB0b2RvLmNvbXBsZXRlZAor
fTsKKworZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBwIGV4dGVuZHMgQ29tcG9uZW50IHsKKyAgICBj
b25zdHJ1Y3RvcigpIHsKKyAgICAgICAgc3VwZXIoKTsKKyAgICAgICAgdGhpcy5tb2RlbCA9IG5l
dyBUb2RvTW9kZWwoJ3ByZWFjdC10b2RvcycsICgpID0+IHRoaXMuc2V0U3RhdGUoe30pICk7Cisg
ICAgICAgIGFkZEV2ZW50TGlzdGVuZXIoJ2hhc2hjaGFuZ2UnLCB0aGlzLmhhbmRsZVJvdXRlLmJp
bmQodGhpcykpOworICAgICAgICB0aGlzLmhhbmRsZVJvdXRlKCk7CisgICAgfQorCisgICAgaGFu
ZGxlUm91dGUoKSB7CisgICAgICAgIGxldCBub3dTaG93aW5nID0gU3RyaW5nKGxvY2F0aW9uLmhh
c2ggfHwgJycpLnNwbGl0KCcvJykucG9wKCk7CisgICAgICAgIGlmICghRklMVEVSU1tub3dTaG93
aW5nXSkgeworICAgICAgICAgICAgbm93U2hvd2luZyA9ICdhbGwnOworICAgICAgICB9CisgICAg
ICAgIHRoaXMuc2V0U3RhdGUoeyBub3dTaG93aW5nIH0pOworICAgIH0KKworICAgIGhhbmRsZU5l
d1RvZG9LZXlEb3duID0gKGUpID0+IHsKKyAgICAgICAgaWYgKGUua2V5Q29kZSAhPT0gRU5URVJf
S0VZKSByZXR1cm47CisgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKKworICAgICAgICAvLyBs
ZXQgdmFsID0gJyc7CisgICAgICAgIC8vIGlmICh0aGlzLnN0YXRlLm5ld1RvZG8gPT09IHVuZGVm
aW5lZCkgeworICAgICAgICAvLyAgdmFsID0gZS50YXJnZXQudmFsdWUudHJpbSgpOworICAgICAg
ICAvLyB9CisKKyAgICAgICAgbGV0IHZhbCA9IGUudGFyZ2V0LnZhbHVlLnRyaW0oKTsKKworICAg
ICAgICBpZiAodmFsKSB7CisgICAgICAgICAgICB0aGlzLm1vZGVsLmFkZFRvZG8odmFsKTsKKyAg
ICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBuZXdUb2RvOiAnJyB9KTsKKyAgICAgICAgfQorICAg
IH07CisKKyAgICB0b2dnbGVBbGwgPSBldmVudCA9PiB7CisgICAgICAgIGxldCBjaGVja2VkID0g
ZXZlbnQudGFyZ2V0LmNoZWNrZWQ7CisgICAgICAgIHRoaXMubW9kZWwudG9nZ2xlQWxsKGNoZWNr
ZWQpOworICAgIH07CisKKyAgICB0b2dnbGUgPSB0b2RvID0+IHsKKyAgICAgICAgdGhpcy5tb2Rl
bC50b2dnbGUodG9kbyk7CisgICAgfTsKKworICAgIGRlc3Ryb3kgPSB0b2RvID0+IHsKKyAgICAg
ICAgdGhpcy5tb2RlbC5kZXN0cm95KHRvZG8pOworICAgIH07CisKKyAgICBlZGl0ID0gdG9kbyA9
PiB7CisgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBlZGl0aW5nOiB0b2RvLmlkIH0pOworICAgIH07
CisKKyAgICBzYXZlID0gKHRvZG9Ub1NhdmUsIHRleHQpID0+IHsKKyAgICAgICAgdGhpcy5tb2Rl
bC5zYXZlKHRvZG9Ub1NhdmUsIHRleHQpOworICAgICAgICB0aGlzLnNldFN0YXRlKHsgZWRpdGlu
ZzogbnVsbCB9KTsKKyAgICB9OworCisgICAgY2FuY2VsID0gKCkgPT4geworICAgICAgICB0aGlz
LnNldFN0YXRlKHsgZWRpdGluZzogbnVsbCB9KTsKKyAgICB9OworCisgICAgY2xlYXJDb21wbGV0
ZWQgPSAoKSA9PiB7CisgICAgICAgIHRoaXMubW9kZWwuY2xlYXJDb21wbGV0ZWQoKTsKKyAgICB9
OworCisgICAgcmVuZGVyKHsgfSwgeyBub3dTaG93aW5nID0gQUxMX1RPRE9TLCBuZXdUb2RvLCBl
ZGl0aW5nIH0pIHsKKyAgICAgICAgbGV0IHsgdG9kb3MgfSA9IHRoaXMubW9kZWwsCisgICAgICAg
ICAgICBzaG93blRvZG9zID0gdG9kb3MuZmlsdGVyKCBGSUxURVJTW25vd1Nob3dpbmddICksCisg
ICAgICAgICAgICBhY3RpdmVUb2RvQ291bnQgPSB0b2Rvcy5yZWR1Y2UoIChhLCB0b2RvKSA9PiBh
ICsgKHRvZG8uY29tcGxldGVkID8gMCA6IDEpLCAwKSwKKyAgICAgICAgICAgIGNvbXBsZXRlZENv
dW50ID0gdG9kb3MubGVuZ3RoIC0gYWN0aXZlVG9kb0NvdW50OworCisgICAgICAgIHJldHVybiAo
CisgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgIDxoZWFkZXIgY2xhc3M9ImhlYWRl
ciI+CisgICAgICAgICAgICAgICAgICAgIDxoMT50b2RvczwvaDE+CisgICAgICAgICAgICAgICAg
ICAgIDxpbnB1dAorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im5ldy10b2RvIgorICAg
ICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9IldoYXQgbmVlZHMgdG8gYmUgZG9uZT8i
CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17bmV3VG9kb30KKyAgICAgICAgICAgICAg
ICAgICAgICAgIG9uS2V5RG93bj17dGhpcy5oYW5kbGVOZXdUb2RvS2V5RG93bn0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIG9uSW5wdXQ9e2xpbmtTdGF0ZSh0aGlzLCAnbmV3VG9kbycpfQorICAg
ICAgICAgICAgICAgICAgICAgICAgYXV0b0ZvY3VzPXt0cnVlfQorICAgICAgICAgICAgICAgICAg
ICAvPgorICAgICAgICAgICAgICAgIDwvaGVhZGVyPgorCisgICAgICAgICAgICAgICAgeyB0b2Rv
cy5sZW5ndGggPyAoCisgICAgICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJtYWluIj4K
KyAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNsYXNzPSJ0b2dnbGUtYWxsIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9
ImNoZWNrYm94IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLnRv
Z2dsZUFsbH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXthY3RpdmVUb2Rv
Q291bnQgPT09IDB9CisgICAgICAgICAgICAgICAgICAgICAgICAvPgorICAgICAgICAgICAgICAg
ICAgICAgICAgPHVsIGNsYXNzPSJ0b2RvLWxpc3QiPgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHsgc2hvd25Ub2Rvcy5tYXAoIHRvZG8gPT4gKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA8VG9kb0l0ZW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRv
ZG89e3RvZG99CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblRvZ2dsZT17
dGhpcy50b2dnbGV9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkRlc3Ry
b3k9e3RoaXMuZGVzdHJveX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9u
RWRpdD17dGhpcy5lZGl0fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRp
dGluZz17ZWRpdGluZyA9PT0gdG9kby5pZH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9uU2F2ZT17dGhpcy5zYXZlfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb25DYW5jZWw9e3RoaXMuY2FuY2VsfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIDwvdWw+CisgICAgICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAg
ICAgICAgICApIDogbnVsbCB9CisKKyAgICAgICAgICAgICAgICB7IChhY3RpdmVUb2RvQ291bnQg
fHwgY29tcGxldGVkQ291bnQpID8gKAorICAgICAgICAgICAgICAgICAgICA8VG9kb0Zvb3Rlcgor
ICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ9e2FjdGl2ZVRvZG9Db3VudH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbXBsZXRlZENvdW50PXtjb21wbGV0ZWRDb3VudH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIG5vd1Nob3dpbmc9e25vd1Nob3dpbmd9CisgICAgICAgICAgICAgICAg
ICAgICAgICBvbkNsZWFyQ29tcGxldGVkPXt0aGlzLmNsZWFyQ29tcGxldGVkfQorICAgICAgICAg
ICAgICAgICAgICAvPgorICAgICAgICAgICAgICAgICkgOiBudWxsIH0KKyAgICAgICAgICAgIDwv
ZGl2PgorICAgICAgICApOworICAgIH0KK30KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJi
ZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL3ByZWFjdC9zcmMvYXBwL2l0ZW0uanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3Jn
L1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9w
cmVhY3Qvc3JjL2FwcC9pdGVtLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVlZDMxYmE4ZTE3OWY0NzFhZGY2YmZj
MmJkMWNhYTVlNTZjMjQ3MDYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVu
Y2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9wcmVhY3Qvc3JjL2FwcC9pdGVtLmpzCkBAIC0wLDAgKzEsODUgQEAKK2ltcG9ydCBjeCBm
cm9tICdjbGFzc25hbWVzJzsKK2ltcG9ydCB7IGgsIENvbXBvbmVudCB9IGZyb20gJ3ByZWFjdCc7
CisKK2NvbnN0IEVTQ0FQRV9LRVkgPSAyNzsKK2NvbnN0IEVOVEVSX0tFWSA9IDEzOworCitleHBv
cnQgZGVmYXVsdCBjbGFzcyBUb2RvSXRlbSBleHRlbmRzIENvbXBvbmVudCB7CisgICAgaGFuZGxl
U3VibWl0ID0gKCkgPT4geworICAgICAgICBsZXQgeyBvblNhdmUsIG9uRGVzdHJveSwgdG9kbyB9
ID0gdGhpcy5wcm9wcywKKyAgICAgICAgICAgIHZhbCA9IHRoaXMuc3RhdGUuZWRpdFRleHQudHJp
bSgpOworICAgICAgICBpZiAodmFsKSB7CisgICAgICAgICAgICBvblNhdmUodG9kbywgdmFsKTsK
KyAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBlZGl0VGV4dDogdmFsIH0pOworICAgICAgICB9
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgb25EZXN0cm95KHRvZG8pOworICAgICAgICB9
CisgICAgfTsKKworICAgIGhhbmRsZUVkaXQgPSAoKSA9PiB7CisgICAgICAgIGxldCB7IG9uRWRp
dCwgdG9kbyB9ID0gdGhpcy5wcm9wczsKKyAgICAgICAgb25FZGl0KHRvZG8pOworICAgICAgICB0
aGlzLnNldFN0YXRlKHsgZWRpdFRleHQ6IHRvZG8udGl0bGUgfSk7CisgICAgfTsKKworICAgIHRv
Z2dsZSA9IGUgPT4geworICAgICAgICBsZXQgeyBvblRvZ2dsZSwgdG9kbyB9ID0gdGhpcy5wcm9w
czsKKyAgICAgICAgb25Ub2dnbGUodG9kbyk7CisgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsK
KyAgICB9OworCisgICAgaGFuZGxlS2V5RG93biA9IGUgPT4geworICAgICAgICBpZiAoZS53aGlj
aD09PUVTQ0FQRV9LRVkpIHsKKyAgICAgICAgICAgIGxldCB7IHRvZG8gfSA9IHRoaXMucHJvcHM7
CisgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgZWRpdFRleHQ6IHRvZG8udGl0bGUgfSk7Cisg
ICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2FuY2VsKHRvZG8pOworICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKGUud2hpY2g9PT1FTlRFUl9LRVkpIHsKKyAgICAgICAgICAgIHRoaXMuaGFuZGxl
U3VibWl0KCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgaGFuZGxlRGVzdHJveSA9ICgpID0+
IHsKKyAgICAgICAgdGhpcy5wcm9wcy5vbkRlc3Ryb3kodGhpcy5wcm9wcy50b2RvKTsKKyAgICB9
OworCisgICAgLy8gc2hvdWxkQ29tcG9uZW50VXBkYXRlKHsgdG9kbywgZWRpdGluZywgZWRpdFRl
eHQgfSkgeworICAgIC8vICByZXR1cm4gKAorICAgIC8vICAgICAgdG9kbyAhPT0gdGhpcy5wcm9w
cy50b2RvIHx8CisgICAgLy8gICAgICBlZGl0aW5nICE9PSB0aGlzLnByb3BzLmVkaXRpbmcgfHwK
KyAgICAvLyAgICAgIGVkaXRUZXh0ICE9PSB0aGlzLnN0YXRlLmVkaXRUZXh0CisgICAgLy8gICk7
CisgICAgLy8gfQorCisgICAgY29tcG9uZW50RGlkVXBkYXRlKCkgeworICAgICAgICBsZXQgbm9k
ZSA9IHRoaXMuYmFzZSAmJiB0aGlzLmJhc2UucXVlcnlTZWxlY3RvcignLmVkaXQnKTsKKyAgICAg
ICAgaWYgKG5vZGUpIG5vZGUuZm9jdXMoKTsKKyAgICB9CisKKyAgICByZW5kZXIoeyB0b2RvOnsg
dGl0bGUsIGNvbXBsZXRlZCB9LCBvblRvZ2dsZSwgb25EZXN0cm95LCBlZGl0aW5nIH0sIHsgZWRp
dFRleHQgfSkgeworICAgICAgICByZXR1cm4gKAorICAgICAgICAgICAgPGxpIGNsYXNzPXtjeCh7
IGNvbXBsZXRlZCwgZWRpdGluZyB9KX0+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmll
dyI+CisgICAgICAgICAgICAgICAgICAgIDxpbnB1dAorICAgICAgICAgICAgICAgICAgICAgICAg
Y2xhc3M9InRvZ2dsZSIKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImNoZWNrYm94Igor
ICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17Y29tcGxldGVkfQorICAgICAgICAgICAg
ICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMudG9nZ2xlfQorICAgICAgICAgICAgICAgICAgICAv
PgorICAgICAgICAgICAgICAgICAgICA8bGFiZWwgb25EYmxDbGljaz17dGhpcy5oYW5kbGVFZGl0
fT57dGl0bGV9PC9sYWJlbD4KKyAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZGVz
dHJveSIgb25DbGljaz17dGhpcy5oYW5kbGVEZXN0cm95fSAvPgorICAgICAgICAgICAgICAgIDwv
ZGl2PgorICAgICAgICAgICAgICAgIHsgZWRpdGluZyAmJiAoCisgICAgICAgICAgICAgICAgICAg
IDxpbnB1dAorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImVkaXQiCisgICAgICAgICAg
ICAgICAgICAgICAgICB2YWx1ZT17ZWRpdFRleHR9CisgICAgICAgICAgICAgICAgICAgICAgICBv
bkJsdXI9e3RoaXMuaGFuZGxlU3VibWl0fQorICAgICAgICAgICAgICAgICAgICAgICAgb25JbnB1
dD17dGhpcy5saW5rU3RhdGUoJ2VkaXRUZXh0Jyl9CisgICAgICAgICAgICAgICAgICAgICAgICBv
bktleURvd249e3RoaXMuaGFuZGxlS2V5RG93bn0KKyAgICAgICAgICAgICAgICAgICAgLz4KKyAg
ICAgICAgICAgICAgICApIH0KKyAgICAgICAgICAgIDwvbGk+CisgICAgICAgICk7CisgICAgfQor
fQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9y
ZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcHJlYWN0L3NyYy9hcHAvbW9k
ZWwuanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9wcmVhY3Qvc3JjL2FwcC9tb2RlbC5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4yYzhhYWUxZDUxYTBjNDMxYjhiZjI4NDhkYzQ5OWFiNDM3NzY5NDM1Ci0tLSAv
ZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9y
ZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcHJlYWN0L3NyYy9hcHAvbW9k
ZWwuanMKQEAgLTAsMCArMSw1NCBAQAoraW1wb3J0IHsgdXVpZCwgc3RvcmUgfSBmcm9tICcuL3V0
aWwnOworCitleHBvcnQgZGVmYXVsdCBjbGFzcyBUb2RvTW9kZWwgeworICAgIGNvbnN0cnVjdG9y
KGtleSwgc3ViKSB7CisgICAgICAgIHRoaXMua2V5ID0ga2V5OworICAgICAgICB0aGlzLnRvZG9z
ID0gc3RvcmUoa2V5KSB8fCBbXTsKKyAgICAgICAgdGhpcy5vbkNoYW5nZXMgPSBbc3ViXTsKKyAg
ICB9CisKKyAgICBpbmZvcm0oKSB7CisgICAgICAgIHN0b3JlKHRoaXMua2V5LCB0aGlzLnRvZG9z
KTsKKyAgICAgICAgdGhpcy5vbkNoYW5nZXMuZm9yRWFjaCggY2IgPT4gY2IoKSApOworICAgIH0K
KworICAgIGFkZFRvZG8odGl0bGUpIHsKKyAgICAgICAgdGhpcy50b2RvcyA9IHRoaXMudG9kb3Mu
Y29uY2F0KHsKKyAgICAgICAgICAgIGlkOiB1dWlkKCksCisgICAgICAgICAgICB0aXRsZSwKKyAg
ICAgICAgICAgIGNvbXBsZXRlZDogZmFsc2UKKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMuaW5m
b3JtKCk7CisgICAgfQorCisgICAgdG9nZ2xlQWxsKGNvbXBsZXRlZCkgeworICAgICAgICB0aGlz
LnRvZG9zID0gdGhpcy50b2Rvcy5tYXAoCisgICAgICAgICAgICB0b2RvID0+ICh7IC4uLnRvZG8s
IGNvbXBsZXRlZCB9KQorICAgICAgICApOworICAgICAgICB0aGlzLmluZm9ybSgpOworICAgIH0K
KworICAgIHRvZ2dsZSh0b2RvVG9Ub2dnbGUpIHsKKyAgICAgICAgdGhpcy50b2RvcyA9IHRoaXMu
dG9kb3MubWFwKCB0b2RvID0+ICgKKyAgICAgICAgICAgIHRvZG8gIT09IHRvZG9Ub1RvZ2dsZSA/
IHRvZG8gOiAoeyAuLi50b2RvLCBjb21wbGV0ZWQ6ICF0b2RvLmNvbXBsZXRlZCB9KQorICAgICAg
ICApICk7CisgICAgICAgIHRoaXMuaW5mb3JtKCk7CisgICAgfQorCisgICAgZGVzdHJveSh0b2Rv
KSB7CisgICAgICAgIHRoaXMudG9kb3MgPSB0aGlzLnRvZG9zLmZpbHRlciggdCA9PiB0ICE9PSB0
b2RvICk7CisgICAgICAgIHRoaXMuaW5mb3JtKCk7CisgICAgfQorCisgICAgc2F2ZSh0b2RvVG9T
YXZlLCB0aXRsZSkgeworICAgICAgICB0aGlzLnRvZG9zID0gdGhpcy50b2Rvcy5tYXAoIHRvZG8g
PT4gKAorICAgICAgICAgICAgdG9kbyAhPT0gdG9kb1RvU2F2ZSA/IHRvZG8gOiAoeyAuLi50b2Rv
LCB0aXRsZSB9KQorICAgICAgICApKTsKKyAgICAgICAgdGhpcy5pbmZvcm0oKTsKKyAgICB9CisK
KyAgICBjbGVhckNvbXBsZXRlZCgpIHsKKyAgICAgICAgdGhpcy50b2RvcyA9IHRoaXMudG9kb3Mu
ZmlsdGVyKCB0b2RvID0+ICF0b2RvLmNvbXBsZXRlZCApOworICAgICAgICB0aGlzLmluZm9ybSgp
OworICAgIH0KK30KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRv
bWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3ByZWFjdC9z
cmMvYXBwL3V0aWwuanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4x
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9wcmVhY3Qvc3JjL2FwcC91
dGlsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjI0MWVjMWFkOGJlNDNmYjEwYzlhMjcwM2M4YTdlNzM0NTNhMDdj
MmYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21l
dGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9wcmVhY3Qvc3Jj
L2FwcC91dGlsLmpzCkBAIC0wLDAgKzEsMjMgQEAKK2V4cG9ydCBmdW5jdGlvbiB1dWlkKCkgewor
ICAgIGxldCB1dWlkID0gJyc7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzMjsgaSsrKSB7Cisg
ICAgICAgIGxldCByYW5kb20gPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwOworICAgICAgICBpZiAo
aSA9PT0gOCB8fCBpID09PSAxMiB8fCBpID09PSAxNiB8fCBpID09PSAyMCkgeworICAgICAgICAg
ICAgdXVpZCArPSAnLSc7CisgICAgICAgIH0KKyAgICAgICAgdXVpZCArPSAoaSA9PT0gMTIgPyA0
IDogKGkgPT09IDE2ID8gKHJhbmRvbSAmIDMgfCA4KSA6IHJhbmRvbSkpLnRvU3RyaW5nKDE2KTsK
KyAgICB9CisgICAgcmV0dXJuIHV1aWQ7Cit9CisKK2V4cG9ydCBmdW5jdGlvbiBwbHVyYWxpemUo
Y291bnQsIHdvcmQpIHsKKyAgICByZXR1cm4gY291bnQgPT09IDEgPyB3b3JkIDogd29yZCArICdz
JzsKK30KKworZXhwb3J0IGZ1bmN0aW9uIHN0b3JlKG5hbWVzcGFjZSwgZGF0YSkgeworICAgIC8v
IGlmIChkYXRhKSByZXR1cm4gbG9jYWxTdG9yYWdlW25hbWVzcGFjZV0gPSBKU09OLnN0cmluZ2lm
eShkYXRhKTsKKworICAgIC8vIGxldCBzdG9yZSA9IGxvY2FsU3RvcmFnZVtuYW1lc3BhY2VdOwor
ICAgIC8vIHJldHVybiBzdG9yZSAmJiBKU09OLnBhcnNlKHN0b3JlKSB8fCBbXTsKKyAgICByZXR1
cm4gW107Cit9CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21l
dGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9wcmVhY3Qvc3Jj
L2luZGV4Lmh0bWwgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jl
c291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9wcmVhY3Qvc3JjL2luZGV4Lmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZjVlZWE1MWQ5MjhhNjIyMGRmOTIyM2M5NzAzOTE4MDZiZDU4ZTI0MQot
LS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIy
LjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3ByZWFjdC9zcmMvaW5k
ZXguaHRtbApAQCAtMCwwICsxLDE3IEBACis8IWRvY3R5cGUgaHRtbD4KKzxodG1sIGxhbmc9ImVu
IiBkYXRhLWZyYW1ld29yaz0icHJlYWN0Ij4KKyAgICA8aGVhZD4KKyAgICAgICAgPG1ldGEgY2hh
cnNldD0idXRmLTgiPgorICAgICAgICA8dGl0bGU+UHJlYWN0IFRvZG9NVkMgZXhhbXBsZTwvdGl0
bGU+CisgICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0idG9kb212Yy1jb21tb24v
YmFzZS5jc3MiPgorICAgICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InRvZG9tdmMu
Y3NzIj4KKyAgICA8L2hlYWQ+CisgICAgPGJvZHk+CisgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0
b2RvYXBwIj48L3NlY3Rpb24+CisgICAgICAgIDxmb290ZXIgY2xhc3M9ImluZm8iPgorICAgICAg
ICAgICAgPHA+RG91YmxlLWNsaWNrIHRvIGVkaXQgYSB0b2RvPC9wPgorICAgICAgICAgICAgPHA+
UGFydCBvZiA8YSBocmVmPSJodHRwOi8vdG9kb212Yy5jb20iPlRvZG9NVkM8L2E+PC9wPgorICAg
ICAgICA8L2Zvb3Rlcj4KKyAgICAgICAgPHNjcmlwdCBzcmM9ImFwcC5qcyI+PC9zY3JpcHQ+Cisg
ICAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9y
Zy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
cHJlYWN0L3NyYy9pbmRleC5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0
ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3ByZWFjdC9zcmMv
aW5kZXguanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNTZiYzUxZmRmMTYwZmYyNmViMTVhMDMyMGRhM2NiNmZjNTNj
MDMxMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRv
bWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3ByZWFjdC9z
cmMvaW5kZXguanMKQEAgLTAsMCArMSw2IEBACitpbXBvcnQgeyBoLCByZW5kZXIgfSBmcm9tICdw
cmVhY3QnOworaW1wb3J0IEFwcCBmcm9tICcuL2FwcCc7CisvLyBpbXBvcnQgJ3RvZG9tdmMtY29t
bW9uJzsKKy8vIGltcG9ydCAndG9kb212Yy1jb21tb24vYmFzZS5jc3MnOworLy8gaW1wb3J0ICd0
b2RvbXZjLWFwcC1jc3MvaW5kZXguY3NzJzsKK3JlbmRlcig8QXBwIC8+LCBkb2N1bWVudC5xdWVy
eVNlbGVjdG9yKCcudG9kb2FwcCcpKTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5j
aC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL3ByZWFjdC93ZWJwYWNrLmNvbmZpZy5iYWJlbC5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5j
aC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL3ByZWFjdC93ZWJwYWNrLmNvbmZpZy5iYWJlbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNzU3MjY3MDU5
MGEyNDdmMWNjMGMxYmNkOTczNTI0ZjljMDYyODQyCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0
ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvcHJlYWN0L3dlYnBhY2suY29uZmlnLmJhYmVsLmpzCkBAIC0wLDAg
KzEsMzkgQEAKK2ltcG9ydCBFeHRyYWN0VGV4dFBsdWdpbiBmcm9tICdleHRyYWN0LXRleHQtd2Vi
cGFjay1wbHVnaW4nOworaW1wb3J0IFJlcGxhY2VQbHVnaW4gZnJvbSAncmVwbGFjZS1idW5kbGUt
d2VicGFjay1wbHVnaW4nOworCittb2R1bGUuZXhwb3J0cyA9IHsKKyAgICBlbnRyeTogeworICAg
ICAgICBhcHA6ICcuL3NyYy9pbmRleC5qcycsCisgICAgICAgICd0b2RvbXZjLWNvbW1vbic6ICd0
b2RvbXZjLWNvbW1vbicKKyAgICB9LAorICAgIG91dHB1dDogeworICAgICAgICBwYXRoOiAnLi9k
aXN0JywKKyAgICAgICAgZmlsZW5hbWU6ICdbbmFtZV0uanMnCisgICAgfSwKKyAgICBtb2R1bGU6
IHsKKyAgICAgICAgbG9hZGVyczogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRl
c3Q6IC9cLmpzeD8kLywKKyAgICAgICAgICAgICAgICBleGNsdWRlOiAvbm9kZV9tb2R1bGVzLywK
KyAgICAgICAgICAgICAgICBsb2FkZXI6ICdiYWJlbCcKKyAgICAgICAgICAgIH0sCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgdGVzdDogL1wuY3NzJC8sCisgICAgICAgICAgICAgICAg
bG9hZGVyOiBFeHRyYWN0VGV4dFBsdWdpbi5leHRyYWN0KCdzdHlsZScsICdjc3M/c291cmNlTWFw
JykKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgcGx1Z2luczogWworICAg
ICAgICBuZXcgRXh0cmFjdFRleHRQbHVnaW4oJ3N0eWxlLmNzcycsIHsgYWxsQ2h1bmtzOiB0cnVl
IH0pLAorICAgICAgICBuZXcgUmVwbGFjZVBsdWdpbihbeworICAgICAgICAgICAgLy8gdGhpcyBp
cyBhY3R1YWxseSB0aGUgcHJvcGVydHkgbmFtZSBodHRwczovL2dpdGh1Yi5jb20va2ltaG91L3Jl
cGxhY2UtYnVuZGxlLXdlYnBhY2stcGx1Z2luL2lzc3Vlcy8xCisgICAgICAgICAgICBwYXJ0dGVu
OiAvdGhyb3dccysobmV3XHMrKT9bYS16QS1aXStFcnJvclxzKlwoL2csCisgICAgICAgICAgICBy
ZXBsYWNlbWVudDogKCkgPT4gJ3JldHVybjsoJworICAgICAgICB9XSkKKyAgICBdLAorICAgIGRl
dnRvb2w6ICdzb3VyY2UtbWFwJywKKyAgICBkZXZTZXJ2ZXI6IHsKKyAgICAgICAgcG9ydDogcHJv
Y2Vzcy5lbnYuUE9SVCB8fCA4MDgwLAorICAgICAgICBjb250ZW50QmFzZTogJy4vc3JjJworICAg
IH0KK307CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVy
Mi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC1yZWR1eC9S
RUFETUUubWQgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC1yZWR1eC9SRUFETUUubWQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZWNlMjQwZmViMzZiZWVkNmRlNjQ4NDI2ZTcxZDcwNDA1MzgzYTI3NwotLS0g
L2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEv
cmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0LXJlZHV4L1JFQURN
RS5tZApAQCAtMCwwICsxLDE2IEBACisjIFNwZWVkb21ldGVyIDIuMTogUmVhY3QgUmVkdXggVG9k
b01WQyBleGFtcGxlCisKKyMjIFRlc3QgbG9jYWxseQorCisxLiBgbnBtIGluc3RhbGxgCisyLiBg
bnBtIHN0YXJ0YCBydW5zIHRoZSBhcHAgaW4gZGV2ZWxvcG1lbnQgbW9kZQorMy4gT3BlbiA8aHR0
cDovL2xvY2FsaG9zdDozMDAwLz4gdG8gdmlldyBpdCBpbiB0aGUgYnJvd3Nlci4KKworVGhlIHBh
Z2UgcmVsb2FkcyB3aGVuZXZlciB5b3UgbWFrZSBlZGl0cy4gTGludCBlcnJvcnMgYXJlIHByaW50
ZWQgdG8gdGhlIGNvbnNvbGUuCisKKyMjIEJ1aWxkCisKKzEuIGBucG0gcnVuIGJ1aWxkYAorCitU
aGlzIGJ1aWxkcyB0aGUgYXBwIGZvciBwcm9kdWN0aW9uIHRvIHRoZSBgZGlzdGAgZm9sZGVyLiBJ
dCBjb3JyZWN0bHkgYnVuZGxlcworUmVhY3QgaW4gcHJvZHVjdGlvbiBtb2RlIGFuZCBvcHRpbWl6
ZXMgdGhlIGJ1aWxkIGZvciB0aGUgYmVzdCBwZXJmb3JtYW5jZS4KZGlmZiAtLWdpdCBhL1dlYnNp
dGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0LXJlZHV4L2Rpc3QvaW5kZXguaHRtbCBiL1dlYnNpdGVz
L2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL3JlYWN0LXJlZHV4L2Rpc3QvaW5kZXguaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44
NTIxZjJmYTU1NDY5NjhiYjg2MzYzNzhjZTM4ZGNjZjdkMzUyZmZjCi0tLSAvZGV2L251bGwKKysr
IGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9k
b212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QtcmVkdXgvZGlzdC9pbmRleC5odG1sCkBA
IC0wLDAgKzEgQEAKKzwhRE9DVFlQRSBodG1sPjxodG1sIGxhbmc9ImVuIj48aGVhZD48bWV0YSBj
aGFyc2V0PSJ1dGYtOCI+PG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmlj
ZS13aWR0aCxpbml0aWFsLXNjYWxlPTEiPjx0aXRsZT5SZWFjdCBSZWR1eCBUb2RvTVZDIGV4YW1w
bGU8L3RpdGxlPjxsaW5rIGhyZWY9Ii4vc3RhdGljL2Nzcy9tYWluLjIxMTExNzQyLmNzcyIgcmVs
PSJzdHlsZXNoZWV0Ij48L2hlYWQ+PGJvZHk+PGRpdiBjbGFzcz0idG9kb2FwcCIgaWQ9InJvb3Qi
PjwvZGl2PjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4vc3RhdGljL2pzL21h
aW4uMThiNDA5ZTEuanMiPjwvc2NyaXB0PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9t
ZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QtcmVk
dXgvZGlzdC9zZXJ2aWNlLXdvcmtlci5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3Bl
ZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0
LXJlZHV4L2Rpc3Qvc2VydmljZS13b3JrZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmY4ZDQ3ZDUwYmFmMDY4
MGRlOTIwNjNiN2RjZDY3NmQ4MTQ0MGE4YQotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jy
b3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL3JlYWN0LXJlZHV4L2Rpc3Qvc2VydmljZS13b3JrZXIuanMKQEAgLTAsMCAr
MSBAQAorInVzZSBzdHJpY3QiO2Z1bmN0aW9uIHNldE9mQ2FjaGVkVXJscyhlKXtyZXR1cm4gZS5r
ZXlzKCkudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUu
dXJsfSl9KS50aGVuKGZ1bmN0aW9uKGUpe3JldHVybiBuZXcgU2V0KGUpfSl9dmFyIHByZWNhY2hl
Q29uZmlnPVtbIi4vaW5kZXguaHRtbCIsIjcwZTk1YTNmM2ExZDFjYmQzMzNiODU0NDU4MGM0MTMw
Il0sWyIuL3N0YXRpYy9jc3MvbWFpbi4yMTExMTc0Mi5jc3MiLCJmZWMyODExYmUxMDNkYTQ0NjBj
Njc1MDBmMzdiYjNmYiJdLFsiLi9zdGF0aWMvanMvbWFpbi4xOGI0MDllMS5qcyIsImJjNzZlNWQ4
NTBjNDhhM2FlMjQ3ODRlMzM1ZWYwYjBlIl1dLGNhY2hlTmFtZT0ic3ctcHJlY2FjaGUtdjMtc3ct
cHJlY2FjaGUtd2VicGFjay1wbHVnaW4tIisoc2VsZi5yZWdpc3RyYXRpb24/c2VsZi5yZWdpc3Ry
YXRpb24uc2NvcGU6IiIpLGlnbm9yZVVybFBhcmFtZXRlcnNNYXRjaGluZz1bL151dG1fL10sYWRk
RGlyZWN0b3J5SW5kZXg9ZnVuY3Rpb24oZSx0KXt2YXIgbj1uZXcgVVJMKGUpO3JldHVybiIvIj09
PW4ucGF0aG5hbWUuc2xpY2UoLTEpJiYobi5wYXRobmFtZSs9dCksbi50b1N0cmluZygpfSxjbGVh
blJlc3BvbnNlPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlZGlyZWN0ZWQ/KCJib2R5ImluIGU/UHJv
bWlzZS5yZXNvbHZlKGUuYm9keSk6ZS5ibG9iKCkpLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIG5l
dyBSZXNwb25zZSh0LHtoZWFkZXJzOmUuaGVhZGVycyxzdGF0dXM6ZS5zdGF0dXMsc3RhdHVzVGV4
dDplLnN0YXR1c1RleHR9KX0pOlByb21pc2UucmVzb2x2ZShlKX0sY3JlYXRlQ2FjaGVLZXk9ZnVu
Y3Rpb24oZSx0LG4scil7dmFyIGE9bmV3IFVSTChlKTtyZXR1cm4gciYmYS5wYXRobmFtZS5tYXRj
aChyKXx8KGEuc2VhcmNoKz0oYS5zZWFyY2g/IiYiOiIiKStlbmNvZGVVUklDb21wb25lbnQodCkr
Ij0iK2VuY29kZVVSSUNvbXBvbmVudChuKSksYS50b1N0cmluZygpfSxpc1BhdGhXaGl0ZWxpc3Rl
ZD1mdW5jdGlvbihlLHQpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4hMDt2YXIgbj1uZXcgVVJMKHQp
LnBhdGhuYW1lO3JldHVybiBlLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIG4ubWF0Y2goZSl9KX0s
c3RyaXBJZ25vcmVkVXJsUGFyYW1ldGVycz1mdW5jdGlvbihlLHQpe3ZhciBuPW5ldyBVUkwoZSk7
cmV0dXJuIG4uaGFzaD0iIixuLnNlYXJjaD1uLnNlYXJjaC5zbGljZSgxKS5zcGxpdCgiJiIpLm1h
cChmdW5jdGlvbihlKXtyZXR1cm4gZS5zcGxpdCgiPSIpfSkuZmlsdGVyKGZ1bmN0aW9uKGUpe3Jl
dHVybiB0LmV2ZXJ5KGZ1bmN0aW9uKHQpe3JldHVybiF0LnRlc3QoZVswXSl9KX0pLm1hcChmdW5j
dGlvbihlKXtyZXR1cm4gZS5qb2luKCI9Iil9KS5qb2luKCImIiksbi50b1N0cmluZygpfSxoYXNo
UGFyYW1OYW1lPSJfc3ctcHJlY2FjaGUiLHVybHNUb0NhY2hlS2V5cz1uZXcgTWFwKHByZWNhY2hl
Q29uZmlnLm1hcChmdW5jdGlvbihlKXt2YXIgdD1lWzBdLG49ZVsxXSxyPW5ldyBVUkwodCxzZWxm
LmxvY2F0aW9uKSxhPWNyZWF0ZUNhY2hlS2V5KHIsaGFzaFBhcmFtTmFtZSxuLC9cLlx3ezh9XC4v
KTtyZXR1cm5bci50b1N0cmluZygpLGFdfSkpO3NlbGYuYWRkRXZlbnRMaXN0ZW5lcigiaW5zdGFs
bCIsZnVuY3Rpb24oZSl7ZS53YWl0VW50aWwoY2FjaGVzLm9wZW4oY2FjaGVOYW1lKS50aGVuKGZ1
bmN0aW9uKGUpe3JldHVybiBzZXRPZkNhY2hlZFVybHMoZSkudGhlbihmdW5jdGlvbih0KXtyZXR1
cm4gUHJvbWlzZS5hbGwoQXJyYXkuZnJvbSh1cmxzVG9DYWNoZUtleXMudmFsdWVzKCkpLm1hcChm
dW5jdGlvbihuKXtpZighdC5oYXMobikpe3ZhciByPW5ldyBSZXF1ZXN0KG4se2NyZWRlbnRpYWxz
OiJzYW1lLW9yaWdpbiJ9KTtyZXR1cm4gZmV0Y2gocikudGhlbihmdW5jdGlvbih0KXtpZighdC5v
ayl0aHJvdyBuZXcgRXJyb3IoIlJlcXVlc3QgZm9yICIrbisiIHJldHVybmVkIGEgcmVzcG9uc2Ug
d2l0aCBzdGF0dXMgIit0LnN0YXR1cyk7cmV0dXJuIGNsZWFuUmVzcG9uc2UodCkudGhlbihmdW5j
dGlvbih0KXtyZXR1cm4gZS5wdXQobix0KX0pfSl9fSkpfSl9KS50aGVuKGZ1bmN0aW9uKCl7cmV0
dXJuIHNlbGYuc2tpcFdhaXRpbmcoKX0pKX0pLHNlbGYuYWRkRXZlbnRMaXN0ZW5lcigiYWN0aXZh
dGUiLGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBTZXQodXJsc1RvQ2FjaGVLZXlzLnZhbHVlcygpKTtl
LndhaXRVbnRpbChjYWNoZXMub3BlbihjYWNoZU5hbWUpLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJu
IGUua2V5cygpLnRoZW4oZnVuY3Rpb24obil7cmV0dXJuIFByb21pc2UuYWxsKG4ubWFwKGZ1bmN0
aW9uKG4pe2lmKCF0LmhhcyhuLnVybCkpcmV0dXJuIGUuZGVsZXRlKG4pfSkpfSl9KS50aGVuKGZ1
bmN0aW9uKCl7cmV0dXJuIHNlbGYuY2xpZW50cy5jbGFpbSgpfSkpfSksc2VsZi5hZGRFdmVudExp
c3RlbmVyKCJmZXRjaCIsZnVuY3Rpb24oZSl7aWYoIkdFVCI9PT1lLnJlcXVlc3QubWV0aG9kKXt2
YXIgdCxuPXN0cmlwSWdub3JlZFVybFBhcmFtZXRlcnMoZS5yZXF1ZXN0LnVybCxpZ25vcmVVcmxQ
YXJhbWV0ZXJzTWF0Y2hpbmcpOyh0PXVybHNUb0NhY2hlS2V5cy5oYXMobikpfHwobj1hZGREaXJl
Y3RvcnlJbmRleChuLCJpbmRleC5odG1sIiksdD11cmxzVG9DYWNoZUtleXMuaGFzKG4pKTshdCYm
Im5hdmlnYXRlIj09PWUucmVxdWVzdC5tb2RlJiZpc1BhdGhXaGl0ZWxpc3RlZChbIl4oPyFcXC9f
XykuKiJdLGUucmVxdWVzdC51cmwpJiYobj1uZXcgVVJMKCIuL2luZGV4Lmh0bWwiLHNlbGYubG9j
YXRpb24pLnRvU3RyaW5nKCksdD11cmxzVG9DYWNoZUtleXMuaGFzKG4pKSx0JiZlLnJlc3BvbmRX
aXRoKGNhY2hlcy5vcGVuKGNhY2hlTmFtZSkudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXRj
aCh1cmxzVG9DYWNoZUtleXMuZ2V0KG4pKS50aGVuKGZ1bmN0aW9uKGUpe2lmKGUpcmV0dXJuIGU7
dGhyb3cgRXJyb3IoIlRoZSBjYWNoZWQgcmVzcG9uc2UgdGhhdCB3YXMgZXhwZWN0ZWQgaXMgbWlz
c2luZy4iKX0pfSkuY2F0Y2goZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybignQ291bGRu
XCd0IHNlcnZlIHJlc3BvbnNlIGZvciAiJXMiIGZyb20gY2FjaGU6ICVPJyxlLnJlcXVlc3QudXJs
LHQpLGZldGNoKGUucmVxdWVzdCl9KSl9fSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpk
aWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QtcmVkdXgvZGlzdC9zdGF0
aWMvY3NzL21haW4uMjExMTE3NDIuY3NzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVl
ZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qt
cmVkdXgvZGlzdC9zdGF0aWMvY3NzL21haW4uMjExMTE3NDIuY3NzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVlNWFh
MTlmZjIxODVhYzAzMDlhYTc2MmMxNDUxYzdkNTMyZmRhMWEKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZj
L2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC1yZWR1eC9kaXN0L3N0YXRpYy9jc3MvbWFpbi4y
MTExMTc0Mi5jc3MKQEAgLTAsMCArMSwyIEBACitib2R5LGJ1dHRvbixodG1se21hcmdpbjowO3Bh
ZGRpbmc6MH1idXR0b257Ym9yZGVyOjA7YmFja2dyb3VuZDpub25lO2ZvbnQtc2l6ZToxMDAlO3Zl
cnRpY2FsLWFsaWduOmJhc2VsaW5lO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5o
ZXJpdDtjb2xvcjppbmhlcml0Oy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5j
ZTpub25lO2FwcGVhcmFuY2U6bm9uZTstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2Vk
fWJvZHksYnV0dG9uey1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZX1ib2R5e2ZvbnQ6
MTRweCBIZWx2ZXRpY2EgTmV1ZSxIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZjtsaW5lLWhlaWdo
dDoxLjRlbTtiYWNrZ3JvdW5kOiNmNWY1ZjU7Y29sb3I6IzRkNGQ0ZDttaW4td2lkdGg6MjMwcHg7
bWF4LXdpZHRoOjU1MHB4O21hcmdpbjowIGF1dG87LXdlYmtpdC1mb250LXNtb290aGluZzphbnRp
YWxpYXNlZDtmb250LXdlaWdodDozMDB9OmZvY3Vze291dGxpbmU6MH0uaGlkZGVue2Rpc3BsYXk6
bm9uZX0udG9kb2FwcHtiYWNrZ3JvdW5kOiNmZmY7bWFyZ2luOjEzMHB4IDAgNDBweDtwb3NpdGlv
bjpyZWxhdGl2ZTstd2Via2l0LWJveC1zaGFkb3c6MCAycHggNHB4IDAgcmdiYSgwLDAsMCwuMiks
MCAyNXB4IDUwcHggMCByZ2JhKDAsMCwwLC4xKTtib3gtc2hhZG93OjAgMnB4IDRweCAwIHJnYmEo
MCwwLDAsLjIpLDAgMjVweCA1MHB4IDAgcmdiYSgwLDAsMCwuMSl9LnRvZG9hcHAgaW5wdXQ6Oi13
ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Zm9udC1zdHlsZTppdGFsaWM7Zm9udC13ZWlnaHQ6MzAw
O2NvbG9yOiNlNmU2ZTZ9LnRvZG9hcHAgaW5wdXQ6Oi1tb3otcGxhY2Vob2xkZXJ7Zm9udC1zdHls
ZTppdGFsaWM7Zm9udC13ZWlnaHQ6MzAwO2NvbG9yOiNlNmU2ZTZ9LnRvZG9hcHAgaW5wdXQ6Omlu
cHV0LXBsYWNlaG9sZGVye2ZvbnQtc3R5bGU6aXRhbGljO2ZvbnQtd2VpZ2h0OjMwMDtjb2xvcjoj
ZTZlNmU2fS50b2RvYXBwIGgxe3Bvc2l0aW9uOmFic29sdXRlO3RvcDotMTU1cHg7d2lkdGg6MTAw
JTtmb250LXNpemU6MTAwcHg7Zm9udC13ZWlnaHQ6MTAwO3RleHQtYWxpZ246Y2VudGVyO2NvbG9y
OnJnYmEoMTc1LDQ3LDQ3LC4xNSk7LXdlYmtpdC10ZXh0LXJlbmRlcmluZzpvcHRpbWl6ZUxlZ2li
aWxpdHk7LW1vei10ZXh0LXJlbmRlcmluZzpvcHRpbWl6ZUxlZ2liaWxpdHk7dGV4dC1yZW5kZXJp
bmc6b3B0aW1pemVMZWdpYmlsaXR5fS5lZGl0LC5uZXctdG9kb3twb3NpdGlvbjpyZWxhdGl2ZTtt
YXJnaW46MDt3aWR0aDoxMDAlO2ZvbnQtc2l6ZToyNHB4O2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9u
dC13ZWlnaHQ6aW5oZXJpdDtsaW5lLWhlaWdodDoxLjRlbTtib3JkZXI6MDtjb2xvcjppbmhlcml0
O3BhZGRpbmc6NnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTstd2Via2l0LWJveC1zaGFkb3c6aW5z
ZXQgMCAtMXB4IDVweCAwIHJnYmEoMCwwLDAsLjIpO2JveC1zaGFkb3c6aW5zZXQgMCAtMXB4IDVw
eCAwIHJnYmEoMCwwLDAsLjIpOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXpp
bmc6Ym9yZGVyLWJveDstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkOy1tb3otb3N4
LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZX0ubmV3LXRvZG97cGFkZGluZzoxNnB4IDE2cHggMTZw
eCA2MHB4O2JvcmRlcjpub25lO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDAzKTstd2Via2l0LWJv
eC1zaGFkb3c6aW5zZXQgMCAtMnB4IDFweCByZ2JhKDAsMCwwLC4wMyk7Ym94LXNoYWRvdzppbnNl
dCAwIC0ycHggMXB4IHJnYmEoMCwwLDAsLjAzKX0ubWFpbntwb3NpdGlvbjpyZWxhdGl2ZTt6LWlu
ZGV4OjI7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U2ZTZlNn0udG9nZ2xlLWFsbHt0ZXh0LWFsaWdu
OmNlbnRlcjtib3JkZXI6bm9uZTtvcGFjaXR5OjA7cG9zaXRpb246YWJzb2x1dGV9LnRvZ2dsZS1h
bGwrbGFiZWx7d2lkdGg6NjBweDtoZWlnaHQ6MzRweDtmb250LXNpemU6MDtwb3NpdGlvbjphYnNv
bHV0ZTt0b3A6LTUycHg7bGVmdDotMTNweDstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoOTBkZWcp
Oy1tcy10cmFuc2Zvcm06cm90YXRlKDkwZGVnKTt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX0udG9n
Z2xlLWFsbCtsYWJlbDpiZWZvcmV7Y29udGVudDoiXDI3NkYiO2ZvbnQtc2l6ZToyMnB4O2NvbG9y
OiNlNmU2ZTY7cGFkZGluZzoxMHB4IDI3cHh9LnRvZ2dsZS1hbGw6Y2hlY2tlZCtsYWJlbDpiZWZv
cmV7Y29sb3I6IzczNzM3M30udG9kby1saXN0e21hcmdpbjowO3BhZGRpbmc6MDtsaXN0LXN0eWxl
Om5vbmV9LnRvZG8tbGlzdCBsaXtwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6MjRweDtib3Jk
ZXItYm90dG9tOjFweCBzb2xpZCAjZWRlZGVkfS50b2RvLWxpc3QgbGk6bGFzdC1jaGlsZHtib3Jk
ZXItYm90dG9tOm5vbmV9LnRvZG8tbGlzdCBsaS5lZGl0aW5ne2JvcmRlci1ib3R0b206bm9uZTtw
YWRkaW5nOjB9LnRvZG8tbGlzdCBsaS5lZGl0aW5nIC5lZGl0e2Rpc3BsYXk6YmxvY2s7d2lkdGg6
NTA2cHg7cGFkZGluZzoxMnB4IDE2cHg7bWFyZ2luOjAgMCAwIDQzcHh9LnRvZG8tbGlzdCBsaS5l
ZGl0aW5nIC52aWV3e2Rpc3BsYXk6bm9uZX0udG9kby1saXN0IGxpIC50b2dnbGV7dGV4dC1hbGln
bjpjZW50ZXI7d2lkdGg6NDBweDtoZWlnaHQ6YXV0bztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDti
b3R0b206MDttYXJnaW46YXV0byAwO2JvcmRlcjpub25lOy13ZWJraXQtYXBwZWFyYW5jZTpub25l
Oy1tb3otYXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZTtvcGFjaXR5OjB9LnRvZG8tbGlz
dCBsaSAudG9nZ2xlK2xhYmVse2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4
bWw7dXRmOCwlM0NzdmclMjB4bWxucyUzRCUyMmh0dHAlM0EvL3d3dy53My5vcmcvMjAwMC9zdmcl
MjIlMjB3aWR0aCUzRCUyMjQwJTIyJTIwaGVpZ2h0JTNEJTIyNDAlMjIlMjB2aWV3Qm94JTNEJTIy
LTEwJTIwLTE4JTIwMTAwJTIwMTM1JTIyJTNFJTNDY2lyY2xlJTIwY3glM0QlMjI1MCUyMiUyMGN5
JTNEJTIyNTAlMjIlMjByJTNEJTIyNTAlMjIlMjBmaWxsJTNEJTIybm9uZSUyMiUyMHN0cm9rZSUz
RCUyMiUyM2VkZWRlZCUyMiUyMHN0cm9rZS13aWR0aCUzRCUyMjMlMjIvJTNFJTNDL3N2ZyUzRSIp
O2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXBvc2l0aW9uOjB9LnRvZG8t
bGlzdCBsaSAudG9nZ2xlOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6
aW1hZ2Uvc3ZnK3htbDt1dGY4LCUzQ3N2ZyUyMHhtbG5zJTNEJTIyaHR0cCUzQS8vd3d3LnczLm9y
Zy8yMDAwL3N2ZyUyMiUyMHdpZHRoJTNEJTIyNDAlMjIlMjBoZWlnaHQlM0QlMjI0MCUyMiUyMHZp
ZXdCb3glM0QlMjItMTAlMjAtMTglMjAxMDAlMjAxMzUlMjIlM0UlM0NjaXJjbGUlMjBjeCUzRCUy
MjUwJTIyJTIwY3klM0QlMjI1MCUyMiUyMHIlM0QlMjI1MCUyMiUyMGZpbGwlM0QlMjJub25lJTIy
JTIwc3Ryb2tlJTNEJTIyJTIzYmRkYWQ1JTIyJTIwc3Ryb2tlLXdpZHRoJTNEJTIyMyUyMi8lM0Ul
M0NwYXRoJTIwZmlsbCUzRCUyMiUyMzVkYzJhZiUyMiUyMGQlM0QlMjJNNzIlMjAyNUw0MiUyMDcx
JTIwMjclMjA1NmwtNCUyMDQlMjAyMCUyMDIwJTIwMzQtNTJ6JTIyLyUzRSUzQy9zdmclM0UiKX0u
dG9kby1saXN0IGxpIGxhYmVse3dvcmQtYnJlYWs6YnJlYWstYWxsO3BhZGRpbmc6MTVweCAxNXB4
IDE1cHggNjBweDtkaXNwbGF5OmJsb2NrO2xpbmUtaGVpZ2h0OjEuMjstd2Via2l0LXRyYW5zaXRp
b246Y29sb3IgLjRzOy1vLXRyYW5zaXRpb246Y29sb3IgLjRzO3RyYW5zaXRpb246Y29sb3IgLjRz
fS50b2RvLWxpc3QgbGkuY29tcGxldGVkIGxhYmVse2NvbG9yOiNkOWQ5ZDk7dGV4dC1kZWNvcmF0
aW9uOmxpbmUtdGhyb3VnaH0udG9kby1saXN0IGxpIC5kZXN0cm95e2Rpc3BsYXk6bm9uZTtwb3Np
dGlvbjphYnNvbHV0ZTt0b3A6MDtyaWdodDoxMHB4O2JvdHRvbTowO3dpZHRoOjQwcHg7aGVpZ2h0
OjQwcHg7bWFyZ2luOmF1dG8gMDtmb250LXNpemU6MzBweDtjb2xvcjojY2M5YTlhO21hcmdpbi1i
b3R0b206MTFweDstd2Via2l0LXRyYW5zaXRpb246Y29sb3IgLjJzIGVhc2Utb3V0Oy1vLXRyYW5z
aXRpb246Y29sb3IgLjJzIGVhc2Utb3V0O3RyYW5zaXRpb246Y29sb3IgLjJzIGVhc2Utb3V0fS50
b2RvLWxpc3QgbGkgLmRlc3Ryb3k6aG92ZXJ7Y29sb3I6I2FmNWI1ZX0udG9kby1saXN0IGxpIC5k
ZXN0cm95OmFmdGVye2NvbnRlbnQ6IlxENyJ9LnRvZG8tbGlzdCBsaTpob3ZlciAuZGVzdHJveXtk
aXNwbGF5OmJsb2NrfS50b2RvLWxpc3QgbGkgLmVkaXR7ZGlzcGxheTpub25lfS50b2RvLWxpc3Qg
bGkuZWRpdGluZzpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206LTFweH0uZm9vdGVye2NvbG9yOiM3
Nzc7cGFkZGluZzoxMHB4IDE1cHg7aGVpZ2h0OjIwcHg7dGV4dC1hbGlnbjpjZW50ZXI7Ym9yZGVy
LXRvcDoxcHggc29saWQgI2U2ZTZlNn0uZm9vdGVyOmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9u
OmFic29sdXRlO3JpZ2h0OjA7Ym90dG9tOjA7bGVmdDowO2hlaWdodDo1MHB4O292ZXJmbG93Omhp
ZGRlbjstd2Via2l0LWJveC1zaGFkb3c6MCAxcHggMXB4IHJnYmEoMCwwLDAsLjIpLDAgOHB4IDAg
LTNweCAjZjZmNmY2LDAgOXB4IDFweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgMTZweCAwIC02cHgg
I2Y2ZjZmNiwwIDE3cHggMnB4IC02cHggcmdiYSgwLDAsMCwuMik7Ym94LXNoYWRvdzowIDFweCAx
cHggcmdiYSgwLDAsMCwuMiksMCA4cHggMCAtM3B4ICNmNmY2ZjYsMCA5cHggMXB4IC0zcHggcmdi
YSgwLDAsMCwuMiksMCAxNnB4IDAgLTZweCAjZjZmNmY2LDAgMTdweCAycHggLTZweCByZ2JhKDAs
MCwwLC4yKX0udG9kby1jb3VudHtmbG9hdDpsZWZ0O3RleHQtYWxpZ246bGVmdH0udG9kby1jb3Vu
dCBzdHJvbmd7Zm9udC13ZWlnaHQ6MzAwfS5maWx0ZXJze21hcmdpbjowO3BhZGRpbmc6MDtsaXN0
LXN0eWxlOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDtsZWZ0OjB9LmZpbHRlcnMgbGl7
ZGlzcGxheTppbmxpbmV9LmZpbHRlcnMgbGkgYXtjb2xvcjppbmhlcml0O21hcmdpbjozcHg7cGFk
ZGluZzozcHggN3B4O3RleHQtZGVjb3JhdGlvbjpub25lO2JvcmRlcjoxcHggc29saWQgdHJhbnNw
YXJlbnQ7Ym9yZGVyLXJhZGl1czozcHh9LmZpbHRlcnMgbGkgYTpob3Zlcntib3JkZXItY29sb3I6
cmdiYSgxNzUsNDcsNDcsLjEpfS5maWx0ZXJzIGxpIGEuc2VsZWN0ZWR7Ym9yZGVyLWNvbG9yOnJn
YmEoMTc1LDQ3LDQ3LC4yKX0uY2xlYXItY29tcGxldGVkLGh0bWwgLmNsZWFyLWNvbXBsZXRlZDph
Y3RpdmV7ZmxvYXQ6cmlnaHQ7cG9zaXRpb246cmVsYXRpdmU7bGluZS1oZWlnaHQ6MjBweDt0ZXh0
LWRlY29yYXRpb246bm9uZTtjdXJzb3I6cG9pbnRlcn0uY2xlYXItY29tcGxldGVkOmhvdmVye3Rl
eHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9LmluZm97bWFyZ2luOjY1cHggYXV0byAwO2NvbG9yOiNi
ZmJmYmY7Zm9udC1zaXplOjEwcHg7dGV4dC1zaGFkb3c6MCAxcHggMCBoc2xhKDAsMCUsMTAwJSwu
NSk7dGV4dC1hbGlnbjpjZW50ZXJ9LmluZm8gcHtsaW5lLWhlaWdodDoxfS5pbmZvIGF7Y29sb3I6
aW5oZXJpdDt0ZXh0LWRlY29yYXRpb246bm9uZTtmb250LXdlaWdodDo0MDB9LmluZm8gYTpob3Zl
cnt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfUBtZWRpYSBzY3JlZW4gYW5kICgtd2Via2l0LW1p
bi1kZXZpY2UtcGl4ZWwtcmF0aW86MCl7LnRvZG8tbGlzdCBsaSAudG9nZ2xlLC50b2dnbGUtYWxs
e2JhY2tncm91bmQ6bm9uZX0udG9kby1saXN0IGxpIC50b2dnbGV7aGVpZ2h0OjQwcHh9fUBtZWRp
YSAobWF4LXdpZHRoOjQzMHB4KXsuZm9vdGVye2hlaWdodDo1MHB4fS5maWx0ZXJze2JvdHRvbTox
MHB4fX0KKy8qIyBzb3VyY2VNYXBwaW5nVVJMPW1haW4uMjExMTE3NDIuY3NzLm1hcCovClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNo
Lm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvcmVhY3QtcmVkdXgvZGlzdC9zdGF0aWMvY3NzL21haW4uMjExMTE3NDIuY3NzLm1hcCBiL1dl
YnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0LXJlZHV4L2Rpc3Qvc3RhdGljL2Nzcy9tYWluLjIx
MTExNzQyLmNzcy5tYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjc0YzZmZDYzMWE3MzM4MDE4NjZiNTg1MTJlOTA5
MTcyNGU3Y2IxMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcv
U3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3Jl
YWN0LXJlZHV4L2Rpc3Qvc3RhdGljL2Nzcy9tYWluLjIxMTExNzQyLmNzcy5tYXAKQEAgLTAsMCAr
MSBAQAoreyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy90b2RvbXZjLWFw
cC1jc3MvaW5kZXguY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLGlCQUpDLFNBQ0Es
U0FBVyxDQWtCWCxPQVpBLFNBQ0EsZ0JBQ0EsZUFDQSx3QkFDQSxvQkFDQSxvQkFDQSxjQUNBLHdC
QUNBLHFCQUNLLGdCQUNMLGtDQUFvQyxDQUlyQyxZQUhDLGlDQUFtQyxDQWNuQyxLQVZBLG9EQUNB
LGtCQUNBLG1CQUNBLGNBQ0EsZ0JBQ0EsZ0JBQ0EsY0FDQSxtQ0FFQSxlQUFpQixDQUdsQixPQUND
LFNBQVcsQ0FHWixRQUNDLFlBQWMsQ0FHZixTQUNDLGdCQUNBLG9CQUNBLGtCQUNBLDJFQUVRLGtF
QUNxQyxDQUc5QywwQ0FDQyxrQkFDQSxnQkFDQSxhQUFlLENBR2hCLGlDQUNDLGtCQUNBLGdCQUNB
LGFBQWUsQ0FHaEIsa0NBQ0Msa0JBQ0EsZ0JBQ0EsYUFBZSxDQUdoQixZQUNDLGtCQUNBLFdBQ0Es
V0FDQSxnQkFDQSxnQkFDQSxrQkFDQSwwQkFDQSwwQ0FDQSx1Q0FDQSxpQ0FBbUMsQ0FHcEMsZ0JB
RUMsa0JBQ0EsU0FDQSxXQUNBLGVBQ0Esb0JBQ0Esb0JBQ0Esa0JBQ0EsU0FDQSxjQUNBLFlBQ0Es
c0JBQ0EscURBQ1EsNkNBQ1IsOEJBQ1Esc0JBQ1IsbUNBQ0EsaUNBQW1DLENBR3BDLFVBQ0MsNEJB
Q0EsWUFDQSw0QkFDQSxvREFDUSwyQ0FBOEMsQ0FHdkQsTUFDQyxrQkFDQSxVQUNBLDRCQUE4QixD
QUcvQixZQUNDLGtCQUNBLFlBQ0EsVUFDQSxpQkFBbUIsQ0FHcEIsa0JBQ0MsV0FDQSxZQUNBLFlB
Q0Esa0JBQ0EsVUFDQSxXQUNBLGdDQUNBLDRCQUNJLHVCQUF5QixDQUc5Qix5QkFDQyxnQkFDQSxl
QUNBLGNBQ0EsaUJBQTZCLENBRzlCLGlDQUNDLGFBQWUsQ0FHaEIsV0FDQyxTQUNBLFVBQ0EsZUFB
aUIsQ0FHbEIsY0FDQyxrQkFDQSxlQUNBLCtCQUFpQyxDQUdsQyx5QkFDQyxrQkFBb0IsQ0FHckIs
c0JBQ0MsbUJBQ0EsU0FBVyxDQUdaLDRCQUNDLGNBQ0EsWUFDQSxrQkFDQSxpQkFBbUIsQ0FHcEIs
NEJBQ0MsWUFBYyxDQUdmLHNCQUNDLGtCQUNBLFdBRUEsWUFDQSxrQkFDQSxNQUNBLFNBQ0EsY0FD
QSxZQUNBLHdCQUNBLHFCQUNLLGdCQUlMLFNBQVcsQ0FHWiw0QkFLQyxvVUFDQSw0QkFDQSxxQkFB
aUMsQ0FHbEMsb0NBQ0Msd2FBQTBhLENBRzNhLG9CQUNDLHFCQUNBLDRCQUNBLGNBQ0EsZ0JBQ0Es
NkJBQ0Esd0JBQ0Esb0JBQXVCLENBR3hCLDhCQUNDLGNBQ0EsNEJBQThCLENBRy9CLHVCQUNDLGFB
Q0Esa0JBQ0EsTUFDQSxXQUNBLFNBQ0EsV0FDQSxZQUNBLGNBQ0EsZUFDQSxjQUNBLG1CQUNBLHND
QUNBLGlDQUNBLDZCQUFnQyxDQUdqQyw2QkFDQyxhQUFlLENBR2hCLDZCQUNDLGFBQWEsQ0FHZCw2
QkFDQyxhQUFlLENBR2hCLG9CQUNDLFlBQWMsQ0FHZixpQ0FDQyxrQkFBb0IsQ0FHckIsUUFDQyxX
QUNBLGtCQUNBLFlBQ0Esa0JBQ0EsNEJBQThCLENBRy9CLGVBQ0MsV0FDQSxrQkFDQSxRQUNBLFNB
Q0EsT0FDQSxZQUNBLGdCQUNBLG9KQUtRLDJJQUl1QyxDQUdoRCxZQUNDLFdBQ0EsZUFBaUIsQ0FH
bEIsbUJBQ0MsZUFBaUIsQ0FHbEIsU0FDQyxTQUNBLFVBQ0EsZ0JBQ0Esa0JBQ0EsUUFDQSxNQUFR
LENBR1QsWUFDQyxjQUFnQixDQUdqQixjQUNDLGNBQ0EsV0FDQSxnQkFDQSxxQkFDQSw2QkFDQSxp
QkFBbUIsQ0FHcEIsb0JBQ0MsK0JBQXFDLENBR3RDLHVCQUNDLCtCQUFxQyxDQUd0Qyw4Q0FFQyxZ
QUNBLGtCQUNBLGlCQUNBLHFCQUNBLGNBQWdCLENBR2pCLHVCQUNDLHlCQUEyQixDQUc1QixNQUND
LG1CQUNBLGNBQ0EsZUFDQSx1Q0FDQSxpQkFBbUIsQ0FHcEIsUUFDQyxhQUFlLENBR2hCLFFBQ0Ms
Y0FDQSxxQkFDQSxlQUFpQixDQUdsQixjQUNDLHlCQUEyQixDQU81QixxREFDQyxrQ0FFQyxlQUFp
QixDQUdsQixzQkFDQyxXQUFhLENBQ2IsQ0FHRix5QkFDQyxRQUNDLFdBQWEsQ0FHZCxTQUNDLFdB
QWEsQ0FDYiIsImZpbGUiOiJzdGF0aWMvY3NzL21haW4uMjExMTE3NDIuY3NzIiwic291cmNlc0Nv
bnRlbnQiOlsiaHRtbCxcbmJvZHkge1xuXHRtYXJnaW46IDA7XG5cdHBhZGRpbmc6IDA7XG59XG5c
bmJ1dHRvbiB7XG5cdG1hcmdpbjogMDtcblx0cGFkZGluZzogMDtcblx0Ym9yZGVyOiAwO1xuXHRi
YWNrZ3JvdW5kOiBub25lO1xuXHRmb250LXNpemU6IDEwMCU7XG5cdHZlcnRpY2FsLWFsaWduOiBi
YXNlbGluZTtcblx0Zm9udC1mYW1pbHk6IGluaGVyaXQ7XG5cdGZvbnQtd2VpZ2h0OiBpbmhlcml0
O1xuXHRjb2xvcjogaW5oZXJpdDtcblx0LXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuXHQtbW96
LWFwcGVhcmFuY2U6IG5vbmU7XG5cdCAgICAgYXBwZWFyYW5jZTogbm9uZTtcblx0LXdlYmtpdC1m
b250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG5cdC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBn
cmF5c2NhbGU7XG59XG5cbmJvZHkge1xuXHRmb250OiAxNHB4ICdIZWx2ZXRpY2EgTmV1ZScsIEhl
bHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG5cdGxpbmUtaGVpZ2h0OiAxLjRlbTtcblx0YmFj
a2dyb3VuZDogI2Y1ZjVmNTtcblx0Y29sb3I6ICM0ZDRkNGQ7XG5cdG1pbi13aWR0aDogMjMwcHg7
XG5cdG1heC13aWR0aDogNTUwcHg7XG5cdG1hcmdpbjogMCBhdXRvO1xuXHQtd2Via2l0LWZvbnQt
c21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcblx0LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlz
Y2FsZTtcblx0Zm9udC13ZWlnaHQ6IDMwMDtcbn1cblxuOmZvY3VzIHtcblx0b3V0bGluZTogMDtc
bn1cblxuLmhpZGRlbiB7XG5cdGRpc3BsYXk6IG5vbmU7XG59XG5cbi50b2RvYXBwIHtcblx0YmFj
a2dyb3VuZDogI2ZmZjtcblx0bWFyZ2luOiAxMzBweCAwIDQwcHggMDtcblx0cG9zaXRpb246IHJl
bGF0aXZlO1xuXHQtd2Via2l0LWJveC1zaGFkb3c6IDAgMnB4IDRweCAwIHJnYmEoMCwgMCwgMCwg
MC4yKSxcblx0ICAgICAgICAgICAgMCAyNXB4IDUwcHggMCByZ2JhKDAsIDAsIDAsIDAuMSk7XG5c
dCAgICAgICAgYm94LXNoYWRvdzogMCAycHggNHB4IDAgcmdiYSgwLCAwLCAwLCAwLjIpLFxuXHQg
ICAgICAgICAgICAwIDI1cHggNTBweCAwIHJnYmEoMCwgMCwgMCwgMC4xKTtcbn1cblxuLnRvZG9h
cHAgaW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xuXHRmb250LXN0eWxlOiBpdGFs
aWM7XG5cdGZvbnQtd2VpZ2h0OiAzMDA7XG5cdGNvbG9yOiAjZTZlNmU2O1xufVxuXG4udG9kb2Fw
cCBpbnB1dDo6LW1vei1wbGFjZWhvbGRlciB7XG5cdGZvbnQtc3R5bGU6IGl0YWxpYztcblx0Zm9u
dC13ZWlnaHQ6IDMwMDtcblx0Y29sb3I6ICNlNmU2ZTY7XG59XG5cbi50b2RvYXBwIGlucHV0Ojpp
bnB1dC1wbGFjZWhvbGRlciB7XG5cdGZvbnQtc3R5bGU6IGl0YWxpYztcblx0Zm9udC13ZWlnaHQ6
IDMwMDtcblx0Y29sb3I6ICNlNmU2ZTY7XG59XG5cbi50b2RvYXBwIGgxIHtcblx0cG9zaXRpb246
IGFic29sdXRlO1xuXHR0b3A6IC0xNTVweDtcblx0d2lkdGg6IDEwMCU7XG5cdGZvbnQtc2l6ZTog
MTAwcHg7XG5cdGZvbnQtd2VpZ2h0OiAxMDA7XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcblx0Y29s
b3I6IHJnYmEoMTc1LCA0NywgNDcsIDAuMTUpO1xuXHQtd2Via2l0LXRleHQtcmVuZGVyaW5nOiBv
cHRpbWl6ZUxlZ2liaWxpdHk7XG5cdC1tb3otdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJp
bGl0eTtcblx0dGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTtcbn1cblxuLm5ldy10
b2RvLFxuLmVkaXQge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdG1hcmdpbjogMDtcblx0d2lk
dGg6IDEwMCU7XG5cdGZvbnQtc2l6ZTogMjRweDtcblx0Zm9udC1mYW1pbHk6IGluaGVyaXQ7XG5c
dGZvbnQtd2VpZ2h0OiBpbmhlcml0O1xuXHRsaW5lLWhlaWdodDogMS40ZW07XG5cdGJvcmRlcjog
MDtcblx0Y29sb3I6IGluaGVyaXQ7XG5cdHBhZGRpbmc6IDZweDtcblx0Ym9yZGVyOiAxcHggc29s
aWQgIzk5OTtcblx0LXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIC0xcHggNXB4IDAgcmdiYSgw
LCAwLCAwLCAwLjIpO1xuXHQgICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgLTFweCA1cHggMCBy
Z2JhKDAsIDAsIDAsIDAuMik7XG5cdC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcblx0
ICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXHQtd2Via2l0LWZvbnQtc21vb3RoaW5n
OiBhbnRpYWxpYXNlZDtcblx0LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbn1c
blxuLm5ldy10b2RvIHtcblx0cGFkZGluZzogMTZweCAxNnB4IDE2cHggNjBweDtcblx0Ym9yZGVy
OiBub25lO1xuXHRiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMDAzKTtcblx0LXdlYmtpdC1i
b3gtc2hhZG93OiBpbnNldCAwIC0ycHggMXB4IHJnYmEoMCwwLDAsMC4wMyk7XG5cdCAgICAgICAg
Ym94LXNoYWRvdzogaW5zZXQgMCAtMnB4IDFweCByZ2JhKDAsMCwwLDAuMDMpO1xufVxuXG4ubWFp
biB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0ei1pbmRleDogMjtcblx0Ym9yZGVyLXRvcDog
MXB4IHNvbGlkICNlNmU2ZTY7XG59XG5cbi50b2dnbGUtYWxsIHtcblx0dGV4dC1hbGlnbjogY2Vu
dGVyO1xuXHRib3JkZXI6IG5vbmU7IC8qIE1vYmlsZSBTYWZhcmkgKi9cblx0b3BhY2l0eTogMDtc
blx0cG9zaXRpb246IGFic29sdXRlO1xufVxuXG4udG9nZ2xlLWFsbCArIGxhYmVsIHtcblx0d2lk
dGg6IDYwcHg7XG5cdGhlaWdodDogMzRweDtcblx0Zm9udC1zaXplOiAwO1xuXHRwb3NpdGlvbjog
YWJzb2x1dGU7XG5cdHRvcDogLTUycHg7XG5cdGxlZnQ6IC0xM3B4O1xuXHQtd2Via2l0LXRyYW5z
Zm9ybTogcm90YXRlKDkwZGVnKTtcblx0LW1zLXRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcblx0
ICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcbn1cblxuLnRvZ2dsZS1hbGwgKyBsYWJlbDpi
ZWZvcmUge1xuXHRjb250ZW50OiAn4p2vJztcblx0Zm9udC1zaXplOiAyMnB4O1xuXHRjb2xvcjog
I2U2ZTZlNjtcblx0cGFkZGluZzogMTBweCAyN3B4IDEwcHggMjdweDtcbn1cblxuLnRvZ2dsZS1h
bGw6Y2hlY2tlZCArIGxhYmVsOmJlZm9yZSB7XG5cdGNvbG9yOiAjNzM3MzczO1xufVxuXG4udG9k
by1saXN0IHtcblx0bWFyZ2luOiAwO1xuXHRwYWRkaW5nOiAwO1xuXHRsaXN0LXN0eWxlOiBub25l
O1xufVxuXG4udG9kby1saXN0IGxpIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRmb250LXNp
emU6IDI0cHg7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWRlZGVkO1xufVxuXG4udG9k
by1saXN0IGxpOmxhc3QtY2hpbGQge1xuXHRib3JkZXItYm90dG9tOiBub25lO1xufVxuXG4udG9k
by1saXN0IGxpLmVkaXRpbmcge1xuXHRib3JkZXItYm90dG9tOiBub25lO1xuXHRwYWRkaW5nOiAw
O1xufVxuXG4udG9kby1saXN0IGxpLmVkaXRpbmcgLmVkaXQge1xuXHRkaXNwbGF5OiBibG9jaztc
blx0d2lkdGg6IDUwNnB4O1xuXHRwYWRkaW5nOiAxMnB4IDE2cHg7XG5cdG1hcmdpbjogMCAwIDAg
NDNweDtcbn1cblxuLnRvZG8tbGlzdCBsaS5lZGl0aW5nIC52aWV3IHtcblx0ZGlzcGxheTogbm9u
ZTtcbn1cblxuLnRvZG8tbGlzdCBsaSAudG9nZ2xlIHtcblx0dGV4dC1hbGlnbjogY2VudGVyO1xu
XHR3aWR0aDogNDBweDtcblx0LyogYXV0bywgc2luY2Ugbm9uLVdlYktpdCBicm93c2VycyBkb2Vz
bid0IHN1cHBvcnQgaW5wdXQgc3R5bGluZyAqL1xuXHRoZWlnaHQ6IGF1dG87XG5cdHBvc2l0aW9u
OiBhYnNvbHV0ZTtcblx0dG9wOiAwO1xuXHRib3R0b206IDA7XG5cdG1hcmdpbjogYXV0byAwO1xu
XHRib3JkZXI6IG5vbmU7IC8qIE1vYmlsZSBTYWZhcmkgKi9cblx0LXdlYmtpdC1hcHBlYXJhbmNl
OiBub25lO1xuXHQtbW96LWFwcGVhcmFuY2U6IG5vbmU7XG5cdCAgICAgYXBwZWFyYW5jZTogbm9u
ZTtcbn1cblxuLnRvZG8tbGlzdCBsaSAudG9nZ2xlIHtcblx0b3BhY2l0eTogMDtcbn1cblxuLnRv
ZG8tbGlzdCBsaSAudG9nZ2xlICsgbGFiZWwge1xuXHQvKlxuXHRcdEZpcmVmb3ggcmVxdWlyZXMg
YCNgIHRvIGJlIGVzY2FwZWQgLSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVn
LmNnaT9pZD05MjI0MzNcblx0XHRJRSBhbmQgRWRnZSByZXF1aXJlcyAqZXZlcnl0aGluZyogdG8g
YmUgZXNjYXBlZCB0byByZW5kZXIsIHNvIHdlIGRvIHRoYXQgaW5zdGVhZCBvZiBqdXN0IHRoZSBg
I2AgLSBodHRwczovL2RldmVsb3Blci5taWNyb3NvZnQuY29tL2VuLXVzL21pY3Jvc29mdC1lZGdl
L3BsYXRmb3JtL2lzc3Vlcy83MTU3NDU5L1xuXHQqL1xuXHRiYWNrZ3JvdW5kLWltYWdlOiB1cmwo
J2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LCUzQ3N2ZyUyMHhtbG5zJTNEJTIyaHR0cCUzQS8vd3d3
LnczLm9yZy8yMDAwL3N2ZyUyMiUyMHdpZHRoJTNEJTIyNDAlMjIlMjBoZWlnaHQlM0QlMjI0MCUy
MiUyMHZpZXdCb3glM0QlMjItMTAlMjAtMTglMjAxMDAlMjAxMzUlMjIlM0UlM0NjaXJjbGUlMjBj
eCUzRCUyMjUwJTIyJTIwY3klM0QlMjI1MCUyMiUyMHIlM0QlMjI1MCUyMiUyMGZpbGwlM0QlMjJu
b25lJTIyJTIwc3Ryb2tlJTNEJTIyJTIzZWRlZGVkJTIyJTIwc3Ryb2tlLXdpZHRoJTNEJTIyMyUy
Mi8lM0UlM0Mvc3ZnJTNFJyk7XG5cdGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG5cdGJh
Y2tncm91bmQtcG9zaXRpb246IGNlbnRlciBsZWZ0O1xufVxuXG4udG9kby1saXN0IGxpIC50b2dn
bGU6Y2hlY2tlZCArIGxhYmVsIHtcblx0YmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdl
L3N2Zyt4bWw7dXRmOCwlM0NzdmclMjB4bWxucyUzRCUyMmh0dHAlM0EvL3d3dy53My5vcmcvMjAw
MC9zdmclMjIlMjB3aWR0aCUzRCUyMjQwJTIyJTIwaGVpZ2h0JTNEJTIyNDAlMjIlMjB2aWV3Qm94
JTNEJTIyLTEwJTIwLTE4JTIwMTAwJTIwMTM1JTIyJTNFJTNDY2lyY2xlJTIwY3glM0QlMjI1MCUy
MiUyMGN5JTNEJTIyNTAlMjIlMjByJTNEJTIyNTAlMjIlMjBmaWxsJTNEJTIybm9uZSUyMiUyMHN0
cm9rZSUzRCUyMiUyM2JkZGFkNSUyMiUyMHN0cm9rZS13aWR0aCUzRCUyMjMlMjIvJTNFJTNDcGF0
aCUyMGZpbGwlM0QlMjIlMjM1ZGMyYWYlMjIlMjBkJTNEJTIyTTcyJTIwMjVMNDIlMjA3MSUyMDI3
JTIwNTZsLTQlMjA0JTIwMjAlMjAyMCUyMDM0LTUyeiUyMi8lM0UlM0Mvc3ZnJTNFJyk7XG59XG5c
bi50b2RvLWxpc3QgbGkgbGFiZWwge1xuXHR3b3JkLWJyZWFrOiBicmVhay1hbGw7XG5cdHBhZGRp
bmc6IDE1cHggMTVweCAxNXB4IDYwcHg7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRsaW5lLWhlaWdo
dDogMS4yO1xuXHQtd2Via2l0LXRyYW5zaXRpb246IGNvbG9yIDAuNHM7XG5cdC1vLXRyYW5zaXRp
b246IGNvbG9yIDAuNHM7XG5cdHRyYW5zaXRpb246IGNvbG9yIDAuNHM7XG59XG5cbi50b2RvLWxp
c3QgbGkuY29tcGxldGVkIGxhYmVsIHtcblx0Y29sb3I6ICNkOWQ5ZDk7XG5cdHRleHQtZGVjb3Jh
dGlvbjogbGluZS10aHJvdWdoO1xufVxuXG4udG9kby1saXN0IGxpIC5kZXN0cm95IHtcblx0ZGlz
cGxheTogbm9uZTtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHR0b3A6IDA7XG5cdHJpZ2h0OiAx
MHB4O1xuXHRib3R0b206IDA7XG5cdHdpZHRoOiA0MHB4O1xuXHRoZWlnaHQ6IDQwcHg7XG5cdG1h
cmdpbjogYXV0byAwO1xuXHRmb250LXNpemU6IDMwcHg7XG5cdGNvbG9yOiAjY2M5YTlhO1xuXHRt
YXJnaW4tYm90dG9tOiAxMXB4O1xuXHQtd2Via2l0LXRyYW5zaXRpb246IGNvbG9yIDAuMnMgZWFz
ZS1vdXQ7XG5cdC1vLXRyYW5zaXRpb246IGNvbG9yIDAuMnMgZWFzZS1vdXQ7XG5cdHRyYW5zaXRp
b246IGNvbG9yIDAuMnMgZWFzZS1vdXQ7XG59XG5cbi50b2RvLWxpc3QgbGkgLmRlc3Ryb3k6aG92
ZXIge1xuXHRjb2xvcjogI2FmNWI1ZTtcbn1cblxuLnRvZG8tbGlzdCBsaSAuZGVzdHJveTphZnRl
ciB7XG5cdGNvbnRlbnQ6ICfDlyc7XG59XG5cbi50b2RvLWxpc3QgbGk6aG92ZXIgLmRlc3Ryb3kg
e1xuXHRkaXNwbGF5OiBibG9jaztcbn1cblxuLnRvZG8tbGlzdCBsaSAuZWRpdCB7XG5cdGRpc3Bs
YXk6IG5vbmU7XG59XG5cbi50b2RvLWxpc3QgbGkuZWRpdGluZzpsYXN0LWNoaWxkIHtcblx0bWFy
Z2luLWJvdHRvbTogLTFweDtcbn1cblxuLmZvb3RlciB7XG5cdGNvbG9yOiAjNzc3O1xuXHRwYWRk
aW5nOiAxMHB4IDE1cHg7XG5cdGhlaWdodDogMjBweDtcblx0dGV4dC1hbGlnbjogY2VudGVyO1xu
XHRib3JkZXItdG9wOiAxcHggc29saWQgI2U2ZTZlNjtcbn1cblxuLmZvb3RlcjpiZWZvcmUge1xu
XHRjb250ZW50OiAnJztcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHRyaWdodDogMDtcblx0Ym90
dG9tOiAwO1xuXHRsZWZ0OiAwO1xuXHRoZWlnaHQ6IDUwcHg7XG5cdG92ZXJmbG93OiBoaWRkZW47
XG5cdC13ZWJraXQtYm94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSxcblx0
ICAgICAgICAgICAgMCA4cHggMCAtM3B4ICNmNmY2ZjYsXG5cdCAgICAgICAgICAgIDAgOXB4IDFw
eCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSxcblx0ICAgICAgICAgICAgMCAxNnB4IDAgLTZweCAj
ZjZmNmY2LFxuXHQgICAgICAgICAgICAwIDE3cHggMnB4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIp
O1xuXHQgICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMiksXG5c
dCAgICAgICAgICAgIDAgOHB4IDAgLTNweCAjZjZmNmY2LFxuXHQgICAgICAgICAgICAwIDlweCAx
cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksXG5cdCAgICAgICAgICAgIDAgMTZweCAwIC02cHgg
I2Y2ZjZmNixcblx0ICAgICAgICAgICAgMCAxN3B4IDJweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4y
KTtcbn1cblxuLnRvZG8tY291bnQge1xuXHRmbG9hdDogbGVmdDtcblx0dGV4dC1hbGlnbjogbGVm
dDtcbn1cblxuLnRvZG8tY291bnQgc3Ryb25nIHtcblx0Zm9udC13ZWlnaHQ6IDMwMDtcbn1cblxu
LmZpbHRlcnMge1xuXHRtYXJnaW46IDA7XG5cdHBhZGRpbmc6IDA7XG5cdGxpc3Qtc3R5bGU6IG5v
bmU7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0cmlnaHQ6IDA7XG5cdGxlZnQ6IDA7XG59XG5c
bi5maWx0ZXJzIGxpIHtcblx0ZGlzcGxheTogaW5saW5lO1xufVxuXG4uZmlsdGVycyBsaSBhIHtc
blx0Y29sb3I6IGluaGVyaXQ7XG5cdG1hcmdpbjogM3B4O1xuXHRwYWRkaW5nOiAzcHggN3B4O1xu
XHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50
O1xuXHRib3JkZXItcmFkaXVzOiAzcHg7XG59XG5cbi5maWx0ZXJzIGxpIGE6aG92ZXIge1xuXHRi
b3JkZXItY29sb3I6IHJnYmEoMTc1LCA0NywgNDcsIDAuMSk7XG59XG5cbi5maWx0ZXJzIGxpIGEu
c2VsZWN0ZWQge1xuXHRib3JkZXItY29sb3I6IHJnYmEoMTc1LCA0NywgNDcsIDAuMik7XG59XG5c
bi5jbGVhci1jb21wbGV0ZWQsXG5odG1sIC5jbGVhci1jb21wbGV0ZWQ6YWN0aXZlIHtcblx0Zmxv
YXQ6IHJpZ2h0O1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdGxpbmUtaGVpZ2h0OiAyMHB4O1xu
XHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLmNsZWFy
LWNvbXBsZXRlZDpob3ZlciB7XG5cdHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4u
aW5mbyB7XG5cdG1hcmdpbjogNjVweCBhdXRvIDA7XG5cdGNvbG9yOiAjYmZiZmJmO1xuXHRmb250
LXNpemU6IDEwcHg7XG5cdHRleHQtc2hhZG93OiAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwg
MC41KTtcblx0dGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4uaW5mbyBwIHtcblx0bGluZS1oZWln
aHQ6IDE7XG59XG5cbi5pbmZvIGEge1xuXHRjb2xvcjogaW5oZXJpdDtcblx0dGV4dC1kZWNvcmF0
aW9uOiBub25lO1xuXHRmb250LXdlaWdodDogNDAwO1xufVxuXG4uaW5mbyBhOmhvdmVyIHtcblx0
dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cbi8qXG5cdEhhY2sgdG8gcmVtb3ZlIGJh
Y2tncm91bmQgZnJvbSBNb2JpbGUgU2FmYXJpLlxuXHRDYW4ndCB1c2UgaXQgZ2xvYmFsbHkgc2lu
Y2UgaXQgZGVzdHJveXMgY2hlY2tib3hlcyBpbiBGaXJlZm94XG4qL1xuQG1lZGlhIHNjcmVlbiBh
bmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzowKSB7XG5cdC50b2dnbGUtYWxsLFxu
XHQudG9kby1saXN0IGxpIC50b2dnbGUge1xuXHRcdGJhY2tncm91bmQ6IG5vbmU7XG5cdH1cblxu
XHQudG9kby1saXN0IGxpIC50b2dnbGUge1xuXHRcdGhlaWdodDogNDBweDtcblx0fVxufVxuXG5A
bWVkaWEgKG1heC13aWR0aDogNDMwcHgpIHtcblx0LmZvb3RlciB7XG5cdFx0aGVpZ2h0OiA1MHB4
O1xuXHR9XG5cblx0LmZpbHRlcnMge1xuXHRcdGJvdHRvbTogMTBweDtcblx0fVxufVxuXG5cblxu
Ly8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9p
bmRleC5jc3MiXSwic291cmNlUm9vdCI6IiJ9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpk
aWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QtcmVkdXgvZGlzdC9zdGF0
aWMvanMvbWFpbi4xOGI0MDllMS5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRv
bWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0LXJl
ZHV4L2Rpc3Qvc3RhdGljL2pzL21haW4uMThiNDA5ZTEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTkwMjE1NWQ0
ZGQyOTMzZTgxOTk4MmQyZDAxN2NjODMzNzE0ZjhkZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNp
dGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0LXJlZHV4L2Rpc3Qvc3RhdGljL2pzL21haW4uMThiNDA5
ZTEuanMKQEAgLTAsMCArMSwyIEBACishZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyKXtpZihuW3Jd
KXJldHVybiBuW3JdLmV4cG9ydHM7dmFyIG89bltyXT17aTpyLGw6ITEsZXhwb3J0czp7fX07cmV0
dXJuIGVbcl0uY2FsbChvLmV4cG9ydHMsbyxvLmV4cG9ydHMsdCksby5sPSEwLG8uZXhwb3J0c312
YXIgbj17fTt0Lm09ZSx0LmM9bix0LmQ9ZnVuY3Rpb24oZSxuLHIpe3QubyhlLG4pfHxPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoZSxuLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6cn0p
fSx0Lm49ZnVuY3Rpb24oZSl7dmFyIG49ZSYmZS5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJu
IGUuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gZX07cmV0dXJuIHQuZChuLCJhIixuKSxufSx0
Lm89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5j
YWxsKGUsdCl9LHQucD0iLi8iLHQodC5zPTk3KX0oW2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmlj
dCI7ZnVuY3Rpb24gcihlLHQsbixyLGksYSx1LHMpe2lmKG8odCksIWUpe3ZhciBjO2lmKHZvaWQg
MD09PXQpYz1uZXcgRXJyb3IoIk1pbmlmaWVkIGV4Y2VwdGlvbiBvY2N1cnJlZDsgdXNlIHRoZSBu
b24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciB0aGUgZnVsbCBlcnJvciBtZXNzYWdlIGFu
ZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuIik7ZWxzZXt2YXIgbD1bbixyLGksYSx1LHNd
LHA9MDtjPW5ldyBFcnJvcih0LnJlcGxhY2UoLyVzL2csZnVuY3Rpb24oKXtyZXR1cm4gbFtwKytd
fSkpLGMubmFtZT0iSW52YXJpYW50IFZpb2xhdGlvbiJ9dGhyb3cgYy5mcmFtZXNUb1BvcD0xLGN9
fXZhciBvPWZ1bmN0aW9uKGUpe307ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0
cmljdCI7dmFyIHI9big2KSxvPXI7ZS5leHBvcnRzPW99LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0
cmljdCI7ZnVuY3Rpb24gcihlKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aC0xLG49Ik1pbmlm
aWVkIFJlYWN0IGVycm9yICMiK2UrIjsgdmlzaXQgaHR0cDovL2ZhY2Vib29rLmdpdGh1Yi5pby9y
ZWFjdC9kb2NzL2Vycm9yLWRlY29kZXIuaHRtbD9pbnZhcmlhbnQ9IitlLHI9MDtyPHQ7cisrKW4r
PSImYXJnc1tdPSIrZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1tyKzFdKTtuKz0iIGZvciB0
aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBm
b3IgZnVsbCBlcnJvcnMgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4iO3ZhciBvPW5l
dyBFcnJvcihuKTt0aHJvdyBvLm5hbWU9IkludmFyaWFudCBWaW9sYXRpb24iLG8uZnJhbWVzVG9Q
b3A9MSxvfWUuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9u
IHIoZSl7aWYobnVsbD09PWV8fHZvaWQgMD09PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0
LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQiKTtyZXR1cm4g
T2JqZWN0KGUpfXZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsaT1PYmplY3QucHJv
dG90eXBlLmhhc093blByb3BlcnR5LGE9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVy
YWJsZTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt0cnl7aWYoIU9iamVjdC5hc3NpZ24pcmV0dXJuITE7
dmFyIGU9bmV3IFN0cmluZygiYWJjIik7aWYoZVs1XT0iZGUiLCI1Ij09PU9iamVjdC5nZXRPd25Q
cm9wZXJ0eU5hbWVzKGUpWzBdKXJldHVybiExO2Zvcih2YXIgdD17fSxuPTA7bjwxMDtuKyspdFsi
XyIrU3RyaW5nLmZyb21DaGFyQ29kZShuKV09bjtpZigiMDEyMzQ1Njc4OSIhPT1PYmplY3QuZ2V0
T3duUHJvcGVydHlOYW1lcyh0KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KS5qb2luKCIi
KSlyZXR1cm4hMTt2YXIgcj17fTtyZXR1cm4iYWJjZGVmZ2hpamtsbW5vcHFyc3QiLnNwbGl0KCIi
KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JbZV09ZX0pLCJhYmNkZWZnaGlqa2xtbm9wcXJzdCI9PT1P
YmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LHIpKS5qb2luKCIiKX1jYXRjaChlKXtyZXR1cm4h
MX19KCk/T2JqZWN0LmFzc2lnbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbix1LHM9cihlKSxjPTE7
Yzxhcmd1bWVudHMubGVuZ3RoO2MrKyl7bj1PYmplY3QoYXJndW1lbnRzW2NdKTtmb3IodmFyIGwg
aW4gbilpLmNhbGwobixsKSYmKHNbbF09bltsXSk7aWYobyl7dT1vKG4pO2Zvcih2YXIgcD0wO3A8
dS5sZW5ndGg7cCsrKWEuY2FsbChuLHVbcF0pJiYoc1t1W3BdXT1uW3VbcF1dKX19cmV0dXJuIHN9
fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gMT09
PWUubm9kZVR5cGUmJmUuZ2V0QXR0cmlidXRlKGgpPT09U3RyaW5nKHQpfHw4PT09ZS5ub2RlVHlw
ZSYmZS5ub2RlVmFsdWU9PT0iIHJlYWN0LXRleHQ6ICIrdCsiICJ8fDg9PT1lLm5vZGVUeXBlJiZl
Lm5vZGVWYWx1ZT09PSIgcmVhY3QtZW1wdHk6ICIrdCsiICJ9ZnVuY3Rpb24gbyhlKXtmb3IodmFy
IHQ7dD1lLl9yZW5kZXJlZENvbXBvbmVudDspZT10O3JldHVybiBlfWZ1bmN0aW9uIGkoZSx0KXt2
YXIgbj1vKGUpO24uX2hvc3ROb2RlPXQsdFt2XT1ufWZ1bmN0aW9uIGEoZSl7dmFyIHQ9ZS5faG9z
dE5vZGU7dCYmKGRlbGV0ZSB0W3ZdLGUuX2hvc3ROb2RlPW51bGwpfWZ1bmN0aW9uIHUoZSx0KXtp
ZighKGUuX2ZsYWdzJm0uaGFzQ2FjaGVkQ2hpbGROb2Rlcykpe3ZhciBuPWUuX3JlbmRlcmVkQ2hp
bGRyZW4sYT10LmZpcnN0Q2hpbGQ7ZTpmb3IodmFyIHUgaW4gbilpZihuLmhhc093blByb3BlcnR5
KHUpKXt2YXIgcz1uW3VdLGM9byhzKS5fZG9tSUQ7aWYoMCE9PWMpe2Zvcig7bnVsbCE9PWE7YT1h
Lm5leHRTaWJsaW5nKWlmKHIoYSxjKSl7aShzLGEpO2NvbnRpbnVlIGV9cCgiMzIiLGMpfX1lLl9m
bGFnc3w9bS5oYXNDYWNoZWRDaGlsZE5vZGVzfX1mdW5jdGlvbiBzKGUpe2lmKGVbdl0pcmV0dXJu
IGVbdl07Zm9yKHZhciB0PVtdOyFlW3ZdOyl7aWYodC5wdXNoKGUpLCFlLnBhcmVudE5vZGUpcmV0
dXJuIG51bGw7ZT1lLnBhcmVudE5vZGV9Zm9yKHZhciBuLHI7ZSYmKHI9ZVt2XSk7ZT10LnBvcCgp
KW49cix0Lmxlbmd0aCYmdShyLGUpO3JldHVybiBufWZ1bmN0aW9uIGMoZSl7dmFyIHQ9cyhlKTty
ZXR1cm4gbnVsbCE9dCYmdC5faG9zdE5vZGU9PT1lP3Q6bnVsbH1mdW5jdGlvbiBsKGUpe2lmKHZv
aWQgMD09PWUuX2hvc3ROb2RlJiZwKCIzMyIpLGUuX2hvc3ROb2RlKXJldHVybiBlLl9ob3N0Tm9k
ZTtmb3IodmFyIHQ9W107IWUuX2hvc3ROb2RlOyl0LnB1c2goZSksZS5faG9zdFBhcmVudHx8cCgi
MzQiKSxlPWUuX2hvc3RQYXJlbnQ7Zm9yKDt0Lmxlbmd0aDtlPXQucG9wKCkpdShlLGUuX2hvc3RO
b2RlKTtyZXR1cm4gZS5faG9zdE5vZGV9dmFyIHA9bigyKSxmPW4oMTUpLGQ9big1OCksaD0obigw
KSxmLklEX0FUVFJJQlVURV9OQU1FKSxtPWQsdj0iX19yZWFjdEludGVybmFsSW5zdGFuY2UkIitN
YXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKSx5PXtnZXRDbG9zZXN0SW5zdGFuY2VG
cm9tTm9kZTpzLGdldEluc3RhbmNlRnJvbU5vZGU6YyxnZXROb2RlRnJvbUluc3RhbmNlOmwscHJl
Y2FjaGVDaGlsZE5vZGVzOnUscHJlY2FjaGVOb2RlOmksdW5jYWNoZU5vZGU6YX07ZS5leHBvcnRz
PXl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ISgidW5kZWZpbmVkIj09PXR5
cGVvZiB3aW5kb3d8fCF3aW5kb3cuZG9jdW1lbnR8fCF3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCksbz17Y2FuVXNlRE9NOnIsY2FuVXNlV29ya2VyczoidW5kZWZpbmVkIiE9PXR5cGVvZiBX
b3JrZXIsY2FuVXNlRXZlbnRMaXN0ZW5lcnM6ciYmISghd2luZG93LmFkZEV2ZW50TGlzdGVuZXIm
JiF3aW5kb3cuYXR0YWNoRXZlbnQpLGNhblVzZVZpZXdwb3J0OnImJiEhd2luZG93LnNjcmVlbixp
c0luV29ya2VyOiFyfTtlLmV4cG9ydHM9b30sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijtm
dW5jdGlvbiByKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgbz1mdW5jdGlvbigp
e307by50aGF0UmV0dXJucz1yLG8udGhhdFJldHVybnNGYWxzZT1yKCExKSxvLnRoYXRSZXR1cm5z
VHJ1ZT1yKCEwKSxvLnRoYXRSZXR1cm5zTnVsbD1yKG51bGwpLG8udGhhdFJldHVybnNUaGlzPWZ1
bmN0aW9uKCl7cmV0dXJuIHRoaXN9LG8udGhhdFJldHVybnNBcmd1bWVudD1mdW5jdGlvbihlKXty
ZXR1cm4gZX0sZS5leHBvcnRzPW99LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9
bnVsbDtlLmV4cG9ydHM9e2RlYnVnVG9vbDpyfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0
IjtmdW5jdGlvbiByKCl7Ty5SZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uJiZDfHxsKCIxMjMiKX1m
dW5jdGlvbiBvKCl7dGhpcy5yZWluaXRpYWxpemVUcmFuc2FjdGlvbigpLHRoaXMuZGlydHlDb21w
b25lbnRzTGVuZ3RoPW51bGwsdGhpcy5jYWxsYmFja1F1ZXVlPWYuZ2V0UG9vbGVkKCksdGhpcy5y
ZWNvbmNpbGVUcmFuc2FjdGlvbj1PLlJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24uZ2V0UG9vbGVk
KCEwKX1mdW5jdGlvbiBpKGUsdCxuLG8saSxhKXtyZXR1cm4gcigpLEMuYmF0Y2hlZFVwZGF0ZXMo
ZSx0LG4sbyxpLGEpfWZ1bmN0aW9uIGEoZSx0KXtyZXR1cm4gZS5fbW91bnRPcmRlci10Ll9tb3Vu
dE9yZGVyfWZ1bmN0aW9uIHUoZSl7dmFyIHQ9ZS5kaXJ0eUNvbXBvbmVudHNMZW5ndGg7dCE9PXku
bGVuZ3RoJiZsKCIxMjQiLHQseS5sZW5ndGgpLHkuc29ydChhKSxnKys7Zm9yKHZhciBuPTA7bjx0
O24rKyl7dmFyIHI9eVtuXSxvPXIuX3BlbmRpbmdDYWxsYmFja3M7ci5fcGVuZGluZ0NhbGxiYWNr
cz1udWxsO3ZhciBpO2lmKGgubG9nVG9wTGV2ZWxSZW5kZXJzKXt2YXIgdT1yO3IuX2N1cnJlbnRF
bGVtZW50LnR5cGUuaXNSZWFjdFRvcExldmVsV3JhcHBlciYmKHU9ci5fcmVuZGVyZWRDb21wb25l
bnQpLGk9IlJlYWN0IHVwZGF0ZTogIit1LmdldE5hbWUoKSxjb25zb2xlLnRpbWUoaSl9aWYobS5w
ZXJmb3JtVXBkYXRlSWZOZWNlc3NhcnkocixlLnJlY29uY2lsZVRyYW5zYWN0aW9uLGcpLGkmJmNv
bnNvbGUudGltZUVuZChpKSxvKWZvcih2YXIgcz0wO3M8by5sZW5ndGg7cysrKWUuY2FsbGJhY2tR
dWV1ZS5lbnF1ZXVlKG9bc10sci5nZXRQdWJsaWNJbnN0YW5jZSgpKX19ZnVuY3Rpb24gcyhlKXtp
ZihyKCksIUMuaXNCYXRjaGluZ1VwZGF0ZXMpcmV0dXJuIHZvaWQgQy5iYXRjaGVkVXBkYXRlcyhz
LGUpO3kucHVzaChlKSxudWxsPT1lLl91cGRhdGVCYXRjaE51bWJlciYmKGUuX3VwZGF0ZUJhdGNo
TnVtYmVyPWcrMSl9ZnVuY3Rpb24gYyhlLHQpe0MuaXNCYXRjaGluZ1VwZGF0ZXN8fGwoIjEyNSIp
LGIuZW5xdWV1ZShlLHQpLF89ITB9dmFyIGw9bigyKSxwPW4oMyksZj1uKDYyKSxkPW4oMTIpLGg9
big2MyksbT1uKDE2KSx2PW4oMjQpLHk9KG4oMCksW10pLGc9MCxiPWYuZ2V0UG9vbGVkKCksXz0h
MSxDPW51bGwsdz17aW5pdGlhbGl6ZTpmdW5jdGlvbigpe3RoaXMuZGlydHlDb21wb25lbnRzTGVu
Z3RoPXkubGVuZ3RofSxjbG9zZTpmdW5jdGlvbigpe3RoaXMuZGlydHlDb21wb25lbnRzTGVuZ3Ro
IT09eS5sZW5ndGg/KHkuc3BsaWNlKDAsdGhpcy5kaXJ0eUNvbXBvbmVudHNMZW5ndGgpLFQoKSk6
eS5sZW5ndGg9MH19LEU9e2luaXRpYWxpemU6ZnVuY3Rpb24oKXt0aGlzLmNhbGxiYWNrUXVldWUu
cmVzZXQoKX0sY2xvc2U6ZnVuY3Rpb24oKXt0aGlzLmNhbGxiYWNrUXVldWUubm90aWZ5QWxsKCl9
fSx4PVt3LEVdO3Aoby5wcm90b3R5cGUsdix7Z2V0VHJhbnNhY3Rpb25XcmFwcGVyczpmdW5jdGlv
bigpe3JldHVybiB4fSxkZXN0cnVjdG9yOmZ1bmN0aW9uKCl7dGhpcy5kaXJ0eUNvbXBvbmVudHNM
ZW5ndGg9bnVsbCxmLnJlbGVhc2UodGhpcy5jYWxsYmFja1F1ZXVlKSx0aGlzLmNhbGxiYWNrUXVl
dWU9bnVsbCxPLlJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24ucmVsZWFzZSh0aGlzLnJlY29uY2ls
ZVRyYW5zYWN0aW9uKSx0aGlzLnJlY29uY2lsZVRyYW5zYWN0aW9uPW51bGx9LHBlcmZvcm06ZnVu
Y3Rpb24oZSx0LG4pe3JldHVybiB2LnBlcmZvcm0uY2FsbCh0aGlzLHRoaXMucmVjb25jaWxlVHJh
bnNhY3Rpb24ucGVyZm9ybSx0aGlzLnJlY29uY2lsZVRyYW5zYWN0aW9uLGUsdCxuKX19KSxkLmFk
ZFBvb2xpbmdUbyhvKTt2YXIgVD1mdW5jdGlvbigpe2Zvcig7eS5sZW5ndGh8fF87KXtpZih5Lmxl
bmd0aCl7dmFyIGU9by5nZXRQb29sZWQoKTtlLnBlcmZvcm0odSxudWxsLGUpLG8ucmVsZWFzZShl
KX1pZihfKXtfPSExO3ZhciB0PWI7Yj1mLmdldFBvb2xlZCgpLHQubm90aWZ5QWxsKCksZi5yZWxl
YXNlKHQpfX19LFA9e2luamVjdFJlY29uY2lsZVRyYW5zYWN0aW9uOmZ1bmN0aW9uKGUpe2V8fGwo
IjEyNiIpLE8uUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbj1lfSxpbmplY3RCYXRjaGluZ1N0cmF0
ZWd5OmZ1bmN0aW9uKGUpe2V8fGwoIjEyNyIpLCJmdW5jdGlvbiIhPT10eXBlb2YgZS5iYXRjaGVk
VXBkYXRlcyYmbCgiMTI4IiksImJvb2xlYW4iIT09dHlwZW9mIGUuaXNCYXRjaGluZ1VwZGF0ZXMm
JmwoIjEyOSIpLEM9ZX19LE89e1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb246bnVsbCxiYXRjaGVk
VXBkYXRlczppLGVucXVldWVVcGRhdGU6cyxmbHVzaEJhdGNoZWRVcGRhdGVzOlQsaW5qZWN0aW9u
OlAsYXNhcDpjfTtlLmV4cG9ydHM9T30sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4
cG9ydHM9bigxMyl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9e2N1cnJlbnQ6
bnVsbH07ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24g
cihlLHQsbixyKXt0aGlzLmRpc3BhdGNoQ29uZmlnPWUsdGhpcy5fdGFyZ2V0SW5zdD10LHRoaXMu
bmF0aXZlRXZlbnQ9bjt2YXIgbz10aGlzLmNvbnN0cnVjdG9yLkludGVyZmFjZTtmb3IodmFyIGkg
aW4gbylpZihvLmhhc093blByb3BlcnR5KGkpKXt2YXIgdT1vW2ldO3U/dGhpc1tpXT11KG4pOiJ0
YXJnZXQiPT09aT90aGlzLnRhcmdldD1yOnRoaXNbaV09bltpXX12YXIgcz1udWxsIT1uLmRlZmF1
bHRQcmV2ZW50ZWQ/bi5kZWZhdWx0UHJldmVudGVkOiExPT09bi5yZXR1cm5WYWx1ZTtyZXR1cm4g
dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9cz9hLnRoYXRSZXR1cm5zVHJ1ZTphLnRoYXRSZXR1cm5z
RmFsc2UsdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1hLnRoYXRSZXR1cm5zRmFsc2UsdGhpc312
YXIgbz1uKDMpLGk9bigxMiksYT1uKDYpLHU9KG4oMSksWyJkaXNwYXRjaENvbmZpZyIsIl90YXJn
ZXRJbnN0IiwibmF0aXZlRXZlbnQiLCJpc0RlZmF1bHRQcmV2ZW50ZWQiLCJpc1Byb3BhZ2F0aW9u
U3RvcHBlZCIsIl9kaXNwYXRjaExpc3RlbmVycyIsIl9kaXNwYXRjaEluc3RhbmNlcyJdKSxzPXt0
eXBlOm51bGwsdGFyZ2V0Om51bGwsY3VycmVudFRhcmdldDphLnRoYXRSZXR1cm5zTnVsbCxldmVu
dFBoYXNlOm51bGwsYnViYmxlczpudWxsLGNhbmNlbGFibGU6bnVsbCx0aW1lU3RhbXA6ZnVuY3Rp
b24oZSl7cmV0dXJuIGUudGltZVN0YW1wfHxEYXRlLm5vdygpfSxkZWZhdWx0UHJldmVudGVkOm51
bGwsaXNUcnVzdGVkOm51bGx9O28oci5wcm90b3R5cGUse3ByZXZlbnREZWZhdWx0OmZ1bmN0aW9u
KCl7dGhpcy5kZWZhdWx0UHJldmVudGVkPSEwO3ZhciBlPXRoaXMubmF0aXZlRXZlbnQ7ZSYmKGUu
cHJldmVudERlZmF1bHQ/ZS5wcmV2ZW50RGVmYXVsdCgpOiJ1bmtub3duIiE9PXR5cGVvZiBlLnJl
dHVyblZhbHVlJiYoZS5yZXR1cm5WYWx1ZT0hMSksdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9YS50
aGF0UmV0dXJuc1RydWUpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm5h
dGl2ZUV2ZW50O2UmJihlLnN0b3BQcm9wYWdhdGlvbj9lLnN0b3BQcm9wYWdhdGlvbigpOiJ1bmtu
b3duIiE9PXR5cGVvZiBlLmNhbmNlbEJ1YmJsZSYmKGUuY2FuY2VsQnViYmxlPSEwKSx0aGlzLmlz
UHJvcGFnYXRpb25TdG9wcGVkPWEudGhhdFJldHVybnNUcnVlKX0scGVyc2lzdDpmdW5jdGlvbigp
e3RoaXMuaXNQZXJzaXN0ZW50PWEudGhhdFJldHVybnNUcnVlfSxpc1BlcnNpc3RlbnQ6YS50aGF0
UmV0dXJuc0ZhbHNlLGRlc3RydWN0b3I6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNvbnN0cnVjdG9y
LkludGVyZmFjZTtmb3IodmFyIHQgaW4gZSl0aGlzW3RdPW51bGw7Zm9yKHZhciBuPTA7bjx1Lmxl
bmd0aDtuKyspdGhpc1t1W25dXT1udWxsfX0pLHIuSW50ZXJmYWNlPXMsci5hdWdtZW50Q2xhc3M9
ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9ZnVuY3Rpb24oKXt9O3IucHJvdG90eXBlPW4ucHJv
dG90eXBlO3ZhciBhPW5ldyByO28oYSxlLnByb3RvdHlwZSksZS5wcm90b3R5cGU9YSxlLnByb3Rv
dHlwZS5jb25zdHJ1Y3Rvcj1lLGUuSW50ZXJmYWNlPW8oe30sbi5JbnRlcmZhY2UsdCksZS5hdWdt
ZW50Q2xhc3M9bi5hdWdtZW50Q2xhc3MsaS5hZGRQb29saW5nVG8oZSxpLmZvdXJBcmd1bWVudFBv
b2xlcil9LGkuYWRkUG9vbGluZ1RvKHIsaS5mb3VyQXJndW1lbnRQb29sZXIpLGUuZXhwb3J0cz1y
fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMiksbz0obigwKSxmdW5jdGlv
bihlKXt2YXIgdD10aGlzO2lmKHQuaW5zdGFuY2VQb29sLmxlbmd0aCl7dmFyIG49dC5pbnN0YW5j
ZVBvb2wucG9wKCk7cmV0dXJuIHQuY2FsbChuLGUpLG59cmV0dXJuIG5ldyB0KGUpfSksaT1mdW5j
dGlvbihlLHQpe3ZhciBuPXRoaXM7aWYobi5pbnN0YW5jZVBvb2wubGVuZ3RoKXt2YXIgcj1uLmlu
c3RhbmNlUG9vbC5wb3AoKTtyZXR1cm4gbi5jYWxsKHIsZSx0KSxyfXJldHVybiBuZXcgbihlLHQp
fSxhPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzO2lmKHIuaW5zdGFuY2VQb29sLmxlbmd0aCl7
dmFyIG89ci5pbnN0YW5jZVBvb2wucG9wKCk7cmV0dXJuIHIuY2FsbChvLGUsdCxuKSxvfXJldHVy
biBuZXcgcihlLHQsbil9LHU9ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89dGhpcztpZihvLmluc3Rh
bmNlUG9vbC5sZW5ndGgpe3ZhciBpPW8uaW5zdGFuY2VQb29sLnBvcCgpO3JldHVybiBvLmNhbGwo
aSxlLHQsbixyKSxpfXJldHVybiBuZXcgbyhlLHQsbixyKX0scz1mdW5jdGlvbihlKXt2YXIgdD10
aGlzO2UgaW5zdGFuY2VvZiB0fHxyKCIyNSIpLGUuZGVzdHJ1Y3RvcigpLHQuaW5zdGFuY2VQb29s
Lmxlbmd0aDx0LnBvb2xTaXplJiZ0Lmluc3RhbmNlUG9vbC5wdXNoKGUpfSxjPW8sbD1mdW5jdGlv
bihlLHQpe3ZhciBuPWU7cmV0dXJuIG4uaW5zdGFuY2VQb29sPVtdLG4uZ2V0UG9vbGVkPXR8fGMs
bi5wb29sU2l6ZXx8KG4ucG9vbFNpemU9MTApLG4ucmVsZWFzZT1zLG59LHA9e2FkZFBvb2xpbmdU
bzpsLG9uZUFyZ3VtZW50UG9vbGVyOm8sdHdvQXJndW1lbnRQb29sZXI6aSx0aHJlZUFyZ3VtZW50
UG9vbGVyOmEsZm91ckFyZ3VtZW50UG9vbGVyOnV9O2UuZXhwb3J0cz1wfSxmdW5jdGlvbihlLHQs
bil7InVzZSBzdHJpY3QiO3ZhciByPW4oMyksbz1uKDUyKSxpPW4oMTA1KSxhPW4oMTEwKSx1PW4o
MTQpLHM9bigxMTEpLGM9bigxMTQpLGw9bigxMTUpLHA9bigxMTcpLGY9dS5jcmVhdGVFbGVtZW50
LGQ9dS5jcmVhdGVGYWN0b3J5LGg9dS5jbG9uZUVsZW1lbnQsbT1yLHY9ZnVuY3Rpb24oZSl7cmV0
dXJuIGV9LHk9e0NoaWxkcmVuOnttYXA6aS5tYXAsZm9yRWFjaDppLmZvckVhY2gsY291bnQ6aS5j
b3VudCx0b0FycmF5OmkudG9BcnJheSxvbmx5OnB9LENvbXBvbmVudDpvLkNvbXBvbmVudCxQdXJl
Q29tcG9uZW50Om8uUHVyZUNvbXBvbmVudCxjcmVhdGVFbGVtZW50OmYsY2xvbmVFbGVtZW50Omgs
aXNWYWxpZEVsZW1lbnQ6dS5pc1ZhbGlkRWxlbWVudCxQcm9wVHlwZXM6cyxjcmVhdGVDbGFzczps
LGNyZWF0ZUZhY3Rvcnk6ZCxjcmVhdGVNaXhpbjp2LERPTTphLHZlcnNpb246YyxfX3NwcmVhZDpt
fTtlLmV4cG9ydHM9eX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUp
e3JldHVybiB2b2lkIDAhPT1lLnJlZn1mdW5jdGlvbiBvKGUpe3JldHVybiB2b2lkIDAhPT1lLmtl
eX12YXIgaT1uKDMpLGE9bigxMCksdT0obigxKSxuKDU0KSxPYmplY3QucHJvdG90eXBlLmhhc093
blByb3BlcnR5KSxzPW4oNTUpLGM9e2tleTohMCxyZWY6ITAsX19zZWxmOiEwLF9fc291cmNlOiEw
fSxsPWZ1bmN0aW9uKGUsdCxuLHIsbyxpLGEpe3ZhciB1PXskJHR5cGVvZjpzLHR5cGU6ZSxrZXk6
dCxyZWY6bixwcm9wczphLF9vd25lcjppfTtyZXR1cm4gdX07bC5jcmVhdGVFbGVtZW50PWZ1bmN0
aW9uKGUsdCxuKXt2YXIgaSxzPXt9LHA9bnVsbCxmPW51bGw7aWYobnVsbCE9dCl7cih0KSYmKGY9
dC5yZWYpLG8odCkmJihwPSIiK3Qua2V5KSx2b2lkIDA9PT10Ll9fc2VsZj9udWxsOnQuX19zZWxm
LHZvaWQgMD09PXQuX19zb3VyY2U/bnVsbDp0Ll9fc291cmNlO2ZvcihpIGluIHQpdS5jYWxsKHQs
aSkmJiFjLmhhc093blByb3BlcnR5KGkpJiYoc1tpXT10W2ldKX12YXIgZD1hcmd1bWVudHMubGVu
Z3RoLTI7aWYoMT09PWQpcy5jaGlsZHJlbj1uO2Vsc2UgaWYoZD4xKXtmb3IodmFyIGg9QXJyYXko
ZCksbT0wO208ZDttKyspaFttXT1hcmd1bWVudHNbbSsyXTtzLmNoaWxkcmVuPWh9aWYoZSYmZS5k
ZWZhdWx0UHJvcHMpe3ZhciB2PWUuZGVmYXVsdFByb3BzO2ZvcihpIGluIHYpdm9pZCAwPT09c1tp
XSYmKHNbaV09dltpXSl9cmV0dXJuIGwoZSxwLGYsMCwwLGEuY3VycmVudCxzKX0sbC5jcmVhdGVG
YWN0b3J5PWZ1bmN0aW9uKGUpe3ZhciB0PWwuY3JlYXRlRWxlbWVudC5iaW5kKG51bGwsZSk7cmV0
dXJuIHQudHlwZT1lLHR9LGwuY2xvbmVBbmRSZXBsYWNlS2V5PWZ1bmN0aW9uKGUsdCl7cmV0dXJu
IGwoZS50eXBlLHQsZS5yZWYsZS5fc2VsZixlLl9zb3VyY2UsZS5fb3duZXIsZS5wcm9wcyl9LGwu
Y2xvbmVFbGVtZW50PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcyxwPWkoe30sZS5wcm9wcyksZj1lLmtl
eSxkPWUucmVmLGg9KGUuX3NlbGYsZS5fc291cmNlLGUuX293bmVyKTtpZihudWxsIT10KXtyKHQp
JiYoZD10LnJlZixoPWEuY3VycmVudCksbyh0KSYmKGY9IiIrdC5rZXkpO3ZhciBtO2UudHlwZSYm
ZS50eXBlLmRlZmF1bHRQcm9wcyYmKG09ZS50eXBlLmRlZmF1bHRQcm9wcyk7Zm9yKHMgaW4gdCl1
LmNhbGwodCxzKSYmIWMuaGFzT3duUHJvcGVydHkocykmJih2b2lkIDA9PT10W3NdJiZ2b2lkIDAh
PT1tP3Bbc109bVtzXTpwW3NdPXRbc10pfXZhciB2PWFyZ3VtZW50cy5sZW5ndGgtMjtpZigxPT09
dilwLmNoaWxkcmVuPW47ZWxzZSBpZih2PjEpe2Zvcih2YXIgeT1BcnJheSh2KSxnPTA7Zzx2O2cr
Kyl5W2ddPWFyZ3VtZW50c1tnKzJdO3AuY2hpbGRyZW49eX1yZXR1cm4gbChlLnR5cGUsZixkLDAs
MCxoLHApfSxsLmlzVmFsaWRFbGVtZW50PWZ1bmN0aW9uKGUpe3JldHVybiJvYmplY3QiPT09dHlw
ZW9mIGUmJm51bGwhPT1lJiZlLiQkdHlwZW9mPT09c30sZS5leHBvcnRzPWx9LGZ1bmN0aW9uKGUs
dCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3JldHVybihlJnQpPT09dH12YXIgbz1u
KDIpLGk9KG4oMCkse01VU1RfVVNFX1BST1BFUlRZOjEsSEFTX0JPT0xFQU5fVkFMVUU6NCxIQVNf
TlVNRVJJQ19WQUxVRTo4LEhBU19QT1NJVElWRV9OVU1FUklDX1ZBTFVFOjI0LEhBU19PVkVSTE9B
REVEX0JPT0xFQU5fVkFMVUU6MzIsaW5qZWN0RE9NUHJvcGVydHlDb25maWc6ZnVuY3Rpb24oZSl7
dmFyIHQ9aSxuPWUuUHJvcGVydGllc3x8e30sYT1lLkRPTUF0dHJpYnV0ZU5hbWVzcGFjZXN8fHt9
LHM9ZS5ET01BdHRyaWJ1dGVOYW1lc3x8e30sYz1lLkRPTVByb3BlcnR5TmFtZXN8fHt9LGw9ZS5E
T01NdXRhdGlvbk1ldGhvZHN8fHt9O2UuaXNDdXN0b21BdHRyaWJ1dGUmJnUuX2lzQ3VzdG9tQXR0
cmlidXRlRnVuY3Rpb25zLnB1c2goZS5pc0N1c3RvbUF0dHJpYnV0ZSk7Zm9yKHZhciBwIGluIG4p
e3UucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShwKSYmbygiNDgiLHApO3ZhciBmPXAudG9Mb3dl
ckNhc2UoKSxkPW5bcF0saD17YXR0cmlidXRlTmFtZTpmLGF0dHJpYnV0ZU5hbWVzcGFjZTpudWxs
LHByb3BlcnR5TmFtZTpwLG11dGF0aW9uTWV0aG9kOm51bGwsbXVzdFVzZVByb3BlcnR5OnIoZCx0
Lk1VU1RfVVNFX1BST1BFUlRZKSxoYXNCb29sZWFuVmFsdWU6cihkLHQuSEFTX0JPT0xFQU5fVkFM
VUUpLGhhc051bWVyaWNWYWx1ZTpyKGQsdC5IQVNfTlVNRVJJQ19WQUxVRSksaGFzUG9zaXRpdmVO
dW1lcmljVmFsdWU6cihkLHQuSEFTX1BPU0lUSVZFX05VTUVSSUNfVkFMVUUpLGhhc092ZXJsb2Fk
ZWRCb29sZWFuVmFsdWU6cihkLHQuSEFTX09WRVJMT0FERURfQk9PTEVBTl9WQUxVRSl9O2lmKGgu
aGFzQm9vbGVhblZhbHVlK2guaGFzTnVtZXJpY1ZhbHVlK2guaGFzT3ZlcmxvYWRlZEJvb2xlYW5W
YWx1ZTw9MXx8bygiNTAiLHApLHMuaGFzT3duUHJvcGVydHkocCkpe3ZhciBtPXNbcF07aC5hdHRy
aWJ1dGVOYW1lPW19YS5oYXNPd25Qcm9wZXJ0eShwKSYmKGguYXR0cmlidXRlTmFtZXNwYWNlPWFb
cF0pLGMuaGFzT3duUHJvcGVydHkocCkmJihoLnByb3BlcnR5TmFtZT1jW3BdKSxsLmhhc093blBy
b3BlcnR5KHApJiYoaC5tdXRhdGlvbk1ldGhvZD1sW3BdKSx1LnByb3BlcnRpZXNbcF09aH19fSks
YT0iOkEtWl9hLXpcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyRkZc
XHUwMzcwLVxcdTAzN0RcXHUwMzdGLVxcdTFGRkZcXHUyMDBDLVxcdTIwMERcXHUyMDcwLVxcdTIx
OEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxc
dUZGRkQiLHU9e0lEX0FUVFJJQlVURV9OQU1FOiJkYXRhLXJlYWN0aWQiLFJPT1RfQVRUUklCVVRF
X05BTUU6ImRhdGEtcmVhY3Ryb290IixBVFRSSUJVVEVfTkFNRV9TVEFSVF9DSEFSOmEsQVRUUklC
VVRFX05BTUVfQ0hBUjphKyJcXC0uMC05XFx1MDBCN1xcdTAzMDAtXFx1MDM2RlxcdTIwM0YtXFx1
MjA0MCIscHJvcGVydGllczp7fSxnZXRQb3NzaWJsZVN0YW5kYXJkTmFtZTpudWxsLF9pc0N1c3Rv
bUF0dHJpYnV0ZUZ1bmN0aW9uczpbXSxpc0N1c3RvbUF0dHJpYnV0ZTpmdW5jdGlvbihlKXtmb3Io
dmFyIHQ9MDt0PHUuX2lzQ3VzdG9tQXR0cmlidXRlRnVuY3Rpb25zLmxlbmd0aDt0Kyspe2lmKCgw
LHUuX2lzQ3VzdG9tQXR0cmlidXRlRnVuY3Rpb25zW3RdKShlKSlyZXR1cm4hMH1yZXR1cm4hMX0s
aW5qZWN0aW9uOml9O2UuZXhwb3J0cz11fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1
bmN0aW9uIHIoKXtvLmF0dGFjaFJlZnModGhpcyx0aGlzLl9jdXJyZW50RWxlbWVudCl9dmFyIG89
bigxMjcpLGk9KG4oNyksbigxKSx7bW91bnRDb21wb25lbnQ6ZnVuY3Rpb24oZSx0LG4sbyxpLGEp
e3ZhciB1PWUubW91bnRDb21wb25lbnQodCxuLG8saSxhKTtyZXR1cm4gZS5fY3VycmVudEVsZW1l
bnQmJm51bGwhPWUuX2N1cnJlbnRFbGVtZW50LnJlZiYmdC5nZXRSZWFjdE1vdW50UmVhZHkoKS5l
bnF1ZXVlKHIsZSksdX0sZ2V0SG9zdE5vZGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0SG9zdE5v
ZGUoKX0sdW5tb3VudENvbXBvbmVudDpmdW5jdGlvbihlLHQpe28uZGV0YWNoUmVmcyhlLGUuX2N1
cnJlbnRFbGVtZW50KSxlLnVubW91bnRDb21wb25lbnQodCl9LHJlY2VpdmVDb21wb25lbnQ6ZnVu
Y3Rpb24oZSx0LG4saSl7dmFyIGE9ZS5fY3VycmVudEVsZW1lbnQ7aWYodCE9PWF8fGkhPT1lLl9j
b250ZXh0KXt2YXIgdT1vLnNob3VsZFVwZGF0ZVJlZnMoYSx0KTt1JiZvLmRldGFjaFJlZnMoZSxh
KSxlLnJlY2VpdmVDb21wb25lbnQodCxuLGkpLHUmJmUuX2N1cnJlbnRFbGVtZW50JiZudWxsIT1l
Ll9jdXJyZW50RWxlbWVudC5yZWYmJm4uZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShyLGUp
fX0scGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5OmZ1bmN0aW9uKGUsdCxuKXtlLl91cGRhdGVCYXRj
aE51bWJlcj09PW4mJmUucGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5KHQpfX0pO2UuZXhwb3J0cz1p
fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYoaCl7dmFyIHQ9
ZS5ub2RlLG49ZS5jaGlsZHJlbjtpZihuLmxlbmd0aClmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3Ir
KyltKHQsbltyXSxudWxsKTtlbHNlIG51bGwhPWUuaHRtbD9wKHQsZS5odG1sKTpudWxsIT1lLnRl
eHQmJmQodCxlLnRleHQpfX1mdW5jdGlvbiBvKGUsdCl7ZS5wYXJlbnROb2RlLnJlcGxhY2VDaGls
ZCh0Lm5vZGUsZSkscih0KX1mdW5jdGlvbiBpKGUsdCl7aD9lLmNoaWxkcmVuLnB1c2godCk6ZS5u
b2RlLmFwcGVuZENoaWxkKHQubm9kZSl9ZnVuY3Rpb24gYShlLHQpe2g/ZS5odG1sPXQ6cChlLm5v
ZGUsdCl9ZnVuY3Rpb24gdShlLHQpe2g/ZS50ZXh0PXQ6ZChlLm5vZGUsdCl9ZnVuY3Rpb24gcygp
e3JldHVybiB0aGlzLm5vZGUubm9kZU5hbWV9ZnVuY3Rpb24gYyhlKXtyZXR1cm57bm9kZTplLGNo
aWxkcmVuOltdLGh0bWw6bnVsbCx0ZXh0Om51bGwsdG9TdHJpbmc6c319dmFyIGw9bigzOCkscD1u
KDI2KSxmPW4oMzkpLGQ9big2NyksaD0idW5kZWZpbmVkIiE9PXR5cGVvZiBkb2N1bWVudCYmIm51
bWJlciI9PT10eXBlb2YgZG9jdW1lbnQuZG9jdW1lbnRNb2RlfHwidW5kZWZpbmVkIiE9PXR5cGVv
ZiBuYXZpZ2F0b3ImJiJzdHJpbmciPT09dHlwZW9mIG5hdmlnYXRvci51c2VyQWdlbnQmJi9cYkVk
Z2VcL1xkLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLG09ZihmdW5jdGlvbihlLHQsbil7MTE9
PT10Lm5vZGUubm9kZVR5cGV8fDE9PT10Lm5vZGUubm9kZVR5cGUmJiJvYmplY3QiPT09dC5ub2Rl
Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJihudWxsPT10Lm5vZGUubmFtZXNwYWNlVVJJfHx0Lm5v
ZGUubmFtZXNwYWNlVVJJPT09bC5odG1sKT8ocih0KSxlLmluc2VydEJlZm9yZSh0Lm5vZGUsbikp
OihlLmluc2VydEJlZm9yZSh0Lm5vZGUsbikscih0KSl9KTtjLmluc2VydFRyZWVCZWZvcmU9bSxj
LnJlcGxhY2VDaGlsZFdpdGhUcmVlPW8sYy5xdWV1ZUNoaWxkPWksYy5xdWV1ZUhUTUw9YSxjLnF1
ZXVlVGV4dD11LGUuZXhwb3J0cz1jfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0
aW9uIHIoZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgtMSxuPSJNaW5pZmllZCBSZWFjdCBl
cnJvciAjIitlKyI7IHZpc2l0IGh0dHA6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy9l
cnJvci1kZWNvZGVyLmh0bWw/aW52YXJpYW50PSIrZSxyPTA7cjx0O3IrKyluKz0iJmFyZ3NbXT0i
K2VuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbcisxXSk7bis9IiBmb3IgdGhlIGZ1bGwgbWVz
c2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJy
b3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuIjt2YXIgbz1uZXcgRXJyb3Iobik7
dGhyb3cgby5uYW1lPSJJbnZhcmlhbnQgVmlvbGF0aW9uIixvLmZyYW1lc1RvUG9wPTEsb31lLmV4
cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXt2
YXIgcj10LmRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzW25dO3JldHVybiB5
KGUscil9ZnVuY3Rpb24gbyhlLHQsbil7dmFyIG89cihlLG4sdCk7byYmKG4uX2Rpc3BhdGNoTGlz
dGVuZXJzPW0obi5fZGlzcGF0Y2hMaXN0ZW5lcnMsbyksbi5fZGlzcGF0Y2hJbnN0YW5jZXM9bShu
Ll9kaXNwYXRjaEluc3RhbmNlcyxlKSl9ZnVuY3Rpb24gaShlKXtlJiZlLmRpc3BhdGNoQ29uZmln
LnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzJiZoLnRyYXZlcnNlVHdvUGhhc2UoZS5fdGFyZ2V0SW5z
dCxvLGUpfWZ1bmN0aW9uIGEoZSl7aWYoZSYmZS5kaXNwYXRjaENvbmZpZy5waGFzZWRSZWdpc3Ry
YXRpb25OYW1lcyl7dmFyIHQ9ZS5fdGFyZ2V0SW5zdCxuPXQ/aC5nZXRQYXJlbnRJbnN0YW5jZSh0
KTpudWxsO2gudHJhdmVyc2VUd29QaGFzZShuLG8sZSl9fWZ1bmN0aW9uIHUoZSx0LG4pe2lmKG4m
Jm4uZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZSl7dmFyIHI9bi5kaXNwYXRjaENvbmZp
Zy5yZWdpc3RyYXRpb25OYW1lLG89eShlLHIpO28mJihuLl9kaXNwYXRjaExpc3RlbmVycz1tKG4u
X2Rpc3BhdGNoTGlzdGVuZXJzLG8pLG4uX2Rpc3BhdGNoSW5zdGFuY2VzPW0obi5fZGlzcGF0Y2hJ
bnN0YW5jZXMsZSkpfX1mdW5jdGlvbiBzKGUpe2UmJmUuZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0
aW9uTmFtZSYmdShlLl90YXJnZXRJbnN0LG51bGwsZSl9ZnVuY3Rpb24gYyhlKXt2KGUsaSl9ZnVu
Y3Rpb24gbChlKXt2KGUsYSl9ZnVuY3Rpb24gcChlLHQsbixyKXtoLnRyYXZlcnNlRW50ZXJMZWF2
ZShuLHIsdSxlLHQpfWZ1bmN0aW9uIGYoZSl7dihlLHMpfXZhciBkPW4oMjApLGg9bigzMiksbT1u
KDU5KSx2PW4oNjApLHk9KG4oMSksZC5nZXRMaXN0ZW5lciksZz17YWNjdW11bGF0ZVR3b1BoYXNl
RGlzcGF0Y2hlczpjLGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXNTa2lwVGFyZ2V0OmwsYWNj
dW11bGF0ZURpcmVjdERpc3BhdGNoZXM6ZixhY2N1bXVsYXRlRW50ZXJMZWF2ZURpc3BhdGNoZXM6
cH07ZS5leHBvcnRzPWd9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihl
KXtyZXR1cm4iYnV0dG9uIj09PWV8fCJpbnB1dCI9PT1lfHwic2VsZWN0Ij09PWV8fCJ0ZXh0YXJl
YSI9PT1lfWZ1bmN0aW9uIG8oZSx0LG4pe3N3aXRjaChlKXtjYXNlIm9uQ2xpY2siOmNhc2Uib25D
bGlja0NhcHR1cmUiOmNhc2Uib25Eb3VibGVDbGljayI6Y2FzZSJvbkRvdWJsZUNsaWNrQ2FwdHVy
ZSI6Y2FzZSJvbk1vdXNlRG93biI6Y2FzZSJvbk1vdXNlRG93bkNhcHR1cmUiOmNhc2Uib25Nb3Vz
ZU1vdmUiOmNhc2Uib25Nb3VzZU1vdmVDYXB0dXJlIjpjYXNlIm9uTW91c2VVcCI6Y2FzZSJvbk1v
dXNlVXBDYXB0dXJlIjpyZXR1cm4hKCFuLmRpc2FibGVkfHwhcih0KSk7ZGVmYXVsdDpyZXR1cm4h
MX19dmFyIGk9bigyKSxhPW4oMzEpLHU9bigzMikscz1uKDMzKSxjPW4oNTkpLGw9big2MCkscD0o
bigwKSx7fSksZj1udWxsLGQ9ZnVuY3Rpb24oZSx0KXtlJiYodS5leGVjdXRlRGlzcGF0Y2hlc0lu
T3JkZXIoZSx0KSxlLmlzUGVyc2lzdGVudCgpfHxlLmNvbnN0cnVjdG9yLnJlbGVhc2UoZSkpfSxo
PWZ1bmN0aW9uKGUpe3JldHVybiBkKGUsITApfSxtPWZ1bmN0aW9uKGUpe3JldHVybiBkKGUsITEp
fSx2PWZ1bmN0aW9uKGUpe3JldHVybiIuIitlLl9yb290Tm9kZUlEfSx5PXtpbmplY3Rpb246e2lu
amVjdEV2ZW50UGx1Z2luT3JkZXI6YS5pbmplY3RFdmVudFBsdWdpbk9yZGVyLGluamVjdEV2ZW50
UGx1Z2luc0J5TmFtZTphLmluamVjdEV2ZW50UGx1Z2luc0J5TmFtZX0scHV0TGlzdGVuZXI6ZnVu
Y3Rpb24oZSx0LG4peyJmdW5jdGlvbiIhPT10eXBlb2YgbiYmaSgiOTQiLHQsdHlwZW9mIG4pO3Zh
ciByPXYoZSk7KHBbdF18fChwW3RdPXt9KSlbcl09bjt2YXIgbz1hLnJlZ2lzdHJhdGlvbk5hbWVN
b2R1bGVzW3RdO28mJm8uZGlkUHV0TGlzdGVuZXImJm8uZGlkUHV0TGlzdGVuZXIoZSx0LG4pfSxn
ZXRMaXN0ZW5lcjpmdW5jdGlvbihlLHQpe3ZhciBuPXBbdF07aWYobyh0LGUuX2N1cnJlbnRFbGVt
ZW50LnR5cGUsZS5fY3VycmVudEVsZW1lbnQucHJvcHMpKXJldHVybiBudWxsO3ZhciByPXYoZSk7
cmV0dXJuIG4mJm5bcl19LGRlbGV0ZUxpc3RlbmVyOmZ1bmN0aW9uKGUsdCl7dmFyIG49YS5yZWdp
c3RyYXRpb25OYW1lTW9kdWxlc1t0XTtuJiZuLndpbGxEZWxldGVMaXN0ZW5lciYmbi53aWxsRGVs
ZXRlTGlzdGVuZXIoZSx0KTt2YXIgcj1wW3RdO2lmKHIpe2RlbGV0ZSByW3YoZSldfX0sZGVsZXRl
QWxsTGlzdGVuZXJzOmZ1bmN0aW9uKGUpe3ZhciB0PXYoZSk7Zm9yKHZhciBuIGluIHApaWYocC5o
YXNPd25Qcm9wZXJ0eShuKSYmcFtuXVt0XSl7dmFyIHI9YS5yZWdpc3RyYXRpb25OYW1lTW9kdWxl
c1tuXTtyJiZyLndpbGxEZWxldGVMaXN0ZW5lciYmci53aWxsRGVsZXRlTGlzdGVuZXIoZSxuKSxk
ZWxldGUgcFtuXVt0XX19LGV4dHJhY3RFdmVudHM6ZnVuY3Rpb24oZSx0LG4scil7Zm9yKHZhciBv
LGk9YS5wbHVnaW5zLHU9MDt1PGkubGVuZ3RoO3UrKyl7dmFyIHM9aVt1XTtpZihzKXt2YXIgbD1z
LmV4dHJhY3RFdmVudHMoZSx0LG4scik7bCYmKG89YyhvLGwpKX19cmV0dXJuIG99LGVucXVldWVF
dmVudHM6ZnVuY3Rpb24oZSl7ZSYmKGY9YyhmLGUpKX0scHJvY2Vzc0V2ZW50UXVldWU6ZnVuY3Rp
b24oZSl7dmFyIHQ9ZjtmPW51bGwsZT9sKHQsaCk6bCh0LG0pLGYmJmkoIjk1Iikscy5yZXRocm93
Q2F1Z2h0RXJyb3IoKX0sX19wdXJnZTpmdW5jdGlvbigpe3A9e319LF9fZ2V0TGlzdGVuZXJCYW5r
OmZ1bmN0aW9uKCl7cmV0dXJuIHB9fTtlLmV4cG9ydHM9eX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ug
c3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe3JldHVybiBvLmNhbGwodGhpcyxlLHQsbixyKX12
YXIgbz1uKDExKSxpPW4oMzQpLGE9e3ZpZXc6ZnVuY3Rpb24oZSl7aWYoZS52aWV3KXJldHVybiBl
LnZpZXc7dmFyIHQ9aShlKTtpZih0LndpbmRvdz09PXQpcmV0dXJuIHQ7dmFyIG49dC5vd25lckRv
Y3VtZW50O3JldHVybiBuP24uZGVmYXVsdFZpZXd8fG4ucGFyZW50V2luZG93OndpbmRvd30sZGV0
YWlsOmZ1bmN0aW9uKGUpe3JldHVybiBlLmRldGFpbHx8MH19O28uYXVnbWVudENsYXNzKHIsYSks
ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9e3JlbW92ZTpm
dW5jdGlvbihlKXtlLl9yZWFjdEludGVybmFsSW5zdGFuY2U9dm9pZCAwfSxnZXQ6ZnVuY3Rpb24o
ZSl7cmV0dXJuIGUuX3JlYWN0SW50ZXJuYWxJbnN0YW5jZX0saGFzOmZ1bmN0aW9uKGUpe3JldHVy
biB2b2lkIDAhPT1lLl9yZWFjdEludGVybmFsSW5zdGFuY2V9LHNldDpmdW5jdGlvbihlLHQpe2Uu
X3JlYWN0SW50ZXJuYWxJbnN0YW5jZT10fX07ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXsi
dXNlIHN0cmljdCI7dmFyIHI9e307ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0
cmljdCI7dmFyIHI9bigyKSxvPShuKDApLHt9KSxpPXtyZWluaXRpYWxpemVUcmFuc2FjdGlvbjpm
dW5jdGlvbigpe3RoaXMudHJhbnNhY3Rpb25XcmFwcGVycz10aGlzLmdldFRyYW5zYWN0aW9uV3Jh
cHBlcnMoKSx0aGlzLndyYXBwZXJJbml0RGF0YT90aGlzLndyYXBwZXJJbml0RGF0YS5sZW5ndGg9
MDp0aGlzLndyYXBwZXJJbml0RGF0YT1bXSx0aGlzLl9pc0luVHJhbnNhY3Rpb249ITF9LF9pc0lu
VHJhbnNhY3Rpb246ITEsZ2V0VHJhbnNhY3Rpb25XcmFwcGVyczpudWxsLGlzSW5UcmFuc2FjdGlv
bjpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5faXNJblRyYW5zYWN0aW9ufSxwZXJmb3JtOmZ1bmN0
aW9uKGUsdCxuLG8saSxhLHUscyl7dGhpcy5pc0luVHJhbnNhY3Rpb24oKSYmcigiMjciKTt2YXIg
YyxsO3RyeXt0aGlzLl9pc0luVHJhbnNhY3Rpb249ITAsYz0hMCx0aGlzLmluaXRpYWxpemVBbGwo
MCksbD1lLmNhbGwodCxuLG8saSxhLHUscyksYz0hMX1maW5hbGx5e3RyeXtpZihjKXRyeXt0aGlz
LmNsb3NlQWxsKDApfWNhdGNoKGUpe31lbHNlIHRoaXMuY2xvc2VBbGwoMCl9ZmluYWxseXt0aGlz
Ll9pc0luVHJhbnNhY3Rpb249ITF9fXJldHVybiBsfSxpbml0aWFsaXplQWxsOmZ1bmN0aW9uKGUp
e2Zvcih2YXIgdD10aGlzLnRyYW5zYWN0aW9uV3JhcHBlcnMsbj1lO248dC5sZW5ndGg7bisrKXt2
YXIgcj10W25dO3RyeXt0aGlzLndyYXBwZXJJbml0RGF0YVtuXT1vLHRoaXMud3JhcHBlckluaXRE
YXRhW25dPXIuaW5pdGlhbGl6ZT9yLmluaXRpYWxpemUuY2FsbCh0aGlzKTpudWxsfWZpbmFsbHl7
aWYodGhpcy53cmFwcGVySW5pdERhdGFbbl09PT1vKXRyeXt0aGlzLmluaXRpYWxpemVBbGwobisx
KX1jYXRjaChlKXt9fX19LGNsb3NlQWxsOmZ1bmN0aW9uKGUpe3RoaXMuaXNJblRyYW5zYWN0aW9u
KCl8fHIoIjI4Iik7Zm9yKHZhciB0PXRoaXMudHJhbnNhY3Rpb25XcmFwcGVycyxuPWU7bjx0Lmxl
bmd0aDtuKyspe3ZhciBpLGE9dFtuXSx1PXRoaXMud3JhcHBlckluaXREYXRhW25dO3RyeXtpPSEw
LHUhPT1vJiZhLmNsb3NlJiZhLmNsb3NlLmNhbGwodGhpcyx1KSxpPSExfWZpbmFsbHl7aWYoaSl0
cnl7dGhpcy5jbG9zZUFsbChuKzEpfWNhdGNoKGUpe319fXRoaXMud3JhcHBlckluaXREYXRhLmxl
bmd0aD0wfX07ZS5leHBvcnRzPWl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rp
b24gcihlLHQsbixyKXtyZXR1cm4gby5jYWxsKHRoaXMsZSx0LG4scil9dmFyIG89bigyMSksaT1u
KDY2KSxhPW4oMzYpLHU9e3NjcmVlblg6bnVsbCxzY3JlZW5ZOm51bGwsY2xpZW50WDpudWxsLGNs
aWVudFk6bnVsbCxjdHJsS2V5Om51bGwsc2hpZnRLZXk6bnVsbCxhbHRLZXk6bnVsbCxtZXRhS2V5
Om51bGwsZ2V0TW9kaWZpZXJTdGF0ZTphLGJ1dHRvbjpmdW5jdGlvbihlKXt2YXIgdD1lLmJ1dHRv
bjtyZXR1cm4id2hpY2giaW4gZT90OjI9PT10PzI6ND09PXQ/MTowfSxidXR0b25zOm51bGwscmVs
YXRlZFRhcmdldDpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZWxhdGVkVGFyZ2V0fHwoZS5mcm9tRWxl
bWVudD09PWUuc3JjRWxlbWVudD9lLnRvRWxlbWVudDplLmZyb21FbGVtZW50KX0scGFnZVg6ZnVu
Y3Rpb24oZSl7cmV0dXJuInBhZ2VYImluIGU/ZS5wYWdlWDplLmNsaWVudFgraS5jdXJyZW50U2Ny
b2xsTGVmdH0scGFnZVk6ZnVuY3Rpb24oZSl7cmV0dXJuInBhZ2VZImluIGU/ZS5wYWdlWTplLmNs
aWVudFkraS5jdXJyZW50U2Nyb2xsVG9wfX07by5hdWdtZW50Q2xhc3Mocix1KSxlLmV4cG9ydHM9
cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcixvPW4oNSksaT1uKDM4KSxhPS9e
WyBcclxuXHRcZl0vLHU9LzwoIS0tfGxpbmt8bm9zY3JpcHR8bWV0YXxzY3JpcHR8c3R5bGUpWyBc
clxuXHRcZlwvPl0vLHM9bigzOSksYz1zKGZ1bmN0aW9uKGUsdCl7aWYoZS5uYW1lc3BhY2VVUkkh
PT1pLnN2Z3x8ImlubmVySFRNTCJpbiBlKWUuaW5uZXJIVE1MPXQ7ZWxzZXtyPXJ8fGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHIuaW5uZXJIVE1MPSI8c3ZnPiIrdCsiPC9zdmc+Ijtmb3Io
dmFyIG49ci5maXJzdENoaWxkO24uZmlyc3RDaGlsZDspZS5hcHBlbmRDaGlsZChuLmZpcnN0Q2hp
bGQpfX0pO2lmKG8uY2FuVXNlRE9NKXt2YXIgbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYi
KTtsLmlubmVySFRNTD0iICIsIiI9PT1sLmlubmVySFRNTCYmKGM9ZnVuY3Rpb24oZSx0KXtpZihl
LnBhcmVudE5vZGUmJmUucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZSxlKSxhLnRlc3QodCl8fCI8
Ij09PXRbMF0mJnUudGVzdCh0KSl7ZS5pbm5lckhUTUw9U3RyaW5nLmZyb21DaGFyQ29kZSg2NTI3
OSkrdDt2YXIgbj1lLmZpcnN0Q2hpbGQ7MT09PW4uZGF0YS5sZW5ndGg/ZS5yZW1vdmVDaGlsZChu
KTpuLmRlbGV0ZURhdGEoMCwxKX1lbHNlIGUuaW5uZXJIVE1MPXR9KSxsPW51bGx9ZS5leHBvcnRz
PWN9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD0iIitl
LG49aS5leGVjKHQpO2lmKCFuKXJldHVybiB0O3ZhciByLG89IiIsYT0wLHU9MDtmb3IoYT1uLmlu
ZGV4O2E8dC5sZW5ndGg7YSsrKXtzd2l0Y2godC5jaGFyQ29kZUF0KGEpKXtjYXNlIDM0OnI9IiZx
dW90OyI7YnJlYWs7Y2FzZSAzODpyPSImYW1wOyI7YnJlYWs7Y2FzZSAzOTpyPSImI3gyNzsiO2Jy
ZWFrO2Nhc2UgNjA6cj0iJmx0OyI7YnJlYWs7Y2FzZSA2MjpyPSImZ3Q7IjticmVhaztkZWZhdWx0
OmNvbnRpbnVlfXUhPT1hJiYobys9dC5zdWJzdHJpbmcodSxhKSksdT1hKzEsbys9cn1yZXR1cm4g
dSE9PWE/byt0LnN1YnN0cmluZyh1LGEpOm99ZnVuY3Rpb24gbyhlKXtyZXR1cm4iYm9vbGVhbiI9
PT10eXBlb2YgZXx8Im51bWJlciI9PT10eXBlb2YgZT8iIitlOnIoZSl9dmFyIGk9L1siJyY8Pl0v
O2UuZXhwb3J0cz1vfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7
cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG0pfHwoZVttXT1k
KysscFtlW21dXT17fSkscFtlW21dXX12YXIgbyxpPW4oMyksYT1uKDMxKSx1PW4oMTQ4KSxzPW4o
NjYpLGM9bigxNDkpLGw9bigzNSkscD17fSxmPSExLGQ9MCxoPXt0b3BBYm9ydDoiYWJvcnQiLHRv
cEFuaW1hdGlvbkVuZDpjKCJhbmltYXRpb25lbmQiKXx8ImFuaW1hdGlvbmVuZCIsdG9wQW5pbWF0
aW9uSXRlcmF0aW9uOmMoImFuaW1hdGlvbml0ZXJhdGlvbiIpfHwiYW5pbWF0aW9uaXRlcmF0aW9u
Iix0b3BBbmltYXRpb25TdGFydDpjKCJhbmltYXRpb25zdGFydCIpfHwiYW5pbWF0aW9uc3RhcnQi
LHRvcEJsdXI6ImJsdXIiLHRvcENhblBsYXk6ImNhbnBsYXkiLHRvcENhblBsYXlUaHJvdWdoOiJj
YW5wbGF5dGhyb3VnaCIsdG9wQ2hhbmdlOiJjaGFuZ2UiLHRvcENsaWNrOiJjbGljayIsdG9wQ29t
cG9zaXRpb25FbmQ6ImNvbXBvc2l0aW9uZW5kIix0b3BDb21wb3NpdGlvblN0YXJ0OiJjb21wb3Np
dGlvbnN0YXJ0Iix0b3BDb21wb3NpdGlvblVwZGF0ZToiY29tcG9zaXRpb251cGRhdGUiLHRvcENv
bnRleHRNZW51OiJjb250ZXh0bWVudSIsdG9wQ29weToiY29weSIsdG9wQ3V0OiJjdXQiLHRvcERv
dWJsZUNsaWNrOiJkYmxjbGljayIsdG9wRHJhZzoiZHJhZyIsdG9wRHJhZ0VuZDoiZHJhZ2VuZCIs
dG9wRHJhZ0VudGVyOiJkcmFnZW50ZXIiLHRvcERyYWdFeGl0OiJkcmFnZXhpdCIsdG9wRHJhZ0xl
YXZlOiJkcmFnbGVhdmUiLHRvcERyYWdPdmVyOiJkcmFnb3ZlciIsdG9wRHJhZ1N0YXJ0OiJkcmFn
c3RhcnQiLHRvcERyb3A6ImRyb3AiLHRvcER1cmF0aW9uQ2hhbmdlOiJkdXJhdGlvbmNoYW5nZSIs
dG9wRW1wdGllZDoiZW1wdGllZCIsdG9wRW5jcnlwdGVkOiJlbmNyeXB0ZWQiLHRvcEVuZGVkOiJl
bmRlZCIsdG9wRXJyb3I6ImVycm9yIix0b3BGb2N1czoiZm9jdXMiLHRvcElucHV0OiJpbnB1dCIs
dG9wS2V5RG93bjoia2V5ZG93biIsdG9wS2V5UHJlc3M6ImtleXByZXNzIix0b3BLZXlVcDoia2V5
dXAiLHRvcExvYWRlZERhdGE6ImxvYWRlZGRhdGEiLHRvcExvYWRlZE1ldGFkYXRhOiJsb2FkZWRt
ZXRhZGF0YSIsdG9wTG9hZFN0YXJ0OiJsb2Fkc3RhcnQiLHRvcE1vdXNlRG93bjoibW91c2Vkb3du
Iix0b3BNb3VzZU1vdmU6Im1vdXNlbW92ZSIsdG9wTW91c2VPdXQ6Im1vdXNlb3V0Iix0b3BNb3Vz
ZU92ZXI6Im1vdXNlb3ZlciIsdG9wTW91c2VVcDoibW91c2V1cCIsdG9wUGFzdGU6InBhc3RlIix0
b3BQYXVzZToicGF1c2UiLHRvcFBsYXk6InBsYXkiLHRvcFBsYXlpbmc6InBsYXlpbmciLHRvcFBy
b2dyZXNzOiJwcm9ncmVzcyIsdG9wUmF0ZUNoYW5nZToicmF0ZWNoYW5nZSIsdG9wU2Nyb2xsOiJz
Y3JvbGwiLHRvcFNlZWtlZDoic2Vla2VkIix0b3BTZWVraW5nOiJzZWVraW5nIix0b3BTZWxlY3Rp
b25DaGFuZ2U6InNlbGVjdGlvbmNoYW5nZSIsdG9wU3RhbGxlZDoic3RhbGxlZCIsdG9wU3VzcGVu
ZDoic3VzcGVuZCIsdG9wVGV4dElucHV0OiJ0ZXh0SW5wdXQiLHRvcFRpbWVVcGRhdGU6InRpbWV1
cGRhdGUiLHRvcFRvdWNoQ2FuY2VsOiJ0b3VjaGNhbmNlbCIsdG9wVG91Y2hFbmQ6InRvdWNoZW5k
Iix0b3BUb3VjaE1vdmU6InRvdWNobW92ZSIsdG9wVG91Y2hTdGFydDoidG91Y2hzdGFydCIsdG9w
VHJhbnNpdGlvbkVuZDpjKCJ0cmFuc2l0aW9uZW5kIil8fCJ0cmFuc2l0aW9uZW5kIix0b3BWb2x1
bWVDaGFuZ2U6InZvbHVtZWNoYW5nZSIsdG9wV2FpdGluZzoid2FpdGluZyIsdG9wV2hlZWw6Indo
ZWVsIn0sbT0iX3JlYWN0TGlzdGVuZXJzSUQiK1N0cmluZyhNYXRoLnJhbmRvbSgpKS5zbGljZSgy
KSx2PWkoe30sdSx7UmVhY3RFdmVudExpc3RlbmVyOm51bGwsaW5qZWN0aW9uOntpbmplY3RSZWFj
dEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oZSl7ZS5zZXRIYW5kbGVUb3BMZXZlbCh2LmhhbmRsZVRv
cExldmVsKSx2LlJlYWN0RXZlbnRMaXN0ZW5lcj1lfX0sc2V0RW5hYmxlZDpmdW5jdGlvbihlKXt2
LlJlYWN0RXZlbnRMaXN0ZW5lciYmdi5SZWFjdEV2ZW50TGlzdGVuZXIuc2V0RW5hYmxlZChlKX0s
aXNFbmFibGVkOmZ1bmN0aW9uKCl7cmV0dXJuISghdi5SZWFjdEV2ZW50TGlzdGVuZXJ8fCF2LlJl
YWN0RXZlbnRMaXN0ZW5lci5pc0VuYWJsZWQoKSl9LGxpc3RlblRvOmZ1bmN0aW9uKGUsdCl7Zm9y
KHZhciBuPXQsbz1yKG4pLGk9YS5yZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzW2VdLHU9MDt1
PGkubGVuZ3RoO3UrKyl7dmFyIHM9aVt1XTtvLmhhc093blByb3BlcnR5KHMpJiZvW3NdfHwoInRv
cFdoZWVsIj09PXM/bCgid2hlZWwiKT92LlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQnViYmxlZEV2
ZW50KCJ0b3BXaGVlbCIsIndoZWVsIixuKTpsKCJtb3VzZXdoZWVsIik/di5SZWFjdEV2ZW50TGlz
dGVuZXIudHJhcEJ1YmJsZWRFdmVudCgidG9wV2hlZWwiLCJtb3VzZXdoZWVsIixuKTp2LlJlYWN0
RXZlbnRMaXN0ZW5lci50cmFwQnViYmxlZEV2ZW50KCJ0b3BXaGVlbCIsIkRPTU1vdXNlU2Nyb2xs
IixuKToidG9wU2Nyb2xsIj09PXM/bCgic2Nyb2xsIiwhMCk/di5SZWFjdEV2ZW50TGlzdGVuZXIu
dHJhcENhcHR1cmVkRXZlbnQoInRvcFNjcm9sbCIsInNjcm9sbCIsbik6di5SZWFjdEV2ZW50TGlz
dGVuZXIudHJhcEJ1YmJsZWRFdmVudCgidG9wU2Nyb2xsIiwic2Nyb2xsIix2LlJlYWN0RXZlbnRM
aXN0ZW5lci5XSU5ET1dfSEFORExFKToidG9wRm9jdXMiPT09c3x8InRvcEJsdXIiPT09cz8obCgi
Zm9jdXMiLCEwKT8odi5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcENhcHR1cmVkRXZlbnQoInRvcEZv
Y3VzIiwiZm9jdXMiLG4pLHYuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBDYXB0dXJlZEV2ZW50KCJ0
b3BCbHVyIiwiYmx1ciIsbikpOmwoImZvY3VzaW4iKSYmKHYuUmVhY3RFdmVudExpc3RlbmVyLnRy
YXBCdWJibGVkRXZlbnQoInRvcEZvY3VzIiwiZm9jdXNpbiIsbiksdi5SZWFjdEV2ZW50TGlzdGVu
ZXIudHJhcEJ1YmJsZWRFdmVudCgidG9wQmx1ciIsImZvY3Vzb3V0IixuKSksby50b3BCbHVyPSEw
LG8udG9wRm9jdXM9ITApOmguaGFzT3duUHJvcGVydHkocykmJnYuUmVhY3RFdmVudExpc3RlbmVy
LnRyYXBCdWJibGVkRXZlbnQocyxoW3NdLG4pLG9bc109ITApfX0sdHJhcEJ1YmJsZWRFdmVudDpm
dW5jdGlvbihlLHQsbil7cmV0dXJuIHYuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBCdWJibGVkRXZl
bnQoZSx0LG4pfSx0cmFwQ2FwdHVyZWRFdmVudDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHYuUmVh
Y3RFdmVudExpc3RlbmVyLnRyYXBDYXB0dXJlZEV2ZW50KGUsdCxuKX0sc3VwcG9ydHNFdmVudFBh
Z2VYWTpmdW5jdGlvbigpe2lmKCFkb2N1bWVudC5jcmVhdGVFdmVudClyZXR1cm4hMTt2YXIgZT1k
b2N1bWVudC5jcmVhdGVFdmVudCgiTW91c2VFdmVudCIpO3JldHVybiBudWxsIT1lJiYicGFnZVgi
aW4gZX0sZW5zdXJlU2Nyb2xsVmFsdWVNb25pdG9yaW5nOmZ1bmN0aW9uKCl7aWYodm9pZCAwPT09
byYmKG89di5zdXBwb3J0c0V2ZW50UGFnZVhZKCkpLCFvJiYhZil7dmFyIGU9cy5yZWZyZXNoU2Ny
b2xsVmFsdWVzO3YuUmVhY3RFdmVudExpc3RlbmVyLm1vbml0b3JTY3JvbGxWYWx1ZShlKSxmPSEw
fX19KTtlLmV4cG9ydHM9dn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg0
KSxvPW4oMjA3KSxpPW4oMjA4KTtuKDIwOSksbig4Nyksbig4Nik7bi5kKHQsImMiLGZ1bmN0aW9u
KCl7cmV0dXJuIHIuYn0pLG4uZCh0LCJiIixmdW5jdGlvbigpe3JldHVybiBvLmF9KSxuLmQodCwi
YSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5hfSl9LGZ1bmN0aW9uKGUsdCl7dmFyIG47bj1mdW5jdGlv
bigpe3JldHVybiB0aGlzfSgpO3RyeXtuPW58fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl8fCgw
LGV2YWwpKCJ0aGlzIil9Y2F0Y2goZSl7Im9iamVjdCI9PT10eXBlb2Ygd2luZG93JiYobj13aW5k
b3cpfWUuZXhwb3J0cz1ufSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIo
KXtpZih1KWZvcih2YXIgZSBpbiBzKXt2YXIgdD1zW2VdLG49dS5pbmRleE9mKGUpO2lmKG4+LTF8
fGEoIjk2IixlKSwhYy5wbHVnaW5zW25dKXt0LmV4dHJhY3RFdmVudHN8fGEoIjk3IixlKSxjLnBs
dWdpbnNbbl09dDt2YXIgcj10LmV2ZW50VHlwZXM7Zm9yKHZhciBpIGluIHIpbyhyW2ldLHQsaSl8
fGEoIjk4IixpLGUpfX19ZnVuY3Rpb24gbyhlLHQsbil7Yy5ldmVudE5hbWVEaXNwYXRjaENvbmZp
Z3MuaGFzT3duUHJvcGVydHkobikmJmEoIjk5IixuKSxjLmV2ZW50TmFtZURpc3BhdGNoQ29uZmln
c1tuXT1lO3ZhciByPWUucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM7aWYocil7Zm9yKHZhciBvIGlu
IHIpaWYoci5oYXNPd25Qcm9wZXJ0eShvKSl7dmFyIHU9cltvXTtpKHUsdCxuKX1yZXR1cm4hMH1y
ZXR1cm4hIWUucmVnaXN0cmF0aW9uTmFtZSYmKGkoZS5yZWdpc3RyYXRpb25OYW1lLHQsbiksITAp
fWZ1bmN0aW9uIGkoZSx0LG4pe2MucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXNbZV0mJmEoIjEwMCIs
ZSksYy5yZWdpc3RyYXRpb25OYW1lTW9kdWxlc1tlXT10LGMucmVnaXN0cmF0aW9uTmFtZURlcGVu
ZGVuY2llc1tlXT10LmV2ZW50VHlwZXNbbl0uZGVwZW5kZW5jaWVzfXZhciBhPW4oMiksdT0obigw
KSxudWxsKSxzPXt9LGM9e3BsdWdpbnM6W10sZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzOnt9LHJl
Z2lzdHJhdGlvbk5hbWVNb2R1bGVzOnt9LHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXM6e30s
cG9zc2libGVSZWdpc3RyYXRpb25OYW1lczpudWxsLGluamVjdEV2ZW50UGx1Z2luT3JkZXI6ZnVu
Y3Rpb24oZSl7dSYmYSgiMTAxIiksdT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlKSxyKCl9
LGluamVjdEV2ZW50UGx1Z2luc0J5TmFtZTpmdW5jdGlvbihlKXt2YXIgdD0hMTtmb3IodmFyIG4g
aW4gZSlpZihlLmhhc093blByb3BlcnR5KG4pKXt2YXIgbz1lW25dO3MuaGFzT3duUHJvcGVydHko
bikmJnNbbl09PT1vfHwoc1tuXSYmYSgiMTAyIixuKSxzW25dPW8sdD0hMCl9dCYmcigpfSxnZXRQ
bHVnaW5Nb2R1bGVGb3JFdmVudDpmdW5jdGlvbihlKXt2YXIgdD1lLmRpc3BhdGNoQ29uZmlnO2lm
KHQucmVnaXN0cmF0aW9uTmFtZSlyZXR1cm4gYy5yZWdpc3RyYXRpb25OYW1lTW9kdWxlc1t0LnJl
Z2lzdHJhdGlvbk5hbWVdfHxudWxsO2lmKHZvaWQgMCE9PXQucGhhc2VkUmVnaXN0cmF0aW9uTmFt
ZXMpe3ZhciBuPXQucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM7Zm9yKHZhciByIGluIG4paWYobi5o
YXNPd25Qcm9wZXJ0eShyKSl7dmFyIG89Yy5yZWdpc3RyYXRpb25OYW1lTW9kdWxlc1tuW3JdXTtp
ZihvKXJldHVybiBvfX1yZXR1cm4gbnVsbH0sX3Jlc2V0RXZlbnRQbHVnaW5zOmZ1bmN0aW9uKCl7
dT1udWxsO2Zvcih2YXIgZSBpbiBzKXMuaGFzT3duUHJvcGVydHkoZSkmJmRlbGV0ZSBzW2VdO2Mu
cGx1Z2lucy5sZW5ndGg9MDt2YXIgdD1jLmV2ZW50TmFtZURpc3BhdGNoQ29uZmlncztmb3IodmFy
IG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiZkZWxldGUgdFtuXTt2YXIgcj1jLnJlZ2lzdHJh
dGlvbk5hbWVNb2R1bGVzO2Zvcih2YXIgbyBpbiByKXIuaGFzT3duUHJvcGVydHkobykmJmRlbGV0
ZSByW29dfX07ZS5leHBvcnRzPWN9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rp
b24gcihlKXtyZXR1cm4idG9wTW91c2VVcCI9PT1lfHwidG9wVG91Y2hFbmQiPT09ZXx8InRvcFRv
dWNoQ2FuY2VsIj09PWV9ZnVuY3Rpb24gbyhlKXtyZXR1cm4idG9wTW91c2VNb3ZlIj09PWV8fCJ0
b3BUb3VjaE1vdmUiPT09ZX1mdW5jdGlvbiBpKGUpe3JldHVybiJ0b3BNb3VzZURvd24iPT09ZXx8
InRvcFRvdWNoU3RhcnQiPT09ZX1mdW5jdGlvbiBhKGUsdCxuLHIpe3ZhciBvPWUudHlwZXx8InVu
a25vd24tZXZlbnQiO2UuY3VycmVudFRhcmdldD15LmdldE5vZGVGcm9tSW5zdGFuY2UociksdD9t
Lmludm9rZUd1YXJkZWRDYWxsYmFja1dpdGhDYXRjaChvLG4sZSk6bS5pbnZva2VHdWFyZGVkQ2Fs
bGJhY2sobyxuLGUpLGUuY3VycmVudFRhcmdldD1udWxsfWZ1bmN0aW9uIHUoZSx0KXt2YXIgbj1l
Ll9kaXNwYXRjaExpc3RlbmVycyxyPWUuX2Rpc3BhdGNoSW5zdGFuY2VzO2lmKEFycmF5LmlzQXJy
YXkobikpZm9yKHZhciBvPTA7bzxuLmxlbmd0aCYmIWUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTtv
KyspYShlLHQsbltvXSxyW29dKTtlbHNlIG4mJmEoZSx0LG4scik7ZS5fZGlzcGF0Y2hMaXN0ZW5l
cnM9bnVsbCxlLl9kaXNwYXRjaEluc3RhbmNlcz1udWxsfWZ1bmN0aW9uIHMoZSl7dmFyIHQ9ZS5f
ZGlzcGF0Y2hMaXN0ZW5lcnMsbj1lLl9kaXNwYXRjaEluc3RhbmNlcztpZihBcnJheS5pc0FycmF5
KHQpKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoJiYhZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpO3Ir
KylpZih0W3JdKGUsbltyXSkpcmV0dXJuIG5bcl19ZWxzZSBpZih0JiZ0KGUsbikpcmV0dXJuIG47
cmV0dXJuIG51bGx9ZnVuY3Rpb24gYyhlKXt2YXIgdD1zKGUpO3JldHVybiBlLl9kaXNwYXRjaElu
c3RhbmNlcz1udWxsLGUuX2Rpc3BhdGNoTGlzdGVuZXJzPW51bGwsdH1mdW5jdGlvbiBsKGUpe3Zh
ciB0PWUuX2Rpc3BhdGNoTGlzdGVuZXJzLG49ZS5fZGlzcGF0Y2hJbnN0YW5jZXM7QXJyYXkuaXNB
cnJheSh0KSYmaCgiMTAzIiksZS5jdXJyZW50VGFyZ2V0PXQ/eS5nZXROb2RlRnJvbUluc3RhbmNl
KG4pOm51bGw7dmFyIHI9dD90KGUpOm51bGw7cmV0dXJuIGUuY3VycmVudFRhcmdldD1udWxsLGUu
X2Rpc3BhdGNoTGlzdGVuZXJzPW51bGwsZS5fZGlzcGF0Y2hJbnN0YW5jZXM9bnVsbCxyfWZ1bmN0
aW9uIHAoZSl7cmV0dXJuISFlLl9kaXNwYXRjaExpc3RlbmVyc312YXIgZixkLGg9bigyKSxtPW4o
MzMpLHY9KG4oMCksbigxKSx7aW5qZWN0Q29tcG9uZW50VHJlZTpmdW5jdGlvbihlKXtmPWV9LGlu
amVjdFRyZWVUcmF2ZXJzYWw6ZnVuY3Rpb24oZSl7ZD1lfX0pLHk9e2lzRW5kaXNoOnIsaXNNb3Zl
aXNoOm8saXNTdGFydGlzaDppLGV4ZWN1dGVEaXJlY3REaXNwYXRjaDpsLGV4ZWN1dGVEaXNwYXRj
aGVzSW5PcmRlcjp1LGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlclN0b3BBdFRydWU6YyxoYXNEaXNw
YXRjaGVzOnAsZ2V0SW5zdGFuY2VGcm9tTm9kZTpmdW5jdGlvbihlKXtyZXR1cm4gZi5nZXRJbnN0
YW5jZUZyb21Ob2RlKGUpfSxnZXROb2RlRnJvbUluc3RhbmNlOmZ1bmN0aW9uKGUpe3JldHVybiBm
LmdldE5vZGVGcm9tSW5zdGFuY2UoZSl9LGlzQW5jZXN0b3I6ZnVuY3Rpb24oZSx0KXtyZXR1cm4g
ZC5pc0FuY2VzdG9yKGUsdCl9LGdldExvd2VzdENvbW1vbkFuY2VzdG9yOmZ1bmN0aW9uKGUsdCl7
cmV0dXJuIGQuZ2V0TG93ZXN0Q29tbW9uQW5jZXN0b3IoZSx0KX0sZ2V0UGFyZW50SW5zdGFuY2U6
ZnVuY3Rpb24oZSl7cmV0dXJuIGQuZ2V0UGFyZW50SW5zdGFuY2UoZSl9LHRyYXZlcnNlVHdvUGhh
c2U6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBkLnRyYXZlcnNlVHdvUGhhc2UoZSx0LG4pfSx0cmF2
ZXJzZUVudGVyTGVhdmU6ZnVuY3Rpb24oZSx0LG4scixvKXtyZXR1cm4gZC50cmF2ZXJzZUVudGVy
TGVhdmUoZSx0LG4scixvKX0saW5qZWN0aW9uOnZ9O2UuZXhwb3J0cz15fSxmdW5jdGlvbihlLHQs
bil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe3RyeXt0KG4pfWNhdGNoKGUpe251bGw9
PT1vJiYobz1lKX19dmFyIG89bnVsbCxpPXtpbnZva2VHdWFyZGVkQ2FsbGJhY2s6cixpbnZva2VH
dWFyZGVkQ2FsbGJhY2tXaXRoQ2F0Y2g6cixyZXRocm93Q2F1Z2h0RXJyb3I6ZnVuY3Rpb24oKXtp
ZihvKXt2YXIgZT1vO3Rocm93IG89bnVsbCxlfX19O2UuZXhwb3J0cz1pfSxmdW5jdGlvbihlLHQs
bil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9ZS50YXJnZXR8fGUuc3JjRWxlbWVu
dHx8d2luZG93O3JldHVybiB0LmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50JiYodD10LmNvcnJlc3Bv
bmRpbmdVc2VFbGVtZW50KSwzPT09dC5ub2RlVHlwZT90LnBhcmVudE5vZGU6dH1lLmV4cG9ydHM9
cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7aWYoIWkuY2Fu
VXNlRE9NfHx0JiYhKCJhZGRFdmVudExpc3RlbmVyImluIGRvY3VtZW50KSlyZXR1cm4hMTt2YXIg
bj0ib24iK2Uscj1uIGluIGRvY3VtZW50O2lmKCFyKXt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJkaXYiKTthLnNldEF0dHJpYnV0ZShuLCJyZXR1cm47Iikscj0iZnVuY3Rpb24iPT09dHlw
ZW9mIGFbbl19cmV0dXJuIXImJm8mJiJ3aGVlbCI9PT1lJiYocj1kb2N1bWVudC5pbXBsZW1lbnRh
dGlvbi5oYXNGZWF0dXJlKCJFdmVudHMud2hlZWwiLCIzLjAiKSkscn12YXIgbyxpPW4oNSk7aS5j
YW5Vc2VET00mJihvPWRvY3VtZW50LmltcGxlbWVudGF0aW9uJiZkb2N1bWVudC5pbXBsZW1lbnRh
dGlvbi5oYXNGZWF0dXJlJiYhMCE9PWRvY3VtZW50LmltcGxlbWVudGF0aW9uLmhhc0ZlYXR1cmUo
IiIsIiIpKSxlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlv
biByKGUpe3ZhciB0PXRoaXMsbj10Lm5hdGl2ZUV2ZW50O2lmKG4uZ2V0TW9kaWZpZXJTdGF0ZSly
ZXR1cm4gbi5nZXRNb2RpZmllclN0YXRlKGUpO3ZhciByPWlbZV07cmV0dXJuISFyJiYhIW5bcl19
ZnVuY3Rpb24gbyhlKXtyZXR1cm4gcn12YXIgaT17QWx0OiJhbHRLZXkiLENvbnRyb2w6ImN0cmxL
ZXkiLE1ldGE6Im1ldGFLZXkiLFNoaWZ0OiJzaGlmdEtleSJ9O2UuZXhwb3J0cz1vfSxmdW5jdGlv
bihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gQXJyYXkuaXNBcnJh
eSh0KSYmKHQ9dFsxXSksdD90Lm5leHRTaWJsaW5nOmUuZmlyc3RDaGlsZH1mdW5jdGlvbiBvKGUs
dCxuKXtsLmluc2VydFRyZWVCZWZvcmUoZSx0LG4pfWZ1bmN0aW9uIGkoZSx0LG4pe0FycmF5Lmlz
QXJyYXkodCk/dShlLHRbMF0sdFsxXSxuKTptKGUsdCxuKX1mdW5jdGlvbiBhKGUsdCl7aWYoQXJy
YXkuaXNBcnJheSh0KSl7dmFyIG49dFsxXTt0PXRbMF0scyhlLHQsbiksZS5yZW1vdmVDaGlsZChu
KX1lLnJlbW92ZUNoaWxkKHQpfWZ1bmN0aW9uIHUoZSx0LG4scil7Zm9yKHZhciBvPXQ7Oyl7dmFy
IGk9by5uZXh0U2libGluZztpZihtKGUsbyxyKSxvPT09bilicmVhaztvPWl9fWZ1bmN0aW9uIHMo
ZSx0LG4pe2Zvcig7Oyl7dmFyIHI9dC5uZXh0U2libGluZztpZihyPT09bilicmVhaztlLnJlbW92
ZUNoaWxkKHIpfX1mdW5jdGlvbiBjKGUsdCxuKXt2YXIgcj1lLnBhcmVudE5vZGUsbz1lLm5leHRT
aWJsaW5nO289PT10P24mJm0ocixkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShuKSxvKTpuPyhoKG8s
bikscyhyLG8sdCkpOnMocixlLHQpfXZhciBsPW4oMTcpLHA9bigxMzMpLGY9KG4oNCksbig3KSxu
KDM5KSksZD1uKDI2KSxoPW4oNjcpLG09ZihmdW5jdGlvbihlLHQsbil7ZS5pbnNlcnRCZWZvcmUo
dCxuKX0pLHY9cC5kYW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0aE1hcmt1cCx5PXtkYW5nZXJvdXNs
eVJlcGxhY2VOb2RlV2l0aE1hcmt1cDp2LHJlcGxhY2VEZWxpbWl0ZWRUZXh0OmMscHJvY2Vzc1Vw
ZGF0ZXM6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHU9dFtu
XTtzd2l0Y2godS50eXBlKXtjYXNlIklOU0VSVF9NQVJLVVAiOm8oZSx1LmNvbnRlbnQscihlLHUu
YWZ0ZXJOb2RlKSk7YnJlYWs7Y2FzZSJNT1ZFX0VYSVNUSU5HIjppKGUsdS5mcm9tTm9kZSxyKGUs
dS5hZnRlck5vZGUpKTticmVhaztjYXNlIlNFVF9NQVJLVVAiOmQoZSx1LmNvbnRlbnQpO2JyZWFr
O2Nhc2UiVEVYVF9DT05URU5UIjpoKGUsdS5jb250ZW50KTticmVhaztjYXNlIlJFTU9WRV9OT0RF
IjphKGUsdS5mcm9tTm9kZSl9fX19O2UuZXhwb3J0cz15fSxmdW5jdGlvbihlLHQsbil7InVzZSBz
dHJpY3QiO3ZhciByPXtodG1sOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixtYXRobWw6
Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiLHN2ZzoiaHR0cDovL3d3dy53My5v
cmcvMjAwMC9zdmcifTtlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2
YXIgcj1mdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIiE9PXR5cGVvZiBNU0FwcCYmTVNBcHAu
ZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24/ZnVuY3Rpb24odCxuLHIsbyl7TVNBcHAuZXhlY1Vuc2Fm
ZUxvY2FsRnVuY3Rpb24oZnVuY3Rpb24oKXtyZXR1cm4gZSh0LG4scixvKX0pfTplfTtlLmV4cG9y
dHM9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe251bGwhPWUu
Y2hlY2tlZExpbmsmJm51bGwhPWUudmFsdWVMaW5rJiZ1KCI4NyIpfWZ1bmN0aW9uIG8oZSl7cihl
KSwobnVsbCE9ZS52YWx1ZXx8bnVsbCE9ZS5vbkNoYW5nZSkmJnUoIjg4Iil9ZnVuY3Rpb24gaShl
KXtyKGUpLChudWxsIT1lLmNoZWNrZWR8fG51bGwhPWUub25DaGFuZ2UpJiZ1KCI4OSIpfWZ1bmN0
aW9uIGEoZSl7aWYoZSl7dmFyIHQ9ZS5nZXROYW1lKCk7aWYodClyZXR1cm4iIENoZWNrIHRoZSBy
ZW5kZXIgbWV0aG9kIG9mIGAiK3QrImAuIn1yZXR1cm4iIn12YXIgdT1uKDIpLHM9bigxNTEpLGM9
big1NiksbD1uKDEzKSxwPWMobC5pc1ZhbGlkRWxlbWVudCksZj0obigwKSxuKDEpLHtidXR0b246
ITAsY2hlY2tib3g6ITAsaW1hZ2U6ITAsaGlkZGVuOiEwLHJhZGlvOiEwLHJlc2V0OiEwLHN1Ym1p
dDohMH0pLGQ9e3ZhbHVlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4hZVt0XXx8ZltlLnR5cGVdfHxl
Lm9uQ2hhbmdlfHxlLnJlYWRPbmx5fHxlLmRpc2FibGVkP251bGw6bmV3IEVycm9yKCJZb3UgcHJv
dmlkZWQgYSBgdmFsdWVgIHByb3AgdG8gYSBmb3JtIGZpZWxkIHdpdGhvdXQgYW4gYG9uQ2hhbmdl
YCBoYW5kbGVyLiBUaGlzIHdpbGwgcmVuZGVyIGEgcmVhZC1vbmx5IGZpZWxkLiBJZiB0aGUgZmll
bGQgc2hvdWxkIGJlIG11dGFibGUgdXNlIGBkZWZhdWx0VmFsdWVgLiBPdGhlcndpc2UsIHNldCBl
aXRoZXIgYG9uQ2hhbmdlYCBvciBgcmVhZE9ubHlgLiIpfSxjaGVja2VkOmZ1bmN0aW9uKGUsdCxu
KXtyZXR1cm4hZVt0XXx8ZS5vbkNoYW5nZXx8ZS5yZWFkT25seXx8ZS5kaXNhYmxlZD9udWxsOm5l
dyBFcnJvcigiWW91IHByb3ZpZGVkIGEgYGNoZWNrZWRgIHByb3AgdG8gYSBmb3JtIGZpZWxkIHdp
dGhvdXQgYW4gYG9uQ2hhbmdlYCBoYW5kbGVyLiBUaGlzIHdpbGwgcmVuZGVyIGEgcmVhZC1vbmx5
IGZpZWxkLiBJZiB0aGUgZmllbGQgc2hvdWxkIGJlIG11dGFibGUgdXNlIGBkZWZhdWx0Q2hlY2tl
ZGAuIE90aGVyd2lzZSwgc2V0IGVpdGhlciBgb25DaGFuZ2VgIG9yIGByZWFkT25seWAuIil9LG9u
Q2hhbmdlOnAuZnVuY30saD17fSxtPXtjaGVja1Byb3BUeXBlczpmdW5jdGlvbihlLHQsbil7Zm9y
KHZhciByIGluIGQpe2lmKGQuaGFzT3duUHJvcGVydHkocikpdmFyIG89ZFtyXSh0LHIsZSwicHJv
cCIsbnVsbCxzKTtpZihvIGluc3RhbmNlb2YgRXJyb3ImJiEoby5tZXNzYWdlIGluIGgpKXtoW28u
bWVzc2FnZV09ITA7YShuKX19fSxnZXRWYWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZUxp
bms/KG8oZSksZS52YWx1ZUxpbmsudmFsdWUpOmUudmFsdWV9LGdldENoZWNrZWQ6ZnVuY3Rpb24o
ZSl7cmV0dXJuIGUuY2hlY2tlZExpbms/KGkoZSksZS5jaGVja2VkTGluay52YWx1ZSk6ZS5jaGVj
a2VkfSxleGVjdXRlT25DaGFuZ2U6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS52YWx1ZUxpbms/KG8o
ZSksZS52YWx1ZUxpbmsucmVxdWVzdENoYW5nZSh0LnRhcmdldC52YWx1ZSkpOmUuY2hlY2tlZExp
bms/KGkoZSksZS5jaGVja2VkTGluay5yZXF1ZXN0Q2hhbmdlKHQudGFyZ2V0LmNoZWNrZWQpKTpl
Lm9uQ2hhbmdlP2Uub25DaGFuZ2UuY2FsbCh2b2lkIDAsdCk6dm9pZCAwfX07ZS5leHBvcnRzPW19
LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigyKSxvPShuKDApLCExKSxpPXty
ZXBsYWNlTm9kZVdpdGhNYXJrdXA6bnVsbCxwcm9jZXNzQ2hpbGRyZW5VcGRhdGVzOm51bGwsaW5q
ZWN0aW9uOntpbmplY3RFbnZpcm9ubWVudDpmdW5jdGlvbihlKXtvJiZyKCIxMDQiKSxpLnJlcGxh
Y2VOb2RlV2l0aE1hcmt1cD1lLnJlcGxhY2VOb2RlV2l0aE1hcmt1cCxpLnByb2Nlc3NDaGlsZHJl
blVwZGF0ZXM9ZS5wcm9jZXNzQ2hpbGRyZW5VcGRhdGVzLG89ITB9fX07ZS5leHBvcnRzPWl9LGZ1
bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3JldHVybiBlPT09dD8w
IT09ZXx8MCE9PXR8fDEvZT09PTEvdDplIT09ZSYmdCE9PXR9ZnVuY3Rpb24gbyhlLHQpe2lmKHIo
ZSx0KSlyZXR1cm4hMDtpZigib2JqZWN0IiE9PXR5cGVvZiBlfHxudWxsPT09ZXx8Im9iamVjdCIh
PT10eXBlb2YgdHx8bnVsbD09PXQpcmV0dXJuITE7dmFyIG49T2JqZWN0LmtleXMoZSksbz1PYmpl
Y3Qua2V5cyh0KTtpZihuLmxlbmd0aCE9PW8ubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgYT0wO2E8
bi5sZW5ndGg7YSsrKWlmKCFpLmNhbGwodCxuW2FdKXx8IXIoZVtuW2FdXSx0W25bYV1dKSlyZXR1
cm4hMTtyZXR1cm4hMH12YXIgaT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2UuZXhw
b3J0cz1vfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt2YXIg
bj1udWxsPT09ZXx8ITE9PT1lLHI9bnVsbD09PXR8fCExPT09dDtpZihufHxyKXJldHVybiBuPT09
cjt2YXIgbz10eXBlb2YgZSxpPXR5cGVvZiB0O3JldHVybiJzdHJpbmciPT09b3x8Im51bWJlciI9
PT1vPyJzdHJpbmciPT09aXx8Im51bWJlciI9PT1pOiJvYmplY3QiPT09aSYmZS50eXBlPT09dC50
eXBlJiZlLmtleT09PXQua2V5fWUuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJp
Y3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9eyI9IjoiPTAiLCI6IjoiPTIifTtyZXR1cm4iJCIrKCIi
K2UpLnJlcGxhY2UoL1s9Ol0vZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pfWZ1bmN0aW9uIG8o
ZSl7dmFyIHQ9Lyg9MHw9MikvZyxuPXsiPTAiOiI9IiwiPTIiOiI6In07cmV0dXJuKCIiKygiLiI9
PT1lWzBdJiYiJCI9PT1lWzFdP2Uuc3Vic3RyaW5nKDIpOmUuc3Vic3RyaW5nKDEpKSkucmVwbGFj
ZSh0LGZ1bmN0aW9uKGUpe3JldHVybiBuW2VdfSl9dmFyIGk9e2VzY2FwZTpyLHVuZXNjYXBlOm99
O2UuZXhwb3J0cz1pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7
cy5lbnF1ZXVlVXBkYXRlKGUpfWZ1bmN0aW9uIG8oZSl7dmFyIHQ9dHlwZW9mIGU7aWYoIm9iamVj
dCIhPT10KXJldHVybiB0O3ZhciBuPWUuY29uc3RydWN0b3ImJmUuY29uc3RydWN0b3IubmFtZXx8
dCxyPU9iamVjdC5rZXlzKGUpO3JldHVybiByLmxlbmd0aD4wJiZyLmxlbmd0aDwyMD9uKyIgKGtl
eXM6ICIrci5qb2luKCIsICIpKyIpIjpufWZ1bmN0aW9uIGkoZSx0KXt2YXIgbj11LmdldChlKTtp
Zighbil7cmV0dXJuIG51bGx9cmV0dXJuIG59dmFyIGE9bigyKSx1PShuKDEwKSxuKDIyKSkscz0o
big3KSxuKDgpKSxjPShuKDApLG4oMSkse2lzTW91bnRlZDpmdW5jdGlvbihlKXt2YXIgdD11Lmdl
dChlKTtyZXR1cm4hIXQmJiEhdC5fcmVuZGVyZWRDb21wb25lbnR9LGVucXVldWVDYWxsYmFjazpm
dW5jdGlvbihlLHQsbil7Yy52YWxpZGF0ZUNhbGxiYWNrKHQsbik7dmFyIG89aShlKTtpZighbyly
ZXR1cm4gbnVsbDtvLl9wZW5kaW5nQ2FsbGJhY2tzP28uX3BlbmRpbmdDYWxsYmFja3MucHVzaCh0
KTpvLl9wZW5kaW5nQ2FsbGJhY2tzPVt0XSxyKG8pfSxlbnF1ZXVlQ2FsbGJhY2tJbnRlcm5hbDpm
dW5jdGlvbihlLHQpe2UuX3BlbmRpbmdDYWxsYmFja3M/ZS5fcGVuZGluZ0NhbGxiYWNrcy5wdXNo
KHQpOmUuX3BlbmRpbmdDYWxsYmFja3M9W3RdLHIoZSl9LGVucXVldWVGb3JjZVVwZGF0ZTpmdW5j
dGlvbihlKXt2YXIgdD1pKGUsImZvcmNlVXBkYXRlIik7dCYmKHQuX3BlbmRpbmdGb3JjZVVwZGF0
ZT0hMCxyKHQpKX0sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbihlLHQsbil7dmFyIG89aShl
LCJyZXBsYWNlU3RhdGUiKTtvJiYoby5fcGVuZGluZ1N0YXRlUXVldWU9W3RdLG8uX3BlbmRpbmdS
ZXBsYWNlU3RhdGU9ITAsdm9pZCAwIT09biYmbnVsbCE9PW4mJihjLnZhbGlkYXRlQ2FsbGJhY2so
biwicmVwbGFjZVN0YXRlIiksby5fcGVuZGluZ0NhbGxiYWNrcz9vLl9wZW5kaW5nQ2FsbGJhY2tz
LnB1c2gobik6by5fcGVuZGluZ0NhbGxiYWNrcz1bbl0pLHIobykpfSxlbnF1ZXVlU2V0U3RhdGU6
ZnVuY3Rpb24oZSx0KXt2YXIgbj1pKGUsInNldFN0YXRlIik7aWYobil7KG4uX3BlbmRpbmdTdGF0
ZVF1ZXVlfHwobi5fcGVuZGluZ1N0YXRlUXVldWU9W10pKS5wdXNoKHQpLHIobil9fSxlbnF1ZXVl
RWxlbWVudEludGVybmFsOmZ1bmN0aW9uKGUsdCxuKXtlLl9wZW5kaW5nRWxlbWVudD10LGUuX2Nv
bnRleHQ9bixyKGUpfSx2YWxpZGF0ZUNhbGxiYWNrOmZ1bmN0aW9uKGUsdCl7ZSYmImZ1bmN0aW9u
IiE9PXR5cGVvZiBlJiZhKCIxMjIiLHQsbyhlKSl9fSk7ZS5leHBvcnRzPWN9LGZ1bmN0aW9uKGUs
dCxuKXsidXNlIHN0cmljdCI7dmFyIHI9KG4oMyksbig2KSksbz0obigxKSxyKTtlLmV4cG9ydHM9
b30sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0LG49ZS5r
ZXlDb2RlO3JldHVybiJjaGFyQ29kZSJpbiBlPzA9PT0odD1lLmNoYXJDb2RlKSYmMTM9PT1uJiYo
dD0xMyk6dD1uLHQ+PTMyfHwxMz09PXQ/dDowfWUuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7
InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYoIU9iamVjdChhLmEpKGUpfHxPYmplY3Qoby5h
KShlKSE9dSlyZXR1cm4hMTt2YXIgdD1PYmplY3QoaS5hKShlKTtpZihudWxsPT09dClyZXR1cm4h
MDt2YXIgbj1wLmNhbGwodCwiY29uc3RydWN0b3IiKSYmdC5jb25zdHJ1Y3RvcjtyZXR1cm4iZnVu
Y3Rpb24iPT10eXBlb2YgbiYmbiBpbnN0YW5jZW9mIG4mJmwuY2FsbChuKT09Zn12YXIgbz1uKDE5
NSksaT1uKDIwMCksYT1uKDIwMiksdT0iW29iamVjdCBPYmplY3RdIixzPUZ1bmN0aW9uLnByb3Rv
dHlwZSxjPU9iamVjdC5wcm90b3R5cGUsbD1zLnRvU3RyaW5nLHA9Yy5oYXNPd25Qcm9wZXJ0eSxm
PWwuY2FsbChPYmplY3QpO3QuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0
aW9uIHIoZSl7InVuZGVmaW5lZCIhPT10eXBlb2YgY29uc29sZSYmImZ1bmN0aW9uIj09PXR5cGVv
ZiBjb25zb2xlLmVycm9yJiZjb25zb2xlLmVycm9yKGUpO3RyeXt0aHJvdyBuZXcgRXJyb3IoZSl9
Y2F0Y2goZSl7fX10LmE9cn0sZnVuY3Rpb24oZSx0LG4pe3ZhciByLG87IWZ1bmN0aW9uKCl7InVz
ZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0
aDt0Kyspe3ZhciByPWFyZ3VtZW50c1t0XTtpZihyKXt2YXIgbz10eXBlb2YgcjtpZigic3RyaW5n
Ij09PW98fCJudW1iZXIiPT09byllLnB1c2gocik7ZWxzZSBpZihBcnJheS5pc0FycmF5KHIpKWUu
cHVzaChuLmFwcGx5KG51bGwscikpO2Vsc2UgaWYoIm9iamVjdCI9PT1vKWZvcih2YXIgYSBpbiBy
KWkuY2FsbChyLGEpJiZyW2FdJiZlLnB1c2goYSl9fXJldHVybiBlLmpvaW4oIiAiKX12YXIgaT17
fS5oYXNPd25Qcm9wZXJ0eTsidW5kZWZpbmVkIiE9PXR5cGVvZiBlJiZlLmV4cG9ydHM/ZS5leHBv
cnRzPW46KHI9W10sdm9pZCAwIT09KG89ZnVuY3Rpb24oKXtyZXR1cm4gbn0uYXBwbHkodCxyKSkm
JihlLmV4cG9ydHM9bykpfSgpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9u
IHIoKXt9ZnVuY3Rpb24gbyhlKXt0cnl7cmV0dXJuIGUudGhlbn1jYXRjaChlKXtyZXR1cm4geT1l
LGd9fWZ1bmN0aW9uIGkoZSx0KXt0cnl7cmV0dXJuIGUodCl9Y2F0Y2goZSl7cmV0dXJuIHk9ZSxn
fX1mdW5jdGlvbiBhKGUsdCxuKXt0cnl7ZSh0LG4pfWNhdGNoKGUpe3JldHVybiB5PWUsZ319ZnVu
Y3Rpb24gdShlKXtpZigib2JqZWN0IiE9PXR5cGVvZiB0aGlzKXRocm93IG5ldyBUeXBlRXJyb3Io
IlByb21pc2VzIG11c3QgYmUgY29uc3RydWN0ZWQgdmlhIG5ldyIpO2lmKCJmdW5jdGlvbiIhPT10
eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQcm9taXNlIGNvbnN0cnVjdG9yJ3MgYXJndW1l
bnQgaXMgbm90IGEgZnVuY3Rpb24iKTt0aGlzLl83NT0wLHRoaXMuXzgzPTAsdGhpcy5fMTg9bnVs
bCx0aGlzLl8zOD1udWxsLGUhPT1yJiZtKGUsdGhpcyl9ZnVuY3Rpb24gcyhlLHQsbil7cmV0dXJu
IG5ldyBlLmNvbnN0cnVjdG9yKGZ1bmN0aW9uKG8saSl7dmFyIGE9bmV3IHUocik7YS50aGVuKG8s
aSksYyhlLG5ldyBoKHQsbixhKSl9KX1mdW5jdGlvbiBjKGUsdCl7Zm9yKDszPT09ZS5fODM7KWU9
ZS5fMTg7aWYodS5fNDcmJnUuXzQ3KGUpLDA9PT1lLl84MylyZXR1cm4gMD09PWUuXzc1PyhlLl83
NT0xLHZvaWQoZS5fMzg9dCkpOjE9PT1lLl83NT8oZS5fNzU9Mix2b2lkKGUuXzM4PVtlLl8zOCx0
XSkpOnZvaWQgZS5fMzgucHVzaCh0KTtsKGUsdCl9ZnVuY3Rpb24gbChlLHQpe3YoZnVuY3Rpb24o
KXt2YXIgbj0xPT09ZS5fODM/dC5vbkZ1bGZpbGxlZDp0Lm9uUmVqZWN0ZWQ7aWYobnVsbD09PW4p
cmV0dXJuIHZvaWQoMT09PWUuXzgzP3AodC5wcm9taXNlLGUuXzE4KTpmKHQucHJvbWlzZSxlLl8x
OCkpO3ZhciByPWkobixlLl8xOCk7cj09PWc/Zih0LnByb21pc2UseSk6cCh0LnByb21pc2Uscil9
KX1mdW5jdGlvbiBwKGUsdCl7aWYodD09PWUpcmV0dXJuIGYoZSxuZXcgVHlwZUVycm9yKCJBIHBy
b21pc2UgY2Fubm90IGJlIHJlc29sdmVkIHdpdGggaXRzZWxmLiIpKTtpZih0JiYoIm9iamVjdCI9
PT10eXBlb2YgdHx8ImZ1bmN0aW9uIj09PXR5cGVvZiB0KSl7dmFyIG49byh0KTtpZihuPT09Zyly
ZXR1cm4gZihlLHkpO2lmKG49PT1lLnRoZW4mJnQgaW5zdGFuY2VvZiB1KXJldHVybiBlLl84Mz0z
LGUuXzE4PXQsdm9pZCBkKGUpO2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgbilyZXR1cm4gdm9pZCBt
KG4uYmluZCh0KSxlKX1lLl84Mz0xLGUuXzE4PXQsZChlKX1mdW5jdGlvbiBmKGUsdCl7ZS5fODM9
MixlLl8xOD10LHUuXzcxJiZ1Ll83MShlLHQpLGQoZSl9ZnVuY3Rpb24gZChlKXtpZigxPT09ZS5f
NzUmJihjKGUsZS5fMzgpLGUuXzM4PW51bGwpLDI9PT1lLl83NSl7Zm9yKHZhciB0PTA7dDxlLl8z
OC5sZW5ndGg7dCsrKWMoZSxlLl8zOFt0XSk7ZS5fMzg9bnVsbH19ZnVuY3Rpb24gaChlLHQsbil7
dGhpcy5vbkZ1bGZpbGxlZD0iZnVuY3Rpb24iPT09dHlwZW9mIGU/ZTpudWxsLHRoaXMub25SZWpl
Y3RlZD0iZnVuY3Rpb24iPT09dHlwZW9mIHQ/dDpudWxsLHRoaXMucHJvbWlzZT1ufWZ1bmN0aW9u
IG0oZSx0KXt2YXIgbj0hMSxyPWEoZSxmdW5jdGlvbihlKXtufHwobj0hMCxwKHQsZSkpfSxmdW5j
dGlvbihlKXtufHwobj0hMCxmKHQsZSkpfSk7bnx8ciE9PWd8fChuPSEwLGYodCx5KSl9dmFyIHY9
bigxMDApLHk9bnVsbCxnPXt9O2UuZXhwb3J0cz11LHUuXzQ3PW51bGwsdS5fNzE9bnVsbCx1Ll80
ND1yLHUucHJvdG90eXBlLnRoZW49ZnVuY3Rpb24oZSx0KXtpZih0aGlzLmNvbnN0cnVjdG9yIT09
dSlyZXR1cm4gcyh0aGlzLGUsdCk7dmFyIG49bmV3IHUocik7cmV0dXJuIGModGhpcyxuZXcgaChl
LHQsbikpLG59fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4p
e3RoaXMucHJvcHM9ZSx0aGlzLmNvbnRleHQ9dCx0aGlzLnJlZnM9Yyx0aGlzLnVwZGF0ZXI9bnx8
c31mdW5jdGlvbiBvKGUsdCxuKXt0aGlzLnByb3BzPWUsdGhpcy5jb250ZXh0PXQsdGhpcy5yZWZz
PWMsdGhpcy51cGRhdGVyPW58fHN9ZnVuY3Rpb24gaSgpe312YXIgYT1uKDE4KSx1PW4oMykscz1u
KDUzKSxjPShuKDU0KSxuKDIzKSk7bigwKSxuKDEwNCk7ci5wcm90b3R5cGUuaXNSZWFjdENvbXBv
bmVudD17fSxyLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihlLHQpeyJvYmplY3QiIT09dHlw
ZW9mIGUmJiJmdW5jdGlvbiIhPT10eXBlb2YgZSYmbnVsbCE9ZSYmYSgiODUiKSx0aGlzLnVwZGF0
ZXIuZW5xdWV1ZVNldFN0YXRlKHRoaXMsZSksdCYmdGhpcy51cGRhdGVyLmVucXVldWVDYWxsYmFj
ayh0aGlzLHQsInNldFN0YXRlIil9LHIucHJvdG90eXBlLmZvcmNlVXBkYXRlPWZ1bmN0aW9uKGUp
e3RoaXMudXBkYXRlci5lbnF1ZXVlRm9yY2VVcGRhdGUodGhpcyksZSYmdGhpcy51cGRhdGVyLmVu
cXVldWVDYWxsYmFjayh0aGlzLGUsImZvcmNlVXBkYXRlIil9O2kucHJvdG90eXBlPXIucHJvdG90
eXBlLG8ucHJvdG90eXBlPW5ldyBpLG8ucHJvdG90eXBlLmNvbnN0cnVjdG9yPW8sdShvLnByb3Rv
dHlwZSxyLnByb3RvdHlwZSksby5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITAsZS5l
eHBvcnRzPXtDb21wb25lbnQ6cixQdXJlQ29tcG9uZW50Om99fSxmdW5jdGlvbihlLHQsbil7InVz
ZSBzdHJpY3QiO3ZhciByPShuKDEpLHtpc01vdW50ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuITF9LGVu
cXVldWVDYWxsYmFjazpmdW5jdGlvbihlLHQpe30sZW5xdWV1ZUZvcmNlVXBkYXRlOmZ1bmN0aW9u
KGUpe30sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbihlLHQpe30sZW5xdWV1ZVNldFN0YXRl
OmZ1bmN0aW9uKGUsdCl7fX0pO2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJp
Y3QiO3ZhciByPSExO2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3Zh
ciByPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKCJy
ZWFjdC5lbGVtZW50Iil8fDYwMTAzO2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBz
dHJpY3QiO3ZhciByPW4oMTEyKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSwhMSl9
fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz0iU0VDUkVUX0RPX05PVF9Q
QVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQifSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJp
Y3QiO3ZhciByPXtoYXNDYWNoZWRDaGlsZE5vZGVzOjF9O2UuZXhwb3J0cz1yfSxmdW5jdGlvbihl
LHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gbnVsbD09dCYmbygiMzAi
KSxudWxsPT1lP3Q6QXJyYXkuaXNBcnJheShlKT9BcnJheS5pc0FycmF5KHQpPyhlLnB1c2guYXBw
bHkoZSx0KSxlKTooZS5wdXNoKHQpLGUpOkFycmF5LmlzQXJyYXkodCk/W2VdLmNvbmNhdCh0KTpb
ZSx0XX12YXIgbz1uKDIpO24oMCk7ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0
cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7QXJyYXkuaXNBcnJheShlKT9lLmZvckVhY2godCxuKTpl
JiZ0LmNhbGwobixlKX1lLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijtm
dW5jdGlvbiByKCl7cmV0dXJuIWkmJm8uY2FuVXNlRE9NJiYoaT0idGV4dENvbnRlbnQiaW4gZG9j
dW1lbnQuZG9jdW1lbnRFbGVtZW50PyJ0ZXh0Q29udGVudCI6ImlubmVyVGV4dCIpLGl9dmFyIG89
big1KSxpPW51bGw7ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVu
Y3Rpb24gcihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNh
bm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfXZhciBvPW4oMiksaT1uKDEyKSxhPShu
KDApLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtyKHRoaXMsZSksdGhpcy5fY2FsbGJhY2tzPW51
bGwsdGhpcy5fY29udGV4dHM9bnVsbCx0aGlzLl9hcmc9dH1yZXR1cm4gZS5wcm90b3R5cGUuZW5x
dWV1ZT1mdW5jdGlvbihlLHQpe3RoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3N8fFtdLHRo
aXMuX2NhbGxiYWNrcy5wdXNoKGUpLHRoaXMuX2NvbnRleHRzPXRoaXMuX2NvbnRleHRzfHxbXSx0
aGlzLl9jb250ZXh0cy5wdXNoKHQpfSxlLnByb3RvdHlwZS5ub3RpZnlBbGw9ZnVuY3Rpb24oKXt2
YXIgZT10aGlzLl9jYWxsYmFja3MsdD10aGlzLl9jb250ZXh0cyxuPXRoaXMuX2FyZztpZihlJiZ0
KXtlLmxlbmd0aCE9PXQubGVuZ3RoJiZvKCIyNCIpLHRoaXMuX2NhbGxiYWNrcz1udWxsLHRoaXMu
X2NvbnRleHRzPW51bGw7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspZVtyXS5jYWxsKHRbcl0s
bik7ZS5sZW5ndGg9MCx0Lmxlbmd0aD0wfX0sZS5wcm90b3R5cGUuY2hlY2twb2ludD1mdW5jdGlv
bigpe3JldHVybiB0aGlzLl9jYWxsYmFja3M/dGhpcy5fY2FsbGJhY2tzLmxlbmd0aDowfSxlLnBy
b3RvdHlwZS5yb2xsYmFjaz1mdW5jdGlvbihlKXt0aGlzLl9jYWxsYmFja3MmJnRoaXMuX2NvbnRl
eHRzJiYodGhpcy5fY2FsbGJhY2tzLmxlbmd0aD1lLHRoaXMuX2NvbnRleHRzLmxlbmd0aD1lKX0s
ZS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9jYWxsYmFja3M9bnVsbCx0aGlzLl9j
b250ZXh0cz1udWxsfSxlLnByb3RvdHlwZS5kZXN0cnVjdG9yPWZ1bmN0aW9uKCl7dGhpcy5yZXNl
dCgpfSxlfSgpKTtlLmV4cG9ydHM9aS5hZGRQb29saW5nVG8oYSl9LGZ1bmN0aW9uKGUsdCxuKXsi
dXNlIHN0cmljdCI7dmFyIHI9e2xvZ1RvcExldmVsUmVuZGVyczohMX07ZS5leHBvcnRzPXJ9LGZ1
bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD1lLnR5cGUsbj1l
Lm5vZGVOYW1lO3JldHVybiBuJiYiaW5wdXQiPT09bi50b0xvd2VyQ2FzZSgpJiYoImNoZWNrYm94
Ij09PXR8fCJyYWRpbyI9PT10KX1mdW5jdGlvbiBvKGUpe3JldHVybiBlLl93cmFwcGVyU3RhdGUu
dmFsdWVUcmFja2VyfWZ1bmN0aW9uIGkoZSx0KXtlLl93cmFwcGVyU3RhdGUudmFsdWVUcmFja2Vy
PXR9ZnVuY3Rpb24gYShlKXtkZWxldGUgZS5fd3JhcHBlclN0YXRlLnZhbHVlVHJhY2tlcn1mdW5j
dGlvbiB1KGUpe3ZhciB0O3JldHVybiBlJiYodD1yKGUpPyIiK2UuY2hlY2tlZDplLnZhbHVlKSx0
fXZhciBzPW4oNCksYz17X2dldFRyYWNrZXJGcm9tTm9kZTpmdW5jdGlvbihlKXtyZXR1cm4gbyhz
LmdldEluc3RhbmNlRnJvbU5vZGUoZSkpfSx0cmFjazpmdW5jdGlvbihlKXtpZighbyhlKSl7dmFy
IHQ9cy5nZXROb2RlRnJvbUluc3RhbmNlKGUpLG49cih0KT8iY2hlY2tlZCI6InZhbHVlIix1PU9i
amVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsbiks
Yz0iIit0W25dO3QuaGFzT3duUHJvcGVydHkobil8fCJmdW5jdGlvbiIhPT10eXBlb2YgdS5nZXR8
fCJmdW5jdGlvbiIhPT10eXBlb2YgdS5zZXR8fChPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHtl
bnVtZXJhYmxlOnUuZW51bWVyYWJsZSxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0
dXJuIHUuZ2V0LmNhbGwodGhpcyl9LHNldDpmdW5jdGlvbihlKXtjPSIiK2UsdS5zZXQuY2FsbCh0
aGlzLGUpfX0pLGkoZSx7Z2V0VmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gY30sc2V0VmFsdWU6ZnVu
Y3Rpb24oZSl7Yz0iIitlfSxzdG9wVHJhY2tpbmc6ZnVuY3Rpb24oKXthKGUpLGRlbGV0ZSB0W25d
fX0pKX19LHVwZGF0ZVZhbHVlSWZDaGFuZ2VkOmZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiExO3Zh
ciB0PW8oZSk7aWYoIXQpcmV0dXJuIGMudHJhY2soZSksITA7dmFyIG49dC5nZXRWYWx1ZSgpLHI9
dShzLmdldE5vZGVGcm9tSW5zdGFuY2UoZSkpO3JldHVybiByIT09biYmKHQuc2V0VmFsdWUociks
ITApfSxzdG9wVHJhY2tpbmc6ZnVuY3Rpb24oZSl7dmFyIHQ9byhlKTt0JiZ0LnN0b3BUcmFja2lu
ZygpfX07ZS5leHBvcnRzPWN9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24g
cihlKXt2YXIgdD1lJiZlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJu
ImlucHV0Ij09PXQ/ISFvW2UudHlwZV06InRleHRhcmVhIj09PXR9dmFyIG89e2NvbG9yOiEwLGRh
dGU6ITAsZGF0ZXRpbWU6ITAsImRhdGV0aW1lLWxvY2FsIjohMCxlbWFpbDohMCxtb250aDohMCxu
dW1iZXI6ITAscGFzc3dvcmQ6ITAscmFuZ2U6ITAsc2VhcmNoOiEwLHRlbDohMCx0ZXh0OiEwLHRp
bWU6ITAsdXJsOiEwLHdlZWs6ITB9O2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBz
dHJpY3QiO3ZhciByPXtjdXJyZW50U2Nyb2xsTGVmdDowLGN1cnJlbnRTY3JvbGxUb3A6MCxyZWZy
ZXNoU2Nyb2xsVmFsdWVzOmZ1bmN0aW9uKGUpe3IuY3VycmVudFNjcm9sbExlZnQ9ZS54LHIuY3Vy
cmVudFNjcm9sbFRvcD1lLnl9fTtlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3Ry
aWN0Ijt2YXIgcj1uKDUpLG89bigyNyksaT1uKDI2KSxhPWZ1bmN0aW9uKGUsdCl7aWYodCl7dmFy
IG49ZS5maXJzdENoaWxkO2lmKG4mJm49PT1lLmxhc3RDaGlsZCYmMz09PW4ubm9kZVR5cGUpcmV0
dXJuIHZvaWQobi5ub2RlVmFsdWU9dCl9ZS50ZXh0Q29udGVudD10fTtyLmNhblVzZURPTSYmKCJ0
ZXh0Q29udGVudCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fChhPWZ1bmN0aW9uKGUsdCl7
aWYoMz09PWUubm9kZVR5cGUpcmV0dXJuIHZvaWQoZS5ub2RlVmFsdWU9dCk7aShlLG8odCkpfSkp
LGUuZXhwb3J0cz1hfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7
dHJ5e2UuZm9jdXMoKX1jYXRjaChlKXt9fWUuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7InVz
ZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gZSt0LmNoYXJBdCgwKS50b1VwcGVyQ2Fz
ZSgpK3Quc3Vic3RyaW5nKDEpfXZhciBvPXthbmltYXRpb25JdGVyYXRpb25Db3VudDohMCxib3Jk
ZXJJbWFnZU91dHNldDohMCxib3JkZXJJbWFnZVNsaWNlOiEwLGJvcmRlckltYWdlV2lkdGg6ITAs
Ym94RmxleDohMCxib3hGbGV4R3JvdXA6ITAsYm94T3JkaW5hbEdyb3VwOiEwLGNvbHVtbkNvdW50
OiEwLGZsZXg6ITAsZmxleEdyb3c6ITAsZmxleFBvc2l0aXZlOiEwLGZsZXhTaHJpbms6ITAsZmxl
eE5lZ2F0aXZlOiEwLGZsZXhPcmRlcjohMCxncmlkUm93OiEwLGdyaWRSb3dFbmQ6ITAsZ3JpZFJv
d1NwYW46ITAsZ3JpZFJvd1N0YXJ0OiEwLGdyaWRDb2x1bW46ITAsZ3JpZENvbHVtbkVuZDohMCxn
cmlkQ29sdW1uU3BhbjohMCxncmlkQ29sdW1uU3RhcnQ6ITAsZm9udFdlaWdodDohMCxsaW5lQ2xh
bXA6ITAsbGluZUhlaWdodDohMCxvcGFjaXR5OiEwLG9yZGVyOiEwLG9ycGhhbnM6ITAsdGFiU2l6
ZTohMCx3aWRvd3M6ITAsekluZGV4OiEwLHpvb206ITAsZmlsbE9wYWNpdHk6ITAsZmxvb2RPcGFj
aXR5OiEwLHN0b3BPcGFjaXR5OiEwLHN0cm9rZURhc2hhcnJheTohMCxzdHJva2VEYXNob2Zmc2V0
OiEwLHN0cm9rZU1pdGVybGltaXQ6ITAsc3Ryb2tlT3BhY2l0eTohMCxzdHJva2VXaWR0aDohMH0s
aT1bIldlYmtpdCIsIm1zIiwiTW96IiwiTyJdO09iamVjdC5rZXlzKG8pLmZvckVhY2goZnVuY3Rp
b24oZSl7aS5mb3JFYWNoKGZ1bmN0aW9uKHQpe29bcih0LGUpXT1vW2VdfSl9KTt2YXIgYT17YmFj
a2dyb3VuZDp7YmFja2dyb3VuZEF0dGFjaG1lbnQ6ITAsYmFja2dyb3VuZENvbG9yOiEwLGJhY2tn
cm91bmRJbWFnZTohMCxiYWNrZ3JvdW5kUG9zaXRpb25YOiEwLGJhY2tncm91bmRQb3NpdGlvblk6
ITAsYmFja2dyb3VuZFJlcGVhdDohMH0sYmFja2dyb3VuZFBvc2l0aW9uOntiYWNrZ3JvdW5kUG9z
aXRpb25YOiEwLGJhY2tncm91bmRQb3NpdGlvblk6ITB9LGJvcmRlcjp7Ym9yZGVyV2lkdGg6ITAs
Ym9yZGVyU3R5bGU6ITAsYm9yZGVyQ29sb3I6ITB9LGJvcmRlckJvdHRvbTp7Ym9yZGVyQm90dG9t
V2lkdGg6ITAsYm9yZGVyQm90dG9tU3R5bGU6ITAsYm9yZGVyQm90dG9tQ29sb3I6ITB9LGJvcmRl
ckxlZnQ6e2JvcmRlckxlZnRXaWR0aDohMCxib3JkZXJMZWZ0U3R5bGU6ITAsYm9yZGVyTGVmdENv
bG9yOiEwfSxib3JkZXJSaWdodDp7Ym9yZGVyUmlnaHRXaWR0aDohMCxib3JkZXJSaWdodFN0eWxl
OiEwLGJvcmRlclJpZ2h0Q29sb3I6ITB9LGJvcmRlclRvcDp7Ym9yZGVyVG9wV2lkdGg6ITAsYm9y
ZGVyVG9wU3R5bGU6ITAsYm9yZGVyVG9wQ29sb3I6ITB9LGZvbnQ6e2ZvbnRTdHlsZTohMCxmb250
VmFyaWFudDohMCxmb250V2VpZ2h0OiEwLGZvbnRTaXplOiEwLGxpbmVIZWlnaHQ6ITAsZm9udEZh
bWlseTohMH0sb3V0bGluZTp7b3V0bGluZVdpZHRoOiEwLG91dGxpbmVTdHlsZTohMCxvdXRsaW5l
Q29sb3I6ITB9fSx1PXtpc1VuaXRsZXNzTnVtYmVyOm8sc2hvcnRoYW5kUHJvcGVydHlFeHBhbnNp
b25zOmF9O2UuZXhwb3J0cz11fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9u
IHIoZSl7cmV0dXJuISFjLmhhc093blByb3BlcnR5KGUpfHwhcy5oYXNPd25Qcm9wZXJ0eShlKSYm
KHUudGVzdChlKT8oY1tlXT0hMCwhMCk6KHNbZV09ITAsITEpKX1mdW5jdGlvbiBvKGUsdCl7cmV0
dXJuIG51bGw9PXR8fGUuaGFzQm9vbGVhblZhbHVlJiYhdHx8ZS5oYXNOdW1lcmljVmFsdWUmJmlz
TmFOKHQpfHxlLmhhc1Bvc2l0aXZlTnVtZXJpY1ZhbHVlJiZ0PDF8fGUuaGFzT3ZlcmxvYWRlZEJv
b2xlYW5WYWx1ZSYmITE9PT10fXZhciBpPW4oMTUpLGE9KG4oNCksbig3KSxuKDE0NykpLHU9KG4o
MSksbmV3IFJlZ0V4cCgiXlsiK2kuQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUisiXVsiK2kuQVRU
UklCVVRFX05BTUVfQ0hBUisiXSokIikpLHM9e30sYz17fSxsPXtjcmVhdGVNYXJrdXBGb3JJRDpm
dW5jdGlvbihlKXtyZXR1cm4gaS5JRF9BVFRSSUJVVEVfTkFNRSsiPSIrYShlKX0sc2V0QXR0cmli
dXRlRm9ySUQ6ZnVuY3Rpb24oZSx0KXtlLnNldEF0dHJpYnV0ZShpLklEX0FUVFJJQlVURV9OQU1F
LHQpfSxjcmVhdGVNYXJrdXBGb3JSb290OmZ1bmN0aW9uKCl7cmV0dXJuIGkuUk9PVF9BVFRSSUJV
VEVfTkFNRSsnPSIiJ30sc2V0QXR0cmlidXRlRm9yUm9vdDpmdW5jdGlvbihlKXtlLnNldEF0dHJp
YnV0ZShpLlJPT1RfQVRUUklCVVRFX05BTUUsIiIpfSxjcmVhdGVNYXJrdXBGb3JQcm9wZXJ0eTpm
dW5jdGlvbihlLHQpe3ZhciBuPWkucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShlKT9pLnByb3Bl
cnRpZXNbZV06bnVsbDtpZihuKXtpZihvKG4sdCkpcmV0dXJuIiI7dmFyIHI9bi5hdHRyaWJ1dGVO
YW1lO3JldHVybiBuLmhhc0Jvb2xlYW5WYWx1ZXx8bi5oYXNPdmVybG9hZGVkQm9vbGVhblZhbHVl
JiYhMD09PXQ/cisnPSIiJzpyKyI9IithKHQpfXJldHVybiBpLmlzQ3VzdG9tQXR0cmlidXRlKGUp
P251bGw9PXQ/IiI6ZSsiPSIrYSh0KTpudWxsfSxjcmVhdGVNYXJrdXBGb3JDdXN0b21BdHRyaWJ1
dGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcihlKSYmbnVsbCE9dD9lKyI9IithKHQpOiIifSxzZXRW
YWx1ZUZvclByb3BlcnR5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1pLnByb3BlcnRpZXMuaGFzT3du
UHJvcGVydHkodCk/aS5wcm9wZXJ0aWVzW3RdOm51bGw7aWYocil7dmFyIGE9ci5tdXRhdGlvbk1l
dGhvZDtpZihhKWEoZSxuKTtlbHNle2lmKG8ocixuKSlyZXR1cm4gdm9pZCB0aGlzLmRlbGV0ZVZh
bHVlRm9yUHJvcGVydHkoZSx0KTtpZihyLm11c3RVc2VQcm9wZXJ0eSllW3IucHJvcGVydHlOYW1l
XT1uO2Vsc2V7dmFyIHU9ci5hdHRyaWJ1dGVOYW1lLHM9ci5hdHRyaWJ1dGVOYW1lc3BhY2U7cz9l
LnNldEF0dHJpYnV0ZU5TKHMsdSwiIituKTpyLmhhc0Jvb2xlYW5WYWx1ZXx8ci5oYXNPdmVybG9h
ZGVkQm9vbGVhblZhbHVlJiYhMD09PW4/ZS5zZXRBdHRyaWJ1dGUodSwiIik6ZS5zZXRBdHRyaWJ1
dGUodSwiIituKX19fWVsc2UgaWYoaS5pc0N1c3RvbUF0dHJpYnV0ZSh0KSlyZXR1cm4gdm9pZCBs
LnNldFZhbHVlRm9yQXR0cmlidXRlKGUsdCxuKX0sc2V0VmFsdWVGb3JBdHRyaWJ1dGU6ZnVuY3Rp
b24oZSx0LG4pe2lmKHIodCkpe251bGw9PW4/ZS5yZW1vdmVBdHRyaWJ1dGUodCk6ZS5zZXRBdHRy
aWJ1dGUodCwiIituKX19LGRlbGV0ZVZhbHVlRm9yQXR0cmlidXRlOmZ1bmN0aW9uKGUsdCl7ZS5y
ZW1vdmVBdHRyaWJ1dGUodCl9LGRlbGV0ZVZhbHVlRm9yUHJvcGVydHk6ZnVuY3Rpb24oZSx0KXt2
YXIgbj1pLnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkodCk/aS5wcm9wZXJ0aWVzW3RdOm51bGw7
aWYobil7dmFyIHI9bi5tdXRhdGlvbk1ldGhvZDtpZihyKXIoZSx2b2lkIDApO2Vsc2UgaWYobi5t
dXN0VXNlUHJvcGVydHkpe3ZhciBvPW4ucHJvcGVydHlOYW1lO24uaGFzQm9vbGVhblZhbHVlP2Vb
b109ITE6ZVtvXT0iIn1lbHNlIGUucmVtb3ZlQXR0cmlidXRlKG4uYXR0cmlidXRlTmFtZSl9ZWxz
ZSBpLmlzQ3VzdG9tQXR0cmlidXRlKHQpJiZlLnJlbW92ZUF0dHJpYnV0ZSh0KX19O2UuZXhwb3J0
cz1sfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXtpZih0aGlzLl9y
b290Tm9kZUlEJiZ0aGlzLl93cmFwcGVyU3RhdGUucGVuZGluZ1VwZGF0ZSl7dGhpcy5fd3JhcHBl
clN0YXRlLnBlbmRpbmdVcGRhdGU9ITE7dmFyIGU9dGhpcy5fY3VycmVudEVsZW1lbnQucHJvcHMs
dD11LmdldFZhbHVlKGUpO251bGwhPXQmJm8odGhpcyxCb29sZWFuKGUubXVsdGlwbGUpLHQpfX1m
dW5jdGlvbiBvKGUsdCxuKXt2YXIgcixvLGk9cy5nZXROb2RlRnJvbUluc3RhbmNlKGUpLm9wdGlv
bnM7aWYodCl7Zm9yKHI9e30sbz0wO288bi5sZW5ndGg7bysrKXJbIiIrbltvXV09ITA7Zm9yKG89
MDtvPGkubGVuZ3RoO28rKyl7dmFyIGE9ci5oYXNPd25Qcm9wZXJ0eShpW29dLnZhbHVlKTtpW29d
LnNlbGVjdGVkIT09YSYmKGlbb10uc2VsZWN0ZWQ9YSl9fWVsc2V7Zm9yKHI9IiIrbixvPTA7bzxp
Lmxlbmd0aDtvKyspaWYoaVtvXS52YWx1ZT09PXIpcmV0dXJuIHZvaWQoaVtvXS5zZWxlY3RlZD0h
MCk7aS5sZW5ndGgmJihpWzBdLnNlbGVjdGVkPSEwKX19ZnVuY3Rpb24gaShlKXt2YXIgdD10aGlz
Ll9jdXJyZW50RWxlbWVudC5wcm9wcyxuPXUuZXhlY3V0ZU9uQ2hhbmdlKHQsZSk7cmV0dXJuIHRo
aXMuX3Jvb3ROb2RlSUQmJih0aGlzLl93cmFwcGVyU3RhdGUucGVuZGluZ1VwZGF0ZT0hMCksYy5h
c2FwKHIsdGhpcyksbn12YXIgYT1uKDMpLHU9big0MCkscz1uKDQpLGM9big4KSxsPShuKDEpLCEx
KSxwPXtnZXRIb3N0UHJvcHM6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYSh7fSx0LHtvbkNoYW5nZTpl
Ll93cmFwcGVyU3RhdGUub25DaGFuZ2UsdmFsdWU6dm9pZCAwfSl9LG1vdW50V3JhcHBlcjpmdW5j
dGlvbihlLHQpe3ZhciBuPXUuZ2V0VmFsdWUodCk7ZS5fd3JhcHBlclN0YXRlPXtwZW5kaW5nVXBk
YXRlOiExLGluaXRpYWxWYWx1ZTpudWxsIT1uP246dC5kZWZhdWx0VmFsdWUsbGlzdGVuZXJzOm51
bGwsb25DaGFuZ2U6aS5iaW5kKGUpLHdhc011bHRpcGxlOkJvb2xlYW4odC5tdWx0aXBsZSl9LHZv
aWQgMD09PXQudmFsdWV8fHZvaWQgMD09PXQuZGVmYXVsdFZhbHVlfHxsfHwobD0hMCl9LGdldFNl
bGVjdFZhbHVlQ29udGV4dDpmdW5jdGlvbihlKXtyZXR1cm4gZS5fd3JhcHBlclN0YXRlLmluaXRp
YWxWYWx1ZX0scG9zdFVwZGF0ZVdyYXBwZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fY3VycmVudEVs
ZW1lbnQucHJvcHM7ZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZT12b2lkIDA7dmFyIG49ZS5f
d3JhcHBlclN0YXRlLndhc011bHRpcGxlO2UuX3dyYXBwZXJTdGF0ZS53YXNNdWx0aXBsZT1Cb29s
ZWFuKHQubXVsdGlwbGUpO3ZhciByPXUuZ2V0VmFsdWUodCk7bnVsbCE9cj8oZS5fd3JhcHBlclN0
YXRlLnBlbmRpbmdVcGRhdGU9ITEsbyhlLEJvb2xlYW4odC5tdWx0aXBsZSkscikpOm4hPT1Cb29s
ZWFuKHQubXVsdGlwbGUpJiYobnVsbCE9dC5kZWZhdWx0VmFsdWU/byhlLEJvb2xlYW4odC5tdWx0
aXBsZSksdC5kZWZhdWx0VmFsdWUpOm8oZSxCb29sZWFuKHQubXVsdGlwbGUpLHQubXVsdGlwbGU/
W106IiIpKX19O2UuZXhwb3J0cz1wfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oKXt0aHJvdyBu
ZXcgRXJyb3IoInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiByKCl7
dGhyb3cgbmV3IEVycm9yKCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5j
dGlvbiBvKGUpe2lmKGw9PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KGUsMCk7aWYoKGw9
PT1ufHwhbCkmJnNldFRpbWVvdXQpcmV0dXJuIGw9c2V0VGltZW91dCxzZXRUaW1lb3V0KGUsMCk7
dHJ5e3JldHVybiBsKGUsMCl9Y2F0Y2godCl7dHJ5e3JldHVybiBsLmNhbGwobnVsbCxlLDApfWNh
dGNoKHQpe3JldHVybiBsLmNhbGwodGhpcyxlLDApfX19ZnVuY3Rpb24gaShlKXtpZihwPT09Y2xl
YXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQoZSk7aWYoKHA9PT1yfHwhcCkmJmNsZWFyVGlt
ZW91dClyZXR1cm4gcD1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KGUpO3RyeXtyZXR1cm4gcChl
KX1jYXRjaCh0KXt0cnl7cmV0dXJuIHAuY2FsbChudWxsLGUpfWNhdGNoKHQpe3JldHVybiBwLmNh
bGwodGhpcyxlKX19fWZ1bmN0aW9uIGEoKXttJiZkJiYobT0hMSxkLmxlbmd0aD9oPWQuY29uY2F0
KGgpOnY9LTEsaC5sZW5ndGgmJnUoKSl9ZnVuY3Rpb24gdSgpe2lmKCFtKXt2YXIgZT1vKGEpO209
ITA7Zm9yKHZhciB0PWgubGVuZ3RoO3Q7KXtmb3IoZD1oLGg9W107Kyt2PHQ7KWQmJmRbdl0ucnVu
KCk7dj0tMSx0PWgubGVuZ3RofWQ9bnVsbCxtPSExLGkoZSl9fWZ1bmN0aW9uIHMoZSx0KXt0aGlz
LmZ1bj1lLHRoaXMuYXJyYXk9dH1mdW5jdGlvbiBjKCl7fXZhciBsLHAsZj1lLmV4cG9ydHM9e307
IWZ1bmN0aW9uKCl7dHJ5e2w9ImZ1bmN0aW9uIj09PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVv
dXQ6bn1jYXRjaChlKXtsPW59dHJ5e3A9ImZ1bmN0aW9uIj09PXR5cGVvZiBjbGVhclRpbWVvdXQ/
Y2xlYXJUaW1lb3V0OnJ9Y2F0Y2goZSl7cD1yfX0oKTt2YXIgZCxoPVtdLG09ITEsdj0tMTtmLm5l
eHRUaWNrPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lm
KGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXRb
bi0xXT1hcmd1bWVudHNbbl07aC5wdXNoKG5ldyBzKGUsdCkpLDEhPT1oLmxlbmd0aHx8bXx8byh1
KX0scy5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dGhpcy5mdW4uYXBwbHkobnVsbCx0aGlzLmFy
cmF5KX0sZi50aXRsZT0iYnJvd3NlciIsZi5icm93c2VyPSEwLGYuZW52PXt9LGYuYXJndj1bXSxm
LnZlcnNpb249IiIsZi52ZXJzaW9ucz17fSxmLm9uPWMsZi5hZGRMaXN0ZW5lcj1jLGYub25jZT1j
LGYub2ZmPWMsZi5yZW1vdmVMaXN0ZW5lcj1jLGYucmVtb3ZlQWxsTGlzdGVuZXJzPWMsZi5lbWl0
PWMsZi5wcmVwZW5kTGlzdGVuZXI9YyxmLnByZXBlbmRPbmNlTGlzdGVuZXI9YyxmLmxpc3RlbmVy
cz1mdW5jdGlvbihlKXtyZXR1cm5bXX0sZi5iaW5kaW5nPWZ1bmN0aW9uKGUpe3Rocm93IG5ldyBF
cnJvcigicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQiKX0sZi5jd2Q9ZnVuY3Rpb24o
KXtyZXR1cm4iLyJ9LGYuY2hkaXI9ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNz
LmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQiKX0sZi51bWFzaz1mdW5jdGlvbigpe3JldHVybiAwfX0s
ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKGUpe3ZhciB0PWUu
Z2V0TmFtZSgpO2lmKHQpcmV0dXJuIiBDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgIit0KyJg
LiJ9cmV0dXJuIiJ9ZnVuY3Rpb24gbyhlKXtyZXR1cm4iZnVuY3Rpb24iPT09dHlwZW9mIGUmJiJ1
bmRlZmluZWQiIT09dHlwZW9mIGUucHJvdG90eXBlJiYiZnVuY3Rpb24iPT09dHlwZW9mIGUucHJv
dG90eXBlLm1vdW50Q29tcG9uZW50JiYiZnVuY3Rpb24iPT09dHlwZW9mIGUucHJvdG90eXBlLnJl
Y2VpdmVDb21wb25lbnR9ZnVuY3Rpb24gaShlLHQpe3ZhciBuO2lmKG51bGw9PT1lfHwhMT09PWUp
bj1jLmNyZWF0ZShpKTtlbHNlIGlmKCJvYmplY3QiPT09dHlwZW9mIGUpe3ZhciB1PWUscz11LnR5
cGU7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiBzJiYic3RyaW5nIiE9PXR5cGVvZiBzKXt2YXIgZj0i
IjtmKz1yKHUuX293bmVyKSxhKCIxMzAiLG51bGw9PXM/czp0eXBlb2YgcyxmKX0ic3RyaW5nIj09
PXR5cGVvZiB1LnR5cGU/bj1sLmNyZWF0ZUludGVybmFsQ29tcG9uZW50KHUpOm8odS50eXBlKT8o
bj1uZXcgdS50eXBlKHUpLG4uZ2V0SG9zdE5vZGV8fChuLmdldEhvc3ROb2RlPW4uZ2V0TmF0aXZl
Tm9kZSkpOm49bmV3IHAodSl9ZWxzZSJzdHJpbmciPT09dHlwZW9mIGV8fCJudW1iZXIiPT09dHlw
ZW9mIGU/bj1sLmNyZWF0ZUluc3RhbmNlRm9yVGV4dChlKTphKCIxMzEiLHR5cGVvZiBlKTtyZXR1
cm4gbi5fbW91bnRJbmRleD0wLG4uX21vdW50SW1hZ2U9bnVsbCxufXZhciBhPW4oMiksdT1uKDMp
LHM9bigxNTYpLGM9big3NSksbD1uKDc2KSxwPShuKDE1NyksbigwKSxuKDEpLGZ1bmN0aW9uKGUp
e3RoaXMuY29uc3RydWN0KGUpfSk7dShwLnByb3RvdHlwZSxzLHtfaW5zdGFudGlhdGVSZWFjdENv
bXBvbmVudDppfSksZS5leHBvcnRzPWl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFy
IHI9bigyKSxvPW4oMTMpLGk9KG4oMCkse0hPU1Q6MCxDT01QT1NJVEU6MSxFTVBUWToyLGdldFR5
cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PT1lfHwhMT09PWU/aS5FTVBUWTpvLmlzVmFsaWRF
bGVtZW50KGUpPyJmdW5jdGlvbiI9PT10eXBlb2YgZS50eXBlP2kuQ09NUE9TSVRFOmkuSE9TVDp2
b2lkIHIoIjI2IixlKX19KTtlLmV4cG9ydHM9aX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0
Ijt2YXIgcixvPXtpbmplY3RFbXB0eUNvbXBvbmVudEZhY3Rvcnk6ZnVuY3Rpb24oZSl7cj1lfX0s
aT17Y3JlYXRlOmZ1bmN0aW9uKGUpe3JldHVybiByKGUpfX07aS5pbmplY3Rpb249byxlLmV4cG9y
dHM9aX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiB1
fHxhKCIxMTEiLGUudHlwZSksbmV3IHUoZSl9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gbmV3IHMoZSl9
ZnVuY3Rpb24gaShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHN9dmFyIGE9bigyKSx1PShuKDApLG51
bGwpLHM9bnVsbCxjPXtpbmplY3RHZW5lcmljQ29tcG9uZW50Q2xhc3M6ZnVuY3Rpb24oZSl7dT1l
fSxpbmplY3RUZXh0Q29tcG9uZW50Q2xhc3M6ZnVuY3Rpb24oZSl7cz1lfX0sbD17Y3JlYXRlSW50
ZXJuYWxDb21wb25lbnQ6cixjcmVhdGVJbnN0YW5jZUZvclRleHQ6byxpc1RleHRDb21wb25lbnQ6
aSxpbmplY3Rpb246Y307ZS5leHBvcnRzPWx9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7
ZnVuY3Rpb24gcihlLHQpe3JldHVybiBlJiYib2JqZWN0Ij09PXR5cGVvZiBlJiZudWxsIT1lLmtl
eT9jLmVzY2FwZShlLmtleSk6dC50b1N0cmluZygzNil9ZnVuY3Rpb24gbyhlLHQsbixpKXt2YXIg
Zj10eXBlb2YgZTtpZigidW5kZWZpbmVkIiE9PWYmJiJib29sZWFuIiE9PWZ8fChlPW51bGwpLG51
bGw9PT1lfHwic3RyaW5nIj09PWZ8fCJudW1iZXIiPT09Znx8Im9iamVjdCI9PT1mJiZlLiQkdHlw
ZW9mPT09dSlyZXR1cm4gbihpLGUsIiI9PT10P2wrcihlLDApOnQpLDE7dmFyIGQsaCxtPTAsdj0i
Ij09PXQ/bDp0K3A7aWYoQXJyYXkuaXNBcnJheShlKSlmb3IodmFyIHk9MDt5PGUubGVuZ3RoO3kr
KylkPWVbeV0saD12K3IoZCx5KSxtKz1vKGQsaCxuLGkpO2Vsc2V7dmFyIGc9cyhlKTtpZihnKXt2
YXIgYixfPWcuY2FsbChlKTtpZihnIT09ZS5lbnRyaWVzKWZvcih2YXIgQz0wOyEoYj1fLm5leHQo
KSkuZG9uZTspZD1iLnZhbHVlLGg9dityKGQsQysrKSxtKz1vKGQsaCxuLGkpO2Vsc2UgZm9yKDsh
KGI9Xy5uZXh0KCkpLmRvbmU7KXt2YXIgdz1iLnZhbHVlO3cmJihkPXdbMV0saD12K2MuZXNjYXBl
KHdbMF0pK3ArcihkLDApLG0rPW8oZCxoLG4saSkpfX1lbHNlIGlmKCJvYmplY3QiPT09Zil7dmFy
IEU9IiIseD1TdHJpbmcoZSk7YSgiMzEiLCJbb2JqZWN0IE9iamVjdF0iPT09eD8ib2JqZWN0IHdp
dGgga2V5cyB7IitPYmplY3Qua2V5cyhlKS5qb2luKCIsICIpKyJ9Ijp4LEUpfX1yZXR1cm4gbX1m
dW5jdGlvbiBpKGUsdCxuKXtyZXR1cm4gbnVsbD09ZT8wOm8oZSwiIix0LG4pfXZhciBhPW4oMiks
dT0obigxMCksbigxNTgpKSxzPW4oMTU5KSxjPShuKDApLG4oNDQpKSxsPShuKDEpLCIuIikscD0i
OiI7ZS5leHBvcnRzPWl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihl
KXt2YXIgdD1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcsbj1PYmplY3QucHJvdG90eXBlLmhh
c093blByb3BlcnR5LHI9UmVnRXhwKCJeIit0LmNhbGwobikucmVwbGFjZSgvW1xcXiQuKis/KClb
XF17fXxdL2csIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89
XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIik7dHJ5e3ZhciBvPXQuY2FsbChl
KTtyZXR1cm4gci50ZXN0KG8pfWNhdGNoKGUpe3JldHVybiExfX1mdW5jdGlvbiBvKGUpe3ZhciB0
PWMoZSk7aWYodCl7dmFyIG49dC5jaGlsZElEcztsKGUpLG4uZm9yRWFjaChvKX19ZnVuY3Rpb24g
aShlLHQsbil7cmV0dXJuIlxuICAgIGluICIrKGV8fCJVbmtub3duIikrKHQ/IiAoYXQgIit0LmZp
bGVOYW1lLnJlcGxhY2UoL14uKltcXFwvXS8sIiIpKyI6Iit0LmxpbmVOdW1iZXIrIikiOm4/IiAo
Y3JlYXRlZCBieSAiK24rIikiOiIiKX1mdW5jdGlvbiBhKGUpe3JldHVybiBudWxsPT1lPyIjZW1w
dHkiOiJzdHJpbmciPT09dHlwZW9mIGV8fCJudW1iZXIiPT09dHlwZW9mIGU/IiN0ZXh0Ijoic3Ry
aW5nIj09PXR5cGVvZiBlLnR5cGU/ZS50eXBlOmUudHlwZS5kaXNwbGF5TmFtZXx8ZS50eXBlLm5h
bWV8fCJVbmtub3duIn1mdW5jdGlvbiB1KGUpe3ZhciB0LG49VC5nZXREaXNwbGF5TmFtZShlKSxy
PVQuZ2V0RWxlbWVudChlKSxvPVQuZ2V0T3duZXJJRChlKTtyZXR1cm4gbyYmKHQ9VC5nZXREaXNw
bGF5TmFtZShvKSksaShuLHImJnIuX3NvdXJjZSx0KX12YXIgcyxjLGwscCxmLGQsaCxtPW4oMTgp
LHY9bigxMCkseT0obigwKSxuKDEpLCJmdW5jdGlvbiI9PT10eXBlb2YgQXJyYXkuZnJvbSYmImZ1
bmN0aW9uIj09PXR5cGVvZiBNYXAmJnIoTWFwKSYmbnVsbCE9TWFwLnByb3RvdHlwZSYmImZ1bmN0
aW9uIj09PXR5cGVvZiBNYXAucHJvdG90eXBlLmtleXMmJnIoTWFwLnByb3RvdHlwZS5rZXlzKSYm
ImZ1bmN0aW9uIj09PXR5cGVvZiBTZXQmJnIoU2V0KSYmbnVsbCE9U2V0LnByb3RvdHlwZSYmImZ1
bmN0aW9uIj09PXR5cGVvZiBTZXQucHJvdG90eXBlLmtleXMmJnIoU2V0LnByb3RvdHlwZS5rZXlz
KSk7aWYoeSl7dmFyIGc9bmV3IE1hcCxiPW5ldyBTZXQ7cz1mdW5jdGlvbihlLHQpe2cuc2V0KGUs
dCl9LGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGcuZ2V0KGUpfSxsPWZ1bmN0aW9uKGUpe2cuZGVsZXRl
KGUpfSxwPWZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LmZyb20oZy5rZXlzKCkpfSxmPWZ1bmN0aW9u
KGUpe2IuYWRkKGUpfSxkPWZ1bmN0aW9uKGUpe2IuZGVsZXRlKGUpfSxoPWZ1bmN0aW9uKCl7cmV0
dXJuIEFycmF5LmZyb20oYi5rZXlzKCkpfX1lbHNle3ZhciBfPXt9LEM9e30sdz1mdW5jdGlvbihl
KXtyZXR1cm4iLiIrZX0sRT1mdW5jdGlvbihlKXtyZXR1cm4gcGFyc2VJbnQoZS5zdWJzdHIoMSks
MTApfTtzPWZ1bmN0aW9uKGUsdCl7dmFyIG49dyhlKTtfW25dPXR9LGM9ZnVuY3Rpb24oZSl7dmFy
IHQ9dyhlKTtyZXR1cm4gX1t0XX0sbD1mdW5jdGlvbihlKXt2YXIgdD13KGUpO2RlbGV0ZSBfW3Rd
fSxwPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKF8pLm1hcChFKX0sZj1mdW5jdGlvbihl
KXt2YXIgdD13KGUpO0NbdF09ITB9LGQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dyhlKTtkZWxldGUgQ1t0
XX0saD1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyhDKS5tYXAoRSl9fXZhciB4PVtdLFQ9
e29uU2V0Q2hpbGRyZW46ZnVuY3Rpb24oZSx0KXt2YXIgbj1jKGUpO258fG0oIjE0NCIpLG4uY2hp
bGRJRHM9dDtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG89dFtyXSxpPWMobyk7aXx8
bSgiMTQwIiksbnVsbD09aS5jaGlsZElEcyYmIm9iamVjdCI9PT10eXBlb2YgaS5lbGVtZW50JiZu
dWxsIT1pLmVsZW1lbnQmJm0oIjE0MSIpLGkuaXNNb3VudGVkfHxtKCI3MSIpLG51bGw9PWkucGFy
ZW50SUQmJihpLnBhcmVudElEPWUpLGkucGFyZW50SUQhPT1lJiZtKCIxNDIiLG8saS5wYXJlbnRJ
RCxlKX19LG9uQmVmb3JlTW91bnRDb21wb25lbnQ6ZnVuY3Rpb24oZSx0LG4pe3MoZSx7ZWxlbWVu
dDp0LHBhcmVudElEOm4sdGV4dDpudWxsLGNoaWxkSURzOltdLGlzTW91bnRlZDohMSx1cGRhdGVD
b3VudDowfSl9LG9uQmVmb3JlVXBkYXRlQ29tcG9uZW50OmZ1bmN0aW9uKGUsdCl7dmFyIG49Yyhl
KTtuJiZuLmlzTW91bnRlZCYmKG4uZWxlbWVudD10KX0sb25Nb3VudENvbXBvbmVudDpmdW5jdGlv
bihlKXt2YXIgdD1jKGUpO3R8fG0oIjE0NCIpLHQuaXNNb3VudGVkPSEwLDA9PT10LnBhcmVudElE
JiZmKGUpfSxvblVwZGF0ZUNvbXBvbmVudDpmdW5jdGlvbihlKXt2YXIgdD1jKGUpO3QmJnQuaXNN
b3VudGVkJiZ0LnVwZGF0ZUNvdW50Kyt9LG9uVW5tb3VudENvbXBvbmVudDpmdW5jdGlvbihlKXt2
YXIgdD1jKGUpO2lmKHQpe3QuaXNNb3VudGVkPSExOzA9PT10LnBhcmVudElEJiZkKGUpfXgucHVz
aChlKX0scHVyZ2VVbm1vdW50ZWRDb21wb25lbnRzOmZ1bmN0aW9uKCl7aWYoIVQuX3ByZXZlbnRQ
dXJnaW5nKXtmb3IodmFyIGU9MDtlPHgubGVuZ3RoO2UrKyl7byh4W2VdKX14Lmxlbmd0aD0wfX0s
aXNNb3VudGVkOmZ1bmN0aW9uKGUpe3ZhciB0PWMoZSk7cmV0dXJuISF0JiZ0LmlzTW91bnRlZH0s
Z2V0Q3VycmVudFN0YWNrQWRkZW5kdW06ZnVuY3Rpb24oZSl7dmFyIHQ9IiI7aWYoZSl7dmFyIG49
YShlKSxyPWUuX293bmVyO3QrPWkobixlLl9zb3VyY2UsciYmci5nZXROYW1lKCkpfXZhciBvPXYu
Y3VycmVudCx1PW8mJm8uX2RlYnVnSUQ7cmV0dXJuIHQrPVQuZ2V0U3RhY2tBZGRlbmR1bUJ5SUQo
dSl9LGdldFN0YWNrQWRkZW5kdW1CeUlEOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0iIjtlOyl0Kz11
KGUpLGU9VC5nZXRQYXJlbnRJRChlKTtyZXR1cm4gdH0sZ2V0Q2hpbGRJRHM6ZnVuY3Rpb24oZSl7
dmFyIHQ9YyhlKTtyZXR1cm4gdD90LmNoaWxkSURzOltdfSxnZXREaXNwbGF5TmFtZTpmdW5jdGlv
bihlKXt2YXIgdD1ULmdldEVsZW1lbnQoZSk7cmV0dXJuIHQ/YSh0KTpudWxsfSxnZXRFbGVtZW50
OmZ1bmN0aW9uKGUpe3ZhciB0PWMoZSk7cmV0dXJuIHQ/dC5lbGVtZW50Om51bGx9LGdldE93bmVy
SUQ6ZnVuY3Rpb24oZSl7dmFyIHQ9VC5nZXRFbGVtZW50KGUpO3JldHVybiB0JiZ0Ll9vd25lcj90
Ll9vd25lci5fZGVidWdJRDpudWxsfSxnZXRQYXJlbnRJRDpmdW5jdGlvbihlKXt2YXIgdD1jKGUp
O3JldHVybiB0P3QucGFyZW50SUQ6bnVsbH0sZ2V0U291cmNlOmZ1bmN0aW9uKGUpe3ZhciB0PWMo
ZSksbj10P3QuZWxlbWVudDpudWxsO3JldHVybiBudWxsIT1uP24uX3NvdXJjZTpudWxsfSxnZXRU
ZXh0OmZ1bmN0aW9uKGUpe3ZhciB0PVQuZ2V0RWxlbWVudChlKTtyZXR1cm4ic3RyaW5nIj09PXR5
cGVvZiB0P3Q6Im51bWJlciI9PT10eXBlb2YgdD8iIit0Om51bGx9LGdldFVwZGF0ZUNvdW50OmZ1
bmN0aW9uKGUpe3ZhciB0PWMoZSk7cmV0dXJuIHQ/dC51cGRhdGVDb3VudDowfSxnZXRSb290SURz
OmgsZ2V0UmVnaXN0ZXJlZElEczpwLHB1c2hOb25TdGFuZGFyZFdhcm5pbmdTdGFjazpmdW5jdGlv
bihlLHQpe2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgY29uc29sZS5yZWFjdFN0YWNrKXt2YXIgbj1b
XSxyPXYuY3VycmVudCxvPXImJnIuX2RlYnVnSUQ7dHJ5e2ZvcihlJiZuLnB1c2goe25hbWU6bz9U
LmdldERpc3BsYXlOYW1lKG8pOm51bGwsZmlsZU5hbWU6dD90LmZpbGVOYW1lOm51bGwsbGluZU51
bWJlcjp0P3QubGluZU51bWJlcjpudWxsfSk7bzspe3ZhciBpPVQuZ2V0RWxlbWVudChvKSxhPVQu
Z2V0UGFyZW50SUQobyksdT1ULmdldE93bmVySUQobykscz11P1QuZ2V0RGlzcGxheU5hbWUodSk6
bnVsbCxjPWkmJmkuX3NvdXJjZTtuLnB1c2goe25hbWU6cyxmaWxlTmFtZTpjP2MuZmlsZU5hbWU6
bnVsbCxsaW5lTnVtYmVyOmM/Yy5saW5lTnVtYmVyOm51bGx9KSxvPWF9fWNhdGNoKGUpe31jb25z
b2xlLnJlYWN0U3RhY2sobil9fSxwb3BOb25TdGFuZGFyZFdhcm5pbmdTdGFjazpmdW5jdGlvbigp
eyJmdW5jdGlvbiI9PT10eXBlb2YgY29uc29sZS5yZWFjdFN0YWNrRW5kJiZjb25zb2xlLnJlYWN0
U3RhY2tFbmQoKX19O2UuZXhwb3J0cz1UfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3Zh
ciByPW4oNiksbz17bGlzdGVuOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZS5hZGRFdmVudExpc3Rl
bmVyPyhlLmFkZEV2ZW50TGlzdGVuZXIodCxuLCExKSx7cmVtb3ZlOmZ1bmN0aW9uKCl7ZS5yZW1v
dmVFdmVudExpc3RlbmVyKHQsbiwhMSl9fSk6ZS5hdHRhY2hFdmVudD8oZS5hdHRhY2hFdmVudCgi
b24iK3Qsbikse3JlbW92ZTpmdW5jdGlvbigpe2UuZGV0YWNoRXZlbnQoIm9uIit0LG4pfX0pOnZv
aWQgMH0sY2FwdHVyZTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGUuYWRkRXZlbnRMaXN0ZW5lcj8o
ZS5hZGRFdmVudExpc3RlbmVyKHQsbiwhMCkse3JlbW92ZTpmdW5jdGlvbigpe2UucmVtb3ZlRXZl
bnRMaXN0ZW5lcih0LG4sITApfX0pOntyZW1vdmU6cn19LHJlZ2lzdGVyRGVmYXVsdDpmdW5jdGlv
bigpe319O2UuZXhwb3J0cz1vfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9u
IHIoZSl7cmV0dXJuIGkoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGUpfXZhciBvPW4oMTcxKSxp
PW4oMTczKSxhPW4oNjgpLHU9big4MSkscz17aGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzOmZ1bmN0
aW9uKGUpe3ZhciB0PWUmJmUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1
cm4gdCYmKCJpbnB1dCI9PT10JiYidGV4dCI9PT1lLnR5cGV8fCJ0ZXh0YXJlYSI9PT10fHwidHJ1
ZSI9PT1lLmNvbnRlbnRFZGl0YWJsZSl9LGdldFNlbGVjdGlvbkluZm9ybWF0aW9uOmZ1bmN0aW9u
KCl7dmFyIGU9dSgpO3JldHVybntmb2N1c2VkRWxlbTplLHNlbGVjdGlvblJhbmdlOnMuaGFzU2Vs
ZWN0aW9uQ2FwYWJpbGl0aWVzKGUpP3MuZ2V0U2VsZWN0aW9uKGUpOm51bGx9fSxyZXN0b3JlU2Vs
ZWN0aW9uOmZ1bmN0aW9uKGUpe3ZhciB0PXUoKSxuPWUuZm9jdXNlZEVsZW0sbz1lLnNlbGVjdGlv
blJhbmdlO3QhPT1uJiZyKG4pJiYocy5oYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMobikmJnMuc2V0
U2VsZWN0aW9uKG4sbyksYShuKSl9LGdldFNlbGVjdGlvbjpmdW5jdGlvbihlKXt2YXIgdDtpZigi
c2VsZWN0aW9uU3RhcnQiaW4gZSl0PXtzdGFydDplLnNlbGVjdGlvblN0YXJ0LGVuZDplLnNlbGVj
dGlvbkVuZH07ZWxzZSBpZihkb2N1bWVudC5zZWxlY3Rpb24mJmUubm9kZU5hbWUmJiJpbnB1dCI9
PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpe3ZhciBuPWRvY3VtZW50LnNlbGVjdGlvbi5jcmVh
dGVSYW5nZSgpO24ucGFyZW50RWxlbWVudCgpPT09ZSYmKHQ9e3N0YXJ0Oi1uLm1vdmVTdGFydCgi
Y2hhcmFjdGVyIiwtZS52YWx1ZS5sZW5ndGgpLGVuZDotbi5tb3ZlRW5kKCJjaGFyYWN0ZXIiLC1l
LnZhbHVlLmxlbmd0aCl9KX1lbHNlIHQ9by5nZXRPZmZzZXRzKGUpO3JldHVybiB0fHx7c3RhcnQ6
MCxlbmQ6MH19LHNldFNlbGVjdGlvbjpmdW5jdGlvbihlLHQpe3ZhciBuPXQuc3RhcnQscj10LmVu
ZDtpZih2b2lkIDA9PT1yJiYocj1uKSwic2VsZWN0aW9uU3RhcnQiaW4gZSllLnNlbGVjdGlvblN0
YXJ0PW4sZS5zZWxlY3Rpb25FbmQ9TWF0aC5taW4ocixlLnZhbHVlLmxlbmd0aCk7ZWxzZSBpZihk
b2N1bWVudC5zZWxlY3Rpb24mJmUubm9kZU5hbWUmJiJpbnB1dCI9PT1lLm5vZGVOYW1lLnRvTG93
ZXJDYXNlKCkpe3ZhciBpPWUuY3JlYXRlVGV4dFJhbmdlKCk7aS5jb2xsYXBzZSghMCksaS5tb3Zl
U3RhcnQoImNoYXJhY3RlciIsbiksaS5tb3ZlRW5kKCJjaGFyYWN0ZXIiLHItbiksaS5zZWxlY3Qo
KX1lbHNlIG8uc2V0T2Zmc2V0cyhlLHQpfX07ZS5leHBvcnRzPXN9LGZ1bmN0aW9uKGUsdCxuKXsi
dXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZigidW5kZWZpbmVkIj09PXR5cGVvZihlPWV8fCgi
dW5kZWZpbmVkIiE9PXR5cGVvZiBkb2N1bWVudD9kb2N1bWVudDp2b2lkIDApKSlyZXR1cm4gbnVs
bDt0cnl7cmV0dXJuIGUuYWN0aXZlRWxlbWVudHx8ZS5ib2R5fWNhdGNoKHQpe3JldHVybiBlLmJv
ZHl9fWUuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIo
ZSx0KXtmb3IodmFyIG49TWF0aC5taW4oZS5sZW5ndGgsdC5sZW5ndGgpLHI9MDtyPG47cisrKWlm
KGUuY2hhckF0KHIpIT09dC5jaGFyQXQocikpcmV0dXJuIHI7cmV0dXJuIGUubGVuZ3RoPT09dC5s
ZW5ndGg/LTE6bn1mdW5jdGlvbiBvKGUpe3JldHVybiBlP2Uubm9kZVR5cGU9PT1BP2UuZG9jdW1l
bnRFbGVtZW50OmUuZmlyc3RDaGlsZDpudWxsfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIGUuZ2V0QXR0
cmlidXRlJiZlLmdldEF0dHJpYnV0ZShJKXx8IiJ9ZnVuY3Rpb24gYShlLHQsbixyLG8pe3ZhciBp
O2lmKEMubG9nVG9wTGV2ZWxSZW5kZXJzKXt2YXIgYT1lLl9jdXJyZW50RWxlbWVudC5wcm9wcy5j
aGlsZCx1PWEudHlwZTtpPSJSZWFjdCBtb3VudDogIisoInN0cmluZyI9PT10eXBlb2YgdT91OnUu
ZGlzcGxheU5hbWV8fHUubmFtZSksY29uc29sZS50aW1lKGkpfXZhciBzPXgubW91bnRDb21wb25l
bnQoZSxuLG51bGwsYihlLHQpLG8sMCk7aSYmY29uc29sZS50aW1lRW5kKGkpLGUuX3JlbmRlcmVk
Q29tcG9uZW50Ll90b3BMZXZlbFdyYXBwZXI9ZSxGLl9tb3VudEltYWdlSW50b05vZGUocyx0LGUs
cixuKX1mdW5jdGlvbiB1KGUsdCxuLHIpe3ZhciBvPVAuUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlv
bi5nZXRQb29sZWQoIW4mJl8udXNlQ3JlYXRlRWxlbWVudCk7by5wZXJmb3JtKGEsbnVsbCxlLHQs
byxuLHIpLFAuUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbi5yZWxlYXNlKG8pfWZ1bmN0aW9uIHMo
ZSx0LG4pe2Zvcih4LnVubW91bnRDb21wb25lbnQoZSxuKSx0Lm5vZGVUeXBlPT09QSYmKHQ9dC5k
b2N1bWVudEVsZW1lbnQpO3QubGFzdENoaWxkOyl0LnJlbW92ZUNoaWxkKHQubGFzdENoaWxkKX1m
dW5jdGlvbiBjKGUpe3ZhciB0PW8oZSk7aWYodCl7dmFyIG49Zy5nZXRJbnN0YW5jZUZyb21Ob2Rl
KHQpO3JldHVybiEoIW58fCFuLl9ob3N0UGFyZW50KX19ZnVuY3Rpb24gbChlKXtyZXR1cm4hKCFl
fHxlLm5vZGVUeXBlIT09UiYmZS5ub2RlVHlwZSE9PUEmJmUubm9kZVR5cGUhPT1EKX1mdW5jdGlv
biBwKGUpe3ZhciB0PW8oZSksbj10JiZnLmdldEluc3RhbmNlRnJvbU5vZGUodCk7cmV0dXJuIG4m
JiFuLl9ob3N0UGFyZW50P246bnVsbH1mdW5jdGlvbiBmKGUpe3ZhciB0PXAoZSk7cmV0dXJuIHQ/
dC5faG9zdENvbnRhaW5lckluZm8uX3RvcExldmVsV3JhcHBlcjpudWxsfXZhciBkPW4oMiksaD1u
KDE3KSxtPW4oMTUpLHY9bigxMykseT1uKDI4KSxnPShuKDEwKSxuKDQpKSxiPW4oMTg4KSxfPW4o
MTg5KSxDPW4oNjMpLHc9bigyMiksRT0obig3KSxuKDE5MCkpLHg9bigxNiksVD1uKDQ1KSxQPW4o
OCksTz1uKDIzKSxrPW4oNzMpLFM9KG4oMCksbigyNikpLE49big0MyksST0obigxKSxtLklEX0FU
VFJJQlVURV9OQU1FKSxNPW0uUk9PVF9BVFRSSUJVVEVfTkFNRSxSPTEsQT05LEQ9MTEsaj17fSxV
PTEsTD1mdW5jdGlvbigpe3RoaXMucm9vdElEPVUrK307TC5wcm90b3R5cGUuaXNSZWFjdENvbXBv
bmVudD17fSxMLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9wcy5j
aGlsZH0sTC5pc1JlYWN0VG9wTGV2ZWxXcmFwcGVyPSEwO3ZhciBGPXtUb3BMZXZlbFdyYXBwZXI6
TCxfaW5zdGFuY2VzQnlSZWFjdFJvb3RJRDpqLHNjcm9sbE1vbml0b3I6ZnVuY3Rpb24oZSx0KXt0
KCl9LF91cGRhdGVSb290Q29tcG9uZW50OmZ1bmN0aW9uKGUsdCxuLHIsbyl7cmV0dXJuIEYuc2Ny
b2xsTW9uaXRvcihyLGZ1bmN0aW9uKCl7VC5lbnF1ZXVlRWxlbWVudEludGVybmFsKGUsdCxuKSxv
JiZULmVucXVldWVDYWxsYmFja0ludGVybmFsKGUsbyl9KSxlfSxfcmVuZGVyTmV3Um9vdENvbXBv
bmVudDpmdW5jdGlvbihlLHQsbixyKXtsKHQpfHxkKCIzNyIpLHkuZW5zdXJlU2Nyb2xsVmFsdWVN
b25pdG9yaW5nKCk7dmFyIG89ayhlLCExKTtQLmJhdGNoZWRVcGRhdGVzKHUsbyx0LG4scik7dmFy
IGk9by5faW5zdGFuY2Uucm9vdElEO3JldHVybiBqW2ldPW8sb30scmVuZGVyU3VidHJlZUludG9D
b250YWluZXI6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG51bGwhPWUmJncuaGFzKGUpfHxkKCIz
OCIpLEYuX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKGUsdCxuLHIpfSxfcmVuZGVyU3VidHJl
ZUludG9Db250YWluZXI6ZnVuY3Rpb24oZSx0LG4scil7VC52YWxpZGF0ZUNhbGxiYWNrKHIsIlJl
YWN0RE9NLnJlbmRlciIpLHYuaXNWYWxpZEVsZW1lbnQodCl8fGQoIjM5Iiwic3RyaW5nIj09PXR5
cGVvZiB0PyIgSW5zdGVhZCBvZiBwYXNzaW5nIGEgc3RyaW5nIGxpa2UgJ2RpdicsIHBhc3MgUmVh
Y3QuY3JlYXRlRWxlbWVudCgnZGl2Jykgb3IgPGRpdiAvPi4iOiJmdW5jdGlvbiI9PT10eXBlb2Yg
dD8iIEluc3RlYWQgb2YgcGFzc2luZyBhIGNsYXNzIGxpa2UgRm9vLCBwYXNzIFJlYWN0LmNyZWF0
ZUVsZW1lbnQoRm9vKSBvciA8Rm9vIC8+LiI6bnVsbCE9dCYmdm9pZCAwIT09dC5wcm9wcz8iIFRo
aXMgbWF5IGJlIGNhdXNlZCBieSB1bmludGVudGlvbmFsbHkgbG9hZGluZyB0d28gaW5kZXBlbmRl
bnQgY29waWVzIG9mIFJlYWN0LiI6IiIpO3ZhciBhLHU9di5jcmVhdGVFbGVtZW50KEwse2NoaWxk
OnR9KTtpZihlKXt2YXIgcz13LmdldChlKTthPXMuX3Byb2Nlc3NDaGlsZENvbnRleHQocy5fY29u
dGV4dCl9ZWxzZSBhPU87dmFyIGw9ZihuKTtpZihsKXt2YXIgcD1sLl9jdXJyZW50RWxlbWVudCxo
PXAucHJvcHMuY2hpbGQ7aWYoTihoLHQpKXt2YXIgbT1sLl9yZW5kZXJlZENvbXBvbmVudC5nZXRQ
dWJsaWNJbnN0YW5jZSgpLHk9ciYmZnVuY3Rpb24oKXtyLmNhbGwobSl9O3JldHVybiBGLl91cGRh
dGVSb290Q29tcG9uZW50KGwsdSxhLG4seSksbX1GLnVubW91bnRDb21wb25lbnRBdE5vZGUobil9
dmFyIGc9byhuKSxiPWcmJiEhaShnKSxfPWMobiksQz1iJiYhbCYmIV8sRT1GLl9yZW5kZXJOZXdS
b290Q29tcG9uZW50KHUsbixDLGEpLl9yZW5kZXJlZENvbXBvbmVudC5nZXRQdWJsaWNJbnN0YW5j
ZSgpO3JldHVybiByJiZyLmNhbGwoRSksRX0scmVuZGVyOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4g
Ri5fcmVuZGVyU3VidHJlZUludG9Db250YWluZXIobnVsbCxlLHQsbil9LHVubW91bnRDb21wb25l
bnRBdE5vZGU6ZnVuY3Rpb24oZSl7bChlKXx8ZCgiNDAiKTt2YXIgdD1mKGUpO2lmKCF0KXtjKGUp
LDE9PT1lLm5vZGVUeXBlJiZlLmhhc0F0dHJpYnV0ZShNKTtyZXR1cm4hMX1yZXR1cm4gZGVsZXRl
IGpbdC5faW5zdGFuY2Uucm9vdElEXSxQLmJhdGNoZWRVcGRhdGVzKHMsdCxlLCExKSwhMH0sX21v
dW50SW1hZ2VJbnRvTm9kZTpmdW5jdGlvbihlLHQsbixpLGEpe2lmKGwodCl8fGQoIjQxIiksaSl7
dmFyIHU9byh0KTtpZihFLmNhblJldXNlTWFya3VwKGUsdSkpcmV0dXJuIHZvaWQgZy5wcmVjYWNo
ZU5vZGUobix1KTt2YXIgcz11LmdldEF0dHJpYnV0ZShFLkNIRUNLU1VNX0FUVFJfTkFNRSk7dS5y
ZW1vdmVBdHRyaWJ1dGUoRS5DSEVDS1NVTV9BVFRSX05BTUUpO3ZhciBjPXUub3V0ZXJIVE1MO3Uu
c2V0QXR0cmlidXRlKEUuQ0hFQ0tTVU1fQVRUUl9OQU1FLHMpO3ZhciBwPWUsZj1yKHAsYyksbT0i
IChjbGllbnQpICIrcC5zdWJzdHJpbmcoZi0yMCxmKzIwKSsiXG4gKHNlcnZlcikgIitjLnN1YnN0
cmluZyhmLTIwLGYrMjApO3Qubm9kZVR5cGU9PT1BJiZkKCI0MiIsbSl9aWYodC5ub2RlVHlwZT09
PUEmJmQoIjQzIiksYS51c2VDcmVhdGVFbGVtZW50KXtmb3IoO3QubGFzdENoaWxkOyl0LnJlbW92
ZUNoaWxkKHQubGFzdENoaWxkKTtoLmluc2VydFRyZWVCZWZvcmUodCxlLG51bGwpfWVsc2UgUyh0
LGUpLGcucHJlY2FjaGVOb2RlKG4sdC5maXJzdENoaWxkKX19O2UuZXhwb3J0cz1GfSxmdW5jdGlv
bihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7Zm9yKHZhciB0Oyh0PWUuX3JlbmRl
cmVkTm9kZVR5cGUpPT09by5DT01QT1NJVEU7KWU9ZS5fcmVuZGVyZWRDb21wb25lbnQ7cmV0dXJu
IHQ9PT1vLkhPU1Q/ZS5fcmVuZGVyZWRDb21wb25lbnQ6dD09PW8uRU1QVFk/bnVsbDp2b2lkIDB9
dmFyIG89big3NCk7ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVu
Y3Rpb24gcihlLHQsbil7ZnVuY3Rpb24gaSgpe3k9PT12JiYoeT12LnNsaWNlKCkpfWZ1bmN0aW9u
IHMoKXtyZXR1cm4gbX1mdW5jdGlvbiBjKGUpe2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgZSl0aHJv
dyBuZXcgRXJyb3IoIkV4cGVjdGVkIGxpc3RlbmVyIHRvIGJlIGEgZnVuY3Rpb24uIik7dmFyIHQ9
ITA7cmV0dXJuIGkoKSx5LnB1c2goZSksZnVuY3Rpb24oKXtpZih0KXt0PSExLGkoKTt2YXIgbj15
LmluZGV4T2YoZSk7eS5zcGxpY2UobiwxKX19fWZ1bmN0aW9uIGwoZSl7aWYoIU9iamVjdChvLmEp
KGUpKXRocm93IG5ldyBFcnJvcigiQWN0aW9ucyBtdXN0IGJlIHBsYWluIG9iamVjdHMuIFVzZSBj
dXN0b20gbWlkZGxld2FyZSBmb3IgYXN5bmMgYWN0aW9ucy4iKTtpZigidW5kZWZpbmVkIj09PXR5
cGVvZiBlLnR5cGUpdGhyb3cgbmV3IEVycm9yKCdBY3Rpb25zIG1heSBub3QgaGF2ZSBhbiB1bmRl
ZmluZWQgInR5cGUiIHByb3BlcnR5LiBIYXZlIHlvdSBtaXNzcGVsbGVkIGEgY29uc3RhbnQ/Jyk7
aWYoZyl0aHJvdyBuZXcgRXJyb3IoIlJlZHVjZXJzIG1heSBub3QgZGlzcGF0Y2ggYWN0aW9ucy4i
KTt0cnl7Zz0hMCxtPWgobSxlKX1maW5hbGx5e2c9ITF9Zm9yKHZhciB0PXY9eSxuPTA7bjx0Lmxl
bmd0aDtuKyspeygwLHRbbl0pKCl9cmV0dXJuIGV9ZnVuY3Rpb24gcChlKXtpZigiZnVuY3Rpb24i
IT09dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCB0aGUgbmV4dFJlZHVjZXIgdG8g
YmUgYSBmdW5jdGlvbi4iKTtoPWUsbCh7dHlwZTp1LklOSVR9KX1mdW5jdGlvbiBmKCl7dmFyIGUs
dD1jO3JldHVybiBlPXtzdWJzY3JpYmU6ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe2UubmV4dCYm
ZS5uZXh0KHMoKSl9aWYoIm9iamVjdCIhPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJF
eHBlY3RlZCB0aGUgb2JzZXJ2ZXIgdG8gYmUgYW4gb2JqZWN0LiIpO3JldHVybiBuKCkse3Vuc3Vi
c2NyaWJlOnQobil9fX0sZVthLmFdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGV9dmFyIGQ7aWYo
ImZ1bmN0aW9uIj09PXR5cGVvZiB0JiYidW5kZWZpbmVkIj09PXR5cGVvZiBuJiYobj10LHQ9dm9p
ZCAwKSwidW5kZWZpbmVkIiE9PXR5cGVvZiBuKXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIG4pdGhy
b3cgbmV3IEVycm9yKCJFeHBlY3RlZCB0aGUgZW5oYW5jZXIgdG8gYmUgYSBmdW5jdGlvbi4iKTty
ZXR1cm4gbihyKShlLHQpfWlmKCJmdW5jdGlvbiIhPT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3Io
IkV4cGVjdGVkIHRoZSByZWR1Y2VyIHRvIGJlIGEgZnVuY3Rpb24uIik7dmFyIGg9ZSxtPXQsdj1b
XSx5PXYsZz0hMTtyZXR1cm4gbCh7dHlwZTp1LklOSVR9KSxkPXtkaXNwYXRjaDpsLHN1YnNjcmli
ZTpjLGdldFN0YXRlOnMscmVwbGFjZVJlZHVjZXI6cH0sZFthLmFdPWYsZH1uLmQodCwiYSIsZnVu
Y3Rpb24oKXtyZXR1cm4gdX0pLHQuYj1yO3ZhciBvPW4oNDgpLGk9bigyMDMpLGE9bi5uKGkpLHU9
e0lOSVQ6IkBAcmVkdXgvSU5JVCJ9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciBy
PW4oMTk2KSxvPXIuYS5TeW1ib2w7dC5hPW99LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCJ9
LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe2Zvcih2YXIgZT1hcmd1
bWVudHMubGVuZ3RoLHQ9QXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07cmV0
dXJuIDA9PT10Lmxlbmd0aD9mdW5jdGlvbihlKXtyZXR1cm4gZX06MT09PXQubGVuZ3RoP3RbMF06
dC5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSh0LmFwcGx5
KHZvaWQgMCxhcmd1bWVudHMpKX19KX10LmE9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0
Ijt2YXIgcj1uKDIxMCksbz0obig5MSksbigyMTUpKTtuLmQodCwiYSIsZnVuY3Rpb24oKXtyZXR1
cm4gci5hfSksbi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIG8uYX0pfSxmdW5jdGlvbihlLHQs
bil7ZS5leHBvcnRzPW4oMjExKSgpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0
LCJiIixmdW5jdGlvbigpe3JldHVybiBpfSksbi5kKHQsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9
KTt2YXIgcj1uKDg5KSxvPW4ubihyKSxpPW8uYS5zaGFwZSh7dHJ5U3Vic2NyaWJlOm8uYS5mdW5j
LmlzUmVxdWlyZWQsdHJ5VW5zdWJzY3JpYmU6by5hLmZ1bmMuaXNSZXF1aXJlZCxub3RpZnlOZXN0
ZWRTdWJzOm8uYS5mdW5jLmlzUmVxdWlyZWQsaXNTdWJzY3JpYmVkOm8uYS5mdW5jLmlzUmVxdWly
ZWR9KSxhPW8uYS5zaGFwZSh7c3Vic2NyaWJlOm8uYS5mdW5jLmlzUmVxdWlyZWQsZGlzcGF0Y2g6
by5hLmZ1bmMuaXNSZXF1aXJlZCxnZXRTdGF0ZTpvLmEuZnVuYy5pc1JlcXVpcmVkfSl9LGZ1bmN0
aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2lmKCEoZSBpbnN0YW5jZW9m
IHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlv
biIpfWZ1bmN0aW9uIG8oZSx0KXtpZighZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMg
aGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3Jl
dHVybiF0fHwib2JqZWN0IiE9PXR5cGVvZiB0JiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZTp0fWZ1
bmN0aW9uIGkoZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5l
dyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1
bmN0aW9uLCBub3QgIit0eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnBy
b3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxj
b25maWd1cmFibGU6ITB9fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJv
dG90eXBlT2YoZSx0KTplLl9fcHJvdG9fXz10KX1mdW5jdGlvbiBhKGUsdCl7dmFyIG49e307Zm9y
KHZhciByIGluIGUpdC5pbmRleE9mKHIpPj0wfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3Bl
cnR5LmNhbGwoZSxyKSYmKG5bcl09ZVtyXSk7cmV0dXJuIG59ZnVuY3Rpb24gdSgpe31mdW5jdGlv
biBzKGUsdCl7dmFyIG49e3J1bjpmdW5jdGlvbihyKXt0cnl7dmFyIG89ZSh0LmdldFN0YXRlKCks
cik7KG8hPT1uLnByb3BzfHxuLmVycm9yKSYmKG4uc2hvdWxkQ29tcG9uZW50VXBkYXRlPSEwLG4u
cHJvcHM9byxuLmVycm9yPW51bGwpfWNhdGNoKGUpe24uc2hvdWxkQ29tcG9uZW50VXBkYXRlPSEw
LG4uZXJyb3I9ZX19fTtyZXR1cm4gbn1mdW5jdGlvbiBjKGUpe3ZhciB0LG4sYz1hcmd1bWVudHMu
bGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sbD1jLmdldERp
c3BsYXlOYW1lLGY9dm9pZCAwPT09bD9mdW5jdGlvbihlKXtyZXR1cm4iQ29ubmVjdEFkdmFuY2Vk
KCIrZSsiKSJ9OmwsXz1jLm1ldGhvZE5hbWUsQz12b2lkIDA9PT1fPyJjb25uZWN0QWR2YW5jZWQi
Ol8sdz1jLnJlbmRlckNvdW50UHJvcCxFPXZvaWQgMD09PXc/dm9pZCAwOncseD1jLnNob3VsZEhh
bmRsZVN0YXRlQ2hhbmdlcyxUPXZvaWQgMD09PXh8fHgsUD1jLnN0b3JlS2V5LE89dm9pZCAwPT09
UD8ic3RvcmUiOlAsaz1jLndpdGhSZWYsUz12b2lkIDAhPT1rJiZrLE49YShjLFsiZ2V0RGlzcGxh
eU5hbWUiLCJtZXRob2ROYW1lIiwicmVuZGVyQ291bnRQcm9wIiwic2hvdWxkSGFuZGxlU3RhdGVD
aGFuZ2VzIiwic3RvcmVLZXkiLCJ3aXRoUmVmIl0pLEk9TysiU3Vic2NyaXB0aW9uIixNPWcrKyxS
PSh0PXt9LHRbT109di5hLHRbSV09di5iLHQpLEE9KG49e30sbltJXT12LmIsbik7cmV0dXJuIGZ1
bmN0aW9uKHQpe2QoKSgiZnVuY3Rpb24iPT10eXBlb2YgdCwiWW91IG11c3QgcGFzcyBhIGNvbXBv
bmVudCB0byB0aGUgZnVuY3Rpb24gcmV0dXJuZWQgYnkgY29ubmVjdC4gSW5zdGVhZCByZWNlaXZl
ZCAiK0pTT04uc3RyaW5naWZ5KHQpKTt2YXIgbj10LmRpc3BsYXlOYW1lfHx0Lm5hbWV8fCJDb21w
b25lbnQiLGE9ZihuKSxjPXkoe30sTix7Z2V0RGlzcGxheU5hbWU6ZixtZXRob2ROYW1lOkMscmVu
ZGVyQ291bnRQcm9wOkUsc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzOlQsc3RvcmVLZXk6Tyx3aXRo
UmVmOlMsZGlzcGxheU5hbWU6YSx3cmFwcGVkQ29tcG9uZW50TmFtZTpuLFdyYXBwZWRDb21wb25l
bnQ6dH0pLGw9ZnVuY3Rpb24obil7ZnVuY3Rpb24gbChlLHQpe3IodGhpcyxsKTt2YXIgaT1vKHRo
aXMsbi5jYWxsKHRoaXMsZSx0KSk7cmV0dXJuIGkudmVyc2lvbj1NLGkuc3RhdGU9e30saS5yZW5k
ZXJDb3VudD0wLGkuc3RvcmU9ZVtPXXx8dFtPXSxpLnByb3BzTW9kZT1Cb29sZWFuKGVbT10pLGku
c2V0V3JhcHBlZEluc3RhbmNlPWkuc2V0V3JhcHBlZEluc3RhbmNlLmJpbmQoaSksZCgpKGkuc3Rv
cmUsJ0NvdWxkIG5vdCBmaW5kICInK08rJyIgaW4gZWl0aGVyIHRoZSBjb250ZXh0IG9yIHByb3Bz
IG9mICInK2ErJyIuIEVpdGhlciB3cmFwIHRoZSByb290IGNvbXBvbmVudCBpbiBhIDxQcm92aWRl
cj4sIG9yIGV4cGxpY2l0bHkgcGFzcyAiJytPKyciIGFzIGEgcHJvcCB0byAiJythKyciLicpLGku
aW5pdFNlbGVjdG9yKCksaS5pbml0U3Vic2NyaXB0aW9uKCksaX1yZXR1cm4gaShsLG4pLGwucHJv
dG90eXBlLmdldENoaWxkQ29udGV4dD1mdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5wcm9wc01vZGU/
bnVsbDp0aGlzLnN1YnNjcmlwdGlvbjtyZXR1cm4gZT17fSxlW0ldPXR8fHRoaXMuY29udGV4dFtJ
XSxlfSxsLnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe1QmJih0aGlzLnN1
YnNjcmlwdGlvbi50cnlTdWJzY3JpYmUoKSx0aGlzLnNlbGVjdG9yLnJ1bih0aGlzLnByb3BzKSx0
aGlzLnNlbGVjdG9yLnNob3VsZENvbXBvbmVudFVwZGF0ZSYmdGhpcy5mb3JjZVVwZGF0ZSgpKX0s
bC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcz1mdW5jdGlvbihlKXt0aGlzLnNl
bGVjdG9yLnJ1bihlKX0sbC5wcm90b3R5cGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9u
KCl7cmV0dXJuIHRoaXMuc2VsZWN0b3Iuc2hvdWxkQ29tcG9uZW50VXBkYXRlfSxsLnByb3RvdHlw
ZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlz
LnN1YnNjcmlwdGlvbi50cnlVbnN1YnNjcmliZSgpLHRoaXMuc3Vic2NyaXB0aW9uPW51bGwsdGhp
cy5ub3RpZnlOZXN0ZWRTdWJzPXUsdGhpcy5zdG9yZT1udWxsLHRoaXMuc2VsZWN0b3IucnVuPXUs
dGhpcy5zZWxlY3Rvci5zaG91bGRDb21wb25lbnRVcGRhdGU9ITF9LGwucHJvdG90eXBlLmdldFdy
YXBwZWRJbnN0YW5jZT1mdW5jdGlvbigpe3JldHVybiBkKCkoUywiVG8gYWNjZXNzIHRoZSB3cmFw
cGVkIGluc3RhbmNlLCB5b3UgbmVlZCB0byBzcGVjaWZ5IHsgd2l0aFJlZjogdHJ1ZSB9IGluIHRo
ZSBvcHRpb25zIGFyZ3VtZW50IG9mIHRoZSAiK0MrIigpIGNhbGwuIiksdGhpcy53cmFwcGVkSW5z
dGFuY2V9LGwucHJvdG90eXBlLnNldFdyYXBwZWRJbnN0YW5jZT1mdW5jdGlvbihlKXt0aGlzLndy
YXBwZWRJbnN0YW5jZT1lfSxsLnByb3RvdHlwZS5pbml0U2VsZWN0b3I9ZnVuY3Rpb24oKXt2YXIg
dD1lKHRoaXMuc3RvcmUuZGlzcGF0Y2gsYyk7dGhpcy5zZWxlY3Rvcj1zKHQsdGhpcy5zdG9yZSks
dGhpcy5zZWxlY3Rvci5ydW4odGhpcy5wcm9wcyl9LGwucHJvdG90eXBlLmluaXRTdWJzY3JpcHRp
b249ZnVuY3Rpb24oKXtpZihUKXt2YXIgZT0odGhpcy5wcm9wc01vZGU/dGhpcy5wcm9wczp0aGlz
LmNvbnRleHQpW0ldO3RoaXMuc3Vic2NyaXB0aW9uPW5ldyBtLmEodGhpcy5zdG9yZSxlLHRoaXMu
b25TdGF0ZUNoYW5nZS5iaW5kKHRoaXMpKSx0aGlzLm5vdGlmeU5lc3RlZFN1YnM9dGhpcy5zdWJz
Y3JpcHRpb24ubm90aWZ5TmVzdGVkU3Vicy5iaW5kKHRoaXMuc3Vic2NyaXB0aW9uKX19LGwucHJv
dG90eXBlLm9uU3RhdGVDaGFuZ2U9ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdG9yLnJ1bih0aGlzLnBy
b3BzKSx0aGlzLnNlbGVjdG9yLnNob3VsZENvbXBvbmVudFVwZGF0ZT8odGhpcy5jb21wb25lbnRE
aWRVcGRhdGU9dGhpcy5ub3RpZnlOZXN0ZWRTdWJzT25Db21wb25lbnREaWRVcGRhdGUsdGhpcy5z
ZXRTdGF0ZShiKSk6dGhpcy5ub3RpZnlOZXN0ZWRTdWJzKCl9LGwucHJvdG90eXBlLm5vdGlmeU5l
c3RlZFN1YnNPbkNvbXBvbmVudERpZFVwZGF0ZT1mdW5jdGlvbigpe3RoaXMuY29tcG9uZW50RGlk
VXBkYXRlPXZvaWQgMCx0aGlzLm5vdGlmeU5lc3RlZFN1YnMoKX0sbC5wcm90b3R5cGUuaXNTdWJz
Y3JpYmVkPWZ1bmN0aW9uKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5zdWJzY3JpcHRpb24pJiZ0aGlz
LnN1YnNjcmlwdGlvbi5pc1N1YnNjcmliZWQoKX0sbC5wcm90b3R5cGUuYWRkRXh0cmFQcm9wcz1m
dW5jdGlvbihlKXtpZighUyYmIUUmJighdGhpcy5wcm9wc01vZGV8fCF0aGlzLnN1YnNjcmlwdGlv
bikpcmV0dXJuIGU7dmFyIHQ9eSh7fSxlKTtyZXR1cm4gUyYmKHQucmVmPXRoaXMuc2V0V3JhcHBl
ZEluc3RhbmNlKSxFJiYodFtFXT10aGlzLnJlbmRlckNvdW50KyspLHRoaXMucHJvcHNNb2RlJiZ0
aGlzLnN1YnNjcmlwdGlvbiYmKHRbSV09dGhpcy5zdWJzY3JpcHRpb24pLHR9LGwucHJvdG90eXBl
LnJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuc2VsZWN0b3I7aWYoZS5zaG91bGRDb21wb25l
bnRVcGRhdGU9ITEsZS5lcnJvcil0aHJvdyBlLmVycm9yO3JldHVybiBPYmplY3QoaC5jcmVhdGVF
bGVtZW50KSh0LHRoaXMuYWRkRXh0cmFQcm9wcyhlLnByb3BzKSl9LGx9KGguQ29tcG9uZW50KTty
ZXR1cm4gbC5XcmFwcGVkQ29tcG9uZW50PXQsbC5kaXNwbGF5TmFtZT1hLGwuY2hpbGRDb250ZXh0
VHlwZXM9QSxsLmNvbnRleHRUeXBlcz1SLGwucHJvcFR5cGVzPVIscCgpKGwsdCl9fXQuYT1jO3Zh
ciBsPW4oMjEyKSxwPW4ubihsKSxmPW4oMjEzKSxkPW4ubihmKSxoPW4oOSksbT0obi5uKGgpLG4o
MjE0KSksdj1uKDkwKSx5PU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8
YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilP
YmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0
dXJuIGV9LGc9MCxiPXt9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIo
ZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gcigpe3JldHVybiBvfXZhciBvPWUodCxu
KTtyZXR1cm4gci5kZXBlbmRzT25Pd25Qcm9wcz0hMSxyfX1mdW5jdGlvbiBvKGUpe3JldHVybiBu
dWxsIT09ZS5kZXBlbmRzT25Pd25Qcm9wcyYmdm9pZCAwIT09ZS5kZXBlbmRzT25Pd25Qcm9wcz9C
b29sZWFuKGUuZGVwZW5kc09uT3duUHJvcHMpOjEhPT1lLmxlbmd0aH1mdW5jdGlvbiBpKGUsdCl7
cmV0dXJuIGZ1bmN0aW9uKHQsbil7dmFyIHI9KG4uZGlzcGxheU5hbWUsZnVuY3Rpb24oZSx0KXty
ZXR1cm4gci5kZXBlbmRzT25Pd25Qcm9wcz9yLm1hcFRvUHJvcHMoZSx0KTpyLm1hcFRvUHJvcHMo
ZSl9KTtyZXR1cm4gci5kZXBlbmRzT25Pd25Qcm9wcz0hMCxyLm1hcFRvUHJvcHM9ZnVuY3Rpb24o
dCxuKXtyLm1hcFRvUHJvcHM9ZSxyLmRlcGVuZHNPbk93blByb3BzPW8oZSk7dmFyIGk9cih0LG4p
O3JldHVybiJmdW5jdGlvbiI9PT10eXBlb2YgaSYmKHIubWFwVG9Qcm9wcz1pLHIuZGVwZW5kc09u
T3duUHJvcHM9byhpKSxpPXIodCxuKSksaX0scn19dC5hPXIsdC5iPWk7big5Myl9LGZ1bmN0aW9u
KGUsdCxuKXsidXNlIHN0cmljdCI7big0OCksbig0OSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0
cmljdCI7ZnVuY3Rpb24gcihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBl
RXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIG8oZSx0
KXtpZighZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlh
bGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiF0fHwib2JqZWN0IiE9
PXR5cGVvZiB0JiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZTp0fWZ1bmN0aW9uIGkoZSx0KXtpZigi
ZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVy
IGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBl
b2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0
b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSks
dCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KTplLl9f
cHJvdG9fXz10KX12YXIgYT1uKDkpLHU9bi5uKGEpLHM9big1MCksYz1uLm4ocyksbD1mdW5jdGlv
bigpe2Z1bmN0aW9uIGUoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtu
XTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUi
aW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1y
ZXR1cm4gZnVuY3Rpb24odCxuLHIpe3JldHVybiBuJiZlKHQucHJvdG90eXBlLG4pLHImJmUodCxy
KSx0fX0oKSxwPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLGksYTtyKHRoaXMsdCk7
Zm9yKHZhciB1PWFyZ3VtZW50cy5sZW5ndGgscz1BcnJheSh1KSxjPTA7Yzx1O2MrKylzW2NdPWFy
Z3VtZW50c1tjXTtyZXR1cm4gbj1pPW8odGhpcywoZT10Ll9fcHJvdG9fX3x8T2JqZWN0LmdldFBy
b3RvdHlwZU9mKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChzKSkpLGkuc3RhdGU9e3Rl
eHQ6aS5wcm9wcy50ZXh0fHwiIn0saS5oYW5kbGVTdWJtaXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50
YXJnZXQudmFsdWUudHJpbSgpOzEzPT09ZS53aGljaCYmKGkucHJvcHMub25TYXZlKHQpLGkucHJv
cHMubmV3VG9kbyYmaS5zZXRTdGF0ZSh7dGV4dDoiIn0pKX0saS5oYW5kbGVDaGFuZ2U9ZnVuY3Rp
b24oZSl7aS5zZXRTdGF0ZSh7dGV4dDplLnRhcmdldC52YWx1ZX0pfSxpLmhhbmRsZUJsdXI9ZnVu
Y3Rpb24oZSl7aS5wcm9wcy5uZXdUb2RvfHxpLnByb3BzLm9uU2F2ZShlLnRhcmdldC52YWx1ZSl9
LGE9bixvKGksYSl9cmV0dXJuIGkodCxlKSxsKHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rp
b24oKXtyZXR1cm4gdS5hLmNyZWF0ZUVsZW1lbnQoImlucHV0Iix7Y2xhc3NOYW1lOmMoKSh7ZWRp
dDp0aGlzLnByb3BzLmVkaXRpbmcsIm5ldy10b2RvIjp0aGlzLnByb3BzLm5ld1RvZG99KSx0eXBl
OiJ0ZXh0IixwbGFjZWhvbGRlcjp0aGlzLnByb3BzLnBsYWNlaG9sZGVyLGF1dG9Gb2N1czoidHJ1
ZSIsdmFsdWU6dGhpcy5zdGF0ZS50ZXh0LG9uQmx1cjp0aGlzLmhhbmRsZUJsdXIsb25DaGFuZ2U6
dGhpcy5oYW5kbGVDaGFuZ2Usb25LZXlEb3duOnRoaXMuaGFuZGxlU3VibWl0fSl9fV0pLHR9KGEu
Q29tcG9uZW50KTtwLnByb3BUeXBlcz17b25TYXZlOmEuUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJl
ZCx0ZXh0OmEuUHJvcFR5cGVzLnN0cmluZyxwbGFjZWhvbGRlcjphLlByb3BUeXBlcy5zdHJpbmcs
ZWRpdGluZzphLlByb3BUeXBlcy5ib29sLG5ld1RvZG86YS5Qcm9wVHlwZXMuYm9vbH0sdC5hPXB9
LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJu
IHJ9KSxuLmQodCwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gb30pLG4uZCh0LCJhIixmdW5jdGlvbigp
e3JldHVybiBpfSk7dmFyIHI9InNob3dfYWxsIixvPSJzaG93X2NvbXBsZXRlZCIsaT0ic2hvd19h
Y3RpdmUifSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIixmdW5jdGlvbigp
e3JldHVybiByfSksbi5kKHQsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KSxuLmQodCwiZiIsZnVu
Y3Rpb24oKXtyZXR1cm4gaX0pLG4uZCh0LCJkIixmdW5jdGlvbigpe3JldHVybiBhfSksbi5kKHQs
ImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSxuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gc30p
O3ZhciByPSJBRERfVE9ETyIsbz0iREVMRVRFX1RPRE8iLGk9IkVESVRfVE9ETyIsYT0iQ09NUExF
VEVfVE9ETyIsdT0iQ09NUExFVEVfQUxMIixzPSJDTEVBUl9DT01QTEVURUQifSxmdW5jdGlvbihl
LHQsbil7big5OCksZS5leHBvcnRzPW4oMTAzKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0
IjsidW5kZWZpbmVkIj09PXR5cGVvZiBQcm9taXNlJiYobig5OSkuZW5hYmxlKCksd2luZG93LlBy
b21pc2U9bigxMDEpKSxuKDEwMiksT2JqZWN0LmFzc2lnbj1uKDMpfSxmdW5jdGlvbihlLHQsbil7
InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXtjPSExLHUuXzQ3PW51bGwsdS5fNzE9bnVsbH1mdW5j
dGlvbiBvKGUpe2Z1bmN0aW9uIHQodCl7KGUuYWxsUmVqZWN0aW9uc3x8YShwW3RdLmVycm9yLGUu
d2hpdGVsaXN0fHxzKSkmJihwW3RdLmRpc3BsYXlJZD1sKyssZS5vblVuaGFuZGxlZD8ocFt0XS5s
b2dnZWQ9ITAsZS5vblVuaGFuZGxlZChwW3RdLmRpc3BsYXlJZCxwW3RdLmVycm9yKSk6KHBbdF0u
bG9nZ2VkPSEwLGkocFt0XS5kaXNwbGF5SWQscFt0XS5lcnJvcikpKX1mdW5jdGlvbiBuKHQpe3Bb
dF0ubG9nZ2VkJiYoZS5vbkhhbmRsZWQ/ZS5vbkhhbmRsZWQocFt0XS5kaXNwbGF5SWQscFt0XS5l
cnJvcik6cFt0XS5vblVuaGFuZGxlZHx8KGNvbnNvbGUud2FybigiUHJvbWlzZSBSZWplY3Rpb24g
SGFuZGxlZCAoaWQ6ICIrcFt0XS5kaXNwbGF5SWQrIik6IiksY29uc29sZS53YXJuKCcgIFRoaXMg
bWVhbnMgeW91IGNhbiBpZ25vcmUgYW55IHByZXZpb3VzIG1lc3NhZ2VzIG9mIHRoZSBmb3JtICJQ
b3NzaWJsZSBVbmhhbmRsZWQgUHJvbWlzZSBSZWplY3Rpb24iIHdpdGggaWQgJytwW3RdLmRpc3Bs
YXlJZCsiLiIpKSl9ZT1lfHx7fSxjJiZyKCksYz0hMDt2YXIgbz0wLGw9MCxwPXt9O3UuXzQ3PWZ1
bmN0aW9uKGUpezI9PT1lLl84MyYmcFtlLl81Nl0mJihwW2UuXzU2XS5sb2dnZWQ/bihlLl81Nik6
Y2xlYXJUaW1lb3V0KHBbZS5fNTZdLnRpbWVvdXQpLGRlbGV0ZSBwW2UuXzU2XSl9LHUuXzcxPWZ1
bmN0aW9uKGUsbil7MD09PWUuXzc1JiYoZS5fNTY9bysrLHBbZS5fNTZdPXtkaXNwbGF5SWQ6bnVs
bCxlcnJvcjpuLHRpbWVvdXQ6c2V0VGltZW91dCh0LmJpbmQobnVsbCxlLl81NiksYShuLHMpPzEw
MDoyZTMpLGxvZ2dlZDohMX0pfX1mdW5jdGlvbiBpKGUsdCl7Y29uc29sZS53YXJuKCJQb3NzaWJs
ZSBVbmhhbmRsZWQgUHJvbWlzZSBSZWplY3Rpb24gKGlkOiAiK2UrIik6IiksKCh0JiYodC5zdGFj
a3x8dCkpKyIiKS5zcGxpdCgiXG4iKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2NvbnNvbGUud2Fybigi
ICAiK2UpfSl9ZnVuY3Rpb24gYShlLHQpe3JldHVybiB0LnNvbWUoZnVuY3Rpb24odCl7cmV0dXJu
IGUgaW5zdGFuY2VvZiB0fSl9dmFyIHU9big1MSkscz1bUmVmZXJlbmNlRXJyb3IsVHlwZUVycm9y
LFJhbmdlRXJyb3JdLGM9ITE7dC5kaXNhYmxlPXIsdC5lbmFibGU9b30sZnVuY3Rpb24oZSx0LG4p
eyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlKXthLmxlbmd0aHx8KGkoKSx1
PSEwKSxhW2EubGVuZ3RoXT1lfWZ1bmN0aW9uIHIoKXtmb3IoO3M8YS5sZW5ndGg7KXt2YXIgZT1z
O2lmKHMrPTEsYVtlXS5jYWxsKCkscz5jKXtmb3IodmFyIHQ9MCxuPWEubGVuZ3RoLXM7dDxuO3Qr
KylhW3RdPWFbdCtzXTthLmxlbmd0aC09cyxzPTB9fWEubGVuZ3RoPTAscz0wLHU9ITF9ZnVuY3Rp
b24gbyhlKXtyZXR1cm4gZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7Y2xlYXJUaW1lb3V0KG4pLGNs
ZWFySW50ZXJ2YWwociksZSgpfXZhciBuPXNldFRpbWVvdXQodCwwKSxyPXNldEludGVydmFsKHQs
NTApfX1lLmV4cG9ydHM9bjt2YXIgaSxhPVtdLHU9ITEscz0wLGM9MTAyNCxsPSJ1bmRlZmluZWQi
IT09dHlwZW9mIHQ/dDpzZWxmLHA9bC5NdXRhdGlvbk9ic2VydmVyfHxsLldlYktpdE11dGF0aW9u
T2JzZXJ2ZXI7aT0iZnVuY3Rpb24iPT09dHlwZW9mIHA/ZnVuY3Rpb24oZSl7dmFyIHQ9MSxuPW5l
dyBwKGUpLHI9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpO3JldHVybiBuLm9ic2VydmUocix7
Y2hhcmFjdGVyRGF0YTohMH0pLGZ1bmN0aW9uKCl7dD0tdCxyLmRhdGE9dH19KHIpOm8ociksbi5y
ZXF1ZXN0Rmx1c2g9aSxuLm1ha2VSZXF1ZXN0Q2FsbEZyb21UaW1lcj1vfSkuY2FsbCh0LG4oMzAp
KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PW5ldyBv
KG8uXzQ0KTtyZXR1cm4gdC5fODM9MSx0Ll8xOD1lLHR9dmFyIG89big1MSk7ZS5leHBvcnRzPW87
dmFyIGk9cighMCksYT1yKCExKSx1PXIobnVsbCkscz1yKHZvaWQgMCksYz1yKDApLGw9cigiIik7
by5yZXNvbHZlPWZ1bmN0aW9uKGUpe2lmKGUgaW5zdGFuY2VvZiBvKXJldHVybiBlO2lmKG51bGw9
PT1lKXJldHVybiB1O2lmKHZvaWQgMD09PWUpcmV0dXJuIHM7aWYoITA9PT1lKXJldHVybiBpO2lm
KCExPT09ZSlyZXR1cm4gYTtpZigwPT09ZSlyZXR1cm4gYztpZigiIj09PWUpcmV0dXJuIGw7aWYo
Im9iamVjdCI9PT10eXBlb2YgZXx8ImZ1bmN0aW9uIj09PXR5cGVvZiBlKXRyeXt2YXIgdD1lLnRo
ZW47aWYoImZ1bmN0aW9uIj09PXR5cGVvZiB0KXJldHVybiBuZXcgbyh0LmJpbmQoZSkpfWNhdGNo
KGUpe3JldHVybiBuZXcgbyhmdW5jdGlvbih0LG4pe24oZSl9KX1yZXR1cm4gcihlKX0sby5hbGw9
ZnVuY3Rpb24oZSl7dmFyIHQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSk7cmV0dXJuIG5l
dyBvKGZ1bmN0aW9uKGUsbil7ZnVuY3Rpb24gcihhLHUpe2lmKHUmJigib2JqZWN0Ij09PXR5cGVv
ZiB1fHwiZnVuY3Rpb24iPT09dHlwZW9mIHUpKXtpZih1IGluc3RhbmNlb2YgbyYmdS50aGVuPT09
by5wcm90b3R5cGUudGhlbil7Zm9yKDszPT09dS5fODM7KXU9dS5fMTg7cmV0dXJuIDE9PT11Ll84
Mz9yKGEsdS5fMTgpOigyPT09dS5fODMmJm4odS5fMTgpLHZvaWQgdS50aGVuKGZ1bmN0aW9uKGUp
e3IoYSxlKX0sbikpfXZhciBzPXUudGhlbjtpZigiZnVuY3Rpb24iPT09dHlwZW9mIHMpe3JldHVy
biB2b2lkIG5ldyBvKHMuYmluZCh1KSkudGhlbihmdW5jdGlvbihlKXtyKGEsZSl9LG4pfX10W2Fd
PXUsMD09PS0taSYmZSh0KX1pZigwPT09dC5sZW5ndGgpcmV0dXJuIGUoW10pO2Zvcih2YXIgaT10
Lmxlbmd0aCxhPTA7YTx0Lmxlbmd0aDthKyspcihhLHRbYV0pfSl9LG8ucmVqZWN0PWZ1bmN0aW9u
KGUpe3JldHVybiBuZXcgbyhmdW5jdGlvbih0LG4pe24oZSl9KX0sby5yYWNlPWZ1bmN0aW9uKGUp
e3JldHVybiBuZXcgbyhmdW5jdGlvbih0LG4pe2UuZm9yRWFjaChmdW5jdGlvbihlKXtvLnJlc29s
dmUoZSkudGhlbih0LG4pfSl9KX0sby5wcm90b3R5cGUuY2F0Y2g9ZnVuY3Rpb24oZSl7cmV0dXJu
IHRoaXMudGhlbihudWxsLGUpfX0sZnVuY3Rpb24oZSx0KXshZnVuY3Rpb24oZSl7InVzZSBzdHJp
Y3QiO2Z1bmN0aW9uIHQoZSl7aWYoInN0cmluZyIhPT10eXBlb2YgZSYmKGU9U3RyaW5nKGUpKSwv
W15hLXowLTlcLSMkJSYnKisuXF5fYHx+XS9pLnRlc3QoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigi
SW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGZpZWxkIG5hbWUiKTtyZXR1cm4gZS50b0xvd2Vy
Q2FzZSgpfWZ1bmN0aW9uIG4oZSl7cmV0dXJuInN0cmluZyIhPT10eXBlb2YgZSYmKGU9U3RyaW5n
KGUpKSxlfWZ1bmN0aW9uIHIoZSl7dmFyIHQ9e25leHQ6ZnVuY3Rpb24oKXt2YXIgdD1lLnNoaWZ0
KCk7cmV0dXJue2RvbmU6dm9pZCAwPT09dCx2YWx1ZTp0fX19O3JldHVybiB5Lml0ZXJhYmxlJiYo
dFtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHR9KSx0fWZ1bmN0aW9uIG8oZSl7
dGhpcy5tYXA9e30sZSBpbnN0YW5jZW9mIG8/ZS5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7dGhpcy5h
cHBlbmQodCxlKX0sdGhpcyk6QXJyYXkuaXNBcnJheShlKT9lLmZvckVhY2goZnVuY3Rpb24oZSl7
dGhpcy5hcHBlbmQoZVswXSxlWzFdKX0sdGhpcyk6ZSYmT2JqZWN0LmdldE93blByb3BlcnR5TmFt
ZXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXt0aGlzLmFwcGVuZCh0LGVbdF0pfSx0aGlzKX1mdW5j
dGlvbiBpKGUpe2lmKGUuYm9keVVzZWQpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJy
b3IoIkFscmVhZHkgcmVhZCIpKTtlLmJvZHlVc2VkPSEwfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIG5l
dyBQcm9taXNlKGZ1bmN0aW9uKHQsbil7ZS5vbmxvYWQ9ZnVuY3Rpb24oKXt0KGUucmVzdWx0KX0s
ZS5vbmVycm9yPWZ1bmN0aW9uKCl7bihlLmVycm9yKX19KX1mdW5jdGlvbiB1KGUpe3ZhciB0PW5l
dyBGaWxlUmVhZGVyLG49YSh0KTtyZXR1cm4gdC5yZWFkQXNBcnJheUJ1ZmZlcihlKSxufWZ1bmN0
aW9uIHMoZSl7dmFyIHQ9bmV3IEZpbGVSZWFkZXIsbj1hKHQpO3JldHVybiB0LnJlYWRBc1RleHQo
ZSksbn1mdW5jdGlvbiBjKGUpe2Zvcih2YXIgdD1uZXcgVWludDhBcnJheShlKSxuPW5ldyBBcnJh
eSh0Lmxlbmd0aCkscj0wO3I8dC5sZW5ndGg7cisrKW5bcl09U3RyaW5nLmZyb21DaGFyQ29kZSh0
W3JdKTtyZXR1cm4gbi5qb2luKCIiKX1mdW5jdGlvbiBsKGUpe2lmKGUuc2xpY2UpcmV0dXJuIGUu
c2xpY2UoMCk7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoZS5ieXRlTGVuZ3RoKTtyZXR1cm4gdC5zZXQo
bmV3IFVpbnQ4QXJyYXkoZSkpLHQuYnVmZmVyfWZ1bmN0aW9uIHAoKXtyZXR1cm4gdGhpcy5ib2R5
VXNlZD0hMSx0aGlzLl9pbml0Qm9keT1mdW5jdGlvbihlKXtpZih0aGlzLl9ib2R5SW5pdD1lLGUp
aWYoInN0cmluZyI9PT10eXBlb2YgZSl0aGlzLl9ib2R5VGV4dD1lO2Vsc2UgaWYoeS5ibG9iJiZC
bG9iLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGUpKXRoaXMuX2JvZHlCbG9iPWU7ZWxzZSBpZih5
LmZvcm1EYXRhJiZGb3JtRGF0YS5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihlKSl0aGlzLl9ib2R5
Rm9ybURhdGE9ZTtlbHNlIGlmKHkuc2VhcmNoUGFyYW1zJiZVUkxTZWFyY2hQYXJhbXMucHJvdG90
eXBlLmlzUHJvdG90eXBlT2YoZSkpdGhpcy5fYm9keVRleHQ9ZS50b1N0cmluZygpO2Vsc2UgaWYo
eS5hcnJheUJ1ZmZlciYmeS5ibG9iJiZiKGUpKXRoaXMuX2JvZHlBcnJheUJ1ZmZlcj1sKGUuYnVm
ZmVyKSx0aGlzLl9ib2R5SW5pdD1uZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSk7ZWxz
ZXtpZigheS5hcnJheUJ1ZmZlcnx8IUFycmF5QnVmZmVyLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9m
KGUpJiYhXyhlKSl0aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIEJvZHlJbml0IHR5cGUiKTt0
aGlzLl9ib2R5QXJyYXlCdWZmZXI9bChlKX1lbHNlIHRoaXMuX2JvZHlUZXh0PSIiO3RoaXMuaGVh
ZGVycy5nZXQoImNvbnRlbnQtdHlwZSIpfHwoInN0cmluZyI9PT10eXBlb2YgZT90aGlzLmhlYWRl
cnMuc2V0KCJjb250ZW50LXR5cGUiLCJ0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgiKTp0aGlzLl9i
b2R5QmxvYiYmdGhpcy5fYm9keUJsb2IudHlwZT90aGlzLmhlYWRlcnMuc2V0KCJjb250ZW50LXR5
cGUiLHRoaXMuX2JvZHlCbG9iLnR5cGUpOnkuc2VhcmNoUGFyYW1zJiZVUkxTZWFyY2hQYXJhbXMu
cHJvdG90eXBlLmlzUHJvdG90eXBlT2YoZSkmJnRoaXMuaGVhZGVycy5zZXQoImNvbnRlbnQtdHlw
ZSIsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04IikpfSx5
LmJsb2ImJih0aGlzLmJsb2I9ZnVuY3Rpb24oKXt2YXIgZT1pKHRoaXMpO2lmKGUpcmV0dXJuIGU7
aWYodGhpcy5fYm9keUJsb2IpcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QmxvYik7
aWYodGhpcy5fYm9keUFycmF5QnVmZmVyKXJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2Io
W3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pKTtpZih0aGlzLl9ib2R5Rm9ybURhdGEpdGhyb3cgbmV3
IEVycm9yKCJjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIGJsb2IiKTtyZXR1cm4gUHJv
bWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5VGV4dF0pKX0sdGhpcy5hcnJheUJ1ZmZl
cj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ib2R5QXJyYXlCdWZmZXI/aSh0aGlzKXx8UHJvbWlz
ZS5yZXNvbHZlKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcik6dGhpcy5ibG9iKCkudGhlbih1KX0pLHRo
aXMudGV4dD1mdW5jdGlvbigpe3ZhciBlPWkodGhpcyk7aWYoZSlyZXR1cm4gZTtpZih0aGlzLl9i
b2R5QmxvYilyZXR1cm4gcyh0aGlzLl9ib2R5QmxvYik7aWYodGhpcy5fYm9keUFycmF5QnVmZmVy
KXJldHVybiBQcm9taXNlLnJlc29sdmUoYyh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKTtpZih0aGlz
Ll9ib2R5Rm9ybURhdGEpdGhyb3cgbmV3IEVycm9yKCJjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBi
b2R5IGFzIHRleHQiKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlUZXh0KX0seS5m
b3JtRGF0YSYmKHRoaXMuZm9ybURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0KCkudGhl
bihoKX0pLHRoaXMuanNvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHQoKS50aGVuKEpTT04u
cGFyc2UpfSx0aGlzfWZ1bmN0aW9uIGYoZSl7dmFyIHQ9ZS50b1VwcGVyQ2FzZSgpO3JldHVybiBD
LmluZGV4T2YodCk+LTE/dDplfWZ1bmN0aW9uIGQoZSx0KXt0PXR8fHt9O3ZhciBuPXQuYm9keTtp
ZihlIGluc3RhbmNlb2YgZCl7aWYoZS5ib2R5VXNlZCl0aHJvdyBuZXcgVHlwZUVycm9yKCJBbHJl
YWR5IHJlYWQiKTt0aGlzLnVybD1lLnVybCx0aGlzLmNyZWRlbnRpYWxzPWUuY3JlZGVudGlhbHMs
dC5oZWFkZXJzfHwodGhpcy5oZWFkZXJzPW5ldyBvKGUuaGVhZGVycykpLHRoaXMubWV0aG9kPWUu
bWV0aG9kLHRoaXMubW9kZT1lLm1vZGUsbnx8bnVsbD09ZS5fYm9keUluaXR8fChuPWUuX2JvZHlJ
bml0LGUuYm9keVVzZWQ9ITApfWVsc2UgdGhpcy51cmw9U3RyaW5nKGUpO2lmKHRoaXMuY3JlZGVu
dGlhbHM9dC5jcmVkZW50aWFsc3x8dGhpcy5jcmVkZW50aWFsc3x8Im9taXQiLCF0LmhlYWRlcnMm
JnRoaXMuaGVhZGVyc3x8KHRoaXMuaGVhZGVycz1uZXcgbyh0LmhlYWRlcnMpKSx0aGlzLm1ldGhv
ZD1mKHQubWV0aG9kfHx0aGlzLm1ldGhvZHx8IkdFVCIpLHRoaXMubW9kZT10Lm1vZGV8fHRoaXMu
bW9kZXx8bnVsbCx0aGlzLnJlZmVycmVyPW51bGwsKCJHRVQiPT09dGhpcy5tZXRob2R8fCJIRUFE
Ij09PXRoaXMubWV0aG9kKSYmbil0aHJvdyBuZXcgVHlwZUVycm9yKCJCb2R5IG5vdCBhbGxvd2Vk
IGZvciBHRVQgb3IgSEVBRCByZXF1ZXN0cyIpO3RoaXMuX2luaXRCb2R5KG4pfWZ1bmN0aW9uIGgo
ZSl7dmFyIHQ9bmV3IEZvcm1EYXRhO3JldHVybiBlLnRyaW0oKS5zcGxpdCgiJiIpLmZvckVhY2go
ZnVuY3Rpb24oZSl7aWYoZSl7dmFyIG49ZS5zcGxpdCgiPSIpLHI9bi5zaGlmdCgpLnJlcGxhY2Uo
L1wrL2csIiAiKSxvPW4uam9pbigiPSIpLnJlcGxhY2UoL1wrL2csIiAiKTt0LmFwcGVuZChkZWNv
ZGVVUklDb21wb25lbnQociksZGVjb2RlVVJJQ29tcG9uZW50KG8pKX19KSx0fWZ1bmN0aW9uIG0o
ZSl7dmFyIHQ9bmV3IG87cmV0dXJuIGUuc3BsaXQoL1xyP1xuLykuZm9yRWFjaChmdW5jdGlvbihl
KXt2YXIgbj1lLnNwbGl0KCI6Iikscj1uLnNoaWZ0KCkudHJpbSgpO2lmKHIpe3ZhciBvPW4uam9p
bigiOiIpLnRyaW0oKTt0LmFwcGVuZChyLG8pfX0pLHR9ZnVuY3Rpb24gdihlLHQpe3R8fCh0PXt9
KSx0aGlzLnR5cGU9ImRlZmF1bHQiLHRoaXMuc3RhdHVzPSJzdGF0dXMiaW4gdD90LnN0YXR1czoy
MDAsdGhpcy5vaz10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDAsdGhpcy5zdGF0dXNU
ZXh0PSJzdGF0dXNUZXh0ImluIHQ/dC5zdGF0dXNUZXh0OiJPSyIsdGhpcy5oZWFkZXJzPW5ldyBv
KHQuaGVhZGVycyksdGhpcy51cmw9dC51cmx8fCIiLHRoaXMuX2luaXRCb2R5KGUpfWlmKCFlLmZl
dGNoKXt2YXIgeT17c2VhcmNoUGFyYW1zOiJVUkxTZWFyY2hQYXJhbXMiaW4gZSxpdGVyYWJsZToi
U3ltYm9sImluIGUmJiJpdGVyYXRvciJpbiBTeW1ib2wsYmxvYjoiRmlsZVJlYWRlciJpbiBlJiYi
QmxvYiJpbiBlJiZmdW5jdGlvbigpe3RyeXtyZXR1cm4gbmV3IEJsb2IsITB9Y2F0Y2goZSl7cmV0
dXJuITF9fSgpLGZvcm1EYXRhOiJGb3JtRGF0YSJpbiBlLGFycmF5QnVmZmVyOiJBcnJheUJ1ZmZl
ciJpbiBlfTtpZih5LmFycmF5QnVmZmVyKXZhciBnPVsiW29iamVjdCBJbnQ4QXJyYXldIiwiW29i
amVjdCBVaW50OEFycmF5XSIsIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIiwiW29iamVjdCBJ
bnQxNkFycmF5XSIsIltvYmplY3QgVWludDE2QXJyYXldIiwiW29iamVjdCBJbnQzMkFycmF5XSIs
IltvYmplY3QgVWludDMyQXJyYXldIiwiW29iamVjdCBGbG9hdDMyQXJyYXldIiwiW29iamVjdCBG
bG9hdDY0QXJyYXldIl0sYj1mdW5jdGlvbihlKXtyZXR1cm4gZSYmRGF0YVZpZXcucHJvdG90eXBl
LmlzUHJvdG90eXBlT2YoZSl9LF89QXJyYXlCdWZmZXIuaXNWaWV3fHxmdW5jdGlvbihlKXtyZXR1
cm4gZSYmZy5pbmRleE9mKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSk+LTF9O28u
cHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbihlLHIpe2U9dChlKSxyPW4ocik7dmFyIG89dGhpcy5t
YXBbZV07dGhpcy5tYXBbZV09bz9vKyIsIityOnJ9LG8ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlv
bihlKXtkZWxldGUgdGhpcy5tYXBbdChlKV19LG8ucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXty
ZXR1cm4gZT10KGUpLHRoaXMuaGFzKGUpP3RoaXMubWFwW2VdOm51bGx9LG8ucHJvdG90eXBlLmhh
cz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5tYXAuaGFzT3duUHJvcGVydHkodChlKSl9LG8ucHJv
dG90eXBlLnNldD1mdW5jdGlvbihlLHIpe3RoaXMubWFwW3QoZSldPW4ocil9LG8ucHJvdG90eXBl
LmZvckVhY2g9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdGhpcy5tYXApdGhpcy5tYXAuaGFz
T3duUHJvcGVydHkobikmJmUuY2FsbCh0LHRoaXMubWFwW25dLG4sdGhpcyl9LG8ucHJvdG90eXBl
LmtleXM9ZnVuY3Rpb24oKXt2YXIgZT1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHQs
bil7ZS5wdXNoKG4pfSkscihlKX0sby5wcm90b3R5cGUudmFsdWVzPWZ1bmN0aW9uKCl7dmFyIGU9
W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbih0KXtlLnB1c2godCl9KSxyKGUpfSxvLnBy
b3RvdHlwZS5lbnRyaWVzPWZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuIHRoaXMuZm9yRWFjaChm
dW5jdGlvbih0LG4pe2UucHVzaChbbix0XSl9KSxyKGUpfSx5Lml0ZXJhYmxlJiYoby5wcm90b3R5
cGVbU3ltYm9sLml0ZXJhdG9yXT1vLnByb3RvdHlwZS5lbnRyaWVzKTt2YXIgQz1bIkRFTEVURSIs
IkdFVCIsIkhFQUQiLCJPUFRJT05TIiwiUE9TVCIsIlBVVCJdO2QucHJvdG90eXBlLmNsb25lPWZ1
bmN0aW9uKCl7cmV0dXJuIG5ldyBkKHRoaXMse2JvZHk6dGhpcy5fYm9keUluaXR9KX0scC5jYWxs
KGQucHJvdG90eXBlKSxwLmNhbGwodi5wcm90b3R5cGUpLHYucHJvdG90eXBlLmNsb25lPWZ1bmN0
aW9uKCl7cmV0dXJuIG5ldyB2KHRoaXMuX2JvZHlJbml0LHtzdGF0dXM6dGhpcy5zdGF0dXMsc3Rh
dHVzVGV4dDp0aGlzLnN0YXR1c1RleHQsaGVhZGVyczpuZXcgbyh0aGlzLmhlYWRlcnMpLHVybDp0
aGlzLnVybH0pfSx2LmVycm9yPWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHYobnVsbCx7c3RhdHVzOjAs
c3RhdHVzVGV4dDoiIn0pO3JldHVybiBlLnR5cGU9ImVycm9yIixlfTt2YXIgdz1bMzAxLDMwMiwz
MDMsMzA3LDMwOF07di5yZWRpcmVjdD1mdW5jdGlvbihlLHQpe2lmKC0xPT09dy5pbmRleE9mKHQp
KXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHN0YXR1cyBjb2RlIik7cmV0dXJuIG5ldyB2
KG51bGwse3N0YXR1czp0LGhlYWRlcnM6e2xvY2F0aW9uOmV9fSl9LGUuSGVhZGVycz1vLGUuUmVx
dWVzdD1kLGUuUmVzcG9uc2U9dixlLmZldGNoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBQcm9t
aXNlKGZ1bmN0aW9uKG4scil7dmFyIG89bmV3IGQoZSx0KSxpPW5ldyBYTUxIdHRwUmVxdWVzdDtp
Lm9ubG9hZD1mdW5jdGlvbigpe3ZhciBlPXtzdGF0dXM6aS5zdGF0dXMsc3RhdHVzVGV4dDppLnN0
YXR1c1RleHQsaGVhZGVyczptKGkuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCl8fCIiKX07ZS51cmw9
InJlc3BvbnNlVVJMImluIGk/aS5yZXNwb25zZVVSTDplLmhlYWRlcnMuZ2V0KCJYLVJlcXVlc3Qt
VVJMIik7dmFyIHQ9InJlc3BvbnNlImluIGk/aS5yZXNwb25zZTppLnJlc3BvbnNlVGV4dDtuKG5l
dyB2KHQsZSkpfSxpLm9uZXJyb3I9ZnVuY3Rpb24oKXtyKG5ldyBUeXBlRXJyb3IoIk5ldHdvcmsg
cmVxdWVzdCBmYWlsZWQiKSl9LGkub250aW1lb3V0PWZ1bmN0aW9uKCl7cihuZXcgVHlwZUVycm9y
KCJOZXR3b3JrIHJlcXVlc3QgZmFpbGVkIikpfSxpLm9wZW4oby5tZXRob2Qsby51cmwsITApLCJp
bmNsdWRlIj09PW8uY3JlZGVudGlhbHMmJihpLndpdGhDcmVkZW50aWFscz0hMCksInJlc3BvbnNl
VHlwZSJpbiBpJiZ5LmJsb2ImJihpLnJlc3BvbnNlVHlwZT0iYmxvYiIpLG8uaGVhZGVycy5mb3JF
YWNoKGZ1bmN0aW9uKGUsdCl7aS5zZXRSZXF1ZXN0SGVhZGVyKHQsZSl9KSxpLnNlbmQoInVuZGVm
aW5lZCI9PT10eXBlb2Ygby5fYm9keUluaXQ/bnVsbDpvLl9ib2R5SW5pdCl9KX0sZS5mZXRjaC5w
b2x5ZmlsbD0hMH19KCJ1bmRlZmluZWQiIT09dHlwZW9mIHNlbGY/c2VsZjp0aGlzKX0sZnVuY3Rp
b24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVs
ZSIse3ZhbHVlOiEwfSk7dmFyIHI9big5KSxvPW4ubihyKSxpPW4oMTE4KSxhPShuLm4oaSksbigy
OSkpLHU9big4OCkscz1uKDIyMiksYz1uKDIyOCksbD1uKDIzMCkscD0obi5uKGwpLE9iamVjdChh
LmMpKGMuYSkpO09iamVjdChpLnJlbmRlcikoby5hLmNyZWF0ZUVsZW1lbnQodS5hLHtzdG9yZTpw
fSxvLmEuY3JlYXRlRWxlbWVudChzLmEsbnVsbCkpLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJy
b290IikpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWZ1bmN0aW9uKCl7fTtl
LmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3Jl
dHVybigiIitlKS5yZXBsYWNlKF8sIiQmLyIpfWZ1bmN0aW9uIG8oZSx0KXt0aGlzLmZ1bmM9ZSx0
aGlzLmNvbnRleHQ9dCx0aGlzLmNvdW50PTB9ZnVuY3Rpb24gaShlLHQsbil7dmFyIHI9ZS5mdW5j
LG89ZS5jb250ZXh0O3IuY2FsbChvLHQsZS5jb3VudCsrKX1mdW5jdGlvbiBhKGUsdCxuKXtpZihu
dWxsPT1lKXJldHVybiBlO3ZhciByPW8uZ2V0UG9vbGVkKHQsbik7eShlLGksciksby5yZWxlYXNl
KHIpfWZ1bmN0aW9uIHUoZSx0LG4scil7dGhpcy5yZXN1bHQ9ZSx0aGlzLmtleVByZWZpeD10LHRo
aXMuZnVuYz1uLHRoaXMuY29udGV4dD1yLHRoaXMuY291bnQ9MH1mdW5jdGlvbiBzKGUsdCxuKXt2
YXIgbz1lLnJlc3VsdCxpPWUua2V5UHJlZml4LGE9ZS5mdW5jLHU9ZS5jb250ZXh0LHM9YS5jYWxs
KHUsdCxlLmNvdW50KyspO0FycmF5LmlzQXJyYXkocyk/YyhzLG8sbix2LnRoYXRSZXR1cm5zQXJn
dW1lbnQpOm51bGwhPXMmJihtLmlzVmFsaWRFbGVtZW50KHMpJiYocz1tLmNsb25lQW5kUmVwbGFj
ZUtleShzLGkrKCFzLmtleXx8dCYmdC5rZXk9PT1zLmtleT8iIjpyKHMua2V5KSsiLyIpK24pKSxv
LnB1c2gocykpfWZ1bmN0aW9uIGMoZSx0LG4sbyxpKXt2YXIgYT0iIjtudWxsIT1uJiYoYT1yKG4p
KyIvIik7dmFyIGM9dS5nZXRQb29sZWQodCxhLG8saSk7eShlLHMsYyksdS5yZWxlYXNlKGMpfWZ1
bmN0aW9uIGwoZSx0LG4pe2lmKG51bGw9PWUpcmV0dXJuIGU7dmFyIHI9W107cmV0dXJuIGMoZSxy
LG51bGwsdCxuKSxyfWZ1bmN0aW9uIHAoZSx0LG4pe3JldHVybiBudWxsfWZ1bmN0aW9uIGYoZSx0
KXtyZXR1cm4geShlLHAsbnVsbCl9ZnVuY3Rpb24gZChlKXt2YXIgdD1bXTtyZXR1cm4gYyhlLHQs
bnVsbCx2LnRoYXRSZXR1cm5zQXJndW1lbnQpLHR9dmFyIGg9bigxMDYpLG09bigxNCksdj1uKDYp
LHk9bigxMDcpLGc9aC50d29Bcmd1bWVudFBvb2xlcixiPWguZm91ckFyZ3VtZW50UG9vbGVyLF89
L1wvKy9nO28ucHJvdG90eXBlLmRlc3RydWN0b3I9ZnVuY3Rpb24oKXt0aGlzLmZ1bmM9bnVsbCx0
aGlzLmNvbnRleHQ9bnVsbCx0aGlzLmNvdW50PTB9LGguYWRkUG9vbGluZ1RvKG8sZyksdS5wcm90
b3R5cGUuZGVzdHJ1Y3Rvcj1mdW5jdGlvbigpe3RoaXMucmVzdWx0PW51bGwsdGhpcy5rZXlQcmVm
aXg9bnVsbCx0aGlzLmZ1bmM9bnVsbCx0aGlzLmNvbnRleHQ9bnVsbCx0aGlzLmNvdW50PTB9LGgu
YWRkUG9vbGluZ1RvKHUsYik7dmFyIEM9e2ZvckVhY2g6YSxtYXA6bCxtYXBJbnRvV2l0aEtleVBy
ZWZpeEludGVybmFsOmMsY291bnQ6Zix0b0FycmF5OmR9O2UuZXhwb3J0cz1DfSxmdW5jdGlvbihl
LHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTgpLG89KG4oMCksZnVuY3Rpb24oZSl7dmFyIHQ9
dGhpcztpZih0Lmluc3RhbmNlUG9vbC5sZW5ndGgpe3ZhciBuPXQuaW5zdGFuY2VQb29sLnBvcCgp
O3JldHVybiB0LmNhbGwobixlKSxufXJldHVybiBuZXcgdChlKX0pLGk9ZnVuY3Rpb24oZSx0KXt2
YXIgbj10aGlzO2lmKG4uaW5zdGFuY2VQb29sLmxlbmd0aCl7dmFyIHI9bi5pbnN0YW5jZVBvb2wu
cG9wKCk7cmV0dXJuIG4uY2FsbChyLGUsdCkscn1yZXR1cm4gbmV3IG4oZSx0KX0sYT1mdW5jdGlv
bihlLHQsbil7dmFyIHI9dGhpcztpZihyLmluc3RhbmNlUG9vbC5sZW5ndGgpe3ZhciBvPXIuaW5z
dGFuY2VQb29sLnBvcCgpO3JldHVybiByLmNhbGwobyxlLHQsbiksb31yZXR1cm4gbmV3IHIoZSx0
LG4pfSx1PWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPXRoaXM7aWYoby5pbnN0YW5jZVBvb2wubGVu
Z3RoKXt2YXIgaT1vLmluc3RhbmNlUG9vbC5wb3AoKTtyZXR1cm4gby5jYWxsKGksZSx0LG4sciks
aX1yZXR1cm4gbmV3IG8oZSx0LG4scil9LHM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztlIGluc3Rh
bmNlb2YgdHx8cigiMjUiKSxlLmRlc3RydWN0b3IoKSx0Lmluc3RhbmNlUG9vbC5sZW5ndGg8dC5w
b29sU2l6ZSYmdC5pbnN0YW5jZVBvb2wucHVzaChlKX0sYz1vLGw9ZnVuY3Rpb24oZSx0KXt2YXIg
bj1lO3JldHVybiBuLmluc3RhbmNlUG9vbD1bXSxuLmdldFBvb2xlZD10fHxjLG4ucG9vbFNpemV8
fChuLnBvb2xTaXplPTEwKSxuLnJlbGVhc2U9cyxufSxwPXthZGRQb29saW5nVG86bCxvbmVBcmd1
bWVudFBvb2xlcjpvLHR3b0FyZ3VtZW50UG9vbGVyOmksdGhyZWVBcmd1bWVudFBvb2xlcjphLGZv
dXJBcmd1bWVudFBvb2xlcjp1fTtlLmV4cG9ydHM9cH0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3Ry
aWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIGUmJiJvYmplY3QiPT09dHlwZW9mIGUmJm51bGwh
PWUua2V5P2MuZXNjYXBlKGUua2V5KTp0LnRvU3RyaW5nKDM2KX1mdW5jdGlvbiBvKGUsdCxuLGkp
e3ZhciBmPXR5cGVvZiBlO2lmKCJ1bmRlZmluZWQiIT09ZiYmImJvb2xlYW4iIT09Znx8KGU9bnVs
bCksbnVsbD09PWV8fCJzdHJpbmciPT09Znx8Im51bWJlciI9PT1mfHwib2JqZWN0Ij09PWYmJmUu
JCR0eXBlb2Y9PT11KXJldHVybiBuKGksZSwiIj09PXQ/bCtyKGUsMCk6dCksMTt2YXIgZCxoLG09
MCx2PSIiPT09dD9sOnQrcDtpZihBcnJheS5pc0FycmF5KGUpKWZvcih2YXIgeT0wO3k8ZS5sZW5n
dGg7eSsrKWQ9ZVt5XSxoPXYrcihkLHkpLG0rPW8oZCxoLG4saSk7ZWxzZXt2YXIgZz1zKGUpO2lm
KGcpe3ZhciBiLF89Zy5jYWxsKGUpO2lmKGchPT1lLmVudHJpZXMpZm9yKHZhciBDPTA7IShiPV8u
bmV4dCgpKS5kb25lOylkPWIudmFsdWUsaD12K3IoZCxDKyspLG0rPW8oZCxoLG4saSk7ZWxzZSBm
b3IoOyEoYj1fLm5leHQoKSkuZG9uZTspe3ZhciB3PWIudmFsdWU7dyYmKGQ9d1sxXSxoPXYrYy5l
c2NhcGUod1swXSkrcCtyKGQsMCksbSs9byhkLGgsbixpKSl9fWVsc2UgaWYoIm9iamVjdCI9PT1m
KXt2YXIgRT0iIix4PVN0cmluZyhlKTthKCIzMSIsIltvYmplY3QgT2JqZWN0XSI9PT14PyJvYmpl
Y3Qgd2l0aCBrZXlzIHsiK09iamVjdC5rZXlzKGUpLmpvaW4oIiwgIikrIn0iOngsRSl9fXJldHVy
biBtfWZ1bmN0aW9uIGkoZSx0LG4pe3JldHVybiBudWxsPT1lPzA6byhlLCIiLHQsbil9dmFyIGE9
bigxOCksdT0obigxMCksbig1NSkpLHM9bigxMDgpLGM9KG4oMCksbigxMDkpKSxsPShuKDEpLCIu
IikscD0iOiI7ZS5leHBvcnRzPWl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rp
b24gcihlKXt2YXIgdD1lJiYobyYmZVtvXXx8ZVtpXSk7aWYoImZ1bmN0aW9uIj09PXR5cGVvZiB0
KXJldHVybiB0fXZhciBvPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0
b3IsaT0iQEBpdGVyYXRvciI7ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmlj
dCI7ZnVuY3Rpb24gcihlKXt2YXIgdD17Ij0iOiI9MCIsIjoiOiI9MiJ9O3JldHVybiIkIisoIiIr
ZSkucmVwbGFjZSgvWz06XS9nLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9ZnVuY3Rpb24gbyhl
KXt2YXIgdD0vKD0wfD0yKS9nLG49eyI9MCI6Ij0iLCI9MiI6IjoifTtyZXR1cm4oIiIrKCIuIj09
PWVbMF0mJiIkIj09PWVbMV0/ZS5zdWJzdHJpbmcoMik6ZS5zdWJzdHJpbmcoMSkpKS5yZXBsYWNl
KHQsZnVuY3Rpb24oZSl7cmV0dXJuIG5bZV19KX12YXIgaT17ZXNjYXBlOnIsdW5lc2NhcGU6b307
ZS5leHBvcnRzPWl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNCksbz1y
LmNyZWF0ZUZhY3RvcnksaT17YTpvKCJhIiksYWJicjpvKCJhYmJyIiksYWRkcmVzczpvKCJhZGRy
ZXNzIiksYXJlYTpvKCJhcmVhIiksYXJ0aWNsZTpvKCJhcnRpY2xlIiksYXNpZGU6bygiYXNpZGUi
KSxhdWRpbzpvKCJhdWRpbyIpLGI6bygiYiIpLGJhc2U6bygiYmFzZSIpLGJkaTpvKCJiZGkiKSxi
ZG86bygiYmRvIiksYmlnOm8oImJpZyIpLGJsb2NrcXVvdGU6bygiYmxvY2txdW90ZSIpLGJvZHk6
bygiYm9keSIpLGJyOm8oImJyIiksYnV0dG9uOm8oImJ1dHRvbiIpLGNhbnZhczpvKCJjYW52YXMi
KSxjYXB0aW9uOm8oImNhcHRpb24iKSxjaXRlOm8oImNpdGUiKSxjb2RlOm8oImNvZGUiKSxjb2w6
bygiY29sIiksY29sZ3JvdXA6bygiY29sZ3JvdXAiKSxkYXRhOm8oImRhdGEiKSxkYXRhbGlzdDpv
KCJkYXRhbGlzdCIpLGRkOm8oImRkIiksZGVsOm8oImRlbCIpLGRldGFpbHM6bygiZGV0YWlscyIp
LGRmbjpvKCJkZm4iKSxkaWFsb2c6bygiZGlhbG9nIiksZGl2Om8oImRpdiIpLGRsOm8oImRsIiks
ZHQ6bygiZHQiKSxlbTpvKCJlbSIpLGVtYmVkOm8oImVtYmVkIiksZmllbGRzZXQ6bygiZmllbGRz
ZXQiKSxmaWdjYXB0aW9uOm8oImZpZ2NhcHRpb24iKSxmaWd1cmU6bygiZmlndXJlIiksZm9vdGVy
Om8oImZvb3RlciIpLGZvcm06bygiZm9ybSIpLGgxOm8oImgxIiksaDI6bygiaDIiKSxoMzpvKCJo
MyIpLGg0Om8oImg0IiksaDU6bygiaDUiKSxoNjpvKCJoNiIpLGhlYWQ6bygiaGVhZCIpLGhlYWRl
cjpvKCJoZWFkZXIiKSxoZ3JvdXA6bygiaGdyb3VwIiksaHI6bygiaHIiKSxodG1sOm8oImh0bWwi
KSxpOm8oImkiKSxpZnJhbWU6bygiaWZyYW1lIiksaW1nOm8oImltZyIpLGlucHV0Om8oImlucHV0
IiksaW5zOm8oImlucyIpLGtiZDpvKCJrYmQiKSxrZXlnZW46bygia2V5Z2VuIiksbGFiZWw6bygi
bGFiZWwiKSxsZWdlbmQ6bygibGVnZW5kIiksbGk6bygibGkiKSxsaW5rOm8oImxpbmsiKSxtYWlu
Om8oIm1haW4iKSxtYXA6bygibWFwIiksbWFyazpvKCJtYXJrIiksbWVudTpvKCJtZW51IiksbWVu
dWl0ZW06bygibWVudWl0ZW0iKSxtZXRhOm8oIm1ldGEiKSxtZXRlcjpvKCJtZXRlciIpLG5hdjpv
KCJuYXYiKSxub3NjcmlwdDpvKCJub3NjcmlwdCIpLG9iamVjdDpvKCJvYmplY3QiKSxvbDpvKCJv
bCIpLG9wdGdyb3VwOm8oIm9wdGdyb3VwIiksb3B0aW9uOm8oIm9wdGlvbiIpLG91dHB1dDpvKCJv
dXRwdXQiKSxwOm8oInAiKSxwYXJhbTpvKCJwYXJhbSIpLHBpY3R1cmU6bygicGljdHVyZSIpLHBy
ZTpvKCJwcmUiKSxwcm9ncmVzczpvKCJwcm9ncmVzcyIpLHE6bygicSIpLHJwOm8oInJwIikscnQ6
bygicnQiKSxydWJ5Om8oInJ1YnkiKSxzOm8oInMiKSxzYW1wOm8oInNhbXAiKSxzY3JpcHQ6bygi
c2NyaXB0Iiksc2VjdGlvbjpvKCJzZWN0aW9uIiksc2VsZWN0Om8oInNlbGVjdCIpLHNtYWxsOm8o
InNtYWxsIiksc291cmNlOm8oInNvdXJjZSIpLHNwYW46bygic3BhbiIpLHN0cm9uZzpvKCJzdHJv
bmciKSxzdHlsZTpvKCJzdHlsZSIpLHN1YjpvKCJzdWIiKSxzdW1tYXJ5Om8oInN1bW1hcnkiKSxz
dXA6bygic3VwIiksdGFibGU6bygidGFibGUiKSx0Ym9keTpvKCJ0Ym9keSIpLHRkOm8oInRkIiks
dGV4dGFyZWE6bygidGV4dGFyZWEiKSx0Zm9vdDpvKCJ0Zm9vdCIpLHRoOm8oInRoIiksdGhlYWQ6
bygidGhlYWQiKSx0aW1lOm8oInRpbWUiKSx0aXRsZTpvKCJ0aXRsZSIpLHRyOm8oInRyIiksdHJh
Y2s6bygidHJhY2siKSx1Om8oInUiKSx1bDpvKCJ1bCIpLHZhcjpvKCJ2YXIiKSx2aWRlbzpvKCJ2
aWRlbyIpLHdicjpvKCJ3YnIiKSxjaXJjbGU6bygiY2lyY2xlIiksY2xpcFBhdGg6bygiY2xpcFBh
dGgiKSxkZWZzOm8oImRlZnMiKSxlbGxpcHNlOm8oImVsbGlwc2UiKSxnOm8oImciKSxpbWFnZTpv
KCJpbWFnZSIpLGxpbmU6bygibGluZSIpLGxpbmVhckdyYWRpZW50Om8oImxpbmVhckdyYWRpZW50
IiksbWFzazpvKCJtYXNrIikscGF0aDpvKCJwYXRoIikscGF0dGVybjpvKCJwYXR0ZXJuIikscG9s
eWdvbjpvKCJwb2x5Z29uIikscG9seWxpbmU6bygicG9seWxpbmUiKSxyYWRpYWxHcmFkaWVudDpv
KCJyYWRpYWxHcmFkaWVudCIpLHJlY3Q6bygicmVjdCIpLHN0b3A6bygic3RvcCIpLHN2ZzpvKCJz
dmciKSx0ZXh0Om8oInRleHQiKSx0c3BhbjpvKCJ0c3BhbiIpfTtlLmV4cG9ydHM9aX0sZnVuY3Rp
b24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0KSxvPXIuaXNWYWxpZEVsZW1lbnQsaT1u
KDU2KTtlLmV4cG9ydHM9aShvKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1u
KDYpLG89bigwKSxpPW4oMSksYT1uKDU3KSx1PW4oMTEzKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0
KXtmdW5jdGlvbiBuKGUpe3ZhciB0PWUmJih4JiZlW3hdfHxlW1RdKTtpZigiZnVuY3Rpb24iPT09
dHlwZW9mIHQpcmV0dXJuIHR9ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBlPT09dD8wIT09ZXx8MS9l
PT09MS90OmUhPT1lJiZ0IT09dH1mdW5jdGlvbiBjKGUpe3RoaXMubWVzc2FnZT1lLHRoaXMuc3Rh
Y2s9IiJ9ZnVuY3Rpb24gbChlKXtmdW5jdGlvbiBuKG4scixpLHUscyxsLHApe2lmKHU9dXx8UCxs
PWx8fGkscCE9PWEpaWYodClvKCExLCJDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVj
dGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiBVc2UgYFBy
b3BUeXBlcy5jaGVja1Byb3BUeXBlcygpYCB0byBjYWxsIHRoZW0uIFJlYWQgbW9yZSBhdCBodHRw
Oi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMiKTtlbHNlO3JldHVybiBudWxsPT1yW2ldP24/
bmV3IGMobnVsbD09PXJbaV0/IlRoZSAiK3MrIiBgIitsKyJgIGlzIG1hcmtlZCBhcyByZXF1aXJl
ZCBpbiBgIit1KyJgLCBidXQgaXRzIHZhbHVlIGlzIGBudWxsYC4iOiJUaGUgIitzKyIgYCIrbCsi
YCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gYCIrdSsiYCwgYnV0IGl0cyB2YWx1ZSBpcyBgdW5k
ZWZpbmVkYC4iKTpudWxsOmUocixpLHUscyxsKX12YXIgcj1uLmJpbmQobnVsbCwhMSk7cmV0dXJu
IHIuaXNSZXF1aXJlZD1uLmJpbmQobnVsbCwhMCkscn1mdW5jdGlvbiBwKGUpe2Z1bmN0aW9uIHQo
dCxuLHIsbyxpLGEpe3ZhciB1PXRbbl07aWYoXyh1KSE9PWUpcmV0dXJuIG5ldyBjKCJJbnZhbGlk
ICIrbysiIGAiK2krImAgb2YgdHlwZSBgIitDKHUpKyJgIHN1cHBsaWVkIHRvIGAiK3IrImAsIGV4
cGVjdGVkIGAiK2UrImAuIik7cmV0dXJuIG51bGx9cmV0dXJuIGwodCl9ZnVuY3Rpb24gZihlKXtm
dW5jdGlvbiB0KHQsbixyLG8saSl7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiBlKXJldHVybiBuZXcg
YygiUHJvcGVydHkgYCIraSsiYCBvZiBjb21wb25lbnQgYCIrcisiYCBoYXMgaW52YWxpZCBQcm9w
VHlwZSBub3RhdGlvbiBpbnNpZGUgYXJyYXlPZi4iKTt2YXIgdT10W25dO2lmKCFBcnJheS5pc0Fy
cmF5KHUpKXtyZXR1cm4gbmV3IGMoIkludmFsaWQgIitvKyIgYCIraSsiYCBvZiB0eXBlIGAiK18o
dSkrImAgc3VwcGxpZWQgdG8gYCIrcisiYCwgZXhwZWN0ZWQgYW4gYXJyYXkuIil9Zm9yKHZhciBz
PTA7czx1Lmxlbmd0aDtzKyspe3ZhciBsPWUodSxzLHIsbyxpKyJbIitzKyJdIixhKTtpZihsIGlu
c3RhbmNlb2YgRXJyb3IpcmV0dXJuIGx9cmV0dXJuIG51bGx9cmV0dXJuIGwodCl9ZnVuY3Rpb24g
ZChlKXtmdW5jdGlvbiB0KHQsbixyLG8saSl7aWYoISh0W25daW5zdGFuY2VvZiBlKSl7dmFyIGE9
ZS5uYW1lfHxQO3JldHVybiBuZXcgYygiSW52YWxpZCAiK28rIiBgIitpKyJgIG9mIHR5cGUgYCIr
RSh0W25dKSsiYCBzdXBwbGllZCB0byBgIityKyJgLCBleHBlY3RlZCBpbnN0YW5jZSBvZiBgIith
KyJgLiIpfXJldHVybiBudWxsfXJldHVybiBsKHQpfWZ1bmN0aW9uIGgoZSl7ZnVuY3Rpb24gdCh0
LG4scixvLGkpe2Zvcih2YXIgYT10W25dLHU9MDt1PGUubGVuZ3RoO3UrKylpZihzKGEsZVt1XSkp
cmV0dXJuIG51bGw7cmV0dXJuIG5ldyBjKCJJbnZhbGlkICIrbysiIGAiK2krImAgb2YgdmFsdWUg
YCIrYSsiYCBzdXBwbGllZCB0byBgIityKyJgLCBleHBlY3RlZCBvbmUgb2YgIitKU09OLnN0cmlu
Z2lmeShlKSsiLiIpfXJldHVybiBBcnJheS5pc0FycmF5KGUpP2wodCk6ci50aGF0UmV0dXJuc051
bGx9ZnVuY3Rpb24gbShlKXtmdW5jdGlvbiB0KHQsbixyLG8saSl7aWYoImZ1bmN0aW9uIiE9PXR5
cGVvZiBlKXJldHVybiBuZXcgYygiUHJvcGVydHkgYCIraSsiYCBvZiBjb21wb25lbnQgYCIrcisi
YCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgb2JqZWN0T2YuIik7dmFyIHU9
dFtuXSxzPV8odSk7aWYoIm9iamVjdCIhPT1zKXJldHVybiBuZXcgYygiSW52YWxpZCAiK28rIiBg
IitpKyJgIG9mIHR5cGUgYCIrcysiYCBzdXBwbGllZCB0byBgIityKyJgLCBleHBlY3RlZCBhbiBv
YmplY3QuIik7Zm9yKHZhciBsIGluIHUpaWYodS5oYXNPd25Qcm9wZXJ0eShsKSl7dmFyIHA9ZSh1
LGwscixvLGkrIi4iK2wsYSk7aWYocCBpbnN0YW5jZW9mIEVycm9yKXJldHVybiBwfXJldHVybiBu
dWxsfXJldHVybiBsKHQpfWZ1bmN0aW9uIHYoZSl7ZnVuY3Rpb24gdCh0LG4scixvLGkpe2Zvcih2
YXIgdT0wO3U8ZS5sZW5ndGg7dSsrKXtpZihudWxsPT0oMCxlW3VdKSh0LG4scixvLGksYSkpcmV0
dXJuIG51bGx9cmV0dXJuIG5ldyBjKCJJbnZhbGlkICIrbysiIGAiK2krImAgc3VwcGxpZWQgdG8g
YCIrcisiYC4iKX1pZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gci50aGF0UmV0dXJuc051bGw7
Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBvPWVbbl07aWYoImZ1bmN0aW9uIiE9PXR5
cGVvZiBvKXJldHVybiBpKCExLCJJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWQgdG8gb25lT2ZUeXBl
LiBFeHBlY3RlZCBhbiBhcnJheSBvZiBjaGVjayBmdW5jdGlvbnMsIGJ1dCByZWNlaXZlZCAlcyBh
dCBpbmRleCAlcy4iLHcobyksbiksci50aGF0UmV0dXJuc051bGx9cmV0dXJuIGwodCl9ZnVuY3Rp
b24geShlKXtmdW5jdGlvbiB0KHQsbixyLG8saSl7dmFyIHU9dFtuXSxzPV8odSk7aWYoIm9iamVj
dCIhPT1zKXJldHVybiBuZXcgYygiSW52YWxpZCAiK28rIiBgIitpKyJgIG9mIHR5cGUgYCIrcysi
YCBzdXBwbGllZCB0byBgIityKyJgLCBleHBlY3RlZCBgb2JqZWN0YC4iKTtmb3IodmFyIGwgaW4g
ZSl7dmFyIHA9ZVtsXTtpZihwKXt2YXIgZj1wKHUsbCxyLG8saSsiLiIrbCxhKTtpZihmKXJldHVy
biBmfX1yZXR1cm4gbnVsbH1yZXR1cm4gbCh0KX1mdW5jdGlvbiBnKHQpe3N3aXRjaCh0eXBlb2Yg
dCl7Y2FzZSJudW1iZXIiOmNhc2Uic3RyaW5nIjpjYXNlInVuZGVmaW5lZCI6cmV0dXJuITA7Y2Fz
ZSJib29sZWFuIjpyZXR1cm4hdDtjYXNlIm9iamVjdCI6aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1
cm4gdC5ldmVyeShnKTtpZihudWxsPT09dHx8ZSh0KSlyZXR1cm4hMDt2YXIgcj1uKHQpO2lmKCFy
KXJldHVybiExO3ZhciBvLGk9ci5jYWxsKHQpO2lmKHIhPT10LmVudHJpZXMpe2Zvcig7IShvPWku
bmV4dCgpKS5kb25lOylpZighZyhvLnZhbHVlKSlyZXR1cm4hMX1lbHNlIGZvcig7IShvPWkubmV4
dCgpKS5kb25lOyl7dmFyIGE9by52YWx1ZTtpZihhJiYhZyhhWzFdKSlyZXR1cm4hMX1yZXR1cm4h
MDtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiBiKGUsdCl7cmV0dXJuInN5bWJvbCI9PT1lfHwo
IlN5bWJvbCI9PT10WyJAQHRvU3RyaW5nVGFnIl18fCJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9s
JiZ0IGluc3RhbmNlb2YgU3ltYm9sKX1mdW5jdGlvbiBfKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVy
biBBcnJheS5pc0FycmF5KGUpPyJhcnJheSI6ZSBpbnN0YW5jZW9mIFJlZ0V4cD8ib2JqZWN0Ijpi
KHQsZSk/InN5bWJvbCI6dH1mdW5jdGlvbiBDKGUpe2lmKCJ1bmRlZmluZWQiPT09dHlwZW9mIGV8
fG51bGw9PT1lKXJldHVybiIiK2U7dmFyIHQ9XyhlKTtpZigib2JqZWN0Ij09PXQpe2lmKGUgaW5z
dGFuY2VvZiBEYXRlKXJldHVybiJkYXRlIjtpZihlIGluc3RhbmNlb2YgUmVnRXhwKXJldHVybiJy
ZWdleHAifXJldHVybiB0fWZ1bmN0aW9uIHcoZSl7dmFyIHQ9QyhlKTtzd2l0Y2godCl7Y2FzZSJh
cnJheSI6Y2FzZSJvYmplY3QiOnJldHVybiJhbiAiK3Q7Y2FzZSJib29sZWFuIjpjYXNlImRhdGUi
OmNhc2UicmVnZXhwIjpyZXR1cm4iYSAiK3Q7ZGVmYXVsdDpyZXR1cm4gdH19ZnVuY3Rpb24gRShl
KXtyZXR1cm4gZS5jb25zdHJ1Y3RvciYmZS5jb25zdHJ1Y3Rvci5uYW1lP2UuY29uc3RydWN0b3Iu
bmFtZTpQfXZhciB4PSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3Is
VD0iQEBpdGVyYXRvciIsUD0iPDxhbm9ueW1vdXM+PiIsTz17YXJyYXk6cCgiYXJyYXkiKSxib29s
OnAoImJvb2xlYW4iKSxmdW5jOnAoImZ1bmN0aW9uIiksbnVtYmVyOnAoIm51bWJlciIpLG9iamVj
dDpwKCJvYmplY3QiKSxzdHJpbmc6cCgic3RyaW5nIiksc3ltYm9sOnAoInN5bWJvbCIpLGFueTpm
dW5jdGlvbigpe3JldHVybiBsKHIudGhhdFJldHVybnNOdWxsKX0oKSxhcnJheU9mOmYsZWxlbWVu
dDpmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxuLHIsbyxpKXt2YXIgYT10W25dO2lmKCFlKGEpKXty
ZXR1cm4gbmV3IGMoIkludmFsaWQgIitvKyIgYCIraSsiYCBvZiB0eXBlIGAiK18oYSkrImAgc3Vw
cGxpZWQgdG8gYCIrcisiYCwgZXhwZWN0ZWQgYSBzaW5nbGUgUmVhY3RFbGVtZW50LiIpfXJldHVy
biBudWxsfXJldHVybiBsKHQpfSgpLGluc3RhbmNlT2Y6ZCxub2RlOmZ1bmN0aW9uKCl7ZnVuY3Rp
b24gZShlLHQsbixyLG8pe3JldHVybiBnKGVbdF0pP251bGw6bmV3IGMoIkludmFsaWQgIityKyIg
YCIrbysiYCBzdXBwbGllZCB0byBgIituKyJgLCBleHBlY3RlZCBhIFJlYWN0Tm9kZS4iKX1yZXR1
cm4gbChlKX0oKSxvYmplY3RPZjptLG9uZU9mOmgsb25lT2ZUeXBlOnYsc2hhcGU6eX07cmV0dXJu
IGMucHJvdG90eXBlPUVycm9yLnByb3RvdHlwZSxPLmNoZWNrUHJvcFR5cGVzPXUsTy5Qcm9wVHlw
ZXM9TyxPfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIs
byl7fWUuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz0i
MTUuNi4xIn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDUyKSxvPXIuQ29t
cG9uZW50LGk9bigxNCksYT1pLmlzVmFsaWRFbGVtZW50LHU9big1Mykscz1uKDExNik7ZS5leHBv
cnRzPXMobyxhLHUpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7
cmV0dXJuIGV9ZnVuY3Rpb24gbyhlLHQsbil7ZnVuY3Rpb24gbyhlLHQpe3ZhciBuPWcuaGFzT3du
UHJvcGVydHkodCk/Z1t0XTpudWxsO3cuaGFzT3duUHJvcGVydHkodCkmJnUoIk9WRVJSSURFX0JB
U0UiPT09biwiUmVhY3RDbGFzc0ludGVyZmFjZTogWW91IGFyZSBhdHRlbXB0aW5nIHRvIG92ZXJy
aWRlIGAlc2AgZnJvbSB5b3VyIGNsYXNzIHNwZWNpZmljYXRpb24uIEVuc3VyZSB0aGF0IHlvdXIg
bWV0aG9kIG5hbWVzIGRvIG5vdCBvdmVybGFwIHdpdGggUmVhY3QgbWV0aG9kcy4iLHQpLGUmJnUo
IkRFRklORV9NQU5ZIj09PW58fCJERUZJTkVfTUFOWV9NRVJHRUQiPT09biwiUmVhY3RDbGFzc0lu
dGVyZmFjZTogWW91IGFyZSBhdHRlbXB0aW5nIHRvIGRlZmluZSBgJXNgIG9uIHlvdXIgY29tcG9u
ZW50IG1vcmUgdGhhbiBvbmNlLiBUaGlzIGNvbmZsaWN0IG1heSBiZSBkdWUgdG8gYSBtaXhpbi4i
LHQpfWZ1bmN0aW9uIGMoZSxuKXtpZihuKXt1KCJmdW5jdGlvbiIhPT10eXBlb2YgbiwiUmVhY3RD
bGFzczogWW91J3JlIGF0dGVtcHRpbmcgdG8gdXNlIGEgY29tcG9uZW50IGNsYXNzIG9yIGZ1bmN0
aW9uIGFzIGEgbWl4aW4uIEluc3RlYWQsIGp1c3QgdXNlIGEgcmVndWxhciBvYmplY3QuIiksdSgh
dChuKSwiUmVhY3RDbGFzczogWW91J3JlIGF0dGVtcHRpbmcgdG8gdXNlIGEgY29tcG9uZW50IGFz
IGEgbWl4aW4uIEluc3RlYWQsIGp1c3QgdXNlIGEgcmVndWxhciBvYmplY3QuIik7dmFyIHI9ZS5w
cm90b3R5cGUsaT1yLl9fcmVhY3RBdXRvQmluZFBhaXJzO24uaGFzT3duUHJvcGVydHkocykmJmIu
bWl4aW5zKGUsbi5taXhpbnMpO2Zvcih2YXIgYSBpbiBuKWlmKG4uaGFzT3duUHJvcGVydHkoYSkm
JmEhPT1zKXt2YXIgYz1uW2FdLGw9ci5oYXNPd25Qcm9wZXJ0eShhKTtpZihvKGwsYSksYi5oYXNP
d25Qcm9wZXJ0eShhKSliW2FdKGUsYyk7ZWxzZXt2YXIgcD1nLmhhc093blByb3BlcnR5KGEpLGg9
ImZ1bmN0aW9uIj09PXR5cGVvZiBjLG09aCYmIXAmJiFsJiYhMSE9PW4uYXV0b2JpbmQ7aWYobSlp
LnB1c2goYSxjKSxyW2FdPWM7ZWxzZSBpZihsKXt2YXIgdj1nW2FdO3UocCYmKCJERUZJTkVfTUFO
WV9NRVJHRUQiPT09dnx8IkRFRklORV9NQU5ZIj09PXYpLCJSZWFjdENsYXNzOiBVbmV4cGVjdGVk
IHNwZWMgcG9saWN5ICVzIGZvciBrZXkgJXMgd2hlbiBtaXhpbmcgaW4gY29tcG9uZW50IHNwZWNz
LiIsdixhKSwiREVGSU5FX01BTllfTUVSR0VEIj09PXY/clthXT1mKHJbYV0sYyk6IkRFRklORV9N
QU5ZIj09PXYmJihyW2FdPWQoclthXSxjKSl9ZWxzZSByW2FdPWN9fX1lbHNlO31mdW5jdGlvbiBs
KGUsdCl7aWYodClmb3IodmFyIG4gaW4gdCl7dmFyIHI9dFtuXTtpZih0Lmhhc093blByb3BlcnR5
KG4pKXt2YXIgbz1uIGluIGI7dSghbywnUmVhY3RDbGFzczogWW91IGFyZSBhdHRlbXB0aW5nIHRv
IGRlZmluZSBhIHJlc2VydmVkIHByb3BlcnR5LCBgJXNgLCB0aGF0IHNob3VsZG5cJ3QgYmUgb24g
dGhlICJzdGF0aWNzIiBrZXkuIERlZmluZSBpdCBhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBpbnN0
ZWFkOyBpdCB3aWxsIHN0aWxsIGJlIGFjY2Vzc2libGUgb24gdGhlIGNvbnN0cnVjdG9yLicsbik7
dmFyIGk9biBpbiBlO3UoIWksIlJlYWN0Q2xhc3M6IFlvdSBhcmUgYXR0ZW1wdGluZyB0byBkZWZp
bmUgYCVzYCBvbiB5b3VyIGNvbXBvbmVudCBtb3JlIHRoYW4gb25jZS4gVGhpcyBjb25mbGljdCBt
YXkgYmUgZHVlIHRvIGEgbWl4aW4uIixuKSxlW25dPXJ9fX1mdW5jdGlvbiBwKGUsdCl7dShlJiZ0
JiYib2JqZWN0Ij09PXR5cGVvZiBlJiYib2JqZWN0Ij09PXR5cGVvZiB0LCJtZXJnZUludG9XaXRo
Tm9EdXBsaWNhdGVLZXlzKCk6IENhbm5vdCBtZXJnZSBub24tb2JqZWN0cy4iKTtmb3IodmFyIG4g
aW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYodSh2b2lkIDA9PT1lW25dLCJtZXJnZUludG9XaXRo
Tm9EdXBsaWNhdGVLZXlzKCk6IFRyaWVkIHRvIG1lcmdlIHR3byBvYmplY3RzIHdpdGggdGhlIHNh
bWUga2V5OiBgJXNgLiBUaGlzIGNvbmZsaWN0IG1heSBiZSBkdWUgdG8gYSBtaXhpbjsgaW4gcGFy
dGljdWxhciwgdGhpcyBtYXkgYmUgY2F1c2VkIGJ5IHR3byBnZXRJbml0aWFsU3RhdGUoKSBvciBn
ZXREZWZhdWx0UHJvcHMoKSBtZXRob2RzIHJldHVybmluZyBvYmplY3RzIHdpdGggY2xhc2hpbmcg
a2V5cy4iLG4pLGVbbl09dFtuXSk7cmV0dXJuIGV9ZnVuY3Rpb24gZihlLHQpe3JldHVybiBmdW5j
dGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLHI9dC5hcHBseSh0aGlzLGFyZ3Vt
ZW50cyk7aWYobnVsbD09bilyZXR1cm4gcjtpZihudWxsPT1yKXJldHVybiBuO3ZhciBvPXt9O3Jl
dHVybiBwKG8sbikscChvLHIpLG99fWZ1bmN0aW9uIGQoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtl
LmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24g
aChlLHQpe3ZhciBuPXQuYmluZChlKTtyZXR1cm4gbn1mdW5jdGlvbiBtKGUpe2Zvcih2YXIgdD1l
Ll9fcmVhY3RBdXRvQmluZFBhaXJzLG49MDtuPHQubGVuZ3RoO24rPTIpe3ZhciByPXRbbl0sbz10
W24rMV07ZVtyXT1oKGUsbyl9fWZ1bmN0aW9uIHYoZSl7dmFyIHQ9cihmdW5jdGlvbihlLHIsbyl7
dGhpcy5fX3JlYWN0QXV0b0JpbmRQYWlycy5sZW5ndGgmJm0odGhpcyksdGhpcy5wcm9wcz1lLHRo
aXMuY29udGV4dD1yLHRoaXMucmVmcz1hLHRoaXMudXBkYXRlcj1vfHxuLHRoaXMuc3RhdGU9bnVs
bDt2YXIgaT10aGlzLmdldEluaXRpYWxTdGF0ZT90aGlzLmdldEluaXRpYWxTdGF0ZSgpOm51bGw7
dSgib2JqZWN0Ij09PXR5cGVvZiBpJiYhQXJyYXkuaXNBcnJheShpKSwiJXMuZ2V0SW5pdGlhbFN0
YXRlKCk6IG11c3QgcmV0dXJuIGFuIG9iamVjdCBvciBudWxsIix0LmRpc3BsYXlOYW1lfHwiUmVh
Y3RDb21wb3NpdGVDb21wb25lbnQiKSx0aGlzLnN0YXRlPWl9KTt0LnByb3RvdHlwZT1uZXcgRSx0
LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10LHQucHJvdG90eXBlLl9fcmVhY3RBdXRvQmluZFBhaXJz
PVtdLHkuZm9yRWFjaChjLmJpbmQobnVsbCx0KSksYyh0LF8pLGModCxlKSxjKHQsQyksdC5nZXRE
ZWZhdWx0UHJvcHMmJih0LmRlZmF1bHRQcm9wcz10LmdldERlZmF1bHRQcm9wcygpKSx1KHQucHJv
dG90eXBlLnJlbmRlciwiY3JlYXRlQ2xhc3MoLi4uKTogQ2xhc3Mgc3BlY2lmaWNhdGlvbiBtdXN0
IGltcGxlbWVudCBhIGByZW5kZXJgIG1ldGhvZC4iKTtmb3IodmFyIG8gaW4gZyl0LnByb3RvdHlw
ZVtvXXx8KHQucHJvdG90eXBlW29dPW51bGwpO3JldHVybiB0fXZhciB5PVtdLGc9e21peGluczoi
REVGSU5FX01BTlkiLHN0YXRpY3M6IkRFRklORV9NQU5ZIixwcm9wVHlwZXM6IkRFRklORV9NQU5Z
Iixjb250ZXh0VHlwZXM6IkRFRklORV9NQU5ZIixjaGlsZENvbnRleHRUeXBlczoiREVGSU5FX01B
TlkiLGdldERlZmF1bHRQcm9wczoiREVGSU5FX01BTllfTUVSR0VEIixnZXRJbml0aWFsU3RhdGU6
IkRFRklORV9NQU5ZX01FUkdFRCIsZ2V0Q2hpbGRDb250ZXh0OiJERUZJTkVfTUFOWV9NRVJHRUQi
LHJlbmRlcjoiREVGSU5FX09OQ0UiLGNvbXBvbmVudFdpbGxNb3VudDoiREVGSU5FX01BTlkiLGNv
bXBvbmVudERpZE1vdW50OiJERUZJTkVfTUFOWSIsY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wczoi
REVGSU5FX01BTlkiLHNob3VsZENvbXBvbmVudFVwZGF0ZToiREVGSU5FX09OQ0UiLGNvbXBvbmVu
dFdpbGxVcGRhdGU6IkRFRklORV9NQU5ZIixjb21wb25lbnREaWRVcGRhdGU6IkRFRklORV9NQU5Z
Iixjb21wb25lbnRXaWxsVW5tb3VudDoiREVGSU5FX01BTlkiLHVwZGF0ZUNvbXBvbmVudDoiT1ZF
UlJJREVfQkFTRSJ9LGI9e2Rpc3BsYXlOYW1lOmZ1bmN0aW9uKGUsdCl7ZS5kaXNwbGF5TmFtZT10
fSxtaXhpbnM6ZnVuY3Rpb24oZSx0KXtpZih0KWZvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWMo
ZSx0W25dKX0sY2hpbGRDb250ZXh0VHlwZXM6ZnVuY3Rpb24oZSx0KXtlLmNoaWxkQ29udGV4dFR5
cGVzPWkoe30sZS5jaGlsZENvbnRleHRUeXBlcyx0KX0sY29udGV4dFR5cGVzOmZ1bmN0aW9uKGUs
dCl7ZS5jb250ZXh0VHlwZXM9aSh7fSxlLmNvbnRleHRUeXBlcyx0KX0sZ2V0RGVmYXVsdFByb3Bz
OmZ1bmN0aW9uKGUsdCl7ZS5nZXREZWZhdWx0UHJvcHM/ZS5nZXREZWZhdWx0UHJvcHM9ZihlLmdl
dERlZmF1bHRQcm9wcyx0KTplLmdldERlZmF1bHRQcm9wcz10fSxwcm9wVHlwZXM6ZnVuY3Rpb24o
ZSx0KXtlLnByb3BUeXBlcz1pKHt9LGUucHJvcFR5cGVzLHQpfSxzdGF0aWNzOmZ1bmN0aW9uKGUs
dCl7bChlLHQpfSxhdXRvYmluZDpmdW5jdGlvbigpe319LF89e2NvbXBvbmVudERpZE1vdW50OmZ1
bmN0aW9uKCl7dGhpcy5fX2lzTW91bnRlZD0hMH19LEM9e2NvbXBvbmVudFdpbGxVbm1vdW50OmZ1
bmN0aW9uKCl7dGhpcy5fX2lzTW91bnRlZD0hMX19LHc9e3JlcGxhY2VTdGF0ZTpmdW5jdGlvbihl
LHQpe3RoaXMudXBkYXRlci5lbnF1ZXVlUmVwbGFjZVN0YXRlKHRoaXMsZSx0KX0saXNNb3VudGVk
OmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9faXNNb3VudGVkfX0sRT1mdW5jdGlvbigpe307cmV0
dXJuIGkoRS5wcm90b3R5cGUsZS5wcm90b3R5cGUsdyksdn12YXIgaT1uKDMpLGE9bigyMyksdT1u
KDApLHM9Im1peGlucyI7ZS5leHBvcnRzPW99LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7
ZnVuY3Rpb24gcihlKXtyZXR1cm4gaS5pc1ZhbGlkRWxlbWVudChlKXx8bygiMTQzIiksZX12YXIg
bz1uKDE4KSxpPW4oMTQpO24oMCk7ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0
cmljdCI7ZS5leHBvcnRzPW4oMTE5KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIg
cj1uKDQpLG89bigxMjApLGk9big4MiksYT1uKDE2KSx1PW4oOCkscz1uKDE5MiksYz1uKDE5Myks
bD1uKDgzKSxwPW4oMTk0KTtuKDEpO28uaW5qZWN0KCk7dmFyIGY9e2ZpbmRET01Ob2RlOmMscmVu
ZGVyOmkucmVuZGVyLHVubW91bnRDb21wb25lbnRBdE5vZGU6aS51bm1vdW50Q29tcG9uZW50QXRO
b2RlLHZlcnNpb246cyx1bnN0YWJsZV9iYXRjaGVkVXBkYXRlczp1LmJhdGNoZWRVcGRhdGVzLHVu
c3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyOnB9OyJ1bmRlZmluZWQiIT09dHlwZW9m
IF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyYmImZ1bmN0aW9uIj09PXR5cGVvZiBfX1JF
QUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uaW5qZWN0JiZfX1JFQUNUX0RFVlRPT0xTX0dMT0JB
TF9IT09LX18uaW5qZWN0KHtDb21wb25lbnRUcmVlOntnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9k
ZTpyLmdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlLGdldE5vZGVGcm9tSW5zdGFuY2U6ZnVuY3Rp
b24oZSl7cmV0dXJuIGUuX3JlbmRlcmVkQ29tcG9uZW50JiYoZT1sKGUpKSxlP3IuZ2V0Tm9kZUZy
b21JbnN0YW5jZShlKTpudWxsfX0sTW91bnQ6aSxSZWNvbmNpbGVyOmF9KTtlLmV4cG9ydHM9Zn0s
ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7RXx8KEU9ITAsZy5FdmVu
dEVtaXR0ZXIuaW5qZWN0UmVhY3RFdmVudExpc3RlbmVyKHkpLGcuRXZlbnRQbHVnaW5IdWIuaW5q
ZWN0RXZlbnRQbHVnaW5PcmRlcih1KSxnLkV2ZW50UGx1Z2luVXRpbHMuaW5qZWN0Q29tcG9uZW50
VHJlZShmKSxnLkV2ZW50UGx1Z2luVXRpbHMuaW5qZWN0VHJlZVRyYXZlcnNhbChoKSxnLkV2ZW50
UGx1Z2luSHViLmluamVjdEV2ZW50UGx1Z2luc0J5TmFtZSh7U2ltcGxlRXZlbnRQbHVnaW46dyxF
bnRlckxlYXZlRXZlbnRQbHVnaW46cyxDaGFuZ2VFdmVudFBsdWdpbjphLFNlbGVjdEV2ZW50UGx1
Z2luOkMsQmVmb3JlSW5wdXRFdmVudFBsdWdpbjppfSksZy5Ib3N0Q29tcG9uZW50LmluamVjdEdl
bmVyaWNDb21wb25lbnRDbGFzcyhwKSxnLkhvc3RDb21wb25lbnQuaW5qZWN0VGV4dENvbXBvbmVu
dENsYXNzKG0pLGcuRE9NUHJvcGVydHkuaW5qZWN0RE9NUHJvcGVydHlDb25maWcobyksZy5ET01Q
cm9wZXJ0eS5pbmplY3RET01Qcm9wZXJ0eUNvbmZpZyhjKSxnLkRPTVByb3BlcnR5LmluamVjdERP
TVByb3BlcnR5Q29uZmlnKF8pLGcuRW1wdHlDb21wb25lbnQuaW5qZWN0RW1wdHlDb21wb25lbnRG
YWN0b3J5KGZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZChlKX0pLGcuVXBkYXRlcy5pbmplY3RSZWNv
bmNpbGVUcmFuc2FjdGlvbihiKSxnLlVwZGF0ZXMuaW5qZWN0QmF0Y2hpbmdTdHJhdGVneSh2KSxn
LkNvbXBvbmVudC5pbmplY3RFbnZpcm9ubWVudChsKSl9dmFyIG89bigxMjEpLGk9bigxMjIpLGE9
bigxMjYpLHU9bigxMjkpLHM9bigxMzApLGM9bigxMzEpLGw9bigxMzIpLHA9bigxMzgpLGY9big0
KSxkPW4oMTYzKSxoPW4oMTY0KSxtPW4oMTY1KSx2PW4oMTY2KSx5PW4oMTY3KSxnPW4oMTY5KSxi
PW4oMTcwKSxfPW4oMTc2KSxDPW4oMTc3KSx3PW4oMTc4KSxFPSExO2UuZXhwb3J0cz17aW5qZWN0
OnJ9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPXtQcm9wZXJ0aWVzOnsiYXJp
YS1jdXJyZW50IjowLCJhcmlhLWRldGFpbHMiOjAsImFyaWEtZGlzYWJsZWQiOjAsImFyaWEtaGlk
ZGVuIjowLCJhcmlhLWludmFsaWQiOjAsImFyaWEta2V5c2hvcnRjdXRzIjowLCJhcmlhLWxhYmVs
IjowLCJhcmlhLXJvbGVkZXNjcmlwdGlvbiI6MCwiYXJpYS1hdXRvY29tcGxldGUiOjAsImFyaWEt
Y2hlY2tlZCI6MCwiYXJpYS1leHBhbmRlZCI6MCwiYXJpYS1oYXNwb3B1cCI6MCwiYXJpYS1sZXZl
bCI6MCwiYXJpYS1tb2RhbCI6MCwiYXJpYS1tdWx0aWxpbmUiOjAsImFyaWEtbXVsdGlzZWxlY3Rh
YmxlIjowLCJhcmlhLW9yaWVudGF0aW9uIjowLCJhcmlhLXBsYWNlaG9sZGVyIjowLCJhcmlhLXBy
ZXNzZWQiOjAsImFyaWEtcmVhZG9ubHkiOjAsImFyaWEtcmVxdWlyZWQiOjAsImFyaWEtc2VsZWN0
ZWQiOjAsImFyaWEtc29ydCI6MCwiYXJpYS12YWx1ZW1heCI6MCwiYXJpYS12YWx1ZW1pbiI6MCwi
YXJpYS12YWx1ZW5vdyI6MCwiYXJpYS12YWx1ZXRleHQiOjAsImFyaWEtYXRvbWljIjowLCJhcmlh
LWJ1c3kiOjAsImFyaWEtbGl2ZSI6MCwiYXJpYS1yZWxldmFudCI6MCwiYXJpYS1kcm9wZWZmZWN0
IjowLCJhcmlhLWdyYWJiZWQiOjAsImFyaWEtYWN0aXZlZGVzY2VuZGFudCI6MCwiYXJpYS1jb2xj
b3VudCI6MCwiYXJpYS1jb2xpbmRleCI6MCwiYXJpYS1jb2xzcGFuIjowLCJhcmlhLWNvbnRyb2xz
IjowLCJhcmlhLWRlc2NyaWJlZGJ5IjowLCJhcmlhLWVycm9ybWVzc2FnZSI6MCwiYXJpYS1mbG93
dG8iOjAsImFyaWEtbGFiZWxsZWRieSI6MCwiYXJpYS1vd25zIjowLCJhcmlhLXBvc2luc2V0Ijow
LCJhcmlhLXJvd2NvdW50IjowLCJhcmlhLXJvd2luZGV4IjowLCJhcmlhLXJvd3NwYW4iOjAsImFy
aWEtc2V0c2l6ZSI6MH0sRE9NQXR0cmlidXRlTmFtZXM6e30sRE9NUHJvcGVydHlOYW1lczp7fX07
ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXty
ZXR1cm4oZS5jdHJsS2V5fHxlLmFsdEtleXx8ZS5tZXRhS2V5KSYmIShlLmN0cmxLZXkmJmUuYWx0
S2V5KX1mdW5jdGlvbiBvKGUpe3N3aXRjaChlKXtjYXNlInRvcENvbXBvc2l0aW9uU3RhcnQiOnJl
dHVybiBULmNvbXBvc2l0aW9uU3RhcnQ7Y2FzZSJ0b3BDb21wb3NpdGlvbkVuZCI6cmV0dXJuIFQu
Y29tcG9zaXRpb25FbmQ7Y2FzZSJ0b3BDb21wb3NpdGlvblVwZGF0ZSI6cmV0dXJuIFQuY29tcG9z
aXRpb25VcGRhdGV9fWZ1bmN0aW9uIGkoZSx0KXtyZXR1cm4idG9wS2V5RG93biI9PT1lJiZ0Lmtl
eUNvZGU9PT1nfWZ1bmN0aW9uIGEoZSx0KXtzd2l0Y2goZSl7Y2FzZSJ0b3BLZXlVcCI6cmV0dXJu
LTEhPT15LmluZGV4T2YodC5rZXlDb2RlKTtjYXNlInRvcEtleURvd24iOnJldHVybiB0LmtleUNv
ZGUhPT1nO2Nhc2UidG9wS2V5UHJlc3MiOmNhc2UidG9wTW91c2VEb3duIjpjYXNlInRvcEJsdXIi
OnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIHUoZSl7dmFyIHQ9ZS5kZXRhaWw7
cmV0dXJuIm9iamVjdCI9PT10eXBlb2YgdCYmImRhdGEiaW4gdD90LmRhdGE6bnVsbH1mdW5jdGlv
biBzKGUsdCxuLHIpe3ZhciBzLGM7aWYoYj9zPW8oZSk6Tz9hKGUsbikmJihzPVQuY29tcG9zaXRp
b25FbmQpOmkoZSxuKSYmKHM9VC5jb21wb3NpdGlvblN0YXJ0KSwhcylyZXR1cm4gbnVsbDt3JiYo
T3x8cyE9PVQuY29tcG9zaXRpb25TdGFydD9zPT09VC5jb21wb3NpdGlvbkVuZCYmTyYmKGM9Ty5n
ZXREYXRhKCkpOk89aC5nZXRQb29sZWQocikpO3ZhciBsPW0uZ2V0UG9vbGVkKHMsdCxuLHIpO2lm
KGMpbC5kYXRhPWM7ZWxzZXt2YXIgcD11KG4pO251bGwhPT1wJiYobC5kYXRhPXApfXJldHVybiBm
LmFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXMobCksbH1mdW5jdGlvbiBjKGUsdCl7c3dpdGNo
KGUpe2Nhc2UidG9wQ29tcG9zaXRpb25FbmQiOnJldHVybiB1KHQpO2Nhc2UidG9wS2V5UHJlc3Mi
OnJldHVybiB0LndoaWNoIT09RT9udWxsOihQPSEwLHgpO2Nhc2UidG9wVGV4dElucHV0Ijp2YXIg
bj10LmRhdGE7cmV0dXJuIG49PT14JiZQP251bGw6bjtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5j
dGlvbiBsKGUsdCl7aWYoTyl7aWYoInRvcENvbXBvc2l0aW9uRW5kIj09PWV8fCFiJiZhKGUsdCkp
e3ZhciBuPU8uZ2V0RGF0YSgpO3JldHVybiBoLnJlbGVhc2UoTyksTz1udWxsLG59cmV0dXJuIG51
bGx9c3dpdGNoKGUpe2Nhc2UidG9wUGFzdGUiOnJldHVybiBudWxsO2Nhc2UidG9wS2V5UHJlc3Mi
OnJldHVybiB0LndoaWNoJiYhcih0KT9TdHJpbmcuZnJvbUNoYXJDb2RlKHQud2hpY2gpOm51bGw7
Y2FzZSJ0b3BDb21wb3NpdGlvbkVuZCI6cmV0dXJuIHc/bnVsbDp0LmRhdGE7ZGVmYXVsdDpyZXR1
cm4gbnVsbH19ZnVuY3Rpb24gcChlLHQsbixyKXt2YXIgbztpZighKG89Qz9jKGUsbik6bChlLG4p
KSlyZXR1cm4gbnVsbDt2YXIgaT12LmdldFBvb2xlZChULmJlZm9yZUlucHV0LHQsbixyKTtyZXR1
cm4gaS5kYXRhPW8sZi5hY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzKGkpLGl9dmFyIGY9bigx
OSksZD1uKDUpLGg9bigxMjMpLG09bigxMjQpLHY9bigxMjUpLHk9WzksMTMsMjcsMzJdLGc9MjI5
LGI9ZC5jYW5Vc2VET00mJiJDb21wb3NpdGlvbkV2ZW50ImluIHdpbmRvdyxfPW51bGw7ZC5jYW5V
c2VET00mJiJkb2N1bWVudE1vZGUiaW4gZG9jdW1lbnQmJihfPWRvY3VtZW50LmRvY3VtZW50TW9k
ZSk7dmFyIEM9ZC5jYW5Vc2VET00mJiJUZXh0RXZlbnQiaW4gd2luZG93JiYhXyYmIWZ1bmN0aW9u
KCl7dmFyIGU9d2luZG93Lm9wZXJhO3JldHVybiJvYmplY3QiPT09dHlwZW9mIGUmJiJmdW5jdGlv
biI9PT10eXBlb2YgZS52ZXJzaW9uJiZwYXJzZUludChlLnZlcnNpb24oKSwxMCk8PTEyfSgpLHc9
ZC5jYW5Vc2VET00mJighYnx8XyYmXz44JiZfPD0xMSksRT0zMix4PVN0cmluZy5mcm9tQ2hhckNv
ZGUoRSksVD17YmVmb3JlSW5wdXQ6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVkOiJv
bkJlZm9yZUlucHV0IixjYXB0dXJlZDoib25CZWZvcmVJbnB1dENhcHR1cmUifSxkZXBlbmRlbmNp
ZXM6WyJ0b3BDb21wb3NpdGlvbkVuZCIsInRvcEtleVByZXNzIiwidG9wVGV4dElucHV0IiwidG9w
UGFzdGUiXX0sY29tcG9zaXRpb25FbmQ6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVk
OiJvbkNvbXBvc2l0aW9uRW5kIixjYXB0dXJlZDoib25Db21wb3NpdGlvbkVuZENhcHR1cmUifSxk
ZXBlbmRlbmNpZXM6WyJ0b3BCbHVyIiwidG9wQ29tcG9zaXRpb25FbmQiLCJ0b3BLZXlEb3duIiwi
dG9wS2V5UHJlc3MiLCJ0b3BLZXlVcCIsInRvcE1vdXNlRG93biJdfSxjb21wb3NpdGlvblN0YXJ0
OntwaGFzZWRSZWdpc3RyYXRpb25OYW1lczp7YnViYmxlZDoib25Db21wb3NpdGlvblN0YXJ0Iixj
YXB0dXJlZDoib25Db21wb3NpdGlvblN0YXJ0Q2FwdHVyZSJ9LGRlcGVuZGVuY2llczpbInRvcEJs
dXIiLCJ0b3BDb21wb3NpdGlvblN0YXJ0IiwidG9wS2V5RG93biIsInRvcEtleVByZXNzIiwidG9w
S2V5VXAiLCJ0b3BNb3VzZURvd24iXX0sY29tcG9zaXRpb25VcGRhdGU6e3BoYXNlZFJlZ2lzdHJh
dGlvbk5hbWVzOntidWJibGVkOiJvbkNvbXBvc2l0aW9uVXBkYXRlIixjYXB0dXJlZDoib25Db21w
b3NpdGlvblVwZGF0ZUNhcHR1cmUifSxkZXBlbmRlbmNpZXM6WyJ0b3BCbHVyIiwidG9wQ29tcG9z
aXRpb25VcGRhdGUiLCJ0b3BLZXlEb3duIiwidG9wS2V5UHJlc3MiLCJ0b3BLZXlVcCIsInRvcE1v
dXNlRG93biJdfX0sUD0hMSxPPW51bGwsaz17ZXZlbnRUeXBlczpULGV4dHJhY3RFdmVudHM6ZnVu
Y3Rpb24oZSx0LG4scil7cmV0dXJuW3MoZSx0LG4scikscChlLHQsbixyKV19fTtlLmV4cG9ydHM9
a30sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3RoaXMuX3Jvb3Q9
ZSx0aGlzLl9zdGFydFRleHQ9dGhpcy5nZXRUZXh0KCksdGhpcy5fZmFsbGJhY2tUZXh0PW51bGx9
dmFyIG89bigzKSxpPW4oMTIpLGE9big2MSk7byhyLnByb3RvdHlwZSx7ZGVzdHJ1Y3RvcjpmdW5j
dGlvbigpe3RoaXMuX3Jvb3Q9bnVsbCx0aGlzLl9zdGFydFRleHQ9bnVsbCx0aGlzLl9mYWxsYmFj
a1RleHQ9bnVsbH0sZ2V0VGV4dDpmdW5jdGlvbigpe3JldHVybiJ2YWx1ZSJpbiB0aGlzLl9yb290
P3RoaXMuX3Jvb3QudmFsdWU6dGhpcy5fcm9vdFthKCldfSxnZXREYXRhOmZ1bmN0aW9uKCl7aWYo
dGhpcy5fZmFsbGJhY2tUZXh0KXJldHVybiB0aGlzLl9mYWxsYmFja1RleHQ7dmFyIGUsdCxuPXRo
aXMuX3N0YXJ0VGV4dCxyPW4ubGVuZ3RoLG89dGhpcy5nZXRUZXh0KCksaT1vLmxlbmd0aDtmb3Io
ZT0wO2U8ciYmbltlXT09PW9bZV07ZSsrKTt2YXIgYT1yLWU7Zm9yKHQ9MTt0PD1hJiZuW3ItdF09
PT1vW2ktdF07dCsrKTt2YXIgdT10PjE/MS10OnZvaWQgMDtyZXR1cm4gdGhpcy5fZmFsbGJhY2tU
ZXh0PW8uc2xpY2UoZSx1KSx0aGlzLl9mYWxsYmFja1RleHR9fSksaS5hZGRQb29saW5nVG8ociks
ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQs
bixyKXtyZXR1cm4gby5jYWxsKHRoaXMsZSx0LG4scil9dmFyIG89bigxMSksaT17ZGF0YTpudWxs
fTtvLmF1Z21lbnRDbGFzcyhyLGkpLGUuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBz
dHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scil7cmV0dXJuIG8uY2FsbCh0aGlzLGUsdCxuLHIpfXZh
ciBvPW4oMTEpLGk9e2RhdGE6bnVsbH07by5hdWdtZW50Q2xhc3MocixpKSxlLmV4cG9ydHM9cn0s
ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXt2YXIgcj1QLmdl
dFBvb2xlZChJLmNoYW5nZSxlLHQsbik7cmV0dXJuIHIudHlwZT0iY2hhbmdlIix3LmFjY3VtdWxh
dGVUd29QaGFzZURpc3BhdGNoZXMocikscn1mdW5jdGlvbiBvKGUpe3ZhciB0PWUubm9kZU5hbWUm
JmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4ic2VsZWN0Ij09PXR8fCJpbnB1dCI9PT10
JiYiZmlsZSI9PT1lLnR5cGV9ZnVuY3Rpb24gaShlKXt2YXIgdD1yKFIsZSxrKGUpKTtULmJhdGNo
ZWRVcGRhdGVzKGEsdCl9ZnVuY3Rpb24gYShlKXtDLmVucXVldWVFdmVudHMoZSksQy5wcm9jZXNz
RXZlbnRRdWV1ZSghMSl9ZnVuY3Rpb24gdShlLHQpe009ZSxSPXQsTS5hdHRhY2hFdmVudCgib25j
aGFuZ2UiLGkpfWZ1bmN0aW9uIHMoKXtNJiYoTS5kZXRhY2hFdmVudCgib25jaGFuZ2UiLGkpLE09
bnVsbCxSPW51bGwpfWZ1bmN0aW9uIGMoZSx0KXt2YXIgbj1PLnVwZGF0ZVZhbHVlSWZDaGFuZ2Vk
KGUpLHI9ITA9PT10LnNpbXVsYXRlZCYmai5fYWxsb3dTaW11bGF0ZWRQYXNzVGhyb3VnaDtpZihu
fHxyKXJldHVybiBlfWZ1bmN0aW9uIGwoZSx0KXtpZigidG9wQ2hhbmdlIj09PWUpcmV0dXJuIHR9
ZnVuY3Rpb24gcChlLHQsbil7InRvcEZvY3VzIj09PWU/KHMoKSx1KHQsbikpOiJ0b3BCbHVyIj09
PWUmJnMoKX1mdW5jdGlvbiBmKGUsdCl7TT1lLFI9dCxNLmF0dGFjaEV2ZW50KCJvbnByb3BlcnR5
Y2hhbmdlIixoKX1mdW5jdGlvbiBkKCl7TSYmKE0uZGV0YWNoRXZlbnQoIm9ucHJvcGVydHljaGFu
Z2UiLGgpLE09bnVsbCxSPW51bGwpfWZ1bmN0aW9uIGgoZSl7InZhbHVlIj09PWUucHJvcGVydHlO
YW1lJiZjKFIsZSkmJmkoZSl9ZnVuY3Rpb24gbShlLHQsbil7InRvcEZvY3VzIj09PWU/KGQoKSxm
KHQsbikpOiJ0b3BCbHVyIj09PWUmJmQoKX1mdW5jdGlvbiB2KGUsdCxuKXtpZigidG9wU2VsZWN0
aW9uQ2hhbmdlIj09PWV8fCJ0b3BLZXlVcCI9PT1lfHwidG9wS2V5RG93biI9PT1lKXJldHVybiBj
KFIsbil9ZnVuY3Rpb24geShlKXt2YXIgdD1lLm5vZGVOYW1lO3JldHVybiB0JiYiaW5wdXQiPT09
dC50b0xvd2VyQ2FzZSgpJiYoImNoZWNrYm94Ij09PWUudHlwZXx8InJhZGlvIj09PWUudHlwZSl9
ZnVuY3Rpb24gZyhlLHQsbil7aWYoInRvcENsaWNrIj09PWUpcmV0dXJuIGModCxuKX1mdW5jdGlv
biBiKGUsdCxuKXtpZigidG9wSW5wdXQiPT09ZXx8InRvcENoYW5nZSI9PT1lKXJldHVybiBjKHQs
bil9ZnVuY3Rpb24gXyhlLHQpe2lmKG51bGwhPWUpe3ZhciBuPWUuX3dyYXBwZXJTdGF0ZXx8dC5f
d3JhcHBlclN0YXRlO2lmKG4mJm4uY29udHJvbGxlZCYmIm51bWJlciI9PT10LnR5cGUpe3ZhciBy
PSIiK3QudmFsdWU7dC5nZXRBdHRyaWJ1dGUoInZhbHVlIikhPT1yJiZ0LnNldEF0dHJpYnV0ZSgi
dmFsdWUiLHIpfX19dmFyIEM9bigyMCksdz1uKDE5KSxFPW4oNSkseD1uKDQpLFQ9big4KSxQPW4o
MTEpLE89big2NCksaz1uKDM0KSxTPW4oMzUpLE49big2NSksST17Y2hhbmdlOntwaGFzZWRSZWdp
c3RyYXRpb25OYW1lczp7YnViYmxlZDoib25DaGFuZ2UiLGNhcHR1cmVkOiJvbkNoYW5nZUNhcHR1
cmUifSxkZXBlbmRlbmNpZXM6WyJ0b3BCbHVyIiwidG9wQ2hhbmdlIiwidG9wQ2xpY2siLCJ0b3BG
b2N1cyIsInRvcElucHV0IiwidG9wS2V5RG93biIsInRvcEtleVVwIiwidG9wU2VsZWN0aW9uQ2hh
bmdlIl19fSxNPW51bGwsUj1udWxsLEE9ITE7RS5jYW5Vc2VET00mJihBPVMoImNoYW5nZSIpJiYo
IWRvY3VtZW50LmRvY3VtZW50TW9kZXx8ZG9jdW1lbnQuZG9jdW1lbnRNb2RlPjgpKTt2YXIgRD0h
MTtFLmNhblVzZURPTSYmKEQ9UygiaW5wdXQiKSYmKCEoImRvY3VtZW50TW9kZSJpbiBkb2N1bWVu
dCl8fGRvY3VtZW50LmRvY3VtZW50TW9kZT45KSk7dmFyIGo9e2V2ZW50VHlwZXM6SSxfYWxsb3dT
aW11bGF0ZWRQYXNzVGhyb3VnaDohMCxfaXNJbnB1dEV2ZW50U3VwcG9ydGVkOkQsZXh0cmFjdEV2
ZW50czpmdW5jdGlvbihlLHQsbixpKXt2YXIgYSx1LHM9dD94LmdldE5vZGVGcm9tSW5zdGFuY2Uo
dCk6d2luZG93O2lmKG8ocyk/QT9hPWw6dT1wOk4ocyk/RD9hPWI6KGE9dix1PW0pOnkocykmJihh
PWcpLGEpe3ZhciBjPWEoZSx0LG4pO2lmKGMpe3JldHVybiByKGMsbixpKX19dSYmdShlLHMsdCks
InRvcEJsdXIiPT09ZSYmXyh0LHMpfX07ZS5leHBvcnRzPWp9LGZ1bmN0aW9uKGUsdCxuKXsidXNl
IHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7ImZ1bmN0aW9uIj09PXR5cGVvZiBlP2UodC5nZXRQ
dWJsaWNJbnN0YW5jZSgpKTppLmFkZENvbXBvbmVudEFzUmVmVG8odCxlLG4pfWZ1bmN0aW9uIG8o
ZSx0LG4peyJmdW5jdGlvbiI9PT10eXBlb2YgZT9lKG51bGwpOmkucmVtb3ZlQ29tcG9uZW50QXNS
ZWZGcm9tKHQsZSxuKX12YXIgaT1uKDEyOCksYT17fTthLmF0dGFjaFJlZnM9ZnVuY3Rpb24oZSx0
KXtpZihudWxsIT09dCYmIm9iamVjdCI9PT10eXBlb2YgdCl7dmFyIG49dC5yZWY7bnVsbCE9biYm
cihuLGUsdC5fb3duZXIpfX0sYS5zaG91bGRVcGRhdGVSZWZzPWZ1bmN0aW9uKGUsdCl7dmFyIG49
bnVsbCxyPW51bGw7bnVsbCE9PWUmJiJvYmplY3QiPT09dHlwZW9mIGUmJihuPWUucmVmLHI9ZS5f
b3duZXIpO3ZhciBvPW51bGwsaT1udWxsO3JldHVybiBudWxsIT09dCYmIm9iamVjdCI9PT10eXBl
b2YgdCYmKG89dC5yZWYsaT10Ll9vd25lciksbiE9PW98fCJzdHJpbmciPT09dHlwZW9mIG8mJmkh
PT1yfSxhLmRldGFjaFJlZnM9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT09dCYmIm9iamVjdCI9PT10
eXBlb2YgdCl7dmFyIG49dC5yZWY7bnVsbCE9biYmbyhuLGUsdC5fb3duZXIpfX0sZS5leHBvcnRz
PWF9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4hKCFl
fHwiZnVuY3Rpb24iIT09dHlwZW9mIGUuYXR0YWNoUmVmfHwiZnVuY3Rpb24iIT09dHlwZW9mIGUu
ZGV0YWNoUmVmKX12YXIgbz1uKDIpLGk9KG4oMCkse2FkZENvbXBvbmVudEFzUmVmVG86ZnVuY3Rp
b24oZSx0LG4pe3Iobil8fG8oIjExOSIpLG4uYXR0YWNoUmVmKHQsZSl9LHJlbW92ZUNvbXBvbmVu
dEFzUmVmRnJvbTpmdW5jdGlvbihlLHQsbil7cihuKXx8bygiMTIwIik7dmFyIGk9bi5nZXRQdWJs
aWNJbnN0YW5jZSgpO2kmJmkucmVmc1t0XT09PWUuZ2V0UHVibGljSW5zdGFuY2UoKSYmbi5kZXRh
Y2hSZWYodCl9fSk7ZS5leHBvcnRzPWl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFy
IHI9WyJSZXNwb25kZXJFdmVudFBsdWdpbiIsIlNpbXBsZUV2ZW50UGx1Z2luIiwiVGFwRXZlbnRQ
bHVnaW4iLCJFbnRlckxlYXZlRXZlbnRQbHVnaW4iLCJDaGFuZ2VFdmVudFBsdWdpbiIsIlNlbGVj
dEV2ZW50UGx1Z2luIiwiQmVmb3JlSW5wdXRFdmVudFBsdWdpbiJdO2UuZXhwb3J0cz1yfSxmdW5j
dGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTkpLG89big0KSxpPW4oMjUpLGE9e21v
dXNlRW50ZXI6e3JlZ2lzdHJhdGlvbk5hbWU6Im9uTW91c2VFbnRlciIsZGVwZW5kZW5jaWVzOlsi
dG9wTW91c2VPdXQiLCJ0b3BNb3VzZU92ZXIiXX0sbW91c2VMZWF2ZTp7cmVnaXN0cmF0aW9uTmFt
ZToib25Nb3VzZUxlYXZlIixkZXBlbmRlbmNpZXM6WyJ0b3BNb3VzZU91dCIsInRvcE1vdXNlT3Zl
ciJdfX0sdT17ZXZlbnRUeXBlczphLGV4dHJhY3RFdmVudHM6ZnVuY3Rpb24oZSx0LG4sdSl7aWYo
InRvcE1vdXNlT3ZlciI9PT1lJiYobi5yZWxhdGVkVGFyZ2V0fHxuLmZyb21FbGVtZW50KSlyZXR1
cm4gbnVsbDtpZigidG9wTW91c2VPdXQiIT09ZSYmInRvcE1vdXNlT3ZlciIhPT1lKXJldHVybiBu
dWxsO3ZhciBzO2lmKHUud2luZG93PT09dSlzPXU7ZWxzZXt2YXIgYz11Lm93bmVyRG9jdW1lbnQ7
cz1jP2MuZGVmYXVsdFZpZXd8fGMucGFyZW50V2luZG93OndpbmRvd312YXIgbCxwO2lmKCJ0b3BN
b3VzZU91dCI9PT1lKXtsPXQ7dmFyIGY9bi5yZWxhdGVkVGFyZ2V0fHxuLnRvRWxlbWVudDtwPWY/
by5nZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShmKTpudWxsfWVsc2UgbD1udWxsLHA9dDtpZihs
PT09cClyZXR1cm4gbnVsbDt2YXIgZD1udWxsPT1sP3M6by5nZXROb2RlRnJvbUluc3RhbmNlKGwp
LGg9bnVsbD09cD9zOm8uZ2V0Tm9kZUZyb21JbnN0YW5jZShwKSxtPWkuZ2V0UG9vbGVkKGEubW91
c2VMZWF2ZSxsLG4sdSk7bS50eXBlPSJtb3VzZWxlYXZlIixtLnRhcmdldD1kLG0ucmVsYXRlZFRh
cmdldD1oO3ZhciB2PWkuZ2V0UG9vbGVkKGEubW91c2VFbnRlcixwLG4sdSk7cmV0dXJuIHYudHlw
ZT0ibW91c2VlbnRlciIsdi50YXJnZXQ9aCx2LnJlbGF0ZWRUYXJnZXQ9ZCxyLmFjY3VtdWxhdGVF
bnRlckxlYXZlRGlzcGF0Y2hlcyhtLHYsbCxwKSxbbSx2XX19O2UuZXhwb3J0cz11fSxmdW5jdGlv
bihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTUpLG89ci5pbmplY3Rpb24uTVVTVF9VU0Vf
UFJPUEVSVFksaT1yLmluamVjdGlvbi5IQVNfQk9PTEVBTl9WQUxVRSxhPXIuaW5qZWN0aW9uLkhB
U19OVU1FUklDX1ZBTFVFLHU9ci5pbmplY3Rpb24uSEFTX1BPU0lUSVZFX05VTUVSSUNfVkFMVUUs
cz1yLmluamVjdGlvbi5IQVNfT1ZFUkxPQURFRF9CT09MRUFOX1ZBTFVFLGM9e2lzQ3VzdG9tQXR0
cmlidXRlOlJlZ0V4cC5wcm90b3R5cGUudGVzdC5iaW5kKG5ldyBSZWdFeHAoIl4oZGF0YXxhcmlh
KS1bIityLkFUVFJJQlVURV9OQU1FX0NIQVIrIl0qJCIpKSxQcm9wZXJ0aWVzOnthY2NlcHQ6MCxh
Y2NlcHRDaGFyc2V0OjAsYWNjZXNzS2V5OjAsYWN0aW9uOjAsYWxsb3dGdWxsU2NyZWVuOmksYWxs
b3dUcmFuc3BhcmVuY3k6MCxhbHQ6MCxhczowLGFzeW5jOmksYXV0b0NvbXBsZXRlOjAsYXV0b1Bs
YXk6aSxjYXB0dXJlOmksY2VsbFBhZGRpbmc6MCxjZWxsU3BhY2luZzowLGNoYXJTZXQ6MCxjaGFs
bGVuZ2U6MCxjaGVja2VkOm98aSxjaXRlOjAsY2xhc3NJRDowLGNsYXNzTmFtZTowLGNvbHM6dSxj
b2xTcGFuOjAsY29udGVudDowLGNvbnRlbnRFZGl0YWJsZTowLGNvbnRleHRNZW51OjAsY29udHJv
bHM6aSxjb29yZHM6MCxjcm9zc09yaWdpbjowLGRhdGE6MCxkYXRlVGltZTowLGRlZmF1bHQ6aSxk
ZWZlcjppLGRpcjowLGRpc2FibGVkOmksZG93bmxvYWQ6cyxkcmFnZ2FibGU6MCxlbmNUeXBlOjAs
Zm9ybTowLGZvcm1BY3Rpb246MCxmb3JtRW5jVHlwZTowLGZvcm1NZXRob2Q6MCxmb3JtTm9WYWxp
ZGF0ZTppLGZvcm1UYXJnZXQ6MCxmcmFtZUJvcmRlcjowLGhlYWRlcnM6MCxoZWlnaHQ6MCxoaWRk
ZW46aSxoaWdoOjAsaHJlZjowLGhyZWZMYW5nOjAsaHRtbEZvcjowLGh0dHBFcXVpdjowLGljb246
MCxpZDowLGlucHV0TW9kZTowLGludGVncml0eTowLGlzOjAsa2V5UGFyYW1zOjAsa2V5VHlwZTow
LGtpbmQ6MCxsYWJlbDowLGxhbmc6MCxsaXN0OjAsbG9vcDppLGxvdzowLG1hbmlmZXN0OjAsbWFy
Z2luSGVpZ2h0OjAsbWFyZ2luV2lkdGg6MCxtYXg6MCxtYXhMZW5ndGg6MCxtZWRpYTowLG1lZGlh
R3JvdXA6MCxtZXRob2Q6MCxtaW46MCxtaW5MZW5ndGg6MCxtdWx0aXBsZTpvfGksbXV0ZWQ6b3xp
LG5hbWU6MCxub25jZTowLG5vVmFsaWRhdGU6aSxvcGVuOmksb3B0aW11bTowLHBhdHRlcm46MCxw
bGFjZWhvbGRlcjowLHBsYXlzSW5saW5lOmkscG9zdGVyOjAscHJlbG9hZDowLHByb2ZpbGU6MCxy
YWRpb0dyb3VwOjAscmVhZE9ubHk6aSxyZWZlcnJlclBvbGljeTowLHJlbDowLHJlcXVpcmVkOmks
cmV2ZXJzZWQ6aSxyb2xlOjAscm93czp1LHJvd1NwYW46YSxzYW5kYm94OjAsc2NvcGU6MCxzY29w
ZWQ6aSxzY3JvbGxpbmc6MCxzZWFtbGVzczppLHNlbGVjdGVkOm98aSxzaGFwZTowLHNpemU6dSxz
aXplczowLHNwYW46dSxzcGVsbENoZWNrOjAsc3JjOjAsc3JjRG9jOjAsc3JjTGFuZzowLHNyY1Nl
dDowLHN0YXJ0OmEsc3RlcDowLHN0eWxlOjAsc3VtbWFyeTowLHRhYkluZGV4OjAsdGFyZ2V0OjAs
dGl0bGU6MCx0eXBlOjAsdXNlTWFwOjAsdmFsdWU6MCx3aWR0aDowLHdtb2RlOjAsd3JhcDowLGFi
b3V0OjAsZGF0YXR5cGU6MCxpbmxpc3Q6MCxwcmVmaXg6MCxwcm9wZXJ0eTowLHJlc291cmNlOjAs
dHlwZW9mOjAsdm9jYWI6MCxhdXRvQ2FwaXRhbGl6ZTowLGF1dG9Db3JyZWN0OjAsYXV0b1NhdmU6
MCxjb2xvcjowLGl0ZW1Qcm9wOjAsaXRlbVNjb3BlOmksaXRlbVR5cGU6MCxpdGVtSUQ6MCxpdGVt
UmVmOjAscmVzdWx0czowLHNlY3VyaXR5OjAsdW5zZWxlY3RhYmxlOjB9LERPTUF0dHJpYnV0ZU5h
bWVzOnthY2NlcHRDaGFyc2V0OiJhY2NlcHQtY2hhcnNldCIsY2xhc3NOYW1lOiJjbGFzcyIsaHRt
bEZvcjoiZm9yIixodHRwRXF1aXY6Imh0dHAtZXF1aXYifSxET01Qcm9wZXJ0eU5hbWVzOnt9LERP
TU11dGF0aW9uTWV0aG9kczp7dmFsdWU6ZnVuY3Rpb24oZSx0KXtpZihudWxsPT10KXJldHVybiBl
LnJlbW92ZUF0dHJpYnV0ZSgidmFsdWUiKTsibnVtYmVyIiE9PWUudHlwZXx8ITE9PT1lLmhhc0F0
dHJpYnV0ZSgidmFsdWUiKT9lLnNldEF0dHJpYnV0ZSgidmFsdWUiLCIiK3QpOmUudmFsaWRpdHkm
JiFlLnZhbGlkaXR5LmJhZElucHV0JiZlLm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PWUm
JmUuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIiIrdCl9fX07ZS5leHBvcnRzPWN9LGZ1bmN0aW9uKGUs
dCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigzNyksbz1uKDEzNyksaT17cHJvY2Vzc0NoaWxkcmVu
VXBkYXRlczpvLmRhbmdlcm91c2x5UHJvY2Vzc0NoaWxkcmVuVXBkYXRlcyxyZXBsYWNlTm9kZVdp
dGhNYXJrdXA6ci5kYW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0aE1hcmt1cH07ZS5leHBvcnRzPWl9
LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigyKSxvPW4oMTcpLGk9big1KSxh
PW4oMTM0KSx1PW4oNikscz0obigwKSx7ZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXA6
ZnVuY3Rpb24oZSx0KXtpZihpLmNhblVzZURPTXx8cigiNTYiKSx0fHxyKCI1NyIpLCJIVE1MIj09
PWUubm9kZU5hbWUmJnIoIjU4IiksInN0cmluZyI9PT10eXBlb2YgdCl7dmFyIG49YSh0LHUpWzBd
O2UucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobixlKX1lbHNlIG8ucmVwbGFjZUNoaWxkV2l0aFRy
ZWUoZSx0KX19KTtlLmV4cG9ydHM9c30sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5j
dGlvbiByKGUpe3ZhciB0PWUubWF0Y2gobCk7cmV0dXJuIHQmJnRbMV0udG9Mb3dlckNhc2UoKX1m
dW5jdGlvbiBvKGUsdCl7dmFyIG49YztjfHxzKCExKTt2YXIgbz1yKGUpLGk9byYmdShvKTtpZihp
KXtuLmlubmVySFRNTD1pWzFdK2UraVsyXTtmb3IodmFyIGw9aVswXTtsLS07KW49bi5sYXN0Q2hp
bGR9ZWxzZSBuLmlubmVySFRNTD1lO3ZhciBwPW4uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlw
dCIpO3AubGVuZ3RoJiYodHx8cyghMSksYShwKS5mb3JFYWNoKHQpKTtmb3IodmFyIGY9QXJyYXku
ZnJvbShuLmNoaWxkTm9kZXMpO24ubGFzdENoaWxkOyluLnJlbW92ZUNoaWxkKG4ubGFzdENoaWxk
KTtyZXR1cm4gZn12YXIgaT1uKDUpLGE9bigxMzUpLHU9bigxMzYpLHM9bigwKSxjPWkuY2FuVXNl
RE9NP2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOm51bGwsbD0vXlxzKjwoXHcrKS87ZS5l
eHBvcnRzPW99LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIg
dD1lLmxlbmd0aDtpZigoQXJyYXkuaXNBcnJheShlKXx8Im9iamVjdCIhPT10eXBlb2YgZSYmImZ1
bmN0aW9uIiE9PXR5cGVvZiBlKSYmYSghMSksIm51bWJlciIhPT10eXBlb2YgdCYmYSghMSksMD09
PXR8fHQtMSBpbiBlfHxhKCExKSwiZnVuY3Rpb24iPT09dHlwZW9mIGUuY2FsbGVlJiZhKCExKSxl
Lmhhc093blByb3BlcnR5KXRyeXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSl9
Y2F0Y2goZSl7fWZvcih2YXIgbj1BcnJheSh0KSxyPTA7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJu
IG59ZnVuY3Rpb24gbyhlKXtyZXR1cm4hIWUmJigib2JqZWN0Ij09dHlwZW9mIGV8fCJmdW5jdGlv
biI9PXR5cGVvZiBlKSYmImxlbmd0aCJpbiBlJiYhKCJzZXRJbnRlcnZhbCJpbiBlKSYmIm51bWJl
ciIhPXR5cGVvZiBlLm5vZGVUeXBlJiYoQXJyYXkuaXNBcnJheShlKXx8ImNhbGxlZSJpbiBlfHwi
aXRlbSJpbiBlKX1mdW5jdGlvbiBpKGUpe3JldHVybiBvKGUpP0FycmF5LmlzQXJyYXkoZSk/ZS5z
bGljZSgpOnIoZSk6W2VdfXZhciBhPW4oMCk7ZS5leHBvcnRzPWl9LGZ1bmN0aW9uKGUsdCxuKXsi
dXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gYXx8aSghMSksZi5oYXNPd25Qcm9wZXJ0
eShlKXx8KGU9IioiKSx1Lmhhc093blByb3BlcnR5KGUpfHwoYS5pbm5lckhUTUw9IioiPT09ZT8i
PGxpbmsgLz4iOiI8IitlKyI+PC8iK2UrIj4iLHVbZV09IWEuZmlyc3RDaGlsZCksdVtlXT9mW2Vd
Om51bGx9dmFyIG89big1KSxpPW4oMCksYT1vLmNhblVzZURPTT9kb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJkaXYiKTpudWxsLHU9e30scz1bMSwnPHNlbGVjdCBtdWx0aXBsZT0idHJ1ZSI+JywiPC9z
ZWxlY3Q+Il0sYz1bMSwiPHRhYmxlPiIsIjwvdGFibGU+Il0sbD1bMywiPHRhYmxlPjx0Ym9keT48
dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0scD1bMSwnPHN2ZyB4bWxucz0iaHR0cDovL3d3
dy53My5vcmcvMjAwMC9zdmciPicsIjwvc3ZnPiJdLGY9eyIqIjpbMSwiPzxkaXY+IiwiPC9kaXY+
Il0sYXJlYTpbMSwiPG1hcD4iLCI8L21hcD4iXSxjb2w6WzIsIjx0YWJsZT48dGJvZHk+PC90Ym9k
eT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48L3RhYmxlPiJdLGxlZ2VuZDpbMSwiPGZpZWxkc2V0
PiIsIjwvZmllbGRzZXQ+Il0scGFyYW06WzEsIjxvYmplY3Q+IiwiPC9vYmplY3Q+Il0sdHI6WzIs
Ijx0YWJsZT48dGJvZHk+IiwiPC90Ym9keT48L3RhYmxlPiJdLG9wdGdyb3VwOnMsb3B0aW9uOnMs
Y2FwdGlvbjpjLGNvbGdyb3VwOmMsdGJvZHk6Yyx0Zm9vdDpjLHRoZWFkOmMsdGQ6bCx0aDpsfTtb
ImNpcmNsZSIsImNsaXBQYXRoIiwiZGVmcyIsImVsbGlwc2UiLCJnIiwiaW1hZ2UiLCJsaW5lIiwi
bGluZWFyR3JhZGllbnQiLCJtYXNrIiwicGF0aCIsInBhdHRlcm4iLCJwb2x5Z29uIiwicG9seWxp
bmUiLCJyYWRpYWxHcmFkaWVudCIsInJlY3QiLCJzdG9wIiwidGV4dCIsInRzcGFuIl0uZm9yRWFj
aChmdW5jdGlvbihlKXtmW2VdPXAsdVtlXT0hMH0pLGUuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQs
bil7InVzZSBzdHJpY3QiO3ZhciByPW4oMzcpLG89big0KSxpPXtkYW5nZXJvdXNseVByb2Nlc3ND
aGlsZHJlblVwZGF0ZXM6ZnVuY3Rpb24oZSx0KXt2YXIgbj1vLmdldE5vZGVGcm9tSW5zdGFuY2Uo
ZSk7ci5wcm9jZXNzVXBkYXRlcyhuLHQpfX07ZS5leHBvcnRzPWl9LGZ1bmN0aW9uKGUsdCxuKXsi
dXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZihlKXt2YXIgdD1lLl9jdXJyZW50RWxlbWVudC5f
b3duZXJ8fG51bGw7aWYodCl7dmFyIG49dC5nZXROYW1lKCk7aWYobilyZXR1cm4iIFRoaXMgRE9N
IG5vZGUgd2FzIHJlbmRlcmVkIGJ5IGAiK24rImAuIn19cmV0dXJuIiJ9ZnVuY3Rpb24gbyhlLHQp
e3QmJihYW2UuX3RhZ10mJihudWxsIT10LmNoaWxkcmVufHxudWxsIT10LmRhbmdlcm91c2x5U2V0
SW5uZXJIVE1MKSYmdigiMTM3IixlLl90YWcsZS5fY3VycmVudEVsZW1lbnQuX293bmVyPyIgQ2hl
Y2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgIitlLl9jdXJyZW50RWxlbWVudC5fb3duZXIuZ2V0TmFt
ZSgpKyIuIjoiIiksbnVsbCE9dC5kYW5nZXJvdXNseVNldElubmVySFRNTCYmKG51bGwhPXQuY2hp
bGRyZW4mJnYoIjYwIiksIm9iamVjdCI9PT10eXBlb2YgdC5kYW5nZXJvdXNseVNldElubmVySFRN
TCYmVyBpbiB0LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MfHx2KCI2MSIpKSxudWxsIT10LnN0eWxl
JiYib2JqZWN0IiE9PXR5cGVvZiB0LnN0eWxlJiZ2KCI2MiIscihlKSkpfWZ1bmN0aW9uIGkoZSx0
LG4scil7aWYoIShyIGluc3RhbmNlb2YgQSkpe3ZhciBvPWUuX2hvc3RDb250YWluZXJJbmZvLGk9
by5fbm9kZSYmby5fbm9kZS5ub2RlVHlwZT09PUssdT1pP28uX25vZGU6by5fb3duZXJEb2N1bWVu
dDtCKHQsdSksci5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKGEse2luc3Q6ZSxyZWdpc3Ry
YXRpb25OYW1lOnQsbGlzdGVuZXI6bn0pfX1mdW5jdGlvbiBhKCl7dmFyIGU9dGhpczt4LnB1dExp
c3RlbmVyKGUuaW5zdCxlLnJlZ2lzdHJhdGlvbk5hbWUsZS5saXN0ZW5lcil9ZnVuY3Rpb24gdSgp
e3ZhciBlPXRoaXM7Uy5wb3N0TW91bnRXcmFwcGVyKGUpfWZ1bmN0aW9uIHMoKXt2YXIgZT10aGlz
O00ucG9zdE1vdW50V3JhcHBlcihlKX1mdW5jdGlvbiBjKCl7dmFyIGU9dGhpcztOLnBvc3RNb3Vu
dFdyYXBwZXIoZSl9ZnVuY3Rpb24gbCgpe2oudHJhY2sodGhpcyl9ZnVuY3Rpb24gcCgpe3ZhciBl
PXRoaXM7ZS5fcm9vdE5vZGVJRHx8digiNjMiKTt2YXIgdD1GKGUpO3N3aXRjaCh0fHx2KCI2NCIp
LGUuX3RhZyl7Y2FzZSJpZnJhbWUiOmNhc2Uib2JqZWN0IjplLl93cmFwcGVyU3RhdGUubGlzdGVu
ZXJzPVtQLnRyYXBCdWJibGVkRXZlbnQoInRvcExvYWQiLCJsb2FkIix0KV07YnJlYWs7Y2FzZSJ2
aWRlbyI6Y2FzZSJhdWRpbyI6ZS5fd3JhcHBlclN0YXRlLmxpc3RlbmVycz1bXTtmb3IodmFyIG4g
aW4gWSlZLmhhc093blByb3BlcnR5KG4pJiZlLl93cmFwcGVyU3RhdGUubGlzdGVuZXJzLnB1c2go
UC50cmFwQnViYmxlZEV2ZW50KG4sWVtuXSx0KSk7YnJlYWs7Y2FzZSJzb3VyY2UiOmUuX3dyYXBw
ZXJTdGF0ZS5saXN0ZW5lcnM9W1AudHJhcEJ1YmJsZWRFdmVudCgidG9wRXJyb3IiLCJlcnJvciIs
dCldO2JyZWFrO2Nhc2UiaW1nIjplLl93cmFwcGVyU3RhdGUubGlzdGVuZXJzPVtQLnRyYXBCdWJi
bGVkRXZlbnQoInRvcEVycm9yIiwiZXJyb3IiLHQpLFAudHJhcEJ1YmJsZWRFdmVudCgidG9wTG9h
ZCIsImxvYWQiLHQpXTticmVhaztjYXNlImZvcm0iOmUuX3dyYXBwZXJTdGF0ZS5saXN0ZW5lcnM9
W1AudHJhcEJ1YmJsZWRFdmVudCgidG9wUmVzZXQiLCJyZXNldCIsdCksUC50cmFwQnViYmxlZEV2
ZW50KCJ0b3BTdWJtaXQiLCJzdWJtaXQiLHQpXTticmVhaztjYXNlImlucHV0IjpjYXNlInNlbGVj
dCI6Y2FzZSJ0ZXh0YXJlYSI6ZS5fd3JhcHBlclN0YXRlLmxpc3RlbmVycz1bUC50cmFwQnViYmxl
ZEV2ZW50KCJ0b3BJbnZhbGlkIiwiaW52YWxpZCIsdCldfX1mdW5jdGlvbiBmKCl7SS5wb3N0VXBk
YXRlV3JhcHBlcih0aGlzKX1mdW5jdGlvbiBkKGUpe1ouY2FsbCgkLGUpfHwoUS50ZXN0KGUpfHx2
KCI2NSIsZSksJFtlXT0hMCl9ZnVuY3Rpb24gaChlLHQpe3JldHVybiBlLmluZGV4T2YoIi0iKT49
MHx8bnVsbCE9dC5pc31mdW5jdGlvbiBtKGUpe3ZhciB0PWUudHlwZTtkKHQpLHRoaXMuX2N1cnJl
bnRFbGVtZW50PWUsdGhpcy5fdGFnPXQudG9Mb3dlckNhc2UoKSx0aGlzLl9uYW1lc3BhY2VVUkk9
bnVsbCx0aGlzLl9yZW5kZXJlZENoaWxkcmVuPW51bGwsdGhpcy5fcHJldmlvdXNTdHlsZT1udWxs
LHRoaXMuX3ByZXZpb3VzU3R5bGVDb3B5PW51bGwsdGhpcy5faG9zdE5vZGU9bnVsbCx0aGlzLl9o
b3N0UGFyZW50PW51bGwsdGhpcy5fcm9vdE5vZGVJRD0wLHRoaXMuX2RvbUlEPTAsdGhpcy5faG9z
dENvbnRhaW5lckluZm89bnVsbCx0aGlzLl93cmFwcGVyU3RhdGU9bnVsbCx0aGlzLl90b3BMZXZl
bFdyYXBwZXI9bnVsbCx0aGlzLl9mbGFncz0wfXZhciB2PW4oMikseT1uKDMpLGc9bigxMzkpLGI9
bigxNDApLF89bigxNyksQz1uKDM4KSx3PW4oMTUpLEU9big3MCkseD1uKDIwKSxUPW4oMzEpLFA9
bigyOCksTz1uKDU4KSxrPW4oNCksUz1uKDE1MCksTj1uKDE1MiksST1uKDcxKSxNPW4oMTUzKSxS
PShuKDcpLG4oMTU0KSksQT1uKDE2MSksRD0obig2KSxuKDI3KSksaj0obigwKSxuKDM1KSxuKDQy
KSxuKDY0KSksVT0obig0NiksbigxKSxPKSxMPXguZGVsZXRlTGlzdGVuZXIsRj1rLmdldE5vZGVG
cm9tSW5zdGFuY2UsQj1QLmxpc3RlblRvLFY9VC5yZWdpc3RyYXRpb25OYW1lTW9kdWxlcyxxPXtz
dHJpbmc6ITAsbnVtYmVyOiEwfSxXPSJfX2h0bWwiLEg9e2NoaWxkcmVuOm51bGwsZGFuZ2Vyb3Vz
bHlTZXRJbm5lckhUTUw6bnVsbCxzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmc6bnVsbH0s
Sz0xMSxZPXt0b3BBYm9ydDoiYWJvcnQiLHRvcENhblBsYXk6ImNhbnBsYXkiLHRvcENhblBsYXlU
aHJvdWdoOiJjYW5wbGF5dGhyb3VnaCIsdG9wRHVyYXRpb25DaGFuZ2U6ImR1cmF0aW9uY2hhbmdl
Iix0b3BFbXB0aWVkOiJlbXB0aWVkIix0b3BFbmNyeXB0ZWQ6ImVuY3J5cHRlZCIsdG9wRW5kZWQ6
ImVuZGVkIix0b3BFcnJvcjoiZXJyb3IiLHRvcExvYWRlZERhdGE6ImxvYWRlZGRhdGEiLHRvcExv
YWRlZE1ldGFkYXRhOiJsb2FkZWRtZXRhZGF0YSIsdG9wTG9hZFN0YXJ0OiJsb2Fkc3RhcnQiLHRv
cFBhdXNlOiJwYXVzZSIsdG9wUGxheToicGxheSIsdG9wUGxheWluZzoicGxheWluZyIsdG9wUHJv
Z3Jlc3M6InByb2dyZXNzIix0b3BSYXRlQ2hhbmdlOiJyYXRlY2hhbmdlIix0b3BTZWVrZWQ6InNl
ZWtlZCIsdG9wU2Vla2luZzoic2Vla2luZyIsdG9wU3RhbGxlZDoic3RhbGxlZCIsdG9wU3VzcGVu
ZDoic3VzcGVuZCIsdG9wVGltZVVwZGF0ZToidGltZXVwZGF0ZSIsdG9wVm9sdW1lQ2hhbmdlOiJ2
b2x1bWVjaGFuZ2UiLHRvcFdhaXRpbmc6IndhaXRpbmcifSx6PXthcmVhOiEwLGJhc2U6ITAsYnI6
ITAsY29sOiEwLGVtYmVkOiEwLGhyOiEwLGltZzohMCxpbnB1dDohMCxrZXlnZW46ITAsbGluazoh
MCxtZXRhOiEwLHBhcmFtOiEwLHNvdXJjZTohMCx0cmFjazohMCx3YnI6ITB9LEc9e2xpc3Rpbmc6
ITAscHJlOiEwLHRleHRhcmVhOiEwfSxYPXkoe21lbnVpdGVtOiEwfSx6KSxRPS9eW2EtekEtWl1b
YS16QS1aOl9cLlwtXGRdKiQvLCQ9e30sWj17fS5oYXNPd25Qcm9wZXJ0eSxKPTE7bS5kaXNwbGF5
TmFtZT0iUmVhY3RET01Db21wb25lbnQiLG0uTWl4aW49e21vdW50Q29tcG9uZW50OmZ1bmN0aW9u
KGUsdCxuLHIpe3RoaXMuX3Jvb3ROb2RlSUQ9SisrLHRoaXMuX2RvbUlEPW4uX2lkQ291bnRlcisr
LHRoaXMuX2hvc3RQYXJlbnQ9dCx0aGlzLl9ob3N0Q29udGFpbmVySW5mbz1uO3ZhciBpPXRoaXMu
X2N1cnJlbnRFbGVtZW50LnByb3BzO3N3aXRjaCh0aGlzLl90YWcpe2Nhc2UiYXVkaW8iOmNhc2Ui
Zm9ybSI6Y2FzZSJpZnJhbWUiOmNhc2UiaW1nIjpjYXNlImxpbmsiOmNhc2Uib2JqZWN0IjpjYXNl
InNvdXJjZSI6Y2FzZSJ2aWRlbyI6dGhpcy5fd3JhcHBlclN0YXRlPXtsaXN0ZW5lcnM6bnVsbH0s
ZS5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKHAsdGhpcyk7YnJlYWs7Y2FzZSJpbnB1dCI6
Uy5tb3VudFdyYXBwZXIodGhpcyxpLHQpLGk9Uy5nZXRIb3N0UHJvcHModGhpcyxpKSxlLmdldFJl
YWN0TW91bnRSZWFkeSgpLmVucXVldWUobCx0aGlzKSxlLmdldFJlYWN0TW91bnRSZWFkeSgpLmVu
cXVldWUocCx0aGlzKTticmVhaztjYXNlIm9wdGlvbiI6Ti5tb3VudFdyYXBwZXIodGhpcyxpLHQp
LGk9Ti5nZXRIb3N0UHJvcHModGhpcyxpKTticmVhaztjYXNlInNlbGVjdCI6SS5tb3VudFdyYXBw
ZXIodGhpcyxpLHQpLGk9SS5nZXRIb3N0UHJvcHModGhpcyxpKSxlLmdldFJlYWN0TW91bnRSZWFk
eSgpLmVucXVldWUocCx0aGlzKTticmVhaztjYXNlInRleHRhcmVhIjpNLm1vdW50V3JhcHBlcih0
aGlzLGksdCksaT1NLmdldEhvc3RQcm9wcyh0aGlzLGkpLGUuZ2V0UmVhY3RNb3VudFJlYWR5KCku
ZW5xdWV1ZShsLHRoaXMpLGUuZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShwLHRoaXMpfW8o
dGhpcyxpKTt2YXIgYSxmO251bGwhPXQ/KGE9dC5fbmFtZXNwYWNlVVJJLGY9dC5fdGFnKTpuLl90
YWcmJihhPW4uX25hbWVzcGFjZVVSSSxmPW4uX3RhZyksKG51bGw9PWF8fGE9PT1DLnN2ZyYmImZv
cmVpZ25vYmplY3QiPT09ZikmJihhPUMuaHRtbCksYT09PUMuaHRtbCYmKCJzdmciPT09dGhpcy5f
dGFnP2E9Qy5zdmc6Im1hdGgiPT09dGhpcy5fdGFnJiYoYT1DLm1hdGhtbCkpLHRoaXMuX25hbWVz
cGFjZVVSST1hO3ZhciBkO2lmKGUudXNlQ3JlYXRlRWxlbWVudCl7dmFyIGgsbT1uLl9vd25lckRv
Y3VtZW50O2lmKGE9PT1DLmh0bWwpaWYoInNjcmlwdCI9PT10aGlzLl90YWcpe3ZhciB2PW0uY3Jl
YXRlRWxlbWVudCgiZGl2IikseT10aGlzLl9jdXJyZW50RWxlbWVudC50eXBlO3YuaW5uZXJIVE1M
PSI8Iit5KyI+PC8iK3krIj4iLGg9di5yZW1vdmVDaGlsZCh2LmZpcnN0Q2hpbGQpfWVsc2UgaD1p
LmlzP20uY3JlYXRlRWxlbWVudCh0aGlzLl9jdXJyZW50RWxlbWVudC50eXBlLGkuaXMpOm0uY3Jl
YXRlRWxlbWVudCh0aGlzLl9jdXJyZW50RWxlbWVudC50eXBlKTtlbHNlIGg9bS5jcmVhdGVFbGVt
ZW50TlMoYSx0aGlzLl9jdXJyZW50RWxlbWVudC50eXBlKTtrLnByZWNhY2hlTm9kZSh0aGlzLGgp
LHRoaXMuX2ZsYWdzfD1VLmhhc0NhY2hlZENoaWxkTm9kZXMsdGhpcy5faG9zdFBhcmVudHx8RS5z
ZXRBdHRyaWJ1dGVGb3JSb290KGgpLHRoaXMuX3VwZGF0ZURPTVByb3BlcnRpZXMobnVsbCxpLGUp
O3ZhciBiPV8oaCk7dGhpcy5fY3JlYXRlSW5pdGlhbENoaWxkcmVuKGUsaSxyLGIpLGQ9Yn1lbHNl
e3ZhciB3PXRoaXMuX2NyZWF0ZU9wZW5UYWdNYXJrdXBBbmRQdXRMaXN0ZW5lcnMoZSxpKSx4PXRo
aXMuX2NyZWF0ZUNvbnRlbnRNYXJrdXAoZSxpLHIpO2Q9IXgmJnpbdGhpcy5fdGFnXT93KyIvPiI6
dysiPiIreCsiPC8iK3RoaXMuX2N1cnJlbnRFbGVtZW50LnR5cGUrIj4ifXN3aXRjaCh0aGlzLl90
YWcpe2Nhc2UiaW5wdXQiOmUuZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZSh1LHRoaXMpLGku
YXV0b0ZvY3VzJiZlLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUoZy5mb2N1c0RPTUNvbXBv
bmVudCx0aGlzKTticmVhaztjYXNlInRleHRhcmVhIjplLmdldFJlYWN0TW91bnRSZWFkeSgpLmVu
cXVldWUocyx0aGlzKSxpLmF1dG9Gb2N1cyYmZS5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVl
KGcuZm9jdXNET01Db21wb25lbnQsdGhpcyk7YnJlYWs7Y2FzZSJzZWxlY3QiOmNhc2UiYnV0dG9u
IjppLmF1dG9Gb2N1cyYmZS5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKGcuZm9jdXNET01D
b21wb25lbnQsdGhpcyk7YnJlYWs7Y2FzZSJvcHRpb24iOmUuZ2V0UmVhY3RNb3VudFJlYWR5KCku
ZW5xdWV1ZShjLHRoaXMpfXJldHVybiBkfSxfY3JlYXRlT3BlblRhZ01hcmt1cEFuZFB1dExpc3Rl
bmVyczpmdW5jdGlvbihlLHQpe3ZhciBuPSI8Iit0aGlzLl9jdXJyZW50RWxlbWVudC50eXBlO2Zv
cih2YXIgciBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkocikpe3ZhciBvPXRbcl07aWYobnVsbCE9
bylpZihWLmhhc093blByb3BlcnR5KHIpKW8mJmkodGhpcyxyLG8sZSk7ZWxzZXsic3R5bGUiPT09
ciYmKG8mJihvPXRoaXMuX3ByZXZpb3VzU3R5bGVDb3B5PXkoe30sdC5zdHlsZSkpLG89Yi5jcmVh
dGVNYXJrdXBGb3JTdHlsZXMobyx0aGlzKSk7dmFyIGE9bnVsbDtudWxsIT10aGlzLl90YWcmJmgo
dGhpcy5fdGFnLHQpP0guaGFzT3duUHJvcGVydHkocil8fChhPUUuY3JlYXRlTWFya3VwRm9yQ3Vz
dG9tQXR0cmlidXRlKHIsbykpOmE9RS5jcmVhdGVNYXJrdXBGb3JQcm9wZXJ0eShyLG8pLGEmJihu
Kz0iICIrYSl9fXJldHVybiBlLnJlbmRlclRvU3RhdGljTWFya3VwP246KHRoaXMuX2hvc3RQYXJl
bnR8fChuKz0iICIrRS5jcmVhdGVNYXJrdXBGb3JSb290KCkpLG4rPSIgIitFLmNyZWF0ZU1hcmt1
cEZvcklEKHRoaXMuX2RvbUlEKSl9LF9jcmVhdGVDb250ZW50TWFya3VwOmZ1bmN0aW9uKGUsdCxu
KXt2YXIgcj0iIixvPXQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw7aWYobnVsbCE9byludWxsIT1v
Ll9faHRtbCYmKHI9by5fX2h0bWwpO2Vsc2V7dmFyIGk9cVt0eXBlb2YgdC5jaGlsZHJlbl0/dC5j
aGlsZHJlbjpudWxsLGE9bnVsbCE9aT9udWxsOnQuY2hpbGRyZW47aWYobnVsbCE9aSlyPUQoaSk7
ZWxzZSBpZihudWxsIT1hKXt2YXIgdT10aGlzLm1vdW50Q2hpbGRyZW4oYSxlLG4pO3I9dS5qb2lu
KCIiKX19cmV0dXJuIEdbdGhpcy5fdGFnXSYmIlxuIj09PXIuY2hhckF0KDApPyJcbiIrcjpyfSxf
Y3JlYXRlSW5pdGlhbENoaWxkcmVuOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPXQuZGFuZ2Vyb3Vz
bHlTZXRJbm5lckhUTUw7aWYobnVsbCE9byludWxsIT1vLl9faHRtbCYmXy5xdWV1ZUhUTUwocixv
Ll9faHRtbCk7ZWxzZXt2YXIgaT1xW3R5cGVvZiB0LmNoaWxkcmVuXT90LmNoaWxkcmVuOm51bGws
YT1udWxsIT1pP251bGw6dC5jaGlsZHJlbjtpZihudWxsIT1pKSIiIT09aSYmXy5xdWV1ZVRleHQo
cixpKTtlbHNlIGlmKG51bGwhPWEpZm9yKHZhciB1PXRoaXMubW91bnRDaGlsZHJlbihhLGUsbiks
cz0wO3M8dS5sZW5ndGg7cysrKV8ucXVldWVDaGlsZChyLHVbc10pfX0scmVjZWl2ZUNvbXBvbmVu
dDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5fY3VycmVudEVsZW1lbnQ7dGhpcy5fY3VycmVu
dEVsZW1lbnQ9ZSx0aGlzLnVwZGF0ZUNvbXBvbmVudCh0LHIsZSxuKX0sdXBkYXRlQ29tcG9uZW50
OmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXQucHJvcHMsYT10aGlzLl9jdXJyZW50RWxlbWVudC5w
cm9wcztzd2l0Y2godGhpcy5fdGFnKXtjYXNlImlucHV0IjppPVMuZ2V0SG9zdFByb3BzKHRoaXMs
aSksYT1TLmdldEhvc3RQcm9wcyh0aGlzLGEpO2JyZWFrO2Nhc2Uib3B0aW9uIjppPU4uZ2V0SG9z
dFByb3BzKHRoaXMsaSksYT1OLmdldEhvc3RQcm9wcyh0aGlzLGEpO2JyZWFrO2Nhc2Uic2VsZWN0
IjppPUkuZ2V0SG9zdFByb3BzKHRoaXMsaSksYT1JLmdldEhvc3RQcm9wcyh0aGlzLGEpO2JyZWFr
O2Nhc2UidGV4dGFyZWEiOmk9TS5nZXRIb3N0UHJvcHModGhpcyxpKSxhPU0uZ2V0SG9zdFByb3Bz
KHRoaXMsYSl9c3dpdGNoKG8odGhpcyxhKSx0aGlzLl91cGRhdGVET01Qcm9wZXJ0aWVzKGksYSxl
KSx0aGlzLl91cGRhdGVET01DaGlsZHJlbihpLGEsZSxyKSx0aGlzLl90YWcpe2Nhc2UiaW5wdXQi
OlMudXBkYXRlV3JhcHBlcih0aGlzKTticmVhaztjYXNlInRleHRhcmVhIjpNLnVwZGF0ZVdyYXBw
ZXIodGhpcyk7YnJlYWs7Y2FzZSJzZWxlY3QiOmUuZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1
ZShmLHRoaXMpfX0sX3VwZGF0ZURPTVByb3BlcnRpZXM6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG8s
YTtmb3IociBpbiBlKWlmKCF0Lmhhc093blByb3BlcnR5KHIpJiZlLmhhc093blByb3BlcnR5KHIp
JiZudWxsIT1lW3JdKWlmKCJzdHlsZSI9PT1yKXt2YXIgdT10aGlzLl9wcmV2aW91c1N0eWxlQ29w
eTtmb3IobyBpbiB1KXUuaGFzT3duUHJvcGVydHkobykmJihhPWF8fHt9LGFbb109IiIpO3RoaXMu
X3ByZXZpb3VzU3R5bGVDb3B5PW51bGx9ZWxzZSBWLmhhc093blByb3BlcnR5KHIpP2Vbcl0mJkwo
dGhpcyxyKTpoKHRoaXMuX3RhZyxlKT9ILmhhc093blByb3BlcnR5KHIpfHxFLmRlbGV0ZVZhbHVl
Rm9yQXR0cmlidXRlKEYodGhpcykscik6KHcucHJvcGVydGllc1tyXXx8dy5pc0N1c3RvbUF0dHJp
YnV0ZShyKSkmJkUuZGVsZXRlVmFsdWVGb3JQcm9wZXJ0eShGKHRoaXMpLHIpO2ZvcihyIGluIHQp
e3ZhciBzPXRbcl0sYz0ic3R5bGUiPT09cj90aGlzLl9wcmV2aW91c1N0eWxlQ29weTpudWxsIT1l
P2Vbcl06dm9pZCAwO2lmKHQuaGFzT3duUHJvcGVydHkocikmJnMhPT1jJiYobnVsbCE9c3x8bnVs
bCE9YykpaWYoInN0eWxlIj09PXIpaWYocz9zPXRoaXMuX3ByZXZpb3VzU3R5bGVDb3B5PXkoe30s
cyk6dGhpcy5fcHJldmlvdXNTdHlsZUNvcHk9bnVsbCxjKXtmb3IobyBpbiBjKSFjLmhhc093blBy
b3BlcnR5KG8pfHxzJiZzLmhhc093blByb3BlcnR5KG8pfHwoYT1hfHx7fSxhW29dPSIiKTtmb3Io
byBpbiBzKXMuaGFzT3duUHJvcGVydHkobykmJmNbb10hPT1zW29dJiYoYT1hfHx7fSxhW29dPXNb
b10pfWVsc2UgYT1zO2Vsc2UgaWYoVi5oYXNPd25Qcm9wZXJ0eShyKSlzP2kodGhpcyxyLHMsbik6
YyYmTCh0aGlzLHIpO2Vsc2UgaWYoaCh0aGlzLl90YWcsdCkpSC5oYXNPd25Qcm9wZXJ0eShyKXx8
RS5zZXRWYWx1ZUZvckF0dHJpYnV0ZShGKHRoaXMpLHIscyk7ZWxzZSBpZih3LnByb3BlcnRpZXNb
cl18fHcuaXNDdXN0b21BdHRyaWJ1dGUocikpe3ZhciBsPUYodGhpcyk7bnVsbCE9cz9FLnNldFZh
bHVlRm9yUHJvcGVydHkobCxyLHMpOkUuZGVsZXRlVmFsdWVGb3JQcm9wZXJ0eShsLHIpfX1hJiZi
LnNldFZhbHVlRm9yU3R5bGVzKEYodGhpcyksYSx0aGlzKX0sX3VwZGF0ZURPTUNoaWxkcmVuOmZ1
bmN0aW9uKGUsdCxuLHIpe3ZhciBvPXFbdHlwZW9mIGUuY2hpbGRyZW5dP2UuY2hpbGRyZW46bnVs
bCxpPXFbdHlwZW9mIHQuY2hpbGRyZW5dP3QuY2hpbGRyZW46bnVsbCxhPWUuZGFuZ2Vyb3VzbHlT
ZXRJbm5lckhUTUwmJmUuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwuX19odG1sLHU9dC5kYW5nZXJv
dXNseVNldElubmVySFRNTCYmdC5kYW5nZXJvdXNseVNldElubmVySFRNTC5fX2h0bWwscz1udWxs
IT1vP251bGw6ZS5jaGlsZHJlbixjPW51bGwhPWk/bnVsbDp0LmNoaWxkcmVuLGw9bnVsbCE9b3x8
bnVsbCE9YSxwPW51bGwhPWl8fG51bGwhPXU7bnVsbCE9cyYmbnVsbD09Yz90aGlzLnVwZGF0ZUNo
aWxkcmVuKG51bGwsbixyKTpsJiYhcCYmdGhpcy51cGRhdGVUZXh0Q29udGVudCgiIiksbnVsbCE9
aT9vIT09aSYmdGhpcy51cGRhdGVUZXh0Q29udGVudCgiIitpKTpudWxsIT11P2EhPT11JiZ0aGlz
LnVwZGF0ZU1hcmt1cCgiIit1KTpudWxsIT1jJiZ0aGlzLnVwZGF0ZUNoaWxkcmVuKGMsbixyKX0s
Z2V0SG9zdE5vZGU6ZnVuY3Rpb24oKXtyZXR1cm4gRih0aGlzKX0sdW5tb3VudENvbXBvbmVudDpm
dW5jdGlvbihlKXtzd2l0Y2godGhpcy5fdGFnKXtjYXNlImF1ZGlvIjpjYXNlImZvcm0iOmNhc2Ui
aWZyYW1lIjpjYXNlImltZyI6Y2FzZSJsaW5rIjpjYXNlIm9iamVjdCI6Y2FzZSJzb3VyY2UiOmNh
c2UidmlkZW8iOnZhciB0PXRoaXMuX3dyYXBwZXJTdGF0ZS5saXN0ZW5lcnM7aWYodClmb3IodmFy
IG49MDtuPHQubGVuZ3RoO24rKyl0W25dLnJlbW92ZSgpO2JyZWFrO2Nhc2UiaW5wdXQiOmNhc2Ui
dGV4dGFyZWEiOmouc3RvcFRyYWNraW5nKHRoaXMpO2JyZWFrO2Nhc2UiaHRtbCI6Y2FzZSJoZWFk
IjpjYXNlImJvZHkiOnYoIjY2Iix0aGlzLl90YWcpfXRoaXMudW5tb3VudENoaWxkcmVuKGUpLGsu
dW5jYWNoZU5vZGUodGhpcykseC5kZWxldGVBbGxMaXN0ZW5lcnModGhpcyksdGhpcy5fcm9vdE5v
ZGVJRD0wLHRoaXMuX2RvbUlEPTAsdGhpcy5fd3JhcHBlclN0YXRlPW51bGx9LGdldFB1YmxpY0lu
c3RhbmNlOmZ1bmN0aW9uKCl7cmV0dXJuIEYodGhpcyl9fSx5KG0ucHJvdG90eXBlLG0uTWl4aW4s
Ui5NaXhpbiksZS5leHBvcnRzPW19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9
big0KSxvPW4oNjgpLGk9e2ZvY3VzRE9NQ29tcG9uZW50OmZ1bmN0aW9uKCl7byhyLmdldE5vZGVG
cm9tSW5zdGFuY2UodGhpcykpfX07ZS5leHBvcnRzPWl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0
cmljdCI7dmFyIHI9big2OSksbz1uKDUpLGk9KG4oNyksbigxNDEpLG4oMTQzKSksYT1uKDE0NCks
dT1uKDE0Nikscz0obigxKSx1KGZ1bmN0aW9uKGUpe3JldHVybiBhKGUpfSkpLGM9ITEsbD0iY3Nz
RmxvYXQiO2lmKG8uY2FuVXNlRE9NKXt2YXIgcD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYi
KS5zdHlsZTt0cnl7cC5mb250PSIifWNhdGNoKGUpe2M9ITB9dm9pZCAwPT09ZG9jdW1lbnQuZG9j
dW1lbnRFbGVtZW50LnN0eWxlLmNzc0Zsb2F0JiYobD0ic3R5bGVGbG9hdCIpfXZhciBmPXtjcmVh
dGVNYXJrdXBGb3JTdHlsZXM6ZnVuY3Rpb24oZSx0KXt2YXIgbj0iIjtmb3IodmFyIHIgaW4gZSlp
ZihlLmhhc093blByb3BlcnR5KHIpKXt2YXIgbz0wPT09ci5pbmRleE9mKCItLSIpLGE9ZVtyXTtu
dWxsIT1hJiYobis9cyhyKSsiOiIsbis9aShyLGEsdCxvKSsiOyIpfXJldHVybiBufHxudWxsfSxz
ZXRWYWx1ZUZvclN0eWxlczpmdW5jdGlvbihlLHQsbil7dmFyIG89ZS5zdHlsZTtmb3IodmFyIGEg
aW4gdClpZih0Lmhhc093blByb3BlcnR5KGEpKXt2YXIgdT0wPT09YS5pbmRleE9mKCItLSIpLHM9
aShhLHRbYV0sbix1KTtpZigiZmxvYXQiIT09YSYmImNzc0Zsb2F0IiE9PWF8fChhPWwpLHUpby5z
ZXRQcm9wZXJ0eShhLHMpO2Vsc2UgaWYocylvW2FdPXM7ZWxzZXt2YXIgcD1jJiZyLnNob3J0aGFu
ZFByb3BlcnR5RXhwYW5zaW9uc1thXTtpZihwKWZvcih2YXIgZiBpbiBwKW9bZl09IiI7ZWxzZSBv
W2FdPSIifX19fTtlLmV4cG9ydHM9Zn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5j
dGlvbiByKGUpe3JldHVybiBvKGUucmVwbGFjZShpLCJtcy0iKSl9dmFyIG89bigxNDIpLGk9L14t
bXMtLztlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBy
KGUpe3JldHVybiBlLnJlcGxhY2UobyxmdW5jdGlvbihlLHQpe3JldHVybiB0LnRvVXBwZXJDYXNl
KCl9KX12YXIgbz0vLSguKS9nO2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJp
Y3QiO2Z1bmN0aW9uIHIoZSx0LG4scil7aWYobnVsbD09dHx8ImJvb2xlYW4iPT09dHlwZW9mIHR8
fCIiPT09dClyZXR1cm4iIjt2YXIgbz1pc05hTih0KTtpZihyfHxvfHwwPT09dHx8aS5oYXNPd25Q
cm9wZXJ0eShlKSYmaVtlXSlyZXR1cm4iIit0O2lmKCJzdHJpbmciPT09dHlwZW9mIHQpe3Q9dC50
cmltKCl9cmV0dXJuIHQrInB4In12YXIgbz1uKDY5KSxpPShuKDEpLG8uaXNVbml0bGVzc051bWJl
cik7ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihl
KXtyZXR1cm4gbyhlKS5yZXBsYWNlKGksIi1tcy0iKX12YXIgbz1uKDE0NSksaT0vXm1zLS87ZS5l
eHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1
cm4gZS5yZXBsYWNlKG8sIi0kMSIpLnRvTG93ZXJDYXNlKCl9dmFyIG89LyhbQS1aXSkvZztlLmV4
cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0
PXt9O3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdC5oYXNPd25Qcm9wZXJ0eShuKXx8KHRbbl09
ZS5jYWxsKHRoaXMsbikpLHRbbl19fWUuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBz
dHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuJyInK28oZSkrJyInfXZhciBvPW4oMjcpO2UuZXhw
b3J0cz1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7by5lbnF1
ZXVlRXZlbnRzKGUpLG8ucHJvY2Vzc0V2ZW50UXVldWUoITEpfXZhciBvPW4oMjApLGk9e2hhbmRs
ZVRvcExldmVsOmZ1bmN0aW9uKGUsdCxuLGkpe3Ioby5leHRyYWN0RXZlbnRzKGUsdCxuLGkpKX19
O2UuZXhwb3J0cz1pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0
KXt2YXIgbj17fTtyZXR1cm4gbltlLnRvTG93ZXJDYXNlKCldPXQudG9Mb3dlckNhc2UoKSxuWyJX
ZWJraXQiK2VdPSJ3ZWJraXQiK3QsblsiTW96IitlXT0ibW96Iit0LG5bIm1zIitlXT0iTVMiK3Qs
blsiTyIrZV09Im8iK3QudG9Mb3dlckNhc2UoKSxufWZ1bmN0aW9uIG8oZSl7aWYodVtlXSlyZXR1
cm4gdVtlXTtpZighYVtlXSlyZXR1cm4gZTt2YXIgdD1hW2VdO2Zvcih2YXIgbiBpbiB0KWlmKHQu
aGFzT3duUHJvcGVydHkobikmJm4gaW4gcylyZXR1cm4gdVtlXT10W25dO3JldHVybiIifXZhciBp
PW4oNSksYT17YW5pbWF0aW9uZW5kOnIoIkFuaW1hdGlvbiIsIkFuaW1hdGlvbkVuZCIpLGFuaW1h
dGlvbml0ZXJhdGlvbjpyKCJBbmltYXRpb24iLCJBbmltYXRpb25JdGVyYXRpb24iKSxhbmltYXRp
b25zdGFydDpyKCJBbmltYXRpb24iLCJBbmltYXRpb25TdGFydCIpLHRyYW5zaXRpb25lbmQ6cigi
VHJhbnNpdGlvbiIsIlRyYW5zaXRpb25FbmQiKX0sdT17fSxzPXt9O2kuY2FuVXNlRE9NJiYocz1k
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKS5zdHlsZSwiQW5pbWF0aW9uRXZlbnQiaW4gd2lu
ZG93fHwoZGVsZXRlIGEuYW5pbWF0aW9uZW5kLmFuaW1hdGlvbixkZWxldGUgYS5hbmltYXRpb25p
dGVyYXRpb24uYW5pbWF0aW9uLGRlbGV0ZSBhLmFuaW1hdGlvbnN0YXJ0LmFuaW1hdGlvbiksIlRy
YW5zaXRpb25FdmVudCJpbiB3aW5kb3d8fGRlbGV0ZSBhLnRyYW5zaXRpb25lbmQudHJhbnNpdGlv
biksZS5leHBvcnRzPW99LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigp
e3RoaXMuX3Jvb3ROb2RlSUQmJmYudXBkYXRlV3JhcHBlcih0aGlzKX1mdW5jdGlvbiBvKGUpe3Jl
dHVybiJjaGVja2JveCI9PT1lLnR5cGV8fCJyYWRpbyI9PT1lLnR5cGU/bnVsbCE9ZS5jaGVja2Vk
Om51bGwhPWUudmFsdWV9ZnVuY3Rpb24gaShlKXt2YXIgdD10aGlzLl9jdXJyZW50RWxlbWVudC5w
cm9wcyxuPWMuZXhlY3V0ZU9uQ2hhbmdlKHQsZSk7cC5hc2FwKHIsdGhpcyk7dmFyIG89dC5uYW1l
O2lmKCJyYWRpbyI9PT10LnR5cGUmJm51bGwhPW8pe2Zvcih2YXIgaT1sLmdldE5vZGVGcm9tSW5z
dGFuY2UodGhpcyksdT1pO3UucGFyZW50Tm9kZTspdT11LnBhcmVudE5vZGU7Zm9yKHZhciBzPXUu
cXVlcnlTZWxlY3RvckFsbCgiaW5wdXRbbmFtZT0iK0pTT04uc3RyaW5naWZ5KCIiK28pKyddW3R5
cGU9InJhZGlvIl0nKSxmPTA7ZjxzLmxlbmd0aDtmKyspe3ZhciBkPXNbZl07aWYoZCE9PWkmJmQu
Zm9ybT09PWkuZm9ybSl7dmFyIGg9bC5nZXRJbnN0YW5jZUZyb21Ob2RlKGQpO2h8fGEoIjkwIiks
cC5hc2FwKHIsaCl9fX1yZXR1cm4gbn12YXIgYT1uKDIpLHU9bigzKSxzPW4oNzApLGM9big0MCks
bD1uKDQpLHA9big4KSxmPShuKDApLG4oMSkse2dldEhvc3RQcm9wczpmdW5jdGlvbihlLHQpe3Zh
ciBuPWMuZ2V0VmFsdWUodCkscj1jLmdldENoZWNrZWQodCk7cmV0dXJuIHUoe3R5cGU6dm9pZCAw
LHN0ZXA6dm9pZCAwLG1pbjp2b2lkIDAsbWF4OnZvaWQgMH0sdCx7ZGVmYXVsdENoZWNrZWQ6dm9p
ZCAwLGRlZmF1bHRWYWx1ZTp2b2lkIDAsdmFsdWU6bnVsbCE9bj9uOmUuX3dyYXBwZXJTdGF0ZS5p
bml0aWFsVmFsdWUsY2hlY2tlZDpudWxsIT1yP3I6ZS5fd3JhcHBlclN0YXRlLmluaXRpYWxDaGVj
a2VkLG9uQ2hhbmdlOmUuX3dyYXBwZXJTdGF0ZS5vbkNoYW5nZX0pfSxtb3VudFdyYXBwZXI6ZnVu
Y3Rpb24oZSx0KXt2YXIgbj10LmRlZmF1bHRWYWx1ZTtlLl93cmFwcGVyU3RhdGU9e2luaXRpYWxD
aGVja2VkOm51bGwhPXQuY2hlY2tlZD90LmNoZWNrZWQ6dC5kZWZhdWx0Q2hlY2tlZCxpbml0aWFs
VmFsdWU6bnVsbCE9dC52YWx1ZT90LnZhbHVlOm4sbGlzdGVuZXJzOm51bGwsb25DaGFuZ2U6aS5i
aW5kKGUpLGNvbnRyb2xsZWQ6byh0KX19LHVwZGF0ZVdyYXBwZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9
ZS5fY3VycmVudEVsZW1lbnQucHJvcHMsbj10LmNoZWNrZWQ7bnVsbCE9biYmcy5zZXRWYWx1ZUZv
clByb3BlcnR5KGwuZ2V0Tm9kZUZyb21JbnN0YW5jZShlKSwiY2hlY2tlZCIsbnx8ITEpO3ZhciBy
PWwuZ2V0Tm9kZUZyb21JbnN0YW5jZShlKSxvPWMuZ2V0VmFsdWUodCk7aWYobnVsbCE9bylpZigw
PT09byYmIiI9PT1yLnZhbHVlKXIudmFsdWU9IjAiO2Vsc2UgaWYoIm51bWJlciI9PT10LnR5cGUp
e3ZhciBpPXBhcnNlRmxvYXQoci52YWx1ZSwxMCl8fDA7KG8hPWl8fG89PWkmJnIudmFsdWUhPW8p
JiYoci52YWx1ZT0iIitvKX1lbHNlIHIudmFsdWUhPT0iIitvJiYoci52YWx1ZT0iIitvKTtlbHNl
IG51bGw9PXQudmFsdWUmJm51bGwhPXQuZGVmYXVsdFZhbHVlJiZyLmRlZmF1bHRWYWx1ZSE9PSIi
K3QuZGVmYXVsdFZhbHVlJiYoci5kZWZhdWx0VmFsdWU9IiIrdC5kZWZhdWx0VmFsdWUpLG51bGw9
PXQuY2hlY2tlZCYmbnVsbCE9dC5kZWZhdWx0Q2hlY2tlZCYmKHIuZGVmYXVsdENoZWNrZWQ9ISF0
LmRlZmF1bHRDaGVja2VkKX0scG9zdE1vdW50V3JhcHBlcjpmdW5jdGlvbihlKXt2YXIgdD1lLl9j
dXJyZW50RWxlbWVudC5wcm9wcyxuPWwuZ2V0Tm9kZUZyb21JbnN0YW5jZShlKTtzd2l0Y2godC50
eXBlKXtjYXNlInN1Ym1pdCI6Y2FzZSJyZXNldCI6YnJlYWs7Y2FzZSJjb2xvciI6Y2FzZSJkYXRl
IjpjYXNlImRhdGV0aW1lIjpjYXNlImRhdGV0aW1lLWxvY2FsIjpjYXNlIm1vbnRoIjpjYXNlInRp
bWUiOmNhc2Uid2VlayI6bi52YWx1ZT0iIixuLnZhbHVlPW4uZGVmYXVsdFZhbHVlO2JyZWFrO2Rl
ZmF1bHQ6bi52YWx1ZT1uLnZhbHVlfXZhciByPW4ubmFtZTsiIiE9PXImJihuLm5hbWU9IiIpLG4u
ZGVmYXVsdENoZWNrZWQ9IW4uZGVmYXVsdENoZWNrZWQsbi5kZWZhdWx0Q2hlY2tlZD0hbi5kZWZh
dWx0Q2hlY2tlZCwiIiE9PXImJihuLm5hbWU9cil9fSk7ZS5leHBvcnRzPWZ9LGZ1bmN0aW9uKGUs
dCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPSJTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9Z
T1VfV0lMTF9CRV9GSVJFRCJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24g
cihlKXt2YXIgdD0iIjtyZXR1cm4gaS5DaGlsZHJlbi5mb3JFYWNoKGUsZnVuY3Rpb24oZSl7bnVs
bCE9ZSYmKCJzdHJpbmciPT09dHlwZW9mIGV8fCJudW1iZXIiPT09dHlwZW9mIGU/dCs9ZTpzfHwo
cz0hMCkpfSksdH12YXIgbz1uKDMpLGk9bigxMyksYT1uKDQpLHU9big3MSkscz0obigxKSwhMSks
Yz17bW91bnRXcmFwcGVyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgbz1udWxsO2lmKG51bGwhPW4pe3Zh
ciBpPW47Im9wdGdyb3VwIj09PWkuX3RhZyYmKGk9aS5faG9zdFBhcmVudCksbnVsbCE9aSYmInNl
bGVjdCI9PT1pLl90YWcmJihvPXUuZ2V0U2VsZWN0VmFsdWVDb250ZXh0KGkpKX12YXIgYT1udWxs
O2lmKG51bGwhPW8pe3ZhciBzO2lmKHM9bnVsbCE9dC52YWx1ZT90LnZhbHVlKyIiOnIodC5jaGls
ZHJlbiksYT0hMSxBcnJheS5pc0FycmF5KG8pKXtmb3IodmFyIGM9MDtjPG8ubGVuZ3RoO2MrKylp
ZigiIitvW2NdPT09cyl7YT0hMDticmVha319ZWxzZSBhPSIiK289PT1zfWUuX3dyYXBwZXJTdGF0
ZT17c2VsZWN0ZWQ6YX19LHBvc3RNb3VudFdyYXBwZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fY3Vy
cmVudEVsZW1lbnQucHJvcHM7aWYobnVsbCE9dC52YWx1ZSl7YS5nZXROb2RlRnJvbUluc3RhbmNl
KGUpLnNldEF0dHJpYnV0ZSgidmFsdWUiLHQudmFsdWUpfX0sZ2V0SG9zdFByb3BzOmZ1bmN0aW9u
KGUsdCl7dmFyIG49byh7c2VsZWN0ZWQ6dm9pZCAwLGNoaWxkcmVuOnZvaWQgMH0sdCk7bnVsbCE9
ZS5fd3JhcHBlclN0YXRlLnNlbGVjdGVkJiYobi5zZWxlY3RlZD1lLl93cmFwcGVyU3RhdGUuc2Vs
ZWN0ZWQpO3ZhciBpPXIodC5jaGlsZHJlbik7cmV0dXJuIGkmJihuLmNoaWxkcmVuPWkpLG59fTtl
LmV4cG9ydHM9Y30sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7dGhp
cy5fcm9vdE5vZGVJRCYmbC51cGRhdGVXcmFwcGVyKHRoaXMpfWZ1bmN0aW9uIG8oZSl7dmFyIHQ9
dGhpcy5fY3VycmVudEVsZW1lbnQucHJvcHMsbj11LmV4ZWN1dGVPbkNoYW5nZSh0LGUpO3JldHVy
biBjLmFzYXAocix0aGlzKSxufXZhciBpPW4oMiksYT1uKDMpLHU9big0MCkscz1uKDQpLGM9big4
KSxsPShuKDApLG4oMSkse2dldEhvc3RQcm9wczpmdW5jdGlvbihlLHQpe3JldHVybiBudWxsIT10
LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MJiZpKCI5MSIpLGEoe30sdCx7dmFsdWU6dm9pZCAwLGRl
ZmF1bHRWYWx1ZTp2b2lkIDAsY2hpbGRyZW46IiIrZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1
ZSxvbkNoYW5nZTplLl93cmFwcGVyU3RhdGUub25DaGFuZ2V9KX0sbW91bnRXcmFwcGVyOmZ1bmN0
aW9uKGUsdCl7dmFyIG49dS5nZXRWYWx1ZSh0KSxyPW47aWYobnVsbD09bil7dmFyIGE9dC5kZWZh
dWx0VmFsdWUscz10LmNoaWxkcmVuO251bGwhPXMmJihudWxsIT1hJiZpKCI5MiIpLEFycmF5Lmlz
QXJyYXkocykmJihzLmxlbmd0aDw9MXx8aSgiOTMiKSxzPXNbMF0pLGE9IiIrcyksbnVsbD09YSYm
KGE9IiIpLHI9YX1lLl93cmFwcGVyU3RhdGU9e2luaXRpYWxWYWx1ZToiIityLGxpc3RlbmVyczpu
dWxsLG9uQ2hhbmdlOm8uYmluZChlKX19LHVwZGF0ZVdyYXBwZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9
ZS5fY3VycmVudEVsZW1lbnQucHJvcHMsbj1zLmdldE5vZGVGcm9tSW5zdGFuY2UoZSkscj11Lmdl
dFZhbHVlKHQpO2lmKG51bGwhPXIpe3ZhciBvPSIiK3I7byE9PW4udmFsdWUmJihuLnZhbHVlPW8p
LG51bGw9PXQuZGVmYXVsdFZhbHVlJiYobi5kZWZhdWx0VmFsdWU9byl9bnVsbCE9dC5kZWZhdWx0
VmFsdWUmJihuLmRlZmF1bHRWYWx1ZT10LmRlZmF1bHRWYWx1ZSl9LHBvc3RNb3VudFdyYXBwZXI6
ZnVuY3Rpb24oZSl7dmFyIHQ9cy5nZXROb2RlRnJvbUluc3RhbmNlKGUpLG49dC50ZXh0Q29udGVu
dDtuPT09ZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSYmKHQudmFsdWU9bil9fSk7ZS5leHBv
cnRzPWx9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7cmV0
dXJue3R5cGU6IklOU0VSVF9NQVJLVVAiLGNvbnRlbnQ6ZSxmcm9tSW5kZXg6bnVsbCxmcm9tTm9k
ZTpudWxsLHRvSW5kZXg6bixhZnRlck5vZGU6dH19ZnVuY3Rpb24gbyhlLHQsbil7cmV0dXJue3R5
cGU6Ik1PVkVfRVhJU1RJTkciLGNvbnRlbnQ6bnVsbCxmcm9tSW5kZXg6ZS5fbW91bnRJbmRleCxm
cm9tTm9kZTpmLmdldEhvc3ROb2RlKGUpLHRvSW5kZXg6bixhZnRlck5vZGU6dH19ZnVuY3Rpb24g
aShlLHQpe3JldHVybnt0eXBlOiJSRU1PVkVfTk9ERSIsY29udGVudDpudWxsLGZyb21JbmRleDpl
Ll9tb3VudEluZGV4LGZyb21Ob2RlOnQsdG9JbmRleDpudWxsLGFmdGVyTm9kZTpudWxsfX1mdW5j
dGlvbiBhKGUpe3JldHVybnt0eXBlOiJTRVRfTUFSS1VQIixjb250ZW50OmUsZnJvbUluZGV4Om51
bGwsZnJvbU5vZGU6bnVsbCx0b0luZGV4Om51bGwsYWZ0ZXJOb2RlOm51bGx9fWZ1bmN0aW9uIHUo
ZSl7cmV0dXJue3R5cGU6IlRFWFRfQ09OVEVOVCIsY29udGVudDplLGZyb21JbmRleDpudWxsLGZy
b21Ob2RlOm51bGwsdG9JbmRleDpudWxsLGFmdGVyTm9kZTpudWxsfX1mdW5jdGlvbiBzKGUsdCl7
cmV0dXJuIHQmJihlPWV8fFtdLGUucHVzaCh0KSksZX1mdW5jdGlvbiBjKGUsdCl7cC5wcm9jZXNz
Q2hpbGRyZW5VcGRhdGVzKGUsdCl9dmFyIGw9bigyKSxwPW4oNDEpLGY9KG4oMjIpLG4oNyksbigx
MCksbigxNikpLGQ9bigxNTUpLGg9KG4oNiksbigxNjApKSxtPShuKDApLHtNaXhpbjp7X3JlY29u
Y2lsZXJJbnN0YW50aWF0ZUNoaWxkcmVuOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZC5pbnN0YW50
aWF0ZUNoaWxkcmVuKGUsdCxuKX0sX3JlY29uY2lsZXJVcGRhdGVDaGlsZHJlbjpmdW5jdGlvbihl
LHQsbixyLG8saSl7dmFyIGEsdT0wO3JldHVybiBhPWgodCx1KSxkLnVwZGF0ZUNoaWxkcmVuKGUs
YSxuLHIsbyx0aGlzLHRoaXMuX2hvc3RDb250YWluZXJJbmZvLGksdSksYX0sbW91bnRDaGlsZHJl
bjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5fcmVjb25jaWxlckluc3RhbnRpYXRlQ2hpbGRy
ZW4oZSx0LG4pO3RoaXMuX3JlbmRlcmVkQ2hpbGRyZW49cjt2YXIgbz1bXSxpPTA7Zm9yKHZhciBh
IGluIHIpaWYoci5oYXNPd25Qcm9wZXJ0eShhKSl7dmFyIHU9clthXSxzPTAsYz1mLm1vdW50Q29t
cG9uZW50KHUsdCx0aGlzLHRoaXMuX2hvc3RDb250YWluZXJJbmZvLG4scyk7dS5fbW91bnRJbmRl
eD1pKyssby5wdXNoKGMpfXJldHVybiBvfSx1cGRhdGVUZXh0Q29udGVudDpmdW5jdGlvbihlKXt2
YXIgdD10aGlzLl9yZW5kZXJlZENoaWxkcmVuO2QudW5tb3VudENoaWxkcmVuKHQsITEpO2Zvcih2
YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJmwoIjExOCIpO2ModGhpcyxbdShlKV0pfSx1
cGRhdGVNYXJrdXA6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fcmVuZGVyZWRDaGlsZHJlbjtkLnVu
bW91bnRDaGlsZHJlbih0LCExKTtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiZs
KCIxMTgiKTtjKHRoaXMsW2EoZSldKX0sdXBkYXRlQ2hpbGRyZW46ZnVuY3Rpb24oZSx0LG4pe3Ro
aXMuX3VwZGF0ZUNoaWxkcmVuKGUsdCxuKX0sX3VwZGF0ZUNoaWxkcmVuOmZ1bmN0aW9uKGUsdCxu
KXt2YXIgcj10aGlzLl9yZW5kZXJlZENoaWxkcmVuLG89e30saT1bXSxhPXRoaXMuX3JlY29uY2ls
ZXJVcGRhdGVDaGlsZHJlbihyLGUsaSxvLHQsbik7aWYoYXx8cil7dmFyIHUsbD1udWxsLHA9MCxk
PTAsaD0wLG09bnVsbDtmb3IodSBpbiBhKWlmKGEuaGFzT3duUHJvcGVydHkodSkpe3ZhciB2PXIm
JnJbdV0seT1hW3VdO3Y9PT15PyhsPXMobCx0aGlzLm1vdmVDaGlsZCh2LG0scCxkKSksZD1NYXRo
Lm1heCh2Ll9tb3VudEluZGV4LGQpLHYuX21vdW50SW5kZXg9cCk6KHYmJihkPU1hdGgubWF4KHYu
X21vdW50SW5kZXgsZCkpLGw9cyhsLHRoaXMuX21vdW50Q2hpbGRBdEluZGV4KHksaVtoXSxtLHAs
dCxuKSksaCsrKSxwKyssbT1mLmdldEhvc3ROb2RlKHkpfWZvcih1IGluIG8pby5oYXNPd25Qcm9w
ZXJ0eSh1KSYmKGw9cyhsLHRoaXMuX3VubW91bnRDaGlsZChyW3VdLG9bdV0pKSk7bCYmYyh0aGlz
LGwpLHRoaXMuX3JlbmRlcmVkQ2hpbGRyZW49YX19LHVubW91bnRDaGlsZHJlbjpmdW5jdGlvbihl
KXt2YXIgdD10aGlzLl9yZW5kZXJlZENoaWxkcmVuO2QudW5tb3VudENoaWxkcmVuKHQsZSksdGhp
cy5fcmVuZGVyZWRDaGlsZHJlbj1udWxsfSxtb3ZlQ2hpbGQ6ZnVuY3Rpb24oZSx0LG4scil7aWYo
ZS5fbW91bnRJbmRleDxyKXJldHVybiBvKGUsdCxuKX0sY3JlYXRlQ2hpbGQ6ZnVuY3Rpb24oZSx0
LG4pe3JldHVybiByKG4sdCxlLl9tb3VudEluZGV4KX0scmVtb3ZlQ2hpbGQ6ZnVuY3Rpb24oZSx0
KXtyZXR1cm4gaShlLHQpfSxfbW91bnRDaGlsZEF0SW5kZXg6ZnVuY3Rpb24oZSx0LG4scixvLGkp
e3JldHVybiBlLl9tb3VudEluZGV4PXIsdGhpcy5jcmVhdGVDaGlsZChlLG4sdCl9LF91bm1vdW50
Q2hpbGQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnJlbW92ZUNoaWxkKGUsdCk7cmV0dXJuIGUu
X21vdW50SW5kZXg9bnVsbCxufX19KTtlLmV4cG9ydHM9bX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ug
c3RyaWN0IjsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gcihlLHQsbixyKXt2YXIgbz12b2lkIDA9PT1l
W25dO251bGwhPXQmJm8mJihlW25dPWkodCwhMCkpfXZhciBvPW4oMTYpLGk9big3MyksYT0obig0
NCksbig0MykpLHU9big3Nyk7bigxKTsidW5kZWZpbmVkIiE9PXR5cGVvZiB0JiZPYmplY3Qoe05P
REVfRU5WOiJwcm9kdWN0aW9uIixQVUJMSUNfVVJMOiIuIn0pO3ZhciBzPXtpbnN0YW50aWF0ZUNo
aWxkcmVuOmZ1bmN0aW9uKGUsdCxuLG8pe2lmKG51bGw9PWUpcmV0dXJuIG51bGw7dmFyIGk9e307
cmV0dXJuIHUoZSxyLGkpLGl9LHVwZGF0ZUNoaWxkcmVuOmZ1bmN0aW9uKGUsdCxuLHIsdSxzLGMs
bCxwKXtpZih0fHxlKXt2YXIgZixkO2ZvcihmIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShmKSl7
ZD1lJiZlW2ZdO3ZhciBoPWQmJmQuX2N1cnJlbnRFbGVtZW50LG09dFtmXTtpZihudWxsIT1kJiZh
KGgsbSkpby5yZWNlaXZlQ29tcG9uZW50KGQsbSx1LGwpLHRbZl09ZDtlbHNle2QmJihyW2ZdPW8u
Z2V0SG9zdE5vZGUoZCksby51bm1vdW50Q29tcG9uZW50KGQsITEpKTt2YXIgdj1pKG0sITApO3Rb
Zl09djt2YXIgeT1vLm1vdW50Q29tcG9uZW50KHYsdSxzLGMsbCxwKTtuLnB1c2goeSl9fWZvcihm
IGluIGUpIWUuaGFzT3duUHJvcGVydHkoZil8fHQmJnQuaGFzT3duUHJvcGVydHkoZil8fChkPWVb
Zl0scltmXT1vLmdldEhvc3ROb2RlKGQpLG8udW5tb3VudENvbXBvbmVudChkLCExKSl9fSx1bm1v
dW50Q2hpbGRyZW46ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlpZihlLmhhc093blByb3Bl
cnR5KG4pKXt2YXIgcj1lW25dO28udW5tb3VudENvbXBvbmVudChyLHQpfX19O2UuZXhwb3J0cz1z
fSkuY2FsbCh0LG4oNzIpKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBy
KGUpe31mdW5jdGlvbiBvKGUpe3JldHVybiEoIWUucHJvdG90eXBlfHwhZS5wcm90b3R5cGUuaXNS
ZWFjdENvbXBvbmVudCl9ZnVuY3Rpb24gaShlKXtyZXR1cm4hKCFlLnByb3RvdHlwZXx8IWUucHJv
dG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50KX12YXIgYT1uKDIpLHU9bigzKSxzPW4oMTMpLGM9
big0MSksbD1uKDEwKSxwPW4oMzMpLGY9bigyMiksZD0obig3KSxuKDc0KSksaD1uKDE2KSxtPW4o
MjMpLHY9KG4oMCksbig0MikpLHk9big0MyksZz0obigxKSx7SW1wdXJlQ2xhc3M6MCxQdXJlQ2xh
c3M6MSxTdGF0ZWxlc3NGdW5jdGlvbmFsOjJ9KTtyLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24o
KXt2YXIgZT1mLmdldCh0aGlzKS5fY3VycmVudEVsZW1lbnQudHlwZSx0PWUodGhpcy5wcm9wcyx0
aGlzLmNvbnRleHQsdGhpcy51cGRhdGVyKTtyZXR1cm4gdH07dmFyIGI9MSxfPXtjb25zdHJ1Y3Q6
ZnVuY3Rpb24oZSl7dGhpcy5fY3VycmVudEVsZW1lbnQ9ZSx0aGlzLl9yb290Tm9kZUlEPTAsdGhp
cy5fY29tcG9zaXRlVHlwZT1udWxsLHRoaXMuX2luc3RhbmNlPW51bGwsdGhpcy5faG9zdFBhcmVu
dD1udWxsLHRoaXMuX2hvc3RDb250YWluZXJJbmZvPW51bGwsdGhpcy5fdXBkYXRlQmF0Y2hOdW1i
ZXI9bnVsbCx0aGlzLl9wZW5kaW5nRWxlbWVudD1udWxsLHRoaXMuX3BlbmRpbmdTdGF0ZVF1ZXVl
PW51bGwsdGhpcy5fcGVuZGluZ1JlcGxhY2VTdGF0ZT0hMSx0aGlzLl9wZW5kaW5nRm9yY2VVcGRh
dGU9ITEsdGhpcy5fcmVuZGVyZWROb2RlVHlwZT1udWxsLHRoaXMuX3JlbmRlcmVkQ29tcG9uZW50
PW51bGwsdGhpcy5fY29udGV4dD1udWxsLHRoaXMuX21vdW50T3JkZXI9MCx0aGlzLl90b3BMZXZl
bFdyYXBwZXI9bnVsbCx0aGlzLl9wZW5kaW5nQ2FsbGJhY2tzPW51bGwsdGhpcy5fY2FsbGVkQ29t
cG9uZW50V2lsbFVubW91bnQ9ITF9LG1vdW50Q29tcG9uZW50OmZ1bmN0aW9uKGUsdCxuLHUpe3Ro
aXMuX2NvbnRleHQ9dSx0aGlzLl9tb3VudE9yZGVyPWIrKyx0aGlzLl9ob3N0UGFyZW50PXQsdGhp
cy5faG9zdENvbnRhaW5lckluZm89bjt2YXIgYyxsPXRoaXMuX2N1cnJlbnRFbGVtZW50LnByb3Bz
LHA9dGhpcy5fcHJvY2Vzc0NvbnRleHQodSksZD10aGlzLl9jdXJyZW50RWxlbWVudC50eXBlLGg9
ZS5nZXRVcGRhdGVRdWV1ZSgpLHY9byhkKSx5PXRoaXMuX2NvbnN0cnVjdENvbXBvbmVudCh2LGws
cCxoKTt2fHxudWxsIT15JiZudWxsIT15LnJlbmRlcj9pKGQpP3RoaXMuX2NvbXBvc2l0ZVR5cGU9
Zy5QdXJlQ2xhc3M6dGhpcy5fY29tcG9zaXRlVHlwZT1nLkltcHVyZUNsYXNzOihjPXksbnVsbD09
PXl8fCExPT09eXx8cy5pc1ZhbGlkRWxlbWVudCh5KXx8YSgiMTA1IixkLmRpc3BsYXlOYW1lfHxk
Lm5hbWV8fCJDb21wb25lbnQiKSx5PW5ldyByKGQpLHRoaXMuX2NvbXBvc2l0ZVR5cGU9Zy5TdGF0
ZWxlc3NGdW5jdGlvbmFsKTt5LnByb3BzPWwseS5jb250ZXh0PXAseS5yZWZzPW0seS51cGRhdGVy
PWgsdGhpcy5faW5zdGFuY2U9eSxmLnNldCh5LHRoaXMpO3ZhciBfPXkuc3RhdGU7dm9pZCAwPT09
XyYmKHkuc3RhdGU9Xz1udWxsKSwoIm9iamVjdCIhPT10eXBlb2YgX3x8QXJyYXkuaXNBcnJheShf
KSkmJmEoIjEwNiIsdGhpcy5nZXROYW1lKCl8fCJSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCIpLHRo
aXMuX3BlbmRpbmdTdGF0ZVF1ZXVlPW51bGwsdGhpcy5fcGVuZGluZ1JlcGxhY2VTdGF0ZT0hMSx0
aGlzLl9wZW5kaW5nRm9yY2VVcGRhdGU9ITE7dmFyIEM7cmV0dXJuIEM9eS51bnN0YWJsZV9oYW5k
bGVFcnJvcj90aGlzLnBlcmZvcm1Jbml0aWFsTW91bnRXaXRoRXJyb3JIYW5kbGluZyhjLHQsbixl
LHUpOnRoaXMucGVyZm9ybUluaXRpYWxNb3VudChjLHQsbixlLHUpLHkuY29tcG9uZW50RGlkTW91
bnQmJmUuZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZSh5LmNvbXBvbmVudERpZE1vdW50LHkp
LEN9LF9jb25zdHJ1Y3RDb21wb25lbnQ6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMuX2Nv
bnN0cnVjdENvbXBvbmVudFdpdGhvdXRPd25lcihlLHQsbixyKX0sX2NvbnN0cnVjdENvbXBvbmVu
dFdpdGhvdXRPd25lcjpmdW5jdGlvbihlLHQsbixyKXt2YXIgbz10aGlzLl9jdXJyZW50RWxlbWVu
dC50eXBlO3JldHVybiBlP25ldyBvKHQsbixyKTpvKHQsbixyKX0scGVyZm9ybUluaXRpYWxNb3Vu
dFdpdGhFcnJvckhhbmRsaW5nOmZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIGksYT1yLmNoZWNrcG9p
bnQoKTt0cnl7aT10aGlzLnBlcmZvcm1Jbml0aWFsTW91bnQoZSx0LG4scixvKX1jYXRjaCh1KXty
LnJvbGxiYWNrKGEpLHRoaXMuX2luc3RhbmNlLnVuc3RhYmxlX2hhbmRsZUVycm9yKHUpLHRoaXMu
X3BlbmRpbmdTdGF0ZVF1ZXVlJiYodGhpcy5faW5zdGFuY2Uuc3RhdGU9dGhpcy5fcHJvY2Vzc1Bl
bmRpbmdTdGF0ZSh0aGlzLl9pbnN0YW5jZS5wcm9wcyx0aGlzLl9pbnN0YW5jZS5jb250ZXh0KSks
YT1yLmNoZWNrcG9pbnQoKSx0aGlzLl9yZW5kZXJlZENvbXBvbmVudC51bm1vdW50Q29tcG9uZW50
KCEwKSxyLnJvbGxiYWNrKGEpLGk9dGhpcy5wZXJmb3JtSW5pdGlhbE1vdW50KGUsdCxuLHIsbyl9
cmV0dXJuIGl9LHBlcmZvcm1Jbml0aWFsTW91bnQ6ZnVuY3Rpb24oZSx0LG4scixvKXt2YXIgaT10
aGlzLl9pbnN0YW5jZSxhPTA7aS5jb21wb25lbnRXaWxsTW91bnQmJihpLmNvbXBvbmVudFdpbGxN
b3VudCgpLHRoaXMuX3BlbmRpbmdTdGF0ZVF1ZXVlJiYoaS5zdGF0ZT10aGlzLl9wcm9jZXNzUGVu
ZGluZ1N0YXRlKGkucHJvcHMsaS5jb250ZXh0KSkpLHZvaWQgMD09PWUmJihlPXRoaXMuX3JlbmRl
clZhbGlkYXRlZENvbXBvbmVudCgpKTt2YXIgdT1kLmdldFR5cGUoZSk7dGhpcy5fcmVuZGVyZWRO
b2RlVHlwZT11O3ZhciBzPXRoaXMuX2luc3RhbnRpYXRlUmVhY3RDb21wb25lbnQoZSx1IT09ZC5F
TVBUWSk7dGhpcy5fcmVuZGVyZWRDb21wb25lbnQ9czt2YXIgYz1oLm1vdW50Q29tcG9uZW50KHMs
cix0LG4sdGhpcy5fcHJvY2Vzc0NoaWxkQ29udGV4dChvKSxhKTtyZXR1cm4gY30sZ2V0SG9zdE5v
ZGU6ZnVuY3Rpb24oKXtyZXR1cm4gaC5nZXRIb3N0Tm9kZSh0aGlzLl9yZW5kZXJlZENvbXBvbmVu
dCl9LHVubW91bnRDb21wb25lbnQ6ZnVuY3Rpb24oZSl7aWYodGhpcy5fcmVuZGVyZWRDb21wb25l
bnQpe3ZhciB0PXRoaXMuX2luc3RhbmNlO2lmKHQuY29tcG9uZW50V2lsbFVubW91bnQmJiF0Ll9j
YWxsZWRDb21wb25lbnRXaWxsVW5tb3VudClpZih0Ll9jYWxsZWRDb21wb25lbnRXaWxsVW5tb3Vu
dD0hMCxlKXt2YXIgbj10aGlzLmdldE5hbWUoKSsiLmNvbXBvbmVudFdpbGxVbm1vdW50KCkiO3Au
aW52b2tlR3VhcmRlZENhbGxiYWNrKG4sdC5jb21wb25lbnRXaWxsVW5tb3VudC5iaW5kKHQpKX1l
bHNlIHQuY29tcG9uZW50V2lsbFVubW91bnQoKTt0aGlzLl9yZW5kZXJlZENvbXBvbmVudCYmKGgu
dW5tb3VudENvbXBvbmVudCh0aGlzLl9yZW5kZXJlZENvbXBvbmVudCxlKSx0aGlzLl9yZW5kZXJl
ZE5vZGVUeXBlPW51bGwsdGhpcy5fcmVuZGVyZWRDb21wb25lbnQ9bnVsbCx0aGlzLl9pbnN0YW5j
ZT1udWxsKSx0aGlzLl9wZW5kaW5nU3RhdGVRdWV1ZT1udWxsLHRoaXMuX3BlbmRpbmdSZXBsYWNl
U3RhdGU9ITEsdGhpcy5fcGVuZGluZ0ZvcmNlVXBkYXRlPSExLHRoaXMuX3BlbmRpbmdDYWxsYmFj
a3M9bnVsbCx0aGlzLl9wZW5kaW5nRWxlbWVudD1udWxsLHRoaXMuX2NvbnRleHQ9bnVsbCx0aGlz
Ll9yb290Tm9kZUlEPTAsdGhpcy5fdG9wTGV2ZWxXcmFwcGVyPW51bGwsZi5yZW1vdmUodCl9fSxf
bWFza0NvbnRleHQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fY3VycmVudEVsZW1lbnQudHlwZSxu
PXQuY29udGV4dFR5cGVzO2lmKCFuKXJldHVybiBtO3ZhciByPXt9O2Zvcih2YXIgbyBpbiBuKXJb
b109ZVtvXTtyZXR1cm4gcn0sX3Byb2Nlc3NDb250ZXh0OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMu
X21hc2tDb250ZXh0KGUpO3JldHVybiB0fSxfcHJvY2Vzc0NoaWxkQ29udGV4dDpmdW5jdGlvbihl
KXt2YXIgdCxuPXRoaXMuX2N1cnJlbnRFbGVtZW50LnR5cGUscj10aGlzLl9pbnN0YW5jZTtpZihy
LmdldENoaWxkQ29udGV4dCYmKHQ9ci5nZXRDaGlsZENvbnRleHQoKSksdCl7Im9iamVjdCIhPT10
eXBlb2Ygbi5jaGlsZENvbnRleHRUeXBlcyYmYSgiMTA3Iix0aGlzLmdldE5hbWUoKXx8IlJlYWN0
Q29tcG9zaXRlQ29tcG9uZW50Iik7Zm9yKHZhciBvIGluIHQpbyBpbiBuLmNoaWxkQ29udGV4dFR5
cGVzfHxhKCIxMDgiLHRoaXMuZ2V0TmFtZSgpfHwiUmVhY3RDb21wb3NpdGVDb21wb25lbnQiLG8p
O3JldHVybiB1KHt9LGUsdCl9cmV0dXJuIGV9LF9jaGVja0NvbnRleHRUeXBlczpmdW5jdGlvbihl
LHQsbil7fSxyZWNlaXZlQ29tcG9uZW50OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLl9jdXJy
ZW50RWxlbWVudCxvPXRoaXMuX2NvbnRleHQ7dGhpcy5fcGVuZGluZ0VsZW1lbnQ9bnVsbCx0aGlz
LnVwZGF0ZUNvbXBvbmVudCh0LHIsZSxvLG4pfSxwZXJmb3JtVXBkYXRlSWZOZWNlc3Nhcnk6ZnVu
Y3Rpb24oZSl7bnVsbCE9dGhpcy5fcGVuZGluZ0VsZW1lbnQ/aC5yZWNlaXZlQ29tcG9uZW50KHRo
aXMsdGhpcy5fcGVuZGluZ0VsZW1lbnQsZSx0aGlzLl9jb250ZXh0KTpudWxsIT09dGhpcy5fcGVu
ZGluZ1N0YXRlUXVldWV8fHRoaXMuX3BlbmRpbmdGb3JjZVVwZGF0ZT90aGlzLnVwZGF0ZUNvbXBv
bmVudChlLHRoaXMuX2N1cnJlbnRFbGVtZW50LHRoaXMuX2N1cnJlbnRFbGVtZW50LHRoaXMuX2Nv
bnRleHQsdGhpcy5fY29udGV4dCk6dGhpcy5fdXBkYXRlQmF0Y2hOdW1iZXI9bnVsbH0sdXBkYXRl
Q29tcG9uZW50OmZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIGk9dGhpcy5faW5zdGFuY2U7bnVsbD09
aSYmYSgiMTM2Iix0aGlzLmdldE5hbWUoKXx8IlJlYWN0Q29tcG9zaXRlQ29tcG9uZW50Iik7dmFy
IHUscz0hMTt0aGlzLl9jb250ZXh0PT09bz91PWkuY29udGV4dDoodT10aGlzLl9wcm9jZXNzQ29u
dGV4dChvKSxzPSEwKTt2YXIgYz10LnByb3BzLGw9bi5wcm9wczt0IT09biYmKHM9ITApLHMmJmku
Y29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyYmaS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKGws
dSk7dmFyIHA9dGhpcy5fcHJvY2Vzc1BlbmRpbmdTdGF0ZShsLHUpLGY9ITA7dGhpcy5fcGVuZGlu
Z0ZvcmNlVXBkYXRlfHwoaS5zaG91bGRDb21wb25lbnRVcGRhdGU/Zj1pLnNob3VsZENvbXBvbmVu
dFVwZGF0ZShsLHAsdSk6dGhpcy5fY29tcG9zaXRlVHlwZT09PWcuUHVyZUNsYXNzJiYoZj0hdihj
LGwpfHwhdihpLnN0YXRlLHApKSksdGhpcy5fdXBkYXRlQmF0Y2hOdW1iZXI9bnVsbCxmPyh0aGlz
Ll9wZW5kaW5nRm9yY2VVcGRhdGU9ITEsdGhpcy5fcGVyZm9ybUNvbXBvbmVudFVwZGF0ZShuLGws
cCx1LGUsbykpOih0aGlzLl9jdXJyZW50RWxlbWVudD1uLHRoaXMuX2NvbnRleHQ9byxpLnByb3Bz
PWwsaS5zdGF0ZT1wLGkuY29udGV4dD11KX0sX3Byb2Nlc3NQZW5kaW5nU3RhdGU6ZnVuY3Rpb24o
ZSx0KXt2YXIgbj10aGlzLl9pbnN0YW5jZSxyPXRoaXMuX3BlbmRpbmdTdGF0ZVF1ZXVlLG89dGhp
cy5fcGVuZGluZ1JlcGxhY2VTdGF0ZTtpZih0aGlzLl9wZW5kaW5nUmVwbGFjZVN0YXRlPSExLHRo
aXMuX3BlbmRpbmdTdGF0ZVF1ZXVlPW51bGwsIXIpcmV0dXJuIG4uc3RhdGU7aWYobyYmMT09PXIu
bGVuZ3RoKXJldHVybiByWzBdO2Zvcih2YXIgaT11KHt9LG8/clswXTpuLnN0YXRlKSxhPW8/MTow
O2E8ci5sZW5ndGg7YSsrKXt2YXIgcz1yW2FdO3UoaSwiZnVuY3Rpb24iPT09dHlwZW9mIHM/cy5j
YWxsKG4saSxlLHQpOnMpfXJldHVybiBpfSxfcGVyZm9ybUNvbXBvbmVudFVwZGF0ZTpmdW5jdGlv
bihlLHQsbixyLG8saSl7dmFyIGEsdSxzLGM9dGhpcy5faW5zdGFuY2UsbD1Cb29sZWFuKGMuY29t
cG9uZW50RGlkVXBkYXRlKTtsJiYoYT1jLnByb3BzLHU9Yy5zdGF0ZSxzPWMuY29udGV4dCksYy5j
b21wb25lbnRXaWxsVXBkYXRlJiZjLmNvbXBvbmVudFdpbGxVcGRhdGUodCxuLHIpLHRoaXMuX2N1
cnJlbnRFbGVtZW50PWUsdGhpcy5fY29udGV4dD1pLGMucHJvcHM9dCxjLnN0YXRlPW4sYy5jb250
ZXh0PXIsdGhpcy5fdXBkYXRlUmVuZGVyZWRDb21wb25lbnQobyxpKSxsJiZvLmdldFJlYWN0TW91
bnRSZWFkeSgpLmVucXVldWUoYy5jb21wb25lbnREaWRVcGRhdGUuYmluZChjLGEsdSxzKSxjKX0s
X3VwZGF0ZVJlbmRlcmVkQ29tcG9uZW50OmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fcmVuZGVy
ZWRDb21wb25lbnQscj1uLl9jdXJyZW50RWxlbWVudCxvPXRoaXMuX3JlbmRlclZhbGlkYXRlZENv
bXBvbmVudCgpLGk9MDtpZih5KHIsbykpaC5yZWNlaXZlQ29tcG9uZW50KG4sbyxlLHRoaXMuX3By
b2Nlc3NDaGlsZENvbnRleHQodCkpO2Vsc2V7dmFyIGE9aC5nZXRIb3N0Tm9kZShuKTtoLnVubW91
bnRDb21wb25lbnQobiwhMSk7dmFyIHU9ZC5nZXRUeXBlKG8pO3RoaXMuX3JlbmRlcmVkTm9kZVR5
cGU9dTt2YXIgcz10aGlzLl9pbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50KG8sdSE9PWQuRU1QVFkp
O3RoaXMuX3JlbmRlcmVkQ29tcG9uZW50PXM7dmFyIGM9aC5tb3VudENvbXBvbmVudChzLGUsdGhp
cy5faG9zdFBhcmVudCx0aGlzLl9ob3N0Q29udGFpbmVySW5mbyx0aGlzLl9wcm9jZXNzQ2hpbGRD
b250ZXh0KHQpLGkpO3RoaXMuX3JlcGxhY2VOb2RlV2l0aE1hcmt1cChhLGMsbil9fSxfcmVwbGFj
ZU5vZGVXaXRoTWFya3VwOmZ1bmN0aW9uKGUsdCxuKXtjLnJlcGxhY2VOb2RlV2l0aE1hcmt1cChl
LHQsbil9LF9yZW5kZXJWYWxpZGF0ZWRDb21wb25lbnRXaXRob3V0T3duZXJPckNvbnRleHQ6ZnVu
Y3Rpb24oKXt2YXIgZT10aGlzLl9pbnN0YW5jZTtyZXR1cm4gZS5yZW5kZXIoKX0sX3JlbmRlclZh
bGlkYXRlZENvbXBvbmVudDpmdW5jdGlvbigpe3ZhciBlO2lmKHRoaXMuX2NvbXBvc2l0ZVR5cGUh
PT1nLlN0YXRlbGVzc0Z1bmN0aW9uYWwpe2wuY3VycmVudD10aGlzO3RyeXtlPXRoaXMuX3JlbmRl
clZhbGlkYXRlZENvbXBvbmVudFdpdGhvdXRPd25lck9yQ29udGV4dCgpfWZpbmFsbHl7bC5jdXJy
ZW50PW51bGx9fWVsc2UgZT10aGlzLl9yZW5kZXJWYWxpZGF0ZWRDb21wb25lbnRXaXRob3V0T3du
ZXJPckNvbnRleHQoKTtyZXR1cm4gbnVsbD09PWV8fCExPT09ZXx8cy5pc1ZhbGlkRWxlbWVudChl
KXx8YSgiMTA5Iix0aGlzLmdldE5hbWUoKXx8IlJlYWN0Q29tcG9zaXRlQ29tcG9uZW50IiksZX0s
YXR0YWNoUmVmOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5nZXRQdWJsaWNJbnN0YW5jZSgpO251
bGw9PW4mJmEoIjExMCIpO3ZhciByPXQuZ2V0UHVibGljSW5zdGFuY2UoKTsobi5yZWZzPT09bT9u
LnJlZnM9e306bi5yZWZzKVtlXT1yfSxkZXRhY2hSZWY6ZnVuY3Rpb24oZSl7ZGVsZXRlIHRoaXMu
Z2V0UHVibGljSW5zdGFuY2UoKS5yZWZzW2VdfSxnZXROYW1lOmZ1bmN0aW9uKCl7dmFyIGU9dGhp
cy5fY3VycmVudEVsZW1lbnQudHlwZSx0PXRoaXMuX2luc3RhbmNlJiZ0aGlzLl9pbnN0YW5jZS5j
b25zdHJ1Y3RvcjtyZXR1cm4gZS5kaXNwbGF5TmFtZXx8dCYmdC5kaXNwbGF5TmFtZXx8ZS5uYW1l
fHx0JiZ0Lm5hbWV8fG51bGx9LGdldFB1YmxpY0luc3RhbmNlOmZ1bmN0aW9uKCl7dmFyIGU9dGhp
cy5faW5zdGFuY2U7cmV0dXJuIHRoaXMuX2NvbXBvc2l0ZVR5cGU9PT1nLlN0YXRlbGVzc0Z1bmN0
aW9uYWw/bnVsbDplfSxfaW5zdGFudGlhdGVSZWFjdENvbXBvbmVudDpudWxsfTtlLmV4cG9ydHM9
X30sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7cmV0dXJuIG8rK312
YXIgbz0xO2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPSJm
dW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKCJyZWFjdC5l
bGVtZW50Iil8fDYwMTAzO2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3Qi
O2Z1bmN0aW9uIHIoZSl7dmFyIHQ9ZSYmKG8mJmVbb118fGVbaV0pO2lmKCJmdW5jdGlvbiI9PT10
eXBlb2YgdClyZXR1cm4gdH12YXIgbz0iZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmU3ltYm9s
Lml0ZXJhdG9yLGk9IkBAaXRlcmF0b3IiO2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7InVz
ZSBzdHJpY3QiOyhmdW5jdGlvbih0KXtmdW5jdGlvbiByKGUsdCxuLHIpe2lmKGUmJiJvYmplY3Qi
PT09dHlwZW9mIGUpe3ZhciBvPWUsaT12b2lkIDA9PT1vW25dO2kmJm51bGwhPXQmJihvW25dPXQp
fX1mdW5jdGlvbiBvKGUsdCl7aWYobnVsbD09ZSlyZXR1cm4gZTt2YXIgbj17fTtyZXR1cm4gaShl
LHIsbiksbn12YXIgaT0obig0NCksbig3NykpO24oMSk7InVuZGVmaW5lZCIhPT10eXBlb2YgdCYm
T2JqZWN0KHtOT0RFX0VOVjoicHJvZHVjdGlvbiIsUFVCTElDX1VSTDoiLiJ9KSxlLmV4cG9ydHM9
b30pLmNhbGwodCxuKDcyKSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24g
cihlKXt0aGlzLnJlaW5pdGlhbGl6ZVRyYW5zYWN0aW9uKCksdGhpcy5yZW5kZXJUb1N0YXRpY01h
cmt1cD1lLHRoaXMudXNlQ3JlYXRlRWxlbWVudD0hMSx0aGlzLnVwZGF0ZVF1ZXVlPW5ldyB1KHRo
aXMpfXZhciBvPW4oMyksaT1uKDEyKSxhPW4oMjQpLHU9KG4oNyksbigxNjIpKSxzPVtdLGM9e2Vu
cXVldWU6ZnVuY3Rpb24oKXt9fSxsPXtnZXRUcmFuc2FjdGlvbldyYXBwZXJzOmZ1bmN0aW9uKCl7
cmV0dXJuIHN9LGdldFJlYWN0TW91bnRSZWFkeTpmdW5jdGlvbigpe3JldHVybiBjfSxnZXRVcGRh
dGVRdWV1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVwZGF0ZVF1ZXVlfSxkZXN0cnVjdG9yOmZ1
bmN0aW9uKCl7fSxjaGVja3BvaW50OmZ1bmN0aW9uKCl7fSxyb2xsYmFjazpmdW5jdGlvbigpe319
O28oci5wcm90b3R5cGUsYSxsKSxpLmFkZFBvb2xpbmdUbyhyKSxlLmV4cG9ydHM9cn0sZnVuY3Rp
b24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7aWYoIShlIGluc3RhbmNlb2Yg
dCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9u
Iil9dmFyIG89big0NSksaT0obigxKSxmdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7cih0aGlzLGUp
LHRoaXMudHJhbnNhY3Rpb249dH1yZXR1cm4gZS5wcm90b3R5cGUuaXNNb3VudGVkPWZ1bmN0aW9u
KGUpe3JldHVybiExfSxlLnByb3RvdHlwZS5lbnF1ZXVlQ2FsbGJhY2s9ZnVuY3Rpb24oZSx0LG4p
e3RoaXMudHJhbnNhY3Rpb24uaXNJblRyYW5zYWN0aW9uKCkmJm8uZW5xdWV1ZUNhbGxiYWNrKGUs
dCxuKX0sZS5wcm90b3R5cGUuZW5xdWV1ZUZvcmNlVXBkYXRlPWZ1bmN0aW9uKGUpe3RoaXMudHJh
bnNhY3Rpb24uaXNJblRyYW5zYWN0aW9uKCkmJm8uZW5xdWV1ZUZvcmNlVXBkYXRlKGUpfSxlLnBy
b3RvdHlwZS5lbnF1ZXVlUmVwbGFjZVN0YXRlPWZ1bmN0aW9uKGUsdCl7dGhpcy50cmFuc2FjdGlv
bi5pc0luVHJhbnNhY3Rpb24oKSYmby5lbnF1ZXVlUmVwbGFjZVN0YXRlKGUsdCl9LGUucHJvdG90
eXBlLmVucXVldWVTZXRTdGF0ZT1mdW5jdGlvbihlLHQpe3RoaXMudHJhbnNhY3Rpb24uaXNJblRy
YW5zYWN0aW9uKCkmJm8uZW5xdWV1ZVNldFN0YXRlKGUsdCl9LGV9KCkpO2UuZXhwb3J0cz1pfSxm
dW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMyksbz1uKDE3KSxpPW4oNCksYT1m
dW5jdGlvbihlKXt0aGlzLl9jdXJyZW50RWxlbWVudD1udWxsLHRoaXMuX2hvc3ROb2RlPW51bGws
dGhpcy5faG9zdFBhcmVudD1udWxsLHRoaXMuX2hvc3RDb250YWluZXJJbmZvPW51bGwsdGhpcy5f
ZG9tSUQ9MH07cihhLnByb3RvdHlwZSx7bW91bnRDb21wb25lbnQ6ZnVuY3Rpb24oZSx0LG4scil7
dmFyIGE9bi5faWRDb3VudGVyKys7dGhpcy5fZG9tSUQ9YSx0aGlzLl9ob3N0UGFyZW50PXQsdGhp
cy5faG9zdENvbnRhaW5lckluZm89bjt2YXIgdT0iIHJlYWN0LWVtcHR5OiAiK3RoaXMuX2RvbUlE
KyIgIjtpZihlLnVzZUNyZWF0ZUVsZW1lbnQpe3ZhciBzPW4uX293bmVyRG9jdW1lbnQsYz1zLmNy
ZWF0ZUNvbW1lbnQodSk7cmV0dXJuIGkucHJlY2FjaGVOb2RlKHRoaXMsYyksbyhjKX1yZXR1cm4g
ZS5yZW5kZXJUb1N0YXRpY01hcmt1cD8iIjoiXHgzYyEtLSIrdSsiLS1ceDNlIn0scmVjZWl2ZUNv
bXBvbmVudDpmdW5jdGlvbigpe30sZ2V0SG9zdE5vZGU6ZnVuY3Rpb24oKXtyZXR1cm4gaS5nZXRO
b2RlRnJvbUluc3RhbmNlKHRoaXMpfSx1bm1vdW50Q29tcG9uZW50OmZ1bmN0aW9uKCl7aS51bmNh
Y2hlTm9kZSh0aGlzKX19KSxlLmV4cG9ydHM9YX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0
IjtmdW5jdGlvbiByKGUsdCl7Il9ob3N0Tm9kZSJpbiBlfHxzKCIzMyIpLCJfaG9zdE5vZGUiaW4g
dHx8cygiMzMiKTtmb3IodmFyIG49MCxyPWU7cjtyPXIuX2hvc3RQYXJlbnQpbisrO2Zvcih2YXIg
bz0wLGk9dDtpO2k9aS5faG9zdFBhcmVudClvKys7Zm9yKDtuLW8+MDspZT1lLl9ob3N0UGFyZW50
LG4tLTtmb3IoO28tbj4wOyl0PXQuX2hvc3RQYXJlbnQsby0tO2Zvcih2YXIgYT1uO2EtLTspe2lm
KGU9PT10KXJldHVybiBlO2U9ZS5faG9zdFBhcmVudCx0PXQuX2hvc3RQYXJlbnR9cmV0dXJuIG51
bGx9ZnVuY3Rpb24gbyhlLHQpeyJfaG9zdE5vZGUiaW4gZXx8cygiMzUiKSwiX2hvc3ROb2RlImlu
IHR8fHMoIjM1Iik7Zm9yKDt0Oyl7aWYodD09PWUpcmV0dXJuITA7dD10Ll9ob3N0UGFyZW50fXJl
dHVybiExfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIl9ob3N0Tm9kZSJpbiBlfHxzKCIzNiIpLGUuX2hv
c3RQYXJlbnR9ZnVuY3Rpb24gYShlLHQsbil7Zm9yKHZhciByPVtdO2U7KXIucHVzaChlKSxlPWUu
X2hvc3RQYXJlbnQ7dmFyIG87Zm9yKG89ci5sZW5ndGg7by0tID4wOyl0KHJbb10sImNhcHR1cmVk
IixuKTtmb3Iobz0wO288ci5sZW5ndGg7bysrKXQocltvXSwiYnViYmxlZCIsbil9ZnVuY3Rpb24g
dShlLHQsbixvLGkpe2Zvcih2YXIgYT1lJiZ0P3IoZSx0KTpudWxsLHU9W107ZSYmZSE9PWE7KXUu
cHVzaChlKSxlPWUuX2hvc3RQYXJlbnQ7Zm9yKHZhciBzPVtdO3QmJnQhPT1hOylzLnB1c2godCks
dD10Ll9ob3N0UGFyZW50O3ZhciBjO2ZvcihjPTA7Yzx1Lmxlbmd0aDtjKyspbih1W2NdLCJidWJi
bGVkIixvKTtmb3IoYz1zLmxlbmd0aDtjLS0gPjA7KW4oc1tjXSwiY2FwdHVyZWQiLGkpfXZhciBz
PW4oMik7bigwKTtlLmV4cG9ydHM9e2lzQW5jZXN0b3I6byxnZXRMb3dlc3RDb21tb25BbmNlc3Rv
cjpyLGdldFBhcmVudEluc3RhbmNlOmksdHJhdmVyc2VUd29QaGFzZTphLHRyYXZlcnNlRW50ZXJM
ZWF2ZTp1fX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDIpLG89bigzKSxp
PW4oMzcpLGE9bigxNyksdT1uKDQpLHM9bigyNyksYz0obigwKSxuKDQ2KSxmdW5jdGlvbihlKXt0
aGlzLl9jdXJyZW50RWxlbWVudD1lLHRoaXMuX3N0cmluZ1RleHQ9IiIrZSx0aGlzLl9ob3N0Tm9k
ZT1udWxsLHRoaXMuX2hvc3RQYXJlbnQ9bnVsbCx0aGlzLl9kb21JRD0wLHRoaXMuX21vdW50SW5k
ZXg9MCx0aGlzLl9jbG9zaW5nQ29tbWVudD1udWxsLHRoaXMuX2NvbW1lbnROb2Rlcz1udWxsfSk7
byhjLnByb3RvdHlwZSx7bW91bnRDb21wb25lbnQ6ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89bi5f
aWRDb3VudGVyKyssaT0iIHJlYWN0LXRleHQ6ICIrbysiICI7aWYodGhpcy5fZG9tSUQ9byx0aGlz
Ll9ob3N0UGFyZW50PXQsZS51c2VDcmVhdGVFbGVtZW50KXt2YXIgYz1uLl9vd25lckRvY3VtZW50
LGw9Yy5jcmVhdGVDb21tZW50KGkpLHA9Yy5jcmVhdGVDb21tZW50KCIgL3JlYWN0LXRleHQgIiks
Zj1hKGMuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTtyZXR1cm4gYS5xdWV1ZUNoaWxkKGYsYShs
KSksdGhpcy5fc3RyaW5nVGV4dCYmYS5xdWV1ZUNoaWxkKGYsYShjLmNyZWF0ZVRleHROb2RlKHRo
aXMuX3N0cmluZ1RleHQpKSksYS5xdWV1ZUNoaWxkKGYsYShwKSksdS5wcmVjYWNoZU5vZGUodGhp
cyxsKSx0aGlzLl9jbG9zaW5nQ29tbWVudD1wLGZ9dmFyIGQ9cyh0aGlzLl9zdHJpbmdUZXh0KTty
ZXR1cm4gZS5yZW5kZXJUb1N0YXRpY01hcmt1cD9kOiJceDNjIS0tIitpKyItLVx4M2UiK2QrIlx4
M2MhLS0gL3JlYWN0LXRleHQgLS1ceDNlIn0scmVjZWl2ZUNvbXBvbmVudDpmdW5jdGlvbihlLHQp
e2lmKGUhPT10aGlzLl9jdXJyZW50RWxlbWVudCl7dGhpcy5fY3VycmVudEVsZW1lbnQ9ZTt2YXIg
bj0iIitlO2lmKG4hPT10aGlzLl9zdHJpbmdUZXh0KXt0aGlzLl9zdHJpbmdUZXh0PW47dmFyIHI9
dGhpcy5nZXRIb3N0Tm9kZSgpO2kucmVwbGFjZURlbGltaXRlZFRleHQoclswXSxyWzFdLG4pfX19
LGdldEhvc3ROb2RlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY29tbWVudE5vZGVzO2lmKGUpcmV0
dXJuIGU7aWYoIXRoaXMuX2Nsb3NpbmdDb21tZW50KWZvcih2YXIgdD11LmdldE5vZGVGcm9tSW5z
dGFuY2UodGhpcyksbj10Lm5leHRTaWJsaW5nOzspe2lmKG51bGw9PW4mJnIoIjY3Iix0aGlzLl9k
b21JRCksOD09PW4ubm9kZVR5cGUmJiIgL3JlYWN0LXRleHQgIj09PW4ubm9kZVZhbHVlKXt0aGlz
Ll9jbG9zaW5nQ29tbWVudD1uO2JyZWFrfW49bi5uZXh0U2libGluZ31yZXR1cm4gZT1bdGhpcy5f
aG9zdE5vZGUsdGhpcy5fY2xvc2luZ0NvbW1lbnRdLHRoaXMuX2NvbW1lbnROb2Rlcz1lLGV9LHVu
bW91bnRDb21wb25lbnQ6ZnVuY3Rpb24oKXt0aGlzLl9jbG9zaW5nQ29tbWVudD1udWxsLHRoaXMu
X2NvbW1lbnROb2Rlcz1udWxsLHUudW5jYWNoZU5vZGUodGhpcyl9fSksZS5leHBvcnRzPWN9LGZ1
bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe3RoaXMucmVpbml0aWFsaXpl
VHJhbnNhY3Rpb24oKX12YXIgbz1uKDMpLGk9big4KSxhPW4oMjQpLHU9big2KSxzPXtpbml0aWFs
aXplOnUsY2xvc2U6ZnVuY3Rpb24oKXtmLmlzQmF0Y2hpbmdVcGRhdGVzPSExfX0sYz17aW5pdGlh
bGl6ZTp1LGNsb3NlOmkuZmx1c2hCYXRjaGVkVXBkYXRlcy5iaW5kKGkpfSxsPVtjLHNdO28oci5w
cm90b3R5cGUsYSx7Z2V0VHJhbnNhY3Rpb25XcmFwcGVyczpmdW5jdGlvbigpe3JldHVybiBsfX0p
O3ZhciBwPW5ldyByLGY9e2lzQmF0Y2hpbmdVcGRhdGVzOiExLGJhdGNoZWRVcGRhdGVzOmZ1bmN0
aW9uKGUsdCxuLHIsbyxpKXt2YXIgYT1mLmlzQmF0Y2hpbmdVcGRhdGVzO3JldHVybiBmLmlzQmF0
Y2hpbmdVcGRhdGVzPSEwLGE/ZSh0LG4scixvLGkpOnAucGVyZm9ybShlLG51bGwsdCxuLHIsbyxp
KX19O2UuZXhwb3J0cz1mfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIo
ZSl7Zm9yKDtlLl9ob3N0UGFyZW50OyllPWUuX2hvc3RQYXJlbnQ7dmFyIHQ9cC5nZXROb2RlRnJv
bUluc3RhbmNlKGUpLG49dC5wYXJlbnROb2RlO3JldHVybiBwLmdldENsb3Nlc3RJbnN0YW5jZUZy
b21Ob2RlKG4pfWZ1bmN0aW9uIG8oZSx0KXt0aGlzLnRvcExldmVsVHlwZT1lLHRoaXMubmF0aXZl
RXZlbnQ9dCx0aGlzLmFuY2VzdG9ycz1bXX1mdW5jdGlvbiBpKGUpe3ZhciB0PWQoZS5uYXRpdmVF
dmVudCksbj1wLmdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHQpLG89bjtkb3tlLmFuY2VzdG9y
cy5wdXNoKG8pLG89byYmcihvKX13aGlsZShvKTtmb3IodmFyIGk9MDtpPGUuYW5jZXN0b3JzLmxl
bmd0aDtpKyspbj1lLmFuY2VzdG9yc1tpXSxtLl9oYW5kbGVUb3BMZXZlbChlLnRvcExldmVsVHlw
ZSxuLGUubmF0aXZlRXZlbnQsZChlLm5hdGl2ZUV2ZW50KSl9ZnVuY3Rpb24gYShlKXtlKGgod2lu
ZG93KSl9dmFyIHU9bigzKSxzPW4oNzkpLGM9big1KSxsPW4oMTIpLHA9big0KSxmPW4oOCksZD1u
KDM0KSxoPW4oMTY4KTt1KG8ucHJvdG90eXBlLHtkZXN0cnVjdG9yOmZ1bmN0aW9uKCl7dGhpcy50
b3BMZXZlbFR5cGU9bnVsbCx0aGlzLm5hdGl2ZUV2ZW50PW51bGwsdGhpcy5hbmNlc3RvcnMubGVu
Z3RoPTB9fSksbC5hZGRQb29saW5nVG8obyxsLnR3b0FyZ3VtZW50UG9vbGVyKTt2YXIgbT17X2Vu
YWJsZWQ6ITAsX2hhbmRsZVRvcExldmVsOm51bGwsV0lORE9XX0hBTkRMRTpjLmNhblVzZURPTT93
aW5kb3c6bnVsbCxzZXRIYW5kbGVUb3BMZXZlbDpmdW5jdGlvbihlKXttLl9oYW5kbGVUb3BMZXZl
bD1lfSxzZXRFbmFibGVkOmZ1bmN0aW9uKGUpe20uX2VuYWJsZWQ9ISFlfSxpc0VuYWJsZWQ6ZnVu
Y3Rpb24oKXtyZXR1cm4gbS5fZW5hYmxlZH0sdHJhcEJ1YmJsZWRFdmVudDpmdW5jdGlvbihlLHQs
bil7cmV0dXJuIG4/cy5saXN0ZW4obix0LG0uZGlzcGF0Y2hFdmVudC5iaW5kKG51bGwsZSkpOm51
bGx9LHRyYXBDYXB0dXJlZEV2ZW50OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj9zLmNhcHR1cmUo
bix0LG0uZGlzcGF0Y2hFdmVudC5iaW5kKG51bGwsZSkpOm51bGx9LG1vbml0b3JTY3JvbGxWYWx1
ZTpmdW5jdGlvbihlKXt2YXIgdD1hLmJpbmQobnVsbCxlKTtzLmxpc3Rlbih3aW5kb3csInNjcm9s
bCIsdCl9LGRpc3BhdGNoRXZlbnQ6ZnVuY3Rpb24oZSx0KXtpZihtLl9lbmFibGVkKXt2YXIgbj1v
LmdldFBvb2xlZChlLHQpO3RyeXtmLmJhdGNoZWRVcGRhdGVzKGksbil9ZmluYWxseXtvLnJlbGVh
c2Uobil9fX19O2UuZXhwb3J0cz1tfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0
aW9uIHIoZSl7cmV0dXJuIGUuV2luZG93JiZlIGluc3RhbmNlb2YgZS5XaW5kb3c/e3g6ZS5wYWdl
WE9mZnNldHx8ZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCx5OmUucGFnZVlP
ZmZzZXR8fGUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcH06e3g6ZS5zY3JvbGxM
ZWZ0LHk6ZS5zY3JvbGxUb3B9fWUuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJp
Y3QiO3ZhciByPW4oMTUpLG89bigyMCksaT1uKDMyKSxhPW4oNDEpLHU9big3NSkscz1uKDI4KSxj
PW4oNzYpLGw9big4KSxwPXtDb21wb25lbnQ6YS5pbmplY3Rpb24sRE9NUHJvcGVydHk6ci5pbmpl
Y3Rpb24sRW1wdHlDb21wb25lbnQ6dS5pbmplY3Rpb24sRXZlbnRQbHVnaW5IdWI6by5pbmplY3Rp
b24sRXZlbnRQbHVnaW5VdGlsczppLmluamVjdGlvbixFdmVudEVtaXR0ZXI6cy5pbmplY3Rpb24s
SG9zdENvbXBvbmVudDpjLmluamVjdGlvbixVcGRhdGVzOmwuaW5qZWN0aW9ufTtlLmV4cG9ydHM9
cH0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3RoaXMucmVpbml0
aWFsaXplVHJhbnNhY3Rpb24oKSx0aGlzLnJlbmRlclRvU3RhdGljTWFya3VwPSExLHRoaXMucmVh
Y3RNb3VudFJlYWR5PWkuZ2V0UG9vbGVkKG51bGwpLHRoaXMudXNlQ3JlYXRlRWxlbWVudD1lfXZh
ciBvPW4oMyksaT1uKDYyKSxhPW4oMTIpLHU9bigyOCkscz1uKDgwKSxjPShuKDcpLG4oMjQpKSxs
PW4oNDUpLHA9e2luaXRpYWxpemU6cy5nZXRTZWxlY3Rpb25JbmZvcm1hdGlvbixjbG9zZTpzLnJl
c3RvcmVTZWxlY3Rpb259LGY9e2luaXRpYWxpemU6ZnVuY3Rpb24oKXt2YXIgZT11LmlzRW5hYmxl
ZCgpO3JldHVybiB1LnNldEVuYWJsZWQoITEpLGV9LGNsb3NlOmZ1bmN0aW9uKGUpe3Uuc2V0RW5h
YmxlZChlKX19LGQ9e2luaXRpYWxpemU6ZnVuY3Rpb24oKXt0aGlzLnJlYWN0TW91bnRSZWFkeS5y
ZXNldCgpfSxjbG9zZTpmdW5jdGlvbigpe3RoaXMucmVhY3RNb3VudFJlYWR5Lm5vdGlmeUFsbCgp
fX0saD1bcCxmLGRdLG09e2dldFRyYW5zYWN0aW9uV3JhcHBlcnM6ZnVuY3Rpb24oKXtyZXR1cm4g
aH0sZ2V0UmVhY3RNb3VudFJlYWR5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhY3RNb3VudFJl
YWR5fSxnZXRVcGRhdGVRdWV1ZTpmdW5jdGlvbigpe3JldHVybiBsfSxjaGVja3BvaW50OmZ1bmN0
aW9uKCl7cmV0dXJuIHRoaXMucmVhY3RNb3VudFJlYWR5LmNoZWNrcG9pbnQoKX0scm9sbGJhY2s6
ZnVuY3Rpb24oZSl7dGhpcy5yZWFjdE1vdW50UmVhZHkucm9sbGJhY2soZSl9LGRlc3RydWN0b3I6
ZnVuY3Rpb24oKXtpLnJlbGVhc2UodGhpcy5yZWFjdE1vdW50UmVhZHkpLHRoaXMucmVhY3RNb3Vu
dFJlYWR5PW51bGx9fTtvKHIucHJvdG90eXBlLGMsbSksYS5hZGRQb29saW5nVG8ociksZS5leHBv
cnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyKXty
ZXR1cm4gZT09PW4mJnQ9PT1yfWZ1bmN0aW9uIG8oZSl7dmFyIHQ9ZG9jdW1lbnQuc2VsZWN0aW9u
LG49dC5jcmVhdGVSYW5nZSgpLHI9bi50ZXh0Lmxlbmd0aCxvPW4uZHVwbGljYXRlKCk7by5tb3Zl
VG9FbGVtZW50VGV4dChlKSxvLnNldEVuZFBvaW50KCJFbmRUb1N0YXJ0IixuKTt2YXIgaT1vLnRl
eHQubGVuZ3RoO3JldHVybntzdGFydDppLGVuZDppK3J9fWZ1bmN0aW9uIGkoZSl7dmFyIHQ9d2lu
ZG93LmdldFNlbGVjdGlvbiYmd2luZG93LmdldFNlbGVjdGlvbigpO2lmKCF0fHwwPT09dC5yYW5n
ZUNvdW50KXJldHVybiBudWxsO3ZhciBuPXQuYW5jaG9yTm9kZSxvPXQuYW5jaG9yT2Zmc2V0LGk9
dC5mb2N1c05vZGUsYT10LmZvY3VzT2Zmc2V0LHU9dC5nZXRSYW5nZUF0KDApO3RyeXt1LnN0YXJ0
Q29udGFpbmVyLm5vZGVUeXBlLHUuZW5kQ29udGFpbmVyLm5vZGVUeXBlfWNhdGNoKGUpe3JldHVy
biBudWxsfXZhciBzPXIodC5hbmNob3JOb2RlLHQuYW5jaG9yT2Zmc2V0LHQuZm9jdXNOb2RlLHQu
Zm9jdXNPZmZzZXQpLGM9cz8wOnUudG9TdHJpbmcoKS5sZW5ndGgsbD11LmNsb25lUmFuZ2UoKTts
LnNlbGVjdE5vZGVDb250ZW50cyhlKSxsLnNldEVuZCh1LnN0YXJ0Q29udGFpbmVyLHUuc3RhcnRP
ZmZzZXQpO3ZhciBwPXIobC5zdGFydENvbnRhaW5lcixsLnN0YXJ0T2Zmc2V0LGwuZW5kQ29udGFp
bmVyLGwuZW5kT2Zmc2V0KSxmPXA/MDpsLnRvU3RyaW5nKCkubGVuZ3RoLGQ9ZitjLGg9ZG9jdW1l
bnQuY3JlYXRlUmFuZ2UoKTtoLnNldFN0YXJ0KG4sbyksaC5zZXRFbmQoaSxhKTt2YXIgbT1oLmNv
bGxhcHNlZDtyZXR1cm57c3RhcnQ6bT9kOmYsZW5kOm0/ZjpkfX1mdW5jdGlvbiBhKGUsdCl7dmFy
IG4scixvPWRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpLmR1cGxpY2F0ZSgpO3ZvaWQg
MD09PXQuZW5kPyhuPXQuc3RhcnQscj1uKTp0LnN0YXJ0PnQuZW5kPyhuPXQuZW5kLHI9dC5zdGFy
dCk6KG49dC5zdGFydCxyPXQuZW5kKSxvLm1vdmVUb0VsZW1lbnRUZXh0KGUpLG8ubW92ZVN0YXJ0
KCJjaGFyYWN0ZXIiLG4pLG8uc2V0RW5kUG9pbnQoIkVuZFRvU3RhcnQiLG8pLG8ubW92ZUVuZCgi
Y2hhcmFjdGVyIixyLW4pLG8uc2VsZWN0KCl9ZnVuY3Rpb24gdShlLHQpe2lmKHdpbmRvdy5nZXRT
ZWxlY3Rpb24pe3ZhciBuPXdpbmRvdy5nZXRTZWxlY3Rpb24oKSxyPWVbbCgpXS5sZW5ndGgsbz1N
YXRoLm1pbih0LnN0YXJ0LHIpLGk9dm9pZCAwPT09dC5lbmQ/bzpNYXRoLm1pbih0LmVuZCxyKTtp
Zighbi5leHRlbmQmJm8+aSl7dmFyIGE9aTtpPW8sbz1hfXZhciB1PWMoZSxvKSxzPWMoZSxpKTtp
Zih1JiZzKXt2YXIgcD1kb2N1bWVudC5jcmVhdGVSYW5nZSgpO3Auc2V0U3RhcnQodS5ub2RlLHUu
b2Zmc2V0KSxuLnJlbW92ZUFsbFJhbmdlcygpLG8+aT8obi5hZGRSYW5nZShwKSxuLmV4dGVuZChz
Lm5vZGUscy5vZmZzZXQpKToocC5zZXRFbmQocy5ub2RlLHMub2Zmc2V0KSxuLmFkZFJhbmdlKHAp
KX19fXZhciBzPW4oNSksYz1uKDE3MiksbD1uKDYxKSxwPXMuY2FuVXNlRE9NJiYic2VsZWN0aW9u
ImluIGRvY3VtZW50JiYhKCJnZXRTZWxlY3Rpb24iaW4gd2luZG93KSxmPXtnZXRPZmZzZXRzOnA/
bzppLHNldE9mZnNldHM6cD9hOnV9O2UuZXhwb3J0cz1mfSxmdW5jdGlvbihlLHQsbil7InVzZSBz
dHJpY3QiO2Z1bmN0aW9uIHIoZSl7Zm9yKDtlJiZlLmZpcnN0Q2hpbGQ7KWU9ZS5maXJzdENoaWxk
O3JldHVybiBlfWZ1bmN0aW9uIG8oZSl7Zm9yKDtlOyl7aWYoZS5uZXh0U2libGluZylyZXR1cm4g
ZS5uZXh0U2libGluZztlPWUucGFyZW50Tm9kZX19ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIgbj1y
KGUpLGk9MCxhPTA7bjspe2lmKDM9PT1uLm5vZGVUeXBlKXtpZihhPWkrbi50ZXh0Q29udGVudC5s
ZW5ndGgsaTw9dCYmYT49dClyZXR1cm57bm9kZTpuLG9mZnNldDp0LWl9O2k9YX1uPXIobyhuKSl9
fWUuZXhwb3J0cz1pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0
KXtyZXR1cm4hKCFlfHwhdCkmJihlPT09dHx8IW8oZSkmJihvKHQpP3IoZSx0LnBhcmVudE5vZGUp
OiJjb250YWlucyJpbiBlP2UuY29udGFpbnModCk6ISFlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9u
JiYhISgxNiZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHQpKSkpfXZhciBvPW4oMTc0KTtlLmV4
cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVy
biBvKGUpJiYzPT1lLm5vZGVUeXBlfXZhciBvPW4oMTc1KTtlLmV4cG9ydHM9cn0sZnVuY3Rpb24o
ZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PWU/ZS5vd25lckRvY3VtZW50
fHxlOmRvY3VtZW50LG49dC5kZWZhdWx0Vmlld3x8d2luZG93O3JldHVybiEoIWV8fCEoImZ1bmN0
aW9uIj09PXR5cGVvZiBuLk5vZGU/ZSBpbnN0YW5jZW9mIG4uTm9kZToib2JqZWN0Ij09PXR5cGVv
ZiBlJiYibnVtYmVyIj09PXR5cGVvZiBlLm5vZGVUeXBlJiYic3RyaW5nIj09PXR5cGVvZiBlLm5v
ZGVOYW1lKSl9ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9
e3hsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMu
b3JnL1hNTC8xOTk4L25hbWVzcGFjZSJ9LG89e2FjY2VudEhlaWdodDoiYWNjZW50LWhlaWdodCIs
YWNjdW11bGF0ZTowLGFkZGl0aXZlOjAsYWxpZ25tZW50QmFzZWxpbmU6ImFsaWdubWVudC1iYXNl
bGluZSIsYWxsb3dSZW9yZGVyOiJhbGxvd1Jlb3JkZXIiLGFscGhhYmV0aWM6MCxhbXBsaXR1ZGU6
MCxhcmFiaWNGb3JtOiJhcmFiaWMtZm9ybSIsYXNjZW50OjAsYXR0cmlidXRlTmFtZToiYXR0cmli
dXRlTmFtZSIsYXR0cmlidXRlVHlwZToiYXR0cmlidXRlVHlwZSIsYXV0b1JldmVyc2U6ImF1dG9S
ZXZlcnNlIixhemltdXRoOjAsYmFzZUZyZXF1ZW5jeToiYmFzZUZyZXF1ZW5jeSIsYmFzZVByb2Zp
bGU6ImJhc2VQcm9maWxlIixiYXNlbGluZVNoaWZ0OiJiYXNlbGluZS1zaGlmdCIsYmJveDowLGJl
Z2luOjAsYmlhczowLGJ5OjAsY2FsY01vZGU6ImNhbGNNb2RlIixjYXBIZWlnaHQ6ImNhcC1oZWln
aHQiLGNsaXA6MCxjbGlwUGF0aDoiY2xpcC1wYXRoIixjbGlwUnVsZToiY2xpcC1ydWxlIixjbGlw
UGF0aFVuaXRzOiJjbGlwUGF0aFVuaXRzIixjb2xvckludGVycG9sYXRpb246ImNvbG9yLWludGVy
cG9sYXRpb24iLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6ImNvbG9yLWludGVycG9sYXRpb24t
ZmlsdGVycyIsY29sb3JQcm9maWxlOiJjb2xvci1wcm9maWxlIixjb2xvclJlbmRlcmluZzoiY29s
b3ItcmVuZGVyaW5nIixjb250ZW50U2NyaXB0VHlwZToiY29udGVudFNjcmlwdFR5cGUiLGNvbnRl
bnRTdHlsZVR5cGU6ImNvbnRlbnRTdHlsZVR5cGUiLGN1cnNvcjowLGN4OjAsY3k6MCxkOjAsZGVj
ZWxlcmF0ZTowLGRlc2NlbnQ6MCxkaWZmdXNlQ29uc3RhbnQ6ImRpZmZ1c2VDb25zdGFudCIsZGly
ZWN0aW9uOjAsZGlzcGxheTowLGRpdmlzb3I6MCxkb21pbmFudEJhc2VsaW5lOiJkb21pbmFudC1i
YXNlbGluZSIsZHVyOjAsZHg6MCxkeTowLGVkZ2VNb2RlOiJlZGdlTW9kZSIsZWxldmF0aW9uOjAs
ZW5hYmxlQmFja2dyb3VuZDoiZW5hYmxlLWJhY2tncm91bmQiLGVuZDowLGV4cG9uZW50OjAsZXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDoiZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCIsZmlsbDow
LGZpbGxPcGFjaXR5OiJmaWxsLW9wYWNpdHkiLGZpbGxSdWxlOiJmaWxsLXJ1bGUiLGZpbHRlcjow
LGZpbHRlclJlczoiZmlsdGVyUmVzIixmaWx0ZXJVbml0czoiZmlsdGVyVW5pdHMiLGZsb29kQ29s
b3I6ImZsb29kLWNvbG9yIixmbG9vZE9wYWNpdHk6ImZsb29kLW9wYWNpdHkiLGZvY3VzYWJsZTow
LGZvbnRGYW1pbHk6ImZvbnQtZmFtaWx5Iixmb250U2l6ZToiZm9udC1zaXplIixmb250U2l6ZUFk
anVzdDoiZm9udC1zaXplLWFkanVzdCIsZm9udFN0cmV0Y2g6ImZvbnQtc3RyZXRjaCIsZm9udFN0
eWxlOiJmb250LXN0eWxlIixmb250VmFyaWFudDoiZm9udC12YXJpYW50Iixmb250V2VpZ2h0OiJm
b250LXdlaWdodCIsZm9ybWF0OjAsZnJvbTowLGZ4OjAsZnk6MCxnMTowLGcyOjAsZ2x5cGhOYW1l
OiJnbHlwaC1uYW1lIixnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbDoiZ2x5cGgtb3JpZW50YXRp
b24taG9yaXpvbnRhbCIsZ2x5cGhPcmllbnRhdGlvblZlcnRpY2FsOiJnbHlwaC1vcmllbnRhdGlv
bi12ZXJ0aWNhbCIsZ2x5cGhSZWY6ImdseXBoUmVmIixncmFkaWVudFRyYW5zZm9ybToiZ3JhZGll
bnRUcmFuc2Zvcm0iLGdyYWRpZW50VW5pdHM6ImdyYWRpZW50VW5pdHMiLGhhbmdpbmc6MCxob3Jp
ekFkdlg6Imhvcml6LWFkdi14Iixob3Jpek9yaWdpblg6Imhvcml6LW9yaWdpbi14IixpZGVvZ3Jh
cGhpYzowLGltYWdlUmVuZGVyaW5nOiJpbWFnZS1yZW5kZXJpbmciLGluOjAsaW4yOjAsaW50ZXJj
ZXB0OjAsazowLGsxOjAsazI6MCxrMzowLGs0OjAsa2VybmVsTWF0cml4OiJrZXJuZWxNYXRyaXgi
LGtlcm5lbFVuaXRMZW5ndGg6Imtlcm5lbFVuaXRMZW5ndGgiLGtlcm5pbmc6MCxrZXlQb2ludHM6
ImtleVBvaW50cyIsa2V5U3BsaW5lczoia2V5U3BsaW5lcyIsa2V5VGltZXM6ImtleVRpbWVzIixs
ZW5ndGhBZGp1c3Q6Imxlbmd0aEFkanVzdCIsbGV0dGVyU3BhY2luZzoibGV0dGVyLXNwYWNpbmci
LGxpZ2h0aW5nQ29sb3I6ImxpZ2h0aW5nLWNvbG9yIixsaW1pdGluZ0NvbmVBbmdsZToibGltaXRp
bmdDb25lQW5nbGUiLGxvY2FsOjAsbWFya2VyRW5kOiJtYXJrZXItZW5kIixtYXJrZXJNaWQ6Im1h
cmtlci1taWQiLG1hcmtlclN0YXJ0OiJtYXJrZXItc3RhcnQiLG1hcmtlckhlaWdodDoibWFya2Vy
SGVpZ2h0IixtYXJrZXJVbml0czoibWFya2VyVW5pdHMiLG1hcmtlcldpZHRoOiJtYXJrZXJXaWR0
aCIsbWFzazowLG1hc2tDb250ZW50VW5pdHM6Im1hc2tDb250ZW50VW5pdHMiLG1hc2tVbml0czoi
bWFza1VuaXRzIixtYXRoZW1hdGljYWw6MCxtb2RlOjAsbnVtT2N0YXZlczoibnVtT2N0YXZlcyIs
b2Zmc2V0OjAsb3BhY2l0eTowLG9wZXJhdG9yOjAsb3JkZXI6MCxvcmllbnQ6MCxvcmllbnRhdGlv
bjowLG9yaWdpbjowLG92ZXJmbG93OjAsb3ZlcmxpbmVQb3NpdGlvbjoib3ZlcmxpbmUtcG9zaXRp
b24iLG92ZXJsaW5lVGhpY2tuZXNzOiJvdmVybGluZS10aGlja25lc3MiLHBhaW50T3JkZXI6InBh
aW50LW9yZGVyIixwYW5vc2UxOiJwYW5vc2UtMSIscGF0aExlbmd0aDoicGF0aExlbmd0aCIscGF0
dGVybkNvbnRlbnRVbml0czoicGF0dGVybkNvbnRlbnRVbml0cyIscGF0dGVyblRyYW5zZm9ybToi
cGF0dGVyblRyYW5zZm9ybSIscGF0dGVyblVuaXRzOiJwYXR0ZXJuVW5pdHMiLHBvaW50ZXJFdmVu
dHM6InBvaW50ZXItZXZlbnRzIixwb2ludHM6MCxwb2ludHNBdFg6InBvaW50c0F0WCIscG9pbnRz
QXRZOiJwb2ludHNBdFkiLHBvaW50c0F0WjoicG9pbnRzQXRaIixwcmVzZXJ2ZUFscGhhOiJwcmVz
ZXJ2ZUFscGhhIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJwcmVzZXJ2ZUFzcGVjdFJhdGlvIixwcmlt
aXRpdmVVbml0czoicHJpbWl0aXZlVW5pdHMiLHI6MCxyYWRpdXM6MCxyZWZYOiJyZWZYIixyZWZZ
OiJyZWZZIixyZW5kZXJpbmdJbnRlbnQ6InJlbmRlcmluZy1pbnRlbnQiLHJlcGVhdENvdW50OiJy
ZXBlYXRDb3VudCIscmVwZWF0RHVyOiJyZXBlYXREdXIiLHJlcXVpcmVkRXh0ZW5zaW9uczoicmVx
dWlyZWRFeHRlbnNpb25zIixyZXF1aXJlZEZlYXR1cmVzOiJyZXF1aXJlZEZlYXR1cmVzIixyZXN0
YXJ0OjAscmVzdWx0OjAscm90YXRlOjAscng6MCxyeTowLHNjYWxlOjAsc2VlZDowLHNoYXBlUmVu
ZGVyaW5nOiJzaGFwZS1yZW5kZXJpbmciLHNsb3BlOjAsc3BhY2luZzowLHNwZWN1bGFyQ29uc3Rh
bnQ6InNwZWN1bGFyQ29uc3RhbnQiLHNwZWN1bGFyRXhwb25lbnQ6InNwZWN1bGFyRXhwb25lbnQi
LHNwZWVkOjAsc3ByZWFkTWV0aG9kOiJzcHJlYWRNZXRob2QiLHN0YXJ0T2Zmc2V0OiJzdGFydE9m
ZnNldCIsc3RkRGV2aWF0aW9uOiJzdGREZXZpYXRpb24iLHN0ZW1oOjAsc3RlbXY6MCxzdGl0Y2hU
aWxlczoic3RpdGNoVGlsZXMiLHN0b3BDb2xvcjoic3RvcC1jb2xvciIsc3RvcE9wYWNpdHk6InN0
b3Atb3BhY2l0eSIsc3RyaWtldGhyb3VnaFBvc2l0aW9uOiJzdHJpa2V0aHJvdWdoLXBvc2l0aW9u
IixzdHJpa2V0aHJvdWdoVGhpY2tuZXNzOiJzdHJpa2V0aHJvdWdoLXRoaWNrbmVzcyIsc3RyaW5n
OjAsc3Ryb2tlOjAsc3Ryb2tlRGFzaGFycmF5OiJzdHJva2UtZGFzaGFycmF5IixzdHJva2VEYXNo
b2Zmc2V0OiJzdHJva2UtZGFzaG9mZnNldCIsc3Ryb2tlTGluZWNhcDoic3Ryb2tlLWxpbmVjYXAi
LHN0cm9rZUxpbmVqb2luOiJzdHJva2UtbGluZWpvaW4iLHN0cm9rZU1pdGVybGltaXQ6InN0cm9r
ZS1taXRlcmxpbWl0IixzdHJva2VPcGFjaXR5OiJzdHJva2Utb3BhY2l0eSIsc3Ryb2tlV2lkdGg6
InN0cm9rZS13aWR0aCIsc3VyZmFjZVNjYWxlOiJzdXJmYWNlU2NhbGUiLHN5c3RlbUxhbmd1YWdl
OiJzeXN0ZW1MYW5ndWFnZSIsdGFibGVWYWx1ZXM6InRhYmxlVmFsdWVzIix0YXJnZXRYOiJ0YXJn
ZXRYIix0YXJnZXRZOiJ0YXJnZXRZIix0ZXh0QW5jaG9yOiJ0ZXh0LWFuY2hvciIsdGV4dERlY29y
YXRpb246InRleHQtZGVjb3JhdGlvbiIsdGV4dFJlbmRlcmluZzoidGV4dC1yZW5kZXJpbmciLHRl
eHRMZW5ndGg6InRleHRMZW5ndGgiLHRvOjAsdHJhbnNmb3JtOjAsdTE6MCx1MjowLHVuZGVybGlu
ZVBvc2l0aW9uOiJ1bmRlcmxpbmUtcG9zaXRpb24iLHVuZGVybGluZVRoaWNrbmVzczoidW5kZXJs
aW5lLXRoaWNrbmVzcyIsdW5pY29kZTowLHVuaWNvZGVCaWRpOiJ1bmljb2RlLWJpZGkiLHVuaWNv
ZGVSYW5nZToidW5pY29kZS1yYW5nZSIsdW5pdHNQZXJFbToidW5pdHMtcGVyLWVtIix2QWxwaGFi
ZXRpYzoidi1hbHBoYWJldGljIix2SGFuZ2luZzoidi1oYW5naW5nIix2SWRlb2dyYXBoaWM6InYt
aWRlb2dyYXBoaWMiLHZNYXRoZW1hdGljYWw6InYtbWF0aGVtYXRpY2FsIix2YWx1ZXM6MCx2ZWN0
b3JFZmZlY3Q6InZlY3Rvci1lZmZlY3QiLHZlcnNpb246MCx2ZXJ0QWR2WToidmVydC1hZHYteSIs
dmVydE9yaWdpblg6InZlcnQtb3JpZ2luLXgiLHZlcnRPcmlnaW5ZOiJ2ZXJ0LW9yaWdpbi15Iix2
aWV3Qm94OiJ2aWV3Qm94Iix2aWV3VGFyZ2V0OiJ2aWV3VGFyZ2V0Iix2aXNpYmlsaXR5OjAsd2lk
dGhzOjAsd29yZFNwYWNpbmc6IndvcmQtc3BhY2luZyIsd3JpdGluZ01vZGU6IndyaXRpbmctbW9k
ZSIseDowLHhIZWlnaHQ6IngtaGVpZ2h0Iix4MTowLHgyOjAseENoYW5uZWxTZWxlY3RvcjoieENo
YW5uZWxTZWxlY3RvciIseGxpbmtBY3R1YXRlOiJ4bGluazphY3R1YXRlIix4bGlua0FyY3JvbGU6
InhsaW5rOmFyY3JvbGUiLHhsaW5rSHJlZjoieGxpbms6aHJlZiIseGxpbmtSb2xlOiJ4bGluazpy
b2xlIix4bGlua1Nob3c6InhsaW5rOnNob3ciLHhsaW5rVGl0bGU6InhsaW5rOnRpdGxlIix4bGlu
a1R5cGU6InhsaW5rOnR5cGUiLHhtbEJhc2U6InhtbDpiYXNlIix4bWxuczowLHhtbG5zWGxpbms6
InhtbG5zOnhsaW5rIix4bWxMYW5nOiJ4bWw6bGFuZyIseG1sU3BhY2U6InhtbDpzcGFjZSIseTow
LHkxOjAseTI6MCx5Q2hhbm5lbFNlbGVjdG9yOiJ5Q2hhbm5lbFNlbGVjdG9yIix6OjAsem9vbUFu
ZFBhbjoiem9vbUFuZFBhbiJ9LGk9e1Byb3BlcnRpZXM6e30sRE9NQXR0cmlidXRlTmFtZXNwYWNl
czp7eGxpbmtBY3R1YXRlOnIueGxpbmsseGxpbmtBcmNyb2xlOnIueGxpbmsseGxpbmtIcmVmOnIu
eGxpbmsseGxpbmtSb2xlOnIueGxpbmsseGxpbmtTaG93OnIueGxpbmsseGxpbmtUaXRsZTpyLnhs
aW5rLHhsaW5rVHlwZTpyLnhsaW5rLHhtbEJhc2U6ci54bWwseG1sTGFuZzpyLnhtbCx4bWxTcGFj
ZTpyLnhtbH0sRE9NQXR0cmlidXRlTmFtZXM6e319O09iamVjdC5rZXlzKG8pLmZvckVhY2goZnVu
Y3Rpb24oZSl7aS5Qcm9wZXJ0aWVzW2VdPTAsb1tlXSYmKGkuRE9NQXR0cmlidXRlTmFtZXNbZV09
b1tlXSl9KSxlLmV4cG9ydHM9aX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlv
biByKGUpe2lmKCJzZWxlY3Rpb25TdGFydCJpbiBlJiZzLmhhc1NlbGVjdGlvbkNhcGFiaWxpdGll
cyhlKSlyZXR1cm57c3RhcnQ6ZS5zZWxlY3Rpb25TdGFydCxlbmQ6ZS5zZWxlY3Rpb25FbmR9O2lm
KHdpbmRvdy5nZXRTZWxlY3Rpb24pe3ZhciB0PXdpbmRvdy5nZXRTZWxlY3Rpb24oKTtyZXR1cm57
YW5jaG9yTm9kZTp0LmFuY2hvck5vZGUsYW5jaG9yT2Zmc2V0OnQuYW5jaG9yT2Zmc2V0LGZvY3Vz
Tm9kZTp0LmZvY3VzTm9kZSxmb2N1c09mZnNldDp0LmZvY3VzT2Zmc2V0fX1pZihkb2N1bWVudC5z
ZWxlY3Rpb24pe3ZhciBuPWRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpO3JldHVybntw
YXJlbnRFbGVtZW50Om4ucGFyZW50RWxlbWVudCgpLHRleHQ6bi50ZXh0LHRvcDpuLmJvdW5kaW5n
VG9wLGxlZnQ6bi5ib3VuZGluZ0xlZnR9fX1mdW5jdGlvbiBvKGUsdCl7aWYoZ3x8bnVsbD09bXx8
bSE9PWwoKSlyZXR1cm4gbnVsbDt2YXIgbj1yKG0pO2lmKCF5fHwhZih5LG4pKXt5PW47dmFyIG89
Yy5nZXRQb29sZWQoaC5zZWxlY3QsdixlLHQpO3JldHVybiBvLnR5cGU9InNlbGVjdCIsby50YXJn
ZXQ9bSxpLmFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXMobyksb31yZXR1cm4gbnVsbH12YXIg
aT1uKDE5KSxhPW4oNSksdT1uKDQpLHM9big4MCksYz1uKDExKSxsPW4oODEpLHA9big2NSksZj1u
KDQyKSxkPWEuY2FuVXNlRE9NJiYiZG9jdW1lbnRNb2RlImluIGRvY3VtZW50JiZkb2N1bWVudC5k
b2N1bWVudE1vZGU8PTExLGg9e3NlbGVjdDp7cGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJs
ZWQ6Im9uU2VsZWN0IixjYXB0dXJlZDoib25TZWxlY3RDYXB0dXJlIn0sZGVwZW5kZW5jaWVzOlsi
dG9wQmx1ciIsInRvcENvbnRleHRNZW51IiwidG9wRm9jdXMiLCJ0b3BLZXlEb3duIiwidG9wS2V5
VXAiLCJ0b3BNb3VzZURvd24iLCJ0b3BNb3VzZVVwIiwidG9wU2VsZWN0aW9uQ2hhbmdlIl19fSxt
PW51bGwsdj1udWxsLHk9bnVsbCxnPSExLGI9ITEsXz17ZXZlbnRUeXBlczpoLGV4dHJhY3RFdmVu
dHM6ZnVuY3Rpb24oZSx0LG4scil7aWYoIWIpcmV0dXJuIG51bGw7dmFyIGk9dD91LmdldE5vZGVG
cm9tSW5zdGFuY2UodCk6d2luZG93O3N3aXRjaChlKXtjYXNlInRvcEZvY3VzIjoocChpKXx8InRy
dWUiPT09aS5jb250ZW50RWRpdGFibGUpJiYobT1pLHY9dCx5PW51bGwpO2JyZWFrO2Nhc2UidG9w
Qmx1ciI6bT1udWxsLHY9bnVsbCx5PW51bGw7YnJlYWs7Y2FzZSJ0b3BNb3VzZURvd24iOmc9ITA7
YnJlYWs7Y2FzZSJ0b3BDb250ZXh0TWVudSI6Y2FzZSJ0b3BNb3VzZVVwIjpyZXR1cm4gZz0hMSxv
KG4scik7Y2FzZSJ0b3BTZWxlY3Rpb25DaGFuZ2UiOmlmKGQpYnJlYWs7Y2FzZSJ0b3BLZXlEb3du
IjpjYXNlInRvcEtleVVwIjpyZXR1cm4gbyhuLHIpfXJldHVybiBudWxsfSxkaWRQdXRMaXN0ZW5l
cjpmdW5jdGlvbihlLHQsbil7Im9uU2VsZWN0Ij09PXQmJihiPSEwKX19O2UuZXhwb3J0cz1ffSxm
dW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIi4iK2UuX3Jv
b3ROb2RlSUR9ZnVuY3Rpb24gbyhlKXtyZXR1cm4iYnV0dG9uIj09PWV8fCJpbnB1dCI9PT1lfHwi
c2VsZWN0Ij09PWV8fCJ0ZXh0YXJlYSI9PT1lfXZhciBpPW4oMiksYT1uKDc5KSx1PW4oMTkpLHM9
big0KSxjPW4oMTc5KSxsPW4oMTgwKSxwPW4oMTEpLGY9bigxODEpLGQ9bigxODIpLGg9bigyNSks
bT1uKDE4NCksdj1uKDE4NSkseT1uKDE4NiksZz1uKDIxKSxiPW4oMTg3KSxfPW4oNiksQz1uKDQ3
KSx3PShuKDApLHt9KSxFPXt9O1siYWJvcnQiLCJhbmltYXRpb25FbmQiLCJhbmltYXRpb25JdGVy
YXRpb24iLCJhbmltYXRpb25TdGFydCIsImJsdXIiLCJjYW5QbGF5IiwiY2FuUGxheVRocm91Z2gi
LCJjbGljayIsImNvbnRleHRNZW51IiwiY29weSIsImN1dCIsImRvdWJsZUNsaWNrIiwiZHJhZyIs
ImRyYWdFbmQiLCJkcmFnRW50ZXIiLCJkcmFnRXhpdCIsImRyYWdMZWF2ZSIsImRyYWdPdmVyIiwi
ZHJhZ1N0YXJ0IiwiZHJvcCIsImR1cmF0aW9uQ2hhbmdlIiwiZW1wdGllZCIsImVuY3J5cHRlZCIs
ImVuZGVkIiwiZXJyb3IiLCJmb2N1cyIsImlucHV0IiwiaW52YWxpZCIsImtleURvd24iLCJrZXlQ
cmVzcyIsImtleVVwIiwibG9hZCIsImxvYWRlZERhdGEiLCJsb2FkZWRNZXRhZGF0YSIsImxvYWRT
dGFydCIsIm1vdXNlRG93biIsIm1vdXNlTW92ZSIsIm1vdXNlT3V0IiwibW91c2VPdmVyIiwibW91
c2VVcCIsInBhc3RlIiwicGF1c2UiLCJwbGF5IiwicGxheWluZyIsInByb2dyZXNzIiwicmF0ZUNo
YW5nZSIsInJlc2V0Iiwic2Nyb2xsIiwic2Vla2VkIiwic2Vla2luZyIsInN0YWxsZWQiLCJzdWJt
aXQiLCJzdXNwZW5kIiwidGltZVVwZGF0ZSIsInRvdWNoQ2FuY2VsIiwidG91Y2hFbmQiLCJ0b3Vj
aE1vdmUiLCJ0b3VjaFN0YXJ0IiwidHJhbnNpdGlvbkVuZCIsInZvbHVtZUNoYW5nZSIsIndhaXRp
bmciLCJ3aGVlbCJdLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXS50b1VwcGVyQ2FzZSgp
K2Uuc2xpY2UoMSksbj0ib24iK3Qscj0idG9wIit0LG89e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVz
OntidWJibGVkOm4sY2FwdHVyZWQ6bisiQ2FwdHVyZSJ9LGRlcGVuZGVuY2llczpbcl19O3dbZV09
byxFW3JdPW99KTt2YXIgeD17fSxUPXtldmVudFR5cGVzOncsZXh0cmFjdEV2ZW50czpmdW5jdGlv
bihlLHQsbixyKXt2YXIgbz1FW2VdO2lmKCFvKXJldHVybiBudWxsO3ZhciBhO3N3aXRjaChlKXtj
YXNlInRvcEFib3J0IjpjYXNlInRvcENhblBsYXkiOmNhc2UidG9wQ2FuUGxheVRocm91Z2giOmNh
c2UidG9wRHVyYXRpb25DaGFuZ2UiOmNhc2UidG9wRW1wdGllZCI6Y2FzZSJ0b3BFbmNyeXB0ZWQi
OmNhc2UidG9wRW5kZWQiOmNhc2UidG9wRXJyb3IiOmNhc2UidG9wSW5wdXQiOmNhc2UidG9wSW52
YWxpZCI6Y2FzZSJ0b3BMb2FkIjpjYXNlInRvcExvYWRlZERhdGEiOmNhc2UidG9wTG9hZGVkTWV0
YWRhdGEiOmNhc2UidG9wTG9hZFN0YXJ0IjpjYXNlInRvcFBhdXNlIjpjYXNlInRvcFBsYXkiOmNh
c2UidG9wUGxheWluZyI6Y2FzZSJ0b3BQcm9ncmVzcyI6Y2FzZSJ0b3BSYXRlQ2hhbmdlIjpjYXNl
InRvcFJlc2V0IjpjYXNlInRvcFNlZWtlZCI6Y2FzZSJ0b3BTZWVraW5nIjpjYXNlInRvcFN0YWxs
ZWQiOmNhc2UidG9wU3VibWl0IjpjYXNlInRvcFN1c3BlbmQiOmNhc2UidG9wVGltZVVwZGF0ZSI6
Y2FzZSJ0b3BWb2x1bWVDaGFuZ2UiOmNhc2UidG9wV2FpdGluZyI6YT1wO2JyZWFrO2Nhc2UidG9w
S2V5UHJlc3MiOmlmKDA9PT1DKG4pKXJldHVybiBudWxsO2Nhc2UidG9wS2V5RG93biI6Y2FzZSJ0
b3BLZXlVcCI6YT1kO2JyZWFrO2Nhc2UidG9wQmx1ciI6Y2FzZSJ0b3BGb2N1cyI6YT1mO2JyZWFr
O2Nhc2UidG9wQ2xpY2siOmlmKDI9PT1uLmJ1dHRvbilyZXR1cm4gbnVsbDtjYXNlInRvcERvdWJs
ZUNsaWNrIjpjYXNlInRvcE1vdXNlRG93biI6Y2FzZSJ0b3BNb3VzZU1vdmUiOmNhc2UidG9wTW91
c2VVcCI6Y2FzZSJ0b3BNb3VzZU91dCI6Y2FzZSJ0b3BNb3VzZU92ZXIiOmNhc2UidG9wQ29udGV4
dE1lbnUiOmE9aDticmVhaztjYXNlInRvcERyYWciOmNhc2UidG9wRHJhZ0VuZCI6Y2FzZSJ0b3BE
cmFnRW50ZXIiOmNhc2UidG9wRHJhZ0V4aXQiOmNhc2UidG9wRHJhZ0xlYXZlIjpjYXNlInRvcERy
YWdPdmVyIjpjYXNlInRvcERyYWdTdGFydCI6Y2FzZSJ0b3BEcm9wIjphPW07YnJlYWs7Y2FzZSJ0
b3BUb3VjaENhbmNlbCI6Y2FzZSJ0b3BUb3VjaEVuZCI6Y2FzZSJ0b3BUb3VjaE1vdmUiOmNhc2Ui
dG9wVG91Y2hTdGFydCI6YT12O2JyZWFrO2Nhc2UidG9wQW5pbWF0aW9uRW5kIjpjYXNlInRvcEFu
aW1hdGlvbkl0ZXJhdGlvbiI6Y2FzZSJ0b3BBbmltYXRpb25TdGFydCI6YT1jO2JyZWFrO2Nhc2Ui
dG9wVHJhbnNpdGlvbkVuZCI6YT15O2JyZWFrO2Nhc2UidG9wU2Nyb2xsIjphPWc7YnJlYWs7Y2Fz
ZSJ0b3BXaGVlbCI6YT1iO2JyZWFrO2Nhc2UidG9wQ29weSI6Y2FzZSJ0b3BDdXQiOmNhc2UidG9w
UGFzdGUiOmE9bH1hfHxpKCI4NiIsZSk7dmFyIHM9YS5nZXRQb29sZWQobyx0LG4scik7cmV0dXJu
IHUuYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlcyhzKSxzfSxkaWRQdXRMaXN0ZW5lcjpmdW5j
dGlvbihlLHQsbil7aWYoIm9uQ2xpY2siPT09dCYmIW8oZS5fdGFnKSl7dmFyIGk9cihlKSx1PXMu
Z2V0Tm9kZUZyb21JbnN0YW5jZShlKTt4W2ldfHwoeFtpXT1hLmxpc3Rlbih1LCJjbGljayIsXykp
fX0sd2lsbERlbGV0ZUxpc3RlbmVyOmZ1bmN0aW9uKGUsdCl7aWYoIm9uQ2xpY2siPT09dCYmIW8o
ZS5fdGFnKSl7dmFyIG49cihlKTt4W25dLnJlbW92ZSgpLGRlbGV0ZSB4W25dfX19O2UuZXhwb3J0
cz1UfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scil7cmV0
dXJuIG8uY2FsbCh0aGlzLGUsdCxuLHIpfXZhciBvPW4oMTEpLGk9e2FuaW1hdGlvbk5hbWU6bnVs
bCxlbGFwc2VkVGltZTpudWxsLHBzZXVkb0VsZW1lbnQ6bnVsbH07by5hdWdtZW50Q2xhc3Mocixp
KSxlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUs
dCxuLHIpe3JldHVybiBvLmNhbGwodGhpcyxlLHQsbixyKX12YXIgbz1uKDExKSxpPXtjbGlwYm9h
cmREYXRhOmZ1bmN0aW9uKGUpe3JldHVybiJjbGlwYm9hcmREYXRhImluIGU/ZS5jbGlwYm9hcmRE
YXRhOndpbmRvdy5jbGlwYm9hcmREYXRhfX07by5hdWdtZW50Q2xhc3MocixpKSxlLmV4cG9ydHM9
cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe3JldHVy
biBvLmNhbGwodGhpcyxlLHQsbixyKX12YXIgbz1uKDIxKSxpPXtyZWxhdGVkVGFyZ2V0Om51bGx9
O28uYXVnbWVudENsYXNzKHIsaSksZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0
cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyKXtyZXR1cm4gby5jYWxsKHRoaXMsZSx0LG4scil9dmFy
IG89bigyMSksaT1uKDQ3KSxhPW4oMTgzKSx1PW4oMzYpLHM9e2tleTphLGxvY2F0aW9uOm51bGws
Y3RybEtleTpudWxsLHNoaWZ0S2V5Om51bGwsYWx0S2V5Om51bGwsbWV0YUtleTpudWxsLHJlcGVh
dDpudWxsLGxvY2FsZTpudWxsLGdldE1vZGlmaWVyU3RhdGU6dSxjaGFyQ29kZTpmdW5jdGlvbihl
KXtyZXR1cm4ia2V5cHJlc3MiPT09ZS50eXBlP2koZSk6MH0sa2V5Q29kZTpmdW5jdGlvbihlKXty
ZXR1cm4ia2V5ZG93biI9PT1lLnR5cGV8fCJrZXl1cCI9PT1lLnR5cGU/ZS5rZXlDb2RlOjB9LHdo
aWNoOmZ1bmN0aW9uKGUpe3JldHVybiJrZXlwcmVzcyI9PT1lLnR5cGU/aShlKToia2V5ZG93biI9
PT1lLnR5cGV8fCJrZXl1cCI9PT1lLnR5cGU/ZS5rZXlDb2RlOjB9fTtvLmF1Z21lbnRDbGFzcyhy
LHMpLGUuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIo
ZSl7aWYoZS5rZXkpe3ZhciB0PWlbZS5rZXldfHxlLmtleTtpZigiVW5pZGVudGlmaWVkIiE9PXQp
cmV0dXJuIHR9aWYoImtleXByZXNzIj09PWUudHlwZSl7dmFyIG49byhlKTtyZXR1cm4gMTM9PT1u
PyJFbnRlciI6U3RyaW5nLmZyb21DaGFyQ29kZShuKX1yZXR1cm4ia2V5ZG93biI9PT1lLnR5cGV8
fCJrZXl1cCI9PT1lLnR5cGU/YVtlLmtleUNvZGVdfHwiVW5pZGVudGlmaWVkIjoiIn12YXIgbz1u
KDQ3KSxpPXtFc2M6IkVzY2FwZSIsU3BhY2ViYXI6IiAiLExlZnQ6IkFycm93TGVmdCIsVXA6IkFy
cm93VXAiLFJpZ2h0OiJBcnJvd1JpZ2h0IixEb3duOiJBcnJvd0Rvd24iLERlbDoiRGVsZXRlIixX
aW46Ik9TIixNZW51OiJDb250ZXh0TWVudSIsQXBwczoiQ29udGV4dE1lbnUiLFNjcm9sbDoiU2Ny
b2xsTG9jayIsTW96UHJpbnRhYmxlS2V5OiJVbmlkZW50aWZpZWQifSxhPXs4OiJCYWNrc3BhY2Ui
LDk6IlRhYiIsMTI6IkNsZWFyIiwxMzoiRW50ZXIiLDE2OiJTaGlmdCIsMTc6IkNvbnRyb2wiLDE4
OiJBbHQiLDE5OiJQYXVzZSIsMjA6IkNhcHNMb2NrIiwyNzoiRXNjYXBlIiwzMjoiICIsMzM6IlBh
Z2VVcCIsMzQ6IlBhZ2VEb3duIiwzNToiRW5kIiwzNjoiSG9tZSIsMzc6IkFycm93TGVmdCIsMzg6
IkFycm93VXAiLDM5OiJBcnJvd1JpZ2h0Iiw0MDoiQXJyb3dEb3duIiw0NToiSW5zZXJ0Iiw0Njoi
RGVsZXRlIiwxMTI6IkYxIiwxMTM6IkYyIiwxMTQ6IkYzIiwxMTU6IkY0IiwxMTY6IkY1IiwxMTc6
IkY2IiwxMTg6IkY3IiwxMTk6IkY4IiwxMjA6IkY5IiwxMjE6IkYxMCIsMTIyOiJGMTEiLDEyMzoi
RjEyIiwxNDQ6Ik51bUxvY2siLDE0NToiU2Nyb2xsTG9jayIsMjI0OiJNZXRhIn07ZS5leHBvcnRz
PXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyKXtyZXR1
cm4gby5jYWxsKHRoaXMsZSx0LG4scil9dmFyIG89bigyNSksaT17ZGF0YVRyYW5zZmVyOm51bGx9
O28uYXVnbWVudENsYXNzKHIsaSksZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0
cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyKXtyZXR1cm4gby5jYWxsKHRoaXMsZSx0LG4scil9dmFy
IG89bigyMSksaT1uKDM2KSxhPXt0b3VjaGVzOm51bGwsdGFyZ2V0VG91Y2hlczpudWxsLGNoYW5n
ZWRUb3VjaGVzOm51bGwsYWx0S2V5Om51bGwsbWV0YUtleTpudWxsLGN0cmxLZXk6bnVsbCxzaGlm
dEtleTpudWxsLGdldE1vZGlmaWVyU3RhdGU6aX07by5hdWdtZW50Q2xhc3MocixhKSxlLmV4cG9y
dHM9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe3Jl
dHVybiBvLmNhbGwodGhpcyxlLHQsbixyKX12YXIgbz1uKDExKSxpPXtwcm9wZXJ0eU5hbWU6bnVs
bCxlbGFwc2VkVGltZTpudWxsLHBzZXVkb0VsZW1lbnQ6bnVsbH07by5hdWdtZW50Q2xhc3Mocixp
KSxlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUs
dCxuLHIpe3JldHVybiBvLmNhbGwodGhpcyxlLHQsbixyKX12YXIgbz1uKDI1KSxpPXtkZWx0YVg6
ZnVuY3Rpb24oZSl7cmV0dXJuImRlbHRhWCJpbiBlP2UuZGVsdGFYOiJ3aGVlbERlbHRhWCJpbiBl
Py1lLndoZWVsRGVsdGFYOjB9LGRlbHRhWTpmdW5jdGlvbihlKXtyZXR1cm4iZGVsdGFZImluIGU/
ZS5kZWx0YVk6IndoZWVsRGVsdGFZImluIGU/LWUud2hlZWxEZWx0YVk6IndoZWVsRGVsdGEiaW4g
ZT8tZS53aGVlbERlbHRhOjB9LGRlbHRhWjpudWxsLGRlbHRhTW9kZTpudWxsfTtvLmF1Z21lbnRD
bGFzcyhyLGkpLGUuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0
aW9uIHIoZSx0KXt2YXIgbj17X3RvcExldmVsV3JhcHBlcjplLF9pZENvdW50ZXI6MSxfb3duZXJE
b2N1bWVudDp0P3Qubm9kZVR5cGU9PT1vP3Q6dC5vd25lckRvY3VtZW50Om51bGwsX25vZGU6dCxf
dGFnOnQ/dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOm51bGwsX25hbWVzcGFjZVVSSTp0P3QubmFt
ZXNwYWNlVVJJOm51bGx9O3JldHVybiBufXZhciBvPShuKDQ2KSw5KTtlLmV4cG9ydHM9cn0sZnVu
Y3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj17dXNlQ3JlYXRlRWxlbWVudDohMCx1c2VG
aWJlcjohMX07ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9
bigxOTEpLG89L1wvPz4vLGk9L148XCFcLVwtLyxhPXtDSEVDS1NVTV9BVFRSX05BTUU6ImRhdGEt
cmVhY3QtY2hlY2tzdW0iLGFkZENoZWNrc3VtVG9NYXJrdXA6ZnVuY3Rpb24oZSl7dmFyIHQ9cihl
KTtyZXR1cm4gaS50ZXN0KGUpP2U6ZS5yZXBsYWNlKG8sIiAiK2EuQ0hFQ0tTVU1fQVRUUl9OQU1F
Kyc9IicrdCsnIiQmJyl9LGNhblJldXNlTWFya3VwOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5nZXRB
dHRyaWJ1dGUoYS5DSEVDS1NVTV9BVFRSX05BTUUpO3JldHVybiBuPW4mJnBhcnNlSW50KG4sMTAp
LHIoZSk9PT1ufX07ZS5leHBvcnRzPWF9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVu
Y3Rpb24gcihlKXtmb3IodmFyIHQ9MSxuPTAscj0wLGk9ZS5sZW5ndGgsYT0tNCZpO3I8YTspe2Zv
cih2YXIgdT1NYXRoLm1pbihyKzQwOTYsYSk7cjx1O3IrPTQpbis9KHQrPWUuY2hhckNvZGVBdChy
KSkrKHQrPWUuY2hhckNvZGVBdChyKzEpKSsodCs9ZS5jaGFyQ29kZUF0KHIrMikpKyh0Kz1lLmNo
YXJDb2RlQXQociszKSk7dCU9byxuJT1vfWZvcig7cjxpO3IrKyluKz10Kz1lLmNoYXJDb2RlQXQo
cik7cmV0dXJuIHQlPW8sbiU9byx0fG48PDE2fXZhciBvPTY1NTIxO2UuZXhwb3J0cz1yfSxmdW5j
dGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz0iMTUuNi4xIn0sZnVuY3Rpb24oZSx0
LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKG51bGw9PWUpcmV0dXJuIG51bGw7aWYo
MT09PWUubm9kZVR5cGUpcmV0dXJuIGU7dmFyIHQ9YS5nZXQoZSk7aWYodClyZXR1cm4gdD11KHQp
LHQ/aS5nZXROb2RlRnJvbUluc3RhbmNlKHQpOm51bGw7ImZ1bmN0aW9uIj09PXR5cGVvZiBlLnJl
bmRlcj9vKCI0NCIpOm8oIjQ1IixPYmplY3Qua2V5cyhlKSl9dmFyIG89bigyKSxpPShuKDEwKSxu
KDQpKSxhPW4oMjIpLHU9big4Myk7bigwKSxuKDEpO2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQs
bil7InVzZSBzdHJpY3QiO3ZhciByPW4oODIpO2UuZXhwb3J0cz1yLnJlbmRlclN1YnRyZWVJbnRv
Q29udGFpbmVyfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0
dXJuIG51bGw9PWU/dm9pZCAwPT09ZT9zOnU6YyYmYyBpbiBPYmplY3QoZSk/T2JqZWN0KGkuYSko
ZSk6T2JqZWN0KGEuYSkoZSl9dmFyIG89big4NSksaT1uKDE5OCksYT1uKDE5OSksdT0iW29iamVj
dCBOdWxsXSIscz0iW29iamVjdCBVbmRlZmluZWRdIixjPW8uYT9vLmEudG9TdHJpbmdUYWc6dm9p
ZCAwO3QuYT1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTk3KSxvPSJv
YmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsaT1y
LmF8fG98fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCk7dC5hPWl9LGZ1bmN0aW9uKGUsdCxuKXsi
dXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe3ZhciBuPSJvYmplY3QiPT10eXBlb2YgZSYmZSYmZS5P
YmplY3Q9PT1PYmplY3QmJmU7dC5hPW59KS5jYWxsKHQsbigzMCkpfSxmdW5jdGlvbihlLHQsbil7
InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9YS5jYWxsKGUscyksbj1lW3NdO3RyeXtl
W3NdPXZvaWQgMDt2YXIgcj0hMH1jYXRjaChlKXt9dmFyIG89dS5jYWxsKGUpO3JldHVybiByJiYo
dD9lW3NdPW46ZGVsZXRlIGVbc10pLG99dmFyIG89big4NSksaT1PYmplY3QucHJvdG90eXBlLGE9
aS5oYXNPd25Qcm9wZXJ0eSx1PWkudG9TdHJpbmcscz1vLmE/by5hLnRvU3RyaW5nVGFnOnZvaWQg
MDt0LmE9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVy
biBpLmNhbGwoZSl9dmFyIG89T2JqZWN0LnByb3RvdHlwZSxpPW8udG9TdHJpbmc7dC5hPXJ9LGZ1
bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigyMDEpLG89T2JqZWN0KHIuYSkoT2Jq
ZWN0LmdldFByb3RvdHlwZU9mLE9iamVjdCk7dC5hPW99LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0
cmljdCI7ZnVuY3Rpb24gcihlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gZSh0KG4pKX19
dC5hPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4g
bnVsbCE9ZSYmIm9iamVjdCI9PXR5cGVvZiBlfXQuYT1yfSxmdW5jdGlvbihlLHQsbil7ZS5leHBv
cnRzPW4oMjA0KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSxyKXtP
YmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG8saT1u
KDIwNiksYT1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19
KGkpO289InVuZGVmaW5lZCIhPT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT09dHlwZW9m
IHdpbmRvdz93aW5kb3c6InVuZGVmaW5lZCIhPT10eXBlb2YgZT9lOnI7dmFyIHU9KDAsYS5kZWZh
dWx0KShvKTt0LmRlZmF1bHQ9dX0pLmNhbGwodCxuKDMwKSxuKDIwNSkoZSkpfSxmdW5jdGlvbihl
LHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZS53ZWJwYWNrUG9seWZpbGx8fChlLmRl
cHJlY2F0ZT1mdW5jdGlvbigpe30sZS5wYXRocz1bXSxlLmNoaWxkcmVufHwoZS5jaGlsZHJlbj1b
XSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImxvYWRlZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1
bmN0aW9uKCl7cmV0dXJuIGUubH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiaWQiLHtlbnVt
ZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLml9fSksZS53ZWJwYWNrUG9seWZpbGw9
MSksZX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdCxu
PWUuU3ltYm9sO3JldHVybiJmdW5jdGlvbiI9PT10eXBlb2Ygbj9uLm9ic2VydmFibGU/dD1uLm9i
c2VydmFibGU6KHQ9bigib2JzZXJ2YWJsZSIpLG4ub2JzZXJ2YWJsZT10KTp0PSJAQG9ic2VydmFi
bGUiLHR9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQu
ZGVmYXVsdD1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt2
YXIgbj10JiZ0LnR5cGU7cmV0dXJuIkdpdmVuIGFjdGlvbiAiKyhuJiYnIicrbi50b1N0cmluZygp
KyciJ3x8ImFuIGFjdGlvbiIpKycsIHJlZHVjZXIgIicrZSsnIiByZXR1cm5lZCB1bmRlZmluZWQu
IFRvIGlnbm9yZSBhbiBhY3Rpb24sIHlvdSBtdXN0IGV4cGxpY2l0bHkgcmV0dXJuIHRoZSBwcmV2
aW91cyBzdGF0ZS4gSWYgeW91IHdhbnQgdGhpcyByZWR1Y2VyIHRvIGhvbGQgbm8gdmFsdWUsIHlv
dSBjYW4gcmV0dXJuIG51bGwgaW5zdGVhZCBvZiB1bmRlZmluZWQuJ31mdW5jdGlvbiBvKGUpe09i
amVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49ZVt0XTtpZigidW5kZWZpbmVk
Ij09PXR5cGVvZiBuKHZvaWQgMCx7dHlwZTphLmEuSU5JVH0pKXRocm93IG5ldyBFcnJvcignUmVk
dWNlciAiJyt0KyJcIiByZXR1cm5lZCB1bmRlZmluZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBJ
ZiB0aGUgc3RhdGUgcGFzc2VkIHRvIHRoZSByZWR1Y2VyIGlzIHVuZGVmaW5lZCwgeW91IG11c3Qg
ZXhwbGljaXRseSByZXR1cm4gdGhlIGluaXRpYWwgc3RhdGUuIFRoZSBpbml0aWFsIHN0YXRlIG1h
eSBub3QgYmUgdW5kZWZpbmVkLiBJZiB5b3UgZG9uJ3Qgd2FudCB0byBzZXQgYSB2YWx1ZSBmb3Ig
dGhpcyByZWR1Y2VyLCB5b3UgY2FuIHVzZSBudWxsIGluc3RlYWQgb2YgdW5kZWZpbmVkLiIpO2lm
KCJ1bmRlZmluZWQiPT09dHlwZW9mIG4odm9pZCAwLHt0eXBlOiJAQHJlZHV4L1BST0JFX1VOS05P
V05fQUNUSU9OXyIrTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDcpLnNwbGl0
KCIiKS5qb2luKCIuIil9KSl0aHJvdyBuZXcgRXJyb3IoJ1JlZHVjZXIgIicrdCsiXCIgcmV0dXJu
ZWQgdW5kZWZpbmVkIHdoZW4gcHJvYmVkIHdpdGggYSByYW5kb20gdHlwZS4gRG9uJ3QgdHJ5IHRv
IGhhbmRsZSAiK2EuYS5JTklUKycgb3Igb3RoZXIgYWN0aW9ucyBpbiAicmVkdXgvKiIgbmFtZXNw
YWNlLiBUaGV5IGFyZSBjb25zaWRlcmVkIHByaXZhdGUuIEluc3RlYWQsIHlvdSBtdXN0IHJldHVy
biB0aGUgY3VycmVudCBzdGF0ZSBmb3IgYW55IHVua25vd24gYWN0aW9ucywgdW5sZXNzIGl0IGlz
IHVuZGVmaW5lZCwgaW4gd2hpY2ggY2FzZSB5b3UgbXVzdCByZXR1cm4gdGhlIGluaXRpYWwgc3Rh
dGUsIHJlZ2FyZGxlc3Mgb2YgdGhlIGFjdGlvbiB0eXBlLiBUaGUgaW5pdGlhbCBzdGF0ZSBtYXkg
bm90IGJlIHVuZGVmaW5lZCwgYnV0IGNhbiBiZSBudWxsLicpfSl9ZnVuY3Rpb24gaShlKXtmb3Io
dmFyIHQ9T2JqZWN0LmtleXMoZSksbj17fSxpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBhPXRbaV07
ImZ1bmN0aW9uIj09PXR5cGVvZiBlW2FdJiYoblthXT1lW2FdKX12YXIgdT1PYmplY3Qua2V5cyhu
KSxzPXZvaWQgMDt0cnl7byhuKX1jYXRjaChlKXtzPWV9cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9
YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9
LHQ9YXJndW1lbnRzWzFdO2lmKHMpdGhyb3cgcztmb3IodmFyIG89ITEsaT17fSxhPTA7YTx1Lmxl
bmd0aDthKyspe3ZhciBjPXVbYV0sbD1uW2NdLHA9ZVtjXSxmPWwocCx0KTtpZigidW5kZWZpbmVk
Ij09PXR5cGVvZiBmKXt2YXIgZD1yKGMsdCk7dGhyb3cgbmV3IEVycm9yKGQpfWlbY109ZixvPW98
fGYhPT1wfXJldHVybiBvP2k6ZX19dC5hPWk7dmFyIGE9big4NCk7big0OCksbig4Nil9LGZ1bmN0
aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3JldHVybiBmdW5jdGlvbigp
e3JldHVybiB0KGUuYXBwbHkodm9pZCAwLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBvKGUsdCl7aWYo
ImZ1bmN0aW9uIj09PXR5cGVvZiBlKXJldHVybiByKGUsdCk7aWYoIm9iamVjdCIhPT10eXBlb2Yg
ZXx8bnVsbD09PWUpdGhyb3cgbmV3IEVycm9yKCJiaW5kQWN0aW9uQ3JlYXRvcnMgZXhwZWN0ZWQg
YW4gb2JqZWN0IG9yIGEgZnVuY3Rpb24sIGluc3RlYWQgcmVjZWl2ZWQgIisobnVsbD09PWU/Im51
bGwiOnR5cGVvZiBlKSsnLiBEaWQgeW91IHdyaXRlICJpbXBvcnQgQWN0aW9uQ3JlYXRvcnMgZnJv
bSIgaW5zdGVhZCBvZiAiaW1wb3J0ICogYXMgQWN0aW9uQ3JlYXRvcnMgZnJvbSI/Jyk7Zm9yKHZh
ciBuPU9iamVjdC5rZXlzKGUpLG89e30saT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgYT1uW2ldLHU9
ZVthXTsiZnVuY3Rpb24iPT09dHlwZW9mIHUmJihvW2FdPXIodSx0KSl9cmV0dXJuIG99dC5hPW99
LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7big4NyksT2JqZWN0LmFzc2lnbn0sZnVuY3Rp
b24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7aWYoIShlIGluc3RhbmNlb2Yg
dCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9u
Iil9ZnVuY3Rpb24gbyhlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBo
YXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0
dXJuIXR8fCJvYmplY3QiIT09dHlwZW9mIHQmJiJmdW5jdGlvbiIhPT10eXBlb2YgdD9lOnR9ZnVu
Y3Rpb24gaShlLHQpe2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3
IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVu
Y3Rpb24sIG5vdCAiK3R5cGVvZiB0KTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJv
dG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNv
bmZpZ3VyYWJsZTohMH19KSx0JiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90
b3R5cGVPZihlLHQpOmUuX19wcm90b19fPXQpfXZhciBhPW4oOSksdT0obi5uKGEpLG4oODkpKSxz
PW4ubih1KSxjPW4oOTApO24oNDkpO3QuYT1mdW5jdGlvbigpe3ZhciBlLHQ9YXJndW1lbnRzLmxl
bmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiJzdG9yZSIsbj1hcmd1
bWVudHNbMV0sdT1ufHx0KyJTdWJzY3JpcHRpb24iLGw9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihp
LGEpe3IodGhpcyxuKTt2YXIgdT1vKHRoaXMsZS5jYWxsKHRoaXMsaSxhKSk7cmV0dXJuIHVbdF09
aS5zdG9yZSx1fXJldHVybiBpKG4sZSksbi5wcm90b3R5cGUuZ2V0Q2hpbGRDb250ZXh0PWZ1bmN0
aW9uKCl7dmFyIGU7cmV0dXJuIGU9e30sZVt0XT10aGlzW3RdLGVbdV09bnVsbCxlfSxuLnByb3Rv
dHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gYS5DaGlsZHJlbi5vbmx5KHRoaXMucHJvcHMu
Y2hpbGRyZW4pfSxufShhLkNvbXBvbmVudCk7cmV0dXJuIGwucHJvcFR5cGVzPXtzdG9yZTpjLmEu
aXNSZXF1aXJlZCxjaGlsZHJlbjpzLmEuZWxlbWVudC5pc1JlcXVpcmVkfSxsLmNoaWxkQ29udGV4
dFR5cGVzPShlPXt9LGVbdF09Yy5hLmlzUmVxdWlyZWQsZVt1XT1jLmIsZSksbH0oKX0sZnVuY3Rp
b24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDYpLG89bigwKSxpPW4oNTcpO2UuZXhwb3J0
cz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4scixhLHUpe3UhPT1pJiZvKCExLCJDYWxsaW5n
IFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBw
cm9wLXR5cGVzYCBwYWNrYWdlLiBVc2UgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKCkgdG8gY2Fs
bCB0aGVtLiBSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzIil9
ZnVuY3Rpb24gdCgpe3JldHVybiBlfWUuaXNSZXF1aXJlZD1lO3ZhciBuPXthcnJheTplLGJvb2w6
ZSxmdW5jOmUsbnVtYmVyOmUsb2JqZWN0OmUsc3RyaW5nOmUsc3ltYm9sOmUsYW55OmUsYXJyYXlP
Zjp0LGVsZW1lbnQ6ZSxpbnN0YW5jZU9mOnQsbm9kZTplLG9iamVjdE9mOnQsb25lT2Y6dCxvbmVP
ZlR5cGU6dCxzaGFwZTp0fTtyZXR1cm4gbi5jaGVja1Byb3BUeXBlcz1yLG4uUHJvcFR5cGVzPW4s
bn19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9e2NoaWxkQ29udGV4dFR5cGVz
OiEwLGNvbnRleHRUeXBlczohMCxkZWZhdWx0UHJvcHM6ITAsZGlzcGxheU5hbWU6ITAsZ2V0RGVm
YXVsdFByb3BzOiEwLG1peGluczohMCxwcm9wVHlwZXM6ITAsdHlwZTohMH0sbz17bmFtZTohMCxs
ZW5ndGg6ITAscHJvdG90eXBlOiEwLGNhbGxlcjohMCxjYWxsZWU6ITAsYXJndW1lbnRzOiEwLGFy
aXR5OiEwfSxpPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5h
bWVzLHU9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxzPU9iamVjdC5nZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IsYz1PYmplY3QuZ2V0UHJvdG90eXBlT2YsbD1jJiZjKE9iamVjdCk7ZS5leHBv
cnRzPWZ1bmN0aW9uIGUodCxuLHApe2lmKCJzdHJpbmciIT09dHlwZW9mIG4pe2lmKGwpe3ZhciBm
PWMobik7ZiYmZiE9PWwmJmUodCxmLHApfXZhciBkPWEobik7dSYmKGQ9ZC5jb25jYXQodShuKSkp
O2Zvcih2YXIgaD0wO2g8ZC5sZW5ndGg7KytoKXt2YXIgbT1kW2hdO2lmKCFyW21dJiYhb1ttXSYm
KCFwfHwhcFttXSkpe3ZhciB2PXMobixtKTt0cnl7aSh0LG0sdil9Y2F0Y2goZSl7fX19cmV0dXJu
IHR9cmV0dXJuIHR9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWZ1bmN0aW9u
KGUsdCxuLHIsbyxpLGEsdSl7aWYoIWUpe3ZhciBzO2lmKHZvaWQgMD09PXQpcz1uZXcgRXJyb3Io
Ik1pbmlmaWVkIGV4Y2VwdGlvbiBvY2N1cnJlZDsgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVu
dmlyb25tZW50IGZvciB0aGUgZnVsbCBlcnJvciBtZXNzYWdlIGFuZCBhZGRpdGlvbmFsIGhlbHBm
dWwgd2FybmluZ3MuIik7ZWxzZXt2YXIgYz1bbixyLG8saSxhLHVdLGw9MDtzPW5ldyBFcnJvcih0
LnJlcGxhY2UoLyVzL2csZnVuY3Rpb24oKXtyZXR1cm4gY1tsKytdfSkpLHMubmFtZT0iSW52YXJp
YW50IFZpb2xhdGlvbiJ9dGhyb3cgcy5mcmFtZXNUb1BvcD0xLHN9fTtlLmV4cG9ydHM9cn0sZnVu
Y3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7aWYoIShlIGluc3RhbmNl
b2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0
aW9uIil9ZnVuY3Rpb24gbygpe3ZhciBlPVtdLHQ9W107cmV0dXJue2NsZWFyOmZ1bmN0aW9uKCl7
dD1pLGU9aX0sbm90aWZ5OmZ1bmN0aW9uKCl7Zm9yKHZhciBuPWU9dCxyPTA7cjxuLmxlbmd0aDty
KyspbltyXSgpfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdH0sc3Vic2NyaWJlOmZ1bmN0aW9uKG4p
e3ZhciByPSEwO3JldHVybiB0PT09ZSYmKHQ9ZS5zbGljZSgpKSx0LnB1c2gobiksZnVuY3Rpb24o
KXtyJiZlIT09aSYmKHI9ITEsdD09PWUmJih0PWUuc2xpY2UoKSksdC5zcGxpY2UodC5pbmRleE9m
KG4pLDEpKX19fX1uLmQodCwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pO3ZhciBpPW51bGwsYT17
bm90aWZ5OmZ1bmN0aW9uKCl7fX0sdT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxuLG8pe3IodGhp
cyxlKSx0aGlzLnN0b3JlPXQsdGhpcy5wYXJlbnRTdWI9bix0aGlzLm9uU3RhdGVDaGFuZ2U9byx0
aGlzLnVuc3Vic2NyaWJlPW51bGwsdGhpcy5saXN0ZW5lcnM9YX1yZXR1cm4gZS5wcm90b3R5cGUu
YWRkTmVzdGVkU3ViPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRyeVN1YnNjcmliZSgpLHRoaXMu
bGlzdGVuZXJzLnN1YnNjcmliZShlKX0sZS5wcm90b3R5cGUubm90aWZ5TmVzdGVkU3Vicz1mdW5j
dGlvbigpe3RoaXMubGlzdGVuZXJzLm5vdGlmeSgpfSxlLnByb3RvdHlwZS5pc1N1YnNjcmliZWQ9
ZnVuY3Rpb24oKXtyZXR1cm4gQm9vbGVhbih0aGlzLnVuc3Vic2NyaWJlKX0sZS5wcm90b3R5cGUu
dHJ5U3Vic2NyaWJlPWZ1bmN0aW9uKCl7dGhpcy51bnN1YnNjcmliZXx8KHRoaXMudW5zdWJzY3Jp
YmU9dGhpcy5wYXJlbnRTdWI/dGhpcy5wYXJlbnRTdWIuYWRkTmVzdGVkU3ViKHRoaXMub25TdGF0
ZUNoYW5nZSk6dGhpcy5zdG9yZS5zdWJzY3JpYmUodGhpcy5vblN0YXRlQ2hhbmdlKSx0aGlzLmxp
c3RlbmVycz1vKCkpfSxlLnByb3RvdHlwZS50cnlVbnN1YnNjcmliZT1mdW5jdGlvbigpe3RoaXMu
dW5zdWJzY3JpYmUmJih0aGlzLnVuc3Vic2NyaWJlKCksdGhpcy51bnN1YnNjcmliZT1udWxsLHRo
aXMubGlzdGVuZXJzLmNsZWFyKCksdGhpcy5saXN0ZW5lcnM9YSl9LGV9KCl9LGZ1bmN0aW9uKGUs
dCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBl
KXQuaW5kZXhPZihyKT49MHx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUs
cikmJihuW3JdPWVbcl0pO3JldHVybiBufWZ1bmN0aW9uIG8oZSx0LG4pe2Zvcih2YXIgcj10Lmxl
bmd0aC0xO3I+PTA7ci0tKXt2YXIgbz10W3JdKGUpO2lmKG8pcmV0dXJuIG99cmV0dXJuIGZ1bmN0
aW9uKHQscil7dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHZhbHVlIG9mIHR5cGUgIit0eXBlb2Yg
ZSsiIGZvciAiK24rIiBhcmd1bWVudCB3aGVuIGNvbm5lY3RpbmcgY29tcG9uZW50ICIrci53cmFw
cGVkQ29tcG9uZW50TmFtZSsiLiIpfX1mdW5jdGlvbiBpKGUsdCl7cmV0dXJuIGU9PT10fXZhciBh
PW4oOTEpLHU9bigyMTYpLHM9bigyMTcpLGM9bigyMTgpLGw9bigyMTkpLHA9bigyMjApLGY9T2Jq
ZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3Qr
Kyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFz
T3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX07dC5hPWZ1bmN0aW9u
KCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1l
bnRzWzBdOnt9LHQ9ZS5jb25uZWN0SE9DLG49dm9pZCAwPT09dD9hLmE6dCxkPWUubWFwU3RhdGVU
b1Byb3BzRmFjdG9yaWVzLGg9dm9pZCAwPT09ZD9jLmE6ZCxtPWUubWFwRGlzcGF0Y2hUb1Byb3Bz
RmFjdG9yaWVzLHY9dm9pZCAwPT09bT9zLmE6bSx5PWUubWVyZ2VQcm9wc0ZhY3RvcmllcyxnPXZv
aWQgMD09PXk/bC5hOnksYj1lLnNlbGVjdG9yRmFjdG9yeSxfPXZvaWQgMD09PWI/cC5hOmI7cmV0
dXJuIGZ1bmN0aW9uKGUsdCxhKXt2YXIgcz1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFy
Z3VtZW50c1szXT9hcmd1bWVudHNbM106e30sYz1zLnB1cmUsbD12b2lkIDA9PT1jfHxjLHA9cy5h
cmVTdGF0ZXNFcXVhbCxkPXZvaWQgMD09PXA/aTpwLG09cy5hcmVPd25Qcm9wc0VxdWFsLHk9dm9p
ZCAwPT09bT91LmE6bSxiPXMuYXJlU3RhdGVQcm9wc0VxdWFsLEM9dm9pZCAwPT09Yj91LmE6Yix3
PXMuYXJlTWVyZ2VkUHJvcHNFcXVhbCxFPXZvaWQgMD09PXc/dS5hOncseD1yKHMsWyJwdXJlIiwi
YXJlU3RhdGVzRXF1YWwiLCJhcmVPd25Qcm9wc0VxdWFsIiwiYXJlU3RhdGVQcm9wc0VxdWFsIiwi
YXJlTWVyZ2VkUHJvcHNFcXVhbCJdKSxUPW8oZSxoLCJtYXBTdGF0ZVRvUHJvcHMiKSxQPW8odCx2
LCJtYXBEaXNwYXRjaFRvUHJvcHMiKSxPPW8oYSxnLCJtZXJnZVByb3BzIik7cmV0dXJuIG4oXyxm
KHttZXRob2ROYW1lOiJjb25uZWN0IixnZXREaXNwbGF5TmFtZTpmdW5jdGlvbihlKXtyZXR1cm4i
Q29ubmVjdCgiK2UrIikifSxzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXM6Qm9vbGVhbihlKSxpbml0
TWFwU3RhdGVUb1Byb3BzOlQsaW5pdE1hcERpc3BhdGNoVG9Qcm9wczpQLGluaXRNZXJnZVByb3Bz
Ok8scHVyZTpsLGFyZVN0YXRlc0VxdWFsOmQsYXJlT3duUHJvcHNFcXVhbDp5LGFyZVN0YXRlUHJv
cHNFcXVhbDpDLGFyZU1lcmdlZFByb3BzRXF1YWw6RX0seCkpfX0oKX0sZnVuY3Rpb24oZSx0LG4p
eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIGU9PT10PzAhPT1lfHwwIT09dHx8
MS9lPT09MS90OmUhPT1lJiZ0IT09dH1mdW5jdGlvbiBvKGUsdCl7aWYocihlLHQpKXJldHVybiEw
O2lmKCJvYmplY3QiIT09dHlwZW9mIGV8fG51bGw9PT1lfHwib2JqZWN0IiE9PXR5cGVvZiB0fHxu
dWxsPT09dClyZXR1cm4hMTt2YXIgbj1PYmplY3Qua2V5cyhlKSxvPU9iamVjdC5rZXlzKHQpO2lm
KG4ubGVuZ3RoIT09by5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBhPTA7YTxuLmxlbmd0aDthKysp
aWYoIWkuY2FsbCh0LG5bYV0pfHwhcihlW25bYV1dLHRbblthXV0pKXJldHVybiExO3JldHVybiEw
fXQuYT1vO3ZhciBpPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHl9LGZ1bmN0aW9uKGUs
dCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4iZnVuY3Rpb24iPT09dHlwZW9m
IGU/T2JqZWN0KHUuYikoZSwibWFwRGlzcGF0Y2hUb1Byb3BzIik6dm9pZCAwfWZ1bmN0aW9uIG8o
ZSl7cmV0dXJuIGU/dm9pZCAwOk9iamVjdCh1LmEpKGZ1bmN0aW9uKGUpe3JldHVybntkaXNwYXRj
aDplfX0pfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIGUmJiJvYmplY3QiPT09dHlwZW9mIGU/T2JqZWN0
KHUuYSkoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdChhLmEpKGUsdCl9KTp2b2lkIDB9dmFyIGE9
bigyOSksdT1uKDkyKTt0LmE9W3IsbyxpXX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijtm
dW5jdGlvbiByKGUpe3JldHVybiJmdW5jdGlvbiI9PT10eXBlb2YgZT9PYmplY3QoaS5iKShlLCJt
YXBTdGF0ZVRvUHJvcHMiKTp2b2lkIDB9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZT92b2lkIDA6T2Jq
ZWN0KGkuYSkoZnVuY3Rpb24oKXtyZXR1cm57fX0pfXZhciBpPW4oOTIpO3QuYT1bcixvXX0sZnVu
Y3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXtyZXR1cm4gdSh7fSxu
LGUsdCl9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXt2YXIgcj0obi5kaXNwbGF5
TmFtZSxuLnB1cmUpLG89bi5hcmVNZXJnZWRQcm9wc0VxdWFsLGk9ITEsYT12b2lkIDA7cmV0dXJu
IGZ1bmN0aW9uKHQsbix1KXt2YXIgcz1lKHQsbix1KTtyZXR1cm4gaT9yJiZvKHMsYSl8fChhPXMp
OihpPSEwLGE9cyksYX19fWZ1bmN0aW9uIGkoZSl7cmV0dXJuImZ1bmN0aW9uIj09PXR5cGVvZiBl
P28oZSk6dm9pZCAwfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIGU/dm9pZCAwOmZ1bmN0aW9uKCl7cmV0
dXJuIHJ9fXZhciB1PShuKDkzKSxPYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9
MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGlu
IG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0p
fXJldHVybiBlfSk7dC5hPVtpLGFdfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0
aW9uIHIoZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSl0LmluZGV4T2Yocik+PTB8fE9iamVj
dC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiYobltyXT1lW3JdKTtyZXR1cm4g
bn1mdW5jdGlvbiBvKGUsdCxuLHIpe3JldHVybiBmdW5jdGlvbihvLGkpe3JldHVybiBuKGUobyxp
KSx0KHIsaSksaSl9fWZ1bmN0aW9uIGkoZSx0LG4scixvKXtmdW5jdGlvbiBpKG8saSl7cmV0dXJu
IGg9byxtPWksdj1lKGgsbSkseT10KHIsbSksZz1uKHYseSxtKSxkPSEwLGd9ZnVuY3Rpb24gYSgp
e3JldHVybiB2PWUoaCxtKSx0LmRlcGVuZHNPbk93blByb3BzJiYoeT10KHIsbSkpLGc9bih2LHks
bSl9ZnVuY3Rpb24gdSgpe3JldHVybiBlLmRlcGVuZHNPbk93blByb3BzJiYodj1lKGgsbSkpLHQu
ZGVwZW5kc09uT3duUHJvcHMmJih5PXQocixtKSksZz1uKHYseSxtKX1mdW5jdGlvbiBzKCl7dmFy
IHQ9ZShoLG0pLHI9IWYodCx2KTtyZXR1cm4gdj10LHImJihnPW4odix5LG0pKSxnfWZ1bmN0aW9u
IGMoZSx0KXt2YXIgbj0hcCh0LG0pLHI9IWwoZSxoKTtyZXR1cm4gaD1lLG09dCxuJiZyP2EoKTpu
P3UoKTpyP3MoKTpnfXZhciBsPW8uYXJlU3RhdGVzRXF1YWwscD1vLmFyZU93blByb3BzRXF1YWws
Zj1vLmFyZVN0YXRlUHJvcHNFcXVhbCxkPSExLGg9dm9pZCAwLG09dm9pZCAwLHY9dm9pZCAwLHk9
dm9pZCAwLGc9dm9pZCAwO3JldHVybiBmdW5jdGlvbihlLHQpe3JldHVybiBkP2MoZSx0KTppKGUs
dCl9fWZ1bmN0aW9uIGEoZSx0KXt2YXIgbj10LmluaXRNYXBTdGF0ZVRvUHJvcHMsYT10LmluaXRN
YXBEaXNwYXRjaFRvUHJvcHMsdT10LmluaXRNZXJnZVByb3BzLHM9cih0LFsiaW5pdE1hcFN0YXRl
VG9Qcm9wcyIsImluaXRNYXBEaXNwYXRjaFRvUHJvcHMiLCJpbml0TWVyZ2VQcm9wcyJdKSxjPW4o
ZSxzKSxsPWEoZSxzKSxwPXUoZSxzKTtyZXR1cm4ocy5wdXJlP2k6bykoYyxsLHAsZSxzKX10LmE9
YTtuKDIyMSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7big0OSl9LGZ1bmN0aW9uKGUs
dCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big5KSxvPW4ubihyKSxpPW4oMjkpLGE9big4OCksdT1u
KDIyMykscz1uKDIyNCksYz1uKDIyNyksbD1mdW5jdGlvbihlKXt2YXIgdD1lLnRvZG9zLG49ZS5h
Y3Rpb25zO3JldHVybiBvLmEuY3JlYXRlRWxlbWVudCgiZGl2IixudWxsLG8uYS5jcmVhdGVFbGVt
ZW50KHUuYSx7YWRkVG9kbzpuLmFkZFRvZG99KSxvLmEuY3JlYXRlRWxlbWVudChzLmEse3RvZG9z
OnQsYWN0aW9uczpufSkpfTtsLnByb3BUeXBlcz17dG9kb3M6ci5Qcm9wVHlwZXMuYXJyYXkuaXNS
ZXF1aXJlZCxhY3Rpb25zOnIuUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkfTt2YXIgcD1mdW5j
dGlvbihlKXtyZXR1cm57dG9kb3M6ZS50b2Rvc319LGY9ZnVuY3Rpb24oZSl7cmV0dXJue2FjdGlv
bnM6T2JqZWN0KGkuYSkoYyxlKX19O3QuYT1PYmplY3QoYS5iKShwLGYpKGwpfSxmdW5jdGlvbihl
LHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0
aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1m
dW5jdGlvbiBvKGUsdCl7aWYoIWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24n
dCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4h
dHx8Im9iamVjdCIhPT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9PXR5cGVvZiB0P2U6dH1mdW5jdGlv
biBpKGUsdCl7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlw
ZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlv
biwgbm90ICIrdHlwZW9mIHQpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5
cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmln
dXJhYmxlOiEwfX0pLHQmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlw
ZU9mKGUsdCk6ZS5fX3Byb3RvX189dCl9dmFyIGE9big5KSx1PW4ubihhKSxzPW4oOTQpLGM9ZnVu
Y3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBy
PXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZh
bHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxy
KX19cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gbiYmZSh0LnByb3RvdHlwZSxuKSxyJiZl
KHQsciksdH19KCksbD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixpLGE7cih0aGlz
LHQpO2Zvcih2YXIgdT1hcmd1bWVudHMubGVuZ3RoLHM9QXJyYXkodSksYz0wO2M8dTtjKyspc1tj
XT1hcmd1bWVudHNbY107cmV0dXJuIG49aT1vKHRoaXMsKGU9dC5fX3Byb3RvX198fE9iamVjdC5n
ZXRQcm90b3R5cGVPZih0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQocykpKSxpLmhhbmRs
ZVNhdmU9ZnVuY3Rpb24oZSl7MCE9PWUubGVuZ3RoJiZpLnByb3BzLmFkZFRvZG8oZSl9LGE9bixv
KGksYSl9cmV0dXJuIGkodCxlKSxjKHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXty
ZXR1cm4gdS5hLmNyZWF0ZUVsZW1lbnQoImhlYWRlciIse2NsYXNzTmFtZToiaGVhZGVyIn0sdS5h
LmNyZWF0ZUVsZW1lbnQoImgxIixudWxsLCJ0b2RvcyIpLHUuYS5jcmVhdGVFbGVtZW50KHMuYSx7
bmV3VG9kbzohMCxvblNhdmU6dGhpcy5oYW5kbGVTYXZlLHBsYWNlaG9sZGVyOiJXaGF0IG5lZWRz
IHRvIGJlIGRvbmU/In0pKX19XSksdH0oYS5Db21wb25lbnQpO2wucHJvcFR5cGVzPXthZGRUb2Rv
OmEuUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZH0sdC5hPWx9LGZ1bmN0aW9uKGUsdCxuKXsidXNl
IHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBU
eXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIG8o
ZSx0KXtpZighZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5p
dGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiF0fHwib2JqZWN0
IiE9PXR5cGVvZiB0JiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZTp0fWZ1bmN0aW9uIGkoZSx0KXtp
ZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1
cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0
eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3Ry
dWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9
fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KTpl
Ll9fcHJvdG9fXz10KX1mdW5jdGlvbiBhKGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZp
bmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3Jp
dGFibGU6ITB9KTplW3RdPW4sZX12YXIgdSxzPW4oOSksYz1uLm4ocyksbD1uKDIyNSkscD1uKDIy
NiksZj1uKDk1KSxkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgbj0wO248dC5s
ZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29u
ZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVBy
b3BlcnR5KGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbih0LG4scil7cmV0dXJuIG4mJmUodC5w
cm90b3R5cGUsbiksciYmZSh0LHIpLHR9fSgpLGg9KHU9e30sYSh1LGYuYixmdW5jdGlvbigpe3Jl
dHVybiEwfSksYSh1LGYuYSxmdW5jdGlvbihlKXtyZXR1cm4hZS5jb21wbGV0ZWR9KSxhKHUsZi5j
LGZ1bmN0aW9uKGUpe3JldHVybiBlLmNvbXBsZXRlZH0pLHUpLG09ZnVuY3Rpb24oZSl7ZnVuY3Rp
b24gdCgpe3ZhciBlLG4saSxhO3IodGhpcyx0KTtmb3IodmFyIHU9YXJndW1lbnRzLmxlbmd0aCxz
PUFycmF5KHUpLGM9MDtjPHU7YysrKXNbY109YXJndW1lbnRzW2NdO3JldHVybiBuPWk9byh0aGlz
LChlPXQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCkpLmNhbGwuYXBwbHkoZSxb
dGhpc10uY29uY2F0KHMpKSksaS5zdGF0ZT17ZmlsdGVyOmYuYn0saS5oYW5kbGVDbGVhckNvbXBs
ZXRlZD1mdW5jdGlvbigpe2kucHJvcHMuYWN0aW9ucy5jbGVhckNvbXBsZXRlZCgpfSxpLmhhbmRs
ZVNob3c9ZnVuY3Rpb24oZSl7aS5zZXRTdGF0ZSh7ZmlsdGVyOmV9KX0sYT1uLG8oaSxhKX1yZXR1
cm4gaSh0LGUpLGQodCxbe2tleToicmVuZGVyVG9nZ2xlQWxsIix2YWx1ZTpmdW5jdGlvbihlKXt2
YXIgdD10aGlzLnByb3BzLG49dC50b2RvcyxyPXQuYWN0aW9ucztpZihuLmxlbmd0aD4wKXJldHVy
biBjLmEuY3JlYXRlRWxlbWVudCgiaW5wdXQiLHtjbGFzc05hbWU6InRvZ2dsZS1hbGwiLHR5cGU6
ImNoZWNrYm94IixjaGVja2VkOmU9PT1uLmxlbmd0aCxvbkNoYW5nZTpyLmNvbXBsZXRlQWxsfSl9
fSx7a2V5OiJyZW5kZXJGb290ZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHMu
dG9kb3Msbj10aGlzLnN0YXRlLmZpbHRlcixyPXQubGVuZ3RoLWU7aWYodC5sZW5ndGgpcmV0dXJu
IGMuYS5jcmVhdGVFbGVtZW50KHAuYSx7Y29tcGxldGVkQ291bnQ6ZSxhY3RpdmVDb3VudDpyLGZp
bHRlcjpuLG9uQ2xlYXJDb21wbGV0ZWQ6dGhpcy5oYW5kbGVDbGVhckNvbXBsZXRlZC5iaW5kKHRo
aXMpLG9uU2hvdzp0aGlzLmhhbmRsZVNob3cuYmluZCh0aGlzKX0pfX0se2tleToicmVuZGVyIix2
YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnRvZG9zLG49ZS5hY3Rpb25zLHI9
dGhpcy5zdGF0ZS5maWx0ZXIsbz10LmZpbHRlcihoW3JdKSxpPXQucmVkdWNlKGZ1bmN0aW9uKGUs
dCl7cmV0dXJuIHQuY29tcGxldGVkP2UrMTplfSwwKTtyZXR1cm4gYy5hLmNyZWF0ZUVsZW1lbnQo
InNlY3Rpb24iLHtjbGFzc05hbWU6Im1haW4ifSx0aGlzLnJlbmRlclRvZ2dsZUFsbChpKSxjLmEu
Y3JlYXRlRWxlbWVudCgidWwiLHtjbGFzc05hbWU6InRvZG8tbGlzdCJ9LG8ubWFwKGZ1bmN0aW9u
KGUpe3JldHVybiBjLmEuY3JlYXRlRWxlbWVudChsLmEsT2JqZWN0LmFzc2lnbih7a2V5OmUuaWQs
dG9kbzplfSxuKSl9KSksdGhpcy5yZW5kZXJGb290ZXIoaSkpfX1dKSx0fShzLkNvbXBvbmVudCk7
bS5wcm9wVHlwZXM9e3RvZG9zOnMuUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsYWN0aW9uczpz
LlByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZH0sdC5hPW19LGZ1bmN0aW9uKGUsdCxuKXsidXNl
IHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBU
eXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIG8o
ZSx0KXtpZighZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5p
dGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiF0fHwib2JqZWN0
IiE9PXR5cGVvZiB0JiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZTp0fWZ1bmN0aW9uIGkoZSx0KXtp
ZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1
cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0
eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3Ry
dWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9
fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KTpl
Ll9fcHJvdG9fXz10KX12YXIgYT1uKDkpLHU9bi5uKGEpLHM9big1MCksYz1uLm4ocyksbD1uKDk0
KSxwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisr
KXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxl
PSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUs
ci5rZXkscil9fXJldHVybiBmdW5jdGlvbih0LG4scil7cmV0dXJuIG4mJmUodC5wcm90b3R5cGUs
biksciYmZSh0LHIpLHR9fSgpLGY9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4saSxh
O3IodGhpcyx0KTtmb3IodmFyIHU9YXJndW1lbnRzLmxlbmd0aCxzPUFycmF5KHUpLGM9MDtjPHU7
YysrKXNbY109YXJndW1lbnRzW2NdO3JldHVybiBuPWk9byh0aGlzLChlPXQuX19wcm90b19ffHxP
YmplY3QuZ2V0UHJvdG90eXBlT2YodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KHMpKSks
aS5zdGF0ZT17ZWRpdGluZzohMX0saS5oYW5kbGVEb3VibGVDbGljaz1mdW5jdGlvbigpe2kuc2V0
U3RhdGUoe2VkaXRpbmc6ITB9KX0saS5oYW5kbGVTYXZlPWZ1bmN0aW9uKGUsdCl7MD09PXQubGVu
Z3RoP2kucHJvcHMuZGVsZXRlVG9kbyhlKTppLnByb3BzLmVkaXRUb2RvKGUsdCksaS5zZXRTdGF0
ZSh7ZWRpdGluZzohMX0pfSxhPW4sbyhpLGEpfXJldHVybiBpKHQsZSkscCh0LFt7a2V5OiJyZW5k
ZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMsbj10LnRvZG8scj10
LmNvbXBsZXRlVG9kbyxvPXQuZGVsZXRlVG9kbyxpPXZvaWQgMDtyZXR1cm4gaT10aGlzLnN0YXRl
LmVkaXRpbmc/dS5hLmNyZWF0ZUVsZW1lbnQobC5hLHt0ZXh0Om4udGV4dCxlZGl0aW5nOnRoaXMu
c3RhdGUuZWRpdGluZyxvblNhdmU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuaGFuZGxlU2F2ZShuLmlk
LHQpfX0pOnUuYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InZpZXcifSx1LmEuY3Jl
YXRlRWxlbWVudCgiaW5wdXQiLHtjbGFzc05hbWU6InRvZ2dsZSIsdHlwZToiY2hlY2tib3giLGNo
ZWNrZWQ6bi5jb21wbGV0ZWQsb25DaGFuZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gcihuLmlkKX19KSx1
LmEuY3JlYXRlRWxlbWVudCgibGFiZWwiLHtvbkRvdWJsZUNsaWNrOnRoaXMuaGFuZGxlRG91Ymxl
Q2xpY2t9LG4udGV4dCksdS5hLmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIse2NsYXNzTmFtZToiZGVz
dHJveSIsb25DbGljazpmdW5jdGlvbigpe3JldHVybiBvKG4uaWQpfX0pKSx1LmEuY3JlYXRlRWxl
bWVudCgibGkiLHtjbGFzc05hbWU6YygpKHtjb21wbGV0ZWQ6bi5jb21wbGV0ZWQsZWRpdGluZzp0
aGlzLnN0YXRlLmVkaXRpbmd9KX0saSl9fV0pLHR9KGEuQ29tcG9uZW50KTtmLnByb3BUeXBlcz17
dG9kbzphLlByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxlZGl0VG9kbzphLlByb3BUeXBlcy5m
dW5jLmlzUmVxdWlyZWQsZGVsZXRlVG9kbzphLlByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsY29t
cGxldGVUb2RvOmEuUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZH0sdC5hPWZ9LGZ1bmN0aW9uKGUs
dCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRo
cm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1
bmN0aW9uIG8oZSx0KXtpZighZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0
IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiF0
fHwib2JqZWN0IiE9PXR5cGVvZiB0JiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZTp0fWZ1bmN0aW9u
IGkoZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBl
RXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9u
LCBub3QgIit0eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlw
ZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1
cmFibGU6ITB9fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBl
T2YoZSx0KTplLl9fcHJvdG9fXz10KX1mdW5jdGlvbiBhKGUsdCxuKXtyZXR1cm4gdCBpbiBlP09i
amVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFi
bGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX12YXIgdSxzPW4oOSksYz1uLm4ocyksbD1uKDUw
KSxwPW4ubihsKSxmPW4oOTUpLGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciBu
PTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8
ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXtyZXR1cm4g
biYmZSh0LnByb3RvdHlwZSxuKSxyJiZlKHQsciksdH19KCksaD0odT17fSxhKHUsZi5iLCJBbGwi
KSxhKHUsZi5hLCJBY3RpdmUiKSxhKHUsZi5jLCJDb21wbGV0ZWQiKSx1KSxtPWZ1bmN0aW9uKGUp
e2Z1bmN0aW9uIHQoKXtyZXR1cm4gcih0aGlzLHQpLG8odGhpcywodC5fX3Byb3RvX198fE9iamVj
dC5nZXRQcm90b3R5cGVPZih0KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4gaSh0LGUp
LGQodCxbe2tleToicmVuZGVyVG9kb0NvdW50Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMu
cHJvcHMuYWN0aXZlQ291bnQsdD0xPT09ZT8iaXRlbSI6Iml0ZW1zIjtyZXR1cm4gYy5hLmNyZWF0
ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6InRvZG8tY291bnQifSxjLmEuY3JlYXRlRWxlbWVu
dCgic3Ryb25nIixudWxsLGV8fCJObyIpLCIgIix0LCIgbGVmdCIpfX0se2tleToicmVuZGVyRmls
dGVyTGluayIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9aFtlXSxuPXRoaXMucHJvcHMscj1uLmZp
bHRlcixvPW4ub25TaG93O3JldHVybiBjLmEuY3JlYXRlRWxlbWVudCgiYSIse2NsYXNzTmFtZTpw
KCkoe3NlbGVjdGVkOmU9PT1yfSksc3R5bGU6e2N1cnNvcjoicG9pbnRlciJ9LG9uQ2xpY2s6ZnVu
Y3Rpb24oKXtyZXR1cm4gbyhlKX19LHQpfX0se2tleToicmVuZGVyQ2xlYXJCdXR0b24iLHZhbHVl
OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuY29tcGxldGVkQ291bnQsbj1lLm9uQ2xl
YXJDb21wbGV0ZWQ7aWYodD4wKXJldHVybiBjLmEuY3JlYXRlRWxlbWVudCgiYnV0dG9uIix7Y2xh
c3NOYW1lOiJjbGVhci1jb21wbGV0ZWQiLG9uQ2xpY2s6bn0sIkNsZWFyIGNvbXBsZXRlZCIpfX0s
e2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIGMuYS5jcmVh
dGVFbGVtZW50KCJmb290ZXIiLHtjbGFzc05hbWU6ImZvb3RlciJ9LHRoaXMucmVuZGVyVG9kb0Nv
dW50KCksYy5hLmNyZWF0ZUVsZW1lbnQoInVsIix7Y2xhc3NOYW1lOiJmaWx0ZXJzIn0sW2YuYixm
LmEsZi5jXS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGMuYS5jcmVhdGVFbGVtZW50KCJsaSIse2tl
eTp0fSxlLnJlbmRlckZpbHRlckxpbmsodCkpfSkpLHRoaXMucmVuZGVyQ2xlYXJCdXR0b24oKSl9
fV0pLHR9KHMuQ29tcG9uZW50KTttLnByb3BUeXBlcz17Y29tcGxldGVkQ291bnQ6cy5Qcm9wVHlw
ZXMubnVtYmVyLmlzUmVxdWlyZWQsYWN0aXZlQ291bnQ6cy5Qcm9wVHlwZXMubnVtYmVyLmlzUmVx
dWlyZWQsZmlsdGVyOnMuUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLG9uQ2xlYXJDb21wbGV0
ZWQ6cy5Qcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLG9uU2hvdzpzLlByb3BUeXBlcy5mdW5jLmlz
UmVxdWlyZWR9LHQuYT1tfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZp
bmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxuLmQodCwiYWRkVG9kbyIsZnVu
Y3Rpb24oKXtyZXR1cm4gb30pLG4uZCh0LCJkZWxldGVUb2RvIixmdW5jdGlvbigpe3JldHVybiBp
fSksbi5kKHQsImVkaXRUb2RvIixmdW5jdGlvbigpe3JldHVybiBhfSksbi5kKHQsImNvbXBsZXRl
VG9kbyIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pLG4uZCh0LCJjb21wbGV0ZUFsbCIsZnVuY3Rpb24o
KXtyZXR1cm4gc30pLG4uZCh0LCJjbGVhckNvbXBsZXRlZCIsZnVuY3Rpb24oKXtyZXR1cm4gY30p
O3ZhciByPW4oOTYpLG89ZnVuY3Rpb24oZSl7cmV0dXJue3R5cGU6ci5hLHRleHQ6ZX19LGk9ZnVu
Y3Rpb24oZSl7cmV0dXJue3R5cGU6ci5lLGlkOmV9fSxhPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3R5
cGU6ci5mLGlkOmUsdGV4dDp0fX0sdT1mdW5jdGlvbihlKXtyZXR1cm57dHlwZTpyLmQsaWQ6ZX19
LHM9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTpyLmN9fSxjPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6
ci5ifX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigyOSksbz1uKDIyOSks
aT1PYmplY3Qoci5iKSh7dG9kb3M6by5hfSk7dC5hPWl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0
cmljdCI7ZnVuY3Rpb24gcihlKXtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHQ9MCxuPUFy
cmF5KGUubGVuZ3RoKTt0PGUubGVuZ3RoO3QrKyluW3RdPWVbdF07cmV0dXJuIG59cmV0dXJuIEFy
cmF5LmZyb20oZSl9ZnVuY3Rpb24gbygpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAw
IT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTphLHQ9YXJndW1lbnRzWzFdO3N3aXRjaCh0LnR5
cGUpe2Nhc2UgaS5hOnJldHVybltdLmNvbmNhdChyKGUpLFt7aWQ6ZS5yZWR1Y2UoZnVuY3Rpb24o
ZSx0KXtyZXR1cm4gTWF0aC5tYXgodC5pZCxlKX0sLTEpKzEsY29tcGxldGVkOiExLHRleHQ6dC50
ZXh0fV0pO2Nhc2UgaS5lOnJldHVybiBlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5pZCE9
PXQuaWR9KTtjYXNlIGkuZjpyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWQ9PT10
LmlkP09iamVjdC5hc3NpZ24oe30sZSx7dGV4dDp0LnRleHR9KTplfSk7Y2FzZSBpLmQ6cmV0dXJu
IGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlkPT09dC5pZD9PYmplY3QuYXNzaWduKHt9LGUs
e2NvbXBsZXRlZDohZS5jb21wbGV0ZWR9KTplfSk7Y2FzZSBpLmM6dmFyIG49ZS5ldmVyeShmdW5j
dGlvbihlKXtyZXR1cm4gZS5jb21wbGV0ZWR9KTtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7cmV0
dXJuIE9iamVjdC5hc3NpZ24oe30sZSx7Y29tcGxldGVkOiFufSl9KTtjYXNlIGkuYjpyZXR1cm4g
ZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuITE9PT1lLmNvbXBsZXRlZH0pO2RlZmF1bHQ6cmV0
dXJuIGV9fXQuYT1vO3ZhciBpPW4oOTYpLGE9W119LGZ1bmN0aW9uKGUsdCl7fV0pOworLy8jIHNv
dXJjZU1hcHBpbmdVUkw9bWFpbi4xOGI0MDllMS5qcy5tYXAKXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBmaWxlCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVy
Mi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC1yZWR1eC9k
aXN0L3N0YXRpYy9qcy9tYWluLjE4YjQwOWUxLmpzLm1hcCBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5j
aC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL3JlYWN0LXJlZHV4L2Rpc3Qvc3RhdGljL2pzL21haW4uMThiNDA5ZTEuanMubWFwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmRjNmZlMDkzNGQ1MGE1MDUxMGM5YTQ3YjQ2N2ZmY2U1YjAzNjJhZmMKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC1yZWR1eC9kaXN0L3N0YXRp
Yy9qcy9tYWluLjE4YjQwOWUxLmpzLm1hcApAQCAtMCwwICsxIEBACit7InZlcnNpb24iOjMsInNv
dXJjZXMiOlsiLi4vc3RhdGljL2pzL21haW4uMThiNDA5ZTEuanMiLCIuLi93ZWJwYWNrL2Jvb3Rz
dHJhcCBhY2QwYzJkNmM4ZTFkMGIwYzU5MCIsIi4uL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9pbnZh
cmlhbnQuanMiLCIuLi9ub2RlX21vZHVsZXMvZmJqcy9saWIvd2FybmluZy5qcyIsIi4uL25vZGVf
bW9kdWxlcy9yZWFjdC1kb20vbGliL3JlYWN0UHJvZEludmFyaWFudC5qcyIsIi4uL25vZGVfbW9k
dWxlcy9vYmplY3QtYXNzaWduL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9s
aWIvUmVhY3RET01Db21wb25lbnRUcmVlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2ZianMvbGliL0V4
ZWN1dGlvbkVudmlyb25tZW50LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2ZianMvbGliL2VtcHR5RnVu
Y3Rpb24uanMiLCIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdEluc3RydW1lbnRh
dGlvbi5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0VXBkYXRlcy5qcyIs
Ii4uL25vZGVfbW9kdWxlcy9yZWFjdC9yZWFjdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWFjdC9s
aWIvUmVhY3RDdXJyZW50T3duZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9T
eW50aGV0aWNFdmVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1Bvb2xlZENs
YXNzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdC5qcyIsIi4uL25vZGVfbW9k
dWxlcy9yZWFjdC9saWIvUmVhY3RFbGVtZW50LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWRv
bS9saWIvRE9NUHJvcGVydHkuanMiLCIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFj
dFJlY29uY2lsZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9ET01MYXp5VHJl
ZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvcmVhY3RQcm9kSW52YXJpYW50LmpzIiwi
Li4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvRXZlbnRQcm9wYWdhdG9ycy5qcyIsIi4uL25v
ZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL0V2ZW50UGx1Z2luSHViLmpzIiwiLi4vbm9kZV9tb2R1
bGVzL3JlYWN0LWRvbS9saWIvU3ludGhldGljVUlFdmVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9y
ZWFjdC1kb20vbGliL1JlYWN0SW5zdGFuY2VNYXAuanMiLCIuLi9ub2RlX21vZHVsZXMvZmJqcy9s
aWIvZW1wdHlPYmplY3QuanMiLCIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9UcmFuc2Fj
dGlvbi5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1N5bnRoZXRpY01vdXNlRXZl
bnQuanMiLCIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9zZXRJbm5lckhUTUwuanMiLCIu
Li9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9lc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXIu
anMiLCIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdEJyb3dzZXJFdmVudEVtaXR0
ZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2dsb2JhbC5qcyIsIi4uL25v
ZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL0V2ZW50UGx1Z2luUmVnaXN0cnkuanMiLCIuLi9ub2Rl
X21vZHVsZXMvcmVhY3QtZG9tL2xpYi9FdmVudFBsdWdpblV0aWxzLmpzIiwiLi4vbm9kZV9tb2R1
bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RFcnJvclV0aWxzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Jl
YWN0LWRvbS9saWIvZ2V0RXZlbnRUYXJnZXQuanMiLCIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9t
L2xpYi9pc0V2ZW50U3VwcG9ydGVkLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIv
Z2V0RXZlbnRNb2RpZmllclN0YXRlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIv
RE9NQ2hpbGRyZW5PcGVyYXRpb25zLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIv
RE9NTmFtZXNwYWNlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL2NyZWF0ZU1p
Y3Jvc29mdFVuc2FmZUxvY2FsRnVuY3Rpb24uanMiLCIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9t
L2xpYi9MaW5rZWRWYWx1ZVV0aWxzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIv
UmVhY3RDb21wb25lbnRFbnZpcm9ubWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9z
aGFsbG93RXF1YWwuanMiLCIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9zaG91bGRVcGRh
dGVSZWFjdENvbXBvbmVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL0tleUVz
Y2FwZVV0aWxzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RVcGRhdGVR
dWV1ZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL3ZhbGlkYXRlRE9NTmVzdGlu
Zy5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL2dldEV2ZW50Q2hhckNvZGUuanMi
LCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzUGxhaW5PYmplY3QuanMiLCIuLi9ub2RlX21v
ZHVsZXMvcmVhY3QtcmVkdXgvZXMvdXRpbHMvd2FybmluZy5qcyIsIi4uL25vZGVfbW9kdWxlcy9j
bGFzc25hbWVzL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXNjcmlwdHMvbm9kZV9t
b2R1bGVzL3Byb21pc2UvbGliL2NvcmUuanMiLCIuLi9ub2RlX21vZHVsZXMvcmVhY3QvbGliL1Jl
YWN0QmFzZUNsYXNzZXMuanMiLCIuLi9ub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0Tm9vcFVw
ZGF0ZVF1ZXVlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9jYW5EZWZpbmVQcm9wZXJ0
eS5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RFbGVtZW50U3ltYm9sLmpzIiwi
Li4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvZmFjdG9yeS5qcyIsIi4uL25vZGVfbW9kdWxlcy9w
cm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIsIi4uL25vZGVfbW9kdWxlcy9y
ZWFjdC1kb20vbGliL1JlYWN0RE9NQ29tcG9uZW50RmxhZ3MuanMiLCIuLi9ub2RlX21vZHVsZXMv
cmVhY3QtZG9tL2xpYi9hY2N1bXVsYXRlSW50by5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1k
b20vbGliL2ZvckVhY2hBY2N1bXVsYXRlZC5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20v
bGliL2dldFRleHRDb250ZW50QWNjZXNzb3IuanMiLCIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9t
L2xpYi9DYWxsYmFja1F1ZXVlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVh
Y3RGZWF0dXJlRmxhZ3MuanMiLCIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9pbnB1dFZh
bHVlVHJhY2tpbmcuanMiLCIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9pc1RleHRJbnB1
dEVsZW1lbnQuanMiLCIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9WaWV3cG9ydE1ldHJp
Y3MuanMiLCIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9zZXRUZXh0Q29udGVudC5qcyIs
Ii4uL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9mb2N1c05vZGUuanMiLCIuLi9ub2RlX21vZHVsZXMv
cmVhY3QtZG9tL2xpYi9DU1NQcm9wZXJ0eS5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20v
bGliL0RPTVByb3BlcnR5T3BlcmF0aW9ucy5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20v
bGliL1JlYWN0RE9NU2VsZWN0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5q
cyIsIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL2luc3RhbnRpYXRlUmVhY3RDb21wb25l
bnQuanMiLCIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdE5vZGVUeXBlcy5qcyIs
Ii4uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RW1wdHlDb21wb25lbnQuanMiLCIu
Li9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdEhvc3RDb21wb25lbnQuanMiLCIuLi9u
b2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi90cmF2ZXJzZUFsbENoaWxkcmVuLmpzIiwiLi4vbm9k
ZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdENvbXBvbmVudFRyZWVIb29rLmpzIiwiLi4vbm9kZV9t
b2R1bGVzL2ZianMvbGliL0V2ZW50TGlzdGVuZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvcmVhY3Qt
ZG9tL2xpYi9SZWFjdElucHV0U2VsZWN0aW9uLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2ZianMvbGli
L2dldEFjdGl2ZUVsZW1lbnQuanMiLCIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFj
dE1vdW50LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvZ2V0SG9zdENvbXBvbmVu
dEZyb21Db21wb3NpdGUuanMiLCIuLi9ub2RlX21vZHVsZXMvcmVkdXgvZXMvY3JlYXRlU3RvcmUu
anMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19TeW1ib2wuanMiLCIuLi9ub2RlX21vZHVs
ZXMvcmVkdXgvZXMvY29tcG9zZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4
LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL3V0aWxzL1Byb3BUeXBlcy5qcyIs
Ii4uL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9jb21wb25lbnRzL2Nvbm5lY3RBZHZhbmNl
ZC5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9jb25uZWN0L3dyYXBNYXBUb1By
b3BzLmpzIiwiY29tcG9uZW50cy9Ub2RvVGV4dElucHV0LmpzIiwiY29uc3RhbnRzL1RvZG9GaWx0
ZXJzLmpzIiwiY29uc3RhbnRzL0FjdGlvblR5cGVzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlYWN0
LXNjcmlwdHMvY29uZmlnL3BvbHlmaWxscy5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1zY3Jp
cHRzL25vZGVfbW9kdWxlcy9wcm9taXNlL2xpYi9yZWplY3Rpb24tdHJhY2tpbmcuanMiLCIuLi9u
b2RlX21vZHVsZXMvYXNhcC9icm93c2VyLXJhdy5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1z
Y3JpcHRzL25vZGVfbW9kdWxlcy9wcm9taXNlL2xpYi9lczYtZXh0ZW5zaW9ucy5qcyIsIi4uL25v
ZGVfbW9kdWxlcy93aGF0d2ctZmV0Y2gvZmV0Y2guanMiLCJpbmRleC5qcyIsIi4uL25vZGVfbW9k
dWxlcy9yZWFjdC9saWIvbG93UHJpb3JpdHlXYXJuaW5nLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Jl
YWN0L2xpYi9SZWFjdENoaWxkcmVuLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9Qb29s
ZWRDbGFzcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvdHJhdmVyc2VBbGxDaGlsZHJl
bi5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvZ2V0SXRlcmF0b3JGbi5qcyIsIi4uL25v
ZGVfbW9kdWxlcy9yZWFjdC9saWIvS2V5RXNjYXBlVXRpbHMuanMiLCIuLi9ub2RlX21vZHVsZXMv
cmVhY3QvbGliL1JlYWN0RE9NRmFjdG9yaWVzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlYWN0L2xp
Yi9SZWFjdFByb3BUeXBlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlX
aXRoVHlwZUNoZWNrZXJzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvY2hlY2tQcm9w
VHlwZXMuanMiLCIuLi9ub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0VmVyc2lvbi5qcyIsIi4u
L25vZGVfbW9kdWxlcy9yZWFjdC9saWIvY3JlYXRlQ2xhc3MuanMiLCIuLi9ub2RlX21vZHVsZXMv
Y3JlYXRlLXJlYWN0LWNsYXNzL2ZhY3RvcnkuanMiLCIuLi9ub2RlX21vZHVsZXMvcmVhY3QvbGli
L29ubHlDaGlsZC5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vaW5kZXguanMiLCIuLi9u
b2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdERPTS5qcyIsIi4uL25vZGVfbW9kdWxlcy9y
ZWFjdC1kb20vbGliL1JlYWN0RGVmYXVsdEluamVjdGlvbi5qcyIsIi4uL25vZGVfbW9kdWxlcy9y
ZWFjdC1kb20vbGliL0FSSUFET01Qcm9wZXJ0eUNvbmZpZy5qcyIsIi4uL25vZGVfbW9kdWxlcy9y
ZWFjdC1kb20vbGliL0JlZm9yZUlucHV0RXZlbnRQbHVnaW4uanMiLCIuLi9ub2RlX21vZHVsZXMv
cmVhY3QtZG9tL2xpYi9GYWxsYmFja0NvbXBvc2l0aW9uU3RhdGUuanMiLCIuLi9ub2RlX21vZHVs
ZXMvcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50LmpzIiwiLi4vbm9kZV9t
b2R1bGVzL3JlYWN0LWRvbS9saWIvU3ludGhldGljSW5wdXRFdmVudC5qcyIsIi4uL25vZGVfbW9k
dWxlcy9yZWFjdC1kb20vbGliL0NoYW5nZUV2ZW50UGx1Z2luLmpzIiwiLi4vbm9kZV9tb2R1bGVz
L3JlYWN0LWRvbS9saWIvUmVhY3RSZWYuanMiLCIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xp
Yi9SZWFjdE93bmVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvRGVmYXVsdEV2
ZW50UGx1Z2luT3JkZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9FbnRlckxl
YXZlRXZlbnRQbHVnaW4uanMiLCIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9IVE1MRE9N
UHJvcGVydHlDb25maWcuanMiLCIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdENv
bXBvbmVudEJyb3dzZXJFbnZpcm9ubWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20v
bGliL0Rhbmdlci5qcyIsIi4uL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9jcmVhdGVOb2Rlc0Zyb21N
YXJrdXAuanMiLCIuLi9ub2RlX21vZHVsZXMvZmJqcy9saWIvY3JlYXRlQXJyYXlGcm9tTWl4ZWQu
anMiLCIuLi9ub2RlX21vZHVsZXMvZmJqcy9saWIvZ2V0TWFya3VwV3JhcC5qcyIsIi4uL25vZGVf
bW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RE9NSURPcGVyYXRpb25zLmpzIiwiLi4vbm9kZV9t
b2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RET01Db21wb25lbnQuanMiLCIuLi9ub2RlX21vZHVs
ZXMvcmVhY3QtZG9tL2xpYi9BdXRvRm9jdXNVdGlscy5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWFj
dC1kb20vbGliL0NTU1Byb3BlcnR5T3BlcmF0aW9ucy5qcyIsIi4uL25vZGVfbW9kdWxlcy9mYmpz
L2xpYi9jYW1lbGl6ZVN0eWxlTmFtZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9jYW1l
bGl6ZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL2Rhbmdlcm91c1N0eWxlVmFs
dWUuanMiLCIuLi9ub2RlX21vZHVsZXMvZmJqcy9saWIvaHlwaGVuYXRlU3R5bGVOYW1lLmpzIiwi
Li4vbm9kZV9tb2R1bGVzL2ZianMvbGliL2h5cGhlbmF0ZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9m
YmpzL2xpYi9tZW1vaXplU3RyaW5nT25seS5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20v
bGliL3F1b3RlQXR0cmlidXRlVmFsdWVGb3JCcm93c2VyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Jl
YWN0LWRvbS9saWIvUmVhY3RFdmVudEVtaXR0ZXJNaXhpbi5qcyIsIi4uL25vZGVfbW9kdWxlcy9y
ZWFjdC1kb20vbGliL2dldFZlbmRvclByZWZpeGVkRXZlbnROYW1lLmpzIiwiLi4vbm9kZV9tb2R1
bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RET01JbnB1dC5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWFj
dC1kb20vbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlYWN0
LWRvbS9saWIvUmVhY3RET01PcHRpb24uanMiLCIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xp
Yi9SZWFjdERPTVRleHRhcmVhLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVh
Y3RNdWx0aUNoaWxkLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RDaGls
ZFJlY29uY2lsZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdENvbXBv
c2l0ZUNvbXBvbmVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvZ2V0TmV4dERlYnVn
SUQuanMiLCIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdEVsZW1lbnRTeW1ib2wu
anMiLCIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9nZXRJdGVyYXRvckZuLmpzIiwiLi4v
bm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvZmxhdHRlbkNoaWxkcmVuLmpzIiwiLi4vbm9kZV9t
b2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbi5qcyIs
Ii4uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0U2VydmVyVXBkYXRlUXVldWUuanMi
LCIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdERPTUVtcHR5Q29tcG9uZW50Lmpz
IiwiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RET01UcmVlVHJhdmVyc2FsLmpz
IiwiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RET01UZXh0Q29tcG9uZW50Lmpz
IiwiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3REZWZhdWx0QmF0Y2hpbmdTdHJh
dGVneS5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RXZlbnRMaXN0ZW5l
ci5qcyIsIi4uL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9nZXRVbmJvdW5kZWRTY3JvbGxQb3NpdGlv
bi5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0SW5qZWN0aW9uLmpzIiwi
Li4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbi5q
cyIsIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RE9NU2VsZWN0aW9uLmpzIiwi
Li4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldC5q
cyIsIi4uL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9jb250YWluc05vZGUuanMiLCIuLi9ub2RlX21v
ZHVsZXMvZmJqcy9saWIvaXNUZXh0Tm9kZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9p
c05vZGUuanMiLCIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9TVkdET01Qcm9wZXJ0eUNv
bmZpZy5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1NlbGVjdEV2ZW50UGx1Z2lu
LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvU2ltcGxlRXZlbnRQbHVnaW4uanMi
LCIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNBbmltYXRpb25FdmVudC5q
cyIsIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1N5bnRoZXRpY0NsaXBib2FyZEV2ZW50
LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvU3ludGhldGljRm9jdXNFdmVudC5q
cyIsIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1N5bnRoZXRpY0tleWJvYXJkRXZlbnQu
anMiLCIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9nZXRFdmVudEtleS5qcyIsIi4uL25v
ZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1N5bnRoZXRpY0RyYWdFdmVudC5qcyIsIi4uL25vZGVf
bW9kdWxlcy9yZWFjdC1kb20vbGliL1N5bnRoZXRpY1RvdWNoRXZlbnQuanMiLCIuLi9ub2RlX21v
ZHVsZXMvcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNUcmFuc2l0aW9uRXZlbnQuanMiLCIuLi9ub2Rl
X21vZHVsZXMvcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNXaGVlbEV2ZW50LmpzIiwiLi4vbm9kZV9t
b2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RET01Db250YWluZXJJbmZvLmpzIiwiLi4vbm9kZV9t
b2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RET01GZWF0dXJlRmxhZ3MuanMiLCIuLi9ub2RlX21v
ZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdE1hcmt1cENoZWNrc3VtLmpzIiwiLi4vbm9kZV9tb2R1
bGVzL3JlYWN0LWRvbS9saWIvYWRsZXIzMi5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20v
bGliL1JlYWN0VmVyc2lvbi5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL2ZpbmRE
T01Ob2RlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvcmVuZGVyU3VidHJlZUlu
dG9Db250YWluZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlR2V0VGFnLmpz
IiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fcm9vdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9s
b2Rhc2gtZXMvX2ZyZWVHbG9iYWwuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRS
YXdUYWcuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19vYmplY3RUb1N0cmluZy5qcyIs
Ii4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFByb3RvdHlwZS5qcyIsIi4uL25vZGVfbW9k
dWxlcy9sb2Rhc2gtZXMvX292ZXJBcmcuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lz
T2JqZWN0TGlrZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9zeW1ib2wtb2JzZXJ2YWJsZS9pbmRleC5q
cyIsIi4uL25vZGVfbW9kdWxlcy9zeW1ib2wtb2JzZXJ2YWJsZS9saWIvaW5kZXguanMiLCIuLi9u
b2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9z
eW1ib2wtb2JzZXJ2YWJsZS9saWIvcG9ueWZpbGwuanMiLCIuLi9ub2RlX21vZHVsZXMvcmVkdXgv
ZXMvY29tYmluZVJlZHVjZXJzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlZHV4L2VzL2JpbmRBY3Rp
b25DcmVhdG9ycy5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWR1eC9lcy9hcHBseU1pZGRsZXdhcmUu
anMiLCIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvY29tcG9uZW50cy9Qcm92aWRlci5q
cyIsIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcy5q
cyIsIi4uL25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9pbmRleC5qcyIsIi4u
L25vZGVfbW9kdWxlcy9pbnZhcmlhbnQvYnJvd3Nlci5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWFj
dC1yZWR1eC9lcy91dGlscy9TdWJzY3JpcHRpb24uanMiLCIuLi9ub2RlX21vZHVsZXMvcmVhY3Qt
cmVkdXgvZXMvY29ubmVjdC9jb25uZWN0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4
L2VzL3V0aWxzL3NoYWxsb3dFcXVhbC5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9l
cy9jb25uZWN0L21hcERpc3BhdGNoVG9Qcm9wcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1y
ZWR1eC9lcy9jb25uZWN0L21hcFN0YXRlVG9Qcm9wcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWFj
dC1yZWR1eC9lcy9jb25uZWN0L21lcmdlUHJvcHMuanMiLCIuLi9ub2RlX21vZHVsZXMvcmVhY3Qt
cmVkdXgvZXMvY29ubmVjdC9zZWxlY3RvckZhY3RvcnkuanMiLCJjb250YWluZXJzL0FwcC5qcyIs
ImNvbXBvbmVudHMvSGVhZGVyLmpzIiwiY29tcG9uZW50cy9NYWluU2VjdGlvbi5qcyIsImNvbXBv
bmVudHMvVG9kb0l0ZW0uanMiLCJjb21wb25lbnRzL0Zvb3Rlci5qcyIsImFjdGlvbnMvaW5kZXgu
anMiLCJyZWR1Y2Vycy9pbmRleC5qcyIsInJlZHVjZXJzL3RvZG9zLmpzIl0sIm5hbWVzIjpbIm1v
ZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJpbnN0YWxsZWRNb2R1bGVz
IiwiZXhwb3J0cyIsIm1vZHVsZSIsImkiLCJsIiwiY2FsbCIsIm0iLCJjIiwiZCIsIm5hbWUiLCJn
ZXR0ZXIiLCJvIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJjb25maWd1cmFibGUiLCJlbnVt
ZXJhYmxlIiwiZ2V0IiwibiIsIl9fZXNNb2R1bGUiLCJvYmplY3QiLCJwcm9wZXJ0eSIsInByb3Rv
dHlwZSIsImhhc093blByb3BlcnR5IiwicCIsInMiLCJpbnZhcmlhbnQiLCJjb25kaXRpb24iLCJm
b3JtYXQiLCJhIiwiYiIsImUiLCJmIiwidmFsaWRhdGVGb3JtYXQiLCJlcnJvciIsInVuZGVmaW5l
ZCIsIkVycm9yIiwiYXJncyIsImFyZ0luZGV4IiwicmVwbGFjZSIsImZyYW1lc1RvUG9wIiwiZW1w
dHlGdW5jdGlvbiIsIndhcm5pbmciLCJyZWFjdFByb2RJbnZhcmlhbnQiLCJjb2RlIiwiYXJnQ291
bnQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJtZXNzYWdlIiwiYXJnSWR4IiwiZW5jb2RlVVJJQ29t
cG9uZW50IiwidG9PYmplY3QiLCJ2YWwiLCJUeXBlRXJyb3IiLCJnZXRPd25Qcm9wZXJ0eVN5bWJv
bHMiLCJwcm9wSXNFbnVtZXJhYmxlIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJhc3NpZ24iLCJ0
ZXN0MSIsIlN0cmluZyIsImdldE93blByb3BlcnR5TmFtZXMiLCJ0ZXN0MiIsImZyb21DaGFyQ29k
ZSIsIm1hcCIsImpvaW4iLCJ0ZXN0MyIsInNwbGl0IiwiZm9yRWFjaCIsImxldHRlciIsImtleXMi
LCJlcnIiLCJ0YXJnZXQiLCJzb3VyY2UiLCJmcm9tIiwic3ltYm9scyIsInRvIiwia2V5Iiwic2hv
dWxkUHJlY2FjaGVOb2RlIiwibm9kZSIsIm5vZGVJRCIsIm5vZGVUeXBlIiwiZ2V0QXR0cmlidXRl
IiwiQVRUUl9OQU1FIiwibm9kZVZhbHVlIiwiZ2V0UmVuZGVyZWRIb3N0T3JUZXh0RnJvbUNvbXBv
bmVudCIsImNvbXBvbmVudCIsInJlbmRlcmVkIiwiX3JlbmRlcmVkQ29tcG9uZW50IiwicHJlY2Fj
aGVOb2RlIiwiaW5zdCIsImhvc3RJbnN0IiwiX2hvc3ROb2RlIiwiaW50ZXJuYWxJbnN0YW5jZUtl
eSIsInVuY2FjaGVOb2RlIiwicHJlY2FjaGVDaGlsZE5vZGVzIiwiX2ZsYWdzIiwiRmxhZ3MiLCJo
YXNDYWNoZWRDaGlsZE5vZGVzIiwiY2hpbGRyZW4iLCJfcmVuZGVyZWRDaGlsZHJlbiIsImNoaWxk
Tm9kZSIsImZpcnN0Q2hpbGQiLCJvdXRlciIsImNoaWxkSW5zdCIsImNoaWxkSUQiLCJfZG9tSUQi
LCJuZXh0U2libGluZyIsIl9wcm9kSW52YXJpYW50IiwiZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5v
ZGUiLCJwYXJlbnRzIiwicHVzaCIsInBhcmVudE5vZGUiLCJjbG9zZXN0IiwicG9wIiwiZ2V0SW5z
dGFuY2VGcm9tTm9kZSIsImdldE5vZGVGcm9tSW5zdGFuY2UiLCJfaG9zdFBhcmVudCIsIkRPTVBy
b3BlcnR5IiwiUmVhY3RET01Db21wb25lbnRGbGFncyIsIklEX0FUVFJJQlVURV9OQU1FIiwiTWF0
aCIsInJhbmRvbSIsInRvU3RyaW5nIiwic2xpY2UiLCJSZWFjdERPTUNvbXBvbmVudFRyZWUiLCJj
YW5Vc2VET00iLCJ3aW5kb3ciLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJFeGVjdXRpb25F
bnZpcm9ubWVudCIsImNhblVzZVdvcmtlcnMiLCJXb3JrZXIiLCJjYW5Vc2VFdmVudExpc3RlbmVy
cyIsImFkZEV2ZW50TGlzdGVuZXIiLCJhdHRhY2hFdmVudCIsImNhblVzZVZpZXdwb3J0Iiwic2Ny
ZWVuIiwiaXNJbldvcmtlciIsIm1ha2VFbXB0eUZ1bmN0aW9uIiwiYXJnIiwidGhhdFJldHVybnMi
LCJ0aGF0UmV0dXJuc0ZhbHNlIiwidGhhdFJldHVybnNUcnVlIiwidGhhdFJldHVybnNOdWxsIiwi
dGhhdFJldHVybnNUaGlzIiwidGhpcyIsInRoYXRSZXR1cm5zQXJndW1lbnQiLCJkZWJ1Z1Rvb2wi
LCJlbnN1cmVJbmplY3RlZCIsIlJlYWN0VXBkYXRlcyIsIlJlYWN0UmVjb25jaWxlVHJhbnNhY3Rp
b24iLCJiYXRjaGluZ1N0cmF0ZWd5IiwiUmVhY3RVcGRhdGVzRmx1c2hUcmFuc2FjdGlvbiIsInJl
aW5pdGlhbGl6ZVRyYW5zYWN0aW9uIiwiZGlydHlDb21wb25lbnRzTGVuZ3RoIiwiY2FsbGJhY2tR
dWV1ZSIsIkNhbGxiYWNrUXVldWUiLCJnZXRQb29sZWQiLCJyZWNvbmNpbGVUcmFuc2FjdGlvbiIs
ImJhdGNoZWRVcGRhdGVzIiwiY2FsbGJhY2siLCJtb3VudE9yZGVyQ29tcGFyYXRvciIsImMxIiwi
YzIiLCJfbW91bnRPcmRlciIsInJ1bkJhdGNoZWRVcGRhdGVzIiwidHJhbnNhY3Rpb24iLCJsZW4i
LCJkaXJ0eUNvbXBvbmVudHMiLCJzb3J0IiwidXBkYXRlQmF0Y2hOdW1iZXIiLCJjYWxsYmFja3Mi
LCJfcGVuZGluZ0NhbGxiYWNrcyIsIm1hcmtlck5hbWUiLCJSZWFjdEZlYXR1cmVGbGFncyIsImxv
Z1RvcExldmVsUmVuZGVycyIsIm5hbWVkQ29tcG9uZW50IiwiX2N1cnJlbnRFbGVtZW50IiwidHlw
ZSIsImlzUmVhY3RUb3BMZXZlbFdyYXBwZXIiLCJnZXROYW1lIiwiY29uc29sZSIsInRpbWUiLCJS
ZWFjdFJlY29uY2lsZXIiLCJwZXJmb3JtVXBkYXRlSWZOZWNlc3NhcnkiLCJ0aW1lRW5kIiwiaiIs
ImVucXVldWUiLCJnZXRQdWJsaWNJbnN0YW5jZSIsImVucXVldWVVcGRhdGUiLCJpc0JhdGNoaW5n
VXBkYXRlcyIsIl91cGRhdGVCYXRjaE51bWJlciIsImFzYXAiLCJjb250ZXh0IiwiYXNhcENhbGxi
YWNrUXVldWUiLCJhc2FwRW5xdWV1ZWQiLCJfYXNzaWduIiwiUG9vbGVkQ2xhc3MiLCJUcmFuc2Fj
dGlvbiIsIk5FU1RFRF9VUERBVEVTIiwiaW5pdGlhbGl6ZSIsImNsb3NlIiwic3BsaWNlIiwiZmx1
c2hCYXRjaGVkVXBkYXRlcyIsIlVQREFURV9RVUVVRUlORyIsInJlc2V0Iiwibm90aWZ5QWxsIiwi
VFJBTlNBQ1RJT05fV1JBUFBFUlMiLCJnZXRUcmFuc2FjdGlvbldyYXBwZXJzIiwiZGVzdHJ1Y3Rv
ciIsInJlbGVhc2UiLCJwZXJmb3JtIiwibWV0aG9kIiwic2NvcGUiLCJhZGRQb29saW5nVG8iLCJx
dWV1ZSIsIlJlYWN0VXBkYXRlc0luamVjdGlvbiIsImluamVjdFJlY29uY2lsZVRyYW5zYWN0aW9u
IiwiUmVjb25jaWxlVHJhbnNhY3Rpb24iLCJpbmplY3RCYXRjaGluZ1N0cmF0ZWd5IiwiX2JhdGNo
aW5nU3RyYXRlZ3kiLCJpbmplY3Rpb24iLCJSZWFjdEN1cnJlbnRPd25lciIsImN1cnJlbnQiLCJT
eW50aGV0aWNFdmVudCIsImRpc3BhdGNoQ29uZmlnIiwidGFyZ2V0SW5zdCIsIm5hdGl2ZUV2ZW50
IiwibmF0aXZlRXZlbnRUYXJnZXQiLCJfdGFyZ2V0SW5zdCIsIkludGVyZmFjZSIsImNvbnN0cnVj
dG9yIiwicHJvcE5hbWUiLCJub3JtYWxpemUiLCJkZWZhdWx0UHJldmVudGVkIiwicmV0dXJuVmFs
dWUiLCJpc0RlZmF1bHRQcmV2ZW50ZWQiLCJpc1Byb3BhZ2F0aW9uU3RvcHBlZCIsInNob3VsZEJl
UmVsZWFzZWRQcm9wZXJ0aWVzIiwiRXZlbnRJbnRlcmZhY2UiLCJjdXJyZW50VGFyZ2V0IiwiZXZl
bnRQaGFzZSIsImJ1YmJsZXMiLCJjYW5jZWxhYmxlIiwidGltZVN0YW1wIiwiZXZlbnQiLCJEYXRl
Iiwibm93IiwiaXNUcnVzdGVkIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJj
YW5jZWxCdWJibGUiLCJwZXJzaXN0IiwiaXNQZXJzaXN0ZW50IiwiYXVnbWVudENsYXNzIiwiQ2xh
c3MiLCJTdXBlciIsIkUiLCJmb3VyQXJndW1lbnRQb29sZXIiLCJvbmVBcmd1bWVudFBvb2xlciIs
ImNvcHlGaWVsZHNGcm9tIiwiS2xhc3MiLCJpbnN0YW5jZVBvb2wiLCJpbnN0YW5jZSIsInR3b0Fy
Z3VtZW50UG9vbGVyIiwiYTEiLCJhMiIsInRocmVlQXJndW1lbnRQb29sZXIiLCJhMyIsImE0Iiwi
c3RhbmRhcmRSZWxlYXNlciIsInBvb2xTaXplIiwiREVGQVVMVF9QT09MRVIiLCJDb3B5Q29uc3Ry
dWN0b3IiLCJwb29sZXIiLCJOZXdLbGFzcyIsIlJlYWN0QmFzZUNsYXNzZXMiLCJSZWFjdENoaWxk
cmVuIiwiUmVhY3RET01GYWN0b3JpZXMiLCJSZWFjdEVsZW1lbnQiLCJSZWFjdFByb3BUeXBlcyIs
IlJlYWN0VmVyc2lvbiIsImNyZWF0ZVJlYWN0Q2xhc3MiLCJvbmx5Q2hpbGQiLCJjcmVhdGVGYWN0
b3J5IiwiY2xvbmVFbGVtZW50IiwiX19zcHJlYWQiLCJjcmVhdGVNaXhpbiIsIm1peGluIiwiUmVh
Y3QiLCJDaGlsZHJlbiIsImNvdW50IiwidG9BcnJheSIsIm9ubHkiLCJDb21wb25lbnQiLCJQdXJl
Q29tcG9uZW50IiwiaXNWYWxpZEVsZW1lbnQiLCJQcm9wVHlwZXMiLCJjcmVhdGVDbGFzcyIsIkRP
TSIsInZlcnNpb24iLCJoYXNWYWxpZFJlZiIsImNvbmZpZyIsInJlZiIsImhhc1ZhbGlkS2V5Iiwi
UkVBQ1RfRUxFTUVOVF9UWVBFIiwiUkVTRVJWRURfUFJPUFMiLCJfX3NlbGYiLCJfX3NvdXJjZSIs
InNlbGYiLCJvd25lciIsInByb3BzIiwiZWxlbWVudCIsIiQkdHlwZW9mIiwiX293bmVyIiwiY2hp
bGRyZW5MZW5ndGgiLCJjaGlsZEFycmF5IiwiQXJyYXkiLCJkZWZhdWx0UHJvcHMiLCJmYWN0b3J5
IiwiYmluZCIsImNsb25lQW5kUmVwbGFjZUtleSIsIm9sZEVsZW1lbnQiLCJuZXdLZXkiLCJfc2Vs
ZiIsIl9zb3VyY2UiLCJjaGVja01hc2siLCJ2YWx1ZSIsImJpdG1hc2siLCJET01Qcm9wZXJ0eUlu
amVjdGlvbiIsIk1VU1RfVVNFX1BST1BFUlRZIiwiSEFTX0JPT0xFQU5fVkFMVUUiLCJIQVNfTlVN
RVJJQ19WQUxVRSIsIkhBU19QT1NJVElWRV9OVU1FUklDX1ZBTFVFIiwiSEFTX09WRVJMT0FERURf
Qk9PTEVBTl9WQUxVRSIsImluamVjdERPTVByb3BlcnR5Q29uZmlnIiwiZG9tUHJvcGVydHlDb25m
aWciLCJJbmplY3Rpb24iLCJQcm9wZXJ0aWVzIiwiRE9NQXR0cmlidXRlTmFtZXNwYWNlcyIsIkRP
TUF0dHJpYnV0ZU5hbWVzIiwiRE9NUHJvcGVydHlOYW1lcyIsIkRPTU11dGF0aW9uTWV0aG9kcyIs
ImlzQ3VzdG9tQXR0cmlidXRlIiwiX2lzQ3VzdG9tQXR0cmlidXRlRnVuY3Rpb25zIiwicHJvcGVy
dGllcyIsImxvd2VyQ2FzZWQiLCJ0b0xvd2VyQ2FzZSIsInByb3BDb25maWciLCJwcm9wZXJ0eUlu
Zm8iLCJhdHRyaWJ1dGVOYW1lIiwiYXR0cmlidXRlTmFtZXNwYWNlIiwicHJvcGVydHlOYW1lIiwi
bXV0YXRpb25NZXRob2QiLCJtdXN0VXNlUHJvcGVydHkiLCJoYXNCb29sZWFuVmFsdWUiLCJoYXNO
dW1lcmljVmFsdWUiLCJoYXNQb3NpdGl2ZU51bWVyaWNWYWx1ZSIsImhhc092ZXJsb2FkZWRCb29s
ZWFuVmFsdWUiLCJBVFRSSUJVVEVfTkFNRV9TVEFSVF9DSEFSIiwiUk9PVF9BVFRSSUJVVEVfTkFN
RSIsIkFUVFJJQlVURV9OQU1FX0NIQVIiLCJnZXRQb3NzaWJsZVN0YW5kYXJkTmFtZSIsImlzQ3Vz
dG9tQXR0cmlidXRlRm4iLCJhdHRhY2hSZWZzIiwiUmVhY3RSZWYiLCJtb3VudENvbXBvbmVudCIs
ImludGVybmFsSW5zdGFuY2UiLCJob3N0UGFyZW50IiwiaG9zdENvbnRhaW5lckluZm8iLCJwYXJl
bnREZWJ1Z0lEIiwibWFya3VwIiwiZ2V0UmVhY3RNb3VudFJlYWR5IiwiZ2V0SG9zdE5vZGUiLCJ1
bm1vdW50Q29tcG9uZW50Iiwic2FmZWx5IiwiZGV0YWNoUmVmcyIsInJlY2VpdmVDb21wb25lbnQi
LCJuZXh0RWxlbWVudCIsInByZXZFbGVtZW50IiwiX2NvbnRleHQiLCJyZWZzQ2hhbmdlZCIsInNo
b3VsZFVwZGF0ZVJlZnMiLCJpbnNlcnRUcmVlQ2hpbGRyZW4iLCJ0cmVlIiwiZW5hYmxlTGF6eSIs
Imluc2VydFRyZWVCZWZvcmUiLCJodG1sIiwic2V0SW5uZXJIVE1MIiwidGV4dCIsInNldFRleHRD
b250ZW50IiwicmVwbGFjZUNoaWxkV2l0aFRyZWUiLCJvbGROb2RlIiwibmV3VHJlZSIsInJlcGxh
Y2VDaGlsZCIsInF1ZXVlQ2hpbGQiLCJwYXJlbnRUcmVlIiwiY2hpbGRUcmVlIiwiYXBwZW5kQ2hp
bGQiLCJxdWV1ZUhUTUwiLCJxdWV1ZVRleHQiLCJub2RlTmFtZSIsIkRPTUxhenlUcmVlIiwiRE9N
TmFtZXNwYWNlcyIsImNyZWF0ZU1pY3Jvc29mdFVuc2FmZUxvY2FsRnVuY3Rpb24iLCJkb2N1bWVu
dE1vZGUiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJ0ZXN0IiwicmVmZXJlbmNlTm9kZSIsIm5h
bWVzcGFjZVVSSSIsImluc2VydEJlZm9yZSIsImxpc3RlbmVyQXRQaGFzZSIsInByb3BhZ2F0aW9u
UGhhc2UiLCJyZWdpc3RyYXRpb25OYW1lIiwicGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMiLCJnZXRM
aXN0ZW5lciIsImFjY3VtdWxhdGVEaXJlY3Rpb25hbERpc3BhdGNoZXMiLCJwaGFzZSIsImxpc3Rl
bmVyIiwiX2Rpc3BhdGNoTGlzdGVuZXJzIiwiYWNjdW11bGF0ZUludG8iLCJfZGlzcGF0Y2hJbnN0
YW5jZXMiLCJhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzU2luZ2xlIiwiRXZlbnRQbHVnaW5V
dGlscyIsInRyYXZlcnNlVHdvUGhhc2UiLCJhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzU2lu
Z2xlU2tpcFRhcmdldCIsInBhcmVudEluc3QiLCJnZXRQYXJlbnRJbnN0YW5jZSIsImFjY3VtdWxh
dGVEaXNwYXRjaGVzIiwiaWdub3JlZERpcmVjdGlvbiIsImFjY3VtdWxhdGVEaXJlY3REaXNwYXRj
aGVzU2luZ2xlIiwiYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlcyIsImV2ZW50cyIsImZvckVh
Y2hBY2N1bXVsYXRlZCIsImFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXNTa2lwVGFyZ2V0Iiwi
YWNjdW11bGF0ZUVudGVyTGVhdmVEaXNwYXRjaGVzIiwibGVhdmUiLCJlbnRlciIsInRyYXZlcnNl
RW50ZXJMZWF2ZSIsImFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzIiwiRXZlbnRQbHVnaW5IdWIi
LCJFdmVudFByb3BhZ2F0b3JzIiwiaXNJbnRlcmFjdGl2ZSIsInRhZyIsInNob3VsZFByZXZlbnRN
b3VzZUV2ZW50IiwiZGlzYWJsZWQiLCJFdmVudFBsdWdpblJlZ2lzdHJ5IiwiUmVhY3RFcnJvclV0
aWxzIiwibGlzdGVuZXJCYW5rIiwiZXZlbnRRdWV1ZSIsImV4ZWN1dGVEaXNwYXRjaGVzQW5kUmVs
ZWFzZSIsInNpbXVsYXRlZCIsImV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlciIsImV4ZWN1dGVEaXNw
YXRjaGVzQW5kUmVsZWFzZVNpbXVsYXRlZCIsImV4ZWN1dGVEaXNwYXRjaGVzQW5kUmVsZWFzZVRv
cExldmVsIiwiZ2V0RGljdGlvbmFyeUtleSIsIl9yb290Tm9kZUlEIiwiaW5qZWN0RXZlbnRQbHVn
aW5PcmRlciIsImluamVjdEV2ZW50UGx1Z2luc0J5TmFtZSIsInB1dExpc3RlbmVyIiwiUGx1Z2lu
TW9kdWxlIiwicmVnaXN0cmF0aW9uTmFtZU1vZHVsZXMiLCJkaWRQdXRMaXN0ZW5lciIsImJhbmtG
b3JSZWdpc3RyYXRpb25OYW1lIiwiZGVsZXRlTGlzdGVuZXIiLCJ3aWxsRGVsZXRlTGlzdGVuZXIi
LCJkZWxldGVBbGxMaXN0ZW5lcnMiLCJleHRyYWN0RXZlbnRzIiwidG9wTGV2ZWxUeXBlIiwicGx1
Z2lucyIsInBvc3NpYmxlUGx1Z2luIiwiZXh0cmFjdGVkRXZlbnRzIiwiZW5xdWV1ZUV2ZW50cyIs
InByb2Nlc3NFdmVudFF1ZXVlIiwicHJvY2Vzc2luZ0V2ZW50UXVldWUiLCJyZXRocm93Q2F1Z2h0
RXJyb3IiLCJfX3B1cmdlIiwiX19nZXRMaXN0ZW5lckJhbmsiLCJTeW50aGV0aWNVSUV2ZW50Iiwi
ZGlzcGF0Y2hNYXJrZXIiLCJnZXRFdmVudFRhcmdldCIsIlVJRXZlbnRJbnRlcmZhY2UiLCJ2aWV3
IiwiZG9jIiwib3duZXJEb2N1bWVudCIsImRlZmF1bHRWaWV3IiwicGFyZW50V2luZG93IiwiZGV0
YWlsIiwiUmVhY3RJbnN0YW5jZU1hcCIsInJlbW92ZSIsIl9yZWFjdEludGVybmFsSW5zdGFuY2Ui
LCJoYXMiLCJzZXQiLCJlbXB0eU9iamVjdCIsIk9CU0VSVkVEX0VSUk9SIiwiVHJhbnNhY3Rpb25J
bXBsIiwidHJhbnNhY3Rpb25XcmFwcGVycyIsIndyYXBwZXJJbml0RGF0YSIsIl9pc0luVHJhbnNh
Y3Rpb24iLCJpc0luVHJhbnNhY3Rpb24iLCJlcnJvclRocm93biIsInJldCIsImluaXRpYWxpemVB
bGwiLCJjbG9zZUFsbCIsInN0YXJ0SW5kZXgiLCJ3cmFwcGVyIiwiaW5pdERhdGEiLCJTeW50aGV0
aWNNb3VzZUV2ZW50IiwiVmlld3BvcnRNZXRyaWNzIiwiZ2V0RXZlbnRNb2RpZmllclN0YXRlIiwi
TW91c2VFdmVudEludGVyZmFjZSIsInNjcmVlblgiLCJzY3JlZW5ZIiwiY2xpZW50WCIsImNsaWVu
dFkiLCJjdHJsS2V5Iiwic2hpZnRLZXkiLCJhbHRLZXkiLCJtZXRhS2V5IiwiZ2V0TW9kaWZpZXJT
dGF0ZSIsImJ1dHRvbiIsImJ1dHRvbnMiLCJyZWxhdGVkVGFyZ2V0IiwiZnJvbUVsZW1lbnQiLCJz
cmNFbGVtZW50IiwidG9FbGVtZW50IiwicGFnZVgiLCJjdXJyZW50U2Nyb2xsTGVmdCIsInBhZ2VZ
IiwiY3VycmVudFNjcm9sbFRvcCIsInJldXNhYmxlU1ZHQ29udGFpbmVyIiwiV0hJVEVTUEFDRV9U
RVNUIiwiTk9OVklTSUJMRV9URVNUIiwic3ZnIiwiaW5uZXJIVE1MIiwic3ZnTm9kZSIsInRlc3RF
bGVtZW50IiwidGV4dE5vZGUiLCJkYXRhIiwicmVtb3ZlQ2hpbGQiLCJkZWxldGVEYXRhIiwiZXNj
YXBlSHRtbCIsInN0cmluZyIsInN0ciIsIm1hdGNoIiwibWF0Y2hIdG1sUmVnRXhwIiwiZXhlYyIs
ImVzY2FwZSIsImluZGV4IiwibGFzdEluZGV4IiwiY2hhckNvZGVBdCIsInN1YnN0cmluZyIsImVz
Y2FwZVRleHRDb250ZW50Rm9yQnJvd3NlciIsImdldExpc3RlbmluZ0ZvckRvY3VtZW50IiwibW91
bnRBdCIsInRvcExpc3RlbmVyc0lES2V5IiwicmVhY3RUb3BMaXN0ZW5lcnNDb3VudGVyIiwiYWxy
ZWFkeUxpc3RlbmluZ1RvIiwiaGFzRXZlbnRQYWdlWFkiLCJSZWFjdEV2ZW50RW1pdHRlck1peGlu
IiwiZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUiLCJpc0V2ZW50U3VwcG9ydGVkIiwiaXNNb25p
dG9yaW5nU2Nyb2xsVmFsdWUiLCJ0b3BFdmVudE1hcHBpbmciLCJ0b3BBYm9ydCIsInRvcEFuaW1h
dGlvbkVuZCIsInRvcEFuaW1hdGlvbkl0ZXJhdGlvbiIsInRvcEFuaW1hdGlvblN0YXJ0IiwidG9w
Qmx1ciIsInRvcENhblBsYXkiLCJ0b3BDYW5QbGF5VGhyb3VnaCIsInRvcENoYW5nZSIsInRvcENs
aWNrIiwidG9wQ29tcG9zaXRpb25FbmQiLCJ0b3BDb21wb3NpdGlvblN0YXJ0IiwidG9wQ29tcG9z
aXRpb25VcGRhdGUiLCJ0b3BDb250ZXh0TWVudSIsInRvcENvcHkiLCJ0b3BDdXQiLCJ0b3BEb3Vi
bGVDbGljayIsInRvcERyYWciLCJ0b3BEcmFnRW5kIiwidG9wRHJhZ0VudGVyIiwidG9wRHJhZ0V4
aXQiLCJ0b3BEcmFnTGVhdmUiLCJ0b3BEcmFnT3ZlciIsInRvcERyYWdTdGFydCIsInRvcERyb3Ai
LCJ0b3BEdXJhdGlvbkNoYW5nZSIsInRvcEVtcHRpZWQiLCJ0b3BFbmNyeXB0ZWQiLCJ0b3BFbmRl
ZCIsInRvcEVycm9yIiwidG9wRm9jdXMiLCJ0b3BJbnB1dCIsInRvcEtleURvd24iLCJ0b3BLZXlQ
cmVzcyIsInRvcEtleVVwIiwidG9wTG9hZGVkRGF0YSIsInRvcExvYWRlZE1ldGFkYXRhIiwidG9w
TG9hZFN0YXJ0IiwidG9wTW91c2VEb3duIiwidG9wTW91c2VNb3ZlIiwidG9wTW91c2VPdXQiLCJ0
b3BNb3VzZU92ZXIiLCJ0b3BNb3VzZVVwIiwidG9wUGFzdGUiLCJ0b3BQYXVzZSIsInRvcFBsYXki
LCJ0b3BQbGF5aW5nIiwidG9wUHJvZ3Jlc3MiLCJ0b3BSYXRlQ2hhbmdlIiwidG9wU2Nyb2xsIiwi
dG9wU2Vla2VkIiwidG9wU2Vla2luZyIsInRvcFNlbGVjdGlvbkNoYW5nZSIsInRvcFN0YWxsZWQi
LCJ0b3BTdXNwZW5kIiwidG9wVGV4dElucHV0IiwidG9wVGltZVVwZGF0ZSIsInRvcFRvdWNoQ2Fu
Y2VsIiwidG9wVG91Y2hFbmQiLCJ0b3BUb3VjaE1vdmUiLCJ0b3BUb3VjaFN0YXJ0IiwidG9wVHJh
bnNpdGlvbkVuZCIsInRvcFZvbHVtZUNoYW5nZSIsInRvcFdhaXRpbmciLCJ0b3BXaGVlbCIsIlJl
YWN0QnJvd3NlckV2ZW50RW1pdHRlciIsIlJlYWN0RXZlbnRMaXN0ZW5lciIsImluamVjdFJlYWN0
RXZlbnRMaXN0ZW5lciIsInNldEhhbmRsZVRvcExldmVsIiwiaGFuZGxlVG9wTGV2ZWwiLCJzZXRF
bmFibGVkIiwiZW5hYmxlZCIsImlzRW5hYmxlZCIsImxpc3RlblRvIiwiY29udGVudERvY3VtZW50
SGFuZGxlIiwiaXNMaXN0ZW5pbmciLCJkZXBlbmRlbmNpZXMiLCJyZWdpc3RyYXRpb25OYW1lRGVw
ZW5kZW5jaWVzIiwiZGVwZW5kZW5jeSIsInRyYXBCdWJibGVkRXZlbnQiLCJ0cmFwQ2FwdHVyZWRF
dmVudCIsIldJTkRPV19IQU5ETEUiLCJoYW5kbGVyQmFzZU5hbWUiLCJoYW5kbGUiLCJzdXBwb3J0
c0V2ZW50UGFnZVhZIiwiY3JlYXRlRXZlbnQiLCJldiIsImVuc3VyZVNjcm9sbFZhbHVlTW9uaXRv
cmluZyIsInJlZnJlc2giLCJyZWZyZXNoU2Nyb2xsVmFsdWVzIiwibW9uaXRvclNjcm9sbFZhbHVl
IiwiX193ZWJwYWNrX2V4cG9ydHNfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY3Jl
YXRlU3RvcmVfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fY29tYmluZVJlZHVjZXJz
X18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2JpbmRBY3Rpb25DcmVhdG9yc19fIiwi
ZyIsIkZ1bmN0aW9uIiwiZXZhbCIsInJlY29tcHV0ZVBsdWdpbk9yZGVyaW5nIiwiZXZlbnRQbHVn
aW5PcmRlciIsInBsdWdpbk5hbWUiLCJuYW1lc1RvUGx1Z2lucyIsInBsdWdpbk1vZHVsZSIsInBs
dWdpbkluZGV4IiwiaW5kZXhPZiIsInB1Ymxpc2hlZEV2ZW50cyIsImV2ZW50VHlwZXMiLCJldmVu
dE5hbWUiLCJwdWJsaXNoRXZlbnRGb3JQbHVnaW4iLCJldmVudE5hbWVEaXNwYXRjaENvbmZpZ3Mi
LCJwaGFzZU5hbWUiLCJwaGFzZWRSZWdpc3RyYXRpb25OYW1lIiwicHVibGlzaFJlZ2lzdHJhdGlv
bk5hbWUiLCJwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzIiwiaW5qZWN0ZWRFdmVudFBsdWdpbk9y
ZGVyIiwiaW5qZWN0ZWROYW1lc1RvUGx1Z2lucyIsImlzT3JkZXJpbmdEaXJ0eSIsImdldFBsdWdp
bk1vZHVsZUZvckV2ZW50IiwiX3Jlc2V0RXZlbnRQbHVnaW5zIiwiaXNFbmRpc2giLCJpc01vdmVp
c2giLCJpc1N0YXJ0aXNoIiwiZXhlY3V0ZURpc3BhdGNoIiwiaW52b2tlR3VhcmRlZENhbGxiYWNr
V2l0aENhdGNoIiwiaW52b2tlR3VhcmRlZENhbGxiYWNrIiwiZGlzcGF0Y2hMaXN0ZW5lcnMiLCJk
aXNwYXRjaEluc3RhbmNlcyIsImlzQXJyYXkiLCJleGVjdXRlRGlzcGF0Y2hlc0luT3JkZXJTdG9w
QXRUcnVlSW1wbCIsImV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlclN0b3BBdFRydWUiLCJleGVjdXRl
RGlyZWN0RGlzcGF0Y2giLCJkaXNwYXRjaExpc3RlbmVyIiwiZGlzcGF0Y2hJbnN0YW5jZSIsInJl
cyIsImhhc0Rpc3BhdGNoZXMiLCJDb21wb25lbnRUcmVlIiwiVHJlZVRyYXZlcnNhbCIsImluamVj
dENvbXBvbmVudFRyZWUiLCJJbmplY3RlZCIsImluamVjdFRyZWVUcmF2ZXJzYWwiLCJpc0FuY2Vz
dG9yIiwiZ2V0TG93ZXN0Q29tbW9uQW5jZXN0b3IiLCJmbiIsImFyZ0Zyb20iLCJhcmdUbyIsImZ1
bmMiLCJ4IiwiY2F1Z2h0RXJyb3IiLCJjb3JyZXNwb25kaW5nVXNlRWxlbWVudCIsImV2ZW50TmFt
ZVN1ZmZpeCIsImNhcHR1cmUiLCJpc1N1cHBvcnRlZCIsInNldEF0dHJpYnV0ZSIsInVzZUhhc0Zl
YXR1cmUiLCJpbXBsZW1lbnRhdGlvbiIsImhhc0ZlYXR1cmUiLCJtb2RpZmllclN0YXRlR2V0dGVy
Iiwia2V5QXJnIiwic3ludGhldGljRXZlbnQiLCJrZXlQcm9wIiwibW9kaWZpZXJLZXlUb1Byb3Ai
LCJBbHQiLCJDb250cm9sIiwiTWV0YSIsIlNoaWZ0IiwiZ2V0Tm9kZUFmdGVyIiwiaW5zZXJ0TGF6
eVRyZWVDaGlsZEF0IiwibW92ZUNoaWxkIiwibW92ZURlbGltaXRlZFRleHQiLCJpbnNlcnRDaGls
ZEF0IiwiY2xvc2luZ0NvbW1lbnQiLCJyZW1vdmVEZWxpbWl0ZWRUZXh0Iiwib3BlbmluZ0NvbW1l
bnQiLCJuZXh0Tm9kZSIsInN0YXJ0Tm9kZSIsInJlcGxhY2VEZWxpbWl0ZWRUZXh0Iiwic3RyaW5n
VGV4dCIsIm5vZGVBZnRlckNvbW1lbnQiLCJjcmVhdGVUZXh0Tm9kZSIsIkRhbmdlciIsImRhbmdl
cm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwIiwiRE9NQ2hpbGRyZW5PcGVyYXRpb25zIiwicHJv
Y2Vzc1VwZGF0ZXMiLCJ1cGRhdGVzIiwiayIsInVwZGF0ZSIsImNvbnRlbnQiLCJhZnRlck5vZGUi
LCJmcm9tTm9kZSIsIm1hdGhtbCIsIk1TQXBwIiwiZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24iLCJh
cmcwIiwiYXJnMSIsImFyZzIiLCJhcmczIiwiX2Fzc2VydFNpbmdsZUxpbmsiLCJpbnB1dFByb3Bz
IiwiY2hlY2tlZExpbmsiLCJ2YWx1ZUxpbmsiLCJfYXNzZXJ0VmFsdWVMaW5rIiwib25DaGFuZ2Ui
LCJfYXNzZXJ0Q2hlY2tlZExpbmsiLCJjaGVja2VkIiwiZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVu
ZHVtIiwiUmVhY3RQcm9wVHlwZXNTZWNyZXQiLCJwcm9wVHlwZXNGYWN0b3J5IiwiaGFzUmVhZE9u
bHlWYWx1ZSIsImNoZWNrYm94IiwiaW1hZ2UiLCJoaWRkZW4iLCJyYWRpbyIsInN1Ym1pdCIsInBy
b3BUeXBlcyIsImNvbXBvbmVudE5hbWUiLCJyZWFkT25seSIsImxvZ2dlZFR5cGVGYWlsdXJlcyIs
IkxpbmtlZFZhbHVlVXRpbHMiLCJjaGVja1Byb3BUeXBlcyIsInRhZ05hbWUiLCJnZXRWYWx1ZSIs
ImdldENoZWNrZWQiLCJleGVjdXRlT25DaGFuZ2UiLCJyZXF1ZXN0Q2hhbmdlIiwiaW5qZWN0ZWQi
LCJSZWFjdENvbXBvbmVudEVudmlyb25tZW50IiwicmVwbGFjZU5vZGVXaXRoTWFya3VwIiwicHJv
Y2Vzc0NoaWxkcmVuVXBkYXRlcyIsImluamVjdEVudmlyb25tZW50IiwiZW52aXJvbm1lbnQiLCJp
cyIsInkiLCJzaGFsbG93RXF1YWwiLCJvYmpBIiwib2JqQiIsImtleXNBIiwia2V5c0IiLCJzaG91
bGRVcGRhdGVSZWFjdENvbXBvbmVudCIsInByZXZFbXB0eSIsIm5leHRFbXB0eSIsInByZXZUeXBl
IiwibmV4dFR5cGUiLCJlc2NhcGVyTG9va3VwIiwiPSIsIjoiLCJ1bmVzY2FwZSIsInVuZXNjYXBl
UmVnZXgiLCJ1bmVzY2FwZXJMb29rdXAiLCI9MCIsIj0yIiwiS2V5RXNjYXBlVXRpbHMiLCJmb3Jt
YXRVbmV4cGVjdGVkQXJndW1lbnQiLCJkaXNwbGF5TmFtZSIsImdldEludGVybmFsSW5zdGFuY2VS
ZWFkeUZvclVwZGF0ZSIsInB1YmxpY0luc3RhbmNlIiwiY2FsbGVyTmFtZSIsIlJlYWN0VXBkYXRl
UXVldWUiLCJpc01vdW50ZWQiLCJlbnF1ZXVlQ2FsbGJhY2siLCJ2YWxpZGF0ZUNhbGxiYWNrIiwi
ZW5xdWV1ZUNhbGxiYWNrSW50ZXJuYWwiLCJlbnF1ZXVlRm9yY2VVcGRhdGUiLCJfcGVuZGluZ0Zv
cmNlVXBkYXRlIiwiZW5xdWV1ZVJlcGxhY2VTdGF0ZSIsImNvbXBsZXRlU3RhdGUiLCJfcGVuZGlu
Z1N0YXRlUXVldWUiLCJfcGVuZGluZ1JlcGxhY2VTdGF0ZSIsImVucXVldWVTZXRTdGF0ZSIsInBh
cnRpYWxTdGF0ZSIsImVucXVldWVFbGVtZW50SW50ZXJuYWwiLCJuZXh0Q29udGV4dCIsIl9wZW5k
aW5nRWxlbWVudCIsInZhbGlkYXRlRE9NTmVzdGluZyIsImdldEV2ZW50Q2hhckNvZGUiLCJjaGFy
Q29kZSIsImtleUNvZGUiLCJpc1BsYWluT2JqZWN0IiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19pc09iamVjdExpa2VfanNfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFz
ZUdldFRhZ19qc19fIiwib2JqZWN0VGFnIiwicHJvdG8iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX2dldFByb3RvdHlwZV9qc19fIiwiQ3RvciIsImZ1bmNUb1N0cmluZyIsIm9iamVjdEN0
b3JTdHJpbmciLCJmdW5jUHJvdG8iLCJvYmplY3RQcm90byIsIl9fV0VCUEFDS19BTURfREVGSU5F
X0FSUkFZX18iLCJfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXyIsImNsYXNzTmFtZXMiLCJj
bGFzc2VzIiwiYXJnVHlwZSIsImFwcGx5IiwiaGFzT3duIiwibm9vcCIsImdldFRoZW4iLCJvYmoi
LCJ0aGVuIiwiZXgiLCJMQVNUX0VSUk9SIiwiSVNfRVJST1IiLCJ0cnlDYWxsT25lIiwidHJ5Q2Fs
bFR3byIsIlByb21pc2UiLCJfNzUiLCJfODMiLCJfMTgiLCJfMzgiLCJkb1Jlc29sdmUiLCJzYWZl
VGhlbiIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsInJlc29sdmUiLCJyZWplY3QiLCJIYW5k
bGVyIiwiZGVmZXJyZWQiLCJfNDciLCJoYW5kbGVSZXNvbHZlZCIsImNiIiwicHJvbWlzZSIsIm5l
d1ZhbHVlIiwiZmluYWxlIiwiXzcxIiwiZG9uZSIsInJlYXNvbiIsIl80NCIsIlJlYWN0Q29tcG9u
ZW50IiwidXBkYXRlciIsInJlZnMiLCJSZWFjdE5vb3BVcGRhdGVRdWV1ZSIsIlJlYWN0UHVyZUNv
bXBvbmVudCIsIkNvbXBvbmVudER1bW15IiwiaXNSZWFjdENvbXBvbmVudCIsInNldFN0YXRlIiwi
Zm9yY2VVcGRhdGUiLCJpc1B1cmVSZWFjdENvbXBvbmVudCIsImNhbkRlZmluZVByb3BlcnR5Iiwi
U3ltYm9sIiwibmV4dCIsImNvbmNhdCIsImFyciIsImdldFRleHRDb250ZW50QWNjZXNzb3IiLCJj
b250ZW50S2V5IiwiZG9jdW1lbnRFbGVtZW50IiwiX2NsYXNzQ2FsbENoZWNrIiwiQ29uc3RydWN0
b3IiLCJfY2FsbGJhY2tzIiwiX2NvbnRleHRzIiwiX2FyZyIsImNvbnRleHRzIiwiY2hlY2twb2lu
dCIsInJvbGxiYWNrIiwiaXNDaGVja2FibGUiLCJlbGVtIiwiZ2V0VHJhY2tlciIsIl93cmFwcGVy
U3RhdGUiLCJ2YWx1ZVRyYWNrZXIiLCJhdHRhY2hUcmFja2VyIiwidHJhY2tlciIsImRldGFjaFRy
YWNrZXIiLCJnZXRWYWx1ZUZyb21Ob2RlIiwiaW5wdXRWYWx1ZVRyYWNraW5nIiwiX2dldFRyYWNr
ZXJGcm9tTm9kZSIsInRyYWNrIiwidmFsdWVGaWVsZCIsImRlc2NyaXB0b3IiLCJnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IiLCJjdXJyZW50VmFsdWUiLCJzZXRWYWx1ZSIsInN0b3BUcmFja2luZyIs
InVwZGF0ZVZhbHVlSWZDaGFuZ2VkIiwibGFzdFZhbHVlIiwibmV4dFZhbHVlIiwiaXNUZXh0SW5w
dXRFbGVtZW50Iiwic3VwcG9ydGVkSW5wdXRUeXBlcyIsImNvbG9yIiwiZGF0ZSIsImRhdGV0aW1l
IiwiZGF0ZXRpbWUtbG9jYWwiLCJlbWFpbCIsIm1vbnRoIiwibnVtYmVyIiwicGFzc3dvcmQiLCJy
YW5nZSIsInNlYXJjaCIsInRlbCIsInVybCIsIndlZWsiLCJzY3JvbGxQb3NpdGlvbiIsImxhc3RD
aGlsZCIsInRleHRDb250ZW50IiwiZm9jdXNOb2RlIiwiZm9jdXMiLCJwcmVmaXhLZXkiLCJwcmVm
aXgiLCJjaGFyQXQiLCJ0b1VwcGVyQ2FzZSIsImlzVW5pdGxlc3NOdW1iZXIiLCJhbmltYXRpb25J
dGVyYXRpb25Db3VudCIsImJvcmRlckltYWdlT3V0c2V0IiwiYm9yZGVySW1hZ2VTbGljZSIsImJv
cmRlckltYWdlV2lkdGgiLCJib3hGbGV4IiwiYm94RmxleEdyb3VwIiwiYm94T3JkaW5hbEdyb3Vw
IiwiY29sdW1uQ291bnQiLCJmbGV4IiwiZmxleEdyb3ciLCJmbGV4UG9zaXRpdmUiLCJmbGV4U2hy
aW5rIiwiZmxleE5lZ2F0aXZlIiwiZmxleE9yZGVyIiwiZ3JpZFJvdyIsImdyaWRSb3dFbmQiLCJn
cmlkUm93U3BhbiIsImdyaWRSb3dTdGFydCIsImdyaWRDb2x1bW4iLCJncmlkQ29sdW1uRW5kIiwi
Z3JpZENvbHVtblNwYW4iLCJncmlkQ29sdW1uU3RhcnQiLCJmb250V2VpZ2h0IiwibGluZUNsYW1w
IiwibGluZUhlaWdodCIsIm9wYWNpdHkiLCJvcmRlciIsIm9ycGhhbnMiLCJ0YWJTaXplIiwid2lk
b3dzIiwiekluZGV4Iiwiem9vbSIsImZpbGxPcGFjaXR5IiwiZmxvb2RPcGFjaXR5Iiwic3RvcE9w
YWNpdHkiLCJzdHJva2VEYXNoYXJyYXkiLCJzdHJva2VEYXNob2Zmc2V0Iiwic3Ryb2tlTWl0ZXJs
aW1pdCIsInN0cm9rZU9wYWNpdHkiLCJzdHJva2VXaWR0aCIsInByZWZpeGVzIiwicHJvcCIsInNo
b3J0aGFuZFByb3BlcnR5RXhwYW5zaW9ucyIsImJhY2tncm91bmQiLCJiYWNrZ3JvdW5kQXR0YWNo
bWVudCIsImJhY2tncm91bmRDb2xvciIsImJhY2tncm91bmRJbWFnZSIsImJhY2tncm91bmRQb3Np
dGlvblgiLCJiYWNrZ3JvdW5kUG9zaXRpb25ZIiwiYmFja2dyb3VuZFJlcGVhdCIsImJhY2tncm91
bmRQb3NpdGlvbiIsImJvcmRlciIsImJvcmRlcldpZHRoIiwiYm9yZGVyU3R5bGUiLCJib3JkZXJD
b2xvciIsImJvcmRlckJvdHRvbSIsImJvcmRlckJvdHRvbVdpZHRoIiwiYm9yZGVyQm90dG9tU3R5
bGUiLCJib3JkZXJCb3R0b21Db2xvciIsImJvcmRlckxlZnQiLCJib3JkZXJMZWZ0V2lkdGgiLCJi
b3JkZXJMZWZ0U3R5bGUiLCJib3JkZXJMZWZ0Q29sb3IiLCJib3JkZXJSaWdodCIsImJvcmRlclJp
Z2h0V2lkdGgiLCJib3JkZXJSaWdodFN0eWxlIiwiYm9yZGVyUmlnaHRDb2xvciIsImJvcmRlclRv
cCIsImJvcmRlclRvcFdpZHRoIiwiYm9yZGVyVG9wU3R5bGUiLCJib3JkZXJUb3BDb2xvciIsImZv
bnQiLCJmb250U3R5bGUiLCJmb250VmFyaWFudCIsImZvbnRTaXplIiwiZm9udEZhbWlseSIsIm91
dGxpbmUiLCJvdXRsaW5lV2lkdGgiLCJvdXRsaW5lU3R5bGUiLCJvdXRsaW5lQ29sb3IiLCJDU1NQ
cm9wZXJ0eSIsImlzQXR0cmlidXRlTmFtZVNhZmUiLCJ2YWxpZGF0ZWRBdHRyaWJ1dGVOYW1lQ2Fj
aGUiLCJpbGxlZ2FsQXR0cmlidXRlTmFtZUNhY2hlIiwiVkFMSURfQVRUUklCVVRFX05BTUVfUkVH
RVgiLCJzaG91bGRJZ25vcmVWYWx1ZSIsImlzTmFOIiwicXVvdGVBdHRyaWJ1dGVWYWx1ZUZvckJy
b3dzZXIiLCJSZWdFeHAiLCJET01Qcm9wZXJ0eU9wZXJhdGlvbnMiLCJjcmVhdGVNYXJrdXBGb3JJ
RCIsImlkIiwic2V0QXR0cmlidXRlRm9ySUQiLCJjcmVhdGVNYXJrdXBGb3JSb290Iiwic2V0QXR0
cmlidXRlRm9yUm9vdCIsImNyZWF0ZU1hcmt1cEZvclByb3BlcnR5IiwiY3JlYXRlTWFya3VwRm9y
Q3VzdG9tQXR0cmlidXRlIiwic2V0VmFsdWVGb3JQcm9wZXJ0eSIsImRlbGV0ZVZhbHVlRm9yUHJv
cGVydHkiLCJuYW1lc3BhY2UiLCJzZXRBdHRyaWJ1dGVOUyIsInNldFZhbHVlRm9yQXR0cmlidXRl
IiwicmVtb3ZlQXR0cmlidXRlIiwiZGVsZXRlVmFsdWVGb3JBdHRyaWJ1dGUiLCJ1cGRhdGVPcHRp
b25zSWZQZW5kaW5nVXBkYXRlQW5kTW91bnRlZCIsInBlbmRpbmdVcGRhdGUiLCJ1cGRhdGVPcHRp
b25zIiwiQm9vbGVhbiIsIm11bHRpcGxlIiwicHJvcFZhbHVlIiwic2VsZWN0ZWRWYWx1ZSIsIm9w
dGlvbnMiLCJzZWxlY3RlZCIsIl9oYW5kbGVDaGFuZ2UiLCJkaWRXYXJuVmFsdWVEZWZhdWx0VmFs
dWUiLCJSZWFjdERPTVNlbGVjdCIsImdldEhvc3RQcm9wcyIsIm1vdW50V3JhcHBlciIsImluaXRp
YWxWYWx1ZSIsImRlZmF1bHRWYWx1ZSIsImxpc3RlbmVycyIsIndhc011bHRpcGxlIiwiZ2V0U2Vs
ZWN0VmFsdWVDb250ZXh0IiwicG9zdFVwZGF0ZVdyYXBwZXIiLCJkZWZhdWx0U2V0VGltb3V0Iiwi
ZGVmYXVsdENsZWFyVGltZW91dCIsInJ1blRpbWVvdXQiLCJmdW4iLCJjYWNoZWRTZXRUaW1lb3V0
Iiwic2V0VGltZW91dCIsInJ1bkNsZWFyVGltZW91dCIsIm1hcmtlciIsImNhY2hlZENsZWFyVGlt
ZW91dCIsImNsZWFyVGltZW91dCIsImNsZWFuVXBOZXh0VGljayIsImRyYWluaW5nIiwiY3VycmVu
dFF1ZXVlIiwicXVldWVJbmRleCIsImRyYWluUXVldWUiLCJ0aW1lb3V0IiwicnVuIiwiSXRlbSIs
ImFycmF5IiwicHJvY2VzcyIsIm5leHRUaWNrIiwidGl0bGUiLCJicm93c2VyIiwiZW52IiwiYXJn
diIsInZlcnNpb25zIiwib24iLCJhZGRMaXN0ZW5lciIsIm9uY2UiLCJvZmYiLCJyZW1vdmVMaXN0
ZW5lciIsInJlbW92ZUFsbExpc3RlbmVycyIsImVtaXQiLCJwcmVwZW5kTGlzdGVuZXIiLCJwcmVw
ZW5kT25jZUxpc3RlbmVyIiwiYmluZGluZyIsImN3ZCIsImNoZGlyIiwiZGlyIiwidW1hc2siLCJp
c0ludGVybmFsQ29tcG9uZW50VHlwZSIsImluc3RhbnRpYXRlUmVhY3RDb21wb25lbnQiLCJzaG91
bGRIYXZlRGVidWdJRCIsIlJlYWN0RW1wdHlDb21wb25lbnQiLCJjcmVhdGUiLCJpbmZvIiwiUmVh
Y3RIb3N0Q29tcG9uZW50IiwiY3JlYXRlSW50ZXJuYWxDb21wb25lbnQiLCJnZXROYXRpdmVOb2Rl
IiwiUmVhY3RDb21wb3NpdGVDb21wb25lbnRXcmFwcGVyIiwiY3JlYXRlSW5zdGFuY2VGb3JUZXh0
IiwiX21vdW50SW5kZXgiLCJfbW91bnRJbWFnZSIsIlJlYWN0Q29tcG9zaXRlQ29tcG9uZW50Iiwi
Y29uc3RydWN0IiwiX2luc3RhbnRpYXRlUmVhY3RDb21wb25lbnQiLCJSZWFjdE5vZGVUeXBlcyIs
IkhPU1QiLCJDT01QT1NJVEUiLCJFTVBUWSIsImdldFR5cGUiLCJlbXB0eUNvbXBvbmVudEZhY3Rv
cnkiLCJSZWFjdEVtcHR5Q29tcG9uZW50SW5qZWN0aW9uIiwiaW5qZWN0RW1wdHlDb21wb25lbnRG
YWN0b3J5IiwiaW5zdGFudGlhdGUiLCJnZW5lcmljQ29tcG9uZW50Q2xhc3MiLCJ0ZXh0Q29tcG9u
ZW50Q2xhc3MiLCJpc1RleHRDb21wb25lbnQiLCJSZWFjdEhvc3RDb21wb25lbnRJbmplY3Rpb24i
LCJpbmplY3RHZW5lcmljQ29tcG9uZW50Q2xhc3MiLCJjb21wb25lbnRDbGFzcyIsImluamVjdFRl
eHRDb21wb25lbnRDbGFzcyIsImdldENvbXBvbmVudEtleSIsInRyYXZlcnNlQWxsQ2hpbGRyZW5J
bXBsIiwibmFtZVNvRmFyIiwidHJhdmVyc2VDb250ZXh0IiwiU0VQQVJBVE9SIiwiY2hpbGQiLCJu
ZXh0TmFtZSIsInN1YnRyZWVDb3VudCIsIm5leHROYW1lUHJlZml4IiwiU1VCU0VQQVJBVE9SIiwi
aXRlcmF0b3JGbiIsImdldEl0ZXJhdG9yRm4iLCJzdGVwIiwiaXRlcmF0b3IiLCJlbnRyaWVzIiwi
aWkiLCJlbnRyeSIsImFkZGVuZHVtIiwiY2hpbGRyZW5TdHJpbmciLCJ0cmF2ZXJzZUFsbENoaWxk
cmVuIiwiaXNOYXRpdmUiLCJyZUlzTmF0aXZlIiwicHVyZ2VEZWVwIiwiaXRlbSIsImdldEl0ZW0i
LCJjaGlsZElEcyIsInJlbW92ZUl0ZW0iLCJkZXNjcmliZUNvbXBvbmVudEZyYW1lIiwib3duZXJO
YW1lIiwiZmlsZU5hbWUiLCJsaW5lTnVtYmVyIiwiZ2V0RGlzcGxheU5hbWUiLCJkZXNjcmliZUlE
IiwiUmVhY3RDb21wb25lbnRUcmVlSG9vayIsImdldEVsZW1lbnQiLCJvd25lcklEIiwiZ2V0T3du
ZXJJRCIsInNldEl0ZW0iLCJnZXRJdGVtSURzIiwiYWRkUm9vdCIsInJlbW92ZVJvb3QiLCJnZXRS
b290SURzIiwiY2FuVXNlQ29sbGVjdGlvbnMiLCJNYXAiLCJTZXQiLCJpdGVtTWFwIiwicm9vdElE
U2V0IiwiYWRkIiwiaXRlbUJ5S2V5Iiwicm9vdEJ5S2V5IiwiZ2V0S2V5RnJvbUlEIiwiZ2V0SURG
cm9tS2V5IiwicGFyc2VJbnQiLCJzdWJzdHIiLCJ1bm1vdW50ZWRJRHMiLCJvblNldENoaWxkcmVu
IiwibmV4dENoaWxkSURzIiwibmV4dENoaWxkSUQiLCJuZXh0Q2hpbGQiLCJwYXJlbnRJRCIsIm9u
QmVmb3JlTW91bnRDb21wb25lbnQiLCJ1cGRhdGVDb3VudCIsIm9uQmVmb3JlVXBkYXRlQ29tcG9u
ZW50Iiwib25Nb3VudENvbXBvbmVudCIsIm9uVXBkYXRlQ29tcG9uZW50Iiwib25Vbm1vdW50Q29t
cG9uZW50IiwicHVyZ2VVbm1vdW50ZWRDb21wb25lbnRzIiwiX3ByZXZlbnRQdXJnaW5nIiwiZ2V0
Q3VycmVudFN0YWNrQWRkZW5kdW0iLCJ0b3BFbGVtZW50IiwiY3VycmVudE93bmVyIiwiX2RlYnVn
SUQiLCJnZXRTdGFja0FkZGVuZHVtQnlJRCIsImdldFBhcmVudElEIiwiZ2V0Q2hpbGRJRHMiLCJn
ZXRTb3VyY2UiLCJnZXRUZXh0IiwiZ2V0VXBkYXRlQ291bnQiLCJnZXRSZWdpc3RlcmVkSURzIiwi
cHVzaE5vblN0YW5kYXJkV2FybmluZ1N0YWNrIiwiaXNDcmVhdGluZ0VsZW1lbnQiLCJjdXJyZW50
U291cmNlIiwicmVhY3RTdGFjayIsInN0YWNrIiwicG9wTm9uU3RhbmRhcmRXYXJuaW5nU3RhY2si
LCJyZWFjdFN0YWNrRW5kIiwiRXZlbnRMaXN0ZW5lciIsImxpc3RlbiIsImV2ZW50VHlwZSIsInJl
bW92ZUV2ZW50TGlzdGVuZXIiLCJkZXRhY2hFdmVudCIsInJlZ2lzdGVyRGVmYXVsdCIsImlzSW5E
b2N1bWVudCIsImNvbnRhaW5zTm9kZSIsIlJlYWN0RE9NU2VsZWN0aW9uIiwiZ2V0QWN0aXZlRWxl
bWVudCIsIlJlYWN0SW5wdXRTZWxlY3Rpb24iLCJoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMiLCJj
b250ZW50RWRpdGFibGUiLCJnZXRTZWxlY3Rpb25JbmZvcm1hdGlvbiIsImZvY3VzZWRFbGVtIiwi
c2VsZWN0aW9uUmFuZ2UiLCJnZXRTZWxlY3Rpb24iLCJyZXN0b3JlU2VsZWN0aW9uIiwicHJpb3JT
ZWxlY3Rpb25JbmZvcm1hdGlvbiIsImN1ckZvY3VzZWRFbGVtIiwicHJpb3JGb2N1c2VkRWxlbSIs
InByaW9yU2VsZWN0aW9uUmFuZ2UiLCJzZXRTZWxlY3Rpb24iLCJpbnB1dCIsInNlbGVjdGlvbiIs
InN0YXJ0Iiwic2VsZWN0aW9uU3RhcnQiLCJlbmQiLCJzZWxlY3Rpb25FbmQiLCJjcmVhdGVSYW5n
ZSIsInBhcmVudEVsZW1lbnQiLCJtb3ZlU3RhcnQiLCJtb3ZlRW5kIiwiZ2V0T2Zmc2V0cyIsIm9m
ZnNldHMiLCJtaW4iLCJjcmVhdGVUZXh0UmFuZ2UiLCJjb2xsYXBzZSIsInNlbGVjdCIsInNldE9m
ZnNldHMiLCJhY3RpdmVFbGVtZW50IiwiYm9keSIsImZpcnN0RGlmZmVyZW5jZUluZGV4Iiwic3Ry
aW5nMSIsInN0cmluZzIiLCJtaW5MZW4iLCJnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIi
LCJjb250YWluZXIiLCJET0NfTk9ERV9UWVBFIiwiaW50ZXJuYWxHZXRJRCIsIm1vdW50Q29tcG9u
ZW50SW50b05vZGUiLCJ3cmFwcGVySW5zdGFuY2UiLCJzaG91bGRSZXVzZU1hcmt1cCIsIndyYXBw
ZWRFbGVtZW50IiwiUmVhY3RET01Db250YWluZXJJbmZvIiwiX3RvcExldmVsV3JhcHBlciIsIlJl
YWN0TW91bnQiLCJfbW91bnRJbWFnZUludG9Ob2RlIiwiYmF0Y2hlZE1vdW50Q29tcG9uZW50SW50
b05vZGUiLCJjb21wb25lbnRJbnN0YW5jZSIsIlJlYWN0RE9NRmVhdHVyZUZsYWdzIiwidXNlQ3Jl
YXRlRWxlbWVudCIsInVubW91bnRDb21wb25lbnRGcm9tTm9kZSIsImhhc05vblJvb3RSZWFjdENo
aWxkIiwicm9vdEVsIiwiaXNWYWxpZENvbnRhaW5lciIsIkVMRU1FTlRfTk9ERV9UWVBFIiwiRE9D
VU1FTlRfRlJBR01FTlRfTk9ERV9UWVBFIiwiZ2V0SG9zdFJvb3RJbnN0YW5jZUluQ29udGFpbmVy
IiwicHJldkhvc3RJbnN0YW5jZSIsImdldFRvcExldmVsV3JhcHBlckluQ29udGFpbmVyIiwicm9v
dCIsIl9ob3N0Q29udGFpbmVySW5mbyIsIlJlYWN0TWFya3VwQ2hlY2tzdW0iLCJST09UX0FUVFJf
TkFNRSIsImluc3RhbmNlc0J5UmVhY3RSb290SUQiLCJ0b3BMZXZlbFJvb3RDb3VudGVyIiwiVG9w
TGV2ZWxXcmFwcGVyIiwicm9vdElEIiwicmVuZGVyIiwiX2luc3RhbmNlc0J5UmVhY3RSb290SUQi
LCJzY3JvbGxNb25pdG9yIiwicmVuZGVyQ2FsbGJhY2siLCJfdXBkYXRlUm9vdENvbXBvbmVudCIs
InByZXZDb21wb25lbnQiLCJfcmVuZGVyTmV3Um9vdENvbXBvbmVudCIsIndyYXBwZXJJRCIsIl9p
bnN0YW5jZSIsInJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyIiwicGFyZW50Q29tcG9uZW50Iiwi
X3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyIiwibmV4dFdyYXBwZWRFbGVtZW50IiwiX3Byb2Nl
c3NDaGlsZENvbnRleHQiLCJwcmV2V3JhcHBlZEVsZW1lbnQiLCJwdWJsaWNJbnN0IiwidXBkYXRl
ZENhbGxiYWNrIiwidW5tb3VudENvbXBvbmVudEF0Tm9kZSIsInJlYWN0Um9vdEVsZW1lbnQiLCJj
b250YWluZXJIYXNSZWFjdE1hcmt1cCIsImNvbnRhaW5lckhhc05vblJvb3RSZWFjdENoaWxkIiwi
aGFzQXR0cmlidXRlIiwicm9vdEVsZW1lbnQiLCJjYW5SZXVzZU1hcmt1cCIsImNoZWNrc3VtIiwi
Q0hFQ0tTVU1fQVRUUl9OQU1FIiwicm9vdE1hcmt1cCIsIm91dGVySFRNTCIsIm5vcm1hbGl6ZWRN
YXJrdXAiLCJkaWZmSW5kZXgiLCJkaWZmZXJlbmNlIiwiZ2V0SG9zdENvbXBvbmVudEZyb21Db21w
b3NpdGUiLCJfcmVuZGVyZWROb2RlVHlwZSIsImNyZWF0ZVN0b3JlIiwicmVkdWNlciIsInByZWxv
YWRlZFN0YXRlIiwiZW5oYW5jZXIiLCJlbnN1cmVDYW5NdXRhdGVOZXh0TGlzdGVuZXJzIiwibmV4
dExpc3RlbmVycyIsImN1cnJlbnRMaXN0ZW5lcnMiLCJnZXRTdGF0ZSIsImN1cnJlbnRTdGF0ZSIs
InN1YnNjcmliZSIsImlzU3Vic2NyaWJlZCIsImRpc3BhdGNoIiwiYWN0aW9uIiwiX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19pc1BsYWluT2JqZWN0X18iLCJpc0Rpc3BhdGNo
aW5nIiwiY3VycmVudFJlZHVjZXIiLCJyZXBsYWNlUmVkdWNlciIsIm5leHRSZWR1Y2VyIiwiQWN0
aW9uVHlwZXMiLCJJTklUIiwib2JzZXJ2YWJsZSIsIl9yZWYiLCJvdXRlclN1YnNjcmliZSIsIm9i
c2VydmVyIiwib2JzZXJ2ZVN0YXRlIiwidW5zdWJzY3JpYmUiLCJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfc3ltYm9sX29ic2VydmFibGVfX19kZWZhdWx0IiwiX3JlZjIiLCJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfc3ltYm9sX29ic2VydmFibGVfXyIsIl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fcm9vdF9qc19fIiwiY29tcG9zZSIsIl9sZW4iLCJmdW5jcyIsIl9rZXkiLCJy
ZWR1Y2UiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvbXBvbmVudHNfUHJvdmlkZXJf
XyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fY29ubmVjdF9jb25uZWN0X18iLCJzdWJz
Y3JpcHRpb25TaGFwZSIsInN0b3JlU2hhcGUiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
cHJvcF90eXBlc19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19k
ZWZhdWx0Iiwic2hhcGUiLCJ0cnlTdWJzY3JpYmUiLCJpc1JlcXVpcmVkIiwidHJ5VW5zdWJzY3Jp
YmUiLCJub3RpZnlOZXN0ZWRTdWJzIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJSZWZl
cmVuY2VFcnJvciIsIl9pbmhlcml0cyIsInN1YkNsYXNzIiwic3VwZXJDbGFzcyIsIndyaXRhYmxl
Iiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMi
LCJtYWtlU2VsZWN0b3JTdGF0ZWZ1bCIsInNvdXJjZVNlbGVjdG9yIiwic3RvcmUiLCJzZWxlY3Rv
ciIsIm5leHRQcm9wcyIsInNob3VsZENvbXBvbmVudFVwZGF0ZSIsImNvbm5lY3RBZHZhbmNlZCIs
InNlbGVjdG9yRmFjdG9yeSIsIl9jb250ZXh0VHlwZXMiLCJfY2hpbGRDb250ZXh0VHlwZXMiLCJf
cmVmJGdldERpc3BsYXlOYW1lIiwiX3JlZiRtZXRob2ROYW1lIiwibWV0aG9kTmFtZSIsIl9yZWYk
cmVuZGVyQ291bnRQcm9wIiwicmVuZGVyQ291bnRQcm9wIiwiX3JlZiRzaG91bGRIYW5kbGVTdGF0
Iiwic2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzIiwiX3JlZiRzdG9yZUtleSIsInN0b3JlS2V5Iiwi
X3JlZiR3aXRoUmVmIiwid2l0aFJlZiIsImNvbm5lY3RPcHRpb25zIiwic3Vic2NyaXB0aW9uS2V5
IiwiaG90UmVsb2FkaW5nVmVyc2lvbiIsImNvbnRleHRUeXBlcyIsIl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNF9fdXRpbHNfUHJvcFR5cGVzX18iLCJjaGlsZENvbnRleHRUeXBlcyIsIldyYXBw
ZWRDb21wb25lbnQiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X19fZGVm
YXVsdCIsIkpTT04iLCJzdHJpbmdpZnkiLCJ3cmFwcGVkQ29tcG9uZW50TmFtZSIsInNlbGVjdG9y
RmFjdG9yeU9wdGlvbnMiLCJfZXh0ZW5kcyIsIkNvbm5lY3QiLCJfQ29tcG9uZW50IiwiX3RoaXMi
LCJzdGF0ZSIsInJlbmRlckNvdW50IiwicHJvcHNNb2RlIiwic2V0V3JhcHBlZEluc3RhbmNlIiwi
aW5pdFNlbGVjdG9yIiwiaW5pdFN1YnNjcmlwdGlvbiIsImdldENoaWxkQ29udGV4dCIsInN1YnNj
cmlwdGlvbiIsImNvbXBvbmVudERpZE1vdW50IiwiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIs
ImNvbXBvbmVudFdpbGxVbm1vdW50IiwiZ2V0V3JhcHBlZEluc3RhbmNlIiwid3JhcHBlZEluc3Rh
bmNlIiwicGFyZW50U3ViIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX191dGlsc19TdWJz
Y3JpcHRpb25fXyIsIm9uU3RhdGVDaGFuZ2UiLCJjb21wb25lbnREaWRVcGRhdGUiLCJub3RpZnlO
ZXN0ZWRTdWJzT25Db21wb25lbnREaWRVcGRhdGUiLCJkdW1teVN0YXRlIiwiYWRkRXh0cmFQcm9w
cyIsIndpdGhFeHRyYXMiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfXyIsIl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9ob2lzdF9ub25fcmVhY3Rfc3RhdGljc19fX2RlZmF1
bHQiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaG9pc3Rfbm9uX3JlYWN0X3N0YXRpY3Nf
XyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfXyIsIndyYXBNYXBUb1By
b3BzQ29uc3RhbnQiLCJnZXRDb25zdGFudCIsImNvbnN0YW50U2VsZWN0b3IiLCJjb25zdGFudCIs
ImRlcGVuZHNPbk93blByb3BzIiwiZ2V0RGVwZW5kc09uT3duUHJvcHMiLCJtYXBUb1Byb3BzIiwi
d3JhcE1hcFRvUHJvcHNGdW5jIiwicHJveHkiLCJzdGF0ZU9yRGlzcGF0Y2giLCJvd25Qcm9wcyIs
Il9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fIiwiX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdCIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9j
bGFzc25hbWVzX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfY2xhc3NuYW1lc19fX2Rl
ZmF1bHQiLCJfY3JlYXRlQ2xhc3MiLCJkZWZpbmVQcm9wZXJ0aWVzIiwicHJvdG9Qcm9wcyIsInN0
YXRpY1Byb3BzIiwiVG9kb1RleHRJbnB1dCIsIl90ZW1wIiwiX3JldCIsImdldFByb3RvdHlwZU9m
IiwiaGFuZGxlU3VibWl0IiwidHJpbSIsIndoaWNoIiwib25TYXZlIiwibmV3VG9kbyIsImhhbmRs
ZUNoYW5nZSIsImhhbmRsZUJsdXIiLCJjbGFzc05hbWUiLCJlZGl0IiwiZWRpdGluZyIsIm5ldy10
b2RvIiwicGxhY2Vob2xkZXIiLCJhdXRvRm9jdXMiLCJvbkJsdXIiLCJvbktleURvd24iLCJib29s
IiwiU0hPV19BTEwiLCJTSE9XX0NPTVBMRVRFRCIsIlNIT1dfQUNUSVZFIiwiQUREX1RPRE8iLCJE
RUxFVEVfVE9ETyIsIkVESVRfVE9ETyIsIkNPTVBMRVRFX1RPRE8iLCJDT01QTEVURV9BTEwiLCJD
TEVBUl9DT01QTEVURUQiLCJlbmFibGUiLCJkaXNhYmxlIiwib25VbmhhbmRsZWQiLCJhbGxSZWpl
Y3Rpb25zIiwibWF0Y2hXaGl0ZWxpc3QiLCJyZWplY3Rpb25zIiwid2hpdGVsaXN0IiwiREVGQVVM
VF9XSElURUxJU1QiLCJkaXNwbGF5SWQiLCJsb2dnZWQiLCJsb2dFcnJvciIsIm9uSGFuZGxlZCIs
Indhcm4iLCJfNTYiLCJsaW5lIiwibGlzdCIsInNvbWUiLCJjbHMiLCJSYW5nZUVycm9yIiwiZ2xv
YmFsIiwicmF3QXNhcCIsInRhc2siLCJyZXF1ZXN0Rmx1c2giLCJmbHVzaGluZyIsImZsdXNoIiwi
Y3VycmVudEluZGV4IiwiY2FwYWNpdHkiLCJzY2FuIiwibmV3TGVuZ3RoIiwibWFrZVJlcXVlc3RD
YWxsRnJvbVRpbWVyIiwiaGFuZGxlVGltZXIiLCJ0aW1lb3V0SGFuZGxlIiwiY2xlYXJJbnRlcnZh
bCIsImludGVydmFsSGFuZGxlIiwic2V0SW50ZXJ2YWwiLCJCcm93c2VyTXV0YXRpb25PYnNlcnZl
ciIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJXZWJLaXRNdXRhdGlvbk9ic2VydmVyIiwidG9nZ2xlIiwi
b2JzZXJ2ZSIsImNoYXJhY3RlckRhdGEiLCJ2YWx1ZVByb21pc2UiLCJUUlVFIiwiRkFMU0UiLCJO
VUxMIiwiVU5ERUZJTkVEIiwiWkVSTyIsIkVNUFRZU1RSSU5HIiwiYWxsIiwicmVtYWluaW5nIiwi
cmFjZSIsInZhbHVlcyIsIm5vcm1hbGl6ZU5hbWUiLCJub3JtYWxpemVWYWx1ZSIsIml0ZXJhdG9y
Rm9yIiwiaXRlbXMiLCJzaGlmdCIsInN1cHBvcnQiLCJpdGVyYWJsZSIsIkhlYWRlcnMiLCJoZWFk
ZXJzIiwiYXBwZW5kIiwiaGVhZGVyIiwiY29uc3VtZWQiLCJib2R5VXNlZCIsImZpbGVSZWFkZXJS
ZWFkeSIsInJlYWRlciIsIm9ubG9hZCIsInJlc3VsdCIsIm9uZXJyb3IiLCJyZWFkQmxvYkFzQXJy
YXlCdWZmZXIiLCJibG9iIiwiRmlsZVJlYWRlciIsInJlYWRBc0FycmF5QnVmZmVyIiwicmVhZEJs
b2JBc1RleHQiLCJyZWFkQXNUZXh0IiwicmVhZEFycmF5QnVmZmVyQXNUZXh0IiwiYnVmIiwiVWlu
dDhBcnJheSIsImNoYXJzIiwiYnVmZmVyQ2xvbmUiLCJieXRlTGVuZ3RoIiwiYnVmZmVyIiwiQm9k
eSIsIl9pbml0Qm9keSIsIl9ib2R5SW5pdCIsIl9ib2R5VGV4dCIsIkJsb2IiLCJpc1Byb3RvdHlw
ZU9mIiwiX2JvZHlCbG9iIiwiZm9ybURhdGEiLCJGb3JtRGF0YSIsIl9ib2R5Rm9ybURhdGEiLCJz
ZWFyY2hQYXJhbXMiLCJVUkxTZWFyY2hQYXJhbXMiLCJhcnJheUJ1ZmZlciIsImlzRGF0YVZpZXci
LCJfYm9keUFycmF5QnVmZmVyIiwiQXJyYXlCdWZmZXIiLCJpc0FycmF5QnVmZmVyVmlldyIsInJl
amVjdGVkIiwiZGVjb2RlIiwianNvbiIsInBhcnNlIiwibm9ybWFsaXplTWV0aG9kIiwidXBjYXNl
ZCIsIm1ldGhvZHMiLCJSZXF1ZXN0IiwiY3JlZGVudGlhbHMiLCJtb2RlIiwicmVmZXJyZXIiLCJm
b3JtIiwiYnl0ZXMiLCJkZWNvZGVVUklDb21wb25lbnQiLCJwYXJzZUhlYWRlcnMiLCJyYXdIZWFk
ZXJzIiwicGFydHMiLCJSZXNwb25zZSIsImJvZHlJbml0Iiwic3RhdHVzIiwib2siLCJzdGF0dXNU
ZXh0IiwiZmV0Y2giLCJ2aWV3Q2xhc3NlcyIsIkRhdGFWaWV3IiwiaXNWaWV3Iiwib2xkVmFsdWUi
LCJ0aGlzQXJnIiwiY2xvbmUiLCJyZXNwb25zZSIsInJlZGlyZWN0U3RhdHVzZXMiLCJyZWRpcmVj
dCIsImxvY2F0aW9uIiwiaW5pdCIsInJlcXVlc3QiLCJ4aHIiLCJYTUxIdHRwUmVxdWVzdCIsImdl
dEFsbFJlc3BvbnNlSGVhZGVycyIsInJlc3BvbnNlVVJMIiwicmVzcG9uc2VUZXh0Iiwib250aW1l
b3V0Iiwib3BlbiIsIndpdGhDcmVkZW50aWFscyIsInJlc3BvbnNlVHlwZSIsInNldFJlcXVlc3RI
ZWFkZXIiLCJzZW5kIiwicG9seWZpbGwiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVh
Y3RfZG9tX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVkdXhfXyIsIl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19yZWFjdF9yZWR1eF9fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X19jb250YWluZXJzX0FwcF9fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19y
ZWR1Y2Vyc19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X3RvZG9tdmNfYXBwX2Nzc19p
bmRleF9jc3NfXyIsImdldEVsZW1lbnRCeUlkIiwibG93UHJpb3JpdHlXYXJuaW5nIiwiZXNjYXBl
VXNlclByb3ZpZGVkS2V5IiwidXNlclByb3ZpZGVkS2V5RXNjYXBlUmVnZXgiLCJGb3JFYWNoQm9v
a0tlZXBpbmciLCJmb3JFYWNoRnVuY3Rpb24iLCJmb3JFYWNoQ29udGV4dCIsImZvckVhY2hTaW5n
bGVDaGlsZCIsImJvb2tLZWVwaW5nIiwiZm9yRWFjaENoaWxkcmVuIiwiZm9yRWFjaEZ1bmMiLCJN
YXBCb29rS2VlcGluZyIsIm1hcFJlc3VsdCIsImtleVByZWZpeCIsIm1hcEZ1bmN0aW9uIiwibWFw
Q29udGV4dCIsIm1hcFNpbmdsZUNoaWxkSW50b0NvbnRleHQiLCJjaGlsZEtleSIsIm1hcHBlZENo
aWxkIiwibWFwSW50b1dpdGhLZXlQcmVmaXhJbnRlcm5hbCIsImVzY2FwZWRQcmVmaXgiLCJtYXBD
aGlsZHJlbiIsImZvckVhY2hTaW5nbGVDaGlsZER1bW15IiwiY291bnRDaGlsZHJlbiIsIm1heWJl
SXRlcmFibGUiLCJJVEVSQVRPUl9TWU1CT0wiLCJGQVVYX0lURVJBVE9SX1NZTUJPTCIsImNyZWF0
ZURPTUZhY3RvcnkiLCJhYmJyIiwiYWRkcmVzcyIsImFyZWEiLCJhcnRpY2xlIiwiYXNpZGUiLCJh
dWRpbyIsImJhc2UiLCJiZGkiLCJiZG8iLCJiaWciLCJibG9ja3F1b3RlIiwiYnIiLCJjYW52YXMi
LCJjYXB0aW9uIiwiY2l0ZSIsImNvbCIsImNvbGdyb3VwIiwiZGF0YWxpc3QiLCJkZCIsImRlbCIs
ImRldGFpbHMiLCJkZm4iLCJkaWFsb2ciLCJkaXYiLCJkbCIsImR0IiwiZW0iLCJlbWJlZCIsImZp
ZWxkc2V0IiwiZmlnY2FwdGlvbiIsImZpZ3VyZSIsImZvb3RlciIsImgxIiwiaDIiLCJoMyIsImg0
IiwiaDUiLCJoNiIsImhlYWQiLCJoZ3JvdXAiLCJociIsImlmcmFtZSIsImltZyIsImlucyIsImti
ZCIsImtleWdlbiIsImxhYmVsIiwibGVnZW5kIiwibGkiLCJsaW5rIiwibWFpbiIsIm1hcmsiLCJt
ZW51IiwibWVudWl0ZW0iLCJtZXRhIiwibWV0ZXIiLCJuYXYiLCJub3NjcmlwdCIsIm9sIiwib3B0
Z3JvdXAiLCJvcHRpb24iLCJvdXRwdXQiLCJwYXJhbSIsInBpY3R1cmUiLCJwcmUiLCJwcm9ncmVz
cyIsInEiLCJycCIsInJ0IiwicnVieSIsInNhbXAiLCJzY3JpcHQiLCJzZWN0aW9uIiwic21hbGwi
LCJzcGFuIiwic3Ryb25nIiwic3R5bGUiLCJzdWIiLCJzdW1tYXJ5Iiwic3VwIiwidGFibGUiLCJ0
Ym9keSIsInRkIiwidGV4dGFyZWEiLCJ0Zm9vdCIsInRoIiwidGhlYWQiLCJ0ciIsInUiLCJ1bCIs
InZhciIsInZpZGVvIiwid2JyIiwiY2lyY2xlIiwiY2xpcFBhdGgiLCJkZWZzIiwiZWxsaXBzZSIs
ImxpbmVhckdyYWRpZW50IiwibWFzayIsInBhdGgiLCJwYXR0ZXJuIiwicG9seWdvbiIsInBvbHls
aW5lIiwicmFkaWFsR3JhZGllbnQiLCJyZWN0Iiwic3RvcCIsInRzcGFuIiwiX3JlcXVpcmUiLCJ0
aHJvd09uRGlyZWN0QWNjZXNzIiwiUHJvcFR5cGVFcnJvciIsImNyZWF0ZUNoYWluYWJsZVR5cGVD
aGVja2VyIiwidmFsaWRhdGUiLCJjaGVja1R5cGUiLCJwcm9wRnVsbE5hbWUiLCJzZWNyZXQiLCJB
Tk9OWU1PVVMiLCJjaGFpbmVkQ2hlY2tUeXBlIiwiY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIi
LCJleHBlY3RlZFR5cGUiLCJnZXRQcm9wVHlwZSIsImdldFByZWNpc2VUeXBlIiwiY3JlYXRlQXJy
YXlPZlR5cGVDaGVja2VyIiwidHlwZUNoZWNrZXIiLCJjcmVhdGVJbnN0YW5jZVR5cGVDaGVja2Vy
IiwiZXhwZWN0ZWRDbGFzcyIsImV4cGVjdGVkQ2xhc3NOYW1lIiwiZ2V0Q2xhc3NOYW1lIiwiY3Jl
YXRlRW51bVR5cGVDaGVja2VyIiwiZXhwZWN0ZWRWYWx1ZXMiLCJjcmVhdGVPYmplY3RPZlR5cGVD
aGVja2VyIiwicHJvcFR5cGUiLCJjcmVhdGVVbmlvblR5cGVDaGVja2VyIiwiYXJyYXlPZlR5cGVD
aGVja2VycyIsImNoZWNrZXIiLCJnZXRQb3N0Zml4Rm9yVHlwZVdhcm5pbmciLCJjcmVhdGVTaGFw
ZVR5cGVDaGVja2VyIiwic2hhcGVUeXBlcyIsImlzTm9kZSIsImV2ZXJ5IiwiaXNTeW1ib2wiLCJz
eW1ib2wiLCJhbnkiLCJhcnJheU9mIiwiaW5zdGFuY2VPZiIsIm9iamVjdE9mIiwib25lT2YiLCJv
bmVPZlR5cGUiLCJ0eXBlU3BlY3MiLCJnZXRTdGFjayIsIl9yZXF1aXJlMiIsImlkZW50aXR5Iiwi
dmFsaWRhdGVNZXRob2RPdmVycmlkZSIsImlzQWxyZWFkeURlZmluZWQiLCJzcGVjUG9saWN5Iiwi
UmVhY3RDbGFzc0ludGVyZmFjZSIsIlJlYWN0Q2xhc3NNaXhpbiIsIl9pbnZhcmlhbnQiLCJtaXhT
cGVjSW50b0NvbXBvbmVudCIsInNwZWMiLCJhdXRvQmluZFBhaXJzIiwiX19yZWFjdEF1dG9CaW5k
UGFpcnMiLCJNSVhJTlNfS0VZIiwiUkVTRVJWRURfU1BFQ19LRVlTIiwibWl4aW5zIiwiaXNSZWFj
dENsYXNzTWV0aG9kIiwiaXNGdW5jdGlvbiIsInNob3VsZEF1dG9CaW5kIiwiYXV0b2JpbmQiLCJj
cmVhdGVNZXJnZWRSZXN1bHRGdW5jdGlvbiIsImNyZWF0ZUNoYWluZWRGdW5jdGlvbiIsIm1peFN0
YXRpY1NwZWNJbnRvQ29tcG9uZW50Iiwic3RhdGljcyIsImlzUmVzZXJ2ZWQiLCJpc0luaGVyaXRl
ZCIsIm1lcmdlSW50b1dpdGhOb0R1cGxpY2F0ZUtleXMiLCJvbmUiLCJ0d28iLCJiaW5kQXV0b0Jp
bmRNZXRob2QiLCJib3VuZE1ldGhvZCIsImJpbmRBdXRvQmluZE1ldGhvZHMiLCJwYWlycyIsImF1
dG9CaW5kS2V5IiwiaW5pdGlhbFN0YXRlIiwiZ2V0SW5pdGlhbFN0YXRlIiwiUmVhY3RDbGFzc0Nv
bXBvbmVudCIsImluamVjdGVkTWl4aW5zIiwiSXNNb3VudGVkUHJlTWl4aW4iLCJJc01vdW50ZWRQ
b3N0TWl4aW4iLCJnZXREZWZhdWx0UHJvcHMiLCJjb21wb25lbnRXaWxsTW91bnQiLCJjb21wb25l
bnRXaWxsVXBkYXRlIiwidXBkYXRlQ29tcG9uZW50IiwiX19pc01vdW50ZWQiLCJyZXBsYWNlU3Rh
dGUiLCJuZXdTdGF0ZSIsIlJlYWN0RGVmYXVsdEluamVjdGlvbiIsImZpbmRET01Ob2RlIiwiaW5q
ZWN0IiwiUmVhY3RET00iLCJ1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyIsInVuc3RhYmxlX3JlbmRl
clN1YnRyZWVJbnRvQ29udGFpbmVyIiwiX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fIiwi
TW91bnQiLCJSZWNvbmNpbGVyIiwiYWxyZWFkeUluamVjdGVkIiwiUmVhY3RJbmplY3Rpb24iLCJF
dmVudEVtaXR0ZXIiLCJEZWZhdWx0RXZlbnRQbHVnaW5PcmRlciIsIlJlYWN0RE9NVHJlZVRyYXZl
cnNhbCIsIlNpbXBsZUV2ZW50UGx1Z2luIiwiRW50ZXJMZWF2ZUV2ZW50UGx1Z2luIiwiQ2hhbmdl
RXZlbnRQbHVnaW4iLCJTZWxlY3RFdmVudFBsdWdpbiIsIkJlZm9yZUlucHV0RXZlbnRQbHVnaW4i
LCJIb3N0Q29tcG9uZW50IiwiUmVhY3RET01Db21wb25lbnQiLCJSZWFjdERPTVRleHRDb21wb25l
bnQiLCJBUklBRE9NUHJvcGVydHlDb25maWciLCJIVE1MRE9NUHJvcGVydHlDb25maWciLCJTVkdE
T01Qcm9wZXJ0eUNvbmZpZyIsIkVtcHR5Q29tcG9uZW50IiwiUmVhY3RET01FbXB0eUNvbXBvbmVu
dCIsIlVwZGF0ZXMiLCJSZWFjdERlZmF1bHRCYXRjaGluZ1N0cmF0ZWd5IiwiUmVhY3RDb21wb25l
bnRCcm93c2VyRW52aXJvbm1lbnQiLCJhcmlhLWN1cnJlbnQiLCJhcmlhLWRldGFpbHMiLCJhcmlh
LWRpc2FibGVkIiwiYXJpYS1oaWRkZW4iLCJhcmlhLWludmFsaWQiLCJhcmlhLWtleXNob3J0Y3V0
cyIsImFyaWEtbGFiZWwiLCJhcmlhLXJvbGVkZXNjcmlwdGlvbiIsImFyaWEtYXV0b2NvbXBsZXRl
IiwiYXJpYS1jaGVja2VkIiwiYXJpYS1leHBhbmRlZCIsImFyaWEtaGFzcG9wdXAiLCJhcmlhLWxl
dmVsIiwiYXJpYS1tb2RhbCIsImFyaWEtbXVsdGlsaW5lIiwiYXJpYS1tdWx0aXNlbGVjdGFibGUi
LCJhcmlhLW9yaWVudGF0aW9uIiwiYXJpYS1wbGFjZWhvbGRlciIsImFyaWEtcHJlc3NlZCIsImFy
aWEtcmVhZG9ubHkiLCJhcmlhLXJlcXVpcmVkIiwiYXJpYS1zZWxlY3RlZCIsImFyaWEtc29ydCIs
ImFyaWEtdmFsdWVtYXgiLCJhcmlhLXZhbHVlbWluIiwiYXJpYS12YWx1ZW5vdyIsImFyaWEtdmFs
dWV0ZXh0IiwiYXJpYS1hdG9taWMiLCJhcmlhLWJ1c3kiLCJhcmlhLWxpdmUiLCJhcmlhLXJlbGV2
YW50IiwiYXJpYS1kcm9wZWZmZWN0IiwiYXJpYS1ncmFiYmVkIiwiYXJpYS1hY3RpdmVkZXNjZW5k
YW50IiwiYXJpYS1jb2xjb3VudCIsImFyaWEtY29saW5kZXgiLCJhcmlhLWNvbHNwYW4iLCJhcmlh
LWNvbnRyb2xzIiwiYXJpYS1kZXNjcmliZWRieSIsImFyaWEtZXJyb3JtZXNzYWdlIiwiYXJpYS1m
bG93dG8iLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLW93bnMiLCJhcmlhLXBvc2luc2V0IiwiYXJp
YS1yb3djb3VudCIsImFyaWEtcm93aW5kZXgiLCJhcmlhLXJvd3NwYW4iLCJhcmlhLXNldHNpemUi
LCJpc0tleXByZXNzQ29tbWFuZCIsImdldENvbXBvc2l0aW9uRXZlbnRUeXBlIiwiY29tcG9zaXRp
b25TdGFydCIsImNvbXBvc2l0aW9uRW5kIiwiY29tcG9zaXRpb25VcGRhdGUiLCJpc0ZhbGxiYWNr
Q29tcG9zaXRpb25TdGFydCIsIlNUQVJUX0tFWUNPREUiLCJpc0ZhbGxiYWNrQ29tcG9zaXRpb25F
bmQiLCJFTkRfS0VZQ09ERVMiLCJnZXREYXRhRnJvbUN1c3RvbUV2ZW50IiwiZXh0cmFjdENvbXBv
c2l0aW9uRXZlbnQiLCJmYWxsYmFja0RhdGEiLCJjYW5Vc2VDb21wb3NpdGlvbkV2ZW50IiwiY3Vy
cmVudENvbXBvc2l0aW9uIiwidXNlRmFsbGJhY2tDb21wb3NpdGlvbkRhdGEiLCJnZXREYXRhIiwi
RmFsbGJhY2tDb21wb3NpdGlvblN0YXRlIiwiU3ludGhldGljQ29tcG9zaXRpb25FdmVudCIsImN1
c3RvbURhdGEiLCJnZXROYXRpdmVCZWZvcmVJbnB1dENoYXJzIiwiU1BBQ0VCQVJfQ09ERSIsImhh
c1NwYWNlS2V5cHJlc3MiLCJTUEFDRUJBUl9DSEFSIiwiZ2V0RmFsbGJhY2tCZWZvcmVJbnB1dENo
YXJzIiwiZXh0cmFjdEJlZm9yZUlucHV0RXZlbnQiLCJjYW5Vc2VUZXh0SW5wdXRFdmVudCIsIlN5
bnRoZXRpY0lucHV0RXZlbnQiLCJiZWZvcmVJbnB1dCIsIm9wZXJhIiwiYnViYmxlZCIsImNhcHR1
cmVkIiwiX3Jvb3QiLCJfc3RhcnRUZXh0IiwiX2ZhbGxiYWNrVGV4dCIsInN0YXJ0VmFsdWUiLCJz
dGFydExlbmd0aCIsImVuZFZhbHVlIiwiZW5kTGVuZ3RoIiwibWluRW5kIiwic2xpY2VUYWlsIiwi
Q29tcG9zaXRpb25FdmVudEludGVyZmFjZSIsIklucHV0RXZlbnRJbnRlcmZhY2UiLCJjcmVhdGVB
bmRBY2N1bXVsYXRlQ2hhbmdlRXZlbnQiLCJjaGFuZ2UiLCJzaG91bGRVc2VDaGFuZ2VFdmVudCIs
Im1hbnVhbERpc3BhdGNoQ2hhbmdlRXZlbnQiLCJhY3RpdmVFbGVtZW50SW5zdCIsInJ1bkV2ZW50
SW5CYXRjaCIsInN0YXJ0V2F0Y2hpbmdGb3JDaGFuZ2VFdmVudElFOCIsInN0b3BXYXRjaGluZ0Zv
ckNoYW5nZUV2ZW50SUU4IiwiZ2V0SW5zdElmVmFsdWVDaGFuZ2VkIiwidXBkYXRlZCIsIl9hbGxv
d1NpbXVsYXRlZFBhc3NUaHJvdWdoIiwiZ2V0VGFyZ2V0SW5zdEZvckNoYW5nZUV2ZW50IiwiaGFu
ZGxlRXZlbnRzRm9yQ2hhbmdlRXZlbnRJRTgiLCJzdGFydFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2Ui
LCJoYW5kbGVQcm9wZXJ0eUNoYW5nZSIsInN0b3BXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlIiwiaGFu
ZGxlRXZlbnRzRm9ySW5wdXRFdmVudFBvbHlmaWxsIiwiZ2V0VGFyZ2V0SW5zdEZvcklucHV0RXZl
bnRQb2x5ZmlsbCIsInNob3VsZFVzZUNsaWNrRXZlbnQiLCJnZXRUYXJnZXRJbnN0Rm9yQ2xpY2tF
dmVudCIsImdldFRhcmdldEluc3RGb3JJbnB1dE9yQ2hhbmdlRXZlbnQiLCJoYW5kbGVDb250cm9s
bGVkSW5wdXRCbHVyIiwiY29udHJvbGxlZCIsImRvZXNDaGFuZ2VFdmVudEJ1YmJsZSIsImlzSW5w
dXRFdmVudFN1cHBvcnRlZCIsIl9pc0lucHV0RXZlbnRTdXBwb3J0ZWQiLCJnZXRUYXJnZXRJbnN0
RnVuYyIsImhhbmRsZUV2ZW50RnVuYyIsInRhcmdldE5vZGUiLCJhdHRhY2hSZWYiLCJSZWFjdE93
bmVyIiwiYWRkQ29tcG9uZW50QXNSZWZUbyIsImRldGFjaFJlZiIsInJlbW92ZUNvbXBvbmVudEFz
UmVmRnJvbSIsInByZXZSZWYiLCJwcmV2T3duZXIiLCJuZXh0UmVmIiwibmV4dE93bmVyIiwiaXNW
YWxpZE93bmVyIiwib3duZXJQdWJsaWNJbnN0YW5jZSIsIm1vdXNlRW50ZXIiLCJtb3VzZUxlYXZl
Iiwid2luIiwicmVsYXRlZCIsInRvTm9kZSIsImFjY2VwdCIsImFjY2VwdENoYXJzZXQiLCJhY2Nl
c3NLZXkiLCJhbGxvd0Z1bGxTY3JlZW4iLCJhbGxvd1RyYW5zcGFyZW5jeSIsImFsdCIsImFzIiwi
YXN5bmMiLCJhdXRvQ29tcGxldGUiLCJhdXRvUGxheSIsImNlbGxQYWRkaW5nIiwiY2VsbFNwYWNp
bmciLCJjaGFyU2V0IiwiY2hhbGxlbmdlIiwiY2xhc3NJRCIsImNvbHMiLCJjb2xTcGFuIiwiY29u
dGV4dE1lbnUiLCJjb250cm9scyIsImNvb3JkcyIsImNyb3NzT3JpZ2luIiwiZGF0ZVRpbWUiLCJk
ZWZhdWx0IiwiZGVmZXIiLCJkb3dubG9hZCIsImRyYWdnYWJsZSIsImVuY1R5cGUiLCJmb3JtQWN0
aW9uIiwiZm9ybUVuY1R5cGUiLCJmb3JtTWV0aG9kIiwiZm9ybU5vVmFsaWRhdGUiLCJmb3JtVGFy
Z2V0IiwiZnJhbWVCb3JkZXIiLCJoZWlnaHQiLCJoaWdoIiwiaHJlZiIsImhyZWZMYW5nIiwiaHRt
bEZvciIsImh0dHBFcXVpdiIsImljb24iLCJpbnB1dE1vZGUiLCJpbnRlZ3JpdHkiLCJrZXlQYXJh
bXMiLCJrZXlUeXBlIiwia2luZCIsImxhbmciLCJsb29wIiwibG93IiwibWFuaWZlc3QiLCJtYXJn
aW5IZWlnaHQiLCJtYXJnaW5XaWR0aCIsIm1heCIsIm1heExlbmd0aCIsIm1lZGlhIiwibWVkaWFH
cm91cCIsIm1pbkxlbmd0aCIsIm11dGVkIiwibm9uY2UiLCJub1ZhbGlkYXRlIiwib3B0aW11bSIs
InBsYXlzSW5saW5lIiwicG9zdGVyIiwicHJlbG9hZCIsInByb2ZpbGUiLCJyYWRpb0dyb3VwIiwi
cmVmZXJyZXJQb2xpY3kiLCJyZWwiLCJyZXF1aXJlZCIsInJldmVyc2VkIiwicm9sZSIsInJvd3Mi
LCJyb3dTcGFuIiwic2FuZGJveCIsInNjb3BlZCIsInNjcm9sbGluZyIsInNlYW1sZXNzIiwic2l6
ZSIsInNpemVzIiwic3BlbGxDaGVjayIsInNyYyIsInNyY0RvYyIsInNyY0xhbmciLCJzcmNTZXQi
LCJ0YWJJbmRleCIsInVzZU1hcCIsIndpZHRoIiwid21vZGUiLCJ3cmFwIiwiYWJvdXQiLCJkYXRh
dHlwZSIsImlubGlzdCIsInJlc291cmNlIiwidHlwZW9mIiwidm9jYWIiLCJhdXRvQ2FwaXRhbGl6
ZSIsImF1dG9Db3JyZWN0IiwiYXV0b1NhdmUiLCJpdGVtUHJvcCIsIml0ZW1TY29wZSIsIml0ZW1U
eXBlIiwiaXRlbUlEIiwiaXRlbVJlZiIsInJlc3VsdHMiLCJzZWN1cml0eSIsInVuc2VsZWN0YWJs
ZSIsInZhbGlkaXR5IiwiYmFkSW5wdXQiLCJSZWFjdERPTUlET3BlcmF0aW9ucyIsImRhbmdlcm91
c2x5UHJvY2Vzc0NoaWxkcmVuVXBkYXRlcyIsImNyZWF0ZU5vZGVzRnJvbU1hcmt1cCIsIm9sZENo
aWxkIiwibmV3Q2hpbGQiLCJnZXROb2RlTmFtZSIsIm5vZGVOYW1lTWF0Y2giLCJub2RlTmFtZVBh
dHRlcm4iLCJoYW5kbGVTY3JpcHQiLCJkdW1teU5vZGUiLCJnZXRNYXJrdXBXcmFwIiwid3JhcERl
cHRoIiwic2NyaXB0cyIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiY3JlYXRlQXJyYXlGcm9tTWl4
ZWQiLCJub2RlcyIsImNoaWxkTm9kZXMiLCJjYWxsZWUiLCJoYXNBcnJheU5hdHVyZSIsIm1hcmt1
cFdyYXAiLCJzaG91bGRXcmFwIiwic2VsZWN0V3JhcCIsInRhYmxlV3JhcCIsInRyV3JhcCIsInN2
Z1dyYXAiLCIqIiwiYXNzZXJ0VmFsaWRQcm9wcyIsInZvaWRFbGVtZW50VGFncyIsIl90YWciLCJk
YW5nZXJvdXNseVNldElubmVySFRNTCIsIkhUTUwiLCJlbnF1ZXVlUHV0TGlzdGVuZXIiLCJSZWFj
dFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9uIiwiY29udGFpbmVySW5mbyIsImlzRG9jdW1lbnRG
cmFnbWVudCIsIl9ub2RlIiwiRE9DX0ZSQUdNRU5UX1RZUEUiLCJfb3duZXJEb2N1bWVudCIsImxp
c3RlbmVyVG9QdXQiLCJpbnB1dFBvc3RNb3VudCIsIlJlYWN0RE9NSW5wdXQiLCJwb3N0TW91bnRX
cmFwcGVyIiwidGV4dGFyZWFQb3N0TW91bnQiLCJSZWFjdERPTVRleHRhcmVhIiwib3B0aW9uUG9z
dE1vdW50IiwiUmVhY3RET01PcHRpb24iLCJ0cmFja0lucHV0VmFsdWUiLCJ0cmFwQnViYmxlZEV2
ZW50c0xvY2FsIiwiZ2V0Tm9kZSIsIm1lZGlhRXZlbnRzIiwicG9zdFVwZGF0ZVNlbGVjdFdyYXBw
ZXIiLCJ2YWxpZGF0ZURhbmdlcm91c1RhZyIsInZhbGlkYXRlZFRhZ0NhY2hlIiwiVkFMSURfVEFH
X1JFR0VYIiwiaXNDdXN0b21Db21wb25lbnQiLCJfbmFtZXNwYWNlVVJJIiwiX3ByZXZpb3VzU3R5
bGUiLCJfcHJldmlvdXNTdHlsZUNvcHkiLCJBdXRvRm9jdXNVdGlscyIsIkNTU1Byb3BlcnR5T3Bl
cmF0aW9ucyIsIlJlYWN0TXVsdGlDaGlsZCIsIkNPTlRFTlRfVFlQRVMiLCJzdXBwcmVzc0NvbnRl
bnRFZGl0YWJsZVdhcm5pbmciLCJvbWl0dGVkQ2xvc2VUYWdzIiwibmV3bGluZUVhdGluZ1RhZ3Mi
LCJsaXN0aW5nIiwiZ2xvYmFsSWRDb3VudGVyIiwiTWl4aW4iLCJfaWRDb3VudGVyIiwicGFyZW50
VGFnIiwibW91bnRJbWFnZSIsImVsIiwiY3JlYXRlRWxlbWVudE5TIiwiX3VwZGF0ZURPTVByb3Bl
cnRpZXMiLCJsYXp5VHJlZSIsIl9jcmVhdGVJbml0aWFsQ2hpbGRyZW4iLCJ0YWdPcGVuIiwiX2Ny
ZWF0ZU9wZW5UYWdNYXJrdXBBbmRQdXRMaXN0ZW5lcnMiLCJ0YWdDb250ZW50IiwiX2NyZWF0ZUNv
bnRlbnRNYXJrdXAiLCJmb2N1c0RPTUNvbXBvbmVudCIsInByb3BLZXkiLCJjcmVhdGVNYXJrdXBG
b3JTdHlsZXMiLCJyZW5kZXJUb1N0YXRpY01hcmt1cCIsIl9faHRtbCIsImNvbnRlbnRUb1VzZSIs
ImNoaWxkcmVuVG9Vc2UiLCJtb3VudEltYWdlcyIsIm1vdW50Q2hpbGRyZW4iLCJsYXN0UHJvcHMi
LCJfdXBkYXRlRE9NQ2hpbGRyZW4iLCJ1cGRhdGVXcmFwcGVyIiwic3R5bGVOYW1lIiwic3R5bGVV
cGRhdGVzIiwibGFzdFN0eWxlIiwibmV4dFByb3AiLCJsYXN0UHJvcCIsInNldFZhbHVlRm9yU3R5
bGVzIiwibGFzdENvbnRlbnQiLCJuZXh0Q29udGVudCIsImxhc3RIdG1sIiwibmV4dEh0bWwiLCJs
YXN0Q2hpbGRyZW4iLCJuZXh0Q2hpbGRyZW4iLCJsYXN0SGFzQ29udGVudE9ySHRtbCIsIm5leHRI
YXNDb250ZW50T3JIdG1sIiwidXBkYXRlQ2hpbGRyZW4iLCJ1cGRhdGVUZXh0Q29udGVudCIsInVw
ZGF0ZU1hcmt1cCIsInVubW91bnRDaGlsZHJlbiIsImRhbmdlcm91c1N0eWxlVmFsdWUiLCJoeXBo
ZW5hdGVTdHlsZU5hbWUiLCJtZW1vaXplU3RyaW5nT25seSIsInByb2Nlc3NTdHlsZU5hbWUiLCJo
YXNTaG9ydGhhbmRQcm9wZXJ0eUJ1ZyIsInN0eWxlRmxvYXRBY2Nlc3NvciIsInRlbXBTdHlsZSIs
ImNzc0Zsb2F0Iiwic3R5bGVzIiwic2VyaWFsaXplZCIsImlzQ3VzdG9tUHJvcGVydHkiLCJzdHls
ZVZhbHVlIiwic2V0UHJvcGVydHkiLCJleHBhbnNpb24iLCJpbmRpdmlkdWFsU3R5bGVOYW1lIiwi
Y2FtZWxpemVTdHlsZU5hbWUiLCJjYW1lbGl6ZSIsIm1zUGF0dGVybiIsIl9oeXBoZW5QYXR0ZXJu
IiwiXyIsImNoYXJhY3RlciIsImlzTm9uTnVtZXJpYyIsImh5cGhlbmF0ZSIsIl91cHBlcmNhc2VQ
YXR0ZXJuIiwiY2FjaGUiLCJydW5FdmVudFF1ZXVlSW5CYXRjaCIsIm1ha2VQcmVmaXhNYXAiLCJz
dHlsZVByb3AiLCJwcmVmaXhlZEV2ZW50TmFtZXMiLCJ2ZW5kb3JQcmVmaXhlcyIsInByZWZpeE1h
cCIsImFuaW1hdGlvbmVuZCIsImFuaW1hdGlvbml0ZXJhdGlvbiIsImFuaW1hdGlvbnN0YXJ0Iiwi
dHJhbnNpdGlvbmVuZCIsImFuaW1hdGlvbiIsInRyYW5zaXRpb24iLCJmb3JjZVVwZGF0ZUlmTW91
bnRlZCIsImlzQ29udHJvbGxlZCIsInJvb3ROb2RlIiwicXVlcnlSb290IiwiZ3JvdXAiLCJxdWVy
eVNlbGVjdG9yQWxsIiwib3RoZXJOb2RlIiwib3RoZXJJbnN0YW5jZSIsImRlZmF1bHRDaGVja2Vk
IiwiaW5pdGlhbENoZWNrZWQiLCJ2YWx1ZUFzTnVtYmVyIiwicGFyc2VGbG9hdCIsImZsYXR0ZW5D
aGlsZHJlbiIsImRpZFdhcm5JbnZhbGlkT3B0aW9uQ2hpbGRyZW4iLCJzZWxlY3RWYWx1ZSIsInNl
bGVjdFBhcmVudCIsImhvc3RQcm9wcyIsIm1ha2VJbnNlcnRNYXJrdXAiLCJ0b0luZGV4IiwiZnJv
bUluZGV4IiwibWFrZU1vdmUiLCJtYWtlUmVtb3ZlIiwibWFrZVNldE1hcmt1cCIsIm1ha2VUZXh0
Q29udGVudCIsInByb2Nlc3NRdWV1ZSIsInVwZGF0ZVF1ZXVlIiwiUmVhY3RDaGlsZFJlY29uY2ls
ZXIiLCJfcmVjb25jaWxlckluc3RhbnRpYXRlQ2hpbGRyZW4iLCJuZXN0ZWRDaGlsZHJlbiIsImlu
c3RhbnRpYXRlQ2hpbGRyZW4iLCJfcmVjb25jaWxlclVwZGF0ZUNoaWxkcmVuIiwicHJldkNoaWxk
cmVuIiwibmV4dE5lc3RlZENoaWxkcmVuRWxlbWVudHMiLCJyZW1vdmVkTm9kZXMiLCJzZWxmRGVi
dWdJRCIsIm5leHRNYXJrdXAiLCJfdXBkYXRlQ2hpbGRyZW4iLCJuZXh0SW5kZXgiLCJuZXh0TW91
bnRJbmRleCIsImxhc3RQbGFjZWROb2RlIiwicHJldkNoaWxkIiwiX21vdW50Q2hpbGRBdEluZGV4
IiwiX3VubW91bnRDaGlsZCIsInJlbmRlcmVkQ2hpbGRyZW4iLCJjcmVhdGVDaGlsZCIsImluc3Rh
bnRpYXRlQ2hpbGQiLCJjaGlsZEluc3RhbmNlcyIsImtleVVuaXF1ZSIsIk5PREVfRU5WIiwiUFVC
TElDX1VSTCIsIm5lc3RlZENoaWxkTm9kZXMiLCJuZXh0Q2hpbGRJbnN0YW5jZSIsIm5leHRDaGls
ZE1vdW50SW1hZ2UiLCJyZW5kZXJlZENoaWxkIiwiU3RhdGVsZXNzQ29tcG9uZW50Iiwic2hvdWxk
Q29uc3RydWN0IiwiaXNQdXJlQ29tcG9uZW50IiwiQ29tcG9zaXRlVHlwZXMiLCJJbXB1cmVDbGFz
cyIsIlB1cmVDbGFzcyIsIlN0YXRlbGVzc0Z1bmN0aW9uYWwiLCJuZXh0TW91bnRJRCIsIl9jb21w
b3NpdGVUeXBlIiwiX2NhbGxlZENvbXBvbmVudFdpbGxVbm1vdW50IiwicmVuZGVyZWRFbGVtZW50
IiwicHVibGljUHJvcHMiLCJwdWJsaWNDb250ZXh0IiwiX3Byb2Nlc3NDb250ZXh0IiwiZ2V0VXBk
YXRlUXVldWUiLCJkb0NvbnN0cnVjdCIsIl9jb25zdHJ1Y3RDb21wb25lbnQiLCJ1bnN0YWJsZV9o
YW5kbGVFcnJvciIsInBlcmZvcm1Jbml0aWFsTW91bnRXaXRoRXJyb3JIYW5kbGluZyIsInBlcmZv
cm1Jbml0aWFsTW91bnQiLCJfY29uc3RydWN0Q29tcG9uZW50V2l0aG91dE93bmVyIiwiX3Byb2Nl
c3NQZW5kaW5nU3RhdGUiLCJkZWJ1Z0lEIiwiX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudCIsIl9t
YXNrQ29udGV4dCIsIm1hc2tlZENvbnRleHQiLCJjb250ZXh0TmFtZSIsImN1cnJlbnRDb250ZXh0
IiwiY2hpbGRDb250ZXh0IiwiX2NoZWNrQ29udGV4dFR5cGVzIiwicHJldkNvbnRleHQiLCJwcmV2
UGFyZW50RWxlbWVudCIsIm5leHRQYXJlbnRFbGVtZW50IiwicHJldlVubWFza2VkQ29udGV4dCIs
Im5leHRVbm1hc2tlZENvbnRleHQiLCJ3aWxsUmVjZWl2ZSIsInByZXZQcm9wcyIsIm5leHRTdGF0
ZSIsInNob3VsZFVwZGF0ZSIsIl9wZXJmb3JtQ29tcG9uZW50VXBkYXRlIiwicGFydGlhbCIsInVu
bWFza2VkQ29udGV4dCIsInByZXZTdGF0ZSIsImhhc0NvbXBvbmVudERpZFVwZGF0ZSIsIl91cGRh
dGVSZW5kZXJlZENvbXBvbmVudCIsInByZXZDb21wb25lbnRJbnN0YW5jZSIsInByZXZSZW5kZXJl
ZEVsZW1lbnQiLCJuZXh0UmVuZGVyZWRFbGVtZW50Iiwib2xkSG9zdE5vZGUiLCJfcmVwbGFjZU5v
ZGVXaXRoTWFya3VwIiwicHJldkluc3RhbmNlIiwiX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudFdp
dGhvdXRPd25lck9yQ29udGV4dCIsInB1YmxpY0NvbXBvbmVudEluc3RhbmNlIiwiZ2V0TmV4dERl
YnVnSUQiLCJuZXh0RGVidWdJRCIsImZsYXR0ZW5TaW5nbGVDaGlsZEludG9Db250ZXh0IiwiUmVh
Y3RTZXJ2ZXJVcGRhdGVRdWV1ZSIsIm5vb3BDYWxsYmFja1F1ZXVlIiwiZG9tSUQiLCJjcmVhdGVD
b21tZW50IiwiaW5zdEEiLCJpbnN0QiIsImRlcHRoQSIsInRlbXBBIiwiZGVwdGhCIiwidGVtcEIi
LCJkZXB0aCIsImNvbW1vbiIsInBhdGhGcm9tIiwicGF0aFRvIiwiX3N0cmluZ1RleHQiLCJfY2xv
c2luZ0NvbW1lbnQiLCJfY29tbWVudE5vZGVzIiwib3BlbmluZ1ZhbHVlIiwiY3JlYXRlRG9jdW1l
bnRGcmFnbWVudCIsImVzY2FwZWRUZXh0IiwibmV4dFRleHQiLCJuZXh0U3RyaW5nVGV4dCIsImNv
bW1lbnROb2RlcyIsImhvc3ROb2RlIiwiUmVhY3REZWZhdWx0QmF0Y2hpbmdTdHJhdGVneVRyYW5z
YWN0aW9uIiwiUkVTRVRfQkFUQ0hFRF9VUERBVEVTIiwiRkxVU0hfQkFUQ0hFRF9VUERBVEVTIiwi
YWxyZWFkeUJhdGNoaW5nVXBkYXRlcyIsImZpbmRQYXJlbnQiLCJUb3BMZXZlbENhbGxiYWNrQm9v
a0tlZXBpbmciLCJhbmNlc3RvcnMiLCJoYW5kbGVUb3BMZXZlbEltcGwiLCJhbmNlc3RvciIsIl9o
YW5kbGVUb3BMZXZlbCIsInNjcm9sbFZhbHVlTW9uaXRvciIsImdldFVuYm91bmRlZFNjcm9sbFBv
c2l0aW9uIiwiX2VuYWJsZWQiLCJkaXNwYXRjaEV2ZW50Iiwic2Nyb2xsYWJsZSIsIldpbmRvdyIs
InBhZ2VYT2Zmc2V0Iiwic2Nyb2xsTGVmdCIsInBhZ2VZT2Zmc2V0Iiwic2Nyb2xsVG9wIiwicmVh
Y3RNb3VudFJlYWR5IiwiU0VMRUNUSU9OX1JFU1RPUkFUSU9OIiwiRVZFTlRfU1VQUFJFU1NJT04i
LCJjdXJyZW50bHlFbmFibGVkIiwicHJldmlvdXNseUVuYWJsZWQiLCJPTl9ET01fUkVBRFlfUVVF
VUVJTkciLCJpc0NvbGxhcHNlZCIsImFuY2hvck5vZGUiLCJhbmNob3JPZmZzZXQiLCJmb2N1c09m
ZnNldCIsImdldElFT2Zmc2V0cyIsInNlbGVjdGVkUmFuZ2UiLCJzZWxlY3RlZExlbmd0aCIsImZy
b21TdGFydCIsImR1cGxpY2F0ZSIsIm1vdmVUb0VsZW1lbnRUZXh0Iiwic2V0RW5kUG9pbnQiLCJz
dGFydE9mZnNldCIsImdldE1vZGVybk9mZnNldHMiLCJyYW5nZUNvdW50IiwiY3VycmVudFJhbmdl
IiwiZ2V0UmFuZ2VBdCIsInN0YXJ0Q29udGFpbmVyIiwiZW5kQ29udGFpbmVyIiwiaXNTZWxlY3Rp
b25Db2xsYXBzZWQiLCJyYW5nZUxlbmd0aCIsInRlbXBSYW5nZSIsImNsb25lUmFuZ2UiLCJzZWxl
Y3ROb2RlQ29udGVudHMiLCJzZXRFbmQiLCJpc1RlbXBSYW5nZUNvbGxhcHNlZCIsImVuZE9mZnNl
dCIsImRldGVjdGlvblJhbmdlIiwic2V0U3RhcnQiLCJpc0JhY2t3YXJkIiwiY29sbGFwc2VkIiwi
c2V0SUVPZmZzZXRzIiwic2V0TW9kZXJuT2Zmc2V0cyIsImV4dGVuZCIsInRlbXAiLCJzdGFydE1h
cmtlciIsImdldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQiLCJlbmRNYXJrZXIiLCJvZmZzZXQiLCJy
ZW1vdmVBbGxSYW5nZXMiLCJhZGRSYW5nZSIsInVzZUlFT2Zmc2V0cyIsImdldExlYWZOb2RlIiwi
Z2V0U2libGluZ05vZGUiLCJub2RlU3RhcnQiLCJub2RlRW5kIiwib3V0ZXJOb2RlIiwiaW5uZXJO
b2RlIiwiaXNUZXh0Tm9kZSIsImNvbnRhaW5zIiwiY29tcGFyZURvY3VtZW50UG9zaXRpb24iLCJO
b2RlIiwiTlMiLCJ4bGluayIsInhtbCIsIkFUVFJTIiwiYWNjZW50SGVpZ2h0IiwiYWNjdW11bGF0
ZSIsImFkZGl0aXZlIiwiYWxpZ25tZW50QmFzZWxpbmUiLCJhbGxvd1Jlb3JkZXIiLCJhbHBoYWJl
dGljIiwiYW1wbGl0dWRlIiwiYXJhYmljRm9ybSIsImFzY2VudCIsImF0dHJpYnV0ZVR5cGUiLCJh
dXRvUmV2ZXJzZSIsImF6aW11dGgiLCJiYXNlRnJlcXVlbmN5IiwiYmFzZVByb2ZpbGUiLCJiYXNl
bGluZVNoaWZ0IiwiYmJveCIsImJlZ2luIiwiYmlhcyIsImJ5IiwiY2FsY01vZGUiLCJjYXBIZWln
aHQiLCJjbGlwIiwiY2xpcFJ1bGUiLCJjbGlwUGF0aFVuaXRzIiwiY29sb3JJbnRlcnBvbGF0aW9u
IiwiY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycyIsImNvbG9yUHJvZmlsZSIsImNvbG9yUmVuZGVy
aW5nIiwiY29udGVudFNjcmlwdFR5cGUiLCJjb250ZW50U3R5bGVUeXBlIiwiY3Vyc29yIiwiY3gi
LCJjeSIsImRlY2VsZXJhdGUiLCJkZXNjZW50IiwiZGlmZnVzZUNvbnN0YW50IiwiZGlyZWN0aW9u
IiwiZGlzcGxheSIsImRpdmlzb3IiLCJkb21pbmFudEJhc2VsaW5lIiwiZHVyIiwiZHgiLCJkeSIs
ImVkZ2VNb2RlIiwiZWxldmF0aW9uIiwiZW5hYmxlQmFja2dyb3VuZCIsImV4cG9uZW50IiwiZXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCIsImZpbGwiLCJmaWxsUnVsZSIsImZpbHRlciIsImZpbHRl
clJlcyIsImZpbHRlclVuaXRzIiwiZmxvb2RDb2xvciIsImZvY3VzYWJsZSIsImZvbnRTaXplQWRq
dXN0IiwiZm9udFN0cmV0Y2giLCJmeCIsImZ5IiwiZzEiLCJnMiIsImdseXBoTmFtZSIsImdseXBo
T3JpZW50YXRpb25Ib3Jpem9udGFsIiwiZ2x5cGhPcmllbnRhdGlvblZlcnRpY2FsIiwiZ2x5cGhS
ZWYiLCJncmFkaWVudFRyYW5zZm9ybSIsImdyYWRpZW50VW5pdHMiLCJoYW5naW5nIiwiaG9yaXpB
ZHZYIiwiaG9yaXpPcmlnaW5YIiwiaWRlb2dyYXBoaWMiLCJpbWFnZVJlbmRlcmluZyIsImluIiwi
aW4yIiwiaW50ZXJjZXB0IiwiazEiLCJrMiIsImszIiwiazQiLCJrZXJuZWxNYXRyaXgiLCJrZXJu
ZWxVbml0TGVuZ3RoIiwia2VybmluZyIsImtleVBvaW50cyIsImtleVNwbGluZXMiLCJrZXlUaW1l
cyIsImxlbmd0aEFkanVzdCIsImxldHRlclNwYWNpbmciLCJsaWdodGluZ0NvbG9yIiwibGltaXRp
bmdDb25lQW5nbGUiLCJsb2NhbCIsIm1hcmtlckVuZCIsIm1hcmtlck1pZCIsIm1hcmtlclN0YXJ0
IiwibWFya2VySGVpZ2h0IiwibWFya2VyVW5pdHMiLCJtYXJrZXJXaWR0aCIsIm1hc2tDb250ZW50
VW5pdHMiLCJtYXNrVW5pdHMiLCJtYXRoZW1hdGljYWwiLCJudW1PY3RhdmVzIiwib3BlcmF0b3Ii
LCJvcmllbnQiLCJvcmllbnRhdGlvbiIsIm9yaWdpbiIsIm92ZXJmbG93Iiwib3ZlcmxpbmVQb3Np
dGlvbiIsIm92ZXJsaW5lVGhpY2tuZXNzIiwicGFpbnRPcmRlciIsInBhbm9zZTEiLCJwYXRoTGVu
Z3RoIiwicGF0dGVybkNvbnRlbnRVbml0cyIsInBhdHRlcm5UcmFuc2Zvcm0iLCJwYXR0ZXJuVW5p
dHMiLCJwb2ludGVyRXZlbnRzIiwicG9pbnRzIiwicG9pbnRzQXRYIiwicG9pbnRzQXRZIiwicG9p
bnRzQXRaIiwicHJlc2VydmVBbHBoYSIsInByZXNlcnZlQXNwZWN0UmF0aW8iLCJwcmltaXRpdmVV
bml0cyIsInIiLCJyYWRpdXMiLCJyZWZYIiwicmVmWSIsInJlbmRlcmluZ0ludGVudCIsInJlcGVh
dENvdW50IiwicmVwZWF0RHVyIiwicmVxdWlyZWRFeHRlbnNpb25zIiwicmVxdWlyZWRGZWF0dXJl
cyIsInJlc3RhcnQiLCJyb3RhdGUiLCJyeCIsInJ5Iiwic2NhbGUiLCJzZWVkIiwic2hhcGVSZW5k
ZXJpbmciLCJzbG9wZSIsInNwYWNpbmciLCJzcGVjdWxhckNvbnN0YW50Iiwic3BlY3VsYXJFeHBv
bmVudCIsInNwZWVkIiwic3ByZWFkTWV0aG9kIiwic3RkRGV2aWF0aW9uIiwic3RlbWgiLCJzdGVt
diIsInN0aXRjaFRpbGVzIiwic3RvcENvbG9yIiwic3RyaWtldGhyb3VnaFBvc2l0aW9uIiwic3Ry
aWtldGhyb3VnaFRoaWNrbmVzcyIsInN0cm9rZSIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5l
am9pbiIsInN1cmZhY2VTY2FsZSIsInN5c3RlbUxhbmd1YWdlIiwidGFibGVWYWx1ZXMiLCJ0YXJn
ZXRYIiwidGFyZ2V0WSIsInRleHRBbmNob3IiLCJ0ZXh0RGVjb3JhdGlvbiIsInRleHRSZW5kZXJp
bmciLCJ0ZXh0TGVuZ3RoIiwidHJhbnNmb3JtIiwidTEiLCJ1MiIsInVuZGVybGluZVBvc2l0aW9u
IiwidW5kZXJsaW5lVGhpY2tuZXNzIiwidW5pY29kZSIsInVuaWNvZGVCaWRpIiwidW5pY29kZVJh
bmdlIiwidW5pdHNQZXJFbSIsInZBbHBoYWJldGljIiwidkhhbmdpbmciLCJ2SWRlb2dyYXBoaWMi
LCJ2TWF0aGVtYXRpY2FsIiwidmVjdG9yRWZmZWN0IiwidmVydEFkdlkiLCJ2ZXJ0T3JpZ2luWCIs
InZlcnRPcmlnaW5ZIiwidmlld0JveCIsInZpZXdUYXJnZXQiLCJ2aXNpYmlsaXR5Iiwid2lkdGhz
Iiwid29yZFNwYWNpbmciLCJ3cml0aW5nTW9kZSIsInhIZWlnaHQiLCJ4MSIsIngyIiwieENoYW5u
ZWxTZWxlY3RvciIsInhsaW5rQWN0dWF0ZSIsInhsaW5rQXJjcm9sZSIsInhsaW5rSHJlZiIsInhs
aW5rUm9sZSIsInhsaW5rU2hvdyIsInhsaW5rVGl0bGUiLCJ4bGlua1R5cGUiLCJ4bWxCYXNlIiwi
eG1sbnMiLCJ4bWxuc1hsaW5rIiwieG1sTGFuZyIsInhtbFNwYWNlIiwieTEiLCJ5MiIsInlDaGFu
bmVsU2VsZWN0b3IiLCJ6Iiwiem9vbUFuZFBhbiIsInRvcCIsImJvdW5kaW5nVG9wIiwibGVmdCIs
ImJvdW5kaW5nTGVmdCIsImNvbnN0cnVjdFNlbGVjdEV2ZW50IiwibW91c2VEb3duIiwiY3VycmVu
dFNlbGVjdGlvbiIsImxhc3RTZWxlY3Rpb24iLCJza2lwU2VsZWN0aW9uQ2hhbmdlRXZlbnQiLCJo
YXNMaXN0ZW5lciIsIlN5bnRoZXRpY0FuaW1hdGlvbkV2ZW50IiwiU3ludGhldGljQ2xpcGJvYXJk
RXZlbnQiLCJTeW50aGV0aWNGb2N1c0V2ZW50IiwiU3ludGhldGljS2V5Ym9hcmRFdmVudCIsIlN5
bnRoZXRpY0RyYWdFdmVudCIsIlN5bnRoZXRpY1RvdWNoRXZlbnQiLCJTeW50aGV0aWNUcmFuc2l0
aW9uRXZlbnQiLCJTeW50aGV0aWNXaGVlbEV2ZW50IiwidG9wTGV2ZWxFdmVudHNUb0Rpc3BhdGNo
Q29uZmlnIiwiY2FwaXRhbGl6ZWRFdmVudCIsIm9uRXZlbnQiLCJ0b3BFdmVudCIsIm9uQ2xpY2tM
aXN0ZW5lcnMiLCJFdmVudENvbnN0cnVjdG9yIiwiQW5pbWF0aW9uRXZlbnRJbnRlcmZhY2UiLCJh
bmltYXRpb25OYW1lIiwiZWxhcHNlZFRpbWUiLCJwc2V1ZG9FbGVtZW50IiwiQ2xpcGJvYXJkRXZl
bnRJbnRlcmZhY2UiLCJjbGlwYm9hcmREYXRhIiwiRm9jdXNFdmVudEludGVyZmFjZSIsImdldEV2
ZW50S2V5IiwiS2V5Ym9hcmRFdmVudEludGVyZmFjZSIsInJlcGVhdCIsImxvY2FsZSIsIm5vcm1h
bGl6ZUtleSIsInRyYW5zbGF0ZVRvS2V5IiwiRXNjIiwiU3BhY2ViYXIiLCJMZWZ0IiwiVXAiLCJS
aWdodCIsIkRvd24iLCJEZWwiLCJXaW4iLCJNZW51IiwiQXBwcyIsIlNjcm9sbCIsIk1velByaW50
YWJsZUtleSIsIjgiLCI5IiwiMTIiLCIxMyIsIjE2IiwiMTciLCIxOCIsIjE5IiwiMjAiLCIyNyIs
IjMyIiwiMzMiLCIzNCIsIjM1IiwiMzYiLCIzNyIsIjM4IiwiMzkiLCI0MCIsIjQ1IiwiNDYiLCIx
MTIiLCIxMTMiLCIxMTQiLCIxMTUiLCIxMTYiLCIxMTciLCIxMTgiLCIxMTkiLCIxMjAiLCIxMjEi
LCIxMjIiLCIxMjMiLCIxNDQiLCIxNDUiLCIyMjQiLCJEcmFnRXZlbnRJbnRlcmZhY2UiLCJkYXRh
VHJhbnNmZXIiLCJUb3VjaEV2ZW50SW50ZXJmYWNlIiwidG91Y2hlcyIsInRhcmdldFRvdWNoZXMi
LCJjaGFuZ2VkVG91Y2hlcyIsIlRyYW5zaXRpb25FdmVudEludGVyZmFjZSIsIldoZWVsRXZlbnRJ
bnRlcmZhY2UiLCJkZWx0YVgiLCJ3aGVlbERlbHRhWCIsImRlbHRhWSIsIndoZWVsRGVsdGFZIiwi
d2hlZWxEZWx0YSIsImRlbHRhWiIsImRlbHRhTW9kZSIsInRvcExldmVsV3JhcHBlciIsInVzZUZp
YmVyIiwiYWRsZXIzMiIsIlRBR19FTkQiLCJDT01NRU5UX1NUQVJUIiwiYWRkQ2hlY2tzdW1Ub01h
cmt1cCIsImV4aXN0aW5nQ2hlY2tzdW0iLCJNT0QiLCJjb21wb25lbnRPckVsZW1lbnQiLCJiYXNl
R2V0VGFnIiwidW5kZWZpbmVkVGFnIiwibnVsbFRhZyIsInN5bVRvU3RyaW5nVGFnIiwiX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRSYXdUYWdfanNfXyIsIl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fb2JqZWN0VG9TdHJpbmdfanNfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fU3ltYm9sX2pzX18iLCJ0b1N0cmluZ1RhZyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fZnJlZUdsb2JhbF9qc19fIiwiZnJlZVNlbGYiLCJmcmVlR2xvYmFsIiwiZ2V0UmF3VGFn
IiwiaXNPd24iLCJ1bm1hc2tlZCIsIm5hdGl2ZU9iamVjdFRvU3RyaW5nIiwib2JqZWN0VG9TdHJp
bmciLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX292ZXJBcmdfanNfXyIsImdldFByb3Rv
dHlwZSIsIm92ZXJBcmciLCJpc09iamVjdExpa2UiLCJfcG9ueWZpbGwiLCJfcG9ueWZpbGwyIiwi
d2VicGFja1BvbHlmaWxsIiwiZGVwcmVjYXRlIiwicGF0aHMiLCJzeW1ib2xPYnNlcnZhYmxlUG9u
eWZpbGwiLCJfU3ltYm9sIiwiZ2V0VW5kZWZpbmVkU3RhdGVFcnJvck1lc3NhZ2UiLCJhY3Rpb25U
eXBlIiwiYXNzZXJ0UmVkdWNlclNoYXBlIiwicmVkdWNlcnMiLCJjb21iaW5lUmVkdWNlcnMiLCJy
ZWR1Y2VyS2V5cyIsImZpbmFsUmVkdWNlcnMiLCJmaW5hbFJlZHVjZXJLZXlzIiwic2hhcGVBc3Nl
cnRpb25FcnJvciIsImhhc0NoYW5nZWQiLCJfaSIsInByZXZpb3VzU3RhdGVGb3JLZXkiLCJuZXh0
U3RhdGVGb3JLZXkiLCJlcnJvck1lc3NhZ2UiLCJiaW5kQWN0aW9uQ3JlYXRvciIsImFjdGlvbkNy
ZWF0b3IiLCJiaW5kQWN0aW9uQ3JlYXRvcnMiLCJhY3Rpb25DcmVhdG9ycyIsImJvdW5kQWN0aW9u
Q3JlYXRvcnMiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcHJvcF90eXBlc19fIiwiX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3Byb3BfdHlwZXNfX19kZWZhdWx0IiwiX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX191dGlsc19Qcm9wVHlwZXNfXyIsIl9Qcm92aWRlciRjaGlsZENv
bnRleCIsInN1YktleSIsIlByb3ZpZGVyIiwic2hpbSIsImdldFNoaW0iLCJSRUFDVF9TVEFUSUNT
IiwiS05PV05fU1RBVElDUyIsImNhbGxlciIsImFyaXR5Iiwib2JqZWN0UHJvdG90eXBlIiwiaG9p
c3ROb25SZWFjdFN0YXRpY3MiLCJ0YXJnZXRDb21wb25lbnQiLCJzb3VyY2VDb21wb25lbnQiLCJi
bGFja2xpc3QiLCJpbmhlcml0ZWRDb21wb25lbnQiLCJjcmVhdGVMaXN0ZW5lckNvbGxlY3Rpb24i
LCJjbGVhciIsIkNMRUFSRUQiLCJub3RpZnkiLCJTdWJzY3JpcHRpb24iLCJudWxsTGlzdGVuZXJz
IiwiYWRkTmVzdGVkU3ViIiwiZmFjdG9yaWVzIiwic3RyaWN0RXF1YWwiLCJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX2NvbXBvbmVudHNfY29ubmVjdEFkdmFuY2VkX18iLCJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX3V0aWxzX3NoYWxsb3dFcXVhbF9fIiwiX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19tYXBEaXNwYXRjaFRvUHJvcHNfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fbWFwU3RhdGVUb1Byb3BzX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRf
X21lcmdlUHJvcHNfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fc2VsZWN0b3JGYWN0
b3J5X18iLCJfcmVmJGNvbm5lY3RIT0MiLCJjb25uZWN0SE9DIiwiX3JlZiRtYXBTdGF0ZVRvUHJv
cHNGIiwibWFwU3RhdGVUb1Byb3BzRmFjdG9yaWVzIiwiX3JlZiRtYXBEaXNwYXRjaFRvUHJvIiwi
bWFwRGlzcGF0Y2hUb1Byb3BzRmFjdG9yaWVzIiwiX3JlZiRtZXJnZVByb3BzRmFjdG9yIiwibWVy
Z2VQcm9wc0ZhY3RvcmllcyIsIl9yZWYkc2VsZWN0b3JGYWN0b3J5IiwibWFwU3RhdGVUb1Byb3Bz
IiwibWFwRGlzcGF0Y2hUb1Byb3BzIiwibWVyZ2VQcm9wcyIsIl9yZWYyJHB1cmUiLCJwdXJlIiwi
X3JlZjIkYXJlU3RhdGVzRXF1YWwiLCJhcmVTdGF0ZXNFcXVhbCIsIl9yZWYyJGFyZU93blByb3Bz
RXF1YSIsImFyZU93blByb3BzRXF1YWwiLCJfcmVmMiRhcmVTdGF0ZVByb3BzRXEiLCJhcmVTdGF0
ZVByb3BzRXF1YWwiLCJfcmVmMiRhcmVNZXJnZWRQcm9wc0UiLCJhcmVNZXJnZWRQcm9wc0VxdWFs
IiwiZXh0cmFPcHRpb25zIiwiaW5pdE1hcFN0YXRlVG9Qcm9wcyIsImluaXRNYXBEaXNwYXRjaFRv
UHJvcHMiLCJpbml0TWVyZ2VQcm9wcyIsIndoZW5NYXBEaXNwYXRjaFRvUHJvcHNJc0Z1bmN0aW9u
IiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX193cmFwTWFwVG9Qcm9wc19fIiwid2hlbk1h
cERpc3BhdGNoVG9Qcm9wc0lzTWlzc2luZyIsIndoZW5NYXBEaXNwYXRjaFRvUHJvcHNJc09iamVj
dCIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWR1eF9fIiwid2hlbk1hcFN0YXRlVG9Q
cm9wc0lzRnVuY3Rpb24iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3dyYXBNYXBUb1By
b3BzX18iLCJ3aGVuTWFwU3RhdGVUb1Byb3BzSXNNaXNzaW5nIiwiZGVmYXVsdE1lcmdlUHJvcHMi
LCJzdGF0ZVByb3BzIiwiZGlzcGF0Y2hQcm9wcyIsIndyYXBNZXJnZVByb3BzRnVuYyIsImhhc1J1
bk9uY2UiLCJtZXJnZWRQcm9wcyIsIm5leHRNZXJnZWRQcm9wcyIsIndoZW5NZXJnZVByb3BzSXNG
dW5jdGlvbiIsIndoZW5NZXJnZVByb3BzSXNPbWl0dGVkIiwiaW1wdXJlRmluYWxQcm9wc1NlbGVj
dG9yRmFjdG9yeSIsInB1cmVGaW5hbFByb3BzU2VsZWN0b3JGYWN0b3J5IiwiaGFuZGxlRmlyc3RD
YWxsIiwiZmlyc3RTdGF0ZSIsImZpcnN0T3duUHJvcHMiLCJoYXNSdW5BdExlYXN0T25jZSIsImhh
bmRsZU5ld1Byb3BzQW5kTmV3U3RhdGUiLCJoYW5kbGVOZXdQcm9wcyIsImhhbmRsZU5ld1N0YXRl
IiwibmV4dFN0YXRlUHJvcHMiLCJzdGF0ZVByb3BzQ2hhbmdlZCIsImhhbmRsZVN1YnNlcXVlbnRD
YWxscyIsIm5leHRPd25Qcm9wcyIsInByb3BzQ2hhbmdlZCIsInN0YXRlQ2hhbmdlZCIsImZpbmFs
UHJvcHNTZWxlY3RvckZhY3RvcnkiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVkdXhf
XyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9yZWR1eF9fIiwiX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19jb21wb25lbnRzX0hlYWRlcl9fIiwiX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV80X19jb21wb25lbnRzX01haW5TZWN0aW9uX18iLCJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzVfX2FjdGlvbnNfXyIsIkFwcCIsInRvZG9zIiwiYWN0aW9ucyIsImFkZFRvZG8i
LCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1RvZG9UZXh0SW5wdXRfXyIsIkhlYWRlciIs
ImhhbmRsZVNhdmUiLCJfZGVmaW5lUHJvcGVydHkiLCJfVE9ET19GSUxURVJTIiwiX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19Ub2RvSXRlbV9fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19Gb290ZXJfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fY29uc3RhbnRzX1Rv
ZG9GaWx0ZXJzX18iLCJUT0RPX0ZJTFRFUlMiLCJ0b2RvIiwiY29tcGxldGVkIiwiTWFpblNlY3Rp
b24iLCJoYW5kbGVDbGVhckNvbXBsZXRlZCIsImNsZWFyQ29tcGxldGVkIiwiaGFuZGxlU2hvdyIs
ImNvbXBsZXRlZENvdW50IiwiX3Byb3BzIiwiY29tcGxldGVBbGwiLCJhY3RpdmVDb3VudCIsIm9u
Q2xlYXJDb21wbGV0ZWQiLCJvblNob3ciLCJfcHJvcHMyIiwiZmlsdGVyZWRUb2RvcyIsInJlbmRl
clRvZ2dsZUFsbCIsInJlbmRlckZvb3RlciIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
VG9kb1RleHRJbnB1dF9fIiwiVG9kb0l0ZW0iLCJoYW5kbGVEb3VibGVDbGljayIsImRlbGV0ZVRv
ZG8iLCJlZGl0VG9kbyIsIl90aGlzMiIsImNvbXBsZXRlVG9kbyIsIm9uRG91YmxlQ2xpY2siLCJv
bkNsaWNrIiwiX0ZJTFRFUl9USVRMRVMiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2Nv
bnN0YW50c19Ub2RvRmlsdGVyc19fIiwiRklMVEVSX1RJVExFUyIsIkZvb3RlciIsIml0ZW1Xb3Jk
Iiwic2VsZWN0ZWRGaWx0ZXIiLCJyZW5kZXJUb2RvQ291bnQiLCJyZW5kZXJGaWx0ZXJMaW5rIiwi
cmVuZGVyQ2xlYXJCdXR0b24iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvbnN0YW50
c19BY3Rpb25UeXBlc19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX190b2Rvc19fIiwi
cm9vdFJlZHVjZXIiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJhcnIyIiwibWF4SWQiLCJhcmVBbGxN
YXJrZWQiXSwibWFwcGluZ3MiOiJDQUFTLFNBQVVBLEdDSW5CLFFBQUFDLEdBQUFDLEdBR0EsR0FB
QUMsRUFBQUQsR0FDQSxNQUFBQyxHQUFBRCxHQUFBRSxPQUdBLElBQUFDLEdBQUFGLEVBQUFELElB
Q0FJLEVBQUFKLEVBQ0FLLEdBQUEsRUFDQUgsV0FVQSxPQU5BSixHQUFBRSxHQUFBTSxLQUFBSCxF
QUFBRCxRQUFBQyxJQUFBRCxRQUFBSCxHQUdBSSxFQUFBRSxHQUFBLEVBR0FGLEVBQUFELFFBdkJB
LEdBQUFELEtBNEJBRixHQUFBUSxFQUFBVCxFQUdBQyxFQUFBUyxFQUFBUCxFQUdBRixFQUFBVSxF
QUFBLFNBQUFQLEVBQUFRLEVBQUFDLEdBQ0FaLEVBQUFhLEVBQUFWLEVBQUFRLElBQ0FHLE9BQUFD
LGVBQUFaLEVBQUFRLEdBQ0FLLGNBQUEsRUFDQUMsWUFBQSxFQUNBQyxJQUFBTixLQU1BWixFQUFB
bUIsRUFBQSxTQUFBZixHQUNBLEdBQUFRLEdBQUFSLEtBQUFnQixXQUNBLFdBQTJCLE1BQUFoQixH
QUFBLFNBQzNCLFdBQWlDLE1BQUFBLEdBRWpDLE9BREFKLEdBQUFVLEVBQUFFLEVBQUEsSUFBQUEs
R0FDQUEsR0FJQVosRUFBQWEsRUFBQSxTQUFBUSxFQUFBQyxHQUFzRCxNQUFBUixRQUFBUyxVQUFB
QyxlQUFBakIsS0FBQWMsRUFBQUMsSUFHdER0QixFQUFBeUIsRUFBQSxLQUdBekIsSUFBQTBCLEVB
QUEsTURNTSxTQUFVdEIsRUFBUUQsRUFBU0gsR0FFakMsWUVwQ0EsU0FBQTJCLEdBQUFDLEVBQUFD
LEVBQUFDLEVBQUFDLEVBQUF0QixFQUFBQyxFQUFBc0IsRUFBQUMsR0FHQSxHQUZBQyxFQUFBTCxJ
QUVBRCxFQUFBLENBQ0EsR0FBQU8sRUFDQSxRQUFBQyxLQUFBUCxFQUNBTSxFQUFBLEdBQUFFLE9B
QUEscUlBQ0ssQ0FDTCxHQUFBQyxJQUFBUixFQUFBQyxFQUFBdEIsRUFBQUMsRUFBQXNCLEVBQUFD
LEdBQ0FNLEVBQUEsQ0FDQUosR0FBQSxHQUFBRSxPQUFBUixFQUFBVyxRQUFBLGlCQUNBLE1BQUFG
LEdBQUFDLFFBRUFKLEVBQUF4QixLQUFBLHNCQUlBLEtBREF3QixHQUFBTSxZQUFBLEVBQ0FOLEdB
M0JBLEdBQUFELEdBQUEsU0FBQUwsSUErQkF6QixHQUFBRCxRQUFBd0IsR0YwRU0sU0FBVXZCLEVB
QVFELEVBQVNILEdBRWpDLFlHdEhBLElBQUEwQyxHQUFBMUMsRUFBQSxHQVNBMkMsRUFBQUQsQ0Ew
Q0F0QyxHQUFBRCxRQUFBd0MsR0h1SU0sU0FBVXZDLEVBQVFELEVBQVNILEdBRWpDLFlJckxBLFNB
QUE0QyxHQUFBQyxHQUtBLE9BSkFDLEdBQUFDLFVBQUFDLE9BQUEsRUFFQUMsRUFBQSx5QkFBQUos
RUFBQSw2RUFBb0RBLEVBRXBESyxFQUFBLEVBQXNCQSxFQUFBSixFQUFtQkksSUFDekNELEdBQUEs
V0FBQUUsbUJBQUFKLFVBQUFHLEVBQUEsR0FHQUQsSUFBQSxnSEFFQSxJQUFBZCxHQUFBLEdBQUFF
LE9BQUFZLEVBSUEsTUFIQWQsR0FBQXhCLEtBQUEsc0JBQ0F3QixFQUFBTSxZQUFBLEVBRUFOLEVB
R0EvQixFQUFBRCxRQUFBeUMsR0o2TU0sU0FBVXhDLEVBQVFELEVBQVNILEdBRWpDLFlLeE9BLFNB
QUFvRCxHQUFBQyxHQUNBLFVBQUFBLE9BQUFqQixLQUFBaUIsRUFDQSxTQUFBQyxXQUFBLHdEQUdB
LE9BQUF4QyxRQUFBdUMsR0FUQSxHQUFBRSxHQUFBekMsT0FBQXlDLHNCQUNBL0IsRUFBQVYsT0FB
QVMsVUFBQUMsZUFDQWdDLEVBQUExQyxPQUFBUyxVQUFBa0Msb0JBc0RBckQsR0FBQUQsUUE1Q0Es
V0FDQSxJQUNBLElBQUFXLE9BQUE0QyxPQUNBLFFBTUEsSUFBQUMsR0FBQSxHQUFBQyxRQUFBLE1B
RUEsSUFEQUQsRUFBQSxRQUNBLE1BQUE3QyxPQUFBK0Msb0JBQUFGLEdBQUEsR0FDQSxRQUtBLFFB
REFHLE1BQ0F6RCxFQUFBLEVBQWlCQSxFQUFBLEdBQVFBLElBQ3pCeUQsRUFBQSxJQUFBRixPQUFB
RyxhQUFBMUQsS0FLQSxtQkFIQVMsT0FBQStDLG9CQUFBQyxHQUFBRSxJQUFBLFNBQUE3QyxHQUNB
LE1BQUEyQyxHQUFBM0MsS0FFQThDLEtBQUEsSUFDQSxRQUlBLElBQUFDLEtBSUEsT0FIQSx1QkFB
QUMsTUFBQSxJQUFBQyxRQUFBLFNBQUFDLEdBQ0FILEVBQUFHLE9BR0EseUJBREF2RCxPQUFBd0Qs
S0FBQXhELE9BQUE0QyxVQUFrQ1EsSUFBQUQsS0FBQSxJQU1oQyxNQUFBTSxHQUVGLGFBSUF6RCxP
QUFBNEMsT0FBQSxTQUFBYyxFQUFBQyxHQUtBLE9BSkFDLEdBRUFDLEVBREFDLEVBQUF4QixFQUFB
b0IsR0FHQTlDLEVBQUEsRUFBZ0JBLEVBQUFxQixVQUFBQyxPQUFzQnRCLElBQUEsQ0FDdENnRCxF
QUFBNUQsT0FBQWlDLFVBQUFyQixHQUVBLFFBQUFtRCxLQUFBSCxHQUNBbEQsRUFBQWpCLEtBQUFt
RSxFQUFBRyxLQUNBRCxFQUFBQyxHQUFBSCxFQUFBRyxHQUlBLElBQUF0QixFQUFBLENBQ0FvQixF
QUFBcEIsRUFBQW1CLEVBQ0EsUUFBQXJFLEdBQUEsRUFBa0JBLEVBQUFzRSxFQUFBM0IsT0FBb0Iz
QyxJQUN0Q21ELEVBQUFqRCxLQUFBbUUsRUFBQUMsRUFBQXRFLE1BQ0F1RSxFQUFBRCxFQUFBdEUs
SUFBQXFFLEVBQUFDLEVBQUF0RSxNQU1BLE1BQUF1RSxLTDJQTSxTQUFVeEUsRUFBUUQsRUFBU0gs
R0FFakMsWU0xVEEsU0FBQThFLEdBQUFDLEVBQUFDLEdBQ0EsV0FBQUQsRUFBQUUsVUFBQUYsRUFB
QUcsYUFBQUMsS0FBQXZCLE9BQUFvQixJQUFBLElBQUFELEVBQUFFLFVBQUFGLEVBQUFLLFlBQUEs
Z0JBQUFKLEVBQUEsU0FBQUQsRUFBQUUsVUFBQUYsRUFBQUssWUFBQSxpQkFBQUosRUFBQSxJQVVB
LFFBQUFLLEdBQUFDLEdBRUEsSUFEQSxHQUFBQyxHQUNBQSxFQUFBRCxFQUFBRSxvQkFDQUYsRUFB
QUMsQ0FFQSxPQUFBRCxHQU9BLFFBQUFHLEdBQUFDLEVBQUFYLEdBQ0EsR0FBQVksR0FBQU4sRUFB
QUssRUFDQUMsR0FBQUMsVUFBQWIsRUFDQUEsRUFBQWMsR0FBQUYsRUFHQSxRQUFBRyxHQUFBSixH
QUNBLEdBQUFYLEdBQUFXLEVBQUFFLFNBQ0FiLFdBQ0FBLEdBQUFjLEdBQ0FILEVBQUFFLFVBQUEs
TUFrQkEsUUFBQUcsR0FBQUwsRUFBQVgsR0FDQSxLQUFBVyxFQUFBTSxPQUFBQyxFQUFBQyxxQkFB
QSxDQUdBLEdBQUFDLEdBQUFULEVBQUFVLGtCQUNBQyxFQUFBdEIsRUFBQXVCLFVBQ0FDLEdBQUEs
T0FBQTVGLEtBQUF3RixHQUNBLEdBQUFBLEVBQUEzRSxlQUFBYixHQUFBLENBR0EsR0FBQTZGLEdB
QUFMLEVBQUF4RixHQUNBOEYsRUFBQXBCLEVBQUFtQixHQUFBRSxNQUNBLFFBQUFELEVBQUEsQ0FL
QSxLQUFVLE9BQUFKLEVBQW9CQSxJQUFBTSxZQUM5QixHQUFBN0IsRUFBQXVCLEVBQUFJLEdBQUEs
Q0FDQWhCLEVBQUFlLEVBQUFILEVBQ0EsU0FBQUUsR0FJQUssRUFBQSxLQUFBSCxJQUVBZixFQUFB
TSxRQUFBQyxFQUFBQyxxQkFPQSxRQUFBVyxHQUFBOUIsR0FDQSxHQUFBQSxFQUFBYyxHQUNBLE1B
QUFkLEdBQUFjLEVBS0EsS0FEQSxHQUFBaUIsT0FDQS9CLEVBQUFjLElBQUEsQ0FFQSxHQURBaUIs
RUFBQUMsS0FBQWhDLElBQ0FBLEVBQUFpQyxXQUtBLFdBSkFqQyxLQUFBaUMsV0FVQSxJQUZBLEdB
QUFDLEdBQ0F2QixFQUNRWCxJQUFBVyxFQUFBWCxFQUFBYyxJQUE0Q2QsRUFBQStCLEVBQUFJLE1B
Q3BERCxFQUFBdkIsRUFDQW9CLEVBQUE5RCxRQUNBK0MsRUFBQUwsRUFBQVgsRUFJQSxPQUFBa0Ms
R0FPQSxRQUFBRSxHQUFBcEMsR0FDQSxHQUFBVyxHQUFBbUIsRUFBQTlCLEVBQ0EsY0FBQVcsS0FB
QUUsWUFBQWIsRUFDQVcsRUFFQSxLQVFBLFFBQUEwQixHQUFBMUIsR0FLQSxPQUZBdEQsS0FBQXNE
LEVBQUFFLFdBQUFnQixFQUFBLE1BRUFsQixFQUFBRSxVQUNBLE1BQUFGLEdBQUFFLFNBS0EsS0FE
QSxHQUFBa0IsT0FDQXBCLEVBQUFFLFdBQ0FrQixFQUFBQyxLQUFBckIsR0FDQUEsRUFBQTJCLGFB
QUFULEVBQUEsTUFDQWxCLElBQUEyQixXQUtBLE1BQVFQLEVBQUE5RCxPQUFnQjBDLEVBQUFvQixF
QUFBSSxNQUN4Qm5CLEVBQUFMLElBQUFFLFVBR0EsT0FBQUYsR0FBQUUsVUF6S0EsR0FBQWdCLEdB
QUE1RyxFQUFBLEdBRUFzSCxFQUFBdEgsRUFBQSxJQUNBdUgsRUFBQXZILEVBQUEsSUFJQW1GLEdB
RkFuRixFQUFBLEdBRUFzSCxFQUFBRSxtQkFDQXZCLEVBQUFzQixFQUVBMUIsRUFBQSwyQkFBQTRC
LEtBQUFDLFNBQUFDLFNBQUEsSUFBQUMsTUFBQSxHQWtLQUMsR0FDQWhCLDZCQUNBTSxzQkFDQUMs
c0JBQ0FyQixxQkFDQU4sZUFDQUssY0FHQTFGLEdBQUFELFFBQUEwSCxHTjBWTSxTQUFVekgsRUFB
UUQsRUFBU0gsR0FFakMsWU9qaEJBLElBQUE4SCxLQUFBLG9CQUFBQyxpQkFBQUMsV0FBQUQsT0FB
QUMsU0FBQUMsZUFRQUMsR0FFQUosWUFFQUssY0FBQSxvQkFBQUMsUUFFQUMscUJBQUFQLE1BQUFD
LE9BQUFPLG1CQUFBUCxPQUFBUSxhQUVBQyxlQUFBVixLQUFBQyxPQUFBVSxPQUVBQyxZQUFBWixF
QUlBMUgsR0FBQUQsUUFBQStILEdQa2lCTSxTQUFVOUgsRUFBUUQsRUFBU0gsR0FFakMsWVF6akJB
LFNBQUEySSxHQUFBQyxHQUNBLGtCQUNBLE1BQUFBLElBU0EsR0FBQWxHLEdBQUEsWUFFQUEsR0FB
QW1HLFlBQUFGLEVBQ0FqRyxFQUFBb0csaUJBQUFILEdBQUEsR0FDQWpHLEVBQUFxRyxnQkFBQUos
R0FBQSxHQUNBakcsRUFBQXNHLGdCQUFBTCxFQUFBLE1BQ0FqRyxFQUFBdUcsZ0JBQUEsV0FDQSxN
QUFBQyxPQUVBeEcsRUFBQXlHLG9CQUFBLFNBQUFQLEdBQ0EsTUFBQUEsSUFHQXhJLEVBQUFELFFB
QUF1QyxHUjJrQk0sU0FBVXRDLEVBQVFELEVBQVNILEdBRWpDLFlTbm1CQSxJQUFBb0osR0FBQSxJ
QU9BaEosR0FBQUQsU0FBa0JpSixjVHVuQlosU0FBVWhKLEVBQVFELEVBQVNILEdBRWpDLFlVam5C
QSxTQUFBcUosS0FDQUMsRUFBQUMsMkJBQUFDLEdBQUE1QyxFQUFBLE9BaUNBLFFBQUE2QyxLQUNB
UCxLQUFBUSwwQkFDQVIsS0FBQVMsc0JBQUEsS0FDQVQsS0FBQVUsY0FBQUMsRUFBQUMsWUFDQVos
S0FBQWEscUJBQUFULEVBQUFDLDBCQUFBTyxXQUNBLEdBeUJBLFFBQUFFLEdBQUFDLEVBQUFuSSxF
QUFBQyxFQUFBdEIsRUFBQUMsRUFBQXNCLEdBRUEsTUFEQXFILEtBQ0FHLEVBQUFRLGVBQUFDLEVB
QUFuSSxFQUFBQyxFQUFBdEIsRUFBQUMsRUFBQXNCLEdBVUEsUUFBQWtJLEdBQUFDLEVBQUFDLEdB
Q0EsTUFBQUQsR0FBQUUsWUFBQUQsRUFBQUMsWUFHQSxRQUFBQyxHQUFBQyxHQUNBLEdBQUFDLEdB
QUFELEVBQUFaLHFCQUNBYSxLQUFBQyxFQUFBekgsUUFBQTRELEVBQUEsTUFBQTRELEVBQUFDLEVB
QUF6SCxRQUtBeUgsRUFBQUMsS0FBQVIsR0FPQVMsR0FFQSxRQUFBdEssR0FBQSxFQUFpQkEsRUFB
QW1LLEVBQVNuSyxJQUFBLENBSTFCLEdBQUFpRixHQUFBbUYsRUFBQXBLLEdBS0F1SyxFQUFBdEYs
RUFBQXVGLGlCQUNBdkYsR0FBQXVGLGtCQUFBLElBRUEsSUFBQUMsRUFDQSxJQUFBQyxFQUFBQyxt
QkFBQSxDQUNBLEdBQUFDLEdBQUEzRixDQUVBQSxHQUFBNEYsZ0JBQUFDLEtBQUFDLHlCQUNBSCxF
QUFBM0YsRUFBQUUsb0JBRUFzRixFQUFBLGlCQUFBRyxFQUFBSSxVQUNBQyxRQUFBQyxLQUFBVCxH
QVNBLEdBTkFVLEVBQUFDLHlCQUFBbkcsRUFBQWlGLEVBQUFSLHFCQUFBWSxHQUVBRyxHQUNBUSxR
QUFBSSxRQUFBWixHQUdBRixFQUNBLE9BQUFlLEdBQUEsRUFBcUJBLEVBQUFmLEVBQUE1SCxPQUFz
QjJJLElBQzNDcEIsRUFBQVgsY0FBQWdDLFFBQUFoQixFQUFBZSxHQUFBckcsRUFBQXVHLHNCQWdD
QSxRQUFBQyxHQUFBeEcsR0FTQSxHQVJBK0QsS0FRQUcsRUFBQXVDLGtCQUVBLFdBREF2QyxHQUFB
USxlQUFBOEIsRUFBQXhHLEVBSUFtRixHQUFBMUQsS0FBQXpCLEdBQ0EsTUFBQUEsRUFBQTBHLHFC
QUNBMUcsRUFBQTBHLG1CQUFBckIsRUFBQSxHQVFBLFFBQUFzQixHQUFBaEMsRUFBQWlDLEdBQ0Ex
QyxFQUFBdUMsbUJBQUFuRixFQUFBLE9BQ0F1RixFQUFBUCxRQUFBM0IsRUFBQWlDLEdBQ0FFLEdB
QUEsRUE1TUEsR0FBQXhGLEdBQUE1RyxFQUFBLEdBQ0FxTSxFQUFBck0sRUFBQSxHQUVBNkosRUFB
QTdKLEVBQUEsSUFDQXNNLEVBQUF0TSxFQUFBLElBQ0ErSyxFQUFBL0ssRUFBQSxJQUNBd0wsRUFB
QXhMLEVBQUEsSUFDQXVNLEVBQUF2TSxFQUFBLElBSUF5SyxHQUZBekssRUFBQSxPQUdBMkssRUFB
QSxFQUNBd0IsRUFBQXRDLEVBQUFDLFlBQ0FzQyxHQUFBLEVBRUE1QyxFQUFBLEtBTUFnRCxHQUNB
QyxXQUFBLFdBQ0F2RCxLQUFBUyxzQkFBQWMsRUFBQXpILFFBRUEwSixNQUFBLFdBQ0F4RCxLQUFB
Uyx3QkFBQWMsRUFBQXpILFFBTUF5SCxFQUFBa0MsT0FBQSxFQUFBekQsS0FBQVMsdUJBQ0FpRCxL
QUVBbkMsRUFBQXpILE9BQUEsSUFLQTZKLEdBQ0FKLFdBQUEsV0FDQXZELEtBQUFVLGNBQUFrRCxT
QUVBSixNQUFBLFdBQ0F4RCxLQUFBVSxjQUFBbUQsY0FJQUMsR0FBQVIsRUFBQUssRUFVQVIsR0FB
QTVDLEVBQUFsSSxVQUFBZ0wsR0FDQVUsdUJBQUEsV0FDQSxNQUFBRCxJQUdBRSxXQUFBLFdBQ0Fo
RSxLQUFBUyxzQkFBQSxLQUNBRSxFQUFBc0QsUUFBQWpFLEtBQUFVLGVBQ0FWLEtBQUFVLGNBQUEs
S0FDQU4sRUFBQUMsMEJBQUE0RCxRQUFBakUsS0FBQWEsc0JBQ0FiLEtBQUFhLHFCQUFBLE1BR0Fx
RCxRQUFBLFNBQUFDLEVBQUFDLEVBQUF4TCxHQUdBLE1BQUF5SyxHQUFBYSxRQUFBN00sS0FBQTJJ
LFVBQUFhLHFCQUFBcUQsUUFBQWxFLEtBQUFhLHFCQUFBc0QsRUFBQUMsRUFBQXhMLE1BSUF3SyxF
QUFBaUIsYUFBQTlELEVBdUVBLElBQUFtRCxHQUFBLFdBS0EsS0FBQW5DLEVBQUF6SCxRQUFBb0os
R0FBQSxDQUNBLEdBQUEzQixFQUFBekgsT0FBQSxDQUNBLEdBQUF1SCxHQUFBZCxFQUFBSyxXQUNB
UyxHQUFBNkMsUUFBQTlDLEVBQUEsS0FBQUMsR0FDQWQsRUFBQTBELFFBQUE1QyxHQUdBLEdBQUE2
QixFQUFBLENBQ0FBLEdBQUEsQ0FDQSxJQUFBb0IsR0FBQXJCLENBQ0FBLEdBQUF0QyxFQUFBQyxZ
QUNBMEQsRUFBQVQsWUFDQWxELEVBQUFzRCxRQUFBSyxNQXVDQUMsR0FDQUMsMkJBQUEsU0FBQUMs
R0FDQUEsR0FBQS9HLEVBQUEsT0FDQTBDLEVBQUFDLDBCQUFBb0UsR0FHQUMsdUJBQUEsU0FBQUMs
R0FDQUEsR0FBQWpILEVBQUEsT0FDQSxtQkFBQWlILEdBQUE3RCxnQkFBQXBELEVBQUEsT0FDQSxr
QkFBQWlILEdBQUE5QixtQkFBQW5GLEVBQUEsT0FDQTRDLEVBQUFxRSxJQUlBdkUsR0FPQUMsMEJB
QUEsS0FFQVMsaUJBQ0E4QixnQkFDQWMsc0JBQ0FrQixVQUFBTCxFQUNBeEIsT0FHQTdMLEdBQUFE
LFFBQUFtSixHVm9wQk0sU0FBVWxKLEVBQVFELEVBQVNILEdBRWpDLFlXNzRCQUksR0FBQUQsUUFB
QUgsRUFBQSxLWHE1Qk0sU0FBVUksRUFBUUQsRUFBU0gsR0FFakMsWVl0NEJBLElBQUErTixJQUtB
QyxRQUFBLEtBR0E1TixHQUFBRCxRQUFBNE4sR1o4NUJNLFNBQVUzTixFQUFRRCxFQUFTSCxHQUVq
QyxZYTkzQkEsU0FBQWlPLEdBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEdBUUFuRixLQUFBZ0YsaUJB
Q0FoRixLQUFBb0YsWUFBQUgsRUFDQWpGLEtBQUFrRixhQUVBLElBQUFHLEdBQUFyRixLQUFBc0Ys
WUFBQUQsU0FDQSxRQUFBRSxLQUFBRixHQUNBLEdBQUFBLEVBQUEvTSxlQUFBaU4sR0FBQSxDQU1B
LEdBQUFDLEdBQUFILEVBQUFFLEVBQ0FDLEdBQ0F4RixLQUFBdUYsR0FBQUMsRUFBQU4sR0FFQSxX
QUFBSyxFQUNBdkYsS0FBQTFFLE9BQUE2SixFQUVBbkYsS0FBQXVGLEdBQUFMLEVBQUFLLEdBS0Es
R0FBQUUsR0FBQSxNQUFBUCxFQUFBTyxpQkFBQVAsRUFBQU8sa0JBQUEsSUFBQVAsRUFBQVEsV0FP
QSxPQUxBMUYsTUFBQTJGLG1CQURBRixFQUNBak0sRUFBQXFHLGdCQUVBckcsRUFBQW9HLGlCQUVB
SSxLQUFBNEYscUJBQUFwTSxFQUFBb0csaUJBQ0FJLEtBeEZBLEdBQUFtRCxHQUFBck0sRUFBQSxH
QUVBc00sRUFBQXRNLEVBQUEsSUFFQTBDLEVBQUExQyxFQUFBLEdBTUErTyxHQUxBL08sRUFBQSxJ
QUtBLHFJQU1BZ1AsR0FDQTdELEtBQUEsS0FDQTNHLE9BQUEsS0FFQXlLLGNBQUF2TSxFQUFBc0cs
Z0JBQ0FrRyxXQUFBLEtBQ0FDLFFBQUEsS0FDQUMsV0FBQSxLQUNBQyxVQUFBLFNBQUFDLEdBQ0Es
TUFBQUEsR0FBQUQsV0FBQUUsS0FBQUMsT0FFQWIsaUJBQUEsS0FDQWMsVUFBQSxLQStEQXBELEdB
QUE0QixFQUFBMU0sV0FDQW1PLGVBQUEsV0FDQXhHLEtBQUF5RixrQkFBQSxDQUNBLElBQUFXLEdB
QUFwRyxLQUFBa0YsV0FDQWtCLEtBSUFBLEVBQUFJLGVBQ0FKLEVBQUFJLGlCQUVLLGtCQUFBSixH
QUFBVixjQUNMVSxFQUFBVixhQUFBLEdBRUExRixLQUFBMkYsbUJBQUFuTSxFQUFBcUcsa0JBR0E0
RyxnQkFBQSxXQUNBLEdBQUFMLEdBQUFwRyxLQUFBa0YsV0FDQWtCLEtBSUFBLEVBQUFLLGdCQUNB
TCxFQUFBSyxrQkFFSyxrQkFBQUwsR0FBQU0sZUFNTE4sRUFBQU0sY0FBQSxHQUdBMUcsS0FBQTRG
LHFCQUFBcE0sRUFBQXFHLGtCQVFBOEcsUUFBQSxXQUNBM0csS0FBQTRHLGFBQUFwTixFQUFBcUcs
aUJBUUErRyxhQUFBcE4sRUFBQW9HLGlCQUtBb0UsV0FBQSxXQUNBLEdBQUFxQixHQUFBckYsS0FB
QXNGLFlBQUFELFNBQ0EsUUFBQUUsS0FBQUYsR0FJQXJGLEtBQUF1RixHQUFBLElBR0EsUUFBQXBP
LEdBQUEsRUFBbUJBLEVBQUEwTyxFQUFBL0wsT0FBdUMzQyxJQUMxRDZJLEtBQUE2RixFQUFBMU8s
SUFBQSxRQVVBNE4sRUFBQU0sVUFBQVMsRUErQkFmLEVBQUE4QixhQUFBLFNBQUFDLEVBQUF6QixH
QUNBLEdBQUEwQixHQUFBL0csS0FFQWdILEVBQUEsWUFDQUEsR0FBQTNPLFVBQUEwTyxFQUFBMU8s
U0FDQSxJQUFBQSxHQUFBLEdBQUEyTyxFQUVBN0QsR0FBQTlLLEVBQUF5TyxFQUFBek8sV0FDQXlP
LEVBQUF6TyxZQUNBeU8sRUFBQXpPLFVBQUFpTixZQUFBd0IsRUFFQUEsRUFBQXpCLFVBQUFsQyxL
QUE4QjRELEVBQUExQixhQUM5QnlCLEVBQUFELGFBQUFFLEVBQUFGLGFBRUF6RCxFQUFBaUIsYUFB
QXlDLEVBQUExRCxFQUFBNkQscUJBR0E3RCxFQUFBaUIsYUFBQVUsRUFBQTNCLEVBQUE2RCxvQkFF
QS9QLEVBQUFELFFBQUE4TixHYmsrQk0sU0FBVTdOLEVBQVFELEVBQVNILEdBRWpDLFljN3JDQSxJ
QUFBNEcsR0FBQTVHLEVBQUEsR0FXQW9RLEdBVEFwUSxFQUFBLEdBU0EsU0FBQXFRLEdBQ0EsR0FB
QUMsR0FBQXBILElBQ0EsSUFBQW9ILEVBQUFDLGFBQUF2TixPQUFBLENBQ0EsR0FBQXdOLEdBQUFG
LEVBQUFDLGFBQUFySixLQUVBLE9BREFvSixHQUFBL1AsS0FBQWlRLEVBQUFILEdBQ0FHLEVBRUEs
VUFBQUYsR0FBQUQsS0FJQUksRUFBQSxTQUFBQyxFQUFBQyxHQUNBLEdBQUFMLEdBQUFwSCxJQUNB
LElBQUFvSCxFQUFBQyxhQUFBdk4sT0FBQSxDQUNBLEdBQUF3TixHQUFBRixFQUFBQyxhQUFBckos
S0FFQSxPQURBb0osR0FBQS9QLEtBQUFpUSxFQUFBRSxFQUFBQyxHQUNBSCxFQUVBLFVBQUFGLEdB
QUFJLEVBQUFDLElBSUFDLEVBQUEsU0FBQUYsRUFBQUMsRUFBQUUsR0FDQSxHQUFBUCxHQUFBcEgs
SUFDQSxJQUFBb0gsRUFBQUMsYUFBQXZOLE9BQUEsQ0FDQSxHQUFBd04sR0FBQUYsRUFBQUMsYUFB
QXJKLEtBRUEsT0FEQW9KLEdBQUEvUCxLQUFBaVEsRUFBQUUsRUFBQUMsRUFBQUUsR0FDQUwsRUFF
QSxVQUFBRixHQUFBSSxFQUFBQyxFQUFBRSxJQUlBVixFQUFBLFNBQUFPLEVBQUFDLEVBQUFFLEVB
QUFDLEdBQ0EsR0FBQVIsR0FBQXBILElBQ0EsSUFBQW9ILEVBQUFDLGFBQUF2TixPQUFBLENBQ0Es
R0FBQXdOLEdBQUFGLEVBQUFDLGFBQUFySixLQUVBLE9BREFvSixHQUFBL1AsS0FBQWlRLEVBQUFF
LEVBQUFDLEVBQUFFLEVBQUFDLEdBQ0FOLEVBRUEsVUFBQUYsR0FBQUksRUFBQUMsRUFBQUUsRUFB
QUMsSUFJQUMsRUFBQSxTQUFBUCxHQUNBLEdBQUFGLEdBQUFwSCxJQUNBc0gsYUFBQUYsSUFBQTFK
LEVBQUEsTUFDQTRKLEVBQUF0RCxhQUNBb0QsRUFBQUMsYUFBQXZOLE9BQUFzTixFQUFBVSxVQUNB
VixFQUFBQyxhQUFBeEosS0FBQXlKLElBS0FTLEVBQUFiLEVBV0E3QyxFQUFBLFNBQUEyRCxFQUFB
QyxHQUdBLEdBQUFDLEdBQUFGLENBT0EsT0FOQUUsR0FBQWIsZ0JBQ0FhLEVBQUF0SCxVQUFBcUgs
R0FBQUYsRUFDQUcsRUFBQUosV0FDQUksRUFBQUosU0FuQkEsSUFxQkFJLEVBQUFqRSxRQUFBNEQs
RUFDQUssR0FHQTlFLEdBQ0FpQixlQUNBNkMsb0JBQ0FLLG9CQUNBRyxzQkFDQVQscUJBR0EvUCxH
QUFBRCxRQUFBbU0sR2Qrc0NNLFNBQVVsTSxFQUFRRCxFQUFTSCxHQUVqQyxZZW56Q0EsSUFBQXFN
LEdBQUFyTSxFQUFBLEdBRUFxUixFQUFBclIsRUFBQSxJQUNBc1IsRUFBQXRSLEVBQUEsS0FDQXVS
LEVBQUF2UixFQUFBLEtBQ0F3UixFQUFBeFIsRUFBQSxJQUNBeVIsRUFBQXpSLEVBQUEsS0FDQTBS
LEVBQUExUixFQUFBLEtBRUEyUixFQUFBM1IsRUFBQSxLQUNBNFIsRUFBQTVSLEVBQUEsS0FFQWlJ
LEVBQUF1SixFQUFBdkosY0FDQTRKLEVBQUFMLEVBQUFLLGNBQ0FDLEVBQUFOLEVBQUFNLGFBWUFD
LEVBQUExRixFQUNBMkYsRUFBQSxTQUFBQyxHQUNBLE1BQUFBLElBbUJBQyxHQUdBQyxVQUNBbk8s
SUFBQXNOLEVBQUF0TixJQUNBSSxRQUFBa04sRUFBQWxOLFFBQ0FnTyxNQUFBZCxFQUFBYyxNQUNB
QyxRQUFBZixFQUFBZSxRQUNBQyxLQUFBVixHQUdBVyxVQUFBbEIsRUFBQWtCLFVBQ0FDLGNBQUFu
QixFQUFBbUIsY0FFQXZLLGdCQUNBNkosZUFDQVcsZUFBQWpCLEVBQUFpQixlQUlBQyxVQUFBakIs
RUFDQWtCLFlBQUFoQixFQUNBRSxnQkFDQUcsY0FJQVksSUFBQXJCLEVBRUFzQixRQUFBbkIsRUFH
QUssV0F1Q0EzUixHQUFBRCxRQUFBK1IsR2ZvMENNLFNBQVU5UixFQUFRRCxFQUFTSCxHQUVqQyxZ
Z0J6NkNBLFNBQUE4UyxHQUFBQyxHQVNBLFdBQUEzUSxLQUFBMlEsRUFBQUMsSUFHQSxRQUFBQyxH
QUFBRixHQVNBLFdBQUEzUSxLQUFBMlEsRUFBQWxPLElBeENBLEdBQUF3SCxHQUFBck0sRUFBQSxH
QUVBK04sRUFBQS9OLEVBQUEsSUFJQXdCLEdBRkF4QixFQUFBLEdBQ0FBLEVBQUEsSUFDQWMsT0FB
QVMsVUFBQUMsZ0JBRUEwUixFQUFBbFQsRUFBQSxJQUVBbVQsR0FDQXRPLEtBQUEsRUFDQW1PLEtB
QUEsRUFDQUksUUFBQSxFQUNBQyxVQUFBLEdBNkVBN0IsRUFBQSxTQUFBckcsRUFBQXRHLEVBQUFt
TyxFQUFBTSxFQUFBN08sRUFBQThPLEVBQUFDLEdBQ0EsR0FBQUMsSUFFQUMsU0FBQVIsRUFHQS9I
LE9BQ0F0RyxNQUNBbU8sTUFDQVEsUUFHQUcsT0FBQUosRUErQ0EsT0FBQUUsR0FPQWpDLEdBQUF2
SixjQUFBLFNBQUFrRCxFQUFBNEgsRUFBQTVNLEdBQ0EsR0FBQXNJLEdBR0ErRSxLQUVBM08sRUFB
QSxLQUNBbU8sRUFBQSxJQUlBLFVBQUFELEVBQUEsQ0FDQUQsRUFBQUMsS0FDQUMsRUFBQUQsRUFB
QUMsS0FFQUMsRUFBQUYsS0FDQWxPLEVBQUEsR0FBQWtPLEVBQUFsTyxTQUdBekMsS0FBQTJRLEVB
QUFLLE9BQUEsS0FBQUwsRUFBQUssV0FDQWhSLEtBQUEyUSxFQUFBTSxTQUFBLEtBQUFOLEVBQUFN
LFFBRUEsS0FBQTVFLElBQUFzRSxHQUNBdlIsRUFBQWpCLEtBQUF3UyxFQUFBdEUsS0FBQTBFLEVB
QUEzUixlQUFBaU4sS0FDQStFLEVBQUEvRSxHQUFBc0UsRUFBQXRFLElBT0EsR0FBQW1GLEdBQUE3
USxVQUFBQyxPQUFBLENBQ0EsUUFBQTRRLEVBQ0FKLEVBQUFyTixlQUNHLElBQUF5TixFQUFBLEdB
RUgsT0FEQUMsR0FBQUMsTUFBQUYsR0FDQXZULEVBQUEsRUFBbUJBLEVBQUF1VCxFQUFvQnZULElB
Q3ZDd1QsRUFBQXhULEdBQUEwQyxVQUFBMUMsRUFBQSxFQU9BbVQsR0FBQXJOLFNBQUEwTixFQUlB
LEdBQUExSSxLQUFBNEksYUFBQSxDQUNBLEdBQUFBLEdBQUE1SSxFQUFBNEksWUFDQSxLQUFBdEYs
SUFBQXNGLE9BQ0EzUixLQUFBb1IsRUFBQS9FLEtBQ0ErRSxFQUFBL0UsR0FBQXNGLEVBQUF0RixJ
QWlCQSxNQUFBK0MsR0FBQXJHLEVBQUF0RyxFQUFBbU8sRUFBQU0sRUFBQTdPLEVBQUFzSixFQUFB
QyxRQUFBd0YsSUFPQWhDLEVBQUFLLGNBQUEsU0FBQTFHLEdBQ0EsR0FBQTZJLEdBQUF4QyxFQUFB
dkosY0FBQWdNLEtBQUEsS0FBQTlJLEVBT0EsT0FEQTZJLEdBQUE3SSxPQUNBNkksR0FHQXhDLEVB
QUEwQyxtQkFBQSxTQUFBQyxFQUFBQyxHQUdBLE1BRkE1QyxHQUFBMkMsRUFBQWhKLEtBQUFpSixF
QUFBRCxFQUFBbkIsSUFBQW1CLEVBQUFFLE1BQUFGLEVBQUFHLFFBQUFILEVBQUFSLE9BQUFRLEVB
QUFYLFFBU0FoQyxFQUFBTSxhQUFBLFNBQUEyQixFQUFBVixFQUFBNU0sR0FDQSxHQUFBc0ksR0FH
QStFLEVBQUFuSCxLQUF3Qm9ILEVBQUFELE9BR3hCM08sRUFBQTRPLEVBQUE1TyxJQUNBbU8sRUFB
QVMsRUFBQVQsSUFTQU8sR0FQQUUsRUFBQVksTUFJQVosRUFBQWEsUUFHQWIsRUFBQUUsT0FFQSxV
QUFBWixFQUFBLENBQ0FELEVBQUFDLEtBRUFDLEVBQUFELEVBQUFDLElBQ0FPLEVBQUF4RixFQUFB
QyxTQUVBaUYsRUFBQUYsS0FDQWxPLEVBQUEsR0FBQWtPLEVBQUFsTyxJQUlBLElBQUFrUCxFQUNB
TixHQUFBdEksTUFBQXNJLEVBQUF0SSxLQUFBNEksZUFDQUEsRUFBQU4sRUFBQXRJLEtBQUE0SSxh
QUVBLEtBQUF0RixJQUFBc0UsR0FDQXZSLEVBQUFqQixLQUFBd1MsRUFBQXRFLEtBQUEwRSxFQUFB
M1IsZUFBQWlOLFNBQ0FyTSxLQUFBMlEsRUFBQXRFLFFBQUFyTSxLQUFBMlIsRUFFQVAsRUFBQS9F
LEdBQUFzRixFQUFBdEYsR0FFQStFLEVBQUEvRSxHQUFBc0UsRUFBQXRFLElBUUEsR0FBQW1GLEdB
QUE3USxVQUFBQyxPQUFBLENBQ0EsUUFBQTRRLEVBQ0FKLEVBQUFyTixlQUNHLElBQUF5TixFQUFB
LEdBRUgsT0FEQUMsR0FBQUMsTUFBQUYsR0FDQXZULEVBQUEsRUFBbUJBLEVBQUF1VCxFQUFvQnZU
LElBQ3ZDd1QsRUFBQXhULEdBQUEwQyxVQUFBMUMsRUFBQSxFQUVBbVQsR0FBQXJOLFNBQUEwTixF
QUdBLE1BQUFyQyxHQUFBaUMsRUFBQXRJLEtBQUF0RyxFQUFBbU8sRUFBQU0sRUFBQTdPLEVBQUE4
TyxFQUFBQyxJQVVBaEMsRUFBQWlCLGVBQUEsU0FBQXBSLEdBQ0EsdUJBQUFBLElBQUEsT0FBQUEs
S0FBQXFTLFdBQUFSLEdBR0E5UyxFQUFBRCxRQUFBcVIsR2hCNjhDTSxTQUFVcFIsRUFBUUQsRUFB
U0gsR0FFakMsWWlCbHhEQSxTQUFBdVUsR0FBQUMsRUFBQUMsR0FDQSxPQUFBRCxFQUFBQyxPQUxB
LEdBQUE3TixHQUFBNUcsRUFBQSxHQVFBMFUsR0FOQTFVLEVBQUEsSUFXQTJVLGtCQUFBLEVBQ0FD
LGtCQUFBLEVBQ0FDLGtCQUFBLEVBQ0FDLDJCQUFBLEdBQ0FDLDZCQUFBLEdBOEJBQyx3QkFBQSxT
QUFBQyxHQUNBLEdBQUFDLEdBQUFSLEVBQ0FTLEVBQUFGLEVBQUFFLGVBQ0FDLEVBQUFILEVBQUFH
LDJCQUNBQyxFQUFBSixFQUFBSSxzQkFDQUMsRUFBQUwsRUFBQUsscUJBQ0FDLEVBQUFOLEVBQUFN
LHNCQUVBTixHQUFBTyxtQkFDQWxPLEVBQUFtTyw0QkFBQTFPLEtBQUFrTyxFQUFBTyxrQkFHQSxR
QUFBL0csS0FBQTBHLEdBQUEsQ0FDQTdOLEVBQUFvTyxXQUFBbFUsZUFBQWlOLElBQUE3SCxFQUFB
LEtBQUE2SCxFQUVBLElBQUFrSCxHQUFBbEgsRUFBQW1ILGNBQ0FDLEVBQUFWLEVBQUExRyxHQUVB
cUgsR0FDQUMsY0FBQUosRUFDQUssbUJBQUEsS0FDQUMsYUFBQXhILEVBQ0F5SCxlQUFBLEtBRUFD
LGdCQUFBNUIsRUFBQXNCLEVBQUFYLEVBQUFQLG1CQUNBeUIsZ0JBQUE3QixFQUFBc0IsRUFBQVgs
RUFBQU4sbUJBQ0F5QixnQkFBQTlCLEVBQUFzQixFQUFBWCxFQUFBTCxtQkFDQXlCLHdCQUFBL0Is
RUFBQXNCLEVBQUFYLEVBQUFKLDRCQUNBeUIsMEJBQUFoQyxFQUFBc0IsRUFBQVgsRUFBQUgsOEJB
UUEsSUFOQWUsRUFBQU0sZ0JBQUFOLEVBQUFPLGdCQUFBUCxFQUFBUywyQkFBQSxHQUFBM1AsRUFB
QSxLQUFBNkgsR0FNQTRHLEVBQUE3VCxlQUFBaU4sR0FBQSxDQUNBLEdBQUFzSCxHQUFBVixFQUFB
NUcsRUFDQXFILEdBQUFDLGdCQU1BWCxFQUFBNVQsZUFBQWlOLEtBQ0FxSCxFQUFBRSxtQkFBQVos
RUFBQTNHLElBR0E2RyxFQUFBOVQsZUFBQWlOLEtBQ0FxSCxFQUFBRyxhQUFBWCxFQUFBN0csSUFH
QThHLEVBQUEvVCxlQUFBaU4sS0FDQXFILEVBQUFJLGVBQUFYLEVBQUE5RyxJQUdBbkgsRUFBQW9P
LFdBQUFqSCxHQUFBcUgsTUFNQVUsRUFBQSxnTEFnQkFsUCxHQUNBRSxrQkFBQSxlQUNBaVAsb0JB
QUEsaUJBRUFELDRCQUNBRSxvQkFBQUYsRUFBQSwrQ0E4QkFkLGNBV0FpQix3QkFBNkYsS0FLN0Zs
QiwrQkFNQUQsa0JBQUEsU0FBQU8sR0FDQSxPQUFBMVYsR0FBQSxFQUFtQkEsRUFBQWlILEVBQUFt
Tyw0QkFBQXpTLE9BQW9EM0MsSUFBQSxDQUV2RSxJQUFBdVcsRUFEQXRQLEVBQUFtTyw0QkFBQXBW
LElBQ0EwVixHQUNBLFNBR0EsVUFHQWpJLFVBQUE0RyxFQUdBdFUsR0FBQUQsUUFBQW1ILEdqQnV5
RE0sU0FBVWxILEVBQVFELEVBQVNILEdBRWpDLFlrQm4rREEsU0FBQTZXLEtBQ0FDLEVBQUFELFdB
QUEzTixVQUFBZ0MsaUJBVkEsR0FBQTRMLEdBQUE5VyxFQUFBLEtBYUF3TCxHQVpBeEwsRUFBQSxH
QUVBQSxFQUFBLElBc0JBK1csZUFBQSxTQUFBQyxFQUFBek0sRUFBQTBNLEVBQUFDLEVBQUFoTCxF
QUFBaUwsR0FPQSxHQUFBQyxHQUFBSixFQUFBRCxlQUFBeE0sRUFBQTBNLEVBQUFDLEVBQUFoTCxF
QUFBaUwsRUFTQSxPQVJBSCxHQUFBOUwsaUJBQUEsTUFBQThMLEVBQUE5TCxnQkFBQThILEtBQ0F6
SSxFQUFBOE0scUJBQUF6TCxRQUFBaUwsRUFBQUcsR0FPQUksR0FPQUUsWUFBQSxTQUFBTixHQUNB
LE1BQUFBLEdBQUFNLGVBU0FDLGlCQUFBLFNBQUFQLEVBQUFRLEdBTUFWLEVBQUFXLFdBQUFULElB
QUE5TCxpQkFDQThMLEVBQUFPLGlCQUFBQyxJQWlCQUUsaUJBQUEsU0FBQVYsRUFBQVcsRUFBQXBO
LEVBQUEyQixHQUNBLEdBQUEwTCxHQUFBWixFQUFBOUwsZUFFQSxJQUFBeU0sSUFBQUMsR0FBQTFM
LElBQUE4SyxFQUFBYSxTQUFBLENBb0JBLEdBQUFDLEdBQUFoQixFQUFBaUIsaUJBQUFILEVBQUFE
LEVBRUFHLElBQ0FoQixFQUFBVyxXQUFBVCxFQUFBWSxHQUdBWixFQUFBVSxpQkFBQUMsRUFBQXBO
LEVBQUEyQixHQUVBNEwsR0FBQWQsRUFBQTlMLGlCQUFBLE1BQUE4TCxFQUFBOUwsZ0JBQUE4SCxL
QUNBekksRUFBQThNLHFCQUFBekwsUUFBQWlMLEVBQUFHLEtBaUJBdkwseUJBQUEsU0FBQXVMLEVB
QUF6TSxFQUFBSSxHQUNBcU0sRUFBQWhMLHFCQUFBckIsR0FXQXFNLEVBQUF2TCx5QkFBQWxCLEtB
U0FuSyxHQUFBRCxRQUFBcUwsR2xCNi9ETSxTQUFVcEwsRUFBUUQsRUFBU0gsR0FFakMsWW1Cam9F
QSxTQUFBZ1ksR0FBQUMsR0FDQSxHQUFBQyxFQUFBLENBR0EsR0FBQW5ULEdBQUFrVCxFQUFBbFQs
S0FDQW9CLEVBQUE4UixFQUFBOVIsUUFDQSxJQUFBQSxFQUFBbkQsT0FDQSxPQUFBM0MsR0FBQSxF
QUFtQkEsRUFBQThGLEVBQUFuRCxPQUFxQjNDLElBQ3hDOFgsRUFBQXBULEVBQUFvQixFQUFBOUYs
R0FBQSxVQUVHLE9BQUE0WCxFQUFBRyxLQUNIQyxFQUFBdFQsRUFBQWtULEVBQUFHLE1BQ0csTUFB
QUgsRUFBQUssTUFDSEMsRUFBQXhULEVBQUFrVCxFQUFBSyxPQW9CQSxRQUFBRSxHQUFBQyxFQUFB
QyxHQUNBRCxFQUFBelIsV0FBQTJSLGFBQUFELEVBQUEzVCxLQUFBMFQsR0FDQVQsRUFBQVUsR0FH
QSxRQUFBRSxHQUFBQyxFQUFBQyxHQUNBWixFQUNBVyxFQUFBMVMsU0FBQVksS0FBQStSLEdBRUFE
LEVBQUE5VCxLQUFBZ1UsWUFBQUQsRUFBQS9ULE1BSUEsUUFBQWlVLEdBQUFmLEVBQUFHLEdBQ0FG
LEVBQ0FELEVBQUFHLE9BRUFDLEVBQUFKLEVBQUFsVCxLQUFBcVQsR0FJQSxRQUFBYSxHQUFBaEIs
RUFBQUssR0FDQUosRUFDQUQsRUFBQUssT0FFQUMsRUFBQU4sRUFBQWxULEtBQUF1VCxHQUlBLFFB
QUEzUSxLQUNBLE1BQUF1QixNQUFBbkUsS0FBQW1VLFNBR0EsUUFBQUMsR0FBQXBVLEdBQ0EsT0FD
QUEsT0FDQW9CLFlBQ0FpUyxLQUFBLEtBQ0FFLEtBQUEsS0FDQTNRLFlBOUZBLEdBQUF5UixHQUFB
cFosRUFBQSxJQUNBcVksRUFBQXJZLEVBQUEsSUFFQXFaLEVBQUFyWixFQUFBLElBQ0F1WSxFQUFB
dlksRUFBQSxJQWdCQWtZLEVBQUEsb0JBQUFsUSxXQUFBLGlCQUFBQSxVQUFBc1IsY0FBQSxvQkFB
QUMsWUFBQSxpQkFBQUEsV0FBQUMsV0FBQSxhQUFBQyxLQUFBRixVQUFBQyxXQW1CQXJCLEVBQUFr
QixFQUFBLFNBQUFyUyxFQUFBaVIsRUFBQXlCLEdBaENBLEtBdUNBekIsRUFBQWxULEtBQUFFLFVB
eENBLElBd0NBZ1QsRUFBQWxULEtBQUFFLFVBQUEsV0FBQWdULEVBQUFsVCxLQUFBbVUsU0FBQXRE
LGdCQUFBLE1BQUFxQyxFQUFBbFQsS0FBQTRVLGNBQUExQixFQUFBbFQsS0FBQTRVLGVBQUFQLEVB
QUFoQixPQUNBSixFQUFBQyxHQUNBalIsRUFBQTRTLGFBQUEzQixFQUFBbFQsS0FBQTJVLEtBRUEx
UyxFQUFBNFMsYUFBQTNCLEVBQUFsVCxLQUFBMlUsR0FDQTFCLEVBQUFDLEtBK0NBa0IsR0FBQWhC
LG1CQUNBZ0IsRUFBQVgsdUJBQ0FXLEVBQUFQLGFBQ0FPLEVBQUFILFlBQ0FHLEVBQUFGLFlBRUE3
WSxFQUFBRCxRQUFBZ1osR25Cd3FFTSxTQUFVL1ksRUFBUUQsRUFBU0gsR0FFakMsWW9CM3dFQSxT
QUFBNEMsR0FBQUMsR0FLQSxPQUpBQyxHQUFBQyxVQUFBQyxPQUFBLEVBRUFDLEVBQUEseUJBQUFK
LEVBQUEsNkVBQW9EQSxFQUVwREssRUFBQSxFQUFzQkEsRUFBQUosRUFBbUJJLElBQ3pDRCxHQUFB
LFdBQUFFLG1CQUFBSixVQUFBRyxFQUFBLEdBR0FELElBQUEsZ0hBRUEsSUFBQWQsR0FBQSxHQUFB
RSxPQUFBWSxFQUlBLE1BSEFkLEdBQUF4QixLQUFBLHNCQUNBd0IsRUFBQU0sWUFBQSxFQUVBTixF
QUdBL0IsRUFBQUQsUUFBQXlDLEdwQm15RU0sU0FBVXhDLEVBQVFELEVBQVNILEdBRWpDLFlxQmp6
RUEsU0FBQTZaLEdBQUFuVSxFQUFBNEosRUFBQXdLLEdBQ0EsR0FBQUMsR0FBQXpLLEVBQUFwQixl
QUFBOEwsd0JBQUFGLEVBQ0EsT0FBQUcsR0FBQXZVLEVBQUFxVSxHQVNBLFFBQUFHLEdBQUF4VSxF
QUFBeVUsRUFBQTdLLEdBSUEsR0FBQThLLEdBQUFQLEVBQUFuVSxFQUFBNEosRUFBQTZLLEVBQ0FD
LEtBQ0E5SyxFQUFBK0ssbUJBQUFDLEVBQUFoTCxFQUFBK0ssbUJBQUFELEdBQ0E5SyxFQUFBaUws
bUJBQUFELEVBQUFoTCxFQUFBaUwsbUJBQUE3VSxJQVdBLFFBQUE4VSxHQUFBbEwsR0FDQUEsS0FB
QXBCLGVBQUE4TCx5QkFDQVMsRUFBQUMsaUJBQUFwTCxFQUFBaEIsWUFBQTRMLEVBQUE1SyxHQU9B
LFFBQUFxTCxHQUFBckwsR0FDQSxHQUFBQSxLQUFBcEIsZUFBQThMLHdCQUFBLENBQ0EsR0FBQTdM
LEdBQUFtQixFQUFBaEIsWUFDQXNNLEVBQUF6TSxFQUFBc00sRUFBQUksa0JBQUExTSxHQUFBLElB
Q0FzTSxHQUFBQyxpQkFBQUUsRUFBQVYsRUFBQTVLLElBU0EsUUFBQXdMLEdBQUFwVixFQUFBcVYs
RUFBQXpMLEdBQ0EsR0FBQUEsS0FBQXBCLGVBQUE2TCxpQkFBQSxDQUNBLEdBQUFBLEdBQUF6SyxF
QUFBcEIsZUFBQTZMLGlCQUNBSyxFQUFBSCxFQUFBdlUsRUFBQXFVLEVBQ0FLLEtBQ0E5SyxFQUFB
K0ssbUJBQUFDLEVBQUFoTCxFQUFBK0ssbUJBQUFELEdBQ0E5SyxFQUFBaUwsbUJBQUFELEVBQUFo
TCxFQUFBaUwsbUJBQUE3VSxLQVVBLFFBQUFzVixHQUFBMUwsR0FDQUEsS0FBQXBCLGVBQUE2TCxr
QkFDQWUsRUFBQXhMLEVBQUFoQixZQUFBLEtBQUFnQixHQUlBLFFBQUEyTCxHQUFBQyxHQUNBQyxF
QUFBRCxFQUFBVixHQUdBLFFBQUFZLEdBQUFGLEdBQ0FDLEVBQUFELEVBQUFQLEdBR0EsUUFBQVUs
R0FBQUMsRUFBQUMsRUFBQTdXLEVBQUFFLEdBQ0E2VixFQUFBZSxtQkFBQTlXLEVBQUFFLEVBQUFr
VyxFQUFBUSxFQUFBQyxHQUdBLFFBQUFFLEdBQUFQLEdBQ0FDLEVBQUFELEVBQUFGLEdBbkdBLEdB
QUFVLEdBQUExYixFQUFBLElBQ0F5YSxFQUFBemEsRUFBQSxJQUVBc2EsRUFBQXRhLEVBQUEsSUFD
QW1iLEVBQUFuYixFQUFBLElBR0FpYSxHQUZBamEsRUFBQSxHQUVBMGIsRUFBQXpCLGFBMEdBMEIs
R0FDQVYsK0JBQ0FHLHlDQUNBSyw2QkFDQUosaUNBR0FqYixHQUFBRCxRQUFBd2IsR3JCKzBFTSxT
QUFVdmIsRUFBUUQsRUFBU0gsR0FFakMsWXNCdjVFQSxTQUFBNGIsR0FBQUMsR0FDQSxpQkFBQUEs
R0FBQSxVQUFBQSxHQUFBLFdBQUFBLEdBQUEsYUFBQUEsRUFHQSxRQUFBQyxHQUFBbmIsRUFBQXdL
LEVBQUFxSSxHQUNBLE9BQUE3UyxHQUNBLGNBQ0EscUJBQ0Esb0JBQ0EsMkJBQ0Esa0JBQ0EseUJB
Q0Esa0JBQ0EseUJBQ0EsZ0JBQ0EsdUJBQ0EsU0FBQTZTLEVBQUF1SSxXQUFBSCxFQUFBelEsR0FD
QSxTQUNBLFVBcEVBLEdBQUF2RSxHQUFBNUcsRUFBQSxHQUVBZ2MsRUFBQWhjLEVBQUEsSUFDQXlh
LEVBQUF6YSxFQUFBLElBQ0FpYyxFQUFBamMsRUFBQSxJQUVBc2EsRUFBQXRhLEVBQUEsSUFDQW1i
LEVBQUFuYixFQUFBLElBTUFrYyxHQUxBbGMsRUFBQSxPQVdBbWMsRUFBQSxLQVNBQyxFQUFBLFNB
QUE5TSxFQUFBK00sR0FDQS9NLElBQ0FtTCxFQUFBNkIseUJBQUFoTixFQUFBK00sR0FFQS9NLEVB
QUFRLGdCQUNBUixFQUFBZCxZQUFBckIsUUFBQW1DLEtBSUFpTixFQUFBLFNBQUF2YSxHQUNBLE1B
QUFvYSxHQUFBcGEsR0FBQSxJQUVBd2EsRUFBQSxTQUFBeGEsR0FDQSxNQUFBb2EsR0FBQXBhLEdB
QUEsSUFHQXlhLEVBQUEsU0FBQS9XLEdBR0EsVUFBQUEsRUFBQWdYLGFBK0NBaEIsR0FJQTVOLFdB
S0E2Tyx1QkFBQVgsRUFBQVcsdUJBS0FDLHlCQUFBWixFQUFBWSwwQkFVQUMsWUFBQSxTQUFBblgs
RUFBQXFVLEVBQUFLLEdBQ0EsbUJBQUFBLElBQUF4VCxFQUFBLEtBQUFtVCxRQUFBSyxHQUVBLElB
QUF2VixHQUFBNFgsRUFBQS9XLElBQ0F3VyxFQUFBbkMsS0FBQW1DLEVBQUFuQyxRQUNBbFYsR0FB
QXVWLENBRUEsSUFBQTBDLEdBQUFkLEVBQUFlLHdCQUFBaEQsRUFDQStDLE1BQUFFLGdCQUNBRixF
QUFBRSxlQUFBdFgsRUFBQXFVLEVBQUFLLElBU0FILFlBQUEsU0FBQXZVLEVBQUFxVSxHQUdBLEdB
QUFrRCxHQUFBZixFQUFBbkMsRUFDQSxJQUFBK0IsRUFBQS9CLEVBQUFyVSxFQUFBd0YsZ0JBQUFD
LEtBQUF6RixFQUFBd0YsZ0JBQUFzSSxPQUNBLFdBRUEsSUFBQTNPLEdBQUE0WCxFQUFBL1csRUFD
QSxPQUFBdVgsTUFBQXBZLElBU0FxWSxlQUFBLFNBQUF4WCxFQUFBcVUsR0FDQSxHQUFBK0MsR0FB
QWQsRUFBQWUsd0JBQUFoRCxFQUNBK0MsTUFBQUssb0JBQ0FMLEVBQUFLLG1CQUFBelgsRUFBQXFV
LEVBR0EsSUFBQWtELEdBQUFmLEVBQUFuQyxFQUVBLElBQUFrRCxFQUFBLE9BRUFBLEdBREFSLEVB
QUEvVyxNQVVBMFgsbUJBQUEsU0FBQTFYLEdBQ0EsR0FBQWIsR0FBQTRYLEVBQUEvVyxFQUNBLFFB
QUFxVSxLQUFBbUMsR0FDQSxHQUFBQSxFQUFBMWEsZUFBQXVZLElBSUFtQyxFQUFBbkMsR0FBQWxW
LEdBQUEsQ0FJQSxHQUFBaVksR0FBQWQsRUFBQWUsd0JBQUFoRCxFQUNBK0MsTUFBQUssb0JBQ0FM
LEVBQUFLLG1CQUFBelgsRUFBQXFVLFNBR0FtQyxHQUFBbkMsR0FBQWxWLEtBV0F3WSxjQUFBLFNB
QUFDLEVBQUFuUCxFQUFBQyxFQUFBQyxHQUdBLE9BRkE2TSxHQUNBcUMsRUFBQXZCLEVBQUF1QixR
QUNBbGQsRUFBQSxFQUFtQkEsRUFBQWtkLEVBQUF2YSxPQUFvQjNDLElBQUEsQ0FFdkMsR0FBQW1k
LEdBQUFELEVBQUFsZCxFQUNBLElBQUFtZCxFQUFBLENBQ0EsR0FBQUMsR0FBQUQsRUFBQUgsY0FB
QUMsRUFBQW5QLEVBQUFDLEVBQUFDLEVBQ0FvUCxLQUNBdkMsRUFBQVosRUFBQVksRUFBQXVDLEtB
SUEsTUFBQXZDLElBVUF3QyxjQUFBLFNBQUF4QyxHQUNBQSxJQUNBaUIsRUFBQTdCLEVBQUE2QixF
QUFBakIsS0FTQXlDLGtCQUFBLFNBQUF0QixHQUdBLEdBQUF1QixHQUFBekIsQ0FDQUEsR0FBQSxL
QUNBRSxFQUNBbEIsRUFBQXlDLEVBQUFyQixHQUVBcEIsRUFBQXlDLEVBQUFwQixHQUVBTCxHQUFB
dlYsRUFBQSxNQUVBcVYsRUFBQTRCLHNCQU1BQyxRQUFBLFdBQ0E1QixNQUdBNkIsa0JBQUEsV0FD
QSxNQUFBN0IsSUFJQTliLEdBQUFELFFBQUF1YixHdEIwOUVNLFNBQVV0YixFQUFRRCxFQUFTSCxH
QUVqQyxZdUJ6ckZBLFNBQUFnZSxHQUFBOVAsRUFBQStQLEVBQUE3UCxFQUFBQyxHQUNBLE1BQUFK
LEdBQUExTixLQUFBMkksS0FBQWdGLEVBQUErUCxFQUFBN1AsRUFBQUMsR0F4Q0EsR0FBQUosR0FB
QWpPLEVBQUEsSUFFQWtlLEVBQUFsZSxFQUFBLElBTUFtZSxHQUNBQyxLQUFBLFNBQUE5TyxHQUNB
LEdBQUFBLEVBQUE4TyxLQUNBLE1BQUE5TyxHQUFBOE8sSUFHQSxJQUFBNVosR0FBQTBaLEVBQUE1
TyxFQUNBLElBQUE5SyxFQUFBdUQsU0FBQXZELEVBRUEsTUFBQUEsRUFHQSxJQUFBNlosR0FBQTda
LEVBQUE4WixhQUVBLE9BQUFELEdBQ0FBLEVBQUFFLGFBQUFGLEVBQUFHLGFBRUF6VyxRQUdBMFcs
T0FBQSxTQUFBblAsR0FDQSxNQUFBQSxHQUFBbVAsUUFBQSxHQWNBeFEsR0FBQThCLGFBQUFpTyxF
QUFBRyxHQUVBL2QsRUFBQUQsUUFBQTZkLEd2Qml2Rk0sU0FBVTVkLEVBQVFELEVBQVNILEdBRWpD
LFl3QnZ4RkEsSUFBQTBlLElBTUFDLE9BQUEsU0FBQTlaLEdBQ0FBLEVBQUErWiwyQkFBQXhjLElB
R0FsQixJQUFBLFNBQUEyRCxHQUNBLE1BQUFBLEdBQUErWix3QkFHQUMsSUFBQSxTQUFBaGEsR0FD
QSxXQUFBekMsS0FBQXlDLEVBQUErWix3QkFHQUUsSUFBQSxTQUFBamEsRUFBQTJQLEdBQ0EzUCxF
QUFBK1osdUJBQUFwSyxHQUlBcFUsR0FBQUQsUUFBQXVlLEd4Qml6Rk0sU0FBVXRlLEVBQVFELEVB
QVNILEdBRWpDLFl5Qm4xRkEsSUFBQStlLEtBTUEzZSxHQUFBRCxRQUFBNGUsR3pCbzJGTSxTQUFV
M2UsRUFBUUQsRUFBU0gsR0FFakMsWTBCMzJGQSxJQUFBNEcsR0FBQTVHLEVBQUEsR0FJQWdmLEdB
RkFoZixFQUFBLE9BaUVBaWYsR0FRQXZWLHdCQUFBLFdBQ0FSLEtBQUFnVyxvQkFBQWhXLEtBQUEr
RCx5QkFDQS9ELEtBQUFpVyxnQkFDQWpXLEtBQUFpVyxnQkFBQW5jLE9BQUEsRUFFQWtHLEtBQUFp
VyxtQkFFQWpXLEtBQUFrVyxrQkFBQSxHQUdBQSxrQkFBQSxFQU1BblMsdUJBQUEsS0FFQW9TLGdC
QUFBLFdBQ0EsUUFBQW5XLEtBQUFrVyxrQkFzQkFoUyxRQUFBLFNBQUFDLEVBQUFDLEVBQUF4TCxF
QUFBQyxFQUFBdEIsRUFBQUMsRUFBQXNCLEVBQUFDLEdBRUFpSCxLQUFBbVcsbUJBQUF6WSxFQUFB
LEtBQ0EsSUFBQTBZLEdBQ0FDLENBQ0EsS0FDQXJXLEtBQUFrVyxrQkFBQSxFQUtBRSxHQUFBLEVB
Q0FwVyxLQUFBc1csY0FBQSxHQUNBRCxFQUFBbFMsRUFBQTlNLEtBQUErTSxFQUFBeEwsRUFBQUMs
RUFBQXRCLEVBQUFDLEVBQUFzQixFQUFBQyxHQUNBcWQsR0FBQSxFQUNLLFFBQ0wsSUFDQSxHQUFB
QSxFQUdBLElBQ0FwVyxLQUFBdVcsU0FBQSxHQUNXLE1BQUFsYixRQUlYMkUsTUFBQXVXLFNBQUEs
R0FFTyxRQUNQdlcsS0FBQWtXLGtCQUFBLEdBR0EsTUFBQUcsSUFHQUMsY0FBQSxTQUFBRSxHQUVB
LE9BREFSLEdBQUFoVyxLQUFBZ1csb0JBQ0E3ZSxFQUFBcWYsRUFBNEJyZixFQUFBNmUsRUFBQWxj
LE9BQWdDM0MsSUFBQSxDQUM1RCxHQUFBc2YsR0FBQVQsRUFBQTdlLEVBQ0EsS0FLQTZJLEtBQUFp
VyxnQkFBQTllLEdBQUEyZSxFQUNBOVYsS0FBQWlXLGdCQUFBOWUsR0FBQXNmLEVBQUFsVCxXQUFB
a1QsRUFBQWxULFdBQUFsTSxLQUFBMkksTUFBQSxLQUNPLFFBQ1AsR0FBQUEsS0FBQWlXLGdCQUFB
OWUsS0FBQTJlLEVBSUEsSUFDQTlWLEtBQUFzVyxjQUFBbmYsRUFBQSxHQUNXLE1BQUFrRSxRQVlY
a2IsU0FBQSxTQUFBQyxHQUNBeFcsS0FBQW1XLG1CQUFBelksRUFBQSxLQUVBLFFBREFzWSxHQUFB
aFcsS0FBQWdXLG9CQUNBN2UsRUFBQXFmLEVBQTRCcmYsRUFBQTZlLEVBQUFsYyxPQUFnQzNDLElB
QUEsQ0FDNUQsR0FFQWlmLEdBRkFLLEVBQUFULEVBQUE3ZSxHQUNBdWYsRUFBQTFXLEtBQUFpVyxn
QkFBQTllLEVBRUEsS0FLQWlmLEdBQUEsRUFDQU0sSUFBQVosR0FBQVcsRUFBQWpULE9BQ0FpVCxF
QUFBalQsTUFBQW5NLEtBQUEySSxLQUFBMFcsR0FFQU4sR0FBQSxFQUNPLFFBQ1AsR0FBQUEsRUFJ
QSxJQUNBcFcsS0FBQXVXLFNBQUFwZixFQUFBLEdBQ1csTUFBQTJCLE1BSVhrSCxLQUFBaVcsZ0JB
QUFuYyxPQUFBLEdBSUE1QyxHQUFBRCxRQUFBOGUsRzFCNjNGTSxTQUFVN2UsRUFBUUQsRUFBU0gs
R0FFakMsWTJCamlHQSxTQUFBNmYsR0FBQTNSLEVBQUErUCxFQUFBN1AsRUFBQUMsR0FDQSxNQUFB
MlAsR0FBQXpkLEtBQUEySSxLQUFBZ0YsRUFBQStQLEVBQUE3UCxFQUFBQyxHQXJEQSxHQUFBMlAs
R0FBQWhlLEVBQUEsSUFDQThmLEVBQUE5ZixFQUFBLElBRUErZixFQUFBL2YsRUFBQSxJQU1BZ2dC
LEdBQ0FDLFFBQUEsS0FDQUMsUUFBQSxLQUNBQyxRQUFBLEtBQ0FDLFFBQUEsS0FDQUMsUUFBQSxL
QUNBQyxTQUFBLEtBQ0FDLE9BQUEsS0FDQUMsUUFBQSxLQUNBQyxpQkFBQVYsRUFDQVcsT0FBQSxT
QUFBcFIsR0FJQSxHQUFBb1IsR0FBQXBSLEVBQUFvUixNQUNBLGdCQUFBcFIsR0FDQW9SLEVBTUEs
SUFBQUEsRUFBQSxNQUFBQSxFQUFBLEtBRUFDLFFBQUEsS0FDQUMsY0FBQSxTQUFBdFIsR0FDQSxN
QUFBQSxHQUFBc1IsZ0JBQUF0UixFQUFBdVIsY0FBQXZSLEVBQUF3UixXQUFBeFIsRUFBQXlSLFVB
QUF6UixFQUFBdVIsY0FHQUcsTUFBQSxTQUFBMVIsR0FDQSxlQUFBQSxLQUFBMFIsTUFBQTFSLEVB
QUE2USxRQUFBTCxFQUFBbUIsbUJBRUFDLE1BQUEsU0FBQTVSLEdBQ0EsZUFBQUEsS0FBQTRSLE1B
QUE1UixFQUFBOFEsUUFBQU4sRUFBQXFCLGtCQWNBbkQsR0FBQWpPLGFBQUE4UCxFQUFBRyxHQUVB
NWYsRUFBQUQsUUFBQTBmLEczQnNtR00sU0FBVXpmLEVBQVFELEVBQVNILEdBRWpDLFk0QmxxR0Es
SUFTQW9oQixHQVRBbFosRUFBQWxJLEVBQUEsR0FDQW9aLEVBQUFwWixFQUFBLElBRUFxaEIsRUFB
QSxlQUNBQyxFQUFBLHVEQUVBakksRUFBQXJaLEVBQUEsSUFhQXFZLEVBQUFnQixFQUFBLFNBQUF0
VSxFQUFBcVQsR0FJQSxHQUFBclQsRUFBQTRVLGVBQUFQLEVBQUFtSSxLQUFBLGFBQUF4YyxHQVFB
QSxFQUFBeWMsVUFBQXBKLE1BUkEsQ0FDQWdKLEtBQUFwWixTQUFBQyxjQUFBLE9BQ0FtWixFQUFB
SSxVQUFBLFFBQUFwSixFQUFBLFFBRUEsS0FEQSxHQUFBcUosR0FBQUwsRUFBQTlhLFdBQ0FtYixF
QUFBbmIsWUFDQXZCLEVBQUFnVSxZQUFBMEksRUFBQW5iLGNBT0EsSUFBQTRCLEVBQUFKLFVBQUEs
Q0FPQSxHQUFBNFosR0FBQTFaLFNBQUFDLGNBQUEsTUFDQXlaLEdBQUFGLFVBQUEsSUFDQSxLQUFB
RSxFQUFBRixZQUNBbkosRUFBQSxTQUFBdFQsRUFBQXFULEdBY0EsR0FSQXJULEVBQUFpQyxZQUNB
akMsRUFBQWlDLFdBQUEyUixhQUFBNVQsS0FPQXNjLEVBQUE1SCxLQUFBckIsSUFBQSxNQUFBQSxF
QUFBLElBQUFrSixFQUFBN0gsS0FBQXJCLEdBQUEsQ0FPQXJULEVBQUF5YyxVQUFBNWQsT0FBQUcs
YUFBQSxPQUFBcVUsQ0FJQSxJQUFBdUosR0FBQTVjLEVBQUF1QixVQUNBLEtBQUFxYixFQUFBQyxL
QUFBNWUsT0FDQStCLEVBQUE4YyxZQUFBRixHQUVBQSxFQUFBRyxXQUFBLFNBR0EvYyxHQUFBeWMs
VUFBQXBKLElBSUFzSixFQUFBLEtBR0F0aEIsRUFBQUQsUUFBQWtZLEc1Qm1yR00sU0FBVWpZLEVB
QVFELEVBQVNILEdBRWpDLFk2Qmh1R0EsU0FBQStoQixHQUFBQyxHQUNBLEdBQUFDLEdBQUEsR0FB
QUQsRUFDQUUsRUFBQUMsRUFBQUMsS0FBQUgsRUFFQSxLQUFBQyxFQUNBLE1BQUFELEVBR0EsSUFB
QUksR0FDQWpLLEVBQUEsR0FDQWtLLEVBQUEsRUFDQUMsRUFBQSxDQUVBLEtBQUFELEVBQUFKLEVB
QUFJLE1BQTJCQSxFQUFBTCxFQUFBamYsT0FBb0JzZixJQUFBLENBQy9DLE9BQUFMLEVBQUFPLFdB
QUFGLElBQ0EsUUFFQUQsRUFBQSxRQUNBLE1BQ0EsU0FFQUEsRUFBQSxPQUNBLE1BQ0EsU0FFQUEs
RUFBQSxRQUNBLE1BQ0EsU0FFQUEsRUFBQSxNQUNBLE1BQ0EsU0FFQUEsRUFBQSxNQUNBLE1BQ0Es
U0FDQSxTQUdBRSxJQUFBRCxJQUNBbEssR0FBQTZKLEVBQUFRLFVBQUFGLEVBQUFELElBR0FDLEVB
QUFELEVBQUEsRUFDQWxLLEdBQUFpSyxFQUdBLE1BQUFFLEtBQUFELEVBQUFsSyxFQUFBNkosRUFB
QVEsVUFBQUYsRUFBQUQsR0FBQWxLLEVBVUEsUUFBQXNLLEdBQUFwSyxHQUNBLHdCQUFBQSxJQUFB
LGlCQUFBQSxHQUlBLEdBQUFBLEVBRUF5SixFQUFBekosR0ExRUEsR0FBQTZKLEdBQUEsU0E2RUEv
aEIsR0FBQUQsUUFBQXVpQixHN0IweEdNLFNBQVV0aUIsRUFBUUQsRUFBU0gsR0FFakMsWThCeHZH
QSxTQUFBMmlCLEdBQUFDLEdBT0EsTUFKQTloQixRQUFBUyxVQUFBQyxlQUFBakIsS0FBQXFpQixF
QUFBQyxLQUNBRCxFQUFBQyxHQUFBQyxJQUNBQyxFQUFBSCxFQUFBQyxRQUVBRSxFQUFBSCxFQUFB
QyxJQXZKQSxHQWdFQUcsR0FoRUEzVyxFQUFBck0sRUFBQSxHQUVBZ2MsRUFBQWhjLEVBQUEsSUFD
QWlqQixFQUFBampCLEVBQUEsS0FDQThmLEVBQUE5ZixFQUFBLElBRUFrakIsRUFBQWxqQixFQUFB
LEtBQ0FtakIsRUFBQW5qQixFQUFBLElBMERBK2lCLEtBQ0FLLEdBQUEsRUFDQU4sRUFBQSxFQUtB
TyxHQUNBQyxTQUFBLFFBQ0FDLGdCQUFBTCxFQUFBLGdDQUNBTSxzQkFBQU4sRUFBQSw0Q0FDQU8s
a0JBQUFQLEVBQUEsb0NBQ0FRLFFBQUEsT0FDQUMsV0FBQSxVQUNBQyxrQkFBQSxpQkFDQUMsVUFB
QSxTQUNBQyxTQUFBLFFBQ0FDLGtCQUFBLGlCQUNBQyxvQkFBQSxtQkFDQUMscUJBQUEsb0JBQ0FD
LGVBQUEsY0FDQUMsUUFBQSxPQUNBQyxPQUFBLE1BQ0FDLGVBQUEsV0FDQUMsUUFBQSxPQUNBQyxX
QUFBLFVBQ0FDLGFBQUEsWUFDQUMsWUFBQSxXQUNBQyxhQUFBLFlBQ0FDLFlBQUEsV0FDQUMsYUFB
QSxZQUNBQyxRQUFBLE9BQ0FDLGtCQUFBLGlCQUNBQyxXQUFBLFVBQ0FDLGFBQUEsWUFDQUMsU0FB
QSxRQUNBQyxTQUFBLFFBQ0FDLFNBQUEsUUFDQUMsU0FBQSxRQUNBQyxXQUFBLFVBQ0FDLFlBQUEs
V0FDQUMsU0FBQSxRQUNBQyxjQUFBLGFBQ0FDLGtCQUFBLGlCQUNBQyxhQUFBLFlBQ0FDLGFBQUEs
WUFDQUMsYUFBQSxZQUNBQyxZQUFBLFdBQ0FDLGFBQUEsWUFDQUMsV0FBQSxVQUNBQyxTQUFBLFFB
Q0FDLFNBQUEsUUFDQUMsUUFBQSxPQUNBQyxXQUFBLFVBQ0FDLFlBQUEsV0FDQUMsY0FBQSxhQUNB
QyxVQUFBLFNBQ0FDLFVBQUEsU0FDQUMsV0FBQSxVQUNBQyxtQkFBQSxrQkFDQUMsV0FBQSxVQUNB
QyxXQUFBLFVBQ0FDLGFBQUEsWUFDQUMsY0FBQSxhQUNBQyxlQUFBLGNBQ0FDLFlBQUEsV0FDQUMs
YUFBQSxZQUNBQyxjQUFBLGFBQ0FDLGlCQUFBaEUsRUFBQSxrQ0FDQWlFLGdCQUFBLGVBQ0FDLFdB
QUEsVUFDQUMsU0FBQSxTQU1BeEUsRUFBQSxvQkFBQWpmLE9BQUE2RCxLQUFBQyxVQUFBRSxNQUFB
LEdBc0JBMGYsRUFBQWpiLEtBQXlDNFcsR0FJekNzRSxtQkFBQSxLQUVBelosV0FJQTBaLHlCQUFB
LFNBQUFELEdBQ0FBLEVBQUFFLGtCQUFBSCxFQUFBSSxnQkFDQUosRUFBQUMsdUJBU0FJLFdBQUEs
U0FBQUMsR0FDQU4sRUFBQUMsb0JBQ0FELEVBQUFDLG1CQUFBSSxXQUFBQyxJQU9BQyxVQUFBLFdB
Q0EsU0FBQVAsRUFBQUMscUJBQUFELEVBQUFDLG1CQUFBTSxjQXdCQUMsU0FBQSxTQUFBL04sRUFB
QWdPLEdBS0EsT0FKQW5GLEdBQUFtRixFQUNBQyxFQUFBckYsRUFBQUMsR0FDQXFGLEVBQUFqTSxF
QUFBa00sNkJBQUFuTyxHQUVBMVosRUFBQSxFQUFtQkEsRUFBQTRuQixFQUFBamxCLE9BQXlCM0Ms
SUFBQSxDQUM1QyxHQUFBOG5CLEdBQUFGLEVBQUE1bkIsRUFDQTJuQixHQUFBeG1CLGVBQUEybUIs
SUFBQUgsRUFBQUcsS0FDQSxhQUFBQSxFQUNBaEYsRUFBQSxTQUNBbUUsRUFBQUMsbUJBQUFhLGlC
QUFBLG1CQUFBeEYsR0FDV08sRUFBQSxjQUNYbUUsRUFBQUMsbUJBQUFhLGlCQUFBLHdCQUFBeEYs
R0FJQTBFLEVBQUFDLG1CQUFBYSxpQkFBQSw0QkFBQXhGLEdBRVMsY0FBQXVGLEVBQ1RoRixFQUFB
LGFBQ0FtRSxFQUFBQyxtQkFBQWMsa0JBQUEscUJBQUF6RixHQUVBMEUsRUFBQUMsbUJBQUFhLGlC
QUFBLHFCQUFBZCxFQUFBQyxtQkFBQWUsZUFFUyxhQUFBSCxHQUFBLFlBQUFBLEdBQ1RoRixFQUFB
LGFBQ0FtRSxFQUFBQyxtQkFBQWMsa0JBQUEsbUJBQUF6RixHQUNBMEUsRUFBQUMsbUJBQUFjLGtC
QUFBLGlCQUFBekYsSUFDV08sRUFBQSxhQUdYbUUsRUFBQUMsbUJBQUFhLGlCQUFBLHFCQUFBeEYs
R0FDQTBFLEVBQUFDLG1CQUFBYSxpQkFBQSxxQkFBQXhGLElBSUFvRixFQUFBdEUsU0FBQSxFQUNB
c0UsRUFBQTdDLFVBQUEsR0FDUzlCLEVBQUE3aEIsZUFBQTJtQixJQUNUYixFQUFBQyxtQkFBQWEs
aUJBQUFELEVBQUE5RSxFQUFBOEUsR0FBQXZGLEdBR0FvRixFQUFBRyxJQUFBLEtBS0FDLGlCQUFB
LFNBQUE5SyxFQUFBaUwsRUFBQUMsR0FDQSxNQUFBbEIsR0FBQUMsbUJBQUFhLGlCQUFBOUssRUFB
QWlMLEVBQUFDLElBR0FILGtCQUFBLFNBQUEvSyxFQUFBaUwsRUFBQUMsR0FDQSxNQUFBbEIsR0FB
QUMsbUJBQUFjLGtCQUFBL0ssRUFBQWlMLEVBQUFDLElBUUFDLG9CQUFBLFdBQ0EsSUFBQXpnQixT
QUFBMGdCLFlBQ0EsUUFFQSxJQUFBQyxHQUFBM2dCLFNBQUEwZ0IsWUFBQSxhQUNBLGNBQUFDLEdB
QUEsU0FBQUEsSUFjQUMsNEJBQUEsV0FJQSxPQUhBeG1CLEtBQUE0Z0IsSUFDQUEsRUFBQXNFLEVB
QUFtQix3QkFFQXpGLElBQUFJLEVBQUEsQ0FDQSxHQUFBeUYsR0FBQS9JLEVBQUFnSixtQkFDQXhC
LEdBQUFDLG1CQUFBd0IsbUJBQUFGLEdBQ0F6RixHQUFBLEtBS0FoakIsR0FBQUQsUUFBQW1uQixH
OUJ5NUdNLFNBQVVsbkIsRUFBUTRvQixFQUFxQmhwQixHQUU3QyxZQUNxQixJQUFJaXBCLEdBQTZD
anBCLEVBQW9CLElBQ2pFa3BCLEVBQWlEbHBCLEVBQW9CLEtBQ3JFbXBCLEVBQW9EbnBCLEVBQW9C
LElBQ3ZCQSxHQUFvQixLQUM1QkEsRUFBb0IsSUFDZEEsRUFBb0IsR0FDM0RBLEdBQW9CVSxFQUFF
c29CLEVBQXFCLElBQUssV0FBYSxNQUFPQyxHQUE4QyxJQUNsSGpwQixFQUFvQlUsRUFBRXNvQixF
QUFxQixJQUFLLFdBQWEsTUFBT0UsR0FBa0QsSUFDdEhscEIsRUFBb0JVLEVBQUVzb0IsRUFBcUIs
SUFBSyxXQUFhLE1BQU9HLEdBQXFELEtBd0JwSixTQUFVL29CLEVBQVFELEcrQjl2SHhCLEdBQUFp
cEIsRUFHQUEsR0FBQSxXQUNBLE1BQUFsZ0IsUUFHQSxLQUVBa2dCLEtBQUFDLFNBQUEscUJBQUFD
LE1BQUEsUUFDQyxNQUFBdG5CLEdBRUQsaUJBQUErRixVQUNBcWhCLEVBQUFyaEIsUUFPQTNILEVB
QUFELFFBQUFpcEIsRy9CcXdITSxTQUFVaHBCLEVBQVFELEVBQVNILEdBRWpDLFlnQzN2SEEsU0FB
QXVwQixLQUNBLEdBQUFDLEVBSUEsT0FBQUMsS0FBQUMsR0FBQSxDQUNBLEdBQUFDLEdBQUFELEVB
QUFELEdBQ0FHLEVBQUFKLEVBQUFLLFFBQUFKLEVBRUEsSUFEQUcsR0FBQSxHQUFBaGpCLEVBQUEs
S0FBQTZpQixJQUNBek4sRUFBQXVCLFFBQUFxTSxHQUFBLENBR0FELEVBQUF0TSxlQUFBelcsRUFB
QSxLQUFBNmlCLEdBQ0F6TixFQUFBdUIsUUFBQXFNLEdBQUFELENBQ0EsSUFBQUcsR0FBQUgsRUFB
QUksVUFDQSxRQUFBQyxLQUFBRixHQUNBRyxFQUFBSCxFQUFBRSxHQUFBTCxFQUFBSyxJQUFBcGpC
LEVBQUEsS0FBQW9qQixFQUFBUCxLQWFBLFFBQUFRLEdBQUEvYixFQUFBeWIsRUFBQUssR0FDQWhP
LEVBQUFrTyx5QkFBQTFvQixlQUFBd29CLElBQUFwakIsRUFBQSxLQUFBb2pCLEdBQ0FoTyxFQUFB
a08seUJBQUFGLEdBQUE5YixDQUVBLElBQUE4TCxHQUFBOUwsRUFBQThMLHVCQUNBLElBQUFBLEVB
QUEsQ0FDQSxPQUFBbVEsS0FBQW5RLEdBQ0EsR0FBQUEsRUFBQXhZLGVBQUEyb0IsR0FBQSxDQUNB
LEdBQUFDLEdBQUFwUSxFQUFBbVEsRUFDQUUsR0FBQUQsRUFBQVQsRUFBQUssR0FHQSxTQUNHLFFB
QUE5YixFQUFBNkwsbUJBQ0hzUSxFQUFBbmMsRUFBQTZMLGlCQUFBNFAsRUFBQUssSUFDQSxHQWFB
LFFBQUFLLEdBQUF0USxFQUFBNFAsRUFBQUssR0FDQWhPLEVBQUFlLHdCQUFBaEQsSUFBQW5ULEVB
QUEsTUFBQW1ULEdBQ0FpQyxFQUFBZSx3QkFBQWhELEdBQUE0UCxFQUNBM04sRUFBQWtNLDZCQUFB
bk8sR0FBQTRQLEVBQUFJLFdBQUFDLEdBQUEvQixhQS9FQSxHQUFBcmhCLEdBQUE1RyxFQUFBLEdB
T0F3cEIsR0FMQXhwQixFQUFBLEdBS0EsTUFLQTBwQixLQW9GQTFOLEdBSUF1QixXQUtBMk0sNEJB
S0FuTiwyQkFLQW1MLGdDQVFBb0MsMEJBQXVFLEtBWXZFM04sdUJBQUEsU0FBQTROLEdBQ0FmLEdB
QUE1aUIsRUFBQSxPQUVBNGlCLEVBQUExVixNQUFBdlMsVUFBQXFHLE1BQUFySCxLQUFBZ3FCLEdB
Q0FoQixLQWFBM00seUJBQUEsU0FBQTROLEdBQ0EsR0FBQUMsSUFBQSxDQUNBLFFBQUFoQixLQUFB
ZSxHQUNBLEdBQUFBLEVBQUFocEIsZUFBQWlvQixHQUFBLENBR0EsR0FBQUUsR0FBQWEsRUFBQWYs
RUFDQUMsR0FBQWxvQixlQUFBaW9CLElBQUFDLEVBQUFELEtBQUFFLElBQ0FELEVBQUFELElBQUE3
aUIsRUFBQSxNQUFBNmlCLEdBQ0FDLEVBQUFELEdBQUFFLEVBQ0FjLEdBQUEsR0FHQUEsR0FDQWxC
LEtBV0FtQix3QkFBQSxTQUFBcGIsR0FDQSxHQUFBcEIsR0FBQW9CLEVBQUFwQixjQUNBLElBQUFB
LEVBQUE2TCxpQkFDQSxNQUFBaUMsR0FBQWUsd0JBQUE3TyxFQUFBNkwsbUJBQUEsSUFFQSxRQUFB
M1gsS0FBQThMLEVBQUE4TCx3QkFBQSxDQUdBLEdBQUFBLEdBQUE5TCxFQUFBOEwsdUJBRUEsUUFB
QUcsS0FBQUgsR0FDQSxHQUFBQSxFQUFBeFksZUFBQTJZLEdBQUEsQ0FHQSxHQUFBd1AsR0FBQTNO
LEVBQUFlLHdCQUFBL0MsRUFBQUcsR0FDQSxJQUFBd1AsRUFDQSxNQUFBQSxJQUlBLGFBT0FnQixt
QkFBQSxXQUNBbkIsRUFBQSxJQUNBLFFBQUFDLEtBQUFDLEdBQ0FBLEVBQUFsb0IsZUFBQWlvQixV
QUNBQyxHQUFBRCxFQUdBek4sR0FBQXVCLFFBQUF2YSxPQUFBLENBRUEsSUFBQWtuQixHQUFBbE8s
RUFBQWtPLHdCQUNBLFFBQUFGLEtBQUFFLEdBQ0FBLEVBQUExb0IsZUFBQXdvQixVQUNBRSxHQUFB
RixFQUlBLElBQUFqTixHQUFBZixFQUFBZSx1QkFDQSxRQUFBaEQsS0FBQWdELEdBQ0FBLEVBQUF2
YixlQUFBdVksVUFDQWdELEdBQUFoRCxJQWVBM1osR0FBQUQsUUFBQTZiLEdoQ2d5SE0sU0FBVTVi
LEVBQVFELEVBQVNILEdBRWpDLFlpQ2ovSEEsU0FBQTRxQixHQUFBdE4sR0FDQSxxQkFBQUEsR0FB
QSxnQkFBQUEsR0FBQSxtQkFBQUEsRUFHQSxRQUFBdU4sR0FBQXZOLEdBQ0EsdUJBQUFBLEdBQUEs
aUJBQUFBLEVBRUEsUUFBQXdOLEdBQUF4TixHQUNBLHVCQUFBQSxHQUFBLGtCQUFBQSxFQTBCQSxR
QUFBeU4sR0FBQXpiLEVBQUErTSxFQUFBakMsRUFBQTFVLEdBQ0EsR0FBQXlGLEdBQUFtRSxFQUFB
bkUsTUFBQSxlQUNBbUUsR0FBQUwsY0FBQXdMLEVBQUFyVCxvQkFBQTFCLEdBQ0EyVyxFQUNBSixF
QUFBK08sK0JBQUE3ZixFQUFBaVAsRUFBQTlLLEdBRUEyTSxFQUFBZ1Asc0JBQUE5ZixFQUFBaVAs
RUFBQTlLLEdBRUFBLEVBQUFMLGNBQUEsS0FNQSxRQUFBcU4sR0FBQWhOLEVBQUErTSxHQUNBLEdB
QUE2TyxHQUFBNWIsRUFBQStLLG1CQUNBOFEsRUFBQTdiLEVBQUFpTCxrQkFJQSxJQUFBekcsTUFB
QXNYLFFBQUFGLEdBQ0EsT0FBQTdxQixHQUFBLEVBQW1CQSxFQUFBNnFCLEVBQUFsb0IsU0FDbkJz
TSxFQUFBUix1QkFEaUR6TyxJQUtqRDBxQixFQUFBemIsRUFBQStNLEVBQUE2TyxFQUFBN3FCLEdB
QUE4cUIsRUFBQTlxQixRQUVHNnFCLElBQ0hILEVBQUF6YixFQUFBK00sRUFBQTZPLEVBQUFDLEVB
RUE3YixHQUFBK0ssbUJBQUEsS0FDQS9LLEVBQUFpTCxtQkFBQSxLQVVBLFFBQUE4USxHQUFBL2Is
R0FDQSxHQUFBNGIsR0FBQTViLEVBQUErSyxtQkFDQThRLEVBQUE3YixFQUFBaUwsa0JBSUEsSUFB
QXpHLE1BQUFzWCxRQUFBRixJQUNBLE9BQUE3cUIsR0FBQSxFQUFtQkEsRUFBQTZxQixFQUFBbG9C
LFNBQ25Cc00sRUFBQVIsdUJBRGlEek8sSUFLakQsR0FBQTZxQixFQUFBN3FCLEdBQUFpUCxFQUFB
NmIsRUFBQTlxQixJQUNBLE1BQUE4cUIsR0FBQTlxQixPQUdHLElBQUE2cUIsR0FDSEEsRUFBQTVi
LEVBQUE2YixHQUNBLE1BQUFBLEVBR0EsYUFNQSxRQUFBRyxHQUFBaGMsR0FDQSxHQUFBaVEsR0FB
QThMLEVBQUEvYixFQUdBLE9BRkFBLEdBQUFpTCxtQkFBQSxLQUNBakwsRUFBQStLLG1CQUFBLEtB
Q0FrRixFQVlBLFFBQUFnTSxHQUFBamMsR0FJQSxHQUFBa2MsR0FBQWxjLEVBQUErSyxtQkFDQW9S
LEVBQUFuYyxFQUFBaUwsa0JBQ0F6RyxPQUFBc1gsUUFBQUksSUFBQTVrQixFQUFBLE9BQ0EwSSxF
QUFBTCxjQUFBdWMsRUFBQS9RLEVBQUFyVCxvQkFBQXFrQixHQUFBLElBQ0EsSUFBQUMsR0FBQUYs
SUFBQWxjLEdBQUEsSUFJQSxPQUhBQSxHQUFBTCxjQUFBLEtBQ0FLLEVBQUErSyxtQkFBQSxLQUNB
L0ssRUFBQWlMLG1CQUFBLEtBQ0FtUixFQU9BLFFBQUFDLEdBQUFyYyxHQUNBLFFBQUFBLEVBQUEr
SyxtQkEzS0EsR0FlQXVSLEdBQ0FDLEVBaEJBamxCLEVBQUE1RyxFQUFBLEdBRUFpYyxFQUFBamMs
RUFBQSxJQWVBOE4sR0FiQTlOLEVBQUEsR0FDQUEsRUFBQSxJQWFBOHJCLG9CQUFBLFNBQUFDLEdB
Q0FILEVBQUFHLEdBS0FDLG9CQUFBLFNBQUFELEdBQ0FGLEVBQUFFLEtBd0pBdFIsR0FDQW1RLFdB
Q0FDLFlBQ0FDLGFBRUFTLHdCQUNBalAsMkJBQ0FnUCxxQ0FDQUssZ0JBRUF4a0Isb0JBQUEsU0FB
QXBDLEdBQ0EsTUFBQTZtQixHQUFBemtCLG9CQUFBcEMsSUFFQXFDLG9CQUFBLFNBQUFyQyxHQUNB
LE1BQUE2bUIsR0FBQXhrQixvQkFBQXJDLElBRUFrbkIsV0FBQSxTQUFBbnFCLEVBQUFDLEdBQ0Es
TUFBQThwQixHQUFBSSxXQUFBbnFCLEVBQUFDLElBRUFtcUIsd0JBQUEsU0FBQXBxQixFQUFBQyxH
QUNBLE1BQUE4cEIsR0FBQUssd0JBQUFwcUIsRUFBQUMsSUFFQThZLGtCQUFBLFNBQUFuVixHQUNB
LE1BQUFtbUIsR0FBQWhSLGtCQUFBblYsSUFFQWdWLGlCQUFBLFNBQUFsVyxFQUFBMm5CLEVBQUF2
akIsR0FDQSxNQUFBaWpCLEdBQUFuUixpQkFBQWxXLEVBQUEybkIsRUFBQXZqQixJQUVBNFMsbUJB
QUEsU0FBQTlXLEVBQUFFLEVBQUF1bkIsRUFBQUMsRUFBQUMsR0FDQSxNQUFBUixHQUFBclEsbUJB
QUE5VyxFQUFBRSxFQUFBdW5CLEVBQUFDLEVBQUFDLElBR0F2ZSxZQUdBMU4sR0FBQUQsUUFBQXNh
LEdqQ2tpSU0sU0FBVXJhLEVBQVFELEVBQVNILEdBRWpDLFlrQzd1SUEsU0FBQWlyQixHQUFBdHFC
LEVBQUEyckIsRUFBQXhxQixHQUNBLElBQ0F3cUIsRUFBQXhxQixHQUNHLE1BQUF5cUIsR0FDSCxP
QUFBQyxJQUNBQSxFQUFBRCxJQWZBLEdBQUFDLEdBQUEsS0FvQkF2USxHQUNBZ1Asd0JBTUFELCtC
QUFBQyxFQU1BcE4sbUJBQUEsV0FDQSxHQUFBMk8sRUFBQSxDQUNBLEdBQUFycUIsR0FBQXFxQixD
QUVBLE1BREFBLEdBQUEsS0FDQXJxQixJQXdCQS9CLEdBQUFELFFBQUE4YixHbEN5d0lNLFNBQVU3
YixFQUFRRCxFQUFTSCxHQUVqQyxZbUNqMElBLFNBQUFrZSxHQUFBOVAsR0FDQSxHQUFBNUosR0FB
QTRKLEVBQUE1SixRQUFBNEosRUFBQTBTLFlBQUEvWSxNQVNBLE9BTkF2RCxHQUFBaW9CLDBCQUNB
am9CLElBQUFpb0IseUJBS0EsSUFBQWpvQixFQUFBUyxTQUFBVCxFQUFBd0MsV0FBQXhDLEVBR0Fw
RSxFQUFBRCxRQUFBK2QsR25DMDFJTSxTQUFVOWQsRUFBUUQsRUFBU0gsR0FFakMsWW9DejFJQSxT
QUFBbWpCLEdBQUF1SixFQUFBQyxHQUNBLElBQUF6a0IsRUFBQUosV0FBQTZrQixLQUFBLG9CQUFB
M2tCLFdBQ0EsUUFHQSxJQUFBZ2lCLEdBQUEsS0FBQTBDLEVBQ0FFLEVBQUE1QyxJQUFBaGlCLFNB
RUEsS0FBQTRrQixFQUFBLENBQ0EsR0FBQW5aLEdBQUF6TCxTQUFBQyxjQUFBLE1BQ0F3TCxHQUFB
b1osYUFBQTdDLEVBQUEsV0FDQTRDLEVBQUEsbUJBQUFuWixHQUFBdVcsR0FRQSxPQUxBNEMsR0FB
QUUsR0FBQSxVQUFBSixJQUVBRSxFQUFBNWtCLFNBQUEra0IsZUFBQUMsV0FBQSx1QkFHQUosRUEz
Q0EsR0FFQUUsR0FGQTVrQixFQUFBbEksRUFBQSxFQUdBa0ksR0FBQUosWUFDQWdsQixFQUFBOWtC
LFNBQUEra0IsZ0JBQUEva0IsU0FBQStrQixlQUFBQyxhQUdBLElBQUFobEIsU0FBQStrQixlQUFB
QyxXQUFBLFFBdUNBNXNCLEVBQUFELFFBQUFnakIsR3BDazRJTSxTQUFVL2lCLEVBQVFELEVBQVNI
LEdBRWpDLFlxQ242SUEsU0FBQWl0QixHQUFBQyxHQUNBLEdBQUFDLEdBQUFqa0IsS0FDQWtGLEVB
QUErZSxFQUFBL2UsV0FDQSxJQUFBQSxFQUFBcVMsaUJBQ0EsTUFBQXJTLEdBQUFxUyxpQkFBQXlN
LEVBRUEsSUFBQUUsR0FBQUMsRUFBQUgsRUFDQSxTQUFBRSxLQUFBaGYsRUFBQWdmLEdBR0EsUUFB
QXJOLEdBQUEzUixHQUNBLE1BQUE2ZSxHQXJCQSxHQUFBSSxJQUNBQyxJQUFBLFNBQ0FDLFFBQUEs
VUFDQUMsS0FBQSxVQUNBQyxNQUFBLFdBb0JBcnRCLEdBQUFELFFBQUE0ZixHckNtOElNLFNBQVUz
ZixFQUFRRCxFQUFTSCxHQUVqQyxZc0N6OUlBLFNBQUEwdEIsR0FBQTFtQixFQUFBakMsR0FNQSxN
QUhBK08sT0FBQXNYLFFBQUFybUIsS0FDQUEsSUFBQSxJQUVBQSxJQUFBNEIsWUFBQUssRUFBQVYs
V0FrQkEsUUFBQXFuQixHQUFBM21CLEVBQUE4UixFQUFBWSxHQUNBUCxFQUFBaEIsaUJBQUFuUixF
QUFBOFIsRUFBQVksR0FHQSxRQUFBa1UsR0FBQTVtQixFQUFBWCxFQUFBcVQsR0FDQTVGLE1BQUFz
WCxRQUFBL2tCLEdBQ0F3bkIsRUFBQTdtQixFQUFBWCxFQUFBLEdBQUFBLEVBQUEsR0FBQXFULEdB
RUFvVSxFQUFBOW1CLEVBQUFYLEVBQUFxVCxHQUlBLFFBQUFtSSxHQUFBN2EsRUFBQVgsR0FDQSxH
QUFBeU4sTUFBQXNYLFFBQUEva0IsR0FBQSxDQUNBLEdBQUEwbkIsR0FBQTFuQixFQUFBLEVBQ0FB
LEtBQUEsR0FDQTJuQixFQUFBaG5CLEVBQUFYLEVBQUEwbkIsR0FDQS9tQixFQUFBNmEsWUFBQWtN
LEdBRUEvbUIsRUFBQTZhLFlBQUF4YixHQUdBLFFBQUF3bkIsR0FBQTdtQixFQUFBaW5CLEVBQUFG
LEVBQUFyVSxHQUVBLElBREEsR0FBQTNVLEdBQUFrcEIsSUFDQSxDQUNBLEdBQUFDLEdBQUFucEIs
RUFBQTRCLFdBRUEsSUFEQW1uQixFQUFBOW1CLEVBQUFqQyxFQUFBMlUsR0FDQTNVLElBQUFncEIs
RUFDQSxLQUVBaHBCLEdBQUFtcEIsR0FJQSxRQUFBRixHQUFBaG5CLEVBQUFtbkIsRUFBQUosR0FD
QSxRQUNBLEdBQUFocEIsR0FBQW9wQixFQUFBeG5CLFdBQ0EsSUFBQTVCLElBQUFncEIsRUFFQSxL
QUVBL21CLEdBQUE2YSxZQUFBOWMsSUFLQSxRQUFBcXBCLEdBQUFILEVBQUFGLEVBQUFNLEdBQ0Es
R0FBQXJuQixHQUFBaW5CLEVBQUFqbkIsV0FDQXNuQixFQUFBTCxFQUFBdG5CLFdBQ0EybkIsS0FB
QVAsRUFHQU0sR0FDQVAsRUFBQTltQixFQUFBZ0IsU0FBQXVtQixlQUFBRixHQUFBQyxHQUdBRCxH
QUdBOVYsRUFBQStWLEVBQUFELEdBQ0FMLEVBQUFobkIsRUFBQXNuQixFQUFBUCxJQUVBQyxFQUFB
aG5CLEVBQUFpbkIsRUFBQUYsR0EvRkEsR0FBQTVVLEdBQUFuWixFQUFBLElBQ0F3dUIsRUFBQXh1
QixFQUFBLEtBSUFxWixHQUhBclosRUFBQSxHQUNBQSxFQUFBLEdBRUFBLEVBQUEsS0FDQXFZLEVB
QUFyWSxFQUFBLElBQ0F1WSxFQUFBdlksRUFBQSxJQW1CQTh0QixFQUFBelUsRUFBQSxTQUFBclMs
RUFBQVgsRUFBQXFULEdBSUExUyxFQUFBNFMsYUFBQXZULEVBQUFxVCxLQThFQStVLEVBQUFELEVB
QUFDLGlDQTBCQUMsR0FDQUQsbUNBRUFMLHVCQVNBTyxlQUFBLFNBQUEzbkIsRUFBQTRuQixHQUtB
LE9BQUFDLEdBQUEsRUFBbUJBLEVBQUFELEVBQUE1ckIsT0FBb0I2ckIsSUFBQSxDQUN2QyxHQUFB
QyxHQUFBRixFQUFBQyxFQUNBLFFBQUFDLEVBQUEzakIsTUFDQSxvQkFDQXdpQixFQUFBM21CLEVB
QUE4bkIsRUFBQUMsUUFBQXJCLEVBQUExbUIsRUFBQThuQixFQUFBRSxXQVdBLE1BQ0EscUJBQ0Fw
QixFQUFBNW1CLEVBQUE4bkIsRUFBQUcsU0FBQXZCLEVBQUExbUIsRUFBQThuQixFQUFBRSxXQVFB
LE1BQ0Esa0JBQ0EzVyxFQUFBclIsRUFBQThuQixFQUFBQyxRQVFBLE1BQ0Esb0JBQ0F4VyxFQUFB
dlIsRUFBQThuQixFQUFBQyxRQVFBLE1BQ0EsbUJBQ0FsTixFQUFBN2EsRUFBQThuQixFQUFBRyxh
QWNBN3VCLEdBQUFELFFBQUF1dUIsR3RDbS9JTSxTQUFVdHVCLEVBQVFELEVBQVNILEdBRWpDLFl1
Q3pzSkEsSUFBQW9aLElBQ0FoQixLQUFBLCtCQUNBOFcsT0FBQSxxQ0FDQTNOLElBQUEsNkJBR0Fu
aEIsR0FBQUQsUUFBQWlaLEd2QzB0Sk0sU0FBVWhaLEVBQVFELEVBQVNILEdBRWpDLFl3QzV0SkEs
SUFBQXFaLEdBQUEsU0FBQWlULEdBQ0EsMEJBQUE2QyxjQUFBQyx3QkFDQSxTQUFBQyxFQUFBQyxF
QUFBQyxFQUFBQyxHQUNBTCxNQUFBQyx3QkFBQSxXQUNBLE1BQUE5QyxHQUFBK0MsRUFBQUMsRUFB
QUMsRUFBQUMsTUFJQWxELEVBSUFsc0IsR0FBQUQsUUFBQWtaLEd4Q212Sk0sU0FBVWpaLEVBQVFE
LEVBQVNILEdBRWpDLFl5Q2x2SkEsU0FBQXl2QixHQUFBQyxHQUNBLE1BQUFBLEVBQUFDLGFBQUEs
TUFBQUQsRUFBQUUsV0FBQWhwQixFQUFBLE1BRUEsUUFBQWlwQixHQUFBSCxHQUNBRCxFQUFBQyxJ
QUNBLE1BQUFBLEVBQUFsYixPQUFBLE1BQUFrYixFQUFBSSxXQUFBbHBCLEVBQUEsTUFHQSxRQUFB
bXBCLEdBQUFMLEdBQ0FELEVBQUFDLElBQ0EsTUFBQUEsRUFBQU0sU0FBQSxNQUFBTixFQUFBSSxX
QUFBbHBCLEVBQUEsTUFvQkEsUUFBQXFwQixHQUFBMWMsR0FDQSxHQUFBQSxFQUFBLENBQ0EsR0FB
QTVTLEdBQUE0UyxFQUFBbEksU0FDQSxJQUFBMUssRUFDQSxzQ0FBQUEsRUFBQSxLQUdBLFNBMURB
LEdBQUFpRyxHQUFBNUcsRUFBQSxHQUVBa3dCLEVBQUFsd0IsRUFBQSxLQUNBbXdCLEVBQUFud0Is
RUFBQSxJQUVBa1MsRUFBQWxTLEVBQUEsSUFDQTBTLEVBQUF5ZCxFQUFBamUsRUFBQU8sZ0JBS0Ey
ZCxHQUhBcHdCLEVBQUEsR0FDQUEsRUFBQSxJQUdBMGdCLFFBQUEsRUFDQTJQLFVBQUEsRUFDQUMs
T0FBQSxFQUNBQyxRQUFBLEVBQ0FDLE9BQUEsRUFDQTFqQixPQUFBLEVBQ0EyakIsUUFBQSxJQWdC
QUMsR0FDQWxjLE1BQUEsU0FBQWhCLEVBQUEvRSxFQUFBa2lCLEdBQ0EsT0FBQW5kLEVBQUEvRSxJ
QUFBMmhCLEVBQUE1YyxFQUFBckksT0FBQXFJLEVBQUFzYyxVQUFBdGMsRUFBQW9kLFVBQUFwZCxF
QUFBdUksU0FDQSxLQUVBLEdBQUExWixPQUFBLHNOQUVBMnRCLFFBQUEsU0FBQXhjLEVBQUEvRSxF
QUFBa2lCLEdBQ0EsT0FBQW5kLEVBQUEvRSxJQUFBK0UsRUFBQXNjLFVBQUF0YyxFQUFBb2QsVUFB
QXBkLEVBQUF1SSxTQUNBLEtBRUEsR0FBQTFaLE9BQUEsME5BRUF5dEIsU0FBQXBkLEVBQUE0WixN
QUdBdUUsS0FlQUMsR0FDQUMsZUFBQSxTQUFBQyxFQUFBeGQsRUFBQUQsR0FDQSxPQUFBOUUsS0FB
QWlpQixHQUFBLENBQ0EsR0FBQUEsRUFBQWx2QixlQUFBaU4sR0FDQSxHQUFBdE0sR0FBQXV1QixF
QUFBamlCLEdBQUErRSxFQUFBL0UsRUFBQXVpQixFQUFBLFlBQUFkLEVBRUEsSUFBQS90QixZQUFB
RSxVQUFBRixFQUFBYyxVQUFBNHRCLElBQUEsQ0FHQUEsRUFBQTF1QixFQUFBYyxVQUFBLENBRUFn
dEIsR0FBQTFjLE1BVUEwZCxTQUFBLFNBQUF2QixHQUNBLE1BQUFBLEdBQUFFLFdBQ0FDLEVBQUFI
LEdBQ0FBLEVBQUFFLFVBQUFwYixPQUVBa2IsRUFBQWxiLE9BUUEwYyxXQUFBLFNBQUF4QixHQUNB
LE1BQUFBLEdBQUFDLGFBQ0FJLEVBQUFMLEdBQ0FBLEVBQUFDLFlBQUFuYixPQUVBa2IsRUFBQU0s
U0FPQW1CLGdCQUFBLFNBQUF6QixFQUFBcGdCLEdBQ0EsTUFBQW9nQixHQUFBRSxXQUNBQyxFQUFB
SCxHQUNBQSxFQUFBRSxVQUFBd0IsY0FBQTloQixFQUFBOUssT0FBQWdRLFFBQ0trYixFQUFBQyxh
QUNMSSxFQUFBTCxHQUNBQSxFQUFBQyxZQUFBeUIsY0FBQTloQixFQUFBOUssT0FBQXdyQixVQUNL
TixFQUFBSSxTQUNMSixFQUFBSSxTQUFBdnZCLFNBQUE2QixHQUFBa04sT0FESyxJQU1MbFAsR0FB
QUQsUUFBQTJ3QixHekN3eEpNLFNBQVUxd0IsRUFBUUQsRUFBU0gsR0FFakMsWTBDcjVKQSxJQUFB
NEcsR0FBQTVHLEVBQUEsR0FJQXF4QixHQUZBcnhCLEVBQUEsSUFFQSxHQUVBc3hCLEdBS0FDLHNC
QUFBLEtBTUFDLHVCQUFBLEtBRUExakIsV0FDQTJqQixrQkFBQSxTQUFBQyxHQUNBTCxHQUFBenFC
LEVBQUEsT0FDQTBxQixFQUFBQyxzQkFBQUcsRUFBQUgsc0JBQ0FELEVBQUFFLHVCQUFBRSxFQUFB
Rix1QkFDQUgsR0FBQSxJQUtBanhCLEdBQUFELFFBQUFteEIsRzFDdTZKTSxTQUFVbHhCLEVBQVFE
LEVBQVNILEdBRWpDLFkyQzc3SkEsU0FBQTJ4QixHQUFBcEYsRUFBQXFGLEdBRUEsTUFBQXJGLEtB
QUFxRixFQUlBLElBQUFyRixHQUFBLElBQUFxRixHQUFBLEVBQUFyRixJQUFBLEVBQUFxRixFQUdB
ckYsT0FBQXFGLE1BU0EsUUFBQUMsR0FBQUMsRUFBQUMsR0FDQSxHQUFBSixFQUFBRyxFQUFBQyxH
QUNBLFFBR0EscUJBQUFELElBQUEsT0FBQUEsR0FBQSxpQkFBQUMsSUFBQSxPQUFBQSxFQUNBLFFB
R0EsSUFBQUMsR0FBQWx4QixPQUFBd0QsS0FBQXd0QixHQUNBRyxFQUFBbnhCLE9BQUF3RCxLQUFB
eXRCLEVBRUEsSUFBQUMsRUFBQWh2QixTQUFBaXZCLEVBQUFqdkIsT0FDQSxRQUlBLFFBQUEzQyxH
QUFBLEVBQWlCQSxFQUFBMnhCLEVBQUFodkIsT0FBa0IzQyxJQUNuQyxJQUFBbUIsRUFBQWpCLEtB
QUF3eEIsRUFBQUMsRUFBQTN4QixNQUFBc3hCLEVBQUFHLEVBQUFFLEVBQUEzeEIsSUFBQTB4QixF
QUFBQyxFQUFBM3hCLEtBQ0EsUUFJQSxVQS9DQSxHQUFBbUIsR0FBQVYsT0FBQVMsVUFBQUMsY0Fr
REFwQixHQUFBRCxRQUFBMHhCLEczQ3c5Sk0sU0FBVXp4QixFQUFRRCxFQUFTSCxHQUVqQyxZNENw
Z0tBLFNBQUFreUIsR0FBQXRhLEVBQUFELEdBQ0EsR0FBQXdhLEdBQUEsT0FBQXZhLElBQUEsSUFB
QUEsRUFDQXdhLEVBQUEsT0FBQXphLElBQUEsSUFBQUEsQ0FDQSxJQUFBd2EsR0FBQUMsRUFDQSxN
QUFBRCxLQUFBQyxDQUdBLElBQUFDLFNBQUF6YSxHQUNBMGEsUUFBQTNhLEVBQ0Esa0JBQUEwYSxH
QUFBLFdBQUFBLEVBQ0EsV0FBQUMsR0FBQSxXQUFBQSxFQUVBLFdBQUFBLEdBQUExYSxFQUFBek0s
T0FBQXdNLEVBQUF4TSxNQUFBeU0sRUFBQS9TLE1BQUE4UyxFQUFBOVMsSUFJQXpFLEVBQUFELFFB
QUEreEIsRzVDaWlLTSxTQUFVOXhCLEVBQVFELEVBQVNILEdBRWpDLFk2Q3ZqS0EsU0FBQXFpQixH
QUFBeGQsR0FDQSxHQUNBMHRCLElBQ0FDLElBQUEsS0FDQUMsSUFBQSxLQU1BLFlBSkEsR0FBQTV0
QixHQUFBckMsUUFMQSxRQUtBLFNBQUEwZixHQUNBLE1BQUFxUSxHQUFBclEsS0FZQSxRQUFBd1Es
R0FBQTd0QixHQUNBLEdBQUE4dEIsR0FBQSxXQUNBQyxHQUNBQyxLQUFBLElBQ0FDLEtBQUEsSUFJ
QSxZQUZBLE1BQUFqdUIsRUFBQSxVQUFBQSxFQUFBLEdBQUFBLEVBQUE0ZCxVQUFBLEdBQUE1ZCxF
QUFBNGQsVUFBQSxLQUVBamdCLFFBQUFtd0IsRUFBQSxTQUFBelEsR0FDQSxNQUFBMFEsR0FBQTFR
LEtBSUEsR0FBQTZRLElBQ0ExUSxTQUNBcVEsV0FHQXR5QixHQUFBRCxRQUFBNHlCLEc3Q2dsS00s
U0FBVTN5QixFQUFRRCxFQUFTSCxHQUVqQyxZOENybktBLFNBQUE4TCxHQUFBa0wsR0FDQTFOLEVB
QUF3QyxjQUFBa0wsR0FHQSxRQUFBZ2MsR0FBQXBxQixHQUNBLEdBQUF1QyxTQUFBdkMsRUFDQSxl
QUFBdUMsRUFDQSxNQUFBQSxFQUVBLElBQUE4bkIsR0FBQXJxQixFQUFBNEYsYUFBQTVGLEVBQUE0
RixZQUFBN04sTUFBQXdLLEVBQ0E3RyxFQUFBeEQsT0FBQXdELEtBQUFzRSxFQUNBLE9BQUF0RSxH
QUFBdEIsT0FBQSxHQUFBc0IsRUFBQXRCLE9BQUEsR0FDQWl3QixFQUFBLFdBQUEzdUIsRUFBQUws
S0FBQSxVQUVBZ3ZCLEVBR0EsUUFBQUMsR0FBQUMsRUFBQUMsR0FDQSxHQUFBcGMsR0FBQTBILEVB
QUF4ZCxJQUFBaXlCLEVBQ0EsS0FBQW5jLEVBQUEsQ0FRQSxZQU9BLE1BQUFBLEdBNUNBLEdBQUFw
USxHQUFBNUcsRUFBQSxHQUdBMGUsR0FEQTFlLEVBQUEsSUFDQUEsRUFBQSxLQUVBc0osR0FEQXRK
LEVBQUEsR0FDQUEsRUFBQSxJQThDQXF6QixHQTVDQXJ6QixFQUFBLEdBQ0FBLEVBQUEsSUFtREFz
ekIsVUFBQSxTQUFBSCxHQUVBLEdBTUFuYyxHQUFBMEgsRUFBQXhkLElBQUFpeUIsRUFDQSxTQUFB
bmMsS0FJQUEsRUFBQXhSLG9CQWVBK3RCLGdCQUFBLFNBQUFKLEVBQUFscEIsRUFBQW1wQixHQUNB
QyxFQUFBRyxpQkFBQXZwQixFQUFBbXBCLEVBQ0EsSUFBQXBjLEdBQUFrYyxFQUFBQyxFQU9BLEtB
QUFuYyxFQUNBLFdBR0FBLEdBQUFuTSxrQkFDQW1NLEVBQUFuTSxrQkFBQTlELEtBQUFrRCxHQUVB
K00sRUFBQW5NLG1CQUFBWixHQU1BNkIsRUFBQWtMLElBR0F5Yyx3QkFBQSxTQUFBemMsRUFBQS9N
LEdBQ0ErTSxFQUFBbk0sa0JBQ0FtTSxFQUFBbk0sa0JBQUE5RCxLQUFBa0QsR0FFQStNLEVBQUFu
TSxtQkFBQVosR0FFQTZCLEVBQUFrTCxJQWdCQTBjLG1CQUFBLFNBQUFQLEdBQ0EsR0FBQW5jLEdB
QUFrYyxFQUFBQyxFQUFBLGNBRUFuYyxLQUlBQSxFQUFBMmMscUJBQUEsRUFFQTduQixFQUFBa0ws
S0FjQTRjLG9CQUFBLFNBQUFULEVBQUFVLEVBQUE1cEIsR0FDQSxHQUFBK00sR0FBQWtjLEVBQUFD
LEVBQUEsZUFFQW5jLEtBSUFBLEVBQUE4YyxvQkFBQUQsR0FDQTdjLEVBQUErYyxzQkFBQSxNQUdB
M3hCLEtBQUE2SCxHQUFBLE9BQUFBLElBQ0FvcEIsRUFBQUcsaUJBQUF2cEIsRUFBQSxnQkFDQStN
LEVBQUFuTSxrQkFDQW1NLEVBQUFuTSxrQkFBQTlELEtBQUFrRCxHQUVBK00sRUFBQW5NLG1CQUFB
WixJQUlBNkIsRUFBQWtMLEtBYUFnZCxnQkFBQSxTQUFBYixFQUFBYyxHQU1BLEdBQUFqZCxHQUFB
a2MsRUFBQUMsRUFBQSxXQUVBLElBQUFuYyxFQUFBLEVBSUFBLEVBQUE4YyxxQkFBQTljLEVBQUE4
Yyx3QkFDQS9zQixLQUFBa3RCLEdBRUFub0IsRUFBQWtMLEtBR0FrZCx1QkFBQSxTQUFBbGQsRUFB
QVcsRUFBQXdjLEdBQ0FuZCxFQUFBb2QsZ0JBQUF6YyxFQUVBWCxFQUFBYSxTQUFBc2MsRUFDQXJv
QixFQUFBa0wsSUFHQXdjLGlCQUFBLFNBQUF2cEIsRUFBQW1wQixHQUNBbnBCLEdBQUEsbUJBQUFB
LElBQUFyRCxFQUFBLE1BQUF3c0IsRUFBQUosRUFBQS9vQixNQUlBN0osR0FBQUQsUUFBQWt6QixH
OUNncEtNLFNBQVVqekIsRUFBUUQsRUFBU0gsR0FFakMsWStDOTJLQSxJQUVBMEMsSUFGQTFDLEVB
QUEsR0FFQUEsRUFBQSxJQUdBcTBCLEdBRkFyMEIsRUFBQSxHQUVBMEMsRUFnV0F0QyxHQUFBRCxR
QUFBazBCLEcvQyszS00sU0FBVWowQixFQUFRRCxFQUFTSCxHQUVqQyxZZ0QzdExBLFNBQUFzMEIs
R0FBQWxtQixHQUNBLEdBQUFtbUIsR0FDQUMsRUFBQXBtQixFQUFBb21CLE9BZ0JBLE9BZEEsWUFB
QXBtQixHQUlBLEtBSEFtbUIsRUFBQW5tQixFQUFBbW1CLFdBR0EsS0FBQUMsSUFDQUQsRUFBQSxJ
QUlBQSxFQUFBQyxFQUtBRCxHQUFBLFNBQUFBLEVBQ0FBLEVBR0EsRUFHQW4wQixFQUFBRCxRQUFB
bTBCLEdoRHV2TE0sU0FBVWwwQixFQUFRNG9CLEVBQXFCaHBCLEdBRTdDLFlpRHp2TEEsU0FBQXkw
QixHQUFBamdCLEdBQ0EsSUFBQTFULE9BQUE0ekIsRUFBQSxHQUFBbGdCLElBQUExVCxPQUFBNnpC
LEVBQUEsR0FBQW5nQixJQUFBb2dCLEVBQ0EsUUFFQSxJQUFBQyxHQUFBL3pCLE9BQUFnMEIsRUFB
QSxHQUFBdGdCLEVBQ0EsV0FBQXFnQixFQUNBLFFBRUEsSUFBQUUsR0FBQXZ6QixFQUFBakIsS0FB
QXMwQixFQUFBLGdCQUFBQSxFQUFBcm1CLFdBQ0EseUJBQUF1bUIsb0JBQ0FDLEVBQUF6MEIsS0FB
QXcwQixJQUFBRSxFakRndkxxQixHQUFJTixHQUErQzMwQixFQUFvQixLQUNuRTgwQixFQUFpRDkw
QixFQUFvQixLQUNyRTAwQixFQUFpRDEwQixFQUFvQixLaUR2eUw5RjQwQixFQUFBLGtCQUdBTSxF
QUFBN0wsU0FBQTluQixVQUNBNHpCLEVBQUFyMEIsT0FBQVMsVUFHQXl6QixFQUFBRSxFQUFBdnRC
LFNBR0FuRyxFQUFBMnpCLEVBQUEzekIsZUFHQXl6QixFQUFBRCxFQUFBejBCLEtBQUFPLE9BMkNB
a29CLEdBQUEsS2pEa3pMTSxTQUFVNW9CLEVBQVE0b0IsRUFBcUJocEIsR0FFN0MsWWtEMzJMQSxT
QUFBMkMsR0FBQU0sR0FFQSxvQkFBQXFJLFVBQUEsbUJBQUFBLFNBQUFuSixPQUNBbUosUUFBQW5K
LE1BQUFjLEVBR0EsS0FJQSxTQUFBWixPQUFBWSxHQUVHLE1BQUFqQixLQWxCSGduQixFQUFBLEVB
QUFybUIsR2xEMjRMTSxTQUFVdkMsRUFBUUQsRUFBU0gsR21EMzRMakMsR0FBQW8xQixHQUFBQyxH
QU9BLFdBQ0EsWUFJQSxTQUFBQyxLQUdBLE9BRkFDLE1BRUFsMUIsRUFBQSxFQUFpQkEsRUFBQTBD
LFVBQUFDLE9BQXNCM0MsSUFBQSxDQUN2QyxHQUFBdUksR0FBQTdGLFVBQUExQyxFQUNBLElBQUF1
SSxFQUFBLENBRUEsR0FBQTRzQixTQUFBNXNCLEVBRUEsZUFBQTRzQixHQUFBLFdBQUFBLEVBQ0FE
LEVBQUF4dUIsS0FBQTZCLE9BQ0ksSUFBQWtMLE1BQUFzWCxRQUFBeGlCLEdBQ0oyc0IsRUFBQXh1
QixLQUFBdXVCLEVBQUFHLE1BQUEsS0FBQTdzQixRQUNJLGVBQUE0c0IsRUFDSixPQUFBM3dCLEtB
QUErRCxHQUNBOHNCLEVBQUFuMUIsS0FBQXFJLEVBQUEvRCxJQUFBK0QsRUFBQS9ELElBQ0Ewd0Is
RUFBQXh1QixLQUFBbEMsSUFNQSxNQUFBMHdCLEdBQUF0eEIsS0FBQSxLQXhCQSxHQUFBeXhCLE1B
QWdCbDBCLGNBMkJoQixxQkFBQXBCLE1BQUFELFFBQ0FDLEVBQUFELFFBQUFtMUIsR0FHQUYsU0FF
R2h6QixNQUZIaXpCLEVBQUEsV0FDQSxNQUFBQyxJQUNHRyxNQUFBdDFCLEVBQUFpMUIsTUFBQWgx
QixFQUFBRCxRQUFBazFCLFFuRHU1TEcsU0FBVWoxQixFQUFRRCxFQUFTSCxHQUVqQyxZb0RoOExB
LFNBQUEyMUIsTUFxQkEsUUFBQUMsR0FBQUMsR0FDQSxJQUNBLE1BQUFBLEdBQUFDLEtBQ0csTUFB
QUMsR0FFSCxNQURBQyxHQUFBRCxFQUNBRSxHQUlBLFFBQUFDLEdBQUEvSixFQUFBcnFCLEdBQ0Es
SUFDQSxNQUFBcXFCLEdBQUFycUIsR0FDRyxNQUFBaTBCLEdBRUgsTUFEQUMsR0FBQUQsRUFDQUUs
R0FHQSxRQUFBRSxHQUFBaEssRUFBQXJxQixFQUFBQyxHQUNBLElBQ0FvcUIsRUFBQXJxQixFQUFB
QyxHQUNHLE1BQUFnMEIsR0FFSCxNQURBQyxHQUFBRCxFQUNBRSxHQU1BLFFBQUFHLEdBQUFqSyxH
QUNBLG9CQUFBampCLE1BQ0EsU0FBQTVGLFdBQUEsdUNBRUEsdUJBQUE2b0IsR0FDQSxTQUFBN29C
LFdBQUEsbURBRUE0RixNQUFBbXRCLElBQUEsRUFDQW50QixLQUFBb3RCLElBQUEsRUFDQXB0QixL
QUFBcXRCLElBQUEsS0FDQXJ0QixLQUFBc3RCLElBQUEsS0FDQXJLLElBQUF3SixHQUNBYyxFQUFB
dEssRUFBQWpqQixNQWVBLFFBQUF3dEIsR0FBQXBqQixFQUFBcWpCLEVBQUFDLEdBQ0EsVUFBQXRq
QixHQUFBOUUsWUFBQSxTQUFBcW9CLEVBQUFDLEdBQ0EsR0FBQXBMLEdBQUEsR0FBQTBLLEdBQUFU
LEVBQ0FqSyxHQUFBb0ssS0FBQWUsRUFBQUMsR0FDQXRPLEVBQUFsVixFQUFBLEdBQUF5akIsR0FB
QUosRUFBQUMsRUFBQWxMLE1BR0EsUUFBQWxELEdBQUFsVixFQUFBMGpCLEdBQ0EsU0FBQTFqQixF
QUFBZ2pCLEtBQ0FoakIsSUFBQWlqQixHQUtBLElBSEFILEVBQUFhLEtBQ0FiLEVBQUFhLElBQUEz
akIsR0FFQSxJQUFBQSxFQUFBZ2pCLElBQ0EsV0FBQWhqQixFQUFBK2lCLEtBQ0EvaUIsRUFBQStp
QixJQUFBLE9BQ0EvaUIsRUFBQWtqQixJQUFBUSxJQUdBLElBQUExakIsRUFBQStpQixLQUNBL2lC
LEVBQUEraUIsSUFBQSxPQUNBL2lCLEVBQUFrakIsS0FBQWxqQixFQUFBa2pCLElBQUFRLFNBR0Ex
akIsR0FBQWtqQixJQUFBenZCLEtBQUFpd0IsRUFHQUUsR0FBQTVqQixFQUFBMGpCLEdBR0EsUUFB
QUUsR0FBQTVqQixFQUFBMGpCLEdBQ0EvcUIsRUFBQSxXQUNBLEdBQUFrckIsR0FBQSxJQUFBN2pC
LEVBQUFnakIsSUFBQVUsRUFBQUwsWUFBQUssRUFBQUosVUFDQSxXQUFBTyxFQU1BLFlBTEEsSUFB
QTdqQixFQUFBZ2pCLElBQ0FPLEVBQUFHLEVBQUFJLFFBQUE5akIsRUFBQWlqQixLQUVBTyxFQUFB
RSxFQUFBSSxRQUFBOWpCLEVBQUFpakIsS0FJQSxJQUFBaFgsR0FBQTJXLEVBQUFpQixFQUFBN2pC
LEVBQUFpakIsSUFDQWhYLEtBQUEwVyxFQUNBYSxFQUFBRSxFQUFBSSxRQUFBcEIsR0FFQWEsRUFB
QUcsRUFBQUksUUFBQTdYLEtBSUEsUUFBQXNYLEdBQUF2akIsRUFBQStqQixHQUVBLEdBQUFBLElB
QUEvakIsRUFDQSxNQUFBd2pCLEdBQ0F4akIsRUFDQSxHQUFBaFEsV0FBQSw2Q0FHQSxJQUNBK3pC
LElBQ0EsaUJBQUFBLElBQUEsbUJBQUFBLElBQ0EsQ0FDQSxHQUFBdkIsR0FBQUYsRUFBQXlCLEVB
Q0EsSUFBQXZCLElBQUFHLEVBQ0EsTUFBQWEsR0FBQXhqQixFQUFBMGlCLEVBRUEsSUFDQUYsSUFB
QXhpQixFQUFBd2lCLE1BQ0F1QixZQUFBakIsR0FLQSxNQUhBOWlCLEdBQUFnakIsSUFBQSxFQUNB
aGpCLEVBQUFpakIsSUFBQWMsTUFDQUMsR0FBQWhrQixFQUVLLHVCQUFBd2lCLEdBRUwsV0FEQVcs
R0FBQVgsRUFBQTdoQixLQUFBb2pCLEdBQUEvakIsR0FJQUEsRUFBQWdqQixJQUFBLEVBQ0FoakIs
RUFBQWlqQixJQUFBYyxFQUNBQyxFQUFBaGtCLEdBR0EsUUFBQXdqQixHQUFBeGpCLEVBQUErakIs
R0FDQS9qQixFQUFBZ2pCLElBQUEsRUFDQWhqQixFQUFBaWpCLElBQUFjLEVBQ0FqQixFQUFBbUIs
S0FDQW5CLEVBQUFtQixJQUFBamtCLEVBQUErakIsR0FFQUMsRUFBQWhrQixHQUVBLFFBQUFna0Is
R0FBQWhrQixHQUtBLEdBSkEsSUFBQUEsRUFBQStpQixNQUNBN04sRUFBQWxWLElBQUFrakIsS0FD
QWxqQixFQUFBa2pCLElBQUEsTUFFQSxJQUFBbGpCLEVBQUEraUIsSUFBQSxDQUNBLE9BQUFoMkIs
R0FBQSxFQUFtQkEsRUFBQWlULEVBQUFrakIsSUFBQXh6QixPQUFxQjNDLElBQ3hDbW9CLEVBQUFs
VixJQUFBa2pCLElBQUFuMkIsR0FFQWlULEdBQUFrakIsSUFBQSxNQUlBLFFBQUFPLEdBQUFKLEVB
QUFDLEVBQUFRLEdBQ0FsdUIsS0FBQXl0QixZQUFBLG1CQUFBQSxLQUFBLEtBQ0F6dEIsS0FBQTB0
QixXQUFBLG1CQUFBQSxLQUFBLEtBQ0ExdEIsS0FBQWt1QixVQVNBLFFBQUFYLEdBQUF0SyxFQUFB
aUwsR0FDQSxHQUFBSSxJQUFBLEVBQ0E5TCxFQUFBeUssRUFBQWhLLEVBQUEsU0FBQTNYLEdBQ0Fn
akIsSUFDQUEsR0FBQSxFQUNBWCxFQUFBTyxFQUFBNWlCLEtBQ0csU0FBQWlqQixHQUNIRCxJQUNB
QSxHQUFBLEVBQ0FWLEVBQUFNLEVBQUFLLEtBRUFELElBQUE5TCxJQUFBdUssSUFDQXVCLEdBQUEs
RUFDQVYsRUFBQU0sRUFBQXBCLElBaE5BLEdBQUEvcEIsR0FBQWpNLEVBQUEsS0FxQkFnMkIsRUFB
QSxLQUNBQyxJQTJCQTcxQixHQUFBRCxRQUFBaTJCLEVBZ0JBQSxFQUFBYSxJQUFBLEtBQ0FiLEVB
QUFtQixJQUFBLEtBQ0FuQixFQUFBc0IsSUFBQS9CLEVBRUFTLEVBQUE3MEIsVUFBQXUwQixLQUFB
LFNBQUFhLEVBQUFDLEdBQ0EsR0FBQTF0QixLQUFBc0YsY0FBQTRuQixFQUNBLE1BQUFNLEdBQUF4
dEIsS0FBQXl0QixFQUFBQyxFQUVBLElBQUFsTCxHQUFBLEdBQUEwSyxHQUFBVCxFQUVBLE9BREFu
TixHQUFBdGYsS0FBQSxHQUFBNnRCLEdBQUFKLEVBQUFDLEVBQUFsTCxJQUNBQSxJcERpbE1NLFNB
QVV0ckIsRUFBUUQsRUFBU0gsR0FFakMsWXFEdm9NQSxTQUFBMjNCLEdBQUFua0IsRUFBQXRILEVB
QUEwckIsR0FDQTF1QixLQUFBc0ssUUFDQXRLLEtBQUFnRCxVQUNBaEQsS0FBQTJ1QixLQUFBOVks
RUFHQTdWLEtBQUEwdUIsV0FBQUUsRUF5RkEsUUFBQUMsR0FBQXZrQixFQUFBdEgsRUFBQTByQixH
QUVBMXVCLEtBQUFzSyxRQUNBdEssS0FBQWdELFVBQ0FoRCxLQUFBMnVCLEtBQUE5WSxFQUdBN1Ys
S0FBQTB1QixXQUFBRSxFQUdBLFFBQUFFLE1BdEhBLEdBQUFweEIsR0FBQTVHLEVBQUEsSUFDQXFN
LEVBQUFyTSxFQUFBLEdBRUE4M0IsRUFBQTkzQixFQUFBLElBR0ErZSxHQURBL2UsRUFBQSxJQUNB
QSxFQUFBLElBQ0FBLEdBQUEsR0FDQUEsRUFBQSxJQWNBMjNCLEdBQUFwMkIsVUFBQTAyQixvQkEy
QkFOLEVBQUFwMkIsVUFBQTIyQixTQUFBLFNBQUFqRSxFQUFBaHFCLEdBQ0EsaUJBQUFncUIsSUFB
QSxtQkFBQUEsSUFBQSxNQUFBQSxHQUFBcnRCLEVBQUEsTUFDQXNDLEtBQUEwdUIsUUFBQTVELGdC
QUFBOXFCLEtBQUErcUIsR0FDQWhxQixHQUNBZixLQUFBMHVCLFFBQUFyRSxnQkFBQXJxQixLQUFB
ZSxFQUFBLGFBa0JBMHRCLEVBQUFwMkIsVUFBQTQyQixZQUFBLFNBQUFsdUIsR0FDQWYsS0FBQTB1
QixRQUFBbEUsbUJBQUF4cUIsTUFDQWUsR0FDQWYsS0FBQTB1QixRQUFBckUsZ0JBQUFycUIsS0FB
QWUsRUFBQSxlQTZDQSt0QixHQUFBejJCLFVBQUFvMkIsRUFBQXAyQixVQUNBdzJCLEVBQUF4MkIs
VUFBQSxHQUFBeTJCLEdBQ0FELEVBQUF4MkIsVUFBQWlOLFlBQUF1cEIsRUFFQTFyQixFQUFBMHJC
LEVBQUF4MkIsVUFBQW8yQixFQUFBcDJCLFdBQ0F3MkIsRUFBQXgyQixVQUFBNjJCLHNCQUFBLEVB
RUFoNEIsRUFBQUQsU0FDQW9TLFVBQUFvbEIsRUFDQW5sQixjQUFBdWxCLElyRHNxTU0sU0FBVTMz
QixFQUFRRCxFQUFTSCxHQUVqQyxZc0R4eU1BLElBWUE4M0IsSUFaQTkzQixFQUFBLElBb0JBc3pC
LFVBQUEsU0FBQUgsR0FDQSxVQVdBSSxnQkFBQSxTQUFBSixFQUFBbHBCLEtBZUF5cEIsbUJBQUEs
U0FBQVAsS0FlQVMsb0JBQUEsU0FBQVQsRUFBQVUsS0FjQUcsZ0JBQUEsU0FBQWIsRUFBQWMsTUFL
QTd6QixHQUFBRCxRQUFBMjNCLEd0RHl6TU0sU0FBVTEzQixFQUFRRCxFQUFTSCxHQUVqQyxZdUQz
NE1BLElBQUFxNEIsSUFBQSxDQVdBajRCLEdBQUFELFFBQUFrNEIsR3ZENjVNTSxTQUFVajRCLEVB
QVFELEVBQVNILEdBRWpDLFl3RHY2TUEsSUFBQWtULEdBQUEsbUJBQUFvbEIsZ0JBQUEsS0FBQUEs
T0FBQSwyQkFFQWw0QixHQUFBRCxRQUFBK1MsR3hENDdNTSxTQUFVOVMsRUFBUUQsRUFBU0gsR0FF
akMsWXlEajhNQSxJQUFBZ1UsR0FBQWhVLEVBQUEsSUFDQUksR0FBQUQsUUFBQSxTQUFBc1MsR0FH
QSxNQUFBdUIsR0FBQXZCLEdBREEsS3pEdzlNTSxTQUFVclMsRUFBUUQsRUFBU0gsR0FFakMsWTBE
LzlNQUksR0FBQUQsUUFGQSxnRDFEby9NTSxTQUFVQyxFQUFRRCxFQUFTSCxHQUVqQyxZMkRyL01B
LElBQUF1SCxJQUNBckIsb0JBQUEsRUFHQTlGLEdBQUFELFFBQUFvSCxHM0RzZ05NLFNBQVVuSCxF
QUFRRCxFQUFTSCxHQUVqQyxZNEQxL01BLFNBQUFzYSxHQUFBdE0sRUFBQXVxQixHQUdBLE1BRkEs
T0FBQUEsR0FBQTN4QixFQUFBLE1BRUEsTUFBQW9ILEVBQ0F1cUIsRUFLQXprQixNQUFBc1gsUUFB
QXBkLEdBQ0E4RixNQUFBc1gsUUFBQW1OLElBQ0F2cUIsRUFBQWpILEtBQUEwdUIsTUFBQXpuQixF
QUFBdXFCLEdBQ0F2cUIsSUFFQUEsRUFBQWpILEtBQUF3eEIsR0FDQXZxQixHQUdBOEYsTUFBQXNY
LFFBQUFtTixJQUVBdnFCLEdBQUF3cUIsT0FBQUQsSUFHQXZxQixFQUFBdXFCLEdBeENBLEdBQUEz
eEIsR0FBQTVHLEVBQUEsRUFFQUEsR0FBQSxFQXlDQUksR0FBQUQsUUFBQW1hLEc1RDZoTk0sU0FB
VWxhLEVBQVFELEVBQVNILEdBRWpDLFk2RGxrTkEsU0FBQW1iLEdBQUFzZCxFQUFBdEIsRUFBQTdw
QixHQUNBd0csTUFBQXNYLFFBQUFxTixHQUNBQSxFQUFBcjBCLFFBQUEreUIsRUFBQTdwQixHQUNH
bXJCLEdBQ0h0QixFQUFBNTJCLEtBQUErTSxFQUFBbXJCLEdBSUFyNEIsRUFBQUQsUUFBQWdiLEc3
RDRsTk0sU0FBVS9hLEVBQVFELEVBQVNILEdBRWpDLFk4RHJtTkEsU0FBQTA0QixLQU1BLE9BTEFD
LEdBQUF6d0IsRUFBQUosWUFHQTZ3QixFQUFBLGVBQUEzd0IsVUFBQTR3QixnQkFBQSwyQkFFQUQs
RUFoQkEsR0FBQXp3QixHQUFBbEksRUFBQSxHQUVBMjRCLEVBQUEsSUFpQkF2NEIsR0FBQUQsUUFB
QXU0QixHOURnb05NLFNBQVV0NEIsRUFBUUQsRUFBU0gsR0FFakMsWStEbHBOQSxTQUFBNjRCLEdB
QUFyb0IsRUFBQXNvQixHQUFpRCxLQUFBdG9CLFlBQUFzb0IsSUFBMEMsU0FBQXgxQixXQUFBLHFD
QUYzRixHQUFBc0QsR0FBQTVHLEVBQUEsR0FJQXNNLEVBQUF0TSxFQUFBLElBZ0JBNkosR0FkQTdK
LEVBQUEsR0FjQSxXQUNBLFFBQUE2SixHQUFBakIsR0FDQWl3QixFQUFBM3ZCLEtBQUFXLEdBRUFY
LEtBQUE2dkIsV0FBQSxLQUNBN3ZCLEtBQUE4dkIsVUFBQSxLQUNBOXZCLEtBQUErdkIsS0FBQXJ3
QixFQTJFQSxNQS9EQWlCLEdBQUF0SSxVQUFBcUssUUFBQSxTQUFBM0IsRUFBQWlDLEdBQ0FoRCxL
QUFBNnZCLFdBQUE3dkIsS0FBQTZ2QixlQUNBN3ZCLEtBQUE2dkIsV0FBQWh5QixLQUFBa0QsR0FD
QWYsS0FBQTh2QixVQUFBOXZCLEtBQUE4dkIsY0FDQTl2QixLQUFBOHZCLFVBQUFqeUIsS0FBQW1G
LElBV0FyQyxFQUFBdEksVUFBQXdMLFVBQUEsV0FDQSxHQUFBbkMsR0FBQTFCLEtBQUE2dkIsV0FD
QUcsRUFBQWh3QixLQUFBOHZCLFVBQ0Fwd0IsRUFBQU0sS0FBQSt2QixJQUNBLElBQUFydUIsR0FB
QXN1QixFQUFBLENBQ0F0dUIsRUFBQTVILFNBQUFrMkIsRUFBQWwyQixRQUFBNEQsRUFBQSxNQUNB
c0MsS0FBQTZ2QixXQUFBLEtBQ0E3dkIsS0FBQTh2QixVQUFBLElBQ0EsUUFBQTM0QixHQUFBLEVB
QXFCQSxFQUFBdUssRUFBQTVILE9BQXNCM0MsSUFDM0N1SyxFQUFBdkssR0FBQUUsS0FBQTI0QixF
QUFBNzRCLEdBQUF1SSxFQUVBZ0MsR0FBQTVILE9BQUEsRUFDQWsyQixFQUFBbDJCLE9BQUEsSUFJ
QTZHLEVBQUF0SSxVQUFBNDNCLFdBQUEsV0FDQSxNQUFBandCLE1BQUE2dkIsV0FBQTd2QixLQUFB
NnZCLFdBQUEvMUIsT0FBQSxHQUdBNkcsRUFBQXRJLFVBQUE2M0IsU0FBQSxTQUFBNXVCLEdBQ0F0
QixLQUFBNnZCLFlBQUE3dkIsS0FBQTh2QixZQUNBOXZCLEtBQUE2dkIsV0FBQS8xQixPQUFBd0gs
RUFDQXRCLEtBQUE4dkIsVUFBQWgyQixPQUFBd0gsSUFXQVgsRUFBQXRJLFVBQUF1TCxNQUFBLFdB
Q0E1RCxLQUFBNnZCLFdBQUEsS0FDQTd2QixLQUFBOHZCLFVBQUEsTUFRQW52QixFQUFBdEksVUFB
QTJMLFdBQUEsV0FDQWhFLEtBQUE0RCxTQUdBakQsS0FHQXpKLEdBQUFELFFBQUFtTSxFQUFBaUIs
YUFBQTFELEkvRHNxTk0sU0FBVXpKLEVBQVFELEVBQVNILEdBRWpDLFlnRWh4TkEsSUFBQStLLElB
SUFDLG9CQUFBLEVBR0E1SyxHQUFBRCxRQUFBNEssR2hFa3lOTSxTQUFVM0ssRUFBUUQsRUFBU0gs
R0FFakMsWWlFMXlOQSxTQUFBcTVCLEdBQUFDLEdBQ0EsR0FBQW51QixHQUFBbXVCLEVBQUFudUIs
S0FDQStOLEVBQUFvZ0IsRUFBQXBnQixRQUNBLE9BQUFBLElBQUEsVUFBQUEsRUFBQXRELGdCQUFB
LGFBQUF6SyxHQUFBLFVBQUFBLEdBR0EsUUFBQW91QixHQUFBN3pCLEdBQ0EsTUFBQUEsR0FBQTh6
QixjQUFBQyxhQUdBLFFBQUFDLEdBQUFoMEIsRUFBQWkwQixHQUNBajBCLEVBQUE4ekIsY0FBQUMs
YUFBQUUsRUFHQSxRQUFBQyxHQUFBbDBCLFNBQ0FBLEdBQUE4ekIsY0FBQUMsYUFHQSxRQUFBSSxH
QUFBOTBCLEdBQ0EsR0FBQXlQLEVBSUEsT0FIQXpQLEtBQ0F5UCxFQUFBNmtCLEVBQUF0MEIsR0FB
QSxHQUFBQSxFQUFBaXJCLFFBQUFqckIsRUFBQXlQLE9BRUFBLEVBekJBLEdBQUEzTSxHQUFBN0gs
RUFBQSxHQTRCQTg1QixHQUVBQyxvQkFBQSxTQUFBaDFCLEdBQ0EsTUFBQXcwQixHQUFBMXhCLEVB
QUFWLG9CQUFBcEMsS0FJQWkxQixNQUFBLFNBQUF0MEIsR0FDQSxJQUFBNnpCLEVBQUE3ekIsR0FB
QSxDQUlBLEdBQUFYLEdBQUE4QyxFQUFBVCxvQkFBQTFCLEdBQ0F1MEIsRUFBQVosRUFBQXQwQixH
QUFBLGtCQUNBbTFCLEVBQUFwNUIsT0FBQXE1Qix5QkFBQXAxQixFQUFBeUosWUFBQWpOLFVBQUEw
NEIsR0FFQUcsRUFBQSxHQUFBcjFCLEVBQUFrMUIsRUFNQWwxQixHQUFBdkQsZUFBQXk0QixJQUFB
LG1CQUFBQyxHQUFBaDVCLEtBQUEsbUJBQUFnNUIsR0FBQXBiLE1BSUFoZSxPQUFBQyxlQUFBZ0Us
RUFBQWsxQixHQUNBaDVCLFdBQUFpNUIsRUFBQWo1QixXQUNBRCxjQUFBLEVBQ0FFLElBQUEsV0FD
QSxNQUFBZzVCLEdBQUFoNUIsSUFBQVgsS0FBQTJJLE9BRUE0VixJQUFBLFNBQUF0SyxHQUNBNGxC
LEVBQUEsR0FBQTVsQixFQUNBMGxCLEVBQUFwYixJQUFBdmUsS0FBQTJJLEtBQUFzTCxNQUlBa2xC
LEVBQUFoMEIsR0FDQXVyQixTQUFBLFdBQ0EsTUFBQW1KLElBRUFDLFNBQUEsU0FBQTdsQixHQUNB
NGxCLEVBQUEsR0FBQTVsQixHQUVBOGxCLGFBQUEsV0FDQVYsRUFBQWwwQixTQUNBWCxHQUFBazFC
LFNBS0FNLHFCQUFBLFNBQUE3MEIsR0FDQSxJQUFBQSxFQUNBLFFBRUEsSUFBQWkwQixHQUFBSixF
QUFBN3pCLEVBRUEsS0FBQWkwQixFQUVBLE1BREFHLEdBQUFFLE1BQUF0MEIsSUFDQSxDQUdBLElB
QUE4MEIsR0FBQWIsRUFBQTFJLFdBQ0F3SixFQUFBWixFQUFBaHlCLEVBQUFULG9CQUFBMUIsR0FF
QSxPQUFBKzBCLEtBQUFELElBQ0FiLEVBQUFVLFNBQUFJLElBQ0EsSUFLQUgsYUFBQSxTQUFBNTBC
LEdBQ0EsR0FBQWkwQixHQUFBSixFQUFBN3pCLEVBQ0FpMEIsSUFDQUEsRUFBQVcsZ0JBS0FsNkIs
R0FBQUQsUUFBQTI1QixHakU2ek5NLFNBQVUxNUIsRUFBUUQsRUFBU0gsR0FFakMsWWtFcjVOQSxT
QUFBMDZCLEdBQUFwQixHQUNBLEdBQUFwZ0IsR0FBQW9nQixLQUFBcGdCLFVBQUFvZ0IsRUFBQXBn
QixTQUFBdEQsYUFFQSxpQkFBQXNELElBQ0F5aEIsRUFBQXJCLEVBQUFudUIsTUFHQSxhQUFBK04s
RUF6QkEsR0FBQXloQixJQUNBQyxPQUFBLEVBQ0FDLE1BQUEsRUFDQUMsVUFBQSxFQUNBQyxrQkFB
QSxFQUNBQyxPQUFBLEVBQ0FDLE9BQUEsRUFDQUMsUUFBQSxFQUNBQyxVQUFBLEVBQ0FDLE9BQUEs
RUFDQUMsUUFBQSxFQUNBQyxLQUFBLEVBQ0FoakIsTUFBQSxFQUNBL00sTUFBQSxFQUNBZ3dCLEtB
QUEsRUFDQUMsTUFBQSxFQWlCQXA3QixHQUFBRCxRQUFBdTZCLEdsRTY3Tk0sU0FBVXQ2QixFQUFR
RCxFQUFTSCxHQUVqQyxZbUVwK05BLElBQUE4ZixJQUNBbUIsa0JBQUEsRUFFQUUsaUJBQUEsRUFF
QTJILG9CQUFBLFNBQUEyUyxHQUNBM2IsRUFBQW1CLGtCQUFBd2EsRUFBQWxQLEVBQ0F6TSxFQUFB
cUIsaUJBQUFzYSxFQUFBN0osR0FJQXh4QixHQUFBRCxRQUFBMmYsR25FcS9OTSxTQUFVMWYsRUFB
UUQsRUFBU0gsR0FFakMsWW9FbGdPQSxJQUFBa0ksR0FBQWxJLEVBQUEsR0FDQTBpQixFQUFBMWlC
LEVBQUEsSUFDQXFZLEVBQUFyWSxFQUFBLElBWUF1WSxFQUFBLFNBQUF4VCxFQUFBdVQsR0FDQSxH
QUFBQSxFQUFBLENBQ0EsR0FBQWhTLEdBQUF2QixFQUFBdUIsVUFFQSxJQUFBQSxPQUFBdkIsRUFB
QTIyQixXQUFBLElBQUFwMUIsRUFBQXJCLFNBRUEsWUFEQXFCLEVBQUFsQixVQUFBa1QsR0FJQXZU
LEVBQUE0MkIsWUFBQXJqQixFQUdBcFEsR0FBQUosWUFDQSxlQUFBRSxVQUFBNHdCLGtCQUNBcmdC
LEVBQUEsU0FBQXhULEVBQUF1VCxHQUNBLE9BQUF2VCxFQUFBRSxTQUVBLFlBREFGLEVBQUFLLFVB
QUFrVCxFQUdBRCxHQUFBdFQsRUFBQTJkLEVBQUFwSyxPQUtBbFksRUFBQUQsUUFBQW9ZLEdwRW1o
T00sU0FBVW5ZLEVBQVFELEVBQVNILEdBRWpDLFlxRXZqT0EsU0FBQTQ3QixHQUFBNzJCLEdBSUEs
SUFDQUEsRUFBQTgyQixRQUNHLE1BQUE3NUIsS0FHSDVCLEVBQUFELFFBQUF5N0IsR3JFNGtPTSxT
QUFVeDdCLEVBQVFELEVBQVNILEdBRWpDLFlzRXBpT0EsU0FBQTg3QixHQUFBQyxFQUFBbDNCLEdB
Q0EsTUFBQWszQixHQUFBbDNCLEVBQUFtM0IsT0FBQSxHQUFBQyxjQUFBcDNCLEVBQUE0ZCxVQUFB
LEdBcERBLEdBQUF5WixJQUNBQyx5QkFBQSxFQUNBQyxtQkFBQSxFQUNBQyxrQkFBQSxFQUNBQyxr
QkFBQSxFQUNBQyxTQUFBLEVBQ0FDLGNBQUEsRUFDQUMsaUJBQUEsRUFDQUMsYUFBQSxFQUNBQyxN
QUFBLEVBQ0FDLFVBQUEsRUFDQUMsY0FBQSxFQUNBQyxZQUFBLEVBQ0FDLGNBQUEsRUFDQUMsV0FB
QSxFQUNBQyxTQUFBLEVBQ0FDLFlBQUEsRUFDQUMsYUFBQSxFQUNBQyxjQUFBLEVBQ0FDLFlBQUEs
RUFDQUMsZUFBQSxFQUNBQyxnQkFBQSxFQUNBQyxpQkFBQSxFQUNBQyxZQUFBLEVBQ0FDLFdBQUEs
RUFDQUMsWUFBQSxFQUNBQyxTQUFBLEVBQ0FDLE9BQUEsRUFDQUMsU0FBQSxFQUNBQyxTQUFBLEVB
Q0FDLFFBQUEsRUFDQUMsUUFBQSxFQUNBQyxNQUFBLEVBR0FDLGFBQUEsRUFDQUMsY0FBQSxFQUNB
QyxhQUFBLEVBQ0FDLGlCQUFBLEVBQ0FDLGtCQUFBLEVBQ0FDLGtCQUFBLEVBQ0FDLGVBQUEsRUFD
QUMsYUFBQSxHQWlCQUMsR0FBQSx3QkFJQTc5QixRQUFBd0QsS0FBQTQzQixHQUFBOTNCLFFBQUEs
U0FBQXc2QixHQUNBRCxFQUFBdjZCLFFBQUEsU0FBQTIzQixHQUNBRyxFQUFBSixFQUFBQyxFQUFB
NkMsSUFBQTFDLEVBQUEwQyxNQWFBLElBQUFDLElBQ0FDLFlBQ0FDLHNCQUFBLEVBQ0FDLGlCQUFB
LEVBQ0FDLGlCQUFBLEVBQ0FDLHFCQUFBLEVBQ0FDLHFCQUFBLEVBQ0FDLGtCQUFBLEdBRUFDLG9C
QUNBSCxxQkFBQSxFQUNBQyxxQkFBQSxHQUVBRyxRQUNBQyxhQUFBLEVBQ0FDLGFBQUEsRUFDQUMs
YUFBQSxHQUVBQyxjQUNBQyxtQkFBQSxFQUNBQyxtQkFBQSxFQUNBQyxtQkFBQSxHQUVBQyxZQUNB
QyxpQkFBQSxFQUNBQyxpQkFBQSxFQUNBQyxpQkFBQSxHQUVBQyxhQUNBQyxrQkFBQSxFQUNBQyxr
QkFBQSxFQUNBQyxrQkFBQSxHQUVBQyxXQUNBQyxnQkFBQSxFQUNBQyxnQkFBQSxFQUNBQyxnQkFB
QSxHQUVBQyxNQUNBQyxXQUFBLEVBQ0FDLGFBQUEsRUFDQW5ELFlBQUEsRUFDQW9ELFVBQUEsRUFD
QWxELFlBQUEsRUFDQW1ELFlBQUEsR0FFQUMsU0FDQUMsY0FBQSxFQUNBQyxjQUFBLEVBQ0FDLGNB
QUEsSUFJQUMsR0FDQWpGLG1CQUNBMkMsOEJBR0F6K0IsR0FBQUQsUUFBQWdoQyxHdEU0bU9NLFNB
QVUvZ0MsRUFBUUQsRUFBU0gsR0FFakMsWXVFL3VPQSxTQUFBb2hDLEdBQUFyckIsR0FDQSxRQUFB
c3JCLEVBQUE3L0IsZUFBQXVVLEtBR0F1ckIsRUFBQTkvQixlQUFBdVUsS0FHQXdyQixFQUFBOW5C
LEtBQUExRCxJQUNBc3JCLEVBQUF0ckIsSUFBQSxHQUNBLElBRUF1ckIsRUFBQXZyQixJQUFBLEdB
RUEsSUFHQSxRQUFBeXJCLEdBQUExckIsRUFBQXRCLEdBQ0EsYUFBQUEsR0FBQXNCLEVBQUFNLGtC
QUFBNUIsR0FBQXNCLEVBQUFPLGlCQUFBb3JCLE1BQUFqdEIsSUFBQXNCLEVBQUFRLHlCQUFBOUIs
RUFBQSxHQUFBc0IsRUFBQVMsNEJBQUEsSUFBQS9CLEVBNUJBLEdBQUFsTixHQUFBdEgsRUFBQSxJ
QUlBMGhDLEdBSEExaEMsRUFBQSxHQUNBQSxFQUFBLEdBRUFBLEVBQUEsTUFHQXVoQyxHQUZBdmhD
LEVBQUEsR0FFQSxHQUFBMmhDLFFBQUEsS0FBQXI2QixFQUFBa1AsMEJBQUEsS0FBQWxQLEVBQUFv
UCxvQkFBQSxRQUNBNHFCLEtBQ0FELEtBeUJBTyxHQU9BQyxrQkFBQSxTQUFBQyxHQUNBLE1BQUF4
NkIsR0FBQUUsa0JBQUEsSUFBQWs2QixFQUFBSSxJQUdBQyxrQkFBQSxTQUFBaDlCLEVBQUErOEIs
R0FDQS84QixFQUFBOG5CLGFBQUF2bEIsRUFBQUUsa0JBQUFzNkIsSUFHQUUsb0JBQUEsV0FDQSxN
QUFBMTZCLEdBQUFtUCxvQkFBQSxPQUdBd3JCLG9CQUFBLFNBQUFsOUIsR0FDQUEsRUFBQThuQixh
QUFBdmxCLEVBQUFtUCxvQkFBQSxLQVVBeXJCLHdCQUFBLFNBQUF2aEMsRUFBQTZULEdBQ0EsR0FB
QXNCLEdBQUF4TyxFQUFBb08sV0FBQWxVLGVBQUFiLEdBQUEyRyxFQUFBb08sV0FBQS9VLEdBQUEs
SUFDQSxJQUFBbVYsRUFBQSxDQUNBLEdBQUEwckIsRUFBQTFyQixFQUFBdEIsR0FDQSxRQUVBLElB
QUF1QixHQUFBRCxFQUFBQyxhQUNBLE9BQUFELEdBQUFNLGlCQUFBTixFQUFBUyw0QkFBQSxJQUFB
L0IsRUFDQXVCLEVBQUEsTUFFQUEsRUFBQSxJQUFBMnJCLEVBQUFsdEIsR0FDSyxNQUFBbE4sR0FB
QWtPLGtCQUFBN1UsR0FDTCxNQUFBNlQsRUFDQSxHQUVBN1QsRUFBQSxJQUFBK2dDLEVBQUFsdEIs
R0FFQSxNQVVBMnRCLCtCQUFBLFNBQUF4aEMsRUFBQTZULEdBQ0EsTUFBQTRzQixHQUFBemdDLElB
QUEsTUFBQTZULEVBR0E3VCxFQUFBLElBQUErZ0MsRUFBQWx0QixHQUZBLElBWUE0dEIsb0JBQUEs
U0FBQXI5QixFQUFBcEUsRUFBQTZULEdBQ0EsR0FBQXNCLEdBQUF4TyxFQUFBb08sV0FBQWxVLGVB
QUFiLEdBQUEyRyxFQUFBb08sV0FBQS9VLEdBQUEsSUFDQSxJQUFBbVYsRUFBQSxDQUNBLEdBQUFJ
LEdBQUFKLEVBQUFJLGNBQ0EsSUFBQUEsRUFDQUEsRUFBQW5SLEVBQUF5UCxPQUNPLElBQUFndEIs
RUFBQTFyQixFQUFBdEIsR0FFUCxXQURBdEwsTUFBQW01Qix1QkFBQXQ5QixFQUFBcEUsRUFFTyxJ
QUFBbVYsRUFBQUssZ0JBR1BwUixFQUFBK1EsRUFBQUcsY0FBQXpCLE1BQ08sQ0FDUCxHQUFBdUIs
R0FBQUQsRUFBQUMsY0FDQXVzQixFQUFBeHNCLEVBQUFFLGtCQUdBc3NCLEdBQ0F2OUIsRUFBQXc5
QixlQUFBRCxFQUFBdnNCLEVBQUEsR0FBQXZCLEdBQ1NzQixFQUFBTSxpQkFBQU4sRUFBQVMsNEJB
QUEsSUFBQS9CLEVBQ1R6UCxFQUFBOG5CLGFBQUE5VyxFQUFBLElBRUFoUixFQUFBOG5CLGFBQUE5
VyxFQUFBLEdBQUF2QixTQUdLLElBQUFsTixFQUFBa08sa0JBQUE3VSxHQUVMLFdBREFpaEMsR0FB
QVkscUJBQUF6OUIsRUFBQXBFLEVBQUE2VCxJQWVBZ3VCLHFCQUFBLFNBQUF6OUIsRUFBQXBFLEVB
QUE2VCxHQUNBLEdBQUE0c0IsRUFBQXpnQyxHQUFBLENBR0EsTUFBQTZULEVBQ0F6UCxFQUFBMDlC
LGdCQUFBOWhDLEdBRUFvRSxFQUFBOG5CLGFBQUFsc0IsRUFBQSxHQUFBNlQsS0FvQkFrdUIsd0JB
QUEsU0FBQTM5QixFQUFBcEUsR0FDQW9FLEVBQUEwOUIsZ0JBQUE5aEMsSUFnQkEwaEMsdUJBQUEs
U0FBQXQ5QixFQUFBcEUsR0FDQSxHQUFBbVYsR0FBQXhPLEVBQUFvTyxXQUFBbFUsZUFBQWIsR0FB
QTJHLEVBQUFvTyxXQUFBL1UsR0FBQSxJQUNBLElBQUFtVixFQUFBLENBQ0EsR0FBQUksR0FBQUos
RUFBQUksY0FDQSxJQUFBQSxFQUNBQSxFQUFBblIsTUFBQTNDLFFBQ08sSUFBQTBULEVBQUFLLGdC
QUFBLENBQ1AsR0FBQTFILEdBQUFxSCxFQUFBRyxZQUNBSCxHQUFBTSxnQkFDQXJSLEVBQUEwSixJ
QUFBLEVBRUExSixFQUFBMEosR0FBQSxPQUdBMUosR0FBQTA5QixnQkFBQTNzQixFQUFBQyxtQkFF
S3pPLEdBQUFrTyxrQkFBQTdVLElBQ0xvRSxFQUFBMDlCLGdCQUFBOWhDLElBYUFQLEdBQUFELFFB
QUF5aEMsR3ZFMndPTSxTQUFVeGhDLEVBQVFELEVBQVNILEdBRWpDLFl3RS85T0EsU0FBQTJpQyxL
QUNBLEdBQUF6NUIsS0FBQXdULGFBQUF4VCxLQUFBc3dCLGNBQUFvSixjQUFBLENBQ0ExNUIsS0FB
QXN3QixjQUFBb0osZUFBQSxDQUVBLElBQUFwdkIsR0FBQXRLLEtBQUFnQyxnQkFBQXNJLE1BQ0Fn
QixFQUFBc2MsRUFBQUcsU0FBQXpkLEVBRUEsT0FBQWdCLEdBQ0FxdUIsRUFBQTM1QixLQUFBNDVC
LFFBQUF0dkIsRUFBQXV2QixVQUFBdnVCLElBa0RBLFFBQUFxdUIsR0FBQW45QixFQUFBcTlCLEVB
QUFDLEdBQ0EsR0FBQUMsR0FBQTVpQyxFQUNBNmlDLEVBQUFyN0IsRUFBQVQsb0JBQUExQixHQUFB
dzlCLE9BRUEsSUFBQUgsRUFBQSxDQUVBLElBREFFLEtBQ0E1aUMsRUFBQSxFQUFlQSxFQUFBMmlD
LEVBQUFoZ0MsT0FBc0IzQyxJQUNyQzRpQyxFQUFBLEdBQUFELEVBQUEzaUMsS0FBQSxDQUVBLEtB
QUFBLEVBQUEsRUFBZUEsRUFBQTZpQyxFQUFBbGdDLE9BQW9CM0MsSUFBQSxDQUNuQyxHQUFBOGlD
LEdBQUFGLEVBQUF6aEMsZUFBQTBoQyxFQUFBN2lDLEdBQUFtVSxNQUNBMHVCLEdBQUE3aUMsR0FB
QThpQyxlQUNBRCxFQUFBN2lDLEdBQUE4aUMsaUJBR0csQ0FJSCxJQURBRixFQUFBLEdBQUFELEVB
Q0EzaUMsRUFBQSxFQUFlQSxFQUFBNmlDLEVBQUFsZ0MsT0FBb0IzQyxJQUNuQyxHQUFBNmlDLEVB
QUE3aUMsR0FBQW1VLFFBQUF5dUIsRUFFQSxZQURBQyxFQUFBN2lDLEdBQUE4aUMsVUFBQSxFQUlB
RCxHQUFBbGdDLFNBQ0FrZ0MsRUFBQSxHQUFBQyxVQUFBLElBZ0ZBLFFBQUFDLEdBQUE5ekIsR0FD
QSxHQUFBa0UsR0FBQXRLLEtBQUFnQyxnQkFBQXNJLE1BQ0E1RSxFQUFBa2lCLEVBQUFLLGdCQUFB
M2QsRUFBQWxFLEVBTUEsT0FKQXBHLE1BQUF3VCxjQUNBeFQsS0FBQXN3QixjQUFBb0osZUFBQSxH
QUVBdDVCLEVBQUEyQyxLQUFBMDJCLEVBQUF6NUIsTUFDQTBGLEVBdkxBLEdBQUF2QyxHQUFBck0s
RUFBQSxHQUVBOHdCLEVBQUE5d0IsRUFBQSxJQUNBNkgsRUFBQTdILEVBQUEsR0FDQXNKLEVBQUF0
SixFQUFBLEdBS0FxakMsR0FIQXJqQyxFQUFBLElBR0EsR0EwR0FzakMsR0FDQUMsYUFBQSxTQUFB
NzlCLEVBQUE4TixHQUNBLE1BQUFuSCxNQUFxQm1ILEdBQ3JCc2MsU0FBQXBxQixFQUFBOHpCLGNB
QUExSixTQUNBdGIsVUFBQXBTLE1BSUFvaEMsYUFBQSxTQUFBOTlCLEVBQUE4TixHQUtBLEdBQUFn
QixHQUFBc2MsRUFBQUcsU0FBQXpkLEVBQ0E5TixHQUFBOHpCLGVBQ0FvSixlQUFBLEVBQ0FhLGFB
QUEsTUFBQWp2QixJQUFBaEIsRUFBQWt3QixhQUNBQyxVQUFBLEtBQ0E3VCxTQUFBc1QsRUFBQW52
QixLQUFBdk8sR0FDQWsrQixZQUFBZCxRQUFBdHZCLEVBQUF1dkIsZUFHQTNnQyxLQUFBb1IsRUFB
QWdCLFdBQUFwUyxLQUFBb1IsRUFBQWt3QixjQUFBTCxJQUVBQSxHQUFBLElBSUFRLHNCQUFBLFNB
QUFuK0IsR0FHQSxNQUFBQSxHQUFBOHpCLGNBQUFpSyxjQUdBSyxrQkFBQSxTQUFBcCtCLEdBQ0Es
R0FBQThOLEdBQUE5TixFQUFBd0YsZ0JBQUFzSSxLQUlBOU4sR0FBQTh6QixjQUFBaUssaUJBQUFy
aEMsRUFFQSxJQUFBd2hDLEdBQUFsK0IsRUFBQTh6QixjQUFBb0ssV0FDQWwrQixHQUFBOHpCLGNB
QUFvSyxZQUFBZCxRQUFBdHZCLEVBQUF1dkIsU0FFQSxJQUFBdnVCLEdBQUFzYyxFQUFBRyxTQUFB
emQsRUFDQSxPQUFBZ0IsR0FDQTlPLEVBQUE4ekIsY0FBQW9KLGVBQUEsRUFDQUMsRUFBQW45QixF
QUFBbzlCLFFBQUF0dkIsRUFBQXV2QixVQUFBdnVCLElBQ0tvdkIsSUFBQWQsUUFBQXR2QixFQUFB
dXZCLFlBRUwsTUFBQXZ2QixFQUFBa3dCLGFBQ0FiLEVBQUFuOUIsRUFBQW85QixRQUFBdHZCLEVB
QUF1dkIsVUFBQXZ2QixFQUFBa3dCLGNBR0FiLEVBQUFuOUIsRUFBQW85QixRQUFBdHZCLEVBQUF1
dkIsVUFBQXZ2QixFQUFBdXZCLFlBQUEsTUFpQkEzaUMsR0FBQUQsUUFBQW1qQyxHeEUyL09NLFNB
QVVsakMsRUFBUUQsR3lFdHJQeEIsUUFBQTRqQyxLQUNBLFNBQUExaEMsT0FBQSxtQ0FFQSxRQUFB
MmhDLEtBQ0EsU0FBQTNoQyxPQUFBLHFDQXNCQSxRQUFBNGhDLEdBQUFDLEdBQ0EsR0FBQUMsSUFB
QUMsV0FFQSxNQUFBQSxZQUFBRixFQUFBLEVBR0EsS0FBQUMsSUFBQUosSUFBQUksSUFBQUMsV0FF
QSxNQURBRCxHQUFBQyxXQUNBQSxXQUFBRixFQUFBLEVBRUEsS0FFQSxNQUFBQyxHQUFBRCxFQUFB
LEdBQ0ssTUFBQWxpQyxHQUNMLElBRUEsTUFBQW1pQyxHQUFBNWpDLEtBQUEsS0FBQTJqQyxFQUFB
LEdBQ1MsTUFBQWxpQyxHQUVULE1BQUFtaUMsR0FBQTVqQyxLQUFBMkksS0FBQWc3QixFQUFBLEtB
TUEsUUFBQUcsR0FBQUMsR0FDQSxHQUFBQyxJQUFBQyxhQUVBLE1BQUFBLGNBQUFGLEVBR0EsS0FB
QUMsSUFBQVAsSUFBQU8sSUFBQUMsYUFFQSxNQURBRCxHQUFBQyxhQUNBQSxhQUFBRixFQUVBLEtB
RUEsTUFBQUMsR0FBQUQsR0FDSyxNQUFBdGlDLEdBQ0wsSUFFQSxNQUFBdWlDLEdBQUFoa0MsS0FB
QSxLQUFBK2pDLEdBQ1MsTUFBQXRpQyxHQUdULE1BQUF1aUMsR0FBQWhrQyxLQUFBMkksS0FBQW83
QixLQVlBLFFBQUFHLEtBQ0FDLEdBQUFDLElBR0FELEdBQUEsRUFDQUMsRUFBQTNoQyxPQUNBd0ss
RUFBQW0zQixFQUFBbk0sT0FBQWhyQixHQUVBbzNCLEdBQUEsRUFFQXAzQixFQUFBeEssUUFDQTZo
QyxLQUlBLFFBQUFBLEtBQ0EsSUFBQUgsRUFBQSxDQUdBLEdBQUFJLEdBQUFiLEVBQUFRLEVBQ0FD
LElBQUEsQ0FHQSxLQURBLEdBQUFsNkIsR0FBQWdELEVBQUF4SyxPQUNBd0gsR0FBQSxDQUdBLElB
RkFtNkIsRUFBQW4zQixFQUNBQSxPQUNBbzNCLEVBQUFwNkIsR0FDQW02QixHQUNBQSxFQUFBQyxH
QUFBRyxLQUdBSCxJQUFBLEVBQ0FwNkIsRUFBQWdELEVBQUF4SyxPQUVBMmhDLEVBQUEsS0FDQUQs
R0FBQSxFQUNBTCxFQUFBUyxJQWlCQSxRQUFBRSxHQUFBZCxFQUFBZSxHQUNBLzdCLEtBQUFnN0Is
TUFDQWg3QixLQUFBKzdCLFFBWUEsUUFBQXRQLE1BaEtBLEdBT0F3TyxHQUNBSSxFQVJBVyxFQUFB
OWtDLEVBQUFELFlBZ0JBLFdBQ0EsSUFFQWdrQyxFQURBLG1CQUFBQyxZQUNBQSxXQUVBTCxFQUVL
LE1BQUEvaEMsR0FDTG1pQyxFQUFBSixFQUVBLElBRUFRLEVBREEsbUJBQUFDLGNBQ0FBLGFBRUFS
LEVBRUssTUFBQWhpQyxHQUNMdWlDLEVBQUFQLEtBdURBLElBRUFXLEdBRkFuM0IsS0FDQWszQixH
QUFBLEVBRUFFLEdBQUEsQ0F5Q0FNLEdBQUFDLFNBQUEsU0FBQWpCLEdBQ0EsR0FBQTVoQyxHQUFB
LEdBQUF3UixPQUFBL1EsVUFBQUMsT0FBQSxFQUNBLElBQUFELFVBQUFDLE9BQUEsRUFDQSxPQUFB
M0MsR0FBQSxFQUF1QkEsRUFBQTBDLFVBQUFDLE9BQXNCM0MsSUFDN0NpQyxFQUFBakMsRUFBQSxH
QUFBMEMsVUFBQTFDLEVBR0FtTixHQUFBekcsS0FBQSxHQUFBaStCLEdBQUFkLEVBQUE1aEMsSUFD
QSxJQUFBa0wsRUFBQXhLLFFBQUEwaEMsR0FDQVQsRUFBQVksSUFTQUcsRUFBQXpqQyxVQUFBd2pD
LElBQUEsV0FDQTc3QixLQUFBZzdCLElBQUF6TyxNQUFBLEtBQUF2c0IsS0FBQSs3QixRQUVBQyxF
QUFBRSxNQUFBLFVBQ0FGLEVBQUFHLFNBQUEsRUFDQUgsRUFBQUksT0FDQUosRUFBQUssUUFDQUws
RUFBQXJ5QixRQUFBLEdBQ0FxeUIsRUFBQU0sWUFJQU4sRUFBQU8sR0FBQTlQLEVBQ0F1UCxFQUFB
USxZQUFBL1AsRUFDQXVQLEVBQUFTLEtBQUFoUSxFQUNBdVAsRUFBQVUsSUFBQWpRLEVBQ0F1UCxF
QUFBVyxlQUFBbFEsRUFDQXVQLEVBQUFZLG1CQUFBblEsRUFDQXVQLEVBQUFhLEtBQUFwUSxFQUNB
dVAsRUFBQWMsZ0JBQUFyUSxFQUNBdVAsRUFBQWUsb0JBQUF0USxFQUVBdVAsRUFBQXZCLFVBQUEs
U0FBQWhqQyxHQUFxQyxVQUVyQ3VrQyxFQUFBZ0IsUUFBQSxTQUFBdmxDLEdBQ0EsU0FBQTBCLE9B
QUEscUNBR0E2aUMsRUFBQWlCLElBQUEsV0FBMkIsV0FDM0JqQixFQUFBa0IsTUFBQSxTQUFBQyxH
QUNBLFNBQUFoa0MsT0FBQSxtQ0FFQTZpQyxFQUFBb0IsTUFBQSxXQUE0QixXekV3c1B0QixTQUFV
bG1DLEVBQVFELEVBQVNILEdBRWpDLFkwRXIyUEEsU0FBQWl3QixHQUFBMWMsR0FDQSxHQUFBQSxF
QUFBLENBQ0EsR0FBQTVTLEdBQUE0UyxFQUFBbEksU0FDQSxJQUFBMUssRUFDQSxzQ0FBQUEsRUFB
QSxLQUdBLFNBVUEsUUFBQTRsQyxHQUFBcDdCLEdBQ0EseUJBQUFBLElBQUEsb0JBQUFBLEdBQUE1
SixXQUFBLG1CQUFBNEosR0FBQTVKLFVBQUF3VixnQkFBQSxtQkFBQTVMLEdBQUE1SixVQUFBbVcs
aUJBV0EsUUFBQTh1QixHQUFBemhDLEVBQUEwaEMsR0FDQSxHQUFBajJCLEVBRUEsV0FBQXpMLElB
QUEsSUFBQUEsRUFDQXlMLEVBQUFrMkIsRUFBQUMsT0FBQUgsT0FDRyxxQkFBQXpoQyxHQUFBLENB
Q0gsR0FBQTBPLEdBQUExTyxFQUNBb0csRUFBQXNJLEVBQUF0SSxJQUNBLHVCQUFBQSxJQUFBLGlC
QUFBQSxHQUFBLENBQ0EsR0FBQXk3QixHQUFBLEVBTUFBLElBQUEzVyxFQUFBeGMsRUFBQUUsUUFD
QS9NLEVBQUEsWUFBQXVFLGFBQUF5N0IsR0FJQSxpQkFBQW56QixHQUFBdEksS0FDQXFGLEVBQUFx
MkIsRUFBQUMsd0JBQUFyekIsR0FDSzh5QixFQUFBOXlCLEVBQUF0SSxPQUlMcUYsRUFBQSxHQUFB
aUQsR0FBQXRJLEtBQUFzSSxHQUdBakQsRUFBQThHLGNBQ0E5RyxFQUFBOEcsWUFBQTlHLEVBQUF1
MkIsZ0JBR0F2MkIsRUFBQSxHQUFBdzJCLEdBQUF2ekIsT0FFRyxpQkFBQTFPLElBQUEsaUJBQUFB
LEdBQ0h5TCxFQUFBcTJCLEVBQUFJLHNCQUFBbGlDLEdBRUE2QixFQUFBLFlBQUE3QixHQXlCQSxP
QWZBeUwsR0FBQTAyQixZQUFBLEVBQ0ExMkIsRUFBQTIyQixZQUFBLEtBY0EzMkIsRUE1R0EsR0FB
QTVKLEdBQUE1RyxFQUFBLEdBQ0FxTSxFQUFBck0sRUFBQSxHQUVBb25DLEVBQUFwbkMsRUFBQSxL
QUNBMG1DLEVBQUExbUMsRUFBQSxJQUNBNm1DLEVBQUE3bUMsRUFBQSxJQU9BZ25DLEdBTEFobkMs
RUFBQSxLQUNBQSxFQUFBLEdBQ0FBLEVBQUEsR0FHQSxTQUFBeVQsR0FDQXZLLEtBQUFtK0IsVUFB
QTV6QixJQWtHQXBILEdBQUEyNkIsRUFBQXpsQyxVQUFBNmxDLEdBQ0FFLDJCQUFBZCxJQUdBcG1D
LEVBQUFELFFBQUFxbUMsRzFFczRQTSxTQUFVcG1DLEVBQVFELEVBQVNILEdBRWpDLFkyRTEvUEEs
SUFBQTRHLEdBQUE1RyxFQUFBLEdBRUFrUyxFQUFBbFMsRUFBQSxJQUlBdW5DLEdBRkF2bkMsRUFB
QSxJQUdBd25DLEtBQUEsRUFDQUMsVUFBQSxFQUNBQyxNQUFBLEVBRUFDLFFBQUEsU0FBQTVpQyxH
QUNBLGNBQUFBLElBQUEsSUFBQUEsRUFDQXdpQyxFQUFBRyxNQUNLeDFCLEVBQUFPLGVBQUExTixH
QUNMLG1CQUFBQSxHQUFBb0csS0FDQW84QixFQUFBRSxVQUVBRixFQUFBQyxTQUdBNWdDLEdBQUEs
S0FBQTdCLEtBSUEzRSxHQUFBRCxRQUFBb25DLEczRTRnUU0sU0FBVW5uQyxFQUFRRCxFQUFTSCxH
QUVqQyxZNEV4aVFBLElBQUE0bkMsR0FFQUMsR0FDQUMsNEJBQUEsU0FBQTl6QixHQUNBNHpCLEVB
QUE1ekIsSUFJQTB5QixHQUNBQyxPQUFBLFNBQUFvQixHQUNBLE1BQUFILEdBQUFHLElBSUFyQixH
QUFBNTRCLFVBQUErNUIsRUFFQXpuQyxFQUFBRCxRQUFBdW1DLEc1RXlqUU0sU0FBVXRtQyxFQUFR
RCxFQUFTSCxHQUVqQyxZNkVqalFBLFNBQUE4bUMsR0FBQXJ6QixHQUVBLE1BREF1MEIsSUFBQXBo
QyxFQUFBLE1BQUE2TSxFQUFBdEksTUFDQSxHQUFBNjhCLEdBQUF2MEIsR0FPQSxRQUFBd3pCLEdB
QUEzdUIsR0FDQSxVQUFBMnZCLEdBQUEzdkIsR0FPQSxRQUFBNHZCLEdBQUE1aUMsR0FDQSxNQUFB
QSxhQUFBMmlDLEdBNUNBLEdBQUFyaEMsR0FBQTVHLEVBQUEsR0FJQWdvQyxHQUZBaG9DLEVBQUEs
R0FFQSxNQUNBaW9DLEVBQUEsS0FFQUUsR0FHQUMsNEJBQUEsU0FBQUMsR0FDQUwsRUFBQUssR0FJ
QUMseUJBQUEsU0FBQUQsR0FDQUosRUFBQUksSUErQkF4QixHQUNBQywwQkFDQUcsd0JBQ0FpQixr
QkFDQXA2QixVQUFBcTZCLEVBR0EvbkMsR0FBQUQsUUFBQTBtQyxHN0U0bFFNLFNBQVV6bUMsRUFB
UUQsRUFBU0gsR0FFakMsWThFbm5RQSxTQUFBdW9DLEdBQUFqakMsRUFBQWdkLEdBR0EsTUFBQWhk
LElBQUEsaUJBQUFBLElBQUEsTUFBQUEsRUFBQVQsSUFFQWt1QixFQUFBMVEsT0FBQS9jLEVBQUFU
LEtBR0F5ZCxFQUFBM2EsU0FBQSxJQVdBLFFBQUE2Z0MsR0FBQXJpQyxFQUFBc2lDLEVBQUF4K0Is
RUFBQXkrQixHQUNBLEdBQUF2OUIsU0FBQWhGLEVBT0EsSUFMQSxjQUFBZ0YsR0FBQSxZQUFBQSxJ
QUVBaEYsRUFBQSxNQUdBLE9BQUFBLEdBQUEsV0FBQWdGLEdBQUEsV0FBQUEsR0FHQSxXQUFBQSxH
QUFBaEYsRUFBQXVOLFdBQUFSLEVBS0EsTUFKQWpKLEdBQUF5K0IsRUFBQXZpQyxFQUdBLEtBQUFz
aUMsRUFBQUUsRUFBQUosRUFBQXBpQyxFQUFBLEdBQUFzaUMsR0FDQSxDQUdBLElBQUFHLEdBQ0FD
LEVBQ0FDLEVBQUEsRUFDQUMsRUFBQSxLQUFBTixFQUFBRSxFQUFBRixFQUFBTyxDQUVBLElBQUFs
MUIsTUFBQXNYLFFBQUFqbEIsR0FDQSxPQUFBOUYsR0FBQSxFQUFtQkEsRUFBQThGLEVBQUFuRCxP
QUFxQjNDLElBQ3hDdW9DLEVBQUF6aUMsRUFBQTlGLEdBQ0F3b0MsRUFBQUUsRUFBQVIsRUFBQUss
RUFBQXZvQyxHQUNBeW9DLEdBQUFOLEVBQUFJLEVBQUFDLEVBQUE1K0IsRUFBQXkrQixPQUVHLENB
Q0gsR0FBQU8sR0FBQUMsRUFBQS9pQyxFQUNBLElBQUE4aUMsRUFBQSxDQUNBLEdBQ0FFLEdBREFD
LEVBQUFILEVBQUExb0MsS0FBQTRGLEVBRUEsSUFBQThpQyxJQUFBOWlDLEVBQUFrakMsUUFFQSxJ
QURBLEdBQUFDLEdBQUEsSUFDQUgsRUFBQUMsRUFBQTdRLFFBQUFmLE1BQ0FvUixFQUFBTyxFQUFB
MzBCLE1BQ0FxMEIsRUFBQUUsRUFBQVIsRUFBQUssRUFBQVUsS0FDQVIsR0FBQU4sRUFBQUksRUFB
QUMsRUFBQTUrQixFQUFBeStCLE9BZUEsUUFBQVMsRUFBQUMsRUFBQTdRLFFBQUFmLE1BQUEsQ0FD
QSxHQUFBK1IsR0FBQUosRUFBQTMwQixLQUNBKzBCLEtBQ0FYLEVBQUFXLEVBQUEsR0FDQVYsRUFB
QUUsRUFBQWhXLEVBQUExUSxPQUFBa25CLEVBQUEsSUFBQVAsRUFBQVQsRUFBQUssRUFBQSxHQUNB
RSxHQUFBTixFQUFBSSxFQUFBQyxFQUFBNStCLEVBQUF5K0IsU0FJSyxlQUFBdjlCLEVBQUEsQ0FD
TCxHQUFBcStCLEdBQUEsR0FhQUMsRUFBQTdsQyxPQUFBdUMsRUFDb09TLEdBQUEseUJBQUE2aUMs
RUFBQSxxQkFBK0czb0MsT0FBQXdELEtBQUE2QixHQUFBbEMsS0FBQSxVQUF5Q3dsQyxFQUFBRCxJ
QUk1WCxNQUFBVixHQW1CQSxRQUFBWSxHQUFBdmpDLEVBQUE4RCxFQUFBeStCLEdBQ0EsYUFBQXZp
QyxFQUNBLEVBR0FxaUMsRUFBQXJpQyxFQUFBLEdBQUE4RCxFQUFBeStCLEdBL0pBLEdBQUE5aEMs
R0FBQTVHLEVBQUEsR0FHQWtULEdBREFsVCxFQUFBLElBQ0FBLEVBQUEsTUFFQWtwQyxFQUFBbHBD
LEVBQUEsS0FFQSt5QixHQURBL3lCLEVBQUEsR0FDQUEsRUFBQSxLQUdBMm9DLEdBRkEzb0MsRUFB
QSxHQUVBLEtBQ0FncEMsRUFBQSxHQXVKQTVvQyxHQUFBRCxRQUFBdXBDLEc5RXFxUU0sU0FBVXRw
QyxFQUFRRCxFQUFTSCxHQUVqQyxZK0VqMFFBLFNBQUEycEMsR0FBQXhkLEdBRUEsR0FBQTZJLEdB
QUEzTCxTQUFBOW5CLFVBQUFvRyxTQUNBbkcsRUFBQVYsT0FBQVMsVUFBQUMsZUFDQW9vQyxFQUFB
akksT0FBQSxJQUFBM00sRUFFQXowQixLQUFBaUIsR0FFQWdCLFFBQUEsc0JBQTZCLFFBRTdCQSxR
QUFBLHNFQUNBLEtBQ0EsR0FBQWlDLEdBQUF1d0IsRUFBQXowQixLQUFBNHJCLEVBQ0EsT0FBQXlk
LEdBQUFud0IsS0FBQWhWLEdBQ0csTUFBQUYsR0FDSCxVQThGQSxRQUFBc2xDLEdBQUEvSCxHQUNB
LEdBQUFnSSxHQUFBQyxFQUFBakksRUFDQSxJQUFBZ0ksRUFBQSxDQUNBLEdBQUFFLEdBQUFGLEVB
QUFFLFFBRUFDLEdBQUFuSSxHQUNBa0ksRUFBQTVsQyxRQUFBeWxDLElBSUEsUUFBQUssR0FBQXZw
QyxFQUFBOEQsRUFBQTBsQyxHQUNBLG1CQUFBeHBDLEdBQUEsWUFBQThELEVBQUEsUUFBQUEsRUFB
QTJsQyxTQUFBNW5DLFFBQUEsb0JBQUFpQyxFQUFBNGxDLFdBQUEsSUFBQUYsRUFBQSxnQkFBQUEs
RUFBQSxRQUdBLFFBQUFHLEdBQUE3MkIsR0FDQSxhQUFBQSxFQUNBLFNBQ0csaUJBQUFBLElBQUEs
aUJBQUFBLEdBQ0gsUUFDRyxpQkFBQUEsR0FBQXRJLEtBQ0hzSSxFQUFBdEksS0FFQXNJLEVBQUF0
SSxLQUFBOG5CLGFBQUF4ZixFQUFBdEksS0FBQXhLLE1BQUEsVUFJQSxRQUFBNHBDLEdBQUF6SSxH
QUNBLEdBR0FxSSxHQUhBeHBDLEVBQUE2cEMsRUFBQUYsZUFBQXhJLEdBQ0FydUIsRUFBQSsyQixF
QUFBQyxXQUFBM0ksR0FDQTRJLEVBQUFGLEVBQUFHLFdBQUE3SSxFQU1BLE9BSkE0SSxLQUNBUCxF
QUFBSyxFQUFBRixlQUFBSSxJQUdBUixFQUFBdnBDLEVBQUE4UyxLQUFBYSxRQUFBNjFCLEdBdkpB
LEdBc0NBUyxHQUNBYixFQUNBRSxFQUNBWSxFQUNBQyxFQUNBQyxFQUNBQyxFQTVDQXBrQyxFQUFB
NUcsRUFBQSxJQUVBK04sRUFBQS9OLEVBQUEsSUF3QkFpckMsR0F0QkFqckMsRUFBQSxHQUNBQSxF
QUFBLEdBdUJBLG1CQUFBOFQsT0FBQXBQLE1BRUEsbUJBQUF3bUMsTUFBQXZCLEVBQUF1QixNQUVB
LE1BQUFBLElBQUEzcEMsV0FBQSxtQkFBQTJwQyxLQUFBM3BDLFVBQUErQyxNQUFBcWxDLEVBQUF1
QixJQUFBM3BDLFVBQUErQyxPQUVBLG1CQUFBNm1DLE1BQUF4QixFQUFBd0IsTUFFQSxNQUFBQSxJ
QUFBNXBDLFdBQUEsbUJBQUE0cEMsS0FBQTVwQyxVQUFBK0MsTUFBQXFsQyxFQUFBd0IsSUFBQTVw
QyxVQUFBK0MsTUFVQSxJQUFBMm1DLEVBQUEsQ0FDQSxHQUFBRyxHQUFBLEdBQUFGLEtBQ0FHLEVB
QUEsR0FBQUYsSUFFQVAsR0FBQSxTQUFBOUksRUFBQWdJLEdBQ0FzQixFQUFBdHNCLElBQUFnakIs
RUFBQWdJLElBRUFDLEVBQUEsU0FBQWpJLEdBQ0EsTUFBQXNKLEdBQUFscUMsSUFBQTRnQyxJQUVB
bUksRUFBQSxTQUFBbkksR0FDQXNKLEVBQUEsT0FBQXRKLElBRUErSSxFQUFBLFdBQ0EsTUFBQS8y
QixPQUFBcFAsS0FBQTBtQyxFQUFBOW1DLFNBR0F3bUMsRUFBQSxTQUFBaEosR0FDQXVKLEVBQUFD
LElBQUF4SixJQUVBaUosRUFBQSxTQUFBakosR0FDQXVKLEVBQUEsT0FBQXZKLElBRUFrSixFQUFB
LFdBQ0EsTUFBQWwzQixPQUFBcFAsS0FBQTJtQyxFQUFBL21DLGFBRUMsQ0FDRCxHQUFBaW5DLE1B
Q0FDLEtBSUFDLEVBQUEsU0FBQTNKLEdBQ0EsVUFBQUEsR0FFQTRKLEVBQUEsU0FBQTdtQyxHQUNB
LE1BQUE4bUMsVUFBQTltQyxFQUFBK21DLE9BQUEsT0FHQWhCLEdBQUEsU0FBQTlJLEVBQUFnSSxH
QUNBLEdBQUFqbEMsR0FBQTRtQyxFQUFBM0osRUFDQXlKLEdBQUExbUMsR0FBQWlsQyxHQUVBQyxF
QUFBLFNBQUFqSSxHQUNBLEdBQUFqOUIsR0FBQTRtQyxFQUFBM0osRUFDQSxPQUFBeUosR0FBQTFt
QyxJQUVBb2xDLEVBQUEsU0FBQW5JLEdBQ0EsR0FBQWo5QixHQUFBNG1DLEVBQUEzSixTQUNBeUos
R0FBQTFtQyxJQUVBZ21DLEVBQUEsV0FDQSxNQUFBL3BDLFFBQUF3RCxLQUFBaW5DLEdBQUF2bkMs
SUFBQTBuQyxJQUdBWixFQUFBLFNBQUFoSixHQUNBLEdBQUFqOUIsR0FBQTRtQyxFQUFBM0osRUFD
QTBKLEdBQUEzbUMsSUFBQSxHQUVBa21DLEVBQUEsU0FBQWpKLEdBQ0EsR0FBQWo5QixHQUFBNG1D
LEVBQUEzSixTQUNBMEosR0FBQTNtQyxJQUVBbW1DLEVBQUEsV0FDQSxNQUFBbHFDLFFBQUF3RCxL
QUFBa25DLEdBQUF4bkMsSUFBQTBuQyxJQUlBLEdBQUFHLE1Bd0NBckIsR0FDQXNCLGNBQUEsU0FB
QWhLLEVBQUFpSyxHQUNBLEdBQUFqQyxHQUFBQyxFQUFBakksRUFDQWdJLElBQUFsakMsRUFBQSxP
QUNBa2pDLEVBQUFFLFNBQUErQixDQUVBLFFBQUExckMsR0FBQSxFQUFtQkEsRUFBQTByQyxFQUFB
L29DLE9BQXlCM0MsSUFBQSxDQUM1QyxHQUFBMnJDLEdBQUFELEVBQUExckMsR0FDQTRyQyxFQUFB
bEMsRUFBQWlDLEVBQ0FDLElBQUFybEMsRUFBQSxPQUNBLE1BQUFxbEMsRUFBQWpDLFVBQUEsaUJB
QUFpQyxHQUFBeDRCLFNBQUEsTUFBQXc0QixFQUFBeDRCLFNBQUE3TSxFQUFBLE9BQ0FxbEMsRUFB
QTNZLFdBQUExc0IsRUFBQSxNQUNBLE1BQUFxbEMsRUFBQUMsV0FDQUQsRUFBQUMsU0FBQXBLLEdB
S0FtSyxFQUFBQyxXQUFBcEssR0FBQWw3QixFQUFBLE1BQUFvbEMsRUFBQUMsRUFBQUMsU0FBQXBL
LEtBR0FxSyx1QkFBQSxTQUFBckssRUFBQXJ1QixFQUFBeTRCLEdBU0F0QixFQUFBOUksR0FQQXJ1
QixVQUNBeTRCLFdBQ0E1ekIsS0FBQSxLQUNBMHhCLFlBQ0ExVyxXQUFBLEVBQ0E4WSxZQUFBLEtB
SUFDLHdCQUFBLFNBQUF2SyxFQUFBcnVCLEdBQ0EsR0FBQXEyQixHQUFBQyxFQUFBakksRUFDQWdJ
LE1BQUF4VyxZQUtBd1csRUFBQXIyQixZQUVBNjRCLGlCQUFBLFNBQUF4SyxHQUNBLEdBQUFnSSxH
QUFBQyxFQUFBakksRUFDQWdJLElBQUFsakMsRUFBQSxPQUNBa2pDLEVBQUF4VyxXQUFBLEVBQ0Es
SUFBQXdXLEVBQUFvQyxVQUVBcEIsRUFBQWhKLElBR0F5SyxrQkFBQSxTQUFBekssR0FDQSxHQUFB
Z0ksR0FBQUMsRUFBQWpJLEVBQ0FnSSxNQUFBeFcsV0FLQXdXLEVBQUFzQyxlQUVBSSxtQkFBQSxT
QUFBMUssR0FDQSxHQUFBZ0ksR0FBQUMsRUFBQWpJLEVBQ0EsSUFBQWdJLEVBQUEsQ0FNQUEsRUFB
QXhXLFdBQUEsQ0FDQSxLQUFBd1csRUFBQW9DLFVBRUFuQixFQUFBakosR0FHQStKLEVBQUE5a0Ms
S0FBQSs2QixJQUVBMksseUJBQUEsV0FDQSxJQUFBakMsRUFBQWtDLGdCQUFBLENBS0EsT0FBQXJz
QyxHQUFBLEVBQW1CQSxFQUFBd3JDLEVBQUE3b0MsT0FBeUIzQyxJQUFBLENBRTVDd3BDLEVBREFn
QyxFQUFBeHJDLElBR0F3ckMsRUFBQTdvQyxPQUFBLElBRUFzd0IsVUFBQSxTQUFBd08sR0FDQSxH
QUFBZ0ksR0FBQUMsRUFBQWpJLEVBQ0EsU0FBQWdJLEtBQUF4VyxXQUVBcVosd0JBQUEsU0FBQUMs
R0FDQSxHQUFBaEcsR0FBQSxFQUNBLElBQUFnRyxFQUFBLENBQ0EsR0FBQWpzQyxHQUFBMnBDLEVB
QUFzQyxHQUNBcjVCLEVBQUFxNUIsRUFBQWo1QixNQUNBaXpCLElBQUFzRCxFQUFBdnBDLEVBQUFp
c0MsRUFBQXQ0QixRQUFBZixLQUFBbEksV0FHQSxHQUFBd2hDLEdBQUE5K0IsRUFBQUMsUUFDQTh6
QixFQUFBK0ssS0FBQUMsUUFHQSxPQURBbEcsSUFBQTRELEVBQUF1QyxxQkFBQWpMLElBR0FpTCxx
QkFBQSxTQUFBakwsR0FFQSxJQURBLEdBQUE4RSxHQUFBLEdBQ0E5RSxHQUNBOEUsR0FBQTJELEVB
QUF6SSxHQUNBQSxFQUFBMEksRUFBQXdDLFlBQUFsTCxFQUVBLE9BQUE4RSxJQUVBcUcsWUFBQSxT
QUFBbkwsR0FDQSxHQUFBZ0ksR0FBQUMsRUFBQWpJLEVBQ0EsT0FBQWdJLEtBQUFFLGFBRUFNLGVB
QUEsU0FBQXhJLEdBQ0EsR0FBQXJ1QixHQUFBKzJCLEVBQUFDLFdBQUEzSSxFQUNBLE9BQUFydUIs
R0FHQTYyQixFQUFBNzJCLEdBRkEsTUFJQWczQixXQUFBLFNBQUEzSSxHQUNBLEdBQUFnSSxHQUFB
QyxFQUFBakksRUFDQSxPQUFBZ0ksS0FBQXIyQixRQUFBLE1BRUFrM0IsV0FBQSxTQUFBN0ksR0FD
QSxHQUFBcnVCLEdBQUErMkIsRUFBQUMsV0FBQTNJLEVBQ0EsT0FBQXJ1QixNQUFBRSxPQUdBRixF
QUFBRSxPQUFBbTVCLFNBRkEsTUFJQUUsWUFBQSxTQUFBbEwsR0FDQSxHQUFBZ0ksR0FBQUMsRUFB
QWpJLEVBQ0EsT0FBQWdJLEtBQUFvQyxTQUFBLE1BRUFnQixVQUFBLFNBQUFwTCxHQUNBLEdBQUFn
SSxHQUFBQyxFQUFBakksR0FDQXJ1QixFQUFBcTJCLElBQUFyMkIsUUFBQSxJQUVBLE9BREEsT0FB
QUEsSUFBQWEsUUFBQSxNQUdBNjRCLFFBQUEsU0FBQXJMLEdBQ0EsR0FBQXJ1QixHQUFBKzJCLEVB
QUFDLFdBQUEzSSxFQUNBLHdCQUFBcnVCLEdBQ0FBLEVBQ0ssaUJBQUFBLEdBQ0wsR0FBQUEsRUFF
QSxNQUdBMjVCLGVBQUEsU0FBQXRMLEdBQ0EsR0FBQWdJLEdBQUFDLEVBQUFqSSxFQUNBLE9BQUFn
SSxLQUFBc0MsWUFBQSxHQUlBcEIsYUFDQXFDLGlCQUFBeEMsRUFFQXlDLDRCQUFBLFNBQUFDLEVB
QUFDLEdBQ0Esc0JBQUFsaUMsU0FBQW1pQyxXQUFBLENBSUEsR0FBQUMsTUFDQWIsRUFBQTkrQixF
QUFBQyxRQUNBOHpCLEVBQUErSyxLQUFBQyxRQUVBLEtBU0EsSUFSQVMsR0FDQUcsRUFBQTNtQyxN
QUNBcEcsS0FBQW1oQyxFQUFBMEksRUFBQUYsZUFBQXhJLEdBQUEsS0FDQXNJLFNBQUFvRCxJQUFB
cEQsU0FBQSxLQUNBQyxXQUFBbUQsSUFBQW5ELFdBQUEsT0FJQXZJLEdBQUEsQ0FDQSxHQUFBcnVC
LEdBQUErMkIsRUFBQUMsV0FBQTNJLEdBQ0FvSyxFQUFBMUIsRUFBQXdDLFlBQUFsTCxHQUNBNEks
RUFBQUYsRUFBQUcsV0FBQTdJLEdBQ0FxSSxFQUFBTyxFQUFBRixFQUFBRixlQUFBSSxHQUFBLEtB
Q0FqbUMsRUFBQWdQLEtBQUFhLE9BQ0FvNUIsR0FBQTNtQyxNQUNBcEcsS0FBQXdwQyxFQUNBQyxT
QUFBM2xDLElBQUEybEMsU0FBQSxLQUNBQyxXQUFBNWxDLElBQUE0bEMsV0FBQSxPQUVBdkksRUFB
QW9LLEdBRUssTUFBQTNuQyxJQUtMK0csUUFBQW1pQyxXQUFBQyxLQUVBQywyQkFBQSxXQUNBLG1C
QUFBcmlDLFNBQUFzaUMsZUFHQXRpQyxRQUFBc2lDLGlCQUlBeHRDLEdBQUFELFFBQUFxcUMsRy9F
MDFRTSxTQUFVcHFDLEVBQVFELEVBQVNILEdBRWpDLFlnRnhzUkEsSUFBQTBDLEdBQUExQyxFQUFB
LEdBTUE2dEMsR0FTQUMsT0FBQSxTQUFBdHBDLEVBQUF1cEMsRUFBQTlqQyxHQUNBLE1BQUF6RixH
QUFBOEQsa0JBQ0E5RCxFQUFBOEQsaUJBQUF5bEMsRUFBQTlqQyxHQUFBLElBRUEwVSxPQUFBLFdB
Q0FuYSxFQUFBd3BDLG9CQUFBRCxFQUFBOWpDLEdBQUEsTUFHS3pGLEVBQUErRCxhQUNML0QsRUFB
QStELFlBQUEsS0FBQXdsQyxFQUFBOWpDLElBRUEwVSxPQUFBLFdBQ0FuYSxFQUFBeXBDLFlBQUEs
S0FBQUYsRUFBQTlqQyxVQUpLLElBa0JMMGlCLFFBQUEsU0FBQW5vQixFQUFBdXBDLEVBQUE5akMs
R0FDQSxNQUFBekYsR0FBQThELGtCQUNBOUQsRUFBQThELGlCQUFBeWxDLEVBQUE5akMsR0FBQSxJ
QUVBMFUsT0FBQSxXQUNBbmEsRUFBQXdwQyxvQkFBQUQsRUFBQTlqQyxHQUFBLE9BUUEwVSxPQUFB
amMsSUFLQXdyQyxnQkFBQSxhQUdBOXRDLEdBQUFELFFBQUEwdEMsR2hGMHRSTSxTQUFVenRDLEVB
QVFELEVBQVNILEdBRWpDLFlpRnJ4UkEsU0FBQW11QyxHQUFBcHBDLEdBQ0EsTUFBQXFwQyxHQUFB
cG1DLFNBQUE0d0IsZ0JBQUE3ekIsR0FQQSxHQUFBc3BDLEdBQUFydUMsRUFBQSxLQUVBb3VDLEVB
QUFwdUMsRUFBQSxLQUNBNDdCLEVBQUE1N0IsRUFBQSxJQUNBc3VDLEVBQUF0dUMsRUFBQSxJQVlB
dXVDLEdBQ0FDLHlCQUFBLFNBQUFsVixHQUNBLEdBQUFwZ0IsR0FBQW9nQixLQUFBcGdCLFVBQUFv
Z0IsRUFBQXBnQixTQUFBdEQsYUFDQSxPQUFBc0QsS0FBQSxVQUFBQSxHQUFBLFNBQUFvZ0IsRUFB
QW51QixNQUFBLGFBQUErTixHQUFBLFNBQUFvZ0IsRUFBQW1WLGtCQUdBQyx3QkFBQSxXQUNBLEdB
QUFDLEdBQUFMLEdBQ0EsUUFDQUssY0FDQUMsZUFBQUwsRUFBQUMseUJBQUFHLEdBQUFKLEVBQUFN
LGFBQUFGLEdBQUEsT0FTQUcsaUJBQUEsU0FBQUMsR0FDQSxHQUFBQyxHQUFBVixJQUNBVyxFQUFB
RixFQUFBSixZQUNBTyxFQUFBSCxFQUFBSCxjQUNBSSxLQUFBQyxHQUFBZCxFQUFBYyxLQUNBVixF
QUFBQyx5QkFBQVMsSUFDQVYsRUFBQVksYUFBQUYsRUFBQUMsR0FFQXRULEVBQUFxVCxLQVVBSixh
QUFBLFNBQUFPLEdBQ0EsR0FBQUMsRUFFQSxzQkFBQUQsR0FFQUMsR0FDQUMsTUFBQUYsRUFBQUcs
ZUFDQUMsSUFBQUosRUFBQUssa0JBRUssSUFBQXpuQyxTQUFBcW5DLFdBQUFELEVBQUFsMkIsVUFB
QSxVQUFBazJCLEVBQUFsMkIsU0FBQXRELGNBQUEsQ0FFTCxHQUFBd2xCLEdBQUFwekIsU0FBQXFu
QyxVQUFBSyxhQUdBdFUsR0FBQXVVLGtCQUFBUCxJQUNBQyxHQUNBQyxPQUFBbFUsRUFBQXdVLFVB
QUEsYUFBQVIsRUFBQTU2QixNQUFBeFIsUUFDQXdzQyxLQUFBcFUsRUFBQXlVLFFBQUEsYUFBQVQs
RUFBQTU2QixNQUFBeFIsY0FLQXFzQyxHQUFBaEIsRUFBQXlCLFdBQUFWLEVBR0EsT0FBQUMsS0FB
eUJDLE1BQUEsRUFBQUUsSUFBQSxJQVN6QkwsYUFBQSxTQUFBQyxFQUFBVyxHQUNBLEdBQUFULEdB
QUFTLEVBQUFULE1BQ0FFLEVBQUFPLEVBQUFQLEdBS0EsUUFKQXB0QyxLQUFBb3RDLElBQ0FBLEVB
QUFGLEdBR0Esa0JBQUFGLEdBQ0FBLEVBQUFHLGVBQUFELEVBQ0FGLEVBQUFLLGFBQUFob0MsS0FB
QXVvQyxJQUFBUixFQUFBSixFQUFBNTZCLE1BQUF4UixZQUNLLElBQUFnRixTQUFBcW5DLFdBQUFE
LEVBQUFsMkIsVUFBQSxVQUFBazJCLEVBQUFsMkIsU0FBQXRELGNBQUEsQ0FDTCxHQUFBd2xCLEdB
QUFnVSxFQUFBYSxpQkFDQTdVLEdBQUE4VSxVQUFBLEdBQ0E5VSxFQUFBd1UsVUFBQSxZQUFBTixH
QUNBbFUsRUFBQXlVLFFBQUEsWUFBQUwsRUFBQUYsR0FDQWxVLEVBQUErVSxhQUVBOUIsR0FBQStC
LFdBQUFoQixFQUFBVyxJQUtBM3ZDLEdBQUFELFFBQUFvdUMsR2pGNHlSTSxTQUFVbnVDLEVBQVFE
LEVBQVNILEdBRWpDLFlrRjk0UkEsU0FBQXN1QyxHQUFBandCLEdBRUEsd0JBREFBLE1BQUEsb0JB
QUFyVyx1QkFBQTVGLEtBRUEsV0FFQSxLQUNBLE1BQUFpYyxHQUFBZ3lCLGVBQUFoeUIsRUFBQWl5
QixLQUNHLE1BQUF0dUMsR0FDSCxNQUFBcWMsR0FBQWl5QixNQUlBbHdDLEVBQUFELFFBQUFtdUMs
R2xGNDZSTSxTQUFVbHVDLEVBQVFELEVBQVNILEdBRWpDLFltRi81UkEsU0FBQXV3QyxHQUFBQyxF
QUFBQyxHQUVBLE9BREFDLEdBQUFqcEMsS0FBQXVvQyxJQUFBUSxFQUFBeHRDLE9BQUF5dEMsRUFB
QXp0QyxRQUNBM0MsRUFBQSxFQUFpQkEsRUFBQXF3QyxFQUFZcndDLElBQzdCLEdBQUFtd0MsRUFB
QXhVLE9BQUEzN0IsS0FBQW93QyxFQUFBelUsT0FBQTM3QixHQUNBLE1BQUFBLEVBR0EsT0FBQW13
QyxHQUFBeHRDLFNBQUF5dEMsRUFBQXp0QyxRQUFBLEVBQUEwdEMsRUFRQSxRQUFBQyxHQUFBQyxH
QUNBLE1BQUFBLEdBSUFBLEVBQUEzckMsV0FBQTRyQyxFQUNBRCxFQUFBaFksZ0JBRUFnWSxFQUFB
dHFDLFdBTkEsS0FVQSxRQUFBd3FDLEdBQUEvckMsR0FJQSxNQUFBQSxHQUFBRyxjQUFBSCxFQUFB
RyxhQUFBQyxJQUFBLEdBV0EsUUFBQTRyQyxHQUFBQyxFQUFBSixFQUFBcm1DLEVBQUEwbUMsRUFB
QS9rQyxHQUNBLEdBQUFwQixFQUNBLElBQUFDLEVBQUFDLG1CQUFBLENBQ0EsR0FBQWttQyxHQUFB
RixFQUFBOWxDLGdCQUFBc0ksTUFBQW8xQixNQUNBejlCLEVBQUErbEMsRUFBQS9sQyxJQUNBTCxH
QUFBLGtDQUFBSyxPQUFBOG5CLGFBQUE5bkIsRUFBQXhLLE1BQ0EySyxRQUFBQyxLQUFBVCxHQUdB
LEdBQUFzTSxHQUFBNUwsRUFBQXVMLGVBQUFpNkIsRUFBQXptQyxFQUFBLEtBQUE0bUMsRUFBQUgs
RUFBQUosR0FBQTFrQyxFQUFBLEVBR0FwQixJQUNBUSxRQUFBSSxRQUFBWixHQUdBa21DLEVBQUF4
ckMsbUJBQUE0ckMsaUJBQUFKLEVBQ0FLLEVBQUFDLG9CQUFBbDZCLEVBQUF3NUIsRUFBQUksRUFB
QUMsRUFBQTFtQyxHQVVBLFFBQUFnbkMsR0FBQUMsRUFBQVosRUFBQUssRUFBQS9rQyxHQUNBLEdB
QUEzQixHQUFBakIsRUFBQUMsMEJBQUFPLFdBRUFtbkMsR0FBQVEsRUFBQUMsaUJBQ0FubkMsR0FB
QTZDLFFBQUEyakMsRUFBQSxLQUFBUyxFQUFBWixFQUFBcm1DLEVBQUEwbUMsRUFBQS9rQyxHQUNB
NUMsRUFBQUMsMEJBQUE0RCxRQUFBNUMsR0FZQSxRQUFBb25DLEdBQUFuaEMsRUFBQW9nQyxFQUFB
cDVCLEdBY0EsSUFWQWhNLEVBQUErTCxpQkFBQS9HLEVBQUFnSCxHQUtBbzVCLEVBQUEzckMsV0FB
QTRyQyxJQUNBRCxJQUFBaFksaUJBSUFnWSxFQUFBbFYsV0FDQWtWLEVBQUEvdUIsWUFBQSt1QixF
QUFBbFYsV0FjQSxRQUFBa1csR0FBQWhCLEdBQ0EsR0FBQWlCLEdBQUFsQixFQUFBQyxFQUNBLElB
QUFpQixFQUFBLENBQ0EsR0FBQW5zQyxHQUFBbUMsRUFBQVYsb0JBQUEwcUMsRUFDQSxVQUFBbnND
LE1BQUEyQixjQXdCQSxRQUFBeXFDLEdBQUEvc0MsR0FDQSxTQUFBQSxLQUFBRSxXQUFBOHNDLEdB
QUFodEMsRUFBQUUsV0FBQTRyQyxHQUFBOXJDLEVBQUFFLFdBQUErc0MsR0FjQSxRQUFBQyxHQUFB
ckIsR0FDQSxHQUFBaUIsR0FBQWxCLEVBQUFDLEdBQ0FzQixFQUFBTCxHQUFBaHFDLEVBQUFWLG9C
QUFBMHFDLEVBQ0EsT0FBQUssT0FBQTdxQyxZQUFBNnFDLEVBQUEsS0FHQSxRQUFBQyxHQUFBdkIs
R0FDQSxHQUFBd0IsR0FBQUgsRUFBQXJCLEVBQ0EsT0FBQXdCLEtBQUFDLG1CQUFBakIsaUJBQUEs
S0E5TUEsR0FBQXhxQyxHQUFBNUcsRUFBQSxHQUVBbVosRUFBQW5aLEVBQUEsSUFDQXNILEVBQUF0
SCxFQUFBLElBQ0FrUyxFQUFBbFMsRUFBQSxJQUNBc25CLEVBQUF0bkIsRUFBQSxJQUVBNkgsR0FE
QTdILEVBQUEsSUFDQUEsRUFBQSxJQUNBbXhDLEVBQUFueEMsRUFBQSxLQUNBeXhDLEVBQUF6eEMs
RUFBQSxLQUNBK0ssRUFBQS9LLEVBQUEsSUFDQTBlLEVBQUExZSxFQUFBLElBRUFzeUMsR0FEQXR5
QyxFQUFBLEdBQ0FBLEVBQUEsTUFDQXdMLEVBQUF4TCxFQUFBLElBQ0FxekIsRUFBQXJ6QixFQUFB
LElBQ0FzSixFQUFBdEosRUFBQSxHQUVBK2UsRUFBQS9lLEVBQUEsSUFDQXdtQyxFQUFBeG1DLEVB
QUEsSUFFQXFZLEdBREFyWSxFQUFBLEdBQ0FBLEVBQUEsS0FDQWt5QixFQUFBbHlCLEVBQUEsSUFH
QW1GLEdBRkFuRixFQUFBLEdBRUFzSCxFQUFBRSxtQkFDQStxQyxFQUFBanJDLEVBQUFtUCxvQkFF
QXM3QixFQUFBLEVBQ0FsQixFQUFBLEVBQ0FtQixFQUFBLEdBRUFRLEtBc0xBQyxFQUFBLEVBQ0FD
LEVBQUEsV0FDQXhwQyxLQUFBeXBDLE9BQUFGLElBRUFDLEdBQUFueEMsVUFBQTAyQixvQkFJQXlh
LEVBQUFueEMsVUFBQXF4QyxPQUFBLFdBQ0EsTUFBQTFwQyxNQUFBc0ssTUFBQW8xQixPQUVBOEos
RUFBQXRuQyx3QkFBQSxDQW9CQSxJQUFBaW1DLElBQ0FxQixrQkFLQUcsd0JBQUFMLEVBVUFNLGNB
QUEsU0FBQWxDLEVBQUFtQyxHQUNBQSxLQVVBQyxxQkFBQSxTQUFBQyxFQUFBdDdCLEVBQUF3YyxF
QUFBeWMsRUFBQTNtQyxHQVFBLE1BUEFvbkMsR0FBQXlCLGNBQUFsQyxFQUFBLFdBQ0F2ZCxFQUFB
YSx1QkFBQStlLEVBQUF0N0IsRUFBQXdjLEdBQ0FscUIsR0FDQW9wQixFQUFBSSx3QkFBQXdmLEVB
QUFocEMsS0FJQWdwQyxHQVdBQyx3QkFBQSxTQUFBdjdCLEVBQUFpNUIsRUFBQUssRUFBQS9rQyxH
QU1BNGxDLEVBQUFsQixJQUFBaHFDLEVBQUEsTUFFQTBnQixFQUFBc0IsNkJBQ0EsSUFBQTRvQixH
QUFBaEwsRUFBQTd1QixHQUFBLEVBTUFyTyxHQUFBVSxlQUFBdW5DLEVBQUFDLEVBQUFaLEVBQUFL
LEVBQUEva0MsRUFFQSxJQUFBaW5DLEdBQUEzQixFQUFBNEIsVUFBQVQsTUFHQSxPQUZBSCxHQUFB
VyxHQUFBM0IsRUFFQUEsR0FnQkE2QiwyQkFBQSxTQUFBQyxFQUFBMzdCLEVBQUFpNUIsRUFBQTNt
QyxHQUVBLE1BREEsT0FBQXFwQyxHQUFBNTBCLEVBQUFHLElBQUF5MEIsSUFBQTFzQyxFQUFBLE1B
Q0F5cUMsRUFBQWtDLDRCQUFBRCxFQUFBMzdCLEVBQUFpNUIsRUFBQTNtQyxJQUdBc3BDLDRCQUFB
LFNBQUFELEVBQUEzN0IsRUFBQWk1QixFQUFBM21DLEdBQ0FvcEIsRUFBQUcsaUJBQUF2cEIsRUFB
QSxtQkFDQWlJLEVBQUFPLGVBQUFrRixJQUNBL1EsRUFBQSxzQkFBQStRLEdBQUEsMEdBQUFBLEdB
QUEsd0ZBQUFBLE9BQUF2VixLQUFBdVYsRUFBQW5FLE1BQUEscUZBSUEsSUFJQTJnQixHQUpBcWYs
RUFBQXRoQyxFQUFBakssY0FBQXlxQyxHQUNBOUosTUFBQWp4QixHQUlBLElBQUEyN0IsRUFBQSxD
QUNBLEdBQUExNEIsR0FBQThELEVBQUF4ZCxJQUFBb3lDLEVBQ0FuZixHQUFBdlosRUFBQTY0Qixx
QkFBQTc0QixFQUFBL0MsY0FFQXNjLEdBQUFwVixDQUdBLElBQUFrMEIsR0FBQWQsRUFBQXZCLEVB
RUEsSUFBQXFDLEVBQUEsQ0FDQSxHQUFBUyxHQUFBVCxFQUFBL25DLGdCQUNBME0sRUFBQTg3QixF
QUFBbGdDLE1BQUFvMUIsS0FDQSxJQUFBMVcsRUFBQXRhLEVBQUFELEdBQUEsQ0FDQSxHQUFBZzhC
LEdBQUFWLEVBQUF6dEMsbUJBQUFxRyxvQkFDQStuQyxFQUFBM3BDLEdBQUEsV0FDQUEsRUFBQTFK
LEtBQUFvekMsR0FHQSxPQURBdEMsR0FBQTJCLHFCQUFBQyxFQUFBTyxFQUFBcmYsRUFBQXljLEVB
QUFnRCxHQUNBRCxFQUVBdEMsRUFBQXdDLHVCQUFBakQsR0FJQSxHQUFBa0QsR0FBQW5ELEVBQUFD
LEdBQ0FtRCxFQUFBRCxLQUFBaEQsRUFBQWdELEdBQ0FFLEVBQUFwQyxFQUFBaEIsR0FpQkFLLEVB
QUE4QyxJQUFBZCxJQUFBZSxFQUNBMXVDLEVBQUErckMsRUFBQTZCLHdCQUFBTSxFQUFBNUMsRUFB
QUssRUFBQTljLEdBQUEzdUIsbUJBQUFxRyxtQkFJQSxPQUhBNUIsSUFDQUEsRUFBQTFKLEtBQUEr
RSxHQUVBQSxHQWdCQXN0QyxPQUFBLFNBQUFqN0IsRUFBQWk1QixFQUFBM21DLEdBQ0EsTUFBQW9u
QyxHQUFBa0MsNEJBQUEsS0FBQTU3QixFQUFBaTVCLEVBQUEzbUMsSUFXQTRwQyx1QkFBQSxTQUFB
akQsR0FPQWtCLEVBQUFsQixJQUFBaHFDLEVBQUEsS0FNQSxJQUFBcXNDLEdBQUFkLEVBQUF2QixF
QUNBLEtBQUFxQyxFQUFBLENBR0FyQixFQUFBaEIsR0FHQSxJQUFBQSxFQUFBM3JDLFVBQUEyckMs
RUFBQXFELGFBQUExQixFQU1BLFVBSUEsYUFGQUMsR0FBQVMsRUFBQUcsVUFBQVQsUUFDQXJwQyxF
QUFBVSxlQUFBMm5DLEVBQUFzQixFQUFBckMsR0FBQSxJQUNBLEdBR0FVLG9CQUFBLFNBQUFsNkIs
RUFBQXc1QixFQUFBcGdDLEVBQUF5Z0MsRUFBQTFtQyxHQUdBLEdBRkF1bkMsRUFBQWxCLElBQUFo
cUMsRUFBQSxNQUVBcXFDLEVBQUEsQ0FDQSxHQUFBaUQsR0FBQXZELEVBQUFDLEVBQ0EsSUFBQTBC
LEVBQUE2QixlQUFBLzhCLEVBQUE4OEIsR0FFQSxXQURBcnNDLEdBQUFwQyxhQUFBK0ssRUFBQTBq
QyxFQUdBLElBQUFFLEdBQUFGLEVBQUFodkMsYUFBQW90QyxFQUFBK0IsbUJBQ0FILEdBQUF6Uixn
QkFBQTZQLEVBQUErQixtQkFFQSxJQUFBQyxHQUFBSixFQUFBSyxTQUNBTCxHQUFBcm5CLGFBQUF5
bEIsRUFBQStCLG1CQUFBRCxFQUVBLElBQUFJLEdBQUFwOUIsRUFvQkFxOUIsRUFBQWxFLEVBQUFp
RSxFQUFBRixHQUNBSSxFQUFBLGFBQUFGLEVBQUEveEIsVUFBQWd5QixFQUFBLEdBQUFBLEVBQUEs
bUJBQUFILEVBQUE3eEIsVUFBQWd5QixFQUFBLEdBQUFBLEVBQUEsR0FFQTdELEdBQUEzckMsV0FB
QTRyQyxHQUFBanFDLEVBQUEsS0FBQTh0QyxHQVVBLEdBRkE5RCxFQUFBM3JDLFdBQUE0ckMsR0FB
QWpxQyxFQUFBLE1BRUEyRCxFQUFBbW5DLGlCQUFBLENBQ0EsS0FBQWQsRUFBQWxWLFdBQ0FrVixF
QUFBL3VCLFlBQUErdUIsRUFBQWxWLFVBRUF2aUIsR0FBQWhCLGlCQUFBeTRCLEVBQUF4NUIsRUFB
QSxVQUVBaUIsR0FBQXU0QixFQUFBeDVCLEdBQ0F2UCxFQUFBcEMsYUFBQStLLEVBQUFvZ0MsRUFB
QXRxQyxhQWdCQWxHLEdBQUFELFFBQUFreEMsR25GdzlSTSxTQUFVanhDLEVBQVFELEVBQVNILEdB
RWpDLFlvRnArU0EsU0FBQTIwQyxHQUFBanZDLEdBR0EsSUFGQSxHQUFBeUYsSUFFQUEsRUFBQXpG
LEVBQUFrdkMscUJBQUFyTixFQUFBRSxXQUNBL2hDLElBQUFGLGtCQUdBLE9BQUEyRixLQUFBbzhC
LEVBQUFDLEtBQ0E5aEMsRUFBQUYsbUJBQ0cyRixJQUFBbzhCLEVBQUFHLE1BQ0gsU0FERyxHQVhI
LEdBQUFILEdBQUF2bkMsRUFBQSxHQWdCQUksR0FBQUQsUUFBQXcwQyxHcEZ1L1NNLFNBQVV2MEMs
RUFBUTRvQixFQUFxQmhwQixHQUU3QyxZcUZoL1NFLFNBQUE2MEMsR0FBQUMsRUFBQUMsRUFBQUMs
R0EwQkYsUUFBQUMsS0FDQUMsSUFBQUMsSUFDQUQsRUFBQUMsRUFBQXZ0QyxTQVNBLFFBQUF3dEMs
S0FDQSxNQUFBQyxHQTBCQSxRQUFBQyxHQUFBbDdCLEdBQ0Esc0JBQUFBLEdBQ0EsU0FBQS9YLE9B
QUEsc0NBR0EsSUFBQWt6QyxJQUFBLENBS0EsT0FIQU4sS0FDQUMsRUFBQW51QyxLQUFBcVQsR0FF
QSxXQUNBLEdBQUFtN0IsRUFBQSxDQUlBQSxHQUFBLEVBRUFOLEdBQ0EsSUFBQTN5QixHQUFBNHlC
LEVBQUFyckIsUUFBQXpQLEVBQ0E4NkIsR0FBQXZvQyxPQUFBMlYsRUFBQSxLQTZCQSxRQUFBa3pC
LEdBQUFDLEdBQ0EsSUFBQTMwQyxPQUFBNDBDLEVBQUEsR0FBQUQsR0FDQSxTQUFBcHpDLE9BQUEs
MEVBR0Esd0JBQUFvekMsR0FBQXRxQyxLQUNBLFNBQUE5SSxPQUFBLHFGQUdBLElBQUFzekMsRUFD
QSxTQUFBdHpDLE9BQUEscUNBR0EsS0FDQXN6QyxHQUFBLEVBQ0FOLEVBQUFPLEVBQUFQLEVBQUFJ
LEdBQ0ssUUFDTEUsR0FBQSxFQUlBLE9BREFoUyxHQUFBd1IsRUFBQUQsRUFDQTcwQyxFQUFBLEVB
QW1CQSxFQUFBc2pDLEVBQUEzZ0MsT0FBc0IzQyxJQUFBLEVBRXpDK1osRUFEQXVwQixFQUFBdGpD
LE1BSUEsTUFBQW8xQyxHQWFBLFFBQUFJLEdBQUFDLEdBQ0Esc0JBQUFBLEdBQ0EsU0FBQXp6QyxP
QUFBLDZDQUdBdXpDLEdBQUFFLEVBQ0FOLEdBQWNycUMsS0FBQTRxQyxFQUFBQyxPQVNkLFFBQUFD
LEtBQ0EsR0FBQUMsR0FFQUMsRUFBQWIsQ0FDQSxPQUFBWSxJQVNBWixVQUFBLFNBQUFjLEdBS0Es
UUFBQUMsS0FDQUQsRUFBQTdkLE1BQ0E2ZCxFQUFBN2QsS0FBQTZjLEtBTkEsb0JBQUFnQixHQUNB
LFNBQUE5eUMsV0FBQSx5Q0FXQSxPQUZBK3lDLE1BRWdCQyxZQURoQkgsRUFBQUUsTUFHS0gsRUFB
QUssRUFBQXowQyxHQUFBLFdBQ0wsTUFBQW9ILE9BQ0tndEMsRUFuTUwsR0FBQU0sRUFPQSxJQUxB
LG1CQUFBekIsSUFBQSxvQkFBQUMsS0FDQUEsRUFBQUQsRUFDQUEsTUFBQTN5QyxJQUdBLG9CQUFB
NHlDLEdBQUEsQ0FDQSxzQkFBQUEsR0FDQSxTQUFBM3lDLE9BQUEsMENBR0EsT0FBQTJ5QyxHQUFB
SCxHQUFBQyxFQUFBQyxHQUdBLHNCQUFBRCxHQUNBLFNBQUF6eUMsT0FBQSx5Q0FHQSxJQUFBdXpD
LEdBQUFkLEVBQ0FPLEVBQUFOLEVBQ0FJLEtBQ0FELEVBQUFDLEVBQ0FRLEdBQUEsQ0FvTEEsT0FG
QUgsSUFBWXJxQyxLQUFBNHFDLEVBQUFDLE9BRVpRLEdBQ0FoQixXQUNBRixZQUNBRixXQUNBUyxr
QkFDR1csRUFBQUQsRUFBQXowQyxHQUFBbTBDLEVBQUFPLEVyRmd5UzRCeDJDLEVBQW9CVSxFQUFF
c29CLEVBQXFCLElBQUssV0FBYSxNQUFPK3NCLEtBQ2xFL3NCLEVBQXVCLEVBQUk2ckIsQ0FDdkMs
SUFBSWEsR0FBd0QxMUMsRUFBb0IsSUFDNUV5MkMsRUFBa0R6MkMsRUFBb0IsS0FDdEV1MkMsRUFB
MER2MkMsRUFBb0JtQixFQUFFczFDLEdxRmpoVHpHVixHQUNBQyxLQUFBLGlCckY0d1RNLFNBQVU1
MUMsRUFBUTRvQixFQUFxQmhwQixHQUU3QyxZQUNxQixJQUFJMDJDLEdBQXlDMTJDLEVBQW9CLEtz
RnR4VHRGczRCLEVBQUFvZSxFQUFBLEVBQUFwZSxNQUVBdFAsR0FBQSxLdEYreFRNLFNBQVU1b0Is
RUFBUTRvQixFQUFxQmhwQixHQUU3QyxjQTBCTSxTQUFVSSxFQUFRNG9CLEVBQXFCaHBCLEdBRTdD
LFl1RnZ6VEEsU0FBQTIyQyxLQUNBLE9BQUFDLEdBQUE3ekMsVUFBQUMsT0FBQTZ6QyxFQUFBL2lD
LE1BQUE4aUMsR0FBQUUsRUFBQSxFQUFrRUEsRUFBQUYsRUFBYUUsSUFDL0VELEVBQUFDLEdBQUEv
ekMsVUFBQSt6QyxFQUdBLFlBQUFELEVBQUE3ekMsT0FDQSxTQUFBNEYsR0FDQSxNQUFBQSxJQUlB
LElBQUFpdUMsRUFBQTd6QyxPQUNBNnpDLEVBQUEsR0FHQUEsRUFBQUUsT0FBQSxTQUFBajFDLEVB
QUFDLEdBQ0Esa0JBQ0EsTUFBQUQsR0FBQUMsRUFBQTB6QixVQUFBcnpCLEdBQUFXLGVBNUJBaW1C
LEVBQUEsRUFBQTJ0QixHdkZ1MlRNLFNBQVV2MkMsRUFBUTRvQixFQUFxQmhwQixHQUU3QyxZQUNx
QixJQUFJZzNDLEdBQXFEaDNDLEVBQW9CLEtBRXpFaTNDLEdBRDREajNDLEVBQW9CLElBQy9CQSxF
QUFvQixLQUM3REEsR0FBb0JVLEVBQUVzb0IsRUFBcUIsSUFBSyxXQUFhLE1BQU9ndUIsR0FBc0Qs
SUFHMUhoM0MsRUFBb0JVLEVBQUVzb0IsRUFBcUIsSUFBSyxXQUFhLE1BQU9pdUIsR0FBa0QsS0FT
akosU0FBVTcyQyxFQUFRRCxFQUFTSCxHd0Y3MVRqQ0ksRUFBQUQsUUFBQUgsRUFBQSxReEZpNFRN
LFNBQVVJLEVBQVE0b0IsRUFBcUJocEIsR0FFN0MsWUFDK0JBLEdBQW9CVSxFQUFFc29CLEVBQXFC
LElBQUssV0FBYSxNQUFPa3VCLEtBQ3BFbDNDLEVBQW9CVSxFQUFFc29CLEVBQXFCLElBQUssV0FB
YSxNQUFPbXVCLElBQzlFLElBQUlDLEdBQTJDcDNDLEVBQW9CLElBQy9EcTNDLEVBQW1EcjNDLEVB
QW9CbUIsRUFBRWkyQyxHeUZqNlRsR0YsRUFBQUcsRUFBQXYxQyxFQUFBdzFDLE9BQ0FDLGFBQUFG
LEVBQUF2MUMsRUFBQXdxQixLQUFBa3JCLFdBQ0FDLGVBQUFKLEVBQUF2MUMsRUFBQXdxQixLQUFB
a3JCLFdBQ0FFLGlCQUFBTCxFQUFBdjFDLEVBQUF3cUIsS0FBQWtyQixXQUNBakMsYUFBQThCLEVB
QUF2MUMsRUFBQXdxQixLQUFBa3JCLGFBR0FMLEVBQUFFLEVBQUF2MUMsRUFBQXcxQyxPQUNBaEMs
VUFBQStCLEVBQUF2MUMsRUFBQXdxQixLQUFBa3JCLFdBQ0FoQyxTQUFBNkIsRUFBQXYxQyxFQUFB
d3FCLEtBQUFrckIsV0FDQXBDLFNBQUFpQyxFQUFBdjFDLEVBQUF3cUIsS0FBQWtyQixjekZ5NlRN
LFNBQVVwM0MsRUFBUTRvQixFQUFxQmhwQixHQUU3QyxZMEZyN1RBLFNBQUE2NEIsR0FBQXJvQixF
QUFBc29CLEdBQWlELEtBQUF0b0IsWUFBQXNvQixJQUEwQyxTQUFBeDFCLFdBQUEscUNBRTNGLFFB
QUFxMEMsR0FBQXJrQyxFQUFBL1MsR0FBaUQsSUFBQStTLEVBQWEsU0FBQXNrQyxnQkFBQSw0REFB
eUYsUUFBQXIzQyxHQUFBLGlCQUFBQSxJQUFBLG1CQUFBQSxHQUFBK1MsRUFBQS9TLEVBRXZKLFFB
QUFzM0MsR0FBQUMsRUFBQUMsR0FBMEMsc0JBQUFBLElBQUEsT0FBQUEsRUFBK0QsU0FBQXowQyxX
QUFBLGlFQUFBeTBDLEdBQXVHRCxHQUFBdjJDLFVBQUFULE9BQUE2bEMsT0FBQW9SLEtBQUF4MkMs
V0FBeUVpTixhQUFlZ0csTUFBQXNqQyxFQUFBNzJDLFlBQUEsRUFBQSsyQyxVQUFBLEVBQUFoM0Ms
Y0FBQSxLQUE2RSsyQyxJQUFBajNDLE9BQUFtM0MsZUFBQW4zQyxPQUFBbTNDLGVBQUFILEVBQUFD
LEdBQUFELEVBQUFJLFVBQUFILEdBRXJYLFFBQUFJLEdBQUF0aUIsRUFBQXZ4QixHQUE4QyxHQUFB
RSxLQUFpQixRQUFBbkUsS0FBQXcxQixHQUFxQnZ4QixFQUFBdWxCLFFBQUF4cEIsSUFBQSxHQUFv
Q1MsT0FBQVMsVUFBQUMsZUFBQWpCLEtBQUFzMUIsRUFBQXgxQixLQUE2RG1FLEVBQUFuRSxHQUFB
dzFCLEVBQUF4MUIsR0FBc0IsT0FBQW1FLEdBVzNNLFFBQUFteEIsTUFDQSxRQUFBeWlCLEdBQUFD
LEVBQUFDLEdBRUEsR0FBQUMsSUFDQXhULElBQUEsU0FBQXZ4QixHQUNBLElBQ0EsR0FBQWdsQyxH
QUFBSCxFQUFBQyxFQUFBbEQsV0FBQTVoQyxJQUNBZ2xDLElBQUFELEVBQUEva0MsT0FBQStrQyxF
QUFBcDJDLFNBQ0FvMkMsRUFBQUUsdUJBQUEsRUFDQUYsRUFBQS9rQyxNQUFBZ2xDLEVBQ0FELEVB
QUFwMkMsTUFBQSxNQUVPLE1BQUFBLEdBQ1BvMkMsRUFBQUUsdUJBQUEsRUFDQUYsRUFBQXAyQyxV
QUtBLE9BQUFvMkMsR0FHQSxRQUFBRyxHQWVBQyxHQUNBLEdBQUFDLEdBQUFDLEVBRUEzQyxFQUFB
bnpDLFVBQUFDLE9BQUEsT0FBQVosS0FBQVcsVUFBQSxHQUFBQSxVQUFBLE1BQ0ErMUMsRUFBQTVD
LEVBQUE1TCxlQUNBQSxNQUFBbG9DLEtBQUEwMkMsRUFBQSxTQUFBbjRDLEdBQ0EseUJBQUFBLEVB
QUEsS0FDR200QyxFQUNIQyxFQUFBN0MsRUFBQThDLFdBQ0FBLE1BQUE1MkMsS0FBQTIyQyxFQUFB
LGtCQUFBQSxFQUNBRSxFQUFBL0MsRUFBQWdELGdCQUNBQSxNQUFBOTJDLEtBQUE2MkMsTUFBQTcy
QyxHQUFBNjJDLEVBQ0FFLEVBQUFqRCxFQUFBa0QseUJBQ0FBLE1BQUFoM0MsS0FBQSsyQyxLQUNB
RSxFQUFBbkQsRUFBQW9ELFNBQ0FBLE1BQUFsM0MsS0FBQWkzQyxFQUFBLFFBQUFBLEVBQ0FFLEVB
QUFyRCxFQUFBc0QsUUFDQUEsTUFBQXAzQyxLQUFBbTNDLEtBQ0FFLEVBQUF0QixFQUFBakMsR0FB
QSxrR0FFQXdELEVBQUFKLEVBQUEsZUFDQXptQyxFQUFBOG1DLElBRUFDLEdBQUFoQixLQUF3Q0Es
RUFBQVUsR0FBQU8sRUFBQSxFQUFBakIsRUFBQWMsR0FBQUcsRUFBQSxFQUFBakIsR0FDeENrQixH
QUFBakIsS0FBa0RBLEVBQUFhLEdBQUFHLEVBQUEsRUFBQWhCLEVBRWxELGlCQUFBa0IsR0FDQUMs
SUFBQSxrQkFBQUQsR0FBQSxtRkFBQUUsS0FBQUMsVUFBQUgsR0FFQSxJQUFBSSxHQUFBSixFQUFB
OW1CLGFBQUE4bUIsRUFBQXA1QyxNQUFBLFlBRUFzeUIsRUFBQXFYLEVBQUE2UCxHQUVBQyxFQUFB
QyxLQUE0Q1osR0FDNUNuUCxpQkFDQTBPLGFBQ0FFLGtCQUNBRSwyQkFDQUUsV0FDQUUsVUFDQXZt
QixjQUNBa25CLHVCQUNBSixxQkFHQU8sRUFBQSxTQUFBQyxHQUdBLFFBQUFELEdBQUE5bUMsRUFB
QXRILEdBQ0Eyc0IsRUFBQTN2QixLQUFBb3hDLEVBRUEsSUFBQUUsR0FBQTdDLEVBQUF6dUMsS0FB
QXF4QyxFQUFBaDZDLEtBQUEySSxLQUFBc0ssRUFBQXRILEdBYUEsT0FYQXN1QyxHQUFBM25DLFVB
Q0EybkMsRUFBQUMsU0FDQUQsRUFBQUUsWUFBQSxFQUNBRixFQUFBbEMsTUFBQTlrQyxFQUFBOGxD
LElBQUFwdEMsRUFBQW90QyxHQUNBa0IsRUFBQUcsVUFBQTdYLFFBQUF0dkIsRUFBQThsQyxJQUNB
a0IsRUFBQUksbUJBQUFKLEVBQUFJLG1CQUFBM21DLEtBQUF1bUMsR0FFQVIsSUFBQVEsRUFBQWxD
LE1BQUEsbUJBQUFnQixFQUFBLHdDQUFBcm1CLEVBQUEsMEVBQUFxbUIsRUFBQSxtQkFBQXJtQixF
QUFBLE1BRUF1bkIsRUFBQUssZUFDQUwsRUFBQU0sbUJBQ0FOLEVBOEhBLE1BaEpBM0MsR0FBQXlD
LEVBQUFDLEdBcUJBRCxFQUFBLzRDLFVBQUF3NUMsZ0JBQUEsV0FDQSxHQUFBdkUsR0FNQXdFLEVB
QUE5eEMsS0FBQXl4QyxVQUFBLEtBQUF6eEMsS0FBQTh4QyxZQUNBLE9BQUF4RSxNQUF5QkEsRUFB
QWtELEdBQUFzQixHQUFBOXhDLEtBQUFnRCxRQUFBd3RDLEdBQUFsRCxHQUd6QjhELEVBQUEvNEMs
VUFBQTA1QyxrQkFBQSxXQUNBN0IsSUFRQWx3QyxLQUFBOHhDLGFBQUF6RCxlQUNBcnVDLEtBQUFx
dkMsU0FBQXhULElBQUE3N0IsS0FBQXNLLE9BQ0F0SyxLQUFBcXZDLFNBQUFFLHVCQUFBdnZDLEtB
QUFpdkIsZ0JBR0FtaUIsRUFBQS80QyxVQUFBMjVDLDBCQUFBLFNBQUExQyxHQUNBdHZDLEtBQUFx
dkMsU0FBQXhULElBQUF5VCxJQUdBOEIsRUFBQS80QyxVQUFBazNDLHNCQUFBLFdBQ0EsTUFBQXZ2
QyxNQUFBcXZDLFNBQUFFLHVCQUdBNkIsRUFBQS80QyxVQUFBNDVDLHFCQUFBLFdBQ0FqeUMsS0FB
QTh4QyxjQUFBOXhDLEtBQUE4eEMsYUFBQXZELGlCQUNBdnVDLEtBQUE4eEMsYUFBQSxLQUNBOXhD
LEtBQUF3dUMsaUJBQUEvaEIsRUFDQXpzQixLQUFBb3ZDLE1BQUEsS0FDQXB2QyxLQUFBcXZDLFNB
QUF4VCxJQUFBcFAsRUFDQXpzQixLQUFBcXZDLFNBQUFFLHVCQUFBLEdBR0E2QixFQUFBLzRDLFVB
QUE2NUMsbUJBQUEsV0FFQSxNQURBcEIsS0FBQVIsRUFBQSx3R0FBdUdSLEVBQUEsWUFDdkc5dkMs
S0FBQW15QyxpQkFHQWYsRUFBQS80QyxVQUFBcTVDLG1CQUFBLFNBQUE1bkMsR0FDQTlKLEtBQUFt
eUMsZ0JBQUFyb0MsR0FHQXNuQyxFQUFBLzRDLFVBQUFzNUMsYUFBQSxXQUNBLEdBQUF4QyxHQUFB
TSxFQUFBenZDLEtBQUFvdkMsTUFBQTlDLFNBQUE0RSxFQUNBbHhDLE1BQUFxdkMsU0FBQUgsRUFB
QUMsRUFBQW52QyxLQUFBb3ZDLE9BQ0FwdkMsS0FBQXF2QyxTQUFBeFQsSUFBQTc3QixLQUFBc0ss
UUFHQThtQyxFQUFBLzRDLFVBQUF1NUMsaUJBQUEsV0FDQSxHQUFBMUIsRUFBQSxDQUlBLEdBQUFr
QyxJQUFBcHlDLEtBQUF5eEMsVUFBQXp4QyxLQUFBc0ssTUFBQXRLLEtBQUFnRCxTQUFBd3RDLEVB
Q0F4d0MsTUFBQTh4QyxhQUFBLEdBQUFPLEdBQUEsRUFBQXJ5QyxLQUFBb3ZDLE1BQUFnRCxFQUFB
cHlDLEtBQUFzeUMsY0FBQXZuQyxLQUFBL0ssT0FRQUEsS0FBQXd1QyxpQkFBQXh1QyxLQUFBOHhD
LGFBQUF0RCxpQkFBQXpqQyxLQUFBL0ssS0FBQTh4QyxnQkFHQVYsRUFBQS80QyxVQUFBaTZDLGNB
QUEsV0FDQXR5QyxLQUFBcXZDLFNBQUF4VCxJQUFBNzdCLEtBQUFzSyxPQUVBdEssS0FBQXF2QyxT
QUFBRSx1QkFHQXZ2QyxLQUFBdXlDLG1CQUFBdnlDLEtBQUF3eUMscUNBQ0F4eUMsS0FBQWd2QixT
QUFBeWpCLElBSEF6eUMsS0FBQXd1QyxvQkFPQTRDLEVBQUEvNEMsVUFBQW02QyxxQ0FBQSxXQU1B
eHlDLEtBQUF1eUMsdUJBQUFyNUMsR0FDQThHLEtBQUF3dUMsb0JBR0E0QyxFQUFBLzRDLFVBQUFn
MEMsYUFBQSxXQUNBLE1BQUF6UyxTQUFBNTVCLEtBQUE4eEMsZUFBQTl4QyxLQUFBOHhDLGFBQUF6
RixnQkFHQStFLEVBQUEvNEMsVUFBQXE2QyxjQUFBLFNBQUFwb0MsR0FDQSxJQUFBZ21DLElBQUFO
LEtBQUFod0MsS0FBQXl4QyxZQUFBenhDLEtBQUE4eEMsY0FBQSxNQUFBeG5DLEVBS0EsSUFBQXFv
QyxHQUFBeEIsS0FBb0M3bUMsRUFJcEMsT0FIQWdtQyxLQUFBcUMsRUFBQTdvQyxJQUFBOUosS0FB
QTB4QyxvQkFDQTFCLElBQUEyQyxFQUFBM0MsR0FBQWh3QyxLQUFBd3hDLGVBQ0F4eEMsS0FBQXl4
QyxXQUFBenhDLEtBQUE4eEMsZUFBQWEsRUFBQW5DLEdBQUF4d0MsS0FBQTh4QyxjQUNBYSxHQUdB
dkIsRUFBQS80QyxVQUFBcXhDLE9BQUEsV0FDQSxHQUFBMkYsR0FBQXJ2QyxLQUFBcXZDLFFBR0Es
SUFGQUEsRUFBQUUsdUJBQUEsRUFFQUYsRUFBQXAyQyxNQUNBLEtBQUFvMkMsR0FBQXAyQyxLQUVB
LE9BQUFyQixRQUFBZzdDLEVBQUEsZUFBQS9CLEVBQUE3d0MsS0FBQTB5QyxjQUFBckQsRUFBQS9r
QyxTQUlBOG1DLEdBQ0t3QixFQUFBLFVBdUNMLE9BckNBeEIsR0FBQVAsbUJBQ0FPLEVBQUFybkIs
Y0FDQXFuQixFQUFBUixvQkFDQVEsRUFBQVYsZUFDQVUsRUFBQTVwQixVQUFBa3BCLEVBaUNBbUMs
SUFBQXpCLEVBQUFQLEkxRjBwVGlDL3dCLEVBQXVCLEVBQUkwdkIsQ0FDdkMsSUFBSXNELEdBQXdE
aDhDLEVBQW9CLEtBQzVFKzdDLEVBQWdFLzdDLEVBQW9CbUIsRUFBRTY2QyxHQUN0RkMsRUFBMENq
OEMsRUFBb0IsS0FDOURnNkMsRUFBa0RoNkMsRUFBb0JtQixFQUFFODZDLEdBQ3hFSCxFQUFzQzk3
QyxFQUFvQixHQUUxRHU3QyxHQUQ4Q3Y3QyxFQUFvQm1CLEVBQUUyNkMsR0FDaEI5N0MsRUFBb0Is
TTBGLzdUakc2NUMsRUFBQTc1QyxFQUFBLElBQUFxNkMsRUFBQXY1QyxPQUFBNEMsUUFBQSxTQUFB
YyxHQUFtRCxPQUFBbkUsR0FBQSxFQUFnQkEsRUFBQTBDLFVBQUFDLE9BQXNCM0MsSUFBQSxDQUFP
LEdBQUFvRSxHQUFBMUIsVUFBQTFDLEVBQTJCLFFBQUF3RSxLQUFBSixHQUEwQjNELE9BQUFTLFVB
QUFDLGVBQUFqQixLQUFBa0UsRUFBQUksS0FBeURMLEVBQUFLLEdBQUFKLEVBQUFJLElBQWlDLE1B
QUFMLElBaUIvT20xQyxFQUFBLEVBQ0FnQyxNMUZtdFVNLFNBQVV2N0MsRUFBUTRvQixFQUFxQmhw
QixHQUU3QyxZMkZydVVBLFNBQUFrOEMsR0FBQUMsR0FDQSxnQkFBQTNHLEVBQUF0UyxHQUdBLFFB
QUFrWixLQUNBLE1BQUFDLEdBSEEsR0FBQUEsR0FBQUYsRUFBQTNHLEVBQUF0UyxFQU1BLE9BREFr
WixHQUFBRSxtQkFBQSxFQUNBRixHQVdBLFFBQUFHLEdBQUFDLEdBQ0EsY0FBQUEsRUFBQUYsdUJB
QUFsNkMsS0FBQW82QyxFQUFBRixrQkFBQXhaLFFBQUEwWixFQUFBRixtQkFBQSxJQUFBRSxFQUFB
eDVDLE9BZUEsUUFBQXk1QyxHQUFBRCxFQUFBeEQsR0FDQSxnQkFBQXhELEVBQUFVLEdBQ0EsR0FF
QXdHLElBRkF4RyxFQUFBampCLFlBRUEsU0FBQTBwQixFQUFBQyxHQUNBLE1BQUFGLEdBQUFKLGtC
QUFBSSxFQUFBRixXQUFBRyxFQUFBQyxHQUFBRixFQUFBRixXQUFBRyxJQXNCQSxPQWxCQUQsR0FB
QUosbUJBQUEsRUFFQUksRUFBQUYsV0FBQSxTQUFBRyxFQUFBQyxHQUNBRixFQUFBRixhQUNBRSxF
QUFBSixrQkFBQUMsRUFBQUMsRUFDQSxJQUFBaHBDLEdBQUFrcEMsRUFBQUMsRUFBQUMsRUFVQSxP
QVJBLG1CQUFBcHBDLEtBQ0FrcEMsRUFBQUYsV0FBQWhwQyxFQUNBa3BDLEVBQUFKLGtCQUFBQyxF
QUFBL29DLEdBQ0FBLEVBQUFrcEMsRUFBQUMsRUFBQUMsSUFLQXBwQyxHQUdBa3BDLEczRndxVWlD
MXpCLEVBQXVCLEVBQUlrekIsRUFFM0JsekIsRUFBdUIsRUFBSXl6QixDQUNzQno4QyxHQUFvQixL
QXVFaEcsU0FBVUksRUFBUTRvQixFQUFxQmhwQixHQUU3QyxZQUVpRkEsR0FBb0IsSUFDbkNBLEVB
QW9CLEtBWWhGLFNBQVVJLEVBQVE0b0IsRUFBcUJocEIsR0FFN0MsWUFLOGYsU0FBUzY0QixHQUFn
QnJvQixFQUFTc29CLEdBQWEsS0FBS3RvQixZQUFvQnNvQixJQUFjLEtBQU0sSUFBSXgxQixXQUFV
LHFDQUF1QyxRQUFTcTBDLEdBQTJCcmtDLEVBQUsvUyxHQUFNLElBQUkrUyxFQUFNLEtBQU0sSUFB
SXNrQyxnQkFBZSw0REFBOEQsUUFBT3IzQyxHQUFxQixpQkFBUEEsSUFBK0IsbUJBQVBBLEdBQXdC
K1MsRUFBTC9TLEVBQVcsUUFBU3MzQyxHQUFVQyxFQUFTQyxHQUFZLEdBQXVCLG1CQUFiQSxJQUFz
QyxPQUFiQSxFQUFtQixLQUFNLElBQUl6MEMsV0FBVSxpRUFBa0V5MEMsR0FBYUQsR0FBU3YyQyxV
QUFVVCxPQUFPNmxDLE9BQU9vUixHQUFZQSxFQUFXeDJDLFdBQVdpTixhQUFhZ0csTUFBTXNqQyxF
QUFTNzJDLFlBQVcsRUFBTSsyQyxVQUFTLEVBQUtoM0MsY0FBYSxLQUFXKzJDLElBQVdqM0MsT0FB
T20zQyxlQUFlbjNDLE9BQU9tM0MsZUFBZUgsRUFBU0MsR0FBWUQsRUFBU0ksVUFBVUgsR0FKM3dD
LEdBQUk4RSxHQUFzQzc4QyxFQUFvQixHQUMxRDg4QyxFQUE4Qzk4QyxFQUFvQm1CLEVBQUUwN0Ms
R0FDcEVFLEVBQTJDLzhDLEVBQW9CLElBQy9EZzlDLEVBQW1EaDlDLEVBQW9CbUIsRUFBRTQ3QyxH
QUM5RkUsRUFBYSxXQUFXLFFBQVNDLEdBQWlCMTRDLEVBQU9nUCxHQUFPLElBQUksR0FBSW5ULEdB
QUUsRUFBRUEsRUFBRW1ULEVBQU14USxPQUFPM0MsSUFBSSxDQUFDLEdBQUk2NUIsR0FBVzFtQixF
QUFNblQsRUFBRzY1QixHQUFXajVCLFdBQVdpNUIsRUFBV2o1QixhQUFZLEVBQU1pNUIsRUFBV2w1
QixjQUFhLEVBQVEsU0FBVWs1QixLQUFXQSxFQUFXOGQsVUFBUyxHQUFLbDNDLE9BQU9DLGVBQWV5
RCxFQUFPMDFCLEVBQVdyMUIsSUFBSXExQixJQUFjLE1BQU8sVUFBU3BCLEVBQVlxa0IsRUFBV0Ms
R0FBdUksTUFBdkhELElBQVdELEVBQWlCcGtCLEVBQVl2M0IsVUFBVTQ3QyxHQUFlQyxHQUFZRixF
QUFpQnBrQixFQUFZc2tCLEdBQW9CdGtCLE00RnYwVXZkdWtCLEU1RnUwVXl5QyxTQUFTOUMsR0FB
Z0QsUUFBUzhDLEtBQWdCLEdBQUluSCxHQUFTb0gsRUFBTTlDLEVBQU0rQyxDQUFLMWtCLEdBQWdC
M3ZCLEtBQUttMEMsRUFBZSxLQUFJLEdBQUl6RyxHQUFLN3pDLFVBQVVDLE9BQU9WLEVBQUt3UixN
QUFNOGlDLEdBQU1FLEVBQUssRUFBRUEsRUFBS0YsRUFBS0UsSUFBUXgwQyxFQUFLdzBDLEdBQU0v
ekMsVUFBVSt6QyxFQUFPLE9BQWF3RyxHQUFPOUMsRUFBTTdDLEVBQTJCenVDLE1BQU1ndEMsRUFB
S21ILEVBQWNuRixXQUFXcDNDLE9BQU8wOEMsZUFBZUgsSUFBZ0I5OEMsS0FBS2sxQixNQUFNeWdC
LEdBQU1odEMsTUFBTXN2QixPQUFPbDJCLEtBQWVrNEMsRTRGOXpVaHVEQyxPQUNFbmlDLEtBQU1r
aUMsRUFBS2huQyxNQUFNOEUsTUFBUSxJNUY2elU2dURraUMsRTRGMXpVeHdEaUQsYUFBZSxTQUFB
ejdDLEdBQ2IsR0FBTXNXLEdBQU90VyxFQUFFd0MsT0FBT2dRLE1BQU1rcEMsTUFDWixNQUFaMTdD
LEVBQUUyN0MsUUFDSm5ELEVBQUtobkMsTUFBTW9xQyxPQUFPdGxDLEdBQ2RraUMsRUFBS2huQyxN
QUFNcXFDLFNBQ2JyRCxFQUFLdGlCLFVBQVc1ZixLQUFNLE81RnF6VTA0RGtpQyxFNEZoelV0NkRz
RCxhQUFlLFNBQUE5N0MsR0FDYnc0QyxFQUFLdGlCLFVBQVc1ZixLQUFNdFcsRUFBRXdDLE9BQU9n
USxTNUYreVU0OERnbUMsRTRGNXlVNytEdUQsV0FBYSxTQUFBLzdDLEdBQ053NEMsRUFBS2huQyxN
QUFNcXFDLFNBQ2RyRCxFQUFLaG5DLE1BQU1vcUMsT0FBTzU3QyxFQUFFd0MsT0FBT2dRLFE1RjB5
VTRoRCtvQyxFQUE4Z0JELEVBQU8zRixFQUEyQjZDLEVBQU0rQyxHQUFzYixNQUF0dEMxRixHQUFV
d0YsRUFBYzlDLEdBQSt3QjBDLEVBQWFJLElBQWdCeDRDLElBQUksU0FBUzJQLE1BQU0sVzRGcnlV
dHFFLE1BQ0Vzb0MsR0FBQWg3QyxFQUFBbUcsY0FBQSxTQUFPKzFDLFVBQ0xoQixLQUNFaUIsS0FB
TS8wQyxLQUFLc0ssTUFBTTBxQyxRQUNqQkMsV0FBWWoxQyxLQUFLc0ssTUFBTXFxQyxVQUV6QjF5
QyxLQUFLLE9BQ0xpekMsWUFBYWwxQyxLQUFLc0ssTUFBTTRxQyxZQUN4QkMsVUFBVSxPQUNWN3BD
LE1BQU90TCxLQUFLdXhDLE1BQU1uaUMsS0FDbEJnbUMsT0FBUXAxQyxLQUFLNjBDLFdBQ2JqdUIs
U0FBVTVtQixLQUFLNDBDLGFBQ2ZTLFVBQVdyMUMsS0FBS3UwQyxtQjVGeXhVd2hGSixHNEZ2MFVy
Z0ZSLEVBQUEsVUFBdEJRLEdBQ1ozc0IsV0FDTGt0QixPQUFRZixFQUFBLFVBQVV2d0IsS0FBS2ty
QixXQUN2QmwvQixLQUFNdWtDLEVBQUEsVUFBVTc2QixPQUNoQm84QixZQUFhdkIsRUFBQSxVQUFV
NzZCLE9BQ3ZCazhCLFFBQVNyQixFQUFBLFVBQVUyQixLQUNuQlgsUUFBU2hCLEVBQUEsVUFBVTJC
LE01RmkwVXU5RngxQixFQUF1QixFQUFJLEdBSW5nRyxTQUFVNW9CLEVBQVE0b0IsRUFBcUJocEIs
R0FFN0MsWUFDK0JBLEdBQW9CVSxFQUFFc29CLEVBQXFCLElBQUssV0FBYSxNQUFPeTFCLEtBQ3BF
eitDLEVBQW9CVSxFQUFFc29CLEVBQXFCLElBQUssV0FBYSxNQUFPMDFCLEtBQ3BFMStDLEVBQW9C
VSxFQUFFc29CLEVBQXFCLElBQUssV0FBYSxNQUFPMjFCLEk2Rm4xVTVGLElBQU1GLEdBQVcsV0FD
WEMsRUFBaUIsaUJBQ2pCQyxFQUFjLGU3RnMxVXJCLFNBQVV2K0MsRUFBUTRvQixFQUFxQmhwQixH
QUU3QyxZQUMrQkEsR0FBb0JVLEVBQUVzb0IsRUFBcUIsSUFBSyxXQUFhLE1BQU80MUIsS0FDcEU1
K0MsRUFBb0JVLEVBQUVzb0IsRUFBcUIsSUFBSyxXQUFhLE1BQU82MUIsS0FDcEU3K0MsRUFBb0JV
LEVBQUVzb0IsRUFBcUIsSUFBSyxXQUFhLE1BQU84MUIsS0FDcEU5K0MsRUFBb0JVLEVBQUVzb0Is
RUFBcUIsSUFBSyxXQUFhLE1BQU8rMUIsS0FDcEUvK0MsRUFBb0JVLEVBQUVzb0IsRUFBcUIsSUFB
SyxXQUFhLE1BQU9nMkIsS0FDcEVoL0MsRUFBb0JVLEVBQUVzb0IsRUFBcUIsSUFBSyxXQUFhLE1B
QU9pMkIsSThGaDJVNUYsSUFBTUwsR0FBVyxXQUNYQyxFQUFjLGNBQ2RDLEVBQVksWUFDWkMsRUFB
Z0IsZ0JBQ2hCQyxFQUFlLGVBQ2ZDLEVBQWtCLG1COUZnMlV6QixTQUFVNytDLEVBQVFELEVBQVNI
LEdBRWpDQSxFQUFvQixJQUNwQkksRUFBT0QsUUFBVUgsRUFBb0IsTUFLL0IsU0FBVUksRUFBUUQs
RUFBU0gsR0FFakMsWStGbjJVQSxxQkFBQW8yQixXQUlBcDJCLEVBQUEsSUFBQWsvQyxTQUNBbjND
LE9BQUFxdUIsUUFBQXAyQixFQUFBLE1BSUFBLEVBQUEsS0FJQWMsT0FBQTRDLE9BQUExRCxFQUFB
LEkvRnEzVU0sU0FBVUksRUFBUUQsRUFBU0gsR0FFakMsWWdHcDRVQSxTQUFBbS9DLEtBQ0F2M0Is
R0FBQSxFQUNBd08sRUFBQWEsSUFBQSxLQUNBYixFQUFBbUIsSUFBQSxLQUlBLFFBQUEybkIsR0FB
QWhjLEdBd0NBLFFBQUFrYyxHQUFBdGQsSUFFQW9CLEVBQUFtYyxlQUNBQyxFQUNBQyxFQUFBemQs
R0FBQTMvQixNQUNBK2dDLEVBQUFzYyxXQUFBQyxNQUdBRixFQUFBemQsR0FBQTRkLGNBQ0F4YyxF
QUFBa2MsYUFDQUcsRUFBQXpkLEdBQUE2ZCxRQUFBLEVBQ0F6YyxFQUFBa2MsWUFDQUcsRUFBQXpk
LEdBQUE0ZCxVQUNBSCxFQUFBemQsR0FBQTMvQixTQUdBbzlDLEVBQUF6ZCxHQUFBNmQsUUFBQSxF
QUNBQyxFQUNBTCxFQUFBemQsR0FBQTRkLFVBQ0FILEVBQUF6ZCxHQUFBMy9CLFNBS0EsUUFBQTA5
QyxHQUFBL2QsR0FDQXlkLEVBQUF6ZCxHQUFBNmQsU0FDQXpjLEVBQUEyYyxVQUNBM2MsRUFBQTJj
LFVBQUFOLEVBQUF6ZCxHQUFBNGQsVUFBQUgsRUFBQXpkLEdBQUEzL0IsT0FDT285QyxFQUFBemQs
R0FBQXNkLGNBQ1A5ekMsUUFBQXcwQyxLQUNBLGtDQUFBUCxFQUFBemQsR0FBQTRkLFVBQUEsTUFF
QXAwQyxRQUFBdzBDLEtBQ0EsZ0hBQ0FQLEVBQUF6ZCxHQUFBNGQsVUFBQSxPQXpFQXhjLFFBQ0F0
YixHQUFBdTNCLElBQ0F2M0IsR0FBQSxDQUNBLElBQUFrYSxHQUFBLEVBQ0E0ZCxFQUFBLEVBQ0FI
LElBQ0FucEIsR0FBQWEsSUFBQSxTQUFBRyxHQUVBLElBQUFBLEVBQUFkLEtBQ0FpcEIsRUFBQW5v
QixFQUFBMm9CLE9BRUFSLEVBQUFub0IsRUFBQTJvQixLQUFBSixPQUNBRSxFQUFBem9CLEVBQUEy
b0IsS0FFQXZiLGFBQUErYSxFQUFBbm9CLEVBQUEyb0IsS0FBQWpiLGVBRUF5YSxHQUFBbm9CLEVB
QUEyb0IsT0FHQTNwQixFQUFBbUIsSUFBQSxTQUFBSCxFQUFBN3lCLEdBQ0EsSUFBQTZ5QixFQUFB
ZixNQUNBZSxFQUFBMm9CLElBQUFqZSxJQUNBeWQsRUFBQW5vQixFQUFBMm9CLE1BQ0FMLFVBQUEs
S0FDQXY5QyxNQUFBb0MsRUFDQXVnQyxRQUFBVixXQUNBZ2IsRUFBQW5yQyxLQUFBLEtBQUFtakIs
RUFBQTJvQixLQUtBVCxFQUFBLzZDLEVBQUFrN0MsR0FDQSxJQUNBLEtBRUFFLFFBQUEsS0E2Q0Es
UUFBQUMsR0FBQTlkLEVBQUEzL0IsR0FDQW1KLFFBQUF3MEMsS0FBQSw2Q0FBQWhlLEVBQUEsUUFD
QTMvQixNQUFBdXJDLE9BQUF2ckMsSUFBQSxJQUNBZ0MsTUFBQSxNQUFBQyxRQUFBLFNBQUE0N0Ms
R0FDQTEwQyxRQUFBdzBDLEtBQUEsS0FBQUUsS0FJQSxRQUFBVixHQUFBbjlDLEVBQUE4OUMsR0FD
QSxNQUFBQSxHQUFBQyxLQUFBLFNBQUFDLEdBQ0EsTUFBQWgrQyxhQUFBZytDLEtBNUdBLEdBQUEv
cEIsR0FBQXAyQixFQUFBLElBRUF5L0MsR0FDQTdILGVBQ0F0MEMsVUFDQTg4QyxZQUdBeDRCLEdB
QUEsQ0FDQXpuQixHQUFBZy9DLFVBT0FoL0MsRUFBQSsrQyxVaEdtL1VNLFNBQVU5K0MsRUFBUUQs
RUFBU0gsR0FFakMsY0FDNEIsU0FBU3FnRCxHaUczL1VyQyxRQUFBQyxHQUFBQyxHQUNBL3lDLEVB
QUF4SyxTQUNBdzlDLElBQ0FDLEdBQUEsR0FHQWp6QyxJQUFBeEssUUFBQXU5QyxFQTBCQSxRQUFB
RyxLQUNBLEtBQUFwK0IsRUFBQTlVLEVBQUF4SyxRQUFBLENBQ0EsR0FBQTI5QyxHQUFBcitCLENB
VUEsSUFQQUEsR0FBQSxFQUNBOVUsRUFBQW16QyxHQUFBcGdELE9BTUEraEIsRUFBQXMrQixFQUFB
LENBR0EsT0FBQUMsR0FBQSxFQUFBQyxFQUFBdHpDLEVBQUF4SyxPQUFBc2YsRUFBZ0V1K0IsRUFB
QUMsRUFBa0JELElBQ2xGcnpDLEVBQUFxekMsR0FBQXJ6QyxFQUFBcXpDLEVBQUF2K0IsRUFFQTlV
LEdBQUF4SyxRQUFBc2YsRUFDQUEsRUFBQSxHQUdBOVUsRUFBQXhLLE9BQUEsRUFDQXNmLEVBQUEs
RUFDQW0rQixHQUFBLEVBeUhBLFFBQUFNLEdBQUE5MkMsR0FDQSxrQkFXQSxRQUFBKzJDLEtBR0F4
YyxhQUFBeWMsR0FDQUMsY0FBQUMsR0FDQWwzQyxJQVhBLEdBQUFnM0MsR0FBQTdjLFdBQUE0YyxF
QUFBLEdBSUFHLEVBQUFDLFlBQUFKLEVBQUEsS0E1TEE1Z0QsRUFBQUQsUUFBQW1nRCxDQVVBLElB
T0FFLEdBUEFoekMsS0FHQWl6QyxHQUFBLEVBUUFuK0IsRUFBQSxFQUlBcytCLEVBQUEsS0E2Q0F0
ekMsRUFBQSxvQkFBQSt5QyxLQUFBL3NDLEtBQ0ErdEMsRUFBQS96QyxFQUFBZzBDLGtCQUFBaDBD
LEVBQUFpMEMsc0JBY0FmLEdBREEsbUJBQUFhLEdBMkNBLFNBQUFwM0MsR0FDQSxHQUFBdTNDLEdB
QUEsRUFDQXBMLEVBQUEsR0FBQWlMLEdBQUFwM0MsR0FDQWxGLEVBQUFpRCxTQUFBdW1CLGVBQUEs
R0FFQSxPQURBNm5CLEdBQUFxTCxRQUFBMThDLEdBQTRCMjhDLGVBQUEsSUFDNUIsV0FDQUYsS0FD
QXo4QyxFQUFBNmMsS0FBQTQvQixJQWpEQWQsR0E4QkFLLEVBQUFMLEdBUUFKLEVBQUFFLGVBZ0ZB
RixFQUFBUyw2QmpHaWhWNkJ4Z0QsS0FBS0osRUFBU0gsRUFBb0IsTUFJekQsU0FBVUksRUFBUUQs
RUFBU0gsR0FFakMsWWtHN3RWQSxTQUFBMmhELEdBQUFudEMsR0FDQSxHQUFBL1MsR0FBQSxHQUFB
MjBCLEtBQUFzQixJQUdBLE9BRkFqMkIsR0FBQTYwQixJQUFBLEVBQ0E3MEIsRUFBQTgwQixJQUFB
L2hCLEVBQ0EvUyxFQWpCQSxHQUFBMjBCLEdBQUFwMkIsRUFBQSxHQUVBSSxHQUFBRCxRQUFBaTJC
LENBSUEsSUFBQXdyQixHQUFBRCxHQUFBLEdBQ0FFLEVBQUFGLEdBQUEsR0FDQUcsRUFBQUgsRUFB
QSxNQUNBSSxFQUFBSixNQUFBdi9DLElBQ0E0L0MsRUFBQUwsRUFBQSxHQUNBTSxFQUFBTixFQUFB
LEdBUUF2ckIsR0FBQVMsUUFBQSxTQUFBcmlCLEdBQ0EsR0FBQUEsWUFBQTRoQixHQUFBLE1BQUE1
aEIsRUFFQSxXQUFBQSxFQUFBLE1BQUFzdEMsRUFDQSxRQUFBMS9DLEtBQUFvUyxFQUFBLE1BQUF1
dEMsRUFDQSxTQUFBdnRDLEVBQUEsTUFBQW90QyxFQUNBLFNBQUFwdEMsRUFBQSxNQUFBcXRDLEVB
Q0EsUUFBQXJ0QyxFQUFBLE1BQUF3dEMsRUFDQSxTQUFBeHRDLEVBQUEsTUFBQXl0QyxFQUVBLHFC
QUFBenRDLElBQUEsbUJBQUFBLEdBQ0EsSUFDQSxHQUFBc2hCLEdBQUF0aEIsRUFBQXNoQixJQUNB
LHVCQUFBQSxHQUNBLFVBQUFNLEdBQUFOLEVBQUE3aEIsS0FBQU8sSUFFSyxNQUFBdWhCLEdBQ0ws
VUFBQUssR0FBQSxTQUFBUyxFQUFBQyxHQUNBQSxFQUFBZixLQUlBLE1BQUE0ckIsR0FBQW50QyxJ
QUdBNGhCLEVBQUE4ckIsSUFBQSxTQUFBenBCLEdBQ0EsR0FBQW4yQixHQUFBd1IsTUFBQXZTLFVB
QUFxRyxNQUFBckgsS0FBQWs0QixFQUVBLFdBQUFyQyxHQUFBLFNBQUFTLEVBQUFDLEdBR0EsUUFB
QXBMLEdBQUFyckIsRUFBQWdELEdBQ0EsR0FBQUEsSUFBQSxpQkFBQUEsSUFBQSxtQkFBQUEsSUFB
QSxDQUNBLEdBQUFBLFlBQUEreUIsSUFBQS95QixFQUFBeXlCLE9BQUFNLEVBQUE3MEIsVUFBQXUw
QixLQUFBLENBQ0EsU0FBQXp5QixFQUFBaXpCLEtBQ0FqekIsSUFBQWt6QixHQUVBLFlBQUFsekIs
RUFBQWl6QixJQUFBNUssRUFBQXJyQixFQUFBZ0QsRUFBQWt6QixNQUNBLElBQUFsekIsRUFBQWl6
QixLQUFBUSxFQUFBenpCLEVBQUFrekIsU0FDQWx6QixHQUFBeXlCLEtBQUEsU0FBQXp5QixHQUNB
cW9CLEVBQUFyckIsRUFBQWdELElBQ1d5ekIsSUFHWCxHQUFBaEIsR0FBQXp5QixFQUFBeXlCLElB
Q0EsdUJBQUFBLEdBQUEsQ0FLQSxXQUpBLElBQUFNLEdBQUFOLEVBQUE3aEIsS0FBQTVRLElBQ0F5
eUIsS0FBQSxTQUFBenlCLEdBQ0Fxb0IsRUFBQXJyQixFQUFBZ0QsSUFDYXl6QixJQUtieDBCLEVB
QUFqQyxHQUFBZ0QsRUFDQSxNQUFBOCtDLEdBQ0F0ckIsRUFBQXYwQixHQTNCQSxPQUFBQSxFQUFB
VSxPQUFBLE1BQUE2ekIsTUE4QkEsUUE3QkFzckIsR0FBQTcvQyxFQUFBVSxPQTZCQTNDLEVBQUEs
RUFBbUJBLEVBQUFpQyxFQUFBVSxPQUFpQjNDLElBQ3BDcXJCLEVBQUFyckIsRUFBQWlDLEVBQUFq
QyxPQUtBKzFCLEVBQUFVLE9BQUEsU0FBQXRpQixHQUNBLFVBQUE0aEIsR0FBQSxTQUFBUyxFQUFB
QyxHQUNBQSxFQUFBdGlCLE1BSUE0aEIsRUFBQWdzQixLQUFBLFNBQUFDLEdBQ0EsVUFBQWpzQixH
QUFBLFNBQUFTLEVBQUFDLEdBQ0F1ckIsRUFBQWorQyxRQUFBLFNBQUFvUSxHQUNBNGhCLEVBQUFT
LFFBQUFyaUIsR0FBQXNoQixLQUFBZSxFQUFBQyxRQU9BVixFQUFBNzBCLFVBQUEsZUFBQXExQixH
QUNBLE1BQUExdEIsTUFBQTRzQixLQUFBLEtBQUFjLEtsR3F2Vk0sU0FBVXgyQixFQUFRRCxJbUc5
MVZ4QixTQUFBbVQsR0FDQSxZQTJDQSxTQUFBZ3ZDLEdBQUEzaEQsR0FJQSxHQUhBLGlCQUFBQSxL
QUNBQSxFQUFBaUQsT0FBQWpELElBRUEsNkJBQUE4WSxLQUFBOVksR0FDQSxTQUFBMkMsV0FBQSx5
Q0FFQSxPQUFBM0MsR0FBQWlWLGNBR0EsUUFBQTJzQyxHQUFBL3RDLEdBSUEsTUFIQSxpQkFBQUEs
S0FDQUEsRUFBQTVRLE9BQUE0USxJQUVBQSxFQUlBLFFBQUFndUMsR0FBQUMsR0FDQSxHQUFBclos
SUFDQTdRLEtBQUEsV0FDQSxHQUFBL2pCLEdBQUFpdUMsRUFBQUMsT0FDQSxRQUFnQmxyQixTQUFB
cDFCLEtBQUFvUyxZQVVoQixPQU5BbXVDLEdBQUFDLFdBQ0F4WixFQUFBOVEsT0FBQThRLFVBQUEs
V0FDQSxNQUFBQSxLQUlBQSxFQUdBLFFBQUF5WixHQUFBQyxHQUNBNTVDLEtBQUFsRixPQUVBOCtD
LFlBQUFELEdBQ0FDLEVBQUExK0MsUUFBQSxTQUFBb1EsRUFBQTdULEdBQ0F1SSxLQUFBNjVDLE9B
QUFwaUQsRUFBQTZULElBQ090TCxNQUNGNEssTUFBQXNYLFFBQUEwM0IsR0FDTEEsRUFBQTErQyxR
QUFBLFNBQUE0K0MsR0FDQTk1QyxLQUFBNjVDLE9BQUFDLEVBQUEsR0FBQUEsRUFBQSxLQUNPOTVD
LE1BQ0Y0NUMsR0FDTGhpRCxPQUFBK0Msb0JBQUFpL0MsR0FBQTErQyxRQUFBLFNBQUF6RCxHQUNB
dUksS0FBQTY1QyxPQUFBcGlELEVBQUFtaUQsRUFBQW5pRCxLQUNPdUksTUEwRFAsUUFBQSs1QyxH
QUFBM1MsR0FDQSxHQUFBQSxFQUFBNFMsU0FDQSxNQUFBOXNCLFNBQUFVLE9BQUEsR0FBQXh6QixX
QUFBLGdCQUVBZ3RDLEdBQUE0UyxVQUFBLEVBR0EsUUFBQUMsR0FBQUMsR0FDQSxVQUFBaHRCLFNB
QUEsU0FBQVMsRUFBQUMsR0FDQXNzQixFQUFBQyxPQUFBLFdBQ0F4c0IsRUFBQXVzQixFQUFBRSxT
QUVBRixFQUFBRyxRQUFBLFdBQ0F6c0IsRUFBQXNzQixFQUFBamhELFVBS0EsUUFBQXFoRCxHQUFB
QyxHQUNBLEdBQUFMLEdBQUEsR0FBQU0sWUFDQXRzQixFQUFBK3JCLEVBQUFDLEVBRUEsT0FEQUEs
R0FBQU8sa0JBQUFGLEdBQ0Fyc0IsRUFHQSxRQUFBd3NCLEdBQUFILEdBQ0EsR0FBQUwsR0FBQSxH
QUFBTSxZQUNBdHNCLEVBQUErckIsRUFBQUMsRUFFQSxPQURBQSxHQUFBUyxXQUFBSixHQUNBcnNC
LEVBR0EsUUFBQTBzQixHQUFBQyxHQUlBLE9BSEEzbEMsR0FBQSxHQUFBNGxDLFlBQUFELEdBQ0FF
LEVBQUEsR0FBQW53QyxPQUFBc0ssRUFBQXBiLFFBRUEzQyxFQUFBLEVBQW1CQSxFQUFBK2QsRUFB
QXBiLE9BQWlCM0MsSUFDcEM0akQsRUFBQTVqRCxHQUFBdUQsT0FBQUcsYUFBQXFhLEVBQUEvZCxH
QUVBLE9BQUE0akQsR0FBQWhnRCxLQUFBLElBR0EsUUFBQWlnRCxHQUFBSCxHQUNBLEdBQUFBLEVB
QUFuOEMsTUFDQSxNQUFBbThDLEdBQUFuOEMsTUFBQSxFQUVBLElBQUF3VyxHQUFBLEdBQUE0bEMs
WUFBQUQsRUFBQUksV0FFQSxPQURBL2xDLEdBQUFVLElBQUEsR0FBQWtsQyxZQUFBRCxJQUNBM2xD
LEVBQUFnbUMsT0FJQSxRQUFBQyxLQTBGQSxNQXpGQW43QyxNQUFBZzZDLFVBQUEsRUFFQWg2QyxL
QUFBbzdDLFVBQUEsU0FBQWhVLEdBRUEsR0FEQXBuQyxLQUFBcTdDLFVBQUFqVSxFQUNBQSxFQUVP
LG9CQUFBQSxHQUNQcG5DLEtBQUFzN0MsVUFBQWxVLE1BQ08sSUFBQXFTLEVBQUFjLE1BQUFnQixL
QUFBbGpELFVBQUFtakQsY0FBQXBVLEdBQ1BwbkMsS0FBQXk3QyxVQUFBclUsTUFDTyxJQUFBcVMs
RUFBQWlDLFVBQUFDLFNBQUF0akQsVUFBQW1qRCxjQUFBcFUsR0FDUHBuQyxLQUFBNDdDLGNBQUF4
VSxNQUNPLElBQUFxUyxFQUFBb0MsY0FBQUMsZ0JBQUF6akQsVUFBQW1qRCxjQUFBcFUsR0FDUHBu
QyxLQUFBczdDLFVBQUFsVSxFQUFBM29DLGVBQ08sSUFBQWc3QyxFQUFBc0MsYUFBQXRDLEVBQUFj
LE1BQUF5QixFQUFBNVUsR0FDUHBuQyxLQUFBaThDLGlCQUFBakIsRUFBQTVULEVBQUE4VCxRQUVB
bDdDLEtBQUFxN0MsVUFBQSxHQUFBRSxPQUFBdjdDLEtBQUFpOEMsdUJBQ08sS0FBQXhDLEVBQUFz
QyxjQUFBRyxZQUFBN2pELFVBQUFtakQsY0FBQXBVLEtBQUErVSxFQUFBL1UsR0FHUCxTQUFBanVD
LE9BQUEsNEJBRkE2RyxNQUFBaThDLGlCQUFBakIsRUFBQTVULE9BZEFwbkMsTUFBQXM3QyxVQUFB
LEVBbUJBdDdDLE1BQUE0NUMsUUFBQTVoRCxJQUFBLGtCQUNBLGlCQUFBb3ZDLEdBQ0FwbkMsS0FB
QTQ1QyxRQUFBaGtDLElBQUEsMkNBQ1M1VixLQUFBeTdDLFdBQUF6N0MsS0FBQXk3QyxVQUFBeDVD
LEtBQ1RqQyxLQUFBNDVDLFFBQUFoa0MsSUFBQSxlQUFBNVYsS0FBQXk3QyxVQUFBeDVDLE1BQ1N3
M0MsRUFBQW9DLGNBQUFDLGdCQUFBempELFVBQUFtakQsY0FBQXBVLElBQ1RwbkMsS0FBQTQ1QyxR
QUFBaGtDLElBQUEsb0VBS0E2akMsRUFBQWMsT0FDQXY2QyxLQUFBdTZDLEtBQUEsV0FDQSxHQUFB
NkIsR0FBQXJDLEVBQUEvNUMsS0FDQSxJQUFBbzhDLEVBQ0EsTUFBQUEsRUFHQSxJQUFBcDhDLEtB
QUF5N0MsVUFDQSxNQUFBdnVCLFNBQUFTLFFBQUEzdEIsS0FBQXk3QyxVQUNTLElBQUF6N0MsS0FB
QWk4QyxpQkFDVCxNQUFBL3VCLFNBQUFTLFFBQUEsR0FBQTR0QixPQUFBdjdDLEtBQUFpOEMsbUJB
Q1MsSUFBQWo4QyxLQUFBNDdDLGNBQ1QsU0FBQXppRCxPQUFBLHVDQUVBLE9BQUErekIsU0FBQVMs
UUFBQSxHQUFBNHRCLE9BQUF2N0MsS0FBQXM3QyxjQUlBdDdDLEtBQUErN0MsWUFBQSxXQUNBLE1B
QUEvN0MsTUFBQWk4QyxpQkFDQWxDLEVBQUEvNUMsT0FBQWt0QixRQUFBUyxRQUFBM3RCLEtBQUFp
OEMsa0JBRUFqOEMsS0FBQXU2QyxPQUFBM3RCLEtBQUEwdEIsS0FLQXQ2QyxLQUFBb1AsS0FBQSxX
QUNBLEdBQUFndEMsR0FBQXJDLEVBQUEvNUMsS0FDQSxJQUFBbzhDLEVBQ0EsTUFBQUEsRUFHQSxJ
QUFBcDhDLEtBQUF5N0MsVUFDQSxNQUFBZixHQUFBMTZDLEtBQUF5N0MsVUFDTyxJQUFBejdDLEtB
QUFpOEMsaUJBQ1AsTUFBQS91QixTQUFBUyxRQUFBaXRCLEVBQUE1NkMsS0FBQWk4QyxrQkFDTyxJ
QUFBajhDLEtBQUE0N0MsY0FDUCxTQUFBemlELE9BQUEsdUNBRUEsT0FBQSt6QixTQUFBUyxRQUFB
M3RCLEtBQUFzN0MsWUFJQTdCLEVBQUFpQyxXQUNBMTdDLEtBQUEwN0MsU0FBQSxXQUNBLE1BQUEx
N0MsTUFBQW9QLE9BQUF3ZCxLQUFBeXZCLEtBSUFyOEMsS0FBQXM4QyxLQUFBLFdBQ0EsTUFBQXQ4
QyxNQUFBb1AsT0FBQXdkLEtBQUFta0IsS0FBQXdMLFFBR0F2OEMsS0FNQSxRQUFBdzhDLEdBQUFy
NEMsR0FDQSxHQUFBczRDLEdBQUF0NEMsRUFBQTR1QixhQUNBLE9BQUEycEIsR0FBQS83QixRQUFB
ODdCLElBQUEsRUFBQUEsRUFBQXQ0QyxFQUdBLFFBQUF3NEMsR0FBQXpXLEVBQUFsTSxHQUNBQSxP
QUNBLElBQUFvTixHQUFBcE4sRUFBQW9OLElBRUEsSUFBQWxCLFlBQUF5VyxHQUFBLENBQ0EsR0FB
QXpXLEVBQUE4VCxTQUNBLFNBQUE1L0MsV0FBQSxlQUVBNEYsTUFBQXF5QixJQUFBNlQsRUFBQTdU
LElBQ0FyeUIsS0FBQTQ4QyxZQUFBMVcsRUFBQTBXLFlBQ0E1aUIsRUFBQTRmLFVBQ0E1NUMsS0FB
QTQ1QyxRQUFBLEdBQUFELEdBQUF6VCxFQUFBMFQsVUFFQTU1QyxLQUFBbUUsT0FBQStoQyxFQUFB
L2hDLE9BQ0FuRSxLQUFBNjhDLEtBQUEzVyxFQUFBMlcsS0FDQXpWLEdBQUEsTUFBQWxCLEVBQUFt
VixZQUNBalUsRUFBQWxCLEVBQUFtVixVQUNBblYsRUFBQThULFVBQUEsT0FHQWg2QyxNQUFBcXlC
LElBQUEzM0IsT0FBQXdyQyxFQVdBLElBUkFsbUMsS0FBQTQ4QyxZQUFBNWlCLEVBQUE0aUIsYUFB
QTU4QyxLQUFBNDhDLGFBQUEsUUFDQTVpQixFQUFBNGYsU0FBQTU1QyxLQUFBNDVDLFVBQ0E1NUMs
S0FBQTQ1QyxRQUFBLEdBQUFELEdBQUEzZixFQUFBNGYsVUFFQTU1QyxLQUFBbUUsT0FBQXE0QyxF
QUFBeGlCLEVBQUE3MUIsUUFBQW5FLEtBQUFtRSxRQUFBLE9BQ0FuRSxLQUFBNjhDLEtBQUE3aUIs
RUFBQTZpQixNQUFBNzhDLEtBQUE2OEMsTUFBQSxLQUNBNzhDLEtBQUE4OEMsU0FBQSxNQUVBLFFB
QUE5OEMsS0FBQW1FLFFBQUEsU0FBQW5FLEtBQUFtRSxTQUFBaWpDLEVBQ0EsU0FBQWh0QyxXQUFB
LDRDQUVBNEYsTUFBQW83QyxVQUFBaFUsR0FPQSxRQUFBaVYsR0FBQWpWLEdBQ0EsR0FBQTJWLEdB
QUEsR0FBQXBCLFNBU0EsT0FSQXZVLEdBQUFvTixPQUFBdjVDLE1BQUEsS0FBQUMsUUFBQSxTQUFB
OGhELEdBQ0EsR0FBQUEsRUFBQSxDQUNBLEdBQUEvaEQsR0FBQStoRCxFQUFBL2hELE1BQUEsS0FD
QXhELEVBQUF3RCxFQUFBdStDLFFBQUFsZ0QsUUFBQSxXQUNBZ1MsRUFBQXJRLEVBQUFGLEtBQUEs
S0FBQXpCLFFBQUEsVUFDQXlqRCxHQUFBbEQsT0FBQW9ELG1CQUFBeGxELEdBQUF3bEQsbUJBQUEz
eEMsT0FHQXl4QyxFQUdBLFFBQUFHLEdBQUFDLEdBQ0EsR0FBQXZELEdBQUEsR0FBQUQsRUFTQSxP
QVJBd0QsR0FBQWxpRCxNQUFBLFNBQUFDLFFBQUEsU0FBQTQ3QyxHQUNBLEdBQUFzRyxHQUFBdEcs
RUFBQTc3QyxNQUFBLEtBQ0FVLEVBQUF5aEQsRUFBQTVELFFBQUFoRixNQUNBLElBQUE3NEMsRUFB
QSxDQUNBLEdBQUEyUCxHQUFBOHhDLEVBQUFyaUQsS0FBQSxLQUFBeTVDLE1BQ0FvRixHQUFBQyxP
QUFBbCtDLEVBQUEyUCxNQUdBc3VDLEVBS0EsUUFBQXlELEdBQUFDLEVBQUF0akIsR0FDQUEsSUFD
QUEsTUFHQWg2QixLQUFBaUMsS0FBQSxVQUNBakMsS0FBQXU5QyxPQUFBLFVBQUF2akIsS0FBQXVq
QixPQUFBLElBQ0F2OUMsS0FBQXc5QyxHQUFBeDlDLEtBQUF1OUMsUUFBQSxLQUFBdjlDLEtBQUF1
OUMsT0FBQSxJQUNBdjlDLEtBQUF5OUMsV0FBQSxjQUFBempCLEtBQUF5akIsV0FBQSxLQUNBejlD
LEtBQUE0NUMsUUFBQSxHQUFBRCxHQUFBM2YsRUFBQTRmLFNBQ0E1NUMsS0FBQXF5QixJQUFBMkgs
RUFBQTNILEtBQUEsR0FDQXJ5QixLQUFBbzdDLFVBQUFrQyxHQTdYQSxJQUFBbHpDLEVBQUFzekMs
TUFBQSxDQUlBLEdBQUFqRSxJQUNBb0MsYUFBQSxtQkFBQXp4QyxHQUNBc3ZDLFNBQUEsVUFBQXR2
QyxJQUFBLFlBQUFnbEIsUUFDQW1yQixLQUFBLGNBQUFud0MsSUFBQSxRQUFBQSxJQUFBLFdBQ0Es
SUFFQSxNQURBLElBQUFteEMsT0FDQSxFQUNPLE1BQUF6aUQsR0FDUCxhQUdBNGlELFNBQUEsWUFB
QXR4QyxHQUNBMnhDLFlBQUEsZUFBQTN4QyxHQUdBLElBQUFxdkMsRUFBQXNDLFlBQ0EsR0FBQTRC
LElBQ0EscUJBQ0Esc0JBQ0EsNkJBQ0Esc0JBQ0EsdUJBQ0Esc0JBQ0EsdUJBQ0Esd0JBQ0EseUJB
R0EzQixFQUFBLFNBQUFydkIsR0FDQSxNQUFBQSxJQUFBaXhCLFNBQUF2bEQsVUFBQW1qRCxjQUFB
N3VCLElBR0F3dkIsRUFBQUQsWUFBQTJCLFFBQUEsU0FBQWx4QixHQUNBLE1BQUFBLElBQUFneEIs
RUFBQWg5QixRQUFBL29CLE9BQUFTLFVBQUFvRyxTQUFBcEgsS0FBQXMxQixLQUFBLEVBeURBZ3RC
LEdBQUF0aEQsVUFBQXdoRCxPQUFBLFNBQUFwaUQsRUFBQTZULEdBQ0E3VCxFQUFBMmhELEVBQUEz
aEQsR0FDQTZULEVBQUErdEMsRUFBQS90QyxFQUNBLElBQUF3eUMsR0FBQTk5QyxLQUFBbEYsSUFB
QXJELEVBQ0F1SSxNQUFBbEYsSUFBQXJELEdBQUFxbUQsSUFBQSxJQUFBeHlDLEtBR0FxdUMsRUFB
QXRoRCxVQUFBLGdCQUFBWixTQUNBdUksTUFBQWxGLElBQUFzK0MsRUFBQTNoRCxLQUdBa2lELEVB
QUF0aEQsVUFBQUwsSUFBQSxTQUFBUCxHQUVBLE1BREFBLEdBQUEyaEQsRUFBQTNoRCxHQUNBdUks
S0FBQTJWLElBQUFsZSxHQUFBdUksS0FBQWxGLElBQUFyRCxHQUFBLE1BR0FraUQsRUFBQXRoRCxV
QUFBc2QsSUFBQSxTQUFBbGUsR0FDQSxNQUFBdUksTUFBQWxGLElBQUF4QyxlQUFBOGdELEVBQUEz
aEQsS0FHQWtpRCxFQUFBdGhELFVBQUF1ZCxJQUFBLFNBQUFuZSxFQUFBNlQsR0FDQXRMLEtBQUFs
RixJQUFBcytDLEVBQUEzaEQsSUFBQTRoRCxFQUFBL3RDLElBR0FxdUMsRUFBQXRoRCxVQUFBNkMs
UUFBQSxTQUFBNkYsRUFBQWc5QyxHQUNBLE9BQUF0bUQsS0FBQXVJLE1BQUFsRixJQUNBa0YsS0FB
QWxGLElBQUF4QyxlQUFBYixJQUNBc0osRUFBQTFKLEtBQUEwbUQsRUFBQS85QyxLQUFBbEYsSUFB
QXJELEtBQUF1SSxPQUtBMjVDLEVBQUF0aEQsVUFBQStDLEtBQUEsV0FDQSxHQUFBbStDLEtBRUEs
T0FEQXY1QyxNQUFBOUUsUUFBQSxTQUFBb1EsRUFBQTdULEdBQXdDOGhELEVBQUExN0MsS0FBQXBH
LEtBQ3hDNmhELEVBQUFDLElBR0FJLEVBQUF0aEQsVUFBQThnRCxPQUFBLFdBQ0EsR0FBQUksS0FF
QSxPQURBdjVDLE1BQUE5RSxRQUFBLFNBQUFvUSxHQUFrQ2l1QyxFQUFBMTdDLEtBQUF5TixLQUNs
Q2d1QyxFQUFBQyxJQUdBSSxFQUFBdGhELFVBQUE4bkMsUUFBQSxXQUNBLEdBQUFvWixLQUVBLE9B
REF2NUMsTUFBQTlFLFFBQUEsU0FBQW9RLEVBQUE3VCxHQUF3QzhoRCxFQUFBMTdDLE1BQUFwRyxF
QUFBNlQsTUFDeENndUMsRUFBQUMsSUFHQUUsRUFBQUMsV0FDQUMsRUFBQXRoRCxVQUFBKzJCLE9B
QUE4USxVQUFBeVosRUFBQXRoRCxVQUFBOG5DLFFBcUpBLElBQUF1YyxJQUFBLDZDQTRDQUMsR0FB
QXRrRCxVQUFBMmxELE1BQUEsV0FDQSxVQUFBckIsR0FBQTM4QyxNQUE4Qm9uQyxLQUFBcG5DLEtB
QUFxN0MsYUE2QjlCRixFQUFBOWpELEtBQUFzbEQsRUFBQXRrRCxXQWdCQThpRCxFQUFBOWpELEtB
QUFnbUQsRUFBQWhsRCxXQUVBZ2xELEVBQUFobEQsVUFBQTJsRCxNQUFBLFdBQ0EsVUFBQVgsR0FB
QXI5QyxLQUFBcTdDLFdBQ0FrQyxPQUFBdjlDLEtBQUF1OUMsT0FDQUUsV0FBQXo5QyxLQUFBeTlD
LFdBQ0E3RCxRQUFBLEdBQUFELEdBQUEzNUMsS0FBQTQ1QyxTQUNBdm5CLElBQUFyeUIsS0FBQXF5
QixPQUlBZ3JCLEVBQUFwa0QsTUFBQSxXQUNBLEdBQUFnbEQsR0FBQSxHQUFBWixHQUFBLE1BQXVD
RSxPQUFBLEVBQUFFLFdBQUEsSUFFdkMsT0FEQVEsR0FBQWg4QyxLQUFBLFFBQ0FnOEMsRUFHQSxJ
QUFBQyxJQUFBLG9CQUVBYixHQUFBYyxTQUFBLFNBQUE5ckIsRUFBQWtyQixHQUNBLFFBQUFXLEVB
QUF2OUIsUUFBQTQ4QixHQUNBLFNBQUFyRyxZQUFBLHNCQUdBLFdBQUFtRyxHQUFBLE1BQStCRSxT
QUFBM0QsU0FBMEJ3RSxTQUFBL3JCLE1BR3pEam9CLEVBQUF1dkMsVUFDQXZ2QyxFQUFBdXlDLFVB
Q0F2eUMsRUFBQWl6QyxXQUVBanpDLEVBQUFzekMsTUFBQSxTQUFBeFgsRUFBQW1ZLEdBQ0EsVUFB
QW54QixTQUFBLFNBQUFTLEVBQUFDLEdBQ0EsR0FBQTB3QixHQUFBLEdBQUEzQixHQUFBelcsRUFB
QW1ZLEdBQ0FFLEVBQUEsR0FBQUMsZUFFQUQsR0FBQXBFLE9BQUEsV0FDQSxHQUFBbmdCLElBQ0F1
akIsT0FBQWdCLEVBQUFoQixPQUNBRSxXQUFBYyxFQUFBZCxXQUNBN0QsUUFBQXNELEVBQUFxQixF
QUFBRSx5QkFBQSxJQUVBemtCLEdBQUEzSCxJQUFBLGVBQUFrc0IsS0FBQUcsWUFBQTFrQixFQUFB
NGYsUUFBQTVoRCxJQUFBLGdCQUNBLElBQUFvdkMsR0FBQSxZQUFBbVgsS0FBQU4sU0FBQU0sRUFB
QUksWUFDQWh4QixHQUFBLEdBQUEwdkIsR0FBQWpXLEVBQUFwTixLQUdBdWtCLEVBQUFsRSxRQUFB
LFdBQ0F6c0IsRUFBQSxHQUFBeHpCLFdBQUEsNEJBR0Fta0QsRUFBQUssVUFBQSxXQUNBaHhCLEVB
QUEsR0FBQXh6QixXQUFBLDRCQUdBbWtELEVBQUFNLEtBQUFQLEVBQUFuNkMsT0FBQW02QyxFQUFB
anNCLEtBQUEsR0FFQSxZQUFBaXNCLEVBQUExQixjQUNBMkIsRUFBQU8saUJBQUEsR0FHQSxnQkFB
QVAsSUFBQTlFLEVBQUFjLE9BQ0FnRSxFQUFBUSxhQUFBLFFBR0FULEVBQUExRSxRQUFBMStDLFFB
QUEsU0FBQW9RLEVBQUE3VCxHQUNBOG1ELEVBQUFTLGlCQUFBdm5ELEVBQUE2VCxLQUdBaXpDLEVB
QUFVLEtBQUEsb0JBQUFYLEdBQUFqRCxVQUFBLEtBQUFpRCxFQUFBakQsY0FHQWp4QyxFQUFBc3pD
LE1BQUF3QixVQUFBLElBQ0Msb0JBQUE5MEMsV0FBQXBLLE9uR3EyVkssU0FBVTlJLEVBQVE0b0Is
RUFBcUJocEIsR0FFN0MsWUFDQWMsUUFBT0MsZUFBZWlvQixFQUFxQixjQUFnQnhVLE9BQU8sR0FD
N0MsSUFBSXFvQyxHQUFzQzc4QyxFQUFvQixHQUMxRDg4QyxFQUE4Qzk4QyxFQUFvQm1CLEVBQUUw
N0MsR0FDcEV3TCxFQUEwQ3JvRCxFQUFvQixLQUU5RHNvRCxHQURrRHRvRCxFQUFvQm1CLEVBQUVr
bkQsR0FDbENyb0QsRUFBb0IsS0FDMUR1b0QsRUFBNEN2b0QsRUFBb0IsSUFDaEV3b0QsRUFBZ0R4
b0QsRUFBb0IsS0FDcEV5b0QsRUFBMEN6b0QsRUFBb0IsS0FDOUQwb0QsRUFBMEQxb0QsRUFBb0Is
S29HcnpXakdzNEMsR3BHc3pXcUZ0NEMsRUFBb0JtQixFQUFFdW5ELEdvR3R6V25HNW5ELE9BQUF3
bkQsRUFBQSxHQUFZRyxFQUFBLEdBRTFCM25ELFFBQUF1bkQsRUFBQSxRQUNFdkwsRUFBQWg3QyxF
QUFBbUcsY0FBQ3NnRCxFQUFBLEdBQVNqUSxNQUFPQSxHQUNmd0UsRUFBQWg3QyxFQUFBbUcsY0FB
Q3VnRCxFQUFBLEVBQUQsT0FFRnhnRCxTQUFTMmdELGVBQWUsVXBHcXpXcEIsU0FBVXZvRCxFQUFR
RCxFQUFTSCxHQUVqQyxZcUczeVdBLElBQUE0b0QsR0FBQSxZQXFDQXhvRCxHQUFBRCxRQUFBeW9E
LEdyRzAwV00sU0FBVXhvRCxFQUFRRCxFQUFTSCxHQUVqQyxZc0dyM1dBLFNBQUE2b0QsR0FBQXZ3
QyxHQUNBLFVBQUFBLEdBQUE5VixRQUFBc21ELEVBQUEsT0FXQSxRQUFBQyxHQUFBQyxFQUFBQyxH
QUNBLy9DLEtBQUFvakIsS0FBQTA4QixFQUNBOS9DLEtBQUFnRCxRQUFBKzhDLEVBQ0EvL0MsS0FB
QWtKLE1BQUEsRUFTQSxRQUFBODJDLEdBQUFDLEVBQUF2Z0IsRUFBQWpvQyxHQUNBLEdBQUEyckIs
R0FBQTY4QixFQUFBNzhCLEtBQ0FwZ0IsRUFBQWk5QyxFQUFBajlDLE9BRUFvZ0IsR0FBQS9yQixL
QUFBMkwsRUFBQTA4QixFQUFBdWdCLEVBQUEvMkMsU0FlQSxRQUFBZzNDLEdBQUFqakQsRUFBQWtq
RCxFQUFBSixHQUNBLFNBQUE5aUQsRUFDQSxNQUFBQSxFQUVBLElBQUF1aUMsR0FBQXFnQixFQUFB
ai9DLFVBQUF1L0MsRUFBQUosRUFDQXZmLEdBQUF2akMsRUFBQStpRCxFQUFBeGdCLEdBQ0FxZ0Is
RUFBQTU3QyxRQUFBdTdCLEdBWUEsUUFBQTRnQixHQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxHQUNB
eGdELEtBQUFvNkMsT0FBQWlHLEVBQ0FyZ0QsS0FBQXNnRCxZQUNBdGdELEtBQUFvakIsS0FBQW05
QixFQUNBdmdELEtBQUFnRCxRQUFBdzlDLEVBQ0F4Z0QsS0FBQWtKLE1BQUEsRUFXQSxRQUFBdTND
LEdBQUFSLEVBQUF2Z0IsRUFBQWdoQixHQUNBLEdBQUF0RyxHQUFBNkYsRUFBQTdGLE9BQ0FrRyxF
QUFBTCxFQUFBSyxVQUNBbDlCLEVBQUE2OEIsRUFBQTc4QixLQUNBcGdCLEVBQUFpOUMsRUFBQWo5
QyxRQUdBMjlDLEVBQUF2OUIsRUFBQS9yQixLQUFBMkwsRUFBQTA4QixFQUFBdWdCLEVBQUEvMkMs
UUFDQTBCLE9BQUFzWCxRQUFBeStCLEdBQ0FDLEVBQUFELEVBQUF2RyxFQUFBc0csRUFBQWxuRCxF
QUFBeUcscUJBQ0csTUFBQTBnRCxJQUNIcjRDLEVBQUFpQixlQUFBbzNDLEtBQ0FBLEVBQUFyNEMs
RUFBQTBDLG1CQUFBMjFDLEVBR0FMLElBQUFLLEVBQUFobEQsS0FBQStqQyxLQUFBL2pDLE1BQUFn
bEQsRUFBQWhsRCxJQUFBLEdBQUFna0QsRUFBQWdCLEVBQUFobEQsS0FBQSxLQUFBK2tELElBRUF0
RyxFQUFBdjhDLEtBQUE4aUQsSUFJQSxRQUFBQyxHQUFBM2pELEVBQUE4K0IsRUFBQWxKLEVBQUF6
UCxFQUFBcGdCLEdBQ0EsR0FBQTY5QyxHQUFBLEVBQ0EsT0FBQWh1QixJQUNBZ3VCLEVBQUFsQixF
QUFBOXNCLEdBQUEsSUFFQSxJQUFBMk0sR0FBQTRnQixFQUFBeC9DLFVBQUFtN0IsRUFBQThrQixF
QUFBejlCLEVBQUFwZ0IsRUFDQXc5QixHQUFBdmpDLEVBQUF3akQsRUFBQWpoQixHQUNBNGdCLEVB
QUFuOEMsUUFBQXU3QixHQWdCQSxRQUFBc2hCLEdBQUE3akQsRUFBQW1tQixFQUFBcGdCLEdBQ0Es
U0FBQS9GLEVBQ0EsTUFBQUEsRUFFQSxJQUFBbTlDLEtBRUEsT0FEQXdHLEdBQUEzakQsRUFBQW05
QyxFQUFBLEtBQUFoM0IsRUFBQXBnQixHQUNBbzNDLEVBR0EsUUFBQTJHLEdBQUF2aEIsRUFBQUUs
RUFBQWpvQyxHQUNBLFlBWUEsUUFBQXVwRCxHQUFBL2pELEVBQUErRixHQUNBLE1BQUF3OUIsR0FB
QXZqQyxFQUFBOGpELEVBQUEsTUFTQSxRQUFBNTNDLEdBQUFsTSxHQUNBLEdBQUFtOUMsS0FFQSxP
QURBd0csR0FBQTNqRCxFQUFBbTlDLEVBQUEsS0FBQTVnRCxFQUFBeUcscUJBQ0FtNkMsRUF0S0Es
R0FBQWgzQyxHQUFBdE0sRUFBQSxLQUNBd1IsRUFBQXhSLEVBQUEsSUFFQTBDLEVBQUExQyxFQUFB
LEdBQ0EwcEMsRUFBQTFwQyxFQUFBLEtBRUF5USxFQUFBbkUsRUFBQW1FLGtCQUNBTixFQUFBN0Qs
RUFBQTZELG1CQUVBMjRDLEVBQUEsTUFrQkFDLEdBQUF4bkQsVUFBQTJMLFdBQUEsV0FDQWhFLEtB
QUFvakIsS0FBQSxLQUNBcGpCLEtBQUFnRCxRQUFBLEtBQ0FoRCxLQUFBa0osTUFBQSxHQUVBOUYs
RUFBQWlCLGFBQUF3N0MsRUFBQXQ0QyxHQThDQTY0QyxFQUFBL25ELFVBQUEyTCxXQUFBLFdBQ0Fo
RSxLQUFBbzZDLE9BQUEsS0FDQXA2QyxLQUFBc2dELFVBQUEsS0FDQXRnRCxLQUFBb2pCLEtBQUEs
S0FDQXBqQixLQUFBZ0QsUUFBQSxLQUNBaEQsS0FBQWtKLE1BQUEsR0FFQTlGLEVBQUFpQixhQUFB
KzdDLEVBQUFuNUMsRUFvRkEsSUFBQW1CLElBQ0FsTixRQUFBZ2xELEVBQ0FwbEQsSUFBQWdtRCxF
QUNBRiwrQkFDQTEzQyxNQUFBODNDLEVBQ0E3M0MsVUFHQWpTLEdBQUFELFFBQUFtUixHdEdnNVdN
LFNBQVVsUixFQUFRRCxFQUFTSCxHQUVqQyxZdUdsa1hBLElBQUE0RyxHQUFBNUcsRUFBQSxJQVdB
b1EsR0FUQXBRLEVBQUEsR0FTQSxTQUFBcVEsR0FDQSxHQUFBQyxHQUFBcEgsSUFDQSxJQUFBb0gs
RUFBQUMsYUFBQXZOLE9BQUEsQ0FDQSxHQUFBd04sR0FBQUYsRUFBQUMsYUFBQXJKLEtBRUEsT0FE
QW9KLEdBQUEvUCxLQUFBaVEsRUFBQUgsR0FDQUcsRUFFQSxVQUFBRixHQUFBRCxLQUlBSSxFQUFB
LFNBQUFDLEVBQUFDLEdBQ0EsR0FBQUwsR0FBQXBILElBQ0EsSUFBQW9ILEVBQUFDLGFBQUF2TixP
QUFBLENBQ0EsR0FBQXdOLEdBQUFGLEVBQUFDLGFBQUFySixLQUVBLE9BREFvSixHQUFBL1AsS0FB
QWlRLEVBQUFFLEVBQUFDLEdBQ0FILEVBRUEsVUFBQUYsR0FBQUksRUFBQUMsSUFJQUMsRUFBQSxT
QUFBRixFQUFBQyxFQUFBRSxHQUNBLEdBQUFQLEdBQUFwSCxJQUNBLElBQUFvSCxFQUFBQyxhQUFB
dk4sT0FBQSxDQUNBLEdBQUF3TixHQUFBRixFQUFBQyxhQUFBckosS0FFQSxPQURBb0osR0FBQS9Q
LEtBQUFpUSxFQUFBRSxFQUFBQyxFQUFBRSxHQUNBTCxFQUVBLFVBQUFGLEdBQUFJLEVBQUFDLEVB
QUFFLElBSUFWLEVBQUEsU0FBQU8sRUFBQUMsRUFBQUUsRUFBQUMsR0FDQSxHQUFBUixHQUFBcEgs
SUFDQSxJQUFBb0gsRUFBQUMsYUFBQXZOLE9BQUEsQ0FDQSxHQUFBd04sR0FBQUYsRUFBQUMsYUFB
QXJKLEtBRUEsT0FEQW9KLEdBQUEvUCxLQUFBaVEsRUFBQUUsRUFBQUMsRUFBQUUsRUFBQUMsR0FD
QU4sRUFFQSxVQUFBRixHQUFBSSxFQUFBQyxFQUFBRSxFQUFBQyxJQUlBQyxFQUFBLFNBQUFQLEdB
Q0EsR0FBQUYsR0FBQXBILElBQ0FzSCxhQUFBRixJQUFBMUosRUFBQSxNQUNBNEosRUFBQXRELGFB
Q0FvRCxFQUFBQyxhQUFBdk4sT0FBQXNOLEVBQUFVLFVBQ0FWLEVBQUFDLGFBQUF4SixLQUFBeUos
SUFLQVMsRUFBQWIsRUFXQTdDLEVBQUEsU0FBQTJELEVBQUFDLEdBR0EsR0FBQUMsR0FBQUYsQ0FP
QSxPQU5BRSxHQUFBYixnQkFDQWEsRUFBQXRILFVBQUFxSCxHQUFBRixFQUNBRyxFQUFBSixXQUNB
SSxFQUFBSixTQW5CQSxJQXFCQUksRUFBQWpFLFFBQUE0RCxFQUNBSyxHQUdBOUUsR0FDQWlCLGVB
Q0E2QyxvQkFDQUssb0JBQ0FHLHNCQUNBVCxxQkFHQS9QLEdBQUFELFFBQUFtTSxHdkdvbFhNLFNB
QVVsTSxFQUFRRCxFQUFTSCxHQUVqQyxZd0d2cFhBLFNBQUF1b0MsR0FBQWpqQyxFQUFBZ2QsR0FH
QSxNQUFBaGQsSUFBQSxpQkFBQUEsSUFBQSxNQUFBQSxFQUFBVCxJQUVBa3VCLEVBQUExUSxPQUFB
L2MsRUFBQVQsS0FHQXlkLEVBQUEzYSxTQUFBLElBV0EsUUFBQTZnQyxHQUFBcmlDLEVBQUFzaUMs
RUFBQXgrQixFQUFBeStCLEdBQ0EsR0FBQXY5QixTQUFBaEYsRUFPQSxJQUxBLGNBQUFnRixHQUFB
LFlBQUFBLElBRUFoRixFQUFBLE1BR0EsT0FBQUEsR0FBQSxXQUFBZ0YsR0FBQSxXQUFBQSxHQUdB
LFdBQUFBLEdBQUFoRixFQUFBdU4sV0FBQVIsRUFLQSxNQUpBakosR0FBQXkrQixFQUFBdmlDLEVB
R0EsS0FBQXNpQyxFQUFBRSxFQUFBSixFQUFBcGlDLEVBQUEsR0FBQXNpQyxHQUNBLENBR0EsSUFB
QUcsR0FDQUMsRUFDQUMsRUFBQSxFQUNBQyxFQUFBLEtBQUFOLEVBQUFFLEVBQUFGLEVBQUFPLENB
RUEsSUFBQWwxQixNQUFBc1gsUUFBQWpsQixHQUNBLE9BQUE5RixHQUFBLEVBQW1CQSxFQUFBOEYs
RUFBQW5ELE9BQXFCM0MsSUFDeEN1b0MsRUFBQXppQyxFQUFBOUYsR0FDQXdvQyxFQUFBRSxFQUFB
UixFQUFBSyxFQUFBdm9DLEdBQ0F5b0MsR0FBQU4sRUFBQUksRUFBQUMsRUFBQTUrQixFQUFBeStC
LE9BRUcsQ0FDSCxHQUFBTyxHQUFBQyxFQUFBL2lDLEVBQ0EsSUFBQThpQyxFQUFBLENBQ0EsR0FD
QUUsR0FEQUMsRUFBQUgsRUFBQTFvQyxLQUFBNEYsRUFFQSxJQUFBOGlDLElBQUE5aUMsRUFBQWtq
QyxRQUVBLElBREEsR0FBQUMsR0FBQSxJQUNBSCxFQUFBQyxFQUFBN1EsUUFBQWYsTUFDQW9SLEVB
QUFPLEVBQUEzMEIsTUFDQXEwQixFQUFBRSxFQUFBUixFQUFBSyxFQUFBVSxLQUNBUixHQUFBTixF
QUFBSSxFQUFBQyxFQUFBNStCLEVBQUF5K0IsT0FlQSxRQUFBUyxFQUFBQyxFQUFBN1EsUUFBQWYs
TUFBQSxDQUNBLEdBQUErUixHQUFBSixFQUFBMzBCLEtBQ0ErMEIsS0FDQVgsRUFBQVcsRUFBQSxH
QUNBVixFQUFBRSxFQUFBaFcsRUFBQTFRLE9BQUFrbkIsRUFBQSxJQUFBUCxFQUFBVCxFQUFBSyxF
QUFBLEdBQ0FFLEdBQUFOLEVBQUFJLEVBQUFDLEVBQUE1K0IsRUFBQXkrQixTQUlLLGVBQUF2OUIs
RUFBQSxDQUNMLEdBQUFxK0IsR0FBQSxHQWFBQyxFQUFBN2xDLE9BQUF1QyxFQUNvT1MsR0FBQSx5
QkFBQTZpQyxFQUFBLHFCQUErRzNvQyxPQUFBd0QsS0FBQTZCLEdBQUFsQyxLQUFBLFVBQXlDd2xD
LEVBQUFELElBSTVYLE1BQUFWLEdBbUJBLFFBQUFZLEdBQUF2akMsRUFBQThELEVBQUF5K0IsR0FD
QSxhQUFBdmlDLEVBQ0EsRUFHQXFpQyxFQUFBcmlDLEVBQUEsR0FBQThELEVBQUF5K0IsR0EvSkEs
R0FBQTloQyxHQUFBNUcsRUFBQSxJQUdBa1QsR0FEQWxULEVBQUEsSUFDQUEsRUFBQSxLQUVBa3BD
LEVBQUFscEMsRUFBQSxLQUVBK3lCLEdBREEveUIsRUFBQSxHQUNBQSxFQUFBLE1BR0Eyb0MsR0FG
QTNvQyxFQUFBLEdBRUEsS0FDQWdwQyxFQUFBLEdBdUpBNW9DLEdBQUFELFFBQUF1cEMsR3hHeXNY
TSxTQUFVdHBDLEVBQVFELEVBQVNILEdBRWpDLFl5R3oxWEEsU0FBQWtwQyxHQUFBaWhCLEdBQ0Es
R0FBQWxoQixHQUFBa2hCLElBQUFDLEdBQUFELEVBQUFDLElBQUFELEVBQUFFLEdBQ0EsdUJBQUFw
aEIsR0FDQSxNQUFBQSxHQXBCQSxHQUFBbWhCLEdBQUEsbUJBQUE5eEIsZ0JBQUE4USxTQUNBaWhC
LEVBQUEsWUF1QkFqcUQsR0FBQUQsUUFBQStvQyxHekc4M1hNLFNBQVU5b0MsRUFBUUQsRUFBU0gs
R0FFakMsWTBHbjVYQSxTQUFBcWlCLEdBQUF4ZCxHQUNBLEdBQ0EwdEIsSUFDQUMsSUFBQSxLQUNB
QyxJQUFBLEtBTUEsWUFKQSxHQUFBNXRCLEdBQUFyQyxRQUxBLFFBS0EsU0FBQTBmLEdBQ0EsTUFB
QXFRLEdBQUFyUSxLQVlBLFFBQUF3USxHQUFBN3RCLEdBQ0EsR0FBQTh0QixHQUFBLFdBQ0FDLEdB
Q0FDLEtBQUEsSUFDQUMsS0FBQSxJQUlBLFlBRkEsTUFBQWp1QixFQUFBLFVBQUFBLEVBQUEsR0FB
QUEsRUFBQTRkLFVBQUEsR0FBQTVkLEVBQUE0ZCxVQUFBLEtBRUFqZ0IsUUFBQW13QixFQUFBLFNB
QUF6USxHQUNBLE1BQUEwUSxHQUFBMVEsS0FJQSxHQUFBNlEsSUFDQTFRLFNBQ0FxUSxXQUdBdHlC
LEdBQUFELFFBQUE0eUIsRzFHNDZYTSxTQUFVM3lCLEVBQVFELEVBQVNILEdBRWpDLFkyRzM5WEEs
SUFBQXdSLEdBQUF4UixFQUFBLElBT0FzcUQsRUFBQTk0QyxFQUFBSyxjQVdBTixHQUNBelAsRUFB
QXdvRCxFQUFBLEtBQ0FDLEtBQUFELEVBQUEsUUFDQUUsUUFBQUYsRUFBQSxXQUNBRyxLQUFBSCxF
QUFBLFFBQ0FJLFFBQUFKLEVBQUEsV0FDQUssTUFBQUwsRUFBQSxTQUNBTSxNQUFBTixFQUFBLFNB
Q0F2b0QsRUFBQXVvRCxFQUFBLEtBQ0FPLEtBQUFQLEVBQUEsUUFDQVEsSUFBQVIsRUFBQSxPQUNB
UyxJQUFBVCxFQUFBLE9BQ0FVLElBQUFWLEVBQUEsT0FDQVcsV0FBQVgsRUFBQSxjQUNBaGEsS0FB
QWdhLEVBQUEsUUFDQVksR0FBQVosRUFBQSxNQUNBNXBDLE9BQUE0cEMsRUFBQSxVQUNBYSxPQUFB
YixFQUFBLFVBQ0FjLFFBQUFkLEVBQUEsV0FDQWUsS0FBQWYsRUFBQSxRQUNBem5ELEtBQUF5bkQs
RUFBQSxRQUNBZ0IsSUFBQWhCLEVBQUEsT0FDQWlCLFNBQUFqQixFQUFBLFlBQ0Exb0MsS0FBQTBv
QyxFQUFBLFFBQ0FrQixTQUFBbEIsRUFBQSxZQUNBbUIsR0FBQW5CLEVBQUEsTUFDQW9CLElBQUFw
QixFQUFBLE9BQ0FxQixRQUFBckIsRUFBQSxXQUNBc0IsSUFBQXRCLEVBQUEsT0FDQXVCLE9BQUF2
QixFQUFBLFVBQ0F3QixJQUFBeEIsRUFBQSxPQUNBeUIsR0FBQXpCLEVBQUEsTUFDQTBCLEdBQUEx
QixFQUFBLE1BQ0EyQixHQUFBM0IsRUFBQSxNQUNBNEIsTUFBQTVCLEVBQUEsU0FDQTZCLFNBQUE3
QixFQUFBLFlBQ0E4QixXQUFBOUIsRUFBQSxjQUNBK0IsT0FBQS9CLEVBQUEsVUFDQWdDLE9BQUFo
QyxFQUFBLFVBQ0FyRSxLQUFBcUUsRUFBQSxRQUNBaUMsR0FBQWpDLEVBQUEsTUFDQWtDLEdBQUFs
QyxFQUFBLE1BQ0FtQyxHQUFBbkMsRUFBQSxNQUNBb0MsR0FBQXBDLEVBQUEsTUFDQXFDLEdBQUFy
QyxFQUFBLE1BQ0FzQyxHQUFBdEMsRUFBQSxNQUNBdUMsS0FBQXZDLEVBQUEsUUFDQXRILE9BQUFz
SCxFQUFBLFVBQ0F3QyxPQUFBeEMsRUFBQSxVQUNBeUMsR0FBQXpDLEVBQUEsTUFDQWx5QyxLQUFB
a3lDLEVBQUEsUUFDQWpxRCxFQUFBaXFELEVBQUEsS0FDQTBDLE9BQUExQyxFQUFBLFVBQ0EyQyxJ
QUFBM0MsRUFBQSxPQUNBbGIsTUFBQWtiLEVBQUEsU0FDQTRDLElBQUE1QyxFQUFBLE9BQ0E2QyxJ
QUFBN0MsRUFBQSxPQUNBOEMsT0FBQTlDLEVBQUEsVUFDQStDLE1BQUEvQyxFQUFBLFNBQ0FnRCxP
QUFBaEQsRUFBQSxVQUNBaUQsR0FBQWpELEVBQUEsTUFDQWtELEtBQUFsRCxFQUFBLFFBQ0FtRCxL
QUFBbkQsRUFBQSxRQUNBdG1ELElBQUFzbUQsRUFBQSxPQUNBb0QsS0FBQXBELEVBQUEsUUFDQXFE
LEtBQUFyRCxFQUFBLFFBQ0FzRCxTQUFBdEQsRUFBQSxZQUNBdUQsS0FBQXZELEVBQUEsUUFDQXdE
LE1BQUF4RCxFQUFBLFNBQ0F5RCxJQUFBekQsRUFBQSxPQUNBMEQsU0FBQTFELEVBQUEsWUFDQWpw
RCxPQUFBaXBELEVBQUEsVUFDQTJELEdBQUEzRCxFQUFBLE1BQ0E0RCxTQUFBNUQsRUFBQSxZQUNB
NkQsT0FBQTdELEVBQUEsVUFDQThELE9BQUE5RCxFQUFBLFVBQ0E3b0QsRUFBQTZvRCxFQUFBLEtB
Q0ErRCxNQUFBL0QsRUFBQSxTQUNBZ0UsUUFBQWhFLEVBQUEsV0FDQWlFLElBQUFqRSxFQUFBLE9B
Q0FrRSxTQUFBbEUsRUFBQSxZQUNBbUUsRUFBQW5FLEVBQUEsS0FDQW9FLEdBQUFwRSxFQUFBLE1B
Q0FxRSxHQUFBckUsRUFBQSxNQUNBc0UsS0FBQXRFLEVBQUEsUUFDQTVvRCxFQUFBNG9ELEVBQUEs
S0FDQXVFLEtBQUF2RSxFQUFBLFFBQ0F3RSxPQUFBeEUsRUFBQSxVQUNBeUUsUUFBQXpFLEVBQUEs
V0FDQW5hLE9BQUFtYSxFQUFBLFVBQ0EwRSxNQUFBMUUsRUFBQSxTQUNBN2xELE9BQUE2bEQsRUFB
QSxVQUNBMkUsS0FBQTNFLEVBQUEsUUFDQTRFLE9BQUE1RSxFQUFBLFVBQ0E2RSxNQUFBN0UsRUFB
QSxTQUNBOEUsSUFBQTlFLEVBQUEsT0FDQStFLFFBQUEvRSxFQUFBLFdBQ0FnRixJQUFBaEYsRUFB
QSxPQUNBaUYsTUFBQWpGLEVBQUEsU0FDQWtGLE1BQUFsRixFQUFBLFNBQ0FtRixHQUFBbkYsRUFB
QSxNQUNBb0YsU0FBQXBGLEVBQUEsWUFDQXFGLE1BQUFyRixFQUFBLFNBQ0FzRixHQUFBdEYsRUFB
QSxNQUNBdUYsTUFBQXZGLEVBQUEsU0FDQS8rQyxLQUFBKytDLEVBQUEsUUFDQWxsQixNQUFBa2xC
LEVBQUEsU0FDQXdGLEdBQUF4RixFQUFBLE1BQ0F0d0IsTUFBQXN3QixFQUFBLFNBQ0F5RixFQUFB
ekYsRUFBQSxLQUNBMEYsR0FBQTFGLEVBQUEsTUFDQTJGLElBQUEzRixFQUFBLE9BQ0E0RixNQUFB
NUYsRUFBQSxTQUNBNkYsSUFBQTdGLEVBQUEsT0FHQThGLE9BQUE5RixFQUFBLFVBQ0ErRixTQUFB
L0YsRUFBQSxZQUNBZ0csS0FBQWhHLEVBQUEsUUFDQWlHLFFBQUFqRyxFQUFBLFdBQ0FsaEMsRUFB
QWtoQyxFQUFBLEtBQ0FoNkIsTUFBQWc2QixFQUFBLFNBQ0F0SyxLQUFBc0ssRUFBQSxRQUNBa0cs
ZUFBQWxHLEVBQUEsa0JBQ0FtRyxLQUFBbkcsRUFBQSxRQUNBb0csS0FBQXBHLEVBQUEsUUFDQXFH
LFFBQUFyRyxFQUFBLFdBQ0FzRyxRQUFBdEcsRUFBQSxXQUNBdUcsU0FBQXZHLEVBQUEsWUFDQXdH
LGVBQUF4RyxFQUFBLGtCQUNBeUcsS0FBQXpHLEVBQUEsUUFDQTBHLEtBQUExRyxFQUFBLFFBQ0Ev
b0MsSUFBQStvQyxFQUFBLE9BQ0FoeUMsS0FBQWd5QyxFQUFBLFFBQ0EyRyxNQUFBM0csRUFBQSxT
QUdBbHFELEdBQUFELFFBQUFvUixHM0c0K1hNLFNBQVVuUixFQUFRRCxFQUFTSCxHQUVqQyxZNEd6
b1lBLElBQUFreEQsR0FBQWx4RCxFQUFBLElBQ0F5UyxFQUFBeStDLEVBQUF6K0MsZUFFQXVCLEVB
QUFoVSxFQUFBLEdBRUFJLEdBQUFELFFBQUE2VCxFQUFBdkIsSTVHMHBZTSxTQUFVclMsRUFBUUQs
RUFBU0gsR0FFakMsWTZHbHFZQSxJQUFBMEMsR0FBQTFDLEVBQUEsR0FDQTJCLEVBQUEzQixFQUFB
LEdBQ0EyQyxFQUFBM0MsRUFBQSxHQUVBa3dCLEVBQUFsd0IsRUFBQSxJQUNBK3dCLEVBQUEvd0Is
RUFBQSxJQUVBSSxHQUFBRCxRQUFBLFNBQUFzUyxFQUFBMCtDLEdBbUJBLFFBQUFqb0IsR0FBQWlo
QixHQUNBLEdBQUFsaEIsR0FBQWtoQixJQUFBQyxHQUFBRCxFQUFBQyxJQUFBRCxFQUFBRSxHQUNB
LHVCQUFBcGhCLEdBQ0EsTUFBQUEsR0FnRkEsUUFBQXRYLEdBQUFwRixFQUFBcUYsR0FFQSxNQUFB
ckYsS0FBQXFGLEVBR0EsSUFBQXJGLEdBQUEsRUFBQUEsSUFBQSxFQUFBcUYsRUFHQXJGLE9BQUFx
RixNQVlBLFFBQUF3L0IsR0FBQW51RCxHQUNBaUcsS0FBQWpHLFVBQ0FpRyxLQUFBd2tDLE1BQUEs
R0FLQSxRQUFBMmpCLEdBQUFDLEdBS0EsUUFBQUMsR0FBQS9aLEVBQUFoa0MsRUFBQS9FLEVBQUFr
aUIsRUFBQTIyQixFQUFBa0ssRUFBQUMsR0FJQSxHQUhBOWdDLEtBQUErZ0MsRUFDQUYsS0FBQS9p
RCxFQUVBZ2pELElBQUF2aEMsRUFDQSxHQUFBaWhDLEVBRUF4dkQsR0FDQSxFQUNBLDBMQTJCQSxh
QUFBNlIsRUFBQS9FLEdBQ0Erb0MsRUFFQSxHQUFBNFosR0FEQSxPQUFBNTlDLEVBQUEvRSxHQUNB
LE9BQUE2NEMsRUFBQSxLQUFBa0ssRUFBQSwrQkFBQTdnQyxFQUFBLDhCQUVBLE9BQUEyMkIsRUFB
QSxLQUFBa0ssRUFBQSwrQkFBQTdnQyxFQUFBLG9DQUVBLEtBRUEyZ0MsRUFBQTk5QyxFQUFBL0Us
RUFBQWtpQixFQUFBMjJCLEVBQUFrSyxHQWhEQSxHQW9EQUcsR0FBQUosRUFBQXQ5QyxLQUFBLFFB
R0EsT0FGQTA5QyxHQUFBbmEsV0FBQStaLEVBQUF0OUMsS0FBQSxTQUVBMDlDLEVBR0EsUUFBQUMs
R0FBQUMsR0FDQSxRQUFBUCxHQUFBOTlDLEVBQUEvRSxFQUFBa2lCLEVBQUEyMkIsRUFBQWtLLEVB
QUFDLEdBQ0EsR0FBQXp1QixHQUFBeHZCLEVBQUEvRSxFQUVBLElBREFxakQsRUFBQTl1QixLQUNB
NnVCLEVBTUEsVUFBQVQsR0FBQSxXQUFBOUosRUFBQSxLQUFBa0ssRUFBQSxjQUZBTyxFQUFBL3VC
LEdBRUEsa0JBQUFyUyxFQUFBLGdCQUFBa2hDLEVBQUEsS0FFQSxhQUVBLE1BQUFSLEdBQUFDLEdB
T0EsUUFBQVUsR0FBQUMsR0FDQSxRQUFBWCxHQUFBOTlDLEVBQUEvRSxFQUFBa2lCLEVBQUEyMkIs
RUFBQWtLLEdBQ0Esc0JBQUFTLEdBQ0EsVUFBQWIsR0FBQSxhQUFBSSxFQUFBLG1CQUFBN2dDLEVB
QUEsa0RBRUEsSUFBQXFTLEdBQUF4dkIsRUFBQS9FLEVBQ0EsS0FBQXFGLE1BQUFzWCxRQUFBNFgs
R0FBQSxDQUVBLFVBQUFvdUIsR0FBQSxXQUFBOUosRUFBQSxLQUFBa0ssRUFBQSxjQURBTSxFQUFB
OXVCLEdBQ0Esa0JBQUFyUyxFQUFBLHlCQUVBLE9BQUF0d0IsR0FBQSxFQUFxQkEsRUFBQTJpQyxF
QUFBaGdDLE9BQXNCM0MsSUFBQSxDQUMzQyxHQUFBOEIsR0FBQTh2RCxFQUFBanZCLEVBQUEzaUMs
RUFBQXN3QixFQUFBMjJCLEVBQUFrSyxFQUFBLElBQUFueEQsRUFBQSxJQUFBNnZCLEVBQ0EsSUFB
QS90QixZQUFBRSxPQUNBLE1BQUFGLEdBR0EsWUFFQSxNQUFBa3ZELEdBQUFDLEdBZUEsUUFBQVks
R0FBQUMsR0FDQSxRQUFBYixHQUFBOTlDLEVBQUEvRSxFQUFBa2lCLEVBQUEyMkIsRUFBQWtLLEdB
Q0EsS0FBQWgrQyxFQUFBL0UsWUFBQTBqRCxJQUFBLENBQ0EsR0FBQUMsR0FBQUQsRUFBQXh4RCxN
QUFBK3dELENBRUEsV0FBQU4sR0FBQSxXQUFBOUosRUFBQSxLQUFBa0ssRUFBQSxjQURBYSxFQUFB
NytDLEVBQUEvRSxJQUNBLGtCQUFBa2lCLEVBQUEsNEJBQUF5aEMsRUFBQSxNQUVBLFlBRUEsTUFB
QWYsR0FBQUMsR0FHQSxRQUFBZ0IsR0FBQUMsR0FNQSxRQUFBakIsR0FBQTk5QyxFQUFBL0UsRUFB
QWtpQixFQUFBMjJCLEVBQUFrSyxHQUVBLE9BREF4dUIsR0FBQXh2QixFQUFBL0UsR0FDQXBPLEVB
QUEsRUFBcUJBLEVBQUFreUQsRUFBQXZ2RCxPQUEyQjNDLElBQ2hELEdBQUFzeEIsRUFBQXFSLEVB
QUF1dkIsRUFBQWx5RCxJQUNBLFdBS0EsV0FBQSt3RCxHQUFBLFdBQUE5SixFQUFBLEtBQUFrSyxF
QUFBLGVBQUF4dUIsRUFBQSxrQkFBQXJTLEVBQUEsc0JBREFzcEIsS0FBQUMsVUFBQXFZLEdBQ0Es
S0FkQSxNQUFBeitDLE9BQUFzWCxRQUFBbW5DLEdBZ0JBbEIsRUFBQUMsR0FkQTV1RCxFQUFBc0cs
Z0JBaUJBLFFBQUF3cEQsR0FBQVAsR0FDQSxRQUFBWCxHQUFBOTlDLEVBQUEvRSxFQUFBa2lCLEVB
QUEyMkIsRUFBQWtLLEdBQ0Esc0JBQUFTLEdBQ0EsVUFBQWIsR0FBQSxhQUFBSSxFQUFBLG1CQUFB
N2dDLEVBQUEsbURBRUEsSUFBQXFTLEdBQUF4dkIsRUFBQS9FLEdBQ0Fna0QsRUFBQVgsRUFBQTl1
QixFQUNBLGVBQUF5dkIsRUFDQSxVQUFBckIsR0FBQSxXQUFBOUosRUFBQSxLQUFBa0ssRUFBQSxj
QUFBaUIsRUFBQSxrQkFBQTloQyxFQUFBLHlCQUVBLFFBQUE5ckIsS0FBQW0rQixHQUNBLEdBQUFB
LEVBQUF4aEMsZUFBQXFELEdBQUEsQ0FDQSxHQUFBMUMsR0FBQTh2RCxFQUFBanZCLEVBQUFuK0Is
RUFBQThyQixFQUFBMjJCLEVBQUFrSyxFQUFBLElBQUEzc0QsRUFBQXFyQixFQUNBLElBQUEvdEIs
WUFBQUUsT0FDQSxNQUFBRixHQUlBLFlBRUEsTUFBQWt2RCxHQUFBQyxHQUdBLFFBQUFvQixHQUFB
QyxHQW9CQSxRQUFBckIsR0FBQTk5QyxFQUFBL0UsRUFBQWtpQixFQUFBMjJCLEVBQUFrSyxHQUNB
LE9BQUFueEQsR0FBQSxFQUFxQkEsRUFBQXN5RCxFQUFBM3ZELE9BQWdDM0MsSUFBQSxDQUVyRCxV
QUFBdXlELEVBREFELEVBQUF0eUQsSUFDQW1ULEVBQUEvRSxFQUFBa2lCLEVBQUEyMkIsRUFBQWtL
LEVBQUF0aEMsR0FDQSxZQUlBLFVBQUFraEMsR0FBQSxXQUFBOUosRUFBQSxLQUFBa0ssRUFBQSxr
QkFBQTdnQyxFQUFBLE1BM0JBLElBQUE3YyxNQUFBc1gsUUFBQXVuQyxHQUVBLE1BQUFqd0QsR0FB
QXNHLGVBR0EsUUFBQTNJLEdBQUEsRUFBbUJBLEVBQUFzeUQsRUFBQTN2RCxPQUFnQzNDLElBQUEs
Q0FDbkQsR0FBQXV5RCxHQUFBRCxFQUFBdHlELEVBQ0EsdUJBQUF1eUQsR0FRQSxNQVBBandELElB
Q0EsRUFDQSw0R0FFQWt3RCxFQUFBRCxHQUNBdnlELEdBRUFxQyxFQUFBc0csZ0JBY0EsTUFBQXFv
RCxHQUFBQyxHQWFBLFFBQUF3QixHQUFBQyxHQUNBLFFBQUF6QixHQUFBOTlDLEVBQUEvRSxFQUFB
a2lCLEVBQUEyMkIsRUFBQWtLLEdBQ0EsR0FBQXh1QixHQUFBeHZCLEVBQUEvRSxHQUNBZ2tELEVB
QUFYLEVBQUE5dUIsRUFDQSxlQUFBeXZCLEVBQ0EsVUFBQXJCLEdBQUEsV0FBQTlKLEVBQUEsS0FB
QWtLLEVBQUEsY0FBQWlCLEVBQUEsa0JBQUE5aEMsRUFBQSx3QkFFQSxRQUFBOXJCLEtBQUFrdUQs
R0FBQSxDQUNBLEdBQUFILEdBQUFHLEVBQUFsdUQsRUFDQSxJQUFBK3RELEVBQUEsQ0FHQSxHQUFB
endELEdBQUF5d0QsRUFBQTV2QixFQUFBbitCLEVBQUE4ckIsRUFBQTIyQixFQUFBa0ssRUFBQSxJ
QUFBM3NELEVBQUFxckIsRUFDQSxJQUFBL3RCLEVBQ0EsTUFBQUEsSUFHQSxZQUVBLE1BQUFrdkQs
R0FBQUMsR0FHQSxRQUFBMEIsR0FBQWh3QixHQUNBLGFBQUFBLElBQ0EsYUFDQSxhQUNBLGdCQUNB
LFFBQ0EsZUFDQSxPQUFBQSxDQUNBLGNBQ0EsR0FBQWx2QixNQUFBc1gsUUFBQTRYLEdBQ0EsTUFB
QUEsR0FBQWl3QixNQUFBRCxFQUVBLFdBQUFod0IsR0FBQXZ3QixFQUFBdXdCLEdBQ0EsUUFHQSxJ
QUFBaUcsR0FBQUMsRUFBQWxHLEVBQ0EsS0FBQWlHLEVBcUJBLFFBcEJBLElBQ0FFLEdBREFDLEVB
QUFILEVBQUExb0MsS0FBQXlpQyxFQUVBLElBQUFpRyxJQUFBakcsRUFBQXFHLFNBQ0EsT0FBQUYs
RUFBQUMsRUFBQTdRLFFBQUFmLE1BQ0EsSUFBQXc3QixFQUFBN3BCLEVBQUEzMEIsT0FDQSxhQUtB
LFFBQUEyMEIsRUFBQUMsRUFBQTdRLFFBQUFmLE1BQUEsQ0FDQSxHQUFBK1IsR0FBQUosRUFBQTMw
QixLQUNBLElBQUErMEIsSUFDQXlwQixFQUFBenBCLEVBQUEsSUFDQSxTQVNBLFFBQ0EsU0FDQSxV
QUlBLFFBQUEycEIsR0FBQVQsRUFBQXp2QixHQUVBLGlCQUFBeXZCLElBS0EsV0FBQXp2QixFQUFB
LGtCQUtBLG1CQUFBMUssU0FBQTBLLFlBQUExSyxTQVFBLFFBQUF3NUIsR0FBQTl1QixHQUNBLEdB
QUF5dkIsU0FBQXp2QixFQUNBLE9BQUFsdkIsT0FBQXNYLFFBQUE0WCxHQUNBLFFBRUFBLFlBQUFy
QixRQUlBLFNBRUF1eEIsRUFBQVQsRUFBQXp2QixHQUNBLFNBRUF5dkIsRUFLQSxRQUFBVixHQUFB
L3VCLEdBQ0EsdUJBQUFBLElBQUEsT0FBQUEsRUFDQSxTQUFBQSxDQUVBLElBQUF5dkIsR0FBQVgs
RUFBQTl1QixFQUNBLGVBQUF5dkIsRUFBQSxDQUNBLEdBQUF6dkIsWUFBQXp6QixNQUNBLFlBQ08s
SUFBQXl6QixZQUFBckIsUUFDUCxlQUdBLE1BQUE4d0IsR0FLQSxRQUFBSSxHQUFBcitDLEdBQ0Es
R0FBQXJKLEdBQUE0bUQsRUFBQXY5QyxFQUNBLFFBQUFySixHQUNBLFlBQ0EsYUFDQSxZQUFBQSxD
QUNBLGVBQ0EsV0FDQSxhQUNBLFdBQUFBLENBQ0EsU0FDQSxNQUFBQSxJQUtBLFFBQUFrbkQsR0FB
QXJ2QixHQUNBLE1BQUFBLEdBQUF4MEIsYUFBQXcwQixFQUFBeDBCLFlBQUE3TixLQUdBcWlDLEVB
QUF4MEIsWUFBQTdOLEtBRkErd0QsRUFsZUEsR0FBQXRILEdBQUEsbUJBQUE5eEIsZ0JBQUE4USxT
QUNBaWhCLEVBQUEsYUFzRUFxSCxFQUFBLGdCQUlBamdELEdBQ0F3ekIsTUFBQTJzQixFQUFBLFNB
Q0FwVCxLQUFBb1QsRUFBQSxXQUNBdGxDLEtBQUFzbEMsRUFBQSxZQUNBMTJCLE9BQUEwMkIsRUFB
QSxVQUNBdndELE9BQUF1d0QsRUFBQSxVQUNBNXZDLE9BQUE0dkMsRUFBQSxVQUNBdUIsT0FBQXZC
LEVBQUEsVUFFQXdCLElBd0hBLFdBQ0EsTUFBQS9CLEdBQUEzdUQsRUFBQXNHLG9CQXhIQXFxRCxR
QUFBckIsRUFDQXYrQyxRQStJQSxXQUNBLFFBQUE2OUMsR0FBQTk5QyxFQUFBL0UsRUFBQWtpQixF
QUFBMjJCLEVBQUFrSyxHQUNBLEdBQUF4dUIsR0FBQXh2QixFQUFBL0UsRUFDQSxLQUFBZ0UsRUFB
QXV3QixHQUFBLENBRUEsVUFBQW91QixHQUFBLFdBQUE5SixFQUFBLEtBQUFrSyxFQUFBLGNBREFN
LEVBQUE5dUIsR0FDQSxrQkFBQXJTLEVBQUEsc0NBRUEsWUFFQSxNQUFBMGdDLEdBQUFDLE1BdkpB
Z0MsV0FBQXBCLEVBQ0FudEQsS0FpUEEsV0FDQSxRQUFBdXNELEdBQUE5OUMsRUFBQS9FLEVBQUFr
aUIsRUFBQTIyQixFQUFBa0ssR0FDQSxNQUFBd0IsR0FBQXgvQyxFQUFBL0UsSUFHQSxLQUZBLEdB
QUEyaUQsR0FBQSxXQUFBOUosRUFBQSxLQUFBa0ssRUFBQSxrQkFBQTdnQyxFQUFBLDRCQUlBLE1B
QUEwZ0MsR0FBQUMsTUF2UEFpQyxTQUFBZixFQUNBZ0IsTUFBQWxCLEVBQ0FtQixVQUFBZixFQUNB
cGIsTUFBQXdiLEVBOFlBLE9BN1dBMUIsR0FBQTd2RCxVQUFBYyxNQUFBZCxVQTBXQWtRLEVBQUFz
ZixpQkFDQXRmLEVBQUFpQixVQUFBakIsRUFFQUEsSTdHb3JZTSxTQUFVclIsRUFBUUQsRUFBU0gs
R0FFakMsWThHdnBaQSxTQUFBK3dCLEdBQUEyaUMsRUFBQXJSLEVBQUFpRixFQUFBMzJCLEVBQUFn
akMsSUErQkF2ekQsRUFBQUQsUUFBQTR3QixHOUcwclpNLFNBQVUzd0IsRUFBUUQsRUFBU0gsR0FF
akMsWStHNXVaQUksR0FBQUQsUUFBQSxVL0c2dlpNLFNBQVVDLEVBQVFELEVBQVNILEdBRWpDLFln
SC92WkEsSUFBQWt4RCxHQUFBbHhELEVBQUEsSUFDQXVTLEVBQUEyK0MsRUFBQTMrQyxVQUVBcWhE
LEVBQUE1ekQsRUFBQSxJQUNBeVMsRUFBQW1oRCxFQUFBbmhELGVBRUFxbEIsRUFBQTkzQixFQUFB
LElBQ0FnVSxFQUFBaFUsRUFBQSxJQUVBSSxHQUFBRCxRQUFBNlQsRUFBQXpCLEVBQUFFLEVBQUFx
bEIsSWhIZ3haTSxTQUFVMTNCLEVBQVFELEVBQVNILEdBRWpDLFlpSDl3WkEsU0FBQTZ6RCxHQUFB
MW5DLEdBQ0EsTUFBQUEsR0FjQSxRQUFBblksR0FBQTJqQixFQUFBbGxCLEVBQUFxbEIsR0E4VUEs
UUFBQWc4QixHQUFBQyxFQUFBcHpELEdBQ0EsR0FBQXF6RCxHQUFBQyxFQUFBenlELGVBQUFiLEdB
Q0FzekQsRUFBQXR6RCxHQUNBLElBR0F1ekQsR0FBQTF5RCxlQUFBYixJQUNBd3pELEVBQ0Esa0JB
QUFILEVBQ0EsMkpBR0FyekQsR0FLQW96RCxHQUNBSSxFQUNBLGdCQUFBSCxHQUFBLHVCQUFBQSxF
QUNBLGdJQUdBcnpELEdBU0EsUUFBQXl6RCxHQUFBdDdCLEVBQUF1N0IsR0FDQSxHQUFBQSxFQUFB
LENBcUJBRixFQUNBLG1CQUFBRSxHQUNBLHNIQUlBRixHQUNBMWhELEVBQUE0aEQsR0FDQSxtR0FJ
QSxJQUFBeC9CLEdBQUFpRSxFQUFBdjNCLFVBQ0EreUQsRUFBQXovQixFQUFBMC9CLG9CQUtBRixH
QUFBN3lELGVBQUFnekQsSUFDQUMsRUFBQUMsT0FBQTU3QixFQUFBdTdCLEVBQUFLLE9BR0EsUUFB
QS96RCxLQUFBMHpELEdBQ0EsR0FBQUEsRUFBQTd5RCxlQUFBYixJQUlBQSxJQUFBNnpELEVBQUEs
Q0FLQSxHQUFBbHpELEdBQUEreUQsRUFBQTF6RCxHQUNBb3pELEVBQUFsL0IsRUFBQXJ6QixlQUFB
YixFQUdBLElBRkFtekQsRUFBQUMsRUFBQXB6RCxHQUVBOHpELEVBQUFqekQsZUFBQWIsR0FDQTh6
RCxFQUFBOXpELEdBQUFtNEIsRUFBQXgzQixPQUNPLENBS1AsR0FBQXF6RCxHQUFBVixFQUFBenlE
LGVBQUFiLEdBQ0FpMEQsRUFBQSxtQkFBQXR6RCxHQUNBdXpELEVBQ0FELElBQ0FELElBQ0FaLElB
Q0EsSUFBQU0sRUFBQVMsUUFFQSxJQUFBRCxFQUNBUCxFQUFBdnRELEtBQUFwRyxFQUFBVyxHQUNB
dXpCLEVBQUFsMEIsR0FBQVcsTUFFQSxJQUFBeXlELEVBQUEsQ0FDQSxHQUFBQyxHQUFBQyxFQUFB
dHpELEVBR0F3ekQsR0FDQVEsSUFDQSx1QkFBQVgsR0FDQSxnQkFBQUEsR0FDQSxtRkFFQUEsRUFD
QXJ6RCxHQUtBLHVCQUFBcXpELEVBQ0FuL0IsRUFBQWwwQixHQUFBbzBELEVBQUFsZ0MsRUFBQWww
QixHQUFBVyxHQUNhLGdCQUFBMHlELElBQ2JuL0IsRUFBQWwwQixHQUFBcTBELEVBQUFuZ0MsRUFB
QWwwQixHQUFBVyxRQUdBdXpCLEdBQUFsMEIsR0FBQVcsVUFjQSxRQUFBMnpELEdBQUFuOEIsRUFB
QW84QixHQUNBLEdBQUFBLEVBR0EsT0FBQXYwRCxLQUFBdTBELEdBQUEsQ0FDQSxHQUFBNXpELEdB
QUE0ekQsRUFBQXYwRCxFQUNBLElBQUF1MEQsRUFBQTF6RCxlQUFBYixHQUFBLENBSUEsR0FBQXcw
RCxHQUFBeDBELElBQUE4ekQsRUFDQU4sSUFDQWdCLEVBQ0EsME1BSUF4MEQsRUFHQSxJQUFBeTBE
LEdBQUF6MEQsSUFBQW00QixFQUNBcTdCLElBQ0FpQixFQUNBLHVIQUdBejBELEdBRUFtNEIsRUFB
QW40QixHQUFBVyxJQVdBLFFBQUErekQsR0FBQUMsRUFBQUMsR0FDQXBCLEVBQ0FtQixHQUFBQyxH
QUFBLGlCQUFBRCxJQUFBLGlCQUFBQyxHQUNBLDREQUdBLFFBQUExd0QsS0FBQTB3RCxHQUNBQSxF
QUFBL3pELGVBQUFxRCxLQUNBc3ZELE1BQ0EveEQsS0FBQWt6RCxFQUFBendELEdBQ0EseVBBS0FB
LEdBRUF5d0QsRUFBQXp3RCxHQUFBMHdELEVBQUExd0QsR0FHQSxPQUFBeXdELEdBV0EsUUFBQVAs
R0FBQU8sRUFBQUMsR0FDQSxrQkFDQSxHQUFBenpELEdBQUF3ekQsRUFBQTcvQixNQUFBdnNCLEtB
QUFuRyxXQUNBaEIsRUFBQXd6RCxFQUFBOS9CLE1BQUF2c0IsS0FBQW5HLFVBQ0EsVUFBQWpCLEVB
Q0EsTUFBQUMsRUFDTyxVQUFBQSxFQUNQLE1BQUFELEVBRUEsSUFBQXJCLEtBR0EsT0FGQTQwRCxH
QUFBNTBELEVBQUFxQixHQUNBdXpELEVBQUE1MEQsRUFBQXNCLEdBQ0F0QixHQVlBLFFBQUF1MEQs
R0FBQU0sRUFBQUMsR0FDQSxrQkFDQUQsRUFBQTcvQixNQUFBdnNCLEtBQUFuRyxXQUNBd3lELEVB
QUE5L0IsTUFBQXZzQixLQUFBbkcsWUFXQSxRQUFBeXlELEdBQUFsd0QsRUFBQStILEdBQ0EsR0FB
QW9vRCxHQUFBcG9ELEVBQUE0RyxLQUFBM08sRUFpREEsT0FBQW13RCxHQVFBLFFBQUFDLEdBQUFw
d0QsR0FFQSxPQURBcXdELEdBQUFyd0QsRUFBQWl2RCxxQkFDQWwwRCxFQUFBLEVBQW1CQSxFQUFB
czFELEVBQUEzeUQsT0FBa0IzQyxHQUFBLEdBQ3JDLEdBQUF1MUQsR0FBQUQsRUFBQXQxRCxHQUNB
Z04sRUFBQXNvRCxFQUFBdDFELEVBQUEsRUFDQWlGLEdBQUFzd0QsR0FBQUosRUFBQWx3RCxFQUFB
K0gsSUFtRUEsUUFBQXNGLEdBQUEwaEQsR0FJQSxHQUFBdjdCLEdBQUErNkIsRUFBQSxTQUFBcmdE
LEVBQUF0SCxFQUFBMHJCLEdBYUExdUIsS0FBQXFyRCxxQkFBQXZ4RCxRQUNBMHlELEVBQUF4c0Qs
TUFHQUEsS0FBQXNLLFFBQ0F0SyxLQUFBZ0QsVUFDQWhELEtBQUEydUIsS0FBQTlZLEVBQ0E3VixL
QUFBMHVCLFdBQUFFLEVBRUE1dUIsS0FBQXV4QyxNQUFBLElBS0EsSUFBQW9iLEdBQUEzc0QsS0FB
QTRzRCxnQkFBQTVzRCxLQUFBNHNELGtCQUFBLElBWUEzQixHQUNBLGlCQUFBMEIsS0FBQS9oRCxN
QUFBc1gsUUFBQXlxQyxHQUNBLHNEQUNBLzhCLEVBQUE3RixhQUFBLDJCQUdBL3BCLEtBQUF1eEMs
TUFBQW9iLEdBRUEvOEIsR0FBQXYzQixVQUFBLEdBQUF3MEQsR0FDQWo5QixFQUFBdjNCLFVBQUFp
TixZQUFBc3FCLEVBQ0FBLEVBQUF2M0IsVUFBQWd6RCx3QkFFQXlCLEVBQUE1eEQsUUFBQWd3RCxF
QUFBbmdELEtBQUEsS0FBQTZrQixJQUVBczdCLEVBQUF0N0IsRUFBQW05QixHQUNBN0IsRUFBQXQ3
QixFQUFBdTdCLEdBQ0FELEVBQUF0N0IsRUFBQW85QixHQUdBcDlCLEVBQUFxOUIsa0JBQ0FyOUIs
RUFBQS9rQixhQUFBK2tCLEVBQUFxOUIsbUJBZ0JBaEMsRUFDQXI3QixFQUFBdjNCLFVBQUFxeEMs
T0FDQSwwRUFxQkEsUUFBQW9HLEtBQUFpYixHQUNBbjdCLEVBQUF2M0IsVUFBQXkzQyxLQUNBbGdC
LEVBQUF2M0IsVUFBQXkzQyxHQUFBLEtBSUEsT0FBQWxnQixHQXB6QkEsR0FBQWs5QixNQXdCQS9C
LEdBT0FTLE9BQUEsY0FTQVEsUUFBQSxjQVFBeGtDLFVBQUEsY0FRQWtwQixhQUFBLGNBUUFFLGtC
QUFBLGNBY0FxYyxnQkFBQSxxQkFnQkFMLGdCQUFBLHFCQU1BL2EsZ0JBQUEscUJBaUJBbkksT0FB
QSxjQVdBd2pCLG1CQUFBLGNBWUFuYixrQkFBQSxjQXFCQUMsMEJBQUEsY0FzQkF6QyxzQkFBQSxj
QWlCQTRkLG9CQUFBLGNBY0E1YSxtQkFBQSxjQWFBTixxQkFBQSxjQWNBbWIsZ0JBQUEsaUJBWUE3
QixHQUNBeGhDLFlBQUEsU0FBQTZGLEVBQUE3RixHQUNBNkYsRUFBQTdGLGVBRUF5aEMsT0FBQSxT
QUFBNTdCLEVBQUE0N0IsR0FDQSxHQUFBQSxFQUNBLE9BQUFyMEQsR0FBQSxFQUF1QkEsRUFBQXEw
RCxFQUFBMXhELE9BQW1CM0MsSUFDMUMrekQsRUFBQXQ3QixFQUFBNDdCLEVBQUFyMEQsS0FJQXk1
QyxrQkFBQSxTQUFBaGhCLEVBQUFnaEIsR0FJQWhoQixFQUFBZ2hCLGtCQUFBenRDLEtBRUF5c0Is
RUFBQWdoQixrQkFDQUEsSUFHQUYsYUFBQSxTQUFBOWdCLEVBQUE4Z0IsR0FJQTlnQixFQUFBOGdC
LGFBQUF2dEMsS0FFQXlzQixFQUFBOGdCLGFBQ0FBLElBT0F1YyxnQkFBQSxTQUFBcjlCLEVBQUFx
OUIsR0FDQXI5QixFQUFBcTlCLGdCQUNBcjlCLEVBQUFxOUIsZ0JBQUFwQixFQUNBajhCLEVBQUFx
OUIsZ0JBQ0FBLEdBR0FyOUIsRUFBQXE5QixtQkFHQXpsQyxVQUFBLFNBQUFvSSxFQUFBcEksR0FJ
QW9JLEVBQUFwSSxVQUFBcmtCLEtBQXdDeXNCLEVBQUFwSSxjQUV4Q3drQyxRQUFBLFNBQUFwOEIs
RUFBQW84QixHQUNBRCxFQUFBbjhCLEVBQUFvOEIsSUFFQUosU0FBQSxjQXNWQW1CLEdBQ0FoYixr
QkFBQSxXQUNBL3hDLEtBQUFxdEQsYUFBQSxJQUlBTCxHQUNBL2EscUJBQUEsV0FDQWp5QyxLQUFB
cXRELGFBQUEsSUFRQXJDLEdBS0FzQyxhQUFBLFNBQUFDLEVBQUF4c0QsR0FDQWYsS0FBQTB1QixR
QUFBaEUsb0JBQUExcUIsS0FBQXV0RCxFQUFBeHNELElBU0FxcEIsVUFBQSxXQWFBLFFBQUFwcUIs
S0FBQXF0RCxjQUlBUixFQUFBLFlBOEhBLE9BN0hBMXBELEdBQ0EwcEQsRUFBQXgwRCxVQUNBbzJC
LEVBQUFwMkIsVUFDQTJ5RCxHQTBIQXZoRCxFQXgxQkEsR0FBQXRHLEdBQUFyTSxFQUFBLEdBRUEr
ZSxFQUFBL2UsRUFBQSxJQUNBbTBELEVBQUFuMEQsRUFBQSxHQU1BdzBELEVBQUEsUUFrMUJBcDBE
LEdBQUFELFFBQUE2VCxHakg2eVpNLFNBQVU1VCxFQUFRRCxFQUFTSCxHQUVqQyxZa0h2bmJBLFNB
QUE0UixHQUFBekwsR0FFQSxNQURBcUwsR0FBQWlCLGVBQUF0TSxJQUFBUyxFQUFBLE9BQ0FULEVB
dEJBLEdBQUFTLEdBQUE1RyxFQUFBLElBRUF3UixFQUFBeFIsRUFBQSxHQUVBQSxHQUFBLEVBcUJB
SSxHQUFBRCxRQUFBeVIsR2xIMnBiTSxTQUFVeFIsRUFBUUQsRUFBU0gsR0FFakMsWW1IL3JiQUks
R0FBQUQsUUFBQUgsRUFBQSxNbkh1c2JNLFNBQVVJLEVBQVFELEVBQVNILEdBRWpDLFlvSDdyYkEs
SUFBQTZILEdBQUE3SCxFQUFBLEdBQ0EwMkQsRUFBQTEyRCxFQUFBLEtBQ0FxeEMsRUFBQXJ4QyxF
QUFBLElBQ0F3TCxFQUFBeEwsRUFBQSxJQUNBc0osRUFBQXRKLEVBQUEsR0FDQTBSLEVBQUExUixF
QUFBLEtBRUEyMkQsRUFBQTMyRCxFQUFBLEtBQ0EyMEMsRUFBQTMwQyxFQUFBLElBQ0FxekMsRUFB
QXJ6QyxFQUFBLElBQ0FBLEdBQUEsRUFFQTAyRCxHQUFBRSxRQUVBLElBQUFDLElBQ0FGLGNBQ0Ev
akIsT0FBQXZCLEVBQUF1QixPQUNBaUIsdUJBQUF4QyxFQUFBd0MsdUJBQ0FoaEMsUUFBQW5CLEVB
R0FvbEQsd0JBQUF4dEQsRUFBQVUsZUFDQStzRCxvQ0FBQTFqQixFQU1BLHFCQUFBMmpCLGlDQUFB
LG1CQUFBQSxnQ0FBQUosUUFDQUksK0JBQUFKLFFBQ0FockMsZUFDQS9rQiwyQkFBQWdCLEVBQUFo
QiwyQkFDQU8sb0JBQUEsU0FBQTFCLEdBS0EsTUFIQUEsR0FBQUYscUJBQ0FFLEVBQUFpdkMsRUFB
QWp2QyxJQUVBQSxFQUNBbUMsRUFBQVQsb0JBQUExQixHQUVBLE9BSUF1eEQsTUFBQTVsQixFQUNB
NmxCLFdBQUExckQsR0FrREFwTCxHQUFBRCxRQUFBMDJELEdwSGd0Yk0sU0FBVXoyRCxFQUFRRCxF
QUFTSCxHQUVqQyxZcUg3eGJBLFNBQUE0MkQsS0FDQU8sSUFNQUEsR0FBQSxFQUVBQyxFQUFBQyxh
QUFBN3ZDLHlCQUFBRCxHQUtBNnZDLEVBQUExN0MsZUFBQWlCLHVCQUFBMjZDLEdBQ0FGLEVBQUEz
OEMsaUJBQUFxUixvQkFBQWprQixHQUNBdXZELEVBQUEzOEMsaUJBQUF1UixvQkFBQXVyQyxHQU1B
SCxFQUFBMTdDLGVBQUFrQiwwQkFDQTQ2QyxvQkFDQUMsd0JBQ0FDLG9CQUNBQyxvQkFDQUMsMkJB
R0FSLEVBQUFTLGNBQUF6dkIsNEJBQUEwdkIsR0FFQVYsRUFBQVMsY0FBQXZ2Qix5QkFBQXl2QixH
QUVBWCxFQUFBOXZELFlBQUEwTix3QkFBQWdqRCxHQUNBWixFQUFBOXZELFlBQUEwTix3QkFBQWlq
RCxHQUNBYixFQUFBOXZELFlBQUEwTix3QkFBQWtqRCxHQUVBZCxFQUFBZSxlQUFBcndCLDRCQUFB
LFNBQUFDLEdBQ0EsVUFBQXF3QixHQUFBcndCLEtBR0FxdkIsRUFBQWlCLFFBQUEzcUQsMkJBQUFu
RSxHQUNBNnRELEVBQUFpQixRQUFBenFELHVCQUFBMHFELEdBRUFsQixFQUFBN2tELFVBQUFrZixr
QkFBQThtQyxJQW5FQSxHQUFBUCxHQUFBaDRELEVBQUEsS0FDQTQzRCxFQUFBNTNELEVBQUEsS0FD
QTAzRCxFQUFBMTNELEVBQUEsS0FDQXMzRCxFQUFBdDNELEVBQUEsS0FDQXkzRCxFQUFBejNELEVB
QUEsS0FDQWk0RCxFQUFBajRELEVBQUEsS0FDQXU0RCxFQUFBdjRELEVBQUEsS0FDQTgzRCxFQUFB
OTNELEVBQUEsS0FDQTZILEVBQUE3SCxFQUFBLEdBQ0FvNEQsRUFBQXA0RCxFQUFBLEtBQ0F1M0Qs
RUFBQXYzRCxFQUFBLEtBQ0ErM0QsRUFBQS8zRCxFQUFBLEtBQ0FzNEQsRUFBQXQ0RCxFQUFBLEtB
Q0F1bkIsRUFBQXZuQixFQUFBLEtBQ0FvM0QsRUFBQXAzRCxFQUFBLEtBQ0F1SixFQUFBdkosRUFB
QSxLQUNBazRELEVBQUFsNEQsRUFBQSxLQUNBMjNELEVBQUEzM0QsRUFBQSxLQUNBdzNELEVBQUF4
M0QsRUFBQSxLQUVBbTNELEdBQUEsQ0FrREEvMkQsR0FBQUQsU0FDQXkyRCxXckhxMGJNLFNBQVV4
MkQsRUFBUUQsRUFBU0gsR0FFakMsWXNIOTRiQSxJQUFBZzRELElBQ0E3aUQsWUFFQXFqRCxlQUFB
LEVBQ0FDLGVBQUEsRUFDQUMsZ0JBQUEsRUFDQUMsY0FBQSxFQUNBQyxlQUFBLEVBQ0FDLG9CQUFB
LEVBQ0FDLGFBQUEsRUFDQUMsdUJBQUEsRUFFQUMsb0JBQUEsRUFDQUMsZUFBQSxFQUNBQyxnQkFB
QSxFQUNBQyxnQkFBQSxFQUNBQyxhQUFBLEVBQ0FDLGFBQUEsRUFDQUMsaUJBQUEsRUFDQUMsdUJB
QUEsRUFDQUMsbUJBQUEsRUFDQUMsbUJBQUEsRUFDQUMsZUFBQSxFQUNBQyxnQkFBQSxFQUNBQyxn
QkFBQSxFQUNBQyxnQkFBQSxFQUNBQyxZQUFBLEVBQ0FDLGdCQUFBLEVBQ0FDLGdCQUFBLEVBQ0FD
LGdCQUFBLEVBQ0FDLGlCQUFBLEVBRUFDLGNBQUEsRUFDQUMsWUFBQSxFQUNBQyxZQUFBLEVBQ0FD
LGdCQUFBLEVBRUFDLGtCQUFBLEVBQ0FDLGVBQUEsRUFFQUMsd0JBQUEsRUFDQUMsZ0JBQUEsRUFD
QUMsZ0JBQUEsRUFDQUMsZUFBQSxFQUNBQyxnQkFBQSxFQUNBQyxtQkFBQSxFQUNBQyxvQkFBQSxF
QUNBQyxjQUFBLEVBQ0FDLGtCQUFBLEVBQ0FDLFlBQUEsRUFDQUMsZ0JBQUEsRUFDQUMsZ0JBQUEs
RUFDQUMsZ0JBQUEsRUFDQUMsZUFBQSxFQUNBQyxlQUFBLEdBRUFsbUQscUJBQ0FDLG9CQUdBbFYs
R0FBQUQsUUFBQTYzRCxHdEgrNWJNLFNBQVU1M0QsRUFBUUQsRUFBU0gsR0FFakMsWXVILzRiQSxT
QUFBdzdELEdBQUFwdEQsR0FDQSxPQUFBQSxFQUFBaVMsU0FBQWpTLEVBQUFtUyxRQUFBblMsRUFB
QW9TLFlBRUFwUyxFQUFBaVMsU0FBQWpTLEVBQUFtUyxRQVNBLFFBQUFrN0MsR0FBQW4rQyxHQUNB
LE9BQUFBLEdBQ0EsMEJBQ0EsTUFBQXlNLEdBQUEyeEMsZ0JBQ0EseUJBQ0EsTUFBQTN4QyxHQUFB
NHhDLGNBQ0EsNEJBQ0EsTUFBQTV4QyxHQUFBNnhDLG1CQVlBLFFBQUFDLEdBQUF2K0MsRUFBQWxQ
LEdBQ0EscUJBQUFrUCxHQUFBbFAsRUFBQW9tQixVQUFBc25DLEVBVUEsUUFBQUMsR0FBQXorQyxF
QUFBbFAsR0FDQSxPQUFBa1AsR0FDQSxlQUVBLFdBQUEwK0MsRUFBQW55QyxRQUFBemIsRUFBQW9t
QixRQUNBLGtCQUdBLE1BQUFwbUIsR0FBQW9tQixVQUFBc25DLENBQ0EsbUJBQ0EsbUJBQ0EsY0FF
QSxRQUNBLFNBQ0EsVUFhQSxRQUFBRyxHQUFBN3RELEdBQ0EsR0FBQXFRLEdBQUFyUSxFQUFBcVEs
TUFDQSx3QkFBQUEsSUFBQSxRQUFBQSxHQUNBQSxFQUFBbUQsS0FFQSxLQVNBLFFBQUFzNkMsR0FB
QTUrQyxFQUFBblAsRUFBQUMsRUFBQUMsR0FDQSxHQUFBMC9CLEdBQ0FvdUIsQ0FZQSxJQVZBQyxF
QUNBcnVCLEVBQUEwdEIsRUFBQW4rQyxHQUNHKytDLEVBSUFOLEVBQUF6K0MsRUFBQWxQLEtBQ0gy
L0IsRUFBQWhrQixFQUFBNHhDLGdCQUpBRSxFQUFBditDLEVBQUFsUCxLQUNBMi9CLEVBQUFoa0Is
RUFBQTJ4QyxtQkFNQTN0QixFQUNBLFdBR0F1dUIsS0FHQUQsR0FBQXR1QixJQUFBaGtCLEVBQUEy
eEMsaUJBRUszdEIsSUFBQWhrQixFQUFBNHhDLGdCQUNMVSxJQUNBRixFQUFBRSxFQUFBRSxXQUhB
RixFQUFBRyxFQUFBMXlELFVBQUF1RSxHQVFBLElBQUFpQixHQUFBbXRELEVBQUEzeUQsVUFBQWlr
QyxFQUFBNS9CLEVBQUFDLEVBQUFDLEVBRUEsSUFBQTh0RCxFQUdBN3NELEVBQUFzUyxLQUFBdTZD
LE1BQ0csQ0FDSCxHQUFBTyxHQUFBVCxFQUFBN3RELEVBQ0EsUUFBQXN1RCxJQUNBcHRELEVBQUFz
UyxLQUFBODZDLEdBS0EsTUFEQS9nRCxHQUFBViw2QkFBQTNMLEdBQ0FBLEVBUUEsUUFBQXF0RCxH
QUFBci9DLEVBQUFsUCxHQUNBLE9BQUFrUCxHQUNBLHdCQUNBLE1BQUEyK0MsR0FBQTd0RCxFQUNB
LG1CQWdCQSxNQURBQSxHQUFBdXZDLFFBQ0FpZixFQUNBLE1BR0FDLEdBQUEsRUFDQUMsRUFFQSxv
QkFFQSxHQUFBN1ksR0FBQTcxQyxFQUFBd1QsSUFLQSxPQUFBcWlDLEtBQUE2WSxHQUFBRCxFQUNB
LEtBR0E1WSxDQUVBLFNBRUEsYUFZQSxRQUFBOFksR0FBQXovQyxFQUFBbFAsR0FLQSxHQUFBaXVE
LEVBQUEsQ0FDQSx5QkFBQS8rQyxJQUFBOCtDLEdBQUFMLEVBQUF6K0MsRUFBQWxQLEdBQUEsQ0FD
QSxHQUFBNjFDLEdBQUFvWSxFQUFBRSxTQUdBLE9BRkFDLEdBQUFydkQsUUFBQWt2RCxHQUNBQSxF
QUFBLEtBQ0FwWSxFQUVBLFlBR0EsT0FBQTNtQyxHQUNBLGVBR0EsV0FDQSxtQkFpQkEsTUFBQWxQ
LEdBQUF1dkMsUUFBQTZkLEVBQUFwdEQsR0FDQXhLLE9BQUFHLGFBQUFxSyxFQUFBdXZDLE9BRUEs
SUFDQSx5QkFDQSxNQUFBMmUsR0FBQSxLQUFBbHVELEVBQUF3VCxJQUNBLFNBQ0EsYUFVQSxRQUFB
bzdDLEdBQUExL0MsRUFBQW5QLEVBQUFDLEVBQUFDLEdBQ0EsR0FBQTQxQyxFQVVBLE1BUEFBLEVB
REFnWixFQUNBTixFQUFBci9DLEVBQUFsUCxHQUVBMnVELEVBQUF6L0MsRUFBQWxQLElBTUEsV0FH
QSxJQUFBa0IsR0FBQTR0RCxFQUFBcHpELFVBQUFpZ0IsRUFBQW96QyxZQUFBaHZELEVBQUFDLEVB
QUFDLEVBSUEsT0FGQWlCLEdBQUFzUyxLQUFBcWlDLEVBQ0F0b0MsRUFBQVYsNkJBQUEzTCxHQUNB
QSxFQXJWQSxHQUFBcU0sR0FBQTNiLEVBQUEsSUFDQWtJLEVBQUFsSSxFQUFBLEdBQ0F3OEQsRUFB
QXg4RCxFQUFBLEtBQ0F5OEQsRUFBQXo4RCxFQUFBLEtBQ0FrOUQsRUFBQWw5RCxFQUFBLEtBRUFn
OEQsR0FBQSxZQUNBRixFQUFBLElBRUFNLEVBQUFsMEQsRUFBQUosV0FBQSxvQkFBQUMsUUFFQXVS
LEVBQUEsSUFDQXBSLEdBQUFKLFdBQUEsZ0JBQUFFLFlBQ0FzUixFQUFBdFIsU0FBQXNSLGFBTUEs
SUFBQTJqRCxHQUFBLzBELEVBQUFKLFdBQUEsYUFBQUMsVUFBQXVSLElBV0EsV0FDQSxHQUFBOGpE
LEdBQUFyMUQsT0FBQXExRCxLQUNBLHdCQUFBQSxJQUFBLG1CQUFBQSxHQUFBdnFELFNBQUE4NEIs
U0FBQXl4QixFQUFBdnFELFVBQUEsV0FSQXlwRCxFQUFBcDBELEVBQUFKLGFBQUFzMEQsR0FBQTlp
RCxLQUFBLEdBQUFBLEdBQUEsSUFXQXNqRCxFQUFBLEdBQ0FFLEVBQUFsNUQsT0FBQUcsYUFBQTY0
RCxHQUdBN3lDLEdBQ0FvekMsYUFDQW5qRCx5QkFDQXFqRCxRQUFBLGdCQUNBQyxTQUFBLHdCQUVB
cjFDLGNBQUEsOERBRUEwekMsZ0JBQ0EzaEQseUJBQ0FxakQsUUFBQSxtQkFDQUMsU0FBQSwyQkFF
QXIxQyxjQUFBLHFGQUVBeXpDLGtCQUNBMWhELHlCQUNBcWpELFFBQUEscUJBQ0FDLFNBQUEsNkJB
RUFyMUMsY0FBQSx1RkFFQTJ6QyxtQkFDQTVoRCx5QkFDQXFqRCxRQUFBLHNCQUNBQyxTQUFBLDhC
QUVBcjFDLGNBQUEseUZBS0E0MEMsR0FBQSxFQXNGQVIsRUFBQSxLQTZNQXpFLEdBQ0E3dEMsYUFF
QTFNLGNBQUEsU0FBQUMsRUFBQW5QLEVBQUFDLEVBQUFDLEdBQ0EsT0FBQTZ0RCxFQUFBNStDLEVB
QUFuUCxFQUFBQyxFQUFBQyxHQUFBMnVELEVBQUExL0MsRUFBQW5QLEVBQUFDLEVBQUFDLEtBSUFq
TyxHQUFBRCxRQUFBeTNELEd2SDgrYk0sU0FBVXgzRCxFQUFRRCxFQUFTSCxHQUVqQyxZd0hqMWNB
LFNBQUF3OEQsR0FBQXBxQixHQUNBbHBDLEtBQUFxMEQsTUFBQW5yQixFQUNBbHBDLEtBQUFzMEQs
V0FBQXQwRCxLQUFBaWtDLFVBQ0Fqa0MsS0FBQXUwRCxjQUFBLEtBcEJBLEdBQUFweEQsR0FBQXJN
LEVBQUEsR0FFQXNNLEVBQUF0TSxFQUFBLElBRUEwNEIsRUFBQTE0QixFQUFBLEdBbUJBcU0sR0FB
QW13RCxFQUFBajdELFdBQ0EyTCxXQUFBLFdBQ0FoRSxLQUFBcTBELE1BQUEsS0FDQXIwRCxLQUFB
czBELFdBQUEsS0FDQXQwRCxLQUFBdTBELGNBQUEsTUFRQXR3QixRQUFBLFdBQ0EsZUFBQWprQyxN
QUFBcTBELE1BQ0FyMEQsS0FBQXEwRCxNQUFBL29ELE1BRUF0TCxLQUFBcTBELE1BQUE3a0MsTUFT
QTZqQyxRQUFBLFdBQ0EsR0FBQXJ6RCxLQUFBdTBELGNBQ0EsTUFBQXYwRCxNQUFBdTBELGFBR0Es
SUFBQW51QixHQUdBRSxFQUZBa3VCLEVBQUF4MEQsS0FBQXMwRCxXQUNBRyxFQUFBRCxFQUFBMTZE
LE9BRUE0NkQsRUFBQTEwRCxLQUFBaWtDLFVBQ0Ewd0IsRUFBQUQsRUFBQTU2RCxNQUVBLEtBQUFz
c0MsRUFBQSxFQUFtQkEsRUFBQXF1QixHQUNuQkQsRUFBQXB1QixLQUFBc3VCLEVBQUF0dUIsR0FE
d0NBLEtBTXhDLEdBQUF3dUIsR0FBQUgsRUFBQXJ1QixDQUNBLEtBQUFFLEVBQUEsRUFBaUJBLEdB
QUFzdUIsR0FDakJKLEVBQUFDLEVBQUFudUIsS0FBQW91QixFQUFBQyxFQUFBcnVCLEdBRGdDQSxL
QU1oQyxHQUFBdXVCLEdBQUF2dUIsRUFBQSxJQUFBQSxNQUFBcHRDLEVBRUEsT0FEQThHLE1BQUF1
MEQsY0FBQUcsRUFBQWgyRCxNQUFBMG5DLEVBQUF5dUIsR0FDQTcwRCxLQUFBdTBELGlCQUlBbnhE
LEVBQUFpQixhQUFBaXZELEdBRUFwOEQsRUFBQUQsUUFBQXE4RCxHeEhtM2NNLFNBQVVwOEQsRUFB
UUQsRUFBU0gsR0FFakMsWXlIdDdjQSxTQUFBeThELEdBQUF2dUQsRUFBQStQLEVBQUE3UCxFQUFB
QyxHQUNBLE1BQUFKLEdBQUExTixLQUFBMkksS0FBQWdGLEVBQUErUCxFQUFBN1AsRUFBQUMsR0Fq
QkEsR0FBQUosR0FBQWpPLEVBQUEsSUFNQWcrRCxHQUNBcDhDLEtBQUEsS0FhQTNULEdBQUE4Qixh
QUFBMHNELEVBQUF1QixHQUVBNTlELEVBQUFELFFBQUFzOEQsR3pIdTljTSxTQUFVcjhELEVBQVFE
LEVBQVNILEdBRWpDLFkwSDk5Y0EsU0FBQWs5RCxHQUFBaHZELEVBQUErUCxFQUFBN1AsRUFBQUMs
R0FDQSxNQUFBSixHQUFBMU4sS0FBQTJJLEtBQUFnRixFQUFBK1AsRUFBQTdQLEVBQUFDLEdBbEJB
LEdBQUFKLEdBQUFqTyxFQUFBLElBT0FpK0QsR0FDQXI4QyxLQUFBLEtBYUEzVCxHQUFBOEIsYUFB
QW10RCxFQUFBZSxHQUVBNzlELEVBQUFELFFBQUErOEQsRzFIZ2dkTSxTQUFVOThELEVBQVFELEVB
QVNILEdBRWpDLFkySG5nZEEsU0FBQWsrRCxHQUFBeDRELEVBQUEwSSxFQUFBNUosR0FDQSxHQUFB
OEssR0FBQXJCLEVBQUFuRSxVQUFBaWdCLEVBQUFvMEMsT0FBQXo0RCxFQUFBMEksRUFBQTVKLEVB
R0EsT0FGQThLLEdBQUFuRSxLQUFBLFNBQ0F3USxFQUFBViw2QkFBQTNMLEdBQ0FBLEVBV0EsUUFB
QTh1RCxHQUFBOWtDLEdBQ0EsR0FBQXBnQixHQUFBb2dCLEVBQUFwZ0IsVUFBQW9nQixFQUFBcGdC
LFNBQUF0RCxhQUNBLGtCQUFBc0QsR0FBQSxVQUFBQSxHQUFBLFNBQUFvZ0IsRUFBQW51QixLQVNB
LFFBQUFrekQsR0FBQWp3RCxHQUNBLEdBQUFrQixHQUFBNHVELEVBQUFJLEVBQUFsd0QsRUFBQThQ
LEVBQUE5UCxHQWFBOUUsR0FBQVUsZUFBQXUwRCxFQUFBanZELEdBR0EsUUFBQWl2RCxHQUFBanZE
LEdBQ0FvTSxFQUFBZ0MsY0FBQXBPLEdBQ0FvTSxFQUFBaUMsbUJBQUEsR0FHQSxRQUFBNmdELEdB
QUFoNkQsRUFBQTJKLEdBQ0FraUMsRUFBQTdyQyxFQUNBODVELEVBQUFud0QsRUFDQWtpQyxFQUFB
OW5DLFlBQUEsV0FBQTgxRCxHQUdBLFFBQUFJLEtBQ0FwdUIsSUFHQUEsRUFBQXBDLFlBQUEsV0FB
QW93QixHQUNBaHVCLEVBQUEsS0FDQWl1QixFQUFBLE1BR0EsUUFBQUksR0FBQXZ3RCxFQUFBQyxH
QUNBLEdBQUF1d0QsR0FBQTdrQyxFQUFBUyxxQkFBQXBzQixHQUNBa08sR0FBQSxJQUFBak8sRUFB
QWlPLFdBQUFxN0MsRUFBQWtILDBCQUVBLElBQUFELEdBQUF0aUQsRUFDQSxNQUFBbE8sR0FJQSxR
QUFBMHdELEdBQUF2aEQsRUFBQW5QLEdBQ0EsaUJBQUFtUCxFQUNBLE1BQUFuUCxHQUlBLFFBQUEy
d0QsR0FBQXhoRCxFQUFBOVksRUFBQTJKLEdBQ0EsYUFBQW1QLEdBR0FtaEQsSUFDQUQsRUFBQWg2
RCxFQUFBMkosSUFDRyxZQUFBbVAsR0FDSG1oRCxJQW9CQSxRQUFBTSxHQUFBdjZELEVBQUEySixH
QUNBa2lDLEVBQUE3ckMsRUFDQTg1RCxFQUFBbndELEVBQ0FraUMsRUFBQTluQyxZQUFBLG1CQUFB
eTJELEdBT0EsUUFBQUMsS0FDQTV1QixJQUdBQSxFQUFBcEMsWUFBQSxtQkFBQSt3QixHQUVBM3VC
LEVBQUEsS0FDQWl1QixFQUFBLE1BT0EsUUFBQVUsR0FBQTV3RCxHQUNBLFVBQUFBLEVBQUE2SCxj
QUdBeW9ELEVBQUFKLEVBQUFsd0QsSUFDQWl3RCxFQUFBandELEdBSUEsUUFBQTh3RCxHQUFBNWhE
LEVBQUE5WSxFQUFBMkosR0FDQSxhQUFBbVAsR0FjQTJoRCxJQUNBRixFQUFBdjZELEVBQUEySixJ
QUNHLFlBQUFtUCxHQUNIMmhELElBS0EsUUFBQUUsR0FBQTdoRCxFQUFBblAsRUFBQUMsR0FDQSww
QkFBQWtQLEdBQUEsYUFBQUEsR0FBQSxlQUFBQSxFQVdBLE1BQUFvaEQsR0FBQUosRUFBQWx3RCxH
QU9BLFFBQUFneEQsR0FBQTlsQyxHQUlBLEdBQUFwZ0IsR0FBQW9nQixFQUFBcGdCLFFBQ0EsT0FB
QUEsSUFBQSxVQUFBQSxFQUFBdEQsZ0JBQUEsYUFBQTBqQixFQUFBbnVCLE1BQUEsVUFBQW11QixF
QUFBbnVCLE1BR0EsUUFBQWswRCxHQUFBL2hELEVBQUFuUCxFQUFBQyxHQUNBLGdCQUFBa1AsRUFD
QSxNQUFBb2hELEdBQUF2d0QsRUFBQUMsR0FJQSxRQUFBa3hELEdBQUFoaUQsRUFBQW5QLEVBQUFD
LEdBQ0EsZ0JBQUFrUCxHQUFBLGNBQUFBLEVBQ0EsTUFBQW9oRCxHQUFBdndELEVBQUFDLEdBSUEs
UUFBQW14RCxHQUFBNzVELEVBQUFYLEdBRUEsU0FBQVcsRUFBQSxDQUtBLEdBQUErMEMsR0FBQS8w
QyxFQUFBOHpCLGVBQUF6MEIsRUFBQXkwQixhQUVBLElBQUFpaEIsS0FBQStrQixZQUFBLFdBQUF6
NkQsRUFBQW9HLEtBQUEsQ0FLQSxHQUFBcUosR0FBQSxHQUFBelAsRUFBQXlQLEtBQ0F6UCxHQUFB
RyxhQUFBLFdBQUFzUCxHQUNBelAsRUFBQThuQixhQUFBLFFBQUFyWSxLQTlPQSxHQUFBa0gsR0FB
QTFiLEVBQUEsSUFDQTJiLEVBQUEzYixFQUFBLElBQ0FrSSxFQUFBbEksRUFBQSxHQUNBNkgsRUFB
QTdILEVBQUEsR0FDQXNKLEVBQUF0SixFQUFBLEdBQ0FpTyxFQUFBak8sRUFBQSxJQUVBODVCLEVB
QUE5NUIsRUFBQSxJQUNBa2UsRUFBQWxlLEVBQUEsSUFDQW1qQixFQUFBbmpCLEVBQUEsSUFDQTA2
QixFQUFBMTZCLEVBQUEsSUFFQStwQixHQUNBbzBDLFFBQ0Fua0QseUJBQ0FxakQsUUFBQSxXQUNB
QyxTQUFBLG1CQUVBcjFDLGNBQUEsdUdBYUFvb0IsRUFBQSxLQUNBaXVCLEVBQUEsS0FVQW1CLEdB
QUEsQ0FDQXYzRCxHQUFBSixZQUVBMjNELEVBQUF0OEMsRUFBQSxhQUFBbmIsU0FBQXNSLGNBQUF0
UixTQUFBc1IsYUFBQSxHQXFFQSxJQUFBb21ELElBQUEsQ0FDQXgzRCxHQUFBSixZQUlBNDNELEVB
QUF2OEMsRUFBQSw2QkFBQW5iLHFCQUFBc1IsYUFBQSxHQXFJQSxJQUFBbytDLElBQ0EzdEMsYUFF
QTYwQyw0QkFBQSxFQUNBZSx1QkFBQUQsRUFFQXJpRCxjQUFBLFNBQUFDLEVBQUFuUCxFQUFBQyxF
QUFBQyxHQUNBLEdBRUF1eEQsR0FBQUMsRUFGQUMsRUFBQTN4RCxFQUFBdEcsRUFBQVQsb0JBQUEr
RyxHQUFBcEcsTUFvQkEsSUFqQkFxMkQsRUFBQTBCLEdBQ0FMLEVBQ0FHLEVBQUFmLEVBRUFnQixF
QUFBZixFQUVLcGtDLEVBQUFvbEMsR0FDTEosRUFDQUUsRUFBQU4sR0FFQU0sRUFBQVQsRUFDQVUs
RUFBQVgsR0FFS0UsRUFBQVUsS0FDTEYsRUFBQVAsR0FHQU8sRUFBQSxDQUNBLEdBQUFsNkQsR0FB
QWs2RCxFQUFBdGlELEVBQUFuUCxFQUFBQyxFQUNBLElBQUExSSxFQUFBLENBRUEsTUFEQXc0RCxH
QUFBeDRELEVBQUEwSSxFQUFBQyxJQUtBd3hELEdBQ0FBLEVBQUF2aUQsRUFBQXdpRCxFQUFBM3hE
LEdBSUEsWUFBQW1QLEdBQ0FpaUQsRUFBQXB4RCxFQUFBMnhELElBS0ExL0QsR0FBQUQsUUFBQXUz
RCxHM0gwaWRNLFNBQVV0M0QsRUFBUUQsRUFBU0gsR0FFakMsWTRIajFkQSxTQUFBKy9ELEdBQUEv
c0QsRUFBQTFOLEVBQUFpTyxHQUNBLG1CQUFBUCxHQUNBQSxFQUFBMU4sRUFBQXVHLHFCQUdBbTBE
LEVBQUFDLG9CQUFBMzZELEVBQUEwTixFQUFBTyxHQUlBLFFBQUEyc0QsR0FBQWx0RCxFQUFBMU4s
RUFBQWlPLEdBQ0EsbUJBQUFQLEdBQ0FBLEVBQUEsTUFHQWd0RCxFQUFBRyx5QkFBQTc2RCxFQUFB
ME4sRUFBQU8sR0FsQkEsR0FBQXlzRCxHQUFBaGdFLEVBQUEsS0FFQThXLElBb0JBQSxHQUFBRCxX
QUFBLFNBQUFyRyxFQUFBaUQsR0FDQSxVQUFBQSxHQUFBLGlCQUFBQSxHQUFBLENBR0EsR0FBQVQs
R0FBQVMsRUFBQVQsR0FDQSxPQUFBQSxHQUNBK3NELEVBQUEvc0QsRUFBQXhDLEVBQUFpRCxFQUFB
RSxVQUlBbUQsRUFBQWlCLGlCQUFBLFNBQUFILEVBQUFELEdBYUEsR0FBQXlvRCxHQUFBLEtBQ0FD
LEVBQUEsSUFDQSxRQUFBem9ELEdBQUEsaUJBQUFBLEtBQ0F3b0QsRUFBQXhvRCxFQUFBNUUsSUFD
QXF0RCxFQUFBem9ELEVBQUFqRSxPQUdBLElBQUEyc0QsR0FBQSxLQUNBQyxFQUFBLElBTUEsT0FM
QSxRQUFBNW9ELEdBQUEsaUJBQUFBLEtBQ0Eyb0QsRUFBQTNvRCxFQUFBM0UsSUFDQXV0RCxFQUFB
NW9ELEVBQUFoRSxRQUdBeXNELElBQUFFLEdBRUEsaUJBQUFBLElBQUFDLElBQUFGLEdBR0F2cEQs
RUFBQVcsV0FBQSxTQUFBakgsRUFBQWlELEdBQ0EsVUFBQUEsR0FBQSxpQkFBQUEsR0FBQSxDQUdB
LEdBQUFULEdBQUFTLEVBQUFULEdBQ0EsT0FBQUEsR0FDQWt0RCxFQUFBbHRELEVBQUF4QyxFQUFB
aUQsRUFBQUUsVUFJQXZULEVBQUFELFFBQUEyVyxHNUh1MmRNLFNBQVUxVyxFQUFRRCxFQUFTSCxH
QUVqQyxZNkgxNmRBLFNBQUF3Z0UsR0FBQW4vRCxHQUNBLFNBQUFBLEdBQUEsbUJBQUFBLEdBQUEw
K0QsV0FBQSxtQkFBQTErRCxHQUFBNitELFdBVkEsR0FBQXQ1RCxHQUFBNUcsRUFBQSxHQTJDQWdn
RSxHQXpDQWhnRSxFQUFBLElBbURBaWdFLG9CQUFBLFNBQUEzNkQsRUFBQTBOLEVBQUFPLEdBQ0Fp
dEQsRUFBQWp0RCxJQUFBM00sRUFBQSxPQUNBMk0sRUFBQXdzRCxVQUFBL3NELEVBQUExTixJQVlB
NjZELHlCQUFBLFNBQUE3NkQsRUFBQTBOLEVBQUFPLEdBQ0FpdEQsRUFBQWp0RCxJQUFBM00sRUFB
QSxNQUNBLElBQUE2NUQsR0FBQWx0RCxFQUFBMUgsbUJBR0E0MEQsTUFBQTVvQyxLQUFBN2tCLEtB
QUExTixFQUFBdUcscUJBQ0EwSCxFQUFBMnNELFVBQUFsdEQsS0FLQTVTLEdBQUFELFFBQUE2L0Qs
RzdIcThkTSxTQUFVNS9ELEVBQVFELEVBQVNILEdBRWpDLFk4SDVnZUEsSUFBQXMzRCxJQUFBLHFK
QUVBbDNELEdBQUFELFFBQUFtM0QsRzlIdWllTSxTQUFVbDNELEVBQVFELEVBQVNILEdBRWpDLFkr
SHJqZUEsSUFBQTJiLEdBQUEzYixFQUFBLElBQ0E2SCxFQUFBN0gsRUFBQSxHQUNBNmYsRUFBQTdm
LEVBQUEsSUFFQStwQixHQUNBMjJDLFlBQ0EzbUQsaUJBQUEsZUFDQWtPLGNBQUEsK0JBRUEwNEMs
WUFDQTVtRCxpQkFBQSxlQUNBa08sY0FBQSxnQ0FJQXd2QyxHQUNBMXRDLGFBU0ExTSxjQUFBLFNB
QUFDLEVBQUFuUCxFQUFBQyxFQUFBQyxHQUNBLG9CQUFBaVAsSUFBQWxQLEVBQUF3UyxlQUFBeFMs
RUFBQXlTLGFBQ0EsV0FFQSxvQkFBQXZELEdBQUEsaUJBQUFBLEVBRUEsV0FHQSxJQUFBc2pELEVB
Q0EsSUFBQXZ5RCxFQUFBdEcsU0FBQXNHLEVBRUF1eUQsRUFBQXZ5RCxNQUNLLENBRUwsR0FBQWdR
LEdBQUFoUSxFQUFBaVEsYUFFQXNpRCxHQURBdmlELEVBQ0FBLEVBQUFFLGFBQUFGLEVBQUFHLGFB
RUF6VyxPQUlBLEdBQUFyRCxHQUNBRSxDQUNBLG9CQUFBMFksRUFBQSxDQUNBNVksRUFBQXlKLENB
Q0EsSUFBQTB5RCxHQUFBenlELEVBQUF3UyxlQUFBeFMsRUFBQTJTLFNBQ0FuYyxHQUFBaThELEVB
QUFoNUQsRUFBQWhCLDJCQUFBZzZELEdBQUEsU0FHQW44RCxHQUFBLEtBQ0FFLEVBQUF1SixDQUdB
LElBQUF6SixJQUFBRSxFQUVBLFdBR0EsSUFBQXFxQixHQUFBLE1BQUF2cUIsRUFBQWs4RCxFQUFB
LzRELEVBQUFULG9CQUFBMUMsR0FDQW84RCxFQUFBLE1BQUFsOEQsRUFBQWc4RCxFQUFBLzRELEVB
QUFULG9CQUFBeEMsR0FFQTBXLEVBQUF1RSxFQUFBL1YsVUFBQWlnQixFQUFBNDJDLFdBQUFqOEQs
RUFBQTBKLEVBQUFDLEVBQ0FpTixHQUFBblEsS0FBQSxhQUNBbVEsRUFBQTlXLE9BQUF5cUIsRUFD
QTNULEVBQUFzRixjQUFBa2dELENBRUEsSUFBQXZsRCxHQUFBc0UsRUFBQS9WLFVBQUFpZ0IsRUFB
QTIyQyxXQUFBOTdELEVBQUF3SixFQUFBQyxFQU9BLE9BTkFrTixHQUFBcFEsS0FBQSxhQUNBb1Es
RUFBQS9XLE9BQUFzOEQsRUFDQXZsRCxFQUFBcUYsY0FBQXFPLEVBRUF0VCxFQUFBTiwrQkFBQUMs
RUFBQUMsRUFBQTdXLEVBQUFFLElBRUEwVyxFQUFBQyxJQUlBbmIsR0FBQUQsUUFBQXMzRCxHL0hz
a2VNLFNBQVVyM0QsRUFBUUQsRUFBU0gsR0FFakMsWWdJNXBlQSxJQUFBc0gsR0FBQXRILEVBQUEs
SUFFQTJVLEVBQUFyTixFQUFBd0csVUFBQTZHLGtCQUNBQyxFQUFBdE4sRUFBQXdHLFVBQUE4Ryxr
QkFDQUMsRUFBQXZOLEVBQUF3RyxVQUFBK0csa0JBQ0FDLEVBQUF4TixFQUFBd0csVUFBQWdILDJC
QUNBQyxFQUFBek4sRUFBQXdHLFVBQUFpSCw2QkFFQWtqRCxHQUNBemlELGtCQUFBbXNCLE9BQUFw
Z0MsVUFBQWtZLEtBQUF4RixLQUFBLEdBQUEwdEIsUUFBQSxpQkFBQXI2QixFQUFBb1Asb0JBQUEs
UUFDQXZCLFlBSUE0ckQsT0FBQSxFQUNBQyxjQUFBLEVBQ0FDLFVBQUEsRUFDQXhyQixPQUFBLEVB
Q0F5ckIsZ0JBQUF0c0QsRUFDQXVzRCxrQkFBQSxFQUNBQyxJQUFBLEVBRUFDLEdBQUEsRUFDQUMs
TUFBQTFzRCxFQUNBMnNELGFBQUEsRUFHQUMsU0FBQTVzRCxFQUNBK1gsUUFBQS9YLEVBQ0E2c0Qs
WUFBQSxFQUNBQyxZQUFBLEVBQ0FDLFFBQUEsRUFDQUMsVUFBQSxFQUNBNXhDLFFBQUFyYixFQUFB
QyxFQUNBeTJDLEtBQUEsRUFDQXdXLFFBQUEsRUFDQTdqQixVQUFBLEVBQ0E4akIsS0FBQWh0RCxF
QUNBaXRELFFBQUEsRUFDQWh6QyxRQUFBLEVBQ0EwZixnQkFBQSxFQUNBdXpCLFlBQUEsRUFDQUMs
U0FBQXJ0RCxFQUNBc3RELE9BQUEsRUFDQUMsWUFBQSxFQUNBdmdELEtBQUEsRUFDQXdnRCxTQUFB
LEVBQ0FDLFFBQUF6dEQsRUFDQTB0RCxNQUFBMXRELEVBQ0F5eEIsSUFBQSxFQUNBdHFCLFNBQUFu
SCxFQUNBMnRELFNBQUF4dEQsRUFDQXl0RCxVQUFBLEVBQ0FDLFFBQUEsRUFDQXhjLEtBQUEsRUFD
QXljLFdBQUEsRUFDQUMsWUFBQSxFQUNBQyxXQUFBLEVBQ0FDLGVBQUFqdUQsRUFDQWt1RCxXQUFB
LEVBQ0FDLFlBQUEsRUFDQWpnQixRQUFBLEVBQ0FrZ0IsT0FBQSxFQUNBenlDLE9BQUEzYixFQUNB
cXVELEtBQUEsRUFDQUMsS0FBQSxFQUNBQyxTQUFBLEVBQ0FDLFFBQUEsRUFDQUMsVUFBQSxFQUNB
QyxLQUFBLEVBQ0F4aEMsR0FBQSxFQUNBeWhDLFVBQUEsRUFDQUMsVUFBQSxFQUNBN3hDLEdBQUEs
RUFDQTh4QyxVQUFBLEVBQ0FDLFFBQUEsRUFDQUMsS0FBQSxFQUNBdFcsTUFBQSxFQUNBdVcsS0FB
QSxFQUNBM2pCLEtBQUEsRUFDQTRqQixLQUFBanZELEVBQ0FrdkQsSUFBQSxFQUNBQyxTQUFBLEVB
Q0FDLGFBQUEsRUFDQUMsWUFBQSxFQUNBQyxJQUFBLEVBQ0FDLFVBQUEsRUFDQUMsTUFBQSxFQUNB
QyxXQUFBLEVBQ0FoM0QsT0FBQSxFQUNBMmlDLElBQUEsRUFDQXMwQixVQUFBLEVBR0F2aEMsU0FB
QXB1QixFQUFBQyxFQUNBMnZELE1BQUE1dkQsRUFBQUMsRUFDQWpVLEtBQUEsRUFDQTZqRSxNQUFB
LEVBQ0FDLFdBQUE3dkQsRUFDQW16QyxLQUFBbnpDLEVBQ0E4dkQsUUFBQSxFQUNBL1QsUUFBQSxF
QUNBdlMsWUFBQSxFQUNBdW1CLFlBQUEvdkQsRUFDQWd3RCxPQUFBLEVBQ0FDLFFBQUEsRUFDQUMs
UUFBQSxFQUNBQyxXQUFBLEVBQ0FuMEMsU0FBQWhjLEVBQ0Fvd0QsZUFBQSxFQUNBQyxJQUFBLEVB
Q0FDLFNBQUF0d0QsRUFDQXV3RCxTQUFBdndELEVBQ0F3d0QsS0FBQSxFQUNBQyxLQUFBdndELEVB
Q0F3d0QsUUFBQXp3RCxFQUNBMHdELFFBQUEsRUFDQWo0RCxNQUFBLEVBQ0FrNEQsT0FBQTV3RCxF
QUNBNndELFVBQUEsRUFDQUMsU0FBQTl3RCxFQUNBdXVCLFNBQUF4dUIsRUFBQUMsRUFDQTBpQyxN
QUFBLEVBQ0FxdUIsS0FBQTd3RCxFQUNBOHdELE1BQUEsRUFDQTNXLEtBQUFuNkMsRUFDQSt3RCxX
QUFBLEVBQ0FDLElBQUEsRUFDQUMsT0FBQSxFQUNBQyxRQUFBLEVBQ0FDLE9BQUEsRUFDQTMyQixN
QUFBejZCLEVBQ0FzMEIsS0FBQSxFQUNBZ21CLE1BQUEsRUFDQUUsUUFBQSxFQUNBNlcsU0FBQSxF
QUNBMWhFLE9BQUEsRUFDQTRnQyxNQUFBLEVBRUFqNkIsS0FBQSxFQUNBZzdELE9BQUEsRUFDQTN4
RCxNQUFBLEVBQ0E0eEQsTUFBQSxFQUNBQyxNQUFBLEVBQ0FDLEtBQUEsRUFLQUMsTUFBQSxFQUNB
QyxTQUFBLEVBQ0FDLE9BQUEsRUFDQTFxQyxPQUFBLEVBRUF6NkIsU0FBQSxFQUNBb2xFLFNBQUEs
RUFDQUMsT0FBQSxFQUNBQyxNQUFBLEVBT0FDLGVBQUEsRUFDQUMsWUFBQSxFQUVBQyxTQUFBLEVB
RUFuc0MsTUFBQSxFQUdBb3NDLFNBQUEsRUFDQUMsVUFBQXJ5RCxFQUNBc3lELFNBQUEsRUFJQUMs
T0FBQSxFQUNBQyxRQUFBLEVBR0FDLFFBQUEsRUFHQUMsU0FBQSxFQUVBQyxhQUFBLEdBRUFseUQs
bUJBQ0EyckQsY0FBQSxpQkFDQWhqQixVQUFBLFFBQ0FvbEIsUUFBQSxNQUNBQyxVQUFBLGNBRUEv
dEQsb0JBQ0FDLG9CQUNBZixNQUFBLFNBQUF6UCxFQUFBeVAsR0FDQSxTQUFBQSxFQUNBLE1BQUF6
UCxHQUFBMDlCLGdCQUFBLFFBTUEsWUFBQTE5QixFQUFBb0csT0FBQSxJQUFBcEcsRUFBQWt2Qyxh
QUFBLFNBQ0FsdkMsRUFBQThuQixhQUFBLFdBQUFyWSxHQUNPelAsRUFBQXlpRSxXQUFBemlFLEVB
QUF5aUUsU0FBQUMsVUFBQTFpRSxFQUFBdVosY0FBQSt4QixnQkFBQXRyQyxHQVNQQSxFQUFBOG5C
LGFBQUEsV0FBQXJZLEtBTUFwVSxHQUFBRCxRQUFBODNELEdoSTZxZU0sU0FBVTczRCxFQUFRRCxF
QUFTSCxHQUVqQyxZaUk3NGVBLElBQUEwdUIsR0FBQTF1QixFQUFBLElBQ0EwbkUsRUFBQTFuRSxF
QUFBLEtBT0F1NEQsR0FDQS9tQyx1QkFBQWsyQyxFQUFBQyxrQ0FFQXAyQyxzQkFBQTdDLEVBQUFE
LGlDQUdBcnVCLEdBQUFELFFBQUFvNEQsR2pJODVlTSxTQUFVbjRELEVBQVFELEVBQVNILEdBRWpD
LFlrSTk2ZUEsSUFBQTRHLEdBQUE1RyxFQUFBLEdBRUFtWixFQUFBblosRUFBQSxJQUNBa0ksRUFB
QWxJLEVBQUEsR0FFQTRuRSxFQUFBNW5FLEVBQUEsS0FDQTBDLEVBQUExQyxFQUFBLEdBR0F3dUIs
R0FGQXh1QixFQUFBLElBV0F5dUIsaUNBQUEsU0FBQW81QyxFQUFBendELEdBS0EsR0FKQWxQLEVB
QUFKLFdBQUFsQixFQUFBLE1BQ0F3USxHQUFBeFEsRUFBQSxNQUNBLFNBQUFpaEUsRUFBQTN1RCxV
QUFBdFMsRUFBQSxNQUVBLGlCQUFBd1EsR0FBQSxDQUNBLEdBQUEwd0QsR0FBQUYsRUFBQXh3RCxF
QUFBMVUsR0FBQSxFQUNBbWxFLEdBQUE3Z0UsV0FBQTJSLGFBQUFtdkQsRUFBQUQsT0FFQTF1RCxH
QUFBWCxxQkFBQXF2RCxFQUFBendELEtBS0FoWCxHQUFBRCxRQUFBcXVCLEdsSSs3ZU0sU0FBVXB1
QixFQUFRRCxFQUFTSCxHQUVqQyxZbUl4OGVBLFNBQUErbkUsR0FBQTN3RCxHQUNBLEdBQUE0d0Qs
R0FBQTV3RCxFQUFBOEssTUFBQStsRCxFQUNBLE9BQUFELE1BQUEsR0FBQXB5RCxjQWFBLFFBQUFn
eUQsR0FBQXh3RCxFQUFBOHdELEdBQ0EsR0FBQW5qRSxHQUFBb2pFLENBQ0FBLElBQUF4bUUsR0FB
QSxFQUNBLElBQUF1WCxHQUFBNnVELEVBQUEzd0QsR0FFQWt2RCxFQUFBcHRELEdBQUFrdkQsRUFB
QWx2RCxFQUNBLElBQUFvdEQsRUFBQSxDQUNBdmhFLEVBQUF5YyxVQUFBOGtELEVBQUEsR0FBQWx2
RCxFQUFBa3ZELEVBQUEsRUFHQSxLQURBLEdBQUErQixHQUFBL0IsRUFBQSxHQUNBK0IsS0FDQXRq
RSxJQUFBMjJCLGNBR0EzMkIsR0FBQXljLFVBQUFwSyxDQUdBLElBQUFreEQsR0FBQXZqRSxFQUFB
d2pFLHFCQUFBLFNBQ0FELEdBQUF0bEUsU0FDQWtsRSxHQUFBdm1FLEdBQUEsR0FDQTZtRSxFQUFB
RixHQUFBbGtFLFFBQUE4akUsR0FJQSxLQURBLEdBQUFPLEdBQUEzMEQsTUFBQXBQLEtBQUFLLEVB
QUEyakUsWUFDQTNqRSxFQUFBMjJCLFdBQ0EzMkIsRUFBQThjLFlBQUE5YyxFQUFBMjJCLFVBRUEs
T0FBQStzQyxHQWhFQSxHQUFBdmdFLEdBQUFsSSxFQUFBLEdBRUF3b0UsRUFBQXhvRSxFQUFBLEtB
Q0Fvb0UsRUFBQXBvRSxFQUFBLEtBQ0EyQixFQUFBM0IsRUFBQSxHQUtBbW9FLEVBQUFqZ0UsRUFB
QUosVUFBQUUsU0FBQUMsY0FBQSxZQUtBZ2dFLEVBQUEsWUFxREE3bkUsR0FBQUQsUUFBQXluRSxH
bklrL2VNLFNBQVV4bkUsRUFBUUQsRUFBU0gsR0FFakMsWW9JOWlmQSxTQUFBcVMsR0FBQXdqQixH
QUNBLEdBQUE3eUIsR0FBQTZ5QixFQUFBN3lCLE1BZUEsS0FYQThRLE1BQUFzWCxRQUFBeUssSUFB
QSxpQkFBQUEsSUFBQSxtQkFBQUEsS0FBQWwwQixHQUFBLEdBRUEsaUJBQUFxQixJQUFBckIsR0FB
QSxHQUVBLElBQUFxQixLQUFBLElBQUE2eUIsSUFBQWwwQixHQUFBLEdBRUEsbUJBQUFrMEIsR0FB
QTh5QyxRQUFtTGhuRSxHQUFBLEdBS25MazBCLEVBQUFyMEIsZUFDQSxJQUNBLE1BQUFzUyxPQUFB
dlMsVUFBQXFHLE1BQUFySCxLQUFBczFCLEdBQ0ssTUFBQTd6QixJQVFMLE9BREF1ZCxHQUFBekws
TUFBQTlRLEdBQ0FzbUMsRUFBQSxFQUFrQkEsRUFBQXRtQyxFQUFhc21DLElBQy9CL3BCLEVBQUEr
cEIsR0FBQXpULEVBQUF5VCxFQUVBLE9BQUEvcEIsR0FrQkEsUUFBQXFwRCxHQUFBL3lDLEdBQ0Es
UUFFQUEsSUFFQSxnQkFBQUEsSUFBQSxrQkFBQUEsS0FFQSxVQUFBQSxNQUVBLGVBQUFBLEtBR0Es
Z0JBQUFBLEdBQUE1d0IsV0FFQTZPLE1BQUFzWCxRQUFBeUssSUFFQSxVQUFBQSxJQUVBLFFBQUFB
LElBeUJBLFFBQUEyeUMsR0FBQTN5QyxHQUNBLE1BQUEreUMsR0FBQS95QyxHQUVHL2hCLE1BQUFz
WCxRQUFBeUssR0FDSEEsRUFBQWp1QixRQUVBeUssRUFBQXdqQixJQUpBQSxHQXhHQSxHQUFBbDBC
LEdBQUEzQixFQUFBLEVBZ0hBSSxHQUFBRCxRQUFBcW9FLEdwSTJrZk0sU0FBVXBvRSxFQUFRRCxF
QUFTSCxHQUVqQyxZcUk3bmZBLFNBQUFvb0UsR0FBQWx2RCxHQWFBLE1BWkFpdkQsSUFBQXhtRSxH
QUFBLEdBQ0FrbkUsRUFBQXJuRSxlQUFBMFgsS0FDQUEsRUFBQSxLQUVBNHZELEVBQUF0bkUsZUFB
QTBYLEtBRUFpdkQsRUFBQTNtRCxVQURBLE1BQUF0SSxFQUNBLFdBRUEsSUFBQUEsRUFBQSxNQUFB
QSxFQUFBLElBRUE0dkQsRUFBQTV2RCxJQUFBaXZELEVBQUE3aEUsWUFFQXdpRSxFQUFBNXZELEdB
QUEydkQsRUFBQTN2RCxHQUFBLEtBNUVBLEdBQUFoUixHQUFBbEksRUFBQSxHQUVBMkIsRUFBQTNC
LEVBQUEsR0FLQW1vRSxFQUFBamdFLEVBQUFKLFVBQUFFLFNBQUFDLGNBQUEsWUFTQTZnRSxLQUVB
QyxHQUFBLDBDQUNBQyxHQUFBLHdCQUNBQyxHQUFBLGdEQUVBQyxHQUFBLHVEQUVBTCxHQUNBTSxL
QUFBLHFCQUVBMWUsTUFBQSxvQkFDQWEsS0FBQSw0REFDQWdDLFFBQUEsOEJBQ0FlLE9BQUEsMEJB
Q0F5QixJQUFBLHVDQUVBNUIsU0FBQTZhLEVBQ0E1YSxPQUFBNGEsRUFFQTNkLFFBQUE0ZCxFQUNB
emQsU0FBQXlkLEVBQ0F4WixNQUFBd1osRUFDQXJaLE1BQUFxWixFQUNBblosTUFBQW1aLEVBRUF2
WixHQUFBd1osRUFDQXJaLEdBQUFxWixJQU1BLHFLQUNBN2tFLFFBQUEsU0FBQThVLEdBQ0EydkQs
RUFBQTN2RCxHQUFBZ3dELEVBQ0FKLEVBQUE1dkQsSUFBQSxJQTJCQTlZLEVBQUFELFFBQUFpb0Us
R3JJK3NmTSxTQUFVaG9FLEVBQVFELEVBQVNILEdBRWpDLFlzSWx5ZkEsSUFBQTB1QixHQUFBMXVC
LEVBQUEsSUFDQTZILEVBQUE3SCxFQUFBLEdBS0EwbkUsR0FPQUMsa0NBQUEsU0FBQS9zRCxFQUFB
Z1UsR0FDQSxHQUFBN3BCLEdBQUE4QyxFQUFBVCxvQkFBQXdULEVBQ0E4VCxHQUFBQyxlQUFBNXBC
LEVBQUE2cEIsSUFJQXh1QixHQUFBRCxRQUFBdW5FLEd0SW16Zk0sU0FBVXRuRSxFQUFRRCxFQUFT
SCxHQUVqQyxZdUlueGZBLFNBQUFpd0IsR0FBQWpaLEdBQ0EsR0FBQUEsRUFBQSxDQUNBLEdBQUF6
RCxHQUFBeUQsRUFBQTlMLGdCQUFBeUksUUFBQSxJQUNBLElBQUFKLEVBQUEsQ0FDQSxHQUFBNVMs
R0FBQTRTLEVBQUFsSSxTQUNBLElBQUExSyxFQUNBLHlDQUFBQSxFQUFBLE1BSUEsU0EyREEsUUFB
QXlvRSxHQUFBOWpFLEVBQUFrTyxHQUNBQSxJQUlBNjFELEVBQUEvakUsRUFBQWdrRSxRQUNBLE1B
QUE5MUQsRUFBQXJOLFVBQUEsTUFBQXFOLEVBQUErMUQsMEJBQUEzaUUsRUFBQSxNQUFBdEIsRUFB
QWdrRSxLQUFBaGtFLEVBQUE0RixnQkFBQXlJLE9BQUEsK0JBQUFyTyxFQUFBNEYsZ0JBQUF5SSxP
QUFBdEksVUFBQSxRQUVBLE1BQUFtSSxFQUFBKzFELDBCQUNBLE1BQUEvMUQsRUFBQXJOLFVBQUFT
LEVBQUEsTUFDQSxpQkFBQTRNLEdBQUErMUQseUJBQUFDLElBQUFoMkQsR0FBQSsxRCx5QkFBZ08z
aUUsRUFBQSxPQU9oTyxNQUFBNE0sRUFBQTI3QyxPQUFBLGlCQUFBMzdDLEdBQUEyN0MsT0FBOFB2
b0QsRUFBQSxLQUFBcXBCLEVBQUEzcUIsS0FHOVAsUUFBQW1rRSxHQUFBL2pFLEVBQUFxVSxFQUFB
SyxFQUFBN1AsR0FDQSxLQUFBQSxZQUFBbS9ELElBQUEsQ0FRQSxHQUFBQyxHQUFBamtFLEVBQUEy
c0MsbUJBQ0F1M0IsRUFBQUQsRUFBQUUsT0FBQUYsRUFBQUUsTUFBQTVrRSxXQUFBNmtFLEVBQ0F6
ckQsRUFBQXVyRCxFQUFBRCxFQUFBRSxNQUFBRixFQUFBSSxjQUNBamlELEdBQUEvTixFQUFBc0Us
R0FDQTlULEVBQUE4TSxxQkFBQXpMLFFBQUFpUixHQUNBblgsT0FDQXFVLG1CQUNBSyxjQUlBLFFB
QUF5QyxLQUNBLEdBQUFtdEQsR0FBQTlnRSxJQUNBd1MsR0FBQW1CLFlBQUFtdEQsRUFBQXRrRSxL
QUFBc2tFLEVBQUFqd0QsaUJBQUFpd0QsRUFBQTV2RCxVQUdBLFFBQUE2dkQsS0FDQSxHQUFBdmtF
LEdBQUF3RCxJQUNBZ2hFLEdBQUFDLGlCQUFBemtFLEdBR0EsUUFBQTBrRSxLQUNBLEdBQUExa0Us
R0FBQXdELElBQ0FtaEUsR0FBQUYsaUJBQUF6a0UsR0FHQSxRQUFBNGtFLEtBQ0EsR0FBQTVrRSxH
QUFBd0QsSUFDQXFoRSxHQUFBSixpQkFBQXprRSxHQTREQSxRQUFBOGtFLEtBQ0Exd0MsRUFBQUUs
TUFBQTl3QixNQUdBLFFBQUF1aEUsS0FDQSxHQUFBL2tFLEdBQUF3RCxJQUdBeEQsR0FBQWdYLGFB
QUE5VixFQUFBLEtBQ0EsSUFBQTdCLEdBQUEybEUsRUFBQWhsRSxFQUdBLFFBRkFYLEdBQUE2QixF
QUFBLE1BRUFsQixFQUFBNGpFLE1BQ0EsYUFDQSxhQUNBNWpFLEVBQUE4ekIsY0FBQW1LLFdBQUFy
YyxFQUFBYyxpQkFBQSxpQkFBQXJqQixHQUNBLE1BQ0EsYUFDQSxZQUNBVyxFQUFBOHpCLGNBQUFt
SyxZQUVBLFFBQUFyMEIsS0FBQXE3RCxHQUNBQSxFQUFBbnBFLGVBQUE4TixJQUNBNUosRUFBQTh6
QixjQUFBbUssVUFBQTU4QixLQUFBdWdCLEVBQUFjLGlCQUFBOVksRUFBQXE3RCxFQUFBcjdELEdB
QUF2SyxHQUdBLE1BQ0EsY0FDQVcsRUFBQTh6QixjQUFBbUssV0FBQXJjLEVBQUFjLGlCQUFBLG1C
QUFBcmpCLEdBQ0EsTUFDQSxXQUNBVyxFQUFBOHpCLGNBQUFtSyxXQUFBcmMsRUFBQWMsaUJBQUEs
bUJBQUFyakIsR0FBQXVpQixFQUFBYyxpQkFBQSxpQkFBQXJqQixHQUNBLE1BQ0EsWUFDQVcsRUFB
QTh6QixjQUFBbUssV0FBQXJjLEVBQUFjLGlCQUFBLG1CQUFBcmpCLEdBQUF1aUIsRUFBQWMsaUJB
QUEscUJBQUFyakIsR0FDQSxNQUNBLGFBQ0EsYUFDQSxlQUNBVyxFQUFBOHpCLGNBQUFtSyxXQUFB
cmMsRUFBQWMsaUJBQUEsdUJBQUFyakIsS0FLQSxRQUFBNmxFLEtBQ0F0bkMsRUFBQVEsa0JBQUE1
NkIsTUE4Q0EsUUFBQTJoRSxHQUFBaHZELEdBQ0FyYSxFQUFBakIsS0FBQXVxRSxFQUFBanZELEtB
Q0FrdkQsRUFBQXR4RCxLQUFBb0MsSUFBQWpWLEVBQUEsS0FBQWlWLEdBQ0FpdkQsRUFBQWp2RCxJ
QUFBLEdBSUEsUUFBQW12RCxHQUFBaDZDLEVBQUF4ZCxHQUNBLE1BQUF3ZCxHQUFBbkgsUUFBQSxl
QUFBclcsRUFBQW1lLEdBbUJBLFFBQUFtbUMsR0FBQXJrRCxHQUNBLEdBQUFvSSxHQUFBcEksRUFB
QXRJLElBQ0EwL0QsR0FBQWh2RCxHQUNBM1MsS0FBQWdDLGdCQUFBdUksRUFDQXZLLEtBQUFvZ0Us
S0FBQXp0RCxFQUFBakcsY0FDQTFNLEtBQUEraEUsY0FBQSxLQUNBL2hFLEtBQUE5QyxrQkFBQSxL
QUNBOEMsS0FBQWdpRSxlQUFBLEtBQ0FoaUUsS0FBQWlpRSxtQkFBQSxLQUNBamlFLEtBQUF0RCxV
QUFBLEtBQ0FzRCxLQUFBN0IsWUFBQSxLQUNBNkIsS0FBQXdULFlBQUEsRUFDQXhULEtBQUF4QyxP
QUFBLEVBQ0F3QyxLQUFBbXBDLG1CQUFBLEtBQ0FucEMsS0FBQXN3QixjQUFBLEtBQ0F0d0IsS0FB
QWtvQyxpQkFBQSxLQUNBbG9DLEtBQUFsRCxPQUFBLEVBblhBLEdBQUFZLEdBQUE1RyxFQUFBLEdB
Q0FxTSxFQUFBck0sRUFBQSxHQUVBb3JFLEVBQUFwckUsRUFBQSxLQUNBcXJFLEVBQUFyckUsRUFB
QSxLQUNBbVosRUFBQW5aLEVBQUEsSUFDQW9aLEVBQUFwWixFQUFBLElBQ0FzSCxFQUFBdEgsRUFB
QSxJQUNBNGhDLEVBQUE1aEMsRUFBQSxJQUNBMGIsRUFBQTFiLEVBQUEsSUFDQWdjLEVBQUFoYyxF
QUFBLElBQ0FzbkIsRUFBQXRuQixFQUFBLElBQ0F1SCxFQUFBdkgsRUFBQSxJQUNBNkgsRUFBQTdI
LEVBQUEsR0FDQWtxRSxFQUFBbHFFLEVBQUEsS0FDQXVxRSxFQUFBdnFFLEVBQUEsS0FDQXNqQyxF
QUFBdGpDLEVBQUEsSUFDQXFxRSxFQUFBcnFFLEVBQUEsS0FFQXNyRSxHQURBdHJFLEVBQUEsR0FD
QUEsRUFBQSxNQUNBMHBFLEVBQUExcEUsRUFBQSxLQUdBMGlCLEdBREExaUIsRUFBQSxHQUNBQSxF
QUFBLEtBSUE4NUIsR0FIQTk1QixFQUFBLEdBQ0FBLEVBQUEsSUFDQUEsRUFBQSxJQUNBQSxFQUFB
LEtBSUFpRyxHQUhBakcsRUFBQSxJQUNBQSxFQUFBLEdBRUF1SCxHQUNBMlYsRUFBQXhCLEVBQUF3
QixlQUNBd3RELEVBQUE3aUUsRUFBQVQsb0JBQ0EwZ0IsRUFBQVIsRUFBQVEsU0FDQS9LLEVBQUFm
LEVBQUFlLHdCQUdBd3VELEdBQXFCdnBELFFBQUEsRUFBQWtaLFFBQUEsR0FHckJzdUMsRUFBQSxT
QUNBcjJELEdBQ0FoTixTQUFBLEtBQ0FvakUsd0JBQUEsS0FDQWlDLCtCQUFBLE1BSUExQixFQUFB
LEdBa0tBYSxHQUNBcm5ELFNBQUEsUUFDQUssV0FBQSxVQUNBQyxrQkFBQSxpQkFDQWtCLGtCQUFB
LGlCQUNBQyxXQUFBLFVBQ0FDLGFBQUEsWUFDQUMsU0FBQSxRQUNBQyxTQUFBLFFBQ0FNLGNBQUEs
YUFDQUMsa0JBQUEsaUJBQ0FDLGFBQUEsWUFDQU8sU0FBQSxRQUNBQyxRQUFBLE9BQ0FDLFdBQUEs
VUFDQUMsWUFBQSxXQUNBQyxjQUFBLGFBQ0FFLFVBQUEsU0FDQUMsV0FBQSxVQUNBRSxXQUFBLFVB
Q0FDLFdBQUEsVUFDQUUsY0FBQSxhQUNBTSxnQkFBQSxlQUNBQyxXQUFBLFdBc0RBcWtELEdBQ0Fo
aEIsTUFBQSxFQUNBSSxNQUFBLEVBQ0FLLElBQUEsRUFDQUksS0FBQSxFQUNBWSxPQUFBLEVBQ0Fh
LElBQUEsRUFDQUUsS0FBQSxFQUNBN2QsT0FBQSxFQUNBZ2UsUUFBQSxFQUNBSSxNQUFBLEVBQ0FL
LE1BQUEsRUFDQVEsT0FBQSxFQUNBNXBELFFBQUEsRUFDQXUxQixPQUFBLEVBQ0FtMkIsS0FBQSxH
QUlBdWIsR0FDQUMsU0FBQSxFQUNBcGQsS0FBQSxFQUNBbUIsVUFBQSxHQU1BMlosRUFBQWg5RCxH
QUNBdWhELFVBQUEsR0FDQzZkLEdBTURWLEVBQUEsOEJBQ0FELEtBQ0F0cEUsS0FBdUJBLGVBYXZC
b3FFLEVBQUEsQ0F1Q0E5VCxHQUFBN2tDLFlBQUEsb0JBRUE2a0MsRUFBQStULE9BWUE5MEQsZUFB
QSxTQUFBeE0sRUFBQTBNLEVBQUFDLEVBQUFoTCxHQUNBaEQsS0FBQXdULFlBQUFrdkQsSUFDQTFp
RSxLQUFBeEMsT0FBQXdRLEVBQUE0MEQsYUFDQTVpRSxLQUFBN0IsWUFBQTRQLEVBQ0EvTixLQUFB
bXBDLG1CQUFBbjdCLENBRUEsSUFBQTFELEdBQUF0SyxLQUFBZ0MsZ0JBQUFzSSxLQUVBLFFBQUF0
SyxLQUFBb2dFLE1BQ0EsWUFDQSxXQUNBLGFBQ0EsVUFDQSxXQUNBLGFBQ0EsYUFDQSxZQUNBcGdF
LEtBQUFzd0IsZUFDQW1LLFVBQUEsTUFFQXA1QixFQUFBOE0scUJBQUF6TCxRQUFBNitELEVBQUF2
aEUsS0FDQSxNQUNBLGFBQ0FnaEUsRUFBQTFtQyxhQUFBdDZCLEtBQUFzSyxFQUFBeUQsR0FDQXpE
LEVBQUEwMkQsRUFBQTNtQyxhQUFBcjZCLEtBQUFzSyxHQUNBakosRUFBQThNLHFCQUFBekwsUUFB
QTQrRCxFQUFBdGhFLE1BQ0FxQixFQUFBOE0scUJBQUF6TCxRQUFBNitELEVBQUF2aEUsS0FDQSxN
QUNBLGNBQ0FxaEUsRUFBQS9tQyxhQUFBdDZCLEtBQUFzSyxFQUFBeUQsR0FDQXpELEVBQUErMkQs
RUFBQWhuQyxhQUFBcjZCLEtBQUFzSyxFQUNBLE1BQ0EsY0FDQTh2QixFQUFBRSxhQUFBdDZCLEtB
QUFzSyxFQUFBeUQsR0FDQXpELEVBQUE4dkIsRUFBQUMsYUFBQXI2QixLQUFBc0ssR0FDQWpKLEVB
QUE4TSxxQkFBQXpMLFFBQUE2K0QsRUFBQXZoRSxLQUNBLE1BQ0EsZ0JBQ0FtaEUsRUFBQTdtQyxh
QUFBdDZCLEtBQUFzSyxFQUFBeUQsR0FDQXpELEVBQUE2MkQsRUFBQTltQyxhQUFBcjZCLEtBQUFz
SyxHQUNBakosRUFBQThNLHFCQUFBekwsUUFBQTQrRCxFQUFBdGhFLE1BQ0FxQixFQUFBOE0scUJB
QUF6TCxRQUFBNitELEVBQUF2aEUsTUFJQWtnRSxFQUFBbGdFLEtBQUFzSyxFQUlBLElBQUFtRyxH
QUNBb3lELENBQ0EsT0FBQTkwRCxHQUNBMEMsRUFBQTFDLEVBQUFnMEQsY0FDQWMsRUFBQTkwRCxF
QUFBcXlELE1BQ0tweUQsRUFBQW95RCxPQUNMM3ZELEVBQUF6QyxFQUFBK3pELGNBQ0FjLEVBQUE3
MEQsRUFBQW95RCxPQUVBLE1BQUEzdkQsT0FBQVAsRUFBQW1JLEtBQUEsa0JBQUF3cUQsS0FDQXB5
RCxFQUFBUCxFQUFBaEIsTUFFQXVCLElBQUFQLEVBQUFoQixPQUNBLFFBQUFsUCxLQUFBb2dFLEtB
Q0EzdkQsRUFBQVAsRUFBQW1JLElBQ08sU0FBQXJZLEtBQUFvZ0UsT0FDUDN2RCxFQUFBUCxFQUFB
OFYsU0FHQWhtQixLQUFBK2hFLGNBQUF0eEQsQ0FHQSxJQWNBcXlELEVBQ0EsSUFBQXpoRSxFQUFB
bW5DLGlCQUFBLENBQ0EsR0FDQXU2QixHQURBM3RELEVBQUFwSCxFQUFBNnlELGNBRUEsSUFBQXB3
RCxJQUFBUCxFQUFBaEIsS0FDQSxjQUFBbFAsS0FBQW9nRSxLQUFBLENBR0EsR0FBQXhkLEdBQUF4
dEMsRUFBQXJXLGNBQUEsT0FDQWtELEVBQUFqQyxLQUFBZ0MsZ0JBQUFDLElBQ0EyZ0QsR0FBQXRx
QyxVQUFBLElBQUFyVyxFQUFBLE1BQUFBLEVBQUEsSUFDQThnRSxFQUFBbmdCLEVBQUFqcUMsWUFB
QWlxQyxFQUFBeGxELGdCQUVBMmxFLEdBRFN6NEQsRUFBQW1lLEdBQ1RyVCxFQUFBclcsY0FBQWlC
LEtBQUFnQyxnQkFBQUMsS0FBQXFJLEVBQUFtZSxJQUtBclQsRUFBQXJXLGNBQUFpQixLQUFBZ0Ms
Z0JBQUFDLFVBR0E4Z0UsR0FBQTN0RCxFQUFBNHRELGdCQUFBdnlELEVBQUF6USxLQUFBZ0MsZ0JB
QUFDLEtBRUF0RCxHQUFBcEMsYUFBQXlELEtBQUEraUUsR0FDQS9pRSxLQUFBbEQsUUFBQUMsRUFB
QUMsb0JBQ0FnRCxLQUFBN0IsYUFDQXU2QixFQUFBSyxvQkFBQWdxQyxHQUVBL2lFLEtBQUFpakUs
cUJBQUEsS0FBQTM0RCxFQUFBakosRUFDQSxJQUFBNmhFLEdBQUFqekQsRUFBQTh5RCxFQUNBL2lF
LE1BQUFtakUsdUJBQUE5aEUsRUFBQWlKLEVBQUF0SCxFQUFBa2dFLEdBQ0FKLEVBQUFJLE1BQ0ss
Q0FDTCxHQUFBRSxHQUFBcGpFLEtBQUFxakUsb0NBQUFoaUUsRUFBQWlKLEdBQ0FnNUQsRUFBQXRq
RSxLQUFBdWpFLHFCQUFBbGlFLEVBQUFpSixFQUFBdEgsRUFFQTgvRCxJQURBUSxHQUFBZixFQUFB
dmlFLEtBQUFvZ0UsTUFDQWdELEVBQUEsS0FFQUEsRUFBQSxJQUFBRSxFQUFBLEtBQUF0akUsS0FB
QWdDLGdCQUFBQyxLQUFBLElBSUEsT0FBQWpDLEtBQUFvZ0UsTUFDQSxZQUNBLytELEVBQUE4TSxx
QkFBQXpMLFFBQUFxK0QsRUFBQS9nRSxNQUNBc0ssRUFBQTZxQyxXQUNBOXpDLEVBQUE4TSxxQkFB
QXpMLFFBQUF3L0QsRUFBQXNCLGtCQUFBeGpFLEtBRUEsTUFDQSxnQkFDQXFCLEVBQUE4TSxxQkFB
QXpMLFFBQUF3K0QsRUFBQWxoRSxNQUNBc0ssRUFBQTZxQyxXQUNBOXpDLEVBQUE4TSxxQkFBQXpM
LFFBQUF3L0QsRUFBQXNCLGtCQUFBeGpFLEtBRUEsTUFDQSxjQUtBLGFBQ0FzSyxFQUFBNnFDLFdB
Q0E5ekMsRUFBQThNLHFCQUFBekwsUUFBQXcvRCxFQUFBc0Isa0JBQUF4akUsS0FFQSxNQUNBLGNB
Q0FxQixFQUFBOE0scUJBQUF6TCxRQUFBMCtELEVBQUFwaEUsTUFJQSxNQUFBOGlFLElBZ0JBTyxv
Q0FBQSxTQUFBaGlFLEVBQUFpSixHQUNBLEdBQUErTCxHQUFBLElBQUFyVyxLQUFBZ0MsZ0JBQUFD
LElBRUEsUUFBQXdoRSxLQUFBbjVELEdBQ0EsR0FBQUEsRUFBQWhTLGVBQUFtckUsR0FBQSxDQUdB
LEdBQUEzcEMsR0FBQXh2QixFQUFBbTVELEVBQ0EsVUFBQTNwQyxFQUdBLEdBQUFqbUIsRUFBQXZi
LGVBQUFtckUsR0FDQTNwQyxHQUNBeW1DLEVBQUF2Z0UsS0FBQXlqRSxFQUFBM3BDLEVBQUF6NEIs
T0FFTyxDQTFoQlAsVUEyaEJBb2lFLElBQ0EzcEMsSUFLQUEsRUFBQTk1QixLQUFBaWlFLG1CQUFB
OStELEtBQTREbUgsRUFBQTI3QyxRQUU1RG5zQixFQUFBcW9DLEVBQUF1QixzQkFBQTVwQyxFQUFB
OTVCLE1BRUEsSUFBQWtPLEdBQUEsSUFDQSxPQUFBbE8sS0FBQW9nRSxNQUFBMEIsRUFBQTloRSxL
QUFBb2dFLEtBQUE5MUQsR0FDQUwsRUFBQTNSLGVBQUFtckUsS0FDQXYxRCxFQUFBd3FCLEVBQUFP
LCtCQUFBd3FDLEVBQUEzcEMsSUFHQTVyQixFQUFBd3FCLEVBQUFNLHdCQUFBeXFDLEVBQUEzcEMs
R0FFQTVyQixJQUNBbUksR0FBQSxJQUFBbkksSUFPQSxNQUFBN00sR0FBQXNpRSxxQkFDQXR0RCxH
QUdBclcsS0FBQTdCLGNBQ0FrWSxHQUFBLElBQUFxaUIsRUFBQUksdUJBRUF6aUIsR0FBQSxJQUFB
cWlCLEVBQUFDLGtCQUFBMzRCLEtBQUF4QyxVQWFBK2xFLHFCQUFBLFNBQUFsaUUsRUFBQWlKLEVB
QUF0SCxHQUNBLEdBQUFxVCxHQUFBLEdBR0FpQyxFQUFBaE8sRUFBQSsxRCx1QkFDQSxVQUFBL25E
LEVBQ0EsTUFBQUEsRUFBQXNyRCxTQUNBdnRELEVBQUFpQyxFQUFBc3JELFlBRUssQ0FDTCxHQUFB
QyxHQUFBeEIsUUFBQS8zRCxHQUFBck4sVUFBQXFOLEVBQUFyTixTQUFBLEtBQ0E2bUUsRUFBQSxN
QUFBRCxFQUFBLEtBQUF2NUQsRUFBQXJOLFFBQ0EsVUFBQTRtRSxFQUVBeHRELEVBQUFtRCxFQUFB
cXFELE9BSU8sVUFBQUMsRUFBQSxDQUNQLEdBQUFDLEdBQUEvakUsS0FBQWdrRSxjQUFBRixFQUFB
emlFLEVBQUEyQixFQUNBcVQsR0FBQTB0RCxFQUFBaHBFLEtBQUEsS0FHQSxNQUFBeW5FLEdBQUF4
aUUsS0FBQW9nRSxPQUFBLE9BQUEvcEQsRUFBQXljLE9BQUEsR0FXQSxLQUFBemMsRUFFQUEsR0FJ
QThzRCx1QkFBQSxTQUFBOWhFLEVBQUFpSixFQUFBdEgsRUFBQWtnRSxHQUVBLEdBQUE1cUQsR0FB
QWhPLEVBQUErMUQsdUJBQ0EsVUFBQS9uRCxFQUNBLE1BQUFBLEVBQUFzckQsUUFDQTN6RCxFQUFB
SCxVQUFBb3pELEVBQUE1cUQsRUFBQXNyRCxZQUVLLENBQ0wsR0FBQUMsR0FBQXhCLFFBQUEvM0Qs
R0FBQXJOLFVBQUFxTixFQUFBck4sU0FBQSxLQUNBNm1FLEVBQUEsTUFBQUQsRUFBQSxLQUFBdjVE
LEVBQUFyTixRQUVBLFVBQUE0bUUsRUFLQSxLQUFBQSxHQUlBNXpELEVBQUFGLFVBQUFtekQsRUFB
QVcsT0FFTyxVQUFBQyxFQUVQLE9BREFDLEdBQUEvakUsS0FBQWdrRSxjQUFBRixFQUFBemlFLEVB
QUEyQixHQUNBN0wsRUFBQSxFQUF1QkEsRUFBQTRzRSxFQUFBanFFLE9BQXdCM0MsSUFDL0M4WSxF
QUFBUCxXQUFBd3pELEVBQUFhLEVBQUE1c0UsTUFjQXFYLGlCQUFBLFNBQUFDLEVBQUFwTixFQUFB
MkIsR0FDQSxHQUFBMEwsR0FBQTFPLEtBQUFnQyxlQUNBaEMsTUFBQWdDLGdCQUFBeU0sRUFDQXpP
LEtBQUFvdEQsZ0JBQUEvckQsRUFBQXFOLEVBQUFELEVBQUF6TCxJQWFBb3FELGdCQUFBLFNBQUEv
ckQsRUFBQXFOLEVBQUFELEVBQUF6TCxHQUNBLEdBQUFpaEUsR0FBQXYxRCxFQUFBcEUsTUFDQWds
QyxFQUFBdHZDLEtBQUFnQyxnQkFBQXNJLEtBRUEsUUFBQXRLLEtBQUFvZ0UsTUFDQSxZQUNBNkQs
RUFBQWpELEVBQUEzbUMsYUFBQXI2QixLQUFBaWtFLEdBQ0EzMEIsRUFBQTB4QixFQUFBM21DLGFB
QUFyNkIsS0FBQXN2QyxFQUNBLE1BQ0EsY0FDQTIwQixFQUFBNUMsRUFBQWhuQyxhQUFBcjZCLEtB
QUFpa0UsR0FDQTMwQixFQUFBK3hCLEVBQUFobkMsYUFBQXI2QixLQUFBc3ZDLEVBQ0EsTUFDQSxj
QUNBMjBCLEVBQUE3cEMsRUFBQUMsYUFBQXI2QixLQUFBaWtFLEdBQ0EzMEIsRUFBQWxWLEVBQUFD
LGFBQUFyNkIsS0FBQXN2QyxFQUNBLE1BQ0EsZ0JBQ0EyMEIsRUFBQTlDLEVBQUE5bUMsYUFBQXI2
QixLQUFBaWtFLEdBQ0EzMEIsRUFBQTZ4QixFQUFBOW1DLGFBQUFyNkIsS0FBQXN2QyxHQVFBLE9B
SkE0d0IsRUFBQWxnRSxLQUFBc3ZDLEdBQ0F0dkMsS0FBQWlqRSxxQkFBQWdCLEVBQUEzMEIsRUFB
QWp1QyxHQUNBckIsS0FBQWtrRSxtQkFBQUQsRUFBQTMwQixFQUFBanVDLEVBQUEyQixHQUVBaEQs
S0FBQW9nRSxNQUNBLFlBSUFZLEVBQUFtRCxjQUFBbmtFLEtBQ0EsTUFDQSxnQkFDQW1oRSxFQUFB
Z0QsY0FBQW5rRSxLQUNBLE1BQ0EsY0FHQXFCLEVBQUE4TSxxQkFBQXpMLFFBQUFnL0QsRUFBQTFo
RSxRQXFCQWlqRSxxQkFBQSxTQUFBZ0IsRUFBQTMwQixFQUFBanVDLEdBQ0EsR0FBQW9pRSxHQUNB
VyxFQUNBQyxDQUNBLEtBQUFaLElBQUFRLEdBQ0EsSUFBQTMwQixFQUFBaDNDLGVBQUFtckUsSUFB
QVEsRUFBQTNyRSxlQUFBbXJFLElBQUEsTUFBQVEsRUFBQVIsR0FHQSxHQTd1QkEsVUE2dUJBQSxF
QUFBLENBQ0EsR0FBQWEsR0FBQXRrRSxLQUFBaWlFLGtCQUNBLEtBQUFtQyxJQUFBRSxHQUNBQSxF
QUFBaHNFLGVBQUE4ckUsS0FDQUMsUUFDQUEsRUFBQUQsR0FBQSxHQUdBcGtFLE1BQUFpaUUsbUJB
QUEsU0FDT3B1RCxHQUFBdmIsZUFBQW1yRSxHQUNQUSxFQUFBUixJQUlBenZELEVBQUFoVSxLQUFB
eWpFLEdBRU8zQixFQUFBOWhFLEtBQUFvZ0UsS0FBQTZELEdBQ1BoNkQsRUFBQTNSLGVBQUFtckUs
SUFDQS9xQyxFQUFBYyx3QkFBQWdvQyxFQUFBeGhFLE1BQUF5akUsSUFFT3JsRSxFQUFBb08sV0FB
QWkzRCxJQUFBcmxFLEVBQUFrTyxrQkFBQW0zRCxLQUNQL3FDLEVBQUFTLHVCQUFBcW9DLEVBQUF4
aEUsTUFBQXlqRSxFQUdBLEtBQUFBLElBQUFuMEIsR0FBQSxDQUNBLEdBQUFpMUIsR0FBQWoxQixF
QUFBbTBCLEdBQ0FlLEVBdndCQSxVQXV3QkFmLEVBQUF6akUsS0FBQWlpRSxtQkFBQSxNQUFBZ0Ms
SUFBQVIsT0FBQXZxRSxFQUNBLElBQUFvMkMsRUFBQWgzQyxlQUFBbXJFLElBQUFjLElBQUFDLElB
QUEsTUFBQUQsR0FBQSxNQUFBQyxHQUdBLEdBM3dCQSxVQTJ3QkFmLEVBVUEsR0FUQWMsRUFLQUEs
RUFBQXZrRSxLQUFBaWlFLG1CQUFBOStELEtBQXlEb2hFLEdBRXpEdmtFLEtBQUFpaUUsbUJBQUEs
S0FFQXVDLEVBQUEsQ0FFQSxJQUFBSixJQUFBSSxJQUNBQSxFQUFBbHNFLGVBQUE4ckUsSUFBQUcs
S0FBQWpzRSxlQUFBOHJFLEtBQ0FDLFFBQ0FBLEVBQUFELEdBQUEsR0FJQSxLQUFBQSxJQUFBRyxH
QUNBQSxFQUFBanNFLGVBQUE4ckUsSUFBQUksRUFBQUosS0FBQUcsRUFBQUgsS0FDQUMsUUFDQUEs
RUFBQUQsR0FBQUcsRUFBQUgsUUFLQUMsR0FBQUUsTUFFTyxJQUFBMXdELEVBQUF2YixlQUFBbXJF
LEdBQ1BjLEVBQ0FoRSxFQUFBdmdFLEtBQUF5akUsRUFBQWMsRUFBQWxqRSxHQUNTbWpFLEdBQ1R4
d0QsRUFBQWhVLEtBQUF5akUsT0FFTyxJQUFBM0IsRUFBQTloRSxLQUFBb2dFLEtBQUE5d0IsR0FD
UHJsQyxFQUFBM1IsZUFBQW1yRSxJQUNBL3FDLEVBQUFZLHFCQUFBa29DLEVBQUF4aEUsTUFBQXlq
RSxFQUFBYyxPQUVPLElBQUFubUUsRUFBQW9PLFdBQUFpM0QsSUFBQXJsRSxFQUFBa08sa0JBQUFt
M0QsR0FBQSxDQUNQLEdBQUE1bkUsR0FBQTJsRSxFQUFBeGhFLEtBSUEsT0FBQXVrRSxFQUNBN3JD
LEVBQUFRLG9CQUFBcjlCLEVBQUE0bkUsRUFBQWMsR0FFQTdyQyxFQUFBUyx1QkFBQXQ5QixFQUFB
NG5FLElBSUFZLEdBQ0FsQyxFQUFBc0Msa0JBQUFqRCxFQUFBeGhFLE1BQUFxa0UsRUFBQXJrRSxP
QWFBa2tFLG1CQUFBLFNBQUFELEVBQUEzMEIsRUFBQWp1QyxFQUFBMkIsR0FDQSxHQUFBMGhFLEdB
QUFyQyxRQUFBNEIsR0FBQWhuRSxVQUFBZ25FLEVBQUFobkUsU0FBQSxLQUNBMG5FLEVBQUF0QyxR
QUFBL3lCLEdBQUFyeUMsVUFBQXF5QyxFQUFBcnlDLFNBQUEsS0FFQTJuRSxFQUFBWCxFQUFBNUQs
eUJBQUE0RCxFQUFBNUQsd0JBQUF1RCxPQUNBaUIsRUFBQXYxQixFQUFBK3dCLHlCQUFBL3dCLEVB
QUErd0Isd0JBQUF1RCxPQUdBa0IsRUFBQSxNQUFBSixFQUFBLEtBQUFULEVBQUFobkUsU0FDQThu
RSxFQUFBLE1BQUFKLEVBQUEsS0FBQXIxQixFQUFBcnlDLFNBSUErbkUsRUFBQSxNQUFBTixHQUFB
LE1BQUFFLEVBQ0FLLEVBQUEsTUFBQU4sR0FBQSxNQUFBRSxDQUNBLE9BQUFDLEdBQUEsTUFBQUMs
RUFDQS9rRSxLQUFBa2xFLGVBQUEsS0FBQTdqRSxFQUFBMkIsR0FDS2dpRSxJQUFBQyxHQUNMamxF
LEtBQUFtbEUsa0JBQUEsSUFNQSxNQUFBUixFQUNBRCxJQUFBQyxHQUNBM2tFLEtBQUFtbEUsa0JB
QUEsR0FBQVIsR0FLSyxNQUFBRSxFQUNMRCxJQUFBQyxHQUNBN2tFLEtBQUFvbEUsYUFBQSxHQUFB
UCxHQUtLLE1BQUFFLEdBS0wva0UsS0FBQWtsRSxlQUFBSCxFQUFBMWpFLEVBQUEyQixJQUlBb0ws
WUFBQSxXQUNBLE1BQUFvekQsR0FBQXhoRSxPQVNBcU8saUJBQUEsU0FBQUMsR0FDQSxPQUFBdE8s
S0FBQW9nRSxNQUNBLFlBQ0EsV0FDQSxhQUNBLFVBQ0EsV0FDQSxhQUNBLGFBQ0EsWUFDQSxHQUFB
M2xDLEdBQUF6NkIsS0FBQXN3QixjQUFBbUssU0FDQSxJQUFBQSxFQUNBLE9BQUF0akMsR0FBQSxF
QUF5QkEsRUFBQXNqQyxFQUFBM2dDLE9BQXNCM0MsSUFDL0NzakMsRUFBQXRqQyxHQUFBc2UsUUFH
QSxNQUNBLGFBQ0EsZUFDQW1iLEVBQUFRLGFBQUFweEIsS0FDQSxNQUNBLFlBQ0EsV0FDQSxXQU9B
dEMsRUFBQSxLQUFBc0MsS0FBQW9nRSxNQUlBcGdFLEtBQUFxbEUsZ0JBQUEvMkQsR0FDQTNQLEVB
QUEvQixZQUFBb0QsTUFDQXdTLEVBQUEwQixtQkFBQWxVLE1BQ0FBLEtBQUF3VCxZQUFBLEVBQ0F4
VCxLQUFBeEMsT0FBQSxFQUNBd0MsS0FBQXN3QixjQUFBLE1BT0EzdEIsa0JBQUEsV0FDQSxNQUFB
NitELEdBQUF4aEUsUUFJQW1ELEVBQUF5ckQsRUFBQXYyRCxVQUFBdTJELEVBQUErVCxNQUFBUCxF
QUFBTyxPQUVBenJFLEVBQUFELFFBQUEyM0QsR3ZJeTFmTSxTQUFVMTNELEVBQVFELEVBQVNILEdB
RWpDLFl3SS96aEJBLElBQUE2SCxHQUFBN0gsRUFBQSxHQUVBNDdCLEVBQUE1N0IsRUFBQSxJQUVB
b3JFLEdBQ0FzQixrQkFBQSxXQUNBOXdDLEVBQUEvekIsRUFBQVQsb0JBQUE4QixRQUlBOUksR0FB
QUQsUUFBQWlyRSxHeElnMWhCTSxTQUFVaHJFLEVBQVFELEVBQVNILEdBRWpDLFl5STUxaEJBLElB
QUFtaEMsR0FBQW5oQyxFQUFBLElBQ0FrSSxFQUFBbEksRUFBQSxHQUlBd3VFLEdBSEF4dUUsRUFB
QSxHQUVBQSxFQUFBLEtBQ0FBLEVBQUEsTUFDQXl1RSxFQUFBenVFLEVBQUEsS0FDQTB1RSxFQUFB
MXVFLEVBQUEsS0FHQTJ1RSxHQUZBM3VFLEVBQUEsR0FFQTB1RSxFQUFBLFNBQUFwQixHQUNBLE1B
QUFtQixHQUFBbkIsTUFHQXNCLEdBQUEsRUFDQUMsRUFBQSxVQUNBLElBQUEzbUUsRUFBQUosVUFB
QSxDQUNBLEdBQUFnbkUsR0FBQTltRSxTQUFBQyxjQUFBLE9BQUFrbkQsS0FDQSxLQUVBMmYsRUFB
QXB1QyxLQUFBLEdBQ0csTUFBQTErQixHQUNINHNFLEdBQUEsTUFHQXhzRSxLQUFBNEYsU0FBQTR3
QixnQkFBQXUyQixNQUFBNGYsV0FDQUYsRUFBQSxjQU1BLEdBa0ZBeEQsSUFjQXVCLHNCQUFBLFNB
QUFvQyxFQUFBMXBFLEdBQ0EsR0FBQTJwRSxHQUFBLEVBQ0EsUUFBQTNCLEtBQUEwQixHQUNBLEdB
QUFBLEVBQUF4dEUsZUFBQThyRSxHQUFBLENBR0EsR0FBQTRCLEdBQUEsSUFBQTVCLEVBQUF6akQs
UUFBQSxNQUNBc2xELEVBQUFILEVBQUExQixFQU1BLE9BQUE2QixJQUNBRixHQUFBTixFQUFBckIs
R0FBQSxJQUNBMkIsR0FBQVQsRUFBQWxCLEVBQUE2QixFQUFBN3BFLEVBQUE0cEUsR0FBQSxLQUdB
LE1BQUFELElBQUEsTUFXQXRCLGtCQUFBLFNBQUE1b0UsRUFBQWlxRSxFQUFBMXBFLEdBU0EsR0FB
QTZwRCxHQUFBcHFELEVBQUFvcUQsS0FDQSxRQUFBbWUsS0FBQTBCLEdBQ0EsR0FBQUEsRUFBQXh0
RSxlQUFBOHJFLEdBQUEsQ0FHQSxHQUFBNEIsR0FBQSxJQUFBNUIsRUFBQXpqRCxRQUFBLE1BTUFz
bEQsRUFBQVgsRUFBQWxCLEVBQUEwQixFQUFBMUIsR0FBQWhvRSxFQUFBNHBFLEVBSUEsSUFIQSxV
QUFBNUIsR0FBQSxhQUFBQSxJQUNBQSxFQUFBdUIsR0FFQUssRUFDQS9mLEVBQUFpZ0IsWUFBQTlC
LEVBQUE2QixPQUNPLElBQUFBLEVBQ1BoZ0IsRUFBQW1lLEdBQUE2QixNQUNPLENBQ1AsR0FBQUUs
R0FBQVQsR0FBQXp0QyxFQUFBdEMsNEJBQUF5dUMsRUFDQSxJQUFBK0IsRUFHQSxPQUFBQyxLQUFB
RCxHQUNBbGdCLEVBQUFtZ0IsR0FBQSxPQUdBbmdCLEdBQUFtZSxHQUFBLE1BT0FsdEUsR0FBQUQs
UUFBQWtyRSxHekk2MmhCTSxTQUFVanJFLEVBQVFELEVBQVNILEdBRWpDLFkwSWxpaUJBLFNBQUF1
dkUsR0FBQXZ0RCxHQUNBLE1BQUF3dEQsR0FBQXh0RCxFQUFBeGYsUUFBQWl0RSxFQUFBLFFBdEJB
LEdBQUFELEdBQUF4dkUsRUFBQSxLQUVBeXZFLEVBQUEsT0F1QkFydkUsR0FBQUQsUUFBQW92RSxH
MUl5a2lCTSxTQUFVbnZFLEVBQVFELEVBQVNILEdBRWpDLFkySXpsaUJBLFNBQUF3dkUsR0FBQXh0
RCxHQUNBLE1BQUFBLEdBQUF4ZixRQUFBa3RFLEVBQUEsU0FBQUMsRUFBQUMsR0FDQSxNQUFBQSxH
QUFBM3pDLGdCQWJBLEdBQUF5ekMsR0FBQSxPQWlCQXR2RSxHQUFBRCxRQUFBcXZFLEczSXNuaUJN
LFNBQVVwdkUsRUFBUUQsRUFBU0gsR0FFakMsWTRJMW5pQkEsU0FBQXd1RSxHQUFBN3RFLEVBQUE2
VCxFQUFBbFAsRUFBQTRwRSxHQVlBLEdBREEsTUFBQTE2RCxHQUFBLGtCQUFBQSxJQUFBLEtBQUFB
LEVBRUEsUUFHQSxJQUFBcTdELEdBQUFwdUMsTUFBQWp0QixFQUNBLElBQUEwNkQsR0FBQVcsR0FB
QSxJQUFBcjdELEdBQUEwbkIsRUFBQTE2QixlQUFBYixJQUFBdTdCLEVBQUF2N0IsR0FDQSxTQUFB
NlQsQ0FHQSxxQkFBQUEsR0FBQSxDQXVCQUEsSUFBQWtwQyxPQUVBLE1BQUFscEMsR0FBQSxLQTlE
QSxHQUFBMnNCLEdBQUFuaEMsRUFBQSxJQUdBazhCLEdBRkFsOEIsRUFBQSxHQUVBbWhDLEVBQUFq
RixpQkE4REE5N0IsR0FBQUQsUUFBQXF1RSxHNUkycGlCTSxTQUFVcHVFLEVBQVFELEVBQVNILEdB
RWpDLFk2SXpzaUJBLFNBQUF5dUUsR0FBQXpzRCxHQUNBLE1BQUE4dEQsR0FBQTl0RCxHQUFBeGYs
UUFBQWl0RSxFQUFBLFFBckJBLEdBQUFLLEdBQUE5dkUsRUFBQSxLQUVBeXZFLEVBQUEsTUFzQkFy
dkUsR0FBQUQsUUFBQXN1RSxHN0krdWlCTSxTQUFVcnVFLEVBQVFELEVBQVNILEdBRWpDLFk4STN2
aUJBLFNBQUE4dkUsR0FBQTl0RCxHQUNBLE1BQUFBLEdBQUF4ZixRQUFBdXRFLEVBQUEsT0FBQW42
RCxjQWZBLEdBQUFtNkQsR0FBQSxVQWtCQTN2RSxHQUFBRCxRQUFBMnZFLEc5STJ4aUJNLFNBQVUx
dkUsRUFBUUQsRUFBU0gsR0FFakMsWStJMXlpQkEsU0FBQTB1RSxHQUFBemtFLEdBQ0EsR0FBQSts
RSxLQUNBLGlCQUFBaHVELEdBSUEsTUFIQWd1RCxHQUFBeHVFLGVBQUF3Z0IsS0FDQWd1RCxFQUFB
aHVELEdBQUEvWCxFQUFBMUosS0FBQTJJLEtBQUE4WSxJQUVBZ3VELEVBQUFodUQsSUFJQTVoQixF
QUFBRCxRQUFBdXVFLEcvSWkwaUJNLFNBQVV0dUUsRUFBUUQsRUFBU0gsR0FFakMsWWdKMzBpQkEs
U0FBQTBoQyxHQUFBbHRCLEdBQ0EsVUFBQWtPLEVBQUFsTyxHQUFBLElBVEEsR0FBQWtPLEdBQUEx
aUIsRUFBQSxHQVlBSSxHQUFBRCxRQUFBdWhDLEdoSm8yaUJNLFNBQVV0aEMsRUFBUUQsRUFBU0gs
R0FFakMsWWlKaDNpQkEsU0FBQWl3RSxHQUFBLzBELEdBQ0FRLEVBQUFnQyxjQUFBeEMsR0FDQVEs
RUFBQWlDLG1CQUFBLEdBSkEsR0FBQWpDLEdBQUExYixFQUFBLElBT0FpakIsR0FLQXlFLGVBQUEs
U0FBQXBLLEVBQUFuUCxFQUFBQyxFQUFBQyxHQUVBNGhFLEVBREF2MEQsRUFBQTJCLGNBQUFDLEVB
QUFuUCxFQUFBQyxFQUFBQyxLQUtBak8sR0FBQUQsUUFBQThpQixHakptNGlCTSxTQUFVN2lCLEVB
QVFELEVBQVNILEdBRWpDLFlrSjk0aUJBLFNBQUFrd0UsR0FBQUMsRUFBQW5tRCxHQUNBLEdBQUEy
VSxLQVFBLE9BTkFBLEdBQUF3eEMsRUFBQXY2RCxlQUFBb1UsRUFBQXBVLGNBQ0Erb0IsRUFBQSxT
QUFBd3hDLEdBQUEsU0FBQW5tRCxFQUNBMlUsRUFBQSxNQUFBd3hDLEdBQUEsTUFBQW5tRCxFQUNB
MlUsRUFBQSxLQUFBd3hDLEdBQUEsS0FBQW5tRCxFQUNBMlUsRUFBQSxJQUFBd3hDLEdBQUEsSUFB
QW5tRCxFQUFBcFUsY0FFQStvQixFQW1EQSxRQUFBemIsR0FBQThHLEdBQ0EsR0FBQW9tRCxFQUFB
cG1ELEdBQ0EsTUFBQW9tRCxHQUFBcG1ELEVBQ0csS0FBQXFtRCxFQUFBcm1ELEdBQ0gsTUFBQUEs
RUFHQSxJQUFBc21ELEdBQUFELEVBQUFybUQsRUFFQSxRQUFBbW1ELEtBQUFHLEdBQ0EsR0FBQUEs
RUFBQTl1RSxlQUFBMnVFLFFBQUFoaEIsR0FDQSxNQUFBaWhCLEdBQUFwbUQsR0FBQXNtRCxFQUFB
SCxFQUlBLFVBcEZBLEdBQUFqb0UsR0FBQWxJLEVBQUEsR0F3QkFxd0UsR0FDQUUsYUFBQUwsRUFB
QSw0QkFDQU0sbUJBQUFOLEVBQUEsa0NBQ0FPLGVBQUFQLEVBQUEsOEJBQ0FRLGNBQUFSLEVBQUEs
K0JBTUFFLEtBS0FqaEIsSUFLQWpuRCxHQUFBSixZQUNBcW5ELEVBQUFubkQsU0FBQUMsY0FBQSxP
QUFBa25ELE1BTUEsa0JBQUFwbkQsZ0JBQ0Fzb0UsR0FBQUUsYUFBQUksZ0JBQ0FOLEdBQUFHLG1C
QUFBRyxnQkFDQU4sR0FBQUksZUFBQUUsV0FJQSxtQkFBQTVvRSxlQUNBc29FLEdBQUFLLGNBQUFF
LFlBNEJBeHdFLEVBQUFELFFBQUEraUIsR2xKdzZpQk0sU0FBVTlpQixFQUFRRCxFQUFTSCxHQUVq
QyxZbUovK2lCQSxTQUFBNndFLEtBQ0EzbkUsS0FBQXdULGFBRUF3dEQsRUFBQW1ELGNBQUFua0Us
TUFJQSxRQUFBNG5FLEdBQUF0OUQsR0FFQSxNQURBLGFBQUFBLEVBQUFySSxNQUFBLFVBQUFxSSxF
QUFBckksS0FDQSxNQUFBcUksRUFBQXdjLFFBQUEsTUFBQXhjLEVBQUFnQixNQXNNQSxRQUFBNHVC
LEdBQUE5ekIsR0FDQSxHQUFBa0UsR0FBQXRLLEtBQUFnQyxnQkFBQXNJLE1BRUE1RSxFQUFBa2lC
LEVBQUFLLGdCQUFBM2QsRUFBQWxFLEVBS0FoRyxHQUFBMkMsS0FBQTRrRSxFQUFBM25FLEtBRUEs
SUFBQXZJLEdBQUE2UyxFQUFBN1MsSUFDQSxjQUFBNlMsRUFBQXJJLE1BQUEsTUFBQXhLLEVBQUEs
Q0FJQSxJQUhBLEdBQUFvd0UsR0FBQWxwRSxFQUFBVCxvQkFBQThCLE1BQ0E4bkUsRUFBQUQsRUFF
QUMsRUFBQWhxRSxZQUNBZ3FFLElBQUFocUUsVUFXQSxRQUZBaXFFLEdBQUFELEVBQUFFLGlCQUFB
LGNBQUFqM0IsS0FBQUMsVUFBQSxHQUFBdjVDLEdBQUEsbUJBRUFOLEVBQUEsRUFBbUJBLEVBQUE0
d0UsRUFBQWp1RSxPQUFrQjNDLElBQUEsQ0FDckMsR0FBQTh3RSxHQUFBRixFQUFBNXdFLEVBQ0Es
SUFBQTh3RSxJQUFBSixHQUFBSSxFQUFBbHJCLE9BQUE4cUIsRUFBQTlxQixLQUFBLENBT0EsR0FB
QW1yQixHQUFBdnBFLEVBQUFWLG9CQUFBZ3FFLEVBQ0FDLElBQUF4cUUsRUFBQSxNQUlBMEMsRUFB
QTJDLEtBQUE0a0UsRUFBQU8sS0FJQSxNQUFBeGlFLEdBOVFBLEdBQUFoSSxHQUFBNUcsRUFBQSxH
QUNBcU0sRUFBQXJNLEVBQUEsR0FFQTRoQyxFQUFBNWhDLEVBQUEsSUFDQTh3QixFQUFBOXdCLEVB
QUEsSUFDQTZILEVBQUE3SCxFQUFBLEdBQ0FzSixFQUFBdEosRUFBQSxHQXdDQWtxRSxHQXRDQWxx
RSxFQUFBLEdBQ0FBLEVBQUEsSUFzQ0F1akMsYUFBQSxTQUFBNzlCLEVBQUE4TixHQUNBLEdBQUFn
QixHQUFBc2MsRUFBQUcsU0FBQXpkLEdBQ0F3YyxFQUFBYyxFQUFBSSxXQUFBMWQsRUFxQkEsT0Fu
QkFuSCxJQUdBbEIsU0FBQS9JLEdBR0ErbUMsU0FBQS9tQyxHQUdBNHRDLFFBQUE1dEMsR0FDQTho
RSxRQUFBOWhFLElBQ0tvUixHQUNMNjlELG1CQUFBanZFLEdBQ0FzaEMsaUJBQUF0aEMsR0FDQW9T
LE1BQUEsTUFBQUEsSUFBQTlPLEVBQUE4ekIsY0FBQWlLLGFBQ0F6VCxRQUFBLE1BQUFBLElBQUF0
cUIsRUFBQTh6QixjQUFBODNDLGVBQ0F4aEQsU0FBQXBxQixFQUFBOHpCLGNBQUExSixZQU1BMFQs
YUFBQSxTQUFBOTlCLEVBQUE4TixHQUlBLEdBb0JBa3dCLEdBQUFsd0IsRUFBQWt3QixZQUNBaCtC
LEdBQUE4ekIsZUFDQTgzQyxlQUFBLE1BQUE5OUQsRUFBQXdjLFFBQUF4YyxFQUFBd2MsUUFBQXhj
LEVBQUE2OUQsZUFDQTV0QyxhQUFBLE1BQUFqd0IsRUFBQWdCLE1BQUFoQixFQUFBZ0IsTUFBQWt2
QixFQUNBQyxVQUFBLEtBQ0E3VCxTQUFBc1QsRUFBQW52QixLQUFBdk8sR0FDQTg1RCxXQUFBc1Is
RUFBQXQ5RCxLQUlBNjVELGNBQUEsU0FBQTNuRSxHQUNBLEdBQUE4TixHQUFBOU4sRUFBQXdGLGdC
QUFBc0ksTUFpQkF3YyxFQUFBeGMsRUFBQXdjLE9BQ0EsT0FBQUEsR0FDQTRSLEVBQUFRLG9CQUFB
djZCLEVBQUFULG9CQUFBMUIsR0FBQSxVQUFBc3FCLElBQUEsRUFHQSxJQUFBanJCLEdBQUE4QyxF
QUFBVCxvQkFBQTFCLEdBQ0E4TyxFQUFBc2MsRUFBQUcsU0FBQXpkLEVBQ0EsVUFBQWdCLEVBQ0Es
T0FBQUEsR0FBQSxLQUFBelAsRUFBQXlQLE1BQ0F6UCxFQUFBeVAsTUFBQSxRQUVPLGVBQUFoQixF
QUFBckksS0FBQSxDQUVQLEdBQUFvbUUsR0FBQUMsV0FBQXpzRSxFQUFBeVAsTUFBQSxRQUlBQSxH
QUFBKzhELEdBRUEvOEQsR0FBQSs4RCxHQUFBeHNFLEVBQUF5UCxZQUdBelAsRUFBQXlQLE1BQUEs
R0FBQUEsT0FFT3pQLEdBQUF5UCxRQUFBLEdBQUFBLElBR1B6UCxFQUFBeVAsTUFBQSxHQUFBQSxP
QUdBLE9BQUFoQixFQUFBZ0IsT0FBQSxNQUFBaEIsRUFBQWt3QixjQVNBMytCLEVBQUEyK0IsZUFB
QSxHQUFBbHdCLEVBQUFrd0IsZUFDQTMrQixFQUFBMitCLGFBQUEsR0FBQWx3QixFQUFBa3dCLGNB
R0EsTUFBQWx3QixFQUFBd2MsU0FBQSxNQUFBeGMsRUFBQTY5RCxpQkFDQXRzRSxFQUFBc3NFLGlC
QUFBNzlELEVBQUE2OUQsaUJBS0FsSCxpQkFBQSxTQUFBemtFLEdBQ0EsR0FBQThOLEdBQUE5TixF
QUFBd0YsZ0JBQUFzSSxNQUlBek8sRUFBQThDLEVBQUFULG9CQUFBMUIsRUFRQSxRQUFBOE4sRUFB
QXJJLE1BQ0EsYUFDQSxZQUNBLEtBQ0EsYUFDQSxXQUNBLGVBQ0EscUJBQ0EsWUFDQSxXQUNBLFdB
R0FwRyxFQUFBeVAsTUFBQSxHQUNBelAsRUFBQXlQLE1BQUF6UCxFQUFBMitCLFlBQ0EsTUFDQSxT
QUNBMytCLEVBQUF5UCxNQUFBelAsRUFBQXlQLE1BU0EsR0FBQTdULEdBQUFvRSxFQUFBcEUsSUFD
QSxNQUFBQSxJQUNBb0UsRUFBQXBFLEtBQUEsSUFFQW9FLEVBQUFzc0UsZ0JBQUF0c0UsRUFBQXNz
RSxlQUNBdHNFLEVBQUFzc0UsZ0JBQUF0c0UsRUFBQXNzRSxlQUNBLEtBQUExd0UsSUFDQW9FLEVB
QUFwRSxVQXFEQVAsR0FBQUQsUUFBQStwRSxHbkpraGpCTSxTQUFVOXBFLEVBQVFELEVBQVNILEdB
RWpDLFlvSmx5akJBSSxHQUFBRCxRQUZBLGdEcEp3empCTSxTQUFVQyxFQUFRRCxFQUFTSCxHQUVq
QyxZcUpsempCQSxTQUFBeXhFLEdBQUF0ckUsR0FDQSxHQUFBNG9CLEdBQUEsRUFnQkEsT0FaQTdj
LEdBQUFDLFNBQUEvTixRQUFBK0IsRUFBQSxTQUFBeWlDLEdBQ0EsTUFBQUEsSUFHQSxpQkFBQUEs
SUFBQSxpQkFBQUEsR0FDQTdaLEdBQUE2WixFQUNLOG9DLElBQ0xBLEdBQUEsTUFLQTNpRCxFQTFC
QSxHQUFBMWlCLEdBQUFyTSxFQUFBLEdBRUFrUyxFQUFBbFMsRUFBQSxJQUNBNkgsRUFBQTdILEVB
QUEsR0FDQXNqQyxFQUFBdGpDLEVBQUEsSUFHQTB4RSxHQURBMXhFLEVBQUEsSUFDQSxHQXlCQXVx
RSxHQUNBL21DLGFBQUEsU0FBQTk5QixFQUFBOE4sRUFBQXlELEdBT0EsR0FBQTA2RCxHQUFBLElB
Q0EsVUFBQTE2RCxFQUFBLENBQ0EsR0FBQTI2RCxHQUFBMzZELENBRUEsY0FBQTI2RCxFQUFBdEks
T0FDQXNJLElBQUF2cUUsYUFHQSxNQUFBdXFFLEdBQUEsV0FBQUEsRUFBQXRJLE9BQ0FxSSxFQUFB
cnVDLEVBQUFPLHNCQUFBK3RDLElBTUEsR0FBQXp1QyxHQUFBLElBQ0EsVUFBQXd1QyxFQUFBLENB
Q0EsR0FBQW45RCxFQU9BLElBTEFBLEVBREEsTUFBQWhCLEVBQUFnQixNQUNBaEIsRUFBQWdCLE1B
QUEsR0FFQWk5RCxFQUFBaitELEVBQUFyTixVQUVBZzlCLEdBQUEsRUFDQXJ2QixNQUFBc1gsUUFB
QXVtRCxJQUVBLE9BQUF0eEUsR0FBQSxFQUF1QkEsRUFBQXN4RSxFQUFBM3VFLE9BQXdCM0MsSUFD
L0MsTUFBQXN4RSxFQUFBdHhFLEtBQUFtVSxFQUFBLENBQ0EydUIsR0FBQSxDQUNBLFlBSUFBLEdB
QUEsR0FBQXd1QyxJQUFBbjlELEVBSUE5TyxFQUFBOHpCLGVBQTBCMkosYUFHMUJnbkMsaUJBQUEs
U0FBQXprRSxHQUVBLEdBQUE4TixHQUFBOU4sRUFBQXdGLGdCQUFBc0ksS0FDQSxVQUFBQSxFQUFB
Z0IsTUFBQSxDQUNBM00sRUFBQVQsb0JBQUExQixHQUNBbW5CLGFBQUEsUUFBQXJaLEVBQUFnQixT
QUlBK3VCLGFBQUEsU0FBQTc5QixFQUFBOE4sR0FDQSxHQUFBcStELEdBQUF4bEUsR0FBNkI4MkIs
YUFBQS9nQyxHQUFBK0QsYUFBQS9ELElBQTJDb1IsRUFJeEUsT0FBQTlOLEVBQUE4ekIsY0FBQTJK
LFdBQ0EwdUMsRUFBQTF1QyxTQUFBejlCLEVBQUE4ekIsY0FBQTJKLFNBR0EsSUFBQXBVLEdBQUEw
aUQsRUFBQWorRCxFQUFBck4sU0FNQSxPQUpBNG9CLEtBQ0E4aUQsRUFBQTFyRSxTQUFBNG9CLEdB
R0E4aUQsR0FJQXp4RSxHQUFBRCxRQUFBb3FFLEdySjQwakJNLFNBQVVucUUsRUFBUUQsRUFBU0gs
R0FFakMsWXNKNzZqQkEsU0FBQTZ3RSxLQUNBM25FLEtBQUF3VCxhQUVBMnRELEVBQUFnRCxjQUFB
bmtFLE1BMkhBLFFBQUFrNkIsR0FBQTl6QixHQUNBLEdBQUFrRSxHQUFBdEssS0FBQWdDLGdCQUFB
c0ksTUFDQTVFLEVBQUFraUIsRUFBQUssZ0JBQUEzZCxFQUFBbEUsRUFFQSxPQURBaEcsR0FBQTJD
LEtBQUE0a0UsRUFBQTNuRSxNQUNBMEYsRUEvSUEsR0FBQWhJLEdBQUE1RyxFQUFBLEdBQ0FxTSxF
QUFBck0sRUFBQSxHQUVBOHdCLEVBQUE5d0IsRUFBQSxJQUNBNkgsRUFBQTdILEVBQUEsR0FDQXNK
LEVBQUF0SixFQUFBLEdBOEJBcXFFLEdBNUJBcnFFLEVBQUEsR0FDQUEsRUFBQSxJQTRCQXVqQyxh
QUFBLFNBQUE3OUIsRUFBQThOLEdBZUEsTUFkQSxPQUFBQSxFQUFBKzFELHlCQUFBM2lFLEVBQUEs
TUFPQXlGLEtBQThCbUgsR0FDOUJnQixVQUFBcFMsR0FDQXNoQyxpQkFBQXRoQyxHQUNBK0QsU0FB
QSxHQUFBVCxFQUFBOHpCLGNBQUFpSyxhQUNBM1QsU0FBQXBxQixFQUFBOHpCLGNBQUExSixZQU1B
MFQsYUFBQSxTQUFBOTlCLEVBQUE4TixHQWFBLEdBQUFnQixHQUFBc2MsRUFBQUcsU0FBQXpkLEdB
Q0Fpd0IsRUFBQWp2QixDQUdBLFVBQUFBLEVBQUEsQ0FDQSxHQUFBa3ZCLEdBQUFsd0IsRUFBQWt3
QixhQUVBdjlCLEVBQUFxTixFQUFBck4sUUFDQSxPQUFBQSxJQUlBLE1BQUF1OUIsR0FBQTk4QixF
QUFBLE1BQ0FrTixNQUFBc1gsUUFBQWpsQixLQUNBQSxFQUFBbkQsUUFBQSxHQUFBNEQsRUFBQSxN
QUNBVCxJQUFBLElBR0F1OUIsRUFBQSxHQUFBdjlCLEdBRUEsTUFBQXU5QixJQUNBQSxFQUFBLElB
RUFELEVBQUFDLEVBR0FoK0IsRUFBQTh6QixlQUNBaUssYUFBQSxHQUFBQSxFQUNBRSxVQUFBLEtB
Q0E3VCxTQUFBc1QsRUFBQW52QixLQUFBdk8sS0FJQTJuRSxjQUFBLFNBQUEzbkUsR0FDQSxHQUFB
OE4sR0FBQTlOLEVBQUF3RixnQkFBQXNJLE1BRUF6TyxFQUFBOEMsRUFBQVQsb0JBQUExQixHQUNB
OE8sRUFBQXNjLEVBQUFHLFNBQUF6ZCxFQUNBLFVBQUFnQixFQUFBLENBR0EsR0FBQTZpQixHQUFB
LEdBQUE3aUIsQ0FHQTZpQixLQUFBdHlCLEVBQUF5UCxRQUNBelAsRUFBQXlQLE1BQUE2aUIsR0FF
QSxNQUFBN2pCLEVBQUFrd0IsZUFDQTMrQixFQUFBMitCLGFBQUFyTSxHQUdBLE1BQUE3akIsRUFB
QWt3QixlQUNBMytCLEVBQUEyK0IsYUFBQWx3QixFQUFBa3dCLGVBSUF5bUMsaUJBQUEsU0FBQXpr
RSxHQUdBLEdBQUFYLEdBQUE4QyxFQUFBVCxvQkFBQTFCLEdBQ0FpMkIsRUFBQTUyQixFQUFBNDJC
LFdBTUFBLEtBQUFqMkIsRUFBQTh6QixjQUFBaUssZUFDQTErQixFQUFBeVAsTUFBQW1uQixLQVlB
djdCLEdBQUFELFFBQUFrcUUsR3RKMjhqQk0sU0FBVWpxRSxFQUFRRCxFQUFTSCxHQUVqQyxZdUox
a2tCQSxTQUFBOHhFLEdBQUExNkQsRUFBQTRYLEVBQUEraUQsR0FFQSxPQUNBNW1FLEtBQUEsZ0JB
Q0E0akIsUUFBQTNYLEVBQ0E0NkQsVUFBQSxLQUNBL2lELFNBQUEsS0FDQThpRCxVQUNBL2lELGFB
V0EsUUFBQWlqRCxHQUFBcnBDLEVBQUE1WixFQUFBK2lELEdBRUEsT0FDQTVtRSxLQUFBLGdCQUNB
NGpCLFFBQUEsS0FDQWlqRCxVQUFBcHBDLEVBQUExQixZQUNBalksU0FBQXpqQixFQUFBOEwsWUFB
QXN4QixHQUNBbXBDLFVBQ0EvaUQsYUFVQSxRQUFBa2pELEdBQUF0cEMsRUFBQTdqQyxHQUVBLE9B
Q0FvRyxLQUFBLGNBQ0E0akIsUUFBQSxLQUNBaWpELFVBQUFwcEMsRUFBQTFCLFlBQ0FqWSxTQUFB
bHFCLEVBQ0FndEUsUUFBQSxLQUNBL2lELFVBQUEsTUFVQSxRQUFBbWpELEdBQUEvNkQsR0FFQSxP
QUNBak0sS0FBQSxhQUNBNGpCLFFBQUEzWCxFQUNBNDZELFVBQUEsS0FDQS9pRCxTQUFBLEtBQ0E4
aUQsUUFBQSxLQUNBL2lELFVBQUEsTUFVQSxRQUFBb2pELEdBQUF6MkMsR0FFQSxPQUNBeHdCLEtB
QUEsZUFDQTRqQixRQUFBNE0sRUFDQXEyQyxVQUFBLEtBQ0EvaUQsU0FBQSxLQUNBOGlELFFBQUEs
S0FDQS9pRCxVQUFBLE1BUUEsUUFBQXBqQixHQUFBNEIsRUFBQXNoQixHQUtBLE1BSkFBLEtBQ0F0
aEIsUUFDQUEsRUFBQXpHLEtBQUErbkIsSUFFQXRoQixFQVFBLFFBQUE2a0UsR0FBQTNzRSxFQUFB
NHNFLEdBQ0FoaEQsRUFBQUUsdUJBQUE5ckIsRUFBQTRzRSxHQTVIQSxHQUFBMXJFLEdBQUE1RyxF
QUFBLEdBRUFzeEIsRUFBQXR4QixFQUFBLElBS0F3TCxHQUpBeEwsRUFBQSxJQUNBQSxFQUFBLEdB
RUFBLEVBQUEsSUFDQUEsRUFBQSxLQUNBdXlFLEVBQUF2eUUsRUFBQSxLQUdBeXhFLEdBREF6eEUs
RUFBQSxHQUNBQSxFQUFBLE1Ba0pBc3JFLEdBakpBdHJFLEVBQUEsSUF5SkE2ckUsT0FDQTJHLCtC
QUFBLFNBQUFDLEVBQUFsb0UsRUFBQTJCLEdBWUEsTUFBQXFtRSxHQUFBRyxvQkFBQUQsRUFBQWxv
RSxFQUFBMkIsSUFHQXltRSwwQkFBQSxTQUFBQyxFQUFBQyxFQUFBNUYsRUFBQTZGLEVBQUF2b0Us
RUFBQTJCLEdBQ0EsR0FBQStoRSxHQUNBOEUsRUFBQSxDQWdCQSxPQUZBOUUsR0FBQXdELEVBQUFv
QixFQUFBRSxHQUNBUixFQUFBbkUsZUFBQXdFLEVBQUEzRSxFQUFBaEIsRUFBQTZGLEVBQUF2b0Us
RUFBQXJCLFVBQUFtcEMsbUJBQUFubUMsRUFBQTZtRSxHQUNBOUUsR0FXQWYsY0FBQSxTQUFBdUYs
RUFBQWxvRSxFQUFBMkIsR0FDQSxHQUFBL0YsR0FBQStDLEtBQUFzcEUsK0JBQUFDLEVBQUFsb0Us
RUFBQTJCLEVBQ0FoRCxNQUFBOUMsa0JBQUFELENBRUEsSUFBQThtRSxNQUNBM3FELEVBQUEsQ0FD
QSxRQUFBM2hCLEtBQUF3RixHQUNBLEdBQUFBLEVBQUEzRSxlQUFBYixHQUFBLENBQ0EsR0FBQWlv
QyxHQUFBemlDLEVBQUF4RixHQUNBb3lFLEVBQUEsRUFJQS9HLEVBQUF4Z0UsRUFBQXVMLGVBQUE2
eEIsRUFBQXIrQixFQUFBckIsVUFBQW1wQyxtQkFBQW5tQyxFQUFBNm1FLEVBQ0FucUMsR0FBQTFC
LFlBQUE1a0IsSUFDQTJxRCxFQUFBbG1FLEtBQUFpbEUsR0FRQSxNQUFBaUIsSUFTQW9CLGtCQUFB
LFNBQUFSLEdBQ0EsR0FBQStFLEdBQUExcEUsS0FBQTlDLGlCQUVBbXNFLEdBQUFoRSxnQkFBQXFF
LEdBQUEsRUFDQSxRQUFBanlFLEtBQUFpeUUsR0FDQUEsRUFBQXB4RSxlQUFBYixJQUNBaUcsRUFB
QSxNQUtBeXJFLEdBQUFucEUsTUFEQWtwRSxFQUFBdkUsTUFVQVMsYUFBQSxTQUFBMEUsR0FDQSxH
QUFBSixHQUFBMXBFLEtBQUE5QyxpQkFFQW1zRSxHQUFBaEUsZ0JBQUFxRSxHQUFBLEVBQ0EsUUFB
QWp5RSxLQUFBaXlFLEdBQ0FBLEVBQUFweEUsZUFBQWIsSUFDQWlHLEVBQUEsTUFJQXlyRSxHQUFB
bnBFLE1BREFpcEUsRUFBQWEsTUFXQTVFLGVBQUEsU0FBQXlFLEVBQUF0b0UsRUFBQTJCLEdBRUFo
RCxLQUFBK3BFLGdCQUFBSixFQUFBdG9FLEVBQUEyQixJQVNBK21FLGdCQUFBLFNBQUFKLEVBQUF0
b0UsRUFBQTJCLEdBQ0EsR0FBQTBtRSxHQUFBMXBFLEtBQUE5QyxrQkFDQTBzRSxLQUNBN0YsS0FD
QWdCLEVBQUEva0UsS0FBQXlwRSwwQkFBQUMsRUFBQUMsRUFBQTVGLEVBQUE2RixFQUFBdm9FLEVB
QUEyQixFQUNBLElBQUEraEUsR0FBQTJFLEVBQUEsQ0FHQSxHQUNBanlFLEdBREFpdUIsRUFBQSxL
QUlBc2tELEVBQUEsRUFDQTN3RCxFQUFBLEVBRUE0d0QsRUFBQSxFQUNBQyxFQUFBLElBQ0EsS0FB
QXp5RSxJQUFBc3RFLEdBQ0EsR0FBQUEsRUFBQXpzRSxlQUFBYixHQUFBLENBR0EsR0FBQTB5RSxH
QUFBVCxLQUFBanlFLEdBQ0FzckMsRUFBQWdpQyxFQUFBdHRFLEVBQ0EweUUsS0FBQXBuQyxHQUNB
cmQsRUFBQWhqQixFQUFBZ2pCLEVBQUExbEIsS0FBQTBrQixVQUFBeWxELEVBQUFELEVBQUFGLEVB
QUEzd0QsSUFDQUEsRUFBQTlhLEtBQUF5OEQsSUFBQW1QLEVBQUFuc0MsWUFBQTNrQixHQUNBOHdE
LEVBQUFuc0MsWUFBQWdzQyxJQUVBRyxJQUVBOXdELEVBQUE5YSxLQUFBeThELElBQUFtUCxFQUFB
bnNDLFlBQUEza0IsSUFJQXFNLEVBQUFoakIsRUFBQWdqQixFQUFBMWxCLEtBQUFvcUUsbUJBQUFy
bkMsRUFBQWdoQyxFQUFBa0csR0FBQUMsRUFBQUYsRUFBQTNvRSxFQUFBMkIsSUFDQWluRSxLQUVB
RCxJQUNBRSxFQUFBNW5FLEVBQUE4TCxZQUFBMjBCLEdBR0EsSUFBQXRyQyxJQUFBbXlFLEdBQ0FB
LEVBQUF0eEUsZUFBQWIsS0FDQWl1QixFQUFBaGpCLEVBQUFnakIsRUFBQTFsQixLQUFBcXFFLGNB
QUFYLEVBQUFqeUUsR0FBQW15RSxFQUFBbnlFLEtBR0FpdUIsSUFDQXlqRCxFQUFBbnBFLEtBQUEw
bEIsR0FFQTFsQixLQUFBOUMsa0JBQUE2bkUsSUFjQU0sZ0JBQUEsU0FBQS8yRCxHQUNBLEdBQUFn
OEQsR0FBQXRxRSxLQUFBOUMsaUJBQ0Ftc0UsR0FBQWhFLGdCQUFBaUYsRUFBQWg4RCxHQUNBdE8s
S0FBQTlDLGtCQUFBLE1BV0F3bkIsVUFBQSxTQUFBZ2IsRUFBQTVaLEVBQUEraUQsRUFBQXh2RCxH
QUlBLEdBQUFxbUIsRUFBQTFCLFlBQUEza0IsRUFDQSxNQUFBMHZELEdBQUFycEMsRUFBQTVaLEVB
QUEraUQsSUFXQTBCLFlBQUEsU0FBQTdxQyxFQUFBNVosRUFBQWc5QyxHQUNBLE1BQUE4RixHQUFB
OUYsRUFBQWg5QyxFQUFBNFosRUFBQTFCLGNBU0FybEIsWUFBQSxTQUFBK21CLEVBQUE3akMsR0FD
QSxNQUFBbXRFLEdBQUF0cEMsRUFBQTdqQyxJQWNBdXVFLG1CQUFBLFNBQUExcUMsRUFBQW9qQyxF
QUFBaDlDLEVBQUExTSxFQUFBL1gsRUFBQTJCLEdBRUEsTUFEQTA4QixHQUFBMUIsWUFBQTVrQixF
QUNBcFosS0FBQXVxRSxZQUFBN3FDLEVBQUE1WixFQUFBZzlDLElBV0F1SCxjQUFBLFNBQUEzcUMs
RUFBQTdqQyxHQUNBLEdBQUErcEIsR0FBQTVsQixLQUFBMlksWUFBQSttQixFQUFBN2pDLEVBRUEs
T0FEQTZqQyxHQUFBMUIsWUFBQSxLQUNBcFksS0FLQTF1QixHQUFBRCxRQUFBbXJFLEd2Smdua0JN
LFNBQVVsckUsRUFBUUQsRUFBU0gsR0FFakMsY3dKOWlsQkEsU0FBQWtsQyxHQStCQSxRQUFBd3VD
LEdBQUFDLEVBQUEvcUMsRUFBQWpvQyxFQUFBb3lFLEdBRUEsR0FBQWEsT0FBQXh4RSxLQUFBdXhF
LEVBQUFoekUsRUFTQSxPQUFBaW9DLEdBQUFnckMsSUFDQUQsRUFBQWh6RSxHQUFBNmxDLEVBQUFv
QyxHQUFBLElBL0JBLEdBQUFwOUIsR0FBQXhMLEVBQUEsSUFFQXdtQyxFQUFBeG1DLEVBQUEsSUFF
QWt5QixHQURBbHlCLEVBQUEsSUFDQUEsRUFBQSxLQUNBMHBDLEVBQUExcEMsRUFBQSxHQUNBQSxH
QUFBLEVBSUEscUJBQUFrbEMsSUFBQXBrQyxRQUFBK3lFLFNBQUEsYUFBQUMsV0FBQSxLQThCQSxJ
QUFBdkIsSUFTQUcsb0JBQUEsU0FBQXFCLEVBQUF4cEUsRUFBQTJCLEVBQUE2bUUsR0FFQSxTQUFB
Z0IsRUFDQSxXQUVBLElBQUFKLEtBU0EsT0FGQWpxQyxHQUFBcXFDLEVBQUFMLEVBQUFDLEdBRUFB
LEdBYUF2RixlQUFBLFNBQUF3RSxFQUFBM0UsRUFBQWhCLEVBQUE2RixFQUFBdm9FLEVBQUEwTSxF
QUFBQyxFQUFBaEwsRUFBQTZtRSxHQU9BLEdBQUE5RSxHQUFBMkUsRUFBQSxDQUdBLEdBQUFqeUUs
R0FDQTB5RSxDQUNBLEtBQUExeUUsSUFBQXN0RSxHQUNBLEdBQUFBLEVBQUF6c0UsZUFBQWIsR0FB
QSxDQUdBMHlFLEVBQUFULEtBQUFqeUUsRUFDQSxJQUFBaVgsR0FBQXk3RCxLQUFBbm9FLGdCQUNB
eU0sRUFBQXMyRCxFQUFBdHRFLEVBQ0EsVUFBQTB5RSxHQUFBbmhELEVBQUF0YSxFQUFBRCxHQUNB
bk0sRUFBQWtNLGlCQUFBMjdELEVBQUExN0QsRUFBQXBOLEVBQUEyQixHQUNBK2hFLEVBQUF0dEUs
R0FBQTB5RSxNQUNPLENBQ1BBLElBQ0FQLEVBQUFueUUsR0FBQTZLLEVBQUE4TCxZQUFBKzdELEdB
Q0E3bkUsRUFBQStMLGlCQUFBODdELEdBQUEsR0FHQSxJQUFBVyxHQUFBeHRDLEVBQUE3dUIsR0FB
QSxFQUNBczJELEdBQUF0dEUsR0FBQXF6RSxDQUdBLElBQUFDLEdBQUF6b0UsRUFBQXVMLGVBQUFp
OUQsRUFBQXpwRSxFQUFBME0sRUFBQUMsRUFBQWhMLEVBQUE2bUUsRUFDQTlGLEdBQUFsbUUsS0FB
QWt0RSxJQUlBLElBQUF0ekUsSUFBQWl5RSxJQUNBQSxFQUFBcHhFLGVBQUFiLElBQUFzdEUsS0FB
QXpzRSxlQUFBYixLQUNBMHlFLEVBQUFULEVBQUFqeUUsR0FDQW15RSxFQUFBbnlFLEdBQUE2SyxF
QUFBOEwsWUFBQSs3RCxHQUNBN25FLEVBQUErTCxpQkFBQTg3RCxHQUFBLE1BWUE5RSxnQkFBQSxT
QUFBaUYsRUFBQWg4RCxHQUNBLE9BQUE3VyxLQUFBNnlFLEdBQ0EsR0FBQUEsRUFBQWh5RSxlQUFB
YixHQUFBLENBQ0EsR0FBQXV6RSxHQUFBVixFQUFBN3lFLEVBQ0E2SyxHQUFBK0wsaUJBQUEyOEQs
RUFBQTE4RCxLQU1BcFgsR0FBQUQsUUFBQW95RSxJeEpnamxCNkJoeUUsS0FBS0osRUFBU0gsRUFB
b0IsTUFJekQsU0FBVUksRUFBUUQsRUFBU0gsR0FFakMsWXlKcnFsQkEsU0FBQW0wRSxHQUFBNWhF
LElBZUEsUUFBQTZoRSxHQUFBN2hFLEdBQ0EsU0FBQUEsRUFBQWhSLFlBQUFnUixFQUFBaFIsVUFB
QTAyQixrQkFHQSxRQUFBbzhDLEdBQUE5aEUsR0FDQSxTQUFBQSxFQUFBaFIsWUFBQWdSLEVBQUFo
UixVQUFBNjJCLHNCQWhEQSxHQUFBeHhCLEdBQUE1RyxFQUFBLEdBQ0FxTSxFQUFBck0sRUFBQSxH
QUVBa1MsRUFBQWxTLEVBQUEsSUFDQXN4QixFQUFBdHhCLEVBQUEsSUFDQStOLEVBQUEvTixFQUFB
LElBQ0FpYyxFQUFBamMsRUFBQSxJQUNBMGUsRUFBQTFlLEVBQUEsSUFFQXVuQyxHQURBdm5DLEVB
QUEsR0FDQUEsRUFBQSxLQUNBd0wsRUFBQXhMLEVBQUEsSUFNQStlLEVBQUEvZSxFQUFBLElBRUE2
eEIsR0FEQTd4QixFQUFBLEdBQ0FBLEVBQUEsS0FDQWt5QixFQUFBbHlCLEVBQUEsSUFHQXMwRSxH
QUZBdDBFLEVBQUEsSUFHQXUwRSxZQUFBLEVBQ0FDLFVBQUEsRUFDQUMsb0JBQUEsR0FJQU4sR0FB
QTV5RSxVQUFBcXhDLE9BQUEsV0FDQSxHQUFBcmdDLEdBQUFtTSxFQUFBeGQsSUFBQWdJLE1BQUFn
QyxnQkFBQUMsS0FDQXNJLEVBQUFsQixFQUFBckosS0FBQXNLLE1BQUF0SyxLQUFBZ0QsUUFBQWhE
LEtBQUEwdUIsUUFFQSxPQUFBbmtCLEdBb0VBLElBQUFpaEUsR0FBQSxFQUtBdHRDLEdBUUFDLFVB
QUEsU0FBQTV6QixHQUNBdkssS0FBQWdDLGdCQUFBdUksRUFDQXZLLEtBQUF3VCxZQUFBLEVBQ0F4
VCxLQUFBeXJFLGVBQUEsS0FDQXpyRSxLQUFBa3FDLFVBQUEsS0FDQWxxQyxLQUFBN0IsWUFBQSxL
QUNBNkIsS0FBQW1wQyxtQkFBQSxLQUdBbnBDLEtBQUE4QyxtQkFBQSxLQUNBOUMsS0FBQWtyQixn
QkFBQSxLQUNBbHJCLEtBQUE0cUIsbUJBQUEsS0FDQTVxQixLQUFBNnFCLHNCQUFBLEVBQ0E3cUIs
S0FBQXlxQixxQkFBQSxFQUVBenFCLEtBQUEwckMsa0JBQUEsS0FDQTFyQyxLQUFBMUQsbUJBQUEs
S0FDQTBELEtBQUEyTyxTQUFBLEtBQ0EzTyxLQUFBbUIsWUFBQSxFQUNBbkIsS0FBQWtvQyxpQkFB
QSxLQUdBbG9DLEtBQUEyQixrQkFBQSxLQUdBM0IsS0FBQTByRSw2QkFBQSxHQWtCQTc5RCxlQUFB
LFNBQUF4TSxFQUFBME0sRUFBQUMsRUFBQWhMLEdBR0FoRCxLQUFBMk8sU0FBQTNMLEVBQ0FoRCxL
QUFBbUIsWUFBQXFxRSxJQUNBeHJFLEtBQUE3QixZQUFBNFAsRUFDQS9OLEtBQUFtcEMsbUJBQUFu
N0IsQ0FFQSxJQVVBMjlELEdBVkFDLEVBQUE1ckUsS0FBQWdDLGdCQUFBc0ksTUFDQXVoRSxFQUFB
N3JFLEtBQUE4ckUsZ0JBQUE5b0UsR0FFQXFHLEVBQUFySixLQUFBZ0MsZ0JBQUFDLEtBRUFtbkUs
RUFBQS9uRSxFQUFBMHFFLGlCQUdBQyxFQUFBZCxFQUFBN2hFLEdBQ0E3TSxFQUFBd0QsS0FBQWlz
RSxvQkFBQUQsRUFBQUosRUFBQUMsRUFBQXpDLEVBSUE0QyxJQUFBLE1BQUF4dkUsR0FBQSxNQUFB
QSxFQUFBa3RDLE9BT0F5aEMsRUFBQTloRSxHQUNBckosS0FBQXlyRSxlQUFBTCxFQUFBRSxVQUVB
dHJFLEtBQUF5ckUsZUFBQUwsRUFBQUMsYUFUQU0sRUFBQW52RSxFQUVBLE9BQUFBLElBQUEsSUFB
QUEsR0FBQXdNLEVBQUFPLGVBQUEvTSxJQUFBa0IsRUFBQSxNQUFBMkwsRUFBQTBnQixhQUFBMWdC
LEVBQUE1UixNQUFBLGFBQ0ErRSxFQUFBLEdBQUF5dUUsR0FBQTVoRSxHQUNBckosS0FBQXlyRSxl
QUFBTCxFQUFBRyxvQkF3QkEvdUUsR0FBQThOLE1BQUFzaEUsRUFDQXB2RSxFQUFBd0csUUFBQTZv
RSxFQUNBcnZFLEVBQUFteUIsS0FBQTlZLEVBQ0FyWixFQUFBa3lCLFFBQUEwNkMsRUFFQXBwRSxL
QUFBa3FDLFVBQUExdEMsRUFHQWdaLEVBQUFJLElBQUFwWixFQUFBd0QsS0FlQSxJQUFBMnNELEdB
QUFud0QsRUFBQSswQyxVQUNBcjRDLEtBQUF5ekQsSUFDQW53RCxFQUFBKzBDLE1BQUFvYixFQUFB
LE9BRUEsaUJBQUFBLElBQUEvaEQsTUFBQXNYLFFBQUF5cUMsS0FBQWp2RCxFQUFBLE1BQUFzQyxL
QUFBbUMsV0FBQSwyQkFFQW5DLEtBQUE0cUIsbUJBQUEsS0FDQTVxQixLQUFBNnFCLHNCQUFBLEVB
Q0E3cUIsS0FBQXlxQixxQkFBQSxDQUVBLElBQUF2YyxFQW1CQSxPQWpCQUEsR0FEQTFSLEVBQUEw
dkUscUJBQ0Fsc0UsS0FBQW1zRSxxQ0FBQVIsRUFBQTU5RCxFQUFBQyxFQUFBM00sRUFBQTJCLEdB
RUFoRCxLQUFBb3NFLG9CQUFBVCxFQUFBNTlELEVBQUFDLEVBQUEzTSxFQUFBMkIsR0FHQXhHLEVB
QUF1MUMsbUJBUUExd0MsRUFBQThNLHFCQUFBekwsUUFBQWxHLEVBQUF1MUMsa0JBQUF2MUMsR0FJ
QTBSLEdBR0ErOUQsb0JBQUEsU0FBQUQsRUFBQUosRUFBQUMsRUFBQXpDLEdBU0EsTUFBQXBwRSxN
QUFBcXNFLGdDQUFBTCxFQUFBSixFQUFBQyxFQUFBekMsSUFJQWlELGdDQUFBLFNBQUFMLEVBQUFK
LEVBQUFDLEVBQUF6QyxHQUNBLEdBQUEvL0QsR0FBQXJKLEtBQUFnQyxnQkFBQUMsSUFFQSxPQUFB
K3BFLEdBTUEsR0FBQTNpRSxHQUFBdWlFLEVBQUFDLEVBQUF6QyxHQVdBLy9ELEVBQUF1aUUsRUFB
QUMsRUFBQXpDLElBSUErQyxxQ0FBQSxTQUFBUixFQUFBNTlELEVBQUFDLEVBQUEzTSxFQUFBMkIs
R0FDQSxHQUFBa0wsR0FDQStoQixFQUFBNXVCLEVBQUE0dUIsWUFDQSxLQUNBL2hCLEVBQUFsTyxL
QUFBb3NFLG9CQUFBVCxFQUFBNTlELEVBQUFDLEVBQUEzTSxFQUFBMkIsR0FDSyxNQUFBbEssR0FF
THVJLEVBQUE2dUIsU0FBQUQsR0FDQWp3QixLQUFBa3FDLFVBQUFnaUMscUJBQUFwekUsR0FDQWtI
LEtBQUE0cUIscUJBQ0E1cUIsS0FBQWtxQyxVQUFBcUgsTUFBQXZ4QyxLQUFBc3NFLHFCQUFBdHNF
LEtBQUFrcUMsVUFBQTUvQixNQUFBdEssS0FBQWtxQyxVQUFBbG5DLFVBRUFpdEIsRUFBQTV1QixF
QUFBNHVCLGFBRUFqd0IsS0FBQTFELG1CQUFBK1Isa0JBQUEsR0FDQWhOLEVBQUE2dUIsU0FBQUQs
R0FJQS9oQixFQUFBbE8sS0FBQW9zRSxvQkFBQVQsRUFBQTU5RCxFQUFBQyxFQUFBM00sRUFBQTJC
LEdBRUEsTUFBQWtMLElBR0FrK0Qsb0JBQUEsU0FBQVQsRUFBQTU5RCxFQUFBQyxFQUFBM00sRUFB
QTJCLEdBQ0EsR0FBQXhHLEdBQUF3RCxLQUFBa3FDLFVBRUFxaUMsRUFBQSxDQUtBL3ZFLEdBQUEw
d0QscUJBTUExd0QsRUFBQTB3RCxxQkFJQWx0RCxLQUFBNHFCLHFCQUNBcHVCLEVBQUErMEMsTUFB
QXZ4QyxLQUFBc3NFLHFCQUFBOXZFLEVBQUE4TixNQUFBOU4sRUFBQXdHLGVBS0E5SixLQUFBeXlF
LElBQ0FBLEVBQUEzckUsS0FBQXdzRSw0QkFHQSxJQUFBendFLEdBQUFzaUMsRUFBQUksUUFBQWt0
QyxFQUNBM3JFLE1BQUEwckMsa0JBQUEzdkMsQ0FDQSxJQUFBMmpDLEdBQUExL0IsS0FBQW8rQiwy
QkFBQXV0QyxFQUFBNXZFLElBQUFzaUMsRUFBQUcsTUFFQXgrQixNQUFBMUQsbUJBQUFvakMsQ0FF
QSxJQUFBeHhCLEdBQUE1TCxFQUFBdUwsZUFBQTZ4QixFQUFBcitCLEVBQUEwTSxFQUFBQyxFQUFB
aE8sS0FBQXVxQyxxQkFBQXZuQyxHQUFBdXBFLEVBU0EsT0FBQXIrRCxJQUdBRSxZQUFBLFdBQ0Es
TUFBQTlMLEdBQUE4TCxZQUFBcE8sS0FBQTFELHFCQVNBK1IsaUJBQUEsU0FBQUMsR0FDQSxHQUFB
dE8sS0FBQTFELG1CQUFBLENBSUEsR0FBQUUsR0FBQXdELEtBQUFrcUMsU0FFQSxJQUFBMXRDLEVB
QUF5MUMsdUJBQUF6MUMsRUFBQWt2RSw0QkFHQSxHQUZBbHZFLEVBQUFrdkUsNkJBQUEsRUFFQXA5
RCxFQUFBLENBQ0EsR0FBQTdXLEdBQUF1SSxLQUFBbUMsVUFBQSx5QkFDQTRRLEdBQUFnUCxzQkFB
QXRxQixFQUFBK0UsRUFBQXkxQyxxQkFBQWxuQyxLQUFBdk8sUUFPQUEsR0FBQXkxQyxzQkFLQWp5
QyxNQUFBMUQscUJBQ0FnRyxFQUFBK0wsaUJBQUFyTyxLQUFBMUQsbUJBQUFnUyxHQUNBdE8sS0FB
QTByQyxrQkFBQSxLQUNBMXJDLEtBQUExRCxtQkFBQSxLQUNBMEQsS0FBQWtxQyxVQUFBLE1BTUFs
cUMsS0FBQTRxQixtQkFBQSxLQUNBNXFCLEtBQUE2cUIsc0JBQUEsRUFDQTdxQixLQUFBeXFCLHFC
QUFBLEVBQ0F6cUIsS0FBQTJCLGtCQUFBLEtBQ0EzQixLQUFBa3JCLGdCQUFBLEtBSUFsckIsS0FB
QTJPLFNBQUEsS0FDQTNPLEtBQUF3VCxZQUFBLEVBQ0F4VCxLQUFBa29DLGlCQUFBLEtBS0ExeUIs
RUFBQUMsT0FBQWpaLEtBaUJBaXdFLGFBQUEsU0FBQXpwRSxHQUNBLEdBQUFxRyxHQUFBckosS0FB
QWdDLGdCQUFBQyxLQUNBeXVDLEVBQUFybkMsRUFBQXFuQyxZQUNBLEtBQUFBLEVBQ0EsTUFBQTc2
QixFQUVBLElBQUE2MkQsS0FDQSxRQUFBQyxLQUFBajhCLEdBQ0FnOEIsRUFBQUMsR0FBQTNwRSxF
QUFBMnBFLEVBRUEsT0FBQUQsSUFXQVosZ0JBQUEsU0FBQTlvRSxHQUNBLEdBQUEwcEUsR0FBQTFz
RSxLQUFBeXNFLGFBQUF6cEUsRUFPQSxPQUFBMHBFLElBUUFuaUMscUJBQUEsU0FBQXFpQyxHQUNB
LEdBRUFDLEdBRkF4akUsRUFBQXJKLEtBQUFnQyxnQkFBQUMsS0FDQXpGLEVBQUF3RCxLQUFBa3FD
LFNBZ0JBLElBYkExdEMsRUFBQXExQyxrQkFTQWc3QixFQUFBcndFLEVBQUFxMUMsbUJBSUFnN0Is
RUFBQSxDQUNBLGlCQUFBeGpFLEdBQUF1bkMsbUJBQUFsekMsRUFBQSxNQUFBc0MsS0FBQW1DLFdB
QUEsMEJBSUEsUUFBQTFLLEtBQUFvMUUsR0FDQXAxRSxJQUFBNFIsR0FBQXVuQyxtQkFBQWx6QyxF
QUFBLE1BQUFzQyxLQUFBbUMsV0FBQSwwQkFBQTFLLEVBRUEsT0FBQTBMLE1BQXVCeXBFLEVBQUFD
LEdBRXZCLE1BQUFELElBV0FFLG1CQUFBLFNBQUF0aUIsRUFBQXJSLEVBQUFpRixLQU1BNXZDLGlC
QUFBLFNBQUFDLEVBQUFwTixFQUFBNHBCLEdBQ0EsR0FBQXZjLEdBQUExTyxLQUFBZ0MsZ0JBQ0Er
cUUsRUFBQS9zRSxLQUFBMk8sUUFFQTNPLE1BQUFrckIsZ0JBQUEsS0FFQWxyQixLQUFBb3RELGdC
QUFBL3JELEVBQUFxTixFQUFBRCxFQUFBcytELEVBQUE5aEQsSUFVQTFvQix5QkFBQSxTQUFBbEIs
R0FDQSxNQUFBckIsS0FBQWtyQixnQkFDQTVvQixFQUFBa00saUJBQUF4TyxVQUFBa3JCLGdCQUFB
N3BCLEVBQUFyQixLQUFBMk8sVUFDSyxPQUFBM08sS0FBQTRxQixvQkFBQTVxQixLQUFBeXFCLG9C
QUNMenFCLEtBQUFvdEQsZ0JBQUEvckQsRUFBQXJCLEtBQUFnQyxnQkFBQWhDLEtBQUFnQyxnQkFB
QWhDLEtBQUEyTyxTQUFBM08sS0FBQTJPLFVBRUEzTyxLQUFBOEMsbUJBQUEsTUFtQkFzcUQsZ0JB
QUEsU0FBQS9yRCxFQUFBMnJFLEVBQUFDLEVBQUFDLEVBQUFDLEdBQ0EsR0FBQTN3RSxHQUFBd0Qs
S0FBQWtxQyxTQUNBLE9BQUExdEMsR0FBQWtCLEVBQUEsTUFBQXNDLEtBQUFtQyxXQUFBLDBCQUVB
LElBQ0E4b0IsR0FEQW1pRCxHQUFBLENBSUFwdEUsTUFBQTJPLFdBQUF3K0QsRUFDQWxpRCxFQUFB
enVCLEVBQUF3RyxTQUVBaW9CLEVBQUFqckIsS0FBQThyRSxnQkFBQXFCLEdBQ0FDLEdBQUEsRUFH
QSxJQUFBQyxHQUFBTCxFQUFBMWlFLE1BQ0FnbEMsRUFBQTI5QixFQUFBM2lFLEtBR0EwaUUsS0FB
QUMsSUFDQUcsR0FBQSxHQU1BQSxHQUFBNXdFLEVBQUF3MUMsMkJBTUF4MUMsRUFBQXcxQywwQkFB
QTFDLEVBQUFya0IsRUFJQSxJQUFBcWlELEdBQUF0dEUsS0FBQXNzRSxxQkFBQWg5QixFQUFBcmtC
LEdBQ0FzaUQsR0FBQSxDQUVBdnRFLE1BQUF5cUIsc0JBQ0FqdUIsRUFBQSt5QyxzQkFNQWcrQixF
QUFBL3dFLEVBQUEreUMsc0JBQUFELEVBQUFnK0IsRUFBQXJpRCxHQUdBanJCLEtBQUF5ckUsaUJB
QUFMLEVBQUFFLFlBQ0FpQyxHQUFBNWtELEVBQUEwa0QsRUFBQS85QixLQUFBM21CLEVBQUFuc0Is
RUFBQSswQyxNQUFBKzdCLEtBU0F0dEUsS0FBQThDLG1CQUFBLEtBQ0F5cUUsR0FDQXZ0RSxLQUFB
eXFCLHFCQUFBLEVBRUF6cUIsS0FBQXd0RSx3QkFBQVAsRUFBQTM5QixFQUFBZytCLEVBQUFyaUQs
RUFBQTVwQixFQUFBOHJFLEtBSUFudEUsS0FBQWdDLGdCQUFBaXJFLEVBQ0FqdEUsS0FBQTJPLFNB
QUF3K0QsRUFDQTN3RSxFQUFBOE4sTUFBQWdsQyxFQUNBOXlDLEVBQUErMEMsTUFBQSs3QixFQUNB
OXdFLEVBQUF3RyxRQUFBaW9CLElBSUFxaEQscUJBQUEsU0FBQWhpRSxFQUFBdEgsR0FDQSxHQUFB
eEcsR0FBQXdELEtBQUFrcUMsVUFDQTVsQyxFQUFBdEUsS0FBQTRxQixtQkFDQXR4QixFQUFBMEcs
S0FBQTZxQixvQkFJQSxJQUhBN3FCLEtBQUE2cUIsc0JBQUEsRUFDQTdxQixLQUFBNHFCLG1CQUFB
LE1BRUF0bUIsRUFDQSxNQUFBOUgsR0FBQSswQyxLQUdBLElBQUFqNEMsR0FBQSxJQUFBZ0wsRUFB
QXhLLE9BQ0EsTUFBQXdLLEdBQUEsRUFJQSxRQURBZ3BFLEdBQUFucUUsS0FBOEI3SixFQUFBZ0ws
RUFBQSxHQUFBOUgsRUFBQSswQyxPQUM5QnA2QyxFQUFBbUMsRUFBQSxJQUFpQ25DLEVBQUFtTixF
QUFBeEssT0FBa0IzQyxJQUFBLENBQ25ELEdBQUFzMkUsR0FBQW5wRSxFQUFBbk4sRUFDQWdNLEdB
QUFtcUUsRUFBQSxtQkFBQUcsS0FBQXAyRSxLQUFBbUYsRUFBQTh3RSxFQUFBaGpFLEVBQUF0SCxH
QUFBeXFFLEdBR0EsTUFBQUgsSUFlQUUsd0JBQUEsU0FBQS8rRCxFQUFBNmdDLEVBQUFnK0IsRUFB
QXJpRCxFQUFBNXBCLEVBQUFxc0UsR0FDQSxHQUtBTCxHQUNBTSxFQUNBWixFQUxBdndFLEVBQUF3
RCxLQUFBa3FDLFVBRUEwakMsRUFBQWgwQyxRQUFBcDlCLEVBQUErMUMsbUJBSUFxN0IsS0FDQVAs
RUFBQTd3RSxFQUFBOE4sTUFDQXFqRSxFQUFBbnhFLEVBQUErMEMsTUFDQXc3QixFQUFBdndFLEVB
QUF3RyxTQUdBeEcsRUFBQTJ3RCxxQkFNQTN3RCxFQUFBMndELG9CQUFBN2QsRUFBQWcrQixFQUFB
cmlELEdBSUFqckIsS0FBQWdDLGdCQUFBeU0sRUFDQXpPLEtBQUEyTyxTQUFBKytELEVBQ0FseEUs
RUFBQThOLE1BQUFnbEMsRUFDQTl5QyxFQUFBKzBDLE1BQUErN0IsRUFDQTl3RSxFQUFBd0csUUFB
QWlvQixFQUVBanJCLEtBQUE2dEUseUJBQUF4c0UsRUFBQXFzRSxHQUVBRSxHQU1BdnNFLEVBQUE4
TSxxQkFBQXpMLFFBQUFsRyxFQUFBKzFDLG1CQUFBeG5DLEtBQUF2TyxFQUFBNndFLEVBQUFNLEVB
QUFaLEdBQUF2d0UsSUFXQXF4RSx5QkFBQSxTQUFBeHNFLEVBQUEyQixHQUNBLEdBQUE4cUUsR0FB
QTl0RSxLQUFBMUQsbUJBQ0F5eEUsRUFBQUQsRUFBQTlyRSxnQkFDQWdzRSxFQUFBaHVFLEtBQUF3
c0UsNEJBRUFELEVBQUEsQ0FLQSxJQUFBdmpELEVBQUEra0QsRUFBQUMsR0FDQTFyRSxFQUFBa00s
aUJBQUFzL0QsRUFBQUUsRUFBQTNzRSxFQUFBckIsS0FBQXVxQyxxQkFBQXZuQyxRQUNLLENBQ0ws
R0FBQWlyRSxHQUFBM3JFLEVBQUE4TCxZQUFBMC9ELEVBQ0F4ckUsR0FBQStMLGlCQUFBeS9ELEdB
QUEsRUFFQSxJQUFBL3hFLEdBQUFzaUMsRUFBQUksUUFBQXV2QyxFQUNBaHVFLE1BQUEwckMsa0JB
QUEzdkMsQ0FDQSxJQUFBMmpDLEdBQUExL0IsS0FBQW8rQiwyQkFBQTR2QyxFQUFBanlFLElBQUFz
aUMsRUFBQUcsTUFFQXgrQixNQUFBMUQsbUJBQUFvakMsQ0FFQSxJQUFBb3FDLEdBQUF4bkUsRUFB
QXVMLGVBQUE2eEIsRUFBQXIrQixFQUFBckIsS0FBQTdCLFlBQUE2QixLQUFBbXBDLG1CQUFBbnBD
LEtBQUF1cUMscUJBQUF2bkMsR0FBQXVwRSxFQVNBdnNFLE1BQUFrdUUsdUJBQUFELEVBQUFuRSxF
QUFBZ0UsS0FTQUksdUJBQUEsU0FBQUQsRUFBQW5FLEVBQUFxRSxHQUNBL2xELEVBQUFDLHNCQUFB
NGxELEVBQUFuRSxFQUFBcUUsSUFNQUMsK0NBQUEsV0FDQSxHQUFBNXhFLEdBQUF3RCxLQUFBa3FD
LFNBb0JBLE9BWkExdEMsR0FBQWt0QyxVQWtCQThpQywwQkFBQSxXQUNBLEdBQUFiLEVBQ0EsSUFB
QTNyRSxLQUFBeXJFLGlCQUFBTCxFQUFBRyxvQkFBQSxDQUNBMW1FLEVBQUFDLFFBQUE5RSxJQUNB
LEtBQ0EyckUsRUFBQTNyRSxLQUFBb3VFLGlEQUNPLFFBQ1B2cEUsRUFBQUMsUUFBQSxVQUdBNm1F
LEdBQUEzckUsS0FBQW91RSxnREFNQSxPQUZBLFFBQUF6QyxJQUFBLElBQUFBLEdBQUEzaUUsRUFB
QU8sZUFBQW9pRSxJQUFBanVFLEVBQUEsTUFBQXNDLEtBQUFtQyxXQUFBLDJCQUVBd3BFLEdBV0E5
VSxVQUFBLFNBQUEvc0QsRUFBQTFOLEdBQ0EsR0FBQUksR0FBQXdELEtBQUEyQyxtQkFDQSxPQUFB
bkcsR0FBQWtCLEVBQUEsTUFDQSxJQUFBMndFLEdBQUFqeUUsRUFBQXVHLHFCQUtBbkcsRUFBQW15
QixPQUFBOVksRUFBQXJaLEVBQUFteUIsUUFBeURueUIsRUFBQW15QixNQUN6RDdrQixHQUFBdWtF
LEdBVUFyWCxVQUFBLFNBQUFsdEQsU0FDQTlKLE1BQUEyQyxvQkFBQWdzQixLQUNBN2tCLElBU0Ez
SCxRQUFBLFdBQ0EsR0FBQUYsR0FBQWpDLEtBQUFnQyxnQkFBQUMsS0FDQXFELEVBQUF0RixLQUFB
a3FDLFdBQUFscUMsS0FBQWtxQyxVQUFBNWtDLFdBQ0EsT0FBQXJELEdBQUE4bkIsYUFBQXprQixL
QUFBeWtCLGFBQUE5bkIsRUFBQXhLLE1BQUE2TixLQUFBN04sTUFBQSxNQVdBa0wsa0JBQUEsV0FD
QSxHQUFBbkcsR0FBQXdELEtBQUFrcUMsU0FDQSxPQUFBbHFDLE1BQUF5ckUsaUJBQUFMLEVBQUFH
LG9CQUNBLEtBRUEvdUUsR0FJQTRoQywyQkFBQSxLQUdBbG5DLEdBQUFELFFBQUFpbkMsR3pKa3Rs
Qk0sU0FBVWhuQyxFQUFRRCxFQUFTSCxHQUVqQyxZMEp2a25CQSxTQUFBdzNFLEtBQ0EsTUFBQUMs
S0FIQSxHQUFBQSxHQUFBLENBTUFyM0UsR0FBQUQsUUFBQXEzRSxHMUoybG5CTSxTQUFVcDNFLEVB
QVFELEVBQVNILEdBRWpDLFkySmhtbkJBLElBQUFrVCxHQUFBLG1CQUFBb2xCLGdCQUFBLEtBQUFB
LE9BQUEsMkJBRUFsNEIsR0FBQUQsUUFBQStTLEczSnFubkJNLFNBQVU5UyxFQUFRRCxFQUFTSCxH
QUVqQyxZNEp6bW5CQSxTQUFBa3BDLEdBQUFpaEIsR0FDQSxHQUFBbGhCLEdBQUFraEIsSUFBQUMs
R0FBQUQsRUFBQUMsSUFBQUQsRUFBQUUsR0FDQSx1QkFBQXBoQixHQUNBLE1BQUFBLEdBcEJBLEdB
QUFtaEIsR0FBQSxtQkFBQTl4QixnQkFBQThRLFNBQ0FpaEIsRUFBQSxZQXVCQWpxRCxHQUFBRCxR
QUFBK29DLEc1SjhvbkJNLFNBQVU5b0MsRUFBUUQsRUFBU0gsR0FFakMsYzZKdnJuQkEsU0FBQWts
QyxHQWtDQSxRQUFBd3lDLEdBQUFodkMsRUFBQUUsRUFBQWpvQyxFQUFBb3lFLEdBRUEsR0FBQXJx
QyxHQUFBLGlCQUFBQSxHQUFBLENBQ0EsR0FBQTRhLEdBQUE1YSxFQUNBa3JDLE1BQUF4eEUsS0FB
QWtoRCxFQUFBM2lELEVBU0FpekUsSUFBQSxNQUFBaHJDLElBQ0EwYSxFQUFBM2lELEdBQUFpb0Ms
SUFVQSxRQUFBNm9DLEdBQUF0ckUsRUFBQTRzRSxHQUNBLFNBQUE1c0UsRUFDQSxNQUFBQSxFQUVB
LElBQUFtOUMsS0FTQSxPQUZBNVosR0FBQXZqQyxFQUFBdXhFLEVBQUFwMEIsR0FFQUEsRUExREEs
R0FDQTVaLElBREExcEMsRUFBQSxJQUNBQSxFQUFBLElBQ0FBLEdBQUEsRUFJQSxxQkFBQWtsQyxJ
QUFBcGtDLFFBQUEreUUsU0FBQSxhQUFBQyxXQUFBLE1BdURBMXpFLEVBQUFELFFBQUFzeEUsSTdK
eXJuQjZCbHhFLEtBQUtKLEVBQVNILEVBQW9CLE1BSXpELFNBQVVJLEVBQVFELEVBQVNILEdBRWpD
LFk4Smh1bkJBLFNBQUEwcEUsR0FBQW1ELEdBQ0EzakUsS0FBQVEsMEJBQ0FSLEtBQUEyakUsdUJB
Q0EzakUsS0FBQXdvQyxrQkFBQSxFQUNBeG9DLEtBQUFvcEUsWUFBQSxHQUFBcUYsR0FBQXp1RSxN
QWpDQSxHQUFBbUQsR0FBQXJNLEVBQUEsR0FFQXNNLEVBQUF0TSxFQUFBLElBQ0F1TSxFQUFBdk0s
RUFBQSxJQUVBMjNFLEdBREEzM0UsRUFBQSxHQUNBQSxFQUFBLE1BT0FnTixLQVNBNHFFLEdBQ0Fo
c0UsUUFBQSxjQWNBaWdFLEdBT0E1K0QsdUJBQUEsV0FDQSxNQUFBRCxJQU1BcUssbUJBQUEsV0FD
QSxNQUFBdWdFLElBTUEzQyxlQUFBLFdBQ0EsTUFBQS9yRSxNQUFBb3BFLGFBT0FwbEUsV0FBQSxh
QUVBaXNCLFdBQUEsYUFFQUMsU0FBQSxhQUdBL3NCLEdBQUFxOUQsRUFBQW5vRSxVQUFBZ0wsRUFB
QXMvRCxHQUVBdi9ELEVBQUFpQixhQUFBbThELEdBRUF0cEUsRUFBQUQsUUFBQXVwRSxHOUo4d25C
TSxTQUFVdHBFLEVBQVFELEVBQVNILEdBRWpDLFkrSjMxbkJBLFNBQUE2NEIsR0FBQXJvQixFQUFB
c29CLEdBQWlELEtBQUF0b0IsWUFBQXNvQixJQUEwQyxTQUFBeDFCLFdBQUEscUNBRTNGLEdBQUEr
dkIsR0FBQXJ6QixFQUFBLElBbUJBMjNFLEdBakJBMzNFLEVBQUEsR0FpQkEsV0FDQSxRQUFBMjNF
LEdBQUFwdEUsR0FDQXN1QixFQUFBM3ZCLEtBQUF5dUUsR0FFQXp1RSxLQUFBcUIsY0FnR0EsTUFw
RkFvdEUsR0FBQXAyRSxVQUFBK3hCLFVBQUEsU0FBQUgsR0FDQSxVQWFBd2tELEVBQUFwMkUsVUFB
QWd5QixnQkFBQSxTQUFBSixFQUFBbHBCLEVBQUFtcEIsR0FDQWxxQixLQUFBcUIsWUFBQThVLG1C
QUNBZ1UsRUFBQUUsZ0JBQUFKLEVBQUFscEIsRUFBQW1wQixJQW1CQXVrRCxFQUFBcDJFLFVBQUFt
eUIsbUJBQUEsU0FBQVAsR0FDQWpxQixLQUFBcUIsWUFBQThVLG1CQUNBZ1UsRUFBQUssbUJBQUFQ
LElBbUJBd2tELEVBQUFwMkUsVUFBQXF5QixvQkFBQSxTQUFBVCxFQUFBVSxHQUNBM3FCLEtBQUFx
QixZQUFBOFUsbUJBQ0FnVSxFQUFBTyxvQkFBQVQsRUFBQVUsSUFrQkE4akQsRUFBQXAyRSxVQUFB
eXlCLGdCQUFBLFNBQUFiLEVBQUFjLEdBQ0EvcUIsS0FBQXFCLFlBQUE4VSxtQkFDQWdVLEVBQUFX
LGdCQUFBYixFQUFBYyxJQU1BMGpELEtBR0F2M0UsR0FBQUQsUUFBQXczRSxHL0o2Mm5CTSxTQUFV
djNFLEVBQVFELEVBQVNILEdBRWpDLFlnSzUrbkJBLElBQUFxTSxHQUFBck0sRUFBQSxHQUVBbVos
RUFBQW5aLEVBQUEsSUFDQTZILEVBQUE3SCxFQUFBLEdBRUFvNEQsRUFBQSxTQUFBcndCLEdBRUE3
K0IsS0FBQWdDLGdCQUFBLEtBRUFoQyxLQUFBdEQsVUFBQSxLQUNBc0QsS0FBQTdCLFlBQUEsS0FD
QTZCLEtBQUFtcEMsbUJBQUEsS0FDQW5wQyxLQUFBeEMsT0FBQSxFQUVBMkYsR0FBQStyRCxFQUFB
NzJELFdBQ0F3VixlQUFBLFNBQUF4TSxFQUFBME0sRUFBQUMsRUFBQWhMLEdBQ0EsR0FBQTJyRSxH
QUFBM2dFLEVBQUE0MEQsWUFDQTVpRSxNQUFBeEMsT0FBQW14RSxFQUNBM3VFLEtBQUE3QixZQUFB
NFAsRUFDQS9OLEtBQUFtcEMsbUJBQUFuN0IsQ0FFQSxJQUFBOVIsR0FBQSxpQkFBQThELEtBQUF4
QyxPQUFBLEdBQ0EsSUFBQTZELEVBQUFtbkMsaUJBQUEsQ0FDQSxHQUFBcHpCLEdBQUFwSCxFQUFB
NnlELGVBQ0FobEUsRUFBQXVaLEVBQUF3NUQsY0FBQTF5RSxFQUVBLE9BREF5QyxHQUFBcEMsYUFB
QXlELEtBQUFuRSxHQUNBb1UsRUFBQXBVLEdBRUEsTUFBQXdGLEdBQUFzaUUscUJBSUEsR0FFQSxV
QUFBem5FLEVBQUEsVUFHQXNTLGlCQUFBLGFBQ0FKLFlBQUEsV0FDQSxNQUFBelAsR0FBQVQsb0JB
QUE4QixPQUVBcU8saUJBQUEsV0FDQTFQLEVBQUEvQixZQUFBb0QsU0FJQTlJLEVBQUFELFFBQUFp
NEQsR2hLNi9uQk0sU0FBVWg0RCxFQUFRRCxFQUFTSCxHQUVqQyxZaUtyaW9CQSxTQUFBa3NCLEdB
QUE2ckQsRUFBQUMsR0FDQSxhQUFBRCxJQUFBbnhFLEVBQUEsTUFDQSxhQUFBb3hFLElBQUFweEUs
RUFBQSxLQUdBLFFBREFxeEUsR0FBQSxFQUNBQyxFQUFBSCxFQUF5QkcsRUFBT0EsSUFBQTd3RSxZ
QUNoQzR3RSxHQUdBLFFBREFFLEdBQUEsRUFDQUMsRUFBQUosRUFBeUJJLEVBQU9BLElBQUEvd0Us
WUFDaEM4d0UsR0FJQSxNQUFBRixFQUFBRSxFQUFBLEdBQ0FKLElBQUExd0UsWUFDQTR3RSxHQUlB
LE1BQUFFLEVBQUFGLEVBQUEsR0FDQUQsSUFBQTN3RSxZQUNBOHdFLEdBS0EsS0FEQSxHQUFBRSxH
QUFBSixFQUNBSSxLQUFBLENBQ0EsR0FBQU4sSUFBQUMsRUFDQSxNQUFBRCxFQUVBQSxLQUFBMXdF
LFlBQ0Eyd0UsSUFBQTN3RSxZQUVBLFlBTUEsUUFBQTRrQixHQUFBOHJELEVBQUFDLEdBQ0EsYUFB
QUQsSUFBQW54RSxFQUFBLE1BQ0EsYUFBQW94RSxJQUFBcHhFLEVBQUEsS0FFQSxNQUFBb3hFLEdB
QUEsQ0FDQSxHQUFBQSxJQUFBRCxFQUNBLFFBRUFDLEtBQUEzd0UsWUFFQSxTQU1BLFFBQUF3VCxH
QUFBblYsR0FHQSxNQUZBLGFBQUFBLElBQUFrQixFQUFBLE1BRUFsQixFQUFBMkIsWUFNQSxRQUFB
cVQsR0FBQWhWLEVBQUF5bUIsRUFBQXZqQixHQUVBLElBREEsR0FBQThuRCxNQUNBaHJELEdBQ0Fn
ckQsRUFBQTNwRCxLQUFBckIsR0FDQUEsSUFBQTJCLFdBRUEsSUFBQWhILEVBQ0EsS0FBQUEsRUFB
QXF3RCxFQUFBMXRELE9BQXVCM0MsS0FBQSxHQUN2QjhyQixFQUFBdWtDLEVBQUFyd0QsR0FBQSxX
QUFBdUksRUFFQSxLQUFBdkksRUFBQSxFQUFhQSxFQUFBcXdELEVBQUExdEQsT0FBaUIzQyxJQUM5
QjhyQixFQUFBdWtDLEVBQUFyd0QsR0FBQSxVQUFBdUksR0FXQSxRQUFBNFMsR0FBQTlXLEVBQUFF
LEVBQUF1bkIsRUFBQUMsRUFBQUMsR0FHQSxJQUZBLEdBQUFpc0QsR0FBQTV6RSxHQUFBRSxFQUFB
c25CLEVBQUF4bkIsRUFBQUUsR0FBQSxLQUNBMnpFLEtBQ0E3ekUsT0FBQTR6RSxHQUNBQyxFQUFB
eHhFLEtBQUFyQyxHQUNBQSxJQUFBMkMsV0FHQSxLQURBLEdBQUFteEUsTUFDQTV6RSxPQUFBMHpF
LEdBQ0FFLEVBQUF6eEUsS0FBQW5DLEdBQ0FBLElBQUF5QyxXQUVBLElBQUFoSCxFQUNBLEtBQUFB
LEVBQUEsRUFBYUEsRUFBQWs0RSxFQUFBdjFFLE9BQXFCM0MsSUFDbEM4ckIsRUFBQW9zRCxFQUFB
bDRFLEdBQUEsVUFBQStyQixFQUVBLEtBQUEvckIsRUFBQW00RSxFQUFBeDFFLE9BQXlCM0MsS0FB
QSxHQUN6QjhyQixFQUFBcXNELEVBQUFuNEUsR0FBQSxXQUFBZ3NCLEdBaEhBLEdBQUF6bEIsR0FB
QTVHLEVBQUEsRUFFQUEsR0FBQSxFQWtIQUksR0FBQUQsU0FDQThyQixhQUNBQywwQkFDQXJSLG9C
QUNBSCxtQkFDQWMsdUJqSytqb0JNLFNBQVVwYixFQUFRRCxFQUFTSCxHQUVqQyxZa0sxcm9CQSxJ
QUFBNEcsR0FBQTVHLEVBQUEsR0FDQXFNLEVBQUFyTSxFQUFBLEdBRUEwdUIsRUFBQTF1QixFQUFB
LElBQ0FtWixFQUFBblosRUFBQSxJQUNBNkgsRUFBQTdILEVBQUEsR0FFQTBpQixFQUFBMWlCLEVB
QUEsSUFtQkErM0QsR0FsQkEvM0QsRUFBQSxHQUNBQSxFQUFBLElBaUJBLFNBQUFzWSxHQUVBcFAs
S0FBQWdDLGdCQUFBb04sRUFDQXBQLEtBQUF1dkUsWUFBQSxHQUFBbmdFLEVBRUFwUCxLQUFBdEQs
VUFBQSxLQUNBc0QsS0FBQTdCLFlBQUEsS0FHQTZCLEtBQUF4QyxPQUFBLEVBQ0F3QyxLQUFBZytC
LFlBQUEsRUFDQWgrQixLQUFBd3ZFLGdCQUFBLEtBQ0F4dkUsS0FBQXl2RSxjQUFBLE1BR0F0c0Us
R0FBQTByRCxFQUFBeDJELFdBU0F3VixlQUFBLFNBQUF4TSxFQUFBME0sRUFBQUMsRUFBQWhMLEdB
RUEsR0FhQTJyRSxHQUFBM2dFLEVBQUE0MEQsYUFDQThNLEVBQUEsZ0JBQUFmLEVBQUEsR0FJQSxJ
QUZBM3VFLEtBQUF4QyxPQUFBbXhFLEVBQ0EzdUUsS0FBQTdCLFlBQUE0UCxFQUNBMU0sRUFBQW1u
QyxpQkFBQSxDQUNBLEdBQUFwekIsR0FBQXBILEVBQUE2eUQsZUFDQTk3QyxFQUFBM1AsRUFBQXc1
RCxjQUFBYyxHQUNBN3FELEVBQUF6UCxFQUFBdzVELGNBTkEsaUJBT0ExTCxFQUFBanpELEVBQUFt
RixFQUFBdTZELHlCQVFBLE9BUEExL0QsR0FBQVAsV0FBQXd6RCxFQUFBanpELEVBQUE4VSxJQUNB
L2tCLEtBQUF1dkUsYUFDQXQvRCxFQUFBUCxXQUFBd3pELEVBQUFqekQsRUFBQW1GLEVBQUFpUSxl
QUFBcmxCLEtBQUF1dkUsZUFFQXQvRCxFQUFBUCxXQUFBd3pELEVBQUFqekQsRUFBQTRVLElBQ0Fs
bUIsRUFBQXBDLGFBQUF5RCxLQUFBK2tCLEdBQ0Eva0IsS0FBQXd2RSxnQkFBQTNxRCxFQUNBcStD
LEVBRUEsR0FBQTBNLEdBQUFwMkQsRUFBQXhaLEtBQUF1dkUsWUFFQSxPQUFBbHVFLEdBQUFzaUUs
cUJBSUFpTSxFQUdBLFVBQUFGLEVBQUEsU0FBQUUsRUFBQSw4QkFXQXBoRSxpQkFBQSxTQUFBcWhF
LEVBQUF4dUUsR0FDQSxHQUFBd3VFLElBQUE3dkUsS0FBQWdDLGdCQUFBLENBQ0FoQyxLQUFBZ0Ms
Z0JBQUE2dEUsQ0FDQSxJQUFBQyxHQUFBLEdBQUFELENBQ0EsSUFBQUMsSUFBQTl2RSxLQUFBdXZF
LFlBQUEsQ0FJQXZ2RSxLQUFBdXZFLFlBQUFPLENBQ0EsSUFBQUMsR0FBQS92RSxLQUFBb08sYUFD
QW9YLEdBQUFOLHFCQUFBNnFELEVBQUEsR0FBQUEsRUFBQSxHQUFBRCxNQUtBMWhFLFlBQUEsV0FD
QSxHQUFBNGhFLEdBQUFod0UsS0FBQXl2RSxhQUNBLElBQUFPLEVBQ0EsTUFBQUEsRUFFQSxLQUFB
aHdFLEtBQUF3dkUsZ0JBR0EsSUFGQSxHQUFBenFELEdBQUFwbUIsRUFBQVQsb0JBQUE4QixNQUNB
bkUsRUFBQWtwQixFQUFBdG5CLGNBQ0EsQ0FFQSxHQURBLE1BQUE1QixHQUFBNkIsRUFBQSxLQUFB
c0MsS0FBQXhDLFFBQ0EsSUFBQTNCLEVBQUFFLFVBQUEsa0JBQUFGLEVBQUFLLFVBQUEsQ0FDQThE
LEtBQUF3dkUsZ0JBQUEzekUsQ0FDQSxPQUVBQSxJQUFBNEIsWUFLQSxNQUZBdXlFLElBQUFod0Us
S0FBQXRELFVBQUFzRCxLQUFBd3ZFLGlCQUNBeHZFLEtBQUF5dkUsY0FBQU8sRUFDQUEsR0FHQTNo
RSxpQkFBQSxXQUNBck8sS0FBQXd2RSxnQkFBQSxLQUNBeHZFLEtBQUF5dkUsY0FBQSxLQUNBOXdF
LEVBQUEvQixZQUFBb0QsU0FJQTlJLEVBQUFELFFBQUE0M0QsR2xLMnNvQk0sU0FBVTMzRCxFQUFR
RCxFQUFTSCxHQUVqQyxZbUs1MG9CQSxTQUFBbTVFLEtBQ0Fqd0UsS0FBQVEsMEJBdEJBLEdBQUEy
QyxHQUFBck0sRUFBQSxHQUVBc0osRUFBQXRKLEVBQUEsR0FDQXVNLEVBQUF2TSxFQUFBLElBRUEw
QyxFQUFBMUMsRUFBQSxHQUVBbzVFLEdBQ0Ezc0UsV0FBQS9KLEVBQ0FnSyxNQUFBLFdBQ0E0ckQs
RUFBQXZzRCxtQkFBQSxJQUlBc3RFLEdBQ0E1c0UsV0FBQS9KLEVBQ0FnSyxNQUFBcEQsRUFBQXNE
LG9CQUFBcUgsS0FBQTNLLElBR0EwRCxHQUFBcXNFLEVBQUFELEVBTUEvc0UsR0FBQThzRSxFQUFB
NTNFLFVBQUFnTCxHQUNBVSx1QkFBQSxXQUNBLE1BQUFELEtBSUEsSUFBQXpDLEdBQUEsR0FBQTR1
RSxHQUVBN2dCLEdBQ0F2c0QsbUJBQUEsRUFNQS9CLGVBQUEsU0FBQUMsRUFBQW5JLEVBQUFDLEVB
QUF0QixFQUFBQyxFQUFBc0IsR0FDQSxHQUFBczNFLEdBQUFoaEIsRUFBQXZzRCxpQkFLQSxPQUhB
dXNELEdBQUF2c0QsbUJBQUEsRUFHQXV0RSxFQUNBcnZFLEVBQUFuSSxFQUFBQyxFQUFBdEIsRUFB
QUMsRUFBQXNCLEdBRUF1SSxFQUFBNkMsUUFBQW5ELEVBQUEsS0FBQW5JLEVBQUFDLEVBQUF0QixF
QUFBQyxFQUFBc0IsSUFLQTVCLEdBQUFELFFBQUFtNEQsR25LazNvQk0sU0FBVWw0RCxFQUFRRCxF
QUFTSCxHQUVqQyxZb0sxNW9CQSxTQUFBdTVFLEdBQUE3ekUsR0FJQSxLQUFBQSxFQUFBMkIsYUFD
QTNCLElBQUEyQixXQUVBLElBQUEwcEUsR0FBQWxwRSxFQUFBVCxvQkFBQTFCLEdBQ0FrckMsRUFB
QW1nQyxFQUFBL3BFLFVBQ0EsT0FBQWEsR0FBQWhCLDJCQUFBK3BDLEdBSUEsUUFBQTRvQyxHQUFB
bDhELEVBQUFsUCxHQUNBbEYsS0FBQW9VLGVBQ0FwVSxLQUFBa0YsY0FDQWxGLEtBQUF1d0UsYUFX
QSxRQUFBQyxHQUFBdndCLEdBQ0EsR0FBQTk2QyxHQUFBNlAsRUFBQWlyQyxFQUFBLzZDLGFBQ0FE
LEVBQUF0RyxFQUFBaEIsMkJBQUF3SCxHQU1Bc3JFLEVBQUF4ckUsQ0FDQSxJQUNBZzdDLEVBQUFz
d0IsVUFBQTF5RSxLQUFBNHlFLEdBQ0FBLEtBQUFKLEVBQUFJLFNBQ0dBLEVBRUgsUUFBQXQ1RSxH
QUFBLEVBQWlCQSxFQUFBOG9ELEVBQUFzd0IsVUFBQXoyRSxPQUFrQzNDLElBQ25EOE4sRUFBQWc3
QyxFQUFBc3dCLFVBQUFwNUUsR0FDQWtuQixFQUFBcXlELGdCQUFBendCLEVBQUE3ckMsYUFBQW5Q
LEVBQUFnN0MsRUFBQS82QyxZQUFBOFAsRUFBQWlyQyxFQUFBLzZDLGNBSUEsUUFBQXlyRSxHQUFB
MWlELEdBRUFBLEVBREEyaUQsRUFBQS94RSxTQWhFQSxHQUFBc0UsR0FBQXJNLEVBQUEsR0FFQTZ0
QyxFQUFBN3RDLEVBQUEsSUFDQWtJLEVBQUFsSSxFQUFBLEdBQ0FzTSxFQUFBdE0sRUFBQSxJQUNB
NkgsRUFBQTdILEVBQUEsR0FDQXNKLEVBQUF0SixFQUFBLEdBRUFrZSxFQUFBbGUsRUFBQSxJQUNB
ODVFLEVBQUE5NUUsRUFBQSxJQXlCQXFNLEdBQUFtdEUsRUFBQWo0RSxXQUNBMkwsV0FBQSxXQUNB
aEUsS0FBQW9VLGFBQUEsS0FDQXBVLEtBQUFrRixZQUFBLEtBQ0FsRixLQUFBdXdFLFVBQUF6MkUs
T0FBQSxLQUdBc0osRUFBQWlCLGFBQUFpc0UsRUFBQWx0RSxFQUFBbUUsa0JBMkJBLElBQUE4VyxJ
QUNBd3lELFVBQUEsRUFDQUgsZ0JBQUEsS0FFQXR4RCxjQUFBcGdCLEVBQUFKLFVBQUFDLE9BQUEs
S0FFQTBmLGtCQUFBLFNBQUFDLEdBQ0FILEVBQUFxeUQsZ0JBQUFseUQsR0FHQUMsV0FBQSxTQUFB
QyxHQUNBTCxFQUFBd3lELFdBQUFueUQsR0FHQUMsVUFBQSxXQUNBLE1BQUFOLEdBQUF3eUQsVUFh
QTN4RCxpQkFBQSxTQUFBOUssRUFBQWlMLEVBQUE5VSxHQUNBLE1BQUFBLEdBR0FvNkIsRUFBQUMs
T0FBQXI2QixFQUFBOFUsRUFBQWhCLEVBQUF5eUQsY0FBQS9sRSxLQUFBLEtBQUFxSixJQUZBLE1B
ZUErSyxrQkFBQSxTQUFBL0ssRUFBQWlMLEVBQUE5VSxHQUNBLE1BQUFBLEdBR0FvNkIsRUFBQWxo
QixRQUFBbFosRUFBQThVLEVBQUFoQixFQUFBeXlELGNBQUEvbEUsS0FBQSxLQUFBcUosSUFGQSxN
QUtBeUwsbUJBQUEsU0FBQUYsR0FDQSxHQUFBNWUsR0FBQTR2RSxFQUFBNWxFLEtBQUEsS0FBQTRV
LEVBQ0FnbEIsR0FBQUMsT0FBQS9sQyxPQUFBLFNBQUFrQyxJQUdBK3ZFLGNBQUEsU0FBQTE4RCxF
QUFBbFAsR0FDQSxHQUFBbVosRUFBQXd5RCxTQUFBLENBSUEsR0FBQTV3QixHQUFBcXdCLEVBQUEx
dkUsVUFBQXdULEVBQUFsUCxFQUNBLEtBR0E5RSxFQUFBVSxlQUFBMHZFLEVBQUF2d0IsR0FDSyxR
QUNMcXdCLEVBQUFyc0UsUUFBQWc4QyxNQUtBL29ELEdBQUFELFFBQUFvbkIsR3BLMjdvQk0sU0FB
VW5uQixFQUFRRCxFQUFTSCxHQUVqQyxZcUs5anBCQSxTQUFBODVFLEdBQUFHLEdBQ0EsTUFBQUEs
R0FBQUMsUUFBQUQsZUFBQUMsUUFFQTN0RCxFQUFBMHRELEVBQUFFLGFBQUFGLEVBQUFqeUUsU0FB
QTR3QixnQkFBQXdoRCxXQUNBeG9ELEVBQUFxb0QsRUFBQUksYUFBQUosRUFBQWp5RSxTQUFBNHdC
LGdCQUFBMGhELFlBSUEvdEQsRUFBQTB0RCxFQUFBRyxXQUNBeG9ELEVBQUFxb0QsRUFBQUssV0FJ
QWw2RSxFQUFBRCxRQUFBMjVFLEdySzJscEJNLFNBQVUxNUUsRUFBUUQsRUFBU0gsR0FFakMsWXNL
dG5wQkEsSUFBQXNILEdBQUF0SCxFQUFBLElBQ0EwYixFQUFBMWIsRUFBQSxJQUNBeWEsRUFBQXph
LEVBQUEsSUFDQXN4QixFQUFBdHhCLEVBQUEsSUFDQTBtQyxFQUFBMW1DLEVBQUEsSUFDQXNuQixF
QUFBdG5CLEVBQUEsSUFDQTZtQyxFQUFBN21DLEVBQUEsSUFDQXNKLEVBQUF0SixFQUFBLEdBRUFv
M0QsR0FDQTdrRCxVQUFBK2UsRUFBQXhqQixVQUNBeEcsY0FBQXdHLFVBQ0FxcUQsZUFBQXp4QixF
QUFBNTRCLFVBQ0E0TixpQkFBQTVOLFVBQ0EyTSxtQkFBQTNNLFVBQ0F1cEQsYUFBQS92QyxFQUFB
eFosVUFDQStwRCxjQUFBaHhCLEVBQUEvNEIsVUFDQXVxRCxRQUFBL3VELEVBQUF3RSxVQUdBMU4s
R0FBQUQsUUFBQWkzRCxHdEt1b3BCTSxTQUFVaDNELEVBQVFELEVBQVNILEdBRWpDLFl1SzFqcEJB
LFNBQUF1SixHQUFBbW9DLEdBQ0F4b0MsS0FBQVEsMEJBTUFSLEtBQUEyakUsc0JBQUEsRUFDQTNq
RSxLQUFBcXhFLGdCQUFBMXdFLEVBQUFDLFVBQUEsTUFDQVosS0FBQXdvQyxtQkE1R0EsR0FBQXJs
QyxHQUFBck0sRUFBQSxHQUVBNkosRUFBQTdKLEVBQUEsSUFDQXNNLEVBQUF0TSxFQUFBLElBQ0Fz
bkIsRUFBQXRuQixFQUFBLElBQ0F1dUMsRUFBQXZ1QyxFQUFBLElBRUF1TSxHQURBdk0sRUFBQSxH
QUNBQSxFQUFBLEtBQ0FxekIsRUFBQXJ6QixFQUFBLElBTUF3NkUsR0FJQS90RSxXQUFBOGhDLEVB
QUFHLHdCQUlBaGlDLE1BQUE2aEMsRUFBQU8sa0JBUUEyckMsR0FLQWh1RSxXQUFBLFdBQ0EsR0FB
QWl1RSxHQUFBcHpELEVBQUFPLFdBRUEsT0FEQVAsR0FBQUssWUFBQSxHQUNBK3lELEdBUUFodUUs
TUFBQSxTQUFBaXVFLEdBQ0FyekQsRUFBQUssV0FBQWd6RCxLQVFBQyxHQUlBbnVFLFdBQUEsV0FD
QXZELEtBQUFxeEUsZ0JBQUF6dEUsU0FNQUosTUFBQSxXQUNBeEQsS0FBQXF4RSxnQkFBQXh0RSxj
QVNBQyxHQUFBd3RFLEVBQUFDLEVBQUFHLEdBbUNBL08sR0FRQTUrRCx1QkFBQSxXQUNBLE1BQUFE
LElBTUFxSyxtQkFBQSxXQUNBLE1BQUFuTyxNQUFBcXhFLGlCQU1BdEYsZUFBQSxXQUNBLE1BQUE1
aEQsSUFPQThGLFdBQUEsV0FFQSxNQUFBandCLE1BQUFxeEUsZ0JBQUFwaEQsY0FHQUMsU0FBQSxT
QUFBRCxHQUNBandCLEtBQUFxeEUsZ0JBQUFuaEQsU0FBQUQsSUFPQWpzQixXQUFBLFdBQ0FyRCxF
QUFBc0QsUUFBQWpFLEtBQUFxeEUsaUJBQ0FyeEUsS0FBQXF4RSxnQkFBQSxNQUlBbHVFLEdBQUE5
QyxFQUFBaEksVUFBQWdMLEVBQUFzL0QsR0FFQXYvRCxFQUFBaUIsYUFBQWhFLEdBRUFuSixFQUFB
RCxRQUFBb0osR3ZLOHFwQk0sU0FBVW5KLEVBQVFELEVBQVNILEdBRWpDLFl3SzEwcEJBLFNBQUE2
NkUsR0FBQUMsRUFBQUMsRUFBQW4vQyxFQUFBby9DLEdBQ0EsTUFBQUYsS0FBQWwvQyxHQUFBbS9D
LElBQUFDLEVBaUJBLFFBQUFDLEdBQUFsMkUsR0FDQSxHQUFBc3FDLEdBQUFybkMsU0FBQXFuQyxV
QUNBNnJDLEVBQUE3ckMsRUFBQUssY0FDQXlyQyxFQUFBRCxFQUFBNWlFLEtBQUF0VixPQUdBbzRF
LEVBQUFGLEVBQUFHLFdBQ0FELEdBQUFFLGtCQUFBdjJFLEdBQ0FxMkUsRUFBQUcsWUFBQSxhQUFB
TCxFQUVBLElBQUFNLEdBQUFKLEVBQUE5aUUsS0FBQXRWLE1BR0EsUUFDQXNzQyxNQUFBa3NDLEVB
Q0Foc0MsSUFKQWdzQyxFQUFBTCxHQVlBLFFBQUFNLEdBQUExMkUsR0FDQSxHQUFBc3FDLEdBQUF0
bkMsT0FBQThtQyxjQUFBOW1DLE9BQUE4bUMsY0FFQSxLQUFBUSxHQUFBLElBQUFBLEVBQUFxc0Ms
V0FDQSxXQUdBLElBQUFaLEdBQUF6ckMsRUFBQXlyQyxXQUNBQyxFQUFBMXJDLEVBQUEwckMsYUFD
QW4vQyxFQUFBeVQsRUFBQXpULFVBQ0FvL0MsRUFBQTNyQyxFQUFBMnJDLFlBRUFXLEVBQUF0c0Ms
RUFBQXVzQyxXQUFBLEVBU0EsS0FFQUQsRUFBQUUsZUFBQTUyRSxTQUNBMDJFLEVBQUFHLGFBQUE3
MkUsU0FFRyxNQUFBakQsR0FDSCxZQU1BLEdBQUErNUUsR0FBQWxCLEVBQUF4ckMsRUFBQXlyQyxX
QUFBenJDLEVBQUEwckMsYUFBQTFyQyxFQUFBelQsVUFBQXlULEVBQUEyckMsYUFFQWdCLEVBQUFE
LEVBQUEsRUFBQUosRUFBQWgwRSxXQUFBM0UsT0FFQWk1RSxFQUFBTixFQUFBTyxZQUNBRCxHQUFB
RSxtQkFBQXAzRSxHQUNBazNFLEVBQUFHLE9BQUFULEVBQUFFLGVBQUFGLEVBQUFILFlBRUEsSUFB
QWEsR0FBQXhCLEVBQUFvQixFQUFBSixlQUFBSSxFQUFBVCxZQUFBUyxFQUFBSCxhQUFBRyxFQUFB
SyxXQUVBaHRDLEVBQUErc0MsRUFBQSxFQUFBSixFQUFBdDBFLFdBQUEzRSxPQUNBd3NDLEVBQUFG
LEVBQUEwc0MsRUFHQU8sRUFBQXYwRSxTQUFBMG5DLGFBQ0E2c0MsR0FBQUMsU0FBQTFCLEVBQUFD
LEdBQ0F3QixFQUFBSCxPQUFBeGdELEVBQUFvL0MsRUFDQSxJQUFBeUIsR0FBQUYsRUFBQUcsU0FF
QSxRQUNBcHRDLE1BQUFtdEMsRUFBQWp0QyxFQUFBRixFQUNBRSxJQUFBaXRDLEVBQUFudEMsRUFB
QUUsR0FRQSxRQUFBbXRDLEdBQUE1M0UsRUFBQWdyQyxHQUNBLEdBQ0FULEdBQUFFLEVBREFwVSxF
QUFBcHpCLFNBQUFxbkMsVUFBQUssY0FBQTJyQyxnQkFHQWo1RSxLQUFBMnRDLEVBQUFQLEtBQ0FG
LEVBQUFTLEVBQUFULE1BQ0FFLEVBQUFGLEdBQ0dTLEVBQUFULE1BQUFTLEVBQUFQLEtBQ0hGLEVB
QUFTLEVBQUFQLElBQ0FBLEVBQUFPLEVBQUFULFFBRUFBLEVBQUFTLEVBQUFULE1BQ0FFLEVBQUFP
LEVBQUFQLEtBR0FwVSxFQUFBa2dELGtCQUFBdjJFLEdBQ0FxMkIsRUFBQXdVLFVBQUEsWUFBQU4s
R0FDQWxVLEVBQUFtZ0QsWUFBQSxhQUFBbmdELEdBQ0FBLEVBQUF5VSxRQUFBLFlBQUFMLEVBQUFG
LEdBQ0FsVSxFQUFBK1UsU0FlQSxRQUFBeXNDLEdBQUE3M0UsRUFBQWdyQyxHQUNBLEdBQUFob0Ms
T0FBQThtQyxhQUFBLENBSUEsR0FBQVEsR0FBQXRuQyxPQUFBOG1DLGVBQ0E3ckMsRUFBQStCLEVB
QUEyekIsS0FBQTExQixPQUNBc3NDLEVBQUE3bkMsS0FBQXVvQyxJQUFBRCxFQUFBVCxNQUFBdHND
LEdBQ0F3c0MsTUFBQXB0QyxLQUFBMnRDLEVBQUFQLElBQUFGLEVBQUE3bkMsS0FBQXVvQyxJQUFB
RCxFQUFBUCxJQUFBeHNDLEVBSUEsS0FBQXFzQyxFQUFBd3RDLFFBQUF2dEMsRUFBQUUsRUFBQSxD
QUNBLEdBQUFzdEMsR0FBQXR0QyxDQUNBQSxHQUFBRixFQUNBQSxFQUFBd3RDLEVBR0EsR0FBQUMs
R0FBQUMsRUFBQWo0RSxFQUFBdXFDLEdBQ0EydEMsRUFBQUQsRUFBQWo0RSxFQUFBeXFDLEVBRUEs
SUFBQXV0QyxHQUFBRSxFQUFBLENBQ0EsR0FBQTdoRCxHQUFBcHpCLFNBQUEwbkMsYUFDQXRVLEdB
QUFvaEQsU0FBQU8sRUFBQWg0RSxLQUFBZzRFLEVBQUFHLFFBQ0E3dEMsRUFBQTh0QyxrQkFFQTd0
QyxFQUFBRSxHQUNBSCxFQUFBK3RDLFNBQUFoaUQsR0FDQWlVLEVBQUF3dEMsT0FBQUksRUFBQWw0
RSxLQUFBazRFLEVBQUFDLFVBRUE5aEQsRUFBQWdoRCxPQUFBYSxFQUFBbDRFLEtBQUFrNEUsRUFB
QUMsUUFDQTd0QyxFQUFBK3RDLFNBQUFoaUQsTUFsTEEsR0FBQWx6QixHQUFBbEksRUFBQSxHQUVB
ZzlFLEVBQUFoOUUsRUFBQSxLQUNBMDRCLEVBQUExNEIsRUFBQSxJQW9MQXE5RSxFQUFBbjFFLEVB
QUFKLFdBQUEsYUFBQUUsYUFBQSxnQkFBQUQsU0FFQXNtQyxHQUlBeUIsV0FBQXV0QyxFQUFBcEMs
RUFBQVEsRUFNQXJyQyxXQUFBaXRDLEVBQUFWLEVBQUFDLEVBR0F4OEUsR0FBQUQsUUFBQWt1QyxH
eEtxMnBCTSxTQUFVanVDLEVBQVFELEVBQVNILEdBRWpDLFl5S3RpcUJBLFNBQUFzOUUsR0FBQXY0
RSxHQUNBLEtBQUFBLEtBQUF1QixZQUNBdkIsSUFBQXVCLFVBRUEsT0FBQXZCLEdBVUEsUUFBQXc0
RSxHQUFBeDRFLEdBQ0EsS0FBQUEsR0FBQSxDQUNBLEdBQUFBLEVBQUE0QixZQUNBLE1BQUE1QixH
QUFBNEIsV0FFQTVCLEtBQUFpQyxZQVdBLFFBQUFnMkUsR0FBQTVxQyxFQUFBOHFDLEdBS0EsSUFK
QSxHQUFBbjRFLEdBQUF1NEUsRUFBQWxyQyxHQUNBb3JDLEVBQUEsRUFDQUMsRUFBQSxFQUVBMTRF
LEdBQUEsQ0FDQSxPQUFBQSxFQUFBRSxTQUFBLENBR0EsR0FGQXc0RSxFQUFBRCxFQUFBejRFLEVB
QUE0MkIsWUFBQTM0QixPQUVBdzZFLEdBQUFOLEdBQUFPLEdBQUFQLEVBQ0EsT0FDQW40RSxPQUNB
bTRFLFNBQUFNLEVBSUFBLEdBQUFDLEVBR0ExNEUsRUFBQXU0RSxFQUFBQyxFQUFBeDRFLEtBSUEz
RSxFQUFBRCxRQUFBNjhFLEd6SzhqcUJNLFNBQVU1OEUsRUFBUUQsRUFBU0gsR0FFakMsWTBLcG5x
QkEsU0FBQW91QyxHQUFBc3ZDLEVBQUFDLEdBQ0EsU0FBQUQsSUFBQUMsS0FFR0QsSUFBQUMsSUFF
QUMsRUFBQUYsS0FFQUUsRUFBQUQsR0FDSHZ2QyxFQUFBc3ZDLEVBQUFDLEVBQUEzMkUsWUFDRyxZ
QUFBMDJFLEdBQ0hBLEVBQUFHLFNBQUFGLEtBQ0dELEVBQUFJLDRCQUNILEdBQUFKLEVBQUFJLHdC
QUFBSCxNQW5CQSxHQUFBQyxHQUFBNTlFLEVBQUEsSUF5QkFJLEdBQUFELFFBQUFpdUMsRzFLNm9x
Qk0sU0FBVWh1QyxFQUFRRCxFQUFTSCxHQUVqQyxZMktscXFCQSxTQUFBNDlFLEdBQUF2OEUsR0FD
QSxNQUFBMnhELEdBQUEzeEQsSUFBQSxHQUFBQSxFQUFBNEQsU0FQQSxHQUFBK3RELEdBQUFoekQs
RUFBQSxJQVVBSSxHQUFBRCxRQUFBeTlFLEczSzBycUJNLFNBQVV4OUUsRUFBUUQsRUFBU0gsR0FF
akMsWTRLbHNxQkEsU0FBQWd6RCxHQUFBM3hELEdBQ0EsR0FBQWdkLEdBQUFoZCxJQUFBaWQsZUFB
QWpkLEVBQUEyRyxTQUNBdVcsRUFBQUYsRUFBQUUsYUFBQXhXLE1BQ0EsVUFBQTFHLEtBQUEsbUJB
QUFrZCxHQUFBdy9ELEtBQUExOEUsWUFBQWtkLEdBQUF3L0QsS0FBQSxpQkFBQTE4RSxJQUFBLGlC
QUFBQSxHQUFBNEQsVUFBQSxpQkFBQTVELEdBQUE2WCxXQUdBOVksRUFBQUQsUUFBQTZ5RCxHNUt3
dHFCTSxTQUFVNXlELEVBQVFELEVBQVNILEdBRWpDLFk2S3J1cUJBLElBQUFnK0UsSUFDQUMsTUFB
QSwrQkFDQUMsSUFBQSx3Q0FvQkFDLEdBQ0FDLGFBQUEsZ0JBQ0FDLFdBQUEsRUFDQUMsU0FBQSxF
QUNBQyxrQkFBQSxxQkFDQUMsYUFBQSxlQUNBQyxXQUFBLEVBQ0FDLFVBQUEsRUFDQUMsV0FBQSxj
QUNBQyxPQUFBLEVBQ0E3b0UsY0FBQSxnQkFDQThvRSxjQUFBLGdCQUNBQyxZQUFBLGNBQ0FDLFFB
QUEsRUFDQUMsY0FBQSxnQkFDQUMsWUFBQSxjQUNBQyxjQUFBLGlCQUNBQyxLQUFBLEVBQ0FDLE1B
QUEsRUFDQUMsS0FBQSxFQUNBQyxHQUFBLEVBQ0FDLFNBQUEsV0FDQUMsVUFBQSxhQUNBQyxLQUFB
LEVBQ0FwdkIsU0FBQSxZQUNBcXZCLFNBQUEsWUFDQUMsY0FBQSxnQkFDQUMsbUJBQUEsc0JBQ0FD
LDBCQUFBLDhCQUNBQyxhQUFBLGdCQUNBQyxlQUFBLGtCQUNBQyxrQkFBQSxvQkFDQUMsaUJBQUEs
bUJBQ0FDLE9BQUEsRUFDQUMsR0FBQSxFQUNBQyxHQUFBLEVBQ0ExL0UsRUFBQSxFQUNBMi9FLFdB
QUEsRUFDQUMsUUFBQSxFQUNBQyxnQkFBQSxrQkFDQUMsVUFBQSxFQUNBQyxRQUFBLEVBQ0FDLFFB
QUEsRUFDQUMsaUJBQUEsb0JBQ0FDLElBQUEsRUFDQUMsR0FBQSxFQUNBQyxHQUFBLEVBQ0FDLFNB
QUEsV0FDQUMsVUFBQSxFQUNBQyxpQkFBQSxvQkFDQXp4QyxJQUFBLEVBQ0EweEMsU0FBQSxFQUNB
QywwQkFBQSw0QkFDQUMsS0FBQSxFQUNBampELFlBQUEsZUFDQWtqRCxTQUFBLFlBQ0FDLE9BQUEs
RUFDQUMsVUFBQSxZQUNBQyxZQUFBLGNBQ0FDLFdBQUEsY0FDQXJqRCxhQUFBLGdCQUNBc2pELFVB
QUEsRUFDQTVnRCxXQUFBLGNBQ0FELFNBQUEsWUFDQThnRCxlQUFBLG1CQUNBQyxZQUFBLGVBQ0Fq
aEQsVUFBQSxhQUNBQyxZQUFBLGVBQ0FuRCxXQUFBLGNBQ0E1N0IsT0FBQSxFQUNBNkMsS0FBQSxF
QUNBbTlFLEdBQUEsRUFDQUMsR0FBQSxFQUNBQyxHQUFBLEVBQ0FDLEdBQUEsRUFDQUMsVUFBQSxh
QUNBQywyQkFBQSwrQkFDQUMseUJBQUEsNkJBQ0FDLFNBQUEsV0FDQUMsa0JBQUEsb0JBQ0FDLGNB
QUEsZ0JBQ0FDLFFBQUEsRUFDQUMsVUFBQSxjQUNBQyxhQUFBLGlCQUNBQyxZQUFBLEVBQ0FDLGVB
QUEsa0JBQ0FDLEdBQUEsRUFDQUMsSUFBQSxFQUNBQyxVQUFBLEVBQ0FqMEQsRUFBQSxFQUNBazBE
LEdBQUEsRUFDQUMsR0FBQSxFQUNBQyxHQUFBLEVBQ0FDLEdBQUEsRUFDQUMsYUFBQSxlQUNBQyxp
QkFBQSxtQkFDQUMsUUFBQSxFQUNBQyxVQUFBLFlBQ0FDLFdBQUEsYUFDQUMsU0FBQSxXQUNBQyxh
QUFBLGVBQ0FDLGNBQUEsaUJBQ0FDLGNBQUEsaUJBQ0FDLGtCQUFBLG9CQUNBQyxNQUFBLEVBQ0FD
LFVBQUEsYUFDQUMsVUFBQSxhQUNBQyxZQUFBLGVBQ0FDLGFBQUEsZUFDQUMsWUFBQSxjQUNBQyxZ
QUFBLGNBQ0ExekIsS0FBQSxFQUNBMnpCLGlCQUFBLG1CQUNBQyxVQUFBLFlBQ0FDLGFBQUEsRUFD
QXYrQixLQUFBLEVBQ0F3K0IsV0FBQSxhQUNBckgsT0FBQSxFQUNBdC9DLFFBQUEsRUFDQTRtRCxT
QUFBLEVBQ0EzbUQsTUFBQSxFQUNBNG1ELE9BQUEsRUFDQUMsWUFBQSxFQUNBQyxPQUFBLEVBQ0FD
LFNBQUEsRUFDQUMsaUJBQUEsb0JBQ0FDLGtCQUFBLHFCQUNBQyxXQUFBLGNBQ0FDLFFBQUEsV0FD
QUMsV0FBQSxhQUNBQyxvQkFBQSxzQkFDQUMsaUJBQUEsbUJBQ0FDLGFBQUEsZUFDQUMsY0FBQSxp
QkFDQUMsT0FBQSxFQUNBQyxVQUFBLFlBQ0FDLFVBQUEsWUFDQUMsVUFBQSxZQUNBQyxjQUFBLGdC
QUNBQyxvQkFBQSxzQkFDQUMsZUFBQSxpQkFDQUMsRUFBQSxFQUNBQyxPQUFBLEVBQ0FDLEtBQUEs
T0FDQUMsS0FBQSxPQUNBQyxnQkFBQSxtQkFDQUMsWUFBQSxjQUNBQyxVQUFBLFlBQ0FDLG1CQUFB
LHFCQUNBQyxpQkFBQSxtQkFDQUMsUUFBQSxFQUNBaGpDLE9BQUEsRUFDQWlqQyxPQUFBLEVBQ0FD
LEdBQUEsRUFDQUMsR0FBQSxFQUNBQyxNQUFBLEVBQ0FDLEtBQUEsRUFDQUMsZUFBQSxrQkFDQUMs
TUFBQSxFQUNBQyxRQUFBLEVBQ0FDLGlCQUFBLG1CQUNBQyxpQkFBQSxtQkFDQUMsTUFBQSxFQUNB
QyxhQUFBLGVBQ0ExTCxZQUFBLGNBQ0EyTCxhQUFBLGVBQ0FDLE1BQUEsRUFDQUMsTUFBQSxFQUNB
QyxZQUFBLGNBQ0FDLFVBQUEsYUFDQWxwRCxZQUFBLGVBQ0FtcEQsc0JBQUEseUJBQ0FDLHVCQUFB
LDBCQUNBemxFLE9BQUEsRUFDQTBsRSxPQUFBLEVBQ0FwcEQsZ0JBQUEsbUJBQ0FDLGlCQUFBLG9C
QUNBb3BELGNBQUEsaUJBQ0FDLGVBQUEsa0JBQ0FwcEQsaUJBQUEsb0JBQ0FDLGNBQUEsaUJBQ0FD
LFlBQUEsZUFDQW1wRCxhQUFBLGVBQ0FDLGVBQUEsaUJBQ0FDLFlBQUEsY0FDQUMsUUFBQSxVQUNB
QyxRQUFBLFVBQ0FDLFdBQUEsY0FDQUMsZUFBQSxrQkFDQUMsY0FBQSxpQkFDQUMsV0FBQSxhQUNB
empGLEdBQUEsRUFDQTBqRixVQUFBLEVBQ0FDLEdBQUEsRUFDQUMsR0FBQSxFQUNBQyxrQkFBQSxx
QkFDQUMsbUJBQUEsc0JBQ0FDLFFBQUEsRUFDQUMsWUFBQSxlQUNBQyxhQUFBLGdCQUNBQyxXQUFB
LGVBQ0FDLFlBQUEsZUFDQUMsU0FBQSxZQUNBQyxhQUFBLGdCQUNBQyxjQUFBLGlCQUNBN21DLE9B
QUEsRUFDQThtQyxhQUFBLGdCQUNBdDJFLFFBQUEsRUFDQXUyRSxTQUFBLGFBQ0FDLFlBQUEsZ0JB
Q0FDLFlBQUEsZ0JBQ0FDLFFBQUEsVUFDQUMsV0FBQSxhQUNBQyxXQUFBLEVBQ0FDLE9BQUEsRUFD
QUMsWUFBQSxlQUNBQyxZQUFBLGVBQ0FyOUQsRUFBQSxFQUNBczlELFFBQUEsV0FDQUMsR0FBQSxF
QUNBQyxHQUFBLEVBQ0FDLGlCQUFBLG1CQUNBQyxhQUFBLGdCQUNBQyxhQUFBLGdCQUNBQyxVQUFB
LGFBQ0FDLFVBQUEsYUFDQUMsVUFBQSxhQUNBQyxXQUFBLGNBQ0FDLFVBQUEsYUFDQUMsUUFBQSxX
QUNBQyxNQUFBLEVBQ0FDLFdBQUEsY0FDQUMsUUFBQSxXQUNBQyxTQUFBLFlBQ0FoNUQsRUFBQSxF
QUNBaTVELEdBQUEsRUFDQUMsR0FBQSxFQUNBQyxpQkFBQSxtQkFDQUMsRUFBQSxFQUNBQyxXQUFB
LGNBR0EveUIsR0FDQS9pRCxjQUNBQyx3QkFDQTYwRSxhQUFBak0sRUFBQUMsTUFDQWlNLGFBQUFs
TSxFQUFBQyxNQUNBa00sVUFBQW5NLEVBQUFDLE1BQ0FtTSxVQUFBcE0sRUFBQUMsTUFDQW9NLFVB
QUFyTSxFQUFBQyxNQUNBcU0sV0FBQXRNLEVBQUFDLE1BQ0FzTSxVQUFBdk0sRUFBQUMsTUFDQXVN
LFFBQUF4TSxFQUFBRSxJQUNBeU0sUUFBQTNNLEVBQUFFLElBQ0EwTSxTQUFBNU0sRUFBQUUsS0FF
QTdvRSxxQkFHQXZVLFFBQUF3RCxLQUFBNjVFLEdBQUEvNUUsUUFBQSxTQUFBUyxHQUNBcXpELEVB
QUEvaUQsV0FBQXRRLEdBQUEsRUFDQXM1RSxFQUFBdDVFLEtBQ0FxekQsRUFBQTdpRCxrQkFBQXhR
LEdBQUFzNUUsRUFBQXQ1RSxNQUlBekUsRUFBQUQsUUFBQSszRCxHN0tzdnFCTSxTQUFVOTNELEVB
QVFELEVBQVNILEdBRWpDLFk4S2gvcUJBLFNBQUE2dUMsR0FBQTlwQyxHQUNBLHFCQUFBQSxJQUFB
d3BDLEVBQUFDLHlCQUFBenBDLEdBQ0EsT0FDQXVxQyxNQUFBdnFDLEVBQUF3cUMsZUFDQUMsSUFB
QXpxQyxFQUFBMHFDLGFBRUcsSUFBQTFuQyxPQUFBOG1DLGFBQUEsQ0FDSCxHQUFBUSxHQUFBdG5D
LE9BQUE4bUMsY0FDQSxRQUNBaXNDLFdBQUF6ckMsRUFBQXlyQyxXQUNBQyxhQUFBMXJDLEVBQUEw
ckMsYUFDQW4vQyxVQUFBeVQsRUFBQXpULFVBQ0FvL0MsWUFBQTNyQyxFQUFBMnJDLGFBRUcsR0FB
QWh6RSxTQUFBcW5DLFVBQUEsQ0FDSCxHQUFBalUsR0FBQXB6QixTQUFBcW5DLFVBQUFLLGFBQ0Es
UUFDQUMsY0FBQXZVLEVBQUF1VSxnQkFDQXIzQixLQUFBOGlCLEVBQUE5aUIsS0FDQTR5RSxJQUFB
OXZELEVBQUErdkQsWUFDQUMsS0FBQWh3RCxFQUFBaXdELGVBV0EsUUFBQUMsR0FBQWw5RSxFQUFB
QyxHQUtBLEdBQUFrOUUsR0FBQSxNQUFBbDdDLE9BQUEvQixJQUNBLFdBSUEsSUFBQWs5QyxHQUFB
MzhDLEVBQUF3QixFQUNBLEtBQUFvN0MsSUFBQTU1RCxFQUFBNDVELEVBQUFELEdBQUEsQ0FDQUMs
RUFBQUQsQ0FFQSxJQUFBcitELEdBQUFsZixFQUFBbkUsVUFBQWlnQixFQUFBb21CLE9BQUFtdUIs
RUFBQWx3RCxFQUFBQyxFQU9BLE9BTEE4ZSxHQUFBaGlCLEtBQUEsU0FDQWdpQixFQUFBM29CLE9B
QUE2ckMsRUFFQTEwQixFQUFBViw2QkFBQWtTLEdBRUFBLEVBR0EsWUEvRkEsR0FBQXhSLEdBQUEz
YixFQUFBLElBQ0FrSSxFQUFBbEksRUFBQSxHQUNBNkgsRUFBQTdILEVBQUEsR0FDQXV1QyxFQUFB
dnVDLEVBQUEsSUFDQWlPLEVBQUFqTyxFQUFBLElBRUFzdUMsRUFBQXR1QyxFQUFBLElBQ0EwNkIs
RUFBQTE2QixFQUFBLElBQ0E2eEIsRUFBQTd4QixFQUFBLElBRUEwckYsRUFBQXhqRixFQUFBSixX
QUFBLGdCQUFBRSxvQkFBQXNSLGNBQUEsR0FFQXlRLEdBQ0FvbUIsUUFDQW4yQix5QkFDQXFqRCxR
QUFBLFdBQ0FDLFNBQUEsbUJBRUFyMUMsY0FBQSxrSEFJQW9vQixFQUFBLEtBQ0FpdUIsRUFBQSxL
QUNBbXRCLEVBQUEsS0FDQUYsR0FBQSxFQUlBSSxHQUFBLEVBbUZBaDBCLEdBQ0E1dEMsYUFFQTFN
LGNBQUEsU0FBQUMsRUFBQW5QLEVBQUFDLEVBQUFDLEdBQ0EsSUFBQXM5RSxFQUNBLFdBR0EsSUFB
QTdyQixHQUFBM3hELEVBQUF0RyxFQUFBVCxvQkFBQStHLEdBQUFwRyxNQUVBLFFBQUF1VixHQUVB
LGdCQUNBb2QsRUFBQW9sQyxJQUFBLFNBQUFBLEVBQUFyeEIsbUJBQ0E0QixFQUFBeXZCLEVBQ0F4
QixFQUFBbndELEVBQ0FzOUUsRUFBQSxLQUVBLE1BQ0EsZUFDQXA3QyxFQUFBLEtBQ0FpdUIsRUFB
QSxLQUNBbXRCLEVBQUEsSUFDQSxNQUdBLG9CQUNBRixHQUFBLENBQ0EsTUFDQSxzQkFDQSxpQkFF
QSxNQURBQSxJQUFBLEVBQ0FELEVBQUFsOUUsRUFBQUMsRUFVQSwwQkFDQSxHQUFBcTlFLEVBQ0Es
S0FHQSxrQkFDQSxlQUNBLE1BQUFKLEdBQUFsOUUsRUFBQUMsR0FHQSxhQUdBMk8sZUFBQSxTQUFB
dFgsRUFBQXFVLEVBQUFLLEdBQ0EsYUFBQUwsSUFDQTR4RSxHQUFBLElBS0F2ckYsR0FBQUQsUUFB
QXczRCxHOUt5aXJCTSxTQUFVdjNELEVBQVFELEVBQVNILEdBRWpDLFkrSzdwckJBLFNBQUF5YyxH
QUFBL1csR0FHQSxVQUFBQSxFQUFBZ1gsWUFHQSxRQUFBZCxHQUFBQyxHQUNBLGlCQUFBQSxHQUFB
LFVBQUFBLEdBQUEsV0FBQUEsR0FBQSxhQUFBQSxFQWxFQSxHQUFBalYsR0FBQTVHLEVBQUEsR0FF
QTZ0QyxFQUFBN3RDLEVBQUEsSUFDQTJiLEVBQUEzYixFQUFBLElBQ0E2SCxFQUFBN0gsRUFBQSxH
QUNBNHJGLEVBQUE1ckYsRUFBQSxLQUNBNnJGLEVBQUE3ckYsRUFBQSxLQUNBaU8sRUFBQWpPLEVB
QUEsSUFDQThyRixFQUFBOXJGLEVBQUEsS0FDQStyRixFQUFBL3JGLEVBQUEsS0FDQTZmLEVBQUE3
ZixFQUFBLElBQ0Fnc0YsRUFBQWhzRixFQUFBLEtBQ0Fpc0YsRUFBQWpzRixFQUFBLEtBQ0Frc0Ys
RUFBQWxzRixFQUFBLEtBQ0FnZSxFQUFBaGUsRUFBQSxJQUNBbXNGLEVBQUFuc0YsRUFBQSxLQUVB
MEMsRUFBQTFDLEVBQUEsR0FDQXMwQixFQUFBdDBCLEVBQUEsSUFxQkErcEIsR0FwQkEvcEIsRUFB
QSxPQXFCQW9zRixNQUNBLHFxQkFBQWhvRixRQUFBLFNBQUFrTCxHQUNBLEdBQUErOEUsR0FBQS84
RSxFQUFBLEdBQUEyc0IsY0FBQTNzQixFQUFBMUgsTUFBQSxHQUNBMGtGLEVBQUEsS0FBQUQsRUFD
QUUsRUFBQSxNQUFBRixFQUVBbGhGLEdBQ0E2Tyx5QkFDQXFqRCxRQUFBaXZCLEVBQ0FodkIsU0FB
QWd2QixFQUFBLFdBRUFya0UsY0FBQXNrRSxHQUVBeGlFLEdBQUF6YSxHQUFBbkUsRUFDQWloRixF
QUFBRyxHQUFBcGhGLEdBR0EsSUFBQXFoRixNQVlBaDFCLEdBQ0F6dEMsYUFFQTFNLGNBQUEsU0FB
QUMsRUFBQW5QLEVBQUFDLEVBQUFDLEdBQ0EsR0FBQUgsR0FBQWsrRSxFQUFBOXVFLEVBQ0EsS0FB
QXBQLEVBQ0EsV0FFQSxJQUFBdStFLEVBQ0EsUUFBQW52RSxHQUNBLGVBQ0EsaUJBQ0Esd0JBQ0Es
d0JBQ0EsaUJBQ0EsbUJBQ0EsZUFDQSxlQUNBLGVBQ0EsaUJBQ0EsY0FDQSxvQkFDQSx3QkFDQSxt
QkFDQSxlQUNBLGNBQ0EsaUJBQ0Esa0JBQ0Esb0JBQ0EsZUFDQSxnQkFDQSxpQkFDQSxpQkFDQSxn
QkFDQSxpQkFDQSxvQkFDQSxzQkFDQSxpQkFHQW12RSxFQUFBeCtFLENBQ0EsTUFDQSxtQkFJQSxP
QUFBcW1CLEVBQUFsbUIsR0FDQSxXQUdBLGtCQUNBLGVBQ0FxK0UsRUFBQVYsQ0FDQSxNQUNBLGVB
Q0EsZUFDQVUsRUFBQVgsQ0FDQSxNQUNBLGdCQUdBLE9BQUExOUUsRUFBQXNTLE9BQ0EsV0FHQSxz
QkFDQSxtQkFDQSxtQkFDQSxpQkFHQSxrQkFDQSxtQkFDQSxxQkFDQStyRSxFQUFBNXNFLENBQ0Es
TUFDQSxlQUNBLGlCQUNBLG1CQUNBLGtCQUNBLG1CQUNBLGtCQUNBLG1CQUNBLGNBQ0E0c0UsRUFB
QVQsQ0FDQSxNQUNBLHNCQUNBLGtCQUNBLG1CQUNBLG9CQUNBUyxFQUFBUixDQUNBLE1BQ0EsdUJB
Q0EsNEJBQ0Esd0JBQ0FRLEVBQUFiLENBQ0EsTUFDQSx3QkFDQWEsRUFBQVAsQ0FDQSxNQUNBLGlC
QUNBTyxFQUFBenVFLENBQ0EsTUFDQSxnQkFDQXl1RSxFQUFBTixDQUNBLE1BQ0EsZUFDQSxhQUNB
LGVBQ0FNLEVBQUFaLEVBR0FZLEdBQUE3bEYsRUFBQSxLQUFBMFcsRUFDQSxJQUFBaE8sR0FBQW05
RSxFQUFBM2lGLFVBQUFvRSxFQUFBQyxFQUFBQyxFQUFBQyxFQUVBLE9BREFzTixHQUFBViw2QkFB
QTNMLEdBQ0FBLEdBR0EwTixlQUFBLFNBQUF0WCxFQUFBcVUsRUFBQUssR0FNQSxlQUFBTCxJQUFB
NkIsRUFBQWxXLEVBQUE0akUsTUFBQSxDQUNBLEdBQUF6a0UsR0FBQTRYLEVBQUEvVyxHQUNBWCxF
QUFBOEMsRUFBQVQsb0JBQUExQixFQUNBOG1GLEdBQUEzbkYsS0FDQTJuRixFQUFBM25GLEdBQUFn
cEMsRUFBQUMsT0FBQS9vQyxFQUFBLFFBQUFyQyxNQUtBeWEsbUJBQUEsU0FBQXpYLEVBQUFxVSxH
QUNBLGVBQUFBLElBQUE2QixFQUFBbFcsRUFBQTRqRSxNQUFBLENBQ0EsR0FBQXprRSxHQUFBNFgs
RUFBQS9XLEVBQ0E4bUYsR0FBQTNuRixHQUFBOFosZUFDQTZ0RSxHQUFBM25GLEtBS0F6RSxHQUFB
RCxRQUFBcTNELEcvSzB1ckJNLFNBQVVwM0QsRUFBUUQsRUFBU0gsR0FFakMsWWdMNzZyQkEsU0FB
QTRyRixHQUFBMTlFLEVBQUErUCxFQUFBN1AsRUFBQUMsR0FDQSxNQUFBSixHQUFBMU4sS0FBQTJJ
LEtBQUFnRixFQUFBK1AsRUFBQTdQLEVBQUFDLEdBcEJBLEdBQUFKLEdBQUFqTyxFQUFBLElBT0Ew
c0YsR0FDQUMsY0FBQSxLQUNBQyxZQUFBLEtBQ0FDLGNBQUEsS0FhQTUrRSxHQUFBOEIsYUFBQTY3
RSxFQUFBYyxHQUVBdHNGLEVBQUFELFFBQUF5ckYsR2hMaTlyQk0sU0FBVXhyRixFQUFRRCxFQUFT
SCxHQUVqQyxZaUwxOXJCQSxTQUFBNnJGLEdBQUEzOUUsRUFBQStQLEVBQUE3UCxFQUFBQyxHQUNB
LE1BQUFKLEdBQUExTixLQUFBMkksS0FBQWdGLEVBQUErUCxFQUFBN1AsRUFBQUMsR0FuQkEsR0FB
QUosR0FBQWpPLEVBQUEsSUFNQThzRixHQUNBQyxjQUFBLFNBQUF6OUUsR0FDQSx1QkFBQUEsS0FB
QXk5RSxjQUFBaGxGLE9BQUFnbEYsZUFjQTkrRSxHQUFBOEIsYUFBQTg3RSxFQUFBaUIsR0FFQTFz
RixFQUFBRCxRQUFBMHJGLEdqTDYvckJNLFNBQVV6ckYsRUFBUUQsRUFBU0gsR0FFakMsWWtMdmdz
QkEsU0FBQThyRixHQUFBNTlFLEVBQUErUCxFQUFBN1AsRUFBQUMsR0FDQSxNQUFBMlAsR0FBQXpk
LEtBQUEySSxLQUFBZ0YsRUFBQStQLEVBQUE3UCxFQUFBQyxHQWpCQSxHQUFBMlAsR0FBQWhlLEVB
QUEsSUFNQWd0RixHQUNBcHNFLGNBQUEsS0FhQTVDLEdBQUFqTyxhQUFBKzdFLEVBQUFrQixHQUVB
NXNGLEVBQUFELFFBQUEyckYsR2xMd2lzQk0sU0FBVTFyRixFQUFRRCxFQUFTSCxHQUVqQyxZbUxo
Z3NCQSxTQUFBK3JGLEdBQUE3OUUsRUFBQStQLEVBQUE3UCxFQUFBQyxHQUNBLE1BQUEyUCxHQUFB
emQsS0FBQTJJLEtBQUFnRixFQUFBK1AsRUFBQTdQLEVBQUFDLEdBakVBLEdBQUEyUCxHQUFBaGUs
RUFBQSxJQUVBczBCLEVBQUF0MEIsRUFBQSxJQUNBaXRGLEVBQUFqdEYsRUFBQSxLQUNBK2YsRUFB
QS9mLEVBQUEsSUFNQWt0RixHQUNBcm9GLElBQUFvb0YsRUFDQTNsQyxTQUFBLEtBQ0FqbkMsUUFB
QSxLQUNBQyxTQUFBLEtBQ0FDLE9BQUEsS0FDQUMsUUFBQSxLQUNBMnNFLE9BQUEsS0FDQUMsT0FB
QSxLQUNBM3NFLGlCQUFBVixFQUVBd1UsU0FBQSxTQUFBamxCLEdBTUEsbUJBQUFBLEVBQUFuRSxL
QUNBbXBCLEVBQUFobEIsR0FFQSxHQUVBa2xCLFFBQUEsU0FBQWxsQixHQVFBLGtCQUFBQSxFQUFB
bkUsTUFBQSxVQUFBbUUsRUFBQW5FLEtBQ0FtRSxFQUFBa2xCLFFBRUEsR0FFQW1wQixNQUFBLFNB
QUFydUMsR0FHQSxtQkFBQUEsRUFBQW5FLEtBQ0FtcEIsRUFBQWhsQixHQUVBLFlBQUFBLEVBQUFu
RSxNQUFBLFVBQUFtRSxFQUFBbkUsS0FDQW1FLEVBQUFrbEIsUUFFQSxHQWNBeFcsR0FBQWpPLGFB
QUFnOEUsRUFBQW1CLEdBRUE5c0YsRUFBQUQsUUFBQTRyRixHbkxpbHNCTSxTQUFVM3JGLEVBQVFE
LEVBQVNILEdBRWpDLFlvTHBsc0JBLFNBQUFpdEYsR0FBQTcrRSxHQUNBLEdBQUFBLEVBQUF2SixJ
QUFBLENBTUEsR0FBQUEsR0FBQXdvRixFQUFBai9FLEVBQUF2SixNQUFBdUosRUFBQXZKLEdBQ0Es
cUJBQUFBLEVBQ0EsTUFBQUEsR0FLQSxnQkFBQXVKLEVBQUFqRCxLQUFBLENBQ0EsR0FBQW9wQixH
QUFBRCxFQUFBbG1CLEVBSUEsYUFBQW1tQixFQUFBLFFBQUEzd0IsT0FBQUcsYUFBQXd3QixHQUVB
LGtCQUFBbm1CLEVBQUFqRCxNQUFBLFVBQUFpRCxFQUFBakQsS0FHQW1pRixFQUFBbC9FLEVBQUFv
bUIsVUFBQSxlQUVBLEdBL0ZBLEdBQUFGLEdBQUF0MEIsRUFBQSxJQU1BcXRGLEdBQ0FFLElBQUEs
U0FDQUMsU0FBQSxJQUNBQyxLQUFBLFlBQ0FDLEdBQUEsVUFDQUMsTUFBQSxhQUNBQyxLQUFBLFlB
Q0FDLElBQUEsU0FDQUMsSUFBQSxLQUNBQyxLQUFBLGNBQ0FDLEtBQUEsY0FDQUMsT0FBQSxhQUNB
QyxnQkFBQSxnQkFRQVosR0FDQWEsRUFBQSxZQUNBQyxFQUFBLE1BQ0FDLEdBQUEsUUFDQUMsR0FB
QSxRQUNBQyxHQUFBLFFBQ0FDLEdBQUEsVUFDQUMsR0FBQSxNQUNBQyxHQUFBLFFBQ0FDLEdBQUEs
V0FDQUMsR0FBQSxTQUNBQyxHQUFBLElBQ0FDLEdBQUEsU0FDQUMsR0FBQSxXQUNBQyxHQUFBLE1B
Q0FDLEdBQUEsT0FDQUMsR0FBQSxZQUNBQyxHQUFBLFVBQ0FDLEdBQUEsYUFDQUMsR0FBQSxZQUNB
QyxHQUFBLFNBQ0FDLEdBQUEsU0FDQUMsSUFBQSxLQUNBQyxJQUFBLEtBQ0FDLElBQUEsS0FDQUMs
SUFBQSxLQUNBQyxJQUFBLEtBQ0FDLElBQUEsS0FDQUMsSUFBQSxLQUNBQyxJQUFBLEtBQ0FDLElB
QUEsS0FDQUMsSUFBQSxNQUNBQyxJQUFBLE1BQ0FDLElBQUEsTUFDQUMsSUFBQSxVQUNBQyxJQUFB
LGFBQ0FDLElBQUEsT0FvQ0Fsd0YsR0FBQUQsUUFBQThzRixHcEwwcXNCTSxTQUFVN3NGLEVBQVFE
LEVBQVNILEdBRWpDLFlxTDl2c0JBLFNBQUFnc0YsR0FBQTk5RSxFQUFBK1AsRUFBQTdQLEVBQUFD
LEdBQ0EsTUFBQXdSLEdBQUF0ZixLQUFBMkksS0FBQWdGLEVBQUErUCxFQUFBN1AsRUFBQUMsR0Fq
QkEsR0FBQXdSLEdBQUE3ZixFQUFBLElBTUF1d0YsR0FDQUMsYUFBQSxLQWFBM3dFLEdBQUE5UCxh
QUFBaThFLEVBQUF1RSxHQUVBbndGLEVBQUFELFFBQUE2ckYsR3JMK3hzQk0sU0FBVTVyRixFQUFR
RCxFQUFTSCxHQUVqQyxZc0w5eHNCQSxTQUFBaXNGLEdBQUEvOUUsRUFBQStQLEVBQUE3UCxFQUFB
QyxHQUNBLE1BQUEyUCxHQUFBemQsS0FBQTJJLEtBQUFnRixFQUFBK1AsRUFBQTdQLEVBQUFDLEdB
MUJBLEdBQUEyUCxHQUFBaGUsRUFBQSxJQUVBK2YsRUFBQS9mLEVBQUEsSUFNQXl3RixHQUNBQyxR
QUFBLEtBQ0FDLGNBQUEsS0FDQUMsZUFBQSxLQUNBcndFLE9BQUEsS0FDQUMsUUFBQSxLQUNBSCxR
QUFBLEtBQ0FDLFNBQUEsS0FDQUcsaUJBQUFWLEVBYUEvQixHQUFBak8sYUFBQWs4RSxFQUFBd0Us
R0FFQXJ3RixFQUFBRCxRQUFBOHJGLEd0THcwc0JNLFNBQVU3ckYsRUFBUUQsRUFBU0gsR0FFakMs
WXVMdDFzQkEsU0FBQWtzRixHQUFBaCtFLEVBQUErUCxFQUFBN1AsRUFBQUMsR0FDQSxNQUFBSixH
QUFBMU4sS0FBQTJJLEtBQUFnRixFQUFBK1AsRUFBQTdQLEVBQUFDLEdBcEJBLEdBQUFKLEdBQUFq
TyxFQUFBLElBT0E2d0YsR0FDQTU2RSxhQUFBLEtBQ0EyMkUsWUFBQSxLQUNBQyxjQUFBLEtBYUE1
K0UsR0FBQThCLGFBQUFtOEUsRUFBQTJFLEdBRUF6d0YsRUFBQUQsUUFBQStyRixHdkwwM3NCTSxT
QUFVOXJGLEVBQVFELEVBQVNILEdBRWpDLFl3THQzc0JBLFNBQUFtc0YsR0FBQWorRSxFQUFBK1As
RUFBQTdQLEVBQUFDLEdBQ0EsTUFBQXdSLEdBQUF0ZixLQUFBMkksS0FBQWdGLEVBQUErUCxFQUFB
N1AsRUFBQUMsR0FoQ0EsR0FBQXdSLEdBQUE3ZixFQUFBLElBTUE4d0YsR0FDQUMsT0FBQSxTQUFB
emhGLEdBQ0EsZ0JBQUFBLEtBQUF5aEYsT0FDQSxlQUFBemhGLE1BQUEwaEYsWUFBQSxHQUVBQyxP
QUFBLFNBQUEzaEYsR0FDQSxnQkFBQUEsS0FBQTJoRixPQUNBLGVBQUEzaEYsTUFBQTRoRixZQUNB
LGNBQUE1aEYsTUFBQTZoRixXQUFBLEdBRUFDLE9BQUEsS0FNQUMsVUFBQSxLQWFBeHhFLEdBQUE5
UCxhQUFBbzhFLEVBQUEyRSxHQUVBMXdGLEVBQUFELFFBQUFnc0YsR3hMczZzQk0sU0FBVS9yRixF
QUFRRCxFQUFTSCxHQUVqQyxZeUx6OHNCQSxTQUFBbXhDLEdBQUFtZ0QsRUFBQXZzRixHQUNBLEdB
QUE2aEMsSUFDQXdLLGlCQUFBa2dELEVBQ0F4bEIsV0FBQSxFQUNBL0IsZUFBQWhsRSxJQUFBRSxX
QUFBNHJDLEVBQUE5ckMsSUFBQXVaLGNBQUEsS0FDQXVyRCxNQUFBOWtFLEVBQ0F1a0UsS0FBQXZr
RSxJQUFBbVUsU0FBQXRELGNBQUEsS0FDQXExRCxjQUFBbG1FLElBQUE0VSxhQUFBLEtBS0EsT0FB
QWl0QixHQWhCQSxHQUVBaUssSUFGQTd3QyxFQUFBLElBRUEsRUFpQkFJLEdBQUFELFFBQUFneEMs
R3pMODlzQk0sU0FBVS93QyxFQUFRRCxFQUFTSCxHQUVqQyxZMExuL3NCQSxJQUFBeXhDLElBQ0FD
LGtCQUFBLEVBQ0E2L0MsVUFBQSxFQUdBbnhGLEdBQUFELFFBQUFzeEMsRzFMb2d0Qk0sU0FBVXJ4
QyxFQUFRRCxFQUFTSCxHQUVqQyxZMkwzZ3RCQSxJQUFBd3hGLEdBQUF4eEYsRUFBQSxLQUVBeXhG
LEVBQUEsT0FDQUMsRUFBQSxXQUVBcC9DLEdBQ0ErQixtQkFBQSxzQkFNQXM5QyxvQkFBQSxTQUFB
djZFLEdBQ0EsR0FBQWc5QixHQUFBbzlDLEVBQUFwNkUsRUFHQSxPQUFBczZFLEdBQUFqNEUsS0FB
QXJDLEdBQ0FBLEVBRUFBLEVBQUE1VSxRQUFBaXZGLEVBQUEsSUFBQW4vQyxFQUFBK0IsbUJBQUEs
S0FBQUQsRUFBQSxRQVNBRCxlQUFBLFNBQUEvOEIsRUFBQTNELEdBQ0EsR0FBQW0rRSxHQUFBbitF
LEVBQUF2TyxhQUFBb3RDLEVBQUErQixtQkFHQSxPQUZBdTlDLE1BQUFqbUQsU0FBQWltRCxFQUFB
LElBQ0FKLEVBQUFwNkUsS0FDQXc2RSxHQUlBeHhGLEdBQUFELFFBQUFteUMsRzNMNGh0Qk0sU0FB
VWx5QyxFQUFRRCxFQUFTSCxHQUVqQyxZNEwxanRCQSxTQUFBd3hGLEdBQUE1dkUsR0FNQSxJQUxB
LEdBQUE5ZixHQUFBLEVBQ0FDLEVBQUEsRUFDQTFCLEVBQUEsRUFDQUMsRUFBQXNoQixFQUFBNWUs
T0FDQXhDLEdBQUEsRUFBQUYsRUFDQUQsRUFBQUcsR0FBQSxDQUVBLElBREEsR0FBQVcsR0FBQXNH
LEtBQUF1b0MsSUFBQTN2QyxFQUFBLEtBQUFHLEdBQ1VILEVBQUFjLEVBQU9kLEdBQUEsRUFDakIw
QixJQUFBRCxHQUFBOGYsRUFBQVksV0FBQW5pQixLQUFBeUIsR0FBQThmLEVBQUFZLFdBQUFuaUIs
RUFBQSxLQUFBeUIsR0FBQThmLEVBQUFZLFdBQUFuaUIsRUFBQSxLQUFBeUIsR0FBQThmLEVBQUFZ
LFdBQUFuaUIsRUFBQSxHQUVBeUIsSUFBQSt2RixFQUNBOXZGLEdBQUE4dkYsRUFFQSxLQUFReHhG
LEVBQUFDLEVBQU9ELElBQ2YwQixHQUFBRCxHQUFBOGYsRUFBQVksV0FBQW5pQixFQUlBLE9BRkF5
QixJQUFBK3ZGLEVBQ0E5dkYsR0FBQTh2RixFQUNBL3ZGLEVBQUFDLEdBQUEsR0ExQkEsR0FBQTh2
RixHQUFBLEtBNkJBenhGLEdBQUFELFFBQUFxeEYsRzVMbWx0Qk0sU0FBVXB4RixFQUFRRCxFQUFT
SCxHQUVqQyxZNkxubnRCQUksR0FBQUQsUUFBQSxVN0xvb3RCTSxTQUFVQyxFQUFRRCxFQUFTSCxH
QUVqQyxZOExwbnRCQSxTQUFBMjJELEdBQUFtN0IsR0FRQSxTQUFBQSxFQUNBLFdBRUEsUUFBQUEs
RUFBQTdzRixTQUNBLE1BQUE2c0YsRUFHQSxJQUFBcHNGLEdBQUFnWixFQUFBeGQsSUFBQTR3RixF
QUNBLElBQUFwc0YsRUFFQSxNQURBQSxHQUFBaXZDLEVBQUFqdkMsR0FDQUEsRUFBQW1DLEVBQUFU
LG9CQUFBMUIsR0FBQSxJQUdBLG9CQUFBb3NGLEdBQUFsL0MsT0FDQWhzQyxFQUFBLE1BRUFBLEVB
QUEsS0FBQTlGLE9BQUF3RCxLQUFBd3RGLElBMUNBLEdBQUFsckYsR0FBQTVHLEVBQUEsR0FHQTZI
LEdBREE3SCxFQUFBLElBQ0FBLEVBQUEsSUFDQTBlLEVBQUExZSxFQUFBLElBRUEyMEMsRUFBQTMw
QyxFQUFBLEdBQ0FBLEdBQUEsR0FDQUEsRUFBQSxFQXNDQUksR0FBQUQsUUFBQXcyRCxHOUx1cHRC
TSxTQUFVdjJELEVBQVFELEVBQVNILEdBRWpDLFkrTHZzdEJBLElBQUFxeEMsR0FBQXJ4QyxFQUFB
LEdBRUFJLEdBQUFELFFBQUFreEMsRUFBQWdDLDRCL0x3dHRCTSxTQUFVanpDLEVBQVE0b0IsRUFB
cUJocEIsR0FFN0MsWWdNdHR0QkEsU0FBQSt4RixHQUFBdjlFLEdBQ0EsYUFBQUEsTUFDQXBTLEtB
QUFvUyxFQUFBdzlFLEVBQUFDLEVBRUFDLE9BQUFweEYsUUFBQTBULEdBQ0ExVCxPQUFBcXhGLEVB
QUEsR0FBQTM5RSxHQUNBMVQsT0FBQXN4RixFQUFBLEdBQUE1OUUsR2hNaXR0QnFCLEdBQUk2OUUs
R0FBMkNyeUYsRUFBb0IsSUFDL0RteUYsRUFBOENueUYsRUFBb0IsS0FDbEVveUYsRUFBbURweUYs
RUFBb0IsS2dNdHV0QmhHaXlGLEVBQUEsZ0JBQ0FELEVBQUEscUJBR0FFLEVBQUFHLEVBQUEsRUFB
QUEsRUFBQSxFQUFBQyxnQkFBQWx3RixFQWtCQTRtQixHQUFBLEtoTWl2dEJNLFNBQVU1b0IsRUFB
UTRvQixFQUFxQmhwQixHQUU3QyxZQUNxQixJQUFJdXlGLEdBQStDdnlGLEVBQW9CLEtpTTV3dEI1
Rnd5RixFQUFBLGdCQUFBbC9FLGtCQUFBeFMsaUJBQUF3UyxLQUdBOCtCLEVBQUFtZ0QsRUFBQSxH
QUFBQyxHQUFBbnBFLFNBQUEsZ0JBRUFMLEdBQUEsS2pNcXh0Qk0sU0FBVTVvQixFQUFRNG9CLEVB
QXFCaHBCLEdBRTdDLGNrTS94dEJBLFNBQUFxZ0QsR0FDQSxHQUFBb3lDLEdBQUEsZ0JBQUFweUMs
U0FBQXYvQyxpQkFBQXUvQyxDQUVBcjNCLEdBQUEsTWxNa3l0QjZCem9CLEtBQUt5b0IsRUFBcUJo
cEIsRUFBb0IsTUFJckUsU0FBVUksRUFBUTRvQixFQUFxQmhwQixHQUU3QyxZbU1seHRCQSxTQUFB
MHlGLEdBQUFsK0UsR0FDQSxHQUFBbStFLEdBQUFueEYsRUFBQWpCLEtBQUFpVSxFQUFBMDlFLEdB
Q0FyMkUsRUFBQXJILEVBQUEwOUUsRUFFQSxLQUNBMTlFLEVBQUEwOUUsT0FBQTl2RixFQUNBLElB
QUF3d0YsSUFBQSxFQUNHLE1BQUE1d0YsSUFFSCxHQUFBc2hELEdBQUF1dkMsRUFBQXR5RixLQUFB
aVUsRUFRQSxPQVBBbytFLEtBQ0FELEVBQ0FuK0UsRUFBQTA5RSxHQUFBcjJFLFFBRUFySCxHQUFB
MDlFLElBR0E1dUMsRW5Na3d0QnFCLEdBQUkrdUMsR0FBMkNyeUYsRUFBb0IsSW1Nenl0QnhGbTFC
LEVBQUFyMEIsT0FBQVMsVUFHQUMsRUFBQTJ6QixFQUFBM3pCLGVBT0FxeEYsRUFBQTE5RCxFQUFB
eHRCLFNBR0F1cUYsRUFBQUcsRUFBQSxFQUFBQSxFQUFBLEVBQUFDLGdCQUFBbHdGLEVBNkJBNG1C
LEdBQUEsS25Na3p0Qk0sU0FBVTVvQixFQUFRNG9CLEVBQXFCaHBCLEdBRTdDLFlvTWgxdEJBLFNB
QUE4eUYsR0FBQXQrRSxHQUNBLE1BQUFxK0UsR0FBQXR5RixLQUFBaVUsR0FqQkEsR0FBQTJnQixH
QUFBcjBCLE9BQUFTLFVBT0FzeEYsRUFBQTE5RCxFQUFBeHRCLFFBYUFxaEIsR0FBQSxLcE11MnRC
TSxTQUFVNW9CLEVBQVE0b0IsRUFBcUJocEIsR0FFN0MsWUFDcUIsSUFBSSt5RixHQUE0Qy95RixF
QUFvQixLcU01M3RCekZnekYsRUFBQWx5RixPQUFBaXlGLEVBQUEsR0FBQWp5RixPQUFBMDhDLGVB
QUExOEMsT0FFQWtvQixHQUFBLEtyTXE0dEJNLFNBQVU1b0IsRUFBUTRvQixFQUFxQmhwQixHQUU3
QyxZc01wNHRCQSxTQUFBaXpGLEdBQUEzbUUsRUFBQWc4RCxHQUNBLGdCQUFBMS9FLEdBQ0EsTUFB
QTBqQixHQUFBZzhELEVBQUExL0UsS0FJQW9nQixFQUFBLEt0TWs1dEJNLFNBQVU1b0IsRUFBUTRv
QixFQUFxQmhwQixHQUU3QyxZdU0xNHRCQSxTQUFBa3pGLEdBQUExK0UsR0FDQSxhQUFBQSxHQUFB
LGdCQUFBQSxHQUdBd1UsRUFBQSxLdk13NnRCTSxTQUFVNW9CLEVBQVFELEVBQVNILEd3TXA4dEJq
Q0ksRUFBQUQsUUFBQUgsRUFBQSxNeE0yOHRCTSxTQUFVSSxFQUFRRCxFQUFTSCxHQUVqQyxjQUM0
QixTQUFTcWdELEVBQVFqZ0QsR3lNNTh0QjdDVSxPQUFBQyxlQUFBWixFQUFBLGNBQ0FxVSxPQUFB
LEdBR0EsSUFNQTQ5QixHQU5BK2dELEVBQUFuekYsRUFBQSxLQUVBb3pGLEVBRUEsU0FBQXY5RCxH
QUFzQyxNQUFBQSxNQUFBejBCLFdBQUF5MEIsR0FBdUN3c0MsUUFBQXhzQyxJQUY3RXM5RCxFQVFB
L2dELEdBREEsb0JBQUE5K0IsTUFDQUEsS0FDQyxvQkFBQXZMLFFBQ0RBLE9BQ0Msb0JBQUFzNEMs
R0FDREEsRUFFQWpnRCxDQUtBLElBQUFrakQsSUFBQSxFQUFBOHZDLEVBQUEsU0FBQWhoRCxFQUNB
anlDLEdBQUEsUUFBQW1qRCxJek0rOHRCNkIvaUQsS0FBS0osRUFBU0gsRUFBb0IsSUFBS0EsRUFB
b0IsS0FBS0ksS0FJdkYsU0FBVUEsRUFBUUQsRzBNLyt0QnhCQyxFQUFBRCxRQUFBLFNBQUFDLEdB
b0JBLE1BbkJBQSxHQUFBaXpGLGtCQUNBanpGLEVBQUFrekYsVUFBQSxhQUNBbHpGLEVBQUFtekYs
U0FFQW56RixFQUFBK0YsV0FBQS9GLEVBQUErRixhQUNBckYsT0FBQUMsZUFBQVgsRUFBQSxVQUNB
YSxZQUFBLEVBQ0FDLElBQUEsV0FDQSxNQUFBZCxHQUFBRSxLQUdBUSxPQUFBQyxlQUFBWCxFQUFB
LE1BQ0FhLFlBQUEsRUFDQUMsSUFBQSxXQUNBLE1BQUFkLEdBQUFDLEtBR0FELEVBQUFpekYsZ0JB
QUEsR0FFQWp6RixJMU11L3RCTSxTQUFVQSxFQUFRRCxFQUFTSCxHQUVqQyxZMk12Z3VCQSxTQUFB
d3pGLEdBQUFwaEQsR0FDQSxHQUFBa1IsR0FDQW13QyxFQUFBcmhELEVBQUE5WixNQWFBLE9BWEEs
bUJBQUFtN0QsR0FDQUEsRUFBQXg5QyxXQUNBcU4sRUFBQW13QyxFQUFBeDlDLFlBRUFxTixFQUFB
bXdDLEVBQUEsY0FDQUEsRUFBQXg5QyxXQUFBcU4sR0FHQUEsRUFBQSxlQUdBQSxFQW5CQXhpRCxP
QUFBQyxlQUFBWixFQUFBLGNBQ0FxVSxPQUFBLElBRUFyVSxFQUFBLFFBQUFxekYsRzNNbWl1Qk0s
U0FBVXB6RixFQUFRNG9CLEVBQXFCaHBCLEdBRTdDLFk0TXRpdUJBLFNBQUEwekYsR0FBQTd1RixF
QUFBNHdDLEdBQ0EsR0FBQWsrQyxHQUFBbCtDLEtBQUF0cUMsSUFHQSx3QkFGQXdvRixHQUFBLElB
QUFBLEVBQUFoc0YsV0FBQSxrQkFFQSxjQUFBOUMsRUFBQSxpTEE0QkEsUUFBQSt1RixHQUFBQyxH
QUNBL3lGLE9BQUF3RCxLQUFBdXZGLEdBQUF6dkYsUUFBQSxTQUFBUyxHQUNBLEdBQUFpd0MsR0FB
QSsrQyxFQUFBaHZGLEVBR0Esd0JBRkFpd0MsT0FBQTF5QyxJQUEyQytJLEtBQUE4ZCxFQUFBLEVB
QUErc0IsT0FHM0MsU0FBQTN6QyxPQUFBLFlBQUF3QyxFQUFBLGdSQUlBLElBQWdELG9CQUFoRGl3
QyxPQUFBMXlDLElBQW1DK0ksS0FEbkMsZ0NBQUExRCxLQUFBQyxTQUFBQyxTQUFBLElBQUE4YSxV
QUFBLEdBQUF0ZSxNQUFBLElBQUFGLEtBQUEsT0FFQSxTQUFBNUIsT0FBQSxZQUFBd0MsRUFBQSw2
RUFBQW9rQixFQUFBLEVBQUErc0IsS0FBQSxpVEFxQkEsUUFBQTg5QyxHQUFBRCxHQUdBLE9BRkFF
LEdBQUFqekYsT0FBQXdELEtBQUF1dkYsR0FDQUcsS0FDQTN6RixFQUFBLEVBQWlCQSxFQUFBMHpG
LEVBQUEvd0YsT0FBd0IzQyxJQUFBLENBQ3pDLEdBQUF3RSxHQUFBa3ZGLEVBQUExekYsRUFRQSxv
QkFBQXd6RixHQUFBaHZGLEtBQ0FtdkYsRUFBQW52RixHQUFBZ3ZGLEVBQUFodkYsSUFHQSxHQUFB
b3ZGLEdBQUFuekYsT0FBQXdELEtBQUEwdkYsR0FPQUUsTUFBQSxFQUNBLEtBQ0FOLEVBQUFJLEdB
Q0csTUFBQWh5RixHQUNIa3lGLEVBQUFseUYsRUFHQSxrQkFDQSxHQUFBeTRDLEdBQUExM0MsVUFB
QUMsT0FBQSxPQUFBWixLQUFBVyxVQUFBLEdBQUFBLFVBQUEsTUFDQTB5QyxFQUFBMXlDLFVBQUEs
RUFFQSxJQUFBbXhGLEVBQ0EsS0FBQUEsRUFZQSxRQUZBQyxJQUFBLEVBQ0EzZCxLQUNBNGQsRUFB
QSxFQUFvQkEsRUFBQUgsRUFBQWp4RixPQUE4Qm94RixJQUFBLENBQ2xELEdBQUF0OUMsR0FBQW05
QyxFQUFBRyxHQUNBdC9DLEVBQUFrL0MsRUFBQWw5QyxHQUNBdTlDLEVBQUE1NUMsRUFBQTNELEdB
Q0F3OUMsRUFBQXgvQyxFQUFBdS9DLEVBQUE1K0MsRUFDQSx3QkFBQTYrQyxHQUFBLENBQ0EsR0FB
QUMsR0FBQWIsRUFBQTU4QyxFQUFBckIsRUFDQSxVQUFBcHpDLE9BQUFreUYsR0FFQS9kLEVBQUEx
L0IsR0FBQXc5QyxFQUNBSCxLQUFBRyxJQUFBRCxFQUVBLE1BQUFGLEdBQUEzZCxFQUFBLzdCLEc1
TTQ2dEJpQ3p4QixFQUF1QixFQUFJOHFFLENBQ3ZDLElBQUk3cUUsR0FBNkNqcEIsRUFBb0IsR0FD
VEEsR0FBb0IsSUFDN0JBLEVBQW9CLEtBc0l0RixTQUFVSSxFQUFRNG9CLEVBQXFCaHBCLEdBRTdD
LFk2TXRydUJBLFNBQUF3MEYsR0FBQUMsRUFBQWovQyxHQUNBLGtCQUNBLE1BQUFBLEdBQUFpL0Ms
RUFBQWgvRCxVQUFBcnpCLEdBQUFXLGFBeUJBLFFBQUEyeEYsR0FBQUMsRUFBQW4vQyxHQUNBLHNC
QUFBbS9DLEdBQ0EsTUFBQUgsR0FBQUcsRUFBQW4vQyxFQUdBLHFCQUFBbS9DLElBQUEsT0FBQUEs
RUFDQSxTQUFBdHlGLE9BQUEsaUZBQUFzeUYsRUFBQSxhQUFBQSxJQUFBLDZGQUtBLFFBRkFyd0Ys
R0FBQXhELE9BQUF3RCxLQUFBcXdGLEdBQ0FDLEtBQ0F2MEYsRUFBQSxFQUFpQkEsRUFBQWlFLEVB
QUF0QixPQUFpQjNDLElBQUEsQ0FDbEMsR0FBQXdFLEdBQUFQLEVBQUFqRSxHQUNBbzBGLEVBQUFF
LEVBQUE5dkYsRUFDQSxvQkFBQTR2RixLQUNBRyxFQUFBL3ZGLEdBQUEydkYsRUFBQUMsRUFBQWov
QyxJQUdBLE1BQUFvL0MsR0E3Q0E1ckUsRUFBQSxFQUFBMHJFLEc3TTB1dUJNLFNBQVV0MEYsRUFB
UTRvQixFQUFxQmhwQixHQUU3QyxZOE01dXVCQUEsR0FBQSxJQUFBYyxPQUFBNEMsUTlNa3l1Qk0s
U0FBVXRELEVBQVE0b0IsRUFBcUJocEIsR0FFN0MsWStNcHl1QkEsU0FBQTY0QixHQUFBcm9CLEVB
QUFzb0IsR0FBaUQsS0FBQXRvQixZQUFBc29CLElBQTBDLFNBQUF4MUIsV0FBQSxxQ0FFM0YsUUFB
QXEwQyxHQUFBcmtDLEVBQUEvUyxHQUFpRCxJQUFBK1MsRUFBYSxTQUFBc2tDLGdCQUFBLDREQUF5
RixRQUFBcjNDLEdBQUEsaUJBQUFBLElBQUEsbUJBQUFBLEdBQUErUyxFQUFBL1MsRUFFdkosUUFB
QXMzQyxHQUFBQyxFQUFBQyxHQUEwQyxzQkFBQUEsSUFBQSxPQUFBQSxFQUErRCxTQUFBejBDLFdB
QUEsaUVBQUF5MEMsR0FBdUdELEdBQUF2MkMsVUFBQVQsT0FBQTZsQyxPQUFBb1IsS0FBQXgyQyxX
QUF5RWlOLGFBQWVnRyxNQUFBc2pDLEVBQUE3MkMsWUFBQSxFQUFBKzJDLFVBQUEsRUFBQWgzQyxj
QUFBLEtBQTZFKzJDLElBQUFqM0MsT0FBQW0zQyxlQUFBbjNDLE9BQUFtM0MsZUFBQUgsRUFBQUMs
R0FBQUQsRUFBQUksVUFBQUgsRy9Na3l1QmhXLEdBQUk4RSxHQUFzQzc4QyxFQUFvQixHQUUxRDYw
RixHQUQ4QzcwRixFQUFvQm1CLEVBQUUwN0MsR0FDekI3OEMsRUFBb0IsS0FDL0Q4MEYsRUFBbUQ5
MEYsRUFBb0JtQixFQUFFMHpGLEdBQ3pFRSxFQUFpRC8wRixFQUFvQixHK00xeXVCOUZBLEdBQUEs
R0F1RUFncEIsR0FBQSxFQWxEQSxXQUNBLEdBQUFnc0UsR0FFQTE3QyxFQUFBdjJDLFVBQUFDLE9B
QUEsT0FBQVosS0FBQVcsVUFBQSxHQUFBQSxVQUFBLFdBQ0FreUYsRUFBQWx5RixVQUFBLEdBRUEy
MkMsRUFBQXU3QyxHQUFBMzdDLEVBQUEsZUFFQTQ3QyxFQUFBLFNBQUEzNkMsR0FTQSxRQUFBMjZD
LEdBQUExaEYsRUFBQXRILEdBQ0Eyc0IsRUFBQTN2QixLQUFBZ3NGLEVBRUEsSUFBQTE2QyxHQUFB
N0MsRUFBQXp1QyxLQUFBcXhDLEVBQUFoNkMsS0FBQTJJLEtBQUFzSyxFQUFBdEgsR0FHQSxPQURB
c3VDLEdBQUFsQixHQUFBOWxDLEVBQUE4a0MsTUFDQWtDLEVBT0EsTUFyQkEzQyxHQUFBcTlDLEVB
QUEzNkMsR0FFQTI2QyxFQUFBM3pGLFVBQUF3NUMsZ0JBQUEsV0FDQSxHQUFBN0UsRUFFQSxPQUFB
QSxNQUFzQkEsRUFBQW9ELEdBQUFwd0MsS0FBQW93QyxHQUFBcEQsRUFBQXdELEdBQUEsS0FBQXhE
LEdBWXRCZy9DLEVBQUEzekYsVUFBQXF4QyxPQUFBLFdBQ0EsTUFBQWlLLEdBQUEsU0FBQXZxQyxL
QUFBcEosS0FBQXNLLE1BQUFyTixXQUdBK3VGLEdBQ0dyNEMsRUFBQSxVQWdCSCxPQU5BcTRDLEdB
QUF4a0UsV0FDQTRuQixNQUFBeThDLEVBQUEsRUFBQXY5QyxXQUNBcnhDLFNBQUEydUYsRUFBQWh6
RixFQUFBMlIsUUFBQStqQyxZQUVBMDlDLEVBQUFwN0MsbUJBQUFrN0MsS0FBMERBLEVBQUExN0Ms
R0FBQXk3QyxFQUFBLEVBQUF2OUMsV0FBQXc5QyxFQUFBdDdDLEdBQUFxN0MsRUFBQSxFQUFBQyxH
QUUxREUsTS9NbXp1Qk0sU0FBVTkwRixFQUFRRCxFQUFTSCxHQUVqQyxZZ045MnVCQSxJQUFBMEMs
R0FBQTFDLEVBQUEsR0FDQTJCLEVBQUEzQixFQUFBLEdBQ0Frd0IsRUFBQWx3QixFQUFBLEdBRUFJ
LEdBQUFELFFBQUEsV0FDQSxRQUFBZzFGLEdBQUEzaEYsRUFBQS9FLEVBQUFraUIsRUFBQTIyQixF
QUFBa0ssRUFBQUMsR0FDQUEsSUFBQXZoQyxHQUlBdnVCLEdBQ0EsRUFDQSxtTEFNQSxRQUFBeXpG
LEtBQ0EsTUFBQUQsR0FGQUEsRUFBQTM5QyxXQUFBMjlDLENBTUEsSUFBQTFqRixJQUNBd3pCLE1B
QUFrd0QsRUFDQTMyQyxLQUFBMjJDLEVBQ0E3b0UsS0FBQTZvRSxFQUNBajZELE9BQUFpNkQsRUFD
QTl6RixPQUFBOHpGLEVBQ0FuekUsT0FBQW16RSxFQUNBaGlDLE9BQUFnaUMsRUFFQS9oQyxJQUFB
K2hDLEVBQ0E5aEMsUUFBQStoQyxFQUNBM2hGLFFBQUEwaEYsRUFDQTdoQyxXQUFBOGhDLEVBQ0Fy
d0YsS0FBQW93RixFQUNBNWhDLFNBQUE2aEMsRUFDQTVoQyxNQUFBNGhDLEVBQ0EzaEMsVUFBQTJo
QyxFQUNBOTlDLE1BQUE4OUMsRUFNQSxPQUhBM2pGLEdBQUFzZixlQUFBcnVCLEVBQ0ErTyxFQUFB
aUIsVUFBQWpCLEVBRUFBLEloTmc0dUJNLFNBQVVyUixFQUFRRCxFQUFTSCxHQUVqQyxZaU5yN3VC
QSxJQUFBcTFGLElBQ0F2N0MsbUJBQUEsRUFDQUYsY0FBQSxFQUNBN2xDLGNBQUEsRUFDQWtmLGFB
QUEsRUFDQWtqQyxpQkFBQSxFQUNBekIsUUFBQSxFQUNBaGtDLFdBQUEsRUFDQXZsQixNQUFBLEdB
R0FtcUYsR0FDQTMwRixNQUFBLEVBQ0FxQyxRQUFBLEVBQ0F6QixXQUFBLEVBQ0FnMEYsUUFBQSxF
QUNBNXNCLFFBQUEsRUFDQTVsRSxXQUFBLEVBQ0F5eUYsT0FBQSxHQUdBejBGLEVBQUFELE9BQUFD
LGVBQ0E4QyxFQUFBL0MsT0FBQStDLG9CQUNBTixFQUFBekMsT0FBQXlDLHNCQUNBNDJCLEVBQUFy
NUIsT0FBQXE1Qix5QkFDQXFqQixFQUFBMThDLE9BQUEwOEMsZUFDQWk0QyxFQUFBajRDLEtBQUEx
OEMsT0FFQVYsR0FBQUQsUUFBQSxRQUFBdTFGLEdBQUFDLEVBQUFDLEVBQUFDLEdBQ0Esb0JBQUFE
LEdBQUEsQ0FFQSxHQUFBSCxFQUFBLENBQ0EsR0FBQUssR0FBQXQ0QyxFQUFBbzRDLEVBQ0FFLFFB
QUFMLEdBQ0FDLEVBQUFDLEVBQUFHLEVBQUFELEdBSUEsR0FBQXZ4RixHQUFBVCxFQUFBK3hGLEVB
RUFyeUYsS0FDQWUsSUFBQWswQixPQUFBajFCLEVBQUFxeUYsSUFHQSxRQUFBdjFGLEdBQUEsRUFB
dUJBLEVBQUFpRSxFQUFBdEIsU0FBaUIzQyxFQUFBLENBQ3hDLEdBQUF3RSxHQUFBUCxFQUFBakUs
RUFDQSxLQUFBZzFGLEVBQUF4d0YsS0FBQXl3RixFQUFBendGLE1BQUFneEYsTUFBQWh4RixJQUFB
LENBQ0EsR0FBQXExQixHQUFBQyxFQUFBeTdELEVBQUEvd0YsRUFDQSxLQUNBOUQsRUFBQTQwRixF
QUFBOXdGLEVBQUFxMUIsR0FDaUIsTUFBQWw0QixNQUlqQixNQUFBMnpGLEdBR0EsTUFBQUEsS2pO
azh1Qk0sU0FBVXYxRixFQUFRRCxFQUFTSCxHQUVqQyxZa043K3VCQSxJQUFBMkIsR0FBQSxTQUFB
QyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBdEIsRUFBQUMsRUFBQXNCLEVBQUFDLEdBT0EsSUFBQUws
RUFBQSxDQUNBLEdBQUFPLEVBQ0EsUUFBQUMsS0FBQVAsRUFDQU0sRUFBQSxHQUFBRSxPQUNBLHFJ
QUdLLENBQ0wsR0FBQUMsSUFBQVIsRUFBQUMsRUFBQXRCLEVBQUFDLEVBQUFzQixFQUFBQyxHQUNB
TSxFQUFBLENBQ0FKLEdBQUEsR0FBQUUsT0FDQVIsRUFBQVcsUUFBQSxpQkFBMEMsTUFBQUYsR0FB
QUMsUUFFMUNKLEVBQUF4QixLQUFBLHNCQUlBLEtBREF3QixHQUFBTSxZQUFBLEVBQ0FOLEdBSUEv
QixHQUFBRCxRQUFBd0IsR2xOeWd2Qk0sU0FBVXZCLEVBQVE0b0IsRUFBcUJocEIsR0FFN0MsWW1O
N2p2QkEsU0FBQTY0QixHQUFBcm9CLEVBQUFzb0IsR0FBaUQsS0FBQXRvQixZQUFBc29CLElBQTBD
LFNBQUF4MUIsV0FBQSxxQ0FXM0YsUUFBQXl5RixLQUdBLEdBQUEvbkYsTUFDQXVxQixJQUVBLFFB
Q0F5OUQsTUFBQSxXQUNBejlELEVBQUEwOUQsRUFDQWpvRixFQUFBaW9GLEdBRUFDLE9BQUEsV0FF
QSxPQURBdnlELEdBQUEzMUIsRUFBQXVxQixFQUNBbDRCLEVBQUEsRUFBcUJBLEVBQUFzakMsRUFB
QTNnQyxPQUFzQjNDLElBQzNDc2pDLEVBQUF0akMsTUFHQWEsSUFBQSxXQUNBLE1BQUFxM0IsSUFF
QStjLFVBQUEsU0FBQWw3QixHQUNBLEdBQUFtN0IsSUFBQSxDQUlBLE9BSEFoZCxLQUFBdnFCLElB
QUF1cUIsRUFBQXZxQixFQUFBcEcsU0FDQTJ3QixFQUFBeHhCLEtBQUFxVCxHQUVBLFdBQ0FtN0Is
R0FBQXZuQyxJQUFBaW9GLElBQ0ExZ0QsR0FBQSxFQUVBaGQsSUFBQXZxQixJQUFBdXFCLEVBQUF2
cUIsRUFBQXBHLFNBQ0Eyd0IsRUFBQTVyQixPQUFBNHJCLEVBQUExTyxRQUFBelAsR0FBQSxPQXpD
QXBhLEVBQUFVLEVBQUFzb0IsRUFBQSxxQkFBQW10RSxJQU1BLElBQUFGLEdBQUEsS0FDQUcsR0FD
QUYsT0FBQSxjQXVDQUMsRUFBQSxXQUNBLFFBQUFBLEdBQUE3OUMsRUFBQWdELEVBQUFFLEdBQ0Ez
aUIsRUFBQTN2QixLQUFBaXRGLEdBRUFqdEYsS0FBQW92QyxRQUNBcHZDLEtBQUFveUMsWUFDQXB5
QyxLQUFBc3lDLGdCQUNBdHlDLEtBQUFvdEMsWUFBQSxLQUNBcHRDLEtBQUF5NkIsVUFBQXl5RCxF
QWlDQSxNQTlCQUQsR0FBQTUwRixVQUFBODBGLGFBQUEsU0FBQWo4RSxHQUVBLE1BREFsUixNQUFB
cXVDLGVBQ0FydUMsS0FBQXk2QixVQUFBMlIsVUFBQWw3QixJQUdBKzdFLEVBQUE1MEYsVUFBQW0y
QyxpQkFBQSxXQUNBeHVDLEtBQUF5NkIsVUFBQXV5RCxVQUdBQyxFQUFBNTBGLFVBQUFnMEMsYUFB
QSxXQUNBLE1BQUF6UyxTQUFBNTVCLEtBQUFvdEMsY0FHQTYvQyxFQUFBNTBGLFVBQUFnMkMsYUFB
QSxXQUNBcnVDLEtBQUFvdEMsY0FDQXB0QyxLQUFBb3RDLFlBQUFwdEMsS0FBQW95QyxVQUFBcHlD
LEtBQUFveUMsVUFBQSs2QyxhQUFBbnRGLEtBQUFzeUMsZUFBQXR5QyxLQUFBb3ZDLE1BQUFoRCxV
QUFBcHNDLEtBQUFzeUMsZUFFQXR5QyxLQUFBeTZCLFVBQUFveUQsTUFJQUksRUFBQTUwRixVQUFB
azJDLGVBQUEsV0FDQXZ1QyxLQUFBb3RDLGNBQ0FwdEMsS0FBQW90QyxjQUNBcHRDLEtBQUFvdEMs
WUFBQSxLQUNBcHRDLEtBQUF5NkIsVUFBQXF5RCxRQUNBOXNGLEtBQUF5NkIsVUFBQXl5RCxJQUlB
RCxNbk5za3ZCTSxTQUFVLzFGLEVBQVE0b0IsRUFBcUJocEIsR0FFN0MsWW9OOXB2QkEsU0FBQW00
QyxHQUFBdGlCLEVBQUF2eEIsR0FBOEMsR0FBQUUsS0FBaUIsUUFBQW5FLEtBQUF3MUIsR0FBcUJ2
eEIsRUFBQXVsQixRQUFBeHBCLElBQUEsR0FBb0NTLE9BQUFTLFVBQUFDLGVBQUFqQixLQUFBczFC
LEVBQUF4MUIsS0FBNkRtRSxFQUFBbkUsR0FBQXcxQixFQUFBeDFCLEdBQXNCLE9BQUFtRSxHQTBC
M00sUUFBQTBkLEdBQUF0WixFQUFBMHRGLEVBQUEzMUYsR0FDQSxPQUFBTixHQUFBaTJGLEVBQUF0
ekYsT0FBQSxFQUFvQzNDLEdBQUEsRUFBUUEsSUFBQSxDQUM1QyxHQUFBaWpELEdBQUFnekMsRUFB
QWoyRixHQUFBdUksRUFDQSxJQUFBMDZDLEVBQUEsTUFBQUEsR0FHQSxnQkFBQTlOLEVBQUF0UyxH
QUNBLFNBQUE3Z0MsT0FBQSwrQkFBQXVHLEdBQUEsUUFBQWpJLEVBQUEsdUNBQUF1aUMsRUFBQWlY
LHFCQUFBLE1BSUEsUUFBQW84QyxHQUFBejBGLEVBQUFDLEdBQ0EsTUFBQUQsS0FBQUMsRXBOMG52
QnFCLEdBQUl5MEYsR0FBNER4MkYsRUFBb0IsSUFDaEZ5MkYsRUFBb0R6MkYsRUFBb0IsS0FDeEUw
MkYsRUFBb0QxMkYsRUFBb0IsS0FDeEUyMkYsRUFBaUQzMkYsRUFBb0IsS0FDckU0MkYsRUFBNEM1
MkYsRUFBb0IsS29OdHF2QnpGNjJGLEVBQUE3MkYsRUFBQSxLQUFBcTZDLEVBQUF2NUMsT0FBQTRD
LFFBQUEsU0FBQWMsR0FBbUQsT0FBQW5FLEdBQUEsRUFBZ0JBLEVBQUEwQyxVQUFBQyxPQUFzQjND
LElBQUEsQ0FBTyxHQUFBb0UsR0FBQTFCLFVBQUExQyxFQUEyQixRQUFBd0UsS0FBQUosR0FBMEIz
RCxPQUFBUyxVQUFBQyxlQUFBakIsS0FBQWtFLEVBQUFJLEtBQXlETCxFQUFBSyxHQUFBSixFQUFB
SSxJQUFpQyxNQUFBTCxHQXNHL093a0IsR0FBQSxFQXpEQSxXQUNBLEdBQUFrdEIsR0FBQW56QyxV
QUFBQyxPQUFBLE9BQUFaLEtBQUFXLFVBQUEsR0FBQUEsVUFBQSxNQUNBK3pGLEVBQUE1Z0QsRUFB
QTZnRCxXQUNBQSxNQUFBMzBGLEtBQUEwMEYsRUFBQU4sRUFBQSxFQUFBTSxFQUNBRSxFQUFBOWdE
LEVBQUErZ0QseUJBQ0FBLE1BQUE3MEYsS0FBQTQwRixFQUFBTCxFQUFBLEVBQUFLLEVBQ0FFLEVB
QUFoaEQsRUFBQWloRCw0QkFDQUEsTUFBQS8wRixLQUFBODBGLEVBQUFSLEVBQUEsRUFBQVEsRUFD
QUUsRUFBQWxoRCxFQUFBbWhELG9CQUNBQSxNQUFBajFGLEtBQUFnMUYsRUFBQVIsRUFBQSxFQUFB
USxFQUNBRSxFQUFBcGhELEVBQUF5QyxnQkFDQUEsTUFBQXYyQyxLQUFBazFGLEVBQUFULEVBQUEs
RUFBQVMsQ0FFQSxpQkFBQUMsRUFBQUMsRUFBQUMsR0FDQSxHQUFBamhELEdBQUF6ekMsVUFBQUMs
T0FBQSxPQUFBWixLQUFBVyxVQUFBLEdBQUFBLFVBQUEsTUFDQTIwRixFQUFBbGhELEVBQUFtaEQs
S0FDQUEsTUFBQXYxRixLQUFBczFGLEtBQ0FFLEVBQUFwaEQsRUFBQXFoRCxlQUNBQSxNQUFBejFG
LEtBQUF3MUYsRUFBQXJCLEVBQUFxQixFQUNBRSxFQUFBdGhELEVBQUF1aEQsaUJBQ0FBLE1BQUEz
MUYsS0FBQTAxRixFQUFBckIsRUFBQSxFQUFBcUIsRUFDQUUsRUFBQXhoRCxFQUFBeWhELG1CQUNB
QSxNQUFBNzFGLEtBQUE0MUYsRUFBQXZCLEVBQUEsRUFBQXVCLEVBQ0FFLEVBQUExaEQsRUFBQTJo
RCxvQkFDQUEsTUFBQS8xRixLQUFBODFGLEVBQUF6QixFQUFBLEVBQUF5QixFQUNBRSxFQUFBamdE
LEVBQUEzQixHQUFBLHdGQUVBNmhELEVBQUFuMkUsRUFBQXExRSxFQUFBTixFQUFBLG1CQUNBcUIs
RUFBQXAyRSxFQUFBczFFLEVBQUFMLEVBQUEsc0JBQ0FvQixFQUFBcjJFLEVBQUF1MUUsRUFBQUos
RUFBQSxhQUVBLE9BQUFOLEdBQUFwK0MsRUFBQTBCLEdBRUFyQixXQUFBLFVBR0ExTyxlQUFBLFNB
QUEzcEMsR0FDQSxpQkFBQUEsRUFBQSxLQUlBeTRDLHlCQUFBdFcsUUFBQXkwRCxHQUdBYyxzQkFD
QUMseUJBQ0FDLGlCQUNBWixPQUNBRSxpQkFDQUUsbUJBQ0FFLHFCQUNBRSx1QkFFS0MsU3BOZ3J2
QkMsU0FBVWg0RixFQUFRNG9CLEVBQXFCaHBCLEdBRTdDLFlxTmx4dkJBLFNBQUEyeEIsR0FBQXBG
LEVBQUFxRixHQUNBLE1BQUFyRixLQUFBcUYsRUFDQSxJQUFBckYsR0FBQSxJQUFBcUYsR0FBQSxF
QUFBckYsSUFBQSxFQUFBcUYsRUFFQXJGLE9BQUFxRixNQUlBLFFBQUFDLEdBQUFDLEVBQUFDLEdB
Q0EsR0FBQUosRUFBQUcsRUFBQUMsR0FBQSxRQUVBLHFCQUFBRCxJQUFBLE9BQUFBLEdBQUEsaUJB
QUFDLElBQUEsT0FBQUEsRUFDQSxRQUdBLElBQUFDLEdBQUFseEIsT0FBQXdELEtBQUF3dEIsR0FD
QUcsRUFBQW54QixPQUFBd0QsS0FBQXl0QixFQUVBLElBQUFDLEVBQUFodkIsU0FBQWl2QixFQUFB
anZCLE9BQUEsUUFFQSxRQUFBM0MsR0FBQSxFQUFpQkEsRUFBQTJ4QixFQUFBaHZCLE9BQWtCM0Ms
SUFDbkMsSUFBQXExQixFQUFBbjFCLEtBQUF3eEIsRUFBQUMsRUFBQTN4QixNQUFBc3hCLEVBQUFH
LEVBQUFFLEVBQUEzeEIsSUFBQTB4QixFQUFBQyxFQUFBM3hCLEtBQ0EsUUFJQSxVQTVCQTJvQixF
QUFBLEVBQUE2SSxDQUFBLElBQUE2RCxHQUFBNTBCLE9BQUFTLFVBQUFDLGdCck51enZCTSxTQUFV
cEIsRUFBUTRvQixFQUFxQmhwQixHQUU3QyxZc050enZCQSxTQUFBdzRGLEdBQUFoQixHQUNBLHlC
QUFBQSxHQUFBMTJGLE9BQUEyM0YsRUFBQSxHQUFBakIsRUFBQSwwQkFBQXAxRixHQUdBLFFBQUFz
MkYsR0FBQWxCLEdBQ0EsTUFBQUEsT0FFR3AxRixHQUZIdEIsT0FBQTIzRixFQUFBLFlBQUFqakQs
R0FDQSxPQUFZQSxjQUlaLFFBQUFtakQsR0FBQW5CLEdBQ0EsTUFBQUEsSUFBQSxpQkFBQUEsR0FB
QTEyRixPQUFBMjNGLEVBQUEsWUFBQWpqRCxHQUNBLE1BQUExMEMsUUFBQTgzRixFQUFBLEdBQUFw
QixFQUFBaGlELFNBQ0dwekMsR3RONnl2QmtCLEdBQUl3MkYsR0FBc0M1NEYsRUFBb0IsSUFDMUR5
NEYsRUFBZ0R6NEYsRUFBb0IsR3NOM3l2QjdGZ3BCLEdBQUEsR0FBQXd2RSxFQUFBRSxFQUFBQyxJ
dE5tMHZCTSxTQUFVdjRGLEVBQVE0b0IsRUFBcUJocEIsR0FFN0MsWXVOdDF2QkEsU0FBQTY0RixH
QUFBdEIsR0FDQSx5QkFBQUEsR0FBQXoyRixPQUFBZzRGLEVBQUEsR0FBQXZCLEVBQUEsdUJBQUFu
MUYsR0FHQSxRQUFBMjJGLEdBQUF4QixHQUNBLE1BQUFBLE9BRUduMUYsR0FGSHRCLE9BQUFnNEYs
RUFBQSxjQUNBLFd2Tm0xdkJxQixHQUFJQSxHQUFnRDk0RixFQUFvQixHdU4vMHZCN0ZncEIsR0FB
QSxHQUFBNnZFLEVBQUFFLEl2TmcydkJNLFNBQVUzNEYsRUFBUTRvQixFQUFxQmhwQixHQUU3QyxZ
d04xMnZCQSxTQUFBZzVGLEdBQUFDLEVBQUFDLEVBQUF0OEMsR0FDQSxNQUFBdkMsTUFBb0J1QyxF
QUFBcThDLEVBQUFDLEdBR3BCLFFBQUFDLEdBQUExQixHQUNBLGdCQUFBamlELEVBQUFVLEdBQ0Es
R0FDQXloRCxJQURBemhELEVBQUFqakIsWUFDQWlqQixFQUFBeWhELE1BQ0FRLEVBQUFqaUQsRUFB
QWlpRCxvQkFFQWlCLEdBQUEsRUFDQUMsTUFBQSxFQUVBLGlCQUFBSixFQUFBQyxFQUFBdDhDLEdB
Q0EsR0FBQTA4QyxHQUFBN0IsRUFBQXdCLEVBQUFDLEVBQUF0OEMsRUFXQSxPQVRBdzhDLEdBQ0F6
QixHQUFBUSxFQUFBbUIsRUFBQUQsT0FBQUMsSUFFQUYsR0FBQSxFQUNBQyxFQUFBQyxHQUtBRCxJ
QUtBLFFBQUFFLEdBQUE5QixHQUNBLHlCQUFBQSxHQUFBMEIsRUFBQTFCLE9BQUFyMUYsR0FHQSxR
QUFBbzNGLEdBQUEvQixHQUNBLE1BQUFBLE9BRUdyMUYsR0FGSCxXQUNBLE1BQUE0MkYsSUF4Q0Es
R0FBQTMrQyxJQUFBcjZDLEVBQUEsSUFBQWMsT0FBQTRDLFFBQUEsU0FBQWMsR0FBbUQsT0FBQW5F
LEdBQUEsRUFBZ0JBLEVBQUEwQyxVQUFBQyxPQUFzQjNDLElBQUEsQ0FBTyxHQUFBb0UsR0FBQTFC
LFVBQUExQyxFQUEyQixRQUFBd0UsS0FBQUosR0FBMEIzRCxPQUFBUyxVQUFBQyxlQUFBakIsS0FB
QWtFLEVBQUFJLEtBQXlETCxFQUFBSyxHQUFBSixFQUFBSSxJQUFpQyxNQUFBTCxJQTRDL093a0Is
R0FBQSxHQUFBdXdFLEVBQUFDLEl4TnczdkJNLFNBQVVwNUYsRUFBUTRvQixFQUFxQmhwQixHQUU3
QyxZeU50NnZCQSxTQUFBbTRDLEdBQUF0aUIsRUFBQXZ4QixHQUE4QyxHQUFBRSxLQUFpQixRQUFB
bkUsS0FBQXcxQixHQUFxQnZ4QixFQUFBdWxCLFFBQUF4cEIsSUFBQSxHQUFvQ1MsT0FBQVMsVUFB
QUMsZUFBQWpCLEtBQUFzMUIsRUFBQXgxQixLQUE2RG1FLEVBQUFuRSxHQUFBdzFCLEVBQUF4MUIs
R0FBc0IsT0FBQW1FLEdBSTNNLFFBQUFpMUYsR0FBQWxDLEVBQUFDLEVBQUFDLEVBQUFqaUQsR0FD
QSxnQkFBQWlGLEVBQUFtQyxHQUNBLE1BQUE2NkMsR0FBQUYsRUFBQTk4QyxFQUFBbUMsR0FBQTQ2
QyxFQUFBaGlELEVBQUFvSCxPQUlBLFFBQUE4OEMsR0FBQW5DLEVBQUFDLEVBQUFDLEVBQUFqaUQs
RUFBQVUsR0FZQSxRQUFBeWpELEdBQUFDLEVBQUFDLEdBT0EsTUFOQXAvQyxHQUFBbS9DLEVBQ0Fo
OUMsRUFBQWk5QyxFQUNBWixFQUFBMUIsRUFBQTk4QyxFQUFBbUMsR0FDQXM4QyxFQUFBMUIsRUFB
QWhpRCxFQUFBb0gsR0FDQXk4QyxFQUFBNUIsRUFBQXdCLEVBQUFDLEVBQUF0OEMsR0FDQWs5QyxH
QUFBLEVBQ0FULEVBR0EsUUFBQVUsS0FNQSxNQUxBZCxHQUFBMUIsRUFBQTk4QyxFQUFBbUMsR0FF
QTQ2QyxFQUFBbDdDLG9CQUFBNDhDLEVBQUExQixFQUFBaGlELEVBQUFvSCxJQUVBeThDLEVBQUE1
QixFQUFBd0IsRUFBQUMsRUFBQXQ4QyxHQUlBLFFBQUFvOUMsS0FNQSxNQUxBekMsR0FBQWo3Qyxv
QkFBQTI4QyxFQUFBMUIsRUFBQTk4QyxFQUFBbUMsSUFFQTQ2QyxFQUFBbDdDLG9CQUFBNDhDLEVB
QUExQixFQUFBaGlELEVBQUFvSCxJQUVBeThDLEVBQUE1QixFQUFBd0IsRUFBQUMsRUFBQXQ4QyxH
QUlBLFFBQUFxOUMsS0FDQSxHQUFBQyxHQUFBM0MsRUFBQTk4QyxFQUFBbUMsR0FDQXU5QyxHQUFB
bEMsRUFBQWlDLEVBQUFqQixFQUtBLE9BSkFBLEdBQUFpQixFQUVBQyxJQUFBZCxFQUFBNUIsRUFB
QXdCLEVBQUFDLEVBQUF0OEMsSUFFQXk4QyxFQUdBLFFBQUFlLEdBQUE1akIsRUFBQTZqQixHQUNB
LEdBQUFDLElBQUF2QyxFQUFBc0MsRUFBQXo5QyxHQUNBMjlDLEdBQUExQyxFQUFBcmhCLEVBQUEv
N0IsRUFJQSxPQUhBQSxHQUFBKzdCLEVBQ0E1NUIsRUFBQXk5QyxFQUVBQyxHQUFBQyxFQUFBUixJ
QUNBTyxFQUFBTixJQUNBTyxFQUFBTixJQUNBWixFQTFEQSxHQUFBeEIsR0FBQTNoRCxFQUFBMmhE
LGVBQ0FFLEVBQUE3aEQsRUFBQTZoRCxpQkFDQUUsRUFBQS9oRCxFQUFBK2hELG1CQUVBNkIsR0FB
QSxFQUNBci9DLE1BQUEsR0FDQW1DLE1BQUEsR0FDQXE4QyxNQUFBLEdBQ0FDLE1BQUEsR0FDQUcs
TUFBQSxFQW9EQSxpQkFBQTdpQixFQUFBNmpCLEdBQ0EsTUFBQVAsR0FBQU0sRUFBQTVqQixFQUFB
NmpCLEdBQUFWLEVBQUFuakIsRUFBQTZqQixJQVdBLFFBQUFHLEdBQUFobEQsRUFBQWdCLEdBQ0Es
R0FBQTZoRCxHQUFBN2hELEVBQUE2aEQsb0JBQ0FDLEVBQUE5aEQsRUFBQThoRCx1QkFDQUMsRUFB
QS9oRCxFQUFBK2hELGVBQ0FyMUQsRUFBQWlWLEVBQUEzQixHQUFBLGtFQUVBK2dELEVBQUFjLEVB
QUE3aUQsRUFBQXRTLEdBQ0FzMEQsRUFBQWMsRUFBQTlpRCxFQUFBdFMsR0FDQXUwRCxFQUFBYyxF
QUFBL2lELEVBQUF0UyxFQVFBLFFBRkFBLEVBQUF5MEQsS0FBQStCLEVBQUFELEdBRUFsQyxFQUFB
QyxFQUFBQyxFQUFBamlELEVBQUF0UyxHek5xMHZCaUNsYSxFQUF1QixFQUFJd3hFLEN5Tno2dkI1
RHg2RixHQUFBLE16Tm9od0JNLFNBQVVJLEVBQVE0b0IsRUFBcUJocEIsR0FFN0MsWUFFd0VBLEdB
QW9CLEtBcUJ0RixTQUFVSSxFQUFRNG9CLEVBQXFCaHBCLEdBRTdDLFlBQ3FCLElBQUk2OEMsR0FB
c0M3OEMsRUFBb0IsR0FDMUQ4OEMsRUFBOEM5OEMsRUFBb0JtQixFQUFFMDdDLEdBQ3BFNDlDLEVB
QXNDejZGLEVBQW9CLElBQzFEMDZGLEVBQTRDMTZGLEVBQW9CLElBQ2hFMjZGLEVBQW1EMzZGLEVB
QW9CLEtBQ3ZFNDZGLEVBQXdENTZGLEVBQW9CLEtBQzVFNjZGLEVBQXlDNzZGLEVBQW9CLEswTi9p
d0JoRjg2RixFQUFNLFNBQUE1a0QsR0FBQSxHQUFFNmtELEdBQUY3a0QsRUFBRTZrRCxNQUFPQyxF
QUFUOWtELEVBQVM4a0QsT0FBVCxPQUNWbCtDLEdBQUFoN0MsRUFBQW1HLGNBQUEsV0FDRTYwQyxF
QUFBaDdDLEVBQUFtRyxjQUFDMHlGLEVBQUEsR0FBT00sUUFBU0QsRUFBUUMsVUFDekJuK0MsRUFB
QWg3QyxFQUFBbUcsY0FBQzJ5RixFQUFBLEdBQVlHLE1BQU9BLEVBQU9DLFFBQVNBLEtBSXhDRixH
QUFJcHFFLFdBQ0ZxcUUsTUFBT2wrQyxFQUFBLFVBQVU1WCxNQUFNdVMsV0FDdkJ3akQsUUFBU24r
QyxFQUFBLFVBQVV4N0MsT0FBT20yQyxXQUc1QixJQUFNKy9DLEdBQWtCLFNBQUE5OEMsR0FBQSxP
QUN0QnNnRCxNQUFPdGdELEVBQU1zZ0QsUUFHVHZELEVBQXFCLFNBQUFoaUQsR0FBQSxPQUN2Qnds
RCxRQUFTbDZGLE9BQUEyNUYsRUFBQSxHQUFtQkksRUFBYXJsRCxJQUc3Q3hzQixHQUFBLEVBQWVs
b0IsT0FBQTQ1RixFQUFBLEdBQ2JuRCxFQUNBQyxHQUNBc0QsSTFONmh3QkksU0FBVTE2RixFQUFR
NG9CLEVBQXFCaHBCLEdBRTdDLFlBSThmLFNBQVM2NEIsR0FBZ0Jyb0IsRUFBU3NvQixHQUFhLEtB
QUt0b0IsWUFBb0Jzb0IsSUFBYyxLQUFNLElBQUl4MUIsV0FBVSxxQ0FBdUMsUUFBU3EwQyxHQUEy
QnJrQyxFQUFLL1MsR0FBTSxJQUFJK1MsRUFBTSxLQUFNLElBQUlza0MsZ0JBQWUsNERBQThELFFB
QU9yM0MsR0FBcUIsaUJBQVBBLElBQStCLG1CQUFQQSxHQUF3QitTLEVBQUwvUyxFQUFXLFFBQVNz
M0MsR0FBVUMsRUFBU0MsR0FBWSxHQUF1QixtQkFBYkEsSUFBc0MsT0FBYkEsRUFBbUIsS0FBTSxJ
QUFJejBDLFdBQVUsaUVBQWtFeTBDLEdBQWFELEdBQVN2MkMsVUFBVVQsT0FBTzZsQyxPQUFPb1Is
R0FBWUEsRUFBV3gyQyxXQUFXaU4sYUFBYWdHLE1BQU1zakMsRUFBUzcyQyxZQUFXLEVBQU0rMkMs
VUFBUyxFQUFLaDNDLGNBQWEsS0FBVysyQyxJQUFXajNDLE9BQU9tM0MsZUFBZW4zQyxPQUFPbTND
LGVBQWVILEVBQVNDLEdBQVlELEVBQVNJLFVBQVVILEdBSDN3QyxHQUFJOEUsR0FBc0M3OEMsRUFB
b0IsR0FDMUQ4OEMsRUFBOEM5OEMsRUFBb0JtQixFQUFFMDdDLEdBQ3BFcStDLEVBQStDbDdGLEVB
QW9CLElBQ3hGaTlDLEVBQWEsV0FBVyxRQUFTQyxHQUFpQjE0QyxFQUFPZ1AsR0FBTyxJQUFJLEdB
QUluVCxHQUFFLEVBQUVBLEVBQUVtVCxFQUFNeFEsT0FBTzNDLElBQUksQ0FBQyxHQUFJNjVCLEdB
QVcxbUIsRUFBTW5ULEVBQUc2NUIsR0FBV2o1QixXQUFXaTVCLEVBQVdqNUIsYUFBWSxFQUFNaTVC
LEVBQVdsNUIsY0FBYSxFQUFRLFNBQVVrNUIsS0FBV0EsRUFBVzhkLFVBQVMsR0FBS2wzQyxPQUFP
QyxlQUFleUQsRUFBTzAxQixFQUFXcjFCLElBQUlxMUIsSUFBYyxNQUFPLFVBQVNwQixFQUFZcWtC
LEVBQVdDLEdBQXVJLE1BQXZIRCxJQUFXRCxFQUFpQnBrQixFQUFZdjNCLFVBQVU0N0MsR0FBZUMs
R0FBWUYsRUFBaUJwa0IsRUFBWXNrQixHQUFvQnRrQixNMk45andCdmRxaUUsRTNOOGp3Qmt5QyxT
QUFTNWdELEdBQXlDLFFBQVM0Z0QsS0FBUyxHQUFJamxELEdBQVNvSCxFQUFNOUMsRUFBTStDLENB
QUsxa0IsR0FBZ0IzdkIsS0FBS2l5RixFQUFRLEtBQUksR0FBSXZrRCxHQUFLN3pDLFVBQVVDLE9B
QU9WLEVBQUt3UixNQUFNOGlDLEdBQU1FLEVBQUssRUFBRUEsRUFBS0YsRUFBS0UsSUFBUXgwQyxF
QUFLdzBDLEdBQU0vekMsVUFBVSt6QyxFQUFPLE9BQWF3RyxHQUFPOUMsRUFBTTdDLEVBQTJCenVD
LE1BQU1ndEMsRUFBS2lsRCxFQUFPampELFdBQVdwM0MsT0FBTzA4QyxlQUFlMjlDLElBQVM1NkYs
S0FBS2sxQixNQUFNeWdCLEdBQU1odEMsTUFBTXN2QixPQUFPbDJCLEtBQWVrNEMsRTJOemp3QnRy
RDRnRCxXQUFhLFNBQUE5aUYsR0FDUyxJQUFoQkEsRUFBS3RWLFFBQ1B3M0MsRUFBS2huQyxNQUFN
eW5GLFFBQVEzaUYsSTNOdWp3QndnRGlsQyxFQUF3T0QsRUFBTzNGLEVBQTJCNkMsRUFBTStDLEdB
QWdjLE1BQXI2QjFGLEdBQVVzakQsRUFBTzVnRCxHQUEyZDBDLEVBQWFrK0MsSUFBU3QyRixJQUFJ
LFNBQVMyUCxNQUFNLFcyTmxqd0I3MUQsTUFDRXNvQyxHQUFBaDdDLEVBQUFtRyxjQUFBLFVBQVEr
MUMsVUFBVSxVQUNoQmxCLEVBQUFoN0MsRUFBQW1HLGNBQUEsbUJBQ0E2MEMsRUFBQWg3QyxFQUFB
bUcsY0FBQ2l6RixFQUFBLEdBQWNyOUMsU0FBQSxFQUNBRCxPQUFRMTBDLEtBQUtreUYsV0FDYmg5
QyxZQUFZLGdDM042aXdCcXRFKzhDLEcyTjlqd0JwdEV0K0MsRUFBQSxVQUFmcytDLEdBQ1p6cUUs
V0FDTHVxRSxRQUFTcCtDLEVBQUEsVUFBVXZ3QixLQUFLa3JCLFkzTjRqd0JnNUV4dUIsRUFBdUIs
RUFBSSxHQUlqOEUsU0FBVTVvQixFQUFRNG9CLEVBQXFCaHBCLEdBRTdDLFlBTWdoQixTQUFTNjRC
LEdBQWdCcm9CLEVBQVNzb0IsR0FBYSxLQUFLdG9CLFlBQW9Cc29CLElBQWMsS0FBTSxJQUFJeDFC
LFdBQVUscUNBQXVDLFFBQVNxMEMsR0FBMkJya0MsRUFBSy9TLEdBQU0sSUFBSStTLEVBQU0sS0FB
TSxJQUFJc2tDLGdCQUFlLDREQUE4RCxRQUFPcjNDLEdBQXFCLGlCQUFQQSxJQUErQixtQkFBUEEs
R0FBd0IrUyxFQUFML1MsRUFBVyxRQUFTczNDLEdBQVVDLEVBQVNDLEdBQVksR0FBdUIsbUJBQWJB
LElBQXNDLE9BQWJBLEVBQW1CLEtBQU0sSUFBSXowQyxXQUFVLGlFQUFrRXkwQyxHQUFhRCxHQUFT
djJDLFVBQVVULE9BQU82bEMsT0FBT29SLEdBQVlBLEVBQVd4MkMsV0FBV2lOLGFBQWFnRyxNQUFN
c2pDLEVBQVM3MkMsWUFBVyxFQUFNKzJDLFVBQVMsRUFBS2gzQyxjQUFhLEtBQVcrMkMsSUFBV2oz
QyxPQUFPbTNDLGVBQWVuM0MsT0FBT20zQyxlQUFlSCxFQUFTQyxHQUFZRCxFQUFTSSxVQUFVSCxH
QUFZLFFBQVNzakQsR0FBZ0J4bEUsRUFBSWh4QixFQUFJMlAsR0FBeUksTUFBL0gzUCxLQUFPZ3hC
LEdBQUsvMEIsT0FBT0MsZUFBZTgwQixFQUFJaHhCLEdBQUsyUCxNQUFNQSxFQUFNdlQsWUFBVyxF
QUFLRCxjQUFhLEVBQUtnM0MsVUFBUyxJQUFhbmlCLEVBQUloeEIsR0FBSzJQLEVBQWNxaEIsRUFM
MTlDLEdBSzZleWxFLEdBTHpleitDLEVBQXNDNzhDLEVBQW9CLEdBQzFEODhDLEVBQThDOThDLEVB
QW9CbUIsRUFBRTA3QyxHQUNwRTArQyxFQUEwQ3Y3RixFQUFvQixLQUM5RHc3RixFQUF3Q3g3RixF
QUFvQixLQUM1RHk3RixFQUF1RHo3RixFQUFvQixJQUNoR2k5QyxFQUFhLFdBQVcsUUFBU0MsR0FB
aUIxNEMsRUFBT2dQLEdBQU8sSUFBSSxHQUFJblQsR0FBRSxFQUFFQSxFQUFFbVQsRUFBTXhRLE9B
QU8zQyxJQUFJLENBQUMsR0FBSTY1QixHQUFXMW1CLEVBQU1uVCxFQUFHNjVCLEdBQVdqNUIsV0FB
V2k1QixFQUFXajVCLGFBQVksRUFBTWk1QixFQUFXbDVCLGNBQWEsRUFBUSxTQUFVazVCLEtBQVdB
LEVBQVc4ZCxVQUFTLEdBQUtsM0MsT0FBT0MsZUFBZXlELEVBQU8wMUIsRUFBV3IxQixJQUFJcTFC
LElBQWMsTUFBTyxVQUFTcEIsRUFBWXFrQixFQUFXQyxHQUF1SSxNQUF2SEQsSUFBV0QsRUFBaUJw
a0IsRUFBWXYzQixVQUFVNDdDLEdBQWVDLEdBQVlGLEVBQWlCcGtCLEVBQVlza0IsR0FBb0J0a0Is
TTROeGt3QnRlNGlFLFlBQ0hELEVBQUEsRUFBVyxrQkFBTSxJQURkSixFQUFBQyxFQUVIRyxFQUFB
LEVBQWMsU0FBQUUsR0FBQSxPQUFTQSxFQUFLQyxZQUZ6QlAsRUFBQUMsRUFHSEcsRUFBQSxFQUFp
QixTQUFBRSxHQUFBLE1BQVFBLEdBQUtDLFlBSDNCTixHQU1lTyxFNU5ra3dCeThELFNBQVN0aEQs
R0FBOEMsUUFBU3NoRCxLQUFjLEdBQUkzbEQsR0FBU29ILEVBQU05QyxFQUFNK0MsQ0FBSzFrQixH
QUFnQjN2QixLQUFLMnlGLEVBQWEsS0FBSSxHQUFJamxELEdBQUs3ekMsVUFBVUMsT0FBT1YsRUFB
S3dSLE1BQU04aUMsR0FBTUUsRUFBSyxFQUFFQSxFQUFLRixFQUFLRSxJQUFReDBDLEVBQUt3MEMs
R0FBTS96QyxVQUFVK3pDLEVBQU8sT0FBYXdHLEdBQU85QyxFQUFNN0MsRUFBMkJ6dUMsTUFBTWd0
QyxFQUFLMmxELEVBQVkzakQsV0FBV3AzQyxPQUFPMDhDLGVBQWVxK0MsSUFBY3Q3RixLQUFLazFC
LE1BQU15Z0IsR0FBTWh0QyxNQUFNc3ZCLE9BQU9sMkIsS0FBZWs0QyxFNE41andCdDNFQyxPQUFV
Nm1DLE9BQVFtYSxFQUFBLEc1TjRqd0JrOEVqaEQsRTROMWp3QnA5RXNoRCxxQkFBdUIsV0FDckJ0
aEQsRUFBS2huQyxNQUFNd25GLFFBQVFlLGtCNU55andCNGdGdmhELEU0TnRqd0JqaUZ3aEQsV0FB
YSxTQUFBMWEsR0FDWDltQyxFQUFLdGlCLFVBQVdvcEQsWTVOcWp3Qm1zRS9qQyxFQUFnWkQsRUFB
TzNGLEVBQTJCNkMsRUFBTStDLEdBQTRqRCxNQUF4dEUxRixHQUFVZ2tELEVBQVl0aEQsR0FBNm9C
MEMsRUFBYTQrQyxJQUFjaDNGLElBQUksa0JBQWtCMlAsTUFBTSxTNE5sandCM3JGeW5GLEdBQWdC
LEdBQUFDLEdBQ0hoekYsS0FBS3NLLE1BQXhCdW5GLEVBRHNCbUIsRUFDdEJuQixNQUFPQyxFQURl
a0IsRUFDZmxCLE9BQ2YsSUFBSUQsRUFBTS8zRixPQUFTLEVBQ2pCLE1BQ0U4NUMsR0FBQWg3QyxF
QUFBbUcsY0FBQSxTQUFPKzFDLFVBQVUsYUFDVjd5QyxLQUFLLFdBQ0w2a0IsUUFBU2lzRSxJQUFt
QmxCLEVBQU0vM0YsT0FDbEM4c0IsU0FBVWtyRSxFQUFRbUIsaUI1TjJpd0JxK0Z0M0YsSUFBSSxl
QUFlMlAsTUFBTSxTNE50aXdCaGhHeW5GLEdBQWdCLEdBQ25CbEIsR0FBVTd4RixLQUFLc0ssTUFB
ZnVuRixNQUNBelosRUFBV3A0RSxLQUFLdXhDLE1BQWhCNm1DLE9BQ0Y4YSxFQUFjckIsRUFBTS8z
RixPQUFTaTVGLENBRW5DLElBQUlsQixFQUFNLzNGLE9BQ1IsTUFDRTg1QyxHQUFBaDdDLEVBQUFt
RyxjQUFDdXpGLEVBQUEsR0FBT1MsZUFBZ0JBLEVBQ2hCRyxZQUFhQSxFQUNiOWEsT0FBUUEsRUFD
UithLGlCQUFrQm56RixLQUFLNHlGLHFCQUFxQjduRixLQUFLL0ssTUFDakRvekYsT0FBUXB6RixL
QUFLOHlGLFdBQVcvbkYsS0FBSy9LLFc1TjJod0I2NkdyRSxJQUFJLFNBQVMyUCxNQUFNLFc0TnRo
d0JsK0csR0FBQStuRixHQUNvQnJ6RixLQUFLc0ssTUFBeEJ1bkYsRUFERHdCLEVBQ0N4QixNQUFP
QyxFQURSdUIsRUFDUXZCLFFBQ1AxWixFQUFXcDRFLEtBQUt1eEMsTUFBaEI2bUMsT0FFRmtiLEVB
QWdCekIsRUFBTXpaLE9BQU9vYSxFQUFhcGEsSUFDMUMyYSxFQUFpQmxCLEVBQU1oa0QsT0FBTyxT
QUFDM2tDLEVBQU91cEYsR0FBUixNQUNsQ0EsR0FBS0MsVUFBWXhwRixFQUFRLEVBQUlBLEdBQzdC
LEVBR0YsT0FDRTBxQyxHQUFBaDdDLEVBQUFtRyxjQUFBLFdBQVMrMUMsVUFBVSxRQUNoQjkwQyxL
QUFLdXpGLGdCQUFnQlIsR0FDdEJuL0MsRUFBQWg3QyxFQUFBbUcsY0FBQSxNQUFJKzFDLFVBQVUs
YUFDWHcrQyxFQUFjeDRGLElBQUksU0FBQTIzRixHQUFBLE1BQ2pCNytDLEdBQUFoN0MsRUFBQW1H
LGNBQUNzekYsRUFBQSxFQUFEejZGLE9BQUE0QyxRQUFVbUIsSUFBSzgyRixFQUFLNzVELEdBQUk2
NUQsS0FBTUEsR0FBVVgsT0FHM0M5eEYsS0FBS3d6RixhQUFhVCxRNU5vZ3dCdXJJSixHNE5sa3dC
enFJaC9DLEVBQUEsVUFBcEJnL0MsR0FDWm5yRSxXQUNMcXFFLE1BQU9sK0MsRUFBQSxVQUFVNVgs
TUFBTXVTLFdBQ3ZCd2pELFFBQVNuK0MsRUFBQSxVQUFVeDdDLE9BQU9tMkMsWTVOK2p3QjQ3SXh1
QixFQUF1QixFQUFJLEdBSS8rSSxTQUFVNW9CLEVBQVE0b0IsRUFBcUJocEIsR0FFN0MsWUFNOGYs
U0FBUzY0QixHQUFnQnJvQixFQUFTc29CLEdBQWEsS0FBS3RvQixZQUFvQnNvQixJQUFjLEtBQU0s
SUFBSXgxQixXQUFVLHFDQUF1QyxRQUFTcTBDLEdBQTJCcmtDLEVBQUsvUyxHQUFNLElBQUkrUyxF
QUFNLEtBQU0sSUFBSXNrQyxnQkFBZSw0REFBOEQsUUFBT3IzQyxHQUFxQixpQkFBUEEsSUFBK0Is
bUJBQVBBLEdBQXdCK1MsRUFBTC9TLEVBQVcsUUFBU3MzQyxHQUFVQyxFQUFTQyxHQUFZLEdBQXVC
LG1CQUFiQSxJQUFzQyxPQUFiQSxFQUFtQixLQUFNLElBQUl6MEMsV0FBVSxpRUFBa0V5MEMsR0FB
YUQsR0FBU3YyQyxVQUFVVCxPQUFPNmxDLE9BQU9vUixHQUFZQSxFQUFXeDJDLFdBQVdpTixhQUFh
Z0csTUFBTXNqQyxFQUFTNzJDLFlBQVcsRUFBTSsyQyxVQUFTLEVBQUtoM0MsY0FBYSxLQUFXKzJD
LElBQVdqM0MsT0FBT20zQyxlQUFlbjNDLE9BQU9tM0MsZUFBZUgsRUFBU0MsR0FBWUQsRUFBU0ks
VUFBVUgsR0FMM3dDLEdBQUk4RSxHQUFzQzc4QyxFQUFvQixHQUMxRDg4QyxFQUE4Qzk4QyxFQUFv
Qm1CLEVBQUUwN0MsR0FDcEVFLEVBQTJDLzhDLEVBQW9CLElBQy9EZzlDLEVBQW1EaDlDLEVBQW9C
bUIsRUFBRTQ3QyxHQUN6RTQvQyxFQUErQzM4RixFQUFvQixJQUN4Rmk5QyxFQUFhLFdBQVcsUUFB
U0MsR0FBaUIxNEMsRUFBT2dQLEdBQU8sSUFBSSxHQUFJblQsR0FBRSxFQUFFQSxFQUFFbVQsRUFB
TXhRLE9BQU8zQyxJQUFJLENBQUMsR0FBSTY1QixHQUFXMW1CLEVBQU1uVCxFQUFHNjVCLEdBQVdq
NUIsV0FBV2k1QixFQUFXajVCLGFBQVksRUFBTWk1QixFQUFXbDVCLGNBQWEsRUFBUSxTQUFVazVC
LEtBQVdBLEVBQVc4ZCxVQUFTLEdBQUtsM0MsT0FBT0MsZUFBZXlELEVBQU8wMUIsRUFBV3IxQixJ
QUFJcTFCLElBQWMsTUFBTyxVQUFTcEIsRUFBWXFrQixFQUFXQyxHQUF1SSxNQUF2SEQsSUFBV0Qs
RUFBaUJwa0IsRUFBWXYzQixVQUFVNDdDLEdBQWVDLEdBQVlGLEVBQWlCcGtCLEVBQVlza0IsR0FB
b0J0a0IsTTZOcmx3QnZkOGpFLEU3TnFsd0JveUMsU0FBU3JpRCxHQUEyQyxRQUFTcWlELEtBQVcs
R0FBSTFtRCxHQUFTb0gsRUFBTTlDLEVBQU0rQyxDQUFLMWtCLEdBQWdCM3ZCLEtBQUswekYsRUFB
VSxLQUFJLEdBQUlobUQsR0FBSzd6QyxVQUFVQyxPQUFPVixFQUFLd1IsTUFBTThpQyxHQUFNRSxF
QUFLLEVBQUVBLEVBQUtGLEVBQUtFLElBQVF4MEMsRUFBS3cwQyxHQUFNL3pDLFVBQVUrekMsRUFB
TyxPQUFhd0csR0FBTzlDLEVBQU03QyxFQUEyQnp1QyxNQUFNZ3RDLEVBQUswbUQsRUFBUzFrRCxX
QUFXcDNDLE9BQU8wOEMsZUFBZW8vQyxJQUFXcjhGLEtBQUtrMUIsTUFBTXlnQixHQUFNaHRDLE1B
QU1zdkIsT0FBT2wyQixLQUFlazRDLEU2Tjdrd0Jsc0RDLE9BQ0V5RCxTQUFTLEc3TjRrd0JtdEQx
RCxFNk56a3dCOXREcWlELGtCQUFvQixXQUNsQnJpRCxFQUFLdGlCLFVBQVdnbUIsU0FBUyxLN053
a3dCdXdEMUQsRTZOcmt3Qmx5RDRnRCxXQUFhLFNBQUN0NUQsRUFBSXhwQixHQUNJLElBQWhCQSxF
QUFLdFYsT0FDUHczQyxFQUFLaG5DLE1BQU1zcEYsV0FBV2g3RCxHQUV0QjBZLEVBQUtobkMsTUFB
TXVwRixTQUFTajdELEVBQUl4cEIsR0FFMUJraUMsRUFBS3RpQixVQUFXZ21CLFNBQVMsSzdOK2p3
QjRnRFgsRUFBb1pELEVBQU8zRixFQUEyQjZDLEVBQU0rQyxHQUFrdEMsTUFBejJEMUYsR0FBVStr
RCxFQUFTcmlELEdBQTJvQjBDLEVBQWEyL0MsSUFBVy8zRixJQUFJLFNBQVMyUCxNQUFNLFc2TjVq
d0I1Z0UsR0FBQXdvRixHQUFBOXpGLEtBQUFnekYsRUFDb0NoekYsS0FBS3NLLE1BQXhDbW9GLEVB
RERPLEVBQ0NQLEtBQU1zQixFQURQZixFQUNPZSxhQUFjSCxFQURyQlosRUFDcUJZLFdBRXhCcnBG
LFFBdUJKLE9BckJFQSxHQURFdkssS0FBS3V4QyxNQUFNeUQsUUFFWHBCLEVBQUFoN0MsRUFBQW1H
LGNBQUMwMEYsRUFBQSxHQUFjcmtGLEtBQU1xakYsRUFBS3JqRixLQUNYNGxDLFFBQVNoMUMsS0FB
S3V4QyxNQUFNeUQsUUFDcEJOLE9BQVEsU0FBQ3RsQyxHQUFELE1BQVUwa0YsR0FBSzVCLFdBQVdP
LEVBQUs3NUQsR0FBSXhwQixNQUkxRHdrQyxFQUFBaDdDLEVBQUFtRyxjQUFBLE9BQUsrMUMsVUFB
VSxRQUNibEIsRUFBQWg3QyxFQUFBbUcsY0FBQSxTQUFPKzFDLFVBQVUsU0FDVjd5QyxLQUFLLFdB
Q0w2a0IsUUFBUzJyRSxFQUFLQyxVQUNkOXJFLFNBQVUsaUJBQU1tdEUsR0FBYXRCLEVBQUs3NUQs
T0FDekNnYixFQUFBaDdDLEVBQUFtRyxjQUFBLFNBQU9pMUYsY0FBZWgwRixLQUFLMnpGLG1CQUN4
QmxCLEVBQUtyakYsTUFFUndrQyxFQUFBaDdDLEVBQUFtRyxjQUFBLFVBQVErMUMsVUFBVSxVQUNW
bS9DLFFBQVMsaUJBQU1MLEdBQVduQixFQUFLNzVELFFBTTNDZ2IsRUFBQWg3QyxFQUFBbUcsY0FB
QSxNQUFJKzFDLFVBQVdoQixLQUNiNCtDLFVBQVdELEVBQUtDLFVBQ2hCMTlDLFFBQVNoMUMsS0FB
S3V4QyxNQUFNeUQsV0FFbkJ6cUMsTzdONmh3QnFyR21wRixHNk5ybHdCeHBHLy9DLEVBQUEsVUFB
akIrL0MsR0FDWmxzRSxXQUNMaXJFLEtBQU05K0MsRUFBQSxVQUFVeDdDLE9BQU9tMkMsV0FDdkJ1
bEQsU0FBVWxnRCxFQUFBLFVBQVV2d0IsS0FBS2tyQixXQUN6QnNsRCxXQUFZamdELEVBQUEsVUFB
VXZ3QixLQUFLa3JCLFdBQzNCeWxELGFBQWNwZ0QsRUFBQSxVQUFVdndCLEtBQUtrckIsWTdOZ2x3
QndqSHh1QixFQUF1QixFQUFJLEdBSTltSCxTQUFVNW9CLEVBQVE0b0IsRUFBcUJocEIsR0FFN0Ms
WUFNaWhCLFNBQVM2NEIsR0FBZ0Jyb0IsRUFBU3NvQixHQUFhLEtBQUt0b0IsWUFBb0Jzb0IsSUFB
YyxLQUFNLElBQUl4MUIsV0FBVSxxQ0FBdUMsUUFBU3EwQyxHQUEyQnJrQyxFQUFLL1MsR0FBTSxJ
QUFJK1MsRUFBTSxLQUFNLElBQUlza0MsZ0JBQWUsNERBQThELFFBQU9yM0MsR0FBcUIsaUJBQVBB
LElBQStCLG1CQUFQQSxHQUF3QitTLEVBQUwvUyxFQUFXLFFBQVNzM0MsR0FBVUMsRUFBU0MsR0FB
WSxHQUF1QixtQkFBYkEsSUFBc0MsT0FBYkEsRUFBbUIsS0FBTSxJQUFJejBDLFdBQVUsaUVBQWtF
eTBDLEdBQWFELEdBQVN2MkMsVUFBVVQsT0FBTzZsQyxPQUFPb1IsR0FBWUEsRUFBV3gyQyxXQUFX
aU4sYUFBYWdHLE1BQU1zakMsRUFBUzcyQyxZQUFXLEVBQU0rMkMsVUFBUyxFQUFLaDNDLGNBQWEs
S0FBVysyQyxJQUFXajNDLE9BQU9tM0MsZUFBZW4zQyxPQUFPbTNDLGVBQWVILEVBQVNDLEdBQVlE
LEVBQVNJLFVBQVVILEdBQVksUUFBU3NqRCxHQUFnQnhsRSxFQUFJaHhCLEVBQUkyUCxHQUF5SSxN
QUEvSDNQLEtBQU9neEIsR0FBSy8wQixPQUFPQyxlQUFlODBCLEVBQUloeEIsR0FBSzJQLE1BQU1B
LEVBQU12VCxZQUFXLEVBQUtELGNBQWEsRUFBS2czQyxVQUFTLElBQWFuaUIsRUFBSWh4QixHQUFL
MlAsRUFBY3FoQixFQUwzOUMsR0FLNmV1bkUsR0FMemV2Z0QsRUFBc0M3OEMsRUFBb0IsR0FDMUQ4
OEMsRUFBOEM5OEMsRUFBb0JtQixFQUFFMDdDLEdBQ3BFRSxFQUEyQy84QyxFQUFvQixJQUMvRGc5
QyxFQUFtRGg5QyxFQUFvQm1CLEVBQUU0N0MsR0FDekVzZ0QsRUFBdURyOUYsRUFBb0IsSUFDaEdp
OUMsRUFBYSxXQUFXLFFBQVNDLEdBQWlCMTRDLEVBQU9nUCxHQUFPLElBQUksR0FBSW5ULEdBQUUs
RUFBRUEsRUFBRW1ULEVBQU14USxPQUFPM0MsSUFBSSxDQUFDLEdBQUk2NUIsR0FBVzFtQixFQUFN
blQsRUFBRzY1QixHQUFXajVCLFdBQVdpNUIsRUFBV2o1QixhQUFZLEVBQU1pNUIsRUFBV2w1Qixj
QUFhLEVBQVEsU0FBVWs1QixLQUFXQSxFQUFXOGQsVUFBUyxHQUFLbDNDLE9BQU9DLGVBQWV5RCxF
QUFPMDFCLEVBQVdyMUIsSUFBSXExQixJQUFjLE1BQU8sVUFBU3BCLEVBQVlxa0IsRUFBV0MsR0FB
dUksTUFBdkhELElBQVdELEVBQWlCcGtCLEVBQVl2M0IsVUFBVTQ3QyxHQUFlQyxHQUFZRixFQUFp
QnBrQixFQUFZc2tCLEdBQW9CdGtCLE04Tmptd0J0ZXdrRSxZQUNIRCxFQUFBLEVBQVcsT0FEUmhD
LEVBQUErQixFQUVIQyxFQUFBLEVBQWMsVUFGWGhDLEVBQUErQixFQUdIQyxFQUFBLEVBQWlCLGFB
SGRELEdBTWVHLEU5TjJsd0IrM0QsU0FBU2hqRCxHQUF5QyxRQUFTZ2pELEtBQXNDLE1BQTdCMWtF
LEdBQWdCM3ZCLEtBQUtxMEYsR0FBZTVsRCxFQUEyQnp1QyxNQUFNcTBGLEVBQU9ybEQsV0FBV3Az
QyxPQUFPMDhDLGVBQWUrL0MsSUFBUzluRSxNQUFNdnNCLEtBQUtuRyxZQUF5eEQsTUFBejhEODBD
LEdBQVUwbEQsRUFBT2hqRCxHQUE0SzBDLEVBQWFzZ0QsSUFBUzE0RixJQUFJLGtCQUFrQjJQLE1B
QU0sVzhObGx3QnBvRSxHQUNSNG5GLEdBQWdCbHpGLEtBQUtzSyxNQUFyQjRvRixZQUNGb0IsRUFB
MkIsSUFBaEJwQixFQUFvQixPQUFTLE9BRTlDLE9BQ0V0L0MsR0FBQWg3QyxFQUFBbUcsY0FBQSxR
QUFNKzFDLFVBQVUsY0FDZGxCLEVBQUFoN0MsRUFBQW1HLGNBQUEsY0FBU20wRixHQUFlLE1BRDFC
LElBQzBDb0IsRUFEMUMsWTlONmt3QjA5RTM0RixJQUFJLG1CQUFtQjJQLE1BQU0sUzhOdmt3QjEr
RThzRSxHQUNmLEdBQU1sOEMsR0FBUWs0RCxFQUFjaGMsR0FETDRhLEVBRW9CaHpGLEtBQUtzSyxN
QUFoQ2lxRixFQUZPdkIsRUFFZjVhLE9BQXdCZ2IsRUFGVEosRUFFU0ksTUFFaEMsT0FDRXgvQyxH
QUFBaDdDLEVBQUFtRyxjQUFBLEtBQUcrMUMsVUFBV2hCLEtBQWE3WixTQUFVbStDLElBQVdtYyxJ
QUM3Q3R1QyxPQUFTK3dCLE9BQVEsV0FDakJpZCxRQUFTLGlCQUFNYixHQUFPaGIsS0FDdEJsOEMs
TTlOK2p3QiszRnZnQyxJQUFJLG9CQUFvQjJQLE1BQU0sVzhOMWp3Qmg1RixHQUFBK25GLEdBQzJC
cnpGLEtBQUtzSyxNQUExQ3lvRixFQURVTSxFQUNWTixlQUFnQkksRUFETkUsRUFDTUYsZ0JBQ3hC
LElBQUlKLEVBQWlCLEVBQ25CLE1BQ0VuL0MsR0FBQWg3QyxFQUFBbUcsY0FBQSxVQUFRKzFDLFVB
QVUsa0JBQ1ZtL0MsUUFBU2QsR0FEakIsc0I5TnNqd0JrdEd4M0YsSUFBSSxTQUFTMlAsTUFBTSxX
OE45aXdCbHVHLEdBQUF3b0YsR0FBQTl6RixJQUNQLE9BQ0U0ekMsR0FBQWg3QyxFQUFBbUcsY0FB
QSxVQUFRKzFDLFVBQVUsVUFDZjkwQyxLQUFLdzBGLGtCQUNONWdELEVBQUFoN0MsRUFBQW1HLGNB
QUEsTUFBSSsxQyxVQUFVLFlBQ1RxL0MsRUFBQSxFQUFVQSxFQUFBLEVBQWFBLEVBQUEsR0FBaUJy
NUYsSUFBSSxTQUFBczlFLEdBQUEsTUFDN0N4a0MsR0FBQWg3QyxFQUFBbUcsY0FBQSxNQUFJcEQs
SUFBS3k4RSxHQUNOMGIsRUFBS1csaUJBQWlCcmMsT0FJNUJwNEUsS0FBSzAwRix5QjlObWl3QjIy
SEwsRzhOM2x3QnIxSDFnRCxFQUFBLFVBQWYwZ0QsR0FDWjdzRSxXQUNMdXJFLGVBQWdCcC9DLEVB
QUEsVUFBVTNoQixPQUFPc2MsV0FDakM0a0QsWUFBYXYvQyxFQUFBLFVBQVUzaEIsT0FBT3NjLFdB
QzlCOHBDLE9BQVF6a0MsRUFBQSxVQUFVNzZCLE9BQU93MUIsV0FDekI2a0QsaUJBQWtCeC9DLEVB
QUEsVUFBVXZ3QixLQUFLa3JCLFdBQ2pDOGtELE9BQVF6L0MsRUFBQSxVQUFVdndCLEtBQUtrckIs
WTlOcWx3QjgwSXh1QixFQUF1QixFQUFJLEdBSTkzSSxTQUFVNW9CLEVBQVE0b0IsRUFBcUJocEIs
R0FFN0MsWUFDQWMsUUFBT0MsZUFBZWlvQixFQUFxQixjQUFnQnhVLE9BQU8sSUFDbkN4VSxFQUFv
QlUsRUFBRXNvQixFQUFxQixVQUFXLFdBQWEsTUFBT2l5RSxLQUMxRWo3RixFQUFvQlUsRUFBRXNv
QixFQUFxQixhQUFjLFdBQWEsTUFBTzh6RSxLQUM3RTk4RixFQUFvQlUsRUFBRXNvQixFQUFxQixX
QUFZLFdBQWEsTUFBTyt6RSxLQUMzRS84RixFQUFvQlUsRUFBRXNvQixFQUFxQixlQUFnQixXQUFh
LE1BQU9pMEUsS0FDL0VqOUYsRUFBb0JVLEVBQUVzb0IsRUFBcUIsY0FBZSxXQUFhLE1BQU9tekUs
S0FDOUVuOEYsRUFBb0JVLEVBQUVzb0IsRUFBcUIsaUJBQWtCLFdBQWEsTUFBTyt5RSxJQUMzRixJ
QUFJOEIsR0FBdUQ3OUYsRUFBb0IsSStOam53QnZGaTdGLEVBQVUsU0FBQTNpRixHQUFBLE9BQVdu
TixLQUFNMHlGLEVBQUEsRUFBZ0J2bEYsU0FDM0N3a0YsRUFBYSxTQUFBaDdELEdBQUEsT0FBUzMy
QixLQUFNMHlGLEVBQUEsRUFBbUIvN0QsT0FDL0NpN0QsRUFBVyxTQUFDajdELEVBQUl4cEIsR0FB
TCxPQUFpQm5OLEtBQU0weUYsRUFBQSxFQUFpQi83RCxLQUFJeHBCLFNBQ3ZEMmtGLEVBQWUsU0FB
QW43RCxHQUFBLE9BQVMzMkIsS0FBTTB5RixFQUFBLEVBQXFCLzdELE9BQ25EcTZELEVBQWMsa0JB
QVNoeEYsS0FBTTB5RixFQUFBLElBQzdCOUIsRUFBaUIsa0JBQVM1d0YsS0FBTTB5RixFQUFBLEsv
Tmlud0J2QyxTQUFVejlGLEVBQVE0b0IsRUFBcUJocEIsR0FFN0MsWUFDcUIsSUFBSTQ0RixHQUFz
QzU0RixFQUFvQixJQUMxRDg5RixFQUF1Qzk5RixFQUFvQixLZ096bndCOUUrOUYsRUFBY2o5RixP
QUFBODNGLEVBQUEsSUFDbEJtQyxNQUFBK0MsRUFBQSxHQUdGOTBFLEdBQUEsS2hPMG53Qk0sU0FB
VTVvQixFQUFRNG9CLEVBQXFCaHBCLEdBRTdDLFlBR0EsU0FBU2crRixHQUFtQnZsRSxHQUFLLEdB
QUcza0IsTUFBTXNYLFFBQVFxTixHQUFLLENBQUMsSUFBSSxHQUFJcDRCLEdBQUUsRUFBRTQ5RixF
QUFLbnFGLE1BQU0ya0IsRUFBSXoxQixRQUFRM0MsRUFBRW80QixFQUFJejFCLE9BQU8zQyxJQUFL
NDlGLEVBQUs1OUYsR0FBR280QixFQUFJcDRCLEVBQUksT0FBTzQ5RixHQUFXLE1BQU9ucUYsT0FB
TXBQLEtBQUsrekIsR2lPbG93QmxKLFFBQVNzaUUsS0FBb0MsR0FBOUJ0Z0QsR0FBOEIxM0MsVUFB
QUMsT0FBQSxPQUFBWixLQUFBVyxVQUFBLEdBQUFBLFVBQUEsR0FBdEI4eUQsRUFBY3BnQixFQUFR
MXlDLFVBQUEsRUFDMUQsUUFBUTB5QyxFQUFPdHFDLE1BQ2IsSUFBSzB5RixHQUFBLEVBQ0gsU0FB
QXJsRSxPQUFBd2xFLEVBQ0t2akQsS0FFRDNZLEdBQUkyWSxFQUFNMUQsT0FBTyxTQUFDbW5ELEVB
QU92QyxHQUFSLE1BQWlCbDBGLE1BQUt5OEQsSUFBSXkzQixFQUFLNzVELEdBQUlvOEQsS0FBUyxH
QUFLLEVBQ2xFdEMsV0FBVyxFQUNYdGpGLEtBQU1tOUIsRUFBT245QixPQUluQixLQUFLdWxGLEdB
QUEsRUFDSCxNQUFPcGpELEdBQU02bUMsT0FBTyxTQUFBcWEsR0FBQSxNQUNsQkEsR0FBSzc1RCxL
QUFPMlQsRUFBTzNULElBR3ZCLEtBQUsrN0QsR0FBQSxFQUNILE1BQU9wakQsR0FBTXoyQyxJQUFJ
LFNBQUEyM0YsR0FBQSxNQUNmQSxHQUFLNzVELEtBQU8yVCxFQUFPM1QsR0FBbkJoaEMsT0FBQTRD
LFVBQ09pNEYsR0FBTXJqRixLQUFNbTlCLEVBQU9uOUIsT0FDeEJxakYsR0FHTixLQUFLa0MsR0FB
QSxFQUNILE1BQU9wakQsR0FBTXoyQyxJQUFJLFNBQUEyM0YsR0FBQSxNQUNmQSxHQUFLNzVELEtB
QU8yVCxFQUFPM1QsR0FBbkJoaEMsT0FBQTRDLFVBQ09pNEYsR0FBTUMsV0FBWUQsRUFBS0MsWUFD
NUJELEdBR04sS0FBS2tDLEdBQUEsRUFDSCxHQUFNTSxHQUFlMWpELEVBQU13WSxNQUFNLFNBQUEw
b0MsR0FBQSxNQUFRQSxHQUFLQyxXQUM5QyxPQUFPbmhELEdBQU16MkMsSUFBSSxTQUFBMjNGLEdB
QUEsTUFBQTc2RixRQUFBNEMsVUFDWmk0RixHQUNIQyxXQUFZdUMsS0FHaEIsS0FBS04sR0FBQSxF
QUNILE1BQU9wakQsR0FBTTZtQyxPQUFPLFNBQUFxYSxHQUFBLE9BQTJCLElBQW5CQSxFQUFLQyxX
QUVuQyxTQUNFLE1BQU9uaEQsSWpPc2x3Qm9CenhCLEVBQXVCLEVBQUkreEUsQ0FDdkMsSUFBSThD
LEdBQXVENzlGLEVBQW9CLElpT25vd0I5RjYxRCxNak93b3dCQSxTQUFVejFELEVBQVFEIiwiZmls
ZSI6InN0YXRpYy9qcy9tYWluLjE4YjQwOWUxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioq
Ki8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQv
LyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307
XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8g
XHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoq
KioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlm
KGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5z
dGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioq
LyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlc
bi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7
XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxu
LyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8q
KioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRt
b2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBv
cnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxh
ZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8q
KioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVc
bi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioq
KiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChf
X3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBt
b2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVc
bi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8q
KioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkg
ZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBv
cnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVf
Xy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVy
dHkoZXhwb3J0cywgbmFtZSwge1xuLyoqKioqKi8gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNl
LFxuLyoqKioqKi8gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuLyoqKioqKi8gXHRcdFx0XHRn
ZXQ6IGdldHRlclxuLyoqKioqKi8gXHRcdFx0fSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8g
XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBm
b3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193
ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFy
IGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRm
dW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoq
KioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsg
fTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRl
cik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiov
XG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoq
KioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5
KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBw
cm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3Bh
dGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIi4vXCI7XG4vKioqKioq
L1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8q
KioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5z
ID0gOTcpO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoW1xuLyog
MCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVf
Xykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNl
bnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMg
c291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5k
IGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNv
dXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBi
ZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4g
Ki9cblxuXG5cbi8qKlxuICogVXNlIGludmFyaWFudCgpIHRvIGFzc2VydCBzdGF0ZSB3aGljaCB5
b3VyIHByb2dyYW0gYXNzdW1lcyB0byBiZSB0cnVlLlxuICpcbiAqIFByb3ZpZGUgc3ByaW50Zi1z
dHlsZSBmb3JtYXQgKG9ubHkgJXMgaXMgc3VwcG9ydGVkKSBhbmQgYXJndW1lbnRzXG4gKiB0byBw
cm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgYnJva2UgYW5kIHdoYXQgeW91IHdlcmVcbiAq
IGV4cGVjdGluZy5cbiAqXG4gKiBUaGUgaW52YXJpYW50IG1lc3NhZ2Ugd2lsbCBiZSBzdHJpcHBl
ZCBpbiBwcm9kdWN0aW9uLCBidXQgdGhlIGludmFyaWFudFxuICogd2lsbCByZW1haW4gdG8gZW5z
dXJlIGxvZ2ljIGRvZXMgbm90IGRpZmZlciBpbiBwcm9kdWN0aW9uLlxuICovXG5cbnZhciB2YWxp
ZGF0ZUZvcm1hdCA9IGZ1bmN0aW9uIHZhbGlkYXRlRm9ybWF0KGZvcm1hdCkge307XG5cbmlmIChm
YWxzZSkge1xuICB2YWxpZGF0ZUZvcm1hdCA9IGZ1bmN0aW9uIHZhbGlkYXRlRm9ybWF0KGZvcm1h
dCkge1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVy
cm9yKCdpbnZhcmlhbnQgcmVxdWlyZXMgYW4gZXJyb3IgbWVzc2FnZSBhcmd1bWVudCcpO1xuICAg
IH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gaW52YXJpYW50KGNvbmRpdGlvbiwgZm9ybWF0LCBhLCBi
LCBjLCBkLCBlLCBmKSB7XG4gIHZhbGlkYXRlRm9ybWF0KGZvcm1hdCk7XG5cbiAgaWYgKCFjb25k
aXRpb24pIHtcbiAgICB2YXIgZXJyb3I7XG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7
XG4gICAgICBlcnJvciA9IG5ldyBFcnJvcignTWluaWZpZWQgZXhjZXB0aW9uIG9jY3VycmVkOyB1
c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgJyArICdmb3IgdGhlIGZ1bGwgZXJy
b3IgbWVzc2FnZSBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLicpO1xuICAgIH0gZWxz
ZSB7XG4gICAgICB2YXIgYXJncyA9IFthLCBiLCBjLCBkLCBlLCBmXTtcbiAgICAgIHZhciBhcmdJ
bmRleCA9IDA7XG4gICAgICBlcnJvciA9IG5ldyBFcnJvcihmb3JtYXQucmVwbGFjZSgvJXMvZywg
ZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gYXJnc1thcmdJbmRleCsrXTtcbiAgICAgIH0p
KTtcbiAgICAgIGVycm9yLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgfVxuXG4g
ICAgZXJyb3IuZnJhbWVzVG9Qb3AgPSAxOyAvLyB3ZSBkb24ndCBjYXJlIGFib3V0IGludmFyaWFu
dCdzIG93biBmcmFtZVxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRz
ID0gaW52YXJpYW50O1xuXG4vKioqLyB9KSxcbi8qIDEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1
bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4v
KipcbiAqIENvcHlyaWdodCAyMDE0LTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRz
IHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhl
IEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSBy
b290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4g
KiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRo
ZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuXG5cbnZhciBlbXB0eUZ1bmN0aW9uID0gX193
ZWJwYWNrX3JlcXVpcmVfXyg2KTtcblxuLyoqXG4gKiBTaW1pbGFyIHRvIGludmFyaWFudCBidXQg
b25seSBsb2dzIGEgd2FybmluZyBpZiB0aGUgY29uZGl0aW9uIGlzIG5vdCBtZXQuXG4gKiBUaGlz
IGNhbiBiZSB1c2VkIHRvIGxvZyBpc3N1ZXMgaW4gZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzIGlu
IGNyaXRpY2FsXG4gKiBwYXRocy4gUmVtb3ZpbmcgdGhlIGxvZ2dpbmcgY29kZSBmb3IgcHJvZHVj
dGlvbiBlbnZpcm9ubWVudHMgd2lsbCBrZWVwIHRoZVxuICogc2FtZSBsb2dpYyBhbmQgZm9sbG93
IHRoZSBzYW1lIGNvZGUgcGF0aHMuXG4gKi9cblxudmFyIHdhcm5pbmcgPSBlbXB0eUZ1bmN0aW9u
O1xuXG5pZiAoZmFsc2UpIHtcbiAgdmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uIHByaW50V2Fy
bmluZyhmb3JtYXQpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJn
cyA9IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVu
OyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAg
IH1cblxuICAgIHZhciBhcmdJbmRleCA9IDA7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzog
JyArIGZvcm1hdC5yZXBsYWNlKC8lcy9nLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gYXJn
c1thcmdJbmRleCsrXTtcbiAgICB9KTtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRl
ZmluZWQnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICB0cnkg
e1xuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxuICAgICAgLy8g
VGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVz
ZSB0aGlzIHN0YWNrXG4gICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0
aGlzIHdhcm5pbmcgdG8gZmlyZS5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAg
ICB9IGNhdGNoICh4KSB7fVxuICB9O1xuXG4gIHdhcm5pbmcgPSBmdW5jdGlvbiB3YXJuaW5nKGNv
bmRpdGlvbiwgZm9ybWF0KSB7XG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAg
ICB0aHJvdyBuZXcgRXJyb3IoJ2B3YXJuaW5nKGNvbmRpdGlvbiwgZm9ybWF0LCAuLi5hcmdzKWAg
cmVxdWlyZXMgYSB3YXJuaW5nICcgKyAnbWVzc2FnZSBhcmd1bWVudCcpO1xuICAgIH1cblxuICAg
IGlmIChmb3JtYXQuaW5kZXhPZignRmFpbGVkIENvbXBvc2l0ZSBwcm9wVHlwZTogJykgPT09IDAp
IHtcbiAgICAgIHJldHVybjsgLy8gSWdub3JlIENvbXBvc2l0ZUNvbXBvbmVudCBwcm9wdHlwZSBj
aGVjay5cbiAgICB9XG5cbiAgICBpZiAoIWNvbmRpdGlvbikge1xuICAgICAgZm9yICh2YXIgX2xl
bjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbjIgPiAyID8gX2xlbjIgLSAy
IDogMCksIF9rZXkyID0gMjsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICBhcmdz
W19rZXkyIC0gMl0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgfVxuXG4gICAgICBwcmludFdh
cm5pbmcuYXBwbHkodW5kZWZpbmVkLCBbZm9ybWF0XS5jb25jYXQoYXJncykpO1xuICAgIH1cbiAg
fTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB3YXJuaW5nO1xuXG4vKioqLyB9KSxcbi8qIDIgKi9c
bi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtc
blxuXCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBG
YWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJj
ZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0
aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2Ug
dHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91
bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4g
Ki9cblxuXG4vKipcbiAqIFdBUk5JTkc6IERPIE5PVCBtYW51YWxseSByZXF1aXJlIHRoaXMgbW9k
dWxlLlxuICogVGhpcyBpcyBhIHJlcGxhY2VtZW50IGZvciBgaW52YXJpYW50KC4uLilgIHVzZWQg
YnkgdGhlIGVycm9yIGNvZGUgc3lzdGVtXG4gKiBhbmQgd2lsbCBfb25seV8gYmUgcmVxdWlyZWQg
YnkgdGhlIGNvcnJlc3BvbmRpbmcgYmFiZWwgcGFzcy5cbiAqIEl0IGFsd2F5cyB0aHJvd3MuXG4g
Ki9cblxuZnVuY3Rpb24gcmVhY3RQcm9kSW52YXJpYW50KGNvZGUpIHtcbiAgdmFyIGFyZ0NvdW50
ID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7XG5cbiAgdmFyIG1lc3NhZ2UgPSAnTWluaWZpZWQgUmVh
Y3QgZXJyb3IgIycgKyBjb2RlICsgJzsgdmlzaXQgJyArICdodHRwOi8vZmFjZWJvb2suZ2l0aHVi
LmlvL3JlYWN0L2RvY3MvZXJyb3ItZGVjb2Rlci5odG1sP2ludmFyaWFudD0nICsgY29kZTtcblxu
ICBmb3IgKHZhciBhcmdJZHggPSAwOyBhcmdJZHggPCBhcmdDb3VudDsgYXJnSWR4KyspIHtcbiAg
ICBtZXNzYWdlICs9ICcmYXJnc1tdPScgKyBlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW2Fy
Z0lkeCArIDFdKTtcbiAgfVxuXG4gIG1lc3NhZ2UgKz0gJyBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBv
ciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQnICsgJyBmb3IgZnVsbCBlcnJv
cnMgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4nO1xuXG4gIHZhciBlcnJvciA9IG5l
dyBFcnJvcihtZXNzYWdlKTtcbiAgZXJyb3IubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztc
biAgZXJyb3IuZnJhbWVzVG9Qb3AgPSAxOyAvLyB3ZSBkb24ndCBjYXJlIGFib3V0IHJlYWN0UHJv
ZEludmFyaWFudCdzIG93biBmcmFtZVxuXG4gIHRocm93IGVycm9yO1xufVxuXG5tb2R1bGUuZXhw
b3J0cyA9IHJlYWN0UHJvZEludmFyaWFudDtcblxuLyoqKi8gfSksXG4vKiAzICovXG4vKioqLyAo
ZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNl
IHN0cmljdFwiO1xuLypcbm9iamVjdC1hc3NpZ25cbihjKSBTaW5kcmUgU29yaHVzXG5AbGljZW5z
ZSBNSVRcbiovXG5cblxuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbnZhciBn
ZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFy
IGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBw
cm9wSXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtc
blxuZnVuY3Rpb24gdG9PYmplY3QodmFsKSB7XG5cdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09
PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNh
bm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xuXHR9XG5cblx0cmV0dXJu
IE9iamVjdCh2YWwpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRVc2VOYXRpdmUoKSB7XG5cdHRyeSB7
XG5cdFx0aWYgKCFPYmplY3QuYXNzaWduKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxu
XG5cdFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVy
IFY4IHZlcnNpb25zLlxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lz
c3Vlcy9kZXRhaWw/aWQ9NDExOFxuXHRcdHZhciB0ZXN0MSA9IG5ldyBTdHJpbmcoJ2FiYycpOyAg
Ly8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXctd3JhcHBlcnNcblx0XHR0ZXN0MVs1XSA9ICdk
ZSc7XG5cdFx0aWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QxKVswXSA9PT0gJzUn
KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNo
cm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MiA9IHt9
O1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xuXHRcdFx0dGVzdDJbJ18nICsg
U3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSBpO1xuXHRcdH1cblx0XHR2YXIgb3JkZXIyID0gT2Jq
ZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDIpLm1hcChmdW5jdGlvbiAobikge1xuXHRcdFx0
cmV0dXJuIHRlc3QyW25dO1xuXHRcdH0pO1xuXHRcdGlmIChvcmRlcjIuam9pbignJykgIT09ICcw
MTIzNDU2Nzg5Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBz
Oi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIg
dGVzdDMgPSB7fTtcblx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnLnNwbGl0KCcnKS5mb3JFYWNo
KGZ1bmN0aW9uIChsZXR0ZXIpIHtcblx0XHRcdHRlc3QzW2xldHRlcl0gPSBsZXR0ZXI7XG5cdFx0
fSk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIHRlc3QzKSkuam9pbign
JykgIT09XG5cdFx0XHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcpIHtcblx0XHRcdHJldHVybiBm
YWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0
Ly8gV2UgZG9uJ3QgZXhwZWN0IGFueSBvZiB0aGUgYWJvdmUgdG8gdGhyb3csIGJ1dCBiZXR0ZXIg
dG8gYmUgc2FmZS5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMg
PSBzaG91bGRVc2VOYXRpdmUoKSA/IE9iamVjdC5hc3NpZ24gOiBmdW5jdGlvbiAodGFyZ2V0LCBz
b3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZh
ciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysr
KSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5
IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtc
blx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAo
Z2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gZ2V0T3duUHJvcGVydHlT
eW1ib2xzKGZyb20pO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsg
aSsrKSB7XG5cdFx0XHRcdGlmIChwcm9wSXNFbnVtZXJhYmxlLmNhbGwoZnJvbSwgc3ltYm9sc1tp
XSkpIHtcblx0XHRcdFx0XHR0b1tzeW1ib2xzW2ldXSA9IGZyb21bc3ltYm9sc1tpXV07XG5cdFx0
XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdG87XG59O1xuXG5cbi8qKiov
IH0pLFxuLyogNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNr
X3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMt
cHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICog
VGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2Ug
Zm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRo
aXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMg
Y2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5Llxu
ICpcbiAqL1xuXG5cblxudmFyIF9wcm9kSW52YXJpYW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygy
KTtcblxudmFyIERPTVByb3BlcnR5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7XG52YXIgUmVh
Y3RET01Db21wb25lbnRGbGFncyA9IF9fd2VicGFja19yZXF1aXJlX18oNTgpO1xuXG52YXIgaW52
YXJpYW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxudmFyIEFUVFJfTkFNRSA9IERPTVBy
b3BlcnR5LklEX0FUVFJJQlVURV9OQU1FO1xudmFyIEZsYWdzID0gUmVhY3RET01Db21wb25lbnRG
bGFncztcblxudmFyIGludGVybmFsSW5zdGFuY2VLZXkgPSAnX19yZWFjdEludGVybmFsSW5zdGFu
Y2UkJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpO1xuXG4vKipcbiAqIENo
ZWNrIGlmIGEgZ2l2ZW4gbm9kZSBzaG91bGQgYmUgY2FjaGVkLlxuICovXG5mdW5jdGlvbiBzaG91
bGRQcmVjYWNoZU5vZGUobm9kZSwgbm9kZUlEKSB7XG4gIHJldHVybiBub2RlLm5vZGVUeXBlID09
PSAxICYmIG5vZGUuZ2V0QXR0cmlidXRlKEFUVFJfTkFNRSkgPT09IFN0cmluZyhub2RlSUQpIHx8
IG5vZGUubm9kZVR5cGUgPT09IDggJiYgbm9kZS5ub2RlVmFsdWUgPT09ICcgcmVhY3QtdGV4dDog
JyArIG5vZGVJRCArICcgJyB8fCBub2RlLm5vZGVUeXBlID09PSA4ICYmIG5vZGUubm9kZVZhbHVl
ID09PSAnIHJlYWN0LWVtcHR5OiAnICsgbm9kZUlEICsgJyAnO1xufVxuXG4vKipcbiAqIERyaWxs
IGRvd24gKHRocm91Z2ggY29tcG9zaXRlcyBhbmQgZW1wdHkgY29tcG9uZW50cykgdW50aWwgd2Ug
Z2V0IGEgaG9zdCBvclxuICogaG9zdCB0ZXh0IGNvbXBvbmVudC5cbiAqXG4gKiBUaGlzIGlzIHBy
ZXR0eSBwb2x5bW9ycGhpYyBidXQgdW5hdm9pZGFibGUgd2l0aCB0aGUgY3VycmVudCBzdHJ1Y3R1
cmUgd2UgaGF2ZVxuICogZm9yIGBfcmVuZGVyZWRDaGlsZHJlbmAuXG4gKi9cbmZ1bmN0aW9uIGdl
dFJlbmRlcmVkSG9zdE9yVGV4dEZyb21Db21wb25lbnQoY29tcG9uZW50KSB7XG4gIHZhciByZW5k
ZXJlZDtcbiAgd2hpbGUgKHJlbmRlcmVkID0gY29tcG9uZW50Ll9yZW5kZXJlZENvbXBvbmVudCkg
e1xuICAgIGNvbXBvbmVudCA9IHJlbmRlcmVkO1xuICB9XG4gIHJldHVybiBjb21wb25lbnQ7XG59
XG5cbi8qKlxuICogUG9wdWxhdGUgYF9ob3N0Tm9kZWAgb24gdGhlIHJlbmRlcmVkIGhvc3QvdGV4
dCBjb21wb25lbnQgd2l0aCB0aGUgZ2l2ZW5cbiAqIERPTSBub2RlLiBUaGUgcGFzc2VkIGBpbnN0
YCBjYW4gYmUgYSBjb21wb3NpdGUuXG4gKi9cbmZ1bmN0aW9uIHByZWNhY2hlTm9kZShpbnN0LCBu
b2RlKSB7XG4gIHZhciBob3N0SW5zdCA9IGdldFJlbmRlcmVkSG9zdE9yVGV4dEZyb21Db21wb25l
bnQoaW5zdCk7XG4gIGhvc3RJbnN0Ll9ob3N0Tm9kZSA9IG5vZGU7XG4gIG5vZGVbaW50ZXJuYWxJ
bnN0YW5jZUtleV0gPSBob3N0SW5zdDtcbn1cblxuZnVuY3Rpb24gdW5jYWNoZU5vZGUoaW5zdCkg
e1xuICB2YXIgbm9kZSA9IGluc3QuX2hvc3ROb2RlO1xuICBpZiAobm9kZSkge1xuICAgIGRlbGV0
ZSBub2RlW2ludGVybmFsSW5zdGFuY2VLZXldO1xuICAgIGluc3QuX2hvc3ROb2RlID0gbnVsbDtc
biAgfVxufVxuXG4vKipcbiAqIFBvcHVsYXRlIGBfaG9zdE5vZGVgIG9uIGVhY2ggY2hpbGQgb2Yg
YGluc3RgLCBhc3N1bWluZyB0aGF0IHRoZSBjaGlsZHJlblxuICogbWF0Y2ggdXAgd2l0aCB0aGUg
RE9NIChlbGVtZW50KSBjaGlsZHJlbiBvZiBgbm9kZWAuXG4gKlxuICogV2UgY2FjaGUgZW50aXJl
IGxldmVscyBhdCBvbmNlIHRvIGF2b2lkIGFuIG5eMiBwcm9ibGVtIHdoZXJlIHdlIGFjY2VzcyB0
aGVcbiAqIGNoaWxkcmVuIG9mIGEgbm9kZSBzZXF1ZW50aWFsbHkgYW5kIGhhdmUgdG8gd2FsayBm
cm9tIHRoZSBzdGFydCB0byBvdXIgdGFyZ2V0XG4gKiBub2RlIGV2ZXJ5IHRpbWUuXG4gKlxuICog
U2luY2Ugd2UgdXBkYXRlIGBfcmVuZGVyZWRDaGlsZHJlbmAgYW5kIHRoZSBhY3R1YWwgRE9NIGF0
IChzbGlnaHRseSlcbiAqIGRpZmZlcmVudCB0aW1lcywgd2UgY291bGQgcmFjZSBoZXJlIGFuZCBz
ZWUgYSBuZXdlciBgX3JlbmRlcmVkQ2hpbGRyZW5gIHRoYW5cbiAqIHRoZSBET00gbm9kZXMgd2Ug
c2VlLiBUbyBhdm9pZCB0aGlzLCBSZWFjdE11bHRpQ2hpbGQgY2FsbHNcbiAqIGBwcmVwYXJlVG9N
YW5hZ2VDaGlsZHJlbmAgYmVmb3JlIHdlIGNoYW5nZSBgX3JlbmRlcmVkQ2hpbGRyZW5gLCBhdCB3
aGljaFxuICogdGltZSB0aGUgY29udGFpbmVyJ3MgY2hpbGQgbm9kZXMgYXJlIGFsd2F5cyBjYWNo
ZWQgKHVudGlsIGl0IHVubW91bnRzKS5cbiAqL1xuZnVuY3Rpb24gcHJlY2FjaGVDaGlsZE5vZGVz
KGluc3QsIG5vZGUpIHtcbiAgaWYgKGluc3QuX2ZsYWdzICYgRmxhZ3MuaGFzQ2FjaGVkQ2hpbGRO
b2Rlcykge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgY2hpbGRyZW4gPSBpbnN0Ll9yZW5kZXJl
ZENoaWxkcmVuO1xuICB2YXIgY2hpbGROb2RlID0gbm9kZS5maXJzdENoaWxkO1xuICBvdXRlcjog
Zm9yICh2YXIgbmFtZSBpbiBjaGlsZHJlbikge1xuICAgIGlmICghY2hpbGRyZW4uaGFzT3duUHJv
cGVydHkobmFtZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB2YXIgY2hpbGRJbnN0
ID0gY2hpbGRyZW5bbmFtZV07XG4gICAgdmFyIGNoaWxkSUQgPSBnZXRSZW5kZXJlZEhvc3RPclRl
eHRGcm9tQ29tcG9uZW50KGNoaWxkSW5zdCkuX2RvbUlEO1xuICAgIGlmIChjaGlsZElEID09PSAw
KSB7XG4gICAgICAvLyBXZSdyZSBjdXJyZW50bHkgdW5tb3VudGluZyB0aGlzIGNoaWxkIGluIFJl
YWN0TXVsdGlDaGlsZDsgc2tpcCBpdC5cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICAvLyBX
ZSBhc3N1bWUgdGhlIGNoaWxkIG5vZGVzIGFyZSBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgY2hp
bGQgaW5zdGFuY2VzLlxuICAgIGZvciAoOyBjaGlsZE5vZGUgIT09IG51bGw7IGNoaWxkTm9kZSA9
IGNoaWxkTm9kZS5uZXh0U2libGluZykge1xuICAgICAgaWYgKHNob3VsZFByZWNhY2hlTm9kZShj
aGlsZE5vZGUsIGNoaWxkSUQpKSB7XG4gICAgICAgIHByZWNhY2hlTm9kZShjaGlsZEluc3QsIGNo
aWxkTm9kZSk7XG4gICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgfVxuICAgIH1cbiAgICAv
LyBXZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIERPTSBjaGlsZHJlbiB3aXRob3V0IGZpbmRpbmcg
YW4gSUQgbWF0Y2guXG4gICAgIHRydWUgPyAgZmFsc2UgPyBpbnZhcmlhbnQoZmFsc2UsICdVbmFi
bGUgdG8gZmluZCBlbGVtZW50IHdpdGggSUQgJXMuJywgY2hpbGRJRCkgOiBfcHJvZEludmFyaWFu
dCgnMzInLCBjaGlsZElEKSA6IHZvaWQgMDtcbiAgfVxuICBpbnN0Ll9mbGFncyB8PSBGbGFncy5o
YXNDYWNoZWRDaGlsZE5vZGVzO1xufVxuXG4vKipcbiAqIEdpdmVuIGEgRE9NIG5vZGUsIHJldHVy
biB0aGUgY2xvc2VzdCBSZWFjdERPTUNvbXBvbmVudCBvclxuICogUmVhY3RET01UZXh0Q29tcG9u
ZW50IGluc3RhbmNlIGFuY2VzdG9yLlxuICovXG5mdW5jdGlvbiBnZXRDbG9zZXN0SW5zdGFuY2VG
cm9tTm9kZShub2RlKSB7XG4gIGlmIChub2RlW2ludGVybmFsSW5zdGFuY2VLZXldKSB7XG4gICAg
cmV0dXJuIG5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV07XG4gIH1cblxuICAvLyBXYWxrIHVwIHRo
ZSB0cmVlIHVudGlsIHdlIGZpbmQgYW4gYW5jZXN0b3Igd2hvc2UgaW5zdGFuY2Ugd2UgaGF2ZSBj
YWNoZWQuXG4gIHZhciBwYXJlbnRzID0gW107XG4gIHdoaWxlICghbm9kZVtpbnRlcm5hbEluc3Rh
bmNlS2V5XSkge1xuICAgIHBhcmVudHMucHVzaChub2RlKTtcbiAgICBpZiAobm9kZS5wYXJlbnRO
b2RlKSB7XG4gICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgIH0gZWxzZSB7XG4gICAg
ICAvLyBUb3Agb2YgdGhlIHRyZWUuIFRoaXMgbm9kZSBtdXN0IG5vdCBiZSBwYXJ0IG9mIGEgUmVh
Y3QgdHJlZSAob3IgaXNcbiAgICAgIC8vIHVubW91bnRlZCwgcG90ZW50aWFsbHkpLlxuICAgICAg
cmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNsb3Nlc3Q7XG4gIHZhciBpbnN0O1xu
ICBmb3IgKDsgbm9kZSAmJiAoaW5zdCA9IG5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV0pOyBub2Rl
ID0gcGFyZW50cy5wb3AoKSkge1xuICAgIGNsb3Nlc3QgPSBpbnN0O1xuICAgIGlmIChwYXJlbnRz
Lmxlbmd0aCkge1xuICAgICAgcHJlY2FjaGVDaGlsZE5vZGVzKGluc3QsIG5vZGUpO1xuICAgIH1c
biAgfVxuXG4gIHJldHVybiBjbG9zZXN0O1xufVxuXG4vKipcbiAqIEdpdmVuIGEgRE9NIG5vZGUs
IHJldHVybiB0aGUgUmVhY3RET01Db21wb25lbnQgb3IgUmVhY3RET01UZXh0Q29tcG9uZW50XG4g
KiBpbnN0YW5jZSwgb3IgbnVsbCBpZiB0aGUgbm9kZSB3YXMgbm90IHJlbmRlcmVkIGJ5IHRoaXMg
UmVhY3QuXG4gKi9cbmZ1bmN0aW9uIGdldEluc3RhbmNlRnJvbU5vZGUobm9kZSkge1xuICB2YXIg
aW5zdCA9IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKG5vZGUpO1xuICBpZiAoaW5zdCAhPSBu
dWxsICYmIGluc3QuX2hvc3ROb2RlID09PSBub2RlKSB7XG4gICAgcmV0dXJuIGluc3Q7XG4gIH0g
ZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBHaXZlbiBhIFJlYWN0
RE9NQ29tcG9uZW50IG9yIFJlYWN0RE9NVGV4dENvbXBvbmVudCwgcmV0dXJuIHRoZSBjb3JyZXNw
b25kaW5nXG4gKiBET00gbm9kZS5cbiAqL1xuZnVuY3Rpb24gZ2V0Tm9kZUZyb21JbnN0YW5jZShp
bnN0KSB7XG4gIC8vIFdpdGhvdXQgdGhpcyBmaXJzdCBpbnZhcmlhbnQsIHBhc3NpbmcgYSBub24t
RE9NLWNvbXBvbmVudCB0cmlnZ2VycyB0aGUgbmV4dFxuICAvLyBpbnZhcmlhbnQgZm9yIGEgbWlz
c2luZyBwYXJlbnQsIHdoaWNoIGlzIHN1cGVyIGNvbmZ1c2luZy5cbiAgIShpbnN0Ll9ob3N0Tm9k
ZSAhPT0gdW5kZWZpbmVkKSA/ICBmYWxzZSA/IGludmFyaWFudChmYWxzZSwgJ2dldE5vZGVGcm9t
SW5zdGFuY2U6IEludmFsaWQgYXJndW1lbnQuJykgOiBfcHJvZEludmFyaWFudCgnMzMnKSA6IHZv
aWQgMDtcblxuICBpZiAoaW5zdC5faG9zdE5vZGUpIHtcbiAgICByZXR1cm4gaW5zdC5faG9zdE5v
ZGU7XG4gIH1cblxuICAvLyBXYWxrIHVwIHRoZSB0cmVlIHVudGlsIHdlIGZpbmQgYW4gYW5jZXN0
b3Igd2hvc2UgRE9NIG5vZGUgd2UgaGF2ZSBjYWNoZWQuXG4gIHZhciBwYXJlbnRzID0gW107XG4g
IHdoaWxlICghaW5zdC5faG9zdE5vZGUpIHtcbiAgICBwYXJlbnRzLnB1c2goaW5zdCk7XG4gICAg
IWluc3QuX2hvc3RQYXJlbnQgPyAgZmFsc2UgPyBpbnZhcmlhbnQoZmFsc2UsICdSZWFjdCBET00g
dHJlZSByb290IHNob3VsZCBhbHdheXMgaGF2ZSBhIG5vZGUgcmVmZXJlbmNlLicpIDogX3Byb2RJ
bnZhcmlhbnQoJzM0JykgOiB2b2lkIDA7XG4gICAgaW5zdCA9IGluc3QuX2hvc3RQYXJlbnQ7XG4g
IH1cblxuICAvLyBOb3cgcGFyZW50cyBjb250YWlucyBlYWNoIGFuY2VzdG9yIHRoYXQgZG9lcyAq
bm90KiBoYXZlIGEgY2FjaGVkIG5hdGl2ZVxuICAvLyBub2RlLCBhbmQgYGluc3RgIGlzIHRoZSBk
ZWVwZXN0IGFuY2VzdG9yIHRoYXQgZG9lcy5cbiAgZm9yICg7IHBhcmVudHMubGVuZ3RoOyBpbnN0
ID0gcGFyZW50cy5wb3AoKSkge1xuICAgIHByZWNhY2hlQ2hpbGROb2RlcyhpbnN0LCBpbnN0Ll9o
b3N0Tm9kZSk7XG4gIH1cblxuICByZXR1cm4gaW5zdC5faG9zdE5vZGU7XG59XG5cbnZhciBSZWFj
dERPTUNvbXBvbmVudFRyZWUgPSB7XG4gIGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlOiBnZXRD
bG9zZXN0SW5zdGFuY2VGcm9tTm9kZSxcbiAgZ2V0SW5zdGFuY2VGcm9tTm9kZTogZ2V0SW5zdGFu
Y2VGcm9tTm9kZSxcbiAgZ2V0Tm9kZUZyb21JbnN0YW5jZTogZ2V0Tm9kZUZyb21JbnN0YW5jZSxc
biAgcHJlY2FjaGVDaGlsZE5vZGVzOiBwcmVjYWNoZUNoaWxkTm9kZXMsXG4gIHByZWNhY2hlTm9k
ZTogcHJlY2FjaGVOb2RlLFxuICB1bmNhY2hlTm9kZTogdW5jYWNoZU5vZGVcbn07XG5cbm1vZHVs
ZS5leHBvcnRzID0gUmVhY3RET01Db21wb25lbnRUcmVlO1xuXG4vKioqLyB9KSxcbi8qIDUgKi9c
bi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtc
blxuXCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBG
YWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJj
ZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0
aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2Ug
dHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91
bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5c
blxuXG52YXIgY2FuVXNlRE9NID0gISEodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYg
d2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxuLyoq
XG4gKiBTaW1wbGUsIGxpZ2h0d2VpZ2h0IG1vZHVsZSBhc3Npc3Rpbmcgd2l0aCB0aGUgZGV0ZWN0
aW9uIGFuZCBjb250ZXh0IG9mXG4gKiBXb3JrZXIuIEhlbHBzIGF2b2lkIGNpcmN1bGFyIGRlcGVu
ZGVuY2llcyBhbmQgYWxsb3dzIGNvZGUgdG8gcmVhc29uIGFib3V0XG4gKiB3aGV0aGVyIG9yIG5v
dCB0aGV5IGFyZSBpbiBhIFdvcmtlciwgZXZlbiBpZiB0aGV5IG5ldmVyIGluY2x1ZGUgdGhlIG1h
aW5cbiAqIGBSZWFjdFdvcmtlcmAgZGVwZW5kZW5jeS5cbiAqL1xudmFyIEV4ZWN1dGlvbkVudmly
b25tZW50ID0ge1xuXG4gIGNhblVzZURPTTogY2FuVXNlRE9NLFxuXG4gIGNhblVzZVdvcmtlcnM6
IHR5cGVvZiBXb3JrZXIgIT09ICd1bmRlZmluZWQnLFxuXG4gIGNhblVzZUV2ZW50TGlzdGVuZXJz
OiBjYW5Vc2VET00gJiYgISEod2luZG93LmFkZEV2ZW50TGlzdGVuZXIgfHwgd2luZG93LmF0dGFj
aEV2ZW50KSxcblxuICBjYW5Vc2VWaWV3cG9ydDogY2FuVXNlRE9NICYmICEhd2luZG93LnNjcmVl
bixcblxuICBpc0luV29ya2VyOiAhY2FuVXNlRE9NIC8vIEZvciBub3csIHRoaXMgaXMgdHJ1ZSAt
IG1pZ2h0IGNoYW5nZSBpbiB0aGUgZnV0dXJlLlxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEV4
ZWN1dGlvbkVudmlyb25tZW50O1xuXG4vKioqLyB9KSxcbi8qIDYgKi9cbi8qKiovIChmdW5jdGlv
bihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0
XCI7XG5cblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIElu
Yy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBs
aWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNF
TlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFk
ZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQ
QVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIFxuICovXG5cbmZ1bmN0
aW9uIG1ha2VFbXB0eUZ1bmN0aW9uKGFyZykge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAg
IHJldHVybiBhcmc7XG4gIH07XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBhY2NlcHRzIGFu
ZCBkaXNjYXJkcyBpbnB1dHM7IGl0IGhhcyBubyBzaWRlIGVmZmVjdHMuIFRoaXMgaXNcbiAqIHBy
aW1hcmlseSB1c2VmdWwgaWRpb21hdGljYWxseSBmb3Igb3ZlcnJpZGFibGUgZnVuY3Rpb24gZW5k
cG9pbnRzIHdoaWNoXG4gKiBhbHdheXMgbmVlZCB0byBiZSBjYWxsYWJsZSwgc2luY2UgSlMgbGFj
a3MgYSBudWxsLWNhbGwgaWRpb20gYWxhIENvY29hLlxuICovXG52YXIgZW1wdHlGdW5jdGlvbiA9
IGZ1bmN0aW9uIGVtcHR5RnVuY3Rpb24oKSB7fTtcblxuZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJu
cyA9IG1ha2VFbXB0eUZ1bmN0aW9uO1xuZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc0ZhbHNlID0g
bWFrZUVtcHR5RnVuY3Rpb24oZmFsc2UpO1xuZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc1RydWUg
PSBtYWtlRW1wdHlGdW5jdGlvbih0cnVlKTtcbmVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNOdWxs
ID0gbWFrZUVtcHR5RnVuY3Rpb24obnVsbCk7XG5lbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zVGhp
cyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXM7XG59O1xuZW1wdHlGdW5jdGlvbi50aGF0
UmV0dXJuc0FyZ3VtZW50ID0gZnVuY3Rpb24gKGFyZykge1xuICByZXR1cm4gYXJnO1xufTtcblxu
bW9kdWxlLmV4cG9ydHMgPSBlbXB0eUZ1bmN0aW9uO1xuXG4vKioqLyB9KSxcbi8qIDcgKi9cbi8q
KiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxu
XCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIENvcHlyaWdodCAyMDE2LXByZXNlbnQsIEZhY2Vib29r
LCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUg
aXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICog
TElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBB
biBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0
aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG5c
blxuLy8gVHJ1c3QgdGhlIGRldmVsb3BlciB0byBvbmx5IHVzZSBSZWFjdEluc3RydW1lbnRhdGlv
biB3aXRoIGEgX19ERVZfXyBjaGVja1xuXG52YXIgZGVidWdUb29sID0gbnVsbDtcblxuaWYgKGZh
bHNlKSB7XG4gIHZhciBSZWFjdERlYnVnVG9vbCA9IHJlcXVpcmUoJy4vUmVhY3REZWJ1Z1Rvb2wn
KTtcbiAgZGVidWdUb29sID0gUmVhY3REZWJ1Z1Rvb2w7XG59XG5cbm1vZHVsZS5leHBvcnRzID0g
eyBkZWJ1Z1Rvb2w6IGRlYnVnVG9vbCB9O1xuXG4vKioqLyB9KSxcbi8qIDggKi9cbi8qKiovIChm
dW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ug
c3RyaWN0XCI7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMu
XG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGlj
ZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5T
RSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRp
dGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFU
RU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuXG5cbnZhciBfcHJv
ZEludmFyaWFudCA9IF9fd2VicGFja19yZXF1aXJlX18oMiksXG4gICAgX2Fzc2lnbiA9IF9fd2Vi
cGFja19yZXF1aXJlX18oMyk7XG5cbnZhciBDYWxsYmFja1F1ZXVlID0gX193ZWJwYWNrX3JlcXVp
cmVfXyg2Mik7XG52YXIgUG9vbGVkQ2xhc3MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTtcbnZh
ciBSZWFjdEZlYXR1cmVGbGFncyA9IF9fd2VicGFja19yZXF1aXJlX18oNjMpO1xudmFyIFJlYWN0
UmVjb25jaWxlciA9IF9fd2VicGFja19yZXF1aXJlX18oMTYpO1xudmFyIFRyYW5zYWN0aW9uID0g
X193ZWJwYWNrX3JlcXVpcmVfXygyNCk7XG5cbnZhciBpbnZhcmlhbnQgPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKDApO1xuXG52YXIgZGlydHlDb21wb25lbnRzID0gW107XG52YXIgdXBkYXRlQmF0Y2hO
dW1iZXIgPSAwO1xudmFyIGFzYXBDYWxsYmFja1F1ZXVlID0gQ2FsbGJhY2tRdWV1ZS5nZXRQb29s
ZWQoKTtcbnZhciBhc2FwRW5xdWV1ZWQgPSBmYWxzZTtcblxudmFyIGJhdGNoaW5nU3RyYXRlZ3kg
PSBudWxsO1xuXG5mdW5jdGlvbiBlbnN1cmVJbmplY3RlZCgpIHtcbiAgIShSZWFjdFVwZGF0ZXMu
UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbiAmJiBiYXRjaGluZ1N0cmF0ZWd5KSA/ICBmYWxzZSA/
IGludmFyaWFudChmYWxzZSwgJ1JlYWN0VXBkYXRlczogbXVzdCBpbmplY3QgYSByZWNvbmNpbGUg
dHJhbnNhY3Rpb24gY2xhc3MgYW5kIGJhdGNoaW5nIHN0cmF0ZWd5JykgOiBfcHJvZEludmFyaWFu
dCgnMTIzJykgOiB2b2lkIDA7XG59XG5cbnZhciBORVNURURfVVBEQVRFUyA9IHtcbiAgaW5pdGlh
bGl6ZTogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZGlydHlDb21wb25lbnRzTGVuZ3RoID0gZGly
dHlDb21wb25lbnRzLmxlbmd0aDtcbiAgfSxcbiAgY2xvc2U6IGZ1bmN0aW9uICgpIHtcbiAgICBp
ZiAodGhpcy5kaXJ0eUNvbXBvbmVudHNMZW5ndGggIT09IGRpcnR5Q29tcG9uZW50cy5sZW5ndGgp
IHtcbiAgICAgIC8vIEFkZGl0aW9uYWwgdXBkYXRlcyB3ZXJlIGVucXVldWVkIGJ5IGNvbXBvbmVu
dERpZFVwZGF0ZSBoYW5kbGVycyBvclxuICAgICAgLy8gc2ltaWxhcjsgYmVmb3JlIG91ciBvd24g
VVBEQVRFX1FVRVVFSU5HIHdyYXBwZXIgY2xvc2VzLCB3ZSB3YW50IHRvIHJ1blxuICAgICAgLy8g
dGhlc2UgbmV3IHVwZGF0ZXMgc28gdGhhdCBpZiBBJ3MgY29tcG9uZW50RGlkVXBkYXRlIGNhbGxz
IHNldFN0YXRlIG9uXG4gICAgICAvLyBCLCBCIHdpbGwgdXBkYXRlIGJlZm9yZSB0aGUgY2FsbGJh
Y2sgQSdzIHVwZGF0ZXIgcHJvdmlkZWQgd2hlbiBjYWxsaW5nXG4gICAgICAvLyBzZXRTdGF0ZS5c
biAgICAgIGRpcnR5Q29tcG9uZW50cy5zcGxpY2UoMCwgdGhpcy5kaXJ0eUNvbXBvbmVudHNMZW5n
dGgpO1xuICAgICAgZmx1c2hCYXRjaGVkVXBkYXRlcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBk
aXJ0eUNvbXBvbmVudHMubGVuZ3RoID0gMDtcbiAgICB9XG4gIH1cbn07XG5cbnZhciBVUERBVEVf
UVVFVUVJTkcgPSB7XG4gIGluaXRpYWxpemU6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmNhbGxi
YWNrUXVldWUucmVzZXQoKTtcbiAgfSxcbiAgY2xvc2U6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlz
LmNhbGxiYWNrUXVldWUubm90aWZ5QWxsKCk7XG4gIH1cbn07XG5cbnZhciBUUkFOU0FDVElPTl9X
UkFQUEVSUyA9IFtORVNURURfVVBEQVRFUywgVVBEQVRFX1FVRVVFSU5HXTtcblxuZnVuY3Rpb24g
UmVhY3RVcGRhdGVzRmx1c2hUcmFuc2FjdGlvbigpIHtcbiAgdGhpcy5yZWluaXRpYWxpemVUcmFu
c2FjdGlvbigpO1xuICB0aGlzLmRpcnR5Q29tcG9uZW50c0xlbmd0aCA9IG51bGw7XG4gIHRoaXMu
Y2FsbGJhY2tRdWV1ZSA9IENhbGxiYWNrUXVldWUuZ2V0UG9vbGVkKCk7XG4gIHRoaXMucmVjb25j
aWxlVHJhbnNhY3Rpb24gPSBSZWFjdFVwZGF0ZXMuUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbi5n
ZXRQb29sZWQoXG4gIC8qIHVzZUNyZWF0ZUVsZW1lbnQgKi90cnVlKTtcbn1cblxuX2Fzc2lnbihS
ZWFjdFVwZGF0ZXNGbHVzaFRyYW5zYWN0aW9uLnByb3RvdHlwZSwgVHJhbnNhY3Rpb24sIHtcbiAg
Z2V0VHJhbnNhY3Rpb25XcmFwcGVyczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBUUkFOU0FD
VElPTl9XUkFQUEVSUztcbiAgfSxcblxuICBkZXN0cnVjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAg
dGhpcy5kaXJ0eUNvbXBvbmVudHNMZW5ndGggPSBudWxsO1xuICAgIENhbGxiYWNrUXVldWUucmVs
ZWFzZSh0aGlzLmNhbGxiYWNrUXVldWUpO1xuICAgIHRoaXMuY2FsbGJhY2tRdWV1ZSA9IG51bGw7
XG4gICAgUmVhY3RVcGRhdGVzLlJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24ucmVsZWFzZSh0aGlz
LnJlY29uY2lsZVRyYW5zYWN0aW9uKTtcbiAgICB0aGlzLnJlY29uY2lsZVRyYW5zYWN0aW9uID0g
bnVsbDtcbiAgfSxcblxuICBwZXJmb3JtOiBmdW5jdGlvbiAobWV0aG9kLCBzY29wZSwgYSkge1xu
ICAgIC8vIEVzc2VudGlhbGx5IGNhbGxzIGB0aGlzLnJlY29uY2lsZVRyYW5zYWN0aW9uLnBlcmZv
cm0obWV0aG9kLCBzY29wZSwgYSlgXG4gICAgLy8gd2l0aCB0aGlzIHRyYW5zYWN0aW9uJ3Mgd3Jh
cHBlcnMgYXJvdW5kIGl0LlxuICAgIHJldHVybiBUcmFuc2FjdGlvbi5wZXJmb3JtLmNhbGwodGhp
cywgdGhpcy5yZWNvbmNpbGVUcmFuc2FjdGlvbi5wZXJmb3JtLCB0aGlzLnJlY29uY2lsZVRyYW5z
YWN0aW9uLCBtZXRob2QsIHNjb3BlLCBhKTtcbiAgfVxufSk7XG5cblBvb2xlZENsYXNzLmFkZFBv
b2xpbmdUbyhSZWFjdFVwZGF0ZXNGbHVzaFRyYW5zYWN0aW9uKTtcblxuZnVuY3Rpb24gYmF0Y2hl
ZFVwZGF0ZXMoY2FsbGJhY2ssIGEsIGIsIGMsIGQsIGUpIHtcbiAgZW5zdXJlSW5qZWN0ZWQoKTtc
biAgcmV0dXJuIGJhdGNoaW5nU3RyYXRlZ3kuYmF0Y2hlZFVwZGF0ZXMoY2FsbGJhY2ssIGEsIGIs
IGMsIGQsIGUpO1xufVxuXG4vKipcbiAqIEFycmF5IGNvbXBhcmF0b3IgZm9yIFJlYWN0Q29tcG9u
ZW50cyBieSBtb3VudCBvcmRlcmluZy5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBj
MSBmaXJzdCBjb21wb25lbnQgeW91J3JlIGNvbXBhcmluZ1xuICogQHBhcmFtIHtSZWFjdENvbXBv
bmVudH0gYzIgc2Vjb25kIGNvbXBvbmVudCB5b3UncmUgY29tcGFyaW5nXG4gKiBAcmV0dXJuIHtu
dW1iZXJ9IFJldHVybiB2YWx1ZSB1c2FibGUgYnkgQXJyYXkucHJvdG90eXBlLnNvcnQoKS5cbiAq
L1xuZnVuY3Rpb24gbW91bnRPcmRlckNvbXBhcmF0b3IoYzEsIGMyKSB7XG4gIHJldHVybiBjMS5f
bW91bnRPcmRlciAtIGMyLl9tb3VudE9yZGVyO1xufVxuXG5mdW5jdGlvbiBydW5CYXRjaGVkVXBk
YXRlcyh0cmFuc2FjdGlvbikge1xuICB2YXIgbGVuID0gdHJhbnNhY3Rpb24uZGlydHlDb21wb25l
bnRzTGVuZ3RoO1xuICAhKGxlbiA9PT0gZGlydHlDb21wb25lbnRzLmxlbmd0aCkgPyAgZmFsc2Ug
PyBpbnZhcmlhbnQoZmFsc2UsICdFeHBlY3RlZCBmbHVzaCB0cmFuc2FjdGlvblxcJ3Mgc3RvcmVk
IGRpcnR5LWNvbXBvbmVudHMgbGVuZ3RoICglcykgdG8gbWF0Y2ggZGlydHktY29tcG9uZW50cyBh
cnJheSBsZW5ndGggKCVzKS4nLCBsZW4sIGRpcnR5Q29tcG9uZW50cy5sZW5ndGgpIDogX3Byb2RJ
bnZhcmlhbnQoJzEyNCcsIGxlbiwgZGlydHlDb21wb25lbnRzLmxlbmd0aCkgOiB2b2lkIDA7XG5c
biAgLy8gU2luY2UgcmVjb25jaWxpbmcgYSBjb21wb25lbnQgaGlnaGVyIGluIHRoZSBvd25lciBo
aWVyYXJjaHkgdXN1YWxseSAobm90XG4gIC8vIGFsd2F5cyAtLSBzZWUgc2hvdWxkQ29tcG9uZW50
VXBkYXRlKCkpIHdpbGwgcmVjb25jaWxlIGNoaWxkcmVuLCByZWNvbmNpbGVcbiAgLy8gdGhlbSBi
ZWZvcmUgdGhlaXIgY2hpbGRyZW4gYnkgc29ydGluZyB0aGUgYXJyYXkuXG4gIGRpcnR5Q29tcG9u
ZW50cy5zb3J0KG1vdW50T3JkZXJDb21wYXJhdG9yKTtcblxuICAvLyBBbnkgdXBkYXRlcyBlbnF1
ZXVlZCB3aGlsZSByZWNvbmNpbGluZyBtdXN0IGJlIHBlcmZvcm1lZCBhZnRlciB0aGlzIGVudGly
ZVxuICAvLyBiYXRjaC4gT3RoZXJ3aXNlLCBpZiBkaXJ0eUNvbXBvbmVudHMgaXMgW0EsIEJdIHdo
ZXJlIEEgaGFzIGNoaWxkcmVuIEIgYW5kXG4gIC8vIEMsIEIgY291bGQgdXBkYXRlIHR3aWNlIGlu
IGEgc2luZ2xlIGJhdGNoIGlmIEMncyByZW5kZXIgZW5xdWV1ZXMgYW4gdXBkYXRlXG4gIC8vIHRv
IEIgKHNpbmNlIEIgd291bGQgaGF2ZSBhbHJlYWR5IHVwZGF0ZWQsIHdlIHNob3VsZCBza2lwIGl0
LCBhbmQgdGhlIG9ubHlcbiAgLy8gd2F5IHdlIGNhbiBrbm93IHRvIGRvIHNvIGlzIGJ5IGNoZWNr
aW5nIHRoZSBiYXRjaCBjb3VudGVyKS5cbiAgdXBkYXRlQmF0Y2hOdW1iZXIrKztcblxuICBmb3Ig
KHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgLy8gSWYgYSBjb21wb25lbnQgaXMgdW5t
b3VudGVkIGJlZm9yZSBwZW5kaW5nIGNoYW5nZXMgYXBwbHksIGl0IHdpbGwgc3RpbGxcbiAgICAv
LyBiZSBoZXJlLCBidXQgd2UgYXNzdW1lIHRoYXQgaXQgaGFzIGNsZWFyZWQgaXRzIF9wZW5kaW5n
Q2FsbGJhY2tzIGFuZFxuICAgIC8vIHRoYXQgcGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5IGlzIGEg
bm9vcC5cbiAgICB2YXIgY29tcG9uZW50ID0gZGlydHlDb21wb25lbnRzW2ldO1xuXG4gICAgLy8g
SWYgcGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5IGhhcHBlbnMgdG8gZW5xdWV1ZSBhbnkgbmV3IHVw
ZGF0ZXMsIHdlXG4gICAgLy8gc2hvdWxkbid0IGV4ZWN1dGUgdGhlIGNhbGxiYWNrcyB1bnRpbCB0
aGUgbmV4dCByZW5kZXIgaGFwcGVucywgc29cbiAgICAvLyBzdGFzaCB0aGUgY2FsbGJhY2tzIGZp
cnN0XG4gICAgdmFyIGNhbGxiYWNrcyA9IGNvbXBvbmVudC5fcGVuZGluZ0NhbGxiYWNrcztcbiAg
ICBjb21wb25lbnQuX3BlbmRpbmdDYWxsYmFja3MgPSBudWxsO1xuXG4gICAgdmFyIG1hcmtlck5h
bWU7XG4gICAgaWYgKFJlYWN0RmVhdHVyZUZsYWdzLmxvZ1RvcExldmVsUmVuZGVycykge1xuICAg
ICAgdmFyIG5hbWVkQ29tcG9uZW50ID0gY29tcG9uZW50O1xuICAgICAgLy8gRHVjayB0eXBlIFRv
cExldmVsV3JhcHBlci4gVGhpcyBpcyBwcm9iYWJseSBhbHdheXMgdHJ1ZS5cbiAgICAgIGlmIChj
b21wb25lbnQuX2N1cnJlbnRFbGVtZW50LnR5cGUuaXNSZWFjdFRvcExldmVsV3JhcHBlcikge1xu
ICAgICAgICBuYW1lZENvbXBvbmVudCA9IGNvbXBvbmVudC5fcmVuZGVyZWRDb21wb25lbnQ7XG4g
ICAgICB9XG4gICAgICBtYXJrZXJOYW1lID0gJ1JlYWN0IHVwZGF0ZTogJyArIG5hbWVkQ29tcG9u
ZW50LmdldE5hbWUoKTtcbiAgICAgIGNvbnNvbGUudGltZShtYXJrZXJOYW1lKTtcbiAgICB9XG5c
biAgICBSZWFjdFJlY29uY2lsZXIucGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5KGNvbXBvbmVudCwg
dHJhbnNhY3Rpb24ucmVjb25jaWxlVHJhbnNhY3Rpb24sIHVwZGF0ZUJhdGNoTnVtYmVyKTtcblxu
ICAgIGlmIChtYXJrZXJOYW1lKSB7XG4gICAgICBjb25zb2xlLnRpbWVFbmQobWFya2VyTmFtZSk7
XG4gICAgfVxuXG4gICAgaWYgKGNhbGxiYWNrcykge1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGog
PCBjYWxsYmFja3MubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdHJhbnNhY3Rpb24uY2FsbGJhY2tR
dWV1ZS5lbnF1ZXVlKGNhbGxiYWNrc1tqXSwgY29tcG9uZW50LmdldFB1YmxpY0luc3RhbmNlKCkp
O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgZmx1c2hCYXRjaGVkVXBkYXRlcyA9IGZ1
bmN0aW9uICgpIHtcbiAgLy8gUmVhY3RVcGRhdGVzRmx1c2hUcmFuc2FjdGlvbidzIHdyYXBwZXJz
IHdpbGwgY2xlYXIgdGhlIGRpcnR5Q29tcG9uZW50c1xuICAvLyBhcnJheSBhbmQgcGVyZm9ybSBh
bnkgdXBkYXRlcyBlbnF1ZXVlZCBieSBtb3VudC1yZWFkeSBoYW5kbGVycyAoaS5lLixcbiAgLy8g
Y29tcG9uZW50RGlkVXBkYXRlKSBidXQgd2UgbmVlZCB0byBjaGVjayBoZXJlIHRvbyBpbiBvcmRl
ciB0byBjYXRjaFxuICAvLyB1cGRhdGVzIGVucXVldWVkIGJ5IHNldFN0YXRlIGNhbGxiYWNrcyBh
bmQgYXNhcCBjYWxscy5cbiAgd2hpbGUgKGRpcnR5Q29tcG9uZW50cy5sZW5ndGggfHwgYXNhcEVu
cXVldWVkKSB7XG4gICAgaWYgKGRpcnR5Q29tcG9uZW50cy5sZW5ndGgpIHtcbiAgICAgIHZhciB0
cmFuc2FjdGlvbiA9IFJlYWN0VXBkYXRlc0ZsdXNoVHJhbnNhY3Rpb24uZ2V0UG9vbGVkKCk7XG4g
ICAgICB0cmFuc2FjdGlvbi5wZXJmb3JtKHJ1bkJhdGNoZWRVcGRhdGVzLCBudWxsLCB0cmFuc2Fj
dGlvbik7XG4gICAgICBSZWFjdFVwZGF0ZXNGbHVzaFRyYW5zYWN0aW9uLnJlbGVhc2UodHJhbnNh
Y3Rpb24pO1xuICAgIH1cblxuICAgIGlmIChhc2FwRW5xdWV1ZWQpIHtcbiAgICAgIGFzYXBFbnF1
ZXVlZCA9IGZhbHNlO1xuICAgICAgdmFyIHF1ZXVlID0gYXNhcENhbGxiYWNrUXVldWU7XG4gICAg
ICBhc2FwQ2FsbGJhY2tRdWV1ZSA9IENhbGxiYWNrUXVldWUuZ2V0UG9vbGVkKCk7XG4gICAgICBx
dWV1ZS5ub3RpZnlBbGwoKTtcbiAgICAgIENhbGxiYWNrUXVldWUucmVsZWFzZShxdWV1ZSk7XG4g
ICAgfVxuICB9XG59O1xuXG4vKipcbiAqIE1hcmsgYSBjb21wb25lbnQgYXMgbmVlZGluZyBhIHJl
cmVuZGVyLCBhZGRpbmcgYW4gb3B0aW9uYWwgY2FsbGJhY2sgdG8gYVxuICogbGlzdCBvZiBmdW5j
dGlvbnMgd2hpY2ggd2lsbCBiZSBleGVjdXRlZCBvbmNlIHRoZSByZXJlbmRlciBvY2N1cnMuXG4g
Ki9cbmZ1bmN0aW9uIGVucXVldWVVcGRhdGUoY29tcG9uZW50KSB7XG4gIGVuc3VyZUluamVjdGVk
KCk7XG5cbiAgLy8gVmFyaW91cyBwYXJ0cyBvZiBvdXIgY29kZSAoc3VjaCBhcyBSZWFjdENvbXBv
c2l0ZUNvbXBvbmVudCdzXG4gIC8vIF9yZW5kZXJWYWxpZGF0ZWRDb21wb25lbnQpIGFzc3VtZSB0
aGF0IGNhbGxzIHRvIHJlbmRlciBhcmVuJ3QgbmVzdGVkO1xuICAvLyB2ZXJpZnkgdGhhdCB0aGF0
J3MgdGhlIGNhc2UuIChUaGlzIGlzIGNhbGxlZCBieSBlYWNoIHRvcC1sZXZlbCB1cGRhdGVcbiAg
Ly8gZnVuY3Rpb24sIGxpa2Ugc2V0U3RhdGUsIGZvcmNlVXBkYXRlLCBldGMuOyBjcmVhdGlvbiBh
bmRcbiAgLy8gZGVzdHJ1Y3Rpb24gb2YgdG9wLWxldmVsIGNvbXBvbmVudHMgaXMgZ3VhcmRlZCBp
biBSZWFjdE1vdW50LilcblxuICBpZiAoIWJhdGNoaW5nU3RyYXRlZ3kuaXNCYXRjaGluZ1VwZGF0
ZXMpIHtcbiAgICBiYXRjaGluZ1N0cmF0ZWd5LmJhdGNoZWRVcGRhdGVzKGVucXVldWVVcGRhdGUs
IGNvbXBvbmVudCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZGlydHlDb21wb25lbnRzLnB1c2go
Y29tcG9uZW50KTtcbiAgaWYgKGNvbXBvbmVudC5fdXBkYXRlQmF0Y2hOdW1iZXIgPT0gbnVsbCkg
e1xuICAgIGNvbXBvbmVudC5fdXBkYXRlQmF0Y2hOdW1iZXIgPSB1cGRhdGVCYXRjaE51bWJlciAr
IDE7XG4gIH1cbn1cblxuLyoqXG4gKiBFbnF1ZXVlIGEgY2FsbGJhY2sgdG8gYmUgcnVuIGF0IHRo
ZSBlbmQgb2YgdGhlIGN1cnJlbnQgYmF0Y2hpbmcgY3ljbGUuIFRocm93c1xuICogaWYgbm8gdXBk
YXRlcyBhcmUgY3VycmVudGx5IGJlaW5nIHBlcmZvcm1lZC5cbiAqL1xuZnVuY3Rpb24gYXNhcChj
YWxsYmFjaywgY29udGV4dCkge1xuICAhYmF0Y2hpbmdTdHJhdGVneS5pc0JhdGNoaW5nVXBkYXRl
cyA/ICBmYWxzZSA/IGludmFyaWFudChmYWxzZSwgJ1JlYWN0VXBkYXRlcy5hc2FwOiBDYW5cXCd0
IGVucXVldWUgYW4gYXNhcCBjYWxsYmFjayBpbiBhIGNvbnRleHQgd2hlcmV1cGRhdGVzIGFyZSBu
b3QgYmVpbmcgYmF0Y2hlZC4nKSA6IF9wcm9kSW52YXJpYW50KCcxMjUnKSA6IHZvaWQgMDtcbiAg
YXNhcENhbGxiYWNrUXVldWUuZW5xdWV1ZShjYWxsYmFjaywgY29udGV4dCk7XG4gIGFzYXBFbnF1
ZXVlZCA9IHRydWU7XG59XG5cbnZhciBSZWFjdFVwZGF0ZXNJbmplY3Rpb24gPSB7XG4gIGluamVj
dFJlY29uY2lsZVRyYW5zYWN0aW9uOiBmdW5jdGlvbiAoUmVjb25jaWxlVHJhbnNhY3Rpb24pIHtc
biAgICAhUmVjb25jaWxlVHJhbnNhY3Rpb24gPyAgZmFsc2UgPyBpbnZhcmlhbnQoZmFsc2UsICdS
ZWFjdFVwZGF0ZXM6IG11c3QgcHJvdmlkZSBhIHJlY29uY2lsZSB0cmFuc2FjdGlvbiBjbGFzcycp
IDogX3Byb2RJbnZhcmlhbnQoJzEyNicpIDogdm9pZCAwO1xuICAgIFJlYWN0VXBkYXRlcy5SZWFj
dFJlY29uY2lsZVRyYW5zYWN0aW9uID0gUmVjb25jaWxlVHJhbnNhY3Rpb247XG4gIH0sXG5cbiAg
aW5qZWN0QmF0Y2hpbmdTdHJhdGVneTogZnVuY3Rpb24gKF9iYXRjaGluZ1N0cmF0ZWd5KSB7XG4g
ICAgIV9iYXRjaGluZ1N0cmF0ZWd5ID8gIGZhbHNlID8gaW52YXJpYW50KGZhbHNlLCAnUmVhY3RV
cGRhdGVzOiBtdXN0IHByb3ZpZGUgYSBiYXRjaGluZyBzdHJhdGVneScpIDogX3Byb2RJbnZhcmlh
bnQoJzEyNycpIDogdm9pZCAwO1xuICAgICEodHlwZW9mIF9iYXRjaGluZ1N0cmF0ZWd5LmJhdGNo
ZWRVcGRhdGVzID09PSAnZnVuY3Rpb24nKSA/ICBmYWxzZSA/IGludmFyaWFudChmYWxzZSwgJ1Jl
YWN0VXBkYXRlczogbXVzdCBwcm92aWRlIGEgYmF0Y2hlZFVwZGF0ZXMoKSBmdW5jdGlvbicpIDog
X3Byb2RJbnZhcmlhbnQoJzEyOCcpIDogdm9pZCAwO1xuICAgICEodHlwZW9mIF9iYXRjaGluZ1N0
cmF0ZWd5LmlzQmF0Y2hpbmdVcGRhdGVzID09PSAnYm9vbGVhbicpID8gIGZhbHNlID8gaW52YXJp
YW50KGZhbHNlLCAnUmVhY3RVcGRhdGVzOiBtdXN0IHByb3ZpZGUgYW4gaXNCYXRjaGluZ1VwZGF0
ZXMgYm9vbGVhbiBhdHRyaWJ1dGUnKSA6IF9wcm9kSW52YXJpYW50KCcxMjknKSA6IHZvaWQgMDtc
biAgICBiYXRjaGluZ1N0cmF0ZWd5ID0gX2JhdGNoaW5nU3RyYXRlZ3k7XG4gIH1cbn07XG5cbnZh
ciBSZWFjdFVwZGF0ZXMgPSB7XG4gIC8qKlxuICAgKiBSZWFjdCByZWZlcmVuY2VzIGBSZWFjdFJl
Y29uY2lsZVRyYW5zYWN0aW9uYCB1c2luZyB0aGlzIHByb3BlcnR5IGluIG9yZGVyXG4gICAqIHRv
IGFsbG93IGRlcGVuZGVuY3kgaW5qZWN0aW9uLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICov
XG4gIFJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb246IG51bGwsXG5cbiAgYmF0Y2hlZFVwZGF0ZXM6
IGJhdGNoZWRVcGRhdGVzLFxuICBlbnF1ZXVlVXBkYXRlOiBlbnF1ZXVlVXBkYXRlLFxuICBmbHVz
aEJhdGNoZWRVcGRhdGVzOiBmbHVzaEJhdGNoZWRVcGRhdGVzLFxuICBpbmplY3Rpb246IFJlYWN0
VXBkYXRlc0luamVjdGlvbixcbiAgYXNhcDogYXNhcFxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBS
ZWFjdFVwZGF0ZXM7XG5cbi8qKiovIH0pLFxuLyogOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVs
ZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxu
XG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTMpO1xuXG5cbi8qKiovIH0p
LFxuLyogMTAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19y
ZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLXBy
ZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRo
aXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZv
dW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlz
IHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNh
biBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAq
XG4gKiBcbiAqL1xuXG5cblxuLyoqXG4gKiBLZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBvd25l
ci5cbiAqXG4gKiBUaGUgY3VycmVudCBvd25lciBpcyB0aGUgY29tcG9uZW50IHdobyBzaG91bGQg
b3duIGFueSBjb21wb25lbnRzIHRoYXQgYXJlXG4gKiBjdXJyZW50bHkgYmVpbmcgY29uc3RydWN0
ZWQuXG4gKi9cbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IHtcbiAgLyoqXG4gICAqIEBpbnRlcm5h
bFxuICAgKiBAdHlwZSB7UmVhY3RDb21wb25lbnR9XG4gICAqL1xuICBjdXJyZW50OiBudWxsXG59
O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0Q3VycmVudE93bmVyO1xuXG4vKioqLyB9KSxcbi8q
IDExICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWly
ZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50
LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNv
dXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBp
biB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3Vy
Y2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUg
Zm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICov
XG5cblxuXG52YXIgX2Fzc2lnbiA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG5cbnZhciBQb29s
ZWRDbGFzcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xuXG52YXIgZW1wdHlGdW5jdGlvbiA9
IF9fd2VicGFja19yZXF1aXJlX18oNik7XG52YXIgd2FybmluZyA9IF9fd2VicGFja19yZXF1aXJl
X18oMSk7XG5cbnZhciBkaWRXYXJuRm9yQWRkZWROZXdQcm9wZXJ0eSA9IGZhbHNlO1xudmFyIGlz
UHJveHlTdXBwb3J0ZWQgPSB0eXBlb2YgUHJveHkgPT09ICdmdW5jdGlvbic7XG5cbnZhciBzaG91
bGRCZVJlbGVhc2VkUHJvcGVydGllcyA9IFsnZGlzcGF0Y2hDb25maWcnLCAnX3RhcmdldEluc3Qn
LCAnbmF0aXZlRXZlbnQnLCAnaXNEZWZhdWx0UHJldmVudGVkJywgJ2lzUHJvcGFnYXRpb25TdG9w
cGVkJywgJ19kaXNwYXRjaExpc3RlbmVycycsICdfZGlzcGF0Y2hJbnN0YW5jZXMnXTtcblxuLyoq
XG4gKiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1M
ZXZlbC0zLUV2ZW50cy9cbiAqL1xudmFyIEV2ZW50SW50ZXJmYWNlID0ge1xuICB0eXBlOiBudWxs
LFxuICB0YXJnZXQ6IG51bGwsXG4gIC8vIGN1cnJlbnRUYXJnZXQgaXMgc2V0IHdoZW4gZGlzcGF0
Y2hpbmc7IG5vIHVzZSBpbiBjb3B5aW5nIGl0IGhlcmVcbiAgY3VycmVudFRhcmdldDogZW1wdHlG
dW5jdGlvbi50aGF0UmV0dXJuc051bGwsXG4gIGV2ZW50UGhhc2U6IG51bGwsXG4gIGJ1YmJsZXM6
IG51bGwsXG4gIGNhbmNlbGFibGU6IG51bGwsXG4gIHRpbWVTdGFtcDogZnVuY3Rpb24gKGV2ZW50
KSB7XG4gICAgcmV0dXJuIGV2ZW50LnRpbWVTdGFtcCB8fCBEYXRlLm5vdygpO1xuICB9LFxuICBk
ZWZhdWx0UHJldmVudGVkOiBudWxsLFxuICBpc1RydXN0ZWQ6IG51bGxcbn07XG5cbi8qKlxuICog
U3ludGhldGljIGV2ZW50cyBhcmUgZGlzcGF0Y2hlZCBieSBldmVudCBwbHVnaW5zLCB0eXBpY2Fs
bHkgaW4gcmVzcG9uc2UgdG8gYVxuICogdG9wLWxldmVsIGV2ZW50IGRlbGVnYXRpb24gaGFuZGxl
ci5cbiAqXG4gKiBUaGVzZSBzeXN0ZW1zIHNob3VsZCBnZW5lcmFsbHkgdXNlIHBvb2xpbmcgdG8g
cmVkdWNlIHRoZSBmcmVxdWVuY3kgb2YgZ2FyYmFnZVxuICogY29sbGVjdGlvbi4gVGhlIHN5c3Rl
bSBzaG91bGQgY2hlY2sgYGlzUGVyc2lzdGVudGAgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlXG4g
KiBldmVudCBzaG91bGQgYmUgcmVsZWFzZWQgaW50byB0aGUgcG9vbCBhZnRlciBiZWluZyBkaXNw
YXRjaGVkLiBVc2VycyB0aGF0XG4gKiBuZWVkIGEgcGVyc2lzdGVkIGV2ZW50IHNob3VsZCBpbnZv
a2UgYHBlcnNpc3RgLlxuICpcbiAqIFN5bnRoZXRpYyBldmVudHMgKGFuZCBzdWJjbGFzc2VzKSBp
bXBsZW1lbnQgdGhlIERPTSBMZXZlbCAzIEV2ZW50cyBBUEkgYnlcbiAqIG5vcm1hbGl6aW5nIGJy
b3dzZXIgcXVpcmtzLiBTdWJjbGFzc2VzIGRvIG5vdCBuZWNlc3NhcmlseSBoYXZlIHRvIGltcGxl
bWVudCBhXG4gKiBET00gaW50ZXJmYWNlOyBjdXN0b20gYXBwbGljYXRpb24tc3BlY2lmaWMgZXZl
bnRzIGNhbiBhbHNvIHN1YmNsYXNzIHRoaXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGRpc3Bh
dGNoQ29uZmlnIENvbmZpZ3VyYXRpb24gdXNlZCB0byBkaXNwYXRjaCB0aGlzIGV2ZW50LlxuICog
QHBhcmFtIHsqfSB0YXJnZXRJbnN0IE1hcmtlciBpZGVudGlmeWluZyB0aGUgZXZlbnQgdGFyZ2V0
LlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50Llxu
ICogQHBhcmFtIHtET01FdmVudFRhcmdldH0gbmF0aXZlRXZlbnRUYXJnZXQgVGFyZ2V0IG5vZGUu
XG4gKi9cbmZ1bmN0aW9uIFN5bnRoZXRpY0V2ZW50KGRpc3BhdGNoQ29uZmlnLCB0YXJnZXRJbnN0
LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgaWYgKGZhbHNlKSB7XG4gICAg
Ly8gdGhlc2UgaGF2ZSBhIGdldHRlci9zZXR0ZXIgZm9yIHdhcm5pbmdzXG4gICAgZGVsZXRlIHRo
aXMubmF0aXZlRXZlbnQ7XG4gICAgZGVsZXRlIHRoaXMucHJldmVudERlZmF1bHQ7XG4gICAgZGVs
ZXRlIHRoaXMuc3RvcFByb3BhZ2F0aW9uO1xuICB9XG5cbiAgdGhpcy5kaXNwYXRjaENvbmZpZyA9
IGRpc3BhdGNoQ29uZmlnO1xuICB0aGlzLl90YXJnZXRJbnN0ID0gdGFyZ2V0SW5zdDtcbiAgdGhp
cy5uYXRpdmVFdmVudCA9IG5hdGl2ZUV2ZW50O1xuXG4gIHZhciBJbnRlcmZhY2UgPSB0aGlzLmNv
bnN0cnVjdG9yLkludGVyZmFjZTtcbiAgZm9yICh2YXIgcHJvcE5hbWUgaW4gSW50ZXJmYWNlKSB7
XG4gICAgaWYgKCFJbnRlcmZhY2UuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICBj
b250aW51ZTtcbiAgICB9XG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICBkZWxldGUgdGhpc1twcm9w
TmFtZV07IC8vIHRoaXMgaGFzIGEgZ2V0dGVyL3NldHRlciBmb3Igd2FybmluZ3NcbiAgICB9XG4g
ICAgdmFyIG5vcm1hbGl6ZSA9IEludGVyZmFjZVtwcm9wTmFtZV07XG4gICAgaWYgKG5vcm1hbGl6
ZSkge1xuICAgICAgdGhpc1twcm9wTmFtZV0gPSBub3JtYWxpemUobmF0aXZlRXZlbnQpO1xuICAg
IH0gZWxzZSB7XG4gICAgICBpZiAocHJvcE5hbWUgPT09ICd0YXJnZXQnKSB7XG4gICAgICAgIHRo
aXMudGFyZ2V0ID0gbmF0aXZlRXZlbnRUYXJnZXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0
aGlzW3Byb3BOYW1lXSA9IG5hdGl2ZUV2ZW50W3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9XG4g
IH1cblxuICB2YXIgZGVmYXVsdFByZXZlbnRlZCA9IG5hdGl2ZUV2ZW50LmRlZmF1bHRQcmV2ZW50
ZWQgIT0gbnVsbCA/IG5hdGl2ZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgOiBuYXRpdmVFdmVudC5y
ZXR1cm5WYWx1ZSA9PT0gZmFsc2U7XG4gIGlmIChkZWZhdWx0UHJldmVudGVkKSB7XG4gICAgdGhp
cy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zVHJ1ZTtcbiAg
fSBlbHNlIHtcbiAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGVtcHR5RnVuY3Rpb24udGhh
dFJldHVybnNGYWxzZTtcbiAgfVxuICB0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gZW1wdHlG
dW5jdGlvbi50aGF0UmV0dXJuc0ZhbHNlO1xuICByZXR1cm4gdGhpcztcbn1cblxuX2Fzc2lnbihT
eW50aGV0aWNFdmVudC5wcm90b3R5cGUsIHtcbiAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uICgp
IHtcbiAgICB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xuICAgIHZhciBldmVudCA9IHRo
aXMubmF0aXZlRXZlbnQ7XG4gICAgaWYgKCFldmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1c
blxuICAgIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkge1xuICAgICAgZXZlbnQucHJldmVudERl
ZmF1bHQoKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2YWxpZC10eXBlb2Zc
biAgICB9IGVsc2UgaWYgKHR5cGVvZiBldmVudC5yZXR1cm5WYWx1ZSAhPT0gJ3Vua25vd24nKSB7
XG4gICAgICBldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmlzRGVm
YXVsdFByZXZlbnRlZCA9IGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNUcnVlO1xuICB9LFxuXG4g
IHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24gKCkge1xuICAgIHZhciBldmVudCA9IHRoaXMubmF0
aXZlRXZlbnQ7XG4gICAgaWYgKCFldmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAg
IGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlv
bigpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZhbGlkLXR5cGVvZlxuICAg
IH0gZWxzZSBpZiAodHlwZW9mIGV2ZW50LmNhbmNlbEJ1YmJsZSAhPT0gJ3Vua25vd24nKSB7XG4g
ICAgICAvLyBUaGUgQ2hhbmdlRXZlbnRQbHVnaW4gcmVnaXN0ZXJzIGEgXCJwcm9wZXJ0eWNoYW5n
ZVwiIGV2ZW50IGZvclxuICAgICAgLy8gSUUuIFRoaXMgZXZlbnQgZG9lcyBub3Qgc3VwcG9ydCBi
dWJibGluZyBvciBjYW5jZWxsaW5nLCBhbmRcbiAgICAgIC8vIGFueSByZWZlcmVuY2VzIHRvIGNh
bmNlbEJ1YmJsZSB0aHJvdyBcIk1lbWJlciBub3QgZm91bmRcIi4gIEFcbiAgICAgIC8vIHR5cGVv
ZiBjaGVjayBvZiBcInVua25vd25cIiBjaXJjdW12ZW50cyB0aGlzIGlzc3VlIChhbmQgaXMgYWxz
b1xuICAgICAgLy8gSUUgc3BlY2lmaWMpLlxuICAgICAgZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1
ZTtcbiAgICB9XG5cbiAgICB0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gZW1wdHlGdW5jdGlv
bi50aGF0UmV0dXJuc1RydWU7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFdlIHJlbGVhc2UgYWxsIGRp
c3BhdGNoZWQgYFN5bnRoZXRpY0V2ZW50YHMgYWZ0ZXIgZWFjaCBldmVudCBsb29wLCBhZGRpbmdc
biAgICogdGhlbSBiYWNrIGludG8gdGhlIHBvb2wuIFRoaXMgYWxsb3dzIGEgd2F5IHRvIGhvbGQg
b250byBhIHJlZmVyZW5jZSB0aGF0XG4gICAqIHdvbid0IGJlIGFkZGVkIGJhY2sgaW50byB0aGUg
cG9vbC5cbiAgICovXG4gIHBlcnNpc3Q6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmlzUGVyc2lz
dGVudCA9IGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNUcnVlO1xuICB9LFxuXG4gIC8qKlxuICAg
KiBDaGVja3MgaWYgdGhpcyBldmVudCBzaG91bGQgYmUgcmVsZWFzZWQgYmFjayBpbnRvIHRoZSBw
b29sLlxuICAgKlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoaXMgc2hvdWxkIG5v
dCBiZSByZWxlYXNlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgaXNQZXJzaXN0ZW50OiBl
bXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zRmFsc2UsXG5cbiAgLyoqXG4gICAqIGBQb29sZWRDbGFz
c2AgbG9va3MgZm9yIGBkZXN0cnVjdG9yYCBvbiBlYWNoIGluc3RhbmNlIGl0IHJlbGVhc2VzLlxu
ICAgKi9cbiAgZGVzdHJ1Y3RvcjogZnVuY3Rpb24gKCkge1xuICAgIHZhciBJbnRlcmZhY2UgPSB0
aGlzLmNvbnN0cnVjdG9yLkludGVyZmFjZTtcbiAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBJbnRl
cmZhY2UpIHtcbiAgICAgIGlmIChmYWxzZSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkodGhpcywgcHJvcE5hbWUsIGdldFBvb2xlZFdhcm5pbmdQcm9wZXJ0eURlZmluaXRpb24ocHJv
cE5hbWUsIEludGVyZmFjZVtwcm9wTmFtZV0pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRo
aXNbcHJvcE5hbWVdID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBzaG91bGRCZVJlbGVhc2VkUHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhp
c1tzaG91bGRCZVJlbGVhc2VkUHJvcGVydGllc1tpXV0gPSBudWxsO1xuICAgIH1cbiAgICBpZiAo
ZmFsc2UpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnbmF0aXZlRXZlbnQn
LCBnZXRQb29sZWRXYXJuaW5nUHJvcGVydHlEZWZpbml0aW9uKCduYXRpdmVFdmVudCcsIG51bGwp
KTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAncHJldmVudERlZmF1bHQnLCBn
ZXRQb29sZWRXYXJuaW5nUHJvcGVydHlEZWZpbml0aW9uKCdwcmV2ZW50RGVmYXVsdCcsIGVtcHR5
RnVuY3Rpb24pKTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnc3RvcFByb3Bh
Z2F0aW9uJywgZ2V0UG9vbGVkV2FybmluZ1Byb3BlcnR5RGVmaW5pdGlvbignc3RvcFByb3BhZ2F0
aW9uJywgZW1wdHlGdW5jdGlvbikpO1xuICAgIH1cbiAgfVxufSk7XG5cblN5bnRoZXRpY0V2ZW50
LkludGVyZmFjZSA9IEV2ZW50SW50ZXJmYWNlO1xuXG5pZiAoZmFsc2UpIHtcbiAgaWYgKGlzUHJv
eHlTdXBwb3J0ZWQpIHtcbiAgICAvKmVzbGludC1kaXNhYmxlIG5vLWZ1bmMtYXNzaWduICovXG4g
ICAgU3ludGhldGljRXZlbnQgPSBuZXcgUHJveHkoU3ludGhldGljRXZlbnQsIHtcbiAgICAgIGNv
bnN0cnVjdDogZnVuY3Rpb24gKHRhcmdldCwgYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy5h
cHBseSh0YXJnZXQsIE9iamVjdC5jcmVhdGUodGFyZ2V0LnByb3RvdHlwZSksIGFyZ3MpO1xuICAg
ICAgfSxcbiAgICAgIGFwcGx5OiBmdW5jdGlvbiAoY29uc3RydWN0b3IsIHRoYXQsIGFyZ3MpIHtc
biAgICAgICAgcmV0dXJuIG5ldyBQcm94eShjb25zdHJ1Y3Rvci5hcHBseSh0aGF0LCBhcmdzKSwg
e1xuICAgICAgICAgIHNldDogZnVuY3Rpb24gKHRhcmdldCwgcHJvcCwgdmFsdWUpIHtcbiAgICAg
ICAgICAgIGlmIChwcm9wICE9PSAnaXNQZXJzaXN0ZW50JyAmJiAhdGFyZ2V0LmNvbnN0cnVjdG9y
LkludGVyZmFjZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSAmJiBzaG91bGRCZVJlbGVhc2VkUHJvcGVy
dGllcy5pbmRleE9mKHByb3ApID09PSAtMSkge1xuICAgICAgICAgICAgICBwcm9jZXNzLmVudi5O
T0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhkaWRXYXJuRm9yQWRkZWROZXdQcm9w
ZXJ0eSB8fCB0YXJnZXQuaXNQZXJzaXN0ZW50KCksIFwiVGhpcyBzeW50aGV0aWMgZXZlbnQgaXMg
cmV1c2VkIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiBJZiB5b3UncmUgXCIgKyBcInNlZWluZyB0
aGlzLCB5b3UncmUgYWRkaW5nIGEgbmV3IHByb3BlcnR5IGluIHRoZSBzeW50aGV0aWMgZXZlbnQg
b2JqZWN0LiBcIiArICdUaGUgcHJvcGVydHkgaXMgbmV2ZXIgcmVsZWFzZWQuIFNlZSAnICsgJ2h0
dHBzOi8vZmIubWUvcmVhY3QtZXZlbnQtcG9vbGluZyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nKSA6
IHZvaWQgMDtcbiAgICAgICAgICAgICAgZGlkV2FybkZvckFkZGVkTmV3UHJvcGVydHkgPSB0cnVl
O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFyZ2V0W3Byb3BdID0gdmFsdWU7XG4gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxu
ICAgIH0pO1xuICAgIC8qZXNsaW50LWVuYWJsZSBuby1mdW5jLWFzc2lnbiAqL1xuICB9XG59XG4v
KipcbiAqIEhlbHBlciB0byByZWR1Y2UgYm9pbGVycGxhdGUgd2hlbiBjcmVhdGluZyBzdWJjbGFz
c2VzLlxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IENsYXNzXG4gKiBAcGFyYW0gez9vYmplY3R9
IEludGVyZmFjZVxuICovXG5TeW50aGV0aWNFdmVudC5hdWdtZW50Q2xhc3MgPSBmdW5jdGlvbiAo
Q2xhc3MsIEludGVyZmFjZSkge1xuICB2YXIgU3VwZXIgPSB0aGlzO1xuXG4gIHZhciBFID0gZnVu
Y3Rpb24gKCkge307XG4gIEUucHJvdG90eXBlID0gU3VwZXIucHJvdG90eXBlO1xuICB2YXIgcHJv
dG90eXBlID0gbmV3IEUoKTtcblxuICBfYXNzaWduKHByb3RvdHlwZSwgQ2xhc3MucHJvdG90eXBl
KTtcbiAgQ2xhc3MucHJvdG90eXBlID0gcHJvdG90eXBlO1xuICBDbGFzcy5wcm90b3R5cGUuY29u
c3RydWN0b3IgPSBDbGFzcztcblxuICBDbGFzcy5JbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBTdXBl
ci5JbnRlcmZhY2UsIEludGVyZmFjZSk7XG4gIENsYXNzLmF1Z21lbnRDbGFzcyA9IFN1cGVyLmF1
Z21lbnRDbGFzcztcblxuICBQb29sZWRDbGFzcy5hZGRQb29saW5nVG8oQ2xhc3MsIFBvb2xlZENs
YXNzLmZvdXJBcmd1bWVudFBvb2xlcik7XG59O1xuXG5Qb29sZWRDbGFzcy5hZGRQb29saW5nVG8o
U3ludGhldGljRXZlbnQsIFBvb2xlZENsYXNzLmZvdXJBcmd1bWVudFBvb2xlcik7XG5cbm1vZHVs
ZS5leHBvcnRzID0gU3ludGhldGljRXZlbnQ7XG5cbi8qKlxuICAqIEhlbHBlciB0byBudWxsaWZ5
IHN5bnRoZXRpY0V2ZW50IGluc3RhbmNlIHByb3BlcnRpZXMgd2hlbiBkZXN0cnVjdGluZ1xuICAq
XG4gICogQHBhcmFtIHtvYmplY3R9IFN5bnRoZXRpY0V2ZW50XG4gICogQHBhcmFtIHtTdHJpbmd9
IHByb3BOYW1lXG4gICogQHJldHVybiB7b2JqZWN0fSBkZWZpbmVQcm9wZXJ0eSBvYmplY3RcbiAg
Ki9cbmZ1bmN0aW9uIGdldFBvb2xlZFdhcm5pbmdQcm9wZXJ0eURlZmluaXRpb24ocHJvcE5hbWUs
IGdldFZhbCkge1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiBnZXRWYWwgPT09ICdmdW5jdGlv
bic7XG4gIHJldHVybiB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIHNldDogc2V0LFxu
ICAgIGdldDogZ2V0XG4gIH07XG5cbiAgZnVuY3Rpb24gc2V0KHZhbCkge1xuICAgIHZhciBhY3Rp
b24gPSBpc0Z1bmN0aW9uID8gJ3NldHRpbmcgdGhlIG1ldGhvZCcgOiAnc2V0dGluZyB0aGUgcHJv
cGVydHknO1xuICAgIHdhcm4oYWN0aW9uLCAnVGhpcyBpcyBlZmZlY3RpdmVseSBhIG5vLW9wJyk7
XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldCgpIHtcbiAgICB2YXIgYWN0
aW9uID0gaXNGdW5jdGlvbiA/ICdhY2Nlc3NpbmcgdGhlIG1ldGhvZCcgOiAnYWNjZXNzaW5nIHRo
ZSBwcm9wZXJ0eSc7XG4gICAgdmFyIHJlc3VsdCA9IGlzRnVuY3Rpb24gPyAnVGhpcyBpcyBhIG5v
LW9wIGZ1bmN0aW9uJyA6ICdUaGlzIGlzIHNldCB0byBudWxsJztcbiAgICB3YXJuKGFjdGlvbiwg
cmVzdWx0KTtcbiAgICByZXR1cm4gZ2V0VmFsO1xuICB9XG5cbiAgZnVuY3Rpb24gd2FybihhY3Rp
b24sIHJlc3VsdCkge1xuICAgIHZhciB3YXJuaW5nQ29uZGl0aW9uID0gZmFsc2U7XG4gICAgIGZh
bHNlID8gd2FybmluZyh3YXJuaW5nQ29uZGl0aW9uLCBcIlRoaXMgc3ludGhldGljIGV2ZW50IGlz
IHJldXNlZCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4gSWYgeW91J3JlIHNlZWluZyB0aGlzLCBc
IiArIFwieW91J3JlICVzIGAlc2Agb24gYSByZWxlYXNlZC9udWxsaWZpZWQgc3ludGhldGljIGV2
ZW50LiAlcy4gXCIgKyAnSWYgeW91IG11c3Qga2VlcCB0aGUgb3JpZ2luYWwgc3ludGhldGljIGV2
ZW50IGFyb3VuZCwgdXNlIGV2ZW50LnBlcnNpc3QoKS4gJyArICdTZWUgaHR0cHM6Ly9mYi5tZS9y
ZWFjdC1ldmVudC1wb29saW5nIGZvciBtb3JlIGluZm9ybWF0aW9uLicsIGFjdGlvbiwgcHJvcE5h
bWUsIHJlc3VsdCkgOiB2b2lkIDA7XG4gIH1cbn1cblxuLyoqKi8gfSksXG4vKiAxMiAqL1xuLyoq
Ki8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5c
InVzZSBzdHJpY3RcIjtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ss
IEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBp
cyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBM
SUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFu
IGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRo
ZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIFxuICovXG5cblxu
XG52YXIgX3Byb2RJbnZhcmlhbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuXG52YXIgaW52
YXJpYW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuLyoqXG4gKiBTdGF0aWMgcG9vbGVy
cy4gU2V2ZXJhbCBjdXN0b20gdmVyc2lvbnMgZm9yIGVhY2ggcG90ZW50aWFsIG51bWJlciBvZlxu
ICogYXJndW1lbnRzLiBBIGNvbXBsZXRlbHkgZ2VuZXJpYyBwb29sZXIgaXMgZWFzeSB0byBpbXBs
ZW1lbnQsIGJ1dCB3b3VsZFxuICogcmVxdWlyZSBhY2Nlc3NpbmcgdGhlIGBhcmd1bWVudHNgIG9i
amVjdC4gSW4gZWFjaCBvZiB0aGVzZSwgYHRoaXNgIHJlZmVycyB0b1xuICogdGhlIENsYXNzIGl0
c2VsZiwgbm90IGFuIGluc3RhbmNlLiBJZiBhbnkgb3RoZXJzIGFyZSBuZWVkZWQsIHNpbXBseSBh
ZGQgdGhlbVxuICogaGVyZSwgb3IgaW4gdGhlaXIgb3duIGZpbGVzLlxuICovXG52YXIgb25lQXJn
dW1lbnRQb29sZXIgPSBmdW5jdGlvbiAoY29weUZpZWxkc0Zyb20pIHtcbiAgdmFyIEtsYXNzID0g
dGhpcztcbiAgaWYgKEtsYXNzLmluc3RhbmNlUG9vbC5sZW5ndGgpIHtcbiAgICB2YXIgaW5zdGFu
Y2UgPSBLbGFzcy5pbnN0YW5jZVBvb2wucG9wKCk7XG4gICAgS2xhc3MuY2FsbChpbnN0YW5jZSwg
Y29weUZpZWxkc0Zyb20pO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfSBlbHNlIHtcbiAgICBy
ZXR1cm4gbmV3IEtsYXNzKGNvcHlGaWVsZHNGcm9tKTtcbiAgfVxufTtcblxudmFyIHR3b0FyZ3Vt
ZW50UG9vbGVyID0gZnVuY3Rpb24gKGExLCBhMikge1xuICB2YXIgS2xhc3MgPSB0aGlzO1xuICBp
ZiAoS2xhc3MuaW5zdGFuY2VQb29sLmxlbmd0aCkge1xuICAgIHZhciBpbnN0YW5jZSA9IEtsYXNz
Lmluc3RhbmNlUG9vbC5wb3AoKTtcbiAgICBLbGFzcy5jYWxsKGluc3RhbmNlLCBhMSwgYTIpO1xu
ICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IEtsYXNzKGEx
LCBhMik7XG4gIH1cbn07XG5cbnZhciB0aHJlZUFyZ3VtZW50UG9vbGVyID0gZnVuY3Rpb24gKGEx
LCBhMiwgYTMpIHtcbiAgdmFyIEtsYXNzID0gdGhpcztcbiAgaWYgKEtsYXNzLmluc3RhbmNlUG9v
bC5sZW5ndGgpIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBLbGFzcy5pbnN0YW5jZVBvb2wucG9wKCk7
XG4gICAgS2xhc3MuY2FsbChpbnN0YW5jZSwgYTEsIGEyLCBhMyk7XG4gICAgcmV0dXJuIGluc3Rh
bmNlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgS2xhc3MoYTEsIGEyLCBhMyk7XG4gIH1c
bn07XG5cbnZhciBmb3VyQXJndW1lbnRQb29sZXIgPSBmdW5jdGlvbiAoYTEsIGEyLCBhMywgYTQp
IHtcbiAgdmFyIEtsYXNzID0gdGhpcztcbiAgaWYgKEtsYXNzLmluc3RhbmNlUG9vbC5sZW5ndGgp
IHtcbiAgICB2YXIgaW5zdGFuY2UgPSBLbGFzcy5pbnN0YW5jZVBvb2wucG9wKCk7XG4gICAgS2xh
c3MuY2FsbChpbnN0YW5jZSwgYTEsIGEyLCBhMywgYTQpO1xuICAgIHJldHVybiBpbnN0YW5jZTtc
biAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IEtsYXNzKGExLCBhMiwgYTMsIGE0KTtcbiAgfVxu
fTtcblxudmFyIHN0YW5kYXJkUmVsZWFzZXIgPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgdmFy
IEtsYXNzID0gdGhpcztcbiAgIShpbnN0YW5jZSBpbnN0YW5jZW9mIEtsYXNzKSA/ICBmYWxzZSA/
IGludmFyaWFudChmYWxzZSwgJ1RyeWluZyB0byByZWxlYXNlIGFuIGluc3RhbmNlIGludG8gYSBw
b29sIG9mIGEgZGlmZmVyZW50IHR5cGUuJykgOiBfcHJvZEludmFyaWFudCgnMjUnKSA6IHZvaWQg
MDtcbiAgaW5zdGFuY2UuZGVzdHJ1Y3RvcigpO1xuICBpZiAoS2xhc3MuaW5zdGFuY2VQb29sLmxl
bmd0aCA8IEtsYXNzLnBvb2xTaXplKSB7XG4gICAgS2xhc3MuaW5zdGFuY2VQb29sLnB1c2goaW5z
dGFuY2UpO1xuICB9XG59O1xuXG52YXIgREVGQVVMVF9QT09MX1NJWkUgPSAxMDtcbnZhciBERUZB
VUxUX1BPT0xFUiA9IG9uZUFyZ3VtZW50UG9vbGVyO1xuXG4vKipcbiAqIEF1Z21lbnRzIGBDb3B5
Q29uc3RydWN0b3JgIHRvIGJlIGEgcG9vbGFibGUgY2xhc3MsIGF1Z21lbnRpbmcgb25seSB0aGUg
Y2xhc3NcbiAqIGl0c2VsZiAoc3RhdGljYWxseSkgbm90IGFkZGluZyBhbnkgcHJvdG90eXBpY2Fs
IGZpZWxkcy4gQW55IENvcHlDb25zdHJ1Y3RvclxuICogeW91IGdpdmUgdGhpcyBtYXkgaGF2ZSBh
IGBwb29sU2l6ZWAgcHJvcGVydHksIGFuZCB3aWxsIGxvb2sgZm9yIGFcbiAqIHByb3RvdHlwaWNh
bCBgZGVzdHJ1Y3RvcmAgb24gaW5zdGFuY2VzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IENv
cHlDb25zdHJ1Y3RvciBDb25zdHJ1Y3RvciB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlc2V0LlxuICog
QHBhcmFtIHtGdW5jdGlvbn0gcG9vbGVyIEN1c3RvbWl6YWJsZSBwb29sZXIuXG4gKi9cbnZhciBh
ZGRQb29saW5nVG8gPSBmdW5jdGlvbiAoQ29weUNvbnN0cnVjdG9yLCBwb29sZXIpIHtcbiAgLy8g
Q2FzdGluZyBhcyBhbnkgc28gdGhhdCBmbG93IGlnbm9yZXMgdGhlIGFjdHVhbCBpbXBsZW1lbnRh
dGlvbiBhbmQgdHJ1c3RzXG4gIC8vIGl0IHRvIG1hdGNoIHRoZSB0eXBlIHdlIGRlY2xhcmVkXG4g
IHZhciBOZXdLbGFzcyA9IENvcHlDb25zdHJ1Y3RvcjtcbiAgTmV3S2xhc3MuaW5zdGFuY2VQb29s
ID0gW107XG4gIE5ld0tsYXNzLmdldFBvb2xlZCA9IHBvb2xlciB8fCBERUZBVUxUX1BPT0xFUjtc
biAgaWYgKCFOZXdLbGFzcy5wb29sU2l6ZSkge1xuICAgIE5ld0tsYXNzLnBvb2xTaXplID0gREVG
QVVMVF9QT09MX1NJWkU7XG4gIH1cbiAgTmV3S2xhc3MucmVsZWFzZSA9IHN0YW5kYXJkUmVsZWFz
ZXI7XG4gIHJldHVybiBOZXdLbGFzcztcbn07XG5cbnZhciBQb29sZWRDbGFzcyA9IHtcbiAgYWRk
UG9vbGluZ1RvOiBhZGRQb29saW5nVG8sXG4gIG9uZUFyZ3VtZW50UG9vbGVyOiBvbmVBcmd1bWVu
dFBvb2xlcixcbiAgdHdvQXJndW1lbnRQb29sZXI6IHR3b0FyZ3VtZW50UG9vbGVyLFxuICB0aHJl
ZUFyZ3VtZW50UG9vbGVyOiB0aHJlZUFyZ3VtZW50UG9vbGVyLFxuICBmb3VyQXJndW1lbnRQb29s
ZXI6IGZvdXJBcmd1bWVudFBvb2xlclxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBQb29sZWRDbGFz
cztcblxuLyoqKi8gfSksXG4vKiAxMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0
cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qKlxuICogQ29w
eXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0
eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGly
ZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBh
dGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUg
ZGlyZWN0b3J5LlxuICpcbiAqL1xuXG5cblxudmFyIF9hc3NpZ24gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKDMpO1xuXG52YXIgUmVhY3RCYXNlQ2xhc3NlcyA9IF9fd2VicGFja19yZXF1aXJlX18oNTIp
O1xudmFyIFJlYWN0Q2hpbGRyZW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwNSk7XG52YXIgUmVh
Y3RET01GYWN0b3JpZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExMCk7XG52YXIgUmVhY3RFbGVt
ZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNCk7XG52YXIgUmVhY3RQcm9wVHlwZXMgPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKDExMSk7XG52YXIgUmVhY3RWZXJzaW9uID0gX193ZWJwYWNrX3JlcXVp
cmVfXygxMTQpO1xuXG52YXIgY3JlYXRlUmVhY3RDbGFzcyA9IF9fd2VicGFja19yZXF1aXJlX18o
MTE1KTtcbnZhciBvbmx5Q2hpbGQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExNyk7XG5cbnZhciBj
cmVhdGVFbGVtZW50ID0gUmVhY3RFbGVtZW50LmNyZWF0ZUVsZW1lbnQ7XG52YXIgY3JlYXRlRmFj
dG9yeSA9IFJlYWN0RWxlbWVudC5jcmVhdGVGYWN0b3J5O1xudmFyIGNsb25lRWxlbWVudCA9IFJl
YWN0RWxlbWVudC5jbG9uZUVsZW1lbnQ7XG5cbmlmIChmYWxzZSkge1xuICB2YXIgbG93UHJpb3Jp
dHlXYXJuaW5nID0gcmVxdWlyZSgnLi9sb3dQcmlvcml0eVdhcm5pbmcnKTtcbiAgdmFyIGNhbkRl
ZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9jYW5EZWZpbmVQcm9wZXJ0eScpO1xuICB2YXIgUmVh
Y3RFbGVtZW50VmFsaWRhdG9yID0gcmVxdWlyZSgnLi9SZWFjdEVsZW1lbnRWYWxpZGF0b3InKTtc
biAgdmFyIGRpZFdhcm5Qcm9wVHlwZXNEZXByZWNhdGVkID0gZmFsc2U7XG4gIGNyZWF0ZUVsZW1l
bnQgPSBSZWFjdEVsZW1lbnRWYWxpZGF0b3IuY3JlYXRlRWxlbWVudDtcbiAgY3JlYXRlRmFjdG9y
eSA9IFJlYWN0RWxlbWVudFZhbGlkYXRvci5jcmVhdGVGYWN0b3J5O1xuICBjbG9uZUVsZW1lbnQg
PSBSZWFjdEVsZW1lbnRWYWxpZGF0b3IuY2xvbmVFbGVtZW50O1xufVxuXG52YXIgX19zcHJlYWQg
PSBfYXNzaWduO1xudmFyIGNyZWF0ZU1peGluID0gZnVuY3Rpb24gKG1peGluKSB7XG4gIHJldHVy
biBtaXhpbjtcbn07XG5cbmlmIChmYWxzZSkge1xuICB2YXIgd2FybmVkRm9yU3ByZWFkID0gZmFs
c2U7XG4gIHZhciB3YXJuZWRGb3JDcmVhdGVNaXhpbiA9IGZhbHNlO1xuICBfX3NwcmVhZCA9IGZ1
bmN0aW9uICgpIHtcbiAgICBsb3dQcmlvcml0eVdhcm5pbmcod2FybmVkRm9yU3ByZWFkLCAnUmVh
Y3QuX19zcHJlYWQgaXMgZGVwcmVjYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkLiBVc2UgJyAr
ICdPYmplY3QuYXNzaWduIGRpcmVjdGx5IG9yIGFub3RoZXIgaGVscGVyIGZ1bmN0aW9uIHdpdGgg
c2ltaWxhciAnICsgJ3NlbWFudGljcy4gWW91IG1heSBiZSBzZWVpbmcgdGhpcyB3YXJuaW5nIGR1
ZSB0byB5b3VyIGNvbXBpbGVyLiAnICsgJ1NlZSBodHRwczovL2ZiLm1lL3JlYWN0LXNwcmVhZC1k
ZXByZWNhdGlvbiBmb3IgbW9yZSBkZXRhaWxzLicpO1xuICAgIHdhcm5lZEZvclNwcmVhZCA9IHRy
dWU7XG4gICAgcmV0dXJuIF9hc3NpZ24uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgfTtcblxu
ICBjcmVhdGVNaXhpbiA9IGZ1bmN0aW9uIChtaXhpbikge1xuICAgIGxvd1ByaW9yaXR5V2Fybmlu
Zyh3YXJuZWRGb3JDcmVhdGVNaXhpbiwgJ1JlYWN0LmNyZWF0ZU1peGluIGlzIGRlcHJlY2F0ZWQg
YW5kIHNob3VsZCBub3QgYmUgdXNlZC4gJyArICdJbiBSZWFjdCB2MTYuMCwgaXQgd2lsbCBiZSBy
ZW1vdmVkLiAnICsgJ1lvdSBjYW4gdXNlIHRoaXMgbWl4aW4gZGlyZWN0bHkgaW5zdGVhZC4gJyAr
ICdTZWUgaHR0cHM6Ly9mYi5tZS9jcmVhdGVtaXhpbi13YXMtbmV2ZXItaW1wbGVtZW50ZWQgZm9y
IG1vcmUgaW5mby4nKTtcbiAgICB3YXJuZWRGb3JDcmVhdGVNaXhpbiA9IHRydWU7XG4gICAgcmV0
dXJuIG1peGluO1xuICB9O1xufVxuXG52YXIgUmVhY3QgPSB7XG4gIC8vIE1vZGVyblxuXG4gIENo
aWxkcmVuOiB7XG4gICAgbWFwOiBSZWFjdENoaWxkcmVuLm1hcCxcbiAgICBmb3JFYWNoOiBSZWFj
dENoaWxkcmVuLmZvckVhY2gsXG4gICAgY291bnQ6IFJlYWN0Q2hpbGRyZW4uY291bnQsXG4gICAg
dG9BcnJheTogUmVhY3RDaGlsZHJlbi50b0FycmF5LFxuICAgIG9ubHk6IG9ubHlDaGlsZFxuICB9
LFxuXG4gIENvbXBvbmVudDogUmVhY3RCYXNlQ2xhc3Nlcy5Db21wb25lbnQsXG4gIFB1cmVDb21w
b25lbnQ6IFJlYWN0QmFzZUNsYXNzZXMuUHVyZUNvbXBvbmVudCxcblxuICBjcmVhdGVFbGVtZW50
OiBjcmVhdGVFbGVtZW50LFxuICBjbG9uZUVsZW1lbnQ6IGNsb25lRWxlbWVudCxcbiAgaXNWYWxp
ZEVsZW1lbnQ6IFJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudCxcblxuICAvLyBDbGFzc2ljXG5c
biAgUHJvcFR5cGVzOiBSZWFjdFByb3BUeXBlcyxcbiAgY3JlYXRlQ2xhc3M6IGNyZWF0ZVJlYWN0
Q2xhc3MsXG4gIGNyZWF0ZUZhY3Rvcnk6IGNyZWF0ZUZhY3RvcnksXG4gIGNyZWF0ZU1peGluOiBj
cmVhdGVNaXhpbixcblxuICAvLyBUaGlzIGxvb2tzIERPTSBzcGVjaWZpYyBidXQgdGhlc2UgYXJl
IGFjdHVhbGx5IGlzb21vcnBoaWMgaGVscGVyc1xuICAvLyBzaW5jZSB0aGV5IGFyZSBqdXN0IGdl
bmVyYXRpbmcgRE9NIHN0cmluZ3MuXG4gIERPTTogUmVhY3RET01GYWN0b3JpZXMsXG5cbiAgdmVy
c2lvbjogUmVhY3RWZXJzaW9uLFxuXG4gIC8vIERlcHJlY2F0ZWQgaG9vayBmb3IgSlNYIHNwcmVh
ZCwgZG9uJ3QgdXNlIHRoaXMgZm9yIGFueXRoaW5nLlxuICBfX3NwcmVhZDogX19zcHJlYWRcbn07
XG5cbmlmIChmYWxzZSkge1xuICB2YXIgd2FybmVkRm9yQ3JlYXRlQ2xhc3MgPSBmYWxzZTtcbiAg
aWYgKGNhbkRlZmluZVByb3BlcnR5KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWN0
LCAnUHJvcFR5cGVzJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxvd1By
aW9yaXR5V2FybmluZyhkaWRXYXJuUHJvcFR5cGVzRGVwcmVjYXRlZCwgJ0FjY2Vzc2luZyBQcm9w
VHlwZXMgdmlhIHRoZSBtYWluIFJlYWN0IHBhY2thZ2UgaXMgZGVwcmVjYXRlZCwnICsgJyBhbmQg
d2lsbCBiZSByZW1vdmVkIGluICBSZWFjdCB2MTYuMC4nICsgJyBVc2UgdGhlIGxhdGVzdCBhdmFp
bGFibGUgdjE1LiogcHJvcC10eXBlcyBwYWNrYWdlIGZyb20gbnBtIGluc3RlYWQuJyArICcgRm9y
IGluZm8gb24gdXNhZ2UsIGNvbXBhdGliaWxpdHksIG1pZ3JhdGlvbiBhbmQgbW9yZSwgc2VlICcg
KyAnaHR0cHM6Ly9mYi5tZS9wcm9wLXR5cGVzLWRvY3MnKTtcbiAgICAgICAgZGlkV2FyblByb3BU
eXBlc0RlcHJlY2F0ZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gUmVhY3RQcm9wVHlwZXM7XG4g
ICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhY3QsICdjcmVh
dGVDbGFzcycsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICBsb3dQcmlvcml0
eVdhcm5pbmcod2FybmVkRm9yQ3JlYXRlQ2xhc3MsICdBY2Nlc3NpbmcgY3JlYXRlQ2xhc3Mgdmlh
IHRoZSBtYWluIFJlYWN0IHBhY2thZ2UgaXMgZGVwcmVjYXRlZCwnICsgJyBhbmQgd2lsbCBiZSBy
ZW1vdmVkIGluIFJlYWN0IHYxNi4wLicgKyBcIiBVc2UgYSBwbGFpbiBKYXZhU2NyaXB0IGNsYXNz
IGluc3RlYWQuIElmIHlvdSdyZSBub3QgeWV0IFwiICsgJ3JlYWR5IHRvIG1pZ3JhdGUsIGNyZWF0
ZS1yZWFjdC1jbGFzcyB2MTUuKiBpcyBhdmFpbGFibGUgJyArICdvbiBucG0gYXMgYSB0ZW1wb3Jh
cnksIGRyb3AtaW4gcmVwbGFjZW1lbnQuICcgKyAnRm9yIG1vcmUgaW5mbyBzZWUgaHR0cHM6Ly9m
Yi5tZS9yZWFjdC1jcmVhdGUtY2xhc3MnKTtcbiAgICAgICAgd2FybmVkRm9yQ3JlYXRlQ2xhc3Mg
PSB0cnVlO1xuICAgICAgICByZXR1cm4gY3JlYXRlUmVhY3RDbGFzcztcbiAgICAgIH1cbiAgICB9
KTtcbiAgfVxuXG4gIC8vIFJlYWN0LkRPTSBmYWN0b3JpZXMgYXJlIGRlcHJlY2F0ZWQuIFdyYXAg
dGhlc2UgbWV0aG9kcyBzbyB0aGF0XG4gIC8vIGludm9jYXRpb25zIG9mIHRoZSBSZWFjdC5ET00g
bmFtZXNwYWNlIGFuZCBhbGVydCB1c2VycyB0byBzd2l0Y2hcbiAgLy8gdG8gdGhlIGByZWFjdC1k
b20tZmFjdG9yaWVzYCBwYWNrYWdlLlxuICBSZWFjdC5ET00gPSB7fTtcbiAgdmFyIHdhcm5lZEZv
ckZhY3RvcmllcyA9IGZhbHNlO1xuICBPYmplY3Qua2V5cyhSZWFjdERPTUZhY3RvcmllcykuZm9y
RWFjaChmdW5jdGlvbiAoZmFjdG9yeSkge1xuICAgIFJlYWN0LkRPTVtmYWN0b3J5XSA9IGZ1bmN0
aW9uICgpIHtcbiAgICAgIGlmICghd2FybmVkRm9yRmFjdG9yaWVzKSB7XG4gICAgICAgIGxvd1By
aW9yaXR5V2FybmluZyhmYWxzZSwgJ0FjY2Vzc2luZyBmYWN0b3JpZXMgbGlrZSBSZWFjdC5ET00u
JXMgaGFzIGJlZW4gZGVwcmVjYXRlZCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdjE2LjAr
LiBVc2UgdGhlICcgKyAncmVhY3QtZG9tLWZhY3RvcmllcyBwYWNrYWdlIGluc3RlYWQuICcgKyAn
IFZlcnNpb24gMS4wIHByb3ZpZGVzIGEgZHJvcC1pbiByZXBsYWNlbWVudC4nICsgJyBGb3IgbW9y
ZSBpbmZvLCBzZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC1kb20tZmFjdG9yaWVzJywgZmFjdG9yeSk7
XG4gICAgICAgIHdhcm5lZEZvckZhY3RvcmllcyA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1
cm4gUmVhY3RET01GYWN0b3JpZXNbZmFjdG9yeV0uYXBwbHkoUmVhY3RET01GYWN0b3JpZXMsIGFy
Z3VtZW50cyk7XG4gICAgfTtcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3Q7XG5c
bi8qKiovIH0pLFxuLyogMTQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9f
d2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIENvcHlyaWdo
dCAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxu
ICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBs
aWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9y
eSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQg
cmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVj
dG9yeS5cbiAqXG4gKi9cblxuXG5cbnZhciBfYXNzaWduID0gX193ZWJwYWNrX3JlcXVpcmVfXygz
KTtcblxudmFyIFJlYWN0Q3VycmVudE93bmVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XG5c
bnZhciB3YXJuaW5nID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciBjYW5EZWZpbmVQcm9w
ZXJ0eSA9IF9fd2VicGFja19yZXF1aXJlX18oNTQpO1xudmFyIGhhc093blByb3BlcnR5ID0gT2Jq
ZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9
IF9fd2VicGFja19yZXF1aXJlX18oNTUpO1xuXG52YXIgUkVTRVJWRURfUFJPUFMgPSB7XG4gIGtl
eTogdHJ1ZSxcbiAgcmVmOiB0cnVlLFxuICBfX3NlbGY6IHRydWUsXG4gIF9fc291cmNlOiB0cnVl
XG59O1xuXG52YXIgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24sIHNwZWNpYWxQcm9wUmVmV2Fy
bmluZ1Nob3duO1xuXG5mdW5jdGlvbiBoYXNWYWxpZFJlZihjb25maWcpIHtcbiAgaWYgKGZhbHNl
KSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAncmVmJykpIHtcbiAgICAg
IHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ3Jl
ZicpLmdldDtcbiAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7XG4g
ICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvbmZp
Zy5yZWYgIT09IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gaGFzVmFsaWRLZXkoY29uZmlnKSB7
XG4gIGlmIChmYWxzZSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ2tl
eScpKSB7XG4gICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihjb25maWcsICdrZXknKS5nZXQ7XG4gICAgICBpZiAoZ2V0dGVyICYmIGdldHRlci5pc1JlYWN0
V2FybmluZykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG4g
IHJldHVybiBjb25maWcua2V5ICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGRlZmluZUtl
eVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkge1xuICB2YXIgd2FybkFib3V0
QWNjZXNzaW5nS2V5ID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICghc3BlY2lhbFByb3BLZXlXYXJu
aW5nU2hvd24pIHtcbiAgICAgIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duID0gdHJ1ZTtcbiAg
ICAgICBmYWxzZSA/IHdhcm5pbmcoZmFsc2UsICclczogYGtleWAgaXMgbm90IGEgcHJvcC4gVHJ5
aW5nIHRvIGFjY2VzcyBpdCB3aWxsIHJlc3VsdCAnICsgJ2luIGB1bmRlZmluZWRgIGJlaW5nIHJl
dHVybmVkLiBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIHNhbWUgJyArICd2YWx1ZSB3aXRoaW4g
dGhlIGNoaWxkIGNvbXBvbmVudCwgeW91IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50ICcg
KyAncHJvcC4gKGh0dHBzOi8vZmIubWUvcmVhY3Qtc3BlY2lhbC1wcm9wcyknLCBkaXNwbGF5TmFt
ZSkgOiB2b2lkIDA7XG4gICAgfVxuICB9O1xuICB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkuaXNSZWFj
dFdhcm5pbmcgPSB0cnVlO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdrZXknLCB7
XG4gICAgZ2V0OiB3YXJuQWJvdXRBY2Nlc3NpbmdLZXksXG4gICAgY29uZmlndXJhYmxlOiB0cnVl
XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBkZWZpbmVSZWZQcm9wV2FybmluZ0dldHRlcihwcm9wcywg
ZGlzcGxheU5hbWUpIHtcbiAgdmFyIHdhcm5BYm91dEFjY2Vzc2luZ1JlZiA9IGZ1bmN0aW9uICgp
IHtcbiAgICBpZiAoIXNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duKSB7XG4gICAgICBzcGVjaWFs
UHJvcFJlZldhcm5pbmdTaG93biA9IHRydWU7XG4gICAgICAgZmFsc2UgPyB3YXJuaW5nKGZhbHNl
LCAnJXM6IGByZWZgIGlzIG5vdCBhIHByb3AuIFRyeWluZyB0byBhY2Nlc3MgaXQgd2lsbCByZXN1
bHQgJyArICdpbiBgdW5kZWZpbmVkYCBiZWluZyByZXR1cm5lZC4gSWYgeW91IG5lZWQgdG8gYWNj
ZXNzIHRoZSBzYW1lICcgKyAndmFsdWUgd2l0aGluIHRoZSBjaGlsZCBjb21wb25lbnQsIHlvdSBz
aG91bGQgcGFzcyBpdCBhcyBhIGRpZmZlcmVudCAnICsgJ3Byb3AuIChodHRwczovL2ZiLm1lL3Jl
YWN0LXNwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpIDogdm9pZCAwO1xuICAgIH1cbiAgfTtc
biAgd2FybkFib3V0QWNjZXNzaW5nUmVmLmlzUmVhY3RXYXJuaW5nID0gdHJ1ZTtcbiAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KHByb3BzLCAncmVmJywge1xuICAgIGdldDogd2FybkFib3V0QWNjZXNz
aW5nUmVmLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbn1cblxuLyoqXG4gKiBGYWN0
b3J5IG1ldGhvZCB0byBjcmVhdGUgYSBuZXcgUmVhY3QgZWxlbWVudC4gVGhpcyBubyBsb25nZXIg
YWRoZXJlcyB0b1xuICogdGhlIGNsYXNzIHBhdHRlcm4sIHNvIGRvIG5vdCB1c2UgbmV3IHRvIGNh
bGwgaXQuIEFsc28sIG5vIGluc3RhbmNlb2YgY2hlY2tcbiAqIHdpbGwgd29yay4gSW5zdGVhZCB0
ZXN0ICQkdHlwZW9mIGZpZWxkIGFnYWluc3QgU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpIHRv
IGNoZWNrXG4gKiBpZiBzb21ldGhpbmcgaXMgYSBSZWFjdCBFbGVtZW50LlxuICpcbiAqIEBwYXJh
bSB7Kn0gdHlwZVxuICogQHBhcmFtIHsqfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0g
cmVmXG4gKiBAcGFyYW0geyp9IHNlbGYgQSAqdGVtcG9yYXJ5KiBoZWxwZXIgdG8gZGV0ZWN0IHBs
YWNlcyB3aGVyZSBgdGhpc2AgaXNcbiAqIGRpZmZlcmVudCBmcm9tIHRoZSBgb3duZXJgIHdoZW4g
UmVhY3QuY3JlYXRlRWxlbWVudCBpcyBjYWxsZWQsIHNvIHRoYXQgd2VcbiAqIGNhbiB3YXJuLiBX
ZSB3YW50IHRvIGdldCByaWQgb2Ygb3duZXIgYW5kIHJlcGxhY2Ugc3RyaW5nIGByZWZgcyB3aXRo
IGFycm93XG4gKiBmdW5jdGlvbnMsIGFuZCBhcyBsb25nIGFzIGB0aGlzYCBhbmQgb3duZXIgYXJl
IHRoZSBzYW1lLCB0aGVyZSB3aWxsIGJlIG5vXG4gKiBjaGFuZ2UgaW4gYmVoYXZpb3IuXG4gKiBA
cGFyYW0geyp9IHNvdXJjZSBBbiBhbm5vdGF0aW9uIG9iamVjdCAoYWRkZWQgYnkgYSB0cmFuc3Bp
bGVyIG9yIG90aGVyd2lzZSlcbiAqIGluZGljYXRpbmcgZmlsZW5hbWUsIGxpbmUgbnVtYmVyLCBh
bmQvb3Igb3RoZXIgaW5mb3JtYXRpb24uXG4gKiBAcGFyYW0geyp9IG93bmVyXG4gKiBAcGFyYW0g
eyp9IHByb3BzXG4gKiBAaW50ZXJuYWxcbiAqL1xudmFyIFJlYWN0RWxlbWVudCA9IGZ1bmN0aW9u
ICh0eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBvd25lciwgcHJvcHMpIHtcbiAgdmFyIGVs
ZW1lbnQgPSB7XG4gICAgLy8gVGhpcyB0YWcgYWxsb3cgdXMgdG8gdW5pcXVlbHkgaWRlbnRpZnkg
dGhpcyBhcyBhIFJlYWN0IEVsZW1lbnRcbiAgICAkJHR5cGVvZjogUkVBQ1RfRUxFTUVOVF9UWVBF
LFxuXG4gICAgLy8gQnVpbHQtaW4gcHJvcGVydGllcyB0aGF0IGJlbG9uZyBvbiB0aGUgZWxlbWVu
dFxuICAgIHR5cGU6IHR5cGUsXG4gICAga2V5OiBrZXksXG4gICAgcmVmOiByZWYsXG4gICAgcHJv
cHM6IHByb3BzLFxuXG4gICAgLy8gUmVjb3JkIHRoZSBjb21wb25lbnQgcmVzcG9uc2libGUgZm9y
IGNyZWF0aW5nIHRoaXMgZWxlbWVudC5cbiAgICBfb3duZXI6IG93bmVyXG4gIH07XG5cbiAgaWYg
KGZhbHNlKSB7XG4gICAgLy8gVGhlIHZhbGlkYXRpb24gZmxhZyBpcyBjdXJyZW50bHkgbXV0YXRp
dmUuIFdlIHB1dCBpdCBvblxuICAgIC8vIGFuIGV4dGVybmFsIGJhY2tpbmcgc3RvcmUgc28gdGhh
dCB3ZSBjYW4gZnJlZXplIHRoZSB3aG9sZSBvYmplY3QuXG4gICAgLy8gVGhpcyBjYW4gYmUgcmVw
bGFjZWQgd2l0aCBhIFdlYWtNYXAgb25jZSB0aGV5IGFyZSBpbXBsZW1lbnRlZCBpblxuICAgIC8v
IGNvbW1vbmx5IHVzZWQgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzLlxuICAgIGVsZW1lbnQuX3N0
b3JlID0ge307XG5cbiAgICAvLyBUbyBtYWtlIGNvbXBhcmluZyBSZWFjdEVsZW1lbnRzIGVhc2ll
ciBmb3IgdGVzdGluZyBwdXJwb3Nlcywgd2UgbWFrZVxuICAgIC8vIHRoZSB2YWxpZGF0aW9uIGZs
YWcgbm9uLWVudW1lcmFibGUgKHdoZXJlIHBvc3NpYmxlLCB3aGljaCBzaG91bGRcbiAgICAvLyBp
bmNsdWRlIGV2ZXJ5IGVudmlyb25tZW50IHdlIHJ1biB0ZXN0cyBpbiksIHNvIHRoZSB0ZXN0IGZy
YW1ld29ya1xuICAgIC8vIGlnbm9yZXMgaXQuXG4gICAgaWYgKGNhbkRlZmluZVByb3BlcnR5KSB7
XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudC5fc3RvcmUsICd2YWxpZGF0ZWQn
LCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgIGVudW1lcmFibGU6IGZh
bHNlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGZhbHNlXG4gICAg
ICB9KTtcbiAgICAgIC8vIHNlbGYgYW5kIHNvdXJjZSBhcmUgREVWIG9ubHkgcHJvcGVydGllcy5c
biAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX3NlbGYnLCB7XG4gICAgICAg
IGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAg
ICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgIHZhbHVlOiBzZWxmXG4gICAgICB9KTtcbiAgICAg
IC8vIFR3byBlbGVtZW50cyBjcmVhdGVkIGluIHR3byBkaWZmZXJlbnQgcGxhY2VzIHNob3VsZCBi
ZSBjb25zaWRlcmVkXG4gICAgICAvLyBlcXVhbCBmb3IgdGVzdGluZyBwdXJwb3NlcyBhbmQgdGhl
cmVmb3JlIHdlIGhpZGUgaXQgZnJvbSBlbnVtZXJhdGlvbi5cbiAgICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShlbGVtZW50LCAnX3NvdXJjZScsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxz
ZSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxc
biAgICAgICAgdmFsdWU6IHNvdXJjZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVs
ZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCA9IGZhbHNlO1xuICAgICAgZWxlbWVudC5fc2VsZiA9IHNl
bGY7XG4gICAgICBlbGVtZW50Ll9zb3VyY2UgPSBzb3VyY2U7XG4gICAgfVxuICAgIGlmIChPYmpl
Y3QuZnJlZXplKSB7XG4gICAgICBPYmplY3QuZnJlZXplKGVsZW1lbnQucHJvcHMpO1xuICAgICAg
T2JqZWN0LmZyZWV6ZShlbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtc
bn07XG5cbi8qKlxuICogQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgUmVhY3RFbGVtZW50IG9mIHRo
ZSBnaXZlbiB0eXBlLlxuICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2Rv
Y3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0LmNyZWF0ZWVsZW1lbnRcbiAqL1xuUmVhY3RFbGVt
ZW50LmNyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbiAodHlwZSwgY29uZmlnLCBjaGlsZHJlbikge1xu
ICB2YXIgcHJvcE5hbWU7XG5cbiAgLy8gUmVzZXJ2ZWQgbmFtZXMgYXJlIGV4dHJhY3RlZFxuICB2
YXIgcHJvcHMgPSB7fTtcblxuICB2YXIga2V5ID0gbnVsbDtcbiAgdmFyIHJlZiA9IG51bGw7XG4g
IHZhciBzZWxmID0gbnVsbDtcbiAgdmFyIHNvdXJjZSA9IG51bGw7XG5cbiAgaWYgKGNvbmZpZyAh
PSBudWxsKSB7XG4gICAgaWYgKGhhc1ZhbGlkUmVmKGNvbmZpZykpIHtcbiAgICAgIHJlZiA9IGNv
bmZpZy5yZWY7XG4gICAgfVxuICAgIGlmIChoYXNWYWxpZEtleShjb25maWcpKSB7XG4gICAgICBr
ZXkgPSAnJyArIGNvbmZpZy5rZXk7XG4gICAgfVxuXG4gICAgc2VsZiA9IGNvbmZpZy5fX3NlbGYg
PT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb25maWcuX19zZWxmO1xuICAgIHNvdXJjZSA9IGNvbmZp
Zy5fX3NvdXJjZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNvbmZpZy5fX3NvdXJjZTtcbiAgICAv
LyBSZW1haW5pbmcgcHJvcGVydGllcyBhcmUgYWRkZWQgdG8gYSBuZXcgcHJvcHMgb2JqZWN0XG4g
ICAgZm9yIChwcm9wTmFtZSBpbiBjb25maWcpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5j
YWxsKGNvbmZpZywgcHJvcE5hbWUpICYmICFSRVNFUlZFRF9QUk9QUy5oYXNPd25Qcm9wZXJ0eShw
cm9wTmFtZSkpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXTtc
biAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBDaGlsZHJlbiBjYW4gYmUgbW9yZSB0aGFuIG9u
ZSBhcmd1bWVudCwgYW5kIHRob3NlIGFyZSB0cmFuc2ZlcnJlZCBvbnRvXG4gIC8vIHRoZSBuZXds
eSBhbGxvY2F0ZWQgcHJvcHMgb2JqZWN0LlxuICB2YXIgY2hpbGRyZW5MZW5ndGggPSBhcmd1bWVu
dHMubGVuZ3RoIC0gMjtcbiAgaWYgKGNoaWxkcmVuTGVuZ3RoID09PSAxKSB7XG4gICAgcHJvcHMu
Y2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgfSBlbHNlIGlmIChjaGlsZHJlbkxlbmd0aCA+IDEpIHtc
biAgICB2YXIgY2hpbGRBcnJheSA9IEFycmF5KGNoaWxkcmVuTGVuZ3RoKTtcbiAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkQXJyYXlbaV0g
PSBhcmd1bWVudHNbaSArIDJdO1xuICAgIH1cbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgIGlmIChP
YmplY3QuZnJlZXplKSB7XG4gICAgICAgIE9iamVjdC5mcmVlemUoY2hpbGRBcnJheSk7XG4gICAg
ICB9XG4gICAgfVxuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRBcnJheTtcbiAgfVxuXG4gIC8v
IFJlc29sdmUgZGVmYXVsdCBwcm9wc1xuICBpZiAodHlwZSAmJiB0eXBlLmRlZmF1bHRQcm9wcykg
e1xuICAgIHZhciBkZWZhdWx0UHJvcHMgPSB0eXBlLmRlZmF1bHRQcm9wcztcbiAgICBmb3IgKHBy
b3BOYW1lIGluIGRlZmF1bHRQcm9wcykge1xuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0g
dW5kZWZpbmVkKSB7XG4gICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGRlZmF1bHRQcm9wc1twcm9w
TmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChmYWxzZSkge1xuICAgIGlmIChrZXkg
fHwgcmVmKSB7XG4gICAgICBpZiAodHlwZW9mIHByb3BzLiQkdHlwZW9mID09PSAndW5kZWZpbmVk
JyB8fCBwcm9wcy4kJHR5cGVvZiAhPT0gUkVBQ1RfRUxFTUVOVF9UWVBFKSB7XG4gICAgICAgIHZh
ciBkaXNwbGF5TmFtZSA9IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nID8gdHlwZS5kaXNwbGF5
TmFtZSB8fCB0eXBlLm5hbWUgfHwgJ1Vua25vd24nIDogdHlwZTtcbiAgICAgICAgaWYgKGtleSkg
e1xuICAgICAgICAgIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFt
ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlZikge1xuICAgICAgICAgIGRlZmluZVJlZlBy
b3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH1c
biAgICB9XG4gIH1cbiAgcmV0dXJuIFJlYWN0RWxlbWVudCh0eXBlLCBrZXksIHJlZiwgc2VsZiwg
c291cmNlLCBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LCBwcm9wcyk7XG59O1xuXG4vKipcbiAq
IFJldHVybiBhIGZ1bmN0aW9uIHRoYXQgcHJvZHVjZXMgUmVhY3RFbGVtZW50cyBvZiBhIGdpdmVu
IHR5cGUuXG4gKiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy90b3At
bGV2ZWwtYXBpLmh0bWwjcmVhY3QuY3JlYXRlZmFjdG9yeVxuICovXG5SZWFjdEVsZW1lbnQuY3Jl
YXRlRmFjdG9yeSA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gIHZhciBmYWN0b3J5ID0gUmVhY3RFbGVt
ZW50LmNyZWF0ZUVsZW1lbnQuYmluZChudWxsLCB0eXBlKTtcbiAgLy8gRXhwb3NlIHRoZSB0eXBl
IG9uIHRoZSBmYWN0b3J5IGFuZCB0aGUgcHJvdG90eXBlIHNvIHRoYXQgaXQgY2FuIGJlXG4gIC8v
IGVhc2lseSBhY2Nlc3NlZCBvbiBlbGVtZW50cy4gRS5nLiBgPEZvbyAvPi50eXBlID09PSBGb29g
LlxuICAvLyBUaGlzIHNob3VsZCBub3QgYmUgbmFtZWQgYGNvbnN0cnVjdG9yYCBzaW5jZSB0aGlz
IG1heSBub3QgYmUgdGhlIGZ1bmN0aW9uXG4gIC8vIHRoYXQgY3JlYXRlZCB0aGUgZWxlbWVudCwg
YW5kIGl0IG1heSBub3QgZXZlbiBiZSBhIGNvbnN0cnVjdG9yLlxuICAvLyBMZWdhY3kgaG9vayBU
T0RPOiBXYXJuIGlmIHRoaXMgaXMgYWNjZXNzZWRcbiAgZmFjdG9yeS50eXBlID0gdHlwZTtcbiAg
cmV0dXJuIGZhY3Rvcnk7XG59O1xuXG5SZWFjdEVsZW1lbnQuY2xvbmVBbmRSZXBsYWNlS2V5ID0g
ZnVuY3Rpb24gKG9sZEVsZW1lbnQsIG5ld0tleSkge1xuICB2YXIgbmV3RWxlbWVudCA9IFJlYWN0
RWxlbWVudChvbGRFbGVtZW50LnR5cGUsIG5ld0tleSwgb2xkRWxlbWVudC5yZWYsIG9sZEVsZW1l
bnQuX3NlbGYsIG9sZEVsZW1lbnQuX3NvdXJjZSwgb2xkRWxlbWVudC5fb3duZXIsIG9sZEVsZW1l
bnQucHJvcHMpO1xuXG4gIHJldHVybiBuZXdFbGVtZW50O1xufTtcblxuLyoqXG4gKiBDbG9uZSBh
bmQgcmV0dXJuIGEgbmV3IFJlYWN0RWxlbWVudCB1c2luZyBlbGVtZW50IGFzIHRoZSBzdGFydGlu
ZyBwb2ludC5cbiAqIFNlZSBodHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL3Rv
cC1sZXZlbC1hcGkuaHRtbCNyZWFjdC5jbG9uZWVsZW1lbnRcbiAqL1xuUmVhY3RFbGVtZW50LmNs
b25lRWxlbWVudCA9IGZ1bmN0aW9uIChlbGVtZW50LCBjb25maWcsIGNoaWxkcmVuKSB7XG4gIHZh
ciBwcm9wTmFtZTtcblxuICAvLyBPcmlnaW5hbCBwcm9wcyBhcmUgY29waWVkXG4gIHZhciBwcm9w
cyA9IF9hc3NpZ24oe30sIGVsZW1lbnQucHJvcHMpO1xuXG4gIC8vIFJlc2VydmVkIG5hbWVzIGFy
ZSBleHRyYWN0ZWRcbiAgdmFyIGtleSA9IGVsZW1lbnQua2V5O1xuICB2YXIgcmVmID0gZWxlbWVu
dC5yZWY7XG4gIC8vIFNlbGYgaXMgcHJlc2VydmVkIHNpbmNlIHRoZSBvd25lciBpcyBwcmVzZXJ2
ZWQuXG4gIHZhciBzZWxmID0gZWxlbWVudC5fc2VsZjtcbiAgLy8gU291cmNlIGlzIHByZXNlcnZl
ZCBzaW5jZSBjbG9uZUVsZW1lbnQgaXMgdW5saWtlbHkgdG8gYmUgdGFyZ2V0ZWQgYnkgYVxuICAv
LyB0cmFuc3BpbGVyLCBhbmQgdGhlIG9yaWdpbmFsIHNvdXJjZSBpcyBwcm9iYWJseSBhIGJldHRl
ciBpbmRpY2F0b3Igb2YgdGhlXG4gIC8vIHRydWUgb3duZXIuXG4gIHZhciBzb3VyY2UgPSBlbGVt
ZW50Ll9zb3VyY2U7XG5cbiAgLy8gT3duZXIgd2lsbCBiZSBwcmVzZXJ2ZWQsIHVubGVzcyByZWYg
aXMgb3ZlcnJpZGRlblxuICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcblxuICBpZiAoY29u
ZmlnICE9IG51bGwpIHtcbiAgICBpZiAoaGFzVmFsaWRSZWYoY29uZmlnKSkge1xuICAgICAgLy8g
U2lsZW50bHkgc3RlYWwgdGhlIHJlZiBmcm9tIHRoZSBwYXJlbnQuXG4gICAgICByZWYgPSBjb25m
aWcucmVmO1xuICAgICAgb3duZXIgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50O1xuICAgIH1c
biAgICBpZiAoaGFzVmFsaWRLZXkoY29uZmlnKSkge1xuICAgICAga2V5ID0gJycgKyBjb25maWcu
a2V5O1xuICAgIH1cblxuICAgIC8vIFJlbWFpbmluZyBwcm9wZXJ0aWVzIG92ZXJyaWRlIGV4aXN0
aW5nIHByb3BzXG4gICAgdmFyIGRlZmF1bHRQcm9wcztcbiAgICBpZiAoZWxlbWVudC50eXBlICYm
IGVsZW1lbnQudHlwZS5kZWZhdWx0UHJvcHMpIHtcbiAgICAgIGRlZmF1bHRQcm9wcyA9IGVsZW1l
bnQudHlwZS5kZWZhdWx0UHJvcHM7XG4gICAgfVxuICAgIGZvciAocHJvcE5hbWUgaW4gY29uZmln
KSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIHByb3BOYW1lKSAmJiAh
UkVTRVJWRURfUFJPUFMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIGlmIChj
b25maWdbcHJvcE5hbWVdID09PSB1bmRlZmluZWQgJiYgZGVmYXVsdFByb3BzICE9PSB1bmRlZmlu
ZWQpIHtcbiAgICAgICAgICAvLyBSZXNvbHZlIGRlZmF1bHQgcHJvcHNcbiAgICAgICAgICBwcm9w
c1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgICB9IGVsc2Uge1xu
ICAgICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGNvbmZpZ1twcm9wTmFtZV07XG4gICAgICAgIH1c
biAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBDaGlsZHJlbiBjYW4gYmUgbW9yZSB0aGFuIG9u
ZSBhcmd1bWVudCwgYW5kIHRob3NlIGFyZSB0cmFuc2ZlcnJlZCBvbnRvXG4gIC8vIHRoZSBuZXds
eSBhbGxvY2F0ZWQgcHJvcHMgb2JqZWN0LlxuICB2YXIgY2hpbGRyZW5MZW5ndGggPSBhcmd1bWVu
dHMubGVuZ3RoIC0gMjtcbiAgaWYgKGNoaWxkcmVuTGVuZ3RoID09PSAxKSB7XG4gICAgcHJvcHMu
Y2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgfSBlbHNlIGlmIChjaGlsZHJlbkxlbmd0aCA+IDEpIHtc
biAgICB2YXIgY2hpbGRBcnJheSA9IEFycmF5KGNoaWxkcmVuTGVuZ3RoKTtcbiAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkQXJyYXlbaV0g
PSBhcmd1bWVudHNbaSArIDJdO1xuICAgIH1cbiAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkQXJy
YXk7XG4gIH1cblxuICByZXR1cm4gUmVhY3RFbGVtZW50KGVsZW1lbnQudHlwZSwga2V5LCByZWYs
IHNlbGYsIHNvdXJjZSwgb3duZXIsIHByb3BzKTtcbn07XG5cbi8qKlxuICogVmVyaWZpZXMgdGhl
IG9iamVjdCBpcyBhIFJlYWN0RWxlbWVudC5cbiAqIFNlZSBodHRwczovL2ZhY2Vib29rLmdpdGh1
Yi5pby9yZWFjdC9kb2NzL3RvcC1sZXZlbC1hcGkuaHRtbCNyZWFjdC5pc3ZhbGlkZWxlbWVudFxu
ICogQHBhcmFtIHs/b2JqZWN0fSBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYg
YG9iamVjdGAgaXMgYSB2YWxpZCBjb21wb25lbnQuXG4gKiBAZmluYWxcbiAqL1xuUmVhY3RFbGVt
ZW50LmlzVmFsaWRFbGVtZW50ID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICByZXR1cm4gdHlwZW9m
IG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsICYmIG9iamVjdC4kJHR5cGVv
ZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdEVs
ZW1lbnQ7XG5cbi8qKiovIH0pLFxuLyogMTUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4
cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAq
IENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJl
c2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJT
RC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290
IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBv
ZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBz
YW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuXG5cbnZhciBfcHJvZEludmFyaWFudCA9IF9fd2Vi
cGFja19yZXF1aXJlX18oMik7XG5cbnZhciBpbnZhcmlhbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KDApO1xuXG5mdW5jdGlvbiBjaGVja01hc2sodmFsdWUsIGJpdG1hc2spIHtcbiAgcmV0dXJuICh2
YWx1ZSAmIGJpdG1hc2spID09PSBiaXRtYXNrO1xufVxuXG52YXIgRE9NUHJvcGVydHlJbmplY3Rp
b24gPSB7XG4gIC8qKlxuICAgKiBNYXBwaW5nIGZyb20gbm9ybWFsaXplZCwgY2FtZWxjYXNlZCBw
cm9wZXJ0eSBuYW1lcyB0byBhIGNvbmZpZ3VyYXRpb24gdGhhdFxuICAgKiBzcGVjaWZpZXMgaG93
IHRoZSBhc3NvY2lhdGVkIERPTSBwcm9wZXJ0eSBzaG91bGQgYmUgYWNjZXNzZWQgb3IgcmVuZGVy
ZWQuXG4gICAqL1xuICBNVVNUX1VTRV9QUk9QRVJUWTogMHgxLFxuICBIQVNfQk9PTEVBTl9WQUxV
RTogMHg0LFxuICBIQVNfTlVNRVJJQ19WQUxVRTogMHg4LFxuICBIQVNfUE9TSVRJVkVfTlVNRVJJ
Q19WQUxVRTogMHgxMCB8IDB4OCxcbiAgSEFTX09WRVJMT0FERURfQk9PTEVBTl9WQUxVRTogMHgy
MCxcblxuICAvKipcbiAgICogSW5qZWN0IHNvbWUgc3BlY2lhbGl6ZWQga25vd2xlZGdlIGFib3V0
IHRoZSBET00uIFRoaXMgdGFrZXMgYSBjb25maWcgb2JqZWN0XG4gICAqIHdpdGggdGhlIGZvbGxv
d2luZyBwcm9wZXJ0aWVzOlxuICAgKlxuICAgKiBpc0N1c3RvbUF0dHJpYnV0ZTogZnVuY3Rpb24g
dGhhdCBnaXZlbiBhbiBhdHRyaWJ1dGUgbmFtZSB3aWxsIHJldHVybiB0cnVlXG4gICAqIGlmIGl0
IGNhbiBiZSBpbnNlcnRlZCBpbnRvIHRoZSBET00gdmVyYmF0aW0uIFVzZWZ1bCBmb3IgZGF0YS0q
IG9yIGFyaWEtKlxuICAgKiBhdHRyaWJ1dGVzIHdoZXJlIGl0J3MgaW1wb3NzaWJsZSB0byBlbnVt
ZXJhdGUgYWxsIG9mIHRoZSBwb3NzaWJsZVxuICAgKiBhdHRyaWJ1dGUgbmFtZXMsXG4gICAqXG4g
ICAqIFByb3BlcnRpZXM6IG9iamVjdCBtYXBwaW5nIERPTSBwcm9wZXJ0eSBuYW1lIHRvIG9uZSBv
ZiB0aGVcbiAgICogRE9NUHJvcGVydHlJbmplY3Rpb24gY29uc3RhbnRzIG9yIG51bGwuIElmIHlv
dXIgYXR0cmlidXRlIGlzbid0IGluIGhlcmUsXG4gICAqIGl0IHdvbid0IGdldCB3cml0dGVuIHRv
IHRoZSBET00uXG4gICAqXG4gICAqIERPTUF0dHJpYnV0ZU5hbWVzOiBvYmplY3QgbWFwcGluZyBS
ZWFjdCBhdHRyaWJ1dGUgbmFtZSB0byB0aGUgRE9NXG4gICAqIGF0dHJpYnV0ZSBuYW1lLiBBdHRy
aWJ1dGUgbmFtZXMgbm90IHNwZWNpZmllZCB1c2UgdGhlICoqbG93ZXJjYXNlKipcbiAgICogbm9y
bWFsaXplZCBuYW1lLlxuICAgKlxuICAgKiBET01BdHRyaWJ1dGVOYW1lc3BhY2VzOiBvYmplY3Qg
bWFwcGluZyBSZWFjdCBhdHRyaWJ1dGUgbmFtZSB0byB0aGUgRE9NXG4gICAqIGF0dHJpYnV0ZSBu
YW1lc3BhY2UgVVJMLiAoQXR0cmlidXRlIG5hbWVzIG5vdCBzcGVjaWZpZWQgdXNlIG5vIG5hbWVz
cGFjZS4pXG4gICAqXG4gICAqIERPTVByb3BlcnR5TmFtZXM6IHNpbWlsYXIgdG8gRE9NQXR0cmli
dXRlTmFtZXMgYnV0IGZvciBET00gcHJvcGVydGllcy5cbiAgICogUHJvcGVydHkgbmFtZXMgbm90
IHNwZWNpZmllZCB1c2UgdGhlIG5vcm1hbGl6ZWQgbmFtZS5cbiAgICpcbiAgICogRE9NTXV0YXRp
b25NZXRob2RzOiBQcm9wZXJ0aWVzIHRoYXQgcmVxdWlyZSBzcGVjaWFsIG11dGF0aW9uIG1ldGhv
ZHMuIElmXG4gICAqIGB2YWx1ZWAgaXMgdW5kZWZpbmVkLCB0aGUgbXV0YXRpb24gbWV0aG9kIHNo
b3VsZCB1bnNldCB0aGUgcHJvcGVydHkuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBkb21Q
cm9wZXJ0eUNvbmZpZyB0aGUgY29uZmlnIGFzIGRlc2NyaWJlZCBhYm92ZS5cbiAgICovXG4gIGlu
amVjdERPTVByb3BlcnR5Q29uZmlnOiBmdW5jdGlvbiAoZG9tUHJvcGVydHlDb25maWcpIHtcbiAg
ICB2YXIgSW5qZWN0aW9uID0gRE9NUHJvcGVydHlJbmplY3Rpb247XG4gICAgdmFyIFByb3BlcnRp
ZXMgPSBkb21Qcm9wZXJ0eUNvbmZpZy5Qcm9wZXJ0aWVzIHx8IHt9O1xuICAgIHZhciBET01BdHRy
aWJ1dGVOYW1lc3BhY2VzID0gZG9tUHJvcGVydHlDb25maWcuRE9NQXR0cmlidXRlTmFtZXNwYWNl
cyB8fCB7fTtcbiAgICB2YXIgRE9NQXR0cmlidXRlTmFtZXMgPSBkb21Qcm9wZXJ0eUNvbmZpZy5E
T01BdHRyaWJ1dGVOYW1lcyB8fCB7fTtcbiAgICB2YXIgRE9NUHJvcGVydHlOYW1lcyA9IGRvbVBy
b3BlcnR5Q29uZmlnLkRPTVByb3BlcnR5TmFtZXMgfHwge307XG4gICAgdmFyIERPTU11dGF0aW9u
TWV0aG9kcyA9IGRvbVByb3BlcnR5Q29uZmlnLkRPTU11dGF0aW9uTWV0aG9kcyB8fCB7fTtcblxu
ICAgIGlmIChkb21Qcm9wZXJ0eUNvbmZpZy5pc0N1c3RvbUF0dHJpYnV0ZSkge1xuICAgICAgRE9N
UHJvcGVydHkuX2lzQ3VzdG9tQXR0cmlidXRlRnVuY3Rpb25zLnB1c2goZG9tUHJvcGVydHlDb25m
aWcuaXNDdXN0b21BdHRyaWJ1dGUpO1xuICAgIH1cblxuICAgIGZvciAodmFyIHByb3BOYW1lIGlu
IFByb3BlcnRpZXMpIHtcbiAgICAgICEhRE9NUHJvcGVydHkucHJvcGVydGllcy5oYXNPd25Qcm9w
ZXJ0eShwcm9wTmFtZSkgPyAgZmFsc2UgPyBpbnZhcmlhbnQoZmFsc2UsICdpbmplY3RET01Qcm9w
ZXJ0eUNvbmZpZyguLi4pOiBZb3VcXCdyZSB0cnlpbmcgdG8gaW5qZWN0IERPTSBwcm9wZXJ0eSBc
XCclc1xcJyB3aGljaCBoYXMgYWxyZWFkeSBiZWVuIGluamVjdGVkLiBZb3UgbWF5IGJlIGFjY2lk
ZW50YWxseSBpbmplY3RpbmcgdGhlIHNhbWUgRE9NIHByb3BlcnR5IGNvbmZpZyB0d2ljZSwgb3Ig
eW91IG1heSBiZSBpbmplY3RpbmcgdHdvIGNvbmZpZ3MgdGhhdCBoYXZlIGNvbmZsaWN0aW5nIHBy
b3BlcnR5IG5hbWVzLicsIHByb3BOYW1lKSA6IF9wcm9kSW52YXJpYW50KCc0OCcsIHByb3BOYW1l
KSA6IHZvaWQgMDtcblxuICAgICAgdmFyIGxvd2VyQ2FzZWQgPSBwcm9wTmFtZS50b0xvd2VyQ2Fz
ZSgpO1xuICAgICAgdmFyIHByb3BDb25maWcgPSBQcm9wZXJ0aWVzW3Byb3BOYW1lXTtcblxuICAg
ICAgdmFyIHByb3BlcnR5SW5mbyA9IHtcbiAgICAgICAgYXR0cmlidXRlTmFtZTogbG93ZXJDYXNl
ZCxcbiAgICAgICAgYXR0cmlidXRlTmFtZXNwYWNlOiBudWxsLFxuICAgICAgICBwcm9wZXJ0eU5h
bWU6IHByb3BOYW1lLFxuICAgICAgICBtdXRhdGlvbk1ldGhvZDogbnVsbCxcblxuICAgICAgICBt
dXN0VXNlUHJvcGVydHk6IGNoZWNrTWFzayhwcm9wQ29uZmlnLCBJbmplY3Rpb24uTVVTVF9VU0Vf
UFJPUEVSVFkpLFxuICAgICAgICBoYXNCb29sZWFuVmFsdWU6IGNoZWNrTWFzayhwcm9wQ29uZmln
LCBJbmplY3Rpb24uSEFTX0JPT0xFQU5fVkFMVUUpLFxuICAgICAgICBoYXNOdW1lcmljVmFsdWU6
IGNoZWNrTWFzayhwcm9wQ29uZmlnLCBJbmplY3Rpb24uSEFTX05VTUVSSUNfVkFMVUUpLFxuICAg
ICAgICBoYXNQb3NpdGl2ZU51bWVyaWNWYWx1ZTogY2hlY2tNYXNrKHByb3BDb25maWcsIEluamVj
dGlvbi5IQVNfUE9TSVRJVkVfTlVNRVJJQ19WQUxVRSksXG4gICAgICAgIGhhc092ZXJsb2FkZWRC
b29sZWFuVmFsdWU6IGNoZWNrTWFzayhwcm9wQ29uZmlnLCBJbmplY3Rpb24uSEFTX09WRVJMT0FE
RURfQk9PTEVBTl9WQUxVRSlcbiAgICAgIH07XG4gICAgICAhKHByb3BlcnR5SW5mby5oYXNCb29s
ZWFuVmFsdWUgKyBwcm9wZXJ0eUluZm8uaGFzTnVtZXJpY1ZhbHVlICsgcHJvcGVydHlJbmZvLmhh
c092ZXJsb2FkZWRCb29sZWFuVmFsdWUgPD0gMSkgPyAgZmFsc2UgPyBpbnZhcmlhbnQoZmFsc2Us
ICdET01Qcm9wZXJ0eTogVmFsdWUgY2FuIGJlIG9uZSBvZiBib29sZWFuLCBvdmVybG9hZGVkIGJv
b2xlYW4sIG9yIG51bWVyaWMgdmFsdWUsIGJ1dCBub3QgYSBjb21iaW5hdGlvbjogJXMnLCBwcm9w
TmFtZSkgOiBfcHJvZEludmFyaWFudCgnNTAnLCBwcm9wTmFtZSkgOiB2b2lkIDA7XG5cbiAgICAg
IGlmIChmYWxzZSkge1xuICAgICAgICBET01Qcm9wZXJ0eS5nZXRQb3NzaWJsZVN0YW5kYXJkTmFt
ZVtsb3dlckNhc2VkXSA9IHByb3BOYW1lO1xuICAgICAgfVxuXG4gICAgICBpZiAoRE9NQXR0cmli
dXRlTmFtZXMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIHZhciBhdHRyaWJ1
dGVOYW1lID0gRE9NQXR0cmlidXRlTmFtZXNbcHJvcE5hbWVdO1xuICAgICAgICBwcm9wZXJ0eUlu
Zm8uYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZU5hbWU7XG4gICAgICAgIGlmIChmYWxzZSkge1xu
ICAgICAgICAgIERPTVByb3BlcnR5LmdldFBvc3NpYmxlU3RhbmRhcmROYW1lW2F0dHJpYnV0ZU5h
bWVdID0gcHJvcE5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKERPTUF0dHJp
YnV0ZU5hbWVzcGFjZXMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIHByb3Bl
cnR5SW5mby5hdHRyaWJ1dGVOYW1lc3BhY2UgPSBET01BdHRyaWJ1dGVOYW1lc3BhY2VzW3Byb3BO
YW1lXTtcbiAgICAgIH1cblxuICAgICAgaWYgKERPTVByb3BlcnR5TmFtZXMuaGFzT3duUHJvcGVy
dHkocHJvcE5hbWUpKSB7XG4gICAgICAgIHByb3BlcnR5SW5mby5wcm9wZXJ0eU5hbWUgPSBET01Q
cm9wZXJ0eU5hbWVzW3Byb3BOYW1lXTtcbiAgICAgIH1cblxuICAgICAgaWYgKERPTU11dGF0aW9u
TWV0aG9kcy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgcHJvcGVydHlJbmZv
Lm11dGF0aW9uTWV0aG9kID0gRE9NTXV0YXRpb25NZXRob2RzW3Byb3BOYW1lXTtcbiAgICAgIH1c
blxuICAgICAgRE9NUHJvcGVydHkucHJvcGVydGllc1twcm9wTmFtZV0gPSBwcm9wZXJ0eUluZm87
XG4gICAgfVxuICB9XG59O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG52YXIgQVRU
UklCVVRFX05BTUVfU1RBUlRfQ0hBUiA9ICc6QS1aX2EtelxcXFx1MDBDMC1cXFxcdTAwRDZcXFxc
dTAwRDgtXFxcXHUwMEY2XFxcXHUwMEY4LVxcXFx1MDJGRlxcXFx1MDM3MC1cXFxcdTAzN0RcXFxc
dTAzN0YtXFxcXHUxRkZGXFxcXHUyMDBDLVxcXFx1MjAwRFxcXFx1MjA3MC1cXFxcdTIxOEZcXFxc
dTJDMDAtXFxcXHUyRkVGXFxcXHUzMDAxLVxcXFx1RDdGRlxcXFx1RjkwMC1cXFxcdUZEQ0ZcXFxc
dUZERjAtXFxcXHVGRkZEJztcbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiAqL1xuXG4vKipcbiAq
IERPTVByb3BlcnR5IGV4cG9ydHMgbG9va3VwIG9iamVjdHMgdGhhdCBjYW4gYmUgdXNlZCBsaWtl
IGZ1bmN0aW9uczpcbiAqXG4gKiAgID4gRE9NUHJvcGVydHkuaXNWYWxpZFsnaWQnXVxuICogICB0
cnVlXG4gKiAgID4gRE9NUHJvcGVydHkuaXNWYWxpZFsnZm9vYmFyJ11cbiAqICAgdW5kZWZpbmVk
XG4gKlxuICogQWx0aG91Z2ggdGhpcyBtYXkgYmUgY29uZnVzaW5nLCBpdCBwZXJmb3JtcyBiZXR0
ZXIgaW4gZ2VuZXJhbC5cbiAqXG4gKiBAc2VlIGh0dHA6Ly9qc3BlcmYuY29tL2tleS1leGlzdHNc
biAqIEBzZWUgaHR0cDovL2pzcGVyZi5jb20va2V5LW1pc3NpbmdcbiAqL1xudmFyIERPTVByb3Bl
cnR5ID0ge1xuICBJRF9BVFRSSUJVVEVfTkFNRTogJ2RhdGEtcmVhY3RpZCcsXG4gIFJPT1RfQVRU
UklCVVRFX05BTUU6ICdkYXRhLXJlYWN0cm9vdCcsXG5cbiAgQVRUUklCVVRFX05BTUVfU1RBUlRf
Q0hBUjogQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUixcbiAgQVRUUklCVVRFX05BTUVfQ0hBUjog
QVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUiArICdcXFxcLS4wLTlcXFxcdTAwQjdcXFxcdTAzMDAt
XFxcXHUwMzZGXFxcXHUyMDNGLVxcXFx1MjA0MCcsXG5cbiAgLyoqXG4gICAqIE1hcCBmcm9tIHBy
b3BlcnR5IFwic3RhbmRhcmQgbmFtZVwiIHRvIGFuIG9iamVjdCB3aXRoIGluZm8gYWJvdXQgaG93
IHRvIHNldFxuICAgKiB0aGUgcHJvcGVydHkgaW4gdGhlIERPTS4gRWFjaCBvYmplY3QgY29udGFp
bnM6XG4gICAqXG4gICAqIGF0dHJpYnV0ZU5hbWU6XG4gICAqICAgVXNlZCB3aGVuIHJlbmRlcmlu
ZyBtYXJrdXAgb3Igd2l0aCBgKkF0dHJpYnV0ZSgpYC5cbiAgICogYXR0cmlidXRlTmFtZXNwYWNl
XG4gICAqIHByb3BlcnR5TmFtZTpcbiAgICogICBVc2VkIG9uIERPTSBub2RlIGluc3RhbmNlcy4g
KFRoaXMgaW5jbHVkZXMgcHJvcGVydGllcyB0aGF0IG11dGF0ZSBkdWUgdG9cbiAgICogICBleHRl
cm5hbCBmYWN0b3JzLilcbiAgICogbXV0YXRpb25NZXRob2Q6XG4gICAqICAgSWYgbm9uLW51bGws
IHVzZWQgaW5zdGVhZCBvZiB0aGUgcHJvcGVydHkgb3IgYHNldEF0dHJpYnV0ZSgpYCBhZnRlclxu
ICAgKiAgIGluaXRpYWwgcmVuZGVyLlxuICAgKiBtdXN0VXNlUHJvcGVydHk6XG4gICAqICAgV2hl
dGhlciB0aGUgcHJvcGVydHkgbXVzdCBiZSBhY2Nlc3NlZCBhbmQgbXV0YXRlZCBhcyBhbiBvYmpl
Y3QgcHJvcGVydHkuXG4gICAqIGhhc0Jvb2xlYW5WYWx1ZTpcbiAgICogICBXaGV0aGVyIHRoZSBw
cm9wZXJ0eSBzaG91bGQgYmUgcmVtb3ZlZCB3aGVuIHNldCB0byBhIGZhbHNleSB2YWx1ZS5cbiAg
ICogaGFzTnVtZXJpY1ZhbHVlOlxuICAgKiAgIFdoZXRoZXIgdGhlIHByb3BlcnR5IG11c3QgYmUg
bnVtZXJpYyBvciBwYXJzZSBhcyBhIG51bWVyaWMgYW5kIHNob3VsZCBiZVxuICAgKiAgIHJlbW92
ZWQgd2hlbiBzZXQgdG8gYSBmYWxzZXkgdmFsdWUuXG4gICAqIGhhc1Bvc2l0aXZlTnVtZXJpY1Zh
bHVlOlxuICAgKiAgIFdoZXRoZXIgdGhlIHByb3BlcnR5IG11c3QgYmUgcG9zaXRpdmUgbnVtZXJp
YyBvciBwYXJzZSBhcyBhIHBvc2l0aXZlXG4gICAqICAgbnVtZXJpYyBhbmQgc2hvdWxkIGJlIHJl
bW92ZWQgd2hlbiBzZXQgdG8gYSBmYWxzZXkgdmFsdWUuXG4gICAqIGhhc092ZXJsb2FkZWRCb29s
ZWFuVmFsdWU6XG4gICAqICAgV2hldGhlciB0aGUgcHJvcGVydHkgY2FuIGJlIHVzZWQgYXMgYSBm
bGFnIGFzIHdlbGwgYXMgd2l0aCBhIHZhbHVlLlxuICAgKiAgIFJlbW92ZWQgd2hlbiBzdHJpY3Rs
eSBlcXVhbCB0byBmYWxzZTsgcHJlc2VudCB3aXRob3V0IGEgdmFsdWUgd2hlblxuICAgKiAgIHN0
cmljdGx5IGVxdWFsIHRvIHRydWU7IHByZXNlbnQgd2l0aCBhIHZhbHVlIG90aGVyd2lzZS5cbiAg
ICovXG4gIHByb3BlcnRpZXM6IHt9LFxuXG4gIC8qKlxuICAgKiBNYXBwaW5nIGZyb20gbG93ZXJj
YXNlIHByb3BlcnR5IG5hbWVzIHRvIHRoZSBwcm9wZXJseSBjYXNlZCB2ZXJzaW9uLCB1c2VkXG4g
ICAqIHRvIHdhcm4gaW4gdGhlIGNhc2Ugb2YgbWlzc2luZyBwcm9wZXJ0aWVzLiBBdmFpbGFibGUg
b25seSBpbiBfX0RFVl9fLlxuICAgKlxuICAgKiBhdXRvZm9jdXMgaXMgcHJlZGVmaW5lZCwgYmVj
YXVzZSBhZGRpbmcgaXQgdG8gdGhlIHByb3BlcnR5IHdoaXRlbGlzdFxuICAgKiBjYXVzZXMgdW5p
bnRlbmRlZCBzaWRlIGVmZmVjdHMuXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xu
ICBnZXRQb3NzaWJsZVN0YW5kYXJkTmFtZTogIGZhbHNlID8geyBhdXRvZm9jdXM6ICdhdXRvRm9j
dXMnIH0gOiBudWxsLFxuXG4gIC8qKlxuICAgKiBBbGwgb2YgdGhlIGlzQ3VzdG9tQXR0cmlidXRl
KCkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIGluamVjdGVkLlxuICAgKi9cbiAgX2lzQ3VzdG9t
QXR0cmlidXRlRnVuY3Rpb25zOiBbXSxcblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgYSBw
cm9wZXJ0eSBuYW1lIGlzIGEgY3VzdG9tIGF0dHJpYnV0ZS5cbiAgICogQG1ldGhvZFxuICAgKi9c
biAgaXNDdXN0b21BdHRyaWJ1dGU6IGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lKSB7XG4gICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBET01Qcm9wZXJ0eS5faXNDdXN0b21BdHRyaWJ1dGVGdW5jdGlvbnMu
bGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpc0N1c3RvbUF0dHJpYnV0ZUZuID0gRE9NUHJvcGVy
dHkuX2lzQ3VzdG9tQXR0cmlidXRlRnVuY3Rpb25zW2ldO1xuICAgICAgaWYgKGlzQ3VzdG9tQXR0
cmlidXRlRm4oYXR0cmlidXRlTmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9
XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcblxuICBpbmplY3Rpb246IERPTVByb3Bl
cnR5SW5qZWN0aW9uXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IERPTVByb3BlcnR5O1xuXG4vKioq
LyB9KSxcbi8qIDE2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBh
Y2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAx
My1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4g
KiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5z
ZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2Yg
dGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0
cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3Rvcnku
XG4gKlxuICovXG5cblxuXG52YXIgUmVhY3RSZWYgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyNyk7
XG52YXIgUmVhY3RJbnN0cnVtZW50YXRpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpO1xuXG52
YXIgd2FybmluZyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG5cbi8qKlxuICogSGVscGVyIHRv
IGNhbGwgUmVhY3RSZWYuYXR0YWNoUmVmcyB3aXRoIHRoaXMgY29tcG9zaXRlIGNvbXBvbmVudCwg
c3BsaXQgb3V0XG4gKiB0byBhdm9pZCBhbGxvY2F0aW9ucyBpbiB0aGUgdHJhbnNhY3Rpb24gbW91
bnQtcmVhZHkgcXVldWUuXG4gKi9cbmZ1bmN0aW9uIGF0dGFjaFJlZnMoKSB7XG4gIFJlYWN0UmVm
LmF0dGFjaFJlZnModGhpcywgdGhpcy5fY3VycmVudEVsZW1lbnQpO1xufVxuXG52YXIgUmVhY3RS
ZWNvbmNpbGVyID0ge1xuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIGNvbXBvbmVudCwgcmVu
ZGVycyBtYXJrdXAsIGFuZCByZWdpc3RlcnMgZXZlbnQgbGlzdGVuZXJzLlxuICAgKlxuICAgKiBA
cGFyYW0ge1JlYWN0Q29tcG9uZW50fSBpbnRlcm5hbEluc3RhbmNlXG4gICAqIEBwYXJhbSB7UmVh
Y3RSZWNvbmNpbGVUcmFuc2FjdGlvbnxSZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9ufSB0
cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gez9vYmplY3R9IHRoZSBjb250YWluaW5nIGhvc3QgY29t
cG9uZW50IGluc3RhbmNlXG4gICAqIEBwYXJhbSB7P29iamVjdH0gaW5mbyBhYm91dCB0aGUgaG9z
dCBjb250YWluZXJcbiAgICogQHJldHVybiB7P3N0cmluZ30gUmVuZGVyZWQgbWFya3VwIHRvIGJl
IGluc2VydGVkIGludG8gdGhlIERPTS5cbiAgICogQGZpbmFsXG4gICAqIEBpbnRlcm5hbFxuICAg
Ki9cbiAgbW91bnRDb21wb25lbnQ6IGZ1bmN0aW9uIChpbnRlcm5hbEluc3RhbmNlLCB0cmFuc2Fj
dGlvbiwgaG9zdFBhcmVudCwgaG9zdENvbnRhaW5lckluZm8sIGNvbnRleHQsIHBhcmVudERlYnVn
SUQpIC8vIDAgaW4gcHJvZHVjdGlvbiBhbmQgZm9yIHJvb3RzXG4gIHtcbiAgICBpZiAoZmFsc2Up
IHtcbiAgICAgIGlmIChpbnRlcm5hbEluc3RhbmNlLl9kZWJ1Z0lEICE9PSAwKSB7XG4gICAgICAg
IFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vbkJlZm9yZU1vdW50Q29tcG9uZW50KGlu
dGVybmFsSW5zdGFuY2UuX2RlYnVnSUQsIGludGVybmFsSW5zdGFuY2UuX2N1cnJlbnRFbGVtZW50
LCBwYXJlbnREZWJ1Z0lEKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIG1hcmt1cCA9IGludGVy
bmFsSW5zdGFuY2UubW91bnRDb21wb25lbnQodHJhbnNhY3Rpb24sIGhvc3RQYXJlbnQsIGhvc3RD
b250YWluZXJJbmZvLCBjb250ZXh0LCBwYXJlbnREZWJ1Z0lEKTtcbiAgICBpZiAoaW50ZXJuYWxJ
bnN0YW5jZS5fY3VycmVudEVsZW1lbnQgJiYgaW50ZXJuYWxJbnN0YW5jZS5fY3VycmVudEVsZW1l
bnQucmVmICE9IG51bGwpIHtcbiAgICAgIHRyYW5zYWN0aW9uLmdldFJlYWN0TW91bnRSZWFkeSgp
LmVucXVldWUoYXR0YWNoUmVmcywgaW50ZXJuYWxJbnN0YW5jZSk7XG4gICAgfVxuICAgIGlmIChm
YWxzZSkge1xuICAgICAgaWYgKGludGVybmFsSW5zdGFuY2UuX2RlYnVnSUQgIT09IDApIHtcbiAg
ICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uTW91bnRDb21wb25lbnQoaW50
ZXJuYWxJbnN0YW5jZS5fZGVidWdJRCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXJr
dXA7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSB2YWx1ZSB0aGF0IGNhbiBiZSBwYXNz
ZWQgdG9cbiAgICogUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudC5yZXBsYWNlTm9kZVdpdGhNYXJr
dXAuXG4gICAqL1xuICBnZXRIb3N0Tm9kZTogZnVuY3Rpb24gKGludGVybmFsSW5zdGFuY2UpIHtc
biAgICByZXR1cm4gaW50ZXJuYWxJbnN0YW5jZS5nZXRIb3N0Tm9kZSgpO1xuICB9LFxuXG4gIC8q
KlxuICAgKiBSZWxlYXNlcyBhbnkgcmVzb3VyY2VzIGFsbG9jYXRlZCBieSBgbW91bnRDb21wb25l
bnRgLlxuICAgKlxuICAgKiBAZmluYWxcbiAgICogQGludGVybmFsXG4gICAqL1xuICB1bm1vdW50
Q29tcG9uZW50OiBmdW5jdGlvbiAoaW50ZXJuYWxJbnN0YW5jZSwgc2FmZWx5KSB7XG4gICAgaWYg
KGZhbHNlKSB7XG4gICAgICBpZiAoaW50ZXJuYWxJbnN0YW5jZS5fZGVidWdJRCAhPT0gMCkge1xu
ICAgICAgICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25CZWZvcmVVbm1vdW50Q29t
cG9uZW50KGludGVybmFsSW5zdGFuY2UuX2RlYnVnSUQpO1xuICAgICAgfVxuICAgIH1cbiAgICBS
ZWFjdFJlZi5kZXRhY2hSZWZzKGludGVybmFsSW5zdGFuY2UsIGludGVybmFsSW5zdGFuY2UuX2N1
cnJlbnRFbGVtZW50KTtcbiAgICBpbnRlcm5hbEluc3RhbmNlLnVubW91bnRDb21wb25lbnQoc2Fm
ZWx5KTtcbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgIGlmIChpbnRlcm5hbEluc3RhbmNlLl9kZWJ1
Z0lEICE9PSAwKSB7XG4gICAgICAgIFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vblVu
bW91bnRDb21wb25lbnQoaW50ZXJuYWxJbnN0YW5jZS5fZGVidWdJRCk7XG4gICAgICB9XG4gICAg
fVxuICB9LFxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYSBjb21wb25lbnQgdXNpbmcgYSBuZXcgZWxl
bWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gaW50ZXJuYWxJbnN0YW5j
ZVxuICAgKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gbmV4dEVsZW1lbnRcbiAgICogQHBhcmFtIHtS
ZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge29iamVj
dH0gY29udGV4dFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHJlY2VpdmVDb21wb25lbnQ6IGZ1
bmN0aW9uIChpbnRlcm5hbEluc3RhbmNlLCBuZXh0RWxlbWVudCwgdHJhbnNhY3Rpb24sIGNvbnRl
eHQpIHtcbiAgICB2YXIgcHJldkVsZW1lbnQgPSBpbnRlcm5hbEluc3RhbmNlLl9jdXJyZW50RWxl
bWVudDtcblxuICAgIGlmIChuZXh0RWxlbWVudCA9PT0gcHJldkVsZW1lbnQgJiYgY29udGV4dCA9
PT0gaW50ZXJuYWxJbnN0YW5jZS5fY29udGV4dCkge1xuICAgICAgLy8gU2luY2UgZWxlbWVudHMg
YXJlIGltbXV0YWJsZSBhZnRlciB0aGUgb3duZXIgaXMgcmVuZGVyZWQsXG4gICAgICAvLyB3ZSBj
YW4gZG8gYSBjaGVhcCBpZGVudGl0eSBjb21wYXJlIGhlcmUgdG8gZGV0ZXJtaW5lIGlmIHRoaXMg
aXMgYVxuICAgICAgLy8gc3VwZXJmbHVvdXMgcmVjb25jaWxlLiBJdCdzIHBvc3NpYmxlIGZvciBz
dGF0ZSB0byBiZSBtdXRhYmxlIGJ1dCBzdWNoXG4gICAgICAvLyBjaGFuZ2Ugc2hvdWxkIHRyaWdn
ZXIgYW4gdXBkYXRlIG9mIHRoZSBvd25lciB3aGljaCB3b3VsZCByZWNyZWF0ZVxuICAgICAgLy8g
dGhlIGVsZW1lbnQuIFdlIGV4cGxpY2l0bHkgY2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2YgYW4g
b3duZXIgc2luY2VcbiAgICAgIC8vIGl0J3MgcG9zc2libGUgZm9yIGFuIGVsZW1lbnQgY3JlYXRl
ZCBvdXRzaWRlIGEgY29tcG9zaXRlIHRvIGJlXG4gICAgICAvLyBkZWVwbHkgbXV0YXRlZCBhbmQg
cmV1c2VkLlxuXG4gICAgICAvLyBUT0RPOiBCYWlsaW5nIG91dCBlYXJseSBpcyBqdXN0IGEgcGVy
ZiBvcHRpbWl6YXRpb24gcmlnaHQ/XG4gICAgICAvLyBUT0RPOiBSZW1vdmluZyB0aGUgcmV0dXJu
IHN0YXRlbWVudCBzaG91bGQgYWZmZWN0IGNvcnJlY3RuZXNzP1xuICAgICAgcmV0dXJuO1xuICAg
IH1cblxuICAgIGlmIChmYWxzZSkge1xuICAgICAgaWYgKGludGVybmFsSW5zdGFuY2UuX2RlYnVn
SUQgIT09IDApIHtcbiAgICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uQmVm
b3JlVXBkYXRlQ29tcG9uZW50KGludGVybmFsSW5zdGFuY2UuX2RlYnVnSUQsIG5leHRFbGVtZW50
KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmVmc0NoYW5nZWQgPSBSZWFjdFJlZi5zaG91
bGRVcGRhdGVSZWZzKHByZXZFbGVtZW50LCBuZXh0RWxlbWVudCk7XG5cbiAgICBpZiAocmVmc0No
YW5nZWQpIHtcbiAgICAgIFJlYWN0UmVmLmRldGFjaFJlZnMoaW50ZXJuYWxJbnN0YW5jZSwgcHJl
dkVsZW1lbnQpO1xuICAgIH1cblxuICAgIGludGVybmFsSW5zdGFuY2UucmVjZWl2ZUNvbXBvbmVu
dChuZXh0RWxlbWVudCwgdHJhbnNhY3Rpb24sIGNvbnRleHQpO1xuXG4gICAgaWYgKHJlZnNDaGFu
Z2VkICYmIGludGVybmFsSW5zdGFuY2UuX2N1cnJlbnRFbGVtZW50ICYmIGludGVybmFsSW5zdGFu
Y2UuX2N1cnJlbnRFbGVtZW50LnJlZiAhPSBudWxsKSB7XG4gICAgICB0cmFuc2FjdGlvbi5nZXRS
ZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKGF0dGFjaFJlZnMsIGludGVybmFsSW5zdGFuY2UpO1xu
ICAgIH1cblxuICAgIGlmIChmYWxzZSkge1xuICAgICAgaWYgKGludGVybmFsSW5zdGFuY2UuX2Rl
YnVnSUQgIT09IDApIHtcbiAgICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9u
VXBkYXRlQ29tcG9uZW50KGludGVybmFsSW5zdGFuY2UuX2RlYnVnSUQpO1xuICAgICAgfVxuICAg
IH1cbiAgfSxcblxuICAvKipcbiAgICogRmx1c2ggYW55IGRpcnR5IGNoYW5nZXMgaW4gYSBjb21w
b25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGludGVybmFsSW5zdGFu
Y2VcbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxu
ICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHBlcmZvcm1VcGRhdGVJZk5lY2Vzc2FyeTogZnVuY3Rp
b24gKGludGVybmFsSW5zdGFuY2UsIHRyYW5zYWN0aW9uLCB1cGRhdGVCYXRjaE51bWJlcikge1xu
ICAgIGlmIChpbnRlcm5hbEluc3RhbmNlLl91cGRhdGVCYXRjaE51bWJlciAhPT0gdXBkYXRlQmF0
Y2hOdW1iZXIpIHtcbiAgICAgIC8vIFRoZSBjb21wb25lbnQncyBlbnF1ZXVlZCBiYXRjaCBudW1i
ZXIgc2hvdWxkIGFsd2F5cyBiZSB0aGUgY3VycmVudFxuICAgICAgLy8gYmF0Y2ggb3IgdGhlIGZv
bGxvd2luZyBvbmUuXG4gICAgICAgZmFsc2UgPyB3YXJuaW5nKGludGVybmFsSW5zdGFuY2UuX3Vw
ZGF0ZUJhdGNoTnVtYmVyID09IG51bGwgfHwgaW50ZXJuYWxJbnN0YW5jZS5fdXBkYXRlQmF0Y2hO
dW1iZXIgPT09IHVwZGF0ZUJhdGNoTnVtYmVyICsgMSwgJ3BlcmZvcm1VcGRhdGVJZk5lY2Vzc2Fy
eTogVW5leHBlY3RlZCBiYXRjaCBudW1iZXIgKGN1cnJlbnQgJXMsICcgKyAncGVuZGluZyAlcykn
LCB1cGRhdGVCYXRjaE51bWJlciwgaW50ZXJuYWxJbnN0YW5jZS5fdXBkYXRlQmF0Y2hOdW1iZXIp
IDogdm9pZCAwO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZmFsc2UpIHtcbiAgICAg
IGlmIChpbnRlcm5hbEluc3RhbmNlLl9kZWJ1Z0lEICE9PSAwKSB7XG4gICAgICAgIFJlYWN0SW5z
dHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vbkJlZm9yZVVwZGF0ZUNvbXBvbmVudChpbnRlcm5hbElu
c3RhbmNlLl9kZWJ1Z0lELCBpbnRlcm5hbEluc3RhbmNlLl9jdXJyZW50RWxlbWVudCk7XG4gICAg
ICB9XG4gICAgfVxuICAgIGludGVybmFsSW5zdGFuY2UucGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5
KHRyYW5zYWN0aW9uKTtcbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgIGlmIChpbnRlcm5hbEluc3Rh
bmNlLl9kZWJ1Z0lEICE9PSAwKSB7XG4gICAgICAgIFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVn
VG9vbC5vblVwZGF0ZUNvbXBvbmVudChpbnRlcm5hbEluc3RhbmNlLl9kZWJ1Z0lEKTtcbiAgICAg
IH1cbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RSZWNvbmNpbGVyO1xu
XG4vKioqLyB9KSxcbi8qIDE3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBf
X3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBDb3B5cmln
aHQgMjAxNS1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5c
biAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUg
bGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rv
cnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50
IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJl
Y3RvcnkuXG4gKlxuICovXG5cblxuXG52YXIgRE9NTmFtZXNwYWNlcyA9IF9fd2VicGFja19yZXF1
aXJlX18oMzgpO1xudmFyIHNldElubmVySFRNTCA9IF9fd2VicGFja19yZXF1aXJlX18oMjYpO1xu
XG52YXIgY3JlYXRlTWljcm9zb2Z0VW5zYWZlTG9jYWxGdW5jdGlvbiA9IF9fd2VicGFja19yZXF1
aXJlX18oMzkpO1xudmFyIHNldFRleHRDb250ZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Nyk7
XG5cbnZhciBFTEVNRU5UX05PREVfVFlQRSA9IDE7XG52YXIgRE9DVU1FTlRfRlJBR01FTlRfTk9E
RV9UWVBFID0gMTE7XG5cbi8qKlxuICogSW4gSUUgKDgtMTEpIGFuZCBFZGdlLCBhcHBlbmRpbmcg
bm9kZXMgd2l0aCBubyBjaGlsZHJlbiBpcyBkcmFtYXRpY2FsbHlcbiAqIGZhc3RlciB0aGFuIGFw
cGVuZGluZyBhIGZ1bGwgc3VidHJlZSwgc28gd2UgZXNzZW50aWFsbHkgcXVldWUgdXAgdGhlXG4g
KiAuYXBwZW5kQ2hpbGQgY2FsbHMgaGVyZSBhbmQgYXBwbHkgdGhlbSBzbyBlYWNoIG5vZGUgaXMg
YWRkZWQgdG8gaXRzIHBhcmVudFxuICogYmVmb3JlIGFueSBjaGlsZHJlbiBhcmUgYWRkZWQuXG4g
KlxuICogSW4gb3RoZXIgYnJvd3NlcnMsIGRvaW5nIHNvIGlzIHNsb3dlciBvciBuZXV0cmFsIGNv
bXBhcmVkIHRvIHRoZSBvdGhlciBvcmRlclxuICogKGluIEZpcmVmb3gsIHR3aWNlIGFzIHNsb3cp
IHNvIHdlIG9ubHkgZG8gdGhpcyBpbnZlcnNpb24gaW4gSUUuXG4gKlxuICogU2VlIGh0dHBzOi8v
Z2l0aHViLmNvbS9zcGljeWovaW5uZXJodG1sLXZzLWNyZWF0ZWVsZW1lbnQtdnMtY2xvbmVub2Rl
LlxuICovXG52YXIgZW5hYmxlTGF6eSA9IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcg
JiYgdHlwZW9mIGRvY3VtZW50LmRvY3VtZW50TW9kZSA9PT0gJ251bWJlcicgfHwgdHlwZW9mIG5h
dmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG5hdmlnYXRvci51c2VyQWdlbnQgPT09
ICdzdHJpbmcnICYmIC9cXGJFZGdlXFwvXFxkLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xu
XG5mdW5jdGlvbiBpbnNlcnRUcmVlQ2hpbGRyZW4odHJlZSkge1xuICBpZiAoIWVuYWJsZUxhenkp
IHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG5vZGUgPSB0cmVlLm5vZGU7XG4gIHZhciBjaGls
ZHJlbiA9IHRyZWUuY2hpbGRyZW47XG4gIGlmIChjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpbnNlcnRUcmVl
QmVmb3JlKG5vZGUsIGNoaWxkcmVuW2ldLCBudWxsKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHJl
ZS5odG1sICE9IG51bGwpIHtcbiAgICBzZXRJbm5lckhUTUwobm9kZSwgdHJlZS5odG1sKTtcbiAg
fSBlbHNlIGlmICh0cmVlLnRleHQgIT0gbnVsbCkge1xuICAgIHNldFRleHRDb250ZW50KG5vZGUs
IHRyZWUudGV4dCk7XG4gIH1cbn1cblxudmFyIGluc2VydFRyZWVCZWZvcmUgPSBjcmVhdGVNaWNy
b3NvZnRVbnNhZmVMb2NhbEZ1bmN0aW9uKGZ1bmN0aW9uIChwYXJlbnROb2RlLCB0cmVlLCByZWZl
cmVuY2VOb2RlKSB7XG4gIC8vIERvY3VtZW50RnJhZ21lbnRzIGFyZW4ndCBhY3R1YWxseSBwYXJ0
IG9mIHRoZSBET00gYWZ0ZXIgaW5zZXJ0aW9uIHNvXG4gIC8vIGFwcGVuZGluZyBjaGlsZHJlbiB3
b24ndCB1cGRhdGUgdGhlIERPTS4gV2UgbmVlZCB0byBlbnN1cmUgdGhlIGZyYWdtZW50XG4gIC8v
IGlzIHByb3Blcmx5IHBvcHVsYXRlZCBmaXJzdCwgYnJlYWtpbmcgb3V0IG9mIG91ciBsYXp5IGFw
cHJvYWNoIGZvciBqdXN0XG4gIC8vIHRoaXMgbGV2ZWwuIEFsc28sIHNvbWUgPG9iamVjdD4gcGx1
Z2lucyAobGlrZSBGbGFzaCBQbGF5ZXIpIHdpbGwgcmVhZFxuICAvLyA8cGFyYW0+IG5vZGVzIGlt
bWVkaWF0ZWx5IHVwb24gaW5zZXJ0aW9uIGludG8gdGhlIERPTSwgc28gPG9iamVjdD5cbiAgLy8g
bXVzdCBhbHNvIGJlIHBvcHVsYXRlZCBwcmlvciB0byBpbnNlcnRpb24gaW50byB0aGUgRE9NLlxu
ICBpZiAodHJlZS5ub2RlLm5vZGVUeXBlID09PSBET0NVTUVOVF9GUkFHTUVOVF9OT0RFX1RZUEUg
fHwgdHJlZS5ub2RlLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREVfVFlQRSAmJiB0cmVlLm5vZGUu
bm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ29iamVjdCcgJiYgKHRyZWUubm9kZS5uYW1lc3Bh
Y2VVUkkgPT0gbnVsbCB8fCB0cmVlLm5vZGUubmFtZXNwYWNlVVJJID09PSBET01OYW1lc3BhY2Vz
Lmh0bWwpKSB7XG4gICAgaW5zZXJ0VHJlZUNoaWxkcmVuKHRyZWUpO1xuICAgIHBhcmVudE5vZGUu
aW5zZXJ0QmVmb3JlKHRyZWUubm9kZSwgcmVmZXJlbmNlTm9kZSk7XG4gIH0gZWxzZSB7XG4gICAg
cGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodHJlZS5ub2RlLCByZWZlcmVuY2VOb2RlKTtcbiAgICBp
bnNlcnRUcmVlQ2hpbGRyZW4odHJlZSk7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiByZXBsYWNlQ2hp
bGRXaXRoVHJlZShvbGROb2RlLCBuZXdUcmVlKSB7XG4gIG9sZE5vZGUucGFyZW50Tm9kZS5yZXBs
YWNlQ2hpbGQobmV3VHJlZS5ub2RlLCBvbGROb2RlKTtcbiAgaW5zZXJ0VHJlZUNoaWxkcmVuKG5l
d1RyZWUpO1xufVxuXG5mdW5jdGlvbiBxdWV1ZUNoaWxkKHBhcmVudFRyZWUsIGNoaWxkVHJlZSkg
e1xuICBpZiAoZW5hYmxlTGF6eSkge1xuICAgIHBhcmVudFRyZWUuY2hpbGRyZW4ucHVzaChjaGls
ZFRyZWUpO1xuICB9IGVsc2Uge1xuICAgIHBhcmVudFRyZWUubm9kZS5hcHBlbmRDaGlsZChjaGls
ZFRyZWUubm9kZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcXVldWVIVE1MKHRyZWUsIGh0bWwpIHtc
biAgaWYgKGVuYWJsZUxhenkpIHtcbiAgICB0cmVlLmh0bWwgPSBodG1sO1xuICB9IGVsc2Uge1xu
ICAgIHNldElubmVySFRNTCh0cmVlLm5vZGUsIGh0bWwpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHF1
ZXVlVGV4dCh0cmVlLCB0ZXh0KSB7XG4gIGlmIChlbmFibGVMYXp5KSB7XG4gICAgdHJlZS50ZXh0
ID0gdGV4dDtcbiAgfSBlbHNlIHtcbiAgICBzZXRUZXh0Q29udGVudCh0cmVlLm5vZGUsIHRleHQp
O1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gdGhpcy5ub2RlLm5v
ZGVOYW1lO1xufVxuXG5mdW5jdGlvbiBET01MYXp5VHJlZShub2RlKSB7XG4gIHJldHVybiB7XG4g
ICAgbm9kZTogbm9kZSxcbiAgICBjaGlsZHJlbjogW10sXG4gICAgaHRtbDogbnVsbCxcbiAgICB0
ZXh0OiBudWxsLFxuICAgIHRvU3RyaW5nOiB0b1N0cmluZ1xuICB9O1xufVxuXG5ET01MYXp5VHJl
ZS5pbnNlcnRUcmVlQmVmb3JlID0gaW5zZXJ0VHJlZUJlZm9yZTtcbkRPTUxhenlUcmVlLnJlcGxh
Y2VDaGlsZFdpdGhUcmVlID0gcmVwbGFjZUNoaWxkV2l0aFRyZWU7XG5ET01MYXp5VHJlZS5xdWV1
ZUNoaWxkID0gcXVldWVDaGlsZDtcbkRPTUxhenlUcmVlLnF1ZXVlSFRNTCA9IHF1ZXVlSFRNTDtc
bkRPTUxhenlUcmVlLnF1ZXVlVGV4dCA9IHF1ZXVlVGV4dDtcblxubW9kdWxlLmV4cG9ydHMgPSBE
T01MYXp5VHJlZTtcblxuLyoqKi8gfSksXG4vKiAxOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVs
ZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8q
KlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwg
cmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5k
ZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdy
YW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxl
IGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG5cbi8qKlxuICogV0FSTklO
RzogRE8gTk9UIG1hbnVhbGx5IHJlcXVpcmUgdGhpcyBtb2R1bGUuXG4gKiBUaGlzIGlzIGEgcmVw
bGFjZW1lbnQgZm9yIGBpbnZhcmlhbnQoLi4uKWAgdXNlZCBieSB0aGUgZXJyb3IgY29kZSBzeXN0
ZW1cbiAqIGFuZCB3aWxsIF9vbmx5XyBiZSByZXF1aXJlZCBieSB0aGUgY29ycmVzcG9uZGluZyBi
YWJlbCBwYXNzLlxuICogSXQgYWx3YXlzIHRocm93cy5cbiAqL1xuXG5mdW5jdGlvbiByZWFjdFBy
b2RJbnZhcmlhbnQoY29kZSkge1xuICB2YXIgYXJnQ291bnQgPSBhcmd1bWVudHMubGVuZ3RoIC0g
MTtcblxuICB2YXIgbWVzc2FnZSA9ICdNaW5pZmllZCBSZWFjdCBlcnJvciAjJyArIGNvZGUgKyAn
OyB2aXNpdCAnICsgJ2h0dHA6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy9lcnJvci1k
ZWNvZGVyLmh0bWw/aW52YXJpYW50PScgKyBjb2RlO1xuXG4gIGZvciAodmFyIGFyZ0lkeCA9IDA7
IGFyZ0lkeCA8IGFyZ0NvdW50OyBhcmdJZHgrKykge1xuICAgIG1lc3NhZ2UgKz0gJyZhcmdzW109
JyArIGVuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbYXJnSWR4ICsgMV0pO1xuICB9XG5cbiAg
bWVzc2FnZSArPSAnIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVk
IGRldiBlbnZpcm9ubWVudCcgKyAnIGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxw
ZnVsIHdhcm5pbmdzLic7XG5cbiAgdmFyIGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICBl
cnJvci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICBlcnJvci5mcmFtZXNUb1BvcCA9
IDE7IC8vIHdlIGRvbid0IGNhcmUgYWJvdXQgcmVhY3RQcm9kSW52YXJpYW50J3Mgb3duIGZyYW1l
XG5cbiAgdGhyb3cgZXJyb3I7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVhY3RQcm9kSW52YXJp
YW50O1xuXG4vKioqLyB9KSxcbi8qIDE5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBv
cnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBD
b3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNl
cnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qt
c3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBk
aXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2Yg
cGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2Ft
ZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cblxuXG52YXIgRXZlbnRQbHVnaW5IdWIgPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKDIwKTtcbnZhciBFdmVudFBsdWdpblV0aWxzID0gX193ZWJwYWNrX3JlcXVp
cmVfXygzMik7XG5cbnZhciBhY2N1bXVsYXRlSW50byA9IF9fd2VicGFja19yZXF1aXJlX18oNTkp
O1xudmFyIGZvckVhY2hBY2N1bXVsYXRlZCA9IF9fd2VicGFja19yZXF1aXJlX18oNjApO1xudmFy
IHdhcm5pbmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuXG52YXIgZ2V0TGlzdGVuZXIgPSBF
dmVudFBsdWdpbkh1Yi5nZXRMaXN0ZW5lcjtcblxuLyoqXG4gKiBTb21lIGV2ZW50IHR5cGVzIGhh
dmUgYSBub3Rpb24gb2YgZGlmZmVyZW50IHJlZ2lzdHJhdGlvbiBuYW1lcyBmb3IgZGlmZmVyZW50
XG4gKiBcInBoYXNlc1wiIG9mIHByb3BhZ2F0aW9uLiBUaGlzIGZpbmRzIGxpc3RlbmVycyBieSBh
IGdpdmVuIHBoYXNlLlxuICovXG5mdW5jdGlvbiBsaXN0ZW5lckF0UGhhc2UoaW5zdCwgZXZlbnQs
IHByb3BhZ2F0aW9uUGhhc2UpIHtcbiAgdmFyIHJlZ2lzdHJhdGlvbk5hbWUgPSBldmVudC5kaXNw
YXRjaENvbmZpZy5waGFzZWRSZWdpc3RyYXRpb25OYW1lc1twcm9wYWdhdGlvblBoYXNlXTtcbiAg
cmV0dXJuIGdldExpc3RlbmVyKGluc3QsIHJlZ2lzdHJhdGlvbk5hbWUpO1xufVxuXG4vKipcbiAq
IFRhZ3MgYSBgU3ludGhldGljRXZlbnRgIHdpdGggZGlzcGF0Y2hlZCBsaXN0ZW5lcnMuIENyZWF0
aW5nIHRoaXMgZnVuY3Rpb25cbiAqIGhlcmUsIGFsbG93cyB1cyB0byBub3QgaGF2ZSB0byBiaW5k
IG9yIGNyZWF0ZSBmdW5jdGlvbnMgZm9yIGVhY2ggZXZlbnQuXG4gKiBNdXRhdGluZyB0aGUgZXZl
bnQncyBtZW1iZXJzIGFsbG93cyB1cyB0byBub3QgaGF2ZSB0byBjcmVhdGUgYSB3cmFwcGluZ1xu
ICogXCJkaXNwYXRjaFwiIG9iamVjdCB0aGF0IHBhaXJzIHRoZSBldmVudCB3aXRoIHRoZSBsaXN0
ZW5lci5cbiAqL1xuZnVuY3Rpb24gYWNjdW11bGF0ZURpcmVjdGlvbmFsRGlzcGF0Y2hlcyhpbnN0
LCBwaGFzZSwgZXZlbnQpIHtcbiAgaWYgKGZhbHNlKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9F
TlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoaW5zdCwgJ0Rpc3BhdGNoaW5nIGluc3QgbXVz
dCBub3QgYmUgbnVsbCcpIDogdm9pZCAwO1xuICB9XG4gIHZhciBsaXN0ZW5lciA9IGxpc3RlbmVy
QXRQaGFzZShpbnN0LCBldmVudCwgcGhhc2UpO1xuICBpZiAobGlzdGVuZXIpIHtcbiAgICBldmVu
dC5fZGlzcGF0Y2hMaXN0ZW5lcnMgPSBhY2N1bXVsYXRlSW50byhldmVudC5fZGlzcGF0Y2hMaXN0
ZW5lcnMsIGxpc3RlbmVyKTtcbiAgICBldmVudC5fZGlzcGF0Y2hJbnN0YW5jZXMgPSBhY2N1bXVs
YXRlSW50byhldmVudC5fZGlzcGF0Y2hJbnN0YW5jZXMsIGluc3QpO1xuICB9XG59XG5cbi8qKlxu
ICogQ29sbGVjdCBkaXNwYXRjaGVzIChtdXN0IGJlIGVudGlyZWx5IGNvbGxlY3RlZCBiZWZvcmUg
ZGlzcGF0Y2hpbmcgLSBzZWUgdW5pdFxuICogdGVzdHMpLiBMYXppbHkgYWxsb2NhdGUgdGhlIGFy
cmF5IHRvIGNvbnNlcnZlIG1lbW9yeS4gIFdlIG11c3QgbG9vcCB0aHJvdWdoXG4gKiBlYWNoIGV2
ZW50IGFuZCBwZXJmb3JtIHRoZSB0cmF2ZXJzYWwgZm9yIGVhY2ggb25lLiBXZSBjYW5ub3QgcGVy
Zm9ybSBhXG4gKiBzaW5nbGUgdHJhdmVyc2FsIGZvciB0aGUgZW50aXJlIGNvbGxlY3Rpb24gb2Yg
ZXZlbnRzIGJlY2F1c2UgZWFjaCBldmVudCBtYXlcbiAqIGhhdmUgYSBkaWZmZXJlbnQgdGFyZ2V0
LlxuICovXG5mdW5jdGlvbiBhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzU2luZ2xlKGV2ZW50
KSB7XG4gIGlmIChldmVudCAmJiBldmVudC5kaXNwYXRjaENvbmZpZy5waGFzZWRSZWdpc3RyYXRp
b25OYW1lcykge1xuICAgIEV2ZW50UGx1Z2luVXRpbHMudHJhdmVyc2VUd29QaGFzZShldmVudC5f
dGFyZ2V0SW5zdCwgYWNjdW11bGF0ZURpcmVjdGlvbmFsRGlzcGF0Y2hlcywgZXZlbnQpO1xuICB9
XG59XG5cbi8qKlxuICogU2FtZSBhcyBgYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlc1Npbmds
ZWAsIGJ1dCBza2lwcyBvdmVyIHRoZSB0YXJnZXRJRC5cbiAqL1xuZnVuY3Rpb24gYWNjdW11bGF0
ZVR3b1BoYXNlRGlzcGF0Y2hlc1NpbmdsZVNraXBUYXJnZXQoZXZlbnQpIHtcbiAgaWYgKGV2ZW50
ICYmIGV2ZW50LmRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzKSB7XG4gICAg
dmFyIHRhcmdldEluc3QgPSBldmVudC5fdGFyZ2V0SW5zdDtcbiAgICB2YXIgcGFyZW50SW5zdCA9
IHRhcmdldEluc3QgPyBFdmVudFBsdWdpblV0aWxzLmdldFBhcmVudEluc3RhbmNlKHRhcmdldElu
c3QpIDogbnVsbDtcbiAgICBFdmVudFBsdWdpblV0aWxzLnRyYXZlcnNlVHdvUGhhc2UocGFyZW50
SW5zdCwgYWNjdW11bGF0ZURpcmVjdGlvbmFsRGlzcGF0Y2hlcywgZXZlbnQpO1xuICB9XG59XG5c
bi8qKlxuICogQWNjdW11bGF0ZXMgd2l0aG91dCByZWdhcmQgdG8gZGlyZWN0aW9uLCBkb2VzIG5v
dCBsb29rIGZvciBwaGFzZWRcbiAqIHJlZ2lzdHJhdGlvbiBuYW1lcy4gU2FtZSBhcyBgYWNjdW11
bGF0ZURpcmVjdERpc3BhdGNoZXNTaW5nbGVgIGJ1dCB3aXRob3V0XG4gKiByZXF1aXJpbmcgdGhh
dCB0aGUgYGRpc3BhdGNoTWFya2VyYCBiZSB0aGUgc2FtZSBhcyB0aGUgZGlzcGF0Y2hlZCBJRC5c
biAqL1xuZnVuY3Rpb24gYWNjdW11bGF0ZURpc3BhdGNoZXMoaW5zdCwgaWdub3JlZERpcmVjdGlv
biwgZXZlbnQpIHtcbiAgaWYgKGV2ZW50ICYmIGV2ZW50LmRpc3BhdGNoQ29uZmlnLnJlZ2lzdHJh
dGlvbk5hbWUpIHtcbiAgICB2YXIgcmVnaXN0cmF0aW9uTmFtZSA9IGV2ZW50LmRpc3BhdGNoQ29u
ZmlnLnJlZ2lzdHJhdGlvbk5hbWU7XG4gICAgdmFyIGxpc3RlbmVyID0gZ2V0TGlzdGVuZXIoaW5z
dCwgcmVnaXN0cmF0aW9uTmFtZSk7XG4gICAgaWYgKGxpc3RlbmVyKSB7XG4gICAgICBldmVudC5f
ZGlzcGF0Y2hMaXN0ZW5lcnMgPSBhY2N1bXVsYXRlSW50byhldmVudC5fZGlzcGF0Y2hMaXN0ZW5l
cnMsIGxpc3RlbmVyKTtcbiAgICAgIGV2ZW50Ll9kaXNwYXRjaEluc3RhbmNlcyA9IGFjY3VtdWxh
dGVJbnRvKGV2ZW50Ll9kaXNwYXRjaEluc3RhbmNlcywgaW5zdCk7XG4gICAgfVxuICB9XG59XG5c
bi8qKlxuICogQWNjdW11bGF0ZXMgZGlzcGF0Y2hlcyBvbiBhbiBgU3ludGhldGljRXZlbnRgLCBi
dXQgb25seSBmb3IgdGhlXG4gKiBgZGlzcGF0Y2hNYXJrZXJgLlxuICogQHBhcmFtIHtTeW50aGV0
aWNFdmVudH0gZXZlbnRcbiAqL1xuZnVuY3Rpb24gYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXNT
aW5nbGUoZXZlbnQpIHtcbiAgaWYgKGV2ZW50ICYmIGV2ZW50LmRpc3BhdGNoQ29uZmlnLnJlZ2lz
dHJhdGlvbk5hbWUpIHtcbiAgICBhY2N1bXVsYXRlRGlzcGF0Y2hlcyhldmVudC5fdGFyZ2V0SW5z
dCwgbnVsbCwgZXZlbnQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVUd29QaGFzZURp
c3BhdGNoZXMoZXZlbnRzKSB7XG4gIGZvckVhY2hBY2N1bXVsYXRlZChldmVudHMsIGFjY3VtdWxh
dGVUd29QaGFzZURpc3BhdGNoZXNTaW5nbGUpO1xufVxuXG5mdW5jdGlvbiBhY2N1bXVsYXRlVHdv
UGhhc2VEaXNwYXRjaGVzU2tpcFRhcmdldChldmVudHMpIHtcbiAgZm9yRWFjaEFjY3VtdWxhdGVk
KGV2ZW50cywgYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlc1NpbmdsZVNraXBUYXJnZXQpO1xu
fVxuXG5mdW5jdGlvbiBhY2N1bXVsYXRlRW50ZXJMZWF2ZURpc3BhdGNoZXMobGVhdmUsIGVudGVy
LCBmcm9tLCB0bykge1xuICBFdmVudFBsdWdpblV0aWxzLnRyYXZlcnNlRW50ZXJMZWF2ZShmcm9t
LCB0bywgYWNjdW11bGF0ZURpc3BhdGNoZXMsIGxlYXZlLCBlbnRlcik7XG59XG5cbmZ1bmN0aW9u
IGFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzKGV2ZW50cykge1xuICBmb3JFYWNoQWNjdW11bGF0
ZWQoZXZlbnRzLCBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlc1NpbmdsZSk7XG59XG5cbi8qKlxu
ICogQSBzbWFsbCBzZXQgb2YgcHJvcGFnYXRpb24gcGF0dGVybnMsIGVhY2ggb2Ygd2hpY2ggd2ls
bCBhY2NlcHQgYSBzbWFsbCBhbW91bnRcbiAqIG9mIGluZm9ybWF0aW9uLCBhbmQgZ2VuZXJhdGUg
YSBzZXQgb2YgXCJkaXNwYXRjaCByZWFkeSBldmVudCBvYmplY3RzXCIgLSB3aGljaFxuICogYXJl
IHNldHMgb2YgZXZlbnRzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gYW5ub3RhdGVkIHdpdGggYSBz
ZXQgb2YgZGlzcGF0Y2hlZFxuICogbGlzdGVuZXIgZnVuY3Rpb25zL2lkcy4gVGhlIEFQSSBpcyBk
ZXNpZ25lZCB0aGlzIHdheSB0byBkaXNjb3VyYWdlIHRoZXNlXG4gKiBwcm9wYWdhdGlvbiBzdHJh
dGVnaWVzIGZyb20gYWN0dWFsbHkgZXhlY3V0aW5nIHRoZSBkaXNwYXRjaGVzLCBzaW5jZSB3ZVxu
ICogYWx3YXlzIHdhbnQgdG8gY29sbGVjdCB0aGUgZW50aXJlIHNldCBvZiBkaXNwYXRjaGVzIGJl
Zm9yZSBleGVjdXRpbmcgZXZlbnQgYVxuICogc2luZ2xlIG9uZS5cbiAqXG4gKiBAY29uc3RydWN0
b3IgRXZlbnRQcm9wYWdhdG9yc1xuICovXG52YXIgRXZlbnRQcm9wYWdhdG9ycyA9IHtcbiAgYWNj
dW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlczogYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlcyxc
biAgYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlc1NraXBUYXJnZXQ6IGFjY3VtdWxhdGVUd29Q
aGFzZURpc3BhdGNoZXNTa2lwVGFyZ2V0LFxuICBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlczog
YWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXMsXG4gIGFjY3VtdWxhdGVFbnRlckxlYXZlRGlzcGF0
Y2hlczogYWNjdW11bGF0ZUVudGVyTGVhdmVEaXNwYXRjaGVzXG59O1xuXG5tb2R1bGUuZXhwb3J0
cyA9IEV2ZW50UHJvcGFnYXRvcnM7XG5cbi8qKiovIH0pLFxuLyogMjAgKi9cbi8qKiovIChmdW5j
dGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3Ry
aWN0XCI7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4g
KiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5z
ZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBm
aWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlv
bmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5U
UyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuXG5cbnZhciBfcHJvZElu
dmFyaWFudCA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG5cbnZhciBFdmVudFBsdWdpblJlZ2lz
dHJ5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMSk7XG52YXIgRXZlbnRQbHVnaW5VdGlscyA9IF9f
d2VicGFja19yZXF1aXJlX18oMzIpO1xudmFyIFJlYWN0RXJyb3JVdGlscyA9IF9fd2VicGFja19y
ZXF1aXJlX18oMzMpO1xuXG52YXIgYWNjdW11bGF0ZUludG8gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KDU5KTtcbnZhciBmb3JFYWNoQWNjdW11bGF0ZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYwKTtc
bnZhciBpbnZhcmlhbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG4vKipcbiAqIEludGVy
bmFsIHN0b3JlIGZvciBldmVudCBsaXN0ZW5lcnNcbiAqL1xudmFyIGxpc3RlbmVyQmFuayA9IHt9
O1xuXG4vKipcbiAqIEludGVybmFsIHF1ZXVlIG9mIGV2ZW50cyB0aGF0IGhhdmUgYWNjdW11bGF0
ZWQgdGhlaXIgZGlzcGF0Y2hlcyBhbmQgYXJlXG4gKiB3YWl0aW5nIHRvIGhhdmUgdGhlaXIgZGlz
cGF0Y2hlcyBleGVjdXRlZC5cbiAqL1xudmFyIGV2ZW50UXVldWUgPSBudWxsO1xuXG4vKipcbiAq
IERpc3BhdGNoZXMgYW4gZXZlbnQgYW5kIHJlbGVhc2VzIGl0IGJhY2sgaW50byB0aGUgcG9vbCwg
dW5sZXNzIHBlcnNpc3RlbnQuXG4gKlxuICogQHBhcmFtIHs/b2JqZWN0fSBldmVudCBTeW50aGV0
aWMgZXZlbnQgdG8gYmUgZGlzcGF0Y2hlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gc2ltdWxhdGVk
IElmIHRoZSBldmVudCBpcyBzaW11bGF0ZWQgKGNoYW5nZXMgZXhuIGJlaGF2aW9yKVxuICogQHBy
aXZhdGVcbiAqL1xudmFyIGV4ZWN1dGVEaXNwYXRjaGVzQW5kUmVsZWFzZSA9IGZ1bmN0aW9uIChl
dmVudCwgc2ltdWxhdGVkKSB7XG4gIGlmIChldmVudCkge1xuICAgIEV2ZW50UGx1Z2luVXRpbHMu
ZXhlY3V0ZURpc3BhdGNoZXNJbk9yZGVyKGV2ZW50LCBzaW11bGF0ZWQpO1xuXG4gICAgaWYgKCFl
dmVudC5pc1BlcnNpc3RlbnQoKSkge1xuICAgICAgZXZlbnQuY29uc3RydWN0b3IucmVsZWFzZShl
dmVudCk7XG4gICAgfVxuICB9XG59O1xudmFyIGV4ZWN1dGVEaXNwYXRjaGVzQW5kUmVsZWFzZVNp
bXVsYXRlZCA9IGZ1bmN0aW9uIChlKSB7XG4gIHJldHVybiBleGVjdXRlRGlzcGF0Y2hlc0FuZFJl
bGVhc2UoZSwgdHJ1ZSk7XG59O1xudmFyIGV4ZWN1dGVEaXNwYXRjaGVzQW5kUmVsZWFzZVRvcExl
dmVsID0gZnVuY3Rpb24gKGUpIHtcbiAgcmV0dXJuIGV4ZWN1dGVEaXNwYXRjaGVzQW5kUmVsZWFz
ZShlLCBmYWxzZSk7XG59O1xuXG52YXIgZ2V0RGljdGlvbmFyeUtleSA9IGZ1bmN0aW9uIChpbnN0
KSB7XG4gIC8vIFByZXZlbnRzIFY4IHBlcmZvcm1hbmNlIGlzc3VlOlxuICAvLyBodHRwczovL2dp
dGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC83MjMyXG4gIHJldHVybiAnLicgKyBpbnN0Ll9y
b290Tm9kZUlEO1xufTtcblxuZnVuY3Rpb24gaXNJbnRlcmFjdGl2ZSh0YWcpIHtcbiAgcmV0dXJu
IHRhZyA9PT0gJ2J1dHRvbicgfHwgdGFnID09PSAnaW5wdXQnIHx8IHRhZyA9PT0gJ3NlbGVjdCcg
fHwgdGFnID09PSAndGV4dGFyZWEnO1xufVxuXG5mdW5jdGlvbiBzaG91bGRQcmV2ZW50TW91c2VF
dmVudChuYW1lLCB0eXBlLCBwcm9wcykge1xuICBzd2l0Y2ggKG5hbWUpIHtcbiAgICBjYXNlICdv
bkNsaWNrJzpcbiAgICBjYXNlICdvbkNsaWNrQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Eb3VibGVD
bGljayc6XG4gICAgY2FzZSAnb25Eb3VibGVDbGlja0NhcHR1cmUnOlxuICAgIGNhc2UgJ29uTW91
c2VEb3duJzpcbiAgICBjYXNlICdvbk1vdXNlRG93bkNhcHR1cmUnOlxuICAgIGNhc2UgJ29uTW91
c2VNb3ZlJzpcbiAgICBjYXNlICdvbk1vdXNlTW92ZUNhcHR1cmUnOlxuICAgIGNhc2UgJ29uTW91
c2VVcCc6XG4gICAgY2FzZSAnb25Nb3VzZVVwQ2FwdHVyZSc6XG4gICAgICByZXR1cm4gISEocHJv
cHMuZGlzYWJsZWQgJiYgaXNJbnRlcmFjdGl2ZSh0eXBlKSk7XG4gICAgZGVmYXVsdDpcbiAgICAg
IHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgaXMgYSB1bmlmaWVkIGludGVy
ZmFjZSBmb3IgZXZlbnQgcGx1Z2lucyB0byBiZSBpbnN0YWxsZWQgYW5kIGNvbmZpZ3VyZWQuXG4g
KlxuICogRXZlbnQgcGx1Z2lucyBjYW4gaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgcHJvcGVydGll
czpcbiAqXG4gKiAgIGBleHRyYWN0RXZlbnRzYCB7ZnVuY3Rpb24oc3RyaW5nLCBET01FdmVudFRh
cmdldCwgc3RyaW5nLCBvYmplY3QpOiAqfVxuICogICAgIFJlcXVpcmVkLiBXaGVuIGEgdG9wLWxl
dmVsIGV2ZW50IGlzIGZpcmVkLCB0aGlzIG1ldGhvZCBpcyBleHBlY3RlZCB0b1xuICogICAgIGV4
dHJhY3Qgc3ludGhldGljIGV2ZW50cyB0aGF0IHdpbGwgaW4gdHVybiBiZSBxdWV1ZWQgYW5kIGRp
c3BhdGNoZWQuXG4gKlxuICogICBgZXZlbnRUeXBlc2Age29iamVjdH1cbiAqICAgICBPcHRpb25h
bCwgcGx1Z2lucyB0aGF0IGZpcmUgZXZlbnRzIG11c3QgcHVibGlzaCBhIG1hcHBpbmcgb2YgcmVn
aXN0cmF0aW9uXG4gKiAgICAgbmFtZXMgdGhhdCBhcmUgdXNlZCB0byByZWdpc3RlciBsaXN0ZW5l
cnMuIFZhbHVlcyBvZiB0aGlzIG1hcHBpbmcgbXVzdFxuICogICAgIGJlIG9iamVjdHMgdGhhdCBj
b250YWluIGByZWdpc3RyYXRpb25OYW1lYCBvciBgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXNgLlxu
ICpcbiAqICAgYGV4ZWN1dGVEaXNwYXRjaGAge2Z1bmN0aW9uKG9iamVjdCwgZnVuY3Rpb24sIHN0
cmluZyl9XG4gKiAgICAgT3B0aW9uYWwsIGFsbG93cyBwbHVnaW5zIHRvIG92ZXJyaWRlIGhvdyBh
biBldmVudCBnZXRzIGRpc3BhdGNoZWQuIEJ5XG4gKiAgICAgZGVmYXVsdCwgdGhlIGxpc3RlbmVy
IGlzIHNpbXBseSBpbnZva2VkLlxuICpcbiAqIEVhY2ggcGx1Z2luIHRoYXQgaXMgaW5qZWN0ZWQg
aW50byBgRXZlbnRzUGx1Z2luSHViYCBpcyBpbW1lZGlhdGVseSBvcGVyYWJsZS5cbiAqXG4gKiBA
cHVibGljXG4gKi9cbnZhciBFdmVudFBsdWdpbkh1YiA9IHtcbiAgLyoqXG4gICAqIE1ldGhvZHMg
Zm9yIGluamVjdGluZyBkZXBlbmRlbmNpZXMuXG4gICAqL1xuICBpbmplY3Rpb246IHtcbiAgICAv
KipcbiAgICAgKiBAcGFyYW0ge2FycmF5fSBJbmplY3RlZEV2ZW50UGx1Z2luT3JkZXJcbiAgICAg
KiBAcHVibGljXG4gICAgICovXG4gICAgaW5qZWN0RXZlbnRQbHVnaW5PcmRlcjogRXZlbnRQbHVn
aW5SZWdpc3RyeS5pbmplY3RFdmVudFBsdWdpbk9yZGVyLFxuXG4gICAgLyoqXG4gICAgICogQHBh
cmFtIHtvYmplY3R9IGluamVjdGVkTmFtZXNUb1BsdWdpbnMgTWFwIGZyb20gbmFtZXMgdG8gcGx1
Z2luIG1vZHVsZXMuXG4gICAgICovXG4gICAgaW5qZWN0RXZlbnRQbHVnaW5zQnlOYW1lOiBFdmVu
dFBsdWdpblJlZ2lzdHJ5LmluamVjdEV2ZW50UGx1Z2luc0J5TmFtZVxuICB9LFxuXG4gIC8qKlxu
ICAgKiBTdG9yZXMgYGxpc3RlbmVyYCBhdCBgbGlzdGVuZXJCYW5rW3JlZ2lzdHJhdGlvbk5hbWVd
W2tleV1gLiBJcyBpZGVtcG90ZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gaW5zdCBU
aGUgaW5zdGFuY2UsIHdoaWNoIGlzIHRoZSBzb3VyY2Ugb2YgZXZlbnRzLlxuICAgKiBAcGFyYW0g
e3N0cmluZ30gcmVnaXN0cmF0aW9uTmFtZSBOYW1lIG9mIGxpc3RlbmVyIChlLmcuIGBvbkNsaWNr
YCkuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGxpc3RlbmVyIFRoZSBjYWxsYmFjayB0byBzdG9y
ZS5cbiAgICovXG4gIHB1dExpc3RlbmVyOiBmdW5jdGlvbiAoaW5zdCwgcmVnaXN0cmF0aW9uTmFt
ZSwgbGlzdGVuZXIpIHtcbiAgICAhKHR5cGVvZiBsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykgPyAg
ZmFsc2UgPyBpbnZhcmlhbnQoZmFsc2UsICdFeHBlY3RlZCAlcyBsaXN0ZW5lciB0byBiZSBhIGZ1
bmN0aW9uLCBpbnN0ZWFkIGdvdCB0eXBlICVzJywgcmVnaXN0cmF0aW9uTmFtZSwgdHlwZW9mIGxp
c3RlbmVyKSA6IF9wcm9kSW52YXJpYW50KCc5NCcsIHJlZ2lzdHJhdGlvbk5hbWUsIHR5cGVvZiBs
aXN0ZW5lcikgOiB2b2lkIDA7XG5cbiAgICB2YXIga2V5ID0gZ2V0RGljdGlvbmFyeUtleShpbnN0
KTtcbiAgICB2YXIgYmFua0ZvclJlZ2lzdHJhdGlvbk5hbWUgPSBsaXN0ZW5lckJhbmtbcmVnaXN0
cmF0aW9uTmFtZV0gfHwgKGxpc3RlbmVyQmFua1tyZWdpc3RyYXRpb25OYW1lXSA9IHt9KTtcbiAg
ICBiYW5rRm9yUmVnaXN0cmF0aW9uTmFtZVtrZXldID0gbGlzdGVuZXI7XG5cbiAgICB2YXIgUGx1
Z2luTW9kdWxlID0gRXZlbnRQbHVnaW5SZWdpc3RyeS5yZWdpc3RyYXRpb25OYW1lTW9kdWxlc1ty
ZWdpc3RyYXRpb25OYW1lXTtcbiAgICBpZiAoUGx1Z2luTW9kdWxlICYmIFBsdWdpbk1vZHVsZS5k
aWRQdXRMaXN0ZW5lcikge1xuICAgICAgUGx1Z2luTW9kdWxlLmRpZFB1dExpc3RlbmVyKGluc3Qs
IHJlZ2lzdHJhdGlvbk5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAq
IEBwYXJhbSB7b2JqZWN0fSBpbnN0IFRoZSBpbnN0YW5jZSwgd2hpY2ggaXMgdGhlIHNvdXJjZSBv
ZiBldmVudHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWdpc3RyYXRpb25OYW1lIE5hbWUgb2Yg
bGlzdGVuZXIgKGUuZy4gYG9uQ2xpY2tgKS5cbiAgICogQHJldHVybiB7P2Z1bmN0aW9ufSBUaGUg
c3RvcmVkIGNhbGxiYWNrLlxuICAgKi9cbiAgZ2V0TGlzdGVuZXI6IGZ1bmN0aW9uIChpbnN0LCBy
ZWdpc3RyYXRpb25OYW1lKSB7XG4gICAgLy8gVE9ETzogc2hvdWxkUHJldmVudE1vdXNlRXZlbnQg
aXMgRE9NLXNwZWNpZmljIGFuZCBkZWZpbml0ZWx5IHNob3VsZCBub3RcbiAgICAvLyBsaXZlIGhl
cmU7IG5lZWRzIHRvIGJlIG1vdmVkIHRvIGEgYmV0dGVyIHBsYWNlIHNvb25cbiAgICB2YXIgYmFu
a0ZvclJlZ2lzdHJhdGlvbk5hbWUgPSBsaXN0ZW5lckJhbmtbcmVnaXN0cmF0aW9uTmFtZV07XG4g
ICAgaWYgKHNob3VsZFByZXZlbnRNb3VzZUV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUsIGluc3QuX2N1
cnJlbnRFbGVtZW50LnR5cGUsIGluc3QuX2N1cnJlbnRFbGVtZW50LnByb3BzKSkge1xuICAgICAg
cmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBrZXkgPSBnZXREaWN0aW9uYXJ5S2V5KGluc3Qp
O1xuICAgIHJldHVybiBiYW5rRm9yUmVnaXN0cmF0aW9uTmFtZSAmJiBiYW5rRm9yUmVnaXN0cmF0
aW9uTmFtZVtrZXldO1xuICB9LFxuXG4gIC8qKlxuICAgKiBEZWxldGVzIGEgbGlzdGVuZXIgZnJv
bSB0aGUgcmVnaXN0cmF0aW9uIGJhbmsuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBpbnN0
IFRoZSBpbnN0YW5jZSwgd2hpY2ggaXMgdGhlIHNvdXJjZSBvZiBldmVudHMuXG4gICAqIEBwYXJh
bSB7c3RyaW5nfSByZWdpc3RyYXRpb25OYW1lIE5hbWUgb2YgbGlzdGVuZXIgKGUuZy4gYG9uQ2xp
Y2tgKS5cbiAgICovXG4gIGRlbGV0ZUxpc3RlbmVyOiBmdW5jdGlvbiAoaW5zdCwgcmVnaXN0cmF0
aW9uTmFtZSkge1xuICAgIHZhciBQbHVnaW5Nb2R1bGUgPSBFdmVudFBsdWdpblJlZ2lzdHJ5LnJl
Z2lzdHJhdGlvbk5hbWVNb2R1bGVzW3JlZ2lzdHJhdGlvbk5hbWVdO1xuICAgIGlmIChQbHVnaW5N
b2R1bGUgJiYgUGx1Z2luTW9kdWxlLndpbGxEZWxldGVMaXN0ZW5lcikge1xuICAgICAgUGx1Z2lu
TW9kdWxlLndpbGxEZWxldGVMaXN0ZW5lcihpbnN0LCByZWdpc3RyYXRpb25OYW1lKTtcbiAgICB9
XG5cbiAgICB2YXIgYmFua0ZvclJlZ2lzdHJhdGlvbk5hbWUgPSBsaXN0ZW5lckJhbmtbcmVnaXN0
cmF0aW9uTmFtZV07XG4gICAgLy8gVE9ETzogVGhpcyBzaG91bGQgbmV2ZXIgYmUgbnVsbCAtLSB3
aGVuIGlzIGl0P1xuICAgIGlmIChiYW5rRm9yUmVnaXN0cmF0aW9uTmFtZSkge1xuICAgICAgdmFy
IGtleSA9IGdldERpY3Rpb25hcnlLZXkoaW5zdCk7XG4gICAgICBkZWxldGUgYmFua0ZvclJlZ2lz
dHJhdGlvbk5hbWVba2V5XTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYWxs
IGxpc3RlbmVycyBmb3IgdGhlIERPTSBlbGVtZW50IHdpdGggdGhlIHN1cHBsaWVkIElELlxuICAg
KlxuICAgKiBAcGFyYW0ge29iamVjdH0gaW5zdCBUaGUgaW5zdGFuY2UsIHdoaWNoIGlzIHRoZSBz
b3VyY2Ugb2YgZXZlbnRzLlxuICAgKi9cbiAgZGVsZXRlQWxsTGlzdGVuZXJzOiBmdW5jdGlvbiAo
aW5zdCkge1xuICAgIHZhciBrZXkgPSBnZXREaWN0aW9uYXJ5S2V5KGluc3QpO1xuICAgIGZvciAo
dmFyIHJlZ2lzdHJhdGlvbk5hbWUgaW4gbGlzdGVuZXJCYW5rKSB7XG4gICAgICBpZiAoIWxpc3Rl
bmVyQmFuay5oYXNPd25Qcm9wZXJ0eShyZWdpc3RyYXRpb25OYW1lKSkge1xuICAgICAgICBjb250
aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFsaXN0ZW5lckJhbmtbcmVnaXN0cmF0aW9uTmFt
ZV1ba2V5XSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIFBsdWdp
bk1vZHVsZSA9IEV2ZW50UGx1Z2luUmVnaXN0cnkucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXNbcmVn
aXN0cmF0aW9uTmFtZV07XG4gICAgICBpZiAoUGx1Z2luTW9kdWxlICYmIFBsdWdpbk1vZHVsZS53
aWxsRGVsZXRlTGlzdGVuZXIpIHtcbiAgICAgICAgUGx1Z2luTW9kdWxlLndpbGxEZWxldGVMaXN0
ZW5lcihpbnN0LCByZWdpc3RyYXRpb25OYW1lKTtcbiAgICAgIH1cblxuICAgICAgZGVsZXRlIGxp
c3RlbmVyQmFua1tyZWdpc3RyYXRpb25OYW1lXVtrZXldO1xuICAgIH1cbiAgfSxcblxuICAvKipc
biAgICogQWxsb3dzIHJlZ2lzdGVyZWQgcGx1Z2lucyBhbiBvcHBvcnR1bml0eSB0byBleHRyYWN0
IGV2ZW50cyBmcm9tIHRvcC1sZXZlbFxuICAgKiBuYXRpdmUgYnJvd3NlciBldmVudHMuXG4gICAq
XG4gICAqIEByZXR1cm4geyp9IEFuIGFjY3VtdWxhdGlvbiBvZiBzeW50aGV0aWMgZXZlbnRzLlxu
ICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGV4dHJhY3RFdmVudHM6IGZ1bmN0aW9uICh0b3BMZXZl
bFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICAg
IHZhciBldmVudHM7XG4gICAgdmFyIHBsdWdpbnMgPSBFdmVudFBsdWdpblJlZ2lzdHJ5LnBsdWdp
bnM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwbHVnaW5zLmxlbmd0aDsgaSsrKSB7XG4gICAg
ICAvLyBOb3QgZXZlcnkgcGx1Z2luIGluIHRoZSBvcmRlcmluZyBtYXkgYmUgbG9hZGVkIGF0IHJ1
bnRpbWUuXG4gICAgICB2YXIgcG9zc2libGVQbHVnaW4gPSBwbHVnaW5zW2ldO1xuICAgICAgaWYg
KHBvc3NpYmxlUGx1Z2luKSB7XG4gICAgICAgIHZhciBleHRyYWN0ZWRFdmVudHMgPSBwb3NzaWJs
ZVBsdWdpbi5leHRyYWN0RXZlbnRzKHRvcExldmVsVHlwZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZl
bnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICAgICAgaWYgKGV4dHJhY3RlZEV2ZW50cykge1xu
ICAgICAgICAgIGV2ZW50cyA9IGFjY3VtdWxhdGVJbnRvKGV2ZW50cywgZXh0cmFjdGVkRXZlbnRz
KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXZlbnRzO1xuICB9LFxu
XG4gIC8qKlxuICAgKiBFbnF1ZXVlcyBhIHN5bnRoZXRpYyBldmVudCB0aGF0IHNob3VsZCBiZSBk
aXNwYXRjaGVkIHdoZW5cbiAgICogYHByb2Nlc3NFdmVudFF1ZXVlYCBpcyBpbnZva2VkLlxuICAg
KlxuICAgKiBAcGFyYW0geyp9IGV2ZW50cyBBbiBhY2N1bXVsYXRpb24gb2Ygc3ludGhldGljIGV2
ZW50cy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlRXZlbnRzOiBmdW5jdGlvbiAo
ZXZlbnRzKSB7XG4gICAgaWYgKGV2ZW50cykge1xuICAgICAgZXZlbnRRdWV1ZSA9IGFjY3VtdWxh
dGVJbnRvKGV2ZW50UXVldWUsIGV2ZW50cyk7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBE
aXNwYXRjaGVzIGFsbCBzeW50aGV0aWMgZXZlbnRzIG9uIHRoZSBldmVudCBxdWV1ZS5cbiAgICpc
biAgICogQGludGVybmFsXG4gICAqL1xuICBwcm9jZXNzRXZlbnRRdWV1ZTogZnVuY3Rpb24gKHNp
bXVsYXRlZCkge1xuICAgIC8vIFNldCBgZXZlbnRRdWV1ZWAgdG8gbnVsbCBiZWZvcmUgcHJvY2Vz
c2luZyBpdCBzbyB0aGF0IHdlIGNhbiB0ZWxsIGlmIG1vcmVcbiAgICAvLyBldmVudHMgZ2V0IGVu
cXVldWVkIHdoaWxlIHByb2Nlc3NpbmcuXG4gICAgdmFyIHByb2Nlc3NpbmdFdmVudFF1ZXVlID0g
ZXZlbnRRdWV1ZTtcbiAgICBldmVudFF1ZXVlID0gbnVsbDtcbiAgICBpZiAoc2ltdWxhdGVkKSB7
XG4gICAgICBmb3JFYWNoQWNjdW11bGF0ZWQocHJvY2Vzc2luZ0V2ZW50UXVldWUsIGV4ZWN1dGVE
aXNwYXRjaGVzQW5kUmVsZWFzZVNpbXVsYXRlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvckVh
Y2hBY2N1bXVsYXRlZChwcm9jZXNzaW5nRXZlbnRRdWV1ZSwgZXhlY3V0ZURpc3BhdGNoZXNBbmRS
ZWxlYXNlVG9wTGV2ZWwpO1xuICAgIH1cbiAgICAhIWV2ZW50UXVldWUgPyAgZmFsc2UgPyBpbnZh
cmlhbnQoZmFsc2UsICdwcm9jZXNzRXZlbnRRdWV1ZSgpOiBBZGRpdGlvbmFsIGV2ZW50cyB3ZXJl
IGVucXVldWVkIHdoaWxlIHByb2Nlc3NpbmcgYW4gZXZlbnQgcXVldWUuIFN1cHBvcnQgZm9yIHRo
aXMgaGFzIG5vdCB5ZXQgYmVlbiBpbXBsZW1lbnRlZC4nKSA6IF9wcm9kSW52YXJpYW50KCc5NScp
IDogdm9pZCAwO1xuICAgIC8vIFRoaXMgd291bGQgYmUgYSBnb29kIHRpbWUgdG8gcmV0aHJvdyBp
ZiBhbnkgb2YgdGhlIGV2ZW50IGhhbmRsZXJzIHRocmV3LlxuICAgIFJlYWN0RXJyb3JVdGlscy5y
ZXRocm93Q2F1Z2h0RXJyb3IoKTtcbiAgfSxcblxuICAvKipcbiAgICogVGhlc2UgYXJlIG5lZWRl
ZCBmb3IgdGVzdHMgb25seS4gRG8gbm90IHVzZSFcbiAgICovXG4gIF9fcHVyZ2U6IGZ1bmN0aW9u
ICgpIHtcbiAgICBsaXN0ZW5lckJhbmsgPSB7fTtcbiAgfSxcblxuICBfX2dldExpc3RlbmVyQmFu
azogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBsaXN0ZW5lckJhbms7XG4gIH1cbn07XG5cbm1v
ZHVsZS5leHBvcnRzID0gRXZlbnRQbHVnaW5IdWI7XG5cbi8qKiovIH0pLFxuLyogMjEgKi9cbi8q
KiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxu
XCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29r
LCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUg
aXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICog
TElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBB
biBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0
aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuXG5cbnZh
ciBTeW50aGV0aWNFdmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xuXG52YXIgZ2V0RXZl
bnRUYXJnZXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0KTtcblxuLyoqXG4gKiBAaW50ZXJmYWNl
IFVJRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRz
L1xuICovXG52YXIgVUlFdmVudEludGVyZmFjZSA9IHtcbiAgdmlldzogZnVuY3Rpb24gKGV2ZW50
KSB7XG4gICAgaWYgKGV2ZW50LnZpZXcpIHtcbiAgICAgIHJldHVybiBldmVudC52aWV3O1xuICAg
IH1cblxuICAgIHZhciB0YXJnZXQgPSBnZXRFdmVudFRhcmdldChldmVudCk7XG4gICAgaWYgKHRh
cmdldC53aW5kb3cgPT09IHRhcmdldCkge1xuICAgICAgLy8gdGFyZ2V0IGlzIGEgd2luZG93IG9i
amVjdFxuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICB2YXIgZG9jID0gdGFyZ2V0
Lm93bmVyRG9jdW1lbnQ7XG4gICAgLy8gVE9ETzogRmlndXJlIG91dCB3aHkgYG93bmVyRG9jdW1l
bnRgIGlzIHNvbWV0aW1lcyB1bmRlZmluZWQgaW4gSUU4LlxuICAgIGlmIChkb2MpIHtcbiAgICAg
IHJldHVybiBkb2MuZGVmYXVsdFZpZXcgfHwgZG9jLnBhcmVudFdpbmRvdztcbiAgICB9IGVsc2Ug
e1xuICAgICAgcmV0dXJuIHdpbmRvdztcbiAgICB9XG4gIH0sXG4gIGRldGFpbDogZnVuY3Rpb24g
KGV2ZW50KSB7XG4gICAgcmV0dXJuIGV2ZW50LmRldGFpbCB8fCAwO1xuICB9XG59O1xuXG4vKipc
biAqIEBwYXJhbSB7b2JqZWN0fSBkaXNwYXRjaENvbmZpZyBDb25maWd1cmF0aW9uIHVzZWQgdG8g
ZGlzcGF0Y2ggdGhpcyBldmVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXNwYXRjaE1hcmtlciBN
YXJrZXIgaWRlbnRpZnlpbmcgdGhlIGV2ZW50IHRhcmdldC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBu
YXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEBleHRlbmRzIHtTeW50aGV0aWNF
dmVudH1cbiAqL1xuZnVuY3Rpb24gU3ludGhldGljVUlFdmVudChkaXNwYXRjaENvbmZpZywgZGlz
cGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICByZXR1cm4g
U3ludGhldGljRXZlbnQuY2FsbCh0aGlzLCBkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIs
IG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG59XG5cblN5bnRoZXRpY0V2ZW50LmF1
Z21lbnRDbGFzcyhTeW50aGV0aWNVSUV2ZW50LCBVSUV2ZW50SW50ZXJmYWNlKTtcblxubW9kdWxl
LmV4cG9ydHMgPSBTeW50aGV0aWNVSUV2ZW50O1xuXG4vKioqLyB9KSxcbi8qIDIyICovXG4vKioq
LyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwi
dXNlIHN0cmljdFwiO1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywg
SW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlz
IGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJ
Q0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4g
YWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhl
IFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cblxuXG4vKipc
biAqIGBSZWFjdEluc3RhbmNlTWFwYCBtYWludGFpbnMgYSBtYXBwaW5nIGZyb20gYSBwdWJsaWMg
ZmFjaW5nIHN0YXRlZnVsXG4gKiBpbnN0YW5jZSAoa2V5KSBhbmQgdGhlIGludGVybmFsIHJlcHJl
c2VudGF0aW9uICh2YWx1ZSkuIFRoaXMgYWxsb3dzIHB1YmxpY1xuICogbWV0aG9kcyB0byBhY2Nl
cHQgdGhlIHVzZXIgZmFjaW5nIGluc3RhbmNlIGFzIGFuIGFyZ3VtZW50IGFuZCBtYXAgdGhlbSBi
YWNrXG4gKiB0byBpbnRlcm5hbCBtZXRob2RzLlxuICovXG5cbi8vIFRPRE86IFJlcGxhY2UgdGhp
cyB3aXRoIEVTNjogdmFyIFJlYWN0SW5zdGFuY2VNYXAgPSBuZXcgTWFwKCk7XG5cbnZhciBSZWFj
dEluc3RhbmNlTWFwID0ge1xuICAvKipcbiAgICogVGhpcyBBUEkgc2hvdWxkIGJlIGNhbGxlZCBg
ZGVsZXRlYCBidXQgd2UnZCBoYXZlIHRvIG1ha2Ugc3VyZSB0byBhbHdheXNcbiAgICogdHJhbnNm
b3JtIHRoZXNlIHRvIHN0cmluZ3MgZm9yIElFIHN1cHBvcnQuIFdoZW4gdGhpcyB0cmFuc2Zvcm0g
aXMgZnVsbHlcbiAgICogc3VwcG9ydGVkIHdlIGNhbiByZW5hbWUgaXQuXG4gICAqL1xuICByZW1v
dmU6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICBrZXkuX3JlYWN0SW50ZXJuYWxJbnN0YW5jZSA9IHVu
ZGVmaW5lZDtcbiAgfSxcblxuICBnZXQ6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4ga2V5
Ll9yZWFjdEludGVybmFsSW5zdGFuY2U7XG4gIH0sXG5cbiAgaGFzOiBmdW5jdGlvbiAoa2V5KSB7
XG4gICAgcmV0dXJuIGtleS5fcmVhY3RJbnRlcm5hbEluc3RhbmNlICE9PSB1bmRlZmluZWQ7XG4g
IH0sXG5cbiAgc2V0OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIGtleS5fcmVhY3RJbnRl
cm5hbEluc3RhbmNlID0gdmFsdWU7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RJ
bnN0YW5jZU1hcDtcblxuLyoqKi8gfSksXG4vKiAyMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVs
ZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8q
KlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwg
cmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5k
ZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdy
YW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxl
IGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuXG5cbnZhciBlbXB0eU9iamVjdCA9
IHt9O1xuXG5pZiAoZmFsc2UpIHtcbiAgT2JqZWN0LmZyZWV6ZShlbXB0eU9iamVjdCk7XG59XG5c
bm1vZHVsZS5leHBvcnRzID0gZW1wdHlPYmplY3Q7XG5cbi8qKiovIH0pLFxuLyogMjQgKi9cbi8q
KiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxu
XCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29r
LCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUg
aXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICog
TElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBB
biBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0
aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG5c
blxudmFyIF9wcm9kSW52YXJpYW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcblxudmFyIGlu
dmFyaWFudCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbnZhciBPQlNFUlZFRF9FUlJPUiA9
IHt9O1xuXG4vKipcbiAqIGBUcmFuc2FjdGlvbmAgY3JlYXRlcyBhIGJsYWNrIGJveCB0aGF0IGlz
IGFibGUgdG8gd3JhcCBhbnkgbWV0aG9kIHN1Y2ggdGhhdFxuICogY2VydGFpbiBpbnZhcmlhbnRz
IGFyZSBtYWludGFpbmVkIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG1ldGhvZCBpcyBpbnZva2VkXG4g
KiAoRXZlbiBpZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIHdoaWxlIGludm9raW5nIHRoZSB3cmFw
cGVkIG1ldGhvZCkuIFdob2V2ZXJcbiAqIGluc3RhbnRpYXRlcyBhIHRyYW5zYWN0aW9uIGNhbiBw
cm92aWRlIGVuZm9yY2VycyBvZiB0aGUgaW52YXJpYW50cyBhdFxuICogY3JlYXRpb24gdGltZS4g
VGhlIGBUcmFuc2FjdGlvbmAgY2xhc3MgaXRzZWxmIHdpbGwgc3VwcGx5IG9uZSBhZGRpdGlvbmFs
XG4gKiBhdXRvbWF0aWMgaW52YXJpYW50IGZvciB5b3UgLSB0aGUgaW52YXJpYW50IHRoYXQgYW55
IHRyYW5zYWN0aW9uIGluc3RhbmNlXG4gKiBzaG91bGQgbm90IGJlIHJ1biB3aGlsZSBpdCBpcyBh
bHJlYWR5IGJlaW5nIHJ1bi4gWW91IHdvdWxkIHR5cGljYWxseSBjcmVhdGUgYVxuICogc2luZ2xl
IGluc3RhbmNlIG9mIGEgYFRyYW5zYWN0aW9uYCBmb3IgcmV1c2UgbXVsdGlwbGUgdGltZXMsIHRo
YXQgcG90ZW50aWFsbHlcbiAqIGlzIHVzZWQgdG8gd3JhcCBzZXZlcmFsIGRpZmZlcmVudCBtZXRo
b2RzLiBXcmFwcGVycyBhcmUgZXh0cmVtZWx5IHNpbXBsZSAtXG4gKiB0aGV5IG9ubHkgcmVxdWly
ZSBpbXBsZW1lbnRpbmcgdHdvIG1ldGhvZHMuXG4gKlxuICogPHByZT5cbiAqICAgICAgICAgICAg
ICAgICAgICAgICB3cmFwcGVycyAoaW5qZWN0ZWQgYXQgY3JlYXRpb24gdGltZSlcbiAqICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICAgICAgICArXG4gKiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfFxuICogICAgICAgICAgICAgICAg
ICAgICstLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS0tLS0tLS0tLStcbiAqICAgICAg
ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB2ICAgICAgICB8ICAgICAgICAgICAgICB8
XG4gKiAgICAgICAgICAgICAgICAgICAgfCAgICAgICstLS0tLS0tLS0tLS0tLS0rICAgfCAgICAg
ICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgIHwgICArLS18ICAgIHdyYXBwZXIxICAg
fC0tLXwtLS0tKyAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICB8ICAgfCAgKy0tLS0t
LS0tLS0tLS0tLSsgICB2ICAgIHwgICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgfCAg
IHwgICAgICAgICAgKy0tLS0tLS0tLS0tLS0rICB8ICAgICAgICAgfFxuICogICAgICAgICAgICAg
ICAgICAgIHwgICB8ICAgICArLS0tLXwgICB3cmFwcGVyMiAgfC0tLS0tLS0tKyAgIHxcbiAqICAg
ICAgICAgICAgICAgICAgICB8ICAgfCAgICAgfCAgICArLS0tLS0tLS0tLS0tLSsgIHwgICAgIHwg
ICB8XG4gKiAgICAgICAgICAgICAgICAgICAgfCAgIHwgICAgIHwgICAgICAgICAgICAgICAgICAg
ICB8ICAgICB8ICAgfFxuICogICAgICAgICAgICAgICAgICAgIHwgICB2ICAgICB2ICAgICAgICAg
ICAgICAgICAgICAgdiAgICAgdiAgIHwgd3JhcHBlclxuICogICAgICAgICAgICAgICAgICAgIHwg
Ky0tLSsgKy0tLSsgICArLS0tLS0tLS0tKyAgICstLS0rICstLS0rIHwgaW52YXJpYW50c1xuICog
cGVyZm9ybShhbnlNZXRob2QpIHwgfCAgIHwgfCAgIHwgICB8ICAgICAgICAgfCAgIHwgICB8IHwg
ICB8IHwgbWFpbnRhaW5lZFxuICogKy0tLS0tLS0tLS0tLS0tLS0tPnwtfC0tLXwtfC0tLXwtLT58
YW55TWV0aG9kfC0tLXwtLS18LXwtLS18LXwtLS0tLS0tLT5cbiAqICAgICAgICAgICAgICAgICAg
ICB8IHwgICB8IHwgICB8ICAgfCAgICAgICAgIHwgICB8ICAgfCB8ICAgfCB8XG4gKiAgICAgICAg
ICAgICAgICAgICAgfCB8ICAgfCB8ICAgfCAgIHwgICAgICAgICB8ICAgfCAgIHwgfCAgIHwgfFxu
ICogICAgICAgICAgICAgICAgICAgIHwgfCAgIHwgfCAgIHwgICB8ICAgICAgICAgfCAgIHwgICB8
IHwgICB8IHxcbiAqICAgICAgICAgICAgICAgICAgICB8ICstLS0rICstLS0rICAgKy0tLS0tLS0t
LSsgICArLS0tKyArLS0tKyB8XG4gKiAgICAgICAgICAgICAgICAgICAgfCAgaW5pdGlhbGl6ZSAg
ICAgICAgICAgICAgICAgICAgY2xvc2UgICAgfFxuICogICAgICAgICAgICAgICAgICAgICstLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAqIDwvcHJlPlxuICpcbiAq
IFVzZSBjYXNlczpcbiAqIC0gUHJlc2VydmluZyB0aGUgaW5wdXQgc2VsZWN0aW9uIHJhbmdlcyBi
ZWZvcmUvYWZ0ZXIgcmVjb25jaWxpYXRpb24uXG4gKiAgIFJlc3RvcmluZyBzZWxlY3Rpb24gZXZl
biBpbiB0aGUgZXZlbnQgb2YgYW4gdW5leHBlY3RlZCBlcnJvci5cbiAqIC0gRGVhY3RpdmF0aW5n
IGV2ZW50cyB3aGlsZSByZWFycmFuZ2luZyB0aGUgRE9NLCBwcmV2ZW50aW5nIGJsdXJzL2ZvY3Vz
ZXMsXG4gKiAgIHdoaWxlIGd1YXJhbnRlZWluZyB0aGF0IGFmdGVyd2FyZHMsIHRoZSBldmVudCBz
eXN0ZW0gaXMgcmVhY3RpdmF0ZWQuXG4gKiAtIEZsdXNoaW5nIGEgcXVldWUgb2YgY29sbGVjdGVk
IERPTSBtdXRhdGlvbnMgdG8gdGhlIG1haW4gVUkgdGhyZWFkIGFmdGVyIGFcbiAqICAgcmVjb25j
aWxpYXRpb24gdGFrZXMgcGxhY2UgaW4gYSB3b3JrZXIgdGhyZWFkLlxuICogLSBJbnZva2luZyBh
bnkgY29sbGVjdGVkIGBjb21wb25lbnREaWRVcGRhdGVgIGNhbGxiYWNrcyBhZnRlciByZW5kZXJp
bmcgbmV3XG4gKiAgIGNvbnRlbnQuXG4gKiAtIChGdXR1cmUgdXNlIGNhc2UpOiBXcmFwcGluZyBw
YXJ0aWN1bGFyIGZsdXNoZXMgb2YgdGhlIGBSZWFjdFdvcmtlcmAgcXVldWVcbiAqICAgdG8gcHJl
c2VydmUgdGhlIGBzY3JvbGxUb3BgIChhbiBhdXRvbWF0aWMgc2Nyb2xsIGF3YXJlIERPTSkuXG4g
KiAtIChGdXR1cmUgdXNlIGNhc2UpOiBMYXlvdXQgY2FsY3VsYXRpb25zIGJlZm9yZSBhbmQgYWZ0
ZXIgRE9NIHVwZGF0ZXMuXG4gKlxuICogVHJhbnNhY3Rpb25hbCBwbHVnaW4gQVBJOlxuICogLSBB
IG1vZHVsZSB0aGF0IGhhcyBhbiBgaW5pdGlhbGl6ZWAgbWV0aG9kIHRoYXQgcmV0dXJucyBhbnkg
cHJlY29tcHV0YXRpb24uXG4gKiAtIGFuZCBhIGBjbG9zZWAgbWV0aG9kIHRoYXQgYWNjZXB0cyB0
aGUgcHJlY29tcHV0YXRpb24uIGBjbG9zZWAgaXMgaW52b2tlZFxuICogICB3aGVuIHRoZSB3cmFw
cGVkIHByb2Nlc3MgaXMgY29tcGxldGVkLCBvciBoYXMgZmFpbGVkLlxuICpcbiAqIEBwYXJhbSB7
QXJyYXk8VHJhbnNhY3Rpb25hbFdyYXBwZXI+fSB0cmFuc2FjdGlvbldyYXBwZXIgV3JhcHBlciBt
b2R1bGVzXG4gKiB0aGF0IGltcGxlbWVudCBgaW5pdGlhbGl6ZWAgYW5kIGBjbG9zZWAuXG4gKiBA
cmV0dXJuIHtUcmFuc2FjdGlvbn0gU2luZ2xlIHRyYW5zYWN0aW9uIGZvciByZXVzZSBpbiB0aHJl
YWQuXG4gKlxuICogQGNsYXNzIFRyYW5zYWN0aW9uXG4gKi9cbnZhciBUcmFuc2FjdGlvbkltcGwg
PSB7XG4gIC8qKlxuICAgKiBTZXRzIHVwIHRoaXMgaW5zdGFuY2Ugc28gdGhhdCBpdCBpcyBwcmVw
YXJlZCBmb3IgY29sbGVjdGluZyBtZXRyaWNzLiBEb2VzXG4gICAqIHNvIHN1Y2ggdGhhdCB0aGlz
IHNldHVwIG1ldGhvZCBtYXkgYmUgdXNlZCBvbiBhbiBpbnN0YW5jZSB0aGF0IGlzIGFscmVhZHlc
biAgICogaW5pdGlhbGl6ZWQsIGluIGEgd2F5IHRoYXQgZG9lcyBub3QgY29uc3VtZSBhZGRpdGlv
bmFsIG1lbW9yeSB1cG9uIHJldXNlLlxuICAgKiBUaGF0IGNhbiBiZSB1c2VmdWwgaWYgeW91IGRl
Y2lkZSB0byBtYWtlIHlvdXIgc3ViY2xhc3Mgb2YgdGhpcyBtaXhpbiBhXG4gICAqIFwiUG9vbGVk
Q2xhc3NcIi5cbiAgICovXG4gIHJlaW5pdGlhbGl6ZVRyYW5zYWN0aW9uOiBmdW5jdGlvbiAoKSB7
XG4gICAgdGhpcy50cmFuc2FjdGlvbldyYXBwZXJzID0gdGhpcy5nZXRUcmFuc2FjdGlvbldyYXBw
ZXJzKCk7XG4gICAgaWYgKHRoaXMud3JhcHBlckluaXREYXRhKSB7XG4gICAgICB0aGlzLndyYXBw
ZXJJbml0RGF0YS5sZW5ndGggPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndyYXBwZXJJ
bml0RGF0YSA9IFtdO1xuICAgIH1cbiAgICB0aGlzLl9pc0luVHJhbnNhY3Rpb24gPSBmYWxzZTtc
biAgfSxcblxuICBfaXNJblRyYW5zYWN0aW9uOiBmYWxzZSxcblxuICAvKipcbiAgICogQGFic3Ry
YWN0XG4gICAqIEByZXR1cm4ge0FycmF5PFRyYW5zYWN0aW9uV3JhcHBlcj59IEFycmF5IG9mIHRy
YW5zYWN0aW9uIHdyYXBwZXJzLlxuICAgKi9cbiAgZ2V0VHJhbnNhY3Rpb25XcmFwcGVyczogbnVs
bCxcblxuICBpc0luVHJhbnNhY3Rpb246IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gISF0aGlz
Ll9pc0luVHJhbnNhY3Rpb247XG4gIH0sXG5cbiAgLyogZXNsaW50LWRpc2FibGUgc3BhY2UtYmVm
b3JlLWZ1bmN0aW9uLXBhcmVuICovXG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSBmdW5jdGlv
biB3aXRoaW4gYSBzYWZldHkgd2luZG93LiBVc2UgdGhpcyBmb3IgdGhlIHRvcCBsZXZlbFxuICAg
KiBtZXRob2RzIHRoYXQgcmVzdWx0IGluIGxhcmdlIGFtb3VudHMgb2YgY29tcHV0YXRpb24vbXV0
YXRpb25zIHRoYXQgd291bGRcbiAgICogbmVlZCB0byBiZSBzYWZldHkgY2hlY2tlZC4gVGhlIG9w
dGlvbmFsIGFyZ3VtZW50cyBoZWxwcyBwcmV2ZW50IHRoZSBuZWVkXG4gICAqIHRvIGJpbmQgaW4g
bWFueSBjYXNlcy5cbiAgICpcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gbWV0aG9kIE1lbWJlciBv
ZiBzY29wZSB0byBjYWxsLlxuICAgKiBAcGFyYW0ge09iamVjdH0gc2NvcGUgU2NvcGUgdG8gaW52
b2tlIGZyb20uXG4gICAqIEBwYXJhbSB7T2JqZWN0Pz19IGEgQXJndW1lbnQgdG8gcGFzcyB0byB0
aGUgbWV0aG9kLlxuICAgKiBAcGFyYW0ge09iamVjdD89fSBiIEFyZ3VtZW50IHRvIHBhc3MgdG8g
dGhlIG1ldGhvZC5cbiAgICogQHBhcmFtIHtPYmplY3Q/PX0gYyBBcmd1bWVudCB0byBwYXNzIHRv
IHRoZSBtZXRob2QuXG4gICAqIEBwYXJhbSB7T2JqZWN0Pz19IGQgQXJndW1lbnQgdG8gcGFzcyB0
byB0aGUgbWV0aG9kLlxuICAgKiBAcGFyYW0ge09iamVjdD89fSBlIEFyZ3VtZW50IHRvIHBhc3Mg
dG8gdGhlIG1ldGhvZC5cbiAgICogQHBhcmFtIHtPYmplY3Q/PX0gZiBBcmd1bWVudCB0byBwYXNz
IHRvIHRoZSBtZXRob2QuXG4gICAqXG4gICAqIEByZXR1cm4geyp9IFJldHVybiB2YWx1ZSBmcm9t
IGBtZXRob2RgLlxuICAgKi9cbiAgcGVyZm9ybTogZnVuY3Rpb24gKG1ldGhvZCwgc2NvcGUsIGEs
IGIsIGMsIGQsIGUsIGYpIHtcbiAgICAvKiBlc2xpbnQtZW5hYmxlIHNwYWNlLWJlZm9yZS1mdW5j
dGlvbi1wYXJlbiAqL1xuICAgICEhdGhpcy5pc0luVHJhbnNhY3Rpb24oKSA/ICBmYWxzZSA/IGlu
dmFyaWFudChmYWxzZSwgJ1RyYW5zYWN0aW9uLnBlcmZvcm0oLi4uKTogQ2Fubm90IGluaXRpYWxp
emUgYSB0cmFuc2FjdGlvbiB3aGVuIHRoZXJlIGlzIGFscmVhZHkgYW4gb3V0c3RhbmRpbmcgdHJh
bnNhY3Rpb24uJykgOiBfcHJvZEludmFyaWFudCgnMjcnKSA6IHZvaWQgMDtcbiAgICB2YXIgZXJy
b3JUaHJvd247XG4gICAgdmFyIHJldDtcbiAgICB0cnkge1xuICAgICAgdGhpcy5faXNJblRyYW5z
YWN0aW9uID0gdHJ1ZTtcbiAgICAgIC8vIENhdGNoaW5nIGVycm9ycyBtYWtlcyBkZWJ1Z2dpbmcg
bW9yZSBkaWZmaWN1bHQsIHNvIHdlIHN0YXJ0IHdpdGhcbiAgICAgIC8vIGVycm9yVGhyb3duIHNl
dCB0byB0cnVlIGJlZm9yZSBzZXR0aW5nIGl0IHRvIGZhbHNlIGFmdGVyIGNhbGxpbmdcbiAgICAg
IC8vIGNsb3NlIC0tIGlmIGl0J3Mgc3RpbGwgc2V0IHRvIHRydWUgaW4gdGhlIGZpbmFsbHkgYmxv
Y2ssIGl0IG1lYW5zXG4gICAgICAvLyBvbmUgb2YgdGhlc2UgY2FsbHMgdGhyZXcuXG4gICAgICBl
cnJvclRocm93biA9IHRydWU7XG4gICAgICB0aGlzLmluaXRpYWxpemVBbGwoMCk7XG4gICAgICBy
ZXQgPSBtZXRob2QuY2FsbChzY29wZSwgYSwgYiwgYywgZCwgZSwgZik7XG4gICAgICBlcnJvclRo
cm93biA9IGZhbHNlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAo
ZXJyb3JUaHJvd24pIHtcbiAgICAgICAgICAvLyBJZiBgbWV0aG9kYCB0aHJvd3MsIHByZWZlciB0
byBzaG93IHRoYXQgc3RhY2sgdHJhY2Ugb3ZlciBhbnkgdGhyb3duXG4gICAgICAgICAgLy8gYnkg
aW52b2tpbmcgYGNsb3NlQWxsYC5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5j
bG9zZUFsbCgwKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHt9XG4gICAgICAgIH0gZWxzZSB7
XG4gICAgICAgICAgLy8gU2luY2UgYG1ldGhvZGAgZGlkbid0IHRocm93LCB3ZSBkb24ndCB3YW50
IHRvIHNpbGVuY2UgdGhlIGV4Y2VwdGlvblxuICAgICAgICAgIC8vIGhlcmUuXG4gICAgICAgICAg
dGhpcy5jbG9zZUFsbCgwKTtcbiAgICAgICAgfVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAg
dGhpcy5faXNJblRyYW5zYWN0aW9uID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVy
biByZXQ7XG4gIH0sXG5cbiAgaW5pdGlhbGl6ZUFsbDogZnVuY3Rpb24gKHN0YXJ0SW5kZXgpIHtc
biAgICB2YXIgdHJhbnNhY3Rpb25XcmFwcGVycyA9IHRoaXMudHJhbnNhY3Rpb25XcmFwcGVycztc
biAgICBmb3IgKHZhciBpID0gc3RhcnRJbmRleDsgaSA8IHRyYW5zYWN0aW9uV3JhcHBlcnMubGVu
Z3RoOyBpKyspIHtcbiAgICAgIHZhciB3cmFwcGVyID0gdHJhbnNhY3Rpb25XcmFwcGVyc1tpXTtc
biAgICAgIHRyeSB7XG4gICAgICAgIC8vIENhdGNoaW5nIGVycm9ycyBtYWtlcyBkZWJ1Z2dpbmcg
bW9yZSBkaWZmaWN1bHQsIHNvIHdlIHN0YXJ0IHdpdGggdGhlXG4gICAgICAgIC8vIE9CU0VSVkVE
X0VSUk9SIHN0YXRlIGJlZm9yZSBvdmVyd3JpdGluZyBpdCB3aXRoIHRoZSByZWFsIHJldHVybiB2
YWx1ZVxuICAgICAgICAvLyBvZiBpbml0aWFsaXplIC0tIGlmIGl0J3Mgc3RpbGwgc2V0IHRvIE9C
U0VSVkVEX0VSUk9SIGluIHRoZSBmaW5hbGx5XG4gICAgICAgIC8vIGJsb2NrLCBpdCBtZWFucyB3
cmFwcGVyLmluaXRpYWxpemUgdGhyZXcuXG4gICAgICAgIHRoaXMud3JhcHBlckluaXREYXRhW2ld
ID0gT0JTRVJWRURfRVJST1I7XG4gICAgICAgIHRoaXMud3JhcHBlckluaXREYXRhW2ldID0gd3Jh
cHBlci5pbml0aWFsaXplID8gd3JhcHBlci5pbml0aWFsaXplLmNhbGwodGhpcykgOiBudWxsO1xu
ICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKHRoaXMud3JhcHBlckluaXREYXRhW2ldID09
PSBPQlNFUlZFRF9FUlJPUikge1xuICAgICAgICAgIC8vIFRoZSBpbml0aWFsaXplciBmb3Igd3Jh
cHBlciBpIHRocmV3IGFuIGVycm9yOyBpbml0aWFsaXplIHRoZVxuICAgICAgICAgIC8vIHJlbWFp
bmluZyB3cmFwcGVycyBidXQgc2lsZW5jZSBhbnkgZXhjZXB0aW9ucyBmcm9tIHRoZW0gdG8gZW5z
dXJlXG4gICAgICAgICAgLy8gdGhhdCB0aGUgZmlyc3QgZXJyb3IgaXMgdGhlIG9uZSB0byBidWJi
bGUgdXAuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUFsbChp
ICsgMSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7fVxuICAgICAgICB9XG4gICAgICB9XG4g
ICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBJbnZva2VzIGVhY2ggb2YgYHRoaXMudHJhbnNhY3Rp
b25XcmFwcGVycy5jbG9zZVtpXWAgZnVuY3Rpb25zLCBwYXNzaW5nIGludG9cbiAgICogdGhlbSB0
aGUgcmVzcGVjdGl2ZSByZXR1cm4gdmFsdWVzIG9mIGB0aGlzLnRyYW5zYWN0aW9uV3JhcHBlcnMu
aW5pdFtpXWBcbiAgICogKGBjbG9zZWBycyB0aGF0IGNvcnJlc3BvbmQgdG8gaW5pdGlhbGl6ZXJz
IHRoYXQgZmFpbGVkIHdpbGwgbm90IGJlXG4gICAqIGludm9rZWQpLlxuICAgKi9cbiAgY2xvc2VB
bGw6IGZ1bmN0aW9uIChzdGFydEluZGV4KSB7XG4gICAgIXRoaXMuaXNJblRyYW5zYWN0aW9uKCkg
PyAgZmFsc2UgPyBpbnZhcmlhbnQoZmFsc2UsICdUcmFuc2FjdGlvbi5jbG9zZUFsbCgpOiBDYW5u
b3QgY2xvc2UgdHJhbnNhY3Rpb24gd2hlbiBub25lIGFyZSBvcGVuLicpIDogX3Byb2RJbnZhcmlh
bnQoJzI4JykgOiB2b2lkIDA7XG4gICAgdmFyIHRyYW5zYWN0aW9uV3JhcHBlcnMgPSB0aGlzLnRy
YW5zYWN0aW9uV3JhcHBlcnM7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXg7IGkgPCB0cmFu
c2FjdGlvbldyYXBwZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgd3JhcHBlciA9IHRyYW5z
YWN0aW9uV3JhcHBlcnNbaV07XG4gICAgICB2YXIgaW5pdERhdGEgPSB0aGlzLndyYXBwZXJJbml0
RGF0YVtpXTtcbiAgICAgIHZhciBlcnJvclRocm93bjtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8v
IENhdGNoaW5nIGVycm9ycyBtYWtlcyBkZWJ1Z2dpbmcgbW9yZSBkaWZmaWN1bHQsIHNvIHdlIHN0
YXJ0IHdpdGhcbiAgICAgICAgLy8gZXJyb3JUaHJvd24gc2V0IHRvIHRydWUgYmVmb3JlIHNldHRp
bmcgaXQgdG8gZmFsc2UgYWZ0ZXIgY2FsbGluZ1xuICAgICAgICAvLyBjbG9zZSAtLSBpZiBpdCdz
IHN0aWxsIHNldCB0byB0cnVlIGluIHRoZSBmaW5hbGx5IGJsb2NrLCBpdCBtZWFuc1xuICAgICAg
ICAvLyB3cmFwcGVyLmNsb3NlIHRocmV3LlxuICAgICAgICBlcnJvclRocm93biA9IHRydWU7XG4g
ICAgICAgIGlmIChpbml0RGF0YSAhPT0gT0JTRVJWRURfRVJST1IgJiYgd3JhcHBlci5jbG9zZSkg
e1xuICAgICAgICAgIHdyYXBwZXIuY2xvc2UuY2FsbCh0aGlzLCBpbml0RGF0YSk7XG4gICAgICAg
IH1cbiAgICAgICAgZXJyb3JUaHJvd24gPSBmYWxzZTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAg
ICAgIGlmIChlcnJvclRocm93bikge1xuICAgICAgICAgIC8vIFRoZSBjbG9zZXIgZm9yIHdyYXBw
ZXIgaSB0aHJldyBhbiBlcnJvcjsgY2xvc2UgdGhlIHJlbWFpbmluZ1xuICAgICAgICAgIC8vIHdy
YXBwZXJzIGJ1dCBzaWxlbmNlIGFueSBleGNlcHRpb25zIGZyb20gdGhlbSB0byBlbnN1cmUgdGhh
dCB0aGVcbiAgICAgICAgICAvLyBmaXJzdCBlcnJvciBpcyB0aGUgb25lIHRvIGJ1YmJsZSB1cC5c
biAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZUFsbChpICsgMSk7XG4gICAg
ICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlz
LndyYXBwZXJJbml0RGF0YS5sZW5ndGggPSAwO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9
IFRyYW5zYWN0aW9uSW1wbDtcblxuLyoqKi8gfSksXG4vKiAyNSAqL1xuLyoqKi8gKGZ1bmN0aW9u
KG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3Rc
Ijtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1
bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwg
Z3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZp
bGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG5cblxudmFyIFN5bnRoZXRpY1VJ
RXZlbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTtcbnZhciBWaWV3cG9ydE1ldHJpY3MgPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKDY2KTtcblxudmFyIGdldEV2ZW50TW9kaWZpZXJTdGF0ZSA9IF9f
d2VicGFja19yZXF1aXJlX18oMzYpO1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgTW91c2VFdmVudFxu
ICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cbnZh
ciBNb3VzZUV2ZW50SW50ZXJmYWNlID0ge1xuICBzY3JlZW5YOiBudWxsLFxuICBzY3JlZW5ZOiBu
dWxsLFxuICBjbGllbnRYOiBudWxsLFxuICBjbGllbnRZOiBudWxsLFxuICBjdHJsS2V5OiBudWxs
LFxuICBzaGlmdEtleTogbnVsbCxcbiAgYWx0S2V5OiBudWxsLFxuICBtZXRhS2V5OiBudWxsLFxu
ICBnZXRNb2RpZmllclN0YXRlOiBnZXRFdmVudE1vZGlmaWVyU3RhdGUsXG4gIGJ1dHRvbjogZnVu
Y3Rpb24gKGV2ZW50KSB7XG4gICAgLy8gV2Via2l0LCBGaXJlZm94LCBJRTkrXG4gICAgLy8gd2hp
Y2g6ICAxIDIgM1xuICAgIC8vIGJ1dHRvbjogMCAxIDIgKHN0YW5kYXJkKVxuICAgIHZhciBidXR0
b24gPSBldmVudC5idXR0b247XG4gICAgaWYgKCd3aGljaCcgaW4gZXZlbnQpIHtcbiAgICAgIHJl
dHVybiBidXR0b247XG4gICAgfVxuICAgIC8vIElFPDlcbiAgICAvLyB3aGljaDogIHVuZGVmaW5l
ZFxuICAgIC8vIGJ1dHRvbjogMCAwIDBcbiAgICAvLyBidXR0b246IDEgNCAyIChvbm1vdXNldXAp
XG4gICAgcmV0dXJuIGJ1dHRvbiA9PT0gMiA/IDIgOiBidXR0b24gPT09IDQgPyAxIDogMDtcbiAg
fSxcbiAgYnV0dG9uczogbnVsbCxcbiAgcmVsYXRlZFRhcmdldDogZnVuY3Rpb24gKGV2ZW50KSB7
XG4gICAgcmV0dXJuIGV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgKGV2ZW50LmZyb21FbGVtZW50ID09
PSBldmVudC5zcmNFbGVtZW50ID8gZXZlbnQudG9FbGVtZW50IDogZXZlbnQuZnJvbUVsZW1lbnQp
O1xuICB9LFxuICAvLyBcIlByb3ByaWV0YXJ5XCIgSW50ZXJmYWNlLlxuICBwYWdlWDogZnVuY3Rp
b24gKGV2ZW50KSB7XG4gICAgcmV0dXJuICdwYWdlWCcgaW4gZXZlbnQgPyBldmVudC5wYWdlWCA6
IGV2ZW50LmNsaWVudFggKyBWaWV3cG9ydE1ldHJpY3MuY3VycmVudFNjcm9sbExlZnQ7XG4gIH0s
XG4gIHBhZ2VZOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gJ3BhZ2VZJyBpbiBldmVu
dCA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WSArIFZpZXdwb3J0TWV0cmljcy5jdXJyZW50
U2Nyb2xsVG9wO1xuICB9XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkaXNwYXRjaENv
bmZpZyBDb25maWd1cmF0aW9uIHVzZWQgdG8gZGlzcGF0Y2ggdGhpcyBldmVudC5cbiAqIEBwYXJh
bSB7c3RyaW5nfSBkaXNwYXRjaE1hcmtlciBNYXJrZXIgaWRlbnRpZnlpbmcgdGhlIGV2ZW50IHRh
cmdldC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVu
dC5cbiAqIEBleHRlbmRzIHtTeW50aGV0aWNVSUV2ZW50fVxuICovXG5mdW5jdGlvbiBTeW50aGV0
aWNNb3VzZUV2ZW50KGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQs
IG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHJldHVybiBTeW50aGV0aWNVSUV2ZW50LmNhbGwodGhp
cywgZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZl
bnRUYXJnZXQpO1xufVxuXG5TeW50aGV0aWNVSUV2ZW50LmF1Z21lbnRDbGFzcyhTeW50aGV0aWNN
b3VzZUV2ZW50LCBNb3VzZUV2ZW50SW50ZXJmYWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW50
aGV0aWNNb3VzZUV2ZW50O1xuXG4vKioqLyB9KSxcbi8qIDI2ICovXG4vKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwi
O1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxs
IHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVu
ZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBp
biB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBn
cmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmls
ZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cblxuXG52YXIgRXhlY3V0aW9uRW52
aXJvbm1lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xudmFyIERPTU5hbWVzcGFjZXMgPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKDM4KTtcblxudmFyIFdISVRFU1BBQ0VfVEVTVCA9IC9eWyBcXHJc
XG5cXHRcXGZdLztcbnZhciBOT05WSVNJQkxFX1RFU1QgPSAvPCghLS18bGlua3xub3NjcmlwdHxt
ZXRhfHNjcmlwdHxzdHlsZSlbIFxcclxcblxcdFxcZlxcLz5dLztcblxudmFyIGNyZWF0ZU1pY3Jv
c29mdFVuc2FmZUxvY2FsRnVuY3Rpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM5KTtcblxuLy8g
U1ZHIHRlbXAgY29udGFpbmVyIGZvciBJRSBsYWNraW5nIGlubmVySFRNTFxudmFyIHJldXNhYmxl
U1ZHQ29udGFpbmVyO1xuXG4vKipcbiAqIFNldCB0aGUgaW5uZXJIVE1MIHByb3BlcnR5IG9mIGEg
bm9kZSwgZW5zdXJpbmcgdGhhdCB3aGl0ZXNwYWNlIGlzIHByZXNlcnZlZFxuICogZXZlbiBpbiBJ
RTguXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKiBAcGFyYW0ge3N0cmluZ30g
aHRtbFxuICogQGludGVybmFsXG4gKi9cbnZhciBzZXRJbm5lckhUTUwgPSBjcmVhdGVNaWNyb3Nv
ZnRVbnNhZmVMb2NhbEZ1bmN0aW9uKGZ1bmN0aW9uIChub2RlLCBodG1sKSB7XG4gIC8vIElFIGRv
ZXMgbm90IGhhdmUgaW5uZXJIVE1MIGZvciBTVkcgbm9kZXMsIHNvIGluc3RlYWQgd2UgaW5qZWN0
IHRoZVxuICAvLyBuZXcgbWFya3VwIGluIGEgdGVtcCBub2RlIGFuZCB0aGVuIG1vdmUgdGhlIGNo
aWxkIG5vZGVzIGFjcm9zcyBpbnRvXG4gIC8vIHRoZSB0YXJnZXQgbm9kZVxuICBpZiAobm9kZS5u
YW1lc3BhY2VVUkkgPT09IERPTU5hbWVzcGFjZXMuc3ZnICYmICEoJ2lubmVySFRNTCcgaW4gbm9k
ZSkpIHtcbiAgICByZXVzYWJsZVNWR0NvbnRhaW5lciA9IHJldXNhYmxlU1ZHQ29udGFpbmVyIHx8
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHJldXNhYmxlU1ZHQ29udGFpbmVy
LmlubmVySFRNTCA9ICc8c3ZnPicgKyBodG1sICsgJzwvc3ZnPic7XG4gICAgdmFyIHN2Z05vZGUg
PSByZXVzYWJsZVNWR0NvbnRhaW5lci5maXJzdENoaWxkO1xuICAgIHdoaWxlIChzdmdOb2RlLmZp
cnN0Q2hpbGQpIHtcbiAgICAgIG5vZGUuYXBwZW5kQ2hpbGQoc3ZnTm9kZS5maXJzdENoaWxkKTtc
biAgICB9XG4gIH0gZWxzZSB7XG4gICAgbm9kZS5pbm5lckhUTUwgPSBodG1sO1xuICB9XG59KTtc
blxuaWYgKEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSkge1xuICAvLyBJRTg6IFdoZW4g
dXBkYXRpbmcgYSBqdXN0IGNyZWF0ZWQgbm9kZSB3aXRoIGlubmVySFRNTCBvbmx5IGxlYWRpbmdc
biAgLy8gd2hpdGVzcGFjZSBpcyByZW1vdmVkLiBXaGVuIHVwZGF0aW5nIGFuIGV4aXN0aW5nIG5v
ZGUgd2l0aCBpbm5lckhUTUxcbiAgLy8gd2hpdGVzcGFjZSBpbiByb290IFRleHROb2RlcyBpcyBh
bHNvIGNvbGxhcHNlZC5cbiAgLy8gQHNlZSBxdWlya3Ntb2RlLm9yZy9idWdyZXBvcnRzL2FyY2hp
dmVzLzIwMDQvMTEvaW5uZXJodG1sX2FuZF90Lmh0bWxcblxuICAvLyBGZWF0dXJlIGRldGVjdGlv
bjsgb25seSBJRTggaXMga25vd24gdG8gYmVoYXZlIGltcHJvcGVybHkgbGlrZSB0aGlzLlxuICB2
YXIgdGVzdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgdGVzdEVs
ZW1lbnQuaW5uZXJIVE1MID0gJyAnO1xuICBpZiAodGVzdEVsZW1lbnQuaW5uZXJIVE1MID09PSAn
Jykge1xuICAgIHNldElubmVySFRNTCA9IGZ1bmN0aW9uIChub2RlLCBodG1sKSB7XG4gICAgICAv
LyBNYWdpYyB0aGVvcnk6IElFOCBzdXBwb3NlZGx5IGRpZmZlcmVudGlhdGVzIGJldHdlZW4gYWRk
ZWQgYW5kIHVwZGF0ZWRcbiAgICAgIC8vIG5vZGVzIHdoZW4gcHJvY2Vzc2luZyBpbm5lckhUTUws
IGlubmVySFRNTCBvbiB1cGRhdGVkIG5vZGVzIHN1ZmZlcnNcbiAgICAgIC8vIGZyb20gd29yc2Ug
d2hpdGVzcGFjZSBiZWhhdmlvci4gUmUtYWRkaW5nIGEgbm9kZSBsaWtlIHRoaXMgdHJpZ2dlcnNc
biAgICAgIC8vIHRoZSBpbml0aWFsIGFuZCBtb3JlIGZhdm9yYWJsZSB3aGl0ZXNwYWNlIGJlaGF2
aW9yLlxuICAgICAgLy8gVE9ETzogV2hhdCB0byBkbyBvbiBhIGRldGFjaGVkIG5vZGU/XG4gICAg
ICBpZiAobm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgIG5vZGUucGFyZW50Tm9kZS5yZXBsYWNl
Q2hpbGQobm9kZSwgbm9kZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFdlIGFsc28gaW1wbGVtZW50
IGEgd29ya2Fyb3VuZCBmb3Igbm9uLXZpc2libGUgdGFncyBkaXNhcHBlYXJpbmcgaW50b1xuICAg
ICAgLy8gdGhpbiBhaXIgb24gSUU4LCB0aGlzIG9ubHkgaGFwcGVucyBpZiB0aGVyZSBpcyBubyB2
aXNpYmxlIHRleHRcbiAgICAgIC8vIGluLWZyb250IG9mIHRoZSBub24tdmlzaWJsZSB0YWdzLiBQ
aWdneWJhY2sgb24gdGhlIHdoaXRlc3BhY2UgZml4XG4gICAgICAvLyBhbmQgc2ltcGx5IGNoZWNr
IGlmIGFueSBub24tdmlzaWJsZSB0YWdzIGFwcGVhciBpbiB0aGUgc291cmNlLlxuICAgICAgaWYg
KFdISVRFU1BBQ0VfVEVTVC50ZXN0KGh0bWwpIHx8IGh0bWxbMF0gPT09ICc8JyAmJiBOT05WSVNJ
QkxFX1RFU1QudGVzdChodG1sKSkge1xuICAgICAgICAvLyBSZWNvdmVyIGxlYWRpbmcgd2hpdGVz
cGFjZSBieSB0ZW1wb3JhcmlseSBwcmVwZW5kaW5nIGFueSBjaGFyYWN0ZXIuXG4gICAgICAgIC8v
IFxcdUZFRkYgaGFzIHRoZSBwb3RlbnRpYWwgYWR2YW50YWdlIG9mIGJlaW5nIHplcm8td2lkdGgv
aW52aXNpYmxlLlxuICAgICAgICAvLyBVZ2xpZnlKUyBkcm9wcyBVK0ZFRkYgY2hhcnMgd2hlbiBw
YXJzaW5nLCBzbyB1c2UgU3RyaW5nLmZyb21DaGFyQ29kZVxuICAgICAgICAvLyBpbiBob3BlcyB0
aGF0IHRoaXMgaXMgcHJlc2VydmVkIGV2ZW4gaWYgXCJcXHVGRUZGXCIgaXMgdHJhbnNmb3JtZWQg
dG9cbiAgICAgICAgLy8gdGhlIGFjdHVhbCBVbmljb2RlIGNoYXJhY3RlciAoYnkgQmFiZWwsIGZv
ciBleGFtcGxlKS5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21pc2hvby9VZ2xpZnlK
UzIvYmxvYi92Mi40LjIwL2xpYi9wYXJzZS5qcyNMMjE2XG4gICAgICAgIG5vZGUuaW5uZXJIVE1M
ID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweGZlZmYpICsgaHRtbDtcblxuICAgICAgICAvLyBkZWxl
dGVEYXRhIGxlYXZlcyBhbiBlbXB0eSBgVGV4dE5vZGVgIHdoaWNoIG9mZnNldHMgdGhlIGluZGV4
IG9mIGFsbFxuICAgICAgICAvLyBjaGlsZHJlbi4gRGVmaW5pdGVseSB3YW50IHRvIGF2b2lkIHRo
aXMuXG4gICAgICAgIHZhciB0ZXh0Tm9kZSA9IG5vZGUuZmlyc3RDaGlsZDtcbiAgICAgICAgaWYg
KHRleHROb2RlLmRhdGEubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgbm9kZS5yZW1vdmVDaGls
ZCh0ZXh0Tm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGV4dE5vZGUuZGVsZXRl
RGF0YSgwLCAxKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZS5pbm5l
ckhUTUwgPSBodG1sO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgdGVzdEVsZW1lbnQgPSBudWxs
O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldElubmVySFRNTDtcblxuLyoqKi8gfSksXG4vKiAy
NyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVf
Xykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTYtcHJlc2VudCwg
RmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3Vy
Y2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4g
dGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNl
IHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZv
dW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEJh
c2VkIG9uIHRoZSBlc2NhcGUtaHRtbCBsaWJyYXJ5LCB3aGljaCBpcyB1c2VkIHVuZGVyIHRoZSBN
SVQgTGljZW5zZSBiZWxvdzpcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUSiBIb2xv
d2F5Y2h1a1xuICogQ29weXJpZ2h0IChjKSAyMDE1IEFuZHJlYXMgTHViYmVcbiAqIENvcHlyaWdo
dCAoYykgMjAxNSBUaWFuY2hlbmcgXCJUaW1vdGh5XCIgR3VcbiAqXG4gKiBQZXJtaXNzaW9uIGlz
IGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdc
biAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24g
ZmlsZXMgKHRoZVxuICogJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhv
dXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdo
dHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuICogZGlzdHJpYnV0ZSwg
c3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvXG4g
KiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8g
c28sIHN1YmplY3QgdG9cbiAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUg
YWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBi
ZVxuICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0
aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJ
VEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG4gKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xV
RElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0ZcbiAqIE1FUkNIQU5UQUJJ
TElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVO
VC5cbiAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJT
IEJFIExJQUJMRSBGT1IgQU5ZXG4gKiBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULFxuICogVE9SVCBPUiBPVEhFUldJU0Us
IEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEVcbiAqIFNPRlRX
QVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuICpcbiAq
L1xuXG5cblxuLy8gY29kZSBjb3BpZWQgYW5kIG1vZGlmaWVkIGZyb20gZXNjYXBlLWh0bWxcbi8q
KlxuICogTW9kdWxlIHZhcmlhYmxlcy5cbiAqIEBwcml2YXRlXG4gKi9cblxudmFyIG1hdGNoSHRt
bFJlZ0V4cCA9IC9bXCInJjw+XS87XG5cbi8qKlxuICogRXNjYXBlIHNwZWNpYWwgY2hhcmFjdGVy
cyBpbiB0aGUgZ2l2ZW4gc3RyaW5nIG9mIGh0bWwuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBz
dHJpbmcgVGhlIHN0cmluZyB0byBlc2NhcGUgZm9yIGluc2VydGluZyBpbnRvIEhUTUxcbiAqIEBy
ZXR1cm4ge3N0cmluZ31cbiAqIEBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBlc2NhcGVIdG1sKHN0
cmluZykge1xuICB2YXIgc3RyID0gJycgKyBzdHJpbmc7XG4gIHZhciBtYXRjaCA9IG1hdGNoSHRt
bFJlZ0V4cC5leGVjKHN0cik7XG5cbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBzdHI7XG4g
IH1cblxuICB2YXIgZXNjYXBlO1xuICB2YXIgaHRtbCA9ICcnO1xuICB2YXIgaW5kZXggPSAwO1xu
ICB2YXIgbGFzdEluZGV4ID0gMDtcblxuICBmb3IgKGluZGV4ID0gbWF0Y2guaW5kZXg7IGluZGV4
IDwgc3RyLmxlbmd0aDsgaW5kZXgrKykge1xuICAgIHN3aXRjaCAoc3RyLmNoYXJDb2RlQXQoaW5k
ZXgpKSB7XG4gICAgICBjYXNlIDM0OlxuICAgICAgICAvLyBcIlxuICAgICAgICBlc2NhcGUgPSAn
JnF1b3Q7JztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM4OlxuICAgICAgICAvLyAmXG4g
ICAgICAgIGVzY2FwZSA9ICcmYW1wOyc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzOTpc
biAgICAgICAgLy8gJ1xuICAgICAgICBlc2NhcGUgPSAnJiN4Mjc7JzsgLy8gbW9kaWZpZWQgZnJv
bSBlc2NhcGUtaHRtbDsgdXNlZCB0byBiZSAnJiMzOSdcbiAgICAgICAgYnJlYWs7XG4gICAgICBj
YXNlIDYwOlxuICAgICAgICAvLyA8XG4gICAgICAgIGVzY2FwZSA9ICcmbHQ7JztcbiAgICAgICAg
YnJlYWs7XG4gICAgICBjYXNlIDYyOlxuICAgICAgICAvLyA+XG4gICAgICAgIGVzY2FwZSA9ICcm
Z3Q7JztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb250aW51ZTtc
biAgICB9XG5cbiAgICBpZiAobGFzdEluZGV4ICE9PSBpbmRleCkge1xuICAgICAgaHRtbCArPSBz
dHIuc3Vic3RyaW5nKGxhc3RJbmRleCwgaW5kZXgpO1xuICAgIH1cblxuICAgIGxhc3RJbmRleCA9
IGluZGV4ICsgMTtcbiAgICBodG1sICs9IGVzY2FwZTtcbiAgfVxuXG4gIHJldHVybiBsYXN0SW5k
ZXggIT09IGluZGV4ID8gaHRtbCArIHN0ci5zdWJzdHJpbmcobGFzdEluZGV4LCBpbmRleCkgOiBo
dG1sO1xufVxuLy8gZW5kIGNvZGUgY29waWVkIGFuZCBtb2RpZmllZCBmcm9tIGVzY2FwZS1odG1s
XG5cbi8qKlxuICogRXNjYXBlcyB0ZXh0IHRvIHByZXZlbnQgc2NyaXB0aW5nIGF0dGFja3MuXG4g
KlxuICogQHBhcmFtIHsqfSB0ZXh0IFRleHQgdmFsdWUgdG8gZXNjYXBlLlxuICogQHJldHVybiB7
c3RyaW5nfSBBbiBlc2NhcGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gZXNjYXBlVGV4dENvbnRl
bnRGb3JCcm93c2VyKHRleHQpIHtcbiAgaWYgKHR5cGVvZiB0ZXh0ID09PSAnYm9vbGVhbicgfHwg
dHlwZW9mIHRleHQgPT09ICdudW1iZXInKSB7XG4gICAgLy8gdGhpcyBzaG9ydGNpcmN1aXQgaGVs
cHMgcGVyZiBmb3IgdHlwZXMgdGhhdCB3ZSBrbm93IHdpbGwgbmV2ZXIgaGF2ZVxuICAgIC8vIHNw
ZWNpYWwgY2hhcmFjdGVycywgZXNwZWNpYWxseSBnaXZlbiB0aGF0IHRoaXMgZnVuY3Rpb24gaXMg
dXNlZCBvZnRlblxuICAgIC8vIGZvciBudW1lcmljIGRvbSBpZHMuXG4gICAgcmV0dXJuICcnICsg
dGV4dDtcbiAgfVxuICByZXR1cm4gZXNjYXBlSHRtbCh0ZXh0KTtcbn1cblxubW9kdWxlLmV4cG9y
dHMgPSBlc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXI7XG5cbi8qKiovIH0pLFxuLyogMjggKi9c
bi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtc
blxuXCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vi
b29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNv
ZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxu
ICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVl
LiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBp
biB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuXG5c
bnZhciBfYXNzaWduID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcblxudmFyIEV2ZW50UGx1Z2lu
UmVnaXN0cnkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxKTtcbnZhciBSZWFjdEV2ZW50RW1pdHRl
ck1peGluID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDgpO1xudmFyIFZpZXdwb3J0TWV0cmljcyA9
IF9fd2VicGFja19yZXF1aXJlX18oNjYpO1xuXG52YXIgZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5h
bWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0OSk7XG52YXIgaXNFdmVudFN1cHBvcnRlZCA9IF9f
d2VicGFja19yZXF1aXJlX18oMzUpO1xuXG4vKipcbiAqIFN1bW1hcnkgb2YgYFJlYWN0QnJvd3Nl
ckV2ZW50RW1pdHRlcmAgZXZlbnQgaGFuZGxpbmc6XG4gKlxuICogIC0gVG9wLWxldmVsIGRlbGVn
YXRpb24gaXMgdXNlZCB0byB0cmFwIG1vc3QgbmF0aXZlIGJyb3dzZXIgZXZlbnRzLiBUaGlzXG4g
KiAgICBtYXkgb25seSBvY2N1ciBpbiB0aGUgbWFpbiB0aHJlYWQgYW5kIGlzIHRoZSByZXNwb25z
aWJpbGl0eSBvZlxuICogICAgUmVhY3RFdmVudExpc3RlbmVyLCB3aGljaCBpcyBpbmplY3RlZCBh
bmQgY2FuIHRoZXJlZm9yZSBzdXBwb3J0IHBsdWdnYWJsZVxuICogICAgZXZlbnQgc291cmNlcy4g
VGhpcyBpcyB0aGUgb25seSB3b3JrIHRoYXQgb2NjdXJzIGluIHRoZSBtYWluIHRocmVhZC5cbiAq
XG4gKiAgLSBXZSBub3JtYWxpemUgYW5kIGRlLWR1cGxpY2F0ZSBldmVudHMgdG8gYWNjb3VudCBm
b3IgYnJvd3NlciBxdWlya3MuIFRoaXNcbiAqICAgIG1heSBiZSBkb25lIGluIHRoZSB3b3JrZXIg
dGhyZWFkLlxuICpcbiAqICAtIEZvcndhcmQgdGhlc2UgbmF0aXZlIGV2ZW50cyAod2l0aCB0aGUg
YXNzb2NpYXRlZCB0b3AtbGV2ZWwgdHlwZSB1c2VkIHRvXG4gKiAgICB0cmFwIGl0KSB0byBgRXZl
bnRQbHVnaW5IdWJgLCB3aGljaCBpbiB0dXJuIHdpbGwgYXNrIHBsdWdpbnMgaWYgdGhleSB3YW50
XG4gKiAgICB0byBleHRyYWN0IGFueSBzeW50aGV0aWMgZXZlbnRzLlxuICpcbiAqICAtIFRoZSBg
RXZlbnRQbHVnaW5IdWJgIHdpbGwgdGhlbiBwcm9jZXNzIGVhY2ggZXZlbnQgYnkgYW5ub3RhdGlu
ZyB0aGVtIHdpdGhcbiAqICAgIFwiZGlzcGF0Y2hlc1wiLCBhIHNlcXVlbmNlIG9mIGxpc3RlbmVy
cyBhbmQgSURzIHRoYXQgY2FyZSBhYm91dCB0aGF0IGV2ZW50LlxuICpcbiAqICAtIFRoZSBgRXZl
bnRQbHVnaW5IdWJgIHRoZW4gZGlzcGF0Y2hlcyB0aGUgZXZlbnRzLlxuICpcbiAqIE92ZXJ2aWV3
IG9mIFJlYWN0IGFuZCB0aGUgZXZlbnQgc3lzdGVtOlxuICpcbiAqICstLS0tLS0tLS0tLS0rICAg
IC5cbiAqIHwgICAgRE9NICAgICB8ICAgIC5cbiAqICstLS0tLS0tLS0tLS0rICAgIC5cbiAqICAg
ICAgIHwgICAgICAgICAgIC5cbiAqICAgICAgIHYgICAgICAgICAgIC5cbiAqICstLS0tLS0tLS0t
LS0rICAgIC5cbiAqIHwgUmVhY3RFdmVudCB8ICAgIC5cbiAqIHwgIExpc3RlbmVyICB8ICAgIC5c
biAqICstLS0tLS0tLS0tLS0rICAgIC4gICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0t
LS0tK1xuICogICAgICAgfCAgICAgICAgICAgLiAgICAgICAgICAgICAgICstLS0tLS0tLSt8U2lt
cGxlRXZlbnR8XG4gKiAgICAgICB8ICAgICAgICAgICAuICAgICAgICAgICAgICAgfCAgICAgICAg
IHxQbHVnaW4gICAgIHxcbiAqICstLS0tLXwtLS0tLS0rICAgIC4gICAgICAgICAgICAgICB2ICAg
ICAgICAgKy0tLS0tLS0tLS0tK1xuICogfCAgICAgfCAgICAgIHwgICAgLiAgICArLS0tLS0tLS0t
LS0tLS0rICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tK1xuICogfCAgICAgKy0tLS0t
LS0tLS0tLi0tLT58RXZlbnRQbHVnaW5IdWJ8ICAgICAgICAgICAgICAgICAgICB8ICAgIEV2ZW50
ICAgfFxuICogfCAgICAgICAgICAgIHwgICAgLiAgICB8ICAgICAgICAgICAgICB8ICAgICArLS0t
LS0tLS0tLS0rICB8IFByb3BhZ2F0b3JzfFxuICogfCBSZWFjdEV2ZW50IHwgICAgLiAgICB8ICAg
ICAgICAgICAgICB8ICAgICB8VGFwRXZlbnQgICB8ICB8LS0tLS0tLS0tLS0tfFxuICogfCAgRW1p
dHRlciAgIHwgICAgLiAgICB8ICAgICAgICAgICAgICB8PC0tLSt8UGx1Z2luICAgICB8ICB8b3Ro
ZXIgcGx1Z2lufFxuICogfCAgICAgICAgICAgIHwgICAgLiAgICB8ICAgICAgICAgICAgICB8ICAg
ICArLS0tLS0tLS0tLS0rICB8ICB1dGlsaXRpZXMgfFxuICogfCAgICAgKy0tLS0tLS0tLS0tLi0t
LT58ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tK1xuICog
fCAgICAgfCAgICAgIHwgICAgLiAgICArLS0tLS0tLS0tLS0tLS0rXG4gKiArLS0tLS18LS0tLS0t
KyAgICAuICAgICAgICAgICAgICAgIF4gICAgICAgICstLS0tLS0tLS0tLStcbiAqICAgICAgIHwg
ICAgICAgICAgIC4gICAgICAgICAgICAgICAgfCAgICAgICAgfEVudGVyL0xlYXZlfFxuICogICAg
ICAgKyAgICAgICAgICAgLiAgICAgICAgICAgICAgICArLS0tLS0tLSt8UGx1Z2luICAgICB8XG4g
KiArLS0tLS0tLS0tLS0tLSsgICAuICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0t
LStcbiAqIHwgYXBwbGljYXRpb24gfCAgIC5cbiAqIHwtLS0tLS0tLS0tLS0tfCAgIC5cbiAqIHwg
ICAgICAgICAgICAgfCAgIC5cbiAqIHwgICAgICAgICAgICAgfCAgIC5cbiAqICstLS0tLS0tLS0t
LS0tKyAgIC5cbiAqICAgICAgICAgICAgICAgICAgIC5cbiAqICAgIFJlYWN0IENvcmUgICAgIC4g
IEdlbmVyYWwgUHVycG9zZSBFdmVudCBQbHVnaW4gU3lzdGVtXG4gKi9cblxudmFyIGhhc0V2ZW50
UGFnZVhZO1xudmFyIGFscmVhZHlMaXN0ZW5pbmdUbyA9IHt9O1xudmFyIGlzTW9uaXRvcmluZ1Nj
cm9sbFZhbHVlID0gZmFsc2U7XG52YXIgcmVhY3RUb3BMaXN0ZW5lcnNDb3VudGVyID0gMDtcblxu
Ly8gRm9yIGV2ZW50cyBsaWtlICdzdWJtaXQnIHdoaWNoIGRvbid0IGNvbnNpc3RlbnRseSBidWJi
bGUgKHdoaWNoIHdlIHRyYXAgYXQgYVxuLy8gbG93ZXIgbm9kZSB0aGFuIGBkb2N1bWVudGApLCBi
aW5kaW5nIGF0IGBkb2N1bWVudGAgd291bGQgY2F1c2UgZHVwbGljYXRlXG4vLyBldmVudHMgc28g
d2UgZG9uJ3QgaW5jbHVkZSB0aGVtIGhlcmVcbnZhciB0b3BFdmVudE1hcHBpbmcgPSB7XG4gIHRv
cEFib3J0OiAnYWJvcnQnLFxuICB0b3BBbmltYXRpb25FbmQ6IGdldFZlbmRvclByZWZpeGVkRXZl
bnROYW1lKCdhbmltYXRpb25lbmQnKSB8fCAnYW5pbWF0aW9uZW5kJyxcbiAgdG9wQW5pbWF0aW9u
SXRlcmF0aW9uOiBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZSgnYW5pbWF0aW9uaXRlcmF0aW9u
JykgfHwgJ2FuaW1hdGlvbml0ZXJhdGlvbicsXG4gIHRvcEFuaW1hdGlvblN0YXJ0OiBnZXRWZW5k
b3JQcmVmaXhlZEV2ZW50TmFtZSgnYW5pbWF0aW9uc3RhcnQnKSB8fCAnYW5pbWF0aW9uc3RhcnQn
LFxuICB0b3BCbHVyOiAnYmx1cicsXG4gIHRvcENhblBsYXk6ICdjYW5wbGF5JyxcbiAgdG9wQ2Fu
UGxheVRocm91Z2g6ICdjYW5wbGF5dGhyb3VnaCcsXG4gIHRvcENoYW5nZTogJ2NoYW5nZScsXG4g
IHRvcENsaWNrOiAnY2xpY2snLFxuICB0b3BDb21wb3NpdGlvbkVuZDogJ2NvbXBvc2l0aW9uZW5k
JyxcbiAgdG9wQ29tcG9zaXRpb25TdGFydDogJ2NvbXBvc2l0aW9uc3RhcnQnLFxuICB0b3BDb21w
b3NpdGlvblVwZGF0ZTogJ2NvbXBvc2l0aW9udXBkYXRlJyxcbiAgdG9wQ29udGV4dE1lbnU6ICdj
b250ZXh0bWVudScsXG4gIHRvcENvcHk6ICdjb3B5JyxcbiAgdG9wQ3V0OiAnY3V0JyxcbiAgdG9w
RG91YmxlQ2xpY2s6ICdkYmxjbGljaycsXG4gIHRvcERyYWc6ICdkcmFnJyxcbiAgdG9wRHJhZ0Vu
ZDogJ2RyYWdlbmQnLFxuICB0b3BEcmFnRW50ZXI6ICdkcmFnZW50ZXInLFxuICB0b3BEcmFnRXhp
dDogJ2RyYWdleGl0JyxcbiAgdG9wRHJhZ0xlYXZlOiAnZHJhZ2xlYXZlJyxcbiAgdG9wRHJhZ092
ZXI6ICdkcmFnb3ZlcicsXG4gIHRvcERyYWdTdGFydDogJ2RyYWdzdGFydCcsXG4gIHRvcERyb3A6
ICdkcm9wJyxcbiAgdG9wRHVyYXRpb25DaGFuZ2U6ICdkdXJhdGlvbmNoYW5nZScsXG4gIHRvcEVt
cHRpZWQ6ICdlbXB0aWVkJyxcbiAgdG9wRW5jcnlwdGVkOiAnZW5jcnlwdGVkJyxcbiAgdG9wRW5k
ZWQ6ICdlbmRlZCcsXG4gIHRvcEVycm9yOiAnZXJyb3InLFxuICB0b3BGb2N1czogJ2ZvY3VzJyxc
biAgdG9wSW5wdXQ6ICdpbnB1dCcsXG4gIHRvcEtleURvd246ICdrZXlkb3duJyxcbiAgdG9wS2V5
UHJlc3M6ICdrZXlwcmVzcycsXG4gIHRvcEtleVVwOiAna2V5dXAnLFxuICB0b3BMb2FkZWREYXRh
OiAnbG9hZGVkZGF0YScsXG4gIHRvcExvYWRlZE1ldGFkYXRhOiAnbG9hZGVkbWV0YWRhdGEnLFxu
ICB0b3BMb2FkU3RhcnQ6ICdsb2Fkc3RhcnQnLFxuICB0b3BNb3VzZURvd246ICdtb3VzZWRvd24n
LFxuICB0b3BNb3VzZU1vdmU6ICdtb3VzZW1vdmUnLFxuICB0b3BNb3VzZU91dDogJ21vdXNlb3V0
JyxcbiAgdG9wTW91c2VPdmVyOiAnbW91c2VvdmVyJyxcbiAgdG9wTW91c2VVcDogJ21vdXNldXAn
LFxuICB0b3BQYXN0ZTogJ3Bhc3RlJyxcbiAgdG9wUGF1c2U6ICdwYXVzZScsXG4gIHRvcFBsYXk6
ICdwbGF5JyxcbiAgdG9wUGxheWluZzogJ3BsYXlpbmcnLFxuICB0b3BQcm9ncmVzczogJ3Byb2dy
ZXNzJyxcbiAgdG9wUmF0ZUNoYW5nZTogJ3JhdGVjaGFuZ2UnLFxuICB0b3BTY3JvbGw6ICdzY3Jv
bGwnLFxuICB0b3BTZWVrZWQ6ICdzZWVrZWQnLFxuICB0b3BTZWVraW5nOiAnc2Vla2luZycsXG4g
IHRvcFNlbGVjdGlvbkNoYW5nZTogJ3NlbGVjdGlvbmNoYW5nZScsXG4gIHRvcFN0YWxsZWQ6ICdz
dGFsbGVkJyxcbiAgdG9wU3VzcGVuZDogJ3N1c3BlbmQnLFxuICB0b3BUZXh0SW5wdXQ6ICd0ZXh0
SW5wdXQnLFxuICB0b3BUaW1lVXBkYXRlOiAndGltZXVwZGF0ZScsXG4gIHRvcFRvdWNoQ2FuY2Vs
OiAndG91Y2hjYW5jZWwnLFxuICB0b3BUb3VjaEVuZDogJ3RvdWNoZW5kJyxcbiAgdG9wVG91Y2hN
b3ZlOiAndG91Y2htb3ZlJyxcbiAgdG9wVG91Y2hTdGFydDogJ3RvdWNoc3RhcnQnLFxuICB0b3BU
cmFuc2l0aW9uRW5kOiBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZSgndHJhbnNpdGlvbmVuZCcp
IHx8ICd0cmFuc2l0aW9uZW5kJyxcbiAgdG9wVm9sdW1lQ2hhbmdlOiAndm9sdW1lY2hhbmdlJyxc
biAgdG9wV2FpdGluZzogJ3dhaXRpbmcnLFxuICB0b3BXaGVlbDogJ3doZWVsJ1xufTtcblxuLyoq
XG4gKiBUbyBlbnN1cmUgbm8gY29uZmxpY3RzIHdpdGggb3RoZXIgcG90ZW50aWFsIFJlYWN0IGlu
c3RhbmNlcyBvbiB0aGUgcGFnZVxuICovXG52YXIgdG9wTGlzdGVuZXJzSURLZXkgPSAnX3JlYWN0
TGlzdGVuZXJzSUQnICsgU3RyaW5nKE1hdGgucmFuZG9tKCkpLnNsaWNlKDIpO1xuXG5mdW5jdGlv
biBnZXRMaXN0ZW5pbmdGb3JEb2N1bWVudChtb3VudEF0KSB7XG4gIC8vIEluIElFOCwgYG1vdW50
QXRgIGlzIGEgaG9zdCBvYmplY3QgYW5kIGRvZXNuJ3QgaGF2ZSBgaGFzT3duUHJvcGVydHlgXG4g
IC8vIGRpcmVjdGx5LlxuICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2Fs
bChtb3VudEF0LCB0b3BMaXN0ZW5lcnNJREtleSkpIHtcbiAgICBtb3VudEF0W3RvcExpc3RlbmVy
c0lES2V5XSA9IHJlYWN0VG9wTGlzdGVuZXJzQ291bnRlcisrO1xuICAgIGFscmVhZHlMaXN0ZW5p
bmdUb1ttb3VudEF0W3RvcExpc3RlbmVyc0lES2V5XV0gPSB7fTtcbiAgfVxuICByZXR1cm4gYWxy
ZWFkeUxpc3RlbmluZ1RvW21vdW50QXRbdG9wTGlzdGVuZXJzSURLZXldXTtcbn1cblxuLyoqXG4g
KiBgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyYCBpcyB1c2VkIHRvIGF0dGFjaCB0b3AtbGV2ZWwg
ZXZlbnQgbGlzdGVuZXJzLiBGb3JcbiAqIGV4YW1wbGU6XG4gKlxuICogICBFdmVudFBsdWdpbkh1
Yi5wdXRMaXN0ZW5lcignbXlJRCcsICdvbkNsaWNrJywgbXlGdW5jdGlvbik7XG4gKlxuICogVGhp
cyB3b3VsZCBhbGxvY2F0ZSBhIFwicmVnaXN0cmF0aW9uXCIgb2YgYCgnb25DbGljaycsIG15RnVu
Y3Rpb24pYCBvbiAnbXlJRCcuXG4gKlxuICogQGludGVybmFsXG4gKi9cbnZhciBSZWFjdEJyb3dz
ZXJFdmVudEVtaXR0ZXIgPSBfYXNzaWduKHt9LCBSZWFjdEV2ZW50RW1pdHRlck1peGluLCB7XG4g
IC8qKlxuICAgKiBJbmplY3RhYmxlIGV2ZW50IGJhY2tlbmRcbiAgICovXG4gIFJlYWN0RXZlbnRM
aXN0ZW5lcjogbnVsbCxcblxuICBpbmplY3Rpb246IHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0g
e29iamVjdH0gUmVhY3RFdmVudExpc3RlbmVyXG4gICAgICovXG4gICAgaW5qZWN0UmVhY3RFdmVu
dExpc3RlbmVyOiBmdW5jdGlvbiAoUmVhY3RFdmVudExpc3RlbmVyKSB7XG4gICAgICBSZWFjdEV2
ZW50TGlzdGVuZXIuc2V0SGFuZGxlVG9wTGV2ZWwoUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLmhh
bmRsZVRvcExldmVsKTtcbiAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50
TGlzdGVuZXIgPSBSZWFjdEV2ZW50TGlzdGVuZXI7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAg
KiBTZXRzIHdoZXRoZXIgb3Igbm90IGFueSBjcmVhdGVkIGNhbGxiYWNrcyBzaG91bGQgYmUgZW5h
YmxlZC5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBlbmFibGVkIFRydWUgaWYgY2FsbGJh
Y2tzIHNob3VsZCBiZSBlbmFibGVkLlxuICAgKi9cbiAgc2V0RW5hYmxlZDogZnVuY3Rpb24gKGVu
YWJsZWQpIHtcbiAgICBpZiAoUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0
ZW5lcikge1xuICAgICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0ZW5l
ci5zZXRFbmFibGVkKGVuYWJsZWQpO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogQHJldHVy
biB7Ym9vbGVhbn0gVHJ1ZSBpZiBjYWxsYmFja3MgYXJlIGVuYWJsZWQuXG4gICAqL1xuICBpc0Vu
YWJsZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gISEoUmVhY3RCcm93c2VyRXZlbnRFbWl0
dGVyLlJlYWN0RXZlbnRMaXN0ZW5lciAmJiBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RF
dmVudExpc3RlbmVyLmlzRW5hYmxlZCgpKTtcbiAgfSxcblxuICAvKipcbiAgICogV2UgbGlzdGVu
IGZvciBidWJibGVkIHRvdWNoIGV2ZW50cyBvbiB0aGUgZG9jdW1lbnQgb2JqZWN0LlxuICAgKlxu
ICAgKiBGaXJlZm94IHY4LjAxIChhbmQgcG9zc2libHkgb3RoZXJzKSBleGhpYml0ZWQgc3RyYW5n
ZSBiZWhhdmlvciB3aGVuXG4gICAqIG1vdW50aW5nIGBvbm1vdXNlbW92ZWAgZXZlbnRzIGF0IHNv
bWUgbm9kZSB0aGF0IHdhcyBub3QgdGhlIGRvY3VtZW50XG4gICAqIGVsZW1lbnQuIFRoZSBzeW1w
dG9tcyB3ZXJlIHRoYXQgaWYgeW91ciBtb3VzZSBpcyBub3QgbW92aW5nIG92ZXIgc29tZXRoaW5n
XG4gICAqIGNvbnRhaW5lZCB3aXRoaW4gdGhhdCBtb3VudCBwb2ludCAoZm9yIGV4YW1wbGUgb24g
dGhlIGJhY2tncm91bmQpIHRoZVxuICAgKiB0b3AtbGV2ZWwgbGlzdGVuZXJzIGZvciBgb25tb3Vz
ZW1vdmVgIHdvbid0IGJlIGNhbGxlZC4gSG93ZXZlciwgaWYgeW91XG4gICAqIHJlZ2lzdGVyIHRo
ZSBgbW91c2Vtb3ZlYCBvbiB0aGUgZG9jdW1lbnQgb2JqZWN0LCB0aGVuIGl0IHdpbGwgb2YgY291
cnNlXG4gICAqIGNhdGNoIGFsbCBgbW91c2Vtb3ZlYHMuIFRoaXMgYWxvbmcgd2l0aCBpT1MgcXVp
cmtzLCBqdXN0aWZpZXMgcmVzdHJpY3RpbmdcbiAgICogdG9wLWxldmVsIGxpc3RlbmVycyB0byB0
aGUgZG9jdW1lbnQgb2JqZWN0IG9ubHksIGF0IGxlYXN0IGZvciB0aGVzZVxuICAgKiBtb3ZlbWVu
dCB0eXBlcyBvZiBldmVudHMgYW5kIHBvc3NpYmx5IGFsbCBldmVudHMuXG4gICAqXG4gICAqIEBz
ZWUgaHR0cDovL3d3dy5xdWlya3Ntb2RlLm9yZy9ibG9nL2FyY2hpdmVzLzIwMTAvMDkvY2xpY2tf
ZXZlbnRfZGVsLmh0bWxcbiAgICpcbiAgICogQWxzbywgYGtleXVwYC9ga2V5cHJlc3NgL2BrZXlk
b3duYCBkbyBub3QgYnViYmxlIHRvIHRoZSB3aW5kb3cgb24gSUUsIGJ1dFxuICAgKiB0aGV5IGJ1
YmJsZSB0byBkb2N1bWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlZ2lzdHJhdGlv
bk5hbWUgTmFtZSBvZiBsaXN0ZW5lciAoZS5nLiBgb25DbGlja2ApLlxuICAgKiBAcGFyYW0ge29i
amVjdH0gY29udGVudERvY3VtZW50SGFuZGxlIERvY3VtZW50IHdoaWNoIG93bnMgdGhlIGNvbnRh
aW5lclxuICAgKi9cbiAgbGlzdGVuVG86IGZ1bmN0aW9uIChyZWdpc3RyYXRpb25OYW1lLCBjb250
ZW50RG9jdW1lbnRIYW5kbGUpIHtcbiAgICB2YXIgbW91bnRBdCA9IGNvbnRlbnREb2N1bWVudEhh
bmRsZTtcbiAgICB2YXIgaXNMaXN0ZW5pbmcgPSBnZXRMaXN0ZW5pbmdGb3JEb2N1bWVudChtb3Vu
dEF0KTtcbiAgICB2YXIgZGVwZW5kZW5jaWVzID0gRXZlbnRQbHVnaW5SZWdpc3RyeS5yZWdpc3Ry
YXRpb25OYW1lRGVwZW5kZW5jaWVzW3JlZ2lzdHJhdGlvbk5hbWVdO1xuXG4gICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBkZXBlbmRlbmNpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBkZXBlbmRl
bmN5ID0gZGVwZW5kZW5jaWVzW2ldO1xuICAgICAgaWYgKCEoaXNMaXN0ZW5pbmcuaGFzT3duUHJv
cGVydHkoZGVwZW5kZW5jeSkgJiYgaXNMaXN0ZW5pbmdbZGVwZW5kZW5jeV0pKSB7XG4gICAgICAg
IGlmIChkZXBlbmRlbmN5ID09PSAndG9wV2hlZWwnKSB7XG4gICAgICAgICAgaWYgKGlzRXZlbnRT
dXBwb3J0ZWQoJ3doZWVsJykpIHtcbiAgICAgICAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRl
ci5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcEJ1YmJsZWRFdmVudCgndG9wV2hlZWwnLCAnd2hlZWwn
LCBtb3VudEF0KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzRXZlbnRTdXBwb3J0ZWQoJ21vdXNl
d2hlZWwnKSkge1xuICAgICAgICAgICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZl
bnRMaXN0ZW5lci50cmFwQnViYmxlZEV2ZW50KCd0b3BXaGVlbCcsICdtb3VzZXdoZWVsJywgbW91
bnRBdCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZpcmVmb3ggbmVlZHMg
dG8gY2FwdHVyZSBhIGRpZmZlcmVudCBtb3VzZSBzY3JvbGwgZXZlbnQuXG4gICAgICAgICAgICAv
LyBAc2VlIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvZG9tL2V2ZW50cy90ZXN0cy9zY3JvbGwu
aHRtbFxuICAgICAgICAgICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0
ZW5lci50cmFwQnViYmxlZEV2ZW50KCd0b3BXaGVlbCcsICdET01Nb3VzZVNjcm9sbCcsIG1vdW50
QXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChkZXBlbmRlbmN5ID09PSAndG9w
U2Nyb2xsJykge1xuICAgICAgICAgIGlmIChpc0V2ZW50U3VwcG9ydGVkKCdzY3JvbGwnLCB0cnVl
KSkge1xuICAgICAgICAgICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0
ZW5lci50cmFwQ2FwdHVyZWRFdmVudCgndG9wU2Nyb2xsJywgJ3Njcm9sbCcsIG1vdW50QXQpO1xu
ICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIu
UmVhY3RFdmVudExpc3RlbmVyLnRyYXBCdWJibGVkRXZlbnQoJ3RvcFNjcm9sbCcsICdzY3JvbGwn
LCBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLldJTkRPV19IQU5E
TEUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChkZXBlbmRlbmN5ID09PSAndG9w
Rm9jdXMnIHx8IGRlcGVuZGVuY3kgPT09ICd0b3BCbHVyJykge1xuICAgICAgICAgIGlmIChpc0V2
ZW50U3VwcG9ydGVkKCdmb2N1cycsIHRydWUpKSB7XG4gICAgICAgICAgICBSZWFjdEJyb3dzZXJF
dmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBDYXB0dXJlZEV2ZW50KCd0b3BGb2N1
cycsICdmb2N1cycsIG1vdW50QXQpO1xuICAgICAgICAgICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0
dGVyLlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQ2FwdHVyZWRFdmVudCgndG9wQmx1cicsICdibHVy
JywgbW91bnRBdCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpc0V2ZW50U3VwcG9ydGVkKCdmb2N1
c2luJykpIHtcbiAgICAgICAgICAgIC8vIElFIGhhcyBgZm9jdXNpbmAgYW5kIGBmb2N1c291dGAg
ZXZlbnRzIHdoaWNoIGJ1YmJsZS5cbiAgICAgICAgICAgIC8vIEBzZWUgaHR0cDovL3d3dy5xdWly
a3Ntb2RlLm9yZy9ibG9nL2FyY2hpdmVzLzIwMDgvMDQvZGVsZWdhdGluZ190aGUuaHRtbFxuICAg
ICAgICAgICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0ZW5lci50cmFw
QnViYmxlZEV2ZW50KCd0b3BGb2N1cycsICdmb2N1c2luJywgbW91bnRBdCk7XG4gICAgICAgICAg
ICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBCdWJibGVk
RXZlbnQoJ3RvcEJsdXInLCAnZm9jdXNvdXQnLCBtb3VudEF0KTtcbiAgICAgICAgICB9XG5cbiAg
ICAgICAgICAvLyB0byBtYWtlIHN1cmUgYmx1ciBhbmQgZm9jdXMgZXZlbnQgbGlzdGVuZXJzIGFy
ZSBvbmx5IGF0dGFjaGVkIG9uY2VcbiAgICAgICAgICBpc0xpc3RlbmluZy50b3BCbHVyID0gdHJ1
ZTtcbiAgICAgICAgICBpc0xpc3RlbmluZy50b3BGb2N1cyA9IHRydWU7XG4gICAgICAgIH0gZWxz
ZSBpZiAodG9wRXZlbnRNYXBwaW5nLmhhc093blByb3BlcnR5KGRlcGVuZGVuY3kpKSB7XG4gICAg
ICAgICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQnVi
YmxlZEV2ZW50KGRlcGVuZGVuY3ksIHRvcEV2ZW50TWFwcGluZ1tkZXBlbmRlbmN5XSwgbW91bnRB
dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpc0xpc3RlbmluZ1tkZXBlbmRlbmN5XSA9IHRydWU7
XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHRyYXBCdWJibGVkRXZlbnQ6IGZ1bmN0aW9uICh0
b3BMZXZlbFR5cGUsIGhhbmRsZXJCYXNlTmFtZSwgaGFuZGxlKSB7XG4gICAgcmV0dXJuIFJlYWN0
QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcEJ1YmJsZWRFdmVudCh0
b3BMZXZlbFR5cGUsIGhhbmRsZXJCYXNlTmFtZSwgaGFuZGxlKTtcbiAgfSxcblxuICB0cmFwQ2Fw
dHVyZWRFdmVudDogZnVuY3Rpb24gKHRvcExldmVsVHlwZSwgaGFuZGxlckJhc2VOYW1lLCBoYW5k
bGUpIHtcbiAgICByZXR1cm4gUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0
ZW5lci50cmFwQ2FwdHVyZWRFdmVudCh0b3BMZXZlbFR5cGUsIGhhbmRsZXJCYXNlTmFtZSwgaGFu
ZGxlKTtcbiAgfSxcblxuICAvKipcbiAgICogUHJvdGVjdCBhZ2FpbnN0IGRvY3VtZW50LmNyZWF0
ZUV2ZW50KCkgcmV0dXJuaW5nIG51bGxcbiAgICogU29tZSBwb3B1cCBibG9ja2VyIGV4dGVuc2lv
bnMgYXBwZWFyIHRvIGRvIHRoaXM6XG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9y
ZWFjdC9pc3N1ZXMvNjg4N1xuICAgKi9cbiAgc3VwcG9ydHNFdmVudFBhZ2VYWTogZnVuY3Rpb24g
KCkge1xuICAgIGlmICghZG9jdW1lbnQuY3JlYXRlRXZlbnQpIHtcbiAgICAgIHJldHVybiBmYWxz
ZTtcbiAgICB9XG4gICAgdmFyIGV2ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ01vdXNlRXZlbnQn
KTtcbiAgICByZXR1cm4gZXYgIT0gbnVsbCAmJiAncGFnZVgnIGluIGV2O1xuICB9LFxuXG4gIC8q
KlxuICAgKiBMaXN0ZW5zIHRvIHdpbmRvdyBzY3JvbGwgYW5kIHJlc2l6ZSBldmVudHMuIFdlIGNh
Y2hlIHNjcm9sbCB2YWx1ZXMgc28gdGhhdFxuICAgKiBhcHBsaWNhdGlvbiBjb2RlIGNhbiBhY2Nl
c3MgdGhlbSB3aXRob3V0IHRyaWdnZXJpbmcgcmVmbG93cy5cbiAgICpcbiAgICogVmlld3BvcnRN
ZXRyaWNzIGlzIG9ubHkgdXNlZCBieSBTeW50aGV0aWNNb3VzZS9Ub3VjaEV2ZW50IGFuZCBvbmx5
IHdoZW5cbiAgICogcGFnZVgvcGFnZVkgaXNuJ3Qgc3VwcG9ydGVkIChsZWdhY3kgYnJvd3NlcnMp
LlxuICAgKlxuICAgKiBOT1RFOiBTY3JvbGwgZXZlbnRzIGRvIG5vdCBidWJibGUuXG4gICAqXG4g
ICAqIEBzZWUgaHR0cDovL3d3dy5xdWlya3Ntb2RlLm9yZy9kb20vZXZlbnRzL3Njcm9sbC5odG1s
XG4gICAqL1xuICBlbnN1cmVTY3JvbGxWYWx1ZU1vbml0b3Jpbmc6IGZ1bmN0aW9uICgpIHtcbiAg
ICBpZiAoaGFzRXZlbnRQYWdlWFkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzRXZlbnRQYWdl
WFkgPSBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuc3VwcG9ydHNFdmVudFBhZ2VYWSgpO1xuICAg
IH1cbiAgICBpZiAoIWhhc0V2ZW50UGFnZVhZICYmICFpc01vbml0b3JpbmdTY3JvbGxWYWx1ZSkg
e1xuICAgICAgdmFyIHJlZnJlc2ggPSBWaWV3cG9ydE1ldHJpY3MucmVmcmVzaFNjcm9sbFZhbHVl
cztcbiAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIubW9u
aXRvclNjcm9sbFZhbHVlKHJlZnJlc2gpO1xuICAgICAgaXNNb25pdG9yaW5nU2Nyb2xsVmFsdWUg
PSB0cnVlO1xuICAgIH1cbiAgfVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RCcm93c2Vy
RXZlbnRFbWl0dGVyO1xuXG4vKioqLyB9KSxcbi8qIDI5ICovXG4vKioqLyAoZnVuY3Rpb24obW9k
dWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNl
IHN0cmljdFwiO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fY3JlYXRlU3RvcmVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODQpO1xuLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fY29tYmluZVJl
ZHVjZXJzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwNyk7XG4vKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19iaW5kQWN0aW9uQ3JlYXRvcnNfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oMjA4KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2FwcGx5TWlkZGxld2FyZV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygyMDkpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNF9fY29tcG9zZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Nyk7XG4vKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X191dGlsc193YXJu
aW5nX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg2KTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKGJp
bmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImNc
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0
ZVN0b3JlX19bXCJiXCJdOyB9KTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKGJpbmRpbmcpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImJcIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2NvbWJpbmVSZWR1Y2Vyc19f
W1wiYVwiXTsgfSk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJhXCIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19iaW5kQWN0aW9uQ3JlYXRvcnNfX1tcImFc
Il07IH0pO1xuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgYXBwbHlNaWRkbGV3YXJlICovXG4v
KiB1bnVzZWQgaGFybW9ueSByZWV4cG9ydCBjb21wb3NlICovXG5cblxuXG5cblxuXG5cbi8qXG4q
IFRoaXMgaXMgYSBkdW1teSBmdW5jdGlvbiB0byBjaGVjayBpZiB0aGUgZnVuY3Rpb24gbmFtZSBo
YXMgYmVlbiBhbHRlcmVkIGJ5IG1pbmlmaWNhdGlvbi5cbiogSWYgdGhlIGZ1bmN0aW9uIGhhcyBi
ZWVuIG1pbmlmaWVkIGFuZCBOT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nLCB3YXJuIHRoZSB1c2Vy
LlxuKi9cbmZ1bmN0aW9uIGlzQ3J1c2hlZCgpIHt9XG5cbmlmIChmYWxzZSkge1xuICB3YXJuaW5n
KCdZb3UgYXJlIGN1cnJlbnRseSB1c2luZyBtaW5pZmllZCBjb2RlIG91dHNpZGUgb2YgTk9ERV9F
TlYgPT09IFxcJ3Byb2R1Y3Rpb25cXCcuICcgKyAnVGhpcyBtZWFucyB0aGF0IHlvdSBhcmUgcnVu
bmluZyBhIHNsb3dlciBkZXZlbG9wbWVudCBidWlsZCBvZiBSZWR1eC4gJyArICdZb3UgY2FuIHVz
ZSBsb29zZS1lbnZpZnkgKGh0dHBzOi8vZ2l0aHViLmNvbS96ZXJ0b3NoL2xvb3NlLWVudmlmeSkg
Zm9yIGJyb3dzZXJpZnkgJyArICdvciBEZWZpbmVQbHVnaW4gZm9yIHdlYnBhY2sgKGh0dHA6Ly9z
dGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzAwMzAwMzEpICcgKyAndG8gZW5zdXJlIHlvdSBo
YXZlIHRoZSBjb3JyZWN0IGNvZGUgZm9yIHlvdXIgcHJvZHVjdGlvbiBidWlsZC4nKTtcbn1cblxu
XG5cbi8qKiovIH0pLFxuLyogMzAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMp
IHtcblxudmFyIGc7XHJcblxyXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxyXG5n
ID0gKGZ1bmN0aW9uKCkge1xyXG5cdHJldHVybiB0aGlzO1xyXG59KSgpO1xyXG5cclxudHJ5IHtc
clxuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcclxuXHRnID0g
ZyB8fCBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCkgfHwgKDEsZXZhbCkoXCJ0aGlzXCIpO1xy
XG59IGNhdGNoKGUpIHtcclxuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNl
IGlzIGF2YWlsYWJsZVxyXG5cdGlmKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpXHJcblx0
XHRnID0gd2luZG93O1xyXG59XHJcblxyXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1
dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXHJcbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGlu
c3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXHJcbi8vIGVhc2llciB0byBoYW5kbGUgdGhp
cyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZztcclxu
XG5cbi8qKiovIH0pLFxuLyogMzEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMs
IF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIENvcHly
aWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVk
LlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHls
ZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVj
dG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRl
bnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRp
cmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG5cblxudmFyIF9wcm9kSW52YXJpYW50ID0gX193ZWJw
YWNrX3JlcXVpcmVfXygyKTtcblxudmFyIGludmFyaWFudCA9IF9fd2VicGFja19yZXF1aXJlX18o
MCk7XG5cbi8qKlxuICogSW5qZWN0YWJsZSBvcmRlcmluZyBvZiBldmVudCBwbHVnaW5zLlxuICov
XG52YXIgZXZlbnRQbHVnaW5PcmRlciA9IG51bGw7XG5cbi8qKlxuICogSW5qZWN0YWJsZSBtYXBw
aW5nIGZyb20gbmFtZXMgdG8gZXZlbnQgcGx1Z2luIG1vZHVsZXMuXG4gKi9cbnZhciBuYW1lc1Rv
UGx1Z2lucyA9IHt9O1xuXG4vKipcbiAqIFJlY29tcHV0ZXMgdGhlIHBsdWdpbiBsaXN0IHVzaW5n
IHRoZSBpbmplY3RlZCBwbHVnaW5zIGFuZCBwbHVnaW4gb3JkZXJpbmcuXG4gKlxuICogQHByaXZh
dGVcbiAqL1xuZnVuY3Rpb24gcmVjb21wdXRlUGx1Z2luT3JkZXJpbmcoKSB7XG4gIGlmICghZXZl
bnRQbHVnaW5PcmRlcikge1xuICAgIC8vIFdhaXQgdW50aWwgYW4gYGV2ZW50UGx1Z2luT3JkZXJg
IGlzIGluamVjdGVkLlxuICAgIHJldHVybjtcbiAgfVxuICBmb3IgKHZhciBwbHVnaW5OYW1lIGlu
IG5hbWVzVG9QbHVnaW5zKSB7XG4gICAgdmFyIHBsdWdpbk1vZHVsZSA9IG5hbWVzVG9QbHVnaW5z
W3BsdWdpbk5hbWVdO1xuICAgIHZhciBwbHVnaW5JbmRleCA9IGV2ZW50UGx1Z2luT3JkZXIuaW5k
ZXhPZihwbHVnaW5OYW1lKTtcbiAgICAhKHBsdWdpbkluZGV4ID4gLTEpID8gIGZhbHNlID8gaW52
YXJpYW50KGZhbHNlLCAnRXZlbnRQbHVnaW5SZWdpc3RyeTogQ2Fubm90IGluamVjdCBldmVudCBw
bHVnaW5zIHRoYXQgZG8gbm90IGV4aXN0IGluIHRoZSBwbHVnaW4gb3JkZXJpbmcsIGAlc2AuJywg
cGx1Z2luTmFtZSkgOiBfcHJvZEludmFyaWFudCgnOTYnLCBwbHVnaW5OYW1lKSA6IHZvaWQgMDtc
biAgICBpZiAoRXZlbnRQbHVnaW5SZWdpc3RyeS5wbHVnaW5zW3BsdWdpbkluZGV4XSkge1xuICAg
ICAgY29udGludWU7XG4gICAgfVxuICAgICFwbHVnaW5Nb2R1bGUuZXh0cmFjdEV2ZW50cyA/ICBm
YWxzZSA/IGludmFyaWFudChmYWxzZSwgJ0V2ZW50UGx1Z2luUmVnaXN0cnk6IEV2ZW50IHBsdWdp
bnMgbXVzdCBpbXBsZW1lbnQgYW4gYGV4dHJhY3RFdmVudHNgIG1ldGhvZCwgYnV0IGAlc2AgZG9l
cyBub3QuJywgcGx1Z2luTmFtZSkgOiBfcHJvZEludmFyaWFudCgnOTcnLCBwbHVnaW5OYW1lKSA6
IHZvaWQgMDtcbiAgICBFdmVudFBsdWdpblJlZ2lzdHJ5LnBsdWdpbnNbcGx1Z2luSW5kZXhdID0g
cGx1Z2luTW9kdWxlO1xuICAgIHZhciBwdWJsaXNoZWRFdmVudHMgPSBwbHVnaW5Nb2R1bGUuZXZl
bnRUeXBlcztcbiAgICBmb3IgKHZhciBldmVudE5hbWUgaW4gcHVibGlzaGVkRXZlbnRzKSB7XG4g
ICAgICAhcHVibGlzaEV2ZW50Rm9yUGx1Z2luKHB1Ymxpc2hlZEV2ZW50c1tldmVudE5hbWVdLCBw
bHVnaW5Nb2R1bGUsIGV2ZW50TmFtZSkgPyAgZmFsc2UgPyBpbnZhcmlhbnQoZmFsc2UsICdFdmVu
dFBsdWdpblJlZ2lzdHJ5OiBGYWlsZWQgdG8gcHVibGlzaCBldmVudCBgJXNgIGZvciBwbHVnaW4g
YCVzYC4nLCBldmVudE5hbWUsIHBsdWdpbk5hbWUpIDogX3Byb2RJbnZhcmlhbnQoJzk4JywgZXZl
bnROYW1lLCBwbHVnaW5OYW1lKSA6IHZvaWQgMDtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBQ
dWJsaXNoZXMgYW4gZXZlbnQgc28gdGhhdCBpdCBjYW4gYmUgZGlzcGF0Y2hlZCBieSB0aGUgc3Vw
cGxpZWQgcGx1Z2luLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBkaXNwYXRjaENvbmZpZyBEaXNw
YXRjaCBjb25maWd1cmF0aW9uIGZvciB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge29iamVjdH0gUGx1
Z2luTW9kdWxlIFBsdWdpbiBwdWJsaXNoaW5nIHRoZSBldmVudC5cbiAqIEByZXR1cm4ge2Jvb2xl
YW59IFRydWUgaWYgdGhlIGV2ZW50IHdhcyBzdWNjZXNzZnVsbHkgcHVibGlzaGVkLlxuICogQHBy
aXZhdGVcbiAqL1xuZnVuY3Rpb24gcHVibGlzaEV2ZW50Rm9yUGx1Z2luKGRpc3BhdGNoQ29uZmln
LCBwbHVnaW5Nb2R1bGUsIGV2ZW50TmFtZSkge1xuICAhIUV2ZW50UGx1Z2luUmVnaXN0cnkuZXZl
bnROYW1lRGlzcGF0Y2hDb25maWdzLmhhc093blByb3BlcnR5KGV2ZW50TmFtZSkgPyAgZmFsc2Ug
PyBpbnZhcmlhbnQoZmFsc2UsICdFdmVudFBsdWdpbkh1YjogTW9yZSB0aGFuIG9uZSBwbHVnaW4g
YXR0ZW1wdGVkIHRvIHB1Ymxpc2ggdGhlIHNhbWUgZXZlbnQgbmFtZSwgYCVzYC4nLCBldmVudE5h
bWUpIDogX3Byb2RJbnZhcmlhbnQoJzk5JywgZXZlbnROYW1lKSA6IHZvaWQgMDtcbiAgRXZlbnRQ
bHVnaW5SZWdpc3RyeS5ldmVudE5hbWVEaXNwYXRjaENvbmZpZ3NbZXZlbnROYW1lXSA9IGRpc3Bh
dGNoQ29uZmlnO1xuXG4gIHZhciBwaGFzZWRSZWdpc3RyYXRpb25OYW1lcyA9IGRpc3BhdGNoQ29u
ZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzO1xuICBpZiAocGhhc2VkUmVnaXN0cmF0aW9uTmFt
ZXMpIHtcbiAgICBmb3IgKHZhciBwaGFzZU5hbWUgaW4gcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMp
IHtcbiAgICAgIGlmIChwaGFzZWRSZWdpc3RyYXRpb25OYW1lcy5oYXNPd25Qcm9wZXJ0eShwaGFz
ZU5hbWUpKSB7XG4gICAgICAgIHZhciBwaGFzZWRSZWdpc3RyYXRpb25OYW1lID0gcGhhc2VkUmVn
aXN0cmF0aW9uTmFtZXNbcGhhc2VOYW1lXTtcbiAgICAgICAgcHVibGlzaFJlZ2lzdHJhdGlvbk5h
bWUocGhhc2VkUmVnaXN0cmF0aW9uTmFtZSwgcGx1Z2luTW9kdWxlLCBldmVudE5hbWUpO1xuICAg
ICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmIChkaXNwYXRjaENvbmZp
Zy5yZWdpc3RyYXRpb25OYW1lKSB7XG4gICAgcHVibGlzaFJlZ2lzdHJhdGlvbk5hbWUoZGlzcGF0
Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZSwgcGx1Z2luTW9kdWxlLCBldmVudE5hbWUpO1xuICAg
IHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBQdWJsaXNo
ZXMgYSByZWdpc3RyYXRpb24gbmFtZSB0aGF0IGlzIHVzZWQgdG8gaWRlbnRpZnkgZGlzcGF0Y2hl
ZCBldmVudHMgYW5kXG4gKiBjYW4gYmUgdXNlZCB3aXRoIGBFdmVudFBsdWdpbkh1Yi5wdXRMaXN0
ZW5lcmAgdG8gcmVnaXN0ZXIgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWdp
c3RyYXRpb25OYW1lIFJlZ2lzdHJhdGlvbiBuYW1lIHRvIGFkZC5cbiAqIEBwYXJhbSB7b2JqZWN0
fSBQbHVnaW5Nb2R1bGUgUGx1Z2luIHB1Ymxpc2hpbmcgdGhlIGV2ZW50LlxuICogQHByaXZhdGVc
biAqL1xuZnVuY3Rpb24gcHVibGlzaFJlZ2lzdHJhdGlvbk5hbWUocmVnaXN0cmF0aW9uTmFtZSwg
cGx1Z2luTW9kdWxlLCBldmVudE5hbWUpIHtcbiAgISFFdmVudFBsdWdpblJlZ2lzdHJ5LnJlZ2lz
dHJhdGlvbk5hbWVNb2R1bGVzW3JlZ2lzdHJhdGlvbk5hbWVdID8gIGZhbHNlID8gaW52YXJpYW50
KGZhbHNlLCAnRXZlbnRQbHVnaW5IdWI6IE1vcmUgdGhhbiBvbmUgcGx1Z2luIGF0dGVtcHRlZCB0
byBwdWJsaXNoIHRoZSBzYW1lIHJlZ2lzdHJhdGlvbiBuYW1lLCBgJXNgLicsIHJlZ2lzdHJhdGlv
bk5hbWUpIDogX3Byb2RJbnZhcmlhbnQoJzEwMCcsIHJlZ2lzdHJhdGlvbk5hbWUpIDogdm9pZCAw
O1xuICBFdmVudFBsdWdpblJlZ2lzdHJ5LnJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzW3JlZ2lzdHJh
dGlvbk5hbWVdID0gcGx1Z2luTW9kdWxlO1xuICBFdmVudFBsdWdpblJlZ2lzdHJ5LnJlZ2lzdHJh
dGlvbk5hbWVEZXBlbmRlbmNpZXNbcmVnaXN0cmF0aW9uTmFtZV0gPSBwbHVnaW5Nb2R1bGUuZXZl
bnRUeXBlc1tldmVudE5hbWVdLmRlcGVuZGVuY2llcztcblxuICBpZiAoZmFsc2UpIHtcbiAgICB2
YXIgbG93ZXJDYXNlZE5hbWUgPSByZWdpc3RyYXRpb25OYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAg
RXZlbnRQbHVnaW5SZWdpc3RyeS5wb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzW2xvd2VyQ2FzZWRO
YW1lXSA9IHJlZ2lzdHJhdGlvbk5hbWU7XG5cbiAgICBpZiAocmVnaXN0cmF0aW9uTmFtZSA9PT0g
J29uRG91YmxlQ2xpY2snKSB7XG4gICAgICBFdmVudFBsdWdpblJlZ2lzdHJ5LnBvc3NpYmxlUmVn
aXN0cmF0aW9uTmFtZXMub25kYmxjbGljayA9IHJlZ2lzdHJhdGlvbk5hbWU7XG4gICAgfVxuICB9
XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIHBsdWdpbnMgc28gdGhhdCB0aGV5IGNhbiBleHRyYWN0
IGFuZCBkaXNwYXRjaCBldmVudHMuXG4gKlxuICogQHNlZSB7RXZlbnRQbHVnaW5IdWJ9XG4gKi9c
bnZhciBFdmVudFBsdWdpblJlZ2lzdHJ5ID0ge1xuICAvKipcbiAgICogT3JkZXJlZCBsaXN0IG9m
IGluamVjdGVkIHBsdWdpbnMuXG4gICAqL1xuICBwbHVnaW5zOiBbXSxcblxuICAvKipcbiAgICog
TWFwcGluZyBmcm9tIGV2ZW50IG5hbWUgdG8gZGlzcGF0Y2ggY29uZmlnXG4gICAqL1xuICBldmVu
dE5hbWVEaXNwYXRjaENvbmZpZ3M6IHt9LFxuXG4gIC8qKlxuICAgKiBNYXBwaW5nIGZyb20gcmVn
aXN0cmF0aW9uIG5hbWUgdG8gcGx1Z2luIG1vZHVsZVxuICAgKi9cbiAgcmVnaXN0cmF0aW9uTmFt
ZU1vZHVsZXM6IHt9LFxuXG4gIC8qKlxuICAgKiBNYXBwaW5nIGZyb20gcmVnaXN0cmF0aW9uIG5h
bWUgdG8gZXZlbnQgbmFtZVxuICAgKi9cbiAgcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llczog
e30sXG5cbiAgLyoqXG4gICAqIE1hcHBpbmcgZnJvbSBsb3dlcmNhc2UgcmVnaXN0cmF0aW9uIG5h
bWVzIHRvIHRoZSBwcm9wZXJseSBjYXNlZCB2ZXJzaW9uLFxuICAgKiB1c2VkIHRvIHdhcm4gaW4g
dGhlIGNhc2Ugb2YgbWlzc2luZyBldmVudCBoYW5kbGVycy4gQXZhaWxhYmxlXG4gICAqIG9ubHkg
aW4gX19ERVZfXy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHBvc3NpYmxlUmVnaXN0
cmF0aW9uTmFtZXM6ICBmYWxzZSA/IHt9IDogbnVsbCxcbiAgLy8gVHJ1c3QgdGhlIGRldmVsb3Bl
ciB0byBvbmx5IHVzZSBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzIGluIF9fREVWX19cblxuICAv
KipcbiAgICogSW5qZWN0cyBhbiBvcmRlcmluZyBvZiBwbHVnaW5zIChieSBwbHVnaW4gbmFtZSku
IFRoaXMgYWxsb3dzIHRoZSBvcmRlcmluZ1xuICAgKiB0byBiZSBkZWNvdXBsZWQgZnJvbSBpbmpl
Y3Rpb24gb2YgdGhlIGFjdHVhbCBwbHVnaW5zIHNvIHRoYXQgb3JkZXJpbmcgaXNcbiAgICogYWx3
YXlzIGRldGVybWluaXN0aWMgcmVnYXJkbGVzcyBvZiBwYWNrYWdpbmcsIG9uLXRoZS1mbHkgaW5q
ZWN0aW9uLCBldGMuXG4gICAqXG4gICAqIEBwYXJhbSB7YXJyYXl9IEluamVjdGVkRXZlbnRQbHVn
aW5PcmRlclxuICAgKiBAaW50ZXJuYWxcbiAgICogQHNlZSB7RXZlbnRQbHVnaW5IdWIuaW5qZWN0
aW9uLmluamVjdEV2ZW50UGx1Z2luT3JkZXJ9XG4gICAqL1xuICBpbmplY3RFdmVudFBsdWdpbk9y
ZGVyOiBmdW5jdGlvbiAoaW5qZWN0ZWRFdmVudFBsdWdpbk9yZGVyKSB7XG4gICAgISFldmVudFBs
dWdpbk9yZGVyID8gIGZhbHNlID8gaW52YXJpYW50KGZhbHNlLCAnRXZlbnRQbHVnaW5SZWdpc3Ry
eTogQ2Fubm90IGluamVjdCBldmVudCBwbHVnaW4gb3JkZXJpbmcgbW9yZSB0aGFuIG9uY2UuIFlv
dSBhcmUgbGlrZWx5IHRyeWluZyB0byBsb2FkIG1vcmUgdGhhbiBvbmUgY29weSBvZiBSZWFjdC4n
KSA6IF9wcm9kSW52YXJpYW50KCcxMDEnKSA6IHZvaWQgMDtcbiAgICAvLyBDbG9uZSB0aGUgb3Jk
ZXJpbmcgc28gaXQgY2Fubm90IGJlIGR5bmFtaWNhbGx5IG11dGF0ZWQuXG4gICAgZXZlbnRQbHVn
aW5PcmRlciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGluamVjdGVkRXZlbnRQbHVnaW5P
cmRlcik7XG4gICAgcmVjb21wdXRlUGx1Z2luT3JkZXJpbmcoKTtcbiAgfSxcblxuICAvKipcbiAg
ICogSW5qZWN0cyBwbHVnaW5zIHRvIGJlIHVzZWQgYnkgYEV2ZW50UGx1Z2luSHViYC4gVGhlIHBs
dWdpbiBuYW1lcyBtdXN0IGJlXG4gICAqIGluIHRoZSBvcmRlcmluZyBpbmplY3RlZCBieSBgaW5q
ZWN0RXZlbnRQbHVnaW5PcmRlcmAuXG4gICAqXG4gICAqIFBsdWdpbnMgY2FuIGJlIGluamVjdGVk
IGFzIHBhcnQgb2YgcGFnZSBpbml0aWFsaXphdGlvbiBvciBvbi10aGUtZmx5LlxuICAgKlxuICAg
KiBAcGFyYW0ge29iamVjdH0gaW5qZWN0ZWROYW1lc1RvUGx1Z2lucyBNYXAgZnJvbSBuYW1lcyB0
byBwbHVnaW4gbW9kdWxlcy5cbiAgICogQGludGVybmFsXG4gICAqIEBzZWUge0V2ZW50UGx1Z2lu
SHViLmluamVjdGlvbi5pbmplY3RFdmVudFBsdWdpbnNCeU5hbWV9XG4gICAqL1xuICBpbmplY3RF
dmVudFBsdWdpbnNCeU5hbWU6IGZ1bmN0aW9uIChpbmplY3RlZE5hbWVzVG9QbHVnaW5zKSB7XG4g
ICAgdmFyIGlzT3JkZXJpbmdEaXJ0eSA9IGZhbHNlO1xuICAgIGZvciAodmFyIHBsdWdpbk5hbWUg
aW4gaW5qZWN0ZWROYW1lc1RvUGx1Z2lucykge1xuICAgICAgaWYgKCFpbmplY3RlZE5hbWVzVG9Q
bHVnaW5zLmhhc093blByb3BlcnR5KHBsdWdpbk5hbWUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xu
ICAgICAgfVxuICAgICAgdmFyIHBsdWdpbk1vZHVsZSA9IGluamVjdGVkTmFtZXNUb1BsdWdpbnNb
cGx1Z2luTmFtZV07XG4gICAgICBpZiAoIW5hbWVzVG9QbHVnaW5zLmhhc093blByb3BlcnR5KHBs
dWdpbk5hbWUpIHx8IG5hbWVzVG9QbHVnaW5zW3BsdWdpbk5hbWVdICE9PSBwbHVnaW5Nb2R1bGUp
IHtcbiAgICAgICAgISFuYW1lc1RvUGx1Z2luc1twbHVnaW5OYW1lXSA/ICBmYWxzZSA/IGludmFy
aWFudChmYWxzZSwgJ0V2ZW50UGx1Z2luUmVnaXN0cnk6IENhbm5vdCBpbmplY3QgdHdvIGRpZmZl
cmVudCBldmVudCBwbHVnaW5zIHVzaW5nIHRoZSBzYW1lIG5hbWUsIGAlc2AuJywgcGx1Z2luTmFt
ZSkgOiBfcHJvZEludmFyaWFudCgnMTAyJywgcGx1Z2luTmFtZSkgOiB2b2lkIDA7XG4gICAgICAg
IG5hbWVzVG9QbHVnaW5zW3BsdWdpbk5hbWVdID0gcGx1Z2luTW9kdWxlO1xuICAgICAgICBpc09y
ZGVyaW5nRGlydHkgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNPcmRlcmluZ0Rp
cnR5KSB7XG4gICAgICByZWNvbXB1dGVQbHVnaW5PcmRlcmluZygpO1xuICAgIH1cbiAgfSxcblxu
ICAvKipcbiAgICogTG9va3MgdXAgdGhlIHBsdWdpbiBmb3IgdGhlIHN1cHBsaWVkIGV2ZW50Llxu
ICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgQSBzeW50aGV0aWMgZXZlbnQuXG4gICAq
IEByZXR1cm4gez9vYmplY3R9IFRoZSBwbHVnaW4gdGhhdCBjcmVhdGVkIHRoZSBzdXBwbGllZCBl
dmVudC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXRQbHVnaW5Nb2R1bGVGb3JFdmVudDog
ZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdmFyIGRpc3BhdGNoQ29uZmlnID0gZXZlbnQuZGlzcGF0
Y2hDb25maWc7XG4gICAgaWYgKGRpc3BhdGNoQ29uZmlnLnJlZ2lzdHJhdGlvbk5hbWUpIHtcbiAg
ICAgIHJldHVybiBFdmVudFBsdWdpblJlZ2lzdHJ5LnJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzW2Rp
c3BhdGNoQ29uZmlnLnJlZ2lzdHJhdGlvbk5hbWVdIHx8IG51bGw7XG4gICAgfVxuICAgIGlmIChk
aXNwYXRjaENvbmZpZy5waGFzZWRSZWdpc3RyYXRpb25OYW1lcyAhPT0gdW5kZWZpbmVkKSB7XG4g
ICAgICAvLyBwdWxsaW5nIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzIG91dCBvZiBkaXNwYXRjaENv
bmZpZyBoZWxwcyBGbG93IHNlZVxuICAgICAgLy8gdGhhdCBpdCBpcyBub3QgdW5kZWZpbmVkLlxu
ICAgICAgdmFyIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzID0gZGlzcGF0Y2hDb25maWcucGhhc2Vk
UmVnaXN0cmF0aW9uTmFtZXM7XG5cbiAgICAgIGZvciAodmFyIHBoYXNlIGluIHBoYXNlZFJlZ2lz
dHJhdGlvbk5hbWVzKSB7XG4gICAgICAgIGlmICghcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMuaGFz
T3duUHJvcGVydHkocGhhc2UpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAg
ICAgICAgdmFyIHBsdWdpbk1vZHVsZSA9IEV2ZW50UGx1Z2luUmVnaXN0cnkucmVnaXN0cmF0aW9u
TmFtZU1vZHVsZXNbcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXNbcGhhc2VdXTtcbiAgICAgICAgaWYg
KHBsdWdpbk1vZHVsZSkge1xuICAgICAgICAgIHJldHVybiBwbHVnaW5Nb2R1bGU7XG4gICAgICAg
IH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sXG5cbiAgLyoqXG4gICAq
IEV4cG9zZWQgZm9yIHVuaXQgdGVzdGluZy5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZXNl
dEV2ZW50UGx1Z2luczogZnVuY3Rpb24gKCkge1xuICAgIGV2ZW50UGx1Z2luT3JkZXIgPSBudWxs
O1xuICAgIGZvciAodmFyIHBsdWdpbk5hbWUgaW4gbmFtZXNUb1BsdWdpbnMpIHtcbiAgICAgIGlm
IChuYW1lc1RvUGx1Z2lucy5oYXNPd25Qcm9wZXJ0eShwbHVnaW5OYW1lKSkge1xuICAgICAgICBk
ZWxldGUgbmFtZXNUb1BsdWdpbnNbcGx1Z2luTmFtZV07XG4gICAgICB9XG4gICAgfVxuICAgIEV2
ZW50UGx1Z2luUmVnaXN0cnkucGx1Z2lucy5sZW5ndGggPSAwO1xuXG4gICAgdmFyIGV2ZW50TmFt
ZURpc3BhdGNoQ29uZmlncyA9IEV2ZW50UGx1Z2luUmVnaXN0cnkuZXZlbnROYW1lRGlzcGF0Y2hD
b25maWdzO1xuICAgIGZvciAodmFyIGV2ZW50TmFtZSBpbiBldmVudE5hbWVEaXNwYXRjaENvbmZp
Z3MpIHtcbiAgICAgIGlmIChldmVudE5hbWVEaXNwYXRjaENvbmZpZ3MuaGFzT3duUHJvcGVydHko
ZXZlbnROYW1lKSkge1xuICAgICAgICBkZWxldGUgZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzW2V2
ZW50TmFtZV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHJlZ2lzdHJhdGlvbk5hbWVNb2R1
bGVzID0gRXZlbnRQbHVnaW5SZWdpc3RyeS5yZWdpc3RyYXRpb25OYW1lTW9kdWxlcztcbiAgICBm
b3IgKHZhciByZWdpc3RyYXRpb25OYW1lIGluIHJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzKSB7XG4g
ICAgICBpZiAocmVnaXN0cmF0aW9uTmFtZU1vZHVsZXMuaGFzT3duUHJvcGVydHkocmVnaXN0cmF0
aW9uTmFtZSkpIHtcbiAgICAgICAgZGVsZXRlIHJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzW3JlZ2lz
dHJhdGlvbk5hbWVdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmYWxzZSkge1xuICAgICAg
dmFyIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMgPSBFdmVudFBsdWdpblJlZ2lzdHJ5LnBvc3Np
YmxlUmVnaXN0cmF0aW9uTmFtZXM7XG4gICAgICBmb3IgKHZhciBsb3dlckNhc2VkTmFtZSBpbiBw
b3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzKSB7XG4gICAgICAgIGlmIChwb3NzaWJsZVJlZ2lzdHJh
dGlvbk5hbWVzLmhhc093blByb3BlcnR5KGxvd2VyQ2FzZWROYW1lKSkge1xuICAgICAgICAgIGRl
bGV0ZSBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzW2xvd2VyQ2FzZWROYW1lXTtcbiAgICAgICAg
fVxuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBFdmVudFBsdWdp
blJlZ2lzdHJ5O1xuXG4vKioqLyB9KSxcbi8qIDMyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxl
LCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyoq
XG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0
cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRo
ZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxu
ICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0
aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cblxuXG52YXIgX3Byb2RJbnZhcmlhbnQgPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuXG52YXIgUmVhY3RFcnJvclV0aWxzID0gX193ZWJwYWNr
X3JlcXVpcmVfXygzMyk7XG5cbnZhciBpbnZhcmlhbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDAp
O1xudmFyIHdhcm5pbmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuXG4vKipcbiAqIEluamVj
dGVkIGRlcGVuZGVuY2llczpcbiAqL1xuXG4vKipcbiAqIC0gYENvbXBvbmVudFRyZWVgOiBbcmVx
dWlyZWRdIE1vZHVsZSB0aGF0IGNhbiBjb252ZXJ0IGJldHdlZW4gUmVhY3QgaW5zdGFuY2VzXG4g
KiAgIGFuZCBhY3R1YWwgbm9kZSByZWZlcmVuY2VzLlxuICovXG52YXIgQ29tcG9uZW50VHJlZTtc
bnZhciBUcmVlVHJhdmVyc2FsO1xudmFyIGluamVjdGlvbiA9IHtcbiAgaW5qZWN0Q29tcG9uZW50
VHJlZTogZnVuY3Rpb24gKEluamVjdGVkKSB7XG4gICAgQ29tcG9uZW50VHJlZSA9IEluamVjdGVk
O1xuICAgIGlmIChmYWxzZSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9k
dWN0aW9uJyA/IHdhcm5pbmcoSW5qZWN0ZWQgJiYgSW5qZWN0ZWQuZ2V0Tm9kZUZyb21JbnN0YW5j
ZSAmJiBJbmplY3RlZC5nZXRJbnN0YW5jZUZyb21Ob2RlLCAnRXZlbnRQbHVnaW5VdGlscy5pbmpl
Y3Rpb24uaW5qZWN0Q29tcG9uZW50VHJlZSguLi4pOiBJbmplY3RlZCAnICsgJ21vZHVsZSBpcyBt
aXNzaW5nIGdldE5vZGVGcm9tSW5zdGFuY2Ugb3IgZ2V0SW5zdGFuY2VGcm9tTm9kZS4nKSA6IHZv
aWQgMDtcbiAgICB9XG4gIH0sXG4gIGluamVjdFRyZWVUcmF2ZXJzYWw6IGZ1bmN0aW9uIChJbmpl
Y3RlZCkge1xuICAgIFRyZWVUcmF2ZXJzYWwgPSBJbmplY3RlZDtcbiAgICBpZiAoZmFsc2UpIHtc
biAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKElu
amVjdGVkICYmIEluamVjdGVkLmlzQW5jZXN0b3IgJiYgSW5qZWN0ZWQuZ2V0TG93ZXN0Q29tbW9u
QW5jZXN0b3IsICdFdmVudFBsdWdpblV0aWxzLmluamVjdGlvbi5pbmplY3RUcmVlVHJhdmVyc2Fs
KC4uLik6IEluamVjdGVkICcgKyAnbW9kdWxlIGlzIG1pc3NpbmcgaXNBbmNlc3RvciBvciBnZXRM
b3dlc3RDb21tb25BbmNlc3Rvci4nKSA6IHZvaWQgMDtcbiAgICB9XG4gIH1cbn07XG5cbmZ1bmN0
aW9uIGlzRW5kaXNoKHRvcExldmVsVHlwZSkge1xuICByZXR1cm4gdG9wTGV2ZWxUeXBlID09PSAn
dG9wTW91c2VVcCcgfHwgdG9wTGV2ZWxUeXBlID09PSAndG9wVG91Y2hFbmQnIHx8IHRvcExldmVs
VHlwZSA9PT0gJ3RvcFRvdWNoQ2FuY2VsJztcbn1cblxuZnVuY3Rpb24gaXNNb3ZlaXNoKHRvcExl
dmVsVHlwZSkge1xuICByZXR1cm4gdG9wTGV2ZWxUeXBlID09PSAndG9wTW91c2VNb3ZlJyB8fCB0
b3BMZXZlbFR5cGUgPT09ICd0b3BUb3VjaE1vdmUnO1xufVxuZnVuY3Rpb24gaXNTdGFydGlzaCh0
b3BMZXZlbFR5cGUpIHtcbiAgcmV0dXJuIHRvcExldmVsVHlwZSA9PT0gJ3RvcE1vdXNlRG93bicg
fHwgdG9wTGV2ZWxUeXBlID09PSAndG9wVG91Y2hTdGFydCc7XG59XG5cbnZhciB2YWxpZGF0ZUV2
ZW50RGlzcGF0Y2hlcztcbmlmIChmYWxzZSkge1xuICB2YWxpZGF0ZUV2ZW50RGlzcGF0Y2hlcyA9
IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHZhciBkaXNwYXRjaExpc3RlbmVycyA9IGV2ZW50Ll9k
aXNwYXRjaExpc3RlbmVycztcbiAgICB2YXIgZGlzcGF0Y2hJbnN0YW5jZXMgPSBldmVudC5fZGlz
cGF0Y2hJbnN0YW5jZXM7XG5cbiAgICB2YXIgbGlzdGVuZXJzSXNBcnIgPSBBcnJheS5pc0FycmF5
KGRpc3BhdGNoTGlzdGVuZXJzKTtcbiAgICB2YXIgbGlzdGVuZXJzTGVuID0gbGlzdGVuZXJzSXNB
cnIgPyBkaXNwYXRjaExpc3RlbmVycy5sZW5ndGggOiBkaXNwYXRjaExpc3RlbmVycyA/IDEgOiAw
O1xuXG4gICAgdmFyIGluc3RhbmNlc0lzQXJyID0gQXJyYXkuaXNBcnJheShkaXNwYXRjaEluc3Rh
bmNlcyk7XG4gICAgdmFyIGluc3RhbmNlc0xlbiA9IGluc3RhbmNlc0lzQXJyID8gZGlzcGF0Y2hJ
bnN0YW5jZXMubGVuZ3RoIDogZGlzcGF0Y2hJbnN0YW5jZXMgPyAxIDogMDtcblxuICAgIHByb2Nl
c3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGluc3RhbmNlc0lzQXJy
ID09PSBsaXN0ZW5lcnNJc0FyciAmJiBpbnN0YW5jZXNMZW4gPT09IGxpc3RlbmVyc0xlbiwgJ0V2
ZW50UGx1Z2luVXRpbHM6IEludmFsaWQgYGV2ZW50YC4nKSA6IHZvaWQgMDtcbiAgfTtcbn1cblxu
LyoqXG4gKiBEaXNwYXRjaCB0aGUgZXZlbnQgdG8gdGhlIGxpc3RlbmVyLlxuICogQHBhcmFtIHtT
eW50aGV0aWNFdmVudH0gZXZlbnQgU3ludGhldGljRXZlbnQgdG8gaGFuZGxlXG4gKiBAcGFyYW0g
e2Jvb2xlYW59IHNpbXVsYXRlZCBJZiB0aGUgZXZlbnQgaXMgc2ltdWxhdGVkIChjaGFuZ2VzIGV4
biBiZWhhdmlvcilcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGxpc3RlbmVyIEFwcGxpY2F0aW9uLWxl
dmVsIGNhbGxiYWNrXG4gKiBAcGFyYW0geyp9IGluc3QgSW50ZXJuYWwgY29tcG9uZW50IGluc3Rh
bmNlXG4gKi9cbmZ1bmN0aW9uIGV4ZWN1dGVEaXNwYXRjaChldmVudCwgc2ltdWxhdGVkLCBsaXN0
ZW5lciwgaW5zdCkge1xuICB2YXIgdHlwZSA9IGV2ZW50LnR5cGUgfHwgJ3Vua25vd24tZXZlbnQn
O1xuICBldmVudC5jdXJyZW50VGFyZ2V0ID0gRXZlbnRQbHVnaW5VdGlscy5nZXROb2RlRnJvbUlu
c3RhbmNlKGluc3QpO1xuICBpZiAoc2ltdWxhdGVkKSB7XG4gICAgUmVhY3RFcnJvclV0aWxzLmlu
dm9rZUd1YXJkZWRDYWxsYmFja1dpdGhDYXRjaCh0eXBlLCBsaXN0ZW5lciwgZXZlbnQpO1xuICB9
IGVsc2Uge1xuICAgIFJlYWN0RXJyb3JVdGlscy5pbnZva2VHdWFyZGVkQ2FsbGJhY2sodHlwZSwg
bGlzdGVuZXIsIGV2ZW50KTtcbiAgfVxuICBldmVudC5jdXJyZW50VGFyZ2V0ID0gbnVsbDtcbn1c
blxuLyoqXG4gKiBTdGFuZGFyZC9zaW1wbGUgaXRlcmF0aW9uIHRocm91Z2ggYW4gZXZlbnQncyBj
b2xsZWN0ZWQgZGlzcGF0Y2hlcy5cbiAqL1xuZnVuY3Rpb24gZXhlY3V0ZURpc3BhdGNoZXNJbk9y
ZGVyKGV2ZW50LCBzaW11bGF0ZWQpIHtcbiAgdmFyIGRpc3BhdGNoTGlzdGVuZXJzID0gZXZlbnQu
X2Rpc3BhdGNoTGlzdGVuZXJzO1xuICB2YXIgZGlzcGF0Y2hJbnN0YW5jZXMgPSBldmVudC5fZGlz
cGF0Y2hJbnN0YW5jZXM7XG4gIGlmIChmYWxzZSkge1xuICAgIHZhbGlkYXRlRXZlbnREaXNwYXRj
aGVzKGV2ZW50KTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheShkaXNwYXRjaExpc3RlbmVycykp
IHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpc3BhdGNoTGlzdGVuZXJzLmxlbmd0aDsgaSsr
KSB7XG4gICAgICBpZiAoZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkge1xuICAgICAgICBi
cmVhaztcbiAgICAgIH1cbiAgICAgIC8vIExpc3RlbmVycyBhbmQgSW5zdGFuY2VzIGFyZSB0d28g
cGFyYWxsZWwgYXJyYXlzIHRoYXQgYXJlIGFsd2F5cyBpbiBzeW5jLlxuICAgICAgZXhlY3V0ZURp
c3BhdGNoKGV2ZW50LCBzaW11bGF0ZWQsIGRpc3BhdGNoTGlzdGVuZXJzW2ldLCBkaXNwYXRjaElu
c3RhbmNlc1tpXSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGRpc3BhdGNoTGlzdGVuZXJzKSB7XG4g
ICAgZXhlY3V0ZURpc3BhdGNoKGV2ZW50LCBzaW11bGF0ZWQsIGRpc3BhdGNoTGlzdGVuZXJzLCBk
aXNwYXRjaEluc3RhbmNlcyk7XG4gIH1cbiAgZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzID0gbnVs
bDtcbiAgZXZlbnQuX2Rpc3BhdGNoSW5zdGFuY2VzID0gbnVsbDtcbn1cblxuLyoqXG4gKiBTdGFu
ZGFyZC9zaW1wbGUgaXRlcmF0aW9uIHRocm91Z2ggYW4gZXZlbnQncyBjb2xsZWN0ZWQgZGlzcGF0
Y2hlcywgYnV0IHN0b3BzXG4gKiBhdCB0aGUgZmlyc3QgZGlzcGF0Y2ggZXhlY3V0aW9uIHJldHVy
bmluZyB0cnVlLCBhbmQgcmV0dXJucyB0aGF0IGlkLlxuICpcbiAqIEByZXR1cm4gez9zdHJpbmd9
IGlkIG9mIHRoZSBmaXJzdCBkaXNwYXRjaCBleGVjdXRpb24gd2hvJ3MgbGlzdGVuZXIgcmV0dXJu
c1xuICogdHJ1ZSwgb3IgbnVsbCBpZiBubyBsaXN0ZW5lciByZXR1cm5lZCB0cnVlLlxuICovXG5m
dW5jdGlvbiBleGVjdXRlRGlzcGF0Y2hlc0luT3JkZXJTdG9wQXRUcnVlSW1wbChldmVudCkge1xu
ICB2YXIgZGlzcGF0Y2hMaXN0ZW5lcnMgPSBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnM7XG4gIHZh
ciBkaXNwYXRjaEluc3RhbmNlcyA9IGV2ZW50Ll9kaXNwYXRjaEluc3RhbmNlcztcbiAgaWYgKGZh
bHNlKSB7XG4gICAgdmFsaWRhdGVFdmVudERpc3BhdGNoZXMoZXZlbnQpO1xuICB9XG4gIGlmIChB
cnJheS5pc0FycmF5KGRpc3BhdGNoTGlzdGVuZXJzKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgZGlzcGF0Y2hMaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChldmVudC5pc1By
b3BhZ2F0aW9uU3RvcHBlZCgpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgLy8g
TGlzdGVuZXJzIGFuZCBJbnN0YW5jZXMgYXJlIHR3byBwYXJhbGxlbCBhcnJheXMgdGhhdCBhcmUg
YWx3YXlzIGluIHN5bmMuXG4gICAgICBpZiAoZGlzcGF0Y2hMaXN0ZW5lcnNbaV0oZXZlbnQsIGRp
c3BhdGNoSW5zdGFuY2VzW2ldKSkge1xuICAgICAgICByZXR1cm4gZGlzcGF0Y2hJbnN0YW5jZXNb
aV07XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGRpc3BhdGNoTGlzdGVuZXJzKSB7XG4g
ICAgaWYgKGRpc3BhdGNoTGlzdGVuZXJzKGV2ZW50LCBkaXNwYXRjaEluc3RhbmNlcykpIHtcbiAg
ICAgIHJldHVybiBkaXNwYXRjaEluc3RhbmNlcztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7
XG59XG5cbi8qKlxuICogQHNlZSBleGVjdXRlRGlzcGF0Y2hlc0luT3JkZXJTdG9wQXRUcnVlSW1w
bFxuICovXG5mdW5jdGlvbiBleGVjdXRlRGlzcGF0Y2hlc0luT3JkZXJTdG9wQXRUcnVlKGV2ZW50
KSB7XG4gIHZhciByZXQgPSBleGVjdXRlRGlzcGF0Y2hlc0luT3JkZXJTdG9wQXRUcnVlSW1wbChl
dmVudCk7XG4gIGV2ZW50Ll9kaXNwYXRjaEluc3RhbmNlcyA9IG51bGw7XG4gIGV2ZW50Ll9kaXNw
YXRjaExpc3RlbmVycyA9IG51bGw7XG4gIHJldHVybiByZXQ7XG59XG5cbi8qKlxuICogRXhlY3V0
aW9uIG9mIGEgXCJkaXJlY3RcIiBkaXNwYXRjaCAtIHRoZXJlIG11c3QgYmUgYXQgbW9zdCBvbmUg
ZGlzcGF0Y2hcbiAqIGFjY3VtdWxhdGVkIG9uIHRoZSBldmVudCBvciBpdCBpcyBjb25zaWRlcmVk
IGFuIGVycm9yLiBJdCBkb2Vzbid0IHJlYWxseSBtYWtlXG4gKiBzZW5zZSBmb3IgYW4gZXZlbnQg
d2l0aCBtdWx0aXBsZSBkaXNwYXRjaGVzIChidWJibGVkKSB0byBrZWVwIHRyYWNrIG9mIHRoZVxu
ICogcmV0dXJuIHZhbHVlcyBhdCBlYWNoIGRpc3BhdGNoIGV4ZWN1dGlvbiwgYnV0IGl0IGRvZXMg
dGVuZCB0byBtYWtlIHNlbnNlIHdoZW5cbiAqIGRlYWxpbmcgd2l0aCBcImRpcmVjdFwiIGRpc3Bh
dGNoZXMuXG4gKlxuICogQHJldHVybiB7Kn0gVGhlIHJldHVybiB2YWx1ZSBvZiBleGVjdXRpbmcg
dGhlIHNpbmdsZSBkaXNwYXRjaC5cbiAqL1xuZnVuY3Rpb24gZXhlY3V0ZURpcmVjdERpc3BhdGNo
KGV2ZW50KSB7XG4gIGlmIChmYWxzZSkge1xuICAgIHZhbGlkYXRlRXZlbnREaXNwYXRjaGVzKGV2
ZW50KTtcbiAgfVxuICB2YXIgZGlzcGF0Y2hMaXN0ZW5lciA9IGV2ZW50Ll9kaXNwYXRjaExpc3Rl
bmVycztcbiAgdmFyIGRpc3BhdGNoSW5zdGFuY2UgPSBldmVudC5fZGlzcGF0Y2hJbnN0YW5jZXM7
XG4gICEhQXJyYXkuaXNBcnJheShkaXNwYXRjaExpc3RlbmVyKSA/ICBmYWxzZSA/IGludmFyaWFu
dChmYWxzZSwgJ2V4ZWN1dGVEaXJlY3REaXNwYXRjaCguLi4pOiBJbnZhbGlkIGBldmVudGAuJykg
OiBfcHJvZEludmFyaWFudCgnMTAzJykgOiB2b2lkIDA7XG4gIGV2ZW50LmN1cnJlbnRUYXJnZXQg
PSBkaXNwYXRjaExpc3RlbmVyID8gRXZlbnRQbHVnaW5VdGlscy5nZXROb2RlRnJvbUluc3RhbmNl
KGRpc3BhdGNoSW5zdGFuY2UpIDogbnVsbDtcbiAgdmFyIHJlcyA9IGRpc3BhdGNoTGlzdGVuZXIg
PyBkaXNwYXRjaExpc3RlbmVyKGV2ZW50KSA6IG51bGw7XG4gIGV2ZW50LmN1cnJlbnRUYXJnZXQg
PSBudWxsO1xuICBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnMgPSBudWxsO1xuICBldmVudC5fZGlz
cGF0Y2hJbnN0YW5jZXMgPSBudWxsO1xuICByZXR1cm4gcmVzO1xufVxuXG4vKipcbiAqIEBwYXJh
bSB7U3ludGhldGljRXZlbnR9IGV2ZW50XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmZiBu
dW1iZXIgb2YgZGlzcGF0Y2hlcyBhY2N1bXVsYXRlZCBpcyBncmVhdGVyIHRoYW4gMC5cbiAqL1xu
ZnVuY3Rpb24gaGFzRGlzcGF0Y2hlcyhldmVudCkge1xuICByZXR1cm4gISFldmVudC5fZGlzcGF0
Y2hMaXN0ZW5lcnM7XG59XG5cbi8qKlxuICogR2VuZXJhbCB1dGlsaXRpZXMgdGhhdCBhcmUgdXNl
ZnVsIGluIGNyZWF0aW5nIGN1c3RvbSBFdmVudCBQbHVnaW5zLlxuICovXG52YXIgRXZlbnRQbHVn
aW5VdGlscyA9IHtcbiAgaXNFbmRpc2g6IGlzRW5kaXNoLFxuICBpc01vdmVpc2g6IGlzTW92ZWlz
aCxcbiAgaXNTdGFydGlzaDogaXNTdGFydGlzaCxcblxuICBleGVjdXRlRGlyZWN0RGlzcGF0Y2g6
IGV4ZWN1dGVEaXJlY3REaXNwYXRjaCxcbiAgZXhlY3V0ZURpc3BhdGNoZXNJbk9yZGVyOiBleGVj
dXRlRGlzcGF0Y2hlc0luT3JkZXIsXG4gIGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlclN0b3BBdFRy
dWU6IGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlclN0b3BBdFRydWUsXG4gIGhhc0Rpc3BhdGNoZXM6
IGhhc0Rpc3BhdGNoZXMsXG5cbiAgZ2V0SW5zdGFuY2VGcm9tTm9kZTogZnVuY3Rpb24gKG5vZGUp
IHtcbiAgICByZXR1cm4gQ29tcG9uZW50VHJlZS5nZXRJbnN0YW5jZUZyb21Ob2RlKG5vZGUpO1xu
ICB9LFxuICBnZXROb2RlRnJvbUluc3RhbmNlOiBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVy
biBDb21wb25lbnRUcmVlLmdldE5vZGVGcm9tSW5zdGFuY2Uobm9kZSk7XG4gIH0sXG4gIGlzQW5j
ZXN0b3I6IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIFRyZWVUcmF2ZXJzYWwuaXNBbmNl
c3RvcihhLCBiKTtcbiAgfSxcbiAgZ2V0TG93ZXN0Q29tbW9uQW5jZXN0b3I6IGZ1bmN0aW9uIChh
LCBiKSB7XG4gICAgcmV0dXJuIFRyZWVUcmF2ZXJzYWwuZ2V0TG93ZXN0Q29tbW9uQW5jZXN0b3Io
YSwgYik7XG4gIH0sXG4gIGdldFBhcmVudEluc3RhbmNlOiBmdW5jdGlvbiAoaW5zdCkge1xuICAg
IHJldHVybiBUcmVlVHJhdmVyc2FsLmdldFBhcmVudEluc3RhbmNlKGluc3QpO1xuICB9LFxuICB0
cmF2ZXJzZVR3b1BoYXNlOiBmdW5jdGlvbiAodGFyZ2V0LCBmbiwgYXJnKSB7XG4gICAgcmV0dXJu
IFRyZWVUcmF2ZXJzYWwudHJhdmVyc2VUd29QaGFzZSh0YXJnZXQsIGZuLCBhcmcpO1xuICB9LFxu
ICB0cmF2ZXJzZUVudGVyTGVhdmU6IGZ1bmN0aW9uIChmcm9tLCB0bywgZm4sIGFyZ0Zyb20sIGFy
Z1RvKSB7XG4gICAgcmV0dXJuIFRyZWVUcmF2ZXJzYWwudHJhdmVyc2VFbnRlckxlYXZlKGZyb20s
IHRvLCBmbiwgYXJnRnJvbSwgYXJnVG8pO1xuICB9LFxuXG4gIGluamVjdGlvbjogaW5qZWN0aW9u
XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50UGx1Z2luVXRpbHM7XG5cbi8qKiovIH0pLFxu
LyogMzMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1
aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNl
bnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMg
c291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5k
IGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNv
dXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBi
ZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4g
KiBcbiAqL1xuXG5cblxudmFyIGNhdWdodEVycm9yID0gbnVsbDtcblxuLyoqXG4gKiBDYWxsIGEg
ZnVuY3Rpb24gd2hpbGUgZ3VhcmRpbmcgYWdhaW5zdCBlcnJvcnMgdGhhdCBoYXBwZW5zIHdpdGhp
biBpdC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBvZiB0aGUgZ3VhcmQgdG8gdXNlIGZv
ciBsb2dnaW5nIG9yIGRlYnVnZ2luZ1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVu
Y3Rpb24gdG8gaW52b2tlXG4gKiBAcGFyYW0geyp9IGEgRmlyc3QgYXJndW1lbnRcbiAqIEBwYXJh
bSB7Kn0gYiBTZWNvbmQgYXJndW1lbnRcbiAqL1xuZnVuY3Rpb24gaW52b2tlR3VhcmRlZENhbGxi
YWNrKG5hbWUsIGZ1bmMsIGEpIHtcbiAgdHJ5IHtcbiAgICBmdW5jKGEpO1xuICB9IGNhdGNoICh4
KSB7XG4gICAgaWYgKGNhdWdodEVycm9yID09PSBudWxsKSB7XG4gICAgICBjYXVnaHRFcnJvciA9
IHg7XG4gICAgfVxuICB9XG59XG5cbnZhciBSZWFjdEVycm9yVXRpbHMgPSB7XG4gIGludm9rZUd1
YXJkZWRDYWxsYmFjazogaW52b2tlR3VhcmRlZENhbGxiYWNrLFxuXG4gIC8qKlxuICAgKiBJbnZv
a2VkIGJ5IFJlYWN0VGVzdFV0aWxzLlNpbXVsYXRlIHNvIHRoYXQgYW55IGVycm9ycyB0aHJvd24g
YnkgdGhlIGV2ZW50XG4gICAqIGhhbmRsZXIgYXJlIHN1cmUgdG8gYmUgcmV0aHJvd24gYnkgcmV0
aHJvd0NhdWdodEVycm9yLlxuICAgKi9cbiAgaW52b2tlR3VhcmRlZENhbGxiYWNrV2l0aENhdGNo
OiBpbnZva2VHdWFyZGVkQ2FsbGJhY2ssXG5cbiAgLyoqXG4gICAqIER1cmluZyBleGVjdXRpb24g
b2YgZ3VhcmRlZCBmdW5jdGlvbnMgd2Ugd2lsbCBjYXB0dXJlIHRoZSBmaXJzdCBlcnJvciB3aGlj
aFxuICAgKiB3ZSB3aWxsIHJldGhyb3cgdG8gYmUgaGFuZGxlZCBieSB0aGUgdG9wIGxldmVsIGVy
cm9yIGhhbmRsZXIuXG4gICAqL1xuICByZXRocm93Q2F1Z2h0RXJyb3I6IGZ1bmN0aW9uICgpIHtc
biAgICBpZiAoY2F1Z2h0RXJyb3IpIHtcbiAgICAgIHZhciBlcnJvciA9IGNhdWdodEVycm9yO1xu
ICAgICAgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9
XG59O1xuXG5pZiAoZmFsc2UpIHtcbiAgLyoqXG4gICAqIFRvIGhlbHAgZGV2ZWxvcG1lbnQgd2Ug
Y2FuIGdldCBiZXR0ZXIgZGV2dG9vbHMgaW50ZWdyYXRpb24gYnkgc2ltdWxhdGluZyBhXG4gICAq
IHJlYWwgYnJvd3NlciBldmVudC5cbiAgICovXG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5k
ZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRpc3BhdGNoRXZlbnQgPT09ICdmdW5jdGlvbicgJiYg
dHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQuY3JlYXRl
RXZlbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgZmFrZU5vZGUgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdyZWFjdCcpO1xuICAgIFJlYWN0RXJyb3JVdGlscy5pbnZva2VHdWFyZGVkQ2Fs
bGJhY2sgPSBmdW5jdGlvbiAobmFtZSwgZnVuYywgYSkge1xuICAgICAgdmFyIGJvdW5kRnVuYyA9
IGZ1bmMuYmluZChudWxsLCBhKTtcbiAgICAgIHZhciBldnRUeXBlID0gJ3JlYWN0LScgKyBuYW1l
O1xuICAgICAgZmFrZU5vZGUuYWRkRXZlbnRMaXN0ZW5lcihldnRUeXBlLCBib3VuZEZ1bmMsIGZh
bHNlKTtcbiAgICAgIHZhciBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcbiAg
ICAgIGV2dC5pbml0RXZlbnQoZXZ0VHlwZSwgZmFsc2UsIGZhbHNlKTtcbiAgICAgIGZha2VOb2Rl
LmRpc3BhdGNoRXZlbnQoZXZ0KTtcbiAgICAgIGZha2VOb2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIo
ZXZ0VHlwZSwgYm91bmRGdW5jLCBmYWxzZSk7XG4gICAgfTtcbiAgfVxufVxuXG5tb2R1bGUuZXhw
b3J0cyA9IFJlYWN0RXJyb3JVdGlscztcblxuLyoqKi8gfSksXG4vKiAzNCAqL1xuLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBz
dHJpY3RcIjtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5c
biAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNl
bnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNF
IGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0
aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRF
TlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG5cblxuLyoqXG4gKiBH
ZXRzIHRoZSB0YXJnZXQgbm9kZSBmcm9tIGEgbmF0aXZlIGJyb3dzZXIgZXZlbnQgYnkgYWNjb3Vu
dGluZyBmb3JcbiAqIGluY29uc2lzdGVuY2llcyBpbiBicm93c2VyIERPTSBBUElzLlxuICpcbiAq
IEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEBy
ZXR1cm4ge0RPTUV2ZW50VGFyZ2V0fSBUYXJnZXQgbm9kZS5cbiAqL1xuXG5mdW5jdGlvbiBnZXRF
dmVudFRhcmdldChuYXRpdmVFdmVudCkge1xuICB2YXIgdGFyZ2V0ID0gbmF0aXZlRXZlbnQudGFy
Z2V0IHx8IG5hdGl2ZUV2ZW50LnNyY0VsZW1lbnQgfHwgd2luZG93O1xuXG4gIC8vIE5vcm1hbGl6
ZSBTVkcgPHVzZT4gZWxlbWVudCBldmVudHMgIzQ5NjNcbiAgaWYgKHRhcmdldC5jb3JyZXNwb25k
aW5nVXNlRWxlbWVudCkge1xuICAgIHRhcmdldCA9IHRhcmdldC5jb3JyZXNwb25kaW5nVXNlRWxl
bWVudDtcbiAgfVxuXG4gIC8vIFNhZmFyaSBtYXkgZmlyZSBldmVudHMgb24gdGV4dCBub2RlcyAo
Tm9kZS5URVhUX05PREUgaXMgMykuXG4gIC8vIEBzZWUgaHR0cDovL3d3dy5xdWlya3Ntb2RlLm9y
Zy9qcy9ldmVudHNfcHJvcGVydGllcy5odG1sXG4gIHJldHVybiB0YXJnZXQubm9kZVR5cGUgPT09
IDMgPyB0YXJnZXQucGFyZW50Tm9kZSA6IHRhcmdldDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBn
ZXRFdmVudFRhcmdldDtcblxuLyoqKi8gfSksXG4vKiAzNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtc
bi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRl
ciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4g
dGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3Jh
bnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUg
aW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG5cblxudmFyIEV4ZWN1dGlvbkVudmly
b25tZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcblxudmFyIHVzZUhhc0ZlYXR1cmU7XG5p
ZiAoRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NKSB7XG4gIHVzZUhhc0ZlYXR1cmUgPSBk
b2N1bWVudC5pbXBsZW1lbnRhdGlvbiAmJiBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5oYXNGZWF0
dXJlICYmXG4gIC8vIGFsd2F5cyByZXR1cm5zIHRydWUgaW4gbmV3ZXIgYnJvd3NlcnMgYXMgcGVy
IHRoZSBzdGFuZGFyZC5cbiAgLy8gQHNlZSBodHRwOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jZG9t
LWRvbWltcGxlbWVudGF0aW9uLWhhc2ZlYXR1cmVcbiAgZG9jdW1lbnQuaW1wbGVtZW50YXRpb24u
aGFzRmVhdHVyZSgnJywgJycpICE9PSB0cnVlO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhbiBl
dmVudCBpcyBzdXBwb3J0ZWQgaW4gdGhlIGN1cnJlbnQgZXhlY3V0aW9uIGVudmlyb25tZW50Llxu
ICpcbiAqIE5PVEU6IFRoaXMgd2lsbCBub3Qgd29yayBjb3JyZWN0bHkgZm9yIG5vbi1nZW5lcmlj
IGV2ZW50cyBzdWNoIGFzIGBjaGFuZ2VgLFxuICogYHJlc2V0YCwgYGxvYWRgLCBgZXJyb3JgLCBh
bmQgYHNlbGVjdGAuXG4gKlxuICogQm9ycm93cyBmcm9tIE1vZGVybml6ci5cbiAqXG4gKiBAcGFy
YW0ge3N0cmluZ30gZXZlbnROYW1lU3VmZml4IEV2ZW50IG5hbWUsIGUuZy4gXCJjbGlja1wiLlxu
ICogQHBhcmFtIHs/Ym9vbGVhbn0gY2FwdHVyZSBDaGVjayBpZiB0aGUgY2FwdHVyZSBwaGFzZSBp
cyBzdXBwb3J0ZWQuXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBldmVudCBpcyBz
dXBwb3J0ZWQuXG4gKiBAaW50ZXJuYWxcbiAqIEBsaWNlbnNlIE1vZGVybml6ciAzLjAuMHByZSAo
Q3VzdG9tIEJ1aWxkKSB8IE1JVFxuICovXG5mdW5jdGlvbiBpc0V2ZW50U3VwcG9ydGVkKGV2ZW50
TmFtZVN1ZmZpeCwgY2FwdHVyZSkge1xuICBpZiAoIUV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVz
ZURPTSB8fCBjYXB0dXJlICYmICEoJ2FkZEV2ZW50TGlzdGVuZXInIGluIGRvY3VtZW50KSkge1xu
ICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBldmVudE5hbWUgPSAnb24nICsgZXZlbnRO
YW1lU3VmZml4O1xuICB2YXIgaXNTdXBwb3J0ZWQgPSBldmVudE5hbWUgaW4gZG9jdW1lbnQ7XG5c
biAgaWYgKCFpc1N1cHBvcnRlZCkge1xuICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnZGl2Jyk7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoZXZlbnROYW1lLCAncmV0
dXJuOycpO1xuICAgIGlzU3VwcG9ydGVkID0gdHlwZW9mIGVsZW1lbnRbZXZlbnROYW1lXSA9PT0g
J2Z1bmN0aW9uJztcbiAgfVxuXG4gIGlmICghaXNTdXBwb3J0ZWQgJiYgdXNlSGFzRmVhdHVyZSAm
JiBldmVudE5hbWVTdWZmaXggPT09ICd3aGVlbCcpIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBvbmx5
IHdheSB0byB0ZXN0IHN1cHBvcnQgZm9yIHRoZSBgd2hlZWxgIGV2ZW50IGluIElFOSsuXG4gICAg
aXNTdXBwb3J0ZWQgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5oYXNGZWF0dXJlKCdFdmVudHMu
d2hlZWwnLCAnMy4wJyk7XG4gIH1cblxuICByZXR1cm4gaXNTdXBwb3J0ZWQ7XG59XG5cbm1vZHVs
ZS5leHBvcnRzID0gaXNFdmVudFN1cHBvcnRlZDtcblxuLyoqKi8gfSksXG4vKiAzNiAqL1xuLyoq
Ki8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5c
InVzZSBzdHJpY3RcIjtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ss
IEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBp
cyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBM
SUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFu
IGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRo
ZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG5cblxuLyoq
XG4gKiBUcmFuc2xhdGlvbiBmcm9tIG1vZGlmaWVyIGtleSB0byB0aGUgYXNzb2NpYXRlZCBwcm9w
ZXJ0eSBpbiB0aGUgZXZlbnQuXG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZl
bC0zLUV2ZW50cy8ja2V5cy1Nb2RpZmllcnNcbiAqL1xuXG52YXIgbW9kaWZpZXJLZXlUb1Byb3Ag
PSB7XG4gIEFsdDogJ2FsdEtleScsXG4gIENvbnRyb2w6ICdjdHJsS2V5JyxcbiAgTWV0YTogJ21l
dGFLZXknLFxuICBTaGlmdDogJ3NoaWZ0S2V5J1xufTtcblxuLy8gSUU4IGRvZXMgbm90IGltcGxl
bWVudCBnZXRNb2RpZmllclN0YXRlIHNvIHdlIHNpbXBseSBtYXAgaXQgdG8gdGhlIG9ubHlcbi8v
IG1vZGlmaWVyIGtleXMgZXhwb3NlZCBieSB0aGUgZXZlbnQgaXRzZWxmLCBkb2VzIG5vdCBzdXBw
b3J0IExvY2sta2V5cy5cbi8vIEN1cnJlbnRseSwgYWxsIG1ham9yIGJyb3dzZXJzIGV4Y2VwdCBD
aHJvbWUgc2VlbXMgdG8gc3VwcG9ydCBMb2NrLWtleXMuXG5mdW5jdGlvbiBtb2RpZmllclN0YXRl
R2V0dGVyKGtleUFyZykge1xuICB2YXIgc3ludGhldGljRXZlbnQgPSB0aGlzO1xuICB2YXIgbmF0
aXZlRXZlbnQgPSBzeW50aGV0aWNFdmVudC5uYXRpdmVFdmVudDtcbiAgaWYgKG5hdGl2ZUV2ZW50
LmdldE1vZGlmaWVyU3RhdGUpIHtcbiAgICByZXR1cm4gbmF0aXZlRXZlbnQuZ2V0TW9kaWZpZXJT
dGF0ZShrZXlBcmcpO1xuICB9XG4gIHZhciBrZXlQcm9wID0gbW9kaWZpZXJLZXlUb1Byb3Bba2V5
QXJnXTtcbiAgcmV0dXJuIGtleVByb3AgPyAhIW5hdGl2ZUV2ZW50W2tleVByb3BdIDogZmFsc2U7
XG59XG5cbmZ1bmN0aW9uIGdldEV2ZW50TW9kaWZpZXJTdGF0ZShuYXRpdmVFdmVudCkge1xuICBy
ZXR1cm4gbW9kaWZpZXJTdGF0ZUdldHRlcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRFdmVu
dE1vZGlmaWVyU3RhdGU7XG5cbi8qKiovIH0pLFxuLyogMzcgKi9cbi8qKiovIChmdW5jdGlvbiht
b2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7
XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwg
cmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5k
ZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdy
YW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxl
IGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuXG5cbnZhciBET01MYXp5VHJlZSA9
IF9fd2VicGFja19yZXF1aXJlX18oMTcpO1xudmFyIERhbmdlciA9IF9fd2VicGFja19yZXF1aXJl
X18oMTMzKTtcbnZhciBSZWFjdERPTUNvbXBvbmVudFRyZWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KDQpO1xudmFyIFJlYWN0SW5zdHJ1bWVudGF0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtc
blxudmFyIGNyZWF0ZU1pY3Jvc29mdFVuc2FmZUxvY2FsRnVuY3Rpb24gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKDM5KTtcbnZhciBzZXRJbm5lckhUTUwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2KTtc
bnZhciBzZXRUZXh0Q29udGVudCA9IF9fd2VicGFja19yZXF1aXJlX18oNjcpO1xuXG5mdW5jdGlv
biBnZXROb2RlQWZ0ZXIocGFyZW50Tm9kZSwgbm9kZSkge1xuICAvLyBTcGVjaWFsIGNhc2UgZm9y
IHRleHQgY29tcG9uZW50cywgd2hpY2ggcmV0dXJuIFtvcGVuLCBjbG9zZV0gY29tbWVudHNcbiAg
Ly8gZnJvbSBnZXRIb3N0Tm9kZS5cbiAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHtcbiAgICBu
b2RlID0gbm9kZVsxXTtcbiAgfVxuICByZXR1cm4gbm9kZSA/IG5vZGUubmV4dFNpYmxpbmcgOiBw
YXJlbnROb2RlLmZpcnN0Q2hpbGQ7XG59XG5cbi8qKlxuICogSW5zZXJ0cyBgY2hpbGROb2RlYCBh
cyBhIGNoaWxkIG9mIGBwYXJlbnROb2RlYCBhdCB0aGUgYGluZGV4YC5cbiAqXG4gKiBAcGFyYW0g
e0RPTUVsZW1lbnR9IHBhcmVudE5vZGUgUGFyZW50IG5vZGUgaW4gd2hpY2ggdG8gaW5zZXJ0Llxu
ICogQHBhcmFtIHtET01FbGVtZW50fSBjaGlsZE5vZGUgQ2hpbGQgbm9kZSB0byBpbnNlcnQuXG4g
KiBAcGFyYW0ge251bWJlcn0gaW5kZXggSW5kZXggYXQgd2hpY2ggdG8gaW5zZXJ0IHRoZSBjaGls
ZC5cbiAqIEBpbnRlcm5hbFxuICovXG52YXIgaW5zZXJ0Q2hpbGRBdCA9IGNyZWF0ZU1pY3Jvc29m
dFVuc2FmZUxvY2FsRnVuY3Rpb24oZnVuY3Rpb24gKHBhcmVudE5vZGUsIGNoaWxkTm9kZSwgcmVm
ZXJlbmNlTm9kZSkge1xuICAvLyBXZSByZWx5IGV4Y2x1c2l2ZWx5IG9uIGBpbnNlcnRCZWZvcmUo
bm9kZSwgbnVsbClgIGluc3RlYWQgb2YgYWxzbyB1c2luZ1xuICAvLyBgYXBwZW5kQ2hpbGQobm9k
ZSlgLiAoVXNpbmcgYHVuZGVmaW5lZGAgaXMgbm90IGFsbG93ZWQgYnkgYWxsIGJyb3dzZXJzIHNv
XG4gIC8vIHdlIGFyZSBjYXJlZnVsIHRvIHVzZSBgbnVsbGAuKVxuICBwYXJlbnROb2RlLmluc2Vy
dEJlZm9yZShjaGlsZE5vZGUsIHJlZmVyZW5jZU5vZGUpO1xufSk7XG5cbmZ1bmN0aW9uIGluc2Vy
dExhenlUcmVlQ2hpbGRBdChwYXJlbnROb2RlLCBjaGlsZFRyZWUsIHJlZmVyZW5jZU5vZGUpIHtc
biAgRE9NTGF6eVRyZWUuaW5zZXJ0VHJlZUJlZm9yZShwYXJlbnROb2RlLCBjaGlsZFRyZWUsIHJl
ZmVyZW5jZU5vZGUpO1xufVxuXG5mdW5jdGlvbiBtb3ZlQ2hpbGQocGFyZW50Tm9kZSwgY2hpbGRO
b2RlLCByZWZlcmVuY2VOb2RlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGNoaWxkTm9kZSkpIHtc
biAgICBtb3ZlRGVsaW1pdGVkVGV4dChwYXJlbnROb2RlLCBjaGlsZE5vZGVbMF0sIGNoaWxkTm9k
ZVsxXSwgcmVmZXJlbmNlTm9kZSk7XG4gIH0gZWxzZSB7XG4gICAgaW5zZXJ0Q2hpbGRBdChwYXJl
bnROb2RlLCBjaGlsZE5vZGUsIHJlZmVyZW5jZU5vZGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJl
bW92ZUNoaWxkKHBhcmVudE5vZGUsIGNoaWxkTm9kZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShj
aGlsZE5vZGUpKSB7XG4gICAgdmFyIGNsb3NpbmdDb21tZW50ID0gY2hpbGROb2RlWzFdO1xuICAg
IGNoaWxkTm9kZSA9IGNoaWxkTm9kZVswXTtcbiAgICByZW1vdmVEZWxpbWl0ZWRUZXh0KHBhcmVu
dE5vZGUsIGNoaWxkTm9kZSwgY2xvc2luZ0NvbW1lbnQpO1xuICAgIHBhcmVudE5vZGUucmVtb3Zl
Q2hpbGQoY2xvc2luZ0NvbW1lbnQpO1xuICB9XG4gIHBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY2hp
bGROb2RlKTtcbn1cblxuZnVuY3Rpb24gbW92ZURlbGltaXRlZFRleHQocGFyZW50Tm9kZSwgb3Bl
bmluZ0NvbW1lbnQsIGNsb3NpbmdDb21tZW50LCByZWZlcmVuY2VOb2RlKSB7XG4gIHZhciBub2Rl
ID0gb3BlbmluZ0NvbW1lbnQ7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgdmFyIG5leHROb2RlID0g
bm9kZS5uZXh0U2libGluZztcbiAgICBpbnNlcnRDaGlsZEF0KHBhcmVudE5vZGUsIG5vZGUsIHJl
ZmVyZW5jZU5vZGUpO1xuICAgIGlmIChub2RlID09PSBjbG9zaW5nQ29tbWVudCkge1xuICAgICAg
YnJlYWs7XG4gICAgfVxuICAgIG5vZGUgPSBuZXh0Tm9kZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBy
ZW1vdmVEZWxpbWl0ZWRUZXh0KHBhcmVudE5vZGUsIHN0YXJ0Tm9kZSwgY2xvc2luZ0NvbW1lbnQp
IHtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICB2YXIgbm9kZSA9IHN0YXJ0Tm9kZS5uZXh0U2libGlu
ZztcbiAgICBpZiAobm9kZSA9PT0gY2xvc2luZ0NvbW1lbnQpIHtcbiAgICAgIC8vIFRoZSBjbG9z
aW5nIGNvbW1lbnQgaXMgcmVtb3ZlZCBieSBSZWFjdE11bHRpQ2hpbGQuXG4gICAgICBicmVhaztc
biAgICB9IGVsc2Uge1xuICAgICAgcGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlKTtcbiAgICB9
XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVwbGFjZURlbGltaXRlZFRleHQob3BlbmluZ0NvbW1lbnQs
IGNsb3NpbmdDb21tZW50LCBzdHJpbmdUZXh0KSB7XG4gIHZhciBwYXJlbnROb2RlID0gb3Blbmlu
Z0NvbW1lbnQucGFyZW50Tm9kZTtcbiAgdmFyIG5vZGVBZnRlckNvbW1lbnQgPSBvcGVuaW5nQ29t
bWVudC5uZXh0U2libGluZztcbiAgaWYgKG5vZGVBZnRlckNvbW1lbnQgPT09IGNsb3NpbmdDb21t
ZW50KSB7XG4gICAgLy8gVGhlcmUgYXJlIG5vIHRleHQgbm9kZXMgYmV0d2VlbiB0aGUgb3Blbmlu
ZyBhbmQgY2xvc2luZyBjb21tZW50czsgaW5zZXJ0XG4gICAgLy8gYSBuZXcgb25lIGlmIHN0cmlu
Z1RleHQgaXNuJ3QgZW1wdHkuXG4gICAgaWYgKHN0cmluZ1RleHQpIHtcbiAgICAgIGluc2VydENo
aWxkQXQocGFyZW50Tm9kZSwgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoc3RyaW5nVGV4dCksIG5v
ZGVBZnRlckNvbW1lbnQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoc3RyaW5nVGV4dCkg
e1xuICAgICAgLy8gU2V0IHRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIGZpcnN0IG5vZGUgYWZ0ZXIg
dGhlIG9wZW5pbmcgY29tbWVudCwgYW5kXG4gICAgICAvLyByZW1vdmUgYWxsIGZvbGxvd2luZyBu
b2RlcyB1cCB1bnRpbCB0aGUgY2xvc2luZyBjb21tZW50LlxuICAgICAgc2V0VGV4dENvbnRlbnQo
bm9kZUFmdGVyQ29tbWVudCwgc3RyaW5nVGV4dCk7XG4gICAgICByZW1vdmVEZWxpbWl0ZWRUZXh0
KHBhcmVudE5vZGUsIG5vZGVBZnRlckNvbW1lbnQsIGNsb3NpbmdDb21tZW50KTtcbiAgICB9IGVs
c2Uge1xuICAgICAgcmVtb3ZlRGVsaW1pdGVkVGV4dChwYXJlbnROb2RlLCBvcGVuaW5nQ29tbWVu
dCwgY2xvc2luZ0NvbW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChmYWxzZSkge1xuICAgIFJl
YWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vbkhvc3RPcGVyYXRpb24oe1xuICAgICAgaW5z
dGFuY2VJRDogUmVhY3RET01Db21wb25lbnRUcmVlLmdldEluc3RhbmNlRnJvbU5vZGUob3Blbmlu
Z0NvbW1lbnQpLl9kZWJ1Z0lELFxuICAgICAgdHlwZTogJ3JlcGxhY2UgdGV4dCcsXG4gICAgICBw
YXlsb2FkOiBzdHJpbmdUZXh0XG4gICAgfSk7XG4gIH1cbn1cblxudmFyIGRhbmdlcm91c2x5UmVw
bGFjZU5vZGVXaXRoTWFya3VwID0gRGFuZ2VyLmRhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFy
a3VwO1xuaWYgKGZhbHNlKSB7XG4gIGRhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwID0g
ZnVuY3Rpb24gKG9sZENoaWxkLCBtYXJrdXAsIHByZXZJbnN0YW5jZSkge1xuICAgIERhbmdlci5k
YW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0aE1hcmt1cChvbGRDaGlsZCwgbWFya3VwKTtcbiAgICBp
ZiAocHJldkluc3RhbmNlLl9kZWJ1Z0lEICE9PSAwKSB7XG4gICAgICBSZWFjdEluc3RydW1lbnRh
dGlvbi5kZWJ1Z1Rvb2wub25Ib3N0T3BlcmF0aW9uKHtcbiAgICAgICAgaW5zdGFuY2VJRDogcHJl
dkluc3RhbmNlLl9kZWJ1Z0lELFxuICAgICAgICB0eXBlOiAncmVwbGFjZSB3aXRoJyxcbiAgICAg
ICAgcGF5bG9hZDogbWFya3VwLnRvU3RyaW5nKClcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4g
ICAgICB2YXIgbmV4dEluc3RhbmNlID0gUmVhY3RET01Db21wb25lbnRUcmVlLmdldEluc3RhbmNl
RnJvbU5vZGUobWFya3VwLm5vZGUpO1xuICAgICAgaWYgKG5leHRJbnN0YW5jZS5fZGVidWdJRCAh
PT0gMCkge1xuICAgICAgICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25Ib3N0T3Bl
cmF0aW9uKHtcbiAgICAgICAgICBpbnN0YW5jZUlEOiBuZXh0SW5zdGFuY2UuX2RlYnVnSUQsXG4g
ICAgICAgICAgdHlwZTogJ21vdW50JyxcbiAgICAgICAgICBwYXlsb2FkOiBtYXJrdXAudG9TdHJp
bmcoKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogT3Bl
cmF0aW9ucyBmb3IgdXBkYXRpbmcgd2l0aCBET00gY2hpbGRyZW4uXG4gKi9cbnZhciBET01DaGls
ZHJlbk9wZXJhdGlvbnMgPSB7XG4gIGRhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwOiBk
YW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0aE1hcmt1cCxcblxuICByZXBsYWNlRGVsaW1pdGVkVGV4
dDogcmVwbGFjZURlbGltaXRlZFRleHQsXG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYSBjb21wb25l
bnQncyBjaGlsZHJlbiBieSBwcm9jZXNzaW5nIGEgc2VyaWVzIG9mIHVwZGF0ZXMuIFRoZVxuICAg
KiB1cGRhdGUgY29uZmlndXJhdGlvbnMgYXJlIGVhY2ggZXhwZWN0ZWQgdG8gaGF2ZSBhIGBwYXJl
bnROb2RlYCBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHBhcmFtIHthcnJheTxvYmplY3Q+fSB1cGRh
dGVzIExpc3Qgb2YgdXBkYXRlIGNvbmZpZ3VyYXRpb25zLlxuICAgKiBAaW50ZXJuYWxcbiAgICov
XG4gIHByb2Nlc3NVcGRhdGVzOiBmdW5jdGlvbiAocGFyZW50Tm9kZSwgdXBkYXRlcykge1xuICAg
IGlmIChmYWxzZSkge1xuICAgICAgdmFyIHBhcmVudE5vZGVEZWJ1Z0lEID0gUmVhY3RET01Db21w
b25lbnRUcmVlLmdldEluc3RhbmNlRnJvbU5vZGUocGFyZW50Tm9kZSkuX2RlYnVnSUQ7XG4gICAg
fVxuXG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCB1cGRhdGVzLmxlbmd0aDsgaysrKSB7XG4gICAg
ICB2YXIgdXBkYXRlID0gdXBkYXRlc1trXTtcbiAgICAgIHN3aXRjaCAodXBkYXRlLnR5cGUpIHtc
biAgICAgICAgY2FzZSAnSU5TRVJUX01BUktVUCc6XG4gICAgICAgICAgaW5zZXJ0TGF6eVRyZWVD
aGlsZEF0KHBhcmVudE5vZGUsIHVwZGF0ZS5jb250ZW50LCBnZXROb2RlQWZ0ZXIocGFyZW50Tm9k
ZSwgdXBkYXRlLmFmdGVyTm9kZSkpO1xuICAgICAgICAgIGlmIChmYWxzZSkge1xuICAgICAgICAg
ICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uSG9zdE9wZXJhdGlvbih7XG4gICAg
ICAgICAgICAgIGluc3RhbmNlSUQ6IHBhcmVudE5vZGVEZWJ1Z0lELFxuICAgICAgICAgICAgICB0
eXBlOiAnaW5zZXJ0IGNoaWxkJyxcbiAgICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAg
ICAgICAgIHRvSW5kZXg6IHVwZGF0ZS50b0luZGV4LFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6
IHVwZGF0ZS5jb250ZW50LnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAg
fSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdNT1ZFX0VY
SVNUSU5HJzpcbiAgICAgICAgICBtb3ZlQ2hpbGQocGFyZW50Tm9kZSwgdXBkYXRlLmZyb21Ob2Rl
LCBnZXROb2RlQWZ0ZXIocGFyZW50Tm9kZSwgdXBkYXRlLmFmdGVyTm9kZSkpO1xuICAgICAgICAg
IGlmIChmYWxzZSkge1xuICAgICAgICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29s
Lm9uSG9zdE9wZXJhdGlvbih7XG4gICAgICAgICAgICAgIGluc3RhbmNlSUQ6IHBhcmVudE5vZGVE
ZWJ1Z0lELFxuICAgICAgICAgICAgICB0eXBlOiAnbW92ZSBjaGlsZCcsXG4gICAgICAgICAgICAg
IHBheWxvYWQ6IHsgZnJvbUluZGV4OiB1cGRhdGUuZnJvbUluZGV4LCB0b0luZGV4OiB1cGRhdGUu
dG9JbmRleCB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7
XG4gICAgICAgIGNhc2UgJ1NFVF9NQVJLVVAnOlxuICAgICAgICAgIHNldElubmVySFRNTChwYXJl
bnROb2RlLCB1cGRhdGUuY29udGVudCk7XG4gICAgICAgICAgaWYgKGZhbHNlKSB7XG4gICAgICAg
ICAgICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25Ib3N0T3BlcmF0aW9uKHtcbiAg
ICAgICAgICAgICAgaW5zdGFuY2VJRDogcGFyZW50Tm9kZURlYnVnSUQsXG4gICAgICAgICAgICAg
IHR5cGU6ICdyZXBsYWNlIGNoaWxkcmVuJyxcbiAgICAgICAgICAgICAgcGF5bG9hZDogdXBkYXRl
LmNvbnRlbnQudG9TdHJpbmcoKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAg
ICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdURVhUX0NPTlRFTlQnOlxuICAgICAgICAgIHNldFRl
eHRDb250ZW50KHBhcmVudE5vZGUsIHVwZGF0ZS5jb250ZW50KTtcbiAgICAgICAgICBpZiAoZmFs
c2UpIHtcbiAgICAgICAgICAgIFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vbkhvc3RP
cGVyYXRpb24oe1xuICAgICAgICAgICAgICBpbnN0YW5jZUlEOiBwYXJlbnROb2RlRGVidWdJRCxc
biAgICAgICAgICAgICAgdHlwZTogJ3JlcGxhY2UgdGV4dCcsXG4gICAgICAgICAgICAgIHBheWxv
YWQ6IHVwZGF0ZS5jb250ZW50LnRvU3RyaW5nKClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAg
IH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnUkVNT1ZFX05PREUnOlxuICAgICAg
ICAgIHJlbW92ZUNoaWxkKHBhcmVudE5vZGUsIHVwZGF0ZS5mcm9tTm9kZSk7XG4gICAgICAgICAg
aWYgKGZhbHNlKSB7XG4gICAgICAgICAgICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wu
b25Ib3N0T3BlcmF0aW9uKHtcbiAgICAgICAgICAgICAgaW5zdGFuY2VJRDogcGFyZW50Tm9kZURl
YnVnSUQsXG4gICAgICAgICAgICAgIHR5cGU6ICdyZW1vdmUgY2hpbGQnLFxuICAgICAgICAgICAg
ICBwYXlsb2FkOiB7IGZyb21JbmRleDogdXBkYXRlLmZyb21JbmRleCB9XG4gICAgICAgICAgICB9
KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG59
O1xuXG5tb2R1bGUuZXhwb3J0cyA9IERPTUNoaWxkcmVuT3BlcmF0aW9ucztcblxuLyoqKi8gfSks
XG4vKiAzOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3Jl
cXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJl
c2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhp
cyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91
bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMg
c291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2Fu
IGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpc
biAqL1xuXG5cblxudmFyIERPTU5hbWVzcGFjZXMgPSB7XG4gIGh0bWw6ICdodHRwOi8vd3d3Lncz
Lm9yZy8xOTk5L3hodG1sJyxcbiAgbWF0aG1sOiAnaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRo
L01hdGhNTCcsXG4gIHN2ZzogJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJ1xufTtcblxubW9k
dWxlLmV4cG9ydHMgPSBET01OYW1lc3BhY2VzO1xuXG4vKioqLyB9KSxcbi8qIDM5ICovXG4vKioq
LyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwi
dXNlIHN0cmljdFwiO1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywg
SW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlz
IGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJ
Q0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4g
YWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhl
IFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbi8qIGdsb2Jh
bHMgTVNBcHAgKi9cblxuXG5cbi8qKlxuICogQ3JlYXRlIGEgZnVuY3Rpb24gd2hpY2ggaGFzICd1
bnNhZmUnIHByaXZpbGVnZXMgKHJlcXVpcmVkIGJ5IHdpbmRvd3M4IGFwcHMpXG4gKi9cblxudmFy
IGNyZWF0ZU1pY3Jvc29mdFVuc2FmZUxvY2FsRnVuY3Rpb24gPSBmdW5jdGlvbiAoZnVuYykge1xu
ICBpZiAodHlwZW9mIE1TQXBwICE9PSAndW5kZWZpbmVkJyAmJiBNU0FwcC5leGVjVW5zYWZlTG9j
YWxGdW5jdGlvbikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoYXJnMCwgYXJnMSwgYXJnMiwgYXJn
Mykge1xuICAgICAgTVNBcHAuZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24oZnVuY3Rpb24gKCkge1xu
ICAgICAgICByZXR1cm4gZnVuYyhhcmcwLCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgICAgIH0pO1xu
ICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZ1bmM7XG4gIH1cbn07XG5cbm1vZHVsZS5l
eHBvcnRzID0gY3JlYXRlTWljcm9zb2Z0VW5zYWZlTG9jYWxGdW5jdGlvbjtcblxuLyoqKi8gfSks
XG4vKiA0MCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3Jl
cXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJl
c2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhp
cyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91
bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMg
c291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2Fu
IGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpc
biAqL1xuXG5cblxudmFyIF9wcm9kSW52YXJpYW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtc
blxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTEpO1xu
dmFyIHByb3BUeXBlc0ZhY3RvcnkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU2KTtcblxudmFyIFJl
YWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7XG52YXIgUHJvcFR5cGVzID0gcHJvcFR5cGVz
RmFjdG9yeShSZWFjdC5pc1ZhbGlkRWxlbWVudCk7XG5cbnZhciBpbnZhcmlhbnQgPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKDApO1xudmFyIHdhcm5pbmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xu
XG52YXIgaGFzUmVhZE9ubHlWYWx1ZSA9IHtcbiAgYnV0dG9uOiB0cnVlLFxuICBjaGVja2JveDog
dHJ1ZSxcbiAgaW1hZ2U6IHRydWUsXG4gIGhpZGRlbjogdHJ1ZSxcbiAgcmFkaW86IHRydWUsXG4g
IHJlc2V0OiB0cnVlLFxuICBzdWJtaXQ6IHRydWVcbn07XG5cbmZ1bmN0aW9uIF9hc3NlcnRTaW5n
bGVMaW5rKGlucHV0UHJvcHMpIHtcbiAgIShpbnB1dFByb3BzLmNoZWNrZWRMaW5rID09IG51bGwg
fHwgaW5wdXRQcm9wcy52YWx1ZUxpbmsgPT0gbnVsbCkgPyAgZmFsc2UgPyBpbnZhcmlhbnQoZmFs
c2UsICdDYW5ub3QgcHJvdmlkZSBhIGNoZWNrZWRMaW5rIGFuZCBhIHZhbHVlTGluay4gSWYgeW91
IHdhbnQgdG8gdXNlIGNoZWNrZWRMaW5rLCB5b3UgcHJvYmFibHkgZG9uXFwndCB3YW50IHRvIHVz
ZSB2YWx1ZUxpbmsgYW5kIHZpY2UgdmVyc2EuJykgOiBfcHJvZEludmFyaWFudCgnODcnKSA6IHZv
aWQgMDtcbn1cbmZ1bmN0aW9uIF9hc3NlcnRWYWx1ZUxpbmsoaW5wdXRQcm9wcykge1xuICBfYXNz
ZXJ0U2luZ2xlTGluayhpbnB1dFByb3BzKTtcbiAgIShpbnB1dFByb3BzLnZhbHVlID09IG51bGwg
JiYgaW5wdXRQcm9wcy5vbkNoYW5nZSA9PSBudWxsKSA/ICBmYWxzZSA/IGludmFyaWFudChmYWxz
ZSwgJ0Nhbm5vdCBwcm92aWRlIGEgdmFsdWVMaW5rIGFuZCBhIHZhbHVlIG9yIG9uQ2hhbmdlIGV2
ZW50LiBJZiB5b3Ugd2FudCB0byB1c2UgdmFsdWUgb3Igb25DaGFuZ2UsIHlvdSBwcm9iYWJseSBk
b25cXCd0IHdhbnQgdG8gdXNlIHZhbHVlTGluay4nKSA6IF9wcm9kSW52YXJpYW50KCc4OCcpIDog
dm9pZCAwO1xufVxuXG5mdW5jdGlvbiBfYXNzZXJ0Q2hlY2tlZExpbmsoaW5wdXRQcm9wcykge1xu
ICBfYXNzZXJ0U2luZ2xlTGluayhpbnB1dFByb3BzKTtcbiAgIShpbnB1dFByb3BzLmNoZWNrZWQg
PT0gbnVsbCAmJiBpbnB1dFByb3BzLm9uQ2hhbmdlID09IG51bGwpID8gIGZhbHNlID8gaW52YXJp
YW50KGZhbHNlLCAnQ2Fubm90IHByb3ZpZGUgYSBjaGVja2VkTGluayBhbmQgYSBjaGVja2VkIHBy
b3BlcnR5IG9yIG9uQ2hhbmdlIGV2ZW50LiBJZiB5b3Ugd2FudCB0byB1c2UgY2hlY2tlZCBvciBv
bkNoYW5nZSwgeW91IHByb2JhYmx5IGRvblxcJ3Qgd2FudCB0byB1c2UgY2hlY2tlZExpbmsnKSA6
IF9wcm9kSW52YXJpYW50KCc4OScpIDogdm9pZCAwO1xufVxuXG52YXIgcHJvcFR5cGVzID0ge1xu
ICB2YWx1ZTogZnVuY3Rpb24gKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAg
IGlmICghcHJvcHNbcHJvcE5hbWVdIHx8IGhhc1JlYWRPbmx5VmFsdWVbcHJvcHMudHlwZV0gfHwg
cHJvcHMub25DaGFuZ2UgfHwgcHJvcHMucmVhZE9ubHkgfHwgcHJvcHMuZGlzYWJsZWQpIHtcbiAg
ICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEVycm9yKCdZb3UgcHJvdmlk
ZWQgYSBgdmFsdWVgIHByb3AgdG8gYSBmb3JtIGZpZWxkIHdpdGhvdXQgYW4gJyArICdgb25DaGFu
Z2VgIGhhbmRsZXIuIFRoaXMgd2lsbCByZW5kZXIgYSByZWFkLW9ubHkgZmllbGQuIElmICcgKyAn
dGhlIGZpZWxkIHNob3VsZCBiZSBtdXRhYmxlIHVzZSBgZGVmYXVsdFZhbHVlYC4gT3RoZXJ3aXNl
LCAnICsgJ3NldCBlaXRoZXIgYG9uQ2hhbmdlYCBvciBgcmVhZE9ubHlgLicpO1xuICB9LFxuICBj
aGVja2VkOiBmdW5jdGlvbiAocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAg
aWYgKCFwcm9wc1twcm9wTmFtZV0gfHwgcHJvcHMub25DaGFuZ2UgfHwgcHJvcHMucmVhZE9ubHkg
fHwgcHJvcHMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1
cm4gbmV3IEVycm9yKCdZb3UgcHJvdmlkZWQgYSBgY2hlY2tlZGAgcHJvcCB0byBhIGZvcm0gZmll
bGQgd2l0aG91dCBhbiAnICsgJ2BvbkNoYW5nZWAgaGFuZGxlci4gVGhpcyB3aWxsIHJlbmRlciBh
IHJlYWQtb25seSBmaWVsZC4gSWYgJyArICd0aGUgZmllbGQgc2hvdWxkIGJlIG11dGFibGUgdXNl
IGBkZWZhdWx0Q2hlY2tlZGAuIE90aGVyd2lzZSwgJyArICdzZXQgZWl0aGVyIGBvbkNoYW5nZWAg
b3IgYHJlYWRPbmx5YC4nKTtcbiAgfSxcbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jXG59O1xu
XG52YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG5mdW5jdGlvbiBnZXREZWNsYXJhdGlvbkVy
cm9yQWRkZW5kdW0ob3duZXIpIHtcbiAgaWYgKG93bmVyKSB7XG4gICAgdmFyIG5hbWUgPSBvd25l
ci5nZXROYW1lKCk7XG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIHJldHVybiAnIENoZWNrIHRoZSBy
ZW5kZXIgbWV0aG9kIG9mIGAnICsgbmFtZSArICdgLic7XG4gICAgfVxuICB9XG4gIHJldHVybiAn
Jztcbn1cblxuLyoqXG4gKiBQcm92aWRlIGEgbGlua2VkIGB2YWx1ZWAgYXR0cmlidXRlIGZvciBj
b250cm9sbGVkIGZvcm1zLiBZb3Ugc2hvdWxkIG5vdCB1c2VcbiAqIHRoaXMgb3V0c2lkZSBvZiB0
aGUgUmVhY3RET00gY29udHJvbGxlZCBmb3JtIGNvbXBvbmVudHMuXG4gKi9cbnZhciBMaW5rZWRW
YWx1ZVV0aWxzID0ge1xuICBjaGVja1Byb3BUeXBlczogZnVuY3Rpb24gKHRhZ05hbWUsIHByb3Bz
LCBvd25lcikge1xuICAgIGZvciAodmFyIHByb3BOYW1lIGluIHByb3BUeXBlcykge1xuICAgICAg
aWYgKHByb3BUeXBlcy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgdmFyIGVy
cm9yID0gcHJvcFR5cGVzW3Byb3BOYW1lXShwcm9wcywgcHJvcE5hbWUsIHRhZ05hbWUsICdwcm9w
JywgbnVsbCwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgfVxuICAgICAgaWYgKGVycm9y
IGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvci5tZXNzYWdlIGluIGxvZ2dlZFR5cGVGYWlsdXJl
cykpIHtcbiAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2Ug
dGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgIC8vIHNhbWUgZXJyb3IuXG4g
ICAgICAgIGxvZ2dlZFR5cGVGYWlsdXJlc1tlcnJvci5tZXNzYWdlXSA9IHRydWU7XG5cbiAgICAg
ICAgdmFyIGFkZGVuZHVtID0gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKG93bmVyKTtcbiAg
ICAgICAgIGZhbHNlID8gd2FybmluZyhmYWxzZSwgJ0ZhaWxlZCBmb3JtIHByb3BUeXBlOiAlcyVz
JywgZXJyb3IubWVzc2FnZSwgYWRkZW5kdW0pIDogdm9pZCAwO1xuICAgICAgfVxuICAgIH1cbiAg
fSxcblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGlucHV0UHJvcHMgUHJvcHMgZm9yIGZv
cm0gY29tcG9uZW50XG4gICAqIEByZXR1cm4geyp9IGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlucHV0
IGVpdGhlciBmcm9tIHZhbHVlIHByb3Agb3IgbGluay5cbiAgICovXG4gIGdldFZhbHVlOiBmdW5j
dGlvbiAoaW5wdXRQcm9wcykge1xuICAgIGlmIChpbnB1dFByb3BzLnZhbHVlTGluaykge1xuICAg
ICAgX2Fzc2VydFZhbHVlTGluayhpbnB1dFByb3BzKTtcbiAgICAgIHJldHVybiBpbnB1dFByb3Bz
LnZhbHVlTGluay52YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGlucHV0UHJvcHMudmFsdWU7XG4g
IH0sXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBpbnB1dFByb3BzIFByb3BzIGZvciBm
b3JtIGNvbXBvbmVudFxuICAgKiBAcmV0dXJuIHsqfSBjdXJyZW50IGNoZWNrZWQgc3RhdHVzIG9m
IHRoZSBpbnB1dCBlaXRoZXIgZnJvbSBjaGVja2VkIHByb3BcbiAgICogICAgICAgICAgICAgb3Ig
bGluay5cbiAgICovXG4gIGdldENoZWNrZWQ6IGZ1bmN0aW9uIChpbnB1dFByb3BzKSB7XG4gICAg
aWYgKGlucHV0UHJvcHMuY2hlY2tlZExpbmspIHtcbiAgICAgIF9hc3NlcnRDaGVja2VkTGluayhp
bnB1dFByb3BzKTtcbiAgICAgIHJldHVybiBpbnB1dFByb3BzLmNoZWNrZWRMaW5rLnZhbHVlO1xu
ICAgIH1cbiAgICByZXR1cm4gaW5wdXRQcm9wcy5jaGVja2VkO1xuICB9LFxuXG4gIC8qKlxuICAg
KiBAcGFyYW0ge29iamVjdH0gaW5wdXRQcm9wcyBQcm9wcyBmb3IgZm9ybSBjb21wb25lbnRcbiAg
ICogQHBhcmFtIHtTeW50aGV0aWNFdmVudH0gZXZlbnQgY2hhbmdlIGV2ZW50IHRvIGhhbmRsZVxu
ICAgKi9cbiAgZXhlY3V0ZU9uQ2hhbmdlOiBmdW5jdGlvbiAoaW5wdXRQcm9wcywgZXZlbnQpIHtc
biAgICBpZiAoaW5wdXRQcm9wcy52YWx1ZUxpbmspIHtcbiAgICAgIF9hc3NlcnRWYWx1ZUxpbmso
aW5wdXRQcm9wcyk7XG4gICAgICByZXR1cm4gaW5wdXRQcm9wcy52YWx1ZUxpbmsucmVxdWVzdENo
YW5nZShldmVudC50YXJnZXQudmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoaW5wdXRQcm9wcy5jaGVj
a2VkTGluaykge1xuICAgICAgX2Fzc2VydENoZWNrZWRMaW5rKGlucHV0UHJvcHMpO1xuICAgICAg
cmV0dXJuIGlucHV0UHJvcHMuY2hlY2tlZExpbmsucmVxdWVzdENoYW5nZShldmVudC50YXJnZXQu
Y2hlY2tlZCk7XG4gICAgfSBlbHNlIGlmIChpbnB1dFByb3BzLm9uQ2hhbmdlKSB7XG4gICAgICBy
ZXR1cm4gaW5wdXRQcm9wcy5vbkNoYW5nZS5jYWxsKHVuZGVmaW5lZCwgZXZlbnQpO1xuICAgIH1c
biAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBMaW5rZWRWYWx1ZVV0aWxzO1xuXG4vKioqLyB9
KSxcbi8qIDQxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tf
cmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC1w
cmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBU
aGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBm
b3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhp
cyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBj
YW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4g
KlxuICogXG4gKi9cblxuXG5cbnZhciBfcHJvZEludmFyaWFudCA9IF9fd2VicGFja19yZXF1aXJl
X18oMik7XG5cbnZhciBpbnZhcmlhbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG52YXIg
aW5qZWN0ZWQgPSBmYWxzZTtcblxudmFyIFJlYWN0Q29tcG9uZW50RW52aXJvbm1lbnQgPSB7XG4g
IC8qKlxuICAgKiBPcHRpb25hbGx5IGluamVjdGFibGUgaG9vayBmb3Igc3dhcHBpbmcgb3V0IG1v
dW50IGltYWdlcyBpbiB0aGUgbWlkZGxlIG9mXG4gICAqIHRoZSB0cmVlLlxuICAgKi9cbiAgcmVw
bGFjZU5vZGVXaXRoTWFya3VwOiBudWxsLFxuXG4gIC8qKlxuICAgKiBPcHRpb25hbGx5IGluamVj
dGFibGUgaG9vayBmb3IgcHJvY2Vzc2luZyBhIHF1ZXVlIG9mIGNoaWxkIHVwZGF0ZXMuIFdpbGxc
biAgICogbGF0ZXIgbW92ZSBpbnRvIE11bHRpQ2hpbGRDb21wb25lbnRzLlxuICAgKi9cbiAgcHJv
Y2Vzc0NoaWxkcmVuVXBkYXRlczogbnVsbCxcblxuICBpbmplY3Rpb246IHtcbiAgICBpbmplY3RF
bnZpcm9ubWVudDogZnVuY3Rpb24gKGVudmlyb25tZW50KSB7XG4gICAgICAhIWluamVjdGVkID8g
IGZhbHNlID8gaW52YXJpYW50KGZhbHNlLCAnUmVhY3RDb21wb3NpdGVDb21wb25lbnQ6IGluamVj
dEVudmlyb25tZW50KCkgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UuJykgOiBfcHJvZEludmFyaWFu
dCgnMTA0JykgOiB2b2lkIDA7XG4gICAgICBSZWFjdENvbXBvbmVudEVudmlyb25tZW50LnJlcGxh
Y2VOb2RlV2l0aE1hcmt1cCA9IGVudmlyb25tZW50LnJlcGxhY2VOb2RlV2l0aE1hcmt1cDtcbiAg
ICAgIFJlYWN0Q29tcG9uZW50RW52aXJvbm1lbnQucHJvY2Vzc0NoaWxkcmVuVXBkYXRlcyA9IGVu
dmlyb25tZW50LnByb2Nlc3NDaGlsZHJlblVwZGF0ZXM7XG4gICAgICBpbmplY3RlZCA9IHRydWU7
XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0Q29tcG9uZW50RW52aXJv
bm1lbnQ7XG5cbi8qKiovIH0pLFxuLyogNDIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4
cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAq
IENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0
cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRo
ZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxu
ICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0
aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHR5cGVjaGVja3NcbiAqIFxuICovXG5cbi8qZXNs
aW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlICovXG5cblxuXG52YXIgaGFzT3duUHJvcGVydHkg
PSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIGlubGluZWQgT2Jq
ZWN0LmlzIHBvbHlmaWxsIHRvIGF2b2lkIHJlcXVpcmluZyBjb25zdW1lcnMgc2hpcCB0aGVpciBv
d25cbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFT
Y3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9pc1xuICovXG5mdW5jdGlvbiBp
cyh4LCB5KSB7XG4gIC8vIFNhbWVWYWx1ZSBhbGdvcml0aG1cbiAgaWYgKHggPT09IHkpIHtcbiAg
ICAvLyBTdGVwcyAxLTUsIDctMTBcbiAgICAvLyBTdGVwcyA2LmItNi5lOiArMCAhPSAtMFxuICAg
IC8vIEFkZGVkIHRoZSBub256ZXJvIHkgY2hlY2sgdG8gbWFrZSBGbG93IGhhcHB5LCBidXQgaXQg
aXMgcmVkdW5kYW50XG4gICAgcmV0dXJuIHggIT09IDAgfHwgeSAhPT0gMCB8fCAxIC8geCA9PT0g
MSAvIHk7XG4gIH0gZWxzZSB7XG4gICAgLy8gU3RlcCA2LmE6IE5hTiA9PSBOYU5cbiAgICByZXR1
cm4geCAhPT0geCAmJiB5ICE9PSB5O1xuICB9XG59XG5cbi8qKlxuICogUGVyZm9ybXMgZXF1YWxp
dHkgYnkgaXRlcmF0aW5nIHRocm91Z2gga2V5cyBvbiBhbiBvYmplY3QgYW5kIHJldHVybmluZyBm
YWxzZVxuICogd2hlbiBhbnkga2V5IGhhcyB2YWx1ZXMgd2hpY2ggYXJlIG5vdCBzdHJpY3RseSBl
cXVhbCBiZXR3ZWVuIHRoZSBhcmd1bWVudHMuXG4gKiBSZXR1cm5zIHRydWUgd2hlbiB0aGUgdmFs
dWVzIG9mIGFsbCBrZXlzIGFyZSBzdHJpY3RseSBlcXVhbC5cbiAqL1xuZnVuY3Rpb24gc2hhbGxv
d0VxdWFsKG9iakEsIG9iakIpIHtcbiAgaWYgKGlzKG9iakEsIG9iakIpKSB7XG4gICAgcmV0dXJu
IHRydWU7XG4gIH1cblxuICBpZiAodHlwZW9mIG9iakEgIT09ICdvYmplY3QnIHx8IG9iakEgPT09
IG51bGwgfHwgdHlwZW9mIG9iakIgIT09ICdvYmplY3QnIHx8IG9iakIgPT09IG51bGwpIHtcbiAg
ICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIga2V5c0EgPSBPYmplY3Qua2V5cyhvYmpBKTtc
biAgdmFyIGtleXNCID0gT2JqZWN0LmtleXMob2JqQik7XG5cbiAgaWYgKGtleXNBLmxlbmd0aCAh
PT0ga2V5c0IubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gVGVzdCBm
b3IgQSdzIGtleXMgZGlmZmVyZW50IGZyb20gQi5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlz
QS5sZW5ndGg7IGkrKykge1xuICAgIGlmICghaGFzT3duUHJvcGVydHkuY2FsbChvYmpCLCBrZXlz
QVtpXSkgfHwgIWlzKG9iakFba2V5c0FbaV1dLCBvYmpCW2tleXNBW2ldXSkpIHtcbiAgICAgIHJl
dHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxubW9kdWxlLmV4
cG9ydHMgPSBzaGFsbG93RXF1YWw7XG5cbi8qKiovIH0pLFxuLyogNDMgKi9cbi8qKiovIChmdW5j
dGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3Ry
aWN0XCI7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4g
KiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5z
ZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBm
aWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlv
bmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5U
UyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuXG5cbi8qKlxuICogR2l2
ZW4gYSBgcHJldkVsZW1lbnRgIGFuZCBgbmV4dEVsZW1lbnRgLCBkZXRlcm1pbmVzIGlmIHRoZSBl
eGlzdGluZ1xuICogaW5zdGFuY2Ugc2hvdWxkIGJlIHVwZGF0ZWQgYXMgb3Bwb3NlZCB0byBiZWlu
ZyBkZXN0cm95ZWQgb3IgcmVwbGFjZWQgYnkgYSBuZXdcbiAqIGluc3RhbmNlLiBCb3RoIGFyZ3Vt
ZW50cyBhcmUgZWxlbWVudHMuIFRoaXMgZW5zdXJlcyB0aGF0IHRoaXMgbG9naWMgY2FuXG4gKiBv
cGVyYXRlIG9uIHN0YXRlbGVzcyB0cmVlcyB3aXRob3V0IGFueSBiYWNraW5nIGluc3RhbmNlLlxu
ICpcbiAqIEBwYXJhbSB7P29iamVjdH0gcHJldkVsZW1lbnRcbiAqIEBwYXJhbSB7P29iamVjdH0g
bmV4dEVsZW1lbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGV4aXN0aW5nIGlu
c3RhbmNlIHNob3VsZCBiZSB1cGRhdGVkLlxuICogQHByb3RlY3RlZFxuICovXG5cbmZ1bmN0aW9u
IHNob3VsZFVwZGF0ZVJlYWN0Q29tcG9uZW50KHByZXZFbGVtZW50LCBuZXh0RWxlbWVudCkge1xu
ICB2YXIgcHJldkVtcHR5ID0gcHJldkVsZW1lbnQgPT09IG51bGwgfHwgcHJldkVsZW1lbnQgPT09
IGZhbHNlO1xuICB2YXIgbmV4dEVtcHR5ID0gbmV4dEVsZW1lbnQgPT09IG51bGwgfHwgbmV4dEVs
ZW1lbnQgPT09IGZhbHNlO1xuICBpZiAocHJldkVtcHR5IHx8IG5leHRFbXB0eSkge1xuICAgIHJl
dHVybiBwcmV2RW1wdHkgPT09IG5leHRFbXB0eTtcbiAgfVxuXG4gIHZhciBwcmV2VHlwZSA9IHR5
cGVvZiBwcmV2RWxlbWVudDtcbiAgdmFyIG5leHRUeXBlID0gdHlwZW9mIG5leHRFbGVtZW50O1xu
ICBpZiAocHJldlR5cGUgPT09ICdzdHJpbmcnIHx8IHByZXZUeXBlID09PSAnbnVtYmVyJykge1xu
ICAgIHJldHVybiBuZXh0VHlwZSA9PT0gJ3N0cmluZycgfHwgbmV4dFR5cGUgPT09ICdudW1iZXIn
O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXh0VHlwZSA9PT0gJ29iamVjdCcgJiYgcHJldkVs
ZW1lbnQudHlwZSA9PT0gbmV4dEVsZW1lbnQudHlwZSAmJiBwcmV2RWxlbWVudC5rZXkgPT09IG5l
eHRFbGVtZW50LmtleTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVwZGF0ZVJl
YWN0Q29tcG9uZW50O1xuXG4vKioqLyB9KSxcbi8qIDQ0ICovXG4vKioqLyAoZnVuY3Rpb24obW9k
dWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xu
LyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJp
Z2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVy
IHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0
aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFu
dFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBp
biB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuXG5cbi8qKlxuICogRXNjYXBl
IGFuZCB3cmFwIGtleSBzbyBpdCBpcyBzYWZlIHRvIHVzZSBhcyBhIHJlYWN0aWRcbiAqXG4gKiBA
cGFyYW0ge3N0cmluZ30ga2V5IHRvIGJlIGVzY2FwZWQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHRo
ZSBlc2NhcGVkIGtleS5cbiAqL1xuXG5mdW5jdGlvbiBlc2NhcGUoa2V5KSB7XG4gIHZhciBlc2Nh
cGVSZWdleCA9IC9bPTpdL2c7XG4gIHZhciBlc2NhcGVyTG9va3VwID0ge1xuICAgICc9JzogJz0w
JyxcbiAgICAnOic6ICc9MidcbiAgfTtcbiAgdmFyIGVzY2FwZWRTdHJpbmcgPSAoJycgKyBrZXkp
LnJlcGxhY2UoZXNjYXBlUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgIHJldHVybiBlc2Nh
cGVyTG9va3VwW21hdGNoXTtcbiAgfSk7XG5cbiAgcmV0dXJuICckJyArIGVzY2FwZWRTdHJpbmc7
XG59XG5cbi8qKlxuICogVW5lc2NhcGUgYW5kIHVud3JhcCBrZXkgZm9yIGh1bWFuLXJlYWRhYmxl
IGRpc3BsYXlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IHRvIHVuZXNjYXBlLlxuICogQHJl
dHVybiB7c3RyaW5nfSB0aGUgdW5lc2NhcGVkIGtleS5cbiAqL1xuZnVuY3Rpb24gdW5lc2NhcGUo
a2V5KSB7XG4gIHZhciB1bmVzY2FwZVJlZ2V4ID0gLyg9MHw9MikvZztcbiAgdmFyIHVuZXNjYXBl
ckxvb2t1cCA9IHtcbiAgICAnPTAnOiAnPScsXG4gICAgJz0yJzogJzonXG4gIH07XG4gIHZhciBr
ZXlTdWJzdHJpbmcgPSBrZXlbMF0gPT09ICcuJyAmJiBrZXlbMV0gPT09ICckJyA/IGtleS5zdWJz
dHJpbmcoMikgOiBrZXkuc3Vic3RyaW5nKDEpO1xuXG4gIHJldHVybiAoJycgKyBrZXlTdWJzdHJp
bmcpLnJlcGxhY2UodW5lc2NhcGVSZWdleCwgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgcmV0dXJu
IHVuZXNjYXBlckxvb2t1cFttYXRjaF07XG4gIH0pO1xufVxuXG52YXIgS2V5RXNjYXBlVXRpbHMg
PSB7XG4gIGVzY2FwZTogZXNjYXBlLFxuICB1bmVzY2FwZTogdW5lc2NhcGVcbn07XG5cbm1vZHVs
ZS5leHBvcnRzID0gS2V5RXNjYXBlVXRpbHM7XG5cbi8qKiovIH0pLFxuLyogNDUgKi9cbi8qKiov
IChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1
c2Ugc3RyaWN0XCI7XG4vKipcbiAqIENvcHlyaWdodCAyMDE1LXByZXNlbnQsIEZhY2Vib29rLCBJ
bmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMg
bGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElD
RU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBh
ZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUg
UEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuXG5cbnZhciBf
cHJvZEludmFyaWFudCA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG5cbnZhciBSZWFjdEN1cnJl
bnRPd25lciA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xudmFyIFJlYWN0SW5zdGFuY2VNYXAg
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKTtcbnZhciBSZWFjdEluc3RydW1lbnRhdGlvbiA9IF9f
d2VicGFja19yZXF1aXJlX18oNyk7XG52YXIgUmVhY3RVcGRhdGVzID0gX193ZWJwYWNrX3JlcXVp
cmVfXyg4KTtcblxudmFyIGludmFyaWFudCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIg
d2FybmluZyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG5cbmZ1bmN0aW9uIGVucXVldWVVcGRh
dGUoaW50ZXJuYWxJbnN0YW5jZSkge1xuICBSZWFjdFVwZGF0ZXMuZW5xdWV1ZVVwZGF0ZShpbnRl
cm5hbEluc3RhbmNlKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VW5leHBlY3RlZEFyZ3VtZW50KGFy
Zykge1xuICB2YXIgdHlwZSA9IHR5cGVvZiBhcmc7XG4gIGlmICh0eXBlICE9PSAnb2JqZWN0Jykg
e1xuICAgIHJldHVybiB0eXBlO1xuICB9XG4gIHZhciBkaXNwbGF5TmFtZSA9IGFyZy5jb25zdHJ1
Y3RvciAmJiBhcmcuY29uc3RydWN0b3IubmFtZSB8fCB0eXBlO1xuICB2YXIga2V5cyA9IE9iamVj
dC5rZXlzKGFyZyk7XG4gIGlmIChrZXlzLmxlbmd0aCA+IDAgJiYga2V5cy5sZW5ndGggPCAyMCkg
e1xuICAgIHJldHVybiBkaXNwbGF5TmFtZSArICcgKGtleXM6ICcgKyBrZXlzLmpvaW4oJywgJykg
KyAnKSc7XG4gIH1cbiAgcmV0dXJuIGRpc3BsYXlOYW1lO1xufVxuXG5mdW5jdGlvbiBnZXRJbnRl
cm5hbEluc3RhbmNlUmVhZHlGb3JVcGRhdGUocHVibGljSW5zdGFuY2UsIGNhbGxlck5hbWUpIHtc
biAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBSZWFjdEluc3RhbmNlTWFwLmdldChwdWJsaWNJbnN0
YW5jZSk7XG4gIGlmICghaW50ZXJuYWxJbnN0YW5jZSkge1xuICAgIGlmIChmYWxzZSkge1xuICAg
ICAgdmFyIGN0b3IgPSBwdWJsaWNJbnN0YW5jZS5jb25zdHJ1Y3RvcjtcbiAgICAgIC8vIE9ubHkg
d2FybiB3aGVuIHdlIGhhdmUgYSBjYWxsZXJOYW1lLiBPdGhlcndpc2Ugd2Ugc2hvdWxkIGJlIHNp
bGVudC5cbiAgICAgIC8vIFdlJ3JlIHByb2JhYmx5IGNhbGxpbmcgZnJvbSBlbnF1ZXVlQ2FsbGJh
Y2suIFdlIGRvbid0IHdhbnQgdG8gd2FyblxuICAgICAgLy8gdGhlcmUgYmVjYXVzZSB3ZSBhbHJl
YWR5IHdhcm5lZCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgbGlmZWN5Y2xlIG1ldGhvZC5cbiAgICAg
IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKCFjYWxsZXJO
YW1lLCAnJXMoLi4uKTogQ2FuIG9ubHkgdXBkYXRlIGEgbW91bnRlZCBvciBtb3VudGluZyBjb21w
b25lbnQuICcgKyAnVGhpcyB1c3VhbGx5IG1lYW5zIHlvdSBjYWxsZWQgJXMoKSBvbiBhbiB1bm1v
dW50ZWQgY29tcG9uZW50LiAnICsgJ1RoaXMgaXMgYSBuby1vcC4gUGxlYXNlIGNoZWNrIHRoZSBj
b2RlIGZvciB0aGUgJXMgY29tcG9uZW50LicsIGNhbGxlck5hbWUsIGNhbGxlck5hbWUsIGN0b3Ig
JiYgKGN0b3IuZGlzcGxheU5hbWUgfHwgY3Rvci5uYW1lKSB8fCAnUmVhY3RDbGFzcycpIDogdm9p
ZCAwO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChmYWxzZSkge1xuICAg
IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKFJlYWN0Q3Vy
cmVudE93bmVyLmN1cnJlbnQgPT0gbnVsbCwgJyVzKC4uLik6IENhbm5vdCB1cGRhdGUgZHVyaW5n
IGFuIGV4aXN0aW5nIHN0YXRlIHRyYW5zaXRpb24gKHN1Y2ggYXMgJyArIFwid2l0aGluIGByZW5k
ZXJgIG9yIGFub3RoZXIgY29tcG9uZW50J3MgY29uc3RydWN0b3IpLiBSZW5kZXIgbWV0aG9kcyBc
IiArICdzaG91bGQgYmUgYSBwdXJlIGZ1bmN0aW9uIG9mIHByb3BzIGFuZCBzdGF0ZTsgY29uc3Ry
dWN0b3IgJyArICdzaWRlLWVmZmVjdHMgYXJlIGFuIGFudGktcGF0dGVybiwgYnV0IGNhbiBiZSBt
b3ZlZCB0byAnICsgJ2Bjb21wb25lbnRXaWxsTW91bnRgLicsIGNhbGxlck5hbWUpIDogdm9pZCAw
O1xuICB9XG5cbiAgcmV0dXJuIGludGVybmFsSW5zdGFuY2U7XG59XG5cbi8qKlxuICogUmVhY3RV
cGRhdGVRdWV1ZSBhbGxvd3MgZm9yIHN0YXRlIHVwZGF0ZXMgdG8gYmUgc2NoZWR1bGVkIGludG8g
YSBsYXRlclxuICogcmVjb25jaWxpYXRpb24gc3RlcC5cbiAqL1xudmFyIFJlYWN0VXBkYXRlUXVl
dWUgPSB7XG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBvciBub3QgdGhpcyBjb21wb3NpdGUg
Y29tcG9uZW50IGlzIG1vdW50ZWQuXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5z
dGFuY2UgVGhlIGluc3RhbmNlIHdlIHdhbnQgdG8gdGVzdC5cbiAgICogQHJldHVybiB7Ym9vbGVh
bn0gVHJ1ZSBpZiBtb3VudGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqIEBwcm90ZWN0ZWRcbiAg
ICogQGZpbmFsXG4gICAqL1xuICBpc01vdW50ZWQ6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSkg
e1xuICAgIGlmIChmYWxzZSkge1xuICAgICAgdmFyIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIu
Y3VycmVudDtcbiAgICAgIGlmIChvd25lciAhPT0gbnVsbCkge1xuICAgICAgICBwcm9jZXNzLmVu
di5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhvd25lci5fd2FybmVkQWJvdXRS
ZWZzSW5SZW5kZXIsICclcyBpcyBhY2Nlc3NpbmcgaXNNb3VudGVkIGluc2lkZSBpdHMgcmVuZGVy
KCkgZnVuY3Rpb24uICcgKyAncmVuZGVyKCkgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbiBvZiBw
cm9wcyBhbmQgc3RhdGUuIEl0IHNob3VsZCAnICsgJ25ldmVyIGFjY2VzcyBzb21ldGhpbmcgdGhh
dCByZXF1aXJlcyBzdGFsZSBkYXRhIGZyb20gdGhlIHByZXZpb3VzICcgKyAncmVuZGVyLCBzdWNo
IGFzIHJlZnMuIE1vdmUgdGhpcyBsb2dpYyB0byBjb21wb25lbnREaWRNb3VudCBhbmQgJyArICdj
b21wb25lbnREaWRVcGRhdGUgaW5zdGVhZC4nLCBvd25lci5nZXROYW1lKCkgfHwgJ0EgY29tcG9u
ZW50JykgOiB2b2lkIDA7XG4gICAgICAgIG93bmVyLl93YXJuZWRBYm91dFJlZnNJblJlbmRlciA9
IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBpbnRlcm5hbEluc3RhbmNlID0gUmVhY3RJ
bnN0YW5jZU1hcC5nZXQocHVibGljSW5zdGFuY2UpO1xuICAgIGlmIChpbnRlcm5hbEluc3RhbmNl
KSB7XG4gICAgICAvLyBEdXJpbmcgY29tcG9uZW50V2lsbE1vdW50IGFuZCByZW5kZXIgdGhpcyB3
aWxsIHN0aWxsIGJlIG51bGwgYnV0IGFmdGVyXG4gICAgICAvLyB0aGF0IHdpbGwgYWx3YXlzIHJl
bmRlciB0byBzb21ldGhpbmcuIEF0IGxlYXN0IGZvciBub3cuIFNvIHdlIGNhbiB1c2VcbiAgICAg
IC8vIHRoaXMgaGFjay5cbiAgICAgIHJldHVybiAhIWludGVybmFsSW5zdGFuY2UuX3JlbmRlcmVk
Q29tcG9uZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9
LFxuXG4gIC8qKlxuICAgKiBFbnF1ZXVlIGEgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGV4ZWN1dGVk
IGFmdGVyIGFsbCB0aGUgcGVuZGluZyB1cGRhdGVzXG4gICAqIGhhdmUgcHJvY2Vzc2VkLlxuICAg
KlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0
byB1c2UgYXMgYHRoaXNgIGNvbnRleHQuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFj
ayBDYWxsZWQgYWZ0ZXIgc3RhdGUgaXMgdXBkYXRlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNh
bGxlck5hbWUgTmFtZSBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbiBpbiB0aGUgcHVibGljIEFQSS5c
biAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlQ2FsbGJhY2s6IGZ1bmN0aW9uIChwdWJs
aWNJbnN0YW5jZSwgY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAgICBSZWFjdFVwZGF0ZVF1ZXVl
LnZhbGlkYXRlQ2FsbGJhY2soY2FsbGJhY2ssIGNhbGxlck5hbWUpO1xuICAgIHZhciBpbnRlcm5h
bEluc3RhbmNlID0gZ2V0SW50ZXJuYWxJbnN0YW5jZVJlYWR5Rm9yVXBkYXRlKHB1YmxpY0luc3Rh
bmNlKTtcblxuICAgIC8vIFByZXZpb3VzbHkgd2Ugd291bGQgdGhyb3cgYW4gZXJyb3IgaWYgd2Ug
ZGlkbid0IGhhdmUgYW4gaW50ZXJuYWxcbiAgICAvLyBpbnN0YW5jZS4gU2luY2Ugd2Ugd2FudCB0
byBtYWtlIGl0IGEgbm8tb3AgaW5zdGVhZCwgd2UgbWlycm9yIHRoZSBzYW1lXG4gICAgLy8gYmVo
YXZpb3Igd2UgaGF2ZSBpbiBvdGhlciBlbnF1ZXVlKiBtZXRob2RzLlxuICAgIC8vIFdlIGFsc28g
bmVlZCB0byBpZ25vcmUgY2FsbGJhY2tzIGluIGNvbXBvbmVudFdpbGxNb3VudC4gU2VlXG4gICAg
Ly8gZW5xdWV1ZVVwZGF0ZXMuXG4gICAgaWYgKCFpbnRlcm5hbEluc3RhbmNlKSB7XG4gICAgICBy
ZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoaW50ZXJuYWxJbnN0YW5jZS5fcGVuZGluZ0Nh
bGxiYWNrcykge1xuICAgICAgaW50ZXJuYWxJbnN0YW5jZS5fcGVuZGluZ0NhbGxiYWNrcy5wdXNo
KGNhbGxiYWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW50ZXJuYWxJbnN0YW5jZS5fcGVuZGlu
Z0NhbGxiYWNrcyA9IFtjYWxsYmFja107XG4gICAgfVxuICAgIC8vIFRPRE86IFRoZSBjYWxsYmFj
ayBoZXJlIGlzIGlnbm9yZWQgd2hlbiBzZXRTdGF0ZSBpcyBjYWxsZWQgZnJvbVxuICAgIC8vIGNv
bXBvbmVudFdpbGxNb3VudC4gRWl0aGVyIGZpeCBpdCBvciBkaXNhbGxvdyBkb2luZyBzbyBjb21w
bGV0ZWx5IGluXG4gICAgLy8gZmF2b3Igb2YgZ2V0SW5pdGlhbFN0YXRlLiBBbHRlcm5hdGl2ZWx5
LCB3ZSBjYW4gZGlzYWxsb3dcbiAgICAvLyBjb21wb25lbnRXaWxsTW91bnQgZHVyaW5nIHNlcnZl
ci1zaWRlIHJlbmRlcmluZy5cbiAgICBlbnF1ZXVlVXBkYXRlKGludGVybmFsSW5zdGFuY2UpO1xu
ICB9LFxuXG4gIGVucXVldWVDYWxsYmFja0ludGVybmFsOiBmdW5jdGlvbiAoaW50ZXJuYWxJbnN0
YW5jZSwgY2FsbGJhY2spIHtcbiAgICBpZiAoaW50ZXJuYWxJbnN0YW5jZS5fcGVuZGluZ0NhbGxi
YWNrcykge1xuICAgICAgaW50ZXJuYWxJbnN0YW5jZS5fcGVuZGluZ0NhbGxiYWNrcy5wdXNoKGNh
bGxiYWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW50ZXJuYWxJbnN0YW5jZS5fcGVuZGluZ0Nh
bGxiYWNrcyA9IFtjYWxsYmFja107XG4gICAgfVxuICAgIGVucXVldWVVcGRhdGUoaW50ZXJuYWxJ
bnN0YW5jZSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEZvcmNlcyBhbiB1cGRhdGUuIFRoaXMgc2hv
dWxkIG9ubHkgYmUgaW52b2tlZCB3aGVuIGl0IGlzIGtub3duIHdpdGhcbiAgICogY2VydGFpbnR5
IHRoYXQgd2UgYXJlICoqbm90KiogaW4gYSBET00gdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIFlv
dSBtYXkgd2FudCB0byBjYWxsIHRoaXMgd2hlbiB5b3Uga25vdyB0aGF0IHNvbWUgZGVlcGVyIGFz
cGVjdCBvZiB0aGVcbiAgICogY29tcG9uZW50J3Mgc3RhdGUgaGFzIGNoYW5nZWQgYnV0IGBzZXRT
dGF0ZWAgd2FzIG5vdCBjYWxsZWQuXG4gICAqXG4gICAqIFRoaXMgd2lsbCBub3QgaW52b2tlIGBz
aG91bGRDb21wb25lbnRVcGRhdGVgLCBidXQgaXQgd2lsbCBpbnZva2VcbiAgICogYGNvbXBvbmVu
dFdpbGxVcGRhdGVgIGFuZCBgY29tcG9uZW50RGlkVXBkYXRlYC5cbiAgICpcbiAgICogQHBhcmFt
IHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVy
ZW5kZXIuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZUZvcmNlVXBkYXRlOiBmdW5j
dGlvbiAocHVibGljSW5zdGFuY2UpIHtcbiAgICB2YXIgaW50ZXJuYWxJbnN0YW5jZSA9IGdldElu
dGVybmFsSW5zdGFuY2VSZWFkeUZvclVwZGF0ZShwdWJsaWNJbnN0YW5jZSwgJ2ZvcmNlVXBkYXRl
Jyk7XG5cbiAgICBpZiAoIWludGVybmFsSW5zdGFuY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9
XG5cbiAgICBpbnRlcm5hbEluc3RhbmNlLl9wZW5kaW5nRm9yY2VVcGRhdGUgPSB0cnVlO1xuXG4g
ICAgZW5xdWV1ZVVwZGF0ZShpbnRlcm5hbEluc3RhbmNlKTtcbiAgfSxcblxuICAvKipcbiAgICog
UmVwbGFjZXMgYWxsIG9mIHRoZSBzdGF0ZS4gQWx3YXlzIHVzZSB0aGlzIG9yIGBzZXRTdGF0ZWAg
dG8gbXV0YXRlIHN0YXRlLlxuICAgKiBZb3Ugc2hvdWxkIHRyZWF0IGB0aGlzLnN0YXRlYCBhcyBp
bW11dGFibGUuXG4gICAqXG4gICAqIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGB0aGlzLnN0
YXRlYCB3aWxsIGJlIGltbWVkaWF0ZWx5IHVwZGF0ZWQsIHNvXG4gICAqIGFjY2Vzc2luZyBgdGhp
cy5zdGF0ZWAgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBvbGQgdmFs
dWUuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGlu
c3RhbmNlIHRoYXQgc2hvdWxkIHJlcmVuZGVyLlxuICAgKiBAcGFyYW0ge29iamVjdH0gY29tcGxl
dGVTdGF0ZSBOZXh0IHN0YXRlLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVSZXBs
YWNlU3RhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSwgY29tcGxldGVTdGF0ZSwgY2FsbGJh
Y2spIHtcbiAgICB2YXIgaW50ZXJuYWxJbnN0YW5jZSA9IGdldEludGVybmFsSW5zdGFuY2VSZWFk
eUZvclVwZGF0ZShwdWJsaWNJbnN0YW5jZSwgJ3JlcGxhY2VTdGF0ZScpO1xuXG4gICAgaWYgKCFp
bnRlcm5hbEluc3RhbmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaW50ZXJuYWxJ
bnN0YW5jZS5fcGVuZGluZ1N0YXRlUXVldWUgPSBbY29tcGxldGVTdGF0ZV07XG4gICAgaW50ZXJu
YWxJbnN0YW5jZS5fcGVuZGluZ1JlcGxhY2VTdGF0ZSA9IHRydWU7XG5cbiAgICAvLyBGdXR1cmUt
cHJvb2YgMTUuNVxuICAgIGlmIChjYWxsYmFjayAhPT0gdW5kZWZpbmVkICYmIGNhbGxiYWNrICE9
PSBudWxsKSB7XG4gICAgICBSZWFjdFVwZGF0ZVF1ZXVlLnZhbGlkYXRlQ2FsbGJhY2soY2FsbGJh
Y2ssICdyZXBsYWNlU3RhdGUnKTtcbiAgICAgIGlmIChpbnRlcm5hbEluc3RhbmNlLl9wZW5kaW5n
Q2FsbGJhY2tzKSB7XG4gICAgICAgIGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdDYWxsYmFja3Mu
cHVzaChjYWxsYmFjayk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnRlcm5hbEluc3RhbmNl
Ll9wZW5kaW5nQ2FsbGJhY2tzID0gW2NhbGxiYWNrXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBl
bnF1ZXVlVXBkYXRlKGludGVybmFsSW5zdGFuY2UpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTZXRz
IGEgc3Vic2V0IG9mIHRoZSBzdGF0ZS4gVGhpcyBvbmx5IGV4aXN0cyBiZWNhdXNlIF9wZW5kaW5n
U3RhdGUgaXNcbiAgICogaW50ZXJuYWwuIFRoaXMgcHJvdmlkZXMgYSBtZXJnaW5nIHN0cmF0ZWd5
IHRoYXQgaXMgbm90IGF2YWlsYWJsZSB0byBkZWVwXG4gICAqIHByb3BlcnRpZXMgd2hpY2ggaXMg
Y29uZnVzaW5nLiBUT0RPOiBFeHBvc2UgcGVuZGluZ1N0YXRlIG9yIGRvbid0IHVzZSBpdFxuICAg
KiBkdXJpbmcgdGhlIG1lcmdlLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1Ymxp
Y0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFt
IHtvYmplY3R9IHBhcnRpYWxTdGF0ZSBOZXh0IHBhcnRpYWwgc3RhdGUgdG8gYmUgbWVyZ2VkIHdp
dGggc3RhdGUuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZVNldFN0YXRlOiBmdW5j
dGlvbiAocHVibGljSW5zdGFuY2UsIHBhcnRpYWxTdGF0ZSkge1xuICAgIGlmIChmYWxzZSkge1xu
ICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uU2V0U3RhdGUoKTtcbiAgICAg
IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKHBhcnRpYWxT
dGF0ZSAhPSBudWxsLCAnc2V0U3RhdGUoLi4uKTogWW91IHBhc3NlZCBhbiB1bmRlZmluZWQgb3Ig
bnVsbCBzdGF0ZSBvYmplY3Q7ICcgKyAnaW5zdGVhZCwgdXNlIGZvcmNlVXBkYXRlKCkuJykgOiB2
b2lkIDA7XG4gICAgfVxuXG4gICAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBnZXRJbnRlcm5hbElu
c3RhbmNlUmVhZHlGb3JVcGRhdGUocHVibGljSW5zdGFuY2UsICdzZXRTdGF0ZScpO1xuXG4gICAg
aWYgKCFpbnRlcm5hbEluc3RhbmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFy
IHF1ZXVlID0gaW50ZXJuYWxJbnN0YW5jZS5fcGVuZGluZ1N0YXRlUXVldWUgfHwgKGludGVybmFs
SW5zdGFuY2UuX3BlbmRpbmdTdGF0ZVF1ZXVlID0gW10pO1xuICAgIHF1ZXVlLnB1c2gocGFydGlh
bFN0YXRlKTtcblxuICAgIGVucXVldWVVcGRhdGUoaW50ZXJuYWxJbnN0YW5jZSk7XG4gIH0sXG5c
biAgZW5xdWV1ZUVsZW1lbnRJbnRlcm5hbDogZnVuY3Rpb24gKGludGVybmFsSW5zdGFuY2UsIG5l
eHRFbGVtZW50LCBuZXh0Q29udGV4dCkge1xuICAgIGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdF
bGVtZW50ID0gbmV4dEVsZW1lbnQ7XG4gICAgLy8gVE9ETzogaW50cm9kdWNlIF9wZW5kaW5nQ29u
dGV4dCBpbnN0ZWFkIG9mIHNldHRpbmcgaXQgZGlyZWN0bHkuXG4gICAgaW50ZXJuYWxJbnN0YW5j
ZS5fY29udGV4dCA9IG5leHRDb250ZXh0O1xuICAgIGVucXVldWVVcGRhdGUoaW50ZXJuYWxJbnN0
YW5jZSk7XG4gIH0sXG5cbiAgdmFsaWRhdGVDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBj
YWxsZXJOYW1lKSB7XG4gICAgISghY2FsbGJhY2sgfHwgdHlwZW9mIGNhbGxiYWNrID09PSAnZnVu
Y3Rpb24nKSA/ICBmYWxzZSA/IGludmFyaWFudChmYWxzZSwgJyVzKC4uLik6IEV4cGVjdGVkIHRo
ZSBsYXN0IG9wdGlvbmFsIGBjYWxsYmFja2AgYXJndW1lbnQgdG8gYmUgYSBmdW5jdGlvbi4gSW5z
dGVhZCByZWNlaXZlZDogJXMuJywgY2FsbGVyTmFtZSwgZm9ybWF0VW5leHBlY3RlZEFyZ3VtZW50
KGNhbGxiYWNrKSkgOiBfcHJvZEludmFyaWFudCgnMTIyJywgY2FsbGVyTmFtZSwgZm9ybWF0VW5l
eHBlY3RlZEFyZ3VtZW50KGNhbGxiYWNrKSkgOiB2b2lkIDA7XG4gIH1cbn07XG5cbm1vZHVsZS5l
eHBvcnRzID0gUmVhY3RVcGRhdGVRdWV1ZTtcblxuLyoqKi8gfSksXG4vKiA0NiAqL1xuLyoqKi8g
KGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVz
ZSBzdHJpY3RcIjtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTUtcHJlc2VudCwgRmFjZWJvb2ssIElu
Yy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBs
aWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNF
TlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFk
ZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQ
QVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG5cblxudmFyIF9h
c3NpZ24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuXG52YXIgZW1wdHlGdW5jdGlvbiA9IF9f
d2VicGFja19yZXF1aXJlX18oNik7XG52YXIgd2FybmluZyA9IF9fd2VicGFja19yZXF1aXJlX18o
MSk7XG5cbnZhciB2YWxpZGF0ZURPTU5lc3RpbmcgPSBlbXB0eUZ1bmN0aW9uO1xuXG5pZiAoZmFs
c2UpIHtcbiAgLy8gVGhpcyB2YWxpZGF0aW9uIGNvZGUgd2FzIHdyaXR0ZW4gYmFzZWQgb24gdGhl
IEhUTUw1IHBhcnNpbmcgc3BlYzpcbiAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9t
dWx0aXBhZ2Uvc3ludGF4Lmh0bWwjaGFzLWFuLWVsZW1lbnQtaW4tc2NvcGVcbiAgLy9cbiAgLy8g
Tm90ZTogdGhpcyBkb2VzIG5vdCBjYXRjaCBhbGwgaW52YWxpZCBuZXN0aW5nLCBub3IgZG9lcyBp
dCB0cnkgdG8gKGFzIGl0J3NcbiAgLy8gbm90IGNsZWFyIHdoYXQgcHJhY3RpY2FsIGJlbmVmaXQg
ZG9pbmcgc28gcHJvdmlkZXMpOyBpbnN0ZWFkLCB3ZSB3YXJuIG9ubHlcbiAgLy8gZm9yIGNhc2Vz
IHdoZXJlIHRoZSBwYXJzZXIgd2lsbCBnaXZlIGEgcGFyc2UgdHJlZSBkaWZmZXJpbmcgZnJvbSB3
aGF0IFJlYWN0XG4gIC8vIGludGVuZGVkLiBGb3IgZXhhbXBsZSwgPGI+PGRpdj48L2Rpdj48L2I+
IGlzIGludmFsaWQgYnV0IHdlIGRvbid0IHdhcm5cbiAgLy8gYmVjYXVzZSBpdCBzdGlsbCBwYXJz
ZXMgY29ycmVjdGx5OyB3ZSBkbyB3YXJuIGZvciBvdGhlciBjYXNlcyBsaWtlIG5lc3RlZFxuICAv
LyA8cD4gdGFncyB3aGVyZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzZWNvbmQgZWxlbWVudCBpbXBs
aWNpdGx5IGNsb3NlcyB0aGVcbiAgLy8gZmlyc3QsIGNhdXNpbmcgYSBjb25mdXNpbmcgbWVzcy5c
blxuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRt
bCNzcGVjaWFsXG4gIHZhciBzcGVjaWFsVGFncyA9IFsnYWRkcmVzcycsICdhcHBsZXQnLCAnYXJl
YScsICdhcnRpY2xlJywgJ2FzaWRlJywgJ2Jhc2UnLCAnYmFzZWZvbnQnLCAnYmdzb3VuZCcsICdi
bG9ja3F1b3RlJywgJ2JvZHknLCAnYnInLCAnYnV0dG9uJywgJ2NhcHRpb24nLCAnY2VudGVyJywg
J2NvbCcsICdjb2xncm91cCcsICdkZCcsICdkZXRhaWxzJywgJ2RpcicsICdkaXYnLCAnZGwnLCAn
ZHQnLCAnZW1iZWQnLCAnZmllbGRzZXQnLCAnZmlnY2FwdGlvbicsICdmaWd1cmUnLCAnZm9vdGVy
JywgJ2Zvcm0nLCAnZnJhbWUnLCAnZnJhbWVzZXQnLCAnaDEnLCAnaDInLCAnaDMnLCAnaDQnLCAn
aDUnLCAnaDYnLCAnaGVhZCcsICdoZWFkZXInLCAnaGdyb3VwJywgJ2hyJywgJ2h0bWwnLCAnaWZy
YW1lJywgJ2ltZycsICdpbnB1dCcsICdpc2luZGV4JywgJ2xpJywgJ2xpbmsnLCAnbGlzdGluZycs
ICdtYWluJywgJ21hcnF1ZWUnLCAnbWVudScsICdtZW51aXRlbScsICdtZXRhJywgJ25hdicsICdu
b2VtYmVkJywgJ25vZnJhbWVzJywgJ25vc2NyaXB0JywgJ29iamVjdCcsICdvbCcsICdwJywgJ3Bh
cmFtJywgJ3BsYWludGV4dCcsICdwcmUnLCAnc2NyaXB0JywgJ3NlY3Rpb24nLCAnc2VsZWN0Jywg
J3NvdXJjZScsICdzdHlsZScsICdzdW1tYXJ5JywgJ3RhYmxlJywgJ3Rib2R5JywgJ3RkJywgJ3Rl
bXBsYXRlJywgJ3RleHRhcmVhJywgJ3Rmb290JywgJ3RoJywgJ3RoZWFkJywgJ3RpdGxlJywgJ3Ry
JywgJ3RyYWNrJywgJ3VsJywgJ3dicicsICd4bXAnXTtcblxuICAvLyBodHRwczovL2h0bWwuc3Bl
Yy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNoYXMtYW4tZWxlbWVudC1pbi1zY29w
ZVxuICB2YXIgaW5TY29wZVRhZ3MgPSBbJ2FwcGxldCcsICdjYXB0aW9uJywgJ2h0bWwnLCAndGFi
bGUnLCAndGQnLCAndGgnLCAnbWFycXVlZScsICdvYmplY3QnLCAndGVtcGxhdGUnLFxuXG4gIC8v
IGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2h0bWwt
aW50ZWdyYXRpb24tcG9pbnRcbiAgLy8gVE9ETzogRGlzdGluZ3Vpc2ggYnkgbmFtZXNwYWNlIGhl
cmUgLS0gZm9yIDx0aXRsZT4sIGluY2x1ZGluZyBpdCBoZXJlXG4gIC8vIGVycnMgb24gdGhlIHNp
ZGUgb2YgZmV3ZXIgd2FybmluZ3NcbiAgJ2ZvcmVpZ25PYmplY3QnLCAnZGVzYycsICd0aXRsZSdd
O1xuXG4gIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5o
dG1sI2hhcy1hbi1lbGVtZW50LWluLWJ1dHRvbi1zY29wZVxuICB2YXIgYnV0dG9uU2NvcGVUYWdz
ID0gaW5TY29wZVRhZ3MuY29uY2F0KFsnYnV0dG9uJ10pO1xuXG4gIC8vIGh0dHBzOi8vaHRtbC5z
cGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2dlbmVyYXRlLWltcGxpZWQtZW5k
LXRhZ3NcbiAgdmFyIGltcGxpZWRFbmRUYWdzID0gWydkZCcsICdkdCcsICdsaScsICdvcHRpb24n
LCAnb3B0Z3JvdXAnLCAncCcsICdycCcsICdydCddO1xuXG4gIHZhciBlbXB0eUFuY2VzdG9ySW5m
byA9IHtcbiAgICBjdXJyZW50OiBudWxsLFxuXG4gICAgZm9ybVRhZzogbnVsbCxcbiAgICBhVGFn
SW5TY29wZTogbnVsbCxcbiAgICBidXR0b25UYWdJblNjb3BlOiBudWxsLFxuICAgIG5vYnJUYWdJ
blNjb3BlOiBudWxsLFxuICAgIHBUYWdJbkJ1dHRvblNjb3BlOiBudWxsLFxuXG4gICAgbGlzdEl0
ZW1UYWdBdXRvY2xvc2luZzogbnVsbCxcbiAgICBkbEl0ZW1UYWdBdXRvY2xvc2luZzogbnVsbFxu
ICB9O1xuXG4gIHZhciB1cGRhdGVkQW5jZXN0b3JJbmZvID0gZnVuY3Rpb24gKG9sZEluZm8sIHRh
ZywgaW5zdGFuY2UpIHtcbiAgICB2YXIgYW5jZXN0b3JJbmZvID0gX2Fzc2lnbih7fSwgb2xkSW5m
byB8fCBlbXB0eUFuY2VzdG9ySW5mbyk7XG4gICAgdmFyIGluZm8gPSB7IHRhZzogdGFnLCBpbnN0
YW5jZTogaW5zdGFuY2UgfTtcblxuICAgIGlmIChpblNjb3BlVGFncy5pbmRleE9mKHRhZykgIT09
IC0xKSB7XG4gICAgICBhbmNlc3RvckluZm8uYVRhZ0luU2NvcGUgPSBudWxsO1xuICAgICAgYW5j
ZXN0b3JJbmZvLmJ1dHRvblRhZ0luU2NvcGUgPSBudWxsO1xuICAgICAgYW5jZXN0b3JJbmZvLm5v
YnJUYWdJblNjb3BlID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKGJ1dHRvblNjb3BlVGFncy5pbmRl
eE9mKHRhZykgIT09IC0xKSB7XG4gICAgICBhbmNlc3RvckluZm8ucFRhZ0luQnV0dG9uU2NvcGUg
PSBudWxsO1xuICAgIH1cblxuICAgIC8vIFNlZSBydWxlcyBmb3IgJ2xpJywgJ2RkJywgJ2R0JyBz
dGFydCB0YWdzIGluXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBh
Z2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluYm9keVxuICAgIGlmIChzcGVjaWFsVGFncy5p
bmRleE9mKHRhZykgIT09IC0xICYmIHRhZyAhPT0gJ2FkZHJlc3MnICYmIHRhZyAhPT0gJ2Rpdicg
JiYgdGFnICE9PSAncCcpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5saXN0SXRlbVRhZ0F1dG9jbG9z
aW5nID0gbnVsbDtcbiAgICAgIGFuY2VzdG9ySW5mby5kbEl0ZW1UYWdBdXRvY2xvc2luZyA9IG51
bGw7XG4gICAgfVxuXG4gICAgYW5jZXN0b3JJbmZvLmN1cnJlbnQgPSBpbmZvO1xuXG4gICAgaWYg
KHRhZyA9PT0gJ2Zvcm0nKSB7XG4gICAgICBhbmNlc3RvckluZm8uZm9ybVRhZyA9IGluZm87XG4g
ICAgfVxuICAgIGlmICh0YWcgPT09ICdhJykge1xuICAgICAgYW5jZXN0b3JJbmZvLmFUYWdJblNj
b3BlID0gaW5mbztcbiAgICB9XG4gICAgaWYgKHRhZyA9PT0gJ2J1dHRvbicpIHtcbiAgICAgIGFu
Y2VzdG9ySW5mby5idXR0b25UYWdJblNjb3BlID0gaW5mbztcbiAgICB9XG4gICAgaWYgKHRhZyA9
PT0gJ25vYnInKSB7XG4gICAgICBhbmNlc3RvckluZm8ubm9iclRhZ0luU2NvcGUgPSBpbmZvO1xu
ICAgIH1cbiAgICBpZiAodGFnID09PSAncCcpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5wVGFnSW5C
dXR0b25TY29wZSA9IGluZm87XG4gICAgfVxuICAgIGlmICh0YWcgPT09ICdsaScpIHtcbiAgICAg
IGFuY2VzdG9ySW5mby5saXN0SXRlbVRhZ0F1dG9jbG9zaW5nID0gaW5mbztcbiAgICB9XG4gICAg
aWYgKHRhZyA9PT0gJ2RkJyB8fCB0YWcgPT09ICdkdCcpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5k
bEl0ZW1UYWdBdXRvY2xvc2luZyA9IGluZm87XG4gICAgfVxuXG4gICAgcmV0dXJuIGFuY2VzdG9y
SW5mbztcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyXG4gICAqL1xuICB2YXIg
aXNUYWdWYWxpZFdpdGhQYXJlbnQgPSBmdW5jdGlvbiAodGFnLCBwYXJlbnRUYWcpIHtcbiAgICAv
LyBGaXJzdCwgbGV0J3MgY2hlY2sgaWYgd2UncmUgaW4gYW4gdW51c3VhbCBwYXJzaW5nIG1vZGUu
Li5cbiAgICBzd2l0Y2ggKHBhcmVudFRhZykge1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMu
d2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluc2VsZWN0XG4g
ICAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnb3B0aW9uJyB8fCB0
YWcgPT09ICdvcHRncm91cCcgfHwgdGFnID09PSAnI3RleHQnO1xuICAgICAgY2FzZSAnb3B0Z3Jv
dXAnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnb3B0aW9uJyB8fCB0YWcgPT09ICcjdGV4dCc7
XG4gICAgICAvLyBTdHJpY3RseSBzcGVha2luZywgc2VlaW5nIGFuIDxvcHRpb24+IGRvZXNuJ3Qg
bWVhbiB3ZSdyZSBpbiBhIDxzZWxlY3Q+XG4gICAgICAvLyBidXRcbiAgICAgIGNhc2UgJ29wdGlv
bic6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICcjdGV4dCc7XG4gICAgICAvLyBodHRwczovL2h0
bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW50
ZFxuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4
Lmh0bWwjcGFyc2luZy1tYWluLWluY2FwdGlvblxuICAgICAgLy8gTm8gc3BlY2lhbCBiZWhhdmlv
ciBzaW5jZSB0aGVzZSBydWxlcyBmYWxsIGJhY2sgdG8gXCJpbiBib2R5XCIgbW9kZSBmb3JcbiAg
ICAgIC8vIGFsbCBleGNlcHQgc3BlY2lhbCB0YWJsZSBub2RlcyB3aGljaCBjYXVzZSBiYWQgcGFy
c2luZyBiZWhhdmlvciBhbnl3YXkuXG5cbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3
Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbnRyXG4gICAgICBjYXNl
ICd0cic6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICd0aCcgfHwgdGFnID09PSAndGQnIHx8IHRh
ZyA9PT0gJ3N0eWxlJyB8fCB0YWcgPT09ICdzY3JpcHQnIHx8IHRhZyA9PT0gJ3RlbXBsYXRlJztc
biAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5o
dG1sI3BhcnNpbmctbWFpbi1pbnRib2R5XG4gICAgICBjYXNlICd0Ym9keSc6XG4gICAgICBjYXNl
ICd0aGVhZCc6XG4gICAgICBjYXNlICd0Zm9vdCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICd0
cicgfHwgdGFnID09PSAnc3R5bGUnIHx8IHRhZyA9PT0gJ3NjcmlwdCcgfHwgdGFnID09PSAndGVt
cGxhdGUnO1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uv
c3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluY29sZ3JvdXBcbiAgICAgIGNhc2UgJ2NvbGdyb3Vw
JzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2NvbCcgfHwgdGFnID09PSAndGVtcGxhdGUnO1xu
ICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0
bWwjcGFyc2luZy1tYWluLWludGFibGVcbiAgICAgIGNhc2UgJ3RhYmxlJzpcbiAgICAgICAgcmV0
dXJuIHRhZyA9PT0gJ2NhcHRpb24nIHx8IHRhZyA9PT0gJ2NvbGdyb3VwJyB8fCB0YWcgPT09ICd0
Ym9keScgfHwgdGFnID09PSAndGZvb3QnIHx8IHRhZyA9PT0gJ3RoZWFkJyB8fCB0YWcgPT09ICdz
dHlsZScgfHwgdGFnID09PSAnc2NyaXB0JyB8fCB0YWcgPT09ICd0ZW1wbGF0ZSc7XG4gICAgICAv
LyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJz
aW5nLW1haW4taW5oZWFkXG4gICAgICBjYXNlICdoZWFkJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9
PT0gJ2Jhc2UnIHx8IHRhZyA9PT0gJ2Jhc2Vmb250JyB8fCB0YWcgPT09ICdiZ3NvdW5kJyB8fCB0
YWcgPT09ICdsaW5rJyB8fCB0YWcgPT09ICdtZXRhJyB8fCB0YWcgPT09ICd0aXRsZScgfHwgdGFn
ID09PSAnbm9zY3JpcHQnIHx8IHRhZyA9PT0gJ25vZnJhbWVzJyB8fCB0YWcgPT09ICdzdHlsZScg
fHwgdGFnID09PSAnc2NyaXB0JyB8fCB0YWcgPT09ICd0ZW1wbGF0ZSc7XG4gICAgICAvLyBodHRw
czovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zZW1hbnRpY3MuaHRtbCN0aGUtaHRt
bC1lbGVtZW50XG4gICAgICBjYXNlICdodG1sJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2hl
YWQnIHx8IHRhZyA9PT0gJ2JvZHknO1xuICAgICAgY2FzZSAnI2RvY3VtZW50JzpcbiAgICAgICAg
cmV0dXJuIHRhZyA9PT0gJ2h0bWwnO1xuICAgIH1cblxuICAgIC8vIFByb2JhYmx5IGluIHRoZSBc
ImluIGJvZHlcIiBwYXJzaW5nIG1vZGUsIHNvIHdlIG91dGxhdyBvbmx5IHRhZyBjb21ib3NcbiAg
ICAvLyB3aGVyZSB0aGUgcGFyc2luZyBydWxlcyBjYXVzZSBpbXBsaWNpdCBvcGVucyBvciBjbG9z
ZXMgdG8gYmUgYWRkZWQuXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0
aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluYm9keVxuICAgIHN3aXRjaCAodGFnKSB7
XG4gICAgICBjYXNlICdoMSc6XG4gICAgICBjYXNlICdoMic6XG4gICAgICBjYXNlICdoMyc6XG4g
ICAgICBjYXNlICdoNCc6XG4gICAgICBjYXNlICdoNSc6XG4gICAgICBjYXNlICdoNic6XG4gICAg
ICAgIHJldHVybiBwYXJlbnRUYWcgIT09ICdoMScgJiYgcGFyZW50VGFnICE9PSAnaDInICYmIHBh
cmVudFRhZyAhPT0gJ2gzJyAmJiBwYXJlbnRUYWcgIT09ICdoNCcgJiYgcGFyZW50VGFnICE9PSAn
aDUnICYmIHBhcmVudFRhZyAhPT0gJ2g2JztcblxuICAgICAgY2FzZSAncnAnOlxuICAgICAgY2Fz
ZSAncnQnOlxuICAgICAgICByZXR1cm4gaW1wbGllZEVuZFRhZ3MuaW5kZXhPZihwYXJlbnRUYWcp
ID09PSAtMTtcblxuICAgICAgY2FzZSAnYm9keSc6XG4gICAgICBjYXNlICdjYXB0aW9uJzpcbiAg
ICAgIGNhc2UgJ2NvbCc6XG4gICAgICBjYXNlICdjb2xncm91cCc6XG4gICAgICBjYXNlICdmcmFt
ZSc6XG4gICAgICBjYXNlICdoZWFkJzpcbiAgICAgIGNhc2UgJ2h0bWwnOlxuICAgICAgY2FzZSAn
dGJvZHknOlxuICAgICAgY2FzZSAndGQnOlxuICAgICAgY2FzZSAndGZvb3QnOlxuICAgICAgY2Fz
ZSAndGgnOlxuICAgICAgY2FzZSAndGhlYWQnOlxuICAgICAgY2FzZSAndHInOlxuICAgICAgICAv
LyBUaGVzZSB0YWdzIGFyZSBvbmx5IHZhbGlkIHdpdGggYSBmZXcgcGFyZW50cyB0aGF0IGhhdmUg
c3BlY2lhbCBjaGlsZFxuICAgICAgICAvLyBwYXJzaW5nIHJ1bGVzIC0tIGlmIHdlJ3JlIGRvd24g
aGVyZSwgdGhlbiBub25lIG9mIHRob3NlIG1hdGNoZWQgYW5kXG4gICAgICAgIC8vIHNvIHdlIGFs
bG93IGl0IG9ubHkgaWYgd2UgZG9uJ3Qga25vdyB3aGF0IHRoZSBwYXJlbnQgaXMsIGFzIGFsbCBv
dGhlclxuICAgICAgICAvLyBjYXNlcyBhcmUgaW52YWxpZC5cbiAgICAgICAgcmV0dXJuIHBhcmVu
dFRhZyA9PSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8qKlxu
ICAgKiBSZXR1cm5zIHdoZXRoZXJcbiAgICovXG4gIHZhciBmaW5kSW52YWxpZEFuY2VzdG9yRm9y
VGFnID0gZnVuY3Rpb24gKHRhZywgYW5jZXN0b3JJbmZvKSB7XG4gICAgc3dpdGNoICh0YWcpIHtc
biAgICAgIGNhc2UgJ2FkZHJlc3MnOlxuICAgICAgY2FzZSAnYXJ0aWNsZSc6XG4gICAgICBjYXNl
ICdhc2lkZSc6XG4gICAgICBjYXNlICdibG9ja3F1b3RlJzpcbiAgICAgIGNhc2UgJ2NlbnRlcic6
XG4gICAgICBjYXNlICdkZXRhaWxzJzpcbiAgICAgIGNhc2UgJ2RpYWxvZyc6XG4gICAgICBjYXNl
ICdkaXInOlxuICAgICAgY2FzZSAnZGl2JzpcbiAgICAgIGNhc2UgJ2RsJzpcbiAgICAgIGNhc2Ug
J2ZpZWxkc2V0JzpcbiAgICAgIGNhc2UgJ2ZpZ2NhcHRpb24nOlxuICAgICAgY2FzZSAnZmlndXJl
JzpcbiAgICAgIGNhc2UgJ2Zvb3Rlcic6XG4gICAgICBjYXNlICdoZWFkZXInOlxuICAgICAgY2Fz
ZSAnaGdyb3VwJzpcbiAgICAgIGNhc2UgJ21haW4nOlxuICAgICAgY2FzZSAnbWVudSc6XG4gICAg
ICBjYXNlICduYXYnOlxuICAgICAgY2FzZSAnb2wnOlxuICAgICAgY2FzZSAncCc6XG4gICAgICBj
YXNlICdzZWN0aW9uJzpcbiAgICAgIGNhc2UgJ3N1bW1hcnknOlxuICAgICAgY2FzZSAndWwnOlxu
ICAgICAgY2FzZSAncHJlJzpcbiAgICAgIGNhc2UgJ2xpc3RpbmcnOlxuICAgICAgY2FzZSAndGFi
bGUnOlxuICAgICAgY2FzZSAnaHInOlxuICAgICAgY2FzZSAneG1wJzpcbiAgICAgIGNhc2UgJ2gx
JzpcbiAgICAgIGNhc2UgJ2gyJzpcbiAgICAgIGNhc2UgJ2gzJzpcbiAgICAgIGNhc2UgJ2g0Jzpc
biAgICAgIGNhc2UgJ2g1JzpcbiAgICAgIGNhc2UgJ2g2JzpcbiAgICAgICAgcmV0dXJuIGFuY2Vz
dG9ySW5mby5wVGFnSW5CdXR0b25TY29wZTtcblxuICAgICAgY2FzZSAnZm9ybSc6XG4gICAgICAg
IHJldHVybiBhbmNlc3RvckluZm8uZm9ybVRhZyB8fCBhbmNlc3RvckluZm8ucFRhZ0luQnV0dG9u
U2NvcGU7XG5cbiAgICAgIGNhc2UgJ2xpJzpcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5s
aXN0SXRlbVRhZ0F1dG9jbG9zaW5nO1xuXG4gICAgICBjYXNlICdkZCc6XG4gICAgICBjYXNlICdk
dCc6XG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8uZGxJdGVtVGFnQXV0b2Nsb3Npbmc7XG5c
biAgICAgIGNhc2UgJ2J1dHRvbic6XG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8uYnV0dG9u
VGFnSW5TY29wZTtcblxuICAgICAgY2FzZSAnYSc6XG4gICAgICAgIC8vIFNwZWMgc2F5cyBzb21l
dGhpbmcgYWJvdXQgc3RvcmluZyBhIGxpc3Qgb2YgbWFya2VycywgYnV0IGl0IHNvdW5kc1xuICAg
ICAgICAvLyBlcXVpdmFsZW50IHRvIHRoaXMgY2hlY2suXG4gICAgICAgIHJldHVybiBhbmNlc3Rv
ckluZm8uYVRhZ0luU2NvcGU7XG5cbiAgICAgIGNhc2UgJ25vYnInOlxuICAgICAgICByZXR1cm4g
YW5jZXN0b3JJbmZvLm5vYnJUYWdJblNjb3BlO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xu
ICB9O1xuXG4gIC8qKlxuICAgKiBHaXZlbiBhIFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50IGluc3Rh
bmNlLCByZXR1cm4gYSBsaXN0IG9mIGl0cyByZWN1cnNpdmVcbiAgICogb3duZXJzLCBzdGFydGlu
ZyBhdCB0aGUgcm9vdCBhbmQgZW5kaW5nIHdpdGggdGhlIGluc3RhbmNlIGl0c2VsZi5cbiAgICov
XG4gIHZhciBmaW5kT3duZXJTdGFjayA9IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICAgIGlmICgh
aW5zdGFuY2UpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICB2YXIgc3RhY2sgPSBb
XTtcbiAgICBkbyB7XG4gICAgICBzdGFjay5wdXNoKGluc3RhbmNlKTtcbiAgICB9IHdoaWxlIChp
bnN0YW5jZSA9IGluc3RhbmNlLl9jdXJyZW50RWxlbWVudC5fb3duZXIpO1xuICAgIHN0YWNrLnJl
dmVyc2UoKTtcbiAgICByZXR1cm4gc3RhY2s7XG4gIH07XG5cbiAgdmFyIGRpZFdhcm4gPSB7fTtc
blxuICB2YWxpZGF0ZURPTU5lc3RpbmcgPSBmdW5jdGlvbiAoY2hpbGRUYWcsIGNoaWxkVGV4dCwg
Y2hpbGRJbnN0YW5jZSwgYW5jZXN0b3JJbmZvKSB7XG4gICAgYW5jZXN0b3JJbmZvID0gYW5jZXN0
b3JJbmZvIHx8IGVtcHR5QW5jZXN0b3JJbmZvO1xuICAgIHZhciBwYXJlbnRJbmZvID0gYW5jZXN0
b3JJbmZvLmN1cnJlbnQ7XG4gICAgdmFyIHBhcmVudFRhZyA9IHBhcmVudEluZm8gJiYgcGFyZW50
SW5mby50YWc7XG5cbiAgICBpZiAoY2hpbGRUZXh0ICE9IG51bGwpIHtcbiAgICAgIHByb2Nlc3Mu
ZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGNoaWxkVGFnID09IG51bGws
ICd2YWxpZGF0ZURPTU5lc3Rpbmc6IHdoZW4gY2hpbGRUZXh0IGlzIHBhc3NlZCwgY2hpbGRUYWcg
c2hvdWxkIGJlIG51bGwnKSA6IHZvaWQgMDtcbiAgICAgIGNoaWxkVGFnID0gJyN0ZXh0JztcbiAg
ICB9XG5cbiAgICB2YXIgaW52YWxpZFBhcmVudCA9IGlzVGFnVmFsaWRXaXRoUGFyZW50KGNoaWxk
VGFnLCBwYXJlbnRUYWcpID8gbnVsbCA6IHBhcmVudEluZm87XG4gICAgdmFyIGludmFsaWRBbmNl
c3RvciA9IGludmFsaWRQYXJlbnQgPyBudWxsIDogZmluZEludmFsaWRBbmNlc3RvckZvclRhZyhj
aGlsZFRhZywgYW5jZXN0b3JJbmZvKTtcbiAgICB2YXIgcHJvYmxlbWF0aWMgPSBpbnZhbGlkUGFy
ZW50IHx8IGludmFsaWRBbmNlc3RvcjtcblxuICAgIGlmIChwcm9ibGVtYXRpYykge1xuICAgICAg
dmFyIGFuY2VzdG9yVGFnID0gcHJvYmxlbWF0aWMudGFnO1xuICAgICAgdmFyIGFuY2VzdG9ySW5z
dGFuY2UgPSBwcm9ibGVtYXRpYy5pbnN0YW5jZTtcblxuICAgICAgdmFyIGNoaWxkT3duZXIgPSBj
aGlsZEluc3RhbmNlICYmIGNoaWxkSW5zdGFuY2UuX2N1cnJlbnRFbGVtZW50Ll9vd25lcjtcbiAg
ICAgIHZhciBhbmNlc3Rvck93bmVyID0gYW5jZXN0b3JJbnN0YW5jZSAmJiBhbmNlc3Rvckluc3Rh
bmNlLl9jdXJyZW50RWxlbWVudC5fb3duZXI7XG5cbiAgICAgIHZhciBjaGlsZE93bmVycyA9IGZp
bmRPd25lclN0YWNrKGNoaWxkT3duZXIpO1xuICAgICAgdmFyIGFuY2VzdG9yT3duZXJzID0gZmlu
ZE93bmVyU3RhY2soYW5jZXN0b3JPd25lcik7XG5cbiAgICAgIHZhciBtaW5TdGFja0xlbiA9IE1h
dGgubWluKGNoaWxkT3duZXJzLmxlbmd0aCwgYW5jZXN0b3JPd25lcnMubGVuZ3RoKTtcbiAgICAg
IHZhciBpO1xuXG4gICAgICB2YXIgZGVlcGVzdENvbW1vbiA9IC0xO1xuICAgICAgZm9yIChpID0g
MDsgaSA8IG1pblN0YWNrTGVuOyBpKyspIHtcbiAgICAgICAgaWYgKGNoaWxkT3duZXJzW2ldID09
PSBhbmNlc3Rvck93bmVyc1tpXSkge1xuICAgICAgICAgIGRlZXBlc3RDb21tb24gPSBpO1xuICAg
ICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAg
ICAgIHZhciBVTktOT1dOID0gJyh1bmtub3duKSc7XG4gICAgICB2YXIgY2hpbGRPd25lck5hbWVz
ID0gY2hpbGRPd25lcnMuc2xpY2UoZGVlcGVzdENvbW1vbiArIDEpLm1hcChmdW5jdGlvbiAoaW5z
dCkge1xuICAgICAgICByZXR1cm4gaW5zdC5nZXROYW1lKCkgfHwgVU5LTk9XTjtcbiAgICAgIH0p
O1xuICAgICAgdmFyIGFuY2VzdG9yT3duZXJOYW1lcyA9IGFuY2VzdG9yT3duZXJzLnNsaWNlKGRl
ZXBlc3RDb21tb24gKyAxKS5tYXAoZnVuY3Rpb24gKGluc3QpIHtcbiAgICAgICAgcmV0dXJuIGlu
c3QuZ2V0TmFtZSgpIHx8IFVOS05PV047XG4gICAgICB9KTtcbiAgICAgIHZhciBvd25lckluZm8g
PSBbXS5jb25jYXQoXG4gICAgICAvLyBJZiB0aGUgcGFyZW50IGFuZCBjaGlsZCBpbnN0YW5jZXMg
aGF2ZSBhIGNvbW1vbiBvd25lciBhbmNlc3Rvciwgc3RhcnRcbiAgICAgIC8vIHdpdGggdGhhdCAt
LSBvdGhlcndpc2Ugd2UganVzdCBzdGFydCB3aXRoIHRoZSBwYXJlbnQncyBvd25lcnMuXG4gICAg
ICBkZWVwZXN0Q29tbW9uICE9PSAtMSA/IGNoaWxkT3duZXJzW2RlZXBlc3RDb21tb25dLmdldE5h
bWUoKSB8fCBVTktOT1dOIDogW10sIGFuY2VzdG9yT3duZXJOYW1lcywgYW5jZXN0b3JUYWcsXG4g
ICAgICAvLyBJZiB3ZSdyZSB3YXJuaW5nIGFib3V0IGFuIGludmFsaWQgKG5vbi1wYXJlbnQpIGFu
Y2VzdHJ5LCBhZGQgJy4uLidcbiAgICAgIGludmFsaWRBbmNlc3RvciA/IFsnLi4uJ10gOiBbXSwg
Y2hpbGRPd25lck5hbWVzLCBjaGlsZFRhZykuam9pbignID4gJyk7XG5cbiAgICAgIHZhciB3YXJu
S2V5ID0gISFpbnZhbGlkUGFyZW50ICsgJ3wnICsgY2hpbGRUYWcgKyAnfCcgKyBhbmNlc3RvclRh
ZyArICd8JyArIG93bmVySW5mbztcbiAgICAgIGlmIChkaWRXYXJuW3dhcm5LZXldKSB7XG4gICAg
ICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGRpZFdhcm5bd2FybktleV0gPSB0cnVlO1xuXG4g
ICAgICB2YXIgdGFnRGlzcGxheU5hbWUgPSBjaGlsZFRhZztcbiAgICAgIHZhciB3aGl0ZXNwYWNl
SW5mbyA9ICcnO1xuICAgICAgaWYgKGNoaWxkVGFnID09PSAnI3RleHQnKSB7XG4gICAgICAgIGlm
ICgvXFxTLy50ZXN0KGNoaWxkVGV4dCkpIHtcbiAgICAgICAgICB0YWdEaXNwbGF5TmFtZSA9ICdU
ZXh0IG5vZGVzJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0YWdEaXNwbGF5TmFtZSA9
ICdXaGl0ZXNwYWNlIHRleHQgbm9kZXMnO1xuICAgICAgICAgIHdoaXRlc3BhY2VJbmZvID0gXCIg
TWFrZSBzdXJlIHlvdSBkb24ndCBoYXZlIGFueSBleHRyYSB3aGl0ZXNwYWNlIGJldHdlZW4gdGFn
cyBvbiBcIiArICdlYWNoIGxpbmUgb2YgeW91ciBzb3VyY2UgY29kZS4nO1xuICAgICAgICB9XG4g
ICAgICB9IGVsc2Uge1xuICAgICAgICB0YWdEaXNwbGF5TmFtZSA9ICc8JyArIGNoaWxkVGFnICsg
Jz4nO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW52YWxpZFBhcmVudCkge1xuICAgICAgICB2YXIg
aW5mbyA9ICcnO1xuICAgICAgICBpZiAoYW5jZXN0b3JUYWcgPT09ICd0YWJsZScgJiYgY2hpbGRU
YWcgPT09ICd0cicpIHtcbiAgICAgICAgICBpbmZvICs9ICcgQWRkIGEgPHRib2R5PiB0byB5b3Vy
IGNvZGUgdG8gbWF0Y2ggdGhlIERPTSB0cmVlIGdlbmVyYXRlZCBieSAnICsgJ3RoZSBicm93c2Vy
Lic7XG4gICAgICAgIH1cbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0
aW9uJyA/IHdhcm5pbmcoZmFsc2UsICd2YWxpZGF0ZURPTU5lc3RpbmcoLi4uKTogJXMgY2Fubm90
IGFwcGVhciBhcyBhIGNoaWxkIG9mIDwlcz4uJXMgJyArICdTZWUgJXMuJXMnLCB0YWdEaXNwbGF5
TmFtZSwgYW5jZXN0b3JUYWcsIHdoaXRlc3BhY2VJbmZvLCBvd25lckluZm8sIGluZm8pIDogdm9p
ZCAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdw
cm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICd2YWxpZGF0ZURPTU5lc3RpbmcoLi4uKTogJXMg
Y2Fubm90IGFwcGVhciBhcyBhIGRlc2NlbmRhbnQgb2YgJyArICc8JXM+LiBTZWUgJXMuJywgdGFn
RGlzcGxheU5hbWUsIGFuY2VzdG9yVGFnLCBvd25lckluZm8pIDogdm9pZCAwO1xuICAgICAgfVxu
ICAgIH1cbiAgfTtcblxuICB2YWxpZGF0ZURPTU5lc3RpbmcudXBkYXRlZEFuY2VzdG9ySW5mbyA9
IHVwZGF0ZWRBbmNlc3RvckluZm87XG5cbiAgLy8gRm9yIHRlc3RpbmdcbiAgdmFsaWRhdGVET01O
ZXN0aW5nLmlzVGFnVmFsaWRJbkNvbnRleHQgPSBmdW5jdGlvbiAodGFnLCBhbmNlc3RvckluZm8p
IHtcbiAgICBhbmNlc3RvckluZm8gPSBhbmNlc3RvckluZm8gfHwgZW1wdHlBbmNlc3RvckluZm87
XG4gICAgdmFyIHBhcmVudEluZm8gPSBhbmNlc3RvckluZm8uY3VycmVudDtcbiAgICB2YXIgcGFy
ZW50VGFnID0gcGFyZW50SW5mbyAmJiBwYXJlbnRJbmZvLnRhZztcbiAgICByZXR1cm4gaXNUYWdW
YWxpZFdpdGhQYXJlbnQodGFnLCBwYXJlbnRUYWcpICYmICFmaW5kSW52YWxpZEFuY2VzdG9yRm9y
VGFnKHRhZywgYW5jZXN0b3JJbmZvKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2YWxp
ZGF0ZURPTU5lc3Rpbmc7XG5cbi8qKiovIH0pLFxuLyogNDcgKi9cbi8qKiovIChmdW5jdGlvbiht
b2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7
XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwg
cmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5k
ZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdy
YW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxl
IGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuXG5cbi8qKlxuICogYGNoYXJDb2Rl
YCByZXByZXNlbnRzIHRoZSBhY3R1YWwgXCJjaGFyYWN0ZXIgY29kZVwiIGFuZCBpcyBzYWZlIHRv
IHVzZSB3aXRoXG4gKiBgU3RyaW5nLmZyb21DaGFyQ29kZWAuIEFzIHN1Y2gsIG9ubHkga2V5cyB0
aGF0IGNvcnJlc3BvbmQgdG8gcHJpbnRhYmxlXG4gKiBjaGFyYWN0ZXJzIHByb2R1Y2UgYSB2YWxp
ZCBgY2hhckNvZGVgLCB0aGUgb25seSBleGNlcHRpb24gdG8gdGhpcyBpcyBFbnRlci5cbiAqIFRo
ZSBUYWIta2V5IGlzIGNvbnNpZGVyZWQgbm9uLXByaW50YWJsZSBhbmQgZG9lcyBub3QgaGF2ZSBh
IGBjaGFyQ29kZWAsXG4gKiBwcmVzdW1hYmx5IGJlY2F1c2UgaXQgZG9lcyBub3QgcHJvZHVjZSBh
IHRhYi1jaGFyYWN0ZXIgaW4gYnJvd3NlcnMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2
ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHJldHVybiB7bnVtYmVyfSBOb3JtYWxp
emVkIGBjaGFyQ29kZWAgcHJvcGVydHkuXG4gKi9cblxuZnVuY3Rpb24gZ2V0RXZlbnRDaGFyQ29k
ZShuYXRpdmVFdmVudCkge1xuICB2YXIgY2hhckNvZGU7XG4gIHZhciBrZXlDb2RlID0gbmF0aXZl
RXZlbnQua2V5Q29kZTtcblxuICBpZiAoJ2NoYXJDb2RlJyBpbiBuYXRpdmVFdmVudCkge1xuICAg
IGNoYXJDb2RlID0gbmF0aXZlRXZlbnQuY2hhckNvZGU7XG5cbiAgICAvLyBGRiBkb2VzIG5vdCBz
ZXQgYGNoYXJDb2RlYCBmb3IgdGhlIEVudGVyLWtleSwgY2hlY2sgYWdhaW5zdCBga2V5Q29kZWAu
XG4gICAgaWYgKGNoYXJDb2RlID09PSAwICYmIGtleUNvZGUgPT09IDEzKSB7XG4gICAgICBjaGFy
Q29kZSA9IDEzO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJRTggZG9lcyBub3QgaW1wbGVt
ZW50IGBjaGFyQ29kZWAsIGJ1dCBga2V5Q29kZWAgaGFzIHRoZSBjb3JyZWN0IHZhbHVlLlxuICAg
IGNoYXJDb2RlID0ga2V5Q29kZTtcbiAgfVxuXG4gIC8vIFNvbWUgbm9uLXByaW50YWJsZSBrZXlz
IGFyZSByZXBvcnRlZCBpbiBgY2hhckNvZGVgL2BrZXlDb2RlYCwgZGlzY2FyZCB0aGVtLlxuICAv
LyBNdXN0IG5vdCBkaXNjYXJkIHRoZSAobm9uLSlwcmludGFibGUgRW50ZXIta2V5LlxuICBpZiAo
Y2hhckNvZGUgPj0gMzIgfHwgY2hhckNvZGUgPT09IDEzKSB7XG4gICAgcmV0dXJuIGNoYXJDb2Rl
O1xuICB9XG5cbiAgcmV0dXJuIDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0RXZlbnRDaGFy
Q29kZTtcblxuLyoqKi8gfSksXG4vKiA0OCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193
ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3Rc
Ijtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X2Jhc2VHZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTk1KTtcbi8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2dldFByb3RvdHlwZV9q
c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMDApO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNPYmplY3RMaWtlX2pzX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKDIwMik7XG5cblxuXG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQg
cmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcblxuLyoq
IFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9
IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7
XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9u
cy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2Vk
IHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3Bl
cnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGluZmVyIHRo
ZSBgT2JqZWN0YCBjb25zdHJ1Y3Rvci4gKi9cbnZhciBvYmplY3RDdG9yU3RyaW5nID0gZnVuY1Rv
U3RyaW5nLmNhbGwoT2JqZWN0KTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHBs
YWluIG9iamVjdCwgdGhhdCBpcywgYW4gb2JqZWN0IGNyZWF0ZWQgYnkgdGhlXG4gKiBgT2JqZWN0
YCBjb25zdHJ1Y3RvciBvciBvbmUgd2l0aCBhIGBbW1Byb3RvdHlwZV1dYCBvZiBgbnVsbGAuXG4g
KlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjguMFxuICogQGNhdGVn
b3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJl
dHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmpl
Y3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xu
ICogICB0aGlzLmEgPSAxO1xuICogfVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChuZXcgRm9vKTtc
biAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAv
LyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdCh7ICd4JzogMCwgJ3knOiAwIH0pO1xu
ICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChPYmplY3QuY3JlYXRlKG51bGwp
KTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xu
ICBpZiAoIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzT2JqZWN0TGlrZV9q
c19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fYmFzZUdldFRhZ19qc19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1
ZSkgIT0gb2JqZWN0VGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwcm90byA9
IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2dldFByb3RvdHlwZV9qc19fW1wi
YVwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSk7XG4gIGlmIChwcm90byA9PT0gbnVsbCkge1xuICAg
IHJldHVybiB0cnVlO1xuICB9XG4gIHZhciBDdG9yID0gaGFzT3duUHJvcGVydHkuY2FsbChwcm90
bywgJ2NvbnN0cnVjdG9yJykgJiYgcHJvdG8uY29uc3RydWN0b3I7XG4gIHJldHVybiB0eXBlb2Yg
Q3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IgaW5zdGFuY2VvZiBDdG9yICYmXG4gICAgZnVuY1Rv
U3RyaW5nLmNhbGwoQ3RvcikgPT0gb2JqZWN0Q3RvclN0cmluZztcbn1cblxuLyogaGFybW9ueSBk
ZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiYVwiXSA9IChpc1BsYWluT2Jq
ZWN0KTtcblxuXG4vKioqLyB9KSxcbi8qIDQ5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBf
X3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmlj
dFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNf
X1tcImFcIl0gPSB3YXJuaW5nO1xuLyoqXG4gKiBQcmludHMgYSB3YXJuaW5nIGluIHRoZSBjb25z
b2xlIGlmIGl0IGV4aXN0cy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBUaGUgd2Fy
bmluZyBtZXNzYWdlLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHdhcm5pbmco
bWVzc2FnZSkge1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG4gIGlmICh0eXBl
b2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09ICdm
dW5jdGlvbicpIHtcbiAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICB9XG4gIC8qIGVzbGlu
dC1lbmFibGUgbm8tY29uc29sZSAqL1xuICB0cnkge1xuICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRo
cm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgaWYgeW91IGVuYWJsZVxuICAgIC8vIFwiYnJl
YWsgb24gYWxsIGV4Y2VwdGlvbnNcIiBpbiB5b3VyIGNvbnNvbGUsXG4gICAgLy8gaXQgd291bGQg
cGF1c2UgdGhlIGV4ZWN1dGlvbiBhdCB0aGlzIGxpbmUuXG4gICAgdGhyb3cgbmV3IEVycm9yKG1l
c3NhZ2UpO1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWVtcHR5ICovXG4gIH0gY2F0Y2ggKGUp
IHt9XG4gIC8qIGVzbGludC1lbmFibGUgbm8tZW1wdHkgKi9cbn1cblxuLyoqKi8gfSksXG4vKiA1
MCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVf
Xykge1xuXG52YXIgX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlfXywgX19XRUJQQUNLX0FNRF9E
RUZJTkVfUkVTVUxUX187LyohXG4gIENvcHlyaWdodCAoYykgMjAxNiBKZWQgV2F0c29uLlxuICBM
aWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCksIHNlZVxuICBodHRwOi8vamVkd2F0
c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzXG4qL1xuLyogZ2xvYmFsIGRlZmluZSAqL1xuXG4oZnVu
Y3Rpb24gKCkge1xuXHQndXNlIHN0cmljdCc7XG5cblx0dmFyIGhhc093biA9IHt9Lmhhc093blBy
b3BlcnR5O1xuXG5cdGZ1bmN0aW9uIGNsYXNzTmFtZXMgKCkge1xuXHRcdHZhciBjbGFzc2VzID0g
W107XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xu
XHRcdFx0dmFyIGFyZyA9IGFyZ3VtZW50c1tpXTtcblx0XHRcdGlmICghYXJnKSBjb250aW51ZTtc
blxuXHRcdFx0dmFyIGFyZ1R5cGUgPSB0eXBlb2YgYXJnO1xuXG5cdFx0XHRpZiAoYXJnVHlwZSA9
PT0gJ3N0cmluZycgfHwgYXJnVHlwZSA9PT0gJ251bWJlcicpIHtcblx0XHRcdFx0Y2xhc3Nlcy5w
dXNoKGFyZyk7XG5cdFx0XHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuXHRcdFx0
XHRjbGFzc2VzLnB1c2goY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpKTtcblx0XHRcdH0gZWxz
ZSBpZiAoYXJnVHlwZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0Zm9yICh2YXIga2V5IGluIGFy
Zykge1xuXHRcdFx0XHRcdGlmIChoYXNPd24uY2FsbChhcmcsIGtleSkgJiYgYXJnW2tleV0pIHtc
blx0XHRcdFx0XHRcdGNsYXNzZXMucHVzaChrZXkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxu
XHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcblx0fVxuXG5c
dGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xu
XHRcdG1vZHVsZS5leHBvcnRzID0gY2xhc3NOYW1lcztcblx0fSBlbHNlIGlmICh0cnVlKSB7XG5c
dFx0Ly8gcmVnaXN0ZXIgYXMgJ2NsYXNzbmFtZXMnLCBjb25zaXN0ZW50IHdpdGggbnBtIHBhY2th
Z2UgbmFtZVxuXHRcdCEoX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlfXyA9IFtdLCBfX1dFQlBB
Q0tfQU1EX0RFRklORV9SRVNVTFRfXyA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBjbGFz
c05hbWVzO1xuXHRcdH0uYXBwbHkoZXhwb3J0cywgX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlf
XyksXG5cdFx0XHRcdF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fICE9PSB1bmRlZmluZWQg
JiYgKG1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18pKTtcblx0
fSBlbHNlIHtcblx0XHR3aW5kb3cuY2xhc3NOYW1lcyA9IGNsYXNzTmFtZXM7XG5cdH1cbn0oKSk7
XG5cblxuLyoqKi8gfSksXG4vKiA1MSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0
cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgYXNh
cCA9IF9fd2VicGFja19yZXF1aXJlX18oMTAwKTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbi8v
IFN0YXRlczpcbi8vXG4vLyAwIC0gcGVuZGluZ1xuLy8gMSAtIGZ1bGZpbGxlZCB3aXRoIF92YWx1
ZVxuLy8gMiAtIHJlamVjdGVkIHdpdGggX3ZhbHVlXG4vLyAzIC0gYWRvcHRlZCB0aGUgc3RhdGUg
b2YgYW5vdGhlciBwcm9taXNlLCBfdmFsdWVcbi8vXG4vLyBvbmNlIHRoZSBzdGF0ZSBpcyBubyBs
b25nZXIgcGVuZGluZyAoMCkgaXQgaXMgaW1tdXRhYmxlXG5cbi8vIEFsbCBgX2AgcHJlZml4ZWQg
cHJvcGVydGllcyB3aWxsIGJlIHJlZHVjZWQgdG8gYF97cmFuZG9tIG51bWJlcn1gXG4vLyBhdCBi
dWlsZCB0aW1lIHRvIG9iZnVzY2F0ZSB0aGVtIGFuZCBkaXNjb3VyYWdlIHRoZWlyIHVzZS5cbi8v
IFdlIGRvbid0IHVzZSBzeW1ib2xzIG9yIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSB0byBmdWxseSBo
aWRlIHRoZW1cbi8vIGJlY2F1c2UgdGhlIHBlcmZvcm1hbmNlIGlzbid0IGdvb2QgZW5vdWdoLlxu
XG5cbi8vIHRvIGF2b2lkIHVzaW5nIHRyeS9jYXRjaCBpbnNpZGUgY3JpdGljYWwgZnVuY3Rpb25z
LCB3ZVxuLy8gZXh0cmFjdCB0aGVtIHRvIGhlcmUuXG52YXIgTEFTVF9FUlJPUiA9IG51bGw7XG52
YXIgSVNfRVJST1IgPSB7fTtcbmZ1bmN0aW9uIGdldFRoZW4ob2JqKSB7XG4gIHRyeSB7XG4gICAg
cmV0dXJuIG9iai50aGVuO1xuICB9IGNhdGNoIChleCkge1xuICAgIExBU1RfRVJST1IgPSBleDtc
biAgICByZXR1cm4gSVNfRVJST1I7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJ5Q2FsbE9uZShmbiwg
YSkge1xuICB0cnkge1xuICAgIHJldHVybiBmbihhKTtcbiAgfSBjYXRjaCAoZXgpIHtcbiAgICBM
QVNUX0VSUk9SID0gZXg7XG4gICAgcmV0dXJuIElTX0VSUk9SO1xuICB9XG59XG5mdW5jdGlvbiB0
cnlDYWxsVHdvKGZuLCBhLCBiKSB7XG4gIHRyeSB7XG4gICAgZm4oYSwgYik7XG4gIH0gY2F0Y2gg
KGV4KSB7XG4gICAgTEFTVF9FUlJPUiA9IGV4O1xuICAgIHJldHVybiBJU19FUlJPUjtcbiAgfVxu
fVxuXG5tb2R1bGUuZXhwb3J0cyA9IFByb21pc2U7XG5cbmZ1bmN0aW9uIFByb21pc2UoZm4pIHtc
biAgaWYgKHR5cGVvZiB0aGlzICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBUeXBlRXJy
b3IoJ1Byb21pc2VzIG11c3QgYmUgY29uc3RydWN0ZWQgdmlhIG5ldycpO1xuICB9XG4gIGlmICh0
eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm9t
aXNlIGNvbnN0cnVjdG9yXFwncyBhcmd1bWVudCBpcyBub3QgYSBmdW5jdGlvbicpO1xuICB9XG4g
IHRoaXMuXzc1ID0gMDtcbiAgdGhpcy5fODMgPSAwO1xuICB0aGlzLl8xOCA9IG51bGw7XG4gIHRo
aXMuXzM4ID0gbnVsbDtcbiAgaWYgKGZuID09PSBub29wKSByZXR1cm47XG4gIGRvUmVzb2x2ZShm
biwgdGhpcyk7XG59XG5Qcm9taXNlLl80NyA9IG51bGw7XG5Qcm9taXNlLl83MSA9IG51bGw7XG5Q
cm9taXNlLl80NCA9IG5vb3A7XG5cblByb21pc2UucHJvdG90eXBlLnRoZW4gPSBmdW5jdGlvbihv
bkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICBpZiAodGhpcy5jb25zdHJ1Y3RvciAhPT0gUHJv
bWlzZSkge1xuICAgIHJldHVybiBzYWZlVGhlbih0aGlzLCBvbkZ1bGZpbGxlZCwgb25SZWplY3Rl
ZCk7XG4gIH1cbiAgdmFyIHJlcyA9IG5ldyBQcm9taXNlKG5vb3ApO1xuICBoYW5kbGUodGhpcywg
bmV3IEhhbmRsZXIob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQsIHJlcykpO1xuICByZXR1cm4gcmVz
O1xufTtcblxuZnVuY3Rpb24gc2FmZVRoZW4oc2VsZiwgb25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQp
IHtcbiAgcmV0dXJuIG5ldyBzZWxmLmNvbnN0cnVjdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWpl
Y3QpIHtcbiAgICB2YXIgcmVzID0gbmV3IFByb21pc2Uobm9vcCk7XG4gICAgcmVzLnRoZW4ocmVz
b2x2ZSwgcmVqZWN0KTtcbiAgICBoYW5kbGUoc2VsZiwgbmV3IEhhbmRsZXIob25GdWxmaWxsZWQs
IG9uUmVqZWN0ZWQsIHJlcykpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGhhbmRsZShzZWxmLCBkZWZl
cnJlZCkge1xuICB3aGlsZSAoc2VsZi5fODMgPT09IDMpIHtcbiAgICBzZWxmID0gc2VsZi5fMTg7
XG4gIH1cbiAgaWYgKFByb21pc2UuXzQ3KSB7XG4gICAgUHJvbWlzZS5fNDcoc2VsZik7XG4gIH1c
biAgaWYgKHNlbGYuXzgzID09PSAwKSB7XG4gICAgaWYgKHNlbGYuXzc1ID09PSAwKSB7XG4gICAg
ICBzZWxmLl83NSA9IDE7XG4gICAgICBzZWxmLl8zOCA9IGRlZmVycmVkO1xuICAgICAgcmV0dXJu
O1xuICAgIH1cbiAgICBpZiAoc2VsZi5fNzUgPT09IDEpIHtcbiAgICAgIHNlbGYuXzc1ID0gMjtc
biAgICAgIHNlbGYuXzM4ID0gW3NlbGYuXzM4LCBkZWZlcnJlZF07XG4gICAgICByZXR1cm47XG4g
ICAgfVxuICAgIHNlbGYuXzM4LnB1c2goZGVmZXJyZWQpO1xuICAgIHJldHVybjtcbiAgfVxuICBo
YW5kbGVSZXNvbHZlZChzZWxmLCBkZWZlcnJlZCk7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVJlc29s
dmVkKHNlbGYsIGRlZmVycmVkKSB7XG4gIGFzYXAoZnVuY3Rpb24oKSB7XG4gICAgdmFyIGNiID0g
c2VsZi5fODMgPT09IDEgPyBkZWZlcnJlZC5vbkZ1bGZpbGxlZCA6IGRlZmVycmVkLm9uUmVqZWN0
ZWQ7XG4gICAgaWYgKGNiID09PSBudWxsKSB7XG4gICAgICBpZiAoc2VsZi5fODMgPT09IDEpIHtc
biAgICAgICAgcmVzb2x2ZShkZWZlcnJlZC5wcm9taXNlLCBzZWxmLl8xOCk7XG4gICAgICB9IGVs
c2Uge1xuICAgICAgICByZWplY3QoZGVmZXJyZWQucHJvbWlzZSwgc2VsZi5fMTgpO1xuICAgICAg
fVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgcmV0ID0gdHJ5Q2FsbE9uZShjYiwgc2Vs
Zi5fMTgpO1xuICAgIGlmIChyZXQgPT09IElTX0VSUk9SKSB7XG4gICAgICByZWplY3QoZGVmZXJy
ZWQucHJvbWlzZSwgTEFTVF9FUlJPUik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc29sdmUoZGVm
ZXJyZWQucHJvbWlzZSwgcmV0KTtcbiAgICB9XG4gIH0pO1xufVxuZnVuY3Rpb24gcmVzb2x2ZShz
ZWxmLCBuZXdWYWx1ZSkge1xuICAvLyBQcm9taXNlIFJlc29sdXRpb24gUHJvY2VkdXJlOiBodHRw
czovL2dpdGh1Yi5jb20vcHJvbWlzZXMtYXBsdXMvcHJvbWlzZXMtc3BlYyN0aGUtcHJvbWlzZS1y
ZXNvbHV0aW9uLXByb2NlZHVyZVxuICBpZiAobmV3VmFsdWUgPT09IHNlbGYpIHtcbiAgICByZXR1
cm4gcmVqZWN0KFxuICAgICAgc2VsZixcbiAgICAgIG5ldyBUeXBlRXJyb3IoJ0EgcHJvbWlzZSBj
YW5ub3QgYmUgcmVzb2x2ZWQgd2l0aCBpdHNlbGYuJylcbiAgICApO1xuICB9XG4gIGlmIChcbiAg
ICBuZXdWYWx1ZSAmJlxuICAgICh0eXBlb2YgbmV3VmFsdWUgPT09ICdvYmplY3QnIHx8IHR5cGVv
ZiBuZXdWYWx1ZSA9PT0gJ2Z1bmN0aW9uJylcbiAgKSB7XG4gICAgdmFyIHRoZW4gPSBnZXRUaGVu
KG5ld1ZhbHVlKTtcbiAgICBpZiAodGhlbiA9PT0gSVNfRVJST1IpIHtcbiAgICAgIHJldHVybiBy
ZWplY3Qoc2VsZiwgTEFTVF9FUlJPUik7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoZW4gPT09
IHNlbGYudGhlbiAmJlxuICAgICAgbmV3VmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlXG4gICAgKSB7
XG4gICAgICBzZWxmLl84MyA9IDM7XG4gICAgICBzZWxmLl8xOCA9IG5ld1ZhbHVlO1xuICAgICAg
ZmluYWxlKHNlbGYpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoZW4g
PT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGRvUmVzb2x2ZSh0aGVuLmJpbmQobmV3VmFsdWUpLCBz
ZWxmKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgc2VsZi5fODMgPSAxO1xuICBzZWxm
Ll8xOCA9IG5ld1ZhbHVlO1xuICBmaW5hbGUoc2VsZik7XG59XG5cbmZ1bmN0aW9uIHJlamVjdChz
ZWxmLCBuZXdWYWx1ZSkge1xuICBzZWxmLl84MyA9IDI7XG4gIHNlbGYuXzE4ID0gbmV3VmFsdWU7
XG4gIGlmIChQcm9taXNlLl83MSkge1xuICAgIFByb21pc2UuXzcxKHNlbGYsIG5ld1ZhbHVlKTtc
biAgfVxuICBmaW5hbGUoc2VsZik7XG59XG5mdW5jdGlvbiBmaW5hbGUoc2VsZikge1xuICBpZiAo
c2VsZi5fNzUgPT09IDEpIHtcbiAgICBoYW5kbGUoc2VsZiwgc2VsZi5fMzgpO1xuICAgIHNlbGYu
XzM4ID0gbnVsbDtcbiAgfVxuICBpZiAoc2VsZi5fNzUgPT09IDIpIHtcbiAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHNlbGYuXzM4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBoYW5kbGUoc2VsZiwgc2Vs
Zi5fMzhbaV0pO1xuICAgIH1cbiAgICBzZWxmLl8zOCA9IG51bGw7XG4gIH1cbn1cblxuZnVuY3Rp
b24gSGFuZGxlcihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgcHJvbWlzZSl7XG4gIHRoaXMub25G
dWxmaWxsZWQgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT09ICdmdW5jdGlvbicgPyBvbkZ1bGZpbGxl
ZCA6IG51bGw7XG4gIHRoaXMub25SZWplY3RlZCA9IHR5cGVvZiBvblJlamVjdGVkID09PSAnZnVu
Y3Rpb24nID8gb25SZWplY3RlZCA6IG51bGw7XG4gIHRoaXMucHJvbWlzZSA9IHByb21pc2U7XG59
XG5cbi8qKlxuICogVGFrZSBhIHBvdGVudGlhbGx5IG1pc2JlaGF2aW5nIHJlc29sdmVyIGZ1bmN0
aW9uIGFuZCBtYWtlIHN1cmVcbiAqIG9uRnVsZmlsbGVkIGFuZCBvblJlamVjdGVkIGFyZSBvbmx5
IGNhbGxlZCBvbmNlLlxuICpcbiAqIE1ha2VzIG5vIGd1YXJhbnRlZXMgYWJvdXQgYXN5bmNocm9u
eS5cbiAqL1xuZnVuY3Rpb24gZG9SZXNvbHZlKGZuLCBwcm9taXNlKSB7XG4gIHZhciBkb25lID0g
ZmFsc2U7XG4gIHZhciByZXMgPSB0cnlDYWxsVHdvKGZuLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAg
ICBpZiAoZG9uZSkgcmV0dXJuO1xuICAgIGRvbmUgPSB0cnVlO1xuICAgIHJlc29sdmUocHJvbWlz
ZSwgdmFsdWUpO1xuICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgaWYgKGRvbmUpIHJldHVy
bjtcbiAgICBkb25lID0gdHJ1ZTtcbiAgICByZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgfSk7
XG4gIGlmICghZG9uZSAmJiByZXMgPT09IElTX0VSUk9SKSB7XG4gICAgZG9uZSA9IHRydWU7XG4g
ICAgcmVqZWN0KHByb21pc2UsIExBU1RfRVJST1IpO1xuICB9XG59XG5cblxuLyoqKi8gfSksXG4v
KiA1MiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVp
cmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2Vu
dCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBz
b3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQg
aW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291
cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJl
IGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAq
L1xuXG5cblxudmFyIF9wcm9kSW52YXJpYW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOCksXG4g
ICAgX2Fzc2lnbiA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG5cbnZhciBSZWFjdE5vb3BVcGRh
dGVRdWV1ZSA9IF9fd2VicGFja19yZXF1aXJlX18oNTMpO1xuXG52YXIgY2FuRGVmaW5lUHJvcGVy
dHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU0KTtcbnZhciBlbXB0eU9iamVjdCA9IF9fd2VicGFj
a19yZXF1aXJlX18oMjMpO1xudmFyIGludmFyaWFudCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7
XG52YXIgbG93UHJpb3JpdHlXYXJuaW5nID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDQpO1xuXG4v
KipcbiAqIEJhc2UgY2xhc3MgaGVscGVycyBmb3IgdGhlIHVwZGF0aW5nIHN0YXRlIG9mIGEgY29t
cG9uZW50LlxuICovXG5mdW5jdGlvbiBSZWFjdENvbXBvbmVudChwcm9wcywgY29udGV4dCwgdXBk
YXRlcikge1xuICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7
XG4gIHRoaXMucmVmcyA9IGVtcHR5T2JqZWN0O1xuICAvLyBXZSBpbml0aWFsaXplIHRoZSBkZWZh
dWx0IHVwZGF0ZXIgYnV0IHRoZSByZWFsIG9uZSBnZXRzIGluamVjdGVkIGJ5IHRoZVxuICAvLyBy
ZW5kZXJlci5cbiAgdGhpcy51cGRhdGVyID0gdXBkYXRlciB8fCBSZWFjdE5vb3BVcGRhdGVRdWV1
ZTtcbn1cblxuUmVhY3RDb21wb25lbnQucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQgPSB7fTtc
blxuLyoqXG4gKiBTZXRzIGEgc3Vic2V0IG9mIHRoZSBzdGF0ZS4gQWx3YXlzIHVzZSB0aGlzIHRv
IG11dGF0ZVxuICogc3RhdGUuIFlvdSBzaG91bGQgdHJlYXQgYHRoaXMuc3RhdGVgIGFzIGltbXV0
YWJsZS5cbiAqXG4gKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBgdGhpcy5zdGF0ZWAgd2ls
bCBiZSBpbW1lZGlhdGVseSB1cGRhdGVkLCBzb1xuICogYWNjZXNzaW5nIGB0aGlzLnN0YXRlYCBh
ZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIG1heSByZXR1cm4gdGhlIG9sZCB2YWx1ZS5cbiAqXG4g
KiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBjYWxscyB0byBgc2V0U3RhdGVgIHdpbGwgcnVu
IHN5bmNocm9ub3VzbHksXG4gKiBhcyB0aGV5IG1heSBldmVudHVhbGx5IGJlIGJhdGNoZWQgdG9n
ZXRoZXIuICBZb3UgY2FuIHByb3ZpZGUgYW4gb3B0aW9uYWxcbiAqIGNhbGxiYWNrIHRoYXQgd2ls
bCBiZSBleGVjdXRlZCB3aGVuIHRoZSBjYWxsIHRvIHNldFN0YXRlIGlzIGFjdHVhbGx5XG4gKiBj
b21wbGV0ZWQuXG4gKlxuICogV2hlbiBhIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIHRvIHNldFN0YXRl
LCBpdCB3aWxsIGJlIGNhbGxlZCBhdCBzb21lIHBvaW50IGluXG4gKiB0aGUgZnV0dXJlIChub3Qg
c3luY2hyb25vdXNseSkuIEl0IHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIHVwIHRvIGRhdGVcbiAq
IGNvbXBvbmVudCBhcmd1bWVudHMgKHN0YXRlLCBwcm9wcywgY29udGV4dCkuIFRoZXNlIHZhbHVl
cyBjYW4gYmUgZGlmZmVyZW50XG4gKiBmcm9tIHRoaXMuKiBiZWNhdXNlIHlvdXIgZnVuY3Rpb24g
bWF5IGJlIGNhbGxlZCBhZnRlciByZWNlaXZlUHJvcHMgYnV0IGJlZm9yZVxuICogc2hvdWxkQ29t
cG9uZW50VXBkYXRlLCBhbmQgdGhpcyBuZXcgc3RhdGUsIHByb3BzLCBhbmQgY29udGV4dCB3aWxs
IG5vdCB5ZXQgYmVcbiAqIGFzc2lnbmVkIHRvIHRoaXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R8
ZnVuY3Rpb259IHBhcnRpYWxTdGF0ZSBOZXh0IHBhcnRpYWwgc3RhdGUgb3IgZnVuY3Rpb24gdG9c
biAqICAgICAgICBwcm9kdWNlIG5leHQgcGFydGlhbCBzdGF0ZSB0byBiZSBtZXJnZWQgd2l0aCBj
dXJyZW50IHN0YXRlLlxuICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRl
ciBzdGF0ZSBpcyB1cGRhdGVkLlxuICogQGZpbmFsXG4gKiBAcHJvdGVjdGVkXG4gKi9cblJlYWN0
Q29tcG9uZW50LnByb3RvdHlwZS5zZXRTdGF0ZSA9IGZ1bmN0aW9uIChwYXJ0aWFsU3RhdGUsIGNh
bGxiYWNrKSB7XG4gICEodHlwZW9mIHBhcnRpYWxTdGF0ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9m
IHBhcnRpYWxTdGF0ZSA9PT0gJ2Z1bmN0aW9uJyB8fCBwYXJ0aWFsU3RhdGUgPT0gbnVsbCkgPyAg
ZmFsc2UgPyBpbnZhcmlhbnQoZmFsc2UsICdzZXRTdGF0ZSguLi4pOiB0YWtlcyBhbiBvYmplY3Qg
b2Ygc3RhdGUgdmFyaWFibGVzIHRvIHVwZGF0ZSBvciBhIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMg
YW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcy4nKSA6IF9wcm9kSW52YXJpYW50KCc4NScpIDog
dm9pZCAwO1xuICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZVNldFN0YXRlKHRoaXMsIHBhcnRpYWxTdGF0
ZSk7XG4gIGlmIChjYWxsYmFjaykge1xuICAgIHRoaXMudXBkYXRlci5lbnF1ZXVlQ2FsbGJhY2so
dGhpcywgY2FsbGJhY2ssICdzZXRTdGF0ZScpO1xuICB9XG59O1xuXG4vKipcbiAqIEZvcmNlcyBh
biB1cGRhdGUuIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW52b2tlZCB3aGVuIGl0IGlzIGtub3duIHdp
dGhcbiAqIGNlcnRhaW50eSB0aGF0IHdlIGFyZSAqKm5vdCoqIGluIGEgRE9NIHRyYW5zYWN0aW9u
LlxuICpcbiAqIFlvdSBtYXkgd2FudCB0byBjYWxsIHRoaXMgd2hlbiB5b3Uga25vdyB0aGF0IHNv
bWUgZGVlcGVyIGFzcGVjdCBvZiB0aGVcbiAqIGNvbXBvbmVudCdzIHN0YXRlIGhhcyBjaGFuZ2Vk
IGJ1dCBgc2V0U3RhdGVgIHdhcyBub3QgY2FsbGVkLlxuICpcbiAqIFRoaXMgd2lsbCBub3QgaW52
b2tlIGBzaG91bGRDb21wb25lbnRVcGRhdGVgLCBidXQgaXQgd2lsbCBpbnZva2VcbiAqIGBjb21w
b25lbnRXaWxsVXBkYXRlYCBhbmQgYGNvbXBvbmVudERpZFVwZGF0ZWAuXG4gKlxuICogQHBhcmFt
IHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciB1cGRhdGUgaXMgY29tcGxldGUuXG4g
KiBAZmluYWxcbiAqIEBwcm90ZWN0ZWRcbiAqL1xuUmVhY3RDb21wb25lbnQucHJvdG90eXBlLmZv
cmNlVXBkYXRlID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gIHRoaXMudXBkYXRlci5lbnF1ZXVl
Rm9yY2VVcGRhdGUodGhpcyk7XG4gIGlmIChjYWxsYmFjaykge1xuICAgIHRoaXMudXBkYXRlci5l
bnF1ZXVlQ2FsbGJhY2sodGhpcywgY2FsbGJhY2ssICdmb3JjZVVwZGF0ZScpO1xuICB9XG59O1xu
XG4vKipcbiAqIERlcHJlY2F0ZWQgQVBJcy4gVGhlc2UgQVBJcyB1c2VkIHRvIGV4aXN0IG9uIGNs
YXNzaWMgUmVhY3QgY2xhc3NlcyBidXQgc2luY2VcbiAqIHdlIHdvdWxkIGxpa2UgdG8gZGVwcmVj
YXRlIHRoZW0sIHdlJ3JlIG5vdCBnb2luZyB0byBtb3ZlIHRoZW0gb3ZlciB0byB0aGlzXG4gKiBt
b2Rlcm4gYmFzZSBjbGFzcy4gSW5zdGVhZCwgd2UgZGVmaW5lIGEgZ2V0dGVyIHRoYXQgd2FybnMg
aWYgaXQncyBhY2Nlc3NlZC5cbiAqL1xuaWYgKGZhbHNlKSB7XG4gIHZhciBkZXByZWNhdGVkQVBJ
cyA9IHtcbiAgICBpc01vdW50ZWQ6IFsnaXNNb3VudGVkJywgJ0luc3RlYWQsIG1ha2Ugc3VyZSB0
byBjbGVhbiB1cCBzdWJzY3JpcHRpb25zIGFuZCBwZW5kaW5nIHJlcXVlc3RzIGluICcgKyAnY29t
cG9uZW50V2lsbFVubW91bnQgdG8gcHJldmVudCBtZW1vcnkgbGVha3MuJ10sXG4gICAgcmVwbGFj
ZVN0YXRlOiBbJ3JlcGxhY2VTdGF0ZScsICdSZWZhY3RvciB5b3VyIGNvZGUgdG8gdXNlIHNldFN0
YXRlIGluc3RlYWQgKHNlZSAnICsgJ2h0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9p
c3N1ZXMvMzIzNikuJ11cbiAgfTtcbiAgdmFyIGRlZmluZURlcHJlY2F0aW9uV2FybmluZyA9IGZ1
bmN0aW9uIChtZXRob2ROYW1lLCBpbmZvKSB7XG4gICAgaWYgKGNhbkRlZmluZVByb3BlcnR5KSB7
XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhY3RDb21wb25lbnQucHJvdG90eXBlLCBt
ZXRob2ROYW1lLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGxvd1By
aW9yaXR5V2FybmluZyhmYWxzZSwgJyVzKC4uLikgaXMgZGVwcmVjYXRlZCBpbiBwbGFpbiBKYXZh
U2NyaXB0IFJlYWN0IGNsYXNzZXMuICVzJywgaW5mb1swXSwgaW5mb1sxXSk7XG4gICAgICAgICAg
cmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuICBm
b3IgKHZhciBmbk5hbWUgaW4gZGVwcmVjYXRlZEFQSXMpIHtcbiAgICBpZiAoZGVwcmVjYXRlZEFQ
SXMuaGFzT3duUHJvcGVydHkoZm5OYW1lKSkge1xuICAgICAgZGVmaW5lRGVwcmVjYXRpb25XYXJu
aW5nKGZuTmFtZSwgZGVwcmVjYXRlZEFQSXNbZm5OYW1lXSk7XG4gICAgfVxuICB9XG59XG5cbi8q
KlxuICogQmFzZSBjbGFzcyBoZWxwZXJzIGZvciB0aGUgdXBkYXRpbmcgc3RhdGUgb2YgYSBjb21w
b25lbnQuXG4gKi9cbmZ1bmN0aW9uIFJlYWN0UHVyZUNvbXBvbmVudChwcm9wcywgY29udGV4dCwg
dXBkYXRlcikge1xuICAvLyBEdXBsaWNhdGVkIGZyb20gUmVhY3RDb21wb25lbnQuXG4gIHRoaXMu
cHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgdGhpcy5yZWZzID0g
ZW1wdHlPYmplY3Q7XG4gIC8vIFdlIGluaXRpYWxpemUgdGhlIGRlZmF1bHQgdXBkYXRlciBidXQg
dGhlIHJlYWwgb25lIGdldHMgaW5qZWN0ZWQgYnkgdGhlXG4gIC8vIHJlbmRlcmVyLlxuICB0aGlz
LnVwZGF0ZXIgPSB1cGRhdGVyIHx8IFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlO1xufVxuXG5mdW5jdGlv
biBDb21wb25lbnREdW1teSgpIHt9XG5Db21wb25lbnREdW1teS5wcm90b3R5cGUgPSBSZWFjdENv
bXBvbmVudC5wcm90b3R5cGU7XG5SZWFjdFB1cmVDb21wb25lbnQucHJvdG90eXBlID0gbmV3IENv
bXBvbmVudER1bW15KCk7XG5SZWFjdFB1cmVDb21wb25lbnQucHJvdG90eXBlLmNvbnN0cnVjdG9y
ID0gUmVhY3RQdXJlQ29tcG9uZW50O1xuLy8gQXZvaWQgYW4gZXh0cmEgcHJvdG90eXBlIGp1bXAg
Zm9yIHRoZXNlIG1ldGhvZHMuXG5fYXNzaWduKFJlYWN0UHVyZUNvbXBvbmVudC5wcm90b3R5cGUs
IFJlYWN0Q29tcG9uZW50LnByb3RvdHlwZSk7XG5SZWFjdFB1cmVDb21wb25lbnQucHJvdG90eXBl
LmlzUHVyZVJlYWN0Q29tcG9uZW50ID0gdHJ1ZTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENv
bXBvbmVudDogUmVhY3RDb21wb25lbnQsXG4gIFB1cmVDb21wb25lbnQ6IFJlYWN0UHVyZUNvbXBv
bmVudFxufTtcblxuLyoqKi8gfSksXG4vKiA1MyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwg
ZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qKlxu
ICogQ29weXJpZ2h0IDIwMTUtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUg
QlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJv
b3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAq
IG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhl
IHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG5cblxudmFyIHdhcm5pbmcgPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKDEpO1xuXG5mdW5jdGlvbiB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgY2FsbGVy
TmFtZSkge1xuICBpZiAoZmFsc2UpIHtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBwdWJsaWNJbnN0
YW5jZS5jb25zdHJ1Y3RvcjtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rp
b24nID8gd2FybmluZyhmYWxzZSwgJyVzKC4uLik6IENhbiBvbmx5IHVwZGF0ZSBhIG1vdW50ZWQg
b3IgbW91bnRpbmcgY29tcG9uZW50LiAnICsgJ1RoaXMgdXN1YWxseSBtZWFucyB5b3UgY2FsbGVk
ICVzKCkgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC4gJyArICdUaGlzIGlzIGEgbm8tb3AuIFBs
ZWFzZSBjaGVjayB0aGUgY29kZSBmb3IgdGhlICVzIGNvbXBvbmVudC4nLCBjYWxsZXJOYW1lLCBj
YWxsZXJOYW1lLCBjb25zdHJ1Y3RvciAmJiAoY29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgY29u
c3RydWN0b3IubmFtZSkgfHwgJ1JlYWN0Q2xhc3MnKSA6IHZvaWQgMDtcbiAgfVxufVxuXG4vKipc
biAqIFRoaXMgaXMgdGhlIGFic3RyYWN0IEFQSSBmb3IgYW4gdXBkYXRlIHF1ZXVlLlxuICovXG52
YXIgUmVhY3ROb29wVXBkYXRlUXVldWUgPSB7XG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBv
ciBub3QgdGhpcyBjb21wb3NpdGUgY29tcG9uZW50IGlzIG1vdW50ZWQuXG4gICAqIEBwYXJhbSB7
UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHdlIHdhbnQgdG8gdGVzdC5c
biAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBtb3VudGVkLCBmYWxzZSBvdGhlcndpc2Uu
XG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQGZpbmFsXG4gICAqL1xuICBpc01vdW50ZWQ6IGZ1bmN0
aW9uIChwdWJsaWNJbnN0YW5jZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcblxuICAvKipc
biAgICogRW5xdWV1ZSBhIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBhZnRlciBhbGwg
dGhlIHBlbmRpbmcgdXBkYXRlc1xuICAgKiBoYXZlIHByb2Nlc3NlZC5cbiAgICpcbiAgICogQHBh
cmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdG8gdXNlIGFzIGB0
aGlzYCBjb250ZXh0LlxuICAgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFm
dGVyIHN0YXRlIGlzIHVwZGF0ZWQuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZUNh
bGxiYWNrOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIGNhbGxiYWNrKSB7fSxcblxuICAvKipc
biAgICogRm9yY2VzIGFuIHVwZGF0ZS4gVGhpcyBzaG91bGQgb25seSBiZSBpbnZva2VkIHdoZW4g
aXQgaXMga25vd24gd2l0aFxuICAgKiBjZXJ0YWludHkgdGhhdCB3ZSBhcmUgKipub3QqKiBpbiBh
IERPTSB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogWW91IG1heSB3YW50IHRvIGNhbGwgdGhpcyB3
aGVuIHlvdSBrbm93IHRoYXQgc29tZSBkZWVwZXIgYXNwZWN0IG9mIHRoZVxuICAgKiBjb21wb25l
bnQncyBzdGF0ZSBoYXMgY2hhbmdlZCBidXQgYHNldFN0YXRlYCB3YXMgbm90IGNhbGxlZC5cbiAg
ICpcbiAgICogVGhpcyB3aWxsIG5vdCBpbnZva2UgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAsIGJ1
dCBpdCB3aWxsIGludm9rZVxuICAgKiBgY29tcG9uZW50V2lsbFVwZGF0ZWAgYW5kIGBjb21wb25l
bnREaWRVcGRhdGVgLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3Rh
bmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQGludGVybmFsXG4g
ICAqL1xuICBlbnF1ZXVlRm9yY2VVcGRhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSkge1xu
ICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCAnZm9yY2VVcGRhdGUnKTtcbiAgfSxcblxuICAv
KipcbiAgICogUmVwbGFjZXMgYWxsIG9mIHRoZSBzdGF0ZS4gQWx3YXlzIHVzZSB0aGlzIG9yIGBz
ZXRTdGF0ZWAgdG8gbXV0YXRlIHN0YXRlLlxuICAgKiBZb3Ugc2hvdWxkIHRyZWF0IGB0aGlzLnN0
YXRlYCBhcyBpbW11dGFibGUuXG4gICAqXG4gICAqIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0
IGB0aGlzLnN0YXRlYCB3aWxsIGJlIGltbWVkaWF0ZWx5IHVwZGF0ZWQsIHNvXG4gICAqIGFjY2Vz
c2luZyBgdGhpcy5zdGF0ZWAgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCBtYXkgcmV0dXJuIHRo
ZSBvbGQgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFu
Y2UgVGhlIGluc3RhbmNlIHRoYXQgc2hvdWxkIHJlcmVuZGVyLlxuICAgKiBAcGFyYW0ge29iamVj
dH0gY29tcGxldGVTdGF0ZSBOZXh0IHN0YXRlLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVu
cXVldWVSZXBsYWNlU3RhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSwgY29tcGxldGVTdGF0
ZSkge1xuICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCAncmVwbGFjZVN0YXRlJyk7XG4gIH0s
XG5cbiAgLyoqXG4gICAqIFNldHMgYSBzdWJzZXQgb2YgdGhlIHN0YXRlLiBUaGlzIG9ubHkgZXhp
c3RzIGJlY2F1c2UgX3BlbmRpbmdTdGF0ZSBpc1xuICAgKiBpbnRlcm5hbC4gVGhpcyBwcm92aWRl
cyBhIG1lcmdpbmcgc3RyYXRlZ3kgdGhhdCBpcyBub3QgYXZhaWxhYmxlIHRvIGRlZXBcbiAgICog
cHJvcGVydGllcyB3aGljaCBpcyBjb25mdXNpbmcuIFRPRE86IEV4cG9zZSBwZW5kaW5nU3RhdGUg
b3IgZG9uJ3QgdXNlIGl0XG4gICAqIGR1cmluZyB0aGUgbWVyZ2UuXG4gICAqXG4gICAqIEBwYXJh
bSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRoYXQgc2hvdWxkIHJl
cmVuZGVyLlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFydGlhbFN0YXRlIE5leHQgcGFydGlhbCBz
dGF0ZSB0byBiZSBtZXJnZWQgd2l0aCBzdGF0ZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBl
bnF1ZXVlU2V0U3RhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSwgcGFydGlhbFN0YXRlKSB7
XG4gICAgd2Fybk5vb3AocHVibGljSW5zdGFuY2UsICdzZXRTdGF0ZScpO1xuICB9XG59O1xuXG5t
b2R1bGUuZXhwb3J0cyA9IFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlO1xuXG4vKioqLyB9KSxcbi8qIDU0
ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9f
KSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBG
YWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJj
ZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0
aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2Ug
dHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91
bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4g
Ki9cblxuXG5cbnZhciBjYW5EZWZpbmVQcm9wZXJ0eSA9IGZhbHNlO1xuaWYgKGZhbHNlKSB7XG4g
IHRyeSB7XG4gICAgLy8gJEZsb3dGaXhNZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxv
dy9pc3N1ZXMvMjg1XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAneCcsIHsgZ2V0OiBm
dW5jdGlvbiAoKSB7fSB9KTtcbiAgICBjYW5EZWZpbmVQcm9wZXJ0eSA9IHRydWU7XG4gIH0gY2F0
Y2ggKHgpIHtcbiAgICAvLyBJRSB3aWxsIGZhaWwgb24gZGVmaW5lUHJvcGVydHlcbiAgfVxufVxu
XG5tb2R1bGUuZXhwb3J0cyA9IGNhbkRlZmluZVByb3BlcnR5O1xuXG4vKioqLyB9KSxcbi8qIDU1
ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9f
KSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50LCBG
YWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJj
ZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0
aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2Ug
dHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91
bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4g
Ki9cblxuXG5cbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudCB0eXBl
LiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBw
bGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG5cbnZhciBSRUFDVF9FTEVNRU5U
X1RZUEUgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbFsnZm9yJ10gJiYg
U3ltYm9sWydmb3InXSgncmVhY3QuZWxlbWVudCcpIHx8IDB4ZWFjNztcblxubW9kdWxlLmV4cG9y
dHMgPSBSRUFDVF9FTEVNRU5UX1RZUEU7XG5cbi8qKiovIH0pLFxuLyogNTYgKi9cbi8qKiovIChm
dW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ug
c3RyaWN0XCI7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMu
XG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGlj
ZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5T
RSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRp
dGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFU
RU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuXG5cblxuLy8gUmVhY3QgMTUu
NSByZWZlcmVuY2VzIHRoaXMgbW9kdWxlLCBhbmQgYXNzdW1lcyBQcm9wVHlwZXMgYXJlIHN0aWxs
IGNhbGxhYmxlIGluIHByb2R1Y3Rpb24uXG4vLyBUaGVyZWZvcmUgd2UgcmUtZXhwb3J0IGRldmVs
b3BtZW50LW9ubHkgdmVyc2lvbiB3aXRoIGFsbCB0aGUgUHJvcFR5cGVzIGNoZWNrcyBoZXJlLlxu
Ly8gSG93ZXZlciBpZiBvbmUgaXMgbWlncmF0aW5nIHRvIHRoZSBgcHJvcC10eXBlc2AgbnBtIGxp
YnJhcnksIHRoZXkgd2lsbCBnbyB0aHJvdWdoIHRoZVxuLy8gYGluZGV4LmpzYCBlbnRyeSBwb2lu
dCwgYW5kIGl0IHdpbGwgYnJhbmNoIGRlcGVuZGluZyBvbiB0aGUgZW52aXJvbm1lbnQuXG52YXIg
ZmFjdG9yeSA9IF9fd2VicGFja19yZXF1aXJlX18oMTEyKTtcbm1vZHVsZS5leHBvcnRzID0gZnVu
Y3Rpb24oaXNWYWxpZEVsZW1lbnQpIHtcbiAgLy8gSXQgaXMgc3RpbGwgYWxsb3dlZCBpbiAxNS41
LlxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IGZhbHNlO1xuICByZXR1cm4gZmFjdG9yeShp
c1ZhbGlkRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7XG59O1xuXG5cbi8qKiovIH0pLFxu
LyogNTcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1
aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNl
bnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMg
c291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5k
IGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNv
dXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBi
ZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xu
XG5cblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gJ1NFQ1JFVF9ET19OT1RfUEFTU19USElT
X09SX1lPVV9XSUxMX0JFX0ZJUkVEJztcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBl
c1NlY3JldDtcblxuXG4vKioqLyB9KSxcbi8qIDU4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxl
LCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyoq
XG4gKiBDb3B5cmlnaHQgMjAxNS1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0
cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRo
ZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxu
ICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0
aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cblxuXG52YXIgUmVhY3RET01Db21wb25lbnRG
bGFncyA9IHtcbiAgaGFzQ2FjaGVkQ2hpbGROb2RlczogMSA8PCAwXG59O1xuXG5tb2R1bGUuZXhw
b3J0cyA9IFJlYWN0RE9NQ29tcG9uZW50RmxhZ3M7XG5cbi8qKiovIH0pLFxuLyogNTkgKi9cbi8q
KiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxu
XCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQsIEZhY2Vib29r
LCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUg
aXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICog
TElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBB
biBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0
aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG5c
blxudmFyIF9wcm9kSW52YXJpYW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcblxudmFyIGlu
dmFyaWFudCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbi8qKlxuICogQWNjdW11bGF0ZXMg
aXRlbXMgdGhhdCBtdXN0IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZCBpbnRvIHRoZSBmaXJzdCBv
bmUuIFRoaXNcbiAqIGlzIHVzZWQgdG8gY29uc2VydmUgbWVtb3J5IGJ5IGF2b2lkaW5nIGFycmF5
IGFsbG9jYXRpb25zLCBhbmQgdGh1cyBzYWNyaWZpY2VzXG4gKiBBUEkgY2xlYW5uZXNzLiBTaW5j
ZSBgY3VycmVudGAgY2FuIGJlIG51bGwgYmVmb3JlIGJlaW5nIHBhc3NlZCBpbiBhbmQgbm90XG4g
KiBudWxsIGFmdGVyIHRoaXMgZnVuY3Rpb24sIG1ha2Ugc3VyZSB0byBhc3NpZ24gaXQgYmFjayB0
byBgY3VycmVudGA6XG4gKlxuICogYGEgPSBhY2N1bXVsYXRlSW50byhhLCBiKTtgXG4gKlxuICog
VGhpcyBBUEkgc2hvdWxkIGJlIHNwYXJpbmdseSB1c2VkLiBUcnkgYGFjY3VtdWxhdGVgIGZvciBz
b21ldGhpbmcgY2xlYW5lci5cbiAqXG4gKiBAcmV0dXJuIHsqfGFycmF5PCo+fSBBbiBhY2N1bXVs
YXRpb24gb2YgaXRlbXMuXG4gKi9cblxuZnVuY3Rpb24gYWNjdW11bGF0ZUludG8oY3VycmVudCwg
bmV4dCkge1xuICAhKG5leHQgIT0gbnVsbCkgPyAgZmFsc2UgPyBpbnZhcmlhbnQoZmFsc2UsICdh
Y2N1bXVsYXRlSW50byguLi4pOiBBY2N1bXVsYXRlZCBpdGVtcyBtdXN0IG5vdCBiZSBudWxsIG9y
IHVuZGVmaW5lZC4nKSA6IF9wcm9kSW52YXJpYW50KCczMCcpIDogdm9pZCAwO1xuXG4gIGlmIChj
dXJyZW50ID09IG51bGwpIHtcbiAgICByZXR1cm4gbmV4dDtcbiAgfVxuXG4gIC8vIEJvdGggYXJl
IG5vdCBlbXB0eS4gV2FybmluZzogTmV2ZXIgY2FsbCB4LmNvbmNhdCh5KSB3aGVuIHlvdSBhcmUg
bm90XG4gIC8vIGNlcnRhaW4gdGhhdCB4IGlzIGFuIEFycmF5ICh4IGNvdWxkIGJlIGEgc3RyaW5n
IHdpdGggY29uY2F0IG1ldGhvZCkuXG4gIGlmIChBcnJheS5pc0FycmF5KGN1cnJlbnQpKSB7XG4g
ICAgaWYgKEFycmF5LmlzQXJyYXkobmV4dCkpIHtcbiAgICAgIGN1cnJlbnQucHVzaC5hcHBseShj
dXJyZW50LCBuZXh0KTtcbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH1cbiAgICBjdXJyZW50
LnB1c2gobmV4dCk7XG4gICAgcmV0dXJuIGN1cnJlbnQ7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNB
cnJheShuZXh0KSkge1xuICAgIC8vIEEgYml0IHRvbyBkYW5nZXJvdXMgdG8gbXV0YXRlIGBuZXh0
YC5cbiAgICByZXR1cm4gW2N1cnJlbnRdLmNvbmNhdChuZXh0KTtcbiAgfVxuXG4gIHJldHVybiBb
Y3VycmVudCwgbmV4dF07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYWNjdW11bGF0ZUludG87XG5c
bi8qKiovIH0pLFxuLyogNjAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9f
d2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIENvcHlyaWdo
dCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxu
ICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBs
aWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9y
eSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQg
cmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVj
dG9yeS5cbiAqXG4gKiBcbiAqL1xuXG5cblxuLyoqXG4gKiBAcGFyYW0ge2FycmF5fSBhcnIgYW4g
XCJhY2N1bXVsYXRpb25cIiBvZiBpdGVtcyB3aGljaCBpcyBlaXRoZXIgYW4gQXJyYXkgb3JcbiAq
IGEgc2luZ2xlIGl0ZW0uIFVzZWZ1bCB3aGVuIHBhaXJlZCB3aXRoIHRoZSBgYWNjdW11bGF0ZWAg
bW9kdWxlLiBUaGlzIGlzIGFcbiAqIHNpbXBsZSB1dGlsaXR5IHRoYXQgYWxsb3dzIHVzIHRvIHJl
YXNvbiBhYm91dCBhIGNvbGxlY3Rpb24gb2YgaXRlbXMsIGJ1dFxuICogaGFuZGxpbmcgdGhlIGNh
c2Ugd2hlbiB0aGVyZSBpcyBleGFjdGx5IG9uZSBpdGVtIChhbmQgd2UgZG8gbm90IG5lZWQgdG9c
biAqIGFsbG9jYXRlIGFuIGFycmF5KS5cbiAqL1xuXG5mdW5jdGlvbiBmb3JFYWNoQWNjdW11bGF0
ZWQoYXJyLCBjYiwgc2NvcGUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgIGFy
ci5mb3JFYWNoKGNiLCBzY29wZSk7XG4gIH0gZWxzZSBpZiAoYXJyKSB7XG4gICAgY2IuY2FsbChz
Y29wZSwgYXJyKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZvckVhY2hBY2N1bXVsYXRl
ZDtcblxuLyoqKi8gfSksXG4vKiA2MSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0
cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qKlxuICogQ29w
eXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0
eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGly
ZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBh
dGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUg
ZGlyZWN0b3J5LlxuICpcbiAqL1xuXG5cblxudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gX193
ZWJwYWNrX3JlcXVpcmVfXyg1KTtcblxudmFyIGNvbnRlbnRLZXkgPSBudWxsO1xuXG4vKipcbiAq
IEdldHMgdGhlIGtleSB1c2VkIHRvIGFjY2VzcyB0ZXh0IGNvbnRlbnQgb24gYSBET00gbm9kZS5c
biAqXG4gKiBAcmV0dXJuIHs/c3RyaW5nfSBLZXkgdXNlZCB0byBhY2Nlc3MgdGV4dCBjb250ZW50
LlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGdldFRleHRDb250ZW50QWNjZXNzb3IoKSB7
XG4gIGlmICghY29udGVudEtleSAmJiBFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00pIHtc
biAgICAvLyBQcmVmZXIgdGV4dENvbnRlbnQgdG8gaW5uZXJUZXh0IGJlY2F1c2UgbWFueSBicm93
c2VycyBzdXBwb3J0IGJvdGggYnV0XG4gICAgLy8gU1ZHIDx0ZXh0PiBlbGVtZW50cyBkb24ndCBz
dXBwb3J0IGlubmVyVGV4dCBldmVuIHdoZW4gPGRpdj4gZG9lcy5cbiAgICBjb250ZW50S2V5ID0g
J3RleHRDb250ZW50JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgPyAndGV4dENvbnRlbnQn
IDogJ2lubmVyVGV4dCc7XG4gIH1cbiAgcmV0dXJuIGNvbnRlbnRLZXk7XG59XG5cbm1vZHVsZS5l
eHBvcnRzID0gZ2V0VGV4dENvbnRlbnRBY2Nlc3NvcjtcblxuLyoqKi8gfSksXG4vKiA2MiAqL1xu
LyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xu
XG5cInVzZSBzdHJpY3RcIjtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJv
b2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29k
ZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4g
KiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUu
IEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGlu
IHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIFxuICovXG5c
blxuXG52YXIgX3Byb2RJbnZhcmlhbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuXG5mdW5j
dGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3Rh
bmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5u
b3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG52YXIgUG9vbGVkQ2xhc3Mg
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTtcblxudmFyIGludmFyaWFudCA9IF9fd2VicGFja19y
ZXF1aXJlX18oMCk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCBwc2V1ZG8tZXZlbnQgbW9kdWxl
IHRvIGhlbHAga2VlcCB0cmFjayBvZiBjb21wb25lbnRzIHdhaXRpbmcgdG9cbiAqIGJlIG5vdGlm
aWVkIHdoZW4gdGhlaXIgRE9NIHJlcHJlc2VudGF0aW9ucyBhcmUgYXZhaWxhYmxlIGZvciB1c2Uu
XG4gKlxuICogVGhpcyBpbXBsZW1lbnRzIGBQb29sZWRDbGFzc2AsIHNvIHlvdSBzaG91bGQgbmV2
ZXIgbmVlZCB0byBpbnN0YW50aWF0ZSB0aGlzLlxuICogSW5zdGVhZCwgdXNlIGBDYWxsYmFja1F1
ZXVlLmdldFBvb2xlZCgpYC5cbiAqXG4gKiBAY2xhc3MgUmVhY3RNb3VudFJlYWR5XG4gKiBAaW1w
bGVtZW50cyBQb29sZWRDbGFzc1xuICogQGludGVybmFsXG4gKi9cblxudmFyIENhbGxiYWNrUXVl
dWUgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIENhbGxiYWNrUXVldWUoYXJnKSB7XG4gICAg
X2NsYXNzQ2FsbENoZWNrKHRoaXMsIENhbGxiYWNrUXVldWUpO1xuXG4gICAgdGhpcy5fY2FsbGJh
Y2tzID0gbnVsbDtcbiAgICB0aGlzLl9jb250ZXh0cyA9IG51bGw7XG4gICAgdGhpcy5fYXJnID0g
YXJnO1xuICB9XG5cbiAgLyoqXG4gICAqIEVucXVldWVzIGEgY2FsbGJhY2sgdG8gYmUgaW52b2tl
ZCB3aGVuIGBub3RpZnlBbGxgIGlzIGludm9rZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rp
b259IGNhbGxiYWNrIEludm9rZWQgd2hlbiBgbm90aWZ5QWxsYCBpcyBpbnZva2VkLlxuICAgKiBA
cGFyYW0gez9vYmplY3R9IGNvbnRleHQgQ29udGV4dCB0byBjYWxsIGBjYWxsYmFja2Agd2l0aC5c
biAgICogQGludGVybmFsXG4gICAqL1xuXG5cbiAgQ2FsbGJhY2tRdWV1ZS5wcm90b3R5cGUuZW5x
dWV1ZSA9IGZ1bmN0aW9uIGVucXVldWUoY2FsbGJhY2ssIGNvbnRleHQpIHtcbiAgICB0aGlzLl9j
YWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3MgfHwgW107XG4gICAgdGhpcy5fY2FsbGJhY2tzLnB1
c2goY2FsbGJhY2spO1xuICAgIHRoaXMuX2NvbnRleHRzID0gdGhpcy5fY29udGV4dHMgfHwgW107
XG4gICAgdGhpcy5fY29udGV4dHMucHVzaChjb250ZXh0KTtcbiAgfTtcblxuICAvKipcbiAgICog
SW52b2tlcyBhbGwgZW5xdWV1ZWQgY2FsbGJhY2tzIGFuZCBjbGVhcnMgdGhlIHF1ZXVlLiBUaGlz
IGlzIGludm9rZWQgYWZ0ZXJcbiAgICogdGhlIERPTSByZXByZXNlbnRhdGlvbiBvZiBhIGNvbXBv
bmVudCBoYXMgYmVlbiBjcmVhdGVkIG9yIHVwZGF0ZWQuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxu
ICAgKi9cblxuXG4gIENhbGxiYWNrUXVldWUucHJvdG90eXBlLm5vdGlmeUFsbCA9IGZ1bmN0aW9u
IG5vdGlmeUFsbCgpIHtcbiAgICB2YXIgY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzO1xuICAg
IHZhciBjb250ZXh0cyA9IHRoaXMuX2NvbnRleHRzO1xuICAgIHZhciBhcmcgPSB0aGlzLl9hcmc7
XG4gICAgaWYgKGNhbGxiYWNrcyAmJiBjb250ZXh0cykge1xuICAgICAgIShjYWxsYmFja3MubGVu
Z3RoID09PSBjb250ZXh0cy5sZW5ndGgpID8gIGZhbHNlID8gaW52YXJpYW50KGZhbHNlLCAnTWlz
bWF0Y2hlZCBsaXN0IG9mIGNvbnRleHRzIGluIGNhbGxiYWNrIHF1ZXVlJykgOiBfcHJvZEludmFy
aWFudCgnMjQnKSA6IHZvaWQgMDtcbiAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IG51bGw7XG4gICAg
ICB0aGlzLl9jb250ZXh0cyA9IG51bGw7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhbGxi
YWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjYWxsYmFja3NbaV0uY2FsbChjb250ZXh0c1tp
XSwgYXJnKTtcbiAgICAgIH1cbiAgICAgIGNhbGxiYWNrcy5sZW5ndGggPSAwO1xuICAgICAgY29u
dGV4dHMubGVuZ3RoID0gMDtcbiAgICB9XG4gIH07XG5cbiAgQ2FsbGJhY2tRdWV1ZS5wcm90b3R5
cGUuY2hlY2twb2ludCA9IGZ1bmN0aW9uIGNoZWNrcG9pbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMu
X2NhbGxiYWNrcyA/IHRoaXMuX2NhbGxiYWNrcy5sZW5ndGggOiAwO1xuICB9O1xuXG4gIENhbGxi
YWNrUXVldWUucHJvdG90eXBlLnJvbGxiYWNrID0gZnVuY3Rpb24gcm9sbGJhY2sobGVuKSB7XG4g
ICAgaWYgKHRoaXMuX2NhbGxiYWNrcyAmJiB0aGlzLl9jb250ZXh0cykge1xuICAgICAgdGhpcy5f
Y2FsbGJhY2tzLmxlbmd0aCA9IGxlbjtcbiAgICAgIHRoaXMuX2NvbnRleHRzLmxlbmd0aCA9IGxl
bjtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGUgaW50ZXJuYWwgcXVldWUu
XG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cblxuXG4gIENhbGxiYWNrUXVldWUucHJvdG90
eXBlLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgdGhpcy5fY2FsbGJhY2tzID0gbnVs
bDtcbiAgICB0aGlzLl9jb250ZXh0cyA9IG51bGw7XG4gIH07XG5cbiAgLyoqXG4gICAqIGBQb29s
ZWRDbGFzc2AgbG9va3MgZm9yIHRoaXMuXG4gICAqL1xuXG5cbiAgQ2FsbGJhY2tRdWV1ZS5wcm90
b3R5cGUuZGVzdHJ1Y3RvciA9IGZ1bmN0aW9uIGRlc3RydWN0b3IoKSB7XG4gICAgdGhpcy5yZXNl
dCgpO1xuICB9O1xuXG4gIHJldHVybiBDYWxsYmFja1F1ZXVlO1xufSgpO1xuXG5tb2R1bGUuZXhw
b3J0cyA9IFBvb2xlZENsYXNzLmFkZFBvb2xpbmdUbyhDYWxsYmFja1F1ZXVlKTtcblxuLyoqKi8g
fSksXG4vKiA2MyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNr
X3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMt
cHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICog
VGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2Ug
Zm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRo
aXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMg
Y2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5Llxu
ICpcbiAqIFxuICovXG5cblxuXG52YXIgUmVhY3RGZWF0dXJlRmxhZ3MgPSB7XG4gIC8vIFdoZW4g
dHJ1ZSwgY2FsbCBjb25zb2xlLnRpbWUoKSBiZWZvcmUgYW5kIC50aW1lRW5kKCkgYWZ0ZXIgZWFj
aCB0b3AtbGV2ZWxcbiAgLy8gcmVuZGVyIChib3RoIGluaXRpYWwgcmVuZGVycyBhbmQgdXBkYXRl
cykuIFVzZWZ1bCB3aGVuIGxvb2tpbmcgYXQgcHJvZC1tb2RlXG4gIC8vIHRpbWVsaW5lIHByb2Zp
bGVzIGluIENocm9tZSwgZm9yIGV4YW1wbGUuXG4gIGxvZ1RvcExldmVsUmVuZGVyczogZmFsc2Vc
bn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RGZWF0dXJlRmxhZ3M7XG5cbi8qKiovIH0pLFxu
LyogNjQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1
aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNl
bnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMg
c291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5k
IGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNv
dXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBi
ZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4g
Ki9cblxuXG5cbnZhciBSZWFjdERPTUNvbXBvbmVudFRyZWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KDQpO1xuXG5mdW5jdGlvbiBpc0NoZWNrYWJsZShlbGVtKSB7XG4gIHZhciB0eXBlID0gZWxlbS50
eXBlO1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lO1xuICByZXR1cm4gbm9kZU5hbWUg
JiYgbm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0JyAmJiAodHlwZSA9PT0gJ2NoZWNr
Ym94JyB8fCB0eXBlID09PSAncmFkaW8nKTtcbn1cblxuZnVuY3Rpb24gZ2V0VHJhY2tlcihpbnN0
KSB7XG4gIHJldHVybiBpbnN0Ll93cmFwcGVyU3RhdGUudmFsdWVUcmFja2VyO1xufVxuXG5mdW5j
dGlvbiBhdHRhY2hUcmFja2VyKGluc3QsIHRyYWNrZXIpIHtcbiAgaW5zdC5fd3JhcHBlclN0YXRl
LnZhbHVlVHJhY2tlciA9IHRyYWNrZXI7XG59XG5cbmZ1bmN0aW9uIGRldGFjaFRyYWNrZXIoaW5z
dCkge1xuICBkZWxldGUgaW5zdC5fd3JhcHBlclN0YXRlLnZhbHVlVHJhY2tlcjtcbn1cblxuZnVu
Y3Rpb24gZ2V0VmFsdWVGcm9tTm9kZShub2RlKSB7XG4gIHZhciB2YWx1ZTtcbiAgaWYgKG5vZGUp
IHtcbiAgICB2YWx1ZSA9IGlzQ2hlY2thYmxlKG5vZGUpID8gJycgKyBub2RlLmNoZWNrZWQgOiBu
b2RlLnZhbHVlO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxudmFyIGlucHV0VmFsdWVUcmFj
a2luZyA9IHtcbiAgLy8gZXhwb3NlZCBmb3IgdGVzdGluZ1xuICBfZ2V0VHJhY2tlckZyb21Ob2Rl
OiBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiBnZXRUcmFja2VyKFJlYWN0RE9NQ29tcG9u
ZW50VHJlZS5nZXRJbnN0YW5jZUZyb21Ob2RlKG5vZGUpKTtcbiAgfSxcblxuXG4gIHRyYWNrOiBm
dW5jdGlvbiAoaW5zdCkge1xuICAgIGlmIChnZXRUcmFja2VyKGluc3QpKSB7XG4gICAgICByZXR1
cm47XG4gICAgfVxuXG4gICAgdmFyIG5vZGUgPSBSZWFjdERPTUNvbXBvbmVudFRyZWUuZ2V0Tm9k
ZUZyb21JbnN0YW5jZShpbnN0KTtcbiAgICB2YXIgdmFsdWVGaWVsZCA9IGlzQ2hlY2thYmxlKG5v
ZGUpID8gJ2NoZWNrZWQnIDogJ3ZhbHVlJztcbiAgICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobm9kZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHZhbHVl
RmllbGQpO1xuXG4gICAgdmFyIGN1cnJlbnRWYWx1ZSA9ICcnICsgbm9kZVt2YWx1ZUZpZWxkXTtc
blxuICAgIC8vIGlmIHNvbWVvbmUgaGFzIGFscmVhZHkgZGVmaW5lZCBhIHZhbHVlIG9yIFNhZmFy
aSwgdGhlbiBiYWlsXG4gICAgLy8gYW5kIGRvbid0IHRyYWNrIHZhbHVlIHdpbGwgY2F1c2Ugb3Zl
ciByZXBvcnRpbmcgb2YgY2hhbmdlcyxcbiAgICAvLyBidXQgaXQncyBiZXR0ZXIgdGhlbiBhIGhh
cmQgZmFpbHVyZVxuICAgIC8vIChuZWVkZWQgZm9yIGNlcnRhaW4gdGVzdHMgdGhhdCBzcHlPbiBp
bnB1dCB2YWx1ZXMgYW5kIFNhZmFyaSlcbiAgICBpZiAobm9kZS5oYXNPd25Qcm9wZXJ0eSh2YWx1
ZUZpZWxkKSB8fCB0eXBlb2YgZGVzY3JpcHRvci5nZXQgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9m
IGRlc2NyaXB0b3Iuc2V0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxu
XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5vZGUsIHZhbHVlRmllbGQsIHtcbiAgICAgIGVu
dW1lcmFibGU6IGRlc2NyaXB0b3IuZW51bWVyYWJsZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvci5n
ZXQuY2FsbCh0aGlzKTtcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xu
ICAgICAgICBjdXJyZW50VmFsdWUgPSAnJyArIHZhbHVlO1xuICAgICAgICBkZXNjcmlwdG9yLnNl
dC5jYWxsKHRoaXMsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGF0dGFjaFRyYWNr
ZXIoaW5zdCwge1xuICAgICAgZ2V0VmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJu
IGN1cnJlbnRWYWx1ZTtcbiAgICAgIH0sXG4gICAgICBzZXRWYWx1ZTogZnVuY3Rpb24gKHZhbHVl
KSB7XG4gICAgICAgIGN1cnJlbnRWYWx1ZSA9ICcnICsgdmFsdWU7XG4gICAgICB9LFxuICAgICAg
c3RvcFRyYWNraW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRldGFjaFRyYWNrZXIoaW5zdCk7
XG4gICAgICAgIGRlbGV0ZSBub2RlW3ZhbHVlRmllbGRdO1xuICAgICAgfVxuICAgIH0pO1xuICB9
LFxuXG4gIHVwZGF0ZVZhbHVlSWZDaGFuZ2VkOiBmdW5jdGlvbiAoaW5zdCkge1xuICAgIGlmICgh
aW5zdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgdHJhY2tlciA9IGdl
dFRyYWNrZXIoaW5zdCk7XG5cbiAgICBpZiAoIXRyYWNrZXIpIHtcbiAgICAgIGlucHV0VmFsdWVU
cmFja2luZy50cmFjayhpbnN0KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHZh
ciBsYXN0VmFsdWUgPSB0cmFja2VyLmdldFZhbHVlKCk7XG4gICAgdmFyIG5leHRWYWx1ZSA9IGdl
dFZhbHVlRnJvbU5vZGUoUmVhY3RET01Db21wb25lbnRUcmVlLmdldE5vZGVGcm9tSW5zdGFuY2Uo
aW5zdCkpO1xuXG4gICAgaWYgKG5leHRWYWx1ZSAhPT0gbGFzdFZhbHVlKSB7XG4gICAgICB0cmFj
a2VyLnNldFZhbHVlKG5leHRWYWx1ZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAg
ICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIHN0b3BUcmFja2luZzogZnVuY3Rpb24gKGluc3QpIHtc
biAgICB2YXIgdHJhY2tlciA9IGdldFRyYWNrZXIoaW5zdCk7XG4gICAgaWYgKHRyYWNrZXIpIHtc
biAgICAgIHRyYWNrZXIuc3RvcFRyYWNraW5nKCk7XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUu
ZXhwb3J0cyA9IGlucHV0VmFsdWVUcmFja2luZztcblxuLyoqKi8gfSksXG4vKiA2NSAqL1xuLyoq
Ki8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5c
InVzZSBzdHJpY3RcIjtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ss
IEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBp
cyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBM
SUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFu
IGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRo
ZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIFxuICovXG5cblxu
XG4vKipcbiAqIEBzZWUgaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJl
bnQtd29yay9tdWx0aXBhZ2UvdGhlLWlucHV0LWVsZW1lbnQuaHRtbCNpbnB1dC10eXBlLWF0dHIt
c3VtbWFyeVxuICovXG5cbnZhciBzdXBwb3J0ZWRJbnB1dFR5cGVzID0ge1xuICBjb2xvcjogdHJ1
ZSxcbiAgZGF0ZTogdHJ1ZSxcbiAgZGF0ZXRpbWU6IHRydWUsXG4gICdkYXRldGltZS1sb2NhbCc6
IHRydWUsXG4gIGVtYWlsOiB0cnVlLFxuICBtb250aDogdHJ1ZSxcbiAgbnVtYmVyOiB0cnVlLFxu
ICBwYXNzd29yZDogdHJ1ZSxcbiAgcmFuZ2U6IHRydWUsXG4gIHNlYXJjaDogdHJ1ZSxcbiAgdGVs
OiB0cnVlLFxuICB0ZXh0OiB0cnVlLFxuICB0aW1lOiB0cnVlLFxuICB1cmw6IHRydWUsXG4gIHdl
ZWs6IHRydWVcbn07XG5cbmZ1bmN0aW9uIGlzVGV4dElucHV0RWxlbWVudChlbGVtKSB7XG4gIHZh
ciBub2RlTmFtZSA9IGVsZW0gJiYgZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93
ZXJDYXNlKCk7XG5cbiAgaWYgKG5vZGVOYW1lID09PSAnaW5wdXQnKSB7XG4gICAgcmV0dXJuICEh
c3VwcG9ydGVkSW5wdXRUeXBlc1tlbGVtLnR5cGVdO1xuICB9XG5cbiAgaWYgKG5vZGVOYW1lID09
PSAndGV4dGFyZWEnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7
XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNUZXh0SW5wdXRFbGVtZW50O1xuXG4vKioqLyB9KSxc
bi8qIDY2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVx
dWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVz
ZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlz
IHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3Vu
ZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBz
b3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4g
YmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxu
ICovXG5cblxuXG52YXIgVmlld3BvcnRNZXRyaWNzID0ge1xuICBjdXJyZW50U2Nyb2xsTGVmdDog
MCxcblxuICBjdXJyZW50U2Nyb2xsVG9wOiAwLFxuXG4gIHJlZnJlc2hTY3JvbGxWYWx1ZXM6IGZ1
bmN0aW9uIChzY3JvbGxQb3NpdGlvbikge1xuICAgIFZpZXdwb3J0TWV0cmljcy5jdXJyZW50U2Ny
b2xsTGVmdCA9IHNjcm9sbFBvc2l0aW9uLng7XG4gICAgVmlld3BvcnRNZXRyaWNzLmN1cnJlbnRT
Y3JvbGxUb3AgPSBzY3JvbGxQb3NpdGlvbi55O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9
IFZpZXdwb3J0TWV0cmljcztcblxuLyoqKi8gfSksXG4vKiA2NyAqL1xuLyoqKi8gKGZ1bmN0aW9u
KG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3Rc
Ijtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1
bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwg
Z3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZp
bGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG5cblxudmFyIEV4ZWN1dGlvbkVu
dmlyb25tZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcbnZhciBlc2NhcGVUZXh0Q29udGVu
dEZvckJyb3dzZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3KTtcbnZhciBzZXRJbm5lckhUTUwg
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2KTtcblxuLyoqXG4gKiBTZXQgdGhlIHRleHRDb250ZW50
IHByb3BlcnR5IG9mIGEgbm9kZSwgZW5zdXJpbmcgdGhhdCB3aGl0ZXNwYWNlIGlzIHByZXNlcnZl
ZFxuICogZXZlbiBpbiBJRTguIGlubmVyVGV4dCBpcyBhIHBvb3Igc3Vic3RpdHV0ZSBmb3IgdGV4
dENvbnRlbnQgYW5kLCBhbW9uZyBtYW55XG4gKiBpc3N1ZXMsIGluc2VydHMgPGJyPiBpbnN0ZWFk
IG9mIHRoZSBsaXRlcmFsIG5ld2xpbmUgY2hhcnMuIGlubmVySFRNTCBiZWhhdmVzXG4gKiBhcyBp
dCBzaG91bGQuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKiBAcGFyYW0ge3N0
cmluZ30gdGV4dFxuICogQGludGVybmFsXG4gKi9cbnZhciBzZXRUZXh0Q29udGVudCA9IGZ1bmN0
aW9uIChub2RlLCB0ZXh0KSB7XG4gIGlmICh0ZXh0KSB7XG4gICAgdmFyIGZpcnN0Q2hpbGQgPSBu
b2RlLmZpcnN0Q2hpbGQ7XG5cbiAgICBpZiAoZmlyc3RDaGlsZCAmJiBmaXJzdENoaWxkID09PSBu
b2RlLmxhc3RDaGlsZCAmJiBmaXJzdENoaWxkLm5vZGVUeXBlID09PSAzKSB7XG4gICAgICBmaXJz
dENoaWxkLm5vZGVWYWx1ZSA9IHRleHQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG4gIG5v
ZGUudGV4dENvbnRlbnQgPSB0ZXh0O1xufTtcblxuaWYgKEV4ZWN1dGlvbkVudmlyb25tZW50LmNh
blVzZURPTSkge1xuICBpZiAoISgndGV4dENvbnRlbnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxl
bWVudCkpIHtcbiAgICBzZXRUZXh0Q29udGVudCA9IGZ1bmN0aW9uIChub2RlLCB0ZXh0KSB7XG4g
ICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gMykge1xuICAgICAgICBub2RlLm5vZGVWYWx1ZSA9
IHRleHQ7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHNldElubmVySFRNTChub2Rl
LCBlc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXIodGV4dCkpO1xuICAgIH07XG4gIH1cbn1cblxu
bW9kdWxlLmV4cG9ydHMgPSBzZXRUZXh0Q29udGVudDtcblxuLyoqKi8gfSksXG4vKiA2OCAqL1xu
LyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xu
XG5cInVzZSBzdHJpY3RcIjtcbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZh
Y2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNl
IGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRo
ZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0
cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3Vu
ZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxu
XG5cbi8qKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlIGlucHV0L3RleHRhcmVhIHRvIGZv
Y3VzXG4gKi9cblxuZnVuY3Rpb24gZm9jdXNOb2RlKG5vZGUpIHtcbiAgLy8gSUU4IGNhbiB0aHJv
dyBcIkNhbid0IG1vdmUgZm9jdXMgdG8gdGhlIGNvbnRyb2wgYmVjYXVzZSBpdCBpcyBpbnZpc2li
bGUsXG4gIC8vIG5vdCBlbmFibGVkLCBvciBvZiBhIHR5cGUgdGhhdCBkb2VzIG5vdCBhY2NlcHQg
dGhlIGZvY3VzLlwiIGZvciBhbGwga2luZHMgb2ZcbiAgLy8gcmVhc29ucyB0aGF0IGFyZSB0b28g
ZXhwZW5zaXZlIGFuZCBmcmFnaWxlIHRvIHRlc3QuXG4gIHRyeSB7XG4gICAgbm9kZS5mb2N1cygp
O1xuICB9IGNhdGNoIChlKSB7fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZvY3VzTm9kZTtcblxu
LyoqKi8gfSksXG4vKiA2OSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193
ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qKlxuICogQ29weXJpZ2h0
IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4g
KlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxp
Y2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5
IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCBy
aWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0
b3J5LlxuICpcbiAqL1xuXG5cblxuLyoqXG4gKiBDU1MgcHJvcGVydGllcyB3aGljaCBhY2NlcHQg
bnVtYmVycyBidXQgYXJlIG5vdCBpbiB1bml0cyBvZiBcInB4XCIuXG4gKi9cblxudmFyIGlzVW5p
dGxlc3NOdW1iZXIgPSB7XG4gIGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiB0cnVlLFxuICBib3Jk
ZXJJbWFnZU91dHNldDogdHJ1ZSxcbiAgYm9yZGVySW1hZ2VTbGljZTogdHJ1ZSxcbiAgYm9yZGVy
SW1hZ2VXaWR0aDogdHJ1ZSxcbiAgYm94RmxleDogdHJ1ZSxcbiAgYm94RmxleEdyb3VwOiB0cnVl
LFxuICBib3hPcmRpbmFsR3JvdXA6IHRydWUsXG4gIGNvbHVtbkNvdW50OiB0cnVlLFxuICBmbGV4
OiB0cnVlLFxuICBmbGV4R3JvdzogdHJ1ZSxcbiAgZmxleFBvc2l0aXZlOiB0cnVlLFxuICBmbGV4
U2hyaW5rOiB0cnVlLFxuICBmbGV4TmVnYXRpdmU6IHRydWUsXG4gIGZsZXhPcmRlcjogdHJ1ZSxc
biAgZ3JpZFJvdzogdHJ1ZSxcbiAgZ3JpZFJvd0VuZDogdHJ1ZSxcbiAgZ3JpZFJvd1NwYW46IHRy
dWUsXG4gIGdyaWRSb3dTdGFydDogdHJ1ZSxcbiAgZ3JpZENvbHVtbjogdHJ1ZSxcbiAgZ3JpZENv
bHVtbkVuZDogdHJ1ZSxcbiAgZ3JpZENvbHVtblNwYW46IHRydWUsXG4gIGdyaWRDb2x1bW5TdGFy
dDogdHJ1ZSxcbiAgZm9udFdlaWdodDogdHJ1ZSxcbiAgbGluZUNsYW1wOiB0cnVlLFxuICBsaW5l
SGVpZ2h0OiB0cnVlLFxuICBvcGFjaXR5OiB0cnVlLFxuICBvcmRlcjogdHJ1ZSxcbiAgb3JwaGFu
czogdHJ1ZSxcbiAgdGFiU2l6ZTogdHJ1ZSxcbiAgd2lkb3dzOiB0cnVlLFxuICB6SW5kZXg6IHRy
dWUsXG4gIHpvb206IHRydWUsXG5cbiAgLy8gU1ZHLXJlbGF0ZWQgcHJvcGVydGllc1xuICBmaWxs
T3BhY2l0eTogdHJ1ZSxcbiAgZmxvb2RPcGFjaXR5OiB0cnVlLFxuICBzdG9wT3BhY2l0eTogdHJ1
ZSxcbiAgc3Ryb2tlRGFzaGFycmF5OiB0cnVlLFxuICBzdHJva2VEYXNob2Zmc2V0OiB0cnVlLFxu
ICBzdHJva2VNaXRlcmxpbWl0OiB0cnVlLFxuICBzdHJva2VPcGFjaXR5OiB0cnVlLFxuICBzdHJv
a2VXaWR0aDogdHJ1ZVxufTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4IHZlbmRv
ci1zcGVjaWZpYyBwcmVmaXgsIGVnOiBXZWJraXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgc3R5
bGUgbmFtZSwgZWc6IHRyYW5zaXRpb25EdXJhdGlvblxuICogQHJldHVybiB7c3RyaW5nfSBzdHls
ZSBuYW1lIHByZWZpeGVkIHdpdGggYHByZWZpeGAsIHByb3Blcmx5IGNhbWVsQ2FzZWQsIGVnOlxu
ICogV2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uXG4gKi9cbmZ1bmN0aW9uIHByZWZpeEtleShwcmVm
aXgsIGtleSkge1xuICByZXR1cm4gcHJlZml4ICsga2V5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgp
ICsga2V5LnN1YnN0cmluZygxKTtcbn1cblxuLyoqXG4gKiBTdXBwb3J0IHN0eWxlIG5hbWVzIHRo
YXQgbWF5IGNvbWUgcGFzc2VkIGluIHByZWZpeGVkIGJ5IGFkZGluZyBwZXJtdXRhdGlvbnNcbiAq
IG9mIHZlbmRvciBwcmVmaXhlcy5cbiAqL1xudmFyIHByZWZpeGVzID0gWydXZWJraXQnLCAnbXMn
LCAnTW96JywgJ08nXTtcblxuLy8gVXNpbmcgT2JqZWN0LmtleXMgaGVyZSwgb3IgZWxzZSB0aGUg
dmFuaWxsYSBmb3ItaW4gbG9vcCBtYWtlcyBJRTggZ28gaW50byBhblxuLy8gaW5maW5pdGUgbG9v
cCwgYmVjYXVzZSBpdCBpdGVyYXRlcyBvdmVyIHRoZSBuZXdseSBhZGRlZCBwcm9wcyB0b28uXG5P
YmplY3Qua2V5cyhpc1VuaXRsZXNzTnVtYmVyKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4g
IHByZWZpeGVzLmZvckVhY2goZnVuY3Rpb24gKHByZWZpeCkge1xuICAgIGlzVW5pdGxlc3NOdW1i
ZXJbcHJlZml4S2V5KHByZWZpeCwgcHJvcCldID0gaXNVbml0bGVzc051bWJlcltwcm9wXTtcbiAg
fSk7XG59KTtcblxuLyoqXG4gKiBNb3N0IHN0eWxlIHByb3BlcnRpZXMgY2FuIGJlIHVuc2V0IGJ5
IGRvaW5nIC5zdHlsZVtwcm9wXSA9ICcnIGJ1dCBJRThcbiAqIGRvZXNuJ3QgbGlrZSBkb2luZyB0
aGF0IHdpdGggc2hvcnRoYW5kIHByb3BlcnRpZXMgc28gZm9yIHRoZSBwcm9wZXJ0aWVzIHRoYXRc
biAqIElFOCBicmVha3Mgb24sIHdoaWNoIGFyZSBsaXN0ZWQgaGVyZSwgd2UgaW5zdGVhZCB1bnNl
dCBlYWNoIG9mIHRoZVxuICogaW5kaXZpZHVhbCBwcm9wZXJ0aWVzLiBTZWUgaHR0cDovL2J1Z3Mu
anF1ZXJ5LmNvbS90aWNrZXQvMTIzODUuXG4gKiBUaGUgNC12YWx1ZSAnY2xvY2snIHByb3BlcnRp
ZXMgbGlrZSBtYXJnaW4sIHBhZGRpbmcsIGJvcmRlci13aWR0aCBzZWVtIHRvXG4gKiBiZWhhdmUg
d2l0aG91dCBhbnkgcHJvYmxlbXMuIEN1cmlvdXNseSwgbGlzdC1zdHlsZSB3b3JrcyB0b28gd2l0
aG91dCBhbnlcbiAqIHNwZWNpYWwgcHJvZGRpbmcuXG4gKi9cbnZhciBzaG9ydGhhbmRQcm9wZXJ0
eUV4cGFuc2lvbnMgPSB7XG4gIGJhY2tncm91bmQ6IHtcbiAgICBiYWNrZ3JvdW5kQXR0YWNobWVu
dDogdHJ1ZSxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRydWUsXG4gICAgYmFja2dyb3VuZEltYWdl
OiB0cnVlLFxuICAgIGJhY2tncm91bmRQb3NpdGlvblg6IHRydWUsXG4gICAgYmFja2dyb3VuZFBv
c2l0aW9uWTogdHJ1ZSxcbiAgICBiYWNrZ3JvdW5kUmVwZWF0OiB0cnVlXG4gIH0sXG4gIGJhY2tn
cm91bmRQb3NpdGlvbjoge1xuICAgIGJhY2tncm91bmRQb3NpdGlvblg6IHRydWUsXG4gICAgYmFj
a2dyb3VuZFBvc2l0aW9uWTogdHJ1ZVxuICB9LFxuICBib3JkZXI6IHtcbiAgICBib3JkZXJXaWR0
aDogdHJ1ZSxcbiAgICBib3JkZXJTdHlsZTogdHJ1ZSxcbiAgICBib3JkZXJDb2xvcjogdHJ1ZVxu
ICB9LFxuICBib3JkZXJCb3R0b206IHtcbiAgICBib3JkZXJCb3R0b21XaWR0aDogdHJ1ZSxcbiAg
ICBib3JkZXJCb3R0b21TdHlsZTogdHJ1ZSxcbiAgICBib3JkZXJCb3R0b21Db2xvcjogdHJ1ZVxu
ICB9LFxuICBib3JkZXJMZWZ0OiB7XG4gICAgYm9yZGVyTGVmdFdpZHRoOiB0cnVlLFxuICAgIGJv
cmRlckxlZnRTdHlsZTogdHJ1ZSxcbiAgICBib3JkZXJMZWZ0Q29sb3I6IHRydWVcbiAgfSxcbiAg
Ym9yZGVyUmlnaHQ6IHtcbiAgICBib3JkZXJSaWdodFdpZHRoOiB0cnVlLFxuICAgIGJvcmRlclJp
Z2h0U3R5bGU6IHRydWUsXG4gICAgYm9yZGVyUmlnaHRDb2xvcjogdHJ1ZVxuICB9LFxuICBib3Jk
ZXJUb3A6IHtcbiAgICBib3JkZXJUb3BXaWR0aDogdHJ1ZSxcbiAgICBib3JkZXJUb3BTdHlsZTog
dHJ1ZSxcbiAgICBib3JkZXJUb3BDb2xvcjogdHJ1ZVxuICB9LFxuICBmb250OiB7XG4gICAgZm9u
dFN0eWxlOiB0cnVlLFxuICAgIGZvbnRWYXJpYW50OiB0cnVlLFxuICAgIGZvbnRXZWlnaHQ6IHRy
dWUsXG4gICAgZm9udFNpemU6IHRydWUsXG4gICAgbGluZUhlaWdodDogdHJ1ZSxcbiAgICBmb250
RmFtaWx5OiB0cnVlXG4gIH0sXG4gIG91dGxpbmU6IHtcbiAgICBvdXRsaW5lV2lkdGg6IHRydWUs
XG4gICAgb3V0bGluZVN0eWxlOiB0cnVlLFxuICAgIG91dGxpbmVDb2xvcjogdHJ1ZVxuICB9XG59
O1xuXG52YXIgQ1NTUHJvcGVydHkgPSB7XG4gIGlzVW5pdGxlc3NOdW1iZXI6IGlzVW5pdGxlc3NO
dW1iZXIsXG4gIHNob3J0aGFuZFByb3BlcnR5RXhwYW5zaW9uczogc2hvcnRoYW5kUHJvcGVydHlF
eHBhbnNpb25zXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENTU1Byb3BlcnR5O1xuXG4vKioqLyB9
KSxcbi8qIDcwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tf
cmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1w
cmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBU
aGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBm
b3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhp
cyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBj
YW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4g
KlxuICovXG5cblxuXG52YXIgRE9NUHJvcGVydHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtc
bnZhciBSZWFjdERPTUNvbXBvbmVudFRyZWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xudmFy
IFJlYWN0SW5zdHJ1bWVudGF0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcblxudmFyIHF1
b3RlQXR0cmlidXRlVmFsdWVGb3JCcm93c2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDcpO1xu
dmFyIHdhcm5pbmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuXG52YXIgVkFMSURfQVRUUklC
VVRFX05BTUVfUkVHRVggPSBuZXcgUmVnRXhwKCdeWycgKyBET01Qcm9wZXJ0eS5BVFRSSUJVVEVf
TkFNRV9TVEFSVF9DSEFSICsgJ11bJyArIERPTVByb3BlcnR5LkFUVFJJQlVURV9OQU1FX0NIQVIg
KyAnXSokJyk7XG52YXIgaWxsZWdhbEF0dHJpYnV0ZU5hbWVDYWNoZSA9IHt9O1xudmFyIHZhbGlk
YXRlZEF0dHJpYnV0ZU5hbWVDYWNoZSA9IHt9O1xuXG5mdW5jdGlvbiBpc0F0dHJpYnV0ZU5hbWVT
YWZlKGF0dHJpYnV0ZU5hbWUpIHtcbiAgaWYgKHZhbGlkYXRlZEF0dHJpYnV0ZU5hbWVDYWNoZS5o
YXNPd25Qcm9wZXJ0eShhdHRyaWJ1dGVOYW1lKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4g
IGlmIChpbGxlZ2FsQXR0cmlidXRlTmFtZUNhY2hlLmhhc093blByb3BlcnR5KGF0dHJpYnV0ZU5h
bWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChWQUxJRF9BVFRSSUJVVEVfTkFN
RV9SRUdFWC50ZXN0KGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgdmFsaWRhdGVkQXR0cmlidXRlTmFt
ZUNhY2hlW2F0dHJpYnV0ZU5hbWVdID0gdHJ1ZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBp
bGxlZ2FsQXR0cmlidXRlTmFtZUNhY2hlW2F0dHJpYnV0ZU5hbWVdID0gdHJ1ZTtcbiAgIGZhbHNl
ID8gd2FybmluZyhmYWxzZSwgJ0ludmFsaWQgYXR0cmlidXRlIG5hbWU6IGAlc2AnLCBhdHRyaWJ1
dGVOYW1lKSA6IHZvaWQgMDtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBzaG91bGRJ
Z25vcmVWYWx1ZShwcm9wZXJ0eUluZm8sIHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxs
IHx8IHByb3BlcnR5SW5mby5oYXNCb29sZWFuVmFsdWUgJiYgIXZhbHVlIHx8IHByb3BlcnR5SW5m
by5oYXNOdW1lcmljVmFsdWUgJiYgaXNOYU4odmFsdWUpIHx8IHByb3BlcnR5SW5mby5oYXNQb3Np
dGl2ZU51bWVyaWNWYWx1ZSAmJiB2YWx1ZSA8IDEgfHwgcHJvcGVydHlJbmZvLmhhc092ZXJsb2Fk
ZWRCb29sZWFuVmFsdWUgJiYgdmFsdWUgPT09IGZhbHNlO1xufVxuXG4vKipcbiAqIE9wZXJhdGlv
bnMgZm9yIGRlYWxpbmcgd2l0aCBET00gcHJvcGVydGllcy5cbiAqL1xudmFyIERPTVByb3BlcnR5
T3BlcmF0aW9ucyA9IHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgbWFya3VwIGZvciB0aGUgSUQgcHJv
cGVydHkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBVbmVzY2FwZWQgSUQuXG4gICAq
IEByZXR1cm4ge3N0cmluZ30gTWFya3VwIHN0cmluZy5cbiAgICovXG4gIGNyZWF0ZU1hcmt1cEZv
cklEOiBmdW5jdGlvbiAoaWQpIHtcbiAgICByZXR1cm4gRE9NUHJvcGVydHkuSURfQVRUUklCVVRF
X05BTUUgKyAnPScgKyBxdW90ZUF0dHJpYnV0ZVZhbHVlRm9yQnJvd3NlcihpZCk7XG4gIH0sXG5c
biAgc2V0QXR0cmlidXRlRm9ySUQ6IGZ1bmN0aW9uIChub2RlLCBpZCkge1xuICAgIG5vZGUuc2V0
QXR0cmlidXRlKERPTVByb3BlcnR5LklEX0FUVFJJQlVURV9OQU1FLCBpZCk7XG4gIH0sXG5cbiAg
Y3JlYXRlTWFya3VwRm9yUm9vdDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBET01Qcm9wZXJ0
eS5ST09UX0FUVFJJQlVURV9OQU1FICsgJz1cIlwiJztcbiAgfSxcblxuICBzZXRBdHRyaWJ1dGVG
b3JSb290OiBmdW5jdGlvbiAobm9kZSkge1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKERPTVByb3Bl
cnR5LlJPT1RfQVRUUklCVVRFX05BTUUsICcnKTtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYXRl
cyBtYXJrdXAgZm9yIGEgcHJvcGVydHkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1l
XG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHJldHVybiB7P3N0cmluZ30gTWFya3VwIHN0
cmluZywgb3IgbnVsbCBpZiB0aGUgcHJvcGVydHkgd2FzIGludmFsaWQuXG4gICAqL1xuICBjcmVh
dGVNYXJrdXBGb3JQcm9wZXJ0eTogZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gICAgdmFyIHBy
b3BlcnR5SW5mbyA9IERPTVByb3BlcnR5LnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkobmFtZSkg
PyBET01Qcm9wZXJ0eS5wcm9wZXJ0aWVzW25hbWVdIDogbnVsbDtcbiAgICBpZiAocHJvcGVydHlJ
bmZvKSB7XG4gICAgICBpZiAoc2hvdWxkSWdub3JlVmFsdWUocHJvcGVydHlJbmZvLCB2YWx1ZSkp
IHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgICAgdmFyIGF0dHJpYnV0ZU5hbWUg
PSBwcm9wZXJ0eUluZm8uYXR0cmlidXRlTmFtZTtcbiAgICAgIGlmIChwcm9wZXJ0eUluZm8uaGFz
Qm9vbGVhblZhbHVlIHx8IHByb3BlcnR5SW5mby5oYXNPdmVybG9hZGVkQm9vbGVhblZhbHVlICYm
IHZhbHVlID09PSB0cnVlKSB7XG4gICAgICAgIHJldHVybiBhdHRyaWJ1dGVOYW1lICsgJz1cIlwi
JztcbiAgICAgIH1cbiAgICAgIHJldHVybiBhdHRyaWJ1dGVOYW1lICsgJz0nICsgcXVvdGVBdHRy
aWJ1dGVWYWx1ZUZvckJyb3dzZXIodmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoRE9NUHJvcGVydHku
aXNDdXN0b21BdHRyaWJ1dGUobmFtZSkpIHtcbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4g
ICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICAgIHJldHVybiBuYW1lICsgJz0nICsgcXVv
dGVBdHRyaWJ1dGVWYWx1ZUZvckJyb3dzZXIodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gbnVs
bDtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYXRlcyBtYXJrdXAgZm9yIGEgY3VzdG9tIHByb3Bl
cnR5LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0geyp9IHZh
bHVlXG4gICAqIEByZXR1cm4ge3N0cmluZ30gTWFya3VwIHN0cmluZywgb3IgZW1wdHkgc3RyaW5n
IGlmIHRoZSBwcm9wZXJ0eSB3YXMgaW52YWxpZC5cbiAgICovXG4gIGNyZWF0ZU1hcmt1cEZvckN1
c3RvbUF0dHJpYnV0ZTogZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKCFpc0F0dHJp
YnV0ZU5hbWVTYWZlKG5hbWUpIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJztc
biAgICB9XG4gICAgcmV0dXJuIG5hbWUgKyAnPScgKyBxdW90ZUF0dHJpYnV0ZVZhbHVlRm9yQnJv
d3Nlcih2YWx1ZSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHZhbHVlIGZvciBhIHBy
b3BlcnR5IG9uIGEgbm9kZS5cbiAgICpcbiAgICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4g
ICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICovXG4g
IHNldFZhbHVlRm9yUHJvcGVydHk6IGZ1bmN0aW9uIChub2RlLCBuYW1lLCB2YWx1ZSkge1xuICAg
IHZhciBwcm9wZXJ0eUluZm8gPSBET01Qcm9wZXJ0eS5wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5
KG5hbWUpID8gRE9NUHJvcGVydHkucHJvcGVydGllc1tuYW1lXSA6IG51bGw7XG4gICAgaWYgKHBy
b3BlcnR5SW5mbykge1xuICAgICAgdmFyIG11dGF0aW9uTWV0aG9kID0gcHJvcGVydHlJbmZvLm11
dGF0aW9uTWV0aG9kO1xuICAgICAgaWYgKG11dGF0aW9uTWV0aG9kKSB7XG4gICAgICAgIG11dGF0
aW9uTWV0aG9kKG5vZGUsIHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoc2hvdWxkSWdub3JlVmFs
dWUocHJvcGVydHlJbmZvLCB2YWx1ZSkpIHtcbiAgICAgICAgdGhpcy5kZWxldGVWYWx1ZUZvclBy
b3BlcnR5KG5vZGUsIG5hbWUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2UgaWYgKHBy
b3BlcnR5SW5mby5tdXN0VXNlUHJvcGVydHkpIHtcbiAgICAgICAgLy8gQ29udHJhcnkgdG8gYHNl
dEF0dHJpYnV0ZWAsIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBwcm9wZXJseVxuICAgICAgICAvLyBg
dG9TdHJpbmdgZWQgYnkgSUU4LzkuXG4gICAgICAgIG5vZGVbcHJvcGVydHlJbmZvLnByb3BlcnR5
TmFtZV0gPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBhdHRyaWJ1dGVOYW1l
ID0gcHJvcGVydHlJbmZvLmF0dHJpYnV0ZU5hbWU7XG4gICAgICAgIHZhciBuYW1lc3BhY2UgPSBw
cm9wZXJ0eUluZm8uYXR0cmlidXRlTmFtZXNwYWNlO1xuICAgICAgICAvLyBgc2V0QXR0cmlidXRl
YCB3aXRoIG9iamVjdHMgYmVjb21lcyBvbmx5IGBbb2JqZWN0XWAgaW4gSUU4LzksXG4gICAgICAg
IC8vICgnJyArIHZhbHVlKSBtYWtlcyBpdCBvdXRwdXQgdGhlIGNvcnJlY3QgdG9TdHJpbmcoKS12
YWx1ZS5cbiAgICAgICAgaWYgKG5hbWVzcGFjZSkge1xuICAgICAgICAgIG5vZGUuc2V0QXR0cmli
dXRlTlMobmFtZXNwYWNlLCBhdHRyaWJ1dGVOYW1lLCAnJyArIHZhbHVlKTtcbiAgICAgICAgfSBl
bHNlIGlmIChwcm9wZXJ0eUluZm8uaGFzQm9vbGVhblZhbHVlIHx8IHByb3BlcnR5SW5mby5oYXNP
dmVybG9hZGVkQm9vbGVhblZhbHVlICYmIHZhbHVlID09PSB0cnVlKSB7XG4gICAgICAgICAgbm9k
ZS5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwgJycpO1xuICAgICAgICB9IGVsc2Uge1xuICAg
ICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUsICcnICsgdmFsdWUpO1xuICAg
ICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChET01Qcm9wZXJ0eS5pc0N1c3RvbUF0dHJp
YnV0ZShuYW1lKSkge1xuICAgICAgRE9NUHJvcGVydHlPcGVyYXRpb25zLnNldFZhbHVlRm9yQXR0
cmlidXRlKG5vZGUsIG5hbWUsIHZhbHVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBp
ZiAoZmFsc2UpIHtcbiAgICAgIHZhciBwYXlsb2FkID0ge307XG4gICAgICBwYXlsb2FkW25hbWVd
ID0gdmFsdWU7XG4gICAgICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25Ib3N0T3Bl
cmF0aW9uKHtcbiAgICAgICAgaW5zdGFuY2VJRDogUmVhY3RET01Db21wb25lbnRUcmVlLmdldElu
c3RhbmNlRnJvbU5vZGUobm9kZSkuX2RlYnVnSUQsXG4gICAgICAgIHR5cGU6ICd1cGRhdGUgYXR0
cmlidXRlJyxcbiAgICAgICAgcGF5bG9hZDogcGF5bG9hZFxuICAgICAgfSk7XG4gICAgfVxuICB9
LFxuXG4gIHNldFZhbHVlRm9yQXR0cmlidXRlOiBmdW5jdGlvbiAobm9kZSwgbmFtZSwgdmFsdWUp
IHtcbiAgICBpZiAoIWlzQXR0cmlidXRlTmFtZVNhZmUobmFtZSkpIHtcbiAgICAgIHJldHVybjtc
biAgICB9XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgIG5vZGUucmVtb3ZlQXR0cmli
dXRlKG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShuYW1lLCAn
JyArIHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgIHZhciBwYXlsb2Fk
ID0ge307XG4gICAgICBwYXlsb2FkW25hbWVdID0gdmFsdWU7XG4gICAgICBSZWFjdEluc3RydW1l
bnRhdGlvbi5kZWJ1Z1Rvb2wub25Ib3N0T3BlcmF0aW9uKHtcbiAgICAgICAgaW5zdGFuY2VJRDog
UmVhY3RET01Db21wb25lbnRUcmVlLmdldEluc3RhbmNlRnJvbU5vZGUobm9kZSkuX2RlYnVnSUQs
XG4gICAgICAgIHR5cGU6ICd1cGRhdGUgYXR0cmlidXRlJyxcbiAgICAgICAgcGF5bG9hZDogcGF5
bG9hZFxuICAgICAgfSk7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBEZWxldGVzIGFuIGF0
dHJpYnV0ZXMgZnJvbSBhIG5vZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9k
ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKi9cbiAgZGVsZXRlVmFsdWVGb3JBdHRy
aWJ1dGU6IGZ1bmN0aW9uIChub2RlLCBuYW1lKSB7XG4gICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUo
bmFtZSk7XG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1
Z1Rvb2wub25Ib3N0T3BlcmF0aW9uKHtcbiAgICAgICAgaW5zdGFuY2VJRDogUmVhY3RET01Db21w
b25lbnRUcmVlLmdldEluc3RhbmNlRnJvbU5vZGUobm9kZSkuX2RlYnVnSUQsXG4gICAgICAgIHR5
cGU6ICdyZW1vdmUgYXR0cmlidXRlJyxcbiAgICAgICAgcGF5bG9hZDogbmFtZVxuICAgICAgfSk7
XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSB2YWx1ZSBmb3IgYSBwcm9w
ZXJ0eSBvbiBhIG5vZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICAg
KiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKi9cbiAgZGVsZXRlVmFsdWVGb3JQcm9wZXJ0eTog
ZnVuY3Rpb24gKG5vZGUsIG5hbWUpIHtcbiAgICB2YXIgcHJvcGVydHlJbmZvID0gRE9NUHJvcGVy
dHkucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSA/IERPTVByb3BlcnR5LnByb3BlcnRp
ZXNbbmFtZV0gOiBudWxsO1xuICAgIGlmIChwcm9wZXJ0eUluZm8pIHtcbiAgICAgIHZhciBtdXRh
dGlvbk1ldGhvZCA9IHByb3BlcnR5SW5mby5tdXRhdGlvbk1ldGhvZDtcbiAgICAgIGlmIChtdXRh
dGlvbk1ldGhvZCkge1xuICAgICAgICBtdXRhdGlvbk1ldGhvZChub2RlLCB1bmRlZmluZWQpO1xu
ICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eUluZm8ubXVzdFVzZVByb3BlcnR5KSB7XG4gICAgICAg
IHZhciBwcm9wTmFtZSA9IHByb3BlcnR5SW5mby5wcm9wZXJ0eU5hbWU7XG4gICAgICAgIGlmIChw
cm9wZXJ0eUluZm8uaGFzQm9vbGVhblZhbHVlKSB7XG4gICAgICAgICAgbm9kZVtwcm9wTmFtZV0g
PSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBub2RlW3Byb3BOYW1lXSA9ICcn
O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0
ZShwcm9wZXJ0eUluZm8uYXR0cmlidXRlTmFtZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChE
T01Qcm9wZXJ0eS5pc0N1c3RvbUF0dHJpYnV0ZShuYW1lKSkge1xuICAgICAgbm9kZS5yZW1vdmVB
dHRyaWJ1dGUobmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICBSZWFjdElu
c3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25Ib3N0T3BlcmF0aW9uKHtcbiAgICAgICAgaW5zdGFu
Y2VJRDogUmVhY3RET01Db21wb25lbnRUcmVlLmdldEluc3RhbmNlRnJvbU5vZGUobm9kZSkuX2Rl
YnVnSUQsXG4gICAgICAgIHR5cGU6ICdyZW1vdmUgYXR0cmlidXRlJyxcbiAgICAgICAgcGF5bG9h
ZDogbmFtZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IERP
TVByb3BlcnR5T3BlcmF0aW9ucztcblxuLyoqKi8gfSksXG4vKiA3MSAqL1xuLyoqKi8gKGZ1bmN0
aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJp
Y3RcIjtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNl
ZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZp
bGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9u
YWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRT
IGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG5cblxudmFyIF9hc3NpZ24g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuXG52YXIgTGlua2VkVmFsdWVVdGlscyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oNDApO1xudmFyIFJlYWN0RE9NQ29tcG9uZW50VHJlZSA9IF9fd2VicGFj
a19yZXF1aXJlX18oNCk7XG52YXIgUmVhY3RVcGRhdGVzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4
KTtcblxudmFyIHdhcm5pbmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuXG52YXIgZGlkV2Fy
blZhbHVlTGluayA9IGZhbHNlO1xudmFyIGRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSA9IGZhbHNl
O1xuXG5mdW5jdGlvbiB1cGRhdGVPcHRpb25zSWZQZW5kaW5nVXBkYXRlQW5kTW91bnRlZCgpIHtc
biAgaWYgKHRoaXMuX3Jvb3ROb2RlSUQgJiYgdGhpcy5fd3JhcHBlclN0YXRlLnBlbmRpbmdVcGRh
dGUpIHtcbiAgICB0aGlzLl93cmFwcGVyU3RhdGUucGVuZGluZ1VwZGF0ZSA9IGZhbHNlO1xuXG4g
ICAgdmFyIHByb3BzID0gdGhpcy5fY3VycmVudEVsZW1lbnQucHJvcHM7XG4gICAgdmFyIHZhbHVl
ID0gTGlua2VkVmFsdWVVdGlscy5nZXRWYWx1ZShwcm9wcyk7XG5cbiAgICBpZiAodmFsdWUgIT0g
bnVsbCkge1xuICAgICAgdXBkYXRlT3B0aW9ucyh0aGlzLCBCb29sZWFuKHByb3BzLm11bHRpcGxl
KSwgdmFsdWUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXREZWNsYXJhdGlvbkVycm9y
QWRkZW5kdW0ob3duZXIpIHtcbiAgaWYgKG93bmVyKSB7XG4gICAgdmFyIG5hbWUgPSBvd25lci5n
ZXROYW1lKCk7XG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIHJldHVybiAnIENoZWNrIHRoZSByZW5k
ZXIgbWV0aG9kIG9mIGAnICsgbmFtZSArICdgLic7XG4gICAgfVxuICB9XG4gIHJldHVybiAnJztc
bn1cblxudmFyIHZhbHVlUHJvcE5hbWVzID0gWyd2YWx1ZScsICdkZWZhdWx0VmFsdWUnXTtcblxu
LyoqXG4gKiBWYWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBgdmFsdWVgIGFuZCBgZGVmYXVsdFZhbHVl
YC5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNoZWNrU2VsZWN0UHJvcFR5cGVzKGluc3Qs
IHByb3BzKSB7XG4gIHZhciBvd25lciA9IGluc3QuX2N1cnJlbnRFbGVtZW50Ll9vd25lcjtcbiAg
TGlua2VkVmFsdWVVdGlscy5jaGVja1Byb3BUeXBlcygnc2VsZWN0JywgcHJvcHMsIG93bmVyKTtc
blxuICBpZiAocHJvcHMudmFsdWVMaW5rICE9PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5WYWx1ZUxp
bmspIHtcbiAgICAgZmFsc2UgPyB3YXJuaW5nKGZhbHNlLCAnYHZhbHVlTGlua2AgcHJvcCBvbiBg
c2VsZWN0YCBpcyBkZXByZWNhdGVkOyBzZXQgYHZhbHVlYCBhbmQgYG9uQ2hhbmdlYCBpbnN0ZWFk
LicpIDogdm9pZCAwO1xuICAgIGRpZFdhcm5WYWx1ZUxpbmsgPSB0cnVlO1xuICB9XG5cbiAgZm9y
ICh2YXIgaSA9IDA7IGkgPCB2YWx1ZVByb3BOYW1lcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBw
cm9wTmFtZSA9IHZhbHVlUHJvcE5hbWVzW2ldO1xuICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT0g
bnVsbCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHZhciBpc0FycmF5ID0gQXJyYXku
aXNBcnJheShwcm9wc1twcm9wTmFtZV0pO1xuICAgIGlmIChwcm9wcy5tdWx0aXBsZSAmJiAhaXNB
cnJheSkge1xuICAgICAgIGZhbHNlID8gd2FybmluZyhmYWxzZSwgJ1RoZSBgJXNgIHByb3Agc3Vw
cGxpZWQgdG8gPHNlbGVjdD4gbXVzdCBiZSBhbiBhcnJheSBpZiAnICsgJ2BtdWx0aXBsZWAgaXMg
dHJ1ZS4lcycsIHByb3BOYW1lLCBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0ob3duZXIpKSA6
IHZvaWQgMDtcbiAgICB9IGVsc2UgaWYgKCFwcm9wcy5tdWx0aXBsZSAmJiBpc0FycmF5KSB7XG4g
ICAgICAgZmFsc2UgPyB3YXJuaW5nKGZhbHNlLCAnVGhlIGAlc2AgcHJvcCBzdXBwbGllZCB0byA8
c2VsZWN0PiBtdXN0IGJlIGEgc2NhbGFyICcgKyAndmFsdWUgaWYgYG11bHRpcGxlYCBpcyBmYWxz
ZS4lcycsIHByb3BOYW1lLCBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0ob3duZXIpKSA6IHZv
aWQgMDtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge1JlYWN0RE9NQ29tcG9uZW50
fSBpbnN0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IG11bHRpcGxlXG4gKiBAcGFyYW0geyp9IHByb3BW
YWx1ZSBBIHN0cmluZ2FibGUgKHdpdGggYG11bHRpcGxlYCwgYSBsaXN0IG9mIHN0cmluZ2FibGVz
KS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZU9wdGlvbnMoaW5zdCwgbXVsdGlw
bGUsIHByb3BWYWx1ZSkge1xuICB2YXIgc2VsZWN0ZWRWYWx1ZSwgaTtcbiAgdmFyIG9wdGlvbnMg
PSBSZWFjdERPTUNvbXBvbmVudFRyZWUuZ2V0Tm9kZUZyb21JbnN0YW5jZShpbnN0KS5vcHRpb25z
O1xuXG4gIGlmIChtdWx0aXBsZSkge1xuICAgIHNlbGVjdGVkVmFsdWUgPSB7fTtcbiAgICBmb3Ig
KGkgPSAwOyBpIDwgcHJvcFZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzZWxlY3RlZFZhbHVl
WycnICsgcHJvcFZhbHVlW2ldXSA9IHRydWU7XG4gICAgfVxuICAgIGZvciAoaSA9IDA7IGkgPCBv
cHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc2VsZWN0ZWQgPSBzZWxlY3RlZFZhbHVl
Lmhhc093blByb3BlcnR5KG9wdGlvbnNbaV0udmFsdWUpO1xuICAgICAgaWYgKG9wdGlvbnNbaV0u
c2VsZWN0ZWQgIT09IHNlbGVjdGVkKSB7XG4gICAgICAgIG9wdGlvbnNbaV0uc2VsZWN0ZWQgPSBz
ZWxlY3RlZDtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gRG8gbm90IHNldCBg
c2VsZWN0LnZhbHVlYCBhcyBleGFjdCBiZWhhdmlvciBpc24ndCBjb25zaXN0ZW50IGFjcm9zcyBh
bGxcbiAgICAvLyBicm93c2VycyBmb3IgYWxsIGNhc2VzLlxuICAgIHNlbGVjdGVkVmFsdWUgPSAn
JyArIHByb3BWYWx1ZTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykg
e1xuICAgICAgaWYgKG9wdGlvbnNbaV0udmFsdWUgPT09IHNlbGVjdGVkVmFsdWUpIHtcbiAgICAg
ICAgb3B0aW9uc1tpXS5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1c
biAgICB9XG4gICAgaWYgKG9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICBvcHRpb25zWzBdLnNlbGVj
dGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBJbXBsZW1lbnRzIGEgPHNlbGVj
dD4gaG9zdCBjb21wb25lbnQgdGhhdCBhbGxvd3Mgb3B0aW9uYWxseSBzZXR0aW5nIHRoZVxuICog
cHJvcHMgYHZhbHVlYCBhbmQgYGRlZmF1bHRWYWx1ZWAuIElmIGBtdWx0aXBsZWAgaXMgZmFsc2Us
IHRoZSBwcm9wIG11c3QgYmUgYVxuICogc3RyaW5nYWJsZS4gSWYgYG11bHRpcGxlYCBpcyB0cnVl
LCB0aGUgcHJvcCBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ2FibGVzLlxuICpcbiAqIElmIGB2
YWx1ZWAgaXMgbm90IHN1cHBsaWVkIChvciBudWxsL3VuZGVmaW5lZCksIHVzZXIgYWN0aW9ucyB0
aGF0IGNoYW5nZSB0aGVcbiAqIHNlbGVjdGVkIG9wdGlvbiB3aWxsIHRyaWdnZXIgdXBkYXRlcyB0
byB0aGUgcmVuZGVyZWQgb3B0aW9ucy5cbiAqXG4gKiBJZiBpdCBpcyBzdXBwbGllZCAoYW5kIG5v
dCBudWxsL3VuZGVmaW5lZCksIHRoZSByZW5kZXJlZCBvcHRpb25zIHdpbGwgbm90XG4gKiB1cGRh
dGUgaW4gcmVzcG9uc2UgdG8gdXNlciBhY3Rpb25zLiBJbnN0ZWFkLCB0aGUgYHZhbHVlYCBwcm9w
IG11c3QgY2hhbmdlIGluXG4gKiBvcmRlciBmb3IgdGhlIHJlbmRlcmVkIG9wdGlvbnMgdG8gdXBk
YXRlLlxuICpcbiAqIElmIGBkZWZhdWx0VmFsdWVgIGlzIHByb3ZpZGVkLCBhbnkgb3B0aW9ucyB3
aXRoIHRoZSBzdXBwbGllZCB2YWx1ZXMgd2lsbCBiZVxuICogc2VsZWN0ZWQuXG4gKi9cbnZhciBS
ZWFjdERPTVNlbGVjdCA9IHtcbiAgZ2V0SG9zdFByb3BzOiBmdW5jdGlvbiAoaW5zdCwgcHJvcHMp
IHtcbiAgICByZXR1cm4gX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgIG9uQ2hhbmdlOiBpbnN0
Ll93cmFwcGVyU3RhdGUub25DaGFuZ2UsXG4gICAgICB2YWx1ZTogdW5kZWZpbmVkXG4gICAgfSk7
XG4gIH0sXG5cbiAgbW91bnRXcmFwcGVyOiBmdW5jdGlvbiAoaW5zdCwgcHJvcHMpIHtcbiAgICBp
ZiAoZmFsc2UpIHtcbiAgICAgIGNoZWNrU2VsZWN0UHJvcFR5cGVzKGluc3QsIHByb3BzKTtcbiAg
ICB9XG5cbiAgICB2YXIgdmFsdWUgPSBMaW5rZWRWYWx1ZVV0aWxzLmdldFZhbHVlKHByb3BzKTtc
biAgICBpbnN0Ll93cmFwcGVyU3RhdGUgPSB7XG4gICAgICBwZW5kaW5nVXBkYXRlOiBmYWxzZSxc
biAgICAgIGluaXRpYWxWYWx1ZTogdmFsdWUgIT0gbnVsbCA/IHZhbHVlIDogcHJvcHMuZGVmYXVs
dFZhbHVlLFxuICAgICAgbGlzdGVuZXJzOiBudWxsLFxuICAgICAgb25DaGFuZ2U6IF9oYW5kbGVD
aGFuZ2UuYmluZChpbnN0KSxcbiAgICAgIHdhc011bHRpcGxlOiBCb29sZWFuKHByb3BzLm11bHRp
cGxlKVxuICAgIH07XG5cbiAgICBpZiAocHJvcHMudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBwcm9w
cy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVl
KSB7XG4gICAgICAgZmFsc2UgPyB3YXJuaW5nKGZhbHNlLCAnU2VsZWN0IGVsZW1lbnRzIG11c3Qg
YmUgZWl0aGVyIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkICcgKyAnKHNwZWNpZnkgZWl0aGVy
IHRoZSB2YWx1ZSBwcm9wLCBvciB0aGUgZGVmYXVsdFZhbHVlIHByb3AsIGJ1dCBub3QgJyArICdi
b3RoKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBz
ZWxlY3QgJyArICdlbGVtZW50IGFuZCByZW1vdmUgb25lIG9mIHRoZXNlIHByb3BzLiBNb3JlIGlu
Zm86ICcgKyAnaHR0cHM6Ly9mYi5tZS9yZWFjdC1jb250cm9sbGVkLWNvbXBvbmVudHMnKSA6IHZv
aWQgMDtcbiAgICAgIGRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSA9IHRydWU7XG4gICAgfVxuICB9
LFxuXG4gIGdldFNlbGVjdFZhbHVlQ29udGV4dDogZnVuY3Rpb24gKGluc3QpIHtcbiAgICAvLyBS
ZWFjdERPTU9wdGlvbiBsb29rcyBhdCB0aGlzIGluaXRpYWwgdmFsdWUgc28gdGhlIGluaXRpYWwg
Z2VuZXJhdGVkXG4gICAgLy8gbWFya3VwIGhhcyBjb3JyZWN0IGBzZWxlY3RlZGAgYXR0cmlidXRl
c1xuICAgIHJldHVybiBpbnN0Ll93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlO1xuICB9LFxuXG4g
IHBvc3RVcGRhdGVXcmFwcGVyOiBmdW5jdGlvbiAoaW5zdCkge1xuICAgIHZhciBwcm9wcyA9IGlu
c3QuX2N1cnJlbnRFbGVtZW50LnByb3BzO1xuXG4gICAgLy8gQWZ0ZXIgdGhlIGluaXRpYWwgbW91
bnQsIHdlIGNvbnRyb2wgc2VsZWN0ZWQtbmVzcyBtYW51YWxseSBzbyBkb24ndCBwYXNzXG4gICAg
Ly8gdGhpcyB2YWx1ZSBkb3duXG4gICAgaW5zdC5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSA9
IHVuZGVmaW5lZDtcblxuICAgIHZhciB3YXNNdWx0aXBsZSA9IGluc3QuX3dyYXBwZXJTdGF0ZS53
YXNNdWx0aXBsZTtcbiAgICBpbnN0Ll93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGUgPSBCb29sZWFu
KHByb3BzLm11bHRpcGxlKTtcblxuICAgIHZhciB2YWx1ZSA9IExpbmtlZFZhbHVlVXRpbHMuZ2V0
VmFsdWUocHJvcHMpO1xuICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICBpbnN0Ll93cmFw
cGVyU3RhdGUucGVuZGluZ1VwZGF0ZSA9IGZhbHNlO1xuICAgICAgdXBkYXRlT3B0aW9ucyhpbnN0
LCBCb29sZWFuKHByb3BzLm11bHRpcGxlKSwgdmFsdWUpO1xuICAgIH0gZWxzZSBpZiAod2FzTXVs
dGlwbGUgIT09IEJvb2xlYW4ocHJvcHMubXVsdGlwbGUpKSB7XG4gICAgICAvLyBGb3Igc2ltcGxp
Y2l0eSwgcmVhcHBseSBgZGVmYXVsdFZhbHVlYCBpZiBgbXVsdGlwbGVgIGlzIHRvZ2dsZWQuXG4g
ICAgICBpZiAocHJvcHMuZGVmYXVsdFZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgdXBkYXRlT3B0
aW9ucyhpbnN0LCBCb29sZWFuKHByb3BzLm11bHRpcGxlKSwgcHJvcHMuZGVmYXVsdFZhbHVlKTtc
biAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJldmVydCB0aGUgc2VsZWN0IGJhY2sgdG8gaXRz
IGRlZmF1bHQgdW5zZWxlY3RlZCBzdGF0ZS5cbiAgICAgICAgdXBkYXRlT3B0aW9ucyhpbnN0LCBC
b29sZWFuKHByb3BzLm11bHRpcGxlKSwgcHJvcHMubXVsdGlwbGUgPyBbXSA6ICcnKTtcbiAgICAg
IH1cbiAgICB9XG4gIH1cbn07XG5cbmZ1bmN0aW9uIF9oYW5kbGVDaGFuZ2UoZXZlbnQpIHtcbiAg
dmFyIHByb3BzID0gdGhpcy5fY3VycmVudEVsZW1lbnQucHJvcHM7XG4gIHZhciByZXR1cm5WYWx1
ZSA9IExpbmtlZFZhbHVlVXRpbHMuZXhlY3V0ZU9uQ2hhbmdlKHByb3BzLCBldmVudCk7XG5cbiAg
aWYgKHRoaXMuX3Jvb3ROb2RlSUQpIHtcbiAgICB0aGlzLl93cmFwcGVyU3RhdGUucGVuZGluZ1Vw
ZGF0ZSA9IHRydWU7XG4gIH1cbiAgUmVhY3RVcGRhdGVzLmFzYXAodXBkYXRlT3B0aW9uc0lmUGVu
ZGluZ1VwZGF0ZUFuZE1vdW50ZWQsIHRoaXMpO1xuICByZXR1cm4gcmV0dXJuVmFsdWU7XG59XG5c
bm1vZHVsZS5leHBvcnRzID0gUmVhY3RET01TZWxlY3Q7XG5cbi8qKiovIH0pLFxuLyogNzIgKi9c
bi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuLy8gc2hpbSBmb3IgdXNpbmcg
cHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5c
bi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBy
dW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQg
dG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0
cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGlu
c2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2Vy
dGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRp
bWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVy
cm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZh
dWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBo
YXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAg
ICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAg
IGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAg
ICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAg
ICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGlt
b3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9
PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJU
aW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0
ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAg
ICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59
ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91
dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5l
IHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4g
ICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmlu
ZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNh
Y2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91
dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAg
fVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3
aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hl
ZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAg
ICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBl
dmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVk
IG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGws
IGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFi
b3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGds
b2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhl
cndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNh
Y2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5c
bn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xl
YXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVu
dHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2Vy
KTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdh
cyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0
Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xu
ICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVy
biBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hl
biB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBt
YWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAg
fSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBp
biBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRy
dXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICBy
ZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBj
YXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2
ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlz
JywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBh
IGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZl
IGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAg
ICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAg
ICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxz
ZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBj
bGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7
XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAo
Y3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25j
YXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9
XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxu
fVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAg
ICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4
dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5n
dGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAg
ICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4g
ICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1
ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAg
IHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAg
ICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xl
YXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1
bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAg
ICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkg
PCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJn
dW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVu
LCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAg
ICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBw
cmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlz
LmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5y
dW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7
XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7
XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24g
PSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVy
c2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xu
cHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vz
cy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJl
bW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xucHJvY2Vzcy5w
cmVwZW5kTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kT25jZUxpc3RlbmVyID0gbm9v
cDtcblxucHJvY2Vzcy5saXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gW10gfVxu
XG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJv
cigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dk
ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24g
KGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9y
dGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcblxu
XG4vKioqLyB9KSxcbi8qIDczICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBf
X3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBDb3B5cmln
aHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5c
biAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUg
bGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rv
cnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50
IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJl
Y3RvcnkuXG4gKlxuICovXG5cblxuXG52YXIgX3Byb2RJbnZhcmlhbnQgPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKDIpLFxuICAgIF9hc3NpZ24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuXG52YXIg
UmVhY3RDb21wb3NpdGVDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1Nik7XG52YXIg
UmVhY3RFbXB0eUNvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oNzUpO1xudmFyIFJlYWN0
SG9zdENvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oNzYpO1xuXG52YXIgZ2V0TmV4dERl
YnVnSUQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1Nyk7XG52YXIgaW52YXJpYW50ID0gX193ZWJw
YWNrX3JlcXVpcmVfXygwKTtcbnZhciB3YXJuaW5nID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtc
blxuLy8gVG8gYXZvaWQgYSBjeWNsaWMgZGVwZW5kZW5jeSwgd2UgY3JlYXRlIHRoZSBmaW5hbCBj
bGFzcyBpbiB0aGlzIG1vZHVsZVxudmFyIFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50V3JhcHBlciA9
IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gIHRoaXMuY29uc3RydWN0KGVsZW1lbnQpO1xufTtcblxu
ZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKG93bmVyKSB7XG4gIGlmIChvd25l
cikge1xuICAgIHZhciBuYW1lID0gb3duZXIuZ2V0TmFtZSgpO1xuICAgIGlmIChuYW1lKSB7XG4g
ICAgICByZXR1cm4gJyBDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG5hbWUgKyAnYC4n
O1xuICAgIH1cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHR5
cGUgcmVmZXJlbmNlIGlzIGEga25vd24gaW50ZXJuYWwgdHlwZS4gSS5lLiBub3QgYSB1c2VyXG4g
KiBwcm92aWRlZCBjb21wb3NpdGUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSB0eXBl
XG4gKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgdGhpcyBpcyBhIHZhbGlkIGlu
dGVybmFsIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGlzSW50ZXJuYWxDb21wb25lbnRUeXBlKHR5cGUp
IHtcbiAgcmV0dXJuIHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB0eXBlLnBy
b3RvdHlwZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHR5cGUucHJvdG90eXBlLm1vdW50Q29t
cG9uZW50ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB0eXBlLnByb3RvdHlwZS5yZWNlaXZlQ29t
cG9uZW50ID09PSAnZnVuY3Rpb24nO1xufVxuXG4vKipcbiAqIEdpdmVuIGEgUmVhY3ROb2RlLCBj
cmVhdGUgYW4gaW5zdGFuY2UgdGhhdCB3aWxsIGFjdHVhbGx5IGJlIG1vdW50ZWQuXG4gKlxuICog
QHBhcmFtIHtSZWFjdE5vZGV9IG5vZGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvdWxkSGF2ZURl
YnVnSURcbiAqIEByZXR1cm4ge29iamVjdH0gQSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGVsZW1lbnQn
cyBjb25zdHJ1Y3Rvci5cbiAqIEBwcm90ZWN0ZWRcbiAqL1xuZnVuY3Rpb24gaW5zdGFudGlhdGVS
ZWFjdENvbXBvbmVudChub2RlLCBzaG91bGRIYXZlRGVidWdJRCkge1xuICB2YXIgaW5zdGFuY2U7
XG5cbiAgaWYgKG5vZGUgPT09IG51bGwgfHwgbm9kZSA9PT0gZmFsc2UpIHtcbiAgICBpbnN0YW5j
ZSA9IFJlYWN0RW1wdHlDb21wb25lbnQuY3JlYXRlKGluc3RhbnRpYXRlUmVhY3RDb21wb25lbnQp
O1xuICB9IGVsc2UgaWYgKHR5cGVvZiBub2RlID09PSAnb2JqZWN0Jykge1xuICAgIHZhciBlbGVt
ZW50ID0gbm9kZTtcbiAgICB2YXIgdHlwZSA9IGVsZW1lbnQudHlwZTtcbiAgICBpZiAodHlwZW9m
IHR5cGUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAg
ICB2YXIgaW5mbyA9ICcnO1xuICAgICAgaWYgKGZhbHNlKSB7XG4gICAgICAgIGlmICh0eXBlID09
PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwg
JiYgT2JqZWN0LmtleXModHlwZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgaW5mbyArPSAn
IFlvdSBsaWtlbHkgZm9yZ290IHRvIGV4cG9ydCB5b3VyIGNvbXBvbmVudCBmcm9tIHRoZSBmaWxl
ICcgKyBcIml0J3MgZGVmaW5lZCBpbi5cIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaW5m
byArPSBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oZWxlbWVudC5fb3duZXIpO1xuICAgICAg
IHRydWUgPyAgZmFsc2UgPyBpbnZhcmlhbnQoZmFsc2UsICdFbGVtZW50IHR5cGUgaXMgaW52YWxp
ZDogZXhwZWN0ZWQgYSBzdHJpbmcgKGZvciBidWlsdC1pbiBjb21wb25lbnRzKSBvciBhIGNsYXNz
L2Z1bmN0aW9uIChmb3IgY29tcG9zaXRlIGNvbXBvbmVudHMpIGJ1dCBnb3Q6ICVzLiVzJywgdHlw
ZSA9PSBudWxsID8gdHlwZSA6IHR5cGVvZiB0eXBlLCBpbmZvKSA6IF9wcm9kSW52YXJpYW50KCcx
MzAnLCB0eXBlID09IG51bGwgPyB0eXBlIDogdHlwZW9mIHR5cGUsIGluZm8pIDogdm9pZCAwO1xu
ICAgIH1cblxuICAgIC8vIFNwZWNpYWwgY2FzZSBzdHJpbmcgdmFsdWVzXG4gICAgaWYgKHR5cGVv
ZiBlbGVtZW50LnR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpbnN0YW5jZSA9IFJlYWN0SG9z
dENvbXBvbmVudC5jcmVhdGVJbnRlcm5hbENvbXBvbmVudChlbGVtZW50KTtcbiAgICB9IGVsc2Ug
aWYgKGlzSW50ZXJuYWxDb21wb25lbnRUeXBlKGVsZW1lbnQudHlwZSkpIHtcbiAgICAgIC8vIFRo
aXMgaXMgdGVtcG9yYXJpbHkgYXZhaWxhYmxlIGZvciBjdXN0b20gY29tcG9uZW50cyB0aGF0IGFy
ZSBub3Qgc3RyaW5nXG4gICAgICAvLyByZXByZXNlbnRhdGlvbnMuIEkuZS4gQVJULiBPbmNlIHRo
b3NlIGFyZSB1cGRhdGVkIHRvIHVzZSB0aGUgc3RyaW5nXG4gICAgICAvLyByZXByZXNlbnRhdGlv
biwgd2UgY2FuIGRyb3AgdGhpcyBjb2RlIHBhdGguXG4gICAgICBpbnN0YW5jZSA9IG5ldyBlbGVt
ZW50LnR5cGUoZWxlbWVudCk7XG5cbiAgICAgIC8vIFdlIHJlbmFtZWQgdGhpcy4gQWxsb3cgdGhl
IG9sZCBuYW1lIGZvciBjb21wYXQuIDooXG4gICAgICBpZiAoIWluc3RhbmNlLmdldEhvc3ROb2Rl
KSB7XG4gICAgICAgIGluc3RhbmNlLmdldEhvc3ROb2RlID0gaW5zdGFuY2UuZ2V0TmF0aXZlTm9k
ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaW5zdGFuY2UgPSBuZXcgUmVhY3RDb21w
b3NpdGVDb21wb25lbnRXcmFwcGVyKGVsZW1lbnQpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBl
b2Ygbm9kZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG5vZGUgPT09ICdudW1iZXInKSB7XG4gICAg
aW5zdGFuY2UgPSBSZWFjdEhvc3RDb21wb25lbnQuY3JlYXRlSW5zdGFuY2VGb3JUZXh0KG5vZGUp
O1xuICB9IGVsc2Uge1xuICAgICB0cnVlID8gIGZhbHNlID8gaW52YXJpYW50KGZhbHNlLCAnRW5j
b3VudGVyZWQgaW52YWxpZCBSZWFjdCBub2RlIG9mIHR5cGUgJXMnLCB0eXBlb2Ygbm9kZSkgOiBf
cHJvZEludmFyaWFudCgnMTMxJywgdHlwZW9mIG5vZGUpIDogdm9pZCAwO1xuICB9XG5cbiAgaWYg
KGZhbHNlKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdh
cm5pbmcodHlwZW9mIGluc3RhbmNlLm1vdW50Q29tcG9uZW50ID09PSAnZnVuY3Rpb24nICYmIHR5
cGVvZiBpbnN0YW5jZS5yZWNlaXZlQ29tcG9uZW50ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBp
bnN0YW5jZS5nZXRIb3N0Tm9kZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgaW5zdGFuY2UudW5t
b3VudENvbXBvbmVudCA9PT0gJ2Z1bmN0aW9uJywgJ09ubHkgUmVhY3QgQ29tcG9uZW50cyBjYW4g
YmUgbW91bnRlZC4nKSA6IHZvaWQgMDtcbiAgfVxuXG4gIC8vIFRoZXNlIHR3byBmaWVsZHMgYXJl
IHVzZWQgYnkgdGhlIERPTSBhbmQgQVJUIGRpZmZpbmcgYWxnb3JpdGhtc1xuICAvLyByZXNwZWN0
aXZlbHkuIEluc3RlYWQgb2YgdXNpbmcgZXhwYW5kb3Mgb24gY29tcG9uZW50cywgd2Ugc2hvdWxk
IGJlXG4gIC8vIHN0b3JpbmcgdGhlIHN0YXRlIG5lZWRlZCBieSB0aGUgZGlmZmluZyBhbGdvcml0
aG1zIGVsc2V3aGVyZS5cbiAgaW5zdGFuY2UuX21vdW50SW5kZXggPSAwO1xuICBpbnN0YW5jZS5f
bW91bnRJbWFnZSA9IG51bGw7XG5cbiAgaWYgKGZhbHNlKSB7XG4gICAgaW5zdGFuY2UuX2RlYnVn
SUQgPSBzaG91bGRIYXZlRGVidWdJRCA/IGdldE5leHREZWJ1Z0lEKCkgOiAwO1xuICB9XG5cbiAg
Ly8gSW50ZXJuYWwgaW5zdGFuY2VzIHNob3VsZCBmdWxseSBjb25zdHJ1Y3RlZCBhdCB0aGlzIHBv
aW50LCBzbyB0aGV5IHNob3VsZFxuICAvLyBub3QgZ2V0IGFueSBuZXcgZmllbGRzIGFkZGVkIHRv
IHRoZW0gYXQgdGhpcyBwb2ludC5cbiAgaWYgKGZhbHNlKSB7XG4gICAgaWYgKE9iamVjdC5wcmV2
ZW50RXh0ZW5zaW9ucykge1xuICAgICAgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKGluc3RhbmNl
KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbl9hc3NpZ24oUmVhY3RD
b21wb3NpdGVDb21wb25lbnRXcmFwcGVyLnByb3RvdHlwZSwgUmVhY3RDb21wb3NpdGVDb21wb25l
bnQsIHtcbiAgX2luc3RhbnRpYXRlUmVhY3RDb21wb25lbnQ6IGluc3RhbnRpYXRlUmVhY3RDb21w
b25lbnRcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGluc3RhbnRpYXRlUmVhY3RDb21wb25lbnQ7
XG5cbi8qKiovIH0pLFxuLyogNzQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMs
IF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIENvcHly
aWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVk
LlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHls
ZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVj
dG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRl
bnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRp
cmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG5cblxudmFyIF9wcm9kSW52YXJpYW50ID0gX193ZWJw
YWNrX3JlcXVpcmVfXygyKTtcblxudmFyIFJlYWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7
XG5cbnZhciBpbnZhcmlhbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG52YXIgUmVhY3RO
b2RlVHlwZXMgPSB7XG4gIEhPU1Q6IDAsXG4gIENPTVBPU0lURTogMSxcbiAgRU1QVFk6IDIsXG5c
biAgZ2V0VHlwZTogZnVuY3Rpb24gKG5vZGUpIHtcbiAgICBpZiAobm9kZSA9PT0gbnVsbCB8fCBu
b2RlID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIFJlYWN0Tm9kZVR5cGVzLkVNUFRZO1xuICAg
IH0gZWxzZSBpZiAoUmVhY3QuaXNWYWxpZEVsZW1lbnQobm9kZSkpIHtcbiAgICAgIGlmICh0eXBl
b2Ygbm9kZS50eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBSZWFjdE5vZGVU
eXBlcy5DT01QT1NJVEU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUmVhY3ROb2Rl
VHlwZXMuSE9TVDtcbiAgICAgIH1cbiAgICB9XG4gICAgIHRydWUgPyAgZmFsc2UgPyBpbnZhcmlh
bnQoZmFsc2UsICdVbmV4cGVjdGVkIG5vZGU6ICVzJywgbm9kZSkgOiBfcHJvZEludmFyaWFudCgn
MjYnLCBub2RlKSA6IHZvaWQgMDtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdE5v
ZGVUeXBlcztcblxuLyoqKi8gfSksXG4vKiA3NSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwg
ZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qKlxu
ICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUg
QlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJv
b3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAq
IG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhl
IHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG5cblxudmFyIGVtcHR5Q29tcG9uZW50RmFjdG9y
eTtcblxudmFyIFJlYWN0RW1wdHlDb21wb25lbnRJbmplY3Rpb24gPSB7XG4gIGluamVjdEVtcHR5
Q29tcG9uZW50RmFjdG9yeTogZnVuY3Rpb24gKGZhY3RvcnkpIHtcbiAgICBlbXB0eUNvbXBvbmVu
dEZhY3RvcnkgPSBmYWN0b3J5O1xuICB9XG59O1xuXG52YXIgUmVhY3RFbXB0eUNvbXBvbmVudCA9
IHtcbiAgY3JlYXRlOiBmdW5jdGlvbiAoaW5zdGFudGlhdGUpIHtcbiAgICByZXR1cm4gZW1wdHlD
b21wb25lbnRGYWN0b3J5KGluc3RhbnRpYXRlKTtcbiAgfVxufTtcblxuUmVhY3RFbXB0eUNvbXBv
bmVudC5pbmplY3Rpb24gPSBSZWFjdEVtcHR5Q29tcG9uZW50SW5qZWN0aW9uO1xuXG5tb2R1bGUu
ZXhwb3J0cyA9IFJlYWN0RW1wdHlDb21wb25lbnQ7XG5cbi8qKiovIH0pLFxuLyogNzYgKi9cbi8q
KiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxu
XCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQsIEZhY2Vib29r
LCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUg
aXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICog
TElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBB
biBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0
aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuXG5cbnZh
ciBfcHJvZEludmFyaWFudCA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG5cbnZhciBpbnZhcmlh
bnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG52YXIgZ2VuZXJpY0NvbXBvbmVudENsYXNz
ID0gbnVsbDtcbnZhciB0ZXh0Q29tcG9uZW50Q2xhc3MgPSBudWxsO1xuXG52YXIgUmVhY3RIb3N0
Q29tcG9uZW50SW5qZWN0aW9uID0ge1xuICAvLyBUaGlzIGFjY2VwdHMgYSBjbGFzcyB0aGF0IHJl
Y2VpdmVzIHRoZSB0YWcgc3RyaW5nLiBUaGlzIGlzIGEgY2F0Y2ggYWxsXG4gIC8vIHRoYXQgY2Fu
IHJlbmRlciBhbnkga2luZCBvZiB0YWcuXG4gIGluamVjdEdlbmVyaWNDb21wb25lbnRDbGFzczog
ZnVuY3Rpb24gKGNvbXBvbmVudENsYXNzKSB7XG4gICAgZ2VuZXJpY0NvbXBvbmVudENsYXNzID0g
Y29tcG9uZW50Q2xhc3M7XG4gIH0sXG4gIC8vIFRoaXMgYWNjZXB0cyBhIHRleHQgY29tcG9uZW50
IGNsYXNzIHRoYXQgdGFrZXMgdGhlIHRleHQgc3RyaW5nIHRvIGJlXG4gIC8vIHJlbmRlcmVkIGFz
IHByb3BzLlxuICBpbmplY3RUZXh0Q29tcG9uZW50Q2xhc3M6IGZ1bmN0aW9uIChjb21wb25lbnRD
bGFzcykge1xuICAgIHRleHRDb21wb25lbnRDbGFzcyA9IGNvbXBvbmVudENsYXNzO1xuICB9XG59
O1xuXG4vKipcbiAqIEdldCBhIGhvc3QgaW50ZXJuYWwgY29tcG9uZW50IGNsYXNzIGZvciBhIHNw
ZWNpZmljIHRhZy5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudCBUaGUgZWxl
bWVudCB0byBjcmVhdGUuXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn0gVGhlIGludGVybmFsIGNsYXNz
IGNvbnN0cnVjdG9yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVJbnRlcm5hbENvbXBv
bmVudChlbGVtZW50KSB7XG4gICFnZW5lcmljQ29tcG9uZW50Q2xhc3MgPyAgZmFsc2UgPyBpbnZh
cmlhbnQoZmFsc2UsICdUaGVyZSBpcyBubyByZWdpc3RlcmVkIGNvbXBvbmVudCBmb3IgdGhlIHRh
ZyAlcycsIGVsZW1lbnQudHlwZSkgOiBfcHJvZEludmFyaWFudCgnMTExJywgZWxlbWVudC50eXBl
KSA6IHZvaWQgMDtcbiAgcmV0dXJuIG5ldyBnZW5lcmljQ29tcG9uZW50Q2xhc3MoZWxlbWVudCk7
XG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWFjdFRleHR9IHRleHRcbiAqIEByZXR1cm4ge1JlYWN0
Q29tcG9uZW50fVxuICovXG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZUZvclRleHQodGV4dCkge1xu
ICByZXR1cm4gbmV3IHRleHRDb21wb25lbnRDbGFzcyh0ZXh0KTtcbn1cblxuLyoqXG4gKiBAcGFy
YW0ge1JlYWN0Q29tcG9uZW50fSBjb21wb25lbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9c
bmZ1bmN0aW9uIGlzVGV4dENvbXBvbmVudChjb21wb25lbnQpIHtcbiAgcmV0dXJuIGNvbXBvbmVu
dCBpbnN0YW5jZW9mIHRleHRDb21wb25lbnRDbGFzcztcbn1cblxudmFyIFJlYWN0SG9zdENvbXBv
bmVudCA9IHtcbiAgY3JlYXRlSW50ZXJuYWxDb21wb25lbnQ6IGNyZWF0ZUludGVybmFsQ29tcG9u
ZW50LFxuICBjcmVhdGVJbnN0YW5jZUZvclRleHQ6IGNyZWF0ZUluc3RhbmNlRm9yVGV4dCxcbiAg
aXNUZXh0Q29tcG9uZW50OiBpc1RleHRDb21wb25lbnQsXG4gIGluamVjdGlvbjogUmVhY3RIb3N0
Q29tcG9uZW50SW5qZWN0aW9uXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0SG9zdENvbXBv
bmVudDtcblxuLyoqKi8gfSksXG4vKiA3NyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhw
b3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qKlxuICog
Q29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNE
LXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qg
ZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9m
IHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNh
bWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG5cblxudmFyIF9wcm9kSW52YXJpYW50ID0gX193ZWJw
YWNrX3JlcXVpcmVfXygyKTtcblxudmFyIFJlYWN0Q3VycmVudE93bmVyID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygxMCk7XG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gX193ZWJwYWNrX3JlcXVpcmVf
XygxNTgpO1xuXG52YXIgZ2V0SXRlcmF0b3JGbiA9IF9fd2VicGFja19yZXF1aXJlX18oMTU5KTtc
bnZhciBpbnZhcmlhbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyIEtleUVzY2FwZVV0
aWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NCk7XG52YXIgd2FybmluZyA9IF9fd2VicGFja19y
ZXF1aXJlX18oMSk7XG5cbnZhciBTRVBBUkFUT1IgPSAnLic7XG52YXIgU1VCU0VQQVJBVE9SID0g
JzonO1xuXG4vKipcbiAqIFRoaXMgaXMgaW5saW5lZCBmcm9tIFJlYWN0RWxlbWVudCBzaW5jZSB0
aGlzIGZpbGUgaXMgc2hhcmVkIGJldHdlZW5cbiAqIGlzb21vcnBoaWMgYW5kIHJlbmRlcmVycy4g
V2UgY291bGQgZXh0cmFjdCB0aGlzIHRvIGFcbiAqXG4gKi9cblxuLyoqXG4gKiBUT0RPOiBUZXN0
IHRoYXQgYSBzaW5nbGUgY2hpbGQgYW5kIGFuIGFycmF5IHdpdGggb25lIGl0ZW0gaGF2ZSB0aGUg
c2FtZSBrZXlcbiAqIHBhdHRlcm4uXG4gKi9cblxudmFyIGRpZFdhcm5BYm91dE1hcHMgPSBmYWxz
ZTtcblxuLyoqXG4gKiBHZW5lcmF0ZSBhIGtleSBzdHJpbmcgdGhhdCBpZGVudGlmaWVzIGEgY29t
cG9uZW50IHdpdGhpbiBhIHNldC5cbiAqXG4gKiBAcGFyYW0geyp9IGNvbXBvbmVudCBBIGNvbXBv
bmVudCB0aGF0IGNvdWxkIGNvbnRhaW4gYSBtYW51YWwga2V5LlxuICogQHBhcmFtIHtudW1iZXJ9
IGluZGV4IEluZGV4IHRoYXQgaXMgdXNlZCBpZiBhIG1hbnVhbCBrZXkgaXMgbm90IHByb3ZpZGVk
LlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRDb21wb25lbnRLZXkoY29t
cG9uZW50LCBpbmRleCkge1xuICAvLyBEbyBzb21lIHR5cGVjaGVja2luZyBoZXJlIHNpbmNlIHdl
IGNhbGwgdGhpcyBibGluZGx5LiBXZSB3YW50IHRvIGVuc3VyZVxuICAvLyB0aGF0IHdlIGRvbid0
IGJsb2NrIHBvdGVudGlhbCBmdXR1cmUgRVMgQVBJcy5cbiAgaWYgKGNvbXBvbmVudCAmJiB0eXBl
b2YgY29tcG9uZW50ID09PSAnb2JqZWN0JyAmJiBjb21wb25lbnQua2V5ICE9IG51bGwpIHtcbiAg
ICAvLyBFeHBsaWNpdCBrZXlcbiAgICByZXR1cm4gS2V5RXNjYXBlVXRpbHMuZXNjYXBlKGNvbXBv
bmVudC5rZXkpO1xuICB9XG4gIC8vIEltcGxpY2l0IGtleSBkZXRlcm1pbmVkIGJ5IHRoZSBpbmRl
eCBpbiB0aGUgc2V0XG4gIHJldHVybiBpbmRleC50b1N0cmluZygzNik7XG59XG5cbi8qKlxuICog
QHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcGFyYW0g
eyFzdHJpbmd9IG5hbWVTb0ZhciBOYW1lIG9mIHRoZSBrZXkgcGF0aCBzbyBmYXIuXG4gKiBAcGFy
YW0geyFmdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZWFjaCBjaGls
ZCBmb3VuZC5cbiAqIEBwYXJhbSB7Pyp9IHRyYXZlcnNlQ29udGV4dCBVc2VkIHRvIHBhc3MgaW5m
b3JtYXRpb24gdGhyb3VnaG91dCB0aGUgdHJhdmVyc2FsXG4gKiBwcm9jZXNzLlxuICogQHJldHVy
biB7IW51bWJlcn0gVGhlIG51bWJlciBvZiBjaGlsZHJlbiBpbiB0aGlzIHN1YnRyZWUuXG4gKi9c
bmZ1bmN0aW9uIHRyYXZlcnNlQWxsQ2hpbGRyZW5JbXBsKGNoaWxkcmVuLCBuYW1lU29GYXIsIGNh
bGxiYWNrLCB0cmF2ZXJzZUNvbnRleHQpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgY2hpbGRyZW47
XG5cbiAgaWYgKHR5cGUgPT09ICd1bmRlZmluZWQnIHx8IHR5cGUgPT09ICdib29sZWFuJykge1xu
ICAgIC8vIEFsbCBvZiB0aGUgYWJvdmUgYXJlIHBlcmNlaXZlZCBhcyBudWxsLlxuICAgIGNoaWxk
cmVuID0gbnVsbDtcbiAgfVxuXG4gIGlmIChjaGlsZHJlbiA9PT0gbnVsbCB8fCB0eXBlID09PSAn
c3RyaW5nJyB8fCB0eXBlID09PSAnbnVtYmVyJyB8fFxuICAvLyBUaGUgZm9sbG93aW5nIGlzIGlu
bGluZWQgZnJvbSBSZWFjdEVsZW1lbnQuIFRoaXMgbWVhbnMgd2UgY2FuIG9wdGltaXplXG4gIC8v
IHNvbWUgY2hlY2tzLiBSZWFjdCBGaWJlciBhbHNvIGlubGluZXMgdGhpcyBsb2dpYyBmb3Igc2lt
aWxhciBwdXJwb3Nlcy5cbiAgdHlwZSA9PT0gJ29iamVjdCcgJiYgY2hpbGRyZW4uJCR0eXBlb2Yg
PT09IFJFQUNUX0VMRU1FTlRfVFlQRSkge1xuICAgIGNhbGxiYWNrKHRyYXZlcnNlQ29udGV4dCwg
Y2hpbGRyZW4sXG4gICAgLy8gSWYgaXQncyB0aGUgb25seSBjaGlsZCwgdHJlYXQgdGhlIG5hbWUg
YXMgaWYgaXQgd2FzIHdyYXBwZWQgaW4gYW4gYXJyYXlcbiAgICAvLyBzbyB0aGF0IGl0J3MgY29u
c2lzdGVudCBpZiB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIGdyb3dzLlxuICAgIG5hbWVTb0ZhciA9
PT0gJycgPyBTRVBBUkFUT1IgKyBnZXRDb21wb25lbnRLZXkoY2hpbGRyZW4sIDApIDogbmFtZVNv
RmFyKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHZhciBjaGlsZDtcbiAgdmFyIG5leHROYW1l
O1xuICB2YXIgc3VidHJlZUNvdW50ID0gMDsgLy8gQ291bnQgb2YgY2hpbGRyZW4gZm91bmQgaW4g
dGhlIGN1cnJlbnQgc3VidHJlZS5cbiAgdmFyIG5leHROYW1lUHJlZml4ID0gbmFtZVNvRmFyID09
PSAnJyA/IFNFUEFSQVRPUiA6IG5hbWVTb0ZhciArIFNVQlNFUEFSQVRPUjtcblxuICBpZiAoQXJy
YXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVu
Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgICAgbmV4dE5h
bWUgPSBuZXh0TmFtZVByZWZpeCArIGdldENvbXBvbmVudEtleShjaGlsZCwgaSk7XG4gICAgICBz
dWJ0cmVlQ291bnQgKz0gdHJhdmVyc2VBbGxDaGlsZHJlbkltcGwoY2hpbGQsIG5leHROYW1lLCBj
YWxsYmFjaywgdHJhdmVyc2VDb250ZXh0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGl0
ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKGNoaWxkcmVuKTtcbiAgICBpZiAoaXRlcmF0b3JGbikg
e1xuICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKGNoaWxkcmVuKTtcbiAgICAg
IHZhciBzdGVwO1xuICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IGNoaWxkcmVuLmVudHJpZXMpIHtc
biAgICAgICAgdmFyIGlpID0gMDtcbiAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5l
eHQoKSkuZG9uZSkge1xuICAgICAgICAgIGNoaWxkID0gc3RlcC52YWx1ZTtcbiAgICAgICAgICBu
ZXh0TmFtZSA9IG5leHROYW1lUHJlZml4ICsgZ2V0Q29tcG9uZW50S2V5KGNoaWxkLCBpaSsrKTtc
biAgICAgICAgICBzdWJ0cmVlQ291bnQgKz0gdHJhdmVyc2VBbGxDaGlsZHJlbkltcGwoY2hpbGQs
IG5leHROYW1lLCBjYWxsYmFjaywgdHJhdmVyc2VDb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAg
fSBlbHNlIHtcbiAgICAgICAgaWYgKGZhbHNlKSB7XG4gICAgICAgICAgdmFyIG1hcHNBc0NoaWxk
cmVuQWRkZW5kdW0gPSAnJztcbiAgICAgICAgICBpZiAoUmVhY3RDdXJyZW50T3duZXIuY3VycmVu
dCkge1xuICAgICAgICAgICAgdmFyIG1hcHNBc0NoaWxkcmVuT3duZXJOYW1lID0gUmVhY3RDdXJy
ZW50T3duZXIuY3VycmVudC5nZXROYW1lKCk7XG4gICAgICAgICAgICBpZiAobWFwc0FzQ2hpbGRy
ZW5Pd25lck5hbWUpIHtcbiAgICAgICAgICAgICAgbWFwc0FzQ2hpbGRyZW5BZGRlbmR1bSA9ICcg
Q2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBtYXBzQXNDaGlsZHJlbk93bmVyTmFtZSAr
ICdgLic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHByb2Nlc3MuZW52
Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGRpZFdhcm5BYm91dE1hcHMsICdV
c2luZyBNYXBzIGFzIGNoaWxkcmVuIGlzIG5vdCB5ZXQgZnVsbHkgc3VwcG9ydGVkLiBJdCBpcyBh
biAnICsgJ2V4cGVyaW1lbnRhbCBmZWF0dXJlIHRoYXQgbWlnaHQgYmUgcmVtb3ZlZC4gQ29udmVy
dCBpdCB0byBhICcgKyAnc2VxdWVuY2UgLyBpdGVyYWJsZSBvZiBrZXllZCBSZWFjdEVsZW1lbnRz
IGluc3RlYWQuJXMnLCBtYXBzQXNDaGlsZHJlbkFkZGVuZHVtKSA6IHZvaWQgMDtcbiAgICAgICAg
ICBkaWRXYXJuQWJvdXRNYXBzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJdGVyYXRv
ciB3aWxsIHByb3ZpZGUgZW50cnkgW2ssdl0gdHVwbGVzIHJhdGhlciB0aGFuIHZhbHVlcy5cbiAg
ICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAg
IHZhciBlbnRyeSA9IHN0ZXAudmFsdWU7XG4gICAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAg
ICAgICBjaGlsZCA9IGVudHJ5WzFdO1xuICAgICAgICAgICAgbmV4dE5hbWUgPSBuZXh0TmFtZVBy
ZWZpeCArIEtleUVzY2FwZVV0aWxzLmVzY2FwZShlbnRyeVswXSkgKyBTVUJTRVBBUkFUT1IgKyBn
ZXRDb21wb25lbnRLZXkoY2hpbGQsIDApO1xuICAgICAgICAgICAgc3VidHJlZUNvdW50ICs9IHRy
YXZlcnNlQWxsQ2hpbGRyZW5JbXBsKGNoaWxkLCBuZXh0TmFtZSwgY2FsbGJhY2ssIHRyYXZlcnNl
Q29udGV4dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlm
ICh0eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgdmFyIGFkZGVuZHVtID0gJyc7XG4gICAgICBp
ZiAoZmFsc2UpIHtcbiAgICAgICAgYWRkZW5kdW0gPSAnIElmIHlvdSBtZWFudCB0byByZW5kZXIg
YSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuLCB1c2UgYW4gYXJyYXkgJyArICdpbnN0ZWFkIG9yIHdy
YXAgdGhlIG9iamVjdCB1c2luZyBjcmVhdGVGcmFnbWVudChvYmplY3QpIGZyb20gdGhlICcgKyAn
UmVhY3QgYWRkLW9ucy4nO1xuICAgICAgICBpZiAoY2hpbGRyZW4uX2lzUmVhY3RFbGVtZW50KSB7
XG4gICAgICAgICAgYWRkZW5kdW0gPSBcIiBJdCBsb29rcyBsaWtlIHlvdSdyZSB1c2luZyBhbiBl
bGVtZW50IGNyZWF0ZWQgYnkgYSBkaWZmZXJlbnQgXCIgKyAndmVyc2lvbiBvZiBSZWFjdC4gTWFr
ZSBzdXJlIHRvIHVzZSBvbmx5IG9uZSBjb3B5IG9mIFJlYWN0Lic7XG4gICAgICAgIH1cbiAgICAg
ICAgaWYgKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQpIHtcbiAgICAgICAgICB2YXIgbmFtZSA9
IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQuZ2V0TmFtZSgpO1xuICAgICAgICAgIGlmIChuYW1l
KSB7XG4gICAgICAgICAgICBhZGRlbmR1bSArPSAnIENoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9m
IGAnICsgbmFtZSArICdgLic7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAg
ICB2YXIgY2hpbGRyZW5TdHJpbmcgPSBTdHJpbmcoY2hpbGRyZW4pO1xuICAgICAgIHRydWUgPyAg
ZmFsc2UgPyBpbnZhcmlhbnQoZmFsc2UsICdPYmplY3RzIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFj
dCBjaGlsZCAoZm91bmQ6ICVzKS4lcycsIGNoaWxkcmVuU3RyaW5nID09PSAnW29iamVjdCBPYmpl
Y3RdJyA/ICdvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMoY2hpbGRyZW4pLmpvaW4o
JywgJykgKyAnfScgOiBjaGlsZHJlblN0cmluZywgYWRkZW5kdW0pIDogX3Byb2RJbnZhcmlhbnQo
JzMxJywgY2hpbGRyZW5TdHJpbmcgPT09ICdbb2JqZWN0IE9iamVjdF0nID8gJ29iamVjdCB3aXRo
IGtleXMgeycgKyBPYmplY3Qua2V5cyhjaGlsZHJlbikuam9pbignLCAnKSArICd9JyA6IGNoaWxk
cmVuU3RyaW5nLCBhZGRlbmR1bSkgOiB2b2lkIDA7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN1
YnRyZWVDb3VudDtcbn1cblxuLyoqXG4gKiBUcmF2ZXJzZXMgY2hpbGRyZW4gdGhhdCBhcmUgdHlw
aWNhbGx5IHNwZWNpZmllZCBhcyBgcHJvcHMuY2hpbGRyZW5gLCBidXRcbiAqIG1pZ2h0IGFsc28g
YmUgc3BlY2lmaWVkIHRocm91Z2ggYXR0cmlidXRlczpcbiAqXG4gKiAtIGB0cmF2ZXJzZUFsbENo
aWxkcmVuKHRoaXMucHJvcHMuY2hpbGRyZW4sIC4uLilgXG4gKiAtIGB0cmF2ZXJzZUFsbENoaWxk
cmVuKHRoaXMucHJvcHMubGVmdFBhbmVsQ2hpbGRyZW4sIC4uLilgXG4gKlxuICogVGhlIGB0cmF2
ZXJzZUNvbnRleHRgIGlzIGFuIG9wdGlvbmFsIGFyZ3VtZW50IHRoYXQgaXMgcGFzc2VkIHRocm91
Z2ggdGhlXG4gKiBlbnRpcmUgdHJhdmVyc2FsLiBJdCBjYW4gYmUgdXNlZCB0byBzdG9yZSBhY2N1
bXVsYXRpb25zIG9yIGFueXRoaW5nIGVsc2UgdGhhdFxuICogdGhlIGNhbGxiYWNrIG1pZ2h0IGZp
bmQgcmVsZXZhbnQuXG4gKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBv
YmplY3QuXG4gKiBAcGFyYW0geyFmdW5jdGlvbn0gY2FsbGJhY2sgVG8gaW52b2tlIHVwb24gdHJh
dmVyc2luZyBlYWNoIGNoaWxkLlxuICogQHBhcmFtIHs/Kn0gdHJhdmVyc2VDb250ZXh0IENvbnRl
eHQgZm9yIHRyYXZlcnNhbC5cbiAqIEByZXR1cm4geyFudW1iZXJ9IFRoZSBudW1iZXIgb2YgY2hp
bGRyZW4gaW4gdGhpcyBzdWJ0cmVlLlxuICovXG5mdW5jdGlvbiB0cmF2ZXJzZUFsbENoaWxkcmVu
KGNoaWxkcmVuLCBjYWxsYmFjaywgdHJhdmVyc2VDb250ZXh0KSB7XG4gIGlmIChjaGlsZHJlbiA9
PSBudWxsKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICByZXR1cm4gdHJhdmVyc2VBbGxDaGls
ZHJlbkltcGwoY2hpbGRyZW4sICcnLCBjYWxsYmFjaywgdHJhdmVyc2VDb250ZXh0KTtcbn1cblxu
bW9kdWxlLmV4cG9ydHMgPSB0cmF2ZXJzZUFsbENoaWxkcmVuO1xuXG4vKioqLyB9KSxcbi8qIDc4
ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9f
KSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxNi1wcmVzZW50LCBG
YWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJj
ZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0
aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2Ug
dHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91
bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4g
Ki9cblxuXG5cbnZhciBfcHJvZEludmFyaWFudCA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpO1xu
XG52YXIgUmVhY3RDdXJyZW50T3duZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcblxudmFy
IGludmFyaWFudCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgd2FybmluZyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oMSk7XG5cbmZ1bmN0aW9uIGlzTmF0aXZlKGZuKSB7XG4gIC8vIEJhc2Vk
IG9uIGlzTmF0aXZlKCkgZnJvbSBMb2Rhc2hcbiAgdmFyIGZ1bmNUb1N0cmluZyA9IEZ1bmN0aW9u
LnByb3RvdHlwZS50b1N0cmluZztcbiAgdmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3Rv
dHlwZS5oYXNPd25Qcm9wZXJ0eTtcbiAgdmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICsgZnVu
Y1RvU3RyaW5nXG4gIC8vIFRha2UgYW4gZXhhbXBsZSBuYXRpdmUgZnVuY3Rpb24gc291cmNlIGZv
ciBjb21wYXJpc29uXG4gIC5jYWxsKGhhc093blByb3BlcnR5XG4gIC8vIFN0cmlwIHJlZ2V4IGNo
YXJhY3RlcnMgc28gd2UgY2FuIHVzZSBpdCBmb3IgcmVnZXhcbiAgKS5yZXBsYWNlKC9bXFxcXF4k
LiorPygpW1xcXXt9fF0vZywgJ1xcXFwkJidcbiAgLy8gUmVtb3ZlIGhhc093blByb3BlcnR5IGZy
b20gdGhlIHRlbXBsYXRlIHRvIG1ha2UgaXQgZ2VuZXJpY1xuICApLnJlcGxhY2UoL2hhc093blBy
b3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csICck
MS4qPycpICsgJyQnKTtcbiAgdHJ5IHtcbiAgICB2YXIgc291cmNlID0gZnVuY1RvU3RyaW5nLmNh
bGwoZm4pO1xuICAgIHJldHVybiByZUlzTmF0aXZlLnRlc3Qoc291cmNlKTtcbiAgfSBjYXRjaCAo
ZXJyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbnZhciBjYW5Vc2VDb2xsZWN0aW9u
cyA9XG4vLyBBcnJheS5mcm9tXG50eXBlb2YgQXJyYXkuZnJvbSA9PT0gJ2Z1bmN0aW9uJyAmJlxu
Ly8gTWFwXG50eXBlb2YgTWFwID09PSAnZnVuY3Rpb24nICYmIGlzTmF0aXZlKE1hcCkgJiZcbi8v
IE1hcC5wcm90b3R5cGUua2V5c1xuTWFwLnByb3RvdHlwZSAhPSBudWxsICYmIHR5cGVvZiBNYXAu
cHJvdG90eXBlLmtleXMgPT09ICdmdW5jdGlvbicgJiYgaXNOYXRpdmUoTWFwLnByb3RvdHlwZS5r
ZXlzKSAmJlxuLy8gU2V0XG50eXBlb2YgU2V0ID09PSAnZnVuY3Rpb24nICYmIGlzTmF0aXZlKFNl
dCkgJiZcbi8vIFNldC5wcm90b3R5cGUua2V5c1xuU2V0LnByb3RvdHlwZSAhPSBudWxsICYmIHR5
cGVvZiBTZXQucHJvdG90eXBlLmtleXMgPT09ICdmdW5jdGlvbicgJiYgaXNOYXRpdmUoU2V0LnBy
b3RvdHlwZS5rZXlzKTtcblxudmFyIHNldEl0ZW07XG52YXIgZ2V0SXRlbTtcbnZhciByZW1vdmVJ
dGVtO1xudmFyIGdldEl0ZW1JRHM7XG52YXIgYWRkUm9vdDtcbnZhciByZW1vdmVSb290O1xudmFy
IGdldFJvb3RJRHM7XG5cbmlmIChjYW5Vc2VDb2xsZWN0aW9ucykge1xuICB2YXIgaXRlbU1hcCA9
IG5ldyBNYXAoKTtcbiAgdmFyIHJvb3RJRFNldCA9IG5ldyBTZXQoKTtcblxuICBzZXRJdGVtID0g
ZnVuY3Rpb24gKGlkLCBpdGVtKSB7XG4gICAgaXRlbU1hcC5zZXQoaWQsIGl0ZW0pO1xuICB9O1xu
ICBnZXRJdGVtID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgcmV0dXJuIGl0ZW1NYXAuZ2V0KGlkKTtc
biAgfTtcbiAgcmVtb3ZlSXRlbSA9IGZ1bmN0aW9uIChpZCkge1xuICAgIGl0ZW1NYXBbJ2RlbGV0
ZSddKGlkKTtcbiAgfTtcbiAgZ2V0SXRlbUlEcyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4g
QXJyYXkuZnJvbShpdGVtTWFwLmtleXMoKSk7XG4gIH07XG5cbiAgYWRkUm9vdCA9IGZ1bmN0aW9u
IChpZCkge1xuICAgIHJvb3RJRFNldC5hZGQoaWQpO1xuICB9O1xuICByZW1vdmVSb290ID0gZnVu
Y3Rpb24gKGlkKSB7XG4gICAgcm9vdElEU2V0WydkZWxldGUnXShpZCk7XG4gIH07XG4gIGdldFJv
b3RJRHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20ocm9vdElEU2V0Lmtl
eXMoKSk7XG4gIH07XG59IGVsc2Uge1xuICB2YXIgaXRlbUJ5S2V5ID0ge307XG4gIHZhciByb290
QnlLZXkgPSB7fTtcblxuICAvLyBVc2Ugbm9uLW51bWVyaWMga2V5cyB0byBwcmV2ZW50IFY4IHBl
cmZvcm1hbmNlIGlzc3VlczpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0
L3B1bGwvNzIzMlxuICB2YXIgZ2V0S2V5RnJvbUlEID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgcmV0
dXJuICcuJyArIGlkO1xuICB9O1xuICB2YXIgZ2V0SURGcm9tS2V5ID0gZnVuY3Rpb24gKGtleSkg
e1xuICAgIHJldHVybiBwYXJzZUludChrZXkuc3Vic3RyKDEpLCAxMCk7XG4gIH07XG5cbiAgc2V0
SXRlbSA9IGZ1bmN0aW9uIChpZCwgaXRlbSkge1xuICAgIHZhciBrZXkgPSBnZXRLZXlGcm9tSUQo
aWQpO1xuICAgIGl0ZW1CeUtleVtrZXldID0gaXRlbTtcbiAgfTtcbiAgZ2V0SXRlbSA9IGZ1bmN0
aW9uIChpZCkge1xuICAgIHZhciBrZXkgPSBnZXRLZXlGcm9tSUQoaWQpO1xuICAgIHJldHVybiBp
dGVtQnlLZXlba2V5XTtcbiAgfTtcbiAgcmVtb3ZlSXRlbSA9IGZ1bmN0aW9uIChpZCkge1xuICAg
IHZhciBrZXkgPSBnZXRLZXlGcm9tSUQoaWQpO1xuICAgIGRlbGV0ZSBpdGVtQnlLZXlba2V5XTtc
biAgfTtcbiAgZ2V0SXRlbUlEcyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gT2JqZWN0Lmtl
eXMoaXRlbUJ5S2V5KS5tYXAoZ2V0SURGcm9tS2V5KTtcbiAgfTtcblxuICBhZGRSb290ID0gZnVu
Y3Rpb24gKGlkKSB7XG4gICAgdmFyIGtleSA9IGdldEtleUZyb21JRChpZCk7XG4gICAgcm9vdEJ5
S2V5W2tleV0gPSB0cnVlO1xuICB9O1xuICByZW1vdmVSb290ID0gZnVuY3Rpb24gKGlkKSB7XG4g
ICAgdmFyIGtleSA9IGdldEtleUZyb21JRChpZCk7XG4gICAgZGVsZXRlIHJvb3RCeUtleVtrZXld
O1xuICB9O1xuICBnZXRSb290SURzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBPYmplY3Qu
a2V5cyhyb290QnlLZXkpLm1hcChnZXRJREZyb21LZXkpO1xuICB9O1xufVxuXG52YXIgdW5tb3Vu
dGVkSURzID0gW107XG5cbmZ1bmN0aW9uIHB1cmdlRGVlcChpZCkge1xuICB2YXIgaXRlbSA9IGdl
dEl0ZW0oaWQpO1xuICBpZiAoaXRlbSkge1xuICAgIHZhciBjaGlsZElEcyA9IGl0ZW0uY2hpbGRJ
RHM7XG5cbiAgICByZW1vdmVJdGVtKGlkKTtcbiAgICBjaGlsZElEcy5mb3JFYWNoKHB1cmdlRGVl
cCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVDb21wb25lbnRGcmFtZShuYW1lLCBzb3Vy
Y2UsIG93bmVyTmFtZSkge1xuICByZXR1cm4gJ1xcbiAgICBpbiAnICsgKG5hbWUgfHwgJ1Vua25v
d24nKSArIChzb3VyY2UgPyAnIChhdCAnICsgc291cmNlLmZpbGVOYW1lLnJlcGxhY2UoL14uKltc
XFxcXFwvXS8sICcnKSArICc6JyArIHNvdXJjZS5saW5lTnVtYmVyICsgJyknIDogb3duZXJOYW1l
ID8gJyAoY3JlYXRlZCBieSAnICsgb3duZXJOYW1lICsgJyknIDogJycpO1xufVxuXG5mdW5jdGlv
biBnZXREaXNwbGF5TmFtZShlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAg
ICByZXR1cm4gJyNlbXB0eSc7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICdzdHJp
bmcnIHx8IHR5cGVvZiBlbGVtZW50ID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiAnI3RleHQn
O1xuICB9IGVsc2UgaWYgKHR5cGVvZiBlbGVtZW50LnR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAg
cmV0dXJuIGVsZW1lbnQudHlwZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZWxlbWVudC50eXBl
LmRpc3BsYXlOYW1lIHx8IGVsZW1lbnQudHlwZS5uYW1lIHx8ICdVbmtub3duJztcbiAgfVxufVxu
XG5mdW5jdGlvbiBkZXNjcmliZUlEKGlkKSB7XG4gIHZhciBuYW1lID0gUmVhY3RDb21wb25lbnRU
cmVlSG9vay5nZXREaXNwbGF5TmFtZShpZCk7XG4gIHZhciBlbGVtZW50ID0gUmVhY3RDb21wb25l
bnRUcmVlSG9vay5nZXRFbGVtZW50KGlkKTtcbiAgdmFyIG93bmVySUQgPSBSZWFjdENvbXBvbmVu
dFRyZWVIb29rLmdldE93bmVySUQoaWQpO1xuICB2YXIgb3duZXJOYW1lO1xuICBpZiAob3duZXJJ
RCkge1xuICAgIG93bmVyTmFtZSA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0RGlzcGxheU5h
bWUob3duZXJJRCk7XG4gIH1cbiAgIGZhbHNlID8gd2FybmluZyhlbGVtZW50LCAnUmVhY3RDb21w
b25lbnRUcmVlSG9vazogTWlzc2luZyBSZWFjdCBlbGVtZW50IGZvciBkZWJ1Z0lEICVzIHdoZW4g
JyArICdidWlsZGluZyBzdGFjaycsIGlkKSA6IHZvaWQgMDtcbiAgcmV0dXJuIGRlc2NyaWJlQ29t
cG9uZW50RnJhbWUobmFtZSwgZWxlbWVudCAmJiBlbGVtZW50Ll9zb3VyY2UsIG93bmVyTmFtZSk7
XG59XG5cbnZhciBSZWFjdENvbXBvbmVudFRyZWVIb29rID0ge1xuICBvblNldENoaWxkcmVuOiBm
dW5jdGlvbiAoaWQsIG5leHRDaGlsZElEcykge1xuICAgIHZhciBpdGVtID0gZ2V0SXRlbShpZCk7
XG4gICAgIWl0ZW0gPyAgZmFsc2UgPyBpbnZhcmlhbnQoZmFsc2UsICdJdGVtIG11c3QgaGF2ZSBi
ZWVuIHNldCcpIDogX3Byb2RJbnZhcmlhbnQoJzE0NCcpIDogdm9pZCAwO1xuICAgIGl0ZW0uY2hp
bGRJRHMgPSBuZXh0Q2hpbGRJRHM7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5leHRDaGls
ZElEcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG5leHRDaGlsZElEID0gbmV4dENoaWxkSURz
W2ldO1xuICAgICAgdmFyIG5leHRDaGlsZCA9IGdldEl0ZW0obmV4dENoaWxkSUQpO1xuICAgICAg
IW5leHRDaGlsZCA/ICBmYWxzZSA/IGludmFyaWFudChmYWxzZSwgJ0V4cGVjdGVkIGhvb2sgZXZl
bnRzIHRvIGZpcmUgZm9yIHRoZSBjaGlsZCBiZWZvcmUgaXRzIHBhcmVudCBpbmNsdWRlcyBpdCBp
biBvblNldENoaWxkcmVuKCkuJykgOiBfcHJvZEludmFyaWFudCgnMTQwJykgOiB2b2lkIDA7XG4g
ICAgICAhKG5leHRDaGlsZC5jaGlsZElEcyAhPSBudWxsIHx8IHR5cGVvZiBuZXh0Q2hpbGQuZWxl
bWVudCAhPT0gJ29iamVjdCcgfHwgbmV4dENoaWxkLmVsZW1lbnQgPT0gbnVsbCkgPyAgZmFsc2Ug
PyBpbnZhcmlhbnQoZmFsc2UsICdFeHBlY3RlZCBvblNldENoaWxkcmVuKCkgdG8gZmlyZSBmb3Ig
YSBjb250YWluZXIgY2hpbGQgYmVmb3JlIGl0cyBwYXJlbnQgaW5jbHVkZXMgaXQgaW4gb25TZXRD
aGlsZHJlbigpLicpIDogX3Byb2RJbnZhcmlhbnQoJzE0MScpIDogdm9pZCAwO1xuICAgICAgIW5l
eHRDaGlsZC5pc01vdW50ZWQgPyAgZmFsc2UgPyBpbnZhcmlhbnQoZmFsc2UsICdFeHBlY3RlZCBv
bk1vdW50Q29tcG9uZW50KCkgdG8gZmlyZSBmb3IgdGhlIGNoaWxkIGJlZm9yZSBpdHMgcGFyZW50
IGluY2x1ZGVzIGl0IGluIG9uU2V0Q2hpbGRyZW4oKS4nKSA6IF9wcm9kSW52YXJpYW50KCc3MScp
IDogdm9pZCAwO1xuICAgICAgaWYgKG5leHRDaGlsZC5wYXJlbnRJRCA9PSBudWxsKSB7XG4gICAg
ICAgIG5leHRDaGlsZC5wYXJlbnRJRCA9IGlkO1xuICAgICAgICAvLyBUT0RPOiBUaGlzIHNob3Vs
ZG4ndCBiZSBuZWNlc3NhcnkgYnV0IG1vdW50aW5nIGEgbmV3IHJvb3QgZHVyaW5nIGluXG4gICAg
ICAgIC8vIGNvbXBvbmVudFdpbGxNb3VudCBjdXJyZW50bHkgY2F1c2VzIG5vdC15ZXQtbW91bnRl
ZCBjb21wb25lbnRzIHRvXG4gICAgICAgIC8vIGJlIHB1cmdlZCBmcm9tIG91ciB0cmVlIGRhdGEg
c28gdGhlaXIgcGFyZW50IGlkIGlzIG1pc3NpbmcuXG4gICAgICB9XG4gICAgICAhKG5leHRDaGls
ZC5wYXJlbnRJRCA9PT0gaWQpID8gIGZhbHNlID8gaW52YXJpYW50KGZhbHNlLCAnRXhwZWN0ZWQg
b25CZWZvcmVNb3VudENvbXBvbmVudCgpIHBhcmVudCBhbmQgb25TZXRDaGlsZHJlbigpIHRvIGJl
IGNvbnNpc3RlbnQgKCVzIGhhcyBwYXJlbnRzICVzIGFuZCAlcykuJywgbmV4dENoaWxkSUQsIG5l
eHRDaGlsZC5wYXJlbnRJRCwgaWQpIDogX3Byb2RJbnZhcmlhbnQoJzE0MicsIG5leHRDaGlsZElE
LCBuZXh0Q2hpbGQucGFyZW50SUQsIGlkKSA6IHZvaWQgMDtcbiAgICB9XG4gIH0sXG4gIG9uQmVm
b3JlTW91bnRDb21wb25lbnQ6IGZ1bmN0aW9uIChpZCwgZWxlbWVudCwgcGFyZW50SUQpIHtcbiAg
ICB2YXIgaXRlbSA9IHtcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICBwYXJlbnRJRDog
cGFyZW50SUQsXG4gICAgICB0ZXh0OiBudWxsLFxuICAgICAgY2hpbGRJRHM6IFtdLFxuICAgICAg
aXNNb3VudGVkOiBmYWxzZSxcbiAgICAgIHVwZGF0ZUNvdW50OiAwXG4gICAgfTtcbiAgICBzZXRJ
dGVtKGlkLCBpdGVtKTtcbiAgfSxcbiAgb25CZWZvcmVVcGRhdGVDb21wb25lbnQ6IGZ1bmN0aW9u
IChpZCwgZWxlbWVudCkge1xuICAgIHZhciBpdGVtID0gZ2V0SXRlbShpZCk7XG4gICAgaWYgKCFp
dGVtIHx8ICFpdGVtLmlzTW91bnRlZCkge1xuICAgICAgLy8gV2UgbWF5IGVuZCB1cCBoZXJlIGFz
IGEgcmVzdWx0IG9mIHNldFN0YXRlKCkgaW4gY29tcG9uZW50V2lsbFVubW91bnQoKS5cbiAgICAg
IC8vIEluIHRoaXMgY2FzZSwgaWdub3JlIHRoZSBlbGVtZW50LlxuICAgICAgcmV0dXJuO1xuICAg
IH1cbiAgICBpdGVtLmVsZW1lbnQgPSBlbGVtZW50O1xuICB9LFxuICBvbk1vdW50Q29tcG9uZW50
OiBmdW5jdGlvbiAoaWQpIHtcbiAgICB2YXIgaXRlbSA9IGdldEl0ZW0oaWQpO1xuICAgICFpdGVt
ID8gIGZhbHNlID8gaW52YXJpYW50KGZhbHNlLCAnSXRlbSBtdXN0IGhhdmUgYmVlbiBzZXQnKSA6
IF9wcm9kSW52YXJpYW50KCcxNDQnKSA6IHZvaWQgMDtcbiAgICBpdGVtLmlzTW91bnRlZCA9IHRy
dWU7XG4gICAgdmFyIGlzUm9vdCA9IGl0ZW0ucGFyZW50SUQgPT09IDA7XG4gICAgaWYgKGlzUm9v
dCkge1xuICAgICAgYWRkUm9vdChpZCk7XG4gICAgfVxuICB9LFxuICBvblVwZGF0ZUNvbXBvbmVu
dDogZnVuY3Rpb24gKGlkKSB7XG4gICAgdmFyIGl0ZW0gPSBnZXRJdGVtKGlkKTtcbiAgICBpZiAo
IWl0ZW0gfHwgIWl0ZW0uaXNNb3VudGVkKSB7XG4gICAgICAvLyBXZSBtYXkgZW5kIHVwIGhlcmUg
YXMgYSByZXN1bHQgb2Ygc2V0U3RhdGUoKSBpbiBjb21wb25lbnRXaWxsVW5tb3VudCgpLlxuICAg
ICAgLy8gSW4gdGhpcyBjYXNlLCBpZ25vcmUgdGhlIGVsZW1lbnQuXG4gICAgICByZXR1cm47XG4g
ICAgfVxuICAgIGl0ZW0udXBkYXRlQ291bnQrKztcbiAgfSxcbiAgb25Vbm1vdW50Q29tcG9uZW50
OiBmdW5jdGlvbiAoaWQpIHtcbiAgICB2YXIgaXRlbSA9IGdldEl0ZW0oaWQpO1xuICAgIGlmIChp
dGVtKSB7XG4gICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGlmIGl0IGV4aXN0cy5cbiAgICAgIC8v
IGBpdGVtYCBtaWdodCBub3QgZXhpc3QgaWYgaXQgaXMgaW5zaWRlIGFuIGVycm9yIGJvdW5kYXJ5
LCBhbmQgYSBzaWJsaW5nXG4gICAgICAvLyBlcnJvciBib3VuZGFyeSBjaGlsZCB0aHJldyB3aGls
ZSBtb3VudGluZy4gVGhlbiB0aGlzIGluc3RhbmNlIG5ldmVyXG4gICAgICAvLyBnb3QgYSBjaGFu
Y2UgdG8gbW91bnQsIGJ1dCBpdCBzdGlsbCBnZXRzIGFuIHVubW91bnRpbmcgZXZlbnQgZHVyaW5n
XG4gICAgICAvLyB0aGUgZXJyb3IgYm91bmRhcnkgY2xlYW51cC5cbiAgICAgIGl0ZW0uaXNNb3Vu
dGVkID0gZmFsc2U7XG4gICAgICB2YXIgaXNSb290ID0gaXRlbS5wYXJlbnRJRCA9PT0gMDtcbiAg
ICAgIGlmIChpc1Jvb3QpIHtcbiAgICAgICAgcmVtb3ZlUm9vdChpZCk7XG4gICAgICB9XG4gICAg
fVxuICAgIHVubW91bnRlZElEcy5wdXNoKGlkKTtcbiAgfSxcbiAgcHVyZ2VVbm1vdW50ZWRDb21w
b25lbnRzOiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKFJlYWN0Q29tcG9uZW50VHJlZUhvb2suX3By
ZXZlbnRQdXJnaW5nKSB7XG4gICAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIGZvciB0ZXN0aW5n
LlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5tb3Vu
dGVkSURzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaWQgPSB1bm1vdW50ZWRJRHNbaV07XG4g
ICAgICBwdXJnZURlZXAoaWQpO1xuICAgIH1cbiAgICB1bm1vdW50ZWRJRHMubGVuZ3RoID0gMDtc
biAgfSxcbiAgaXNNb3VudGVkOiBmdW5jdGlvbiAoaWQpIHtcbiAgICB2YXIgaXRlbSA9IGdldEl0
ZW0oaWQpO1xuICAgIHJldHVybiBpdGVtID8gaXRlbS5pc01vdW50ZWQgOiBmYWxzZTtcbiAgfSxc
biAgZ2V0Q3VycmVudFN0YWNrQWRkZW5kdW06IGZ1bmN0aW9uICh0b3BFbGVtZW50KSB7XG4gICAg
dmFyIGluZm8gPSAnJztcbiAgICBpZiAodG9wRWxlbWVudCkge1xuICAgICAgdmFyIG5hbWUgPSBn
ZXREaXNwbGF5TmFtZSh0b3BFbGVtZW50KTtcbiAgICAgIHZhciBvd25lciA9IHRvcEVsZW1lbnQu
X293bmVyO1xuICAgICAgaW5mbyArPSBkZXNjcmliZUNvbXBvbmVudEZyYW1lKG5hbWUsIHRvcEVs
ZW1lbnQuX3NvdXJjZSwgb3duZXIgJiYgb3duZXIuZ2V0TmFtZSgpKTtcbiAgICB9XG5cbiAgICB2
YXIgY3VycmVudE93bmVyID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudDtcbiAgICB2YXIgaWQg
PSBjdXJyZW50T3duZXIgJiYgY3VycmVudE93bmVyLl9kZWJ1Z0lEO1xuXG4gICAgaW5mbyArPSBS
ZWFjdENvbXBvbmVudFRyZWVIb29rLmdldFN0YWNrQWRkZW5kdW1CeUlEKGlkKTtcbiAgICByZXR1
cm4gaW5mbztcbiAgfSxcbiAgZ2V0U3RhY2tBZGRlbmR1bUJ5SUQ6IGZ1bmN0aW9uIChpZCkge1xu
ICAgIHZhciBpbmZvID0gJyc7XG4gICAgd2hpbGUgKGlkKSB7XG4gICAgICBpbmZvICs9IGRlc2Ny
aWJlSUQoaWQpO1xuICAgICAgaWQgPSBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldFBhcmVudElE
KGlkKTtcbiAgICB9XG4gICAgcmV0dXJuIGluZm87XG4gIH0sXG4gIGdldENoaWxkSURzOiBmdW5j
dGlvbiAoaWQpIHtcbiAgICB2YXIgaXRlbSA9IGdldEl0ZW0oaWQpO1xuICAgIHJldHVybiBpdGVt
ID8gaXRlbS5jaGlsZElEcyA6IFtdO1xuICB9LFxuICBnZXREaXNwbGF5TmFtZTogZnVuY3Rpb24g
KGlkKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldEVsZW1l
bnQoaWQpO1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxu
ICAgIHJldHVybiBnZXREaXNwbGF5TmFtZShlbGVtZW50KTtcbiAgfSxcbiAgZ2V0RWxlbWVudDog
ZnVuY3Rpb24gKGlkKSB7XG4gICAgdmFyIGl0ZW0gPSBnZXRJdGVtKGlkKTtcbiAgICByZXR1cm4g
aXRlbSA/IGl0ZW0uZWxlbWVudCA6IG51bGw7XG4gIH0sXG4gIGdldE93bmVySUQ6IGZ1bmN0aW9u
IChpZCkge1xuICAgIHZhciBlbGVtZW50ID0gUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXRFbGVt
ZW50KGlkKTtcbiAgICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQuX293bmVyKSB7XG4gICAgICBy
ZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGVsZW1lbnQuX293bmVyLl9kZWJ1Z0lEO1xu
ICB9LFxuICBnZXRQYXJlbnRJRDogZnVuY3Rpb24gKGlkKSB7XG4gICAgdmFyIGl0ZW0gPSBnZXRJ
dGVtKGlkKTtcbiAgICByZXR1cm4gaXRlbSA/IGl0ZW0ucGFyZW50SUQgOiBudWxsO1xuICB9LFxu
ICBnZXRTb3VyY2U6IGZ1bmN0aW9uIChpZCkge1xuICAgIHZhciBpdGVtID0gZ2V0SXRlbShpZCk7
XG4gICAgdmFyIGVsZW1lbnQgPSBpdGVtID8gaXRlbS5lbGVtZW50IDogbnVsbDtcbiAgICB2YXIg
c291cmNlID0gZWxlbWVudCAhPSBudWxsID8gZWxlbWVudC5fc291cmNlIDogbnVsbDtcbiAgICBy
ZXR1cm4gc291cmNlO1xuICB9LFxuICBnZXRUZXh0OiBmdW5jdGlvbiAoaWQpIHtcbiAgICB2YXIg
ZWxlbWVudCA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0RWxlbWVudChpZCk7XG4gICAgaWYg
KHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4g
ICAgfSBlbHNlIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVy
biAnJyArIGVsZW1lbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1c
biAgfSxcbiAgZ2V0VXBkYXRlQ291bnQ6IGZ1bmN0aW9uIChpZCkge1xuICAgIHZhciBpdGVtID0g
Z2V0SXRlbShpZCk7XG4gICAgcmV0dXJuIGl0ZW0gPyBpdGVtLnVwZGF0ZUNvdW50IDogMDtcbiAg
fSxcblxuXG4gIGdldFJvb3RJRHM6IGdldFJvb3RJRHMsXG4gIGdldFJlZ2lzdGVyZWRJRHM6IGdl
dEl0ZW1JRHMsXG5cbiAgcHVzaE5vblN0YW5kYXJkV2FybmluZ1N0YWNrOiBmdW5jdGlvbiAoaXND
cmVhdGluZ0VsZW1lbnQsIGN1cnJlbnRTb3VyY2UpIHtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUu
cmVhY3RTdGFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAg
IHZhciBzdGFjayA9IFtdO1xuICAgIHZhciBjdXJyZW50T3duZXIgPSBSZWFjdEN1cnJlbnRPd25l
ci5jdXJyZW50O1xuICAgIHZhciBpZCA9IGN1cnJlbnRPd25lciAmJiBjdXJyZW50T3duZXIuX2Rl
YnVnSUQ7XG5cbiAgICB0cnkge1xuICAgICAgaWYgKGlzQ3JlYXRpbmdFbGVtZW50KSB7XG4gICAg
ICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgIG5hbWU6IGlkID8gUmVhY3RDb21wb25lbnRUcmVl
SG9vay5nZXREaXNwbGF5TmFtZShpZCkgOiBudWxsLFxuICAgICAgICAgIGZpbGVOYW1lOiBjdXJy
ZW50U291cmNlID8gY3VycmVudFNvdXJjZS5maWxlTmFtZSA6IG51bGwsXG4gICAgICAgICAgbGlu
ZU51bWJlcjogY3VycmVudFNvdXJjZSA/IGN1cnJlbnRTb3VyY2UubGluZU51bWJlciA6IG51bGxc
biAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChpZCkge1xuICAgICAgICB2YXIg
ZWxlbWVudCA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0RWxlbWVudChpZCk7XG4gICAgICAg
IHZhciBwYXJlbnRJRCA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0UGFyZW50SUQoaWQpO1xu
ICAgICAgICB2YXIgb3duZXJJRCA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0T3duZXJJRChp
ZCk7XG4gICAgICAgIHZhciBvd25lck5hbWUgPSBvd25lcklEID8gUmVhY3RDb21wb25lbnRUcmVl
SG9vay5nZXREaXNwbGF5TmFtZShvd25lcklEKSA6IG51bGw7XG4gICAgICAgIHZhciBzb3VyY2Ug
PSBlbGVtZW50ICYmIGVsZW1lbnQuX3NvdXJjZTtcbiAgICAgICAgc3RhY2sucHVzaCh7XG4gICAg
ICAgICAgbmFtZTogb3duZXJOYW1lLFxuICAgICAgICAgIGZpbGVOYW1lOiBzb3VyY2UgPyBzb3Vy
Y2UuZmlsZU5hbWUgOiBudWxsLFxuICAgICAgICAgIGxpbmVOdW1iZXI6IHNvdXJjZSA/IHNvdXJj
ZS5saW5lTnVtYmVyIDogbnVsbFxuICAgICAgICB9KTtcbiAgICAgICAgaWQgPSBwYXJlbnRJRDtc
biAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIEludGVybmFsIHN0YXRlIGlz
IG1lc3NlZCB1cC5cbiAgICAgIC8vIFN0b3AgYnVpbGRpbmcgdGhlIHN0YWNrIChpdCdzIGp1c3Qg
YSBuaWNlIHRvIGhhdmUpLlxuICAgIH1cblxuICAgIGNvbnNvbGUucmVhY3RTdGFjayhzdGFjayk7
XG4gIH0sXG4gIHBvcE5vblN0YW5kYXJkV2FybmluZ1N0YWNrOiBmdW5jdGlvbiAoKSB7XG4gICAg
aWYgKHR5cGVvZiBjb25zb2xlLnJlYWN0U3RhY2tFbmQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAg
IHJldHVybjtcbiAgICB9XG4gICAgY29uc29sZS5yZWFjdFN0YWNrRW5kKCk7XG4gIH1cbn07XG5c
bm1vZHVsZS5leHBvcnRzID0gUmVhY3RDb21wb25lbnRUcmVlSG9vaztcblxuLyoqKi8gfSksXG4v
KiA3OSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVp
cmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG4vKipcbiAqIENvcHlyaWdodCAoYykgMjAx
My1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4g
KiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5z
ZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2Yg
dGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0
cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3Rvcnku
XG4gKlxuICogQHR5cGVjaGVja3NcbiAqL1xuXG52YXIgZW1wdHlGdW5jdGlvbiA9IF9fd2VicGFj
a19yZXF1aXJlX18oNik7XG5cbi8qKlxuICogVXBzdHJlYW0gdmVyc2lvbiBvZiBldmVudCBsaXN0
ZW5lci4gRG9lcyBub3QgdGFrZSBpbnRvIGFjY291bnQgc3BlY2lmaWNcbiAqIG5hdHVyZSBvZiBw
bGF0Zm9ybS5cbiAqL1xudmFyIEV2ZW50TGlzdGVuZXIgPSB7XG4gIC8qKlxuICAgKiBMaXN0ZW4g
dG8gRE9NIGV2ZW50cyBkdXJpbmcgdGhlIGJ1YmJsZSBwaGFzZS5cbiAgICpcbiAgICogQHBhcmFt
IHtET01FdmVudFRhcmdldH0gdGFyZ2V0IERPTSBlbGVtZW50IHRvIHJlZ2lzdGVyIGxpc3RlbmVy
IG9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRUeXBlIEV2ZW50IHR5cGUsIGUuZy4gJ2Ns
aWNrJyBvciAnbW91c2VvdmVyJy5cbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgQ2Fs
bGJhY2sgZnVuY3Rpb24uXG4gICAqIEByZXR1cm4ge29iamVjdH0gT2JqZWN0IHdpdGggYSBgcmVt
b3ZlYCBtZXRob2QuXG4gICAqL1xuICBsaXN0ZW46IGZ1bmN0aW9uIGxpc3Rlbih0YXJnZXQsIGV2
ZW50VHlwZSwgY2FsbGJhY2spIHtcbiAgICBpZiAodGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIpIHtc
biAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgY2FsbGJhY2ssIGZhbHNl
KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge1xu
ICAgICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgY2FsbGJhY2ss
IGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHRhcmdldC5hdHRh
Y2hFdmVudCkge1xuICAgICAgdGFyZ2V0LmF0dGFjaEV2ZW50KCdvbicgKyBldmVudFR5cGUsIGNh
bGxiYWNrKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3Zl
KCkge1xuICAgICAgICAgIHRhcmdldC5kZXRhY2hFdmVudCgnb24nICsgZXZlbnRUeXBlLCBjYWxs
YmFjayk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBM
aXN0ZW4gdG8gRE9NIGV2ZW50cyBkdXJpbmcgdGhlIGNhcHR1cmUgcGhhc2UuXG4gICAqXG4gICAq
IEBwYXJhbSB7RE9NRXZlbnRUYXJnZXR9IHRhcmdldCBET00gZWxlbWVudCB0byByZWdpc3RlciBs
aXN0ZW5lciBvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50VHlwZSBFdmVudCB0eXBlLCBl
LmcuICdjbGljaycgb3IgJ21vdXNlb3ZlcicuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxi
YWNrIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKiBAcmV0dXJuIHtvYmplY3R9IE9iamVjdCB3aXRo
IGEgYHJlbW92ZWAgbWV0aG9kLlxuICAgKi9cbiAgY2FwdHVyZTogZnVuY3Rpb24gY2FwdHVyZSh0
YXJnZXQsIGV2ZW50VHlwZSwgY2FsbGJhY2spIHtcbiAgICBpZiAodGFyZ2V0LmFkZEV2ZW50TGlz
dGVuZXIpIHtcbiAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgY2FsbGJh
Y2ssIHRydWUpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1v
dmUoKSB7XG4gICAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBj
YWxsYmFjaywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAg
IGlmIChmYWxzZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdBdHRlbXB0ZWQgdG8gbGlzdGVu
IHRvIGV2ZW50cyBkdXJpbmcgdGhlIGNhcHR1cmUgcGhhc2Ugb24gYSAnICsgJ2Jyb3dzZXIgdGhh
dCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjYXB0dXJlIHBoYXNlLiBZb3VyIGFwcGxpY2F0aW9uICcg
KyAnd2lsbCBub3QgcmVjZWl2ZSBzb21lIGV2ZW50cy4nKTtcbiAgICAgIH1cbiAgICAgIHJldHVy
biB7XG4gICAgICAgIHJlbW92ZTogZW1wdHlGdW5jdGlvblxuICAgICAgfTtcbiAgICB9XG4gIH0s
XG5cbiAgcmVnaXN0ZXJEZWZhdWx0OiBmdW5jdGlvbiByZWdpc3RlckRlZmF1bHQoKSB7fVxufTtc
blxubW9kdWxlLmV4cG9ydHMgPSBFdmVudExpc3RlbmVyO1xuXG4vKioqLyB9KSxcbi8qIDgwICov
XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7
XG5cblwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNl
Ym9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBj
b2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVc
biAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJl
ZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQg
aW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cblxu
XG52YXIgUmVhY3RET01TZWxlY3Rpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3MSk7XG5cbnZh
ciBjb250YWluc05vZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3Myk7XG52YXIgZm9jdXNOb2Rl
ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2OCk7XG52YXIgZ2V0QWN0aXZlRWxlbWVudCA9IF9fd2Vi
cGFja19yZXF1aXJlX18oODEpO1xuXG5mdW5jdGlvbiBpc0luRG9jdW1lbnQobm9kZSkge1xuICBy
ZXR1cm4gY29udGFpbnNOb2RlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgbm9kZSk7XG59XG5c
bi8qKlxuICogQFJlYWN0SW5wdXRTZWxlY3Rpb246IFJlYWN0IGlucHV0IHNlbGVjdGlvbiBtb2R1
bGUuIEJhc2VkIG9uIFNlbGVjdGlvbi5qcyxcbiAqIGJ1dCBtb2RpZmllZCB0byBiZSBzdWl0YWJs
ZSBmb3IgcmVhY3QgYW5kIGhhcyBhIGNvdXBsZSBvZiBidWcgZml4ZXMgKGRvZXNuJ3RcbiAqIGFz
c3VtZSBidXR0b25zIGhhdmUgcmFuZ2Ugc2VsZWN0aW9ucyBhbGxvd2VkKS5cbiAqIElucHV0IHNl
bGVjdGlvbiBtb2R1bGUgZm9yIFJlYWN0LlxuICovXG52YXIgUmVhY3RJbnB1dFNlbGVjdGlvbiA9
IHtcbiAgaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzOiBmdW5jdGlvbiAoZWxlbSkge1xuICAgIHZh
ciBub2RlTmFtZSA9IGVsZW0gJiYgZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93
ZXJDYXNlKCk7XG4gICAgcmV0dXJuIG5vZGVOYW1lICYmIChub2RlTmFtZSA9PT0gJ2lucHV0JyAm
JiBlbGVtLnR5cGUgPT09ICd0ZXh0JyB8fCBub2RlTmFtZSA9PT0gJ3RleHRhcmVhJyB8fCBlbGVt
LmNvbnRlbnRFZGl0YWJsZSA9PT0gJ3RydWUnKTtcbiAgfSxcblxuICBnZXRTZWxlY3Rpb25JbmZv
cm1hdGlvbjogZnVuY3Rpb24gKCkge1xuICAgIHZhciBmb2N1c2VkRWxlbSA9IGdldEFjdGl2ZUVs
ZW1lbnQoKTtcbiAgICByZXR1cm4ge1xuICAgICAgZm9jdXNlZEVsZW06IGZvY3VzZWRFbGVtLFxu
ICAgICAgc2VsZWN0aW9uUmFuZ2U6IFJlYWN0SW5wdXRTZWxlY3Rpb24uaGFzU2VsZWN0aW9uQ2Fw
YWJpbGl0aWVzKGZvY3VzZWRFbGVtKSA/IFJlYWN0SW5wdXRTZWxlY3Rpb24uZ2V0U2VsZWN0aW9u
KGZvY3VzZWRFbGVtKSA6IG51bGxcbiAgICB9O1xuICB9LFxuXG4gIC8qKlxuICAgKiBAcmVzdG9y
ZVNlbGVjdGlvbjogSWYgYW55IHNlbGVjdGlvbiBpbmZvcm1hdGlvbiB3YXMgcG90ZW50aWFsbHkg
bG9zdCxcbiAgICogcmVzdG9yZSBpdC4gVGhpcyBpcyB1c2VmdWwgd2hlbiBwZXJmb3JtaW5nIG9w
ZXJhdGlvbnMgdGhhdCBjb3VsZCByZW1vdmUgZG9tXG4gICAqIG5vZGVzIGFuZCBwbGFjZSB0aGVt
IGJhY2sgaW4sIHJlc3VsdGluZyBpbiBmb2N1cyBiZWluZyBsb3N0LlxuICAgKi9cbiAgcmVzdG9y
ZVNlbGVjdGlvbjogZnVuY3Rpb24gKHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24pIHtcbiAgICB2
YXIgY3VyRm9jdXNlZEVsZW0gPSBnZXRBY3RpdmVFbGVtZW50KCk7XG4gICAgdmFyIHByaW9yRm9j
dXNlZEVsZW0gPSBwcmlvclNlbGVjdGlvbkluZm9ybWF0aW9uLmZvY3VzZWRFbGVtO1xuICAgIHZh
ciBwcmlvclNlbGVjdGlvblJhbmdlID0gcHJpb3JTZWxlY3Rpb25JbmZvcm1hdGlvbi5zZWxlY3Rp
b25SYW5nZTtcbiAgICBpZiAoY3VyRm9jdXNlZEVsZW0gIT09IHByaW9yRm9jdXNlZEVsZW0gJiYg
aXNJbkRvY3VtZW50KHByaW9yRm9jdXNlZEVsZW0pKSB7XG4gICAgICBpZiAoUmVhY3RJbnB1dFNl
bGVjdGlvbi5oYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMocHJpb3JGb2N1c2VkRWxlbSkpIHtcbiAg
ICAgICAgUmVhY3RJbnB1dFNlbGVjdGlvbi5zZXRTZWxlY3Rpb24ocHJpb3JGb2N1c2VkRWxlbSwg
cHJpb3JTZWxlY3Rpb25SYW5nZSk7XG4gICAgICB9XG4gICAgICBmb2N1c05vZGUocHJpb3JGb2N1
c2VkRWxlbSk7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBAZ2V0U2VsZWN0aW9uOiBHZXRz
IHRoZSBzZWxlY3Rpb24gYm91bmRzIG9mIGEgZm9jdXNlZCB0ZXh0YXJlYSwgaW5wdXQgb3JcbiAg
ICogY29udGVudEVkaXRhYmxlIG5vZGUuXG4gICAqIC1AaW5wdXQ6IExvb2sgdXAgc2VsZWN0aW9u
IGJvdW5kcyBvZiB0aGlzIGlucHV0XG4gICAqIC1AcmV0dXJuIHtzdGFydDogc2VsZWN0aW9uU3Rh
cnQsIGVuZDogc2VsZWN0aW9uRW5kfVxuICAgKi9cbiAgZ2V0U2VsZWN0aW9uOiBmdW5jdGlvbiAo
aW5wdXQpIHtcbiAgICB2YXIgc2VsZWN0aW9uO1xuXG4gICAgaWYgKCdzZWxlY3Rpb25TdGFydCcg
aW4gaW5wdXQpIHtcbiAgICAgIC8vIE1vZGVybiBicm93c2VyIHdpdGggaW5wdXQgb3IgdGV4dGFy
ZWEuXG4gICAgICBzZWxlY3Rpb24gPSB7XG4gICAgICAgIHN0YXJ0OiBpbnB1dC5zZWxlY3Rpb25T
dGFydCxcbiAgICAgICAgZW5kOiBpbnB1dC5zZWxlY3Rpb25FbmRcbiAgICAgIH07XG4gICAgfSBl
bHNlIGlmIChkb2N1bWVudC5zZWxlY3Rpb24gJiYgaW5wdXQubm9kZU5hbWUgJiYgaW5wdXQubm9k
ZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0Jykge1xuICAgICAgLy8gSUU4IGlucHV0Llxu
ICAgICAgdmFyIHJhbmdlID0gZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7XG4gICAg
ICAvLyBUaGVyZSBjYW4gb25seSBiZSBvbmUgc2VsZWN0aW9uIHBlciBkb2N1bWVudCBpbiBJRSwg
c28gaXQgbXVzdFxuICAgICAgLy8gYmUgaW4gb3VyIGVsZW1lbnQuXG4gICAgICBpZiAocmFuZ2Uu
cGFyZW50RWxlbWVudCgpID09PSBpbnB1dCkge1xuICAgICAgICBzZWxlY3Rpb24gPSB7XG4gICAg
ICAgICAgc3RhcnQ6IC1yYW5nZS5tb3ZlU3RhcnQoJ2NoYXJhY3RlcicsIC1pbnB1dC52YWx1ZS5s
ZW5ndGgpLFxuICAgICAgICAgIGVuZDogLXJhbmdlLm1vdmVFbmQoJ2NoYXJhY3RlcicsIC1pbnB1
dC52YWx1ZS5sZW5ndGgpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAg
IC8vIENvbnRlbnQgZWRpdGFibGUgb3Igb2xkIElFIHRleHRhcmVhLlxuICAgICAgc2VsZWN0aW9u
ID0gUmVhY3RET01TZWxlY3Rpb24uZ2V0T2Zmc2V0cyhpbnB1dCk7XG4gICAgfVxuXG4gICAgcmV0
dXJuIHNlbGVjdGlvbiB8fCB7IHN0YXJ0OiAwLCBlbmQ6IDAgfTtcbiAgfSxcblxuICAvKipcbiAg
ICogQHNldFNlbGVjdGlvbjogU2V0cyB0aGUgc2VsZWN0aW9uIGJvdW5kcyBvZiBhIHRleHRhcmVh
IG9yIGlucHV0IGFuZCBmb2N1c2VzXG4gICAqIHRoZSBpbnB1dC5cbiAgICogLUBpbnB1dCAgICAg
U2V0IHNlbGVjdGlvbiBib3VuZHMgb2YgdGhpcyBpbnB1dCBvciB0ZXh0YXJlYVxuICAgKiAtQG9m
ZnNldHMgICBPYmplY3Qgb2Ygc2FtZSBmb3JtIHRoYXQgaXMgcmV0dXJuZWQgZnJvbSBnZXQqXG4g
ICAqL1xuICBzZXRTZWxlY3Rpb246IGZ1bmN0aW9uIChpbnB1dCwgb2Zmc2V0cykge1xuICAgIHZh
ciBzdGFydCA9IG9mZnNldHMuc3RhcnQ7XG4gICAgdmFyIGVuZCA9IG9mZnNldHMuZW5kO1xuICAg
IGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZW5kID0gc3RhcnQ7XG4gICAgfVxuXG4g
ICAgaWYgKCdzZWxlY3Rpb25TdGFydCcgaW4gaW5wdXQpIHtcbiAgICAgIGlucHV0LnNlbGVjdGlv
blN0YXJ0ID0gc3RhcnQ7XG4gICAgICBpbnB1dC5zZWxlY3Rpb25FbmQgPSBNYXRoLm1pbihlbmQs
IGlucHV0LnZhbHVlLmxlbmd0aCk7XG4gICAgfSBlbHNlIGlmIChkb2N1bWVudC5zZWxlY3Rpb24g
JiYgaW5wdXQubm9kZU5hbWUgJiYgaW5wdXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lu
cHV0Jykge1xuICAgICAgdmFyIHJhbmdlID0gaW5wdXQuY3JlYXRlVGV4dFJhbmdlKCk7XG4gICAg
ICByYW5nZS5jb2xsYXBzZSh0cnVlKTtcbiAgICAgIHJhbmdlLm1vdmVTdGFydCgnY2hhcmFjdGVy
Jywgc3RhcnQpO1xuICAgICAgcmFuZ2UubW92ZUVuZCgnY2hhcmFjdGVyJywgZW5kIC0gc3RhcnQp
O1xuICAgICAgcmFuZ2Uuc2VsZWN0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIFJlYWN0RE9NU2Vs
ZWN0aW9uLnNldE9mZnNldHMoaW5wdXQsIG9mZnNldHMpO1xuICAgIH1cbiAgfVxufTtcblxubW9k
dWxlLmV4cG9ydHMgPSBSZWFjdElucHV0U2VsZWN0aW9uO1xuXG4vKioqLyB9KSxcbi8qIDgxICov
XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7
XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNl
bnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMg
c291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5k
IGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNv
dXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBi
ZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4g
KiBAdHlwZWNoZWNrc1xuICovXG5cbi8qIGVzbGludC1kaXNhYmxlIGZiLXd3dy90eXBlb2YtdW5k
ZWZpbmVkICovXG5cbi8qKlxuICogU2FtZSBhcyBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGJ1dCB3
cmFwcyBpbiBhIHRyeS1jYXRjaCBibG9jay4gSW4gSUUgaXQgaXNcbiAqIG5vdCBzYWZlIHRvIGNh
bGwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBpZiB0aGVyZSBpcyBub3RoaW5nIGZvY3VzZWQuXG4g
KlxuICogVGhlIGFjdGl2ZUVsZW1lbnQgd2lsbCBiZSBudWxsIG9ubHkgaWYgdGhlIGRvY3VtZW50
IG9yIGRvY3VtZW50IGJvZHkgaXMgbm90XG4gKiB5ZXQgZGVmaW5lZC5cbiAqXG4gKiBAcGFyYW0g
ez9ET01Eb2N1bWVudH0gZG9jIERlZmF1bHRzIHRvIGN1cnJlbnQgZG9jdW1lbnQuXG4gKiBAcmV0
dXJuIHs/RE9NRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gZ2V0QWN0aXZlRWxlbWVudChkb2MpIC8q
P0RPTUVsZW1lbnQqL3tcbiAgZG9jID0gZG9jIHx8ICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRl
ZmluZWQnID8gZG9jdW1lbnQgOiB1bmRlZmluZWQpO1xuICBpZiAodHlwZW9mIGRvYyA9PT0gJ3Vu
ZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICB0cnkge1xuICAgIHJldHVybiBk
b2MuYWN0aXZlRWxlbWVudCB8fCBkb2MuYm9keTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVy
biBkb2MuYm9keTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEFjdGl2ZUVsZW1lbnQ7
XG5cbi8qKiovIH0pLFxuLyogODIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMs
IF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIENvcHly
aWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVk
LlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHls
ZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVj
dG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRl
bnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRp
cmVjdG9yeS5cbiAqXG4gKi9cblxuXG5cbnZhciBfcHJvZEludmFyaWFudCA9IF9fd2VicGFja19y
ZXF1aXJlX18oMik7XG5cbnZhciBET01MYXp5VHJlZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTcp
O1xudmFyIERPTVByb3BlcnR5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7XG52YXIgUmVhY3Qg
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcbnZhciBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIg
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI4KTtcbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IF9fd2Vi
cGFja19yZXF1aXJlX18oMTApO1xudmFyIFJlYWN0RE9NQ29tcG9uZW50VHJlZSA9IF9fd2VicGFj
a19yZXF1aXJlX18oNCk7XG52YXIgUmVhY3RET01Db250YWluZXJJbmZvID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygxODgpO1xudmFyIFJlYWN0RE9NRmVhdHVyZUZsYWdzID0gX193ZWJwYWNrX3JlcXVp
cmVfXygxODkpO1xudmFyIFJlYWN0RmVhdHVyZUZsYWdzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2
Myk7XG52YXIgUmVhY3RJbnN0YW5jZU1hcCA9IF9fd2VicGFja19yZXF1aXJlX18oMjIpO1xudmFy
IFJlYWN0SW5zdHJ1bWVudGF0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcbnZhciBSZWFj
dE1hcmt1cENoZWNrc3VtID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTApO1xudmFyIFJlYWN0UmVj
b25jaWxlciA9IF9fd2VicGFja19yZXF1aXJlX18oMTYpO1xudmFyIFJlYWN0VXBkYXRlUXVldWUg
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ1KTtcbnZhciBSZWFjdFVwZGF0ZXMgPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKDgpO1xuXG52YXIgZW1wdHlPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIz
KTtcbnZhciBpbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3
Myk7XG52YXIgaW52YXJpYW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciBzZXRJbm5l
ckhUTUwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2KTtcbnZhciBzaG91bGRVcGRhdGVSZWFjdENv
bXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oNDMpO1xudmFyIHdhcm5pbmcgPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKDEpO1xuXG52YXIgQVRUUl9OQU1FID0gRE9NUHJvcGVydHkuSURfQVRUUklC
VVRFX05BTUU7XG52YXIgUk9PVF9BVFRSX05BTUUgPSBET01Qcm9wZXJ0eS5ST09UX0FUVFJJQlVU
RV9OQU1FO1xuXG52YXIgRUxFTUVOVF9OT0RFX1RZUEUgPSAxO1xudmFyIERPQ19OT0RFX1RZUEUg
PSA5O1xudmFyIERPQ1VNRU5UX0ZSQUdNRU5UX05PREVfVFlQRSA9IDExO1xuXG52YXIgaW5zdGFu
Y2VzQnlSZWFjdFJvb3RJRCA9IHt9O1xuXG4vKipcbiAqIEZpbmRzIHRoZSBpbmRleCBvZiB0aGUg
Zmlyc3QgY2hhcmFjdGVyXG4gKiB0aGF0J3Mgbm90IGNvbW1vbiBiZXR3ZWVuIHRoZSB0d28gZ2l2
ZW4gc3RyaW5ncy5cbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgY2hh
cmFjdGVyIHdoZXJlIHRoZSBzdHJpbmdzIGRpdmVyZ2VcbiAqL1xuZnVuY3Rpb24gZmlyc3REaWZm
ZXJlbmNlSW5kZXgoc3RyaW5nMSwgc3RyaW5nMikge1xuICB2YXIgbWluTGVuID0gTWF0aC5taW4o
c3RyaW5nMS5sZW5ndGgsIHN0cmluZzIubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBt
aW5MZW47IGkrKykge1xuICAgIGlmIChzdHJpbmcxLmNoYXJBdChpKSAhPT0gc3RyaW5nMi5jaGFy
QXQoaSkpIHtcbiAgICAgIHJldHVybiBpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3RyaW5nMS5s
ZW5ndGggPT09IHN0cmluZzIubGVuZ3RoID8gLTEgOiBtaW5MZW47XG59XG5cbi8qKlxuICogQHBh
cmFtIHtET01FbGVtZW50fERPTURvY3VtZW50fSBjb250YWluZXIgRE9NIGVsZW1lbnQgdGhhdCBt
YXkgY29udGFpblxuICogYSBSZWFjdCBjb21wb25lbnRcbiAqIEByZXR1cm4gez8qfSBET00gZWxl
bWVudCB0aGF0IG1heSBoYXZlIHRoZSByZWFjdFJvb3QgSUQsIG9yIG51bGwuXG4gKi9cbmZ1bmN0
aW9uIGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpIHtcbiAgaWYgKCFj
b250YWluZXIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChjb250YWluZXIubm9k
ZVR5cGUgPT09IERPQ19OT0RFX1RZUEUpIHtcbiAgICByZXR1cm4gY29udGFpbmVyLmRvY3VtZW50
RWxlbWVudDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4g
IH1cbn1cblxuZnVuY3Rpb24gaW50ZXJuYWxHZXRJRChub2RlKSB7XG4gIC8vIElmIG5vZGUgaXMg
c29tZXRoaW5nIGxpa2UgYSB3aW5kb3csIGRvY3VtZW50LCBvciB0ZXh0IG5vZGUsIG5vbmUgb2Zc
biAgLy8gd2hpY2ggc3VwcG9ydCBhdHRyaWJ1dGVzIG9yIGEgLmdldEF0dHJpYnV0ZSBtZXRob2Qs
IGdyYWNlZnVsbHkgcmV0dXJuXG4gIC8vIHRoZSBlbXB0eSBzdHJpbmcsIGFzIGlmIHRoZSBhdHRy
aWJ1dGUgd2VyZSBtaXNzaW5nLlxuICByZXR1cm4gbm9kZS5nZXRBdHRyaWJ1dGUgJiYgbm9kZS5n
ZXRBdHRyaWJ1dGUoQVRUUl9OQU1FKSB8fCAnJztcbn1cblxuLyoqXG4gKiBNb3VudHMgdGhpcyBj
b21wb25lbnQgYW5kIGluc2VydHMgaXQgaW50byB0aGUgRE9NLlxuICpcbiAqIEBwYXJhbSB7UmVh
Y3RDb21wb25lbnR9IGNvbXBvbmVudEluc3RhbmNlIFRoZSBpbnN0YW5jZSB0byBtb3VudC5cbiAq
IEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIERPTSBlbGVtZW50IHRvIG1vdW50IGludG8u
XG4gKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gKiBA
cGFyYW0ge2Jvb2xlYW59IHNob3VsZFJldXNlTWFya3VwIElmIHRydWUsIGRvIG5vdCBpbnNlcnQg
bWFya3VwXG4gKi9cbmZ1bmN0aW9uIG1vdW50Q29tcG9uZW50SW50b05vZGUod3JhcHBlckluc3Rh
bmNlLCBjb250YWluZXIsIHRyYW5zYWN0aW9uLCBzaG91bGRSZXVzZU1hcmt1cCwgY29udGV4dCkg
e1xuICB2YXIgbWFya2VyTmFtZTtcbiAgaWYgKFJlYWN0RmVhdHVyZUZsYWdzLmxvZ1RvcExldmVs
UmVuZGVycykge1xuICAgIHZhciB3cmFwcGVkRWxlbWVudCA9IHdyYXBwZXJJbnN0YW5jZS5fY3Vy
cmVudEVsZW1lbnQucHJvcHMuY2hpbGQ7XG4gICAgdmFyIHR5cGUgPSB3cmFwcGVkRWxlbWVudC50
eXBlO1xuICAgIG1hcmtlck5hbWUgPSAnUmVhY3QgbW91bnQ6ICcgKyAodHlwZW9mIHR5cGUgPT09
ICdzdHJpbmcnID8gdHlwZSA6IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lKTtcbiAgICBj
b25zb2xlLnRpbWUobWFya2VyTmFtZSk7XG4gIH1cblxuICB2YXIgbWFya3VwID0gUmVhY3RSZWNv
bmNpbGVyLm1vdW50Q29tcG9uZW50KHdyYXBwZXJJbnN0YW5jZSwgdHJhbnNhY3Rpb24sIG51bGws
IFJlYWN0RE9NQ29udGFpbmVySW5mbyh3cmFwcGVySW5zdGFuY2UsIGNvbnRhaW5lciksIGNvbnRl
eHQsIDAgLyogcGFyZW50RGVidWdJRCAqL1xuICApO1xuXG4gIGlmIChtYXJrZXJOYW1lKSB7XG4g
ICAgY29uc29sZS50aW1lRW5kKG1hcmtlck5hbWUpO1xuICB9XG5cbiAgd3JhcHBlckluc3RhbmNl
Ll9yZW5kZXJlZENvbXBvbmVudC5fdG9wTGV2ZWxXcmFwcGVyID0gd3JhcHBlckluc3RhbmNlO1xu
ICBSZWFjdE1vdW50Ll9tb3VudEltYWdlSW50b05vZGUobWFya3VwLCBjb250YWluZXIsIHdyYXBw
ZXJJbnN0YW5jZSwgc2hvdWxkUmV1c2VNYXJrdXAsIHRyYW5zYWN0aW9uKTtcbn1cblxuLyoqXG4g
KiBCYXRjaGVkIG1vdW50LlxuICpcbiAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGNvbXBvbmVu
dEluc3RhbmNlIFRoZSBpbnN0YW5jZSB0byBtb3VudC5cbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0g
Y29udGFpbmVyIERPTSBlbGVtZW50IHRvIG1vdW50IGludG8uXG4gKiBAcGFyYW0ge2Jvb2xlYW59
IHNob3VsZFJldXNlTWFya3VwIElmIHRydWUsIGRvIG5vdCBpbnNlcnQgbWFya3VwXG4gKi9cbmZ1
bmN0aW9uIGJhdGNoZWRNb3VudENvbXBvbmVudEludG9Ob2RlKGNvbXBvbmVudEluc3RhbmNlLCBj
b250YWluZXIsIHNob3VsZFJldXNlTWFya3VwLCBjb250ZXh0KSB7XG4gIHZhciB0cmFuc2FjdGlv
biA9IFJlYWN0VXBkYXRlcy5SZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uLmdldFBvb2xlZChcbiAg
LyogdXNlQ3JlYXRlRWxlbWVudCAqL1xuICAhc2hvdWxkUmV1c2VNYXJrdXAgJiYgUmVhY3RET01G
ZWF0dXJlRmxhZ3MudXNlQ3JlYXRlRWxlbWVudCk7XG4gIHRyYW5zYWN0aW9uLnBlcmZvcm0obW91
bnRDb21wb25lbnRJbnRvTm9kZSwgbnVsbCwgY29tcG9uZW50SW5zdGFuY2UsIGNvbnRhaW5lciwg
dHJhbnNhY3Rpb24sIHNob3VsZFJldXNlTWFya3VwLCBjb250ZXh0KTtcbiAgUmVhY3RVcGRhdGVz
LlJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24ucmVsZWFzZSh0cmFuc2FjdGlvbik7XG59XG5cbi8q
KlxuICogVW5tb3VudHMgYSBjb21wb25lbnQgYW5kIHJlbW92ZXMgaXQgZnJvbSB0aGUgRE9NLlxu
ICpcbiAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGluc3RhbmNlIFJlYWN0IGNvbXBvbmVudCBp
bnN0YW5jZS5cbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIERPTSBlbGVtZW50IHRv
IHVubW91bnQgZnJvbS5cbiAqIEBmaW5hbFxuICogQGludGVybmFsXG4gKiBAc2VlIHtSZWFjdE1v
dW50LnVubW91bnRDb21wb25lbnRBdE5vZGV9XG4gKi9cbmZ1bmN0aW9uIHVubW91bnRDb21wb25l
bnRGcm9tTm9kZShpbnN0YW5jZSwgY29udGFpbmVyLCBzYWZlbHkpIHtcbiAgaWYgKGZhbHNlKSB7
XG4gICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uQmVnaW5GbHVzaCgpO1xuICB9
XG4gIFJlYWN0UmVjb25jaWxlci51bm1vdW50Q29tcG9uZW50KGluc3RhbmNlLCBzYWZlbHkpO1xu
ICBpZiAoZmFsc2UpIHtcbiAgICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25FbmRG
bHVzaCgpO1xuICB9XG5cbiAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRE9DX05PREVfVFlQ
RSkge1xuICAgIGNvbnRhaW5lciA9IGNvbnRhaW5lci5kb2N1bWVudEVsZW1lbnQ7XG4gIH1cblxu
ICAvLyBodHRwOi8vanNwZXJmLmNvbS9lbXB0eWluZy1hLW5vZGVcbiAgd2hpbGUgKGNvbnRhaW5l
ci5sYXN0Q2hpbGQpIHtcbiAgICBjb250YWluZXIucmVtb3ZlQ2hpbGQoY29udGFpbmVyLmxhc3RD
aGlsZCk7XG4gIH1cbn1cblxuLyoqXG4gKiBUcnVlIGlmIHRoZSBzdXBwbGllZCBET00gbm9kZSBo
YXMgYSBkaXJlY3QgUmVhY3QtcmVuZGVyZWQgY2hpbGQgdGhhdCBpc1xuICogbm90IGEgUmVhY3Qg
cm9vdCBlbGVtZW50LiBVc2VmdWwgZm9yIHdhcm5pbmcgaW4gYHJlbmRlcmAsXG4gKiBgdW5tb3Vu
dENvbXBvbmVudEF0Tm9kZWAsIGV0Yy5cbiAqXG4gKiBAcGFyYW0gez9ET01FbGVtZW50fSBub2Rl
IFRoZSBjYW5kaWRhdGUgRE9NIG5vZGUuXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRo
ZSBET00gZWxlbWVudCBjb250YWlucyBhIGRpcmVjdCBjaGlsZCB0aGF0IHdhc1xuICogcmVuZGVy
ZWQgYnkgUmVhY3QgYnV0IGlzIG5vdCBhIHJvb3QgZWxlbWVudC5cbiAqIEBpbnRlcm5hbFxuICov
XG5mdW5jdGlvbiBoYXNOb25Sb290UmVhY3RDaGlsZChjb250YWluZXIpIHtcbiAgdmFyIHJvb3RF
bCA9IGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpO1xuICBpZiAocm9v
dEVsKSB7XG4gICAgdmFyIGluc3QgPSBSZWFjdERPTUNvbXBvbmVudFRyZWUuZ2V0SW5zdGFuY2VG
cm9tTm9kZShyb290RWwpO1xuICAgIHJldHVybiAhIShpbnN0ICYmIGluc3QuX2hvc3RQYXJlbnQp
O1xuICB9XG59XG5cbi8qKlxuICogVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgRE9NIG5vZGUgaXMgYSBS
ZWFjdCBET00gZWxlbWVudCBhbmRcbiAqIGl0IGhhcyBiZWVuIHJlbmRlcmVkIGJ5IGFub3RoZXIg
Y29weSBvZiBSZWFjdC5cbiAqXG4gKiBAcGFyYW0gez9ET01FbGVtZW50fSBub2RlIFRoZSBjYW5k
aWRhdGUgRE9NIG5vZGUuXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBET00gaGFz
IGJlZW4gcmVuZGVyZWQgYnkgYW5vdGhlciBjb3B5IG9mIFJlYWN0XG4gKiBAaW50ZXJuYWxcbiAq
L1xuZnVuY3Rpb24gbm9kZUlzUmVuZGVyZWRCeU90aGVySW5zdGFuY2UoY29udGFpbmVyKSB7XG4g
IHZhciByb290RWwgPSBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTtc
biAgcmV0dXJuICEhKHJvb3RFbCAmJiBpc1JlYWN0Tm9kZShyb290RWwpICYmICFSZWFjdERPTUNv
bXBvbmVudFRyZWUuZ2V0SW5zdGFuY2VGcm9tTm9kZShyb290RWwpKTtcbn1cblxuLyoqXG4gKiBU
cnVlIGlmIHRoZSBzdXBwbGllZCBET00gbm9kZSBpcyBhIHZhbGlkIG5vZGUgZWxlbWVudC5cbiAq
XG4gKiBAcGFyYW0gez9ET01FbGVtZW50fSBub2RlIFRoZSBjYW5kaWRhdGUgRE9NIG5vZGUuXG4g
KiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBET00gaXMgYSB2YWxpZCBET00gbm9kZS5c
biAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBpc1ZhbGlkQ29udGFpbmVyKG5vZGUpIHtcbiAg
cmV0dXJuICEhKG5vZGUgJiYgKG5vZGUubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERV9UWVBFIHx8
IG5vZGUubm9kZVR5cGUgPT09IERPQ19OT0RFX1RZUEUgfHwgbm9kZS5ub2RlVHlwZSA9PT0gRE9D
VU1FTlRfRlJBR01FTlRfTk9ERV9UWVBFKSk7XG59XG5cbi8qKlxuICogVHJ1ZSBpZiB0aGUgc3Vw
cGxpZWQgRE9NIG5vZGUgaXMgYSB2YWxpZCBSZWFjdCBub2RlIGVsZW1lbnQuXG4gKlxuICogQHBh
cmFtIHs/RE9NRWxlbWVudH0gbm9kZSBUaGUgY2FuZGlkYXRlIERPTSBub2RlLlxuICogQHJldHVy
biB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgRE9NIGlzIGEgdmFsaWQgUmVhY3QgRE9NIG5vZGUuXG4g
KiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gaXNSZWFjdE5vZGUobm9kZSkge1xuICByZXR1cm4g
aXNWYWxpZENvbnRhaW5lcihub2RlKSAmJiAobm9kZS5oYXNBdHRyaWJ1dGUoUk9PVF9BVFRSX05B
TUUpIHx8IG5vZGUuaGFzQXR0cmlidXRlKEFUVFJfTkFNRSkpO1xufVxuXG5mdW5jdGlvbiBnZXRI
b3N0Um9vdEluc3RhbmNlSW5Db250YWluZXIoY29udGFpbmVyKSB7XG4gIHZhciByb290RWwgPSBn
ZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTtcbiAgdmFyIHByZXZIb3N0
SW5zdGFuY2UgPSByb290RWwgJiYgUmVhY3RET01Db21wb25lbnRUcmVlLmdldEluc3RhbmNlRnJv
bU5vZGUocm9vdEVsKTtcbiAgcmV0dXJuIHByZXZIb3N0SW5zdGFuY2UgJiYgIXByZXZIb3N0SW5z
dGFuY2UuX2hvc3RQYXJlbnQgPyBwcmV2SG9zdEluc3RhbmNlIDogbnVsbDtcbn1cblxuZnVuY3Rp
b24gZ2V0VG9wTGV2ZWxXcmFwcGVySW5Db250YWluZXIoY29udGFpbmVyKSB7XG4gIHZhciByb290
ID0gZ2V0SG9zdFJvb3RJbnN0YW5jZUluQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gIHJldHVybiBy
b290ID8gcm9vdC5faG9zdENvbnRhaW5lckluZm8uX3RvcExldmVsV3JhcHBlciA6IG51bGw7XG59
XG5cbi8qKlxuICogVGVtcG9yYXJ5ICg/KSBoYWNrIHNvIHRoYXQgd2UgY2FuIHN0b3JlIGFsbCB0
b3AtbGV2ZWwgcGVuZGluZyB1cGRhdGVzIG9uXG4gKiBjb21wb3NpdGVzIGluc3RlYWQgb2YgaGF2
aW5nIHRvIHdvcnJ5IGFib3V0IGRpZmZlcmVudCB0eXBlcyBvZiBjb21wb25lbnRzXG4gKiBoZXJl
LlxuICovXG52YXIgdG9wTGV2ZWxSb290Q291bnRlciA9IDE7XG52YXIgVG9wTGV2ZWxXcmFwcGVy
ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLnJvb3RJRCA9IHRvcExldmVsUm9vdENvdW50ZXIrKztc
bn07XG5Ub3BMZXZlbFdyYXBwZXIucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQgPSB7fTtcbmlm
IChmYWxzZSkge1xuICBUb3BMZXZlbFdyYXBwZXIuZGlzcGxheU5hbWUgPSAnVG9wTGV2ZWxXcmFw
cGVyJztcbn1cblRvcExldmVsV3JhcHBlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkg
e1xuICByZXR1cm4gdGhpcy5wcm9wcy5jaGlsZDtcbn07XG5Ub3BMZXZlbFdyYXBwZXIuaXNSZWFj
dFRvcExldmVsV3JhcHBlciA9IHRydWU7XG5cbi8qKlxuICogTW91bnRpbmcgaXMgdGhlIHByb2Nl
c3Mgb2YgaW5pdGlhbGl6aW5nIGEgUmVhY3QgY29tcG9uZW50IGJ5IGNyZWF0aW5nIGl0c1xuICog
cmVwcmVzZW50YXRpdmUgRE9NIGVsZW1lbnRzIGFuZCBpbnNlcnRpbmcgdGhlbSBpbnRvIGEgc3Vw
cGxpZWQgYGNvbnRhaW5lcmAuXG4gKiBBbnkgcHJpb3IgY29udGVudCBpbnNpZGUgYGNvbnRhaW5l
cmAgaXMgZGVzdHJveWVkIGluIHRoZSBwcm9jZXNzLlxuICpcbiAqICAgUmVhY3RNb3VudC5yZW5k
ZXIoXG4gKiAgICAgY29tcG9uZW50LFxuICogICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdj
b250YWluZXInKVxuICogICApO1xuICpcbiAqICAgPGRpdiBpZD1cImNvbnRhaW5lclwiPiAgICAg
ICAgICAgICAgICAgICA8LS0gU3VwcGxpZWQgYGNvbnRhaW5lcmAuXG4gKiAgICAgPGRpdiBkYXRh
LXJlYWN0aWQ9XCIuM1wiPiAgICAgICAgICAgICAgPC0tIFJlbmRlcmVkIHJlYWN0Um9vdCBvZiBS
ZWFjdFxuICogICAgICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29t
cG9uZW50LlxuICogICAgIDwvZGl2PlxuICogICA8L2Rpdj5cbiAqXG4gKiBJbnNpZGUgb2YgYGNv
bnRhaW5lcmAsIHRoZSBmaXJzdCBlbGVtZW50IHJlbmRlcmVkIGlzIHRoZSBcInJlYWN0Um9vdFwi
LlxuICovXG52YXIgUmVhY3RNb3VudCA9IHtcbiAgVG9wTGV2ZWxXcmFwcGVyOiBUb3BMZXZlbFdy
YXBwZXIsXG5cbiAgLyoqXG4gICAqIFVzZWQgYnkgZGV2dG9vbHMuIFRoZSBrZXlzIGFyZSBub3Qg
aW1wb3J0YW50LlxuICAgKi9cbiAgX2luc3RhbmNlc0J5UmVhY3RSb290SUQ6IGluc3RhbmNlc0J5
UmVhY3RSb290SUQsXG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYSBob29rIHByb3ZpZGVkIHRvIHN1
cHBvcnQgcmVuZGVyaW5nIFJlYWN0IGNvbXBvbmVudHMgd2hpbGVcbiAgICogZW5zdXJpbmcgdGhh
dCB0aGUgYXBwYXJlbnQgc2Nyb2xsIHBvc2l0aW9uIG9mIGl0cyBgY29udGFpbmVyYCBkb2VzIG5v
dFxuICAgKiBjaGFuZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVy
IFRoZSBgY29udGFpbmVyYCBiZWluZyByZW5kZXJlZCBpbnRvLlxuICAgKiBAcGFyYW0ge2Z1bmN0
aW9ufSByZW5kZXJDYWxsYmFjayBUaGlzIG11c3QgYmUgY2FsbGVkIG9uY2UgdG8gZG8gdGhlIHJl
bmRlci5cbiAgICovXG4gIHNjcm9sbE1vbml0b3I6IGZ1bmN0aW9uIChjb250YWluZXIsIHJlbmRl
ckNhbGxiYWNrKSB7XG4gICAgcmVuZGVyQ2FsbGJhY2soKTtcbiAgfSxcblxuICAvKipcbiAgICog
VGFrZSBhIGNvbXBvbmVudCB0aGF0J3MgYWxyZWFkeSBtb3VudGVkIGludG8gdGhlIERPTSBhbmQg
cmVwbGFjZSBpdHMgcHJvcHNcbiAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gcHJldkNvbXBv
bmVudCBjb21wb25lbnQgaW5zdGFuY2UgYWxyZWFkeSBpbiB0aGUgRE9NXG4gICAqIEBwYXJhbSB7
UmVhY3RFbGVtZW50fSBuZXh0RWxlbWVudCBjb21wb25lbnQgaW5zdGFuY2UgdG8gcmVuZGVyXG4g
ICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIGNvbnRhaW5lciB0byByZW5kZXIgaW50
b1xuICAgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgZnVuY3Rpb24gdHJpZ2dlcmVkIG9u
IGNvbXBsZXRpb25cbiAgICovXG4gIF91cGRhdGVSb290Q29tcG9uZW50OiBmdW5jdGlvbiAocHJl
dkNvbXBvbmVudCwgbmV4dEVsZW1lbnQsIG5leHRDb250ZXh0LCBjb250YWluZXIsIGNhbGxiYWNr
KSB7XG4gICAgUmVhY3RNb3VudC5zY3JvbGxNb25pdG9yKGNvbnRhaW5lciwgZnVuY3Rpb24gKCkg
e1xuICAgICAgUmVhY3RVcGRhdGVRdWV1ZS5lbnF1ZXVlRWxlbWVudEludGVybmFsKHByZXZDb21w
b25lbnQsIG5leHRFbGVtZW50LCBuZXh0Q29udGV4dCk7XG4gICAgICBpZiAoY2FsbGJhY2spIHtc
biAgICAgICAgUmVhY3RVcGRhdGVRdWV1ZS5lbnF1ZXVlQ2FsbGJhY2tJbnRlcm5hbChwcmV2Q29t
cG9uZW50LCBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcHJldkNv
bXBvbmVudDtcbiAgfSxcblxuICAvKipcbiAgICogUmVuZGVyIGEgbmV3IGNvbXBvbmVudCBpbnRv
IHRoZSBET00uIEhvb2tlZCBieSBob29rcyFcbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdEVsZW1l
bnR9IG5leHRFbGVtZW50IGVsZW1lbnQgdG8gcmVuZGVyXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVu
dH0gY29udGFpbmVyIGNvbnRhaW5lciB0byByZW5kZXIgaW50b1xuICAgKiBAcGFyYW0ge2Jvb2xl
YW59IHNob3VsZFJldXNlTWFya3VwIGlmIHdlIHNob3VsZCBza2lwIHRoZSBtYXJrdXAgaW5zZXJ0
aW9uXG4gICAqIEByZXR1cm4ge1JlYWN0Q29tcG9uZW50fSBuZXh0Q29tcG9uZW50XG4gICAqL1xu
ICBfcmVuZGVyTmV3Um9vdENvbXBvbmVudDogZnVuY3Rpb24gKG5leHRFbGVtZW50LCBjb250YWlu
ZXIsIHNob3VsZFJldXNlTWFya3VwLCBjb250ZXh0KSB7XG4gICAgLy8gVmFyaW91cyBwYXJ0cyBv
ZiBvdXIgY29kZSAoc3VjaCBhcyBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCdzXG4gICAgLy8gX3Jl
bmRlclZhbGlkYXRlZENvbXBvbmVudCkgYXNzdW1lIHRoYXQgY2FsbHMgdG8gcmVuZGVyIGFyZW4n
dCBuZXN0ZWQ7XG4gICAgLy8gdmVyaWZ5IHRoYXQgdGhhdCdzIHRoZSBjYXNlLlxuICAgICBmYWxz
ZSA/IHdhcm5pbmcoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCA9PSBudWxsLCAnX3JlbmRlck5l
d1Jvb3RDb21wb25lbnQoKTogUmVuZGVyIG1ldGhvZHMgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlv
biAnICsgJ29mIHByb3BzIGFuZCBzdGF0ZTsgdHJpZ2dlcmluZyBuZXN0ZWQgY29tcG9uZW50IHVw
ZGF0ZXMgZnJvbSAnICsgJ3JlbmRlciBpcyBub3QgYWxsb3dlZC4gSWYgbmVjZXNzYXJ5LCB0cmln
Z2VyIG5lc3RlZCB1cGRhdGVzIGluICcgKyAnY29tcG9uZW50RGlkVXBkYXRlLiBDaGVjayB0aGUg
cmVuZGVyIG1ldGhvZCBvZiAlcy4nLCBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50ICYmIFJlYWN0
Q3VycmVudE93bmVyLmN1cnJlbnQuZ2V0TmFtZSgpIHx8ICdSZWFjdENvbXBvc2l0ZUNvbXBvbmVu
dCcpIDogdm9pZCAwO1xuXG4gICAgIWlzVmFsaWRDb250YWluZXIoY29udGFpbmVyKSA/ICBmYWxz
ZSA/IGludmFyaWFudChmYWxzZSwgJ19yZWdpc3RlckNvbXBvbmVudCguLi4pOiBUYXJnZXQgY29u
dGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LicpIDogX3Byb2RJbnZhcmlhbnQoJzM3JykgOiB2
b2lkIDA7XG5cbiAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuZW5zdXJlU2Nyb2xsVmFsdWVN
b25pdG9yaW5nKCk7XG4gICAgdmFyIGNvbXBvbmVudEluc3RhbmNlID0gaW5zdGFudGlhdGVSZWFj
dENvbXBvbmVudChuZXh0RWxlbWVudCwgZmFsc2UpO1xuXG4gICAgLy8gVGhlIGluaXRpYWwgcmVu
ZGVyIGlzIHN5bmNocm9ub3VzIGJ1dCBhbnkgdXBkYXRlcyB0aGF0IGhhcHBlbiBkdXJpbmdcbiAg
ICAvLyByZW5kZXJpbmcsIGluIGNvbXBvbmVudFdpbGxNb3VudCBvciBjb21wb25lbnREaWRNb3Vu
dCwgd2lsbCBiZSBiYXRjaGVkXG4gICAgLy8gYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IGJhdGNo
aW5nIHN0cmF0ZWd5LlxuXG4gICAgUmVhY3RVcGRhdGVzLmJhdGNoZWRVcGRhdGVzKGJhdGNoZWRN
b3VudENvbXBvbmVudEludG9Ob2RlLCBjb21wb25lbnRJbnN0YW5jZSwgY29udGFpbmVyLCBzaG91
bGRSZXVzZU1hcmt1cCwgY29udGV4dCk7XG5cbiAgICB2YXIgd3JhcHBlcklEID0gY29tcG9uZW50
SW5zdGFuY2UuX2luc3RhbmNlLnJvb3RJRDtcbiAgICBpbnN0YW5jZXNCeVJlYWN0Um9vdElEW3dy
YXBwZXJJRF0gPSBjb21wb25lbnRJbnN0YW5jZTtcblxuICAgIHJldHVybiBjb21wb25lbnRJbnN0
YW5jZTtcbiAgfSxcblxuICAvKipcbiAgICogUmVuZGVycyBhIFJlYWN0IGNvbXBvbmVudCBpbnRv
IHRoZSBET00gaW4gdGhlIHN1cHBsaWVkIGBjb250YWluZXJgLlxuICAgKlxuICAgKiBJZiB0aGUg
UmVhY3QgY29tcG9uZW50IHdhcyBwcmV2aW91c2x5IHJlbmRlcmVkIGludG8gYGNvbnRhaW5lcmAs
IHRoaXMgd2lsbFxuICAgKiBwZXJmb3JtIGFuIHVwZGF0ZSBvbiBpdCBhbmQgb25seSBtdXRhdGUg
dGhlIERPTSBhcyBuZWNlc3NhcnkgdG8gcmVmbGVjdCB0aGVcbiAgICogbGF0ZXN0IFJlYWN0IGNv
bXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gcGFyZW50Q29tcG9u
ZW50IFRoZSBjb25jZXB0dWFsIHBhcmVudCBvZiB0aGlzIHJlbmRlciB0cmVlLlxuICAgKiBAcGFy
YW0ge1JlYWN0RWxlbWVudH0gbmV4dEVsZW1lbnQgQ29tcG9uZW50IGVsZW1lbnQgdG8gcmVuZGVy
LlxuICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGNvbnRhaW5lciBET00gZWxlbWVudCB0byByZW5k
ZXIgaW50by5cbiAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIGZ1bmN0aW9uIHRyaWdn
ZXJlZCBvbiBjb21wbGV0aW9uXG4gICAqIEByZXR1cm4ge1JlYWN0Q29tcG9uZW50fSBDb21wb25l
bnQgaW5zdGFuY2UgcmVuZGVyZWQgaW4gYGNvbnRhaW5lcmAuXG4gICAqL1xuICByZW5kZXJTdWJ0
cmVlSW50b0NvbnRhaW5lcjogZnVuY3Rpb24gKHBhcmVudENvbXBvbmVudCwgbmV4dEVsZW1lbnQs
IGNvbnRhaW5lciwgY2FsbGJhY2spIHtcbiAgICAhKHBhcmVudENvbXBvbmVudCAhPSBudWxsICYm
IFJlYWN0SW5zdGFuY2VNYXAuaGFzKHBhcmVudENvbXBvbmVudCkpID8gIGZhbHNlID8gaW52YXJp
YW50KGZhbHNlLCAncGFyZW50Q29tcG9uZW50IG11c3QgYmUgYSB2YWxpZCBSZWFjdCBDb21wb25l
bnQnKSA6IF9wcm9kSW52YXJpYW50KCczOCcpIDogdm9pZCAwO1xuICAgIHJldHVybiBSZWFjdE1v
dW50Ll9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihwYXJlbnRDb21wb25lbnQsIG5leHRFbGVt
ZW50LCBjb250YWluZXIsIGNhbGxiYWNrKTtcbiAgfSxcblxuICBfcmVuZGVyU3VidHJlZUludG9D
b250YWluZXI6IGZ1bmN0aW9uIChwYXJlbnRDb21wb25lbnQsIG5leHRFbGVtZW50LCBjb250YWlu
ZXIsIGNhbGxiYWNrKSB7XG4gICAgUmVhY3RVcGRhdGVRdWV1ZS52YWxpZGF0ZUNhbGxiYWNrKGNh
bGxiYWNrLCAnUmVhY3RET00ucmVuZGVyJyk7XG4gICAgIVJlYWN0LmlzVmFsaWRFbGVtZW50KG5l
eHRFbGVtZW50KSA/ICBmYWxzZSA/IGludmFyaWFudChmYWxzZSwgJ1JlYWN0RE9NLnJlbmRlcigp
OiBJbnZhbGlkIGNvbXBvbmVudCBlbGVtZW50LiVzJywgdHlwZW9mIG5leHRFbGVtZW50ID09PSAn
c3RyaW5nJyA/IFwiIEluc3RlYWQgb2YgcGFzc2luZyBhIHN0cmluZyBsaWtlICdkaXYnLCBwYXNz
IFwiICsgXCJSZWFjdC5jcmVhdGVFbGVtZW50KCdkaXYnKSBvciA8ZGl2IC8+LlwiIDogdHlwZW9m
IG5leHRFbGVtZW50ID09PSAnZnVuY3Rpb24nID8gJyBJbnN0ZWFkIG9mIHBhc3NpbmcgYSBjbGFz
cyBsaWtlIEZvbywgcGFzcyAnICsgJ1JlYWN0LmNyZWF0ZUVsZW1lbnQoRm9vKSBvciA8Rm9vIC8+
LicgOiAvLyBDaGVjayBpZiBpdCBxdWFja3MgbGlrZSBhbiBlbGVtZW50XG4gICAgbmV4dEVsZW1l
bnQgIT0gbnVsbCAmJiBuZXh0RWxlbWVudC5wcm9wcyAhPT0gdW5kZWZpbmVkID8gJyBUaGlzIG1h
eSBiZSBjYXVzZWQgYnkgdW5pbnRlbnRpb25hbGx5IGxvYWRpbmcgdHdvIGluZGVwZW5kZW50ICcg
KyAnY29waWVzIG9mIFJlYWN0LicgOiAnJykgOiBfcHJvZEludmFyaWFudCgnMzknLCB0eXBlb2Yg
bmV4dEVsZW1lbnQgPT09ICdzdHJpbmcnID8gXCIgSW5zdGVhZCBvZiBwYXNzaW5nIGEgc3RyaW5n
IGxpa2UgJ2RpdicsIHBhc3MgXCIgKyBcIlJlYWN0LmNyZWF0ZUVsZW1lbnQoJ2RpdicpIG9yIDxk
aXYgLz4uXCIgOiB0eXBlb2YgbmV4dEVsZW1lbnQgPT09ICdmdW5jdGlvbicgPyAnIEluc3RlYWQg
b2YgcGFzc2luZyBhIGNsYXNzIGxpa2UgRm9vLCBwYXNzICcgKyAnUmVhY3QuY3JlYXRlRWxlbWVu
dChGb28pIG9yIDxGb28gLz4uJyA6IG5leHRFbGVtZW50ICE9IG51bGwgJiYgbmV4dEVsZW1lbnQu
cHJvcHMgIT09IHVuZGVmaW5lZCA/ICcgVGhpcyBtYXkgYmUgY2F1c2VkIGJ5IHVuaW50ZW50aW9u
YWxseSBsb2FkaW5nIHR3byBpbmRlcGVuZGVudCAnICsgJ2NvcGllcyBvZiBSZWFjdC4nIDogJycp
IDogdm9pZCAwO1xuXG4gICAgIGZhbHNlID8gd2FybmluZyghY29udGFpbmVyIHx8ICFjb250YWlu
ZXIudGFnTmFtZSB8fCBjb250YWluZXIudGFnTmFtZS50b1VwcGVyQ2FzZSgpICE9PSAnQk9EWScs
ICdyZW5kZXIoKTogUmVuZGVyaW5nIGNvbXBvbmVudHMgZGlyZWN0bHkgaW50byBkb2N1bWVudC5i
b2R5IGlzICcgKyAnZGlzY291cmFnZWQsIHNpbmNlIGl0cyBjaGlsZHJlbiBhcmUgb2Z0ZW4gbWFu
aXB1bGF0ZWQgYnkgdGhpcmQtcGFydHkgJyArICdzY3JpcHRzIGFuZCBicm93c2VyIGV4dGVuc2lv
bnMuIFRoaXMgbWF5IGxlYWQgdG8gc3VidGxlICcgKyAncmVjb25jaWxpYXRpb24gaXNzdWVzLiBU
cnkgcmVuZGVyaW5nIGludG8gYSBjb250YWluZXIgZWxlbWVudCBjcmVhdGVkICcgKyAnZm9yIHlv
dXIgYXBwLicpIDogdm9pZCAwO1xuXG4gICAgdmFyIG5leHRXcmFwcGVkRWxlbWVudCA9IFJlYWN0
LmNyZWF0ZUVsZW1lbnQoVG9wTGV2ZWxXcmFwcGVyLCB7XG4gICAgICBjaGlsZDogbmV4dEVsZW1l
bnRcbiAgICB9KTtcblxuICAgIHZhciBuZXh0Q29udGV4dDtcbiAgICBpZiAocGFyZW50Q29tcG9u
ZW50KSB7XG4gICAgICB2YXIgcGFyZW50SW5zdCA9IFJlYWN0SW5zdGFuY2VNYXAuZ2V0KHBhcmVu
dENvbXBvbmVudCk7XG4gICAgICBuZXh0Q29udGV4dCA9IHBhcmVudEluc3QuX3Byb2Nlc3NDaGls
ZENvbnRleHQocGFyZW50SW5zdC5fY29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHRD
b250ZXh0ID0gZW1wdHlPYmplY3Q7XG4gICAgfVxuXG4gICAgdmFyIHByZXZDb21wb25lbnQgPSBn
ZXRUb3BMZXZlbFdyYXBwZXJJbkNvbnRhaW5lcihjb250YWluZXIpO1xuXG4gICAgaWYgKHByZXZD
b21wb25lbnQpIHtcbiAgICAgIHZhciBwcmV2V3JhcHBlZEVsZW1lbnQgPSBwcmV2Q29tcG9uZW50
Ll9jdXJyZW50RWxlbWVudDtcbiAgICAgIHZhciBwcmV2RWxlbWVudCA9IHByZXZXcmFwcGVkRWxl
bWVudC5wcm9wcy5jaGlsZDtcbiAgICAgIGlmIChzaG91bGRVcGRhdGVSZWFjdENvbXBvbmVudChw
cmV2RWxlbWVudCwgbmV4dEVsZW1lbnQpKSB7XG4gICAgICAgIHZhciBwdWJsaWNJbnN0ID0gcHJl
dkNvbXBvbmVudC5fcmVuZGVyZWRDb21wb25lbnQuZ2V0UHVibGljSW5zdGFuY2UoKTtcbiAgICAg
ICAgdmFyIHVwZGF0ZWRDYWxsYmFjayA9IGNhbGxiYWNrICYmIGZ1bmN0aW9uICgpIHtcbiAgICAg
ICAgICBjYWxsYmFjay5jYWxsKHB1YmxpY0luc3QpO1xuICAgICAgICB9O1xuICAgICAgICBSZWFj
dE1vdW50Ll91cGRhdGVSb290Q29tcG9uZW50KHByZXZDb21wb25lbnQsIG5leHRXcmFwcGVkRWxl
bWVudCwgbmV4dENvbnRleHQsIGNvbnRhaW5lciwgdXBkYXRlZENhbGxiYWNrKTtcbiAgICAgICAg
cmV0dXJuIHB1YmxpY0luc3Q7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBSZWFjdE1vdW50LnVu
bW91bnRDb21wb25lbnRBdE5vZGUoY29udGFpbmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2
YXIgcmVhY3RSb290RWxlbWVudCA9IGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250
YWluZXIpO1xuICAgIHZhciBjb250YWluZXJIYXNSZWFjdE1hcmt1cCA9IHJlYWN0Um9vdEVsZW1l
bnQgJiYgISFpbnRlcm5hbEdldElEKHJlYWN0Um9vdEVsZW1lbnQpO1xuICAgIHZhciBjb250YWlu
ZXJIYXNOb25Sb290UmVhY3RDaGlsZCA9IGhhc05vblJvb3RSZWFjdENoaWxkKGNvbnRhaW5lcik7
XG5cbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJv
ZHVjdGlvbicgPyB3YXJuaW5nKCFjb250YWluZXJIYXNOb25Sb290UmVhY3RDaGlsZCwgJ3JlbmRl
ciguLi4pOiBSZXBsYWNpbmcgUmVhY3QtcmVuZGVyZWQgY2hpbGRyZW4gd2l0aCBhIG5ldyByb290
ICcgKyAnY29tcG9uZW50LiBJZiB5b3UgaW50ZW5kZWQgdG8gdXBkYXRlIHRoZSBjaGlsZHJlbiBv
ZiB0aGlzIG5vZGUsICcgKyAneW91IHNob3VsZCBpbnN0ZWFkIGhhdmUgdGhlIGV4aXN0aW5nIGNo
aWxkcmVuIHVwZGF0ZSB0aGVpciBzdGF0ZSAnICsgJ2FuZCByZW5kZXIgdGhlIG5ldyBjb21wb25l
bnRzIGluc3RlYWQgb2YgY2FsbGluZyBSZWFjdERPTS5yZW5kZXIuJykgOiB2b2lkIDA7XG5cbiAg
ICAgIGlmICghY29udGFpbmVySGFzUmVhY3RNYXJrdXAgfHwgcmVhY3RSb290RWxlbWVudC5uZXh0
U2libGluZykge1xuICAgICAgICB2YXIgcm9vdEVsZW1lbnRTaWJsaW5nID0gcmVhY3RSb290RWxl
bWVudDtcbiAgICAgICAgd2hpbGUgKHJvb3RFbGVtZW50U2libGluZykge1xuICAgICAgICAgIGlm
IChpbnRlcm5hbEdldElEKHJvb3RFbGVtZW50U2libGluZykpIHtcbiAgICAgICAgICAgIHByb2Nl
c3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAncmVuZGVy
KCk6IFRhcmdldCBub2RlIGhhcyBtYXJrdXAgcmVuZGVyZWQgYnkgUmVhY3QsIGJ1dCB0aGVyZSAn
ICsgJ2FyZSB1bnJlbGF0ZWQgbm9kZXMgYXMgd2VsbC4gVGhpcyBpcyBtb3N0IGNvbW1vbmx5IGNh
dXNlZCBieSAnICsgJ3doaXRlLXNwYWNlIGluc2VydGVkIGFyb3VuZCBzZXJ2ZXItcmVuZGVyZWQg
bWFya3VwLicpIDogdm9pZCAwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAg
ICAgICAgIHJvb3RFbGVtZW50U2libGluZyA9IHJvb3RFbGVtZW50U2libGluZy5uZXh0U2libGlu
ZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzaG91bGRSZXVzZU1hcmt1
cCA9IGNvbnRhaW5lckhhc1JlYWN0TWFya3VwICYmICFwcmV2Q29tcG9uZW50ICYmICFjb250YWlu
ZXJIYXNOb25Sb290UmVhY3RDaGlsZDtcbiAgICB2YXIgY29tcG9uZW50ID0gUmVhY3RNb3VudC5f
cmVuZGVyTmV3Um9vdENvbXBvbmVudChuZXh0V3JhcHBlZEVsZW1lbnQsIGNvbnRhaW5lciwgc2hv
dWxkUmV1c2VNYXJrdXAsIG5leHRDb250ZXh0KS5fcmVuZGVyZWRDb21wb25lbnQuZ2V0UHVibGlj
SW5zdGFuY2UoKTtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrLmNhbGwoY29t
cG9uZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgfSxcblxuICAvKipcbiAg
ICogUmVuZGVycyBhIFJlYWN0IGNvbXBvbmVudCBpbnRvIHRoZSBET00gaW4gdGhlIHN1cHBsaWVk
IGBjb250YWluZXJgLlxuICAgKiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3Qv
ZG9jcy90b3AtbGV2ZWwtYXBpLmh0bWwjcmVhY3Rkb20ucmVuZGVyXG4gICAqXG4gICAqIElmIHRo
ZSBSZWFjdCBjb21wb25lbnQgd2FzIHByZXZpb3VzbHkgcmVuZGVyZWQgaW50byBgY29udGFpbmVy
YCwgdGhpcyB3aWxsXG4gICAqIHBlcmZvcm0gYW4gdXBkYXRlIG9uIGl0IGFuZCBvbmx5IG11dGF0
ZSB0aGUgRE9NIGFzIG5lY2Vzc2FyeSB0byByZWZsZWN0IHRoZVxuICAgKiBsYXRlc3QgUmVhY3Qg
Y29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gbmV4dEVsZW1lbnQg
Q29tcG9uZW50IGVsZW1lbnQgdG8gcmVuZGVyLlxuICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGNv
bnRhaW5lciBET00gZWxlbWVudCB0byByZW5kZXIgaW50by5cbiAgICogQHBhcmFtIHs/ZnVuY3Rp
b259IGNhbGxiYWNrIGZ1bmN0aW9uIHRyaWdnZXJlZCBvbiBjb21wbGV0aW9uXG4gICAqIEByZXR1
cm4ge1JlYWN0Q29tcG9uZW50fSBDb21wb25lbnQgaW5zdGFuY2UgcmVuZGVyZWQgaW4gYGNvbnRh
aW5lcmAuXG4gICAqL1xuICByZW5kZXI6IGZ1bmN0aW9uIChuZXh0RWxlbWVudCwgY29udGFpbmVy
LCBjYWxsYmFjaykge1xuICAgIHJldHVybiBSZWFjdE1vdW50Ll9yZW5kZXJTdWJ0cmVlSW50b0Nv
bnRhaW5lcihudWxsLCBuZXh0RWxlbWVudCwgY29udGFpbmVyLCBjYWxsYmFjayk7XG4gIH0sXG5c
biAgLyoqXG4gICAqIFVubW91bnRzIGFuZCBkZXN0cm95cyB0aGUgUmVhY3QgY29tcG9uZW50IHJl
bmRlcmVkIGluIHRoZSBgY29udGFpbmVyYC5cbiAgICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0
aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0ZG9tLnVubW91bnRjb21w
b25lbnRhdG5vZGVcbiAgICpcbiAgICogQHBhcmFtIHtET01FbGVtZW50fSBjb250YWluZXIgRE9N
IGVsZW1lbnQgY29udGFpbmluZyBhIFJlYWN0IGNvbXBvbmVudC5cbiAgICogQHJldHVybiB7Ym9v
bGVhbn0gVHJ1ZSBpZiBhIGNvbXBvbmVudCB3YXMgZm91bmQgaW4gYW5kIHVubW91bnRlZCBmcm9t
XG4gICAqICAgICAgICAgICAgICAgICAgIGBjb250YWluZXJgXG4gICAqL1xuICB1bm1vdW50Q29t
cG9uZW50QXROb2RlOiBmdW5jdGlvbiAoY29udGFpbmVyKSB7XG4gICAgLy8gVmFyaW91cyBwYXJ0
cyBvZiBvdXIgY29kZSAoc3VjaCBhcyBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCdzXG4gICAgLy8g
X3JlbmRlclZhbGlkYXRlZENvbXBvbmVudCkgYXNzdW1lIHRoYXQgY2FsbHMgdG8gcmVuZGVyIGFy
ZW4ndCBuZXN0ZWQ7XG4gICAgLy8gdmVyaWZ5IHRoYXQgdGhhdCdzIHRoZSBjYXNlLiAoU3RyaWN0
bHkgc3BlYWtpbmcsIHVubW91bnRpbmcgd29uJ3QgY2F1c2UgYVxuICAgIC8vIHJlbmRlciBidXQg
d2Ugc3RpbGwgZG9uJ3QgZXhwZWN0IHRvIGJlIGluIGEgcmVuZGVyIGNhbGwgaGVyZS4pXG4gICAg
IGZhbHNlID8gd2FybmluZyhSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50ID09IG51bGwsICd1bm1v
dW50Q29tcG9uZW50QXROb2RlKCk6IFJlbmRlciBtZXRob2RzIHNob3VsZCBiZSBhIHB1cmUgZnVu
Y3Rpb24gJyArICdvZiBwcm9wcyBhbmQgc3RhdGU7IHRyaWdnZXJpbmcgbmVzdGVkIGNvbXBvbmVu
dCB1cGRhdGVzIGZyb20gcmVuZGVyICcgKyAnaXMgbm90IGFsbG93ZWQuIElmIG5lY2Vzc2FyeSwg
dHJpZ2dlciBuZXN0ZWQgdXBkYXRlcyBpbiAnICsgJ2NvbXBvbmVudERpZFVwZGF0ZS4gQ2hlY2sg
dGhlIHJlbmRlciBtZXRob2Qgb2YgJXMuJywgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCAmJiBS
ZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LmdldE5hbWUoKSB8fCAnUmVhY3RDb21wb3NpdGVDb21w
b25lbnQnKSA6IHZvaWQgMDtcblxuICAgICFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lcikgPyAg
ZmFsc2UgPyBpbnZhcmlhbnQoZmFsc2UsICd1bm1vdW50Q29tcG9uZW50QXROb2RlKC4uLik6IFRh
cmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuJykgOiBfcHJvZEludmFyaWFudCgn
NDAnKSA6IHZvaWQgMDtcblxuICAgIGlmIChmYWxzZSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9E
RV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoIW5vZGVJc1JlbmRlcmVkQnlPdGhlcklu
c3RhbmNlKGNvbnRhaW5lciksIFwidW5tb3VudENvbXBvbmVudEF0Tm9kZSgpOiBUaGUgbm9kZSB5
b3UncmUgYXR0ZW1wdGluZyB0byB1bm1vdW50IFwiICsgJ3dhcyByZW5kZXJlZCBieSBhbm90aGVy
IGNvcHkgb2YgUmVhY3QuJykgOiB2b2lkIDA7XG4gICAgfVxuXG4gICAgdmFyIHByZXZDb21wb25l
bnQgPSBnZXRUb3BMZXZlbFdyYXBwZXJJbkNvbnRhaW5lcihjb250YWluZXIpO1xuICAgIGlmICgh
cHJldkNvbXBvbmVudCkge1xuICAgICAgLy8gQ2hlY2sgaWYgdGhlIG5vZGUgYmVpbmcgdW5tb3Vu
dGVkIHdhcyByZW5kZXJlZCBieSBSZWFjdCwgYnV0IGlzbid0IGFcbiAgICAgIC8vIHJvb3Qgbm9k
ZS5cbiAgICAgIHZhciBjb250YWluZXJIYXNOb25Sb290UmVhY3RDaGlsZCA9IGhhc05vblJvb3RS
ZWFjdENoaWxkKGNvbnRhaW5lcik7XG5cbiAgICAgIC8vIENoZWNrIGlmIHRoZSBjb250YWluZXIg
aXRzZWxmIGlzIGEgUmVhY3Qgcm9vdCBub2RlLlxuICAgICAgdmFyIGlzQ29udGFpbmVyUmVhY3RS
b290ID0gY29udGFpbmVyLm5vZGVUeXBlID09PSAxICYmIGNvbnRhaW5lci5oYXNBdHRyaWJ1dGUo
Uk9PVF9BVFRSX05BTUUpO1xuXG4gICAgICBpZiAoZmFsc2UpIHtcbiAgICAgICAgcHJvY2Vzcy5l
bnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoIWNvbnRhaW5lckhhc05vblJv
b3RSZWFjdENoaWxkLCBcInVubW91bnRDb21wb25lbnRBdE5vZGUoKTogVGhlIG5vZGUgeW91J3Jl
IGF0dGVtcHRpbmcgdG8gdW5tb3VudCBcIiArICd3YXMgcmVuZGVyZWQgYnkgUmVhY3QgYW5kIGlz
IG5vdCBhIHRvcC1sZXZlbCBjb250YWluZXIuICVzJywgaXNDb250YWluZXJSZWFjdFJvb3QgPyAn
WW91IG1heSBoYXZlIGFjY2lkZW50YWxseSBwYXNzZWQgaW4gYSBSZWFjdCByb290IG5vZGUgaW5z
dGVhZCAnICsgJ29mIGl0cyBjb250YWluZXIuJyA6ICdJbnN0ZWFkLCBoYXZlIHRoZSBwYXJlbnQg
Y29tcG9uZW50IHVwZGF0ZSBpdHMgc3RhdGUgYW5kICcgKyAncmVyZW5kZXIgaW4gb3JkZXIgdG8g
cmVtb3ZlIHRoaXMgY29tcG9uZW50LicpIDogdm9pZCAwO1xuICAgICAgfVxuXG4gICAgICByZXR1
cm4gZmFsc2U7XG4gICAgfVxuICAgIGRlbGV0ZSBpbnN0YW5jZXNCeVJlYWN0Um9vdElEW3ByZXZD
b21wb25lbnQuX2luc3RhbmNlLnJvb3RJRF07XG4gICAgUmVhY3RVcGRhdGVzLmJhdGNoZWRVcGRh
dGVzKHVubW91bnRDb21wb25lbnRGcm9tTm9kZSwgcHJldkNvbXBvbmVudCwgY29udGFpbmVyLCBm
YWxzZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG5cbiAgX21vdW50SW1hZ2VJbnRvTm9kZTog
ZnVuY3Rpb24gKG1hcmt1cCwgY29udGFpbmVyLCBpbnN0YW5jZSwgc2hvdWxkUmV1c2VNYXJrdXAs
IHRyYW5zYWN0aW9uKSB7XG4gICAgIWlzVmFsaWRDb250YWluZXIoY29udGFpbmVyKSA/ICBmYWxz
ZSA/IGludmFyaWFudChmYWxzZSwgJ21vdW50Q29tcG9uZW50SW50b05vZGUoLi4uKTogVGFyZ2V0
IGNvbnRhaW5lciBpcyBub3QgdmFsaWQuJykgOiBfcHJvZEludmFyaWFudCgnNDEnKSA6IHZvaWQg
MDtcblxuICAgIGlmIChzaG91bGRSZXVzZU1hcmt1cCkge1xuICAgICAgdmFyIHJvb3RFbGVtZW50
ID0gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gICAgICBpZiAo
UmVhY3RNYXJrdXBDaGVja3N1bS5jYW5SZXVzZU1hcmt1cChtYXJrdXAsIHJvb3RFbGVtZW50KSkg
e1xuICAgICAgICBSZWFjdERPTUNvbXBvbmVudFRyZWUucHJlY2FjaGVOb2RlKGluc3RhbmNlLCBy
b290RWxlbWVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZh
ciBjaGVja3N1bSA9IHJvb3RFbGVtZW50LmdldEF0dHJpYnV0ZShSZWFjdE1hcmt1cENoZWNrc3Vt
LkNIRUNLU1VNX0FUVFJfTkFNRSk7XG4gICAgICAgIHJvb3RFbGVtZW50LnJlbW92ZUF0dHJpYnV0
ZShSZWFjdE1hcmt1cENoZWNrc3VtLkNIRUNLU1VNX0FUVFJfTkFNRSk7XG5cbiAgICAgICAgdmFy
IHJvb3RNYXJrdXAgPSByb290RWxlbWVudC5vdXRlckhUTUw7XG4gICAgICAgIHJvb3RFbGVtZW50
LnNldEF0dHJpYnV0ZShSZWFjdE1hcmt1cENoZWNrc3VtLkNIRUNLU1VNX0FUVFJfTkFNRSwgY2hl
Y2tzdW0pO1xuXG4gICAgICAgIHZhciBub3JtYWxpemVkTWFya3VwID0gbWFya3VwO1xuICAgICAg
ICBpZiAoZmFsc2UpIHtcbiAgICAgICAgICAvLyBiZWNhdXNlIHJvb3RNYXJrdXAgaXMgcmV0cmll
dmVkIGZyb20gdGhlIERPTSwgdmFyaW91cyBub3JtYWxpemF0aW9uc1xuICAgICAgICAgIC8vIHdp
bGwgaGF2ZSBvY2N1cnJlZCB3aGljaCB3aWxsIG5vdCBiZSBwcmVzZW50IGluIGBtYXJrdXBgLiBI
ZXJlLFxuICAgICAgICAgIC8vIGluc2VydCBtYXJrdXAgaW50byBhIDxkaXY+IG9yIDxpZnJhbWU+
IGRlcGVuZGluZyBvbiB0aGUgY29udGFpbmVyXG4gICAgICAgICAgLy8gdHlwZSB0byBwZXJmb3Jt
IHRoZSBzYW1lIG5vcm1hbGl6YXRpb25zIGJlZm9yZSBjb21wYXJpbmcuXG4gICAgICAgICAgdmFy
IG5vcm1hbGl6ZXI7XG4gICAgICAgICAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRUxFTUVO
VF9OT0RFX1RZUEUpIHtcbiAgICAgICAgICAgIG5vcm1hbGl6ZXIgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIG5vcm1hbGl6ZXIuaW5uZXJIVE1MID0gbWFya3Vw
O1xuICAgICAgICAgICAgbm9ybWFsaXplZE1hcmt1cCA9IG5vcm1hbGl6ZXIuaW5uZXJIVE1MO1xu
ICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBub3JtYWxpemVyID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnaWZyYW1lJyk7XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENo
aWxkKG5vcm1hbGl6ZXIpO1xuICAgICAgICAgICAgbm9ybWFsaXplci5jb250ZW50RG9jdW1lbnQu
d3JpdGUobWFya3VwKTtcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRNYXJrdXAgPSBub3JtYWxpemVy
LmNvbnRlbnREb2N1bWVudC5kb2N1bWVudEVsZW1lbnQub3V0ZXJIVE1MO1xuICAgICAgICAgICAg
ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChub3JtYWxpemVyKTtcbiAgICAgICAgICB9XG4gICAg
ICAgIH1cblxuICAgICAgICB2YXIgZGlmZkluZGV4ID0gZmlyc3REaWZmZXJlbmNlSW5kZXgobm9y
bWFsaXplZE1hcmt1cCwgcm9vdE1hcmt1cCk7XG4gICAgICAgIHZhciBkaWZmZXJlbmNlID0gJyAo
Y2xpZW50KSAnICsgbm9ybWFsaXplZE1hcmt1cC5zdWJzdHJpbmcoZGlmZkluZGV4IC0gMjAsIGRp
ZmZJbmRleCArIDIwKSArICdcXG4gKHNlcnZlcikgJyArIHJvb3RNYXJrdXAuc3Vic3RyaW5nKGRp
ZmZJbmRleCAtIDIwLCBkaWZmSW5kZXggKyAyMCk7XG5cbiAgICAgICAgIShjb250YWluZXIubm9k
ZVR5cGUgIT09IERPQ19OT0RFX1RZUEUpID8gIGZhbHNlID8gaW52YXJpYW50KGZhbHNlLCAnWW91
XFwncmUgdHJ5aW5nIHRvIHJlbmRlciBhIGNvbXBvbmVudCB0byB0aGUgZG9jdW1lbnQgdXNpbmcg
c2VydmVyIHJlbmRlcmluZyBidXQgdGhlIGNoZWNrc3VtIHdhcyBpbnZhbGlkLiBUaGlzIHVzdWFs
bHkgbWVhbnMgeW91IHJlbmRlcmVkIGEgZGlmZmVyZW50IGNvbXBvbmVudCB0eXBlIG9yIHByb3Bz
IG9uIHRoZSBjbGllbnQgZnJvbSB0aGUgb25lIG9uIHRoZSBzZXJ2ZXIsIG9yIHlvdXIgcmVuZGVy
KCkgbWV0aG9kcyBhcmUgaW1wdXJlLiBSZWFjdCBjYW5ub3QgaGFuZGxlIHRoaXMgY2FzZSBkdWUg
dG8gY3Jvc3MtYnJvd3NlciBxdWlya3MgYnkgcmVuZGVyaW5nIGF0IHRoZSBkb2N1bWVudCByb290
LiBZb3Ugc2hvdWxkIGxvb2sgZm9yIGVudmlyb25tZW50IGRlcGVuZGVudCBjb2RlIGluIHlvdXIg
Y29tcG9uZW50cyBhbmQgZW5zdXJlIHRoZSBwcm9wcyBhcmUgdGhlIHNhbWUgY2xpZW50IGFuZCBz
ZXJ2ZXIgc2lkZTpcXG4lcycsIGRpZmZlcmVuY2UpIDogX3Byb2RJbnZhcmlhbnQoJzQyJywgZGlm
ZmVyZW5jZSkgOiB2b2lkIDA7XG5cbiAgICAgICAgaWYgKGZhbHNlKSB7XG4gICAgICAgICAgcHJv
Y2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdSZWFj
dCBhdHRlbXB0ZWQgdG8gcmV1c2UgbWFya3VwIGluIGEgY29udGFpbmVyIGJ1dCB0aGUgJyArICdj
aGVja3N1bSB3YXMgaW52YWxpZC4gVGhpcyBnZW5lcmFsbHkgbWVhbnMgdGhhdCB5b3UgYXJlICcg
KyAndXNpbmcgc2VydmVyIHJlbmRlcmluZyBhbmQgdGhlIG1hcmt1cCBnZW5lcmF0ZWQgb24gdGhl
ICcgKyAnc2VydmVyIHdhcyBub3Qgd2hhdCB0aGUgY2xpZW50IHdhcyBleHBlY3RpbmcuIFJlYWN0
IGluamVjdGVkICcgKyAnbmV3IG1hcmt1cCB0byBjb21wZW5zYXRlIHdoaWNoIHdvcmtzIGJ1dCB5
b3UgaGF2ZSBsb3N0IG1hbnkgJyArICdvZiB0aGUgYmVuZWZpdHMgb2Ygc2VydmVyIHJlbmRlcmlu
Zy4gSW5zdGVhZCwgZmlndXJlIG91dCAnICsgJ3doeSB0aGUgbWFya3VwIGJlaW5nIGdlbmVyYXRl
ZCBpcyBkaWZmZXJlbnQgb24gdGhlIGNsaWVudCAnICsgJ29yIHNlcnZlcjpcXG4lcycsIGRpZmZl
cmVuY2UpIDogdm9pZCAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgIShjb250
YWluZXIubm9kZVR5cGUgIT09IERPQ19OT0RFX1RZUEUpID8gIGZhbHNlID8gaW52YXJpYW50KGZh
bHNlLCAnWW91XFwncmUgdHJ5aW5nIHRvIHJlbmRlciBhIGNvbXBvbmVudCB0byB0aGUgZG9jdW1l
bnQgYnV0IHlvdSBkaWRuXFwndCB1c2Ugc2VydmVyIHJlbmRlcmluZy4gV2UgY2FuXFwndCBkbyB0
aGlzIHdpdGhvdXQgdXNpbmcgc2VydmVyIHJlbmRlcmluZyBkdWUgdG8gY3Jvc3MtYnJvd3NlciBx
dWlya3MuIFNlZSBSZWFjdERPTVNlcnZlci5yZW5kZXJUb1N0cmluZygpIGZvciBzZXJ2ZXIgcmVu
ZGVyaW5nLicpIDogX3Byb2RJbnZhcmlhbnQoJzQzJykgOiB2b2lkIDA7XG5cbiAgICBpZiAodHJh
bnNhY3Rpb24udXNlQ3JlYXRlRWxlbWVudCkge1xuICAgICAgd2hpbGUgKGNvbnRhaW5lci5sYXN0
Q2hpbGQpIHtcbiAgICAgICAgY29udGFpbmVyLnJlbW92ZUNoaWxkKGNvbnRhaW5lci5sYXN0Q2hp
bGQpO1xuICAgICAgfVxuICAgICAgRE9NTGF6eVRyZWUuaW5zZXJ0VHJlZUJlZm9yZShjb250YWlu
ZXIsIG1hcmt1cCwgbnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldElubmVySFRNTChjb250
YWluZXIsIG1hcmt1cCk7XG4gICAgICBSZWFjdERPTUNvbXBvbmVudFRyZWUucHJlY2FjaGVOb2Rl
KGluc3RhbmNlLCBjb250YWluZXIuZmlyc3RDaGlsZCk7XG4gICAgfVxuXG4gICAgaWYgKGZhbHNl
KSB7XG4gICAgICB2YXIgaG9zdE5vZGUgPSBSZWFjdERPTUNvbXBvbmVudFRyZWUuZ2V0SW5zdGFu
Y2VGcm9tTm9kZShjb250YWluZXIuZmlyc3RDaGlsZCk7XG4gICAgICBpZiAoaG9zdE5vZGUuX2Rl
YnVnSUQgIT09IDApIHtcbiAgICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9u
SG9zdE9wZXJhdGlvbih7XG4gICAgICAgICAgaW5zdGFuY2VJRDogaG9zdE5vZGUuX2RlYnVnSUQs
XG4gICAgICAgICAgdHlwZTogJ21vdW50JyxcbiAgICAgICAgICBwYXlsb2FkOiBtYXJrdXAudG9T
dHJpbmcoKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5l
eHBvcnRzID0gUmVhY3RNb3VudDtcblxuLyoqKi8gfSksXG4vKiA4MyAqL1xuLyoqKi8gKGZ1bmN0
aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJp
Y3RcIjtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNl
ZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZp
bGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9u
YWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRT
IGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG5cblxudmFyIFJlYWN0Tm9k
ZVR5cGVzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NCk7XG5cbmZ1bmN0aW9uIGdldEhvc3RDb21w
b25lbnRGcm9tQ29tcG9zaXRlKGluc3QpIHtcbiAgdmFyIHR5cGU7XG5cbiAgd2hpbGUgKCh0eXBl
ID0gaW5zdC5fcmVuZGVyZWROb2RlVHlwZSkgPT09IFJlYWN0Tm9kZVR5cGVzLkNPTVBPU0lURSkg
e1xuICAgIGluc3QgPSBpbnN0Ll9yZW5kZXJlZENvbXBvbmVudDtcbiAgfVxuXG4gIGlmICh0eXBl
ID09PSBSZWFjdE5vZGVUeXBlcy5IT1NUKSB7XG4gICAgcmV0dXJuIGluc3QuX3JlbmRlcmVkQ29t
cG9uZW50O1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IFJlYWN0Tm9kZVR5cGVzLkVNUFRZKSB7XG4g
ICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRIb3N0Q29tcG9u
ZW50RnJvbUNvbXBvc2l0ZTtcblxuLyoqKi8gfSksXG4vKiA4NCAqL1xuLyoqKi8gKGZ1bmN0aW9u
KG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5c
InVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJhXCIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gQWN0aW9uVHlwZXM7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193
ZWJwYWNrX2V4cG9ydHNfX1tcImJcIl0gPSBjcmVhdGVTdG9yZTtcbi8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX2lzUGxhaW5PYmpl
Y3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDgpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9zeW1ib2xfb2JzZXJ2YWJsZV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygyMDMpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9zeW1ib2xfb2JzZXJ2YWJsZV9fX2RlZmF1bHQgPSBfX3dlYnBhY2tf
cmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3N5bWJvbF9vYnNlcnZhYmxl
X18pO1xuXG5cblxuLyoqXG4gKiBUaGVzZSBhcmUgcHJpdmF0ZSBhY3Rpb24gdHlwZXMgcmVzZXJ2
ZWQgYnkgUmVkdXguXG4gKiBGb3IgYW55IHVua25vd24gYWN0aW9ucywgeW91IG11c3QgcmV0dXJu
IHRoZSBjdXJyZW50IHN0YXRlLlxuICogSWYgdGhlIGN1cnJlbnQgc3RhdGUgaXMgdW5kZWZpbmVk
LCB5b3UgbXVzdCByZXR1cm4gdGhlIGluaXRpYWwgc3RhdGUuXG4gKiBEbyBub3QgcmVmZXJlbmNl
IHRoZXNlIGFjdGlvbiB0eXBlcyBkaXJlY3RseSBpbiB5b3VyIGNvZGUuXG4gKi9cbnZhciBBY3Rp
b25UeXBlcyA9IHtcbiAgSU5JVDogJ0BAcmVkdXgvSU5JVCdcblxuICAvKipcbiAgICogQ3JlYXRl
cyBhIFJlZHV4IHN0b3JlIHRoYXQgaG9sZHMgdGhlIHN0YXRlIHRyZWUuXG4gICAqIFRoZSBvbmx5
IHdheSB0byBjaGFuZ2UgdGhlIGRhdGEgaW4gdGhlIHN0b3JlIGlzIHRvIGNhbGwgYGRpc3BhdGNo
KClgIG9uIGl0LlxuICAgKlxuICAgKiBUaGVyZSBzaG91bGQgb25seSBiZSBhIHNpbmdsZSBzdG9y
ZSBpbiB5b3VyIGFwcC4gVG8gc3BlY2lmeSBob3cgZGlmZmVyZW50XG4gICAqIHBhcnRzIG9mIHRo
ZSBzdGF0ZSB0cmVlIHJlc3BvbmQgdG8gYWN0aW9ucywgeW91IG1heSBjb21iaW5lIHNldmVyYWwg
cmVkdWNlcnNcbiAgICogaW50byBhIHNpbmdsZSByZWR1Y2VyIGZ1bmN0aW9uIGJ5IHVzaW5nIGBj
b21iaW5lUmVkdWNlcnNgLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWR1Y2VyIEEg
ZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBuZXh0IHN0YXRlIHRyZWUsIGdpdmVuXG4gICAqIHRo
ZSBjdXJyZW50IHN0YXRlIHRyZWUgYW5kIHRoZSBhY3Rpb24gdG8gaGFuZGxlLlxuICAgKlxuICAg
KiBAcGFyYW0ge2FueX0gW3ByZWxvYWRlZFN0YXRlXSBUaGUgaW5pdGlhbCBzdGF0ZS4gWW91IG1h
eSBvcHRpb25hbGx5IHNwZWNpZnkgaXRcbiAgICogdG8gaHlkcmF0ZSB0aGUgc3RhdGUgZnJvbSB0
aGUgc2VydmVyIGluIHVuaXZlcnNhbCBhcHBzLCBvciB0byByZXN0b3JlIGFcbiAgICogcHJldmlv
dXNseSBzZXJpYWxpemVkIHVzZXIgc2Vzc2lvbi5cbiAgICogSWYgeW91IHVzZSBgY29tYmluZVJl
ZHVjZXJzYCB0byBwcm9kdWNlIHRoZSByb290IHJlZHVjZXIgZnVuY3Rpb24sIHRoaXMgbXVzdCBi
ZVxuICAgKiBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBzaGFwZSBhcyBgY29tYmluZVJlZHVjZXJz
YCBrZXlzLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZW5oYW5jZXJdIFRoZSBzdG9y
ZSBlbmhhbmNlci4gWW91IG1heSBvcHRpb25hbGx5IHNwZWNpZnkgaXRcbiAgICogdG8gZW5oYW5j
ZSB0aGUgc3RvcmUgd2l0aCB0aGlyZC1wYXJ0eSBjYXBhYmlsaXRpZXMgc3VjaCBhcyBtaWRkbGV3
YXJlLFxuICAgKiB0aW1lIHRyYXZlbCwgcGVyc2lzdGVuY2UsIGV0Yy4gVGhlIG9ubHkgc3RvcmUg
ZW5oYW5jZXIgdGhhdCBzaGlwcyB3aXRoIFJlZHV4XG4gICAqIGlzIGBhcHBseU1pZGRsZXdhcmUo
KWAuXG4gICAqXG4gICAqIEByZXR1cm5zIHtTdG9yZX0gQSBSZWR1eCBzdG9yZSB0aGF0IGxldHMg
eW91IHJlYWQgdGhlIHN0YXRlLCBkaXNwYXRjaCBhY3Rpb25zXG4gICAqIGFuZCBzdWJzY3JpYmUg
dG8gY2hhbmdlcy5cbiAgICovXG59O2Z1bmN0aW9uIGNyZWF0ZVN0b3JlKHJlZHVjZXIsIHByZWxv
YWRlZFN0YXRlLCBlbmhhbmNlcikge1xuICB2YXIgX3JlZjI7XG5cbiAgaWYgKHR5cGVvZiBwcmVs
b2FkZWRTdGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZW5oYW5jZXIgPT09ICd1bmRlZmlu
ZWQnKSB7XG4gICAgZW5oYW5jZXIgPSBwcmVsb2FkZWRTdGF0ZTtcbiAgICBwcmVsb2FkZWRTdGF0
ZSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZW5oYW5jZXIgIT09ICd1bmRlZmlu
ZWQnKSB7XG4gICAgaWYgKHR5cGVvZiBlbmhhbmNlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAg
dGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB0aGUgZW5oYW5jZXIgdG8gYmUgYSBmdW5jdGlvbi4n
KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZW5oYW5jZXIoY3JlYXRlU3RvcmUpKHJlZHVjZXIsIHBy
ZWxvYWRlZFN0YXRlKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcmVkdWNlciAhPT0gJ2Z1bmN0aW9u
Jykge1xuICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdGhlIHJlZHVjZXIgdG8gYmUgYSBm
dW5jdGlvbi4nKTtcbiAgfVxuXG4gIHZhciBjdXJyZW50UmVkdWNlciA9IHJlZHVjZXI7XG4gIHZh
ciBjdXJyZW50U3RhdGUgPSBwcmVsb2FkZWRTdGF0ZTtcbiAgdmFyIGN1cnJlbnRMaXN0ZW5lcnMg
PSBbXTtcbiAgdmFyIG5leHRMaXN0ZW5lcnMgPSBjdXJyZW50TGlzdGVuZXJzO1xuICB2YXIgaXNE
aXNwYXRjaGluZyA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIGVuc3VyZUNhbk11dGF0ZU5leHRMaXN0
ZW5lcnMoKSB7XG4gICAgaWYgKG5leHRMaXN0ZW5lcnMgPT09IGN1cnJlbnRMaXN0ZW5lcnMpIHtc
biAgICAgIG5leHRMaXN0ZW5lcnMgPSBjdXJyZW50TGlzdGVuZXJzLnNsaWNlKCk7XG4gICAgfVxu
ICB9XG5cbiAgLyoqXG4gICAqIFJlYWRzIHRoZSBzdGF0ZSB0cmVlIG1hbmFnZWQgYnkgdGhlIHN0
b3JlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7YW55fSBUaGUgY3VycmVudCBzdGF0ZSB0cmVlIG9m
IHlvdXIgYXBwbGljYXRpb24uXG4gICAqL1xuICBmdW5jdGlvbiBnZXRTdGF0ZSgpIHtcbiAgICBy
ZXR1cm4gY3VycmVudFN0YXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBjaGFuZ2UgbGlz
dGVuZXIuIEl0IHdpbGwgYmUgY2FsbGVkIGFueSB0aW1lIGFuIGFjdGlvbiBpcyBkaXNwYXRjaGVk
LFxuICAgKiBhbmQgc29tZSBwYXJ0IG9mIHRoZSBzdGF0ZSB0cmVlIG1heSBwb3RlbnRpYWxseSBo
YXZlIGNoYW5nZWQuIFlvdSBtYXkgdGhlblxuICAgKiBjYWxsIGBnZXRTdGF0ZSgpYCB0byByZWFk
IHRoZSBjdXJyZW50IHN0YXRlIHRyZWUgaW5zaWRlIHRoZSBjYWxsYmFjay5cbiAgICpcbiAgICog
WW91IG1heSBjYWxsIGBkaXNwYXRjaCgpYCBmcm9tIGEgY2hhbmdlIGxpc3RlbmVyLCB3aXRoIHRo
ZSBmb2xsb3dpbmdcbiAgICogY2F2ZWF0czpcbiAgICpcbiAgICogMS4gVGhlIHN1YnNjcmlwdGlv
bnMgYXJlIHNuYXBzaG90dGVkIGp1c3QgYmVmb3JlIGV2ZXJ5IGBkaXNwYXRjaCgpYCBjYWxsLlxu
ICAgKiBJZiB5b3Ugc3Vic2NyaWJlIG9yIHVuc3Vic2NyaWJlIHdoaWxlIHRoZSBsaXN0ZW5lcnMg
YXJlIGJlaW5nIGludm9rZWQsIHRoaXNcbiAgICogd2lsbCBub3QgaGF2ZSBhbnkgZWZmZWN0IG9u
IHRoZSBgZGlzcGF0Y2goKWAgdGhhdCBpcyBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuXG4gICAqIEhv
d2V2ZXIsIHRoZSBuZXh0IGBkaXNwYXRjaCgpYCBjYWxsLCB3aGV0aGVyIG5lc3RlZCBvciBub3Qs
IHdpbGwgdXNlIGEgbW9yZVxuICAgKiByZWNlbnQgc25hcHNob3Qgb2YgdGhlIHN1YnNjcmlwdGlv
biBsaXN0LlxuICAgKlxuICAgKiAyLiBUaGUgbGlzdGVuZXIgc2hvdWxkIG5vdCBleHBlY3QgdG8g
c2VlIGFsbCBzdGF0ZSBjaGFuZ2VzLCBhcyB0aGUgc3RhdGVcbiAgICogbWlnaHQgaGF2ZSBiZWVu
IHVwZGF0ZWQgbXVsdGlwbGUgdGltZXMgZHVyaW5nIGEgbmVzdGVkIGBkaXNwYXRjaCgpYCBiZWZv
cmVcbiAgICogdGhlIGxpc3RlbmVyIGlzIGNhbGxlZC4gSXQgaXMsIGhvd2V2ZXIsIGd1YXJhbnRl
ZWQgdGhhdCBhbGwgc3Vic2NyaWJlcnNcbiAgICogcmVnaXN0ZXJlZCBiZWZvcmUgdGhlIGBkaXNw
YXRjaCgpYCBzdGFydGVkIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIGxhdGVzdFxuICAgKiBzdGF0
ZSBieSB0aGUgdGltZSBpdCBleGl0cy5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlz
dGVuZXIgQSBjYWxsYmFjayB0byBiZSBpbnZva2VkIG9uIGV2ZXJ5IGRpc3BhdGNoLlxuICAgKiBA
cmV0dXJucyB7RnVuY3Rpb259IEEgZnVuY3Rpb24gdG8gcmVtb3ZlIHRoaXMgY2hhbmdlIGxpc3Rl
bmVyLlxuICAgKi9cbiAgZnVuY3Rpb24gc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgaWYgKHR5
cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdF
eHBlY3RlZCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLicpO1xuICAgIH1cblxuICAgIHZhciBp
c1N1YnNjcmliZWQgPSB0cnVlO1xuXG4gICAgZW5zdXJlQ2FuTXV0YXRlTmV4dExpc3RlbmVycygp
O1xuICAgIG5leHRMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG5cbiAgICByZXR1cm4gZnVuY3Rp
b24gdW5zdWJzY3JpYmUoKSB7XG4gICAgICBpZiAoIWlzU3Vic2NyaWJlZCkge1xuICAgICAgICBy
ZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlzU3Vic2NyaWJlZCA9IGZhbHNlO1xuXG4gICAgICBl
bnN1cmVDYW5NdXRhdGVOZXh0TGlzdGVuZXJzKCk7XG4gICAgICB2YXIgaW5kZXggPSBuZXh0TGlz
dGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgICAgbmV4dExpc3RlbmVycy5zcGxpY2UoaW5k
ZXgsIDEpO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGlzcGF0Y2hlcyBhbiBhY3Rpb24u
IEl0IGlzIHRoZSBvbmx5IHdheSB0byB0cmlnZ2VyIGEgc3RhdGUgY2hhbmdlLlxuICAgKlxuICAg
KiBUaGUgYHJlZHVjZXJgIGZ1bmN0aW9uLCB1c2VkIHRvIGNyZWF0ZSB0aGUgc3RvcmUsIHdpbGwg
YmUgY2FsbGVkIHdpdGggdGhlXG4gICAqIGN1cnJlbnQgc3RhdGUgdHJlZSBhbmQgdGhlIGdpdmVu
IGBhY3Rpb25gLiBJdHMgcmV0dXJuIHZhbHVlIHdpbGxcbiAgICogYmUgY29uc2lkZXJlZCB0aGUg
KipuZXh0Kiogc3RhdGUgb2YgdGhlIHRyZWUsIGFuZCB0aGUgY2hhbmdlIGxpc3RlbmVyc1xuICAg
KiB3aWxsIGJlIG5vdGlmaWVkLlxuICAgKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBv
bmx5IHN1cHBvcnRzIHBsYWluIG9iamVjdCBhY3Rpb25zLiBJZiB5b3Ugd2FudCB0b1xuICAgKiBk
aXNwYXRjaCBhIFByb21pc2UsIGFuIE9ic2VydmFibGUsIGEgdGh1bmssIG9yIHNvbWV0aGluZyBl
bHNlLCB5b3UgbmVlZCB0b1xuICAgKiB3cmFwIHlvdXIgc3RvcmUgY3JlYXRpbmcgZnVuY3Rpb24g
aW50byB0aGUgY29ycmVzcG9uZGluZyBtaWRkbGV3YXJlLiBGb3JcbiAgICogZXhhbXBsZSwgc2Vl
IHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgYHJlZHV4LXRodW5rYCBwYWNrYWdlLiBFdmVuIHRo
ZVxuICAgKiBtaWRkbGV3YXJlIHdpbGwgZXZlbnR1YWxseSBkaXNwYXRjaCBwbGFpbiBvYmplY3Qg
YWN0aW9ucyB1c2luZyB0aGlzIG1ldGhvZC5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGFj
dGlvbiBBIHBsYWluIG9iamVjdCByZXByZXNlbnRpbmcg4oCcd2hhdCBjaGFuZ2Vk4oCdLiBJdCBp
c1xuICAgKiBhIGdvb2QgaWRlYSB0byBrZWVwIGFjdGlvbnMgc2VyaWFsaXphYmxlIHNvIHlvdSBj
YW4gcmVjb3JkIGFuZCByZXBsYXkgdXNlclxuICAgKiBzZXNzaW9ucywgb3IgdXNlIHRoZSB0aW1l
IHRyYXZlbGxpbmcgYHJlZHV4LWRldnRvb2xzYC4gQW4gYWN0aW9uIG11c3QgaGF2ZVxuICAgKiBh
IGB0eXBlYCBwcm9wZXJ0eSB3aGljaCBtYXkgbm90IGJlIGB1bmRlZmluZWRgLiBJdCBpcyBhIGdv
b2QgaWRlYSB0byB1c2VcbiAgICogc3RyaW5nIGNvbnN0YW50cyBmb3IgYWN0aW9uIHR5cGVzLlxu
ICAgKlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBGb3IgY29udmVuaWVuY2UsIHRoZSBzYW1lIGFj
dGlvbiBvYmplY3QgeW91IGRpc3BhdGNoZWQuXG4gICAqXG4gICAqIE5vdGUgdGhhdCwgaWYgeW91
IHVzZSBhIGN1c3RvbSBtaWRkbGV3YXJlLCBpdCBtYXkgd3JhcCBgZGlzcGF0Y2goKWAgdG9cbiAg
ICogcmV0dXJuIHNvbWV0aGluZyBlbHNlIChmb3IgZXhhbXBsZSwgYSBQcm9taXNlIHlvdSBjYW4g
YXdhaXQpLlxuICAgKi9cbiAgZnVuY3Rpb24gZGlzcGF0Y2goYWN0aW9uKSB7XG4gICAgaWYgKCFP
YmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19pc1BsYWluT2JqZWN0
X19bXCJhXCIgLyogZGVmYXVsdCAqL10pKGFjdGlvbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJv
cignQWN0aW9ucyBtdXN0IGJlIHBsYWluIG9iamVjdHMuICcgKyAnVXNlIGN1c3RvbSBtaWRkbGV3
YXJlIGZvciBhc3luYyBhY3Rpb25zLicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgYWN0aW9u
LnR5cGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FjdGlvbnMg
bWF5IG5vdCBoYXZlIGFuIHVuZGVmaW5lZCBcInR5cGVcIiBwcm9wZXJ0eS4gJyArICdIYXZlIHlv
dSBtaXNzcGVsbGVkIGEgY29uc3RhbnQ/Jyk7XG4gICAgfVxuXG4gICAgaWYgKGlzRGlzcGF0Y2hp
bmcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUmVkdWNlcnMgbWF5IG5vdCBkaXNwYXRjaCBh
Y3Rpb25zLicpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBpc0Rpc3BhdGNoaW5nID0gdHJ1
ZTtcbiAgICAgIGN1cnJlbnRTdGF0ZSA9IGN1cnJlbnRSZWR1Y2VyKGN1cnJlbnRTdGF0ZSwgYWN0
aW9uKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaXNEaXNwYXRjaGluZyA9IGZhbHNlO1xuICAg
IH1cblxuICAgIHZhciBsaXN0ZW5lcnMgPSBjdXJyZW50TGlzdGVuZXJzID0gbmV4dExpc3RlbmVy
cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkrKykge1xuICAg
ICAgdmFyIGxpc3RlbmVyID0gbGlzdGVuZXJzW2ldO1xuICAgICAgbGlzdGVuZXIoKTtcbiAgICB9
XG5cbiAgICByZXR1cm4gYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIHRoZSBy
ZWR1Y2VyIGN1cnJlbnRseSB1c2VkIGJ5IHRoZSBzdG9yZSB0byBjYWxjdWxhdGUgdGhlIHN0YXRl
LlxuICAgKlxuICAgKiBZb3UgbWlnaHQgbmVlZCB0aGlzIGlmIHlvdXIgYXBwIGltcGxlbWVudHMg
Y29kZSBzcGxpdHRpbmcgYW5kIHlvdSB3YW50IHRvXG4gICAqIGxvYWQgc29tZSBvZiB0aGUgcmVk
dWNlcnMgZHluYW1pY2FsbHkuIFlvdSBtaWdodCBhbHNvIG5lZWQgdGhpcyBpZiB5b3VcbiAgICog
aW1wbGVtZW50IGEgaG90IHJlbG9hZGluZyBtZWNoYW5pc20gZm9yIFJlZHV4LlxuICAgKlxuICAg
KiBAcGFyYW0ge0Z1bmN0aW9ufSBuZXh0UmVkdWNlciBUaGUgcmVkdWNlciBmb3IgdGhlIHN0b3Jl
IHRvIHVzZSBpbnN0ZWFkLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZ1bmN0aW9u
IHJlcGxhY2VSZWR1Y2VyKG5leHRSZWR1Y2VyKSB7XG4gICAgaWYgKHR5cGVvZiBuZXh0UmVkdWNl
ciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB0aGUg
bmV4dFJlZHVjZXIgdG8gYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG5cbiAgICBjdXJyZW50UmVk
dWNlciA9IG5leHRSZWR1Y2VyO1xuICAgIGRpc3BhdGNoKHsgdHlwZTogQWN0aW9uVHlwZXMuSU5J
VCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcm9wZXJhYmlsaXR5IHBvaW50IGZvciBvYnNl
cnZhYmxlL3JlYWN0aXZlIGxpYnJhcmllcy5cbiAgICogQHJldHVybnMge29ic2VydmFibGV9IEEg
bWluaW1hbCBvYnNlcnZhYmxlIG9mIHN0YXRlIGNoYW5nZXMuXG4gICAqIEZvciBtb3JlIGluZm9y
bWF0aW9uLCBzZWUgdGhlIG9ic2VydmFibGUgcHJvcG9zYWw6XG4gICAqIGh0dHBzOi8vZ2l0aHVi
LmNvbS90YzM5L3Byb3Bvc2FsLW9ic2VydmFibGVcbiAgICovXG4gIGZ1bmN0aW9uIG9ic2VydmFi
bGUoKSB7XG4gICAgdmFyIF9yZWY7XG5cbiAgICB2YXIgb3V0ZXJTdWJzY3JpYmUgPSBzdWJzY3Jp
YmU7XG4gICAgcmV0dXJuIF9yZWYgPSB7XG4gICAgICAvKipcbiAgICAgICAqIFRoZSBtaW5pbWFs
IG9ic2VydmFibGUgc3Vic2NyaXB0aW9uIG1ldGhvZC5cbiAgICAgICAqIEBwYXJhbSB7T2JqZWN0
fSBvYnNlcnZlciBBbnkgb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgYXMgYW4gb2JzZXJ2ZXIuXG4g
ICAgICAgKiBUaGUgb2JzZXJ2ZXIgb2JqZWN0IHNob3VsZCBoYXZlIGEgYG5leHRgIG1ldGhvZC5c
biAgICAgICAqIEByZXR1cm5zIHtzdWJzY3JpcHRpb259IEFuIG9iamVjdCB3aXRoIGFuIGB1bnN1
YnNjcmliZWAgbWV0aG9kIHRoYXQgY2FuXG4gICAgICAgKiBiZSB1c2VkIHRvIHVuc3Vic2NyaWJl
IHRoZSBvYnNlcnZhYmxlIGZyb20gdGhlIHN0b3JlLCBhbmQgcHJldmVudCBmdXJ0aGVyXG4gICAg
ICAgKiBlbWlzc2lvbiBvZiB2YWx1ZXMgZnJvbSB0aGUgb2JzZXJ2YWJsZS5cbiAgICAgICAqL1xu
ICAgICAgc3Vic2NyaWJlOiBmdW5jdGlvbiBzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcbiAgICAgICAg
aWYgKHR5cGVvZiBvYnNlcnZlciAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcg
VHlwZUVycm9yKCdFeHBlY3RlZCB0aGUgb2JzZXJ2ZXIgdG8gYmUgYW4gb2JqZWN0LicpO1xuICAg
ICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gb2JzZXJ2ZVN0YXRlKCkge1xuICAgICAgICAgIGlm
IChvYnNlcnZlci5uZXh0KSB7XG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KGdldFN0YXRlKCkp
O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG9ic2VydmVTdGF0ZSgpO1xuICAg
ICAgICB2YXIgdW5zdWJzY3JpYmUgPSBvdXRlclN1YnNjcmliZShvYnNlcnZlU3RhdGUpO1xuICAg
ICAgICByZXR1cm4geyB1bnN1YnNjcmliZTogdW5zdWJzY3JpYmUgfTtcbiAgICAgIH1cbiAgICB9
LCBfcmVmW19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9zeW1ib2xfb2JzZXJ2YWJsZV9fX2Rl
ZmF1bHQuYV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBfcmVm
O1xuICB9XG5cbiAgLy8gV2hlbiBhIHN0b3JlIGlzIGNyZWF0ZWQsIGFuIFwiSU5JVFwiIGFjdGlv
biBpcyBkaXNwYXRjaGVkIHNvIHRoYXQgZXZlcnlcbiAgLy8gcmVkdWNlciByZXR1cm5zIHRoZWly
IGluaXRpYWwgc3RhdGUuIFRoaXMgZWZmZWN0aXZlbHkgcG9wdWxhdGVzXG4gIC8vIHRoZSBpbml0
aWFsIHN0YXRlIHRyZWUuXG4gIGRpc3BhdGNoKHsgdHlwZTogQWN0aW9uVHlwZXMuSU5JVCB9KTtc
blxuICByZXR1cm4gX3JlZjIgPSB7XG4gICAgZGlzcGF0Y2g6IGRpc3BhdGNoLFxuICAgIHN1YnNj
cmliZTogc3Vic2NyaWJlLFxuICAgIGdldFN0YXRlOiBnZXRTdGF0ZSxcbiAgICByZXBsYWNlUmVk
dWNlcjogcmVwbGFjZVJlZHVjZXJcbiAgfSwgX3JlZjJbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX3N5bWJvbF9vYnNlcnZhYmxlX19fZGVmYXVsdC5hXSA9IG9ic2VydmFibGUsIF9yZWYyO1xu
fVxuXG4vKioqLyB9KSxcbi8qIDg1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBh
Y2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xu
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fcm9v
dF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTYpO1xuXG5cbi8qKiBCdWlsdC1pbiB2YWx1
ZSByZWZlcmVuY2VzLiAqL1xudmFyIFN5bWJvbCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fcm9vdF9qc19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dLlN5bWJvbDtcblxuLyogaGFybW9ueSBk
ZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiYVwiXSA9IChTeW1ib2wpO1xu
XG5cbi8qKiovIH0pLFxuLyogODYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFj
a19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4v
KiB1bnVzZWQgaGFybW9ueSBleHBvcnQgZGVmYXVsdCAqL1xuLyoqXG4gKiBQcmludHMgYSB3YXJu
aW5nIGluIHRoZSBjb25zb2xlIGlmIGl0IGV4aXN0cy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30g
bWVzc2FnZSBUaGUgd2FybmluZyBtZXNzYWdlLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1
bmN0aW9uIHdhcm5pbmcobWVzc2FnZSkge1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xl
ICovXG4gIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGNvbnNv
bGUuZXJyb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xu
ICB9XG4gIC8qIGVzbGludC1lbmFibGUgbm8tY29uc29sZSAqL1xuICB0cnkge1xuICAgIC8vIFRo
aXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgaWYgeW91IGVuYWJs
ZVxuICAgIC8vIFwiYnJlYWsgb24gYWxsIGV4Y2VwdGlvbnNcIiBpbiB5b3VyIGNvbnNvbGUsXG4g
ICAgLy8gaXQgd291bGQgcGF1c2UgdGhlIGV4ZWN1dGlvbiBhdCB0aGlzIGxpbmUuXG4gICAgdGhy
b3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWVtcHR5ICov
XG4gIH0gY2F0Y2ggKGUpIHt9XG4gIC8qIGVzbGludC1lbmFibGUgbm8tZW1wdHkgKi9cbn1cblxu
LyoqKi8gfSksXG4vKiA4NyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4
cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhh
cm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0g
Y29tcG9zZTtcbi8qKlxuICogQ29tcG9zZXMgc2luZ2xlLWFyZ3VtZW50IGZ1bmN0aW9ucyBmcm9t
IHJpZ2h0IHRvIGxlZnQuIFRoZSByaWdodG1vc3RcbiAqIGZ1bmN0aW9uIGNhbiB0YWtlIG11bHRp
cGxlIGFyZ3VtZW50cyBhcyBpdCBwcm92aWRlcyB0aGUgc2lnbmF0dXJlIGZvclxuICogdGhlIHJl
c3VsdGluZyBjb21wb3NpdGUgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHsuLi5GdW5jdGlvbn0g
ZnVuY3MgVGhlIGZ1bmN0aW9ucyB0byBjb21wb3NlLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBB
IGZ1bmN0aW9uIG9idGFpbmVkIGJ5IGNvbXBvc2luZyB0aGUgYXJndW1lbnQgZnVuY3Rpb25zXG4g
KiBmcm9tIHJpZ2h0IHRvIGxlZnQuIEZvciBleGFtcGxlLCBjb21wb3NlKGYsIGcsIGgpIGlzIGlk
ZW50aWNhbCB0byBkb2luZ1xuICogKC4uLmFyZ3MpID0+IGYoZyhoKC4uLmFyZ3MpKSkuXG4gKi9c
blxuZnVuY3Rpb24gY29tcG9zZSgpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5n
dGgsIGZ1bmNzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7
XG4gICAgZnVuY3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICBpZiAoZnVuY3Mu
bGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgIHJldHVy
biBhcmc7XG4gICAgfTtcbiAgfVxuXG4gIGlmIChmdW5jcy5sZW5ndGggPT09IDEpIHtcbiAgICBy
ZXR1cm4gZnVuY3NbMF07XG4gIH1cblxuICByZXR1cm4gZnVuY3MucmVkdWNlKGZ1bmN0aW9uIChh
LCBiKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBhKGIuYXBwbHko
dW5kZWZpbmVkLCBhcmd1bWVudHMpKTtcbiAgICB9O1xuICB9KTtcbn1cblxuLyoqKi8gfSksXG4v
KiA4OCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193
ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvbXBvbmVudHNfUHJvdmlkZXJf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oMjEwKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2NvbXBvbmVudHNfY29ubmVjdEFkdmFuY2VkX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkxKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2Nvbm5lY3RfY29ubmVjdF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygyMTUpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29tcG9uZW50c19Qcm92aWRlcl9fW1wi
YVwiXTsgfSk7XG4vKiB1bnVzZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVQcm92aWRlciAqL1xu
LyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgY29ubmVjdEFkdmFuY2VkICovXG4vKiBoYXJtb255
IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgXCJiXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19jb25uZWN0X2Nvbm5lY3RfX1tcImFcIl07IH0pO1xuXG5cblxuXG5cblxuLyoqKi8g
fSksXG4vKiA4OSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNr
X3JlcXVpcmVfXykge1xuXG4vKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29r
LCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUg
aXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICog
TElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBB
biBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0
aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuXG5pZiAoZmFsc2Up
IHtcbiAgdmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9ICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rp
b24nICYmXG4gICAgU3ltYm9sLmZvciAmJlxuICAgIFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQn
KSkgfHxcbiAgICAweGVhYzc7XG5cbiAgdmFyIGlzVmFsaWRFbGVtZW50ID0gZnVuY3Rpb24ob2Jq
ZWN0KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmXG4gICAgICBv
YmplY3QgIT09IG51bGwgJiZcbiAgICAgIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVO
VF9UWVBFO1xuICB9O1xuXG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlv
dSBhcmUgb3B0aW5nIGludG8gbmV3IGRldmVsb3BtZW50IGJlaGF2aW9yLlxuICAvLyBodHRwOi8v
ZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIHZhciB0aHJvd09uRGlyZWN0QWNjZXNzID0gdHJ1
ZTtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJz
JykoaXNWYWxpZEVsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpO1xufSBlbHNlIHtcbiAgLy8g
QnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcg
cHJvZHVjdGlvbiBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJv
ZFxuICBtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMjExKSgpO1xufVxuXG5c
bi8qKiovIH0pLFxuLyogOTAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19l
eHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBo
YXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sIFwiYlwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN1YnNjcmlwdGlvblNoYXBl
OyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RvcmVT
aGFwZTsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX3Byb3BfdHlwZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODkpO1xuLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX19f
ZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfcHJvcF90eXBlc19fKTtcblxuXG52YXIgc3Vic2NyaXB0aW9uU2hhcGUgPSBfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5zaGFwZSh7XG4gIHRyeVN1
YnNjcmliZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0
LmEuZnVuYy5pc1JlcXVpcmVkLFxuICB0cnlVbnN1YnNjcmliZTogX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuZnVuYy5pc1JlcXVpcmVkLFxuICBub3Rp
ZnlOZXN0ZWRTdWJzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2Rl
ZmF1bHQuYS5mdW5jLmlzUmVxdWlyZWQsXG4gIGlzU3Vic2NyaWJlZDogX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuZnVuYy5pc1JlcXVpcmVkXG59KTtc
blxudmFyIHN0b3JlU2hhcGUgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBl
c19fX2RlZmF1bHQuYS5zaGFwZSh7XG4gIHN1YnNjcmliZTogX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuZnVuYy5pc1JlcXVpcmVkLFxuICBkaXNwYXRj
aDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuZnVu
Yy5pc1JlcXVpcmVkLFxuICBnZXRTdGF0ZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3By
b3BfdHlwZXNfX19kZWZhdWx0LmEuZnVuYy5pc1JlcXVpcmVkXG59KTtcblxuLyoqKi8gfSksXG4v
KiA5MSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193
ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0
IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gY29ubmVjdEFkdmFu
Y2VkO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9ob2lzdF9ub25fcmVhY3Rfc3RhdGljc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTIpO1xu
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9ob2lz
dF9ub25fcmVhY3Rfc3RhdGljc19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2hvaXN0X25vbl9yZWFjdF9zdGF0aWNzX18pO1xuLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlh
bnRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjEzKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X19fZGVmYXVsdCA9IF9fd2Vi
cGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X18p
O1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9y
ZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX19kZWZhdWx0ID0gX193ZWJwYWNr
X3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fKTtcbi8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxzX1N1
YnNjcmlwdGlvbl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTQpO1xuLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbHNfUHJvcFR5cGVzX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkwKTtcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24g
fHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5n
dGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291
cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBr
ZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07
XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYg
KCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJv
cihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9u
IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRo
cm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBz
dXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNh
bGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxs
IDogc2VsZjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsg
aWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0g
bnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhl
ciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBz
dWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFz
cy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxl
OiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3Vw
ZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1
YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1c
blxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFy
Z2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkg
Y29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwg
aSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5c
blxuXG5cblxuXG5cbnZhciBob3RSZWxvYWRpbmdWZXJzaW9uID0gMDtcbnZhciBkdW1teVN0YXRl
ID0ge307XG5mdW5jdGlvbiBub29wKCkge31cbmZ1bmN0aW9uIG1ha2VTZWxlY3RvclN0YXRlZnVs
KHNvdXJjZVNlbGVjdG9yLCBzdG9yZSkge1xuICAvLyB3cmFwIHRoZSBzZWxlY3RvciBpbiBhbiBv
YmplY3QgdGhhdCB0cmFja3MgaXRzIHJlc3VsdHMgYmV0d2VlbiBydW5zLlxuICB2YXIgc2VsZWN0
b3IgPSB7XG4gICAgcnVuOiBmdW5jdGlvbiBydW5Db21wb25lbnRTZWxlY3Rvcihwcm9wcykge1xu
ICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG5leHRQcm9wcyA9IHNvdXJjZVNlbGVjdG9yKHN0b3Jl
LmdldFN0YXRlKCksIHByb3BzKTtcbiAgICAgICAgaWYgKG5leHRQcm9wcyAhPT0gc2VsZWN0b3Iu
cHJvcHMgfHwgc2VsZWN0b3IuZXJyb3IpIHtcbiAgICAgICAgICBzZWxlY3Rvci5zaG91bGRDb21w
b25lbnRVcGRhdGUgPSB0cnVlO1xuICAgICAgICAgIHNlbGVjdG9yLnByb3BzID0gbmV4dFByb3Bz
O1xuICAgICAgICAgIHNlbGVjdG9yLmVycm9yID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSBj
YXRjaCAoZXJyb3IpIHtcbiAgICAgICAgc2VsZWN0b3Iuc2hvdWxkQ29tcG9uZW50VXBkYXRlID0g
dHJ1ZTtcbiAgICAgICAgc2VsZWN0b3IuZXJyb3IgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4g
IH07XG5cbiAgcmV0dXJuIHNlbGVjdG9yO1xufVxuXG5mdW5jdGlvbiBjb25uZWN0QWR2YW5jZWQo
XG4vKlxuICBzZWxlY3RvckZhY3RvcnkgaXMgYSBmdW5jIHRoYXQgaXMgcmVzcG9uc2libGUgZm9y
IHJldHVybmluZyB0aGUgc2VsZWN0b3IgZnVuY3Rpb24gdXNlZCB0b1xuICBjb21wdXRlIG5ldyBw
cm9wcyBmcm9tIHN0YXRlLCBwcm9wcywgYW5kIGRpc3BhdGNoLiBGb3IgZXhhbXBsZTpcbiAgICAg
ZXhwb3J0IGRlZmF1bHQgY29ubmVjdEFkdmFuY2VkKChkaXNwYXRjaCwgb3B0aW9ucykgPT4gKHN0
YXRlLCBwcm9wcykgPT4gKHtcbiAgICAgIHRoaW5nOiBzdGF0ZS50aGluZ3NbcHJvcHMudGhpbmdJ
ZF0sXG4gICAgICBzYXZlVGhpbmc6IGZpZWxkcyA9PiBkaXNwYXRjaChhY3Rpb25DcmVhdG9ycy5z
YXZlVGhpbmcocHJvcHMudGhpbmdJZCwgZmllbGRzKSksXG4gICAgfSkpKFlvdXJDb21wb25lbnQp
XG4gICBBY2Nlc3MgdG8gZGlzcGF0Y2ggaXMgcHJvdmlkZWQgdG8gdGhlIGZhY3Rvcnkgc28gc2Vs
ZWN0b3JGYWN0b3JpZXMgY2FuIGJpbmQgYWN0aW9uQ3JlYXRvcnNcbiAgb3V0c2lkZSBvZiB0aGVp
ciBzZWxlY3RvciBhcyBhbiBvcHRpbWl6YXRpb24uIE9wdGlvbnMgcGFzc2VkIHRvIGNvbm5lY3RB
ZHZhbmNlZCBhcmUgcGFzc2VkIHRvXG4gIHRoZSBzZWxlY3RvckZhY3RvcnksIGFsb25nIHdpdGgg
ZGlzcGxheU5hbWUgYW5kIFdyYXBwZWRDb21wb25lbnQsIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQu
XG4gICBOb3RlIHRoYXQgc2VsZWN0b3JGYWN0b3J5IGlzIHJlc3BvbnNpYmxlIGZvciBhbGwgY2Fj
aGluZy9tZW1vaXphdGlvbiBvZiBpbmJvdW5kIGFuZCBvdXRib3VuZFxuICBwcm9wcy4gRG8gbm90
IHVzZSBjb25uZWN0QWR2YW5jZWQgZGlyZWN0bHkgd2l0aG91dCBtZW1vaXppbmcgcmVzdWx0cyBi
ZXR3ZWVuIGNhbGxzIHRvIHlvdXJcbiAgc2VsZWN0b3IsIG90aGVyd2lzZSB0aGUgQ29ubmVjdCBj
b21wb25lbnQgd2lsbCByZS1yZW5kZXIgb24gZXZlcnkgc3RhdGUgb3IgcHJvcHMgY2hhbmdlLlxu
Ki9cbnNlbGVjdG9yRmFjdG9yeSkge1xuICB2YXIgX2NvbnRleHRUeXBlcywgX2NoaWxkQ29udGV4
dFR5cGVzO1xuXG4gIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRz
WzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgIF9yZWYkZ2V0RGlz
cGxheU5hbWUgPSBfcmVmLmdldERpc3BsYXlOYW1lLFxuICAgICAgZ2V0RGlzcGxheU5hbWUgPSBf
cmVmJGdldERpc3BsYXlOYW1lID09PSB1bmRlZmluZWQgPyBmdW5jdGlvbiAobmFtZSkge1xuICAg
IHJldHVybiAnQ29ubmVjdEFkdmFuY2VkKCcgKyBuYW1lICsgJyknO1xuICB9IDogX3JlZiRnZXRE
aXNwbGF5TmFtZSxcbiAgICAgIF9yZWYkbWV0aG9kTmFtZSA9IF9yZWYubWV0aG9kTmFtZSxcbiAg
ICAgIG1ldGhvZE5hbWUgPSBfcmVmJG1ldGhvZE5hbWUgPT09IHVuZGVmaW5lZCA/ICdjb25uZWN0
QWR2YW5jZWQnIDogX3JlZiRtZXRob2ROYW1lLFxuICAgICAgX3JlZiRyZW5kZXJDb3VudFByb3Ag
PSBfcmVmLnJlbmRlckNvdW50UHJvcCxcbiAgICAgIHJlbmRlckNvdW50UHJvcCA9IF9yZWYkcmVu
ZGVyQ291bnRQcm9wID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBfcmVmJHJlbmRlckNvdW50
UHJvcCxcbiAgICAgIF9yZWYkc2hvdWxkSGFuZGxlU3RhdCA9IF9yZWYuc2hvdWxkSGFuZGxlU3Rh
dGVDaGFuZ2VzLFxuICAgICAgc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzID0gX3JlZiRzaG91bGRI
YW5kbGVTdGF0ID09PSB1bmRlZmluZWQgPyB0cnVlIDogX3JlZiRzaG91bGRIYW5kbGVTdGF0LFxu
ICAgICAgX3JlZiRzdG9yZUtleSA9IF9yZWYuc3RvcmVLZXksXG4gICAgICBzdG9yZUtleSA9IF9y
ZWYkc3RvcmVLZXkgPT09IHVuZGVmaW5lZCA/ICdzdG9yZScgOiBfcmVmJHN0b3JlS2V5LFxuICAg
ICAgX3JlZiR3aXRoUmVmID0gX3JlZi53aXRoUmVmLFxuICAgICAgd2l0aFJlZiA9IF9yZWYkd2l0
aFJlZiA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBfcmVmJHdpdGhSZWYsXG4gICAgICBjb25uZWN0
T3B0aW9ucyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbJ2dldERpc3BsYXlOYW1l
JywgJ21ldGhvZE5hbWUnLCAncmVuZGVyQ291bnRQcm9wJywgJ3Nob3VsZEhhbmRsZVN0YXRlQ2hh
bmdlcycsICdzdG9yZUtleScsICd3aXRoUmVmJ10pO1xuXG4gIHZhciBzdWJzY3JpcHRpb25LZXkg
PSBzdG9yZUtleSArICdTdWJzY3JpcHRpb24nO1xuICB2YXIgdmVyc2lvbiA9IGhvdFJlbG9hZGlu
Z1ZlcnNpb24rKztcblxuICB2YXIgY29udGV4dFR5cGVzID0gKF9jb250ZXh0VHlwZXMgPSB7fSwg
X2NvbnRleHRUeXBlc1tzdG9yZUtleV0gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0
aWxzX1Byb3BUeXBlc19fW1wiYVwiIC8qIHN0b3JlU2hhcGUgKi9dLCBfY29udGV4dFR5cGVzW3N1
YnNjcmlwdGlvbktleV0gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxzX1Byb3BU
eXBlc19fW1wiYlwiIC8qIHN1YnNjcmlwdGlvblNoYXBlICovXSwgX2NvbnRleHRUeXBlcyk7XG4g
IHZhciBjaGlsZENvbnRleHRUeXBlcyA9IChfY2hpbGRDb250ZXh0VHlwZXMgPSB7fSwgX2NoaWxk
Q29udGV4dFR5cGVzW3N1YnNjcmlwdGlvbktleV0gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfX3V0aWxzX1Byb3BUeXBlc19fW1wiYlwiIC8qIHN1YnNjcmlwdGlvblNoYXBlICovXSwgX2No
aWxkQ29udGV4dFR5cGVzKTtcblxuICByZXR1cm4gZnVuY3Rpb24gd3JhcFdpdGhDb25uZWN0KFdy
YXBwZWRDb21wb25lbnQpIHtcbiAgICBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJp
YW50X19fZGVmYXVsdCgpKHR5cGVvZiBXcmFwcGVkQ29tcG9uZW50ID09ICdmdW5jdGlvbicsICdZ
b3UgbXVzdCBwYXNzIGEgY29tcG9uZW50IHRvIHRoZSBmdW5jdGlvbiByZXR1cm5lZCBieSAnICsg
KCdjb25uZWN0LiBJbnN0ZWFkIHJlY2VpdmVkICcgKyBKU09OLnN0cmluZ2lmeShXcmFwcGVkQ29t
cG9uZW50KSkpO1xuXG4gICAgdmFyIHdyYXBwZWRDb21wb25lbnROYW1lID0gV3JhcHBlZENvbXBv
bmVudC5kaXNwbGF5TmFtZSB8fCBXcmFwcGVkQ29tcG9uZW50Lm5hbWUgfHwgJ0NvbXBvbmVudCc7
XG5cbiAgICB2YXIgZGlzcGxheU5hbWUgPSBnZXREaXNwbGF5TmFtZSh3cmFwcGVkQ29tcG9uZW50
TmFtZSk7XG5cbiAgICB2YXIgc2VsZWN0b3JGYWN0b3J5T3B0aW9ucyA9IF9leHRlbmRzKHt9LCBj
b25uZWN0T3B0aW9ucywge1xuICAgICAgZ2V0RGlzcGxheU5hbWU6IGdldERpc3BsYXlOYW1lLFxu
ICAgICAgbWV0aG9kTmFtZTogbWV0aG9kTmFtZSxcbiAgICAgIHJlbmRlckNvdW50UHJvcDogcmVu
ZGVyQ291bnRQcm9wLFxuICAgICAgc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzOiBzaG91bGRIYW5k
bGVTdGF0ZUNoYW5nZXMsXG4gICAgICBzdG9yZUtleTogc3RvcmVLZXksXG4gICAgICB3aXRoUmVm
OiB3aXRoUmVmLFxuICAgICAgZGlzcGxheU5hbWU6IGRpc3BsYXlOYW1lLFxuICAgICAgd3JhcHBl
ZENvbXBvbmVudE5hbWU6IHdyYXBwZWRDb21wb25lbnROYW1lLFxuICAgICAgV3JhcHBlZENvbXBv
bmVudDogV3JhcHBlZENvbXBvbmVudFxuICAgIH0pO1xuXG4gICAgdmFyIENvbm5lY3QgPSBmdW5j
dGlvbiAoX0NvbXBvbmVudCkge1xuICAgICAgX2luaGVyaXRzKENvbm5lY3QsIF9Db21wb25lbnQp
O1xuXG4gICAgICBmdW5jdGlvbiBDb25uZWN0KHByb3BzLCBjb250ZXh0KSB7XG4gICAgICAgIF9j
bGFzc0NhbGxDaGVjayh0aGlzLCBDb25uZWN0KTtcblxuICAgICAgICB2YXIgX3RoaXMgPSBfcG9z
c2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMs
IGNvbnRleHQpKTtcblxuICAgICAgICBfdGhpcy52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICAgICAg
X3RoaXMuc3RhdGUgPSB7fTtcbiAgICAgICAgX3RoaXMucmVuZGVyQ291bnQgPSAwO1xuICAgICAg
ICBfdGhpcy5zdG9yZSA9IHByb3BzW3N0b3JlS2V5XSB8fCBjb250ZXh0W3N0b3JlS2V5XTtcbiAg
ICAgICAgX3RoaXMucHJvcHNNb2RlID0gQm9vbGVhbihwcm9wc1tzdG9yZUtleV0pO1xuICAgICAg
ICBfdGhpcy5zZXRXcmFwcGVkSW5zdGFuY2UgPSBfdGhpcy5zZXRXcmFwcGVkSW5zdGFuY2UuYmlu
ZChfdGhpcyk7XG5cbiAgICAgICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFu
dF9fX2RlZmF1bHQoKShfdGhpcy5zdG9yZSwgJ0NvdWxkIG5vdCBmaW5kIFwiJyArIHN0b3JlS2V5
ICsgJ1wiIGluIGVpdGhlciB0aGUgY29udGV4dCBvciBwcm9wcyBvZiAnICsgKCdcIicgKyBkaXNw
bGF5TmFtZSArICdcIi4gRWl0aGVyIHdyYXAgdGhlIHJvb3QgY29tcG9uZW50IGluIGEgPFByb3Zp
ZGVyPiwgJykgKyAoJ29yIGV4cGxpY2l0bHkgcGFzcyBcIicgKyBzdG9yZUtleSArICdcIiBhcyBh
IHByb3AgdG8gXCInICsgZGlzcGxheU5hbWUgKyAnXCIuJykpO1xuXG4gICAgICAgIF90aGlzLmlu
aXRTZWxlY3RvcigpO1xuICAgICAgICBfdGhpcy5pbml0U3Vic2NyaXB0aW9uKCk7XG4gICAgICAg
IHJldHVybiBfdGhpcztcbiAgICAgIH1cblxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuZ2V0Q2hp
bGRDb250ZXh0ID0gZnVuY3Rpb24gZ2V0Q2hpbGRDb250ZXh0KCkge1xuICAgICAgICB2YXIgX3Jl
ZjI7XG5cbiAgICAgICAgLy8gSWYgdGhpcyBjb21wb25lbnQgcmVjZWl2ZWQgc3RvcmUgZnJvbSBw
cm9wcywgaXRzIHN1YnNjcmlwdGlvbiBzaG91bGQgYmUgdHJhbnNwYXJlbnRcbiAgICAgICAgLy8g
dG8gYW55IGRlc2NlbmRhbnRzIHJlY2VpdmluZyBzdG9yZStzdWJzY3JpcHRpb24gZnJvbSBjb250
ZXh0OyBpdCBwYXNzZXMgYWxvbmdcbiAgICAgICAgLy8gc3Vic2NyaXB0aW9uIHBhc3NlZCB0byBp
dC4gT3RoZXJ3aXNlLCBpdCBzaGFkb3dzIHRoZSBwYXJlbnQgc3Vic2NyaXB0aW9uLCB3aGljaCBh
bGxvd3NcbiAgICAgICAgLy8gQ29ubmVjdCB0byBjb250cm9sIG9yZGVyaW5nIG9mIG5vdGlmaWNh
dGlvbnMgdG8gZmxvdyB0b3AtZG93bi5cbiAgICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMu
cHJvcHNNb2RlID8gbnVsbCA6IHRoaXMuc3Vic2NyaXB0aW9uO1xuICAgICAgICByZXR1cm4gX3Jl
ZjIgPSB7fSwgX3JlZjJbc3Vic2NyaXB0aW9uS2V5XSA9IHN1YnNjcmlwdGlvbiB8fCB0aGlzLmNv
bnRleHRbc3Vic2NyaXB0aW9uS2V5XSwgX3JlZjI7XG4gICAgICB9O1xuXG4gICAgICBDb25uZWN0
LnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50
KCkge1xuICAgICAgICBpZiAoIXNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcykgcmV0dXJuO1xuXG4g
ICAgICAgIC8vIGNvbXBvbmVudFdpbGxNb3VudCBmaXJlcyBkdXJpbmcgc2VydmVyIHNpZGUgcmVu
ZGVyaW5nLCBidXQgY29tcG9uZW50RGlkTW91bnQgYW5kXG4gICAgICAgIC8vIGNvbXBvbmVudFdp
bGxVbm1vdW50IGRvIG5vdC4gQmVjYXVzZSBvZiB0aGlzLCB0cnlTdWJzY3JpYmUgaGFwcGVucyBk
dXJpbmcgLi4uZGlkTW91bnQuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgdW5zdWJzY3JpcHRpb24g
d291bGQgbmV2ZXIgdGFrZSBwbGFjZSBkdXJpbmcgU1NSLCBjYXVzaW5nIGEgbWVtb3J5IGxlYWsu
XG4gICAgICAgIC8vIFRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBhIGNoaWxkIGNvbXBvbmVudCBt
YXkgaGF2ZSB0cmlnZ2VyZWQgYSBzdGF0ZSBjaGFuZ2UgYnlcbiAgICAgICAgLy8gZGlzcGF0Y2hp
bmcgYW4gYWN0aW9uIGluIGl0cyBjb21wb25lbnRXaWxsTW91bnQsIHdlIGhhdmUgdG8gcmUtcnVu
IHRoZSBzZWxlY3QgYW5kIG1heWJlXG4gICAgICAgIC8vIHJlLXJlbmRlci5cbiAgICAgICAgdGhp
cy5zdWJzY3JpcHRpb24udHJ5U3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0b3IucnVu
KHRoaXMucHJvcHMpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rvci5zaG91bGRDb21wb25lbnRV
cGRhdGUpIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgICAgIH07XG5cbiAgICAgIENvbm5lY3QucHJv
dG90eXBlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxs
UmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xuICAgICAgICB0aGlzLnNlbGVjdG9yLnJ1bihuZXh0
UHJvcHMpO1xuICAgICAgfTtcblxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuc2hvdWxkQ29tcG9u
ZW50VXBkYXRlID0gZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKCkge1xuICAgICAgICBy
ZXR1cm4gdGhpcy5zZWxlY3Rvci5zaG91bGRDb21wb25lbnRVcGRhdGU7XG4gICAgICB9O1xuXG4g
ICAgICBDb25uZWN0LnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNv
bXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHRo
aXMuc3Vic2NyaXB0aW9uLnRyeVVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0
aW9uID0gbnVsbDtcbiAgICAgICAgdGhpcy5ub3RpZnlOZXN0ZWRTdWJzID0gbm9vcDtcbiAgICAg
ICAgdGhpcy5zdG9yZSA9IG51bGw7XG4gICAgICAgIHRoaXMuc2VsZWN0b3IucnVuID0gbm9vcDtc
biAgICAgICAgdGhpcy5zZWxlY3Rvci5zaG91bGRDb21wb25lbnRVcGRhdGUgPSBmYWxzZTtcbiAg
ICAgIH07XG5cbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmdldFdyYXBwZWRJbnN0YW5jZSA9IGZ1
bmN0aW9uIGdldFdyYXBwZWRJbnN0YW5jZSgpIHtcbiAgICAgICAgX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX2ludmFyaWFudF9fX2RlZmF1bHQoKSh3aXRoUmVmLCAnVG8gYWNjZXNzIHRoZSB3
cmFwcGVkIGluc3RhbmNlLCB5b3UgbmVlZCB0byBzcGVjaWZ5ICcgKyAoJ3sgd2l0aFJlZjogdHJ1
ZSB9IGluIHRoZSBvcHRpb25zIGFyZ3VtZW50IG9mIHRoZSAnICsgbWV0aG9kTmFtZSArICcoKSBj
YWxsLicpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMud3JhcHBlZEluc3RhbmNlO1xuICAgICAgfTtc
blxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuc2V0V3JhcHBlZEluc3RhbmNlID0gZnVuY3Rpb24g
c2V0V3JhcHBlZEluc3RhbmNlKHJlZikge1xuICAgICAgICB0aGlzLndyYXBwZWRJbnN0YW5jZSA9
IHJlZjtcbiAgICAgIH07XG5cbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmluaXRTZWxlY3RvciA9
IGZ1bmN0aW9uIGluaXRTZWxlY3RvcigpIHtcbiAgICAgICAgdmFyIHNvdXJjZVNlbGVjdG9yID0g
c2VsZWN0b3JGYWN0b3J5KHRoaXMuc3RvcmUuZGlzcGF0Y2gsIHNlbGVjdG9yRmFjdG9yeU9wdGlv
bnMpO1xuICAgICAgICB0aGlzLnNlbGVjdG9yID0gbWFrZVNlbGVjdG9yU3RhdGVmdWwoc291cmNl
U2VsZWN0b3IsIHRoaXMuc3RvcmUpO1xuICAgICAgICB0aGlzLnNlbGVjdG9yLnJ1bih0aGlzLnBy
b3BzKTtcbiAgICAgIH07XG5cbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmluaXRTdWJzY3JpcHRp
b24gPSBmdW5jdGlvbiBpbml0U3Vic2NyaXB0aW9uKCkge1xuICAgICAgICBpZiAoIXNob3VsZEhh
bmRsZVN0YXRlQ2hhbmdlcykgcmV0dXJuO1xuXG4gICAgICAgIC8vIHBhcmVudFN1YidzIHNvdXJj
ZSBzaG91bGQgbWF0Y2ggd2hlcmUgc3RvcmUgY2FtZSBmcm9tOiBwcm9wcyB2cy4gY29udGV4dC4g
QSBjb21wb25lbnRcbiAgICAgICAgLy8gY29ubmVjdGVkIHRvIHRoZSBzdG9yZSB2aWEgcHJvcHMg
c2hvdWxkbid0IHVzZSBzdWJzY3JpcHRpb24gZnJvbSBjb250ZXh0LCBvciB2aWNlIHZlcnNhLlxu
ICAgICAgICB2YXIgcGFyZW50U3ViID0gKHRoaXMucHJvcHNNb2RlID8gdGhpcy5wcm9wcyA6IHRo
aXMuY29udGV4dClbc3Vic2NyaXB0aW9uS2V5XTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24g
PSBuZXcgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX191dGlsc19TdWJzY3JpcHRpb25fX1tc
ImFcIiAvKiBkZWZhdWx0ICovXSh0aGlzLnN0b3JlLCBwYXJlbnRTdWIsIHRoaXMub25TdGF0ZUNo
YW5nZS5iaW5kKHRoaXMpKTtcblxuICAgICAgICAvLyBgbm90aWZ5TmVzdGVkU3Vic2AgaXMgZHVw
bGljYXRlZCB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIGNvbXBvbmVudCBpcyAgdW5tb3Vu
dGVkIGluXG4gICAgICAgIC8vIHRoZSBtaWRkbGUgb2YgdGhlIG5vdGlmaWNhdGlvbiBsb29wLCB3
aGVyZSBgdGhpcy5zdWJzY3JpcHRpb25gIHdpbGwgdGhlbiBiZSBudWxsLiBBblxuICAgICAgICAv
LyBleHRyYSBudWxsIGNoZWNrIGV2ZXJ5IGNoYW5nZSBjYW4gYmUgYXZvaWRlZCBieSBjb3B5aW5n
IHRoZSBtZXRob2Qgb250byBgdGhpc2AgYW5kIHRoZW5cbiAgICAgICAgLy8gcmVwbGFjaW5nIGl0
IHdpdGggYSBuby1vcCBvbiB1bm1vdW50LiBUaGlzIGNhbiBwcm9iYWJseSBiZSBhdm9pZGVkIGlm
IFN1YnNjcmlwdGlvbidzXG4gICAgICAgIC8vIGxpc3RlbmVycyBsb2dpYyBpcyBjaGFuZ2VkIHRv
IG5vdCBjYWxsIGxpc3RlbmVycyB0aGF0IGhhdmUgYmVlbiB1bnN1YnNjcmliZWQgaW4gdGhlXG4g
ICAgICAgIC8vIG1pZGRsZSBvZiB0aGUgbm90aWZpY2F0aW9uIGxvb3AuXG4gICAgICAgIHRoaXMu
bm90aWZ5TmVzdGVkU3VicyA9IHRoaXMuc3Vic2NyaXB0aW9uLm5vdGlmeU5lc3RlZFN1YnMuYmlu
ZCh0aGlzLnN1YnNjcmlwdGlvbik7XG4gICAgICB9O1xuXG4gICAgICBDb25uZWN0LnByb3RvdHlw
ZS5vblN0YXRlQ2hhbmdlID0gZnVuY3Rpb24gb25TdGF0ZUNoYW5nZSgpIHtcbiAgICAgICAgdGhp
cy5zZWxlY3Rvci5ydW4odGhpcy5wcm9wcyk7XG5cbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdG9y
LnNob3VsZENvbXBvbmVudFVwZGF0ZSkge1xuICAgICAgICAgIHRoaXMubm90aWZ5TmVzdGVkU3Vi
cygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY29tcG9uZW50RGlkVXBkYXRl
ID0gdGhpcy5ub3RpZnlOZXN0ZWRTdWJzT25Db21wb25lbnREaWRVcGRhdGU7XG4gICAgICAgICAg
dGhpcy5zZXRTdGF0ZShkdW1teVN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAg
Q29ubmVjdC5wcm90b3R5cGUubm90aWZ5TmVzdGVkU3Vic09uQ29tcG9uZW50RGlkVXBkYXRlID0g
ZnVuY3Rpb24gbm90aWZ5TmVzdGVkU3Vic09uQ29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAg
ICAvLyBgY29tcG9uZW50RGlkVXBkYXRlYCBpcyBjb25kaXRpb25hbGx5IGltcGxlbWVudGVkIHdo
ZW4gYG9uU3RhdGVDaGFuZ2VgIGRldGVybWluZXMgaXRcbiAgICAgICAgLy8gbmVlZHMgdG8gbm90
aWZ5IG5lc3RlZCBzdWJzLiBPbmNlIGNhbGxlZCwgaXQgdW5pbXBsZW1lbnRzIGl0c2VsZiB1bnRp
bCBmdXJ0aGVyIHN0YXRlXG4gICAgICAgIC8vIGNoYW5nZXMgb2NjdXIuIERvaW5nIGl0IHRoaXMg
d2F5IHZzIGhhdmluZyBhIHBlcm1hbmVudCBgY29tcG9uZW50RGlkVXBkYXRlYCB0aGF0IGRvZXNc
biAgICAgICAgLy8gYSBib29sZWFuIGNoZWNrIGV2ZXJ5IHRpbWUgYXZvaWRzIGFuIGV4dHJhIG1l
dGhvZCBjYWxsIG1vc3Qgb2YgdGhlIHRpbWUsIHJlc3VsdGluZ1xuICAgICAgICAvLyBpbiBzb21l
IHBlcmYgYm9vc3QuXG4gICAgICAgIHRoaXMuY29tcG9uZW50RGlkVXBkYXRlID0gdW5kZWZpbmVk
O1xuICAgICAgICB0aGlzLm5vdGlmeU5lc3RlZFN1YnMoKTtcbiAgICAgIH07XG5cbiAgICAgIENv
bm5lY3QucHJvdG90eXBlLmlzU3Vic2NyaWJlZCA9IGZ1bmN0aW9uIGlzU3Vic2NyaWJlZCgpIHtc
biAgICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5zdWJzY3JpcHRpb24pICYmIHRoaXMuc3Vic2Ny
aXB0aW9uLmlzU3Vic2NyaWJlZCgpO1xuICAgICAgfTtcblxuICAgICAgQ29ubmVjdC5wcm90b3R5
cGUuYWRkRXh0cmFQcm9wcyA9IGZ1bmN0aW9uIGFkZEV4dHJhUHJvcHMocHJvcHMpIHtcbiAgICAg
ICAgaWYgKCF3aXRoUmVmICYmICFyZW5kZXJDb3VudFByb3AgJiYgISh0aGlzLnByb3BzTW9kZSAm
JiB0aGlzLnN1YnNjcmlwdGlvbikpIHJldHVybiBwcm9wcztcbiAgICAgICAgLy8gbWFrZSBhIHNo
YWxsb3cgY29weSBzbyB0aGF0IGZpZWxkcyBhZGRlZCBkb24ndCBsZWFrIHRvIHRoZSBvcmlnaW5h
bCBzZWxlY3Rvci5cbiAgICAgICAgLy8gdGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBmb3Ig
J3JlZicgc2luY2UgdGhhdCdzIGEgcmVmZXJlbmNlIGJhY2sgdG8gdGhlIGNvbXBvbmVudFxuICAg
ICAgICAvLyBpbnN0YW5jZS4gYSBzaW5nbGV0b24gbWVtb2l6ZWQgc2VsZWN0b3Igd291bGQgdGhl
biBiZSBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZVxuICAgICAgICAvLyBpbnN0YW5jZSwgcHJl
dmVudGluZyB0aGUgaW5zdGFuY2UgZnJvbSBiZWluZyBnYXJiYWdlIGNvbGxlY3RlZCwgYW5kIHRo
YXQgd291bGQgYmUgYmFkXG4gICAgICAgIHZhciB3aXRoRXh0cmFzID0gX2V4dGVuZHMoe30sIHBy
b3BzKTtcbiAgICAgICAgaWYgKHdpdGhSZWYpIHdpdGhFeHRyYXMucmVmID0gdGhpcy5zZXRXcmFw
cGVkSW5zdGFuY2U7XG4gICAgICAgIGlmIChyZW5kZXJDb3VudFByb3ApIHdpdGhFeHRyYXNbcmVu
ZGVyQ291bnRQcm9wXSA9IHRoaXMucmVuZGVyQ291bnQrKztcbiAgICAgICAgaWYgKHRoaXMucHJv
cHNNb2RlICYmIHRoaXMuc3Vic2NyaXB0aW9uKSB3aXRoRXh0cmFzW3N1YnNjcmlwdGlvbktleV0g
PSB0aGlzLnN1YnNjcmlwdGlvbjtcbiAgICAgICAgcmV0dXJuIHdpdGhFeHRyYXM7XG4gICAgICB9
O1xuXG4gICAgICBDb25uZWN0LnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7
XG4gICAgICAgIHZhciBzZWxlY3RvciA9IHRoaXMuc2VsZWN0b3I7XG4gICAgICAgIHNlbGVjdG9y
LnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChzZWxlY3Rvci5l
cnJvcikge1xuICAgICAgICAgIHRocm93IHNlbGVjdG9yLmVycm9yO1xuICAgICAgICB9IGVsc2Ug
e1xuICAgICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3Jl
YWN0X19bXCJjcmVhdGVFbGVtZW50XCJdKShXcmFwcGVkQ29tcG9uZW50LCB0aGlzLmFkZEV4dHJh
UHJvcHMoc2VsZWN0b3IucHJvcHMpKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgcmV0
dXJuIENvbm5lY3Q7XG4gICAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tc
IkNvbXBvbmVudFwiXSk7XG5cbiAgICBDb25uZWN0LldyYXBwZWRDb21wb25lbnQgPSBXcmFwcGVk
Q29tcG9uZW50O1xuICAgIENvbm5lY3QuZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcbiAgICBD
b25uZWN0LmNoaWxkQ29udGV4dFR5cGVzID0gY2hpbGRDb250ZXh0VHlwZXM7XG4gICAgQ29ubmVj
dC5jb250ZXh0VHlwZXMgPSBjb250ZXh0VHlwZXM7XG4gICAgQ29ubmVjdC5wcm9wVHlwZXMgPSBj
b250ZXh0VHlwZXM7XG5cbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgIENvbm5lY3QucHJvdG90eXBl
LmNvbXBvbmVudFdpbGxVcGRhdGUgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVXBkYXRlKCkge1xu
ICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgICAvLyBXZSBhcmUgaG90IHJlbG9h
ZGluZyFcbiAgICAgICAgaWYgKHRoaXMudmVyc2lvbiAhPT0gdmVyc2lvbikge1xuICAgICAgICAg
IHRoaXMudmVyc2lvbiA9IHZlcnNpb247XG4gICAgICAgICAgdGhpcy5pbml0U2VsZWN0b3IoKTtc
blxuICAgICAgICAgIC8vIElmIGFueSBjb25uZWN0ZWQgZGVzY2VuZGFudHMgZG9uJ3QgaG90IHJl
bG9hZCAoYW5kIHJlc3Vic2NyaWJlIGluIHRoZSBwcm9jZXNzKSwgdGhlaXJcbiAgICAgICAgICAv
LyBsaXN0ZW5lcnMgd2lsbCBiZSBsb3N0IHdoZW4gd2UgdW5zdWJzY3JpYmUuIFVuZm9ydHVuYXRl
bHksIGJ5IGNvcHlpbmcgb3ZlciBhbGxcbiAgICAgICAgICAvLyBsaXN0ZW5lcnMsIHRoaXMgZG9l
cyBtZWFuIHRoYXQgdGhlIG9sZCB2ZXJzaW9ucyBvZiBjb25uZWN0ZWQgZGVzY2VuZGFudHMgd2ls
bCBzdGlsbCBiZVxuICAgICAgICAgIC8vIG5vdGlmaWVkIG9mIHN0YXRlIGNoYW5nZXM7IGhvd2V2
ZXIsIHRoZWlyIG9uU3RhdGVDaGFuZ2UgZnVuY3Rpb24gaXMgYSBuby1vcCBzbyB0aGlzXG4gICAg
ICAgICAgLy8gaXNuJ3QgYSBodWdlIGRlYWwuXG4gICAgICAgICAgdmFyIG9sZExpc3RlbmVycyA9
IFtdO1xuXG4gICAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICBv
bGRMaXN0ZW5lcnMgPSB0aGlzLnN1YnNjcmlwdGlvbi5saXN0ZW5lcnMuZ2V0KCk7XG4gICAgICAg
ICAgICB0aGlzLnN1YnNjcmlwdGlvbi50cnlVbnN1YnNjcmliZSgpO1xuICAgICAgICAgIH1cbiAg
ICAgICAgICB0aGlzLmluaXRTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICBpZiAoc2hvdWxkSGFu
ZGxlU3RhdGVDaGFuZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi50cnlTdWJz
Y3JpYmUoKTtcbiAgICAgICAgICAgIG9sZExpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0
ZW5lcikge1xuICAgICAgICAgICAgICByZXR1cm4gX3RoaXMyLnN1YnNjcmlwdGlvbi5saXN0ZW5l
cnMuc3Vic2NyaWJlKGxpc3RlbmVyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAg
ICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX2hvaXN0X25vbl9yZWFjdF9zdGF0aWNzX19fZGVmYXVsdCgpKENvbm5lY3QsIFdy
YXBwZWRDb21wb25lbnQpO1xuICB9O1xufVxuXG4vKioqLyB9KSxcbi8qIDkyICovXG4vKioqLyAo
ZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9f
KSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8g
X193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSB3cmFwTWFwVG9Qcm9wc0NvbnN0YW50O1xuLyog
dW51c2VkIGhhcm1vbnkgZXhwb3J0IGdldERlcGVuZHNPbk93blByb3BzICovXG4vKiBoYXJtb255
IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiYlwiXSA9IHdyYXBN
YXBUb1Byb3BzRnVuYztcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX3V0aWxzX3ZlcmlmeVBsYWluT2JqZWN0X18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKDkzKTtcblxuXG5mdW5jdGlvbiB3cmFwTWFwVG9Qcm9wc0NvbnN0YW50KGdldENvbnN0YW50
KSB7XG4gIHJldHVybiBmdW5jdGlvbiBpbml0Q29uc3RhbnRTZWxlY3RvcihkaXNwYXRjaCwgb3B0
aW9ucykge1xuICAgIHZhciBjb25zdGFudCA9IGdldENvbnN0YW50KGRpc3BhdGNoLCBvcHRpb25z
KTtcblxuICAgIGZ1bmN0aW9uIGNvbnN0YW50U2VsZWN0b3IoKSB7XG4gICAgICByZXR1cm4gY29u
c3RhbnQ7XG4gICAgfVxuICAgIGNvbnN0YW50U2VsZWN0b3IuZGVwZW5kc09uT3duUHJvcHMgPSBm
YWxzZTtcbiAgICByZXR1cm4gY29uc3RhbnRTZWxlY3RvcjtcbiAgfTtcbn1cblxuLy8gZGVwZW5k
c09uT3duUHJvcHMgaXMgdXNlZCBieSBjcmVhdGVNYXBUb1Byb3BzUHJveHkgdG8gZGV0ZXJtaW5l
IHdoZXRoZXIgdG8gcGFzcyBwcm9wcyBhcyBhcmdzXG4vLyB0byB0aGUgbWFwVG9Qcm9wcyBmdW5j
dGlvbiBiZWluZyB3cmFwcGVkLiBJdCBpcyBhbHNvIHVzZWQgYnkgbWFrZVB1cmVQcm9wc1NlbGVj
dG9yIHRvIGRldGVybWluZVxuLy8gd2hldGhlciBtYXBUb1Byb3BzIG5lZWRzIHRvIGJlIGludm9r
ZWQgd2hlbiBwcm9wcyBoYXZlIGNoYW5nZWQuXG4vLyBcbi8vIEEgbGVuZ3RoIG9mIG9uZSBzaWdu
YWxzIHRoYXQgbWFwVG9Qcm9wcyBkb2VzIG5vdCBkZXBlbmQgb24gcHJvcHMgZnJvbSB0aGUgcGFy
ZW50IGNvbXBvbmVudC5cbi8vIEEgbGVuZ3RoIG9mIHplcm8gaXMgYXNzdW1lZCB0byBtZWFuIG1h
cFRvUHJvcHMgaXMgZ2V0dGluZyBhcmdzIHZpYSBhcmd1bWVudHMgb3IgLi4uYXJncyBhbmRcbi8v
IHRoZXJlZm9yZSBub3QgcmVwb3J0aW5nIGl0cyBsZW5ndGggYWNjdXJhdGVseS4uXG5mdW5jdGlv
biBnZXREZXBlbmRzT25Pd25Qcm9wcyhtYXBUb1Byb3BzKSB7XG4gIHJldHVybiBtYXBUb1Byb3Bz
LmRlcGVuZHNPbk93blByb3BzICE9PSBudWxsICYmIG1hcFRvUHJvcHMuZGVwZW5kc09uT3duUHJv
cHMgIT09IHVuZGVmaW5lZCA/IEJvb2xlYW4obWFwVG9Qcm9wcy5kZXBlbmRzT25Pd25Qcm9wcykg
OiBtYXBUb1Byb3BzLmxlbmd0aCAhPT0gMTtcbn1cblxuLy8gVXNlZCBieSB3aGVuTWFwU3RhdGVU
b1Byb3BzSXNGdW5jdGlvbiBhbmQgd2hlbk1hcERpc3BhdGNoVG9Qcm9wc0lzRnVuY3Rpb24sXG4v
LyB0aGlzIGZ1bmN0aW9uIHdyYXBzIG1hcFRvUHJvcHMgaW4gYSBwcm94eSBmdW5jdGlvbiB3aGlj
aCBkb2VzIHNldmVyYWwgdGhpbmdzOlxuLy8gXG4vLyAgKiBEZXRlY3RzIHdoZXRoZXIgdGhlIG1h
cFRvUHJvcHMgZnVuY3Rpb24gYmVpbmcgY2FsbGVkIGRlcGVuZHMgb24gcHJvcHMsIHdoaWNoXG4v
LyAgICBpcyB1c2VkIGJ5IHNlbGVjdG9yRmFjdG9yeSB0byBkZWNpZGUgaWYgaXQgc2hvdWxkIHJl
aW52b2tlIG9uIHByb3BzIGNoYW5nZXMuXG4vLyAgICBcbi8vICAqIE9uIGZpcnN0IGNhbGwsIGhh
bmRsZXMgbWFwVG9Qcm9wcyBpZiByZXR1cm5zIGFub3RoZXIgZnVuY3Rpb24sIGFuZCB0cmVhdHMg
dGhhdFxuLy8gICAgbmV3IGZ1bmN0aW9uIGFzIHRoZSB0cnVlIG1hcFRvUHJvcHMgZm9yIHN1YnNl
cXVlbnQgY2FsbHMuXG4vLyAgICBcbi8vICAqIE9uIGZpcnN0IGNhbGwsIHZlcmlmaWVzIHRoZSBm
aXJzdCByZXN1bHQgaXMgYSBwbGFpbiBvYmplY3QsIGluIG9yZGVyIHRvIHdhcm5cbi8vICAgIHRo
ZSBkZXZlbG9wZXIgdGhhdCB0aGVpciBtYXBUb1Byb3BzIGZ1bmN0aW9uIGlzIG5vdCByZXR1cm5p
bmcgYSB2YWxpZCByZXN1bHQuXG4vLyAgICBcbmZ1bmN0aW9uIHdyYXBNYXBUb1Byb3BzRnVuYyht
YXBUb1Byb3BzLCBtZXRob2ROYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpbml0UHJveHlTZWxl
Y3RvcihkaXNwYXRjaCwgX3JlZikge1xuICAgIHZhciBkaXNwbGF5TmFtZSA9IF9yZWYuZGlzcGxh
eU5hbWU7XG5cbiAgICB2YXIgcHJveHkgPSBmdW5jdGlvbiBtYXBUb1Byb3BzUHJveHkoc3RhdGVP
ckRpc3BhdGNoLCBvd25Qcm9wcykge1xuICAgICAgcmV0dXJuIHByb3h5LmRlcGVuZHNPbk93blBy
b3BzID8gcHJveHkubWFwVG9Qcm9wcyhzdGF0ZU9yRGlzcGF0Y2gsIG93blByb3BzKSA6IHByb3h5
Lm1hcFRvUHJvcHMoc3RhdGVPckRpc3BhdGNoKTtcbiAgICB9O1xuXG4gICAgLy8gYWxsb3cgZGV0
ZWN0RmFjdG9yeUFuZFZlcmlmeSB0byBnZXQgb3duUHJvcHNcbiAgICBwcm94eS5kZXBlbmRzT25P
d25Qcm9wcyA9IHRydWU7XG5cbiAgICBwcm94eS5tYXBUb1Byb3BzID0gZnVuY3Rpb24gZGV0ZWN0
RmFjdG9yeUFuZFZlcmlmeShzdGF0ZU9yRGlzcGF0Y2gsIG93blByb3BzKSB7XG4gICAgICBwcm94
eS5tYXBUb1Byb3BzID0gbWFwVG9Qcm9wcztcbiAgICAgIHByb3h5LmRlcGVuZHNPbk93blByb3Bz
ID0gZ2V0RGVwZW5kc09uT3duUHJvcHMobWFwVG9Qcm9wcyk7XG4gICAgICB2YXIgcHJvcHMgPSBw
cm94eShzdGF0ZU9yRGlzcGF0Y2gsIG93blByb3BzKTtcblxuICAgICAgaWYgKHR5cGVvZiBwcm9w
cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwcm94eS5tYXBUb1Byb3BzID0gcHJvcHM7XG4g
ICAgICAgIHByb3h5LmRlcGVuZHNPbk93blByb3BzID0gZ2V0RGVwZW5kc09uT3duUHJvcHMocHJv
cHMpO1xuICAgICAgICBwcm9wcyA9IHByb3h5KHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpO1xu
ICAgICAgfVxuXG4gICAgICBpZiAoZmFsc2UpIHZlcmlmeVBsYWluT2JqZWN0KHByb3BzLCBkaXNw
bGF5TmFtZSwgbWV0aG9kTmFtZSk7XG5cbiAgICAgIHJldHVybiBwcm9wcztcbiAgICB9O1xuXG4g
ICAgcmV0dXJuIHByb3h5O1xuICB9O1xufVxuXG4vKioqLyB9KSxcbi8qIDkzICovXG4vKioqLyAo
ZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9f
KSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IGRlZmF1bHQg
Ki9cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
bG9kYXNoX2VzX2lzUGxhaW5PYmplY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDgpO1xuLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fd2Fybmlu
Z19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OSk7XG5cblxuXG5mdW5jdGlvbiB2ZXJpZnlQbGFp
bk9iamVjdCh2YWx1ZSwgZGlzcGxheU5hbWUsIG1ldGhvZE5hbWUpIHtcbiAgaWYgKCFPYmplY3Qo
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19pc1BsYWluT2JqZWN0X19bXCJh
XCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xuICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX3dhcm5pbmdfX1tcImFcIiAvKiBkZWZhdWx0ICovXSkobWV0aG9kTmFtZSAr
ICcoKSBpbiAnICsgZGlzcGxheU5hbWUgKyAnIG11c3QgcmV0dXJuIGEgcGxhaW4gb2JqZWN0LiBJ
bnN0ZWFkIHJlY2VpdmVkICcgKyB2YWx1ZSArICcuJyk7XG4gIH1cbn1cblxuLyoqKi8gfSksXG4v
KiA5NCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193
ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oOSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2NsYXNzbmFtZXNfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oNTApO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9jbGFzc25hbWVzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfY2xhc3NuYW1lc19fKTtcbnZhciBfY3JlYXRlQ2xhc3M9
ZnVuY3Rpb24oKXtmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCxwcm9wcyl7Zm9yKHZh
ciBpPTA7aTxwcm9wcy5sZW5ndGg7aSsrKXt2YXIgZGVzY3JpcHRvcj1wcm9wc1tpXTtkZXNjcmlw
dG9yLmVudW1lcmFibGU9ZGVzY3JpcHRvci5lbnVtZXJhYmxlfHxmYWxzZTtkZXNjcmlwdG9yLmNv
bmZpZ3VyYWJsZT10cnVlO2lmKFwidmFsdWVcImluIGRlc2NyaXB0b3IpZGVzY3JpcHRvci53cml0
YWJsZT10cnVlO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsZGVzY3JpcHRvci5rZXksZGVz
Y3JpcHRvcik7fX1yZXR1cm4gZnVuY3Rpb24oQ29uc3RydWN0b3IscHJvdG9Qcm9wcyxzdGF0aWNQ
cm9wcyl7aWYocHJvdG9Qcm9wcylkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlw
ZSxwcm90b1Byb3BzKTtpZihzdGF0aWNQcm9wcylkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9y
LHN0YXRpY1Byb3BzKTtyZXR1cm4gQ29uc3RydWN0b3I7fTt9KCk7ZnVuY3Rpb24gX2NsYXNzQ2Fs
bENoZWNrKGluc3RhbmNlLENvbnN0cnVjdG9yKXtpZighKGluc3RhbmNlIGluc3RhbmNlb2YgQ29u
c3RydWN0b3IpKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBh
IGZ1bmN0aW9uXCIpO319ZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZixj
YWxsKXtpZighc2VsZil7dGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVl
biBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO31yZXR1cm4gY2Fs
bCYmKHR5cGVvZiBjYWxsPT09XCJvYmplY3RcInx8dHlwZW9mIGNhbGw9PT1cImZ1bmN0aW9uXCIp
P2NhbGw6c2VsZjt9ZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLHN1cGVyQ2xhc3Mpe2lmKHR5
cGVvZiBzdXBlckNsYXNzIT09XCJmdW5jdGlvblwiJiZzdXBlckNsYXNzIT09bnVsbCl7dGhyb3cg
bmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBh
IGZ1bmN0aW9uLCBub3QgXCIrdHlwZW9mIHN1cGVyQ2xhc3MpO31zdWJDbGFzcy5wcm90b3R5cGU9
T2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzJiZzdXBlckNsYXNzLnByb3RvdHlwZSx7Y29uc3RydWN0
b3I6e3ZhbHVlOnN1YkNsYXNzLGVudW1lcmFibGU6ZmFsc2Usd3JpdGFibGU6dHJ1ZSxjb25maWd1
cmFibGU6dHJ1ZX19KTtpZihzdXBlckNsYXNzKU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Qu
c2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3Msc3VwZXJDbGFzcyk6c3ViQ2xhc3MuX19wcm90b19fPXN1
cGVyQ2xhc3M7fXZhciBUb2RvVGV4dElucHV0PWZ1bmN0aW9uKF9Db21wb25lbnQpe19pbmhlcml0
cyhUb2RvVGV4dElucHV0LF9Db21wb25lbnQpO2Z1bmN0aW9uIFRvZG9UZXh0SW5wdXQoKXt2YXIg
X3JlZjt2YXIgX3RlbXAsX3RoaXMsX3JldDtfY2xhc3NDYWxsQ2hlY2sodGhpcyxUb2RvVGV4dElu
cHV0KTtmb3IodmFyIF9sZW49YXJndW1lbnRzLmxlbmd0aCxhcmdzPUFycmF5KF9sZW4pLF9rZXk9
MDtfa2V5PF9sZW47X2tleSsrKXthcmdzW19rZXldPWFyZ3VtZW50c1tfa2V5XTt9cmV0dXJuIF9y
ZXQ9KF90ZW1wPShfdGhpcz1fcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLChfcmVmPVRv
ZG9UZXh0SW5wdXQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoVG9kb1RleHRJbnB1
dCkpLmNhbGwuYXBwbHkoX3JlZixbdGhpc10uY29uY2F0KGFyZ3MpKSksX3RoaXMpLF90aGlzLnN0
YXRlPXt0ZXh0Ol90aGlzLnByb3BzLnRleHR8fCcnfSxfdGhpcy5oYW5kbGVTdWJtaXQ9ZnVuY3Rp
b24oZSl7dmFyIHRleHQ9ZS50YXJnZXQudmFsdWUudHJpbSgpO2lmKGUud2hpY2g9PT0xMyl7X3Ro
aXMucHJvcHMub25TYXZlKHRleHQpO2lmKF90aGlzLnByb3BzLm5ld1RvZG8pe190aGlzLnNldFN0
YXRlKHt0ZXh0OicnfSk7fX19LF90aGlzLmhhbmRsZUNoYW5nZT1mdW5jdGlvbihlKXtfdGhpcy5z
ZXRTdGF0ZSh7dGV4dDplLnRhcmdldC52YWx1ZX0pO30sX3RoaXMuaGFuZGxlQmx1cj1mdW5jdGlv
bihlKXtpZighX3RoaXMucHJvcHMubmV3VG9kbyl7X3RoaXMucHJvcHMub25TYXZlKGUudGFyZ2V0
LnZhbHVlKTt9fSxfdGVtcCksX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMsX3JldCk7
fV9jcmVhdGVDbGFzcyhUb2RvVGV4dElucHV0LFt7a2V5OidyZW5kZXInLHZhbHVlOmZ1bmN0aW9u
IHJlbmRlcigpe3JldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZh
dWx0LmEuY3JlYXRlRWxlbWVudCgnaW5wdXQnLHtjbGFzc05hbWU6X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX2NsYXNzbmFtZXNfX19kZWZhdWx0KCkoe2VkaXQ6dGhpcy5wcm9wcy5lZGl0aW5n
LCduZXctdG9kbyc6dGhpcy5wcm9wcy5uZXdUb2RvfSksdHlwZTondGV4dCcscGxhY2Vob2xkZXI6
dGhpcy5wcm9wcy5wbGFjZWhvbGRlcixhdXRvRm9jdXM6J3RydWUnLHZhbHVlOnRoaXMuc3RhdGUu
dGV4dCxvbkJsdXI6dGhpcy5oYW5kbGVCbHVyLG9uQ2hhbmdlOnRoaXMuaGFuZGxlQ2hhbmdlLG9u
S2V5RG93bjp0aGlzLmhhbmRsZVN1Ym1pdH0pO319XSk7cmV0dXJuIFRvZG9UZXh0SW5wdXQ7fShf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcIkNvbXBvbmVudFwiXSk7VG9kb1Rl
eHRJbnB1dC5wcm9wVHlwZXM9e29uU2F2ZTpfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVh
Y3RfX1tcIlByb3BUeXBlc1wiXS5mdW5jLmlzUmVxdWlyZWQsdGV4dDpfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfcmVhY3RfX1tcIlByb3BUeXBlc1wiXS5zdHJpbmcscGxhY2Vob2xkZXI6X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXCJQcm9wVHlwZXNcIl0uc3RyaW5nLGVk
aXRpbmc6X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXCJQcm9wVHlwZXNcIl0u
Ym9vbCxuZXdUb2RvOl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1wiUHJvcFR5
cGVzXCJdLmJvb2x9Oy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9y
dHNfX1tcImFcIl0gPSAoVG9kb1RleHRJbnB1dCk7XG5cbi8qKiovIH0pLFxuLyogOTUgKi9cbi8q
KiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1
aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYlwiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIFNIT1dfQUxMOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5n
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJjXCIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gU0hPV19DT01QTEVURUQ7IH0pO1xuLyogaGFybW9ueSBleHBvcnQg
KGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBc
ImFcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTSE9XX0FDVElWRTsgfSk7XG52YXIgU0hPV19BTEw9
J3Nob3dfYWxsJzt2YXIgU0hPV19DT01QTEVURUQ9J3Nob3dfY29tcGxldGVkJzt2YXIgU0hPV19B
Q1RJVkU9J3Nob3dfYWN0aXZlJztcblxuLyoqKi8gfSksXG4vKiA5NiAqL1xuLyoqKi8gKGZ1bmN0
aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xu
XG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJhXCIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gQUREX1RPRE87IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImVcIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBERUxFVEVfVE9ETzsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZlwiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIEVESVRfVE9ETzsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZFwiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIENPTVBMRVRFX1RPRE87IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJp
bmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImNc
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBDT01QTEVURV9BTEw7IH0pO1xuLyogaGFybW9ueSBleHBv
cnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCBcImJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDTEVBUl9DT01QTEVURUQ7IH0pO1xudmFyIEFE
RF9UT0RPPSdBRERfVE9ETyc7dmFyIERFTEVURV9UT0RPPSdERUxFVEVfVE9ETyc7dmFyIEVESVRf
VE9ETz0nRURJVF9UT0RPJzt2YXIgQ09NUExFVEVfVE9ETz0nQ09NUExFVEVfVE9ETyc7dmFyIENP
TVBMRVRFX0FMTD0nQ09NUExFVEVfQUxMJzt2YXIgQ0xFQVJfQ09NUExFVEVEPSdDTEVBUl9DT01Q
TEVURUQnO1xuXG4vKioqLyB9KSxcbi8qIDk3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBl
eHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbl9fd2VicGFja19yZXF1aXJlX18oOTgp
O1xubW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwMyk7XG5cblxuLyoqKi8g
fSksXG4vKiA5OCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNr
X3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8vIEByZW1vdmUtb24tZWplY3QtYmVn
aW5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE1LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4g
KiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5z
ZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBm
aWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlv
bmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5U
UyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuLy8gQHJlbW92ZS1vbi1lamVjdC1l
bmRcblxuXG5pZiAodHlwZW9mIFByb21pc2UgPT09ICd1bmRlZmluZWQnKSB7XG4gIC8vIFJlamVj
dGlvbiB0cmFja2luZyBwcmV2ZW50cyBhIGNvbW1vbiBpc3N1ZSB3aGVyZSBSZWFjdCBnZXRzIGlu
dG8gYW5cbiAgLy8gaW5jb25zaXN0ZW50IHN0YXRlIGR1ZSB0byBhbiBlcnJvciwgYnV0IGl0IGdl
dHMgc3dhbGxvd2VkIGJ5IGEgUHJvbWlzZSxcbiAgLy8gYW5kIHRoZSB1c2VyIGhhcyBubyBpZGVh
IHdoYXQgY2F1c2VzIFJlYWN0J3MgZXJyYXRpYyBmdXR1cmUgYmVoYXZpb3IuXG4gIF9fd2VicGFj
a19yZXF1aXJlX18oOTkpLmVuYWJsZSgpO1xuICB3aW5kb3cuUHJvbWlzZSA9IF9fd2VicGFja19y
ZXF1aXJlX18oMTAxKTtcbn1cblxuLy8gZmV0Y2goKSBwb2x5ZmlsbCBmb3IgbWFraW5nIEFQSSBj
YWxscy5cbl9fd2VicGFja19yZXF1aXJlX18oMTAyKTtcblxuLy8gT2JqZWN0LmFzc2lnbigpIGlz
IGNvbW1vbmx5IHVzZWQgd2l0aCBSZWFjdC5cbi8vIEl0IHdpbGwgdXNlIHRoZSBuYXRpdmUgaW1w
bGVtZW50YXRpb24gaWYgaXQncyBwcmVzZW50IGFuZCBpc24ndCBidWdneS5cbk9iamVjdC5hc3Np
Z24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuXG5cbi8qKiovIH0pLFxuLyogOTkgKi9cbi8q
KiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxu
XCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIFByb21pc2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUx
KTtcblxudmFyIERFRkFVTFRfV0hJVEVMSVNUID0gW1xuICBSZWZlcmVuY2VFcnJvcixcbiAgVHlw
ZUVycm9yLFxuICBSYW5nZUVycm9yXG5dO1xuXG52YXIgZW5hYmxlZCA9IGZhbHNlO1xuZXhwb3J0
cy5kaXNhYmxlID0gZGlzYWJsZTtcbmZ1bmN0aW9uIGRpc2FibGUoKSB7XG4gIGVuYWJsZWQgPSBm
YWxzZTtcbiAgUHJvbWlzZS5fNDcgPSBudWxsO1xuICBQcm9taXNlLl83MSA9IG51bGw7XG59XG5c
bmV4cG9ydHMuZW5hYmxlID0gZW5hYmxlO1xuZnVuY3Rpb24gZW5hYmxlKG9wdGlvbnMpIHtcbiAg
b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGlmIChlbmFibGVkKSBkaXNhYmxlKCk7XG4gIGVu
YWJsZWQgPSB0cnVlO1xuICB2YXIgaWQgPSAwO1xuICB2YXIgZGlzcGxheUlkID0gMDtcbiAgdmFy
IHJlamVjdGlvbnMgPSB7fTtcbiAgUHJvbWlzZS5fNDcgPSBmdW5jdGlvbiAocHJvbWlzZSkge1xu
ICAgIGlmIChcbiAgICAgIHByb21pc2UuXzgzID09PSAyICYmIC8vIElTIFJFSkVDVEVEXG4gICAg
ICByZWplY3Rpb25zW3Byb21pc2UuXzU2XVxuICAgICkge1xuICAgICAgaWYgKHJlamVjdGlvbnNb
cHJvbWlzZS5fNTZdLmxvZ2dlZCkge1xuICAgICAgICBvbkhhbmRsZWQocHJvbWlzZS5fNTYpO1xu
ICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHJlamVjdGlvbnNbcHJvbWlzZS5f
NTZdLnRpbWVvdXQpO1xuICAgICAgfVxuICAgICAgZGVsZXRlIHJlamVjdGlvbnNbcHJvbWlzZS5f
NTZdO1xuICAgIH1cbiAgfTtcbiAgUHJvbWlzZS5fNzEgPSBmdW5jdGlvbiAocHJvbWlzZSwgZXJy
KSB7XG4gICAgaWYgKHByb21pc2UuXzc1ID09PSAwKSB7IC8vIG5vdCB5ZXQgaGFuZGxlZFxuICAg
ICAgcHJvbWlzZS5fNTYgPSBpZCsrO1xuICAgICAgcmVqZWN0aW9uc1twcm9taXNlLl81Nl0gPSB7
XG4gICAgICAgIGRpc3BsYXlJZDogbnVsbCxcbiAgICAgICAgZXJyb3I6IGVycixcbiAgICAgICAg
dGltZW91dDogc2V0VGltZW91dChcbiAgICAgICAgICBvblVuaGFuZGxlZC5iaW5kKG51bGwsIHBy
b21pc2UuXzU2KSxcbiAgICAgICAgICAvLyBGb3IgcmVmZXJlbmNlIGVycm9ycyBhbmQgdHlwZSBl
cnJvcnMsIHRoaXMgYWxtb3N0IGFsd2F5c1xuICAgICAgICAgIC8vIG1lYW5zIHRoZSBwcm9ncmFt
bWVyIG1hZGUgYSBtaXN0YWtlLCBzbyBsb2cgdGhlbSBhZnRlciBqdXN0XG4gICAgICAgICAgLy8g
MTAwbXNcbiAgICAgICAgICAvLyBvdGhlcndpc2UsIHdhaXQgMiBzZWNvbmRzIHRvIHNlZSBpZiB0
aGV5IGdldCBoYW5kbGVkXG4gICAgICAgICAgbWF0Y2hXaGl0ZWxpc3QoZXJyLCBERUZBVUxUX1dI
SVRFTElTVClcbiAgICAgICAgICAgID8gMTAwXG4gICAgICAgICAgICA6IDIwMDBcbiAgICAgICAg
KSxcbiAgICAgICAgbG9nZ2VkOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gIH07XG4gIGZ1bmN0
aW9uIG9uVW5oYW5kbGVkKGlkKSB7XG4gICAgaWYgKFxuICAgICAgb3B0aW9ucy5hbGxSZWplY3Rp
b25zIHx8XG4gICAgICBtYXRjaFdoaXRlbGlzdChcbiAgICAgICAgcmVqZWN0aW9uc1tpZF0uZXJy
b3IsXG4gICAgICAgIG9wdGlvbnMud2hpdGVsaXN0IHx8IERFRkFVTFRfV0hJVEVMSVNUXG4gICAg
ICApXG4gICAgKSB7XG4gICAgICByZWplY3Rpb25zW2lkXS5kaXNwbGF5SWQgPSBkaXNwbGF5SWQr
KztcbiAgICAgIGlmIChvcHRpb25zLm9uVW5oYW5kbGVkKSB7XG4gICAgICAgIHJlamVjdGlvbnNb
aWRdLmxvZ2dlZCA9IHRydWU7XG4gICAgICAgIG9wdGlvbnMub25VbmhhbmRsZWQoXG4gICAgICAg
ICAgcmVqZWN0aW9uc1tpZF0uZGlzcGxheUlkLFxuICAgICAgICAgIHJlamVjdGlvbnNbaWRdLmVy
cm9yXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWplY3Rpb25zW2lkXS5s
b2dnZWQgPSB0cnVlO1xuICAgICAgICBsb2dFcnJvcihcbiAgICAgICAgICByZWplY3Rpb25zW2lk
XS5kaXNwbGF5SWQsXG4gICAgICAgICAgcmVqZWN0aW9uc1tpZF0uZXJyb3JcbiAgICAgICAgKTtc
biAgICAgIH1cbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gb25IYW5kbGVkKGlkKSB7XG4gICAgaWYg
KHJlamVjdGlvbnNbaWRdLmxvZ2dlZCkge1xuICAgICAgaWYgKG9wdGlvbnMub25IYW5kbGVkKSB7
XG4gICAgICAgIG9wdGlvbnMub25IYW5kbGVkKHJlamVjdGlvbnNbaWRdLmRpc3BsYXlJZCwgcmVq
ZWN0aW9uc1tpZF0uZXJyb3IpO1xuICAgICAgfSBlbHNlIGlmICghcmVqZWN0aW9uc1tpZF0ub25V
bmhhbmRsZWQpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdQcm9taXNlIFJl
amVjdGlvbiBIYW5kbGVkIChpZDogJyArIHJlamVjdGlvbnNbaWRdLmRpc3BsYXlJZCArICcpOidc
biAgICAgICAgKTtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICcgIFRoaXMgbWVh
bnMgeW91IGNhbiBpZ25vcmUgYW55IHByZXZpb3VzIG1lc3NhZ2VzIG9mIHRoZSBmb3JtIFwiUG9z
c2libGUgVW5oYW5kbGVkIFByb21pc2UgUmVqZWN0aW9uXCIgd2l0aCBpZCAnICtcbiAgICAgICAg
ICByZWplY3Rpb25zW2lkXS5kaXNwbGF5SWQgKyAnLidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAg
ICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbG9nRXJyb3IoaWQsIGVycm9yKSB7XG4gIGNvbnNvbGUu
d2FybignUG9zc2libGUgVW5oYW5kbGVkIFByb21pc2UgUmVqZWN0aW9uIChpZDogJyArIGlkICsg
Jyk6Jyk7XG4gIHZhciBlcnJTdHIgPSAoZXJyb3IgJiYgKGVycm9yLnN0YWNrIHx8IGVycm9yKSkg
KyAnJztcbiAgZXJyU3RyLnNwbGl0KCdcXG4nKS5mb3JFYWNoKGZ1bmN0aW9uIChsaW5lKSB7XG4g
ICAgY29uc29sZS53YXJuKCcgICcgKyBsaW5lKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG1hdGNo
V2hpdGVsaXN0KGVycm9yLCBsaXN0KSB7XG4gIHJldHVybiBsaXN0LnNvbWUoZnVuY3Rpb24gKGNs
cykge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIGNscztcbiAgfSk7XG59XG5cbi8qKiov
IH0pLFxuLyogMTAwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBh
Y2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogV0VCUEFDSyBWQVIgSU5KRUNU
SU9OICovKGZ1bmN0aW9uKGdsb2JhbCkge1xuXG4vLyBVc2UgdGhlIGZhc3Rlc3QgbWVhbnMgcG9z
c2libGUgdG8gZXhlY3V0ZSBhIHRhc2sgaW4gaXRzIG93biB0dXJuLCB3aXRoXG4vLyBwcmlvcml0
eSBvdmVyIG90aGVyIGV2ZW50cyBpbmNsdWRpbmcgSU8sIGFuaW1hdGlvbiwgcmVmbG93LCBhbmQg
cmVkcmF3XG4vLyBldmVudHMgaW4gYnJvd3NlcnMuXG4vL1xuLy8gQW4gZXhjZXB0aW9uIHRocm93
biBieSBhIHRhc2sgd2lsbCBwZXJtYW5lbnRseSBpbnRlcnJ1cHQgdGhlIHByb2Nlc3Npbmcgb2Zc
bi8vIHN1YnNlcXVlbnQgdGFza3MuIFRoZSBoaWdoZXIgbGV2ZWwgYGFzYXBgIGZ1bmN0aW9uIGVu
c3VyZXMgdGhhdCBpZiBhblxuLy8gZXhjZXB0aW9uIGlzIHRocm93biBieSBhIHRhc2ssIHRoYXQg
dGhlIHRhc2sgcXVldWUgd2lsbCBjb250aW51ZSBmbHVzaGluZyBhc1xuLy8gc29vbiBhcyBwb3Nz
aWJsZSwgYnV0IGlmIHlvdSB1c2UgYHJhd0FzYXBgIGRpcmVjdGx5LCB5b3UgYXJlIHJlc3BvbnNp
YmxlIHRvXG4vLyBlaXRoZXIgZW5zdXJlIHRoYXQgbm8gZXhjZXB0aW9ucyBhcmUgdGhyb3duIGZy
b20geW91ciB0YXNrLCBvciB0byBtYW51YWxseVxuLy8gY2FsbCBgcmF3QXNhcC5yZXF1ZXN0Rmx1
c2hgIGlmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uXG5tb2R1bGUuZXhwb3J0cyA9IHJhd0FzYXA7
XG5mdW5jdGlvbiByYXdBc2FwKHRhc2spIHtcbiAgICBpZiAoIXF1ZXVlLmxlbmd0aCkge1xuICAg
ICAgICByZXF1ZXN0Rmx1c2goKTtcbiAgICAgICAgZmx1c2hpbmcgPSB0cnVlO1xuICAgIH1cbiAg
ICAvLyBFcXVpdmFsZW50IHRvIHB1c2gsIGJ1dCBhdm9pZHMgYSBmdW5jdGlvbiBjYWxsLlxuICAg
IHF1ZXVlW3F1ZXVlLmxlbmd0aF0gPSB0YXNrO1xufVxuXG52YXIgcXVldWUgPSBbXTtcbi8vIE9u
Y2UgYSBmbHVzaCBoYXMgYmVlbiByZXF1ZXN0ZWQsIG5vIGZ1cnRoZXIgY2FsbHMgdG8gYHJlcXVl
c3RGbHVzaGAgYXJlXG4vLyBuZWNlc3NhcnkgdW50aWwgdGhlIG5leHQgYGZsdXNoYCBjb21wbGV0
ZXMuXG52YXIgZmx1c2hpbmcgPSBmYWxzZTtcbi8vIGByZXF1ZXN0Rmx1c2hgIGlzIGFuIGltcGxl
bWVudGF0aW9uLXNwZWNpZmljIG1ldGhvZCB0aGF0IGF0dGVtcHRzIHRvIGtpY2tcbi8vIG9mZiBh
IGBmbHVzaGAgZXZlbnQgYXMgcXVpY2tseSBhcyBwb3NzaWJsZS4gYGZsdXNoYCB3aWxsIGF0dGVt
cHQgdG8gZXhoYXVzdFxuLy8gdGhlIGV2ZW50IHF1ZXVlIGJlZm9yZSB5aWVsZGluZyB0byB0aGUg
YnJvd3NlcidzIG93biBldmVudCBsb29wLlxudmFyIHJlcXVlc3RGbHVzaDtcbi8vIFRoZSBwb3Np
dGlvbiBvZiB0aGUgbmV4dCB0YXNrIHRvIGV4ZWN1dGUgaW4gdGhlIHRhc2sgcXVldWUuIFRoaXMg
aXNcbi8vIHByZXNlcnZlZCBiZXR3ZWVuIGNhbGxzIHRvIGBmbHVzaGAgc28gdGhhdCBpdCBjYW4g
YmUgcmVzdW1lZCBpZlxuLy8gYSB0YXNrIHRocm93cyBhbiBleGNlcHRpb24uXG52YXIgaW5kZXgg
PSAwO1xuLy8gSWYgYSB0YXNrIHNjaGVkdWxlcyBhZGRpdGlvbmFsIHRhc2tzIHJlY3Vyc2l2ZWx5
LCB0aGUgdGFzayBxdWV1ZSBjYW4gZ3Jvd1xuLy8gdW5ib3VuZGVkLiBUbyBwcmV2ZW50IG1lbW9y
eSBleGhhdXN0aW9uLCB0aGUgdGFzayBxdWV1ZSB3aWxsIHBlcmlvZGljYWxseVxuLy8gdHJ1bmNh
dGUgYWxyZWFkeS1jb21wbGV0ZWQgdGFza3MuXG52YXIgY2FwYWNpdHkgPSAxMDI0O1xuXG4vLyBU
aGUgZmx1c2ggZnVuY3Rpb24gcHJvY2Vzc2VzIGFsbCB0YXNrcyB0aGF0IGhhdmUgYmVlbiBzY2hl
ZHVsZWQgd2l0aFxuLy8gYHJhd0FzYXBgIHVubGVzcyBhbmQgdW50aWwgb25lIG9mIHRob3NlIHRh
c2tzIHRocm93cyBhbiBleGNlcHRpb24uXG4vLyBJZiBhIHRhc2sgdGhyb3dzIGFuIGV4Y2VwdGlv
biwgYGZsdXNoYCBlbnN1cmVzIHRoYXQgaXRzIHN0YXRlIHdpbGwgcmVtYWluXG4vLyBjb25zaXN0
ZW50IGFuZCB3aWxsIHJlc3VtZSB3aGVyZSBpdCBsZWZ0IG9mZiB3aGVuIGNhbGxlZCBhZ2Fpbi5c
bi8vIEhvd2V2ZXIsIGBmbHVzaGAgZG9lcyBub3QgbWFrZSBhbnkgYXJyYW5nZW1lbnRzIHRvIGJl
IGNhbGxlZCBhZ2FpbiBpZiBhblxuLy8gZXhjZXB0aW9uIGlzIHRocm93bi5cbmZ1bmN0aW9uIGZs
dXNoKCkge1xuICAgIHdoaWxlIChpbmRleCA8IHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICB2YXIg
Y3VycmVudEluZGV4ID0gaW5kZXg7XG4gICAgICAgIC8vIEFkdmFuY2UgdGhlIGluZGV4IGJlZm9y
ZSBjYWxsaW5nIHRoZSB0YXNrLiBUaGlzIGVuc3VyZXMgdGhhdCB3ZSB3aWxsXG4gICAgICAgIC8v
IGJlZ2luIGZsdXNoaW5nIG9uIHRoZSBuZXh0IHRhc2sgdGhlIHRhc2sgdGhyb3dzIGFuIGVycm9y
LlxuICAgICAgICBpbmRleCA9IGluZGV4ICsgMTtcbiAgICAgICAgcXVldWVbY3VycmVudEluZGV4
XS5jYWxsKCk7XG4gICAgICAgIC8vIFByZXZlbnQgbGVha2luZyBtZW1vcnkgZm9yIGxvbmcgY2hh
aW5zIG9mIHJlY3Vyc2l2ZSBjYWxscyB0byBgYXNhcGAuXG4gICAgICAgIC8vIElmIHdlIGNhbGwg
YGFzYXBgIHdpdGhpbiB0YXNrcyBzY2hlZHVsZWQgYnkgYGFzYXBgLCB0aGUgcXVldWUgd2lsbFxu
ICAgICAgICAvLyBncm93LCBidXQgdG8gYXZvaWQgYW4gTyhuKSB3YWxrIGZvciBldmVyeSB0YXNr
IHdlIGV4ZWN1dGUsIHdlIGRvbid0XG4gICAgICAgIC8vIHNoaWZ0IHRhc2tzIG9mZiB0aGUgcXVl
dWUgYWZ0ZXIgdGhleSBoYXZlIGJlZW4gZXhlY3V0ZWQuXG4gICAgICAgIC8vIEluc3RlYWQsIHdl
IHBlcmlvZGljYWxseSBzaGlmdCAxMDI0IHRhc2tzIG9mZiB0aGUgcXVldWUuXG4gICAgICAgIGlm
IChpbmRleCA+IGNhcGFjaXR5KSB7XG4gICAgICAgICAgICAvLyBNYW51YWxseSBzaGlmdCBhbGwg
dmFsdWVzIHN0YXJ0aW5nIGF0IHRoZSBpbmRleCBiYWNrIHRvIHRoZVxuICAgICAgICAgICAgLy8g
YmVnaW5uaW5nIG9mIHRoZSBxdWV1ZS5cbiAgICAgICAgICAgIGZvciAodmFyIHNjYW4gPSAwLCBu
ZXdMZW5ndGggPSBxdWV1ZS5sZW5ndGggLSBpbmRleDsgc2NhbiA8IG5ld0xlbmd0aDsgc2Nhbisr
KSB7XG4gICAgICAgICAgICAgICAgcXVldWVbc2Nhbl0gPSBxdWV1ZVtzY2FuICsgaW5kZXhdO1xu
ICAgICAgICAgICAgfVxuICAgICAgICAgICAgcXVldWUubGVuZ3RoIC09IGluZGV4O1xuICAgICAg
ICAgICAgaW5kZXggPSAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLmxlbmd0aCA9IDA7
XG4gICAgaW5kZXggPSAwO1xuICAgIGZsdXNoaW5nID0gZmFsc2U7XG59XG5cbi8vIGByZXF1ZXN0
Rmx1c2hgIGlzIGltcGxlbWVudGVkIHVzaW5nIGEgc3RyYXRlZ3kgYmFzZWQgb24gZGF0YSBjb2xs
ZWN0ZWQgZnJvbVxuLy8gZXZlcnkgYXZhaWxhYmxlIFNhdWNlTGFicyBTZWxlbml1bSB3ZWIgZHJp
dmVyIHdvcmtlciBhdCB0aW1lIG9mIHdyaXRpbmcuXG4vLyBodHRwczovL2RvY3MuZ29vZ2xlLmNv
bS9zcHJlYWRzaGVldHMvZC8xbUctNVVZR3VwNXF4R2RFTVdraFA2QldDejA1M05VYjJFMVFvVVRV
MTZ1QS9lZGl0I2dpZD03ODM3MjQ1OTNcblxuLy8gU2FmYXJpIDYgYW5kIDYuMSBmb3IgZGVza3Rv
cCwgaVBhZCwgYW5kIGlQaG9uZSBhcmUgdGhlIG9ubHkgYnJvd3NlcnMgdGhhdFxuLy8gaGF2ZSBX
ZWJLaXRNdXRhdGlvbk9ic2VydmVyIGJ1dCBub3QgdW4tcHJlZml4ZWQgTXV0YXRpb25PYnNlcnZl
ci5cbi8vIE11c3QgdXNlIGBnbG9iYWxgIG9yIGBzZWxmYCBpbnN0ZWFkIG9mIGB3aW5kb3dgIHRv
IHdvcmsgaW4gYm90aCBmcmFtZXMgYW5kIHdlYlxuLy8gd29ya2Vycy4gYGdsb2JhbGAgaXMgYSBw
cm92aXNpb24gb2YgQnJvd3NlcmlmeSwgTXIsIE1ycywgb3IgTW9wLlxuXG4vKiBnbG9iYWxzIHNl
bGYgKi9cbnZhciBzY29wZSA9IHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9i
YWwgOiBzZWxmO1xudmFyIEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyID0gc2NvcGUuTXV0YXRpb25P
YnNlcnZlciB8fCBzY29wZS5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xuXG4vLyBNdXRhdGlvbk9i
c2VydmVycyBhcmUgZGVzaXJhYmxlIGJlY2F1c2UgdGhleSBoYXZlIGhpZ2ggcHJpb3JpdHkgYW5k
IHdvcmtcbi8vIHJlbGlhYmx5IGV2ZXJ5d2hlcmUgdGhleSBhcmUgaW1wbGVtZW50ZWQuXG4vLyBU
aGV5IGFyZSBpbXBsZW1lbnRlZCBpbiBhbGwgbW9kZXJuIGJyb3dzZXJzLlxuLy9cbi8vIC0gQW5k
cm9pZCA0LTQuM1xuLy8gLSBDaHJvbWUgMjYtMzRcbi8vIC0gRmlyZWZveCAxNC0yOVxuLy8gLSBJ
bnRlcm5ldCBFeHBsb3JlciAxMVxuLy8gLSBpUGFkIFNhZmFyaSA2LTcuMVxuLy8gLSBpUGhvbmUg
U2FmYXJpIDctNy4xXG4vLyAtIFNhZmFyaSA2LTdcbmlmICh0eXBlb2YgQnJvd3Nlck11dGF0aW9u
T2JzZXJ2ZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJlcXVlc3RGbHVzaCA9IG1ha2VSZXF1
ZXN0Q2FsbEZyb21NdXRhdGlvbk9ic2VydmVyKGZsdXNoKTtcblxuLy8gTWVzc2FnZUNoYW5uZWxz
IGFyZSBkZXNpcmFibGUgYmVjYXVzZSB0aGV5IGdpdmUgZGlyZWN0IGFjY2VzcyB0byB0aGUgSFRN
TFxuLy8gdGFzayBxdWV1ZSwgYXJlIGltcGxlbWVudGVkIGluIEludGVybmV0IEV4cGxvcmVyIDEw
LCBTYWZhcmkgNS4wLTEsIGFuZCBPcGVyYVxuLy8gMTEtMTIsIGFuZCBpbiB3ZWIgd29ya2VycyBp
biBtYW55IGVuZ2luZXMuXG4vLyBBbHRob3VnaCBtZXNzYWdlIGNoYW5uZWxzIHlpZWxkIHRvIGFu
eSBxdWV1ZWQgcmVuZGVyaW5nIGFuZCBJTyB0YXNrcywgdGhleVxuLy8gd291bGQgYmUgYmV0dGVy
IHRoYW4gaW1wb3NpbmcgdGhlIDRtcyBkZWxheSBvZiB0aW1lcnMuXG4vLyBIb3dldmVyLCB0aGV5
IGRvIG5vdCB3b3JrIHJlbGlhYmx5IGluIEludGVybmV0IEV4cGxvcmVyIG9yIFNhZmFyaS5cblxu
Ly8gSW50ZXJuZXQgRXhwbG9yZXIgMTAgaXMgdGhlIG9ubHkgYnJvd3NlciB0aGF0IGhhcyBzZXRJ
bW1lZGlhdGUgYnV0IGRvZXNcbi8vIG5vdCBoYXZlIE11dGF0aW9uT2JzZXJ2ZXJzLlxuLy8gQWx0
aG91Z2ggc2V0SW1tZWRpYXRlIHlpZWxkcyB0byB0aGUgYnJvd3NlcidzIHJlbmRlcmVyLCBpdCB3
b3VsZCBiZVxuLy8gcHJlZmVycmFibGUgdG8gZmFsbGluZyBiYWNrIHRvIHNldFRpbWVvdXQgc2lu
Y2UgaXQgZG9lcyBub3QgaGF2ZVxuLy8gdGhlIG1pbmltdW0gNG1zIHBlbmFsdHkuXG4vLyBVbmZv
cnR1bmF0ZWx5IHRoZXJlIGFwcGVhcnMgdG8gYmUgYSBidWcgaW4gSW50ZXJuZXQgRXhwbG9yZXIg
MTAgTW9iaWxlIChhbmRcbi8vIERlc2t0b3AgdG8gYSBsZXNzZXIgZXh0ZW50KSB0aGF0IHJlbmRl
cnMgYm90aCBzZXRJbW1lZGlhdGUgYW5kXG4vLyBNZXNzYWdlQ2hhbm5lbCB1c2VsZXNzIGZvciB0
aGUgcHVycG9zZXMgb2YgQVNBUC5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9rcmlza293YWwvcS9p
c3N1ZXMvMzk2XG5cbi8vIFRpbWVycyBhcmUgaW1wbGVtZW50ZWQgdW5pdmVyc2FsbHkuXG4vLyBX
ZSBmYWxsIGJhY2sgdG8gdGltZXJzIGluIHdvcmtlcnMgaW4gbW9zdCBlbmdpbmVzLCBhbmQgaW4g
Zm9yZWdyb3VuZFxuLy8gY29udGV4dHMgaW4gdGhlIGZvbGxvd2luZyBicm93c2Vycy5cbi8vIEhv
d2V2ZXIsIG5vdGUgdGhhdCBldmVuIHRoaXMgc2ltcGxlIGNhc2UgcmVxdWlyZXMgbnVhbmNlcyB0
byBvcGVyYXRlIGluIGFcbi8vIGJyb2FkIHNwZWN0cnVtIG9mIGJyb3dzZXJzLlxuLy9cbi8vIC0g
RmlyZWZveCAzLTEzXG4vLyAtIEludGVybmV0IEV4cGxvcmVyIDYtOVxuLy8gLSBpUGFkIFNhZmFy
aSA0LjNcbi8vIC0gTHlueCAyLjguN1xufSBlbHNlIHtcbiAgICByZXF1ZXN0Rmx1c2ggPSBtYWtl
UmVxdWVzdENhbGxGcm9tVGltZXIoZmx1c2gpO1xufVxuXG4vLyBgcmVxdWVzdEZsdXNoYCByZXF1
ZXN0cyB0aGF0IHRoZSBoaWdoIHByaW9yaXR5IGV2ZW50IHF1ZXVlIGJlIGZsdXNoZWQgYXNcbi8v
IHNvb24gYXMgcG9zc2libGUuXG4vLyBUaGlzIGlzIHVzZWZ1bCB0byBwcmV2ZW50IGFuIGVycm9y
IHRocm93biBpbiBhIHRhc2sgZnJvbSBzdGFsbGluZyB0aGUgZXZlbnRcbi8vIHF1ZXVlIGlmIHRo
ZSBleGNlcHRpb24gaGFuZGxlZCBieSBOb2RlLmpz4oCZc1xuLy8gYHByb2Nlc3Mub24oXCJ1bmNh
dWdodEV4Y2VwdGlvblwiKWAgb3IgYnkgYSBkb21haW4uXG5yYXdBc2FwLnJlcXVlc3RGbHVzaCA9
IHJlcXVlc3RGbHVzaDtcblxuLy8gVG8gcmVxdWVzdCBhIGhpZ2ggcHJpb3JpdHkgZXZlbnQsIHdl
IGluZHVjZSBhIG11dGF0aW9uIG9ic2VydmVyIGJ5IHRvZ2dsaW5nXG4vLyB0aGUgdGV4dCBvZiBh
IHRleHQgbm9kZSBiZXR3ZWVuIFwiMVwiIGFuZCBcIi0xXCIuXG5mdW5jdGlvbiBtYWtlUmVxdWVz
dENhbGxGcm9tTXV0YXRpb25PYnNlcnZlcihjYWxsYmFjaykge1xuICAgIHZhciB0b2dnbGUgPSAx
O1xuICAgIHZhciBvYnNlcnZlciA9IG5ldyBCcm93c2VyTXV0YXRpb25PYnNlcnZlcihjYWxsYmFj
ayk7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlwiKTtcbiAgICBv
YnNlcnZlci5vYnNlcnZlKG5vZGUsIHtjaGFyYWN0ZXJEYXRhOiB0cnVlfSk7XG4gICAgcmV0dXJu
IGZ1bmN0aW9uIHJlcXVlc3RDYWxsKCkge1xuICAgICAgICB0b2dnbGUgPSAtdG9nZ2xlO1xuICAg
ICAgICBub2RlLmRhdGEgPSB0b2dnbGU7XG4gICAgfTtcbn1cblxuLy8gVGhlIG1lc3NhZ2UgY2hh
bm5lbCB0ZWNobmlxdWUgd2FzIGRpc2NvdmVyZWQgYnkgTWFsdGUgVWJsIGFuZCB3YXMgdGhlXG4v
LyBvcmlnaW5hbCBmb3VuZGF0aW9uIGZvciB0aGlzIGxpYnJhcnkuXG4vLyBodHRwOi8vd3d3Lm5v
bmJsb2NraW5nLmlvLzIwMTEvMDYvd2luZG93bmV4dHRpY2suaHRtbFxuXG4vLyBTYWZhcmkgNi4w
LjUgKGF0IGxlYXN0KSBpbnRlcm1pdHRlbnRseSBmYWlscyB0byBjcmVhdGUgbWVzc2FnZSBwb3J0
cyBvbiBhXG4vLyBwYWdlJ3MgZmlyc3QgbG9hZC4gVGhhbmtmdWxseSwgdGhpcyB2ZXJzaW9uIG9m
IFNhZmFyaSBzdXBwb3J0c1xuLy8gTXV0YXRpb25PYnNlcnZlcnMsIHNvIHdlIGRvbid0IG5lZWQg
dG8gZmFsbCBiYWNrIGluIHRoYXQgY2FzZS5cblxuLy8gZnVuY3Rpb24gbWFrZVJlcXVlc3RDYWxs
RnJvbU1lc3NhZ2VDaGFubmVsKGNhbGxiYWNrKSB7XG4vLyAgICAgdmFyIGNoYW5uZWwgPSBuZXcg
TWVzc2FnZUNoYW5uZWwoKTtcbi8vICAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGNhbGxi
YWNrO1xuLy8gICAgIHJldHVybiBmdW5jdGlvbiByZXF1ZXN0Q2FsbCgpIHtcbi8vICAgICAgICAg
Y2hhbm5lbC5wb3J0Mi5wb3N0TWVzc2FnZSgwKTtcbi8vICAgICB9O1xuLy8gfVxuXG4vLyBGb3Ig
cmVhc29ucyBleHBsYWluZWQgYWJvdmUsIHdlIGFyZSBhbHNvIHVuYWJsZSB0byB1c2UgYHNldElt
bWVkaWF0ZWBcbi8vIHVuZGVyIGFueSBjaXJjdW1zdGFuY2VzLlxuLy8gRXZlbiBpZiB3ZSB3ZXJl
LCB0aGVyZSBpcyBhbm90aGVyIGJ1ZyBpbiBJbnRlcm5ldCBFeHBsb3JlciAxMC5cbi8vIEl0IGlz
IG5vdCBzdWZmaWNpZW50IHRvIGFzc2lnbiBgc2V0SW1tZWRpYXRlYCB0byBgcmVxdWVzdEZsdXNo
YCBiZWNhdXNlXG4vLyBgc2V0SW1tZWRpYXRlYCBtdXN0IGJlIGNhbGxlZCAqYnkgbmFtZSogYW5k
IHRoZXJlZm9yZSBtdXN0IGJlIHdyYXBwZWQgaW4gYVxuLy8gY2xvc3VyZS5cbi8vIE5ldmVyIGZv
cmdldC5cblxuLy8gZnVuY3Rpb24gbWFrZVJlcXVlc3RDYWxsRnJvbVNldEltbWVkaWF0ZShjYWxs
YmFjaykge1xuLy8gICAgIHJldHVybiBmdW5jdGlvbiByZXF1ZXN0Q2FsbCgpIHtcbi8vICAgICAg
ICAgc2V0SW1tZWRpYXRlKGNhbGxiYWNrKTtcbi8vICAgICB9O1xuLy8gfVxuXG4vLyBTYWZhcmkg
Ni4wIGhhcyBhIHByb2JsZW0gd2hlcmUgdGltZXJzIHdpbGwgZ2V0IGxvc3Qgd2hpbGUgdGhlIHVz
ZXIgaXNcbi8vIHNjcm9sbGluZy4gVGhpcyBwcm9ibGVtIGRvZXMgbm90IGltcGFjdCBBU0FQIGJl
Y2F1c2UgU2FmYXJpIDYuMCBzdXBwb3J0c1xuLy8gbXV0YXRpb24gb2JzZXJ2ZXJzLCBzbyB0aGF0
IGltcGxlbWVudGF0aW9uIGlzIHVzZWQgaW5zdGVhZC5cbi8vIEhvd2V2ZXIsIGlmIHdlIGV2ZXIg
ZWxlY3QgdG8gdXNlIHRpbWVycyBpbiBTYWZhcmksIHRoZSBwcmV2YWxlbnQgd29yay1hcm91bmRc
bi8vIGlzIHRvIGFkZCBhIHNjcm9sbCBldmVudCBsaXN0ZW5lciB0aGF0IGNhbGxzIGZvciBhIGZs
dXNoLlxuXG4vLyBgc2V0VGltZW91dGAgZG9lcyBub3QgY2FsbCB0aGUgcGFzc2VkIGNhbGxiYWNr
IGlmIHRoZSBkZWxheSBpcyBsZXNzIHRoYW5cbi8vIGFwcHJveGltYXRlbHkgNyBpbiB3ZWIgd29y
a2VycyBpbiBGaXJlZm94IDggdGhyb3VnaCAxOCwgYW5kIHNvbWV0aW1lcyBub3Rcbi8vIGV2ZW4g
dGhlbi5cblxuZnVuY3Rpb24gbWFrZVJlcXVlc3RDYWxsRnJvbVRpbWVyKGNhbGxiYWNrKSB7XG4g
ICAgcmV0dXJuIGZ1bmN0aW9uIHJlcXVlc3RDYWxsKCkge1xuICAgICAgICAvLyBXZSBkaXNwYXRj
aCBhIHRpbWVvdXQgd2l0aCBhIHNwZWNpZmllZCBkZWxheSBvZiAwIGZvciBlbmdpbmVzIHRoYXRc
biAgICAgICAgLy8gY2FuIHJlbGlhYmx5IGFjY29tbW9kYXRlIHRoYXQgcmVxdWVzdC4gVGhpcyB3
aWxsIHVzdWFsbHkgYmUgc25hcHBlZFxuICAgICAgICAvLyB0byBhIDQgbWlsaXNlY29uZCBkZWxh
eSwgYnV0IG9uY2Ugd2UncmUgZmx1c2hpbmcsIHRoZXJlJ3Mgbm8gZGVsYXlcbiAgICAgICAgLy8g
YmV0d2VlbiBldmVudHMuXG4gICAgICAgIHZhciB0aW1lb3V0SGFuZGxlID0gc2V0VGltZW91dCho
YW5kbGVUaW1lciwgMCk7XG4gICAgICAgIC8vIEhvd2V2ZXIsIHNpbmNlIHRoaXMgdGltZXIgZ2V0
cyBmcmVxdWVudGx5IGRyb3BwZWQgaW4gRmlyZWZveFxuICAgICAgICAvLyB3b3JrZXJzLCB3ZSBl
bmxpc3QgYW4gaW50ZXJ2YWwgaGFuZGxlIHRoYXQgd2lsbCB0cnkgdG8gZmlyZVxuICAgICAgICAv
LyBhbiBldmVudCAyMCB0aW1lcyBwZXIgc2Vjb25kIHVudGlsIGl0IHN1Y2NlZWRzLlxuICAgICAg
ICB2YXIgaW50ZXJ2YWxIYW5kbGUgPSBzZXRJbnRlcnZhbChoYW5kbGVUaW1lciwgNTApO1xuXG4g
ICAgICAgIGZ1bmN0aW9uIGhhbmRsZVRpbWVyKCkge1xuICAgICAgICAgICAgLy8gV2hpY2hldmVy
IHRpbWVyIHN1Y2NlZWRzIHdpbGwgY2FuY2VsIGJvdGggdGltZXJzIGFuZFxuICAgICAgICAgICAg
Ly8gZXhlY3V0ZSB0aGUgY2FsbGJhY2suXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91
dEhhbmRsZSk7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSGFuZGxlKTtcbiAg
ICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG4vLyBUaGlzIGlz
IGZvciBgYXNhcC5qc2Agb25seS5cbi8vIEl0cyBuYW1lIHdpbGwgYmUgcGVyaW9kaWNhbGx5IHJh
bmRvbWl6ZWQgdG8gYnJlYWsgYW55IGNvZGUgdGhhdCBkZXBlbmRzIG9uXG4vLyBpdHMgZXhpc3Rl
bmNlLlxucmF3QXNhcC5tYWtlUmVxdWVzdENhbGxGcm9tVGltZXIgPSBtYWtlUmVxdWVzdENhbGxG
cm9tVGltZXI7XG5cbi8vIEFTQVAgd2FzIG9yaWdpbmFsbHkgYSBuZXh0VGljayBzaGltIGluY2x1
ZGVkIGluIFEuIFRoaXMgd2FzIGZhY3RvcmVkIG91dFxuLy8gaW50byB0aGlzIEFTQVAgcGFja2Fn
ZS4gSXQgd2FzIGxhdGVyIGFkYXB0ZWQgdG8gUlNWUCB3aGljaCBtYWRlIGZ1cnRoZXJcbi8vIGFt
ZW5kbWVudHMuIFRoZXNlIGRlY2lzaW9ucywgcGFydGljdWxhcmx5IHRvIG1hcmdpbmFsaXplIE1l
c3NhZ2VDaGFubmVsIGFuZFxuLy8gdG8gY2FwdHVyZSB0aGUgTXV0YXRpb25PYnNlcnZlciBpbXBs
ZW1lbnRhdGlvbiBpbiBhIGNsb3N1cmUsIHdlcmUgaW50ZWdyYXRlZFxuLy8gYmFjayBpbnRvIEFT
QVAgcHJvcGVyLlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RpbGRlaW8vcnN2cC5qcy9ibG9iL2Nk
ZGY3MjMyNTQ2YTljZjg1ODUyNGI3NWNkZTZmOWVkZjcyNjIwYTcvbGliL3JzdnAvYXNhcC5qc1xu
XG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoZXhwb3J0cywgX193ZWJwYWNrX3Jl
cXVpcmVfXygzMCkpKVxuXG4vKioqLyB9KSxcbi8qIDEwMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtc
blxuXG4vL1RoaXMgZmlsZSBjb250YWlucyB0aGUgRVM2IGV4dGVuc2lvbnMgdG8gdGhlIGNvcmUg
UHJvbWlzZXMvQSsgQVBJXG5cbnZhciBQcm9taXNlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MSk7
XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvbWlzZTtcblxuLyogU3RhdGljIEZ1bmN0aW9ucyAqL1xu
XG52YXIgVFJVRSA9IHZhbHVlUHJvbWlzZSh0cnVlKTtcbnZhciBGQUxTRSA9IHZhbHVlUHJvbWlz
ZShmYWxzZSk7XG52YXIgTlVMTCA9IHZhbHVlUHJvbWlzZShudWxsKTtcbnZhciBVTkRFRklORUQg
PSB2YWx1ZVByb21pc2UodW5kZWZpbmVkKTtcbnZhciBaRVJPID0gdmFsdWVQcm9taXNlKDApO1xu
dmFyIEVNUFRZU1RSSU5HID0gdmFsdWVQcm9taXNlKCcnKTtcblxuZnVuY3Rpb24gdmFsdWVQcm9t
aXNlKHZhbHVlKSB7XG4gIHZhciBwID0gbmV3IFByb21pc2UoUHJvbWlzZS5fNDQpO1xuICBwLl84
MyA9IDE7XG4gIHAuXzE4ID0gdmFsdWU7XG4gIHJldHVybiBwO1xufVxuUHJvbWlzZS5yZXNvbHZl
ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFByb21pc2UpIHJl
dHVybiB2YWx1ZTtcblxuICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiBOVUxMO1xuICBpZiAo
dmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFVOREVGSU5FRDtcbiAgaWYgKHZhbHVlID09PSB0
cnVlKSByZXR1cm4gVFJVRTtcbiAgaWYgKHZhbHVlID09PSBmYWxzZSkgcmV0dXJuIEZBTFNFO1xu
ICBpZiAodmFsdWUgPT09IDApIHJldHVybiBaRVJPO1xuICBpZiAodmFsdWUgPT09ICcnKSByZXR1
cm4gRU1QVFlTVFJJTkc7XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgfHwgdHlw
ZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciB0aGVuID0g
dmFsdWUudGhlbjtcbiAgICAgIGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAg
ICAgICByZXR1cm4gbmV3IFByb21pc2UodGhlbi5iaW5kKHZhbHVlKSk7XG4gICAgICB9XG4gICAg
fSBjYXRjaCAoZXgpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2
ZSwgcmVqZWN0KSB7XG4gICAgICAgIHJlamVjdChleCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1c
biAgcmV0dXJuIHZhbHVlUHJvbWlzZSh2YWx1ZSk7XG59O1xuXG5Qcm9taXNlLmFsbCA9IGZ1bmN0
aW9uIChhcnIpIHtcbiAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcnIp
O1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4g
ICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSByZXR1cm4gcmVzb2x2ZShbXSk7XG4gICAgdmFyIHJl
bWFpbmluZyA9IGFyZ3MubGVuZ3RoO1xuICAgIGZ1bmN0aW9uIHJlcyhpLCB2YWwpIHtcbiAgICAg
IGlmICh2YWwgJiYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnIHx8IHR5cGVvZiB2YWwgPT09ICdm
dW5jdGlvbicpKSB7XG4gICAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBQcm9taXNlICYmIHZhbC50
aGVuID09PSBQcm9taXNlLnByb3RvdHlwZS50aGVuKSB7XG4gICAgICAgICAgd2hpbGUgKHZhbC5f
ODMgPT09IDMpIHtcbiAgICAgICAgICAgIHZhbCA9IHZhbC5fMTg7XG4gICAgICAgICAgfVxuICAg
ICAgICAgIGlmICh2YWwuXzgzID09PSAxKSByZXR1cm4gcmVzKGksIHZhbC5fMTgpO1xuICAgICAg
ICAgIGlmICh2YWwuXzgzID09PSAyKSByZWplY3QodmFsLl8xOCk7XG4gICAgICAgICAgdmFsLnRo
ZW4oZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgcmVzKGksIHZhbCk7XG4gICAgICAgICAg
fSwgcmVqZWN0KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAg
ICAgdmFyIHRoZW4gPSB2YWwudGhlbjtcbiAgICAgICAgICBpZiAodHlwZW9mIHRoZW4gPT09ICdm
dW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhciBwID0gbmV3IFByb21pc2UodGhlbi5iaW5kKHZh
bCkpO1xuICAgICAgICAgICAgcC50aGVuKGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgICAg
cmVzKGksIHZhbCk7XG4gICAgICAgICAgICB9LCByZWplY3QpO1xuICAgICAgICAgICAgcmV0dXJu
O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXJnc1tpXSA9IHZhbDtc
biAgICAgIGlmICgtLXJlbWFpbmluZyA9PT0gMCkge1xuICAgICAgICByZXNvbHZlKGFyZ3MpO1xu
ICAgICAgfVxuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKysp
IHtcbiAgICAgIHJlcyhpLCBhcmdzW2ldKTtcbiAgICB9XG4gIH0pO1xufTtcblxuUHJvbWlzZS5y
ZWplY3QgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9u
IChyZXNvbHZlLCByZWplY3QpIHtcbiAgICByZWplY3QodmFsdWUpO1xuICB9KTtcbn07XG5cblBy
b21pc2UucmFjZSA9IGZ1bmN0aW9uICh2YWx1ZXMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1
bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YWx1ZXMuZm9yRWFjaChmdW5jdGlvbih2
YWx1ZSl7XG4gICAgICBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4ocmVzb2x2ZSwgcmVqZWN0
KTtcbiAgICB9KTtcbiAgfSk7XG59O1xuXG4vKiBQcm90b3R5cGUgTWV0aG9kcyAqL1xuXG5Qcm9t
aXNlLnByb3RvdHlwZVsnY2F0Y2gnXSA9IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gIHJldHVy
biB0aGlzLnRoZW4obnVsbCwgb25SZWplY3RlZCk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTAy
ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbihmdW5jdGlvbihzZWxm
KSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICBpZiAoc2VsZi5mZXRjaCkge1xuICAgIHJldHVyblxu
ICB9XG5cbiAgdmFyIHN1cHBvcnQgPSB7XG4gICAgc2VhcmNoUGFyYW1zOiAnVVJMU2VhcmNoUGFy
YW1zJyBpbiBzZWxmLFxuICAgIGl0ZXJhYmxlOiAnU3ltYm9sJyBpbiBzZWxmICYmICdpdGVyYXRv
cicgaW4gU3ltYm9sLFxuICAgIGJsb2I6ICdGaWxlUmVhZGVyJyBpbiBzZWxmICYmICdCbG9iJyBp
biBzZWxmICYmIChmdW5jdGlvbigpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG5ldyBCbG9iKClc
biAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICByZXR1cm4g
ZmFsc2VcbiAgICAgIH1cbiAgICB9KSgpLFxuICAgIGZvcm1EYXRhOiAnRm9ybURhdGEnIGluIHNl
bGYsXG4gICAgYXJyYXlCdWZmZXI6ICdBcnJheUJ1ZmZlcicgaW4gc2VsZlxuICB9XG5cbiAgaWYg
KHN1cHBvcnQuYXJyYXlCdWZmZXIpIHtcbiAgICB2YXIgdmlld0NsYXNzZXMgPSBbXG4gICAgICAn
W29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICAgICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICAg
ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgICAnW29iamVjdCBJbnQxNkFycmF5
XScsXG4gICAgICAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgSW50MzJB
cnJheV0nLFxuICAgICAgJ1tvYmplY3QgVWludDMyQXJyYXldJyxcbiAgICAgICdbb2JqZWN0IEZs
b2F0MzJBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgRmxvYXQ2NEFycmF5XSdcbiAgICBdXG5cbiAg
ICB2YXIgaXNEYXRhVmlldyA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiBE
YXRhVmlldy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihvYmopXG4gICAgfVxuXG4gICAgdmFyIGlz
QXJyYXlCdWZmZXJWaWV3ID0gQXJyYXlCdWZmZXIuaXNWaWV3IHx8IGZ1bmN0aW9uKG9iaikge1xu
ICAgICAgcmV0dXJuIG9iaiAmJiB2aWV3Q2xhc3Nlcy5pbmRleE9mKE9iamVjdC5wcm90b3R5cGUu
dG9TdHJpbmcuY2FsbChvYmopKSA+IC0xXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbm9ybWFs
aXplTmFtZShuYW1lKSB7XG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAg
ICAgbmFtZSA9IFN0cmluZyhuYW1lKVxuICAgIH1cbiAgICBpZiAoL1teYS16MC05XFwtIyQlJicq
Ky5cXF5fYHx+XS9pLnRlc3QobmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0lu
dmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBmaWVsZCBuYW1lJylcbiAgICB9XG4gICAgcmV0dXJu
IG5hbWUudG9Mb3dlckNhc2UoKVxuICB9XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUodmFs
dWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgdmFsdWUg
PSBTdHJpbmcodmFsdWUpXG4gICAgfVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgLy8gQnVp
bGQgYSBkZXN0cnVjdGl2ZSBpdGVyYXRvciBmb3IgdGhlIHZhbHVlIGxpc3RcbiAgZnVuY3Rpb24g
aXRlcmF0b3JGb3IoaXRlbXMpIHtcbiAgICB2YXIgaXRlcmF0b3IgPSB7XG4gICAgICBuZXh0OiBm
dW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gaXRlbXMuc2hpZnQoKVxuICAgICAgICBy
ZXR1cm4ge2RvbmU6IHZhbHVlID09PSB1bmRlZmluZWQsIHZhbHVlOiB2YWx1ZX1cbiAgICAgIH1c
biAgICB9XG5cbiAgICBpZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICAgICAgaXRlcmF0b3JbU3lt
Ym9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JcbiAg
ICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaXRlcmF0b3JcbiAgfVxuXG4gIGZ1bmN0aW9uIEhl
YWRlcnMoaGVhZGVycykge1xuICAgIHRoaXMubWFwID0ge31cblxuICAgIGlmIChoZWFkZXJzIGlu
c3RhbmNlb2YgSGVhZGVycykge1xuICAgICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVl
LCBuYW1lKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIHZhbHVlKVxuICAgICAgfSwgdGhp
cylcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICAgIGhlYWRl
cnMuZm9yRWFjaChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoaGVhZGVy
WzBdLCBoZWFkZXJbMV0pXG4gICAgICB9LCB0aGlzKVxuICAgIH0gZWxzZSBpZiAoaGVhZGVycykg
e1xuICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGVhZGVycykuZm9yRWFjaChmdW5j
dGlvbihuYW1lKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIGhlYWRlcnNbbmFtZV0pXG4g
ICAgICB9LCB0aGlzKVxuICAgIH1cbiAgfVxuXG4gIEhlYWRlcnMucHJvdG90eXBlLmFwcGVuZCA9
IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSlc
biAgICB2YWx1ZSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKVxuICAgIHZhciBvbGRWYWx1ZSA9IHRo
aXMubWFwW25hbWVdXG4gICAgdGhpcy5tYXBbbmFtZV0gPSBvbGRWYWx1ZSA/IG9sZFZhbHVlKycs
Jyt2YWx1ZSA6IHZhbHVlXG4gIH1cblxuICBIZWFkZXJzLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBm
dW5jdGlvbihuYW1lKSB7XG4gICAgZGVsZXRlIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSld
XG4gIH1cblxuICBIZWFkZXJzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAg
bmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSlcbiAgICByZXR1cm4gdGhpcy5oYXMobmFtZSkgPyB0
aGlzLm1hcFtuYW1lXSA6IG51bGxcbiAgfVxuXG4gIEhlYWRlcnMucHJvdG90eXBlLmhhcyA9IGZ1
bmN0aW9uKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAuaGFzT3duUHJvcGVydHkobm9ybWFs
aXplTmFtZShuYW1lKSlcbiAgfVxuXG4gIEhlYWRlcnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9u
KG5hbWUsIHZhbHVlKSB7XG4gICAgdGhpcy5tYXBbbm9ybWFsaXplTmFtZShuYW1lKV0gPSBub3Jt
YWxpemVWYWx1ZSh2YWx1ZSlcbiAgfVxuXG4gIEhlYWRlcnMucHJvdG90eXBlLmZvckVhY2ggPSBm
dW5jdGlvbihjYWxsYmFjaywgdGhpc0FyZykge1xuICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5t
YXApIHtcbiAgICAgIGlmICh0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAg
ICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHRoaXMubWFwW25hbWVdLCBuYW1lLCB0aGlzKVxuICAg
ICAgfVxuICAgIH1cbiAgfVxuXG4gIEhlYWRlcnMucHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbigp
IHtcbiAgICB2YXIgaXRlbXMgPSBbXVxuICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwg
bmFtZSkgeyBpdGVtcy5wdXNoKG5hbWUpIH0pXG4gICAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1z
KVxuICB9XG5cbiAgSGVhZGVycy5wcm90b3R5cGUudmFsdWVzID0gZnVuY3Rpb24oKSB7XG4gICAg
dmFyIGl0ZW1zID0gW11cbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHsgaXRlbXMu
cHVzaCh2YWx1ZSkgfSlcbiAgICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG4gIH1cblxuICBI
ZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGl0ZW1zID0g
W11cbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHsgaXRlbXMucHVzaChb
bmFtZSwgdmFsdWVdKSB9KVxuICAgIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbiAgfVxuXG4g
IGlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7XG4gICAgSGVhZGVycy5wcm90b3R5cGVbU3ltYm9sLml0
ZXJhdG9yXSA9IEhlYWRlcnMucHJvdG90eXBlLmVudHJpZXNcbiAgfVxuXG4gIGZ1bmN0aW9uIGNv
bnN1bWVkKGJvZHkpIHtcbiAgICBpZiAoYm9keS5ib2R5VXNlZCkge1xuICAgICAgcmV0dXJuIFBy
b21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ0FscmVhZHkgcmVhZCcpKVxuICAgIH1cbiAgICBi
b2R5LmJvZHlVc2VkID0gdHJ1ZVxuICB9XG5cbiAgZnVuY3Rpb24gZmlsZVJlYWRlclJlYWR5KHJl
YWRlcikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qp
IHtcbiAgICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmVzb2x2ZShy
ZWFkZXIucmVzdWx0KVxuICAgICAgfVxuICAgICAgcmVhZGVyLm9uZXJyb3IgPSBmdW5jdGlvbigp
IHtcbiAgICAgICAgcmVqZWN0KHJlYWRlci5lcnJvcilcbiAgICAgIH1cbiAgICB9KVxuICB9XG5c
biAgZnVuY3Rpb24gcmVhZEJsb2JBc0FycmF5QnVmZmVyKGJsb2IpIHtcbiAgICB2YXIgcmVhZGVy
ID0gbmV3IEZpbGVSZWFkZXIoKVxuICAgIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJl
YWRlcilcbiAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoYmxvYilcbiAgICByZXR1cm4gcHJv
bWlzZVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZEJsb2JBc1RleHQoYmxvYikge1xuICAgIHZhciBy
ZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gICAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVh
ZHkocmVhZGVyKVxuICAgIHJlYWRlci5yZWFkQXNUZXh0KGJsb2IpXG4gICAgcmV0dXJuIHByb21p
c2VcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRBcnJheUJ1ZmZlckFzVGV4dChidWYpIHtcbiAgICB2
YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZilcbiAgICB2YXIgY2hhcnMgPSBuZXcgQXJyYXko
dmlldy5sZW5ndGgpXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZXcubGVuZ3RoOyBpKysp
IHtcbiAgICAgIGNoYXJzW2ldID0gU3RyaW5nLmZyb21DaGFyQ29kZSh2aWV3W2ldKVxuICAgIH1c
biAgICByZXR1cm4gY2hhcnMuam9pbignJylcbiAgfVxuXG4gIGZ1bmN0aW9uIGJ1ZmZlckNsb25l
KGJ1Zikge1xuICAgIGlmIChidWYuc2xpY2UpIHtcbiAgICAgIHJldHVybiBidWYuc2xpY2UoMClc
biAgICB9IGVsc2Uge1xuICAgICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYuYnl0ZUxl
bmd0aClcbiAgICAgIHZpZXcuc2V0KG5ldyBVaW50OEFycmF5KGJ1ZikpXG4gICAgICByZXR1cm4g
dmlldy5idWZmZXJcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBCb2R5KCkge1xuICAgIHRoaXMu
Ym9keVVzZWQgPSBmYWxzZVxuXG4gICAgdGhpcy5faW5pdEJvZHkgPSBmdW5jdGlvbihib2R5KSB7
XG4gICAgICB0aGlzLl9ib2R5SW5pdCA9IGJvZHlcbiAgICAgIGlmICghYm9keSkge1xuICAgICAg
ICB0aGlzLl9ib2R5VGV4dCA9ICcnXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAn
c3RyaW5nJykge1xuICAgICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHlcbiAgICAgIH0gZWxzZSBp
ZiAoc3VwcG9ydC5ibG9iICYmIEJsb2IucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtc
biAgICAgICAgdGhpcy5fYm9keUJsb2IgPSBib2R5XG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnQu
Zm9ybURhdGEgJiYgRm9ybURhdGEucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAg
ICAgICAgdGhpcy5fYm9keUZvcm1EYXRhID0gYm9keVxuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0
LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2Yo
Ym9keSkpIHtcbiAgICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5LnRvU3RyaW5nKClcbiAgICAg
IH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiBzdXBwb3J0LmJsb2IgJiYgaXNEYXRh
Vmlldyhib2R5KSkge1xuICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9u
ZShib2R5LmJ1ZmZlcilcbiAgICAgICAgLy8gSUUgMTAtMTEgY2FuJ3QgaGFuZGxlIGEgRGF0YVZp
ZXcgYm9keS5cbiAgICAgICAgdGhpcy5fYm9keUluaXQgPSBuZXcgQmxvYihbdGhpcy5fYm9keUFy
cmF5QnVmZmVyXSlcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiAoQXJy
YXlCdWZmZXIucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkgfHwgaXNBcnJheUJ1ZmZlclZp
ZXcoYm9keSkpKSB7XG4gICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25l
KGJvZHkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vuc3VwcG9y
dGVkIEJvZHlJbml0IHR5cGUnKVxuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuaGVhZGVycy5n
ZXQoJ2NvbnRlbnQtdHlwZScpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmlu
ZycpIHtcbiAgICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAndGV4dC9w
bGFpbjtjaGFyc2V0PVVURi04JylcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QmxvYiAm
JiB0aGlzLl9ib2R5QmxvYi50eXBlKSB7XG4gICAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29u
dGVudC10eXBlJywgdGhpcy5fYm9keUJsb2IudHlwZSlcbiAgICAgICAgfSBlbHNlIGlmIChzdXBw
b3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBl
T2YoYm9keSkpIHtcbiAgICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAn
YXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgnKVxuICAgICAg
ICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN1cHBvcnQuYmxvYikge1xuICAgICAgdGhp
cy5ibG9iID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRo
aXMpXG4gICAgICAgIGlmIChyZWplY3RlZCkge1xuICAgICAgICAgIHJldHVybiByZWplY3RlZFxu
ICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7XG4gICAgICAgICAgcmV0
dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QmxvYilcbiAgICAgICAgfSBlbHNlIGlmICh0
aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZl
KG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSlcbiAgICAgICAgfSBlbHNlIGlmICh0
aGlzLl9ib2R5Rm9ybURhdGEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5v
dCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgYmxvYicpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAg
ICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keVRleHRdKSlcbiAg
ICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmFycmF5QnVmZmVyID0gZnVuY3Rpb24oKSB7
XG4gICAgICAgIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICByZXR1cm4g
Y29uc3VtZWQodGhpcykgfHwgUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilc
biAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5ibG9iKCkudGhlbihyZWFk
QmxvYkFzQXJyYXlCdWZmZXIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlz
LnRleHQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMp
XG4gICAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdGVkXG4gICAgICB9
XG5cbiAgICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgICByZXR1cm4gcmVhZEJsb2JB
c1RleHQodGhpcy5fYm9keUJsb2IpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1
ZmZlcikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlYWRBcnJheUJ1ZmZlckFz
VGV4dCh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5
Rm9ybURhdGEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3Jt
RGF0YSBib2R5IGFzIHRleHQnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21p
c2UucmVzb2x2ZSh0aGlzLl9ib2R5VGV4dClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3Vw
cG9ydC5mb3JtRGF0YSkge1xuICAgICAgdGhpcy5mb3JtRGF0YSA9IGZ1bmN0aW9uKCkge1xuICAg
ICAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihkZWNvZGUpXG4gICAgICB9XG4gICAgfVxuXG4g
ICAgdGhpcy5qc29uID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhl
bihKU09OLnBhcnNlKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvLyBIVFRQ
IG1ldGhvZHMgd2hvc2UgY2FwaXRhbGl6YXRpb24gc2hvdWxkIGJlIG5vcm1hbGl6ZWRcbiAgdmFy
IG1ldGhvZHMgPSBbJ0RFTEVURScsICdHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1BPU1QnLCAn
UFVUJ11cblxuICBmdW5jdGlvbiBub3JtYWxpemVNZXRob2QobWV0aG9kKSB7XG4gICAgdmFyIHVw
Y2FzZWQgPSBtZXRob2QudG9VcHBlckNhc2UoKVxuICAgIHJldHVybiAobWV0aG9kcy5pbmRleE9m
KHVwY2FzZWQpID4gLTEpID8gdXBjYXNlZCA6IG1ldGhvZFxuICB9XG5cbiAgZnVuY3Rpb24gUmVx
dWVzdChpbnB1dCwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG4gICAg
dmFyIGJvZHkgPSBvcHRpb25zLmJvZHlcblxuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIFJlcXVl
c3QpIHtcbiAgICAgIGlmIChpbnB1dC5ib2R5VXNlZCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlw
ZUVycm9yKCdBbHJlYWR5IHJlYWQnKVxuICAgICAgfVxuICAgICAgdGhpcy51cmwgPSBpbnB1dC51
cmxcbiAgICAgIHRoaXMuY3JlZGVudGlhbHMgPSBpbnB1dC5jcmVkZW50aWFsc1xuICAgICAgaWYg
KCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMo
aW5wdXQuaGVhZGVycylcbiAgICAgIH1cbiAgICAgIHRoaXMubWV0aG9kID0gaW5wdXQubWV0aG9k
XG4gICAgICB0aGlzLm1vZGUgPSBpbnB1dC5tb2RlXG4gICAgICBpZiAoIWJvZHkgJiYgaW5wdXQu
X2JvZHlJbml0ICE9IG51bGwpIHtcbiAgICAgICAgYm9keSA9IGlucHV0Ll9ib2R5SW5pdFxuICAg
ICAgICBpbnB1dC5ib2R5VXNlZCA9IHRydWVcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAg
dGhpcy51cmwgPSBTdHJpbmcoaW5wdXQpXG4gICAgfVxuXG4gICAgdGhpcy5jcmVkZW50aWFscyA9
IG9wdGlvbnMuY3JlZGVudGlhbHMgfHwgdGhpcy5jcmVkZW50aWFscyB8fCAnb21pdCdcbiAgICBp
ZiAob3B0aW9ucy5oZWFkZXJzIHx8ICF0aGlzLmhlYWRlcnMpIHtcbiAgICAgIHRoaXMuaGVhZGVy
cyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylcbiAgICB9XG4gICAgdGhpcy5tZXRob2Qg
PSBub3JtYWxpemVNZXRob2Qob3B0aW9ucy5tZXRob2QgfHwgdGhpcy5tZXRob2QgfHwgJ0dFVCcp
XG4gICAgdGhpcy5tb2RlID0gb3B0aW9ucy5tb2RlIHx8IHRoaXMubW9kZSB8fCBudWxsXG4gICAg
dGhpcy5yZWZlcnJlciA9IG51bGxcblxuICAgIGlmICgodGhpcy5tZXRob2QgPT09ICdHRVQnIHx8
IHRoaXMubWV0aG9kID09PSAnSEVBRCcpICYmIGJvZHkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBl
RXJyb3IoJ0JvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzJylcbiAgICB9
XG4gICAgdGhpcy5faW5pdEJvZHkoYm9keSlcbiAgfVxuXG4gIFJlcXVlc3QucHJvdG90eXBlLmNs
b25lID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMsIHsgYm9keTog
dGhpcy5fYm9keUluaXQgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlY29kZShib2R5KSB7XG4gICAg
dmFyIGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICAgIGJvZHkudHJpbSgpLnNwbGl0KCcmJykuZm9y
RWFjaChmdW5jdGlvbihieXRlcykge1xuICAgICAgaWYgKGJ5dGVzKSB7XG4gICAgICAgIHZhciBz
cGxpdCA9IGJ5dGVzLnNwbGl0KCc9JylcbiAgICAgICAgdmFyIG5hbWUgPSBzcGxpdC5zaGlmdCgp
LnJlcGxhY2UoL1xcKy9nLCAnICcpXG4gICAgICAgIHZhciB2YWx1ZSA9IHNwbGl0LmpvaW4oJz0n
KS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICBmb3JtLmFwcGVuZChkZWNvZGVVUklDb21w
b25lbnQobmFtZSksIGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpXG4gICAgICB9XG4gICAgfSlc
biAgICByZXR1cm4gZm9ybVxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VIZWFkZXJzKHJhd0hlYWRl
cnMpIHtcbiAgICB2YXIgaGVhZGVycyA9IG5ldyBIZWFkZXJzKClcbiAgICByYXdIZWFkZXJzLnNw
bGl0KC9cXHI/XFxuLykuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7XG4gICAgICB2YXIgcGFydHMg
PSBsaW5lLnNwbGl0KCc6JylcbiAgICAgIHZhciBrZXkgPSBwYXJ0cy5zaGlmdCgpLnRyaW0oKVxu
ICAgICAgaWYgKGtleSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBwYXJ0cy5qb2luKCc6JykudHJp
bSgpXG4gICAgICAgIGhlYWRlcnMuYXBwZW5kKGtleSwgdmFsdWUpXG4gICAgICB9XG4gICAgfSlc
biAgICByZXR1cm4gaGVhZGVyc1xuICB9XG5cbiAgQm9keS5jYWxsKFJlcXVlc3QucHJvdG90eXBl
KVxuXG4gIGZ1bmN0aW9uIFJlc3BvbnNlKGJvZHlJbml0LCBvcHRpb25zKSB7XG4gICAgaWYgKCFv
cHRpb25zKSB7XG4gICAgICBvcHRpb25zID0ge31cbiAgICB9XG5cbiAgICB0aGlzLnR5cGUgPSAn
ZGVmYXVsdCdcbiAgICB0aGlzLnN0YXR1cyA9ICdzdGF0dXMnIGluIG9wdGlvbnMgPyBvcHRpb25z
LnN0YXR1cyA6IDIwMFxuICAgIHRoaXMub2sgPSB0aGlzLnN0YXR1cyA+PSAyMDAgJiYgdGhpcy5z
dGF0dXMgPCAzMDBcbiAgICB0aGlzLnN0YXR1c1RleHQgPSAnc3RhdHVzVGV4dCcgaW4gb3B0aW9u
cyA/IG9wdGlvbnMuc3RhdHVzVGV4dCA6ICdPSydcbiAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVh
ZGVycyhvcHRpb25zLmhlYWRlcnMpXG4gICAgdGhpcy51cmwgPSBvcHRpb25zLnVybCB8fCAnJ1xu
ICAgIHRoaXMuX2luaXRCb2R5KGJvZHlJbml0KVxuICB9XG5cbiAgQm9keS5jYWxsKFJlc3BvbnNl
LnByb3RvdHlwZSlcblxuICBSZXNwb25zZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtc
biAgICByZXR1cm4gbmV3IFJlc3BvbnNlKHRoaXMuX2JvZHlJbml0LCB7XG4gICAgICBzdGF0dXM6
IHRoaXMuc3RhdHVzLFxuICAgICAgc3RhdHVzVGV4dDogdGhpcy5zdGF0dXNUZXh0LFxuICAgICAg
aGVhZGVyczogbmV3IEhlYWRlcnModGhpcy5oZWFkZXJzKSxcbiAgICAgIHVybDogdGhpcy51cmxc
biAgICB9KVxuICB9XG5cbiAgUmVzcG9uc2UuZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIg
cmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UobnVsbCwge3N0YXR1czogMCwgc3RhdHVzVGV4dDogJyd9
KVxuICAgIHJlc3BvbnNlLnR5cGUgPSAnZXJyb3InXG4gICAgcmV0dXJuIHJlc3BvbnNlXG4gIH1c
blxuICB2YXIgcmVkaXJlY3RTdGF0dXNlcyA9IFszMDEsIDMwMiwgMzAzLCAzMDcsIDMwOF1cblxu
ICBSZXNwb25zZS5yZWRpcmVjdCA9IGZ1bmN0aW9uKHVybCwgc3RhdHVzKSB7XG4gICAgaWYgKHJl
ZGlyZWN0U3RhdHVzZXMuaW5kZXhPZihzdGF0dXMpID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3
IFJhbmdlRXJyb3IoJ0ludmFsaWQgc3RhdHVzIGNvZGUnKVxuICAgIH1cblxuICAgIHJldHVybiBu
ZXcgUmVzcG9uc2UobnVsbCwge3N0YXR1czogc3RhdHVzLCBoZWFkZXJzOiB7bG9jYXRpb246IHVy
bH19KVxuICB9XG5cbiAgc2VsZi5IZWFkZXJzID0gSGVhZGVyc1xuICBzZWxmLlJlcXVlc3QgPSBS
ZXF1ZXN0XG4gIHNlbGYuUmVzcG9uc2UgPSBSZXNwb25zZVxuXG4gIHNlbGYuZmV0Y2ggPSBmdW5j
dGlvbihpbnB1dCwgaW5pdCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNv
bHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZXF1ZXN0ID0gbmV3IFJlcXVlc3QoaW5wdXQsIGlu
aXQpXG4gICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KClcblxuICAgICAgeGhyLm9u
bG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgICBz
dGF0dXM6IHhoci5zdGF0dXMsXG4gICAgICAgICAgc3RhdHVzVGV4dDogeGhyLnN0YXR1c1RleHQs
XG4gICAgICAgICAgaGVhZGVyczogcGFyc2VIZWFkZXJzKHhoci5nZXRBbGxSZXNwb25zZUhlYWRl
cnMoKSB8fCAnJylcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLnVybCA9ICdyZXNwb25zZVVS
TCcgaW4geGhyID8geGhyLnJlc3BvbnNlVVJMIDogb3B0aW9ucy5oZWFkZXJzLmdldCgnWC1SZXF1
ZXN0LVVSTCcpXG4gICAgICAgIHZhciBib2R5ID0gJ3Jlc3BvbnNlJyBpbiB4aHIgPyB4aHIucmVz
cG9uc2UgOiB4aHIucmVzcG9uc2VUZXh0XG4gICAgICAgIHJlc29sdmUobmV3IFJlc3BvbnNlKGJv
ZHksIG9wdGlvbnMpKVxuICAgICAgfVxuXG4gICAgICB4aHIub25lcnJvciA9IGZ1bmN0aW9uKCkg
e1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcp
KVxuICAgICAgfVxuXG4gICAgICB4aHIub250aW1lb3V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAg
IHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgZmFpbGVkJykpXG4gICAgICB9
XG5cbiAgICAgIHhoci5vcGVuKHJlcXVlc3QubWV0aG9kLCByZXF1ZXN0LnVybCwgdHJ1ZSlcblxu
ICAgICAgaWYgKHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdpbmNsdWRlJykge1xuICAgICAgICB4
aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBpZiAoJ3Jlc3BvbnNl
VHlwZScgaW4geGhyICYmIHN1cHBvcnQuYmxvYikge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBl
ID0gJ2Jsb2InXG4gICAgICB9XG5cbiAgICAgIHJlcXVlc3QuaGVhZGVycy5mb3JFYWNoKGZ1bmN0
aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIHZh
bHVlKVxuICAgICAgfSlcblxuICAgICAgeGhyLnNlbmQodHlwZW9mIHJlcXVlc3QuX2JvZHlJbml0
ID09PSAndW5kZWZpbmVkJyA/IG51bGwgOiByZXF1ZXN0Ll9ib2R5SW5pdClcbiAgICB9KVxuICB9
XG4gIHNlbGYuZmV0Y2gucG9seWZpbGwgPSB0cnVlXG59KSh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVm
aW5lZCcgPyBzZWxmIDogdGhpcyk7XG5cblxuLyoqKi8gfSksXG4vKiAxMDMgKi9cbi8qKiovIChm
dW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18p
IHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoX193ZWJwYWNrX2V4
cG9ydHNfXywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKDkpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9kb21fXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oMTE4KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfcmVhY3RfZG9tX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfZG9tX18pO1xuLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWR1eF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygyOSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX3JlYWN0X3JlZHV4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg4KTtcbi8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2NvbnRh
aW5lcnNfQXBwX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyMik7XG4vKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19yZWR1Y2Vyc19fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygyMjgpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNl90b2RvbXZjX2FwcF9jc3NfaW5kZXhfY3NzX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKDIzMCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV82X3RvZG9tdmNfYXBwX2Nzc19pbmRleF9jc3NfX19kZWZhdWx0ID0gX193ZWJw
YWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl90b2RvbXZjX2FwcF9j
c3NfaW5kZXhfY3NzX18pO1xudmFyIHN0b3JlPU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfcmVkdXhfX1tcImNcIiAvKiBjcmVhdGVTdG9yZSAqL10pKF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNV9fcmVkdWNlcnNfX1tcImFcIiAvKiBkZWZhdWx0ICovXSk7T2JqZWN0KF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9kb21fX1tcInJlbmRlclwiXSkoX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX3JlYWN0X3JlZHV4X19bXCJhXCIgLyogUHJvdmlkZXIgKi9d
LHtzdG9yZTpzdG9yZX0sX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVs
dC5hLmNyZWF0ZUVsZW1lbnQoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19jb250YWluZXJz
X0FwcF9fW1wiYVwiIC8qIGRlZmF1bHQgKi9dLG51bGwpKSxkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgncm9vdCcpKTtcblxuLyoqKi8gfSksXG4vKiAxMDQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1
bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4v
KipcbiAqIENvcHlyaWdodCAyMDE0LTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRz
IHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhl
IEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSBy
b290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4g
KiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRo
ZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuXG5cbi8qKlxuICogRm9ya2VkIGZyb20gZmJq
cy93YXJuaW5nOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2ZianMvYmxvYi9lNjZi
YTIwYWQ1YmU0MzNlYjU0NDIzZjJiMDk3ZDgyOTMyNGQ5ZGU2L3BhY2thZ2VzL2ZianMvc3JjL19f
Zm9ya3NfXy93YXJuaW5nLmpzXG4gKlxuICogT25seSBjaGFuZ2UgaXMgd2UgdXNlIGNvbnNvbGUu
d2FybiBpbnN0ZWFkIG9mIGNvbnNvbGUuZXJyb3IsXG4gKiBhbmQgZG8gbm90aGluZyB3aGVuICdj
b25zb2xlJyBpcyBub3Qgc3VwcG9ydGVkLlxuICogVGhpcyByZWFsbHkgc2ltcGxpZmllcyB0aGUg
Y29kZS5cbiAqIC0tLVxuICogU2ltaWxhciB0byBpbnZhcmlhbnQgYnV0IG9ubHkgbG9ncyBhIHdh
cm5pbmcgaWYgdGhlIGNvbmRpdGlvbiBpcyBub3QgbWV0LlxuICogVGhpcyBjYW4gYmUgdXNlZCB0
byBsb2cgaXNzdWVzIGluIGRldmVsb3BtZW50IGVudmlyb25tZW50cyBpbiBjcml0aWNhbFxuICog
cGF0aHMuIFJlbW92aW5nIHRoZSBsb2dnaW5nIGNvZGUgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1l
bnRzIHdpbGwga2VlcCB0aGVcbiAqIHNhbWUgbG9naWMgYW5kIGZvbGxvdyB0aGUgc2FtZSBjb2Rl
IHBhdGhzLlxuICovXG5cbnZhciBsb3dQcmlvcml0eVdhcm5pbmcgPSBmdW5jdGlvbiAoKSB7fTtc
blxuaWYgKGZhbHNlKSB7XG4gIHZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbiAoZm9ybWF0KSB7
XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVu
ID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4g
ICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB2YXIg
YXJnSW5kZXggPSAwO1xuICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyBmb3JtYXQucmVw
bGFjZSgvJXMvZywgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107
XG4gICAgfSk7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAg
ICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgLy8gLS0t
IFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMg
dGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXG4g
ICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8g
ZmlyZS5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9IGNhdGNoICh4KSB7
fVxuICB9O1xuXG4gIGxvd1ByaW9yaXR5V2FybmluZyA9IGZ1bmN0aW9uIChjb25kaXRpb24sIGZv
cm1hdCkge1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3
IEVycm9yKCdgd2FybmluZyhjb25kaXRpb24sIGZvcm1hdCwgLi4uYXJncylgIHJlcXVpcmVzIGEg
d2FybmluZyAnICsgJ21lc3NhZ2UgYXJndW1lbnQnKTtcbiAgICB9XG4gICAgaWYgKCFjb25kaXRp
b24pIHtcbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFy
cmF5KF9sZW4yID4gMiA/IF9sZW4yIC0gMiA6IDApLCBfa2V5MiA9IDI7IF9rZXkyIDwgX2xlbjI7
IF9rZXkyKyspIHtcbiAgICAgICAgYXJnc1tfa2V5MiAtIDJdID0gYXJndW1lbnRzW19rZXkyXTtc
biAgICAgIH1cblxuICAgICAgcHJpbnRXYXJuaW5nLmFwcGx5KHVuZGVmaW5lZCwgW2Zvcm1hdF0u
Y29uY2F0KGFyZ3MpKTtcbiAgICB9XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbG93UHJp
b3JpdHlXYXJuaW5nO1xuXG4vKioqLyB9KSxcbi8qIDEwNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtc
bi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRl
ciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4g
dGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3Jh
bnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUg
aW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG5cblxudmFyIFBvb2xlZENsYXNzID0g
X193ZWJwYWNrX3JlcXVpcmVfXygxMDYpO1xudmFyIFJlYWN0RWxlbWVudCA9IF9fd2VicGFja19y
ZXF1aXJlX18oMTQpO1xuXG52YXIgZW1wdHlGdW5jdGlvbiA9IF9fd2VicGFja19yZXF1aXJlX18o
Nik7XG52YXIgdHJhdmVyc2VBbGxDaGlsZHJlbiA9IF9fd2VicGFja19yZXF1aXJlX18oMTA3KTtc
blxudmFyIHR3b0FyZ3VtZW50UG9vbGVyID0gUG9vbGVkQ2xhc3MudHdvQXJndW1lbnRQb29sZXI7
XG52YXIgZm91ckFyZ3VtZW50UG9vbGVyID0gUG9vbGVkQ2xhc3MuZm91ckFyZ3VtZW50UG9vbGVy
O1xuXG52YXIgdXNlclByb3ZpZGVkS2V5RXNjYXBlUmVnZXggPSAvXFwvKy9nO1xuZnVuY3Rpb24g
ZXNjYXBlVXNlclByb3ZpZGVkS2V5KHRleHQpIHtcbiAgcmV0dXJuICgnJyArIHRleHQpLnJlcGxh
Y2UodXNlclByb3ZpZGVkS2V5RXNjYXBlUmVnZXgsICckJi8nKTtcbn1cblxuLyoqXG4gKiBQb29s
ZWRDbGFzcyByZXByZXNlbnRpbmcgdGhlIGJvb2trZWVwaW5nIGFzc29jaWF0ZWQgd2l0aCBwZXJm
b3JtaW5nIGEgY2hpbGRcbiAqIHRyYXZlcnNhbC4gQWxsb3dzIGF2b2lkaW5nIGJpbmRpbmcgY2Fs
bGJhY2tzLlxuICpcbiAqIEBjb25zdHJ1Y3RvciBGb3JFYWNoQm9va0tlZXBpbmdcbiAqIEBwYXJh
bSB7IWZ1bmN0aW9ufSBmb3JFYWNoRnVuY3Rpb24gRnVuY3Rpb24gdG8gcGVyZm9ybSB0cmF2ZXJz
YWwgd2l0aC5cbiAqIEBwYXJhbSB7Pyp9IGZvckVhY2hDb250ZXh0IENvbnRleHQgdG8gcGVyZm9y
bSBjb250ZXh0IHdpdGguXG4gKi9cbmZ1bmN0aW9uIEZvckVhY2hCb29rS2VlcGluZyhmb3JFYWNo
RnVuY3Rpb24sIGZvckVhY2hDb250ZXh0KSB7XG4gIHRoaXMuZnVuYyA9IGZvckVhY2hGdW5jdGlv
bjtcbiAgdGhpcy5jb250ZXh0ID0gZm9yRWFjaENvbnRleHQ7XG4gIHRoaXMuY291bnQgPSAwO1xu
fVxuRm9yRWFjaEJvb2tLZWVwaW5nLnByb3RvdHlwZS5kZXN0cnVjdG9yID0gZnVuY3Rpb24gKCkg
e1xuICB0aGlzLmZ1bmMgPSBudWxsO1xuICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICB0aGlzLmNv
dW50ID0gMDtcbn07XG5Qb29sZWRDbGFzcy5hZGRQb29saW5nVG8oRm9yRWFjaEJvb2tLZWVwaW5n
LCB0d29Bcmd1bWVudFBvb2xlcik7XG5cbmZ1bmN0aW9uIGZvckVhY2hTaW5nbGVDaGlsZChib29r
S2VlcGluZywgY2hpbGQsIG5hbWUpIHtcbiAgdmFyIGZ1bmMgPSBib29rS2VlcGluZy5mdW5jLFxu
ICAgICAgY29udGV4dCA9IGJvb2tLZWVwaW5nLmNvbnRleHQ7XG5cbiAgZnVuYy5jYWxsKGNvbnRl
eHQsIGNoaWxkLCBib29rS2VlcGluZy5jb3VudCsrKTtcbn1cblxuLyoqXG4gKiBJdGVyYXRlcyB0
aHJvdWdoIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNo
aWxkcmVuYC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9j
cy90b3AtbGV2ZWwtYXBpLmh0bWwjcmVhY3QuY2hpbGRyZW4uZm9yZWFjaFxuICpcbiAqIFRoZSBw
cm92aWRlZCBmb3JFYWNoRnVuYyhjaGlsZCwgaW5kZXgpIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNo
XG4gKiBsZWFmIGNoaWxkLlxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRy
ZWUgY29udGFpbmVyLlxuICogQHBhcmFtIHtmdW5jdGlvbigqLCBpbnQpfSBmb3JFYWNoRnVuY1xu
ICogQHBhcmFtIHsqfSBmb3JFYWNoQ29udGV4dCBDb250ZXh0IGZvciBmb3JFYWNoQ29udGV4dC5c
biAqL1xuZnVuY3Rpb24gZm9yRWFjaENoaWxkcmVuKGNoaWxkcmVuLCBmb3JFYWNoRnVuYywgZm9y
RWFjaENvbnRleHQpIHtcbiAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICByZXR1cm4gY2hp
bGRyZW47XG4gIH1cbiAgdmFyIHRyYXZlcnNlQ29udGV4dCA9IEZvckVhY2hCb29rS2VlcGluZy5n
ZXRQb29sZWQoZm9yRWFjaEZ1bmMsIGZvckVhY2hDb250ZXh0KTtcbiAgdHJhdmVyc2VBbGxDaGls
ZHJlbihjaGlsZHJlbiwgZm9yRWFjaFNpbmdsZUNoaWxkLCB0cmF2ZXJzZUNvbnRleHQpO1xuICBG
b3JFYWNoQm9va0tlZXBpbmcucmVsZWFzZSh0cmF2ZXJzZUNvbnRleHQpO1xufVxuXG4vKipcbiAq
IFBvb2xlZENsYXNzIHJlcHJlc2VudGluZyB0aGUgYm9va2tlZXBpbmcgYXNzb2NpYXRlZCB3aXRo
IHBlcmZvcm1pbmcgYSBjaGlsZFxuICogbWFwcGluZy4gQWxsb3dzIGF2b2lkaW5nIGJpbmRpbmcg
Y2FsbGJhY2tzLlxuICpcbiAqIEBjb25zdHJ1Y3RvciBNYXBCb29rS2VlcGluZ1xuICogQHBhcmFt
IHshKn0gbWFwUmVzdWx0IE9iamVjdCBjb250YWluaW5nIHRoZSBvcmRlcmVkIG1hcCBvZiByZXN1
bHRzLlxuICogQHBhcmFtIHshZnVuY3Rpb259IG1hcEZ1bmN0aW9uIEZ1bmN0aW9uIHRvIHBlcmZv
cm0gbWFwcGluZyB3aXRoLlxuICogQHBhcmFtIHs/Kn0gbWFwQ29udGV4dCBDb250ZXh0IHRvIHBl
cmZvcm0gbWFwcGluZyB3aXRoLlxuICovXG5mdW5jdGlvbiBNYXBCb29rS2VlcGluZyhtYXBSZXN1
bHQsIGtleVByZWZpeCwgbWFwRnVuY3Rpb24sIG1hcENvbnRleHQpIHtcbiAgdGhpcy5yZXN1bHQg
PSBtYXBSZXN1bHQ7XG4gIHRoaXMua2V5UHJlZml4ID0ga2V5UHJlZml4O1xuICB0aGlzLmZ1bmMg
PSBtYXBGdW5jdGlvbjtcbiAgdGhpcy5jb250ZXh0ID0gbWFwQ29udGV4dDtcbiAgdGhpcy5jb3Vu
dCA9IDA7XG59XG5NYXBCb29rS2VlcGluZy5wcm90b3R5cGUuZGVzdHJ1Y3RvciA9IGZ1bmN0aW9u
ICgpIHtcbiAgdGhpcy5yZXN1bHQgPSBudWxsO1xuICB0aGlzLmtleVByZWZpeCA9IG51bGw7XG4g
IHRoaXMuZnVuYyA9IG51bGw7XG4gIHRoaXMuY29udGV4dCA9IG51bGw7XG4gIHRoaXMuY291bnQg
PSAwO1xufTtcblBvb2xlZENsYXNzLmFkZFBvb2xpbmdUbyhNYXBCb29rS2VlcGluZywgZm91ckFy
Z3VtZW50UG9vbGVyKTtcblxuZnVuY3Rpb24gbWFwU2luZ2xlQ2hpbGRJbnRvQ29udGV4dChib29r
S2VlcGluZywgY2hpbGQsIGNoaWxkS2V5KSB7XG4gIHZhciByZXN1bHQgPSBib29rS2VlcGluZy5y
ZXN1bHQsXG4gICAgICBrZXlQcmVmaXggPSBib29rS2VlcGluZy5rZXlQcmVmaXgsXG4gICAgICBm
dW5jID0gYm9va0tlZXBpbmcuZnVuYyxcbiAgICAgIGNvbnRleHQgPSBib29rS2VlcGluZy5jb250
ZXh0O1xuXG5cbiAgdmFyIG1hcHBlZENoaWxkID0gZnVuYy5jYWxsKGNvbnRleHQsIGNoaWxkLCBi
b29rS2VlcGluZy5jb3VudCsrKTtcbiAgaWYgKEFycmF5LmlzQXJyYXkobWFwcGVkQ2hpbGQpKSB7
XG4gICAgbWFwSW50b1dpdGhLZXlQcmVmaXhJbnRlcm5hbChtYXBwZWRDaGlsZCwgcmVzdWx0LCBj
aGlsZEtleSwgZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc0FyZ3VtZW50KTtcbiAgfSBlbHNlIGlm
IChtYXBwZWRDaGlsZCAhPSBudWxsKSB7XG4gICAgaWYgKFJlYWN0RWxlbWVudC5pc1ZhbGlkRWxl
bWVudChtYXBwZWRDaGlsZCkpIHtcbiAgICAgIG1hcHBlZENoaWxkID0gUmVhY3RFbGVtZW50LmNs
b25lQW5kUmVwbGFjZUtleShtYXBwZWRDaGlsZCxcbiAgICAgIC8vIEtlZXAgYm90aCB0aGUgKG1h
cHBlZCkgYW5kIG9sZCBrZXlzIGlmIHRoZXkgZGlmZmVyLCBqdXN0IGFzXG4gICAgICAvLyB0cmF2
ZXJzZUFsbENoaWxkcmVuIHVzZWQgdG8gZG8gZm9yIG9iamVjdHMgYXMgY2hpbGRyZW5cbiAgICAg
IGtleVByZWZpeCArIChtYXBwZWRDaGlsZC5rZXkgJiYgKCFjaGlsZCB8fCBjaGlsZC5rZXkgIT09
IG1hcHBlZENoaWxkLmtleSkgPyBlc2NhcGVVc2VyUHJvdmlkZWRLZXkobWFwcGVkQ2hpbGQua2V5
KSArICcvJyA6ICcnKSArIGNoaWxkS2V5KTtcbiAgICB9XG4gICAgcmVzdWx0LnB1c2gobWFwcGVk
Q2hpbGQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcEludG9XaXRoS2V5UHJlZml4SW50ZXJuYWwo
Y2hpbGRyZW4sIGFycmF5LCBwcmVmaXgsIGZ1bmMsIGNvbnRleHQpIHtcbiAgdmFyIGVzY2FwZWRQ
cmVmaXggPSAnJztcbiAgaWYgKHByZWZpeCAhPSBudWxsKSB7XG4gICAgZXNjYXBlZFByZWZpeCA9
IGVzY2FwZVVzZXJQcm92aWRlZEtleShwcmVmaXgpICsgJy8nO1xuICB9XG4gIHZhciB0cmF2ZXJz
ZUNvbnRleHQgPSBNYXBCb29rS2VlcGluZy5nZXRQb29sZWQoYXJyYXksIGVzY2FwZWRQcmVmaXgs
IGZ1bmMsIGNvbnRleHQpO1xuICB0cmF2ZXJzZUFsbENoaWxkcmVuKGNoaWxkcmVuLCBtYXBTaW5n
bGVDaGlsZEludG9Db250ZXh0LCB0cmF2ZXJzZUNvbnRleHQpO1xuICBNYXBCb29rS2VlcGluZy5y
ZWxlYXNlKHRyYXZlcnNlQ29udGV4dCk7XG59XG5cbi8qKlxuICogTWFwcyBjaGlsZHJlbiB0aGF0
IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAuXG4gKlxuICogU2Vl
IGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxldmVsLWFwaS5odG1s
I3JlYWN0LmNoaWxkcmVuLm1hcFxuICpcbiAqIFRoZSBwcm92aWRlZCBtYXBGdW5jdGlvbihjaGls
ZCwga2V5LCBpbmRleCkgd2lsbCBiZSBjYWxsZWQgZm9yIGVhY2hcbiAqIGxlYWYgY2hpbGQuXG4g
KlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBA
cGFyYW0ge2Z1bmN0aW9uKCosIGludCl9IGZ1bmMgVGhlIG1hcCBmdW5jdGlvbi5cbiAqIEBwYXJh
bSB7Kn0gY29udGV4dCBDb250ZXh0IGZvciBtYXBGdW5jdGlvbi5cbiAqIEByZXR1cm4ge29iamVj
dH0gT2JqZWN0IGNvbnRhaW5pbmcgdGhlIG9yZGVyZWQgbWFwIG9mIHJlc3VsdHMuXG4gKi9cbmZ1
bmN0aW9uIG1hcENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jLCBjb250ZXh0KSB7XG4gIGlmIChjaGls
ZHJlbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9XG4gIHZhciByZXN1bHQg
PSBbXTtcbiAgbWFwSW50b1dpdGhLZXlQcmVmaXhJbnRlcm5hbChjaGlsZHJlbiwgcmVzdWx0LCBu
dWxsLCBmdW5jLCBjb250ZXh0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZm9y
RWFjaFNpbmdsZUNoaWxkRHVtbXkodHJhdmVyc2VDb250ZXh0LCBjaGlsZCwgbmFtZSkge1xuICBy
ZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBDb3VudCB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIHRo
YXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXNcbiAqIGBwcm9wcy5jaGlsZHJlbmAuXG4gKlxu
ICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxldmVsLWFw
aS5odG1sI3JlYWN0LmNoaWxkcmVuLmNvdW50XG4gKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4g
Q2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIg
b2YgY2hpbGRyZW4uXG4gKi9cbmZ1bmN0aW9uIGNvdW50Q2hpbGRyZW4oY2hpbGRyZW4sIGNvbnRl
eHQpIHtcbiAgcmV0dXJuIHRyYXZlcnNlQWxsQ2hpbGRyZW4oY2hpbGRyZW4sIGZvckVhY2hTaW5n
bGVDaGlsZER1bW15LCBudWxsKTtcbn1cblxuLyoqXG4gKiBGbGF0dGVuIGEgY2hpbGRyZW4gb2Jq
ZWN0ICh0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmApIGFuZFxuICogcmV0
dXJuIGFuIGFycmF5IHdpdGggYXBwcm9wcmlhdGVseSByZS1rZXllZCBjaGlsZHJlbi5cbiAqXG4g
KiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy90b3AtbGV2ZWwtYXBp
Lmh0bWwjcmVhY3QuY2hpbGRyZW4udG9hcnJheVxuICovXG5mdW5jdGlvbiB0b0FycmF5KGNoaWxk
cmVuKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgbWFwSW50b1dpdGhLZXlQcmVmaXhJbnRlcm5h
bChjaGlsZHJlbiwgcmVzdWx0LCBudWxsLCBlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zQXJndW1l
bnQpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG52YXIgUmVhY3RDaGlsZHJlbiA9IHtcbiAgZm9y
RWFjaDogZm9yRWFjaENoaWxkcmVuLFxuICBtYXA6IG1hcENoaWxkcmVuLFxuICBtYXBJbnRvV2l0
aEtleVByZWZpeEludGVybmFsOiBtYXBJbnRvV2l0aEtleVByZWZpeEludGVybmFsLFxuICBjb3Vu
dDogY291bnRDaGlsZHJlbixcbiAgdG9BcnJheTogdG9BcnJheVxufTtcblxubW9kdWxlLmV4cG9y
dHMgPSBSZWFjdENoaWxkcmVuO1xuXG4vKioqLyB9KSxcbi8qIDEwNiAqL1xuLyoqKi8gKGZ1bmN0
aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJp
Y3RcIjtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNl
ZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZp
bGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9u
YWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRT
IGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIFxuICovXG5cblxuXG52YXIgX3By
b2RJbnZhcmlhbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KTtcblxudmFyIGludmFyaWFudCA9
IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbi8qKlxuICogU3RhdGljIHBvb2xlcnMuIFNldmVy
YWwgY3VzdG9tIHZlcnNpb25zIGZvciBlYWNoIHBvdGVudGlhbCBudW1iZXIgb2ZcbiAqIGFyZ3Vt
ZW50cy4gQSBjb21wbGV0ZWx5IGdlbmVyaWMgcG9vbGVyIGlzIGVhc3kgdG8gaW1wbGVtZW50LCBi
dXQgd291bGRcbiAqIHJlcXVpcmUgYWNjZXNzaW5nIHRoZSBgYXJndW1lbnRzYCBvYmplY3QuIElu
IGVhY2ggb2YgdGhlc2UsIGB0aGlzYCByZWZlcnMgdG9cbiAqIHRoZSBDbGFzcyBpdHNlbGYsIG5v
dCBhbiBpbnN0YW5jZS4gSWYgYW55IG90aGVycyBhcmUgbmVlZGVkLCBzaW1wbHkgYWRkIHRoZW1c
biAqIGhlcmUsIG9yIGluIHRoZWlyIG93biBmaWxlcy5cbiAqL1xudmFyIG9uZUFyZ3VtZW50UG9v
bGVyID0gZnVuY3Rpb24gKGNvcHlGaWVsZHNGcm9tKSB7XG4gIHZhciBLbGFzcyA9IHRoaXM7XG4g
IGlmIChLbGFzcy5pbnN0YW5jZVBvb2wubGVuZ3RoKSB7XG4gICAgdmFyIGluc3RhbmNlID0gS2xh
c3MuaW5zdGFuY2VQb29sLnBvcCgpO1xuICAgIEtsYXNzLmNhbGwoaW5zdGFuY2UsIGNvcHlGaWVs
ZHNGcm9tKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5l
dyBLbGFzcyhjb3B5RmllbGRzRnJvbSk7XG4gIH1cbn07XG5cbnZhciB0d29Bcmd1bWVudFBvb2xl
ciA9IGZ1bmN0aW9uIChhMSwgYTIpIHtcbiAgdmFyIEtsYXNzID0gdGhpcztcbiAgaWYgKEtsYXNz
Lmluc3RhbmNlUG9vbC5sZW5ndGgpIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBLbGFzcy5pbnN0YW5j
ZVBvb2wucG9wKCk7XG4gICAgS2xhc3MuY2FsbChpbnN0YW5jZSwgYTEsIGEyKTtcbiAgICByZXR1
cm4gaW5zdGFuY2U7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBLbGFzcyhhMSwgYTIpO1xu
ICB9XG59O1xuXG52YXIgdGhyZWVBcmd1bWVudFBvb2xlciA9IGZ1bmN0aW9uIChhMSwgYTIsIGEz
KSB7XG4gIHZhciBLbGFzcyA9IHRoaXM7XG4gIGlmIChLbGFzcy5pbnN0YW5jZVBvb2wubGVuZ3Ro
KSB7XG4gICAgdmFyIGluc3RhbmNlID0gS2xhc3MuaW5zdGFuY2VQb29sLnBvcCgpO1xuICAgIEts
YXNzLmNhbGwoaW5zdGFuY2UsIGExLCBhMiwgYTMpO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAg
fSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IEtsYXNzKGExLCBhMiwgYTMpO1xuICB9XG59O1xuXG52
YXIgZm91ckFyZ3VtZW50UG9vbGVyID0gZnVuY3Rpb24gKGExLCBhMiwgYTMsIGE0KSB7XG4gIHZh
ciBLbGFzcyA9IHRoaXM7XG4gIGlmIChLbGFzcy5pbnN0YW5jZVBvb2wubGVuZ3RoKSB7XG4gICAg
dmFyIGluc3RhbmNlID0gS2xhc3MuaW5zdGFuY2VQb29sLnBvcCgpO1xuICAgIEtsYXNzLmNhbGwo
aW5zdGFuY2UsIGExLCBhMiwgYTMsIGE0KTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH0gZWxz
ZSB7XG4gICAgcmV0dXJuIG5ldyBLbGFzcyhhMSwgYTIsIGEzLCBhNCk7XG4gIH1cbn07XG5cbnZh
ciBzdGFuZGFyZFJlbGVhc2VyID0gZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gIHZhciBLbGFzcyA9
IHRoaXM7XG4gICEoaW5zdGFuY2UgaW5zdGFuY2VvZiBLbGFzcykgPyAgZmFsc2UgPyBpbnZhcmlh
bnQoZmFsc2UsICdUcnlpbmcgdG8gcmVsZWFzZSBhbiBpbnN0YW5jZSBpbnRvIGEgcG9vbCBvZiBh
IGRpZmZlcmVudCB0eXBlLicpIDogX3Byb2RJbnZhcmlhbnQoJzI1JykgOiB2b2lkIDA7XG4gIGlu
c3RhbmNlLmRlc3RydWN0b3IoKTtcbiAgaWYgKEtsYXNzLmluc3RhbmNlUG9vbC5sZW5ndGggPCBL
bGFzcy5wb29sU2l6ZSkge1xuICAgIEtsYXNzLmluc3RhbmNlUG9vbC5wdXNoKGluc3RhbmNlKTtc
biAgfVxufTtcblxudmFyIERFRkFVTFRfUE9PTF9TSVpFID0gMTA7XG52YXIgREVGQVVMVF9QT09M
RVIgPSBvbmVBcmd1bWVudFBvb2xlcjtcblxuLyoqXG4gKiBBdWdtZW50cyBgQ29weUNvbnN0cnVj
dG9yYCB0byBiZSBhIHBvb2xhYmxlIGNsYXNzLCBhdWdtZW50aW5nIG9ubHkgdGhlIGNsYXNzXG4g
KiBpdHNlbGYgKHN0YXRpY2FsbHkpIG5vdCBhZGRpbmcgYW55IHByb3RvdHlwaWNhbCBmaWVsZHMu
IEFueSBDb3B5Q29uc3RydWN0b3JcbiAqIHlvdSBnaXZlIHRoaXMgbWF5IGhhdmUgYSBgcG9vbFNp
emVgIHByb3BlcnR5LCBhbmQgd2lsbCBsb29rIGZvciBhXG4gKiBwcm90b3R5cGljYWwgYGRlc3Ry
dWN0b3JgIG9uIGluc3RhbmNlcy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBDb3B5Q29uc3Ry
dWN0b3IgQ29uc3RydWN0b3IgdGhhdCBjYW4gYmUgdXNlZCB0byByZXNldC5cbiAqIEBwYXJhbSB7
RnVuY3Rpb259IHBvb2xlciBDdXN0b21pemFibGUgcG9vbGVyLlxuICovXG52YXIgYWRkUG9vbGlu
Z1RvID0gZnVuY3Rpb24gKENvcHlDb25zdHJ1Y3RvciwgcG9vbGVyKSB7XG4gIC8vIENhc3Rpbmcg
YXMgYW55IHNvIHRoYXQgZmxvdyBpZ25vcmVzIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gYW5k
IHRydXN0c1xuICAvLyBpdCB0byBtYXRjaCB0aGUgdHlwZSB3ZSBkZWNsYXJlZFxuICB2YXIgTmV3
S2xhc3MgPSBDb3B5Q29uc3RydWN0b3I7XG4gIE5ld0tsYXNzLmluc3RhbmNlUG9vbCA9IFtdO1xu
ICBOZXdLbGFzcy5nZXRQb29sZWQgPSBwb29sZXIgfHwgREVGQVVMVF9QT09MRVI7XG4gIGlmICgh
TmV3S2xhc3MucG9vbFNpemUpIHtcbiAgICBOZXdLbGFzcy5wb29sU2l6ZSA9IERFRkFVTFRfUE9P
TF9TSVpFO1xuICB9XG4gIE5ld0tsYXNzLnJlbGVhc2UgPSBzdGFuZGFyZFJlbGVhc2VyO1xuICBy
ZXR1cm4gTmV3S2xhc3M7XG59O1xuXG52YXIgUG9vbGVkQ2xhc3MgPSB7XG4gIGFkZFBvb2xpbmdU
bzogYWRkUG9vbGluZ1RvLFxuICBvbmVBcmd1bWVudFBvb2xlcjogb25lQXJndW1lbnRQb29sZXIs
XG4gIHR3b0FyZ3VtZW50UG9vbGVyOiB0d29Bcmd1bWVudFBvb2xlcixcbiAgdGhyZWVBcmd1bWVu
dFBvb2xlcjogdGhyZWVBcmd1bWVudFBvb2xlcixcbiAgZm91ckFyZ3VtZW50UG9vbGVyOiBmb3Vy
QXJndW1lbnRQb29sZXJcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUG9vbGVkQ2xhc3M7XG5cbi8q
KiovIH0pLFxuLyogMTA3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBDb3B5cmlnaHQg
MjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAq
XG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGlj
ZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkg
b2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJp
Z2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3Rv
cnkuXG4gKlxuICovXG5cblxuXG52YXIgX3Byb2RJbnZhcmlhbnQgPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKDE4KTtcblxudmFyIFJlYWN0Q3VycmVudE93bmVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygx
MCk7XG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NSk7XG5c
bnZhciBnZXRJdGVyYXRvckZuID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDgpO1xudmFyIGludmFy
aWFudCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgS2V5RXNjYXBlVXRpbHMgPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKDEwOSk7XG52YXIgd2FybmluZyA9IF9fd2VicGFja19yZXF1aXJlX18o
MSk7XG5cbnZhciBTRVBBUkFUT1IgPSAnLic7XG52YXIgU1VCU0VQQVJBVE9SID0gJzonO1xuXG4v
KipcbiAqIFRoaXMgaXMgaW5saW5lZCBmcm9tIFJlYWN0RWxlbWVudCBzaW5jZSB0aGlzIGZpbGUg
aXMgc2hhcmVkIGJldHdlZW5cbiAqIGlzb21vcnBoaWMgYW5kIHJlbmRlcmVycy4gV2UgY291bGQg
ZXh0cmFjdCB0aGlzIHRvIGFcbiAqXG4gKi9cblxuLyoqXG4gKiBUT0RPOiBUZXN0IHRoYXQgYSBz
aW5nbGUgY2hpbGQgYW5kIGFuIGFycmF5IHdpdGggb25lIGl0ZW0gaGF2ZSB0aGUgc2FtZSBrZXlc
biAqIHBhdHRlcm4uXG4gKi9cblxudmFyIGRpZFdhcm5BYm91dE1hcHMgPSBmYWxzZTtcblxuLyoq
XG4gKiBHZW5lcmF0ZSBhIGtleSBzdHJpbmcgdGhhdCBpZGVudGlmaWVzIGEgY29tcG9uZW50IHdp
dGhpbiBhIHNldC5cbiAqXG4gKiBAcGFyYW0geyp9IGNvbXBvbmVudCBBIGNvbXBvbmVudCB0aGF0
IGNvdWxkIGNvbnRhaW4gYSBtYW51YWwga2V5LlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IElu
ZGV4IHRoYXQgaXMgdXNlZCBpZiBhIG1hbnVhbCBrZXkgaXMgbm90IHByb3ZpZGVkLlxuICogQHJl
dHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRDb21wb25lbnRLZXkoY29tcG9uZW50LCBp
bmRleCkge1xuICAvLyBEbyBzb21lIHR5cGVjaGVja2luZyBoZXJlIHNpbmNlIHdlIGNhbGwgdGhp
cyBibGluZGx5LiBXZSB3YW50IHRvIGVuc3VyZVxuICAvLyB0aGF0IHdlIGRvbid0IGJsb2NrIHBv
dGVudGlhbCBmdXR1cmUgRVMgQVBJcy5cbiAgaWYgKGNvbXBvbmVudCAmJiB0eXBlb2YgY29tcG9u
ZW50ID09PSAnb2JqZWN0JyAmJiBjb21wb25lbnQua2V5ICE9IG51bGwpIHtcbiAgICAvLyBFeHBs
aWNpdCBrZXlcbiAgICByZXR1cm4gS2V5RXNjYXBlVXRpbHMuZXNjYXBlKGNvbXBvbmVudC5rZXkp
O1xuICB9XG4gIC8vIEltcGxpY2l0IGtleSBkZXRlcm1pbmVkIGJ5IHRoZSBpbmRleCBpbiB0aGUg
c2V0XG4gIHJldHVybiBpbmRleC50b1N0cmluZygzNik7XG59XG5cbi8qKlxuICogQHBhcmFtIHs/
Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcGFyYW0geyFzdHJpbmd9
IG5hbWVTb0ZhciBOYW1lIG9mIHRoZSBrZXkgcGF0aCBzbyBmYXIuXG4gKiBAcGFyYW0geyFmdW5j
dGlvbn0gY2FsbGJhY2sgQ2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZWFjaCBjaGlsZCBmb3VuZC5c
biAqIEBwYXJhbSB7Pyp9IHRyYXZlcnNlQ29udGV4dCBVc2VkIHRvIHBhc3MgaW5mb3JtYXRpb24g
dGhyb3VnaG91dCB0aGUgdHJhdmVyc2FsXG4gKiBwcm9jZXNzLlxuICogQHJldHVybiB7IW51bWJl
cn0gVGhlIG51bWJlciBvZiBjaGlsZHJlbiBpbiB0aGlzIHN1YnRyZWUuXG4gKi9cbmZ1bmN0aW9u
IHRyYXZlcnNlQWxsQ2hpbGRyZW5JbXBsKGNoaWxkcmVuLCBuYW1lU29GYXIsIGNhbGxiYWNrLCB0
cmF2ZXJzZUNvbnRleHQpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgY2hpbGRyZW47XG5cbiAgaWYg
KHR5cGUgPT09ICd1bmRlZmluZWQnIHx8IHR5cGUgPT09ICdib29sZWFuJykge1xuICAgIC8vIEFs
bCBvZiB0aGUgYWJvdmUgYXJlIHBlcmNlaXZlZCBhcyBudWxsLlxuICAgIGNoaWxkcmVuID0gbnVs
bDtcbiAgfVxuXG4gIGlmIChjaGlsZHJlbiA9PT0gbnVsbCB8fCB0eXBlID09PSAnc3RyaW5nJyB8
fCB0eXBlID09PSAnbnVtYmVyJyB8fFxuICAvLyBUaGUgZm9sbG93aW5nIGlzIGlubGluZWQgZnJv
bSBSZWFjdEVsZW1lbnQuIFRoaXMgbWVhbnMgd2UgY2FuIG9wdGltaXplXG4gIC8vIHNvbWUgY2hl
Y2tzLiBSZWFjdCBGaWJlciBhbHNvIGlubGluZXMgdGhpcyBsb2dpYyBmb3Igc2ltaWxhciBwdXJw
b3Nlcy5cbiAgdHlwZSA9PT0gJ29iamVjdCcgJiYgY2hpbGRyZW4uJCR0eXBlb2YgPT09IFJFQUNU
X0VMRU1FTlRfVFlQRSkge1xuICAgIGNhbGxiYWNrKHRyYXZlcnNlQ29udGV4dCwgY2hpbGRyZW4s
XG4gICAgLy8gSWYgaXQncyB0aGUgb25seSBjaGlsZCwgdHJlYXQgdGhlIG5hbWUgYXMgaWYgaXQg
d2FzIHdyYXBwZWQgaW4gYW4gYXJyYXlcbiAgICAvLyBzbyB0aGF0IGl0J3MgY29uc2lzdGVudCBp
ZiB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIGdyb3dzLlxuICAgIG5hbWVTb0ZhciA9PT0gJycgPyBT
RVBBUkFUT1IgKyBnZXRDb21wb25lbnRLZXkoY2hpbGRyZW4sIDApIDogbmFtZVNvRmFyKTtcbiAg
ICByZXR1cm4gMTtcbiAgfVxuXG4gIHZhciBjaGlsZDtcbiAgdmFyIG5leHROYW1lO1xuICB2YXIg
c3VidHJlZUNvdW50ID0gMDsgLy8gQ291bnQgb2YgY2hpbGRyZW4gZm91bmQgaW4gdGhlIGN1cnJl
bnQgc3VidHJlZS5cbiAgdmFyIG5leHROYW1lUHJlZml4ID0gbmFtZVNvRmFyID09PSAnJyA/IFNF
UEFSQVRPUiA6IG5hbWVTb0ZhciArIFNVQlNFUEFSQVRPUjtcblxuICBpZiAoQXJyYXkuaXNBcnJh
eShjaGlsZHJlbikpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsg
aSsrKSB7XG4gICAgICBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgICAgbmV4dE5hbWUgPSBuZXh0
TmFtZVByZWZpeCArIGdldENvbXBvbmVudEtleShjaGlsZCwgaSk7XG4gICAgICBzdWJ0cmVlQ291
bnQgKz0gdHJhdmVyc2VBbGxDaGlsZHJlbkltcGwoY2hpbGQsIG5leHROYW1lLCBjYWxsYmFjaywg
dHJhdmVyc2VDb250ZXh0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4g
PSBnZXRJdGVyYXRvckZuKGNoaWxkcmVuKTtcbiAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgICAg
dmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKGNoaWxkcmVuKTtcbiAgICAgIHZhciBzdGVw
O1xuICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IGNoaWxkcmVuLmVudHJpZXMpIHtcbiAgICAgICAg
dmFyIGlpID0gMDtcbiAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9u
ZSkge1xuICAgICAgICAgIGNoaWxkID0gc3RlcC52YWx1ZTtcbiAgICAgICAgICBuZXh0TmFtZSA9
IG5leHROYW1lUHJlZml4ICsgZ2V0Q29tcG9uZW50S2V5KGNoaWxkLCBpaSsrKTtcbiAgICAgICAg
ICBzdWJ0cmVlQ291bnQgKz0gdHJhdmVyc2VBbGxDaGlsZHJlbkltcGwoY2hpbGQsIG5leHROYW1l
LCBjYWxsYmFjaywgdHJhdmVyc2VDb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtc
biAgICAgICAgaWYgKGZhbHNlKSB7XG4gICAgICAgICAgdmFyIG1hcHNBc0NoaWxkcmVuQWRkZW5k
dW0gPSAnJztcbiAgICAgICAgICBpZiAoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkge1xuICAg
ICAgICAgICAgdmFyIG1hcHNBc0NoaWxkcmVuT3duZXJOYW1lID0gUmVhY3RDdXJyZW50T3duZXIu
Y3VycmVudC5nZXROYW1lKCk7XG4gICAgICAgICAgICBpZiAobWFwc0FzQ2hpbGRyZW5Pd25lck5h
bWUpIHtcbiAgICAgICAgICAgICAgbWFwc0FzQ2hpbGRyZW5BZGRlbmR1bSA9ICcgQ2hlY2sgdGhl
IHJlbmRlciBtZXRob2Qgb2YgYCcgKyBtYXBzQXNDaGlsZHJlbk93bmVyTmFtZSArICdgLic7XG4g
ICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5W
ICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGRpZFdhcm5BYm91dE1hcHMsICdVc2luZyBNYXBz
IGFzIGNoaWxkcmVuIGlzIG5vdCB5ZXQgZnVsbHkgc3VwcG9ydGVkLiBJdCBpcyBhbiAnICsgJ2V4
cGVyaW1lbnRhbCBmZWF0dXJlIHRoYXQgbWlnaHQgYmUgcmVtb3ZlZC4gQ29udmVydCBpdCB0byBh
ICcgKyAnc2VxdWVuY2UgLyBpdGVyYWJsZSBvZiBrZXllZCBSZWFjdEVsZW1lbnRzIGluc3RlYWQu
JXMnLCBtYXBzQXNDaGlsZHJlbkFkZGVuZHVtKSA6IHZvaWQgMDtcbiAgICAgICAgICBkaWRXYXJu
QWJvdXRNYXBzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJdGVyYXRvciB3aWxsIHBy
b3ZpZGUgZW50cnkgW2ssdl0gdHVwbGVzIHJhdGhlciB0aGFuIHZhbHVlcy5cbiAgICAgICAgd2hp
bGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgIHZhciBlbnRy
eSA9IHN0ZXAudmFsdWU7XG4gICAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICBjaGls
ZCA9IGVudHJ5WzFdO1xuICAgICAgICAgICAgbmV4dE5hbWUgPSBuZXh0TmFtZVByZWZpeCArIEtl
eUVzY2FwZVV0aWxzLmVzY2FwZShlbnRyeVswXSkgKyBTVUJTRVBBUkFUT1IgKyBnZXRDb21wb25l
bnRLZXkoY2hpbGQsIDApO1xuICAgICAgICAgICAgc3VidHJlZUNvdW50ICs9IHRyYXZlcnNlQWxs
Q2hpbGRyZW5JbXBsKGNoaWxkLCBuZXh0TmFtZSwgY2FsbGJhY2ssIHRyYXZlcnNlQ29udGV4dCk7
XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09
PSAnb2JqZWN0Jykge1xuICAgICAgdmFyIGFkZGVuZHVtID0gJyc7XG4gICAgICBpZiAoZmFsc2Up
IHtcbiAgICAgICAgYWRkZW5kdW0gPSAnIElmIHlvdSBtZWFudCB0byByZW5kZXIgYSBjb2xsZWN0
aW9uIG9mIGNoaWxkcmVuLCB1c2UgYW4gYXJyYXkgJyArICdpbnN0ZWFkIG9yIHdyYXAgdGhlIG9i
amVjdCB1c2luZyBjcmVhdGVGcmFnbWVudChvYmplY3QpIGZyb20gdGhlICcgKyAnUmVhY3QgYWRk
LW9ucy4nO1xuICAgICAgICBpZiAoY2hpbGRyZW4uX2lzUmVhY3RFbGVtZW50KSB7XG4gICAgICAg
ICAgYWRkZW5kdW0gPSBcIiBJdCBsb29rcyBsaWtlIHlvdSdyZSB1c2luZyBhbiBlbGVtZW50IGNy
ZWF0ZWQgYnkgYSBkaWZmZXJlbnQgXCIgKyAndmVyc2lvbiBvZiBSZWFjdC4gTWFrZSBzdXJlIHRv
IHVzZSBvbmx5IG9uZSBjb3B5IG9mIFJlYWN0Lic7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFJl
YWN0Q3VycmVudE93bmVyLmN1cnJlbnQpIHtcbiAgICAgICAgICB2YXIgbmFtZSA9IFJlYWN0Q3Vy
cmVudE93bmVyLmN1cnJlbnQuZ2V0TmFtZSgpO1xuICAgICAgICAgIGlmIChuYW1lKSB7XG4gICAg
ICAgICAgICBhZGRlbmR1bSArPSAnIENoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgbmFt
ZSArICdgLic7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgY2hp
bGRyZW5TdHJpbmcgPSBTdHJpbmcoY2hpbGRyZW4pO1xuICAgICAgIHRydWUgPyAgZmFsc2UgPyBp
bnZhcmlhbnQoZmFsc2UsICdPYmplY3RzIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZCAo
Zm91bmQ6ICVzKS4lcycsIGNoaWxkcmVuU3RyaW5nID09PSAnW29iamVjdCBPYmplY3RdJyA/ICdv
YmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMoY2hpbGRyZW4pLmpvaW4oJywgJykgKyAn
fScgOiBjaGlsZHJlblN0cmluZywgYWRkZW5kdW0pIDogX3Byb2RJbnZhcmlhbnQoJzMxJywgY2hp
bGRyZW5TdHJpbmcgPT09ICdbb2JqZWN0IE9iamVjdF0nID8gJ29iamVjdCB3aXRoIGtleXMgeycg
KyBPYmplY3Qua2V5cyhjaGlsZHJlbikuam9pbignLCAnKSArICd9JyA6IGNoaWxkcmVuU3RyaW5n
LCBhZGRlbmR1bSkgOiB2b2lkIDA7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN1YnRyZWVDb3Vu
dDtcbn1cblxuLyoqXG4gKiBUcmF2ZXJzZXMgY2hpbGRyZW4gdGhhdCBhcmUgdHlwaWNhbGx5IHNw
ZWNpZmllZCBhcyBgcHJvcHMuY2hpbGRyZW5gLCBidXRcbiAqIG1pZ2h0IGFsc28gYmUgc3BlY2lm
aWVkIHRocm91Z2ggYXR0cmlidXRlczpcbiAqXG4gKiAtIGB0cmF2ZXJzZUFsbENoaWxkcmVuKHRo
aXMucHJvcHMuY2hpbGRyZW4sIC4uLilgXG4gKiAtIGB0cmF2ZXJzZUFsbENoaWxkcmVuKHRoaXMu
cHJvcHMubGVmdFBhbmVsQ2hpbGRyZW4sIC4uLilgXG4gKlxuICogVGhlIGB0cmF2ZXJzZUNvbnRl
eHRgIGlzIGFuIG9wdGlvbmFsIGFyZ3VtZW50IHRoYXQgaXMgcGFzc2VkIHRocm91Z2ggdGhlXG4g
KiBlbnRpcmUgdHJhdmVyc2FsLiBJdCBjYW4gYmUgdXNlZCB0byBzdG9yZSBhY2N1bXVsYXRpb25z
IG9yIGFueXRoaW5nIGVsc2UgdGhhdFxuICogdGhlIGNhbGxiYWNrIG1pZ2h0IGZpbmQgcmVsZXZh
bnQuXG4gKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBvYmplY3QuXG4g
KiBAcGFyYW0geyFmdW5jdGlvbn0gY2FsbGJhY2sgVG8gaW52b2tlIHVwb24gdHJhdmVyc2luZyBl
YWNoIGNoaWxkLlxuICogQHBhcmFtIHs/Kn0gdHJhdmVyc2VDb250ZXh0IENvbnRleHQgZm9yIHRy
YXZlcnNhbC5cbiAqIEByZXR1cm4geyFudW1iZXJ9IFRoZSBudW1iZXIgb2YgY2hpbGRyZW4gaW4g
dGhpcyBzdWJ0cmVlLlxuICovXG5mdW5jdGlvbiB0cmF2ZXJzZUFsbENoaWxkcmVuKGNoaWxkcmVu
LCBjYWxsYmFjaywgdHJhdmVyc2VDb250ZXh0KSB7XG4gIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7
XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICByZXR1cm4gdHJhdmVyc2VBbGxDaGlsZHJlbkltcGwo
Y2hpbGRyZW4sICcnLCBjYWxsYmFjaywgdHJhdmVyc2VDb250ZXh0KTtcbn1cblxubW9kdWxlLmV4
cG9ydHMgPSB0cmF2ZXJzZUFsbENoaWxkcmVuO1xuXG4vKioqLyB9KSxcbi8qIDEwOCAqL1xuLyoq
Ki8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5c
InVzZSBzdHJpY3RcIjtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ss
IEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBp
cyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBM
SUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFu
IGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRo
ZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIFxuICovXG5cblxu
XG4vKiBnbG9iYWwgU3ltYm9sICovXG5cbnZhciBJVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3lt
Ym9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbnZhciBGQVVYX0lURVJBVE9S
X1NZTUJPTCA9ICdAQGl0ZXJhdG9yJzsgLy8gQmVmb3JlIFN5bWJvbCBzcGVjLlxuXG4vKipcbiAq
IFJldHVybnMgdGhlIGl0ZXJhdG9yIG1ldGhvZCBmdW5jdGlvbiBjb250YWluZWQgb24gdGhlIGl0
ZXJhYmxlIG9iamVjdC5cbiAqXG4gKiBCZSBzdXJlIHRvIGludm9rZSB0aGUgZnVuY3Rpb24gd2l0
aCB0aGUgaXRlcmFibGUgYXMgY29udGV4dDpcbiAqXG4gKiAgICAgdmFyIGl0ZXJhdG9yRm4gPSBn
ZXRJdGVyYXRvckZuKG15SXRlcmFibGUpO1xuICogICAgIGlmIChpdGVyYXRvckZuKSB7XG4gKiAg
ICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobXlJdGVyYWJsZSk7XG4gKiAgICAg
ICAuLi5cbiAqICAgICB9XG4gKlxuICogQHBhcmFtIHs/b2JqZWN0fSBtYXliZUl0ZXJhYmxlXG4g
KiBAcmV0dXJuIHs/ZnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJ
dGVyYWJsZSkge1xuICB2YXIgaXRlcmF0b3JGbiA9IG1heWJlSXRlcmFibGUgJiYgKElURVJBVE9S
X1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW0lURVJBVE9SX1NZTUJPTF0gfHwgbWF5YmVJdGVyYWJs
ZVtGQVVYX0lURVJBVE9SX1NZTUJPTF0pO1xuICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdm
dW5jdGlvbicpIHtcbiAgICByZXR1cm4gaXRlcmF0b3JGbjtcbiAgfVxufVxuXG5tb2R1bGUuZXhw
b3J0cyA9IGdldEl0ZXJhdG9yRm47XG5cbi8qKiovIH0pLFxuLyogMTA5ICovXG4vKioqLyAoZnVu
Y3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0
cmljdFwiO1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxu
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vu
c2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0Ug
ZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRp
b25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVO
VFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuXG5cbi8qKlxu
ICogRXNjYXBlIGFuZCB3cmFwIGtleSBzbyBpdCBpcyBzYWZlIHRvIHVzZSBhcyBhIHJlYWN0aWRc
biAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IHRvIGJlIGVzY2FwZWQuXG4gKiBAcmV0dXJuIHtz
dHJpbmd9IHRoZSBlc2NhcGVkIGtleS5cbiAqL1xuXG5mdW5jdGlvbiBlc2NhcGUoa2V5KSB7XG4g
IHZhciBlc2NhcGVSZWdleCA9IC9bPTpdL2c7XG4gIHZhciBlc2NhcGVyTG9va3VwID0ge1xuICAg
ICc9JzogJz0wJyxcbiAgICAnOic6ICc9MidcbiAgfTtcbiAgdmFyIGVzY2FwZWRTdHJpbmcgPSAo
JycgKyBrZXkpLnJlcGxhY2UoZXNjYXBlUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgIHJl
dHVybiBlc2NhcGVyTG9va3VwW21hdGNoXTtcbiAgfSk7XG5cbiAgcmV0dXJuICckJyArIGVzY2Fw
ZWRTdHJpbmc7XG59XG5cbi8qKlxuICogVW5lc2NhcGUgYW5kIHVud3JhcCBrZXkgZm9yIGh1bWFu
LXJlYWRhYmxlIGRpc3BsYXlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IHRvIHVuZXNjYXBl
LlxuICogQHJldHVybiB7c3RyaW5nfSB0aGUgdW5lc2NhcGVkIGtleS5cbiAqL1xuZnVuY3Rpb24g
dW5lc2NhcGUoa2V5KSB7XG4gIHZhciB1bmVzY2FwZVJlZ2V4ID0gLyg9MHw9MikvZztcbiAgdmFy
IHVuZXNjYXBlckxvb2t1cCA9IHtcbiAgICAnPTAnOiAnPScsXG4gICAgJz0yJzogJzonXG4gIH07
XG4gIHZhciBrZXlTdWJzdHJpbmcgPSBrZXlbMF0gPT09ICcuJyAmJiBrZXlbMV0gPT09ICckJyA/
IGtleS5zdWJzdHJpbmcoMikgOiBrZXkuc3Vic3RyaW5nKDEpO1xuXG4gIHJldHVybiAoJycgKyBr
ZXlTdWJzdHJpbmcpLnJlcGxhY2UodW5lc2NhcGVSZWdleCwgZnVuY3Rpb24gKG1hdGNoKSB7XG4g
ICAgcmV0dXJuIHVuZXNjYXBlckxvb2t1cFttYXRjaF07XG4gIH0pO1xufVxuXG52YXIgS2V5RXNj
YXBlVXRpbHMgPSB7XG4gIGVzY2FwZTogZXNjYXBlLFxuICB1bmVzY2FwZTogdW5lc2NhcGVcbn07
XG5cbm1vZHVsZS5leHBvcnRzID0gS2V5RXNjYXBlVXRpbHM7XG5cbi8qKiovIH0pLFxuLyogMTEw
ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9f
KSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBG
YWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJj
ZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0
aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2Ug
dHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91
bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5c
blxuXG52YXIgUmVhY3RFbGVtZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNCk7XG5cbi8qKlxu
ICogQ3JlYXRlIGEgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgSFRNTCB0YWcgZWxlbWVudHMuXG4gKlxu
ICogQHByaXZhdGVcbiAqL1xudmFyIGNyZWF0ZURPTUZhY3RvcnkgPSBSZWFjdEVsZW1lbnQuY3Jl
YXRlRmFjdG9yeTtcbmlmIChmYWxzZSkge1xuICB2YXIgUmVhY3RFbGVtZW50VmFsaWRhdG9yID0g
cmVxdWlyZSgnLi9SZWFjdEVsZW1lbnRWYWxpZGF0b3InKTtcbiAgY3JlYXRlRE9NRmFjdG9yeSA9
IFJlYWN0RWxlbWVudFZhbGlkYXRvci5jcmVhdGVGYWN0b3J5O1xufVxuXG4vKipcbiAqIENyZWF0
ZXMgYSBtYXBwaW5nIGZyb20gc3VwcG9ydGVkIEhUTUwgdGFncyB0byBgUmVhY3RET01Db21wb25l
bnRgIGNsYXNzZXMuXG4gKlxuICogQHB1YmxpY1xuICovXG52YXIgUmVhY3RET01GYWN0b3JpZXMg
PSB7XG4gIGE6IGNyZWF0ZURPTUZhY3RvcnkoJ2EnKSxcbiAgYWJicjogY3JlYXRlRE9NRmFjdG9y
eSgnYWJicicpLFxuICBhZGRyZXNzOiBjcmVhdGVET01GYWN0b3J5KCdhZGRyZXNzJyksXG4gIGFy
ZWE6IGNyZWF0ZURPTUZhY3RvcnkoJ2FyZWEnKSxcbiAgYXJ0aWNsZTogY3JlYXRlRE9NRmFjdG9y
eSgnYXJ0aWNsZScpLFxuICBhc2lkZTogY3JlYXRlRE9NRmFjdG9yeSgnYXNpZGUnKSxcbiAgYXVk
aW86IGNyZWF0ZURPTUZhY3RvcnkoJ2F1ZGlvJyksXG4gIGI6IGNyZWF0ZURPTUZhY3RvcnkoJ2In
KSxcbiAgYmFzZTogY3JlYXRlRE9NRmFjdG9yeSgnYmFzZScpLFxuICBiZGk6IGNyZWF0ZURPTUZh
Y3RvcnkoJ2JkaScpLFxuICBiZG86IGNyZWF0ZURPTUZhY3RvcnkoJ2JkbycpLFxuICBiaWc6IGNy
ZWF0ZURPTUZhY3RvcnkoJ2JpZycpLFxuICBibG9ja3F1b3RlOiBjcmVhdGVET01GYWN0b3J5KCdi
bG9ja3F1b3RlJyksXG4gIGJvZHk6IGNyZWF0ZURPTUZhY3RvcnkoJ2JvZHknKSxcbiAgYnI6IGNy
ZWF0ZURPTUZhY3RvcnkoJ2JyJyksXG4gIGJ1dHRvbjogY3JlYXRlRE9NRmFjdG9yeSgnYnV0dG9u
JyksXG4gIGNhbnZhczogY3JlYXRlRE9NRmFjdG9yeSgnY2FudmFzJyksXG4gIGNhcHRpb246IGNy
ZWF0ZURPTUZhY3RvcnkoJ2NhcHRpb24nKSxcbiAgY2l0ZTogY3JlYXRlRE9NRmFjdG9yeSgnY2l0
ZScpLFxuICBjb2RlOiBjcmVhdGVET01GYWN0b3J5KCdjb2RlJyksXG4gIGNvbDogY3JlYXRlRE9N
RmFjdG9yeSgnY29sJyksXG4gIGNvbGdyb3VwOiBjcmVhdGVET01GYWN0b3J5KCdjb2xncm91cCcp
LFxuICBkYXRhOiBjcmVhdGVET01GYWN0b3J5KCdkYXRhJyksXG4gIGRhdGFsaXN0OiBjcmVhdGVE
T01GYWN0b3J5KCdkYXRhbGlzdCcpLFxuICBkZDogY3JlYXRlRE9NRmFjdG9yeSgnZGQnKSxcbiAg
ZGVsOiBjcmVhdGVET01GYWN0b3J5KCdkZWwnKSxcbiAgZGV0YWlsczogY3JlYXRlRE9NRmFjdG9y
eSgnZGV0YWlscycpLFxuICBkZm46IGNyZWF0ZURPTUZhY3RvcnkoJ2RmbicpLFxuICBkaWFsb2c6
IGNyZWF0ZURPTUZhY3RvcnkoJ2RpYWxvZycpLFxuICBkaXY6IGNyZWF0ZURPTUZhY3RvcnkoJ2Rp
dicpLFxuICBkbDogY3JlYXRlRE9NRmFjdG9yeSgnZGwnKSxcbiAgZHQ6IGNyZWF0ZURPTUZhY3Rv
cnkoJ2R0JyksXG4gIGVtOiBjcmVhdGVET01GYWN0b3J5KCdlbScpLFxuICBlbWJlZDogY3JlYXRl
RE9NRmFjdG9yeSgnZW1iZWQnKSxcbiAgZmllbGRzZXQ6IGNyZWF0ZURPTUZhY3RvcnkoJ2ZpZWxk
c2V0JyksXG4gIGZpZ2NhcHRpb246IGNyZWF0ZURPTUZhY3RvcnkoJ2ZpZ2NhcHRpb24nKSxcbiAg
ZmlndXJlOiBjcmVhdGVET01GYWN0b3J5KCdmaWd1cmUnKSxcbiAgZm9vdGVyOiBjcmVhdGVET01G
YWN0b3J5KCdmb290ZXInKSxcbiAgZm9ybTogY3JlYXRlRE9NRmFjdG9yeSgnZm9ybScpLFxuICBo
MTogY3JlYXRlRE9NRmFjdG9yeSgnaDEnKSxcbiAgaDI6IGNyZWF0ZURPTUZhY3RvcnkoJ2gyJyks
XG4gIGgzOiBjcmVhdGVET01GYWN0b3J5KCdoMycpLFxuICBoNDogY3JlYXRlRE9NRmFjdG9yeSgn
aDQnKSxcbiAgaDU6IGNyZWF0ZURPTUZhY3RvcnkoJ2g1JyksXG4gIGg2OiBjcmVhdGVET01GYWN0
b3J5KCdoNicpLFxuICBoZWFkOiBjcmVhdGVET01GYWN0b3J5KCdoZWFkJyksXG4gIGhlYWRlcjog
Y3JlYXRlRE9NRmFjdG9yeSgnaGVhZGVyJyksXG4gIGhncm91cDogY3JlYXRlRE9NRmFjdG9yeSgn
aGdyb3VwJyksXG4gIGhyOiBjcmVhdGVET01GYWN0b3J5KCdocicpLFxuICBodG1sOiBjcmVhdGVE
T01GYWN0b3J5KCdodG1sJyksXG4gIGk6IGNyZWF0ZURPTUZhY3RvcnkoJ2knKSxcbiAgaWZyYW1l
OiBjcmVhdGVET01GYWN0b3J5KCdpZnJhbWUnKSxcbiAgaW1nOiBjcmVhdGVET01GYWN0b3J5KCdp
bWcnKSxcbiAgaW5wdXQ6IGNyZWF0ZURPTUZhY3RvcnkoJ2lucHV0JyksXG4gIGluczogY3JlYXRl
RE9NRmFjdG9yeSgnaW5zJyksXG4gIGtiZDogY3JlYXRlRE9NRmFjdG9yeSgna2JkJyksXG4gIGtl
eWdlbjogY3JlYXRlRE9NRmFjdG9yeSgna2V5Z2VuJyksXG4gIGxhYmVsOiBjcmVhdGVET01GYWN0
b3J5KCdsYWJlbCcpLFxuICBsZWdlbmQ6IGNyZWF0ZURPTUZhY3RvcnkoJ2xlZ2VuZCcpLFxuICBs
aTogY3JlYXRlRE9NRmFjdG9yeSgnbGknKSxcbiAgbGluazogY3JlYXRlRE9NRmFjdG9yeSgnbGlu
aycpLFxuICBtYWluOiBjcmVhdGVET01GYWN0b3J5KCdtYWluJyksXG4gIG1hcDogY3JlYXRlRE9N
RmFjdG9yeSgnbWFwJyksXG4gIG1hcms6IGNyZWF0ZURPTUZhY3RvcnkoJ21hcmsnKSxcbiAgbWVu
dTogY3JlYXRlRE9NRmFjdG9yeSgnbWVudScpLFxuICBtZW51aXRlbTogY3JlYXRlRE9NRmFjdG9y
eSgnbWVudWl0ZW0nKSxcbiAgbWV0YTogY3JlYXRlRE9NRmFjdG9yeSgnbWV0YScpLFxuICBtZXRl
cjogY3JlYXRlRE9NRmFjdG9yeSgnbWV0ZXInKSxcbiAgbmF2OiBjcmVhdGVET01GYWN0b3J5KCdu
YXYnKSxcbiAgbm9zY3JpcHQ6IGNyZWF0ZURPTUZhY3RvcnkoJ25vc2NyaXB0JyksXG4gIG9iamVj
dDogY3JlYXRlRE9NRmFjdG9yeSgnb2JqZWN0JyksXG4gIG9sOiBjcmVhdGVET01GYWN0b3J5KCdv
bCcpLFxuICBvcHRncm91cDogY3JlYXRlRE9NRmFjdG9yeSgnb3B0Z3JvdXAnKSxcbiAgb3B0aW9u
OiBjcmVhdGVET01GYWN0b3J5KCdvcHRpb24nKSxcbiAgb3V0cHV0OiBjcmVhdGVET01GYWN0b3J5
KCdvdXRwdXQnKSxcbiAgcDogY3JlYXRlRE9NRmFjdG9yeSgncCcpLFxuICBwYXJhbTogY3JlYXRl
RE9NRmFjdG9yeSgncGFyYW0nKSxcbiAgcGljdHVyZTogY3JlYXRlRE9NRmFjdG9yeSgncGljdHVy
ZScpLFxuICBwcmU6IGNyZWF0ZURPTUZhY3RvcnkoJ3ByZScpLFxuICBwcm9ncmVzczogY3JlYXRl
RE9NRmFjdG9yeSgncHJvZ3Jlc3MnKSxcbiAgcTogY3JlYXRlRE9NRmFjdG9yeSgncScpLFxuICBy
cDogY3JlYXRlRE9NRmFjdG9yeSgncnAnKSxcbiAgcnQ6IGNyZWF0ZURPTUZhY3RvcnkoJ3J0Jyks
XG4gIHJ1Ynk6IGNyZWF0ZURPTUZhY3RvcnkoJ3J1YnknKSxcbiAgczogY3JlYXRlRE9NRmFjdG9y
eSgncycpLFxuICBzYW1wOiBjcmVhdGVET01GYWN0b3J5KCdzYW1wJyksXG4gIHNjcmlwdDogY3Jl
YXRlRE9NRmFjdG9yeSgnc2NyaXB0JyksXG4gIHNlY3Rpb246IGNyZWF0ZURPTUZhY3RvcnkoJ3Nl
Y3Rpb24nKSxcbiAgc2VsZWN0OiBjcmVhdGVET01GYWN0b3J5KCdzZWxlY3QnKSxcbiAgc21hbGw6
IGNyZWF0ZURPTUZhY3RvcnkoJ3NtYWxsJyksXG4gIHNvdXJjZTogY3JlYXRlRE9NRmFjdG9yeSgn
c291cmNlJyksXG4gIHNwYW46IGNyZWF0ZURPTUZhY3RvcnkoJ3NwYW4nKSxcbiAgc3Ryb25nOiBj
cmVhdGVET01GYWN0b3J5KCdzdHJvbmcnKSxcbiAgc3R5bGU6IGNyZWF0ZURPTUZhY3RvcnkoJ3N0
eWxlJyksXG4gIHN1YjogY3JlYXRlRE9NRmFjdG9yeSgnc3ViJyksXG4gIHN1bW1hcnk6IGNyZWF0
ZURPTUZhY3RvcnkoJ3N1bW1hcnknKSxcbiAgc3VwOiBjcmVhdGVET01GYWN0b3J5KCdzdXAnKSxc
biAgdGFibGU6IGNyZWF0ZURPTUZhY3RvcnkoJ3RhYmxlJyksXG4gIHRib2R5OiBjcmVhdGVET01G
YWN0b3J5KCd0Ym9keScpLFxuICB0ZDogY3JlYXRlRE9NRmFjdG9yeSgndGQnKSxcbiAgdGV4dGFy
ZWE6IGNyZWF0ZURPTUZhY3RvcnkoJ3RleHRhcmVhJyksXG4gIHRmb290OiBjcmVhdGVET01GYWN0
b3J5KCd0Zm9vdCcpLFxuICB0aDogY3JlYXRlRE9NRmFjdG9yeSgndGgnKSxcbiAgdGhlYWQ6IGNy
ZWF0ZURPTUZhY3RvcnkoJ3RoZWFkJyksXG4gIHRpbWU6IGNyZWF0ZURPTUZhY3RvcnkoJ3RpbWUn
KSxcbiAgdGl0bGU6IGNyZWF0ZURPTUZhY3RvcnkoJ3RpdGxlJyksXG4gIHRyOiBjcmVhdGVET01G
YWN0b3J5KCd0cicpLFxuICB0cmFjazogY3JlYXRlRE9NRmFjdG9yeSgndHJhY2snKSxcbiAgdTog
Y3JlYXRlRE9NRmFjdG9yeSgndScpLFxuICB1bDogY3JlYXRlRE9NRmFjdG9yeSgndWwnKSxcbiAg
J3Zhcic6IGNyZWF0ZURPTUZhY3RvcnkoJ3ZhcicpLFxuICB2aWRlbzogY3JlYXRlRE9NRmFjdG9y
eSgndmlkZW8nKSxcbiAgd2JyOiBjcmVhdGVET01GYWN0b3J5KCd3YnInKSxcblxuICAvLyBTVkdc
biAgY2lyY2xlOiBjcmVhdGVET01GYWN0b3J5KCdjaXJjbGUnKSxcbiAgY2xpcFBhdGg6IGNyZWF0
ZURPTUZhY3RvcnkoJ2NsaXBQYXRoJyksXG4gIGRlZnM6IGNyZWF0ZURPTUZhY3RvcnkoJ2RlZnMn
KSxcbiAgZWxsaXBzZTogY3JlYXRlRE9NRmFjdG9yeSgnZWxsaXBzZScpLFxuICBnOiBjcmVhdGVE
T01GYWN0b3J5KCdnJyksXG4gIGltYWdlOiBjcmVhdGVET01GYWN0b3J5KCdpbWFnZScpLFxuICBs
aW5lOiBjcmVhdGVET01GYWN0b3J5KCdsaW5lJyksXG4gIGxpbmVhckdyYWRpZW50OiBjcmVhdGVE
T01GYWN0b3J5KCdsaW5lYXJHcmFkaWVudCcpLFxuICBtYXNrOiBjcmVhdGVET01GYWN0b3J5KCdt
YXNrJyksXG4gIHBhdGg6IGNyZWF0ZURPTUZhY3RvcnkoJ3BhdGgnKSxcbiAgcGF0dGVybjogY3Jl
YXRlRE9NRmFjdG9yeSgncGF0dGVybicpLFxuICBwb2x5Z29uOiBjcmVhdGVET01GYWN0b3J5KCdw
b2x5Z29uJyksXG4gIHBvbHlsaW5lOiBjcmVhdGVET01GYWN0b3J5KCdwb2x5bGluZScpLFxuICBy
YWRpYWxHcmFkaWVudDogY3JlYXRlRE9NRmFjdG9yeSgncmFkaWFsR3JhZGllbnQnKSxcbiAgcmVj
dDogY3JlYXRlRE9NRmFjdG9yeSgncmVjdCcpLFxuICBzdG9wOiBjcmVhdGVET01GYWN0b3J5KCdz
dG9wJyksXG4gIHN2ZzogY3JlYXRlRE9NRmFjdG9yeSgnc3ZnJyksXG4gIHRleHQ6IGNyZWF0ZURP
TUZhY3RvcnkoJ3RleHQnKSxcbiAgdHNwYW46IGNyZWF0ZURPTUZhY3RvcnkoJ3RzcGFuJylcbn07
XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RET01GYWN0b3JpZXM7XG5cbi8qKiovIH0pLFxuLyog
MTExICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWly
ZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50
LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNv
dXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBp
biB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3Vy
Y2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUg
Zm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICov
XG5cblxuXG52YXIgX3JlcXVpcmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KSxcbiAgICBpc1Zh
bGlkRWxlbWVudCA9IF9yZXF1aXJlLmlzVmFsaWRFbGVtZW50O1xuXG52YXIgZmFjdG9yeSA9IF9f
d2VicGFja19yZXF1aXJlX18oNTYpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoaXNWYWxp
ZEVsZW1lbnQpO1xuXG4vKioqLyB9KSxcbi8qIDExMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVs
ZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8q
KlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0
aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhl
IHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRc
biAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4g
dGhlIHNhbWUgZGlyZWN0b3J5LlxuICovXG5cblxuXG52YXIgZW1wdHlGdW5jdGlvbiA9IF9fd2Vi
cGFja19yZXF1aXJlX18oNik7XG52YXIgaW52YXJpYW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygw
KTtcbnZhciB3YXJuaW5nID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcblxudmFyIFJlYWN0UHJv
cFR5cGVzU2VjcmV0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Nyk7XG52YXIgY2hlY2tQcm9wVHlw
ZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExMyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rp
b24oaXNWYWxpZEVsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpIHtcbiAgLyogZ2xvYmFsIFN5
bWJvbCAqL1xuICB2YXIgSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0
aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XG4gIHZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdA
QGl0ZXJhdG9yJzsgLy8gQmVmb3JlIFN5bWJvbCBzcGVjLlxuXG4gIC8qKlxuICAgKiBSZXR1cm5z
IHRoZSBpdGVyYXRvciBtZXRob2QgZnVuY3Rpb24gY29udGFpbmVkIG9uIHRoZSBpdGVyYWJsZSBv
YmplY3QuXG4gICAqXG4gICAqIEJlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoIHRo
ZSBpdGVyYWJsZSBhcyBjb250ZXh0OlxuICAgKlxuICAgKiAgICAgdmFyIGl0ZXJhdG9yRm4gPSBn
ZXRJdGVyYXRvckZuKG15SXRlcmFibGUpO1xuICAgKiAgICAgaWYgKGl0ZXJhdG9yRm4pIHtcbiAg
ICogICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG15SXRlcmFibGUpO1xuICAg
KiAgICAgICAuLi5cbiAgICogICAgIH1cbiAgICpcbiAgICogQHBhcmFtIHs/b2JqZWN0fSBtYXli
ZUl0ZXJhYmxlXG4gICAqIEByZXR1cm4gez9mdW5jdGlvbn1cbiAgICovXG4gIGZ1bmN0aW9uIGdl
dEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICAgIHZhciBpdGVyYXRvckZuID0gbWF5YmVJ
dGVyYWJsZSAmJiAoSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbSVRFUkFUT1JfU1lN
Qk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXSk7XG4gICAgaWYgKHR5
cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gaXRlcmF0b3JG
bjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29sbGVjdGlvbiBvZiBtZXRob2RzIHRoYXQg
YWxsb3cgZGVjbGFyYXRpb24gYW5kIHZhbGlkYXRpb24gb2YgcHJvcHMgdGhhdCBhcmVcbiAgICog
c3VwcGxpZWQgdG8gUmVhY3QgY29tcG9uZW50cy4gRXhhbXBsZSB1c2FnZTpcbiAgICpcbiAgICog
ICB2YXIgUHJvcHMgPSByZXF1aXJlKCdSZWFjdFByb3BUeXBlcycpO1xuICAgKiAgIHZhciBNeUFy
dGljbGUgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAqICAgICBwcm9wVHlwZXM6IHtcbiAgICog
ICAgICAgLy8gQW4gb3B0aW9uYWwgc3RyaW5nIHByb3AgbmFtZWQgXCJkZXNjcmlwdGlvblwiLlxu
ICAgKiAgICAgICBkZXNjcmlwdGlvbjogUHJvcHMuc3RyaW5nLFxuICAgKlxuICAgKiAgICAgICAv
LyBBIHJlcXVpcmVkIGVudW0gcHJvcCBuYW1lZCBcImNhdGVnb3J5XCIuXG4gICAqICAgICAgIGNh
dGVnb3J5OiBQcm9wcy5vbmVPZihbJ05ld3MnLCdQaG90b3MnXSkuaXNSZXF1aXJlZCxcbiAgICpc
biAgICogICAgICAgLy8gQSBwcm9wIG5hbWVkIFwiZGlhbG9nXCIgdGhhdCByZXF1aXJlcyBhbiBp
bnN0YW5jZSBvZiBEaWFsb2cuXG4gICAqICAgICAgIGRpYWxvZzogUHJvcHMuaW5zdGFuY2VPZihE
aWFsb2cpLmlzUmVxdWlyZWRcbiAgICogICAgIH0sXG4gICAqICAgICByZW5kZXI6IGZ1bmN0aW9u
KCkgeyAuLi4gfVxuICAgKiAgIH0pO1xuICAgKlxuICAgKiBBIG1vcmUgZm9ybWFsIHNwZWNpZmlj
YXRpb24gb2YgaG93IHRoZXNlIG1ldGhvZHMgYXJlIHVzZWQ6XG4gICAqXG4gICAqICAgdHlwZSA6
PSBhcnJheXxib29sfGZ1bmN8b2JqZWN0fG51bWJlcnxzdHJpbmd8b25lT2YoWy4uLl0pfGluc3Rh
bmNlT2YoLi4uKVxuICAgKiAgIGRlY2wgOj0gUmVhY3RQcm9wVHlwZXMue3R5cGV9KC5pc1JlcXVp
cmVkKT9cbiAgICpcbiAgICogRWFjaCBhbmQgZXZlcnkgZGVjbGFyYXRpb24gcHJvZHVjZXMgYSBm
dW5jdGlvbiB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZS4gVGhpc1xuICAgKiBhbGxvd3MgdGhlIGNy
ZWF0aW9uIG9mIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9ucy4gRm9yIGV4YW1wbGU6XG4gICAq
XG4gICAqICB2YXIgTXlMaW5rID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICAgKiAgICBwcm9wVHlw
ZXM6IHtcbiAgICogICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgb3IgVVJJIHByb3AgbmFtZWQg
XCJocmVmXCIuXG4gICAqICAgICAgaHJlZjogZnVuY3Rpb24ocHJvcHMsIHByb3BOYW1lLCBjb21w
b25lbnROYW1lKSB7XG4gICAqICAgICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVd
O1xuICAgKiAgICAgICAgaWYgKHByb3BWYWx1ZSAhPSBudWxsICYmIHR5cGVvZiBwcm9wVmFsdWUg
IT09ICdzdHJpbmcnICYmXG4gICAqICAgICAgICAgICAgIShwcm9wVmFsdWUgaW5zdGFuY2VvZiBV
UkkpKSB7XG4gICAqICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAqICAgICAgICAgICAg
J0V4cGVjdGVkIGEgc3RyaW5nIG9yIGFuIFVSSSBmb3IgJyArIHByb3BOYW1lICsgJyBpbiAnICtc
biAgICogICAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAqICAgICAgICAgICk7XG4gICAqICAg
ICAgICB9XG4gICAqICAgICAgfVxuICAgKiAgICB9LFxuICAgKiAgICByZW5kZXI6IGZ1bmN0aW9u
KCkgey4uLn1cbiAgICogIH0pO1xuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG5cbiAgdmFy
IEFOT05ZTU9VUyA9ICc8PGFub255bW91cz4+JztcblxuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtl
ZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9y
eVdpdGhUaHJvd2luZ1NoaW1zLmpzYC5cbiAgdmFyIFJlYWN0UHJvcFR5cGVzID0ge1xuICAgIGFy
cmF5OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYXJyYXknKSxcbiAgICBib29sOiBjcmVh
dGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYm9vbGVhbicpLFxuICAgIGZ1bmM6IGNyZWF0ZVByaW1p
dGl2ZVR5cGVDaGVja2VyKCdmdW5jdGlvbicpLFxuICAgIG51bWJlcjogY3JlYXRlUHJpbWl0aXZl
VHlwZUNoZWNrZXIoJ251bWJlcicpLFxuICAgIG9iamVjdDogY3JlYXRlUHJpbWl0aXZlVHlwZUNo
ZWNrZXIoJ29iamVjdCcpLFxuICAgIHN0cmluZzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIo
J3N0cmluZycpLFxuICAgIHN5bWJvbDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N5bWJv
bCcpLFxuXG4gICAgYW55OiBjcmVhdGVBbnlUeXBlQ2hlY2tlcigpLFxuICAgIGFycmF5T2Y6IGNy
ZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcixcbiAgICBlbGVtZW50OiBjcmVhdGVFbGVtZW50VHlwZUNo
ZWNrZXIoKSxcbiAgICBpbnN0YW5jZU9mOiBjcmVhdGVJbnN0YW5jZVR5cGVDaGVja2VyLFxuICAg
IG5vZGU6IGNyZWF0ZU5vZGVDaGVja2VyKCksXG4gICAgb2JqZWN0T2Y6IGNyZWF0ZU9iamVjdE9m
VHlwZUNoZWNrZXIsXG4gICAgb25lT2Y6IGNyZWF0ZUVudW1UeXBlQ2hlY2tlcixcbiAgICBvbmVP
ZlR5cGU6IGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIsXG4gICAgc2hhcGU6IGNyZWF0ZVNoYXBlVHlw
ZUNoZWNrZXJcbiAgfTtcblxuICAvKipcbiAgICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwg
dG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxuICAgKiBodHRwczov
L2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5j
ZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvaXNcbiAgICovXG4gIC8qZXNsaW50LWRpc2FibGUgbm8t
c2VsZi1jb21wYXJlKi9cbiAgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAgIC8vIFNhbWVWYWx1ZSBh
bGdvcml0aG1cbiAgICBpZiAoeCA9PT0geSkge1xuICAgICAgLy8gU3RlcHMgMS01LCA3LTEwXG4g
ICAgICAvLyBTdGVwcyA2LmItNi5lOiArMCAhPSAtMFxuICAgICAgcmV0dXJuIHggIT09IDAgfHwg
MSAvIHggPT09IDEgLyB5O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdGVwIDYuYTogTmFOID09
IE5hTlxuICAgICAgcmV0dXJuIHggIT09IHggJiYgeSAhPT0geTtcbiAgICB9XG4gIH1cbiAgLypl
c2xpbnQtZW5hYmxlIG5vLXNlbGYtY29tcGFyZSovXG5cbiAgLyoqXG4gICAqIFdlIHVzZSBhbiBF
cnJvci1saWtlIG9iamVjdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhcyBwZW9wbGUgbWF5
IGNhbGxcbiAgICogUHJvcFR5cGVzIGRpcmVjdGx5IGFuZCBpbnNwZWN0IHRoZWlyIG91dHB1dC4g
SG93ZXZlciwgd2UgZG9uJ3QgdXNlIHJlYWxcbiAgICogRXJyb3JzIGFueW1vcmUuIFdlIGRvbid0
IGluc3BlY3QgdGhlaXIgc3RhY2sgYW55d2F5LCBhbmQgY3JlYXRpbmcgdGhlbVxuICAgKiBpcyBw
cm9oaWJpdGl2ZWx5IGV4cGVuc2l2ZSBpZiB0aGV5IGFyZSBjcmVhdGVkIHRvbyBvZnRlbiwgc3Vj
aCBhcyB3aGF0XG4gICAqIGhhcHBlbnMgaW4gb25lT2ZUeXBlKCkgZm9yIGFueSB0eXBlIGJlZm9y
ZSB0aGUgb25lIHRoYXQgbWF0Y2hlZC5cbiAgICovXG4gIGZ1bmN0aW9uIFByb3BUeXBlRXJyb3Io
bWVzc2FnZSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgdGhpcy5zdGFjayA9
ICcnO1xuICB9XG4gIC8vIE1ha2UgYGluc3RhbmNlb2YgRXJyb3JgIHN0aWxsIHdvcmsgZm9yIHJl
dHVybmVkIGVycm9ycy5cbiAgUHJvcFR5cGVFcnJvci5wcm90b3R5cGUgPSBFcnJvci5wcm90b3R5
cGU7XG5cbiAgZnVuY3Rpb24gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpIHtc
biAgICBpZiAoZmFsc2UpIHtcbiAgICAgIHZhciBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZSA9IHt9
O1xuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50ID0gMDtcbiAgICB9XG4gICAg
ZnVuY3Rpb24gY2hlY2tUeXBlKGlzUmVxdWlyZWQsIHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50
TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgICBjb21wb25lbnRO
YW1lID0gY29tcG9uZW50TmFtZSB8fCBBTk9OWU1PVVM7XG4gICAgICBwcm9wRnVsbE5hbWUgPSBw
cm9wRnVsbE5hbWUgfHwgcHJvcE5hbWU7XG5cbiAgICAgIGlmIChzZWNyZXQgIT09IFJlYWN0UHJv
cFR5cGVzU2VjcmV0KSB7XG4gICAgICAgIGlmICh0aHJvd09uRGlyZWN0QWNjZXNzKSB7XG4gICAg
ICAgICAgLy8gTmV3IGJlaGF2aW9yIG9ubHkgZm9yIHVzZXJzIG9mIGBwcm9wLXR5cGVzYCBwYWNr
YWdlXG4gICAgICAgICAgaW52YXJpYW50KFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAg
ICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVk
IGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAgICAgICAnVXNlIGBQcm9w
VHlwZXMuY2hlY2tQcm9wVHlwZXMoKWAgdG8gY2FsbCB0aGVtLiAnICtcbiAgICAgICAgICAgICdS
ZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzJ1xuICAgICAgICAg
ICk7XG4gICAgICAgIH0gZWxzZSBpZiAoZmFsc2UpIHtcbiAgICAgICAgICAvLyBPbGQgYmVoYXZp
b3IgZm9yIHBlb3BsZSB1c2luZyBSZWFjdC5Qcm9wVHlwZXNcbiAgICAgICAgICB2YXIgY2FjaGVL
ZXkgPSBjb21wb25lbnROYW1lICsgJzonICsgcHJvcE5hbWU7XG4gICAgICAgICAgaWYgKFxuICAg
ICAgICAgICAgIW1hbnVhbFByb3BUeXBlQ2FsbENhY2hlW2NhY2hlS2V5XSAmJlxuICAgICAgICAg
ICAgLy8gQXZvaWQgc3BhbW1pbmcgdGhlIGNvbnNvbGUgYmVjYXVzZSB0aGV5IGFyZSBvZnRlbiBu
b3QgYWN0aW9uYWJsZSBleGNlcHQgZm9yIGxpYiBhdXRob3JzXG4gICAgICAgICAgICBtYW51YWxQ
cm9wVHlwZVdhcm5pbmdDb3VudCA8IDNcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHdhcm5p
bmcoXG4gICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAnWW91IGFyZSBtYW51YWxs
eSBjYWxsaW5nIGEgUmVhY3QuUHJvcFR5cGVzIHZhbGlkYXRpb24gJyArXG4gICAgICAgICAgICAg
ICdmdW5jdGlvbiBmb3IgdGhlIGAlc2AgcHJvcCBvbiBgJXNgLiBUaGlzIGlzIGRlcHJlY2F0ZWQg
JyArXG4gICAgICAgICAgICAgICdhbmQgd2lsbCB0aHJvdyBpbiB0aGUgc3RhbmRhbG9uZSBgcHJv
cC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAgICAgICAgICdZb3UgbWF5IGJlIHNlZWluZyB0
aGlzIHdhcm5pbmcgZHVlIHRvIGEgdGhpcmQtcGFydHkgUHJvcFR5cGVzICcgK1xuICAgICAgICAg
ICAgICAnbGlicmFyeS4gU2VlIGh0dHBzOi8vZmIubWUvcmVhY3Qtd2FybmluZy1kb250LWNhbGwt
cHJvcHR5cGVzICcgKyAnZm9yIGRldGFpbHMuJyxcbiAgICAgICAgICAgICAgcHJvcEZ1bGxOYW1l
LFxuICAgICAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAgICAgICAgICApO1xuICAgICAgICAg
ICAgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldID0gdHJ1ZTtcbiAgICAgICAgICAg
IG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50Kys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4g
ICAgICB9XG4gICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09IG51bGwpIHtcbiAgICAgICAgaWYg
KGlzUmVxdWlyZWQpIHtcbiAgICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSBudWxsKSB7
XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsgbG9jYXRpb24g
KyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgaXMgbWFya2VkIGFzIHJlcXVpcmVkICcgKyAoJ2lu
IGAnICsgY29tcG9uZW50TmFtZSArICdgLCBidXQgaXRzIHZhbHVlIGlzIGBudWxsYC4nKSk7XG4g
ICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBs
b2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQg
aW4gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYHVuZGVm
aW5lZGAuJykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSBlbHNl
IHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFt
ZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNo
YWluZWRDaGVja1R5cGUgPSBjaGVja1R5cGUuYmluZChudWxsLCBmYWxzZSk7XG4gICAgY2hhaW5l
ZENoZWNrVHlwZS5pc1JlcXVpcmVkID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgdHJ1ZSk7XG5cbiAg
ICByZXR1cm4gY2hhaW5lZENoZWNrVHlwZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVByaW1p
dGl2ZVR5cGVDaGVja2VyKGV4cGVjdGVkVHlwZSkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHBy
b3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2Vj
cmV0KSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFy
IHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAh
PT0gZXhwZWN0ZWRUeXBlKSB7XG4gICAgICAgIC8vIGBwcm9wVmFsdWVgIGJlaW5nIGluc3RhbmNl
IG9mLCBzYXksIGRhdGUvcmVnZXhwLCBwYXNzIHRoZSAnb2JqZWN0J1xuICAgICAgICAvLyBjaGVj
aywgYnV0IHdlIGNhbiBvZmZlciBhIG1vcmUgcHJlY2lzZSBlcnJvciBtZXNzYWdlIGhlcmUgcmF0
aGVyIHRoYW5cbiAgICAgICAgLy8gJ29mIHR5cGUgYG9iamVjdGAnLlxuICAgICAgICB2YXIgcHJl
Y2lzZVR5cGUgPSBnZXRQcmVjaXNlVHlwZShwcm9wVmFsdWUpO1xuXG4gICAgICAgIHJldHVybiBu
ZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxO
YW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByZWNpc2VUeXBlICsgJ2Agc3VwcGxpZWQgdG8g
YCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdgJyArIGV4cGVjdGVkVHlw
ZSArICdgLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1
cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rp
b24gY3JlYXRlQW55VHlwZUNoZWNrZXIoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5
cGVDaGVja2VyKGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNOdWxsKTtcbiAgfVxuXG4gIGZ1bmN0
aW9uIGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICAgIGZ1bmN0aW9u
IHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BG
dWxsTmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykg
e1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1
bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZh
bGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBhcnJheU9mLicpO1xuICAgICAgfVxuICAgICAg
dmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJh
eShwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BW
YWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9j
YXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BU
eXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFu
IGFycmF5LicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcFZhbHVl
Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1
ZSwgaSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICdbJyArIGkgKyAn
XScsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2Yg
RXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAg
ICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNo
ZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudFR5cGVDaGVj
a2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50
TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHBy
b3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xu
ICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICBy
ZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHBy
b3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVk
IHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1l
bnQuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBj
cmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBj
cmVhdGVJbnN0YW5jZVR5cGVDaGVja2VyKGV4cGVjdGVkQ2xhc3MpIHtcbiAgICBmdW5jdGlvbiB2
YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVs
bE5hbWUpIHtcbiAgICAgIGlmICghKHByb3BzW3Byb3BOYW1lXSBpbnN0YW5jZW9mIGV4cGVjdGVk
Q2xhc3MpKSB7XG4gICAgICAgIHZhciBleHBlY3RlZENsYXNzTmFtZSA9IGV4cGVjdGVkQ2xhc3Mu
bmFtZSB8fCBBTk9OWU1PVVM7XG4gICAgICAgIHZhciBhY3R1YWxDbGFzc05hbWUgPSBnZXRDbGFz
c05hbWUocHJvcHNbcHJvcE5hbWVdKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9y
KCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBl
ICcgKyAoJ2AnICsgYWN0dWFsQ2xhc3NOYW1lICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25l
bnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdpbnN0YW5jZSBvZiBgJyArIGV4cGVjdGVkQ2xh
c3NOYW1lICsgJ2AuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAg
IHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBm
dW5jdGlvbiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIoZXhwZWN0ZWRWYWx1ZXMpIHtcbiAgICBpZiAo
IUFycmF5LmlzQXJyYXkoZXhwZWN0ZWRWYWx1ZXMpKSB7XG4gICAgICAgZmFsc2UgPyB3YXJuaW5n
KGZhbHNlLCAnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4g
aW5zdGFuY2Ugb2YgYXJyYXkuJykgOiB2b2lkIDA7XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlv
bi50aGF0UmV0dXJuc051bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMs
IHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAg
ICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBleHBlY3RlZFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaXMocHJvcFZh
bHVlLCBleHBlY3RlZFZhbHVlc1tpXSkpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAg
ICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgdmFsdWVzU3RyaW5nID0gSlNPTi5zdHJpbmdpZnko
ZXhwZWN0ZWRWYWx1ZXMpO1xuICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlk
ICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB2YWx1ZSBgJyArIHBy
b3BWYWx1ZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBl
eHBlY3RlZCBvbmUgb2YgJyArIHZhbHVlc1N0cmluZyArICcuJykpO1xuICAgIH1cbiAgICByZXR1
cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rp
b24gY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICAgIGZ1bmN0aW9u
IHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BG
dWxsTmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykg
e1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1
bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZh
bGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBvYmplY3RPZi4nKTtcbiAgICAgIH1cbiAgICAg
IHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBn
ZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykg
e1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9u
ICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSAr
ICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBvYmpl
Y3QuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHByb3BWYWx1ZSkge1xuICAg
ICAgICBpZiAocHJvcFZhbHVlLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICB2YXIg
ZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRp
b24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAg
ICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4g
ZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVs
bDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRl
KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIoYXJyYXlPZlR5cGVD
aGVja2Vycykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhcnJheU9mVHlwZUNoZWNrZXJzKSkg
e1xuICAgICAgIGZhbHNlID8gd2FybmluZyhmYWxzZSwgJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxp
ZWQgdG8gb25lT2ZUeXBlLCBleHBlY3RlZCBhbiBpbnN0YW5jZSBvZiBhcnJheS4nKSA6IHZvaWQg
MDtcbiAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zTnVsbDtcbiAgICB9XG5c
biAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5T2ZUeXBlQ2hlY2tlcnMubGVuZ3RoOyBpKysp
IHtcbiAgICAgIHZhciBjaGVja2VyID0gYXJyYXlPZlR5cGVDaGVja2Vyc1tpXTtcbiAgICAgIGlm
ICh0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB3YXJuaW5nKFxuICAg
ICAgICAgIGZhbHNlLFxuICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWQgdG8gb25l
T2ZUeXBlLiBFeHBlY3RlZCBhbiBhcnJheSBvZiBjaGVjayBmdW5jdGlvbnMsIGJ1dCAnICtcbiAg
ICAgICAgICAncmVjZWl2ZWQgJXMgYXQgaW5kZXggJXMuJyxcbiAgICAgICAgICBnZXRQb3N0Zml4
Rm9yVHlwZVdhcm5pbmcoY2hlY2tlciksXG4gICAgICAgICAgaVxuICAgICAgICApO1xuICAgICAg
ICByZXR1cm4gZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc051bGw7XG4gICAgICB9XG4gICAgfVxu
XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBs
b2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5
T2ZUeXBlQ2hlY2tlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBhcnJh
eU9mVHlwZUNoZWNrZXJzW2ldO1xuICAgICAgICBpZiAoY2hlY2tlcihwcm9wcywgcHJvcE5hbWUs
IGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIFJlYWN0UHJvcFR5cGVzU2Vj
cmV0KSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAg
IH1cblxuICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlv
biArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBzdXBwbGllZCB0byAnICsgKCdgJyArIGNvbXBv
bmVudE5hbWUgKyAnYC4nKSk7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBl
Q2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVOb2RlQ2hlY2tlcigp
IHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUs
IGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICghaXNOb2RlKHByb3BzW3Byb3BO
YW1lXSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBs
b2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBzdXBwbGllZCB0byAnICsgKCdgJyAr
IGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYSBSZWFjdE5vZGUuJykpO1xuICAgICAgfVxu
ICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBl
Q2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTaGFwZVR5cGVDaGVj
a2VyKHNoYXBlVHlwZXMpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUs
IGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9w
VmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlw
ZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAg
ICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyAr
IHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBs
aWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XG4g
ICAgICB9XG4gICAgICBmb3IgKHZhciBrZXkgaW4gc2hhcGVUeXBlcykge1xuICAgICAgICB2YXIg
Y2hlY2tlciA9IHNoYXBlVHlwZXNba2V5XTtcbiAgICAgICAgaWYgKCFjaGVja2VyKSB7XG4gICAg
ICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihw
cm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcu
JyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAg
ICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBu
dWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRh
dGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNOb2RlKHByb3BWYWx1ZSkge1xuICAgIHN3aXRjaCAo
dHlwZW9mIHByb3BWYWx1ZSkge1xuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIGNhc2UgJ3N0
cmluZyc6XG4gICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAg
ICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICByZXR1cm4gIXByb3BWYWx1ZTtcbiAgICAgIGNh
c2UgJ29iamVjdCc6XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAg
ICAgICAgICByZXR1cm4gcHJvcFZhbHVlLmV2ZXJ5KGlzTm9kZSk7XG4gICAgICAgIH1cbiAgICAg
ICAgaWYgKHByb3BWYWx1ZSA9PT0gbnVsbCB8fCBpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7
XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaXRlcmF0
b3JGbiA9IGdldEl0ZXJhdG9yRm4ocHJvcFZhbHVlKTtcbiAgICAgICAgaWYgKGl0ZXJhdG9yRm4p
IHtcbiAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwocHJvcFZhbHVlKTtc
biAgICAgICAgICB2YXIgc3RlcDtcbiAgICAgICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gcHJvcFZh
bHVlLmVudHJpZXMpIHtcbiAgICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0
KCkpLmRvbmUpIHtcbiAgICAgICAgICAgICAgaWYgKCFpc05vZGUoc3RlcC52YWx1ZSkpIHtcbiAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAg
IH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSXRlcmF0b3Igd2lsbCBwcm92
aWRlIGVudHJ5IFtrLHZdIHR1cGxlcyByYXRoZXIgdGhhbiB2YWx1ZXMuXG4gICAgICAgICAgICB3
aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgICAgIHZh
ciBlbnRyeSA9IHN0ZXAudmFsdWU7XG4gICAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAg
ICAgICAgICAgIGlmICghaXNOb2RlKGVudHJ5WzFdKSkge1xuICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAg
ICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmFs
c2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGRlZmF1bHQ6XG4g
ICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpc1N5bWJvbChw
cm9wVHlwZSwgcHJvcFZhbHVlKSB7XG4gICAgLy8gTmF0aXZlIFN5bWJvbC5cbiAgICBpZiAocHJv
cFR5cGUgPT09ICdzeW1ib2wnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAv
LyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddID09PSAnU3ltYm9sJ1xu
ICAgIGlmIChwcm9wVmFsdWVbJ0BAdG9TdHJpbmdUYWcnXSA9PT0gJ1N5bWJvbCcpIHtcbiAgICAg
IHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrIGZvciBub24tc3BlYyBjb21w
bGlhbnQgU3ltYm9scyB3aGljaCBhcmUgcG9seWZpbGxlZC5cbiAgICBpZiAodHlwZW9mIFN5bWJv
bCA9PT0gJ2Z1bmN0aW9uJyAmJiBwcm9wVmFsdWUgaW5zdGFuY2VvZiBTeW1ib2wpIHtcbiAgICAg
IHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIEVx
dWl2YWxlbnQgb2YgYHR5cGVvZmAgYnV0IHdpdGggc3BlY2lhbCBoYW5kbGluZyBmb3IgYXJyYXkg
YW5kIHJlZ2V4cC5cbiAgZnVuY3Rpb24gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKSB7XG4gICAgdmFy
IHByb3BUeXBlID0gdHlwZW9mIHByb3BWYWx1ZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9w
VmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ2FycmF5JztcbiAgICB9XG4gICAgaWYgKHByb3BWYWx1
ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgLy8gT2xkIHdlYmtpdHMgKGF0IGxlYXN0IHVu
dGlsIEFuZHJvaWQgNC4wKSByZXR1cm4gJ2Z1bmN0aW9uJyByYXRoZXIgdGhhblxuICAgICAgLy8g
J29iamVjdCcgZm9yIHR5cGVvZiBhIFJlZ0V4cC4gV2UnbGwgbm9ybWFsaXplIHRoaXMgaGVyZSBz
byB0aGF0IC9ibGEvXG4gICAgICAvLyBwYXNzZXMgUHJvcFR5cGVzLm9iamVjdC5cbiAgICAgIHJl
dHVybiAnb2JqZWN0JztcbiAgICB9XG4gICAgaWYgKGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFs
dWUpKSB7XG4gICAgICByZXR1cm4gJ3N5bWJvbCc7XG4gICAgfVxuICAgIHJldHVybiBwcm9wVHlw
ZTtcbiAgfVxuXG4gIC8vIFRoaXMgaGFuZGxlcyBtb3JlIHR5cGVzIHRoYW4gYGdldFByb3BUeXBl
YC4gT25seSB1c2VkIGZvciBlcnJvciBtZXNzYWdlcy5cbiAgLy8gU2VlIGBjcmVhdGVQcmltaXRp
dmVUeXBlQ2hlY2tlcmAuXG4gIGZ1bmN0aW9uIGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSkge1xu
ICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAndW5kZWZpbmVkJyB8fCBwcm9wVmFsdWUgPT09
IG51bGwpIHtcbiAgICAgIHJldHVybiAnJyArIHByb3BWYWx1ZTtcbiAgICB9XG4gICAgdmFyIHBy
b3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICBpZiAocHJvcFR5cGUgPT09ICdv
YmplY3QnKSB7XG4gICAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAg
ICByZXR1cm4gJ2RhdGUnO1xuICAgICAgfSBlbHNlIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBS
ZWdFeHApIHtcbiAgICAgICAgcmV0dXJuICdyZWdleHAnO1xuICAgICAgfVxuICAgIH1cbiAgICBy
ZXR1cm4gcHJvcFR5cGU7XG4gIH1cblxuICAvLyBSZXR1cm5zIGEgc3RyaW5nIHRoYXQgaXMgcG9z
dGZpeGVkIHRvIGEgd2FybmluZyBhYm91dCBhbiBpbnZhbGlkIHR5cGUuXG4gIC8vIEZvciBleGFt
cGxlLCBcInVuZGVmaW5lZFwiIG9yIFwib2YgdHlwZSBhcnJheVwiXG4gIGZ1bmN0aW9uIGdldFBv
c3RmaXhGb3JUeXBlV2FybmluZyh2YWx1ZSkge1xuICAgIHZhciB0eXBlID0gZ2V0UHJlY2lzZVR5
cGUodmFsdWUpO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnYXJyYXknOlxuICAg
ICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgcmV0dXJuICdhbiAnICsgdHlwZTtcbiAgICAgIGNh
c2UgJ2Jvb2xlYW4nOlxuICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICBjYXNlICdyZWdleHAnOlxu
ICAgICAgICByZXR1cm4gJ2EgJyArIHR5cGU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1
cm4gdHlwZTtcbiAgICB9XG4gIH1cblxuICAvLyBSZXR1cm5zIGNsYXNzIG5hbWUgb2YgdGhlIG9i
amVjdCwgaWYgYW55LlxuICBmdW5jdGlvbiBnZXRDbGFzc05hbWUocHJvcFZhbHVlKSB7XG4gICAg
aWYgKCFwcm9wVmFsdWUuY29uc3RydWN0b3IgfHwgIXByb3BWYWx1ZS5jb25zdHJ1Y3Rvci5uYW1l
KSB7XG4gICAgICByZXR1cm4gQU5PTllNT1VTO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcFZhbHVl
LmNvbnN0cnVjdG9yLm5hbWU7XG4gIH1cblxuICBSZWFjdFByb3BUeXBlcy5jaGVja1Byb3BUeXBl
cyA9IGNoZWNrUHJvcFR5cGVzO1xuICBSZWFjdFByb3BUeXBlcy5Qcm9wVHlwZXMgPSBSZWFjdFBy
b3BUeXBlcztcblxuICByZXR1cm4gUmVhY3RQcm9wVHlwZXM7XG59O1xuXG5cbi8qKiovIH0pLFxu
LyogMTEzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVx
dWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVz
ZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlz
IHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3Vu
ZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBz
b3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4g
YmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKi9c
blxuXG5cbmlmIChmYWxzZSkge1xuICB2YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIv
aW52YXJpYW50Jyk7XG4gIHZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycp
O1xuICB2YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BU
eXBlc1NlY3JldCcpO1xuICB2YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG59XG5cbi8qKlxu
ICogQXNzZXJ0IHRoYXQgdGhlIHZhbHVlcyBtYXRjaCB3aXRoIHRoZSB0eXBlIHNwZWNzLlxuICog
RXJyb3IgbWVzc2FnZXMgYXJlIG1lbW9yaXplZCBhbmQgd2lsbCBvbmx5IGJlIHNob3duIG9uY2Uu
XG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHR5cGVTcGVjcyBNYXAgb2YgbmFtZSB0byBhIFJlYWN0
UHJvcFR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZXMgUnVudGltZSB2YWx1ZXMgdGhhdCBu
ZWVkIHRvIGJlIHR5cGUtY2hlY2tlZFxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIGUuZy4g
XCJwcm9wXCIsIFwiY29udGV4dFwiLCBcImNoaWxkIGNvbnRleHRcIlxuICogQHBhcmFtIHtzdHJp
bmd9IGNvbXBvbmVudE5hbWUgTmFtZSBvZiB0aGUgY29tcG9uZW50IGZvciBlcnJvciBtZXNzYWdl
cy5cbiAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBnZXRTdGFjayBSZXR1cm5zIHRoZSBjb21wb25lbnQg
c3RhY2suXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3Bl
Y3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGdldFN0YWNrKSB7XG4gIGlmIChm
YWxzZSkge1xuICAgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0eXBlU3BlY3MpIHtcbiAgICAg
IGlmICh0eXBlU3BlY3MuaGFzT3duUHJvcGVydHkodHlwZVNwZWNOYW1lKSkge1xuICAgICAgICB2
YXIgZXJyb3I7XG4gICAgICAgIC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4g
Y2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIGZhaWwgdGhlIHJlbmRl
ciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC5cbiAgICAg
ICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRo
cm93LlxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBh
biBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZVxuICAgICAgICAgIC8v
IGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIg
bWVzc2FnZS5cbiAgICAgICAgICBpbnZhcmlhbnQodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05h
bWVdID09PSAnZnVuY3Rpb24nLCAnJXM6ICVzIHR5cGUgYCVzYCBpcyBpbnZhbGlkOyBpdCBtdXN0
IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSAnICsgJ1JlYWN0LlByb3BUeXBlcy4nLCBjb21w
b25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycsIGxvY2F0aW9uLCB0eXBlU3BlY05hbWUpO1xuICAg
ICAgICAgIGVycm9yID0gdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0odmFsdWVzLCB0eXBlU3BlY05h
bWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBudWxsLCBSZWFjdFByb3BUeXBlc1NlY3JldCk7
XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgZXJyb3IgPSBleDtcbiAgICAgICAg
fVxuICAgICAgICB3YXJuaW5nKCFlcnJvciB8fCBlcnJvciBpbnN0YW5jZW9mIEVycm9yLCAnJXM6
IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAlcyBgJXNgIGlzIGludmFsaWQ7IHRoZSB0eXBlIGNoZWNr
ZXIgJyArICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0
dXJuZWQgYSAlcy4gJyArICdZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJndW1l
bnQgdG8gdGhlIHR5cGUgY2hlY2tlciAnICsgJ2NyZWF0b3IgKGFycmF5T2YsIGluc3RhbmNlT2Ys
IG9iamVjdE9mLCBvbmVPZiwgb25lT2ZUeXBlLCBhbmQgJyArICdzaGFwZSBhbGwgcmVxdWlyZSBh
biBhcmd1bWVudCkuJywgY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnLCBsb2NhdGlvbiwg
dHlwZVNwZWNOYW1lLCB0eXBlb2YgZXJyb3IpO1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2Vv
ZiBFcnJvciAmJiAhKGVycm9yLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xuICAg
ICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRl
bmRzIHRvIGJlIGEgbG90IG9mIHRoZVxuICAgICAgICAgIC8vIHNhbWUgZXJyb3IuXG4gICAgICAg
ICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yLm1lc3NhZ2VdID0gdHJ1ZTtcblxuICAgICAgICAg
IHZhciBzdGFjayA9IGdldFN0YWNrID8gZ2V0U3RhY2soKSA6ICcnO1xuXG4gICAgICAgICAgd2Fy
bmluZyhmYWxzZSwgJ0ZhaWxlZCAlcyB0eXBlOiAlcyVzJywgbG9jYXRpb24sIGVycm9yLm1lc3Nh
Z2UsIHN0YWNrICE9IG51bGwgPyBzdGFjayA6ICcnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAg
IH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNoZWNrUHJvcFR5cGVzO1xuXG5cbi8qKiov
IH0pLFxuLyogMTE0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBh
Y2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAx
My1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4g
KiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5z
ZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2Yg
dGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0
cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3Rvcnku
XG4gKlxuICovXG5cblxuXG5tb2R1bGUuZXhwb3J0cyA9ICcxNS42LjEnO1xuXG4vKioqLyB9KSxc
bi8qIDExNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3Jl
cXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJl
c2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhp
cyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91
bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMg
c291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2Fu
IGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpc
biAqL1xuXG5cblxudmFyIF9yZXF1aXJlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MiksXG4gICAg
Q29tcG9uZW50ID0gX3JlcXVpcmUuQ29tcG9uZW50O1xuXG52YXIgX3JlcXVpcmUyID0gX193ZWJw
YWNrX3JlcXVpcmVfXygxNCksXG4gICAgaXNWYWxpZEVsZW1lbnQgPSBfcmVxdWlyZTIuaXNWYWxp
ZEVsZW1lbnQ7XG5cbnZhciBSZWFjdE5vb3BVcGRhdGVRdWV1ZSA9IF9fd2VicGFja19yZXF1aXJl
X18oNTMpO1xudmFyIGZhY3RvcnkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExNik7XG5cbm1vZHVs
ZS5leHBvcnRzID0gZmFjdG9yeShDb21wb25lbnQsIGlzVmFsaWRFbGVtZW50LCBSZWFjdE5vb3BV
cGRhdGVRdWV1ZSk7XG5cbi8qKiovIH0pLFxuLyogMTE2ICovXG4vKioqLyAoZnVuY3Rpb24obW9k
dWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xu
LyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJp
Z2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVy
IHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0
aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFu
dFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBp
biB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cblxuXG52YXIgX2Fzc2lnbiA9IF9fd2Vi
cGFja19yZXF1aXJlX18oMyk7XG5cbnZhciBlbXB0eU9iamVjdCA9IF9fd2VicGFja19yZXF1aXJl
X18oMjMpO1xudmFyIF9pbnZhcmlhbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG5pZiAo
ZmFsc2UpIHtcbiAgdmFyIHdhcm5pbmcgPSByZXF1aXJlKCdmYmpzL2xpYi93YXJuaW5nJyk7XG59
XG5cbnZhciBNSVhJTlNfS0VZID0gJ21peGlucyc7XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byBh
bGxvdyB0aGUgY3JlYXRpb24gb2YgYW5vbnltb3VzIGZ1bmN0aW9ucyB3aGljaCBkbyBub3Rcbi8v
IGhhdmUgLm5hbWUgc2V0IHRvIHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSBiZWluZyBhc3NpZ25l
ZCB0by5cbmZ1bmN0aW9uIGlkZW50aXR5KGZuKSB7XG4gIHJldHVybiBmbjtcbn1cblxudmFyIFJl
YWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzO1xuaWYgKGZhbHNlKSB7XG4gIFJlYWN0UHJvcFR5cGVM
b2NhdGlvbk5hbWVzID0ge1xuICAgIHByb3A6ICdwcm9wJyxcbiAgICBjb250ZXh0OiAnY29udGV4
dCcsXG4gICAgY2hpbGRDb250ZXh0OiAnY2hpbGQgY29udGV4dCdcbiAgfTtcbn0gZWxzZSB7XG4g
IFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzID0ge307XG59XG5cbmZ1bmN0aW9uIGZhY3Rvcnko
UmVhY3RDb21wb25lbnQsIGlzVmFsaWRFbGVtZW50LCBSZWFjdE5vb3BVcGRhdGVRdWV1ZSkge1xu
ICAvKipcbiAgICogUG9saWNpZXMgdGhhdCBkZXNjcmliZSBtZXRob2RzIGluIGBSZWFjdENsYXNz
SW50ZXJmYWNlYC5cbiAgICovXG5cbiAgdmFyIGluamVjdGVkTWl4aW5zID0gW107XG5cbiAgLyoq
XG4gICAqIENvbXBvc2l0ZSBjb21wb25lbnRzIGFyZSBoaWdoZXItbGV2ZWwgY29tcG9uZW50cyB0
aGF0IGNvbXBvc2Ugb3RoZXIgY29tcG9zaXRlXG4gICAqIG9yIGhvc3QgY29tcG9uZW50cy5cbiAg
ICpcbiAgICogVG8gY3JlYXRlIGEgbmV3IHR5cGUgb2YgYFJlYWN0Q2xhc3NgLCBwYXNzIGEgc3Bl
Y2lmaWNhdGlvbiBvZlxuICAgKiB5b3VyIG5ldyBjbGFzcyB0byBgUmVhY3QuY3JlYXRlQ2xhc3Ng
LiBUaGUgb25seSByZXF1aXJlbWVudCBvZiB5b3VyIGNsYXNzXG4gICAqIHNwZWNpZmljYXRpb24g
aXMgdGhhdCB5b3UgaW1wbGVtZW50IGEgYHJlbmRlcmAgbWV0aG9kLlxuICAgKlxuICAgKiAgIHZh
ciBNeUNvbXBvbmVudCA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgICogICAgIHJlbmRlcjogZnVu
Y3Rpb24oKSB7XG4gICAqICAgICAgIHJldHVybiA8ZGl2PkhlbGxvIFdvcmxkPC9kaXY+O1xuICAg
KiAgICAgfVxuICAgKiAgIH0pO1xuICAgKlxuICAgKiBUaGUgY2xhc3Mgc3BlY2lmaWNhdGlvbiBz
dXBwb3J0cyBhIHNwZWNpZmljIHByb3RvY29sIG9mIG1ldGhvZHMgdGhhdCBoYXZlXG4gICAqIHNw
ZWNpYWwgbWVhbmluZyAoZS5nLiBgcmVuZGVyYCkuIFNlZSBgUmVhY3RDbGFzc0ludGVyZmFjZWAg
Zm9yXG4gICAqIG1vcmUgdGhlIGNvbXByZWhlbnNpdmUgcHJvdG9jb2wuIEFueSBvdGhlciBwcm9w
ZXJ0aWVzIGFuZCBtZXRob2RzIGluIHRoZVxuICAgKiBjbGFzcyBzcGVjaWZpY2F0aW9uIHdpbGwg
YmUgYXZhaWxhYmxlIG9uIHRoZSBwcm90b3R5cGUuXG4gICAqXG4gICAqIEBpbnRlcmZhY2UgUmVh
Y3RDbGFzc0ludGVyZmFjZVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHZhciBSZWFjdENsYXNz
SW50ZXJmYWNlID0ge1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIE1peGluIG9iamVjdHMg
dG8gaW5jbHVkZSB3aGVuIGRlZmluaW5nIHlvdXIgY29tcG9uZW50LlxuICAgICAqXG4gICAgICog
QHR5cGUge2FycmF5fVxuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIG1peGluczogJ0RF
RklORV9NQU5ZJyxcblxuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBjb250YWluaW5nIHByb3Bl
cnRpZXMgYW5kIG1ldGhvZHMgdGhhdCBzaG91bGQgYmUgZGVmaW5lZCBvblxuICAgICAqIHRoZSBj
b21wb25lbnQncyBjb25zdHJ1Y3RvciBpbnN0ZWFkIG9mIGl0cyBwcm90b3R5cGUgKHN0YXRpYyBt
ZXRob2RzKS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtvYmplY3R9XG4gICAgICogQG9wdGlvbmFs
XG4gICAgICovXG4gICAgc3RhdGljczogJ0RFRklORV9NQU5ZJyxcblxuICAgIC8qKlxuICAgICAq
IERlZmluaXRpb24gb2YgcHJvcCB0eXBlcyBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAgICpcbiAg
ICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIHByb3BU
eXBlczogJ0RFRklORV9NQU5ZJyxcblxuICAgIC8qKlxuICAgICAqIERlZmluaXRpb24gb2YgY29u
dGV4dCB0eXBlcyBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7b2Jq
ZWN0fVxuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIGNvbnRleHRUeXBlczogJ0RFRklO
RV9NQU5ZJyxcblxuICAgIC8qKlxuICAgICAqIERlZmluaXRpb24gb2YgY29udGV4dCB0eXBlcyB0
aGlzIGNvbXBvbmVudCBzZXRzIGZvciBpdHMgY2hpbGRyZW4uXG4gICAgICpcbiAgICAgKiBAdHlw
ZSB7b2JqZWN0fVxuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIGNoaWxkQ29udGV4dFR5
cGVzOiAnREVGSU5FX01BTlknLFxuXG4gICAgLy8gPT09PSBEZWZpbml0aW9uIG1ldGhvZHMgPT09
PVxuXG4gICAgLyoqXG4gICAgICogSW52b2tlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbW91bnRl
ZC4gVmFsdWVzIGluIHRoZSBtYXBwaW5nIHdpbGwgYmUgc2V0IG9uXG4gICAgICogYHRoaXMucHJv
cHNgIGlmIHRoYXQgcHJvcCBpcyBub3Qgc3BlY2lmaWVkIChpLmUuIHVzaW5nIGFuIGBpbmAgY2hl
Y2spLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgaXMgaW52b2tlZCBiZWZvcmUgYGdldElu
aXRpYWxTdGF0ZWAgYW5kIHRoZXJlZm9yZSBjYW5ub3QgcmVseVxuICAgICAqIG9uIGB0aGlzLnN0
YXRlYCBvciB1c2UgYHRoaXMuc2V0U3RhdGVgLlxuICAgICAqXG4gICAgICogQHJldHVybiB7b2Jq
ZWN0fVxuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIGdldERlZmF1bHRQcm9wczogJ0RF
RklORV9NQU5ZX01FUkdFRCcsXG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VkIG9uY2UgYmVmb3Jl
IHRoZSBjb21wb25lbnQgaXMgbW91bnRlZC4gVGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIHVzZWRc
biAgICAgKiBhcyB0aGUgaW5pdGlhbCB2YWx1ZSBvZiBgdGhpcy5zdGF0ZWAuXG4gICAgICpcbiAg
ICAgKiAgIGdldEluaXRpYWxTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICogICAgIHJldHVybiB7
XG4gICAgICogICAgICAgaXNPbjogZmFsc2UsXG4gICAgICogICAgICAgZm9vQmF6OiBuZXcgQmF6
Rm9vKClcbiAgICAgKiAgICAgfVxuICAgICAqICAgfVxuICAgICAqXG4gICAgICogQHJldHVybiB7
b2JqZWN0fVxuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIGdldEluaXRpYWxTdGF0ZTog
J0RFRklORV9NQU5ZX01FUkdFRCcsXG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIHtvYmplY3R9
XG4gICAgICogQG9wdGlvbmFsXG4gICAgICovXG4gICAgZ2V0Q2hpbGRDb250ZXh0OiAnREVGSU5F
X01BTllfTUVSR0VEJyxcblxuICAgIC8qKlxuICAgICAqIFVzZXMgcHJvcHMgZnJvbSBgdGhpcy5w
cm9wc2AgYW5kIHN0YXRlIGZyb20gYHRoaXMuc3RhdGVgIHRvIHJlbmRlciB0aGVcbiAgICAgKiBz
dHJ1Y3R1cmUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIE5vIGd1YXJhbnRlZXMg
YXJlIG1hZGUgYWJvdXQgd2hlbiBvciBob3cgb2Z0ZW4gdGhpcyBtZXRob2QgaXMgaW52b2tlZCwg
c29cbiAgICAgKiBpdCBtdXN0IG5vdCBoYXZlIHNpZGUgZWZmZWN0cy5cbiAgICAgKlxuICAgICAq
ICAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgdmFyIG5hbWUgPSB0aGlzLnByb3Bz
Lm5hbWU7XG4gICAgICogICAgIHJldHVybiA8ZGl2PkhlbGxvLCB7bmFtZX0hPC9kaXY+O1xuICAg
ICAqICAgfVxuICAgICAqXG4gICAgICogQHJldHVybiB7UmVhY3RDb21wb25lbnR9XG4gICAgICog
QHJlcXVpcmVkXG4gICAgICovXG4gICAgcmVuZGVyOiAnREVGSU5FX09OQ0UnLFxuXG4gICAgLy8g
PT09PSBEZWxlZ2F0ZSBtZXRob2RzID09PT1cblxuICAgIC8qKlxuICAgICAqIEludm9rZWQgd2hl
biB0aGUgY29tcG9uZW50IGlzIGluaXRpYWxseSBjcmVhdGVkIGFuZCBhYm91dCB0byBiZSBtb3Vu
dGVkLlxuICAgICAqIFRoaXMgbWF5IGhhdmUgc2lkZSBlZmZlY3RzLCBidXQgYW55IGV4dGVybmFs
IHN1YnNjcmlwdGlvbnMgb3IgZGF0YSBjcmVhdGVkXG4gICAgICogYnkgdGhpcyBtZXRob2QgbXVz
dCBiZSBjbGVhbmVkIHVwIGluIGBjb21wb25lbnRXaWxsVW5tb3VudGAuXG4gICAgICpcbiAgICAg
KiBAb3B0aW9uYWxcbiAgICAgKi9cbiAgICBjb21wb25lbnRXaWxsTW91bnQ6ICdERUZJTkVfTUFO
WScsXG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VkIHdoZW4gdGhlIGNvbXBvbmVudCBoYXMgYmVl
biBtb3VudGVkIGFuZCBoYXMgYSBET00gcmVwcmVzZW50YXRpb24uXG4gICAgICogSG93ZXZlciwg
dGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgdGhlIERPTSBub2RlIGlzIGluIHRoZSBkb2N1bWVu
dC5cbiAgICAgKlxuICAgICAqIFVzZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5IHRvIG9wZXJhdGUg
b24gdGhlIERPTSB3aGVuIHRoZSBjb21wb25lbnQgaGFzXG4gICAgICogYmVlbiBtb3VudGVkIChp
bml0aWFsaXplZCBhbmQgcmVuZGVyZWQpIGZvciB0aGUgZmlyc3QgdGltZS5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gcm9vdE5vZGUgRE9NIGVsZW1lbnQgcmVwcmVzZW50aW5n
IHRoZSBjb21wb25lbnQuXG4gICAgICogQG9wdGlvbmFsXG4gICAgICovXG4gICAgY29tcG9uZW50
RGlkTW91bnQ6ICdERUZJTkVfTUFOWScsXG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VkIGJlZm9y
ZSB0aGUgY29tcG9uZW50IHJlY2VpdmVzIG5ldyBwcm9wcy5cbiAgICAgKlxuICAgICAqIFVzZSB0
aGlzIGFzIGFuIG9wcG9ydHVuaXR5IHRvIHJlYWN0IHRvIGEgcHJvcCB0cmFuc2l0aW9uIGJ5IHVw
ZGF0aW5nIHRoZVxuICAgICAqIHN0YXRlIHVzaW5nIGB0aGlzLnNldFN0YXRlYC4gQ3VycmVudCBw
cm9wcyBhcmUgYWNjZXNzZWQgdmlhIGB0aGlzLnByb3BzYC5cbiAgICAgKlxuICAgICAqICAgY29t
cG9uZW50V2lsbFJlY2VpdmVQcm9wczogZnVuY3Rpb24obmV4dFByb3BzLCBuZXh0Q29udGV4dCkg
e1xuICAgICAqICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgKiAgICAgICBsaWtlc0luY3JlYXNp
bmc6IG5leHRQcm9wcy5saWtlQ291bnQgPiB0aGlzLnByb3BzLmxpa2VDb3VudFxuICAgICAqICAg
ICB9KTtcbiAgICAgKiAgIH1cbiAgICAgKlxuICAgICAqIE5PVEU6IFRoZXJlIGlzIG5vIGVxdWl2
YWxlbnQgYGNvbXBvbmVudFdpbGxSZWNlaXZlU3RhdGVgLiBBbiBpbmNvbWluZyBwcm9wXG4gICAg
ICogdHJhbnNpdGlvbiBtYXkgY2F1c2UgYSBzdGF0ZSBjaGFuZ2UsIGJ1dCB0aGUgb3Bwb3NpdGUg
aXMgbm90IHRydWUuIElmIHlvdVxuICAgICAqIG5lZWQgaXQsIHlvdSBhcmUgcHJvYmFibHkgbG9v
a2luZyBmb3IgYGNvbXBvbmVudFdpbGxVcGRhdGVgLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtv
YmplY3R9IG5leHRQcm9wc1xuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIGNvbXBvbmVu
dFdpbGxSZWNlaXZlUHJvcHM6ICdERUZJTkVfTUFOWScsXG5cbiAgICAvKipcbiAgICAgKiBJbnZv
a2VkIHdoaWxlIGRlY2lkaW5nIGlmIHRoZSBjb21wb25lbnQgc2hvdWxkIGJlIHVwZGF0ZWQgYXMg
YSByZXN1bHQgb2ZcbiAgICAgKiByZWNlaXZpbmcgbmV3IHByb3BzLCBzdGF0ZSBhbmQvb3IgY29u
dGV4dC5cbiAgICAgKlxuICAgICAqIFVzZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5IHRvIGByZXR1
cm4gZmFsc2VgIHdoZW4geW91J3JlIGNlcnRhaW4gdGhhdCB0aGVcbiAgICAgKiB0cmFuc2l0aW9u
IHRvIHRoZSBuZXcgcHJvcHMvc3RhdGUvY29udGV4dCB3aWxsIG5vdCByZXF1aXJlIGEgY29tcG9u
ZW50XG4gICAgICogdXBkYXRlLlxuICAgICAqXG4gICAgICogICBzaG91bGRDb21wb25lbnRVcGRh
dGU6IGZ1bmN0aW9uKG5leHRQcm9wcywgbmV4dFN0YXRlLCBuZXh0Q29udGV4dCkge1xuICAgICAq
ICAgICByZXR1cm4gIWVxdWFsKG5leHRQcm9wcywgdGhpcy5wcm9wcykgfHxcbiAgICAgKiAgICAg
ICAhZXF1YWwobmV4dFN0YXRlLCB0aGlzLnN0YXRlKSB8fFxuICAgICAqICAgICAgICFlcXVhbChu
ZXh0Q29udGV4dCwgdGhpcy5jb250ZXh0KTtcbiAgICAgKiAgIH1cbiAgICAgKlxuICAgICAqIEBw
YXJhbSB7b2JqZWN0fSBuZXh0UHJvcHNcbiAgICAgKiBAcGFyYW0gez9vYmplY3R9IG5leHRTdGF0
ZVxuICAgICAqIEBwYXJhbSB7P29iamVjdH0gbmV4dENvbnRleHRcbiAgICAgKiBAcmV0dXJuIHti
b29sZWFufSBUcnVlIGlmIHRoZSBjb21wb25lbnQgc2hvdWxkIHVwZGF0ZS5cbiAgICAgKiBAb3B0
aW9uYWxcbiAgICAgKi9cbiAgICBzaG91bGRDb21wb25lbnRVcGRhdGU6ICdERUZJTkVfT05DRScs
XG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBhYm91dCB0
byB1cGRhdGUgZHVlIHRvIGEgdHJhbnNpdGlvbiBmcm9tXG4gICAgICogYHRoaXMucHJvcHNgLCBg
dGhpcy5zdGF0ZWAgYW5kIGB0aGlzLmNvbnRleHRgIHRvIGBuZXh0UHJvcHNgLCBgbmV4dFN0YXRl
YFxuICAgICAqIGFuZCBgbmV4dENvbnRleHRgLlxuICAgICAqXG4gICAgICogVXNlIHRoaXMgYXMg
YW4gb3Bwb3J0dW5pdHkgdG8gcGVyZm9ybSBwcmVwYXJhdGlvbiBiZWZvcmUgYW4gdXBkYXRlIG9j
Y3Vycy5cbiAgICAgKlxuICAgICAqIE5PVEU6IFlvdSAqKmNhbm5vdCoqIHVzZSBgdGhpcy5zZXRT
dGF0ZSgpYCBpbiB0aGlzIG1ldGhvZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBu
ZXh0UHJvcHNcbiAgICAgKiBAcGFyYW0gez9vYmplY3R9IG5leHRTdGF0ZVxuICAgICAqIEBwYXJh
bSB7P29iamVjdH0gbmV4dENvbnRleHRcbiAgICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJh
bnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAgICogQG9wdGlvbmFsXG4gICAgICovXG4gICAgY29t
cG9uZW50V2lsbFVwZGF0ZTogJ0RFRklORV9NQU5ZJyxcblxuICAgIC8qKlxuICAgICAqIEludm9r
ZWQgd2hlbiB0aGUgY29tcG9uZW50J3MgRE9NIHJlcHJlc2VudGF0aW9uIGhhcyBiZWVuIHVwZGF0
ZWQuXG4gICAgICpcbiAgICAgKiBVc2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eSB0byBvcGVyYXRl
IG9uIHRoZSBET00gd2hlbiB0aGUgY29tcG9uZW50IGhhc1xuICAgICAqIGJlZW4gdXBkYXRlZC5c
biAgICAgKlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBwcmV2UHJvcHNcbiAgICAgKiBAcGFyYW0g
ez9vYmplY3R9IHByZXZTdGF0ZVxuICAgICAqIEBwYXJhbSB7P29iamVjdH0gcHJldkNvbnRleHRc
biAgICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IHJvb3ROb2RlIERPTSBlbGVtZW50IHJlcHJlc2Vu
dGluZyB0aGUgY29tcG9uZW50LlxuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIGNvbXBv
bmVudERpZFVwZGF0ZTogJ0RFRklORV9NQU5ZJyxcblxuICAgIC8qKlxuICAgICAqIEludm9rZWQg
d2hlbiB0aGUgY29tcG9uZW50IGlzIGFib3V0IHRvIGJlIHJlbW92ZWQgZnJvbSBpdHMgcGFyZW50
IGFuZCBoYXZlXG4gICAgICogaXRzIERPTSByZXByZXNlbnRhdGlvbiBkZXN0cm95ZWQuXG4gICAg
ICpcbiAgICAgKiBVc2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eSB0byBkZWFsbG9jYXRlIGFueSBl
eHRlcm5hbCByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBOT1RFOiBUaGVyZSBpcyBubyBgY29t
cG9uZW50RGlkVW5tb3VudGAgc2luY2UgeW91ciBjb21wb25lbnQgd2lsbCBoYXZlIGJlZW5cbiAg
ICAgKiBkZXN0cm95ZWQgYnkgdGhhdCBwb2ludC5cbiAgICAgKlxuICAgICAqIEBvcHRpb25hbFxu
ICAgICAqL1xuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50OiAnREVGSU5FX01BTlknLFxuXG4gICAg
Ly8gPT09PSBBZHZhbmNlZCBtZXRob2RzID09PT1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMg
dGhlIGNvbXBvbmVudCdzIGN1cnJlbnRseSBtb3VudGVkIERPTSByZXByZXNlbnRhdGlvbi5cbiAg
ICAgKlxuICAgICAqIEJ5IGRlZmF1bHQsIHRoaXMgaW1wbGVtZW50cyBSZWFjdCdzIHJlbmRlcmlu
ZyBhbmQgcmVjb25jaWxpYXRpb24gYWxnb3JpdGhtLlxuICAgICAqIFNvcGhpc3RpY2F0ZWQgY2xp
ZW50cyBtYXkgd2lzaCB0byBvdmVycmlkZSB0aGlzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtS
ZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgICAqIEBpbnRlcm5hbFxu
ICAgICAqIEBvdmVycmlkYWJsZVxuICAgICAqL1xuICAgIHVwZGF0ZUNvbXBvbmVudDogJ09WRVJS
SURFX0JBU0UnXG4gIH07XG5cbiAgLyoqXG4gICAqIE1hcHBpbmcgZnJvbSBjbGFzcyBzcGVjaWZp
Y2F0aW9uIGtleXMgdG8gc3BlY2lhbCBwcm9jZXNzaW5nIGZ1bmN0aW9ucy5cbiAgICpcbiAgICog
QWx0aG91Z2ggdGhlc2UgYXJlIGRlY2xhcmVkIGxpa2UgaW5zdGFuY2UgcHJvcGVydGllcyBpbiB0
aGUgc3BlY2lmaWNhdGlvblxuICAgKiB3aGVuIGRlZmluaW5nIGNsYXNzZXMgdXNpbmcgYFJlYWN0
LmNyZWF0ZUNsYXNzYCwgdGhleSBhcmUgYWN0dWFsbHkgc3RhdGljXG4gICAqIGFuZCBhcmUgYWNj
ZXNzaWJsZSBvbiB0aGUgY29uc3RydWN0b3IgaW5zdGVhZCBvZiB0aGUgcHJvdG90eXBlLiBEZXNw
aXRlXG4gICAqIGJlaW5nIHN0YXRpYywgdGhleSBtdXN0IGJlIGRlZmluZWQgb3V0c2lkZSBvZiB0
aGUgXCJzdGF0aWNzXCIga2V5IHVuZGVyXG4gICAqIHdoaWNoIGFsbCBvdGhlciBzdGF0aWMgbWV0
aG9kcyBhcmUgZGVmaW5lZC5cbiAgICovXG4gIHZhciBSRVNFUlZFRF9TUEVDX0tFWVMgPSB7XG4g
ICAgZGlzcGxheU5hbWU6IGZ1bmN0aW9uKENvbnN0cnVjdG9yLCBkaXNwbGF5TmFtZSkge1xuICAg
ICAgQ29uc3RydWN0b3IuZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcbiAgICB9LFxuICAgIG1p
eGluczogZnVuY3Rpb24oQ29uc3RydWN0b3IsIG1peGlucykge1xuICAgICAgaWYgKG1peGlucykg
e1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1peGlucy5sZW5ndGg7IGkrKykge1xuICAg
ICAgICAgIG1peFNwZWNJbnRvQ29tcG9uZW50KENvbnN0cnVjdG9yLCBtaXhpbnNbaV0pO1xuICAg
ICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBjaGlsZENvbnRleHRUeXBlczogZnVuY3Rpb24o
Q29uc3RydWN0b3IsIGNoaWxkQ29udGV4dFR5cGVzKSB7XG4gICAgICBpZiAoZmFsc2UpIHtcbiAg
ICAgICAgdmFsaWRhdGVUeXBlRGVmKENvbnN0cnVjdG9yLCBjaGlsZENvbnRleHRUeXBlcywgJ2No
aWxkQ29udGV4dCcpO1xuICAgICAgfVxuICAgICAgQ29uc3RydWN0b3IuY2hpbGRDb250ZXh0VHlw
ZXMgPSBfYXNzaWduKFxuICAgICAgICB7fSxcbiAgICAgICAgQ29uc3RydWN0b3IuY2hpbGRDb250
ZXh0VHlwZXMsXG4gICAgICAgIGNoaWxkQ29udGV4dFR5cGVzXG4gICAgICApO1xuICAgIH0sXG4g
ICAgY29udGV4dFR5cGVzOiBmdW5jdGlvbihDb25zdHJ1Y3RvciwgY29udGV4dFR5cGVzKSB7XG4g
ICAgICBpZiAoZmFsc2UpIHtcbiAgICAgICAgdmFsaWRhdGVUeXBlRGVmKENvbnN0cnVjdG9yLCBj
b250ZXh0VHlwZXMsICdjb250ZXh0Jyk7XG4gICAgICB9XG4gICAgICBDb25zdHJ1Y3Rvci5jb250
ZXh0VHlwZXMgPSBfYXNzaWduKFxuICAgICAgICB7fSxcbiAgICAgICAgQ29uc3RydWN0b3IuY29u
dGV4dFR5cGVzLFxuICAgICAgICBjb250ZXh0VHlwZXNcbiAgICAgICk7XG4gICAgfSxcbiAgICAv
KipcbiAgICAgKiBTcGVjaWFsIGNhc2UgZ2V0RGVmYXVsdFByb3BzIHdoaWNoIHNob3VsZCBtb3Zl
IGludG8gc3RhdGljcyBidXQgcmVxdWlyZXNcbiAgICAgKiBhdXRvbWF0aWMgbWVyZ2luZy5cbiAg
ICAgKi9cbiAgICBnZXREZWZhdWx0UHJvcHM6IGZ1bmN0aW9uKENvbnN0cnVjdG9yLCBnZXREZWZh
dWx0UHJvcHMpIHtcbiAgICAgIGlmIChDb25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMpIHtcbiAg
ICAgICAgQ29uc3RydWN0b3IuZ2V0RGVmYXVsdFByb3BzID0gY3JlYXRlTWVyZ2VkUmVzdWx0RnVu
Y3Rpb24oXG4gICAgICAgICAgQ29uc3RydWN0b3IuZ2V0RGVmYXVsdFByb3BzLFxuICAgICAgICAg
IGdldERlZmF1bHRQcm9wc1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgQ29u
c3RydWN0b3IuZ2V0RGVmYXVsdFByb3BzID0gZ2V0RGVmYXVsdFByb3BzO1xuICAgICAgfVxuICAg
IH0sXG4gICAgcHJvcFR5cGVzOiBmdW5jdGlvbihDb25zdHJ1Y3RvciwgcHJvcFR5cGVzKSB7XG4g
ICAgICBpZiAoZmFsc2UpIHtcbiAgICAgICAgdmFsaWRhdGVUeXBlRGVmKENvbnN0cnVjdG9yLCBw
cm9wVHlwZXMsICdwcm9wJyk7XG4gICAgICB9XG4gICAgICBDb25zdHJ1Y3Rvci5wcm9wVHlwZXMg
PSBfYXNzaWduKHt9LCBDb25zdHJ1Y3Rvci5wcm9wVHlwZXMsIHByb3BUeXBlcyk7XG4gICAgfSxc
biAgICBzdGF0aWNzOiBmdW5jdGlvbihDb25zdHJ1Y3Rvciwgc3RhdGljcykge1xuICAgICAgbWl4
U3RhdGljU3BlY0ludG9Db21wb25lbnQoQ29uc3RydWN0b3IsIHN0YXRpY3MpO1xuICAgIH0sXG4g
ICAgYXV0b2JpbmQ6IGZ1bmN0aW9uKCkge31cbiAgfTtcblxuICBmdW5jdGlvbiB2YWxpZGF0ZVR5
cGVEZWYoQ29uc3RydWN0b3IsIHR5cGVEZWYsIGxvY2F0aW9uKSB7XG4gICAgZm9yICh2YXIgcHJv
cE5hbWUgaW4gdHlwZURlZikge1xuICAgICAgaWYgKHR5cGVEZWYuaGFzT3duUHJvcGVydHkocHJv
cE5hbWUpKSB7XG4gICAgICAgIC8vIHVzZSBhIHdhcm5pbmcgaW5zdGVhZCBvZiBhbiBfaW52YXJp
YW50IHNvIGNvbXBvbmVudHNcbiAgICAgICAgLy8gZG9uJ3Qgc2hvdyB1cCBpbiBwcm9kIGJ1dCBv
bmx5IGluIF9fREVWX19cbiAgICAgICAgaWYgKGZhbHNlKSB7XG4gICAgICAgICAgd2FybmluZyhc
biAgICAgICAgICAgIHR5cGVvZiB0eXBlRGVmW3Byb3BOYW1lXSA9PT0gJ2Z1bmN0aW9uJyxcbiAg
ICAgICAgICAgICclczogJXMgdHlwZSBgJXNgIGlzIGludmFsaWQ7IGl0IG11c3QgYmUgYSBmdW5j
dGlvbiwgdXN1YWxseSBmcm9tICcgK1xuICAgICAgICAgICAgICAnUmVhY3QuUHJvcFR5cGVzLics
XG4gICAgICAgICAgICBDb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSB8fCAnUmVhY3RDbGFzcycsXG4g
ICAgICAgICAgICBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1tsb2NhdGlvbl0sXG4gICAgICAg
ICAgICBwcm9wTmFtZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4g
IH1cblxuICBmdW5jdGlvbiB2YWxpZGF0ZU1ldGhvZE92ZXJyaWRlKGlzQWxyZWFkeURlZmluZWQs
IG5hbWUpIHtcbiAgICB2YXIgc3BlY1BvbGljeSA9IFJlYWN0Q2xhc3NJbnRlcmZhY2UuaGFzT3du
UHJvcGVydHkobmFtZSlcbiAgICAgID8gUmVhY3RDbGFzc0ludGVyZmFjZVtuYW1lXVxuICAgICAg
OiBudWxsO1xuXG4gICAgLy8gRGlzYWxsb3cgb3ZlcnJpZGluZyBvZiBiYXNlIGNsYXNzIG1ldGhv
ZHMgdW5sZXNzIGV4cGxpY2l0bHkgYWxsb3dlZC5cbiAgICBpZiAoUmVhY3RDbGFzc01peGluLmhh
c093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICBfaW52YXJpYW50KFxuICAgICAgICBzcGVjUG9s
aWN5ID09PSAnT1ZFUlJJREVfQkFTRScsXG4gICAgICAgICdSZWFjdENsYXNzSW50ZXJmYWNlOiBZ
b3UgYXJlIGF0dGVtcHRpbmcgdG8gb3ZlcnJpZGUgJyArXG4gICAgICAgICAgJ2Alc2AgZnJvbSB5
b3VyIGNsYXNzIHNwZWNpZmljYXRpb24uIEVuc3VyZSB0aGF0IHlvdXIgbWV0aG9kIG5hbWVzICcg
K1xuICAgICAgICAgICdkbyBub3Qgb3ZlcmxhcCB3aXRoIFJlYWN0IG1ldGhvZHMuJyxcbiAgICAg
ICAgbmFtZVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBEaXNhbGxvdyBkZWZpbmluZyBtZXRo
b2RzIG1vcmUgdGhhbiBvbmNlIHVubGVzcyBleHBsaWNpdGx5IGFsbG93ZWQuXG4gICAgaWYgKGlz
QWxyZWFkeURlZmluZWQpIHtcbiAgICAgIF9pbnZhcmlhbnQoXG4gICAgICAgIHNwZWNQb2xpY3kg
PT09ICdERUZJTkVfTUFOWScgfHwgc3BlY1BvbGljeSA9PT0gJ0RFRklORV9NQU5ZX01FUkdFRCcs
XG4gICAgICAgICdSZWFjdENsYXNzSW50ZXJmYWNlOiBZb3UgYXJlIGF0dGVtcHRpbmcgdG8gZGVm
aW5lICcgK1xuICAgICAgICAgICdgJXNgIG9uIHlvdXIgY29tcG9uZW50IG1vcmUgdGhhbiBvbmNl
LiBUaGlzIGNvbmZsaWN0IG1heSBiZSBkdWUgJyArXG4gICAgICAgICAgJ3RvIGEgbWl4aW4uJyxc
biAgICAgICAgbmFtZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWl4aW4g
aGVscGVyIHdoaWNoIGhhbmRsZXMgcG9saWN5IHZhbGlkYXRpb24gYW5kIHJlc2VydmVkXG4gICAq
IHNwZWNpZmljYXRpb24ga2V5cyB3aGVuIGJ1aWxkaW5nIFJlYWN0IGNsYXNzZXMuXG4gICAqL1xu
ICBmdW5jdGlvbiBtaXhTcGVjSW50b0NvbXBvbmVudChDb25zdHJ1Y3Rvciwgc3BlYykge1xuICAg
IGlmICghc3BlYykge1xuICAgICAgaWYgKGZhbHNlKSB7XG4gICAgICAgIHZhciB0eXBlb2ZTcGVj
ID0gdHlwZW9mIHNwZWM7XG4gICAgICAgIHZhciBpc01peGluVmFsaWQgPSB0eXBlb2ZTcGVjID09
PSAnb2JqZWN0JyAmJiBzcGVjICE9PSBudWxsO1xuXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5O
T0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgd2FybmluZyhcbiAgICAgICAg
ICAgIGlzTWl4aW5WYWxpZCxcbiAgICAgICAgICAgIFwiJXM6IFlvdSdyZSBhdHRlbXB0aW5nIHRv
IGluY2x1ZGUgYSBtaXhpbiB0aGF0IGlzIGVpdGhlciBudWxsIFwiICtcbiAgICAgICAgICAgICAg
J29yIG5vdCBhbiBvYmplY3QuIENoZWNrIHRoZSBtaXhpbnMgaW5jbHVkZWQgYnkgdGhlIGNvbXBv
bmVudCwgJyArXG4gICAgICAgICAgICAgICdhcyB3ZWxsIGFzIGFueSBtaXhpbnMgdGhleSBpbmNs
dWRlIHRoZW1zZWx2ZXMuICcgK1xuICAgICAgICAgICAgICAnRXhwZWN0ZWQgb2JqZWN0IGJ1dCBn
b3QgJXMuJyxcbiAgICAgICAgICAgIENvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8ICdSZWFjdENs
YXNzJyxcbiAgICAgICAgICAgIHNwZWMgPT09IG51bGwgPyBudWxsIDogdHlwZW9mU3BlY1xuICAg
ICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxu
ICAgIF9pbnZhcmlhbnQoXG4gICAgICB0eXBlb2Ygc3BlYyAhPT0gJ2Z1bmN0aW9uJyxcbiAgICAg
IFwiUmVhY3RDbGFzczogWW91J3JlIGF0dGVtcHRpbmcgdG8gXCIgK1xuICAgICAgICAndXNlIGEg
Y29tcG9uZW50IGNsYXNzIG9yIGZ1bmN0aW9uIGFzIGEgbWl4aW4uIEluc3RlYWQsIGp1c3QgdXNl
IGEgJyArXG4gICAgICAgICdyZWd1bGFyIG9iamVjdC4nXG4gICAgKTtcbiAgICBfaW52YXJpYW50
KFxuICAgICAgIWlzVmFsaWRFbGVtZW50KHNwZWMpLFxuICAgICAgXCJSZWFjdENsYXNzOiBZb3Un
cmUgYXR0ZW1wdGluZyB0byBcIiArXG4gICAgICAgICd1c2UgYSBjb21wb25lbnQgYXMgYSBtaXhp
bi4gSW5zdGVhZCwganVzdCB1c2UgYSByZWd1bGFyIG9iamVjdC4nXG4gICAgKTtcblxuICAgIHZh
ciBwcm90byA9IENvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgICB2YXIgYXV0b0JpbmRQYWlycyA9
IHByb3RvLl9fcmVhY3RBdXRvQmluZFBhaXJzO1xuXG4gICAgLy8gQnkgaGFuZGxpbmcgbWl4aW5z
IGJlZm9yZSBhbnkgb3RoZXIgcHJvcGVydGllcywgd2UgZW5zdXJlIHRoZSBzYW1lXG4gICAgLy8g
Y2hhaW5pbmcgb3JkZXIgaXMgYXBwbGllZCB0byBtZXRob2RzIHdpdGggREVGSU5FX01BTlkgcG9s
aWN5LCB3aGV0aGVyXG4gICAgLy8gbWl4aW5zIGFyZSBsaXN0ZWQgYmVmb3JlIG9yIGFmdGVyIHRo
ZXNlIG1ldGhvZHMgaW4gdGhlIHNwZWMuXG4gICAgaWYgKHNwZWMuaGFzT3duUHJvcGVydHkoTUlY
SU5TX0tFWSkpIHtcbiAgICAgIFJFU0VSVkVEX1NQRUNfS0VZUy5taXhpbnMoQ29uc3RydWN0b3Is
IHNwZWMubWl4aW5zKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBuYW1lIGluIHNwZWMpIHtcbiAg
ICAgIGlmICghc3BlYy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICBjb250aW51ZTtc
biAgICAgIH1cblxuICAgICAgaWYgKG5hbWUgPT09IE1JWElOU19LRVkpIHtcbiAgICAgICAgLy8g
V2UgaGF2ZSBhbHJlYWR5IGhhbmRsZWQgbWl4aW5zIGluIGEgc3BlY2lhbCBjYXNlIGFib3ZlLlxu
ICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHByb3BlcnR5ID0gc3BlY1tu
YW1lXTtcbiAgICAgIHZhciBpc0FscmVhZHlEZWZpbmVkID0gcHJvdG8uaGFzT3duUHJvcGVydHko
bmFtZSk7XG4gICAgICB2YWxpZGF0ZU1ldGhvZE92ZXJyaWRlKGlzQWxyZWFkeURlZmluZWQsIG5h
bWUpO1xuXG4gICAgICBpZiAoUkVTRVJWRURfU1BFQ19LRVlTLmhhc093blByb3BlcnR5KG5hbWUp
KSB7XG4gICAgICAgIFJFU0VSVkVEX1NQRUNfS0VZU1tuYW1lXShDb25zdHJ1Y3RvciwgcHJvcGVy
dHkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU2V0dXAgbWV0aG9kcyBvbiBwcm90b3R5
cGU6XG4gICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgbWVtYmVyIG1ldGhvZHMgc2hvdWxkIG5vdCBi
ZSBhdXRvbWF0aWNhbGx5IGJvdW5kOlxuICAgICAgICAvLyAxLiBFeHBlY3RlZCBSZWFjdENsYXNz
IG1ldGhvZHMgKGluIHRoZSBcImludGVyZmFjZVwiKS5cbiAgICAgICAgLy8gMi4gT3ZlcnJpZGRl
biBtZXRob2RzICh0aGF0IHdlcmUgbWl4ZWQgaW4pLlxuICAgICAgICB2YXIgaXNSZWFjdENsYXNz
TWV0aG9kID0gUmVhY3RDbGFzc0ludGVyZmFjZS5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcbiAgICAg
ICAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2YgcHJvcGVydHkgPT09ICdmdW5jdGlvbic7XG4gICAg
ICAgIHZhciBzaG91bGRBdXRvQmluZCA9XG4gICAgICAgICAgaXNGdW5jdGlvbiAmJlxuICAgICAg
ICAgICFpc1JlYWN0Q2xhc3NNZXRob2QgJiZcbiAgICAgICAgICAhaXNBbHJlYWR5RGVmaW5lZCAm
JlxuICAgICAgICAgIHNwZWMuYXV0b2JpbmQgIT09IGZhbHNlO1xuXG4gICAgICAgIGlmIChzaG91
bGRBdXRvQmluZCkge1xuICAgICAgICAgIGF1dG9CaW5kUGFpcnMucHVzaChuYW1lLCBwcm9wZXJ0
eSk7XG4gICAgICAgICAgcHJvdG9bbmFtZV0gPSBwcm9wZXJ0eTtcbiAgICAgICAgfSBlbHNlIHtc
biAgICAgICAgICBpZiAoaXNBbHJlYWR5RGVmaW5lZCkge1xuICAgICAgICAgICAgdmFyIHNwZWNQ
b2xpY3kgPSBSZWFjdENsYXNzSW50ZXJmYWNlW25hbWVdO1xuXG4gICAgICAgICAgICAvLyBUaGVz
ZSBjYXNlcyBzaG91bGQgYWxyZWFkeSBiZSBjYXVnaHQgYnkgdmFsaWRhdGVNZXRob2RPdmVycmlk
ZS5cbiAgICAgICAgICAgIF9pbnZhcmlhbnQoXG4gICAgICAgICAgICAgIGlzUmVhY3RDbGFzc01l
dGhvZCAmJlxuICAgICAgICAgICAgICAgIChzcGVjUG9saWN5ID09PSAnREVGSU5FX01BTllfTUVS
R0VEJyB8fFxuICAgICAgICAgICAgICAgICAgc3BlY1BvbGljeSA9PT0gJ0RFRklORV9NQU5ZJyks
XG4gICAgICAgICAgICAgICdSZWFjdENsYXNzOiBVbmV4cGVjdGVkIHNwZWMgcG9saWN5ICVzIGZv
ciBrZXkgJXMgJyArXG4gICAgICAgICAgICAgICAgJ3doZW4gbWl4aW5nIGluIGNvbXBvbmVudCBz
cGVjcy4nLFxuICAgICAgICAgICAgICBzcGVjUG9saWN5LFxuICAgICAgICAgICAgICBuYW1lXG4g
ICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAvLyBGb3IgbWV0aG9kcyB3aGljaCBhcmUgZGVm
aW5lZCBtb3JlIHRoYW4gb25jZSwgY2FsbCB0aGUgZXhpc3RpbmdcbiAgICAgICAgICAgIC8vIG1l
dGhvZHMgYmVmb3JlIGNhbGxpbmcgdGhlIG5ldyBwcm9wZXJ0eSwgbWVyZ2luZyBpZiBhcHByb3By
aWF0ZS5cbiAgICAgICAgICAgIGlmIChzcGVjUG9saWN5ID09PSAnREVGSU5FX01BTllfTUVSR0VE
Jykge1xuICAgICAgICAgICAgICBwcm90b1tuYW1lXSA9IGNyZWF0ZU1lcmdlZFJlc3VsdEZ1bmN0
aW9uKHByb3RvW25hbWVdLCBwcm9wZXJ0eSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNwZWNQ
b2xpY3kgPT09ICdERUZJTkVfTUFOWScpIHtcbiAgICAgICAgICAgICAgcHJvdG9bbmFtZV0gPSBj
cmVhdGVDaGFpbmVkRnVuY3Rpb24ocHJvdG9bbmFtZV0sIHByb3BlcnR5KTtcbiAgICAgICAgICAg
IH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHJvdG9bbmFtZV0gPSBwcm9wZXJ0
eTtcbiAgICAgICAgICAgIGlmIChmYWxzZSkge1xuICAgICAgICAgICAgICAvLyBBZGQgdmVyYm9z
ZSBkaXNwbGF5TmFtZSB0byB0aGUgZnVuY3Rpb24sIHdoaWNoIGhlbHBzIHdoZW4gbG9va2luZ1xu
ICAgICAgICAgICAgICAvLyBhdCBwcm9maWxpbmcgdG9vbHMuXG4gICAgICAgICAgICAgIGlmICh0
eXBlb2YgcHJvcGVydHkgPT09ICdmdW5jdGlvbicgJiYgc3BlYy5kaXNwbGF5TmFtZSkge1xuICAg
ICAgICAgICAgICAgIHByb3RvW25hbWVdLmRpc3BsYXlOYW1lID0gc3BlYy5kaXNwbGF5TmFtZSAr
ICdfJyArIG5hbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9
XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBtaXhTdGF0aWNT
cGVjSW50b0NvbXBvbmVudChDb25zdHJ1Y3Rvciwgc3RhdGljcykge1xuICAgIGlmICghc3RhdGlj
cykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKHZhciBuYW1lIGluIHN0YXRpY3Mp
IHtcbiAgICAgIHZhciBwcm9wZXJ0eSA9IHN0YXRpY3NbbmFtZV07XG4gICAgICBpZiAoIXN0YXRp
Y3MuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5c
biAgICAgIHZhciBpc1Jlc2VydmVkID0gbmFtZSBpbiBSRVNFUlZFRF9TUEVDX0tFWVM7XG4gICAg
ICBfaW52YXJpYW50KFxuICAgICAgICAhaXNSZXNlcnZlZCxcbiAgICAgICAgJ1JlYWN0Q2xhc3M6
IFlvdSBhcmUgYXR0ZW1wdGluZyB0byBkZWZpbmUgYSByZXNlcnZlZCAnICtcbiAgICAgICAgICAn
cHJvcGVydHksIGAlc2AsIHRoYXQgc2hvdWxkblxcJ3QgYmUgb24gdGhlIFwic3RhdGljc1wiIGtl
eS4gRGVmaW5lIGl0ICcgK1xuICAgICAgICAgICdhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBpbnN0
ZWFkOyBpdCB3aWxsIHN0aWxsIGJlIGFjY2Vzc2libGUgb24gdGhlICcgK1xuICAgICAgICAgICdj
b25zdHJ1Y3Rvci4nLFxuICAgICAgICBuYW1lXG4gICAgICApO1xuXG4gICAgICB2YXIgaXNJbmhl
cml0ZWQgPSBuYW1lIGluIENvbnN0cnVjdG9yO1xuICAgICAgX2ludmFyaWFudChcbiAgICAgICAg
IWlzSW5oZXJpdGVkLFxuICAgICAgICAnUmVhY3RDbGFzczogWW91IGFyZSBhdHRlbXB0aW5nIHRv
IGRlZmluZSAnICtcbiAgICAgICAgICAnYCVzYCBvbiB5b3VyIGNvbXBvbmVudCBtb3JlIHRoYW4g
b25jZS4gVGhpcyBjb25mbGljdCBtYXkgYmUgJyArXG4gICAgICAgICAgJ2R1ZSB0byBhIG1peGlu
LicsXG4gICAgICAgIG5hbWVcbiAgICAgICk7XG4gICAgICBDb25zdHJ1Y3RvcltuYW1lXSA9IHBy
b3BlcnR5O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNZXJnZSB0d28gb2JqZWN0cywgYnV0
IHRocm93IGlmIGJvdGggY29udGFpbiB0aGUgc2FtZSBrZXkuXG4gICAqXG4gICAqIEBwYXJhbSB7
b2JqZWN0fSBvbmUgVGhlIGZpcnN0IG9iamVjdCwgd2hpY2ggaXMgbXV0YXRlZC5cbiAgICogQHBh
cmFtIHtvYmplY3R9IHR3byBUaGUgc2Vjb25kIG9iamVjdFxuICAgKiBAcmV0dXJuIHtvYmplY3R9
IG9uZSBhZnRlciBpdCBoYXMgYmVlbiBtdXRhdGVkIHRvIGNvbnRhaW4gZXZlcnl0aGluZyBpbiB0
d28uXG4gICAqL1xuICBmdW5jdGlvbiBtZXJnZUludG9XaXRoTm9EdXBsaWNhdGVLZXlzKG9uZSwg
dHdvKSB7XG4gICAgX2ludmFyaWFudChcbiAgICAgIG9uZSAmJiB0d28gJiYgdHlwZW9mIG9uZSA9
PT0gJ29iamVjdCcgJiYgdHlwZW9mIHR3byA9PT0gJ29iamVjdCcsXG4gICAgICAnbWVyZ2VJbnRv
V2l0aE5vRHVwbGljYXRlS2V5cygpOiBDYW5ub3QgbWVyZ2Ugbm9uLW9iamVjdHMuJ1xuICAgICk7
XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gdHdvKSB7XG4gICAgICBpZiAodHdvLmhhc093blByb3Bl
cnR5KGtleSkpIHtcbiAgICAgICAgX2ludmFyaWFudChcbiAgICAgICAgICBvbmVba2V5XSA9PT0g
dW5kZWZpbmVkLFxuICAgICAgICAgICdtZXJnZUludG9XaXRoTm9EdXBsaWNhdGVLZXlzKCk6ICcg
K1xuICAgICAgICAgICAgJ1RyaWVkIHRvIG1lcmdlIHR3byBvYmplY3RzIHdpdGggdGhlIHNhbWUg
a2V5OiBgJXNgLiBUaGlzIGNvbmZsaWN0ICcgK1xuICAgICAgICAgICAgJ21heSBiZSBkdWUgdG8g
YSBtaXhpbjsgaW4gcGFydGljdWxhciwgdGhpcyBtYXkgYmUgY2F1c2VkIGJ5IHR3byAnICtcbiAg
ICAgICAgICAgICdnZXRJbml0aWFsU3RhdGUoKSBvciBnZXREZWZhdWx0UHJvcHMoKSBtZXRob2Rz
IHJldHVybmluZyBvYmplY3RzICcgK1xuICAgICAgICAgICAgJ3dpdGggY2xhc2hpbmcga2V5cy4n
LFxuICAgICAgICAgIGtleVxuICAgICAgICApO1xuICAgICAgICBvbmVba2V5XSA9IHR3b1trZXld
O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb25lO1xuICB9XG5cbiAgLyoqXG4gICAqIENy
ZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgdHdvIGZ1bmN0aW9ucyBhbmQgbWVyZ2VzIHRo
ZWlyIHJldHVybiB2YWx1ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IG9uZSBGdW5j
dGlvbiB0byBpbnZva2UgZmlyc3QuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IHR3byBGdW5jdGlv
biB0byBpbnZva2Ugc2Vjb25kLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gRnVuY3Rpb24gdGhh
dCBpbnZva2VzIHRoZSB0d28gYXJndW1lbnQgZnVuY3Rpb25zLlxuICAgKiBAcHJpdmF0ZVxuICAg
Ki9cbiAgZnVuY3Rpb24gY3JlYXRlTWVyZ2VkUmVzdWx0RnVuY3Rpb24ob25lLCB0d28pIHtcbiAg
ICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VkUmVzdWx0KCkge1xuICAgICAgdmFyIGEgPSBvbmUuYXBw
bHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIHZhciBiID0gdHdvLmFwcGx5KHRoaXMsIGFyZ3Vt
ZW50cyk7XG4gICAgICBpZiAoYSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBiO1xuICAgICAg
fSBlbHNlIGlmIChiID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGE7XG4gICAgICB9XG4gICAg
ICB2YXIgYyA9IHt9O1xuICAgICAgbWVyZ2VJbnRvV2l0aE5vRHVwbGljYXRlS2V5cyhjLCBhKTtc
biAgICAgIG1lcmdlSW50b1dpdGhOb0R1cGxpY2F0ZUtleXMoYywgYik7XG4gICAgICByZXR1cm4g
YztcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGlu
dm9rZXMgdHdvIGZ1bmN0aW9ucyBhbmQgaWdub3JlcyB0aGVpciByZXR1cm4gdmFsZXMuXG4gICAq
XG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IG9uZSBGdW5jdGlvbiB0byBpbnZva2UgZmlyc3QuXG4g
ICAqIEBwYXJhbSB7ZnVuY3Rpb259IHR3byBGdW5jdGlvbiB0byBpbnZva2Ugc2Vjb25kLlxuICAg
KiBAcmV0dXJuIHtmdW5jdGlvbn0gRnVuY3Rpb24gdGhhdCBpbnZva2VzIHRoZSB0d28gYXJndW1l
bnQgZnVuY3Rpb25zLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZnVuY3Rpb24gY3JlYXRlQ2hh
aW5lZEZ1bmN0aW9uKG9uZSwgdHdvKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNoYWluZWRGdW5j
dGlvbigpIHtcbiAgICAgIG9uZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgdHdvLmFw
cGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kcyBh
IG1ldGhvZCB0byB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gY29t
cG9uZW50IENvbXBvbmVudCB3aG9zZSBtZXRob2QgaXMgZ29pbmcgdG8gYmUgYm91bmQuXG4gICAq
IEBwYXJhbSB7ZnVuY3Rpb259IG1ldGhvZCBNZXRob2QgdG8gYmUgYm91bmQuXG4gICAqIEByZXR1
cm4ge2Z1bmN0aW9ufSBUaGUgYm91bmQgbWV0aG9kLlxuICAgKi9cbiAgZnVuY3Rpb24gYmluZEF1
dG9CaW5kTWV0aG9kKGNvbXBvbmVudCwgbWV0aG9kKSB7XG4gICAgdmFyIGJvdW5kTWV0aG9kID0g
bWV0aG9kLmJpbmQoY29tcG9uZW50KTtcbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgIGJvdW5kTWV0
aG9kLl9fcmVhY3RCb3VuZENvbnRleHQgPSBjb21wb25lbnQ7XG4gICAgICBib3VuZE1ldGhvZC5f
X3JlYWN0Qm91bmRNZXRob2QgPSBtZXRob2Q7XG4gICAgICBib3VuZE1ldGhvZC5fX3JlYWN0Qm91
bmRBcmd1bWVudHMgPSBudWxsO1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBjb21wb25lbnQu
Y29uc3RydWN0b3IuZGlzcGxheU5hbWU7XG4gICAgICB2YXIgX2JpbmQgPSBib3VuZE1ldGhvZC5i
aW5kO1xuICAgICAgYm91bmRNZXRob2QuYmluZCA9IGZ1bmN0aW9uKG5ld1RoaXMpIHtcbiAgICAg
ICAgZm9yIChcbiAgICAgICAgICB2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgICAg
ICAgICBhcmdzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLFxuICAgICAgICAgICAg
X2tleSA9IDE7XG4gICAgICAgICAgX2tleSA8IF9sZW47XG4gICAgICAgICAgX2tleSsrXG4gICAg
ICAgICkge1xuICAgICAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAg
ICAgICB9XG5cbiAgICAgICAgLy8gVXNlciBpcyB0cnlpbmcgdG8gYmluZCgpIGFuIGF1dG9ib3Vu
ZCBtZXRob2Q7IHdlIGVmZmVjdGl2ZWx5IHdpbGxcbiAgICAgICAgLy8gaWdub3JlIHRoZSB2YWx1
ZSBvZiBcInRoaXNcIiB0aGF0IHRoZSB1c2VyIGlzIHRyeWluZyB0byB1c2UsIHNvXG4gICAgICAg
IC8vIGxldCdzIHdhcm4uXG4gICAgICAgIGlmIChuZXdUaGlzICE9PSBjb21wb25lbnQgJiYgbmV3
VGhpcyAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0g
J3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICB3YXJuaW5nKFxuICAgICAgICAgICAgICBmYWxz
ZSxcbiAgICAgICAgICAgICAgJ2JpbmQoKTogUmVhY3QgY29tcG9uZW50IG1ldGhvZHMgbWF5IG9u
bHkgYmUgYm91bmQgdG8gdGhlICcgK1xuICAgICAgICAgICAgICAgICdjb21wb25lbnQgaW5zdGFu
Y2UuIFNlZSAlcycsXG4gICAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICAgICAgICAgICk7
XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCFhcmdzLmxlbmd0aCkge1xuICAgICAg
ICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAg
ICAgICB3YXJuaW5nKFxuICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgJ2JpbmQo
KTogWW91IGFyZSBiaW5kaW5nIGEgY29tcG9uZW50IG1ldGhvZCB0byB0aGUgY29tcG9uZW50LiAn
ICtcbiAgICAgICAgICAgICAgICAnUmVhY3QgZG9lcyB0aGlzIGZvciB5b3UgYXV0b21hdGljYWxs
eSBpbiBhIGhpZ2gtcGVyZm9ybWFuY2UgJyArXG4gICAgICAgICAgICAgICAgJ3dheSwgc28geW91
IGNhbiBzYWZlbHkgcmVtb3ZlIHRoaXMgY2FsbC4gU2VlICVzJyxcbiAgICAgICAgICAgICAgY29t
cG9uZW50TmFtZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJu
IGJvdW5kTWV0aG9kO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZWJvdW5kTWV0aG9kID0gX2Jp
bmQuYXBwbHkoYm91bmRNZXRob2QsIGFyZ3VtZW50cyk7XG4gICAgICAgIHJlYm91bmRNZXRob2Qu
X19yZWFjdEJvdW5kQ29udGV4dCA9IGNvbXBvbmVudDtcbiAgICAgICAgcmVib3VuZE1ldGhvZC5f
X3JlYWN0Qm91bmRNZXRob2QgPSBtZXRob2Q7XG4gICAgICAgIHJlYm91bmRNZXRob2QuX19yZWFj
dEJvdW5kQXJndW1lbnRzID0gYXJncztcbiAgICAgICAgcmV0dXJuIHJlYm91bmRNZXRob2Q7XG4g
ICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gYm91bmRNZXRob2Q7XG4gIH1cblxuICAvKipcbiAg
ICogQmluZHMgYWxsIGF1dG8tYm91bmQgbWV0aG9kcyBpbiBhIGNvbXBvbmVudC5cbiAgICpcbiAg
ICogQHBhcmFtIHtvYmplY3R9IGNvbXBvbmVudCBDb21wb25lbnQgd2hvc2UgbWV0aG9kIGlzIGdv
aW5nIHRvIGJlIGJvdW5kLlxuICAgKi9cbiAgZnVuY3Rpb24gYmluZEF1dG9CaW5kTWV0aG9kcyhj
b21wb25lbnQpIHtcbiAgICB2YXIgcGFpcnMgPSBjb21wb25lbnQuX19yZWFjdEF1dG9CaW5kUGFp
cnM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYWlycy5sZW5ndGg7IGkgKz0gMikge1xuICAg
ICAgdmFyIGF1dG9CaW5kS2V5ID0gcGFpcnNbaV07XG4gICAgICB2YXIgbWV0aG9kID0gcGFpcnNb
aSArIDFdO1xuICAgICAgY29tcG9uZW50W2F1dG9CaW5kS2V5XSA9IGJpbmRBdXRvQmluZE1ldGhv
ZChjb21wb25lbnQsIG1ldGhvZCk7XG4gICAgfVxuICB9XG5cbiAgdmFyIElzTW91bnRlZFByZU1p
eGluID0ge1xuICAgIGNvbXBvbmVudERpZE1vdW50OiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMu
X19pc01vdW50ZWQgPSB0cnVlO1xuICAgIH1cbiAgfTtcblxuICB2YXIgSXNNb3VudGVkUG9zdE1p
eGluID0ge1xuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50OiBmdW5jdGlvbigpIHtcbiAgICAgIHRo
aXMuX19pc01vdW50ZWQgPSBmYWxzZTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEFkZCBt
b3JlIHRvIHRoZSBSZWFjdENsYXNzIGJhc2UgY2xhc3MuIFRoZXNlIGFyZSBhbGwgbGVnYWN5IGZl
YXR1cmVzIGFuZFxuICAgKiB0aGVyZWZvcmUgbm90IGFscmVhZHkgcGFydCBvZiB0aGUgbW9kZXJu
IFJlYWN0Q29tcG9uZW50LlxuICAgKi9cbiAgdmFyIFJlYWN0Q2xhc3NNaXhpbiA9IHtcbiAgICAv
KipcbiAgICAgKiBUT0RPOiBUaGlzIHdpbGwgYmUgZGVwcmVjYXRlZCBiZWNhdXNlIHN0YXRlIHNo
b3VsZCBhbHdheXMga2VlcCBhIGNvbnNpc3RlbnRcbiAgICAgKiB0eXBlIHNpZ25hdHVyZSBhbmQg
dGhlIG9ubHkgdXNlIGNhc2UgZm9yIHRoaXMsIGlzIHRvIGF2b2lkIHRoYXQuXG4gICAgICovXG4g
ICAgcmVwbGFjZVN0YXRlOiBmdW5jdGlvbihuZXdTdGF0ZSwgY2FsbGJhY2spIHtcbiAgICAgIHRo
aXMudXBkYXRlci5lbnF1ZXVlUmVwbGFjZVN0YXRlKHRoaXMsIG5ld1N0YXRlLCBjYWxsYmFjayk7
XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIG9yIG5vdCB0aGlzIGNv
bXBvc2l0ZSBjb21wb25lbnQgaXMgbW91bnRlZC5cbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBU
cnVlIGlmIG1vdW50ZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICAgKiBAcHJvdGVjdGVkXG4gICAg
ICogQGZpbmFsXG4gICAgICovXG4gICAgaXNNb3VudGVkOiBmdW5jdGlvbigpIHtcbiAgICAgIGlm
IChmYWxzZSkge1xuICAgICAgICB3YXJuaW5nKFxuICAgICAgICAgIHRoaXMuX19kaWRXYXJuSXNN
b3VudGVkLFxuICAgICAgICAgICclczogaXNNb3VudGVkIGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQs
IG1ha2Ugc3VyZSB0byBjbGVhbiB1cCAnICtcbiAgICAgICAgICAgICdzdWJzY3JpcHRpb25zIGFu
ZCBwZW5kaW5nIHJlcXVlc3RzIGluIGNvbXBvbmVudFdpbGxVbm1vdW50IHRvICcgK1xuICAgICAg
ICAgICAgJ3ByZXZlbnQgbWVtb3J5IGxlYWtzLicsXG4gICAgICAgICAgKHRoaXMuY29uc3RydWN0
b3IgJiYgdGhpcy5jb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSkgfHxcbiAgICAgICAgICAgIHRoaXMu
bmFtZSB8fFxuICAgICAgICAgICAgJ0NvbXBvbmVudCdcbiAgICAgICAgKTtcbiAgICAgICAgdGhp
cy5fX2RpZFdhcm5Jc01vdW50ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuICEhdGhp
cy5fX2lzTW91bnRlZDtcbiAgICB9XG4gIH07XG5cbiAgdmFyIFJlYWN0Q2xhc3NDb21wb25lbnQg
PSBmdW5jdGlvbigpIHt9O1xuICBfYXNzaWduKFxuICAgIFJlYWN0Q2xhc3NDb21wb25lbnQucHJv
dG90eXBlLFxuICAgIFJlYWN0Q29tcG9uZW50LnByb3RvdHlwZSxcbiAgICBSZWFjdENsYXNzTWl4
aW5cbiAgKTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGNvbXBvc2l0ZSBjb21wb25lbnQgY2xh
c3MgZ2l2ZW4gYSBjbGFzcyBzcGVjaWZpY2F0aW9uLlxuICAgKiBTZWUgaHR0cHM6Ly9mYWNlYm9v
ay5naXRodWIuaW8vcmVhY3QvZG9jcy90b3AtbGV2ZWwtYXBpLmh0bWwjcmVhY3QuY3JlYXRlY2xh
c3NcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHNwZWMgQ2xhc3Mgc3BlY2lmaWNhdGlvbiAo
d2hpY2ggbXVzdCBkZWZpbmUgYHJlbmRlcmApLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gQ29t
cG9uZW50IGNvbnN0cnVjdG9yIGZ1bmN0aW9uLlxuICAgKiBAcHVibGljXG4gICAqL1xuICBmdW5j
dGlvbiBjcmVhdGVDbGFzcyhzcGVjKSB7XG4gICAgLy8gVG8ga2VlcCBvdXIgd2FybmluZ3MgbW9y
ZSB1bmRlcnN0YW5kYWJsZSwgd2UnbGwgdXNlIGEgbGl0dGxlIGhhY2sgaGVyZSB0b1xuICAgIC8v
IGVuc3VyZSB0aGF0IENvbnN0cnVjdG9yLm5hbWUgIT09ICdDb25zdHJ1Y3RvcicuIFRoaXMgbWFr
ZXMgc3VyZSB3ZSBkb24ndFxuICAgIC8vIHVubmVjZXNzYXJpbHkgaWRlbnRpZnkgYSBjbGFzcyB3
aXRob3V0IGRpc3BsYXlOYW1lIGFzICdDb25zdHJ1Y3RvcicuXG4gICAgdmFyIENvbnN0cnVjdG9y
ID0gaWRlbnRpdHkoZnVuY3Rpb24ocHJvcHMsIGNvbnRleHQsIHVwZGF0ZXIpIHtcbiAgICAgIC8v
IFRoaXMgY29uc3RydWN0b3IgZ2V0cyBvdmVycmlkZGVuIGJ5IG1vY2tzLiBUaGUgYXJndW1lbnQg
aXMgdXNlZFxuICAgICAgLy8gYnkgbW9ja3MgdG8gYXNzZXJ0IG9uIHdoYXQgZ2V0cyBtb3VudGVk
LlxuXG4gICAgICBpZiAoZmFsc2UpIHtcbiAgICAgICAgd2FybmluZyhcbiAgICAgICAgICB0aGlz
IGluc3RhbmNlb2YgQ29uc3RydWN0b3IsXG4gICAgICAgICAgJ1NvbWV0aGluZyBpcyBjYWxsaW5n
IGEgUmVhY3QgY29tcG9uZW50IGRpcmVjdGx5LiBVc2UgYSBmYWN0b3J5IG9yICcgK1xuICAgICAg
ICAgICAgJ0pTWCBpbnN0ZWFkLiBTZWU6IGh0dHBzOi8vZmIubWUvcmVhY3QtbGVnYWN5ZmFjdG9y
eSdcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gV2lyZSB1cCBhdXRvLWJpbmRpbmdc
biAgICAgIGlmICh0aGlzLl9fcmVhY3RBdXRvQmluZFBhaXJzLmxlbmd0aCkge1xuICAgICAgICBi
aW5kQXV0b0JpbmRNZXRob2RzKHRoaXMpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnByb3BzID0g
cHJvcHM7XG4gICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgdGhpcy5yZWZzID0g
ZW1wdHlPYmplY3Q7XG4gICAgICB0aGlzLnVwZGF0ZXIgPSB1cGRhdGVyIHx8IFJlYWN0Tm9vcFVw
ZGF0ZVF1ZXVlO1xuXG4gICAgICB0aGlzLnN0YXRlID0gbnVsbDtcblxuICAgICAgLy8gUmVhY3RD
bGFzc2VzIGRvZXNuJ3QgaGF2ZSBjb25zdHJ1Y3RvcnMuIEluc3RlYWQsIHRoZXkgdXNlIHRoZVxu
ICAgICAgLy8gZ2V0SW5pdGlhbFN0YXRlIGFuZCBjb21wb25lbnRXaWxsTW91bnQgbWV0aG9kcyBm
b3IgaW5pdGlhbGl6YXRpb24uXG5cbiAgICAgIHZhciBpbml0aWFsU3RhdGUgPSB0aGlzLmdldElu
aXRpYWxTdGF0ZSA/IHRoaXMuZ2V0SW5pdGlhbFN0YXRlKCkgOiBudWxsO1xuICAgICAgaWYgKGZh
bHNlKSB7XG4gICAgICAgIC8vIFdlIGFsbG93IGF1dG8tbW9ja3MgdG8gcHJvY2VlZCBhcyBpZiB0
aGV5J3JlIHJldHVybmluZyBudWxsLlxuICAgICAgICBpZiAoXG4gICAgICAgICAgaW5pdGlhbFN0
YXRlID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICB0aGlzLmdldEluaXRpYWxTdGF0ZS5faXNN
b2NrRnVuY3Rpb25cbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBwcm9iYWJseSBi
YWQgcHJhY3RpY2UuIENvbnNpZGVyIHdhcm5pbmcgaGVyZSBhbmRcbiAgICAgICAgICAvLyBkZXBy
ZWNhdGluZyB0aGlzIGNvbnZlbmllbmNlLlxuICAgICAgICAgIGluaXRpYWxTdGF0ZSA9IG51bGw7
XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIF9pbnZhcmlhbnQoXG4gICAgICAgIHR5cGVvZiBp
bml0aWFsU3RhdGUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGluaXRpYWxTdGF0ZSks
XG4gICAgICAgICclcy5nZXRJbml0aWFsU3RhdGUoKTogbXVzdCByZXR1cm4gYW4gb2JqZWN0IG9y
IG51bGwnLFxuICAgICAgICBDb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSB8fCAnUmVhY3RDb21wb3Np
dGVDb21wb25lbnQnXG4gICAgICApO1xuXG4gICAgICB0aGlzLnN0YXRlID0gaW5pdGlhbFN0YXRl
O1xuICAgIH0pO1xuICAgIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IG5ldyBSZWFjdENsYXNzQ29t
cG9uZW50KCk7XG4gICAgQ29uc3RydWN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29uc3Ry
dWN0b3I7XG4gICAgQ29uc3RydWN0b3IucHJvdG90eXBlLl9fcmVhY3RBdXRvQmluZFBhaXJzID0g
W107XG5cbiAgICBpbmplY3RlZE1peGlucy5mb3JFYWNoKG1peFNwZWNJbnRvQ29tcG9uZW50LmJp
bmQobnVsbCwgQ29uc3RydWN0b3IpKTtcblxuICAgIG1peFNwZWNJbnRvQ29tcG9uZW50KENvbnN0
cnVjdG9yLCBJc01vdW50ZWRQcmVNaXhpbik7XG4gICAgbWl4U3BlY0ludG9Db21wb25lbnQoQ29u
c3RydWN0b3IsIHNwZWMpO1xuICAgIG1peFNwZWNJbnRvQ29tcG9uZW50KENvbnN0cnVjdG9yLCBJ
c01vdW50ZWRQb3N0TWl4aW4pO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgZGVmYXVsdFByb3Bz
IHByb3BlcnR5IGFmdGVyIGFsbCBtaXhpbnMgaGF2ZSBiZWVuIG1lcmdlZC5cbiAgICBpZiAoQ29u
c3RydWN0b3IuZ2V0RGVmYXVsdFByb3BzKSB7XG4gICAgICBDb25zdHJ1Y3Rvci5kZWZhdWx0UHJv
cHMgPSBDb25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMoKTtcbiAgICB9XG5cbiAgICBpZiAoZmFs
c2UpIHtcbiAgICAgIC8vIFRoaXMgaXMgYSB0YWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgdXNlIG9m
IHRoZXNlIG1ldGhvZCBuYW1lcyBpcyBvayxcbiAgICAgIC8vIHNpbmNlIGl0J3MgdXNlZCB3aXRo
IGNyZWF0ZUNsYXNzLiBJZiBpdCdzIG5vdCwgdGhlbiBpdCdzIGxpa2VseSBhXG4gICAgICAvLyBt
aXN0YWtlIHNvIHdlJ2xsIHdhcm4geW91IHRvIHVzZSB0aGUgc3RhdGljIHByb3BlcnR5LCBwcm9w
ZXJ0eVxuICAgICAgLy8gaW5pdGlhbGl6ZXIgb3IgY29uc3RydWN0b3IgcmVzcGVjdGl2ZWx5Llxu
ICAgICAgaWYgKENvbnN0cnVjdG9yLmdldERlZmF1bHRQcm9wcykge1xuICAgICAgICBDb25zdHJ1
Y3Rvci5nZXREZWZhdWx0UHJvcHMuaXNSZWFjdENsYXNzQXBwcm92ZWQgPSB7fTtcbiAgICAgIH1c
biAgICAgIGlmIChDb25zdHJ1Y3Rvci5wcm90b3R5cGUuZ2V0SW5pdGlhbFN0YXRlKSB7XG4gICAg
ICAgIENvbnN0cnVjdG9yLnByb3RvdHlwZS5nZXRJbml0aWFsU3RhdGUuaXNSZWFjdENsYXNzQXBw
cm92ZWQgPSB7fTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBfaW52YXJpYW50KFxuICAgICAgQ29u
c3RydWN0b3IucHJvdG90eXBlLnJlbmRlcixcbiAgICAgICdjcmVhdGVDbGFzcyguLi4pOiBDbGFz
cyBzcGVjaWZpY2F0aW9uIG11c3QgaW1wbGVtZW50IGEgYHJlbmRlcmAgbWV0aG9kLidcbiAgICAp
O1xuXG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICB3YXJuaW5nKFxuICAgICAgICAhQ29uc3RydWN0
b3IucHJvdG90eXBlLmNvbXBvbmVudFNob3VsZFVwZGF0ZSxcbiAgICAgICAgJyVzIGhhcyBhIG1l
dGhvZCBjYWxsZWQgJyArXG4gICAgICAgICAgJ2NvbXBvbmVudFNob3VsZFVwZGF0ZSgpLiBEaWQg
eW91IG1lYW4gc2hvdWxkQ29tcG9uZW50VXBkYXRlKCk/ICcgK1xuICAgICAgICAgICdUaGUgbmFt
ZSBpcyBwaHJhc2VkIGFzIGEgcXVlc3Rpb24gYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgJyArXG4g
ICAgICAgICAgJ2V4cGVjdGVkIHRvIHJldHVybiBhIHZhbHVlLicsXG4gICAgICAgIHNwZWMuZGlz
cGxheU5hbWUgfHwgJ0EgY29tcG9uZW50J1xuICAgICAgKTtcbiAgICAgIHdhcm5pbmcoXG4gICAg
ICAgICFDb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcyxcbiAg
ICAgICAgJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgJyArXG4gICAgICAgICAgJ2NvbXBvbmVudFdp
bGxSZWNpZXZlUHJvcHMoKS4gRGlkIHlvdSBtZWFuIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMo
KT8nLFxuICAgICAgICBzcGVjLmRpc3BsYXlOYW1lIHx8ICdBIGNvbXBvbmVudCdcbiAgICAgICk7
XG4gICAgfVxuXG4gICAgLy8gUmVkdWNlIHRpbWUgc3BlbnQgZG9pbmcgbG9va3VwcyBieSBzZXR0
aW5nIHRoZXNlIG9uIHRoZSBwcm90b3R5cGUuXG4gICAgZm9yICh2YXIgbWV0aG9kTmFtZSBpbiBS
ZWFjdENsYXNzSW50ZXJmYWNlKSB7XG4gICAgICBpZiAoIUNvbnN0cnVjdG9yLnByb3RvdHlwZVtt
ZXRob2ROYW1lXSkge1xuICAgICAgICBDb25zdHJ1Y3Rvci5wcm90b3R5cGVbbWV0aG9kTmFtZV0g
PSBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfVxu
XG4gIHJldHVybiBjcmVhdGVDbGFzcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5O1xu
XG5cbi8qKiovIH0pLFxuLyogMTE3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRz
LCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBDb3B5
cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5
bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJl
Y3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0
ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBk
aXJlY3RvcnkuXG4gKlxuICovXG5cblxudmFyIF9wcm9kSW52YXJpYW50ID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygxOCk7XG5cbnZhciBSZWFjdEVsZW1lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0
KTtcblxudmFyIGludmFyaWFudCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbi8qKlxuICog
UmV0dXJucyB0aGUgZmlyc3QgY2hpbGQgaW4gYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuIGFuZCB2
ZXJpZmllcyB0aGF0IHRoZXJlXG4gKiBpcyBvbmx5IG9uZSBjaGlsZCBpbiB0aGUgY29sbGVjdGlv
bi5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy90b3At
bGV2ZWwtYXBpLmh0bWwjcmVhY3QuY2hpbGRyZW4ub25seVxuICpcbiAqIFRoZSBjdXJyZW50IGlt
cGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IGEgc2luZ2xlIGNoaWxk
IGdldHNcbiAqIHBhc3NlZCB3aXRob3V0IGEgd3JhcHBlciwgYnV0IHRoZSBwdXJwb3NlIG9mIHRo
aXMgaGVscGVyIGZ1bmN0aW9uIGlzIHRvXG4gKiBhYnN0cmFjdCBhd2F5IHRoZSBwYXJ0aWN1bGFy
IHN0cnVjdHVyZSBvZiBjaGlsZHJlbi5cbiAqXG4gKiBAcGFyYW0gez9vYmplY3R9IGNoaWxkcmVu
IENoaWxkIGNvbGxlY3Rpb24gc3RydWN0dXJlLlxuICogQHJldHVybiB7UmVhY3RFbGVtZW50fSBU
aGUgZmlyc3QgYW5kIG9ubHkgYFJlYWN0RWxlbWVudGAgY29udGFpbmVkIGluIHRoZVxuICogc3Ry
dWN0dXJlLlxuICovXG5mdW5jdGlvbiBvbmx5Q2hpbGQoY2hpbGRyZW4pIHtcbiAgIVJlYWN0RWxl
bWVudC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgPyAgZmFsc2UgPyBpbnZhcmlhbnQoZmFsc2Us
ICdSZWFjdC5DaGlsZHJlbi5vbmx5IGV4cGVjdGVkIHRvIHJlY2VpdmUgYSBzaW5nbGUgUmVhY3Qg
ZWxlbWVudCBjaGlsZC4nKSA6IF9wcm9kSW52YXJpYW50KCcxNDMnKSA6IHZvaWQgMDtcbiAgcmV0
dXJuIGNoaWxkcmVuO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG9ubHlDaGlsZDtcblxuLyoqKi8g
fSksXG4vKiAxMTggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFj
a19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKDExOSk7XG5cblxuLyoqKi8gfSksXG4vKiAxMTkgKi9cbi8qKiov
IChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1
c2Ugc3RyaWN0XCI7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJ
bmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMg
bGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElD
RU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBh
ZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUg
UEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuLyogZ2xvYmFs
cyBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18qL1xuXG5cblxudmFyIFJlYWN0RE9NQ29t
cG9uZW50VHJlZSA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG52YXIgUmVhY3REZWZhdWx0SW5q
ZWN0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjApO1xudmFyIFJlYWN0TW91bnQgPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKDgyKTtcbnZhciBSZWFjdFJlY29uY2lsZXIgPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKDE2KTtcbnZhciBSZWFjdFVwZGF0ZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xu
dmFyIFJlYWN0VmVyc2lvbiA9IF9fd2VicGFja19yZXF1aXJlX18oMTkyKTtcblxudmFyIGZpbmRE
T01Ob2RlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTMpO1xudmFyIGdldEhvc3RDb21wb25lbnRG
cm9tQ29tcG9zaXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Myk7XG52YXIgcmVuZGVyU3VidHJl
ZUludG9Db250YWluZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5NCk7XG52YXIgd2FybmluZyA9
IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG5cblJlYWN0RGVmYXVsdEluamVjdGlvbi5pbmplY3Qo
KTtcblxudmFyIFJlYWN0RE9NID0ge1xuICBmaW5kRE9NTm9kZTogZmluZERPTU5vZGUsXG4gIHJl
bmRlcjogUmVhY3RNb3VudC5yZW5kZXIsXG4gIHVubW91bnRDb21wb25lbnRBdE5vZGU6IFJlYWN0
TW91bnQudW5tb3VudENvbXBvbmVudEF0Tm9kZSxcbiAgdmVyc2lvbjogUmVhY3RWZXJzaW9uLFxu
XG4gIC8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuICB1bnN0YWJsZV9iYXRjaGVkVXBk
YXRlczogUmVhY3RVcGRhdGVzLmJhdGNoZWRVcGRhdGVzLFxuICB1bnN0YWJsZV9yZW5kZXJTdWJ0
cmVlSW50b0NvbnRhaW5lcjogcmVuZGVyU3VidHJlZUludG9Db250YWluZXJcbiAgLyogZXNsaW50
LWVuYWJsZSBjYW1lbGNhc2UgKi9cbn07XG5cbi8vIEluamVjdCB0aGUgcnVudGltZSBpbnRvIGEg
ZGV2dG9vbHMgZ2xvYmFsIGhvb2sgcmVnYXJkbGVzcyBvZiBicm93c2VyLlxuLy8gQWxsb3dzIGZv
ciBkZWJ1Z2dpbmcgd2hlbiB0aGUgaG9vayBpcyBpbmplY3RlZCBvbiB0aGUgcGFnZS5cbmlmICh0
eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICE9PSAndW5kZWZpbmVkJyAmJiB0
eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmluamVjdCA9PT0gJ2Z1bmN0aW9u
Jykge1xuICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uaW5qZWN0KHtcbiAgICBDb21w
b25lbnRUcmVlOiB7XG4gICAgICBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZTogUmVhY3RET01D
b21wb25lbnRUcmVlLmdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlLFxuICAgICAgZ2V0Tm9kZUZy
b21JbnN0YW5jZTogZnVuY3Rpb24gKGluc3QpIHtcbiAgICAgICAgLy8gaW5zdCBpcyBhbiBpbnRl
cm5hbCBpbnN0YW5jZSAoYnV0IGNvdWxkIGJlIGEgY29tcG9zaXRlKVxuICAgICAgICBpZiAoaW5z
dC5fcmVuZGVyZWRDb21wb25lbnQpIHtcbiAgICAgICAgICBpbnN0ID0gZ2V0SG9zdENvbXBvbmVu
dEZyb21Db21wb3NpdGUoaW5zdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluc3QpIHtcbiAg
ICAgICAgICByZXR1cm4gUmVhY3RET01Db21wb25lbnRUcmVlLmdldE5vZGVGcm9tSW5zdGFuY2Uo
aW5zdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAg
IH1cbiAgICAgIH1cbiAgICB9LFxuICAgIE1vdW50OiBSZWFjdE1vdW50LFxuICAgIFJlY29uY2ls
ZXI6IFJlYWN0UmVjb25jaWxlclxuICB9KTtcbn1cblxuaWYgKGZhbHNlKSB7XG4gIHZhciBFeGVj
dXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoJ2ZianMvbGliL0V4ZWN1dGlvbkVudmlyb25tZW50
Jyk7XG4gIGlmIChFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00gJiYgd2luZG93LnRvcCA9
PT0gd2luZG93LnNlbGYpIHtcbiAgICAvLyBGaXJzdCBjaGVjayBpZiBkZXZ0b29scyBpcyBub3Qg
aW5zdGFsbGVkXG4gICAgaWYgKHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18g
PT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBJZiB3ZSdyZSBpbiBDaHJvbWUgb3IgRmlyZWZv
eCwgcHJvdmlkZSBhIGRvd25sb2FkIGxpbmsgaWYgbm90IGluc3RhbGxlZC5cbiAgICAgIGlmIChu
YXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0Nocm9tZScpID4gLTEgJiYgbmF2aWdhdG9yLnVz
ZXJBZ2VudC5pbmRleE9mKCdFZGdlJykgPT09IC0xIHx8IG5hdmlnYXRvci51c2VyQWdlbnQuaW5k
ZXhPZignRmlyZWZveCcpID4gLTEpIHtcbiAgICAgICAgLy8gRmlyZWZveCBkb2VzIG5vdCBoYXZl
IHRoZSBpc3N1ZSB3aXRoIGRldnRvb2xzIGxvYWRlZCBvdmVyIGZpbGU6Ly9cbiAgICAgICAgdmFy
IHNob3dGaWxlVXJsTWVzc2FnZSA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbC5pbmRleE9mKCdo
dHRwJykgPT09IC0xICYmIG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignRmlyZWZveCcpID09
PSAtMTtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnRG93bmxvYWQgdGhlIFJlYWN0IERldlRvb2xz
ICcgKyAoc2hvd0ZpbGVVcmxNZXNzYWdlID8gJ2FuZCB1c2UgYW4gSFRUUCBzZXJ2ZXIgKGluc3Rl
YWQgb2YgYSBmaWxlOiBVUkwpICcgOiAnJykgKyAnZm9yIGEgYmV0dGVyIGRldmVsb3BtZW50IGV4
cGVyaWVuY2U6ICcgKyAnaHR0cHM6Ly9mYi5tZS9yZWFjdC1kZXZ0b29scycpO1xuICAgICAgfVxu
ICAgIH1cblxuICAgIHZhciB0ZXN0RnVuYyA9IGZ1bmN0aW9uIHRlc3RGbigpIHt9O1xuICAgIHBy
b2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKCh0ZXN0RnVuYy5u
YW1lIHx8IHRlc3RGdW5jLnRvU3RyaW5nKCkpLmluZGV4T2YoJ3Rlc3RGbicpICE9PSAtMSwgXCJJ
dCBsb29rcyBsaWtlIHlvdSdyZSB1c2luZyBhIG1pbmlmaWVkIGNvcHkgb2YgdGhlIGRldmVsb3Bt
ZW50IGJ1aWxkIFwiICsgJ29mIFJlYWN0LiBXaGVuIGRlcGxveWluZyBSZWFjdCBhcHBzIHRvIHBy
b2R1Y3Rpb24sIG1ha2Ugc3VyZSB0byB1c2UgJyArICd0aGUgcHJvZHVjdGlvbiBidWlsZCB3aGlj
aCBza2lwcyBkZXZlbG9wbWVudCB3YXJuaW5ncyBhbmQgaXMgZmFzdGVyLiAnICsgJ1NlZSBodHRw
czovL2ZiLm1lL3JlYWN0LW1pbmlmaWNhdGlvbiBmb3IgbW9yZSBkZXRhaWxzLicpIDogdm9pZCAw
O1xuXG4gICAgLy8gSWYgd2UncmUgaW4gSUU4LCBjaGVjayB0byBzZWUgaWYgd2UgYXJlIGluIGNv
bXBhdGliaWxpdHkgbW9kZSBhbmQgcHJvdmlkZVxuICAgIC8vIGluZm9ybWF0aW9uIG9uIHByZXZl
bnRpbmcgY29tcGF0aWJpbGl0eSBtb2RlXG4gICAgdmFyIGllQ29tcGF0aWJpbGl0eU1vZGUgPSBk
b2N1bWVudC5kb2N1bWVudE1vZGUgJiYgZG9jdW1lbnQuZG9jdW1lbnRNb2RlIDwgODtcblxuICAg
IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKCFpZUNvbXBh
dGliaWxpdHlNb2RlLCAnSW50ZXJuZXQgRXhwbG9yZXIgaXMgcnVubmluZyBpbiBjb21wYXRpYmls
aXR5IG1vZGU7IHBsZWFzZSBhZGQgdGhlICcgKyAnZm9sbG93aW5nIHRhZyB0byB5b3VyIEhUTUwg
dG8gcHJldmVudCB0aGlzIGZyb20gaGFwcGVuaW5nOiAnICsgJzxtZXRhIGh0dHAtZXF1aXY9XCJY
LVVBLUNvbXBhdGlibGVcIiBjb250ZW50PVwiSUU9ZWRnZVwiIC8+JykgOiB2b2lkIDA7XG5cbiAg
ICB2YXIgZXhwZWN0ZWRGZWF0dXJlcyA9IFtcbiAgICAvLyBzaGltc1xuICAgIEFycmF5LmlzQXJy
YXksIEFycmF5LnByb3RvdHlwZS5ldmVyeSwgQXJyYXkucHJvdG90eXBlLmZvckVhY2gsIEFycmF5
LnByb3RvdHlwZS5pbmRleE9mLCBBcnJheS5wcm90b3R5cGUubWFwLCBEYXRlLm5vdywgRnVuY3Rp
b24ucHJvdG90eXBlLmJpbmQsIE9iamVjdC5rZXlzLCBTdHJpbmcucHJvdG90eXBlLnRyaW1dO1xu
XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHBlY3RlZEZlYXR1cmVzLmxlbmd0aDsgaSsrKSB7
XG4gICAgICBpZiAoIWV4cGVjdGVkRmVhdHVyZXNbaV0pIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYu
Tk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdPbmUgb3IgbW9yZSBF
UzUgc2hpbXMgZXhwZWN0ZWQgYnkgUmVhY3QgYXJlIG5vdCBhdmFpbGFibGU6ICcgKyAnaHR0cHM6
Ly9mYi5tZS9yZWFjdC13YXJuaW5nLXBvbHlmaWxscycpIDogdm9pZCAwO1xuICAgICAgICBicmVh
aztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuaWYgKGZhbHNlKSB7XG4gIHZhciBSZWFjdElu
c3RydW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vUmVhY3RJbnN0cnVtZW50YXRpb24nKTtcbiAgdmFy
IFJlYWN0RE9NVW5rbm93blByb3BlcnR5SG9vayA9IHJlcXVpcmUoJy4vUmVhY3RET01Vbmtub3du
UHJvcGVydHlIb29rJyk7XG4gIHZhciBSZWFjdERPTU51bGxJbnB1dFZhbHVlUHJvcEhvb2sgPSBy
ZXF1aXJlKCcuL1JlYWN0RE9NTnVsbElucHV0VmFsdWVQcm9wSG9vaycpO1xuICB2YXIgUmVhY3RE
T01JbnZhbGlkQVJJQUhvb2sgPSByZXF1aXJlKCcuL1JlYWN0RE9NSW52YWxpZEFSSUFIb29rJyk7
XG5cbiAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLmFkZEhvb2soUmVhY3RET01Vbmtu
b3duUHJvcGVydHlIb29rKTtcbiAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLmFkZEhv
b2soUmVhY3RET01OdWxsSW5wdXRWYWx1ZVByb3BIb29rKTtcbiAgUmVhY3RJbnN0cnVtZW50YXRp
b24uZGVidWdUb29sLmFkZEhvb2soUmVhY3RET01JbnZhbGlkQVJJQUhvb2spO1xufVxuXG5tb2R1
bGUuZXhwb3J0cyA9IFJlYWN0RE9NO1xuXG4vKioqLyB9KSxcbi8qIDEyMCAqL1xuLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBz
dHJpY3RcIjtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5c
biAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNl
bnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNF
IGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0
aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRF
TlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG5cblxudmFyIEFSSUFE
T01Qcm9wZXJ0eUNvbmZpZyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIxKTtcbnZhciBCZWZvcmVJ
bnB1dEV2ZW50UGx1Z2luID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjIpO1xudmFyIENoYW5nZUV2
ZW50UGx1Z2luID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjYpO1xudmFyIERlZmF1bHRFdmVudFBs
dWdpbk9yZGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjkpO1xudmFyIEVudGVyTGVhdmVFdmVu
dFBsdWdpbiA9IF9fd2VicGFja19yZXF1aXJlX18oMTMwKTtcbnZhciBIVE1MRE9NUHJvcGVydHlD
b25maWcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzMSk7XG52YXIgUmVhY3RDb21wb25lbnRCcm93
c2VyRW52aXJvbm1lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzMik7XG52YXIgUmVhY3RET01D
b21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzOCk7XG52YXIgUmVhY3RET01Db21wb25l
bnRUcmVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcbnZhciBSZWFjdERPTUVtcHR5Q29tcG9u
ZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNjMpO1xudmFyIFJlYWN0RE9NVHJlZVRyYXZlcnNh
bCA9IF9fd2VicGFja19yZXF1aXJlX18oMTY0KTtcbnZhciBSZWFjdERPTVRleHRDb21wb25lbnQg
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2NSk7XG52YXIgUmVhY3REZWZhdWx0QmF0Y2hpbmdTdHJh
dGVneSA9IF9fd2VicGFja19yZXF1aXJlX18oMTY2KTtcbnZhciBSZWFjdEV2ZW50TGlzdGVuZXIg
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2Nyk7XG52YXIgUmVhY3RJbmplY3Rpb24gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKDE2OSk7XG52YXIgUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbiA9IF9fd2Vi
cGFja19yZXF1aXJlX18oMTcwKTtcbnZhciBTVkdET01Qcm9wZXJ0eUNvbmZpZyA9IF9fd2VicGFj
a19yZXF1aXJlX18oMTc2KTtcbnZhciBTZWxlY3RFdmVudFBsdWdpbiA9IF9fd2VicGFja19yZXF1
aXJlX18oMTc3KTtcbnZhciBTaW1wbGVFdmVudFBsdWdpbiA9IF9fd2VicGFja19yZXF1aXJlX18o
MTc4KTtcblxudmFyIGFscmVhZHlJbmplY3RlZCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBpbmplY3Qo
KSB7XG4gIGlmIChhbHJlYWR5SW5qZWN0ZWQpIHtcbiAgICAvLyBUT0RPOiBUaGlzIGlzIGN1cnJl
bnRseSB0cnVlIGJlY2F1c2UgdGhlc2UgaW5qZWN0aW9ucyBhcmUgc2hhcmVkIGJldHdlZW5cbiAg
ICAvLyB0aGUgY2xpZW50IGFuZCB0aGUgc2VydmVyIHBhY2thZ2UuIFRoZXkgc2hvdWxkIGJlIGJ1
aWx0IGluZGVwZW5kZW50bHlcbiAgICAvLyBhbmQgbm90IHNoYXJlIGFueSBpbmplY3Rpb24gc3Rh
dGUuIFRoZW4gdGhpcyBwcm9ibGVtIHdpbGwgYmUgc29sdmVkLlxuICAgIHJldHVybjtcbiAgfVxu
ICBhbHJlYWR5SW5qZWN0ZWQgPSB0cnVlO1xuXG4gIFJlYWN0SW5qZWN0aW9uLkV2ZW50RW1pdHRl
ci5pbmplY3RSZWFjdEV2ZW50TGlzdGVuZXIoUmVhY3RFdmVudExpc3RlbmVyKTtcblxuICAvKipc
biAgICogSW5qZWN0IG1vZHVsZXMgZm9yIHJlc29sdmluZyBET00gaGllcmFyY2h5IGFuZCBwbHVn
aW4gb3JkZXJpbmcuXG4gICAqL1xuICBSZWFjdEluamVjdGlvbi5FdmVudFBsdWdpbkh1Yi5pbmpl
Y3RFdmVudFBsdWdpbk9yZGVyKERlZmF1bHRFdmVudFBsdWdpbk9yZGVyKTtcbiAgUmVhY3RJbmpl
Y3Rpb24uRXZlbnRQbHVnaW5VdGlscy5pbmplY3RDb21wb25lbnRUcmVlKFJlYWN0RE9NQ29tcG9u
ZW50VHJlZSk7XG4gIFJlYWN0SW5qZWN0aW9uLkV2ZW50UGx1Z2luVXRpbHMuaW5qZWN0VHJlZVRy
YXZlcnNhbChSZWFjdERPTVRyZWVUcmF2ZXJzYWwpO1xuXG4gIC8qKlxuICAgKiBTb21lIGltcG9y
dGFudCBldmVudCBwbHVnaW5zIGluY2x1ZGVkIGJ5IGRlZmF1bHQgKHdpdGhvdXQgaGF2aW5nIHRv
IHJlcXVpcmVcbiAgICogdGhlbSkuXG4gICAqL1xuICBSZWFjdEluamVjdGlvbi5FdmVudFBsdWdp
bkh1Yi5pbmplY3RFdmVudFBsdWdpbnNCeU5hbWUoe1xuICAgIFNpbXBsZUV2ZW50UGx1Z2luOiBT
aW1wbGVFdmVudFBsdWdpbixcbiAgICBFbnRlckxlYXZlRXZlbnRQbHVnaW46IEVudGVyTGVhdmVF
dmVudFBsdWdpbixcbiAgICBDaGFuZ2VFdmVudFBsdWdpbjogQ2hhbmdlRXZlbnRQbHVnaW4sXG4g
ICAgU2VsZWN0RXZlbnRQbHVnaW46IFNlbGVjdEV2ZW50UGx1Z2luLFxuICAgIEJlZm9yZUlucHV0
RXZlbnRQbHVnaW46IEJlZm9yZUlucHV0RXZlbnRQbHVnaW5cbiAgfSk7XG5cbiAgUmVhY3RJbmpl
Y3Rpb24uSG9zdENvbXBvbmVudC5pbmplY3RHZW5lcmljQ29tcG9uZW50Q2xhc3MoUmVhY3RET01D
b21wb25lbnQpO1xuXG4gIFJlYWN0SW5qZWN0aW9uLkhvc3RDb21wb25lbnQuaW5qZWN0VGV4dENv
bXBvbmVudENsYXNzKFJlYWN0RE9NVGV4dENvbXBvbmVudCk7XG5cbiAgUmVhY3RJbmplY3Rpb24u
RE9NUHJvcGVydHkuaW5qZWN0RE9NUHJvcGVydHlDb25maWcoQVJJQURPTVByb3BlcnR5Q29uZmln
KTtcbiAgUmVhY3RJbmplY3Rpb24uRE9NUHJvcGVydHkuaW5qZWN0RE9NUHJvcGVydHlDb25maWco
SFRNTERPTVByb3BlcnR5Q29uZmlnKTtcbiAgUmVhY3RJbmplY3Rpb24uRE9NUHJvcGVydHkuaW5q
ZWN0RE9NUHJvcGVydHlDb25maWcoU1ZHRE9NUHJvcGVydHlDb25maWcpO1xuXG4gIFJlYWN0SW5q
ZWN0aW9uLkVtcHR5Q29tcG9uZW50LmluamVjdEVtcHR5Q29tcG9uZW50RmFjdG9yeShmdW5jdGlv
biAoaW5zdGFudGlhdGUpIHtcbiAgICByZXR1cm4gbmV3IFJlYWN0RE9NRW1wdHlDb21wb25lbnQo
aW5zdGFudGlhdGUpO1xuICB9KTtcblxuICBSZWFjdEluamVjdGlvbi5VcGRhdGVzLmluamVjdFJl
Y29uY2lsZVRyYW5zYWN0aW9uKFJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24pO1xuICBSZWFjdElu
amVjdGlvbi5VcGRhdGVzLmluamVjdEJhdGNoaW5nU3RyYXRlZ3koUmVhY3REZWZhdWx0QmF0Y2hp
bmdTdHJhdGVneSk7XG5cbiAgUmVhY3RJbmplY3Rpb24uQ29tcG9uZW50LmluamVjdEVudmlyb25t
ZW50KFJlYWN0Q29tcG9uZW50QnJvd3NlckVudmlyb25tZW50KTtcbn1cblxubW9kdWxlLmV4cG9y
dHMgPSB7XG4gIGluamVjdDogaW5qZWN0XG59O1xuXG4vKioqLyB9KSxcbi8qIDEyMSAqL1xuLyoq
Ki8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5c
InVzZSBzdHJpY3RcIjtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ss
IEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBp
cyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBM
SUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFu
IGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRo
ZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG5cblxudmFy
IEFSSUFET01Qcm9wZXJ0eUNvbmZpZyA9IHtcbiAgUHJvcGVydGllczoge1xuICAgIC8vIEdsb2Jh
bCBTdGF0ZXMgYW5kIFByb3BlcnRpZXNcbiAgICAnYXJpYS1jdXJyZW50JzogMCwgLy8gc3RhdGVc
biAgICAnYXJpYS1kZXRhaWxzJzogMCxcbiAgICAnYXJpYS1kaXNhYmxlZCc6IDAsIC8vIHN0YXRl
XG4gICAgJ2FyaWEtaGlkZGVuJzogMCwgLy8gc3RhdGVcbiAgICAnYXJpYS1pbnZhbGlkJzogMCwg
Ly8gc3RhdGVcbiAgICAnYXJpYS1rZXlzaG9ydGN1dHMnOiAwLFxuICAgICdhcmlhLWxhYmVsJzog
MCxcbiAgICAnYXJpYS1yb2xlZGVzY3JpcHRpb24nOiAwLFxuICAgIC8vIFdpZGdldCBBdHRyaWJ1
dGVzXG4gICAgJ2FyaWEtYXV0b2NvbXBsZXRlJzogMCxcbiAgICAnYXJpYS1jaGVja2VkJzogMCxc
biAgICAnYXJpYS1leHBhbmRlZCc6IDAsXG4gICAgJ2FyaWEtaGFzcG9wdXAnOiAwLFxuICAgICdh
cmlhLWxldmVsJzogMCxcbiAgICAnYXJpYS1tb2RhbCc6IDAsXG4gICAgJ2FyaWEtbXVsdGlsaW5l
JzogMCxcbiAgICAnYXJpYS1tdWx0aXNlbGVjdGFibGUnOiAwLFxuICAgICdhcmlhLW9yaWVudGF0
aW9uJzogMCxcbiAgICAnYXJpYS1wbGFjZWhvbGRlcic6IDAsXG4gICAgJ2FyaWEtcHJlc3NlZCc6
IDAsXG4gICAgJ2FyaWEtcmVhZG9ubHknOiAwLFxuICAgICdhcmlhLXJlcXVpcmVkJzogMCxcbiAg
ICAnYXJpYS1zZWxlY3RlZCc6IDAsXG4gICAgJ2FyaWEtc29ydCc6IDAsXG4gICAgJ2FyaWEtdmFs
dWVtYXgnOiAwLFxuICAgICdhcmlhLXZhbHVlbWluJzogMCxcbiAgICAnYXJpYS12YWx1ZW5vdyc6
IDAsXG4gICAgJ2FyaWEtdmFsdWV0ZXh0JzogMCxcbiAgICAvLyBMaXZlIFJlZ2lvbiBBdHRyaWJ1
dGVzXG4gICAgJ2FyaWEtYXRvbWljJzogMCxcbiAgICAnYXJpYS1idXN5JzogMCxcbiAgICAnYXJp
YS1saXZlJzogMCxcbiAgICAnYXJpYS1yZWxldmFudCc6IDAsXG4gICAgLy8gRHJhZy1hbmQtRHJv
cCBBdHRyaWJ1dGVzXG4gICAgJ2FyaWEtZHJvcGVmZmVjdCc6IDAsXG4gICAgJ2FyaWEtZ3JhYmJl
ZCc6IDAsXG4gICAgLy8gUmVsYXRpb25zaGlwIEF0dHJpYnV0ZXNcbiAgICAnYXJpYS1hY3RpdmVk
ZXNjZW5kYW50JzogMCxcbiAgICAnYXJpYS1jb2xjb3VudCc6IDAsXG4gICAgJ2FyaWEtY29saW5k
ZXgnOiAwLFxuICAgICdhcmlhLWNvbHNwYW4nOiAwLFxuICAgICdhcmlhLWNvbnRyb2xzJzogMCxc
biAgICAnYXJpYS1kZXNjcmliZWRieSc6IDAsXG4gICAgJ2FyaWEtZXJyb3JtZXNzYWdlJzogMCxc
biAgICAnYXJpYS1mbG93dG8nOiAwLFxuICAgICdhcmlhLWxhYmVsbGVkYnknOiAwLFxuICAgICdh
cmlhLW93bnMnOiAwLFxuICAgICdhcmlhLXBvc2luc2V0JzogMCxcbiAgICAnYXJpYS1yb3djb3Vu
dCc6IDAsXG4gICAgJ2FyaWEtcm93aW5kZXgnOiAwLFxuICAgICdhcmlhLXJvd3NwYW4nOiAwLFxu
ICAgICdhcmlhLXNldHNpemUnOiAwXG4gIH0sXG4gIERPTUF0dHJpYnV0ZU5hbWVzOiB7fSxcbiAg
RE9NUHJvcGVydHlOYW1lczoge31cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQVJJQURPTVByb3Bl
cnR5Q29uZmlnO1xuXG4vKioqLyB9KSxcbi8qIDEyMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVs
ZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8q
KlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0
cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRo
ZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxu
ICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0
aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cblxuXG52YXIgRXZlbnRQcm9wYWdhdG9ycyA9
IF9fd2VicGFja19yZXF1aXJlX18oMTkpO1xudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gX193
ZWJwYWNrX3JlcXVpcmVfXyg1KTtcbnZhciBGYWxsYmFja0NvbXBvc2l0aW9uU3RhdGUgPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKDEyMyk7XG52YXIgU3ludGhldGljQ29tcG9zaXRpb25FdmVudCA9IF9f
d2VicGFja19yZXF1aXJlX18oMTI0KTtcbnZhciBTeW50aGV0aWNJbnB1dEV2ZW50ID0gX193ZWJw
YWNrX3JlcXVpcmVfXygxMjUpO1xuXG52YXIgRU5EX0tFWUNPREVTID0gWzksIDEzLCAyNywgMzJd
OyAvLyBUYWIsIFJldHVybiwgRXNjLCBTcGFjZVxudmFyIFNUQVJUX0tFWUNPREUgPSAyMjk7XG5c
bnZhciBjYW5Vc2VDb21wb3NpdGlvbkV2ZW50ID0gRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNl
RE9NICYmICdDb21wb3NpdGlvbkV2ZW50JyBpbiB3aW5kb3c7XG5cbnZhciBkb2N1bWVudE1vZGUg
PSBudWxsO1xuaWYgKEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSAmJiAnZG9jdW1lbnRN
b2RlJyBpbiBkb2N1bWVudCkge1xuICBkb2N1bWVudE1vZGUgPSBkb2N1bWVudC5kb2N1bWVudE1v
ZGU7XG59XG5cbi8vIFdlYmtpdCBvZmZlcnMgYSB2ZXJ5IHVzZWZ1bCBgdGV4dElucHV0YCBldmVu
dCB0aGF0IGNhbiBiZSB1c2VkIHRvXG4vLyBkaXJlY3RseSByZXByZXNlbnQgYGJlZm9yZUlucHV0
YC4gVGhlIElFIGB0ZXh0aW5wdXRgIGV2ZW50IGlzIG5vdCBhc1xuLy8gdXNlZnVsLCBzbyB3ZSBk
b24ndCB1c2UgaXQuXG52YXIgY2FuVXNlVGV4dElucHV0RXZlbnQgPSBFeGVjdXRpb25FbnZpcm9u
bWVudC5jYW5Vc2VET00gJiYgJ1RleHRFdmVudCcgaW4gd2luZG93ICYmICFkb2N1bWVudE1vZGUg
JiYgIWlzUHJlc3RvKCk7XG5cbi8vIEluIElFOSssIHdlIGhhdmUgYWNjZXNzIHRvIGNvbXBvc2l0
aW9uIGV2ZW50cywgYnV0IHRoZSBkYXRhIHN1cHBsaWVkXG4vLyBieSB0aGUgbmF0aXZlIGNvbXBv
c2l0aW9uZW5kIGV2ZW50IG1heSBiZSBpbmNvcnJlY3QuIEphcGFuZXNlIGlkZW9ncmFwaGljXG4v
LyBzcGFjZXMsIGZvciBpbnN0YW5jZSAoXFx1MzAwMCkgYXJlIG5vdCByZWNvcmRlZCBjb3JyZWN0
bHkuXG52YXIgdXNlRmFsbGJhY2tDb21wb3NpdGlvbkRhdGEgPSBFeGVjdXRpb25FbnZpcm9ubWVu
dC5jYW5Vc2VET00gJiYgKCFjYW5Vc2VDb21wb3NpdGlvbkV2ZW50IHx8IGRvY3VtZW50TW9kZSAm
JiBkb2N1bWVudE1vZGUgPiA4ICYmIGRvY3VtZW50TW9kZSA8PSAxMSk7XG5cbi8qKlxuICogT3Bl
cmEgPD0gMTIgaW5jbHVkZXMgVGV4dEV2ZW50IGluIHdpbmRvdywgYnV0IGRvZXMgbm90IGZpcmVc
biAqIHRleHQgaW5wdXQgZXZlbnRzLiBSZWx5IG9uIGtleXByZXNzIGluc3RlYWQuXG4gKi9cbmZ1
bmN0aW9uIGlzUHJlc3RvKCkge1xuICB2YXIgb3BlcmEgPSB3aW5kb3cub3BlcmE7XG4gIHJldHVy
biB0eXBlb2Ygb3BlcmEgPT09ICdvYmplY3QnICYmIHR5cGVvZiBvcGVyYS52ZXJzaW9uID09PSAn
ZnVuY3Rpb24nICYmIHBhcnNlSW50KG9wZXJhLnZlcnNpb24oKSwgMTApIDw9IDEyO1xufVxuXG52
YXIgU1BBQ0VCQVJfQ09ERSA9IDMyO1xudmFyIFNQQUNFQkFSX0NIQVIgPSBTdHJpbmcuZnJvbUNo
YXJDb2RlKFNQQUNFQkFSX0NPREUpO1xuXG4vLyBFdmVudHMgYW5kIHRoZWlyIGNvcnJlc3BvbmRp
bmcgcHJvcGVydHkgbmFtZXMuXG52YXIgZXZlbnRUeXBlcyA9IHtcbiAgYmVmb3JlSW5wdXQ6IHtc
biAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDogJ29uQmVmb3Jl
SW5wdXQnLFxuICAgICAgY2FwdHVyZWQ6ICdvbkJlZm9yZUlucHV0Q2FwdHVyZSdcbiAgICB9LFxu
ICAgIGRlcGVuZGVuY2llczogWyd0b3BDb21wb3NpdGlvbkVuZCcsICd0b3BLZXlQcmVzcycsICd0
b3BUZXh0SW5wdXQnLCAndG9wUGFzdGUnXVxuICB9LFxuICBjb21wb3NpdGlvbkVuZDoge1xuICAg
IHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiAnb25Db21wb3NpdGlv
bkVuZCcsXG4gICAgICBjYXB0dXJlZDogJ29uQ29tcG9zaXRpb25FbmRDYXB0dXJlJ1xuICAgIH0s
XG4gICAgZGVwZW5kZW5jaWVzOiBbJ3RvcEJsdXInLCAndG9wQ29tcG9zaXRpb25FbmQnLCAndG9w
S2V5RG93bicsICd0b3BLZXlQcmVzcycsICd0b3BLZXlVcCcsICd0b3BNb3VzZURvd24nXVxuICB9
LFxuICBjb21wb3NpdGlvblN0YXJ0OiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtc
biAgICAgIGJ1YmJsZWQ6ICdvbkNvbXBvc2l0aW9uU3RhcnQnLFxuICAgICAgY2FwdHVyZWQ6ICdv
bkNvbXBvc2l0aW9uU3RhcnRDYXB0dXJlJ1xuICAgIH0sXG4gICAgZGVwZW5kZW5jaWVzOiBbJ3Rv
cEJsdXInLCAndG9wQ29tcG9zaXRpb25TdGFydCcsICd0b3BLZXlEb3duJywgJ3RvcEtleVByZXNz
JywgJ3RvcEtleVVwJywgJ3RvcE1vdXNlRG93biddXG4gIH0sXG4gIGNvbXBvc2l0aW9uVXBkYXRl
OiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6ICdvbkNv
bXBvc2l0aW9uVXBkYXRlJyxcbiAgICAgIGNhcHR1cmVkOiAnb25Db21wb3NpdGlvblVwZGF0ZUNh
cHR1cmUnXG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6IFsndG9wQmx1cicsICd0b3BDb21wb3Np
dGlvblVwZGF0ZScsICd0b3BLZXlEb3duJywgJ3RvcEtleVByZXNzJywgJ3RvcEtleVVwJywgJ3Rv
cE1vdXNlRG93biddXG4gIH1cbn07XG5cbi8vIFRyYWNrIHdoZXRoZXIgd2UndmUgZXZlciBoYW5k
bGVkIGEga2V5cHJlc3Mgb24gdGhlIHNwYWNlIGtleS5cbnZhciBoYXNTcGFjZUtleXByZXNzID0g
ZmFsc2U7XG5cbi8qKlxuICogUmV0dXJuIHdoZXRoZXIgYSBuYXRpdmUga2V5cHJlc3MgZXZlbnQg
aXMgYXNzdW1lZCB0byBiZSBhIGNvbW1hbmQuXG4gKiBUaGlzIGlzIHJlcXVpcmVkIGJlY2F1c2Ug
RmlyZWZveCBmaXJlcyBga2V5cHJlc3NgIGV2ZW50cyBmb3Iga2V5IGNvbW1hbmRzXG4gKiAoY3V0
LCBjb3B5LCBzZWxlY3QtYWxsLCBldGMuKSBldmVuIHRob3VnaCBubyBjaGFyYWN0ZXIgaXMgaW5z
ZXJ0ZWQuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5cHJlc3NDb21tYW5kKG5hdGl2ZUV2ZW50KSB7XG4g
IHJldHVybiAobmF0aXZlRXZlbnQuY3RybEtleSB8fCBuYXRpdmVFdmVudC5hbHRLZXkgfHwgbmF0
aXZlRXZlbnQubWV0YUtleSkgJiZcbiAgLy8gY3RybEtleSAmJiBhbHRLZXkgaXMgZXF1aXZhbGVu
dCB0byBBbHRHciwgYW5kIGlzIG5vdCBhIGNvbW1hbmQuXG4gICEobmF0aXZlRXZlbnQuY3RybEtl
eSAmJiBuYXRpdmVFdmVudC5hbHRLZXkpO1xufVxuXG4vKipcbiAqIFRyYW5zbGF0ZSBuYXRpdmUg
dG9wIGxldmVsIGV2ZW50cyBpbnRvIGV2ZW50IHR5cGVzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5n
fSB0b3BMZXZlbFR5cGVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gZ2V0Q29t
cG9zaXRpb25FdmVudFR5cGUodG9wTGV2ZWxUeXBlKSB7XG4gIHN3aXRjaCAodG9wTGV2ZWxUeXBl
KSB7XG4gICAgY2FzZSAndG9wQ29tcG9zaXRpb25TdGFydCc6XG4gICAgICByZXR1cm4gZXZlbnRU
eXBlcy5jb21wb3NpdGlvblN0YXJ0O1xuICAgIGNhc2UgJ3RvcENvbXBvc2l0aW9uRW5kJzpcbiAg
ICAgIHJldHVybiBldmVudFR5cGVzLmNvbXBvc2l0aW9uRW5kO1xuICAgIGNhc2UgJ3RvcENvbXBv
c2l0aW9uVXBkYXRlJzpcbiAgICAgIHJldHVybiBldmVudFR5cGVzLmNvbXBvc2l0aW9uVXBkYXRl
O1xuICB9XG59XG5cbi8qKlxuICogRG9lcyBvdXIgZmFsbGJhY2sgYmVzdC1ndWVzcyBtb2RlbCB0
aGluayB0aGlzIGV2ZW50IHNpZ25pZmllcyB0aGF0XG4gKiBjb21wb3NpdGlvbiBoYXMgYmVndW4/
XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVHlwZVxuICogQHBhcmFtIHtvYmplY3R9
IG5hdGl2ZUV2ZW50XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0ZhbGxi
YWNrQ29tcG9zaXRpb25TdGFydCh0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVy
biB0b3BMZXZlbFR5cGUgPT09ICd0b3BLZXlEb3duJyAmJiBuYXRpdmVFdmVudC5rZXlDb2RlID09
PSBTVEFSVF9LRVlDT0RFO1xufVxuXG4vKipcbiAqIERvZXMgb3VyIGZhbGxiYWNrIG1vZGUgdGhp
bmsgdGhhdCB0aGlzIGV2ZW50IGlzIHRoZSBlbmQgb2YgY29tcG9zaXRpb24/XG4gKlxuICogQHBh
cmFtIHtzdHJpbmd9IHRvcExldmVsVHlwZVxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50
XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0ZhbGxiYWNrQ29tcG9zaXRp
b25FbmQodG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCkge1xuICBzd2l0Y2ggKHRvcExldmVsVHlw
ZSkge1xuICAgIGNhc2UgJ3RvcEtleVVwJzpcbiAgICAgIC8vIENvbW1hbmQga2V5cyBpbnNlcnQg
b3IgY2xlYXIgSU1FIGlucHV0LlxuICAgICAgcmV0dXJuIEVORF9LRVlDT0RFUy5pbmRleE9mKG5h
dGl2ZUV2ZW50LmtleUNvZGUpICE9PSAtMTtcbiAgICBjYXNlICd0b3BLZXlEb3duJzpcbiAgICAg
IC8vIEV4cGVjdCBJTUUga2V5Q29kZSBvbiBlYWNoIGtleWRvd24uIElmIHdlIGdldCBhbnkgb3Ro
ZXJcbiAgICAgIC8vIGNvZGUgd2UgbXVzdCBoYXZlIGV4aXRlZCBlYXJsaWVyLlxuICAgICAgcmV0
dXJuIG5hdGl2ZUV2ZW50LmtleUNvZGUgIT09IFNUQVJUX0tFWUNPREU7XG4gICAgY2FzZSAndG9w
S2V5UHJlc3MnOlxuICAgIGNhc2UgJ3RvcE1vdXNlRG93bic6XG4gICAgY2FzZSAndG9wQmx1cic6
XG4gICAgICAvLyBFdmVudHMgYXJlIG5vdCBwb3NzaWJsZSB3aXRob3V0IGNhbmNlbGxpbmcgSU1F
LlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtc
biAgfVxufVxuXG4vKipcbiAqIEdvb2dsZSBJbnB1dCBUb29scyBwcm92aWRlcyBjb21wb3NpdGlv
biBkYXRhIHZpYSBhIEN1c3RvbUV2ZW50LFxuICogd2l0aCB0aGUgYGRhdGFgIHByb3BlcnR5IHBv
cHVsYXRlZCBpbiB0aGUgYGRldGFpbGAgb2JqZWN0LiBJZiB0aGlzXG4gKiBpcyBhdmFpbGFibGUg
b24gdGhlIGV2ZW50IG9iamVjdCwgdXNlIGl0LiBJZiBub3QsIHRoaXMgaXMgYSBwbGFpblxuICog
Y29tcG9zaXRpb24gZXZlbnQgYW5kIHdlIGhhdmUgbm90aGluZyBzcGVjaWFsIHRvIGV4dHJhY3Qu
XG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50XG4gKiBAcmV0dXJuIHs/c3RyaW5n
fVxuICovXG5mdW5jdGlvbiBnZXREYXRhRnJvbUN1c3RvbUV2ZW50KG5hdGl2ZUV2ZW50KSB7XG4g
IHZhciBkZXRhaWwgPSBuYXRpdmVFdmVudC5kZXRhaWw7XG4gIGlmICh0eXBlb2YgZGV0YWlsID09
PSAnb2JqZWN0JyAmJiAnZGF0YScgaW4gZGV0YWlsKSB7XG4gICAgcmV0dXJuIGRldGFpbC5kYXRh
O1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBUcmFjayB0aGUgY3VycmVudCBJTUUgY29t
cG9zaXRpb24gZmFsbGJhY2sgb2JqZWN0LCBpZiBhbnkuXG52YXIgY3VycmVudENvbXBvc2l0aW9u
ID0gbnVsbDtcblxuLyoqXG4gKiBAcmV0dXJuIHs/b2JqZWN0fSBBIFN5bnRoZXRpY0NvbXBvc2l0
aW9uRXZlbnQuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RDb21wb3NpdGlvbkV2ZW50KHRvcExldmVs
VHlwZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHZh
ciBldmVudFR5cGU7XG4gIHZhciBmYWxsYmFja0RhdGE7XG5cbiAgaWYgKGNhblVzZUNvbXBvc2l0
aW9uRXZlbnQpIHtcbiAgICBldmVudFR5cGUgPSBnZXRDb21wb3NpdGlvbkV2ZW50VHlwZSh0b3BM
ZXZlbFR5cGUpO1xuICB9IGVsc2UgaWYgKCFjdXJyZW50Q29tcG9zaXRpb24pIHtcbiAgICBpZiAo
aXNGYWxsYmFja0NvbXBvc2l0aW9uU3RhcnQodG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCkpIHtc
biAgICAgIGV2ZW50VHlwZSA9IGV2ZW50VHlwZXMuY29tcG9zaXRpb25TdGFydDtcbiAgICB9XG4g
IH0gZWxzZSBpZiAoaXNGYWxsYmFja0NvbXBvc2l0aW9uRW5kKHRvcExldmVsVHlwZSwgbmF0aXZl
RXZlbnQpKSB7XG4gICAgZXZlbnRUeXBlID0gZXZlbnRUeXBlcy5jb21wb3NpdGlvbkVuZDtcbiAg
fVxuXG4gIGlmICghZXZlbnRUeXBlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAo
dXNlRmFsbGJhY2tDb21wb3NpdGlvbkRhdGEpIHtcbiAgICAvLyBUaGUgY3VycmVudCBjb21wb3Np
dGlvbiBpcyBzdG9yZWQgc3RhdGljYWxseSBhbmQgbXVzdCBub3QgYmVcbiAgICAvLyBvdmVyd3Jp
dHRlbiB3aGlsZSBjb21wb3NpdGlvbiBjb250aW51ZXMuXG4gICAgaWYgKCFjdXJyZW50Q29tcG9z
aXRpb24gJiYgZXZlbnRUeXBlID09PSBldmVudFR5cGVzLmNvbXBvc2l0aW9uU3RhcnQpIHtcbiAg
ICAgIGN1cnJlbnRDb21wb3NpdGlvbiA9IEZhbGxiYWNrQ29tcG9zaXRpb25TdGF0ZS5nZXRQb29s
ZWQobmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSBldmVu
dFR5cGVzLmNvbXBvc2l0aW9uRW5kKSB7XG4gICAgICBpZiAoY3VycmVudENvbXBvc2l0aW9uKSB7
XG4gICAgICAgIGZhbGxiYWNrRGF0YSA9IGN1cnJlbnRDb21wb3NpdGlvbi5nZXREYXRhKCk7XG4g
ICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGV2ZW50ID0gU3ludGhldGljQ29tcG9zaXRpb25F
dmVudC5nZXRQb29sZWQoZXZlbnRUeXBlLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZl
RXZlbnRUYXJnZXQpO1xuXG4gIGlmIChmYWxsYmFja0RhdGEpIHtcbiAgICAvLyBJbmplY3QgZGF0
YSBnZW5lcmF0ZWQgZnJvbSBmYWxsYmFjayBwYXRoIGludG8gdGhlIHN5bnRoZXRpYyBldmVudC5c
biAgICAvLyBUaGlzIG1hdGNoZXMgdGhlIHByb3BlcnR5IG9mIG5hdGl2ZSBDb21wb3NpdGlvbkV2
ZW50SW50ZXJmYWNlLlxuICAgIGV2ZW50LmRhdGEgPSBmYWxsYmFja0RhdGE7XG4gIH0gZWxzZSB7
XG4gICAgdmFyIGN1c3RvbURhdGEgPSBnZXREYXRhRnJvbUN1c3RvbUV2ZW50KG5hdGl2ZUV2ZW50
KTtcbiAgICBpZiAoY3VzdG9tRGF0YSAhPT0gbnVsbCkge1xuICAgICAgZXZlbnQuZGF0YSA9IGN1
c3RvbURhdGE7XG4gICAgfVxuICB9XG5cbiAgRXZlbnRQcm9wYWdhdG9ycy5hY2N1bXVsYXRlVHdv
UGhhc2VEaXNwYXRjaGVzKGV2ZW50KTtcbiAgcmV0dXJuIGV2ZW50O1xufVxuXG4vKipcbiAqIEBw
YXJhbSB7c3RyaW5nfSB0b3BMZXZlbFR5cGUgUmVjb3JkIGZyb20gYEV2ZW50Q29uc3RhbnRzYC5c
biAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAq
IEByZXR1cm4gez9zdHJpbmd9IFRoZSBzdHJpbmcgY29ycmVzcG9uZGluZyB0byB0aGlzIGBiZWZv
cmVJbnB1dGAgZXZlbnQuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdGl2ZUJlZm9yZUlucHV0Q2hhcnMo
dG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCkge1xuICBzd2l0Y2ggKHRvcExldmVsVHlwZSkge1xu
ICAgIGNhc2UgJ3RvcENvbXBvc2l0aW9uRW5kJzpcbiAgICAgIHJldHVybiBnZXREYXRhRnJvbUN1
c3RvbUV2ZW50KG5hdGl2ZUV2ZW50KTtcbiAgICBjYXNlICd0b3BLZXlQcmVzcyc6XG4gICAgICAv
KipcbiAgICAgICAqIElmIG5hdGl2ZSBgdGV4dElucHV0YCBldmVudHMgYXJlIGF2YWlsYWJsZSwg
b3VyIGdvYWwgaXMgdG8gbWFrZVxuICAgICAgICogdXNlIG9mIHRoZW0uIEhvd2V2ZXIsIHRoZXJl
IGlzIGEgc3BlY2lhbCBjYXNlOiB0aGUgc3BhY2ViYXIga2V5LlxuICAgICAgICogSW4gV2Via2l0
LCBwcmV2ZW50aW5nIGRlZmF1bHQgb24gYSBzcGFjZWJhciBgdGV4dElucHV0YCBldmVudFxuICAg
ICAgICogY2FuY2VscyBjaGFyYWN0ZXIgaW5zZXJ0aW9uLCBidXQgaXQgKmFsc28qIGNhdXNlcyB0
aGUgYnJvd3NlclxuICAgICAgICogdG8gZmFsbCBiYWNrIHRvIGl0cyBkZWZhdWx0IHNwYWNlYmFy
IGJlaGF2aW9yIG9mIHNjcm9sbGluZyB0aGVcbiAgICAgICAqIHBhZ2UuXG4gICAgICAgKlxuICAg
ICAgICogVHJhY2tpbmcgYXQ6XG4gICAgICAgKiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2No
cm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MzU1MTAzXG4gICAgICAgKlxuICAgICAgICogVG8gYXZv
aWQgdGhpcyBpc3N1ZSwgdXNlIHRoZSBrZXlwcmVzcyBldmVudCBhcyBpZiBubyBgdGV4dElucHV0
YFxuICAgICAgICogZXZlbnQgaXMgYXZhaWxhYmxlLlxuICAgICAgICovXG4gICAgICB2YXIgd2hp
Y2ggPSBuYXRpdmVFdmVudC53aGljaDtcbiAgICAgIGlmICh3aGljaCAhPT0gU1BBQ0VCQVJfQ09E
RSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaGFzU3BhY2VLZXlw
cmVzcyA9IHRydWU7XG4gICAgICByZXR1cm4gU1BBQ0VCQVJfQ0hBUjtcblxuICAgIGNhc2UgJ3Rv
cFRleHRJbnB1dCc6XG4gICAgICAvLyBSZWNvcmQgdGhlIGNoYXJhY3RlcnMgdG8gYmUgYWRkZWQg
dG8gdGhlIERPTS5cbiAgICAgIHZhciBjaGFycyA9IG5hdGl2ZUV2ZW50LmRhdGE7XG5cbiAgICAg
IC8vIElmIGl0J3MgYSBzcGFjZWJhciBjaGFyYWN0ZXIsIGFzc3VtZSB0aGF0IHdlIGhhdmUgYWxy
ZWFkeSBoYW5kbGVkXG4gICAgICAvLyBpdCBhdCB0aGUga2V5cHJlc3MgbGV2ZWwgYW5kIGJhaWwg
aW1tZWRpYXRlbHkuIEFuZHJvaWQgQ2hyb21lXG4gICAgICAvLyBkb2Vzbid0IGdpdmUgdXMga2V5
Y29kZXMsIHNvIHdlIG5lZWQgdG8gYmxhY2tsaXN0IGl0LlxuICAgICAgaWYgKGNoYXJzID09PSBT
UEFDRUJBUl9DSEFSICYmIGhhc1NwYWNlS2V5cHJlc3MpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7
XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjaGFycztcblxuICAgIGRlZmF1bHQ6XG4gICAgICAv
LyBGb3Igb3RoZXIgbmF0aXZlIGV2ZW50IHR5cGVzLCBkbyBub3RoaW5nLlxuICAgICAgcmV0dXJu
IG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBGb3IgYnJvd3NlcnMgdGhhdCBkbyBub3QgcHJvdmlk
ZSB0aGUgYHRleHRJbnB1dGAgZXZlbnQsIGV4dHJhY3QgdGhlXG4gKiBhcHByb3ByaWF0ZSBzdHJp
bmcgdG8gdXNlIGZvciBTeW50aGV0aWNJbnB1dEV2ZW50LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5n
fSB0b3BMZXZlbFR5cGUgUmVjb3JkIGZyb20gYEV2ZW50Q29uc3RhbnRzYC5cbiAqIEBwYXJhbSB7
b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEByZXR1cm4gez9z
dHJpbmd9IFRoZSBmYWxsYmFjayBzdHJpbmcgZm9yIHRoaXMgYGJlZm9yZUlucHV0YCBldmVudC5c
biAqL1xuZnVuY3Rpb24gZ2V0RmFsbGJhY2tCZWZvcmVJbnB1dENoYXJzKHRvcExldmVsVHlwZSwg
bmF0aXZlRXZlbnQpIHtcbiAgLy8gSWYgd2UgYXJlIGN1cnJlbnRseSBjb21wb3NpbmcgKElNRSkg
YW5kIHVzaW5nIGEgZmFsbGJhY2sgdG8gZG8gc28sXG4gIC8vIHRyeSB0byBleHRyYWN0IHRoZSBj
b21wb3NlZCBjaGFyYWN0ZXJzIGZyb20gdGhlIGZhbGxiYWNrIG9iamVjdC5cbiAgLy8gSWYgY29t
cG9zaXRpb24gZXZlbnQgaXMgYXZhaWxhYmxlLCB3ZSBleHRyYWN0IGEgc3RyaW5nIG9ubHkgYXRc
biAgLy8gY29tcG9zaXRpb25ldmVudCwgb3RoZXJ3aXNlIGV4dHJhY3QgaXQgYXQgZmFsbGJhY2sg
ZXZlbnRzLlxuICBpZiAoY3VycmVudENvbXBvc2l0aW9uKSB7XG4gICAgaWYgKHRvcExldmVsVHlw
ZSA9PT0gJ3RvcENvbXBvc2l0aW9uRW5kJyB8fCAhY2FuVXNlQ29tcG9zaXRpb25FdmVudCAmJiBp
c0ZhbGxiYWNrQ29tcG9zaXRpb25FbmQodG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCkpIHtcbiAg
ICAgIHZhciBjaGFycyA9IGN1cnJlbnRDb21wb3NpdGlvbi5nZXREYXRhKCk7XG4gICAgICBGYWxs
YmFja0NvbXBvc2l0aW9uU3RhdGUucmVsZWFzZShjdXJyZW50Q29tcG9zaXRpb24pO1xuICAgICAg
Y3VycmVudENvbXBvc2l0aW9uID0gbnVsbDtcbiAgICAgIHJldHVybiBjaGFycztcbiAgICB9XG4g
ICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzd2l0Y2ggKHRvcExldmVsVHlwZSkge1xuICAgIGNh
c2UgJ3RvcFBhc3RlJzpcbiAgICAgIC8vIElmIGEgcGFzdGUgZXZlbnQgb2NjdXJzIGFmdGVyIGEg
a2V5cHJlc3MsIHRocm93IG91dCB0aGUgaW5wdXRcbiAgICAgIC8vIGNoYXJzLiBQYXN0ZSBldmVu
dHMgc2hvdWxkIG5vdCBsZWFkIHRvIEJlZm9yZUlucHV0IGV2ZW50cy5cbiAgICAgIHJldHVybiBu
dWxsO1xuICAgIGNhc2UgJ3RvcEtleVByZXNzJzpcbiAgICAgIC8qKlxuICAgICAgICogQXMgb2Yg
djI3LCBGaXJlZm94IG1heSBmaXJlIGtleXByZXNzIGV2ZW50cyBldmVuIHdoZW4gbm8gY2hhcmFj
dGVyXG4gICAgICAgKiB3aWxsIGJlIGluc2VydGVkLiBBIGZldyBwb3NzaWJpbGl0aWVzOlxuICAg
ICAgICpcbiAgICAgICAqIC0gYHdoaWNoYCBpcyBgMGAuIEFycm93IGtleXMsIEVzYyBrZXksIGV0
Yy5cbiAgICAgICAqXG4gICAgICAgKiAtIGB3aGljaGAgaXMgdGhlIHByZXNzZWQga2V5IGNvZGUs
IGJ1dCBubyBjaGFyIGlzIGF2YWlsYWJsZS5cbiAgICAgICAqICAgRXg6ICdBbHRHciArIGRgIGlu
IFBvbGlzaC4gVGhlcmUgaXMgbm8gbW9kaWZpZWQgY2hhcmFjdGVyIGZvclxuICAgICAgICogICB0
aGlzIGtleSBjb21iaW5hdGlvbiBhbmQgbm8gY2hhcmFjdGVyIGlzIGluc2VydGVkIGludG8gdGhl
XG4gICAgICAgKiAgIGRvY3VtZW50LCBidXQgRkYgZmlyZXMgdGhlIGtleXByZXNzIGZvciBjaGFy
IGNvZGUgYDEwMGAgYW55d2F5LlxuICAgICAgICogICBObyBgaW5wdXRgIGV2ZW50IHdpbGwgb2Nj
dXIuXG4gICAgICAgKlxuICAgICAgICogLSBgd2hpY2hgIGlzIHRoZSBwcmVzc2VkIGtleSBjb2Rl
LCBidXQgYSBjb21tYW5kIGNvbWJpbmF0aW9uIGlzXG4gICAgICAgKiAgIGJlaW5nIHVzZWQuIEV4
OiBgQ21kK0NgLiBObyBjaGFyYWN0ZXIgaXMgaW5zZXJ0ZWQsIGFuZCBub1xuICAgICAgICogICBg
aW5wdXRgIGV2ZW50IHdpbGwgb2NjdXIuXG4gICAgICAgKi9cbiAgICAgIGlmIChuYXRpdmVFdmVu
dC53aGljaCAmJiAhaXNLZXlwcmVzc0NvbW1hbmQobmF0aXZlRXZlbnQpKSB7XG4gICAgICAgIHJl
dHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKG5hdGl2ZUV2ZW50LndoaWNoKTtcbiAgICAgIH1cbiAg
ICAgIHJldHVybiBudWxsO1xuICAgIGNhc2UgJ3RvcENvbXBvc2l0aW9uRW5kJzpcbiAgICAgIHJl
dHVybiB1c2VGYWxsYmFja0NvbXBvc2l0aW9uRGF0YSA/IG51bGwgOiBuYXRpdmVFdmVudC5kYXRh
O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIEV4
dHJhY3QgYSBTeW50aGV0aWNJbnB1dEV2ZW50IGZvciBgYmVmb3JlSW5wdXRgLCBiYXNlZCBvbiBl
aXRoZXIgbmF0aXZlXG4gKiBgdGV4dElucHV0YCBvciBmYWxsYmFjayBiZWhhdmlvci5cbiAqXG4g
KiBAcmV0dXJuIHs/b2JqZWN0fSBBIFN5bnRoZXRpY0lucHV0RXZlbnQuXG4gKi9cbmZ1bmN0aW9u
IGV4dHJhY3RCZWZvcmVJbnB1dEV2ZW50KHRvcExldmVsVHlwZSwgdGFyZ2V0SW5zdCwgbmF0aXZl
RXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHZhciBjaGFycztcblxuICBpZiAoY2FuVXNl
VGV4dElucHV0RXZlbnQpIHtcbiAgICBjaGFycyA9IGdldE5hdGl2ZUJlZm9yZUlucHV0Q2hhcnMo
dG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCk7XG4gIH0gZWxzZSB7XG4gICAgY2hhcnMgPSBnZXRG
YWxsYmFja0JlZm9yZUlucHV0Q2hhcnModG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCk7XG4gIH1c
blxuICAvLyBJZiBubyBjaGFyYWN0ZXJzIGFyZSBiZWluZyBpbnNlcnRlZCwgbm8gQmVmb3JlSW5w
dXQgZXZlbnQgc2hvdWxkXG4gIC8vIGJlIGZpcmVkLlxuICBpZiAoIWNoYXJzKSB7XG4gICAgcmV0
dXJuIG51bGw7XG4gIH1cblxuICB2YXIgZXZlbnQgPSBTeW50aGV0aWNJbnB1dEV2ZW50LmdldFBv
b2xlZChldmVudFR5cGVzLmJlZm9yZUlucHV0LCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0
aXZlRXZlbnRUYXJnZXQpO1xuXG4gIGV2ZW50LmRhdGEgPSBjaGFycztcbiAgRXZlbnRQcm9wYWdh
dG9ycy5hY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzKGV2ZW50KTtcbiAgcmV0dXJuIGV2ZW50
O1xufVxuXG4vKipcbiAqIENyZWF0ZSBhbiBgb25CZWZvcmVJbnB1dGAgZXZlbnQgdG8gbWF0Y2hc
biAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMTMx
MTA1LyNldmVudHMtaW5wdXRldmVudHMuXG4gKlxuICogVGhpcyBldmVudCBwbHVnaW4gaXMgYmFz
ZWQgb24gdGhlIG5hdGl2ZSBgdGV4dElucHV0YCBldmVudFxuICogYXZhaWxhYmxlIGluIENocm9t
ZSwgU2FmYXJpLCBPcGVyYSwgYW5kIElFLiBUaGlzIGV2ZW50IGZpcmVzIGFmdGVyXG4gKiBgb25L
ZXlQcmVzc2AgYW5kIGBvbkNvbXBvc2l0aW9uRW5kYCwgYnV0IGJlZm9yZSBgb25JbnB1dGAuXG4g
KlxuICogYGJlZm9yZUlucHV0YCBpcyBzcGVjJ2QgYnV0IG5vdCBpbXBsZW1lbnRlZCBpbiBhbnkg
YnJvd3NlcnMsIGFuZFxuICogdGhlIGBpbnB1dGAgZXZlbnQgZG9lcyBub3QgcHJvdmlkZSBhbnkg
dXNlZnVsIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgaGFzXG4gKiBhY3R1YWxseSBiZWVuIGFkZGVk
LCBjb250cmFyeSB0byB0aGUgc3BlYy4gVGh1cywgYHRleHRJbnB1dGAgaXMgdGhlIGJlc3RcbiAq
IGF2YWlsYWJsZSBldmVudCB0byBpZGVudGlmeSB0aGUgY2hhcmFjdGVycyB0aGF0IGhhdmUgYWN0
dWFsbHkgYmVlbiBpbnNlcnRlZFxuICogaW50byB0aGUgdGFyZ2V0IG5vZGUuXG4gKlxuICogVGhp
cyBwbHVnaW4gaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgZW1pdHRpbmcgYGNvbXBvc2l0aW9uYCBl
dmVudHMsIHRodXNcbiAqIGFsbG93aW5nIHVzIHRvIHNoYXJlIGNvbXBvc2l0aW9uIGZhbGxiYWNr
IGNvZGUgZm9yIGJvdGggYGJlZm9yZUlucHV0YCBhbmRcbiAqIGBjb21wb3NpdGlvbmAgZXZlbnQg
dHlwZXMuXG4gKi9cbnZhciBCZWZvcmVJbnB1dEV2ZW50UGx1Z2luID0ge1xuICBldmVudFR5cGVz
OiBldmVudFR5cGVzLFxuXG4gIGV4dHJhY3RFdmVudHM6IGZ1bmN0aW9uICh0b3BMZXZlbFR5cGUs
IHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICAgIHJldHVy
biBbZXh0cmFjdENvbXBvc2l0aW9uRXZlbnQodG9wTGV2ZWxUeXBlLCB0YXJnZXRJbnN0LCBuYXRp
dmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpLCBleHRyYWN0QmVmb3JlSW5wdXRFdmVudCh0b3BM
ZXZlbFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCldO1xu
ICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEJlZm9yZUlucHV0RXZlbnRQbHVnaW47XG5cbi8q
KiovIH0pLFxuLyogMTIzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBDb3B5cmlnaHQg
MjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAq
XG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGlj
ZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkg
b2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJp
Z2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3Rv
cnkuXG4gKlxuICovXG5cblxuXG52YXIgX2Fzc2lnbiA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7
XG5cbnZhciBQb29sZWRDbGFzcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xuXG52YXIgZ2V0
VGV4dENvbnRlbnRBY2Nlc3NvciA9IF9fd2VicGFja19yZXF1aXJlX18oNjEpO1xuXG4vKipcbiAq
IFRoaXMgaGVscGVyIGNsYXNzIHN0b3JlcyBpbmZvcm1hdGlvbiBhYm91dCB0ZXh0IGNvbnRlbnQg
b2YgYSB0YXJnZXQgbm9kZSxcbiAqIGFsbG93aW5nIGNvbXBhcmlzb24gb2YgY29udGVudCBiZWZv
cmUgYW5kIGFmdGVyIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogSWRlbnRpZnkgdGhlIG5vZGUgd2hl
cmUgc2VsZWN0aW9uIGN1cnJlbnRseSBiZWdpbnMsIHRoZW4gb2JzZXJ2ZVxuICogYm90aCBpdHMg
dGV4dCBjb250ZW50IGFuZCBpdHMgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgRE9NLiBTaW5jZSB0
aGVcbiAqIGJyb3dzZXIgbWF5IG5hdGl2ZWx5IHJlcGxhY2UgdGhlIHRhcmdldCBub2RlIGR1cmlu
ZyBjb21wb3NpdGlvbiwgd2UgY2FuXG4gKiB1c2UgaXRzIHBvc2l0aW9uIHRvIGZpbmQgaXRzIHJl
cGxhY2VtZW50LlxuICpcbiAqIEBwYXJhbSB7RE9NRXZlbnRUYXJnZXR9IHJvb3RcbiAqL1xuZnVu
Y3Rpb24gRmFsbGJhY2tDb21wb3NpdGlvblN0YXRlKHJvb3QpIHtcbiAgdGhpcy5fcm9vdCA9IHJv
b3Q7XG4gIHRoaXMuX3N0YXJ0VGV4dCA9IHRoaXMuZ2V0VGV4dCgpO1xuICB0aGlzLl9mYWxsYmFj
a1RleHQgPSBudWxsO1xufVxuXG5fYXNzaWduKEZhbGxiYWNrQ29tcG9zaXRpb25TdGF0ZS5wcm90
b3R5cGUsIHtcbiAgZGVzdHJ1Y3RvcjogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuX3Jvb3QgPSBu
dWxsO1xuICAgIHRoaXMuX3N0YXJ0VGV4dCA9IG51bGw7XG4gICAgdGhpcy5fZmFsbGJhY2tUZXh0
ID0gbnVsbDtcbiAgfSxcblxuICAvKipcbiAgICogR2V0IGN1cnJlbnQgdGV4dCBvZiBpbnB1dC5c
biAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0VGV4dDogZnVuY3Rpb24g
KCkge1xuICAgIGlmICgndmFsdWUnIGluIHRoaXMuX3Jvb3QpIHtcbiAgICAgIHJldHVybiB0aGlz
Ll9yb290LnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcm9vdFtnZXRUZXh0Q29udGVu
dEFjY2Vzc29yKCldO1xuICB9LFxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIGRpZmZlcmlu
ZyBzdWJzdHJpbmcgYmV0d2VlbiB0aGUgaW5pdGlhbGx5IHN0b3JlZFxuICAgKiB0ZXh0IGNvbnRl
bnQgYW5kIHRoZSBjdXJyZW50IGNvbnRlbnQuXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ31c
biAgICovXG4gIGdldERhdGE6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5fZmFsbGJhY2tU
ZXh0KSB7XG4gICAgICByZXR1cm4gdGhpcy5fZmFsbGJhY2tUZXh0O1xuICAgIH1cblxuICAgIHZh
ciBzdGFydDtcbiAgICB2YXIgc3RhcnRWYWx1ZSA9IHRoaXMuX3N0YXJ0VGV4dDtcbiAgICB2YXIg
c3RhcnRMZW5ndGggPSBzdGFydFZhbHVlLmxlbmd0aDtcbiAgICB2YXIgZW5kO1xuICAgIHZhciBl
bmRWYWx1ZSA9IHRoaXMuZ2V0VGV4dCgpO1xuICAgIHZhciBlbmRMZW5ndGggPSBlbmRWYWx1ZS5s
ZW5ndGg7XG5cbiAgICBmb3IgKHN0YXJ0ID0gMDsgc3RhcnQgPCBzdGFydExlbmd0aDsgc3RhcnQr
Kykge1xuICAgICAgaWYgKHN0YXJ0VmFsdWVbc3RhcnRdICE9PSBlbmRWYWx1ZVtzdGFydF0pIHtc
biAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG1pbkVuZCA9IHN0YXJ0
TGVuZ3RoIC0gc3RhcnQ7XG4gICAgZm9yIChlbmQgPSAxOyBlbmQgPD0gbWluRW5kOyBlbmQrKykg
e1xuICAgICAgaWYgKHN0YXJ0VmFsdWVbc3RhcnRMZW5ndGggLSBlbmRdICE9PSBlbmRWYWx1ZVtl
bmRMZW5ndGggLSBlbmRdKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAg
IHZhciBzbGljZVRhaWwgPSBlbmQgPiAxID8gMSAtIGVuZCA6IHVuZGVmaW5lZDtcbiAgICB0aGlz
Ll9mYWxsYmFja1RleHQgPSBlbmRWYWx1ZS5zbGljZShzdGFydCwgc2xpY2VUYWlsKTtcbiAgICBy
ZXR1cm4gdGhpcy5fZmFsbGJhY2tUZXh0O1xuICB9XG59KTtcblxuUG9vbGVkQ2xhc3MuYWRkUG9v
bGluZ1RvKEZhbGxiYWNrQ29tcG9zaXRpb25TdGF0ZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gRmFs
bGJhY2tDb21wb3NpdGlvblN0YXRlO1xuXG4vKioqLyB9KSxcbi8qIDEyNCAqL1xuLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBz
dHJpY3RcIjtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5c
biAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNl
bnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNF
IGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0
aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRF
TlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG5cblxudmFyIFN5bnRo
ZXRpY0V2ZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XG5cbi8qKlxuICogQGludGVyZmFj
ZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMv
I2V2ZW50cy1jb21wb3NpdGlvbmV2ZW50c1xuICovXG52YXIgQ29tcG9zaXRpb25FdmVudEludGVy
ZmFjZSA9IHtcbiAgZGF0YTogbnVsbFxufTtcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZGlz
cGF0Y2hDb25maWcgQ29uZmlndXJhdGlvbiB1c2VkIHRvIGRpc3BhdGNoIHRoaXMgZXZlbnQuXG4g
KiBAcGFyYW0ge3N0cmluZ30gZGlzcGF0Y2hNYXJrZXIgTWFya2VyIGlkZW50aWZ5aW5nIHRoZSBl
dmVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dz
ZXIgZXZlbnQuXG4gKiBAZXh0ZW5kcyB7U3ludGhldGljVUlFdmVudH1cbiAqL1xuZnVuY3Rpb24g
U3ludGhldGljQ29tcG9zaXRpb25FdmVudChkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIs
IG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICByZXR1cm4gU3ludGhldGljRXZl
bnQuY2FsbCh0aGlzLCBkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50
LCBuYXRpdmVFdmVudFRhcmdldCk7XG59XG5cblN5bnRoZXRpY0V2ZW50LmF1Z21lbnRDbGFzcyhT
eW50aGV0aWNDb21wb3NpdGlvbkV2ZW50LCBDb21wb3NpdGlvbkV2ZW50SW50ZXJmYWNlKTtcblxu
bW9kdWxlLmV4cG9ydHMgPSBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50O1xuXG4vKioqLyB9KSxc
bi8qIDEyNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3Jl
cXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJl
c2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhp
cyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91
bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMg
c291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2Fu
IGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpc
biAqL1xuXG5cblxudmFyIFN5bnRoZXRpY0V2ZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7
XG5cbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9U
Ui8yMDEzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDEzMTEwNVxuICogICAgICAvI2V2ZW50cy1p
bnB1dGV2ZW50c1xuICovXG52YXIgSW5wdXRFdmVudEludGVyZmFjZSA9IHtcbiAgZGF0YTogbnVs
bFxufTtcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZGlzcGF0Y2hDb25maWcgQ29uZmlndXJh
dGlvbiB1c2VkIHRvIGRpc3BhdGNoIHRoaXMgZXZlbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlz
cGF0Y2hNYXJrZXIgTWFya2VyIGlkZW50aWZ5aW5nIHRoZSBldmVudCB0YXJnZXQuXG4gKiBAcGFy
YW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAZXh0ZW5k
cyB7U3ludGhldGljVUlFdmVudH1cbiAqL1xuZnVuY3Rpb24gU3ludGhldGljSW5wdXRFdmVudChk
aXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRh
cmdldCkge1xuICByZXR1cm4gU3ludGhldGljRXZlbnQuY2FsbCh0aGlzLCBkaXNwYXRjaENvbmZp
ZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG59XG5c
blN5bnRoZXRpY0V2ZW50LmF1Z21lbnRDbGFzcyhTeW50aGV0aWNJbnB1dEV2ZW50LCBJbnB1dEV2
ZW50SW50ZXJmYWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW50aGV0aWNJbnB1dEV2ZW50O1xu
XG4vKioqLyB9KSxcbi8qIDEyNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywg
X193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qKlxuICogQ29weXJp
Z2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
XG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxl
IGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0
b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVu
dCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGly
ZWN0b3J5LlxuICpcbiAqL1xuXG5cblxudmFyIEV2ZW50UGx1Z2luSHViID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygyMCk7XG52YXIgRXZlbnRQcm9wYWdhdG9ycyA9IF9fd2VicGFja19yZXF1aXJlX18o
MTkpO1xudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtc
bnZhciBSZWFjdERPTUNvbXBvbmVudFRyZWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xudmFy
IFJlYWN0VXBkYXRlcyA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7XG52YXIgU3ludGhldGljRXZl
bnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcblxudmFyIGlucHV0VmFsdWVUcmFja2luZyA9
IF9fd2VicGFja19yZXF1aXJlX18oNjQpO1xudmFyIGdldEV2ZW50VGFyZ2V0ID0gX193ZWJwYWNr
X3JlcXVpcmVfXygzNCk7XG52YXIgaXNFdmVudFN1cHBvcnRlZCA9IF9fd2VicGFja19yZXF1aXJl
X18oMzUpO1xudmFyIGlzVGV4dElucHV0RWxlbWVudCA9IF9fd2VicGFja19yZXF1aXJlX18oNjUp
O1xuXG52YXIgZXZlbnRUeXBlcyA9IHtcbiAgY2hhbmdlOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0
aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6ICdvbkNoYW5nZScsXG4gICAgICBjYXB0dXJlZDog
J29uQ2hhbmdlQ2FwdHVyZSdcbiAgICB9LFxuICAgIGRlcGVuZGVuY2llczogWyd0b3BCbHVyJywg
J3RvcENoYW5nZScsICd0b3BDbGljaycsICd0b3BGb2N1cycsICd0b3BJbnB1dCcsICd0b3BLZXlE
b3duJywgJ3RvcEtleVVwJywgJ3RvcFNlbGVjdGlvbkNoYW5nZSddXG4gIH1cbn07XG5cbmZ1bmN0
aW9uIGNyZWF0ZUFuZEFjY3VtdWxhdGVDaGFuZ2VFdmVudChpbnN0LCBuYXRpdmVFdmVudCwgdGFy
Z2V0KSB7XG4gIHZhciBldmVudCA9IFN5bnRoZXRpY0V2ZW50LmdldFBvb2xlZChldmVudFR5cGVz
LmNoYW5nZSwgaW5zdCwgbmF0aXZlRXZlbnQsIHRhcmdldCk7XG4gIGV2ZW50LnR5cGUgPSAnY2hh
bmdlJztcbiAgRXZlbnRQcm9wYWdhdG9ycy5hY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzKGV2
ZW50KTtcbiAgcmV0dXJuIGV2ZW50O1xufVxuLyoqXG4gKiBGb3IgSUUgc2hpbXNcbiAqL1xudmFy
IGFjdGl2ZUVsZW1lbnQgPSBudWxsO1xudmFyIGFjdGl2ZUVsZW1lbnRJbnN0ID0gbnVsbDtcblxu
LyoqXG4gKiBTRUNUSU9OOiBoYW5kbGUgYGNoYW5nZWAgZXZlbnRcbiAqL1xuZnVuY3Rpb24gc2hv
dWxkVXNlQ2hhbmdlRXZlbnQoZWxlbSkge1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1l
ICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIG5vZGVOYW1lID09PSAn
c2VsZWN0JyB8fCBub2RlTmFtZSA9PT0gJ2lucHV0JyAmJiBlbGVtLnR5cGUgPT09ICdmaWxlJztc
bn1cblxudmFyIGRvZXNDaGFuZ2VFdmVudEJ1YmJsZSA9IGZhbHNlO1xuaWYgKEV4ZWN1dGlvbkVu
dmlyb25tZW50LmNhblVzZURPTSkge1xuICAvLyBTZWUgYGhhbmRsZUNoYW5nZWAgY29tbWVudCBi
ZWxvd1xuICBkb2VzQ2hhbmdlRXZlbnRCdWJibGUgPSBpc0V2ZW50U3VwcG9ydGVkKCdjaGFuZ2Un
KSAmJiAoIWRvY3VtZW50LmRvY3VtZW50TW9kZSB8fCBkb2N1bWVudC5kb2N1bWVudE1vZGUgPiA4
KTtcbn1cblxuZnVuY3Rpb24gbWFudWFsRGlzcGF0Y2hDaGFuZ2VFdmVudChuYXRpdmVFdmVudCkg
e1xuICB2YXIgZXZlbnQgPSBjcmVhdGVBbmRBY2N1bXVsYXRlQ2hhbmdlRXZlbnQoYWN0aXZlRWxl
bWVudEluc3QsIG5hdGl2ZUV2ZW50LCBnZXRFdmVudFRhcmdldChuYXRpdmVFdmVudCkpO1xuXG4g
IC8vIElmIGNoYW5nZSBhbmQgcHJvcGVydHljaGFuZ2UgYnViYmxlZCwgd2UnZCBqdXN0IGJpbmQg
dG8gaXQgbGlrZSBhbGwgdGhlXG4gIC8vIG90aGVyIGV2ZW50cyBhbmQgaGF2ZSBpdCBnbyB0aHJv
dWdoIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci4gU2luY2UgaXRcbiAgLy8gZG9lc24ndCwgd2Ug
bWFudWFsbHkgbGlzdGVuIGZvciB0aGUgZXZlbnRzIGFuZCBzbyB3ZSBoYXZlIHRvIGVucXVldWUg
YW5kXG4gIC8vIHByb2Nlc3MgdGhlIGFic3RyYWN0IGV2ZW50IG1hbnVhbGx5LlxuICAvL1xuICAv
LyBCYXRjaGluZyBpcyBuZWNlc3NhcnkgaGVyZSBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCBhbGwg
ZXZlbnQgaGFuZGxlcnMgcnVuXG4gIC8vIGJlZm9yZSB0aGUgbmV4dCByZXJlbmRlciAoaW5jbHVk
aW5nIGV2ZW50IGhhbmRsZXJzIGF0dGFjaGVkIHRvIGFuY2VzdG9yXG4gIC8vIGVsZW1lbnRzIGlu
c3RlYWQgb2YgZGlyZWN0bHkgb24gdGhlIGlucHV0KS4gV2l0aG91dCB0aGlzLCBjb250cm9sbGVk
XG4gIC8vIGNvbXBvbmVudHMgZG9uJ3Qgd29yayBwcm9wZXJseSBpbiBjb25qdW5jdGlvbiB3aXRo
IGV2ZW50IGJ1YmJsaW5nIGJlY2F1c2VcbiAgLy8gdGhlIGNvbXBvbmVudCBpcyByZXJlbmRlcmVk
IGFuZCB0aGUgdmFsdWUgcmV2ZXJ0ZWQgYmVmb3JlIGFsbCB0aGUgZXZlbnRcbiAgLy8gaGFuZGxl
cnMgY2FuIHJ1bi4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMv
NzA4LlxuICBSZWFjdFVwZGF0ZXMuYmF0Y2hlZFVwZGF0ZXMocnVuRXZlbnRJbkJhdGNoLCBldmVu
dCk7XG59XG5cbmZ1bmN0aW9uIHJ1bkV2ZW50SW5CYXRjaChldmVudCkge1xuICBFdmVudFBsdWdp
bkh1Yi5lbnF1ZXVlRXZlbnRzKGV2ZW50KTtcbiAgRXZlbnRQbHVnaW5IdWIucHJvY2Vzc0V2ZW50
UXVldWUoZmFsc2UpO1xufVxuXG5mdW5jdGlvbiBzdGFydFdhdGNoaW5nRm9yQ2hhbmdlRXZlbnRJ
RTgodGFyZ2V0LCB0YXJnZXRJbnN0KSB7XG4gIGFjdGl2ZUVsZW1lbnQgPSB0YXJnZXQ7XG4gIGFj
dGl2ZUVsZW1lbnRJbnN0ID0gdGFyZ2V0SW5zdDtcbiAgYWN0aXZlRWxlbWVudC5hdHRhY2hFdmVu
dCgnb25jaGFuZ2UnLCBtYW51YWxEaXNwYXRjaENoYW5nZUV2ZW50KTtcbn1cblxuZnVuY3Rpb24g
c3RvcFdhdGNoaW5nRm9yQ2hhbmdlRXZlbnRJRTgoKSB7XG4gIGlmICghYWN0aXZlRWxlbWVudCkg
e1xuICAgIHJldHVybjtcbiAgfVxuICBhY3RpdmVFbGVtZW50LmRldGFjaEV2ZW50KCdvbmNoYW5n
ZScsIG1hbnVhbERpc3BhdGNoQ2hhbmdlRXZlbnQpO1xuICBhY3RpdmVFbGVtZW50ID0gbnVsbDtc
biAgYWN0aXZlRWxlbWVudEluc3QgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBnZXRJbnN0SWZWYWx1
ZUNoYW5nZWQodGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQpIHtcbiAgdmFyIHVwZGF0ZWQgPSBpbnB1
dFZhbHVlVHJhY2tpbmcudXBkYXRlVmFsdWVJZkNoYW5nZWQodGFyZ2V0SW5zdCk7XG4gIHZhciBz
aW11bGF0ZWQgPSBuYXRpdmVFdmVudC5zaW11bGF0ZWQgPT09IHRydWUgJiYgQ2hhbmdlRXZlbnRQ
bHVnaW4uX2FsbG93U2ltdWxhdGVkUGFzc1Rocm91Z2g7XG5cbiAgaWYgKHVwZGF0ZWQgfHwgc2lt
dWxhdGVkKSB7XG4gICAgcmV0dXJuIHRhcmdldEluc3Q7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0
VGFyZ2V0SW5zdEZvckNoYW5nZUV2ZW50KHRvcExldmVsVHlwZSwgdGFyZ2V0SW5zdCkge1xuICBp
ZiAodG9wTGV2ZWxUeXBlID09PSAndG9wQ2hhbmdlJykge1xuICAgIHJldHVybiB0YXJnZXRJbnN0
O1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUV2ZW50c0ZvckNoYW5nZUV2ZW50SUU4KHRvcExl
dmVsVHlwZSwgdGFyZ2V0LCB0YXJnZXRJbnN0KSB7XG4gIGlmICh0b3BMZXZlbFR5cGUgPT09ICd0
b3BGb2N1cycpIHtcbiAgICAvLyBzdG9wV2F0Y2hpbmcoKSBzaG91bGQgYmUgYSBub29wIGhlcmUg
YnV0IHdlIGNhbGwgaXQganVzdCBpbiBjYXNlIHdlXG4gICAgLy8gbWlzc2VkIGEgYmx1ciBldmVu
dCBzb21laG93LlxuICAgIHN0b3BXYXRjaGluZ0ZvckNoYW5nZUV2ZW50SUU4KCk7XG4gICAgc3Rh
cnRXYXRjaGluZ0ZvckNoYW5nZUV2ZW50SUU4KHRhcmdldCwgdGFyZ2V0SW5zdCk7XG4gIH0gZWxz
ZSBpZiAodG9wTGV2ZWxUeXBlID09PSAndG9wQmx1cicpIHtcbiAgICBzdG9wV2F0Y2hpbmdGb3JD
aGFuZ2VFdmVudElFOCgpO1xuICB9XG59XG5cbi8qKlxuICogU0VDVElPTjogaGFuZGxlIGBpbnB1
dGAgZXZlbnRcbiAqL1xudmFyIGlzSW5wdXRFdmVudFN1cHBvcnRlZCA9IGZhbHNlO1xuaWYgKEV4
ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSkge1xuICAvLyBJRTkgY2xhaW1zIHRvIHN1cHBv
cnQgdGhlIGlucHV0IGV2ZW50IGJ1dCBmYWlscyB0byB0cmlnZ2VyIGl0IHdoZW5cbiAgLy8gZGVs
ZXRpbmcgdGV4dCwgc28gd2UgaWdub3JlIGl0cyBpbnB1dCBldmVudHMuXG5cbiAgaXNJbnB1dEV2
ZW50U3VwcG9ydGVkID0gaXNFdmVudFN1cHBvcnRlZCgnaW5wdXQnKSAmJiAoISgnZG9jdW1lbnRN
b2RlJyBpbiBkb2N1bWVudCkgfHwgZG9jdW1lbnQuZG9jdW1lbnRNb2RlID4gOSk7XG59XG5cbi8q
KlxuICogKEZvciBJRSA8PTkpIFN0YXJ0cyB0cmFja2luZyBwcm9wZXJ0eWNoYW5nZSBldmVudHMg
b24gdGhlIHBhc3NlZC1pbiBlbGVtZW50XG4gKiBhbmQgb3ZlcnJpZGUgdGhlIHZhbHVlIHByb3Bl
cnR5IHNvIHRoYXQgd2UgY2FuIGRpc3Rpbmd1aXNoIHVzZXIgZXZlbnRzIGZyb21cbiAqIHZhbHVl
IGNoYW5nZXMgaW4gSlMuXG4gKi9cbmZ1bmN0aW9uIHN0YXJ0V2F0Y2hpbmdGb3JWYWx1ZUNoYW5n
ZSh0YXJnZXQsIHRhcmdldEluc3QpIHtcbiAgYWN0aXZlRWxlbWVudCA9IHRhcmdldDtcbiAgYWN0
aXZlRWxlbWVudEluc3QgPSB0YXJnZXRJbnN0O1xuICBhY3RpdmVFbGVtZW50LmF0dGFjaEV2ZW50
KCdvbnByb3BlcnR5Y2hhbmdlJywgaGFuZGxlUHJvcGVydHlDaGFuZ2UpO1xufVxuXG4vKipcbiAq
IChGb3IgSUUgPD05KSBSZW1vdmVzIHRoZSBldmVudCBsaXN0ZW5lcnMgZnJvbSB0aGUgY3VycmVu
dGx5LXRyYWNrZWQgZWxlbWVudCxcbiAqIGlmIGFueSBleGlzdHMuXG4gKi9cbmZ1bmN0aW9uIHN0
b3BXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKCkge1xuICBpZiAoIWFjdGl2ZUVsZW1lbnQpIHtcbiAg
ICByZXR1cm47XG4gIH1cbiAgYWN0aXZlRWxlbWVudC5kZXRhY2hFdmVudCgnb25wcm9wZXJ0eWNo
YW5nZScsIGhhbmRsZVByb3BlcnR5Q2hhbmdlKTtcblxuICBhY3RpdmVFbGVtZW50ID0gbnVsbDtc
biAgYWN0aXZlRWxlbWVudEluc3QgPSBudWxsO1xufVxuXG4vKipcbiAqIChGb3IgSUUgPD05KSBI
YW5kbGVzIGEgcHJvcGVydHljaGFuZ2UgZXZlbnQsIHNlbmRpbmcgYSBgY2hhbmdlYCBldmVudCBp
ZlxuICogdGhlIHZhbHVlIG9mIHRoZSBhY3RpdmUgZWxlbWVudCBoYXMgY2hhbmdlZC5cbiAqL1xu
ZnVuY3Rpb24gaGFuZGxlUHJvcGVydHlDaGFuZ2UobmF0aXZlRXZlbnQpIHtcbiAgaWYgKG5hdGl2
ZUV2ZW50LnByb3BlcnR5TmFtZSAhPT0gJ3ZhbHVlJykge1xuICAgIHJldHVybjtcbiAgfVxuICBp
ZiAoZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKGFjdGl2ZUVsZW1lbnRJbnN0LCBuYXRpdmVFdmVudCkp
IHtcbiAgICBtYW51YWxEaXNwYXRjaENoYW5nZUV2ZW50KG5hdGl2ZUV2ZW50KTtcbiAgfVxufVxu
XG5mdW5jdGlvbiBoYW5kbGVFdmVudHNGb3JJbnB1dEV2ZW50UG9seWZpbGwodG9wTGV2ZWxUeXBl
LCB0YXJnZXQsIHRhcmdldEluc3QpIHtcbiAgaWYgKHRvcExldmVsVHlwZSA9PT0gJ3RvcEZvY3Vz
Jykge1xuICAgIC8vIEluIElFOCwgd2UgY2FuIGNhcHR1cmUgYWxtb3N0IGFsbCAudmFsdWUgY2hh
bmdlcyBieSBhZGRpbmcgYVxuICAgIC8vIHByb3BlcnR5Y2hhbmdlIGhhbmRsZXIgYW5kIGxvb2tp
bmcgZm9yIGV2ZW50cyB3aXRoIHByb3BlcnR5TmFtZVxuICAgIC8vIGVxdWFsIHRvICd2YWx1ZSdc
biAgICAvLyBJbiBJRTksIHByb3BlcnR5Y2hhbmdlIGZpcmVzIGZvciBtb3N0IGlucHV0IGV2ZW50
cyBidXQgaXMgYnVnZ3kgYW5kXG4gICAgLy8gZG9lc24ndCBmaXJlIHdoZW4gdGV4dCBpcyBkZWxl
dGVkLCBidXQgY29udmVuaWVudGx5LCBzZWxlY3Rpb25jaGFuZ2VcbiAgICAvLyBhcHBlYXJzIHRv
IGZpcmUgaW4gYWxsIG9mIHRoZSByZW1haW5pbmcgY2FzZXMgc28gd2UgY2F0Y2ggdGhvc2UgYW5k
XG4gICAgLy8gZm9yd2FyZCB0aGUgZXZlbnQgaWYgdGhlIHZhbHVlIGhhcyBjaGFuZ2VkXG4gICAg
Ly8gSW4gZWl0aGVyIGNhc2UsIHdlIGRvbid0IHdhbnQgdG8gY2FsbCB0aGUgZXZlbnQgaGFuZGxl
ciBpZiB0aGUgdmFsdWVcbiAgICAvLyBpcyBjaGFuZ2VkIGZyb20gSlMgc28gd2UgcmVkZWZpbmUg
YSBzZXR0ZXIgZm9yIGAudmFsdWVgIHRoYXQgdXBkYXRlc1xuICAgIC8vIG91ciBhY3RpdmVFbGVt
ZW50VmFsdWUgdmFyaWFibGUsIGFsbG93aW5nIHVzIHRvIGlnbm9yZSB0aG9zZSBjaGFuZ2VzXG4g
ICAgLy9cbiAgICAvLyBzdG9wV2F0Y2hpbmcoKSBzaG91bGQgYmUgYSBub29wIGhlcmUgYnV0IHdl
IGNhbGwgaXQganVzdCBpbiBjYXNlIHdlXG4gICAgLy8gbWlzc2VkIGEgYmx1ciBldmVudCBzb21l
aG93LlxuICAgIHN0b3BXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKCk7XG4gICAgc3RhcnRXYXRjaGlu
Z0ZvclZhbHVlQ2hhbmdlKHRhcmdldCwgdGFyZ2V0SW5zdCk7XG4gIH0gZWxzZSBpZiAodG9wTGV2
ZWxUeXBlID09PSAndG9wQmx1cicpIHtcbiAgICBzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSgp
O1xuICB9XG59XG5cbi8vIEZvciBJRTggYW5kIElFOS5cbmZ1bmN0aW9uIGdldFRhcmdldEluc3RG
b3JJbnB1dEV2ZW50UG9seWZpbGwodG9wTGV2ZWxUeXBlLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVu
dCkge1xuICBpZiAodG9wTGV2ZWxUeXBlID09PSAndG9wU2VsZWN0aW9uQ2hhbmdlJyB8fCB0b3BM
ZXZlbFR5cGUgPT09ICd0b3BLZXlVcCcgfHwgdG9wTGV2ZWxUeXBlID09PSAndG9wS2V5RG93bicp
IHtcbiAgICAvLyBPbiB0aGUgc2VsZWN0aW9uY2hhbmdlIGV2ZW50LCB0aGUgdGFyZ2V0IGlzIGp1
c3QgZG9jdW1lbnQgd2hpY2ggaXNuJ3RcbiAgICAvLyBoZWxwZnVsIGZvciB1cyBzbyBqdXN0IGNo
ZWNrIGFjdGl2ZUVsZW1lbnQgaW5zdGVhZC5cbiAgICAvL1xuICAgIC8vIDk5JSBvZiB0aGUgdGlt
ZSwga2V5ZG93biBhbmQga2V5dXAgYXJlbid0IG5lY2Vzc2FyeS4gSUU4IGZhaWxzIHRvIGZpcmVc
biAgICAvLyBwcm9wZXJ0eWNoYW5nZSBvbiB0aGUgZmlyc3QgaW5wdXQgZXZlbnQgYWZ0ZXIgc2V0
dGluZyBgdmFsdWVgIGZyb20gYVxuICAgIC8vIHNjcmlwdCBhbmQgZmlyZXMgb25seSBrZXlkb3du
LCBrZXlwcmVzcywga2V5dXAuIENhdGNoaW5nIGtleXVwIHVzdWFsbHlcbiAgICAvLyBnZXRzIGl0
IGFuZCBjYXRjaGluZyBrZXlkb3duIGxldHMgdXMgZmlyZSBhbiBldmVudCBmb3IgdGhlIGZpcnN0
XG4gICAgLy8ga2V5c3Ryb2tlIGlmIHVzZXIgZG9lcyBhIGtleSByZXBlYXQgKGl0J2xsIGJlIGEg
bGl0dGxlIGRlbGF5ZWQ6IHJpZ2h0XG4gICAgLy8gYmVmb3JlIHRoZSBzZWNvbmQga2V5c3Ryb2tl
KS4gT3RoZXIgaW5wdXQgbWV0aG9kcyAoZS5nLiwgcGFzdGUpIHNlZW0gdG9cbiAgICAvLyBmaXJl
IHNlbGVjdGlvbmNoYW5nZSBub3JtYWxseS5cbiAgICByZXR1cm4gZ2V0SW5zdElmVmFsdWVDaGFu
Z2VkKGFjdGl2ZUVsZW1lbnRJbnN0LCBuYXRpdmVFdmVudCk7XG4gIH1cbn1cblxuLyoqXG4gKiBT
RUNUSU9OOiBoYW5kbGUgYGNsaWNrYCBldmVudFxuICovXG5mdW5jdGlvbiBzaG91bGRVc2VDbGlj
a0V2ZW50KGVsZW0pIHtcbiAgLy8gVXNlIHRoZSBgY2xpY2tgIGV2ZW50IHRvIGRldGVjdCBjaGFu
Z2VzIHRvIGNoZWNrYm94IGFuZCByYWRpbyBpbnB1dHMuXG4gIC8vIFRoaXMgYXBwcm9hY2ggd29y
a3MgYWNyb3NzIGFsbCBicm93c2Vycywgd2hlcmVhcyBgY2hhbmdlYCBkb2VzIG5vdCBmaXJlXG4g
IC8vIHVudGlsIGBibHVyYCBpbiBJRTguXG4gIHZhciBub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWU7
XG4gIHJldHVybiBub2RlTmFtZSAmJiBub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW5wdXQn
ICYmIChlbGVtLnR5cGUgPT09ICdjaGVja2JveCcgfHwgZWxlbS50eXBlID09PSAncmFkaW8nKTtc
bn1cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0SW5zdEZvckNsaWNrRXZlbnQodG9wTGV2ZWxUeXBlLCB0
YXJnZXRJbnN0LCBuYXRpdmVFdmVudCkge1xuICBpZiAodG9wTGV2ZWxUeXBlID09PSAndG9wQ2xp
Y2snKSB7XG4gICAgcmV0dXJuIGdldEluc3RJZlZhbHVlQ2hhbmdlZCh0YXJnZXRJbnN0LCBuYXRp
dmVFdmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0SW5zdEZvcklucHV0T3JDaGFu
Z2VFdmVudCh0b3BMZXZlbFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50KSB7XG4gIGlmICh0
b3BMZXZlbFR5cGUgPT09ICd0b3BJbnB1dCcgfHwgdG9wTGV2ZWxUeXBlID09PSAndG9wQ2hhbmdl
Jykge1xuICAgIHJldHVybiBnZXRJbnN0SWZWYWx1ZUNoYW5nZWQodGFyZ2V0SW5zdCwgbmF0aXZl
RXZlbnQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUNvbnRyb2xsZWRJbnB1dEJsdXIoaW5z
dCwgbm9kZSkge1xuICAvLyBUT0RPOiBJbiBJRSwgaW5zdCBpcyBvY2Nhc2lvbmFsbHkgbnVsbC4g
V2h5P1xuICBpZiAoaW5zdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRmli
ZXIgYW5kIFJlYWN0RE9NIGtlZXAgd3JhcHBlciBzdGF0ZSBpbiBzZXBhcmF0ZSBwbGFjZXNcbiAg
dmFyIHN0YXRlID0gaW5zdC5fd3JhcHBlclN0YXRlIHx8IG5vZGUuX3dyYXBwZXJTdGF0ZTtcblxu
ICBpZiAoIXN0YXRlIHx8ICFzdGF0ZS5jb250cm9sbGVkIHx8IG5vZGUudHlwZSAhPT0gJ251bWJl
cicpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBJZiBjb250cm9sbGVkLCBhc3NpZ24gdGhl
IHZhbHVlIGF0dHJpYnV0ZSB0byB0aGUgY3VycmVudCB2YWx1ZSBvbiBibHVyXG4gIHZhciB2YWx1
ZSA9ICcnICsgbm9kZS52YWx1ZTtcbiAgaWYgKG5vZGUuZ2V0QXR0cmlidXRlKCd2YWx1ZScpICE9
PSB2YWx1ZSkge1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKCd2YWx1ZScsIHZhbHVlKTtcbiAgfVxu
fVxuXG4vKipcbiAqIFRoaXMgcGx1Z2luIGNyZWF0ZXMgYW4gYG9uQ2hhbmdlYCBldmVudCB0aGF0
IG5vcm1hbGl6ZXMgY2hhbmdlIGV2ZW50c1xuICogYWNyb3NzIGZvcm0gZWxlbWVudHMuIFRoaXMg
ZXZlbnQgZmlyZXMgYXQgYSB0aW1lIHdoZW4gaXQncyBwb3NzaWJsZSB0b1xuICogY2hhbmdlIHRo
ZSBlbGVtZW50J3MgdmFsdWUgd2l0aG91dCBzZWVpbmcgYSBmbGlja2VyLlxuICpcbiAqIFN1cHBv
cnRlZCBlbGVtZW50cyBhcmU6XG4gKiAtIGlucHV0IChzZWUgYGlzVGV4dElucHV0RWxlbWVudGAp
XG4gKiAtIHRleHRhcmVhXG4gKiAtIHNlbGVjdFxuICovXG52YXIgQ2hhbmdlRXZlbnRQbHVnaW4g
PSB7XG4gIGV2ZW50VHlwZXM6IGV2ZW50VHlwZXMsXG5cbiAgX2FsbG93U2ltdWxhdGVkUGFzc1Ro
cm91Z2g6IHRydWUsXG4gIF9pc0lucHV0RXZlbnRTdXBwb3J0ZWQ6IGlzSW5wdXRFdmVudFN1cHBv
cnRlZCxcblxuICBleHRyYWN0RXZlbnRzOiBmdW5jdGlvbiAodG9wTGV2ZWxUeXBlLCB0YXJnZXRJ
bnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgICB2YXIgdGFyZ2V0Tm9k
ZSA9IHRhcmdldEluc3QgPyBSZWFjdERPTUNvbXBvbmVudFRyZWUuZ2V0Tm9kZUZyb21JbnN0YW5j
ZSh0YXJnZXRJbnN0KSA6IHdpbmRvdztcblxuICAgIHZhciBnZXRUYXJnZXRJbnN0RnVuYywgaGFu
ZGxlRXZlbnRGdW5jO1xuICAgIGlmIChzaG91bGRVc2VDaGFuZ2VFdmVudCh0YXJnZXROb2RlKSkg
e1xuICAgICAgaWYgKGRvZXNDaGFuZ2VFdmVudEJ1YmJsZSkge1xuICAgICAgICBnZXRUYXJnZXRJ
bnN0RnVuYyA9IGdldFRhcmdldEluc3RGb3JDaGFuZ2VFdmVudDtcbiAgICAgIH0gZWxzZSB7XG4g
ICAgICAgIGhhbmRsZUV2ZW50RnVuYyA9IGhhbmRsZUV2ZW50c0ZvckNoYW5nZUV2ZW50SUU4O1xu
ICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNUZXh0SW5wdXRFbGVtZW50KHRhcmdldE5vZGUpKSB7
XG4gICAgICBpZiAoaXNJbnB1dEV2ZW50U3VwcG9ydGVkKSB7XG4gICAgICAgIGdldFRhcmdldElu
c3RGdW5jID0gZ2V0VGFyZ2V0SW5zdEZvcklucHV0T3JDaGFuZ2VFdmVudDtcbiAgICAgIH0gZWxz
ZSB7XG4gICAgICAgIGdldFRhcmdldEluc3RGdW5jID0gZ2V0VGFyZ2V0SW5zdEZvcklucHV0RXZl
bnRQb2x5ZmlsbDtcbiAgICAgICAgaGFuZGxlRXZlbnRGdW5jID0gaGFuZGxlRXZlbnRzRm9ySW5w
dXRFdmVudFBvbHlmaWxsO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc2hvdWxkVXNlQ2xpY2tF
dmVudCh0YXJnZXROb2RlKSkge1xuICAgICAgZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJ
bnN0Rm9yQ2xpY2tFdmVudDtcbiAgICB9XG5cbiAgICBpZiAoZ2V0VGFyZ2V0SW5zdEZ1bmMpIHtc
biAgICAgIHZhciBpbnN0ID0gZ2V0VGFyZ2V0SW5zdEZ1bmModG9wTGV2ZWxUeXBlLCB0YXJnZXRJ
bnN0LCBuYXRpdmVFdmVudCk7XG4gICAgICBpZiAoaW5zdCkge1xuICAgICAgICB2YXIgZXZlbnQg
PSBjcmVhdGVBbmRBY2N1bXVsYXRlQ2hhbmdlRXZlbnQoaW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2
ZUV2ZW50VGFyZ2V0KTtcbiAgICAgICAgcmV0dXJuIGV2ZW50O1xuICAgICAgfVxuICAgIH1cblxu
ICAgIGlmIChoYW5kbGVFdmVudEZ1bmMpIHtcbiAgICAgIGhhbmRsZUV2ZW50RnVuYyh0b3BMZXZl
bFR5cGUsIHRhcmdldE5vZGUsIHRhcmdldEluc3QpO1xuICAgIH1cblxuICAgIC8vIFdoZW4gYmx1
cnJpbmcsIHNldCB0aGUgdmFsdWUgYXR0cmlidXRlIGZvciBudW1iZXIgaW5wdXRzXG4gICAgaWYg
KHRvcExldmVsVHlwZSA9PT0gJ3RvcEJsdXInKSB7XG4gICAgICBoYW5kbGVDb250cm9sbGVkSW5w
dXRCbHVyKHRhcmdldEluc3QsIHRhcmdldE5vZGUpO1xuICAgIH1cbiAgfVxufTtcblxubW9kdWxl
LmV4cG9ydHMgPSBDaGFuZ2VFdmVudFBsdWdpbjtcblxuLyoqKi8gfSksXG4vKiAxMjcgKi9cbi8q
KiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxu
XCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29r
LCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUg
aXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICog
TElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBB
biBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0
aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG5c
blxudmFyIFJlYWN0T3duZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyOCk7XG5cbnZhciBSZWFj
dFJlZiA9IHt9O1xuXG5mdW5jdGlvbiBhdHRhY2hSZWYocmVmLCBjb21wb25lbnQsIG93bmVyKSB7
XG4gIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmVmKGNvbXBvbmVudC5n
ZXRQdWJsaWNJbnN0YW5jZSgpKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBMZWdhY3kgcmVmXG4gICAg
UmVhY3RPd25lci5hZGRDb21wb25lbnRBc1JlZlRvKGNvbXBvbmVudCwgcmVmLCBvd25lcik7XG4g
IH1cbn1cblxuZnVuY3Rpb24gZGV0YWNoUmVmKHJlZiwgY29tcG9uZW50LCBvd25lcikge1xuICBp
ZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJlZihudWxsKTtcbiAgfSBlbHNl
IHtcbiAgICAvLyBMZWdhY3kgcmVmXG4gICAgUmVhY3RPd25lci5yZW1vdmVDb21wb25lbnRBc1Jl
ZkZyb20oY29tcG9uZW50LCByZWYsIG93bmVyKTtcbiAgfVxufVxuXG5SZWFjdFJlZi5hdHRhY2hS
ZWZzID0gZnVuY3Rpb24gKGluc3RhbmNlLCBlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50ID09PSBu
dWxsIHx8IHR5cGVvZiBlbGVtZW50ICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybjtcbiAgfVxu
ICB2YXIgcmVmID0gZWxlbWVudC5yZWY7XG4gIGlmIChyZWYgIT0gbnVsbCkge1xuICAgIGF0dGFj
aFJlZihyZWYsIGluc3RhbmNlLCBlbGVtZW50Ll9vd25lcik7XG4gIH1cbn07XG5cblJlYWN0UmVm
LnNob3VsZFVwZGF0ZVJlZnMgPSBmdW5jdGlvbiAocHJldkVsZW1lbnQsIG5leHRFbGVtZW50KSB7
XG4gIC8vIElmIGVpdGhlciB0aGUgb3duZXIgb3IgYSBgcmVmYCBoYXMgY2hhbmdlZCwgbWFrZSBz
dXJlIHRoZSBuZXdlc3Qgb3duZXJcbiAgLy8gaGFzIHN0b3JlZCBhIHJlZmVyZW5jZSB0byBgdGhp
c2AsIGFuZCB0aGUgcHJldmlvdXMgb3duZXIgKGlmIGRpZmZlcmVudClcbiAgLy8gaGFzIGZvcmdv
dHRlbiB0aGUgcmVmZXJlbmNlIHRvIGB0aGlzYC4gV2UgdXNlIHRoZSBlbGVtZW50IGluc3RlYWRc
biAgLy8gb2YgdGhlIHB1YmxpYyB0aGlzLnByb3BzIGJlY2F1c2UgdGhlIHBvc3QgcHJvY2Vzc2lu
ZyBjYW5ub3QgZGV0ZXJtaW5lXG4gIC8vIGEgcmVmLiBUaGUgcmVmIGNvbmNlcHR1YWxseSBsaXZl
cyBvbiB0aGUgZWxlbWVudC5cblxuICAvLyBUT0RPOiBTaG91bGQgdGhpcyBldmVuIGJlIHBvc3Np
YmxlPyBUaGUgb3duZXIgY2Fubm90IGNoYW5nZSBiZWNhdXNlXG4gIC8vIGl0J3MgZm9yYmlkZGVu
IGJ5IHNob3VsZFVwZGF0ZVJlYWN0Q29tcG9uZW50LiBUaGUgcmVmIGNhbiBjaGFuZ2VcbiAgLy8g
aWYgeW91IHN3YXAgdGhlIGtleXMgb2YgYnV0IG5vdCB0aGUgcmVmcy4gUmVjb25zaWRlciB3aGVy
ZSB0aGlzIGNoZWNrXG4gIC8vIGlzIG1hZGUuIEl0IHByb2JhYmx5IGJlbG9uZ3Mgd2hlcmUgdGhl
IGtleSBjaGVja2luZyBhbmRcbiAgLy8gaW5zdGFudGlhdGVSZWFjdENvbXBvbmVudCBpcyBkb25l
LlxuXG4gIHZhciBwcmV2UmVmID0gbnVsbDtcbiAgdmFyIHByZXZPd25lciA9IG51bGw7XG4gIGlm
IChwcmV2RWxlbWVudCAhPT0gbnVsbCAmJiB0eXBlb2YgcHJldkVsZW1lbnQgPT09ICdvYmplY3Qn
KSB7XG4gICAgcHJldlJlZiA9IHByZXZFbGVtZW50LnJlZjtcbiAgICBwcmV2T3duZXIgPSBwcmV2
RWxlbWVudC5fb3duZXI7XG4gIH1cblxuICB2YXIgbmV4dFJlZiA9IG51bGw7XG4gIHZhciBuZXh0
T3duZXIgPSBudWxsO1xuICBpZiAobmV4dEVsZW1lbnQgIT09IG51bGwgJiYgdHlwZW9mIG5leHRF
bGVtZW50ID09PSAnb2JqZWN0Jykge1xuICAgIG5leHRSZWYgPSBuZXh0RWxlbWVudC5yZWY7XG4g
ICAgbmV4dE93bmVyID0gbmV4dEVsZW1lbnQuX293bmVyO1xuICB9XG5cbiAgcmV0dXJuIHByZXZS
ZWYgIT09IG5leHRSZWYgfHxcbiAgLy8gSWYgb3duZXIgY2hhbmdlcyBidXQgd2UgaGF2ZSBhbiB1
bmNoYW5nZWQgZnVuY3Rpb24gcmVmLCBkb24ndCB1cGRhdGUgcmVmc1xuICB0eXBlb2YgbmV4dFJl
ZiA9PT0gJ3N0cmluZycgJiYgbmV4dE93bmVyICE9PSBwcmV2T3duZXI7XG59O1xuXG5SZWFjdFJl
Zi5kZXRhY2hSZWZzID0gZnVuY3Rpb24gKGluc3RhbmNlLCBlbGVtZW50KSB7XG4gIGlmIChlbGVt
ZW50ID09PSBudWxsIHx8IHR5cGVvZiBlbGVtZW50ICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVy
bjtcbiAgfVxuICB2YXIgcmVmID0gZWxlbWVudC5yZWY7XG4gIGlmIChyZWYgIT0gbnVsbCkge1xu
ICAgIGRldGFjaFJlZihyZWYsIGluc3RhbmNlLCBlbGVtZW50Ll9vd25lcik7XG4gIH1cbn07XG5c
bm1vZHVsZS5leHBvcnRzID0gUmVhY3RSZWY7XG5cbi8qKiovIH0pLFxuLyogMTI4ICovXG4vKioq
LyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwi
dXNlIHN0cmljdFwiO1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywg
SW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlz
IGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJ
Q0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4g
YWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhl
IFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuXG5c
bnZhciBfcHJvZEludmFyaWFudCA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG5cbnZhciBpbnZh
cmlhbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG4vKipcbiAqIEBwYXJhbSB7P29iamVj
dH0gb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGBvYmplY3RgIGlzIGEgdmFs
aWQgb3duZXIuXG4gKiBAZmluYWxcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZE93bmVyKG9iamVjdCkg
e1xuICByZXR1cm4gISEob2JqZWN0ICYmIHR5cGVvZiBvYmplY3QuYXR0YWNoUmVmID09PSAnZnVu
Y3Rpb24nICYmIHR5cGVvZiBvYmplY3QuZGV0YWNoUmVmID09PSAnZnVuY3Rpb24nKTtcbn1cblxu
LyoqXG4gKiBSZWFjdE93bmVycyBhcmUgY2FwYWJsZSBvZiBzdG9yaW5nIHJlZmVyZW5jZXMgdG8g
b3duZWQgY29tcG9uZW50cy5cbiAqXG4gKiBBbGwgY29tcG9uZW50cyBhcmUgY2FwYWJsZSBvZiAv
L2JlaW5nLy8gcmVmZXJlbmNlZCBieSBvd25lciBjb21wb25lbnRzLCBidXRcbiAqIG9ubHkgUmVh
Y3RPd25lciBjb21wb25lbnRzIGFyZSBjYXBhYmxlIG9mIC8vcmVmZXJlbmNpbmcvLyBvd25lZCBj
b21wb25lbnRzLlxuICogVGhlIG5hbWVkIHJlZmVyZW5jZSBpcyBrbm93biBhcyBhIFwicmVmXCIu
XG4gKlxuICogUmVmcyBhcmUgYXZhaWxhYmxlIHdoZW4gbW91bnRlZCBhbmQgdXBkYXRlZCBkdXJp
bmcgcmVjb25jaWxpYXRpb24uXG4gKlxuICogICB2YXIgTXlDb21wb25lbnQgPSBSZWFjdC5jcmVh
dGVDbGFzcyh7XG4gKiAgICAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAqICAgICAgIHJldHVybiAo
XG4gKiAgICAgICAgIDxkaXYgb25DbGljaz17dGhpcy5oYW5kbGVDbGlja30+XG4gKiAgICAgICAg
ICAgPEN1c3RvbUNvbXBvbmVudCByZWY9XCJjdXN0b21cIiAvPlxuICogICAgICAgICA8L2Rpdj5c
biAqICAgICAgICk7XG4gKiAgICAgfSxcbiAqICAgICBoYW5kbGVDbGljazogZnVuY3Rpb24oKSB7
XG4gKiAgICAgICB0aGlzLnJlZnMuY3VzdG9tLmhhbmRsZUNsaWNrKCk7XG4gKiAgICAgfSxcbiAq
ICAgICBjb21wb25lbnREaWRNb3VudDogZnVuY3Rpb24oKSB7XG4gKiAgICAgICB0aGlzLnJlZnMu
Y3VzdG9tLmluaXRpYWxpemUoKTtcbiAqICAgICB9XG4gKiAgIH0pO1xuICpcbiAqIFJlZnMgc2hv
dWxkIHJhcmVseSBiZSB1c2VkLiBXaGVuIHJlZnMgYXJlIHVzZWQsIHRoZXkgc2hvdWxkIG9ubHkg
YmUgZG9uZSB0b1xuICogY29udHJvbCBkYXRhIHRoYXQgaXMgbm90IGhhbmRsZWQgYnkgUmVhY3Qn
cyBkYXRhIGZsb3cuXG4gKlxuICogQGNsYXNzIFJlYWN0T3duZXJcbiAqL1xudmFyIFJlYWN0T3du
ZXIgPSB7XG4gIC8qKlxuICAgKiBBZGRzIGEgY29tcG9uZW50IGJ5IHJlZiB0byBhbiBvd25lciBj
b21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGNvbXBvbmVudCBD
b21wb25lbnQgdG8gcmVmZXJlbmNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmIE5hbWUgYnkg
d2hpY2ggdG8gcmVmZXIgdG8gdGhlIGNvbXBvbmVudC5cbiAgICogQHBhcmFtIHtSZWFjdE93bmVy
fSBvd25lciBDb21wb25lbnQgb24gd2hpY2ggdG8gcmVjb3JkIHRoZSByZWYuXG4gICAqIEBmaW5h
bFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGFkZENvbXBvbmVudEFzUmVmVG86IGZ1bmN0aW9u
IChjb21wb25lbnQsIHJlZiwgb3duZXIpIHtcbiAgICAhaXNWYWxpZE93bmVyKG93bmVyKSA/ICBm
YWxzZSA/IGludmFyaWFudChmYWxzZSwgJ2FkZENvbXBvbmVudEFzUmVmVG8oLi4uKTogT25seSBh
IFJlYWN0T3duZXIgY2FuIGhhdmUgcmVmcy4gWW91IG1pZ2h0IGJlIGFkZGluZyBhIHJlZiB0byBh
IGNvbXBvbmVudCB0aGF0IHdhcyBub3QgY3JlYXRlZCBpbnNpZGUgYSBjb21wb25lbnRcXCdzIGBy
ZW5kZXJgIG1ldGhvZCwgb3IgeW91IGhhdmUgbXVsdGlwbGUgY29waWVzIG9mIFJlYWN0IGxvYWRl
ZCAoZGV0YWlsczogaHR0cHM6Ly9mYi5tZS9yZWFjdC1yZWZzLW11c3QtaGF2ZS1vd25lcikuJykg
OiBfcHJvZEludmFyaWFudCgnMTE5JykgOiB2b2lkIDA7XG4gICAgb3duZXIuYXR0YWNoUmVmKHJl
ZiwgY29tcG9uZW50KTtcbiAgfSxcblxuICAvKipcbiAgICogUmVtb3ZlcyBhIGNvbXBvbmVudCBi
eSByZWYgZnJvbSBhbiBvd25lciBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RD
b21wb25lbnR9IGNvbXBvbmVudCBDb21wb25lbnQgdG8gZGVyZWZlcmVuY2UuXG4gICAqIEBwYXJh
bSB7c3RyaW5nfSByZWYgTmFtZSBvZiB0aGUgcmVmIHRvIHJlbW92ZS5cbiAgICogQHBhcmFtIHtS
ZWFjdE93bmVyfSBvd25lciBDb21wb25lbnQgb24gd2hpY2ggdGhlIHJlZiBpcyByZWNvcmRlZC5c
biAgICogQGZpbmFsXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcmVtb3ZlQ29tcG9uZW50QXNS
ZWZGcm9tOiBmdW5jdGlvbiAoY29tcG9uZW50LCByZWYsIG93bmVyKSB7XG4gICAgIWlzVmFsaWRP
d25lcihvd25lcikgPyAgZmFsc2UgPyBpbnZhcmlhbnQoZmFsc2UsICdyZW1vdmVDb21wb25lbnRB
c1JlZkZyb20oLi4uKTogT25seSBhIFJlYWN0T3duZXIgY2FuIGhhdmUgcmVmcy4gWW91IG1pZ2h0
IGJlIHJlbW92aW5nIGEgcmVmIHRvIGEgY29tcG9uZW50IHRoYXQgd2FzIG5vdCBjcmVhdGVkIGlu
c2lkZSBhIGNvbXBvbmVudFxcJ3MgYHJlbmRlcmAgbWV0aG9kLCBvciB5b3UgaGF2ZSBtdWx0aXBs
ZSBjb3BpZXMgb2YgUmVhY3QgbG9hZGVkIChkZXRhaWxzOiBodHRwczovL2ZiLm1lL3JlYWN0LXJl
ZnMtbXVzdC1oYXZlLW93bmVyKS4nKSA6IF9wcm9kSW52YXJpYW50KCcxMjAnKSA6IHZvaWQgMDtc
biAgICB2YXIgb3duZXJQdWJsaWNJbnN0YW5jZSA9IG93bmVyLmdldFB1YmxpY0luc3RhbmNlKCk7
XG4gICAgLy8gQ2hlY2sgdGhhdCBgY29tcG9uZW50YCdzIG93bmVyIGlzIHN0aWxsIGFsaXZlIGFu
ZCB0aGF0IGBjb21wb25lbnRgIGlzIHN0aWxsIHRoZSBjdXJyZW50IHJlZlxuICAgIC8vIGJlY2F1
c2Ugd2UgZG8gbm90IHdhbnQgdG8gZGV0YWNoIHRoZSByZWYgaWYgYW5vdGhlciBjb21wb25lbnQg
c3RvbGUgaXQuXG4gICAgaWYgKG93bmVyUHVibGljSW5zdGFuY2UgJiYgb3duZXJQdWJsaWNJbnN0
YW5jZS5yZWZzW3JlZl0gPT09IGNvbXBvbmVudC5nZXRQdWJsaWNJbnN0YW5jZSgpKSB7XG4gICAg
ICBvd25lci5kZXRhY2hSZWYocmVmKTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRz
ID0gUmVhY3RPd25lcjtcblxuLyoqKi8gfSksXG4vKiAxMjkgKi9cbi8qKiovIChmdW5jdGlvbiht
b2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7
XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwg
cmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5k
ZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdy
YW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxl
IGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuXG5cbi8qKlxuICogTW9kdWxlIHRo
YXQgaXMgaW5qZWN0YWJsZSBpbnRvIGBFdmVudFBsdWdpbkh1YmAsIHRoYXQgc3BlY2lmaWVzIGFc
biAqIGRldGVybWluaXN0aWMgb3JkZXJpbmcgb2YgYEV2ZW50UGx1Z2luYHMuIEEgY29udmVuaWVu
dCB3YXkgdG8gcmVhc29uIGFib3V0XG4gKiBwbHVnaW5zLCB3aXRob3V0IGhhdmluZyB0byBwYWNr
YWdlIGV2ZXJ5IG9uZSBvZiB0aGVtLiBUaGlzIGlzIGJldHRlciB0aGFuXG4gKiBoYXZpbmcgcGx1
Z2lucyBiZSBvcmRlcmVkIGluIHRoZSBzYW1lIG9yZGVyIHRoYXQgdGhleSBhcmUgaW5qZWN0ZWQg
YmVjYXVzZVxuICogdGhhdCBvcmRlcmluZyB3b3VsZCBiZSBpbmZsdWVuY2VkIGJ5IHRoZSBwYWNr
YWdpbmcgb3JkZXIuXG4gKiBgUmVzcG9uZGVyRXZlbnRQbHVnaW5gIG11c3Qgb2NjdXIgYmVmb3Jl
IGBTaW1wbGVFdmVudFBsdWdpbmAgc28gdGhhdFxuICogcHJldmVudGluZyBkZWZhdWx0IG9uIGV2
ZW50cyBpcyBjb252ZW5pZW50IGluIGBTaW1wbGVFdmVudFBsdWdpbmAgaGFuZGxlcnMuXG4gKi9c
blxudmFyIERlZmF1bHRFdmVudFBsdWdpbk9yZGVyID0gWydSZXNwb25kZXJFdmVudFBsdWdpbics
ICdTaW1wbGVFdmVudFBsdWdpbicsICdUYXBFdmVudFBsdWdpbicsICdFbnRlckxlYXZlRXZlbnRQ
bHVnaW4nLCAnQ2hhbmdlRXZlbnRQbHVnaW4nLCAnU2VsZWN0RXZlbnRQbHVnaW4nLCAnQmVmb3Jl
SW5wdXRFdmVudFBsdWdpbiddO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERlZmF1bHRFdmVudFBsdWdp
bk9yZGVyO1xuXG4vKioqLyB9KSxcbi8qIDEzMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwg
ZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qKlxu
ICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUg
QlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJv
b3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAq
IG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhl
IHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG5cblxudmFyIEV2ZW50UHJvcGFnYXRvcnMgPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKDE5KTtcbnZhciBSZWFjdERPTUNvbXBvbmVudFRyZWUgPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKDQpO1xudmFyIFN5bnRoZXRpY01vdXNlRXZlbnQgPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKDI1KTtcblxudmFyIGV2ZW50VHlwZXMgPSB7XG4gIG1vdXNlRW50ZXI6IHtcbiAg
ICByZWdpc3RyYXRpb25OYW1lOiAnb25Nb3VzZUVudGVyJyxcbiAgICBkZXBlbmRlbmNpZXM6IFsn
dG9wTW91c2VPdXQnLCAndG9wTW91c2VPdmVyJ11cbiAgfSxcbiAgbW91c2VMZWF2ZToge1xuICAg
IHJlZ2lzdHJhdGlvbk5hbWU6ICdvbk1vdXNlTGVhdmUnLFxuICAgIGRlcGVuZGVuY2llczogWyd0
b3BNb3VzZU91dCcsICd0b3BNb3VzZU92ZXInXVxuICB9XG59O1xuXG52YXIgRW50ZXJMZWF2ZUV2
ZW50UGx1Z2luID0ge1xuICBldmVudFR5cGVzOiBldmVudFR5cGVzLFxuXG4gIC8qKlxuICAgKiBG
b3IgYWxtb3N0IGV2ZXJ5IGludGVyYWN0aW9uIHdlIGNhcmUgYWJvdXQsIHRoZXJlIHdpbGwgYmUg
Ym90aCBhIHRvcC1sZXZlbFxuICAgKiBgbW91c2VvdmVyYCBhbmQgYG1vdXNlb3V0YCBldmVudCB0
aGF0IG9jY3Vycy4gT25seSB1c2UgYG1vdXNlb3V0YCBzbyB0aGF0XG4gICAqIHdlIGRvIG5vdCBl
eHRyYWN0IGR1cGxpY2F0ZSBldmVudHMuIEhvd2V2ZXIsIG1vdmluZyB0aGUgbW91c2UgaW50byB0
aGVcbiAgICogYnJvd3NlciBmcm9tIG91dHNpZGUgd2lsbCBub3QgZmlyZSBhIGBtb3VzZW91dGAg
ZXZlbnQuIEluIHRoaXMgY2FzZSwgd2UgdXNlXG4gICAqIHRoZSBgbW91c2VvdmVyYCB0b3AtbGV2
ZWwgZXZlbnQuXG4gICAqL1xuICBleHRyYWN0RXZlbnRzOiBmdW5jdGlvbiAodG9wTGV2ZWxUeXBl
LCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgICBpZiAo
dG9wTGV2ZWxUeXBlID09PSAndG9wTW91c2VPdmVyJyAmJiAobmF0aXZlRXZlbnQucmVsYXRlZFRh
cmdldCB8fCBuYXRpdmVFdmVudC5mcm9tRWxlbWVudCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xu
ICAgIH1cbiAgICBpZiAodG9wTGV2ZWxUeXBlICE9PSAndG9wTW91c2VPdXQnICYmIHRvcExldmVs
VHlwZSAhPT0gJ3RvcE1vdXNlT3ZlcicpIHtcbiAgICAgIC8vIE11c3Qgbm90IGJlIGEgbW91c2Ug
aW4gb3IgbW91c2Ugb3V0IC0gaWdub3JpbmcuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5c
biAgICB2YXIgd2luO1xuICAgIGlmIChuYXRpdmVFdmVudFRhcmdldC53aW5kb3cgPT09IG5hdGl2
ZUV2ZW50VGFyZ2V0KSB7XG4gICAgICAvLyBgbmF0aXZlRXZlbnRUYXJnZXRgIGlzIHByb2JhYmx5
IGEgd2luZG93IG9iamVjdC5cbiAgICAgIHdpbiA9IG5hdGl2ZUV2ZW50VGFyZ2V0O1xuICAgIH0g
ZWxzZSB7XG4gICAgICAvLyBUT0RPOiBGaWd1cmUgb3V0IHdoeSBgb3duZXJEb2N1bWVudGAgaXMg
c29tZXRpbWVzIHVuZGVmaW5lZCBpbiBJRTguXG4gICAgICB2YXIgZG9jID0gbmF0aXZlRXZlbnRU
YXJnZXQub3duZXJEb2N1bWVudDtcbiAgICAgIGlmIChkb2MpIHtcbiAgICAgICAgd2luID0gZG9j
LmRlZmF1bHRWaWV3IHx8IGRvYy5wYXJlbnRXaW5kb3c7XG4gICAgICB9IGVsc2Uge1xuICAgICAg
ICB3aW4gPSB3aW5kb3c7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGZyb207XG4gICAgdmFy
IHRvO1xuICAgIGlmICh0b3BMZXZlbFR5cGUgPT09ICd0b3BNb3VzZU91dCcpIHtcbiAgICAgIGZy
b20gPSB0YXJnZXRJbnN0O1xuICAgICAgdmFyIHJlbGF0ZWQgPSBuYXRpdmVFdmVudC5yZWxhdGVk
VGFyZ2V0IHx8IG5hdGl2ZUV2ZW50LnRvRWxlbWVudDtcbiAgICAgIHRvID0gcmVsYXRlZCA/IFJl
YWN0RE9NQ29tcG9uZW50VHJlZS5nZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShyZWxhdGVkKSA6
IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE1vdmluZyB0byBhIG5vZGUgZnJvbSBvdXRz
aWRlIHRoZSB3aW5kb3cuXG4gICAgICBmcm9tID0gbnVsbDtcbiAgICAgIHRvID0gdGFyZ2V0SW5z
dDtcbiAgICB9XG5cbiAgICBpZiAoZnJvbSA9PT0gdG8pIHtcbiAgICAgIC8vIE5vdGhpbmcgcGVy
dGFpbnMgdG8gb3VyIG1hbmFnZWQgY29tcG9uZW50cy5cbiAgICAgIHJldHVybiBudWxsO1xuICAg
IH1cblxuICAgIHZhciBmcm9tTm9kZSA9IGZyb20gPT0gbnVsbCA/IHdpbiA6IFJlYWN0RE9NQ29t
cG9uZW50VHJlZS5nZXROb2RlRnJvbUluc3RhbmNlKGZyb20pO1xuICAgIHZhciB0b05vZGUgPSB0
byA9PSBudWxsID8gd2luIDogUmVhY3RET01Db21wb25lbnRUcmVlLmdldE5vZGVGcm9tSW5zdGFu
Y2UodG8pO1xuXG4gICAgdmFyIGxlYXZlID0gU3ludGhldGljTW91c2VFdmVudC5nZXRQb29sZWQo
ZXZlbnRUeXBlcy5tb3VzZUxlYXZlLCBmcm9tLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJn
ZXQpO1xuICAgIGxlYXZlLnR5cGUgPSAnbW91c2VsZWF2ZSc7XG4gICAgbGVhdmUudGFyZ2V0ID0g
ZnJvbU5vZGU7XG4gICAgbGVhdmUucmVsYXRlZFRhcmdldCA9IHRvTm9kZTtcblxuICAgIHZhciBl
bnRlciA9IFN5bnRoZXRpY01vdXNlRXZlbnQuZ2V0UG9vbGVkKGV2ZW50VHlwZXMubW91c2VFbnRl
ciwgdG8sIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgZW50ZXIudHlwZSA9
ICdtb3VzZWVudGVyJztcbiAgICBlbnRlci50YXJnZXQgPSB0b05vZGU7XG4gICAgZW50ZXIucmVs
YXRlZFRhcmdldCA9IGZyb21Ob2RlO1xuXG4gICAgRXZlbnRQcm9wYWdhdG9ycy5hY2N1bXVsYXRl
RW50ZXJMZWF2ZURpc3BhdGNoZXMobGVhdmUsIGVudGVyLCBmcm9tLCB0byk7XG5cbiAgICByZXR1
cm4gW2xlYXZlLCBlbnRlcl07XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRW50ZXJMZWF2
ZUV2ZW50UGx1Z2luO1xuXG4vKioqLyB9KSxcbi8qIDEzMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtc
bi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRl
ciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4g
dGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3Jh
bnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUg
aW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG5cblxudmFyIERPTVByb3BlcnR5ID0g
X193ZWJwYWNrX3JlcXVpcmVfXygxNSk7XG5cbnZhciBNVVNUX1VTRV9QUk9QRVJUWSA9IERPTVBy
b3BlcnR5LmluamVjdGlvbi5NVVNUX1VTRV9QUk9QRVJUWTtcbnZhciBIQVNfQk9PTEVBTl9WQUxV
RSA9IERPTVByb3BlcnR5LmluamVjdGlvbi5IQVNfQk9PTEVBTl9WQUxVRTtcbnZhciBIQVNfTlVN
RVJJQ19WQUxVRSA9IERPTVByb3BlcnR5LmluamVjdGlvbi5IQVNfTlVNRVJJQ19WQUxVRTtcbnZh
ciBIQVNfUE9TSVRJVkVfTlVNRVJJQ19WQUxVRSA9IERPTVByb3BlcnR5LmluamVjdGlvbi5IQVNf
UE9TSVRJVkVfTlVNRVJJQ19WQUxVRTtcbnZhciBIQVNfT1ZFUkxPQURFRF9CT09MRUFOX1ZBTFVF
ID0gRE9NUHJvcGVydHkuaW5qZWN0aW9uLkhBU19PVkVSTE9BREVEX0JPT0xFQU5fVkFMVUU7XG5c
bnZhciBIVE1MRE9NUHJvcGVydHlDb25maWcgPSB7XG4gIGlzQ3VzdG9tQXR0cmlidXRlOiBSZWdF
eHAucHJvdG90eXBlLnRlc3QuYmluZChuZXcgUmVnRXhwKCdeKGRhdGF8YXJpYSktWycgKyBET01Q
cm9wZXJ0eS5BVFRSSUJVVEVfTkFNRV9DSEFSICsgJ10qJCcpKSxcbiAgUHJvcGVydGllczoge1xu
ICAgIC8qKlxuICAgICAqIFN0YW5kYXJkIFByb3BlcnRpZXNcbiAgICAgKi9cbiAgICBhY2NlcHQ6
IDAsXG4gICAgYWNjZXB0Q2hhcnNldDogMCxcbiAgICBhY2Nlc3NLZXk6IDAsXG4gICAgYWN0aW9u
OiAwLFxuICAgIGFsbG93RnVsbFNjcmVlbjogSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgYWxsb3dU
cmFuc3BhcmVuY3k6IDAsXG4gICAgYWx0OiAwLFxuICAgIC8vIHNwZWNpZmllcyB0YXJnZXQgY29u
dGV4dCBmb3IgbGlua3Mgd2l0aCBgcHJlbG9hZGAgdHlwZVxuICAgIGFzOiAwLFxuICAgIGFzeW5j
OiBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBhdXRvQ29tcGxldGU6IDAsXG4gICAgLy8gYXV0b0Zv
Y3VzIGlzIHBvbHlmaWxsZWQvbm9ybWFsaXplZCBieSBBdXRvRm9jdXNVdGlsc1xuICAgIC8vIGF1
dG9Gb2N1czogSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgYXV0b1BsYXk6IEhBU19CT09MRUFOX1ZB
TFVFLFxuICAgIGNhcHR1cmU6IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIGNlbGxQYWRkaW5nOiAw
LFxuICAgIGNlbGxTcGFjaW5nOiAwLFxuICAgIGNoYXJTZXQ6IDAsXG4gICAgY2hhbGxlbmdlOiAw
LFxuICAgIGNoZWNrZWQ6IE1VU1RfVVNFX1BST1BFUlRZIHwgSEFTX0JPT0xFQU5fVkFMVUUsXG4g
ICAgY2l0ZTogMCxcbiAgICBjbGFzc0lEOiAwLFxuICAgIGNsYXNzTmFtZTogMCxcbiAgICBjb2xz
OiBIQVNfUE9TSVRJVkVfTlVNRVJJQ19WQUxVRSxcbiAgICBjb2xTcGFuOiAwLFxuICAgIGNvbnRl
bnQ6IDAsXG4gICAgY29udGVudEVkaXRhYmxlOiAwLFxuICAgIGNvbnRleHRNZW51OiAwLFxuICAg
IGNvbnRyb2xzOiBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBjb29yZHM6IDAsXG4gICAgY3Jvc3NP
cmlnaW46IDAsXG4gICAgZGF0YTogMCwgLy8gRm9yIGA8b2JqZWN0IC8+YCBhY3RzIGFzIGBzcmNg
LlxuICAgIGRhdGVUaW1lOiAwLFxuICAgICdkZWZhdWx0JzogSEFTX0JPT0xFQU5fVkFMVUUsXG4g
ICAgZGVmZXI6IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIGRpcjogMCxcbiAgICBkaXNhYmxlZDog
SEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgZG93bmxvYWQ6IEhBU19PVkVSTE9BREVEX0JPT0xFQU5f
VkFMVUUsXG4gICAgZHJhZ2dhYmxlOiAwLFxuICAgIGVuY1R5cGU6IDAsXG4gICAgZm9ybTogMCxc
biAgICBmb3JtQWN0aW9uOiAwLFxuICAgIGZvcm1FbmNUeXBlOiAwLFxuICAgIGZvcm1NZXRob2Q6
IDAsXG4gICAgZm9ybU5vVmFsaWRhdGU6IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIGZvcm1UYXJn
ZXQ6IDAsXG4gICAgZnJhbWVCb3JkZXI6IDAsXG4gICAgaGVhZGVyczogMCxcbiAgICBoZWlnaHQ6
IDAsXG4gICAgaGlkZGVuOiBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBoaWdoOiAwLFxuICAgIGhy
ZWY6IDAsXG4gICAgaHJlZkxhbmc6IDAsXG4gICAgaHRtbEZvcjogMCxcbiAgICBodHRwRXF1aXY6
IDAsXG4gICAgaWNvbjogMCxcbiAgICBpZDogMCxcbiAgICBpbnB1dE1vZGU6IDAsXG4gICAgaW50
ZWdyaXR5OiAwLFxuICAgIGlzOiAwLFxuICAgIGtleVBhcmFtczogMCxcbiAgICBrZXlUeXBlOiAw
LFxuICAgIGtpbmQ6IDAsXG4gICAgbGFiZWw6IDAsXG4gICAgbGFuZzogMCxcbiAgICBsaXN0OiAw
LFxuICAgIGxvb3A6IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIGxvdzogMCxcbiAgICBtYW5pZmVz
dDogMCxcbiAgICBtYXJnaW5IZWlnaHQ6IDAsXG4gICAgbWFyZ2luV2lkdGg6IDAsXG4gICAgbWF4
OiAwLFxuICAgIG1heExlbmd0aDogMCxcbiAgICBtZWRpYTogMCxcbiAgICBtZWRpYUdyb3VwOiAw
LFxuICAgIG1ldGhvZDogMCxcbiAgICBtaW46IDAsXG4gICAgbWluTGVuZ3RoOiAwLFxuICAgIC8v
IENhdXRpb247IGBvcHRpb24uc2VsZWN0ZWRgIGlzIG5vdCB1cGRhdGVkIGlmIGBzZWxlY3QubXVs
dGlwbGVgIGlzXG4gICAgLy8gZGlzYWJsZWQgd2l0aCBgcmVtb3ZlQXR0cmlidXRlYC5cbiAgICBt
dWx0aXBsZTogTVVTVF9VU0VfUFJPUEVSVFkgfCBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBtdXRl
ZDogTVVTVF9VU0VfUFJPUEVSVFkgfCBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBuYW1lOiAwLFxu
ICAgIG5vbmNlOiAwLFxuICAgIG5vVmFsaWRhdGU6IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIG9w
ZW46IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIG9wdGltdW06IDAsXG4gICAgcGF0dGVybjogMCxc
biAgICBwbGFjZWhvbGRlcjogMCxcbiAgICBwbGF5c0lubGluZTogSEFTX0JPT0xFQU5fVkFMVUUs
XG4gICAgcG9zdGVyOiAwLFxuICAgIHByZWxvYWQ6IDAsXG4gICAgcHJvZmlsZTogMCxcbiAgICBy
YWRpb0dyb3VwOiAwLFxuICAgIHJlYWRPbmx5OiBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICByZWZl
cnJlclBvbGljeTogMCxcbiAgICByZWw6IDAsXG4gICAgcmVxdWlyZWQ6IEhBU19CT09MRUFOX1ZB
TFVFLFxuICAgIHJldmVyc2VkOiBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICByb2xlOiAwLFxuICAg
IHJvd3M6IEhBU19QT1NJVElWRV9OVU1FUklDX1ZBTFVFLFxuICAgIHJvd1NwYW46IEhBU19OVU1F
UklDX1ZBTFVFLFxuICAgIHNhbmRib3g6IDAsXG4gICAgc2NvcGU6IDAsXG4gICAgc2NvcGVkOiBI
QVNfQk9PTEVBTl9WQUxVRSxcbiAgICBzY3JvbGxpbmc6IDAsXG4gICAgc2VhbWxlc3M6IEhBU19C
T09MRUFOX1ZBTFVFLFxuICAgIHNlbGVjdGVkOiBNVVNUX1VTRV9QUk9QRVJUWSB8IEhBU19CT09M
RUFOX1ZBTFVFLFxuICAgIHNoYXBlOiAwLFxuICAgIHNpemU6IEhBU19QT1NJVElWRV9OVU1FUklD
X1ZBTFVFLFxuICAgIHNpemVzOiAwLFxuICAgIHNwYW46IEhBU19QT1NJVElWRV9OVU1FUklDX1ZB
TFVFLFxuICAgIHNwZWxsQ2hlY2s6IDAsXG4gICAgc3JjOiAwLFxuICAgIHNyY0RvYzogMCxcbiAg
ICBzcmNMYW5nOiAwLFxuICAgIHNyY1NldDogMCxcbiAgICBzdGFydDogSEFTX05VTUVSSUNfVkFM
VUUsXG4gICAgc3RlcDogMCxcbiAgICBzdHlsZTogMCxcbiAgICBzdW1tYXJ5OiAwLFxuICAgIHRh
YkluZGV4OiAwLFxuICAgIHRhcmdldDogMCxcbiAgICB0aXRsZTogMCxcbiAgICAvLyBTZXR0aW5n
IC50eXBlIHRocm93cyBvbiBub24tPGlucHV0PiB0YWdzXG4gICAgdHlwZTogMCxcbiAgICB1c2VN
YXA6IDAsXG4gICAgdmFsdWU6IDAsXG4gICAgd2lkdGg6IDAsXG4gICAgd21vZGU6IDAsXG4gICAg
d3JhcDogMCxcblxuICAgIC8qKlxuICAgICAqIFJERmEgUHJvcGVydGllc1xuICAgICAqL1xuICAg
IGFib3V0OiAwLFxuICAgIGRhdGF0eXBlOiAwLFxuICAgIGlubGlzdDogMCxcbiAgICBwcmVmaXg6
IDAsXG4gICAgLy8gcHJvcGVydHkgaXMgYWxzbyBzdXBwb3J0ZWQgZm9yIE9wZW5HcmFwaCBpbiBt
ZXRhIHRhZ3MuXG4gICAgcHJvcGVydHk6IDAsXG4gICAgcmVzb3VyY2U6IDAsXG4gICAgJ3R5cGVv
Zic6IDAsXG4gICAgdm9jYWI6IDAsXG5cbiAgICAvKipcbiAgICAgKiBOb24tc3RhbmRhcmQgUHJv
cGVydGllc1xuICAgICAqL1xuICAgIC8vIGF1dG9DYXBpdGFsaXplIGFuZCBhdXRvQ29ycmVjdCBh
cmUgc3VwcG9ydGVkIGluIE1vYmlsZSBTYWZhcmkgZm9yXG4gICAgLy8ga2V5Ym9hcmQgaGludHMu
XG4gICAgYXV0b0NhcGl0YWxpemU6IDAsXG4gICAgYXV0b0NvcnJlY3Q6IDAsXG4gICAgLy8gYXV0
b1NhdmUgYWxsb3dzIFdlYktpdC9CbGluayB0byBwZXJzaXN0IHZhbHVlcyBvZiBpbnB1dCBmaWVs
ZHMgb24gcGFnZSByZWxvYWRzXG4gICAgYXV0b1NhdmU6IDAsXG4gICAgLy8gY29sb3IgaXMgZm9y
IFNhZmFyaSBtYXNrLWljb24gbGlua1xuICAgIGNvbG9yOiAwLFxuICAgIC8vIGl0ZW1Qcm9wLCBp
dGVtU2NvcGUsIGl0ZW1UeXBlIGFyZSBmb3JcbiAgICAvLyBNaWNyb2RhdGEgc3VwcG9ydC4gU2Vl
IGh0dHA6Ly9zY2hlbWEub3JnL2RvY3MvZ3MuaHRtbFxuICAgIGl0ZW1Qcm9wOiAwLFxuICAgIGl0
ZW1TY29wZTogSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgaXRlbVR5cGU6IDAsXG4gICAgLy8gaXRl
bUlEIGFuZCBpdGVtUmVmIGFyZSBmb3IgTWljcm9kYXRhIHN1cHBvcnQgYXMgd2VsbCBidXRcbiAg
ICAvLyBvbmx5IHNwZWNpZmllZCBpbiB0aGUgV0hBVFdHIHNwZWMgZG9jdW1lbnQuIFNlZVxuICAg
IC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL21pY3JvZGF0YS5odG1s
I21pY3JvZGF0YS1kb20tYXBpXG4gICAgaXRlbUlEOiAwLFxuICAgIGl0ZW1SZWY6IDAsXG4gICAg
Ly8gcmVzdWx0cyBzaG93IGxvb2tpbmcgZ2xhc3MgaWNvbiBhbmQgcmVjZW50IHNlYXJjaGVzIG9u
IGlucHV0XG4gICAgLy8gc2VhcmNoIGZpZWxkcyBpbiBXZWJLaXQvQmxpbmtcbiAgICByZXN1bHRz
OiAwLFxuICAgIC8vIElFLW9ubHkgYXR0cmlidXRlIHRoYXQgc3BlY2lmaWVzIHNlY3VyaXR5IHJl
c3RyaWN0aW9ucyBvbiBhbiBpZnJhbWVcbiAgICAvLyBhcyBhbiBhbHRlcm5hdGl2ZSB0byB0aGUg
c2FuZGJveCBhdHRyaWJ1dGUgb24gSUU8MTBcbiAgICBzZWN1cml0eTogMCxcbiAgICAvLyBJRS1v
bmx5IGF0dHJpYnV0ZSB0aGF0IGNvbnRyb2xzIGZvY3VzIGJlaGF2aW9yXG4gICAgdW5zZWxlY3Rh
YmxlOiAwXG4gIH0sXG4gIERPTUF0dHJpYnV0ZU5hbWVzOiB7XG4gICAgYWNjZXB0Q2hhcnNldDog
J2FjY2VwdC1jaGFyc2V0JyxcbiAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgaHRtbEZvcjog
J2ZvcicsXG4gICAgaHR0cEVxdWl2OiAnaHR0cC1lcXVpdidcbiAgfSxcbiAgRE9NUHJvcGVydHlO
YW1lczoge30sXG4gIERPTU11dGF0aW9uTWV0aG9kczoge1xuICAgIHZhbHVlOiBmdW5jdGlvbiAo
bm9kZSwgdmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVy
biBub2RlLnJlbW92ZUF0dHJpYnV0ZSgndmFsdWUnKTtcbiAgICAgIH1cblxuICAgICAgLy8gTnVt
YmVyIGlucHV0cyBnZXQgc3BlY2lhbCB0cmVhdG1lbnQgZHVlIHRvIHNvbWUgZWRnZSBjYXNlcyBp
blxuICAgICAgLy8gQ2hyb21lLiBMZXQgZXZlcnl0aGluZyBlbHNlIGFzc2lnbiB0aGUgdmFsdWUg
YXR0cmlidXRlIGFzIG5vcm1hbC5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9v
ay9yZWFjdC9pc3N1ZXMvNzI1MyNpc3N1ZWNvbW1lbnQtMjM2MDc0MzI2XG4gICAgICBpZiAobm9k
ZS50eXBlICE9PSAnbnVtYmVyJyB8fCBub2RlLmhhc0F0dHJpYnV0ZSgndmFsdWUnKSA9PT0gZmFs
c2UpIHtcbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgJycgKyB2YWx1ZSk7XG4g
ICAgICB9IGVsc2UgaWYgKG5vZGUudmFsaWRpdHkgJiYgIW5vZGUudmFsaWRpdHkuYmFkSW5wdXQg
JiYgbm9kZS5vd25lckRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IG5vZGUpIHtcbiAgICAgICAg
Ly8gRG9uJ3QgYXNzaWduIGFuIGF0dHJpYnV0ZSBpZiB2YWxpZGF0aW9uIHJlcG9ydHMgYmFkXG4g
ICAgICAgIC8vIGlucHV0LiBDaHJvbWUgd2lsbCBjbGVhciB0aGUgdmFsdWUuIEFkZGl0aW9uYWxs
eSwgZG9uJ3RcbiAgICAgICAgLy8gb3BlcmF0ZSBvbiBpbnB1dHMgdGhhdCBoYXZlIGZvY3VzLCBv
dGhlcndpc2UgQ2hyb21lIG1pZ2h0XG4gICAgICAgIC8vIHN0cmlwIG9mZiB0cmFpbGluZyBkZWNp
bWFsIHBsYWNlcyBhbmQgY2F1c2UgdGhlIHVzZXInc1xuICAgICAgICAvLyBjdXJzb3IgcG9zaXRp
b24gdG8ganVtcCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBpbnB1dC5cbiAgICAgICAgLy9cbiAg
ICAgICAgLy8gSW4gUmVhY3RET01JbnB1dCwgd2UgaGF2ZSBhbiBvbkJsdXIgZXZlbnQgdGhhdCB3
aWxsIHRyaWdnZXJcbiAgICAgICAgLy8gdGhpcyBmdW5jdGlvbiBhZ2FpbiB3aGVuIGZvY3VzIGlz
IGxvc3QuXG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCd2YWx1ZScsICcnICsgdmFsdWUpO1xu
ICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBIVE1MRE9NUHJvcGVy
dHlDb25maWc7XG5cbi8qKiovIH0pLFxuLyogMTMyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxl
LCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyoq
XG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0
cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRo
ZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxu
ICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0
aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cblxuXG52YXIgRE9NQ2hpbGRyZW5PcGVyYXRp
b25zID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNyk7XG52YXIgUmVhY3RET01JRE9wZXJhdGlvbnMg
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzNyk7XG5cbi8qKlxuICogQWJzdHJhY3RzIGF3YXkgYWxs
IGZ1bmN0aW9uYWxpdHkgb2YgdGhlIHJlY29uY2lsZXIgdGhhdCByZXF1aXJlcyBrbm93bGVkZ2Ug
b2ZcbiAqIHRoZSBicm93c2VyIGNvbnRleHQuIFRPRE86IFRoZXNlIGNhbGxlcnMgc2hvdWxkIGJl
IHJlZmFjdG9yZWQgdG8gYXZvaWQgdGhlXG4gKiBuZWVkIGZvciB0aGlzIGluamVjdGlvbi5cbiAq
L1xudmFyIFJlYWN0Q29tcG9uZW50QnJvd3NlckVudmlyb25tZW50ID0ge1xuICBwcm9jZXNzQ2hp
bGRyZW5VcGRhdGVzOiBSZWFjdERPTUlET3BlcmF0aW9ucy5kYW5nZXJvdXNseVByb2Nlc3NDaGls
ZHJlblVwZGF0ZXMsXG5cbiAgcmVwbGFjZU5vZGVXaXRoTWFya3VwOiBET01DaGlsZHJlbk9wZXJh
dGlvbnMuZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXBcbn07XG5cbm1vZHVsZS5leHBv
cnRzID0gUmVhY3RDb21wb25lbnRCcm93c2VyRW52aXJvbm1lbnQ7XG5cbi8qKiovIH0pLFxuLyog
MTMzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWly
ZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50
LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNv
dXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBp
biB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3Vy
Y2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUg
Zm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICov
XG5cblxuXG52YXIgX3Byb2RJbnZhcmlhbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuXG52
YXIgRE9NTGF6eVRyZWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KTtcbnZhciBFeGVjdXRpb25F
bnZpcm9ubWVudCA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XG5cbnZhciBjcmVhdGVOb2Rlc0Zy
b21NYXJrdXAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzNCk7XG52YXIgZW1wdHlGdW5jdGlvbiA9
IF9fd2VicGFja19yZXF1aXJlX18oNik7XG52YXIgaW52YXJpYW50ID0gX193ZWJwYWNrX3JlcXVp
cmVfXygwKTtcblxudmFyIERhbmdlciA9IHtcbiAgLyoqXG4gICAqIFJlcGxhY2VzIGEgbm9kZSB3
aXRoIGEgc3RyaW5nIG9mIG1hcmt1cCBhdCBpdHMgY3VycmVudCBwb3NpdGlvbiB3aXRoaW4gaXRz
XG4gICAqIHBhcmVudC4gVGhlIG1hcmt1cCBtdXN0IHJlbmRlciBpbnRvIGEgc2luZ2xlIHJvb3Qg
bm9kZS5cbiAgICpcbiAgICogQHBhcmFtIHtET01FbGVtZW50fSBvbGRDaGlsZCBDaGlsZCBub2Rl
IHRvIHJlcGxhY2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtYXJrdXAgTWFya3VwIHRvIHJlbmRl
ciBpbiBwbGFjZSBvZiB0aGUgY2hpbGQgbm9kZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBk
YW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0aE1hcmt1cDogZnVuY3Rpb24gKG9sZENoaWxkLCBtYXJr
dXApIHtcbiAgICAhRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NID8gIGZhbHNlID8gaW52
YXJpYW50KGZhbHNlLCAnZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXAoLi4uKTogQ2Fu
bm90IHJlbmRlciBtYXJrdXAgaW4gYSB3b3JrZXIgdGhyZWFkLiBNYWtlIHN1cmUgYHdpbmRvd2Ag
YW5kIGBkb2N1bWVudGAgYXJlIGF2YWlsYWJsZSBnbG9iYWxseSBiZWZvcmUgcmVxdWlyaW5nIFJl
YWN0IHdoZW4gdW5pdCB0ZXN0aW5nIG9yIHVzZSBSZWFjdERPTVNlcnZlci5yZW5kZXJUb1N0cmlu
ZygpIGZvciBzZXJ2ZXIgcmVuZGVyaW5nLicpIDogX3Byb2RJbnZhcmlhbnQoJzU2JykgOiB2b2lk
IDA7XG4gICAgIW1hcmt1cCA/ICBmYWxzZSA/IGludmFyaWFudChmYWxzZSwgJ2Rhbmdlcm91c2x5
UmVwbGFjZU5vZGVXaXRoTWFya3VwKC4uLik6IE1pc3NpbmcgbWFya3VwLicpIDogX3Byb2RJbnZh
cmlhbnQoJzU3JykgOiB2b2lkIDA7XG4gICAgIShvbGRDaGlsZC5ub2RlTmFtZSAhPT0gJ0hUTUwn
KSA/ICBmYWxzZSA/IGludmFyaWFudChmYWxzZSwgJ2Rhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRo
TWFya3VwKC4uLik6IENhbm5vdCByZXBsYWNlIG1hcmt1cCBvZiB0aGUgPGh0bWw+IG5vZGUuIFRo
aXMgaXMgYmVjYXVzZSBicm93c2VyIHF1aXJrcyBtYWtlIHRoaXMgdW5yZWxpYWJsZSBhbmQvb3Ig
c2xvdy4gSWYgeW91IHdhbnQgdG8gcmVuZGVyIHRvIHRoZSByb290IHlvdSBtdXN0IHVzZSBzZXJ2
ZXIgcmVuZGVyaW5nLiBTZWUgUmVhY3RET01TZXJ2ZXIucmVuZGVyVG9TdHJpbmcoKS4nKSA6IF9w
cm9kSW52YXJpYW50KCc1OCcpIDogdm9pZCAwO1xuXG4gICAgaWYgKHR5cGVvZiBtYXJrdXAgPT09
ICdzdHJpbmcnKSB7XG4gICAgICB2YXIgbmV3Q2hpbGQgPSBjcmVhdGVOb2Rlc0Zyb21NYXJrdXAo
bWFya3VwLCBlbXB0eUZ1bmN0aW9uKVswXTtcbiAgICAgIG9sZENoaWxkLnBhcmVudE5vZGUucmVw
bGFjZUNoaWxkKG5ld0NoaWxkLCBvbGRDaGlsZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIERPTUxh
enlUcmVlLnJlcGxhY2VDaGlsZFdpdGhUcmVlKG9sZENoaWxkLCBtYXJrdXApO1xuICAgIH1cbiAg
fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBEYW5nZXI7XG5cbi8qKiovIH0pLFxuLyogMTM0ICov
XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7
XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNl
bnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMg
c291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5k
IGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNv
dXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBi
ZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4g
KiBAdHlwZWNoZWNrc1xuICovXG5cbi8qZXNsaW50LWRpc2FibGUgZmItd3d3L3Vuc2FmZS1odG1s
Ki9cblxudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtc
blxudmFyIGNyZWF0ZUFycmF5RnJvbU1peGVkID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzUpO1xu
dmFyIGdldE1hcmt1cFdyYXAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzNik7XG52YXIgaW52YXJp
YW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuLyoqXG4gKiBEdW1teSBjb250YWluZXIg
dXNlZCB0byByZW5kZXIgYWxsIG1hcmt1cC5cbiAqL1xudmFyIGR1bW15Tm9kZSA9IEV4ZWN1dGlv
bkVudmlyb25tZW50LmNhblVzZURPTSA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpIDog
bnVsbDtcblxuLyoqXG4gKiBQYXR0ZXJuIHVzZWQgYnkgYGdldE5vZGVOYW1lYC5cbiAqL1xudmFy
IG5vZGVOYW1lUGF0dGVybiA9IC9eXFxzKjwoXFx3KykvO1xuXG4vKipcbiAqIEV4dHJhY3RzIHRo
ZSBgbm9kZU5hbWVgIG9mIHRoZSBmaXJzdCBlbGVtZW50IGluIGEgc3RyaW5nIG9mIG1hcmt1cC5c
biAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWFya3VwIFN0cmluZyBvZiBtYXJrdXAuXG4gKiBAcmV0
dXJuIHs/c3RyaW5nfSBOb2RlIG5hbWUgb2YgdGhlIHN1cHBsaWVkIG1hcmt1cC5cbiAqL1xuZnVu
Y3Rpb24gZ2V0Tm9kZU5hbWUobWFya3VwKSB7XG4gIHZhciBub2RlTmFtZU1hdGNoID0gbWFya3Vw
Lm1hdGNoKG5vZGVOYW1lUGF0dGVybik7XG4gIHJldHVybiBub2RlTmFtZU1hdGNoICYmIG5vZGVO
YW1lTWF0Y2hbMV0udG9Mb3dlckNhc2UoKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5
IGNvbnRhaW5pbmcgdGhlIG5vZGVzIHJlbmRlcmVkIGZyb20gdGhlIHN1cHBsaWVkIG1hcmt1cC4g
VGhlXG4gKiBvcHRpb25hbGx5IHN1cHBsaWVkIGBoYW5kbGVTY3JpcHRgIGZ1bmN0aW9uIHdpbGwg
YmUgaW52b2tlZCBvbmNlIGZvciBlYWNoXG4gKiA8c2NyaXB0PiBlbGVtZW50IHRoYXQgaXMgcmVu
ZGVyZWQuIElmIG5vIGBoYW5kbGVTY3JpcHRgIGZ1bmN0aW9uIGlzIHN1cHBsaWVkLFxuICogYW4g
ZXhjZXB0aW9uIGlzIHRocm93biBpZiBhbnkgPHNjcmlwdD4gZWxlbWVudHMgYXJlIHJlbmRlcmVk
LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtYXJrdXAgQSBzdHJpbmcgb2YgdmFsaWQgSFRNTCBt
YXJrdXAuXG4gKiBAcGFyYW0gez9mdW5jdGlvbn0gaGFuZGxlU2NyaXB0IEludm9rZWQgb25jZSBm
b3IgZWFjaCByZW5kZXJlZCA8c2NyaXB0Pi5cbiAqIEByZXR1cm4ge2FycmF5PERPTUVsZW1lbnR8
RE9NVGV4dE5vZGU+fSBBbiBhcnJheSBvZiByZW5kZXJlZCBub2Rlcy5cbiAqL1xuZnVuY3Rpb24g
Y3JlYXRlTm9kZXNGcm9tTWFya3VwKG1hcmt1cCwgaGFuZGxlU2NyaXB0KSB7XG4gIHZhciBub2Rl
ID0gZHVtbXlOb2RlO1xuICAhISFkdW1teU5vZGUgPyAgZmFsc2UgPyBpbnZhcmlhbnQoZmFsc2Us
ICdjcmVhdGVOb2Rlc0Zyb21NYXJrdXAgZHVtbXkgbm90IGluaXRpYWxpemVkJykgOiBpbnZhcmlh
bnQoZmFsc2UpIDogdm9pZCAwO1xuICB2YXIgbm9kZU5hbWUgPSBnZXROb2RlTmFtZShtYXJrdXAp
O1xuXG4gIHZhciB3cmFwID0gbm9kZU5hbWUgJiYgZ2V0TWFya3VwV3JhcChub2RlTmFtZSk7XG4g
IGlmICh3cmFwKSB7XG4gICAgbm9kZS5pbm5lckhUTUwgPSB3cmFwWzFdICsgbWFya3VwICsgd3Jh
cFsyXTtcblxuICAgIHZhciB3cmFwRGVwdGggPSB3cmFwWzBdO1xuICAgIHdoaWxlICh3cmFwRGVw
dGgtLSkge1xuICAgICAgbm9kZSA9IG5vZGUubGFzdENoaWxkO1xuICAgIH1cbiAgfSBlbHNlIHtc
biAgICBub2RlLmlubmVySFRNTCA9IG1hcmt1cDtcbiAgfVxuXG4gIHZhciBzY3JpcHRzID0gbm9k
ZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0Jyk7XG4gIGlmIChzY3JpcHRzLmxlbmd0aCkg
e1xuICAgICFoYW5kbGVTY3JpcHQgPyAgZmFsc2UgPyBpbnZhcmlhbnQoZmFsc2UsICdjcmVhdGVO
b2Rlc0Zyb21NYXJrdXAoLi4uKTogVW5leHBlY3RlZCA8c2NyaXB0PiBlbGVtZW50IHJlbmRlcmVk
LicpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgICBjcmVhdGVBcnJheUZyb21NaXhl
ZChzY3JpcHRzKS5mb3JFYWNoKGhhbmRsZVNjcmlwdCk7XG4gIH1cblxuICB2YXIgbm9kZXMgPSBB
cnJheS5mcm9tKG5vZGUuY2hpbGROb2Rlcyk7XG4gIHdoaWxlIChub2RlLmxhc3RDaGlsZCkge1xu
ICAgIG5vZGUucmVtb3ZlQ2hpbGQobm9kZS5sYXN0Q2hpbGQpO1xuICB9XG4gIHJldHVybiBub2Rl
cztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVOb2Rlc0Zyb21NYXJrdXA7XG5cbi8qKiov
IH0pLFxuLyogMTM1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBh
Y2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbi8qKlxuICogQ29weXJpZ2h0
IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVk
LlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHls
ZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVj
dG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRl
bnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRp
cmVjdG9yeS5cbiAqXG4gKiBAdHlwZWNoZWNrc1xuICovXG5cbnZhciBpbnZhcmlhbnQgPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKDApO1xuXG4vKipcbiAqIENvbnZlcnQgYXJyYXktbGlrZSBvYmplY3Rz
IHRvIGFycmF5cy5cbiAqXG4gKiBUaGlzIEFQSSBhc3N1bWVzIHRoZSBjYWxsZXIga25vd3MgdGhl
IGNvbnRlbnRzIG9mIHRoZSBkYXRhIHR5cGUuIEZvciBsZXNzXG4gKiB3ZWxsIGRlZmluZWQgaW5w
dXRzIHVzZSBjcmVhdGVBcnJheUZyb21NaXhlZC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdHxmdW5j
dGlvbnxmaWxlbGlzdH0gb2JqXG4gKiBAcmV0dXJuIHthcnJheX1cbiAqL1xuZnVuY3Rpb24gdG9B
cnJheShvYmopIHtcbiAgdmFyIGxlbmd0aCA9IG9iai5sZW5ndGg7XG5cbiAgLy8gU29tZSBicm93
c2VycyBidWlsdGluIG9iamVjdHMgY2FuIHJlcG9ydCB0eXBlb2YgJ2Z1bmN0aW9uJyAoZS5nLiBO
b2RlTGlzdFxuICAvLyBpbiBvbGQgdmVyc2lvbnMgb2YgU2FmYXJpKS5cbiAgISghQXJyYXkuaXNB
cnJheShvYmopICYmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqID09PSAn
ZnVuY3Rpb24nKSkgPyAgZmFsc2UgPyBpbnZhcmlhbnQoZmFsc2UsICd0b0FycmF5OiBBcnJheS1s
aWtlIG9iamVjdCBleHBlY3RlZCcpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcblxuICAh
KHR5cGVvZiBsZW5ndGggPT09ICdudW1iZXInKSA/ICBmYWxzZSA/IGludmFyaWFudChmYWxzZSwg
J3RvQXJyYXk6IE9iamVjdCBuZWVkcyBhIGxlbmd0aCBwcm9wZXJ0eScpIDogaW52YXJpYW50KGZh
bHNlKSA6IHZvaWQgMDtcblxuICAhKGxlbmd0aCA9PT0gMCB8fCBsZW5ndGggLSAxIGluIG9iaikg
PyAgZmFsc2UgPyBpbnZhcmlhbnQoZmFsc2UsICd0b0FycmF5OiBPYmplY3Qgc2hvdWxkIGhhdmUg
a2V5cyBmb3IgaW5kaWNlcycpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcblxuICAhKHR5
cGVvZiBvYmouY2FsbGVlICE9PSAnZnVuY3Rpb24nKSA/ICBmYWxzZSA/IGludmFyaWFudChmYWxz
ZSwgJ3RvQXJyYXk6IE9iamVjdCBjYW5cXCd0IGJlIGBhcmd1bWVudHNgLiBVc2UgcmVzdCBwYXJh
bXMgJyArICcoZnVuY3Rpb24oLi4uYXJncykge30pIG9yIEFycmF5LmZyb20oKSBpbnN0ZWFkLicp
IDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcblxuICAvLyBPbGQgSUUgZG9lc24ndCBnaXZl
IGNvbGxlY3Rpb25zIGFjY2VzcyB0byBoYXNPd25Qcm9wZXJ0eS4gQXNzdW1lIGlucHV0c1xuICAv
LyB3aXRob3V0IG1ldGhvZCB3aWxsIHRocm93IGR1cmluZyB0aGUgc2xpY2UgY2FsbCBhbmQgc2tp
cCBzdHJhaWdodCB0byB0aGVcbiAgLy8gZmFsbGJhY2suXG4gIGlmIChvYmouaGFzT3duUHJvcGVy
dHkpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxs
KG9iaik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gSUUgPCA5IGRvZXMgbm90IHN1cHBv
cnQgQXJyYXkjc2xpY2Ugb24gY29sbGVjdGlvbnMgb2JqZWN0c1xuICAgIH1cbiAgfVxuXG4gIC8v
IEZhbGwgYmFjayB0byBjb3B5aW5nIGtleSBieSBrZXkuIFRoaXMgYXNzdW1lcyBhbGwga2V5cyBo
YXZlIGEgdmFsdWUsXG4gIC8vIHNvIHdpbGwgbm90IHByZXNlcnZlIHNwYXJzZWx5IHBvcHVsYXRl
ZCBpbnB1dHMuXG4gIHZhciByZXQgPSBBcnJheShsZW5ndGgpO1xuICBmb3IgKHZhciBpaSA9IDA7
IGlpIDwgbGVuZ3RoOyBpaSsrKSB7XG4gICAgcmV0W2lpXSA9IG9ialtpaV07XG4gIH1cbiAgcmV0
dXJuIHJldDtcbn1cblxuLyoqXG4gKiBQZXJmb3JtIGEgaGV1cmlzdGljIHRlc3QgdG8gZGV0ZXJt
aW5lIGlmIGFuIG9iamVjdCBpcyBcImFycmF5LWxpa2VcIi5cbiAqXG4gKiAgIEEgbW9uayBhc2tl
ZCBKb3NodSwgYSBaZW4gbWFzdGVyLCBcIkhhcyBhIGRvZyBCdWRkaGEgbmF0dXJlP1wiXG4gKiAg
IEpvc2h1IHJlcGxpZWQ6IFwiTXUuXCJcbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMg
aWYgaXRzIGFyZ3VtZW50IGhhcyBcImFycmF5IG5hdHVyZVwiOiBpdCByZXR1cm5zXG4gKiB0cnVl
IGlmIHRoZSBhcmd1bWVudCBpcyBhbiBhY3R1YWwgYXJyYXksIGFuIGBhcmd1bWVudHMnIG9iamVj
dCwgb3IgYW5cbiAqIEhUTUxDb2xsZWN0aW9uIChlLmcuIG5vZGUuY2hpbGROb2RlcyBvciBub2Rl
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCkpLlxuICpcbiAqIEl0IHdpbGwgcmV0dXJuIGZhbHNlIGZv
ciBvdGhlciBhcnJheS1saWtlIG9iamVjdHMgbGlrZSBGaWxlbGlzdC5cbiAqXG4gKiBAcGFyYW0g
eyp9IG9ialxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaGFzQXJyYXlOYXR1
cmUob2JqKSB7XG4gIHJldHVybiAoXG4gICAgLy8gbm90IG51bGwvZmFsc2VcbiAgICAhIW9iaiAm
JiAoXG4gICAgLy8gYXJyYXlzIGFyZSBvYmplY3RzLCBOb2RlTGlzdHMgYXJlIGZ1bmN0aW9ucyBp
biBTYWZhcmlcbiAgICB0eXBlb2Ygb2JqID09ICdvYmplY3QnIHx8IHR5cGVvZiBvYmogPT0gJ2Z1
bmN0aW9uJykgJiZcbiAgICAvLyBxdWFja3MgbGlrZSBhbiBhcnJheVxuICAgICdsZW5ndGgnIGlu
IG9iaiAmJlxuICAgIC8vIG5vdCB3aW5kb3dcbiAgICAhKCdzZXRJbnRlcnZhbCcgaW4gb2JqKSAm
JlxuICAgIC8vIG5vIERPTSBub2RlIHNob3VsZCBiZSBjb25zaWRlcmVkIGFuIGFycmF5LWxpa2Vc
biAgICAvLyBhICdzZWxlY3QnIGVsZW1lbnQgaGFzICdsZW5ndGgnIGFuZCAnaXRlbScgcHJvcGVy
dGllcyBvbiBJRThcbiAgICB0eXBlb2Ygb2JqLm5vZGVUeXBlICE9ICdudW1iZXInICYmIChcbiAg
ICAvLyBhIHJlYWwgYXJyYXlcbiAgICBBcnJheS5pc0FycmF5KG9iaikgfHxcbiAgICAvLyBhcmd1
bWVudHNcbiAgICAnY2FsbGVlJyBpbiBvYmogfHxcbiAgICAvLyBIVE1MQ29sbGVjdGlvbi9Ob2Rl
TGlzdFxuICAgICdpdGVtJyBpbiBvYmopXG4gICk7XG59XG5cbi8qKlxuICogRW5zdXJlIHRoYXQg
dGhlIGFyZ3VtZW50IGlzIGFuIGFycmF5IGJ5IHdyYXBwaW5nIGl0IGluIGFuIGFycmF5IGlmIGl0
IGlzIG5vdC5cbiAqIENyZWF0ZXMgYSBjb3B5IG9mIHRoZSBhcmd1bWVudCBpZiBpdCBpcyBhbHJl
YWR5IGFuIGFycmF5LlxuICpcbiAqIFRoaXMgaXMgbW9zdGx5IHVzZWZ1bCBpZGlvbWF0aWNhbGx5
OlxuICpcbiAqICAgdmFyIGNyZWF0ZUFycmF5RnJvbU1peGVkID0gcmVxdWlyZSgnY3JlYXRlQXJy
YXlGcm9tTWl4ZWQnKTtcbiAqXG4gKiAgIGZ1bmN0aW9uIHRha2VzT25lT3JNb3JlVGhpbmdzKHRo
aW5ncykge1xuICogICAgIHRoaW5ncyA9IGNyZWF0ZUFycmF5RnJvbU1peGVkKHRoaW5ncyk7XG4g
KiAgICAgLi4uXG4gKiAgIH1cbiAqXG4gKiBUaGlzIGFsbG93cyB5b3UgdG8gdHJlYXQgYHRoaW5n
cycgYXMgYW4gYXJyYXksIGJ1dCBhY2NlcHQgc2NhbGFycyBpbiB0aGUgQVBJLlxuICpcbiAqIElm
IHlvdSBuZWVkIHRvIGNvbnZlcnQgYW4gYXJyYXktbGlrZSBvYmplY3QsIGxpa2UgYGFyZ3VtZW50
c2AsIGludG8gYW4gYXJyYXlcbiAqIHVzZSB0b0FycmF5IGluc3RlYWQuXG4gKlxuICogQHBhcmFt
IHsqfSBvYmpcbiAqIEByZXR1cm4ge2FycmF5fVxuICovXG5mdW5jdGlvbiBjcmVhdGVBcnJheUZy
b21NaXhlZChvYmopIHtcbiAgaWYgKCFoYXNBcnJheU5hdHVyZShvYmopKSB7XG4gICAgcmV0dXJu
IFtvYmpdO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIHJldHVybiBv
Ymouc2xpY2UoKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdG9BcnJheShvYmopO1xuICB9XG59
XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQXJyYXlGcm9tTWl4ZWQ7XG5cbi8qKiovIH0pLFxu
LyogMTM2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVx
dWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAy
MDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpc
biAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNl
bnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBv
ZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmln
aHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9y
eS5cbiAqXG4gKi9cblxuLyplc2xpbnQtZGlzYWJsZSBmYi13d3cvdW5zYWZlLWh0bWwgKi9cblxu
dmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcblxudmFy
IGludmFyaWFudCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbi8qKlxuICogRHVtbXkgY29u
dGFpbmVyIHVzZWQgdG8gZGV0ZWN0IHdoaWNoIHdyYXBzIGFyZSBuZWNlc3NhcnkuXG4gKi9cbnZh
ciBkdW1teU5vZGUgPSBFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00gPyBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKSA6IG51bGw7XG5cbi8qKlxuICogU29tZSBicm93c2VycyBjYW5u
b3QgdXNlIGBpbm5lckhUTUxgIHRvIHJlbmRlciBjZXJ0YWluIGVsZW1lbnRzIHN0YW5kYWxvbmUs
XG4gKiBzbyB3ZSB3cmFwIHRoZW0sIHJlbmRlciB0aGUgd3JhcHBlZCBub2RlcywgdGhlbiBleHRy
YWN0IHRoZSBkZXNpcmVkIG5vZGUuXG4gKlxuICogSW4gSUU4LCBjZXJ0YWluIGVsZW1lbnRzIGNh
bm5vdCByZW5kZXIgYWxvbmUsIHNvIHdyYXAgYWxsIGVsZW1lbnRzICgnKicpLlxuICovXG5cbnZh
ciBzaG91bGRXcmFwID0ge307XG5cbnZhciBzZWxlY3RXcmFwID0gWzEsICc8c2VsZWN0IG11bHRp
cGxlPVwidHJ1ZVwiPicsICc8L3NlbGVjdD4nXTtcbnZhciB0YWJsZVdyYXAgPSBbMSwgJzx0YWJs
ZT4nLCAnPC90YWJsZT4nXTtcbnZhciB0cldyYXAgPSBbMywgJzx0YWJsZT48dGJvZHk+PHRyPics
ICc8L3RyPjwvdGJvZHk+PC90YWJsZT4nXTtcblxudmFyIHN2Z1dyYXAgPSBbMSwgJzxzdmcgeG1s
bnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPicsICc8L3N2Zz4nXTtcblxudmFyIG1h
cmt1cFdyYXAgPSB7XG4gICcqJzogWzEsICc/PGRpdj4nLCAnPC9kaXY+J10sXG5cbiAgJ2FyZWEn
OiBbMSwgJzxtYXA+JywgJzwvbWFwPiddLFxuICAnY29sJzogWzIsICc8dGFibGU+PHRib2R5Pjwv
dGJvZHk+PGNvbGdyb3VwPicsICc8L2NvbGdyb3VwPjwvdGFibGU+J10sXG4gICdsZWdlbmQnOiBb
MSwgJzxmaWVsZHNldD4nLCAnPC9maWVsZHNldD4nXSxcbiAgJ3BhcmFtJzogWzEsICc8b2JqZWN0
PicsICc8L29iamVjdD4nXSxcbiAgJ3RyJzogWzIsICc8dGFibGU+PHRib2R5PicsICc8L3Rib2R5
PjwvdGFibGU+J10sXG5cbiAgJ29wdGdyb3VwJzogc2VsZWN0V3JhcCxcbiAgJ29wdGlvbic6IHNl
bGVjdFdyYXAsXG5cbiAgJ2NhcHRpb24nOiB0YWJsZVdyYXAsXG4gICdjb2xncm91cCc6IHRhYmxl
V3JhcCxcbiAgJ3Rib2R5JzogdGFibGVXcmFwLFxuICAndGZvb3QnOiB0YWJsZVdyYXAsXG4gICd0
aGVhZCc6IHRhYmxlV3JhcCxcblxuICAndGQnOiB0cldyYXAsXG4gICd0aCc6IHRyV3JhcFxufTtc
blxuLy8gSW5pdGlhbGl6ZSB0aGUgU1ZHIGVsZW1lbnRzIHNpbmNlIHdlIGtub3cgdGhleSdsbCBh
bHdheXMgbmVlZCB0byBiZSB3cmFwcGVkXG4vLyBjb25zaXN0ZW50bHkuIElmIHRoZXkgYXJlIGNy
ZWF0ZWQgaW5zaWRlIGEgPGRpdj4gdGhleSB3aWxsIGJlIGluaXRpYWxpemVkIGluXG4vLyB0aGUg
d3JvbmcgbmFtZXNwYWNlIChhbmQgd2lsbCBub3QgZGlzcGxheSkuXG52YXIgc3ZnRWxlbWVudHMg
PSBbJ2NpcmNsZScsICdjbGlwUGF0aCcsICdkZWZzJywgJ2VsbGlwc2UnLCAnZycsICdpbWFnZScs
ICdsaW5lJywgJ2xpbmVhckdyYWRpZW50JywgJ21hc2snLCAncGF0aCcsICdwYXR0ZXJuJywgJ3Bv
bHlnb24nLCAncG9seWxpbmUnLCAncmFkaWFsR3JhZGllbnQnLCAncmVjdCcsICdzdG9wJywgJ3Rl
eHQnLCAndHNwYW4nXTtcbnN2Z0VsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKG5vZGVOYW1lKSB7
XG4gIG1hcmt1cFdyYXBbbm9kZU5hbWVdID0gc3ZnV3JhcDtcbiAgc2hvdWxkV3JhcFtub2RlTmFt
ZV0gPSB0cnVlO1xufSk7XG5cbi8qKlxuICogR2V0cyB0aGUgbWFya3VwIHdyYXAgY29uZmlndXJh
dGlvbiBmb3IgdGhlIHN1cHBsaWVkIGBub2RlTmFtZWAuXG4gKlxuICogTk9URTogVGhpcyBsYXpp
bHkgZGV0ZWN0cyB3aGljaCB3cmFwcyBhcmUgbmVjZXNzYXJ5IGZvciB0aGUgY3VycmVudCBicm93
c2VyLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBub2RlTmFtZSBMb3dlcmNhc2UgYG5vZGVOYW1l
YC5cbiAqIEByZXR1cm4gez9hcnJheX0gTWFya3VwIHdyYXAgY29uZmlndXJhdGlvbiwgaWYgYXBw
bGljYWJsZS5cbiAqL1xuZnVuY3Rpb24gZ2V0TWFya3VwV3JhcChub2RlTmFtZSkge1xuICAhISFk
dW1teU5vZGUgPyAgZmFsc2UgPyBpbnZhcmlhbnQoZmFsc2UsICdNYXJrdXAgd3JhcHBpbmcgbm9k
ZSBub3QgaW5pdGlhbGl6ZWQnKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIGlmICgh
bWFya3VwV3JhcC5oYXNPd25Qcm9wZXJ0eShub2RlTmFtZSkpIHtcbiAgICBub2RlTmFtZSA9ICcq
JztcbiAgfVxuICBpZiAoIXNob3VsZFdyYXAuaGFzT3duUHJvcGVydHkobm9kZU5hbWUpKSB7XG4g
ICAgaWYgKG5vZGVOYW1lID09PSAnKicpIHtcbiAgICAgIGR1bW15Tm9kZS5pbm5lckhUTUwgPSAn
PGxpbmsgLz4nO1xuICAgIH0gZWxzZSB7XG4gICAgICBkdW1teU5vZGUuaW5uZXJIVE1MID0gJzwn
ICsgbm9kZU5hbWUgKyAnPjwvJyArIG5vZGVOYW1lICsgJz4nO1xuICAgIH1cbiAgICBzaG91bGRX
cmFwW25vZGVOYW1lXSA9ICFkdW1teU5vZGUuZmlyc3RDaGlsZDtcbiAgfVxuICByZXR1cm4gc2hv
dWxkV3JhcFtub2RlTmFtZV0gPyBtYXJrdXBXcmFwW25vZGVOYW1lXSA6IG51bGw7XG59XG5cbm1v
ZHVsZS5leHBvcnRzID0gZ2V0TWFya3VwV3JhcDtcblxuLyoqKi8gfSksXG4vKiAxMzcgKi9cbi8q
KiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxu
XCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29r
LCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUg
aXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICog
TElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBB
biBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0
aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuXG5cbnZh
ciBET01DaGlsZHJlbk9wZXJhdGlvbnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM3KTtcbnZhciBS
ZWFjdERPTUNvbXBvbmVudFRyZWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXG4vKipcbiAq
IE9wZXJhdGlvbnMgdXNlZCB0byBwcm9jZXNzIHVwZGF0ZXMgdG8gRE9NIG5vZGVzLlxuICovXG52
YXIgUmVhY3RET01JRE9wZXJhdGlvbnMgPSB7XG4gIC8qKlxuICAgKiBVcGRhdGVzIGEgY29tcG9u
ZW50J3MgY2hpbGRyZW4gYnkgcHJvY2Vzc2luZyBhIHNlcmllcyBvZiB1cGRhdGVzLlxuICAgKlxu
ICAgKiBAcGFyYW0ge2FycmF5PG9iamVjdD59IHVwZGF0ZXMgTGlzdCBvZiB1cGRhdGUgY29uZmln
dXJhdGlvbnMuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZGFuZ2Vyb3VzbHlQcm9jZXNzQ2hp
bGRyZW5VcGRhdGVzOiBmdW5jdGlvbiAocGFyZW50SW5zdCwgdXBkYXRlcykge1xuICAgIHZhciBu
b2RlID0gUmVhY3RET01Db21wb25lbnRUcmVlLmdldE5vZGVGcm9tSW5zdGFuY2UocGFyZW50SW5z
dCk7XG4gICAgRE9NQ2hpbGRyZW5PcGVyYXRpb25zLnByb2Nlc3NVcGRhdGVzKG5vZGUsIHVwZGF0
ZXMpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NSURPcGVyYXRpb25zO1xu
XG4vKioqLyB9KSxcbi8qIDEzOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywg
X193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qKlxuICogQ29weXJp
Z2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
XG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxl
IGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0
b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVu
dCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGly
ZWN0b3J5LlxuICpcbiAqL1xuXG4vKiBnbG9iYWwgaGFzT3duUHJvcGVydHk6dHJ1ZSAqL1xuXG5c
blxudmFyIF9wcm9kSW52YXJpYW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKSxcbiAgICBfYXNz
aWduID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcblxudmFyIEF1dG9Gb2N1c1V0aWxzID0gX193
ZWJwYWNrX3JlcXVpcmVfXygxMzkpO1xudmFyIENTU1Byb3BlcnR5T3BlcmF0aW9ucyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oMTQwKTtcbnZhciBET01MYXp5VHJlZSA9IF9fd2VicGFja19yZXF1aXJl
X18oMTcpO1xudmFyIERPTU5hbWVzcGFjZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4KTtcbnZh
ciBET01Qcm9wZXJ0eSA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xudmFyIERPTVByb3BlcnR5
T3BlcmF0aW9ucyA9IF9fd2VicGFja19yZXF1aXJlX18oNzApO1xudmFyIEV2ZW50UGx1Z2luSHVi
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XG52YXIgRXZlbnRQbHVnaW5SZWdpc3RyeSA9IF9f
d2VicGFja19yZXF1aXJlX18oMzEpO1xudmFyIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlciA9IF9f
d2VicGFja19yZXF1aXJlX18oMjgpO1xudmFyIFJlYWN0RE9NQ29tcG9uZW50RmxhZ3MgPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKDU4KTtcbnZhciBSZWFjdERPTUNvbXBvbmVudFRyZWUgPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKDQpO1xudmFyIFJlYWN0RE9NSW5wdXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KDE1MCk7XG52YXIgUmVhY3RET01PcHRpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1Mik7XG52
YXIgUmVhY3RET01TZWxlY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcxKTtcbnZhciBSZWFjdERP
TVRleHRhcmVhID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTMpO1xudmFyIFJlYWN0SW5zdHJ1bWVu
dGF0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcbnZhciBSZWFjdE11bHRpQ2hpbGQgPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKDE1NCk7XG52YXIgUmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2Fj
dGlvbiA9IF9fd2VicGFja19yZXF1aXJlX18oMTYxKTtcblxudmFyIGVtcHR5RnVuY3Rpb24gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xudmFyIGVzY2FwZVRleHRDb250ZW50Rm9yQnJvd3NlciA9
IF9fd2VicGFja19yZXF1aXJlX18oMjcpO1xudmFyIGludmFyaWFudCA9IF9fd2VicGFja19yZXF1
aXJlX18oMCk7XG52YXIgaXNFdmVudFN1cHBvcnRlZCA9IF9fd2VicGFja19yZXF1aXJlX18oMzUp
O1xudmFyIHNoYWxsb3dFcXVhbCA9IF9fd2VicGFja19yZXF1aXJlX18oNDIpO1xudmFyIGlucHV0
VmFsdWVUcmFja2luZyA9IF9fd2VicGFja19yZXF1aXJlX18oNjQpO1xudmFyIHZhbGlkYXRlRE9N
TmVzdGluZyA9IF9fd2VicGFja19yZXF1aXJlX18oNDYpO1xudmFyIHdhcm5pbmcgPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKDEpO1xuXG52YXIgRmxhZ3MgPSBSZWFjdERPTUNvbXBvbmVudEZsYWdzO1xu
dmFyIGRlbGV0ZUxpc3RlbmVyID0gRXZlbnRQbHVnaW5IdWIuZGVsZXRlTGlzdGVuZXI7XG52YXIg
Z2V0Tm9kZSA9IFJlYWN0RE9NQ29tcG9uZW50VHJlZS5nZXROb2RlRnJvbUluc3RhbmNlO1xudmFy
IGxpc3RlblRvID0gUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLmxpc3RlblRvO1xudmFyIHJlZ2lz
dHJhdGlvbk5hbWVNb2R1bGVzID0gRXZlbnRQbHVnaW5SZWdpc3RyeS5yZWdpc3RyYXRpb25OYW1l
TW9kdWxlcztcblxuLy8gRm9yIHF1aWNrbHkgbWF0Y2hpbmcgY2hpbGRyZW4gdHlwZSwgdG8gdGVz
dCBpZiBjYW4gYmUgdHJlYXRlZCBhcyBjb250ZW50LlxudmFyIENPTlRFTlRfVFlQRVMgPSB7IHN0
cmluZzogdHJ1ZSwgbnVtYmVyOiB0cnVlIH07XG5cbnZhciBTVFlMRSA9ICdzdHlsZSc7XG52YXIg
SFRNTCA9ICdfX2h0bWwnO1xudmFyIFJFU0VSVkVEX1BST1BTID0ge1xuICBjaGlsZHJlbjogbnVs
bCxcbiAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IG51bGwsXG4gIHN1cHByZXNzQ29udGVudEVk
aXRhYmxlV2FybmluZzogbnVsbFxufTtcblxuLy8gTm9kZSB0eXBlIGZvciBkb2N1bWVudCBmcmFn
bWVudHMgKE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSkuXG52YXIgRE9DX0ZSQUdNRU5UX1RZ
UEUgPSAxMTtcblxuZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKGludGVybmFs
SW5zdGFuY2UpIHtcbiAgaWYgKGludGVybmFsSW5zdGFuY2UpIHtcbiAgICB2YXIgb3duZXIgPSBp
bnRlcm5hbEluc3RhbmNlLl9jdXJyZW50RWxlbWVudC5fb3duZXIgfHwgbnVsbDtcbiAgICBpZiAo
b3duZXIpIHtcbiAgICAgIHZhciBuYW1lID0gb3duZXIuZ2V0TmFtZSgpO1xuICAgICAgaWYgKG5h
bWUpIHtcbiAgICAgICAgcmV0dXJuICcgVGhpcyBET00gbm9kZSB3YXMgcmVuZGVyZWQgYnkgYCcg
KyBuYW1lICsgJ2AuJztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5m
dW5jdGlvbiBmcmllbmRseVN0cmluZ2lmeShvYmopIHtcbiAgaWYgKHR5cGVvZiBvYmogPT09ICdv
YmplY3QnKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgcmV0dXJuICdb
JyArIG9iai5tYXAoZnJpZW5kbHlTdHJpbmdpZnkpLmpvaW4oJywgJykgKyAnXSc7XG4gICAgfSBl
bHNlIHtcbiAgICAgIHZhciBwYWlycyA9IFtdO1xuICAgICAgZm9yICh2YXIga2V5IGluIG9iaikg
e1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwg
a2V5KSkge1xuICAgICAgICAgIHZhciBrZXlFc2NhcGVkID0gL15bYS16JF9dW1xcdyRfXSokL2ku
dGVzdChrZXkpID8ga2V5IDogSlNPTi5zdHJpbmdpZnkoa2V5KTtcbiAgICAgICAgICBwYWlycy5w
dXNoKGtleUVzY2FwZWQgKyAnOiAnICsgZnJpZW5kbHlTdHJpbmdpZnkob2JqW2tleV0pKTtcbiAg
ICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuICd7JyArIHBhaXJzLmpvaW4oJywgJykgKyAn
fSc7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAg
cmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaik7XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9iaiA9PT0g
J2Z1bmN0aW9uJykge1xuICAgIHJldHVybiAnW2Z1bmN0aW9uIG9iamVjdF0nO1xuICB9XG4gIC8v
IERpZmZlcnMgZnJvbSBKU09OLnN0cmluZ2lmeSBpbiB0aGF0IHVuZGVmaW5lZCBiZWNhdXNlIHVu
ZGVmaW5lZCBhbmQgdGhhdFxuICAvLyBpbmYgYW5kIG5hbiBkb24ndCBiZWNvbWUgbnVsbFxuICBy
ZXR1cm4gU3RyaW5nKG9iaik7XG59XG5cbnZhciBzdHlsZU11dGF0aW9uV2FybmluZyA9IHt9O1xu
XG5mdW5jdGlvbiBjaGVja0FuZFdhcm5Gb3JNdXRhdGVkU3R5bGUoc3R5bGUxLCBzdHlsZTIsIGNv
bXBvbmVudCkge1xuICBpZiAoc3R5bGUxID09IG51bGwgfHwgc3R5bGUyID09IG51bGwpIHtcbiAg
ICByZXR1cm47XG4gIH1cbiAgaWYgKHNoYWxsb3dFcXVhbChzdHlsZTEsIHN0eWxlMikpIHtcbiAg
ICByZXR1cm47XG4gIH1cblxuICB2YXIgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudC5fdGFnO1xu
ICB2YXIgb3duZXIgPSBjb21wb25lbnQuX2N1cnJlbnRFbGVtZW50Ll9vd25lcjtcbiAgdmFyIG93
bmVyTmFtZTtcbiAgaWYgKG93bmVyKSB7XG4gICAgb3duZXJOYW1lID0gb3duZXIuZ2V0TmFtZSgp
O1xuICB9XG5cbiAgdmFyIGhhc2ggPSBvd25lck5hbWUgKyAnfCcgKyBjb21wb25lbnROYW1lO1xu
XG4gIGlmIChzdHlsZU11dGF0aW9uV2FybmluZy5oYXNPd25Qcm9wZXJ0eShoYXNoKSkge1xuICAg
IHJldHVybjtcbiAgfVxuXG4gIHN0eWxlTXV0YXRpb25XYXJuaW5nW2hhc2hdID0gdHJ1ZTtcblxu
ICAgZmFsc2UgPyB3YXJuaW5nKGZhbHNlLCAnYCVzYCB3YXMgcGFzc2VkIGEgc3R5bGUgb2JqZWN0
IHRoYXQgaGFzIHByZXZpb3VzbHkgYmVlbiBtdXRhdGVkLiAnICsgJ011dGF0aW5nIGBzdHlsZWAg
aXMgZGVwcmVjYXRlZC4gQ29uc2lkZXIgY2xvbmluZyBpdCBiZWZvcmVoYW5kLiBDaGVjayAnICsg
J3RoZSBgcmVuZGVyYCAlcy4gUHJldmlvdXMgc3R5bGU6ICVzLiBNdXRhdGVkIHN0eWxlOiAlcy4n
LCBjb21wb25lbnROYW1lLCBvd25lciA/ICdvZiBgJyArIG93bmVyTmFtZSArICdgJyA6ICd1c2lu
ZyA8JyArIGNvbXBvbmVudE5hbWUgKyAnPicsIGZyaWVuZGx5U3RyaW5naWZ5KHN0eWxlMSksIGZy
aWVuZGx5U3RyaW5naWZ5KHN0eWxlMikpIDogdm9pZCAwO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7
b2JqZWN0fSBjb21wb25lbnRcbiAqIEBwYXJhbSB7P29iamVjdH0gcHJvcHNcbiAqL1xuZnVuY3Rp
b24gYXNzZXJ0VmFsaWRQcm9wcyhjb21wb25lbnQsIHByb3BzKSB7XG4gIGlmICghcHJvcHMpIHtc
biAgICByZXR1cm47XG4gIH1cbiAgLy8gTm90ZSB0aGUgdXNlIG9mIGA9PWAgd2hpY2ggY2hlY2tz
IGZvciBudWxsIG9yIHVuZGVmaW5lZC5cbiAgaWYgKHZvaWRFbGVtZW50VGFnc1tjb21wb25lbnQu
X3RhZ10pIHtcbiAgICAhKHByb3BzLmNoaWxkcmVuID09IG51bGwgJiYgcHJvcHMuZGFuZ2Vyb3Vz
bHlTZXRJbm5lckhUTUwgPT0gbnVsbCkgPyAgZmFsc2UgPyBpbnZhcmlhbnQoZmFsc2UsICclcyBp
cyBhIHZvaWQgZWxlbWVudCB0YWcgYW5kIG11c3QgbmVpdGhlciBoYXZlIGBjaGlsZHJlbmAgbm9y
IHVzZSBgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLiVzJywgY29tcG9uZW50Ll90YWcsIGNvbXBv
bmVudC5fY3VycmVudEVsZW1lbnQuX293bmVyID8gJyBDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBv
ZiAnICsgY29tcG9uZW50Ll9jdXJyZW50RWxlbWVudC5fb3duZXIuZ2V0TmFtZSgpICsgJy4nIDog
JycpIDogX3Byb2RJbnZhcmlhbnQoJzEzNycsIGNvbXBvbmVudC5fdGFnLCBjb21wb25lbnQuX2N1
cnJlbnRFbGVtZW50Ll9vd25lciA/ICcgQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgJyArIGNv
bXBvbmVudC5fY3VycmVudEVsZW1lbnQuX293bmVyLmdldE5hbWUoKSArICcuJyA6ICcnKSA6IHZv
aWQgMDtcbiAgfVxuICBpZiAocHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgIT0gbnVsbCkg
e1xuICAgICEocHJvcHMuY2hpbGRyZW4gPT0gbnVsbCkgPyAgZmFsc2UgPyBpbnZhcmlhbnQoZmFs
c2UsICdDYW4gb25seSBzZXQgb25lIG9mIGBjaGlsZHJlbmAgb3IgYHByb3BzLmRhbmdlcm91c2x5
U2V0SW5uZXJIVE1MYC4nKSA6IF9wcm9kSW52YXJpYW50KCc2MCcpIDogdm9pZCAwO1xuICAgICEo
dHlwZW9mIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID09PSAnb2JqZWN0JyAmJiBIVE1M
IGluIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKSA/ICBmYWxzZSA/IGludmFyaWFudChm
YWxzZSwgJ2Bwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTGAgbXVzdCBiZSBpbiB0aGUgZm9y
bSBge19faHRtbDogLi4ufWAuIFBsZWFzZSB2aXNpdCBodHRwczovL2ZiLm1lL3JlYWN0LWludmFy
aWFudC1kYW5nZXJvdXNseS1zZXQtaW5uZXItaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nKSA6
IF9wcm9kSW52YXJpYW50KCc2MScpIDogdm9pZCAwO1xuICB9XG4gIGlmIChmYWxzZSkge1xuICAg
IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKHByb3BzLmlu
bmVySFRNTCA9PSBudWxsLCAnRGlyZWN0bHkgc2V0dGluZyBwcm9wZXJ0eSBgaW5uZXJIVE1MYCBp
cyBub3QgcGVybWl0dGVkLiAnICsgJ0ZvciBtb3JlIGluZm9ybWF0aW9uLCBsb29rdXAgZG9jdW1l
bnRhdGlvbiBvbiBgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLicpIDogdm9pZCAwO1xuICAgIHBy
b2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKHByb3BzLnN1cHBy
ZXNzQ29udGVudEVkaXRhYmxlV2FybmluZyB8fCAhcHJvcHMuY29udGVudEVkaXRhYmxlIHx8IHBy
b3BzLmNoaWxkcmVuID09IG51bGwsICdBIGNvbXBvbmVudCBpcyBgY29udGVudEVkaXRhYmxlYCBh
bmQgY29udGFpbnMgYGNoaWxkcmVuYCBtYW5hZ2VkIGJ5ICcgKyAnUmVhY3QuIEl0IGlzIG5vdyB5
b3VyIHJlc3BvbnNpYmlsaXR5IHRvIGd1YXJhbnRlZSB0aGF0IG5vbmUgb2YgJyArICd0aG9zZSBu
b2RlcyBhcmUgdW5leHBlY3RlZGx5IG1vZGlmaWVkIG9yIGR1cGxpY2F0ZWQuIFRoaXMgaXMgJyAr
ICdwcm9iYWJseSBub3QgaW50ZW50aW9uYWwuJykgOiB2b2lkIDA7XG4gICAgcHJvY2Vzcy5lbnYu
Tk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcocHJvcHMub25Gb2N1c0luID09IG51
bGwgJiYgcHJvcHMub25Gb2N1c091dCA9PSBudWxsLCAnUmVhY3QgdXNlcyBvbkZvY3VzIGFuZCBv
bkJsdXIgaW5zdGVhZCBvZiBvbkZvY3VzSW4gYW5kIG9uRm9jdXNPdXQuICcgKyAnQWxsIFJlYWN0
IGV2ZW50cyBhcmUgbm9ybWFsaXplZCB0byBidWJibGUsIHNvIG9uRm9jdXNJbiBhbmQgb25Gb2N1
c091dCAnICsgJ2FyZSBub3QgbmVlZGVkL3N1cHBvcnRlZCBieSBSZWFjdC4nKSA6IHZvaWQgMDtc
biAgfVxuICAhKHByb3BzLnN0eWxlID09IG51bGwgfHwgdHlwZW9mIHByb3BzLnN0eWxlID09PSAn
b2JqZWN0JykgPyAgZmFsc2UgPyBpbnZhcmlhbnQoZmFsc2UsICdUaGUgYHN0eWxlYCBwcm9wIGV4
cGVjdHMgYSBtYXBwaW5nIGZyb20gc3R5bGUgcHJvcGVydGllcyB0byB2YWx1ZXMsIG5vdCBhIHN0
cmluZy4gRm9yIGV4YW1wbGUsIHN0eWxlPXt7bWFyZ2luUmlnaHQ6IHNwYWNpbmcgKyBcXCdlbVxc
J319IHdoZW4gdXNpbmcgSlNYLiVzJywgZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKGNvbXBv
bmVudCkpIDogX3Byb2RJbnZhcmlhbnQoJzYyJywgZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVt
KGNvbXBvbmVudCkpIDogdm9pZCAwO1xufVxuXG5mdW5jdGlvbiBlbnF1ZXVlUHV0TGlzdGVuZXIo
aW5zdCwgcmVnaXN0cmF0aW9uTmFtZSwgbGlzdGVuZXIsIHRyYW5zYWN0aW9uKSB7XG4gIGlmICh0
cmFuc2FjdGlvbiBpbnN0YW5jZW9mIFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb24pIHtc
biAgICByZXR1cm47XG4gIH1cbiAgaWYgKGZhbHNlKSB7XG4gICAgLy8gSUU4IGhhcyBubyBBUEkg
Zm9yIGV2ZW50IGNhcHR1cmluZyBhbmQgdGhlIGBvblNjcm9sbGAgZXZlbnQgZG9lc24ndFxuICAg
IC8vIGJ1YmJsZS5cbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8g
d2FybmluZyhyZWdpc3RyYXRpb25OYW1lICE9PSAnb25TY3JvbGwnIHx8IGlzRXZlbnRTdXBwb3J0
ZWQoJ3Njcm9sbCcsIHRydWUpLCBcIlRoaXMgYnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgdGhlIGBv
blNjcm9sbGAgZXZlbnRcIikgOiB2b2lkIDA7XG4gIH1cbiAgdmFyIGNvbnRhaW5lckluZm8gPSBp
bnN0Ll9ob3N0Q29udGFpbmVySW5mbztcbiAgdmFyIGlzRG9jdW1lbnRGcmFnbWVudCA9IGNvbnRh
aW5lckluZm8uX25vZGUgJiYgY29udGFpbmVySW5mby5fbm9kZS5ub2RlVHlwZSA9PT0gRE9DX0ZS
QUdNRU5UX1RZUEU7XG4gIHZhciBkb2MgPSBpc0RvY3VtZW50RnJhZ21lbnQgPyBjb250YWluZXJJ
bmZvLl9ub2RlIDogY29udGFpbmVySW5mby5fb3duZXJEb2N1bWVudDtcbiAgbGlzdGVuVG8ocmVn
aXN0cmF0aW9uTmFtZSwgZG9jKTtcbiAgdHJhbnNhY3Rpb24uZ2V0UmVhY3RNb3VudFJlYWR5KCku
ZW5xdWV1ZShwdXRMaXN0ZW5lciwge1xuICAgIGluc3Q6IGluc3QsXG4gICAgcmVnaXN0cmF0aW9u
TmFtZTogcmVnaXN0cmF0aW9uTmFtZSxcbiAgICBsaXN0ZW5lcjogbGlzdGVuZXJcbiAgfSk7XG59
XG5cbmZ1bmN0aW9uIHB1dExpc3RlbmVyKCkge1xuICB2YXIgbGlzdGVuZXJUb1B1dCA9IHRoaXM7
XG4gIEV2ZW50UGx1Z2luSHViLnB1dExpc3RlbmVyKGxpc3RlbmVyVG9QdXQuaW5zdCwgbGlzdGVu
ZXJUb1B1dC5yZWdpc3RyYXRpb25OYW1lLCBsaXN0ZW5lclRvUHV0Lmxpc3RlbmVyKTtcbn1cblxu
ZnVuY3Rpb24gaW5wdXRQb3N0TW91bnQoKSB7XG4gIHZhciBpbnN0ID0gdGhpcztcbiAgUmVhY3RE
T01JbnB1dC5wb3N0TW91bnRXcmFwcGVyKGluc3QpO1xufVxuXG5mdW5jdGlvbiB0ZXh0YXJlYVBv
c3RNb3VudCgpIHtcbiAgdmFyIGluc3QgPSB0aGlzO1xuICBSZWFjdERPTVRleHRhcmVhLnBvc3RN
b3VudFdyYXBwZXIoaW5zdCk7XG59XG5cbmZ1bmN0aW9uIG9wdGlvblBvc3RNb3VudCgpIHtcbiAg
dmFyIGluc3QgPSB0aGlzO1xuICBSZWFjdERPTU9wdGlvbi5wb3N0TW91bnRXcmFwcGVyKGluc3Qp
O1xufVxuXG52YXIgc2V0QW5kVmFsaWRhdGVDb250ZW50Q2hpbGREZXYgPSBlbXB0eUZ1bmN0aW9u
O1xuaWYgKGZhbHNlKSB7XG4gIHNldEFuZFZhbGlkYXRlQ29udGVudENoaWxkRGV2ID0gZnVuY3Rp
b24gKGNvbnRlbnQpIHtcbiAgICB2YXIgaGFzRXhpc3RpbmdDb250ZW50ID0gdGhpcy5fY29udGVu
dERlYnVnSUQgIT0gbnVsbDtcbiAgICB2YXIgZGVidWdJRCA9IHRoaXMuX2RlYnVnSUQ7XG4gICAg
Ly8gVGhpcyBJRCByZXByZXNlbnRzIHRoZSBpbmxpbmVkIGNoaWxkIHRoYXQgaGFzIG5vIGJhY2tp
bmcgaW5zdGFuY2U6XG4gICAgdmFyIGNvbnRlbnREZWJ1Z0lEID0gLWRlYnVnSUQ7XG5cbiAgICBp
ZiAoY29udGVudCA9PSBudWxsKSB7XG4gICAgICBpZiAoaGFzRXhpc3RpbmdDb250ZW50KSB7XG4g
ICAgICAgIFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vblVubW91bnRDb21wb25lbnQo
dGhpcy5fY29udGVudERlYnVnSUQpO1xuICAgICAgfVxuICAgICAgdGhpcy5fY29udGVudERlYnVn
SUQgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhbGlkYXRlRE9NTmVzdGlu
ZyhudWxsLCBTdHJpbmcoY29udGVudCksIHRoaXMsIHRoaXMuX2FuY2VzdG9ySW5mbyk7XG4gICAg
dGhpcy5fY29udGVudERlYnVnSUQgPSBjb250ZW50RGVidWdJRDtcbiAgICBpZiAoaGFzRXhpc3Rp
bmdDb250ZW50KSB7XG4gICAgICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25CZWZv
cmVVcGRhdGVDb21wb25lbnQoY29udGVudERlYnVnSUQsIGNvbnRlbnQpO1xuICAgICAgUmVhY3RJ
bnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uVXBkYXRlQ29tcG9uZW50KGNvbnRlbnREZWJ1Z0lE
KTtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9u
QmVmb3JlTW91bnRDb21wb25lbnQoY29udGVudERlYnVnSUQsIGNvbnRlbnQsIGRlYnVnSUQpO1xu
ICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uTW91bnRDb21wb25lbnQoY29u
dGVudERlYnVnSUQpO1xuICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uU2V0
Q2hpbGRyZW4oZGVidWdJRCwgW2NvbnRlbnREZWJ1Z0lEXSk7XG4gICAgfVxuICB9O1xufVxuXG4v
LyBUaGVyZSBhcmUgc28gbWFueSBtZWRpYSBldmVudHMsIGl0IG1ha2VzIHNlbnNlIHRvIGp1c3Rc
bi8vIG1haW50YWluIGEgbGlzdCByYXRoZXIgdGhhbiBjcmVhdGUgYSBgdHJhcEJ1YmJsZWRFdmVu
dGAgZm9yIGVhY2hcbnZhciBtZWRpYUV2ZW50cyA9IHtcbiAgdG9wQWJvcnQ6ICdhYm9ydCcsXG4g
IHRvcENhblBsYXk6ICdjYW5wbGF5JyxcbiAgdG9wQ2FuUGxheVRocm91Z2g6ICdjYW5wbGF5dGhy
b3VnaCcsXG4gIHRvcER1cmF0aW9uQ2hhbmdlOiAnZHVyYXRpb25jaGFuZ2UnLFxuICB0b3BFbXB0
aWVkOiAnZW1wdGllZCcsXG4gIHRvcEVuY3J5cHRlZDogJ2VuY3J5cHRlZCcsXG4gIHRvcEVuZGVk
OiAnZW5kZWQnLFxuICB0b3BFcnJvcjogJ2Vycm9yJyxcbiAgdG9wTG9hZGVkRGF0YTogJ2xvYWRl
ZGRhdGEnLFxuICB0b3BMb2FkZWRNZXRhZGF0YTogJ2xvYWRlZG1ldGFkYXRhJyxcbiAgdG9wTG9h
ZFN0YXJ0OiAnbG9hZHN0YXJ0JyxcbiAgdG9wUGF1c2U6ICdwYXVzZScsXG4gIHRvcFBsYXk6ICdw
bGF5JyxcbiAgdG9wUGxheWluZzogJ3BsYXlpbmcnLFxuICB0b3BQcm9ncmVzczogJ3Byb2dyZXNz
JyxcbiAgdG9wUmF0ZUNoYW5nZTogJ3JhdGVjaGFuZ2UnLFxuICB0b3BTZWVrZWQ6ICdzZWVrZWQn
LFxuICB0b3BTZWVraW5nOiAnc2Vla2luZycsXG4gIHRvcFN0YWxsZWQ6ICdzdGFsbGVkJyxcbiAg
dG9wU3VzcGVuZDogJ3N1c3BlbmQnLFxuICB0b3BUaW1lVXBkYXRlOiAndGltZXVwZGF0ZScsXG4g
IHRvcFZvbHVtZUNoYW5nZTogJ3ZvbHVtZWNoYW5nZScsXG4gIHRvcFdhaXRpbmc6ICd3YWl0aW5n
J1xufTtcblxuZnVuY3Rpb24gdHJhY2tJbnB1dFZhbHVlKCkge1xuICBpbnB1dFZhbHVlVHJhY2tp
bmcudHJhY2sodGhpcyk7XG59XG5cbmZ1bmN0aW9uIHRyYXBCdWJibGVkRXZlbnRzTG9jYWwoKSB7
XG4gIHZhciBpbnN0ID0gdGhpcztcbiAgLy8gSWYgYSBjb21wb25lbnQgcmVuZGVycyB0byBudWxs
IG9yIGlmIGFub3RoZXIgY29tcG9uZW50IGZhdGFscyBhbmQgY2F1c2VzXG4gIC8vIHRoZSBzdGF0
ZSBvZiB0aGUgdHJlZSB0byBiZSBjb3JydXB0ZWQsIGBub2RlYCBoZXJlIGNhbiBiZSBudWxsLlxu
ICAhaW5zdC5fcm9vdE5vZGVJRCA/ICBmYWxzZSA/IGludmFyaWFudChmYWxzZSwgJ011c3QgYmUg
bW91bnRlZCB0byB0cmFwIGV2ZW50cycpIDogX3Byb2RJbnZhcmlhbnQoJzYzJykgOiB2b2lkIDA7
XG4gIHZhciBub2RlID0gZ2V0Tm9kZShpbnN0KTtcbiAgIW5vZGUgPyAgZmFsc2UgPyBpbnZhcmlh
bnQoZmFsc2UsICd0cmFwQnViYmxlZEV2ZW50KC4uLik6IFJlcXVpcmVzIG5vZGUgdG8gYmUgcmVu
ZGVyZWQuJykgOiBfcHJvZEludmFyaWFudCgnNjQnKSA6IHZvaWQgMDtcblxuICBzd2l0Y2ggKGlu
c3QuX3RhZykge1xuICAgIGNhc2UgJ2lmcmFtZSc6XG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICAg
IGluc3QuX3dyYXBwZXJTdGF0ZS5saXN0ZW5lcnMgPSBbUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVy
LnRyYXBCdWJibGVkRXZlbnQoJ3RvcExvYWQnLCAnbG9hZCcsIG5vZGUpXTtcbiAgICAgIGJyZWFr
O1xuICAgIGNhc2UgJ3ZpZGVvJzpcbiAgICBjYXNlICdhdWRpbyc6XG4gICAgICBpbnN0Ll93cmFw
cGVyU3RhdGUubGlzdGVuZXJzID0gW107XG4gICAgICAvLyBDcmVhdGUgbGlzdGVuZXIgZm9yIGVh
Y2ggbWVkaWEgZXZlbnRcbiAgICAgIGZvciAodmFyIGV2ZW50IGluIG1lZGlhRXZlbnRzKSB7XG4g
ICAgICAgIGlmIChtZWRpYUV2ZW50cy5oYXNPd25Qcm9wZXJ0eShldmVudCkpIHtcbiAgICAgICAg
ICBpbnN0Ll93cmFwcGVyU3RhdGUubGlzdGVuZXJzLnB1c2goUmVhY3RCcm93c2VyRXZlbnRFbWl0
dGVyLnRyYXBCdWJibGVkRXZlbnQoZXZlbnQsIG1lZGlhRXZlbnRzW2V2ZW50XSwgbm9kZSkpO1xu
ICAgICAgICB9XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzb3VyY2UnOlxuICAg
ICAgaW5zdC5fd3JhcHBlclN0YXRlLmxpc3RlbmVycyA9IFtSZWFjdEJyb3dzZXJFdmVudEVtaXR0
ZXIudHJhcEJ1YmJsZWRFdmVudCgndG9wRXJyb3InLCAnZXJyb3InLCBub2RlKV07XG4gICAgICBi
cmVhaztcbiAgICBjYXNlICdpbWcnOlxuICAgICAgaW5zdC5fd3JhcHBlclN0YXRlLmxpc3RlbmVy
cyA9IFtSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIudHJhcEJ1YmJsZWRFdmVudCgndG9wRXJyb3In
LCAnZXJyb3InLCBub2RlKSwgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLnRyYXBCdWJibGVkRXZl
bnQoJ3RvcExvYWQnLCAnbG9hZCcsIG5vZGUpXTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2Zv
cm0nOlxuICAgICAgaW5zdC5fd3JhcHBlclN0YXRlLmxpc3RlbmVycyA9IFtSZWFjdEJyb3dzZXJF
dmVudEVtaXR0ZXIudHJhcEJ1YmJsZWRFdmVudCgndG9wUmVzZXQnLCAncmVzZXQnLCBub2RlKSwg
UmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLnRyYXBCdWJibGVkRXZlbnQoJ3RvcFN1Ym1pdCcsICdz
dWJtaXQnLCBub2RlKV07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdpbnB1dCc6XG4gICAgY2Fz
ZSAnc2VsZWN0JzpcbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICBpbnN0Ll93cmFwcGVyU3Rh
dGUubGlzdGVuZXJzID0gW1JlYWN0QnJvd3NlckV2ZW50RW1pdHRlci50cmFwQnViYmxlZEV2ZW50
KCd0b3BJbnZhbGlkJywgJ2ludmFsaWQnLCBub2RlKV07XG4gICAgICBicmVhaztcbiAgfVxufVxu
XG5mdW5jdGlvbiBwb3N0VXBkYXRlU2VsZWN0V3JhcHBlcigpIHtcbiAgUmVhY3RET01TZWxlY3Qu
cG9zdFVwZGF0ZVdyYXBwZXIodGhpcyk7XG59XG5cbi8vIEZvciBIVE1MLCBjZXJ0YWluIHRhZ3Mg
c2hvdWxkIG9taXQgdGhlaXIgY2xvc2UgdGFnLiBXZSBrZWVwIGEgd2hpdGVsaXN0IGZvclxuLy8g
dGhvc2Ugc3BlY2lhbC1jYXNlIHRhZ3MuXG5cbnZhciBvbWl0dGVkQ2xvc2VUYWdzID0ge1xuICBh
cmVhOiB0cnVlLFxuICBiYXNlOiB0cnVlLFxuICBicjogdHJ1ZSxcbiAgY29sOiB0cnVlLFxuICBl
bWJlZDogdHJ1ZSxcbiAgaHI6IHRydWUsXG4gIGltZzogdHJ1ZSxcbiAgaW5wdXQ6IHRydWUsXG4g
IGtleWdlbjogdHJ1ZSxcbiAgbGluazogdHJ1ZSxcbiAgbWV0YTogdHJ1ZSxcbiAgcGFyYW06IHRy
dWUsXG4gIHNvdXJjZTogdHJ1ZSxcbiAgdHJhY2s6IHRydWUsXG4gIHdicjogdHJ1ZVxuICAvLyBO
T1RFOiBtZW51aXRlbSdzIGNsb3NlIHRhZyBzaG91bGQgYmUgb21pdHRlZCwgYnV0IHRoYXQgY2F1
c2VzIHByb2JsZW1zLlxufTtcblxudmFyIG5ld2xpbmVFYXRpbmdUYWdzID0ge1xuICBsaXN0aW5n
OiB0cnVlLFxuICBwcmU6IHRydWUsXG4gIHRleHRhcmVhOiB0cnVlXG59O1xuXG4vLyBGb3IgSFRN
TCwgY2VydGFpbiB0YWdzIGNhbm5vdCBoYXZlIGNoaWxkcmVuLiBUaGlzIGhhcyB0aGUgc2FtZSBw
dXJwb3NlIGFzXG4vLyBgb21pdHRlZENsb3NlVGFnc2AgZXhjZXB0IHRoYXQgYG1lbnVpdGVtYCBz
aG91bGQgc3RpbGwgaGF2ZSBpdHMgY2xvc2luZyB0YWcuXG5cbnZhciB2b2lkRWxlbWVudFRhZ3Mg
PSBfYXNzaWduKHtcbiAgbWVudWl0ZW06IHRydWVcbn0sIG9taXR0ZWRDbG9zZVRhZ3MpO1xuXG4v
LyBXZSBhY2NlcHQgYW55IHRhZyB0byBiZSByZW5kZXJlZCBidXQgc2luY2UgdGhpcyBnZXRzIGlu
amVjdGVkIGludG8gYXJiaXRyYXJ5XG4vLyBIVE1MLCB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0
IGl0J3MgYSBzYWZlIHRhZy5cbi8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwvI05ULU5h
bWVcblxudmFyIFZBTElEX1RBR19SRUdFWCA9IC9eW2EtekEtWl1bYS16QS1aOl9cXC5cXC1cXGRd
KiQvOyAvLyBTaW1wbGlmaWVkIHN1YnNldFxudmFyIHZhbGlkYXRlZFRhZ0NhY2hlID0ge307XG52
YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuZnVuY3Rpb24gdmFsaWRh
dGVEYW5nZXJvdXNUYWcodGFnKSB7XG4gIGlmICghaGFzT3duUHJvcGVydHkuY2FsbCh2YWxpZGF0
ZWRUYWdDYWNoZSwgdGFnKSkge1xuICAgICFWQUxJRF9UQUdfUkVHRVgudGVzdCh0YWcpID8gIGZh
bHNlID8gaW52YXJpYW50KGZhbHNlLCAnSW52YWxpZCB0YWc6ICVzJywgdGFnKSA6IF9wcm9kSW52
YXJpYW50KCc2NScsIHRhZykgOiB2b2lkIDA7XG4gICAgdmFsaWRhdGVkVGFnQ2FjaGVbdGFnXSA9
IHRydWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDdXN0b21Db21wb25lbnQodGFnTmFtZSwgcHJv
cHMpIHtcbiAgcmV0dXJuIHRhZ05hbWUuaW5kZXhPZignLScpID49IDAgfHwgcHJvcHMuaXMgIT0g
bnVsbDtcbn1cblxudmFyIGdsb2JhbElkQ291bnRlciA9IDE7XG5cbi8qKlxuICogQ3JlYXRlcyBh
IG5ldyBSZWFjdCBjbGFzcyB0aGF0IGlzIGlkZW1wb3RlbnQgYW5kIGNhcGFibGUgb2YgY29udGFp
bmluZyBvdGhlclxuICogUmVhY3QgY29tcG9uZW50cy4gSXQgYWNjZXB0cyBldmVudCBsaXN0ZW5l
cnMgYW5kIERPTSBwcm9wZXJ0aWVzIHRoYXQgYXJlXG4gKiB2YWxpZCBhY2NvcmRpbmcgdG8gYERP
TVByb3BlcnR5YC5cbiAqXG4gKiAgLSBFdmVudCBsaXN0ZW5lcnM6IGBvbkNsaWNrYCwgYG9uTW91
c2VEb3duYCwgZXRjLlxuICogIC0gRE9NIHByb3BlcnRpZXM6IGBjbGFzc05hbWVgLCBgbmFtZWAs
IGB0aXRsZWAsIGV0Yy5cbiAqXG4gKiBUaGUgYHN0eWxlYCBwcm9wZXJ0eSBmdW5jdGlvbnMgZGlm
ZmVyZW50bHkgZnJvbSB0aGUgRE9NIEFQSS4gSXQgYWNjZXB0cyBhblxuICogb2JqZWN0IG1hcHBp
bmcgb2Ygc3R5bGUgcHJvcGVydGllcyB0byB2YWx1ZXMuXG4gKlxuICogQGNvbnN0cnVjdG9yIFJl
YWN0RE9NQ29tcG9uZW50XG4gKiBAZXh0ZW5kcyBSZWFjdE11bHRpQ2hpbGRcbiAqL1xuZnVuY3Rp
b24gUmVhY3RET01Db21wb25lbnQoZWxlbWVudCkge1xuICB2YXIgdGFnID0gZWxlbWVudC50eXBl
O1xuICB2YWxpZGF0ZURhbmdlcm91c1RhZyh0YWcpO1xuICB0aGlzLl9jdXJyZW50RWxlbWVudCA9
IGVsZW1lbnQ7XG4gIHRoaXMuX3RhZyA9IHRhZy50b0xvd2VyQ2FzZSgpO1xuICB0aGlzLl9uYW1l
c3BhY2VVUkkgPSBudWxsO1xuICB0aGlzLl9yZW5kZXJlZENoaWxkcmVuID0gbnVsbDtcbiAgdGhp
cy5fcHJldmlvdXNTdHlsZSA9IG51bGw7XG4gIHRoaXMuX3ByZXZpb3VzU3R5bGVDb3B5ID0gbnVs
bDtcbiAgdGhpcy5faG9zdE5vZGUgPSBudWxsO1xuICB0aGlzLl9ob3N0UGFyZW50ID0gbnVsbDtc
biAgdGhpcy5fcm9vdE5vZGVJRCA9IDA7XG4gIHRoaXMuX2RvbUlEID0gMDtcbiAgdGhpcy5faG9z
dENvbnRhaW5lckluZm8gPSBudWxsO1xuICB0aGlzLl93cmFwcGVyU3RhdGUgPSBudWxsO1xuICB0
aGlzLl90b3BMZXZlbFdyYXBwZXIgPSBudWxsO1xuICB0aGlzLl9mbGFncyA9IDA7XG4gIGlmIChm
YWxzZSkge1xuICAgIHRoaXMuX2FuY2VzdG9ySW5mbyA9IG51bGw7XG4gICAgc2V0QW5kVmFsaWRh
dGVDb250ZW50Q2hpbGREZXYuY2FsbCh0aGlzLCBudWxsKTtcbiAgfVxufVxuXG5SZWFjdERPTUNv
bXBvbmVudC5kaXNwbGF5TmFtZSA9ICdSZWFjdERPTUNvbXBvbmVudCc7XG5cblJlYWN0RE9NQ29t
cG9uZW50Lk1peGluID0ge1xuICAvKipcbiAgICogR2VuZXJhdGVzIHJvb3QgdGFnIG1hcmt1cCB0
aGVuIHJlY3Vyc2VzLiBUaGlzIG1ldGhvZCBoYXMgc2lkZSBlZmZlY3RzIGFuZFxuICAgKiBpcyBu
b3QgaWRlbXBvdGVudC5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqIEBwYXJhbSB7UmVhY3RS
ZWNvbmNpbGVUcmFuc2FjdGlvbnxSZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9ufSB0cmFu
c2FjdGlvblxuICAgKiBAcGFyYW0gez9SZWFjdERPTUNvbXBvbmVudH0gdGhlIHBhcmVudCBjb21w
b25lbnQgaW5zdGFuY2VcbiAgICogQHBhcmFtIHs/b2JqZWN0fSBpbmZvIGFib3V0IHRoZSBob3N0
IGNvbnRhaW5lclxuICAgKiBAcGFyYW0ge29iamVjdH0gY29udGV4dFxuICAgKiBAcmV0dXJuIHtz
dHJpbmd9IFRoZSBjb21wdXRlZCBtYXJrdXAuXG4gICAqL1xuICBtb3VudENvbXBvbmVudDogZnVu
Y3Rpb24gKHRyYW5zYWN0aW9uLCBob3N0UGFyZW50LCBob3N0Q29udGFpbmVySW5mbywgY29udGV4
dCkge1xuICAgIHRoaXMuX3Jvb3ROb2RlSUQgPSBnbG9iYWxJZENvdW50ZXIrKztcbiAgICB0aGlz
Ll9kb21JRCA9IGhvc3RDb250YWluZXJJbmZvLl9pZENvdW50ZXIrKztcbiAgICB0aGlzLl9ob3N0
UGFyZW50ID0gaG9zdFBhcmVudDtcbiAgICB0aGlzLl9ob3N0Q29udGFpbmVySW5mbyA9IGhvc3RD
b250YWluZXJJbmZvO1xuXG4gICAgdmFyIHByb3BzID0gdGhpcy5fY3VycmVudEVsZW1lbnQucHJv
cHM7XG5cbiAgICBzd2l0Y2ggKHRoaXMuX3RhZykge1xuICAgICAgY2FzZSAnYXVkaW8nOlxuICAg
ICAgY2FzZSAnZm9ybSc6XG4gICAgICBjYXNlICdpZnJhbWUnOlxuICAgICAgY2FzZSAnaW1nJzpc
biAgICAgIGNhc2UgJ2xpbmsnOlxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgIGNhc2UgJ3Nv
dXJjZSc6XG4gICAgICBjYXNlICd2aWRlbyc6XG4gICAgICAgIHRoaXMuX3dyYXBwZXJTdGF0ZSA9
IHtcbiAgICAgICAgICBsaXN0ZW5lcnM6IG51bGxcbiAgICAgICAgfTtcbiAgICAgICAgdHJhbnNh
Y3Rpb24uZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZSh0cmFwQnViYmxlZEV2ZW50c0xvY2Fs
LCB0aGlzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdpbnB1dCc6XG4gICAgICAgIFJl
YWN0RE9NSW5wdXQubW91bnRXcmFwcGVyKHRoaXMsIHByb3BzLCBob3N0UGFyZW50KTtcbiAgICAg
ICAgcHJvcHMgPSBSZWFjdERPTUlucHV0LmdldEhvc3RQcm9wcyh0aGlzLCBwcm9wcyk7XG4gICAg
ICAgIHRyYW5zYWN0aW9uLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUodHJhY2tJbnB1dFZh
bHVlLCB0aGlzKTtcbiAgICAgICAgdHJhbnNhY3Rpb24uZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5x
dWV1ZSh0cmFwQnViYmxlZEV2ZW50c0xvY2FsLCB0aGlzKTtcbiAgICAgICAgYnJlYWs7XG4gICAg
ICBjYXNlICdvcHRpb24nOlxuICAgICAgICBSZWFjdERPTU9wdGlvbi5tb3VudFdyYXBwZXIodGhp
cywgcHJvcHMsIGhvc3RQYXJlbnQpO1xuICAgICAgICBwcm9wcyA9IFJlYWN0RE9NT3B0aW9uLmdl
dEhvc3RQcm9wcyh0aGlzLCBwcm9wcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc2Vs
ZWN0JzpcbiAgICAgICAgUmVhY3RET01TZWxlY3QubW91bnRXcmFwcGVyKHRoaXMsIHByb3BzLCBo
b3N0UGFyZW50KTtcbiAgICAgICAgcHJvcHMgPSBSZWFjdERPTVNlbGVjdC5nZXRIb3N0UHJvcHMo
dGhpcywgcHJvcHMpO1xuICAgICAgICB0cmFuc2FjdGlvbi5nZXRSZWFjdE1vdW50UmVhZHkoKS5l
bnF1ZXVlKHRyYXBCdWJibGVkRXZlbnRzTG9jYWwsIHRoaXMpO1xuICAgICAgICBicmVhaztcbiAg
ICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgICAgUmVhY3RET01UZXh0YXJlYS5tb3VudFdyYXBw
ZXIodGhpcywgcHJvcHMsIGhvc3RQYXJlbnQpO1xuICAgICAgICBwcm9wcyA9IFJlYWN0RE9NVGV4
dGFyZWEuZ2V0SG9zdFByb3BzKHRoaXMsIHByb3BzKTtcbiAgICAgICAgdHJhbnNhY3Rpb24uZ2V0
UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZSh0cmFja0lucHV0VmFsdWUsIHRoaXMpO1xuICAgICAg
ICB0cmFuc2FjdGlvbi5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKHRyYXBCdWJibGVkRXZl
bnRzTG9jYWwsIHRoaXMpO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBhc3NlcnRWYWxp
ZFByb3BzKHRoaXMsIHByb3BzKTtcblxuICAgIC8vIFdlIGNyZWF0ZSB0YWdzIGluIHRoZSBuYW1l
c3BhY2Ugb2YgdGhlaXIgcGFyZW50IGNvbnRhaW5lciwgZXhjZXB0IEhUTUxcbiAgICAvLyB0YWdz
IGdldCBubyBuYW1lc3BhY2UuXG4gICAgdmFyIG5hbWVzcGFjZVVSSTtcbiAgICB2YXIgcGFyZW50
VGFnO1xuICAgIGlmIChob3N0UGFyZW50ICE9IG51bGwpIHtcbiAgICAgIG5hbWVzcGFjZVVSSSA9
IGhvc3RQYXJlbnQuX25hbWVzcGFjZVVSSTtcbiAgICAgIHBhcmVudFRhZyA9IGhvc3RQYXJlbnQu
X3RhZztcbiAgICB9IGVsc2UgaWYgKGhvc3RDb250YWluZXJJbmZvLl90YWcpIHtcbiAgICAgIG5h
bWVzcGFjZVVSSSA9IGhvc3RDb250YWluZXJJbmZvLl9uYW1lc3BhY2VVUkk7XG4gICAgICBwYXJl
bnRUYWcgPSBob3N0Q29udGFpbmVySW5mby5fdGFnO1xuICAgIH1cbiAgICBpZiAobmFtZXNwYWNl
VVJJID09IG51bGwgfHwgbmFtZXNwYWNlVVJJID09PSBET01OYW1lc3BhY2VzLnN2ZyAmJiBwYXJl
bnRUYWcgPT09ICdmb3JlaWdub2JqZWN0Jykge1xuICAgICAgbmFtZXNwYWNlVVJJID0gRE9NTmFt
ZXNwYWNlcy5odG1sO1xuICAgIH1cbiAgICBpZiAobmFtZXNwYWNlVVJJID09PSBET01OYW1lc3Bh
Y2VzLmh0bWwpIHtcbiAgICAgIGlmICh0aGlzLl90YWcgPT09ICdzdmcnKSB7XG4gICAgICAgIG5h
bWVzcGFjZVVSSSA9IERPTU5hbWVzcGFjZXMuc3ZnO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl90
YWcgPT09ICdtYXRoJykge1xuICAgICAgICBuYW1lc3BhY2VVUkkgPSBET01OYW1lc3BhY2VzLm1h
dGhtbDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fbmFtZXNwYWNlVVJJID0gbmFtZXNwYWNl
VVJJO1xuXG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICB2YXIgcGFyZW50SW5mbztcbiAgICAgIGlm
IChob3N0UGFyZW50ICE9IG51bGwpIHtcbiAgICAgICAgcGFyZW50SW5mbyA9IGhvc3RQYXJlbnQu
X2FuY2VzdG9ySW5mbztcbiAgICAgIH0gZWxzZSBpZiAoaG9zdENvbnRhaW5lckluZm8uX3RhZykg
e1xuICAgICAgICBwYXJlbnRJbmZvID0gaG9zdENvbnRhaW5lckluZm8uX2FuY2VzdG9ySW5mbztc
biAgICAgIH1cbiAgICAgIGlmIChwYXJlbnRJbmZvKSB7XG4gICAgICAgIC8vIHBhcmVudEluZm8g
c2hvdWxkIGFsd2F5cyBiZSBwcmVzZW50IGV4Y2VwdCBmb3IgdGhlIHRvcC1sZXZlbFxuICAgICAg
ICAvLyBjb21wb25lbnQgd2hlbiBzZXJ2ZXIgcmVuZGVyaW5nXG4gICAgICAgIHZhbGlkYXRlRE9N
TmVzdGluZyh0aGlzLl90YWcsIG51bGwsIHRoaXMsIHBhcmVudEluZm8pO1xuICAgICAgfVxuICAg
ICAgdGhpcy5fYW5jZXN0b3JJbmZvID0gdmFsaWRhdGVET01OZXN0aW5nLnVwZGF0ZWRBbmNlc3Rv
ckluZm8ocGFyZW50SW5mbywgdGhpcy5fdGFnLCB0aGlzKTtcbiAgICB9XG5cbiAgICB2YXIgbW91
bnRJbWFnZTtcbiAgICBpZiAodHJhbnNhY3Rpb24udXNlQ3JlYXRlRWxlbWVudCkge1xuICAgICAg
dmFyIG93bmVyRG9jdW1lbnQgPSBob3N0Q29udGFpbmVySW5mby5fb3duZXJEb2N1bWVudDtcbiAg
ICAgIHZhciBlbDtcbiAgICAgIGlmIChuYW1lc3BhY2VVUkkgPT09IERPTU5hbWVzcGFjZXMuaHRt
bCkge1xuICAgICAgICBpZiAodGhpcy5fdGFnID09PSAnc2NyaXB0Jykge1xuICAgICAgICAgIC8v
IENyZWF0ZSB0aGUgc2NyaXB0IHZpYSAuaW5uZXJIVE1MIHNvIGl0cyBcInBhcnNlci1pbnNlcnRl
ZFwiIGZsYWcgaXNcbiAgICAgICAgICAvLyBzZXQgdG8gdHJ1ZSBhbmQgaXQgZG9lcyBub3QgZXhl
Y3V0ZVxuICAgICAgICAgIHZhciBkaXYgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rp
dicpO1xuICAgICAgICAgIHZhciB0eXBlID0gdGhpcy5fY3VycmVudEVsZW1lbnQudHlwZTtcbiAg
ICAgICAgICBkaXYuaW5uZXJIVE1MID0gJzwnICsgdHlwZSArICc+PC8nICsgdHlwZSArICc+Jztc
biAgICAgICAgICBlbCA9IGRpdi5yZW1vdmVDaGlsZChkaXYuZmlyc3RDaGlsZCk7XG4gICAgICAg
IH0gZWxzZSBpZiAocHJvcHMuaXMpIHtcbiAgICAgICAgICBlbCA9IG93bmVyRG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCh0aGlzLl9jdXJyZW50RWxlbWVudC50eXBlLCBwcm9wcy5pcyk7XG4gICAgICAg
IH0gZWxzZSB7XG4gICAgICAgICAgLy8gU2VwYXJhdGUgZWxzZSBicmFuY2ggaW5zdGVhZCBvZiB1
c2luZyBgcHJvcHMuaXMgfHwgdW5kZWZpbmVkYCBhYm92ZSBiZWN1YXNlIG9mIGEgRmlyZWZveCBi
dWcuXG4gICAgICAgICAgLy8gU2VlIGRpc2N1c3Npb24gaW4gaHR0cHM6Ly9naXRodWIuY29tL2Zh
Y2Vib29rL3JlYWN0L3B1bGwvNjg5NlxuICAgICAgICAgIC8vIGFuZCBkaXNjdXNzaW9uIGluIGh0
dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzYyNDBcbiAgICAg
ICAgICBlbCA9IG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLl9jdXJyZW50RWxlbWVu
dC50eXBlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWwgPSBvd25lckRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnROUyhuYW1lc3BhY2VVUkksIHRoaXMuX2N1cnJlbnRFbGVtZW50
LnR5cGUpO1xuICAgICAgfVxuICAgICAgUmVhY3RET01Db21wb25lbnRUcmVlLnByZWNhY2hlTm9k
ZSh0aGlzLCBlbCk7XG4gICAgICB0aGlzLl9mbGFncyB8PSBGbGFncy5oYXNDYWNoZWRDaGlsZE5v
ZGVzO1xuICAgICAgaWYgKCF0aGlzLl9ob3N0UGFyZW50KSB7XG4gICAgICAgIERPTVByb3BlcnR5
T3BlcmF0aW9ucy5zZXRBdHRyaWJ1dGVGb3JSb290KGVsKTtcbiAgICAgIH1cbiAgICAgIHRoaXMu
X3VwZGF0ZURPTVByb3BlcnRpZXMobnVsbCwgcHJvcHMsIHRyYW5zYWN0aW9uKTtcbiAgICAgIHZh
ciBsYXp5VHJlZSA9IERPTUxhenlUcmVlKGVsKTtcbiAgICAgIHRoaXMuX2NyZWF0ZUluaXRpYWxD
aGlsZHJlbih0cmFuc2FjdGlvbiwgcHJvcHMsIGNvbnRleHQsIGxhenlUcmVlKTtcbiAgICAgIG1v
dW50SW1hZ2UgPSBsYXp5VHJlZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHRhZ09wZW4gPSB0
aGlzLl9jcmVhdGVPcGVuVGFnTWFya3VwQW5kUHV0TGlzdGVuZXJzKHRyYW5zYWN0aW9uLCBwcm9w
cyk7XG4gICAgICB2YXIgdGFnQ29udGVudCA9IHRoaXMuX2NyZWF0ZUNvbnRlbnRNYXJrdXAodHJh
bnNhY3Rpb24sIHByb3BzLCBjb250ZXh0KTtcbiAgICAgIGlmICghdGFnQ29udGVudCAmJiBvbWl0
dGVkQ2xvc2VUYWdzW3RoaXMuX3RhZ10pIHtcbiAgICAgICAgbW91bnRJbWFnZSA9IHRhZ09wZW4g
KyAnLz4nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbW91bnRJbWFnZSA9IHRhZ09wZW4gKyAn
PicgKyB0YWdDb250ZW50ICsgJzwvJyArIHRoaXMuX2N1cnJlbnRFbGVtZW50LnR5cGUgKyAnPic7
XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoICh0aGlzLl90YWcpIHtcbiAgICAgIGNhc2Ug
J2lucHV0JzpcbiAgICAgICAgdHJhbnNhY3Rpb24uZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1
ZShpbnB1dFBvc3RNb3VudCwgdGhpcyk7XG4gICAgICAgIGlmIChwcm9wcy5hdXRvRm9jdXMpIHtc
biAgICAgICAgICB0cmFuc2FjdGlvbi5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKEF1dG9G
b2N1c1V0aWxzLmZvY3VzRE9NQ29tcG9uZW50LCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBi
cmVhaztcbiAgICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgICAgdHJhbnNhY3Rpb24uZ2V0UmVh
Y3RNb3VudFJlYWR5KCkuZW5xdWV1ZSh0ZXh0YXJlYVBvc3RNb3VudCwgdGhpcyk7XG4gICAgICAg
IGlmIChwcm9wcy5hdXRvRm9jdXMpIHtcbiAgICAgICAgICB0cmFuc2FjdGlvbi5nZXRSZWFjdE1v
dW50UmVhZHkoKS5lbnF1ZXVlKEF1dG9Gb2N1c1V0aWxzLmZvY3VzRE9NQ29tcG9uZW50LCB0aGlz
KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAg
ICAgIGlmIChwcm9wcy5hdXRvRm9jdXMpIHtcbiAgICAgICAgICB0cmFuc2FjdGlvbi5nZXRSZWFj
dE1vdW50UmVhZHkoKS5lbnF1ZXVlKEF1dG9Gb2N1c1V0aWxzLmZvY3VzRE9NQ29tcG9uZW50LCB0
aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2J1dHRvbic6XG4g
ICAgICAgIGlmIChwcm9wcy5hdXRvRm9jdXMpIHtcbiAgICAgICAgICB0cmFuc2FjdGlvbi5nZXRS
ZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKEF1dG9Gb2N1c1V0aWxzLmZvY3VzRE9NQ29tcG9uZW50
LCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ29wdGlvbic6
XG4gICAgICAgIHRyYW5zYWN0aW9uLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUob3B0aW9u
UG9zdE1vdW50LCB0aGlzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1v
dW50SW1hZ2U7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgbWFya3VwIGZvciB0aGUgb3Bl
biB0YWcgYW5kIGFsbCBhdHRyaWJ1dGVzLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBoYXMgc2lk
ZSBlZmZlY3RzIGJlY2F1c2UgZXZlbnRzIGdldCByZWdpc3RlcmVkLlxuICAgKlxuICAgKiBJdGVy
YXRpbmcgb3ZlciBvYmplY3QgcHJvcGVydGllcyBpcyBmYXN0ZXIgdGhhbiBpdGVyYXRpbmcgb3Zl
ciBhcnJheXMuXG4gICAqIEBzZWUgaHR0cDovL2pzcGVyZi5jb20vb2JqLXZzLWFyci1pdGVyYXRp
b25cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5z
YWN0aW9ufFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAq
IEBwYXJhbSB7b2JqZWN0fSBwcm9wc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IE1hcmt1cCBvZiBv
cGVuaW5nIHRhZy5cbiAgICovXG4gIF9jcmVhdGVPcGVuVGFnTWFya3VwQW5kUHV0TGlzdGVuZXJz
OiBmdW5jdGlvbiAodHJhbnNhY3Rpb24sIHByb3BzKSB7XG4gICAgdmFyIHJldCA9ICc8JyArIHRo
aXMuX2N1cnJlbnRFbGVtZW50LnR5cGU7XG5cbiAgICBmb3IgKHZhciBwcm9wS2V5IGluIHByb3Bz
KSB7XG4gICAgICBpZiAoIXByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICAg
IGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BLZXld
O1xuICAgICAgaWYgKHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAg
ICAgfVxuICAgICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzLmhhc093blByb3BlcnR5KHBy
b3BLZXkpKSB7XG4gICAgICAgIGlmIChwcm9wVmFsdWUpIHtcbiAgICAgICAgICBlbnF1ZXVlUHV0
TGlzdGVuZXIodGhpcywgcHJvcEtleSwgcHJvcFZhbHVlLCB0cmFuc2FjdGlvbik7XG4gICAgICAg
IH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwcm9wS2V5ID09PSBTVFlMRSkge1xuICAg
ICAgICAgIGlmIChwcm9wVmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChmYWxzZSkge1xuICAgICAg
ICAgICAgICAvLyBTZWUgYF91cGRhdGVET01Qcm9wZXJ0aWVzYC4gc3R5bGUgYmxvY2tcbiAgICAg
ICAgICAgICAgdGhpcy5fcHJldmlvdXNTdHlsZSA9IHByb3BWYWx1ZTtcbiAgICAgICAgICAgIH1c
biAgICAgICAgICAgIHByb3BWYWx1ZSA9IHRoaXMuX3ByZXZpb3VzU3R5bGVDb3B5ID0gX2Fzc2ln
bih7fSwgcHJvcHMuc3R5bGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwcm9wVmFsdWUgPSBD
U1NQcm9wZXJ0eU9wZXJhdGlvbnMuY3JlYXRlTWFya3VwRm9yU3R5bGVzKHByb3BWYWx1ZSwgdGhp
cyk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG1hcmt1cCA9IG51bGw7XG4gICAgICAgIGlmICh0
aGlzLl90YWcgIT0gbnVsbCAmJiBpc0N1c3RvbUNvbXBvbmVudCh0aGlzLl90YWcsIHByb3BzKSkg
e1xuICAgICAgICAgIGlmICghUkVTRVJWRURfUFJPUFMuaGFzT3duUHJvcGVydHkocHJvcEtleSkp
IHtcbiAgICAgICAgICAgIG1hcmt1cCA9IERPTVByb3BlcnR5T3BlcmF0aW9ucy5jcmVhdGVNYXJr
dXBGb3JDdXN0b21BdHRyaWJ1dGUocHJvcEtleSwgcHJvcFZhbHVlKTtcbiAgICAgICAgICB9XG4g
ICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWFya3VwID0gRE9NUHJvcGVydHlPcGVyYXRpb25z
LmNyZWF0ZU1hcmt1cEZvclByb3BlcnR5KHByb3BLZXksIHByb3BWYWx1ZSk7XG4gICAgICAgIH1c
biAgICAgICAgaWYgKG1hcmt1cCkge1xuICAgICAgICAgIHJldCArPSAnICcgKyBtYXJrdXA7XG4g
ICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGb3Igc3RhdGljIHBhZ2VzLCBubyBu
ZWVkIHRvIHB1dCBSZWFjdCBJRCBhbmQgY2hlY2tzdW0uIFNhdmVzIGxvdHMgb2ZcbiAgICAvLyBi
eXRlcy5cbiAgICBpZiAodHJhbnNhY3Rpb24ucmVuZGVyVG9TdGF0aWNNYXJrdXApIHtcbiAgICAg
IHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9ob3N0UGFyZW50KSB7XG4gICAg
ICByZXQgKz0gJyAnICsgRE9NUHJvcGVydHlPcGVyYXRpb25zLmNyZWF0ZU1hcmt1cEZvclJvb3Qo
KTtcbiAgICB9XG4gICAgcmV0ICs9ICcgJyArIERPTVByb3BlcnR5T3BlcmF0aW9ucy5jcmVhdGVN
YXJrdXBGb3JJRCh0aGlzLl9kb21JRCk7XG4gICAgcmV0dXJuIHJldDtcbiAgfSxcblxuICAvKipc
biAgICogQ3JlYXRlcyBtYXJrdXAgZm9yIHRoZSBjb250ZW50IGJldHdlZW4gdGhlIHRhZ3MuXG4g
ICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlv
bnxSZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKiBAcGFy
YW0ge29iamVjdH0gcHJvcHNcbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbnRleHRcbiAgICogQHJl
dHVybiB7c3RyaW5nfSBDb250ZW50IG1hcmt1cC5cbiAgICovXG4gIF9jcmVhdGVDb250ZW50TWFy
a3VwOiBmdW5jdGlvbiAodHJhbnNhY3Rpb24sIHByb3BzLCBjb250ZXh0KSB7XG4gICAgdmFyIHJl
dCA9ICcnO1xuXG4gICAgLy8gSW50ZW50aW9uYWwgdXNlIG9mICE9IHRvIGF2b2lkIGNhdGNoaW5n
IHplcm8vZmFsc2UuXG4gICAgdmFyIGlubmVySFRNTCA9IHByb3BzLmRhbmdlcm91c2x5U2V0SW5u
ZXJIVE1MO1xuICAgIGlmIChpbm5lckhUTUwgIT0gbnVsbCkge1xuICAgICAgaWYgKGlubmVySFRN
TC5fX2h0bWwgIT0gbnVsbCkge1xuICAgICAgICByZXQgPSBpbm5lckhUTUwuX19odG1sO1xuICAg
ICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgY29udGVudFRvVXNlID0gQ09OVEVOVF9UWVBF
U1t0eXBlb2YgcHJvcHMuY2hpbGRyZW5dID8gcHJvcHMuY2hpbGRyZW4gOiBudWxsO1xuICAgICAg
dmFyIGNoaWxkcmVuVG9Vc2UgPSBjb250ZW50VG9Vc2UgIT0gbnVsbCA/IG51bGwgOiBwcm9wcy5j
aGlsZHJlbjtcbiAgICAgIGlmIChjb250ZW50VG9Vc2UgIT0gbnVsbCkge1xuICAgICAgICAvLyBU
T0RPOiBWYWxpZGF0ZSB0aGF0IHRleHQgaXMgYWxsb3dlZCBhcyBhIGNoaWxkIG9mIHRoaXMgbm9k
ZVxuICAgICAgICByZXQgPSBlc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXIoY29udGVudFRvVXNl
KTtcbiAgICAgICAgaWYgKGZhbHNlKSB7XG4gICAgICAgICAgc2V0QW5kVmFsaWRhdGVDb250ZW50
Q2hpbGREZXYuY2FsbCh0aGlzLCBjb250ZW50VG9Vc2UpO1xuICAgICAgICB9XG4gICAgICB9IGVs
c2UgaWYgKGNoaWxkcmVuVG9Vc2UgIT0gbnVsbCkge1xuICAgICAgICB2YXIgbW91bnRJbWFnZXMg
PSB0aGlzLm1vdW50Q2hpbGRyZW4oY2hpbGRyZW5Ub1VzZSwgdHJhbnNhY3Rpb24sIGNvbnRleHQp
O1xuICAgICAgICByZXQgPSBtb3VudEltYWdlcy5qb2luKCcnKTtcbiAgICAgIH1cbiAgICB9XG4g
ICAgaWYgKG5ld2xpbmVFYXRpbmdUYWdzW3RoaXMuX3RhZ10gJiYgcmV0LmNoYXJBdCgwKSA9PT0g
J1xcbicpIHtcbiAgICAgIC8vIHRleHQvaHRtbCBpZ25vcmVzIHRoZSBmaXJzdCBjaGFyYWN0ZXIg
aW4gdGhlc2UgdGFncyBpZiBpdCdzIGEgbmV3bGluZVxuICAgICAgLy8gUHJlZmVyIHRvIGJyZWFr
IGFwcGxpY2F0aW9uL3htbCBvdmVyIHRleHQvaHRtbCAoZm9yIG5vdykgYnkgYWRkaW5nXG4gICAg
ICAvLyBhIG5ld2xpbmUgc3BlY2lmaWNhbGx5IHRvIGdldCBlYXRlbiBieSB0aGUgcGFyc2VyLiAo
QWx0ZXJuYXRlbHkgZm9yXG4gICAgICAvLyB0ZXh0YXJlYXMsIHJlcGxhY2luZyBcIl5cXG5cIiB3
aXRoIFwiXFxyXFxuXCIgZG9lc24ndCBnZXQgZWF0ZW4sIGFuZCB0aGUgZmlyc3RcbiAgICAgIC8v
IFxcciBpcyBub3JtYWxpemVkIG91dCBieSBIVE1MVGV4dEFyZWFFbGVtZW50I3ZhbHVlLilcbiAg
ICAgIC8vIFNlZTogPGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWwtcG9seWdsb3QvI25ld2xpbmVz
LWluLXRleHRhcmVhLWFuZC1wcmU+XG4gICAgICAvLyBTZWU6IDxodHRwOi8vd3d3LnczLm9yZy9U
Ui9odG1sNS9zeW50YXguaHRtbCNlbGVtZW50LXJlc3RyaWN0aW9ucz5cbiAgICAgIC8vIFNlZTog
PGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw1L3N5bnRheC5odG1sI25ld2xpbmVzPlxuICAgICAg
Ly8gU2VlOiBQYXJzaW5nIG9mIFwidGV4dGFyZWFcIiBcImxpc3RpbmdcIiBhbmQgXCJwcmVcIiBl
bGVtZW50c1xuICAgICAgLy8gIGZyb20gPGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw1L3N5bnRh
eC5odG1sI3BhcnNpbmctbWFpbi1pbmJvZHk+XG4gICAgICByZXR1cm4gJ1xcbicgKyByZXQ7XG4g
ICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICB9LFxuXG4gIF9jcmVhdGVJ
bml0aWFsQ2hpbGRyZW46IGZ1bmN0aW9uICh0cmFuc2FjdGlvbiwgcHJvcHMsIGNvbnRleHQsIGxh
enlUcmVlKSB7XG4gICAgLy8gSW50ZW50aW9uYWwgdXNlIG9mICE9IHRvIGF2b2lkIGNhdGNoaW5n
IHplcm8vZmFsc2UuXG4gICAgdmFyIGlubmVySFRNTCA9IHByb3BzLmRhbmdlcm91c2x5U2V0SW5u
ZXJIVE1MO1xuICAgIGlmIChpbm5lckhUTUwgIT0gbnVsbCkge1xuICAgICAgaWYgKGlubmVySFRN
TC5fX2h0bWwgIT0gbnVsbCkge1xuICAgICAgICBET01MYXp5VHJlZS5xdWV1ZUhUTUwobGF6eVRy
ZWUsIGlubmVySFRNTC5fX2h0bWwpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIg
Y29udGVudFRvVXNlID0gQ09OVEVOVF9UWVBFU1t0eXBlb2YgcHJvcHMuY2hpbGRyZW5dID8gcHJv
cHMuY2hpbGRyZW4gOiBudWxsO1xuICAgICAgdmFyIGNoaWxkcmVuVG9Vc2UgPSBjb250ZW50VG9V
c2UgIT0gbnVsbCA/IG51bGwgOiBwcm9wcy5jaGlsZHJlbjtcbiAgICAgIC8vIFRPRE86IFZhbGlk
YXRlIHRoYXQgdGV4dCBpcyBhbGxvd2VkIGFzIGEgY2hpbGQgb2YgdGhpcyBub2RlXG4gICAgICBp
ZiAoY29udGVudFRvVXNlICE9IG51bGwpIHtcbiAgICAgICAgLy8gQXZvaWQgc2V0dGluZyB0ZXh0
Q29udGVudCB3aGVuIHRoZSB0ZXh0IGlzIGVtcHR5LiBJbiBJRTExIHNldHRpbmdcbiAgICAgICAg
Ly8gdGV4dENvbnRlbnQgb24gYSB0ZXh0IGFyZWEgd2lsbCBjYXVzZSB0aGUgcGxhY2Vob2xkZXIg
dG8gbm90XG4gICAgICAgIC8vIHNob3cgd2l0aGluIHRoZSB0ZXh0YXJlYSB1bnRpbCBpdCBoYXMg
YmVlbiBmb2N1c2VkIGFuZCBibHVycmVkIGFnYWluLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1
Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzY3MzEjaXNzdWVjb21tZW50LTI1NDg3NDU1M1xu
ICAgICAgICBpZiAoY29udGVudFRvVXNlICE9PSAnJykge1xuICAgICAgICAgIGlmIChmYWxzZSkg
e1xuICAgICAgICAgICAgc2V0QW5kVmFsaWRhdGVDb250ZW50Q2hpbGREZXYuY2FsbCh0aGlzLCBj
b250ZW50VG9Vc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBET01MYXp5VHJlZS5xdWV1ZVRl
eHQobGF6eVRyZWUsIGNvbnRlbnRUb1VzZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAo
Y2hpbGRyZW5Ub1VzZSAhPSBudWxsKSB7XG4gICAgICAgIHZhciBtb3VudEltYWdlcyA9IHRoaXMu
bW91bnRDaGlsZHJlbihjaGlsZHJlblRvVXNlLCB0cmFuc2FjdGlvbiwgY29udGV4dCk7XG4gICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbW91bnRJbWFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAg
ICAgICBET01MYXp5VHJlZS5xdWV1ZUNoaWxkKGxhenlUcmVlLCBtb3VudEltYWdlc1tpXSk7XG4g
ICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlY2VpdmVzIGEg
bmV4dCBlbGVtZW50IGFuZCB1cGRhdGVzIHRoZSBjb21wb25lbnQuXG4gICAqXG4gICAqIEBpbnRl
cm5hbFxuICAgKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gbmV4dEVsZW1lbnRcbiAgICogQHBhcmFt
IHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rp
b259IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb250ZXh0XG4gICAqL1xuICBy
ZWNlaXZlQ29tcG9uZW50OiBmdW5jdGlvbiAobmV4dEVsZW1lbnQsIHRyYW5zYWN0aW9uLCBjb250
ZXh0KSB7XG4gICAgdmFyIHByZXZFbGVtZW50ID0gdGhpcy5fY3VycmVudEVsZW1lbnQ7XG4gICAg
dGhpcy5fY3VycmVudEVsZW1lbnQgPSBuZXh0RWxlbWVudDtcbiAgICB0aGlzLnVwZGF0ZUNvbXBv
bmVudCh0cmFuc2FjdGlvbiwgcHJldkVsZW1lbnQsIG5leHRFbGVtZW50LCBjb250ZXh0KTtcbiAg
fSxcblxuICAvKipcbiAgICogVXBkYXRlcyBhIERPTSBjb21wb25lbnQgYWZ0ZXIgaXQgaGFzIGFs
cmVhZHkgYmVlbiBhbGxvY2F0ZWQgYW5kXG4gICAqIGF0dGFjaGVkIHRvIHRoZSBET00uIFJlY29u
Y2lsZXMgdGhlIHJvb3QgRE9NIG5vZGUsIHRoZW4gcmVjdXJzZXMuXG4gICAqXG4gICAqIEBwYXJh
bSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHtS
ZWFjdEVsZW1lbnR9IHByZXZFbGVtZW50XG4gICAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBuZXh0
RWxlbWVudFxuICAgKiBAaW50ZXJuYWxcbiAgICogQG92ZXJyaWRhYmxlXG4gICAqL1xuICB1cGRh
dGVDb21wb25lbnQ6IGZ1bmN0aW9uICh0cmFuc2FjdGlvbiwgcHJldkVsZW1lbnQsIG5leHRFbGVt
ZW50LCBjb250ZXh0KSB7XG4gICAgdmFyIGxhc3RQcm9wcyA9IHByZXZFbGVtZW50LnByb3BzO1xu
ICAgIHZhciBuZXh0UHJvcHMgPSB0aGlzLl9jdXJyZW50RWxlbWVudC5wcm9wcztcblxuICAgIHN3
aXRjaCAodGhpcy5fdGFnKSB7XG4gICAgICBjYXNlICdpbnB1dCc6XG4gICAgICAgIGxhc3RQcm9w
cyA9IFJlYWN0RE9NSW5wdXQuZ2V0SG9zdFByb3BzKHRoaXMsIGxhc3RQcm9wcyk7XG4gICAgICAg
IG5leHRQcm9wcyA9IFJlYWN0RE9NSW5wdXQuZ2V0SG9zdFByb3BzKHRoaXMsIG5leHRQcm9wcyk7
XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnb3B0aW9uJzpcbiAgICAgICAgbGFzdFByb3Bz
ID0gUmVhY3RET01PcHRpb24uZ2V0SG9zdFByb3BzKHRoaXMsIGxhc3RQcm9wcyk7XG4gICAgICAg
IG5leHRQcm9wcyA9IFJlYWN0RE9NT3B0aW9uLmdldEhvc3RQcm9wcyh0aGlzLCBuZXh0UHJvcHMp
O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICAgIGxhc3RQcm9w
cyA9IFJlYWN0RE9NU2VsZWN0LmdldEhvc3RQcm9wcyh0aGlzLCBsYXN0UHJvcHMpO1xuICAgICAg
ICBuZXh0UHJvcHMgPSBSZWFjdERPTVNlbGVjdC5nZXRIb3N0UHJvcHModGhpcywgbmV4dFByb3Bz
KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICAgIGxhc3RQ
cm9wcyA9IFJlYWN0RE9NVGV4dGFyZWEuZ2V0SG9zdFByb3BzKHRoaXMsIGxhc3RQcm9wcyk7XG4g
ICAgICAgIG5leHRQcm9wcyA9IFJlYWN0RE9NVGV4dGFyZWEuZ2V0SG9zdFByb3BzKHRoaXMsIG5l
eHRQcm9wcyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGFzc2VydFZhbGlkUHJvcHMo
dGhpcywgbmV4dFByb3BzKTtcbiAgICB0aGlzLl91cGRhdGVET01Qcm9wZXJ0aWVzKGxhc3RQcm9w
cywgbmV4dFByb3BzLCB0cmFuc2FjdGlvbik7XG4gICAgdGhpcy5fdXBkYXRlRE9NQ2hpbGRyZW4o
bGFzdFByb3BzLCBuZXh0UHJvcHMsIHRyYW5zYWN0aW9uLCBjb250ZXh0KTtcblxuICAgIHN3aXRj
aCAodGhpcy5fdGFnKSB7XG4gICAgICBjYXNlICdpbnB1dCc6XG4gICAgICAgIC8vIFVwZGF0ZSB0
aGUgd3JhcHBlciBhcm91bmQgaW5wdXRzICphZnRlciogdXBkYXRpbmcgcHJvcHMuIFRoaXMgaGFz
IHRvXG4gICAgICAgIC8vIGhhcHBlbiBhZnRlciBgX3VwZGF0ZURPTVByb3BlcnRpZXNgLiBPdGhl
cndpc2UgSFRNTDUgaW5wdXQgdmFsaWRhdGlvbnNcbiAgICAgICAgLy8gcmFpc2Ugd2FybmluZ3Mg
YW5kIHByZXZlbnQgdGhlIG5ldyB2YWx1ZSBmcm9tIGJlaW5nIGFzc2lnbmVkLlxuICAgICAgICBS
ZWFjdERPTUlucHV0LnVwZGF0ZVdyYXBwZXIodGhpcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAg
Y2FzZSAndGV4dGFyZWEnOlxuICAgICAgICBSZWFjdERPTVRleHRhcmVhLnVwZGF0ZVdyYXBwZXIo
dGhpcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgICAgLy8g
PHNlbGVjdD4gdmFsdWUgdXBkYXRlIG5lZWRzIHRvIG9jY3VyIGFmdGVyIDxvcHRpb24+IGNoaWxk
cmVuXG4gICAgICAgIC8vIHJlY29uY2lsaWF0aW9uXG4gICAgICAgIHRyYW5zYWN0aW9uLmdldFJl
YWN0TW91bnRSZWFkeSgpLmVucXVldWUocG9zdFVwZGF0ZVNlbGVjdFdyYXBwZXIsIHRoaXMpO1xu
ICAgICAgICBicmVhaztcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlY29uY2lsZXMgdGhl
IHByb3BlcnRpZXMgYnkgZGV0ZWN0aW5nIGRpZmZlcmVuY2VzIGluIHByb3BlcnR5IHZhbHVlcyBh
bmRcbiAgICogdXBkYXRpbmcgdGhlIERPTSBhcyBuZWNlc3NhcnkuIFRoaXMgZnVuY3Rpb24gaXMg
cHJvYmFibHkgdGhlIHNpbmdsZSBtb3N0XG4gICAqIGNyaXRpY2FsIHBhdGggZm9yIHBlcmZvcm1h
bmNlIG9wdGltaXphdGlvbi5cbiAgICpcbiAgICogVE9ETzogQmVuY2htYXJrIHdoZXRoZXIgY2hl
Y2tpbmcgZm9yIGNoYW5nZWQgdmFsdWVzIGluIG1lbW9yeSBhY3R1YWxseVxuICAgKiAgICAgICBp
bXByb3ZlcyBwZXJmb3JtYW5jZSAoZXNwZWNpYWxseSBzdGF0aWNhbGx5IHBvc2l0aW9uZWQgZWxl
bWVudHMpLlxuICAgKiBUT0RPOiBCZW5jaG1hcmsgdGhlIGVmZmVjdHMgb2YgcHV0dGluZyB0aGlz
IGF0IHRoZSB0b3Agc2luY2UgOTklIG9mIHByb3BzXG4gICAqICAgICAgIGRvIG5vdCBjaGFuZ2Ug
Zm9yIGEgZ2l2ZW4gcmVjb25jaWxpYXRpb24uXG4gICAqIFRPRE86IEJlbmNobWFyayBhcmVhcyB0
aGF0IGNhbiBiZSBpbXByb3ZlZCB3aXRoIGNhY2hpbmcuXG4gICAqXG4gICAqIEBwcml2YXRlXG4g
ICAqIEBwYXJhbSB7b2JqZWN0fSBsYXN0UHJvcHNcbiAgICogQHBhcmFtIHtvYmplY3R9IG5leHRQ
cm9wc1xuICAgKiBAcGFyYW0gez9ET01FbGVtZW50fSBub2RlXG4gICAqL1xuICBfdXBkYXRlRE9N
UHJvcGVydGllczogZnVuY3Rpb24gKGxhc3RQcm9wcywgbmV4dFByb3BzLCB0cmFuc2FjdGlvbikg
e1xuICAgIHZhciBwcm9wS2V5O1xuICAgIHZhciBzdHlsZU5hbWU7XG4gICAgdmFyIHN0eWxlVXBk
YXRlcztcbiAgICBmb3IgKHByb3BLZXkgaW4gbGFzdFByb3BzKSB7XG4gICAgICBpZiAobmV4dFBy
b3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpIHx8ICFsYXN0UHJvcHMuaGFzT3duUHJvcGVydHko
cHJvcEtleSkgfHwgbGFzdFByb3BzW3Byb3BLZXldID09IG51bGwpIHtcbiAgICAgICAgY29udGlu
dWU7XG4gICAgICB9XG4gICAgICBpZiAocHJvcEtleSA9PT0gU1RZTEUpIHtcbiAgICAgICAgdmFy
IGxhc3RTdHlsZSA9IHRoaXMuX3ByZXZpb3VzU3R5bGVDb3B5O1xuICAgICAgICBmb3IgKHN0eWxl
TmFtZSBpbiBsYXN0U3R5bGUpIHtcbiAgICAgICAgICBpZiAobGFzdFN0eWxlLmhhc093blByb3Bl
cnR5KHN0eWxlTmFtZSkpIHtcbiAgICAgICAgICAgIHN0eWxlVXBkYXRlcyA9IHN0eWxlVXBkYXRl
cyB8fCB7fTtcbiAgICAgICAgICAgIHN0eWxlVXBkYXRlc1tzdHlsZU5hbWVdID0gJyc7XG4gICAg
ICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3ByZXZpb3VzU3R5bGVDb3B5ID0gbnVs
bDtcbiAgICAgIH0gZWxzZSBpZiAocmVnaXN0cmF0aW9uTmFtZU1vZHVsZXMuaGFzT3duUHJvcGVy
dHkocHJvcEtleSkpIHtcbiAgICAgICAgaWYgKGxhc3RQcm9wc1twcm9wS2V5XSkge1xuICAgICAg
ICAgIC8vIE9ubHkgY2FsbCBkZWxldGVMaXN0ZW5lciBpZiB0aGVyZSB3YXMgYSBsaXN0ZW5lciBw
cmV2aW91c2x5IG9yXG4gICAgICAgICAgLy8gZWxzZSB3aWxsRGVsZXRlTGlzdGVuZXIgZ2V0cyBj
YWxsZWQgd2hlbiB0aGVyZSB3YXNuJ3QgYWN0dWFsbHkgYVxuICAgICAgICAgIC8vIGxpc3RlbmVy
IChlLmcuLCBvbkNsaWNrPXtudWxsfSlcbiAgICAgICAgICBkZWxldGVMaXN0ZW5lcih0aGlzLCBw
cm9wS2V5KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc0N1c3RvbUNvbXBvbmVudCh0
aGlzLl90YWcsIGxhc3RQcm9wcykpIHtcbiAgICAgICAgaWYgKCFSRVNFUlZFRF9QUk9QUy5oYXNP
d25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgICAgIERPTVByb3BlcnR5T3BlcmF0aW9ucy5k
ZWxldGVWYWx1ZUZvckF0dHJpYnV0ZShnZXROb2RlKHRoaXMpLCBwcm9wS2V5KTtcbiAgICAgICAg
fVxuICAgICAgfSBlbHNlIGlmIChET01Qcm9wZXJ0eS5wcm9wZXJ0aWVzW3Byb3BLZXldIHx8IERP
TVByb3BlcnR5LmlzQ3VzdG9tQXR0cmlidXRlKHByb3BLZXkpKSB7XG4gICAgICAgIERPTVByb3Bl
cnR5T3BlcmF0aW9ucy5kZWxldGVWYWx1ZUZvclByb3BlcnR5KGdldE5vZGUodGhpcyksIHByb3BL
ZXkpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKHByb3BLZXkgaW4gbmV4dFByb3BzKSB7XG4g
ICAgICB2YXIgbmV4dFByb3AgPSBuZXh0UHJvcHNbcHJvcEtleV07XG4gICAgICB2YXIgbGFzdFBy
b3AgPSBwcm9wS2V5ID09PSBTVFlMRSA/IHRoaXMuX3ByZXZpb3VzU3R5bGVDb3B5IDogbGFzdFBy
b3BzICE9IG51bGwgPyBsYXN0UHJvcHNbcHJvcEtleV0gOiB1bmRlZmluZWQ7XG4gICAgICBpZiAo
IW5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSB8fCBuZXh0UHJvcCA9PT0gbGFzdFBy
b3AgfHwgbmV4dFByb3AgPT0gbnVsbCAmJiBsYXN0UHJvcCA9PSBudWxsKSB7XG4gICAgICAgIGNv
bnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BLZXkgPT09IFNUWUxFKSB7XG4gICAgICAg
IGlmIChuZXh0UHJvcCkge1xuICAgICAgICAgIGlmIChmYWxzZSkge1xuICAgICAgICAgICAgY2hl
Y2tBbmRXYXJuRm9yTXV0YXRlZFN0eWxlKHRoaXMuX3ByZXZpb3VzU3R5bGVDb3B5LCB0aGlzLl9w
cmV2aW91c1N0eWxlLCB0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuX3ByZXZpb3VzU3R5bGUgPSBu
ZXh0UHJvcDtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmV4dFByb3AgPSB0aGlzLl9wcmV2aW91
c1N0eWxlQ29weSA9IF9hc3NpZ24oe30sIG5leHRQcm9wKTtcbiAgICAgICAgfSBlbHNlIHtcbiAg
ICAgICAgICB0aGlzLl9wcmV2aW91c1N0eWxlQ29weSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAg
ICAgaWYgKGxhc3RQcm9wKSB7XG4gICAgICAgICAgLy8gVW5zZXQgc3R5bGVzIG9uIGBsYXN0UHJv
cGAgYnV0IG5vdCBvbiBgbmV4dFByb3BgLlxuICAgICAgICAgIGZvciAoc3R5bGVOYW1lIGluIGxh
c3RQcm9wKSB7XG4gICAgICAgICAgICBpZiAobGFzdFByb3AuaGFzT3duUHJvcGVydHkoc3R5bGVO
YW1lKSAmJiAoIW5leHRQcm9wIHx8ICFuZXh0UHJvcC5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUp
KSkge1xuICAgICAgICAgICAgICBzdHlsZVVwZGF0ZXMgPSBzdHlsZVVwZGF0ZXMgfHwge307XG4g
ICAgICAgICAgICAgIHN0eWxlVXBkYXRlc1tzdHlsZU5hbWVdID0gJyc7XG4gICAgICAgICAgICB9
XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFVwZGF0ZSBzdHlsZXMgdGhhdCBjaGFuZ2VkIHNp
bmNlIGBsYXN0UHJvcGAuXG4gICAgICAgICAgZm9yIChzdHlsZU5hbWUgaW4gbmV4dFByb3ApIHtc
biAgICAgICAgICAgIGlmIChuZXh0UHJvcC5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpICYmIGxh
c3RQcm9wW3N0eWxlTmFtZV0gIT09IG5leHRQcm9wW3N0eWxlTmFtZV0pIHtcbiAgICAgICAgICAg
ICAgc3R5bGVVcGRhdGVzID0gc3R5bGVVcGRhdGVzIHx8IHt9O1xuICAgICAgICAgICAgICBzdHls
ZVVwZGF0ZXNbc3R5bGVOYW1lXSA9IG5leHRQcm9wW3N0eWxlTmFtZV07XG4gICAgICAgICAgICB9
XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFJlbGllcyBvbiBg
dXBkYXRlU3R5bGVzQnlJRGAgbm90IG11dGF0aW5nIGBzdHlsZVVwZGF0ZXNgLlxuICAgICAgICAg
IHN0eWxlVXBkYXRlcyA9IG5leHRQcm9wO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHJl
Z2lzdHJhdGlvbk5hbWVNb2R1bGVzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICAg
IGlmIChuZXh0UHJvcCkge1xuICAgICAgICAgIGVucXVldWVQdXRMaXN0ZW5lcih0aGlzLCBwcm9w
S2V5LCBuZXh0UHJvcCwgdHJhbnNhY3Rpb24pO1xuICAgICAgICB9IGVsc2UgaWYgKGxhc3RQcm9w
KSB7XG4gICAgICAgICAgZGVsZXRlTGlzdGVuZXIodGhpcywgcHJvcEtleSk7XG4gICAgICAgIH1c
biAgICAgIH0gZWxzZSBpZiAoaXNDdXN0b21Db21wb25lbnQodGhpcy5fdGFnLCBuZXh0UHJvcHMp
KSB7XG4gICAgICAgIGlmICghUkVTRVJWRURfUFJPUFMuaGFzT3duUHJvcGVydHkocHJvcEtleSkp
IHtcbiAgICAgICAgICBET01Qcm9wZXJ0eU9wZXJhdGlvbnMuc2V0VmFsdWVGb3JBdHRyaWJ1dGUo
Z2V0Tm9kZSh0aGlzKSwgcHJvcEtleSwgbmV4dFByb3ApO1xuICAgICAgICB9XG4gICAgICB9IGVs
c2UgaWYgKERPTVByb3BlcnR5LnByb3BlcnRpZXNbcHJvcEtleV0gfHwgRE9NUHJvcGVydHkuaXND
dXN0b21BdHRyaWJ1dGUocHJvcEtleSkpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBnZXROb2RlKHRo
aXMpO1xuICAgICAgICAvLyBJZiB3ZSdyZSB1cGRhdGluZyB0byBudWxsIG9yIHVuZGVmaW5lZCwg
d2Ugc2hvdWxkIHJlbW92ZSB0aGUgcHJvcGVydHlcbiAgICAgICAgLy8gZnJvbSB0aGUgRE9NIG5v
ZGUgaW5zdGVhZCBvZiBpbmFkdmVydGVudGx5IHNldHRpbmcgdG8gYSBzdHJpbmcuIFRoaXNcbiAg
ICAgICAgLy8gYnJpbmdzIHVzIGluIGxpbmUgd2l0aCB0aGUgc2FtZSBiZWhhdmlvciB3ZSBoYXZl
IG9uIGluaXRpYWwgcmVuZGVyLlxuICAgICAgICBpZiAobmV4dFByb3AgIT0gbnVsbCkge1xuICAg
ICAgICAgIERPTVByb3BlcnR5T3BlcmF0aW9ucy5zZXRWYWx1ZUZvclByb3BlcnR5KG5vZGUsIHBy
b3BLZXksIG5leHRQcm9wKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBET01Qcm9wZXJ0
eU9wZXJhdGlvbnMuZGVsZXRlVmFsdWVGb3JQcm9wZXJ0eShub2RlLCBwcm9wS2V5KTtcbiAgICAg
ICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc3R5bGVVcGRhdGVzKSB7XG4gICAgICBDU1NQ
cm9wZXJ0eU9wZXJhdGlvbnMuc2V0VmFsdWVGb3JTdHlsZXMoZ2V0Tm9kZSh0aGlzKSwgc3R5bGVV
cGRhdGVzLCB0aGlzKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlY29uY2lsZXMgdGhl
IGNoaWxkcmVuIHdpdGggdGhlIHZhcmlvdXMgcHJvcGVydGllcyB0aGF0IGFmZmVjdCB0aGVcbiAg
ICogY2hpbGRyZW4gY29udGVudC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGxhc3RQcm9w
c1xuICAgKiBAcGFyYW0ge29iamVjdH0gbmV4dFByb3BzXG4gICAqIEBwYXJhbSB7UmVhY3RSZWNv
bmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbnRl
eHRcbiAgICovXG4gIF91cGRhdGVET01DaGlsZHJlbjogZnVuY3Rpb24gKGxhc3RQcm9wcywgbmV4
dFByb3BzLCB0cmFuc2FjdGlvbiwgY29udGV4dCkge1xuICAgIHZhciBsYXN0Q29udGVudCA9IENP
TlRFTlRfVFlQRVNbdHlwZW9mIGxhc3RQcm9wcy5jaGlsZHJlbl0gPyBsYXN0UHJvcHMuY2hpbGRy
ZW4gOiBudWxsO1xuICAgIHZhciBuZXh0Q29udGVudCA9IENPTlRFTlRfVFlQRVNbdHlwZW9mIG5l
eHRQcm9wcy5jaGlsZHJlbl0gPyBuZXh0UHJvcHMuY2hpbGRyZW4gOiBudWxsO1xuXG4gICAgdmFy
IGxhc3RIdG1sID0gbGFzdFByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MICYmIGxhc3RQcm9w
cy5kYW5nZXJvdXNseVNldElubmVySFRNTC5fX2h0bWw7XG4gICAgdmFyIG5leHRIdG1sID0gbmV4
dFByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MICYmIG5leHRQcm9wcy5kYW5nZXJvdXNseVNl
dElubmVySFRNTC5fX2h0bWw7XG5cbiAgICAvLyBOb3RlIHRoZSB1c2Ugb2YgYCE9YCB3aGljaCBj
aGVja3MgZm9yIG51bGwgb3IgdW5kZWZpbmVkLlxuICAgIHZhciBsYXN0Q2hpbGRyZW4gPSBsYXN0
Q29udGVudCAhPSBudWxsID8gbnVsbCA6IGxhc3RQcm9wcy5jaGlsZHJlbjtcbiAgICB2YXIgbmV4
dENoaWxkcmVuID0gbmV4dENvbnRlbnQgIT0gbnVsbCA/IG51bGwgOiBuZXh0UHJvcHMuY2hpbGRy
ZW47XG5cbiAgICAvLyBJZiB3ZSdyZSBzd2l0Y2hpbmcgZnJvbSBjaGlsZHJlbiB0byBjb250ZW50
L2h0bWwgb3IgdmljZSB2ZXJzYSwgcmVtb3ZlXG4gICAgLy8gdGhlIG9sZCBjb250ZW50XG4gICAg
dmFyIGxhc3RIYXNDb250ZW50T3JIdG1sID0gbGFzdENvbnRlbnQgIT0gbnVsbCB8fCBsYXN0SHRt
bCAhPSBudWxsO1xuICAgIHZhciBuZXh0SGFzQ29udGVudE9ySHRtbCA9IG5leHRDb250ZW50ICE9
IG51bGwgfHwgbmV4dEh0bWwgIT0gbnVsbDtcbiAgICBpZiAobGFzdENoaWxkcmVuICE9IG51bGwg
JiYgbmV4dENoaWxkcmVuID09IG51bGwpIHtcbiAgICAgIHRoaXMudXBkYXRlQ2hpbGRyZW4obnVs
bCwgdHJhbnNhY3Rpb24sIGNvbnRleHQpO1xuICAgIH0gZWxzZSBpZiAobGFzdEhhc0NvbnRlbnRP
ckh0bWwgJiYgIW5leHRIYXNDb250ZW50T3JIdG1sKSB7XG4gICAgICB0aGlzLnVwZGF0ZVRleHRD
b250ZW50KCcnKTtcbiAgICAgIGlmIChmYWxzZSkge1xuICAgICAgICBSZWFjdEluc3RydW1lbnRh
dGlvbi5kZWJ1Z1Rvb2wub25TZXRDaGlsZHJlbih0aGlzLl9kZWJ1Z0lELCBbXSk7XG4gICAgICB9
XG4gICAgfVxuXG4gICAgaWYgKG5leHRDb250ZW50ICE9IG51bGwpIHtcbiAgICAgIGlmIChsYXN0
Q29udGVudCAhPT0gbmV4dENvbnRlbnQpIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZXh0Q29udGVu
dCgnJyArIG5leHRDb250ZW50KTtcbiAgICAgICAgaWYgKGZhbHNlKSB7XG4gICAgICAgICAgc2V0
QW5kVmFsaWRhdGVDb250ZW50Q2hpbGREZXYuY2FsbCh0aGlzLCBuZXh0Q29udGVudCk7XG4gICAg
ICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5leHRIdG1sICE9IG51bGwpIHtcbiAgICAg
IGlmIChsYXN0SHRtbCAhPT0gbmV4dEh0bWwpIHtcbiAgICAgICAgdGhpcy51cGRhdGVNYXJrdXAo
JycgKyBuZXh0SHRtbCk7XG4gICAgICB9XG4gICAgICBpZiAoZmFsc2UpIHtcbiAgICAgICAgUmVh
Y3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uU2V0Q2hpbGRyZW4odGhpcy5fZGVidWdJRCwg
W10pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobmV4dENoaWxkcmVuICE9IG51bGwpIHtcbiAg
ICAgIGlmIChmYWxzZSkge1xuICAgICAgICBzZXRBbmRWYWxpZGF0ZUNvbnRlbnRDaGlsZERldi5j
YWxsKHRoaXMsIG51bGwpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVwZGF0ZUNoaWxkcmVuKG5l
eHRDaGlsZHJlbiwgdHJhbnNhY3Rpb24sIGNvbnRleHQpO1xuICAgIH1cbiAgfSxcblxuICBnZXRI
b3N0Tm9kZTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBnZXROb2RlKHRoaXMpO1xuICB9LFxu
XG4gIC8qKlxuICAgKiBEZXN0cm95cyBhbGwgZXZlbnQgcmVnaXN0cmF0aW9ucyBmb3IgdGhpcyBp
bnN0YW5jZS4gRG9lcyBub3QgcmVtb3ZlIGZyb21cbiAgICogdGhlIERPTS4gVGhhdCBtdXN0IGJl
IGRvbmUgYnkgdGhlIHBhcmVudC5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICB1bm1v
dW50Q29tcG9uZW50OiBmdW5jdGlvbiAoc2FmZWx5KSB7XG4gICAgc3dpdGNoICh0aGlzLl90YWcp
IHtcbiAgICAgIGNhc2UgJ2F1ZGlvJzpcbiAgICAgIGNhc2UgJ2Zvcm0nOlxuICAgICAgY2FzZSAn
aWZyYW1lJzpcbiAgICAgIGNhc2UgJ2ltZyc6XG4gICAgICBjYXNlICdsaW5rJzpcbiAgICAgIGNh
c2UgJ29iamVjdCc6XG4gICAgICBjYXNlICdzb3VyY2UnOlxuICAgICAgY2FzZSAndmlkZW8nOlxu
ICAgICAgICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fd3JhcHBlclN0YXRlLmxpc3RlbmVycztcbiAg
ICAgICAgaWYgKGxpc3RlbmVycykge1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlz
dGVuZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnNbaV0ucmVtb3ZlKCk7
XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaW5w
dXQnOlxuICAgICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgICBpbnB1dFZhbHVlVHJhY2tpbmcu
c3RvcFRyYWNraW5nKHRoaXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2h0bWwnOlxu
ICAgICAgY2FzZSAnaGVhZCc6XG4gICAgICBjYXNlICdib2R5JzpcbiAgICAgICAgLyoqXG4gICAg
ICAgICAqIENvbXBvbmVudHMgbGlrZSA8aHRtbD4gPGhlYWQ+IGFuZCA8Ym9keT4gY2FuJ3QgYmUg
cmVtb3ZlZCBvciBhZGRlZFxuICAgICAgICAgKiBlYXNpbHkgaW4gYSBjcm9zcy1icm93c2VyIHdh
eSwgaG93ZXZlciBpdCdzIHZhbHVhYmxlIHRvIGJlIGFibGUgdG9cbiAgICAgICAgICogdGFrZSBh
ZHZhbnRhZ2Ugb2YgUmVhY3QncyByZWNvbmNpbGlhdGlvbiBmb3Igc3R5bGluZyBhbmQgPHRpdGxl
PlxuICAgICAgICAgKiBtYW5hZ2VtZW50LiBTbyB3ZSBqdXN0IGRvY3VtZW50IGl0IGFuZCB0aHJv
dyBpbiBkYW5nZXJvdXMgY2FzZXMuXG4gICAgICAgICAqL1xuICAgICAgICAgdHJ1ZSA/ICBmYWxz
ZSA/IGludmFyaWFudChmYWxzZSwgJzwlcz4gdHJpZWQgdG8gdW5tb3VudC4gQmVjYXVzZSBvZiBj
cm9zcy1icm93c2VyIHF1aXJrcyBpdCBpcyBpbXBvc3NpYmxlIHRvIHVubW91bnQgc29tZSB0b3At
bGV2ZWwgY29tcG9uZW50cyAoZWcgPGh0bWw+LCA8aGVhZD4sIGFuZCA8Ym9keT4pIHJlbGlhYmx5
IGFuZCBlZmZpY2llbnRseS4gVG8gZml4IHRoaXMsIGhhdmUgYSBzaW5nbGUgdG9wLWxldmVsIGNv
bXBvbmVudCB0aGF0IG5ldmVyIHVubW91bnRzIHJlbmRlciB0aGVzZSBlbGVtZW50cy4nLCB0aGlz
Ll90YWcpIDogX3Byb2RJbnZhcmlhbnQoJzY2JywgdGhpcy5fdGFnKSA6IHZvaWQgMDtcbiAgICAg
ICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy51bm1vdW50Q2hpbGRyZW4oc2FmZWx5KTtcbiAg
ICBSZWFjdERPTUNvbXBvbmVudFRyZWUudW5jYWNoZU5vZGUodGhpcyk7XG4gICAgRXZlbnRQbHVn
aW5IdWIuZGVsZXRlQWxsTGlzdGVuZXJzKHRoaXMpO1xuICAgIHRoaXMuX3Jvb3ROb2RlSUQgPSAw
O1xuICAgIHRoaXMuX2RvbUlEID0gMDtcbiAgICB0aGlzLl93cmFwcGVyU3RhdGUgPSBudWxsO1xu
XG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICBzZXRBbmRWYWxpZGF0ZUNvbnRlbnRDaGlsZERldi5j
YWxsKHRoaXMsIG51bGwpO1xuICAgIH1cbiAgfSxcblxuICBnZXRQdWJsaWNJbnN0YW5jZTogZnVu
Y3Rpb24gKCkge1xuICAgIHJldHVybiBnZXROb2RlKHRoaXMpO1xuICB9XG59O1xuXG5fYXNzaWdu
KFJlYWN0RE9NQ29tcG9uZW50LnByb3RvdHlwZSwgUmVhY3RET01Db21wb25lbnQuTWl4aW4sIFJl
YWN0TXVsdGlDaGlsZC5NaXhpbik7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RET01Db21wb25l
bnQ7XG5cbi8qKiovIH0pLFxuLyogMTM5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBv
cnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBD
b3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNl
cnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qt
c3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBk
aXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2Yg
cGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2Ft
ZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cblxuXG52YXIgUmVhY3RET01Db21wb25lbnRUcmVlID0g
X193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcblxudmFyIGZvY3VzTm9kZSA9IF9fd2VicGFja19yZXF1
aXJlX18oNjgpO1xuXG52YXIgQXV0b0ZvY3VzVXRpbHMgPSB7XG4gIGZvY3VzRE9NQ29tcG9uZW50
OiBmdW5jdGlvbiAoKSB7XG4gICAgZm9jdXNOb2RlKFJlYWN0RE9NQ29tcG9uZW50VHJlZS5nZXRO
b2RlRnJvbUluc3RhbmNlKHRoaXMpKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBBdXRv
Rm9jdXNVdGlscztcblxuLyoqKi8gfSksXG4vKiAxNDAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1
bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4v
KipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmln
aHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIg
dGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRo
ZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50
XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGlu
IHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuXG5cbnZhciBDU1NQcm9wZXJ0eSA9IF9f
d2VicGFja19yZXF1aXJlX18oNjkpO1xudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gX193ZWJw
YWNrX3JlcXVpcmVfXyg1KTtcbnZhciBSZWFjdEluc3RydW1lbnRhdGlvbiA9IF9fd2VicGFja19y
ZXF1aXJlX18oNyk7XG5cbnZhciBjYW1lbGl6ZVN0eWxlTmFtZSA9IF9fd2VicGFja19yZXF1aXJl
X18oMTQxKTtcbnZhciBkYW5nZXJvdXNTdHlsZVZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXygx
NDMpO1xudmFyIGh5cGhlbmF0ZVN0eWxlTmFtZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTQ0KTtc
bnZhciBtZW1vaXplU3RyaW5nT25seSA9IF9fd2VicGFja19yZXF1aXJlX18oMTQ2KTtcbnZhciB3
YXJuaW5nID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcblxudmFyIHByb2Nlc3NTdHlsZU5hbWUg
PSBtZW1vaXplU3RyaW5nT25seShmdW5jdGlvbiAoc3R5bGVOYW1lKSB7XG4gIHJldHVybiBoeXBo
ZW5hdGVTdHlsZU5hbWUoc3R5bGVOYW1lKTtcbn0pO1xuXG52YXIgaGFzU2hvcnRoYW5kUHJvcGVy
dHlCdWcgPSBmYWxzZTtcbnZhciBzdHlsZUZsb2F0QWNjZXNzb3IgPSAnY3NzRmxvYXQnO1xuaWYg
KEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSkge1xuICB2YXIgdGVtcFN0eWxlID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jykuc3R5bGU7XG4gIHRyeSB7XG4gICAgLy8gSUU4IHRo
cm93cyBcIkludmFsaWQgYXJndW1lbnQuXCIgaWYgcmVzZXR0aW5nIHNob3J0aGFuZCBzdHlsZSBw
cm9wZXJ0aWVzLlxuICAgIHRlbXBTdHlsZS5mb250ID0gJyc7XG4gIH0gY2F0Y2ggKGUpIHtcbiAg
ICBoYXNTaG9ydGhhbmRQcm9wZXJ0eUJ1ZyA9IHRydWU7XG4gIH1cbiAgLy8gSUU4IG9ubHkgc3Vw
cG9ydHMgYWNjZXNzaW5nIGNzc0Zsb2F0IChzdGFuZGFyZCkgYXMgc3R5bGVGbG9hdFxuICBpZiAo
ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmNzc0Zsb2F0ID09PSB1bmRlZmluZWQpIHtc
biAgICBzdHlsZUZsb2F0QWNjZXNzb3IgPSAnc3R5bGVGbG9hdCc7XG4gIH1cbn1cblxuaWYgKGZh
bHNlKSB7XG4gIC8vICdtc1RyYW5zZm9ybScgaXMgY29ycmVjdCwgYnV0IHRoZSBvdGhlciBwcmVm
aXhlcyBzaG91bGQgYmUgY2FwaXRhbGl6ZWRcbiAgdmFyIGJhZFZlbmRvcmVkU3R5bGVOYW1lUGF0
dGVybiA9IC9eKD86d2Via2l0fG1venxvKVtBLVpdLztcblxuICAvLyBzdHlsZSB2YWx1ZXMgc2hv
dWxkbid0IGNvbnRhaW4gYSBzZW1pY29sb25cbiAgdmFyIGJhZFN0eWxlVmFsdWVXaXRoU2VtaWNv
bG9uUGF0dGVybiA9IC87XFxzKiQvO1xuXG4gIHZhciB3YXJuZWRTdHlsZU5hbWVzID0ge307XG4g
IHZhciB3YXJuZWRTdHlsZVZhbHVlcyA9IHt9O1xuICB2YXIgd2FybmVkRm9yTmFOVmFsdWUgPSBm
YWxzZTtcblxuICB2YXIgd2Fybkh5cGhlbmF0ZWRTdHlsZU5hbWUgPSBmdW5jdGlvbiAobmFtZSwg
b3duZXIpIHtcbiAgICBpZiAod2FybmVkU3R5bGVOYW1lcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSAm
JiB3YXJuZWRTdHlsZU5hbWVzW25hbWVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAg
d2FybmVkU3R5bGVOYW1lc1tuYW1lXSA9IHRydWU7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYg
IT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdVbnN1cHBvcnRlZCBzdHlsZSBwcm9w
ZXJ0eSAlcy4gRGlkIHlvdSBtZWFuICVzPyVzJywgbmFtZSwgY2FtZWxpemVTdHlsZU5hbWUobmFt
ZSksIGNoZWNrUmVuZGVyTWVzc2FnZShvd25lcikpIDogdm9pZCAwO1xuICB9O1xuXG4gIHZhciB3
YXJuQmFkVmVuZG9yZWRTdHlsZU5hbWUgPSBmdW5jdGlvbiAobmFtZSwgb3duZXIpIHtcbiAgICBp
ZiAod2FybmVkU3R5bGVOYW1lcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiB3YXJuZWRTdHlsZU5h
bWVzW25hbWVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2FybmVkU3R5bGVOYW1l
c1tuYW1lXSA9IHRydWU7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9u
JyA/IHdhcm5pbmcoZmFsc2UsICdVbnN1cHBvcnRlZCB2ZW5kb3ItcHJlZml4ZWQgc3R5bGUgcHJv
cGVydHkgJXMuIERpZCB5b3UgbWVhbiAlcz8lcycsIG5hbWUsIG5hbWUuY2hhckF0KDApLnRvVXBw
ZXJDYXNlKCkgKyBuYW1lLnNsaWNlKDEpLCBjaGVja1JlbmRlck1lc3NhZ2Uob3duZXIpKSA6IHZv
aWQgMDtcbiAgfTtcblxuICB2YXIgd2FyblN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uID0gZnVuY3Rp
b24gKG5hbWUsIHZhbHVlLCBvd25lcikge1xuICAgIGlmICh3YXJuZWRTdHlsZVZhbHVlcy5oYXNP
d25Qcm9wZXJ0eSh2YWx1ZSkgJiYgd2FybmVkU3R5bGVWYWx1ZXNbdmFsdWVdKSB7XG4gICAgICBy
ZXR1cm47XG4gICAgfVxuXG4gICAgd2FybmVkU3R5bGVWYWx1ZXNbdmFsdWVdID0gdHJ1ZTtcbiAg
ICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwg
XCJTdHlsZSBwcm9wZXJ0eSB2YWx1ZXMgc2hvdWxkbid0IGNvbnRhaW4gYSBzZW1pY29sb24uJXMg
XCIgKyAnVHJ5IFwiJXM6ICVzXCIgaW5zdGVhZC4nLCBjaGVja1JlbmRlck1lc3NhZ2Uob3duZXIp
LCBuYW1lLCB2YWx1ZS5yZXBsYWNlKGJhZFN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uUGF0dGVybiwg
JycpKSA6IHZvaWQgMDtcbiAgfTtcblxuICB2YXIgd2FyblN0eWxlVmFsdWVJc05hTiA9IGZ1bmN0
aW9uIChuYW1lLCB2YWx1ZSwgb3duZXIpIHtcbiAgICBpZiAod2FybmVkRm9yTmFOVmFsdWUpIHtc
biAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRGb3JOYU5WYWx1ZSA9IHRydWU7XG4g
ICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2Us
ICdgTmFOYCBpcyBhbiBpbnZhbGlkIHZhbHVlIGZvciB0aGUgYCVzYCBjc3Mgc3R5bGUgcHJvcGVy
dHkuJXMnLCBuYW1lLCBjaGVja1JlbmRlck1lc3NhZ2Uob3duZXIpKSA6IHZvaWQgMDtcbiAgfTtc
blxuICB2YXIgY2hlY2tSZW5kZXJNZXNzYWdlID0gZnVuY3Rpb24gKG93bmVyKSB7XG4gICAgaWYg
KG93bmVyKSB7XG4gICAgICB2YXIgbmFtZSA9IG93bmVyLmdldE5hbWUoKTtcbiAgICAgIGlmIChu
YW1lKSB7XG4gICAgICAgIHJldHVybiAnIENoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsg
bmFtZSArICdgLic7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfTtcblxuICAv
KipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAg
KiBAcGFyYW0ge1JlYWN0RE9NQ29tcG9uZW50fSBjb21wb25lbnRcbiAgICovXG4gIHZhciB3YXJu
VmFsaWRTdHlsZSA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSwgY29tcG9uZW50KSB7XG4gICAgdmFy
IG93bmVyO1xuICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgIG93bmVyID0gY29tcG9uZW50Ll9j
dXJyZW50RWxlbWVudC5fb3duZXI7XG4gICAgfVxuICAgIGlmIChuYW1lLmluZGV4T2YoJy0nKSA+
IC0xKSB7XG4gICAgICB3YXJuSHlwaGVuYXRlZFN0eWxlTmFtZShuYW1lLCBvd25lcik7XG4gICAg
fSBlbHNlIGlmIChiYWRWZW5kb3JlZFN0eWxlTmFtZVBhdHRlcm4udGVzdChuYW1lKSkge1xuICAg
ICAgd2FybkJhZFZlbmRvcmVkU3R5bGVOYW1lKG5hbWUsIG93bmVyKTtcbiAgICB9IGVsc2UgaWYg
KGJhZFN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uUGF0dGVybi50ZXN0KHZhbHVlKSkge1xuICAgICAg
d2FyblN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uKG5hbWUsIHZhbHVlLCBvd25lcik7XG4gICAgfVxu
XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgaXNOYU4odmFsdWUpKSB7XG4g
ICAgICB3YXJuU3R5bGVWYWx1ZUlzTmFOKG5hbWUsIHZhbHVlLCBvd25lcik7XG4gICAgfVxuICB9
O1xufVxuXG4vKipcbiAqIE9wZXJhdGlvbnMgZm9yIGRlYWxpbmcgd2l0aCBDU1MgcHJvcGVydGll
cy5cbiAqL1xudmFyIENTU1Byb3BlcnR5T3BlcmF0aW9ucyA9IHtcbiAgLyoqXG4gICAqIFNlcmlh
bGl6ZXMgYSBtYXBwaW5nIG9mIHN0eWxlIHByb3BlcnRpZXMgZm9yIHVzZSBhcyBpbmxpbmUgc3R5
bGVzOlxuICAgKlxuICAgKiAgID4gY3JlYXRlTWFya3VwRm9yU3R5bGVzKHt3aWR0aDogJzIwMHB4
JywgaGVpZ2h0OiAwfSlcbiAgICogICBcIndpZHRoOjIwMHB4O2hlaWdodDowO1wiXG4gICAqXG4g
ICAqIFVuZGVmaW5lZCB2YWx1ZXMgYXJlIGlnbm9yZWQgc28gdGhhdCBkZWNsYXJhdGl2ZSBwcm9n
cmFtbWluZyBpcyBlYXNpZXIuXG4gICAqIFRoZSByZXN1bHQgc2hvdWxkIGJlIEhUTUwtZXNjYXBl
ZCBiZWZvcmUgaW5zZXJ0aW9uIGludG8gdGhlIERPTS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmpl
Y3R9IHN0eWxlc1xuICAgKiBAcGFyYW0ge1JlYWN0RE9NQ29tcG9uZW50fSBjb21wb25lbnRcbiAg
ICogQHJldHVybiB7P3N0cmluZ31cbiAgICovXG4gIGNyZWF0ZU1hcmt1cEZvclN0eWxlczogZnVu
Y3Rpb24gKHN0eWxlcywgY29tcG9uZW50KSB7XG4gICAgdmFyIHNlcmlhbGl6ZWQgPSAnJztcbiAg
ICBmb3IgKHZhciBzdHlsZU5hbWUgaW4gc3R5bGVzKSB7XG4gICAgICBpZiAoIXN0eWxlcy5oYXNP
d25Qcm9wZXJ0eShzdHlsZU5hbWUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAg
ICAgdmFyIGlzQ3VzdG9tUHJvcGVydHkgPSBzdHlsZU5hbWUuaW5kZXhPZignLS0nKSA9PT0gMDtc
biAgICAgIHZhciBzdHlsZVZhbHVlID0gc3R5bGVzW3N0eWxlTmFtZV07XG4gICAgICBpZiAoZmFs
c2UpIHtcbiAgICAgICAgaWYgKCFpc0N1c3RvbVByb3BlcnR5KSB7XG4gICAgICAgICAgd2FyblZh
bGlkU3R5bGUoc3R5bGVOYW1lLCBzdHlsZVZhbHVlLCBjb21wb25lbnQpO1xuICAgICAgICB9XG4g
ICAgICB9XG4gICAgICBpZiAoc3R5bGVWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgIHNlcmlhbGl6
ZWQgKz0gcHJvY2Vzc1N0eWxlTmFtZShzdHlsZU5hbWUpICsgJzonO1xuICAgICAgICBzZXJpYWxp
emVkICs9IGRhbmdlcm91c1N0eWxlVmFsdWUoc3R5bGVOYW1lLCBzdHlsZVZhbHVlLCBjb21wb25l
bnQsIGlzQ3VzdG9tUHJvcGVydHkpICsgJzsnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4g
c2VyaWFsaXplZCB8fCBudWxsO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB2YWx1ZSBm
b3IgbXVsdGlwbGUgc3R5bGVzIG9uIGEgbm9kZS4gIElmIGEgdmFsdWUgaXMgc3BlY2lmaWVkIGFz
XG4gICAqICcnIChlbXB0eSBzdHJpbmcpLCB0aGUgY29ycmVzcG9uZGluZyBzdHlsZSBwcm9wZXJ0
eSB3aWxsIGJlIHVuc2V0LlxuICAgKlxuICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAg
ICogQHBhcmFtIHtvYmplY3R9IHN0eWxlc1xuICAgKiBAcGFyYW0ge1JlYWN0RE9NQ29tcG9uZW50
fSBjb21wb25lbnRcbiAgICovXG4gIHNldFZhbHVlRm9yU3R5bGVzOiBmdW5jdGlvbiAobm9kZSwg
c3R5bGVzLCBjb21wb25lbnQpIHtcbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgIFJlYWN0SW5zdHJ1
bWVudGF0aW9uLmRlYnVnVG9vbC5vbkhvc3RPcGVyYXRpb24oe1xuICAgICAgICBpbnN0YW5jZUlE
OiBjb21wb25lbnQuX2RlYnVnSUQsXG4gICAgICAgIHR5cGU6ICd1cGRhdGUgc3R5bGVzJyxcbiAg
ICAgICAgcGF5bG9hZDogc3R5bGVzXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgc3R5bGUg
PSBub2RlLnN0eWxlO1xuICAgIGZvciAodmFyIHN0eWxlTmFtZSBpbiBzdHlsZXMpIHtcbiAgICAg
IGlmICghc3R5bGVzLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpIHtcbiAgICAgICAgY29udGlu
dWU7XG4gICAgICB9XG4gICAgICB2YXIgaXNDdXN0b21Qcm9wZXJ0eSA9IHN0eWxlTmFtZS5pbmRl
eE9mKCctLScpID09PSAwO1xuICAgICAgaWYgKGZhbHNlKSB7XG4gICAgICAgIGlmICghaXNDdXN0
b21Qcm9wZXJ0eSkge1xuICAgICAgICAgIHdhcm5WYWxpZFN0eWxlKHN0eWxlTmFtZSwgc3R5bGVz
W3N0eWxlTmFtZV0sIGNvbXBvbmVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBz
dHlsZVZhbHVlID0gZGFuZ2Vyb3VzU3R5bGVWYWx1ZShzdHlsZU5hbWUsIHN0eWxlc1tzdHlsZU5h
bWVdLCBjb21wb25lbnQsIGlzQ3VzdG9tUHJvcGVydHkpO1xuICAgICAgaWYgKHN0eWxlTmFtZSA9
PT0gJ2Zsb2F0JyB8fCBzdHlsZU5hbWUgPT09ICdjc3NGbG9hdCcpIHtcbiAgICAgICAgc3R5bGVO
YW1lID0gc3R5bGVGbG9hdEFjY2Vzc29yO1xuICAgICAgfVxuICAgICAgaWYgKGlzQ3VzdG9tUHJv
cGVydHkpIHtcbiAgICAgICAgc3R5bGUuc2V0UHJvcGVydHkoc3R5bGVOYW1lLCBzdHlsZVZhbHVl
KTtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGVWYWx1ZSkge1xuICAgICAgICBzdHlsZVtzdHlsZU5h
bWVdID0gc3R5bGVWYWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBleHBhbnNpb24g
PSBoYXNTaG9ydGhhbmRQcm9wZXJ0eUJ1ZyAmJiBDU1NQcm9wZXJ0eS5zaG9ydGhhbmRQcm9wZXJ0
eUV4cGFuc2lvbnNbc3R5bGVOYW1lXTtcbiAgICAgICAgaWYgKGV4cGFuc2lvbikge1xuICAgICAg
ICAgIC8vIFNob3J0aGFuZCBwcm9wZXJ0eSB0aGF0IElFOCB3b24ndCBsaWtlIHVuc2V0dGluZywg
c28gdW5zZXQgZWFjaFxuICAgICAgICAgIC8vIGNvbXBvbmVudCB0byBwbGFjYXRlIGl0XG4gICAg
ICAgICAgZm9yICh2YXIgaW5kaXZpZHVhbFN0eWxlTmFtZSBpbiBleHBhbnNpb24pIHtcbiAgICAg
ICAgICAgIHN0eWxlW2luZGl2aWR1YWxTdHlsZU5hbWVdID0gJyc7XG4gICAgICAgICAgfVxuICAg
ICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0eWxlW3N0eWxlTmFtZV0gPSAnJztcbiAgICAgICAg
fVxuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDU1NQcm9wZXJ0
eU9wZXJhdGlvbnM7XG5cbi8qKiovIH0pLFxuLyogMTQxICovXG4vKioqLyAoZnVuY3Rpb24obW9k
dWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xu
LyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1
bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwg
Z3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZp
bGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxuXG5c
bnZhciBjYW1lbGl6ZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTQyKTtcblxudmFyIG1zUGF0dGVy
biA9IC9eLW1zLS87XG5cbi8qKlxuICogQ2FtZWxjYXNlcyBhIGh5cGhlbmF0ZWQgQ1NTIHByb3Bl
cnR5IG5hbWUsIGZvciBleGFtcGxlOlxuICpcbiAqICAgPiBjYW1lbGl6ZVN0eWxlTmFtZSgnYmFj
a2dyb3VuZC1jb2xvcicpXG4gKiAgIDwgXCJiYWNrZ3JvdW5kQ29sb3JcIlxuICogICA+IGNhbWVs
aXplU3R5bGVOYW1lKCctbW96LXRyYW5zaXRpb24nKVxuICogICA8IFwiTW96VHJhbnNpdGlvblwi
XG4gKiAgID4gY2FtZWxpemVTdHlsZU5hbWUoJy1tcy10cmFuc2l0aW9uJylcbiAqICAgPCBcIm1z
VHJhbnNpdGlvblwiXG4gKlxuICogQXMgQW5kaSBTbWl0aCBzdWdnZXN0c1xuICogKGh0dHA6Ly93
d3cuYW5kaXNtaXRoLmNvbS9ibG9nLzIwMTIvMDIvbW9kZXJuaXpyLXByZWZpeGVkLyksIGFuIGAt
bXNgIHByZWZpeFxuICogaXMgY29udmVydGVkIHRvIGxvd2VyY2FzZSBgbXNgLlxuICpcbiAqIEBw
YXJhbSB7c3RyaW5nfSBzdHJpbmdcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24g
Y2FtZWxpemVTdHlsZU5hbWUoc3RyaW5nKSB7XG4gIHJldHVybiBjYW1lbGl6ZShzdHJpbmcucmVw
bGFjZShtc1BhdHRlcm4sICdtcy0nKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FtZWxpemVT
dHlsZU5hbWU7XG5cbi8qKiovIH0pLFxuLyogMTQyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxl
LCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5c
bi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBB
bGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQg
dW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxl
IGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFs
IGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBm
aWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAdHlwZWNoZWNrc1xuICovXG5cbnZh
ciBfaHlwaGVuUGF0dGVybiA9IC8tKC4pL2c7XG5cbi8qKlxuICogQ2FtZWxjYXNlcyBhIGh5cGhl
bmF0ZWQgc3RyaW5nLCBmb3IgZXhhbXBsZTpcbiAqXG4gKiAgID4gY2FtZWxpemUoJ2JhY2tncm91
bmQtY29sb3InKVxuICogICA8IFwiYmFja2dyb3VuZENvbG9yXCJcbiAqXG4gKiBAcGFyYW0ge3N0
cmluZ30gc3RyaW5nXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGNhbWVsaXpl
KHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoX2h5cGhlblBhdHRlcm4sIGZ1bmN0
aW9uIChfLCBjaGFyYWN0ZXIpIHtcbiAgICByZXR1cm4gY2hhcmFjdGVyLnRvVXBwZXJDYXNlKCk7
XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNhbWVsaXplO1xuXG4vKioqLyB9KSxcbi8q
IDE0MyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVp
cmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2Vu
dCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBz
b3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQg
aW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291
cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJl
IGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAq
L1xuXG5cblxudmFyIENTU1Byb3BlcnR5ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2OSk7XG52YXIg
d2FybmluZyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG5cbnZhciBpc1VuaXRsZXNzTnVtYmVy
ID0gQ1NTUHJvcGVydHkuaXNVbml0bGVzc051bWJlcjtcbnZhciBzdHlsZVdhcm5pbmdzID0ge307
XG5cbi8qKlxuICogQ29udmVydCBhIHZhbHVlIGludG8gdGhlIHByb3BlciBjc3Mgd3JpdGFibGUg
dmFsdWUuIFRoZSBzdHlsZSBuYW1lIGBuYW1lYFxuICogc2hvdWxkIGJlIGxvZ2ljYWwgKG5vIGh5
cGhlbnMpLCBhcyBzcGVjaWZpZWRcbiAqIGluIGBDU1NQcm9wZXJ0eS5pc1VuaXRsZXNzTnVtYmVy
YC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBDU1MgcHJvcGVydHkgbmFtZSBzdWNoIGFz
IGB0b3BNYXJnaW5gLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBDU1MgcHJvcGVydHkgdmFsdWUgc3Vj
aCBhcyBgMTBweGAuXG4gKiBAcGFyYW0ge1JlYWN0RE9NQ29tcG9uZW50fSBjb21wb25lbnRcbiAq
IEByZXR1cm4ge3N0cmluZ30gTm9ybWFsaXplZCBzdHlsZSB2YWx1ZSB3aXRoIGRpbWVuc2lvbnMg
YXBwbGllZC5cbiAqL1xuZnVuY3Rpb24gZGFuZ2Vyb3VzU3R5bGVWYWx1ZShuYW1lLCB2YWx1ZSwg
Y29tcG9uZW50LCBpc0N1c3RvbVByb3BlcnR5KSB7XG4gIC8vIE5vdGUgdGhhdCB3ZSd2ZSByZW1v
dmVkIGVzY2FwZVRleHRGb3JCcm93c2VyKCkgY2FsbHMgaGVyZSBzaW5jZSB0aGVcbiAgLy8gd2hv
bGUgc3RyaW5nIHdpbGwgYmUgZXNjYXBlZCB3aGVuIHRoZSBhdHRyaWJ1dGUgaXMgaW5qZWN0ZWQg
aW50b1xuICAvLyB0aGUgbWFya3VwLiBJZiB5b3UgcHJvdmlkZSB1bnNhZmUgdXNlciBkYXRhIGhl
cmUgdGhleSBjYW4gaW5qZWN0XG4gIC8vIGFyYml0cmFyeSBDU1Mgd2hpY2ggbWF5IGJlIHByb2Js
ZW1hdGljIChJIGNvdWxkbid0IHJlcHJvIHRoaXMpOlxuICAvLyBodHRwczovL3d3dy5vd2FzcC5v
cmcvaW5kZXgucGhwL1hTU19GaWx0ZXJfRXZhc2lvbl9DaGVhdF9TaGVldFxuICAvLyBodHRwOi8v
d3d3LnRoZXNwYW5uZXIuY28udWsvMjAwNy8xMS8yNi91bHRpbWF0ZS14c3MtY3NzLWluamVjdGlv
bi9cbiAgLy8gVGhpcyBpcyBub3QgYW4gWFNTIGhvbGUgYnV0IGluc3RlYWQgYSBwb3RlbnRpYWwg
Q1NTIGluamVjdGlvbiBpc3N1ZVxuICAvLyB3aGljaCBoYXMgbGVhZCB0byBhIGdyZWF0ZXIgZGlz
Y3Vzc2lvbiBhYm91dCBob3cgd2UncmUgZ29pbmcgdG9cbiAgLy8gdHJ1c3QgVVJMcyBtb3Zpbmcg
Zm9yd2FyZC4gU2VlICMyMTE1OTAxXG5cbiAgdmFyIGlzRW1wdHkgPSB2YWx1ZSA9PSBudWxsIHx8
IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nIHx8IHZhbHVlID09PSAnJztcbiAgaWYgKGlzRW1w
dHkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICB2YXIgaXNOb25OdW1lcmljID0gaXNOYU4o
dmFsdWUpO1xuICBpZiAoaXNDdXN0b21Qcm9wZXJ0eSB8fCBpc05vbk51bWVyaWMgfHwgdmFsdWUg
PT09IDAgfHwgaXNVbml0bGVzc051bWJlci5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiBpc1VuaXRs
ZXNzTnVtYmVyW25hbWVdKSB7XG4gICAgcmV0dXJuICcnICsgdmFsdWU7IC8vIGNhc3QgdG8gc3Ry
aW5nXG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIGlmIChm
YWxzZSkge1xuICAgICAgLy8gQWxsb3cgJzAnIHRvIHBhc3MgdGhyb3VnaCB3aXRob3V0IHdhcm5p
bmcuIDAgaXMgYWxyZWFkeSBzcGVjaWFsIGFuZFxuICAgICAgLy8gZG9lc24ndCByZXF1aXJlIHVu
aXRzLCBzbyB3ZSBkb24ndCBuZWVkIHRvIHdhcm4gYWJvdXQgaXQuXG4gICAgICBpZiAoY29tcG9u
ZW50ICYmIHZhbHVlICE9PSAnMCcpIHtcbiAgICAgICAgdmFyIG93bmVyID0gY29tcG9uZW50Ll9j
dXJyZW50RWxlbWVudC5fb3duZXI7XG4gICAgICAgIHZhciBvd25lck5hbWUgPSBvd25lciA/IG93
bmVyLmdldE5hbWUoKSA6IG51bGw7XG4gICAgICAgIGlmIChvd25lck5hbWUgJiYgIXN0eWxlV2Fy
bmluZ3Nbb3duZXJOYW1lXSkge1xuICAgICAgICAgIHN0eWxlV2FybmluZ3Nbb3duZXJOYW1lXSA9
IHt9O1xuICAgICAgICB9XG4gICAgICAgIHZhciB3YXJuZWQgPSBmYWxzZTtcbiAgICAgICAgaWYg
KG93bmVyTmFtZSkge1xuICAgICAgICAgIHZhciB3YXJuaW5ncyA9IHN0eWxlV2FybmluZ3Nbb3du
ZXJOYW1lXTtcbiAgICAgICAgICB3YXJuZWQgPSB3YXJuaW5nc1tuYW1lXTtcbiAgICAgICAgICBp
ZiAoIXdhcm5lZCkge1xuICAgICAgICAgICAgd2FybmluZ3NbbmFtZV0gPSB0cnVlO1xuICAgICAg
ICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXdhcm5lZCkge1xuICAgICAgICAgIHByb2Nl
c3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnYSBgJXNg
IHRhZyAob3duZXI6IGAlc2ApIHdhcyBwYXNzZWQgYSBudW1lcmljIHN0cmluZyB2YWx1ZSAnICsg
J2ZvciBDU1MgcHJvcGVydHkgYCVzYCAodmFsdWU6IGAlc2ApIHdoaWNoIHdpbGwgYmUgdHJlYXRl
ZCAnICsgJ2FzIGEgdW5pdGxlc3MgbnVtYmVyIGluIGEgZnV0dXJlIHZlcnNpb24gb2YgUmVhY3Qu
JywgY29tcG9uZW50Ll9jdXJyZW50RWxlbWVudC50eXBlLCBvd25lck5hbWUgfHwgJ3Vua25vd24n
LCBuYW1lLCB2YWx1ZSkgOiB2b2lkIDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAg
dmFsdWUgPSB2YWx1ZS50cmltKCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlICsgJ3B4Jztcbn1cblxu
bW9kdWxlLmV4cG9ydHMgPSBkYW5nZXJvdXNTdHlsZVZhbHVlO1xuXG4vKioqLyB9KSxcbi8qIDE0
NCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVf
Xykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNl
bnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMg
c291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5k
IGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNv
dXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBi
ZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4g
KiBAdHlwZWNoZWNrc1xuICovXG5cblxuXG52YXIgaHlwaGVuYXRlID0gX193ZWJwYWNrX3JlcXVp
cmVfXygxNDUpO1xuXG52YXIgbXNQYXR0ZXJuID0gL15tcy0vO1xuXG4vKipcbiAqIEh5cGhlbmF0
ZXMgYSBjYW1lbGNhc2VkIENTUyBwcm9wZXJ0eSBuYW1lLCBmb3IgZXhhbXBsZTpcbiAqXG4gKiAg
ID4gaHlwaGVuYXRlU3R5bGVOYW1lKCdiYWNrZ3JvdW5kQ29sb3InKVxuICogICA8IFwiYmFja2dy
b3VuZC1jb2xvclwiXG4gKiAgID4gaHlwaGVuYXRlU3R5bGVOYW1lKCdNb3pUcmFuc2l0aW9uJylc
biAqICAgPCBcIi1tb3otdHJhbnNpdGlvblwiXG4gKiAgID4gaHlwaGVuYXRlU3R5bGVOYW1lKCdt
c1RyYW5zaXRpb24nKVxuICogICA8IFwiLW1zLXRyYW5zaXRpb25cIlxuICpcbiAqIEFzIE1vZGVy
bml6ciBzdWdnZXN0cyAoaHR0cDovL21vZGVybml6ci5jb20vZG9jcy8jcHJlZml4ZWQpLCBhbiBg
bXNgIHByZWZpeFxuICogaXMgY29udmVydGVkIHRvIGAtbXMtYC5cbiAqXG4gKiBAcGFyYW0ge3N0
cmluZ30gc3RyaW5nXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGh5cGhlbmF0
ZVN0eWxlTmFtZShzdHJpbmcpIHtcbiAgcmV0dXJuIGh5cGhlbmF0ZShzdHJpbmcpLnJlcGxhY2Uo
bXNQYXR0ZXJuLCAnLW1zLScpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGh5cGhlbmF0ZVN0eWxl
TmFtZTtcblxuLyoqKi8gfSksXG4vKiAxNDUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4
cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuLyoq
XG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRl
ciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4g
dGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3Jh
bnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUg
aW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxudmFyIF91
cHBlcmNhc2VQYXR0ZXJuID0gLyhbQS1aXSkvZztcblxuLyoqXG4gKiBIeXBoZW5hdGVzIGEgY2Ft
ZWxjYXNlZCBzdHJpbmcsIGZvciBleGFtcGxlOlxuICpcbiAqICAgPiBoeXBoZW5hdGUoJ2JhY2tn
cm91bmRDb2xvcicpXG4gKiAgIDwgXCJiYWNrZ3JvdW5kLWNvbG9yXCJcbiAqXG4gKiBGb3IgQ1NT
IHN0eWxlIG5hbWVzLCB1c2UgYGh5cGhlbmF0ZVN0eWxlTmFtZWAgaW5zdGVhZCB3aGljaCB3b3Jr
cyBwcm9wZXJseVxuICogd2l0aCBhbGwgdmVuZG9yIHByZWZpeGVzLCBpbmNsdWRpbmcgYG1zYC5c
biAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9c
bmZ1bmN0aW9uIGh5cGhlbmF0ZShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKF91
cHBlcmNhc2VQYXR0ZXJuLCAnLSQxJykudG9Mb3dlckNhc2UoKTtcbn1cblxubW9kdWxlLmV4cG9y
dHMgPSBoeXBoZW5hdGU7XG5cbi8qKiovIH0pLFxuLyogMTQ2ICovXG4vKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwi
O1xuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNl
ZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZp
bGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9u
YWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRT
IGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIFxuICogQHR5cGVjaGVja3Mgc3Rh
dGljLW9ubHlcbiAqL1xuXG5cblxuLyoqXG4gKiBNZW1vaXplcyB0aGUgcmV0dXJuIHZhbHVlIG9m
IGEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIG9uZSBzdHJpbmcgYXJndW1lbnQuXG4gKi9cblxuZnVu
Y3Rpb24gbWVtb2l6ZVN0cmluZ09ubHkoY2FsbGJhY2spIHtcbiAgdmFyIGNhY2hlID0ge307XG4g
IHJldHVybiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgaWYgKCFjYWNoZS5oYXNPd25Qcm9wZXJ0
eShzdHJpbmcpKSB7XG4gICAgICBjYWNoZVtzdHJpbmddID0gY2FsbGJhY2suY2FsbCh0aGlzLCBz
dHJpbmcpO1xuICAgIH1cbiAgICByZXR1cm4gY2FjaGVbc3RyaW5nXTtcbiAgfTtcbn1cblxubW9k
dWxlLmV4cG9ydHMgPSBtZW1vaXplU3RyaW5nT25seTtcblxuLyoqKi8gfSksXG4vKiAxNDcgKi9c
bi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtc
blxuXCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vi
b29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNv
ZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxu
ICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVl
LiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBp
biB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuXG5c
bnZhciBlc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3
KTtcblxuLyoqXG4gKiBFc2NhcGVzIGF0dHJpYnV0ZSB2YWx1ZSB0byBwcmV2ZW50IHNjcmlwdGlu
ZyBhdHRhY2tzLlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUgdG8gZXNjYXBlLlxuICog
QHJldHVybiB7c3RyaW5nfSBBbiBlc2NhcGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gcXVvdGVB
dHRyaWJ1dGVWYWx1ZUZvckJyb3dzZXIodmFsdWUpIHtcbiAgcmV0dXJuICdcIicgKyBlc2NhcGVU
ZXh0Q29udGVudEZvckJyb3dzZXIodmFsdWUpICsgJ1wiJztcbn1cblxubW9kdWxlLmV4cG9ydHMg
PSBxdW90ZUF0dHJpYnV0ZVZhbHVlRm9yQnJvd3NlcjtcblxuLyoqKi8gfSksXG4vKiAxNDggKi9c
bi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtc
blxuXCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vi
b29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNv
ZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxu
ICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVl
LiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBp
biB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuXG5c
bnZhciBFdmVudFBsdWdpbkh1YiA9IF9fd2VicGFja19yZXF1aXJlX18oMjApO1xuXG5mdW5jdGlv
biBydW5FdmVudFF1ZXVlSW5CYXRjaChldmVudHMpIHtcbiAgRXZlbnRQbHVnaW5IdWIuZW5xdWV1
ZUV2ZW50cyhldmVudHMpO1xuICBFdmVudFBsdWdpbkh1Yi5wcm9jZXNzRXZlbnRRdWV1ZShmYWxz
ZSk7XG59XG5cbnZhciBSZWFjdEV2ZW50RW1pdHRlck1peGluID0ge1xuICAvKipcbiAgICogU3Ry
ZWFtcyBhIGZpcmVkIHRvcC1sZXZlbCBldmVudCB0byBgRXZlbnRQbHVnaW5IdWJgIHdoZXJlIHBs
dWdpbnMgaGF2ZSB0aGVcbiAgICogb3Bwb3J0dW5pdHkgdG8gY3JlYXRlIGBSZWFjdEV2ZW50YHMg
dG8gYmUgZGlzcGF0Y2hlZC5cbiAgICovXG4gIGhhbmRsZVRvcExldmVsOiBmdW5jdGlvbiAodG9w
TGV2ZWxUeXBlLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtc
biAgICB2YXIgZXZlbnRzID0gRXZlbnRQbHVnaW5IdWIuZXh0cmFjdEV2ZW50cyh0b3BMZXZlbFR5
cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgcnVu
RXZlbnRRdWV1ZUluQmF0Y2goZXZlbnRzKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBS
ZWFjdEV2ZW50RW1pdHRlck1peGluO1xuXG4vKioqLyB9KSxcbi8qIDE0OSAqL1xuLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBz
dHJpY3RcIjtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5c
biAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNl
bnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNF
IGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0
aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRF
TlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG5cblxudmFyIEV4ZWN1
dGlvbkVudmlyb25tZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcblxuLyoqXG4gKiBHZW5l
cmF0ZSBhIG1hcHBpbmcgb2Ygc3RhbmRhcmQgdmVuZG9yIHByZWZpeGVzIHVzaW5nIHRoZSBkZWZp
bmVkIHN0eWxlIHByb3BlcnR5IGFuZCBldmVudCBuYW1lLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5n
fSBzdHlsZVByb3BcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcbiAqIEByZXR1cm5zIHtv
YmplY3R9XG4gKi9cbmZ1bmN0aW9uIG1ha2VQcmVmaXhNYXAoc3R5bGVQcm9wLCBldmVudE5hbWUp
IHtcbiAgdmFyIHByZWZpeGVzID0ge307XG5cbiAgcHJlZml4ZXNbc3R5bGVQcm9wLnRvTG93ZXJD
YXNlKCldID0gZXZlbnROYW1lLnRvTG93ZXJDYXNlKCk7XG4gIHByZWZpeGVzWydXZWJraXQnICsg
c3R5bGVQcm9wXSA9ICd3ZWJraXQnICsgZXZlbnROYW1lO1xuICBwcmVmaXhlc1snTW96JyArIHN0
eWxlUHJvcF0gPSAnbW96JyArIGV2ZW50TmFtZTtcbiAgcHJlZml4ZXNbJ21zJyArIHN0eWxlUHJv
cF0gPSAnTVMnICsgZXZlbnROYW1lO1xuICBwcmVmaXhlc1snTycgKyBzdHlsZVByb3BdID0gJ28n
ICsgZXZlbnROYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgcmV0dXJuIHByZWZpeGVzO1xufVxuXG4v
KipcbiAqIEEgbGlzdCBvZiBldmVudCBuYW1lcyB0byBhIGNvbmZpZ3VyYWJsZSBsaXN0IG9mIHZl
bmRvciBwcmVmaXhlcy5cbiAqL1xudmFyIHZlbmRvclByZWZpeGVzID0ge1xuICBhbmltYXRpb25l
bmQ6IG1ha2VQcmVmaXhNYXAoJ0FuaW1hdGlvbicsICdBbmltYXRpb25FbmQnKSxcbiAgYW5pbWF0
aW9uaXRlcmF0aW9uOiBtYWtlUHJlZml4TWFwKCdBbmltYXRpb24nLCAnQW5pbWF0aW9uSXRlcmF0
aW9uJyksXG4gIGFuaW1hdGlvbnN0YXJ0OiBtYWtlUHJlZml4TWFwKCdBbmltYXRpb24nLCAnQW5p
bWF0aW9uU3RhcnQnKSxcbiAgdHJhbnNpdGlvbmVuZDogbWFrZVByZWZpeE1hcCgnVHJhbnNpdGlv
bicsICdUcmFuc2l0aW9uRW5kJylcbn07XG5cbi8qKlxuICogRXZlbnQgbmFtZXMgdGhhdCBoYXZl
IGFscmVhZHkgYmVlbiBkZXRlY3RlZCBhbmQgcHJlZml4ZWQgKGlmIGFwcGxpY2FibGUpLlxuICov
XG52YXIgcHJlZml4ZWRFdmVudE5hbWVzID0ge307XG5cbi8qKlxuICogRWxlbWVudCB0byBjaGVj
ayBmb3IgcHJlZml4ZXMgb24uXG4gKi9cbnZhciBzdHlsZSA9IHt9O1xuXG4vKipcbiAqIEJvb3Rz
dHJhcCBpZiBhIERPTSBleGlzdHMuXG4gKi9cbmlmIChFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5V
c2VET00pIHtcbiAgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS5zdHlsZTtc
blxuICAvLyBPbiBzb21lIHBsYXRmb3JtcywgaW4gcGFydGljdWxhciBzb21lIHJlbGVhc2VzIG9m
IEFuZHJvaWQgNC54LFxuICAvLyB0aGUgdW4tcHJlZml4ZWQgXCJhbmltYXRpb25cIiBhbmQgXCJ0
cmFuc2l0aW9uXCIgcHJvcGVydGllcyBhcmUgZGVmaW5lZCBvbiB0aGVcbiAgLy8gc3R5bGUgb2Jq
ZWN0IGJ1dCB0aGUgZXZlbnRzIHRoYXQgZmlyZSB3aWxsIHN0aWxsIGJlIHByZWZpeGVkLCBzbyB3
ZSBuZWVkXG4gIC8vIHRvIGNoZWNrIGlmIHRoZSB1bi1wcmVmaXhlZCBldmVudHMgYXJlIHVzYWJs
ZSwgYW5kIGlmIG5vdCByZW1vdmUgdGhlbSBmcm9tIHRoZSBtYXAuXG4gIGlmICghKCdBbmltYXRp
b25FdmVudCcgaW4gd2luZG93KSkge1xuICAgIGRlbGV0ZSB2ZW5kb3JQcmVmaXhlcy5hbmltYXRp
b25lbmQuYW5pbWF0aW9uO1xuICAgIGRlbGV0ZSB2ZW5kb3JQcmVmaXhlcy5hbmltYXRpb25pdGVy
YXRpb24uYW5pbWF0aW9uO1xuICAgIGRlbGV0ZSB2ZW5kb3JQcmVmaXhlcy5hbmltYXRpb25zdGFy
dC5hbmltYXRpb247XG4gIH1cblxuICAvLyBTYW1lIGFzIGFib3ZlXG4gIGlmICghKCdUcmFuc2l0
aW9uRXZlbnQnIGluIHdpbmRvdykpIHtcbiAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMudHJhbnNp
dGlvbmVuZC50cmFuc2l0aW9uO1xuICB9XG59XG5cbi8qKlxuICogQXR0ZW1wdHMgdG8gZGV0ZXJt
aW5lIHRoZSBjb3JyZWN0IHZlbmRvciBwcmVmaXhlZCBldmVudCBuYW1lLlxuICpcbiAqIEBwYXJh
bSB7c3RyaW5nfSBldmVudE5hbWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9u
IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKGV2ZW50TmFtZSkge1xuICBpZiAocHJlZml4ZWRF
dmVudE5hbWVzW2V2ZW50TmFtZV0pIHtcbiAgICByZXR1cm4gcHJlZml4ZWRFdmVudE5hbWVzW2V2
ZW50TmFtZV07XG4gIH0gZWxzZSBpZiAoIXZlbmRvclByZWZpeGVzW2V2ZW50TmFtZV0pIHtcbiAg
ICByZXR1cm4gZXZlbnROYW1lO1xuICB9XG5cbiAgdmFyIHByZWZpeE1hcCA9IHZlbmRvclByZWZp
eGVzW2V2ZW50TmFtZV07XG5cbiAgZm9yICh2YXIgc3R5bGVQcm9wIGluIHByZWZpeE1hcCkge1xu
ICAgIGlmIChwcmVmaXhNYXAuaGFzT3duUHJvcGVydHkoc3R5bGVQcm9wKSAmJiBzdHlsZVByb3Ag
aW4gc3R5bGUpIHtcbiAgICAgIHJldHVybiBwcmVmaXhlZEV2ZW50TmFtZXNbZXZlbnROYW1lXSA9
IHByZWZpeE1hcFtzdHlsZVByb3BdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxu
bW9kdWxlLmV4cG9ydHMgPSBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZTtcblxuLyoqKi8gfSks
XG4vKiAxNTAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19y
ZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLXBy
ZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRo
aXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZv
dW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlz
IHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNh
biBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAq
XG4gKi9cblxuXG5cbnZhciBfcHJvZEludmFyaWFudCA9IF9fd2VicGFja19yZXF1aXJlX18oMiks
XG4gICAgX2Fzc2lnbiA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG5cbnZhciBET01Qcm9wZXJ0
eU9wZXJhdGlvbnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcwKTtcbnZhciBMaW5rZWRWYWx1ZVV0
aWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MCk7XG52YXIgUmVhY3RET01Db21wb25lbnRUcmVl
ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcbnZhciBSZWFjdFVwZGF0ZXMgPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKDgpO1xuXG52YXIgaW52YXJpYW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtc
bnZhciB3YXJuaW5nID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcblxudmFyIGRpZFdhcm5WYWx1
ZUxpbmsgPSBmYWxzZTtcbnZhciBkaWRXYXJuQ2hlY2tlZExpbmsgPSBmYWxzZTtcbnZhciBkaWRX
YXJuVmFsdWVEZWZhdWx0VmFsdWUgPSBmYWxzZTtcbnZhciBkaWRXYXJuQ2hlY2tlZERlZmF1bHRD
aGVja2VkID0gZmFsc2U7XG52YXIgZGlkV2FybkNvbnRyb2xsZWRUb1VuY29udHJvbGxlZCA9IGZh
bHNlO1xudmFyIGRpZFdhcm5VbmNvbnRyb2xsZWRUb0NvbnRyb2xsZWQgPSBmYWxzZTtcblxuZnVu
Y3Rpb24gZm9yY2VVcGRhdGVJZk1vdW50ZWQoKSB7XG4gIGlmICh0aGlzLl9yb290Tm9kZUlEKSB7
XG4gICAgLy8gRE9NIGNvbXBvbmVudCBpcyBzdGlsbCBtb3VudGVkOyB1cGRhdGVcbiAgICBSZWFj
dERPTUlucHV0LnVwZGF0ZVdyYXBwZXIodGhpcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDb250
cm9sbGVkKHByb3BzKSB7XG4gIHZhciB1c2VzQ2hlY2tlZCA9IHByb3BzLnR5cGUgPT09ICdjaGVj
a2JveCcgfHwgcHJvcHMudHlwZSA9PT0gJ3JhZGlvJztcbiAgcmV0dXJuIHVzZXNDaGVja2VkID8g
cHJvcHMuY2hlY2tlZCAhPSBudWxsIDogcHJvcHMudmFsdWUgIT0gbnVsbDtcbn1cblxuLyoqXG4g
KiBJbXBsZW1lbnRzIGFuIDxpbnB1dD4gaG9zdCBjb21wb25lbnQgdGhhdCBhbGxvd3Mgc2V0dGlu
ZyB0aGVzZSBvcHRpb25hbFxuICogcHJvcHM6IGBjaGVja2VkYCwgYHZhbHVlYCwgYGRlZmF1bHRD
aGVja2VkYCwgYW5kIGBkZWZhdWx0VmFsdWVgLlxuICpcbiAqIElmIGBjaGVja2VkYCBvciBgdmFs
dWVgIGFyZSBub3Qgc3VwcGxpZWQgKG9yIG51bGwvdW5kZWZpbmVkKSwgdXNlciBhY3Rpb25zXG4g
KiB0aGF0IGFmZmVjdCB0aGUgY2hlY2tlZCBzdGF0ZSBvciB2YWx1ZSB3aWxsIHRyaWdnZXIgdXBk
YXRlcyB0byB0aGUgZWxlbWVudC5cbiAqXG4gKiBJZiB0aGV5IGFyZSBzdXBwbGllZCAoYW5kIG5v
dCBudWxsL3VuZGVmaW5lZCksIHRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGwgbm90XG4gKiB0cmln
Z2VyIHVwZGF0ZXMgdG8gdGhlIGVsZW1lbnQuIEluc3RlYWQsIHRoZSBwcm9wcyBtdXN0IGNoYW5n
ZSBpbiBvcmRlciBmb3JcbiAqIHRoZSByZW5kZXJlZCBlbGVtZW50IHRvIGJlIHVwZGF0ZWQuXG4g
KlxuICogVGhlIHJlbmRlcmVkIGVsZW1lbnQgd2lsbCBiZSBpbml0aWFsaXplZCBhcyB1bmNoZWNr
ZWQgKG9yIGBkZWZhdWx0Q2hlY2tlZGApXG4gKiB3aXRoIGFuIGVtcHR5IHZhbHVlIChvciBgZGVm
YXVsdFZhbHVlYCkuXG4gKlxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0
bWw1LTIwMTIxMDI1L3RoZS1pbnB1dC1lbGVtZW50Lmh0bWxcbiAqL1xudmFyIFJlYWN0RE9NSW5w
dXQgPSB7XG4gIGdldEhvc3RQcm9wczogZnVuY3Rpb24gKGluc3QsIHByb3BzKSB7XG4gICAgdmFy
IHZhbHVlID0gTGlua2VkVmFsdWVVdGlscy5nZXRWYWx1ZShwcm9wcyk7XG4gICAgdmFyIGNoZWNr
ZWQgPSBMaW5rZWRWYWx1ZVV0aWxzLmdldENoZWNrZWQocHJvcHMpO1xuXG4gICAgdmFyIGhvc3RQ
cm9wcyA9IF9hc3NpZ24oe1xuICAgICAgLy8gTWFrZSBzdXJlIHdlIHNldCAudHlwZSBiZWZvcmUg
YW55IG90aGVyIHByb3BlcnRpZXMgKHNldHRpbmcgLnZhbHVlXG4gICAgICAvLyBiZWZvcmUgLnR5
cGUgbWVhbnMgLnZhbHVlIGlzIGxvc3QgaW4gSUUxMSBhbmQgYmVsb3cpXG4gICAgICB0eXBlOiB1
bmRlZmluZWQsXG4gICAgICAvLyBNYWtlIHN1cmUgd2Ugc2V0IC5zdGVwIGJlZm9yZSAudmFsdWUg
KHNldHRpbmcgLnZhbHVlIGJlZm9yZSAuc3RlcFxuICAgICAgLy8gbWVhbnMgLnZhbHVlIGlzIHJv
dW5kZWQgb24gbW91bnQsIGJhc2VkIHVwb24gc3RlcCBwcmVjaXNpb24pXG4gICAgICBzdGVwOiB1
bmRlZmluZWQsXG4gICAgICAvLyBNYWtlIHN1cmUgd2Ugc2V0IC5taW4gJiAubWF4IGJlZm9yZSAu
dmFsdWUgKHRvIGVuc3VyZSBwcm9wZXIgb3JkZXJcbiAgICAgIC8vIGluIGNvcm5lciBjYXNlcyBz
dWNoIGFzIG1pbiBvciBtYXggZGVyaXZpbmcgZnJvbSB2YWx1ZSwgZS5nLiBJc3N1ZSAjNzE3MClc
biAgICAgIG1pbjogdW5kZWZpbmVkLFxuICAgICAgbWF4OiB1bmRlZmluZWRcbiAgICB9LCBwcm9w
cywge1xuICAgICAgZGVmYXVsdENoZWNrZWQ6IHVuZGVmaW5lZCxcbiAgICAgIGRlZmF1bHRWYWx1
ZTogdW5kZWZpbmVkLFxuICAgICAgdmFsdWU6IHZhbHVlICE9IG51bGwgPyB2YWx1ZSA6IGluc3Qu
X3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUsXG4gICAgICBjaGVja2VkOiBjaGVja2VkICE9IG51
bGwgPyBjaGVja2VkIDogaW5zdC5fd3JhcHBlclN0YXRlLmluaXRpYWxDaGVja2VkLFxuICAgICAg
b25DaGFuZ2U6IGluc3QuX3dyYXBwZXJTdGF0ZS5vbkNoYW5nZVxuICAgIH0pO1xuXG4gICAgcmV0
dXJuIGhvc3RQcm9wcztcbiAgfSxcblxuICBtb3VudFdyYXBwZXI6IGZ1bmN0aW9uIChpbnN0LCBw
cm9wcykge1xuICAgIGlmIChmYWxzZSkge1xuICAgICAgTGlua2VkVmFsdWVVdGlscy5jaGVja1By
b3BUeXBlcygnaW5wdXQnLCBwcm9wcywgaW5zdC5fY3VycmVudEVsZW1lbnQuX293bmVyKTtcblxu
ICAgICAgdmFyIG93bmVyID0gaW5zdC5fY3VycmVudEVsZW1lbnQuX293bmVyO1xuXG4gICAgICBp
ZiAocHJvcHMudmFsdWVMaW5rICE9PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5WYWx1ZUxpbmspIHtc
biAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmco
ZmFsc2UsICdgdmFsdWVMaW5rYCBwcm9wIG9uIGBpbnB1dGAgaXMgZGVwcmVjYXRlZDsgc2V0IGB2
YWx1ZWAgYW5kIGBvbkNoYW5nZWAgaW5zdGVhZC4nKSA6IHZvaWQgMDtcbiAgICAgICAgZGlkV2Fy
blZhbHVlTGluayA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMuY2hlY2tlZExpbmsg
IT09IHVuZGVmaW5lZCAmJiAhZGlkV2FybkNoZWNrZWRMaW5rKSB7XG4gICAgICAgIHByb2Nlc3Mu
ZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnYGNoZWNrZWRM
aW5rYCBwcm9wIG9uIGBpbnB1dGAgaXMgZGVwcmVjYXRlZDsgc2V0IGB2YWx1ZWAgYW5kIGBvbkNo
YW5nZWAgaW5zdGVhZC4nKSA6IHZvaWQgMDtcbiAgICAgICAgZGlkV2FybkNoZWNrZWRMaW5rID0g
dHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5jaGVja2VkICE9PSB1bmRlZmluZWQgJiYg
cHJvcHMuZGVmYXVsdENoZWNrZWQgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FybkNoZWNrZWREZWZh
dWx0Q2hlY2tlZCkge1xuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rp
b24nID8gd2FybmluZyhmYWxzZSwgJyVzIGNvbnRhaW5zIGFuIGlucHV0IG9mIHR5cGUgJXMgd2l0
aCBib3RoIGNoZWNrZWQgYW5kIGRlZmF1bHRDaGVja2VkIHByb3BzLiAnICsgJ0lucHV0IGVsZW1l
bnRzIG11c3QgYmUgZWl0aGVyIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkICcgKyAnKHNwZWNp
ZnkgZWl0aGVyIHRoZSBjaGVja2VkIHByb3AsIG9yIHRoZSBkZWZhdWx0Q2hlY2tlZCBwcm9wLCBi
dXQgbm90ICcgKyAnYm90aCkuIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1
bmNvbnRyb2xsZWQgaW5wdXQgJyArICdlbGVtZW50IGFuZCByZW1vdmUgb25lIG9mIHRoZXNlIHBy
b3BzLiBNb3JlIGluZm86ICcgKyAnaHR0cHM6Ly9mYi5tZS9yZWFjdC1jb250cm9sbGVkLWNvbXBv
bmVudHMnLCBvd25lciAmJiBvd25lci5nZXROYW1lKCkgfHwgJ0EgY29tcG9uZW50JywgcHJvcHMu
dHlwZSkgOiB2b2lkIDA7XG4gICAgICAgIGRpZFdhcm5DaGVja2VkRGVmYXVsdENoZWNrZWQgPSB0
cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgcHJv
cHMuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1
ZSkge1xuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2Fy
bmluZyhmYWxzZSwgJyVzIGNvbnRhaW5zIGFuIGlucHV0IG9mIHR5cGUgJXMgd2l0aCBib3RoIHZh
bHVlIGFuZCBkZWZhdWx0VmFsdWUgcHJvcHMuICcgKyAnSW5wdXQgZWxlbWVudHMgbXVzdCBiZSBl
aXRoZXIgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgJyArICcoc3BlY2lmeSBlaXRoZXIgdGhl
IHZhbHVlIHByb3AsIG9yIHRoZSBkZWZhdWx0VmFsdWUgcHJvcCwgYnV0IG5vdCAnICsgJ2JvdGgp
LiBEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIGlucHV0
ICcgKyAnZWxlbWVudCBhbmQgcmVtb3ZlIG9uZSBvZiB0aGVzZSBwcm9wcy4gTW9yZSBpbmZvOiAn
ICsgJ2h0dHBzOi8vZmIubWUvcmVhY3QtY29udHJvbGxlZC1jb21wb25lbnRzJywgb3duZXIgJiYg
b3duZXIuZ2V0TmFtZSgpIHx8ICdBIGNvbXBvbmVudCcsIHByb3BzLnR5cGUpIDogdm9pZCAwO1xu
ICAgICAgICBkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1c
blxuICAgIHZhciBkZWZhdWx0VmFsdWUgPSBwcm9wcy5kZWZhdWx0VmFsdWU7XG4gICAgaW5zdC5f
d3JhcHBlclN0YXRlID0ge1xuICAgICAgaW5pdGlhbENoZWNrZWQ6IHByb3BzLmNoZWNrZWQgIT0g
bnVsbCA/IHByb3BzLmNoZWNrZWQgOiBwcm9wcy5kZWZhdWx0Q2hlY2tlZCxcbiAgICAgIGluaXRp
YWxWYWx1ZTogcHJvcHMudmFsdWUgIT0gbnVsbCA/IHByb3BzLnZhbHVlIDogZGVmYXVsdFZhbHVl
LFxuICAgICAgbGlzdGVuZXJzOiBudWxsLFxuICAgICAgb25DaGFuZ2U6IF9oYW5kbGVDaGFuZ2Uu
YmluZChpbnN0KSxcbiAgICAgIGNvbnRyb2xsZWQ6IGlzQ29udHJvbGxlZChwcm9wcylcbiAgICB9
O1xuICB9LFxuXG4gIHVwZGF0ZVdyYXBwZXI6IGZ1bmN0aW9uIChpbnN0KSB7XG4gICAgdmFyIHBy
b3BzID0gaW5zdC5fY3VycmVudEVsZW1lbnQucHJvcHM7XG5cbiAgICBpZiAoZmFsc2UpIHtcbiAg
ICAgIHZhciBjb250cm9sbGVkID0gaXNDb250cm9sbGVkKHByb3BzKTtcbiAgICAgIHZhciBvd25l
ciA9IGluc3QuX2N1cnJlbnRFbGVtZW50Ll9vd25lcjtcblxuICAgICAgaWYgKCFpbnN0Ll93cmFw
cGVyU3RhdGUuY29udHJvbGxlZCAmJiBjb250cm9sbGVkICYmICFkaWRXYXJuVW5jb250cm9sbGVk
VG9Db250cm9sbGVkKSB7XG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVj
dGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnJXMgaXMgY2hhbmdpbmcgYW4gdW5jb250cm9sbGVkIGlu
cHV0IG9mIHR5cGUgJXMgdG8gYmUgY29udHJvbGxlZC4gJyArICdJbnB1dCBlbGVtZW50cyBzaG91
bGQgbm90IHN3aXRjaCBmcm9tIHVuY29udHJvbGxlZCB0byBjb250cm9sbGVkIChvciB2aWNlIHZl
cnNhKS4gJyArICdEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9s
bGVkIGlucHV0ICcgKyAnZWxlbWVudCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBjb21wb25lbnQu
IE1vcmUgaW5mbzogaHR0cHM6Ly9mYi5tZS9yZWFjdC1jb250cm9sbGVkLWNvbXBvbmVudHMnLCBv
d25lciAmJiBvd25lci5nZXROYW1lKCkgfHwgJ0EgY29tcG9uZW50JywgcHJvcHMudHlwZSkgOiB2
b2lkIDA7XG4gICAgICAgIGRpZFdhcm5VbmNvbnRyb2xsZWRUb0NvbnRyb2xsZWQgPSB0cnVlO1xu
ICAgICAgfVxuICAgICAgaWYgKGluc3QuX3dyYXBwZXJTdGF0ZS5jb250cm9sbGVkICYmICFjb250
cm9sbGVkICYmICFkaWRXYXJuQ29udHJvbGxlZFRvVW5jb250cm9sbGVkKSB7XG4gICAgICAgIHBy
b2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnJXMg
aXMgY2hhbmdpbmcgYSBjb250cm9sbGVkIGlucHV0IG9mIHR5cGUgJXMgdG8gYmUgdW5jb250cm9s
bGVkLiAnICsgJ0lucHV0IGVsZW1lbnRzIHNob3VsZCBub3Qgc3dpdGNoIGZyb20gY29udHJvbGxl
ZCB0byB1bmNvbnRyb2xsZWQgKG9yIHZpY2UgdmVyc2EpLiAnICsgJ0RlY2lkZSBiZXR3ZWVuIHVz
aW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgaW5wdXQgJyArICdlbGVtZW50IGZvciB0
aGUgbGlmZXRpbWUgb2YgdGhlIGNvbXBvbmVudC4gTW9yZSBpbmZvOiBodHRwczovL2ZiLm1lL3Jl
YWN0LWNvbnRyb2xsZWQtY29tcG9uZW50cycsIG93bmVyICYmIG93bmVyLmdldE5hbWUoKSB8fCAn
QSBjb21wb25lbnQnLCBwcm9wcy50eXBlKSA6IHZvaWQgMDtcbiAgICAgICAgZGlkV2FybkNvbnRy
b2xsZWRUb1VuY29udHJvbGxlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9E
TzogU2hvdWxkbid0IHRoaXMgYmUgZ2V0Q2hlY2tlZChwcm9wcyk/XG4gICAgdmFyIGNoZWNrZWQg
PSBwcm9wcy5jaGVja2VkO1xuICAgIGlmIChjaGVja2VkICE9IG51bGwpIHtcbiAgICAgIERPTVBy
b3BlcnR5T3BlcmF0aW9ucy5zZXRWYWx1ZUZvclByb3BlcnR5KFJlYWN0RE9NQ29tcG9uZW50VHJl
ZS5nZXROb2RlRnJvbUluc3RhbmNlKGluc3QpLCAnY2hlY2tlZCcsIGNoZWNrZWQgfHwgZmFsc2Up
O1xuICAgIH1cblxuICAgIHZhciBub2RlID0gUmVhY3RET01Db21wb25lbnRUcmVlLmdldE5vZGVG
cm9tSW5zdGFuY2UoaW5zdCk7XG4gICAgdmFyIHZhbHVlID0gTGlua2VkVmFsdWVVdGlscy5nZXRW
YWx1ZShwcm9wcyk7XG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgIGlmICh2YWx1ZSA9
PT0gMCAmJiBub2RlLnZhbHVlID09PSAnJykge1xuICAgICAgICBub2RlLnZhbHVlID0gJzAnO1xu
ICAgICAgICAvLyBOb3RlOiBJRTkgcmVwb3J0cyBhIG51bWJlciBpbnB1dHMgYXMgJ3RleHQnLCBz
byBjaGVjayBwcm9wcyBpbnN0ZWFkLlxuICAgICAgfSBlbHNlIGlmIChwcm9wcy50eXBlID09PSAn
bnVtYmVyJykge1xuICAgICAgICAvLyBTaW11bGF0ZSBgaW5wdXQudmFsdWVBc051bWJlcmAuIElF
OSBkb2VzIG5vdCBzdXBwb3J0IGl0XG4gICAgICAgIHZhciB2YWx1ZUFzTnVtYmVyID0gcGFyc2VG
bG9hdChub2RlLnZhbHVlLCAxMCkgfHwgMDtcblxuICAgICAgICBpZiAoXG4gICAgICAgIC8vIGVz
bGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICB2YWx1ZSAhPSB2YWx1ZUFzTnVtYmVyIHx8
XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICB2YWx1ZSA9PSB2
YWx1ZUFzTnVtYmVyICYmIG5vZGUudmFsdWUgIT0gdmFsdWUpIHtcbiAgICAgICAgICAvLyBDYXN0
IGB2YWx1ZWAgdG8gYSBzdHJpbmcgdG8gZW5zdXJlIHRoZSB2YWx1ZSBpcyBzZXQgY29ycmVjdGx5
LiBXaGlsZVxuICAgICAgICAgIC8vIGJyb3dzZXJzIHR5cGljYWxseSBkbyB0aGlzIGFzIG5lY2Vz
c2FyeSwganNkb20gZG9lc24ndC5cbiAgICAgICAgICBub2RlLnZhbHVlID0gJycgKyB2YWx1ZTtc
biAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChub2RlLnZhbHVlICE9PSAnJyArIHZhbHVlKSB7
XG4gICAgICAgIC8vIENhc3QgYHZhbHVlYCB0byBhIHN0cmluZyB0byBlbnN1cmUgdGhlIHZhbHVl
IGlzIHNldCBjb3JyZWN0bHkuIFdoaWxlXG4gICAgICAgIC8vIGJyb3dzZXJzIHR5cGljYWxseSBk
byB0aGlzIGFzIG5lY2Vzc2FyeSwganNkb20gZG9lc24ndC5cbiAgICAgICAgbm9kZS52YWx1ZSA9
ICcnICsgdmFsdWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwcm9wcy52YWx1
ZSA9PSBudWxsICYmIHByb3BzLmRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgIC8vIElu
IENocm9tZSwgYXNzaWduaW5nIGRlZmF1bHRWYWx1ZSB0byBjZXJ0YWluIGlucHV0IHR5cGVzIHRy
aWdnZXJzIGlucHV0IHZhbGlkYXRpb24uXG4gICAgICAgIC8vIEZvciBudW1iZXIgaW5wdXRzLCB0
aGUgZGlzcGxheSB2YWx1ZSBsb3NlcyB0cmFpbGluZyBkZWNpbWFsIHBvaW50cy4gRm9yIGVtYWls
IGlucHV0cyxcbiAgICAgICAgLy8gQ2hyb21lIHJhaXNlcyBcIlRoZSBzcGVjaWZpZWQgdmFsdWUg
PHg+IGlzIG5vdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3NcIi5cbiAgICAgICAgLy9cbiAgICAgICAg
Ly8gSGVyZSB3ZSBjaGVjayB0byBzZWUgaWYgdGhlIGRlZmF1bHRWYWx1ZSBoYXMgYWN0dWFsbHkg
Y2hhbmdlZCwgYXZvaWRpbmcgdGhlc2UgcHJvYmxlbXNcbiAgICAgICAgLy8gd2hlbiB0aGUgdXNl
ciBpcyBpbnB1dHRpbmcgdGV4dFxuICAgICAgICAvL1xuICAgICAgICAvLyBodHRwczovL2dpdGh1
Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzcyNTNcbiAgICAgICAgaWYgKG5vZGUuZGVmYXVs
dFZhbHVlICE9PSAnJyArIHByb3BzLmRlZmF1bHRWYWx1ZSkge1xuICAgICAgICAgIG5vZGUuZGVm
YXVsdFZhbHVlID0gJycgKyBwcm9wcy5kZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1c
biAgICAgIGlmIChwcm9wcy5jaGVja2VkID09IG51bGwgJiYgcHJvcHMuZGVmYXVsdENoZWNrZWQg
IT0gbnVsbCkge1xuICAgICAgICBub2RlLmRlZmF1bHRDaGVja2VkID0gISFwcm9wcy5kZWZhdWx0
Q2hlY2tlZDtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgcG9zdE1vdW50V3JhcHBlcjogZnVu
Y3Rpb24gKGluc3QpIHtcbiAgICB2YXIgcHJvcHMgPSBpbnN0Ll9jdXJyZW50RWxlbWVudC5wcm9w
cztcblxuICAgIC8vIFRoaXMgaXMgaW4gcG9zdE1vdW50IGJlY2F1c2Ugd2UgbmVlZCBhY2Nlc3Mg
dG8gdGhlIERPTSBub2RlLCB3aGljaCBpcyBub3RcbiAgICAvLyBhdmFpbGFibGUgdW50aWwgYWZ0
ZXIgdGhlIGNvbXBvbmVudCBoYXMgbW91bnRlZC5cbiAgICB2YXIgbm9kZSA9IFJlYWN0RE9NQ29t
cG9uZW50VHJlZS5nZXROb2RlRnJvbUluc3RhbmNlKGluc3QpO1xuXG4gICAgLy8gRGV0YWNoIHZh
bHVlIGZyb20gZGVmYXVsdFZhbHVlLiBXZSB3b24ndCBkbyBhbnl0aGluZyBpZiB3ZSdyZSB3b3Jr
aW5nIG9uXG4gICAgLy8gc3VibWl0IG9yIHJlc2V0IGlucHV0cyBhcyB0aG9zZSB2YWx1ZXMgJiBk
ZWZhdWx0VmFsdWVzIGFyZSBsaW5rZWQuIFRoZXlcbiAgICAvLyBhcmUgbm90IHJlc2V0YWJsZSBu
b2RlcyBzbyB0aGlzIG9wZXJhdGlvbiBkb2Vzbid0IG1hdHRlciBhbmQgYWN0dWFsbHlcbiAgICAv
LyByZW1vdmVzIGJyb3dzZXItZGVmYXVsdCB2YWx1ZXMgKGVnIFwiU3VibWl0IFF1ZXJ5XCIpIHdo
ZW4gbm8gdmFsdWUgaXNcbiAgICAvLyBwcm92aWRlZC5cblxuICAgIHN3aXRjaCAocHJvcHMudHlw
ZSkge1xuICAgICAgY2FzZSAnc3VibWl0JzpcbiAgICAgIGNhc2UgJ3Jlc2V0JzpcbiAgICAgICAg
YnJlYWs7XG4gICAgICBjYXNlICdjb2xvcic6XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgIGNh
c2UgJ2RhdGV0aW1lJzpcbiAgICAgIGNhc2UgJ2RhdGV0aW1lLWxvY2FsJzpcbiAgICAgIGNhc2Ug
J21vbnRoJzpcbiAgICAgIGNhc2UgJ3RpbWUnOlxuICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAg
IC8vIFRoaXMgZml4ZXMgdGhlIG5vLXNob3cgaXNzdWUgb24gaU9TIFNhZmFyaSBhbmQgQW5kcm9p
ZCBDaHJvbWU6XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9p
c3N1ZXMvNzIzM1xuICAgICAgICBub2RlLnZhbHVlID0gJyc7XG4gICAgICAgIG5vZGUudmFsdWUg
PSBub2RlLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAg
ICAgICBub2RlLnZhbHVlID0gbm9kZS52YWx1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4g
ICAgLy8gTm9ybWFsbHksIHdlJ2QganVzdCBkbyBgbm9kZS5jaGVja2VkID0gbm9kZS5jaGVja2Vk
YCB1cG9uIGluaXRpYWwgbW91bnQsIGxlc3MgdGhpcyBidWdcbiAgICAvLyB0aGlzIGlzIG5lZWRl
ZCB0byB3b3JrIGFyb3VuZCBhIGNocm9tZSBidWcgd2hlcmUgc2V0dGluZyBkZWZhdWx0Q2hlY2tl
ZFxuICAgIC8vIHdpbGwgc29tZXRpbWVzIGluZmx1ZW5jZSB0aGUgdmFsdWUgb2YgY2hlY2tlZCAo
ZXZlbiBhZnRlciBkZXRhY2htZW50KS5cbiAgICAvLyBSZWZlcmVuY2U6IGh0dHBzOi8vYnVncy5j
aHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTYwODQxNlxuICAgIC8vIFdl
IG5lZWQgdG8gdGVtcG9yYXJpbHkgdW5zZXQgbmFtZSB0byBhdm9pZCBkaXNydXB0aW5nIHJhZGlv
IGJ1dHRvbiBncm91cHMuXG4gICAgdmFyIG5hbWUgPSBub2RlLm5hbWU7XG4gICAgaWYgKG5hbWUg
IT09ICcnKSB7XG4gICAgICBub2RlLm5hbWUgPSAnJztcbiAgICB9XG4gICAgbm9kZS5kZWZhdWx0
Q2hlY2tlZCA9ICFub2RlLmRlZmF1bHRDaGVja2VkO1xuICAgIG5vZGUuZGVmYXVsdENoZWNrZWQg
PSAhbm9kZS5kZWZhdWx0Q2hlY2tlZDtcbiAgICBpZiAobmFtZSAhPT0gJycpIHtcbiAgICAgIG5v
ZGUubmFtZSA9IG5hbWU7XG4gICAgfVxuICB9XG59O1xuXG5mdW5jdGlvbiBfaGFuZGxlQ2hhbmdl
KGV2ZW50KSB7XG4gIHZhciBwcm9wcyA9IHRoaXMuX2N1cnJlbnRFbGVtZW50LnByb3BzO1xuXG4g
IHZhciByZXR1cm5WYWx1ZSA9IExpbmtlZFZhbHVlVXRpbHMuZXhlY3V0ZU9uQ2hhbmdlKHByb3Bz
LCBldmVudCk7XG5cbiAgLy8gSGVyZSB3ZSB1c2UgYXNhcCB0byB3YWl0IHVudGlsIGFsbCB1cGRh
dGVzIGhhdmUgcHJvcGFnYXRlZCwgd2hpY2hcbiAgLy8gaXMgaW1wb3J0YW50IHdoZW4gdXNpbmcg
Y29udHJvbGxlZCBjb21wb25lbnRzIHdpdGhpbiBsYXllcnM6XG4gIC8vIGh0dHBzOi8vZ2l0aHVi
LmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTY5OFxuICBSZWFjdFVwZGF0ZXMuYXNhcChmb3Jj
ZVVwZGF0ZUlmTW91bnRlZCwgdGhpcyk7XG5cbiAgdmFyIG5hbWUgPSBwcm9wcy5uYW1lO1xuICBp
ZiAocHJvcHMudHlwZSA9PT0gJ3JhZGlvJyAmJiBuYW1lICE9IG51bGwpIHtcbiAgICB2YXIgcm9v
dE5vZGUgPSBSZWFjdERPTUNvbXBvbmVudFRyZWUuZ2V0Tm9kZUZyb21JbnN0YW5jZSh0aGlzKTtc
biAgICB2YXIgcXVlcnlSb290ID0gcm9vdE5vZGU7XG5cbiAgICB3aGlsZSAocXVlcnlSb290LnBh
cmVudE5vZGUpIHtcbiAgICAgIHF1ZXJ5Um9vdCA9IHF1ZXJ5Um9vdC5wYXJlbnROb2RlO1xuICAg
IH1cblxuICAgIC8vIElmIGByb290Tm9kZS5mb3JtYCB3YXMgbm9uLW51bGwsIHRoZW4gd2UgY291
bGQgdHJ5IGBmb3JtLmVsZW1lbnRzYCxcbiAgICAvLyBidXQgdGhhdCBzb21ldGltZXMgYmVoYXZl
cyBzdHJhbmdlbHkgaW4gSUU4LiBXZSBjb3VsZCBhbHNvIHRyeSB1c2luZ1xuICAgIC8vIGBmb3Jt
LmdldEVsZW1lbnRzQnlOYW1lYCwgYnV0IHRoYXQgd2lsbCBvbmx5IHJldHVybiBkaXJlY3QgY2hp
bGRyZW5cbiAgICAvLyBhbmQgd29uJ3QgaW5jbHVkZSBpbnB1dHMgdGhhdCB1c2UgdGhlIEhUTUw1
IGBmb3JtPWAgYXR0cmlidXRlLiBTaW5jZVxuICAgIC8vIHRoZSBpbnB1dCBtaWdodCBub3QgZXZl
biBiZSBpbiBhIGZvcm0sIGxldCdzIGp1c3QgdXNlIHRoZSBnbG9iYWxcbiAgICAvLyBgcXVlcnlT
ZWxlY3RvckFsbGAgdG8gZW5zdXJlIHdlIGRvbid0IG1pc3MgYW55dGhpbmcuXG4gICAgdmFyIGdy
b3VwID0gcXVlcnlSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W25hbWU9JyArIEpTT04uc3Ry
aW5naWZ5KCcnICsgbmFtZSkgKyAnXVt0eXBlPVwicmFkaW9cIl0nKTtcblxuICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgZ3JvdXAubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBvdGhlck5vZGUgPSBn
cm91cFtpXTtcbiAgICAgIGlmIChvdGhlck5vZGUgPT09IHJvb3ROb2RlIHx8IG90aGVyTm9kZS5m
b3JtICE9PSByb290Tm9kZS5mb3JtKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAg
ICAgLy8gVGhpcyB3aWxsIHRocm93IGlmIHJhZGlvIGJ1dHRvbnMgcmVuZGVyZWQgYnkgZGlmZmVy
ZW50IGNvcGllcyBvZiBSZWFjdFxuICAgICAgLy8gYW5kIHRoZSBzYW1lIG5hbWUgYXJlIHJlbmRl
cmVkIGludG8gdGhlIHNhbWUgZm9ybSAoc2FtZSBhcyAjMTkzOSkuXG4gICAgICAvLyBUaGF0J3Mg
cHJvYmFibHkgb2theTsgd2UgZG9uJ3Qgc3VwcG9ydCBpdCBqdXN0IGFzIHdlIGRvbid0IHN1cHBv
cnRcbiAgICAgIC8vIG1peGluZyBSZWFjdCByYWRpbyBidXR0b25zIHdpdGggbm9uLVJlYWN0IG9u
ZXMuXG4gICAgICB2YXIgb3RoZXJJbnN0YW5jZSA9IFJlYWN0RE9NQ29tcG9uZW50VHJlZS5nZXRJ
bnN0YW5jZUZyb21Ob2RlKG90aGVyTm9kZSk7XG4gICAgICAhb3RoZXJJbnN0YW5jZSA/ICBmYWxz
ZSA/IGludmFyaWFudChmYWxzZSwgJ1JlYWN0RE9NSW5wdXQ6IE1peGluZyBSZWFjdCBhbmQgbm9u
LVJlYWN0IHJhZGlvIGlucHV0cyB3aXRoIHRoZSBzYW1lIGBuYW1lYCBpcyBub3Qgc3VwcG9ydGVk
LicpIDogX3Byb2RJbnZhcmlhbnQoJzkwJykgOiB2b2lkIDA7XG4gICAgICAvLyBJZiB0aGlzIGlz
IGEgY29udHJvbGxlZCByYWRpbyBidXR0b24gZ3JvdXAsIGZvcmNpbmcgdGhlIGlucHV0IHRoYXRc
biAgICAgIC8vIHdhcyBwcmV2aW91c2x5IGNoZWNrZWQgdG8gdXBkYXRlIHdpbGwgY2F1c2UgaXQg
dG8gYmUgY29tZSByZS1jaGVja2VkXG4gICAgICAvLyBhcyBhcHByb3ByaWF0ZS5cbiAgICAgIFJl
YWN0VXBkYXRlcy5hc2FwKGZvcmNlVXBkYXRlSWZNb3VudGVkLCBvdGhlckluc3RhbmNlKTtcbiAg
ICB9XG4gIH1cblxuICByZXR1cm4gcmV0dXJuVmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0g
UmVhY3RET01JbnB1dDtcblxuLyoqKi8gfSksXG4vKiAxNTEgKi9cbi8qKiovIChmdW5jdGlvbiht
b2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7
XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwg
cmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5k
ZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdy
YW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxl
IGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG5cblxudmFyIFJlYWN0UHJv
cFR5cGVzU2VjcmV0ID0gJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJ
UkVEJztcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlc1NlY3JldDtcblxuLyoqKi8g
fSksXG4vKiAxNTIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFj
a19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIENvcHlyaWdodCAyMDEz
LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAq
IFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNl
IGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0
aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRz
IGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5c
biAqXG4gKi9cblxuXG5cbnZhciBfYXNzaWduID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcblxu
dmFyIFJlYWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7XG52YXIgUmVhY3RET01Db21wb25l
bnRUcmVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcbnZhciBSZWFjdERPTVNlbGVjdCA9IF9f
d2VicGFja19yZXF1aXJlX18oNzEpO1xuXG52YXIgd2FybmluZyA9IF9fd2VicGFja19yZXF1aXJl
X18oMSk7XG52YXIgZGlkV2FybkludmFsaWRPcHRpb25DaGlsZHJlbiA9IGZhbHNlO1xuXG5mdW5j
dGlvbiBmbGF0dGVuQ2hpbGRyZW4oY2hpbGRyZW4pIHtcbiAgdmFyIGNvbnRlbnQgPSAnJztcblxu
ICAvLyBGbGF0dGVuIGNoaWxkcmVuIGFuZCB3YXJuIGlmIHRoZXkgYXJlbid0IHN0cmluZ3Mgb3Ig
bnVtYmVycztcbiAgLy8gaW52YWxpZCB0eXBlcyBhcmUgaWdub3JlZC5cbiAgUmVhY3QuQ2hpbGRy
ZW4uZm9yRWFjaChjaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgaWYgKGNoaWxkID09
IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBjaGlsZCA9PT0g
J3N0cmluZycgfHwgdHlwZW9mIGNoaWxkID09PSAnbnVtYmVyJykge1xuICAgICAgY29udGVudCAr
PSBjaGlsZDtcbiAgICB9IGVsc2UgaWYgKCFkaWRXYXJuSW52YWxpZE9wdGlvbkNoaWxkcmVuKSB7
XG4gICAgICBkaWRXYXJuSW52YWxpZE9wdGlvbkNoaWxkcmVuID0gdHJ1ZTtcbiAgICAgICBmYWxz
ZSA/IHdhcm5pbmcoZmFsc2UsICdPbmx5IHN0cmluZ3MgYW5kIG51bWJlcnMgYXJlIHN1cHBvcnRl
ZCBhcyA8b3B0aW9uPiBjaGlsZHJlbi4nKSA6IHZvaWQgMDtcbiAgICB9XG4gIH0pO1xuXG4gIHJl
dHVybiBjb250ZW50O1xufVxuXG4vKipcbiAqIEltcGxlbWVudHMgYW4gPG9wdGlvbj4gaG9zdCBj
b21wb25lbnQgdGhhdCB3YXJucyB3aGVuIGBzZWxlY3RlZGAgaXMgc2V0LlxuICovXG52YXIgUmVh
Y3RET01PcHRpb24gPSB7XG4gIG1vdW50V3JhcHBlcjogZnVuY3Rpb24gKGluc3QsIHByb3BzLCBo
b3N0UGFyZW50KSB7XG4gICAgLy8gVE9ETyAoeXVuZ3N0ZXJzKTogUmVtb3ZlIHN1cHBvcnQgZm9y
IGBzZWxlY3RlZGAgaW4gPG9wdGlvbj4uXG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICBwcm9jZXNz
LmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhwcm9wcy5zZWxlY3RlZCA9
PSBudWxsLCAnVXNlIHRoZSBgZGVmYXVsdFZhbHVlYCBvciBgdmFsdWVgIHByb3BzIG9uIDxzZWxl
Y3Q+IGluc3RlYWQgb2YgJyArICdzZXR0aW5nIGBzZWxlY3RlZGAgb24gPG9wdGlvbj4uJykgOiB2
b2lkIDA7XG4gICAgfVxuXG4gICAgLy8gTG9vayB1cCB3aGV0aGVyIHRoaXMgb3B0aW9uIGlzICdz
ZWxlY3RlZCdcbiAgICB2YXIgc2VsZWN0VmFsdWUgPSBudWxsO1xuICAgIGlmIChob3N0UGFyZW50
ICE9IG51bGwpIHtcbiAgICAgIHZhciBzZWxlY3RQYXJlbnQgPSBob3N0UGFyZW50O1xuXG4gICAg
ICBpZiAoc2VsZWN0UGFyZW50Ll90YWcgPT09ICdvcHRncm91cCcpIHtcbiAgICAgICAgc2VsZWN0
UGFyZW50ID0gc2VsZWN0UGFyZW50Ll9ob3N0UGFyZW50O1xuICAgICAgfVxuXG4gICAgICBpZiAo
c2VsZWN0UGFyZW50ICE9IG51bGwgJiYgc2VsZWN0UGFyZW50Ll90YWcgPT09ICdzZWxlY3QnKSB7
XG4gICAgICAgIHNlbGVjdFZhbHVlID0gUmVhY3RET01TZWxlY3QuZ2V0U2VsZWN0VmFsdWVDb250
ZXh0KHNlbGVjdFBhcmVudCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIHZhbHVl
IGlzIG51bGwgKGUuZy4sIG5vIHNwZWNpZmllZCB2YWx1ZSBvciBhZnRlciBpbml0aWFsIG1vdW50
KVxuICAgIC8vIG9yIG1pc3NpbmcgKGUuZy4sIGZvciA8ZGF0YWxpc3Q+KSwgd2UgZG9uJ3QgY2hh
bmdlIHByb3BzLnNlbGVjdGVkXG4gICAgdmFyIHNlbGVjdGVkID0gbnVsbDtcbiAgICBpZiAoc2Vs
ZWN0VmFsdWUgIT0gbnVsbCkge1xuICAgICAgdmFyIHZhbHVlO1xuICAgICAgaWYgKHByb3BzLnZh
bHVlICE9IG51bGwpIHtcbiAgICAgICAgdmFsdWUgPSBwcm9wcy52YWx1ZSArICcnO1xuICAgICAg
fSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSBmbGF0dGVuQ2hpbGRyZW4ocHJvcHMuY2hpbGRyZW4p
O1xuICAgICAgfVxuICAgICAgc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgIGlmIChBcnJheS5pc0Fy
cmF5KHNlbGVjdFZhbHVlKSkge1xuICAgICAgICAvLyBtdWx0aXBsZVxuICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHNlbGVjdFZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKCcn
ICsgc2VsZWN0VmFsdWVbaV0gPT09IHZhbHVlKSB7XG4gICAgICAgICAgICBzZWxlY3RlZCA9IHRy
dWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0g
ZWxzZSB7XG4gICAgICAgIHNlbGVjdGVkID0gJycgKyBzZWxlY3RWYWx1ZSA9PT0gdmFsdWU7XG4g
ICAgICB9XG4gICAgfVxuXG4gICAgaW5zdC5fd3JhcHBlclN0YXRlID0geyBzZWxlY3RlZDogc2Vs
ZWN0ZWQgfTtcbiAgfSxcblxuICBwb3N0TW91bnRXcmFwcGVyOiBmdW5jdGlvbiAoaW5zdCkge1xu
ICAgIC8vIHZhbHVlPVwiXCIgc2hvdWxkIG1ha2UgYSB2YWx1ZSBhdHRyaWJ1dGUgKCM2MjE5KVxu
ICAgIHZhciBwcm9wcyA9IGluc3QuX2N1cnJlbnRFbGVtZW50LnByb3BzO1xuICAgIGlmIChwcm9w
cy52YWx1ZSAhPSBudWxsKSB7XG4gICAgICB2YXIgbm9kZSA9IFJlYWN0RE9NQ29tcG9uZW50VHJl
ZS5nZXROb2RlRnJvbUluc3RhbmNlKGluc3QpO1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ3Zh
bHVlJywgcHJvcHMudmFsdWUpO1xuICAgIH1cbiAgfSxcblxuICBnZXRIb3N0UHJvcHM6IGZ1bmN0
aW9uIChpbnN0LCBwcm9wcykge1xuICAgIHZhciBob3N0UHJvcHMgPSBfYXNzaWduKHsgc2VsZWN0
ZWQ6IHVuZGVmaW5lZCwgY2hpbGRyZW46IHVuZGVmaW5lZCB9LCBwcm9wcyk7XG5cbiAgICAvLyBS
ZWFkIHN0YXRlIG9ubHkgZnJvbSBpbml0aWFsIG1vdW50IGJlY2F1c2UgPHNlbGVjdD4gdXBkYXRl
cyB2YWx1ZVxuICAgIC8vIG1hbnVhbGx5OyB3ZSBuZWVkIHRoZSBpbml0aWFsIHN0YXRlIG9ubHkg
Zm9yIHNlcnZlciByZW5kZXJpbmdcbiAgICBpZiAoaW5zdC5fd3JhcHBlclN0YXRlLnNlbGVjdGVk
ICE9IG51bGwpIHtcbiAgICAgIGhvc3RQcm9wcy5zZWxlY3RlZCA9IGluc3QuX3dyYXBwZXJTdGF0
ZS5zZWxlY3RlZDtcbiAgICB9XG5cbiAgICB2YXIgY29udGVudCA9IGZsYXR0ZW5DaGlsZHJlbihw
cm9wcy5jaGlsZHJlbik7XG5cbiAgICBpZiAoY29udGVudCkge1xuICAgICAgaG9zdFByb3BzLmNo
aWxkcmVuID0gY29udGVudDtcbiAgICB9XG5cbiAgICByZXR1cm4gaG9zdFByb3BzO1xuICB9XG59
O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NT3B0aW9uO1xuXG4vKioqLyB9KSxcbi8qIDE1
MyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVf
Xykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwg
RmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3Vy
Y2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4g
dGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNl
IHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZv
dW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xu
XG5cblxudmFyIF9wcm9kSW52YXJpYW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKSxcbiAgICBf
YXNzaWduID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcblxudmFyIExpbmtlZFZhbHVlVXRpbHMg
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQwKTtcbnZhciBSZWFjdERPTUNvbXBvbmVudFRyZWUgPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xudmFyIFJlYWN0VXBkYXRlcyA9IF9fd2VicGFja19yZXF1
aXJlX18oOCk7XG5cbnZhciBpbnZhcmlhbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFy
IHdhcm5pbmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuXG52YXIgZGlkV2FyblZhbHVlTGlu
ayA9IGZhbHNlO1xudmFyIGRpZFdhcm5WYWxEZWZhdWx0VmFsID0gZmFsc2U7XG5cbmZ1bmN0aW9u
IGZvcmNlVXBkYXRlSWZNb3VudGVkKCkge1xuICBpZiAodGhpcy5fcm9vdE5vZGVJRCkge1xuICAg
IC8vIERPTSBjb21wb25lbnQgaXMgc3RpbGwgbW91bnRlZDsgdXBkYXRlXG4gICAgUmVhY3RET01U
ZXh0YXJlYS51cGRhdGVXcmFwcGVyKHRoaXMpO1xuICB9XG59XG5cbi8qKlxuICogSW1wbGVtZW50
cyBhIDx0ZXh0YXJlYT4gaG9zdCBjb21wb25lbnQgdGhhdCBhbGxvd3Mgc2V0dGluZyBgdmFsdWVg
LCBhbmRcbiAqIGBkZWZhdWx0VmFsdWVgLiBUaGlzIGRpZmZlcnMgZnJvbSB0aGUgdHJhZGl0aW9u
YWwgRE9NIEFQSSBiZWNhdXNlIHZhbHVlIGlzXG4gKiB1c3VhbGx5IHNldCBhcyBQQ0RBVEEgY2hp
bGRyZW4uXG4gKlxuICogSWYgYHZhbHVlYCBpcyBub3Qgc3VwcGxpZWQgKG9yIG51bGwvdW5kZWZp
bmVkKSwgdXNlciBhY3Rpb25zIHRoYXQgYWZmZWN0IHRoZVxuICogdmFsdWUgd2lsbCB0cmlnZ2Vy
IHVwZGF0ZXMgdG8gdGhlIGVsZW1lbnQuXG4gKlxuICogSWYgYHZhbHVlYCBpcyBzdXBwbGllZCAo
YW5kIG5vdCBudWxsL3VuZGVmaW5lZCksIHRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGxcbiAqIG5v
dCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIGVsZW1lbnQuIEluc3RlYWQsIHRoZSBgdmFsdWVgIHBy
b3AgbXVzdCBjaGFuZ2UgaW5cbiAqIG9yZGVyIGZvciB0aGUgcmVuZGVyZWQgZWxlbWVudCB0byBi
ZSB1cGRhdGVkLlxuICpcbiAqIFRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGwgYmUgaW5pdGlhbGl6
ZWQgd2l0aCBhbiBlbXB0eSB2YWx1ZSwgdGhlIHByb3BcbiAqIGBkZWZhdWx0VmFsdWVgIGlmIHNw
ZWNpZmllZCwgb3IgdGhlIGNoaWxkcmVuIGNvbnRlbnQgKGRlcHJlY2F0ZWQpLlxuICovXG52YXIg
UmVhY3RET01UZXh0YXJlYSA9IHtcbiAgZ2V0SG9zdFByb3BzOiBmdW5jdGlvbiAoaW5zdCwgcHJv
cHMpIHtcbiAgICAhKHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID09IG51bGwpID8gIGZh
bHNlID8gaW52YXJpYW50KGZhbHNlLCAnYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYCBkb2VzIG5v
dCBtYWtlIHNlbnNlIG9uIDx0ZXh0YXJlYT4uJykgOiBfcHJvZEludmFyaWFudCgnOTEnKSA6IHZv
aWQgMDtcblxuICAgIC8vIEFsd2F5cyBzZXQgY2hpbGRyZW4gdG8gdGhlIHNhbWUgdGhpbmcuIElu
IElFOSwgdGhlIHNlbGVjdGlvbiByYW5nZSB3aWxsXG4gICAgLy8gZ2V0IHJlc2V0IGlmIGB0ZXh0
Q29udGVudGAgaXMgbXV0YXRlZC4gIFdlIGNvdWxkIGFkZCBhIGNoZWNrIGluIHNldFRleHRDb250
ZW50XG4gICAgLy8gdG8gb25seSBzZXQgdGhlIHZhbHVlIGlmL3doZW4gdGhlIHZhbHVlIGRpZmZl
cnMgZnJvbSB0aGUgbm9kZSB2YWx1ZSAod2hpY2ggd291bGRcbiAgICAvLyBjb21wbGV0ZWx5IHNv
bHZlIHRoaXMgSUU5IGJ1ZyksIGJ1dCBTZWJhc3RpYW4rQmVuIHNlZW1lZCB0byBsaWtlIHRoaXMg
c29sdXRpb24uXG4gICAgLy8gVGhlIHZhbHVlIGNhbiBiZSBhIGJvb2xlYW4gb3Igb2JqZWN0IHNv
IHRoYXQncyB3aHkgaXQncyBmb3JjZWQgdG8gYmUgYSBzdHJpbmcuXG4gICAgdmFyIGhvc3RQcm9w
cyA9IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAg
ZGVmYXVsdFZhbHVlOiB1bmRlZmluZWQsXG4gICAgICBjaGlsZHJlbjogJycgKyBpbnN0Ll93cmFw
cGVyU3RhdGUuaW5pdGlhbFZhbHVlLFxuICAgICAgb25DaGFuZ2U6IGluc3QuX3dyYXBwZXJTdGF0
ZS5vbkNoYW5nZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGhvc3RQcm9wcztcbiAgfSxcblxuICBt
b3VudFdyYXBwZXI6IGZ1bmN0aW9uIChpbnN0LCBwcm9wcykge1xuICAgIGlmIChmYWxzZSkge1xu
ICAgICAgTGlua2VkVmFsdWVVdGlscy5jaGVja1Byb3BUeXBlcygndGV4dGFyZWEnLCBwcm9wcywg
aW5zdC5fY3VycmVudEVsZW1lbnQuX293bmVyKTtcbiAgICAgIGlmIChwcm9wcy52YWx1ZUxpbmsg
IT09IHVuZGVmaW5lZCAmJiAhZGlkV2FyblZhbHVlTGluaykge1xuICAgICAgICBwcm9jZXNzLmVu
di5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ2B2YWx1ZUxpbmtg
IHByb3Agb24gYHRleHRhcmVhYCBpcyBkZXByZWNhdGVkOyBzZXQgYHZhbHVlYCBhbmQgYG9uQ2hh
bmdlYCBpbnN0ZWFkLicpIDogdm9pZCAwO1xuICAgICAgICBkaWRXYXJuVmFsdWVMaW5rID0gdHJ1
ZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHByb3Bz
LmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmICFkaWRXYXJuVmFsRGVmYXVsdFZhbCkge1xu
ICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhm
YWxzZSwgJ1RleHRhcmVhIGVsZW1lbnRzIG11c3QgYmUgZWl0aGVyIGNvbnRyb2xsZWQgb3IgdW5j
b250cm9sbGVkICcgKyAnKHNwZWNpZnkgZWl0aGVyIHRoZSB2YWx1ZSBwcm9wLCBvciB0aGUgZGVm
YXVsdFZhbHVlIHByb3AsIGJ1dCBub3QgJyArICdib3RoKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcg
YSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCB0ZXh0YXJlYSAnICsgJ2FuZCByZW1vdmUgb25l
IG9mIHRoZXNlIHByb3BzLiBNb3JlIGluZm86ICcgKyAnaHR0cHM6Ly9mYi5tZS9yZWFjdC1jb250
cm9sbGVkLWNvbXBvbmVudHMnKSA6IHZvaWQgMDtcbiAgICAgICAgZGlkV2FyblZhbERlZmF1bHRW
YWwgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciB2YWx1ZSA9IExpbmtlZFZhbHVl
VXRpbHMuZ2V0VmFsdWUocHJvcHMpO1xuICAgIHZhciBpbml0aWFsVmFsdWUgPSB2YWx1ZTtcblxu
ICAgIC8vIE9ubHkgYm90aGVyIGZldGNoaW5nIGRlZmF1bHQgdmFsdWUgaWYgd2UncmUgZ29pbmcg
dG8gdXNlIGl0XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgIHZhciBkZWZhdWx0VmFs
dWUgPSBwcm9wcy5kZWZhdWx0VmFsdWU7XG4gICAgICAvLyBUT0RPICh5dW5nc3RlcnMpOiBSZW1v
dmUgc3VwcG9ydCBmb3IgY2hpbGRyZW4gY29udGVudCBpbiA8dGV4dGFyZWE+LlxuICAgICAgdmFy
IGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW47XG4gICAgICBpZiAoY2hpbGRyZW4gIT0gbnVsbCkg
e1xuICAgICAgICBpZiAoZmFsc2UpIHtcbiAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAh
PT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ1VzZSB0aGUgYGRlZmF1bHRWYWx1ZWAg
b3IgYHZhbHVlYCBwcm9wcyBpbnN0ZWFkIG9mIHNldHRpbmcgJyArICdjaGlsZHJlbiBvbiA8dGV4
dGFyZWE+LicpIDogdm9pZCAwO1xuICAgICAgICB9XG4gICAgICAgICEoZGVmYXVsdFZhbHVlID09
IG51bGwpID8gIGZhbHNlID8gaW52YXJpYW50KGZhbHNlLCAnSWYgeW91IHN1cHBseSBgZGVmYXVs
dFZhbHVlYCBvbiBhIDx0ZXh0YXJlYT4sIGRvIG5vdCBwYXNzIGNoaWxkcmVuLicpIDogX3Byb2RJ
bnZhcmlhbnQoJzkyJykgOiB2b2lkIDA7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxk
cmVuKSkge1xuICAgICAgICAgICEoY2hpbGRyZW4ubGVuZ3RoIDw9IDEpID8gIGZhbHNlID8gaW52
YXJpYW50KGZhbHNlLCAnPHRleHRhcmVhPiBjYW4gb25seSBoYXZlIGF0IG1vc3Qgb25lIGNoaWxk
LicpIDogX3Byb2RJbnZhcmlhbnQoJzkzJykgOiB2b2lkIDA7XG4gICAgICAgICAgY2hpbGRyZW4g
PSBjaGlsZHJlblswXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9ICcnICsg
Y2hpbGRyZW47XG4gICAgICB9XG4gICAgICBpZiAoZGVmYXVsdFZhbHVlID09IG51bGwpIHtcbiAg
ICAgICAgZGVmYXVsdFZhbHVlID0gJyc7XG4gICAgICB9XG4gICAgICBpbml0aWFsVmFsdWUgPSBk
ZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgaW5zdC5fd3JhcHBlclN0YXRlID0ge1xuICAgICAg
aW5pdGlhbFZhbHVlOiAnJyArIGluaXRpYWxWYWx1ZSxcbiAgICAgIGxpc3RlbmVyczogbnVsbCxc
biAgICAgIG9uQ2hhbmdlOiBfaGFuZGxlQ2hhbmdlLmJpbmQoaW5zdClcbiAgICB9O1xuICB9LFxu
XG4gIHVwZGF0ZVdyYXBwZXI6IGZ1bmN0aW9uIChpbnN0KSB7XG4gICAgdmFyIHByb3BzID0gaW5z
dC5fY3VycmVudEVsZW1lbnQucHJvcHM7XG5cbiAgICB2YXIgbm9kZSA9IFJlYWN0RE9NQ29tcG9u
ZW50VHJlZS5nZXROb2RlRnJvbUluc3RhbmNlKGluc3QpO1xuICAgIHZhciB2YWx1ZSA9IExpbmtl
ZFZhbHVlVXRpbHMuZ2V0VmFsdWUocHJvcHMpO1xuICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4g
ICAgICAvLyBDYXN0IGB2YWx1ZWAgdG8gYSBzdHJpbmcgdG8gZW5zdXJlIHRoZSB2YWx1ZSBpcyBz
ZXQgY29ycmVjdGx5LiBXaGlsZVxuICAgICAgLy8gYnJvd3NlcnMgdHlwaWNhbGx5IGRvIHRoaXMg
YXMgbmVjZXNzYXJ5LCBqc2RvbSBkb2Vzbid0LlxuICAgICAgdmFyIG5ld1ZhbHVlID0gJycgKyB2
YWx1ZTtcblxuICAgICAgLy8gVG8gYXZvaWQgc2lkZSBlZmZlY3RzIChzdWNoIGFzIGxvc2luZyB0
ZXh0IHNlbGVjdGlvbiksIG9ubHkgc2V0IHZhbHVlIGlmIGNoYW5nZWRcbiAgICAgIGlmIChuZXdW
YWx1ZSAhPT0gbm9kZS52YWx1ZSkge1xuICAgICAgICBub2RlLnZhbHVlID0gbmV3VmFsdWU7XG4g
ICAgICB9XG4gICAgICBpZiAocHJvcHMuZGVmYXVsdFZhbHVlID09IG51bGwpIHtcbiAgICAgICAg
bm9kZS5kZWZhdWx0VmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHBy
b3BzLmRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7XG4gICAgICBub2RlLmRlZmF1bHRWYWx1ZSA9IHBy
b3BzLmRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gIH0sXG5cbiAgcG9zdE1vdW50V3JhcHBlcjogZnVu
Y3Rpb24gKGluc3QpIHtcbiAgICAvLyBUaGlzIGlzIGluIHBvc3RNb3VudCBiZWNhdXNlIHdlIG5l
ZWQgYWNjZXNzIHRvIHRoZSBET00gbm9kZSwgd2hpY2ggaXMgbm90XG4gICAgLy8gYXZhaWxhYmxl
IHVudGlsIGFmdGVyIHRoZSBjb21wb25lbnQgaGFzIG1vdW50ZWQuXG4gICAgdmFyIG5vZGUgPSBS
ZWFjdERPTUNvbXBvbmVudFRyZWUuZ2V0Tm9kZUZyb21JbnN0YW5jZShpbnN0KTtcbiAgICB2YXIg
dGV4dENvbnRlbnQgPSBub2RlLnRleHRDb250ZW50O1xuXG4gICAgLy8gT25seSBzZXQgbm9kZS52
YWx1ZSBpZiB0ZXh0Q29udGVudCBpcyBlcXVhbCB0byB0aGUgZXhwZWN0ZWRcbiAgICAvLyBpbml0
aWFsIHZhbHVlLiBJbiBJRTEwL0lFMTEgdGhlcmUgaXMgYSBidWcgd2hlcmUgdGhlIHBsYWNlaG9s
ZGVyIGF0dHJpYnV0ZVxuICAgIC8vIHdpbGwgcG9wdWxhdGUgdGV4dENvbnRlbnQgYXMgd2VsbC5c
biAgICAvLyBodHRwczovL2RldmVsb3Blci5taWNyb3NvZnQuY29tL21pY3Jvc29mdC1lZGdlL3Bs
YXRmb3JtL2lzc3Vlcy8xMDE1MjUvXG4gICAgaWYgKHRleHRDb250ZW50ID09PSBpbnN0Ll93cmFw
cGVyU3RhdGUuaW5pdGlhbFZhbHVlKSB7XG4gICAgICBub2RlLnZhbHVlID0gdGV4dENvbnRlbnQ7
XG4gICAgfVxuICB9XG59O1xuXG5mdW5jdGlvbiBfaGFuZGxlQ2hhbmdlKGV2ZW50KSB7XG4gIHZh
ciBwcm9wcyA9IHRoaXMuX2N1cnJlbnRFbGVtZW50LnByb3BzO1xuICB2YXIgcmV0dXJuVmFsdWUg
PSBMaW5rZWRWYWx1ZVV0aWxzLmV4ZWN1dGVPbkNoYW5nZShwcm9wcywgZXZlbnQpO1xuICBSZWFj
dFVwZGF0ZXMuYXNhcChmb3JjZVVwZGF0ZUlmTW91bnRlZCwgdGhpcyk7XG4gIHJldHVybiByZXR1
cm5WYWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdERPTVRleHRhcmVhO1xuXG4vKioq
LyB9KSxcbi8qIDE1NCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJw
YWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qKlxuICogQ29weXJpZ2h0IDIw
MTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxu
ICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vu
c2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9m
IHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdo
dHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5
LlxuICpcbiAqL1xuXG5cblxudmFyIF9wcm9kSW52YXJpYW50ID0gX193ZWJwYWNrX3JlcXVpcmVf
XygyKTtcblxudmFyIFJlYWN0Q29tcG9uZW50RW52aXJvbm1lbnQgPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKDQxKTtcbnZhciBSZWFjdEluc3RhbmNlTWFwID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMik7
XG52YXIgUmVhY3RJbnN0cnVtZW50YXRpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpO1xuXG52
YXIgUmVhY3RDdXJyZW50T3duZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcbnZhciBSZWFj
dFJlY29uY2lsZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTtcbnZhciBSZWFjdENoaWxkUmVj
b25jaWxlciA9IF9fd2VicGFja19yZXF1aXJlX18oMTU1KTtcblxudmFyIGVtcHR5RnVuY3Rpb24g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xudmFyIGZsYXR0ZW5DaGlsZHJlbiA9IF9fd2VicGFj
a19yZXF1aXJlX18oMTYwKTtcbnZhciBpbnZhcmlhbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDAp
O1xuXG4vKipcbiAqIE1ha2UgYW4gdXBkYXRlIGZvciBtYXJrdXAgdG8gYmUgcmVuZGVyZWQgYW5k
IGluc2VydGVkIGF0IGEgc3VwcGxpZWQgaW5kZXguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1h
cmt1cCBNYXJrdXAgdGhhdCByZW5kZXJzIGludG8gYW4gZWxlbWVudC5cbiAqIEBwYXJhbSB7bnVt
YmVyfSB0b0luZGV4IERlc3RpbmF0aW9uIGluZGV4LlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rp
b24gbWFrZUluc2VydE1hcmt1cChtYXJrdXAsIGFmdGVyTm9kZSwgdG9JbmRleCkge1xuICAvLyBO
T1RFOiBOdWxsIHZhbHVlcyByZWR1Y2UgaGlkZGVuIGNsYXNzZXMuXG4gIHJldHVybiB7XG4gICAg
dHlwZTogJ0lOU0VSVF9NQVJLVVAnLFxuICAgIGNvbnRlbnQ6IG1hcmt1cCxcbiAgICBmcm9tSW5k
ZXg6IG51bGwsXG4gICAgZnJvbU5vZGU6IG51bGwsXG4gICAgdG9JbmRleDogdG9JbmRleCxcbiAg
ICBhZnRlck5vZGU6IGFmdGVyTm9kZVxuICB9O1xufVxuXG4vKipcbiAqIE1ha2UgYW4gdXBkYXRl
IGZvciBtb3ZpbmcgYW4gZXhpc3RpbmcgZWxlbWVudCB0byBhbm90aGVyIGluZGV4LlxuICpcbiAq
IEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggU291cmNlIGluZGV4IG9mIHRoZSBleGlzdGluZyBl
bGVtZW50LlxuICogQHBhcmFtIHtudW1iZXJ9IHRvSW5kZXggRGVzdGluYXRpb24gaW5kZXggb2Yg
dGhlIGVsZW1lbnQuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBtYWtlTW92ZShjaGlsZCwg
YWZ0ZXJOb2RlLCB0b0luZGV4KSB7XG4gIC8vIE5PVEU6IE51bGwgdmFsdWVzIHJlZHVjZSBoaWRk
ZW4gY2xhc3Nlcy5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnTU9WRV9FWElTVElORycsXG4gICAg
Y29udGVudDogbnVsbCxcbiAgICBmcm9tSW5kZXg6IGNoaWxkLl9tb3VudEluZGV4LFxuICAgIGZy
b21Ob2RlOiBSZWFjdFJlY29uY2lsZXIuZ2V0SG9zdE5vZGUoY2hpbGQpLFxuICAgIHRvSW5kZXg6
IHRvSW5kZXgsXG4gICAgYWZ0ZXJOb2RlOiBhZnRlck5vZGVcbiAgfTtcbn1cblxuLyoqXG4gKiBN
YWtlIGFuIHVwZGF0ZSBmb3IgcmVtb3ZpbmcgYW4gZWxlbWVudCBhdCBhbiBpbmRleC5cbiAqXG4g
KiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IEluZGV4IG9mIHRoZSBlbGVtZW50IHRvIHJlbW92
ZS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIG1ha2VSZW1vdmUoY2hpbGQsIG5vZGUpIHtc
biAgLy8gTk9URTogTnVsbCB2YWx1ZXMgcmVkdWNlIGhpZGRlbiBjbGFzc2VzLlxuICByZXR1cm4g
e1xuICAgIHR5cGU6ICdSRU1PVkVfTk9ERScsXG4gICAgY29udGVudDogbnVsbCxcbiAgICBmcm9t
SW5kZXg6IGNoaWxkLl9tb3VudEluZGV4LFxuICAgIGZyb21Ob2RlOiBub2RlLFxuICAgIHRvSW5k
ZXg6IG51bGwsXG4gICAgYWZ0ZXJOb2RlOiBudWxsXG4gIH07XG59XG5cbi8qKlxuICogTWFrZSBh
biB1cGRhdGUgZm9yIHNldHRpbmcgdGhlIG1hcmt1cCBvZiBhIG5vZGUuXG4gKlxuICogQHBhcmFt
IHtzdHJpbmd9IG1hcmt1cCBNYXJrdXAgdGhhdCByZW5kZXJzIGludG8gYW4gZWxlbWVudC5cbiAq
IEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIG1ha2VTZXRNYXJrdXAobWFya3VwKSB7XG4gIC8vIE5P
VEU6IE51bGwgdmFsdWVzIHJlZHVjZSBoaWRkZW4gY2xhc3Nlcy5cbiAgcmV0dXJuIHtcbiAgICB0
eXBlOiAnU0VUX01BUktVUCcsXG4gICAgY29udGVudDogbWFya3VwLFxuICAgIGZyb21JbmRleDog
bnVsbCxcbiAgICBmcm9tTm9kZTogbnVsbCxcbiAgICB0b0luZGV4OiBudWxsLFxuICAgIGFmdGVy
Tm9kZTogbnVsbFxuICB9O1xufVxuXG4vKipcbiAqIE1ha2UgYW4gdXBkYXRlIGZvciBzZXR0aW5n
IHRoZSB0ZXh0IGNvbnRlbnQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRDb250ZW50IFRl
eHQgY29udGVudCB0byBzZXQuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBtYWtlVGV4dENv
bnRlbnQodGV4dENvbnRlbnQpIHtcbiAgLy8gTk9URTogTnVsbCB2YWx1ZXMgcmVkdWNlIGhpZGRl
biBjbGFzc2VzLlxuICByZXR1cm4ge1xuICAgIHR5cGU6ICdURVhUX0NPTlRFTlQnLFxuICAgIGNv
bnRlbnQ6IHRleHRDb250ZW50LFxuICAgIGZyb21JbmRleDogbnVsbCxcbiAgICBmcm9tTm9kZTog
bnVsbCxcbiAgICB0b0luZGV4OiBudWxsLFxuICAgIGFmdGVyTm9kZTogbnVsbFxuICB9O1xufVxu
XG4vKipcbiAqIFB1c2ggYW4gdXBkYXRlLCBpZiBhbnksIG9udG8gdGhlIHF1ZXVlLiBDcmVhdGVz
IGEgbmV3IHF1ZXVlIGlmIG5vbmUgaXNcbiAqIHBhc3NlZCBhbmQgYWx3YXlzIHJldHVybnMgdGhl
IHF1ZXVlLiBNdXRhdGl2ZS5cbiAqL1xuZnVuY3Rpb24gZW5xdWV1ZShxdWV1ZSwgdXBkYXRlKSB7
XG4gIGlmICh1cGRhdGUpIHtcbiAgICBxdWV1ZSA9IHF1ZXVlIHx8IFtdO1xuICAgIHF1ZXVlLnB1
c2godXBkYXRlKTtcbiAgfVxuICByZXR1cm4gcXVldWU7XG59XG5cbi8qKlxuICogUHJvY2Vzc2Vz
IGFueSBlbnF1ZXVlZCB1cGRhdGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHBy
b2Nlc3NRdWV1ZShpbnN0LCB1cGRhdGVRdWV1ZSkge1xuICBSZWFjdENvbXBvbmVudEVudmlyb25t
ZW50LnByb2Nlc3NDaGlsZHJlblVwZGF0ZXMoaW5zdCwgdXBkYXRlUXVldWUpO1xufVxuXG52YXIg
c2V0Q2hpbGRyZW5Gb3JJbnN0cnVtZW50YXRpb24gPSBlbXB0eUZ1bmN0aW9uO1xuaWYgKGZhbHNl
KSB7XG4gIHZhciBnZXREZWJ1Z0lEID0gZnVuY3Rpb24gKGluc3QpIHtcbiAgICBpZiAoIWluc3Qu
X2RlYnVnSUQpIHtcbiAgICAgIC8vIENoZWNrIGZvciBBUlQtbGlrZSBpbnN0YW5jZXMuIFRPRE86
IFRoaXMgaXMgc2lsbHkvZ3Jvc3MuXG4gICAgICB2YXIgaW50ZXJuYWw7XG4gICAgICBpZiAoaW50
ZXJuYWwgPSBSZWFjdEluc3RhbmNlTWFwLmdldChpbnN0KSkge1xuICAgICAgICBpbnN0ID0gaW50
ZXJuYWw7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpbnN0Ll9kZWJ1Z0lEO1xuICB9O1xu
ICBzZXRDaGlsZHJlbkZvckluc3RydW1lbnRhdGlvbiA9IGZ1bmN0aW9uIChjaGlsZHJlbikge1xu
ICAgIHZhciBkZWJ1Z0lEID0gZ2V0RGVidWdJRCh0aGlzKTtcbiAgICAvLyBUT0RPOiBSZWFjdCBO
YXRpdmUgZW1wdHkgY29tcG9uZW50cyBhcmUgYWxzbyBtdWx0aWNoaWxkLlxuICAgIC8vIFRoaXMg
bWVhbnMgdGhleSBzdGlsbCBnZXQgaW50byB0aGlzIG1ldGhvZCBidXQgZG9uJ3QgaGF2ZSBfZGVi
dWdJRC5cbiAgICBpZiAoZGVidWdJRCAhPT0gMCkge1xuICAgICAgUmVhY3RJbnN0cnVtZW50YXRp
b24uZGVidWdUb29sLm9uU2V0Q2hpbGRyZW4oZGVidWdJRCwgY2hpbGRyZW4gPyBPYmplY3Qua2V5
cyhjaGlsZHJlbikubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVu
W2tleV0uX2RlYnVnSUQ7XG4gICAgICB9KSA6IFtdKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxu
ICogUmVhY3RNdWx0aUNoaWxkIGFyZSBjYXBhYmxlIG9mIHJlY29uY2lsaW5nIG11bHRpcGxlIGNo
aWxkcmVuLlxuICpcbiAqIEBjbGFzcyBSZWFjdE11bHRpQ2hpbGRcbiAqIEBpbnRlcm5hbFxuICov
XG52YXIgUmVhY3RNdWx0aUNoaWxkID0ge1xuICAvKipcbiAgICogUHJvdmlkZXMgY29tbW9uIGZ1
bmN0aW9uYWxpdHkgZm9yIGNvbXBvbmVudHMgdGhhdCBtdXN0IHJlY29uY2lsZSBtdWx0aXBsZVxu
ICAgKiBjaGlsZHJlbi4gVGhpcyBpcyB1c2VkIGJ5IGBSZWFjdERPTUNvbXBvbmVudGAgdG8gbW91
bnQsIHVwZGF0ZSwgYW5kXG4gICAqIHVubW91bnQgY2hpbGQgY29tcG9uZW50cy5cbiAgICpcbiAg
ICogQGxlbmRzIHtSZWFjdE11bHRpQ2hpbGQucHJvdG90eXBlfVxuICAgKi9cbiAgTWl4aW46IHtc
biAgICBfcmVjb25jaWxlckluc3RhbnRpYXRlQ2hpbGRyZW46IGZ1bmN0aW9uIChuZXN0ZWRDaGls
ZHJlbiwgdHJhbnNhY3Rpb24sIGNvbnRleHQpIHtcbiAgICAgIGlmIChmYWxzZSkge1xuICAgICAg
ICB2YXIgc2VsZkRlYnVnSUQgPSBnZXREZWJ1Z0lEKHRoaXMpO1xuICAgICAgICBpZiAodGhpcy5f
Y3VycmVudEVsZW1lbnQpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgUmVhY3RDdXJy
ZW50T3duZXIuY3VycmVudCA9IHRoaXMuX2N1cnJlbnRFbGVtZW50Ll9vd25lcjtcbiAgICAgICAg
ICAgIHJldHVybiBSZWFjdENoaWxkUmVjb25jaWxlci5pbnN0YW50aWF0ZUNoaWxkcmVuKG5lc3Rl
ZENoaWxkcmVuLCB0cmFuc2FjdGlvbiwgY29udGV4dCwgc2VsZkRlYnVnSUQpO1xuICAgICAgICAg
IH0gZmluYWxseSB7XG4gICAgICAgICAgICBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50ID0gbnVs
bDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBSZWFjdENo
aWxkUmVjb25jaWxlci5pbnN0YW50aWF0ZUNoaWxkcmVuKG5lc3RlZENoaWxkcmVuLCB0cmFuc2Fj
dGlvbiwgY29udGV4dCk7XG4gICAgfSxcblxuICAgIF9yZWNvbmNpbGVyVXBkYXRlQ2hpbGRyZW46
IGZ1bmN0aW9uIChwcmV2Q2hpbGRyZW4sIG5leHROZXN0ZWRDaGlsZHJlbkVsZW1lbnRzLCBtb3Vu
dEltYWdlcywgcmVtb3ZlZE5vZGVzLCB0cmFuc2FjdGlvbiwgY29udGV4dCkge1xuICAgICAgdmFy
IG5leHRDaGlsZHJlbjtcbiAgICAgIHZhciBzZWxmRGVidWdJRCA9IDA7XG4gICAgICBpZiAoZmFs
c2UpIHtcbiAgICAgICAgc2VsZkRlYnVnSUQgPSBnZXREZWJ1Z0lEKHRoaXMpO1xuICAgICAgICBp
ZiAodGhpcy5fY3VycmVudEVsZW1lbnQpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAg
UmVhY3RDdXJyZW50T3duZXIuY3VycmVudCA9IHRoaXMuX2N1cnJlbnRFbGVtZW50Ll9vd25lcjtc
biAgICAgICAgICAgIG5leHRDaGlsZHJlbiA9IGZsYXR0ZW5DaGlsZHJlbihuZXh0TmVzdGVkQ2hp
bGRyZW5FbGVtZW50cywgc2VsZkRlYnVnSUQpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAg
ICAgICAgICBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgICB9XG4g
ICAgICAgICAgUmVhY3RDaGlsZFJlY29uY2lsZXIudXBkYXRlQ2hpbGRyZW4ocHJldkNoaWxkcmVu
LCBuZXh0Q2hpbGRyZW4sIG1vdW50SW1hZ2VzLCByZW1vdmVkTm9kZXMsIHRyYW5zYWN0aW9uLCB0
aGlzLCB0aGlzLl9ob3N0Q29udGFpbmVySW5mbywgY29udGV4dCwgc2VsZkRlYnVnSUQpO1xuICAg
ICAgICAgIHJldHVybiBuZXh0Q2hpbGRyZW47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG5l
eHRDaGlsZHJlbiA9IGZsYXR0ZW5DaGlsZHJlbihuZXh0TmVzdGVkQ2hpbGRyZW5FbGVtZW50cywg
c2VsZkRlYnVnSUQpO1xuICAgICAgUmVhY3RDaGlsZFJlY29uY2lsZXIudXBkYXRlQ2hpbGRyZW4o
cHJldkNoaWxkcmVuLCBuZXh0Q2hpbGRyZW4sIG1vdW50SW1hZ2VzLCByZW1vdmVkTm9kZXMsIHRy
YW5zYWN0aW9uLCB0aGlzLCB0aGlzLl9ob3N0Q29udGFpbmVySW5mbywgY29udGV4dCwgc2VsZkRl
YnVnSUQpO1xuICAgICAgcmV0dXJuIG5leHRDaGlsZHJlbjtcbiAgICB9LFxuXG4gICAgLyoqXG4g
ICAgICogR2VuZXJhdGVzIGEgXCJtb3VudCBpbWFnZVwiIGZvciBlYWNoIG9mIHRoZSBzdXBwbGll
ZCBjaGlsZHJlbi4gSW4gdGhlIGNhc2VcbiAgICAgKiBvZiBgUmVhY3RET01Db21wb25lbnRgLCBh
IG1vdW50IGltYWdlIGlzIGEgc3RyaW5nIG9mIG1hcmt1cC5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSB7P29iamVjdH0gbmVzdGVkQ2hpbGRyZW4gTmVzdGVkIGNoaWxkIG1hcHMuXG4gICAgICogQHJl
dHVybiB7YXJyYXl9IEFuIGFycmF5IG9mIG1vdW50ZWQgcmVwcmVzZW50YXRpb25zLlxuICAgICAq
IEBpbnRlcm5hbFxuICAgICAqL1xuICAgIG1vdW50Q2hpbGRyZW46IGZ1bmN0aW9uIChuZXN0ZWRD
aGlsZHJlbiwgdHJhbnNhY3Rpb24sIGNvbnRleHQpIHtcbiAgICAgIHZhciBjaGlsZHJlbiA9IHRo
aXMuX3JlY29uY2lsZXJJbnN0YW50aWF0ZUNoaWxkcmVuKG5lc3RlZENoaWxkcmVuLCB0cmFuc2Fj
dGlvbiwgY29udGV4dCk7XG4gICAgICB0aGlzLl9yZW5kZXJlZENoaWxkcmVuID0gY2hpbGRyZW47
XG5cbiAgICAgIHZhciBtb3VudEltYWdlcyA9IFtdO1xuICAgICAgdmFyIGluZGV4ID0gMDtcbiAg
ICAgIGZvciAodmFyIG5hbWUgaW4gY2hpbGRyZW4pIHtcbiAgICAgICAgaWYgKGNoaWxkcmVuLmhh
c093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgICAgdmFyIGNoaWxkID0gY2hpbGRyZW5bbmFt
ZV07XG4gICAgICAgICAgdmFyIHNlbGZEZWJ1Z0lEID0gMDtcbiAgICAgICAgICBpZiAoZmFsc2Up
IHtcbiAgICAgICAgICAgIHNlbGZEZWJ1Z0lEID0gZ2V0RGVidWdJRCh0aGlzKTtcbiAgICAgICAg
ICB9XG4gICAgICAgICAgdmFyIG1vdW50SW1hZ2UgPSBSZWFjdFJlY29uY2lsZXIubW91bnRDb21w
b25lbnQoY2hpbGQsIHRyYW5zYWN0aW9uLCB0aGlzLCB0aGlzLl9ob3N0Q29udGFpbmVySW5mbywg
Y29udGV4dCwgc2VsZkRlYnVnSUQpO1xuICAgICAgICAgIGNoaWxkLl9tb3VudEluZGV4ID0gaW5k
ZXgrKztcbiAgICAgICAgICBtb3VudEltYWdlcy5wdXNoKG1vdW50SW1hZ2UpO1xuICAgICAgICB9
XG4gICAgICB9XG5cbiAgICAgIGlmIChmYWxzZSkge1xuICAgICAgICBzZXRDaGlsZHJlbkZvcklu
c3RydW1lbnRhdGlvbi5jYWxsKHRoaXMsIGNoaWxkcmVuKTtcbiAgICAgIH1cblxuICAgICAgcmV0
dXJuIG1vdW50SW1hZ2VzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZXBsYWNlcyBhbnkg
cmVuZGVyZWQgY2hpbGRyZW4gd2l0aCBhIHRleHQgY29udGVudCBzdHJpbmcuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0ge3N0cmluZ30gbmV4dENvbnRlbnQgU3RyaW5nIG9mIGNvbnRlbnQuXG4gICAg
ICogQGludGVybmFsXG4gICAgICovXG4gICAgdXBkYXRlVGV4dENvbnRlbnQ6IGZ1bmN0aW9uIChu
ZXh0Q29udGVudCkge1xuICAgICAgdmFyIHByZXZDaGlsZHJlbiA9IHRoaXMuX3JlbmRlcmVkQ2hp
bGRyZW47XG4gICAgICAvLyBSZW1vdmUgYW55IHJlbmRlcmVkIGNoaWxkcmVuLlxuICAgICAgUmVh
Y3RDaGlsZFJlY29uY2lsZXIudW5tb3VudENoaWxkcmVuKHByZXZDaGlsZHJlbiwgZmFsc2UpO1xu
ICAgICAgZm9yICh2YXIgbmFtZSBpbiBwcmV2Q2hpbGRyZW4pIHtcbiAgICAgICAgaWYgKHByZXZD
aGlsZHJlbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICAgICB0cnVlID8gIGZhbHNl
ID8gaW52YXJpYW50KGZhbHNlLCAndXBkYXRlVGV4dENvbnRlbnQgY2FsbGVkIG9uIG5vbi1lbXB0
eSBjb21wb25lbnQuJykgOiBfcHJvZEludmFyaWFudCgnMTE4JykgOiB2b2lkIDA7XG4gICAgICAg
IH1cbiAgICAgIH1cbiAgICAgIC8vIFNldCBuZXcgdGV4dCBjb250ZW50LlxuICAgICAgdmFyIHVw
ZGF0ZXMgPSBbbWFrZVRleHRDb250ZW50KG5leHRDb250ZW50KV07XG4gICAgICBwcm9jZXNzUXVl
dWUodGhpcywgdXBkYXRlcyk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJlcGxhY2VzIGFu
eSByZW5kZXJlZCBjaGlsZHJlbiB3aXRoIGEgbWFya3VwIHN0cmluZy5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSB7c3RyaW5nfSBuZXh0TWFya3VwIFN0cmluZyBvZiBtYXJrdXAuXG4gICAgICogQGlu
dGVybmFsXG4gICAgICovXG4gICAgdXBkYXRlTWFya3VwOiBmdW5jdGlvbiAobmV4dE1hcmt1cCkg
e1xuICAgICAgdmFyIHByZXZDaGlsZHJlbiA9IHRoaXMuX3JlbmRlcmVkQ2hpbGRyZW47XG4gICAg
ICAvLyBSZW1vdmUgYW55IHJlbmRlcmVkIGNoaWxkcmVuLlxuICAgICAgUmVhY3RDaGlsZFJlY29u
Y2lsZXIudW5tb3VudENoaWxkcmVuKHByZXZDaGlsZHJlbiwgZmFsc2UpO1xuICAgICAgZm9yICh2
YXIgbmFtZSBpbiBwcmV2Q2hpbGRyZW4pIHtcbiAgICAgICAgaWYgKHByZXZDaGlsZHJlbi5oYXNP
d25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICAgICB0cnVlID8gIGZhbHNlID8gaW52YXJpYW50
KGZhbHNlLCAndXBkYXRlVGV4dENvbnRlbnQgY2FsbGVkIG9uIG5vbi1lbXB0eSBjb21wb25lbnQu
JykgOiBfcHJvZEludmFyaWFudCgnMTE4JykgOiB2b2lkIDA7XG4gICAgICAgIH1cbiAgICAgIH1c
biAgICAgIHZhciB1cGRhdGVzID0gW21ha2VTZXRNYXJrdXAobmV4dE1hcmt1cCldO1xuICAgICAg
cHJvY2Vzc1F1ZXVlKHRoaXMsIHVwZGF0ZXMpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBV
cGRhdGVzIHRoZSByZW5kZXJlZCBjaGlsZHJlbiB3aXRoIG5ldyBjaGlsZHJlbi5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSB7P29iamVjdH0gbmV4dE5lc3RlZENoaWxkcmVuRWxlbWVudHMgTmVzdGVk
IGNoaWxkIGVsZW1lbnQgbWFwcy5cbiAgICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNh
Y3Rpb259IHRyYW5zYWN0aW9uXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgdXBkYXRl
Q2hpbGRyZW46IGZ1bmN0aW9uIChuZXh0TmVzdGVkQ2hpbGRyZW5FbGVtZW50cywgdHJhbnNhY3Rp
b24sIGNvbnRleHQpIHtcbiAgICAgIC8vIEhvb2sgdXNlZCBieSBSZWFjdCBBUlRcbiAgICAgIHRo
aXMuX3VwZGF0ZUNoaWxkcmVuKG5leHROZXN0ZWRDaGlsZHJlbkVsZW1lbnRzLCB0cmFuc2FjdGlv
biwgY29udGV4dCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7P29iamVjdH0g
bmV4dE5lc3RlZENoaWxkcmVuRWxlbWVudHMgTmVzdGVkIGNoaWxkIGVsZW1lbnQgbWFwcy5cbiAg
ICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAg
ICogQGZpbmFsXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuICAgIF91cGRhdGVDaGlsZHJl
bjogZnVuY3Rpb24gKG5leHROZXN0ZWRDaGlsZHJlbkVsZW1lbnRzLCB0cmFuc2FjdGlvbiwgY29u
dGV4dCkge1xuICAgICAgdmFyIHByZXZDaGlsZHJlbiA9IHRoaXMuX3JlbmRlcmVkQ2hpbGRyZW47
XG4gICAgICB2YXIgcmVtb3ZlZE5vZGVzID0ge307XG4gICAgICB2YXIgbW91bnRJbWFnZXMgPSBb
XTtcbiAgICAgIHZhciBuZXh0Q2hpbGRyZW4gPSB0aGlzLl9yZWNvbmNpbGVyVXBkYXRlQ2hpbGRy
ZW4ocHJldkNoaWxkcmVuLCBuZXh0TmVzdGVkQ2hpbGRyZW5FbGVtZW50cywgbW91bnRJbWFnZXMs
IHJlbW92ZWROb2RlcywgdHJhbnNhY3Rpb24sIGNvbnRleHQpO1xuICAgICAgaWYgKCFuZXh0Q2hp
bGRyZW4gJiYgIXByZXZDaGlsZHJlbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAg
ICB2YXIgdXBkYXRlcyA9IG51bGw7XG4gICAgICB2YXIgbmFtZTtcbiAgICAgIC8vIGBuZXh0SW5k
ZXhgIHdpbGwgaW5jcmVtZW50IGZvciBlYWNoIGNoaWxkIGluIGBuZXh0Q2hpbGRyZW5gLCBidXRc
biAgICAgIC8vIGBsYXN0SW5kZXhgIHdpbGwgYmUgdGhlIGxhc3QgaW5kZXggdmlzaXRlZCBpbiBg
cHJldkNoaWxkcmVuYC5cbiAgICAgIHZhciBuZXh0SW5kZXggPSAwO1xuICAgICAgdmFyIGxhc3RJ
bmRleCA9IDA7XG4gICAgICAvLyBgbmV4dE1vdW50SW5kZXhgIHdpbGwgaW5jcmVtZW50IGZvciBl
YWNoIG5ld2x5IG1vdW50ZWQgY2hpbGQuXG4gICAgICB2YXIgbmV4dE1vdW50SW5kZXggPSAwO1xu
ICAgICAgdmFyIGxhc3RQbGFjZWROb2RlID0gbnVsbDtcbiAgICAgIGZvciAobmFtZSBpbiBuZXh0
Q2hpbGRyZW4pIHtcbiAgICAgICAgaWYgKCFuZXh0Q2hpbGRyZW4uaGFzT3duUHJvcGVydHkobmFt
ZSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcHJldkNo
aWxkID0gcHJldkNoaWxkcmVuICYmIHByZXZDaGlsZHJlbltuYW1lXTtcbiAgICAgICAgdmFyIG5l
eHRDaGlsZCA9IG5leHRDaGlsZHJlbltuYW1lXTtcbiAgICAgICAgaWYgKHByZXZDaGlsZCA9PT0g
bmV4dENoaWxkKSB7XG4gICAgICAgICAgdXBkYXRlcyA9IGVucXVldWUodXBkYXRlcywgdGhpcy5t
b3ZlQ2hpbGQocHJldkNoaWxkLCBsYXN0UGxhY2VkTm9kZSwgbmV4dEluZGV4LCBsYXN0SW5kZXgp
KTtcbiAgICAgICAgICBsYXN0SW5kZXggPSBNYXRoLm1heChwcmV2Q2hpbGQuX21vdW50SW5kZXgs
IGxhc3RJbmRleCk7XG4gICAgICAgICAgcHJldkNoaWxkLl9tb3VudEluZGV4ID0gbmV4dEluZGV4
O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChwcmV2Q2hpbGQpIHtcbiAgICAgICAg
ICAgIC8vIFVwZGF0ZSBgbGFzdEluZGV4YCBiZWZvcmUgYF9tb3VudEluZGV4YCBnZXRzIHVuc2V0
IGJ5IHVubW91bnRpbmcuXG4gICAgICAgICAgICBsYXN0SW5kZXggPSBNYXRoLm1heChwcmV2Q2hp
bGQuX21vdW50SW5kZXgsIGxhc3RJbmRleCk7XG4gICAgICAgICAgICAvLyBUaGUgYHJlbW92ZWRO
b2Rlc2AgbG9vcCBiZWxvdyB3aWxsIGFjdHVhbGx5IHJlbW92ZSB0aGUgY2hpbGQuXG4gICAgICAg
ICAgfVxuICAgICAgICAgIC8vIFRoZSBjaGlsZCBtdXN0IGJlIGluc3RhbnRpYXRlZCBiZWZvcmUg
aXQncyBtb3VudGVkLlxuICAgICAgICAgIHVwZGF0ZXMgPSBlbnF1ZXVlKHVwZGF0ZXMsIHRoaXMu
X21vdW50Q2hpbGRBdEluZGV4KG5leHRDaGlsZCwgbW91bnRJbWFnZXNbbmV4dE1vdW50SW5kZXhd
LCBsYXN0UGxhY2VkTm9kZSwgbmV4dEluZGV4LCB0cmFuc2FjdGlvbiwgY29udGV4dCkpO1xuICAg
ICAgICAgIG5leHRNb3VudEluZGV4Kys7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dEluZGV4Kys7
XG4gICAgICAgIGxhc3RQbGFjZWROb2RlID0gUmVhY3RSZWNvbmNpbGVyLmdldEhvc3ROb2RlKG5l
eHRDaGlsZCk7XG4gICAgICB9XG4gICAgICAvLyBSZW1vdmUgY2hpbGRyZW4gdGhhdCBhcmUgbm8g
bG9uZ2VyIHByZXNlbnQuXG4gICAgICBmb3IgKG5hbWUgaW4gcmVtb3ZlZE5vZGVzKSB7XG4gICAg
ICAgIGlmIChyZW1vdmVkTm9kZXMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgICB1
cGRhdGVzID0gZW5xdWV1ZSh1cGRhdGVzLCB0aGlzLl91bm1vdW50Q2hpbGQocHJldkNoaWxkcmVu
W25hbWVdLCByZW1vdmVkTm9kZXNbbmFtZV0pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAg
aWYgKHVwZGF0ZXMpIHtcbiAgICAgICAgcHJvY2Vzc1F1ZXVlKHRoaXMsIHVwZGF0ZXMpO1xuICAg
ICAgfVxuICAgICAgdGhpcy5fcmVuZGVyZWRDaGlsZHJlbiA9IG5leHRDaGlsZHJlbjtcblxuICAg
ICAgaWYgKGZhbHNlKSB7XG4gICAgICAgIHNldENoaWxkcmVuRm9ySW5zdHJ1bWVudGF0aW9uLmNh
bGwodGhpcywgbmV4dENoaWxkcmVuKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAg
ICogVW5tb3VudHMgYWxsIHJlbmRlcmVkIGNoaWxkcmVuLiBUaGlzIHNob3VsZCBiZSB1c2VkIHRv
IGNsZWFuIHVwIGNoaWxkcmVuXG4gICAgICogd2hlbiB0aGlzIGNvbXBvbmVudCBpcyB1bm1vdW50
ZWQuIEl0IGRvZXMgbm90IGFjdHVhbGx5IHBlcmZvcm0gYW55XG4gICAgICogYmFja2VuZCBvcGVy
YXRpb25zLlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgdW5tb3VudENo
aWxkcmVuOiBmdW5jdGlvbiAoc2FmZWx5KSB7XG4gICAgICB2YXIgcmVuZGVyZWRDaGlsZHJlbiA9
IHRoaXMuX3JlbmRlcmVkQ2hpbGRyZW47XG4gICAgICBSZWFjdENoaWxkUmVjb25jaWxlci51bm1v
dW50Q2hpbGRyZW4ocmVuZGVyZWRDaGlsZHJlbiwgc2FmZWx5KTtcbiAgICAgIHRoaXMuX3JlbmRl
cmVkQ2hpbGRyZW4gPSBudWxsO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBNb3ZlcyBhIGNo
aWxkIGNvbXBvbmVudCB0byB0aGUgc3VwcGxpZWQgaW5kZXguXG4gICAgICpcbiAgICAgKiBAcGFy
YW0ge1JlYWN0Q29tcG9uZW50fSBjaGlsZCBDb21wb25lbnQgdG8gbW92ZS5cbiAgICAgKiBAcGFy
YW0ge251bWJlcn0gdG9JbmRleCBEZXN0aW5hdGlvbiBpbmRleCBvZiB0aGUgZWxlbWVudC5cbiAg
ICAgKiBAcGFyYW0ge251bWJlcn0gbGFzdEluZGV4IExhc3QgaW5kZXggdmlzaXRlZCBvZiB0aGUg
c2libGluZ3Mgb2YgYGNoaWxkYC5cbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG4gICAgbW92
ZUNoaWxkOiBmdW5jdGlvbiAoY2hpbGQsIGFmdGVyTm9kZSwgdG9JbmRleCwgbGFzdEluZGV4KSB7
XG4gICAgICAvLyBJZiB0aGUgaW5kZXggb2YgYGNoaWxkYCBpcyBsZXNzIHRoYW4gYGxhc3RJbmRl
eGAsIHRoZW4gaXQgbmVlZHMgdG9cbiAgICAgIC8vIGJlIG1vdmVkLiBPdGhlcndpc2UsIHdlIGRv
IG5vdCBuZWVkIHRvIG1vdmUgaXQgYmVjYXVzZSBhIGNoaWxkIHdpbGwgYmVcbiAgICAgIC8vIGlu
c2VydGVkIG9yIG1vdmVkIGJlZm9yZSBgY2hpbGRgLlxuICAgICAgaWYgKGNoaWxkLl9tb3VudElu
ZGV4IDwgbGFzdEluZGV4KSB7XG4gICAgICAgIHJldHVybiBtYWtlTW92ZShjaGlsZCwgYWZ0ZXJO
b2RlLCB0b0luZGV4KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRl
cyBhIGNoaWxkIGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UmVhY3RDb21wb25l
bnR9IGNoaWxkIENvbXBvbmVudCB0byBjcmVhdGUuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG1v
dW50SW1hZ2UgTWFya3VwIHRvIGluc2VydC5cbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG4g
ICAgY3JlYXRlQ2hpbGQ6IGZ1bmN0aW9uIChjaGlsZCwgYWZ0ZXJOb2RlLCBtb3VudEltYWdlKSB7
XG4gICAgICByZXR1cm4gbWFrZUluc2VydE1hcmt1cChtb3VudEltYWdlLCBhZnRlck5vZGUsIGNo
aWxkLl9tb3VudEluZGV4KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhIGNo
aWxkIGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGNo
aWxkIENoaWxkIHRvIHJlbW92ZS5cbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG4gICAgcmVt
b3ZlQ2hpbGQ6IGZ1bmN0aW9uIChjaGlsZCwgbm9kZSkge1xuICAgICAgcmV0dXJuIG1ha2VSZW1v
dmUoY2hpbGQsIG5vZGUpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBNb3VudHMgYSBjaGls
ZCB3aXRoIHRoZSBzdXBwbGllZCBuYW1lLlxuICAgICAqXG4gICAgICogTk9URTogVGhpcyBpcyBw
YXJ0IG9mIGB1cGRhdGVDaGlsZHJlbmAgYW5kIGlzIGhlcmUgZm9yIHJlYWRhYmlsaXR5LlxuICAg
ICAqXG4gICAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gY2hpbGQgQ29tcG9uZW50IHRvIG1v
dW50LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5hbWUgb2YgdGhlIGNoaWxkLlxuICAg
ICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBJbmRleCBhdCB3aGljaCB0byBpbnNlcnQgdGhlIGNo
aWxkLlxuICAgICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rp
b25cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9tb3VudENoaWxkQXRJbmRleDogZnVu
Y3Rpb24gKGNoaWxkLCBtb3VudEltYWdlLCBhZnRlck5vZGUsIGluZGV4LCB0cmFuc2FjdGlvbiwg
Y29udGV4dCkge1xuICAgICAgY2hpbGQuX21vdW50SW5kZXggPSBpbmRleDtcbiAgICAgIHJldHVy
biB0aGlzLmNyZWF0ZUNoaWxkKGNoaWxkLCBhZnRlck5vZGUsIG1vdW50SW1hZ2UpO1xuICAgIH0s
XG5cbiAgICAvKipcbiAgICAgKiBVbm1vdW50cyBhIHJlbmRlcmVkIGNoaWxkLlxuICAgICAqXG4g
ICAgICogTk9URTogVGhpcyBpcyBwYXJ0IG9mIGB1cGRhdGVDaGlsZHJlbmAgYW5kIGlzIGhlcmUg
Zm9yIHJlYWRhYmlsaXR5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0g
Y2hpbGQgQ29tcG9uZW50IHRvIHVubW91bnQuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAg
ICBfdW5tb3VudENoaWxkOiBmdW5jdGlvbiAoY2hpbGQsIG5vZGUpIHtcbiAgICAgIHZhciB1cGRh
dGUgPSB0aGlzLnJlbW92ZUNoaWxkKGNoaWxkLCBub2RlKTtcbiAgICAgIGNoaWxkLl9tb3VudElu
ZGV4ID0gbnVsbDtcbiAgICAgIHJldHVybiB1cGRhdGU7XG4gICAgfVxuICB9XG59O1xuXG5tb2R1
bGUuZXhwb3J0cyA9IFJlYWN0TXVsdGlDaGlsZDtcblxuLyoqKi8gfSksXG4vKiAxNTUgKi9cbi8q
KiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxu
XCJ1c2Ugc3RyaWN0XCI7XG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJv
Y2Vzcykgey8qKlxuICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNl
ZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZp
bGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9u
YWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRT
IGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG5cblxudmFyIFJlYWN0UmVj
b25jaWxlciA9IF9fd2VicGFja19yZXF1aXJlX18oMTYpO1xuXG52YXIgaW5zdGFudGlhdGVSZWFj
dENvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oNzMpO1xudmFyIEtleUVzY2FwZVV0aWxz
ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NCk7XG52YXIgc2hvdWxkVXBkYXRlUmVhY3RDb21wb25l
bnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQzKTtcbnZhciB0cmF2ZXJzZUFsbENoaWxkcmVuID0g
X193ZWJwYWNrX3JlcXVpcmVfXyg3Nyk7XG52YXIgd2FybmluZyA9IF9fd2VicGFja19yZXF1aXJl
X18oMSk7XG5cbnZhciBSZWFjdENvbXBvbmVudFRyZWVIb29rO1xuXG5pZiAodHlwZW9mIHByb2Nl
c3MgIT09ICd1bmRlZmluZWQnICYmIE9iamVjdCh7XCJOT0RFX0VOVlwiOlwicHJvZHVjdGlvblwi
LFwiUFVCTElDX1VSTFwiOlwiLlwifSkgJiYgXCJwcm9kdWN0aW9uXCIgPT09ICd0ZXN0Jykge1xu
ICAvLyBUZW1wb3JhcnkgaGFjay5cbiAgLy8gSW5saW5lIHJlcXVpcmVzIGRvbid0IHdvcmsgd2Vs
bCB3aXRoIEplc3Q6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1
ZXMvNzI0MFxuICAvLyBSZW1vdmUgdGhlIGlubGluZSByZXF1aXJlcyB3aGVuIHdlIGRvbid0IG5l
ZWQgdGhlbSBhbnltb3JlOlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3Qv
cHVsbC83MTc4XG4gIFJlYWN0Q29tcG9uZW50VHJlZUhvb2sgPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KDc4KTtcbn1cblxuZnVuY3Rpb24gaW5zdGFudGlhdGVDaGlsZChjaGlsZEluc3RhbmNlcywgY2hp
bGQsIG5hbWUsIHNlbGZEZWJ1Z0lEKSB7XG4gIC8vIFdlIGZvdW5kIGEgY29tcG9uZW50IGluc3Rh
bmNlLlxuICB2YXIga2V5VW5pcXVlID0gY2hpbGRJbnN0YW5jZXNbbmFtZV0gPT09IHVuZGVmaW5l
ZDtcbiAgaWYgKGZhbHNlKSB7XG4gICAgaWYgKCFSZWFjdENvbXBvbmVudFRyZWVIb29rKSB7XG4g
ICAgICBSZWFjdENvbXBvbmVudFRyZWVIb29rID0gcmVxdWlyZSgncmVhY3QvbGliL1JlYWN0Q29t
cG9uZW50VHJlZUhvb2snKTtcbiAgICB9XG4gICAgaWYgKCFrZXlVbmlxdWUpIHtcbiAgICAgIHBy
b2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnZmxh
dHRlbkNoaWxkcmVuKC4uLik6IEVuY291bnRlcmVkIHR3byBjaGlsZHJlbiB3aXRoIHRoZSBzYW1l
IGtleSwgJyArICdgJXNgLiBDaGlsZCBrZXlzIG11c3QgYmUgdW5pcXVlOyB3aGVuIHR3byBjaGls
ZHJlbiBzaGFyZSBhIGtleSwgb25seSAnICsgJ3RoZSBmaXJzdCBjaGlsZCB3aWxsIGJlIHVzZWQu
JXMnLCBLZXlFc2NhcGVVdGlscy51bmVzY2FwZShuYW1lKSwgUmVhY3RDb21wb25lbnRUcmVlSG9v
ay5nZXRTdGFja0FkZGVuZHVtQnlJRChzZWxmRGVidWdJRCkpIDogdm9pZCAwO1xuICAgIH1cbiAg
fVxuICBpZiAoY2hpbGQgIT0gbnVsbCAmJiBrZXlVbmlxdWUpIHtcbiAgICBjaGlsZEluc3RhbmNl
c1tuYW1lXSA9IGluc3RhbnRpYXRlUmVhY3RDb21wb25lbnQoY2hpbGQsIHRydWUpO1xuICB9XG59
XG5cbi8qKlxuICogUmVhY3RDaGlsZFJlY29uY2lsZXIgcHJvdmlkZXMgaGVscGVycyBmb3IgaW5p
dGlhbGl6aW5nIG9yIHVwZGF0aW5nIGEgc2V0IG9mXG4gKiBjaGlsZHJlbi4gSXRzIG91dHB1dCBp
cyBzdWl0YWJsZSBmb3IgcGFzc2luZyBpdCBvbnRvIFJlYWN0TXVsdGlDaGlsZCB3aGljaFxuICog
ZG9lcyBkaWZmZWQgcmVvcmRlcmluZyBhbmQgaW5zZXJ0aW9uLlxuICovXG52YXIgUmVhY3RDaGls
ZFJlY29uY2lsZXIgPSB7XG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYSBcIm1vdW50IGltYWdlXCIg
Zm9yIGVhY2ggb2YgdGhlIHN1cHBsaWVkIGNoaWxkcmVuLiBJbiB0aGUgY2FzZVxuICAgKiBvZiBg
UmVhY3RET01Db21wb25lbnRgLCBhIG1vdW50IGltYWdlIGlzIGEgc3RyaW5nIG9mIG1hcmt1cC5c
biAgICpcbiAgICogQHBhcmFtIHs/b2JqZWN0fSBuZXN0ZWRDaGlsZE5vZGVzIE5lc3RlZCBjaGls
ZCBtYXBzLlxuICAgKiBAcmV0dXJuIHs/b2JqZWN0fSBBIHNldCBvZiBjaGlsZCBpbnN0YW5jZXMu
XG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgaW5zdGFudGlhdGVDaGlsZHJlbjogZnVuY3Rpb24g
KG5lc3RlZENoaWxkTm9kZXMsIHRyYW5zYWN0aW9uLCBjb250ZXh0LCBzZWxmRGVidWdJRCkgLy8g
MCBpbiBwcm9kdWN0aW9uIGFuZCBmb3Igcm9vdHNcbiAge1xuICAgIGlmIChuZXN0ZWRDaGlsZE5v
ZGVzID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgY2hpbGRJ
bnN0YW5jZXMgPSB7fTtcblxuICAgIGlmIChmYWxzZSkge1xuICAgICAgdHJhdmVyc2VBbGxDaGls
ZHJlbihuZXN0ZWRDaGlsZE5vZGVzLCBmdW5jdGlvbiAoY2hpbGRJbnN0cywgY2hpbGQsIG5hbWUp
IHtcbiAgICAgICAgcmV0dXJuIGluc3RhbnRpYXRlQ2hpbGQoY2hpbGRJbnN0cywgY2hpbGQsIG5h
bWUsIHNlbGZEZWJ1Z0lEKTtcbiAgICAgIH0sIGNoaWxkSW5zdGFuY2VzKTtcbiAgICB9IGVsc2Ug
e1xuICAgICAgdHJhdmVyc2VBbGxDaGlsZHJlbihuZXN0ZWRDaGlsZE5vZGVzLCBpbnN0YW50aWF0
ZUNoaWxkLCBjaGlsZEluc3RhbmNlcyk7XG4gICAgfVxuICAgIHJldHVybiBjaGlsZEluc3RhbmNl
cztcbiAgfSxcblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcmVuZGVyZWQgY2hpbGRyZW4gYW5k
IHJldHVybnMgYSBuZXcgc2V0IG9mIGNoaWxkcmVuLlxuICAgKlxuICAgKiBAcGFyYW0gez9vYmpl
Y3R9IHByZXZDaGlsZHJlbiBQcmV2aW91c2x5IGluaXRpYWxpemVkIHNldCBvZiBjaGlsZHJlbi5c
biAgICogQHBhcmFtIHs/b2JqZWN0fSBuZXh0Q2hpbGRyZW4gRmxhdCBjaGlsZCBlbGVtZW50IG1h
cHMuXG4gICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25c
biAgICogQHBhcmFtIHtvYmplY3R9IGNvbnRleHRcbiAgICogQHJldHVybiB7P29iamVjdH0gQSBu
ZXcgc2V0IG9mIGNoaWxkIGluc3RhbmNlcy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICB1cGRh
dGVDaGlsZHJlbjogZnVuY3Rpb24gKHByZXZDaGlsZHJlbiwgbmV4dENoaWxkcmVuLCBtb3VudElt
YWdlcywgcmVtb3ZlZE5vZGVzLCB0cmFuc2FjdGlvbiwgaG9zdFBhcmVudCwgaG9zdENvbnRhaW5l
ckluZm8sIGNvbnRleHQsIHNlbGZEZWJ1Z0lEKSAvLyAwIGluIHByb2R1Y3Rpb24gYW5kIGZvciBy
b290c1xuICB7XG4gICAgLy8gV2UgY3VycmVudGx5IGRvbid0IGhhdmUgYSB3YXkgdG8gdHJhY2sg
bW92ZXMgaGVyZSBidXQgaWYgd2UgdXNlIGl0ZXJhdG9yc1xuICAgIC8vIGluc3RlYWQgb2YgZm9y
Li5pbiB3ZSBjYW4gemlwIHRoZSBpdGVyYXRvcnMgYW5kIGNoZWNrIGlmIGFuIGl0ZW0gaGFzXG4g
ICAgLy8gbW92ZWQuXG4gICAgLy8gVE9ETzogSWYgbm90aGluZyBoYXMgY2hhbmdlZCwgcmV0dXJu
IHRoZSBwcmV2Q2hpbGRyZW4gb2JqZWN0IHNvIHRoYXQgd2VcbiAgICAvLyBjYW4gcXVpY2tseSBi
YWlsb3V0IGlmIG5vdGhpbmcgaGFzIGNoYW5nZWQuXG4gICAgaWYgKCFuZXh0Q2hpbGRyZW4gJiYg
IXByZXZDaGlsZHJlbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgbmFtZTtcbiAg
ICB2YXIgcHJldkNoaWxkO1xuICAgIGZvciAobmFtZSBpbiBuZXh0Q2hpbGRyZW4pIHtcbiAgICAg
IGlmICghbmV4dENoaWxkcmVuLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIGNvbnRp
bnVlO1xuICAgICAgfVxuICAgICAgcHJldkNoaWxkID0gcHJldkNoaWxkcmVuICYmIHByZXZDaGls
ZHJlbltuYW1lXTtcbiAgICAgIHZhciBwcmV2RWxlbWVudCA9IHByZXZDaGlsZCAmJiBwcmV2Q2hp
bGQuX2N1cnJlbnRFbGVtZW50O1xuICAgICAgdmFyIG5leHRFbGVtZW50ID0gbmV4dENoaWxkcmVu
W25hbWVdO1xuICAgICAgaWYgKHByZXZDaGlsZCAhPSBudWxsICYmIHNob3VsZFVwZGF0ZVJlYWN0
Q29tcG9uZW50KHByZXZFbGVtZW50LCBuZXh0RWxlbWVudCkpIHtcbiAgICAgICAgUmVhY3RSZWNv
bmNpbGVyLnJlY2VpdmVDb21wb25lbnQocHJldkNoaWxkLCBuZXh0RWxlbWVudCwgdHJhbnNhY3Rp
b24sIGNvbnRleHQpO1xuICAgICAgICBuZXh0Q2hpbGRyZW5bbmFtZV0gPSBwcmV2Q2hpbGQ7XG4g
ICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocHJldkNoaWxkKSB7XG4gICAgICAgICAgcmVtb3Zl
ZE5vZGVzW25hbWVdID0gUmVhY3RSZWNvbmNpbGVyLmdldEhvc3ROb2RlKHByZXZDaGlsZCk7XG4g
ICAgICAgICAgUmVhY3RSZWNvbmNpbGVyLnVubW91bnRDb21wb25lbnQocHJldkNoaWxkLCBmYWxz
ZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGhlIGNoaWxkIG11c3QgYmUgaW5zdGFudGlhdGVk
IGJlZm9yZSBpdCdzIG1vdW50ZWQuXG4gICAgICAgIHZhciBuZXh0Q2hpbGRJbnN0YW5jZSA9IGlu
c3RhbnRpYXRlUmVhY3RDb21wb25lbnQobmV4dEVsZW1lbnQsIHRydWUpO1xuICAgICAgICBuZXh0
Q2hpbGRyZW5bbmFtZV0gPSBuZXh0Q2hpbGRJbnN0YW5jZTtcbiAgICAgICAgLy8gQ3JlYXRpbmcg
bW91bnQgaW1hZ2Ugbm93IGVuc3VyZXMgcmVmcyBhcmUgcmVzb2x2ZWQgaW4gcmlnaHQgb3JkZXJc
biAgICAgICAgLy8gKHNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC83
MTAxIGZvciBleHBsYW5hdGlvbikuXG4gICAgICAgIHZhciBuZXh0Q2hpbGRNb3VudEltYWdlID0g
UmVhY3RSZWNvbmNpbGVyLm1vdW50Q29tcG9uZW50KG5leHRDaGlsZEluc3RhbmNlLCB0cmFuc2Fj
dGlvbiwgaG9zdFBhcmVudCwgaG9zdENvbnRhaW5lckluZm8sIGNvbnRleHQsIHNlbGZEZWJ1Z0lE
KTtcbiAgICAgICAgbW91bnRJbWFnZXMucHVzaChuZXh0Q2hpbGRNb3VudEltYWdlKTtcbiAgICAg
IH1cbiAgICB9XG4gICAgLy8gVW5tb3VudCBjaGlsZHJlbiB0aGF0IGFyZSBubyBsb25nZXIgcHJl
c2VudC5cbiAgICBmb3IgKG5hbWUgaW4gcHJldkNoaWxkcmVuKSB7XG4gICAgICBpZiAocHJldkNo
aWxkcmVuLmhhc093blByb3BlcnR5KG5hbWUpICYmICEobmV4dENoaWxkcmVuICYmIG5leHRDaGls
ZHJlbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkpIHtcbiAgICAgICAgcHJldkNoaWxkID0gcHJldkNo
aWxkcmVuW25hbWVdO1xuICAgICAgICByZW1vdmVkTm9kZXNbbmFtZV0gPSBSZWFjdFJlY29uY2ls
ZXIuZ2V0SG9zdE5vZGUocHJldkNoaWxkKTtcbiAgICAgICAgUmVhY3RSZWNvbmNpbGVyLnVubW91
bnRDb21wb25lbnQocHJldkNoaWxkLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4g
IC8qKlxuICAgKiBVbm1vdW50cyBhbGwgcmVuZGVyZWQgY2hpbGRyZW4uIFRoaXMgc2hvdWxkIGJl
IHVzZWQgdG8gY2xlYW4gdXAgY2hpbGRyZW5cbiAgICogd2hlbiB0aGlzIGNvbXBvbmVudCBpcyB1
bm1vdW50ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7P29iamVjdH0gcmVuZGVyZWRDaGlsZHJlbiBQ
cmV2aW91c2x5IGluaXRpYWxpemVkIHNldCBvZiBjaGlsZHJlbi5cbiAgICogQGludGVybmFsXG4g
ICAqL1xuICB1bm1vdW50Q2hpbGRyZW46IGZ1bmN0aW9uIChyZW5kZXJlZENoaWxkcmVuLCBzYWZl
bHkpIHtcbiAgICBmb3IgKHZhciBuYW1lIGluIHJlbmRlcmVkQ2hpbGRyZW4pIHtcbiAgICAgIGlm
IChyZW5kZXJlZENoaWxkcmVuLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIHZhciBy
ZW5kZXJlZENoaWxkID0gcmVuZGVyZWRDaGlsZHJlbltuYW1lXTtcbiAgICAgICAgUmVhY3RSZWNv
bmNpbGVyLnVubW91bnRDb21wb25lbnQocmVuZGVyZWRDaGlsZCwgc2FmZWx5KTtcbiAgICAgIH1c
biAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RDaGlsZFJlY29uY2lsZXI7
XG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoZXhwb3J0cywgX193ZWJwYWNrX3Jl
cXVpcmVfXyg3MikpKVxuXG4vKioqLyB9KSxcbi8qIDE1NiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtc
bi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRl
ciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4g
dGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3Jh
bnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUg
aW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG5cblxudmFyIF9wcm9kSW52YXJpYW50
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKSxcbiAgICBfYXNzaWduID0gX193ZWJwYWNrX3JlcXVp
cmVfXygzKTtcblxudmFyIFJlYWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7XG52YXIgUmVh
Y3RDb21wb25lbnRFbnZpcm9ubWVudCA9IF9fd2VicGFja19yZXF1aXJlX18oNDEpO1xudmFyIFJl
YWN0Q3VycmVudE93bmVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XG52YXIgUmVhY3RFcnJv
clV0aWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMyk7XG52YXIgUmVhY3RJbnN0YW5jZU1hcCA9
IF9fd2VicGFja19yZXF1aXJlX18oMjIpO1xudmFyIFJlYWN0SW5zdHJ1bWVudGF0aW9uID0gX193
ZWJwYWNrX3JlcXVpcmVfXyg3KTtcbnZhciBSZWFjdE5vZGVUeXBlcyA9IF9fd2VicGFja19yZXF1
aXJlX18oNzQpO1xudmFyIFJlYWN0UmVjb25jaWxlciA9IF9fd2VicGFja19yZXF1aXJlX18oMTYp
O1xuXG5pZiAoZmFsc2UpIHtcbiAgdmFyIGNoZWNrUmVhY3RUeXBlU3BlYyA9IHJlcXVpcmUoJy4v
Y2hlY2tSZWFjdFR5cGVTcGVjJyk7XG59XG5cbnZhciBlbXB0eU9iamVjdCA9IF9fd2VicGFja19y
ZXF1aXJlX18oMjMpO1xudmFyIGludmFyaWFudCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52
YXIgc2hhbGxvd0VxdWFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Mik7XG52YXIgc2hvdWxkVXBk
YXRlUmVhY3RDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQzKTtcbnZhciB3YXJuaW5n
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcblxudmFyIENvbXBvc2l0ZVR5cGVzID0ge1xuICBJ
bXB1cmVDbGFzczogMCxcbiAgUHVyZUNsYXNzOiAxLFxuICBTdGF0ZWxlc3NGdW5jdGlvbmFsOiAy
XG59O1xuXG5mdW5jdGlvbiBTdGF0ZWxlc3NDb21wb25lbnQoQ29tcG9uZW50KSB7fVxuU3RhdGVs
ZXNzQ29tcG9uZW50LnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBDb21w
b25lbnQgPSBSZWFjdEluc3RhbmNlTWFwLmdldCh0aGlzKS5fY3VycmVudEVsZW1lbnQudHlwZTtc
biAgdmFyIGVsZW1lbnQgPSBDb21wb25lbnQodGhpcy5wcm9wcywgdGhpcy5jb250ZXh0LCB0aGlz
LnVwZGF0ZXIpO1xuICB3YXJuSWZJbnZhbGlkRWxlbWVudChDb21wb25lbnQsIGVsZW1lbnQpO1xu
ICByZXR1cm4gZWxlbWVudDtcbn07XG5cbmZ1bmN0aW9uIHdhcm5JZkludmFsaWRFbGVtZW50KENv
bXBvbmVudCwgZWxlbWVudCkge1xuICBpZiAoZmFsc2UpIHtcbiAgICBwcm9jZXNzLmVudi5OT0RF
X0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhlbGVtZW50ID09PSBudWxsIHx8IGVsZW1l
bnQgPT09IGZhbHNlIHx8IFJlYWN0LmlzVmFsaWRFbGVtZW50KGVsZW1lbnQpLCAnJXMoLi4uKTog
QSB2YWxpZCBSZWFjdCBlbGVtZW50IChvciBudWxsKSBtdXN0IGJlIHJldHVybmVkLiBZb3UgbWF5
IGhhdmUgJyArICdyZXR1cm5lZCB1bmRlZmluZWQsIGFuIGFycmF5IG9yIHNvbWUgb3RoZXIgaW52
YWxpZCBvYmplY3QuJywgQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lIHx8
ICdDb21wb25lbnQnKSA6IHZvaWQgMDtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3By
b2R1Y3Rpb24nID8gd2FybmluZyghQ29tcG9uZW50LmNoaWxkQ29udGV4dFR5cGVzLCAnJXMoLi4u
KTogY2hpbGRDb250ZXh0VHlwZXMgY2Fubm90IGJlIGRlZmluZWQgb24gYSBmdW5jdGlvbmFsIGNv
bXBvbmVudC4nLCBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUgfHwgJ0Nv
bXBvbmVudCcpIDogdm9pZCAwO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNob3VsZENvbnN0cnVjdChD
b21wb25lbnQpIHtcbiAgcmV0dXJuICEhKENvbXBvbmVudC5wcm90b3R5cGUgJiYgQ29tcG9uZW50
LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KTtcbn1cblxuZnVuY3Rpb24gaXNQdXJlQ29tcG9u
ZW50KENvbXBvbmVudCkge1xuICByZXR1cm4gISEoQ29tcG9uZW50LnByb3RvdHlwZSAmJiBDb21w
b25lbnQucHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50KTtcbn1cblxuLy8gU2VwYXJhdGVk
IGludG8gYSBmdW5jdGlvbiB0byBjb250YWluIGRlb3B0aW1pemF0aW9ucyBjYXVzZWQgYnkgdHJ5
L2ZpbmFsbHkuXG5mdW5jdGlvbiBtZWFzdXJlTGlmZUN5Y2xlUGVyZihmbiwgZGVidWdJRCwgdGlt
ZXJUeXBlKSB7XG4gIGlmIChkZWJ1Z0lEID09PSAwKSB7XG4gICAgLy8gVG9wLWxldmVsIHdyYXBw
ZXJzIChzZWUgUmVhY3RNb3VudCkgYW5kIGVtcHR5IGNvbXBvbmVudHMgKHNlZVxuICAgIC8vIFJl
YWN0RE9NRW1wdHlDb21wb25lbnQpIGFyZSBpbnZpc2libGUgdG8gaG9va3MgYW5kIGRldnRvb2xz
LlxuICAgIC8vIEJvdGggYXJlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgdGhhdCBzaG91bGQgZ28g
YXdheSBpbiB0aGUgZnV0dXJlLlxuICAgIHJldHVybiBmbigpO1xuICB9XG5cbiAgUmVhY3RJbnN0
cnVtZW50YXRpb24uZGVidWdUb29sLm9uQmVnaW5MaWZlQ3ljbGVUaW1lcihkZWJ1Z0lELCB0aW1l
clR5cGUpO1xuICB0cnkge1xuICAgIHJldHVybiBmbigpO1xuICB9IGZpbmFsbHkge1xuICAgIFJl
YWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vbkVuZExpZmVDeWNsZVRpbWVyKGRlYnVnSUQs
IHRpbWVyVHlwZSk7XG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0gVGhlIExp
ZmUtQ3ljbGUgb2YgYSBDb21wb3NpdGUgQ29tcG9uZW50IC0tLS0tLS0tLS0tLS0tLS0tLVxuICpc
biAqIC0gY29uc3RydWN0b3I6IEluaXRpYWxpemF0aW9uIG9mIHN0YXRlLiBUaGUgaW5zdGFuY2Ug
aXMgbm93IHJldGFpbmVkLlxuICogICAtIGNvbXBvbmVudFdpbGxNb3VudFxuICogICAtIHJlbmRl
clxuICogICAtIFtjaGlsZHJlbidzIGNvbnN0cnVjdG9yc11cbiAqICAgICAtIFtjaGlsZHJlbidz
IGNvbXBvbmVudFdpbGxNb3VudCBhbmQgcmVuZGVyXVxuICogICAgIC0gW2NoaWxkcmVuJ3MgY29t
cG9uZW50RGlkTW91bnRdXG4gKiAgICAgLSBjb21wb25lbnREaWRNb3VudFxuICpcbiAqICAgICAg
IFVwZGF0ZSBQaGFzZXM6XG4gKiAgICAgICAtIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgKG9u
bHkgY2FsbGVkIGlmIHBhcmVudCB1cGRhdGVkKVxuICogICAgICAgLSBzaG91bGRDb21wb25lbnRV
cGRhdGVcbiAqICAgICAgICAgLSBjb21wb25lbnRXaWxsVXBkYXRlXG4gKiAgICAgICAgICAgLSBy
ZW5kZXJcbiAqICAgICAgICAgICAtIFtjaGlsZHJlbidzIGNvbnN0cnVjdG9ycyBvciByZWNlaXZl
IHByb3BzIHBoYXNlc11cbiAqICAgICAgICAgLSBjb21wb25lbnREaWRVcGRhdGVcbiAqXG4gKiAg
ICAgLSBjb21wb25lbnRXaWxsVW5tb3VudFxuICogICAgIC0gW2NoaWxkcmVuJ3MgY29tcG9uZW50
V2lsbFVubW91bnRdXG4gKiAgIC0gW2NoaWxkcmVuIGRlc3Ryb3llZF1cbiAqIC0gKGRlc3Ryb3ll
ZCk6IFRoZSBpbnN0YW5jZSBpcyBub3cgYmxhbmssIHJlbGVhc2VkIGJ5IFJlYWN0IGFuZCByZWFk
eSBmb3IgR0MuXG4gKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG4vKipcbiAqIEFu
IGluY3JlbWVudGluZyBJRCBhc3NpZ25lZCB0byBlYWNoIGNvbXBvbmVudCB3aGVuIGl0IGlzIG1v
dW50ZWQuIFRoaXMgaXNcbiAqIHVzZWQgdG8gZW5mb3JjZSB0aGUgb3JkZXIgaW4gd2hpY2ggYFJl
YWN0VXBkYXRlc2AgdXBkYXRlcyBkaXJ0eSBjb21wb25lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4g
Ki9cbnZhciBuZXh0TW91bnRJRCA9IDE7XG5cbi8qKlxuICogQGxlbmRzIHtSZWFjdENvbXBvc2l0
ZUNvbXBvbmVudC5wcm90b3R5cGV9XG4gKi9cbnZhciBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCA9
IHtcbiAgLyoqXG4gICAqIEJhc2UgY29uc3RydWN0b3IgZm9yIGFsbCBjb21wb3NpdGUgY29tcG9u
ZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudFxuICAgKiBAZmlu
YWxcbiAgICogQGludGVybmFsXG4gICAqL1xuICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uIChlbGVtZW50
KSB7XG4gICAgdGhpcy5fY3VycmVudEVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMuX3Jvb3RO
b2RlSUQgPSAwO1xuICAgIHRoaXMuX2NvbXBvc2l0ZVR5cGUgPSBudWxsO1xuICAgIHRoaXMuX2lu
c3RhbmNlID0gbnVsbDtcbiAgICB0aGlzLl9ob3N0UGFyZW50ID0gbnVsbDtcbiAgICB0aGlzLl9o
b3N0Q29udGFpbmVySW5mbyA9IG51bGw7XG5cbiAgICAvLyBTZWUgUmVhY3RVcGRhdGVRdWV1ZVxu
ICAgIHRoaXMuX3VwZGF0ZUJhdGNoTnVtYmVyID0gbnVsbDtcbiAgICB0aGlzLl9wZW5kaW5nRWxl
bWVudCA9IG51bGw7XG4gICAgdGhpcy5fcGVuZGluZ1N0YXRlUXVldWUgPSBudWxsO1xuICAgIHRo
aXMuX3BlbmRpbmdSZXBsYWNlU3RhdGUgPSBmYWxzZTtcbiAgICB0aGlzLl9wZW5kaW5nRm9yY2VV
cGRhdGUgPSBmYWxzZTtcblxuICAgIHRoaXMuX3JlbmRlcmVkTm9kZVR5cGUgPSBudWxsO1xuICAg
IHRoaXMuX3JlbmRlcmVkQ29tcG9uZW50ID0gbnVsbDtcbiAgICB0aGlzLl9jb250ZXh0ID0gbnVs
bDtcbiAgICB0aGlzLl9tb3VudE9yZGVyID0gMDtcbiAgICB0aGlzLl90b3BMZXZlbFdyYXBwZXIg
PSBudWxsO1xuXG4gICAgLy8gU2VlIFJlYWN0VXBkYXRlcyBhbmQgUmVhY3RVcGRhdGVRdWV1ZS5c
biAgICB0aGlzLl9wZW5kaW5nQ2FsbGJhY2tzID0gbnVsbDtcblxuICAgIC8vIENvbXBvbmVudFdp
bGxVbm1vdW50IHNoYWxsIG9ubHkgYmUgY2FsbGVkIG9uY2VcbiAgICB0aGlzLl9jYWxsZWRDb21w
b25lbnRXaWxsVW5tb3VudCA9IGZhbHNlO1xuXG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICB0aGlz
Ll93YXJuZWRBYm91dFJlZnNJblJlbmRlciA9IGZhbHNlO1xuICAgIH1cbiAgfSxcblxuICAvKipc
biAgICogSW5pdGlhbGl6ZXMgdGhlIGNvbXBvbmVudCwgcmVuZGVycyBtYXJrdXAsIGFuZCByZWdp
c3RlcnMgZXZlbnQgbGlzdGVuZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxl
VHJhbnNhY3Rpb258UmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25c
biAgICogQHBhcmFtIHs/b2JqZWN0fSBob3N0UGFyZW50XG4gICAqIEBwYXJhbSB7P29iamVjdH0g
aG9zdENvbnRhaW5lckluZm9cbiAgICogQHBhcmFtIHs/b2JqZWN0fSBjb250ZXh0XG4gICAqIEBy
ZXR1cm4gez9zdHJpbmd9IFJlbmRlcmVkIG1hcmt1cCB0byBiZSBpbnNlcnRlZCBpbnRvIHRoZSBE
T00uXG4gICAqIEBmaW5hbFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG1vdW50Q29tcG9uZW50
OiBmdW5jdGlvbiAodHJhbnNhY3Rpb24sIGhvc3RQYXJlbnQsIGhvc3RDb250YWluZXJJbmZvLCBj
b250ZXh0KSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuX2NvbnRleHQgPSBj
b250ZXh0O1xuICAgIHRoaXMuX21vdW50T3JkZXIgPSBuZXh0TW91bnRJRCsrO1xuICAgIHRoaXMu
X2hvc3RQYXJlbnQgPSBob3N0UGFyZW50O1xuICAgIHRoaXMuX2hvc3RDb250YWluZXJJbmZvID0g
aG9zdENvbnRhaW5lckluZm87XG5cbiAgICB2YXIgcHVibGljUHJvcHMgPSB0aGlzLl9jdXJyZW50
RWxlbWVudC5wcm9wcztcbiAgICB2YXIgcHVibGljQ29udGV4dCA9IHRoaXMuX3Byb2Nlc3NDb250
ZXh0KGNvbnRleHQpO1xuXG4gICAgdmFyIENvbXBvbmVudCA9IHRoaXMuX2N1cnJlbnRFbGVtZW50
LnR5cGU7XG5cbiAgICB2YXIgdXBkYXRlUXVldWUgPSB0cmFuc2FjdGlvbi5nZXRVcGRhdGVRdWV1
ZSgpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgcHVibGljIGNsYXNzXG4gICAgdmFyIGRvQ29u
c3RydWN0ID0gc2hvdWxkQ29uc3RydWN0KENvbXBvbmVudCk7XG4gICAgdmFyIGluc3QgPSB0aGlz
Ll9jb25zdHJ1Y3RDb21wb25lbnQoZG9Db25zdHJ1Y3QsIHB1YmxpY1Byb3BzLCBwdWJsaWNDb250
ZXh0LCB1cGRhdGVRdWV1ZSk7XG4gICAgdmFyIHJlbmRlcmVkRWxlbWVudDtcblxuICAgIC8vIFN1
cHBvcnQgZnVuY3Rpb25hbCBjb21wb25lbnRzXG4gICAgaWYgKCFkb0NvbnN0cnVjdCAmJiAoaW5z
dCA9PSBudWxsIHx8IGluc3QucmVuZGVyID09IG51bGwpKSB7XG4gICAgICByZW5kZXJlZEVsZW1l
bnQgPSBpbnN0O1xuICAgICAgd2FybklmSW52YWxpZEVsZW1lbnQoQ29tcG9uZW50LCByZW5kZXJl
ZEVsZW1lbnQpO1xuICAgICAgIShpbnN0ID09PSBudWxsIHx8IGluc3QgPT09IGZhbHNlIHx8IFJl
YWN0LmlzVmFsaWRFbGVtZW50KGluc3QpKSA/ICBmYWxzZSA/IGludmFyaWFudChmYWxzZSwgJyVz
KC4uLik6IEEgdmFsaWQgUmVhY3QgZWxlbWVudCAob3IgbnVsbCkgbXVzdCBiZSByZXR1cm5lZC4g
WW91IG1heSBoYXZlIHJldHVybmVkIHVuZGVmaW5lZCwgYW4gYXJyYXkgb3Igc29tZSBvdGhlciBp
bnZhbGlkIG9iamVjdC4nLCBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUg
fHwgJ0NvbXBvbmVudCcpIDogX3Byb2RJbnZhcmlhbnQoJzEwNScsIENvbXBvbmVudC5kaXNwbGF5
TmFtZSB8fCBDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50JykgOiB2b2lkIDA7XG4gICAgICBp
bnN0ID0gbmV3IFN0YXRlbGVzc0NvbXBvbmVudChDb21wb25lbnQpO1xuICAgICAgdGhpcy5fY29t
cG9zaXRlVHlwZSA9IENvbXBvc2l0ZVR5cGVzLlN0YXRlbGVzc0Z1bmN0aW9uYWw7XG4gICAgfSBl
bHNlIHtcbiAgICAgIGlmIChpc1B1cmVDb21wb25lbnQoQ29tcG9uZW50KSkge1xuICAgICAgICB0
aGlzLl9jb21wb3NpdGVUeXBlID0gQ29tcG9zaXRlVHlwZXMuUHVyZUNsYXNzO1xuICAgICAgfSBl
bHNlIHtcbiAgICAgICAgdGhpcy5fY29tcG9zaXRlVHlwZSA9IENvbXBvc2l0ZVR5cGVzLkltcHVy
ZUNsYXNzO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmYWxzZSkge1xuICAgICAgLy8gVGhp
cyB3aWxsIHRocm93IGxhdGVyIGluIF9yZW5kZXJWYWxpZGF0ZWRDb21wb25lbnQsIGJ1dCBhZGQg
YW4gZWFybHlcbiAgICAgIC8vIHdhcm5pbmcgbm93IHRvIGhlbHAgZGVidWdnaW5nXG4gICAgICBp
ZiAoaW5zdC5yZW5kZXIgPT0gbnVsbCkge1xuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAh
PT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJyVzKC4uLik6IE5vIGByZW5kZXJgIG1l
dGhvZCBmb3VuZCBvbiB0aGUgcmV0dXJuZWQgY29tcG9uZW50ICcgKyAnaW5zdGFuY2U6IHlvdSBt
YXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gZGVmaW5lIGByZW5kZXJgLicsIENvbXBvbmVudC5kaXNwbGF5
TmFtZSB8fCBDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50JykgOiB2b2lkIDA7XG4gICAgICB9
XG5cbiAgICAgIHZhciBwcm9wc011dGF0ZWQgPSBpbnN0LnByb3BzICE9PSBwdWJsaWNQcm9wcztc
biAgICAgIHZhciBjb21wb25lbnROYW1lID0gQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBv
bmVudC5uYW1lIHx8ICdDb21wb25lbnQnO1xuXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAh
PT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhpbnN0LnByb3BzID09PSB1bmRlZmluZWQgfHwgIXBy
b3BzTXV0YXRlZCwgJyVzKC4uLik6IFdoZW4gY2FsbGluZyBzdXBlcigpIGluIGAlc2AsIG1ha2Ug
c3VyZSB0byBwYXNzICcgKyBcInVwIHRoZSBzYW1lIHByb3BzIHRoYXQgeW91ciBjb21wb25lbnQn
cyBjb25zdHJ1Y3RvciB3YXMgcGFzc2VkLlwiLCBjb21wb25lbnROYW1lLCBjb21wb25lbnROYW1l
KSA6IHZvaWQgMDtcbiAgICB9XG5cbiAgICAvLyBUaGVzZSBzaG91bGQgYmUgc2V0IHVwIGluIHRo
ZSBjb25zdHJ1Y3RvciwgYnV0IGFzIGEgY29udmVuaWVuY2UgZm9yXG4gICAgLy8gc2ltcGxlciBj
bGFzcyBhYnN0cmFjdGlvbnMsIHdlIHNldCB0aGVtIHVwIGFmdGVyIHRoZSBmYWN0LlxuICAgIGlu
c3QucHJvcHMgPSBwdWJsaWNQcm9wcztcbiAgICBpbnN0LmNvbnRleHQgPSBwdWJsaWNDb250ZXh0
O1xuICAgIGluc3QucmVmcyA9IGVtcHR5T2JqZWN0O1xuICAgIGluc3QudXBkYXRlciA9IHVwZGF0
ZVF1ZXVlO1xuXG4gICAgdGhpcy5faW5zdGFuY2UgPSBpbnN0O1xuXG4gICAgLy8gU3RvcmUgYSBy
ZWZlcmVuY2UgZnJvbSB0aGUgaW5zdGFuY2UgYmFjayB0byB0aGUgaW50ZXJuYWwgcmVwcmVzZW50
YXRpb25cbiAgICBSZWFjdEluc3RhbmNlTWFwLnNldChpbnN0LCB0aGlzKTtcblxuICAgIGlmIChm
YWxzZSkge1xuICAgICAgLy8gU2luY2UgcGxhaW4gSlMgY2xhc3NlcyBhcmUgZGVmaW5lZCB3aXRo
b3V0IGFueSBzcGVjaWFsIGluaXRpYWxpemF0aW9uXG4gICAgICAvLyBsb2dpYywgd2UgY2FuIG5v
dCBjYXRjaCBjb21tb24gZXJyb3JzIGVhcmx5LiBUaGVyZWZvcmUsIHdlIGhhdmUgdG9cbiAgICAg
IC8vIGNhdGNoIHRoZW0gaGVyZSwgYXQgaW5pdGlhbGl6YXRpb24gdGltZSwgaW5zdGVhZC5cbiAg
ICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKCFpbnN0
LmdldEluaXRpYWxTdGF0ZSB8fCBpbnN0LmdldEluaXRpYWxTdGF0ZS5pc1JlYWN0Q2xhc3NBcHBy
b3ZlZCB8fCBpbnN0LnN0YXRlLCAnZ2V0SW5pdGlhbFN0YXRlIHdhcyBkZWZpbmVkIG9uICVzLCBh
IHBsYWluIEphdmFTY3JpcHQgY2xhc3MuICcgKyAnVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBmb3Ig
Y2xhc3NlcyBjcmVhdGVkIHVzaW5nIFJlYWN0LmNyZWF0ZUNsYXNzLiAnICsgJ0RpZCB5b3UgbWVh
biB0byBkZWZpbmUgYSBzdGF0ZSBwcm9wZXJ0eSBpbnN0ZWFkPycsIHRoaXMuZ2V0TmFtZSgpIHx8
ICdhIGNvbXBvbmVudCcpIDogdm9pZCAwO1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09
ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoIWluc3QuZ2V0RGVmYXVsdFByb3BzIHx8IGluc3QuZ2V0
RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkLCAnZ2V0RGVmYXVsdFByb3BzIHdhcyBk
ZWZpbmVkIG9uICVzLCBhIHBsYWluIEphdmFTY3JpcHQgY2xhc3MuICcgKyAnVGhpcyBpcyBvbmx5
IHN1cHBvcnRlZCBmb3IgY2xhc3NlcyBjcmVhdGVkIHVzaW5nIFJlYWN0LmNyZWF0ZUNsYXNzLiAn
ICsgJ1VzZSBhIHN0YXRpYyBwcm9wZXJ0eSB0byBkZWZpbmUgZGVmYXVsdFByb3BzIGluc3RlYWQu
JywgdGhpcy5nZXROYW1lKCkgfHwgJ2EgY29tcG9uZW50JykgOiB2b2lkIDA7XG4gICAgICBwcm9j
ZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyghaW5zdC5wcm9wVHlw
ZXMsICdwcm9wVHlwZXMgd2FzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgcHJvcGVydHkgb24gJXMu
IFVzZSBhIHN0YXRpYyAnICsgJ3Byb3BlcnR5IHRvIGRlZmluZSBwcm9wVHlwZXMgaW5zdGVhZC4n
LCB0aGlzLmdldE5hbWUoKSB8fCAnYSBjb21wb25lbnQnKSA6IHZvaWQgMDtcbiAgICAgIHByb2Nl
c3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKCFpbnN0LmNvbnRleHRU
eXBlcywgJ2NvbnRleHRUeXBlcyB3YXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBv
biAlcy4gVXNlIGEgJyArICdzdGF0aWMgcHJvcGVydHkgdG8gZGVmaW5lIGNvbnRleHRUeXBlcyBp
bnN0ZWFkLicsIHRoaXMuZ2V0TmFtZSgpIHx8ICdhIGNvbXBvbmVudCcpIDogdm9pZCAwO1xuICAg
ICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcodHlwZW9m
IGluc3QuY29tcG9uZW50U2hvdWxkVXBkYXRlICE9PSAnZnVuY3Rpb24nLCAnJXMgaGFzIGEgbWV0
aG9kIGNhbGxlZCAnICsgJ2NvbXBvbmVudFNob3VsZFVwZGF0ZSgpLiBEaWQgeW91IG1lYW4gc2hv
dWxkQ29tcG9uZW50VXBkYXRlKCk/ICcgKyAnVGhlIG5hbWUgaXMgcGhyYXNlZCBhcyBhIHF1ZXN0
aW9uIGJlY2F1c2UgdGhlIGZ1bmN0aW9uIGlzICcgKyAnZXhwZWN0ZWQgdG8gcmV0dXJuIGEgdmFs
dWUuJywgdGhpcy5nZXROYW1lKCkgfHwgJ0EgY29tcG9uZW50JykgOiB2b2lkIDA7XG4gICAgICBw
cm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyh0eXBlb2YgaW5z
dC5jb21wb25lbnREaWRVbm1vdW50ICE9PSAnZnVuY3Rpb24nLCAnJXMgaGFzIGEgbWV0aG9kIGNh
bGxlZCAnICsgJ2NvbXBvbmVudERpZFVubW91bnQoKS4gQnV0IHRoZXJlIGlzIG5vIHN1Y2ggbGlm
ZWN5Y2xlIG1ldGhvZC4gJyArICdEaWQgeW91IG1lYW4gY29tcG9uZW50V2lsbFVubW91bnQoKT8n
LCB0aGlzLmdldE5hbWUoKSB8fCAnQSBjb21wb25lbnQnKSA6IHZvaWQgMDtcbiAgICAgIHByb2Nl
c3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKHR5cGVvZiBpbnN0LmNv
bXBvbmVudFdpbGxSZWNpZXZlUHJvcHMgIT09ICdmdW5jdGlvbicsICclcyBoYXMgYSBtZXRob2Qg
Y2FsbGVkICcgKyAnY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcygpLiBEaWQgeW91IG1lYW4gY29t
cG9uZW50V2lsbFJlY2VpdmVQcm9wcygpPycsIHRoaXMuZ2V0TmFtZSgpIHx8ICdBIGNvbXBvbmVu
dCcpIDogdm9pZCAwO1xuICAgIH1cblxuICAgIHZhciBpbml0aWFsU3RhdGUgPSBpbnN0LnN0YXRl
O1xuICAgIGlmIChpbml0aWFsU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5zdC5zdGF0
ZSA9IGluaXRpYWxTdGF0ZSA9IG51bGw7XG4gICAgfVxuICAgICEodHlwZW9mIGluaXRpYWxTdGF0
ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoaW5pdGlhbFN0YXRlKSkgPyAgZmFsc2Ug
PyBpbnZhcmlhbnQoZmFsc2UsICclcy5zdGF0ZTogbXVzdCBiZSBzZXQgdG8gYW4gb2JqZWN0IG9y
IG51bGwnLCB0aGlzLmdldE5hbWUoKSB8fCAnUmVhY3RDb21wb3NpdGVDb21wb25lbnQnKSA6IF9w
cm9kSW52YXJpYW50KCcxMDYnLCB0aGlzLmdldE5hbWUoKSB8fCAnUmVhY3RDb21wb3NpdGVDb21w
b25lbnQnKSA6IHZvaWQgMDtcblxuICAgIHRoaXMuX3BlbmRpbmdTdGF0ZVF1ZXVlID0gbnVsbDtc
biAgICB0aGlzLl9wZW5kaW5nUmVwbGFjZVN0YXRlID0gZmFsc2U7XG4gICAgdGhpcy5fcGVuZGlu
Z0ZvcmNlVXBkYXRlID0gZmFsc2U7XG5cbiAgICB2YXIgbWFya3VwO1xuICAgIGlmIChpbnN0LnVu
c3RhYmxlX2hhbmRsZUVycm9yKSB7XG4gICAgICBtYXJrdXAgPSB0aGlzLnBlcmZvcm1Jbml0aWFs
TW91bnRXaXRoRXJyb3JIYW5kbGluZyhyZW5kZXJlZEVsZW1lbnQsIGhvc3RQYXJlbnQsIGhvc3RD
b250YWluZXJJbmZvLCB0cmFuc2FjdGlvbiwgY29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAg
IG1hcmt1cCA9IHRoaXMucGVyZm9ybUluaXRpYWxNb3VudChyZW5kZXJlZEVsZW1lbnQsIGhvc3RQ
YXJlbnQsIGhvc3RDb250YWluZXJJbmZvLCB0cmFuc2FjdGlvbiwgY29udGV4dCk7XG4gICAgfVxu
XG4gICAgaWYgKGluc3QuY29tcG9uZW50RGlkTW91bnQpIHtcbiAgICAgIGlmIChmYWxzZSkge1xu
ICAgICAgICB0cmFuc2FjdGlvbi5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKGZ1bmN0aW9u
ICgpIHtcbiAgICAgICAgICBtZWFzdXJlTGlmZUN5Y2xlUGVyZihmdW5jdGlvbiAoKSB7XG4gICAg
ICAgICAgICByZXR1cm4gaW5zdC5jb21wb25lbnREaWRNb3VudCgpO1xuICAgICAgICAgIH0sIF90
aGlzLl9kZWJ1Z0lELCAnY29tcG9uZW50RGlkTW91bnQnKTtcbiAgICAgICAgfSk7XG4gICAgICB9
IGVsc2Uge1xuICAgICAgICB0cmFuc2FjdGlvbi5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVl
KGluc3QuY29tcG9uZW50RGlkTW91bnQsIGluc3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJl
dHVybiBtYXJrdXA7XG4gIH0sXG5cbiAgX2NvbnN0cnVjdENvbXBvbmVudDogZnVuY3Rpb24gKGRv
Q29uc3RydWN0LCBwdWJsaWNQcm9wcywgcHVibGljQ29udGV4dCwgdXBkYXRlUXVldWUpIHtcbiAg
ICBpZiAoZmFsc2UpIHtcbiAgICAgIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgPSB0aGlzO1xu
ICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnN0cnVjdENvbXBvbmVudFdpdGhv
dXRPd25lcihkb0NvbnN0cnVjdCwgcHVibGljUHJvcHMsIHB1YmxpY0NvbnRleHQsIHVwZGF0ZVF1
ZXVlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudE93bmVyLmN1cnJl
bnQgPSBudWxsO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5fY29u
c3RydWN0Q29tcG9uZW50V2l0aG91dE93bmVyKGRvQ29uc3RydWN0LCBwdWJsaWNQcm9wcywgcHVi
bGljQ29udGV4dCwgdXBkYXRlUXVldWUpO1xuICAgIH1cbiAgfSxcblxuICBfY29uc3RydWN0Q29t
cG9uZW50V2l0aG91dE93bmVyOiBmdW5jdGlvbiAoZG9Db25zdHJ1Y3QsIHB1YmxpY1Byb3BzLCBw
dWJsaWNDb250ZXh0LCB1cGRhdGVRdWV1ZSkge1xuICAgIHZhciBDb21wb25lbnQgPSB0aGlzLl9j
dXJyZW50RWxlbWVudC50eXBlO1xuXG4gICAgaWYgKGRvQ29uc3RydWN0KSB7XG4gICAgICBpZiAo
ZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIG1lYXN1cmVMaWZlQ3ljbGVQZXJmKGZ1bmN0aW9uICgp
IHtcbiAgICAgICAgICByZXR1cm4gbmV3IENvbXBvbmVudChwdWJsaWNQcm9wcywgcHVibGljQ29u
dGV4dCwgdXBkYXRlUXVldWUpO1xuICAgICAgICB9LCB0aGlzLl9kZWJ1Z0lELCAnY3RvcicpO1xu
ICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21wb25lbnQocHVibGljUHJvcHMs
IHB1YmxpY0NvbnRleHQsIHVwZGF0ZVF1ZXVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBU
aGlzIGNhbiBzdGlsbCBiZSBhbiBpbnN0YW5jZSBpbiBjYXNlIG9mIGZhY3RvcnkgY29tcG9uZW50
c1xuICAgIC8vIGJ1dCB3ZSdsbCBjb3VudCB0aGlzIGFzIHRpbWUgc3BlbnQgcmVuZGVyaW5nIGFz
IHRoZSBtb3JlIGNvbW1vbiBjYXNlLlxuICAgIGlmIChmYWxzZSkge1xuICAgICAgcmV0dXJuIG1l
YXN1cmVMaWZlQ3ljbGVQZXJmKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIENvbXBvbmVu
dChwdWJsaWNQcm9wcywgcHVibGljQ29udGV4dCwgdXBkYXRlUXVldWUpO1xuICAgICAgfSwgdGhp
cy5fZGVidWdJRCwgJ3JlbmRlcicpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gQ29tcG9u
ZW50KHB1YmxpY1Byb3BzLCBwdWJsaWNDb250ZXh0LCB1cGRhdGVRdWV1ZSk7XG4gICAgfVxuICB9
LFxuXG4gIHBlcmZvcm1Jbml0aWFsTW91bnRXaXRoRXJyb3JIYW5kbGluZzogZnVuY3Rpb24gKHJl
bmRlcmVkRWxlbWVudCwgaG9zdFBhcmVudCwgaG9zdENvbnRhaW5lckluZm8sIHRyYW5zYWN0aW9u
LCBjb250ZXh0KSB7XG4gICAgdmFyIG1hcmt1cDtcbiAgICB2YXIgY2hlY2twb2ludCA9IHRyYW5z
YWN0aW9uLmNoZWNrcG9pbnQoKTtcbiAgICB0cnkge1xuICAgICAgbWFya3VwID0gdGhpcy5wZXJm
b3JtSW5pdGlhbE1vdW50KHJlbmRlcmVkRWxlbWVudCwgaG9zdFBhcmVudCwgaG9zdENvbnRhaW5l
ckluZm8sIHRyYW5zYWN0aW9uLCBjb250ZXh0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAv
LyBSb2xsIGJhY2sgdG8gY2hlY2twb2ludCwgaGFuZGxlIGVycm9yICh3aGljaCBtYXkgYWRkIGl0
ZW1zIHRvIHRoZSB0cmFuc2FjdGlvbiksIGFuZCB0YWtlIGEgbmV3IGNoZWNrcG9pbnRcbiAgICAg
IHRyYW5zYWN0aW9uLnJvbGxiYWNrKGNoZWNrcG9pbnQpO1xuICAgICAgdGhpcy5faW5zdGFuY2Uu
dW5zdGFibGVfaGFuZGxlRXJyb3IoZSk7XG4gICAgICBpZiAodGhpcy5fcGVuZGluZ1N0YXRlUXVl
dWUpIHtcbiAgICAgICAgdGhpcy5faW5zdGFuY2Uuc3RhdGUgPSB0aGlzLl9wcm9jZXNzUGVuZGlu
Z1N0YXRlKHRoaXMuX2luc3RhbmNlLnByb3BzLCB0aGlzLl9pbnN0YW5jZS5jb250ZXh0KTtcbiAg
ICAgIH1cbiAgICAgIGNoZWNrcG9pbnQgPSB0cmFuc2FjdGlvbi5jaGVja3BvaW50KCk7XG5cbiAg
ICAgIHRoaXMuX3JlbmRlcmVkQ29tcG9uZW50LnVubW91bnRDb21wb25lbnQodHJ1ZSk7XG4gICAg
ICB0cmFuc2FjdGlvbi5yb2xsYmFjayhjaGVja3BvaW50KTtcblxuICAgICAgLy8gVHJ5IGFnYWlu
IC0gd2UndmUgaW5mb3JtZWQgdGhlIGNvbXBvbmVudCBhYm91dCB0aGUgZXJyb3IsIHNvIHRoZXkg
Y2FuIHJlbmRlciBhbiBlcnJvciBtZXNzYWdlIHRoaXMgdGltZS5cbiAgICAgIC8vIElmIHRoaXMg
dGhyb3dzIGFnYWluLCB0aGUgZXJyb3Igd2lsbCBidWJibGUgdXAgKGFuZCBjYW4gYmUgY2F1Z2h0
IGJ5IGEgaGlnaGVyIGVycm9yIGJvdW5kYXJ5KS5cbiAgICAgIG1hcmt1cCA9IHRoaXMucGVyZm9y
bUluaXRpYWxNb3VudChyZW5kZXJlZEVsZW1lbnQsIGhvc3RQYXJlbnQsIGhvc3RDb250YWluZXJJ
bmZvLCB0cmFuc2FjdGlvbiwgY29udGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBtYXJrdXA7XG4g
IH0sXG5cbiAgcGVyZm9ybUluaXRpYWxNb3VudDogZnVuY3Rpb24gKHJlbmRlcmVkRWxlbWVudCwg
aG9zdFBhcmVudCwgaG9zdENvbnRhaW5lckluZm8sIHRyYW5zYWN0aW9uLCBjb250ZXh0KSB7XG4g
ICAgdmFyIGluc3QgPSB0aGlzLl9pbnN0YW5jZTtcblxuICAgIHZhciBkZWJ1Z0lEID0gMDtcbiAg
ICBpZiAoZmFsc2UpIHtcbiAgICAgIGRlYnVnSUQgPSB0aGlzLl9kZWJ1Z0lEO1xuICAgIH1cblxu
ICAgIGlmIChpbnN0LmNvbXBvbmVudFdpbGxNb3VudCkge1xuICAgICAgaWYgKGZhbHNlKSB7XG4g
ICAgICAgIG1lYXN1cmVMaWZlQ3ljbGVQZXJmKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1
cm4gaW5zdC5jb21wb25lbnRXaWxsTW91bnQoKTtcbiAgICAgICAgfSwgZGVidWdJRCwgJ2NvbXBv
bmVudFdpbGxNb3VudCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5zdC5jb21wb25lbnRX
aWxsTW91bnQoKTtcbiAgICAgIH1cbiAgICAgIC8vIFdoZW4gbW91bnRpbmcsIGNhbGxzIHRvIGBz
ZXRTdGF0ZWAgYnkgYGNvbXBvbmVudFdpbGxNb3VudGAgd2lsbCBzZXRcbiAgICAgIC8vIGB0aGlz
Ll9wZW5kaW5nU3RhdGVRdWV1ZWAgd2l0aG91dCB0cmlnZ2VyaW5nIGEgcmUtcmVuZGVyLlxuICAg
ICAgaWYgKHRoaXMuX3BlbmRpbmdTdGF0ZVF1ZXVlKSB7XG4gICAgICAgIGluc3Quc3RhdGUgPSB0
aGlzLl9wcm9jZXNzUGVuZGluZ1N0YXRlKGluc3QucHJvcHMsIGluc3QuY29udGV4dCk7XG4gICAg
ICB9XG4gICAgfVxuXG4gICAgLy8gSWYgbm90IGEgc3RhdGVsZXNzIGNvbXBvbmVudCwgd2Ugbm93
IHJlbmRlclxuICAgIGlmIChyZW5kZXJlZEVsZW1lbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAg
cmVuZGVyZWRFbGVtZW50ID0gdGhpcy5fcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50KCk7XG4gICAg
fVxuXG4gICAgdmFyIG5vZGVUeXBlID0gUmVhY3ROb2RlVHlwZXMuZ2V0VHlwZShyZW5kZXJlZEVs
ZW1lbnQpO1xuICAgIHRoaXMuX3JlbmRlcmVkTm9kZVR5cGUgPSBub2RlVHlwZTtcbiAgICB2YXIg
Y2hpbGQgPSB0aGlzLl9pbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50KHJlbmRlcmVkRWxlbWVudCwg
bm9kZVR5cGUgIT09IFJlYWN0Tm9kZVR5cGVzLkVNUFRZIC8qIHNob3VsZEhhdmVEZWJ1Z0lEICov
XG4gICAgKTtcbiAgICB0aGlzLl9yZW5kZXJlZENvbXBvbmVudCA9IGNoaWxkO1xuXG4gICAgdmFy
IG1hcmt1cCA9IFJlYWN0UmVjb25jaWxlci5tb3VudENvbXBvbmVudChjaGlsZCwgdHJhbnNhY3Rp
b24sIGhvc3RQYXJlbnQsIGhvc3RDb250YWluZXJJbmZvLCB0aGlzLl9wcm9jZXNzQ2hpbGRDb250
ZXh0KGNvbnRleHQpLCBkZWJ1Z0lEKTtcblxuICAgIGlmIChmYWxzZSkge1xuICAgICAgaWYgKGRl
YnVnSUQgIT09IDApIHtcbiAgICAgICAgdmFyIGNoaWxkRGVidWdJRHMgPSBjaGlsZC5fZGVidWdJ
RCAhPT0gMCA/IFtjaGlsZC5fZGVidWdJRF0gOiBbXTtcbiAgICAgICAgUmVhY3RJbnN0cnVtZW50
YXRpb24uZGVidWdUb29sLm9uU2V0Q2hpbGRyZW4oZGVidWdJRCwgY2hpbGREZWJ1Z0lEcyk7XG4g
ICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcmt1cDtcbiAgfSxcblxuICBnZXRIb3N0Tm9k
ZTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBSZWFjdFJlY29uY2lsZXIuZ2V0SG9zdE5vZGUo
dGhpcy5fcmVuZGVyZWRDb21wb25lbnQpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZWxlYXNlcyBh
bnkgcmVzb3VyY2VzIGFsbG9jYXRlZCBieSBgbW91bnRDb21wb25lbnRgLlxuICAgKlxuICAgKiBA
ZmluYWxcbiAgICogQGludGVybmFsXG4gICAqL1xuICB1bm1vdW50Q29tcG9uZW50OiBmdW5jdGlv
biAoc2FmZWx5KSB7XG4gICAgaWYgKCF0aGlzLl9yZW5kZXJlZENvbXBvbmVudCkge1xuICAgICAg
cmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpbnN0ID0gdGhpcy5faW5zdGFuY2U7XG5cbiAgICBp
ZiAoaW5zdC5jb21wb25lbnRXaWxsVW5tb3VudCAmJiAhaW5zdC5fY2FsbGVkQ29tcG9uZW50V2ls
bFVubW91bnQpIHtcbiAgICAgIGluc3QuX2NhbGxlZENvbXBvbmVudFdpbGxVbm1vdW50ID0gdHJ1
ZTtcblxuICAgICAgaWYgKHNhZmVseSkge1xuICAgICAgICB2YXIgbmFtZSA9IHRoaXMuZ2V0TmFt
ZSgpICsgJy5jb21wb25lbnRXaWxsVW5tb3VudCgpJztcbiAgICAgICAgUmVhY3RFcnJvclV0aWxz
Lmludm9rZUd1YXJkZWRDYWxsYmFjayhuYW1lLCBpbnN0LmNvbXBvbmVudFdpbGxVbm1vdW50LmJp
bmQoaW5zdCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZhbHNlKSB7XG4gICAgICAg
ICAgbWVhc3VyZUxpZmVDeWNsZVBlcmYoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJu
IGluc3QuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICAgICAgICB9LCB0aGlzLl9kZWJ1Z0lE
LCAnY29tcG9uZW50V2lsbFVubW91bnQnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBp
bnN0LmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5c
biAgICBpZiAodGhpcy5fcmVuZGVyZWRDb21wb25lbnQpIHtcbiAgICAgIFJlYWN0UmVjb25jaWxl
ci51bm1vdW50Q29tcG9uZW50KHRoaXMuX3JlbmRlcmVkQ29tcG9uZW50LCBzYWZlbHkpO1xuICAg
ICAgdGhpcy5fcmVuZGVyZWROb2RlVHlwZSA9IG51bGw7XG4gICAgICB0aGlzLl9yZW5kZXJlZENv
bXBvbmVudCA9IG51bGw7XG4gICAgICB0aGlzLl9pbnN0YW5jZSA9IG51bGw7XG4gICAgfVxuXG4g
ICAgLy8gUmVzZXQgcGVuZGluZyBmaWVsZHNcbiAgICAvLyBFdmVuIGlmIHRoaXMgY29tcG9uZW50
IGlzIHNjaGVkdWxlZCBmb3IgYW5vdGhlciB1cGRhdGUgaW4gUmVhY3RVcGRhdGVzLFxuICAgIC8v
IGl0IHdvdWxkIHN0aWxsIGJlIGlnbm9yZWQgYmVjYXVzZSB0aGVzZSBmaWVsZHMgYXJlIHJlc2V0
LlxuICAgIHRoaXMuX3BlbmRpbmdTdGF0ZVF1ZXVlID0gbnVsbDtcbiAgICB0aGlzLl9wZW5kaW5n
UmVwbGFjZVN0YXRlID0gZmFsc2U7XG4gICAgdGhpcy5fcGVuZGluZ0ZvcmNlVXBkYXRlID0gZmFs
c2U7XG4gICAgdGhpcy5fcGVuZGluZ0NhbGxiYWNrcyA9IG51bGw7XG4gICAgdGhpcy5fcGVuZGlu
Z0VsZW1lbnQgPSBudWxsO1xuXG4gICAgLy8gVGhlc2UgZmllbGRzIGRvIG5vdCByZWFsbHkgbmVl
ZCB0byBiZSByZXNldCBzaW5jZSB0aGlzIG9iamVjdCBpcyBub1xuICAgIC8vIGxvbmdlciBhY2Nl
c3NpYmxlLlxuICAgIHRoaXMuX2NvbnRleHQgPSBudWxsO1xuICAgIHRoaXMuX3Jvb3ROb2RlSUQg
PSAwO1xuICAgIHRoaXMuX3RvcExldmVsV3JhcHBlciA9IG51bGw7XG5cbiAgICAvLyBEZWxldGUg
dGhlIHJlZmVyZW5jZSBmcm9tIHRoZSBpbnN0YW5jZSB0byB0aGlzIGludGVybmFsIHJlcHJlc2Vu
dGF0aW9uXG4gICAgLy8gd2hpY2ggYWxsb3cgdGhlIGludGVybmFscyB0byBiZSBwcm9wZXJseSBj
bGVhbmVkIHVwIGV2ZW4gaWYgdGhlIHVzZXJcbiAgICAvLyBsZWFrcyBhIHJlZmVyZW5jZSB0byB0
aGUgcHVibGljIGluc3RhbmNlLlxuICAgIFJlYWN0SW5zdGFuY2VNYXAucmVtb3ZlKGluc3QpO1xu
XG4gICAgLy8gU29tZSBleGlzdGluZyBjb21wb25lbnRzIHJlbHkgb24gaW5zdC5wcm9wcyBldmVu
IGFmdGVyIHRoZXkndmUgYmVlblxuICAgIC8vIGRlc3Ryb3llZCAoaW4gZXZlbnQgaGFuZGxlcnMp
LlxuICAgIC8vIFRPRE86IGluc3QucHJvcHMgPSBudWxsO1xuICAgIC8vIFRPRE86IGluc3Quc3Rh
dGUgPSBudWxsO1xuICAgIC8vIFRPRE86IGluc3QuY29udGV4dCA9IG51bGw7XG4gIH0sXG5cbiAg
LyoqXG4gICAqIEZpbHRlcnMgdGhlIGNvbnRleHQgb2JqZWN0IHRvIG9ubHkgY29udGFpbiBrZXlz
IHNwZWNpZmllZCBpblxuICAgKiBgY29udGV4dFR5cGVzYFxuICAgKlxuICAgKiBAcGFyYW0ge29i
amVjdH0gY29udGV4dFxuICAgKiBAcmV0dXJuIHs/b2JqZWN0fVxuICAgKiBAcHJpdmF0ZVxuICAg
Ki9cbiAgX21hc2tDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgIHZhciBDb21wb25l
bnQgPSB0aGlzLl9jdXJyZW50RWxlbWVudC50eXBlO1xuICAgIHZhciBjb250ZXh0VHlwZXMgPSBD
b21wb25lbnQuY29udGV4dFR5cGVzO1xuICAgIGlmICghY29udGV4dFR5cGVzKSB7XG4gICAgICBy
ZXR1cm4gZW1wdHlPYmplY3Q7XG4gICAgfVxuICAgIHZhciBtYXNrZWRDb250ZXh0ID0ge307XG4g
ICAgZm9yICh2YXIgY29udGV4dE5hbWUgaW4gY29udGV4dFR5cGVzKSB7XG4gICAgICBtYXNrZWRD
b250ZXh0W2NvbnRleHROYW1lXSA9IGNvbnRleHRbY29udGV4dE5hbWVdO1xuICAgIH1cbiAgICBy
ZXR1cm4gbWFza2VkQ29udGV4dDtcbiAgfSxcblxuICAvKipcbiAgICogRmlsdGVycyB0aGUgY29u
dGV4dCBvYmplY3QgdG8gb25seSBjb250YWluIGtleXMgc3BlY2lmaWVkIGluXG4gICAqIGBjb250
ZXh0VHlwZXNgLCBhbmQgYXNzZXJ0cyB0aGF0IHRoZXkgYXJlIHZhbGlkLlxuICAgKlxuICAgKiBA
cGFyYW0ge29iamVjdH0gY29udGV4dFxuICAgKiBAcmV0dXJuIHs/b2JqZWN0fVxuICAgKiBAcHJp
dmF0ZVxuICAgKi9cbiAgX3Byb2Nlc3NDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAg
IHZhciBtYXNrZWRDb250ZXh0ID0gdGhpcy5fbWFza0NvbnRleHQoY29udGV4dCk7XG4gICAgaWYg
KGZhbHNlKSB7XG4gICAgICB2YXIgQ29tcG9uZW50ID0gdGhpcy5fY3VycmVudEVsZW1lbnQudHlw
ZTtcbiAgICAgIGlmIChDb21wb25lbnQuY29udGV4dFR5cGVzKSB7XG4gICAgICAgIHRoaXMuX2No
ZWNrQ29udGV4dFR5cGVzKENvbXBvbmVudC5jb250ZXh0VHlwZXMsIG1hc2tlZENvbnRleHQsICdj
b250ZXh0Jyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXNrZWRDb250ZXh0O1xuICB9
LFxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gY3VycmVudENvbnRleHRcbiAgICogQHJl
dHVybiB7b2JqZWN0fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Byb2Nlc3NDaGlsZENvbnRl
eHQ6IGZ1bmN0aW9uIChjdXJyZW50Q29udGV4dCkge1xuICAgIHZhciBDb21wb25lbnQgPSB0aGlz
Ll9jdXJyZW50RWxlbWVudC50eXBlO1xuICAgIHZhciBpbnN0ID0gdGhpcy5faW5zdGFuY2U7XG4g
ICAgdmFyIGNoaWxkQ29udGV4dDtcblxuICAgIGlmIChpbnN0LmdldENoaWxkQ29udGV4dCkge1xu
ICAgICAgaWYgKGZhbHNlKSB7XG4gICAgICAgIFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9v
bC5vbkJlZ2luUHJvY2Vzc2luZ0NoaWxkQ29udGV4dCgpO1xuICAgICAgICB0cnkge1xuICAgICAg
ICAgIGNoaWxkQ29udGV4dCA9IGluc3QuZ2V0Q2hpbGRDb250ZXh0KCk7XG4gICAgICAgIH0gZmlu
YWxseSB7XG4gICAgICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uRW5kUHJv
Y2Vzc2luZ0NoaWxkQ29udGV4dCgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAg
ICBjaGlsZENvbnRleHQgPSBpbnN0LmdldENoaWxkQ29udGV4dCgpO1xuICAgICAgfVxuICAgIH1c
blxuICAgIGlmIChjaGlsZENvbnRleHQpIHtcbiAgICAgICEodHlwZW9mIENvbXBvbmVudC5jaGls
ZENvbnRleHRUeXBlcyA9PT0gJ29iamVjdCcpID8gIGZhbHNlID8gaW52YXJpYW50KGZhbHNlLCAn
JXMuZ2V0Q2hpbGRDb250ZXh0KCk6IGNoaWxkQ29udGV4dFR5cGVzIG11c3QgYmUgZGVmaW5lZCBp
biBvcmRlciB0byB1c2UgZ2V0Q2hpbGRDb250ZXh0KCkuJywgdGhpcy5nZXROYW1lKCkgfHwgJ1Jl
YWN0Q29tcG9zaXRlQ29tcG9uZW50JykgOiBfcHJvZEludmFyaWFudCgnMTA3JywgdGhpcy5nZXRO
YW1lKCkgfHwgJ1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50JykgOiB2b2lkIDA7XG4gICAgICBpZiAo
ZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fY2hlY2tDb250ZXh0VHlwZXMoQ29tcG9uZW50LmNoaWxk
Q29udGV4dFR5cGVzLCBjaGlsZENvbnRleHQsICdjaGlsZCBjb250ZXh0Jyk7XG4gICAgICB9XG4g
ICAgICBmb3IgKHZhciBuYW1lIGluIGNoaWxkQ29udGV4dCkge1xuICAgICAgICAhKG5hbWUgaW4g
Q29tcG9uZW50LmNoaWxkQ29udGV4dFR5cGVzKSA/ICBmYWxzZSA/IGludmFyaWFudChmYWxzZSwg
JyVzLmdldENoaWxkQ29udGV4dCgpOiBrZXkgXCIlc1wiIGlzIG5vdCBkZWZpbmVkIGluIGNoaWxk
Q29udGV4dFR5cGVzLicsIHRoaXMuZ2V0TmFtZSgpIHx8ICdSZWFjdENvbXBvc2l0ZUNvbXBvbmVu
dCcsIG5hbWUpIDogX3Byb2RJbnZhcmlhbnQoJzEwOCcsIHRoaXMuZ2V0TmFtZSgpIHx8ICdSZWFj
dENvbXBvc2l0ZUNvbXBvbmVudCcsIG5hbWUpIDogdm9pZCAwO1xuICAgICAgfVxuICAgICAgcmV0
dXJuIF9hc3NpZ24oe30sIGN1cnJlbnRDb250ZXh0LCBjaGlsZENvbnRleHQpO1xuICAgIH1cbiAg
ICByZXR1cm4gY3VycmVudENvbnRleHQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEFzc2VydCB0aGF0
IHRoZSBjb250ZXh0IHR5cGVzIGFyZSB2YWxpZFxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0g
dHlwZVNwZWNzIE1hcCBvZiBjb250ZXh0IGZpZWxkIHRvIGEgUmVhY3RQcm9wVHlwZVxuICAgKiBA
cGFyYW0ge29iamVjdH0gdmFsdWVzIFJ1bnRpbWUgdmFsdWVzIHRoYXQgbmVlZCB0byBiZSB0eXBl
LWNoZWNrZWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIGUuZy4gXCJwcm9wXCIsIFwi
Y29udGV4dFwiLCBcImNoaWxkIGNvbnRleHRcIlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2No
ZWNrQ29udGV4dFR5cGVzOiBmdW5jdGlvbiAodHlwZVNwZWNzLCB2YWx1ZXMsIGxvY2F0aW9uKSB7
XG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICBjaGVja1JlYWN0VHlwZVNwZWModHlwZVNwZWNzLCB2
YWx1ZXMsIGxvY2F0aW9uLCB0aGlzLmdldE5hbWUoKSwgbnVsbCwgdGhpcy5fZGVidWdJRCk7XG4g
ICAgfVxuICB9LFxuXG4gIHJlY2VpdmVDb21wb25lbnQ6IGZ1bmN0aW9uIChuZXh0RWxlbWVudCwg
dHJhbnNhY3Rpb24sIG5leHRDb250ZXh0KSB7XG4gICAgdmFyIHByZXZFbGVtZW50ID0gdGhpcy5f
Y3VycmVudEVsZW1lbnQ7XG4gICAgdmFyIHByZXZDb250ZXh0ID0gdGhpcy5fY29udGV4dDtcblxu
ICAgIHRoaXMuX3BlbmRpbmdFbGVtZW50ID0gbnVsbDtcblxuICAgIHRoaXMudXBkYXRlQ29tcG9u
ZW50KHRyYW5zYWN0aW9uLCBwcmV2RWxlbWVudCwgbmV4dEVsZW1lbnQsIHByZXZDb250ZXh0LCBu
ZXh0Q29udGV4dCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIElmIGFueSBvZiBgX3BlbmRpbmdFbGVt
ZW50YCwgYF9wZW5kaW5nU3RhdGVRdWV1ZWAsIG9yIGBfcGVuZGluZ0ZvcmNlVXBkYXRlYFxuICAg
KiBpcyBzZXQsIHVwZGF0ZSB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0
UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9c
biAgcGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5OiBmdW5jdGlvbiAodHJhbnNhY3Rpb24pIHtcbiAg
ICBpZiAodGhpcy5fcGVuZGluZ0VsZW1lbnQgIT0gbnVsbCkge1xuICAgICAgUmVhY3RSZWNvbmNp
bGVyLnJlY2VpdmVDb21wb25lbnQodGhpcywgdGhpcy5fcGVuZGluZ0VsZW1lbnQsIHRyYW5zYWN0
aW9uLCB0aGlzLl9jb250ZXh0KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3BlbmRpbmdTdGF0ZVF1
ZXVlICE9PSBudWxsIHx8IHRoaXMuX3BlbmRpbmdGb3JjZVVwZGF0ZSkge1xuICAgICAgdGhpcy51
cGRhdGVDb21wb25lbnQodHJhbnNhY3Rpb24sIHRoaXMuX2N1cnJlbnRFbGVtZW50LCB0aGlzLl9j
dXJyZW50RWxlbWVudCwgdGhpcy5fY29udGV4dCwgdGhpcy5fY29udGV4dCk7XG4gICAgfSBlbHNl
IHtcbiAgICAgIHRoaXMuX3VwZGF0ZUJhdGNoTnVtYmVyID0gbnVsbDtcbiAgICB9XG4gIH0sXG5c
biAgLyoqXG4gICAqIFBlcmZvcm0gYW4gdXBkYXRlIHRvIGEgbW91bnRlZCBjb21wb25lbnQuIFRo
ZSBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIGFuZFxuICAgKiBzaG91bGRDb21wb25lbnRVcGRh
dGUgbWV0aG9kcyBhcmUgY2FsbGVkLCB0aGVuIChhc3N1bWluZyB0aGUgdXBkYXRlIGlzbid0XG4g
ICAqIHNraXBwZWQpIHRoZSByZW1haW5pbmcgdXBkYXRlIGxpZmVjeWNsZSBtZXRob2RzIGFyZSBj
YWxsZWQgYW5kIHRoZSBET01cbiAgICogcmVwcmVzZW50YXRpb24gaXMgdXBkYXRlZC5cbiAgICpc
biAgICogQnkgZGVmYXVsdCwgdGhpcyBpbXBsZW1lbnRzIFJlYWN0J3MgcmVuZGVyaW5nIGFuZCBy
ZWNvbmNpbGlhdGlvbiBhbGdvcml0aG0uXG4gICAqIFNvcGhpc3RpY2F0ZWQgY2xpZW50cyBtYXkg
d2lzaCB0byBvdmVycmlkZSB0aGlzLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxl
VHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBwcmV2
UGFyZW50RWxlbWVudFxuICAgKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gbmV4dFBhcmVudEVsZW1l
bnRcbiAgICogQGludGVybmFsXG4gICAqIEBvdmVycmlkYWJsZVxuICAgKi9cbiAgdXBkYXRlQ29t
cG9uZW50OiBmdW5jdGlvbiAodHJhbnNhY3Rpb24sIHByZXZQYXJlbnRFbGVtZW50LCBuZXh0UGFy
ZW50RWxlbWVudCwgcHJldlVubWFza2VkQ29udGV4dCwgbmV4dFVubWFza2VkQ29udGV4dCkge1xu
ICAgIHZhciBpbnN0ID0gdGhpcy5faW5zdGFuY2U7XG4gICAgIShpbnN0ICE9IG51bGwpID8gIGZh
bHNlID8gaW52YXJpYW50KGZhbHNlLCAnQXR0ZW1wdGVkIHRvIHVwZGF0ZSBjb21wb25lbnQgYCVz
YCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gdW5tb3VudGVkIChvciBmYWlsZWQgdG8gbW91bnQpLics
IHRoaXMuZ2V0TmFtZSgpIHx8ICdSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCcpIDogX3Byb2RJbnZh
cmlhbnQoJzEzNicsIHRoaXMuZ2V0TmFtZSgpIHx8ICdSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCcp
IDogdm9pZCAwO1xuXG4gICAgdmFyIHdpbGxSZWNlaXZlID0gZmFsc2U7XG4gICAgdmFyIG5leHRD
b250ZXh0O1xuXG4gICAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBjb250ZXh0IGhhcyBjaGFuZ2VkIG9y
IG5vdFxuICAgIGlmICh0aGlzLl9jb250ZXh0ID09PSBuZXh0VW5tYXNrZWRDb250ZXh0KSB7XG4g
ICAgICBuZXh0Q29udGV4dCA9IGluc3QuY29udGV4dDtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV4
dENvbnRleHQgPSB0aGlzLl9wcm9jZXNzQ29udGV4dChuZXh0VW5tYXNrZWRDb250ZXh0KTtcbiAg
ICAgIHdpbGxSZWNlaXZlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgcHJldlByb3BzID0gcHJl
dlBhcmVudEVsZW1lbnQucHJvcHM7XG4gICAgdmFyIG5leHRQcm9wcyA9IG5leHRQYXJlbnRFbGVt
ZW50LnByb3BzO1xuXG4gICAgLy8gTm90IGEgc2ltcGxlIHN0YXRlIHVwZGF0ZSBidXQgYSBwcm9w
cyB1cGRhdGVcbiAgICBpZiAocHJldlBhcmVudEVsZW1lbnQgIT09IG5leHRQYXJlbnRFbGVtZW50
KSB7XG4gICAgICB3aWxsUmVjZWl2ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gQW4gdXBkYXRl
IGhlcmUgd2lsbCBzY2hlZHVsZSBhbiB1cGRhdGUgYnV0IGltbWVkaWF0ZWx5IHNldFxuICAgIC8v
IF9wZW5kaW5nU3RhdGVRdWV1ZSB3aGljaCB3aWxsIGVuc3VyZSB0aGF0IGFueSBzdGF0ZSB1cGRh
dGVzIGdldHNcbiAgICAvLyBpbW1lZGlhdGVseSByZWNvbmNpbGVkIGluc3RlYWQgb2Ygd2FpdGlu
ZyBmb3IgdGhlIG5leHQgYmF0Y2guXG4gICAgaWYgKHdpbGxSZWNlaXZlICYmIGluc3QuY29tcG9u
ZW50V2lsbFJlY2VpdmVQcm9wcykge1xuICAgICAgaWYgKGZhbHNlKSB7XG4gICAgICAgIG1lYXN1
cmVMaWZlQ3ljbGVQZXJmKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gaW5zdC5jb21w
b25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcywgbmV4dENvbnRleHQpO1xuICAgICAgICB9
LCB0aGlzLl9kZWJ1Z0lELCAnY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcycpO1xuICAgICAgfSBl
bHNlIHtcbiAgICAgICAgaW5zdC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcywg
bmV4dENvbnRleHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBuZXh0U3RhdGUgPSB0aGlz
Ll9wcm9jZXNzUGVuZGluZ1N0YXRlKG5leHRQcm9wcywgbmV4dENvbnRleHQpO1xuICAgIHZhciBz
aG91bGRVcGRhdGUgPSB0cnVlO1xuXG4gICAgaWYgKCF0aGlzLl9wZW5kaW5nRm9yY2VVcGRhdGUp
IHtcbiAgICAgIGlmIChpbnN0LnNob3VsZENvbXBvbmVudFVwZGF0ZSkge1xuICAgICAgICBpZiAo
ZmFsc2UpIHtcbiAgICAgICAgICBzaG91bGRVcGRhdGUgPSBtZWFzdXJlTGlmZUN5Y2xlUGVyZihm
dW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5zdC5zaG91bGRDb21wb25lbnRVcGRh
dGUobmV4dFByb3BzLCBuZXh0U3RhdGUsIG5leHRDb250ZXh0KTtcbiAgICAgICAgICB9LCB0aGlz
Ll9kZWJ1Z0lELCAnc2hvdWxkQ29tcG9uZW50VXBkYXRlJyk7XG4gICAgICAgIH0gZWxzZSB7XG4g
ICAgICAgICAgc2hvdWxkVXBkYXRlID0gaW5zdC5zaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFBy
b3BzLCBuZXh0U3RhdGUsIG5leHRDb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtc
biAgICAgICAgaWYgKHRoaXMuX2NvbXBvc2l0ZVR5cGUgPT09IENvbXBvc2l0ZVR5cGVzLlB1cmVD
bGFzcykge1xuICAgICAgICAgIHNob3VsZFVwZGF0ZSA9ICFzaGFsbG93RXF1YWwocHJldlByb3Bz
LCBuZXh0UHJvcHMpIHx8ICFzaGFsbG93RXF1YWwoaW5zdC5zdGF0ZSwgbmV4dFN0YXRlKTtcbiAg
ICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmYWxzZSkge1xuICAgICAgcHJvY2Vz
cy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoc2hvdWxkVXBkYXRlICE9
PSB1bmRlZmluZWQsICclcy5zaG91bGRDb21wb25lbnRVcGRhdGUoKTogUmV0dXJuZWQgdW5kZWZp
bmVkIGluc3RlYWQgb2YgYSAnICsgJ2Jvb2xlYW4gdmFsdWUuIE1ha2Ugc3VyZSB0byByZXR1cm4g
dHJ1ZSBvciBmYWxzZS4nLCB0aGlzLmdldE5hbWUoKSB8fCAnUmVhY3RDb21wb3NpdGVDb21wb25l
bnQnKSA6IHZvaWQgMDtcbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVCYXRjaE51bWJlciA9IG51
bGw7XG4gICAgaWYgKHNob3VsZFVwZGF0ZSkge1xuICAgICAgdGhpcy5fcGVuZGluZ0ZvcmNlVXBk
YXRlID0gZmFsc2U7XG4gICAgICAvLyBXaWxsIHNldCBgdGhpcy5wcm9wc2AsIGB0aGlzLnN0YXRl
YCBhbmQgYHRoaXMuY29udGV4dGAuXG4gICAgICB0aGlzLl9wZXJmb3JtQ29tcG9uZW50VXBkYXRl
KG5leHRQYXJlbnRFbGVtZW50LCBuZXh0UHJvcHMsIG5leHRTdGF0ZSwgbmV4dENvbnRleHQsIHRy
YW5zYWN0aW9uLCBuZXh0VW5tYXNrZWRDb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8g
SWYgaXQncyBkZXRlcm1pbmVkIHRoYXQgYSBjb21wb25lbnQgc2hvdWxkIG5vdCB1cGRhdGUsIHdl
IHN0aWxsIHdhbnRcbiAgICAgIC8vIHRvIHNldCBwcm9wcyBhbmQgc3RhdGUgYnV0IHdlIHNob3J0
Y3V0IHRoZSByZXN0IG9mIHRoZSB1cGRhdGUuXG4gICAgICB0aGlzLl9jdXJyZW50RWxlbWVudCA9
IG5leHRQYXJlbnRFbGVtZW50O1xuICAgICAgdGhpcy5fY29udGV4dCA9IG5leHRVbm1hc2tlZENv
bnRleHQ7XG4gICAgICBpbnN0LnByb3BzID0gbmV4dFByb3BzO1xuICAgICAgaW5zdC5zdGF0ZSA9
IG5leHRTdGF0ZTtcbiAgICAgIGluc3QuY29udGV4dCA9IG5leHRDb250ZXh0O1xuICAgIH1cbiAg
fSxcblxuICBfcHJvY2Vzc1BlbmRpbmdTdGF0ZTogZnVuY3Rpb24gKHByb3BzLCBjb250ZXh0KSB7
XG4gICAgdmFyIGluc3QgPSB0aGlzLl9pbnN0YW5jZTtcbiAgICB2YXIgcXVldWUgPSB0aGlzLl9w
ZW5kaW5nU3RhdGVRdWV1ZTtcbiAgICB2YXIgcmVwbGFjZSA9IHRoaXMuX3BlbmRpbmdSZXBsYWNl
U3RhdGU7XG4gICAgdGhpcy5fcGVuZGluZ1JlcGxhY2VTdGF0ZSA9IGZhbHNlO1xuICAgIHRoaXMu
X3BlbmRpbmdTdGF0ZVF1ZXVlID0gbnVsbDtcblxuICAgIGlmICghcXVldWUpIHtcbiAgICAgIHJl
dHVybiBpbnN0LnN0YXRlO1xuICAgIH1cblxuICAgIGlmIChyZXBsYWNlICYmIHF1ZXVlLmxlbmd0
aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIHF1ZXVlWzBdO1xuICAgIH1cblxuICAgIHZhciBuZXh0
U3RhdGUgPSBfYXNzaWduKHt9LCByZXBsYWNlID8gcXVldWVbMF0gOiBpbnN0LnN0YXRlKTtcbiAg
ICBmb3IgKHZhciBpID0gcmVwbGFjZSA/IDEgOiAwOyBpIDwgcXVldWUubGVuZ3RoOyBpKyspIHtc
biAgICAgIHZhciBwYXJ0aWFsID0gcXVldWVbaV07XG4gICAgICBfYXNzaWduKG5leHRTdGF0ZSwg
dHlwZW9mIHBhcnRpYWwgPT09ICdmdW5jdGlvbicgPyBwYXJ0aWFsLmNhbGwoaW5zdCwgbmV4dFN0
YXRlLCBwcm9wcywgY29udGV4dCkgOiBwYXJ0aWFsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4
dFN0YXRlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBNZXJnZXMgbmV3IHByb3BzIGFuZCBzdGF0ZSwg
bm90aWZpZXMgZGVsZWdhdGUgbWV0aG9kcyBvZiB1cGRhdGUgYW5kXG4gICAqIHBlcmZvcm1zIHVw
ZGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IG5leHRFbGVtZW50IE5leHQg
ZWxlbWVudFxuICAgKiBAcGFyYW0ge29iamVjdH0gbmV4dFByb3BzIE5leHQgcHVibGljIG9iamVj
dCB0byBzZXQgYXMgcHJvcGVydGllcy5cbiAgICogQHBhcmFtIHs/b2JqZWN0fSBuZXh0U3RhdGUg
TmV4dCBvYmplY3QgdG8gc2V0IGFzIHN0YXRlLlxuICAgKiBAcGFyYW0gez9vYmplY3R9IG5leHRD
b250ZXh0IE5leHQgcHVibGljIG9iamVjdCB0byBzZXQgYXMgY29udGV4dC5cbiAgICogQHBhcmFt
IHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gez9v
YmplY3R9IHVubWFza2VkQ29udGV4dFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3BlcmZvcm1D
b21wb25lbnRVcGRhdGU6IGZ1bmN0aW9uIChuZXh0RWxlbWVudCwgbmV4dFByb3BzLCBuZXh0U3Rh
dGUsIG5leHRDb250ZXh0LCB0cmFuc2FjdGlvbiwgdW5tYXNrZWRDb250ZXh0KSB7XG4gICAgdmFy
IF90aGlzMiA9IHRoaXM7XG5cbiAgICB2YXIgaW5zdCA9IHRoaXMuX2luc3RhbmNlO1xuXG4gICAg
dmFyIGhhc0NvbXBvbmVudERpZFVwZGF0ZSA9IEJvb2xlYW4oaW5zdC5jb21wb25lbnREaWRVcGRh
dGUpO1xuICAgIHZhciBwcmV2UHJvcHM7XG4gICAgdmFyIHByZXZTdGF0ZTtcbiAgICB2YXIgcHJl
dkNvbnRleHQ7XG4gICAgaWYgKGhhc0NvbXBvbmVudERpZFVwZGF0ZSkge1xuICAgICAgcHJldlBy
b3BzID0gaW5zdC5wcm9wcztcbiAgICAgIHByZXZTdGF0ZSA9IGluc3Quc3RhdGU7XG4gICAgICBw
cmV2Q29udGV4dCA9IGluc3QuY29udGV4dDtcbiAgICB9XG5cbiAgICBpZiAoaW5zdC5jb21wb25l
bnRXaWxsVXBkYXRlKSB7XG4gICAgICBpZiAoZmFsc2UpIHtcbiAgICAgICAgbWVhc3VyZUxpZmVD
eWNsZVBlcmYoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBpbnN0LmNvbXBvbmVudFdp
bGxVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUsIG5leHRDb250ZXh0KTtcbiAgICAgICAgfSwg
dGhpcy5fZGVidWdJRCwgJ2NvbXBvbmVudFdpbGxVcGRhdGUnKTtcbiAgICAgIH0gZWxzZSB7XG4g
ICAgICAgIGluc3QuY29tcG9uZW50V2lsbFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSwgbmV4
dENvbnRleHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2N1cnJlbnRFbGVtZW50ID0g
bmV4dEVsZW1lbnQ7XG4gICAgdGhpcy5fY29udGV4dCA9IHVubWFza2VkQ29udGV4dDtcbiAgICBp
bnN0LnByb3BzID0gbmV4dFByb3BzO1xuICAgIGluc3Quc3RhdGUgPSBuZXh0U3RhdGU7XG4gICAg
aW5zdC5jb250ZXh0ID0gbmV4dENvbnRleHQ7XG5cbiAgICB0aGlzLl91cGRhdGVSZW5kZXJlZENv
bXBvbmVudCh0cmFuc2FjdGlvbiwgdW5tYXNrZWRDb250ZXh0KTtcblxuICAgIGlmIChoYXNDb21w
b25lbnREaWRVcGRhdGUpIHtcbiAgICAgIGlmIChmYWxzZSkge1xuICAgICAgICB0cmFuc2FjdGlv
bi5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBt
ZWFzdXJlTGlmZUN5Y2xlUGVyZihpbnN0LmNvbXBvbmVudERpZFVwZGF0ZS5iaW5kKGluc3QsIHBy
ZXZQcm9wcywgcHJldlN0YXRlLCBwcmV2Q29udGV4dCksIF90aGlzMi5fZGVidWdJRCwgJ2NvbXBv
bmVudERpZFVwZGF0ZScpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRy
YW5zYWN0aW9uLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUoaW5zdC5jb21wb25lbnREaWRV
cGRhdGUuYmluZChpbnN0LCBwcmV2UHJvcHMsIHByZXZTdGF0ZSwgcHJldkNvbnRleHQpLCBpbnN0
KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIENhbGwgdGhlIGNvbXBvbmVu
dCdzIGByZW5kZXJgIG1ldGhvZCBhbmQgdXBkYXRlIHRoZSBET00gYWNjb3JkaW5nbHkuXG4gICAq
XG4gICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAg
ICogQGludGVybmFsXG4gICAqL1xuICBfdXBkYXRlUmVuZGVyZWRDb21wb25lbnQ6IGZ1bmN0aW9u
ICh0cmFuc2FjdGlvbiwgY29udGV4dCkge1xuICAgIHZhciBwcmV2Q29tcG9uZW50SW5zdGFuY2Ug
PSB0aGlzLl9yZW5kZXJlZENvbXBvbmVudDtcbiAgICB2YXIgcHJldlJlbmRlcmVkRWxlbWVudCA9
IHByZXZDb21wb25lbnRJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQ7XG4gICAgdmFyIG5leHRSZW5k
ZXJlZEVsZW1lbnQgPSB0aGlzLl9yZW5kZXJWYWxpZGF0ZWRDb21wb25lbnQoKTtcblxuICAgIHZh
ciBkZWJ1Z0lEID0gMDtcbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgIGRlYnVnSUQgPSB0aGlzLl9k
ZWJ1Z0lEO1xuICAgIH1cblxuICAgIGlmIChzaG91bGRVcGRhdGVSZWFjdENvbXBvbmVudChwcmV2
UmVuZGVyZWRFbGVtZW50LCBuZXh0UmVuZGVyZWRFbGVtZW50KSkge1xuICAgICAgUmVhY3RSZWNv
bmNpbGVyLnJlY2VpdmVDb21wb25lbnQocHJldkNvbXBvbmVudEluc3RhbmNlLCBuZXh0UmVuZGVy
ZWRFbGVtZW50LCB0cmFuc2FjdGlvbiwgdGhpcy5fcHJvY2Vzc0NoaWxkQ29udGV4dChjb250ZXh0
KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBvbGRIb3N0Tm9kZSA9IFJlYWN0UmVjb25jaWxl
ci5nZXRIb3N0Tm9kZShwcmV2Q29tcG9uZW50SW5zdGFuY2UpO1xuICAgICAgUmVhY3RSZWNvbmNp
bGVyLnVubW91bnRDb21wb25lbnQocHJldkNvbXBvbmVudEluc3RhbmNlLCBmYWxzZSk7XG5cbiAg
ICAgIHZhciBub2RlVHlwZSA9IFJlYWN0Tm9kZVR5cGVzLmdldFR5cGUobmV4dFJlbmRlcmVkRWxl
bWVudCk7XG4gICAgICB0aGlzLl9yZW5kZXJlZE5vZGVUeXBlID0gbm9kZVR5cGU7XG4gICAgICB2
YXIgY2hpbGQgPSB0aGlzLl9pbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50KG5leHRSZW5kZXJlZEVs
ZW1lbnQsIG5vZGVUeXBlICE9PSBSZWFjdE5vZGVUeXBlcy5FTVBUWSAvKiBzaG91bGRIYXZlRGVi
dWdJRCAqL1xuICAgICAgKTtcbiAgICAgIHRoaXMuX3JlbmRlcmVkQ29tcG9uZW50ID0gY2hpbGQ7
XG5cbiAgICAgIHZhciBuZXh0TWFya3VwID0gUmVhY3RSZWNvbmNpbGVyLm1vdW50Q29tcG9uZW50
KGNoaWxkLCB0cmFuc2FjdGlvbiwgdGhpcy5faG9zdFBhcmVudCwgdGhpcy5faG9zdENvbnRhaW5l
ckluZm8sIHRoaXMuX3Byb2Nlc3NDaGlsZENvbnRleHQoY29udGV4dCksIGRlYnVnSUQpO1xuXG4g
ICAgICBpZiAoZmFsc2UpIHtcbiAgICAgICAgaWYgKGRlYnVnSUQgIT09IDApIHtcbiAgICAgICAg
ICB2YXIgY2hpbGREZWJ1Z0lEcyA9IGNoaWxkLl9kZWJ1Z0lEICE9PSAwID8gW2NoaWxkLl9kZWJ1
Z0lEXSA6IFtdO1xuICAgICAgICAgIFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vblNl
dENoaWxkcmVuKGRlYnVnSUQsIGNoaWxkRGVidWdJRHMpO1xuICAgICAgICB9XG4gICAgICB9XG5c
biAgICAgIHRoaXMuX3JlcGxhY2VOb2RlV2l0aE1hcmt1cChvbGRIb3N0Tm9kZSwgbmV4dE1hcmt1
cCwgcHJldkNvbXBvbmVudEluc3RhbmNlKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIE92
ZXJyaWRkZW4gaW4gc2hhbGxvdyByZW5kZXJpbmcuXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAg
ICovXG4gIF9yZXBsYWNlTm9kZVdpdGhNYXJrdXA6IGZ1bmN0aW9uIChvbGRIb3N0Tm9kZSwgbmV4
dE1hcmt1cCwgcHJldkluc3RhbmNlKSB7XG4gICAgUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudC5y
ZXBsYWNlTm9kZVdpdGhNYXJrdXAob2xkSG9zdE5vZGUsIG5leHRNYXJrdXAsIHByZXZJbnN0YW5j
ZSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIF9yZW5kZXJWYWxp
ZGF0ZWRDb21wb25lbnRXaXRob3V0T3duZXJPckNvbnRleHQ6IGZ1bmN0aW9uICgpIHtcbiAgICB2
YXIgaW5zdCA9IHRoaXMuX2luc3RhbmNlO1xuICAgIHZhciByZW5kZXJlZEVsZW1lbnQ7XG5cbiAg
ICBpZiAoZmFsc2UpIHtcbiAgICAgIHJlbmRlcmVkRWxlbWVudCA9IG1lYXN1cmVMaWZlQ3ljbGVQ
ZXJmKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGluc3QucmVuZGVyKCk7XG4gICAgICB9
LCB0aGlzLl9kZWJ1Z0lELCAncmVuZGVyJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbmRlcmVk
RWxlbWVudCA9IGluc3QucmVuZGVyKCk7XG4gICAgfVxuXG4gICAgaWYgKGZhbHNlKSB7XG4gICAg
ICAvLyBXZSBhbGxvdyBhdXRvLW1vY2tzIHRvIHByb2NlZWQgYXMgaWYgdGhleSdyZSByZXR1cm5p
bmcgbnVsbC5cbiAgICAgIGlmIChyZW5kZXJlZEVsZW1lbnQgPT09IHVuZGVmaW5lZCAmJiBpbnN0
LnJlbmRlci5faXNNb2NrRnVuY3Rpb24pIHtcbiAgICAgICAgLy8gVGhpcyBpcyBwcm9iYWJseSBi
YWQgcHJhY3RpY2UuIENvbnNpZGVyIHdhcm5pbmcgaGVyZSBhbmRcbiAgICAgICAgLy8gZGVwcmVj
YXRpbmcgdGhpcyBjb252ZW5pZW5jZS5cbiAgICAgICAgcmVuZGVyZWRFbGVtZW50ID0gbnVsbDtc
biAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVuZGVyZWRFbGVtZW50O1xuICB9LFxuXG4g
IC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudDog
ZnVuY3Rpb24gKCkge1xuICAgIHZhciByZW5kZXJlZEVsZW1lbnQ7XG4gICAgaWYgKFwicHJvZHVj
dGlvblwiICE9PSAncHJvZHVjdGlvbicgfHwgdGhpcy5fY29tcG9zaXRlVHlwZSAhPT0gQ29tcG9z
aXRlVHlwZXMuU3RhdGVsZXNzRnVuY3Rpb25hbCkge1xuICAgICAgUmVhY3RDdXJyZW50T3duZXIu
Y3VycmVudCA9IHRoaXM7XG4gICAgICB0cnkge1xuICAgICAgICByZW5kZXJlZEVsZW1lbnQgPSB0
aGlzLl9yZW5kZXJWYWxpZGF0ZWRDb21wb25lbnRXaXRob3V0T3duZXJPckNvbnRleHQoKTtcbiAg
ICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgPSBudWxs
O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZW5kZXJlZEVsZW1lbnQgPSB0aGlzLl9y
ZW5kZXJWYWxpZGF0ZWRDb21wb25lbnRXaXRob3V0T3duZXJPckNvbnRleHQoKTtcbiAgICB9XG4g
ICAgIShcbiAgICAvLyBUT0RPOiBBbiBgaXNWYWxpZE5vZGVgIGZ1bmN0aW9uIHdvdWxkIHByb2Jh
Ymx5IGJlIG1vcmUgYXBwcm9wcmlhdGVcbiAgICByZW5kZXJlZEVsZW1lbnQgPT09IG51bGwgfHwg
cmVuZGVyZWRFbGVtZW50ID09PSBmYWxzZSB8fCBSZWFjdC5pc1ZhbGlkRWxlbWVudChyZW5kZXJl
ZEVsZW1lbnQpKSA/ICBmYWxzZSA/IGludmFyaWFudChmYWxzZSwgJyVzLnJlbmRlcigpOiBBIHZh
bGlkIFJlYWN0IGVsZW1lbnQgKG9yIG51bGwpIG11c3QgYmUgcmV0dXJuZWQuIFlvdSBtYXkgaGF2
ZSByZXR1cm5lZCB1bmRlZmluZWQsIGFuIGFycmF5IG9yIHNvbWUgb3RoZXIgaW52YWxpZCBvYmpl
Y3QuJywgdGhpcy5nZXROYW1lKCkgfHwgJ1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50JykgOiBfcHJv
ZEludmFyaWFudCgnMTA5JywgdGhpcy5nZXROYW1lKCkgfHwgJ1JlYWN0Q29tcG9zaXRlQ29tcG9u
ZW50JykgOiB2b2lkIDA7XG5cbiAgICByZXR1cm4gcmVuZGVyZWRFbGVtZW50O1xuICB9LFxuXG4g
IC8qKlxuICAgKiBMYXppbHkgYWxsb2NhdGVzIHRoZSByZWZzIG9iamVjdCBhbmQgc3RvcmVzIGBj
b21wb25lbnRgIGFzIGByZWZgLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmIFJlZmVy
ZW5jZSBuYW1lLlxuICAgKiBAcGFyYW0ge2NvbXBvbmVudH0gY29tcG9uZW50IENvbXBvbmVudCB0
byBzdG9yZSBhcyBgcmVmYC5cbiAgICogQGZpbmFsXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBh
dHRhY2hSZWY6IGZ1bmN0aW9uIChyZWYsIGNvbXBvbmVudCkge1xuICAgIHZhciBpbnN0ID0gdGhp
cy5nZXRQdWJsaWNJbnN0YW5jZSgpO1xuICAgICEoaW5zdCAhPSBudWxsKSA/ICBmYWxzZSA/IGlu
dmFyaWFudChmYWxzZSwgJ1N0YXRlbGVzcyBmdW5jdGlvbiBjb21wb25lbnRzIGNhbm5vdCBoYXZl
IHJlZnMuJykgOiBfcHJvZEludmFyaWFudCgnMTEwJykgOiB2b2lkIDA7XG4gICAgdmFyIHB1Ymxp
Y0NvbXBvbmVudEluc3RhbmNlID0gY29tcG9uZW50LmdldFB1YmxpY0luc3RhbmNlKCk7XG4gICAg
aWYgKGZhbHNlKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudCAmJiBjb21w
b25lbnQuZ2V0TmFtZSA/IGNvbXBvbmVudC5nZXROYW1lKCkgOiAnYSBjb21wb25lbnQnO1xuICAg
ICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcocHVibGlj
Q29tcG9uZW50SW5zdGFuY2UgIT0gbnVsbCB8fCBjb21wb25lbnQuX2NvbXBvc2l0ZVR5cGUgIT09
IENvbXBvc2l0ZVR5cGVzLlN0YXRlbGVzc0Z1bmN0aW9uYWwsICdTdGF0ZWxlc3MgZnVuY3Rpb24g
Y29tcG9uZW50cyBjYW5ub3QgYmUgZ2l2ZW4gcmVmcyAnICsgJyhTZWUgcmVmIFwiJXNcIiBpbiAl
cyBjcmVhdGVkIGJ5ICVzKS4gJyArICdBdHRlbXB0cyB0byBhY2Nlc3MgdGhpcyByZWYgd2lsbCBm
YWlsLicsIHJlZiwgY29tcG9uZW50TmFtZSwgdGhpcy5nZXROYW1lKCkpIDogdm9pZCAwO1xuICAg
IH1cbiAgICB2YXIgcmVmcyA9IGluc3QucmVmcyA9PT0gZW1wdHlPYmplY3QgPyBpbnN0LnJlZnMg
PSB7fSA6IGluc3QucmVmcztcbiAgICByZWZzW3JlZl0gPSBwdWJsaWNDb21wb25lbnRJbnN0YW5j
ZTtcbiAgfSxcblxuICAvKipcbiAgICogRGV0YWNoZXMgYSByZWZlcmVuY2UgbmFtZS5cbiAgICpc
biAgICogQHBhcmFtIHtzdHJpbmd9IHJlZiBOYW1lIHRvIGRlcmVmZXJlbmNlLlxuICAgKiBAZmlu
YWxcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRldGFjaFJlZjogZnVuY3Rpb24gKHJlZikge1xu
ICAgIHZhciByZWZzID0gdGhpcy5nZXRQdWJsaWNJbnN0YW5jZSgpLnJlZnM7XG4gICAgZGVsZXRl
IHJlZnNbcmVmXTtcbiAgfSxcblxuICAvKipcbiAgICogR2V0IGEgdGV4dCBkZXNjcmlwdGlvbiBv
ZiB0aGUgY29tcG9uZW50IHRoYXQgY2FuIGJlIHVzZWQgdG8gaWRlbnRpZnkgaXRcbiAgICogaW4g
ZXJyb3IgbWVzc2FnZXMuXG4gICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIG5hbWUgb3IgbnVsbC5c
biAgICogQGludGVybmFsXG4gICAqL1xuICBnZXROYW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFy
IHR5cGUgPSB0aGlzLl9jdXJyZW50RWxlbWVudC50eXBlO1xuICAgIHZhciBjb25zdHJ1Y3RvciA9
IHRoaXMuX2luc3RhbmNlICYmIHRoaXMuX2luc3RhbmNlLmNvbnN0cnVjdG9yO1xuICAgIHJldHVy
biB0eXBlLmRpc3BsYXlOYW1lIHx8IGNvbnN0cnVjdG9yICYmIGNvbnN0cnVjdG9yLmRpc3BsYXlO
YW1lIHx8IHR5cGUubmFtZSB8fCBjb25zdHJ1Y3RvciAmJiBjb25zdHJ1Y3Rvci5uYW1lIHx8IG51
bGw7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcHVibGljbHkgYWNjZXNzaWJsZSByZXBy
ZXNlbnRhdGlvbiBvZiB0aGlzIGNvbXBvbmVudCAtIGkuZS4gd2hhdFxuICAgKiBpcyBleHBvc2Vk
IGJ5IHJlZnMgYW5kIHJldHVybmVkIGJ5IHJlbmRlci4gQ2FuIGJlIG51bGwgZm9yIHN0YXRlbGVz
c1xuICAgKiBjb21wb25lbnRzLlxuICAgKlxuICAgKiBAcmV0dXJuIHtSZWFjdENvbXBvbmVudH0g
dGhlIHB1YmxpYyBjb21wb25lbnQgaW5zdGFuY2UuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAg
Z2V0UHVibGljSW5zdGFuY2U6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaW5zdCA9IHRoaXMuX2lu
c3RhbmNlO1xuICAgIGlmICh0aGlzLl9jb21wb3NpdGVUeXBlID09PSBDb21wb3NpdGVUeXBlcy5T
dGF0ZWxlc3NGdW5jdGlvbmFsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0
dXJuIGluc3Q7XG4gIH0sXG5cbiAgLy8gU3R1YlxuICBfaW5zdGFudGlhdGVSZWFjdENvbXBvbmVu
dDogbnVsbFxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudDtc
blxuLyoqKi8gfSksXG4vKiAxNTcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMs
IF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIENvcHly
aWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVk
LlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHls
ZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVj
dG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRl
bnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRp
cmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG5cblxudmFyIG5leHREZWJ1Z0lEID0gMTtcblxuZnVu
Y3Rpb24gZ2V0TmV4dERlYnVnSUQoKSB7XG4gIHJldHVybiBuZXh0RGVidWdJRCsrO1xufVxuXG5t
b2R1bGUuZXhwb3J0cyA9IGdldE5leHREZWJ1Z0lEO1xuXG4vKioqLyB9KSxcbi8qIDE1OCAqL1xu
LyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xu
XG5cInVzZSBzdHJpY3RcIjtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCwgRmFjZWJv
b2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29k
ZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4g
KiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUu
IEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGlu
IHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIFxuICovXG5c
blxuXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQgdHlwZS4gSWYg
dGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4g
bnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxuXG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBF
ID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2xbJ2ZvciddICYmIFN5bWJv
bFsnZm9yJ10oJ3JlYWN0LmVsZW1lbnQnKSB8fCAweGVhYzc7XG5cbm1vZHVsZS5leHBvcnRzID0g
UkVBQ1RfRUxFTUVOVF9UWVBFO1xuXG4vKioqLyB9KSxcbi8qIDE1OSAqL1xuLyoqKi8gKGZ1bmN0
aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJp
Y3RcIjtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNl
ZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZp
bGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9u
YWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRT
IGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIFxuICovXG5cblxuXG4vKiBnbG9i
YWwgU3ltYm9sICovXG5cbnZhciBJVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAn
ZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbnZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9
ICdAQGl0ZXJhdG9yJzsgLy8gQmVmb3JlIFN5bWJvbCBzcGVjLlxuXG4vKipcbiAqIFJldHVybnMg
dGhlIGl0ZXJhdG9yIG1ldGhvZCBmdW5jdGlvbiBjb250YWluZWQgb24gdGhlIGl0ZXJhYmxlIG9i
amVjdC5cbiAqXG4gKiBCZSBzdXJlIHRvIGludm9rZSB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgaXRl
cmFibGUgYXMgY29udGV4dDpcbiAqXG4gKiAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRv
ckZuKG15SXRlcmFibGUpO1xuICogICAgIGlmIChpdGVyYXRvckZuKSB7XG4gKiAgICAgICB2YXIg
aXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobXlJdGVyYWJsZSk7XG4gKiAgICAgICAuLi5cbiAq
ICAgICB9XG4gKlxuICogQHBhcmFtIHs/b2JqZWN0fSBtYXliZUl0ZXJhYmxlXG4gKiBAcmV0dXJu
IHs/ZnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkg
e1xuICB2YXIgaXRlcmF0b3JGbiA9IG1heWJlSXRlcmFibGUgJiYgKElURVJBVE9SX1NZTUJPTCAm
JiBtYXliZUl0ZXJhYmxlW0lURVJBVE9SX1NZTUJPTF0gfHwgbWF5YmVJdGVyYWJsZVtGQVVYX0lU
RVJBVE9SX1NZTUJPTF0pO1xuICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicp
IHtcbiAgICByZXR1cm4gaXRlcmF0b3JGbjtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdl
dEl0ZXJhdG9yRm47XG5cbi8qKiovIH0pLFxuLyogMTYwICovXG4vKioqLyAoZnVuY3Rpb24obW9k
dWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xu
LyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKipcbiAqIENv
cHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1z
dHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRp
cmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBw
YXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1l
IGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG5cblxudmFyIEtleUVzY2FwZVV0aWxzID0gX193
ZWJwYWNrX3JlcXVpcmVfXyg0NCk7XG52YXIgdHJhdmVyc2VBbGxDaGlsZHJlbiA9IF9fd2VicGFj
a19yZXF1aXJlX18oNzcpO1xudmFyIHdhcm5pbmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xu
XG52YXIgUmVhY3RDb21wb25lbnRUcmVlSG9vaztcblxuaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAn
dW5kZWZpbmVkJyAmJiBPYmplY3Qoe1wiTk9ERV9FTlZcIjpcInByb2R1Y3Rpb25cIixcIlBVQkxJ
Q19VUkxcIjpcIi5cIn0pICYmIFwicHJvZHVjdGlvblwiID09PSAndGVzdCcpIHtcbiAgLy8gVGVt
cG9yYXJ5IGhhY2suXG4gIC8vIElubGluZSByZXF1aXJlcyBkb24ndCB3b3JrIHdlbGwgd2l0aCBK
ZXN0OlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzcyNDBc
biAgLy8gUmVtb3ZlIHRoZSBpbmxpbmUgcmVxdWlyZXMgd2hlbiB3ZSBkb24ndCBuZWVkIHRoZW0g
YW55bW9yZTpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvNzE3
OFxuICBSZWFjdENvbXBvbmVudFRyZWVIb29rID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3OCk7XG59
XG5cbi8qKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gdHJhdmVyc2VDb250ZXh0IENvbnRleHQgcGFz
c2VkIHRocm91Z2ggdHJhdmVyc2FsLlxuICogQHBhcmFtIHs/UmVhY3RDb21wb25lbnR9IGNoaWxk
IFJlYWN0IGNoaWxkIGNvbXBvbmVudC5cbiAqIEBwYXJhbSB7IXN0cmluZ30gbmFtZSBTdHJpbmcg
bmFtZSBvZiBrZXkgcGF0aCB0byBjaGlsZC5cbiAqIEBwYXJhbSB7bnVtYmVyPX0gc2VsZkRlYnVn
SUQgT3B0aW9uYWwgZGVidWdJRCBvZiB0aGUgY3VycmVudCBpbnRlcm5hbCBpbnN0YW5jZS5cbiAq
L1xuZnVuY3Rpb24gZmxhdHRlblNpbmdsZUNoaWxkSW50b0NvbnRleHQodHJhdmVyc2VDb250ZXh0
LCBjaGlsZCwgbmFtZSwgc2VsZkRlYnVnSUQpIHtcbiAgLy8gV2UgZm91bmQgYSBjb21wb25lbnQg
aW5zdGFuY2UuXG4gIGlmICh0cmF2ZXJzZUNvbnRleHQgJiYgdHlwZW9mIHRyYXZlcnNlQ29udGV4
dCA9PT0gJ29iamVjdCcpIHtcbiAgICB2YXIgcmVzdWx0ID0gdHJhdmVyc2VDb250ZXh0O1xuICAg
IHZhciBrZXlVbmlxdWUgPSByZXN1bHRbbmFtZV0gPT09IHVuZGVmaW5lZDtcbiAgICBpZiAoZmFs
c2UpIHtcbiAgICAgIGlmICghUmVhY3RDb21wb25lbnRUcmVlSG9vaykge1xuICAgICAgICBSZWFj
dENvbXBvbmVudFRyZWVIb29rID0gcmVxdWlyZSgncmVhY3QvbGliL1JlYWN0Q29tcG9uZW50VHJl
ZUhvb2snKTtcbiAgICAgIH1cbiAgICAgIGlmICgha2V5VW5pcXVlKSB7XG4gICAgICAgIHByb2Nl
c3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnZmxhdHRl
bkNoaWxkcmVuKC4uLik6IEVuY291bnRlcmVkIHR3byBjaGlsZHJlbiB3aXRoIHRoZSBzYW1lIGtl
eSwgJyArICdgJXNgLiBDaGlsZCBrZXlzIG11c3QgYmUgdW5pcXVlOyB3aGVuIHR3byBjaGlsZHJl
biBzaGFyZSBhIGtleSwgb25seSAnICsgJ3RoZSBmaXJzdCBjaGlsZCB3aWxsIGJlIHVzZWQuJXMn
LCBLZXlFc2NhcGVVdGlscy51bmVzY2FwZShuYW1lKSwgUmVhY3RDb21wb25lbnRUcmVlSG9vay5n
ZXRTdGFja0FkZGVuZHVtQnlJRChzZWxmRGVidWdJRCkpIDogdm9pZCAwO1xuICAgICAgfVxuICAg
IH1cbiAgICBpZiAoa2V5VW5pcXVlICYmIGNoaWxkICE9IG51bGwpIHtcbiAgICAgIHJlc3VsdFtu
YW1lXSA9IGNoaWxkO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEZsYXR0ZW5zIGNoaWxkcmVu
IHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYC4gQW55IG51
bGxcbiAqIGNoaWxkcmVuIHdpbGwgbm90IGJlIGluY2x1ZGVkIGluIHRoZSByZXN1bHRpbmcgb2Jq
ZWN0LlxuICogQHJldHVybiB7IW9iamVjdH0gZmxhdHRlbmVkIGNoaWxkcmVuIGtleWVkIGJ5IG5h
bWUuXG4gKi9cbmZ1bmN0aW9uIGZsYXR0ZW5DaGlsZHJlbihjaGlsZHJlbiwgc2VsZkRlYnVnSUQp
IHtcbiAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1c
biAgdmFyIHJlc3VsdCA9IHt9O1xuXG4gIGlmIChmYWxzZSkge1xuICAgIHRyYXZlcnNlQWxsQ2hp
bGRyZW4oY2hpbGRyZW4sIGZ1bmN0aW9uICh0cmF2ZXJzZUNvbnRleHQsIGNoaWxkLCBuYW1lKSB7
XG4gICAgICByZXR1cm4gZmxhdHRlblNpbmdsZUNoaWxkSW50b0NvbnRleHQodHJhdmVyc2VDb250
ZXh0LCBjaGlsZCwgbmFtZSwgc2VsZkRlYnVnSUQpO1xuICAgIH0sIHJlc3VsdCk7XG4gIH0gZWxz
ZSB7XG4gICAgdHJhdmVyc2VBbGxDaGlsZHJlbihjaGlsZHJlbiwgZmxhdHRlblNpbmdsZUNoaWxk
SW50b0NvbnRleHQsIHJlc3VsdCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxl
LmV4cG9ydHMgPSBmbGF0dGVuQ2hpbGRyZW47XG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99
LmNhbGwoZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyg3MikpKVxuXG4vKioqLyB9KSxcbi8q
IDE2MSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVp
cmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTQtcHJlc2Vu
dCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBz
b3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQg
aW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291
cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJl
IGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAq
L1xuXG5cblxudmFyIF9hc3NpZ24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuXG52YXIgUG9v
bGVkQ2xhc3MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTtcbnZhciBUcmFuc2FjdGlvbiA9IF9f
d2VicGFja19yZXF1aXJlX18oMjQpO1xudmFyIFJlYWN0SW5zdHJ1bWVudGF0aW9uID0gX193ZWJw
YWNrX3JlcXVpcmVfXyg3KTtcbnZhciBSZWFjdFNlcnZlclVwZGF0ZVF1ZXVlID0gX193ZWJwYWNr
X3JlcXVpcmVfXygxNjIpO1xuXG4vKipcbiAqIEV4ZWN1dGVkIHdpdGhpbiB0aGUgc2NvcGUgb2Yg
dGhlIGBUcmFuc2FjdGlvbmAgaW5zdGFuY2UuIENvbnNpZGVyIHRoZXNlIGFzXG4gKiBiZWluZyBt
ZW1iZXIgbWV0aG9kcywgYnV0IHdpdGggYW4gaW1wbGllZCBvcmRlcmluZyB3aGlsZSBiZWluZyBp
c29sYXRlZCBmcm9tXG4gKiBlYWNoIG90aGVyLlxuICovXG52YXIgVFJBTlNBQ1RJT05fV1JBUFBF
UlMgPSBbXTtcblxuaWYgKGZhbHNlKSB7XG4gIFRSQU5TQUNUSU9OX1dSQVBQRVJTLnB1c2goe1xu
ICAgIGluaXRpYWxpemU6IFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vbkJlZ2luRmx1
c2gsXG4gICAgY2xvc2U6IFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vbkVuZEZsdXNo
XG4gIH0pO1xufVxuXG52YXIgbm9vcENhbGxiYWNrUXVldWUgPSB7XG4gIGVucXVldWU6IGZ1bmN0
aW9uICgpIHt9XG59O1xuXG4vKipcbiAqIEBjbGFzcyBSZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5z
YWN0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHJlbmRlclRvU3RhdGljTWFya3VwXG4gKi9cbmZ1
bmN0aW9uIFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb24ocmVuZGVyVG9TdGF0aWNNYXJr
dXApIHtcbiAgdGhpcy5yZWluaXRpYWxpemVUcmFuc2FjdGlvbigpO1xuICB0aGlzLnJlbmRlclRv
U3RhdGljTWFya3VwID0gcmVuZGVyVG9TdGF0aWNNYXJrdXA7XG4gIHRoaXMudXNlQ3JlYXRlRWxl
bWVudCA9IGZhbHNlO1xuICB0aGlzLnVwZGF0ZVF1ZXVlID0gbmV3IFJlYWN0U2VydmVyVXBkYXRl
UXVldWUodGhpcyk7XG59XG5cbnZhciBNaXhpbiA9IHtcbiAgLyoqXG4gICAqIEBzZWUgVHJhbnNh
Y3Rpb25cbiAgICogQGFic3RyYWN0XG4gICAqIEBmaW5hbFxuICAgKiBAcmV0dXJuIHthcnJheX0g
RW1wdHkgbGlzdCBvZiBvcGVyYXRpb24gd3JhcCBwcm9jZWR1cmVzLlxuICAgKi9cbiAgZ2V0VHJh
bnNhY3Rpb25XcmFwcGVyczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBUUkFOU0FDVElPTl9X
UkFQUEVSUztcbiAgfSxcblxuICAvKipcbiAgICogQHJldHVybiB7b2JqZWN0fSBUaGUgcXVldWUg
dG8gY29sbGVjdCBgb25ET01SZWFkeWAgY2FsbGJhY2tzIHdpdGguXG4gICAqL1xuICBnZXRSZWFj
dE1vdW50UmVhZHk6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbm9vcENhbGxiYWNrUXVldWU7
XG4gIH0sXG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge29iamVjdH0gVGhlIHF1ZXVlIHRvIGNvbGxl
Y3QgUmVhY3QgYXN5bmMgZXZlbnRzLlxuICAgKi9cbiAgZ2V0VXBkYXRlUXVldWU6IGZ1bmN0aW9u
ICgpIHtcbiAgICByZXR1cm4gdGhpcy51cGRhdGVRdWV1ZTtcbiAgfSxcblxuICAvKipcbiAgICog
YFBvb2xlZENsYXNzYCBsb29rcyBmb3IgdGhpcywgYW5kIHdpbGwgaW52b2tlIHRoaXMgYmVmb3Jl
IGFsbG93aW5nIHRoaXNcbiAgICogaW5zdGFuY2UgdG8gYmUgcmV1c2VkLlxuICAgKi9cbiAgZGVz
dHJ1Y3RvcjogZnVuY3Rpb24gKCkge30sXG5cbiAgY2hlY2twb2ludDogZnVuY3Rpb24gKCkge30s
XG5cbiAgcm9sbGJhY2s6IGZ1bmN0aW9uICgpIHt9XG59O1xuXG5fYXNzaWduKFJlYWN0U2VydmVy
UmVuZGVyaW5nVHJhbnNhY3Rpb24ucHJvdG90eXBlLCBUcmFuc2FjdGlvbiwgTWl4aW4pO1xuXG5Q
b29sZWRDbGFzcy5hZGRQb29saW5nVG8oUmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbik7
XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbjtcblxu
LyoqKi8gfSksXG4vKiAxNjIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9f
d2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIENvcHlyaWdo
dCAyMDE1LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxu
ICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBs
aWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9y
eSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQg
cmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVj
dG9yeS5cbiAqXG4gKiBcbiAqL1xuXG5cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3Rh
bmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9y
KSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0
aW9uXCIpOyB9IH1cblxudmFyIFJlYWN0VXBkYXRlUXVldWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KDQ1KTtcblxudmFyIHdhcm5pbmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuXG5mdW5jdGlv
biB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgY2FsbGVyTmFtZSkge1xuICBpZiAoZmFsc2UpIHtc
biAgICB2YXIgY29uc3RydWN0b3IgPSBwdWJsaWNJbnN0YW5jZS5jb25zdHJ1Y3RvcjtcbiAgICBw
cm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJyVz
KC4uLik6IENhbiBvbmx5IHVwZGF0ZSBhIG1vdW50aW5nIGNvbXBvbmVudC4gJyArICdUaGlzIHVz
dWFsbHkgbWVhbnMgeW91IGNhbGxlZCAlcygpIG91dHNpZGUgY29tcG9uZW50V2lsbE1vdW50KCkg
b24gdGhlIHNlcnZlci4gJyArICdUaGlzIGlzIGEgbm8tb3AuIFBsZWFzZSBjaGVjayB0aGUgY29k
ZSBmb3IgdGhlICVzIGNvbXBvbmVudC4nLCBjYWxsZXJOYW1lLCBjYWxsZXJOYW1lLCBjb25zdHJ1
Y3RvciAmJiAoY29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgY29uc3RydWN0b3IubmFtZSkgfHwg
J1JlYWN0Q2xhc3MnKSA6IHZvaWQgMDtcbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgaXMgdGhlIHVw
ZGF0ZSBxdWV1ZSB1c2VkIGZvciBzZXJ2ZXIgcmVuZGVyaW5nLlxuICogSXQgZGVsZWdhdGVzIHRv
IFJlYWN0VXBkYXRlUXVldWUgd2hpbGUgc2VydmVyIHJlbmRlcmluZyBpcyBpbiBwcm9ncmVzcyBh
bmRcbiAqIHN3aXRjaGVzIHRvIFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlIGFmdGVyIHRoZSB0cmFuc2Fj
dGlvbiBoYXMgY29tcGxldGVkLlxuICogQGNsYXNzIFJlYWN0U2VydmVyVXBkYXRlUXVldWVcbiAq
IEBwYXJhbSB7VHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gKi9cblxudmFyIFJlYWN0U2VydmVy
VXBkYXRlUXVldWUgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFJlYWN0U2VydmVyVXBkYXRl
UXVldWUodHJhbnNhY3Rpb24pIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUmVhY3RTZXJ2
ZXJVcGRhdGVRdWV1ZSk7XG5cbiAgICB0aGlzLnRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb247XG4g
IH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgb3Igbm90IHRoaXMgY29tcG9zaXRlIGNv
bXBvbmVudCBpcyBtb3VudGVkLlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3Rh
bmNlIFRoZSBpbnN0YW5jZSB3ZSB3YW50IHRvIHRlc3QuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59
IFRydWUgaWYgbW91bnRlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKiBAcHJvdGVjdGVkXG4gICAq
IEBmaW5hbFxuICAgKi9cblxuXG4gIFJlYWN0U2VydmVyVXBkYXRlUXVldWUucHJvdG90eXBlLmlz
TW91bnRlZCA9IGZ1bmN0aW9uIGlzTW91bnRlZChwdWJsaWNJbnN0YW5jZSkge1xuICAgIHJldHVy
biBmYWxzZTtcbiAgfTtcblxuICAvKipcbiAgICogRW5xdWV1ZSBhIGNhbGxiYWNrIHRoYXQgd2ls
bCBiZSBleGVjdXRlZCBhZnRlciBhbGwgdGhlIHBlbmRpbmcgdXBkYXRlc1xuICAgKiBoYXZlIHBy
b2Nlc3NlZC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBU
aGUgaW5zdGFuY2UgdG8gdXNlIGFzIGB0aGlzYCBjb250ZXh0LlxuICAgKiBAcGFyYW0gez9mdW5j
dGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIHN0YXRlIGlzIHVwZGF0ZWQuXG4gICAqIEBpbnRl
cm5hbFxuICAgKi9cblxuXG4gIFJlYWN0U2VydmVyVXBkYXRlUXVldWUucHJvdG90eXBlLmVucXVl
dWVDYWxsYmFjayA9IGZ1bmN0aW9uIGVucXVldWVDYWxsYmFjayhwdWJsaWNJbnN0YW5jZSwgY2Fs
bGJhY2ssIGNhbGxlck5hbWUpIHtcbiAgICBpZiAodGhpcy50cmFuc2FjdGlvbi5pc0luVHJhbnNh
Y3Rpb24oKSkge1xuICAgICAgUmVhY3RVcGRhdGVRdWV1ZS5lbnF1ZXVlQ2FsbGJhY2socHVibGlj
SW5zdGFuY2UsIGNhbGxiYWNrLCBjYWxsZXJOYW1lKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4g
ICAqIEZvcmNlcyBhbiB1cGRhdGUuIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW52b2tlZCB3aGVuIGl0
IGlzIGtub3duIHdpdGhcbiAgICogY2VydGFpbnR5IHRoYXQgd2UgYXJlICoqbm90KiogaW4gYSBE
T00gdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIFlvdSBtYXkgd2FudCB0byBjYWxsIHRoaXMgd2hl
biB5b3Uga25vdyB0aGF0IHNvbWUgZGVlcGVyIGFzcGVjdCBvZiB0aGVcbiAgICogY29tcG9uZW50
J3Mgc3RhdGUgaGFzIGNoYW5nZWQgYnV0IGBzZXRTdGF0ZWAgd2FzIG5vdCBjYWxsZWQuXG4gICAq
XG4gICAqIFRoaXMgd2lsbCBub3QgaW52b2tlIGBzaG91bGRDb21wb25lbnRVcGRhdGVgLCBidXQg
aXQgd2lsbCBpbnZva2VcbiAgICogYGNvbXBvbmVudFdpbGxVcGRhdGVgIGFuZCBgY29tcG9uZW50
RGlkVXBkYXRlYC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5j
ZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuXG4gICAqIEBpbnRlcm5hbFxuICAg
Ki9cblxuXG4gIFJlYWN0U2VydmVyVXBkYXRlUXVldWUucHJvdG90eXBlLmVucXVldWVGb3JjZVVw
ZGF0ZSA9IGZ1bmN0aW9uIGVucXVldWVGb3JjZVVwZGF0ZShwdWJsaWNJbnN0YW5jZSkge1xuICAg
IGlmICh0aGlzLnRyYW5zYWN0aW9uLmlzSW5UcmFuc2FjdGlvbigpKSB7XG4gICAgICBSZWFjdFVw
ZGF0ZVF1ZXVlLmVucXVldWVGb3JjZVVwZGF0ZShwdWJsaWNJbnN0YW5jZSk7XG4gICAgfSBlbHNl
IHtcbiAgICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCAnZm9yY2VVcGRhdGUnKTtcbiAgICB9
XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIGFsbCBvZiB0aGUgc3RhdGUuIEFsd2F5cyB1
c2UgdGhpcyBvciBgc2V0U3RhdGVgIHRvIG11dGF0ZSBzdGF0ZS5cbiAgICogWW91IHNob3VsZCB0
cmVhdCBgdGhpcy5zdGF0ZWAgYXMgaW1tdXRhYmxlLlxuICAgKlxuICAgKiBUaGVyZSBpcyBubyBn
dWFyYW50ZWUgdGhhdCBgdGhpcy5zdGF0ZWAgd2lsbCBiZSBpbW1lZGlhdGVseSB1cGRhdGVkLCBz
b1xuICAgKiBhY2Nlc3NpbmcgYHRoaXMuc3RhdGVgIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2Qg
bWF5IHJldHVybiB0aGUgb2xkIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9
IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICog
QHBhcmFtIHtvYmplY3R8ZnVuY3Rpb259IGNvbXBsZXRlU3RhdGUgTmV4dCBzdGF0ZS5cbiAgICog
QGludGVybmFsXG4gICAqL1xuXG5cbiAgUmVhY3RTZXJ2ZXJVcGRhdGVRdWV1ZS5wcm90b3R5cGUu
ZW5xdWV1ZVJlcGxhY2VTdGF0ZSA9IGZ1bmN0aW9uIGVucXVldWVSZXBsYWNlU3RhdGUocHVibGlj
SW5zdGFuY2UsIGNvbXBsZXRlU3RhdGUpIHtcbiAgICBpZiAodGhpcy50cmFuc2FjdGlvbi5pc0lu
VHJhbnNhY3Rpb24oKSkge1xuICAgICAgUmVhY3RVcGRhdGVRdWV1ZS5lbnF1ZXVlUmVwbGFjZVN0
YXRlKHB1YmxpY0luc3RhbmNlLCBjb21wbGV0ZVN0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAg
d2Fybk5vb3AocHVibGljSW5zdGFuY2UsICdyZXBsYWNlU3RhdGUnKTtcbiAgICB9XG4gIH07XG5c
biAgLyoqXG4gICAqIFNldHMgYSBzdWJzZXQgb2YgdGhlIHN0YXRlLiBUaGlzIG9ubHkgZXhpc3Rz
IGJlY2F1c2UgX3BlbmRpbmdTdGF0ZSBpc1xuICAgKiBpbnRlcm5hbC4gVGhpcyBwcm92aWRlcyBh
IG1lcmdpbmcgc3RyYXRlZ3kgdGhhdCBpcyBub3QgYXZhaWxhYmxlIHRvIGRlZXBcbiAgICogcHJv
cGVydGllcyB3aGljaCBpcyBjb25mdXNpbmcuIFRPRE86IEV4cG9zZSBwZW5kaW5nU3RhdGUgb3Ig
ZG9uJ3QgdXNlIGl0XG4gICAqIGR1cmluZyB0aGUgbWVyZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB7
UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRoYXQgc2hvdWxkIHJlcmVu
ZGVyLlxuICAgKiBAcGFyYW0ge29iamVjdHxmdW5jdGlvbn0gcGFydGlhbFN0YXRlIE5leHQgcGFy
dGlhbCBzdGF0ZSB0byBiZSBtZXJnZWQgd2l0aCBzdGF0ZS5cbiAgICogQGludGVybmFsXG4gICAq
L1xuXG5cbiAgUmVhY3RTZXJ2ZXJVcGRhdGVRdWV1ZS5wcm90b3R5cGUuZW5xdWV1ZVNldFN0YXRl
ID0gZnVuY3Rpb24gZW5xdWV1ZVNldFN0YXRlKHB1YmxpY0luc3RhbmNlLCBwYXJ0aWFsU3RhdGUp
IHtcbiAgICBpZiAodGhpcy50cmFuc2FjdGlvbi5pc0luVHJhbnNhY3Rpb24oKSkge1xuICAgICAg
UmVhY3RVcGRhdGVRdWV1ZS5lbnF1ZXVlU2V0U3RhdGUocHVibGljSW5zdGFuY2UsIHBhcnRpYWxT
dGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCAnc2V0
U3RhdGUnKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFJlYWN0U2VydmVyVXBkYXRlUXVldWU7
XG59KCk7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RTZXJ2ZXJVcGRhdGVRdWV1ZTtcblxuLyoq
Ki8gfSksXG4vKiAxNjMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2Vi
cGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIENvcHlyaWdodCAy
MDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpc
biAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNl
bnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBv
ZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmln
aHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9y
eS5cbiAqXG4gKi9cblxuXG5cbnZhciBfYXNzaWduID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtc
blxudmFyIERPTUxhenlUcmVlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7XG52YXIgUmVhY3RE
T01Db21wb25lbnRUcmVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcblxudmFyIFJlYWN0RE9N
RW1wdHlDb21wb25lbnQgPSBmdW5jdGlvbiAoaW5zdGFudGlhdGUpIHtcbiAgLy8gUmVhY3RDb21w
b3NpdGVDb21wb25lbnQgdXNlcyB0aGlzOlxuICB0aGlzLl9jdXJyZW50RWxlbWVudCA9IG51bGw7
XG4gIC8vIFJlYWN0RE9NQ29tcG9uZW50VHJlZSB1c2VzIHRoZXNlOlxuICB0aGlzLl9ob3N0Tm9k
ZSA9IG51bGw7XG4gIHRoaXMuX2hvc3RQYXJlbnQgPSBudWxsO1xuICB0aGlzLl9ob3N0Q29udGFp
bmVySW5mbyA9IG51bGw7XG4gIHRoaXMuX2RvbUlEID0gMDtcbn07XG5fYXNzaWduKFJlYWN0RE9N
RW1wdHlDb21wb25lbnQucHJvdG90eXBlLCB7XG4gIG1vdW50Q29tcG9uZW50OiBmdW5jdGlvbiAo
dHJhbnNhY3Rpb24sIGhvc3RQYXJlbnQsIGhvc3RDb250YWluZXJJbmZvLCBjb250ZXh0KSB7XG4g
ICAgdmFyIGRvbUlEID0gaG9zdENvbnRhaW5lckluZm8uX2lkQ291bnRlcisrO1xuICAgIHRoaXMu
X2RvbUlEID0gZG9tSUQ7XG4gICAgdGhpcy5faG9zdFBhcmVudCA9IGhvc3RQYXJlbnQ7XG4gICAg
dGhpcy5faG9zdENvbnRhaW5lckluZm8gPSBob3N0Q29udGFpbmVySW5mbztcblxuICAgIHZhciBu
b2RlVmFsdWUgPSAnIHJlYWN0LWVtcHR5OiAnICsgdGhpcy5fZG9tSUQgKyAnICc7XG4gICAgaWYg
KHRyYW5zYWN0aW9uLnVzZUNyZWF0ZUVsZW1lbnQpIHtcbiAgICAgIHZhciBvd25lckRvY3VtZW50
ID0gaG9zdENvbnRhaW5lckluZm8uX293bmVyRG9jdW1lbnQ7XG4gICAgICB2YXIgbm9kZSA9IG93
bmVyRG9jdW1lbnQuY3JlYXRlQ29tbWVudChub2RlVmFsdWUpO1xuICAgICAgUmVhY3RET01Db21w
b25lbnRUcmVlLnByZWNhY2hlTm9kZSh0aGlzLCBub2RlKTtcbiAgICAgIHJldHVybiBET01MYXp5
VHJlZShub2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRyYW5zYWN0aW9uLnJlbmRlclRv
U3RhdGljTWFya3VwKSB7XG4gICAgICAgIC8vIE5vcm1hbGx5IHdlJ2QgaW5zZXJ0IGEgY29tbWVu
dCBub2RlLCBidXQgc2luY2UgdGhpcyBpcyBhIHNpdHVhdGlvblxuICAgICAgICAvLyB3aGVyZSBS
ZWFjdCB3b24ndCB0YWtlIG92ZXIgKHN0YXRpYyBwYWdlcyksIHdlIGNhbiBzaW1wbHkgcmV0dXJu
XG4gICAgICAgIC8vIG5vdGhpbmcuXG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICAg
IHJldHVybiAnPCEtLScgKyBub2RlVmFsdWUgKyAnLS0+JztcbiAgICB9XG4gIH0sXG4gIHJlY2Vp
dmVDb21wb25lbnQ6IGZ1bmN0aW9uICgpIHt9LFxuICBnZXRIb3N0Tm9kZTogZnVuY3Rpb24gKCkg
e1xuICAgIHJldHVybiBSZWFjdERPTUNvbXBvbmVudFRyZWUuZ2V0Tm9kZUZyb21JbnN0YW5jZSh0
aGlzKTtcbiAgfSxcbiAgdW5tb3VudENvbXBvbmVudDogZnVuY3Rpb24gKCkge1xuICAgIFJlYWN0
RE9NQ29tcG9uZW50VHJlZS51bmNhY2hlTm9kZSh0aGlzKTtcbiAgfVxufSk7XG5cbm1vZHVsZS5l
eHBvcnRzID0gUmVhY3RET01FbXB0eUNvbXBvbmVudDtcblxuLyoqKi8gfSksXG4vKiAxNjQgKi9c
bi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtc
blxuXCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIENvcHlyaWdodCAyMDE1LXByZXNlbnQsIEZhY2Vi
b29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNv
ZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxu
ICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVl
LiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBp
biB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuXG5c
bnZhciBfcHJvZEludmFyaWFudCA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG5cbnZhciBpbnZh
cmlhbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG4vKipcbiAqIFJldHVybiB0aGUgbG93
ZXN0IGNvbW1vbiBhbmNlc3RvciBvZiBBIGFuZCBCLCBvciBudWxsIGlmIHRoZXkgYXJlIGluXG4g
KiBkaWZmZXJlbnQgdHJlZXMuXG4gKi9cbmZ1bmN0aW9uIGdldExvd2VzdENvbW1vbkFuY2VzdG9y
KGluc3RBLCBpbnN0Qikge1xuICAhKCdfaG9zdE5vZGUnIGluIGluc3RBKSA/ICBmYWxzZSA/IGlu
dmFyaWFudChmYWxzZSwgJ2dldE5vZGVGcm9tSW5zdGFuY2U6IEludmFsaWQgYXJndW1lbnQuJykg
OiBfcHJvZEludmFyaWFudCgnMzMnKSA6IHZvaWQgMDtcbiAgISgnX2hvc3ROb2RlJyBpbiBpbnN0
QikgPyAgZmFsc2UgPyBpbnZhcmlhbnQoZmFsc2UsICdnZXROb2RlRnJvbUluc3RhbmNlOiBJbnZh
bGlkIGFyZ3VtZW50LicpIDogX3Byb2RJbnZhcmlhbnQoJzMzJykgOiB2b2lkIDA7XG5cbiAgdmFy
IGRlcHRoQSA9IDA7XG4gIGZvciAodmFyIHRlbXBBID0gaW5zdEE7IHRlbXBBOyB0ZW1wQSA9IHRl
bXBBLl9ob3N0UGFyZW50KSB7XG4gICAgZGVwdGhBKys7XG4gIH1cbiAgdmFyIGRlcHRoQiA9IDA7
XG4gIGZvciAodmFyIHRlbXBCID0gaW5zdEI7IHRlbXBCOyB0ZW1wQiA9IHRlbXBCLl9ob3N0UGFy
ZW50KSB7XG4gICAgZGVwdGhCKys7XG4gIH1cblxuICAvLyBJZiBBIGlzIGRlZXBlciwgY3Jhd2wg
dXAuXG4gIHdoaWxlIChkZXB0aEEgLSBkZXB0aEIgPiAwKSB7XG4gICAgaW5zdEEgPSBpbnN0QS5f
aG9zdFBhcmVudDtcbiAgICBkZXB0aEEtLTtcbiAgfVxuXG4gIC8vIElmIEIgaXMgZGVlcGVyLCBj
cmF3bCB1cC5cbiAgd2hpbGUgKGRlcHRoQiAtIGRlcHRoQSA+IDApIHtcbiAgICBpbnN0QiA9IGlu
c3RCLl9ob3N0UGFyZW50O1xuICAgIGRlcHRoQi0tO1xuICB9XG5cbiAgLy8gV2FsayBpbiBsb2Nr
c3RlcCB1bnRpbCB3ZSBmaW5kIGEgbWF0Y2guXG4gIHZhciBkZXB0aCA9IGRlcHRoQTtcbiAgd2hp
bGUgKGRlcHRoLS0pIHtcbiAgICBpZiAoaW5zdEEgPT09IGluc3RCKSB7XG4gICAgICByZXR1cm4g
aW5zdEE7XG4gICAgfVxuICAgIGluc3RBID0gaW5zdEEuX2hvc3RQYXJlbnQ7XG4gICAgaW5zdEIg
PSBpbnN0Qi5faG9zdFBhcmVudDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBS
ZXR1cm4gaWYgQSBpcyBhbiBhbmNlc3RvciBvZiBCLlxuICovXG5mdW5jdGlvbiBpc0FuY2VzdG9y
KGluc3RBLCBpbnN0Qikge1xuICAhKCdfaG9zdE5vZGUnIGluIGluc3RBKSA/ICBmYWxzZSA/IGlu
dmFyaWFudChmYWxzZSwgJ2lzQW5jZXN0b3I6IEludmFsaWQgYXJndW1lbnQuJykgOiBfcHJvZElu
dmFyaWFudCgnMzUnKSA6IHZvaWQgMDtcbiAgISgnX2hvc3ROb2RlJyBpbiBpbnN0QikgPyAgZmFs
c2UgPyBpbnZhcmlhbnQoZmFsc2UsICdpc0FuY2VzdG9yOiBJbnZhbGlkIGFyZ3VtZW50LicpIDog
X3Byb2RJbnZhcmlhbnQoJzM1JykgOiB2b2lkIDA7XG5cbiAgd2hpbGUgKGluc3RCKSB7XG4gICAg
aWYgKGluc3RCID09PSBpbnN0QSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlu
c3RCID0gaW5zdEIuX2hvc3RQYXJlbnQ7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipc
biAqIFJldHVybiB0aGUgcGFyZW50IGluc3RhbmNlIG9mIHRoZSBwYXNzZWQtaW4gaW5zdGFuY2Uu
XG4gKi9cbmZ1bmN0aW9uIGdldFBhcmVudEluc3RhbmNlKGluc3QpIHtcbiAgISgnX2hvc3ROb2Rl
JyBpbiBpbnN0KSA/ICBmYWxzZSA/IGludmFyaWFudChmYWxzZSwgJ2dldFBhcmVudEluc3RhbmNl
OiBJbnZhbGlkIGFyZ3VtZW50LicpIDogX3Byb2RJbnZhcmlhbnQoJzM2JykgOiB2b2lkIDA7XG5c
biAgcmV0dXJuIGluc3QuX2hvc3RQYXJlbnQ7XG59XG5cbi8qKlxuICogU2ltdWxhdGVzIHRoZSB0
cmF2ZXJzYWwgb2YgYSB0d28tcGhhc2UsIGNhcHR1cmUvYnViYmxlIGV2ZW50IGRpc3BhdGNoLlxu
ICovXG5mdW5jdGlvbiB0cmF2ZXJzZVR3b1BoYXNlKGluc3QsIGZuLCBhcmcpIHtcbiAgdmFyIHBh
dGggPSBbXTtcbiAgd2hpbGUgKGluc3QpIHtcbiAgICBwYXRoLnB1c2goaW5zdCk7XG4gICAgaW5z
dCA9IGluc3QuX2hvc3RQYXJlbnQ7XG4gIH1cbiAgdmFyIGk7XG4gIGZvciAoaSA9IHBhdGgubGVu
Z3RoOyBpLS0gPiAwOykge1xuICAgIGZuKHBhdGhbaV0sICdjYXB0dXJlZCcsIGFyZyk7XG4gIH1c
biAgZm9yIChpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICBmbihwYXRoW2ldLCAn
YnViYmxlZCcsIGFyZyk7XG4gIH1cbn1cblxuLyoqXG4gKiBUcmF2ZXJzZXMgdGhlIElEIGhpZXJh
cmNoeSBhbmQgaW52b2tlcyB0aGUgc3VwcGxpZWQgYGNiYCBvbiBhbnkgSURzIHRoYXRcbiAqIHNo
b3VsZCB3b3VsZCByZWNlaXZlIGEgYG1vdXNlRW50ZXJgIG9yIGBtb3VzZUxlYXZlYCBldmVudC5c
biAqXG4gKiBEb2VzIG5vdCBpbnZva2UgdGhlIGNhbGxiYWNrIG9uIHRoZSBuZWFyZXN0IGNvbW1v
biBhbmNlc3RvciBiZWNhdXNlIG5vdGhpbmdcbiAqIFwiZW50ZXJlZFwiIG9yIFwibGVmdFwiIHRo
YXQgZWxlbWVudC5cbiAqL1xuZnVuY3Rpb24gdHJhdmVyc2VFbnRlckxlYXZlKGZyb20sIHRvLCBm
biwgYXJnRnJvbSwgYXJnVG8pIHtcbiAgdmFyIGNvbW1vbiA9IGZyb20gJiYgdG8gPyBnZXRMb3dl
c3RDb21tb25BbmNlc3Rvcihmcm9tLCB0bykgOiBudWxsO1xuICB2YXIgcGF0aEZyb20gPSBbXTtc
biAgd2hpbGUgKGZyb20gJiYgZnJvbSAhPT0gY29tbW9uKSB7XG4gICAgcGF0aEZyb20ucHVzaChm
cm9tKTtcbiAgICBmcm9tID0gZnJvbS5faG9zdFBhcmVudDtcbiAgfVxuICB2YXIgcGF0aFRvID0g
W107XG4gIHdoaWxlICh0byAmJiB0byAhPT0gY29tbW9uKSB7XG4gICAgcGF0aFRvLnB1c2godG8p
O1xuICAgIHRvID0gdG8uX2hvc3RQYXJlbnQ7XG4gIH1cbiAgdmFyIGk7XG4gIGZvciAoaSA9IDA7
IGkgPCBwYXRoRnJvbS5sZW5ndGg7IGkrKykge1xuICAgIGZuKHBhdGhGcm9tW2ldLCAnYnViYmxl
ZCcsIGFyZ0Zyb20pO1xuICB9XG4gIGZvciAoaSA9IHBhdGhUby5sZW5ndGg7IGktLSA+IDA7KSB7
XG4gICAgZm4ocGF0aFRvW2ldLCAnY2FwdHVyZWQnLCBhcmdUbyk7XG4gIH1cbn1cblxubW9kdWxl
LmV4cG9ydHMgPSB7XG4gIGlzQW5jZXN0b3I6IGlzQW5jZXN0b3IsXG4gIGdldExvd2VzdENvbW1v
bkFuY2VzdG9yOiBnZXRMb3dlc3RDb21tb25BbmNlc3RvcixcbiAgZ2V0UGFyZW50SW5zdGFuY2U6
IGdldFBhcmVudEluc3RhbmNlLFxuICB0cmF2ZXJzZVR3b1BoYXNlOiB0cmF2ZXJzZVR3b1BoYXNl
LFxuICB0cmF2ZXJzZUVudGVyTGVhdmU6IHRyYXZlcnNlRW50ZXJMZWF2ZVxufTtcblxuLyoqKi8g
fSksXG4vKiAxNjUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFj
a19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIENvcHlyaWdodCAyMDEz
LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAq
IFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNl
IGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0
aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRz
IGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5c
biAqXG4gKi9cblxuXG5cbnZhciBfcHJvZEludmFyaWFudCA9IF9fd2VicGFja19yZXF1aXJlX18o
MiksXG4gICAgX2Fzc2lnbiA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG5cbnZhciBET01DaGls
ZHJlbk9wZXJhdGlvbnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM3KTtcbnZhciBET01MYXp5VHJl
ZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTcpO1xudmFyIFJlYWN0RE9NQ29tcG9uZW50VHJlZSA9
IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5cbnZhciBlc2NhcGVUZXh0Q29udGVudEZvckJyb3dz
ZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3KTtcbnZhciBpbnZhcmlhbnQgPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKDApO1xudmFyIHZhbGlkYXRlRE9NTmVzdGluZyA9IF9fd2VicGFja19yZXF1aXJl
X18oNDYpO1xuXG4vKipcbiAqIFRleHQgbm9kZXMgdmlvbGF0ZSBhIGNvdXBsZSBhc3N1bXB0aW9u
cyB0aGF0IFJlYWN0IG1ha2VzIGFib3V0IGNvbXBvbmVudHM6XG4gKlxuICogIC0gV2hlbiBtb3Vu
dGluZyB0ZXh0IGludG8gdGhlIERPTSwgYWRqYWNlbnQgdGV4dCBub2RlcyBhcmUgbWVyZ2VkLlxu
ICogIC0gVGV4dCBub2RlcyBjYW5ub3QgYmUgYXNzaWduZWQgYSBSZWFjdCByb290IElELlxuICpc
biAqIFRoaXMgY29tcG9uZW50IGlzIHVzZWQgdG8gd3JhcCBzdHJpbmdzIGJldHdlZW4gY29tbWVu
dCBub2RlcyBzbyB0aGF0IHRoZXlcbiAqIGNhbiB1bmRlcmdvIHRoZSBzYW1lIHJlY29uY2lsaWF0
aW9uIHRoYXQgaXMgYXBwbGllZCB0byBlbGVtZW50cy5cbiAqXG4gKiBUT0RPOiBJbnZlc3RpZ2F0
ZSByZXByZXNlbnRpbmcgUmVhY3QgY29tcG9uZW50cyBpbiB0aGUgRE9NIHdpdGggdGV4dCBub2Rl
cy5cbiAqXG4gKiBAY2xhc3MgUmVhY3RET01UZXh0Q29tcG9uZW50XG4gKiBAZXh0ZW5kcyBSZWFj
dENvbXBvbmVudFxuICogQGludGVybmFsXG4gKi9cbnZhciBSZWFjdERPTVRleHRDb21wb25lbnQg
PSBmdW5jdGlvbiAodGV4dCkge1xuICAvLyBUT0RPOiBUaGlzIGlzIHJlYWxseSBhIFJlYWN0VGV4
dCAoUmVhY3ROb2RlKSwgbm90IGEgUmVhY3RFbGVtZW50XG4gIHRoaXMuX2N1cnJlbnRFbGVtZW50
ID0gdGV4dDtcbiAgdGhpcy5fc3RyaW5nVGV4dCA9ICcnICsgdGV4dDtcbiAgLy8gUmVhY3RET01D
b21wb25lbnRUcmVlIHVzZXMgdGhlc2U6XG4gIHRoaXMuX2hvc3ROb2RlID0gbnVsbDtcbiAgdGhp
cy5faG9zdFBhcmVudCA9IG51bGw7XG5cbiAgLy8gUHJvcGVydGllc1xuICB0aGlzLl9kb21JRCA9
IDA7XG4gIHRoaXMuX21vdW50SW5kZXggPSAwO1xuICB0aGlzLl9jbG9zaW5nQ29tbWVudCA9IG51
bGw7XG4gIHRoaXMuX2NvbW1lbnROb2RlcyA9IG51bGw7XG59O1xuXG5fYXNzaWduKFJlYWN0RE9N
VGV4dENvbXBvbmVudC5wcm90b3R5cGUsIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIG1hcmt1
cCBmb3IgdGhpcyB0ZXh0IG5vZGUuIFRoaXMgbm9kZSBpcyBub3QgaW50ZW5kZWQgdG8gaGF2ZVxu
ICAgKiBhbnkgZmVhdHVyZXMgYmVzaWRlcyBjb250YWluaW5nIHRleHQgY29udGVudC5cbiAgICpc
biAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufFJlYWN0U2VydmVyUmVuZGVy
aW5nVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEByZXR1cm4ge3N0cmluZ30gTWFya3Vw
IGZvciB0aGlzIHRleHQgbm9kZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBtb3VudENvbXBv
bmVudDogZnVuY3Rpb24gKHRyYW5zYWN0aW9uLCBob3N0UGFyZW50LCBob3N0Q29udGFpbmVySW5m
bywgY29udGV4dCkge1xuICAgIGlmIChmYWxzZSkge1xuICAgICAgdmFyIHBhcmVudEluZm87XG4g
ICAgICBpZiAoaG9zdFBhcmVudCAhPSBudWxsKSB7XG4gICAgICAgIHBhcmVudEluZm8gPSBob3N0
UGFyZW50Ll9hbmNlc3RvckluZm87XG4gICAgICB9IGVsc2UgaWYgKGhvc3RDb250YWluZXJJbmZv
ICE9IG51bGwpIHtcbiAgICAgICAgcGFyZW50SW5mbyA9IGhvc3RDb250YWluZXJJbmZvLl9hbmNl
c3RvckluZm87XG4gICAgICB9XG4gICAgICBpZiAocGFyZW50SW5mbykge1xuICAgICAgICAvLyBw
YXJlbnRJbmZvIHNob3VsZCBhbHdheXMgYmUgcHJlc2VudCBleGNlcHQgZm9yIHRoZSB0b3AtbGV2
ZWxcbiAgICAgICAgLy8gY29tcG9uZW50IHdoZW4gc2VydmVyIHJlbmRlcmluZ1xuICAgICAgICB2
YWxpZGF0ZURPTU5lc3RpbmcobnVsbCwgdGhpcy5fc3RyaW5nVGV4dCwgdGhpcywgcGFyZW50SW5m
byk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGRvbUlEID0gaG9zdENvbnRhaW5lckluZm8u
X2lkQ291bnRlcisrO1xuICAgIHZhciBvcGVuaW5nVmFsdWUgPSAnIHJlYWN0LXRleHQ6ICcgKyBk
b21JRCArICcgJztcbiAgICB2YXIgY2xvc2luZ1ZhbHVlID0gJyAvcmVhY3QtdGV4dCAnO1xuICAg
IHRoaXMuX2RvbUlEID0gZG9tSUQ7XG4gICAgdGhpcy5faG9zdFBhcmVudCA9IGhvc3RQYXJlbnQ7
XG4gICAgaWYgKHRyYW5zYWN0aW9uLnVzZUNyZWF0ZUVsZW1lbnQpIHtcbiAgICAgIHZhciBvd25l
ckRvY3VtZW50ID0gaG9zdENvbnRhaW5lckluZm8uX293bmVyRG9jdW1lbnQ7XG4gICAgICB2YXIg
b3BlbmluZ0NvbW1lbnQgPSBvd25lckRvY3VtZW50LmNyZWF0ZUNvbW1lbnQob3BlbmluZ1ZhbHVl
KTtcbiAgICAgIHZhciBjbG9zaW5nQ29tbWVudCA9IG93bmVyRG9jdW1lbnQuY3JlYXRlQ29tbWVu
dChjbG9zaW5nVmFsdWUpO1xuICAgICAgdmFyIGxhenlUcmVlID0gRE9NTGF6eVRyZWUob3duZXJE
b2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpO1xuICAgICAgRE9NTGF6eVRyZWUucXVl
dWVDaGlsZChsYXp5VHJlZSwgRE9NTGF6eVRyZWUob3BlbmluZ0NvbW1lbnQpKTtcbiAgICAgIGlm
ICh0aGlzLl9zdHJpbmdUZXh0KSB7XG4gICAgICAgIERPTUxhenlUcmVlLnF1ZXVlQ2hpbGQobGF6
eVRyZWUsIERPTUxhenlUcmVlKG93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGhpcy5fc3Ry
aW5nVGV4dCkpKTtcbiAgICAgIH1cbiAgICAgIERPTUxhenlUcmVlLnF1ZXVlQ2hpbGQobGF6eVRy
ZWUsIERPTUxhenlUcmVlKGNsb3NpbmdDb21tZW50KSk7XG4gICAgICBSZWFjdERPTUNvbXBvbmVu
dFRyZWUucHJlY2FjaGVOb2RlKHRoaXMsIG9wZW5pbmdDb21tZW50KTtcbiAgICAgIHRoaXMuX2Ns
b3NpbmdDb21tZW50ID0gY2xvc2luZ0NvbW1lbnQ7XG4gICAgICByZXR1cm4gbGF6eVRyZWU7XG4g
ICAgfSBlbHNlIHtcbiAgICAgIHZhciBlc2NhcGVkVGV4dCA9IGVzY2FwZVRleHRDb250ZW50Rm9y
QnJvd3Nlcih0aGlzLl9zdHJpbmdUZXh0KTtcblxuICAgICAgaWYgKHRyYW5zYWN0aW9uLnJlbmRl
clRvU3RhdGljTWFya3VwKSB7XG4gICAgICAgIC8vIE5vcm1hbGx5IHdlJ2Qgd3JhcCB0aGlzIGJl
dHdlZW4gY29tbWVudCBub2RlcyBmb3IgdGhlIHJlYXNvbnMgc3RhdGVkXG4gICAgICAgIC8vIGFi
b3ZlLCBidXQgc2luY2UgdGhpcyBpcyBhIHNpdHVhdGlvbiB3aGVyZSBSZWFjdCB3b24ndCB0YWtl
IG92ZXJcbiAgICAgICAgLy8gKHN0YXRpYyBwYWdlcyksIHdlIGNhbiBzaW1wbHkgcmV0dXJuIHRo
ZSB0ZXh0IGFzIGl0IGlzLlxuICAgICAgICByZXR1cm4gZXNjYXBlZFRleHQ7XG4gICAgICB9XG5c
biAgICAgIHJldHVybiAnPCEtLScgKyBvcGVuaW5nVmFsdWUgKyAnLS0+JyArIGVzY2FwZWRUZXh0
ICsgJzwhLS0nICsgY2xvc2luZ1ZhbHVlICsgJy0tPic7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxu
ICAgKiBVcGRhdGVzIHRoaXMgY29tcG9uZW50IGJ5IHVwZGF0aW5nIHRoZSB0ZXh0IGNvbnRlbnQu
XG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RUZXh0fSBuZXh0VGV4dCBUaGUgbmV4dCB0ZXh0IGNv
bnRlbnRcbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlv
blxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHJlY2VpdmVDb21wb25lbnQ6IGZ1bmN0aW9uIChu
ZXh0VGV4dCwgdHJhbnNhY3Rpb24pIHtcbiAgICBpZiAobmV4dFRleHQgIT09IHRoaXMuX2N1cnJl
bnRFbGVtZW50KSB7XG4gICAgICB0aGlzLl9jdXJyZW50RWxlbWVudCA9IG5leHRUZXh0O1xuICAg
ICAgdmFyIG5leHRTdHJpbmdUZXh0ID0gJycgKyBuZXh0VGV4dDtcbiAgICAgIGlmIChuZXh0U3Ry
aW5nVGV4dCAhPT0gdGhpcy5fc3RyaW5nVGV4dCkge1xuICAgICAgICAvLyBUT0RPOiBTYXZlIHRo
aXMgYXMgcGVuZGluZyBwcm9wcyBhbmQgdXNlIHBlcmZvcm1VcGRhdGVJZk5lY2Vzc2FyeVxuICAg
ICAgICAvLyBhbmQvb3IgdXBkYXRlQ29tcG9uZW50IHRvIGRvIHRoZSBhY3R1YWwgdXBkYXRlIGZv
ciBjb25zaXN0ZW5jeSB3aXRoXG4gICAgICAgIC8vIG90aGVyIGNvbXBvbmVudCB0eXBlcz9cbiAg
ICAgICAgdGhpcy5fc3RyaW5nVGV4dCA9IG5leHRTdHJpbmdUZXh0O1xuICAgICAgICB2YXIgY29t
bWVudE5vZGVzID0gdGhpcy5nZXRIb3N0Tm9kZSgpO1xuICAgICAgICBET01DaGlsZHJlbk9wZXJh
dGlvbnMucmVwbGFjZURlbGltaXRlZFRleHQoY29tbWVudE5vZGVzWzBdLCBjb21tZW50Tm9kZXNb
MV0sIG5leHRTdHJpbmdUZXh0KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgZ2V0SG9zdE5v
ZGU6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaG9zdE5vZGUgPSB0aGlzLl9jb21tZW50Tm9kZXM7
XG4gICAgaWYgKGhvc3ROb2RlKSB7XG4gICAgICByZXR1cm4gaG9zdE5vZGU7XG4gICAgfVxuICAg
IGlmICghdGhpcy5fY2xvc2luZ0NvbW1lbnQpIHtcbiAgICAgIHZhciBvcGVuaW5nQ29tbWVudCA9
IFJlYWN0RE9NQ29tcG9uZW50VHJlZS5nZXROb2RlRnJvbUluc3RhbmNlKHRoaXMpO1xuICAgICAg
dmFyIG5vZGUgPSBvcGVuaW5nQ29tbWVudC5uZXh0U2libGluZztcbiAgICAgIHdoaWxlICh0cnVl
KSB7XG4gICAgICAgICEobm9kZSAhPSBudWxsKSA/ICBmYWxzZSA/IGludmFyaWFudChmYWxzZSwg
J01pc3NpbmcgY2xvc2luZyBjb21tZW50IGZvciB0ZXh0IGNvbXBvbmVudCAlcycsIHRoaXMuX2Rv
bUlEKSA6IF9wcm9kSW52YXJpYW50KCc2NycsIHRoaXMuX2RvbUlEKSA6IHZvaWQgMDtcbiAgICAg
ICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IDggJiYgbm9kZS5ub2RlVmFsdWUgPT09ICcgL3JlYWN0
LXRleHQgJykge1xuICAgICAgICAgIHRoaXMuX2Nsb3NpbmdDb21tZW50ID0gbm9kZTtcbiAgICAg
ICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gbm9kZS5uZXh0U2libGluZztc
biAgICAgIH1cbiAgICB9XG4gICAgaG9zdE5vZGUgPSBbdGhpcy5faG9zdE5vZGUsIHRoaXMuX2Ns
b3NpbmdDb21tZW50XTtcbiAgICB0aGlzLl9jb21tZW50Tm9kZXMgPSBob3N0Tm9kZTtcbiAgICBy
ZXR1cm4gaG9zdE5vZGU7XG4gIH0sXG5cbiAgdW5tb3VudENvbXBvbmVudDogZnVuY3Rpb24gKCkg
e1xuICAgIHRoaXMuX2Nsb3NpbmdDb21tZW50ID0gbnVsbDtcbiAgICB0aGlzLl9jb21tZW50Tm9k
ZXMgPSBudWxsO1xuICAgIFJlYWN0RE9NQ29tcG9uZW50VHJlZS51bmNhY2hlTm9kZSh0aGlzKTtc
biAgfVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RET01UZXh0Q29tcG9uZW50O1xuXG4v
KioqLyB9KSxcbi8qIDE2NiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193
ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qKlxuICogQ29weXJpZ2h0
IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4g
KlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxp
Y2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5
IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCBy
aWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0
b3J5LlxuICpcbiAqL1xuXG5cblxudmFyIF9hc3NpZ24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMp
O1xuXG52YXIgUmVhY3RVcGRhdGVzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcbnZhciBUcmFu
c2FjdGlvbiA9IF9fd2VicGFja19yZXF1aXJlX18oMjQpO1xuXG52YXIgZW1wdHlGdW5jdGlvbiA9
IF9fd2VicGFja19yZXF1aXJlX18oNik7XG5cbnZhciBSRVNFVF9CQVRDSEVEX1VQREFURVMgPSB7
XG4gIGluaXRpYWxpemU6IGVtcHR5RnVuY3Rpb24sXG4gIGNsb3NlOiBmdW5jdGlvbiAoKSB7XG4g
ICAgUmVhY3REZWZhdWx0QmF0Y2hpbmdTdHJhdGVneS5pc0JhdGNoaW5nVXBkYXRlcyA9IGZhbHNl
O1xuICB9XG59O1xuXG52YXIgRkxVU0hfQkFUQ0hFRF9VUERBVEVTID0ge1xuICBpbml0aWFsaXpl
OiBlbXB0eUZ1bmN0aW9uLFxuICBjbG9zZTogUmVhY3RVcGRhdGVzLmZsdXNoQmF0Y2hlZFVwZGF0
ZXMuYmluZChSZWFjdFVwZGF0ZXMpXG59O1xuXG52YXIgVFJBTlNBQ1RJT05fV1JBUFBFUlMgPSBb
RkxVU0hfQkFUQ0hFRF9VUERBVEVTLCBSRVNFVF9CQVRDSEVEX1VQREFURVNdO1xuXG5mdW5jdGlv
biBSZWFjdERlZmF1bHRCYXRjaGluZ1N0cmF0ZWd5VHJhbnNhY3Rpb24oKSB7XG4gIHRoaXMucmVp
bml0aWFsaXplVHJhbnNhY3Rpb24oKTtcbn1cblxuX2Fzc2lnbihSZWFjdERlZmF1bHRCYXRjaGlu
Z1N0cmF0ZWd5VHJhbnNhY3Rpb24ucHJvdG90eXBlLCBUcmFuc2FjdGlvbiwge1xuICBnZXRUcmFu
c2FjdGlvbldyYXBwZXJzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFRSQU5TQUNUSU9OX1dS
QVBQRVJTO1xuICB9XG59KTtcblxudmFyIHRyYW5zYWN0aW9uID0gbmV3IFJlYWN0RGVmYXVsdEJh
dGNoaW5nU3RyYXRlZ3lUcmFuc2FjdGlvbigpO1xuXG52YXIgUmVhY3REZWZhdWx0QmF0Y2hpbmdT
dHJhdGVneSA9IHtcbiAgaXNCYXRjaGluZ1VwZGF0ZXM6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBD
YWxsIHRoZSBwcm92aWRlZCBmdW5jdGlvbiBpbiBhIGNvbnRleHQgd2l0aGluIHdoaWNoIGNhbGxz
IHRvIGBzZXRTdGF0ZWBcbiAgICogYW5kIGZyaWVuZHMgYXJlIGJhdGNoZWQgc3VjaCB0aGF0IGNv
bXBvbmVudHMgYXJlbid0IHVwZGF0ZWQgdW5uZWNlc3NhcmlseS5cbiAgICovXG4gIGJhdGNoZWRV
cGRhdGVzOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGEsIGIsIGMsIGQsIGUpIHtcbiAgICB2YXIgYWxy
ZWFkeUJhdGNoaW5nVXBkYXRlcyA9IFJlYWN0RGVmYXVsdEJhdGNoaW5nU3RyYXRlZ3kuaXNCYXRj
aGluZ1VwZGF0ZXM7XG5cbiAgICBSZWFjdERlZmF1bHRCYXRjaGluZ1N0cmF0ZWd5LmlzQmF0Y2hp
bmdVcGRhdGVzID0gdHJ1ZTtcblxuICAgIC8vIFRoZSBjb2RlIGlzIHdyaXR0ZW4gdGhpcyB3YXkg
dG8gYXZvaWQgZXh0cmEgYWxsb2NhdGlvbnNcbiAgICBpZiAoYWxyZWFkeUJhdGNoaW5nVXBkYXRl
cykge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKGEsIGIsIGMsIGQsIGUpO1xuICAgIH0gZWxzZSB7
XG4gICAgICByZXR1cm4gdHJhbnNhY3Rpb24ucGVyZm9ybShjYWxsYmFjaywgbnVsbCwgYSwgYiwg
YywgZCwgZSk7XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RGVmYXVs
dEJhdGNoaW5nU3RyYXRlZ3k7XG5cbi8qKiovIH0pLFxuLyogMTY3ICovXG4vKioqLyAoZnVuY3Rp
b24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmlj
dFwiO1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICog
QWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2Vk
IHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmls
ZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25h
bCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMg
ZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cblxuXG52YXIgX2Fzc2lnbiA9
IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG5cbnZhciBFdmVudExpc3RlbmVyID0gX193ZWJwYWNr
X3JlcXVpcmVfXyg3OSk7XG52YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKDUpO1xudmFyIFBvb2xlZENsYXNzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XG52
YXIgUmVhY3RET01Db21wb25lbnRUcmVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcbnZhciBS
ZWFjdFVwZGF0ZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xuXG52YXIgZ2V0RXZlbnRUYXJn
ZXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0KTtcbnZhciBnZXRVbmJvdW5kZWRTY3JvbGxQb3Np
dGlvbiA9IF9fd2VicGFja19yZXF1aXJlX18oMTY4KTtcblxuLyoqXG4gKiBGaW5kIHRoZSBkZWVw
ZXN0IFJlYWN0IGNvbXBvbmVudCBjb21wbGV0ZWx5IGNvbnRhaW5pbmcgdGhlIHJvb3Qgb2YgdGhl
XG4gKiBwYXNzZWQtaW4gaW5zdGFuY2UgKGZvciB1c2Ugd2hlbiBlbnRpcmUgUmVhY3QgdHJlZXMg
YXJlIG5lc3RlZCB3aXRoaW4gZWFjaFxuICogb3RoZXIpLiBJZiBSZWFjdCB0cmVlcyBhcmUgbm90
IG5lc3RlZCwgcmV0dXJucyBudWxsLlxuICovXG5mdW5jdGlvbiBmaW5kUGFyZW50KGluc3QpIHtc
biAgLy8gVE9ETzogSXQgbWF5IGJlIGEgZ29vZCBpZGVhIHRvIGNhY2hlIHRoaXMgdG8gcHJldmVu
dCB1bm5lY2Vzc2FyeSBET01cbiAgLy8gdHJhdmVyc2FsLCBidXQgY2FjaGluZyBpcyBkaWZmaWN1
bHQgdG8gZG8gY29ycmVjdGx5IHdpdGhvdXQgdXNpbmcgYVxuICAvLyBtdXRhdGlvbiBvYnNlcnZl
ciB0byBsaXN0ZW4gZm9yIGFsbCBET00gY2hhbmdlcy5cbiAgd2hpbGUgKGluc3QuX2hvc3RQYXJl
bnQpIHtcbiAgICBpbnN0ID0gaW5zdC5faG9zdFBhcmVudDtcbiAgfVxuICB2YXIgcm9vdE5vZGUg
PSBSZWFjdERPTUNvbXBvbmVudFRyZWUuZ2V0Tm9kZUZyb21JbnN0YW5jZShpbnN0KTtcbiAgdmFy
IGNvbnRhaW5lciA9IHJvb3ROb2RlLnBhcmVudE5vZGU7XG4gIHJldHVybiBSZWFjdERPTUNvbXBv
bmVudFRyZWUuZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUoY29udGFpbmVyKTtcbn1cblxuLy8g
VXNlZCB0byBzdG9yZSBhbmNlc3RvciBoaWVyYXJjaHkgaW4gdG9wIGxldmVsIGNhbGxiYWNrXG5m
dW5jdGlvbiBUb3BMZXZlbENhbGxiYWNrQm9va0tlZXBpbmcodG9wTGV2ZWxUeXBlLCBuYXRpdmVF
dmVudCkge1xuICB0aGlzLnRvcExldmVsVHlwZSA9IHRvcExldmVsVHlwZTtcbiAgdGhpcy5uYXRp
dmVFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICB0aGlzLmFuY2VzdG9ycyA9IFtdO1xufVxuX2Fzc2ln
bihUb3BMZXZlbENhbGxiYWNrQm9va0tlZXBpbmcucHJvdG90eXBlLCB7XG4gIGRlc3RydWN0b3I6
IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnRvcExldmVsVHlwZSA9IG51bGw7XG4gICAgdGhpcy5u
YXRpdmVFdmVudCA9IG51bGw7XG4gICAgdGhpcy5hbmNlc3RvcnMubGVuZ3RoID0gMDtcbiAgfVxu
fSk7XG5Qb29sZWRDbGFzcy5hZGRQb29saW5nVG8oVG9wTGV2ZWxDYWxsYmFja0Jvb2tLZWVwaW5n
LCBQb29sZWRDbGFzcy50d29Bcmd1bWVudFBvb2xlcik7XG5cbmZ1bmN0aW9uIGhhbmRsZVRvcExl
dmVsSW1wbChib29rS2VlcGluZykge1xuICB2YXIgbmF0aXZlRXZlbnRUYXJnZXQgPSBnZXRFdmVu
dFRhcmdldChib29rS2VlcGluZy5uYXRpdmVFdmVudCk7XG4gIHZhciB0YXJnZXRJbnN0ID0gUmVh
Y3RET01Db21wb25lbnRUcmVlLmdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKG5hdGl2ZUV2ZW50
VGFyZ2V0KTtcblxuICAvLyBMb29wIHRocm91Z2ggdGhlIGhpZXJhcmNoeSwgaW4gY2FzZSB0aGVy
ZSdzIGFueSBuZXN0ZWQgY29tcG9uZW50cy5cbiAgLy8gSXQncyBpbXBvcnRhbnQgdGhhdCB3ZSBi
dWlsZCB0aGUgYXJyYXkgb2YgYW5jZXN0b3JzIGJlZm9yZSBjYWxsaW5nIGFueVxuICAvLyBldmVu
dCBoYW5kbGVycywgYmVjYXVzZSBldmVudCBoYW5kbGVycyBjYW4gbW9kaWZ5IHRoZSBET00sIGxl
YWRpbmcgdG9cbiAgLy8gaW5jb25zaXN0ZW5jaWVzIHdpdGggUmVhY3RNb3VudCdzIG5vZGUgY2Fj
aGUuIFNlZSAjMTEwNS5cbiAgdmFyIGFuY2VzdG9yID0gdGFyZ2V0SW5zdDtcbiAgZG8ge1xuICAg
IGJvb2tLZWVwaW5nLmFuY2VzdG9ycy5wdXNoKGFuY2VzdG9yKTtcbiAgICBhbmNlc3RvciA9IGFu
Y2VzdG9yICYmIGZpbmRQYXJlbnQoYW5jZXN0b3IpO1xuICB9IHdoaWxlIChhbmNlc3Rvcik7XG5c
biAgZm9yICh2YXIgaSA9IDA7IGkgPCBib29rS2VlcGluZy5hbmNlc3RvcnMubGVuZ3RoOyBpKysp
IHtcbiAgICB0YXJnZXRJbnN0ID0gYm9va0tlZXBpbmcuYW5jZXN0b3JzW2ldO1xuICAgIFJlYWN0
RXZlbnRMaXN0ZW5lci5faGFuZGxlVG9wTGV2ZWwoYm9va0tlZXBpbmcudG9wTGV2ZWxUeXBlLCB0
YXJnZXRJbnN0LCBib29rS2VlcGluZy5uYXRpdmVFdmVudCwgZ2V0RXZlbnRUYXJnZXQoYm9va0tl
ZXBpbmcubmF0aXZlRXZlbnQpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzY3JvbGxWYWx1ZU1vbml0
b3IoY2IpIHtcbiAgdmFyIHNjcm9sbFBvc2l0aW9uID0gZ2V0VW5ib3VuZGVkU2Nyb2xsUG9zaXRp
b24od2luZG93KTtcbiAgY2Ioc2Nyb2xsUG9zaXRpb24pO1xufVxuXG52YXIgUmVhY3RFdmVudExp
c3RlbmVyID0ge1xuICBfZW5hYmxlZDogdHJ1ZSxcbiAgX2hhbmRsZVRvcExldmVsOiBudWxsLFxu
XG4gIFdJTkRPV19IQU5ETEU6IEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSA/IHdpbmRv
dyA6IG51bGwsXG5cbiAgc2V0SGFuZGxlVG9wTGV2ZWw6IGZ1bmN0aW9uIChoYW5kbGVUb3BMZXZl
bCkge1xuICAgIFJlYWN0RXZlbnRMaXN0ZW5lci5faGFuZGxlVG9wTGV2ZWwgPSBoYW5kbGVUb3BM
ZXZlbDtcbiAgfSxcblxuICBzZXRFbmFibGVkOiBmdW5jdGlvbiAoZW5hYmxlZCkge1xuICAgIFJl
YWN0RXZlbnRMaXN0ZW5lci5fZW5hYmxlZCA9ICEhZW5hYmxlZDtcbiAgfSxcblxuICBpc0VuYWJs
ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVhY3RFdmVudExpc3RlbmVyLl9lbmFibGVk
O1xuICB9LFxuXG4gIC8qKlxuICAgKiBUcmFwcyB0b3AtbGV2ZWwgZXZlbnRzIGJ5IHVzaW5nIGV2
ZW50IGJ1YmJsaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUeXBlIFJl
Y29yZCBmcm9tIGBFdmVudENvbnN0YW50c2AuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBoYW5kbGVy
QmFzZU5hbWUgRXZlbnQgbmFtZSAoZS5nLiBcImNsaWNrXCIpLlxuICAgKiBAcGFyYW0ge29iamVj
dH0gZWxlbWVudCBFbGVtZW50IG9uIHdoaWNoIHRvIGF0dGFjaCBsaXN0ZW5lci5cbiAgICogQHJl
dHVybiB7P29iamVjdH0gQW4gb2JqZWN0IHdpdGggYSByZW1vdmUgZnVuY3Rpb24gd2hpY2ggd2ls
bCBmb3JjZWZ1bGx5XG4gICAqICAgICAgICAgICAgICAgICAgcmVtb3ZlIHRoZSBsaXN0ZW5lci5c
biAgICogQGludGVybmFsXG4gICAqL1xuICB0cmFwQnViYmxlZEV2ZW50OiBmdW5jdGlvbiAodG9w
TGV2ZWxUeXBlLCBoYW5kbGVyQmFzZU5hbWUsIGVsZW1lbnQpIHtcbiAgICBpZiAoIWVsZW1lbnQp
IHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gRXZlbnRMaXN0ZW5lci5s
aXN0ZW4oZWxlbWVudCwgaGFuZGxlckJhc2VOYW1lLCBSZWFjdEV2ZW50TGlzdGVuZXIuZGlzcGF0
Y2hFdmVudC5iaW5kKG51bGwsIHRvcExldmVsVHlwZSkpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBU
cmFwcyBhIHRvcC1sZXZlbCBldmVudCBieSB1c2luZyBldmVudCBjYXB0dXJpbmcuXG4gICAqXG4g
ICAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFR5cGUgUmVjb3JkIGZyb20gYEV2ZW50Q29uc3Rh
bnRzYC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGhhbmRsZXJCYXNlTmFtZSBFdmVudCBuYW1lIChl
LmcuIFwiY2xpY2tcIikuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50IEVsZW1lbnQgb24g
d2hpY2ggdG8gYXR0YWNoIGxpc3RlbmVyLlxuICAgKiBAcmV0dXJuIHs/b2JqZWN0fSBBbiBvYmpl
Y3Qgd2l0aCBhIHJlbW92ZSBmdW5jdGlvbiB3aGljaCB3aWxsIGZvcmNlZnVsbHlcbiAgICogICAg
ICAgICAgICAgICAgICByZW1vdmUgdGhlIGxpc3RlbmVyLlxuICAgKiBAaW50ZXJuYWxcbiAgICov
XG4gIHRyYXBDYXB0dXJlZEV2ZW50OiBmdW5jdGlvbiAodG9wTGV2ZWxUeXBlLCBoYW5kbGVyQmFz
ZU5hbWUsIGVsZW1lbnQpIHtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxs
O1xuICAgIH1cbiAgICByZXR1cm4gRXZlbnRMaXN0ZW5lci5jYXB0dXJlKGVsZW1lbnQsIGhhbmRs
ZXJCYXNlTmFtZSwgUmVhY3RFdmVudExpc3RlbmVyLmRpc3BhdGNoRXZlbnQuYmluZChudWxsLCB0
b3BMZXZlbFR5cGUpKTtcbiAgfSxcblxuICBtb25pdG9yU2Nyb2xsVmFsdWU6IGZ1bmN0aW9uIChy
ZWZyZXNoKSB7XG4gICAgdmFyIGNhbGxiYWNrID0gc2Nyb2xsVmFsdWVNb25pdG9yLmJpbmQobnVs
bCwgcmVmcmVzaCk7XG4gICAgRXZlbnRMaXN0ZW5lci5saXN0ZW4od2luZG93LCAnc2Nyb2xsJywg
Y2FsbGJhY2spO1xuICB9LFxuXG4gIGRpc3BhdGNoRXZlbnQ6IGZ1bmN0aW9uICh0b3BMZXZlbFR5
cGUsIG5hdGl2ZUV2ZW50KSB7XG4gICAgaWYgKCFSZWFjdEV2ZW50TGlzdGVuZXIuX2VuYWJsZWQp
IHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgYm9va0tlZXBpbmcgPSBUb3BMZXZl
bENhbGxiYWNrQm9va0tlZXBpbmcuZ2V0UG9vbGVkKHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQp
O1xuICAgIHRyeSB7XG4gICAgICAvLyBFdmVudCBxdWV1ZSBiZWluZyBwcm9jZXNzZWQgaW4gdGhl
IHNhbWUgY3ljbGUgYWxsb3dzXG4gICAgICAvLyBgcHJldmVudERlZmF1bHRgLlxuICAgICAgUmVh
Y3RVcGRhdGVzLmJhdGNoZWRVcGRhdGVzKGhhbmRsZVRvcExldmVsSW1wbCwgYm9va0tlZXBpbmcp
O1xuICAgIH0gZmluYWxseSB7XG4gICAgICBUb3BMZXZlbENhbGxiYWNrQm9va0tlZXBpbmcucmVs
ZWFzZShib29rS2VlcGluZyk7XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJl
YWN0RXZlbnRMaXN0ZW5lcjtcblxuLyoqKi8gfSksXG4vKiAxNjggKi9cbi8qKiovIChmdW5jdGlv
bihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0
XCI7XG4vKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxu
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vu
c2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0Ug
ZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRp
b25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVO
VFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHR5cGVjaGVja3NcbiAqL1xu
XG5cblxuLyoqXG4gKiBHZXRzIHRoZSBzY3JvbGwgcG9zaXRpb24gb2YgdGhlIHN1cHBsaWVkIGVs
ZW1lbnQgb3Igd2luZG93LlxuICpcbiAqIFRoZSByZXR1cm4gdmFsdWVzIGFyZSB1bmJvdW5kZWQs
IHVubGlrZSBgZ2V0U2Nyb2xsUG9zaXRpb25gLiBUaGlzIG1lYW5zIHRoZXlcbiAqIG1heSBiZSBu
ZWdhdGl2ZSBvciBleGNlZWQgdGhlIGVsZW1lbnQgYm91bmRhcmllcyAod2hpY2ggaXMgcG9zc2li
bGUgdXNpbmdcbiAqIGluZXJ0aWFsIHNjcm9sbGluZykuXG4gKlxuICogQHBhcmFtIHtET01XaW5k
b3d8RE9NRWxlbWVudH0gc2Nyb2xsYWJsZVxuICogQHJldHVybiB7b2JqZWN0fSBNYXAgd2l0aCBg
eGAgYW5kIGB5YCBrZXlzLlxuICovXG5cbmZ1bmN0aW9uIGdldFVuYm91bmRlZFNjcm9sbFBvc2l0
aW9uKHNjcm9sbGFibGUpIHtcbiAgaWYgKHNjcm9sbGFibGUuV2luZG93ICYmIHNjcm9sbGFibGUg
aW5zdGFuY2VvZiBzY3JvbGxhYmxlLldpbmRvdykge1xuICAgIHJldHVybiB7XG4gICAgICB4OiBz
Y3JvbGxhYmxlLnBhZ2VYT2Zmc2V0IHx8IHNjcm9sbGFibGUuZG9jdW1lbnQuZG9jdW1lbnRFbGVt
ZW50LnNjcm9sbExlZnQsXG4gICAgICB5OiBzY3JvbGxhYmxlLnBhZ2VZT2Zmc2V0IHx8IHNjcm9s
bGFibGUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcFxuICAgIH07XG4gIH1cbiAg
cmV0dXJuIHtcbiAgICB4OiBzY3JvbGxhYmxlLnNjcm9sbExlZnQsXG4gICAgeTogc2Nyb2xsYWJs
ZS5zY3JvbGxUb3BcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRVbmJvdW5kZWRTY3Jv
bGxQb3NpdGlvbjtcblxuLyoqKi8gfSksXG4vKiAxNjkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1
bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4v
KipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmln
aHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIg
dGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRo
ZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50
XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGlu
IHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuXG5cbnZhciBET01Qcm9wZXJ0eSA9IF9f
d2VicGFja19yZXF1aXJlX18oMTUpO1xudmFyIEV2ZW50UGx1Z2luSHViID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygyMCk7XG52YXIgRXZlbnRQbHVnaW5VdGlscyA9IF9fd2VicGFja19yZXF1aXJlX18o
MzIpO1xudmFyIFJlYWN0Q29tcG9uZW50RW52aXJvbm1lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KDQxKTtcbnZhciBSZWFjdEVtcHR5Q29tcG9uZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NSk7
XG52YXIgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOCk7
XG52YXIgUmVhY3RIb3N0Q29tcG9uZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Nik7XG52YXIg
UmVhY3RVcGRhdGVzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcblxudmFyIFJlYWN0SW5qZWN0
aW9uID0ge1xuICBDb21wb25lbnQ6IFJlYWN0Q29tcG9uZW50RW52aXJvbm1lbnQuaW5qZWN0aW9u
LFxuICBET01Qcm9wZXJ0eTogRE9NUHJvcGVydHkuaW5qZWN0aW9uLFxuICBFbXB0eUNvbXBvbmVu
dDogUmVhY3RFbXB0eUNvbXBvbmVudC5pbmplY3Rpb24sXG4gIEV2ZW50UGx1Z2luSHViOiBFdmVu
dFBsdWdpbkh1Yi5pbmplY3Rpb24sXG4gIEV2ZW50UGx1Z2luVXRpbHM6IEV2ZW50UGx1Z2luVXRp
bHMuaW5qZWN0aW9uLFxuICBFdmVudEVtaXR0ZXI6IFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5p
bmplY3Rpb24sXG4gIEhvc3RDb21wb25lbnQ6IFJlYWN0SG9zdENvbXBvbmVudC5pbmplY3Rpb24s
XG4gIFVwZGF0ZXM6IFJlYWN0VXBkYXRlcy5pbmplY3Rpb25cbn07XG5cbm1vZHVsZS5leHBvcnRz
ID0gUmVhY3RJbmplY3Rpb247XG5cbi8qKiovIH0pLFxuLyogMTcwICovXG4vKioqLyAoZnVuY3Rp
b24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmlj
dFwiO1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICog
QWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2Vk
IHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmls
ZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25h
bCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMg
ZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cblxuXG52YXIgX2Fzc2lnbiA9
IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG5cbnZhciBDYWxsYmFja1F1ZXVlID0gX193ZWJwYWNr
X3JlcXVpcmVfXyg2Mik7XG52YXIgUG9vbGVkQ2xhc3MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEy
KTtcbnZhciBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI4
KTtcbnZhciBSZWFjdElucHV0U2VsZWN0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MCk7XG52
YXIgUmVhY3RJbnN0cnVtZW50YXRpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpO1xudmFyIFRy
YW5zYWN0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNCk7XG52YXIgUmVhY3RVcGRhdGVRdWV1
ZSA9IF9fd2VicGFja19yZXF1aXJlX18oNDUpO1xuXG4vKipcbiAqIEVuc3VyZXMgdGhhdCwgd2hl
biBwb3NzaWJsZSwgdGhlIHNlbGVjdGlvbiByYW5nZSAoY3VycmVudGx5IHNlbGVjdGVkIHRleHRc
biAqIGlucHV0KSBpcyBub3QgZGlzdHVyYmVkIGJ5IHBlcmZvcm1pbmcgdGhlIHRyYW5zYWN0aW9u
LlxuICovXG52YXIgU0VMRUNUSU9OX1JFU1RPUkFUSU9OID0ge1xuICAvKipcbiAgICogQHJldHVy
biB7U2VsZWN0aW9ufSBTZWxlY3Rpb24gaW5mb3JtYXRpb24uXG4gICAqL1xuICBpbml0aWFsaXpl
OiBSZWFjdElucHV0U2VsZWN0aW9uLmdldFNlbGVjdGlvbkluZm9ybWF0aW9uLFxuICAvKipcbiAg
ICogQHBhcmFtIHtTZWxlY3Rpb259IHNlbCBTZWxlY3Rpb24gaW5mb3JtYXRpb24gcmV0dXJuZWQg
ZnJvbSBgaW5pdGlhbGl6ZWAuXG4gICAqL1xuICBjbG9zZTogUmVhY3RJbnB1dFNlbGVjdGlvbi5y
ZXN0b3JlU2VsZWN0aW9uXG59O1xuXG4vKipcbiAqIFN1cHByZXNzZXMgZXZlbnRzIChibHVyL2Zv
Y3VzKSB0aGF0IGNvdWxkIGJlIGluYWR2ZXJ0ZW50bHkgZGlzcGF0Y2hlZCBkdWUgdG9cbiAqIGhp
Z2ggbGV2ZWwgRE9NIG1hbmlwdWxhdGlvbnMgKGxpa2UgdGVtcG9yYXJpbHkgcmVtb3ZpbmcgYSB0
ZXh0IGlucHV0IGZyb20gdGhlXG4gKiBET00pLlxuICovXG52YXIgRVZFTlRfU1VQUFJFU1NJT04g
PSB7XG4gIC8qKlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUaGUgZW5hYmxlZCBzdGF0dXMgb2Yg
YFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlcmAgYmVmb3JlXG4gICAqIHRoZSByZWNvbmNpbGlhdGlv
bi5cbiAgICovXG4gIGluaXRpYWxpemU6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgY3VycmVudGx5
RW5hYmxlZCA9IFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5pc0VuYWJsZWQoKTtcbiAgICBSZWFj
dEJyb3dzZXJFdmVudEVtaXR0ZXIuc2V0RW5hYmxlZChmYWxzZSk7XG4gICAgcmV0dXJuIGN1cnJl
bnRseUVuYWJsZWQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gcHJldmlv
dXNseUVuYWJsZWQgRW5hYmxlZCBzdGF0dXMgb2ZcbiAgICogICBgUmVhY3RCcm93c2VyRXZlbnRF
bWl0dGVyYCBiZWZvcmUgdGhlIHJlY29uY2lsaWF0aW9uIG9jY3VycmVkLiBgY2xvc2VgXG4gICAq
ICAgcmVzdG9yZXMgdGhlIHByZXZpb3VzIHZhbHVlLlxuICAgKi9cbiAgY2xvc2U6IGZ1bmN0aW9u
IChwcmV2aW91c2x5RW5hYmxlZCkge1xuICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5zZXRF
bmFibGVkKHByZXZpb3VzbHlFbmFibGVkKTtcbiAgfVxufTtcblxuLyoqXG4gKiBQcm92aWRlcyBh
IHF1ZXVlIGZvciBjb2xsZWN0aW5nIGBjb21wb25lbnREaWRNb3VudGAgYW5kXG4gKiBgY29tcG9u
ZW50RGlkVXBkYXRlYCBjYWxsYmFja3MgZHVyaW5nIHRoZSB0cmFuc2FjdGlvbi5cbiAqL1xudmFy
IE9OX0RPTV9SRUFEWV9RVUVVRUlORyA9IHtcbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBp
bnRlcm5hbCBgb25ET01SZWFkeWAgcXVldWUuXG4gICAqL1xuICBpbml0aWFsaXplOiBmdW5jdGlv
biAoKSB7XG4gICAgdGhpcy5yZWFjdE1vdW50UmVhZHkucmVzZXQoKTtcbiAgfSxcblxuICAvKipc
biAgICogQWZ0ZXIgRE9NIGlzIGZsdXNoZWQsIGludm9rZSBhbGwgcmVnaXN0ZXJlZCBgb25ET01S
ZWFkeWAgY2FsbGJhY2tzLlxuICAgKi9cbiAgY2xvc2U6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlz
LnJlYWN0TW91bnRSZWFkeS5ub3RpZnlBbGwoKTtcbiAgfVxufTtcblxuLyoqXG4gKiBFeGVjdXRl
ZCB3aXRoaW4gdGhlIHNjb3BlIG9mIHRoZSBgVHJhbnNhY3Rpb25gIGluc3RhbmNlLiBDb25zaWRl
ciB0aGVzZSBhc1xuICogYmVpbmcgbWVtYmVyIG1ldGhvZHMsIGJ1dCB3aXRoIGFuIGltcGxpZWQg
b3JkZXJpbmcgd2hpbGUgYmVpbmcgaXNvbGF0ZWQgZnJvbVxuICogZWFjaCBvdGhlci5cbiAqL1xu
dmFyIFRSQU5TQUNUSU9OX1dSQVBQRVJTID0gW1NFTEVDVElPTl9SRVNUT1JBVElPTiwgRVZFTlRf
U1VQUFJFU1NJT04sIE9OX0RPTV9SRUFEWV9RVUVVRUlOR107XG5cbmlmIChmYWxzZSkge1xuICBU
UkFOU0FDVElPTl9XUkFQUEVSUy5wdXNoKHtcbiAgICBpbml0aWFsaXplOiBSZWFjdEluc3RydW1l
bnRhdGlvbi5kZWJ1Z1Rvb2wub25CZWdpbkZsdXNoLFxuICAgIGNsb3NlOiBSZWFjdEluc3RydW1l
bnRhdGlvbi5kZWJ1Z1Rvb2wub25FbmRGbHVzaFxuICB9KTtcbn1cblxuLyoqXG4gKiBDdXJyZW50
bHk6XG4gKiAtIFRoZSBvcmRlciB0aGF0IHRoZXNlIGFyZSBsaXN0ZWQgaW4gdGhlIHRyYW5zYWN0
aW9uIGlzIGNyaXRpY2FsOlxuICogLSBTdXBwcmVzc2VzIGV2ZW50cy5cbiAqIC0gUmVzdG9yZXMg
c2VsZWN0aW9uIHJhbmdlLlxuICpcbiAqIEZ1dHVyZTpcbiAqIC0gUmVzdG9yZSBkb2N1bWVudC9v
dmVyZmxvdyBzY3JvbGwgcG9zaXRpb25zIHRoYXQgd2VyZSB1bmludGVudGlvbmFsbHlcbiAqICAg
bW9kaWZpZWQgdmlhIERPTSBpbnNlcnRpb25zIGFib3ZlIHRoZSB0b3Agdmlld3BvcnQgYm91bmRh
cnkuXG4gKiAtIEltcGxlbWVudC9pbnRlZ3JhdGUgd2l0aCBjdXN0b21pemVkIGNvbnN0cmFpbnQg
YmFzZWQgbGF5b3V0IHN5c3RlbSBhbmQga2VlcFxuICogICB0cmFjayBvZiB3aGljaCBkaW1lbnNp
b25zIG11c3QgYmUgcmVtZWFzdXJlZC5cbiAqXG4gKiBAY2xhc3MgUmVhY3RSZWNvbmNpbGVUcmFu
c2FjdGlvblxuICovXG5mdW5jdGlvbiBSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uKHVzZUNyZWF0
ZUVsZW1lbnQpIHtcbiAgdGhpcy5yZWluaXRpYWxpemVUcmFuc2FjdGlvbigpO1xuICAvLyBPbmx5
IHNlcnZlci1zaWRlIHJlbmRlcmluZyByZWFsbHkgbmVlZHMgdGhpcyBvcHRpb24gKHNlZVxuICAv
LyBgUmVhY3RTZXJ2ZXJSZW5kZXJpbmdgKSwgYnV0IHNlcnZlci1zaWRlIHVzZXNcbiAgLy8gYFJl
YWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb25gIGluc3RlYWQuIFRoaXMgb3B0aW9uIGlzIGhl
cmUgc28gdGhhdCBpdCdzXG4gIC8vIGFjY2Vzc2libGUgYW5kIGRlZmF1bHRzIHRvIGZhbHNlIHdo
ZW4gYFJlYWN0RE9NQ29tcG9uZW50YCBhbmRcbiAgLy8gYFJlYWN0RE9NVGV4dENvbXBvbmVudGAg
Y2hlY2tzIGl0IGluIGBtb3VudENvbXBvbmVudGAuYFxuICB0aGlzLnJlbmRlclRvU3RhdGljTWFy
a3VwID0gZmFsc2U7XG4gIHRoaXMucmVhY3RNb3VudFJlYWR5ID0gQ2FsbGJhY2tRdWV1ZS5nZXRQ
b29sZWQobnVsbCk7XG4gIHRoaXMudXNlQ3JlYXRlRWxlbWVudCA9IHVzZUNyZWF0ZUVsZW1lbnQ7
XG59XG5cbnZhciBNaXhpbiA9IHtcbiAgLyoqXG4gICAqIEBzZWUgVHJhbnNhY3Rpb25cbiAgICog
QGFic3RyYWN0XG4gICAqIEBmaW5hbFxuICAgKiBAcmV0dXJuIHthcnJheTxvYmplY3Q+fSBMaXN0
IG9mIG9wZXJhdGlvbiB3cmFwIHByb2NlZHVyZXMuXG4gICAqICAgVE9ETzogY29udmVydCB0byBh
cnJheTxUcmFuc2FjdGlvbldyYXBwZXI+XG4gICAqL1xuICBnZXRUcmFuc2FjdGlvbldyYXBwZXJz
OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFRSQU5TQUNUSU9OX1dSQVBQRVJTO1xuICB9LFxu
XG4gIC8qKlxuICAgKiBAcmV0dXJuIHtvYmplY3R9IFRoZSBxdWV1ZSB0byBjb2xsZWN0IGBvbkRP
TVJlYWR5YCBjYWxsYmFja3Mgd2l0aC5cbiAgICovXG4gIGdldFJlYWN0TW91bnRSZWFkeTogZnVu
Y3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLnJlYWN0TW91bnRSZWFkeTtcbiAgfSxcblxuICAv
KipcbiAgICogQHJldHVybiB7b2JqZWN0fSBUaGUgcXVldWUgdG8gY29sbGVjdCBSZWFjdCBhc3lu
YyBldmVudHMuXG4gICAqL1xuICBnZXRVcGRhdGVRdWV1ZTogZnVuY3Rpb24gKCkge1xuICAgIHJl
dHVybiBSZWFjdFVwZGF0ZVF1ZXVlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTYXZlIGN1cnJlbnQg
dHJhbnNhY3Rpb24gc3RhdGUgLS0gaWYgdGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoaXMgbWV0aG9k
IGlzXG4gICAqIHBhc3NlZCB0byBgcm9sbGJhY2tgLCB0aGUgdHJhbnNhY3Rpb24gd2lsbCBiZSBy
ZXNldCB0byB0aGF0IHN0YXRlLlxuICAgKi9cbiAgY2hlY2twb2ludDogZnVuY3Rpb24gKCkge1xu
ICAgIC8vIHJlYWN0TW91bnRSZWFkeSBpcyB0aGUgb3VyIG9ubHkgc3RhdGVmdWwgd3JhcHBlclxu
ICAgIHJldHVybiB0aGlzLnJlYWN0TW91bnRSZWFkeS5jaGVja3BvaW50KCk7XG4gIH0sXG5cbiAg
cm9sbGJhY2s6IGZ1bmN0aW9uIChjaGVja3BvaW50KSB7XG4gICAgdGhpcy5yZWFjdE1vdW50UmVh
ZHkucm9sbGJhY2soY2hlY2twb2ludCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIGBQb29sZWRDbGFz
c2AgbG9va3MgZm9yIHRoaXMsIGFuZCB3aWxsIGludm9rZSB0aGlzIGJlZm9yZSBhbGxvd2luZyB0
aGlzXG4gICAqIGluc3RhbmNlIHRvIGJlIHJldXNlZC5cbiAgICovXG4gIGRlc3RydWN0b3I6IGZ1
bmN0aW9uICgpIHtcbiAgICBDYWxsYmFja1F1ZXVlLnJlbGVhc2UodGhpcy5yZWFjdE1vdW50UmVh
ZHkpO1xuICAgIHRoaXMucmVhY3RNb3VudFJlYWR5ID0gbnVsbDtcbiAgfVxufTtcblxuX2Fzc2ln
bihSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uLnByb3RvdHlwZSwgVHJhbnNhY3Rpb24sIE1peGlu
KTtcblxuUG9vbGVkQ2xhc3MuYWRkUG9vbGluZ1RvKFJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24p
O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb247XG5cbi8qKiov
IH0pLFxuLyogMTcxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBh
Y2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAx
My1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4g
KiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5z
ZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2Yg
dGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0
cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3Rvcnku
XG4gKlxuICovXG5cblxuXG52YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKDUpO1xuXG52YXIgZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldCA9IF9fd2VicGFja19y
ZXF1aXJlX18oMTcyKTtcbnZhciBnZXRUZXh0Q29udGVudEFjY2Vzc29yID0gX193ZWJwYWNrX3Jl
cXVpcmVfXyg2MSk7XG5cbi8qKlxuICogV2hpbGUgYGlzQ29sbGFwc2VkYCBpcyBhdmFpbGFibGUg
b24gdGhlIFNlbGVjdGlvbiBvYmplY3QgYW5kIGBjb2xsYXBzZWRgXG4gKiBpcyBhdmFpbGFibGUg
b24gdGhlIFJhbmdlIG9iamVjdCwgSUUxMSBzb21ldGltZXMgZ2V0cyB0aGVtIHdyb25nLlxuICog
SWYgdGhlIGFuY2hvci9mb2N1cyBub2RlcyBhbmQgb2Zmc2V0cyBhcmUgdGhlIHNhbWUsIHRoZSBy
YW5nZSBpcyBjb2xsYXBzZWQuXG4gKi9cbmZ1bmN0aW9uIGlzQ29sbGFwc2VkKGFuY2hvck5vZGUs
IGFuY2hvck9mZnNldCwgZm9jdXNOb2RlLCBmb2N1c09mZnNldCkge1xuICByZXR1cm4gYW5jaG9y
Tm9kZSA9PT0gZm9jdXNOb2RlICYmIGFuY2hvck9mZnNldCA9PT0gZm9jdXNPZmZzZXQ7XG59XG5c
bi8qKlxuICogR2V0IHRoZSBhcHByb3ByaWF0ZSBhbmNob3IgYW5kIGZvY3VzIG5vZGUvb2Zmc2V0
IHBhaXJzIGZvciBJRS5cbiAqXG4gKiBUaGUgY2F0Y2ggaGVyZSBpcyB0aGF0IElFJ3Mgc2VsZWN0
aW9uIEFQSSBkb2Vzbid0IHByb3ZpZGUgaW5mb3JtYXRpb25cbiAqIGFib3V0IHdoZXRoZXIgdGhl
IHNlbGVjdGlvbiBpcyBmb3J3YXJkIG9yIGJhY2t3YXJkLCBzbyB3ZSBoYXZlIHRvXG4gKiBiZWhh
dmUgYXMgdGhvdWdoIGl0J3MgYWx3YXlzIGZvcndhcmQuXG4gKlxuICogSUUgdGV4dCBkaWZmZXJz
IGZyb20gbW9kZXJuIHNlbGVjdGlvbiBpbiB0aGF0IGl0IGJlaGF2ZXMgYXMgdGhvdWdoXG4gKiBi
bG9jayBlbGVtZW50cyBlbmQgd2l0aCBhIG5ldyBsaW5lLiBUaGlzIG1lYW5zIGNoYXJhY3RlciBv
ZmZzZXRzIHdpbGxcbiAqIGRpZmZlciBiZXR3ZWVuIHRoZSB0d28gQVBJcy5cbiAqXG4gKiBAcGFy
YW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZnVuY3Rpb24g
Z2V0SUVPZmZzZXRzKG5vZGUpIHtcbiAgdmFyIHNlbGVjdGlvbiA9IGRvY3VtZW50LnNlbGVjdGlv
bjtcbiAgdmFyIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTtcbiAgdmFy
IHNlbGVjdGVkTGVuZ3RoID0gc2VsZWN0ZWRSYW5nZS50ZXh0Lmxlbmd0aDtcblxuICAvLyBEdXBs
aWNhdGUgc2VsZWN0aW9uIHNvIHdlIGNhbiBtb3ZlIHJhbmdlIHdpdGhvdXQgYnJlYWtpbmcgdXNl
ciBzZWxlY3Rpb24uXG4gIHZhciBmcm9tU3RhcnQgPSBzZWxlY3RlZFJhbmdlLmR1cGxpY2F0ZSgp
O1xuICBmcm9tU3RhcnQubW92ZVRvRWxlbWVudFRleHQobm9kZSk7XG4gIGZyb21TdGFydC5zZXRF
bmRQb2ludCgnRW5kVG9TdGFydCcsIHNlbGVjdGVkUmFuZ2UpO1xuXG4gIHZhciBzdGFydE9mZnNl
dCA9IGZyb21TdGFydC50ZXh0Lmxlbmd0aDtcbiAgdmFyIGVuZE9mZnNldCA9IHN0YXJ0T2Zmc2V0
ICsgc2VsZWN0ZWRMZW5ndGg7XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydDogc3RhcnRPZmZzZXQs
XG4gICAgZW5kOiBlbmRPZmZzZXRcbiAgfTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0RPTUVsZW1l
bnR9IG5vZGVcbiAqIEByZXR1cm4gez9vYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGdldE1vZGVybk9m
ZnNldHMobm9kZSkge1xuICB2YXIgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbiAmJiB3
aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cbiAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJh
bmdlQ291bnQgPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBhbmNob3JO
b2RlID0gc2VsZWN0aW9uLmFuY2hvck5vZGU7XG4gIHZhciBhbmNob3JPZmZzZXQgPSBzZWxlY3Rp
b24uYW5jaG9yT2Zmc2V0O1xuICB2YXIgZm9jdXNOb2RlID0gc2VsZWN0aW9uLmZvY3VzTm9kZTtc
biAgdmFyIGZvY3VzT2Zmc2V0ID0gc2VsZWN0aW9uLmZvY3VzT2Zmc2V0O1xuXG4gIHZhciBjdXJy
ZW50UmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcblxuICAvLyBJbiBGaXJlZm94LCBy
YW5nZS5zdGFydENvbnRhaW5lciBhbmQgcmFuZ2UuZW5kQ29udGFpbmVyIGNhbiBiZSBcImFub255
bW91c1xuICAvLyBkaXZzXCIsIGUuZy4gdGhlIHVwL2Rvd24gYnV0dG9ucyBvbiBhbiA8aW5wdXQg
dHlwZT1cIm51bWJlclwiPi4gQW5vbnltb3VzXG4gIC8vIGRpdnMgZG8gbm90IHNlZW0gdG8gZXhw
b3NlIHByb3BlcnRpZXMsIHRyaWdnZXJpbmcgYSBcIlBlcm1pc3Npb24gZGVuaWVkXG4gIC8vIGVy
cm9yXCIgaWYgYW55IG9mIGl0cyBwcm9wZXJ0aWVzIGFyZSBhY2Nlc3NlZC4gVGhlIG9ubHkgc2Vl
bWluZ2x5IHBvc3NpYmxlXG4gIC8vIHdheSB0byBhdm9pZCBlcnJvcmluZyBpcyB0byBhY2Nlc3Mg
YSBwcm9wZXJ0eSB0aGF0IHR5cGljYWxseSB3b3JrcyBmb3JcbiAgLy8gbm9uLWFub255bW91cyBk
aXZzIGFuZCBjYXRjaCBhbnkgZXJyb3IgdGhhdCBtYXkgb3RoZXJ3aXNlIGFyaXNlLiBTZWVcbiAg
Ly8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA4NDI3XG4g
IHRyeSB7XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLWV4cHJlc3Npb25zICovXG4g
ICAgY3VycmVudFJhbmdlLnN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlO1xuICAgIGN1cnJlbnRSYW5n
ZS5lbmRDb250YWluZXIubm9kZVR5cGU7XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby11bnVzZWQt
ZXhwcmVzc2lvbnMgKi9cbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5c
biAgLy8gSWYgdGhlIG5vZGUgYW5kIG9mZnNldCB2YWx1ZXMgYXJlIHRoZSBzYW1lLCB0aGUgc2Vs
ZWN0aW9uIGlzIGNvbGxhcHNlZC5cbiAgLy8gYFNlbGVjdGlvbi5pc0NvbGxhcHNlZGAgaXMgYXZh
aWxhYmxlIG5hdGl2ZWx5LCBidXQgSUUgc29tZXRpbWVzIGdldHNcbiAgLy8gdGhpcyB2YWx1ZSB3
cm9uZy5cbiAgdmFyIGlzU2VsZWN0aW9uQ29sbGFwc2VkID0gaXNDb2xsYXBzZWQoc2VsZWN0aW9u
LmFuY2hvck5vZGUsIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsIHNlbGVjdGlvbi5mb2N1c05vZGUs
IHNlbGVjdGlvbi5mb2N1c09mZnNldCk7XG5cbiAgdmFyIHJhbmdlTGVuZ3RoID0gaXNTZWxlY3Rp
b25Db2xsYXBzZWQgPyAwIDogY3VycmVudFJhbmdlLnRvU3RyaW5nKCkubGVuZ3RoO1xuXG4gIHZh
ciB0ZW1wUmFuZ2UgPSBjdXJyZW50UmFuZ2UuY2xvbmVSYW5nZSgpO1xuICB0ZW1wUmFuZ2Uuc2Vs
ZWN0Tm9kZUNvbnRlbnRzKG5vZGUpO1xuICB0ZW1wUmFuZ2Uuc2V0RW5kKGN1cnJlbnRSYW5nZS5z
dGFydENvbnRhaW5lciwgY3VycmVudFJhbmdlLnN0YXJ0T2Zmc2V0KTtcblxuICB2YXIgaXNUZW1w
UmFuZ2VDb2xsYXBzZWQgPSBpc0NvbGxhcHNlZCh0ZW1wUmFuZ2Uuc3RhcnRDb250YWluZXIsIHRl
bXBSYW5nZS5zdGFydE9mZnNldCwgdGVtcFJhbmdlLmVuZENvbnRhaW5lciwgdGVtcFJhbmdlLmVu
ZE9mZnNldCk7XG5cbiAgdmFyIHN0YXJ0ID0gaXNUZW1wUmFuZ2VDb2xsYXBzZWQgPyAwIDogdGVt
cFJhbmdlLnRvU3RyaW5nKCkubGVuZ3RoO1xuICB2YXIgZW5kID0gc3RhcnQgKyByYW5nZUxlbmd0
aDtcblxuICAvLyBEZXRlY3Qgd2hldGhlciB0aGUgc2VsZWN0aW9uIGlzIGJhY2t3YXJkLlxuICB2
YXIgZGV0ZWN0aW9uUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICBkZXRlY3Rpb25S
YW5nZS5zZXRTdGFydChhbmNob3JOb2RlLCBhbmNob3JPZmZzZXQpO1xuICBkZXRlY3Rpb25SYW5n
ZS5zZXRFbmQoZm9jdXNOb2RlLCBmb2N1c09mZnNldCk7XG4gIHZhciBpc0JhY2t3YXJkID0gZGV0
ZWN0aW9uUmFuZ2UuY29sbGFwc2VkO1xuXG4gIHJldHVybiB7XG4gICAgc3RhcnQ6IGlzQmFja3dh
cmQgPyBlbmQgOiBzdGFydCxcbiAgICBlbmQ6IGlzQmFja3dhcmQgPyBzdGFydCA6IGVuZFxuICB9
O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX0gbm9kZVxuICog
QHBhcmFtIHtvYmplY3R9IG9mZnNldHNcbiAqL1xuZnVuY3Rpb24gc2V0SUVPZmZzZXRzKG5vZGUs
IG9mZnNldHMpIHtcbiAgdmFyIHJhbmdlID0gZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdl
KCkuZHVwbGljYXRlKCk7XG4gIHZhciBzdGFydCwgZW5kO1xuXG4gIGlmIChvZmZzZXRzLmVuZCA9
PT0gdW5kZWZpbmVkKSB7XG4gICAgc3RhcnQgPSBvZmZzZXRzLnN0YXJ0O1xuICAgIGVuZCA9IHN0
YXJ0O1xuICB9IGVsc2UgaWYgKG9mZnNldHMuc3RhcnQgPiBvZmZzZXRzLmVuZCkge1xuICAgIHN0
YXJ0ID0gb2Zmc2V0cy5lbmQ7XG4gICAgZW5kID0gb2Zmc2V0cy5zdGFydDtcbiAgfSBlbHNlIHtc
biAgICBzdGFydCA9IG9mZnNldHMuc3RhcnQ7XG4gICAgZW5kID0gb2Zmc2V0cy5lbmQ7XG4gIH1c
blxuICByYW5nZS5tb3ZlVG9FbGVtZW50VGV4dChub2RlKTtcbiAgcmFuZ2UubW92ZVN0YXJ0KCdj
aGFyYWN0ZXInLCBzdGFydCk7XG4gIHJhbmdlLnNldEVuZFBvaW50KCdFbmRUb1N0YXJ0JywgcmFu
Z2UpO1xuICByYW5nZS5tb3ZlRW5kKCdjaGFyYWN0ZXInLCBlbmQgLSBzdGFydCk7XG4gIHJhbmdl
LnNlbGVjdCgpO1xufVxuXG4vKipcbiAqIEluIG1vZGVybiBub24tSUUgYnJvd3NlcnMsIHdlIGNh
biBzdXBwb3J0IGJvdGggZm9yd2FyZCBhbmQgYmFja3dhcmRcbiAqIHNlbGVjdGlvbnMuXG4gKlxu
ICogTm90ZTogSUUxMCsgc3VwcG9ydHMgdGhlIFNlbGVjdGlvbiBvYmplY3QsIGJ1dCBpdCBkb2Vz
IG5vdCBzdXBwb3J0XG4gKiB0aGUgYGV4dGVuZGAgbWV0aG9kLCB3aGljaCBtZWFucyB0aGF0IGV2
ZW4gaW4gbW9kZXJuIElFLCBpdCdzIG5vdCBwb3NzaWJsZVxuICogdG8gcHJvZ3JhbW1hdGljYWxs
eSBjcmVhdGUgYSBiYWNrd2FyZCBzZWxlY3Rpb24uIFRodXMsIGZvciBhbGwgSUVcbiAqIHZlcnNp
b25zLCB3ZSB1c2UgdGhlIG9sZCBJRSBBUEkgdG8gY3JlYXRlIG91ciBzZWxlY3Rpb25zLlxuICpc
biAqIEBwYXJhbSB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX0gbm9kZVxuICogQHBhcmFtIHtvYmpl
Y3R9IG9mZnNldHNcbiAqL1xuZnVuY3Rpb24gc2V0TW9kZXJuT2Zmc2V0cyhub2RlLCBvZmZzZXRz
KSB7XG4gIGlmICghd2luZG93LmdldFNlbGVjdGlvbikge1xuICAgIHJldHVybjtcbiAgfVxuXG4g
IHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gIHZhciBsZW5ndGggPSBu
b2RlW2dldFRleHRDb250ZW50QWNjZXNzb3IoKV0ubGVuZ3RoO1xuICB2YXIgc3RhcnQgPSBNYXRo
Lm1pbihvZmZzZXRzLnN0YXJ0LCBsZW5ndGgpO1xuICB2YXIgZW5kID0gb2Zmc2V0cy5lbmQgPT09
IHVuZGVmaW5lZCA/IHN0YXJ0IDogTWF0aC5taW4ob2Zmc2V0cy5lbmQsIGxlbmd0aCk7XG5cbiAg
Ly8gSUUgMTEgdXNlcyBtb2Rlcm4gc2VsZWN0aW9uLCBidXQgZG9lc24ndCBzdXBwb3J0IHRoZSBl
eHRlbmQgbWV0aG9kLlxuICAvLyBGbGlwIGJhY2t3YXJkIHNlbGVjdGlvbnMsIHNvIHdlIGNhbiBz
ZXQgd2l0aCBhIHNpbmdsZSByYW5nZS5cbiAgaWYgKCFzZWxlY3Rpb24uZXh0ZW5kICYmIHN0YXJ0
ID4gZW5kKSB7XG4gICAgdmFyIHRlbXAgPSBlbmQ7XG4gICAgZW5kID0gc3RhcnQ7XG4gICAgc3Rh
cnQgPSB0ZW1wO1xuICB9XG5cbiAgdmFyIHN0YXJ0TWFya2VyID0gZ2V0Tm9kZUZvckNoYXJhY3Rl
ck9mZnNldChub2RlLCBzdGFydCk7XG4gIHZhciBlbmRNYXJrZXIgPSBnZXROb2RlRm9yQ2hhcmFj
dGVyT2Zmc2V0KG5vZGUsIGVuZCk7XG5cbiAgaWYgKHN0YXJ0TWFya2VyICYmIGVuZE1hcmtlcikg
e1xuICAgIHZhciByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgcmFuZ2Uuc2V0
U3RhcnQoc3RhcnRNYXJrZXIubm9kZSwgc3RhcnRNYXJrZXIub2Zmc2V0KTtcbiAgICBzZWxlY3Rp
b24ucmVtb3ZlQWxsUmFuZ2VzKCk7XG5cbiAgICBpZiAoc3RhcnQgPiBlbmQpIHtcbiAgICAgIHNl
bGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XG4gICAgICBzZWxlY3Rpb24uZXh0ZW5kKGVuZE1hcmtl
ci5ub2RlLCBlbmRNYXJrZXIub2Zmc2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmFuZ2Uuc2V0
RW5kKGVuZE1hcmtlci5ub2RlLCBlbmRNYXJrZXIub2Zmc2V0KTtcbiAgICAgIHNlbGVjdGlvbi5h
ZGRSYW5nZShyYW5nZSk7XG4gICAgfVxuICB9XG59XG5cbnZhciB1c2VJRU9mZnNldHMgPSBFeGVj
dXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00gJiYgJ3NlbGVjdGlvbicgaW4gZG9jdW1lbnQgJiYg
ISgnZ2V0U2VsZWN0aW9uJyBpbiB3aW5kb3cpO1xuXG52YXIgUmVhY3RET01TZWxlY3Rpb24gPSB7
XG4gIC8qKlxuICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAgICovXG4gIGdldE9mZnNl
dHM6IHVzZUlFT2Zmc2V0cyA/IGdldElFT2Zmc2V0cyA6IGdldE1vZGVybk9mZnNldHMsXG5cbiAg
LyoqXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX0gbm9kZVxuICAgKiBAcGFy
YW0ge29iamVjdH0gb2Zmc2V0c1xuICAgKi9cbiAgc2V0T2Zmc2V0czogdXNlSUVPZmZzZXRzID8g
c2V0SUVPZmZzZXRzIDogc2V0TW9kZXJuT2Zmc2V0c1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBS
ZWFjdERPTVNlbGVjdGlvbjtcblxuLyoqKi8gfSksXG4vKiAxNzIgKi9cbi8qKiovIChmdW5jdGlv
bihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0
XCI7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBB
bGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQg
dW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxl
IGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFs
IGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBm
aWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuXG5cbi8qKlxuICogR2l2ZW4g
YW55IG5vZGUgcmV0dXJuIHRoZSBmaXJzdCBsZWFmIG5vZGUgd2l0aG91dCBjaGlsZHJlbi5cbiAq
XG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IG5vZGVcbiAqIEByZXR1cm4ge0RP
TUVsZW1lbnR8RE9NVGV4dE5vZGV9XG4gKi9cblxuZnVuY3Rpb24gZ2V0TGVhZk5vZGUobm9kZSkg
e1xuICB3aGlsZSAobm9kZSAmJiBub2RlLmZpcnN0Q2hpbGQpIHtcbiAgICBub2RlID0gbm9kZS5m
aXJzdENoaWxkO1xuICB9XG4gIHJldHVybiBub2RlO1xufVxuXG4vKipcbiAqIEdldCB0aGUgbmV4
dCBzaWJsaW5nIHdpdGhpbiBhIGNvbnRhaW5lci4gVGhpcyB3aWxsIHdhbGsgdXAgdGhlXG4gKiBE
T00gaWYgYSBub2RlJ3Mgc2libGluZ3MgaGF2ZSBiZWVuIGV4aGF1c3RlZC5cbiAqXG4gKiBAcGFy
YW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IG5vZGVcbiAqIEByZXR1cm4gez9ET01FbGVtZW50
fERPTVRleHROb2RlfVxuICovXG5mdW5jdGlvbiBnZXRTaWJsaW5nTm9kZShub2RlKSB7XG4gIHdo
aWxlIChub2RlKSB7XG4gICAgaWYgKG5vZGUubmV4dFNpYmxpbmcpIHtcbiAgICAgIHJldHVybiBu
b2RlLm5leHRTaWJsaW5nO1xuICAgIH1cbiAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICB9
XG59XG5cbi8qKlxuICogR2V0IG9iamVjdCBkZXNjcmliaW5nIHRoZSBub2RlcyB3aGljaCBjb250
YWluIGNoYXJhY3RlcnMgYXQgb2Zmc2V0LlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudHxET01U
ZXh0Tm9kZX0gcm9vdFxuICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICogQHJldHVybiB7P29i
amVjdH1cbiAqL1xuZnVuY3Rpb24gZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldChyb290LCBvZmZz
ZXQpIHtcbiAgdmFyIG5vZGUgPSBnZXRMZWFmTm9kZShyb290KTtcbiAgdmFyIG5vZGVTdGFydCA9
IDA7XG4gIHZhciBub2RlRW5kID0gMDtcblxuICB3aGlsZSAobm9kZSkge1xuICAgIGlmIChub2Rl
Lm5vZGVUeXBlID09PSAzKSB7XG4gICAgICBub2RlRW5kID0gbm9kZVN0YXJ0ICsgbm9kZS50ZXh0
Q29udGVudC5sZW5ndGg7XG5cbiAgICAgIGlmIChub2RlU3RhcnQgPD0gb2Zmc2V0ICYmIG5vZGVF
bmQgPj0gb2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbm9kZTogbm9kZSxc
biAgICAgICAgICBvZmZzZXQ6IG9mZnNldCAtIG5vZGVTdGFydFxuICAgICAgICB9O1xuICAgICAg
fVxuXG4gICAgICBub2RlU3RhcnQgPSBub2RlRW5kO1xuICAgIH1cblxuICAgIG5vZGUgPSBnZXRM
ZWFmTm9kZShnZXRTaWJsaW5nTm9kZShub2RlKSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMg
PSBnZXROb2RlRm9yQ2hhcmFjdGVyT2Zmc2V0O1xuXG4vKioqLyB9KSxcbi8qIDE3MyAqL1xuLyoq
Ki8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5c
InVzZSBzdHJpY3RcIjtcblxuXG4vKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBG
YWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJj
ZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0
aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2Ug
dHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91
bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4g
Ki9cblxudmFyIGlzVGV4dE5vZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3NCk7XG5cbi8qZXNs
aW50LWRpc2FibGUgbm8tYml0d2lzZSAqL1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGdpdmVuIERP
TSBub2RlIGNvbnRhaW5zIG9yIGlzIGFub3RoZXIgRE9NIG5vZGUuXG4gKi9cbmZ1bmN0aW9uIGNv
bnRhaW5zTm9kZShvdXRlck5vZGUsIGlubmVyTm9kZSkge1xuICBpZiAoIW91dGVyTm9kZSB8fCAh
aW5uZXJOb2RlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2UgaWYgKG91dGVyTm9kZSA9
PT0gaW5uZXJOb2RlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoaXNUZXh0Tm9k
ZShvdXRlck5vZGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2UgaWYgKGlzVGV4dE5v
ZGUoaW5uZXJOb2RlKSkge1xuICAgIHJldHVybiBjb250YWluc05vZGUob3V0ZXJOb2RlLCBpbm5l
ck5vZGUucGFyZW50Tm9kZSk7XG4gIH0gZWxzZSBpZiAoJ2NvbnRhaW5zJyBpbiBvdXRlck5vZGUp
IHtcbiAgICByZXR1cm4gb3V0ZXJOb2RlLmNvbnRhaW5zKGlubmVyTm9kZSk7XG4gIH0gZWxzZSBp
ZiAob3V0ZXJOb2RlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSB7XG4gICAgcmV0dXJuICEhKG91
dGVyTm9kZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihpbm5lck5vZGUpICYgMTYpO1xuICB9IGVs
c2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnRh
aW5zTm9kZTtcblxuLyoqKi8gfSksXG4vKiAxNzQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUs
IGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxu
LyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1
bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwg
Z3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZp
bGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxudmFy
IGlzTm9kZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTc1KTtcblxuLyoqXG4gKiBAcGFyYW0geyp9
IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNoZWNrLlxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhl
ciBvciBub3QgdGhlIG9iamVjdCBpcyBhIERPTSB0ZXh0IG5vZGUuXG4gKi9cbmZ1bmN0aW9uIGlz
VGV4dE5vZGUob2JqZWN0KSB7XG4gIHJldHVybiBpc05vZGUob2JqZWN0KSAmJiBvYmplY3Qubm9k
ZVR5cGUgPT0gMztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1RleHROb2RlO1xuXG4vKioqLyB9
KSxcbi8qIDE3NSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNr
X3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG4vKipcbiAqIENvcHlyaWdodCAo
YykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5c
biAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUg
bGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rv
cnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50
IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJl
Y3RvcnkuXG4gKlxuICogQHR5cGVjaGVja3NcbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7Kn0gb2Jq
ZWN0IFRoZSBvYmplY3QgdG8gY2hlY2suXG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIG9y
IG5vdCB0aGUgb2JqZWN0IGlzIGEgRE9NIG5vZGUuXG4gKi9cbmZ1bmN0aW9uIGlzTm9kZShvYmpl
Y3QpIHtcbiAgdmFyIGRvYyA9IG9iamVjdCA/IG9iamVjdC5vd25lckRvY3VtZW50IHx8IG9iamVj
dCA6IGRvY3VtZW50O1xuICB2YXIgZGVmYXVsdFZpZXcgPSBkb2MuZGVmYXVsdFZpZXcgfHwgd2lu
ZG93O1xuICByZXR1cm4gISEob2JqZWN0ICYmICh0eXBlb2YgZGVmYXVsdFZpZXcuTm9kZSA9PT0g
J2Z1bmN0aW9uJyA/IG9iamVjdCBpbnN0YW5jZW9mIGRlZmF1bHRWaWV3Lk5vZGUgOiB0eXBlb2Yg
b2JqZWN0ID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb2JqZWN0Lm5vZGVUeXBlID09PSAnbnVtYmVy
JyAmJiB0eXBlb2Ygb2JqZWN0Lm5vZGVOYW1lID09PSAnc3RyaW5nJykpO1xufVxuXG5tb2R1bGUu
ZXhwb3J0cyA9IGlzTm9kZTtcblxuLyoqKi8gfSksXG4vKiAxNzYgKi9cbi8qKiovIChmdW5jdGlv
bihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0
XCI7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBB
bGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQg
dW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxl
IGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFs
IGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBm
aWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuXG5cbnZhciBOUyA9IHtcbiAg
eGxpbms6ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyxcbiAgeG1sOiAnaHR0cDovL3d3
dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlJ1xufTtcblxuLy8gV2UgdXNlIGF0dHJpYnV0ZXMg
Zm9yIGV2ZXJ5dGhpbmcgU1ZHIHNvIGxldCdzIGF2b2lkIHNvbWUgZHVwbGljYXRpb24gYW5kIHJ1
blxuLy8gY29kZSBpbnN0ZWFkLlxuLy8gVGhlIGZvbGxvd2luZyBhcmUgYWxsIHNwZWNpZmllZCBp
biB0aGUgSFRNTCBjb25maWcgYWxyZWFkeSBzbyB3ZSBleGNsdWRlIGhlcmUuXG4vLyAtIGNsYXNz
IChhcyBjbGFzc05hbWUpXG4vLyAtIGNvbG9yXG4vLyAtIGhlaWdodFxuLy8gLSBpZFxuLy8gLSBs
YW5nXG4vLyAtIG1heFxuLy8gLSBtZWRpYVxuLy8gLSBtZXRob2Rcbi8vIC0gbWluXG4vLyAtIG5h
bWVcbi8vIC0gc3R5bGVcbi8vIC0gdGFyZ2V0XG4vLyAtIHR5cGVcbi8vIC0gd2lkdGhcbnZhciBB
VFRSUyA9IHtcbiAgYWNjZW50SGVpZ2h0OiAnYWNjZW50LWhlaWdodCcsXG4gIGFjY3VtdWxhdGU6
IDAsXG4gIGFkZGl0aXZlOiAwLFxuICBhbGlnbm1lbnRCYXNlbGluZTogJ2FsaWdubWVudC1iYXNl
bGluZScsXG4gIGFsbG93UmVvcmRlcjogJ2FsbG93UmVvcmRlcicsXG4gIGFscGhhYmV0aWM6IDAs
XG4gIGFtcGxpdHVkZTogMCxcbiAgYXJhYmljRm9ybTogJ2FyYWJpYy1mb3JtJyxcbiAgYXNjZW50
OiAwLFxuICBhdHRyaWJ1dGVOYW1lOiAnYXR0cmlidXRlTmFtZScsXG4gIGF0dHJpYnV0ZVR5cGU6
ICdhdHRyaWJ1dGVUeXBlJyxcbiAgYXV0b1JldmVyc2U6ICdhdXRvUmV2ZXJzZScsXG4gIGF6aW11
dGg6IDAsXG4gIGJhc2VGcmVxdWVuY3k6ICdiYXNlRnJlcXVlbmN5JyxcbiAgYmFzZVByb2ZpbGU6
ICdiYXNlUHJvZmlsZScsXG4gIGJhc2VsaW5lU2hpZnQ6ICdiYXNlbGluZS1zaGlmdCcsXG4gIGJi
b3g6IDAsXG4gIGJlZ2luOiAwLFxuICBiaWFzOiAwLFxuICBieTogMCxcbiAgY2FsY01vZGU6ICdj
YWxjTW9kZScsXG4gIGNhcEhlaWdodDogJ2NhcC1oZWlnaHQnLFxuICBjbGlwOiAwLFxuICBjbGlw
UGF0aDogJ2NsaXAtcGF0aCcsXG4gIGNsaXBSdWxlOiAnY2xpcC1ydWxlJyxcbiAgY2xpcFBhdGhV
bml0czogJ2NsaXBQYXRoVW5pdHMnLFxuICBjb2xvckludGVycG9sYXRpb246ICdjb2xvci1pbnRl
cnBvbGF0aW9uJyxcbiAgY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczogJ2NvbG9yLWludGVycG9s
YXRpb24tZmlsdGVycycsXG4gIGNvbG9yUHJvZmlsZTogJ2NvbG9yLXByb2ZpbGUnLFxuICBjb2xv
clJlbmRlcmluZzogJ2NvbG9yLXJlbmRlcmluZycsXG4gIGNvbnRlbnRTY3JpcHRUeXBlOiAnY29u
dGVudFNjcmlwdFR5cGUnLFxuICBjb250ZW50U3R5bGVUeXBlOiAnY29udGVudFN0eWxlVHlwZScs
XG4gIGN1cnNvcjogMCxcbiAgY3g6IDAsXG4gIGN5OiAwLFxuICBkOiAwLFxuICBkZWNlbGVyYXRl
OiAwLFxuICBkZXNjZW50OiAwLFxuICBkaWZmdXNlQ29uc3RhbnQ6ICdkaWZmdXNlQ29uc3RhbnQn
LFxuICBkaXJlY3Rpb246IDAsXG4gIGRpc3BsYXk6IDAsXG4gIGRpdmlzb3I6IDAsXG4gIGRvbWlu
YW50QmFzZWxpbmU6ICdkb21pbmFudC1iYXNlbGluZScsXG4gIGR1cjogMCxcbiAgZHg6IDAsXG4g
IGR5OiAwLFxuICBlZGdlTW9kZTogJ2VkZ2VNb2RlJyxcbiAgZWxldmF0aW9uOiAwLFxuICBlbmFi
bGVCYWNrZ3JvdW5kOiAnZW5hYmxlLWJhY2tncm91bmQnLFxuICBlbmQ6IDAsXG4gIGV4cG9uZW50
OiAwLFxuICBleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOiAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZCcsXG4gIGZpbGw6IDAsXG4gIGZpbGxPcGFjaXR5OiAnZmlsbC1vcGFjaXR5JyxcbiAgZmls
bFJ1bGU6ICdmaWxsLXJ1bGUnLFxuICBmaWx0ZXI6IDAsXG4gIGZpbHRlclJlczogJ2ZpbHRlclJl
cycsXG4gIGZpbHRlclVuaXRzOiAnZmlsdGVyVW5pdHMnLFxuICBmbG9vZENvbG9yOiAnZmxvb2Qt
Y29sb3InLFxuICBmbG9vZE9wYWNpdHk6ICdmbG9vZC1vcGFjaXR5JyxcbiAgZm9jdXNhYmxlOiAw
LFxuICBmb250RmFtaWx5OiAnZm9udC1mYW1pbHknLFxuICBmb250U2l6ZTogJ2ZvbnQtc2l6ZScs
XG4gIGZvbnRTaXplQWRqdXN0OiAnZm9udC1zaXplLWFkanVzdCcsXG4gIGZvbnRTdHJldGNoOiAn
Zm9udC1zdHJldGNoJyxcbiAgZm9udFN0eWxlOiAnZm9udC1zdHlsZScsXG4gIGZvbnRWYXJpYW50
OiAnZm9udC12YXJpYW50JyxcbiAgZm9udFdlaWdodDogJ2ZvbnQtd2VpZ2h0JyxcbiAgZm9ybWF0
OiAwLFxuICBmcm9tOiAwLFxuICBmeDogMCxcbiAgZnk6IDAsXG4gIGcxOiAwLFxuICBnMjogMCxc
biAgZ2x5cGhOYW1lOiAnZ2x5cGgtbmFtZScsXG4gIGdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFs
OiAnZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCcsXG4gIGdseXBoT3JpZW50YXRpb25WZXJ0
aWNhbDogJ2dseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsJyxcbiAgZ2x5cGhSZWY6ICdnbHlwaFJl
ZicsXG4gIGdyYWRpZW50VHJhbnNmb3JtOiAnZ3JhZGllbnRUcmFuc2Zvcm0nLFxuICBncmFkaWVu
dFVuaXRzOiAnZ3JhZGllbnRVbml0cycsXG4gIGhhbmdpbmc6IDAsXG4gIGhvcml6QWR2WDogJ2hv
cml6LWFkdi14JyxcbiAgaG9yaXpPcmlnaW5YOiAnaG9yaXotb3JpZ2luLXgnLFxuICBpZGVvZ3Jh
cGhpYzogMCxcbiAgaW1hZ2VSZW5kZXJpbmc6ICdpbWFnZS1yZW5kZXJpbmcnLFxuICAnaW4nOiAw
LFxuICBpbjI6IDAsXG4gIGludGVyY2VwdDogMCxcbiAgazogMCxcbiAgazE6IDAsXG4gIGsyOiAw
LFxuICBrMzogMCxcbiAgazQ6IDAsXG4gIGtlcm5lbE1hdHJpeDogJ2tlcm5lbE1hdHJpeCcsXG4g
IGtlcm5lbFVuaXRMZW5ndGg6ICdrZXJuZWxVbml0TGVuZ3RoJyxcbiAga2VybmluZzogMCxcbiAg
a2V5UG9pbnRzOiAna2V5UG9pbnRzJyxcbiAga2V5U3BsaW5lczogJ2tleVNwbGluZXMnLFxuICBr
ZXlUaW1lczogJ2tleVRpbWVzJyxcbiAgbGVuZ3RoQWRqdXN0OiAnbGVuZ3RoQWRqdXN0JyxcbiAg
bGV0dGVyU3BhY2luZzogJ2xldHRlci1zcGFjaW5nJyxcbiAgbGlnaHRpbmdDb2xvcjogJ2xpZ2h0
aW5nLWNvbG9yJyxcbiAgbGltaXRpbmdDb25lQW5nbGU6ICdsaW1pdGluZ0NvbmVBbmdsZScsXG4g
IGxvY2FsOiAwLFxuICBtYXJrZXJFbmQ6ICdtYXJrZXItZW5kJyxcbiAgbWFya2VyTWlkOiAnbWFy
a2VyLW1pZCcsXG4gIG1hcmtlclN0YXJ0OiAnbWFya2VyLXN0YXJ0JyxcbiAgbWFya2VySGVpZ2h0
OiAnbWFya2VySGVpZ2h0JyxcbiAgbWFya2VyVW5pdHM6ICdtYXJrZXJVbml0cycsXG4gIG1hcmtl
cldpZHRoOiAnbWFya2VyV2lkdGgnLFxuICBtYXNrOiAwLFxuICBtYXNrQ29udGVudFVuaXRzOiAn
bWFza0NvbnRlbnRVbml0cycsXG4gIG1hc2tVbml0czogJ21hc2tVbml0cycsXG4gIG1hdGhlbWF0
aWNhbDogMCxcbiAgbW9kZTogMCxcbiAgbnVtT2N0YXZlczogJ251bU9jdGF2ZXMnLFxuICBvZmZz
ZXQ6IDAsXG4gIG9wYWNpdHk6IDAsXG4gIG9wZXJhdG9yOiAwLFxuICBvcmRlcjogMCxcbiAgb3Jp
ZW50OiAwLFxuICBvcmllbnRhdGlvbjogMCxcbiAgb3JpZ2luOiAwLFxuICBvdmVyZmxvdzogMCxc
biAgb3ZlcmxpbmVQb3NpdGlvbjogJ292ZXJsaW5lLXBvc2l0aW9uJyxcbiAgb3ZlcmxpbmVUaGlj
a25lc3M6ICdvdmVybGluZS10aGlja25lc3MnLFxuICBwYWludE9yZGVyOiAncGFpbnQtb3JkZXIn
LFxuICBwYW5vc2UxOiAncGFub3NlLTEnLFxuICBwYXRoTGVuZ3RoOiAncGF0aExlbmd0aCcsXG4g
IHBhdHRlcm5Db250ZW50VW5pdHM6ICdwYXR0ZXJuQ29udGVudFVuaXRzJyxcbiAgcGF0dGVyblRy
YW5zZm9ybTogJ3BhdHRlcm5UcmFuc2Zvcm0nLFxuICBwYXR0ZXJuVW5pdHM6ICdwYXR0ZXJuVW5p
dHMnLFxuICBwb2ludGVyRXZlbnRzOiAncG9pbnRlci1ldmVudHMnLFxuICBwb2ludHM6IDAsXG4g
IHBvaW50c0F0WDogJ3BvaW50c0F0WCcsXG4gIHBvaW50c0F0WTogJ3BvaW50c0F0WScsXG4gIHBv
aW50c0F0WjogJ3BvaW50c0F0WicsXG4gIHByZXNlcnZlQWxwaGE6ICdwcmVzZXJ2ZUFscGhhJyxc
biAgcHJlc2VydmVBc3BlY3RSYXRpbzogJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLFxuICBwcmltaXRp
dmVVbml0czogJ3ByaW1pdGl2ZVVuaXRzJyxcbiAgcjogMCxcbiAgcmFkaXVzOiAwLFxuICByZWZY
OiAncmVmWCcsXG4gIHJlZlk6ICdyZWZZJyxcbiAgcmVuZGVyaW5nSW50ZW50OiAncmVuZGVyaW5n
LWludGVudCcsXG4gIHJlcGVhdENvdW50OiAncmVwZWF0Q291bnQnLFxuICByZXBlYXREdXI6ICdy
ZXBlYXREdXInLFxuICByZXF1aXJlZEV4dGVuc2lvbnM6ICdyZXF1aXJlZEV4dGVuc2lvbnMnLFxu
ICByZXF1aXJlZEZlYXR1cmVzOiAncmVxdWlyZWRGZWF0dXJlcycsXG4gIHJlc3RhcnQ6IDAsXG4g
IHJlc3VsdDogMCxcbiAgcm90YXRlOiAwLFxuICByeDogMCxcbiAgcnk6IDAsXG4gIHNjYWxlOiAw
LFxuICBzZWVkOiAwLFxuICBzaGFwZVJlbmRlcmluZzogJ3NoYXBlLXJlbmRlcmluZycsXG4gIHNs
b3BlOiAwLFxuICBzcGFjaW5nOiAwLFxuICBzcGVjdWxhckNvbnN0YW50OiAnc3BlY3VsYXJDb25z
dGFudCcsXG4gIHNwZWN1bGFyRXhwb25lbnQ6ICdzcGVjdWxhckV4cG9uZW50JyxcbiAgc3BlZWQ6
IDAsXG4gIHNwcmVhZE1ldGhvZDogJ3NwcmVhZE1ldGhvZCcsXG4gIHN0YXJ0T2Zmc2V0OiAnc3Rh
cnRPZmZzZXQnLFxuICBzdGREZXZpYXRpb246ICdzdGREZXZpYXRpb24nLFxuICBzdGVtaDogMCxc
biAgc3RlbXY6IDAsXG4gIHN0aXRjaFRpbGVzOiAnc3RpdGNoVGlsZXMnLFxuICBzdG9wQ29sb3I6
ICdzdG9wLWNvbG9yJyxcbiAgc3RvcE9wYWNpdHk6ICdzdG9wLW9wYWNpdHknLFxuICBzdHJpa2V0
aHJvdWdoUG9zaXRpb246ICdzdHJpa2V0aHJvdWdoLXBvc2l0aW9uJyxcbiAgc3RyaWtldGhyb3Vn
aFRoaWNrbmVzczogJ3N0cmlrZXRocm91Z2gtdGhpY2tuZXNzJyxcbiAgc3RyaW5nOiAwLFxuICBz
dHJva2U6IDAsXG4gIHN0cm9rZURhc2hhcnJheTogJ3N0cm9rZS1kYXNoYXJyYXknLFxuICBzdHJv
a2VEYXNob2Zmc2V0OiAnc3Ryb2tlLWRhc2hvZmZzZXQnLFxuICBzdHJva2VMaW5lY2FwOiAnc3Ry
b2tlLWxpbmVjYXAnLFxuICBzdHJva2VMaW5lam9pbjogJ3N0cm9rZS1saW5lam9pbicsXG4gIHN0
cm9rZU1pdGVybGltaXQ6ICdzdHJva2UtbWl0ZXJsaW1pdCcsXG4gIHN0cm9rZU9wYWNpdHk6ICdz
dHJva2Utb3BhY2l0eScsXG4gIHN0cm9rZVdpZHRoOiAnc3Ryb2tlLXdpZHRoJyxcbiAgc3VyZmFj
ZVNjYWxlOiAnc3VyZmFjZVNjYWxlJyxcbiAgc3lzdGVtTGFuZ3VhZ2U6ICdzeXN0ZW1MYW5ndWFn
ZScsXG4gIHRhYmxlVmFsdWVzOiAndGFibGVWYWx1ZXMnLFxuICB0YXJnZXRYOiAndGFyZ2V0WCcs
XG4gIHRhcmdldFk6ICd0YXJnZXRZJyxcbiAgdGV4dEFuY2hvcjogJ3RleHQtYW5jaG9yJyxcbiAg
dGV4dERlY29yYXRpb246ICd0ZXh0LWRlY29yYXRpb24nLFxuICB0ZXh0UmVuZGVyaW5nOiAndGV4
dC1yZW5kZXJpbmcnLFxuICB0ZXh0TGVuZ3RoOiAndGV4dExlbmd0aCcsXG4gIHRvOiAwLFxuICB0
cmFuc2Zvcm06IDAsXG4gIHUxOiAwLFxuICB1MjogMCxcbiAgdW5kZXJsaW5lUG9zaXRpb246ICd1
bmRlcmxpbmUtcG9zaXRpb24nLFxuICB1bmRlcmxpbmVUaGlja25lc3M6ICd1bmRlcmxpbmUtdGhp
Y2tuZXNzJyxcbiAgdW5pY29kZTogMCxcbiAgdW5pY29kZUJpZGk6ICd1bmljb2RlLWJpZGknLFxu
ICB1bmljb2RlUmFuZ2U6ICd1bmljb2RlLXJhbmdlJyxcbiAgdW5pdHNQZXJFbTogJ3VuaXRzLXBl
ci1lbScsXG4gIHZBbHBoYWJldGljOiAndi1hbHBoYWJldGljJyxcbiAgdkhhbmdpbmc6ICd2LWhh
bmdpbmcnLFxuICB2SWRlb2dyYXBoaWM6ICd2LWlkZW9ncmFwaGljJyxcbiAgdk1hdGhlbWF0aWNh
bDogJ3YtbWF0aGVtYXRpY2FsJyxcbiAgdmFsdWVzOiAwLFxuICB2ZWN0b3JFZmZlY3Q6ICd2ZWN0
b3ItZWZmZWN0JyxcbiAgdmVyc2lvbjogMCxcbiAgdmVydEFkdlk6ICd2ZXJ0LWFkdi15JyxcbiAg
dmVydE9yaWdpblg6ICd2ZXJ0LW9yaWdpbi14JyxcbiAgdmVydE9yaWdpblk6ICd2ZXJ0LW9yaWdp
bi15JyxcbiAgdmlld0JveDogJ3ZpZXdCb3gnLFxuICB2aWV3VGFyZ2V0OiAndmlld1RhcmdldCcs
XG4gIHZpc2liaWxpdHk6IDAsXG4gIHdpZHRoczogMCxcbiAgd29yZFNwYWNpbmc6ICd3b3JkLXNw
YWNpbmcnLFxuICB3cml0aW5nTW9kZTogJ3dyaXRpbmctbW9kZScsXG4gIHg6IDAsXG4gIHhIZWln
aHQ6ICd4LWhlaWdodCcsXG4gIHgxOiAwLFxuICB4MjogMCxcbiAgeENoYW5uZWxTZWxlY3Rvcjog
J3hDaGFubmVsU2VsZWN0b3InLFxuICB4bGlua0FjdHVhdGU6ICd4bGluazphY3R1YXRlJyxcbiAg
eGxpbmtBcmNyb2xlOiAneGxpbms6YXJjcm9sZScsXG4gIHhsaW5rSHJlZjogJ3hsaW5rOmhyZWYn
LFxuICB4bGlua1JvbGU6ICd4bGluazpyb2xlJyxcbiAgeGxpbmtTaG93OiAneGxpbms6c2hvdycs
XG4gIHhsaW5rVGl0bGU6ICd4bGluazp0aXRsZScsXG4gIHhsaW5rVHlwZTogJ3hsaW5rOnR5cGUn
LFxuICB4bWxCYXNlOiAneG1sOmJhc2UnLFxuICB4bWxuczogMCxcbiAgeG1sbnNYbGluazogJ3ht
bG5zOnhsaW5rJyxcbiAgeG1sTGFuZzogJ3htbDpsYW5nJyxcbiAgeG1sU3BhY2U6ICd4bWw6c3Bh
Y2UnLFxuICB5OiAwLFxuICB5MTogMCxcbiAgeTI6IDAsXG4gIHlDaGFubmVsU2VsZWN0b3I6ICd5
Q2hhbm5lbFNlbGVjdG9yJyxcbiAgejogMCxcbiAgem9vbUFuZFBhbjogJ3pvb21BbmRQYW4nXG59
O1xuXG52YXIgU1ZHRE9NUHJvcGVydHlDb25maWcgPSB7XG4gIFByb3BlcnRpZXM6IHt9LFxuICBE
T01BdHRyaWJ1dGVOYW1lc3BhY2VzOiB7XG4gICAgeGxpbmtBY3R1YXRlOiBOUy54bGluayxcbiAg
ICB4bGlua0FyY3JvbGU6IE5TLnhsaW5rLFxuICAgIHhsaW5rSHJlZjogTlMueGxpbmssXG4gICAg
eGxpbmtSb2xlOiBOUy54bGluayxcbiAgICB4bGlua1Nob3c6IE5TLnhsaW5rLFxuICAgIHhsaW5r
VGl0bGU6IE5TLnhsaW5rLFxuICAgIHhsaW5rVHlwZTogTlMueGxpbmssXG4gICAgeG1sQmFzZTog
TlMueG1sLFxuICAgIHhtbExhbmc6IE5TLnhtbCxcbiAgICB4bWxTcGFjZTogTlMueG1sXG4gIH0s
XG4gIERPTUF0dHJpYnV0ZU5hbWVzOiB7fVxufTtcblxuT2JqZWN0LmtleXMoQVRUUlMpLmZvckVh
Y2goZnVuY3Rpb24gKGtleSkge1xuICBTVkdET01Qcm9wZXJ0eUNvbmZpZy5Qcm9wZXJ0aWVzW2tl
eV0gPSAwO1xuICBpZiAoQVRUUlNba2V5XSkge1xuICAgIFNWR0RPTVByb3BlcnR5Q29uZmlnLkRP
TUF0dHJpYnV0ZU5hbWVzW2tleV0gPSBBVFRSU1trZXldO1xuICB9XG59KTtcblxubW9kdWxlLmV4
cG9ydHMgPSBTVkdET01Qcm9wZXJ0eUNvbmZpZztcblxuLyoqKi8gfSksXG4vKiAxNzcgKi9cbi8q
KiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxu
XCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29r
LCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUg
aXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICog
TElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBB
biBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0
aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuXG5cbnZh
ciBFdmVudFByb3BhZ2F0b3JzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOSk7XG52YXIgRXhlY3V0
aW9uRW52aXJvbm1lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xudmFyIFJlYWN0RE9NQ29t
cG9uZW50VHJlZSA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG52YXIgUmVhY3RJbnB1dFNlbGVj
dGlvbiA9IF9fd2VicGFja19yZXF1aXJlX18oODApO1xudmFyIFN5bnRoZXRpY0V2ZW50ID0gX193
ZWJwYWNrX3JlcXVpcmVfXygxMSk7XG5cbnZhciBnZXRBY3RpdmVFbGVtZW50ID0gX193ZWJwYWNr
X3JlcXVpcmVfXyg4MSk7XG52YXIgaXNUZXh0SW5wdXRFbGVtZW50ID0gX193ZWJwYWNrX3JlcXVp
cmVfXyg2NSk7XG52YXIgc2hhbGxvd0VxdWFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Mik7XG5c
bnZhciBza2lwU2VsZWN0aW9uQ2hhbmdlRXZlbnQgPSBFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5V
c2VET00gJiYgJ2RvY3VtZW50TW9kZScgaW4gZG9jdW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRN
b2RlIDw9IDExO1xuXG52YXIgZXZlbnRUeXBlcyA9IHtcbiAgc2VsZWN0OiB7XG4gICAgcGhhc2Vk
UmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6ICdvblNlbGVjdCcsXG4gICAgICBj
YXB0dXJlZDogJ29uU2VsZWN0Q2FwdHVyZSdcbiAgICB9LFxuICAgIGRlcGVuZGVuY2llczogWyd0
b3BCbHVyJywgJ3RvcENvbnRleHRNZW51JywgJ3RvcEZvY3VzJywgJ3RvcEtleURvd24nLCAndG9w
S2V5VXAnLCAndG9wTW91c2VEb3duJywgJ3RvcE1vdXNlVXAnLCAndG9wU2VsZWN0aW9uQ2hhbmdl
J11cbiAgfVxufTtcblxudmFyIGFjdGl2ZUVsZW1lbnQgPSBudWxsO1xudmFyIGFjdGl2ZUVsZW1l
bnRJbnN0ID0gbnVsbDtcbnZhciBsYXN0U2VsZWN0aW9uID0gbnVsbDtcbnZhciBtb3VzZURvd24g
PSBmYWxzZTtcblxuLy8gVHJhY2sgd2hldGhlciBhIGxpc3RlbmVyIGV4aXN0cyBmb3IgdGhpcyBw
bHVnaW4uIElmIG5vbmUgZXhpc3QsIHdlIGRvXG4vLyBub3QgZXh0cmFjdCBldmVudHMuIFNlZSAj
MzYzOS5cbnZhciBoYXNMaXN0ZW5lciA9IGZhbHNlO1xuXG4vKipcbiAqIEdldCBhbiBvYmplY3Qg
d2hpY2ggaXMgYSB1bmlxdWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9u
LlxuICpcbiAqIFRoZSByZXR1cm4gdmFsdWUgd2lsbCBub3QgYmUgY29uc2lzdGVudCBhY3Jvc3Mg
bm9kZXMgb3IgYnJvd3NlcnMsIGJ1dFxuICogdHdvIGlkZW50aWNhbCBzZWxlY3Rpb25zIG9uIHRo
ZSBzYW1lIG5vZGUgd2lsbCByZXR1cm4gaWRlbnRpY2FsIG9iamVjdHMuXG4gKlxuICogQHBhcmFt
IHtET01FbGVtZW50fSBub2RlXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGdl
dFNlbGVjdGlvbihub2RlKSB7XG4gIGlmICgnc2VsZWN0aW9uU3RhcnQnIGluIG5vZGUgJiYgUmVh
Y3RJbnB1dFNlbGVjdGlvbi5oYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMobm9kZSkpIHtcbiAgICBy
ZXR1cm4ge1xuICAgICAgc3RhcnQ6IG5vZGUuc2VsZWN0aW9uU3RhcnQsXG4gICAgICBlbmQ6IG5v
ZGUuc2VsZWN0aW9uRW5kXG4gICAgfTtcbiAgfSBlbHNlIGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9u
KSB7XG4gICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICByZXR1
cm4ge1xuICAgICAgYW5jaG9yTm9kZTogc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgICBhbmNo
b3JPZmZzZXQ6IHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICBmb2N1c05vZGU6IHNlbGVj
dGlvbi5mb2N1c05vZGUsXG4gICAgICBmb2N1c09mZnNldDogc2VsZWN0aW9uLmZvY3VzT2Zmc2V0
XG4gICAgfTtcbiAgfSBlbHNlIGlmIChkb2N1bWVudC5zZWxlY3Rpb24pIHtcbiAgICB2YXIgcmFu
Z2UgPSBkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTtcbiAgICByZXR1cm4ge1xuICAg
ICAgcGFyZW50RWxlbWVudDogcmFuZ2UucGFyZW50RWxlbWVudCgpLFxuICAgICAgdGV4dDogcmFu
Z2UudGV4dCxcbiAgICAgIHRvcDogcmFuZ2UuYm91bmRpbmdUb3AsXG4gICAgICBsZWZ0OiByYW5n
ZS5ib3VuZGluZ0xlZnRcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogUG9sbCBzZWxlY3Rpb24g
dG8gc2VlIHdoZXRoZXIgaXQncyBjaGFuZ2VkLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRp
dmVFdmVudFxuICogQHJldHVybiB7P1N5bnRoZXRpY0V2ZW50fVxuICovXG5mdW5jdGlvbiBjb25z
dHJ1Y3RTZWxlY3RFdmVudChuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgLy8g
RW5zdXJlIHdlIGhhdmUgdGhlIHJpZ2h0IGVsZW1lbnQsIGFuZCB0aGF0IHRoZSB1c2VyIGlzIG5v
dCBkcmFnZ2luZyBhXG4gIC8vIHNlbGVjdGlvbiAodGhpcyBtYXRjaGVzIG5hdGl2ZSBgc2VsZWN0
YCBldmVudCBiZWhhdmlvcikuIEluIEhUTUw1LCBzZWxlY3RcbiAgLy8gZmlyZXMgb25seSBvbiBp
bnB1dCBhbmQgdGV4dGFyZWEgdGh1cyBpZiB0aGVyZSdzIG5vIGZvY3VzZWQgZWxlbWVudCB3ZVxu
ICAvLyB3b24ndCBkaXNwYXRjaC5cbiAgaWYgKG1vdXNlRG93biB8fCBhY3RpdmVFbGVtZW50ID09
IG51bGwgfHwgYWN0aXZlRWxlbWVudCAhPT0gZ2V0QWN0aXZlRWxlbWVudCgpKSB7XG4gICAgcmV0
dXJuIG51bGw7XG4gIH1cblxuICAvLyBPbmx5IGZpcmUgd2hlbiBzZWxlY3Rpb24gaGFzIGFjdHVh
bGx5IGNoYW5nZWQuXG4gIHZhciBjdXJyZW50U2VsZWN0aW9uID0gZ2V0U2VsZWN0aW9uKGFjdGl2
ZUVsZW1lbnQpO1xuICBpZiAoIWxhc3RTZWxlY3Rpb24gfHwgIXNoYWxsb3dFcXVhbChsYXN0U2Vs
ZWN0aW9uLCBjdXJyZW50U2VsZWN0aW9uKSkge1xuICAgIGxhc3RTZWxlY3Rpb24gPSBjdXJyZW50
U2VsZWN0aW9uO1xuXG4gICAgdmFyIHN5bnRoZXRpY0V2ZW50ID0gU3ludGhldGljRXZlbnQuZ2V0
UG9vbGVkKGV2ZW50VHlwZXMuc2VsZWN0LCBhY3RpdmVFbGVtZW50SW5zdCwgbmF0aXZlRXZlbnQs
IG5hdGl2ZUV2ZW50VGFyZ2V0KTtcblxuICAgIHN5bnRoZXRpY0V2ZW50LnR5cGUgPSAnc2VsZWN0
JztcbiAgICBzeW50aGV0aWNFdmVudC50YXJnZXQgPSBhY3RpdmVFbGVtZW50O1xuXG4gICAgRXZl
bnRQcm9wYWdhdG9ycy5hY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzKHN5bnRoZXRpY0V2ZW50
KTtcblxuICAgIHJldHVybiBzeW50aGV0aWNFdmVudDtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xu
fVxuXG4vKipcbiAqIFRoaXMgcGx1Z2luIGNyZWF0ZXMgYW4gYG9uU2VsZWN0YCBldmVudCB0aGF0
IG5vcm1hbGl6ZXMgc2VsZWN0IGV2ZW50c1xuICogYWNyb3NzIGZvcm0gZWxlbWVudHMuXG4gKlxu
ICogU3VwcG9ydGVkIGVsZW1lbnRzIGFyZTpcbiAqIC0gaW5wdXQgKHNlZSBgaXNUZXh0SW5wdXRF
bGVtZW50YClcbiAqIC0gdGV4dGFyZWFcbiAqIC0gY29udGVudEVkaXRhYmxlXG4gKlxuICogVGhp
cyBkaWZmZXJzIGZyb20gbmF0aXZlIGJyb3dzZXIgaW1wbGVtZW50YXRpb25zIGluIHRoZSBmb2xs
b3dpbmcgd2F5czpcbiAqIC0gRmlyZXMgb24gY29udGVudEVkaXRhYmxlIGZpZWxkcyBhcyB3ZWxs
IGFzIGlucHV0cy5cbiAqIC0gRmlyZXMgZm9yIGNvbGxhcHNlZCBzZWxlY3Rpb24uXG4gKiAtIEZp
cmVzIGFmdGVyIHVzZXIgaW5wdXQuXG4gKi9cbnZhciBTZWxlY3RFdmVudFBsdWdpbiA9IHtcbiAg
ZXZlbnRUeXBlczogZXZlbnRUeXBlcyxcblxuICBleHRyYWN0RXZlbnRzOiBmdW5jdGlvbiAodG9w
TGV2ZWxUeXBlLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtc
biAgICBpZiAoIWhhc0xpc3RlbmVyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAg
ICB2YXIgdGFyZ2V0Tm9kZSA9IHRhcmdldEluc3QgPyBSZWFjdERPTUNvbXBvbmVudFRyZWUuZ2V0
Tm9kZUZyb21JbnN0YW5jZSh0YXJnZXRJbnN0KSA6IHdpbmRvdztcblxuICAgIHN3aXRjaCAodG9w
TGV2ZWxUeXBlKSB7XG4gICAgICAvLyBUcmFjayB0aGUgaW5wdXQgbm9kZSB0aGF0IGhhcyBmb2N1
cy5cbiAgICAgIGNhc2UgJ3RvcEZvY3VzJzpcbiAgICAgICAgaWYgKGlzVGV4dElucHV0RWxlbWVu
dCh0YXJnZXROb2RlKSB8fCB0YXJnZXROb2RlLmNvbnRlbnRFZGl0YWJsZSA9PT0gJ3RydWUnKSB7
XG4gICAgICAgICAgYWN0aXZlRWxlbWVudCA9IHRhcmdldE5vZGU7XG4gICAgICAgICAgYWN0aXZl
RWxlbWVudEluc3QgPSB0YXJnZXRJbnN0O1xuICAgICAgICAgIGxhc3RTZWxlY3Rpb24gPSBudWxs
O1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndG9wQmx1cic6XG4gICAg
ICAgIGFjdGl2ZUVsZW1lbnQgPSBudWxsO1xuICAgICAgICBhY3RpdmVFbGVtZW50SW5zdCA9IG51
bGw7XG4gICAgICAgIGxhc3RTZWxlY3Rpb24gPSBudWxsO1xuICAgICAgICBicmVhaztcbiAgICAg
IC8vIERvbid0IGZpcmUgdGhlIGV2ZW50IHdoaWxlIHRoZSB1c2VyIGlzIGRyYWdnaW5nLiBUaGlz
IG1hdGNoZXMgdGhlXG4gICAgICAvLyBzZW1hbnRpY3Mgb2YgdGhlIG5hdGl2ZSBzZWxlY3QgZXZl
bnQuXG4gICAgICBjYXNlICd0b3BNb3VzZURvd24nOlxuICAgICAgICBtb3VzZURvd24gPSB0cnVl
O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RvcENvbnRleHRNZW51JzpcbiAgICAgIGNh
c2UgJ3RvcE1vdXNlVXAnOlxuICAgICAgICBtb3VzZURvd24gPSBmYWxzZTtcbiAgICAgICAgcmV0
dXJuIGNvbnN0cnVjdFNlbGVjdEV2ZW50KG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7
XG4gICAgICAvLyBDaHJvbWUgYW5kIElFIGZpcmUgbm9uLXN0YW5kYXJkIGV2ZW50IHdoZW4gc2Vs
ZWN0aW9uIGlzIGNoYW5nZWQgKGFuZFxuICAgICAgLy8gc29tZXRpbWVzIHdoZW4gaXQgaGFzbid0
KS4gSUUncyBldmVudCBmaXJlcyBvdXQgb2Ygb3JkZXIgd2l0aCByZXNwZWN0XG4gICAgICAvLyB0
byBrZXkgYW5kIGlucHV0IGV2ZW50cyBvbiBkZWxldGlvbiwgc28gd2UgZGlzY2FyZCBpdC5cbiAg
ICAgIC8vXG4gICAgICAvLyBGaXJlZm94IGRvZXNuJ3Qgc3VwcG9ydCBzZWxlY3Rpb25jaGFuZ2Us
IHNvIGNoZWNrIHNlbGVjdGlvbiBzdGF0dXNcbiAgICAgIC8vIGFmdGVyIGVhY2gga2V5IGVudHJ5
LiBUaGUgc2VsZWN0aW9uIGNoYW5nZXMgYWZ0ZXIga2V5ZG93biBhbmQgYmVmb3JlXG4gICAgICAv
LyBrZXl1cCwgYnV0IHdlIGNoZWNrIG9uIGtleWRvd24gYXMgd2VsbCBpbiB0aGUgY2FzZSBvZiBo
b2xkaW5nIGRvd24gYVxuICAgICAgLy8ga2V5LCB3aGVuIG11bHRpcGxlIGtleWRvd24gZXZlbnRz
IGFyZSBmaXJlZCBidXQgb25seSBvbmUga2V5dXAgaXMuXG4gICAgICAvLyBUaGlzIGlzIGFsc28g
b3VyIGFwcHJvYWNoIGZvciBJRSBoYW5kbGluZywgZm9yIHRoZSByZWFzb24gYWJvdmUuXG4gICAg
ICBjYXNlICd0b3BTZWxlY3Rpb25DaGFuZ2UnOlxuICAgICAgICBpZiAoc2tpcFNlbGVjdGlvbkNo
YW5nZUV2ZW50KSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIC8vIGZhbGxz
IHRocm91Z2hcbiAgICAgIGNhc2UgJ3RvcEtleURvd24nOlxuICAgICAgY2FzZSAndG9wS2V5VXAn
OlxuICAgICAgICByZXR1cm4gY29uc3RydWN0U2VsZWN0RXZlbnQobmF0aXZlRXZlbnQsIG5hdGl2
ZUV2ZW50VGFyZ2V0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSxcblxuICBkaWRQ
dXRMaXN0ZW5lcjogZnVuY3Rpb24gKGluc3QsIHJlZ2lzdHJhdGlvbk5hbWUsIGxpc3RlbmVyKSB7
XG4gICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWUgPT09ICdvblNlbGVjdCcpIHtcbiAgICAgIGhhc0xp
c3RlbmVyID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gU2VsZWN0
RXZlbnRQbHVnaW47XG5cbi8qKiovIH0pLFxuLyogMTc4ICovXG4vKioqLyAoZnVuY3Rpb24obW9k
dWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xu
LyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJp
Z2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVy
IHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0
aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFu
dFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBp
biB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuXG5cbnZhciBfcHJvZEludmFy
aWFudCA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG5cbnZhciBFdmVudExpc3RlbmVyID0gX193
ZWJwYWNrX3JlcXVpcmVfXyg3OSk7XG52YXIgRXZlbnRQcm9wYWdhdG9ycyA9IF9fd2VicGFja19y
ZXF1aXJlX18oMTkpO1xudmFyIFJlYWN0RE9NQ29tcG9uZW50VHJlZSA9IF9fd2VicGFja19yZXF1
aXJlX18oNCk7XG52YXIgU3ludGhldGljQW5pbWF0aW9uRXZlbnQgPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKDE3OSk7XG52YXIgU3ludGhldGljQ2xpcGJvYXJkRXZlbnQgPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKDE4MCk7XG52YXIgU3ludGhldGljRXZlbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtc
bnZhciBTeW50aGV0aWNGb2N1c0V2ZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxODEpO1xudmFy
IFN5bnRoZXRpY0tleWJvYXJkRXZlbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4Mik7XG52YXIg
U3ludGhldGljTW91c2VFdmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oMjUpO1xudmFyIFN5bnRo
ZXRpY0RyYWdFdmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oMTg0KTtcbnZhciBTeW50aGV0aWNU
b3VjaEV2ZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxODUpO1xudmFyIFN5bnRoZXRpY1RyYW5z
aXRpb25FdmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oMTg2KTtcbnZhciBTeW50aGV0aWNVSUV2
ZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMSk7XG52YXIgU3ludGhldGljV2hlZWxFdmVudCA9
IF9fd2VicGFja19yZXF1aXJlX18oMTg3KTtcblxudmFyIGVtcHR5RnVuY3Rpb24gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKDYpO1xudmFyIGdldEV2ZW50Q2hhckNvZGUgPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKDQ3KTtcbnZhciBpbnZhcmlhbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG4vKipc
biAqIFR1cm5zXG4gKiBbJ2Fib3J0JywgLi4uXVxuICogaW50b1xuICogZXZlbnRUeXBlcyA9IHtc
biAqICAgJ2Fib3J0Jzoge1xuICogICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gKiAg
ICAgICBidWJibGVkOiAnb25BYm9ydCcsXG4gKiAgICAgICBjYXB0dXJlZDogJ29uQWJvcnRDYXB0
dXJlJyxcbiAqICAgICB9LFxuICogICAgIGRlcGVuZGVuY2llczogWyd0b3BBYm9ydCddLFxuICog
ICB9LFxuICogICAuLi5cbiAqIH07XG4gKiB0b3BMZXZlbEV2ZW50c1RvRGlzcGF0Y2hDb25maWcg
PSB7XG4gKiAgICd0b3BBYm9ydCc6IHsgc2FtZUNvbmZpZyB9XG4gKiB9O1xuICovXG52YXIgZXZl
bnRUeXBlcyA9IHt9O1xudmFyIHRvcExldmVsRXZlbnRzVG9EaXNwYXRjaENvbmZpZyA9IHt9O1xu
WydhYm9ydCcsICdhbmltYXRpb25FbmQnLCAnYW5pbWF0aW9uSXRlcmF0aW9uJywgJ2FuaW1hdGlv
blN0YXJ0JywgJ2JsdXInLCAnY2FuUGxheScsICdjYW5QbGF5VGhyb3VnaCcsICdjbGljaycsICdj
b250ZXh0TWVudScsICdjb3B5JywgJ2N1dCcsICdkb3VibGVDbGljaycsICdkcmFnJywgJ2RyYWdF
bmQnLCAnZHJhZ0VudGVyJywgJ2RyYWdFeGl0JywgJ2RyYWdMZWF2ZScsICdkcmFnT3ZlcicsICdk
cmFnU3RhcnQnLCAnZHJvcCcsICdkdXJhdGlvbkNoYW5nZScsICdlbXB0aWVkJywgJ2VuY3J5cHRl
ZCcsICdlbmRlZCcsICdlcnJvcicsICdmb2N1cycsICdpbnB1dCcsICdpbnZhbGlkJywgJ2tleURv
d24nLCAna2V5UHJlc3MnLCAna2V5VXAnLCAnbG9hZCcsICdsb2FkZWREYXRhJywgJ2xvYWRlZE1l
dGFkYXRhJywgJ2xvYWRTdGFydCcsICdtb3VzZURvd24nLCAnbW91c2VNb3ZlJywgJ21vdXNlT3V0
JywgJ21vdXNlT3ZlcicsICdtb3VzZVVwJywgJ3Bhc3RlJywgJ3BhdXNlJywgJ3BsYXknLCAncGxh
eWluZycsICdwcm9ncmVzcycsICdyYXRlQ2hhbmdlJywgJ3Jlc2V0JywgJ3Njcm9sbCcsICdzZWVr
ZWQnLCAnc2Vla2luZycsICdzdGFsbGVkJywgJ3N1Ym1pdCcsICdzdXNwZW5kJywgJ3RpbWVVcGRh
dGUnLCAndG91Y2hDYW5jZWwnLCAndG91Y2hFbmQnLCAndG91Y2hNb3ZlJywgJ3RvdWNoU3RhcnQn
LCAndHJhbnNpdGlvbkVuZCcsICd2b2x1bWVDaGFuZ2UnLCAnd2FpdGluZycsICd3aGVlbCddLmZv
ckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG4gIHZhciBjYXBpdGFsaXplZEV2ZW50ID0gZXZlbnRb
MF0udG9VcHBlckNhc2UoKSArIGV2ZW50LnNsaWNlKDEpO1xuICB2YXIgb25FdmVudCA9ICdvbicg
KyBjYXBpdGFsaXplZEV2ZW50O1xuICB2YXIgdG9wRXZlbnQgPSAndG9wJyArIGNhcGl0YWxpemVk
RXZlbnQ7XG5cbiAgdmFyIHR5cGUgPSB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtc
biAgICAgIGJ1YmJsZWQ6IG9uRXZlbnQsXG4gICAgICBjYXB0dXJlZDogb25FdmVudCArICdDYXB0
dXJlJ1xuICAgIH0sXG4gICAgZGVwZW5kZW5jaWVzOiBbdG9wRXZlbnRdXG4gIH07XG4gIGV2ZW50
VHlwZXNbZXZlbnRdID0gdHlwZTtcbiAgdG9wTGV2ZWxFdmVudHNUb0Rpc3BhdGNoQ29uZmlnW3Rv
cEV2ZW50XSA9IHR5cGU7XG59KTtcblxudmFyIG9uQ2xpY2tMaXN0ZW5lcnMgPSB7fTtcblxuZnVu
Y3Rpb24gZ2V0RGljdGlvbmFyeUtleShpbnN0KSB7XG4gIC8vIFByZXZlbnRzIFY4IHBlcmZvcm1h
bmNlIGlzc3VlOlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC83
MjMyXG4gIHJldHVybiAnLicgKyBpbnN0Ll9yb290Tm9kZUlEO1xufVxuXG5mdW5jdGlvbiBpc0lu
dGVyYWN0aXZlKHRhZykge1xuICByZXR1cm4gdGFnID09PSAnYnV0dG9uJyB8fCB0YWcgPT09ICdp
bnB1dCcgfHwgdGFnID09PSAnc2VsZWN0JyB8fCB0YWcgPT09ICd0ZXh0YXJlYSc7XG59XG5cbnZh
ciBTaW1wbGVFdmVudFBsdWdpbiA9IHtcbiAgZXZlbnRUeXBlczogZXZlbnRUeXBlcyxcblxuICBl
eHRyYWN0RXZlbnRzOiBmdW5jdGlvbiAodG9wTGV2ZWxUeXBlLCB0YXJnZXRJbnN0LCBuYXRpdmVF
dmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgICB2YXIgZGlzcGF0Y2hDb25maWcgPSB0b3BM
ZXZlbEV2ZW50c1RvRGlzcGF0Y2hDb25maWdbdG9wTGV2ZWxUeXBlXTtcbiAgICBpZiAoIWRpc3Bh
dGNoQ29uZmlnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFyIEV2ZW50Q29u
c3RydWN0b3I7XG4gICAgc3dpdGNoICh0b3BMZXZlbFR5cGUpIHtcbiAgICAgIGNhc2UgJ3RvcEFi
b3J0JzpcbiAgICAgIGNhc2UgJ3RvcENhblBsYXknOlxuICAgICAgY2FzZSAndG9wQ2FuUGxheVRo
cm91Z2gnOlxuICAgICAgY2FzZSAndG9wRHVyYXRpb25DaGFuZ2UnOlxuICAgICAgY2FzZSAndG9w
RW1wdGllZCc6XG4gICAgICBjYXNlICd0b3BFbmNyeXB0ZWQnOlxuICAgICAgY2FzZSAndG9wRW5k
ZWQnOlxuICAgICAgY2FzZSAndG9wRXJyb3InOlxuICAgICAgY2FzZSAndG9wSW5wdXQnOlxuICAg
ICAgY2FzZSAndG9wSW52YWxpZCc6XG4gICAgICBjYXNlICd0b3BMb2FkJzpcbiAgICAgIGNhc2Ug
J3RvcExvYWRlZERhdGEnOlxuICAgICAgY2FzZSAndG9wTG9hZGVkTWV0YWRhdGEnOlxuICAgICAg
Y2FzZSAndG9wTG9hZFN0YXJ0JzpcbiAgICAgIGNhc2UgJ3RvcFBhdXNlJzpcbiAgICAgIGNhc2Ug
J3RvcFBsYXknOlxuICAgICAgY2FzZSAndG9wUGxheWluZyc6XG4gICAgICBjYXNlICd0b3BQcm9n
cmVzcyc6XG4gICAgICBjYXNlICd0b3BSYXRlQ2hhbmdlJzpcbiAgICAgIGNhc2UgJ3RvcFJlc2V0
JzpcbiAgICAgIGNhc2UgJ3RvcFNlZWtlZCc6XG4gICAgICBjYXNlICd0b3BTZWVraW5nJzpcbiAg
ICAgIGNhc2UgJ3RvcFN0YWxsZWQnOlxuICAgICAgY2FzZSAndG9wU3VibWl0JzpcbiAgICAgIGNh
c2UgJ3RvcFN1c3BlbmQnOlxuICAgICAgY2FzZSAndG9wVGltZVVwZGF0ZSc6XG4gICAgICBjYXNl
ICd0b3BWb2x1bWVDaGFuZ2UnOlxuICAgICAgY2FzZSAndG9wV2FpdGluZyc6XG4gICAgICAgIC8v
IEhUTUwgRXZlbnRzXG4gICAgICAgIC8vIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUv
aW5kZXguaHRtbCNldmVudHMtMFxuICAgICAgICBFdmVudENvbnN0cnVjdG9yID0gU3ludGhldGlj
RXZlbnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndG9wS2V5UHJlc3MnOlxuICAgICAg
ICAvLyBGaXJlZm94IGNyZWF0ZXMgYSBrZXlwcmVzcyBldmVudCBmb3IgZnVuY3Rpb24ga2V5cyB0
b28uIFRoaXMgcmVtb3Zlc1xuICAgICAgICAvLyB0aGUgdW53YW50ZWQga2V5cHJlc3MgZXZlbnRz
LiBFbnRlciBpcyBob3dldmVyIGJvdGggcHJpbnRhYmxlIGFuZFxuICAgICAgICAvLyBub24tcHJp
bnRhYmxlLiBPbmUgd291bGQgZXhwZWN0IFRhYiB0byBiZSBhcyB3ZWxsIChidXQgaXQgaXNuJ3Qp
LlxuICAgICAgICBpZiAoZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVudCkgPT09IDApIHtcbiAg
ICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgLyogZmFsbHMgdGhyb3VnaCAq
L1xuICAgICAgY2FzZSAndG9wS2V5RG93bic6XG4gICAgICBjYXNlICd0b3BLZXlVcCc6XG4gICAg
ICAgIEV2ZW50Q29uc3RydWN0b3IgPSBTeW50aGV0aWNLZXlib2FyZEV2ZW50O1xuICAgICAgICBi
cmVhaztcbiAgICAgIGNhc2UgJ3RvcEJsdXInOlxuICAgICAgY2FzZSAndG9wRm9jdXMnOlxuICAg
ICAgICBFdmVudENvbnN0cnVjdG9yID0gU3ludGhldGljRm9jdXNFdmVudDtcbiAgICAgICAgYnJl
YWs7XG4gICAgICBjYXNlICd0b3BDbGljayc6XG4gICAgICAgIC8vIEZpcmVmb3ggY3JlYXRlcyBh
IGNsaWNrIGV2ZW50IG9uIHJpZ2h0IG1vdXNlIGNsaWNrcy4gVGhpcyByZW1vdmVzIHRoZVxuICAg
ICAgICAvLyB1bndhbnRlZCBjbGljayBldmVudHMuXG4gICAgICAgIGlmIChuYXRpdmVFdmVudC5i
dXR0b24gPT09IDIpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAg
LyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgY2FzZSAndG9wRG91YmxlQ2xpY2snOlxuICAgICAg
Y2FzZSAndG9wTW91c2VEb3duJzpcbiAgICAgIGNhc2UgJ3RvcE1vdXNlTW92ZSc6XG4gICAgICBj
YXNlICd0b3BNb3VzZVVwJzpcbiAgICAgIC8vIFRPRE86IERpc2FibGVkIGVsZW1lbnRzIHNob3Vs
ZCBub3QgcmVzcG9uZCB0byBtb3VzZSBldmVudHNcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9c
biAgICAgIGNhc2UgJ3RvcE1vdXNlT3V0JzpcbiAgICAgIGNhc2UgJ3RvcE1vdXNlT3Zlcic6XG4g
ICAgICBjYXNlICd0b3BDb250ZXh0TWVudSc6XG4gICAgICAgIEV2ZW50Q29uc3RydWN0b3IgPSBT
eW50aGV0aWNNb3VzZUV2ZW50O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RvcERyYWcn
OlxuICAgICAgY2FzZSAndG9wRHJhZ0VuZCc6XG4gICAgICBjYXNlICd0b3BEcmFnRW50ZXInOlxu
ICAgICAgY2FzZSAndG9wRHJhZ0V4aXQnOlxuICAgICAgY2FzZSAndG9wRHJhZ0xlYXZlJzpcbiAg
ICAgIGNhc2UgJ3RvcERyYWdPdmVyJzpcbiAgICAgIGNhc2UgJ3RvcERyYWdTdGFydCc6XG4gICAg
ICBjYXNlICd0b3BEcm9wJzpcbiAgICAgICAgRXZlbnRDb25zdHJ1Y3RvciA9IFN5bnRoZXRpY0Ry
YWdFdmVudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0b3BUb3VjaENhbmNlbCc6XG4g
ICAgICBjYXNlICd0b3BUb3VjaEVuZCc6XG4gICAgICBjYXNlICd0b3BUb3VjaE1vdmUnOlxuICAg
ICAgY2FzZSAndG9wVG91Y2hTdGFydCc6XG4gICAgICAgIEV2ZW50Q29uc3RydWN0b3IgPSBTeW50
aGV0aWNUb3VjaEV2ZW50O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RvcEFuaW1hdGlv
bkVuZCc6XG4gICAgICBjYXNlICd0b3BBbmltYXRpb25JdGVyYXRpb24nOlxuICAgICAgY2FzZSAn
dG9wQW5pbWF0aW9uU3RhcnQnOlxuICAgICAgICBFdmVudENvbnN0cnVjdG9yID0gU3ludGhldGlj
QW5pbWF0aW9uRXZlbnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndG9wVHJhbnNpdGlv
bkVuZCc6XG4gICAgICAgIEV2ZW50Q29uc3RydWN0b3IgPSBTeW50aGV0aWNUcmFuc2l0aW9uRXZl
bnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndG9wU2Nyb2xsJzpcbiAgICAgICAgRXZl
bnRDb25zdHJ1Y3RvciA9IFN5bnRoZXRpY1VJRXZlbnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAg
Y2FzZSAndG9wV2hlZWwnOlxuICAgICAgICBFdmVudENvbnN0cnVjdG9yID0gU3ludGhldGljV2hl
ZWxFdmVudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0b3BDb3B5JzpcbiAgICAgIGNh
c2UgJ3RvcEN1dCc6XG4gICAgICBjYXNlICd0b3BQYXN0ZSc6XG4gICAgICAgIEV2ZW50Q29uc3Ry
dWN0b3IgPSBTeW50aGV0aWNDbGlwYm9hcmRFdmVudDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxu
ICAgICFFdmVudENvbnN0cnVjdG9yID8gIGZhbHNlID8gaW52YXJpYW50KGZhbHNlLCAnU2ltcGxl
RXZlbnRQbHVnaW46IFVuaGFuZGxlZCBldmVudCB0eXBlLCBgJXNgLicsIHRvcExldmVsVHlwZSkg
OiBfcHJvZEludmFyaWFudCgnODYnLCB0b3BMZXZlbFR5cGUpIDogdm9pZCAwO1xuICAgIHZhciBl
dmVudCA9IEV2ZW50Q29uc3RydWN0b3IuZ2V0UG9vbGVkKGRpc3BhdGNoQ29uZmlnLCB0YXJnZXRJ
bnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIEV2ZW50UHJvcGFnYXRv
cnMuYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlcyhldmVudCk7XG4gICAgcmV0dXJuIGV2ZW50
O1xuICB9LFxuXG4gIGRpZFB1dExpc3RlbmVyOiBmdW5jdGlvbiAoaW5zdCwgcmVnaXN0cmF0aW9u
TmFtZSwgbGlzdGVuZXIpIHtcbiAgICAvLyBNb2JpbGUgU2FmYXJpIGRvZXMgbm90IGZpcmUgcHJv
cGVybHkgYnViYmxlIGNsaWNrIGV2ZW50cyBvblxuICAgIC8vIG5vbi1pbnRlcmFjdGl2ZSBlbGVt
ZW50cywgd2hpY2ggbWVhbnMgZGVsZWdhdGVkIGNsaWNrIGxpc3RlbmVycyBkbyBub3RcbiAgICAv
LyBmaXJlLiBUaGUgd29ya2Fyb3VuZCBmb3IgdGhpcyBidWcgaW52b2x2ZXMgYXR0YWNoaW5nIGFu
IGVtcHR5IGNsaWNrXG4gICAgLy8gbGlzdGVuZXIgb24gdGhlIHRhcmdldCBub2RlLlxuICAgIC8v
IGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvYmxvZy9hcmNoaXZlcy8yMDEwLzA5L2NsaWNrX2V2
ZW50X2RlbC5odG1sXG4gICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWUgPT09ICdvbkNsaWNrJyAmJiAh
aXNJbnRlcmFjdGl2ZShpbnN0Ll90YWcpKSB7XG4gICAgICB2YXIga2V5ID0gZ2V0RGljdGlvbmFy
eUtleShpbnN0KTtcbiAgICAgIHZhciBub2RlID0gUmVhY3RET01Db21wb25lbnRUcmVlLmdldE5v
ZGVGcm9tSW5zdGFuY2UoaW5zdCk7XG4gICAgICBpZiAoIW9uQ2xpY2tMaXN0ZW5lcnNba2V5XSkg
e1xuICAgICAgICBvbkNsaWNrTGlzdGVuZXJzW2tleV0gPSBFdmVudExpc3RlbmVyLmxpc3Rlbihu
b2RlLCAnY2xpY2snLCBlbXB0eUZ1bmN0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAg
d2lsbERlbGV0ZUxpc3RlbmVyOiBmdW5jdGlvbiAoaW5zdCwgcmVnaXN0cmF0aW9uTmFtZSkge1xu
ICAgIGlmIChyZWdpc3RyYXRpb25OYW1lID09PSAnb25DbGljaycgJiYgIWlzSW50ZXJhY3RpdmUo
aW5zdC5fdGFnKSkge1xuICAgICAgdmFyIGtleSA9IGdldERpY3Rpb25hcnlLZXkoaW5zdCk7XG4g
ICAgICBvbkNsaWNrTGlzdGVuZXJzW2tleV0ucmVtb3ZlKCk7XG4gICAgICBkZWxldGUgb25DbGlj
a0xpc3RlbmVyc1trZXldO1xuICAgIH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBTaW1w
bGVFdmVudFBsdWdpbjtcblxuLyoqKi8gfSksXG4vKiAxNzkgKi9cbi8qKiovIChmdW5jdGlvbiht
b2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7
XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwg
cmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5k
ZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdy
YW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxl
IGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuXG5cbnZhciBTeW50aGV0aWNFdmVu
dCA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRc
biAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1hbmltYXRpb25zLyNBbmltYXRpb25F
dmVudC1pbnRlcmZhY2VcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4t
VVMvZG9jcy9XZWIvQVBJL0FuaW1hdGlvbkV2ZW50XG4gKi9cbnZhciBBbmltYXRpb25FdmVudElu
dGVyZmFjZSA9IHtcbiAgYW5pbWF0aW9uTmFtZTogbnVsbCxcbiAgZWxhcHNlZFRpbWU6IG51bGws
XG4gIHBzZXVkb0VsZW1lbnQ6IG51bGxcbn07XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGRp
c3BhdGNoQ29uZmlnIENvbmZpZ3VyYXRpb24gdXNlZCB0byBkaXNwYXRjaCB0aGlzIGV2ZW50Llxu
ICogQHBhcmFtIHtzdHJpbmd9IGRpc3BhdGNoTWFya2VyIE1hcmtlciBpZGVudGlmeWluZyB0aGUg
ZXZlbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93
c2VyIGV2ZW50LlxuICogQGV4dGVuZHMge1N5bnRoZXRpY0V2ZW50fVxuICovXG5mdW5jdGlvbiBT
eW50aGV0aWNBbmltYXRpb25FdmVudChkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5h
dGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICByZXR1cm4gU3ludGhldGljRXZlbnQu
Y2FsbCh0aGlzLCBkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50LCBu
YXRpdmVFdmVudFRhcmdldCk7XG59XG5cblN5bnRoZXRpY0V2ZW50LmF1Z21lbnRDbGFzcyhTeW50
aGV0aWNBbmltYXRpb25FdmVudCwgQW5pbWF0aW9uRXZlbnRJbnRlcmZhY2UpO1xuXG5tb2R1bGUu
ZXhwb3J0cyA9IFN5bnRoZXRpY0FuaW1hdGlvbkV2ZW50O1xuXG4vKioqLyB9KSxcbi8qIDE4MCAq
L1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykg
e1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFj
ZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2Ug
Y29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhl
XG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRy
ZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5k
IGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG5c
blxudmFyIFN5bnRoZXRpY0V2ZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XG5cbi8qKlxu
ICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9jbGlwYm9h
cmQtYXBpcy9cbiAqL1xudmFyIENsaXBib2FyZEV2ZW50SW50ZXJmYWNlID0ge1xuICBjbGlwYm9h
cmREYXRhOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gJ2NsaXBib2FyZERhdGEnIGlu
IGV2ZW50ID8gZXZlbnQuY2xpcGJvYXJkRGF0YSA6IHdpbmRvdy5jbGlwYm9hcmREYXRhO1xuICB9
XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkaXNwYXRjaENvbmZpZyBDb25maWd1cmF0
aW9uIHVzZWQgdG8gZGlzcGF0Y2ggdGhpcyBldmVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXNw
YXRjaE1hcmtlciBNYXJrZXIgaWRlbnRpZnlpbmcgdGhlIGV2ZW50IHRhcmdldC5cbiAqIEBwYXJh
bSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEBleHRlbmRz
IHtTeW50aGV0aWNVSUV2ZW50fVxuICovXG5mdW5jdGlvbiBTeW50aGV0aWNDbGlwYm9hcmRFdmVu
dChkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVu
dFRhcmdldCkge1xuICByZXR1cm4gU3ludGhldGljRXZlbnQuY2FsbCh0aGlzLCBkaXNwYXRjaENv
bmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG59
XG5cblN5bnRoZXRpY0V2ZW50LmF1Z21lbnRDbGFzcyhTeW50aGV0aWNDbGlwYm9hcmRFdmVudCwg
Q2xpcGJvYXJkRXZlbnRJbnRlcmZhY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bnRoZXRpY0Ns
aXBib2FyZEV2ZW50O1xuXG4vKioqLyB9KSxcbi8qIDE4MSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtc
bi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRl
ciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4g
dGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3Jh
bnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUg
aW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG5cblxudmFyIFN5bnRoZXRpY1VJRXZl
bnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTtcblxuLyoqXG4gKiBAaW50ZXJmYWNlIEZvY3Vz
RXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xu
ICovXG52YXIgRm9jdXNFdmVudEludGVyZmFjZSA9IHtcbiAgcmVsYXRlZFRhcmdldDogbnVsbFxu
fTtcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZGlzcGF0Y2hDb25maWcgQ29uZmlndXJhdGlv
biB1c2VkIHRvIGRpc3BhdGNoIHRoaXMgZXZlbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlzcGF0
Y2hNYXJrZXIgTWFya2VyIGlkZW50aWZ5aW5nIHRoZSBldmVudCB0YXJnZXQuXG4gKiBAcGFyYW0g
e29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAZXh0ZW5kcyB7
U3ludGhldGljVUlFdmVudH1cbiAqL1xuZnVuY3Rpb24gU3ludGhldGljRm9jdXNFdmVudChkaXNw
YXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdl
dCkge1xuICByZXR1cm4gU3ludGhldGljVUlFdmVudC5jYWxsKHRoaXMsIGRpc3BhdGNoQ29uZmln
LCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbn1cblxu
U3ludGhldGljVUlFdmVudC5hdWdtZW50Q2xhc3MoU3ludGhldGljRm9jdXNFdmVudCwgRm9jdXNF
dmVudEludGVyZmFjZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ludGhldGljRm9jdXNFdmVudDtc
blxuLyoqKi8gfSksXG4vKiAxODIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMs
IF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIENvcHly
aWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVk
LlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHls
ZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVj
dG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRl
bnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRp
cmVjdG9yeS5cbiAqXG4gKi9cblxuXG5cbnZhciBTeW50aGV0aWNVSUV2ZW50ID0gX193ZWJwYWNr
X3JlcXVpcmVfXygyMSk7XG5cbnZhciBnZXRFdmVudENoYXJDb2RlID0gX193ZWJwYWNrX3JlcXVp
cmVfXyg0Nyk7XG52YXIgZ2V0RXZlbnRLZXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4Myk7XG52
YXIgZ2V0RXZlbnRNb2RpZmllclN0YXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNik7XG5cbi8q
KlxuICogQGludGVyZmFjZSBLZXlib2FyZEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3Jn
L1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xudmFyIEtleWJvYXJkRXZlbnRJbnRlcmZhY2Ug
PSB7XG4gIGtleTogZ2V0RXZlbnRLZXksXG4gIGxvY2F0aW9uOiBudWxsLFxuICBjdHJsS2V5OiBu
dWxsLFxuICBzaGlmdEtleTogbnVsbCxcbiAgYWx0S2V5OiBudWxsLFxuICBtZXRhS2V5OiBudWxs
LFxuICByZXBlYXQ6IG51bGwsXG4gIGxvY2FsZTogbnVsbCxcbiAgZ2V0TW9kaWZpZXJTdGF0ZTog
Z2V0RXZlbnRNb2RpZmllclN0YXRlLFxuICAvLyBMZWdhY3kgSW50ZXJmYWNlXG4gIGNoYXJDb2Rl
OiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAvLyBgY2hhckNvZGVgIGlzIHRoZSByZXN1bHQgb2Yg
YSBLZXlQcmVzcyBldmVudCBhbmQgcmVwcmVzZW50cyB0aGUgdmFsdWUgb2ZcbiAgICAvLyB0aGUg
YWN0dWFsIHByaW50YWJsZSBjaGFyYWN0ZXIuXG5cbiAgICAvLyBLZXlQcmVzcyBpcyBkZXByZWNh
dGVkLCBidXQgaXRzIHJlcGxhY2VtZW50IGlzIG5vdCB5ZXQgZmluYWwgYW5kIG5vdFxuICAgIC8v
IGltcGxlbWVudGVkIGluIGFueSBtYWpvciBicm93c2VyLiBPbmx5IEtleVByZXNzIGhhcyBjaGFy
Q29kZS5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleXByZXNzJykge1xuICAgICAgcmV0dXJu
IGdldEV2ZW50Q2hhckNvZGUoZXZlbnQpO1xuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfSxcbiAg
a2V5Q29kZTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgLy8gYGtleUNvZGVgIGlzIHRoZSByZXN1
bHQgb2YgYSBLZXlEb3duL1VwIGV2ZW50IGFuZCByZXByZXNlbnRzIHRoZSB2YWx1ZSBvZlxuICAg
IC8vIHBoeXNpY2FsIGtleWJvYXJkIGtleS5cblxuICAgIC8vIFRoZSBhY3R1YWwgbWVhbmluZyBv
ZiB0aGUgdmFsdWUgZGVwZW5kcyBvbiB0aGUgdXNlcnMnIGtleWJvYXJkIGxheW91dFxuICAgIC8v
IHdoaWNoIGNhbm5vdCBiZSBkZXRlY3RlZC4gQXNzdW1pbmcgdGhhdCBpdCBpcyBhIFVTIGtleWJv
YXJkIGxheW91dFxuICAgIC8vIHByb3ZpZGVzIGEgc3VycHJpc2luZ2x5IGFjY3VyYXRlIG1hcHBp
bmcgZm9yIFVTIGFuZCBFdXJvcGVhbiB1c2Vycy5cbiAgICAvLyBEdWUgdG8gdGhpcywgaXQgaXMg
bGVmdCB0byB0aGUgdXNlciB0byBpbXBsZW1lbnQgYXQgdGhpcyB0aW1lLlxuICAgIGlmIChldmVu
dC50eXBlID09PSAna2V5ZG93bicgfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJykge1xuICAgICAg
cmV0dXJuIGV2ZW50LmtleUNvZGU7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9LFxuICB3aGlj
aDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgLy8gYHdoaWNoYCBpcyBhbiBhbGlhcyBmb3IgZWl0
aGVyIGBrZXlDb2RlYCBvciBgY2hhckNvZGVgIGRlcGVuZGluZyBvbiB0aGVcbiAgICAvLyB0eXBl
IG9mIHRoZSBldmVudC5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleXByZXNzJykge1xuICAg
ICAgcmV0dXJuIGdldEV2ZW50Q2hhckNvZGUoZXZlbnQpO1xuICAgIH1cbiAgICBpZiAoZXZlbnQu
dHlwZSA9PT0gJ2tleWRvd24nIHx8IGV2ZW50LnR5cGUgPT09ICdrZXl1cCcpIHtcbiAgICAgIHJl
dHVybiBldmVudC5rZXlDb2RlO1xuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfVxufTtcblxuLyoq
XG4gKiBAcGFyYW0ge29iamVjdH0gZGlzcGF0Y2hDb25maWcgQ29uZmlndXJhdGlvbiB1c2VkIHRv
IGRpc3BhdGNoIHRoaXMgZXZlbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlzcGF0Y2hNYXJrZXIg
TWFya2VyIGlkZW50aWZ5aW5nIHRoZSBldmVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge29iamVjdH0g
bmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAZXh0ZW5kcyB7U3ludGhldGlj
VUlFdmVudH1cbiAqL1xuZnVuY3Rpb24gU3ludGhldGljS2V5Ym9hcmRFdmVudChkaXNwYXRjaENv
bmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xu
ICByZXR1cm4gU3ludGhldGljVUlFdmVudC5jYWxsKHRoaXMsIGRpc3BhdGNoQ29uZmlnLCBkaXNw
YXRjaE1hcmtlciwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbn1cblxuU3ludGhl
dGljVUlFdmVudC5hdWdtZW50Q2xhc3MoU3ludGhldGljS2V5Ym9hcmRFdmVudCwgS2V5Ym9hcmRF
dmVudEludGVyZmFjZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ludGhldGljS2V5Ym9hcmRFdmVu
dDtcblxuLyoqKi8gfSksXG4vKiAxODMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9y
dHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIENv
cHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1z
dHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRp
cmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBw
YXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1l
IGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuXG5cbnZhciBnZXRFdmVudENoYXJDb2RlID0gX193ZWJw
YWNrX3JlcXVpcmVfXyg0Nyk7XG5cbi8qKlxuICogTm9ybWFsaXphdGlvbiBvZiBkZXByZWNhdGVk
IEhUTUw1IGBrZXlgIHZhbHVlc1xuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9y
Zy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudCNLZXlfbmFtZXNcbiAqL1xudmFyIG5v
cm1hbGl6ZUtleSA9IHtcbiAgRXNjOiAnRXNjYXBlJyxcbiAgU3BhY2ViYXI6ICcgJyxcbiAgTGVm
dDogJ0Fycm93TGVmdCcsXG4gIFVwOiAnQXJyb3dVcCcsXG4gIFJpZ2h0OiAnQXJyb3dSaWdodCcs
XG4gIERvd246ICdBcnJvd0Rvd24nLFxuICBEZWw6ICdEZWxldGUnLFxuICBXaW46ICdPUycsXG4g
IE1lbnU6ICdDb250ZXh0TWVudScsXG4gIEFwcHM6ICdDb250ZXh0TWVudScsXG4gIFNjcm9sbDog
J1Njcm9sbExvY2snLFxuICBNb3pQcmludGFibGVLZXk6ICdVbmlkZW50aWZpZWQnXG59O1xuXG4v
KipcbiAqIFRyYW5zbGF0aW9uIGZyb20gbGVnYWN5IGBrZXlDb2RlYCB0byBIVE1MNSBga2V5YFxu
ICogT25seSBzcGVjaWFsIGtleXMgc3VwcG9ydGVkLCBhbGwgb3RoZXJzIGRlcGVuZCBvbiBrZXli
b2FyZCBsYXlvdXQgb3IgYnJvd3NlclxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxh
Lm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudCNLZXlfbmFtZXNcbiAqL1xudmFy
IHRyYW5zbGF0ZVRvS2V5ID0ge1xuICA4OiAnQmFja3NwYWNlJyxcbiAgOTogJ1RhYicsXG4gIDEy
OiAnQ2xlYXInLFxuICAxMzogJ0VudGVyJyxcbiAgMTY6ICdTaGlmdCcsXG4gIDE3OiAnQ29udHJv
bCcsXG4gIDE4OiAnQWx0JyxcbiAgMTk6ICdQYXVzZScsXG4gIDIwOiAnQ2Fwc0xvY2snLFxuICAy
NzogJ0VzY2FwZScsXG4gIDMyOiAnICcsXG4gIDMzOiAnUGFnZVVwJyxcbiAgMzQ6ICdQYWdlRG93
bicsXG4gIDM1OiAnRW5kJyxcbiAgMzY6ICdIb21lJyxcbiAgMzc6ICdBcnJvd0xlZnQnLFxuICAz
ODogJ0Fycm93VXAnLFxuICAzOTogJ0Fycm93UmlnaHQnLFxuICA0MDogJ0Fycm93RG93bicsXG4g
IDQ1OiAnSW5zZXJ0JyxcbiAgNDY6ICdEZWxldGUnLFxuICAxMTI6ICdGMScsXG4gIDExMzogJ0Yy
JyxcbiAgMTE0OiAnRjMnLFxuICAxMTU6ICdGNCcsXG4gIDExNjogJ0Y1JyxcbiAgMTE3OiAnRjYn
LFxuICAxMTg6ICdGNycsXG4gIDExOTogJ0Y4JyxcbiAgMTIwOiAnRjknLFxuICAxMjE6ICdGMTAn
LFxuICAxMjI6ICdGMTEnLFxuICAxMjM6ICdGMTInLFxuICAxNDQ6ICdOdW1Mb2NrJyxcbiAgMTQ1
OiAnU2Nyb2xsTG9jaycsXG4gIDIyNDogJ01ldGEnXG59O1xuXG4vKipcbiAqIEBwYXJhbSB7b2Jq
ZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEByZXR1cm4ge3N0cmlu
Z30gTm9ybWFsaXplZCBga2V5YCBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gZ2V0RXZlbnRLZXko
bmF0aXZlRXZlbnQpIHtcbiAgaWYgKG5hdGl2ZUV2ZW50LmtleSkge1xuICAgIC8vIE5vcm1hbGl6
ZSBpbmNvbnNpc3RlbnQgdmFsdWVzIHJlcG9ydGVkIGJ5IGJyb3dzZXJzIGR1ZSB0b1xuICAgIC8v
IGltcGxlbWVudGF0aW9ucyBvZiBhIHdvcmtpbmcgZHJhZnQgc3BlY2lmaWNhdGlvbi5cblxuICAg
IC8vIEZpcmVGb3ggaW1wbGVtZW50cyBga2V5YCBidXQgcmV0dXJucyBgTW96UHJpbnRhYmxlS2V5
YCBmb3IgYWxsXG4gICAgLy8gcHJpbnRhYmxlIGNoYXJhY3RlcnMgKG5vcm1hbGl6ZWQgdG8gYFVu
aWRlbnRpZmllZGApLCBpZ25vcmUgaXQuXG4gICAgdmFyIGtleSA9IG5vcm1hbGl6ZUtleVtuYXRp
dmVFdmVudC5rZXldIHx8IG5hdGl2ZUV2ZW50LmtleTtcbiAgICBpZiAoa2V5ICE9PSAnVW5pZGVu
dGlmaWVkJykge1xuICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gIH1cblxuICAvLyBCcm93c2Vy
IGRvZXMgbm90IGltcGxlbWVudCBga2V5YCwgcG9seWZpbGwgYXMgbXVjaCBvZiBpdCBhcyB3ZSBj
YW4uXG4gIGlmIChuYXRpdmVFdmVudC50eXBlID09PSAna2V5cHJlc3MnKSB7XG4gICAgdmFyIGNo
YXJDb2RlID0gZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVudCk7XG5cbiAgICAvLyBUaGUgZW50
ZXIta2V5IGlzIHRlY2huaWNhbGx5IGJvdGggcHJpbnRhYmxlIGFuZCBub24tcHJpbnRhYmxlIGFu
ZCBjYW5cbiAgICAvLyB0aHVzIGJlIGNhcHR1cmVkIGJ5IGBrZXlwcmVzc2AsIG5vIG90aGVyIG5v
bi1wcmludGFibGUga2V5IHNob3VsZC5cbiAgICByZXR1cm4gY2hhckNvZGUgPT09IDEzID8gJ0Vu
dGVyJyA6IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGUpO1xuICB9XG4gIGlmIChuYXRpdmVF
dmVudC50eXBlID09PSAna2V5ZG93bicgfHwgbmF0aXZlRXZlbnQudHlwZSA9PT0gJ2tleXVwJykg
e1xuICAgIC8vIFdoaWxlIHVzZXIga2V5Ym9hcmQgbGF5b3V0IGRldGVybWluZXMgdGhlIGFjdHVh
bCBtZWFuaW5nIG9mIGVhY2hcbiAgICAvLyBga2V5Q29kZWAgdmFsdWUsIGFsbW9zdCBhbGwgZnVu
Y3Rpb24ga2V5cyBoYXZlIGEgdW5pdmVyc2FsIHZhbHVlLlxuICAgIHJldHVybiB0cmFuc2xhdGVU
b0tleVtuYXRpdmVFdmVudC5rZXlDb2RlXSB8fCAnVW5pZGVudGlmaWVkJztcbiAgfVxuICByZXR1
cm4gJyc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0RXZlbnRLZXk7XG5cbi8qKiovIH0pLFxu
LyogMTg0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVx
dWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVz
ZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlz
IHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3Vu
ZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBz
b3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4g
YmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxu
ICovXG5cblxuXG52YXIgU3ludGhldGljTW91c2VFdmVudCA9IF9fd2VicGFja19yZXF1aXJlX18o
MjUpO1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgRHJhZ0V2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cu
dzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xudmFyIERyYWdFdmVudEludGVyZmFj
ZSA9IHtcbiAgZGF0YVRyYW5zZmVyOiBudWxsXG59O1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0
fSBkaXNwYXRjaENvbmZpZyBDb25maWd1cmF0aW9uIHVzZWQgdG8gZGlzcGF0Y2ggdGhpcyBldmVu
dC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXNwYXRjaE1hcmtlciBNYXJrZXIgaWRlbnRpZnlpbmcg
dGhlIGV2ZW50IHRhcmdldC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUg
YnJvd3NlciBldmVudC5cbiAqIEBleHRlbmRzIHtTeW50aGV0aWNVSUV2ZW50fVxuICovXG5mdW5j
dGlvbiBTeW50aGV0aWNEcmFnRXZlbnQoZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBu
YXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgcmV0dXJuIFN5bnRoZXRpY01vdXNl
RXZlbnQuY2FsbCh0aGlzLCBkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2
ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG59XG5cblN5bnRoZXRpY01vdXNlRXZlbnQuYXVnbWVu
dENsYXNzKFN5bnRoZXRpY0RyYWdFdmVudCwgRHJhZ0V2ZW50SW50ZXJmYWNlKTtcblxubW9kdWxl
LmV4cG9ydHMgPSBTeW50aGV0aWNEcmFnRXZlbnQ7XG5cbi8qKiovIH0pLFxuLyogMTg1ICovXG4v
KioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5c
blwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9v
aywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2Rl
IGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAq
IExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4g
QW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4g
dGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cblxuXG52
YXIgU3ludGhldGljVUlFdmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oMjEpO1xuXG52YXIgZ2V0
RXZlbnRNb2RpZmllclN0YXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNik7XG5cbi8qKlxuICog
QGludGVyZmFjZSBUb3VjaEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL3RvdWNo
LWV2ZW50cy9cbiAqL1xudmFyIFRvdWNoRXZlbnRJbnRlcmZhY2UgPSB7XG4gIHRvdWNoZXM6IG51
bGwsXG4gIHRhcmdldFRvdWNoZXM6IG51bGwsXG4gIGNoYW5nZWRUb3VjaGVzOiBudWxsLFxuICBh
bHRLZXk6IG51bGwsXG4gIG1ldGFLZXk6IG51bGwsXG4gIGN0cmxLZXk6IG51bGwsXG4gIHNoaWZ0
S2V5OiBudWxsLFxuICBnZXRNb2RpZmllclN0YXRlOiBnZXRFdmVudE1vZGlmaWVyU3RhdGVcbn07
XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGRpc3BhdGNoQ29uZmlnIENvbmZpZ3VyYXRpb24g
dXNlZCB0byBkaXNwYXRjaCB0aGlzIGV2ZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGRpc3BhdGNo
TWFya2VyIE1hcmtlciBpZGVudGlmeWluZyB0aGUgZXZlbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtv
YmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQGV4dGVuZHMge1N5
bnRoZXRpY1VJRXZlbnR9XG4gKi9cbmZ1bmN0aW9uIFN5bnRoZXRpY1RvdWNoRXZlbnQoZGlzcGF0
Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQp
IHtcbiAgcmV0dXJuIFN5bnRoZXRpY1VJRXZlbnQuY2FsbCh0aGlzLCBkaXNwYXRjaENvbmZpZywg
ZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG59XG5cblN5
bnRoZXRpY1VJRXZlbnQuYXVnbWVudENsYXNzKFN5bnRoZXRpY1RvdWNoRXZlbnQsIFRvdWNoRXZl
bnRJbnRlcmZhY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bnRoZXRpY1RvdWNoRXZlbnQ7XG5c
bi8qKiovIH0pLFxuLyogMTg2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBf
X3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBDb3B5cmln
aHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5c
biAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUg
bGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rv
cnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50
IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJl
Y3RvcnkuXG4gKlxuICovXG5cblxuXG52YXIgU3ludGhldGljRXZlbnQgPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKDExKTtcblxuLyoqXG4gKiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93
d3cudzMub3JnL1RSLzIwMDkvV0QtY3NzMy10cmFuc2l0aW9ucy0yMDA5MDMyMC8jdHJhbnNpdGlv
bi1ldmVudHMtXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2Rv
Y3MvV2ViL0FQSS9UcmFuc2l0aW9uRXZlbnRcbiAqL1xudmFyIFRyYW5zaXRpb25FdmVudEludGVy
ZmFjZSA9IHtcbiAgcHJvcGVydHlOYW1lOiBudWxsLFxuICBlbGFwc2VkVGltZTogbnVsbCxcbiAg
cHNldWRvRWxlbWVudDogbnVsbFxufTtcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZGlzcGF0
Y2hDb25maWcgQ29uZmlndXJhdGlvbiB1c2VkIHRvIGRpc3BhdGNoIHRoaXMgZXZlbnQuXG4gKiBA
cGFyYW0ge3N0cmluZ30gZGlzcGF0Y2hNYXJrZXIgTWFya2VyIGlkZW50aWZ5aW5nIHRoZSBldmVu
dCB0YXJnZXQuXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIg
ZXZlbnQuXG4gKiBAZXh0ZW5kcyB7U3ludGhldGljRXZlbnR9XG4gKi9cbmZ1bmN0aW9uIFN5bnRo
ZXRpY1RyYW5zaXRpb25FdmVudChkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2
ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICByZXR1cm4gU3ludGhldGljRXZlbnQuY2Fs
bCh0aGlzLCBkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50LCBuYXRp
dmVFdmVudFRhcmdldCk7XG59XG5cblN5bnRoZXRpY0V2ZW50LmF1Z21lbnRDbGFzcyhTeW50aGV0
aWNUcmFuc2l0aW9uRXZlbnQsIFRyYW5zaXRpb25FdmVudEludGVyZmFjZSk7XG5cbm1vZHVsZS5l
eHBvcnRzID0gU3ludGhldGljVHJhbnNpdGlvbkV2ZW50O1xuXG4vKioqLyB9KSxcbi8qIDE4NyAq
L1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykg
e1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFj
ZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2Ug
Y29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhl
XG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRy
ZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5k
IGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG5c
blxudmFyIFN5bnRoZXRpY01vdXNlRXZlbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1KTtcblxu
LyoqXG4gKiBAaW50ZXJmYWNlIFdoZWVsRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcv
VFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG52YXIgV2hlZWxFdmVudEludGVyZmFjZSA9IHtc
biAgZGVsdGFYOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gJ2RlbHRhWCcgaW4gZXZl
bnQgPyBldmVudC5kZWx0YVggOiAvLyBGYWxsYmFjayB0byBgd2hlZWxEZWx0YVhgIGZvciBXZWJr
aXQgYW5kIG5vcm1hbGl6ZSAocmlnaHQgaXMgcG9zaXRpdmUpLlxuICAgICd3aGVlbERlbHRhWCcg
aW4gZXZlbnQgPyAtZXZlbnQud2hlZWxEZWx0YVggOiAwO1xuICB9LFxuICBkZWx0YVk6IGZ1bmN0
aW9uIChldmVudCkge1xuICAgIHJldHVybiAnZGVsdGFZJyBpbiBldmVudCA/IGV2ZW50LmRlbHRh
WSA6IC8vIEZhbGxiYWNrIHRvIGB3aGVlbERlbHRhWWAgZm9yIFdlYmtpdCBhbmQgbm9ybWFsaXpl
IChkb3duIGlzIHBvc2l0aXZlKS5cbiAgICAnd2hlZWxEZWx0YVknIGluIGV2ZW50ID8gLWV2ZW50
LndoZWVsRGVsdGFZIDogLy8gRmFsbGJhY2sgdG8gYHdoZWVsRGVsdGFgIGZvciBJRTw5IGFuZCBu
b3JtYWxpemUgKGRvd24gaXMgcG9zaXRpdmUpLlxuICAgICd3aGVlbERlbHRhJyBpbiBldmVudCA/
IC1ldmVudC53aGVlbERlbHRhIDogMDtcbiAgfSxcbiAgZGVsdGFaOiBudWxsLFxuXG4gIC8vIEJy
b3dzZXJzIHdpdGhvdXQgXCJkZWx0YU1vZGVcIiBpcyByZXBvcnRpbmcgaW4gcmF3IHdoZWVsIGRl
bHRhIHdoZXJlIG9uZVxuICAvLyBub3RjaCBvbiB0aGUgc2Nyb2xsIGlzIGFsd2F5cyArLy0gMTIw
LCByb3VnaGx5IGVxdWl2YWxlbnQgdG8gcGl4ZWxzLlxuICAvLyBBIGdvb2QgYXBwcm94aW1hdGlv
biBvZiBET01fREVMVEFfTElORSAoMSkgaXMgNSUgb2Ygdmlld3BvcnQgc2l6ZSBvclxuICAvLyB+
NDAgcGl4ZWxzLCBmb3IgRE9NX0RFTFRBX1NDUkVFTiAoMikgaXQgaXMgODcuNSUgb2Ygdmlld3Bv
cnQgc2l6ZS5cbiAgZGVsdGFNb2RlOiBudWxsXG59O1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0
fSBkaXNwYXRjaENvbmZpZyBDb25maWd1cmF0aW9uIHVzZWQgdG8gZGlzcGF0Y2ggdGhpcyBldmVu
dC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXNwYXRjaE1hcmtlciBNYXJrZXIgaWRlbnRpZnlpbmcg
dGhlIGV2ZW50IHRhcmdldC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUg
YnJvd3NlciBldmVudC5cbiAqIEBleHRlbmRzIHtTeW50aGV0aWNNb3VzZUV2ZW50fVxuICovXG5m
dW5jdGlvbiBTeW50aGV0aWNXaGVlbEV2ZW50KGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtl
ciwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHJldHVybiBTeW50aGV0aWNN
b3VzZUV2ZW50LmNhbGwodGhpcywgZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRp
dmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xufVxuXG5TeW50aGV0aWNNb3VzZUV2ZW50LmF1
Z21lbnRDbGFzcyhTeW50aGV0aWNXaGVlbEV2ZW50LCBXaGVlbEV2ZW50SW50ZXJmYWNlKTtcblxu
bW9kdWxlLmV4cG9ydHMgPSBTeW50aGV0aWNXaGVlbEV2ZW50O1xuXG4vKioqLyB9KSxcbi8qIDE4
OCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVf
Xykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwg
RmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3Vy
Y2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4g
dGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNl
IHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZv
dW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xu
XG5cblxudmFyIHZhbGlkYXRlRE9NTmVzdGluZyA9IF9fd2VicGFja19yZXF1aXJlX18oNDYpO1xu
XG52YXIgRE9DX05PREVfVFlQRSA9IDk7XG5cbmZ1bmN0aW9uIFJlYWN0RE9NQ29udGFpbmVySW5m
byh0b3BMZXZlbFdyYXBwZXIsIG5vZGUpIHtcbiAgdmFyIGluZm8gPSB7XG4gICAgX3RvcExldmVs
V3JhcHBlcjogdG9wTGV2ZWxXcmFwcGVyLFxuICAgIF9pZENvdW50ZXI6IDEsXG4gICAgX293bmVy
RG9jdW1lbnQ6IG5vZGUgPyBub2RlLm5vZGVUeXBlID09PSBET0NfTk9ERV9UWVBFID8gbm9kZSA6
IG5vZGUub3duZXJEb2N1bWVudCA6IG51bGwsXG4gICAgX25vZGU6IG5vZGUsXG4gICAgX3RhZzog
bm9kZSA/IG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA6IG51bGwsXG4gICAgX25hbWVzcGFj
ZVVSSTogbm9kZSA/IG5vZGUubmFtZXNwYWNlVVJJIDogbnVsbFxuICB9O1xuICBpZiAoZmFsc2Up
IHtcbiAgICBpbmZvLl9hbmNlc3RvckluZm8gPSBub2RlID8gdmFsaWRhdGVET01OZXN0aW5nLnVw
ZGF0ZWRBbmNlc3RvckluZm8obnVsbCwgaW5mby5fdGFnLCBudWxsKSA6IG51bGw7XG4gIH1cbiAg
cmV0dXJuIGluZm87XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RET01Db250YWluZXJJbmZv
O1xuXG4vKioqLyB9KSxcbi8qIDE4OSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0
cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qKlxuICogQ29w
eXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0
eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGly
ZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBh
dGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUg
ZGlyZWN0b3J5LlxuICpcbiAqL1xuXG5cblxudmFyIFJlYWN0RE9NRmVhdHVyZUZsYWdzID0ge1xu
ICB1c2VDcmVhdGVFbGVtZW50OiB0cnVlLFxuICB1c2VGaWJlcjogZmFsc2Vcbn07XG5cbm1vZHVs
ZS5leHBvcnRzID0gUmVhY3RET01GZWF0dXJlRmxhZ3M7XG5cbi8qKiovIH0pLFxuLyogMTkwICov
XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7
XG5cblwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNl
Ym9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBj
b2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVc
biAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJl
ZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQg
aW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cblxu
XG52YXIgYWRsZXIzMiA9IF9fd2VicGFja19yZXF1aXJlX18oMTkxKTtcblxudmFyIFRBR19FTkQg
PSAvXFwvPz4vO1xudmFyIENPTU1FTlRfU1RBUlQgPSAvXjxcXCFcXC1cXC0vO1xuXG52YXIgUmVh
Y3RNYXJrdXBDaGVja3N1bSA9IHtcbiAgQ0hFQ0tTVU1fQVRUUl9OQU1FOiAnZGF0YS1yZWFjdC1j
aGVja3N1bScsXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtYXJrdXAgTWFya3VwIHN0
cmluZ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IE1hcmt1cCBzdHJpbmcgd2l0aCBjaGVja3N1bSBh
dHRyaWJ1dGUgYXR0YWNoZWRcbiAgICovXG4gIGFkZENoZWNrc3VtVG9NYXJrdXA6IGZ1bmN0aW9u
IChtYXJrdXApIHtcbiAgICB2YXIgY2hlY2tzdW0gPSBhZGxlcjMyKG1hcmt1cCk7XG5cbiAgICAv
LyBBZGQgY2hlY2tzdW0gKGhhbmRsZSBib3RoIHBhcmVudCB0YWdzLCBjb21tZW50cyBhbmQgc2Vs
Zi1jbG9zaW5nIHRhZ3MpXG4gICAgaWYgKENPTU1FTlRfU1RBUlQudGVzdChtYXJrdXApKSB7XG4g
ICAgICByZXR1cm4gbWFya3VwO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbWFya3VwLnJl
cGxhY2UoVEFHX0VORCwgJyAnICsgUmVhY3RNYXJrdXBDaGVja3N1bS5DSEVDS1NVTV9BVFRSX05B
TUUgKyAnPVwiJyArIGNoZWNrc3VtICsgJ1wiJCYnKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4g
ICAqIEBwYXJhbSB7c3RyaW5nfSBtYXJrdXAgdG8gdXNlXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVu
dH0gZWxlbWVudCByb290IFJlYWN0IGVsZW1lbnRcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHdo
ZXRoZXIgb3Igbm90IHRoZSBtYXJrdXAgaXMgdGhlIHNhbWVcbiAgICovXG4gIGNhblJldXNlTWFy
a3VwOiBmdW5jdGlvbiAobWFya3VwLCBlbGVtZW50KSB7XG4gICAgdmFyIGV4aXN0aW5nQ2hlY2tz
dW0gPSBlbGVtZW50LmdldEF0dHJpYnV0ZShSZWFjdE1hcmt1cENoZWNrc3VtLkNIRUNLU1VNX0FU
VFJfTkFNRSk7XG4gICAgZXhpc3RpbmdDaGVja3N1bSA9IGV4aXN0aW5nQ2hlY2tzdW0gJiYgcGFy
c2VJbnQoZXhpc3RpbmdDaGVja3N1bSwgMTApO1xuICAgIHZhciBtYXJrdXBDaGVja3N1bSA9IGFk
bGVyMzIobWFya3VwKTtcbiAgICByZXR1cm4gbWFya3VwQ2hlY2tzdW0gPT09IGV4aXN0aW5nQ2hl
Y2tzdW07XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RNYXJrdXBDaGVja3N1bTtc
blxuLyoqKi8gfSksXG4vKiAxOTEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMs
IF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIENvcHly
aWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVk
LlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHls
ZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVj
dG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRl
bnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRp
cmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG5cblxudmFyIE1PRCA9IDY1NTIxO1xuXG4vLyBhZGxl
cjMyIGlzIG5vdCBjcnlwdG9ncmFwaGljYWxseSBzdHJvbmcsIGFuZCBpcyBvbmx5IHVzZWQgdG8g
c2FuaXR5IGNoZWNrIHRoYXRcbi8vIG1hcmt1cCBnZW5lcmF0ZWQgb24gdGhlIHNlcnZlciBtYXRj
aGVzIHRoZSBtYXJrdXAgZ2VuZXJhdGVkIG9uIHRoZSBjbGllbnQuXG4vLyBUaGlzIGltcGxlbWVu
dGF0aW9uIChhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIFNoZWV0SlMgdmVyc2lvbikgaGFzIGJl
ZW4gb3B0aW1pemVkXG4vLyBmb3Igb3VyIHVzZSBjYXNlLCBhdCB0aGUgZXhwZW5zZSBvZiBjb25m
b3JtaW5nIHRvIHRoZSBhZGxlcjMyIHNwZWNpZmljYXRpb25cbi8vIGZvciBub24tYXNjaWkgaW5w
dXRzLlxuZnVuY3Rpb24gYWRsZXIzMihkYXRhKSB7XG4gIHZhciBhID0gMTtcbiAgdmFyIGIgPSAw
O1xuICB2YXIgaSA9IDA7XG4gIHZhciBsID0gZGF0YS5sZW5ndGg7XG4gIHZhciBtID0gbCAmIH4w
eDM7XG4gIHdoaWxlIChpIDwgbSkge1xuICAgIHZhciBuID0gTWF0aC5taW4oaSArIDQwOTYsIG0p
O1xuICAgIGZvciAoOyBpIDwgbjsgaSArPSA0KSB7XG4gICAgICBiICs9IChhICs9IGRhdGEuY2hh
ckNvZGVBdChpKSkgKyAoYSArPSBkYXRhLmNoYXJDb2RlQXQoaSArIDEpKSArIChhICs9IGRhdGEu
Y2hhckNvZGVBdChpICsgMikpICsgKGEgKz0gZGF0YS5jaGFyQ29kZUF0KGkgKyAzKSk7XG4gICAg
fVxuICAgIGEgJT0gTU9EO1xuICAgIGIgJT0gTU9EO1xuICB9XG4gIGZvciAoOyBpIDwgbDsgaSsr
KSB7XG4gICAgYiArPSBhICs9IGRhdGEuY2hhckNvZGVBdChpKTtcbiAgfVxuICBhICU9IE1PRDtc
biAgYiAlPSBNT0Q7XG4gIHJldHVybiBhIHwgYiA8PCAxNjtcbn1cblxubW9kdWxlLmV4cG9ydHMg
PSBhZGxlcjMyO1xuXG4vKioqLyB9KSxcbi8qIDE5MiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVs
ZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8q
KlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0
aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhl
IHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRc
biAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4g
dGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG5cblxubW9kdWxlLmV4cG9ydHMgPSAnMTUu
Ni4xJztcblxuLyoqKi8gfSksXG4vKiAxOTMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4
cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAq
IENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJl
c2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJT
RC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290
IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBv
ZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBz
YW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuXG5cbnZhciBfcHJvZEludmFyaWFudCA9IF9fd2Vi
cGFja19yZXF1aXJlX18oMik7XG5cbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IF9fd2VicGFja19y
ZXF1aXJlX18oMTApO1xudmFyIFJlYWN0RE9NQ29tcG9uZW50VHJlZSA9IF9fd2VicGFja19yZXF1
aXJlX18oNCk7XG52YXIgUmVhY3RJbnN0YW5jZU1hcCA9IF9fd2VicGFja19yZXF1aXJlX18oMjIp
O1xuXG52YXIgZ2V0SG9zdENvbXBvbmVudEZyb21Db21wb3NpdGUgPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKDgzKTtcbnZhciBpbnZhcmlhbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyIHdh
cm5pbmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIERP
TSBub2RlIHJlbmRlcmVkIGJ5IHRoaXMgZWxlbWVudC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9mYWNl
Ym9vay5naXRodWIuaW8vcmVhY3QvZG9jcy90b3AtbGV2ZWwtYXBpLmh0bWwjcmVhY3Rkb20uZmlu
ZGRvbW5vZGVcbiAqXG4gKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fERPTUVsZW1lbnR9IGNvbXBv
bmVudE9yRWxlbWVudFxuICogQHJldHVybiB7P0RPTUVsZW1lbnR9IFRoZSByb290IG5vZGUgb2Yg
dGhpcyBlbGVtZW50LlxuICovXG5mdW5jdGlvbiBmaW5kRE9NTm9kZShjb21wb25lbnRPckVsZW1l
bnQpIHtcbiAgaWYgKGZhbHNlKSB7XG4gICAgdmFyIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIu
Y3VycmVudDtcbiAgICBpZiAob3duZXIgIT09IG51bGwpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5P
REVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKG93bmVyLl93YXJuZWRBYm91dFJlZnNJ
blJlbmRlciwgJyVzIGlzIGFjY2Vzc2luZyBmaW5kRE9NTm9kZSBpbnNpZGUgaXRzIHJlbmRlcigp
LiAnICsgJ3JlbmRlcigpIHNob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0
YXRlLiBJdCBzaG91bGQgJyArICduZXZlciBhY2Nlc3Mgc29tZXRoaW5nIHRoYXQgcmVxdWlyZXMg
c3RhbGUgZGF0YSBmcm9tIHRoZSBwcmV2aW91cyAnICsgJ3JlbmRlciwgc3VjaCBhcyByZWZzLiBN
b3ZlIHRoaXMgbG9naWMgdG8gY29tcG9uZW50RGlkTW91bnQgYW5kICcgKyAnY29tcG9uZW50RGlk
VXBkYXRlIGluc3RlYWQuJywgb3duZXIuZ2V0TmFtZSgpIHx8ICdBIGNvbXBvbmVudCcpIDogdm9p
ZCAwO1xuICAgICAgb3duZXIuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyID0gdHJ1ZTtcbiAgICB9
XG4gIH1cbiAgaWYgKGNvbXBvbmVudE9yRWxlbWVudCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51
bGw7XG4gIH1cbiAgaWYgKGNvbXBvbmVudE9yRWxlbWVudC5ub2RlVHlwZSA9PT0gMSkge1xuICAg
IHJldHVybiBjb21wb25lbnRPckVsZW1lbnQ7XG4gIH1cblxuICB2YXIgaW5zdCA9IFJlYWN0SW5z
dGFuY2VNYXAuZ2V0KGNvbXBvbmVudE9yRWxlbWVudCk7XG4gIGlmIChpbnN0KSB7XG4gICAgaW5z
dCA9IGdldEhvc3RDb21wb25lbnRGcm9tQ29tcG9zaXRlKGluc3QpO1xuICAgIHJldHVybiBpbnN0
ID8gUmVhY3RET01Db21wb25lbnRUcmVlLmdldE5vZGVGcm9tSW5zdGFuY2UoaW5zdCkgOiBudWxs
O1xuICB9XG5cbiAgaWYgKHR5cGVvZiBjb21wb25lbnRPckVsZW1lbnQucmVuZGVyID09PSAnZnVu
Y3Rpb24nKSB7XG4gICAgIHRydWUgPyAgZmFsc2UgPyBpbnZhcmlhbnQoZmFsc2UsICdmaW5kRE9N
Tm9kZSB3YXMgY2FsbGVkIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuJykgOiBfcHJvZEludmFy
aWFudCgnNDQnKSA6IHZvaWQgMDtcbiAgfSBlbHNlIHtcbiAgICAgdHJ1ZSA/ICBmYWxzZSA/IGlu
dmFyaWFudChmYWxzZSwgJ0VsZW1lbnQgYXBwZWFycyB0byBiZSBuZWl0aGVyIFJlYWN0Q29tcG9u
ZW50IG5vciBET01Ob2RlIChrZXlzOiAlcyknLCBPYmplY3Qua2V5cyhjb21wb25lbnRPckVsZW1l
bnQpKSA6IF9wcm9kSW52YXJpYW50KCc0NScsIE9iamVjdC5rZXlzKGNvbXBvbmVudE9yRWxlbWVu
dCkpIDogdm9pZCAwO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmluZERPTU5vZGU7XG5c
bi8qKiovIH0pLFxuLyogMTk0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBf
X3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBDb3B5cmln
aHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5c
biAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUg
bGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rv
cnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50
IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJl
Y3RvcnkuXG4gKlxuICovXG5cblxuXG52YXIgUmVhY3RNb3VudCA9IF9fd2VicGFja19yZXF1aXJl
X18oODIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0TW91bnQucmVuZGVyU3VidHJlZUludG9D
b250YWluZXI7XG5cbi8qKiovIH0pLFxuLyogMTk1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxl
LCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0
cmljdFwiO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fU3ltYm9sX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg1KTtcbi8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2dldFJhd1RhZ19qc19f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTgpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fb2JqZWN0VG9TdHJpbmdfanNfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oMTk5KTtcblxuXG5cblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCBy
ZWZlcmVuY2VzLiAqL1xudmFyIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXG4gICAgdW5kZWZp
bmVkVGFnID0gJ1tvYmplY3QgVW5kZWZpbmVkXSc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZl
cmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19TeW1ib2xfanNfX1tcImFcIiAvKiBkZWZhdWx0ICovXSA/IF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fU3ltYm9sX2pzX19bXCJhXCIgLyogZGVmYXVsdCAqL10udG9TdHJpbmdUYWcg
OiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRh
Z2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cbiAqXG4gKiBAcHJp
dmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJu
cyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBiYXNl
R2V0VGFnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVl
ID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICB9XG4gIHJldHVybiAo
c3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICA/
IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2dldFJhd1RhZ19qc19fW1wiYVwi
IC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSlcbiAgICA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX29iamVjdFRvU3RyaW5nX2pzX19bXCJhXCIgLyogZGVmYXVsdCAqL10pKHZhbHVl
KTtcbn1cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19f
W1wiYVwiXSA9IChiYXNlR2V0VGFnKTtcblxuXG4vKioqLyB9KSxcbi8qIDE5NiAqL1xuLyoqKi8g
KGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVf
Xykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX2ZyZWVHbG9iYWxfanNfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oMTk3KTtcblxuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xudmFyIGZy
ZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9
PT0gT2JqZWN0ICYmIHNlbGY7XG5cbi8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9i
YWwgb2JqZWN0LiAqL1xudmFyIHJvb3QgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Zy
ZWVHbG9iYWxfanNfX1tcImFcIiAvKiBkZWZhdWx0ICovXSB8fCBmcmVlU2VsZiB8fCBGdW5jdGlv
bigncmV0dXJuIHRoaXMnKSgpO1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2Vi
cGFja19leHBvcnRzX19bXCJhXCJdID0gKHJvb3QpO1xuXG5cbi8qKiovIH0pLFxuLyogMTk3ICov
XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tf
cmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9O
ICovKGZ1bmN0aW9uKGdsb2JhbCkgey8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBm
cm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVj
dCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbi8q
IGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSAo
ZnJlZUdsb2JhbCk7XG5cbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChfX3dlYnBh
Y2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDMwKSkpXG5cbi8qKiovIH0pLFxuLyog
MTk4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKDg1KTtcblxuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVy
ZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNl
ZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9w
ZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVz
b2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9y
Zy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFs
dWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmlu
ZztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdU
YWcgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N5bWJvbF9qc19fW1wiYVwiIC8qIGRl
ZmF1bHQgKi9dID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TeW1ib2xfanNfX1tcImFc
IiAvKiBkZWZhdWx0ICovXS50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIHNw
ZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VHZXRUYWdgIHdoaWNoIGlnbm9yZXMgYFN5bWJvbC50
b1N0cmluZ1RhZ2AgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVl
IFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJh
dyBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBnZXRSYXdUYWcodmFsdWUpIHtcbiAgdmFy
IGlzT3duID0gaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgc3ltVG9TdHJpbmdUYWcpLFxuICAg
ICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuXG4gIHRyeSB7XG4gICAgdmFsdWVbc3lt
VG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xuICAgIHZhciB1bm1hc2tlZCA9IHRydWU7XG4gIH0g
Y2F0Y2ggKGUpIHt9XG5cbiAgdmFyIHJlc3VsdCA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwo
dmFsdWUpO1xuICBpZiAodW5tYXNrZWQpIHtcbiAgICBpZiAoaXNPd24pIHtcbiAgICAgIHZhbHVl
W3N5bVRvU3RyaW5nVGFnXSA9IHRhZztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHZhbHVl
W3N5bVRvU3RyaW5nVGFnXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyog
aGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiYVwiXSA9IChn
ZXRSYXdUYWcpO1xuXG5cbi8qKiovIH0pLFxuLyogMTk5ICovXG4vKioqLyAoZnVuY3Rpb24obW9k
dWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNl
IHN0cmljdFwiO1xuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xu
dmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJl
c29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5v
cmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZh
bHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJp
bmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0
LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFs
dWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRo
ZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkg
e1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbi8qIGhh
cm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSAob2Jq
ZWN0VG9TdHJpbmcpO1xuXG5cbi8qKiovIH0pLFxuLyogMjAwICovXG4vKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwi
dXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fb3ZlckFyZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMDEpO1xuXG5c
bi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIGdldFByb3RvdHlwZSA9IE9i
amVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX292ZXJBcmdfanNfX1tcImFcIiAvKiBk
ZWZhdWx0ICovXSkoT2JqZWN0LmdldFByb3RvdHlwZU9mLCBPYmplY3QpO1xuXG4vKiBoYXJtb255
IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gKGdldFByb3Rv
dHlwZSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMDEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUs
IF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3Ry
aWN0XCI7XG4vKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1
bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBA
cGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtG
dW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7
RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFy
ZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVy
biBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4
cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiYVwiXSA9IChvdmVyQXJnKTtcblxuXG4vKioq
LyB9KSxcbi8qIDIwMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9y
dHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qKlxuICog
Q2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2Ug
aWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2Jq
ZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxu
ICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNr
LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2Jq
ZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExp
a2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7
XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+
IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICov
XG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwg
JiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhw
b3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gKGlzT2JqZWN0TGlrZSk7XG5cblxu
LyoqKi8gfSksXG4vKiAyMDMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9f
d2VicGFja19yZXF1aXJlX18pIHtcblxubW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKDIwNCk7XG5cblxuLyoqKi8gfSksXG4vKiAyMDQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1
bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4v
KiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24oZ2xvYmFsLCBtb2R1bGUpIHtcblxu
T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVl
OiB0cnVlXG59KTtcblxudmFyIF9wb255ZmlsbCA9IF9fd2VicGFja19yZXF1aXJlX18oMjA2KTtc
blxudmFyIF9wb255ZmlsbDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wb255ZmlsbCk7XG5c
bmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2Jq
Ll9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxudmFyIHJvb3Q7IC8q
IGdsb2JhbCB3aW5kb3cgKi9cblxuXG5pZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7
XG4gIHJvb3QgPSBzZWxmO1xufSBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVk
Jykge1xuICByb290ID0gd2luZG93O1xufSBlbHNlIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5k
ZWZpbmVkJykge1xuICByb290ID0gZ2xvYmFsO1xufSBlbHNlIGlmICh0cnVlKSB7XG4gIHJvb3Qg
PSBtb2R1bGU7XG59IGVsc2Uge1xuICByb290ID0gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtc
bn1cblxudmFyIHJlc3VsdCA9ICgwLCBfcG9ueWZpbGwyWydkZWZhdWx0J10pKHJvb3QpO1xuZXhw
b3J0c1snZGVmYXVsdCddID0gcmVzdWx0O1xuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5j
YWxsKGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18oMzApLCBfX3dlYnBhY2tfcmVxdWlyZV9f
KDIwNSkobW9kdWxlKSkpXG5cbi8qKiovIH0pLFxuLyogMjA1ICovXG4vKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obW9kdWxlKSB7
XHJcblx0aWYoIW1vZHVsZS53ZWJwYWNrUG9seWZpbGwpIHtcclxuXHRcdG1vZHVsZS5kZXByZWNh
dGUgPSBmdW5jdGlvbigpIHt9O1xyXG5cdFx0bW9kdWxlLnBhdGhzID0gW107XHJcblx0XHQvLyBt
b2R1bGUucGFyZW50ID0gdW5kZWZpbmVkIGJ5IGRlZmF1bHRcclxuXHRcdGlmKCFtb2R1bGUuY2hp
bGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xyXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5
KG1vZHVsZSwgXCJsb2FkZWRcIiwge1xyXG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxyXG5cdFx0
XHRnZXQ6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdHJldHVybiBtb2R1bGUubDtcclxuXHRcdFx0
fVxyXG5cdFx0fSk7XHJcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImlkXCIs
IHtcclxuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcclxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtc
clxuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0
bW9kdWxlLndlYnBhY2tQb2x5ZmlsbCA9IDE7XHJcblx0fVxyXG5cdHJldHVybiBtb2R1bGU7XHJc
bn07XHJcblxuXG4vKioqLyB9KSxcbi8qIDIwNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwg
ZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5P
YmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcblx0dmFsdWU6
IHRydWVcbn0pO1xuZXhwb3J0c1snZGVmYXVsdCddID0gc3ltYm9sT2JzZXJ2YWJsZVBvbnlmaWxs
O1xuZnVuY3Rpb24gc3ltYm9sT2JzZXJ2YWJsZVBvbnlmaWxsKHJvb3QpIHtcblx0dmFyIHJlc3Vs
dDtcblx0dmFyIF9TeW1ib2wgPSByb290LlN5bWJvbDtcblxuXHRpZiAodHlwZW9mIF9TeW1ib2wg
PT09ICdmdW5jdGlvbicpIHtcblx0XHRpZiAoX1N5bWJvbC5vYnNlcnZhYmxlKSB7XG5cdFx0XHRy
ZXN1bHQgPSBfU3ltYm9sLm9ic2VydmFibGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlc3VsdCA9
IF9TeW1ib2woJ29ic2VydmFibGUnKTtcblx0XHRcdF9TeW1ib2wub2JzZXJ2YWJsZSA9IHJlc3Vs
dDtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmVzdWx0ID0gJ0BAb2JzZXJ2YWJsZSc7XG5cdH1c
blxuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqKi8gfSksXG4vKiAyMDcgKi9cbi8qKiovIChm
dW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18p
IHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBf
X3dlYnBhY2tfZXhwb3J0c19fW1wiYVwiXSA9IGNvbWJpbmVSZWR1Y2Vycztcbi8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZVN0b3JlX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg0KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfbG9kYXNoX2VzX2lzUGxhaW5PYmplY3RfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oNDgpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fdXRpbHNfd2FybmluZ19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4
Nik7XG5cblxuXG5cbmZ1bmN0aW9uIGdldFVuZGVmaW5lZFN0YXRlRXJyb3JNZXNzYWdlKGtleSwg
YWN0aW9uKSB7XG4gIHZhciBhY3Rpb25UeXBlID0gYWN0aW9uICYmIGFjdGlvbi50eXBlO1xuICB2
YXIgYWN0aW9uTmFtZSA9IGFjdGlvblR5cGUgJiYgJ1wiJyArIGFjdGlvblR5cGUudG9TdHJpbmco
KSArICdcIicgfHwgJ2FuIGFjdGlvbic7XG5cbiAgcmV0dXJuICdHaXZlbiBhY3Rpb24gJyArIGFj
dGlvbk5hbWUgKyAnLCByZWR1Y2VyIFwiJyArIGtleSArICdcIiByZXR1cm5lZCB1bmRlZmluZWQu
ICcgKyAnVG8gaWdub3JlIGFuIGFjdGlvbiwgeW91IG11c3QgZXhwbGljaXRseSByZXR1cm4gdGhl
IHByZXZpb3VzIHN0YXRlLiAnICsgJ0lmIHlvdSB3YW50IHRoaXMgcmVkdWNlciB0byBob2xkIG5v
IHZhbHVlLCB5b3UgY2FuIHJldHVybiBudWxsIGluc3RlYWQgb2YgdW5kZWZpbmVkLic7XG59XG5c
bmZ1bmN0aW9uIGdldFVuZXhwZWN0ZWRTdGF0ZVNoYXBlV2FybmluZ01lc3NhZ2UoaW5wdXRTdGF0
ZSwgcmVkdWNlcnMsIGFjdGlvbiwgdW5leHBlY3RlZEtleUNhY2hlKSB7XG4gIHZhciByZWR1Y2Vy
S2V5cyA9IE9iamVjdC5rZXlzKHJlZHVjZXJzKTtcbiAgdmFyIGFyZ3VtZW50TmFtZSA9IGFjdGlv
biAmJiBhY3Rpb24udHlwZSA9PT0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jcmVhdGVT
dG9yZV9fW1wiYVwiIC8qIEFjdGlvblR5cGVzICovXS5JTklUID8gJ3ByZWxvYWRlZFN0YXRlIGFy
Z3VtZW50IHBhc3NlZCB0byBjcmVhdGVTdG9yZScgOiAncHJldmlvdXMgc3RhdGUgcmVjZWl2ZWQg
YnkgdGhlIHJlZHVjZXInO1xuXG4gIGlmIChyZWR1Y2VyS2V5cy5sZW5ndGggPT09IDApIHtcbiAg
ICByZXR1cm4gJ1N0b3JlIGRvZXMgbm90IGhhdmUgYSB2YWxpZCByZWR1Y2VyLiBNYWtlIHN1cmUg
dGhlIGFyZ3VtZW50IHBhc3NlZCAnICsgJ3RvIGNvbWJpbmVSZWR1Y2VycyBpcyBhbiBvYmplY3Qg
d2hvc2UgdmFsdWVzIGFyZSByZWR1Y2Vycy4nO1xuICB9XG5cbiAgaWYgKCFPYmplY3QoX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX2xvZGFzaF9lc19pc1BsYWluT2JqZWN0X19bXCJhXCIgLyog
ZGVmYXVsdCAqL10pKGlucHV0U3RhdGUpKSB7XG4gICAgcmV0dXJuICdUaGUgJyArIGFyZ3VtZW50
TmFtZSArICcgaGFzIHVuZXhwZWN0ZWQgdHlwZSBvZiBcIicgKyB7fS50b1N0cmluZy5jYWxsKGlu
cHV0U3RhdGUpLm1hdGNoKC9cXHMoW2EtenxBLVpdKykvKVsxXSArICdcIi4gRXhwZWN0ZWQgYXJn
dW1lbnQgdG8gYmUgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyAnICsgKCdrZXlzOiBcIicg
KyByZWR1Y2VyS2V5cy5qb2luKCdcIiwgXCInKSArICdcIicpO1xuICB9XG5cbiAgdmFyIHVuZXhw
ZWN0ZWRLZXlzID0gT2JqZWN0LmtleXMoaW5wdXRTdGF0ZSkuZmlsdGVyKGZ1bmN0aW9uIChrZXkp
IHtcbiAgICByZXR1cm4gIXJlZHVjZXJzLmhhc093blByb3BlcnR5KGtleSkgJiYgIXVuZXhwZWN0
ZWRLZXlDYWNoZVtrZXldO1xuICB9KTtcblxuICB1bmV4cGVjdGVkS2V5cy5mb3JFYWNoKGZ1bmN0
aW9uIChrZXkpIHtcbiAgICB1bmV4cGVjdGVkS2V5Q2FjaGVba2V5XSA9IHRydWU7XG4gIH0pO1xu
XG4gIGlmICh1bmV4cGVjdGVkS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuICdVbmV4cGVj
dGVkICcgKyAodW5leHBlY3RlZEtleXMubGVuZ3RoID4gMSA/ICdrZXlzJyA6ICdrZXknKSArICcg
JyArICgnXCInICsgdW5leHBlY3RlZEtleXMuam9pbignXCIsIFwiJykgKyAnXCIgZm91bmQgaW4g
JyArIGFyZ3VtZW50TmFtZSArICcuICcpICsgJ0V4cGVjdGVkIHRvIGZpbmQgb25lIG9mIHRoZSBr
bm93biByZWR1Y2VyIGtleXMgaW5zdGVhZDogJyArICgnXCInICsgcmVkdWNlcktleXMuam9pbign
XCIsIFwiJykgKyAnXCIuIFVuZXhwZWN0ZWQga2V5cyB3aWxsIGJlIGlnbm9yZWQuJyk7XG4gIH1c
bn1cblxuZnVuY3Rpb24gYXNzZXJ0UmVkdWNlclNoYXBlKHJlZHVjZXJzKSB7XG4gIE9iamVjdC5r
ZXlzKHJlZHVjZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgcmVkdWNlciA9
IHJlZHVjZXJzW2tleV07XG4gICAgdmFyIGluaXRpYWxTdGF0ZSA9IHJlZHVjZXIodW5kZWZpbmVk
LCB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY3JlYXRlU3RvcmVfX1tcImFc
IiAvKiBBY3Rpb25UeXBlcyAqL10uSU5JVCB9KTtcblxuICAgIGlmICh0eXBlb2YgaW5pdGlhbFN0
YXRlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZWR1Y2VyIFwi
JyArIGtleSArICdcIiByZXR1cm5lZCB1bmRlZmluZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLiAn
ICsgJ0lmIHRoZSBzdGF0ZSBwYXNzZWQgdG8gdGhlIHJlZHVjZXIgaXMgdW5kZWZpbmVkLCB5b3Ug
bXVzdCAnICsgJ2V4cGxpY2l0bHkgcmV0dXJuIHRoZSBpbml0aWFsIHN0YXRlLiBUaGUgaW5pdGlh
bCBzdGF0ZSBtYXkgJyArICdub3QgYmUgdW5kZWZpbmVkLiBJZiB5b3UgZG9uXFwndCB3YW50IHRv
IHNldCBhIHZhbHVlIGZvciB0aGlzIHJlZHVjZXIsICcgKyAneW91IGNhbiB1c2UgbnVsbCBpbnN0
ZWFkIG9mIHVuZGVmaW5lZC4nKTtcbiAgICB9XG5cbiAgICB2YXIgdHlwZSA9ICdAQHJlZHV4L1BS
T0JFX1VOS05PV05fQUNUSU9OXycgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJp
bmcoNykuc3BsaXQoJycpLmpvaW4oJy4nKTtcbiAgICBpZiAodHlwZW9mIHJlZHVjZXIodW5kZWZp
bmVkLCB7IHR5cGU6IHR5cGUgfSkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcg
RXJyb3IoJ1JlZHVjZXIgXCInICsga2V5ICsgJ1wiIHJldHVybmVkIHVuZGVmaW5lZCB3aGVuIHBy
b2JlZCB3aXRoIGEgcmFuZG9tIHR5cGUuICcgKyAoJ0RvblxcJ3QgdHJ5IHRvIGhhbmRsZSAnICsg
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jcmVhdGVTdG9yZV9fW1wiYVwiIC8qIEFjdGlv
blR5cGVzICovXS5JTklUICsgJyBvciBvdGhlciBhY3Rpb25zIGluIFwicmVkdXgvKlwiICcpICsg
J25hbWVzcGFjZS4gVGhleSBhcmUgY29uc2lkZXJlZCBwcml2YXRlLiBJbnN0ZWFkLCB5b3UgbXVz
dCByZXR1cm4gdGhlICcgKyAnY3VycmVudCBzdGF0ZSBmb3IgYW55IHVua25vd24gYWN0aW9ucywg
dW5sZXNzIGl0IGlzIHVuZGVmaW5lZCwgJyArICdpbiB3aGljaCBjYXNlIHlvdSBtdXN0IHJldHVy
biB0aGUgaW5pdGlhbCBzdGF0ZSwgcmVnYXJkbGVzcyBvZiB0aGUgJyArICdhY3Rpb24gdHlwZS4g
VGhlIGluaXRpYWwgc3RhdGUgbWF5IG5vdCBiZSB1bmRlZmluZWQsIGJ1dCBjYW4gYmUgbnVsbC4n
KTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIFR1cm5zIGFuIG9iamVjdCB3aG9zZSB2YWx1
ZXMgYXJlIGRpZmZlcmVudCByZWR1Y2VyIGZ1bmN0aW9ucywgaW50byBhIHNpbmdsZVxuICogcmVk
dWNlciBmdW5jdGlvbi4gSXQgd2lsbCBjYWxsIGV2ZXJ5IGNoaWxkIHJlZHVjZXIsIGFuZCBnYXRo
ZXIgdGhlaXIgcmVzdWx0c1xuICogaW50byBhIHNpbmdsZSBzdGF0ZSBvYmplY3QsIHdob3NlIGtl
eXMgY29ycmVzcG9uZCB0byB0aGUga2V5cyBvZiB0aGUgcGFzc2VkXG4gKiByZWR1Y2VyIGZ1bmN0
aW9ucy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcmVkdWNlcnMgQW4gb2JqZWN0IHdob3NlIHZh
bHVlcyBjb3JyZXNwb25kIHRvIGRpZmZlcmVudFxuICogcmVkdWNlciBmdW5jdGlvbnMgdGhhdCBu
ZWVkIHRvIGJlIGNvbWJpbmVkIGludG8gb25lLiBPbmUgaGFuZHkgd2F5IHRvIG9idGFpblxuICog
aXQgaXMgdG8gdXNlIEVTNiBgaW1wb3J0ICogYXMgcmVkdWNlcnNgIHN5bnRheC4gVGhlIHJlZHVj
ZXJzIG1heSBuZXZlciByZXR1cm5cbiAqIHVuZGVmaW5lZCBmb3IgYW55IGFjdGlvbi4gSW5zdGVh
ZCwgdGhleSBzaG91bGQgcmV0dXJuIHRoZWlyIGluaXRpYWwgc3RhdGVcbiAqIGlmIHRoZSBzdGF0
ZSBwYXNzZWQgdG8gdGhlbSB3YXMgdW5kZWZpbmVkLCBhbmQgdGhlIGN1cnJlbnQgc3RhdGUgZm9y
IGFueVxuICogdW5yZWNvZ25pemVkIGFjdGlvbi5cbiAqXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259
IEEgcmVkdWNlciBmdW5jdGlvbiB0aGF0IGludm9rZXMgZXZlcnkgcmVkdWNlciBpbnNpZGUgdGhl
XG4gKiBwYXNzZWQgb2JqZWN0LCBhbmQgYnVpbGRzIGEgc3RhdGUgb2JqZWN0IHdpdGggdGhlIHNh
bWUgc2hhcGUuXG4gKi9cbmZ1bmN0aW9uIGNvbWJpbmVSZWR1Y2VycyhyZWR1Y2Vycykge1xuICB2
YXIgcmVkdWNlcktleXMgPSBPYmplY3Qua2V5cyhyZWR1Y2Vycyk7XG4gIHZhciBmaW5hbFJlZHVj
ZXJzID0ge307XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmVkdWNlcktleXMubGVuZ3RoOyBpKysp
IHtcbiAgICB2YXIga2V5ID0gcmVkdWNlcktleXNbaV07XG5cbiAgICBpZiAoZmFsc2UpIHtcbiAg
ICAgIGlmICh0eXBlb2YgcmVkdWNlcnNba2V5XSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAg
d2FybmluZygnTm8gcmVkdWNlciBwcm92aWRlZCBmb3Iga2V5IFwiJyArIGtleSArICdcIicpO1xu
ICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcmVkdWNlcnNba2V5XSA9PT0gJ2Z1bmN0
aW9uJykge1xuICAgICAgZmluYWxSZWR1Y2Vyc1trZXldID0gcmVkdWNlcnNba2V5XTtcbiAgICB9
XG4gIH1cbiAgdmFyIGZpbmFsUmVkdWNlcktleXMgPSBPYmplY3Qua2V5cyhmaW5hbFJlZHVjZXJz
KTtcblxuICB2YXIgdW5leHBlY3RlZEtleUNhY2hlID0gdm9pZCAwO1xuICBpZiAoZmFsc2UpIHtc
biAgICB1bmV4cGVjdGVkS2V5Q2FjaGUgPSB7fTtcbiAgfVxuXG4gIHZhciBzaGFwZUFzc2VydGlv
bkVycm9yID0gdm9pZCAwO1xuICB0cnkge1xuICAgIGFzc2VydFJlZHVjZXJTaGFwZShmaW5hbFJl
ZHVjZXJzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHNoYXBlQXNzZXJ0aW9uRXJyb3IgPSBlO1xu
ICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGNvbWJpbmF0aW9uKCkge1xuICAgIHZhciBzdGF0ZSA9
IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJn
dW1lbnRzWzBdIDoge307XG4gICAgdmFyIGFjdGlvbiA9IGFyZ3VtZW50c1sxXTtcblxuICAgIGlm
IChzaGFwZUFzc2VydGlvbkVycm9yKSB7XG4gICAgICB0aHJvdyBzaGFwZUFzc2VydGlvbkVycm9y
O1xuICAgIH1cblxuICAgIGlmIChmYWxzZSkge1xuICAgICAgdmFyIHdhcm5pbmdNZXNzYWdlID0g
Z2V0VW5leHBlY3RlZFN0YXRlU2hhcGVXYXJuaW5nTWVzc2FnZShzdGF0ZSwgZmluYWxSZWR1Y2Vy
cywgYWN0aW9uLCB1bmV4cGVjdGVkS2V5Q2FjaGUpO1xuICAgICAgaWYgKHdhcm5pbmdNZXNzYWdl
KSB7XG4gICAgICAgIHdhcm5pbmcod2FybmluZ01lc3NhZ2UpO1xuICAgICAgfVxuICAgIH1cblxu
ICAgIHZhciBoYXNDaGFuZ2VkID0gZmFsc2U7XG4gICAgdmFyIG5leHRTdGF0ZSA9IHt9O1xuICAg
IGZvciAodmFyIF9pID0gMDsgX2kgPCBmaW5hbFJlZHVjZXJLZXlzLmxlbmd0aDsgX2krKykge1xu
ICAgICAgdmFyIF9rZXkgPSBmaW5hbFJlZHVjZXJLZXlzW19pXTtcbiAgICAgIHZhciByZWR1Y2Vy
ID0gZmluYWxSZWR1Y2Vyc1tfa2V5XTtcbiAgICAgIHZhciBwcmV2aW91c1N0YXRlRm9yS2V5ID0g
c3RhdGVbX2tleV07XG4gICAgICB2YXIgbmV4dFN0YXRlRm9yS2V5ID0gcmVkdWNlcihwcmV2aW91
c1N0YXRlRm9yS2V5LCBhY3Rpb24pO1xuICAgICAgaWYgKHR5cGVvZiBuZXh0U3RhdGVGb3JLZXkg
PT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHZhciBlcnJvck1lc3NhZ2UgPSBnZXRVbmRlZmlu
ZWRTdGF0ZUVycm9yTWVzc2FnZShfa2V5LCBhY3Rpb24pO1xuICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoZXJyb3JNZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIG5leHRTdGF0ZVtfa2V5XSA9IG5leHRT
dGF0ZUZvcktleTtcbiAgICAgIGhhc0NoYW5nZWQgPSBoYXNDaGFuZ2VkIHx8IG5leHRTdGF0ZUZv
cktleSAhPT0gcHJldmlvdXNTdGF0ZUZvcktleTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc0NoYW5n
ZWQgPyBuZXh0U3RhdGUgOiBzdGF0ZTtcbiAgfTtcbn1cblxuLyoqKi8gfSksXG4vKiAyMDggKi9c
bi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19y
ZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRh
YmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiYVwiXSA9IGJpbmRBY3Rpb25DcmVhdG9ycztc
bmZ1bmN0aW9uIGJpbmRBY3Rpb25DcmVhdG9yKGFjdGlvbkNyZWF0b3IsIGRpc3BhdGNoKSB7XG4g
IHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoKGFjdGlvbkNyZWF0b3Iu
YXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBUdXJucyBh
biBvYmplY3Qgd2hvc2UgdmFsdWVzIGFyZSBhY3Rpb24gY3JlYXRvcnMsIGludG8gYW4gb2JqZWN0
IHdpdGggdGhlXG4gKiBzYW1lIGtleXMsIGJ1dCB3aXRoIGV2ZXJ5IGZ1bmN0aW9uIHdyYXBwZWQg
aW50byBhIGBkaXNwYXRjaGAgY2FsbCBzbyB0aGV5XG4gKiBtYXkgYmUgaW52b2tlZCBkaXJlY3Rs
eS4gVGhpcyBpcyBqdXN0IGEgY29udmVuaWVuY2UgbWV0aG9kLCBhcyB5b3UgY2FuIGNhbGxcbiAq
IGBzdG9yZS5kaXNwYXRjaChNeUFjdGlvbkNyZWF0b3JzLmRvU29tZXRoaW5nKCkpYCB5b3Vyc2Vs
ZiBqdXN0IGZpbmUuXG4gKlxuICogRm9yIGNvbnZlbmllbmNlLCB5b3UgY2FuIGFsc28gcGFzcyBh
IHNpbmdsZSBmdW5jdGlvbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQsXG4gKiBhbmQgZ2V0IGEgZnVu
Y3Rpb24gaW4gcmV0dXJuLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb258T2JqZWN0fSBhY3Rpb25D
cmVhdG9ycyBBbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGFyZSBhY3Rpb25cbiAqIGNyZWF0b3IgZnVu
Y3Rpb25zLiBPbmUgaGFuZHkgd2F5IHRvIG9idGFpbiBpdCBpcyB0byB1c2UgRVM2IGBpbXBvcnQg
KiBhc2BcbiAqIHN5bnRheC4gWW91IG1heSBhbHNvIHBhc3MgYSBzaW5nbGUgZnVuY3Rpb24uXG4g
KlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZGlzcGF0Y2ggVGhlIGBkaXNwYXRjaGAgZnVuY3Rpb24g
YXZhaWxhYmxlIG9uIHlvdXIgUmVkdXhcbiAqIHN0b3JlLlxuICpcbiAqIEByZXR1cm5zIHtGdW5j
dGlvbnxPYmplY3R9IFRoZSBvYmplY3QgbWltaWNraW5nIHRoZSBvcmlnaW5hbCBvYmplY3QsIGJ1
dCB3aXRoXG4gKiBldmVyeSBhY3Rpb24gY3JlYXRvciB3cmFwcGVkIGludG8gdGhlIGBkaXNwYXRj
aGAgY2FsbC4gSWYgeW91IHBhc3NlZCBhXG4gKiBmdW5jdGlvbiBhcyBgYWN0aW9uQ3JlYXRvcnNg
LCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYWxzbyBiZSBhIHNpbmdsZVxuICogZnVuY3Rpb24uXG4g
Ki9cbmZ1bmN0aW9uIGJpbmRBY3Rpb25DcmVhdG9ycyhhY3Rpb25DcmVhdG9ycywgZGlzcGF0Y2gp
IHtcbiAgaWYgKHR5cGVvZiBhY3Rpb25DcmVhdG9ycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJl
dHVybiBiaW5kQWN0aW9uQ3JlYXRvcihhY3Rpb25DcmVhdG9ycywgZGlzcGF0Y2gpO1xuICB9XG5c
biAgaWYgKHR5cGVvZiBhY3Rpb25DcmVhdG9ycyAhPT0gJ29iamVjdCcgfHwgYWN0aW9uQ3JlYXRv
cnMgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2JpbmRBY3Rpb25DcmVhdG9ycyBl
eHBlY3RlZCBhbiBvYmplY3Qgb3IgYSBmdW5jdGlvbiwgaW5zdGVhZCByZWNlaXZlZCAnICsgKGFj
dGlvbkNyZWF0b3JzID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGFjdGlvbkNyZWF0b3JzKSAr
ICcuICcgKyAnRGlkIHlvdSB3cml0ZSBcImltcG9ydCBBY3Rpb25DcmVhdG9ycyBmcm9tXCIgaW5z
dGVhZCBvZiBcImltcG9ydCAqIGFzIEFjdGlvbkNyZWF0b3JzIGZyb21cIj8nKTtcbiAgfVxuXG4g
IHZhciBrZXlzID0gT2JqZWN0LmtleXMoYWN0aW9uQ3JlYXRvcnMpO1xuICB2YXIgYm91bmRBY3Rp
b25DcmVhdG9ycyA9IHt9O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKysp
IHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICB2YXIgYWN0aW9uQ3JlYXRvciA9IGFjdGlv
bkNyZWF0b3JzW2tleV07XG4gICAgaWYgKHR5cGVvZiBhY3Rpb25DcmVhdG9yID09PSAnZnVuY3Rp
b24nKSB7XG4gICAgICBib3VuZEFjdGlvbkNyZWF0b3JzW2tleV0gPSBiaW5kQWN0aW9uQ3JlYXRv
cihhY3Rpb25DcmVhdG9yLCBkaXNwYXRjaCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBib3VuZEFj
dGlvbkNyZWF0b3JzO1xufVxuXG4vKioqLyB9KSxcbi8qIDIwOSAqL1xuLyoqKi8gKGZ1bmN0aW9u
KG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5c
InVzZSBzdHJpY3RcIjtcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCBkZWZhdWx0ICovXG4vKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb21wb3Nl
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg3KTtcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3Np
Z24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5s
ZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4g
c291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNl
LCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7
IH07XG5cblxuXG4vKipcbiAqIENyZWF0ZXMgYSBzdG9yZSBlbmhhbmNlciB0aGF0IGFwcGxpZXMg
bWlkZGxld2FyZSB0byB0aGUgZGlzcGF0Y2ggbWV0aG9kXG4gKiBvZiB0aGUgUmVkdXggc3RvcmUu
IFRoaXMgaXMgaGFuZHkgZm9yIGEgdmFyaWV0eSBvZiB0YXNrcywgc3VjaCBhcyBleHByZXNzaW5n
XG4gKiBhc3luY2hyb25vdXMgYWN0aW9ucyBpbiBhIGNvbmNpc2UgbWFubmVyLCBvciBsb2dnaW5n
IGV2ZXJ5IGFjdGlvbiBwYXlsb2FkLlxuICpcbiAqIFNlZSBgcmVkdXgtdGh1bmtgIHBhY2thZ2Ug
YXMgYW4gZXhhbXBsZSBvZiB0aGUgUmVkdXggbWlkZGxld2FyZS5cbiAqXG4gKiBCZWNhdXNlIG1p
ZGRsZXdhcmUgaXMgcG90ZW50aWFsbHkgYXN5bmNocm9ub3VzLCB0aGlzIHNob3VsZCBiZSB0aGUg
Zmlyc3RcbiAqIHN0b3JlIGVuaGFuY2VyIGluIHRoZSBjb21wb3NpdGlvbiBjaGFpbi5cbiAqXG4g
KiBOb3RlIHRoYXQgZWFjaCBtaWRkbGV3YXJlIHdpbGwgYmUgZ2l2ZW4gdGhlIGBkaXNwYXRjaGAg
YW5kIGBnZXRTdGF0ZWAgZnVuY3Rpb25zXG4gKiBhcyBuYW1lZCBhcmd1bWVudHMuXG4gKlxuICog
QHBhcmFtIHsuLi5GdW5jdGlvbn0gbWlkZGxld2FyZXMgVGhlIG1pZGRsZXdhcmUgY2hhaW4gdG8g
YmUgYXBwbGllZC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBzdG9yZSBlbmhhbmNlciBhcHBs
eWluZyB0aGUgbWlkZGxld2FyZS5cbiAqL1xuZnVuY3Rpb24gYXBwbHlNaWRkbGV3YXJlKCkge1xu
ICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgbWlkZGxld2FyZXMgPSBBcnJheShf
bGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBtaWRkbGV3YXJlc1tf
a2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoY3JlYXRl
U3RvcmUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBl
bmhhbmNlcikge1xuICAgICAgdmFyIHN0b3JlID0gY3JlYXRlU3RvcmUocmVkdWNlciwgcHJlbG9h
ZGVkU3RhdGUsIGVuaGFuY2VyKTtcbiAgICAgIHZhciBfZGlzcGF0Y2ggPSBzdG9yZS5kaXNwYXRj
aDtcbiAgICAgIHZhciBjaGFpbiA9IFtdO1xuXG4gICAgICB2YXIgbWlkZGxld2FyZUFQSSA9IHtc
biAgICAgICAgZ2V0U3RhdGU6IHN0b3JlLmdldFN0YXRlLFxuICAgICAgICBkaXNwYXRjaDogZnVu
Y3Rpb24gZGlzcGF0Y2goYWN0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIF9kaXNwYXRjaChhY3Rp
b24pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY2hhaW4gPSBtaWRkbGV3YXJlcy5tYXAo
ZnVuY3Rpb24gKG1pZGRsZXdhcmUpIHtcbiAgICAgICAgcmV0dXJuIG1pZGRsZXdhcmUobWlkZGxl
d2FyZUFQSSk7XG4gICAgICB9KTtcbiAgICAgIF9kaXNwYXRjaCA9IF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fY29tcG9zZV9fW1wiYVwiIC8qIGRlZmF1bHQgKi9dLmFwcGx5KHVuZGVmaW5l
ZCwgY2hhaW4pKHN0b3JlLmRpc3BhdGNoKTtcblxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBz
dG9yZSwge1xuICAgICAgICBkaXNwYXRjaDogX2Rpc3BhdGNoXG4gICAgICB9KTtcbiAgICB9O1xu
ICB9O1xufVxuXG4vKioqLyB9KSxcbi8qIDIxMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwg
X193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJp
Y3RcIjtcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCBjcmVhdGVQcm92aWRlciAqL1xuLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXyg5KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVf
Xy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fKTtcbi8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcHJvcF90eXBlc19fID0gX193
ZWJwYWNrX3JlcXVpcmVfXyg4OSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX3Byb3BfdHlwZXNfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVp
cmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9wcm9wX3R5cGVzX18pO1xuLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fdXRpbHNfUHJv
cFR5cGVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkwKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxzX3dhcm5pbmdfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oNDkpO1xuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBD
b25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0
aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIp
OyB9IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkg
eyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVl
biBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBj
YWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJm
dW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFz
cywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAm
JiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHBy
ZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9m
IHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJD
bGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3Vi
Q2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0
cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Qu
c2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19f
ID0gc3VwZXJDbGFzczsgfVxuXG5cblxuXG5cblxudmFyIGRpZFdhcm5BYm91dFJlY2VpdmluZ1N0
b3JlID0gZmFsc2U7XG5mdW5jdGlvbiB3YXJuQWJvdXRSZWNlaXZpbmdTdG9yZSgpIHtcbiAgaWYg
KGRpZFdhcm5BYm91dFJlY2VpdmluZ1N0b3JlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGRpZFdh
cm5BYm91dFJlY2VpdmluZ1N0b3JlID0gdHJ1ZTtcblxuICBPYmplY3QoX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX191dGlsc193YXJuaW5nX19bXCJhXCIgLyogZGVmYXVsdCAqL10pKCc8UHJv
dmlkZXI+IGRvZXMgbm90IHN1cHBvcnQgY2hhbmdpbmcgYHN0b3JlYCBvbiB0aGUgZmx5LiAnICsg
J0l0IGlzIG1vc3QgbGlrZWx5IHRoYXQgeW91IHNlZSB0aGlzIGVycm9yIGJlY2F1c2UgeW91IHVw
ZGF0ZWQgdG8gJyArICdSZWR1eCAyLnggYW5kIFJlYWN0IFJlZHV4IDIueCB3aGljaCBubyBsb25n
ZXIgaG90IHJlbG9hZCByZWR1Y2VycyAnICsgJ2F1dG9tYXRpY2FsbHkuIFNlZSBodHRwczovL2dp
dGh1Yi5jb20vcmVhY3Rqcy9yZWFjdC1yZWR1eC9yZWxlYXNlcy8nICsgJ3RhZy92Mi4wLjAgZm9y
IHRoZSBtaWdyYXRpb24gaW5zdHJ1Y3Rpb25zLicpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVQcm92
aWRlcigpIHtcbiAgdmFyIF9Qcm92aWRlciRjaGlsZENvbnRleDtcblxuICB2YXIgc3RvcmVLZXkg
PSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFy
Z3VtZW50c1swXSA6ICdzdG9yZSc7XG4gIHZhciBzdWJLZXkgPSBhcmd1bWVudHNbMV07XG5cbiAg
dmFyIHN1YnNjcmlwdGlvbktleSA9IHN1YktleSB8fCBzdG9yZUtleSArICdTdWJzY3JpcHRpb24n
O1xuXG4gIHZhciBQcm92aWRlciA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gICAgX2luaGVy
aXRzKFByb3ZpZGVyLCBfQ29tcG9uZW50KTtcblxuICAgIFByb3ZpZGVyLnByb3RvdHlwZS5nZXRD
aGlsZENvbnRleHQgPSBmdW5jdGlvbiBnZXRDaGlsZENvbnRleHQoKSB7XG4gICAgICB2YXIgX3Jl
ZjtcblxuICAgICAgcmV0dXJuIF9yZWYgPSB7fSwgX3JlZltzdG9yZUtleV0gPSB0aGlzW3N0b3Jl
S2V5XSwgX3JlZltzdWJzY3JpcHRpb25LZXldID0gbnVsbCwgX3JlZjtcbiAgICB9O1xuXG4gICAg
ZnVuY3Rpb24gUHJvdmlkZXIocHJvcHMsIGNvbnRleHQpIHtcbiAgICAgIF9jbGFzc0NhbGxDaGVj
ayh0aGlzLCBQcm92aWRlcik7XG5cbiAgICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVj
dG9yUmV0dXJuKHRoaXMsIF9Db21wb25lbnQuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkpO1xu
XG4gICAgICBfdGhpc1tzdG9yZUtleV0gPSBwcm9wcy5zdG9yZTtcbiAgICAgIHJldHVybiBfdGhp
cztcbiAgICB9XG5cbiAgICBQcm92aWRlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gcmVu
ZGVyKCkge1xuICAgICAgcmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9f
W1wiQ2hpbGRyZW5cIl0ub25seSh0aGlzLnByb3BzLmNoaWxkcmVuKTtcbiAgICB9O1xuXG4gICAg
cmV0dXJuIFByb3ZpZGVyO1xuICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9f
W1wiQ29tcG9uZW50XCJdKTtcblxuICBpZiAoZmFsc2UpIHtcbiAgICBQcm92aWRlci5wcm90b3R5
cGUuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9IGZ1bmN0aW9uIChuZXh0UHJvcHMpIHtcbiAg
ICAgIGlmICh0aGlzW3N0b3JlS2V5XSAhPT0gbmV4dFByb3BzLnN0b3JlKSB7XG4gICAgICAgIHdh
cm5BYm91dFJlY2VpdmluZ1N0b3JlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIFByb3Zp
ZGVyLnByb3BUeXBlcyA9IHtcbiAgICBzdG9yZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X191dGlsc19Qcm9wVHlwZXNfX1tcImFcIiAvKiBzdG9yZVNoYXBlICovXS5pc1JlcXVpcmVkLFxu
ICAgIGNoaWxkcmVuOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcHJvcF90eXBlc19fX2Rl
ZmF1bHQuYS5lbGVtZW50LmlzUmVxdWlyZWRcbiAgfTtcbiAgUHJvdmlkZXIuY2hpbGRDb250ZXh0
VHlwZXMgPSAoX1Byb3ZpZGVyJGNoaWxkQ29udGV4ID0ge30sIF9Qcm92aWRlciRjaGlsZENvbnRl
eFtzdG9yZUtleV0gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3V0aWxzX1Byb3BUeXBl
c19fW1wiYVwiIC8qIHN0b3JlU2hhcGUgKi9dLmlzUmVxdWlyZWQsIF9Qcm92aWRlciRjaGlsZENv
bnRleFtzdWJzY3JpcHRpb25LZXldID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGls
c19Qcm9wVHlwZXNfX1tcImJcIiAvKiBzdWJzY3JpcHRpb25TaGFwZSAqL10sIF9Qcm92aWRlciRj
aGlsZENvbnRleCk7XG5cbiAgcmV0dXJuIFByb3ZpZGVyO1xufVxuXG4vKiBoYXJtb255IGRlZmF1
bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gKGNyZWF0ZVByb3ZpZGVy
KCkpO1xuXG4vKioqLyB9KSxcbi8qIDIxMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhw
b3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qKlxuICog
Q29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNE
LXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qg
ZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9m
IHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNh
bWUgZGlyZWN0b3J5LlxuICovXG5cblxuXG52YXIgZW1wdHlGdW5jdGlvbiA9IF9fd2VicGFja19y
ZXF1aXJlX18oNik7XG52YXIgaW52YXJpYW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZh
ciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IF9fd2VicGFja19yZXF1aXJlX18oNTcpO1xuXG5tb2R1
bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBzaGltKHByb3BzLCBwcm9wTmFt
ZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAg
aWYgKHNlY3JldCA9PT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtcbiAgICAgIC8vIEl0IGlzIHN0
aWxsIHNhZmUgd2hlbiBjYWxsZWQgZnJvbSBSZWFjdC5cbiAgICAgIHJldHVybjtcbiAgICB9XG4g
ICAgaW52YXJpYW50KFxuICAgICAgZmFsc2UsXG4gICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFs
aWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFj
a2FnZS4gJyArXG4gICAgICAnVXNlIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpIHRvIGNhbGwg
dGhlbS4gJyArXG4gICAgICAnUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJv
cC10eXBlcydcbiAgICApO1xuICB9O1xuICBzaGltLmlzUmVxdWlyZWQgPSBzaGltO1xuICBmdW5j
dGlvbiBnZXRTaGltKCkge1xuICAgIHJldHVybiBzaGltO1xuICB9O1xuICAvLyBJbXBvcnRhbnQh
XG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4g
YC4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanNgLlxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7
XG4gICAgYXJyYXk6IHNoaW0sXG4gICAgYm9vbDogc2hpbSxcbiAgICBmdW5jOiBzaGltLFxuICAg
IG51bWJlcjogc2hpbSxcbiAgICBvYmplY3Q6IHNoaW0sXG4gICAgc3RyaW5nOiBzaGltLFxuICAg
IHN5bWJvbDogc2hpbSxcblxuICAgIGFueTogc2hpbSxcbiAgICBhcnJheU9mOiBnZXRTaGltLFxu
ICAgIGVsZW1lbnQ6IHNoaW0sXG4gICAgaW5zdGFuY2VPZjogZ2V0U2hpbSxcbiAgICBub2RlOiBz
aGltLFxuICAgIG9iamVjdE9mOiBnZXRTaGltLFxuICAgIG9uZU9mOiBnZXRTaGltLFxuICAgIG9u
ZU9mVHlwZTogZ2V0U2hpbSxcbiAgICBzaGFwZTogZ2V0U2hpbVxuICB9O1xuXG4gIFJlYWN0UHJv
cFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gZW1wdHlGdW5jdGlvbjtcbiAgUmVhY3RQcm9wVHlwZXMu
UHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XG5cbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xu
fTtcblxuXG4vKioqLyB9KSxcbi8qIDIxMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhw
b3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qKlxuICog
Q29weXJpZ2h0IDIwMTUsIFlhaG9vISBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVy
IHRoZSBOZXcgQlNEIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBm
b3IgdGVybXMuXG4gKi9cblxuXG52YXIgUkVBQ1RfU1RBVElDUyA9IHtcbiAgICBjaGlsZENvbnRl
eHRUeXBlczogdHJ1ZSxcbiAgICBjb250ZXh0VHlwZXM6IHRydWUsXG4gICAgZGVmYXVsdFByb3Bz
OiB0cnVlLFxuICAgIGRpc3BsYXlOYW1lOiB0cnVlLFxuICAgIGdldERlZmF1bHRQcm9wczogdHJ1
ZSxcbiAgICBtaXhpbnM6IHRydWUsXG4gICAgcHJvcFR5cGVzOiB0cnVlLFxuICAgIHR5cGU6IHRy
dWVcbn07XG5cbnZhciBLTk9XTl9TVEFUSUNTID0ge1xuICBuYW1lOiB0cnVlLFxuICBsZW5ndGg6
IHRydWUsXG4gIHByb3RvdHlwZTogdHJ1ZSxcbiAgY2FsbGVyOiB0cnVlLFxuICBjYWxsZWU6IHRy
dWUsXG4gIGFyZ3VtZW50czogdHJ1ZSxcbiAgYXJpdHk6IHRydWVcbn07XG5cbnZhciBkZWZpbmVQ
cm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVz
ID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xz
ID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGdldFByb3RvdHlw
ZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xudmFyIG9iamVjdFByb3RvdHlwZSA9IGdldFBy
b3RvdHlwZU9mICYmIGdldFByb3RvdHlwZU9mKE9iamVjdCk7XG5cbm1vZHVsZS5leHBvcnRzID0g
ZnVuY3Rpb24gaG9pc3ROb25SZWFjdFN0YXRpY3ModGFyZ2V0Q29tcG9uZW50LCBzb3VyY2VDb21w
b25lbnQsIGJsYWNrbGlzdCkge1xuICAgIGlmICh0eXBlb2Ygc291cmNlQ29tcG9uZW50ICE9PSAn
c3RyaW5nJykgeyAvLyBkb24ndCBob2lzdCBvdmVyIHN0cmluZyAoaHRtbCkgY29tcG9uZW50c1xu
XG4gICAgICAgIGlmIChvYmplY3RQcm90b3R5cGUpIHtcbiAgICAgICAgICAgIHZhciBpbmhlcml0
ZWRDb21wb25lbnQgPSBnZXRQcm90b3R5cGVPZihzb3VyY2VDb21wb25lbnQpO1xuICAgICAgICAg
ICAgaWYgKGluaGVyaXRlZENvbXBvbmVudCAmJiBpbmhlcml0ZWRDb21wb25lbnQgIT09IG9iamVj
dFByb3RvdHlwZSkge1xuICAgICAgICAgICAgICAgIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdl
dENvbXBvbmVudCwgaW5oZXJpdGVkQ29tcG9uZW50LCBibGFja2xpc3QpO1xuICAgICAgICAgICAg
fVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKHNv
dXJjZUNvbXBvbmVudCk7XG5cbiAgICAgICAgaWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xu
ICAgICAgICAgICAga2V5cyA9IGtleXMuY29uY2F0KGdldE93blByb3BlcnR5U3ltYm9scyhzb3Vy
Y2VDb21wb25lbnQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
a2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAg
ICAgICAgICBpZiAoIVJFQUNUX1NUQVRJQ1Nba2V5XSAmJiAhS05PV05fU1RBVElDU1trZXldICYm
ICghYmxhY2tsaXN0IHx8ICFibGFja2xpc3Rba2V5XSkpIHtcbiAgICAgICAgICAgICAgICB2YXIg
ZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2VDb21wb25lbnQsIGtl
eSk7XG4gICAgICAgICAgICAgICAgdHJ5IHsgLy8gQXZvaWQgZmFpbHVyZXMgZnJvbSByZWFkLW9u
bHkgcHJvcGVydGllc1xuICAgICAgICAgICAgICAgICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXRD
b21wb25lbnQsIGtleSwgZGVzY3JpcHRvcik7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkg
e31cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0YXJnZXRDb21w
b25lbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldENvbXBvbmVudDtcbn07XG5cblxuLyoq
Ki8gfSksXG4vKiAyMTMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2Vi
cGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIENvcHlyaWdodCAy
MDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAq
IFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNl
IGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0
aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRz
IGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5c
biAqL1xuXG5cblxuLyoqXG4gKiBVc2UgaW52YXJpYW50KCkgdG8gYXNzZXJ0IHN0YXRlIHdoaWNo
IHlvdXIgcHJvZ3JhbSBhc3N1bWVzIHRvIGJlIHRydWUuXG4gKlxuICogUHJvdmlkZSBzcHJpbnRm
LXN0eWxlIGZvcm1hdCAob25seSAlcyBpcyBzdXBwb3J0ZWQpIGFuZCBhcmd1bWVudHNcbiAqIHRv
IHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBicm9rZSBhbmQgd2hhdCB5b3Ugd2VyZVxu
ICogZXhwZWN0aW5nLlxuICpcbiAqIFRoZSBpbnZhcmlhbnQgbWVzc2FnZSB3aWxsIGJlIHN0cmlw
cGVkIGluIHByb2R1Y3Rpb24sIGJ1dCB0aGUgaW52YXJpYW50XG4gKiB3aWxsIHJlbWFpbiB0byBl
bnN1cmUgbG9naWMgZG9lcyBub3QgZGlmZmVyIGluIHByb2R1Y3Rpb24uXG4gKi9cblxudmFyIGlu
dmFyaWFudCA9IGZ1bmN0aW9uKGNvbmRpdGlvbiwgZm9ybWF0LCBhLCBiLCBjLCBkLCBlLCBmKSB7
XG4gIGlmIChmYWxzZSkge1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAg
dGhyb3cgbmV3IEVycm9yKCdpbnZhcmlhbnQgcmVxdWlyZXMgYW4gZXJyb3IgbWVzc2FnZSBhcmd1
bWVudCcpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghY29uZGl0aW9uKSB7XG4gICAgdmFyIGVycm9y
O1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZXJyb3IgPSBuZXcgRXJy
b3IoXG4gICAgICAgICdNaW5pZmllZCBleGNlcHRpb24gb2NjdXJyZWQ7IHVzZSB0aGUgbm9uLW1p
bmlmaWVkIGRldiBlbnZpcm9ubWVudCAnICtcbiAgICAgICAgJ2ZvciB0aGUgZnVsbCBlcnJvciBt
ZXNzYWdlIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuJ1xuICAgICAgKTtcbiAgICB9
IGVsc2Uge1xuICAgICAgdmFyIGFyZ3MgPSBbYSwgYiwgYywgZCwgZSwgZl07XG4gICAgICB2YXIg
YXJnSW5kZXggPSAwO1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgIGZvcm1hdC5y
ZXBsYWNlKC8lcy9nLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107IH0pXG4g
ICAgICApO1xuICAgICAgZXJyb3IubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICB9
XG5cbiAgICBlcnJvci5mcmFtZXNUb1BvcCA9IDE7IC8vIHdlIGRvbid0IGNhcmUgYWJvdXQgaW52
YXJpYW50J3Mgb3duIGZyYW1lXG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbm1vZHVsZS5l
eHBvcnRzID0gaW52YXJpYW50O1xuXG5cbi8qKiovIH0pLFxuLyogMjE0ICovXG4vKioqLyAoZnVu
Y3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7
XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImFcIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBTdWJzY3JpcHRpb247IH0pO1xuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3Rh
bmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9y
KSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0
aW9uXCIpOyB9IH1cblxuLy8gZW5jYXBzdWxhdGVzIHRoZSBzdWJzY3JpcHRpb24gbG9naWMgZm9y
IGNvbm5lY3RpbmcgYSBjb21wb25lbnQgdG8gdGhlIHJlZHV4IHN0b3JlLCBhc1xuLy8gd2VsbCBh
cyBuZXN0aW5nIHN1YnNjcmlwdGlvbnMgb2YgZGVzY2VuZGFudCBjb21wb25lbnRzLCBzbyB0aGF0
IHdlIGNhbiBlbnN1cmUgdGhlXG4vLyBhbmNlc3RvciBjb21wb25lbnRzIHJlLXJlbmRlciBiZWZv
cmUgZGVzY2VuZGFudHNcblxudmFyIENMRUFSRUQgPSBudWxsO1xudmFyIG51bGxMaXN0ZW5lcnMg
PSB7XG4gIG5vdGlmeTogZnVuY3Rpb24gbm90aWZ5KCkge31cbn07XG5cbmZ1bmN0aW9uIGNyZWF0
ZUxpc3RlbmVyQ29sbGVjdGlvbigpIHtcbiAgLy8gdGhlIGN1cnJlbnQvbmV4dCBwYXR0ZXJuIGlz
IGNvcGllZCBmcm9tIHJlZHV4J3MgY3JlYXRlU3RvcmUgY29kZS5cbiAgLy8gVE9ETzogcmVmYWN0
b3IrZXhwb3NlIHRoYXQgY29kZSB0byBiZSByZXVzYWJsZSBoZXJlP1xuICB2YXIgY3VycmVudCA9
IFtdO1xuICB2YXIgbmV4dCA9IFtdO1xuXG4gIHJldHVybiB7XG4gICAgY2xlYXI6IGZ1bmN0aW9u
IGNsZWFyKCkge1xuICAgICAgbmV4dCA9IENMRUFSRUQ7XG4gICAgICBjdXJyZW50ID0gQ0xFQVJF
RDtcbiAgICB9LFxuICAgIG5vdGlmeTogZnVuY3Rpb24gbm90aWZ5KCkge1xuICAgICAgdmFyIGxp
c3RlbmVycyA9IGN1cnJlbnQgPSBuZXh0O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0
ZW5lcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGlzdGVuZXJzW2ldKCk7XG4gICAgICB9XG4g
ICAgfSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBuZXh0O1xuICAg
IH0sXG4gICAgc3Vic2NyaWJlOiBmdW5jdGlvbiBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICAg
IHZhciBpc1N1YnNjcmliZWQgPSB0cnVlO1xuICAgICAgaWYgKG5leHQgPT09IGN1cnJlbnQpIG5l
eHQgPSBjdXJyZW50LnNsaWNlKCk7XG4gICAgICBuZXh0LnB1c2gobGlzdGVuZXIpO1xuXG4gICAg
ICByZXR1cm4gZnVuY3Rpb24gdW5zdWJzY3JpYmUoKSB7XG4gICAgICAgIGlmICghaXNTdWJzY3Jp
YmVkIHx8IGN1cnJlbnQgPT09IENMRUFSRUQpIHJldHVybjtcbiAgICAgICAgaXNTdWJzY3JpYmVk
ID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKG5leHQgPT09IGN1cnJlbnQpIG5leHQgPSBjdXJyZW50
LnNsaWNlKCk7XG4gICAgICAgIG5leHQuc3BsaWNlKG5leHQuaW5kZXhPZihsaXN0ZW5lciksIDEp
O1xuICAgICAgfTtcbiAgICB9XG4gIH07XG59XG5cbnZhciBTdWJzY3JpcHRpb24gPSBmdW5jdGlv
biAoKSB7XG4gIGZ1bmN0aW9uIFN1YnNjcmlwdGlvbihzdG9yZSwgcGFyZW50U3ViLCBvblN0YXRl
Q2hhbmdlKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN1YnNjcmlwdGlvbik7XG5cbiAg
ICB0aGlzLnN0b3JlID0gc3RvcmU7XG4gICAgdGhpcy5wYXJlbnRTdWIgPSBwYXJlbnRTdWI7XG4g
ICAgdGhpcy5vblN0YXRlQ2hhbmdlID0gb25TdGF0ZUNoYW5nZTtcbiAgICB0aGlzLnVuc3Vic2Ny
aWJlID0gbnVsbDtcbiAgICB0aGlzLmxpc3RlbmVycyA9IG51bGxMaXN0ZW5lcnM7XG4gIH1cblxu
ICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLmFkZE5lc3RlZFN1YiA9IGZ1bmN0aW9uIGFkZE5lc3Rl
ZFN1YihsaXN0ZW5lcikge1xuICAgIHRoaXMudHJ5U3Vic2NyaWJlKCk7XG4gICAgcmV0dXJuIHRo
aXMubGlzdGVuZXJzLnN1YnNjcmliZShsaXN0ZW5lcik7XG4gIH07XG5cbiAgU3Vic2NyaXB0aW9u
LnByb3RvdHlwZS5ub3RpZnlOZXN0ZWRTdWJzID0gZnVuY3Rpb24gbm90aWZ5TmVzdGVkU3Vicygp
IHtcbiAgICB0aGlzLmxpc3RlbmVycy5ub3RpZnkoKTtcbiAgfTtcblxuICBTdWJzY3JpcHRpb24u
cHJvdG90eXBlLmlzU3Vic2NyaWJlZCA9IGZ1bmN0aW9uIGlzU3Vic2NyaWJlZCgpIHtcbiAgICBy
ZXR1cm4gQm9vbGVhbih0aGlzLnVuc3Vic2NyaWJlKTtcbiAgfTtcblxuICBTdWJzY3JpcHRpb24u
cHJvdG90eXBlLnRyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIHRyeVN1YnNjcmliZSgpIHtcbiAgICBp
ZiAoIXRoaXMudW5zdWJzY3JpYmUpIHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUgPSB0aGlzLnBh
cmVudFN1YiA/IHRoaXMucGFyZW50U3ViLmFkZE5lc3RlZFN1Yih0aGlzLm9uU3RhdGVDaGFuZ2Up
IDogdGhpcy5zdG9yZS5zdWJzY3JpYmUodGhpcy5vblN0YXRlQ2hhbmdlKTtcblxuICAgICAgdGhp
cy5saXN0ZW5lcnMgPSBjcmVhdGVMaXN0ZW5lckNvbGxlY3Rpb24oKTtcbiAgICB9XG4gIH07XG5c
biAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS50cnlVbnN1YnNjcmliZSA9IGZ1bmN0aW9uIHRyeVVu
c3Vic2NyaWJlKCkge1xuICAgIGlmICh0aGlzLnVuc3Vic2NyaWJlKSB7XG4gICAgICB0aGlzLnVu
c3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlID0gbnVsbDtcbiAgICAgIHRoaXMu
bGlzdGVuZXJzLmNsZWFyKCk7XG4gICAgICB0aGlzLmxpc3RlbmVycyA9IG51bGxMaXN0ZW5lcnM7
XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBTdWJzY3JpcHRpb247XG59KCk7XG5cblxuXG4vKioq
LyB9KSxcbi8qIDIxNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9y
dHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIHVudXNl
ZCBoYXJtb255IGV4cG9ydCBjcmVhdGVDb25uZWN0ICovXG4vKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb21wb25lbnRzX2Nvbm5lY3RBZHZhbmNl
ZF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5MSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX191dGlsc19zaGFsbG93RXF1YWxfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oMjE2KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX21hcERpc3BhdGNoVG9Qcm9wc19fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygyMTcpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fbWFwU3RhdGVUb1Byb3BzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxOCk7XG4v
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19tZXJn
ZVByb3BzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxOSk7XG4vKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19zZWxlY3RvckZhY3RvcnlfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oMjIwKTtcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwg
ZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7
IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNl
KSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkp
KSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5c
bmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdl
dCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNv
bnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkp
KSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuXG5c
blxuXG5cblxuXG4vKlxuICBjb25uZWN0IGlzIGEgZmFjYWRlIG92ZXIgY29ubmVjdEFkdmFuY2Vk
LiBJdCB0dXJucyBpdHMgYXJncyBpbnRvIGEgY29tcGF0aWJsZVxuICBzZWxlY3RvckZhY3Rvcnks
IHdoaWNoIGhhcyB0aGUgc2lnbmF0dXJlOlxuXG4gICAgKGRpc3BhdGNoLCBvcHRpb25zKSA9PiAo
bmV4dFN0YXRlLCBuZXh0T3duUHJvcHMpID0+IG5leHRGaW5hbFByb3BzXG4gIFxuICBjb25uZWN0
IHBhc3NlcyBpdHMgYXJncyB0byBjb25uZWN0QWR2YW5jZWQgYXMgb3B0aW9ucywgd2hpY2ggd2ls
bCBpbiB0dXJuIHBhc3MgdGhlbSB0b1xuICBzZWxlY3RvckZhY3RvcnkgZWFjaCB0aW1lIGEgQ29u
bmVjdCBjb21wb25lbnQgaW5zdGFuY2UgaXMgaW5zdGFudGlhdGVkIG9yIGhvdCByZWxvYWRlZC5c
blxuICBzZWxlY3RvckZhY3RvcnkgcmV0dXJucyBhIGZpbmFsIHByb3BzIHNlbGVjdG9yIGZyb20g
aXRzIG1hcFN0YXRlVG9Qcm9wcyxcbiAgbWFwU3RhdGVUb1Byb3BzRmFjdG9yaWVzLCBtYXBEaXNw
YXRjaFRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcmllcywgbWVyZ2VQcm9wcyxcbiAg
bWVyZ2VQcm9wc0ZhY3RvcmllcywgYW5kIHB1cmUgYXJncy5cblxuICBUaGUgcmVzdWx0aW5nIGZp
bmFsIHByb3BzIHNlbGVjdG9yIGlzIGNhbGxlZCBieSB0aGUgQ29ubmVjdCBjb21wb25lbnQgaW5z
dGFuY2Ugd2hlbmV2ZXJcbiAgaXQgcmVjZWl2ZXMgbmV3IHByb3BzIG9yIHN0b3JlIHN0YXRlLlxu
ICovXG5cbmZ1bmN0aW9uIG1hdGNoKGFyZywgZmFjdG9yaWVzLCBuYW1lKSB7XG4gIGZvciAodmFy
IGkgPSBmYWN0b3JpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgcmVzdWx0
ID0gZmFjdG9yaWVzW2ldKGFyZyk7XG4gICAgaWYgKHJlc3VsdCkgcmV0dXJuIHJlc3VsdDtcbiAg
fVxuXG4gIHJldHVybiBmdW5jdGlvbiAoZGlzcGF0Y2gsIG9wdGlvbnMpIHtcbiAgICB0aHJvdyBu
ZXcgRXJyb3IoJ0ludmFsaWQgdmFsdWUgb2YgdHlwZSAnICsgdHlwZW9mIGFyZyArICcgZm9yICcg
KyBuYW1lICsgJyBhcmd1bWVudCB3aGVuIGNvbm5lY3RpbmcgY29tcG9uZW50ICcgKyBvcHRpb25z
LndyYXBwZWRDb21wb25lbnROYW1lICsgJy4nKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3RyaWN0
RXF1YWwoYSwgYikge1xuICByZXR1cm4gYSA9PT0gYjtcbn1cblxuLy8gY3JlYXRlQ29ubmVjdCB3
aXRoIGRlZmF1bHQgYXJncyBidWlsZHMgdGhlICdvZmZpY2lhbCcgY29ubmVjdCBiZWhhdmlvci4g
Q2FsbGluZyBpdCB3aXRoXG4vLyBkaWZmZXJlbnQgb3B0aW9ucyBvcGVucyB1cCBzb21lIHRlc3Rp
bmcgYW5kIGV4dGVuc2liaWxpdHkgc2NlbmFyaW9zXG5mdW5jdGlvbiBjcmVhdGVDb25uZWN0KCkg
e1xuICB2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0g
dW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge30sXG4gICAgICBfcmVmJGNvbm5lY3RIT0MgPSBf
cmVmLmNvbm5lY3RIT0MsXG4gICAgICBjb25uZWN0SE9DID0gX3JlZiRjb25uZWN0SE9DID09PSB1
bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvbXBvbmVudHNfY29ubmVj
dEFkdmFuY2VkX19bXCJhXCIgLyogZGVmYXVsdCAqL10gOiBfcmVmJGNvbm5lY3RIT0MsXG4gICAg
ICBfcmVmJG1hcFN0YXRlVG9Qcm9wc0YgPSBfcmVmLm1hcFN0YXRlVG9Qcm9wc0ZhY3Rvcmllcyxc
biAgICAgIG1hcFN0YXRlVG9Qcm9wc0ZhY3RvcmllcyA9IF9yZWYkbWFwU3RhdGVUb1Byb3BzRiA9
PT0gdW5kZWZpbmVkID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19tYXBTdGF0ZVRvUHJv
cHNfX1tcImFcIiAvKiBkZWZhdWx0ICovXSA6IF9yZWYkbWFwU3RhdGVUb1Byb3BzRixcbiAgICAg
IF9yZWYkbWFwRGlzcGF0Y2hUb1BybyA9IF9yZWYubWFwRGlzcGF0Y2hUb1Byb3BzRmFjdG9yaWVz
LFxuICAgICAgbWFwRGlzcGF0Y2hUb1Byb3BzRmFjdG9yaWVzID0gX3JlZiRtYXBEaXNwYXRjaFRv
UHJvID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX21hcERpc3Bh
dGNoVG9Qcm9wc19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dIDogX3JlZiRtYXBEaXNwYXRjaFRvUHJv
LFxuICAgICAgX3JlZiRtZXJnZVByb3BzRmFjdG9yID0gX3JlZi5tZXJnZVByb3BzRmFjdG9yaWVz
LFxuICAgICAgbWVyZ2VQcm9wc0ZhY3RvcmllcyA9IF9yZWYkbWVyZ2VQcm9wc0ZhY3RvciA9PT0g
dW5kZWZpbmVkID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19tZXJnZVByb3BzX19bXCJh
XCIgLyogZGVmYXVsdCAqL10gOiBfcmVmJG1lcmdlUHJvcHNGYWN0b3IsXG4gICAgICBfcmVmJHNl
bGVjdG9yRmFjdG9yeSA9IF9yZWYuc2VsZWN0b3JGYWN0b3J5LFxuICAgICAgc2VsZWN0b3JGYWN0
b3J5ID0gX3JlZiRzZWxlY3RvckZhY3RvcnkgPT09IHVuZGVmaW5lZCA/IF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNV9fc2VsZWN0b3JGYWN0b3J5X19bXCJhXCIgLyogZGVmYXVsdCAqL10gOiBf
cmVmJHNlbGVjdG9yRmFjdG9yeTtcblxuICByZXR1cm4gZnVuY3Rpb24gY29ubmVjdChtYXBTdGF0
ZVRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wcywgbWVyZ2VQcm9wcykge1xuICAgIHZhciBfcmVm
MiA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8g
YXJndW1lbnRzWzNdIDoge30sXG4gICAgICAgIF9yZWYyJHB1cmUgPSBfcmVmMi5wdXJlLFxuICAg
ICAgICBwdXJlID0gX3JlZjIkcHVyZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IF9yZWYyJHB1cmUs
XG4gICAgICAgIF9yZWYyJGFyZVN0YXRlc0VxdWFsID0gX3JlZjIuYXJlU3RhdGVzRXF1YWwsXG4g
ICAgICAgIGFyZVN0YXRlc0VxdWFsID0gX3JlZjIkYXJlU3RhdGVzRXF1YWwgPT09IHVuZGVmaW5l
ZCA/IHN0cmljdEVxdWFsIDogX3JlZjIkYXJlU3RhdGVzRXF1YWwsXG4gICAgICAgIF9yZWYyJGFy
ZU93blByb3BzRXF1YSA9IF9yZWYyLmFyZU93blByb3BzRXF1YWwsXG4gICAgICAgIGFyZU93blBy
b3BzRXF1YWwgPSBfcmVmMiRhcmVPd25Qcm9wc0VxdWEgPT09IHVuZGVmaW5lZCA/IF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fdXRpbHNfc2hhbGxvd0VxdWFsX19bXCJhXCIgLyogZGVmYXVs
dCAqL10gOiBfcmVmMiRhcmVPd25Qcm9wc0VxdWEsXG4gICAgICAgIF9yZWYyJGFyZVN0YXRlUHJv
cHNFcSA9IF9yZWYyLmFyZVN0YXRlUHJvcHNFcXVhbCxcbiAgICAgICAgYXJlU3RhdGVQcm9wc0Vx
dWFsID0gX3JlZjIkYXJlU3RhdGVQcm9wc0VxID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX3V0aWxzX3NoYWxsb3dFcXVhbF9fW1wiYVwiIC8qIGRlZmF1bHQgKi9d
IDogX3JlZjIkYXJlU3RhdGVQcm9wc0VxLFxuICAgICAgICBfcmVmMiRhcmVNZXJnZWRQcm9wc0Ug
PSBfcmVmMi5hcmVNZXJnZWRQcm9wc0VxdWFsLFxuICAgICAgICBhcmVNZXJnZWRQcm9wc0VxdWFs
ID0gX3JlZjIkYXJlTWVyZ2VkUHJvcHNFID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX3V0aWxzX3NoYWxsb3dFcXVhbF9fW1wiYVwiIC8qIGRlZmF1bHQgKi9dIDog
X3JlZjIkYXJlTWVyZ2VkUHJvcHNFLFxuICAgICAgICBleHRyYU9wdGlvbnMgPSBfb2JqZWN0V2l0
aG91dFByb3BlcnRpZXMoX3JlZjIsIFsncHVyZScsICdhcmVTdGF0ZXNFcXVhbCcsICdhcmVPd25Q
cm9wc0VxdWFsJywgJ2FyZVN0YXRlUHJvcHNFcXVhbCcsICdhcmVNZXJnZWRQcm9wc0VxdWFsJ10p
O1xuXG4gICAgdmFyIGluaXRNYXBTdGF0ZVRvUHJvcHMgPSBtYXRjaChtYXBTdGF0ZVRvUHJvcHMs
IG1hcFN0YXRlVG9Qcm9wc0ZhY3RvcmllcywgJ21hcFN0YXRlVG9Qcm9wcycpO1xuICAgIHZhciBp
bml0TWFwRGlzcGF0Y2hUb1Byb3BzID0gbWF0Y2gobWFwRGlzcGF0Y2hUb1Byb3BzLCBtYXBEaXNw
YXRjaFRvUHJvcHNGYWN0b3JpZXMsICdtYXBEaXNwYXRjaFRvUHJvcHMnKTtcbiAgICB2YXIgaW5p
dE1lcmdlUHJvcHMgPSBtYXRjaChtZXJnZVByb3BzLCBtZXJnZVByb3BzRmFjdG9yaWVzLCAnbWVy
Z2VQcm9wcycpO1xuXG4gICAgcmV0dXJuIGNvbm5lY3RIT0Moc2VsZWN0b3JGYWN0b3J5LCBfZXh0
ZW5kcyh7XG4gICAgICAvLyB1c2VkIGluIGVycm9yIG1lc3NhZ2VzXG4gICAgICBtZXRob2ROYW1l
OiAnY29ubmVjdCcsXG5cbiAgICAgIC8vIHVzZWQgdG8gY29tcHV0ZSBDb25uZWN0J3MgZGlzcGxh
eU5hbWUgZnJvbSB0aGUgd3JhcHBlZCBjb21wb25lbnQncyBkaXNwbGF5TmFtZS5cbiAgICAgIGdl
dERpc3BsYXlOYW1lOiBmdW5jdGlvbiBnZXREaXNwbGF5TmFtZShuYW1lKSB7XG4gICAgICAgIHJl
dHVybiAnQ29ubmVjdCgnICsgbmFtZSArICcpJztcbiAgICAgIH0sXG5cbiAgICAgIC8vIGlmIG1h
cFN0YXRlVG9Qcm9wcyBpcyBmYWxzeSwgdGhlIENvbm5lY3QgY29tcG9uZW50IGRvZXNuJ3Qgc3Vi
c2NyaWJlIHRvIHN0b3JlIHN0YXRlIGNoYW5nZXNcbiAgICAgIHNob3VsZEhhbmRsZVN0YXRlQ2hh
bmdlczogQm9vbGVhbihtYXBTdGF0ZVRvUHJvcHMpLFxuXG4gICAgICAvLyBwYXNzZWQgdGhyb3Vn
aCB0byBzZWxlY3RvckZhY3RvcnlcbiAgICAgIGluaXRNYXBTdGF0ZVRvUHJvcHM6IGluaXRNYXBT
dGF0ZVRvUHJvcHMsXG4gICAgICBpbml0TWFwRGlzcGF0Y2hUb1Byb3BzOiBpbml0TWFwRGlzcGF0
Y2hUb1Byb3BzLFxuICAgICAgaW5pdE1lcmdlUHJvcHM6IGluaXRNZXJnZVByb3BzLFxuICAgICAg
cHVyZTogcHVyZSxcbiAgICAgIGFyZVN0YXRlc0VxdWFsOiBhcmVTdGF0ZXNFcXVhbCxcbiAgICAg
IGFyZU93blByb3BzRXF1YWw6IGFyZU93blByb3BzRXF1YWwsXG4gICAgICBhcmVTdGF0ZVByb3Bz
RXF1YWw6IGFyZVN0YXRlUHJvcHNFcXVhbCxcbiAgICAgIGFyZU1lcmdlZFByb3BzRXF1YWw6IGFy
ZU1lcmdlZFByb3BzRXF1YWxcblxuICAgIH0sIGV4dHJhT3B0aW9ucykpO1xuICB9O1xufVxuXG4v
KiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0g
KGNyZWF0ZUNvbm5lY3QoKSk7XG5cbi8qKiovIH0pLFxuLyogMjE2ICovXG4vKioqLyAoZnVuY3Rp
b24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5c
blwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJw
YWNrX2V4cG9ydHNfX1tcImFcIl0gPSBzaGFsbG93RXF1YWw7XG52YXIgaGFzT3duID0gT2JqZWN0
LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuZnVuY3Rpb24gaXMoeCwgeSkge1xuICBpZiAo
eCA9PT0geSkge1xuICAgIHJldHVybiB4ICE9PSAwIHx8IHkgIT09IDAgfHwgMSAvIHggPT09IDEg
LyB5O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB4ICE9PSB4ICYmIHkgIT09IHk7XG4gIH1cbn1c
blxuZnVuY3Rpb24gc2hhbGxvd0VxdWFsKG9iakEsIG9iakIpIHtcbiAgaWYgKGlzKG9iakEsIG9i
akIpKSByZXR1cm4gdHJ1ZTtcblxuICBpZiAodHlwZW9mIG9iakEgIT09ICdvYmplY3QnIHx8IG9i
akEgPT09IG51bGwgfHwgdHlwZW9mIG9iakIgIT09ICdvYmplY3QnIHx8IG9iakIgPT09IG51bGwp
IHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIga2V5c0EgPSBPYmplY3Qua2V5cyhv
YmpBKTtcbiAgdmFyIGtleXNCID0gT2JqZWN0LmtleXMob2JqQik7XG5cbiAgaWYgKGtleXNBLmxl
bmd0aCAhPT0ga2V5c0IubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IDA7
IGkgPCBrZXlzQS5sZW5ndGg7IGkrKykge1xuICAgIGlmICghaGFzT3duLmNhbGwob2JqQiwga2V5
c0FbaV0pIHx8ICFpcyhvYmpBW2tleXNBW2ldXSwgb2JqQltrZXlzQVtpXV0pKSB7XG4gICAgICBy
ZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKiovIH0p
LFxuLyogMjE3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19f
LCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogdW51c2VkIGhh
cm1vbnkgZXhwb3J0IHdoZW5NYXBEaXNwYXRjaFRvUHJvcHNJc0Z1bmN0aW9uICovXG4vKiB1bnVz
ZWQgaGFybW9ueSBleHBvcnQgd2hlbk1hcERpc3BhdGNoVG9Qcm9wc0lzTWlzc2luZyAqL1xuLyog
dW51c2VkIGhhcm1vbnkgZXhwb3J0IHdoZW5NYXBEaXNwYXRjaFRvUHJvcHNJc09iamVjdCAqL1xu
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWR1
eF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX193cmFwTWFwVG9Qcm9wc19fID0gX193ZWJwYWNr
X3JlcXVpcmVfXyg5Mik7XG5cblxuXG5mdW5jdGlvbiB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNG
dW5jdGlvbihtYXBEaXNwYXRjaFRvUHJvcHMpIHtcbiAgcmV0dXJuIHR5cGVvZiBtYXBEaXNwYXRj
aFRvUHJvcHMgPT09ICdmdW5jdGlvbicgPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX193cmFwTWFwVG9Qcm9wc19fW1wiYlwiIC8qIHdyYXBNYXBUb1Byb3BzRnVuYyAqL10pKG1h
cERpc3BhdGNoVG9Qcm9wcywgJ21hcERpc3BhdGNoVG9Qcm9wcycpIDogdW5kZWZpbmVkO1xufVxu
XG5mdW5jdGlvbiB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNNaXNzaW5nKG1hcERpc3BhdGNoVG9Q
cm9wcykge1xuICByZXR1cm4gIW1hcERpc3BhdGNoVG9Qcm9wcyA/IE9iamVjdChfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX3dyYXBNYXBUb1Byb3BzX19bXCJhXCIgLyogd3JhcE1hcFRvUHJv
cHNDb25zdGFudCAqL10pKGZ1bmN0aW9uIChkaXNwYXRjaCkge1xuICAgIHJldHVybiB7IGRpc3Bh
dGNoOiBkaXNwYXRjaCB9O1xuICB9KSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gd2hlbk1h
cERpc3BhdGNoVG9Qcm9wc0lzT2JqZWN0KG1hcERpc3BhdGNoVG9Qcm9wcykge1xuICByZXR1cm4g
bWFwRGlzcGF0Y2hUb1Byb3BzICYmIHR5cGVvZiBtYXBEaXNwYXRjaFRvUHJvcHMgPT09ICdvYmpl
Y3QnID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fd3JhcE1hcFRvUHJvcHNf
X1tcImFcIiAvKiB3cmFwTWFwVG9Qcm9wc0NvbnN0YW50ICovXSkoZnVuY3Rpb24gKGRpc3BhdGNo
KSB7XG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVkdXhf
X1tcImFcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKShtYXBEaXNwYXRjaFRvUHJvcHMsIGRp
c3BhdGNoKTtcbiAgfSkgOiB1bmRlZmluZWQ7XG59XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBv
cnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSAoW3doZW5NYXBEaXNwYXRjaFRvUHJv
cHNJc0Z1bmN0aW9uLCB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNNaXNzaW5nLCB3aGVuTWFwRGlz
cGF0Y2hUb1Byb3BzSXNPYmplY3RdKTtcblxuLyoqKi8gfSksXG4vKiAyMTggKi9cbi8qKiovIChm
dW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18p
IHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgd2hlbk1hcFN0
YXRlVG9Qcm9wc0lzRnVuY3Rpb24gKi9cbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWFw
U3RhdGVUb1Byb3BzSXNNaXNzaW5nICovXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX193cmFwTWFwVG9Qcm9wc19fID0gX193ZWJwYWNrX3JlcXVp
cmVfXyg5Mik7XG5cblxuZnVuY3Rpb24gd2hlbk1hcFN0YXRlVG9Qcm9wc0lzRnVuY3Rpb24obWFw
U3RhdGVUb1Byb3BzKSB7XG4gIHJldHVybiB0eXBlb2YgbWFwU3RhdGVUb1Byb3BzID09PSAnZnVu
Y3Rpb24nID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fd3JhcE1hcFRvUHJv
cHNfX1tcImJcIiAvKiB3cmFwTWFwVG9Qcm9wc0Z1bmMgKi9dKShtYXBTdGF0ZVRvUHJvcHMsICdt
YXBTdGF0ZVRvUHJvcHMnKSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gd2hlbk1hcFN0YXRl
VG9Qcm9wc0lzTWlzc2luZyhtYXBTdGF0ZVRvUHJvcHMpIHtcbiAgcmV0dXJuICFtYXBTdGF0ZVRv
UHJvcHMgPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX193cmFwTWFwVG9Qcm9w
c19fW1wiYVwiIC8qIHdyYXBNYXBUb1Byb3BzQ29uc3RhbnQgKi9dKShmdW5jdGlvbiAoKSB7XG4g
ICAgcmV0dXJuIHt9O1xuICB9KSA6IHVuZGVmaW5lZDtcbn1cblxuLyogaGFybW9ueSBkZWZhdWx0
IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiYVwiXSA9IChbd2hlbk1hcFN0YXRlVG9Q
cm9wc0lzRnVuY3Rpb24sIHdoZW5NYXBTdGF0ZVRvUHJvcHNJc01pc3NpbmddKTtcblxuLyoqKi8g
fSksXG4vKiAyMTkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiB1bnVzZWQg
aGFybW9ueSBleHBvcnQgZGVmYXVsdE1lcmdlUHJvcHMgKi9cbi8qIHVudXNlZCBoYXJtb255IGV4
cG9ydCB3cmFwTWVyZ2VQcm9wc0Z1bmMgKi9cbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVu
TWVyZ2VQcm9wc0lzRnVuY3Rpb24gKi9cbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWVy
Z2VQcm9wc0lzT21pdHRlZCAqL1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fdXRpbHNfdmVyaWZ5UGxhaW5PYmplY3RfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oOTMpO1xudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAo
dGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZh
ciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9i
amVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0
W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuXG5cbmZ1bmN0
aW9uIGRlZmF1bHRNZXJnZVByb3BzKHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3Bz
KSB7XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgb3duUHJvcHMsIHN0YXRlUHJvcHMsIGRpc3BhdGNo
UHJvcHMpO1xufVxuXG5mdW5jdGlvbiB3cmFwTWVyZ2VQcm9wc0Z1bmMobWVyZ2VQcm9wcykge1xu
ICByZXR1cm4gZnVuY3Rpb24gaW5pdE1lcmdlUHJvcHNQcm94eShkaXNwYXRjaCwgX3JlZikge1xu
ICAgIHZhciBkaXNwbGF5TmFtZSA9IF9yZWYuZGlzcGxheU5hbWUsXG4gICAgICAgIHB1cmUgPSBf
cmVmLnB1cmUsXG4gICAgICAgIGFyZU1lcmdlZFByb3BzRXF1YWwgPSBfcmVmLmFyZU1lcmdlZFBy
b3BzRXF1YWw7XG5cbiAgICB2YXIgaGFzUnVuT25jZSA9IGZhbHNlO1xuICAgIHZhciBtZXJnZWRQ
cm9wcyA9IHZvaWQgMDtcblxuICAgIHJldHVybiBmdW5jdGlvbiBtZXJnZVByb3BzUHJveHkoc3Rh
dGVQcm9wcywgZGlzcGF0Y2hQcm9wcywgb3duUHJvcHMpIHtcbiAgICAgIHZhciBuZXh0TWVyZ2Vk
UHJvcHMgPSBtZXJnZVByb3BzKHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKTtc
blxuICAgICAgaWYgKGhhc1J1bk9uY2UpIHtcbiAgICAgICAgaWYgKCFwdXJlIHx8ICFhcmVNZXJn
ZWRQcm9wc0VxdWFsKG5leHRNZXJnZWRQcm9wcywgbWVyZ2VkUHJvcHMpKSBtZXJnZWRQcm9wcyA9
IG5leHRNZXJnZWRQcm9wcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhhc1J1bk9uY2UgPSB0
cnVlO1xuICAgICAgICBtZXJnZWRQcm9wcyA9IG5leHRNZXJnZWRQcm9wcztcblxuICAgICAgICBp
ZiAoZmFsc2UpIHZlcmlmeVBsYWluT2JqZWN0KG1lcmdlZFByb3BzLCBkaXNwbGF5TmFtZSwgJ21l
cmdlUHJvcHMnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1lcmdlZFByb3BzO1xuICAgIH07
XG4gIH07XG59XG5cbmZ1bmN0aW9uIHdoZW5NZXJnZVByb3BzSXNGdW5jdGlvbihtZXJnZVByb3Bz
KSB7XG4gIHJldHVybiB0eXBlb2YgbWVyZ2VQcm9wcyA9PT0gJ2Z1bmN0aW9uJyA/IHdyYXBNZXJn
ZVByb3BzRnVuYyhtZXJnZVByb3BzKSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gd2hlbk1l
cmdlUHJvcHNJc09taXR0ZWQobWVyZ2VQcm9wcykge1xuICByZXR1cm4gIW1lcmdlUHJvcHMgPyBm
dW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRNZXJnZVByb3BzO1xuICB9IDogdW5kZWZp
bmVkO1xufVxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRz
X19bXCJhXCJdID0gKFt3aGVuTWVyZ2VQcm9wc0lzRnVuY3Rpb24sIHdoZW5NZXJnZVByb3BzSXNP
bWl0dGVkXSk7XG5cbi8qKiovIH0pLFxuLyogMjIwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxl
LCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0
cmljdFwiO1xuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IGltcHVyZUZpbmFsUHJvcHNTZWxlY3Rv
ckZhY3RvcnkgKi9cbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCBwdXJlRmluYWxQcm9wc1NlbGVj
dG9yRmFjdG9yeSAqL1xuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNr
X2V4cG9ydHNfX1tcImFcIl0gPSBmaW5hbFByb3BzU2VsZWN0b3JGYWN0b3J5O1xuLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fdmVyaWZ5U3Vic2Vs
ZWN0b3JzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyMSk7XG5mdW5jdGlvbiBfb2JqZWN0V2l0
aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBp
biBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3Qu
cHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtp
XSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cblxuXG5mdW5jdGlvbiBpbXB1cmVGaW5h
bFByb3BzU2VsZWN0b3JGYWN0b3J5KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3Bz
LCBtZXJnZVByb3BzLCBkaXNwYXRjaCkge1xuICByZXR1cm4gZnVuY3Rpb24gaW1wdXJlRmluYWxQ
cm9wc1NlbGVjdG9yKHN0YXRlLCBvd25Qcm9wcykge1xuICAgIHJldHVybiBtZXJnZVByb3BzKG1h
cFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpLCBtYXBEaXNwYXRjaFRvUHJvcHMoZGlzcGF0
Y2gsIG93blByb3BzKSwgb3duUHJvcHMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBwdXJlRmluYWxQ
cm9wc1NlbGVjdG9yRmFjdG9yeShtYXBTdGF0ZVRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wcywg
bWVyZ2VQcm9wcywgZGlzcGF0Y2gsIF9yZWYpIHtcbiAgdmFyIGFyZVN0YXRlc0VxdWFsID0gX3Jl
Zi5hcmVTdGF0ZXNFcXVhbCxcbiAgICAgIGFyZU93blByb3BzRXF1YWwgPSBfcmVmLmFyZU93blBy
b3BzRXF1YWwsXG4gICAgICBhcmVTdGF0ZVByb3BzRXF1YWwgPSBfcmVmLmFyZVN0YXRlUHJvcHNF
cXVhbDtcblxuICB2YXIgaGFzUnVuQXRMZWFzdE9uY2UgPSBmYWxzZTtcbiAgdmFyIHN0YXRlID0g
dm9pZCAwO1xuICB2YXIgb3duUHJvcHMgPSB2b2lkIDA7XG4gIHZhciBzdGF0ZVByb3BzID0gdm9p
ZCAwO1xuICB2YXIgZGlzcGF0Y2hQcm9wcyA9IHZvaWQgMDtcbiAgdmFyIG1lcmdlZFByb3BzID0g
dm9pZCAwO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZUZpcnN0Q2FsbChmaXJzdFN0YXRlLCBmaXJzdE93
blByb3BzKSB7XG4gICAgc3RhdGUgPSBmaXJzdFN0YXRlO1xuICAgIG93blByb3BzID0gZmlyc3RP
d25Qcm9wcztcbiAgICBzdGF0ZVByb3BzID0gbWFwU3RhdGVUb1Byb3BzKHN0YXRlLCBvd25Qcm9w
cyk7XG4gICAgZGlzcGF0Y2hQcm9wcyA9IG1hcERpc3BhdGNoVG9Qcm9wcyhkaXNwYXRjaCwgb3du
UHJvcHMpO1xuICAgIG1lcmdlZFByb3BzID0gbWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBkaXNwYXRj
aFByb3BzLCBvd25Qcm9wcyk7XG4gICAgaGFzUnVuQXRMZWFzdE9uY2UgPSB0cnVlO1xuICAgIHJl
dHVybiBtZXJnZWRQcm9wcztcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZU5ld1Byb3BzQW5kTmV3
U3RhdGUoKSB7XG4gICAgc3RhdGVQcm9wcyA9IG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJv
cHMpO1xuXG4gICAgaWYgKG1hcERpc3BhdGNoVG9Qcm9wcy5kZXBlbmRzT25Pd25Qcm9wcykgZGlz
cGF0Y2hQcm9wcyA9IG1hcERpc3BhdGNoVG9Qcm9wcyhkaXNwYXRjaCwgb3duUHJvcHMpO1xuXG4g
ICAgbWVyZ2VkUHJvcHMgPSBtZXJnZVByb3BzKHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93
blByb3BzKTtcbiAgICByZXR1cm4gbWVyZ2VkUHJvcHM7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5k
bGVOZXdQcm9wcygpIHtcbiAgICBpZiAobWFwU3RhdGVUb1Byb3BzLmRlcGVuZHNPbk93blByb3Bz
KSBzdGF0ZVByb3BzID0gbWFwU3RhdGVUb1Byb3BzKHN0YXRlLCBvd25Qcm9wcyk7XG5cbiAgICBp
ZiAobWFwRGlzcGF0Y2hUb1Byb3BzLmRlcGVuZHNPbk93blByb3BzKSBkaXNwYXRjaFByb3BzID0g
bWFwRGlzcGF0Y2hUb1Byb3BzKGRpc3BhdGNoLCBvd25Qcm9wcyk7XG5cbiAgICBtZXJnZWRQcm9w
cyA9IG1lcmdlUHJvcHMoc3RhdGVQcm9wcywgZGlzcGF0Y2hQcm9wcywgb3duUHJvcHMpO1xuICAg
IHJldHVybiBtZXJnZWRQcm9wcztcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZU5ld1N0YXRlKCkg
e1xuICAgIHZhciBuZXh0U3RhdGVQcm9wcyA9IG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJv
cHMpO1xuICAgIHZhciBzdGF0ZVByb3BzQ2hhbmdlZCA9ICFhcmVTdGF0ZVByb3BzRXF1YWwobmV4
dFN0YXRlUHJvcHMsIHN0YXRlUHJvcHMpO1xuICAgIHN0YXRlUHJvcHMgPSBuZXh0U3RhdGVQcm9w
cztcblxuICAgIGlmIChzdGF0ZVByb3BzQ2hhbmdlZCkgbWVyZ2VkUHJvcHMgPSBtZXJnZVByb3Bz
KHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKTtcblxuICAgIHJldHVybiBtZXJn
ZWRQcm9wcztcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVN1YnNlcXVlbnRDYWxscyhuZXh0U3Rh
dGUsIG5leHRPd25Qcm9wcykge1xuICAgIHZhciBwcm9wc0NoYW5nZWQgPSAhYXJlT3duUHJvcHNF
cXVhbChuZXh0T3duUHJvcHMsIG93blByb3BzKTtcbiAgICB2YXIgc3RhdGVDaGFuZ2VkID0gIWFy
ZVN0YXRlc0VxdWFsKG5leHRTdGF0ZSwgc3RhdGUpO1xuICAgIHN0YXRlID0gbmV4dFN0YXRlO1xu
ICAgIG93blByb3BzID0gbmV4dE93blByb3BzO1xuXG4gICAgaWYgKHByb3BzQ2hhbmdlZCAmJiBz
dGF0ZUNoYW5nZWQpIHJldHVybiBoYW5kbGVOZXdQcm9wc0FuZE5ld1N0YXRlKCk7XG4gICAgaWYg
KHByb3BzQ2hhbmdlZCkgcmV0dXJuIGhhbmRsZU5ld1Byb3BzKCk7XG4gICAgaWYgKHN0YXRlQ2hh
bmdlZCkgcmV0dXJuIGhhbmRsZU5ld1N0YXRlKCk7XG4gICAgcmV0dXJuIG1lcmdlZFByb3BzO1xu
ICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHB1cmVGaW5hbFByb3BzU2VsZWN0b3IobmV4dFN0YXRl
LCBuZXh0T3duUHJvcHMpIHtcbiAgICByZXR1cm4gaGFzUnVuQXRMZWFzdE9uY2UgPyBoYW5kbGVT
dWJzZXF1ZW50Q2FsbHMobmV4dFN0YXRlLCBuZXh0T3duUHJvcHMpIDogaGFuZGxlRmlyc3RDYWxs
KG5leHRTdGF0ZSwgbmV4dE93blByb3BzKTtcbiAgfTtcbn1cblxuLy8gVE9ETzogQWRkIG1vcmUg
Y29tbWVudHNcblxuLy8gSWYgcHVyZSBpcyB0cnVlLCB0aGUgc2VsZWN0b3IgcmV0dXJuZWQgYnkg
c2VsZWN0b3JGYWN0b3J5IHdpbGwgbWVtb2l6ZSBpdHMgcmVzdWx0cyxcbi8vIGFsbG93aW5nIGNv
bm5lY3RBZHZhbmNlZCdzIHNob3VsZENvbXBvbmVudFVwZGF0ZSB0byByZXR1cm4gZmFsc2UgaWYg
ZmluYWxcbi8vIHByb3BzIGhhdmUgbm90IGNoYW5nZWQuIElmIGZhbHNlLCB0aGUgc2VsZWN0b3Ig
d2lsbCBhbHdheXMgcmV0dXJuIGEgbmV3XG4vLyBvYmplY3QgYW5kIHNob3VsZENvbXBvbmVudFVw
ZGF0ZSB3aWxsIGFsd2F5cyByZXR1cm4gdHJ1ZS5cblxuZnVuY3Rpb24gZmluYWxQcm9wc1NlbGVj
dG9yRmFjdG9yeShkaXNwYXRjaCwgX3JlZjIpIHtcbiAgdmFyIGluaXRNYXBTdGF0ZVRvUHJvcHMg
PSBfcmVmMi5pbml0TWFwU3RhdGVUb1Byb3BzLFxuICAgICAgaW5pdE1hcERpc3BhdGNoVG9Qcm9w
cyA9IF9yZWYyLmluaXRNYXBEaXNwYXRjaFRvUHJvcHMsXG4gICAgICBpbml0TWVyZ2VQcm9wcyA9
IF9yZWYyLmluaXRNZXJnZVByb3BzLFxuICAgICAgb3B0aW9ucyA9IF9vYmplY3RXaXRob3V0UHJv
cGVydGllcyhfcmVmMiwgWydpbml0TWFwU3RhdGVUb1Byb3BzJywgJ2luaXRNYXBEaXNwYXRjaFRv
UHJvcHMnLCAnaW5pdE1lcmdlUHJvcHMnXSk7XG5cbiAgdmFyIG1hcFN0YXRlVG9Qcm9wcyA9IGlu
aXRNYXBTdGF0ZVRvUHJvcHMoZGlzcGF0Y2gsIG9wdGlvbnMpO1xuICB2YXIgbWFwRGlzcGF0Y2hU
b1Byb3BzID0gaW5pdE1hcERpc3BhdGNoVG9Qcm9wcyhkaXNwYXRjaCwgb3B0aW9ucyk7XG4gIHZh
ciBtZXJnZVByb3BzID0gaW5pdE1lcmdlUHJvcHMoZGlzcGF0Y2gsIG9wdGlvbnMpO1xuXG4gIGlm
IChmYWxzZSkge1xuICAgIHZlcmlmeVN1YnNlbGVjdG9ycyhtYXBTdGF0ZVRvUHJvcHMsIG1hcERp
c3BhdGNoVG9Qcm9wcywgbWVyZ2VQcm9wcywgb3B0aW9ucy5kaXNwbGF5TmFtZSk7XG4gIH1cblxu
ICB2YXIgc2VsZWN0b3JGYWN0b3J5ID0gb3B0aW9ucy5wdXJlID8gcHVyZUZpbmFsUHJvcHNTZWxl
Y3RvckZhY3RvcnkgOiBpbXB1cmVGaW5hbFByb3BzU2VsZWN0b3JGYWN0b3J5O1xuXG4gIHJldHVy
biBzZWxlY3RvckZhY3RvcnkobWFwU3RhdGVUb1Byb3BzLCBtYXBEaXNwYXRjaFRvUHJvcHMsIG1l
cmdlUHJvcHMsIGRpc3BhdGNoLCBvcHRpb25zKTtcbn1cblxuLyoqKi8gfSksXG4vKiAyMjEgKi9c
bi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19y
ZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQg
ZGVmYXVsdCAqL1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fdXRpbHNfd2FybmluZ19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OSk7XG5cblxu
ZnVuY3Rpb24gdmVyaWZ5KHNlbGVjdG9yLCBtZXRob2ROYW1lLCBkaXNwbGF5TmFtZSkge1xuICBp
ZiAoIXNlbGVjdG9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIHZhbHVlIGZv
ciAnICsgbWV0aG9kTmFtZSArICcgaW4gJyArIGRpc3BsYXlOYW1lICsgJy4nKTtcbiAgfSBlbHNl
IGlmIChtZXRob2ROYW1lID09PSAnbWFwU3RhdGVUb1Byb3BzJyB8fCBtZXRob2ROYW1lID09PSAn
bWFwRGlzcGF0Y2hUb1Byb3BzJykge1xuICAgIGlmICghc2VsZWN0b3IuaGFzT3duUHJvcGVydHko
J2RlcGVuZHNPbk93blByb3BzJykpIHtcbiAgICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX3V0aWxzX3dhcm5pbmdfX1tcImFcIiAvKiBkZWZhdWx0ICovXSkoJ1RoZSBzZWxl
Y3RvciBmb3IgJyArIG1ldGhvZE5hbWUgKyAnIG9mICcgKyBkaXNwbGF5TmFtZSArICcgZGlkIG5v
dCBzcGVjaWZ5IGEgdmFsdWUgZm9yIGRlcGVuZHNPbk93blByb3BzLicpO1xuICAgIH1cbiAgfVxu
fVxuXG5mdW5jdGlvbiB2ZXJpZnlTdWJzZWxlY3RvcnMobWFwU3RhdGVUb1Byb3BzLCBtYXBEaXNw
YXRjaFRvUHJvcHMsIG1lcmdlUHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHZlcmlmeShtYXBTdGF0
ZVRvUHJvcHMsICdtYXBTdGF0ZVRvUHJvcHMnLCBkaXNwbGF5TmFtZSk7XG4gIHZlcmlmeShtYXBE
aXNwYXRjaFRvUHJvcHMsICdtYXBEaXNwYXRjaFRvUHJvcHMnLCBkaXNwbGF5TmFtZSk7XG4gIHZl
cmlmeShtZXJnZVByb3BzLCAnbWVyZ2VQcm9wcycsIGRpc3BsYXlOYW1lKTtcbn1cblxuLyoqKi8g
fSksXG4vKiAyMjIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKDkpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4o
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xuLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWR1eF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygyOSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX3JlYWN0X3JlZHV4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg4KTtcbi8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2NvbXBvbmVu
dHNfSGVhZGVyX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyMyk7XG4vKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19jb21wb25lbnRzX01haW5TZWN0
aW9uX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyNCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19hY3Rpb25zX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKDIyNyk7XG52YXIgQXBwPWZ1bmN0aW9uIEFwcChfcmVmKXt2YXIgdG9kb3M9X3JlZi50
b2RvcyxhY3Rpb25zPV9yZWYuYWN0aW9ucztyZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX3JlYWN0X19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoJ2RpdicsbnVsbCxfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX2NvbXBvbmVudHNfSGVhZGVyX19bXCJhXCIgLyogZGVmYXVs
dCAqL10se2FkZFRvZG86YWN0aW9ucy5hZGRUb2RvfSksX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX3JlYWN0X19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X19jb21wb25lbnRzX01haW5TZWN0aW9uX19bXCJhXCIgLyogZGVmYXVsdCAqL10se3Rv
ZG9zOnRvZG9zLGFjdGlvbnM6YWN0aW9uc30pKTt9O0FwcC5wcm9wVHlwZXM9e3RvZG9zOl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1wiUHJvcFR5cGVzXCJdLmFycmF5LmlzUmVx
dWlyZWQsYWN0aW9uczpfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcIlByb3BU
eXBlc1wiXS5vYmplY3QuaXNSZXF1aXJlZH07dmFyIG1hcFN0YXRlVG9Qcm9wcz1mdW5jdGlvbiBt
YXBTdGF0ZVRvUHJvcHMoc3RhdGUpe3JldHVybnt0b2RvczpzdGF0ZS50b2Rvc307fTt2YXIgbWFw
RGlzcGF0Y2hUb1Byb3BzPWZ1bmN0aW9uIG1hcERpc3BhdGNoVG9Qcm9wcyhkaXNwYXRjaCl7cmV0
dXJue2FjdGlvbnM6T2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWR1eF9fW1wi
YVwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NV9fYWN0aW9uc19fLGRpc3BhdGNoKX07fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9f
d2VicGFja19leHBvcnRzX19bXCJhXCJdID0gKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfcmVhY3RfcmVkdXhfX1tcImJcIiAvKiBjb25uZWN0ICovXSkobWFwU3RhdGVUb1Byb3Bz
LG1hcERpc3BhdGNoVG9Qcm9wcykoQXBwKSk7XG5cbi8qKiovIH0pLFxuLyogMjIzICovXG4vKioq
LyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWly
ZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTtc
bi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVh
Y3RfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9yZWFjdF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1RvZG9UZXh0SW5wdXRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOTQp
O1xudmFyIF9jcmVhdGVDbGFzcz1mdW5jdGlvbigpe2Z1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMo
dGFyZ2V0LHByb3BzKXtmb3IodmFyIGk9MDtpPHByb3BzLmxlbmd0aDtpKyspe3ZhciBkZXNjcmlw
dG9yPXByb3BzW2ldO2Rlc2NyaXB0b3IuZW51bWVyYWJsZT1kZXNjcmlwdG9yLmVudW1lcmFibGV8
fGZhbHNlO2Rlc2NyaXB0b3IuY29uZmlndXJhYmxlPXRydWU7aWYoXCJ2YWx1ZVwiaW4gZGVzY3Jp
cHRvcilkZXNjcmlwdG9yLndyaXRhYmxlPXRydWU7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdl
dCxkZXNjcmlwdG9yLmtleSxkZXNjcmlwdG9yKTt9fXJldHVybiBmdW5jdGlvbihDb25zdHJ1Y3Rv
cixwcm90b1Byb3BzLHN0YXRpY1Byb3BzKXtpZihwcm90b1Byb3BzKWRlZmluZVByb3BlcnRpZXMo
Q29uc3RydWN0b3IucHJvdG90eXBlLHByb3RvUHJvcHMpO2lmKHN0YXRpY1Byb3BzKWRlZmluZVBy
b3BlcnRpZXMoQ29uc3RydWN0b3Isc3RhdGljUHJvcHMpO3JldHVybiBDb25zdHJ1Y3Rvcjt9O30o
KTtmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsQ29uc3RydWN0b3Ipe2lmKCEoaW5z
dGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3Rvcikpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5u
b3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7fX1mdW5jdGlvbiBfcG9zc2libGVDb25z
dHJ1Y3RvclJldHVybihzZWxmLGNhbGwpe2lmKCFzZWxmKXt0aHJvdyBuZXcgUmVmZXJlbmNlRXJy
b3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBj
YWxsZWRcIik7fXJldHVybiBjYWxsJiYodHlwZW9mIGNhbGw9PT1cIm9iamVjdFwifHx0eXBlb2Yg
Y2FsbD09PVwiZnVuY3Rpb25cIik/Y2FsbDpzZWxmO31mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xh
c3Msc3VwZXJDbGFzcyl7aWYodHlwZW9mIHN1cGVyQ2xhc3MhPT1cImZ1bmN0aW9uXCImJnN1cGVy
Q2xhc3MhPT1udWxsKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0
IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2Ygc3VwZXJDbGFzcyk7
fXN1YkNsYXNzLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MmJnN1cGVyQ2xhc3Mu
cHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6c3ViQ2xhc3MsZW51bWVyYWJsZTpmYWxzZSx3
cml0YWJsZTp0cnVlLGNvbmZpZ3VyYWJsZTp0cnVlfX0pO2lmKHN1cGVyQ2xhc3MpT2JqZWN0LnNl
dFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcyxzdXBlckNsYXNzKTpz
dWJDbGFzcy5fX3Byb3RvX189c3VwZXJDbGFzczt9dmFyIEhlYWRlcj1mdW5jdGlvbihfQ29tcG9u
ZW50KXtfaW5oZXJpdHMoSGVhZGVyLF9Db21wb25lbnQpO2Z1bmN0aW9uIEhlYWRlcigpe3ZhciBf
cmVmO3ZhciBfdGVtcCxfdGhpcyxfcmV0O19jbGFzc0NhbGxDaGVjayh0aGlzLEhlYWRlcik7Zm9y
KHZhciBfbGVuPWFyZ3VtZW50cy5sZW5ndGgsYXJncz1BcnJheShfbGVuKSxfa2V5PTA7X2tleTxf
bGVuO19rZXkrKyl7YXJnc1tfa2V5XT1hcmd1bWVudHNbX2tleV07fXJldHVybiBfcmV0PShfdGVt
cD0oX3RoaXM9X3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywoX3JlZj1IZWFkZXIuX19w
cm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoSGVhZGVyKSkuY2FsbC5hcHBseShfcmVmLFt0
aGlzXS5jb25jYXQoYXJncykpKSxfdGhpcyksX3RoaXMuaGFuZGxlU2F2ZT1mdW5jdGlvbih0ZXh0
KXtpZih0ZXh0Lmxlbmd0aCE9PTApe190aGlzLnByb3BzLmFkZFRvZG8odGV4dCk7fX0sX3RlbXAp
LF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKF90aGlzLF9yZXQpO31fY3JlYXRlQ2xhc3MoSGVh
ZGVyLFt7a2V5OidyZW5kZXInLHZhbHVlOmZ1bmN0aW9uIHJlbmRlcigpe3JldHVybiBfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudCgnaGVh
ZGVyJyx7Y2xhc3NOYW1lOidoZWFkZXInfSxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVh
Y3RfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudCgnaDEnLG51bGwsJ3RvZG9zJyksX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19Ub2RvVGV4dElucHV0X19bXCJhXCIgLyogZGVmYXVsdCAq
L10se25ld1RvZG86dHJ1ZSxvblNhdmU6dGhpcy5oYW5kbGVTYXZlLHBsYWNlaG9sZGVyOidXaGF0
IG5lZWRzIHRvIGJlIGRvbmU/J30pKTt9fV0pO3JldHVybiBIZWFkZXI7fShfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfcmVhY3RfX1tcIkNvbXBvbmVudFwiXSk7SGVhZGVyLnByb3BUeXBlcz17
YWRkVG9kbzpfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcIlByb3BUeXBlc1wi
XS5mdW5jLmlzUmVxdWlyZWR9Oy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNr
X2V4cG9ydHNfX1tcImFcIl0gPSAoSGVhZGVyKTtcblxuLyoqKi8gfSksXG4vKiAyMjQgKi9cbi8q
KiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1
aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkp
O1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9y
ZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX3JlYWN0X18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fVG9kb0l0ZW1fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjI1KTtc
bi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX0Zv
b3Rlcl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMjYpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fY29uc3RhbnRzX1RvZG9GaWx0ZXJzX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk1KTtcbnZhciBfY3JlYXRlQ2xhc3M9ZnVuY3Rpb24oKXtm
dW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCxwcm9wcyl7Zm9yKHZhciBpPTA7aTxwcm9w
cy5sZW5ndGg7aSsrKXt2YXIgZGVzY3JpcHRvcj1wcm9wc1tpXTtkZXNjcmlwdG9yLmVudW1lcmFi
bGU9ZGVzY3JpcHRvci5lbnVtZXJhYmxlfHxmYWxzZTtkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZT10
cnVlO2lmKFwidmFsdWVcImluIGRlc2NyaXB0b3IpZGVzY3JpcHRvci53cml0YWJsZT10cnVlO09i
amVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsZGVzY3JpcHRvci5rZXksZGVzY3JpcHRvcik7fX1y
ZXR1cm4gZnVuY3Rpb24oQ29uc3RydWN0b3IscHJvdG9Qcm9wcyxzdGF0aWNQcm9wcyl7aWYocHJv
dG9Qcm9wcylkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSxwcm90b1Byb3Bz
KTtpZihzdGF0aWNQcm9wcylkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLHN0YXRpY1Byb3Bz
KTtyZXR1cm4gQ29uc3RydWN0b3I7fTt9KCk7dmFyIF9UT0RPX0ZJTFRFUlM7ZnVuY3Rpb24gX2Ns
YXNzQ2FsbENoZWNrKGluc3RhbmNlLENvbnN0cnVjdG9yKXtpZighKGluc3RhbmNlIGluc3RhbmNl
b2YgQ29uc3RydWN0b3IpKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFz
cyBhcyBhIGZ1bmN0aW9uXCIpO319ZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4o
c2VsZixjYWxsKXtpZighc2VsZil7dGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNu
J3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO31yZXR1
cm4gY2FsbCYmKHR5cGVvZiBjYWxsPT09XCJvYmplY3RcInx8dHlwZW9mIGNhbGw9PT1cImZ1bmN0
aW9uXCIpP2NhbGw6c2VsZjt9ZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLHN1cGVyQ2xhc3Mp
e2lmKHR5cGVvZiBzdXBlckNsYXNzIT09XCJmdW5jdGlvblwiJiZzdXBlckNsYXNzIT09bnVsbCl7
dGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVs
bCBvciBhIGZ1bmN0aW9uLCBub3QgXCIrdHlwZW9mIHN1cGVyQ2xhc3MpO31zdWJDbGFzcy5wcm90
b3R5cGU9T2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzJiZzdXBlckNsYXNzLnByb3RvdHlwZSx7Y29u
c3RydWN0b3I6e3ZhbHVlOnN1YkNsYXNzLGVudW1lcmFibGU6ZmFsc2Usd3JpdGFibGU6dHJ1ZSxj
b25maWd1cmFibGU6dHJ1ZX19KTtpZihzdXBlckNsYXNzKU9iamVjdC5zZXRQcm90b3R5cGVPZj9P
YmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3Msc3VwZXJDbGFzcyk6c3ViQ2xhc3MuX19wcm90
b19fPXN1cGVyQ2xhc3M7fWZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosa2V5LHZhbHVlKXtp
ZihrZXkgaW4gb2JqKXtPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLGtleSx7dmFsdWU6dmFsdWUs
ZW51bWVyYWJsZTp0cnVlLGNvbmZpZ3VyYWJsZTp0cnVlLHdyaXRhYmxlOnRydWV9KTt9ZWxzZXtv
Ympba2V5XT12YWx1ZTt9cmV0dXJuIG9iajt9dmFyIFRPRE9fRklMVEVSUz0oX1RPRE9fRklMVEVS
Uz17fSxfZGVmaW5lUHJvcGVydHkoX1RPRE9fRklMVEVSUyxfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX2NvbnN0YW50c19Ub2RvRmlsdGVyc19fW1wiYlwiIC8qIFNIT1dfQUxMICovXSxmdW5j
dGlvbigpe3JldHVybiB0cnVlO30pLF9kZWZpbmVQcm9wZXJ0eShfVE9ET19GSUxURVJTLF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fY29uc3RhbnRzX1RvZG9GaWx0ZXJzX19bXCJhXCIgLyog
U0hPV19BQ1RJVkUgKi9dLGZ1bmN0aW9uKHRvZG8pe3JldHVybiF0b2RvLmNvbXBsZXRlZDt9KSxf
ZGVmaW5lUHJvcGVydHkoX1RPRE9fRklMVEVSUyxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X2NvbnN0YW50c19Ub2RvRmlsdGVyc19fW1wiY1wiIC8qIFNIT1dfQ09NUExFVEVEICovXSxmdW5j
dGlvbih0b2RvKXtyZXR1cm4gdG9kby5jb21wbGV0ZWQ7fSksX1RPRE9fRklMVEVSUyk7dmFyIE1h
aW5TZWN0aW9uPWZ1bmN0aW9uKF9Db21wb25lbnQpe19pbmhlcml0cyhNYWluU2VjdGlvbixfQ29t
cG9uZW50KTtmdW5jdGlvbiBNYWluU2VjdGlvbigpe3ZhciBfcmVmO3ZhciBfdGVtcCxfdGhpcyxf
cmV0O19jbGFzc0NhbGxDaGVjayh0aGlzLE1haW5TZWN0aW9uKTtmb3IodmFyIF9sZW49YXJndW1l
bnRzLmxlbmd0aCxhcmdzPUFycmF5KF9sZW4pLF9rZXk9MDtfa2V5PF9sZW47X2tleSsrKXthcmdz
W19rZXldPWFyZ3VtZW50c1tfa2V5XTt9cmV0dXJuIF9yZXQ9KF90ZW1wPShfdGhpcz1fcG9zc2li
bGVDb25zdHJ1Y3RvclJldHVybih0aGlzLChfcmVmPU1haW5TZWN0aW9uLl9fcHJvdG9fX3x8T2Jq
ZWN0LmdldFByb3RvdHlwZU9mKE1haW5TZWN0aW9uKSkuY2FsbC5hcHBseShfcmVmLFt0aGlzXS5j
b25jYXQoYXJncykpKSxfdGhpcyksX3RoaXMuc3RhdGU9e2ZpbHRlcjpfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX2NvbnN0YW50c19Ub2RvRmlsdGVyc19fW1wiYlwiIC8qIFNIT1dfQUxMICov
XX0sX3RoaXMuaGFuZGxlQ2xlYXJDb21wbGV0ZWQ9ZnVuY3Rpb24oKXtfdGhpcy5wcm9wcy5hY3Rp
b25zLmNsZWFyQ29tcGxldGVkKCk7fSxfdGhpcy5oYW5kbGVTaG93PWZ1bmN0aW9uKGZpbHRlcil7
X3RoaXMuc2V0U3RhdGUoe2ZpbHRlcjpmaWx0ZXJ9KTt9LF90ZW1wKSxfcG9zc2libGVDb25zdHJ1
Y3RvclJldHVybihfdGhpcyxfcmV0KTt9X2NyZWF0ZUNsYXNzKE1haW5TZWN0aW9uLFt7a2V5Oidy
ZW5kZXJUb2dnbGVBbGwnLHZhbHVlOmZ1bmN0aW9uIHJlbmRlclRvZ2dsZUFsbChjb21wbGV0ZWRD
b3VudCl7dmFyIF9wcm9wcz10aGlzLnByb3BzLHRvZG9zPV9wcm9wcy50b2RvcyxhY3Rpb25zPV9w
cm9wcy5hY3Rpb25zO2lmKHRvZG9zLmxlbmd0aD4wKXtyZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyx7Y2xhc3NO
YW1lOid0b2dnbGUtYWxsJyx0eXBlOidjaGVja2JveCcsY2hlY2tlZDpjb21wbGV0ZWRDb3VudD09
PXRvZG9zLmxlbmd0aCxvbkNoYW5nZTphY3Rpb25zLmNvbXBsZXRlQWxsfSk7fX19LHtrZXk6J3Jl
bmRlckZvb3RlcicsdmFsdWU6ZnVuY3Rpb24gcmVuZGVyRm9vdGVyKGNvbXBsZXRlZENvdW50KXt2
YXIgdG9kb3M9dGhpcy5wcm9wcy50b2Rvczt2YXIgZmlsdGVyPXRoaXMuc3RhdGUuZmlsdGVyO3Zh
ciBhY3RpdmVDb3VudD10b2Rvcy5sZW5ndGgtY29tcGxldGVkQ291bnQ7aWYodG9kb3MubGVuZ3Ro
KXtyZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdC5hLmNy
ZWF0ZUVsZW1lbnQoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19Gb290ZXJfX1tcImFcIiAv
KiBkZWZhdWx0ICovXSx7Y29tcGxldGVkQ291bnQ6Y29tcGxldGVkQ291bnQsYWN0aXZlQ291bnQ6
YWN0aXZlQ291bnQsZmlsdGVyOmZpbHRlcixvbkNsZWFyQ29tcGxldGVkOnRoaXMuaGFuZGxlQ2xl
YXJDb21wbGV0ZWQuYmluZCh0aGlzKSxvblNob3c6dGhpcy5oYW5kbGVTaG93LmJpbmQodGhpcyl9
KTt9fX0se2tleToncmVuZGVyJyx2YWx1ZTpmdW5jdGlvbiByZW5kZXIoKXt2YXIgX3Byb3BzMj10
aGlzLnByb3BzLHRvZG9zPV9wcm9wczIudG9kb3MsYWN0aW9ucz1fcHJvcHMyLmFjdGlvbnM7dmFy
IGZpbHRlcj10aGlzLnN0YXRlLmZpbHRlcjt2YXIgZmlsdGVyZWRUb2Rvcz10b2Rvcy5maWx0ZXIo
VE9ET19GSUxURVJTW2ZpbHRlcl0pO3ZhciBjb21wbGV0ZWRDb3VudD10b2Rvcy5yZWR1Y2UoZnVu
Y3Rpb24oY291bnQsdG9kbyl7cmV0dXJuIHRvZG8uY29tcGxldGVkP2NvdW50KzE6Y291bnQ7fSww
KTtyZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdC5hLmNy
ZWF0ZUVsZW1lbnQoJ3NlY3Rpb24nLHtjbGFzc05hbWU6J21haW4nfSx0aGlzLnJlbmRlclRvZ2ds
ZUFsbChjb21wbGV0ZWRDb3VudCksX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19f
ZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoJ3VsJyx7Y2xhc3NOYW1lOid0b2RvLWxpc3QnfSxmaWx0
ZXJlZFRvZG9zLm1hcChmdW5jdGlvbih0b2RvKXtyZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX3JlYWN0X19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19Ub2RvSXRlbV9fW1wiYVwiIC8qIGRlZmF1bHQgKi9dLE9iamVjdC5hc3NpZ24o
e2tleTp0b2RvLmlkLHRvZG86dG9kb30sYWN0aW9ucykpO30pKSx0aGlzLnJlbmRlckZvb3Rlcihj
b21wbGV0ZWRDb3VudCkpO319XSk7cmV0dXJuIE1haW5TZWN0aW9uO30oX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX3JlYWN0X19bXCJDb21wb25lbnRcIl0pO01haW5TZWN0aW9uLnByb3BUeXBl
cz17dG9kb3M6X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXCJQcm9wVHlwZXNc
Il0uYXJyYXkuaXNSZXF1aXJlZCxhY3Rpb25zOl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9y
ZWFjdF9fW1wiUHJvcFR5cGVzXCJdLm9iamVjdC5pc1JlcXVpcmVkfTsvKiBoYXJtb255IGRlZmF1
bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gKE1haW5TZWN0aW9uKTtc
blxuLyoqKi8gfSksXG4vKiAyMjUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFj
a19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4v
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVx
dWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xuLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9jbGFzc25hbWVzX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUwKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfY2xhc3NuYW1lc19fX2RlZmF1bHQgPSBfX3dlYnBhY2tf
cmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2NsYXNzbmFtZXNfXyk7XG4v
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19Ub2Rv
VGV4dElucHV0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk0KTtcbnZhciBfY3JlYXRlQ2xhc3M9
ZnVuY3Rpb24oKXtmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCxwcm9wcyl7Zm9yKHZh
ciBpPTA7aTxwcm9wcy5sZW5ndGg7aSsrKXt2YXIgZGVzY3JpcHRvcj1wcm9wc1tpXTtkZXNjcmlw
dG9yLmVudW1lcmFibGU9ZGVzY3JpcHRvci5lbnVtZXJhYmxlfHxmYWxzZTtkZXNjcmlwdG9yLmNv
bmZpZ3VyYWJsZT10cnVlO2lmKFwidmFsdWVcImluIGRlc2NyaXB0b3IpZGVzY3JpcHRvci53cml0
YWJsZT10cnVlO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsZGVzY3JpcHRvci5rZXksZGVz
Y3JpcHRvcik7fX1yZXR1cm4gZnVuY3Rpb24oQ29uc3RydWN0b3IscHJvdG9Qcm9wcyxzdGF0aWNQ
cm9wcyl7aWYocHJvdG9Qcm9wcylkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlw
ZSxwcm90b1Byb3BzKTtpZihzdGF0aWNQcm9wcylkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9y
LHN0YXRpY1Byb3BzKTtyZXR1cm4gQ29uc3RydWN0b3I7fTt9KCk7ZnVuY3Rpb24gX2NsYXNzQ2Fs
bENoZWNrKGluc3RhbmNlLENvbnN0cnVjdG9yKXtpZighKGluc3RhbmNlIGluc3RhbmNlb2YgQ29u
c3RydWN0b3IpKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBh
IGZ1bmN0aW9uXCIpO319ZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZixj
YWxsKXtpZighc2VsZil7dGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVl
biBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO31yZXR1cm4gY2Fs
bCYmKHR5cGVvZiBjYWxsPT09XCJvYmplY3RcInx8dHlwZW9mIGNhbGw9PT1cImZ1bmN0aW9uXCIp
P2NhbGw6c2VsZjt9ZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLHN1cGVyQ2xhc3Mpe2lmKHR5
cGVvZiBzdXBlckNsYXNzIT09XCJmdW5jdGlvblwiJiZzdXBlckNsYXNzIT09bnVsbCl7dGhyb3cg
bmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBh
IGZ1bmN0aW9uLCBub3QgXCIrdHlwZW9mIHN1cGVyQ2xhc3MpO31zdWJDbGFzcy5wcm90b3R5cGU9
T2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzJiZzdXBlckNsYXNzLnByb3RvdHlwZSx7Y29uc3RydWN0
b3I6e3ZhbHVlOnN1YkNsYXNzLGVudW1lcmFibGU6ZmFsc2Usd3JpdGFibGU6dHJ1ZSxjb25maWd1
cmFibGU6dHJ1ZX19KTtpZihzdXBlckNsYXNzKU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Qu
c2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3Msc3VwZXJDbGFzcyk6c3ViQ2xhc3MuX19wcm90b19fPXN1
cGVyQ2xhc3M7fXZhciBUb2RvSXRlbT1mdW5jdGlvbihfQ29tcG9uZW50KXtfaW5oZXJpdHMoVG9k
b0l0ZW0sX0NvbXBvbmVudCk7ZnVuY3Rpb24gVG9kb0l0ZW0oKXt2YXIgX3JlZjt2YXIgX3RlbXAs
X3RoaXMsX3JldDtfY2xhc3NDYWxsQ2hlY2sodGhpcyxUb2RvSXRlbSk7Zm9yKHZhciBfbGVuPWFy
Z3VtZW50cy5sZW5ndGgsYXJncz1BcnJheShfbGVuKSxfa2V5PTA7X2tleTxfbGVuO19rZXkrKyl7
YXJnc1tfa2V5XT1hcmd1bWVudHNbX2tleV07fXJldHVybiBfcmV0PShfdGVtcD0oX3RoaXM9X3Bv
c3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywoX3JlZj1Ub2RvSXRlbS5fX3Byb3RvX198fE9i
amVjdC5nZXRQcm90b3R5cGVPZihUb2RvSXRlbSkpLmNhbGwuYXBwbHkoX3JlZixbdGhpc10uY29u
Y2F0KGFyZ3MpKSksX3RoaXMpLF90aGlzLnN0YXRlPXtlZGl0aW5nOmZhbHNlfSxfdGhpcy5oYW5k
bGVEb3VibGVDbGljaz1mdW5jdGlvbigpe190aGlzLnNldFN0YXRlKHtlZGl0aW5nOnRydWV9KTt9
LF90aGlzLmhhbmRsZVNhdmU9ZnVuY3Rpb24oaWQsdGV4dCl7aWYodGV4dC5sZW5ndGg9PT0wKXtf
dGhpcy5wcm9wcy5kZWxldGVUb2RvKGlkKTt9ZWxzZXtfdGhpcy5wcm9wcy5lZGl0VG9kbyhpZCx0
ZXh0KTt9X3RoaXMuc2V0U3RhdGUoe2VkaXRpbmc6ZmFsc2V9KTt9LF90ZW1wKSxfcG9zc2libGVD
b25zdHJ1Y3RvclJldHVybihfdGhpcyxfcmV0KTt9X2NyZWF0ZUNsYXNzKFRvZG9JdGVtLFt7a2V5
OidyZW5kZXInLHZhbHVlOmZ1bmN0aW9uIHJlbmRlcigpe3ZhciBfdGhpczI9dGhpczt2YXIgX3By
b3BzPXRoaXMucHJvcHMsdG9kbz1fcHJvcHMudG9kbyxjb21wbGV0ZVRvZG89X3Byb3BzLmNvbXBs
ZXRlVG9kbyxkZWxldGVUb2RvPV9wcm9wcy5kZWxldGVUb2RvO3ZhciBlbGVtZW50PXZvaWQgMDtp
Zih0aGlzLnN0YXRlLmVkaXRpbmcpe2VsZW1lbnQ9X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X3JlYWN0X19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19Ub2RvVGV4dElucHV0X19bXCJhXCIgLyogZGVmYXVsdCAqL10se3RleHQ6dG9kby50ZXh0
LGVkaXRpbmc6dGhpcy5zdGF0ZS5lZGl0aW5nLG9uU2F2ZTpmdW5jdGlvbiBvblNhdmUodGV4dCl7
cmV0dXJuIF90aGlzMi5oYW5kbGVTYXZlKHRvZG8uaWQsdGV4dCk7fX0pO31lbHNle2VsZW1lbnQ9
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1l
bnQoJ2Rpdicse2NsYXNzTmFtZTondmlldyd9LF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9y
ZWFjdF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KCdpbnB1dCcse2NsYXNzTmFtZTondG9nZ2xl
Jyx0eXBlOidjaGVja2JveCcsY2hlY2tlZDp0b2RvLmNvbXBsZXRlZCxvbkNoYW5nZTpmdW5jdGlv
biBvbkNoYW5nZSgpe3JldHVybiBjb21wbGV0ZVRvZG8odG9kby5pZCk7fX0pLF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KCdsYWJlbCcs
e29uRG91YmxlQ2xpY2s6dGhpcy5oYW5kbGVEb3VibGVDbGlja30sdG9kby50ZXh0KSxfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudCgnYnV0
dG9uJyx7Y2xhc3NOYW1lOidkZXN0cm95JyxvbkNsaWNrOmZ1bmN0aW9uIG9uQ2xpY2soKXtyZXR1
cm4gZGVsZXRlVG9kbyh0b2RvLmlkKTt9fSkpO31yZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX3JlYWN0X19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoJ2xpJyx7Y2xhc3NOYW1lOl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9jbGFzc25hbWVzX19fZGVmYXVsdCgpKHtjb21wbGV0
ZWQ6dG9kby5jb21wbGV0ZWQsZWRpdGluZzp0aGlzLnN0YXRlLmVkaXRpbmd9KX0sZWxlbWVudCk7
fX1dKTtyZXR1cm4gVG9kb0l0ZW07fShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3Rf
X1tcIkNvbXBvbmVudFwiXSk7VG9kb0l0ZW0ucHJvcFR5cGVzPXt0b2RvOl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9yZWFjdF9fW1wiUHJvcFR5cGVzXCJdLm9iamVjdC5pc1JlcXVpcmVkLGVk
aXRUb2RvOl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1wiUHJvcFR5cGVzXCJd
LmZ1bmMuaXNSZXF1aXJlZCxkZWxldGVUb2RvOl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9y
ZWFjdF9fW1wiUHJvcFR5cGVzXCJdLmZ1bmMuaXNSZXF1aXJlZCxjb21wbGV0ZVRvZG86X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXCJQcm9wVHlwZXNcIl0uZnVuYy5pc1JlcXVp
cmVkfTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJh
XCJdID0gKFRvZG9JdGVtKTtcblxuLyoqKi8gfSksXG4vKiAyMjYgKi9cbi8qKiovIChmdW5jdGlv
bihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxu
XCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX3JlYWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xuLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1
bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Jl
YWN0X18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9jbGFzc25hbWVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUwKTtcbi8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfY2xhc3NuYW1lc19fX2Rl
ZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X2NsYXNzbmFtZXNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19jb25zdGFudHNfVG9kb0ZpbHRlcnNfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oOTUpO1xudmFyIF9jcmVhdGVDbGFzcz1mdW5jdGlvbigpe2Z1bmN0aW9uIGRlZmluZVByb3Bl
cnRpZXModGFyZ2V0LHByb3BzKXtmb3IodmFyIGk9MDtpPHByb3BzLmxlbmd0aDtpKyspe3ZhciBk
ZXNjcmlwdG9yPXByb3BzW2ldO2Rlc2NyaXB0b3IuZW51bWVyYWJsZT1kZXNjcmlwdG9yLmVudW1l
cmFibGV8fGZhbHNlO2Rlc2NyaXB0b3IuY29uZmlndXJhYmxlPXRydWU7aWYoXCJ2YWx1ZVwiaW4g
ZGVzY3JpcHRvcilkZXNjcmlwdG9yLndyaXRhYmxlPXRydWU7T2JqZWN0LmRlZmluZVByb3BlcnR5
KHRhcmdldCxkZXNjcmlwdG9yLmtleSxkZXNjcmlwdG9yKTt9fXJldHVybiBmdW5jdGlvbihDb25z
dHJ1Y3Rvcixwcm90b1Byb3BzLHN0YXRpY1Byb3BzKXtpZihwcm90b1Byb3BzKWRlZmluZVByb3Bl
cnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLHByb3RvUHJvcHMpO2lmKHN0YXRpY1Byb3BzKWRl
ZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3Isc3RhdGljUHJvcHMpO3JldHVybiBDb25zdHJ1Y3Rv
cjt9O30oKTt2YXIgX0ZJTFRFUl9USVRMRVM7ZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3Rh
bmNlLENvbnN0cnVjdG9yKXtpZighKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKXt0
aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIp
O319ZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZixjYWxsKXtpZighc2Vs
Zil7dGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNl
ZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO31yZXR1cm4gY2FsbCYmKHR5cGVvZiBj
YWxsPT09XCJvYmplY3RcInx8dHlwZW9mIGNhbGw9PT1cImZ1bmN0aW9uXCIpP2NhbGw6c2VsZjt9
ZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLHN1cGVyQ2xhc3Mpe2lmKHR5cGVvZiBzdXBlckNs
YXNzIT09XCJmdW5jdGlvblwiJiZzdXBlckNsYXNzIT09bnVsbCl7dGhyb3cgbmV3IFR5cGVFcnJv
cihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBu
b3QgXCIrdHlwZW9mIHN1cGVyQ2xhc3MpO31zdWJDbGFzcy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0
ZShzdXBlckNsYXNzJiZzdXBlckNsYXNzLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnN1
YkNsYXNzLGVudW1lcmFibGU6ZmFsc2Usd3JpdGFibGU6dHJ1ZSxjb25maWd1cmFibGU6dHJ1ZX19
KTtpZihzdXBlckNsYXNzKU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBl
T2Yoc3ViQ2xhc3Msc3VwZXJDbGFzcyk6c3ViQ2xhc3MuX19wcm90b19fPXN1cGVyQ2xhc3M7fWZ1
bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosa2V5LHZhbHVlKXtpZihrZXkgaW4gb2JqKXtPYmpl
Y3QuZGVmaW5lUHJvcGVydHkob2JqLGtleSx7dmFsdWU6dmFsdWUsZW51bWVyYWJsZTp0cnVlLGNv
bmZpZ3VyYWJsZTp0cnVlLHdyaXRhYmxlOnRydWV9KTt9ZWxzZXtvYmpba2V5XT12YWx1ZTt9cmV0
dXJuIG9iajt9dmFyIEZJTFRFUl9USVRMRVM9KF9GSUxURVJfVElUTEVTPXt9LF9kZWZpbmVQcm9w
ZXJ0eShfRklMVEVSX1RJVExFUyxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2NvbnN0YW50
c19Ub2RvRmlsdGVyc19fW1wiYlwiIC8qIFNIT1dfQUxMICovXSwnQWxsJyksX2RlZmluZVByb3Bl
cnR5KF9GSUxURVJfVElUTEVTLF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fY29uc3RhbnRz
X1RvZG9GaWx0ZXJzX19bXCJhXCIgLyogU0hPV19BQ1RJVkUgKi9dLCdBY3RpdmUnKSxfZGVmaW5l
UHJvcGVydHkoX0ZJTFRFUl9USVRMRVMsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19jb25z
dGFudHNfVG9kb0ZpbHRlcnNfX1tcImNcIiAvKiBTSE9XX0NPTVBMRVRFRCAqL10sJ0NvbXBsZXRl
ZCcpLF9GSUxURVJfVElUTEVTKTt2YXIgRm9vdGVyPWZ1bmN0aW9uKF9Db21wb25lbnQpe19pbmhl
cml0cyhGb290ZXIsX0NvbXBvbmVudCk7ZnVuY3Rpb24gRm9vdGVyKCl7X2NsYXNzQ2FsbENoZWNr
KHRoaXMsRm9vdGVyKTtyZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywoRm9v
dGVyLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKEZvb3RlcikpLmFwcGx5KHRoaXMs
YXJndW1lbnRzKSk7fV9jcmVhdGVDbGFzcyhGb290ZXIsW3trZXk6J3JlbmRlclRvZG9Db3VudCcs
dmFsdWU6ZnVuY3Rpb24gcmVuZGVyVG9kb0NvdW50KCl7dmFyIGFjdGl2ZUNvdW50PXRoaXMucHJv
cHMuYWN0aXZlQ291bnQ7dmFyIGl0ZW1Xb3JkPWFjdGl2ZUNvdW50PT09MT8naXRlbSc6J2l0ZW1z
JztyZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdC5hLmNy
ZWF0ZUVsZW1lbnQoJ3NwYW4nLHtjbGFzc05hbWU6J3RvZG8tY291bnQnfSxfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudCgnc3Ryb25nJyxu
dWxsLGFjdGl2ZUNvdW50fHwnTm8nKSwnICcsaXRlbVdvcmQsJyBsZWZ0Jyk7fX0se2tleToncmVu
ZGVyRmlsdGVyTGluaycsdmFsdWU6ZnVuY3Rpb24gcmVuZGVyRmlsdGVyTGluayhmaWx0ZXIpe3Zh
ciB0aXRsZT1GSUxURVJfVElUTEVTW2ZpbHRlcl07dmFyIF9wcm9wcz10aGlzLnByb3BzLHNlbGVj
dGVkRmlsdGVyPV9wcm9wcy5maWx0ZXIsb25TaG93PV9wcm9wcy5vblNob3c7cmV0dXJuIF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KCdh
Jyx7Y2xhc3NOYW1lOl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9jbGFzc25hbWVzX19fZGVm
YXVsdCgpKHtzZWxlY3RlZDpmaWx0ZXI9PT1zZWxlY3RlZEZpbHRlcn0pLHN0eWxlOntjdXJzb3I6
J3BvaW50ZXInfSxvbkNsaWNrOmZ1bmN0aW9uIG9uQ2xpY2soKXtyZXR1cm4gb25TaG93KGZpbHRl
cik7fX0sdGl0bGUpO319LHtrZXk6J3JlbmRlckNsZWFyQnV0dG9uJyx2YWx1ZTpmdW5jdGlvbiBy
ZW5kZXJDbGVhckJ1dHRvbigpe3ZhciBfcHJvcHMyPXRoaXMucHJvcHMsY29tcGxldGVkQ291bnQ9
X3Byb3BzMi5jb21wbGV0ZWRDb3VudCxvbkNsZWFyQ29tcGxldGVkPV9wcm9wczIub25DbGVhckNv
bXBsZXRlZDtpZihjb21wbGV0ZWRDb3VudD4wKXtyZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX3JlYWN0X19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicse2NsYXNzTmFt
ZTonY2xlYXItY29tcGxldGVkJyxvbkNsaWNrOm9uQ2xlYXJDb21wbGV0ZWR9LCdDbGVhciBjb21w
bGV0ZWQnKTt9fX0se2tleToncmVuZGVyJyx2YWx1ZTpmdW5jdGlvbiByZW5kZXIoKXt2YXIgX3Ro
aXMyPXRoaXM7cmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1
bHQuYS5jcmVhdGVFbGVtZW50KCdmb290ZXInLHtjbGFzc05hbWU6J2Zvb3Rlcid9LHRoaXMucmVu
ZGVyVG9kb0NvdW50KCksX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVs
dC5hLmNyZWF0ZUVsZW1lbnQoJ3VsJyx7Y2xhc3NOYW1lOidmaWx0ZXJzJ30sW19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fY29uc3RhbnRzX1RvZG9GaWx0ZXJzX19bXCJiXCIgLyogU0hPV19B
TEwgKi9dLF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fY29uc3RhbnRzX1RvZG9GaWx0ZXJz
X19bXCJhXCIgLyogU0hPV19BQ1RJVkUgKi9dLF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
Y29uc3RhbnRzX1RvZG9GaWx0ZXJzX19bXCJjXCIgLyogU0hPV19DT01QTEVURUQgKi9dXS5tYXAo
ZnVuY3Rpb24oZmlsdGVyKXtyZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0
X19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoJ2xpJyx7a2V5OmZpbHRlcn0sX3RoaXMyLnJlbmRl
ckZpbHRlckxpbmsoZmlsdGVyKSk7fSkpLHRoaXMucmVuZGVyQ2xlYXJCdXR0b24oKSk7fX1dKTty
ZXR1cm4gRm9vdGVyO30oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXCJDb21w
b25lbnRcIl0pO0Zvb3Rlci5wcm9wVHlwZXM9e2NvbXBsZXRlZENvdW50Ol9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9yZWFjdF9fW1wiUHJvcFR5cGVzXCJdLm51bWJlci5pc1JlcXVpcmVkLGFj
dGl2ZUNvdW50Ol9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1wiUHJvcFR5cGVz
XCJdLm51bWJlci5pc1JlcXVpcmVkLGZpbHRlcjpfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
cmVhY3RfX1tcIlByb3BUeXBlc1wiXS5zdHJpbmcuaXNSZXF1aXJlZCxvbkNsZWFyQ29tcGxldGVk
Ol9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1wiUHJvcFR5cGVzXCJdLmZ1bmMu
aXNSZXF1aXJlZCxvblNob3c6X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXCJQ
cm9wVHlwZXNcIl0uZnVuYy5pc1JlcXVpcmVkfTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICov
IF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gKEZvb3Rlcik7XG5cbi8qKiovIH0pLFxuLyog
MjI3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3Bl
cnR5KF9fd2VicGFja19leHBvcnRzX18sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0p
O1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCBcImFkZFRvZG9cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhZGRU
b2RvOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJkZWxldGVUb2RvXCIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gZGVsZXRlVG9kbzsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZWRpdFRvZG9cIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBlZGl0VG9kbzsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGlu
ZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiY29tcGxl
dGVUb2RvXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY29tcGxldGVUb2RvOyB9KTtcbi8qIGhhcm1v
bnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgXCJjb21wbGV0ZUFsbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNvbXBsZXRlQWxs
OyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJjbGVhckNvbXBsZXRlZFwiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIGNsZWFyQ29tcGxldGVkOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvbnN0YW50c19BY3Rpb25UeXBlc19fID0gX193ZWJw
YWNrX3JlcXVpcmVfXyg5Nik7XG52YXIgYWRkVG9kbz1mdW5jdGlvbiBhZGRUb2RvKHRleHQpe3Jl
dHVybnt0eXBlOl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29uc3RhbnRzX0FjdGlvblR5
cGVzX19bXCJhXCIgLyogQUREX1RPRE8gKi9dLHRleHQ6dGV4dH07fTt2YXIgZGVsZXRlVG9kbz1m
dW5jdGlvbiBkZWxldGVUb2RvKGlkKXtyZXR1cm57dHlwZTpfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX2NvbnN0YW50c19BY3Rpb25UeXBlc19fW1wiZVwiIC8qIERFTEVURV9UT0RPICovXSxp
ZDppZH07fTt2YXIgZWRpdFRvZG89ZnVuY3Rpb24gZWRpdFRvZG8oaWQsdGV4dCl7cmV0dXJue3R5
cGU6X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb25zdGFudHNfQWN0aW9uVHlwZXNfX1tc
ImZcIiAvKiBFRElUX1RPRE8gKi9dLGlkOmlkLHRleHQ6dGV4dH07fTt2YXIgY29tcGxldGVUb2Rv
PWZ1bmN0aW9uIGNvbXBsZXRlVG9kbyhpZCl7cmV0dXJue3R5cGU6X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19jb25zdGFudHNfQWN0aW9uVHlwZXNfX1tcImRcIiAvKiBDT01QTEVURV9UT0RP
ICovXSxpZDppZH07fTt2YXIgY29tcGxldGVBbGw9ZnVuY3Rpb24gY29tcGxldGVBbGwoKXtyZXR1
cm57dHlwZTpfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvbnN0YW50c19BY3Rpb25UeXBl
c19fW1wiY1wiIC8qIENPTVBMRVRFX0FMTCAqL119O307dmFyIGNsZWFyQ29tcGxldGVkPWZ1bmN0
aW9uIGNsZWFyQ29tcGxldGVkKCl7cmV0dXJue3R5cGU6X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19jb25zdGFudHNfQWN0aW9uVHlwZXNfX1tcImJcIiAvKiBDTEVBUl9DT01QTEVURUQgKi9d
fTt9O1xuXG4vKioqLyB9KSxcbi8qIDIyOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193
ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3Rc
Ijtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
cmVkdXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjkpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fdG9kb3NfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oMjI5KTtcbnZhciByb290UmVkdWNlcj1PYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX3JlZHV4X19bXCJiXCIgLyogY29tYmluZVJlZHVjZXJzICovXSkoe3RvZG9zOl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fdG9kb3NfX1tcImFcIiAvKiBkZWZhdWx0ICovXX0pOy8q
IGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSAo
cm9vdFJlZHVjZXIpO1xuXG4vKioqLyB9KSxcbi8qIDIyOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVz
ZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19l
eHBvcnRzX19bXCJhXCJdID0gdG9kb3M7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb25zdGFudHNfQWN0aW9uVHlwZXNfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oOTYpO1xuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycil7aWYoQXJy
YXkuaXNBcnJheShhcnIpKXtmb3IodmFyIGk9MCxhcnIyPUFycmF5KGFyci5sZW5ndGgpO2k8YXJy
Lmxlbmd0aDtpKyspe2FycjJbaV09YXJyW2ldO31yZXR1cm4gYXJyMjt9ZWxzZXtyZXR1cm4gQXJy
YXkuZnJvbShhcnIpO319dmFyIGluaXRpYWxTdGF0ZT1bXTtmdW5jdGlvbiB0b2Rvcygpe3ZhciBz
dGF0ZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXVuZGVmaW5lZD9hcmd1bWVu
dHNbMF06aW5pdGlhbFN0YXRlO3ZhciBhY3Rpb249YXJndW1lbnRzWzFdO3N3aXRjaChhY3Rpb24u
dHlwZSl7Y2FzZSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvbnN0YW50c19BY3Rpb25U
eXBlc19fW1wiYVwiIC8qIEFERF9UT0RPICovXTpyZXR1cm5bXS5jb25jYXQoX3RvQ29uc3VtYWJs
ZUFycmF5KHN0YXRlKSxbe2lkOnN0YXRlLnJlZHVjZShmdW5jdGlvbihtYXhJZCx0b2RvKXtyZXR1
cm4gTWF0aC5tYXgodG9kby5pZCxtYXhJZCk7fSwtMSkrMSxjb21wbGV0ZWQ6ZmFsc2UsdGV4dDph
Y3Rpb24udGV4dH1dKTtjYXNlIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29uc3RhbnRz
X0FjdGlvblR5cGVzX19bXCJlXCIgLyogREVMRVRFX1RPRE8gKi9dOnJldHVybiBzdGF0ZS5maWx0
ZXIoZnVuY3Rpb24odG9kbyl7cmV0dXJuIHRvZG8uaWQhPT1hY3Rpb24uaWQ7fSk7Y2FzZSBfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvbnN0YW50c19BY3Rpb25UeXBlc19fW1wiZlwiIC8q
IEVESVRfVE9ETyAqL106cmV0dXJuIHN0YXRlLm1hcChmdW5jdGlvbih0b2RvKXtyZXR1cm4gdG9k
by5pZD09PWFjdGlvbi5pZD9PYmplY3QuYXNzaWduKHt9LHRvZG8se3RleHQ6YWN0aW9uLnRleHR9
KTp0b2RvO30pO2Nhc2UgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb25zdGFudHNfQWN0
aW9uVHlwZXNfX1tcImRcIiAvKiBDT01QTEVURV9UT0RPICovXTpyZXR1cm4gc3RhdGUubWFwKGZ1
bmN0aW9uKHRvZG8pe3JldHVybiB0b2RvLmlkPT09YWN0aW9uLmlkP09iamVjdC5hc3NpZ24oe30s
dG9kbyx7Y29tcGxldGVkOiF0b2RvLmNvbXBsZXRlZH0pOnRvZG87fSk7Y2FzZSBfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX2NvbnN0YW50c19BY3Rpb25UeXBlc19fW1wiY1wiIC8qIENPTVBM
RVRFX0FMTCAqL106dmFyIGFyZUFsbE1hcmtlZD1zdGF0ZS5ldmVyeShmdW5jdGlvbih0b2RvKXty
ZXR1cm4gdG9kby5jb21wbGV0ZWQ7fSk7cmV0dXJuIHN0YXRlLm1hcChmdW5jdGlvbih0b2RvKXty
ZXR1cm4gT2JqZWN0LmFzc2lnbih7fSx0b2RvLHtjb21wbGV0ZWQ6IWFyZUFsbE1hcmtlZH0pO30p
O2Nhc2UgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb25zdGFudHNfQWN0aW9uVHlwZXNf
X1tcImJcIiAvKiBDTEVBUl9DT01QTEVURUQgKi9dOnJldHVybiBzdGF0ZS5maWx0ZXIoZnVuY3Rp
b24odG9kbyl7cmV0dXJuIHRvZG8uY29tcGxldGVkPT09ZmFsc2U7fSk7ZGVmYXVsdDpyZXR1cm4g
c3RhdGU7fX1cblxuLyoqKi8gfSksXG4vKiAyMzAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUs
IGV4cG9ydHMpIHtcblxuLy8gcmVtb3ZlZCBieSBleHRyYWN0LXRleHQtd2VicGFjay1wbHVnaW5c
blxuLyoqKi8gfSlcbi8qKioqKiovIF0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBz
dGF0aWMvanMvbWFpbi4xOGI0MDllMS5qcyIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZh
ciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4g
XHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hl
Y2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxl
SWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7
XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRo
ZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0g
e1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6
IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRc
dG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4
cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBh
cyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhw
b3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxu
XG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxu
IFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBt
b2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7
XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0
X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7
XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0
XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuIFx0XHRcdFx0Y29uZmln
dXJhYmxlOiBmYWxzZSxcbiBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4gXHRcdFx0XHRnZXQ6
IGdldHRlclxuIFx0XHRcdH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhw
b3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xu
IFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBn
ZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdl
dERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rp
b24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNr
X3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xu
IFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRf
X3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVy
biBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7
IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWly
ZV9fLnAgPSBcIi4vXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhw
b3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5z
ID0gOTcpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svYm9vdHN0cmFw
IGFjZDBjMmQ2YzhlMWQwYjBjNTkwIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2Vu
dCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBz
b3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQg
aW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291
cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJl
IGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAq
L1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogVXNlIGludmFyaWFudCgpIHRvIGFzc2VydCBz
dGF0ZSB3aGljaCB5b3VyIHByb2dyYW0gYXNzdW1lcyB0byBiZSB0cnVlLlxuICpcbiAqIFByb3Zp
ZGUgc3ByaW50Zi1zdHlsZSBmb3JtYXQgKG9ubHkgJXMgaXMgc3VwcG9ydGVkKSBhbmQgYXJndW1l
bnRzXG4gKiB0byBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgYnJva2UgYW5kIHdoYXQg
eW91IHdlcmVcbiAqIGV4cGVjdGluZy5cbiAqXG4gKiBUaGUgaW52YXJpYW50IG1lc3NhZ2Ugd2ls
bCBiZSBzdHJpcHBlZCBpbiBwcm9kdWN0aW9uLCBidXQgdGhlIGludmFyaWFudFxuICogd2lsbCBy
ZW1haW4gdG8gZW5zdXJlIGxvZ2ljIGRvZXMgbm90IGRpZmZlciBpbiBwcm9kdWN0aW9uLlxuICov
XG5cbnZhciB2YWxpZGF0ZUZvcm1hdCA9IGZ1bmN0aW9uIHZhbGlkYXRlRm9ybWF0KGZvcm1hdCkg
e307XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZh
bGlkYXRlRm9ybWF0ID0gZnVuY3Rpb24gdmFsaWRhdGVGb3JtYXQoZm9ybWF0KSB7XG4gICAgaWYg
KGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFyaWFu
dCByZXF1aXJlcyBhbiBlcnJvciBtZXNzYWdlIGFyZ3VtZW50Jyk7XG4gICAgfVxuICB9O1xufVxu
XG5mdW5jdGlvbiBpbnZhcmlhbnQoY29uZGl0aW9uLCBmb3JtYXQsIGEsIGIsIGMsIGQsIGUsIGYp
IHtcbiAgdmFsaWRhdGVGb3JtYXQoZm9ybWF0KTtcblxuICBpZiAoIWNvbmRpdGlvbikge1xuICAg
IHZhciBlcnJvcjtcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGVycm9y
ID0gbmV3IEVycm9yKCdNaW5pZmllZCBleGNlcHRpb24gb2NjdXJyZWQ7IHVzZSB0aGUgbm9uLW1p
bmlmaWVkIGRldiBlbnZpcm9ubWVudCAnICsgJ2ZvciB0aGUgZnVsbCBlcnJvciBtZXNzYWdlIGFu
ZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZh
ciBhcmdzID0gW2EsIGIsIGMsIGQsIGUsIGZdO1xuICAgICAgdmFyIGFyZ0luZGV4ID0gMDtcbiAg
ICAgIGVycm9yID0gbmV3IEVycm9yKGZvcm1hdC5yZXBsYWNlKC8lcy9nLCBmdW5jdGlvbiAoKSB7
XG4gICAgICAgIHJldHVybiBhcmdzW2FyZ0luZGV4KytdO1xuICAgICAgfSkpO1xuICAgICAgZXJy
b3IubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICB9XG5cbiAgICBlcnJvci5mcmFt
ZXNUb1BvcCA9IDE7IC8vIHdlIGRvbid0IGNhcmUgYWJvdXQgaW52YXJpYW50J3Mgb3duIGZyYW1l
XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbnZhcmlhbnQ7
XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21v
ZHVsZXMvZmJqcy9saWIvaW52YXJpYW50LmpzXG4vLyBtb2R1bGUgaWQgPSAwXG4vLyBtb2R1bGUg
Y2h1bmtzID0gMCIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTQtMjAxNSwgRmFjZWJvb2ssIEluYy5c
biAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNl
bnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNF
IGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0
aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRF
TlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7
XG5cbnZhciBlbXB0eUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9lbXB0eUZ1bmN0aW9uJyk7XG5cbi8q
KlxuICogU2ltaWxhciB0byBpbnZhcmlhbnQgYnV0IG9ubHkgbG9ncyBhIHdhcm5pbmcgaWYgdGhl
IGNvbmRpdGlvbiBpcyBub3QgbWV0LlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byBsb2cgaXNzdWVz
IGluIGRldmVsb3BtZW50IGVudmlyb25tZW50cyBpbiBjcml0aWNhbFxuICogcGF0aHMuIFJlbW92
aW5nIHRoZSBsb2dnaW5nIGNvZGUgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRzIHdpbGwga2Vl
cCB0aGVcbiAqIHNhbWUgbG9naWMgYW5kIGZvbGxvdyB0aGUgc2FtZSBjb2RlIHBhdGhzLlxuICov
XG5cbnZhciB3YXJuaW5nID0gZW1wdHlGdW5jdGlvbjtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVf
RU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uIHBy
aW50V2FybmluZyhmb3JtYXQpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0
aCwgYXJncyA9IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkg
PCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXld
O1xuICAgIH1cblxuICAgIHZhciBhcmdJbmRleCA9IDA7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2Fy
bmluZzogJyArIGZvcm1hdC5yZXBsYWNlKC8lcy9nLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1
cm4gYXJnc1thcmdJbmRleCsrXTtcbiAgICB9KTtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09
ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAg
ICB0cnkge1xuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxuICAg
ICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3Ug
Y2FuIHVzZSB0aGlzIHN0YWNrXG4gICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNh
dXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdl
KTtcbiAgICB9IGNhdGNoICh4KSB7fVxuICB9O1xuXG4gIHdhcm5pbmcgPSBmdW5jdGlvbiB3YXJu
aW5nKGNvbmRpdGlvbiwgZm9ybWF0KSB7XG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7
XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2B3YXJuaW5nKGNvbmRpdGlvbiwgZm9ybWF0LCAuLi5h
cmdzKWAgcmVxdWlyZXMgYSB3YXJuaW5nICcgKyAnbWVzc2FnZSBhcmd1bWVudCcpO1xuICAgIH1c
blxuICAgIGlmIChmb3JtYXQuaW5kZXhPZignRmFpbGVkIENvbXBvc2l0ZSBwcm9wVHlwZTogJykg
PT09IDApIHtcbiAgICAgIHJldHVybjsgLy8gSWdub3JlIENvbXBvc2l0ZUNvbXBvbmVudCBwcm9w
dHlwZSBjaGVjay5cbiAgICB9XG5cbiAgICBpZiAoIWNvbmRpdGlvbikge1xuICAgICAgZm9yICh2
YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbjIgPiAyID8gX2xl
bjIgLSAyIDogMCksIF9rZXkyID0gMjsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAg
ICBhcmdzW19rZXkyIC0gMl0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgfVxuXG4gICAgICBw
cmludFdhcm5pbmcuYXBwbHkodW5kZWZpbmVkLCBbZm9ybWF0XS5jb25jYXQoYXJncykpO1xuICAg
IH1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB3YXJuaW5nO1xuXG5cbi8vLy8vLy8vLy8v
Ly8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2ZianMvbGliL3dh
cm5pbmcuanNcbi8vIG1vZHVsZSBpZCA9IDFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyoqXG4g
KiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0
aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhl
IHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRc
biAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4g
dGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIFxuICovXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxu
ICogV0FSTklORzogRE8gTk9UIG1hbnVhbGx5IHJlcXVpcmUgdGhpcyBtb2R1bGUuXG4gKiBUaGlz
IGlzIGEgcmVwbGFjZW1lbnQgZm9yIGBpbnZhcmlhbnQoLi4uKWAgdXNlZCBieSB0aGUgZXJyb3Ig
Y29kZSBzeXN0ZW1cbiAqIGFuZCB3aWxsIF9vbmx5XyBiZSByZXF1aXJlZCBieSB0aGUgY29ycmVz
cG9uZGluZyBiYWJlbCBwYXNzLlxuICogSXQgYWx3YXlzIHRocm93cy5cbiAqL1xuXG5mdW5jdGlv
biByZWFjdFByb2RJbnZhcmlhbnQoY29kZSkge1xuICB2YXIgYXJnQ291bnQgPSBhcmd1bWVudHMu
bGVuZ3RoIC0gMTtcblxuICB2YXIgbWVzc2FnZSA9ICdNaW5pZmllZCBSZWFjdCBlcnJvciAjJyAr
IGNvZGUgKyAnOyB2aXNpdCAnICsgJ2h0dHA6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9j
cy9lcnJvci1kZWNvZGVyLmh0bWw/aW52YXJpYW50PScgKyBjb2RlO1xuXG4gIGZvciAodmFyIGFy
Z0lkeCA9IDA7IGFyZ0lkeCA8IGFyZ0NvdW50OyBhcmdJZHgrKykge1xuICAgIG1lc3NhZ2UgKz0g
JyZhcmdzW109JyArIGVuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbYXJnSWR4ICsgMV0pO1xu
ICB9XG5cbiAgbWVzc2FnZSArPSAnIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9u
LW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCcgKyAnIGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRp
b25hbCBoZWxwZnVsIHdhcm5pbmdzLic7XG5cbiAgdmFyIGVycm9yID0gbmV3IEVycm9yKG1lc3Nh
Z2UpO1xuICBlcnJvci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICBlcnJvci5mcmFt
ZXNUb1BvcCA9IDE7IC8vIHdlIGRvbid0IGNhcmUgYWJvdXQgcmVhY3RQcm9kSW52YXJpYW50J3Mg
b3duIGZyYW1lXG5cbiAgdGhyb3cgZXJyb3I7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVhY3RQ
cm9kSW52YXJpYW50O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJc
bi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvcmVhY3RQcm9kSW52YXJpYW50LmpzXG4v
LyBtb2R1bGUgaWQgPSAyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qXG5vYmplY3QtYXNzaWdu
XG4oYykgU2luZHJlIFNvcmh1c1xuQGxpY2Vuc2UgTUlUXG4qL1xuXG4ndXNlIHN0cmljdCc7XG4v
KiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGdldE93blByb3BlcnR5U3lt
Ym9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgaGFzT3duUHJvcGVydHkg
PSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUg
PSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09i
amVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xu
XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3
aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59
XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcblx0dHJ5IHtcblx0XHRpZiAoIU9iamVj
dC5hc3NpZ24pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBEZXRlY3Qg
YnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuXG5c
blx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00
MTE4XG5cdFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJs
ZS1saW5lIG5vLW5ldy13cmFwcGVyc1xuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2Jq
ZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVy
biBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avdjgv
aXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIg
aSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJD
b2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVy
dHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07
XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5c
dFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVt
Lm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRc
dCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRl
cikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2Jq
ZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0
J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxu
XHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBXZSBkb24ndCBleHBl
Y3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxuXHRc
dHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2
ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIg
ZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0
Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0g
T2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRc
dFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXld
ID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChnZXRPd25Qcm9wZXJ0eVN5
bWJvbHMpIHtcblx0XHRcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5c
dFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0
aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRc
dHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxu
XHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9c
bi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9vYmplY3QtYXNzaWduL2luZGV4
LmpzXG4vLyBtb2R1bGUgaWQgPSAzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qKlxuICogQ29w
eXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0
eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGly
ZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBh
dGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUg
ZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfcHJvZEludmFyaWFu
dCA9IHJlcXVpcmUoJy4vcmVhY3RQcm9kSW52YXJpYW50Jyk7XG5cbnZhciBET01Qcm9wZXJ0eSA9
IHJlcXVpcmUoJy4vRE9NUHJvcGVydHknKTtcbnZhciBSZWFjdERPTUNvbXBvbmVudEZsYWdzID0g
cmVxdWlyZSgnLi9SZWFjdERPTUNvbXBvbmVudEZsYWdzJyk7XG5cbnZhciBpbnZhcmlhbnQgPSBy
ZXF1aXJlKCdmYmpzL2xpYi9pbnZhcmlhbnQnKTtcblxudmFyIEFUVFJfTkFNRSA9IERPTVByb3Bl
cnR5LklEX0FUVFJJQlVURV9OQU1FO1xudmFyIEZsYWdzID0gUmVhY3RET01Db21wb25lbnRGbGFn
cztcblxudmFyIGludGVybmFsSW5zdGFuY2VLZXkgPSAnX19yZWFjdEludGVybmFsSW5zdGFuY2Uk
JyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpO1xuXG4vKipcbiAqIENoZWNr
IGlmIGEgZ2l2ZW4gbm9kZSBzaG91bGQgYmUgY2FjaGVkLlxuICovXG5mdW5jdGlvbiBzaG91bGRQ
cmVjYWNoZU5vZGUobm9kZSwgbm9kZUlEKSB7XG4gIHJldHVybiBub2RlLm5vZGVUeXBlID09PSAx
ICYmIG5vZGUuZ2V0QXR0cmlidXRlKEFUVFJfTkFNRSkgPT09IFN0cmluZyhub2RlSUQpIHx8IG5v
ZGUubm9kZVR5cGUgPT09IDggJiYgbm9kZS5ub2RlVmFsdWUgPT09ICcgcmVhY3QtdGV4dDogJyAr
IG5vZGVJRCArICcgJyB8fCBub2RlLm5vZGVUeXBlID09PSA4ICYmIG5vZGUubm9kZVZhbHVlID09
PSAnIHJlYWN0LWVtcHR5OiAnICsgbm9kZUlEICsgJyAnO1xufVxuXG4vKipcbiAqIERyaWxsIGRv
d24gKHRocm91Z2ggY29tcG9zaXRlcyBhbmQgZW1wdHkgY29tcG9uZW50cykgdW50aWwgd2UgZ2V0
IGEgaG9zdCBvclxuICogaG9zdCB0ZXh0IGNvbXBvbmVudC5cbiAqXG4gKiBUaGlzIGlzIHByZXR0
eSBwb2x5bW9ycGhpYyBidXQgdW5hdm9pZGFibGUgd2l0aCB0aGUgY3VycmVudCBzdHJ1Y3R1cmUg
d2UgaGF2ZVxuICogZm9yIGBfcmVuZGVyZWRDaGlsZHJlbmAuXG4gKi9cbmZ1bmN0aW9uIGdldFJl
bmRlcmVkSG9zdE9yVGV4dEZyb21Db21wb25lbnQoY29tcG9uZW50KSB7XG4gIHZhciByZW5kZXJl
ZDtcbiAgd2hpbGUgKHJlbmRlcmVkID0gY29tcG9uZW50Ll9yZW5kZXJlZENvbXBvbmVudCkge1xu
ICAgIGNvbXBvbmVudCA9IHJlbmRlcmVkO1xuICB9XG4gIHJldHVybiBjb21wb25lbnQ7XG59XG5c
bi8qKlxuICogUG9wdWxhdGUgYF9ob3N0Tm9kZWAgb24gdGhlIHJlbmRlcmVkIGhvc3QvdGV4dCBj
b21wb25lbnQgd2l0aCB0aGUgZ2l2ZW5cbiAqIERPTSBub2RlLiBUaGUgcGFzc2VkIGBpbnN0YCBj
YW4gYmUgYSBjb21wb3NpdGUuXG4gKi9cbmZ1bmN0aW9uIHByZWNhY2hlTm9kZShpbnN0LCBub2Rl
KSB7XG4gIHZhciBob3N0SW5zdCA9IGdldFJlbmRlcmVkSG9zdE9yVGV4dEZyb21Db21wb25lbnQo
aW5zdCk7XG4gIGhvc3RJbnN0Ll9ob3N0Tm9kZSA9IG5vZGU7XG4gIG5vZGVbaW50ZXJuYWxJbnN0
YW5jZUtleV0gPSBob3N0SW5zdDtcbn1cblxuZnVuY3Rpb24gdW5jYWNoZU5vZGUoaW5zdCkge1xu
ICB2YXIgbm9kZSA9IGluc3QuX2hvc3ROb2RlO1xuICBpZiAobm9kZSkge1xuICAgIGRlbGV0ZSBu
b2RlW2ludGVybmFsSW5zdGFuY2VLZXldO1xuICAgIGluc3QuX2hvc3ROb2RlID0gbnVsbDtcbiAg
fVxufVxuXG4vKipcbiAqIFBvcHVsYXRlIGBfaG9zdE5vZGVgIG9uIGVhY2ggY2hpbGQgb2YgYGlu
c3RgLCBhc3N1bWluZyB0aGF0IHRoZSBjaGlsZHJlblxuICogbWF0Y2ggdXAgd2l0aCB0aGUgRE9N
IChlbGVtZW50KSBjaGlsZHJlbiBvZiBgbm9kZWAuXG4gKlxuICogV2UgY2FjaGUgZW50aXJlIGxl
dmVscyBhdCBvbmNlIHRvIGF2b2lkIGFuIG5eMiBwcm9ibGVtIHdoZXJlIHdlIGFjY2VzcyB0aGVc
biAqIGNoaWxkcmVuIG9mIGEgbm9kZSBzZXF1ZW50aWFsbHkgYW5kIGhhdmUgdG8gd2FsayBmcm9t
IHRoZSBzdGFydCB0byBvdXIgdGFyZ2V0XG4gKiBub2RlIGV2ZXJ5IHRpbWUuXG4gKlxuICogU2lu
Y2Ugd2UgdXBkYXRlIGBfcmVuZGVyZWRDaGlsZHJlbmAgYW5kIHRoZSBhY3R1YWwgRE9NIGF0IChz
bGlnaHRseSlcbiAqIGRpZmZlcmVudCB0aW1lcywgd2UgY291bGQgcmFjZSBoZXJlIGFuZCBzZWUg
YSBuZXdlciBgX3JlbmRlcmVkQ2hpbGRyZW5gIHRoYW5cbiAqIHRoZSBET00gbm9kZXMgd2Ugc2Vl
LiBUbyBhdm9pZCB0aGlzLCBSZWFjdE11bHRpQ2hpbGQgY2FsbHNcbiAqIGBwcmVwYXJlVG9NYW5h
Z2VDaGlsZHJlbmAgYmVmb3JlIHdlIGNoYW5nZSBgX3JlbmRlcmVkQ2hpbGRyZW5gLCBhdCB3aGlj
aFxuICogdGltZSB0aGUgY29udGFpbmVyJ3MgY2hpbGQgbm9kZXMgYXJlIGFsd2F5cyBjYWNoZWQg
KHVudGlsIGl0IHVubW91bnRzKS5cbiAqL1xuZnVuY3Rpb24gcHJlY2FjaGVDaGlsZE5vZGVzKGlu
c3QsIG5vZGUpIHtcbiAgaWYgKGluc3QuX2ZsYWdzICYgRmxhZ3MuaGFzQ2FjaGVkQ2hpbGROb2Rl
cykge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgY2hpbGRyZW4gPSBpbnN0Ll9yZW5kZXJlZENo
aWxkcmVuO1xuICB2YXIgY2hpbGROb2RlID0gbm9kZS5maXJzdENoaWxkO1xuICBvdXRlcjogZm9y
ICh2YXIgbmFtZSBpbiBjaGlsZHJlbikge1xuICAgIGlmICghY2hpbGRyZW4uaGFzT3duUHJvcGVy
dHkobmFtZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB2YXIgY2hpbGRJbnN0ID0g
Y2hpbGRyZW5bbmFtZV07XG4gICAgdmFyIGNoaWxkSUQgPSBnZXRSZW5kZXJlZEhvc3RPclRleHRG
cm9tQ29tcG9uZW50KGNoaWxkSW5zdCkuX2RvbUlEO1xuICAgIGlmIChjaGlsZElEID09PSAwKSB7
XG4gICAgICAvLyBXZSdyZSBjdXJyZW50bHkgdW5tb3VudGluZyB0aGlzIGNoaWxkIGluIFJlYWN0
TXVsdGlDaGlsZDsgc2tpcCBpdC5cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICAvLyBXZSBh
c3N1bWUgdGhlIGNoaWxkIG5vZGVzIGFyZSBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgY2hpbGQg
aW5zdGFuY2VzLlxuICAgIGZvciAoOyBjaGlsZE5vZGUgIT09IG51bGw7IGNoaWxkTm9kZSA9IGNo
aWxkTm9kZS5uZXh0U2libGluZykge1xuICAgICAgaWYgKHNob3VsZFByZWNhY2hlTm9kZShjaGls
ZE5vZGUsIGNoaWxkSUQpKSB7XG4gICAgICAgIHByZWNhY2hlTm9kZShjaGlsZEluc3QsIGNoaWxk
Tm9kZSk7XG4gICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBX
ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIERPTSBjaGlsZHJlbiB3aXRob3V0IGZpbmRpbmcgYW4g
SUQgbWF0Y2guXG4gICAgIWZhbHNlID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0
aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ1VuYWJsZSB0byBmaW5kIGVsZW1lbnQgd2l0aCBJRCAl
cy4nLCBjaGlsZElEKSA6IF9wcm9kSW52YXJpYW50KCczMicsIGNoaWxkSUQpIDogdm9pZCAwO1xu
ICB9XG4gIGluc3QuX2ZsYWdzIHw9IEZsYWdzLmhhc0NhY2hlZENoaWxkTm9kZXM7XG59XG5cbi8q
KlxuICogR2l2ZW4gYSBET00gbm9kZSwgcmV0dXJuIHRoZSBjbG9zZXN0IFJlYWN0RE9NQ29tcG9u
ZW50IG9yXG4gKiBSZWFjdERPTVRleHRDb21wb25lbnQgaW5zdGFuY2UgYW5jZXN0b3IuXG4gKi9c
bmZ1bmN0aW9uIGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKG5vZGUpIHtcbiAgaWYgKG5vZGVb
aW50ZXJuYWxJbnN0YW5jZUtleV0pIHtcbiAgICByZXR1cm4gbm9kZVtpbnRlcm5hbEluc3RhbmNl
S2V5XTtcbiAgfVxuXG4gIC8vIFdhbGsgdXAgdGhlIHRyZWUgdW50aWwgd2UgZmluZCBhbiBhbmNl
c3RvciB3aG9zZSBpbnN0YW5jZSB3ZSBoYXZlIGNhY2hlZC5cbiAgdmFyIHBhcmVudHMgPSBbXTtc
biAgd2hpbGUgKCFub2RlW2ludGVybmFsSW5zdGFuY2VLZXldKSB7XG4gICAgcGFyZW50cy5wdXNo
KG5vZGUpO1xuICAgIGlmIChub2RlLnBhcmVudE5vZGUpIHtcbiAgICAgIG5vZGUgPSBub2RlLnBh
cmVudE5vZGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRvcCBvZiB0aGUgdHJlZS4gVGhpcyBu
b2RlIG11c3Qgbm90IGJlIHBhcnQgb2YgYSBSZWFjdCB0cmVlIChvciBpc1xuICAgICAgLy8gdW5t
b3VudGVkLCBwb3RlbnRpYWxseSkuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxu
ICB2YXIgY2xvc2VzdDtcbiAgdmFyIGluc3Q7XG4gIGZvciAoOyBub2RlICYmIChpbnN0ID0gbm9k
ZVtpbnRlcm5hbEluc3RhbmNlS2V5XSk7IG5vZGUgPSBwYXJlbnRzLnBvcCgpKSB7XG4gICAgY2xv
c2VzdCA9IGluc3Q7XG4gICAgaWYgKHBhcmVudHMubGVuZ3RoKSB7XG4gICAgICBwcmVjYWNoZUNo
aWxkTm9kZXMoaW5zdCwgbm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNsb3Nlc3Q7XG59
XG5cbi8qKlxuICogR2l2ZW4gYSBET00gbm9kZSwgcmV0dXJuIHRoZSBSZWFjdERPTUNvbXBvbmVu
dCBvciBSZWFjdERPTVRleHRDb21wb25lbnRcbiAqIGluc3RhbmNlLCBvciBudWxsIGlmIHRoZSBu
b2RlIHdhcyBub3QgcmVuZGVyZWQgYnkgdGhpcyBSZWFjdC5cbiAqL1xuZnVuY3Rpb24gZ2V0SW5z
dGFuY2VGcm9tTm9kZShub2RlKSB7XG4gIHZhciBpbnN0ID0gZ2V0Q2xvc2VzdEluc3RhbmNlRnJv
bU5vZGUobm9kZSk7XG4gIGlmIChpbnN0ICE9IG51bGwgJiYgaW5zdC5faG9zdE5vZGUgPT09IG5v
ZGUpIHtcbiAgICByZXR1cm4gaW5zdDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAg
fVxufVxuXG4vKipcbiAqIEdpdmVuIGEgUmVhY3RET01Db21wb25lbnQgb3IgUmVhY3RET01UZXh0
Q29tcG9uZW50LCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmdcbiAqIERPTSBub2RlLlxuICovXG5m
dW5jdGlvbiBnZXROb2RlRnJvbUluc3RhbmNlKGluc3QpIHtcbiAgLy8gV2l0aG91dCB0aGlzIGZp
cnN0IGludmFyaWFudCwgcGFzc2luZyBhIG5vbi1ET00tY29tcG9uZW50IHRyaWdnZXJzIHRoZSBu
ZXh0XG4gIC8vIGludmFyaWFudCBmb3IgYSBtaXNzaW5nIHBhcmVudCwgd2hpY2ggaXMgc3VwZXIg
Y29uZnVzaW5nLlxuICAhKGluc3QuX2hvc3ROb2RlICE9PSB1bmRlZmluZWQpID8gcHJvY2Vzcy5l
bnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ2dldE5vZGVG
cm9tSW5zdGFuY2U6IEludmFsaWQgYXJndW1lbnQuJykgOiBfcHJvZEludmFyaWFudCgnMzMnKSA6
IHZvaWQgMDtcblxuICBpZiAoaW5zdC5faG9zdE5vZGUpIHtcbiAgICByZXR1cm4gaW5zdC5faG9z
dE5vZGU7XG4gIH1cblxuICAvLyBXYWxrIHVwIHRoZSB0cmVlIHVudGlsIHdlIGZpbmQgYW4gYW5j
ZXN0b3Igd2hvc2UgRE9NIG5vZGUgd2UgaGF2ZSBjYWNoZWQuXG4gIHZhciBwYXJlbnRzID0gW107
XG4gIHdoaWxlICghaW5zdC5faG9zdE5vZGUpIHtcbiAgICBwYXJlbnRzLnB1c2goaW5zdCk7XG4g
ICAgIWluc3QuX2hvc3RQYXJlbnQgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rp
b24nID8gaW52YXJpYW50KGZhbHNlLCAnUmVhY3QgRE9NIHRyZWUgcm9vdCBzaG91bGQgYWx3YXlz
IGhhdmUgYSBub2RlIHJlZmVyZW5jZS4nKSA6IF9wcm9kSW52YXJpYW50KCczNCcpIDogdm9pZCAw
O1xuICAgIGluc3QgPSBpbnN0Ll9ob3N0UGFyZW50O1xuICB9XG5cbiAgLy8gTm93IHBhcmVudHMg
Y29udGFpbnMgZWFjaCBhbmNlc3RvciB0aGF0IGRvZXMgKm5vdCogaGF2ZSBhIGNhY2hlZCBuYXRp
dmVcbiAgLy8gbm9kZSwgYW5kIGBpbnN0YCBpcyB0aGUgZGVlcGVzdCBhbmNlc3RvciB0aGF0IGRv
ZXMuXG4gIGZvciAoOyBwYXJlbnRzLmxlbmd0aDsgaW5zdCA9IHBhcmVudHMucG9wKCkpIHtcbiAg
ICBwcmVjYWNoZUNoaWxkTm9kZXMoaW5zdCwgaW5zdC5faG9zdE5vZGUpO1xuICB9XG5cbiAgcmV0
dXJuIGluc3QuX2hvc3ROb2RlO1xufVxuXG52YXIgUmVhY3RET01Db21wb25lbnRUcmVlID0ge1xu
ICBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZTogZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUs
XG4gIGdldEluc3RhbmNlRnJvbU5vZGU6IGdldEluc3RhbmNlRnJvbU5vZGUsXG4gIGdldE5vZGVG
cm9tSW5zdGFuY2U6IGdldE5vZGVGcm9tSW5zdGFuY2UsXG4gIHByZWNhY2hlQ2hpbGROb2Rlczog
cHJlY2FjaGVDaGlsZE5vZGVzLFxuICBwcmVjYWNoZU5vZGU6IHByZWNhY2hlTm9kZSxcbiAgdW5j
YWNoZU5vZGU6IHVuY2FjaGVOb2RlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NQ29t
cG9uZW50VHJlZTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4v
LyAuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RE9NQ29tcG9uZW50VHJlZS5qc1xu
Ly8gbW9kdWxlIGlkID0gNFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipcbiAqIENvcHlyaWdo
dCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5
bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJl
Y3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0
ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBk
aXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGNhblVzZURPTSA9ICEh
KHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5kb2N1bWVudCAmJiB3aW5k
b3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbi8qKlxuICogU2ltcGxlLCBsaWdodHdlaWdo
dCBtb2R1bGUgYXNzaXN0aW5nIHdpdGggdGhlIGRldGVjdGlvbiBhbmQgY29udGV4dCBvZlxuICog
V29ya2VyLiBIZWxwcyBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMgYW5kIGFsbG93cyBjb2Rl
IHRvIHJlYXNvbiBhYm91dFxuICogd2hldGhlciBvciBub3QgdGhleSBhcmUgaW4gYSBXb3JrZXIs
IGV2ZW4gaWYgdGhleSBuZXZlciBpbmNsdWRlIHRoZSBtYWluXG4gKiBgUmVhY3RXb3JrZXJgIGRl
cGVuZGVuY3kuXG4gKi9cbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHtcblxuICBjYW5Vc2VE
T006IGNhblVzZURPTSxcblxuICBjYW5Vc2VXb3JrZXJzOiB0eXBlb2YgV29ya2VyICE9PSAndW5k
ZWZpbmVkJyxcblxuICBjYW5Vc2VFdmVudExpc3RlbmVyczogY2FuVXNlRE9NICYmICEhKHdpbmRv
dy5hZGRFdmVudExpc3RlbmVyIHx8IHdpbmRvdy5hdHRhY2hFdmVudCksXG5cbiAgY2FuVXNlVmll
d3BvcnQ6IGNhblVzZURPTSAmJiAhIXdpbmRvdy5zY3JlZW4sXG5cbiAgaXNJbldvcmtlcjogIWNh
blVzZURPTSAvLyBGb3Igbm93LCB0aGlzIGlzIHRydWUgLSBtaWdodCBjaGFuZ2UgaW4gdGhlIGZ1
dHVyZS5cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBFeGVjdXRpb25FbnZpcm9ubWVudDtcblxu
XG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxl
cy9mYmpzL2xpYi9FeGVjdXRpb25FbnZpcm9ubWVudC5qc1xuLy8gbW9kdWxlIGlkID0gNVxuLy8g
bW9kdWxlIGNodW5rcyA9IDAiLCJcInVzZSBzdHJpY3RcIjtcblxuLyoqXG4gKiBDb3B5cmlnaHQg
KGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
XG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxl
IGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0
b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVu
dCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGly
ZWN0b3J5LlxuICpcbiAqIFxuICovXG5cbmZ1bmN0aW9uIG1ha2VFbXB0eUZ1bmN0aW9uKGFyZykg
e1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBhcmc7XG4gIH07XG59XG5cbi8q
KlxuICogVGhpcyBmdW5jdGlvbiBhY2NlcHRzIGFuZCBkaXNjYXJkcyBpbnB1dHM7IGl0IGhhcyBu
byBzaWRlIGVmZmVjdHMuIFRoaXMgaXNcbiAqIHByaW1hcmlseSB1c2VmdWwgaWRpb21hdGljYWxs
eSBmb3Igb3ZlcnJpZGFibGUgZnVuY3Rpb24gZW5kcG9pbnRzIHdoaWNoXG4gKiBhbHdheXMgbmVl
ZCB0byBiZSBjYWxsYWJsZSwgc2luY2UgSlMgbGFja3MgYSBudWxsLWNhbGwgaWRpb20gYWxhIENv
Y29hLlxuICovXG52YXIgZW1wdHlGdW5jdGlvbiA9IGZ1bmN0aW9uIGVtcHR5RnVuY3Rpb24oKSB7
fTtcblxuZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJucyA9IG1ha2VFbXB0eUZ1bmN0aW9uO1xuZW1w
dHlGdW5jdGlvbi50aGF0UmV0dXJuc0ZhbHNlID0gbWFrZUVtcHR5RnVuY3Rpb24oZmFsc2UpO1xu
ZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc1RydWUgPSBtYWtlRW1wdHlGdW5jdGlvbih0cnVlKTtc
bmVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNOdWxsID0gbWFrZUVtcHR5RnVuY3Rpb24obnVsbCk7
XG5lbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zVGhpcyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJu
IHRoaXM7XG59O1xuZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc0FyZ3VtZW50ID0gZnVuY3Rpb24g
KGFyZykge1xuICByZXR1cm4gYXJnO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbXB0eUZ1bmN0
aW9uO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9k
ZV9tb2R1bGVzL2ZianMvbGliL2VtcHR5RnVuY3Rpb24uanNcbi8vIG1vZHVsZSBpZCA9IDZcbi8v
IG1vZHVsZSBjaHVua3MgPSAwIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNi1wcmVzZW50LCBGYWNl
Ym9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBj
b2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVc
biAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJl
ZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQg
aW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9c
blxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBUcnVzdCB0aGUgZGV2ZWxvcGVyIHRvIG9ubHkgdXNlIFJl
YWN0SW5zdHJ1bWVudGF0aW9uIHdpdGggYSBfX0RFVl9fIGNoZWNrXG5cbnZhciBkZWJ1Z1Rvb2wg
PSBudWxsO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xu
ICB2YXIgUmVhY3REZWJ1Z1Rvb2wgPSByZXF1aXJlKCcuL1JlYWN0RGVidWdUb29sJyk7XG4gIGRl
YnVnVG9vbCA9IFJlYWN0RGVidWdUb29sO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHsgZGVidWdU
b29sOiBkZWJ1Z1Rvb2wgfTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9P
VEVSXG4vLyAuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0SW5zdHJ1bWVudGF0aW9u
LmpzXG4vLyBtb2R1bGUgaWQgPSA3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qKlxuICogQ29w
eXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0
eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGly
ZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBh
dGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUg
ZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfcHJvZEludmFyaWFu
dCA9IHJlcXVpcmUoJy4vcmVhY3RQcm9kSW52YXJpYW50JyksXG4gICAgX2Fzc2lnbiA9IHJlcXVp
cmUoJ29iamVjdC1hc3NpZ24nKTtcblxudmFyIENhbGxiYWNrUXVldWUgPSByZXF1aXJlKCcuL0Nh
bGxiYWNrUXVldWUnKTtcbnZhciBQb29sZWRDbGFzcyA9IHJlcXVpcmUoJy4vUG9vbGVkQ2xhc3Mn
KTtcbnZhciBSZWFjdEZlYXR1cmVGbGFncyA9IHJlcXVpcmUoJy4vUmVhY3RGZWF0dXJlRmxhZ3Mn
KTtcbnZhciBSZWFjdFJlY29uY2lsZXIgPSByZXF1aXJlKCcuL1JlYWN0UmVjb25jaWxlcicpO1xu
dmFyIFRyYW5zYWN0aW9uID0gcmVxdWlyZSgnLi9UcmFuc2FjdGlvbicpO1xuXG52YXIgaW52YXJp
YW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG5cbnZhciBkaXJ0eUNvbXBvbmVu
dHMgPSBbXTtcbnZhciB1cGRhdGVCYXRjaE51bWJlciA9IDA7XG52YXIgYXNhcENhbGxiYWNrUXVl
dWUgPSBDYWxsYmFja1F1ZXVlLmdldFBvb2xlZCgpO1xudmFyIGFzYXBFbnF1ZXVlZCA9IGZhbHNl
O1xuXG52YXIgYmF0Y2hpbmdTdHJhdGVneSA9IG51bGw7XG5cbmZ1bmN0aW9uIGVuc3VyZUluamVj
dGVkKCkge1xuICAhKFJlYWN0VXBkYXRlcy5SZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uICYmIGJh
dGNoaW5nU3RyYXRlZ3kpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/
IGludmFyaWFudChmYWxzZSwgJ1JlYWN0VXBkYXRlczogbXVzdCBpbmplY3QgYSByZWNvbmNpbGUg
dHJhbnNhY3Rpb24gY2xhc3MgYW5kIGJhdGNoaW5nIHN0cmF0ZWd5JykgOiBfcHJvZEludmFyaWFu
dCgnMTIzJykgOiB2b2lkIDA7XG59XG5cbnZhciBORVNURURfVVBEQVRFUyA9IHtcbiAgaW5pdGlh
bGl6ZTogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZGlydHlDb21wb25lbnRzTGVuZ3RoID0gZGly
dHlDb21wb25lbnRzLmxlbmd0aDtcbiAgfSxcbiAgY2xvc2U6IGZ1bmN0aW9uICgpIHtcbiAgICBp
ZiAodGhpcy5kaXJ0eUNvbXBvbmVudHNMZW5ndGggIT09IGRpcnR5Q29tcG9uZW50cy5sZW5ndGgp
IHtcbiAgICAgIC8vIEFkZGl0aW9uYWwgdXBkYXRlcyB3ZXJlIGVucXVldWVkIGJ5IGNvbXBvbmVu
dERpZFVwZGF0ZSBoYW5kbGVycyBvclxuICAgICAgLy8gc2ltaWxhcjsgYmVmb3JlIG91ciBvd24g
VVBEQVRFX1FVRVVFSU5HIHdyYXBwZXIgY2xvc2VzLCB3ZSB3YW50IHRvIHJ1blxuICAgICAgLy8g
dGhlc2UgbmV3IHVwZGF0ZXMgc28gdGhhdCBpZiBBJ3MgY29tcG9uZW50RGlkVXBkYXRlIGNhbGxz
IHNldFN0YXRlIG9uXG4gICAgICAvLyBCLCBCIHdpbGwgdXBkYXRlIGJlZm9yZSB0aGUgY2FsbGJh
Y2sgQSdzIHVwZGF0ZXIgcHJvdmlkZWQgd2hlbiBjYWxsaW5nXG4gICAgICAvLyBzZXRTdGF0ZS5c
biAgICAgIGRpcnR5Q29tcG9uZW50cy5zcGxpY2UoMCwgdGhpcy5kaXJ0eUNvbXBvbmVudHNMZW5n
dGgpO1xuICAgICAgZmx1c2hCYXRjaGVkVXBkYXRlcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBk
aXJ0eUNvbXBvbmVudHMubGVuZ3RoID0gMDtcbiAgICB9XG4gIH1cbn07XG5cbnZhciBVUERBVEVf
UVVFVUVJTkcgPSB7XG4gIGluaXRpYWxpemU6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmNhbGxi
YWNrUXVldWUucmVzZXQoKTtcbiAgfSxcbiAgY2xvc2U6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlz
LmNhbGxiYWNrUXVldWUubm90aWZ5QWxsKCk7XG4gIH1cbn07XG5cbnZhciBUUkFOU0FDVElPTl9X
UkFQUEVSUyA9IFtORVNURURfVVBEQVRFUywgVVBEQVRFX1FVRVVFSU5HXTtcblxuZnVuY3Rpb24g
UmVhY3RVcGRhdGVzRmx1c2hUcmFuc2FjdGlvbigpIHtcbiAgdGhpcy5yZWluaXRpYWxpemVUcmFu
c2FjdGlvbigpO1xuICB0aGlzLmRpcnR5Q29tcG9uZW50c0xlbmd0aCA9IG51bGw7XG4gIHRoaXMu
Y2FsbGJhY2tRdWV1ZSA9IENhbGxiYWNrUXVldWUuZ2V0UG9vbGVkKCk7XG4gIHRoaXMucmVjb25j
aWxlVHJhbnNhY3Rpb24gPSBSZWFjdFVwZGF0ZXMuUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbi5n
ZXRQb29sZWQoXG4gIC8qIHVzZUNyZWF0ZUVsZW1lbnQgKi90cnVlKTtcbn1cblxuX2Fzc2lnbihS
ZWFjdFVwZGF0ZXNGbHVzaFRyYW5zYWN0aW9uLnByb3RvdHlwZSwgVHJhbnNhY3Rpb24sIHtcbiAg
Z2V0VHJhbnNhY3Rpb25XcmFwcGVyczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBUUkFOU0FD
VElPTl9XUkFQUEVSUztcbiAgfSxcblxuICBkZXN0cnVjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAg
dGhpcy5kaXJ0eUNvbXBvbmVudHNMZW5ndGggPSBudWxsO1xuICAgIENhbGxiYWNrUXVldWUucmVs
ZWFzZSh0aGlzLmNhbGxiYWNrUXVldWUpO1xuICAgIHRoaXMuY2FsbGJhY2tRdWV1ZSA9IG51bGw7
XG4gICAgUmVhY3RVcGRhdGVzLlJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24ucmVsZWFzZSh0aGlz
LnJlY29uY2lsZVRyYW5zYWN0aW9uKTtcbiAgICB0aGlzLnJlY29uY2lsZVRyYW5zYWN0aW9uID0g
bnVsbDtcbiAgfSxcblxuICBwZXJmb3JtOiBmdW5jdGlvbiAobWV0aG9kLCBzY29wZSwgYSkge1xu
ICAgIC8vIEVzc2VudGlhbGx5IGNhbGxzIGB0aGlzLnJlY29uY2lsZVRyYW5zYWN0aW9uLnBlcmZv
cm0obWV0aG9kLCBzY29wZSwgYSlgXG4gICAgLy8gd2l0aCB0aGlzIHRyYW5zYWN0aW9uJ3Mgd3Jh
cHBlcnMgYXJvdW5kIGl0LlxuICAgIHJldHVybiBUcmFuc2FjdGlvbi5wZXJmb3JtLmNhbGwodGhp
cywgdGhpcy5yZWNvbmNpbGVUcmFuc2FjdGlvbi5wZXJmb3JtLCB0aGlzLnJlY29uY2lsZVRyYW5z
YWN0aW9uLCBtZXRob2QsIHNjb3BlLCBhKTtcbiAgfVxufSk7XG5cblBvb2xlZENsYXNzLmFkZFBv
b2xpbmdUbyhSZWFjdFVwZGF0ZXNGbHVzaFRyYW5zYWN0aW9uKTtcblxuZnVuY3Rpb24gYmF0Y2hl
ZFVwZGF0ZXMoY2FsbGJhY2ssIGEsIGIsIGMsIGQsIGUpIHtcbiAgZW5zdXJlSW5qZWN0ZWQoKTtc
biAgcmV0dXJuIGJhdGNoaW5nU3RyYXRlZ3kuYmF0Y2hlZFVwZGF0ZXMoY2FsbGJhY2ssIGEsIGIs
IGMsIGQsIGUpO1xufVxuXG4vKipcbiAqIEFycmF5IGNvbXBhcmF0b3IgZm9yIFJlYWN0Q29tcG9u
ZW50cyBieSBtb3VudCBvcmRlcmluZy5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBj
MSBmaXJzdCBjb21wb25lbnQgeW91J3JlIGNvbXBhcmluZ1xuICogQHBhcmFtIHtSZWFjdENvbXBv
bmVudH0gYzIgc2Vjb25kIGNvbXBvbmVudCB5b3UncmUgY29tcGFyaW5nXG4gKiBAcmV0dXJuIHtu
dW1iZXJ9IFJldHVybiB2YWx1ZSB1c2FibGUgYnkgQXJyYXkucHJvdG90eXBlLnNvcnQoKS5cbiAq
L1xuZnVuY3Rpb24gbW91bnRPcmRlckNvbXBhcmF0b3IoYzEsIGMyKSB7XG4gIHJldHVybiBjMS5f
bW91bnRPcmRlciAtIGMyLl9tb3VudE9yZGVyO1xufVxuXG5mdW5jdGlvbiBydW5CYXRjaGVkVXBk
YXRlcyh0cmFuc2FjdGlvbikge1xuICB2YXIgbGVuID0gdHJhbnNhY3Rpb24uZGlydHlDb21wb25l
bnRzTGVuZ3RoO1xuICAhKGxlbiA9PT0gZGlydHlDb21wb25lbnRzLmxlbmd0aCkgPyBwcm9jZXNz
LmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnRXhwZWN0
ZWQgZmx1c2ggdHJhbnNhY3Rpb25cXCdzIHN0b3JlZCBkaXJ0eS1jb21wb25lbnRzIGxlbmd0aCAo
JXMpIHRvIG1hdGNoIGRpcnR5LWNvbXBvbmVudHMgYXJyYXkgbGVuZ3RoICglcykuJywgbGVuLCBk
aXJ0eUNvbXBvbmVudHMubGVuZ3RoKSA6IF9wcm9kSW52YXJpYW50KCcxMjQnLCBsZW4sIGRpcnR5
Q29tcG9uZW50cy5sZW5ndGgpIDogdm9pZCAwO1xuXG4gIC8vIFNpbmNlIHJlY29uY2lsaW5nIGEg
Y29tcG9uZW50IGhpZ2hlciBpbiB0aGUgb3duZXIgaGllcmFyY2h5IHVzdWFsbHkgKG5vdFxuICAv
LyBhbHdheXMgLS0gc2VlIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpKSB3aWxsIHJlY29uY2lsZSBj
aGlsZHJlbiwgcmVjb25jaWxlXG4gIC8vIHRoZW0gYmVmb3JlIHRoZWlyIGNoaWxkcmVuIGJ5IHNv
cnRpbmcgdGhlIGFycmF5LlxuICBkaXJ0eUNvbXBvbmVudHMuc29ydChtb3VudE9yZGVyQ29tcGFy
YXRvcik7XG5cbiAgLy8gQW55IHVwZGF0ZXMgZW5xdWV1ZWQgd2hpbGUgcmVjb25jaWxpbmcgbXVz
dCBiZSBwZXJmb3JtZWQgYWZ0ZXIgdGhpcyBlbnRpcmVcbiAgLy8gYmF0Y2guIE90aGVyd2lzZSwg
aWYgZGlydHlDb21wb25lbnRzIGlzIFtBLCBCXSB3aGVyZSBBIGhhcyBjaGlsZHJlbiBCIGFuZFxu
ICAvLyBDLCBCIGNvdWxkIHVwZGF0ZSB0d2ljZSBpbiBhIHNpbmdsZSBiYXRjaCBpZiBDJ3MgcmVu
ZGVyIGVucXVldWVzIGFuIHVwZGF0ZVxuICAvLyB0byBCIChzaW5jZSBCIHdvdWxkIGhhdmUgYWxy
ZWFkeSB1cGRhdGVkLCB3ZSBzaG91bGQgc2tpcCBpdCwgYW5kIHRoZSBvbmx5XG4gIC8vIHdheSB3
ZSBjYW4ga25vdyB0byBkbyBzbyBpcyBieSBjaGVja2luZyB0aGUgYmF0Y2ggY291bnRlcikuXG4g
IHVwZGF0ZUJhdGNoTnVtYmVyKys7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykg
e1xuICAgIC8vIElmIGEgY29tcG9uZW50IGlzIHVubW91bnRlZCBiZWZvcmUgcGVuZGluZyBjaGFu
Z2VzIGFwcGx5LCBpdCB3aWxsIHN0aWxsXG4gICAgLy8gYmUgaGVyZSwgYnV0IHdlIGFzc3VtZSB0
aGF0IGl0IGhhcyBjbGVhcmVkIGl0cyBfcGVuZGluZ0NhbGxiYWNrcyBhbmRcbiAgICAvLyB0aGF0
IHBlcmZvcm1VcGRhdGVJZk5lY2Vzc2FyeSBpcyBhIG5vb3AuXG4gICAgdmFyIGNvbXBvbmVudCA9
IGRpcnR5Q29tcG9uZW50c1tpXTtcblxuICAgIC8vIElmIHBlcmZvcm1VcGRhdGVJZk5lY2Vzc2Fy
eSBoYXBwZW5zIHRvIGVucXVldWUgYW55IG5ldyB1cGRhdGVzLCB3ZVxuICAgIC8vIHNob3VsZG4n
dCBleGVjdXRlIHRoZSBjYWxsYmFja3MgdW50aWwgdGhlIG5leHQgcmVuZGVyIGhhcHBlbnMsIHNv
XG4gICAgLy8gc3Rhc2ggdGhlIGNhbGxiYWNrcyBmaXJzdFxuICAgIHZhciBjYWxsYmFja3MgPSBj
b21wb25lbnQuX3BlbmRpbmdDYWxsYmFja3M7XG4gICAgY29tcG9uZW50Ll9wZW5kaW5nQ2FsbGJh
Y2tzID0gbnVsbDtcblxuICAgIHZhciBtYXJrZXJOYW1lO1xuICAgIGlmIChSZWFjdEZlYXR1cmVG
bGFncy5sb2dUb3BMZXZlbFJlbmRlcnMpIHtcbiAgICAgIHZhciBuYW1lZENvbXBvbmVudCA9IGNv
bXBvbmVudDtcbiAgICAgIC8vIER1Y2sgdHlwZSBUb3BMZXZlbFdyYXBwZXIuIFRoaXMgaXMgcHJv
YmFibHkgYWx3YXlzIHRydWUuXG4gICAgICBpZiAoY29tcG9uZW50Ll9jdXJyZW50RWxlbWVudC50
eXBlLmlzUmVhY3RUb3BMZXZlbFdyYXBwZXIpIHtcbiAgICAgICAgbmFtZWRDb21wb25lbnQgPSBj
b21wb25lbnQuX3JlbmRlcmVkQ29tcG9uZW50O1xuICAgICAgfVxuICAgICAgbWFya2VyTmFtZSA9
ICdSZWFjdCB1cGRhdGU6ICcgKyBuYW1lZENvbXBvbmVudC5nZXROYW1lKCk7XG4gICAgICBjb25z
b2xlLnRpbWUobWFya2VyTmFtZSk7XG4gICAgfVxuXG4gICAgUmVhY3RSZWNvbmNpbGVyLnBlcmZv
cm1VcGRhdGVJZk5lY2Vzc2FyeShjb21wb25lbnQsIHRyYW5zYWN0aW9uLnJlY29uY2lsZVRyYW5z
YWN0aW9uLCB1cGRhdGVCYXRjaE51bWJlcik7XG5cbiAgICBpZiAobWFya2VyTmFtZSkge1xuICAg
ICAgY29uc29sZS50aW1lRW5kKG1hcmtlck5hbWUpO1xuICAgIH1cblxuICAgIGlmIChjYWxsYmFj
a3MpIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY2FsbGJhY2tzLmxlbmd0aDsgaisrKSB7
XG4gICAgICAgIHRyYW5zYWN0aW9uLmNhbGxiYWNrUXVldWUuZW5xdWV1ZShjYWxsYmFja3Nbal0s
IGNvbXBvbmVudC5nZXRQdWJsaWNJbnN0YW5jZSgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1c
blxudmFyIGZsdXNoQmF0Y2hlZFVwZGF0ZXMgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFJlYWN0VXBk
YXRlc0ZsdXNoVHJhbnNhY3Rpb24ncyB3cmFwcGVycyB3aWxsIGNsZWFyIHRoZSBkaXJ0eUNvbXBv
bmVudHNcbiAgLy8gYXJyYXkgYW5kIHBlcmZvcm0gYW55IHVwZGF0ZXMgZW5xdWV1ZWQgYnkgbW91
bnQtcmVhZHkgaGFuZGxlcnMgKGkuZS4sXG4gIC8vIGNvbXBvbmVudERpZFVwZGF0ZSkgYnV0IHdl
IG5lZWQgdG8gY2hlY2sgaGVyZSB0b28gaW4gb3JkZXIgdG8gY2F0Y2hcbiAgLy8gdXBkYXRlcyBl
bnF1ZXVlZCBieSBzZXRTdGF0ZSBjYWxsYmFja3MgYW5kIGFzYXAgY2FsbHMuXG4gIHdoaWxlIChk
aXJ0eUNvbXBvbmVudHMubGVuZ3RoIHx8IGFzYXBFbnF1ZXVlZCkge1xuICAgIGlmIChkaXJ0eUNv
bXBvbmVudHMubGVuZ3RoKSB7XG4gICAgICB2YXIgdHJhbnNhY3Rpb24gPSBSZWFjdFVwZGF0ZXNG
bHVzaFRyYW5zYWN0aW9uLmdldFBvb2xlZCgpO1xuICAgICAgdHJhbnNhY3Rpb24ucGVyZm9ybShy
dW5CYXRjaGVkVXBkYXRlcywgbnVsbCwgdHJhbnNhY3Rpb24pO1xuICAgICAgUmVhY3RVcGRhdGVz
Rmx1c2hUcmFuc2FjdGlvbi5yZWxlYXNlKHRyYW5zYWN0aW9uKTtcbiAgICB9XG5cbiAgICBpZiAo
YXNhcEVucXVldWVkKSB7XG4gICAgICBhc2FwRW5xdWV1ZWQgPSBmYWxzZTtcbiAgICAgIHZhciBx
dWV1ZSA9IGFzYXBDYWxsYmFja1F1ZXVlO1xuICAgICAgYXNhcENhbGxiYWNrUXVldWUgPSBDYWxs
YmFja1F1ZXVlLmdldFBvb2xlZCgpO1xuICAgICAgcXVldWUubm90aWZ5QWxsKCk7XG4gICAgICBD
YWxsYmFja1F1ZXVlLnJlbGVhc2UocXVldWUpO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBN
YXJrIGEgY29tcG9uZW50IGFzIG5lZWRpbmcgYSByZXJlbmRlciwgYWRkaW5nIGFuIG9wdGlvbmFs
IGNhbGxiYWNrIHRvIGFcbiAqIGxpc3Qgb2YgZnVuY3Rpb25zIHdoaWNoIHdpbGwgYmUgZXhlY3V0
ZWQgb25jZSB0aGUgcmVyZW5kZXIgb2NjdXJzLlxuICovXG5mdW5jdGlvbiBlbnF1ZXVlVXBkYXRl
KGNvbXBvbmVudCkge1xuICBlbnN1cmVJbmplY3RlZCgpO1xuXG4gIC8vIFZhcmlvdXMgcGFydHMg
b2Ygb3VyIGNvZGUgKHN1Y2ggYXMgUmVhY3RDb21wb3NpdGVDb21wb25lbnQnc1xuICAvLyBfcmVu
ZGVyVmFsaWRhdGVkQ29tcG9uZW50KSBhc3N1bWUgdGhhdCBjYWxscyB0byByZW5kZXIgYXJlbid0
IG5lc3RlZDtcbiAgLy8gdmVyaWZ5IHRoYXQgdGhhdCdzIHRoZSBjYXNlLiAoVGhpcyBpcyBjYWxs
ZWQgYnkgZWFjaCB0b3AtbGV2ZWwgdXBkYXRlXG4gIC8vIGZ1bmN0aW9uLCBsaWtlIHNldFN0YXRl
LCBmb3JjZVVwZGF0ZSwgZXRjLjsgY3JlYXRpb24gYW5kXG4gIC8vIGRlc3RydWN0aW9uIG9mIHRv
cC1sZXZlbCBjb21wb25lbnRzIGlzIGd1YXJkZWQgaW4gUmVhY3RNb3VudC4pXG5cbiAgaWYgKCFi
YXRjaGluZ1N0cmF0ZWd5LmlzQmF0Y2hpbmdVcGRhdGVzKSB7XG4gICAgYmF0Y2hpbmdTdHJhdGVn
eS5iYXRjaGVkVXBkYXRlcyhlbnF1ZXVlVXBkYXRlLCBjb21wb25lbnQpO1xuICAgIHJldHVybjtc
biAgfVxuXG4gIGRpcnR5Q29tcG9uZW50cy5wdXNoKGNvbXBvbmVudCk7XG4gIGlmIChjb21wb25l
bnQuX3VwZGF0ZUJhdGNoTnVtYmVyID09IG51bGwpIHtcbiAgICBjb21wb25lbnQuX3VwZGF0ZUJh
dGNoTnVtYmVyID0gdXBkYXRlQmF0Y2hOdW1iZXIgKyAxO1xuICB9XG59XG5cbi8qKlxuICogRW5x
dWV1ZSBhIGNhbGxiYWNrIHRvIGJlIHJ1biBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGJhdGNo
aW5nIGN5Y2xlLiBUaHJvd3NcbiAqIGlmIG5vIHVwZGF0ZXMgYXJlIGN1cnJlbnRseSBiZWluZyBw
ZXJmb3JtZWQuXG4gKi9cbmZ1bmN0aW9uIGFzYXAoY2FsbGJhY2ssIGNvbnRleHQpIHtcbiAgIWJh
dGNoaW5nU3RyYXRlZ3kuaXNCYXRjaGluZ1VwZGF0ZXMgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAh
PT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnUmVhY3RVcGRhdGVzLmFzYXA6IENh
blxcJ3QgZW5xdWV1ZSBhbiBhc2FwIGNhbGxiYWNrIGluIGEgY29udGV4dCB3aGVyZXVwZGF0ZXMg
YXJlIG5vdCBiZWluZyBiYXRjaGVkLicpIDogX3Byb2RJbnZhcmlhbnQoJzEyNScpIDogdm9pZCAw
O1xuICBhc2FwQ2FsbGJhY2tRdWV1ZS5lbnF1ZXVlKGNhbGxiYWNrLCBjb250ZXh0KTtcbiAgYXNh
cEVucXVldWVkID0gdHJ1ZTtcbn1cblxudmFyIFJlYWN0VXBkYXRlc0luamVjdGlvbiA9IHtcbiAg
aW5qZWN0UmVjb25jaWxlVHJhbnNhY3Rpb246IGZ1bmN0aW9uIChSZWNvbmNpbGVUcmFuc2FjdGlv
bikge1xuICAgICFSZWNvbmNpbGVUcmFuc2FjdGlvbiA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9
PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdSZWFjdFVwZGF0ZXM6IG11c3QgcHJv
dmlkZSBhIHJlY29uY2lsZSB0cmFuc2FjdGlvbiBjbGFzcycpIDogX3Byb2RJbnZhcmlhbnQoJzEy
NicpIDogdm9pZCAwO1xuICAgIFJlYWN0VXBkYXRlcy5SZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9u
ID0gUmVjb25jaWxlVHJhbnNhY3Rpb247XG4gIH0sXG5cbiAgaW5qZWN0QmF0Y2hpbmdTdHJhdGVn
eTogZnVuY3Rpb24gKF9iYXRjaGluZ1N0cmF0ZWd5KSB7XG4gICAgIV9iYXRjaGluZ1N0cmF0ZWd5
ID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxz
ZSwgJ1JlYWN0VXBkYXRlczogbXVzdCBwcm92aWRlIGEgYmF0Y2hpbmcgc3RyYXRlZ3knKSA6IF9w
cm9kSW52YXJpYW50KCcxMjcnKSA6IHZvaWQgMDtcbiAgICAhKHR5cGVvZiBfYmF0Y2hpbmdTdHJh
dGVneS5iYXRjaGVkVXBkYXRlcyA9PT0gJ2Z1bmN0aW9uJykgPyBwcm9jZXNzLmVudi5OT0RFX0VO
ViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnUmVhY3RVcGRhdGVzOiBtdXN0
IHByb3ZpZGUgYSBiYXRjaGVkVXBkYXRlcygpIGZ1bmN0aW9uJykgOiBfcHJvZEludmFyaWFudCgn
MTI4JykgOiB2b2lkIDA7XG4gICAgISh0eXBlb2YgX2JhdGNoaW5nU3RyYXRlZ3kuaXNCYXRjaGlu
Z1VwZGF0ZXMgPT09ICdib29sZWFuJykgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1
Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnUmVhY3RVcGRhdGVzOiBtdXN0IHByb3ZpZGUgYW4g
aXNCYXRjaGluZ1VwZGF0ZXMgYm9vbGVhbiBhdHRyaWJ1dGUnKSA6IF9wcm9kSW52YXJpYW50KCcx
MjknKSA6IHZvaWQgMDtcbiAgICBiYXRjaGluZ1N0cmF0ZWd5ID0gX2JhdGNoaW5nU3RyYXRlZ3k7
XG4gIH1cbn07XG5cbnZhciBSZWFjdFVwZGF0ZXMgPSB7XG4gIC8qKlxuICAgKiBSZWFjdCByZWZl
cmVuY2VzIGBSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uYCB1c2luZyB0aGlzIHByb3BlcnR5IGlu
IG9yZGVyXG4gICAqIHRvIGFsbG93IGRlcGVuZGVuY3kgaW5qZWN0aW9uLlxuICAgKlxuICAgKiBA
aW50ZXJuYWxcbiAgICovXG4gIFJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb246IG51bGwsXG5cbiAg
YmF0Y2hlZFVwZGF0ZXM6IGJhdGNoZWRVcGRhdGVzLFxuICBlbnF1ZXVlVXBkYXRlOiBlbnF1ZXVl
VXBkYXRlLFxuICBmbHVzaEJhdGNoZWRVcGRhdGVzOiBmbHVzaEJhdGNoZWRVcGRhdGVzLFxuICBp
bmplY3Rpb246IFJlYWN0VXBkYXRlc0luamVjdGlvbixcbiAgYXNhcDogYXNhcFxufTtcblxubW9k
dWxlLmV4cG9ydHMgPSBSZWFjdFVwZGF0ZXM7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBX
RUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdFVwZGF0
ZXMuanNcbi8vIG1vZHVsZSBpZCA9IDhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiJ3VzZSBzdHJp
Y3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL1JlYWN0Jyk7XG5cblxuXG4v
Ly8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9y
ZWFjdC9yZWFjdC5qc1xuLy8gbW9kdWxlIGlkID0gOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIv
KipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmln
aHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIg
dGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRo
ZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50
XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGlu
IHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8q
KlxuICogS2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgb3duZXIuXG4gKlxuICogVGhlIGN1cnJl
bnQgb3duZXIgaXMgdGhlIGNvbXBvbmVudCB3aG8gc2hvdWxkIG93biBhbnkgY29tcG9uZW50cyB0
aGF0IGFyZVxuICogY3VycmVudGx5IGJlaW5nIGNvbnN0cnVjdGVkLlxuICovXG52YXIgUmVhY3RD
dXJyZW50T3duZXIgPSB7XG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHR5cGUge1JlYWN0
Q29tcG9uZW50fVxuICAgKi9cbiAgY3VycmVudDogbnVsbFxufTtcblxubW9kdWxlLmV4cG9ydHMg
PSBSZWFjdEN1cnJlbnRPd25lcjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sg
Rk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RDdXJyZW50T3duZXIuanNc
bi8vIG1vZHVsZSBpZCA9IDEwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qKlxuICogQ29weXJp
Z2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
XG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxl
IGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0
b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVu
dCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGly
ZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfYXNzaWduID0gcmVxdWly
ZSgnb2JqZWN0LWFzc2lnbicpO1xuXG52YXIgUG9vbGVkQ2xhc3MgPSByZXF1aXJlKCcuL1Bvb2xl
ZENsYXNzJyk7XG5cbnZhciBlbXB0eUZ1bmN0aW9uID0gcmVxdWlyZSgnZmJqcy9saWIvZW1wdHlG
dW5jdGlvbicpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKCdmYmpzL2xpYi93YXJuaW5nJyk7XG5c
bnZhciBkaWRXYXJuRm9yQWRkZWROZXdQcm9wZXJ0eSA9IGZhbHNlO1xudmFyIGlzUHJveHlTdXBw
b3J0ZWQgPSB0eXBlb2YgUHJveHkgPT09ICdmdW5jdGlvbic7XG5cbnZhciBzaG91bGRCZVJlbGVh
c2VkUHJvcGVydGllcyA9IFsnZGlzcGF0Y2hDb25maWcnLCAnX3RhcmdldEluc3QnLCAnbmF0aXZl
RXZlbnQnLCAnaXNEZWZhdWx0UHJldmVudGVkJywgJ2lzUHJvcGFnYXRpb25TdG9wcGVkJywgJ19k
aXNwYXRjaExpc3RlbmVycycsICdfZGlzcGF0Y2hJbnN0YW5jZXMnXTtcblxuLyoqXG4gKiBAaW50
ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2
ZW50cy9cbiAqL1xudmFyIEV2ZW50SW50ZXJmYWNlID0ge1xuICB0eXBlOiBudWxsLFxuICB0YXJn
ZXQ6IG51bGwsXG4gIC8vIGN1cnJlbnRUYXJnZXQgaXMgc2V0IHdoZW4gZGlzcGF0Y2hpbmc7IG5v
IHVzZSBpbiBjb3B5aW5nIGl0IGhlcmVcbiAgY3VycmVudFRhcmdldDogZW1wdHlGdW5jdGlvbi50
aGF0UmV0dXJuc051bGwsXG4gIGV2ZW50UGhhc2U6IG51bGwsXG4gIGJ1YmJsZXM6IG51bGwsXG4g
IGNhbmNlbGFibGU6IG51bGwsXG4gIHRpbWVTdGFtcDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAg
cmV0dXJuIGV2ZW50LnRpbWVTdGFtcCB8fCBEYXRlLm5vdygpO1xuICB9LFxuICBkZWZhdWx0UHJl
dmVudGVkOiBudWxsLFxuICBpc1RydXN0ZWQ6IG51bGxcbn07XG5cbi8qKlxuICogU3ludGhldGlj
IGV2ZW50cyBhcmUgZGlzcGF0Y2hlZCBieSBldmVudCBwbHVnaW5zLCB0eXBpY2FsbHkgaW4gcmVz
cG9uc2UgdG8gYVxuICogdG9wLWxldmVsIGV2ZW50IGRlbGVnYXRpb24gaGFuZGxlci5cbiAqXG4g
KiBUaGVzZSBzeXN0ZW1zIHNob3VsZCBnZW5lcmFsbHkgdXNlIHBvb2xpbmcgdG8gcmVkdWNlIHRo
ZSBmcmVxdWVuY3kgb2YgZ2FyYmFnZVxuICogY29sbGVjdGlvbi4gVGhlIHN5c3RlbSBzaG91bGQg
Y2hlY2sgYGlzUGVyc2lzdGVudGAgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlXG4gKiBldmVudCBz
aG91bGQgYmUgcmVsZWFzZWQgaW50byB0aGUgcG9vbCBhZnRlciBiZWluZyBkaXNwYXRjaGVkLiBV
c2VycyB0aGF0XG4gKiBuZWVkIGEgcGVyc2lzdGVkIGV2ZW50IHNob3VsZCBpbnZva2UgYHBlcnNp
c3RgLlxuICpcbiAqIFN5bnRoZXRpYyBldmVudHMgKGFuZCBzdWJjbGFzc2VzKSBpbXBsZW1lbnQg
dGhlIERPTSBMZXZlbCAzIEV2ZW50cyBBUEkgYnlcbiAqIG5vcm1hbGl6aW5nIGJyb3dzZXIgcXVp
cmtzLiBTdWJjbGFzc2VzIGRvIG5vdCBuZWNlc3NhcmlseSBoYXZlIHRvIGltcGxlbWVudCBhXG4g
KiBET00gaW50ZXJmYWNlOyBjdXN0b20gYXBwbGljYXRpb24tc3BlY2lmaWMgZXZlbnRzIGNhbiBh
bHNvIHN1YmNsYXNzIHRoaXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGRpc3BhdGNoQ29uZmln
IENvbmZpZ3VyYXRpb24gdXNlZCB0byBkaXNwYXRjaCB0aGlzIGV2ZW50LlxuICogQHBhcmFtIHsq
fSB0YXJnZXRJbnN0IE1hcmtlciBpZGVudGlmeWluZyB0aGUgZXZlbnQgdGFyZ2V0LlxuICogQHBh
cmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHBhcmFt
IHtET01FdmVudFRhcmdldH0gbmF0aXZlRXZlbnRUYXJnZXQgVGFyZ2V0IG5vZGUuXG4gKi9cbmZ1
bmN0aW9uIFN5bnRoZXRpY0V2ZW50KGRpc3BhdGNoQ29uZmlnLCB0YXJnZXRJbnN0LCBuYXRpdmVF
dmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9
PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyB0aGVzZSBoYXZlIGEgZ2V0dGVyL3NldHRlciBmb3Ig
d2FybmluZ3NcbiAgICBkZWxldGUgdGhpcy5uYXRpdmVFdmVudDtcbiAgICBkZWxldGUgdGhpcy5w
cmV2ZW50RGVmYXVsdDtcbiAgICBkZWxldGUgdGhpcy5zdG9wUHJvcGFnYXRpb247XG4gIH1cblxu
ICB0aGlzLmRpc3BhdGNoQ29uZmlnID0gZGlzcGF0Y2hDb25maWc7XG4gIHRoaXMuX3RhcmdldElu
c3QgPSB0YXJnZXRJbnN0O1xuICB0aGlzLm5hdGl2ZUV2ZW50ID0gbmF0aXZlRXZlbnQ7XG5cbiAg
dmFyIEludGVyZmFjZSA9IHRoaXMuY29uc3RydWN0b3IuSW50ZXJmYWNlO1xuICBmb3IgKHZhciBw
cm9wTmFtZSBpbiBJbnRlcmZhY2UpIHtcbiAgICBpZiAoIUludGVyZmFjZS5oYXNPd25Qcm9wZXJ0
eShwcm9wTmFtZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5l
bnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgZGVsZXRlIHRoaXNbcHJvcE5h
bWVdOyAvLyB0aGlzIGhhcyBhIGdldHRlci9zZXR0ZXIgZm9yIHdhcm5pbmdzXG4gICAgfVxuICAg
IHZhciBub3JtYWxpemUgPSBJbnRlcmZhY2VbcHJvcE5hbWVdO1xuICAgIGlmIChub3JtYWxpemUp
IHtcbiAgICAgIHRoaXNbcHJvcE5hbWVdID0gbm9ybWFsaXplKG5hdGl2ZUV2ZW50KTtcbiAgICB9
IGVsc2Uge1xuICAgICAgaWYgKHByb3BOYW1lID09PSAndGFyZ2V0Jykge1xuICAgICAgICB0aGlz
LnRhcmdldCA9IG5hdGl2ZUV2ZW50VGFyZ2V0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhp
c1twcm9wTmFtZV0gPSBuYXRpdmVFdmVudFtwcm9wTmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9
XG5cbiAgdmFyIGRlZmF1bHRQcmV2ZW50ZWQgPSBuYXRpdmVFdmVudC5kZWZhdWx0UHJldmVudGVk
ICE9IG51bGwgPyBuYXRpdmVFdmVudC5kZWZhdWx0UHJldmVudGVkIDogbmF0aXZlRXZlbnQucmV0
dXJuVmFsdWUgPT09IGZhbHNlO1xuICBpZiAoZGVmYXVsdFByZXZlbnRlZCkge1xuICAgIHRoaXMu
aXNEZWZhdWx0UHJldmVudGVkID0gZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc1RydWU7XG4gIH0g
ZWxzZSB7XG4gICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBlbXB0eUZ1bmN0aW9uLnRoYXRS
ZXR1cm5zRmFsc2U7XG4gIH1cbiAgdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGVtcHR5RnVu
Y3Rpb24udGhhdFJldHVybnNGYWxzZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbl9hc3NpZ24oU3lu
dGhldGljRXZlbnQucHJvdG90eXBlLCB7XG4gIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbiAoKSB7
XG4gICAgdGhpcy5kZWZhdWx0UHJldmVudGVkID0gdHJ1ZTtcbiAgICB2YXIgZXZlbnQgPSB0aGlz
Lm5hdGl2ZUV2ZW50O1xuICAgIGlmICghZXZlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5c
biAgICBpZiAoZXZlbnQucHJldmVudERlZmF1bHQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZh
dWx0KCk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdmFsaWQtdHlwZW9mXG4g
ICAgfSBlbHNlIGlmICh0eXBlb2YgZXZlbnQucmV0dXJuVmFsdWUgIT09ICd1bmtub3duJykge1xu
ICAgICAgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5pc0RlZmF1
bHRQcmV2ZW50ZWQgPSBlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zVHJ1ZTtcbiAgfSxcblxuICBz
dG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXZlbnQgPSB0aGlzLm5hdGl2
ZUV2ZW50O1xuICAgIGlmICghZXZlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBp
ZiAoZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24o
KTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2YWxpZC10eXBlb2ZcbiAgICB9
IGVsc2UgaWYgKHR5cGVvZiBldmVudC5jYW5jZWxCdWJibGUgIT09ICd1bmtub3duJykge1xuICAg
ICAgLy8gVGhlIENoYW5nZUV2ZW50UGx1Z2luIHJlZ2lzdGVycyBhIFwicHJvcGVydHljaGFuZ2Vc
IiBldmVudCBmb3JcbiAgICAgIC8vIElFLiBUaGlzIGV2ZW50IGRvZXMgbm90IHN1cHBvcnQgYnVi
Ymxpbmcgb3IgY2FuY2VsbGluZywgYW5kXG4gICAgICAvLyBhbnkgcmVmZXJlbmNlcyB0byBjYW5j
ZWxCdWJibGUgdGhyb3cgXCJNZW1iZXIgbm90IGZvdW5kXCIuICBBXG4gICAgICAvLyB0eXBlb2Yg
Y2hlY2sgb2YgXCJ1bmtub3duXCIgY2lyY3VtdmVudHMgdGhpcyBpc3N1ZSAoYW5kIGlzIGFsc29c
biAgICAgIC8vIElFIHNwZWNpZmljKS5cbiAgICAgIGV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7
XG4gICAgfVxuXG4gICAgdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGVtcHR5RnVuY3Rpb24u
dGhhdFJldHVybnNUcnVlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBXZSByZWxlYXNlIGFsbCBkaXNw
YXRjaGVkIGBTeW50aGV0aWNFdmVudGBzIGFmdGVyIGVhY2ggZXZlbnQgbG9vcCwgYWRkaW5nXG4g
ICAqIHRoZW0gYmFjayBpbnRvIHRoZSBwb29sLiBUaGlzIGFsbG93cyBhIHdheSB0byBob2xkIG9u
dG8gYSByZWZlcmVuY2UgdGhhdFxuICAgKiB3b24ndCBiZSBhZGRlZCBiYWNrIGludG8gdGhlIHBv
b2wuXG4gICAqL1xuICBwZXJzaXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5pc1BlcnNpc3Rl
bnQgPSBlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zVHJ1ZTtcbiAgfSxcblxuICAvKipcbiAgICog
Q2hlY2tzIGlmIHRoaXMgZXZlbnQgc2hvdWxkIGJlIHJlbGVhc2VkIGJhY2sgaW50byB0aGUgcG9v
bC5cbiAgICpcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGlzIHNob3VsZCBub3Qg
YmUgcmVsZWFzZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIGlzUGVyc2lzdGVudDogZW1w
dHlGdW5jdGlvbi50aGF0UmV0dXJuc0ZhbHNlLFxuXG4gIC8qKlxuICAgKiBgUG9vbGVkQ2xhc3Ng
IGxvb2tzIGZvciBgZGVzdHJ1Y3RvcmAgb24gZWFjaCBpbnN0YW5jZSBpdCByZWxlYXNlcy5cbiAg
ICovXG4gIGRlc3RydWN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgSW50ZXJmYWNlID0gdGhp
cy5jb25zdHJ1Y3Rvci5JbnRlcmZhY2U7XG4gICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gSW50ZXJm
YWNlKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykg
e1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcE5hbWUsIGdldFBvb2xl
ZFdhcm5pbmdQcm9wZXJ0eURlZmluaXRpb24ocHJvcE5hbWUsIEludGVyZmFjZVtwcm9wTmFtZV0p
KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXNbcHJvcE5hbWVdID0gbnVsbDtcbiAgICAg
IH1cbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaG91bGRCZVJlbGVhc2VkUHJvcGVy
dGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpc1tzaG91bGRCZVJlbGVhc2VkUHJvcGVydGll
c1tpXV0gPSBudWxsO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdw
cm9kdWN0aW9uJykge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICduYXRpdmVF
dmVudCcsIGdldFBvb2xlZFdhcm5pbmdQcm9wZXJ0eURlZmluaXRpb24oJ25hdGl2ZUV2ZW50Jywg
bnVsbCkpO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdwcmV2ZW50RGVmYXVs
dCcsIGdldFBvb2xlZFdhcm5pbmdQcm9wZXJ0eURlZmluaXRpb24oJ3ByZXZlbnREZWZhdWx0Jywg
ZW1wdHlGdW5jdGlvbikpO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdzdG9w
UHJvcGFnYXRpb24nLCBnZXRQb29sZWRXYXJuaW5nUHJvcGVydHlEZWZpbml0aW9uKCdzdG9wUHJv
cGFnYXRpb24nLCBlbXB0eUZ1bmN0aW9uKSk7XG4gICAgfVxuICB9XG59KTtcblxuU3ludGhldGlj
RXZlbnQuSW50ZXJmYWNlID0gRXZlbnRJbnRlcmZhY2U7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RF
X0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGlmIChpc1Byb3h5U3VwcG9ydGVkKSB7XG4gICAg
Lyplc2xpbnQtZGlzYWJsZSBuby1mdW5jLWFzc2lnbiAqL1xuICAgIFN5bnRoZXRpY0V2ZW50ID0g
bmV3IFByb3h5KFN5bnRoZXRpY0V2ZW50LCB7XG4gICAgICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uICh0
YXJnZXQsIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHkodGFyZ2V0LCBPYmplY3Qu
Y3JlYXRlKHRhcmdldC5wcm90b3R5cGUpLCBhcmdzKTtcbiAgICAgIH0sXG4gICAgICBhcHBseTog
ZnVuY3Rpb24gKGNvbnN0cnVjdG9yLCB0aGF0LCBhcmdzKSB7XG4gICAgICAgIHJldHVybiBuZXcg
UHJveHkoY29uc3RydWN0b3IuYXBwbHkodGhhdCwgYXJncyksIHtcbiAgICAgICAgICBzZXQ6IGZ1
bmN0aW9uICh0YXJnZXQsIHByb3AsIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAocHJvcCAhPT0g
J2lzUGVyc2lzdGVudCcgJiYgIXRhcmdldC5jb25zdHJ1Y3Rvci5JbnRlcmZhY2UuaGFzT3duUHJv
cGVydHkocHJvcCkgJiYgc2hvdWxkQmVSZWxlYXNlZFByb3BlcnRpZXMuaW5kZXhPZihwcm9wKSA9
PT0gLTEpIHtcbiAgICAgICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0
aW9uJyA/IHdhcm5pbmcoZGlkV2FybkZvckFkZGVkTmV3UHJvcGVydHkgfHwgdGFyZ2V0LmlzUGVy
c2lzdGVudCgpLCBcIlRoaXMgc3ludGhldGljIGV2ZW50IGlzIHJldXNlZCBmb3IgcGVyZm9ybWFu
Y2UgcmVhc29ucy4gSWYgeW91J3JlIFwiICsgXCJzZWVpbmcgdGhpcywgeW91J3JlIGFkZGluZyBh
IG5ldyBwcm9wZXJ0eSBpbiB0aGUgc3ludGhldGljIGV2ZW50IG9iamVjdC4gXCIgKyAnVGhlIHBy
b3BlcnR5IGlzIG5ldmVyIHJlbGVhc2VkLiBTZWUgJyArICdodHRwczovL2ZiLm1lL3JlYWN0LWV2
ZW50LXBvb2xpbmcgZm9yIG1vcmUgaW5mb3JtYXRpb24uJykgOiB2b2lkIDA7XG4gICAgICAgICAg
ICAgIGRpZFdhcm5Gb3JBZGRlZE5ld1Byb3BlcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAg
ICAgICAgICAgIHRhcmdldFtwcm9wXSA9IHZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7
XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvKmVzbGlu
dC1lbmFibGUgbm8tZnVuYy1hc3NpZ24gKi9cbiAgfVxufVxuLyoqXG4gKiBIZWxwZXIgdG8gcmVk
dWNlIGJvaWxlcnBsYXRlIHdoZW4gY3JlYXRpbmcgc3ViY2xhc3Nlcy5cbiAqXG4gKiBAcGFyYW0g
e2Z1bmN0aW9ufSBDbGFzc1xuICogQHBhcmFtIHs/b2JqZWN0fSBJbnRlcmZhY2VcbiAqL1xuU3lu
dGhldGljRXZlbnQuYXVnbWVudENsYXNzID0gZnVuY3Rpb24gKENsYXNzLCBJbnRlcmZhY2UpIHtc
biAgdmFyIFN1cGVyID0gdGhpcztcblxuICB2YXIgRSA9IGZ1bmN0aW9uICgpIHt9O1xuICBFLnBy
b3RvdHlwZSA9IFN1cGVyLnByb3RvdHlwZTtcbiAgdmFyIHByb3RvdHlwZSA9IG5ldyBFKCk7XG5c
biAgX2Fzc2lnbihwcm90b3R5cGUsIENsYXNzLnByb3RvdHlwZSk7XG4gIENsYXNzLnByb3RvdHlw
ZSA9IHByb3RvdHlwZTtcbiAgQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2xhc3M7XG5c
biAgQ2xhc3MuSW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgU3VwZXIuSW50ZXJmYWNlLCBJbnRlcmZh
Y2UpO1xuICBDbGFzcy5hdWdtZW50Q2xhc3MgPSBTdXBlci5hdWdtZW50Q2xhc3M7XG5cbiAgUG9v
bGVkQ2xhc3MuYWRkUG9vbGluZ1RvKENsYXNzLCBQb29sZWRDbGFzcy5mb3VyQXJndW1lbnRQb29s
ZXIpO1xufTtcblxuUG9vbGVkQ2xhc3MuYWRkUG9vbGluZ1RvKFN5bnRoZXRpY0V2ZW50LCBQb29s
ZWRDbGFzcy5mb3VyQXJndW1lbnRQb29sZXIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bnRoZXRp
Y0V2ZW50O1xuXG4vKipcbiAgKiBIZWxwZXIgdG8gbnVsbGlmeSBzeW50aGV0aWNFdmVudCBpbnN0
YW5jZSBwcm9wZXJ0aWVzIHdoZW4gZGVzdHJ1Y3RpbmdcbiAgKlxuICAqIEBwYXJhbSB7b2JqZWN0
fSBTeW50aGV0aWNFdmVudFxuICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wTmFtZVxuICAqIEByZXR1
cm4ge29iamVjdH0gZGVmaW5lUHJvcGVydHkgb2JqZWN0XG4gICovXG5mdW5jdGlvbiBnZXRQb29s
ZWRXYXJuaW5nUHJvcGVydHlEZWZpbml0aW9uKHByb3BOYW1lLCBnZXRWYWwpIHtcbiAgdmFyIGlz
RnVuY3Rpb24gPSB0eXBlb2YgZ2V0VmFsID09PSAnZnVuY3Rpb24nO1xuICByZXR1cm4ge1xuICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBzZXQ6IHNldCxcbiAgICBnZXQ6IGdldFxuICB9O1xu
XG4gIGZ1bmN0aW9uIHNldCh2YWwpIHtcbiAgICB2YXIgYWN0aW9uID0gaXNGdW5jdGlvbiA/ICdz
ZXR0aW5nIHRoZSBtZXRob2QnIDogJ3NldHRpbmcgdGhlIHByb3BlcnR5JztcbiAgICB3YXJuKGFj
dGlvbiwgJ1RoaXMgaXMgZWZmZWN0aXZlbHkgYSBuby1vcCcpO1xuICAgIHJldHVybiB2YWw7XG4g
IH1cblxuICBmdW5jdGlvbiBnZXQoKSB7XG4gICAgdmFyIGFjdGlvbiA9IGlzRnVuY3Rpb24gPyAn
YWNjZXNzaW5nIHRoZSBtZXRob2QnIDogJ2FjY2Vzc2luZyB0aGUgcHJvcGVydHknO1xuICAgIHZh
ciByZXN1bHQgPSBpc0Z1bmN0aW9uID8gJ1RoaXMgaXMgYSBuby1vcCBmdW5jdGlvbicgOiAnVGhp
cyBpcyBzZXQgdG8gbnVsbCc7XG4gICAgd2FybihhY3Rpb24sIHJlc3VsdCk7XG4gICAgcmV0dXJu
IGdldFZhbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdhcm4oYWN0aW9uLCByZXN1bHQpIHtcbiAgICB2
YXIgd2FybmluZ0NvbmRpdGlvbiA9IGZhbHNlO1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9
PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKHdhcm5pbmdDb25kaXRpb24sIFwiVGhpcyBzeW50aGV0
aWMgZXZlbnQgaXMgcmV1c2VkIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiBJZiB5b3UncmUgc2Vl
aW5nIHRoaXMsIFwiICsgXCJ5b3UncmUgJXMgYCVzYCBvbiBhIHJlbGVhc2VkL251bGxpZmllZCBz
eW50aGV0aWMgZXZlbnQuICVzLiBcIiArICdJZiB5b3UgbXVzdCBrZWVwIHRoZSBvcmlnaW5hbCBz
eW50aGV0aWMgZXZlbnQgYXJvdW5kLCB1c2UgZXZlbnQucGVyc2lzdCgpLiAnICsgJ1NlZSBodHRw
czovL2ZiLm1lL3JlYWN0LWV2ZW50LXBvb2xpbmcgZm9yIG1vcmUgaW5mb3JtYXRpb24uJywgYWN0
aW9uLCBwcm9wTmFtZSwgcmVzdWx0KSA6IHZvaWQgMDtcbiAgfVxufVxuXG5cbi8vLy8vLy8vLy8v
Ly8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9s
aWIvU3ludGhldGljRXZlbnQuanNcbi8vIG1vZHVsZSBpZCA9IDExXG4vLyBtb2R1bGUgY2h1bmtz
ID0gMCIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNl
ZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZp
bGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9u
YWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRT
IGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIFxuICovXG5cbid1c2Ugc3RyaWN0
JztcblxudmFyIF9wcm9kSW52YXJpYW50ID0gcmVxdWlyZSgnLi9yZWFjdFByb2RJbnZhcmlhbnQn
KTtcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoJ2ZianMvbGliL2ludmFyaWFudCcpO1xuXG4v
KipcbiAqIFN0YXRpYyBwb29sZXJzLiBTZXZlcmFsIGN1c3RvbSB2ZXJzaW9ucyBmb3IgZWFjaCBw
b3RlbnRpYWwgbnVtYmVyIG9mXG4gKiBhcmd1bWVudHMuIEEgY29tcGxldGVseSBnZW5lcmljIHBv
b2xlciBpcyBlYXN5IHRvIGltcGxlbWVudCwgYnV0IHdvdWxkXG4gKiByZXF1aXJlIGFjY2Vzc2lu
ZyB0aGUgYGFyZ3VtZW50c2Agb2JqZWN0LiBJbiBlYWNoIG9mIHRoZXNlLCBgdGhpc2AgcmVmZXJz
IHRvXG4gKiB0aGUgQ2xhc3MgaXRzZWxmLCBub3QgYW4gaW5zdGFuY2UuIElmIGFueSBvdGhlcnMg
YXJlIG5lZWRlZCwgc2ltcGx5IGFkZCB0aGVtXG4gKiBoZXJlLCBvciBpbiB0aGVpciBvd24gZmls
ZXMuXG4gKi9cbnZhciBvbmVBcmd1bWVudFBvb2xlciA9IGZ1bmN0aW9uIChjb3B5RmllbGRzRnJv
bSkge1xuICB2YXIgS2xhc3MgPSB0aGlzO1xuICBpZiAoS2xhc3MuaW5zdGFuY2VQb29sLmxlbmd0
aCkge1xuICAgIHZhciBpbnN0YW5jZSA9IEtsYXNzLmluc3RhbmNlUG9vbC5wb3AoKTtcbiAgICBL
bGFzcy5jYWxsKGluc3RhbmNlLCBjb3B5RmllbGRzRnJvbSk7XG4gICAgcmV0dXJuIGluc3RhbmNl
O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgS2xhc3MoY29weUZpZWxkc0Zyb20pO1xuICB9
XG59O1xuXG52YXIgdHdvQXJndW1lbnRQb29sZXIgPSBmdW5jdGlvbiAoYTEsIGEyKSB7XG4gIHZh
ciBLbGFzcyA9IHRoaXM7XG4gIGlmIChLbGFzcy5pbnN0YW5jZVBvb2wubGVuZ3RoKSB7XG4gICAg
dmFyIGluc3RhbmNlID0gS2xhc3MuaW5zdGFuY2VQb29sLnBvcCgpO1xuICAgIEtsYXNzLmNhbGwo
aW5zdGFuY2UsIGExLCBhMik7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9IGVsc2Uge1xuICAg
IHJldHVybiBuZXcgS2xhc3MoYTEsIGEyKTtcbiAgfVxufTtcblxudmFyIHRocmVlQXJndW1lbnRQ
b29sZXIgPSBmdW5jdGlvbiAoYTEsIGEyLCBhMykge1xuICB2YXIgS2xhc3MgPSB0aGlzO1xuICBp
ZiAoS2xhc3MuaW5zdGFuY2VQb29sLmxlbmd0aCkge1xuICAgIHZhciBpbnN0YW5jZSA9IEtsYXNz
Lmluc3RhbmNlUG9vbC5wb3AoKTtcbiAgICBLbGFzcy5jYWxsKGluc3RhbmNlLCBhMSwgYTIsIGEz
KTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBLbGFz
cyhhMSwgYTIsIGEzKTtcbiAgfVxufTtcblxudmFyIGZvdXJBcmd1bWVudFBvb2xlciA9IGZ1bmN0
aW9uIChhMSwgYTIsIGEzLCBhNCkge1xuICB2YXIgS2xhc3MgPSB0aGlzO1xuICBpZiAoS2xhc3Mu
aW5zdGFuY2VQb29sLmxlbmd0aCkge1xuICAgIHZhciBpbnN0YW5jZSA9IEtsYXNzLmluc3RhbmNl
UG9vbC5wb3AoKTtcbiAgICBLbGFzcy5jYWxsKGluc3RhbmNlLCBhMSwgYTIsIGEzLCBhNCk7XG4g
ICAgcmV0dXJuIGluc3RhbmNlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgS2xhc3MoYTEs
IGEyLCBhMywgYTQpO1xuICB9XG59O1xuXG52YXIgc3RhbmRhcmRSZWxlYXNlciA9IGZ1bmN0aW9u
IChpbnN0YW5jZSkge1xuICB2YXIgS2xhc3MgPSB0aGlzO1xuICAhKGluc3RhbmNlIGluc3RhbmNl
b2YgS2xhc3MpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFy
aWFudChmYWxzZSwgJ1RyeWluZyB0byByZWxlYXNlIGFuIGluc3RhbmNlIGludG8gYSBwb29sIG9m
IGEgZGlmZmVyZW50IHR5cGUuJykgOiBfcHJvZEludmFyaWFudCgnMjUnKSA6IHZvaWQgMDtcbiAg
aW5zdGFuY2UuZGVzdHJ1Y3RvcigpO1xuICBpZiAoS2xhc3MuaW5zdGFuY2VQb29sLmxlbmd0aCA8
IEtsYXNzLnBvb2xTaXplKSB7XG4gICAgS2xhc3MuaW5zdGFuY2VQb29sLnB1c2goaW5zdGFuY2Up
O1xuICB9XG59O1xuXG52YXIgREVGQVVMVF9QT09MX1NJWkUgPSAxMDtcbnZhciBERUZBVUxUX1BP
T0xFUiA9IG9uZUFyZ3VtZW50UG9vbGVyO1xuXG4vKipcbiAqIEF1Z21lbnRzIGBDb3B5Q29uc3Ry
dWN0b3JgIHRvIGJlIGEgcG9vbGFibGUgY2xhc3MsIGF1Z21lbnRpbmcgb25seSB0aGUgY2xhc3Nc
biAqIGl0c2VsZiAoc3RhdGljYWxseSkgbm90IGFkZGluZyBhbnkgcHJvdG90eXBpY2FsIGZpZWxk
cy4gQW55IENvcHlDb25zdHJ1Y3RvclxuICogeW91IGdpdmUgdGhpcyBtYXkgaGF2ZSBhIGBwb29s
U2l6ZWAgcHJvcGVydHksIGFuZCB3aWxsIGxvb2sgZm9yIGFcbiAqIHByb3RvdHlwaWNhbCBgZGVz
dHJ1Y3RvcmAgb24gaW5zdGFuY2VzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IENvcHlDb25z
dHJ1Y3RvciBDb25zdHJ1Y3RvciB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlc2V0LlxuICogQHBhcmFt
IHtGdW5jdGlvbn0gcG9vbGVyIEN1c3RvbWl6YWJsZSBwb29sZXIuXG4gKi9cbnZhciBhZGRQb29s
aW5nVG8gPSBmdW5jdGlvbiAoQ29weUNvbnN0cnVjdG9yLCBwb29sZXIpIHtcbiAgLy8gQ2FzdGlu
ZyBhcyBhbnkgc28gdGhhdCBmbG93IGlnbm9yZXMgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBh
bmQgdHJ1c3RzXG4gIC8vIGl0IHRvIG1hdGNoIHRoZSB0eXBlIHdlIGRlY2xhcmVkXG4gIHZhciBO
ZXdLbGFzcyA9IENvcHlDb25zdHJ1Y3RvcjtcbiAgTmV3S2xhc3MuaW5zdGFuY2VQb29sID0gW107
XG4gIE5ld0tsYXNzLmdldFBvb2xlZCA9IHBvb2xlciB8fCBERUZBVUxUX1BPT0xFUjtcbiAgaWYg
KCFOZXdLbGFzcy5wb29sU2l6ZSkge1xuICAgIE5ld0tsYXNzLnBvb2xTaXplID0gREVGQVVMVF9Q
T09MX1NJWkU7XG4gIH1cbiAgTmV3S2xhc3MucmVsZWFzZSA9IHN0YW5kYXJkUmVsZWFzZXI7XG4g
IHJldHVybiBOZXdLbGFzcztcbn07XG5cbnZhciBQb29sZWRDbGFzcyA9IHtcbiAgYWRkUG9vbGlu
Z1RvOiBhZGRQb29saW5nVG8sXG4gIG9uZUFyZ3VtZW50UG9vbGVyOiBvbmVBcmd1bWVudFBvb2xl
cixcbiAgdHdvQXJndW1lbnRQb29sZXI6IHR3b0FyZ3VtZW50UG9vbGVyLFxuICB0aHJlZUFyZ3Vt
ZW50UG9vbGVyOiB0aHJlZUFyZ3VtZW50UG9vbGVyLFxuICBmb3VyQXJndW1lbnRQb29sZXI6IGZv
dXJBcmd1bWVudFBvb2xlclxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBQb29sZWRDbGFzcztcblxu
XG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxl
cy9yZWFjdC1kb20vbGliL1Bvb2xlZENsYXNzLmpzXG4vLyBtb2R1bGUgaWQgPSAxMlxuLy8gbW9k
dWxlIGNodW5rcyA9IDAiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29r
LCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUg
aXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICog
TElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBB
biBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0
aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBz
dHJpY3QnO1xuXG52YXIgX2Fzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxudmFy
IFJlYWN0QmFzZUNsYXNzZXMgPSByZXF1aXJlKCcuL1JlYWN0QmFzZUNsYXNzZXMnKTtcbnZhciBS
ZWFjdENoaWxkcmVuID0gcmVxdWlyZSgnLi9SZWFjdENoaWxkcmVuJyk7XG52YXIgUmVhY3RET01G
YWN0b3JpZXMgPSByZXF1aXJlKCcuL1JlYWN0RE9NRmFjdG9yaWVzJyk7XG52YXIgUmVhY3RFbGVt
ZW50ID0gcmVxdWlyZSgnLi9SZWFjdEVsZW1lbnQnKTtcbnZhciBSZWFjdFByb3BUeXBlcyA9IHJl
cXVpcmUoJy4vUmVhY3RQcm9wVHlwZXMnKTtcbnZhciBSZWFjdFZlcnNpb24gPSByZXF1aXJlKCcu
L1JlYWN0VmVyc2lvbicpO1xuXG52YXIgY3JlYXRlUmVhY3RDbGFzcyA9IHJlcXVpcmUoJy4vY3Jl
YXRlQ2xhc3MnKTtcbnZhciBvbmx5Q2hpbGQgPSByZXF1aXJlKCcuL29ubHlDaGlsZCcpO1xuXG52
YXIgY3JlYXRlRWxlbWVudCA9IFJlYWN0RWxlbWVudC5jcmVhdGVFbGVtZW50O1xudmFyIGNyZWF0
ZUZhY3RvcnkgPSBSZWFjdEVsZW1lbnQuY3JlYXRlRmFjdG9yeTtcbnZhciBjbG9uZUVsZW1lbnQg
PSBSZWFjdEVsZW1lbnQuY2xvbmVFbGVtZW50O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYg
IT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgbG93UHJpb3JpdHlXYXJuaW5nID0gcmVxdWlyZSgn
Li9sb3dQcmlvcml0eVdhcm5pbmcnKTtcbiAgdmFyIGNhbkRlZmluZVByb3BlcnR5ID0gcmVxdWly
ZSgnLi9jYW5EZWZpbmVQcm9wZXJ0eScpO1xuICB2YXIgUmVhY3RFbGVtZW50VmFsaWRhdG9yID0g
cmVxdWlyZSgnLi9SZWFjdEVsZW1lbnRWYWxpZGF0b3InKTtcbiAgdmFyIGRpZFdhcm5Qcm9wVHlw
ZXNEZXByZWNhdGVkID0gZmFsc2U7XG4gIGNyZWF0ZUVsZW1lbnQgPSBSZWFjdEVsZW1lbnRWYWxp
ZGF0b3IuY3JlYXRlRWxlbWVudDtcbiAgY3JlYXRlRmFjdG9yeSA9IFJlYWN0RWxlbWVudFZhbGlk
YXRvci5jcmVhdGVGYWN0b3J5O1xuICBjbG9uZUVsZW1lbnQgPSBSZWFjdEVsZW1lbnRWYWxpZGF0
b3IuY2xvbmVFbGVtZW50O1xufVxuXG52YXIgX19zcHJlYWQgPSBfYXNzaWduO1xudmFyIGNyZWF0
ZU1peGluID0gZnVuY3Rpb24gKG1peGluKSB7XG4gIHJldHVybiBtaXhpbjtcbn07XG5cbmlmIChw
cm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciB3YXJuZWRGb3JT
cHJlYWQgPSBmYWxzZTtcbiAgdmFyIHdhcm5lZEZvckNyZWF0ZU1peGluID0gZmFsc2U7XG4gIF9f
c3ByZWFkID0gZnVuY3Rpb24gKCkge1xuICAgIGxvd1ByaW9yaXR5V2FybmluZyh3YXJuZWRGb3JT
cHJlYWQsICdSZWFjdC5fX3NwcmVhZCBpcyBkZXByZWNhdGVkIGFuZCBzaG91bGQgbm90IGJlIHVz
ZWQuIFVzZSAnICsgJ09iamVjdC5hc3NpZ24gZGlyZWN0bHkgb3IgYW5vdGhlciBoZWxwZXIgZnVu
Y3Rpb24gd2l0aCBzaW1pbGFyICcgKyAnc2VtYW50aWNzLiBZb3UgbWF5IGJlIHNlZWluZyB0aGlz
IHdhcm5pbmcgZHVlIHRvIHlvdXIgY29tcGlsZXIuICcgKyAnU2VlIGh0dHBzOi8vZmIubWUvcmVh
Y3Qtc3ByZWFkLWRlcHJlY2F0aW9uIGZvciBtb3JlIGRldGFpbHMuJyk7XG4gICAgd2FybmVkRm9y
U3ByZWFkID0gdHJ1ZTtcbiAgICByZXR1cm4gX2Fzc2lnbi5hcHBseShudWxsLCBhcmd1bWVudHMp
O1xuICB9O1xuXG4gIGNyZWF0ZU1peGluID0gZnVuY3Rpb24gKG1peGluKSB7XG4gICAgbG93UHJp
b3JpdHlXYXJuaW5nKHdhcm5lZEZvckNyZWF0ZU1peGluLCAnUmVhY3QuY3JlYXRlTWl4aW4gaXMg
ZGVwcmVjYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkLiAnICsgJ0luIFJlYWN0IHYxNi4wLCBp
dCB3aWxsIGJlIHJlbW92ZWQuICcgKyAnWW91IGNhbiB1c2UgdGhpcyBtaXhpbiBkaXJlY3RseSBp
bnN0ZWFkLiAnICsgJ1NlZSBodHRwczovL2ZiLm1lL2NyZWF0ZW1peGluLXdhcy1uZXZlci1pbXBs
ZW1lbnRlZCBmb3IgbW9yZSBpbmZvLicpO1xuICAgIHdhcm5lZEZvckNyZWF0ZU1peGluID0gdHJ1
ZTtcbiAgICByZXR1cm4gbWl4aW47XG4gIH07XG59XG5cbnZhciBSZWFjdCA9IHtcbiAgLy8gTW9k
ZXJuXG5cbiAgQ2hpbGRyZW46IHtcbiAgICBtYXA6IFJlYWN0Q2hpbGRyZW4ubWFwLFxuICAgIGZv
ckVhY2g6IFJlYWN0Q2hpbGRyZW4uZm9yRWFjaCxcbiAgICBjb3VudDogUmVhY3RDaGlsZHJlbi5j
b3VudCxcbiAgICB0b0FycmF5OiBSZWFjdENoaWxkcmVuLnRvQXJyYXksXG4gICAgb25seTogb25s
eUNoaWxkXG4gIH0sXG5cbiAgQ29tcG9uZW50OiBSZWFjdEJhc2VDbGFzc2VzLkNvbXBvbmVudCxc
biAgUHVyZUNvbXBvbmVudDogUmVhY3RCYXNlQ2xhc3Nlcy5QdXJlQ29tcG9uZW50LFxuXG4gIGNy
ZWF0ZUVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnQsXG4gIGNsb25lRWxlbWVudDogY2xvbmVFbGVtZW50
LFxuICBpc1ZhbGlkRWxlbWVudDogUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50LFxuXG4gIC8v
IENsYXNzaWNcblxuICBQcm9wVHlwZXM6IFJlYWN0UHJvcFR5cGVzLFxuICBjcmVhdGVDbGFzczog
Y3JlYXRlUmVhY3RDbGFzcyxcbiAgY3JlYXRlRmFjdG9yeTogY3JlYXRlRmFjdG9yeSxcbiAgY3Jl
YXRlTWl4aW46IGNyZWF0ZU1peGluLFxuXG4gIC8vIFRoaXMgbG9va3MgRE9NIHNwZWNpZmljIGJ1
dCB0aGVzZSBhcmUgYWN0dWFsbHkgaXNvbW9ycGhpYyBoZWxwZXJzXG4gIC8vIHNpbmNlIHRoZXkg
YXJlIGp1c3QgZ2VuZXJhdGluZyBET00gc3RyaW5ncy5cbiAgRE9NOiBSZWFjdERPTUZhY3Rvcmll
cyxcblxuICB2ZXJzaW9uOiBSZWFjdFZlcnNpb24sXG5cbiAgLy8gRGVwcmVjYXRlZCBob29rIGZv
ciBKU1ggc3ByZWFkLCBkb24ndCB1c2UgdGhpcyBmb3IgYW55dGhpbmcuXG4gIF9fc3ByZWFkOiBf
X3NwcmVhZFxufTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicp
IHtcbiAgdmFyIHdhcm5lZEZvckNyZWF0ZUNsYXNzID0gZmFsc2U7XG4gIGlmIChjYW5EZWZpbmVQ
cm9wZXJ0eSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFjdCwgJ1Byb3BUeXBlcycs
IHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICBsb3dQcmlvcml0eVdhcm5pbmco
ZGlkV2FyblByb3BUeXBlc0RlcHJlY2F0ZWQsICdBY2Nlc3NpbmcgUHJvcFR5cGVzIHZpYSB0aGUg
bWFpbiBSZWFjdCBwYWNrYWdlIGlzIGRlcHJlY2F0ZWQsJyArICcgYW5kIHdpbGwgYmUgcmVtb3Zl
ZCBpbiAgUmVhY3QgdjE2LjAuJyArICcgVXNlIHRoZSBsYXRlc3QgYXZhaWxhYmxlIHYxNS4qIHBy
b3AtdHlwZXMgcGFja2FnZSBmcm9tIG5wbSBpbnN0ZWFkLicgKyAnIEZvciBpbmZvIG9uIHVzYWdl
LCBjb21wYXRpYmlsaXR5LCBtaWdyYXRpb24gYW5kIG1vcmUsIHNlZSAnICsgJ2h0dHBzOi8vZmIu
bWUvcHJvcC10eXBlcy1kb2NzJyk7XG4gICAgICAgIGRpZFdhcm5Qcm9wVHlwZXNEZXByZWNhdGVk
ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xuICAgICAgfVxuICAgIH0p
O1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWN0LCAnY3JlYXRlQ2xhc3MnLCB7XG4g
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbG93UHJpb3JpdHlXYXJuaW5nKHdhcm5l
ZEZvckNyZWF0ZUNsYXNzLCAnQWNjZXNzaW5nIGNyZWF0ZUNsYXNzIHZpYSB0aGUgbWFpbiBSZWFj
dCBwYWNrYWdlIGlzIGRlcHJlY2F0ZWQsJyArICcgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSZWFj
dCB2MTYuMC4nICsgXCIgVXNlIGEgcGxhaW4gSmF2YVNjcmlwdCBjbGFzcyBpbnN0ZWFkLiBJZiB5
b3UncmUgbm90IHlldCBcIiArICdyZWFkeSB0byBtaWdyYXRlLCBjcmVhdGUtcmVhY3QtY2xhc3Mg
djE1LiogaXMgYXZhaWxhYmxlICcgKyAnb24gbnBtIGFzIGEgdGVtcG9yYXJ5LCBkcm9wLWluIHJl
cGxhY2VtZW50LiAnICsgJ0ZvciBtb3JlIGluZm8gc2VlIGh0dHBzOi8vZmIubWUvcmVhY3QtY3Jl
YXRlLWNsYXNzJyk7XG4gICAgICAgIHdhcm5lZEZvckNyZWF0ZUNsYXNzID0gdHJ1ZTtcbiAgICAg
ICAgcmV0dXJuIGNyZWF0ZVJlYWN0Q2xhc3M7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAv
LyBSZWFjdC5ET00gZmFjdG9yaWVzIGFyZSBkZXByZWNhdGVkLiBXcmFwIHRoZXNlIG1ldGhvZHMg
c28gdGhhdFxuICAvLyBpbnZvY2F0aW9ucyBvZiB0aGUgUmVhY3QuRE9NIG5hbWVzcGFjZSBhbmQg
YWxlcnQgdXNlcnMgdG8gc3dpdGNoXG4gIC8vIHRvIHRoZSBgcmVhY3QtZG9tLWZhY3Rvcmllc2Ag
cGFja2FnZS5cbiAgUmVhY3QuRE9NID0ge307XG4gIHZhciB3YXJuZWRGb3JGYWN0b3JpZXMgPSBm
YWxzZTtcbiAgT2JqZWN0LmtleXMoUmVhY3RET01GYWN0b3JpZXMpLmZvckVhY2goZnVuY3Rpb24g
KGZhY3RvcnkpIHtcbiAgICBSZWFjdC5ET01bZmFjdG9yeV0gPSBmdW5jdGlvbiAoKSB7XG4gICAg
ICBpZiAoIXdhcm5lZEZvckZhY3Rvcmllcykge1xuICAgICAgICBsb3dQcmlvcml0eVdhcm5pbmco
ZmFsc2UsICdBY2Nlc3NpbmcgZmFjdG9yaWVzIGxpa2UgUmVhY3QuRE9NLiVzIGhhcyBiZWVuIGRl
cHJlY2F0ZWQgJyArICdhbmQgd2lsbCBiZSByZW1vdmVkIGluIHYxNi4wKy4gVXNlIHRoZSAnICsg
J3JlYWN0LWRvbS1mYWN0b3JpZXMgcGFja2FnZSBpbnN0ZWFkLiAnICsgJyBWZXJzaW9uIDEuMCBw
cm92aWRlcyBhIGRyb3AtaW4gcmVwbGFjZW1lbnQuJyArICcgRm9yIG1vcmUgaW5mbywgc2VlIGh0
dHBzOi8vZmIubWUvcmVhY3QtZG9tLWZhY3RvcmllcycsIGZhY3RvcnkpO1xuICAgICAgICB3YXJu
ZWRGb3JGYWN0b3JpZXMgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFJlYWN0RE9NRmFj
dG9yaWVzW2ZhY3RvcnldLmFwcGx5KFJlYWN0RE9NRmFjdG9yaWVzLCBhcmd1bWVudHMpO1xuICAg
IH07XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0O1xuXG5cbi8vLy8vLy8vLy8v
Ly8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9S
ZWFjdC5qc1xuLy8gbW9kdWxlIGlkID0gMTNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyoqXG4g
KiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBC
U0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9v
dCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICog
b2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUg
c2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9hc3NpZ24g
PSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IHJl
cXVpcmUoJy4vUmVhY3RDdXJyZW50T3duZXInKTtcblxudmFyIHdhcm5pbmcgPSByZXF1aXJlKCdm
YmpzL2xpYi93YXJuaW5nJyk7XG52YXIgY2FuRGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL2Nh
bkRlZmluZVByb3BlcnR5Jyk7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBl
Lmhhc093blByb3BlcnR5O1xuXG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gcmVxdWlyZSgnLi9S
ZWFjdEVsZW1lbnRTeW1ib2wnKTtcblxudmFyIFJFU0VSVkVEX1BST1BTID0ge1xuICBrZXk6IHRy
dWUsXG4gIHJlZjogdHJ1ZSxcbiAgX19zZWxmOiB0cnVlLFxuICBfX3NvdXJjZTogdHJ1ZVxufTtc
blxudmFyIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duLCBzcGVjaWFsUHJvcFJlZldhcm5pbmdT
aG93bjtcblxuZnVuY3Rpb24gaGFzVmFsaWRSZWYoY29uZmlnKSB7XG4gIGlmIChwcm9jZXNzLmVu
di5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNh
bGwoY29uZmlnLCAncmVmJykpIHtcbiAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ3JlZicpLmdldDtcbiAgICAgIGlmIChnZXR0ZXIgJiYg
Z2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1c
biAgICB9XG4gIH1cbiAgcmV0dXJuIGNvbmZpZy5yZWYgIT09IHVuZGVmaW5lZDtcbn1cblxuZnVu
Y3Rpb24gaGFzVmFsaWRLZXkoY29uZmlnKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAh
PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAn
a2V5JykpIHtcbiAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKGNvbmZpZywgJ2tleScpLmdldDtcbiAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVh
Y3RXYXJuaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1c
biAgcmV0dXJuIGNvbmZpZy5rZXkgIT09IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZGVmaW5l
S2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHZhciB3YXJuQWJv
dXRBY2Nlc3NpbmdLZXkgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFzcGVjaWFsUHJvcEtleVdh
cm5pbmdTaG93bikge1xuICAgICAgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24gPSB0cnVlO1xu
ICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFs
c2UsICclczogYGtleWAgaXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxsIHJl
c3VsdCAnICsgJ2luIGB1bmRlZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0byBh
Y2Nlc3MgdGhlIHNhbWUgJyArICd2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwgeW91
IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50ICcgKyAncHJvcC4gKGh0dHBzOi8vZmIubWUv
cmVhY3Qtc3BlY2lhbC1wcm9wcyknLCBkaXNwbGF5TmFtZSkgOiB2b2lkIDA7XG4gICAgfVxuICB9
O1xuICB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xuICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdrZXknLCB7XG4gICAgZ2V0OiB3YXJuQWJvdXRBY2Nl
c3NpbmdLZXksXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBk
ZWZpbmVSZWZQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpIHtcbiAgdmFyIHdh
cm5BYm91dEFjY2Vzc2luZ1JlZiA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXNwZWNpYWxQcm9w
UmVmV2FybmluZ1Nob3duKSB7XG4gICAgICBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biA9IHRy
dWU7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2Fybmlu
ZyhmYWxzZSwgJyVzOiBgcmVmYCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdp
bGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVk
IHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50
LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9m
Yi5tZS9yZWFjdC1zcGVjaWFsLXByb3BzKScsIGRpc3BsYXlOYW1lKSA6IHZvaWQgMDtcbiAgICB9
XG4gIH07XG4gIHdhcm5BYm91dEFjY2Vzc2luZ1JlZi5pc1JlYWN0V2FybmluZyA9IHRydWU7XG4g
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ3JlZicsIHtcbiAgICBnZXQ6IHdhcm5BYm91
dEFjY2Vzc2luZ1JlZixcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG59XG5cbi8qKlxu
ICogRmFjdG9yeSBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IFJlYWN0IGVsZW1lbnQuIFRoaXMgbm8g
bG9uZ2VyIGFkaGVyZXMgdG9cbiAqIHRoZSBjbGFzcyBwYXR0ZXJuLCBzbyBkbyBub3QgdXNlIG5l
dyB0byBjYWxsIGl0LiBBbHNvLCBubyBpbnN0YW5jZW9mIGNoZWNrXG4gKiB3aWxsIHdvcmsuIElu
c3RlYWQgdGVzdCAkJHR5cGVvZiBmaWVsZCBhZ2FpbnN0IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1l
bnQnKSB0byBjaGVja1xuICogaWYgc29tZXRoaW5nIGlzIGEgUmVhY3QgRWxlbWVudC5cbiAqXG4g
KiBAcGFyYW0geyp9IHR5cGVcbiAqIEBwYXJhbSB7Kn0ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ3xv
YmplY3R9IHJlZlxuICogQHBhcmFtIHsqfSBzZWxmIEEgKnRlbXBvcmFyeSogaGVscGVyIHRvIGRl
dGVjdCBwbGFjZXMgd2hlcmUgYHRoaXNgIGlzXG4gKiBkaWZmZXJlbnQgZnJvbSB0aGUgYG93bmVy
YCB3aGVuIFJlYWN0LmNyZWF0ZUVsZW1lbnQgaXMgY2FsbGVkLCBzbyB0aGF0IHdlXG4gKiBjYW4g
d2Fybi4gV2Ugd2FudCB0byBnZXQgcmlkIG9mIG93bmVyIGFuZCByZXBsYWNlIHN0cmluZyBgcmVm
YHMgd2l0aCBhcnJvd1xuICogZnVuY3Rpb25zLCBhbmQgYXMgbG9uZyBhcyBgdGhpc2AgYW5kIG93
bmVyIGFyZSB0aGUgc2FtZSwgdGhlcmUgd2lsbCBiZSBub1xuICogY2hhbmdlIGluIGJlaGF2aW9y
LlxuICogQHBhcmFtIHsqfSBzb3VyY2UgQW4gYW5ub3RhdGlvbiBvYmplY3QgKGFkZGVkIGJ5IGEg
dHJhbnNwaWxlciBvciBvdGhlcndpc2UpXG4gKiBpbmRpY2F0aW5nIGZpbGVuYW1lLCBsaW5lIG51
bWJlciwgYW5kL29yIG90aGVyIGluZm9ybWF0aW9uLlxuICogQHBhcmFtIHsqfSBvd25lclxuICog
QHBhcmFtIHsqfSBwcm9wc1xuICogQGludGVybmFsXG4gKi9cbnZhciBSZWFjdEVsZW1lbnQgPSBm
dW5jdGlvbiAodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgb3duZXIsIHByb3BzKSB7XG4g
IHZhciBlbGVtZW50ID0ge1xuICAgIC8vIFRoaXMgdGFnIGFsbG93IHVzIHRvIHVuaXF1ZWx5IGlk
ZW50aWZ5IHRoaXMgYXMgYSBSZWFjdCBFbGVtZW50XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0VMRU1F
TlRfVFlQRSxcblxuICAgIC8vIEJ1aWx0LWluIHByb3BlcnRpZXMgdGhhdCBiZWxvbmcgb24gdGhl
IGVsZW1lbnRcbiAgICB0eXBlOiB0eXBlLFxuICAgIGtleToga2V5LFxuICAgIHJlZjogcmVmLFxu
ICAgIHByb3BzOiBwcm9wcyxcblxuICAgIC8vIFJlY29yZCB0aGUgY29tcG9uZW50IHJlc3BvbnNp
YmxlIGZvciBjcmVhdGluZyB0aGlzIGVsZW1lbnQuXG4gICAgX293bmVyOiBvd25lclxuICB9O1xu
XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8g
VGhlIHZhbGlkYXRpb24gZmxhZyBpcyBjdXJyZW50bHkgbXV0YXRpdmUuIFdlIHB1dCBpdCBvblxu
ICAgIC8vIGFuIGV4dGVybmFsIGJhY2tpbmcgc3RvcmUgc28gdGhhdCB3ZSBjYW4gZnJlZXplIHRo
ZSB3aG9sZSBvYmplY3QuXG4gICAgLy8gVGhpcyBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhIFdlYWtN
YXAgb25jZSB0aGV5IGFyZSBpbXBsZW1lbnRlZCBpblxuICAgIC8vIGNvbW1vbmx5IHVzZWQgZGV2
ZWxvcG1lbnQgZW52aXJvbm1lbnRzLlxuICAgIGVsZW1lbnQuX3N0b3JlID0ge307XG5cbiAgICAv
LyBUbyBtYWtlIGNvbXBhcmluZyBSZWFjdEVsZW1lbnRzIGVhc2llciBmb3IgdGVzdGluZyBwdXJw
b3Nlcywgd2UgbWFrZVxuICAgIC8vIHRoZSB2YWxpZGF0aW9uIGZsYWcgbm9uLWVudW1lcmFibGUg
KHdoZXJlIHBvc3NpYmxlLCB3aGljaCBzaG91bGRcbiAgICAvLyBpbmNsdWRlIGV2ZXJ5IGVudmly
b25tZW50IHdlIHJ1biB0ZXN0cyBpbiksIHNvIHRoZSB0ZXN0IGZyYW1ld29ya1xuICAgIC8vIGln
bm9yZXMgaXQuXG4gICAgaWYgKGNhbkRlZmluZVByb3BlcnR5KSB7XG4gICAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoZWxlbWVudC5fc3RvcmUsICd2YWxpZGF0ZWQnLCB7XG4gICAgICAgIGNvbmZp
Z3VyYWJsZTogZmFsc2UsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0
YWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIC8vIHNl
bGYgYW5kIHNvdXJjZSBhcmUgREVWIG9ubHkgcHJvcGVydGllcy5cbiAgICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShlbGVtZW50LCAnX3NlbGYnLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogZmFs
c2UsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogZmFsc2Us
XG4gICAgICAgIHZhbHVlOiBzZWxmXG4gICAgICB9KTtcbiAgICAgIC8vIFR3byBlbGVtZW50cyBj
cmVhdGVkIGluIHR3byBkaWZmZXJlbnQgcGxhY2VzIHNob3VsZCBiZSBjb25zaWRlcmVkXG4gICAg
ICAvLyBlcXVhbCBmb3IgdGVzdGluZyBwdXJwb3NlcyBhbmQgdGhlcmVmb3JlIHdlIGhpZGUgaXQg
ZnJvbSBlbnVtZXJhdGlvbi5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAn
X3NvdXJjZScsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgZW51bWVy
YWJsZTogZmFsc2UsXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgdmFsdWU6IHNv
dXJjZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQuX3N0b3JlLnZhbGlk
YXRlZCA9IGZhbHNlO1xuICAgICAgZWxlbWVudC5fc2VsZiA9IHNlbGY7XG4gICAgICBlbGVtZW50
Ll9zb3VyY2UgPSBzb3VyY2U7XG4gICAgfVxuICAgIGlmIChPYmplY3QuZnJlZXplKSB7XG4gICAg
ICBPYmplY3QuZnJlZXplKGVsZW1lbnQucHJvcHMpO1xuICAgICAgT2JqZWN0LmZyZWV6ZShlbGVt
ZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn07XG5cbi8qKlxuICogQ3Jl
YXRlIGFuZCByZXR1cm4gYSBuZXcgUmVhY3RFbGVtZW50IG9mIHRoZSBnaXZlbiB0eXBlLlxuICog
U2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxldmVsLWFwaS5o
dG1sI3JlYWN0LmNyZWF0ZWVsZW1lbnRcbiAqL1xuUmVhY3RFbGVtZW50LmNyZWF0ZUVsZW1lbnQg
PSBmdW5jdGlvbiAodHlwZSwgY29uZmlnLCBjaGlsZHJlbikge1xuICB2YXIgcHJvcE5hbWU7XG5c
biAgLy8gUmVzZXJ2ZWQgbmFtZXMgYXJlIGV4dHJhY3RlZFxuICB2YXIgcHJvcHMgPSB7fTtcblxu
ICB2YXIga2V5ID0gbnVsbDtcbiAgdmFyIHJlZiA9IG51bGw7XG4gIHZhciBzZWxmID0gbnVsbDtc
biAgdmFyIHNvdXJjZSA9IG51bGw7XG5cbiAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgaWYg
KGhhc1ZhbGlkUmVmKGNvbmZpZykpIHtcbiAgICAgIHJlZiA9IGNvbmZpZy5yZWY7XG4gICAgfVxu
ICAgIGlmIChoYXNWYWxpZEtleShjb25maWcpKSB7XG4gICAgICBrZXkgPSAnJyArIGNvbmZpZy5r
ZXk7XG4gICAgfVxuXG4gICAgc2VsZiA9IGNvbmZpZy5fX3NlbGYgPT09IHVuZGVmaW5lZCA/IG51
bGwgOiBjb25maWcuX19zZWxmO1xuICAgIHNvdXJjZSA9IGNvbmZpZy5fX3NvdXJjZSA9PT0gdW5k
ZWZpbmVkID8gbnVsbCA6IGNvbmZpZy5fX3NvdXJjZTtcbiAgICAvLyBSZW1haW5pbmcgcHJvcGVy
dGllcyBhcmUgYWRkZWQgdG8gYSBuZXcgcHJvcHMgb2JqZWN0XG4gICAgZm9yIChwcm9wTmFtZSBp
biBjb25maWcpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5h
bWUpICYmICFSRVNFUlZFRF9QUk9QUy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAg
ICAgcHJvcHNbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9XG4g
IH1cblxuICAvLyBDaGlsZHJlbiBjYW4gYmUgbW9yZSB0aGFuIG9uZSBhcmd1bWVudCwgYW5kIHRo
b3NlIGFyZSB0cmFuc2ZlcnJlZCBvbnRvXG4gIC8vIHRoZSBuZXdseSBhbGxvY2F0ZWQgcHJvcHMg
b2JqZWN0LlxuICB2YXIgY2hpbGRyZW5MZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoIC0gMjtcbiAg
aWYgKGNoaWxkcmVuTGVuZ3RoID09PSAxKSB7XG4gICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZHJl
bjtcbiAgfSBlbHNlIGlmIChjaGlsZHJlbkxlbmd0aCA+IDEpIHtcbiAgICB2YXIgY2hpbGRBcnJh
eSA9IEFycmF5KGNoaWxkcmVuTGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxk
cmVuTGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkQXJyYXlbaV0gPSBhcmd1bWVudHNbaSArIDJd
O1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykg
e1xuICAgICAgaWYgKE9iamVjdC5mcmVlemUpIHtcbiAgICAgICAgT2JqZWN0LmZyZWV6ZShjaGls
ZEFycmF5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZEFycmF5
O1xuICB9XG5cbiAgLy8gUmVzb2x2ZSBkZWZhdWx0IHByb3BzXG4gIGlmICh0eXBlICYmIHR5cGUu
ZGVmYXVsdFByb3BzKSB7XG4gICAgdmFyIGRlZmF1bHRQcm9wcyA9IHR5cGUuZGVmYXVsdFByb3Bz
O1xuICAgIGZvciAocHJvcE5hbWUgaW4gZGVmYXVsdFByb3BzKSB7XG4gICAgICBpZiAocHJvcHNb
cHJvcE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gZGVm
YXVsdFByb3BzW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKHByb2Nlc3Mu
ZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoa2V5IHx8IHJlZikge1xu
ICAgICAgaWYgKHR5cGVvZiBwcm9wcy4kJHR5cGVvZiA9PT0gJ3VuZGVmaW5lZCcgfHwgcHJvcHMu
JCR0eXBlb2YgIT09IFJFQUNUX0VMRU1FTlRfVFlQRSkge1xuICAgICAgICB2YXIgZGlzcGxheU5h
bWUgPSB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyA/IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlw
ZS5uYW1lIHx8ICdVbmtub3duJyA6IHR5cGU7XG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAg
ICBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xuICAgICAg
ICB9XG4gICAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgICBkZWZpbmVSZWZQcm9wV2FybmluZ0dl
dHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9
XG4gIHJldHVybiBSZWFjdEVsZW1lbnQodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgUmVh
Y3RDdXJyZW50T3duZXIuY3VycmVudCwgcHJvcHMpO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gYSBm
dW5jdGlvbiB0aGF0IHByb2R1Y2VzIFJlYWN0RWxlbWVudHMgb2YgYSBnaXZlbiB0eXBlLlxuICog
U2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxldmVsLWFwaS5o
dG1sI3JlYWN0LmNyZWF0ZWZhY3RvcnlcbiAqL1xuUmVhY3RFbGVtZW50LmNyZWF0ZUZhY3Rvcnkg
PSBmdW5jdGlvbiAodHlwZSkge1xuICB2YXIgZmFjdG9yeSA9IFJlYWN0RWxlbWVudC5jcmVhdGVF
bGVtZW50LmJpbmQobnVsbCwgdHlwZSk7XG4gIC8vIEV4cG9zZSB0aGUgdHlwZSBvbiB0aGUgZmFj
dG9yeSBhbmQgdGhlIHByb3RvdHlwZSBzbyB0aGF0IGl0IGNhbiBiZVxuICAvLyBlYXNpbHkgYWNj
ZXNzZWQgb24gZWxlbWVudHMuIEUuZy4gYDxGb28gLz4udHlwZSA9PT0gRm9vYC5cbiAgLy8gVGhp
cyBzaG91bGQgbm90IGJlIG5hbWVkIGBjb25zdHJ1Y3RvcmAgc2luY2UgdGhpcyBtYXkgbm90IGJl
IHRoZSBmdW5jdGlvblxuICAvLyB0aGF0IGNyZWF0ZWQgdGhlIGVsZW1lbnQsIGFuZCBpdCBtYXkg
bm90IGV2ZW4gYmUgYSBjb25zdHJ1Y3Rvci5cbiAgLy8gTGVnYWN5IGhvb2sgVE9ETzogV2FybiBp
ZiB0aGlzIGlzIGFjY2Vzc2VkXG4gIGZhY3RvcnkudHlwZSA9IHR5cGU7XG4gIHJldHVybiBmYWN0
b3J5O1xufTtcblxuUmVhY3RFbGVtZW50LmNsb25lQW5kUmVwbGFjZUtleSA9IGZ1bmN0aW9uIChv
bGRFbGVtZW50LCBuZXdLZXkpIHtcbiAgdmFyIG5ld0VsZW1lbnQgPSBSZWFjdEVsZW1lbnQob2xk
RWxlbWVudC50eXBlLCBuZXdLZXksIG9sZEVsZW1lbnQucmVmLCBvbGRFbGVtZW50Ll9zZWxmLCBv
bGRFbGVtZW50Ll9zb3VyY2UsIG9sZEVsZW1lbnQuX293bmVyLCBvbGRFbGVtZW50LnByb3BzKTtc
blxuICByZXR1cm4gbmV3RWxlbWVudDtcbn07XG5cbi8qKlxuICogQ2xvbmUgYW5kIHJldHVybiBh
IG5ldyBSZWFjdEVsZW1lbnQgdXNpbmcgZWxlbWVudCBhcyB0aGUgc3RhcnRpbmcgcG9pbnQuXG4g
KiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy90b3AtbGV2ZWwtYXBp
Lmh0bWwjcmVhY3QuY2xvbmVlbGVtZW50XG4gKi9cblJlYWN0RWxlbWVudC5jbG9uZUVsZW1lbnQg
PSBmdW5jdGlvbiAoZWxlbWVudCwgY29uZmlnLCBjaGlsZHJlbikge1xuICB2YXIgcHJvcE5hbWU7
XG5cbiAgLy8gT3JpZ2luYWwgcHJvcHMgYXJlIGNvcGllZFxuICB2YXIgcHJvcHMgPSBfYXNzaWdu
KHt9LCBlbGVtZW50LnByb3BzKTtcblxuICAvLyBSZXNlcnZlZCBuYW1lcyBhcmUgZXh0cmFjdGVk
XG4gIHZhciBrZXkgPSBlbGVtZW50LmtleTtcbiAgdmFyIHJlZiA9IGVsZW1lbnQucmVmO1xuICAv
LyBTZWxmIGlzIHByZXNlcnZlZCBzaW5jZSB0aGUgb3duZXIgaXMgcHJlc2VydmVkLlxuICB2YXIg
c2VsZiA9IGVsZW1lbnQuX3NlbGY7XG4gIC8vIFNvdXJjZSBpcyBwcmVzZXJ2ZWQgc2luY2UgY2xv
bmVFbGVtZW50IGlzIHVubGlrZWx5IHRvIGJlIHRhcmdldGVkIGJ5IGFcbiAgLy8gdHJhbnNwaWxl
ciwgYW5kIHRoZSBvcmlnaW5hbCBzb3VyY2UgaXMgcHJvYmFibHkgYSBiZXR0ZXIgaW5kaWNhdG9y
IG9mIHRoZVxuICAvLyB0cnVlIG93bmVyLlxuICB2YXIgc291cmNlID0gZWxlbWVudC5fc291cmNl
O1xuXG4gIC8vIE93bmVyIHdpbGwgYmUgcHJlc2VydmVkLCB1bmxlc3MgcmVmIGlzIG92ZXJyaWRk
ZW5cbiAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG5cbiAgaWYgKGNvbmZpZyAhPSBudWxs
KSB7XG4gICAgaWYgKGhhc1ZhbGlkUmVmKGNvbmZpZykpIHtcbiAgICAgIC8vIFNpbGVudGx5IHN0
ZWFsIHRoZSByZWYgZnJvbSB0aGUgcGFyZW50LlxuICAgICAgcmVmID0gY29uZmlnLnJlZjtcbiAg
ICAgIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudDtcbiAgICB9XG4gICAgaWYgKGhh
c1ZhbGlkS2V5KGNvbmZpZykpIHtcbiAgICAgIGtleSA9ICcnICsgY29uZmlnLmtleTtcbiAgICB9
XG5cbiAgICAvLyBSZW1haW5pbmcgcHJvcGVydGllcyBvdmVycmlkZSBleGlzdGluZyBwcm9wc1xu
ICAgIHZhciBkZWZhdWx0UHJvcHM7XG4gICAgaWYgKGVsZW1lbnQudHlwZSAmJiBlbGVtZW50LnR5
cGUuZGVmYXVsdFByb3BzKSB7XG4gICAgICBkZWZhdWx0UHJvcHMgPSBlbGVtZW50LnR5cGUuZGVm
YXVsdFByb3BzO1xuICAgIH1cbiAgICBmb3IgKHByb3BOYW1lIGluIGNvbmZpZykge1xuICAgICAg
aWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBwcm9wTmFtZSkgJiYgIVJFU0VSVkVEX1BS
T1BTLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICBpZiAoY29uZmlnW3Byb3BO
YW1lXSA9PT0gdW5kZWZpbmVkICYmIGRlZmF1bHRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAg
ICAgICAgLy8gUmVzb2x2ZSBkZWZhdWx0IHByb3BzXG4gICAgICAgICAgcHJvcHNbcHJvcE5hbWVd
ID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBw
cm9wc1twcm9wTmFtZV0gPSBjb25maWdbcHJvcE5hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4g
ICAgfVxuICB9XG5cbiAgLy8gQ2hpbGRyZW4gY2FuIGJlIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQs
IGFuZCB0aG9zZSBhcmUgdHJhbnNmZXJyZWQgb250b1xuICAvLyB0aGUgbmV3bHkgYWxsb2NhdGVk
IHByb3BzIG9iamVjdC5cbiAgdmFyIGNoaWxkcmVuTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCAt
IDI7XG4gIGlmIChjaGlsZHJlbkxlbmd0aCA9PT0gMSkge1xuICAgIHByb3BzLmNoaWxkcmVuID0g
Y2hpbGRyZW47XG4gIH0gZWxzZSBpZiAoY2hpbGRyZW5MZW5ndGggPiAxKSB7XG4gICAgdmFyIGNo
aWxkQXJyYXkgPSBBcnJheShjaGlsZHJlbkxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBjaGlsZHJlbkxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGlsZEFycmF5W2ldID0gYXJndW1lbnRz
W2kgKyAyXTtcbiAgICB9XG4gICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZEFycmF5O1xuICB9XG5c
biAgcmV0dXJuIFJlYWN0RWxlbWVudChlbGVtZW50LnR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3Vy
Y2UsIG93bmVyLCBwcm9wcyk7XG59O1xuXG4vKipcbiAqIFZlcmlmaWVzIHRoZSBvYmplY3QgaXMg
YSBSZWFjdEVsZW1lbnQuXG4gKiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3Qv
ZG9jcy90b3AtbGV2ZWwtYXBpLmh0bWwjcmVhY3QuaXN2YWxpZGVsZW1lbnRcbiAqIEBwYXJhbSB7
P29iamVjdH0gb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGBvYmplY3RgIGlz
IGEgdmFsaWQgY29tcG9uZW50LlxuICogQGZpbmFsXG4gKi9cblJlYWN0RWxlbWVudC5pc1ZhbGlk
RWxlbWVudCA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09
ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNU
X0VMRU1FTlRfVFlQRTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RFbGVtZW50O1xuXG5c
bi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVz
L3JlYWN0L2xpYi9SZWFjdEVsZW1lbnQuanNcbi8vIG1vZHVsZSBpZCA9IDE0XG4vLyBtb2R1bGUg
Y2h1bmtzID0gMCIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIElu
Yy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBs
aWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNF
TlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFk
ZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQ
QVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmlj
dCc7XG5cbnZhciBfcHJvZEludmFyaWFudCA9IHJlcXVpcmUoJy4vcmVhY3RQcm9kSW52YXJpYW50
Jyk7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKCdmYmpzL2xpYi9pbnZhcmlhbnQnKTtcblxu
ZnVuY3Rpb24gY2hlY2tNYXNrKHZhbHVlLCBiaXRtYXNrKSB7XG4gIHJldHVybiAodmFsdWUgJiBi
aXRtYXNrKSA9PT0gYml0bWFzaztcbn1cblxudmFyIERPTVByb3BlcnR5SW5qZWN0aW9uID0ge1xu
ICAvKipcbiAgICogTWFwcGluZyBmcm9tIG5vcm1hbGl6ZWQsIGNhbWVsY2FzZWQgcHJvcGVydHkg
bmFtZXMgdG8gYSBjb25maWd1cmF0aW9uIHRoYXRcbiAgICogc3BlY2lmaWVzIGhvdyB0aGUgYXNz
b2NpYXRlZCBET00gcHJvcGVydHkgc2hvdWxkIGJlIGFjY2Vzc2VkIG9yIHJlbmRlcmVkLlxuICAg
Ki9cbiAgTVVTVF9VU0VfUFJPUEVSVFk6IDB4MSxcbiAgSEFTX0JPT0xFQU5fVkFMVUU6IDB4NCxc
biAgSEFTX05VTUVSSUNfVkFMVUU6IDB4OCxcbiAgSEFTX1BPU0lUSVZFX05VTUVSSUNfVkFMVUU6
IDB4MTAgfCAweDgsXG4gIEhBU19PVkVSTE9BREVEX0JPT0xFQU5fVkFMVUU6IDB4MjAsXG5cbiAg
LyoqXG4gICAqIEluamVjdCBzb21lIHNwZWNpYWxpemVkIGtub3dsZWRnZSBhYm91dCB0aGUgRE9N
LiBUaGlzIHRha2VzIGEgY29uZmlnIG9iamVjdFxuICAgKiB3aXRoIHRoZSBmb2xsb3dpbmcgcHJv
cGVydGllczpcbiAgICpcbiAgICogaXNDdXN0b21BdHRyaWJ1dGU6IGZ1bmN0aW9uIHRoYXQgZ2l2
ZW4gYW4gYXR0cmlidXRlIG5hbWUgd2lsbCByZXR1cm4gdHJ1ZVxuICAgKiBpZiBpdCBjYW4gYmUg
aW5zZXJ0ZWQgaW50byB0aGUgRE9NIHZlcmJhdGltLiBVc2VmdWwgZm9yIGRhdGEtKiBvciBhcmlh
LSpcbiAgICogYXR0cmlidXRlcyB3aGVyZSBpdCdzIGltcG9zc2libGUgdG8gZW51bWVyYXRlIGFs
bCBvZiB0aGUgcG9zc2libGVcbiAgICogYXR0cmlidXRlIG5hbWVzLFxuICAgKlxuICAgKiBQcm9w
ZXJ0aWVzOiBvYmplY3QgbWFwcGluZyBET00gcHJvcGVydHkgbmFtZSB0byBvbmUgb2YgdGhlXG4g
ICAqIERPTVByb3BlcnR5SW5qZWN0aW9uIGNvbnN0YW50cyBvciBudWxsLiBJZiB5b3VyIGF0dHJp
YnV0ZSBpc24ndCBpbiBoZXJlLFxuICAgKiBpdCB3b24ndCBnZXQgd3JpdHRlbiB0byB0aGUgRE9N
LlxuICAgKlxuICAgKiBET01BdHRyaWJ1dGVOYW1lczogb2JqZWN0IG1hcHBpbmcgUmVhY3QgYXR0
cmlidXRlIG5hbWUgdG8gdGhlIERPTVxuICAgKiBhdHRyaWJ1dGUgbmFtZS4gQXR0cmlidXRlIG5h
bWVzIG5vdCBzcGVjaWZpZWQgdXNlIHRoZSAqKmxvd2VyY2FzZSoqXG4gICAqIG5vcm1hbGl6ZWQg
bmFtZS5cbiAgICpcbiAgICogRE9NQXR0cmlidXRlTmFtZXNwYWNlczogb2JqZWN0IG1hcHBpbmcg
UmVhY3QgYXR0cmlidXRlIG5hbWUgdG8gdGhlIERPTVxuICAgKiBhdHRyaWJ1dGUgbmFtZXNwYWNl
IFVSTC4gKEF0dHJpYnV0ZSBuYW1lcyBub3Qgc3BlY2lmaWVkIHVzZSBubyBuYW1lc3BhY2UuKVxu
ICAgKlxuICAgKiBET01Qcm9wZXJ0eU5hbWVzOiBzaW1pbGFyIHRvIERPTUF0dHJpYnV0ZU5hbWVz
IGJ1dCBmb3IgRE9NIHByb3BlcnRpZXMuXG4gICAqIFByb3BlcnR5IG5hbWVzIG5vdCBzcGVjaWZp
ZWQgdXNlIHRoZSBub3JtYWxpemVkIG5hbWUuXG4gICAqXG4gICAqIERPTU11dGF0aW9uTWV0aG9k
czogUHJvcGVydGllcyB0aGF0IHJlcXVpcmUgc3BlY2lhbCBtdXRhdGlvbiBtZXRob2RzLiBJZlxu
ICAgKiBgdmFsdWVgIGlzIHVuZGVmaW5lZCwgdGhlIG11dGF0aW9uIG1ldGhvZCBzaG91bGQgdW5z
ZXQgdGhlIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZG9tUHJvcGVydHlD
b25maWcgdGhlIGNvbmZpZyBhcyBkZXNjcmliZWQgYWJvdmUuXG4gICAqL1xuICBpbmplY3RET01Q
cm9wZXJ0eUNvbmZpZzogZnVuY3Rpb24gKGRvbVByb3BlcnR5Q29uZmlnKSB7XG4gICAgdmFyIElu
amVjdGlvbiA9IERPTVByb3BlcnR5SW5qZWN0aW9uO1xuICAgIHZhciBQcm9wZXJ0aWVzID0gZG9t
UHJvcGVydHlDb25maWcuUHJvcGVydGllcyB8fCB7fTtcbiAgICB2YXIgRE9NQXR0cmlidXRlTmFt
ZXNwYWNlcyA9IGRvbVByb3BlcnR5Q29uZmlnLkRPTUF0dHJpYnV0ZU5hbWVzcGFjZXMgfHwge307
XG4gICAgdmFyIERPTUF0dHJpYnV0ZU5hbWVzID0gZG9tUHJvcGVydHlDb25maWcuRE9NQXR0cmli
dXRlTmFtZXMgfHwge307XG4gICAgdmFyIERPTVByb3BlcnR5TmFtZXMgPSBkb21Qcm9wZXJ0eUNv
bmZpZy5ET01Qcm9wZXJ0eU5hbWVzIHx8IHt9O1xuICAgIHZhciBET01NdXRhdGlvbk1ldGhvZHMg
PSBkb21Qcm9wZXJ0eUNvbmZpZy5ET01NdXRhdGlvbk1ldGhvZHMgfHwge307XG5cbiAgICBpZiAo
ZG9tUHJvcGVydHlDb25maWcuaXNDdXN0b21BdHRyaWJ1dGUpIHtcbiAgICAgIERPTVByb3BlcnR5
Ll9pc0N1c3RvbUF0dHJpYnV0ZUZ1bmN0aW9ucy5wdXNoKGRvbVByb3BlcnR5Q29uZmlnLmlzQ3Vz
dG9tQXR0cmlidXRlKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBQcm9wZXJ0
aWVzKSB7XG4gICAgICAhIURPTVByb3BlcnR5LnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkocHJv
cE5hbWUpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFu
dChmYWxzZSwgJ2luamVjdERPTVByb3BlcnR5Q29uZmlnKC4uLik6IFlvdVxcJ3JlIHRyeWluZyB0
byBpbmplY3QgRE9NIHByb3BlcnR5IFxcJyVzXFwnIHdoaWNoIGhhcyBhbHJlYWR5IGJlZW4gaW5q
ZWN0ZWQuIFlvdSBtYXkgYmUgYWNjaWRlbnRhbGx5IGluamVjdGluZyB0aGUgc2FtZSBET00gcHJv
cGVydHkgY29uZmlnIHR3aWNlLCBvciB5b3UgbWF5IGJlIGluamVjdGluZyB0d28gY29uZmlncyB0
aGF0IGhhdmUgY29uZmxpY3RpbmcgcHJvcGVydHkgbmFtZXMuJywgcHJvcE5hbWUpIDogX3Byb2RJ
bnZhcmlhbnQoJzQ4JywgcHJvcE5hbWUpIDogdm9pZCAwO1xuXG4gICAgICB2YXIgbG93ZXJDYXNl
ZCA9IHByb3BOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICB2YXIgcHJvcENvbmZpZyA9IFByb3Bl
cnRpZXNbcHJvcE5hbWVdO1xuXG4gICAgICB2YXIgcHJvcGVydHlJbmZvID0ge1xuICAgICAgICBh
dHRyaWJ1dGVOYW1lOiBsb3dlckNhc2VkLFxuICAgICAgICBhdHRyaWJ1dGVOYW1lc3BhY2U6IG51
bGwsXG4gICAgICAgIHByb3BlcnR5TmFtZTogcHJvcE5hbWUsXG4gICAgICAgIG11dGF0aW9uTWV0
aG9kOiBudWxsLFxuXG4gICAgICAgIG11c3RVc2VQcm9wZXJ0eTogY2hlY2tNYXNrKHByb3BDb25m
aWcsIEluamVjdGlvbi5NVVNUX1VTRV9QUk9QRVJUWSksXG4gICAgICAgIGhhc0Jvb2xlYW5WYWx1
ZTogY2hlY2tNYXNrKHByb3BDb25maWcsIEluamVjdGlvbi5IQVNfQk9PTEVBTl9WQUxVRSksXG4g
ICAgICAgIGhhc051bWVyaWNWYWx1ZTogY2hlY2tNYXNrKHByb3BDb25maWcsIEluamVjdGlvbi5I
QVNfTlVNRVJJQ19WQUxVRSksXG4gICAgICAgIGhhc1Bvc2l0aXZlTnVtZXJpY1ZhbHVlOiBjaGVj
a01hc2socHJvcENvbmZpZywgSW5qZWN0aW9uLkhBU19QT1NJVElWRV9OVU1FUklDX1ZBTFVFKSxc
biAgICAgICAgaGFzT3ZlcmxvYWRlZEJvb2xlYW5WYWx1ZTogY2hlY2tNYXNrKHByb3BDb25maWcs
IEluamVjdGlvbi5IQVNfT1ZFUkxPQURFRF9CT09MRUFOX1ZBTFVFKVxuICAgICAgfTtcbiAgICAg
ICEocHJvcGVydHlJbmZvLmhhc0Jvb2xlYW5WYWx1ZSArIHByb3BlcnR5SW5mby5oYXNOdW1lcmlj
VmFsdWUgKyBwcm9wZXJ0eUluZm8uaGFzT3ZlcmxvYWRlZEJvb2xlYW5WYWx1ZSA8PSAxKSA/IHBy
b2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdE
T01Qcm9wZXJ0eTogVmFsdWUgY2FuIGJlIG9uZSBvZiBib29sZWFuLCBvdmVybG9hZGVkIGJvb2xl
YW4sIG9yIG51bWVyaWMgdmFsdWUsIGJ1dCBub3QgYSBjb21iaW5hdGlvbjogJXMnLCBwcm9wTmFt
ZSkgOiBfcHJvZEludmFyaWFudCgnNTAnLCBwcm9wTmFtZSkgOiB2b2lkIDA7XG5cbiAgICAgIGlm
IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIERPTVBy
b3BlcnR5LmdldFBvc3NpYmxlU3RhbmRhcmROYW1lW2xvd2VyQ2FzZWRdID0gcHJvcE5hbWU7XG4g
ICAgICB9XG5cbiAgICAgIGlmIChET01BdHRyaWJ1dGVOYW1lcy5oYXNPd25Qcm9wZXJ0eShwcm9w
TmFtZSkpIHtcbiAgICAgICAgdmFyIGF0dHJpYnV0ZU5hbWUgPSBET01BdHRyaWJ1dGVOYW1lc1tw
cm9wTmFtZV07XG4gICAgICAgIHByb3BlcnR5SW5mby5hdHRyaWJ1dGVOYW1lID0gYXR0cmlidXRl
TmFtZTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicp
IHtcbiAgICAgICAgICBET01Qcm9wZXJ0eS5nZXRQb3NzaWJsZVN0YW5kYXJkTmFtZVthdHRyaWJ1
dGVOYW1lXSA9IHByb3BOYW1lO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChET01B
dHRyaWJ1dGVOYW1lc3BhY2VzLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICBw
cm9wZXJ0eUluZm8uYXR0cmlidXRlTmFtZXNwYWNlID0gRE9NQXR0cmlidXRlTmFtZXNwYWNlc1tw
cm9wTmFtZV07XG4gICAgICB9XG5cbiAgICAgIGlmIChET01Qcm9wZXJ0eU5hbWVzLmhhc093blBy
b3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICBwcm9wZXJ0eUluZm8ucHJvcGVydHlOYW1lID0g
RE9NUHJvcGVydHlOYW1lc1twcm9wTmFtZV07XG4gICAgICB9XG5cbiAgICAgIGlmIChET01NdXRh
dGlvbk1ldGhvZHMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIHByb3BlcnR5
SW5mby5tdXRhdGlvbk1ldGhvZCA9IERPTU11dGF0aW9uTWV0aG9kc1twcm9wTmFtZV07XG4gICAg
ICB9XG5cbiAgICAgIERPTVByb3BlcnR5LnByb3BlcnRpZXNbcHJvcE5hbWVdID0gcHJvcGVydHlJ
bmZvO1xuICAgIH1cbiAgfVxufTtcblxuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xudmFy
IEFUVFJJQlVURV9OQU1FX1NUQVJUX0NIQVIgPSAnOkEtWl9hLXpcXFxcdTAwQzAtXFxcXHUwMEQ2
XFxcXHUwMEQ4LVxcXFx1MDBGNlxcXFx1MDBGOC1cXFxcdTAyRkZcXFxcdTAzNzAtXFxcXHUwMzdE
XFxcXHUwMzdGLVxcXFx1MUZGRlxcXFx1MjAwQy1cXFxcdTIwMERcXFxcdTIwNzAtXFxcXHUyMThG
XFxcXHUyQzAwLVxcXFx1MkZFRlxcXFx1MzAwMS1cXFxcdUQ3RkZcXFxcdUY5MDAtXFxcXHVGRENG
XFxcXHVGREYwLVxcXFx1RkZGRCc7XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4gKi9cblxuLyoq
XG4gKiBET01Qcm9wZXJ0eSBleHBvcnRzIGxvb2t1cCBvYmplY3RzIHRoYXQgY2FuIGJlIHVzZWQg
bGlrZSBmdW5jdGlvbnM6XG4gKlxuICogICA+IERPTVByb3BlcnR5LmlzVmFsaWRbJ2lkJ11cbiAq
ICAgdHJ1ZVxuICogICA+IERPTVByb3BlcnR5LmlzVmFsaWRbJ2Zvb2JhciddXG4gKiAgIHVuZGVm
aW5lZFxuICpcbiAqIEFsdGhvdWdoIHRoaXMgbWF5IGJlIGNvbmZ1c2luZywgaXQgcGVyZm9ybXMg
YmV0dGVyIGluIGdlbmVyYWwuXG4gKlxuICogQHNlZSBodHRwOi8vanNwZXJmLmNvbS9rZXktZXhp
c3RzXG4gKiBAc2VlIGh0dHA6Ly9qc3BlcmYuY29tL2tleS1taXNzaW5nXG4gKi9cbnZhciBET01Q
cm9wZXJ0eSA9IHtcbiAgSURfQVRUUklCVVRFX05BTUU6ICdkYXRhLXJlYWN0aWQnLFxuICBST09U
X0FUVFJJQlVURV9OQU1FOiAnZGF0YS1yZWFjdHJvb3QnLFxuXG4gIEFUVFJJQlVURV9OQU1FX1NU
QVJUX0NIQVI6IEFUVFJJQlVURV9OQU1FX1NUQVJUX0NIQVIsXG4gIEFUVFJJQlVURV9OQU1FX0NI
QVI6IEFUVFJJQlVURV9OQU1FX1NUQVJUX0NIQVIgKyAnXFxcXC0uMC05XFxcXHUwMEI3XFxcXHUw
MzAwLVxcXFx1MDM2RlxcXFx1MjAzRi1cXFxcdTIwNDAnLFxuXG4gIC8qKlxuICAgKiBNYXAgZnJv
bSBwcm9wZXJ0eSBcInN0YW5kYXJkIG5hbWVcIiB0byBhbiBvYmplY3Qgd2l0aCBpbmZvIGFib3V0
IGhvdyB0byBzZXRcbiAgICogdGhlIHByb3BlcnR5IGluIHRoZSBET00uIEVhY2ggb2JqZWN0IGNv
bnRhaW5zOlxuICAgKlxuICAgKiBhdHRyaWJ1dGVOYW1lOlxuICAgKiAgIFVzZWQgd2hlbiByZW5k
ZXJpbmcgbWFya3VwIG9yIHdpdGggYCpBdHRyaWJ1dGUoKWAuXG4gICAqIGF0dHJpYnV0ZU5hbWVz
cGFjZVxuICAgKiBwcm9wZXJ0eU5hbWU6XG4gICAqICAgVXNlZCBvbiBET00gbm9kZSBpbnN0YW5j
ZXMuIChUaGlzIGluY2x1ZGVzIHByb3BlcnRpZXMgdGhhdCBtdXRhdGUgZHVlIHRvXG4gICAqICAg
ZXh0ZXJuYWwgZmFjdG9ycy4pXG4gICAqIG11dGF0aW9uTWV0aG9kOlxuICAgKiAgIElmIG5vbi1u
dWxsLCB1c2VkIGluc3RlYWQgb2YgdGhlIHByb3BlcnR5IG9yIGBzZXRBdHRyaWJ1dGUoKWAgYWZ0
ZXJcbiAgICogICBpbml0aWFsIHJlbmRlci5cbiAgICogbXVzdFVzZVByb3BlcnR5OlxuICAgKiAg
IFdoZXRoZXIgdGhlIHByb3BlcnR5IG11c3QgYmUgYWNjZXNzZWQgYW5kIG11dGF0ZWQgYXMgYW4g
b2JqZWN0IHByb3BlcnR5LlxuICAgKiBoYXNCb29sZWFuVmFsdWU6XG4gICAqICAgV2hldGhlciB0
aGUgcHJvcGVydHkgc2hvdWxkIGJlIHJlbW92ZWQgd2hlbiBzZXQgdG8gYSBmYWxzZXkgdmFsdWUu
XG4gICAqIGhhc051bWVyaWNWYWx1ZTpcbiAgICogICBXaGV0aGVyIHRoZSBwcm9wZXJ0eSBtdXN0
IGJlIG51bWVyaWMgb3IgcGFyc2UgYXMgYSBudW1lcmljIGFuZCBzaG91bGQgYmVcbiAgICogICBy
ZW1vdmVkIHdoZW4gc2V0IHRvIGEgZmFsc2V5IHZhbHVlLlxuICAgKiBoYXNQb3NpdGl2ZU51bWVy
aWNWYWx1ZTpcbiAgICogICBXaGV0aGVyIHRoZSBwcm9wZXJ0eSBtdXN0IGJlIHBvc2l0aXZlIG51
bWVyaWMgb3IgcGFyc2UgYXMgYSBwb3NpdGl2ZVxuICAgKiAgIG51bWVyaWMgYW5kIHNob3VsZCBi
ZSByZW1vdmVkIHdoZW4gc2V0IHRvIGEgZmFsc2V5IHZhbHVlLlxuICAgKiBoYXNPdmVybG9hZGVk
Qm9vbGVhblZhbHVlOlxuICAgKiAgIFdoZXRoZXIgdGhlIHByb3BlcnR5IGNhbiBiZSB1c2VkIGFz
IGEgZmxhZyBhcyB3ZWxsIGFzIHdpdGggYSB2YWx1ZS5cbiAgICogICBSZW1vdmVkIHdoZW4gc3Ry
aWN0bHkgZXF1YWwgdG8gZmFsc2U7IHByZXNlbnQgd2l0aG91dCBhIHZhbHVlIHdoZW5cbiAgICog
ICBzdHJpY3RseSBlcXVhbCB0byB0cnVlOyBwcmVzZW50IHdpdGggYSB2YWx1ZSBvdGhlcndpc2Uu
XG4gICAqL1xuICBwcm9wZXJ0aWVzOiB7fSxcblxuICAvKipcbiAgICogTWFwcGluZyBmcm9tIGxv
d2VyY2FzZSBwcm9wZXJ0eSBuYW1lcyB0byB0aGUgcHJvcGVybHkgY2FzZWQgdmVyc2lvbiwgdXNl
ZFxuICAgKiB0byB3YXJuIGluIHRoZSBjYXNlIG9mIG1pc3NpbmcgcHJvcGVydGllcy4gQXZhaWxh
YmxlIG9ubHkgaW4gX19ERVZfXy5cbiAgICpcbiAgICogYXV0b2ZvY3VzIGlzIHByZWRlZmluZWQs
IGJlY2F1c2UgYWRkaW5nIGl0IHRvIHRoZSBwcm9wZXJ0eSB3aGl0ZWxpc3RcbiAgICogY2F1c2Vz
IHVuaW50ZW5kZWQgc2lkZSBlZmZlY3RzLlxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAg
Ki9cbiAgZ2V0UG9zc2libGVTdGFuZGFyZE5hbWU6IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAn
cHJvZHVjdGlvbicgPyB7IGF1dG9mb2N1czogJ2F1dG9Gb2N1cycgfSA6IG51bGwsXG5cbiAgLyoq
XG4gICAqIEFsbCBvZiB0aGUgaXNDdXN0b21BdHRyaWJ1dGUoKSBmdW5jdGlvbnMgdGhhdCBoYXZl
IGJlZW4gaW5qZWN0ZWQuXG4gICAqL1xuICBfaXNDdXN0b21BdHRyaWJ1dGVGdW5jdGlvbnM6IFtd
LFxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBhIHByb3BlcnR5IG5hbWUgaXMgYSBjdXN0
b20gYXR0cmlidXRlLlxuICAgKiBAbWV0aG9kXG4gICAqL1xuICBpc0N1c3RvbUF0dHJpYnV0ZTog
ZnVuY3Rpb24gKGF0dHJpYnV0ZU5hbWUpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IERPTVBy
b3BlcnR5Ll9pc0N1c3RvbUF0dHJpYnV0ZUZ1bmN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAg
dmFyIGlzQ3VzdG9tQXR0cmlidXRlRm4gPSBET01Qcm9wZXJ0eS5faXNDdXN0b21BdHRyaWJ1dGVG
dW5jdGlvbnNbaV07XG4gICAgICBpZiAoaXNDdXN0b21BdHRyaWJ1dGVGbihhdHRyaWJ1dGVOYW1l
KSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZh
bHNlO1xuICB9LFxuXG4gIGluamVjdGlvbjogRE9NUHJvcGVydHlJbmplY3Rpb25cbn07XG5cbm1v
ZHVsZS5leHBvcnRzID0gRE9NUHJvcGVydHk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBX
RUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9ET01Qcm9wZXJ0
eS5qc1xuLy8gbW9kdWxlIGlkID0gMTVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyoqXG4gKiBD
b3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNl
cnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qt
c3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBk
aXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2Yg
cGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2Ft
ZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UmVmID0g
cmVxdWlyZSgnLi9SZWFjdFJlZicpO1xudmFyIFJlYWN0SW5zdHJ1bWVudGF0aW9uID0gcmVxdWly
ZSgnLi9SZWFjdEluc3RydW1lbnRhdGlvbicpO1xuXG52YXIgd2FybmluZyA9IHJlcXVpcmUoJ2Zi
anMvbGliL3dhcm5pbmcnKTtcblxuLyoqXG4gKiBIZWxwZXIgdG8gY2FsbCBSZWFjdFJlZi5hdHRh
Y2hSZWZzIHdpdGggdGhpcyBjb21wb3NpdGUgY29tcG9uZW50LCBzcGxpdCBvdXRcbiAqIHRvIGF2
b2lkIGFsbG9jYXRpb25zIGluIHRoZSB0cmFuc2FjdGlvbiBtb3VudC1yZWFkeSBxdWV1ZS5cbiAq
L1xuZnVuY3Rpb24gYXR0YWNoUmVmcygpIHtcbiAgUmVhY3RSZWYuYXR0YWNoUmVmcyh0aGlzLCB0
aGlzLl9jdXJyZW50RWxlbWVudCk7XG59XG5cbnZhciBSZWFjdFJlY29uY2lsZXIgPSB7XG4gIC8q
KlxuICAgKiBJbml0aWFsaXplcyB0aGUgY29tcG9uZW50LCByZW5kZXJzIG1hcmt1cCwgYW5kIHJl
Z2lzdGVycyBldmVudCBsaXN0ZW5lcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDb21wb25l
bnR9IGludGVybmFsSW5zdGFuY2VcbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0
aW9ufFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBw
YXJhbSB7P29iamVjdH0gdGhlIGNvbnRhaW5pbmcgaG9zdCBjb21wb25lbnQgaW5zdGFuY2VcbiAg
ICogQHBhcmFtIHs/b2JqZWN0fSBpbmZvIGFib3V0IHRoZSBob3N0IGNvbnRhaW5lclxuICAgKiBA
cmV0dXJuIHs/c3RyaW5nfSBSZW5kZXJlZCBtYXJrdXAgdG8gYmUgaW5zZXJ0ZWQgaW50byB0aGUg
RE9NLlxuICAgKiBAZmluYWxcbiAgICogQGludGVybmFsXG4gICAqL1xuICBtb3VudENvbXBvbmVu
dDogZnVuY3Rpb24gKGludGVybmFsSW5zdGFuY2UsIHRyYW5zYWN0aW9uLCBob3N0UGFyZW50LCBo
b3N0Q29udGFpbmVySW5mbywgY29udGV4dCwgcGFyZW50RGVidWdJRCkgLy8gMCBpbiBwcm9kdWN0
aW9uIGFuZCBmb3Igcm9vdHNcbiAge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0g
J3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoaW50ZXJuYWxJbnN0YW5jZS5fZGVidWdJRCAhPT0g
MCkge1xuICAgICAgICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25CZWZvcmVNb3Vu
dENvbXBvbmVudChpbnRlcm5hbEluc3RhbmNlLl9kZWJ1Z0lELCBpbnRlcm5hbEluc3RhbmNlLl9j
dXJyZW50RWxlbWVudCwgcGFyZW50RGVidWdJRCk7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBt
YXJrdXAgPSBpbnRlcm5hbEluc3RhbmNlLm1vdW50Q29tcG9uZW50KHRyYW5zYWN0aW9uLCBob3N0
UGFyZW50LCBob3N0Q29udGFpbmVySW5mbywgY29udGV4dCwgcGFyZW50RGVidWdJRCk7XG4gICAg
aWYgKGludGVybmFsSW5zdGFuY2UuX2N1cnJlbnRFbGVtZW50ICYmIGludGVybmFsSW5zdGFuY2Uu
X2N1cnJlbnRFbGVtZW50LnJlZiAhPSBudWxsKSB7XG4gICAgICB0cmFuc2FjdGlvbi5nZXRSZWFj
dE1vdW50UmVhZHkoKS5lbnF1ZXVlKGF0dGFjaFJlZnMsIGludGVybmFsSW5zdGFuY2UpO1xuICAg
IH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAg
ICAgaWYgKGludGVybmFsSW5zdGFuY2UuX2RlYnVnSUQgIT09IDApIHtcbiAgICAgICAgUmVhY3RJ
bnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uTW91bnRDb21wb25lbnQoaW50ZXJuYWxJbnN0YW5j
ZS5fZGVidWdJRCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXJrdXA7XG4gIH0sXG5c
biAgLyoqXG4gICAqIFJldHVybnMgYSB2YWx1ZSB0aGF0IGNhbiBiZSBwYXNzZWQgdG9cbiAgICog
UmVhY3RDb21wb25lbnRFbnZpcm9ubWVudC5yZXBsYWNlTm9kZVdpdGhNYXJrdXAuXG4gICAqL1xu
ICBnZXRIb3N0Tm9kZTogZnVuY3Rpb24gKGludGVybmFsSW5zdGFuY2UpIHtcbiAgICByZXR1cm4g
aW50ZXJuYWxJbnN0YW5jZS5nZXRIb3N0Tm9kZSgpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZWxl
YXNlcyBhbnkgcmVzb3VyY2VzIGFsbG9jYXRlZCBieSBgbW91bnRDb21wb25lbnRgLlxuICAgKlxu
ICAgKiBAZmluYWxcbiAgICogQGludGVybmFsXG4gICAqL1xuICB1bm1vdW50Q29tcG9uZW50OiBm
dW5jdGlvbiAoaW50ZXJuYWxJbnN0YW5jZSwgc2FmZWx5KSB7XG4gICAgaWYgKHByb2Nlc3MuZW52
Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChpbnRlcm5hbEluc3RhbmNl
Ll9kZWJ1Z0lEICE9PSAwKSB7XG4gICAgICAgIFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9v
bC5vbkJlZm9yZVVubW91bnRDb21wb25lbnQoaW50ZXJuYWxJbnN0YW5jZS5fZGVidWdJRCk7XG4g
ICAgICB9XG4gICAgfVxuICAgIFJlYWN0UmVmLmRldGFjaFJlZnMoaW50ZXJuYWxJbnN0YW5jZSwg
aW50ZXJuYWxJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQpO1xuICAgIGludGVybmFsSW5zdGFuY2Uu
dW5tb3VudENvbXBvbmVudChzYWZlbHkpO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAh
PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoaW50ZXJuYWxJbnN0YW5jZS5fZGVidWdJRCAh
PT0gMCkge1xuICAgICAgICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25Vbm1vdW50
Q29tcG9uZW50KGludGVybmFsSW5zdGFuY2UuX2RlYnVnSUQpO1xuICAgICAgfVxuICAgIH1cbiAg
fSxcblxuICAvKipcbiAgICogVXBkYXRlIGEgY29tcG9uZW50IHVzaW5nIGEgbmV3IGVsZW1lbnQu
XG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGludGVybmFsSW5zdGFuY2VcbiAg
ICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IG5leHRFbGVtZW50XG4gICAqIEBwYXJhbSB7UmVhY3RS
ZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHtvYmplY3R9IGNv
bnRleHRcbiAgICogQGludGVybmFsXG4gICAqL1xuICByZWNlaXZlQ29tcG9uZW50OiBmdW5jdGlv
biAoaW50ZXJuYWxJbnN0YW5jZSwgbmV4dEVsZW1lbnQsIHRyYW5zYWN0aW9uLCBjb250ZXh0KSB7
XG4gICAgdmFyIHByZXZFbGVtZW50ID0gaW50ZXJuYWxJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQ7
XG5cbiAgICBpZiAobmV4dEVsZW1lbnQgPT09IHByZXZFbGVtZW50ICYmIGNvbnRleHQgPT09IGlu
dGVybmFsSW5zdGFuY2UuX2NvbnRleHQpIHtcbiAgICAgIC8vIFNpbmNlIGVsZW1lbnRzIGFyZSBp
bW11dGFibGUgYWZ0ZXIgdGhlIG93bmVyIGlzIHJlbmRlcmVkLFxuICAgICAgLy8gd2UgY2FuIGRv
IGEgY2hlYXAgaWRlbnRpdHkgY29tcGFyZSBoZXJlIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIGFc
biAgICAgIC8vIHN1cGVyZmx1b3VzIHJlY29uY2lsZS4gSXQncyBwb3NzaWJsZSBmb3Igc3RhdGUg
dG8gYmUgbXV0YWJsZSBidXQgc3VjaFxuICAgICAgLy8gY2hhbmdlIHNob3VsZCB0cmlnZ2VyIGFu
IHVwZGF0ZSBvZiB0aGUgb3duZXIgd2hpY2ggd291bGQgcmVjcmVhdGVcbiAgICAgIC8vIHRoZSBl
bGVtZW50LiBXZSBleHBsaWNpdGx5IGNoZWNrIGZvciB0aGUgZXhpc3RlbmNlIG9mIGFuIG93bmVy
IHNpbmNlXG4gICAgICAvLyBpdCdzIHBvc3NpYmxlIGZvciBhbiBlbGVtZW50IGNyZWF0ZWQgb3V0
c2lkZSBhIGNvbXBvc2l0ZSB0byBiZVxuICAgICAgLy8gZGVlcGx5IG11dGF0ZWQgYW5kIHJldXNl
ZC5cblxuICAgICAgLy8gVE9ETzogQmFpbGluZyBvdXQgZWFybHkgaXMganVzdCBhIHBlcmYgb3B0
aW1pemF0aW9uIHJpZ2h0P1xuICAgICAgLy8gVE9ETzogUmVtb3ZpbmcgdGhlIHJldHVybiBzdGF0
ZW1lbnQgc2hvdWxkIGFmZmVjdCBjb3JyZWN0bmVzcz9cbiAgICAgIHJldHVybjtcbiAgICB9XG5c
biAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAg
aWYgKGludGVybmFsSW5zdGFuY2UuX2RlYnVnSUQgIT09IDApIHtcbiAgICAgICAgUmVhY3RJbnN0
cnVtZW50YXRpb24uZGVidWdUb29sLm9uQmVmb3JlVXBkYXRlQ29tcG9uZW50KGludGVybmFsSW5z
dGFuY2UuX2RlYnVnSUQsIG5leHRFbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIg
cmVmc0NoYW5nZWQgPSBSZWFjdFJlZi5zaG91bGRVcGRhdGVSZWZzKHByZXZFbGVtZW50LCBuZXh0
RWxlbWVudCk7XG5cbiAgICBpZiAocmVmc0NoYW5nZWQpIHtcbiAgICAgIFJlYWN0UmVmLmRldGFj
aFJlZnMoaW50ZXJuYWxJbnN0YW5jZSwgcHJldkVsZW1lbnQpO1xuICAgIH1cblxuICAgIGludGVy
bmFsSW5zdGFuY2UucmVjZWl2ZUNvbXBvbmVudChuZXh0RWxlbWVudCwgdHJhbnNhY3Rpb24sIGNv
bnRleHQpO1xuXG4gICAgaWYgKHJlZnNDaGFuZ2VkICYmIGludGVybmFsSW5zdGFuY2UuX2N1cnJl
bnRFbGVtZW50ICYmIGludGVybmFsSW5zdGFuY2UuX2N1cnJlbnRFbGVtZW50LnJlZiAhPSBudWxs
KSB7XG4gICAgICB0cmFuc2FjdGlvbi5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKGF0dGFj
aFJlZnMsIGludGVybmFsSW5zdGFuY2UpO1xuICAgIH1cblxuICAgIGlmIChwcm9jZXNzLmVudi5O
T0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoaW50ZXJuYWxJbnN0YW5jZS5f
ZGVidWdJRCAhPT0gMCkge1xuICAgICAgICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wu
b25VcGRhdGVDb21wb25lbnQoaW50ZXJuYWxJbnN0YW5jZS5fZGVidWdJRCk7XG4gICAgICB9XG4g
ICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBGbHVzaCBhbnkgZGlydHkgY2hhbmdlcyBpbiBhIGNv
bXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gaW50ZXJuYWxJbnN0
YW5jZVxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9u
XG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5OiBmdW5j
dGlvbiAoaW50ZXJuYWxJbnN0YW5jZSwgdHJhbnNhY3Rpb24sIHVwZGF0ZUJhdGNoTnVtYmVyKSB7
XG4gICAgaWYgKGludGVybmFsSW5zdGFuY2UuX3VwZGF0ZUJhdGNoTnVtYmVyICE9PSB1cGRhdGVC
YXRjaE51bWJlcikge1xuICAgICAgLy8gVGhlIGNvbXBvbmVudCdzIGVucXVldWVkIGJhdGNoIG51
bWJlciBzaG91bGQgYWx3YXlzIGJlIHRoZSBjdXJyZW50XG4gICAgICAvLyBiYXRjaCBvciB0aGUg
Zm9sbG93aW5nIG9uZS5cbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlv
bicgPyB3YXJuaW5nKGludGVybmFsSW5zdGFuY2UuX3VwZGF0ZUJhdGNoTnVtYmVyID09IG51bGwg
fHwgaW50ZXJuYWxJbnN0YW5jZS5fdXBkYXRlQmF0Y2hOdW1iZXIgPT09IHVwZGF0ZUJhdGNoTnVt
YmVyICsgMSwgJ3BlcmZvcm1VcGRhdGVJZk5lY2Vzc2FyeTogVW5leHBlY3RlZCBiYXRjaCBudW1i
ZXIgKGN1cnJlbnQgJXMsICcgKyAncGVuZGluZyAlcyknLCB1cGRhdGVCYXRjaE51bWJlciwgaW50
ZXJuYWxJbnN0YW5jZS5fdXBkYXRlQmF0Y2hOdW1iZXIpIDogdm9pZCAwO1xuICAgICAgcmV0dXJu
O1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykg
e1xuICAgICAgaWYgKGludGVybmFsSW5zdGFuY2UuX2RlYnVnSUQgIT09IDApIHtcbiAgICAgICAg
UmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uQmVmb3JlVXBkYXRlQ29tcG9uZW50KGlu
dGVybmFsSW5zdGFuY2UuX2RlYnVnSUQsIGludGVybmFsSW5zdGFuY2UuX2N1cnJlbnRFbGVtZW50
KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaW50ZXJuYWxJbnN0YW5jZS5wZXJmb3JtVXBkYXRlSWZO
ZWNlc3NhcnkodHJhbnNhY3Rpb24pO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0g
J3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoaW50ZXJuYWxJbnN0YW5jZS5fZGVidWdJRCAhPT0g
MCkge1xuICAgICAgICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25VcGRhdGVDb21w
b25lbnQoaW50ZXJuYWxJbnN0YW5jZS5fZGVidWdJRCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59
O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UmVjb25jaWxlcjtcblxuXG4vLy8vLy8vLy8vLy8v
Ly8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGli
L1JlYWN0UmVjb25jaWxlci5qc1xuLy8gbW9kdWxlIGlkID0gMTZcbi8vIG1vZHVsZSBjaHVua3Mg
PSAwIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNS1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICog
QWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2Vk
IHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmls
ZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25h
bCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMg
ZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0Jztcblxu
dmFyIERPTU5hbWVzcGFjZXMgPSByZXF1aXJlKCcuL0RPTU5hbWVzcGFjZXMnKTtcbnZhciBzZXRJ
bm5lckhUTUwgPSByZXF1aXJlKCcuL3NldElubmVySFRNTCcpO1xuXG52YXIgY3JlYXRlTWljcm9z
b2Z0VW5zYWZlTG9jYWxGdW5jdGlvbiA9IHJlcXVpcmUoJy4vY3JlYXRlTWljcm9zb2Z0VW5zYWZl
TG9jYWxGdW5jdGlvbicpO1xudmFyIHNldFRleHRDb250ZW50ID0gcmVxdWlyZSgnLi9zZXRUZXh0
Q29udGVudCcpO1xuXG52YXIgRUxFTUVOVF9OT0RFX1RZUEUgPSAxO1xudmFyIERPQ1VNRU5UX0ZS
QUdNRU5UX05PREVfVFlQRSA9IDExO1xuXG4vKipcbiAqIEluIElFICg4LTExKSBhbmQgRWRnZSwg
YXBwZW5kaW5nIG5vZGVzIHdpdGggbm8gY2hpbGRyZW4gaXMgZHJhbWF0aWNhbGx5XG4gKiBmYXN0
ZXIgdGhhbiBhcHBlbmRpbmcgYSBmdWxsIHN1YnRyZWUsIHNvIHdlIGVzc2VudGlhbGx5IHF1ZXVl
IHVwIHRoZVxuICogLmFwcGVuZENoaWxkIGNhbGxzIGhlcmUgYW5kIGFwcGx5IHRoZW0gc28gZWFj
aCBub2RlIGlzIGFkZGVkIHRvIGl0cyBwYXJlbnRcbiAqIGJlZm9yZSBhbnkgY2hpbGRyZW4gYXJl
IGFkZGVkLlxuICpcbiAqIEluIG90aGVyIGJyb3dzZXJzLCBkb2luZyBzbyBpcyBzbG93ZXIgb3Ig
bmV1dHJhbCBjb21wYXJlZCB0byB0aGUgb3RoZXIgb3JkZXJcbiAqIChpbiBGaXJlZm94LCB0d2lj
ZSBhcyBzbG93KSBzbyB3ZSBvbmx5IGRvIHRoaXMgaW52ZXJzaW9uIGluIElFLlxuICpcbiAqIFNl
ZSBodHRwczovL2dpdGh1Yi5jb20vc3BpY3lqL2lubmVyaHRtbC12cy1jcmVhdGVlbGVtZW50LXZz
LWNsb25lbm9kZS5cbiAqL1xudmFyIGVuYWJsZUxhenkgPSB0eXBlb2YgZG9jdW1lbnQgIT09ICd1
bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudC5kb2N1bWVudE1vZGUgPT09ICdudW1iZXInIHx8
IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBuYXZpZ2F0b3IudXNl
ckFnZW50ID09PSAnc3RyaW5nJyAmJiAvXFxiRWRnZVxcL1xcZC8udGVzdChuYXZpZ2F0b3IudXNl
ckFnZW50KTtcblxuZnVuY3Rpb24gaW5zZXJ0VHJlZUNoaWxkcmVuKHRyZWUpIHtcbiAgaWYgKCFl
bmFibGVMYXp5KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBub2RlID0gdHJlZS5ub2RlO1xu
ICB2YXIgY2hpbGRyZW4gPSB0cmVlLmNoaWxkcmVuO1xuICBpZiAoY2hpbGRyZW4ubGVuZ3RoKSB7
XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAg
aW5zZXJ0VHJlZUJlZm9yZShub2RlLCBjaGlsZHJlbltpXSwgbnVsbCk7XG4gICAgfVxuICB9IGVs
c2UgaWYgKHRyZWUuaHRtbCAhPSBudWxsKSB7XG4gICAgc2V0SW5uZXJIVE1MKG5vZGUsIHRyZWUu
aHRtbCk7XG4gIH0gZWxzZSBpZiAodHJlZS50ZXh0ICE9IG51bGwpIHtcbiAgICBzZXRUZXh0Q29u
dGVudChub2RlLCB0cmVlLnRleHQpO1xuICB9XG59XG5cbnZhciBpbnNlcnRUcmVlQmVmb3JlID0g
Y3JlYXRlTWljcm9zb2Z0VW5zYWZlTG9jYWxGdW5jdGlvbihmdW5jdGlvbiAocGFyZW50Tm9kZSwg
dHJlZSwgcmVmZXJlbmNlTm9kZSkge1xuICAvLyBEb2N1bWVudEZyYWdtZW50cyBhcmVuJ3QgYWN0
dWFsbHkgcGFydCBvZiB0aGUgRE9NIGFmdGVyIGluc2VydGlvbiBzb1xuICAvLyBhcHBlbmRpbmcg
Y2hpbGRyZW4gd29uJ3QgdXBkYXRlIHRoZSBET00uIFdlIG5lZWQgdG8gZW5zdXJlIHRoZSBmcmFn
bWVudFxuICAvLyBpcyBwcm9wZXJseSBwb3B1bGF0ZWQgZmlyc3QsIGJyZWFraW5nIG91dCBvZiBv
dXIgbGF6eSBhcHByb2FjaCBmb3IganVzdFxuICAvLyB0aGlzIGxldmVsLiBBbHNvLCBzb21lIDxv
YmplY3Q+IHBsdWdpbnMgKGxpa2UgRmxhc2ggUGxheWVyKSB3aWxsIHJlYWRcbiAgLy8gPHBhcmFt
PiBub2RlcyBpbW1lZGlhdGVseSB1cG9uIGluc2VydGlvbiBpbnRvIHRoZSBET00sIHNvIDxvYmpl
Y3Q+XG4gIC8vIG11c3QgYWxzbyBiZSBwb3B1bGF0ZWQgcHJpb3IgdG8gaW5zZXJ0aW9uIGludG8g
dGhlIERPTS5cbiAgaWYgKHRyZWUubm9kZS5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfRlJBR01FTlRf
Tk9ERV9UWVBFIHx8IHRyZWUubm9kZS5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFX1RZUEUgJiYg
dHJlZS5ub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdvYmplY3QnICYmICh0cmVlLm5v
ZGUubmFtZXNwYWNlVVJJID09IG51bGwgfHwgdHJlZS5ub2RlLm5hbWVzcGFjZVVSSSA9PT0gRE9N
TmFtZXNwYWNlcy5odG1sKSkge1xuICAgIGluc2VydFRyZWVDaGlsZHJlbih0cmVlKTtcbiAgICBw
YXJlbnROb2RlLmluc2VydEJlZm9yZSh0cmVlLm5vZGUsIHJlZmVyZW5jZU5vZGUpO1xuICB9IGVs
c2Uge1xuICAgIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRyZWUubm9kZSwgcmVmZXJlbmNlTm9k
ZSk7XG4gICAgaW5zZXJ0VHJlZUNoaWxkcmVuKHRyZWUpO1xuICB9XG59KTtcblxuZnVuY3Rpb24g
cmVwbGFjZUNoaWxkV2l0aFRyZWUob2xkTm9kZSwgbmV3VHJlZSkge1xuICBvbGROb2RlLnBhcmVu
dE5vZGUucmVwbGFjZUNoaWxkKG5ld1RyZWUubm9kZSwgb2xkTm9kZSk7XG4gIGluc2VydFRyZWVD
aGlsZHJlbihuZXdUcmVlKTtcbn1cblxuZnVuY3Rpb24gcXVldWVDaGlsZChwYXJlbnRUcmVlLCBj
aGlsZFRyZWUpIHtcbiAgaWYgKGVuYWJsZUxhenkpIHtcbiAgICBwYXJlbnRUcmVlLmNoaWxkcmVu
LnB1c2goY2hpbGRUcmVlKTtcbiAgfSBlbHNlIHtcbiAgICBwYXJlbnRUcmVlLm5vZGUuYXBwZW5k
Q2hpbGQoY2hpbGRUcmVlLm5vZGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHF1ZXVlSFRNTCh0cmVl
LCBodG1sKSB7XG4gIGlmIChlbmFibGVMYXp5KSB7XG4gICAgdHJlZS5odG1sID0gaHRtbDtcbiAg
fSBlbHNlIHtcbiAgICBzZXRJbm5lckhUTUwodHJlZS5ub2RlLCBodG1sKTtcbiAgfVxufVxuXG5m
dW5jdGlvbiBxdWV1ZVRleHQodHJlZSwgdGV4dCkge1xuICBpZiAoZW5hYmxlTGF6eSkge1xuICAg
IHRyZWUudGV4dCA9IHRleHQ7XG4gIH0gZWxzZSB7XG4gICAgc2V0VGV4dENvbnRlbnQodHJlZS5u
b2RlLCB0ZXh0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIHRo
aXMubm9kZS5ub2RlTmFtZTtcbn1cblxuZnVuY3Rpb24gRE9NTGF6eVRyZWUobm9kZSkge1xuICBy
ZXR1cm4ge1xuICAgIG5vZGU6IG5vZGUsXG4gICAgY2hpbGRyZW46IFtdLFxuICAgIGh0bWw6IG51
bGwsXG4gICAgdGV4dDogbnVsbCxcbiAgICB0b1N0cmluZzogdG9TdHJpbmdcbiAgfTtcbn1cblxu
RE9NTGF6eVRyZWUuaW5zZXJ0VHJlZUJlZm9yZSA9IGluc2VydFRyZWVCZWZvcmU7XG5ET01MYXp5
VHJlZS5yZXBsYWNlQ2hpbGRXaXRoVHJlZSA9IHJlcGxhY2VDaGlsZFdpdGhUcmVlO1xuRE9NTGF6
eVRyZWUucXVldWVDaGlsZCA9IHF1ZXVlQ2hpbGQ7XG5ET01MYXp5VHJlZS5xdWV1ZUhUTUwgPSBx
dWV1ZUhUTUw7XG5ET01MYXp5VHJlZS5xdWV1ZVRleHQgPSBxdWV1ZVRleHQ7XG5cbm1vZHVsZS5l
eHBvcnRzID0gRE9NTGF6eVRyZWU7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNL
IEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9ET01MYXp5VHJlZS5qc1xu
Ly8gbW9kdWxlIGlkID0gMTdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyoqXG4gKiBDb3B5cmln
aHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0
eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGly
ZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBh
dGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUg
ZGlyZWN0b3J5LlxuICpcbiAqIFxuICovXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogV0FSTklO
RzogRE8gTk9UIG1hbnVhbGx5IHJlcXVpcmUgdGhpcyBtb2R1bGUuXG4gKiBUaGlzIGlzIGEgcmVw
bGFjZW1lbnQgZm9yIGBpbnZhcmlhbnQoLi4uKWAgdXNlZCBieSB0aGUgZXJyb3IgY29kZSBzeXN0
ZW1cbiAqIGFuZCB3aWxsIF9vbmx5XyBiZSByZXF1aXJlZCBieSB0aGUgY29ycmVzcG9uZGluZyBi
YWJlbCBwYXNzLlxuICogSXQgYWx3YXlzIHRocm93cy5cbiAqL1xuXG5mdW5jdGlvbiByZWFjdFBy
b2RJbnZhcmlhbnQoY29kZSkge1xuICB2YXIgYXJnQ291bnQgPSBhcmd1bWVudHMubGVuZ3RoIC0g
MTtcblxuICB2YXIgbWVzc2FnZSA9ICdNaW5pZmllZCBSZWFjdCBlcnJvciAjJyArIGNvZGUgKyAn
OyB2aXNpdCAnICsgJ2h0dHA6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy9lcnJvci1k
ZWNvZGVyLmh0bWw/aW52YXJpYW50PScgKyBjb2RlO1xuXG4gIGZvciAodmFyIGFyZ0lkeCA9IDA7
IGFyZ0lkeCA8IGFyZ0NvdW50OyBhcmdJZHgrKykge1xuICAgIG1lc3NhZ2UgKz0gJyZhcmdzW109
JyArIGVuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbYXJnSWR4ICsgMV0pO1xuICB9XG5cbiAg
bWVzc2FnZSArPSAnIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVk
IGRldiBlbnZpcm9ubWVudCcgKyAnIGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxw
ZnVsIHdhcm5pbmdzLic7XG5cbiAgdmFyIGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICBl
cnJvci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICBlcnJvci5mcmFtZXNUb1BvcCA9
IDE7IC8vIHdlIGRvbid0IGNhcmUgYWJvdXQgcmVhY3RQcm9kSW52YXJpYW50J3Mgb3duIGZyYW1l
XG5cbiAgdGhyb3cgZXJyb3I7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVhY3RQcm9kSW52YXJp
YW50O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9k
ZV9tb2R1bGVzL3JlYWN0L2xpYi9yZWFjdFByb2RJbnZhcmlhbnQuanNcbi8vIG1vZHVsZSBpZCA9
IDE4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2Vu
dCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBz
b3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQg
aW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291
cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJl
IGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAq
L1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFdmVudFBsdWdpbkh1YiA9IHJlcXVpcmUoJy4vRXZl
bnRQbHVnaW5IdWInKTtcbnZhciBFdmVudFBsdWdpblV0aWxzID0gcmVxdWlyZSgnLi9FdmVudFBs
dWdpblV0aWxzJyk7XG5cbnZhciBhY2N1bXVsYXRlSW50byA9IHJlcXVpcmUoJy4vYWNjdW11bGF0
ZUludG8nKTtcbnZhciBmb3JFYWNoQWNjdW11bGF0ZWQgPSByZXF1aXJlKCcuL2ZvckVhY2hBY2N1
bXVsYXRlZCcpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKCdmYmpzL2xpYi93YXJuaW5nJyk7XG5c
bnZhciBnZXRMaXN0ZW5lciA9IEV2ZW50UGx1Z2luSHViLmdldExpc3RlbmVyO1xuXG4vKipcbiAq
IFNvbWUgZXZlbnQgdHlwZXMgaGF2ZSBhIG5vdGlvbiBvZiBkaWZmZXJlbnQgcmVnaXN0cmF0aW9u
IG5hbWVzIGZvciBkaWZmZXJlbnRcbiAqIFwicGhhc2VzXCIgb2YgcHJvcGFnYXRpb24uIFRoaXMg
ZmluZHMgbGlzdGVuZXJzIGJ5IGEgZ2l2ZW4gcGhhc2UuXG4gKi9cbmZ1bmN0aW9uIGxpc3RlbmVy
QXRQaGFzZShpbnN0LCBldmVudCwgcHJvcGFnYXRpb25QaGFzZSkge1xuICB2YXIgcmVnaXN0cmF0
aW9uTmFtZSA9IGV2ZW50LmRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzW3By
b3BhZ2F0aW9uUGhhc2VdO1xuICByZXR1cm4gZ2V0TGlzdGVuZXIoaW5zdCwgcmVnaXN0cmF0aW9u
TmFtZSk7XG59XG5cbi8qKlxuICogVGFncyBhIGBTeW50aGV0aWNFdmVudGAgd2l0aCBkaXNwYXRj
aGVkIGxpc3RlbmVycy4gQ3JlYXRpbmcgdGhpcyBmdW5jdGlvblxuICogaGVyZSwgYWxsb3dzIHVz
IHRvIG5vdCBoYXZlIHRvIGJpbmQgb3IgY3JlYXRlIGZ1bmN0aW9ucyBmb3IgZWFjaCBldmVudC5c
biAqIE11dGF0aW5nIHRoZSBldmVudCdzIG1lbWJlcnMgYWxsb3dzIHVzIHRvIG5vdCBoYXZlIHRv
IGNyZWF0ZSBhIHdyYXBwaW5nXG4gKiBcImRpc3BhdGNoXCIgb2JqZWN0IHRoYXQgcGFpcnMgdGhl
IGV2ZW50IHdpdGggdGhlIGxpc3RlbmVyLlxuICovXG5mdW5jdGlvbiBhY2N1bXVsYXRlRGlyZWN0
aW9uYWxEaXNwYXRjaGVzKGluc3QsIHBoYXNlLCBldmVudCkge1xuICBpZiAocHJvY2Vzcy5lbnYu
Tk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9
PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGluc3QsICdEaXNwYXRjaGluZyBpbnN0IG11c3Qgbm90
IGJlIG51bGwnKSA6IHZvaWQgMDtcbiAgfVxuICB2YXIgbGlzdGVuZXIgPSBsaXN0ZW5lckF0UGhh
c2UoaW5zdCwgZXZlbnQsIHBoYXNlKTtcbiAgaWYgKGxpc3RlbmVyKSB7XG4gICAgZXZlbnQuX2Rp
c3BhdGNoTGlzdGVuZXJzID0gYWNjdW11bGF0ZUludG8oZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJz
LCBsaXN0ZW5lcik7XG4gICAgZXZlbnQuX2Rpc3BhdGNoSW5zdGFuY2VzID0gYWNjdW11bGF0ZUlu
dG8oZXZlbnQuX2Rpc3BhdGNoSW5zdGFuY2VzLCBpbnN0KTtcbiAgfVxufVxuXG4vKipcbiAqIENv
bGxlY3QgZGlzcGF0Y2hlcyAobXVzdCBiZSBlbnRpcmVseSBjb2xsZWN0ZWQgYmVmb3JlIGRpc3Bh
dGNoaW5nIC0gc2VlIHVuaXRcbiAqIHRlc3RzKS4gTGF6aWx5IGFsbG9jYXRlIHRoZSBhcnJheSB0
byBjb25zZXJ2ZSBtZW1vcnkuICBXZSBtdXN0IGxvb3AgdGhyb3VnaFxuICogZWFjaCBldmVudCBh
bmQgcGVyZm9ybSB0aGUgdHJhdmVyc2FsIGZvciBlYWNoIG9uZS4gV2UgY2Fubm90IHBlcmZvcm0g
YVxuICogc2luZ2xlIHRyYXZlcnNhbCBmb3IgdGhlIGVudGlyZSBjb2xsZWN0aW9uIG9mIGV2ZW50
cyBiZWNhdXNlIGVhY2ggZXZlbnQgbWF5XG4gKiBoYXZlIGEgZGlmZmVyZW50IHRhcmdldC5cbiAq
L1xuZnVuY3Rpb24gYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlc1NpbmdsZShldmVudCkge1xu
ICBpZiAoZXZlbnQgJiYgZXZlbnQuZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFt
ZXMpIHtcbiAgICBFdmVudFBsdWdpblV0aWxzLnRyYXZlcnNlVHdvUGhhc2UoZXZlbnQuX3Rhcmdl
dEluc3QsIGFjY3VtdWxhdGVEaXJlY3Rpb25hbERpc3BhdGNoZXMsIGV2ZW50KTtcbiAgfVxufVxu
XG4vKipcbiAqIFNhbWUgYXMgYGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXNTaW5nbGVgLCBi
dXQgc2tpcHMgb3ZlciB0aGUgdGFyZ2V0SUQuXG4gKi9cbmZ1bmN0aW9uIGFjY3VtdWxhdGVUd29Q
aGFzZURpc3BhdGNoZXNTaW5nbGVTa2lwVGFyZ2V0KGV2ZW50KSB7XG4gIGlmIChldmVudCAmJiBl
dmVudC5kaXNwYXRjaENvbmZpZy5waGFzZWRSZWdpc3RyYXRpb25OYW1lcykge1xuICAgIHZhciB0
YXJnZXRJbnN0ID0gZXZlbnQuX3RhcmdldEluc3Q7XG4gICAgdmFyIHBhcmVudEluc3QgPSB0YXJn
ZXRJbnN0ID8gRXZlbnRQbHVnaW5VdGlscy5nZXRQYXJlbnRJbnN0YW5jZSh0YXJnZXRJbnN0KSA6
IG51bGw7XG4gICAgRXZlbnRQbHVnaW5VdGlscy50cmF2ZXJzZVR3b1BoYXNlKHBhcmVudEluc3Qs
IGFjY3VtdWxhdGVEaXJlY3Rpb25hbERpc3BhdGNoZXMsIGV2ZW50KTtcbiAgfVxufVxuXG4vKipc
biAqIEFjY3VtdWxhdGVzIHdpdGhvdXQgcmVnYXJkIHRvIGRpcmVjdGlvbiwgZG9lcyBub3QgbG9v
ayBmb3IgcGhhc2VkXG4gKiByZWdpc3RyYXRpb24gbmFtZXMuIFNhbWUgYXMgYGFjY3VtdWxhdGVE
aXJlY3REaXNwYXRjaGVzU2luZ2xlYCBidXQgd2l0aG91dFxuICogcmVxdWlyaW5nIHRoYXQgdGhl
IGBkaXNwYXRjaE1hcmtlcmAgYmUgdGhlIHNhbWUgYXMgdGhlIGRpc3BhdGNoZWQgSUQuXG4gKi9c
bmZ1bmN0aW9uIGFjY3VtdWxhdGVEaXNwYXRjaGVzKGluc3QsIGlnbm9yZWREaXJlY3Rpb24sIGV2
ZW50KSB7XG4gIGlmIChldmVudCAmJiBldmVudC5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25O
YW1lKSB7XG4gICAgdmFyIHJlZ2lzdHJhdGlvbk5hbWUgPSBldmVudC5kaXNwYXRjaENvbmZpZy5y
ZWdpc3RyYXRpb25OYW1lO1xuICAgIHZhciBsaXN0ZW5lciA9IGdldExpc3RlbmVyKGluc3QsIHJl
Z2lzdHJhdGlvbk5hbWUpO1xuICAgIGlmIChsaXN0ZW5lcikge1xuICAgICAgZXZlbnQuX2Rpc3Bh
dGNoTGlzdGVuZXJzID0gYWNjdW11bGF0ZUludG8oZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzLCBs
aXN0ZW5lcik7XG4gICAgICBldmVudC5fZGlzcGF0Y2hJbnN0YW5jZXMgPSBhY2N1bXVsYXRlSW50
byhldmVudC5fZGlzcGF0Y2hJbnN0YW5jZXMsIGluc3QpO1xuICAgIH1cbiAgfVxufVxuXG4vKipc
biAqIEFjY3VtdWxhdGVzIGRpc3BhdGNoZXMgb24gYW4gYFN5bnRoZXRpY0V2ZW50YCwgYnV0IG9u
bHkgZm9yIHRoZVxuICogYGRpc3BhdGNoTWFya2VyYC5cbiAqIEBwYXJhbSB7U3ludGhldGljRXZl
bnR9IGV2ZW50XG4gKi9cbmZ1bmN0aW9uIGFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzU2luZ2xl
KGV2ZW50KSB7XG4gIGlmIChldmVudCAmJiBldmVudC5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRp
b25OYW1lKSB7XG4gICAgYWNjdW11bGF0ZURpc3BhdGNoZXMoZXZlbnQuX3RhcmdldEluc3QsIG51
bGwsIGV2ZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRj
aGVzKGV2ZW50cykge1xuICBmb3JFYWNoQWNjdW11bGF0ZWQoZXZlbnRzLCBhY2N1bXVsYXRlVHdv
UGhhc2VEaXNwYXRjaGVzU2luZ2xlKTtcbn1cblxuZnVuY3Rpb24gYWNjdW11bGF0ZVR3b1BoYXNl
RGlzcGF0Y2hlc1NraXBUYXJnZXQoZXZlbnRzKSB7XG4gIGZvckVhY2hBY2N1bXVsYXRlZChldmVu
dHMsIGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXNTaW5nbGVTa2lwVGFyZ2V0KTtcbn1cblxu
ZnVuY3Rpb24gYWNjdW11bGF0ZUVudGVyTGVhdmVEaXNwYXRjaGVzKGxlYXZlLCBlbnRlciwgZnJv
bSwgdG8pIHtcbiAgRXZlbnRQbHVnaW5VdGlscy50cmF2ZXJzZUVudGVyTGVhdmUoZnJvbSwgdG8s
IGFjY3VtdWxhdGVEaXNwYXRjaGVzLCBsZWF2ZSwgZW50ZXIpO1xufVxuXG5mdW5jdGlvbiBhY2N1
bXVsYXRlRGlyZWN0RGlzcGF0Y2hlcyhldmVudHMpIHtcbiAgZm9yRWFjaEFjY3VtdWxhdGVkKGV2
ZW50cywgYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXNTaW5nbGUpO1xufVxuXG4vKipcbiAqIEEg
c21hbGwgc2V0IG9mIHByb3BhZ2F0aW9uIHBhdHRlcm5zLCBlYWNoIG9mIHdoaWNoIHdpbGwgYWNj
ZXB0IGEgc21hbGwgYW1vdW50XG4gKiBvZiBpbmZvcm1hdGlvbiwgYW5kIGdlbmVyYXRlIGEgc2V0
IG9mIFwiZGlzcGF0Y2ggcmVhZHkgZXZlbnQgb2JqZWN0c1wiIC0gd2hpY2hcbiAqIGFyZSBzZXRz
IG9mIGV2ZW50cyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGFubm90YXRlZCB3aXRoIGEgc2V0IG9m
IGRpc3BhdGNoZWRcbiAqIGxpc3RlbmVyIGZ1bmN0aW9ucy9pZHMuIFRoZSBBUEkgaXMgZGVzaWdu
ZWQgdGhpcyB3YXkgdG8gZGlzY291cmFnZSB0aGVzZVxuICogcHJvcGFnYXRpb24gc3RyYXRlZ2ll
cyBmcm9tIGFjdHVhbGx5IGV4ZWN1dGluZyB0aGUgZGlzcGF0Y2hlcywgc2luY2Ugd2VcbiAqIGFs
d2F5cyB3YW50IHRvIGNvbGxlY3QgdGhlIGVudGlyZSBzZXQgb2YgZGlzcGF0Y2hlcyBiZWZvcmUg
ZXhlY3V0aW5nIGV2ZW50IGFcbiAqIHNpbmdsZSBvbmUuXG4gKlxuICogQGNvbnN0cnVjdG9yIEV2
ZW50UHJvcGFnYXRvcnNcbiAqL1xudmFyIEV2ZW50UHJvcGFnYXRvcnMgPSB7XG4gIGFjY3VtdWxh
dGVUd29QaGFzZURpc3BhdGNoZXM6IGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXMsXG4gIGFj
Y3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXNTa2lwVGFyZ2V0OiBhY2N1bXVsYXRlVHdvUGhhc2VE
aXNwYXRjaGVzU2tpcFRhcmdldCxcbiAgYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXM6IGFjY3Vt
dWxhdGVEaXJlY3REaXNwYXRjaGVzLFxuICBhY2N1bXVsYXRlRW50ZXJMZWF2ZURpc3BhdGNoZXM6
IGFjY3VtdWxhdGVFbnRlckxlYXZlRGlzcGF0Y2hlc1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBF
dmVudFByb3BhZ2F0b3JzO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09U
RVJcbi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvRXZlbnRQcm9wYWdhdG9ycy5qc1xu
Ly8gbW9kdWxlIGlkID0gMTlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyoqXG4gKiBDb3B5cmln
aHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5c
biAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUg
bGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rv
cnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50
IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJl
Y3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9wcm9kSW52YXJpYW50ID0g
cmVxdWlyZSgnLi9yZWFjdFByb2RJbnZhcmlhbnQnKTtcblxudmFyIEV2ZW50UGx1Z2luUmVnaXN0
cnkgPSByZXF1aXJlKCcuL0V2ZW50UGx1Z2luUmVnaXN0cnknKTtcbnZhciBFdmVudFBsdWdpblV0
aWxzID0gcmVxdWlyZSgnLi9FdmVudFBsdWdpblV0aWxzJyk7XG52YXIgUmVhY3RFcnJvclV0aWxz
ID0gcmVxdWlyZSgnLi9SZWFjdEVycm9yVXRpbHMnKTtcblxudmFyIGFjY3VtdWxhdGVJbnRvID0g
cmVxdWlyZSgnLi9hY2N1bXVsYXRlSW50bycpO1xudmFyIGZvckVhY2hBY2N1bXVsYXRlZCA9IHJl
cXVpcmUoJy4vZm9yRWFjaEFjY3VtdWxhdGVkJyk7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgn
ZmJqcy9saWIvaW52YXJpYW50Jyk7XG5cbi8qKlxuICogSW50ZXJuYWwgc3RvcmUgZm9yIGV2ZW50
IGxpc3RlbmVyc1xuICovXG52YXIgbGlzdGVuZXJCYW5rID0ge307XG5cbi8qKlxuICogSW50ZXJu
YWwgcXVldWUgb2YgZXZlbnRzIHRoYXQgaGF2ZSBhY2N1bXVsYXRlZCB0aGVpciBkaXNwYXRjaGVz
IGFuZCBhcmVcbiAqIHdhaXRpbmcgdG8gaGF2ZSB0aGVpciBkaXNwYXRjaGVzIGV4ZWN1dGVkLlxu
ICovXG52YXIgZXZlbnRRdWV1ZSA9IG51bGw7XG5cbi8qKlxuICogRGlzcGF0Y2hlcyBhbiBldmVu
dCBhbmQgcmVsZWFzZXMgaXQgYmFjayBpbnRvIHRoZSBwb29sLCB1bmxlc3MgcGVyc2lzdGVudC5c
biAqXG4gKiBAcGFyYW0gez9vYmplY3R9IGV2ZW50IFN5bnRoZXRpYyBldmVudCB0byBiZSBkaXNw
YXRjaGVkLlxuICogQHBhcmFtIHtib29sZWFufSBzaW11bGF0ZWQgSWYgdGhlIGV2ZW50IGlzIHNp
bXVsYXRlZCAoY2hhbmdlcyBleG4gYmVoYXZpb3IpXG4gKiBAcHJpdmF0ZVxuICovXG52YXIgZXhl
Y3V0ZURpc3BhdGNoZXNBbmRSZWxlYXNlID0gZnVuY3Rpb24gKGV2ZW50LCBzaW11bGF0ZWQpIHtc
biAgaWYgKGV2ZW50KSB7XG4gICAgRXZlbnRQbHVnaW5VdGlscy5leGVjdXRlRGlzcGF0Y2hlc0lu
T3JkZXIoZXZlbnQsIHNpbXVsYXRlZCk7XG5cbiAgICBpZiAoIWV2ZW50LmlzUGVyc2lzdGVudCgp
KSB7XG4gICAgICBldmVudC5jb25zdHJ1Y3Rvci5yZWxlYXNlKGV2ZW50KTtcbiAgICB9XG4gIH1c
bn07XG52YXIgZXhlY3V0ZURpc3BhdGNoZXNBbmRSZWxlYXNlU2ltdWxhdGVkID0gZnVuY3Rpb24g
KGUpIHtcbiAgcmV0dXJuIGV4ZWN1dGVEaXNwYXRjaGVzQW5kUmVsZWFzZShlLCB0cnVlKTtcbn07
XG52YXIgZXhlY3V0ZURpc3BhdGNoZXNBbmRSZWxlYXNlVG9wTGV2ZWwgPSBmdW5jdGlvbiAoZSkg
e1xuICByZXR1cm4gZXhlY3V0ZURpc3BhdGNoZXNBbmRSZWxlYXNlKGUsIGZhbHNlKTtcbn07XG5c
bnZhciBnZXREaWN0aW9uYXJ5S2V5ID0gZnVuY3Rpb24gKGluc3QpIHtcbiAgLy8gUHJldmVudHMg
VjggcGVyZm9ybWFuY2UgaXNzdWU6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9y
ZWFjdC9wdWxsLzcyMzJcbiAgcmV0dXJuICcuJyArIGluc3QuX3Jvb3ROb2RlSUQ7XG59O1xuXG5m
dW5jdGlvbiBpc0ludGVyYWN0aXZlKHRhZykge1xuICByZXR1cm4gdGFnID09PSAnYnV0dG9uJyB8
fCB0YWcgPT09ICdpbnB1dCcgfHwgdGFnID09PSAnc2VsZWN0JyB8fCB0YWcgPT09ICd0ZXh0YXJl
YSc7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFByZXZlbnRNb3VzZUV2ZW50KG5hbWUsIHR5cGUsIHBy
b3BzKSB7XG4gIHN3aXRjaCAobmFtZSkge1xuICAgIGNhc2UgJ29uQ2xpY2snOlxuICAgIGNhc2Ug
J29uQ2xpY2tDYXB0dXJlJzpcbiAgICBjYXNlICdvbkRvdWJsZUNsaWNrJzpcbiAgICBjYXNlICdv
bkRvdWJsZUNsaWNrQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Nb3VzZURvd24nOlxuICAgIGNhc2Ug
J29uTW91c2VEb3duQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Nb3VzZU1vdmUnOlxuICAgIGNhc2Ug
J29uTW91c2VNb3ZlQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Nb3VzZVVwJzpcbiAgICBjYXNlICdv
bk1vdXNlVXBDYXB0dXJlJzpcbiAgICAgIHJldHVybiAhIShwcm9wcy5kaXNhYmxlZCAmJiBpc0lu
dGVyYWN0aXZlKHR5cGUpKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9
XG59XG5cbi8qKlxuICogVGhpcyBpcyBhIHVuaWZpZWQgaW50ZXJmYWNlIGZvciBldmVudCBwbHVn
aW5zIHRvIGJlIGluc3RhbGxlZCBhbmQgY29uZmlndXJlZC5cbiAqXG4gKiBFdmVudCBwbHVnaW5z
IGNhbiBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgYGV4dHJh
Y3RFdmVudHNgIHtmdW5jdGlvbihzdHJpbmcsIERPTUV2ZW50VGFyZ2V0LCBzdHJpbmcsIG9iamVj
dCk6ICp9XG4gKiAgICAgUmVxdWlyZWQuIFdoZW4gYSB0b3AtbGV2ZWwgZXZlbnQgaXMgZmlyZWQs
IHRoaXMgbWV0aG9kIGlzIGV4cGVjdGVkIHRvXG4gKiAgICAgZXh0cmFjdCBzeW50aGV0aWMgZXZl
bnRzIHRoYXQgd2lsbCBpbiB0dXJuIGJlIHF1ZXVlZCBhbmQgZGlzcGF0Y2hlZC5cbiAqXG4gKiAg
IGBldmVudFR5cGVzYCB7b2JqZWN0fVxuICogICAgIE9wdGlvbmFsLCBwbHVnaW5zIHRoYXQgZmly
ZSBldmVudHMgbXVzdCBwdWJsaXNoIGEgbWFwcGluZyBvZiByZWdpc3RyYXRpb25cbiAqICAgICBu
YW1lcyB0aGF0IGFyZSB1c2VkIHRvIHJlZ2lzdGVyIGxpc3RlbmVycy4gVmFsdWVzIG9mIHRoaXMg
bWFwcGluZyBtdXN0XG4gKiAgICAgYmUgb2JqZWN0cyB0aGF0IGNvbnRhaW4gYHJlZ2lzdHJhdGlv
bk5hbWVgIG9yIGBwaGFzZWRSZWdpc3RyYXRpb25OYW1lc2AuXG4gKlxuICogICBgZXhlY3V0ZURp
c3BhdGNoYCB7ZnVuY3Rpb24ob2JqZWN0LCBmdW5jdGlvbiwgc3RyaW5nKX1cbiAqICAgICBPcHRp
b25hbCwgYWxsb3dzIHBsdWdpbnMgdG8gb3ZlcnJpZGUgaG93IGFuIGV2ZW50IGdldHMgZGlzcGF0
Y2hlZC4gQnlcbiAqICAgICBkZWZhdWx0LCB0aGUgbGlzdGVuZXIgaXMgc2ltcGx5IGludm9rZWQu
XG4gKlxuICogRWFjaCBwbHVnaW4gdGhhdCBpcyBpbmplY3RlZCBpbnRvIGBFdmVudHNQbHVnaW5I
dWJgIGlzIGltbWVkaWF0ZWx5IG9wZXJhYmxlLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xudmFyIEV2
ZW50UGx1Z2luSHViID0ge1xuICAvKipcbiAgICogTWV0aG9kcyBmb3IgaW5qZWN0aW5nIGRlcGVu
ZGVuY2llcy5cbiAgICovXG4gIGluamVjdGlvbjoge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7
YXJyYXl9IEluamVjdGVkRXZlbnRQbHVnaW5PcmRlclxuICAgICAqIEBwdWJsaWNcbiAgICAgKi9c
biAgICBpbmplY3RFdmVudFBsdWdpbk9yZGVyOiBFdmVudFBsdWdpblJlZ2lzdHJ5LmluamVjdEV2
ZW50UGx1Z2luT3JkZXIsXG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gaW5qZWN0
ZWROYW1lc1RvUGx1Z2lucyBNYXAgZnJvbSBuYW1lcyB0byBwbHVnaW4gbW9kdWxlcy5cbiAgICAg
Ki9cbiAgICBpbmplY3RFdmVudFBsdWdpbnNCeU5hbWU6IEV2ZW50UGx1Z2luUmVnaXN0cnkuaW5q
ZWN0RXZlbnRQbHVnaW5zQnlOYW1lXG4gIH0sXG5cbiAgLyoqXG4gICAqIFN0b3JlcyBgbGlzdGVu
ZXJgIGF0IGBsaXN0ZW5lckJhbmtbcmVnaXN0cmF0aW9uTmFtZV1ba2V5XWAuIElzIGlkZW1wb3Rl
bnQuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBpbnN0IFRoZSBpbnN0YW5jZSwgd2hpY2gg
aXMgdGhlIHNvdXJjZSBvZiBldmVudHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWdpc3RyYXRp
b25OYW1lIE5hbWUgb2YgbGlzdGVuZXIgKGUuZy4gYG9uQ2xpY2tgKS5cbiAgICogQHBhcmFtIHtm
dW5jdGlvbn0gbGlzdGVuZXIgVGhlIGNhbGxiYWNrIHRvIHN0b3JlLlxuICAgKi9cbiAgcHV0TGlz
dGVuZXI6IGZ1bmN0aW9uIChpbnN0LCByZWdpc3RyYXRpb25OYW1lLCBsaXN0ZW5lcikge1xuICAg
ICEodHlwZW9mIGxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5W
ICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdFeHBlY3RlZCAlcyBsaXN0ZW5l
ciB0byBiZSBhIGZ1bmN0aW9uLCBpbnN0ZWFkIGdvdCB0eXBlICVzJywgcmVnaXN0cmF0aW9uTmFt
ZSwgdHlwZW9mIGxpc3RlbmVyKSA6IF9wcm9kSW52YXJpYW50KCc5NCcsIHJlZ2lzdHJhdGlvbk5h
bWUsIHR5cGVvZiBsaXN0ZW5lcikgOiB2b2lkIDA7XG5cbiAgICB2YXIga2V5ID0gZ2V0RGljdGlv
bmFyeUtleShpbnN0KTtcbiAgICB2YXIgYmFua0ZvclJlZ2lzdHJhdGlvbk5hbWUgPSBsaXN0ZW5l
ckJhbmtbcmVnaXN0cmF0aW9uTmFtZV0gfHwgKGxpc3RlbmVyQmFua1tyZWdpc3RyYXRpb25OYW1l
XSA9IHt9KTtcbiAgICBiYW5rRm9yUmVnaXN0cmF0aW9uTmFtZVtrZXldID0gbGlzdGVuZXI7XG5c
biAgICB2YXIgUGx1Z2luTW9kdWxlID0gRXZlbnRQbHVnaW5SZWdpc3RyeS5yZWdpc3RyYXRpb25O
YW1lTW9kdWxlc1tyZWdpc3RyYXRpb25OYW1lXTtcbiAgICBpZiAoUGx1Z2luTW9kdWxlICYmIFBs
dWdpbk1vZHVsZS5kaWRQdXRMaXN0ZW5lcikge1xuICAgICAgUGx1Z2luTW9kdWxlLmRpZFB1dExp
c3RlbmVyKGluc3QsIHJlZ2lzdHJhdGlvbk5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG4gIH0sXG5c
biAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBpbnN0IFRoZSBpbnN0YW5jZSwgd2hpY2ggaXMg
dGhlIHNvdXJjZSBvZiBldmVudHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWdpc3RyYXRpb25O
YW1lIE5hbWUgb2YgbGlzdGVuZXIgKGUuZy4gYG9uQ2xpY2tgKS5cbiAgICogQHJldHVybiB7P2Z1
bmN0aW9ufSBUaGUgc3RvcmVkIGNhbGxiYWNrLlxuICAgKi9cbiAgZ2V0TGlzdGVuZXI6IGZ1bmN0
aW9uIChpbnN0LCByZWdpc3RyYXRpb25OYW1lKSB7XG4gICAgLy8gVE9ETzogc2hvdWxkUHJldmVu
dE1vdXNlRXZlbnQgaXMgRE9NLXNwZWNpZmljIGFuZCBkZWZpbml0ZWx5IHNob3VsZCBub3RcbiAg
ICAvLyBsaXZlIGhlcmU7IG5lZWRzIHRvIGJlIG1vdmVkIHRvIGEgYmV0dGVyIHBsYWNlIHNvb25c
biAgICB2YXIgYmFua0ZvclJlZ2lzdHJhdGlvbk5hbWUgPSBsaXN0ZW5lckJhbmtbcmVnaXN0cmF0
aW9uTmFtZV07XG4gICAgaWYgKHNob3VsZFByZXZlbnRNb3VzZUV2ZW50KHJlZ2lzdHJhdGlvbk5h
bWUsIGluc3QuX2N1cnJlbnRFbGVtZW50LnR5cGUsIGluc3QuX2N1cnJlbnRFbGVtZW50LnByb3Bz
KSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBrZXkgPSBnZXREaWN0aW9u
YXJ5S2V5KGluc3QpO1xuICAgIHJldHVybiBiYW5rRm9yUmVnaXN0cmF0aW9uTmFtZSAmJiBiYW5r
Rm9yUmVnaXN0cmF0aW9uTmFtZVtrZXldO1xuICB9LFxuXG4gIC8qKlxuICAgKiBEZWxldGVzIGEg
bGlzdGVuZXIgZnJvbSB0aGUgcmVnaXN0cmF0aW9uIGJhbmsuXG4gICAqXG4gICAqIEBwYXJhbSB7
b2JqZWN0fSBpbnN0IFRoZSBpbnN0YW5jZSwgd2hpY2ggaXMgdGhlIHNvdXJjZSBvZiBldmVudHMu
XG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWdpc3RyYXRpb25OYW1lIE5hbWUgb2YgbGlzdGVuZXIg
KGUuZy4gYG9uQ2xpY2tgKS5cbiAgICovXG4gIGRlbGV0ZUxpc3RlbmVyOiBmdW5jdGlvbiAoaW5z
dCwgcmVnaXN0cmF0aW9uTmFtZSkge1xuICAgIHZhciBQbHVnaW5Nb2R1bGUgPSBFdmVudFBsdWdp
blJlZ2lzdHJ5LnJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzW3JlZ2lzdHJhdGlvbk5hbWVdO1xuICAg
IGlmIChQbHVnaW5Nb2R1bGUgJiYgUGx1Z2luTW9kdWxlLndpbGxEZWxldGVMaXN0ZW5lcikge1xu
ICAgICAgUGx1Z2luTW9kdWxlLndpbGxEZWxldGVMaXN0ZW5lcihpbnN0LCByZWdpc3RyYXRpb25O
YW1lKTtcbiAgICB9XG5cbiAgICB2YXIgYmFua0ZvclJlZ2lzdHJhdGlvbk5hbWUgPSBsaXN0ZW5l
ckJhbmtbcmVnaXN0cmF0aW9uTmFtZV07XG4gICAgLy8gVE9ETzogVGhpcyBzaG91bGQgbmV2ZXIg
YmUgbnVsbCAtLSB3aGVuIGlzIGl0P1xuICAgIGlmIChiYW5rRm9yUmVnaXN0cmF0aW9uTmFtZSkg
e1xuICAgICAgdmFyIGtleSA9IGdldERpY3Rpb25hcnlLZXkoaW5zdCk7XG4gICAgICBkZWxldGUg
YmFua0ZvclJlZ2lzdHJhdGlvbk5hbWVba2V5XTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAq
IERlbGV0ZXMgYWxsIGxpc3RlbmVycyBmb3IgdGhlIERPTSBlbGVtZW50IHdpdGggdGhlIHN1cHBs
aWVkIElELlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gaW5zdCBUaGUgaW5zdGFuY2UsIHdo
aWNoIGlzIHRoZSBzb3VyY2Ugb2YgZXZlbnRzLlxuICAgKi9cbiAgZGVsZXRlQWxsTGlzdGVuZXJz
OiBmdW5jdGlvbiAoaW5zdCkge1xuICAgIHZhciBrZXkgPSBnZXREaWN0aW9uYXJ5S2V5KGluc3Qp
O1xuICAgIGZvciAodmFyIHJlZ2lzdHJhdGlvbk5hbWUgaW4gbGlzdGVuZXJCYW5rKSB7XG4gICAg
ICBpZiAoIWxpc3RlbmVyQmFuay5oYXNPd25Qcm9wZXJ0eShyZWdpc3RyYXRpb25OYW1lKSkge1xu
ICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFsaXN0ZW5lckJhbmtbcmVn
aXN0cmF0aW9uTmFtZV1ba2V5XSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAg
ICAgdmFyIFBsdWdpbk1vZHVsZSA9IEV2ZW50UGx1Z2luUmVnaXN0cnkucmVnaXN0cmF0aW9uTmFt
ZU1vZHVsZXNbcmVnaXN0cmF0aW9uTmFtZV07XG4gICAgICBpZiAoUGx1Z2luTW9kdWxlICYmIFBs
dWdpbk1vZHVsZS53aWxsRGVsZXRlTGlzdGVuZXIpIHtcbiAgICAgICAgUGx1Z2luTW9kdWxlLndp
bGxEZWxldGVMaXN0ZW5lcihpbnN0LCByZWdpc3RyYXRpb25OYW1lKTtcbiAgICAgIH1cblxuICAg
ICAgZGVsZXRlIGxpc3RlbmVyQmFua1tyZWdpc3RyYXRpb25OYW1lXVtrZXldO1xuICAgIH1cbiAg
fSxcblxuICAvKipcbiAgICogQWxsb3dzIHJlZ2lzdGVyZWQgcGx1Z2lucyBhbiBvcHBvcnR1bml0
eSB0byBleHRyYWN0IGV2ZW50cyBmcm9tIHRvcC1sZXZlbFxuICAgKiBuYXRpdmUgYnJvd3NlciBl
dmVudHMuXG4gICAqXG4gICAqIEByZXR1cm4geyp9IEFuIGFjY3VtdWxhdGlvbiBvZiBzeW50aGV0
aWMgZXZlbnRzLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGV4dHJhY3RFdmVudHM6IGZ1bmN0
aW9uICh0b3BMZXZlbFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRh
cmdldCkge1xuICAgIHZhciBldmVudHM7XG4gICAgdmFyIHBsdWdpbnMgPSBFdmVudFBsdWdpblJl
Z2lzdHJ5LnBsdWdpbnM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwbHVnaW5zLmxlbmd0aDsg
aSsrKSB7XG4gICAgICAvLyBOb3QgZXZlcnkgcGx1Z2luIGluIHRoZSBvcmRlcmluZyBtYXkgYmUg
bG9hZGVkIGF0IHJ1bnRpbWUuXG4gICAgICB2YXIgcG9zc2libGVQbHVnaW4gPSBwbHVnaW5zW2ld
O1xuICAgICAgaWYgKHBvc3NpYmxlUGx1Z2luKSB7XG4gICAgICAgIHZhciBleHRyYWN0ZWRFdmVu
dHMgPSBwb3NzaWJsZVBsdWdpbi5leHRyYWN0RXZlbnRzKHRvcExldmVsVHlwZSwgdGFyZ2V0SW5z
dCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICAgICAgaWYgKGV4dHJhY3Rl
ZEV2ZW50cykge1xuICAgICAgICAgIGV2ZW50cyA9IGFjY3VtdWxhdGVJbnRvKGV2ZW50cywgZXh0
cmFjdGVkRXZlbnRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXZl
bnRzO1xuICB9LFxuXG4gIC8qKlxuICAgKiBFbnF1ZXVlcyBhIHN5bnRoZXRpYyBldmVudCB0aGF0
IHNob3VsZCBiZSBkaXNwYXRjaGVkIHdoZW5cbiAgICogYHByb2Nlc3NFdmVudFF1ZXVlYCBpcyBp
bnZva2VkLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IGV2ZW50cyBBbiBhY2N1bXVsYXRpb24gb2Yg
c3ludGhldGljIGV2ZW50cy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlRXZlbnRz
OiBmdW5jdGlvbiAoZXZlbnRzKSB7XG4gICAgaWYgKGV2ZW50cykge1xuICAgICAgZXZlbnRRdWV1
ZSA9IGFjY3VtdWxhdGVJbnRvKGV2ZW50UXVldWUsIGV2ZW50cyk7XG4gICAgfVxuICB9LFxuXG4g
IC8qKlxuICAgKiBEaXNwYXRjaGVzIGFsbCBzeW50aGV0aWMgZXZlbnRzIG9uIHRoZSBldmVudCBx
dWV1ZS5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcm9jZXNzRXZlbnRRdWV1ZTog
ZnVuY3Rpb24gKHNpbXVsYXRlZCkge1xuICAgIC8vIFNldCBgZXZlbnRRdWV1ZWAgdG8gbnVsbCBi
ZWZvcmUgcHJvY2Vzc2luZyBpdCBzbyB0aGF0IHdlIGNhbiB0ZWxsIGlmIG1vcmVcbiAgICAvLyBl
dmVudHMgZ2V0IGVucXVldWVkIHdoaWxlIHByb2Nlc3NpbmcuXG4gICAgdmFyIHByb2Nlc3NpbmdF
dmVudFF1ZXVlID0gZXZlbnRRdWV1ZTtcbiAgICBldmVudFF1ZXVlID0gbnVsbDtcbiAgICBpZiAo
c2ltdWxhdGVkKSB7XG4gICAgICBmb3JFYWNoQWNjdW11bGF0ZWQocHJvY2Vzc2luZ0V2ZW50UXVl
dWUsIGV4ZWN1dGVEaXNwYXRjaGVzQW5kUmVsZWFzZVNpbXVsYXRlZCk7XG4gICAgfSBlbHNlIHtc
biAgICAgIGZvckVhY2hBY2N1bXVsYXRlZChwcm9jZXNzaW5nRXZlbnRRdWV1ZSwgZXhlY3V0ZURp
c3BhdGNoZXNBbmRSZWxlYXNlVG9wTGV2ZWwpO1xuICAgIH1cbiAgICAhIWV2ZW50UXVldWUgPyBw
cm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAn
cHJvY2Vzc0V2ZW50UXVldWUoKTogQWRkaXRpb25hbCBldmVudHMgd2VyZSBlbnF1ZXVlZCB3aGls
ZSBwcm9jZXNzaW5nIGFuIGV2ZW50IHF1ZXVlLiBTdXBwb3J0IGZvciB0aGlzIGhhcyBub3QgeWV0
IGJlZW4gaW1wbGVtZW50ZWQuJykgOiBfcHJvZEludmFyaWFudCgnOTUnKSA6IHZvaWQgMDtcbiAg
ICAvLyBUaGlzIHdvdWxkIGJlIGEgZ29vZCB0aW1lIHRvIHJldGhyb3cgaWYgYW55IG9mIHRoZSBl
dmVudCBoYW5kbGVycyB0aHJldy5cbiAgICBSZWFjdEVycm9yVXRpbHMucmV0aHJvd0NhdWdodEVy
cm9yKCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFRoZXNlIGFyZSBuZWVkZWQgZm9yIHRlc3RzIG9u
bHkuIERvIG5vdCB1c2UhXG4gICAqL1xuICBfX3B1cmdlOiBmdW5jdGlvbiAoKSB7XG4gICAgbGlz
dGVuZXJCYW5rID0ge307XG4gIH0sXG5cbiAgX19nZXRMaXN0ZW5lckJhbms6IGZ1bmN0aW9uICgp
IHtcbiAgICByZXR1cm4gbGlzdGVuZXJCYW5rO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9
IEV2ZW50UGx1Z2luSHViO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09U
RVJcbi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvRXZlbnRQbHVnaW5IdWIuanNcbi8v
IG1vZHVsZSBpZCA9IDIwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qKlxuICogQ29weXJpZ2h0
IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4g
KlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxp
Y2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5
IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCBy
aWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0
b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBTeW50aGV0aWNFdmVudCA9IHJl
cXVpcmUoJy4vU3ludGhldGljRXZlbnQnKTtcblxudmFyIGdldEV2ZW50VGFyZ2V0ID0gcmVxdWly
ZSgnLi9nZXRFdmVudFRhcmdldCcpO1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgVUlFdmVudFxuICog
QHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cbnZhciBV
SUV2ZW50SW50ZXJmYWNlID0ge1xuICB2aWV3OiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAo
ZXZlbnQudmlldykge1xuICAgICAgcmV0dXJuIGV2ZW50LnZpZXc7XG4gICAgfVxuXG4gICAgdmFy
IHRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KGV2ZW50KTtcbiAgICBpZiAodGFyZ2V0LndpbmRvdyA9
PT0gdGFyZ2V0KSB7XG4gICAgICAvLyB0YXJnZXQgaXMgYSB3aW5kb3cgb2JqZWN0XG4gICAgICBy
ZXR1cm4gdGFyZ2V0O1xuICAgIH1cblxuICAgIHZhciBkb2MgPSB0YXJnZXQub3duZXJEb2N1bWVu
dDtcbiAgICAvLyBUT0RPOiBGaWd1cmUgb3V0IHdoeSBgb3duZXJEb2N1bWVudGAgaXMgc29tZXRp
bWVzIHVuZGVmaW5lZCBpbiBJRTguXG4gICAgaWYgKGRvYykge1xuICAgICAgcmV0dXJuIGRvYy5k
ZWZhdWx0VmlldyB8fCBkb2MucGFyZW50V2luZG93O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1
cm4gd2luZG93O1xuICAgIH1cbiAgfSxcbiAgZGV0YWlsOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAg
ICByZXR1cm4gZXZlbnQuZGV0YWlsIHx8IDA7XG4gIH1cbn07XG5cbi8qKlxuICogQHBhcmFtIHtv
YmplY3R9IGRpc3BhdGNoQ29uZmlnIENvbmZpZ3VyYXRpb24gdXNlZCB0byBkaXNwYXRjaCB0aGlz
IGV2ZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGRpc3BhdGNoTWFya2VyIE1hcmtlciBpZGVudGlm
eWluZyB0aGUgZXZlbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5h
dGl2ZSBicm93c2VyIGV2ZW50LlxuICogQGV4dGVuZHMge1N5bnRoZXRpY0V2ZW50fVxuICovXG5m
dW5jdGlvbiBTeW50aGV0aWNVSUV2ZW50KGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwg
bmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHJldHVybiBTeW50aGV0aWNFdmVu
dC5jYWxsKHRoaXMsIGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQs
IG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbn1cblxuU3ludGhldGljRXZlbnQuYXVnbWVudENsYXNzKFN5
bnRoZXRpY1VJRXZlbnQsIFVJRXZlbnRJbnRlcmZhY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5
bnRoZXRpY1VJRXZlbnQ7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RF
UlxuLy8gLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNVSUV2ZW50LmpzXG4v
LyBtb2R1bGUgaWQgPSAyMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipcbiAqIENvcHlyaWdo
dCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxu
ICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBs
aWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9y
eSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQg
cmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVj
dG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIGBSZWFjdEluc3RhbmNl
TWFwYCBtYWludGFpbnMgYSBtYXBwaW5nIGZyb20gYSBwdWJsaWMgZmFjaW5nIHN0YXRlZnVsXG4g
KiBpbnN0YW5jZSAoa2V5KSBhbmQgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uICh2YWx1ZSku
IFRoaXMgYWxsb3dzIHB1YmxpY1xuICogbWV0aG9kcyB0byBhY2NlcHQgdGhlIHVzZXIgZmFjaW5n
IGluc3RhbmNlIGFzIGFuIGFyZ3VtZW50IGFuZCBtYXAgdGhlbSBiYWNrXG4gKiB0byBpbnRlcm5h
bCBtZXRob2RzLlxuICovXG5cbi8vIFRPRE86IFJlcGxhY2UgdGhpcyB3aXRoIEVTNjogdmFyIFJl
YWN0SW5zdGFuY2VNYXAgPSBuZXcgTWFwKCk7XG5cbnZhciBSZWFjdEluc3RhbmNlTWFwID0ge1xu
ICAvKipcbiAgICogVGhpcyBBUEkgc2hvdWxkIGJlIGNhbGxlZCBgZGVsZXRlYCBidXQgd2UnZCBo
YXZlIHRvIG1ha2Ugc3VyZSB0byBhbHdheXNcbiAgICogdHJhbnNmb3JtIHRoZXNlIHRvIHN0cmlu
Z3MgZm9yIElFIHN1cHBvcnQuIFdoZW4gdGhpcyB0cmFuc2Zvcm0gaXMgZnVsbHlcbiAgICogc3Vw
cG9ydGVkIHdlIGNhbiByZW5hbWUgaXQuXG4gICAqL1xuICByZW1vdmU6IGZ1bmN0aW9uIChrZXkp
IHtcbiAgICBrZXkuX3JlYWN0SW50ZXJuYWxJbnN0YW5jZSA9IHVuZGVmaW5lZDtcbiAgfSxcblxu
ICBnZXQ6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4ga2V5Ll9yZWFjdEludGVybmFsSW5z
dGFuY2U7XG4gIH0sXG5cbiAgaGFzOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIGtleS5f
cmVhY3RJbnRlcm5hbEluc3RhbmNlICE9PSB1bmRlZmluZWQ7XG4gIH0sXG5cbiAgc2V0OiBmdW5j
dGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIGtleS5fcmVhY3RJbnRlcm5hbEluc3RhbmNlID0gdmFs
dWU7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RJbnN0YW5jZU1hcDtcblxuXG4v
Ly8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9y
ZWFjdC1kb20vbGliL1JlYWN0SW5zdGFuY2VNYXAuanNcbi8vIG1vZHVsZSBpZCA9IDIyXG4vLyBt
b2R1bGUgY2h1bmtzID0gMCIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZh
Y2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNl
IGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRo
ZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0
cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3Vu
ZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxu
J3VzZSBzdHJpY3QnO1xuXG52YXIgZW1wdHlPYmplY3QgPSB7fTtcblxuaWYgKHByb2Nlc3MuZW52
Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgT2JqZWN0LmZyZWV6ZShlbXB0eU9iamVj
dCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZW1wdHlPYmplY3Q7XG5cblxuLy8vLy8vLy8vLy8v
Ly8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvZmJqcy9saWIvZW1w
dHlPYmplY3QuanNcbi8vIG1vZHVsZSBpZCA9IDIzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8q
KlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0
aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhl
IHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRc
biAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4g
dGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFy
IF9wcm9kSW52YXJpYW50ID0gcmVxdWlyZSgnLi9yZWFjdFByb2RJbnZhcmlhbnQnKTtcblxudmFy
IGludmFyaWFudCA9IHJlcXVpcmUoJ2ZianMvbGliL2ludmFyaWFudCcpO1xuXG52YXIgT0JTRVJW
RURfRVJST1IgPSB7fTtcblxuLyoqXG4gKiBgVHJhbnNhY3Rpb25gIGNyZWF0ZXMgYSBibGFjayBi
b3ggdGhhdCBpcyBhYmxlIHRvIHdyYXAgYW55IG1ldGhvZCBzdWNoIHRoYXRcbiAqIGNlcnRhaW4g
aW52YXJpYW50cyBhcmUgbWFpbnRhaW5lZCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBtZXRob2QgaXMg
aW52b2tlZFxuICogKEV2ZW4gaWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biB3aGlsZSBpbnZva2lu
ZyB0aGUgd3JhcHBlZCBtZXRob2QpLiBXaG9ldmVyXG4gKiBpbnN0YW50aWF0ZXMgYSB0cmFuc2Fj
dGlvbiBjYW4gcHJvdmlkZSBlbmZvcmNlcnMgb2YgdGhlIGludmFyaWFudHMgYXRcbiAqIGNyZWF0
aW9uIHRpbWUuIFRoZSBgVHJhbnNhY3Rpb25gIGNsYXNzIGl0c2VsZiB3aWxsIHN1cHBseSBvbmUg
YWRkaXRpb25hbFxuICogYXV0b21hdGljIGludmFyaWFudCBmb3IgeW91IC0gdGhlIGludmFyaWFu
dCB0aGF0IGFueSB0cmFuc2FjdGlvbiBpbnN0YW5jZVxuICogc2hvdWxkIG5vdCBiZSBydW4gd2hp
bGUgaXQgaXMgYWxyZWFkeSBiZWluZyBydW4uIFlvdSB3b3VsZCB0eXBpY2FsbHkgY3JlYXRlIGFc
biAqIHNpbmdsZSBpbnN0YW5jZSBvZiBhIGBUcmFuc2FjdGlvbmAgZm9yIHJldXNlIG11bHRpcGxl
IHRpbWVzLCB0aGF0IHBvdGVudGlhbGx5XG4gKiBpcyB1c2VkIHRvIHdyYXAgc2V2ZXJhbCBkaWZm
ZXJlbnQgbWV0aG9kcy4gV3JhcHBlcnMgYXJlIGV4dHJlbWVseSBzaW1wbGUgLVxuICogdGhleSBv
bmx5IHJlcXVpcmUgaW1wbGVtZW50aW5nIHR3byBtZXRob2RzLlxuICpcbiAqIDxwcmU+XG4gKiAg
ICAgICAgICAgICAgICAgICAgICAgd3JhcHBlcnMgKGluamVjdGVkIGF0IGNyZWF0aW9uIHRpbWUp
XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAgICAgICAgK1xuICog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgIHxcbiAqICAgICAg
ICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS18LS0tLS0tLS0tLS0tLS0r
XG4gKiAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgdiAgICAgICAgfCAgICAg
ICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgIHwgICAgICArLS0tLS0tLS0tLS0tLS0t
KyAgIHwgICAgICAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICB8ICAgKy0tfCAgICB3
cmFwcGVyMSAgIHwtLS18LS0tLSsgICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgfCAg
IHwgICstLS0tLS0tLS0tLS0tLS0rICAgdiAgICB8ICAgICAgICAgfFxuICogICAgICAgICAgICAg
ICAgICAgIHwgICB8ICAgICAgICAgICstLS0tLS0tLS0tLS0tKyAgfCAgICAgICAgIHxcbiAqICAg
ICAgICAgICAgICAgICAgICB8ICAgfCAgICAgKy0tLS18ICAgd3JhcHBlcjIgIHwtLS0tLS0tLSsg
ICB8XG4gKiAgICAgICAgICAgICAgICAgICAgfCAgIHwgICAgIHwgICAgKy0tLS0tLS0tLS0tLS0r
ICB8ICAgICB8ICAgfFxuICogICAgICAgICAgICAgICAgICAgIHwgICB8ICAgICB8ICAgICAgICAg
ICAgICAgICAgICAgfCAgICAgfCAgIHxcbiAqICAgICAgICAgICAgICAgICAgICB8ICAgdiAgICAg
diAgICAgICAgICAgICAgICAgICAgIHYgICAgIHYgICB8IHdyYXBwZXJcbiAqICAgICAgICAgICAg
ICAgICAgICB8ICstLS0rICstLS0rICAgKy0tLS0tLS0tLSsgICArLS0tKyArLS0tKyB8IGludmFy
aWFudHNcbiAqIHBlcmZvcm0oYW55TWV0aG9kKSB8IHwgICB8IHwgICB8ICAgfCAgICAgICAgIHwg
ICB8ICAgfCB8ICAgfCB8IG1haW50YWluZWRcbiAqICstLS0tLS0tLS0tLS0tLS0tLT58LXwtLS18
LXwtLS18LS0+fGFueU1ldGhvZHwtLS18LS0tfC18LS0tfC18LS0tLS0tLS0+XG4gKiAgICAgICAg
ICAgICAgICAgICAgfCB8ICAgfCB8ICAgfCAgIHwgICAgICAgICB8ICAgfCAgIHwgfCAgIHwgfFxu
ICogICAgICAgICAgICAgICAgICAgIHwgfCAgIHwgfCAgIHwgICB8ICAgICAgICAgfCAgIHwgICB8
IHwgICB8IHxcbiAqICAgICAgICAgICAgICAgICAgICB8IHwgICB8IHwgICB8ICAgfCAgICAgICAg
IHwgICB8ICAgfCB8ICAgfCB8XG4gKiAgICAgICAgICAgICAgICAgICAgfCArLS0tKyArLS0tKyAg
ICstLS0tLS0tLS0rICAgKy0tLSsgKy0tLSsgfFxuICogICAgICAgICAgICAgICAgICAgIHwgIGlu
aXRpYWxpemUgICAgICAgICAgICAgICAgICAgIGNsb3NlICAgIHxcbiAqICAgICAgICAgICAgICAg
ICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gKiA8L3By
ZT5cbiAqXG4gKiBVc2UgY2FzZXM6XG4gKiAtIFByZXNlcnZpbmcgdGhlIGlucHV0IHNlbGVjdGlv
biByYW5nZXMgYmVmb3JlL2FmdGVyIHJlY29uY2lsaWF0aW9uLlxuICogICBSZXN0b3Jpbmcgc2Vs
ZWN0aW9uIGV2ZW4gaW4gdGhlIGV2ZW50IG9mIGFuIHVuZXhwZWN0ZWQgZXJyb3IuXG4gKiAtIERl
YWN0aXZhdGluZyBldmVudHMgd2hpbGUgcmVhcnJhbmdpbmcgdGhlIERPTSwgcHJldmVudGluZyBi
bHVycy9mb2N1c2VzLFxuICogICB3aGlsZSBndWFyYW50ZWVpbmcgdGhhdCBhZnRlcndhcmRzLCB0
aGUgZXZlbnQgc3lzdGVtIGlzIHJlYWN0aXZhdGVkLlxuICogLSBGbHVzaGluZyBhIHF1ZXVlIG9m
IGNvbGxlY3RlZCBET00gbXV0YXRpb25zIHRvIHRoZSBtYWluIFVJIHRocmVhZCBhZnRlciBhXG4g
KiAgIHJlY29uY2lsaWF0aW9uIHRha2VzIHBsYWNlIGluIGEgd29ya2VyIHRocmVhZC5cbiAqIC0g
SW52b2tpbmcgYW55IGNvbGxlY3RlZCBgY29tcG9uZW50RGlkVXBkYXRlYCBjYWxsYmFja3MgYWZ0
ZXIgcmVuZGVyaW5nIG5ld1xuICogICBjb250ZW50LlxuICogLSAoRnV0dXJlIHVzZSBjYXNlKTog
V3JhcHBpbmcgcGFydGljdWxhciBmbHVzaGVzIG9mIHRoZSBgUmVhY3RXb3JrZXJgIHF1ZXVlXG4g
KiAgIHRvIHByZXNlcnZlIHRoZSBgc2Nyb2xsVG9wYCAoYW4gYXV0b21hdGljIHNjcm9sbCBhd2Fy
ZSBET00pLlxuICogLSAoRnV0dXJlIHVzZSBjYXNlKTogTGF5b3V0IGNhbGN1bGF0aW9ucyBiZWZv
cmUgYW5kIGFmdGVyIERPTSB1cGRhdGVzLlxuICpcbiAqIFRyYW5zYWN0aW9uYWwgcGx1Z2luIEFQ
STpcbiAqIC0gQSBtb2R1bGUgdGhhdCBoYXMgYW4gYGluaXRpYWxpemVgIG1ldGhvZCB0aGF0IHJl
dHVybnMgYW55IHByZWNvbXB1dGF0aW9uLlxuICogLSBhbmQgYSBgY2xvc2VgIG1ldGhvZCB0aGF0
IGFjY2VwdHMgdGhlIHByZWNvbXB1dGF0aW9uLiBgY2xvc2VgIGlzIGludm9rZWRcbiAqICAgd2hl
biB0aGUgd3JhcHBlZCBwcm9jZXNzIGlzIGNvbXBsZXRlZCwgb3IgaGFzIGZhaWxlZC5cbiAqXG4g
KiBAcGFyYW0ge0FycmF5PFRyYW5zYWN0aW9uYWxXcmFwcGVyPn0gdHJhbnNhY3Rpb25XcmFwcGVy
IFdyYXBwZXIgbW9kdWxlc1xuICogdGhhdCBpbXBsZW1lbnQgYGluaXRpYWxpemVgIGFuZCBgY2xv
c2VgLlxuICogQHJldHVybiB7VHJhbnNhY3Rpb259IFNpbmdsZSB0cmFuc2FjdGlvbiBmb3IgcmV1
c2UgaW4gdGhyZWFkLlxuICpcbiAqIEBjbGFzcyBUcmFuc2FjdGlvblxuICovXG52YXIgVHJhbnNh
Y3Rpb25JbXBsID0ge1xuICAvKipcbiAgICogU2V0cyB1cCB0aGlzIGluc3RhbmNlIHNvIHRoYXQg
aXQgaXMgcHJlcGFyZWQgZm9yIGNvbGxlY3RpbmcgbWV0cmljcy4gRG9lc1xuICAgKiBzbyBzdWNo
IHRoYXQgdGhpcyBzZXR1cCBtZXRob2QgbWF5IGJlIHVzZWQgb24gYW4gaW5zdGFuY2UgdGhhdCBp
cyBhbHJlYWR5XG4gICAqIGluaXRpYWxpemVkLCBpbiBhIHdheSB0aGF0IGRvZXMgbm90IGNvbnN1
bWUgYWRkaXRpb25hbCBtZW1vcnkgdXBvbiByZXVzZS5cbiAgICogVGhhdCBjYW4gYmUgdXNlZnVs
IGlmIHlvdSBkZWNpZGUgdG8gbWFrZSB5b3VyIHN1YmNsYXNzIG9mIHRoaXMgbWl4aW4gYVxuICAg
KiBcIlBvb2xlZENsYXNzXCIuXG4gICAqL1xuICByZWluaXRpYWxpemVUcmFuc2FjdGlvbjogZnVu
Y3Rpb24gKCkge1xuICAgIHRoaXMudHJhbnNhY3Rpb25XcmFwcGVycyA9IHRoaXMuZ2V0VHJhbnNh
Y3Rpb25XcmFwcGVycygpO1xuICAgIGlmICh0aGlzLndyYXBwZXJJbml0RGF0YSkge1xuICAgICAg
dGhpcy53cmFwcGVySW5pdERhdGEubGVuZ3RoID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhp
cy53cmFwcGVySW5pdERhdGEgPSBbXTtcbiAgICB9XG4gICAgdGhpcy5faXNJblRyYW5zYWN0aW9u
ID0gZmFsc2U7XG4gIH0sXG5cbiAgX2lzSW5UcmFuc2FjdGlvbjogZmFsc2UsXG5cbiAgLyoqXG4g
ICAqIEBhYnN0cmFjdFxuICAgKiBAcmV0dXJuIHtBcnJheTxUcmFuc2FjdGlvbldyYXBwZXI+fSBB
cnJheSBvZiB0cmFuc2FjdGlvbiB3cmFwcGVycy5cbiAgICovXG4gIGdldFRyYW5zYWN0aW9uV3Jh
cHBlcnM6IG51bGwsXG5cbiAgaXNJblRyYW5zYWN0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0
dXJuICEhdGhpcy5faXNJblRyYW5zYWN0aW9uO1xuICB9LFxuXG4gIC8qIGVzbGludC1kaXNhYmxl
IHNwYWNlLWJlZm9yZS1mdW5jdGlvbi1wYXJlbiAqL1xuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyB0
aGUgZnVuY3Rpb24gd2l0aGluIGEgc2FmZXR5IHdpbmRvdy4gVXNlIHRoaXMgZm9yIHRoZSB0b3Ag
bGV2ZWxcbiAgICogbWV0aG9kcyB0aGF0IHJlc3VsdCBpbiBsYXJnZSBhbW91bnRzIG9mIGNvbXB1
dGF0aW9uL211dGF0aW9ucyB0aGF0IHdvdWxkXG4gICAqIG5lZWQgdG8gYmUgc2FmZXR5IGNoZWNr
ZWQuIFRoZSBvcHRpb25hbCBhcmd1bWVudHMgaGVscHMgcHJldmVudCB0aGUgbmVlZFxuICAgKiB0
byBiaW5kIGluIG1hbnkgY2FzZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IG1ldGhv
ZCBNZW1iZXIgb2Ygc2NvcGUgdG8gY2FsbC5cbiAgICogQHBhcmFtIHtPYmplY3R9IHNjb3BlIFNj
b3BlIHRvIGludm9rZSBmcm9tLlxuICAgKiBAcGFyYW0ge09iamVjdD89fSBhIEFyZ3VtZW50IHRv
IHBhc3MgdG8gdGhlIG1ldGhvZC5cbiAgICogQHBhcmFtIHtPYmplY3Q/PX0gYiBBcmd1bWVudCB0
byBwYXNzIHRvIHRoZSBtZXRob2QuXG4gICAqIEBwYXJhbSB7T2JqZWN0Pz19IGMgQXJndW1lbnQg
dG8gcGFzcyB0byB0aGUgbWV0aG9kLlxuICAgKiBAcGFyYW0ge09iamVjdD89fSBkIEFyZ3VtZW50
IHRvIHBhc3MgdG8gdGhlIG1ldGhvZC5cbiAgICogQHBhcmFtIHtPYmplY3Q/PX0gZSBBcmd1bWVu
dCB0byBwYXNzIHRvIHRoZSBtZXRob2QuXG4gICAqIEBwYXJhbSB7T2JqZWN0Pz19IGYgQXJndW1l
bnQgdG8gcGFzcyB0byB0aGUgbWV0aG9kLlxuICAgKlxuICAgKiBAcmV0dXJuIHsqfSBSZXR1cm4g
dmFsdWUgZnJvbSBgbWV0aG9kYC5cbiAgICovXG4gIHBlcmZvcm06IGZ1bmN0aW9uIChtZXRob2Qs
IHNjb3BlLCBhLCBiLCBjLCBkLCBlLCBmKSB7XG4gICAgLyogZXNsaW50LWVuYWJsZSBzcGFjZS1i
ZWZvcmUtZnVuY3Rpb24tcGFyZW4gKi9cbiAgICAhIXRoaXMuaXNJblRyYW5zYWN0aW9uKCkgPyBw
cm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAn
VHJhbnNhY3Rpb24ucGVyZm9ybSguLi4pOiBDYW5ub3QgaW5pdGlhbGl6ZSBhIHRyYW5zYWN0aW9u
IHdoZW4gdGhlcmUgaXMgYWxyZWFkeSBhbiBvdXRzdGFuZGluZyB0cmFuc2FjdGlvbi4nKSA6IF9w
cm9kSW52YXJpYW50KCcyNycpIDogdm9pZCAwO1xuICAgIHZhciBlcnJvclRocm93bjtcbiAgICB2
YXIgcmV0O1xuICAgIHRyeSB7XG4gICAgICB0aGlzLl9pc0luVHJhbnNhY3Rpb24gPSB0cnVlO1xu
ICAgICAgLy8gQ2F0Y2hpbmcgZXJyb3JzIG1ha2VzIGRlYnVnZ2luZyBtb3JlIGRpZmZpY3VsdCwg
c28gd2Ugc3RhcnQgd2l0aFxuICAgICAgLy8gZXJyb3JUaHJvd24gc2V0IHRvIHRydWUgYmVmb3Jl
IHNldHRpbmcgaXQgdG8gZmFsc2UgYWZ0ZXIgY2FsbGluZ1xuICAgICAgLy8gY2xvc2UgLS0gaWYg
aXQncyBzdGlsbCBzZXQgdG8gdHJ1ZSBpbiB0aGUgZmluYWxseSBibG9jaywgaXQgbWVhbnNcbiAg
ICAgIC8vIG9uZSBvZiB0aGVzZSBjYWxscyB0aHJldy5cbiAgICAgIGVycm9yVGhyb3duID0gdHJ1
ZTtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUFsbCgwKTtcbiAgICAgIHJldCA9IG1ldGhvZC5jYWxs
KHNjb3BlLCBhLCBiLCBjLCBkLCBlLCBmKTtcbiAgICAgIGVycm9yVGhyb3duID0gZmFsc2U7XG4g
ICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChlcnJvclRocm93bikge1xu
ICAgICAgICAgIC8vIElmIGBtZXRob2RgIHRocm93cywgcHJlZmVyIHRvIHNob3cgdGhhdCBzdGFj
ayB0cmFjZSBvdmVyIGFueSB0aHJvd25cbiAgICAgICAgICAvLyBieSBpbnZva2luZyBgY2xvc2VB
bGxgLlxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlQWxsKDApO1xuICAg
ICAgICAgIH0gY2F0Y2ggKGVycikge31cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBT
aW5jZSBgbWV0aG9kYCBkaWRuJ3QgdGhyb3csIHdlIGRvbid0IHdhbnQgdG8gc2lsZW5jZSB0aGUg
ZXhjZXB0aW9uXG4gICAgICAgICAgLy8gaGVyZS5cbiAgICAgICAgICB0aGlzLmNsb3NlQWxsKDAp
O1xuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLl9pc0luVHJhbnNh
Y3Rpb24gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfSxcblxu
ICBpbml0aWFsaXplQWxsOiBmdW5jdGlvbiAoc3RhcnRJbmRleCkge1xuICAgIHZhciB0cmFuc2Fj
dGlvbldyYXBwZXJzID0gdGhpcy50cmFuc2FjdGlvbldyYXBwZXJzO1xuICAgIGZvciAodmFyIGkg
PSBzdGFydEluZGV4OyBpIDwgdHJhbnNhY3Rpb25XcmFwcGVycy5sZW5ndGg7IGkrKykge1xuICAg
ICAgdmFyIHdyYXBwZXIgPSB0cmFuc2FjdGlvbldyYXBwZXJzW2ldO1xuICAgICAgdHJ5IHtcbiAg
ICAgICAgLy8gQ2F0Y2hpbmcgZXJyb3JzIG1ha2VzIGRlYnVnZ2luZyBtb3JlIGRpZmZpY3VsdCwg
c28gd2Ugc3RhcnQgd2l0aCB0aGVcbiAgICAgICAgLy8gT0JTRVJWRURfRVJST1Igc3RhdGUgYmVm
b3JlIG92ZXJ3cml0aW5nIGl0IHdpdGggdGhlIHJlYWwgcmV0dXJuIHZhbHVlXG4gICAgICAgIC8v
IG9mIGluaXRpYWxpemUgLS0gaWYgaXQncyBzdGlsbCBzZXQgdG8gT0JTRVJWRURfRVJST1IgaW4g
dGhlIGZpbmFsbHlcbiAgICAgICAgLy8gYmxvY2ssIGl0IG1lYW5zIHdyYXBwZXIuaW5pdGlhbGl6
ZSB0aHJldy5cbiAgICAgICAgdGhpcy53cmFwcGVySW5pdERhdGFbaV0gPSBPQlNFUlZFRF9FUlJP
UjtcbiAgICAgICAgdGhpcy53cmFwcGVySW5pdERhdGFbaV0gPSB3cmFwcGVyLmluaXRpYWxpemUg
PyB3cmFwcGVyLmluaXRpYWxpemUuY2FsbCh0aGlzKSA6IG51bGw7XG4gICAgICB9IGZpbmFsbHkg
e1xuICAgICAgICBpZiAodGhpcy53cmFwcGVySW5pdERhdGFbaV0gPT09IE9CU0VSVkVEX0VSUk9S
KSB7XG4gICAgICAgICAgLy8gVGhlIGluaXRpYWxpemVyIGZvciB3cmFwcGVyIGkgdGhyZXcgYW4g
ZXJyb3I7IGluaXRpYWxpemUgdGhlXG4gICAgICAgICAgLy8gcmVtYWluaW5nIHdyYXBwZXJzIGJ1
dCBzaWxlbmNlIGFueSBleGNlcHRpb25zIGZyb20gdGhlbSB0byBlbnN1cmVcbiAgICAgICAgICAv
LyB0aGF0IHRoZSBmaXJzdCBlcnJvciBpcyB0aGUgb25lIHRvIGJ1YmJsZSB1cC5cbiAgICAgICAg
ICB0cnkge1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplQWxsKGkgKyAxKTtcbiAgICAgICAg
ICB9IGNhdGNoIChlcnIpIHt9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAg
LyoqXG4gICAqIEludm9rZXMgZWFjaCBvZiBgdGhpcy50cmFuc2FjdGlvbldyYXBwZXJzLmNsb3Nl
W2ldYCBmdW5jdGlvbnMsIHBhc3NpbmcgaW50b1xuICAgKiB0aGVtIHRoZSByZXNwZWN0aXZlIHJl
dHVybiB2YWx1ZXMgb2YgYHRoaXMudHJhbnNhY3Rpb25XcmFwcGVycy5pbml0W2ldYFxuICAgKiAo
YGNsb3NlYHJzIHRoYXQgY29ycmVzcG9uZCB0byBpbml0aWFsaXplcnMgdGhhdCBmYWlsZWQgd2ls
bCBub3QgYmVcbiAgICogaW52b2tlZCkuXG4gICAqL1xuICBjbG9zZUFsbDogZnVuY3Rpb24gKHN0
YXJ0SW5kZXgpIHtcbiAgICAhdGhpcy5pc0luVHJhbnNhY3Rpb24oKSA/IHByb2Nlc3MuZW52Lk5P
REVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdUcmFuc2FjdGlvbi5j
bG9zZUFsbCgpOiBDYW5ub3QgY2xvc2UgdHJhbnNhY3Rpb24gd2hlbiBub25lIGFyZSBvcGVuLicp
IDogX3Byb2RJbnZhcmlhbnQoJzI4JykgOiB2b2lkIDA7XG4gICAgdmFyIHRyYW5zYWN0aW9uV3Jh
cHBlcnMgPSB0aGlzLnRyYW5zYWN0aW9uV3JhcHBlcnM7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0
SW5kZXg7IGkgPCB0cmFuc2FjdGlvbldyYXBwZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIg
d3JhcHBlciA9IHRyYW5zYWN0aW9uV3JhcHBlcnNbaV07XG4gICAgICB2YXIgaW5pdERhdGEgPSB0
aGlzLndyYXBwZXJJbml0RGF0YVtpXTtcbiAgICAgIHZhciBlcnJvclRocm93bjtcbiAgICAgIHRy
eSB7XG4gICAgICAgIC8vIENhdGNoaW5nIGVycm9ycyBtYWtlcyBkZWJ1Z2dpbmcgbW9yZSBkaWZm
aWN1bHQsIHNvIHdlIHN0YXJ0IHdpdGhcbiAgICAgICAgLy8gZXJyb3JUaHJvd24gc2V0IHRvIHRy
dWUgYmVmb3JlIHNldHRpbmcgaXQgdG8gZmFsc2UgYWZ0ZXIgY2FsbGluZ1xuICAgICAgICAvLyBj
bG9zZSAtLSBpZiBpdCdzIHN0aWxsIHNldCB0byB0cnVlIGluIHRoZSBmaW5hbGx5IGJsb2NrLCBp
dCBtZWFuc1xuICAgICAgICAvLyB3cmFwcGVyLmNsb3NlIHRocmV3LlxuICAgICAgICBlcnJvclRo
cm93biA9IHRydWU7XG4gICAgICAgIGlmIChpbml0RGF0YSAhPT0gT0JTRVJWRURfRVJST1IgJiYg
d3JhcHBlci5jbG9zZSkge1xuICAgICAgICAgIHdyYXBwZXIuY2xvc2UuY2FsbCh0aGlzLCBpbml0
RGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgZXJyb3JUaHJvd24gPSBmYWxzZTtcbiAgICAgIH0g
ZmluYWxseSB7XG4gICAgICAgIGlmIChlcnJvclRocm93bikge1xuICAgICAgICAgIC8vIFRoZSBj
bG9zZXIgZm9yIHdyYXBwZXIgaSB0aHJldyBhbiBlcnJvcjsgY2xvc2UgdGhlIHJlbWFpbmluZ1xu
ICAgICAgICAgIC8vIHdyYXBwZXJzIGJ1dCBzaWxlbmNlIGFueSBleGNlcHRpb25zIGZyb20gdGhl
bSB0byBlbnN1cmUgdGhhdCB0aGVcbiAgICAgICAgICAvLyBmaXJzdCBlcnJvciBpcyB0aGUgb25l
IHRvIGJ1YmJsZSB1cC5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZUFs
bChpICsgMSk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgfVxuICAgICAgfVxu
ICAgIH1cbiAgICB0aGlzLndyYXBwZXJJbml0RGF0YS5sZW5ndGggPSAwO1xuICB9XG59O1xuXG5t
b2R1bGUuZXhwb3J0cyA9IFRyYW5zYWN0aW9uSW1wbDtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9c
bi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1RyYW5z
YWN0aW9uLmpzXG4vLyBtb2R1bGUgaWQgPSAyNFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipc
biAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRz
IHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhl
IEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSBy
b290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4g
KiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRo
ZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgU3ludGhl
dGljVUlFdmVudCA9IHJlcXVpcmUoJy4vU3ludGhldGljVUlFdmVudCcpO1xudmFyIFZpZXdwb3J0
TWV0cmljcyA9IHJlcXVpcmUoJy4vVmlld3BvcnRNZXRyaWNzJyk7XG5cbnZhciBnZXRFdmVudE1v
ZGlmaWVyU3RhdGUgPSByZXF1aXJlKCcuL2dldEV2ZW50TW9kaWZpZXJTdGF0ZScpO1xuXG4vKipc
biAqIEBpbnRlcmZhY2UgTW91c2VFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9E
T00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cbnZhciBNb3VzZUV2ZW50SW50ZXJmYWNlID0ge1xuICBz
Y3JlZW5YOiBudWxsLFxuICBzY3JlZW5ZOiBudWxsLFxuICBjbGllbnRYOiBudWxsLFxuICBjbGll
bnRZOiBudWxsLFxuICBjdHJsS2V5OiBudWxsLFxuICBzaGlmdEtleTogbnVsbCxcbiAgYWx0S2V5
OiBudWxsLFxuICBtZXRhS2V5OiBudWxsLFxuICBnZXRNb2RpZmllclN0YXRlOiBnZXRFdmVudE1v
ZGlmaWVyU3RhdGUsXG4gIGJ1dHRvbjogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgLy8gV2Via2l0
LCBGaXJlZm94LCBJRTkrXG4gICAgLy8gd2hpY2g6ICAxIDIgM1xuICAgIC8vIGJ1dHRvbjogMCAx
IDIgKHN0YW5kYXJkKVxuICAgIHZhciBidXR0b24gPSBldmVudC5idXR0b247XG4gICAgaWYgKCd3
aGljaCcgaW4gZXZlbnQpIHtcbiAgICAgIHJldHVybiBidXR0b247XG4gICAgfVxuICAgIC8vIElF
PDlcbiAgICAvLyB3aGljaDogIHVuZGVmaW5lZFxuICAgIC8vIGJ1dHRvbjogMCAwIDBcbiAgICAv
LyBidXR0b246IDEgNCAyIChvbm1vdXNldXApXG4gICAgcmV0dXJuIGJ1dHRvbiA9PT0gMiA/IDIg
OiBidXR0b24gPT09IDQgPyAxIDogMDtcbiAgfSxcbiAgYnV0dG9uczogbnVsbCxcbiAgcmVsYXRl
ZFRhcmdldDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgcmV0dXJuIGV2ZW50LnJlbGF0ZWRUYXJn
ZXQgfHwgKGV2ZW50LmZyb21FbGVtZW50ID09PSBldmVudC5zcmNFbGVtZW50ID8gZXZlbnQudG9F
bGVtZW50IDogZXZlbnQuZnJvbUVsZW1lbnQpO1xuICB9LFxuICAvLyBcIlByb3ByaWV0YXJ5XCIg
SW50ZXJmYWNlLlxuICBwYWdlWDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgcmV0dXJuICdwYWdl
WCcgaW4gZXZlbnQgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFggKyBWaWV3cG9ydE1ldHJp
Y3MuY3VycmVudFNjcm9sbExlZnQ7XG4gIH0sXG4gIHBhZ2VZOiBmdW5jdGlvbiAoZXZlbnQpIHtc
biAgICByZXR1cm4gJ3BhZ2VZJyBpbiBldmVudCA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50
WSArIFZpZXdwb3J0TWV0cmljcy5jdXJyZW50U2Nyb2xsVG9wO1xuICB9XG59O1xuXG4vKipcbiAq
IEBwYXJhbSB7b2JqZWN0fSBkaXNwYXRjaENvbmZpZyBDb25maWd1cmF0aW9uIHVzZWQgdG8gZGlz
cGF0Y2ggdGhpcyBldmVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXNwYXRjaE1hcmtlciBNYXJr
ZXIgaWRlbnRpZnlpbmcgdGhlIGV2ZW50IHRhcmdldC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRp
dmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEBleHRlbmRzIHtTeW50aGV0aWNVSUV2
ZW50fVxuICovXG5mdW5jdGlvbiBTeW50aGV0aWNNb3VzZUV2ZW50KGRpc3BhdGNoQ29uZmlnLCBk
aXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHJldHVy
biBTeW50aGV0aWNVSUV2ZW50LmNhbGwodGhpcywgZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFy
a2VyLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xufVxuXG5TeW50aGV0aWNVSUV2
ZW50LmF1Z21lbnRDbGFzcyhTeW50aGV0aWNNb3VzZUV2ZW50LCBNb3VzZUV2ZW50SW50ZXJmYWNl
KTtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW50aGV0aWNNb3VzZUV2ZW50O1xuXG5cbi8vLy8vLy8v
Ly8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0LWRv
bS9saWIvU3ludGhldGljTW91c2VFdmVudC5qc1xuLy8gbW9kdWxlIGlkID0gMjVcbi8vIG1vZHVs
ZSBjaHVua3MgPSAwIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywg
SW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlz
IGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJ
Q0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4g
YWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhl
IFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3Ry
aWN0JztcblxudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZSgnZmJqcy9saWIvRXhl
Y3V0aW9uRW52aXJvbm1lbnQnKTtcbnZhciBET01OYW1lc3BhY2VzID0gcmVxdWlyZSgnLi9ET01O
YW1lc3BhY2VzJyk7XG5cbnZhciBXSElURVNQQUNFX1RFU1QgPSAvXlsgXFxyXFxuXFx0XFxmXS87
XG52YXIgTk9OVklTSUJMRV9URVNUID0gLzwoIS0tfGxpbmt8bm9zY3JpcHR8bWV0YXxzY3JpcHR8
c3R5bGUpWyBcXHJcXG5cXHRcXGZcXC8+XS87XG5cbnZhciBjcmVhdGVNaWNyb3NvZnRVbnNhZmVM
b2NhbEZ1bmN0aW9uID0gcmVxdWlyZSgnLi9jcmVhdGVNaWNyb3NvZnRVbnNhZmVMb2NhbEZ1bmN0
aW9uJyk7XG5cbi8vIFNWRyB0ZW1wIGNvbnRhaW5lciBmb3IgSUUgbGFja2luZyBpbm5lckhUTUxc
bnZhciByZXVzYWJsZVNWR0NvbnRhaW5lcjtcblxuLyoqXG4gKiBTZXQgdGhlIGlubmVySFRNTCBw
cm9wZXJ0eSBvZiBhIG5vZGUsIGVuc3VyaW5nIHRoYXQgd2hpdGVzcGFjZSBpcyBwcmVzZXJ2ZWRc
biAqIGV2ZW4gaW4gSUU4LlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICogQHBh
cmFtIHtzdHJpbmd9IGh0bWxcbiAqIEBpbnRlcm5hbFxuICovXG52YXIgc2V0SW5uZXJIVE1MID0g
Y3JlYXRlTWljcm9zb2Z0VW5zYWZlTG9jYWxGdW5jdGlvbihmdW5jdGlvbiAobm9kZSwgaHRtbCkg
e1xuICAvLyBJRSBkb2VzIG5vdCBoYXZlIGlubmVySFRNTCBmb3IgU1ZHIG5vZGVzLCBzbyBpbnN0
ZWFkIHdlIGluamVjdCB0aGVcbiAgLy8gbmV3IG1hcmt1cCBpbiBhIHRlbXAgbm9kZSBhbmQgdGhl
biBtb3ZlIHRoZSBjaGlsZCBub2RlcyBhY3Jvc3MgaW50b1xuICAvLyB0aGUgdGFyZ2V0IG5vZGVc
biAgaWYgKG5vZGUubmFtZXNwYWNlVVJJID09PSBET01OYW1lc3BhY2VzLnN2ZyAmJiAhKCdpbm5l
ckhUTUwnIGluIG5vZGUpKSB7XG4gICAgcmV1c2FibGVTVkdDb250YWluZXIgPSByZXVzYWJsZVNW
R0NvbnRhaW5lciB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICByZXVzYWJs
ZVNWR0NvbnRhaW5lci5pbm5lckhUTUwgPSAnPHN2Zz4nICsgaHRtbCArICc8L3N2Zz4nO1xuICAg
IHZhciBzdmdOb2RlID0gcmV1c2FibGVTVkdDb250YWluZXIuZmlyc3RDaGlsZDtcbiAgICB3aGls
ZSAoc3ZnTm9kZS5maXJzdENoaWxkKSB7XG4gICAgICBub2RlLmFwcGVuZENoaWxkKHN2Z05vZGUu
Zmlyc3RDaGlsZCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG5vZGUuaW5uZXJIVE1MID0gaHRt
bDtcbiAgfVxufSk7XG5cbmlmIChFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00pIHtcbiAg
Ly8gSUU4OiBXaGVuIHVwZGF0aW5nIGEganVzdCBjcmVhdGVkIG5vZGUgd2l0aCBpbm5lckhUTUwg
b25seSBsZWFkaW5nXG4gIC8vIHdoaXRlc3BhY2UgaXMgcmVtb3ZlZC4gV2hlbiB1cGRhdGluZyBh
biBleGlzdGluZyBub2RlIHdpdGggaW5uZXJIVE1MXG4gIC8vIHdoaXRlc3BhY2UgaW4gcm9vdCBU
ZXh0Tm9kZXMgaXMgYWxzbyBjb2xsYXBzZWQuXG4gIC8vIEBzZWUgcXVpcmtzbW9kZS5vcmcvYnVn
cmVwb3J0cy9hcmNoaXZlcy8yMDA0LzExL2lubmVyaHRtbF9hbmRfdC5odG1sXG5cbiAgLy8gRmVh
dHVyZSBkZXRlY3Rpb247IG9ubHkgSUU4IGlzIGtub3duIHRvIGJlaGF2ZSBpbXByb3Blcmx5IGxp
a2UgdGhpcy5cbiAgdmFyIHRlc3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2
Jyk7XG4gIHRlc3RFbGVtZW50LmlubmVySFRNTCA9ICcgJztcbiAgaWYgKHRlc3RFbGVtZW50Lmlu
bmVySFRNTCA9PT0gJycpIHtcbiAgICBzZXRJbm5lckhUTUwgPSBmdW5jdGlvbiAobm9kZSwgaHRt
bCkge1xuICAgICAgLy8gTWFnaWMgdGhlb3J5OiBJRTggc3VwcG9zZWRseSBkaWZmZXJlbnRpYXRl
cyBiZXR3ZWVuIGFkZGVkIGFuZCB1cGRhdGVkXG4gICAgICAvLyBub2RlcyB3aGVuIHByb2Nlc3Np
bmcgaW5uZXJIVE1MLCBpbm5lckhUTUwgb24gdXBkYXRlZCBub2RlcyBzdWZmZXJzXG4gICAgICAv
LyBmcm9tIHdvcnNlIHdoaXRlc3BhY2UgYmVoYXZpb3IuIFJlLWFkZGluZyBhIG5vZGUgbGlrZSB0
aGlzIHRyaWdnZXJzXG4gICAgICAvLyB0aGUgaW5pdGlhbCBhbmQgbW9yZSBmYXZvcmFibGUgd2hp
dGVzcGFjZSBiZWhhdmlvci5cbiAgICAgIC8vIFRPRE86IFdoYXQgdG8gZG8gb24gYSBkZXRhY2hl
ZCBub2RlP1xuICAgICAgaWYgKG5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICBub2RlLnBhcmVu
dE5vZGUucmVwbGFjZUNoaWxkKG5vZGUsIG5vZGUpO1xuICAgICAgfVxuXG4gICAgICAvLyBXZSBh
bHNvIGltcGxlbWVudCBhIHdvcmthcm91bmQgZm9yIG5vbi12aXNpYmxlIHRhZ3MgZGlzYXBwZWFy
aW5nIGludG9cbiAgICAgIC8vIHRoaW4gYWlyIG9uIElFOCwgdGhpcyBvbmx5IGhhcHBlbnMgaWYg
dGhlcmUgaXMgbm8gdmlzaWJsZSB0ZXh0XG4gICAgICAvLyBpbi1mcm9udCBvZiB0aGUgbm9uLXZp
c2libGUgdGFncy4gUGlnZ3liYWNrIG9uIHRoZSB3aGl0ZXNwYWNlIGZpeFxuICAgICAgLy8gYW5k
IHNpbXBseSBjaGVjayBpZiBhbnkgbm9uLXZpc2libGUgdGFncyBhcHBlYXIgaW4gdGhlIHNvdXJj
ZS5cbiAgICAgIGlmIChXSElURVNQQUNFX1RFU1QudGVzdChodG1sKSB8fCBodG1sWzBdID09PSAn
PCcgJiYgTk9OVklTSUJMRV9URVNULnRlc3QoaHRtbCkpIHtcbiAgICAgICAgLy8gUmVjb3ZlciBs
ZWFkaW5nIHdoaXRlc3BhY2UgYnkgdGVtcG9yYXJpbHkgcHJlcGVuZGluZyBhbnkgY2hhcmFjdGVy
LlxuICAgICAgICAvLyBcXHVGRUZGIGhhcyB0aGUgcG90ZW50aWFsIGFkdmFudGFnZSBvZiBiZWlu
ZyB6ZXJvLXdpZHRoL2ludmlzaWJsZS5cbiAgICAgICAgLy8gVWdsaWZ5SlMgZHJvcHMgVStGRUZG
IGNoYXJzIHdoZW4gcGFyc2luZywgc28gdXNlIFN0cmluZy5mcm9tQ2hhckNvZGVcbiAgICAgICAg
Ly8gaW4gaG9wZXMgdGhhdCB0aGlzIGlzIHByZXNlcnZlZCBldmVuIGlmIFwiXFx1RkVGRlwiIGlz
IHRyYW5zZm9ybWVkIHRvXG4gICAgICAgIC8vIHRoZSBhY3R1YWwgVW5pY29kZSBjaGFyYWN0ZXIg
KGJ5IEJhYmVsLCBmb3IgZXhhbXBsZSkuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9t
aXNob28vVWdsaWZ5SlMyL2Jsb2IvdjIuNC4yMC9saWIvcGFyc2UuanMjTDIxNlxuICAgICAgICBu
b2RlLmlubmVySFRNTCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhmZWZmKSArIGh0bWw7XG5cbiAg
ICAgICAgLy8gZGVsZXRlRGF0YSBsZWF2ZXMgYW4gZW1wdHkgYFRleHROb2RlYCB3aGljaCBvZmZz
ZXRzIHRoZSBpbmRleCBvZiBhbGxcbiAgICAgICAgLy8gY2hpbGRyZW4uIERlZmluaXRlbHkgd2Fu
dCB0byBhdm9pZCB0aGlzLlxuICAgICAgICB2YXIgdGV4dE5vZGUgPSBub2RlLmZpcnN0Q2hpbGQ7
XG4gICAgICAgIGlmICh0ZXh0Tm9kZS5kYXRhLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIG5v
ZGUucmVtb3ZlQ2hpbGQodGV4dE5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRl
eHROb2RlLmRlbGV0ZURhdGEoMCwgMSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAg
ICAgIG5vZGUuaW5uZXJIVE1MID0gaHRtbDtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIHRlc3RF
bGVtZW50ID0gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRJbm5lckhUTUw7XG5cblxu
Ly8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMv
cmVhY3QtZG9tL2xpYi9zZXRJbm5lckhUTUwuanNcbi8vIG1vZHVsZSBpZCA9IDI2XG4vLyBtb2R1
bGUgY2h1bmtzID0gMCIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTYtcHJlc2VudCwgRmFjZWJvb2ss
IEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBp
cyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBM
SUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFu
IGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRo
ZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEJhc2VkIG9uIHRo
ZSBlc2NhcGUtaHRtbCBsaWJyYXJ5LCB3aGljaCBpcyB1c2VkIHVuZGVyIHRoZSBNSVQgTGljZW5z
ZSBiZWxvdzpcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUSiBIb2xvd2F5Y2h1a1xu
ICogQ29weXJpZ2h0IChjKSAyMDE1IEFuZHJlYXMgTHViYmVcbiAqIENvcHlyaWdodCAoYykgMjAx
NSBUaWFuY2hlbmcgXCJUaW1vdGh5XCIgR3VcbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBn
cmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcbiAqIGEgY29w
eSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRo
ZVxuICogJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJp
Y3Rpb24sIGluY2x1ZGluZ1xuICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNl
LCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuICogZGlzdHJpYnV0ZSwgc3VibGljZW5z
ZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvXG4gKiBwZXJtaXQg
cGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1Ympl
Y3QgdG9cbiAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29w
eXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZVxuICogaW5j
bHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdh
cmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FS
UkFOVFkgT0YgQU5ZIEtJTkQsXG4gKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQg
Tk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0ZcbiAqIE1FUkNIQU5UQUJJTElUWSwgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC5cbiAqIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJM
RSBGT1IgQU5ZXG4gKiBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULFxuICogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcg
RlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEVcbiAqIFNPRlRXQVJFIE9SIFRI
RSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuICpcbiAqL1xuXG4ndXNl
IHN0cmljdCc7XG5cbi8vIGNvZGUgY29waWVkIGFuZCBtb2RpZmllZCBmcm9tIGVzY2FwZS1odG1s
XG4vKipcbiAqIE1vZHVsZSB2YXJpYWJsZXMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbnZhciBtYXRj
aEh0bWxSZWdFeHAgPSAvW1wiJyY8Pl0vO1xuXG4vKipcbiAqIEVzY2FwZSBzcGVjaWFsIGNoYXJh
Y3RlcnMgaW4gdGhlIGdpdmVuIHN0cmluZyBvZiBodG1sLlxuICpcbiAqIEBwYXJhbSAge3N0cmlu
Z30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gZXNjYXBlIGZvciBpbnNlcnRpbmcgaW50byBIVE1MXG4g
KiBAcmV0dXJuIHtzdHJpbmd9XG4gKiBAcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZXNjYXBlSHRt
bChzdHJpbmcpIHtcbiAgdmFyIHN0ciA9ICcnICsgc3RyaW5nO1xuICB2YXIgbWF0Y2ggPSBtYXRj
aEh0bWxSZWdFeHAuZXhlYyhzdHIpO1xuXG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4gc3Ry
O1xuICB9XG5cbiAgdmFyIGVzY2FwZTtcbiAgdmFyIGh0bWwgPSAnJztcbiAgdmFyIGluZGV4ID0g
MDtcbiAgdmFyIGxhc3RJbmRleCA9IDA7XG5cbiAgZm9yIChpbmRleCA9IG1hdGNoLmluZGV4OyBp
bmRleCA8IHN0ci5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBzd2l0Y2ggKHN0ci5jaGFyQ29kZUF0
KGluZGV4KSkge1xuICAgICAgY2FzZSAzNDpcbiAgICAgICAgLy8gXCJcbiAgICAgICAgZXNjYXBl
ID0gJyZxdW90Oyc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzODpcbiAgICAgICAgLy8g
JlxuICAgICAgICBlc2NhcGUgPSAnJmFtcDsnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Ug
Mzk6XG4gICAgICAgIC8vICdcbiAgICAgICAgZXNjYXBlID0gJyYjeDI3Oyc7IC8vIG1vZGlmaWVk
IGZyb20gZXNjYXBlLWh0bWw7IHVzZWQgdG8gYmUgJyYjMzknXG4gICAgICAgIGJyZWFrO1xuICAg
ICAgY2FzZSA2MDpcbiAgICAgICAgLy8gPFxuICAgICAgICBlc2NhcGUgPSAnJmx0Oyc7XG4gICAg
ICAgIGJyZWFrO1xuICAgICAgY2FzZSA2MjpcbiAgICAgICAgLy8gPlxuICAgICAgICBlc2NhcGUg
PSAnJmd0Oyc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29udGlu
dWU7XG4gICAgfVxuXG4gICAgaWYgKGxhc3RJbmRleCAhPT0gaW5kZXgpIHtcbiAgICAgIGh0bWwg
Kz0gc3RyLnN1YnN0cmluZyhsYXN0SW5kZXgsIGluZGV4KTtcbiAgICB9XG5cbiAgICBsYXN0SW5k
ZXggPSBpbmRleCArIDE7XG4gICAgaHRtbCArPSBlc2NhcGU7XG4gIH1cblxuICByZXR1cm4gbGFz
dEluZGV4ICE9PSBpbmRleCA/IGh0bWwgKyBzdHIuc3Vic3RyaW5nKGxhc3RJbmRleCwgaW5kZXgp
IDogaHRtbDtcbn1cbi8vIGVuZCBjb2RlIGNvcGllZCBhbmQgbW9kaWZpZWQgZnJvbSBlc2NhcGUt
aHRtbFxuXG4vKipcbiAqIEVzY2FwZXMgdGV4dCB0byBwcmV2ZW50IHNjcmlwdGluZyBhdHRhY2tz
LlxuICpcbiAqIEBwYXJhbSB7Kn0gdGV4dCBUZXh0IHZhbHVlIHRvIGVzY2FwZS5cbiAqIEByZXR1
cm4ge3N0cmluZ30gQW4gZXNjYXBlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVRleHRD
b250ZW50Rm9yQnJvd3Nlcih0ZXh0KSB7XG4gIGlmICh0eXBlb2YgdGV4dCA9PT0gJ2Jvb2xlYW4n
IHx8IHR5cGVvZiB0ZXh0ID09PSAnbnVtYmVyJykge1xuICAgIC8vIHRoaXMgc2hvcnRjaXJjdWl0
IGhlbHBzIHBlcmYgZm9yIHR5cGVzIHRoYXQgd2Uga25vdyB3aWxsIG5ldmVyIGhhdmVcbiAgICAv
LyBzcGVjaWFsIGNoYXJhY3RlcnMsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhhdCB0aGlzIGZ1bmN0aW9u
IGlzIHVzZWQgb2Z0ZW5cbiAgICAvLyBmb3IgbnVtZXJpYyBkb20gaWRzLlxuICAgIHJldHVybiAn
JyArIHRleHQ7XG4gIH1cbiAgcmV0dXJuIGVzY2FwZUh0bWwodGV4dCk7XG59XG5cbm1vZHVsZS5l
eHBvcnRzID0gZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyO1xuXG5cbi8vLy8vLy8vLy8vLy8v
Ly8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIv
ZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyLmpzXG4vLyBtb2R1bGUgaWQgPSAyN1xuLy8gbW9k
dWxlIGNodW5rcyA9IDAiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29r
LCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUg
aXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICog
TElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBB
biBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0
aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBz
dHJpY3QnO1xuXG52YXIgX2Fzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxudmFy
IEV2ZW50UGx1Z2luUmVnaXN0cnkgPSByZXF1aXJlKCcuL0V2ZW50UGx1Z2luUmVnaXN0cnknKTtc
bnZhciBSZWFjdEV2ZW50RW1pdHRlck1peGluID0gcmVxdWlyZSgnLi9SZWFjdEV2ZW50RW1pdHRl
ck1peGluJyk7XG52YXIgVmlld3BvcnRNZXRyaWNzID0gcmVxdWlyZSgnLi9WaWV3cG9ydE1ldHJp
Y3MnKTtcblxudmFyIGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lID0gcmVxdWlyZSgnLi9nZXRW
ZW5kb3JQcmVmaXhlZEV2ZW50TmFtZScpO1xudmFyIGlzRXZlbnRTdXBwb3J0ZWQgPSByZXF1aXJl
KCcuL2lzRXZlbnRTdXBwb3J0ZWQnKTtcblxuLyoqXG4gKiBTdW1tYXJ5IG9mIGBSZWFjdEJyb3dz
ZXJFdmVudEVtaXR0ZXJgIGV2ZW50IGhhbmRsaW5nOlxuICpcbiAqICAtIFRvcC1sZXZlbCBkZWxl
Z2F0aW9uIGlzIHVzZWQgdG8gdHJhcCBtb3N0IG5hdGl2ZSBicm93c2VyIGV2ZW50cy4gVGhpc1xu
ICogICAgbWF5IG9ubHkgb2NjdXIgaW4gdGhlIG1haW4gdGhyZWFkIGFuZCBpcyB0aGUgcmVzcG9u
c2liaWxpdHkgb2ZcbiAqICAgIFJlYWN0RXZlbnRMaXN0ZW5lciwgd2hpY2ggaXMgaW5qZWN0ZWQg
YW5kIGNhbiB0aGVyZWZvcmUgc3VwcG9ydCBwbHVnZ2FibGVcbiAqICAgIGV2ZW50IHNvdXJjZXMu
IFRoaXMgaXMgdGhlIG9ubHkgd29yayB0aGF0IG9jY3VycyBpbiB0aGUgbWFpbiB0aHJlYWQuXG4g
KlxuICogIC0gV2Ugbm9ybWFsaXplIGFuZCBkZS1kdXBsaWNhdGUgZXZlbnRzIHRvIGFjY291bnQg
Zm9yIGJyb3dzZXIgcXVpcmtzLiBUaGlzXG4gKiAgICBtYXkgYmUgZG9uZSBpbiB0aGUgd29ya2Vy
IHRocmVhZC5cbiAqXG4gKiAgLSBGb3J3YXJkIHRoZXNlIG5hdGl2ZSBldmVudHMgKHdpdGggdGhl
IGFzc29jaWF0ZWQgdG9wLWxldmVsIHR5cGUgdXNlZCB0b1xuICogICAgdHJhcCBpdCkgdG8gYEV2
ZW50UGx1Z2luSHViYCwgd2hpY2ggaW4gdHVybiB3aWxsIGFzayBwbHVnaW5zIGlmIHRoZXkgd2Fu
dFxuICogICAgdG8gZXh0cmFjdCBhbnkgc3ludGhldGljIGV2ZW50cy5cbiAqXG4gKiAgLSBUaGUg
YEV2ZW50UGx1Z2luSHViYCB3aWxsIHRoZW4gcHJvY2VzcyBlYWNoIGV2ZW50IGJ5IGFubm90YXRp
bmcgdGhlbSB3aXRoXG4gKiAgICBcImRpc3BhdGNoZXNcIiwgYSBzZXF1ZW5jZSBvZiBsaXN0ZW5l
cnMgYW5kIElEcyB0aGF0IGNhcmUgYWJvdXQgdGhhdCBldmVudC5cbiAqXG4gKiAgLSBUaGUgYEV2
ZW50UGx1Z2luSHViYCB0aGVuIGRpc3BhdGNoZXMgdGhlIGV2ZW50cy5cbiAqXG4gKiBPdmVydmll
dyBvZiBSZWFjdCBhbmQgdGhlIGV2ZW50IHN5c3RlbTpcbiAqXG4gKiArLS0tLS0tLS0tLS0tKyAg
ICAuXG4gKiB8ICAgIERPTSAgICAgfCAgICAuXG4gKiArLS0tLS0tLS0tLS0tKyAgICAuXG4gKiAg
ICAgICB8ICAgICAgICAgICAuXG4gKiAgICAgICB2ICAgICAgICAgICAuXG4gKiArLS0tLS0tLS0t
LS0tKyAgICAuXG4gKiB8IFJlYWN0RXZlbnQgfCAgICAuXG4gKiB8ICBMaXN0ZW5lciAgfCAgICAu
XG4gKiArLS0tLS0tLS0tLS0tKyAgICAuICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0t
LS0tLStcbiAqICAgICAgIHwgICAgICAgICAgIC4gICAgICAgICAgICAgICArLS0tLS0tLS0rfFNp
bXBsZUV2ZW50fFxuICogICAgICAgfCAgICAgICAgICAgLiAgICAgICAgICAgICAgIHwgICAgICAg
ICB8UGx1Z2luICAgICB8XG4gKiArLS0tLS18LS0tLS0tKyAgICAuICAgICAgICAgICAgICAgdiAg
ICAgICAgICstLS0tLS0tLS0tLStcbiAqIHwgICAgIHwgICAgICB8ICAgIC4gICAgKy0tLS0tLS0t
LS0tLS0tKyAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLStcbiAqIHwgICAgICstLS0t
LS0tLS0tLS4tLS0+fEV2ZW50UGx1Z2luSHVifCAgICAgICAgICAgICAgICAgICAgfCAgICBFdmVu
dCAgIHxcbiAqIHwgICAgICAgICAgICB8ICAgIC4gICAgfCAgICAgICAgICAgICAgfCAgICAgKy0t
LS0tLS0tLS0tKyAgfCBQcm9wYWdhdG9yc3xcbiAqIHwgUmVhY3RFdmVudCB8ICAgIC4gICAgfCAg
ICAgICAgICAgICAgfCAgICAgfFRhcEV2ZW50ICAgfCAgfC0tLS0tLS0tLS0tLXxcbiAqIHwgIEVt
aXR0ZXIgICB8ICAgIC4gICAgfCAgICAgICAgICAgICAgfDwtLS0rfFBsdWdpbiAgICAgfCAgfG90
aGVyIHBsdWdpbnxcbiAqIHwgICAgICAgICAgICB8ICAgIC4gICAgfCAgICAgICAgICAgICAgfCAg
ICAgKy0tLS0tLS0tLS0tKyAgfCAgdXRpbGl0aWVzIHxcbiAqIHwgICAgICstLS0tLS0tLS0tLS4t
LS0+fCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLStcbiAq
IHwgICAgIHwgICAgICB8ICAgIC4gICAgKy0tLS0tLS0tLS0tLS0tK1xuICogKy0tLS0tfC0tLS0t
LSsgICAgLiAgICAgICAgICAgICAgICBeICAgICAgICArLS0tLS0tLS0tLS0rXG4gKiAgICAgICB8
ICAgICAgICAgICAuICAgICAgICAgICAgICAgIHwgICAgICAgIHxFbnRlci9MZWF2ZXxcbiAqICAg
ICAgICsgICAgICAgICAgIC4gICAgICAgICAgICAgICAgKy0tLS0tLS0rfFBsdWdpbiAgICAgfFxu
ICogKy0tLS0tLS0tLS0tLS0rICAgLiAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0t
LS0rXG4gKiB8IGFwcGxpY2F0aW9uIHwgICAuXG4gKiB8LS0tLS0tLS0tLS0tLXwgICAuXG4gKiB8
ICAgICAgICAgICAgIHwgICAuXG4gKiB8ICAgICAgICAgICAgIHwgICAuXG4gKiArLS0tLS0tLS0t
LS0tLSsgICAuXG4gKiAgICAgICAgICAgICAgICAgICAuXG4gKiAgICBSZWFjdCBDb3JlICAgICAu
ICBHZW5lcmFsIFB1cnBvc2UgRXZlbnQgUGx1Z2luIFN5c3RlbVxuICovXG5cbnZhciBoYXNFdmVu
dFBhZ2VYWTtcbnZhciBhbHJlYWR5TGlzdGVuaW5nVG8gPSB7fTtcbnZhciBpc01vbml0b3JpbmdT
Y3JvbGxWYWx1ZSA9IGZhbHNlO1xudmFyIHJlYWN0VG9wTGlzdGVuZXJzQ291bnRlciA9IDA7XG5c
bi8vIEZvciBldmVudHMgbGlrZSAnc3VibWl0JyB3aGljaCBkb24ndCBjb25zaXN0ZW50bHkgYnVi
YmxlICh3aGljaCB3ZSB0cmFwIGF0IGFcbi8vIGxvd2VyIG5vZGUgdGhhbiBgZG9jdW1lbnRgKSwg
YmluZGluZyBhdCBgZG9jdW1lbnRgIHdvdWxkIGNhdXNlIGR1cGxpY2F0ZVxuLy8gZXZlbnRzIHNv
IHdlIGRvbid0IGluY2x1ZGUgdGhlbSBoZXJlXG52YXIgdG9wRXZlbnRNYXBwaW5nID0ge1xuICB0
b3BBYm9ydDogJ2Fib3J0JyxcbiAgdG9wQW5pbWF0aW9uRW5kOiBnZXRWZW5kb3JQcmVmaXhlZEV2
ZW50TmFtZSgnYW5pbWF0aW9uZW5kJykgfHwgJ2FuaW1hdGlvbmVuZCcsXG4gIHRvcEFuaW1hdGlv
bkl0ZXJhdGlvbjogZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoJ2FuaW1hdGlvbml0ZXJhdGlv
bicpIHx8ICdhbmltYXRpb25pdGVyYXRpb24nLFxuICB0b3BBbmltYXRpb25TdGFydDogZ2V0VmVu
ZG9yUHJlZml4ZWRFdmVudE5hbWUoJ2FuaW1hdGlvbnN0YXJ0JykgfHwgJ2FuaW1hdGlvbnN0YXJ0
JyxcbiAgdG9wQmx1cjogJ2JsdXInLFxuICB0b3BDYW5QbGF5OiAnY2FucGxheScsXG4gIHRvcENh
blBsYXlUaHJvdWdoOiAnY2FucGxheXRocm91Z2gnLFxuICB0b3BDaGFuZ2U6ICdjaGFuZ2UnLFxu
ICB0b3BDbGljazogJ2NsaWNrJyxcbiAgdG9wQ29tcG9zaXRpb25FbmQ6ICdjb21wb3NpdGlvbmVu
ZCcsXG4gIHRvcENvbXBvc2l0aW9uU3RhcnQ6ICdjb21wb3NpdGlvbnN0YXJ0JyxcbiAgdG9wQ29t
cG9zaXRpb25VcGRhdGU6ICdjb21wb3NpdGlvbnVwZGF0ZScsXG4gIHRvcENvbnRleHRNZW51OiAn
Y29udGV4dG1lbnUnLFxuICB0b3BDb3B5OiAnY29weScsXG4gIHRvcEN1dDogJ2N1dCcsXG4gIHRv
cERvdWJsZUNsaWNrOiAnZGJsY2xpY2snLFxuICB0b3BEcmFnOiAnZHJhZycsXG4gIHRvcERyYWdF
bmQ6ICdkcmFnZW5kJyxcbiAgdG9wRHJhZ0VudGVyOiAnZHJhZ2VudGVyJyxcbiAgdG9wRHJhZ0V4
aXQ6ICdkcmFnZXhpdCcsXG4gIHRvcERyYWdMZWF2ZTogJ2RyYWdsZWF2ZScsXG4gIHRvcERyYWdP
dmVyOiAnZHJhZ292ZXInLFxuICB0b3BEcmFnU3RhcnQ6ICdkcmFnc3RhcnQnLFxuICB0b3BEcm9w
OiAnZHJvcCcsXG4gIHRvcER1cmF0aW9uQ2hhbmdlOiAnZHVyYXRpb25jaGFuZ2UnLFxuICB0b3BF
bXB0aWVkOiAnZW1wdGllZCcsXG4gIHRvcEVuY3J5cHRlZDogJ2VuY3J5cHRlZCcsXG4gIHRvcEVu
ZGVkOiAnZW5kZWQnLFxuICB0b3BFcnJvcjogJ2Vycm9yJyxcbiAgdG9wRm9jdXM6ICdmb2N1cycs
XG4gIHRvcElucHV0OiAnaW5wdXQnLFxuICB0b3BLZXlEb3duOiAna2V5ZG93bicsXG4gIHRvcEtl
eVByZXNzOiAna2V5cHJlc3MnLFxuICB0b3BLZXlVcDogJ2tleXVwJyxcbiAgdG9wTG9hZGVkRGF0
YTogJ2xvYWRlZGRhdGEnLFxuICB0b3BMb2FkZWRNZXRhZGF0YTogJ2xvYWRlZG1ldGFkYXRhJyxc
biAgdG9wTG9hZFN0YXJ0OiAnbG9hZHN0YXJ0JyxcbiAgdG9wTW91c2VEb3duOiAnbW91c2Vkb3du
JyxcbiAgdG9wTW91c2VNb3ZlOiAnbW91c2Vtb3ZlJyxcbiAgdG9wTW91c2VPdXQ6ICdtb3VzZW91
dCcsXG4gIHRvcE1vdXNlT3ZlcjogJ21vdXNlb3ZlcicsXG4gIHRvcE1vdXNlVXA6ICdtb3VzZXVw
JyxcbiAgdG9wUGFzdGU6ICdwYXN0ZScsXG4gIHRvcFBhdXNlOiAncGF1c2UnLFxuICB0b3BQbGF5
OiAncGxheScsXG4gIHRvcFBsYXlpbmc6ICdwbGF5aW5nJyxcbiAgdG9wUHJvZ3Jlc3M6ICdwcm9n
cmVzcycsXG4gIHRvcFJhdGVDaGFuZ2U6ICdyYXRlY2hhbmdlJyxcbiAgdG9wU2Nyb2xsOiAnc2Ny
b2xsJyxcbiAgdG9wU2Vla2VkOiAnc2Vla2VkJyxcbiAgdG9wU2Vla2luZzogJ3NlZWtpbmcnLFxu
ICB0b3BTZWxlY3Rpb25DaGFuZ2U6ICdzZWxlY3Rpb25jaGFuZ2UnLFxuICB0b3BTdGFsbGVkOiAn
c3RhbGxlZCcsXG4gIHRvcFN1c3BlbmQ6ICdzdXNwZW5kJyxcbiAgdG9wVGV4dElucHV0OiAndGV4
dElucHV0JyxcbiAgdG9wVGltZVVwZGF0ZTogJ3RpbWV1cGRhdGUnLFxuICB0b3BUb3VjaENhbmNl
bDogJ3RvdWNoY2FuY2VsJyxcbiAgdG9wVG91Y2hFbmQ6ICd0b3VjaGVuZCcsXG4gIHRvcFRvdWNo
TW92ZTogJ3RvdWNobW92ZScsXG4gIHRvcFRvdWNoU3RhcnQ6ICd0b3VjaHN0YXJ0JyxcbiAgdG9w
VHJhbnNpdGlvbkVuZDogZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoJ3RyYW5zaXRpb25lbmQn
KSB8fCAndHJhbnNpdGlvbmVuZCcsXG4gIHRvcFZvbHVtZUNoYW5nZTogJ3ZvbHVtZWNoYW5nZScs
XG4gIHRvcFdhaXRpbmc6ICd3YWl0aW5nJyxcbiAgdG9wV2hlZWw6ICd3aGVlbCdcbn07XG5cbi8q
KlxuICogVG8gZW5zdXJlIG5vIGNvbmZsaWN0cyB3aXRoIG90aGVyIHBvdGVudGlhbCBSZWFjdCBp
bnN0YW5jZXMgb24gdGhlIHBhZ2VcbiAqL1xudmFyIHRvcExpc3RlbmVyc0lES2V5ID0gJ19yZWFj
dExpc3RlbmVyc0lEJyArIFN0cmluZyhNYXRoLnJhbmRvbSgpKS5zbGljZSgyKTtcblxuZnVuY3Rp
b24gZ2V0TGlzdGVuaW5nRm9yRG9jdW1lbnQobW91bnRBdCkge1xuICAvLyBJbiBJRTgsIGBtb3Vu
dEF0YCBpcyBhIGhvc3Qgb2JqZWN0IGFuZCBkb2Vzbid0IGhhdmUgYGhhc093blByb3BlcnR5YFxu
ICAvLyBkaXJlY3RseS5cbiAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNh
bGwobW91bnRBdCwgdG9wTGlzdGVuZXJzSURLZXkpKSB7XG4gICAgbW91bnRBdFt0b3BMaXN0ZW5l
cnNJREtleV0gPSByZWFjdFRvcExpc3RlbmVyc0NvdW50ZXIrKztcbiAgICBhbHJlYWR5TGlzdGVu
aW5nVG9bbW91bnRBdFt0b3BMaXN0ZW5lcnNJREtleV1dID0ge307XG4gIH1cbiAgcmV0dXJuIGFs
cmVhZHlMaXN0ZW5pbmdUb1ttb3VudEF0W3RvcExpc3RlbmVyc0lES2V5XV07XG59XG5cbi8qKlxu
ICogYFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlcmAgaXMgdXNlZCB0byBhdHRhY2ggdG9wLWxldmVs
IGV2ZW50IGxpc3RlbmVycy4gRm9yXG4gKiBleGFtcGxlOlxuICpcbiAqICAgRXZlbnRQbHVnaW5I
dWIucHV0TGlzdGVuZXIoJ215SUQnLCAnb25DbGljaycsIG15RnVuY3Rpb24pO1xuICpcbiAqIFRo
aXMgd291bGQgYWxsb2NhdGUgYSBcInJlZ2lzdHJhdGlvblwiIG9mIGAoJ29uQ2xpY2snLCBteUZ1
bmN0aW9uKWAgb24gJ215SUQnLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG52YXIgUmVhY3RCcm93
c2VyRXZlbnRFbWl0dGVyID0gX2Fzc2lnbih7fSwgUmVhY3RFdmVudEVtaXR0ZXJNaXhpbiwge1xu
ICAvKipcbiAgICogSW5qZWN0YWJsZSBldmVudCBiYWNrZW5kXG4gICAqL1xuICBSZWFjdEV2ZW50
TGlzdGVuZXI6IG51bGwsXG5cbiAgaW5qZWN0aW9uOiB7XG4gICAgLyoqXG4gICAgICogQHBhcmFt
IHtvYmplY3R9IFJlYWN0RXZlbnRMaXN0ZW5lclxuICAgICAqL1xuICAgIGluamVjdFJlYWN0RXZl
bnRMaXN0ZW5lcjogZnVuY3Rpb24gKFJlYWN0RXZlbnRMaXN0ZW5lcikge1xuICAgICAgUmVhY3RF
dmVudExpc3RlbmVyLnNldEhhbmRsZVRvcExldmVsKFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5o
YW5kbGVUb3BMZXZlbCk7XG4gICAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVu
dExpc3RlbmVyID0gUmVhY3RFdmVudExpc3RlbmVyO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAg
ICogU2V0cyB3aGV0aGVyIG9yIG5vdCBhbnkgY3JlYXRlZCBjYWxsYmFja3Mgc2hvdWxkIGJlIGVu
YWJsZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZW5hYmxlZCBUcnVlIGlmIGNhbGxi
YWNrcyBzaG91bGQgYmUgZW5hYmxlZC5cbiAgICovXG4gIHNldEVuYWJsZWQ6IGZ1bmN0aW9uIChl
bmFibGVkKSB7XG4gICAgaWYgKFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlz
dGVuZXIpIHtcbiAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVu
ZXIuc2V0RW5hYmxlZChlbmFibGVkKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIEByZXR1
cm4ge2Jvb2xlYW59IFRydWUgaWYgY2FsbGJhY2tzIGFyZSBlbmFibGVkLlxuICAgKi9cbiAgaXNF
bmFibGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICEhKFJlYWN0QnJvd3NlckV2ZW50RW1p
dHRlci5SZWFjdEV2ZW50TGlzdGVuZXIgJiYgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0
RXZlbnRMaXN0ZW5lci5pc0VuYWJsZWQoKSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFdlIGxpc3Rl
biBmb3IgYnViYmxlZCB0b3VjaCBldmVudHMgb24gdGhlIGRvY3VtZW50IG9iamVjdC5cbiAgICpc
biAgICogRmlyZWZveCB2OC4wMSAoYW5kIHBvc3NpYmx5IG90aGVycykgZXhoaWJpdGVkIHN0cmFu
Z2UgYmVoYXZpb3Igd2hlblxuICAgKiBtb3VudGluZyBgb25tb3VzZW1vdmVgIGV2ZW50cyBhdCBz
b21lIG5vZGUgdGhhdCB3YXMgbm90IHRoZSBkb2N1bWVudFxuICAgKiBlbGVtZW50LiBUaGUgc3lt
cHRvbXMgd2VyZSB0aGF0IGlmIHlvdXIgbW91c2UgaXMgbm90IG1vdmluZyBvdmVyIHNvbWV0aGlu
Z1xuICAgKiBjb250YWluZWQgd2l0aGluIHRoYXQgbW91bnQgcG9pbnQgKGZvciBleGFtcGxlIG9u
IHRoZSBiYWNrZ3JvdW5kKSB0aGVcbiAgICogdG9wLWxldmVsIGxpc3RlbmVycyBmb3IgYG9ubW91
c2Vtb3ZlYCB3b24ndCBiZSBjYWxsZWQuIEhvd2V2ZXIsIGlmIHlvdVxuICAgKiByZWdpc3RlciB0
aGUgYG1vdXNlbW92ZWAgb24gdGhlIGRvY3VtZW50IG9iamVjdCwgdGhlbiBpdCB3aWxsIG9mIGNv
dXJzZVxuICAgKiBjYXRjaCBhbGwgYG1vdXNlbW92ZWBzLiBUaGlzIGFsb25nIHdpdGggaU9TIHF1
aXJrcywganVzdGlmaWVzIHJlc3RyaWN0aW5nXG4gICAqIHRvcC1sZXZlbCBsaXN0ZW5lcnMgdG8g
dGhlIGRvY3VtZW50IG9iamVjdCBvbmx5LCBhdCBsZWFzdCBmb3IgdGhlc2VcbiAgICogbW92ZW1l
bnQgdHlwZXMgb2YgZXZlbnRzIGFuZCBwb3NzaWJseSBhbGwgZXZlbnRzLlxuICAgKlxuICAgKiBA
c2VlIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvYmxvZy9hcmNoaXZlcy8yMDEwLzA5L2NsaWNr
X2V2ZW50X2RlbC5odG1sXG4gICAqXG4gICAqIEFsc28sIGBrZXl1cGAvYGtleXByZXNzYC9ga2V5
ZG93bmAgZG8gbm90IGJ1YmJsZSB0byB0aGUgd2luZG93IG9uIElFLCBidXRcbiAgICogdGhleSBi
dWJibGUgdG8gZG9jdW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWdpc3RyYXRp
b25OYW1lIE5hbWUgb2YgbGlzdGVuZXIgKGUuZy4gYG9uQ2xpY2tgKS5cbiAgICogQHBhcmFtIHtv
YmplY3R9IGNvbnRlbnREb2N1bWVudEhhbmRsZSBEb2N1bWVudCB3aGljaCBvd25zIHRoZSBjb250
YWluZXJcbiAgICovXG4gIGxpc3RlblRvOiBmdW5jdGlvbiAocmVnaXN0cmF0aW9uTmFtZSwgY29u
dGVudERvY3VtZW50SGFuZGxlKSB7XG4gICAgdmFyIG1vdW50QXQgPSBjb250ZW50RG9jdW1lbnRI
YW5kbGU7XG4gICAgdmFyIGlzTGlzdGVuaW5nID0gZ2V0TGlzdGVuaW5nRm9yRG9jdW1lbnQobW91
bnRBdCk7XG4gICAgdmFyIGRlcGVuZGVuY2llcyA9IEV2ZW50UGx1Z2luUmVnaXN0cnkucmVnaXN0
cmF0aW9uTmFtZURlcGVuZGVuY2llc1tyZWdpc3RyYXRpb25OYW1lXTtcblxuICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgZGVwZW5kZW5jaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZGVwZW5k
ZW5jeSA9IGRlcGVuZGVuY2llc1tpXTtcbiAgICAgIGlmICghKGlzTGlzdGVuaW5nLmhhc093blBy
b3BlcnR5KGRlcGVuZGVuY3kpICYmIGlzTGlzdGVuaW5nW2RlcGVuZGVuY3ldKSkge1xuICAgICAg
ICBpZiAoZGVwZW5kZW5jeSA9PT0gJ3RvcFdoZWVsJykge1xuICAgICAgICAgIGlmIChpc0V2ZW50
U3VwcG9ydGVkKCd3aGVlbCcpKSB7XG4gICAgICAgICAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0
ZXIuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBCdWJibGVkRXZlbnQoJ3RvcFdoZWVsJywgJ3doZWVs
JywgbW91bnRBdCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpc0V2ZW50U3VwcG9ydGVkKCdtb3Vz
ZXdoZWVsJykpIHtcbiAgICAgICAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2
ZW50TGlzdGVuZXIudHJhcEJ1YmJsZWRFdmVudCgndG9wV2hlZWwnLCAnbW91c2V3aGVlbCcsIG1v
dW50QXQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBGaXJlZm94IG5lZWRz
IHRvIGNhcHR1cmUgYSBkaWZmZXJlbnQgbW91c2Ugc2Nyb2xsIGV2ZW50LlxuICAgICAgICAgICAg
Ly8gQHNlZSBodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2RvbS9ldmVudHMvdGVzdHMvc2Nyb2xs
Lmh0bWxcbiAgICAgICAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlz
dGVuZXIudHJhcEJ1YmJsZWRFdmVudCgndG9wV2hlZWwnLCAnRE9NTW91c2VTY3JvbGwnLCBtb3Vu
dEF0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZGVwZW5kZW5jeSA9PT0gJ3Rv
cFNjcm9sbCcpIHtcbiAgICAgICAgICBpZiAoaXNFdmVudFN1cHBvcnRlZCgnc2Nyb2xsJywgdHJ1
ZSkpIHtcbiAgICAgICAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlz
dGVuZXIudHJhcENhcHR1cmVkRXZlbnQoJ3RvcFNjcm9sbCcsICdzY3JvbGwnLCBtb3VudEF0KTtc
biAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVy
LlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQnViYmxlZEV2ZW50KCd0b3BTY3JvbGwnLCAnc2Nyb2xs
JywgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0ZW5lci5XSU5ET1dfSEFO
RExFKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZGVwZW5kZW5jeSA9PT0gJ3Rv
cEZvY3VzJyB8fCBkZXBlbmRlbmN5ID09PSAndG9wQmx1cicpIHtcbiAgICAgICAgICBpZiAoaXNF
dmVudFN1cHBvcnRlZCgnZm9jdXMnLCB0cnVlKSkge1xuICAgICAgICAgICAgUmVhY3RCcm93c2Vy
RXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQ2FwdHVyZWRFdmVudCgndG9wRm9j
dXMnLCAnZm9jdXMnLCBtb3VudEF0KTtcbiAgICAgICAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1p
dHRlci5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcENhcHR1cmVkRXZlbnQoJ3RvcEJsdXInLCAnYmx1
cicsIG1vdW50QXQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNFdmVudFN1cHBvcnRlZCgnZm9j
dXNpbicpKSB7XG4gICAgICAgICAgICAvLyBJRSBoYXMgYGZvY3VzaW5gIGFuZCBgZm9jdXNvdXRg
IGV2ZW50cyB3aGljaCBidWJibGUuXG4gICAgICAgICAgICAvLyBAc2VlIGh0dHA6Ly93d3cucXVp
cmtzbW9kZS5vcmcvYmxvZy9hcmNoaXZlcy8yMDA4LzA0L2RlbGVnYXRpbmdfdGhlLmh0bWxcbiAg
ICAgICAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIudHJh
cEJ1YmJsZWRFdmVudCgndG9wRm9jdXMnLCAnZm9jdXNpbicsIG1vdW50QXQpO1xuICAgICAgICAg
ICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQnViYmxl
ZEV2ZW50KCd0b3BCbHVyJywgJ2ZvY3Vzb3V0JywgbW91bnRBdCk7XG4gICAgICAgICAgfVxuXG4g
ICAgICAgICAgLy8gdG8gbWFrZSBzdXJlIGJsdXIgYW5kIGZvY3VzIGV2ZW50IGxpc3RlbmVycyBh
cmUgb25seSBhdHRhY2hlZCBvbmNlXG4gICAgICAgICAgaXNMaXN0ZW5pbmcudG9wQmx1ciA9IHRy
dWU7XG4gICAgICAgICAgaXNMaXN0ZW5pbmcudG9wRm9jdXMgPSB0cnVlO1xuICAgICAgICB9IGVs
c2UgaWYgKHRvcEV2ZW50TWFwcGluZy5oYXNPd25Qcm9wZXJ0eShkZXBlbmRlbmN5KSkge1xuICAg
ICAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcEJ1
YmJsZWRFdmVudChkZXBlbmRlbmN5LCB0b3BFdmVudE1hcHBpbmdbZGVwZW5kZW5jeV0sIG1vdW50
QXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaXNMaXN0ZW5pbmdbZGVwZW5kZW5jeV0gPSB0cnVl
O1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICB0cmFwQnViYmxlZEV2ZW50OiBmdW5jdGlvbiAo
dG9wTGV2ZWxUeXBlLCBoYW5kbGVyQmFzZU5hbWUsIGhhbmRsZSkge1xuICAgIHJldHVybiBSZWFj
dEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBCdWJibGVkRXZlbnQo
dG9wTGV2ZWxUeXBlLCBoYW5kbGVyQmFzZU5hbWUsIGhhbmRsZSk7XG4gIH0sXG5cbiAgdHJhcENh
cHR1cmVkRXZlbnQ6IGZ1bmN0aW9uICh0b3BMZXZlbFR5cGUsIGhhbmRsZXJCYXNlTmFtZSwgaGFu
ZGxlKSB7XG4gICAgcmV0dXJuIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlz
dGVuZXIudHJhcENhcHR1cmVkRXZlbnQodG9wTGV2ZWxUeXBlLCBoYW5kbGVyQmFzZU5hbWUsIGhh
bmRsZSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFByb3RlY3QgYWdhaW5zdCBkb2N1bWVudC5jcmVh
dGVFdmVudCgpIHJldHVybmluZyBudWxsXG4gICAqIFNvbWUgcG9wdXAgYmxvY2tlciBleHRlbnNp
b25zIGFwcGVhciB0byBkbyB0aGlzOlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2sv
cmVhY3QvaXNzdWVzLzY4ODdcbiAgICovXG4gIHN1cHBvcnRzRXZlbnRQYWdlWFk6IGZ1bmN0aW9u
ICgpIHtcbiAgICBpZiAoIWRvY3VtZW50LmNyZWF0ZUV2ZW50KSB7XG4gICAgICByZXR1cm4gZmFs
c2U7XG4gICAgfVxuICAgIHZhciBldiA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdNb3VzZUV2ZW50
Jyk7XG4gICAgcmV0dXJuIGV2ICE9IG51bGwgJiYgJ3BhZ2VYJyBpbiBldjtcbiAgfSxcblxuICAv
KipcbiAgICogTGlzdGVucyB0byB3aW5kb3cgc2Nyb2xsIGFuZCByZXNpemUgZXZlbnRzLiBXZSBj
YWNoZSBzY3JvbGwgdmFsdWVzIHNvIHRoYXRcbiAgICogYXBwbGljYXRpb24gY29kZSBjYW4gYWNj
ZXNzIHRoZW0gd2l0aG91dCB0cmlnZ2VyaW5nIHJlZmxvd3MuXG4gICAqXG4gICAqIFZpZXdwb3J0
TWV0cmljcyBpcyBvbmx5IHVzZWQgYnkgU3ludGhldGljTW91c2UvVG91Y2hFdmVudCBhbmQgb25s
eSB3aGVuXG4gICAqIHBhZ2VYL3BhZ2VZIGlzbid0IHN1cHBvcnRlZCAobGVnYWN5IGJyb3dzZXJz
KS5cbiAgICpcbiAgICogTk9URTogU2Nyb2xsIGV2ZW50cyBkbyBub3QgYnViYmxlLlxuICAgKlxu
ICAgKiBAc2VlIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvZG9tL2V2ZW50cy9zY3JvbGwuaHRt
bFxuICAgKi9cbiAgZW5zdXJlU2Nyb2xsVmFsdWVNb25pdG9yaW5nOiBmdW5jdGlvbiAoKSB7XG4g
ICAgaWYgKGhhc0V2ZW50UGFnZVhZID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0V2ZW50UGFn
ZVhZID0gUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLnN1cHBvcnRzRXZlbnRQYWdlWFkoKTtcbiAg
ICB9XG4gICAgaWYgKCFoYXNFdmVudFBhZ2VYWSAmJiAhaXNNb25pdG9yaW5nU2Nyb2xsVmFsdWUp
IHtcbiAgICAgIHZhciByZWZyZXNoID0gVmlld3BvcnRNZXRyaWNzLnJlZnJlc2hTY3JvbGxWYWx1
ZXM7XG4gICAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLm1v
bml0b3JTY3JvbGxWYWx1ZShyZWZyZXNoKTtcbiAgICAgIGlzTW9uaXRvcmluZ1Njcm9sbFZhbHVl
ID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0QnJvd3Nl
ckV2ZW50RW1pdHRlcjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVS
XG4vLyAuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0QnJvd3NlckV2ZW50RW1pdHRl
ci5qc1xuLy8gbW9kdWxlIGlkID0gMjhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGc7XHJc
blxyXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxyXG5nID0gKGZ1bmN0aW9uKCkg
e1xyXG5cdHJldHVybiB0aGlzO1xyXG59KSgpO1xyXG5cclxudHJ5IHtcclxuXHQvLyBUaGlzIHdv
cmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcclxuXHRnID0gZyB8fCBGdW5jdGlvbihc
InJldHVybiB0aGlzXCIpKCkgfHwgKDEsZXZhbCkoXCJ0aGlzXCIpO1xyXG59IGNhdGNoKGUpIHtc
clxuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxy
XG5cdGlmKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpXHJcblx0XHRnID0gd2luZG93O1xy
XG59XHJcblxyXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRv
IGFib3V0IGl0Li4uXHJcbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGlu
ZyBoZXJlLCBzbyBpdCdzXHJcbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xv
YmFsKSB7IC4uLn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZztcclxuXG5cblxuLy8vLy8vLy8v
Ly8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFs
LmpzXG4vLyBtb2R1bGUgaWQgPSAzMFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipcbiAqIENv
cHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1z
dHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRp
cmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBw
YXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1l
IGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfcHJvZElu
dmFyaWFudCA9IHJlcXVpcmUoJy4vcmVhY3RQcm9kSW52YXJpYW50Jyk7XG5cbnZhciBpbnZhcmlh
bnQgPSByZXF1aXJlKCdmYmpzL2xpYi9pbnZhcmlhbnQnKTtcblxuLyoqXG4gKiBJbmplY3RhYmxl
IG9yZGVyaW5nIG9mIGV2ZW50IHBsdWdpbnMuXG4gKi9cbnZhciBldmVudFBsdWdpbk9yZGVyID0g
bnVsbDtcblxuLyoqXG4gKiBJbmplY3RhYmxlIG1hcHBpbmcgZnJvbSBuYW1lcyB0byBldmVudCBw
bHVnaW4gbW9kdWxlcy5cbiAqL1xudmFyIG5hbWVzVG9QbHVnaW5zID0ge307XG5cbi8qKlxuICog
UmVjb21wdXRlcyB0aGUgcGx1Z2luIGxpc3QgdXNpbmcgdGhlIGluamVjdGVkIHBsdWdpbnMgYW5k
IHBsdWdpbiBvcmRlcmluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiByZWNvbXB1
dGVQbHVnaW5PcmRlcmluZygpIHtcbiAgaWYgKCFldmVudFBsdWdpbk9yZGVyKSB7XG4gICAgLy8g
V2FpdCB1bnRpbCBhbiBgZXZlbnRQbHVnaW5PcmRlcmAgaXMgaW5qZWN0ZWQuXG4gICAgcmV0dXJu
O1xuICB9XG4gIGZvciAodmFyIHBsdWdpbk5hbWUgaW4gbmFtZXNUb1BsdWdpbnMpIHtcbiAgICB2
YXIgcGx1Z2luTW9kdWxlID0gbmFtZXNUb1BsdWdpbnNbcGx1Z2luTmFtZV07XG4gICAgdmFyIHBs
dWdpbkluZGV4ID0gZXZlbnRQbHVnaW5PcmRlci5pbmRleE9mKHBsdWdpbk5hbWUpO1xuICAgICEo
cGx1Z2luSW5kZXggPiAtMSkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24n
ID8gaW52YXJpYW50KGZhbHNlLCAnRXZlbnRQbHVnaW5SZWdpc3RyeTogQ2Fubm90IGluamVjdCBl
dmVudCBwbHVnaW5zIHRoYXQgZG8gbm90IGV4aXN0IGluIHRoZSBwbHVnaW4gb3JkZXJpbmcsIGAl
c2AuJywgcGx1Z2luTmFtZSkgOiBfcHJvZEludmFyaWFudCgnOTYnLCBwbHVnaW5OYW1lKSA6IHZv
aWQgMDtcbiAgICBpZiAoRXZlbnRQbHVnaW5SZWdpc3RyeS5wbHVnaW5zW3BsdWdpbkluZGV4XSkg
e1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgICFwbHVnaW5Nb2R1bGUuZXh0cmFjdEV2ZW50
cyA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFs
c2UsICdFdmVudFBsdWdpblJlZ2lzdHJ5OiBFdmVudCBwbHVnaW5zIG11c3QgaW1wbGVtZW50IGFu
IGBleHRyYWN0RXZlbnRzYCBtZXRob2QsIGJ1dCBgJXNgIGRvZXMgbm90LicsIHBsdWdpbk5hbWUp
IDogX3Byb2RJbnZhcmlhbnQoJzk3JywgcGx1Z2luTmFtZSkgOiB2b2lkIDA7XG4gICAgRXZlbnRQ
bHVnaW5SZWdpc3RyeS5wbHVnaW5zW3BsdWdpbkluZGV4XSA9IHBsdWdpbk1vZHVsZTtcbiAgICB2
YXIgcHVibGlzaGVkRXZlbnRzID0gcGx1Z2luTW9kdWxlLmV2ZW50VHlwZXM7XG4gICAgZm9yICh2
YXIgZXZlbnROYW1lIGluIHB1Ymxpc2hlZEV2ZW50cykge1xuICAgICAgIXB1Ymxpc2hFdmVudEZv
clBsdWdpbihwdWJsaXNoZWRFdmVudHNbZXZlbnROYW1lXSwgcGx1Z2luTW9kdWxlLCBldmVudE5h
bWUpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChm
YWxzZSwgJ0V2ZW50UGx1Z2luUmVnaXN0cnk6IEZhaWxlZCB0byBwdWJsaXNoIGV2ZW50IGAlc2Ag
Zm9yIHBsdWdpbiBgJXNgLicsIGV2ZW50TmFtZSwgcGx1Z2luTmFtZSkgOiBfcHJvZEludmFyaWFu
dCgnOTgnLCBldmVudE5hbWUsIHBsdWdpbk5hbWUpIDogdm9pZCAwO1xuICAgIH1cbiAgfVxufVxu
XG4vKipcbiAqIFB1Ymxpc2hlcyBhbiBldmVudCBzbyB0aGF0IGl0IGNhbiBiZSBkaXNwYXRjaGVk
IGJ5IHRoZSBzdXBwbGllZCBwbHVnaW4uXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGRpc3BhdGNo
Q29uZmlnIERpc3BhdGNoIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBldmVudC5cbiAqIEBwYXJhbSB7
b2JqZWN0fSBQbHVnaW5Nb2R1bGUgUGx1Z2luIHB1Ymxpc2hpbmcgdGhlIGV2ZW50LlxuICogQHJl
dHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgZXZlbnQgd2FzIHN1Y2Nlc3NmdWxseSBwdWJsaXNo
ZWQuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBwdWJsaXNoRXZlbnRGb3JQbHVnaW4oZGlz
cGF0Y2hDb25maWcsIHBsdWdpbk1vZHVsZSwgZXZlbnROYW1lKSB7XG4gICEhRXZlbnRQbHVnaW5S
ZWdpc3RyeS5ldmVudE5hbWVEaXNwYXRjaENvbmZpZ3MuaGFzT3duUHJvcGVydHkoZXZlbnROYW1l
KSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFs
c2UsICdFdmVudFBsdWdpbkh1YjogTW9yZSB0aGFuIG9uZSBwbHVnaW4gYXR0ZW1wdGVkIHRvIHB1
Ymxpc2ggdGhlIHNhbWUgZXZlbnQgbmFtZSwgYCVzYC4nLCBldmVudE5hbWUpIDogX3Byb2RJbnZh
cmlhbnQoJzk5JywgZXZlbnROYW1lKSA6IHZvaWQgMDtcbiAgRXZlbnRQbHVnaW5SZWdpc3RyeS5l
dmVudE5hbWVEaXNwYXRjaENvbmZpZ3NbZXZlbnROYW1lXSA9IGRpc3BhdGNoQ29uZmlnO1xuXG4g
IHZhciBwaGFzZWRSZWdpc3RyYXRpb25OYW1lcyA9IGRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lz
dHJhdGlvbk5hbWVzO1xuICBpZiAocGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMpIHtcbiAgICBmb3Ig
KHZhciBwaGFzZU5hbWUgaW4gcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMpIHtcbiAgICAgIGlmIChw
aGFzZWRSZWdpc3RyYXRpb25OYW1lcy5oYXNPd25Qcm9wZXJ0eShwaGFzZU5hbWUpKSB7XG4gICAg
ICAgIHZhciBwaGFzZWRSZWdpc3RyYXRpb25OYW1lID0gcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXNb
cGhhc2VOYW1lXTtcbiAgICAgICAgcHVibGlzaFJlZ2lzdHJhdGlvbk5hbWUocGhhc2VkUmVnaXN0
cmF0aW9uTmFtZSwgcGx1Z2luTW9kdWxlLCBldmVudE5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAg
ICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmIChkaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25O
YW1lKSB7XG4gICAgcHVibGlzaFJlZ2lzdHJhdGlvbk5hbWUoZGlzcGF0Y2hDb25maWcucmVnaXN0
cmF0aW9uTmFtZSwgcGx1Z2luTW9kdWxlLCBldmVudE5hbWUpO1xuICAgIHJldHVybiB0cnVlO1xu
ICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBQdWJsaXNoZXMgYSByZWdpc3RyYXRp
b24gbmFtZSB0aGF0IGlzIHVzZWQgdG8gaWRlbnRpZnkgZGlzcGF0Y2hlZCBldmVudHMgYW5kXG4g
KiBjYW4gYmUgdXNlZCB3aXRoIGBFdmVudFBsdWdpbkh1Yi5wdXRMaXN0ZW5lcmAgdG8gcmVnaXN0
ZXIgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWdpc3RyYXRpb25OYW1lIFJl
Z2lzdHJhdGlvbiBuYW1lIHRvIGFkZC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBQbHVnaW5Nb2R1bGUg
UGx1Z2luIHB1Ymxpc2hpbmcgdGhlIGV2ZW50LlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24g
cHVibGlzaFJlZ2lzdHJhdGlvbk5hbWUocmVnaXN0cmF0aW9uTmFtZSwgcGx1Z2luTW9kdWxlLCBl
dmVudE5hbWUpIHtcbiAgISFFdmVudFBsdWdpblJlZ2lzdHJ5LnJlZ2lzdHJhdGlvbk5hbWVNb2R1
bGVzW3JlZ2lzdHJhdGlvbk5hbWVdID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0
aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ0V2ZW50UGx1Z2luSHViOiBNb3JlIHRoYW4gb25lIHBs
dWdpbiBhdHRlbXB0ZWQgdG8gcHVibGlzaCB0aGUgc2FtZSByZWdpc3RyYXRpb24gbmFtZSwgYCVz
YC4nLCByZWdpc3RyYXRpb25OYW1lKSA6IF9wcm9kSW52YXJpYW50KCcxMDAnLCByZWdpc3RyYXRp
b25OYW1lKSA6IHZvaWQgMDtcbiAgRXZlbnRQbHVnaW5SZWdpc3RyeS5yZWdpc3RyYXRpb25OYW1l
TW9kdWxlc1tyZWdpc3RyYXRpb25OYW1lXSA9IHBsdWdpbk1vZHVsZTtcbiAgRXZlbnRQbHVnaW5S
ZWdpc3RyeS5yZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzW3JlZ2lzdHJhdGlvbk5hbWVdID0g
cGx1Z2luTW9kdWxlLmV2ZW50VHlwZXNbZXZlbnROYW1lXS5kZXBlbmRlbmNpZXM7XG5cbiAgaWYg
KHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB2YXIgbG93ZXJD
YXNlZE5hbWUgPSByZWdpc3RyYXRpb25OYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgRXZlbnRQbHVn
aW5SZWdpc3RyeS5wb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzW2xvd2VyQ2FzZWROYW1lXSA9IHJl
Z2lzdHJhdGlvbk5hbWU7XG5cbiAgICBpZiAocmVnaXN0cmF0aW9uTmFtZSA9PT0gJ29uRG91Ymxl
Q2xpY2snKSB7XG4gICAgICBFdmVudFBsdWdpblJlZ2lzdHJ5LnBvc3NpYmxlUmVnaXN0cmF0aW9u
TmFtZXMub25kYmxjbGljayA9IHJlZ2lzdHJhdGlvbk5hbWU7XG4gICAgfVxuICB9XG59XG5cbi8q
KlxuICogUmVnaXN0ZXJzIHBsdWdpbnMgc28gdGhhdCB0aGV5IGNhbiBleHRyYWN0IGFuZCBkaXNw
YXRjaCBldmVudHMuXG4gKlxuICogQHNlZSB7RXZlbnRQbHVnaW5IdWJ9XG4gKi9cbnZhciBFdmVu
dFBsdWdpblJlZ2lzdHJ5ID0ge1xuICAvKipcbiAgICogT3JkZXJlZCBsaXN0IG9mIGluamVjdGVk
IHBsdWdpbnMuXG4gICAqL1xuICBwbHVnaW5zOiBbXSxcblxuICAvKipcbiAgICogTWFwcGluZyBm
cm9tIGV2ZW50IG5hbWUgdG8gZGlzcGF0Y2ggY29uZmlnXG4gICAqL1xuICBldmVudE5hbWVEaXNw
YXRjaENvbmZpZ3M6IHt9LFxuXG4gIC8qKlxuICAgKiBNYXBwaW5nIGZyb20gcmVnaXN0cmF0aW9u
IG5hbWUgdG8gcGx1Z2luIG1vZHVsZVxuICAgKi9cbiAgcmVnaXN0cmF0aW9uTmFtZU1vZHVsZXM6
IHt9LFxuXG4gIC8qKlxuICAgKiBNYXBwaW5nIGZyb20gcmVnaXN0cmF0aW9uIG5hbWUgdG8gZXZl
bnQgbmFtZVxuICAgKi9cbiAgcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llczoge30sXG5cbiAg
LyoqXG4gICAqIE1hcHBpbmcgZnJvbSBsb3dlcmNhc2UgcmVnaXN0cmF0aW9uIG5hbWVzIHRvIHRo
ZSBwcm9wZXJseSBjYXNlZCB2ZXJzaW9uLFxuICAgKiB1c2VkIHRvIHdhcm4gaW4gdGhlIGNhc2Ug
b2YgbWlzc2luZyBldmVudCBoYW5kbGVycy4gQXZhaWxhYmxlXG4gICAqIG9ubHkgaW4gX19ERVZf
Xy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFt
ZXM6IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB7fSA6IG51bGwsXG4g
IC8vIFRydXN0IHRoZSBkZXZlbG9wZXIgdG8gb25seSB1c2UgcG9zc2libGVSZWdpc3RyYXRpb25O
YW1lcyBpbiBfX0RFVl9fXG5cbiAgLyoqXG4gICAqIEluamVjdHMgYW4gb3JkZXJpbmcgb2YgcGx1
Z2lucyAoYnkgcGx1Z2luIG5hbWUpLiBUaGlzIGFsbG93cyB0aGUgb3JkZXJpbmdcbiAgICogdG8g
YmUgZGVjb3VwbGVkIGZyb20gaW5qZWN0aW9uIG9mIHRoZSBhY3R1YWwgcGx1Z2lucyBzbyB0aGF0
IG9yZGVyaW5nIGlzXG4gICAqIGFsd2F5cyBkZXRlcm1pbmlzdGljIHJlZ2FyZGxlc3Mgb2YgcGFj
a2FnaW5nLCBvbi10aGUtZmx5IGluamVjdGlvbiwgZXRjLlxuICAgKlxuICAgKiBAcGFyYW0ge2Fy
cmF5fSBJbmplY3RlZEV2ZW50UGx1Z2luT3JkZXJcbiAgICogQGludGVybmFsXG4gICAqIEBzZWUg
e0V2ZW50UGx1Z2luSHViLmluamVjdGlvbi5pbmplY3RFdmVudFBsdWdpbk9yZGVyfVxuICAgKi9c
biAgaW5qZWN0RXZlbnRQbHVnaW5PcmRlcjogZnVuY3Rpb24gKGluamVjdGVkRXZlbnRQbHVnaW5P
cmRlcikge1xuICAgICEhZXZlbnRQbHVnaW5PcmRlciA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9
PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdFdmVudFBsdWdpblJlZ2lzdHJ5OiBD
YW5ub3QgaW5qZWN0IGV2ZW50IHBsdWdpbiBvcmRlcmluZyBtb3JlIHRoYW4gb25jZS4gWW91IGFy
ZSBsaWtlbHkgdHJ5aW5nIHRvIGxvYWQgbW9yZSB0aGFuIG9uZSBjb3B5IG9mIFJlYWN0LicpIDog
X3Byb2RJbnZhcmlhbnQoJzEwMScpIDogdm9pZCAwO1xuICAgIC8vIENsb25lIHRoZSBvcmRlcmlu
ZyBzbyBpdCBjYW5ub3QgYmUgZHluYW1pY2FsbHkgbXV0YXRlZC5cbiAgICBldmVudFBsdWdpbk9y
ZGVyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoaW5qZWN0ZWRFdmVudFBsdWdpbk9yZGVy
KTtcbiAgICByZWNvbXB1dGVQbHVnaW5PcmRlcmluZygpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBJ
bmplY3RzIHBsdWdpbnMgdG8gYmUgdXNlZCBieSBgRXZlbnRQbHVnaW5IdWJgLiBUaGUgcGx1Z2lu
IG5hbWVzIG11c3QgYmVcbiAgICogaW4gdGhlIG9yZGVyaW5nIGluamVjdGVkIGJ5IGBpbmplY3RF
dmVudFBsdWdpbk9yZGVyYC5cbiAgICpcbiAgICogUGx1Z2lucyBjYW4gYmUgaW5qZWN0ZWQgYXMg
cGFydCBvZiBwYWdlIGluaXRpYWxpemF0aW9uIG9yIG9uLXRoZS1mbHkuXG4gICAqXG4gICAqIEBw
YXJhbSB7b2JqZWN0fSBpbmplY3RlZE5hbWVzVG9QbHVnaW5zIE1hcCBmcm9tIG5hbWVzIHRvIHBs
dWdpbiBtb2R1bGVzLlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHNlZSB7RXZlbnRQbHVnaW5IdWIu
aW5qZWN0aW9uLmluamVjdEV2ZW50UGx1Z2luc0J5TmFtZX1cbiAgICovXG4gIGluamVjdEV2ZW50
UGx1Z2luc0J5TmFtZTogZnVuY3Rpb24gKGluamVjdGVkTmFtZXNUb1BsdWdpbnMpIHtcbiAgICB2
YXIgaXNPcmRlcmluZ0RpcnR5ID0gZmFsc2U7XG4gICAgZm9yICh2YXIgcGx1Z2luTmFtZSBpbiBp
bmplY3RlZE5hbWVzVG9QbHVnaW5zKSB7XG4gICAgICBpZiAoIWluamVjdGVkTmFtZXNUb1BsdWdp
bnMuaGFzT3duUHJvcGVydHkocGx1Z2luTmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAg
ICB9XG4gICAgICB2YXIgcGx1Z2luTW9kdWxlID0gaW5qZWN0ZWROYW1lc1RvUGx1Z2luc1twbHVn
aW5OYW1lXTtcbiAgICAgIGlmICghbmFtZXNUb1BsdWdpbnMuaGFzT3duUHJvcGVydHkocGx1Z2lu
TmFtZSkgfHwgbmFtZXNUb1BsdWdpbnNbcGx1Z2luTmFtZV0gIT09IHBsdWdpbk1vZHVsZSkge1xu
ICAgICAgICAhIW5hbWVzVG9QbHVnaW5zW3BsdWdpbk5hbWVdID8gcHJvY2Vzcy5lbnYuTk9ERV9F
TlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ0V2ZW50UGx1Z2luUmVnaXN0
cnk6IENhbm5vdCBpbmplY3QgdHdvIGRpZmZlcmVudCBldmVudCBwbHVnaW5zIHVzaW5nIHRoZSBz
YW1lIG5hbWUsIGAlc2AuJywgcGx1Z2luTmFtZSkgOiBfcHJvZEludmFyaWFudCgnMTAyJywgcGx1
Z2luTmFtZSkgOiB2b2lkIDA7XG4gICAgICAgIG5hbWVzVG9QbHVnaW5zW3BsdWdpbk5hbWVdID0g
cGx1Z2luTW9kdWxlO1xuICAgICAgICBpc09yZGVyaW5nRGlydHkgPSB0cnVlO1xuICAgICAgfVxu
ICAgIH1cbiAgICBpZiAoaXNPcmRlcmluZ0RpcnR5KSB7XG4gICAgICByZWNvbXB1dGVQbHVnaW5P
cmRlcmluZygpO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogTG9va3MgdXAgdGhlIHBsdWdp
biBmb3IgdGhlIHN1cHBsaWVkIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZl
bnQgQSBzeW50aGV0aWMgZXZlbnQuXG4gICAqIEByZXR1cm4gez9vYmplY3R9IFRoZSBwbHVnaW4g
dGhhdCBjcmVhdGVkIHRoZSBzdXBwbGllZCBldmVudC5cbiAgICogQGludGVybmFsXG4gICAqL1xu
ICBnZXRQbHVnaW5Nb2R1bGVGb3JFdmVudDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdmFyIGRp
c3BhdGNoQ29uZmlnID0gZXZlbnQuZGlzcGF0Y2hDb25maWc7XG4gICAgaWYgKGRpc3BhdGNoQ29u
ZmlnLnJlZ2lzdHJhdGlvbk5hbWUpIHtcbiAgICAgIHJldHVybiBFdmVudFBsdWdpblJlZ2lzdHJ5
LnJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzW2Rpc3BhdGNoQ29uZmlnLnJlZ2lzdHJhdGlvbk5hbWVd
IHx8IG51bGw7XG4gICAgfVxuICAgIGlmIChkaXNwYXRjaENvbmZpZy5waGFzZWRSZWdpc3RyYXRp
b25OYW1lcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBwdWxsaW5nIHBoYXNlZFJlZ2lzdHJh
dGlvbk5hbWVzIG91dCBvZiBkaXNwYXRjaENvbmZpZyBoZWxwcyBGbG93IHNlZVxuICAgICAgLy8g
dGhhdCBpdCBpcyBub3QgdW5kZWZpbmVkLlxuICAgICAgdmFyIHBoYXNlZFJlZ2lzdHJhdGlvbk5h
bWVzID0gZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM7XG5cbiAgICAgIGZv
ciAodmFyIHBoYXNlIGluIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzKSB7XG4gICAgICAgIGlmICgh
cGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMuaGFzT3duUHJvcGVydHkocGhhc2UpKSB7XG4gICAgICAg
ICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHBsdWdpbk1vZHVsZSA9IEV2ZW50
UGx1Z2luUmVnaXN0cnkucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXNbcGhhc2VkUmVnaXN0cmF0aW9u
TmFtZXNbcGhhc2VdXTtcbiAgICAgICAgaWYgKHBsdWdpbk1vZHVsZSkge1xuICAgICAgICAgIHJl
dHVybiBwbHVnaW5Nb2R1bGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJu
IG51bGw7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEV4cG9zZWQgZm9yIHVuaXQgdGVzdGluZy5cbiAg
ICogQHByaXZhdGVcbiAgICovXG4gIF9yZXNldEV2ZW50UGx1Z2luczogZnVuY3Rpb24gKCkge1xu
ICAgIGV2ZW50UGx1Z2luT3JkZXIgPSBudWxsO1xuICAgIGZvciAodmFyIHBsdWdpbk5hbWUgaW4g
bmFtZXNUb1BsdWdpbnMpIHtcbiAgICAgIGlmIChuYW1lc1RvUGx1Z2lucy5oYXNPd25Qcm9wZXJ0
eShwbHVnaW5OYW1lKSkge1xuICAgICAgICBkZWxldGUgbmFtZXNUb1BsdWdpbnNbcGx1Z2luTmFt
ZV07XG4gICAgICB9XG4gICAgfVxuICAgIEV2ZW50UGx1Z2luUmVnaXN0cnkucGx1Z2lucy5sZW5n
dGggPSAwO1xuXG4gICAgdmFyIGV2ZW50TmFtZURpc3BhdGNoQ29uZmlncyA9IEV2ZW50UGx1Z2lu
UmVnaXN0cnkuZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzO1xuICAgIGZvciAodmFyIGV2ZW50TmFt
ZSBpbiBldmVudE5hbWVEaXNwYXRjaENvbmZpZ3MpIHtcbiAgICAgIGlmIChldmVudE5hbWVEaXNw
YXRjaENvbmZpZ3MuaGFzT3duUHJvcGVydHkoZXZlbnROYW1lKSkge1xuICAgICAgICBkZWxldGUg
ZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzW2V2ZW50TmFtZV07XG4gICAgICB9XG4gICAgfVxuXG4g
ICAgdmFyIHJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzID0gRXZlbnRQbHVnaW5SZWdpc3RyeS5yZWdp
c3RyYXRpb25OYW1lTW9kdWxlcztcbiAgICBmb3IgKHZhciByZWdpc3RyYXRpb25OYW1lIGluIHJl
Z2lzdHJhdGlvbk5hbWVNb2R1bGVzKSB7XG4gICAgICBpZiAocmVnaXN0cmF0aW9uTmFtZU1vZHVs
ZXMuaGFzT3duUHJvcGVydHkocmVnaXN0cmF0aW9uTmFtZSkpIHtcbiAgICAgICAgZGVsZXRlIHJl
Z2lzdHJhdGlvbk5hbWVNb2R1bGVzW3JlZ2lzdHJhdGlvbk5hbWVdO1xuICAgICAgfVxuICAgIH1c
blxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAg
ICB2YXIgcG9zc2libGVSZWdpc3RyYXRpb25OYW1lcyA9IEV2ZW50UGx1Z2luUmVnaXN0cnkucG9z
c2libGVSZWdpc3RyYXRpb25OYW1lcztcbiAgICAgIGZvciAodmFyIGxvd2VyQ2FzZWROYW1lIGlu
IHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMpIHtcbiAgICAgICAgaWYgKHBvc3NpYmxlUmVnaXN0
cmF0aW9uTmFtZXMuaGFzT3duUHJvcGVydHkobG93ZXJDYXNlZE5hbWUpKSB7XG4gICAgICAgICAg
ZGVsZXRlIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXNbbG93ZXJDYXNlZE5hbWVdO1xuICAgICAg
ICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50UGx1
Z2luUmVnaXN0cnk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxu
Ly8gLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9FdmVudFBsdWdpblJlZ2lzdHJ5LmpzXG4v
LyBtb2R1bGUgaWQgPSAzMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipcbiAqIENvcHlyaWdo
dCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxu
ICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBs
aWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9y
eSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQg
cmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVj
dG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3Byb2RJbnZhcmlhbnQgPSBy
ZXF1aXJlKCcuL3JlYWN0UHJvZEludmFyaWFudCcpO1xuXG52YXIgUmVhY3RFcnJvclV0aWxzID0g
cmVxdWlyZSgnLi9SZWFjdEVycm9yVXRpbHMnKTtcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUo
J2ZianMvbGliL2ludmFyaWFudCcpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKCdmYmpzL2xpYi93
YXJuaW5nJyk7XG5cbi8qKlxuICogSW5qZWN0ZWQgZGVwZW5kZW5jaWVzOlxuICovXG5cbi8qKlxu
ICogLSBgQ29tcG9uZW50VHJlZWA6IFtyZXF1aXJlZF0gTW9kdWxlIHRoYXQgY2FuIGNvbnZlcnQg
YmV0d2VlbiBSZWFjdCBpbnN0YW5jZXNcbiAqICAgYW5kIGFjdHVhbCBub2RlIHJlZmVyZW5jZXMu
XG4gKi9cbnZhciBDb21wb25lbnRUcmVlO1xudmFyIFRyZWVUcmF2ZXJzYWw7XG52YXIgaW5qZWN0
aW9uID0ge1xuICBpbmplY3RDb21wb25lbnRUcmVlOiBmdW5jdGlvbiAoSW5qZWN0ZWQpIHtcbiAg
ICBDb21wb25lbnRUcmVlID0gSW5qZWN0ZWQ7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5W
ICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJv
ZHVjdGlvbicgPyB3YXJuaW5nKEluamVjdGVkICYmIEluamVjdGVkLmdldE5vZGVGcm9tSW5zdGFu
Y2UgJiYgSW5qZWN0ZWQuZ2V0SW5zdGFuY2VGcm9tTm9kZSwgJ0V2ZW50UGx1Z2luVXRpbHMuaW5q
ZWN0aW9uLmluamVjdENvbXBvbmVudFRyZWUoLi4uKTogSW5qZWN0ZWQgJyArICdtb2R1bGUgaXMg
bWlzc2luZyBnZXROb2RlRnJvbUluc3RhbmNlIG9yIGdldEluc3RhbmNlRnJvbU5vZGUuJykgOiB2
b2lkIDA7XG4gICAgfVxuICB9LFxuICBpbmplY3RUcmVlVHJhdmVyc2FsOiBmdW5jdGlvbiAoSW5q
ZWN0ZWQpIHtcbiAgICBUcmVlVHJhdmVyc2FsID0gSW5qZWN0ZWQ7XG4gICAgaWYgKHByb2Nlc3Mu
ZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVf
RU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKEluamVjdGVkICYmIEluamVjdGVkLmlzQW5j
ZXN0b3IgJiYgSW5qZWN0ZWQuZ2V0TG93ZXN0Q29tbW9uQW5jZXN0b3IsICdFdmVudFBsdWdpblV0
aWxzLmluamVjdGlvbi5pbmplY3RUcmVlVHJhdmVyc2FsKC4uLik6IEluamVjdGVkICcgKyAnbW9k
dWxlIGlzIG1pc3NpbmcgaXNBbmNlc3RvciBvciBnZXRMb3dlc3RDb21tb25BbmNlc3Rvci4nKSA6
IHZvaWQgMDtcbiAgICB9XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGlzRW5kaXNoKHRvcExldmVsVHlw
ZSkge1xuICByZXR1cm4gdG9wTGV2ZWxUeXBlID09PSAndG9wTW91c2VVcCcgfHwgdG9wTGV2ZWxU
eXBlID09PSAndG9wVG91Y2hFbmQnIHx8IHRvcExldmVsVHlwZSA9PT0gJ3RvcFRvdWNoQ2FuY2Vs
Jztcbn1cblxuZnVuY3Rpb24gaXNNb3ZlaXNoKHRvcExldmVsVHlwZSkge1xuICByZXR1cm4gdG9w
TGV2ZWxUeXBlID09PSAndG9wTW91c2VNb3ZlJyB8fCB0b3BMZXZlbFR5cGUgPT09ICd0b3BUb3Vj
aE1vdmUnO1xufVxuZnVuY3Rpb24gaXNTdGFydGlzaCh0b3BMZXZlbFR5cGUpIHtcbiAgcmV0dXJu
IHRvcExldmVsVHlwZSA9PT0gJ3RvcE1vdXNlRG93bicgfHwgdG9wTGV2ZWxUeXBlID09PSAndG9w
VG91Y2hTdGFydCc7XG59XG5cbnZhciB2YWxpZGF0ZUV2ZW50RGlzcGF0Y2hlcztcbmlmIChwcm9j
ZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhbGlkYXRlRXZlbnREaXNw
YXRjaGVzID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdmFyIGRpc3BhdGNoTGlzdGVuZXJzID0g
ZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzO1xuICAgIHZhciBkaXNwYXRjaEluc3RhbmNlcyA9IGV2
ZW50Ll9kaXNwYXRjaEluc3RhbmNlcztcblxuICAgIHZhciBsaXN0ZW5lcnNJc0FyciA9IEFycmF5
LmlzQXJyYXkoZGlzcGF0Y2hMaXN0ZW5lcnMpO1xuICAgIHZhciBsaXN0ZW5lcnNMZW4gPSBsaXN0
ZW5lcnNJc0FyciA/IGRpc3BhdGNoTGlzdGVuZXJzLmxlbmd0aCA6IGRpc3BhdGNoTGlzdGVuZXJz
ID8gMSA6IDA7XG5cbiAgICB2YXIgaW5zdGFuY2VzSXNBcnIgPSBBcnJheS5pc0FycmF5KGRpc3Bh
dGNoSW5zdGFuY2VzKTtcbiAgICB2YXIgaW5zdGFuY2VzTGVuID0gaW5zdGFuY2VzSXNBcnIgPyBk
aXNwYXRjaEluc3RhbmNlcy5sZW5ndGggOiBkaXNwYXRjaEluc3RhbmNlcyA/IDEgOiAwO1xuXG4g
ICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoaW5zdGFu
Y2VzSXNBcnIgPT09IGxpc3RlbmVyc0lzQXJyICYmIGluc3RhbmNlc0xlbiA9PT0gbGlzdGVuZXJz
TGVuLCAnRXZlbnRQbHVnaW5VdGlsczogSW52YWxpZCBgZXZlbnRgLicpIDogdm9pZCAwO1xuICB9
O1xufVxuXG4vKipcbiAqIERpc3BhdGNoIHRoZSBldmVudCB0byB0aGUgbGlzdGVuZXIuXG4gKiBA
cGFyYW0ge1N5bnRoZXRpY0V2ZW50fSBldmVudCBTeW50aGV0aWNFdmVudCB0byBoYW5kbGVcbiAq
IEBwYXJhbSB7Ym9vbGVhbn0gc2ltdWxhdGVkIElmIHRoZSBldmVudCBpcyBzaW11bGF0ZWQgKGNo
YW5nZXMgZXhuIGJlaGF2aW9yKVxuICogQHBhcmFtIHtmdW5jdGlvbn0gbGlzdGVuZXIgQXBwbGlj
YXRpb24tbGV2ZWwgY2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gaW5zdCBJbnRlcm5hbCBjb21wb25l
bnQgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gZXhlY3V0ZURpc3BhdGNoKGV2ZW50LCBzaW11bGF0
ZWQsIGxpc3RlbmVyLCBpbnN0KSB7XG4gIHZhciB0eXBlID0gZXZlbnQudHlwZSB8fCAndW5rbm93
bi1ldmVudCc7XG4gIGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBFdmVudFBsdWdpblV0aWxzLmdldE5v
ZGVGcm9tSW5zdGFuY2UoaW5zdCk7XG4gIGlmIChzaW11bGF0ZWQpIHtcbiAgICBSZWFjdEVycm9y
VXRpbHMuaW52b2tlR3VhcmRlZENhbGxiYWNrV2l0aENhdGNoKHR5cGUsIGxpc3RlbmVyLCBldmVu
dCk7XG4gIH0gZWxzZSB7XG4gICAgUmVhY3RFcnJvclV0aWxzLmludm9rZUd1YXJkZWRDYWxsYmFj
ayh0eXBlLCBsaXN0ZW5lciwgZXZlbnQpO1xuICB9XG4gIGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBu
dWxsO1xufVxuXG4vKipcbiAqIFN0YW5kYXJkL3NpbXBsZSBpdGVyYXRpb24gdGhyb3VnaCBhbiBl
dmVudCdzIGNvbGxlY3RlZCBkaXNwYXRjaGVzLlxuICovXG5mdW5jdGlvbiBleGVjdXRlRGlzcGF0
Y2hlc0luT3JkZXIoZXZlbnQsIHNpbXVsYXRlZCkge1xuICB2YXIgZGlzcGF0Y2hMaXN0ZW5lcnMg
PSBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnM7XG4gIHZhciBkaXNwYXRjaEluc3RhbmNlcyA9IGV2
ZW50Ll9kaXNwYXRjaEluc3RhbmNlcztcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAn
cHJvZHVjdGlvbicpIHtcbiAgICB2YWxpZGF0ZUV2ZW50RGlzcGF0Y2hlcyhldmVudCk7XG4gIH1c
biAgaWYgKEFycmF5LmlzQXJyYXkoZGlzcGF0Y2hMaXN0ZW5lcnMpKSB7XG4gICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBkaXNwYXRjaExpc3RlbmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGV2
ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4g
ICAgICAvLyBMaXN0ZW5lcnMgYW5kIEluc3RhbmNlcyBhcmUgdHdvIHBhcmFsbGVsIGFycmF5cyB0
aGF0IGFyZSBhbHdheXMgaW4gc3luYy5cbiAgICAgIGV4ZWN1dGVEaXNwYXRjaChldmVudCwgc2lt
dWxhdGVkLCBkaXNwYXRjaExpc3RlbmVyc1tpXSwgZGlzcGF0Y2hJbnN0YW5jZXNbaV0pO1xuICAg
IH1cbiAgfSBlbHNlIGlmIChkaXNwYXRjaExpc3RlbmVycykge1xuICAgIGV4ZWN1dGVEaXNwYXRj
aChldmVudCwgc2ltdWxhdGVkLCBkaXNwYXRjaExpc3RlbmVycywgZGlzcGF0Y2hJbnN0YW5jZXMp
O1xuICB9XG4gIGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycyA9IG51bGw7XG4gIGV2ZW50Ll9kaXNw
YXRjaEluc3RhbmNlcyA9IG51bGw7XG59XG5cbi8qKlxuICogU3RhbmRhcmQvc2ltcGxlIGl0ZXJh
dGlvbiB0aHJvdWdoIGFuIGV2ZW50J3MgY29sbGVjdGVkIGRpc3BhdGNoZXMsIGJ1dCBzdG9wc1xu
ICogYXQgdGhlIGZpcnN0IGRpc3BhdGNoIGV4ZWN1dGlvbiByZXR1cm5pbmcgdHJ1ZSwgYW5kIHJl
dHVybnMgdGhhdCBpZC5cbiAqXG4gKiBAcmV0dXJuIHs/c3RyaW5nfSBpZCBvZiB0aGUgZmlyc3Qg
ZGlzcGF0Y2ggZXhlY3V0aW9uIHdobydzIGxpc3RlbmVyIHJldHVybnNcbiAqIHRydWUsIG9yIG51
bGwgaWYgbm8gbGlzdGVuZXIgcmV0dXJuZWQgdHJ1ZS5cbiAqL1xuZnVuY3Rpb24gZXhlY3V0ZURp
c3BhdGNoZXNJbk9yZGVyU3RvcEF0VHJ1ZUltcGwoZXZlbnQpIHtcbiAgdmFyIGRpc3BhdGNoTGlz
dGVuZXJzID0gZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzO1xuICB2YXIgZGlzcGF0Y2hJbnN0YW5j
ZXMgPSBldmVudC5fZGlzcGF0Y2hJbnN0YW5jZXM7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VO
ViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgdmFsaWRhdGVFdmVudERpc3BhdGNoZXMoZXZlbnQp
O1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KGRpc3BhdGNoTGlzdGVuZXJzKSkge1xuICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgZGlzcGF0Y2hMaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHtcbiAgICAg
IGlmIChldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKSB7XG4gICAgICAgIGJyZWFrO1xuICAg
ICAgfVxuICAgICAgLy8gTGlzdGVuZXJzIGFuZCBJbnN0YW5jZXMgYXJlIHR3byBwYXJhbGxlbCBh
cnJheXMgdGhhdCBhcmUgYWx3YXlzIGluIHN5bmMuXG4gICAgICBpZiAoZGlzcGF0Y2hMaXN0ZW5l
cnNbaV0oZXZlbnQsIGRpc3BhdGNoSW5zdGFuY2VzW2ldKSkge1xuICAgICAgICByZXR1cm4gZGlz
cGF0Y2hJbnN0YW5jZXNbaV07XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGRpc3BhdGNo
TGlzdGVuZXJzKSB7XG4gICAgaWYgKGRpc3BhdGNoTGlzdGVuZXJzKGV2ZW50LCBkaXNwYXRjaElu
c3RhbmNlcykpIHtcbiAgICAgIHJldHVybiBkaXNwYXRjaEluc3RhbmNlcztcbiAgICB9XG4gIH1c
biAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogQHNlZSBleGVjdXRlRGlzcGF0Y2hlc0luT3Jk
ZXJTdG9wQXRUcnVlSW1wbFxuICovXG5mdW5jdGlvbiBleGVjdXRlRGlzcGF0Y2hlc0luT3JkZXJT
dG9wQXRUcnVlKGV2ZW50KSB7XG4gIHZhciByZXQgPSBleGVjdXRlRGlzcGF0Y2hlc0luT3JkZXJT
dG9wQXRUcnVlSW1wbChldmVudCk7XG4gIGV2ZW50Ll9kaXNwYXRjaEluc3RhbmNlcyA9IG51bGw7
XG4gIGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycyA9IG51bGw7XG4gIHJldHVybiByZXQ7XG59XG5c
bi8qKlxuICogRXhlY3V0aW9uIG9mIGEgXCJkaXJlY3RcIiBkaXNwYXRjaCAtIHRoZXJlIG11c3Qg
YmUgYXQgbW9zdCBvbmUgZGlzcGF0Y2hcbiAqIGFjY3VtdWxhdGVkIG9uIHRoZSBldmVudCBvciBp
dCBpcyBjb25zaWRlcmVkIGFuIGVycm9yLiBJdCBkb2Vzbid0IHJlYWxseSBtYWtlXG4gKiBzZW5z
ZSBmb3IgYW4gZXZlbnQgd2l0aCBtdWx0aXBsZSBkaXNwYXRjaGVzIChidWJibGVkKSB0byBrZWVw
IHRyYWNrIG9mIHRoZVxuICogcmV0dXJuIHZhbHVlcyBhdCBlYWNoIGRpc3BhdGNoIGV4ZWN1dGlv
biwgYnV0IGl0IGRvZXMgdGVuZCB0byBtYWtlIHNlbnNlIHdoZW5cbiAqIGRlYWxpbmcgd2l0aCBc
ImRpcmVjdFwiIGRpc3BhdGNoZXMuXG4gKlxuICogQHJldHVybiB7Kn0gVGhlIHJldHVybiB2YWx1
ZSBvZiBleGVjdXRpbmcgdGhlIHNpbmdsZSBkaXNwYXRjaC5cbiAqL1xuZnVuY3Rpb24gZXhlY3V0
ZURpcmVjdERpc3BhdGNoKGV2ZW50KSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0g
J3Byb2R1Y3Rpb24nKSB7XG4gICAgdmFsaWRhdGVFdmVudERpc3BhdGNoZXMoZXZlbnQpO1xuICB9
XG4gIHZhciBkaXNwYXRjaExpc3RlbmVyID0gZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzO1xuICB2
YXIgZGlzcGF0Y2hJbnN0YW5jZSA9IGV2ZW50Ll9kaXNwYXRjaEluc3RhbmNlcztcbiAgISFBcnJh
eS5pc0FycmF5KGRpc3BhdGNoTGlzdGVuZXIpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdw
cm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ2V4ZWN1dGVEaXJlY3REaXNwYXRjaCguLi4p
OiBJbnZhbGlkIGBldmVudGAuJykgOiBfcHJvZEludmFyaWFudCgnMTAzJykgOiB2b2lkIDA7XG4g
IGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBkaXNwYXRjaExpc3RlbmVyID8gRXZlbnRQbHVnaW5VdGls
cy5nZXROb2RlRnJvbUluc3RhbmNlKGRpc3BhdGNoSW5zdGFuY2UpIDogbnVsbDtcbiAgdmFyIHJl
cyA9IGRpc3BhdGNoTGlzdGVuZXIgPyBkaXNwYXRjaExpc3RlbmVyKGV2ZW50KSA6IG51bGw7XG4g
IGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBudWxsO1xuICBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnMg
PSBudWxsO1xuICBldmVudC5fZGlzcGF0Y2hJbnN0YW5jZXMgPSBudWxsO1xuICByZXR1cm4gcmVz
O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7U3ludGhldGljRXZlbnR9IGV2ZW50XG4gKiBAcmV0dXJu
IHtib29sZWFufSBUcnVlIGlmZiBudW1iZXIgb2YgZGlzcGF0Y2hlcyBhY2N1bXVsYXRlZCBpcyBn
cmVhdGVyIHRoYW4gMC5cbiAqL1xuZnVuY3Rpb24gaGFzRGlzcGF0Y2hlcyhldmVudCkge1xuICBy
ZXR1cm4gISFldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnM7XG59XG5cbi8qKlxuICogR2VuZXJhbCB1
dGlsaXRpZXMgdGhhdCBhcmUgdXNlZnVsIGluIGNyZWF0aW5nIGN1c3RvbSBFdmVudCBQbHVnaW5z
LlxuICovXG52YXIgRXZlbnRQbHVnaW5VdGlscyA9IHtcbiAgaXNFbmRpc2g6IGlzRW5kaXNoLFxu
ICBpc01vdmVpc2g6IGlzTW92ZWlzaCxcbiAgaXNTdGFydGlzaDogaXNTdGFydGlzaCxcblxuICBl
eGVjdXRlRGlyZWN0RGlzcGF0Y2g6IGV4ZWN1dGVEaXJlY3REaXNwYXRjaCxcbiAgZXhlY3V0ZURp
c3BhdGNoZXNJbk9yZGVyOiBleGVjdXRlRGlzcGF0Y2hlc0luT3JkZXIsXG4gIGV4ZWN1dGVEaXNw
YXRjaGVzSW5PcmRlclN0b3BBdFRydWU6IGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlclN0b3BBdFRy
dWUsXG4gIGhhc0Rpc3BhdGNoZXM6IGhhc0Rpc3BhdGNoZXMsXG5cbiAgZ2V0SW5zdGFuY2VGcm9t
Tm9kZTogZnVuY3Rpb24gKG5vZGUpIHtcbiAgICByZXR1cm4gQ29tcG9uZW50VHJlZS5nZXRJbnN0
YW5jZUZyb21Ob2RlKG5vZGUpO1xuICB9LFxuICBnZXROb2RlRnJvbUluc3RhbmNlOiBmdW5jdGlv
biAobm9kZSkge1xuICAgIHJldHVybiBDb21wb25lbnRUcmVlLmdldE5vZGVGcm9tSW5zdGFuY2Uo
bm9kZSk7XG4gIH0sXG4gIGlzQW5jZXN0b3I6IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJu
IFRyZWVUcmF2ZXJzYWwuaXNBbmNlc3RvcihhLCBiKTtcbiAgfSxcbiAgZ2V0TG93ZXN0Q29tbW9u
QW5jZXN0b3I6IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIFRyZWVUcmF2ZXJzYWwuZ2V0
TG93ZXN0Q29tbW9uQW5jZXN0b3IoYSwgYik7XG4gIH0sXG4gIGdldFBhcmVudEluc3RhbmNlOiBm
dW5jdGlvbiAoaW5zdCkge1xuICAgIHJldHVybiBUcmVlVHJhdmVyc2FsLmdldFBhcmVudEluc3Rh
bmNlKGluc3QpO1xuICB9LFxuICB0cmF2ZXJzZVR3b1BoYXNlOiBmdW5jdGlvbiAodGFyZ2V0LCBm
biwgYXJnKSB7XG4gICAgcmV0dXJuIFRyZWVUcmF2ZXJzYWwudHJhdmVyc2VUd29QaGFzZSh0YXJn
ZXQsIGZuLCBhcmcpO1xuICB9LFxuICB0cmF2ZXJzZUVudGVyTGVhdmU6IGZ1bmN0aW9uIChmcm9t
LCB0bywgZm4sIGFyZ0Zyb20sIGFyZ1RvKSB7XG4gICAgcmV0dXJuIFRyZWVUcmF2ZXJzYWwudHJh
dmVyc2VFbnRlckxlYXZlKGZyb20sIHRvLCBmbiwgYXJnRnJvbSwgYXJnVG8pO1xuICB9LFxuXG4g
IGluamVjdGlvbjogaW5qZWN0aW9uXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50UGx1Z2lu
VXRpbHM7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9u
b2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9FdmVudFBsdWdpblV0aWxzLmpzXG4vLyBtb2R1bGUg
aWQgPSAzMlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXBy
ZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRo
aXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZv
dW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlz
IHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNh
biBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAq
XG4gKiBcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBjYXVnaHRFcnJvciA9IG51bGw7XG5c
bi8qKlxuICogQ2FsbCBhIGZ1bmN0aW9uIHdoaWxlIGd1YXJkaW5nIGFnYWluc3QgZXJyb3JzIHRo
YXQgaGFwcGVucyB3aXRoaW4gaXQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgb2YgdGhl
IGd1YXJkIHRvIHVzZSBmb3IgbG9nZ2luZyBvciBkZWJ1Z2dpbmdcbiAqIEBwYXJhbSB7RnVuY3Rp
b259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZVxuICogQHBhcmFtIHsqfSBhIEZpcnN0IGFy
Z3VtZW50XG4gKiBAcGFyYW0geyp9IGIgU2Vjb25kIGFyZ3VtZW50XG4gKi9cbmZ1bmN0aW9uIGlu
dm9rZUd1YXJkZWRDYWxsYmFjayhuYW1lLCBmdW5jLCBhKSB7XG4gIHRyeSB7XG4gICAgZnVuYyhh
KTtcbiAgfSBjYXRjaCAoeCkge1xuICAgIGlmIChjYXVnaHRFcnJvciA9PT0gbnVsbCkge1xuICAg
ICAgY2F1Z2h0RXJyb3IgPSB4O1xuICAgIH1cbiAgfVxufVxuXG52YXIgUmVhY3RFcnJvclV0aWxz
ID0ge1xuICBpbnZva2VHdWFyZGVkQ2FsbGJhY2s6IGludm9rZUd1YXJkZWRDYWxsYmFjayxcblxu
ICAvKipcbiAgICogSW52b2tlZCBieSBSZWFjdFRlc3RVdGlscy5TaW11bGF0ZSBzbyB0aGF0IGFu
eSBlcnJvcnMgdGhyb3duIGJ5IHRoZSBldmVudFxuICAgKiBoYW5kbGVyIGFyZSBzdXJlIHRvIGJl
IHJldGhyb3duIGJ5IHJldGhyb3dDYXVnaHRFcnJvci5cbiAgICovXG4gIGludm9rZUd1YXJkZWRD
YWxsYmFja1dpdGhDYXRjaDogaW52b2tlR3VhcmRlZENhbGxiYWNrLFxuXG4gIC8qKlxuICAgKiBE
dXJpbmcgZXhlY3V0aW9uIG9mIGd1YXJkZWQgZnVuY3Rpb25zIHdlIHdpbGwgY2FwdHVyZSB0aGUg
Zmlyc3QgZXJyb3Igd2hpY2hcbiAgICogd2Ugd2lsbCByZXRocm93IHRvIGJlIGhhbmRsZWQgYnkg
dGhlIHRvcCBsZXZlbCBlcnJvciBoYW5kbGVyLlxuICAgKi9cbiAgcmV0aHJvd0NhdWdodEVycm9y
OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGNhdWdodEVycm9yKSB7XG4gICAgICB2YXIgZXJyb3Ig
PSBjYXVnaHRFcnJvcjtcbiAgICAgIGNhdWdodEVycm9yID0gbnVsbDtcbiAgICAgIHRocm93IGVy
cm9yO1xuICAgIH1cbiAgfVxufTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJv
ZHVjdGlvbicpIHtcbiAgLyoqXG4gICAqIFRvIGhlbHAgZGV2ZWxvcG1lbnQgd2UgY2FuIGdldCBi
ZXR0ZXIgZGV2dG9vbHMgaW50ZWdyYXRpb24gYnkgc2ltdWxhdGluZyBhXG4gICAqIHJlYWwgYnJv
d3NlciBldmVudC5cbiAgICovXG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAm
JiB0eXBlb2Ygd2luZG93LmRpc3BhdGNoRXZlbnQgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRv
Y3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRXZlbnQgPT09
ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgZmFrZU5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCdyZWFjdCcpO1xuICAgIFJlYWN0RXJyb3JVdGlscy5pbnZva2VHdWFyZGVkQ2FsbGJhY2sgPSBm
dW5jdGlvbiAobmFtZSwgZnVuYywgYSkge1xuICAgICAgdmFyIGJvdW5kRnVuYyA9IGZ1bmMuYmlu
ZChudWxsLCBhKTtcbiAgICAgIHZhciBldnRUeXBlID0gJ3JlYWN0LScgKyBuYW1lO1xuICAgICAg
ZmFrZU5vZGUuYWRkRXZlbnRMaXN0ZW5lcihldnRUeXBlLCBib3VuZEZ1bmMsIGZhbHNlKTtcbiAg
ICAgIHZhciBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcbiAgICAgIGV2dC5p
bml0RXZlbnQoZXZ0VHlwZSwgZmFsc2UsIGZhbHNlKTtcbiAgICAgIGZha2VOb2RlLmRpc3BhdGNo
RXZlbnQoZXZ0KTtcbiAgICAgIGZha2VOb2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZ0VHlwZSwg
Ym91bmRGdW5jLCBmYWxzZSk7XG4gICAgfTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJl
YWN0RXJyb3JVdGlscztcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVS
XG4vLyAuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RXJyb3JVdGlscy5qc1xuLy8g
bW9kdWxlIGlkID0gMzNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyoqXG4gKiBDb3B5cmlnaHQg
MjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAq
XG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGlj
ZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkg
b2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJp
Z2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3Rv
cnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBHZXRzIHRoZSB0YXJnZXQg
bm9kZSBmcm9tIGEgbmF0aXZlIGJyb3dzZXIgZXZlbnQgYnkgYWNjb3VudGluZyBmb3JcbiAqIGlu
Y29uc2lzdGVuY2llcyBpbiBicm93c2VyIERPTSBBUElzLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0
fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEByZXR1cm4ge0RPTUV2ZW50
VGFyZ2V0fSBUYXJnZXQgbm9kZS5cbiAqL1xuXG5mdW5jdGlvbiBnZXRFdmVudFRhcmdldChuYXRp
dmVFdmVudCkge1xuICB2YXIgdGFyZ2V0ID0gbmF0aXZlRXZlbnQudGFyZ2V0IHx8IG5hdGl2ZUV2
ZW50LnNyY0VsZW1lbnQgfHwgd2luZG93O1xuXG4gIC8vIE5vcm1hbGl6ZSBTVkcgPHVzZT4gZWxl
bWVudCBldmVudHMgIzQ5NjNcbiAgaWYgKHRhcmdldC5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCkg
e1xuICAgIHRhcmdldCA9IHRhcmdldC5jb3JyZXNwb25kaW5nVXNlRWxlbWVudDtcbiAgfVxuXG4g
IC8vIFNhZmFyaSBtYXkgZmlyZSBldmVudHMgb24gdGV4dCBub2RlcyAoTm9kZS5URVhUX05PREUg
aXMgMykuXG4gIC8vIEBzZWUgaHR0cDovL3d3dy5xdWlya3Ntb2RlLm9yZy9qcy9ldmVudHNfcHJv
cGVydGllcy5odG1sXG4gIHJldHVybiB0YXJnZXQubm9kZVR5cGUgPT09IDMgPyB0YXJnZXQucGFy
ZW50Tm9kZSA6IHRhcmdldDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRFdmVudFRhcmdldDtc
blxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9k
dWxlcy9yZWFjdC1kb20vbGliL2dldEV2ZW50VGFyZ2V0LmpzXG4vLyBtb2R1bGUgaWQgPSAzNFxu
Ly8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZh
Y2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNl
IGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRo
ZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0
cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3Vu
ZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxu
J3VzZSBzdHJpY3QnO1xuXG52YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSByZXF1aXJlKCdmYmpz
L2xpYi9FeGVjdXRpb25FbnZpcm9ubWVudCcpO1xuXG52YXIgdXNlSGFzRmVhdHVyZTtcbmlmIChF
eGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00pIHtcbiAgdXNlSGFzRmVhdHVyZSA9IGRvY3Vt
ZW50LmltcGxlbWVudGF0aW9uICYmIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmhhc0ZlYXR1cmUg
JiZcbiAgLy8gYWx3YXlzIHJldHVybnMgdHJ1ZSBpbiBuZXdlciBicm93c2VycyBhcyBwZXIgdGhl
IHN0YW5kYXJkLlxuICAvLyBAc2VlIGh0dHA6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNkb20tZG9t
aW1wbGVtZW50YXRpb24taGFzZmVhdHVyZVxuICBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5oYXNG
ZWF0dXJlKCcnLCAnJykgIT09IHRydWU7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGFuIGV2ZW50
IGlzIHN1cHBvcnRlZCBpbiB0aGUgY3VycmVudCBleGVjdXRpb24gZW52aXJvbm1lbnQuXG4gKlxu
ICogTk9URTogVGhpcyB3aWxsIG5vdCB3b3JrIGNvcnJlY3RseSBmb3Igbm9uLWdlbmVyaWMgZXZl
bnRzIHN1Y2ggYXMgYGNoYW5nZWAsXG4gKiBgcmVzZXRgLCBgbG9hZGAsIGBlcnJvcmAsIGFuZCBg
c2VsZWN0YC5cbiAqXG4gKiBCb3Jyb3dzIGZyb20gTW9kZXJuaXpyLlxuICpcbiAqIEBwYXJhbSB7
c3RyaW5nfSBldmVudE5hbWVTdWZmaXggRXZlbnQgbmFtZSwgZS5nLiBcImNsaWNrXCIuXG4gKiBA
cGFyYW0gez9ib29sZWFufSBjYXB0dXJlIENoZWNrIGlmIHRoZSBjYXB0dXJlIHBoYXNlIGlzIHN1
cHBvcnRlZC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGV2ZW50IGlzIHN1cHBv
cnRlZC5cbiAqIEBpbnRlcm5hbFxuICogQGxpY2Vuc2UgTW9kZXJuaXpyIDMuMC4wcHJlIChDdXN0
b20gQnVpbGQpIHwgTUlUXG4gKi9cbmZ1bmN0aW9uIGlzRXZlbnRTdXBwb3J0ZWQoZXZlbnROYW1l
U3VmZml4LCBjYXB0dXJlKSB7XG4gIGlmICghRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9N
IHx8IGNhcHR1cmUgJiYgISgnYWRkRXZlbnRMaXN0ZW5lcicgaW4gZG9jdW1lbnQpKSB7XG4gICAg
cmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGV2ZW50TmFtZSA9ICdvbicgKyBldmVudE5hbWVT
dWZmaXg7XG4gIHZhciBpc1N1cHBvcnRlZCA9IGV2ZW50TmFtZSBpbiBkb2N1bWVudDtcblxuICBp
ZiAoIWlzU3VwcG9ydGVkKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdkaXYnKTtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShldmVudE5hbWUsICdyZXR1cm47
Jyk7XG4gICAgaXNTdXBwb3J0ZWQgPSB0eXBlb2YgZWxlbWVudFtldmVudE5hbWVdID09PSAnZnVu
Y3Rpb24nO1xuICB9XG5cbiAgaWYgKCFpc1N1cHBvcnRlZCAmJiB1c2VIYXNGZWF0dXJlICYmIGV2
ZW50TmFtZVN1ZmZpeCA9PT0gJ3doZWVsJykge1xuICAgIC8vIFRoaXMgaXMgdGhlIG9ubHkgd2F5
IHRvIHRlc3Qgc3VwcG9ydCBmb3IgdGhlIGB3aGVlbGAgZXZlbnQgaW4gSUU5Ky5cbiAgICBpc1N1
cHBvcnRlZCA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmhhc0ZlYXR1cmUoJ0V2ZW50cy53aGVl
bCcsICczLjAnKTtcbiAgfVxuXG4gIHJldHVybiBpc1N1cHBvcnRlZDtcbn1cblxubW9kdWxlLmV4
cG9ydHMgPSBpc0V2ZW50U3VwcG9ydGVkO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VC
UEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvaXNFdmVudFN1cHBv
cnRlZC5qc1xuLy8gbW9kdWxlIGlkID0gMzVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyoqXG4g
KiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBC
U0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9v
dCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICog
b2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUg
c2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBUcmFu
c2xhdGlvbiBmcm9tIG1vZGlmaWVyIGtleSB0byB0aGUgYXNzb2NpYXRlZCBwcm9wZXJ0eSBpbiB0
aGUgZXZlbnQuXG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50
cy8ja2V5cy1Nb2RpZmllcnNcbiAqL1xuXG52YXIgbW9kaWZpZXJLZXlUb1Byb3AgPSB7XG4gIEFs
dDogJ2FsdEtleScsXG4gIENvbnRyb2w6ICdjdHJsS2V5JyxcbiAgTWV0YTogJ21ldGFLZXknLFxu
ICBTaGlmdDogJ3NoaWZ0S2V5J1xufTtcblxuLy8gSUU4IGRvZXMgbm90IGltcGxlbWVudCBnZXRN
b2RpZmllclN0YXRlIHNvIHdlIHNpbXBseSBtYXAgaXQgdG8gdGhlIG9ubHlcbi8vIG1vZGlmaWVy
IGtleXMgZXhwb3NlZCBieSB0aGUgZXZlbnQgaXRzZWxmLCBkb2VzIG5vdCBzdXBwb3J0IExvY2st
a2V5cy5cbi8vIEN1cnJlbnRseSwgYWxsIG1ham9yIGJyb3dzZXJzIGV4Y2VwdCBDaHJvbWUgc2Vl
bXMgdG8gc3VwcG9ydCBMb2NrLWtleXMuXG5mdW5jdGlvbiBtb2RpZmllclN0YXRlR2V0dGVyKGtl
eUFyZykge1xuICB2YXIgc3ludGhldGljRXZlbnQgPSB0aGlzO1xuICB2YXIgbmF0aXZlRXZlbnQg
PSBzeW50aGV0aWNFdmVudC5uYXRpdmVFdmVudDtcbiAgaWYgKG5hdGl2ZUV2ZW50LmdldE1vZGlm
aWVyU3RhdGUpIHtcbiAgICByZXR1cm4gbmF0aXZlRXZlbnQuZ2V0TW9kaWZpZXJTdGF0ZShrZXlB
cmcpO1xuICB9XG4gIHZhciBrZXlQcm9wID0gbW9kaWZpZXJLZXlUb1Byb3Bba2V5QXJnXTtcbiAg
cmV0dXJuIGtleVByb3AgPyAhIW5hdGl2ZUV2ZW50W2tleVByb3BdIDogZmFsc2U7XG59XG5cbmZ1
bmN0aW9uIGdldEV2ZW50TW9kaWZpZXJTdGF0ZShuYXRpdmVFdmVudCkge1xuICByZXR1cm4gbW9k
aWZpZXJTdGF0ZUdldHRlcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRFdmVudE1vZGlmaWVy
U3RhdGU7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9u
b2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9nZXRFdmVudE1vZGlmaWVyU3RhdGUuanNcbi8vIG1v
ZHVsZSBpZCA9IDM2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qKlxuICogQ29weXJpZ2h0IDIw
MTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxu
ICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vu
c2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9m
IHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdo
dHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5
LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBET01MYXp5VHJlZSA9IHJlcXVpcmUo
Jy4vRE9NTGF6eVRyZWUnKTtcbnZhciBEYW5nZXIgPSByZXF1aXJlKCcuL0RhbmdlcicpO1xudmFy
IFJlYWN0RE9NQ29tcG9uZW50VHJlZSA9IHJlcXVpcmUoJy4vUmVhY3RET01Db21wb25lbnRUcmVl
Jyk7XG52YXIgUmVhY3RJbnN0cnVtZW50YXRpb24gPSByZXF1aXJlKCcuL1JlYWN0SW5zdHJ1bWVu
dGF0aW9uJyk7XG5cbnZhciBjcmVhdGVNaWNyb3NvZnRVbnNhZmVMb2NhbEZ1bmN0aW9uID0gcmVx
dWlyZSgnLi9jcmVhdGVNaWNyb3NvZnRVbnNhZmVMb2NhbEZ1bmN0aW9uJyk7XG52YXIgc2V0SW5u
ZXJIVE1MID0gcmVxdWlyZSgnLi9zZXRJbm5lckhUTUwnKTtcbnZhciBzZXRUZXh0Q29udGVudCA9
IHJlcXVpcmUoJy4vc2V0VGV4dENvbnRlbnQnKTtcblxuZnVuY3Rpb24gZ2V0Tm9kZUFmdGVyKHBh
cmVudE5vZGUsIG5vZGUpIHtcbiAgLy8gU3BlY2lhbCBjYXNlIGZvciB0ZXh0IGNvbXBvbmVudHMs
IHdoaWNoIHJldHVybiBbb3BlbiwgY2xvc2VdIGNvbW1lbnRzXG4gIC8vIGZyb20gZ2V0SG9zdE5v
ZGUuXG4gIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSB7XG4gICAgbm9kZSA9IG5vZGVbMV07XG4g
IH1cbiAgcmV0dXJuIG5vZGUgPyBub2RlLm5leHRTaWJsaW5nIDogcGFyZW50Tm9kZS5maXJzdENo
aWxkO1xufVxuXG4vKipcbiAqIEluc2VydHMgYGNoaWxkTm9kZWAgYXMgYSBjaGlsZCBvZiBgcGFy
ZW50Tm9kZWAgYXQgdGhlIGBpbmRleGAuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBwYXJl
bnROb2RlIFBhcmVudCBub2RlIGluIHdoaWNoIHRvIGluc2VydC5cbiAqIEBwYXJhbSB7RE9NRWxl
bWVudH0gY2hpbGROb2RlIENoaWxkIG5vZGUgdG8gaW5zZXJ0LlxuICogQHBhcmFtIHtudW1iZXJ9
IGluZGV4IEluZGV4IGF0IHdoaWNoIHRvIGluc2VydCB0aGUgY2hpbGQuXG4gKiBAaW50ZXJuYWxc
biAqL1xudmFyIGluc2VydENoaWxkQXQgPSBjcmVhdGVNaWNyb3NvZnRVbnNhZmVMb2NhbEZ1bmN0
aW9uKGZ1bmN0aW9uIChwYXJlbnROb2RlLCBjaGlsZE5vZGUsIHJlZmVyZW5jZU5vZGUpIHtcbiAg
Ly8gV2UgcmVseSBleGNsdXNpdmVseSBvbiBgaW5zZXJ0QmVmb3JlKG5vZGUsIG51bGwpYCBpbnN0
ZWFkIG9mIGFsc28gdXNpbmdcbiAgLy8gYGFwcGVuZENoaWxkKG5vZGUpYC4gKFVzaW5nIGB1bmRl
ZmluZWRgIGlzIG5vdCBhbGxvd2VkIGJ5IGFsbCBicm93c2VycyBzb1xuICAvLyB3ZSBhcmUgY2Fy
ZWZ1bCB0byB1c2UgYG51bGxgLilcbiAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY2hpbGROb2Rl
LCByZWZlcmVuY2VOb2RlKTtcbn0pO1xuXG5mdW5jdGlvbiBpbnNlcnRMYXp5VHJlZUNoaWxkQXQo
cGFyZW50Tm9kZSwgY2hpbGRUcmVlLCByZWZlcmVuY2VOb2RlKSB7XG4gIERPTUxhenlUcmVlLmlu
c2VydFRyZWVCZWZvcmUocGFyZW50Tm9kZSwgY2hpbGRUcmVlLCByZWZlcmVuY2VOb2RlKTtcbn1c
blxuZnVuY3Rpb24gbW92ZUNoaWxkKHBhcmVudE5vZGUsIGNoaWxkTm9kZSwgcmVmZXJlbmNlTm9k
ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZE5vZGUpKSB7XG4gICAgbW92ZURlbGltaXRl
ZFRleHQocGFyZW50Tm9kZSwgY2hpbGROb2RlWzBdLCBjaGlsZE5vZGVbMV0sIHJlZmVyZW5jZU5v
ZGUpO1xuICB9IGVsc2Uge1xuICAgIGluc2VydENoaWxkQXQocGFyZW50Tm9kZSwgY2hpbGROb2Rl
LCByZWZlcmVuY2VOb2RlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW1vdmVDaGlsZChwYXJlbnRO
b2RlLCBjaGlsZE5vZGUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGROb2RlKSkge1xuICAg
IHZhciBjbG9zaW5nQ29tbWVudCA9IGNoaWxkTm9kZVsxXTtcbiAgICBjaGlsZE5vZGUgPSBjaGls
ZE5vZGVbMF07XG4gICAgcmVtb3ZlRGVsaW1pdGVkVGV4dChwYXJlbnROb2RlLCBjaGlsZE5vZGUs
IGNsb3NpbmdDb21tZW50KTtcbiAgICBwYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNsb3NpbmdDb21t
ZW50KTtcbiAgfVxuICBwYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNoaWxkTm9kZSk7XG59XG5cbmZ1
bmN0aW9uIG1vdmVEZWxpbWl0ZWRUZXh0KHBhcmVudE5vZGUsIG9wZW5pbmdDb21tZW50LCBjbG9z
aW5nQ29tbWVudCwgcmVmZXJlbmNlTm9kZSkge1xuICB2YXIgbm9kZSA9IG9wZW5pbmdDb21tZW50
O1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIHZhciBuZXh0Tm9kZSA9IG5vZGUubmV4dFNpYmxpbmc7
XG4gICAgaW5zZXJ0Q2hpbGRBdChwYXJlbnROb2RlLCBub2RlLCByZWZlcmVuY2VOb2RlKTtcbiAg
ICBpZiAobm9kZSA9PT0gY2xvc2luZ0NvbW1lbnQpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAg
ICBub2RlID0gbmV4dE5vZGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlRGVsaW1pdGVkVGV4
dChwYXJlbnROb2RlLCBzdGFydE5vZGUsIGNsb3NpbmdDb21tZW50KSB7XG4gIHdoaWxlICh0cnVl
KSB7XG4gICAgdmFyIG5vZGUgPSBzdGFydE5vZGUubmV4dFNpYmxpbmc7XG4gICAgaWYgKG5vZGUg
PT09IGNsb3NpbmdDb21tZW50KSB7XG4gICAgICAvLyBUaGUgY2xvc2luZyBjb21tZW50IGlzIHJl
bW92ZWQgYnkgUmVhY3RNdWx0aUNoaWxkLlxuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIHtcbiAg
ICAgIHBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0
aW9uIHJlcGxhY2VEZWxpbWl0ZWRUZXh0KG9wZW5pbmdDb21tZW50LCBjbG9zaW5nQ29tbWVudCwg
c3RyaW5nVGV4dCkge1xuICB2YXIgcGFyZW50Tm9kZSA9IG9wZW5pbmdDb21tZW50LnBhcmVudE5v
ZGU7XG4gIHZhciBub2RlQWZ0ZXJDb21tZW50ID0gb3BlbmluZ0NvbW1lbnQubmV4dFNpYmxpbmc7
XG4gIGlmIChub2RlQWZ0ZXJDb21tZW50ID09PSBjbG9zaW5nQ29tbWVudCkge1xuICAgIC8vIFRo
ZXJlIGFyZSBubyB0ZXh0IG5vZGVzIGJldHdlZW4gdGhlIG9wZW5pbmcgYW5kIGNsb3NpbmcgY29t
bWVudHM7IGluc2VydFxuICAgIC8vIGEgbmV3IG9uZSBpZiBzdHJpbmdUZXh0IGlzbid0IGVtcHR5
LlxuICAgIGlmIChzdHJpbmdUZXh0KSB7XG4gICAgICBpbnNlcnRDaGlsZEF0KHBhcmVudE5vZGUs
IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHN0cmluZ1RleHQpLCBub2RlQWZ0ZXJDb21tZW50KTtc
biAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKHN0cmluZ1RleHQpIHtcbiAgICAgIC8vIFNldCB0
aGUgdGV4dCBjb250ZW50IG9mIHRoZSBmaXJzdCBub2RlIGFmdGVyIHRoZSBvcGVuaW5nIGNvbW1l
bnQsIGFuZFxuICAgICAgLy8gcmVtb3ZlIGFsbCBmb2xsb3dpbmcgbm9kZXMgdXAgdW50aWwgdGhl
IGNsb3NpbmcgY29tbWVudC5cbiAgICAgIHNldFRleHRDb250ZW50KG5vZGVBZnRlckNvbW1lbnQs
IHN0cmluZ1RleHQpO1xuICAgICAgcmVtb3ZlRGVsaW1pdGVkVGV4dChwYXJlbnROb2RlLCBub2Rl
QWZ0ZXJDb21tZW50LCBjbG9zaW5nQ29tbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbW92
ZURlbGltaXRlZFRleHQocGFyZW50Tm9kZSwgb3BlbmluZ0NvbW1lbnQsIGNsb3NpbmdDb21tZW50
KTtcbiAgICB9XG4gIH1cblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0
aW9uJykge1xuICAgIFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vbkhvc3RPcGVyYXRp
b24oe1xuICAgICAgaW5zdGFuY2VJRDogUmVhY3RET01Db21wb25lbnRUcmVlLmdldEluc3RhbmNl
RnJvbU5vZGUob3BlbmluZ0NvbW1lbnQpLl9kZWJ1Z0lELFxuICAgICAgdHlwZTogJ3JlcGxhY2Ug
dGV4dCcsXG4gICAgICBwYXlsb2FkOiBzdHJpbmdUZXh0XG4gICAgfSk7XG4gIH1cbn1cblxudmFy
IGRhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwID0gRGFuZ2VyLmRhbmdlcm91c2x5UmVw
bGFjZU5vZGVXaXRoTWFya3VwO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVj
dGlvbicpIHtcbiAgZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXAgPSBmdW5jdGlvbiAo
b2xkQ2hpbGQsIG1hcmt1cCwgcHJldkluc3RhbmNlKSB7XG4gICAgRGFuZ2VyLmRhbmdlcm91c2x5
UmVwbGFjZU5vZGVXaXRoTWFya3VwKG9sZENoaWxkLCBtYXJrdXApO1xuICAgIGlmIChwcmV2SW5z
dGFuY2UuX2RlYnVnSUQgIT09IDApIHtcbiAgICAgIFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVn
VG9vbC5vbkhvc3RPcGVyYXRpb24oe1xuICAgICAgICBpbnN0YW5jZUlEOiBwcmV2SW5zdGFuY2Uu
X2RlYnVnSUQsXG4gICAgICAgIHR5cGU6ICdyZXBsYWNlIHdpdGgnLFxuICAgICAgICBwYXlsb2Fk
OiBtYXJrdXAudG9TdHJpbmcoKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBu
ZXh0SW5zdGFuY2UgPSBSZWFjdERPTUNvbXBvbmVudFRyZWUuZ2V0SW5zdGFuY2VGcm9tTm9kZSht
YXJrdXAubm9kZSk7XG4gICAgICBpZiAobmV4dEluc3RhbmNlLl9kZWJ1Z0lEICE9PSAwKSB7XG4g
ICAgICAgIFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vbkhvc3RPcGVyYXRpb24oe1xu
ICAgICAgICAgIGluc3RhbmNlSUQ6IG5leHRJbnN0YW5jZS5fZGVidWdJRCxcbiAgICAgICAgICB0
eXBlOiAnbW91bnQnLFxuICAgICAgICAgIHBheWxvYWQ6IG1hcmt1cC50b1N0cmluZygpXG4gICAg
ICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBPcGVyYXRpb25zIGZv
ciB1cGRhdGluZyB3aXRoIERPTSBjaGlsZHJlbi5cbiAqL1xudmFyIERPTUNoaWxkcmVuT3BlcmF0
aW9ucyA9IHtcbiAgZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXA6IGRhbmdlcm91c2x5
UmVwbGFjZU5vZGVXaXRoTWFya3VwLFxuXG4gIHJlcGxhY2VEZWxpbWl0ZWRUZXh0OiByZXBsYWNl
RGVsaW1pdGVkVGV4dCxcblxuICAvKipcbiAgICogVXBkYXRlcyBhIGNvbXBvbmVudCdzIGNoaWxk
cmVuIGJ5IHByb2Nlc3NpbmcgYSBzZXJpZXMgb2YgdXBkYXRlcy4gVGhlXG4gICAqIHVwZGF0ZSBj
b25maWd1cmF0aW9ucyBhcmUgZWFjaCBleHBlY3RlZCB0byBoYXZlIGEgYHBhcmVudE5vZGVgIHBy
b3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0ge2FycmF5PG9iamVjdD59IHVwZGF0ZXMgTGlzdCBv
ZiB1cGRhdGUgY29uZmlndXJhdGlvbnMuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJvY2Vz
c1VwZGF0ZXM6IGZ1bmN0aW9uIChwYXJlbnROb2RlLCB1cGRhdGVzKSB7XG4gICAgaWYgKHByb2Nl
c3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhciBwYXJlbnROb2Rl
RGVidWdJRCA9IFJlYWN0RE9NQ29tcG9uZW50VHJlZS5nZXRJbnN0YW5jZUZyb21Ob2RlKHBhcmVu
dE5vZGUpLl9kZWJ1Z0lEO1xuICAgIH1cblxuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgdXBkYXRl
cy5sZW5ndGg7IGsrKykge1xuICAgICAgdmFyIHVwZGF0ZSA9IHVwZGF0ZXNba107XG4gICAgICBz
d2l0Y2ggKHVwZGF0ZS50eXBlKSB7XG4gICAgICAgIGNhc2UgJ0lOU0VSVF9NQVJLVVAnOlxuICAg
ICAgICAgIGluc2VydExhenlUcmVlQ2hpbGRBdChwYXJlbnROb2RlLCB1cGRhdGUuY29udGVudCwg
Z2V0Tm9kZUFmdGVyKHBhcmVudE5vZGUsIHVwZGF0ZS5hZnRlck5vZGUpKTtcbiAgICAgICAgICBp
ZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAg
UmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uSG9zdE9wZXJhdGlvbih7XG4gICAgICAg
ICAgICAgIGluc3RhbmNlSUQ6IHBhcmVudE5vZGVEZWJ1Z0lELFxuICAgICAgICAgICAgICB0eXBl
OiAnaW5zZXJ0IGNoaWxkJyxcbiAgICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAg
ICAgIHRvSW5kZXg6IHVwZGF0ZS50b0luZGV4LFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHVw
ZGF0ZS5jb250ZW50LnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7
XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdNT1ZFX0VYSVNU
SU5HJzpcbiAgICAgICAgICBtb3ZlQ2hpbGQocGFyZW50Tm9kZSwgdXBkYXRlLmZyb21Ob2RlLCBn
ZXROb2RlQWZ0ZXIocGFyZW50Tm9kZSwgdXBkYXRlLmFmdGVyTm9kZSkpO1xuICAgICAgICAgIGlm
IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICBS
ZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25Ib3N0T3BlcmF0aW9uKHtcbiAgICAgICAg
ICAgICAgaW5zdGFuY2VJRDogcGFyZW50Tm9kZURlYnVnSUQsXG4gICAgICAgICAgICAgIHR5cGU6
ICdtb3ZlIGNoaWxkJyxcbiAgICAgICAgICAgICAgcGF5bG9hZDogeyBmcm9tSW5kZXg6IHVwZGF0
ZS5mcm9tSW5kZXgsIHRvSW5kZXg6IHVwZGF0ZS50b0luZGV4IH1cbiAgICAgICAgICAgIH0pO1xu
ICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnU0VUX01BUktVUCc6
XG4gICAgICAgICAgc2V0SW5uZXJIVE1MKHBhcmVudE5vZGUsIHVwZGF0ZS5jb250ZW50KTtcbiAg
ICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAg
ICAgICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uSG9zdE9wZXJhdGlvbih7
XG4gICAgICAgICAgICAgIGluc3RhbmNlSUQ6IHBhcmVudE5vZGVEZWJ1Z0lELFxuICAgICAgICAg
ICAgICB0eXBlOiAncmVwbGFjZSBjaGlsZHJlbicsXG4gICAgICAgICAgICAgIHBheWxvYWQ6IHVw
ZGF0ZS5jb250ZW50LnRvU3RyaW5nKClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAg
ICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnVEVYVF9DT05URU5UJzpcbiAgICAgICAgICBz
ZXRUZXh0Q29udGVudChwYXJlbnROb2RlLCB1cGRhdGUuY29udGVudCk7XG4gICAgICAgICAgaWYg
KHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIFJl
YWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vbkhvc3RPcGVyYXRpb24oe1xuICAgICAgICAg
ICAgICBpbnN0YW5jZUlEOiBwYXJlbnROb2RlRGVidWdJRCxcbiAgICAgICAgICAgICAgdHlwZTog
J3JlcGxhY2UgdGV4dCcsXG4gICAgICAgICAgICAgIHBheWxvYWQ6IHVwZGF0ZS5jb250ZW50LnRv
U3RyaW5nKClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztc
biAgICAgICAgY2FzZSAnUkVNT1ZFX05PREUnOlxuICAgICAgICAgIHJlbW92ZUNoaWxkKHBhcmVu
dE5vZGUsIHVwZGF0ZS5mcm9tTm9kZSk7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVf
RU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIFJlYWN0SW5zdHJ1bWVudGF0aW9u
LmRlYnVnVG9vbC5vbkhvc3RPcGVyYXRpb24oe1xuICAgICAgICAgICAgICBpbnN0YW5jZUlEOiBw
YXJlbnROb2RlRGVidWdJRCxcbiAgICAgICAgICAgICAgdHlwZTogJ3JlbW92ZSBjaGlsZCcsXG4g
ICAgICAgICAgICAgIHBheWxvYWQ6IHsgZnJvbUluZGV4OiB1cGRhdGUuZnJvbUluZGV4IH1cbiAg
ICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAg
ICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRE9NQ2hpbGRyZW5PcGVyYXRpb25zO1xu
XG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1
bGVzL3JlYWN0LWRvbS9saWIvRE9NQ2hpbGRyZW5PcGVyYXRpb25zLmpzXG4vLyBtb2R1bGUgaWQg
PSAzN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNl
bnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMg
c291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5k
IGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNv
dXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBi
ZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4g
Ki9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRE9NTmFtZXNwYWNlcyA9IHtcbiAgaHRtbDogJ2h0
dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnLFxuICBtYXRobWw6ICdodHRwOi8vd3d3LnczLm9y
Zy8xOTk4L01hdGgvTWF0aE1MJyxcbiAgc3ZnOiAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcn
XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IERPTU5hbWVzcGFjZXM7XG5cblxuLy8vLy8vLy8vLy8v
Ly8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xp
Yi9ET01OYW1lc3BhY2VzLmpzXG4vLyBtb2R1bGUgaWQgPSAzOFxuLy8gbW9kdWxlIGNodW5rcyA9
IDAiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBB
bGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQg
dW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxl
IGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFs
IGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBm
aWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuLyogZ2xvYmFscyBNU0FwcCAq
L1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ3JlYXRlIGEgZnVuY3Rpb24gd2hpY2ggaGFz
ICd1bnNhZmUnIHByaXZpbGVnZXMgKHJlcXVpcmVkIGJ5IHdpbmRvd3M4IGFwcHMpXG4gKi9cblxu
dmFyIGNyZWF0ZU1pY3Jvc29mdFVuc2FmZUxvY2FsRnVuY3Rpb24gPSBmdW5jdGlvbiAoZnVuYykg
e1xuICBpZiAodHlwZW9mIE1TQXBwICE9PSAndW5kZWZpbmVkJyAmJiBNU0FwcC5leGVjVW5zYWZl
TG9jYWxGdW5jdGlvbikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoYXJnMCwgYXJnMSwgYXJnMiwg
YXJnMykge1xuICAgICAgTVNBcHAuZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24oZnVuY3Rpb24gKCkg
e1xuICAgICAgICByZXR1cm4gZnVuYyhhcmcwLCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgICAgIH0p
O1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZ1bmM7XG4gIH1cbn07XG5cbm1vZHVs
ZS5leHBvcnRzID0gY3JlYXRlTWljcm9zb2Z0VW5zYWZlTG9jYWxGdW5jdGlvbjtcblxuXG4vLy8v
Ly8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9yZWFj
dC1kb20vbGliL2NyZWF0ZU1pY3Jvc29mdFVuc2FmZUxvY2FsRnVuY3Rpb24uanNcbi8vIG1vZHVs
ZSBpZCA9IDM5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMt
cHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICog
VGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2Ug
Zm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRo
aXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMg
Y2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5Llxu
ICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfcHJvZEludmFyaWFudCA9IHJlcXVpcmUo
Jy4vcmVhY3RQcm9kSW52YXJpYW50Jyk7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IHJl
cXVpcmUoJy4vUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcbnZhciBwcm9wVHlwZXNGYWN0b3J5ID0g
cmVxdWlyZSgncHJvcC10eXBlcy9mYWN0b3J5Jyk7XG5cbnZhciBSZWFjdCA9IHJlcXVpcmUoJ3Jl
YWN0L2xpYi9SZWFjdCcpO1xudmFyIFByb3BUeXBlcyA9IHByb3BUeXBlc0ZhY3RvcnkoUmVhY3Qu
aXNWYWxpZEVsZW1lbnQpO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52
YXJpYW50Jyk7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoJ2ZianMvbGliL3dhcm5pbmcnKTtcblxu
dmFyIGhhc1JlYWRPbmx5VmFsdWUgPSB7XG4gIGJ1dHRvbjogdHJ1ZSxcbiAgY2hlY2tib3g6IHRy
dWUsXG4gIGltYWdlOiB0cnVlLFxuICBoaWRkZW46IHRydWUsXG4gIHJhZGlvOiB0cnVlLFxuICBy
ZXNldDogdHJ1ZSxcbiAgc3VibWl0OiB0cnVlXG59O1xuXG5mdW5jdGlvbiBfYXNzZXJ0U2luZ2xl
TGluayhpbnB1dFByb3BzKSB7XG4gICEoaW5wdXRQcm9wcy5jaGVja2VkTGluayA9PSBudWxsIHx8
IGlucHV0UHJvcHMudmFsdWVMaW5rID09IG51bGwpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09
ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ0Nhbm5vdCBwcm92aWRlIGEgY2hlY2tl
ZExpbmsgYW5kIGEgdmFsdWVMaW5rLiBJZiB5b3Ugd2FudCB0byB1c2UgY2hlY2tlZExpbmssIHlv
dSBwcm9iYWJseSBkb25cXCd0IHdhbnQgdG8gdXNlIHZhbHVlTGluayBhbmQgdmljZSB2ZXJzYS4n
KSA6IF9wcm9kSW52YXJpYW50KCc4NycpIDogdm9pZCAwO1xufVxuZnVuY3Rpb24gX2Fzc2VydFZh
bHVlTGluayhpbnB1dFByb3BzKSB7XG4gIF9hc3NlcnRTaW5nbGVMaW5rKGlucHV0UHJvcHMpO1xu
ICAhKGlucHV0UHJvcHMudmFsdWUgPT0gbnVsbCAmJiBpbnB1dFByb3BzLm9uQ2hhbmdlID09IG51
bGwpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChm
YWxzZSwgJ0Nhbm5vdCBwcm92aWRlIGEgdmFsdWVMaW5rIGFuZCBhIHZhbHVlIG9yIG9uQ2hhbmdl
IGV2ZW50LiBJZiB5b3Ugd2FudCB0byB1c2UgdmFsdWUgb3Igb25DaGFuZ2UsIHlvdSBwcm9iYWJs
eSBkb25cXCd0IHdhbnQgdG8gdXNlIHZhbHVlTGluay4nKSA6IF9wcm9kSW52YXJpYW50KCc4OCcp
IDogdm9pZCAwO1xufVxuXG5mdW5jdGlvbiBfYXNzZXJ0Q2hlY2tlZExpbmsoaW5wdXRQcm9wcykg
e1xuICBfYXNzZXJ0U2luZ2xlTGluayhpbnB1dFByb3BzKTtcbiAgIShpbnB1dFByb3BzLmNoZWNr
ZWQgPT0gbnVsbCAmJiBpbnB1dFByb3BzLm9uQ2hhbmdlID09IG51bGwpID8gcHJvY2Vzcy5lbnYu
Tk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ0Nhbm5vdCBwcm92
aWRlIGEgY2hlY2tlZExpbmsgYW5kIGEgY2hlY2tlZCBwcm9wZXJ0eSBvciBvbkNoYW5nZSBldmVu
dC4gSWYgeW91IHdhbnQgdG8gdXNlIGNoZWNrZWQgb3Igb25DaGFuZ2UsIHlvdSBwcm9iYWJseSBk
b25cXCd0IHdhbnQgdG8gdXNlIGNoZWNrZWRMaW5rJykgOiBfcHJvZEludmFyaWFudCgnODknKSA6
IHZvaWQgMDtcbn1cblxudmFyIHByb3BUeXBlcyA9IHtcbiAgdmFsdWU6IGZ1bmN0aW9uIChwcm9w
cywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICBpZiAoIXByb3BzW3Byb3BOYW1lXSB8
fCBoYXNSZWFkT25seVZhbHVlW3Byb3BzLnR5cGVdIHx8IHByb3BzLm9uQ2hhbmdlIHx8IHByb3Bz
LnJlYWRPbmx5IHx8IHByb3BzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9
XG4gICAgcmV0dXJuIG5ldyBFcnJvcignWW91IHByb3ZpZGVkIGEgYHZhbHVlYCBwcm9wIHRvIGEg
Zm9ybSBmaWVsZCB3aXRob3V0IGFuICcgKyAnYG9uQ2hhbmdlYCBoYW5kbGVyLiBUaGlzIHdpbGwg
cmVuZGVyIGEgcmVhZC1vbmx5IGZpZWxkLiBJZiAnICsgJ3RoZSBmaWVsZCBzaG91bGQgYmUgbXV0
YWJsZSB1c2UgYGRlZmF1bHRWYWx1ZWAuIE90aGVyd2lzZSwgJyArICdzZXQgZWl0aGVyIGBvbkNo
YW5nZWAgb3IgYHJlYWRPbmx5YC4nKTtcbiAgfSxcbiAgY2hlY2tlZDogZnVuY3Rpb24gKHByb3Bz
LCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIGlmICghcHJvcHNbcHJvcE5hbWVdIHx8
IHByb3BzLm9uQ2hhbmdlIHx8IHByb3BzLnJlYWRPbmx5IHx8IHByb3BzLmRpc2FibGVkKSB7XG4g
ICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBFcnJvcignWW91IHByb3Zp
ZGVkIGEgYGNoZWNrZWRgIHByb3AgdG8gYSBmb3JtIGZpZWxkIHdpdGhvdXQgYW4gJyArICdgb25D
aGFuZ2VgIGhhbmRsZXIuIFRoaXMgd2lsbCByZW5kZXIgYSByZWFkLW9ubHkgZmllbGQuIElmICcg
KyAndGhlIGZpZWxkIHNob3VsZCBiZSBtdXRhYmxlIHVzZSBgZGVmYXVsdENoZWNrZWRgLiBPdGhl
cndpc2UsICcgKyAnc2V0IGVpdGhlciBgb25DaGFuZ2VgIG9yIGByZWFkT25seWAuJyk7XG4gIH0s
XG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuY1xufTtcblxudmFyIGxvZ2dlZFR5cGVGYWlsdXJl
cyA9IHt9O1xuZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKG93bmVyKSB7XG4g
IGlmIChvd25lcikge1xuICAgIHZhciBuYW1lID0gb3duZXIuZ2V0TmFtZSgpO1xuICAgIGlmIChu
YW1lKSB7XG4gICAgICByZXR1cm4gJyBDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG5h
bWUgKyAnYC4nO1xuICAgIH1cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogUHJvdmlk
ZSBhIGxpbmtlZCBgdmFsdWVgIGF0dHJpYnV0ZSBmb3IgY29udHJvbGxlZCBmb3Jtcy4gWW91IHNo
b3VsZCBub3QgdXNlXG4gKiB0aGlzIG91dHNpZGUgb2YgdGhlIFJlYWN0RE9NIGNvbnRyb2xsZWQg
Zm9ybSBjb21wb25lbnRzLlxuICovXG52YXIgTGlua2VkVmFsdWVVdGlscyA9IHtcbiAgY2hlY2tQ
cm9wVHlwZXM6IGZ1bmN0aW9uICh0YWdOYW1lLCBwcm9wcywgb3duZXIpIHtcbiAgICBmb3IgKHZh
ciBwcm9wTmFtZSBpbiBwcm9wVHlwZXMpIHtcbiAgICAgIGlmIChwcm9wVHlwZXMuaGFzT3duUHJv
cGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIHZhciBlcnJvciA9IHByb3BUeXBlc1twcm9wTmFt
ZV0ocHJvcHMsIHByb3BOYW1lLCB0YWdOYW1lLCAncHJvcCcsIG51bGwsIFJlYWN0UHJvcFR5cGVz
U2VjcmV0KTtcbiAgICAgIH1cbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmICEo
ZXJyb3IubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4gICAgICAgIC8vIE9ubHkg
bW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90
IG9mIHRoZVxuICAgICAgICAvLyBzYW1lIGVycm9yLlxuICAgICAgICBsb2dnZWRUeXBlRmFpbHVy
ZXNbZXJyb3IubWVzc2FnZV0gPSB0cnVlO1xuXG4gICAgICAgIHZhciBhZGRlbmR1bSA9IGdldERl
Y2xhcmF0aW9uRXJyb3JBZGRlbmR1bShvd25lcik7XG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVf
RU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnRmFpbGVkIGZvcm0gcHJvcFR5
cGU6ICVzJXMnLCBlcnJvci5tZXNzYWdlLCBhZGRlbmR1bSkgOiB2b2lkIDA7XG4gICAgICB9XG4g
ICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gaW5wdXRQcm9wcyBQcm9w
cyBmb3IgZm9ybSBjb21wb25lbnRcbiAgICogQHJldHVybiB7Kn0gY3VycmVudCB2YWx1ZSBvZiB0
aGUgaW5wdXQgZWl0aGVyIGZyb20gdmFsdWUgcHJvcCBvciBsaW5rLlxuICAgKi9cbiAgZ2V0VmFs
dWU6IGZ1bmN0aW9uIChpbnB1dFByb3BzKSB7XG4gICAgaWYgKGlucHV0UHJvcHMudmFsdWVMaW5r
KSB7XG4gICAgICBfYXNzZXJ0VmFsdWVMaW5rKGlucHV0UHJvcHMpO1xuICAgICAgcmV0dXJuIGlu
cHV0UHJvcHMudmFsdWVMaW5rLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gaW5wdXRQcm9wcy52
YWx1ZTtcbiAgfSxcblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGlucHV0UHJvcHMgUHJv
cHMgZm9yIGZvcm0gY29tcG9uZW50XG4gICAqIEByZXR1cm4geyp9IGN1cnJlbnQgY2hlY2tlZCBz
dGF0dXMgb2YgdGhlIGlucHV0IGVpdGhlciBmcm9tIGNoZWNrZWQgcHJvcFxuICAgKiAgICAgICAg
ICAgICBvciBsaW5rLlxuICAgKi9cbiAgZ2V0Q2hlY2tlZDogZnVuY3Rpb24gKGlucHV0UHJvcHMp
IHtcbiAgICBpZiAoaW5wdXRQcm9wcy5jaGVja2VkTGluaykge1xuICAgICAgX2Fzc2VydENoZWNr
ZWRMaW5rKGlucHV0UHJvcHMpO1xuICAgICAgcmV0dXJuIGlucHV0UHJvcHMuY2hlY2tlZExpbmsu
dmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBpbnB1dFByb3BzLmNoZWNrZWQ7XG4gIH0sXG5cbiAg
LyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBpbnB1dFByb3BzIFByb3BzIGZvciBmb3JtIGNvbXBv
bmVudFxuICAgKiBAcGFyYW0ge1N5bnRoZXRpY0V2ZW50fSBldmVudCBjaGFuZ2UgZXZlbnQgdG8g
aGFuZGxlXG4gICAqL1xuICBleGVjdXRlT25DaGFuZ2U6IGZ1bmN0aW9uIChpbnB1dFByb3BzLCBl
dmVudCkge1xuICAgIGlmIChpbnB1dFByb3BzLnZhbHVlTGluaykge1xuICAgICAgX2Fzc2VydFZh
bHVlTGluayhpbnB1dFByb3BzKTtcbiAgICAgIHJldHVybiBpbnB1dFByb3BzLnZhbHVlTGluay5y
ZXF1ZXN0Q2hhbmdlKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChpbnB1dFBy
b3BzLmNoZWNrZWRMaW5rKSB7XG4gICAgICBfYXNzZXJ0Q2hlY2tlZExpbmsoaW5wdXRQcm9wcyk7
XG4gICAgICByZXR1cm4gaW5wdXRQcm9wcy5jaGVja2VkTGluay5yZXF1ZXN0Q2hhbmdlKGV2ZW50
LnRhcmdldC5jaGVja2VkKTtcbiAgICB9IGVsc2UgaWYgKGlucHV0UHJvcHMub25DaGFuZ2UpIHtc
biAgICAgIHJldHVybiBpbnB1dFByb3BzLm9uQ2hhbmdlLmNhbGwodW5kZWZpbmVkLCBldmVudCk7
XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IExpbmtlZFZhbHVlVXRpbHM7XG5c
blxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVs
ZXMvcmVhY3QtZG9tL2xpYi9MaW5rZWRWYWx1ZVV0aWxzLmpzXG4vLyBtb2R1bGUgaWQgPSA0MFxu
Ly8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipcbiAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQsIEZh
Y2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNl
IGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRo
ZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0
cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3Vu
ZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAq
L1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfcHJvZEludmFyaWFudCA9IHJlcXVpcmUoJy4vcmVh
Y3RQcm9kSW52YXJpYW50Jyk7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKCdmYmpzL2xpYi9p
bnZhcmlhbnQnKTtcblxudmFyIGluamVjdGVkID0gZmFsc2U7XG5cbnZhciBSZWFjdENvbXBvbmVu
dEVudmlyb25tZW50ID0ge1xuICAvKipcbiAgICogT3B0aW9uYWxseSBpbmplY3RhYmxlIGhvb2sg
Zm9yIHN3YXBwaW5nIG91dCBtb3VudCBpbWFnZXMgaW4gdGhlIG1pZGRsZSBvZlxuICAgKiB0aGUg
dHJlZS5cbiAgICovXG4gIHJlcGxhY2VOb2RlV2l0aE1hcmt1cDogbnVsbCxcblxuICAvKipcbiAg
ICogT3B0aW9uYWxseSBpbmplY3RhYmxlIGhvb2sgZm9yIHByb2Nlc3NpbmcgYSBxdWV1ZSBvZiBj
aGlsZCB1cGRhdGVzLiBXaWxsXG4gICAqIGxhdGVyIG1vdmUgaW50byBNdWx0aUNoaWxkQ29tcG9u
ZW50cy5cbiAgICovXG4gIHByb2Nlc3NDaGlsZHJlblVwZGF0ZXM6IG51bGwsXG5cbiAgaW5qZWN0
aW9uOiB7XG4gICAgaW5qZWN0RW52aXJvbm1lbnQ6IGZ1bmN0aW9uIChlbnZpcm9ubWVudCkge1xu
ICAgICAgISFpbmplY3RlZCA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicg
PyBpbnZhcmlhbnQoZmFsc2UsICdSZWFjdENvbXBvc2l0ZUNvbXBvbmVudDogaW5qZWN0RW52aXJv
bm1lbnQoKSBjYW4gb25seSBiZSBjYWxsZWQgb25jZS4nKSA6IF9wcm9kSW52YXJpYW50KCcxMDQn
KSA6IHZvaWQgMDtcbiAgICAgIFJlYWN0Q29tcG9uZW50RW52aXJvbm1lbnQucmVwbGFjZU5vZGVX
aXRoTWFya3VwID0gZW52aXJvbm1lbnQucmVwbGFjZU5vZGVXaXRoTWFya3VwO1xuICAgICAgUmVh
Y3RDb21wb25lbnRFbnZpcm9ubWVudC5wcm9jZXNzQ2hpbGRyZW5VcGRhdGVzID0gZW52aXJvbm1l
bnQucHJvY2Vzc0NoaWxkcmVuVXBkYXRlcztcbiAgICAgIGluamVjdGVkID0gdHJ1ZTtcbiAgICB9
XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudDtc
blxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9k
dWxlcy9yZWFjdC1kb20vbGliL1JlYWN0Q29tcG9uZW50RW52aXJvbm1lbnQuanNcbi8vIG1vZHVs
ZSBpZCA9IDQxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAy
MDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpc
biAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNl
bnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBv
ZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmln
aHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9y
eS5cbiAqXG4gKiBAdHlwZWNoZWNrc1xuICogXG4gKi9cblxuLyplc2xpbnQtZGlzYWJsZSBuby1z
ZWxmLWNvbXBhcmUgKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSBP
YmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIGlubGluZWQgT2JqZWN0
LmlzIHBvbHlmaWxsIHRvIGF2b2lkIHJlcXVpcmluZyBjb25zdW1lcnMgc2hpcCB0aGVpciBvd25c
biAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3Jp
cHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9pc1xuICovXG5mdW5jdGlvbiBpcyh4
LCB5KSB7XG4gIC8vIFNhbWVWYWx1ZSBhbGdvcml0aG1cbiAgaWYgKHggPT09IHkpIHtcbiAgICAv
LyBTdGVwcyAxLTUsIDctMTBcbiAgICAvLyBTdGVwcyA2LmItNi5lOiArMCAhPSAtMFxuICAgIC8v
IEFkZGVkIHRoZSBub256ZXJvIHkgY2hlY2sgdG8gbWFrZSBGbG93IGhhcHB5LCBidXQgaXQgaXMg
cmVkdW5kYW50XG4gICAgcmV0dXJuIHggIT09IDAgfHwgeSAhPT0gMCB8fCAxIC8geCA9PT0gMSAv
IHk7XG4gIH0gZWxzZSB7XG4gICAgLy8gU3RlcCA2LmE6IE5hTiA9PSBOYU5cbiAgICByZXR1cm4g
eCAhPT0geCAmJiB5ICE9PSB5O1xuICB9XG59XG5cbi8qKlxuICogUGVyZm9ybXMgZXF1YWxpdHkg
YnkgaXRlcmF0aW5nIHRocm91Z2gga2V5cyBvbiBhbiBvYmplY3QgYW5kIHJldHVybmluZyBmYWxz
ZVxuICogd2hlbiBhbnkga2V5IGhhcyB2YWx1ZXMgd2hpY2ggYXJlIG5vdCBzdHJpY3RseSBlcXVh
bCBiZXR3ZWVuIHRoZSBhcmd1bWVudHMuXG4gKiBSZXR1cm5zIHRydWUgd2hlbiB0aGUgdmFsdWVz
IG9mIGFsbCBrZXlzIGFyZSBzdHJpY3RseSBlcXVhbC5cbiAqL1xuZnVuY3Rpb24gc2hhbGxvd0Vx
dWFsKG9iakEsIG9iakIpIHtcbiAgaWYgKGlzKG9iakEsIG9iakIpKSB7XG4gICAgcmV0dXJuIHRy
dWU7XG4gIH1cblxuICBpZiAodHlwZW9mIG9iakEgIT09ICdvYmplY3QnIHx8IG9iakEgPT09IG51
bGwgfHwgdHlwZW9mIG9iakIgIT09ICdvYmplY3QnIHx8IG9iakIgPT09IG51bGwpIHtcbiAgICBy
ZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIga2V5c0EgPSBPYmplY3Qua2V5cyhvYmpBKTtcbiAg
dmFyIGtleXNCID0gT2JqZWN0LmtleXMob2JqQik7XG5cbiAgaWYgKGtleXNBLmxlbmd0aCAhPT0g
a2V5c0IubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gVGVzdCBmb3Ig
QSdzIGtleXMgZGlmZmVyZW50IGZyb20gQi5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzQS5s
ZW5ndGg7IGkrKykge1xuICAgIGlmICghaGFzT3duUHJvcGVydHkuY2FsbChvYmpCLCBrZXlzQVtp
XSkgfHwgIWlzKG9iakFba2V5c0FbaV1dLCBvYmpCW2tleXNBW2ldXSkpIHtcbiAgICAgIHJldHVy
biBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxubW9kdWxlLmV4cG9y
dHMgPSBzaGFsbG93RXF1YWw7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZP
T1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvZmJqcy9saWIvc2hhbGxvd0VxdWFsLmpzXG4vLyBtb2R1
bGUgaWQgPSA0MlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipcbiAqIENvcHlyaWdodCAyMDEz
LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAq
IFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNl
IGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0
aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRz
IGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5c
biAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEdpdmVuIGEgYHByZXZFbGVtZW50
YCBhbmQgYG5leHRFbGVtZW50YCwgZGV0ZXJtaW5lcyBpZiB0aGUgZXhpc3RpbmdcbiAqIGluc3Rh
bmNlIHNob3VsZCBiZSB1cGRhdGVkIGFzIG9wcG9zZWQgdG8gYmVpbmcgZGVzdHJveWVkIG9yIHJl
cGxhY2VkIGJ5IGEgbmV3XG4gKiBpbnN0YW5jZS4gQm90aCBhcmd1bWVudHMgYXJlIGVsZW1lbnRz
LiBUaGlzIGVuc3VyZXMgdGhhdCB0aGlzIGxvZ2ljIGNhblxuICogb3BlcmF0ZSBvbiBzdGF0ZWxl
c3MgdHJlZXMgd2l0aG91dCBhbnkgYmFja2luZyBpbnN0YW5jZS5cbiAqXG4gKiBAcGFyYW0gez9v
YmplY3R9IHByZXZFbGVtZW50XG4gKiBAcGFyYW0gez9vYmplY3R9IG5leHRFbGVtZW50XG4gKiBA
cmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBleGlzdGluZyBpbnN0YW5jZSBzaG91bGQgYmUg
dXBkYXRlZC5cbiAqIEBwcm90ZWN0ZWRcbiAqL1xuXG5mdW5jdGlvbiBzaG91bGRVcGRhdGVSZWFj
dENvbXBvbmVudChwcmV2RWxlbWVudCwgbmV4dEVsZW1lbnQpIHtcbiAgdmFyIHByZXZFbXB0eSA9
IHByZXZFbGVtZW50ID09PSBudWxsIHx8IHByZXZFbGVtZW50ID09PSBmYWxzZTtcbiAgdmFyIG5l
eHRFbXB0eSA9IG5leHRFbGVtZW50ID09PSBudWxsIHx8IG5leHRFbGVtZW50ID09PSBmYWxzZTtc
biAgaWYgKHByZXZFbXB0eSB8fCBuZXh0RW1wdHkpIHtcbiAgICByZXR1cm4gcHJldkVtcHR5ID09
PSBuZXh0RW1wdHk7XG4gIH1cblxuICB2YXIgcHJldlR5cGUgPSB0eXBlb2YgcHJldkVsZW1lbnQ7
XG4gIHZhciBuZXh0VHlwZSA9IHR5cGVvZiBuZXh0RWxlbWVudDtcbiAgaWYgKHByZXZUeXBlID09
PSAnc3RyaW5nJyB8fCBwcmV2VHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gbmV4dFR5
cGUgPT09ICdzdHJpbmcnIHx8IG5leHRUeXBlID09PSAnbnVtYmVyJztcbiAgfSBlbHNlIHtcbiAg
ICByZXR1cm4gbmV4dFR5cGUgPT09ICdvYmplY3QnICYmIHByZXZFbGVtZW50LnR5cGUgPT09IG5l
eHRFbGVtZW50LnR5cGUgJiYgcHJldkVsZW1lbnQua2V5ID09PSBuZXh0RWxlbWVudC5rZXk7XG4g
IH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG91bGRVcGRhdGVSZWFjdENvbXBvbmVudDtcblxu
XG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxl
cy9yZWFjdC1kb20vbGliL3Nob3VsZFVwZGF0ZVJlYWN0Q29tcG9uZW50LmpzXG4vLyBtb2R1bGUg
aWQgPSA0M1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXBy
ZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRo
aXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZv
dW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlz
IHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNh
biBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAq
XG4gKiBcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRXNjYXBlIGFuZCB3cmFwIGtl
eSBzbyBpdCBpcyBzYWZlIHRvIHVzZSBhcyBhIHJlYWN0aWRcbiAqXG4gKiBAcGFyYW0ge3N0cmlu
Z30ga2V5IHRvIGJlIGVzY2FwZWQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSBlc2NhcGVkIGtl
eS5cbiAqL1xuXG5mdW5jdGlvbiBlc2NhcGUoa2V5KSB7XG4gIHZhciBlc2NhcGVSZWdleCA9IC9b
PTpdL2c7XG4gIHZhciBlc2NhcGVyTG9va3VwID0ge1xuICAgICc9JzogJz0wJyxcbiAgICAnOic6
ICc9MidcbiAgfTtcbiAgdmFyIGVzY2FwZWRTdHJpbmcgPSAoJycgKyBrZXkpLnJlcGxhY2UoZXNj
YXBlUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgIHJldHVybiBlc2NhcGVyTG9va3VwW21h
dGNoXTtcbiAgfSk7XG5cbiAgcmV0dXJuICckJyArIGVzY2FwZWRTdHJpbmc7XG59XG5cbi8qKlxu
ICogVW5lc2NhcGUgYW5kIHVud3JhcCBrZXkgZm9yIGh1bWFuLXJlYWRhYmxlIGRpc3BsYXlcbiAq
XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IHRvIHVuZXNjYXBlLlxuICogQHJldHVybiB7c3RyaW5n
fSB0aGUgdW5lc2NhcGVkIGtleS5cbiAqL1xuZnVuY3Rpb24gdW5lc2NhcGUoa2V5KSB7XG4gIHZh
ciB1bmVzY2FwZVJlZ2V4ID0gLyg9MHw9MikvZztcbiAgdmFyIHVuZXNjYXBlckxvb2t1cCA9IHtc
biAgICAnPTAnOiAnPScsXG4gICAgJz0yJzogJzonXG4gIH07XG4gIHZhciBrZXlTdWJzdHJpbmcg
PSBrZXlbMF0gPT09ICcuJyAmJiBrZXlbMV0gPT09ICckJyA/IGtleS5zdWJzdHJpbmcoMikgOiBr
ZXkuc3Vic3RyaW5nKDEpO1xuXG4gIHJldHVybiAoJycgKyBrZXlTdWJzdHJpbmcpLnJlcGxhY2Uo
dW5lc2NhcGVSZWdleCwgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgcmV0dXJuIHVuZXNjYXBlckxv
b2t1cFttYXRjaF07XG4gIH0pO1xufVxuXG52YXIgS2V5RXNjYXBlVXRpbHMgPSB7XG4gIGVzY2Fw
ZTogZXNjYXBlLFxuICB1bmVzY2FwZTogdW5lc2NhcGVcbn07XG5cbm1vZHVsZS5leHBvcnRzID0g
S2V5RXNjYXBlVXRpbHM7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RF
UlxuLy8gLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9LZXlFc2NhcGVVdGlscy5qc1xuLy8g
bW9kdWxlIGlkID0gNDRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyoqXG4gKiBDb3B5cmlnaHQg
MjAxNS1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAq
XG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGlj
ZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkg
b2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJp
Z2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3Rv
cnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9wcm9kSW52YXJpYW50ID0gcmVx
dWlyZSgnLi9yZWFjdFByb2RJbnZhcmlhbnQnKTtcblxudmFyIFJlYWN0Q3VycmVudE93bmVyID0g
cmVxdWlyZSgncmVhY3QvbGliL1JlYWN0Q3VycmVudE93bmVyJyk7XG52YXIgUmVhY3RJbnN0YW5j
ZU1hcCA9IHJlcXVpcmUoJy4vUmVhY3RJbnN0YW5jZU1hcCcpO1xudmFyIFJlYWN0SW5zdHJ1bWVu
dGF0aW9uID0gcmVxdWlyZSgnLi9SZWFjdEluc3RydW1lbnRhdGlvbicpO1xudmFyIFJlYWN0VXBk
YXRlcyA9IHJlcXVpcmUoJy4vUmVhY3RVcGRhdGVzJyk7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1
aXJlKCdmYmpzL2xpYi9pbnZhcmlhbnQnKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9s
aWIvd2FybmluZycpO1xuXG5mdW5jdGlvbiBlbnF1ZXVlVXBkYXRlKGludGVybmFsSW5zdGFuY2Up
IHtcbiAgUmVhY3RVcGRhdGVzLmVucXVldWVVcGRhdGUoaW50ZXJuYWxJbnN0YW5jZSk7XG59XG5c
bmZ1bmN0aW9uIGZvcm1hdFVuZXhwZWN0ZWRBcmd1bWVudChhcmcpIHtcbiAgdmFyIHR5cGUgPSB0
eXBlb2YgYXJnO1xuICBpZiAodHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gdHlwZTtc
biAgfVxuICB2YXIgZGlzcGxheU5hbWUgPSBhcmcuY29uc3RydWN0b3IgJiYgYXJnLmNvbnN0cnVj
dG9yLm5hbWUgfHwgdHlwZTtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhhcmcpO1xuICBpZiAo
a2V5cy5sZW5ndGggPiAwICYmIGtleXMubGVuZ3RoIDwgMjApIHtcbiAgICByZXR1cm4gZGlzcGxh
eU5hbWUgKyAnIChrZXlzOiAnICsga2V5cy5qb2luKCcsICcpICsgJyknO1xuICB9XG4gIHJldHVy
biBkaXNwbGF5TmFtZTtcbn1cblxuZnVuY3Rpb24gZ2V0SW50ZXJuYWxJbnN0YW5jZVJlYWR5Rm9y
VXBkYXRlKHB1YmxpY0luc3RhbmNlLCBjYWxsZXJOYW1lKSB7XG4gIHZhciBpbnRlcm5hbEluc3Rh
bmNlID0gUmVhY3RJbnN0YW5jZU1hcC5nZXQocHVibGljSW5zdGFuY2UpO1xuICBpZiAoIWludGVy
bmFsSW5zdGFuY2UpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0
aW9uJykge1xuICAgICAgdmFyIGN0b3IgPSBwdWJsaWNJbnN0YW5jZS5jb25zdHJ1Y3RvcjtcbiAg
ICAgIC8vIE9ubHkgd2FybiB3aGVuIHdlIGhhdmUgYSBjYWxsZXJOYW1lLiBPdGhlcndpc2Ugd2Ug
c2hvdWxkIGJlIHNpbGVudC5cbiAgICAgIC8vIFdlJ3JlIHByb2JhYmx5IGNhbGxpbmcgZnJvbSBl
bnF1ZXVlQ2FsbGJhY2suIFdlIGRvbid0IHdhbnQgdG8gd2FyblxuICAgICAgLy8gdGhlcmUgYmVj
YXVzZSB3ZSBhbHJlYWR5IHdhcm5lZCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgbGlmZWN5Y2xlIG1l
dGhvZC5cbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJu
aW5nKCFjYWxsZXJOYW1lLCAnJXMoLi4uKTogQ2FuIG9ubHkgdXBkYXRlIGEgbW91bnRlZCBvciBt
b3VudGluZyBjb21wb25lbnQuICcgKyAnVGhpcyB1c3VhbGx5IG1lYW5zIHlvdSBjYWxsZWQgJXMo
KSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LiAnICsgJ1RoaXMgaXMgYSBuby1vcC4gUGxlYXNl
IGNoZWNrIHRoZSBjb2RlIGZvciB0aGUgJXMgY29tcG9uZW50LicsIGNhbGxlck5hbWUsIGNhbGxl
ck5hbWUsIGN0b3IgJiYgKGN0b3IuZGlzcGxheU5hbWUgfHwgY3Rvci5uYW1lKSB8fCAnUmVhY3RD
bGFzcycpIDogdm9pZCAwO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChw
cm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgcHJvY2Vzcy5lbnYu
Tk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoUmVhY3RDdXJyZW50T3duZXIuY3Vy
cmVudCA9PSBudWxsLCAnJXMoLi4uKTogQ2Fubm90IHVwZGF0ZSBkdXJpbmcgYW4gZXhpc3Rpbmcg
c3RhdGUgdHJhbnNpdGlvbiAoc3VjaCBhcyAnICsgXCJ3aXRoaW4gYHJlbmRlcmAgb3IgYW5vdGhl
ciBjb21wb25lbnQncyBjb25zdHJ1Y3RvcikuIFJlbmRlciBtZXRob2RzIFwiICsgJ3Nob3VsZCBi
ZSBhIHB1cmUgZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlOyBjb25zdHJ1Y3RvciAnICsgJ3Np
ZGUtZWZmZWN0cyBhcmUgYW4gYW50aS1wYXR0ZXJuLCBidXQgY2FuIGJlIG1vdmVkIHRvICcgKyAn
YGNvbXBvbmVudFdpbGxNb3VudGAuJywgY2FsbGVyTmFtZSkgOiB2b2lkIDA7XG4gIH1cblxuICBy
ZXR1cm4gaW50ZXJuYWxJbnN0YW5jZTtcbn1cblxuLyoqXG4gKiBSZWFjdFVwZGF0ZVF1ZXVlIGFs
bG93cyBmb3Igc3RhdGUgdXBkYXRlcyB0byBiZSBzY2hlZHVsZWQgaW50byBhIGxhdGVyXG4gKiBy
ZWNvbmNpbGlhdGlvbiBzdGVwLlxuICovXG52YXIgUmVhY3RVcGRhdGVRdWV1ZSA9IHtcbiAgLyoq
XG4gICAqIENoZWNrcyB3aGV0aGVyIG9yIG5vdCB0aGlzIGNvbXBvc2l0ZSBjb21wb25lbnQgaXMg
bW91bnRlZC5cbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5z
dGFuY2Ugd2Ugd2FudCB0byB0ZXN0LlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIG1v
dW50ZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICogQHByb3RlY3RlZFxuICAgKiBAZmluYWxcbiAg
ICovXG4gIGlzTW91bnRlZDogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlKSB7XG4gICAgaWYgKHBy
b2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhciBvd25lciA9
IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQ7XG4gICAgICBpZiAob3duZXIgIT09IG51bGwpIHtc
biAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmco
b3duZXIuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyLCAnJXMgaXMgYWNjZXNzaW5nIGlzTW91bnRl
ZCBpbnNpZGUgaXRzIHJlbmRlcigpIGZ1bmN0aW9uLiAnICsgJ3JlbmRlcigpIHNob3VsZCBiZSBh
IHB1cmUgZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlLiBJdCBzaG91bGQgJyArICduZXZlciBh
Y2Nlc3Mgc29tZXRoaW5nIHRoYXQgcmVxdWlyZXMgc3RhbGUgZGF0YSBmcm9tIHRoZSBwcmV2aW91
cyAnICsgJ3JlbmRlciwgc3VjaCBhcyByZWZzLiBNb3ZlIHRoaXMgbG9naWMgdG8gY29tcG9uZW50
RGlkTW91bnQgYW5kICcgKyAnY29tcG9uZW50RGlkVXBkYXRlIGluc3RlYWQuJywgb3duZXIuZ2V0
TmFtZSgpIHx8ICdBIGNvbXBvbmVudCcpIDogdm9pZCAwO1xuICAgICAgICBvd25lci5fd2FybmVk
QWJvdXRSZWZzSW5SZW5kZXIgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgaW50ZXJu
YWxJbnN0YW5jZSA9IFJlYWN0SW5zdGFuY2VNYXAuZ2V0KHB1YmxpY0luc3RhbmNlKTtcbiAgICBp
ZiAoaW50ZXJuYWxJbnN0YW5jZSkge1xuICAgICAgLy8gRHVyaW5nIGNvbXBvbmVudFdpbGxNb3Vu
dCBhbmQgcmVuZGVyIHRoaXMgd2lsbCBzdGlsbCBiZSBudWxsIGJ1dCBhZnRlclxuICAgICAgLy8g
dGhhdCB3aWxsIGFsd2F5cyByZW5kZXIgdG8gc29tZXRoaW5nLiBBdCBsZWFzdCBmb3Igbm93LiBT
byB3ZSBjYW4gdXNlXG4gICAgICAvLyB0aGlzIGhhY2suXG4gICAgICByZXR1cm4gISFpbnRlcm5h
bEluc3RhbmNlLl9yZW5kZXJlZENvbXBvbmVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJu
IGZhbHNlO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogRW5xdWV1ZSBhIGNhbGxiYWNrIHRo
YXQgd2lsbCBiZSBleGVjdXRlZCBhZnRlciBhbGwgdGhlIHBlbmRpbmcgdXBkYXRlc1xuICAgKiBo
YXZlIHByb2Nlc3NlZC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0
YW5jZSBUaGUgaW5zdGFuY2UgdG8gdXNlIGFzIGB0aGlzYCBjb250ZXh0LlxuICAgKiBAcGFyYW0g
ez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIHN0YXRlIGlzIHVwZGF0ZWQuXG4gICAq
IEBwYXJhbSB7c3RyaW5nfSBjYWxsZXJOYW1lIE5hbWUgb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb24g
aW4gdGhlIHB1YmxpYyBBUEkuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZUNhbGxi
YWNrOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4g
ICAgUmVhY3RVcGRhdGVRdWV1ZS52YWxpZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBjYWxsZXJOYW1l
KTtcbiAgICB2YXIgaW50ZXJuYWxJbnN0YW5jZSA9IGdldEludGVybmFsSW5zdGFuY2VSZWFkeUZv
clVwZGF0ZShwdWJsaWNJbnN0YW5jZSk7XG5cbiAgICAvLyBQcmV2aW91c2x5IHdlIHdvdWxkIHRo
cm93IGFuIGVycm9yIGlmIHdlIGRpZG4ndCBoYXZlIGFuIGludGVybmFsXG4gICAgLy8gaW5zdGFu
Y2UuIFNpbmNlIHdlIHdhbnQgdG8gbWFrZSBpdCBhIG5vLW9wIGluc3RlYWQsIHdlIG1pcnJvciB0
aGUgc2FtZVxuICAgIC8vIGJlaGF2aW9yIHdlIGhhdmUgaW4gb3RoZXIgZW5xdWV1ZSogbWV0aG9k
cy5cbiAgICAvLyBXZSBhbHNvIG5lZWQgdG8gaWdub3JlIGNhbGxiYWNrcyBpbiBjb21wb25lbnRX
aWxsTW91bnQuIFNlZVxuICAgIC8vIGVucXVldWVVcGRhdGVzLlxuICAgIGlmICghaW50ZXJuYWxJ
bnN0YW5jZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGludGVybmFs
SW5zdGFuY2UuX3BlbmRpbmdDYWxsYmFja3MpIHtcbiAgICAgIGludGVybmFsSW5zdGFuY2UuX3Bl
bmRpbmdDYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGludGVy
bmFsSW5zdGFuY2UuX3BlbmRpbmdDYWxsYmFja3MgPSBbY2FsbGJhY2tdO1xuICAgIH1cbiAgICAv
LyBUT0RPOiBUaGUgY2FsbGJhY2sgaGVyZSBpcyBpZ25vcmVkIHdoZW4gc2V0U3RhdGUgaXMgY2Fs
bGVkIGZyb21cbiAgICAvLyBjb21wb25lbnRXaWxsTW91bnQuIEVpdGhlciBmaXggaXQgb3IgZGlz
YWxsb3cgZG9pbmcgc28gY29tcGxldGVseSBpblxuICAgIC8vIGZhdm9yIG9mIGdldEluaXRpYWxT
dGF0ZS4gQWx0ZXJuYXRpdmVseSwgd2UgY2FuIGRpc2FsbG93XG4gICAgLy8gY29tcG9uZW50V2ls
bE1vdW50IGR1cmluZyBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuXG4gICAgZW5xdWV1ZVVwZGF0ZShp
bnRlcm5hbEluc3RhbmNlKTtcbiAgfSxcblxuICBlbnF1ZXVlQ2FsbGJhY2tJbnRlcm5hbDogZnVu
Y3Rpb24gKGludGVybmFsSW5zdGFuY2UsIGNhbGxiYWNrKSB7XG4gICAgaWYgKGludGVybmFsSW5z
dGFuY2UuX3BlbmRpbmdDYWxsYmFja3MpIHtcbiAgICAgIGludGVybmFsSW5zdGFuY2UuX3BlbmRp
bmdDYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGludGVybmFs
SW5zdGFuY2UuX3BlbmRpbmdDYWxsYmFja3MgPSBbY2FsbGJhY2tdO1xuICAgIH1cbiAgICBlbnF1
ZXVlVXBkYXRlKGludGVybmFsSW5zdGFuY2UpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBGb3JjZXMg
YW4gdXBkYXRlLiBUaGlzIHNob3VsZCBvbmx5IGJlIGludm9rZWQgd2hlbiBpdCBpcyBrbm93biB3
aXRoXG4gICAqIGNlcnRhaW50eSB0aGF0IHdlIGFyZSAqKm5vdCoqIGluIGEgRE9NIHRyYW5zYWN0
aW9uLlxuICAgKlxuICAgKiBZb3UgbWF5IHdhbnQgdG8gY2FsbCB0aGlzIHdoZW4geW91IGtub3cg
dGhhdCBzb21lIGRlZXBlciBhc3BlY3Qgb2YgdGhlXG4gICAqIGNvbXBvbmVudCdzIHN0YXRlIGhh
cyBjaGFuZ2VkIGJ1dCBgc2V0U3RhdGVgIHdhcyBub3QgY2FsbGVkLlxuICAgKlxuICAgKiBUaGlz
IHdpbGwgbm90IGludm9rZSBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYCwgYnV0IGl0IHdpbGwgaW52
b2tlXG4gICAqIGBjb21wb25lbnRXaWxsVXBkYXRlYCBhbmQgYGNvbXBvbmVudERpZFVwZGF0ZWAu
XG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3Rh
bmNlIHRoYXQgc2hvdWxkIHJlcmVuZGVyLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVl
dWVGb3JjZVVwZGF0ZTogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlKSB7XG4gICAgdmFyIGludGVy
bmFsSW5zdGFuY2UgPSBnZXRJbnRlcm5hbEluc3RhbmNlUmVhZHlGb3JVcGRhdGUocHVibGljSW5z
dGFuY2UsICdmb3JjZVVwZGF0ZScpO1xuXG4gICAgaWYgKCFpbnRlcm5hbEluc3RhbmNlKSB7XG4g
ICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaW50ZXJuYWxJbnN0YW5jZS5fcGVuZGluZ0ZvcmNl
VXBkYXRlID0gdHJ1ZTtcblxuICAgIGVucXVldWVVcGRhdGUoaW50ZXJuYWxJbnN0YW5jZSk7XG4g
IH0sXG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIGFsbCBvZiB0aGUgc3RhdGUuIEFsd2F5cyB1c2Ug
dGhpcyBvciBgc2V0U3RhdGVgIHRvIG11dGF0ZSBzdGF0ZS5cbiAgICogWW91IHNob3VsZCB0cmVh
dCBgdGhpcy5zdGF0ZWAgYXMgaW1tdXRhYmxlLlxuICAgKlxuICAgKiBUaGVyZSBpcyBubyBndWFy
YW50ZWUgdGhhdCBgdGhpcy5zdGF0ZWAgd2lsbCBiZSBpbW1lZGlhdGVseSB1cGRhdGVkLCBzb1xu
ICAgKiBhY2Nlc3NpbmcgYHRoaXMuc3RhdGVgIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QgbWF5
IHJldHVybiB0aGUgb2xkIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1
YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBh
cmFtIHtvYmplY3R9IGNvbXBsZXRlU3RhdGUgTmV4dCBzdGF0ZS5cbiAgICogQGludGVybmFsXG4g
ICAqL1xuICBlbnF1ZXVlUmVwbGFjZVN0YXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIGNv
bXBsZXRlU3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBnZXRJ
bnRlcm5hbEluc3RhbmNlUmVhZHlGb3JVcGRhdGUocHVibGljSW5zdGFuY2UsICdyZXBsYWNlU3Rh
dGUnKTtcblxuICAgIGlmICghaW50ZXJuYWxJbnN0YW5jZSkge1xuICAgICAgcmV0dXJuO1xuICAg
IH1cblxuICAgIGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdTdGF0ZVF1ZXVlID0gW2NvbXBsZXRl
U3RhdGVdO1xuICAgIGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdSZXBsYWNlU3RhdGUgPSB0cnVl
O1xuXG4gICAgLy8gRnV0dXJlLXByb29mIDE1LjVcbiAgICBpZiAoY2FsbGJhY2sgIT09IHVuZGVm
aW5lZCAmJiBjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgUmVhY3RVcGRhdGVRdWV1ZS52YWxp
ZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCAncmVwbGFjZVN0YXRlJyk7XG4gICAgICBpZiAoaW50ZXJu
YWxJbnN0YW5jZS5fcGVuZGluZ0NhbGxiYWNrcykge1xuICAgICAgICBpbnRlcm5hbEluc3RhbmNl
Ll9wZW5kaW5nQ2FsbGJhY2tzLnB1c2goY2FsbGJhY2spO1xuICAgICAgfSBlbHNlIHtcbiAgICAg
ICAgaW50ZXJuYWxJbnN0YW5jZS5fcGVuZGluZ0NhbGxiYWNrcyA9IFtjYWxsYmFja107XG4gICAg
ICB9XG4gICAgfVxuXG4gICAgZW5xdWV1ZVVwZGF0ZShpbnRlcm5hbEluc3RhbmNlKTtcbiAgfSxc
blxuICAvKipcbiAgICogU2V0cyBhIHN1YnNldCBvZiB0aGUgc3RhdGUuIFRoaXMgb25seSBleGlz
dHMgYmVjYXVzZSBfcGVuZGluZ1N0YXRlIGlzXG4gICAqIGludGVybmFsLiBUaGlzIHByb3ZpZGVz
IGEgbWVyZ2luZyBzdHJhdGVneSB0aGF0IGlzIG5vdCBhdmFpbGFibGUgdG8gZGVlcFxuICAgKiBw
cm9wZXJ0aWVzIHdoaWNoIGlzIGNvbmZ1c2luZy4gVE9ETzogRXhwb3NlIHBlbmRpbmdTdGF0ZSBv
ciBkb24ndCB1c2UgaXRcbiAgICogZHVyaW5nIHRoZSBtZXJnZS5cbiAgICpcbiAgICogQHBhcmFt
IHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVy
ZW5kZXIuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJ0aWFsU3RhdGUgTmV4dCBwYXJ0aWFsIHN0
YXRlIHRvIGJlIG1lcmdlZCB3aXRoIHN0YXRlLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVu
cXVldWVTZXRTdGF0ZTogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlLCBwYXJ0aWFsU3RhdGUpIHtc
biAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAg
UmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uU2V0U3RhdGUoKTtcbiAgICAgIHByb2Nl
c3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKHBhcnRpYWxTdGF0ZSAh
PSBudWxsLCAnc2V0U3RhdGUoLi4uKTogWW91IHBhc3NlZCBhbiB1bmRlZmluZWQgb3IgbnVsbCBz
dGF0ZSBvYmplY3Q7ICcgKyAnaW5zdGVhZCwgdXNlIGZvcmNlVXBkYXRlKCkuJykgOiB2b2lkIDA7
XG4gICAgfVxuXG4gICAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBnZXRJbnRlcm5hbEluc3RhbmNl
UmVhZHlGb3JVcGRhdGUocHVibGljSW5zdGFuY2UsICdzZXRTdGF0ZScpO1xuXG4gICAgaWYgKCFp
bnRlcm5hbEluc3RhbmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHF1ZXVl
ID0gaW50ZXJuYWxJbnN0YW5jZS5fcGVuZGluZ1N0YXRlUXVldWUgfHwgKGludGVybmFsSW5zdGFu
Y2UuX3BlbmRpbmdTdGF0ZVF1ZXVlID0gW10pO1xuICAgIHF1ZXVlLnB1c2gocGFydGlhbFN0YXRl
KTtcblxuICAgIGVucXVldWVVcGRhdGUoaW50ZXJuYWxJbnN0YW5jZSk7XG4gIH0sXG5cbiAgZW5x
dWV1ZUVsZW1lbnRJbnRlcm5hbDogZnVuY3Rpb24gKGludGVybmFsSW5zdGFuY2UsIG5leHRFbGVt
ZW50LCBuZXh0Q29udGV4dCkge1xuICAgIGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdFbGVtZW50
ID0gbmV4dEVsZW1lbnQ7XG4gICAgLy8gVE9ETzogaW50cm9kdWNlIF9wZW5kaW5nQ29udGV4dCBp
bnN0ZWFkIG9mIHNldHRpbmcgaXQgZGlyZWN0bHkuXG4gICAgaW50ZXJuYWxJbnN0YW5jZS5fY29u
dGV4dCA9IG5leHRDb250ZXh0O1xuICAgIGVucXVldWVVcGRhdGUoaW50ZXJuYWxJbnN0YW5jZSk7
XG4gIH0sXG5cbiAgdmFsaWRhdGVDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBjYWxsZXJO
YW1lKSB7XG4gICAgISghY2FsbGJhY2sgfHwgdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24n
KSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFs
c2UsICclcyguLi4pOiBFeHBlY3RlZCB0aGUgbGFzdCBvcHRpb25hbCBgY2FsbGJhY2tgIGFyZ3Vt
ZW50IHRvIGJlIGEgZnVuY3Rpb24uIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLicsIGNhbGxlck5hbWUs
IGZvcm1hdFVuZXhwZWN0ZWRBcmd1bWVudChjYWxsYmFjaykpIDogX3Byb2RJbnZhcmlhbnQoJzEy
MicsIGNhbGxlck5hbWUsIGZvcm1hdFVuZXhwZWN0ZWRBcmd1bWVudChjYWxsYmFjaykpIDogdm9p
ZCAwO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0VXBkYXRlUXVldWU7XG5cblxu
Ly8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMv
cmVhY3QtZG9tL2xpYi9SZWFjdFVwZGF0ZVF1ZXVlLmpzXG4vLyBtb2R1bGUgaWQgPSA0NVxuLy8g
bW9kdWxlIGNodW5rcyA9IDAiLCIvKipcbiAqIENvcHlyaWdodCAyMDE1LXByZXNlbnQsIEZhY2Vi
b29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNv
ZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxu
ICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVl
LiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBp
biB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3Vz
ZSBzdHJpY3QnO1xuXG52YXIgX2Fzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxu
dmFyIGVtcHR5RnVuY3Rpb24gPSByZXF1aXJlKCdmYmpzL2xpYi9lbXB0eUZ1bmN0aW9uJyk7XG52
YXIgd2FybmluZyA9IHJlcXVpcmUoJ2ZianMvbGliL3dhcm5pbmcnKTtcblxudmFyIHZhbGlkYXRl
RE9NTmVzdGluZyA9IGVtcHR5RnVuY3Rpb247XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAh
PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIC8vIFRoaXMgdmFsaWRhdGlvbiBjb2RlIHdhcyB3cml0dGVu
IGJhc2VkIG9uIHRoZSBIVE1MNSBwYXJzaW5nIHNwZWM6XG4gIC8vIGh0dHBzOi8vaHRtbC5zcGVj
LndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2hhcy1hbi1lbGVtZW50LWluLXNjb3Bl
XG4gIC8vXG4gIC8vIE5vdGU6IHRoaXMgZG9lcyBub3QgY2F0Y2ggYWxsIGludmFsaWQgbmVzdGlu
Zywgbm9yIGRvZXMgaXQgdHJ5IHRvIChhcyBpdCdzXG4gIC8vIG5vdCBjbGVhciB3aGF0IHByYWN0
aWNhbCBiZW5lZml0IGRvaW5nIHNvIHByb3ZpZGVzKTsgaW5zdGVhZCwgd2Ugd2FybiBvbmx5XG4g
IC8vIGZvciBjYXNlcyB3aGVyZSB0aGUgcGFyc2VyIHdpbGwgZ2l2ZSBhIHBhcnNlIHRyZWUgZGlm
ZmVyaW5nIGZyb20gd2hhdCBSZWFjdFxuICAvLyBpbnRlbmRlZC4gRm9yIGV4YW1wbGUsIDxiPjxk
aXY+PC9kaXY+PC9iPiBpcyBpbnZhbGlkIGJ1dCB3ZSBkb24ndCB3YXJuXG4gIC8vIGJlY2F1c2Ug
aXQgc3RpbGwgcGFyc2VzIGNvcnJlY3RseTsgd2UgZG8gd2FybiBmb3Igb3RoZXIgY2FzZXMgbGlr
ZSBuZXN0ZWRcbiAgLy8gPHA+IHRhZ3Mgd2hlcmUgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2Vjb25k
IGVsZW1lbnQgaW1wbGljaXRseSBjbG9zZXMgdGhlXG4gIC8vIGZpcnN0LCBjYXVzaW5nIGEgY29u
ZnVzaW5nIG1lc3MuXG5cbiAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBh
Z2Uvc3ludGF4Lmh0bWwjc3BlY2lhbFxuICB2YXIgc3BlY2lhbFRhZ3MgPSBbJ2FkZHJlc3MnLCAn
YXBwbGV0JywgJ2FyZWEnLCAnYXJ0aWNsZScsICdhc2lkZScsICdiYXNlJywgJ2Jhc2Vmb250Jywg
J2Jnc291bmQnLCAnYmxvY2txdW90ZScsICdib2R5JywgJ2JyJywgJ2J1dHRvbicsICdjYXB0aW9u
JywgJ2NlbnRlcicsICdjb2wnLCAnY29sZ3JvdXAnLCAnZGQnLCAnZGV0YWlscycsICdkaXInLCAn
ZGl2JywgJ2RsJywgJ2R0JywgJ2VtYmVkJywgJ2ZpZWxkc2V0JywgJ2ZpZ2NhcHRpb24nLCAnZmln
dXJlJywgJ2Zvb3RlcicsICdmb3JtJywgJ2ZyYW1lJywgJ2ZyYW1lc2V0JywgJ2gxJywgJ2gyJywg
J2gzJywgJ2g0JywgJ2g1JywgJ2g2JywgJ2hlYWQnLCAnaGVhZGVyJywgJ2hncm91cCcsICdocics
ICdodG1sJywgJ2lmcmFtZScsICdpbWcnLCAnaW5wdXQnLCAnaXNpbmRleCcsICdsaScsICdsaW5r
JywgJ2xpc3RpbmcnLCAnbWFpbicsICdtYXJxdWVlJywgJ21lbnUnLCAnbWVudWl0ZW0nLCAnbWV0
YScsICduYXYnLCAnbm9lbWJlZCcsICdub2ZyYW1lcycsICdub3NjcmlwdCcsICdvYmplY3QnLCAn
b2wnLCAncCcsICdwYXJhbScsICdwbGFpbnRleHQnLCAncHJlJywgJ3NjcmlwdCcsICdzZWN0aW9u
JywgJ3NlbGVjdCcsICdzb3VyY2UnLCAnc3R5bGUnLCAnc3VtbWFyeScsICd0YWJsZScsICd0Ym9k
eScsICd0ZCcsICd0ZW1wbGF0ZScsICd0ZXh0YXJlYScsICd0Zm9vdCcsICd0aCcsICd0aGVhZCcs
ICd0aXRsZScsICd0cicsICd0cmFjaycsICd1bCcsICd3YnInLCAneG1wJ107XG5cbiAgLy8gaHR0
cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjaGFzLWFuLWVs
ZW1lbnQtaW4tc2NvcGVcbiAgdmFyIGluU2NvcGVUYWdzID0gWydhcHBsZXQnLCAnY2FwdGlvbics
ICdodG1sJywgJ3RhYmxlJywgJ3RkJywgJ3RoJywgJ21hcnF1ZWUnLCAnb2JqZWN0JywgJ3RlbXBs
YXRlJyxcblxuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50
YXguaHRtbCNodG1sLWludGVncmF0aW9uLXBvaW50XG4gIC8vIFRPRE86IERpc3Rpbmd1aXNoIGJ5
IG5hbWVzcGFjZSBoZXJlIC0tIGZvciA8dGl0bGU+LCBpbmNsdWRpbmcgaXQgaGVyZVxuICAvLyBl
cnJzIG9uIHRoZSBzaWRlIG9mIGZld2VyIHdhcm5pbmdzXG4gICdmb3JlaWduT2JqZWN0JywgJ2Rl
c2MnLCAndGl0bGUnXTtcblxuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRp
cGFnZS9zeW50YXguaHRtbCNoYXMtYW4tZWxlbWVudC1pbi1idXR0b24tc2NvcGVcbiAgdmFyIGJ1
dHRvblNjb3BlVGFncyA9IGluU2NvcGVUYWdzLmNvbmNhdChbJ2J1dHRvbiddKTtcblxuICAvLyBo
dHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNnZW5lcmF0
ZS1pbXBsaWVkLWVuZC10YWdzXG4gIHZhciBpbXBsaWVkRW5kVGFncyA9IFsnZGQnLCAnZHQnLCAn
bGknLCAnb3B0aW9uJywgJ29wdGdyb3VwJywgJ3AnLCAncnAnLCAncnQnXTtcblxuICB2YXIgZW1w
dHlBbmNlc3RvckluZm8gPSB7XG4gICAgY3VycmVudDogbnVsbCxcblxuICAgIGZvcm1UYWc6IG51
bGwsXG4gICAgYVRhZ0luU2NvcGU6IG51bGwsXG4gICAgYnV0dG9uVGFnSW5TY29wZTogbnVsbCxc
biAgICBub2JyVGFnSW5TY29wZTogbnVsbCxcbiAgICBwVGFnSW5CdXR0b25TY29wZTogbnVsbCxc
blxuICAgIGxpc3RJdGVtVGFnQXV0b2Nsb3Npbmc6IG51bGwsXG4gICAgZGxJdGVtVGFnQXV0b2Ns
b3Npbmc6IG51bGxcbiAgfTtcblxuICB2YXIgdXBkYXRlZEFuY2VzdG9ySW5mbyA9IGZ1bmN0aW9u
IChvbGRJbmZvLCB0YWcsIGluc3RhbmNlKSB7XG4gICAgdmFyIGFuY2VzdG9ySW5mbyA9IF9hc3Np
Z24oe30sIG9sZEluZm8gfHwgZW1wdHlBbmNlc3RvckluZm8pO1xuICAgIHZhciBpbmZvID0geyB0
YWc6IHRhZywgaW5zdGFuY2U6IGluc3RhbmNlIH07XG5cbiAgICBpZiAoaW5TY29wZVRhZ3MuaW5k
ZXhPZih0YWcpICE9PSAtMSkge1xuICAgICAgYW5jZXN0b3JJbmZvLmFUYWdJblNjb3BlID0gbnVs
bDtcbiAgICAgIGFuY2VzdG9ySW5mby5idXR0b25UYWdJblNjb3BlID0gbnVsbDtcbiAgICAgIGFu
Y2VzdG9ySW5mby5ub2JyVGFnSW5TY29wZSA9IG51bGw7XG4gICAgfVxuICAgIGlmIChidXR0b25T
Y29wZVRhZ3MuaW5kZXhPZih0YWcpICE9PSAtMSkge1xuICAgICAgYW5jZXN0b3JJbmZvLnBUYWdJ
bkJ1dHRvblNjb3BlID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBTZWUgcnVsZXMgZm9yICdsaScs
ICdkZCcsICdkdCcgc3RhcnQgdGFncyBpblxuICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3
Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbmJvZHlcbiAgICBpZiAo
c3BlY2lhbFRhZ3MuaW5kZXhPZih0YWcpICE9PSAtMSAmJiB0YWcgIT09ICdhZGRyZXNzJyAmJiB0
YWcgIT09ICdkaXYnICYmIHRhZyAhPT0gJ3AnKSB7XG4gICAgICBhbmNlc3RvckluZm8ubGlzdEl0
ZW1UYWdBdXRvY2xvc2luZyA9IG51bGw7XG4gICAgICBhbmNlc3RvckluZm8uZGxJdGVtVGFnQXV0
b2Nsb3NpbmcgPSBudWxsO1xuICAgIH1cblxuICAgIGFuY2VzdG9ySW5mby5jdXJyZW50ID0gaW5m
bztcblxuICAgIGlmICh0YWcgPT09ICdmb3JtJykge1xuICAgICAgYW5jZXN0b3JJbmZvLmZvcm1U
YWcgPSBpbmZvO1xuICAgIH1cbiAgICBpZiAodGFnID09PSAnYScpIHtcbiAgICAgIGFuY2VzdG9y
SW5mby5hVGFnSW5TY29wZSA9IGluZm87XG4gICAgfVxuICAgIGlmICh0YWcgPT09ICdidXR0b24n
KSB7XG4gICAgICBhbmNlc3RvckluZm8uYnV0dG9uVGFnSW5TY29wZSA9IGluZm87XG4gICAgfVxu
ICAgIGlmICh0YWcgPT09ICdub2JyJykge1xuICAgICAgYW5jZXN0b3JJbmZvLm5vYnJUYWdJblNj
b3BlID0gaW5mbztcbiAgICB9XG4gICAgaWYgKHRhZyA9PT0gJ3AnKSB7XG4gICAgICBhbmNlc3Rv
ckluZm8ucFRhZ0luQnV0dG9uU2NvcGUgPSBpbmZvO1xuICAgIH1cbiAgICBpZiAodGFnID09PSAn
bGknKSB7XG4gICAgICBhbmNlc3RvckluZm8ubGlzdEl0ZW1UYWdBdXRvY2xvc2luZyA9IGluZm87
XG4gICAgfVxuICAgIGlmICh0YWcgPT09ICdkZCcgfHwgdGFnID09PSAnZHQnKSB7XG4gICAgICBh
bmNlc3RvckluZm8uZGxJdGVtVGFnQXV0b2Nsb3NpbmcgPSBpbmZvO1xuICAgIH1cblxuICAgIHJl
dHVybiBhbmNlc3RvckluZm87XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlclxu
ICAgKi9cbiAgdmFyIGlzVGFnVmFsaWRXaXRoUGFyZW50ID0gZnVuY3Rpb24gKHRhZywgcGFyZW50
VGFnKSB7XG4gICAgLy8gRmlyc3QsIGxldCdzIGNoZWNrIGlmIHdlJ3JlIGluIGFuIHVudXN1YWwg
cGFyc2luZyBtb2RlLi4uXG4gICAgc3dpdGNoIChwYXJlbnRUYWcpIHtcbiAgICAgIC8vIGh0dHBz
Oi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFp
bi1pbnNlbGVjdFxuICAgICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0g
J29wdGlvbicgfHwgdGFnID09PSAnb3B0Z3JvdXAnIHx8IHRhZyA9PT0gJyN0ZXh0JztcbiAgICAg
IGNhc2UgJ29wdGdyb3VwJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ29wdGlvbicgfHwgdGFn
ID09PSAnI3RleHQnO1xuICAgICAgLy8gU3RyaWN0bHkgc3BlYWtpbmcsIHNlZWluZyBhbiA8b3B0
aW9uPiBkb2Vzbid0IG1lYW4gd2UncmUgaW4gYSA8c2VsZWN0PlxuICAgICAgLy8gYnV0XG4gICAg
ICBjYXNlICdvcHRpb24nOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnI3RleHQnO1xuICAgICAg
Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFy
c2luZy1tYWluLWludGRcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVs
dGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbmNhcHRpb25cbiAgICAgIC8vIE5vIHNw
ZWNpYWwgYmVoYXZpb3Igc2luY2UgdGhlc2UgcnVsZXMgZmFsbCBiYWNrIHRvIFwiaW4gYm9keVwi
IG1vZGUgZm9yXG4gICAgICAvLyBhbGwgZXhjZXB0IHNwZWNpYWwgdGFibGUgbm9kZXMgd2hpY2gg
Y2F1c2UgYmFkIHBhcnNpbmcgYmVoYXZpb3IgYW55d2F5LlxuXG4gICAgICAvLyBodHRwczovL2h0
bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW50
clxuICAgICAgY2FzZSAndHInOlxuICAgICAgICByZXR1cm4gdGFnID09PSAndGgnIHx8IHRhZyA9
PT0gJ3RkJyB8fCB0YWcgPT09ICdzdHlsZScgfHwgdGFnID09PSAnc2NyaXB0JyB8fCB0YWcgPT09
ICd0ZW1wbGF0ZSc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRp
cGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW50Ym9keVxuICAgICAgY2FzZSAndGJvZHkn
OlxuICAgICAgY2FzZSAndGhlYWQnOlxuICAgICAgY2FzZSAndGZvb3QnOlxuICAgICAgICByZXR1
cm4gdGFnID09PSAndHInIHx8IHRhZyA9PT0gJ3N0eWxlJyB8fCB0YWcgPT09ICdzY3JpcHQnIHx8
IHRhZyA9PT0gJ3RlbXBsYXRlJztcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5v
cmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbmNvbGdyb3VwXG4gICAgICBj
YXNlICdjb2xncm91cCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdjb2wnIHx8IHRhZyA9PT0g
J3RlbXBsYXRlJztcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlw
YWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbnRhYmxlXG4gICAgICBjYXNlICd0YWJsZSc6
XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdjYXB0aW9uJyB8fCB0YWcgPT09ICdjb2xncm91cCcg
fHwgdGFnID09PSAndGJvZHknIHx8IHRhZyA9PT0gJ3Rmb290JyB8fCB0YWcgPT09ICd0aGVhZCcg
fHwgdGFnID09PSAnc3R5bGUnIHx8IHRhZyA9PT0gJ3NjcmlwdCcgfHwgdGFnID09PSAndGVtcGxh
dGUnO1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3lu
dGF4Lmh0bWwjcGFyc2luZy1tYWluLWluaGVhZFxuICAgICAgY2FzZSAnaGVhZCc6XG4gICAgICAg
IHJldHVybiB0YWcgPT09ICdiYXNlJyB8fCB0YWcgPT09ICdiYXNlZm9udCcgfHwgdGFnID09PSAn
Ymdzb3VuZCcgfHwgdGFnID09PSAnbGluaycgfHwgdGFnID09PSAnbWV0YScgfHwgdGFnID09PSAn
dGl0bGUnIHx8IHRhZyA9PT0gJ25vc2NyaXB0JyB8fCB0YWcgPT09ICdub2ZyYW1lcycgfHwgdGFn
ID09PSAnc3R5bGUnIHx8IHRhZyA9PT0gJ3NjcmlwdCcgfHwgdGFnID09PSAndGVtcGxhdGUnO1xu
ICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2VtYW50aWNz
Lmh0bWwjdGhlLWh0bWwtZWxlbWVudFxuICAgICAgY2FzZSAnaHRtbCc6XG4gICAgICAgIHJldHVy
biB0YWcgPT09ICdoZWFkJyB8fCB0YWcgPT09ICdib2R5JztcbiAgICAgIGNhc2UgJyNkb2N1bWVu
dCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdodG1sJztcbiAgICB9XG5cbiAgICAvLyBQcm9i
YWJseSBpbiB0aGUgXCJpbiBib2R5XCIgcGFyc2luZyBtb2RlLCBzbyB3ZSBvdXRsYXcgb25seSB0
YWcgY29tYm9zXG4gICAgLy8gd2hlcmUgdGhlIHBhcnNpbmcgcnVsZXMgY2F1c2UgaW1wbGljaXQg
b3BlbnMgb3IgY2xvc2VzIHRvIGJlIGFkZGVkLlxuICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndo
YXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbmJvZHlcbiAgICBz
d2l0Y2ggKHRhZykge1xuICAgICAgY2FzZSAnaDEnOlxuICAgICAgY2FzZSAnaDInOlxuICAgICAg
Y2FzZSAnaDMnOlxuICAgICAgY2FzZSAnaDQnOlxuICAgICAgY2FzZSAnaDUnOlxuICAgICAgY2Fz
ZSAnaDYnOlxuICAgICAgICByZXR1cm4gcGFyZW50VGFnICE9PSAnaDEnICYmIHBhcmVudFRhZyAh
PT0gJ2gyJyAmJiBwYXJlbnRUYWcgIT09ICdoMycgJiYgcGFyZW50VGFnICE9PSAnaDQnICYmIHBh
cmVudFRhZyAhPT0gJ2g1JyAmJiBwYXJlbnRUYWcgIT09ICdoNic7XG5cbiAgICAgIGNhc2UgJ3Jw
JzpcbiAgICAgIGNhc2UgJ3J0JzpcbiAgICAgICAgcmV0dXJuIGltcGxpZWRFbmRUYWdzLmluZGV4
T2YocGFyZW50VGFnKSA9PT0gLTE7XG5cbiAgICAgIGNhc2UgJ2JvZHknOlxuICAgICAgY2FzZSAn
Y2FwdGlvbic6XG4gICAgICBjYXNlICdjb2wnOlxuICAgICAgY2FzZSAnY29sZ3JvdXAnOlxuICAg
ICAgY2FzZSAnZnJhbWUnOlxuICAgICAgY2FzZSAnaGVhZCc6XG4gICAgICBjYXNlICdodG1sJzpc
biAgICAgIGNhc2UgJ3Rib2R5JzpcbiAgICAgIGNhc2UgJ3RkJzpcbiAgICAgIGNhc2UgJ3Rmb290
JzpcbiAgICAgIGNhc2UgJ3RoJzpcbiAgICAgIGNhc2UgJ3RoZWFkJzpcbiAgICAgIGNhc2UgJ3Ry
JzpcbiAgICAgICAgLy8gVGhlc2UgdGFncyBhcmUgb25seSB2YWxpZCB3aXRoIGEgZmV3IHBhcmVu
dHMgdGhhdCBoYXZlIHNwZWNpYWwgY2hpbGRcbiAgICAgICAgLy8gcGFyc2luZyBydWxlcyAtLSBp
ZiB3ZSdyZSBkb3duIGhlcmUsIHRoZW4gbm9uZSBvZiB0aG9zZSBtYXRjaGVkIGFuZFxuICAgICAg
ICAvLyBzbyB3ZSBhbGxvdyBpdCBvbmx5IGlmIHdlIGRvbid0IGtub3cgd2hhdCB0aGUgcGFyZW50
IGlzLCBhcyBhbGwgb3RoZXJcbiAgICAgICAgLy8gY2FzZXMgYXJlIGludmFsaWQuXG4gICAgICAg
IHJldHVybiBwYXJlbnRUYWcgPT0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAg
fTtcblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyXG4gICAqL1xuICB2YXIgZmluZEludmFs
aWRBbmNlc3RvckZvclRhZyA9IGZ1bmN0aW9uICh0YWcsIGFuY2VzdG9ySW5mbykge1xuICAgIHN3
aXRjaCAodGFnKSB7XG4gICAgICBjYXNlICdhZGRyZXNzJzpcbiAgICAgIGNhc2UgJ2FydGljbGUn
OlxuICAgICAgY2FzZSAnYXNpZGUnOlxuICAgICAgY2FzZSAnYmxvY2txdW90ZSc6XG4gICAgICBj
YXNlICdjZW50ZXInOlxuICAgICAgY2FzZSAnZGV0YWlscyc6XG4gICAgICBjYXNlICdkaWFsb2cn
OlxuICAgICAgY2FzZSAnZGlyJzpcbiAgICAgIGNhc2UgJ2Rpdic6XG4gICAgICBjYXNlICdkbCc6
XG4gICAgICBjYXNlICdmaWVsZHNldCc6XG4gICAgICBjYXNlICdmaWdjYXB0aW9uJzpcbiAgICAg
IGNhc2UgJ2ZpZ3VyZSc6XG4gICAgICBjYXNlICdmb290ZXInOlxuICAgICAgY2FzZSAnaGVhZGVy
JzpcbiAgICAgIGNhc2UgJ2hncm91cCc6XG4gICAgICBjYXNlICdtYWluJzpcbiAgICAgIGNhc2Ug
J21lbnUnOlxuICAgICAgY2FzZSAnbmF2JzpcbiAgICAgIGNhc2UgJ29sJzpcbiAgICAgIGNhc2Ug
J3AnOlxuICAgICAgY2FzZSAnc2VjdGlvbic6XG4gICAgICBjYXNlICdzdW1tYXJ5JzpcbiAgICAg
IGNhc2UgJ3VsJzpcbiAgICAgIGNhc2UgJ3ByZSc6XG4gICAgICBjYXNlICdsaXN0aW5nJzpcbiAg
ICAgIGNhc2UgJ3RhYmxlJzpcbiAgICAgIGNhc2UgJ2hyJzpcbiAgICAgIGNhc2UgJ3htcCc6XG4g
ICAgICBjYXNlICdoMSc6XG4gICAgICBjYXNlICdoMic6XG4gICAgICBjYXNlICdoMyc6XG4gICAg
ICBjYXNlICdoNCc6XG4gICAgICBjYXNlICdoNSc6XG4gICAgICBjYXNlICdoNic6XG4gICAgICAg
IHJldHVybiBhbmNlc3RvckluZm8ucFRhZ0luQnV0dG9uU2NvcGU7XG5cbiAgICAgIGNhc2UgJ2Zv
cm0nOlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmZvcm1UYWcgfHwgYW5jZXN0b3JJbmZv
LnBUYWdJbkJ1dHRvblNjb3BlO1xuXG4gICAgICBjYXNlICdsaSc6XG4gICAgICAgIHJldHVybiBh
bmNlc3RvckluZm8ubGlzdEl0ZW1UYWdBdXRvY2xvc2luZztcblxuICAgICAgY2FzZSAnZGQnOlxu
ICAgICAgY2FzZSAnZHQnOlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmRsSXRlbVRhZ0F1
dG9jbG9zaW5nO1xuXG4gICAgICBjYXNlICdidXR0b24nOlxuICAgICAgICByZXR1cm4gYW5jZXN0
b3JJbmZvLmJ1dHRvblRhZ0luU2NvcGU7XG5cbiAgICAgIGNhc2UgJ2EnOlxuICAgICAgICAvLyBT
cGVjIHNheXMgc29tZXRoaW5nIGFib3V0IHN0b3JpbmcgYSBsaXN0IG9mIG1hcmtlcnMsIGJ1dCBp
dCBzb3VuZHNcbiAgICAgICAgLy8gZXF1aXZhbGVudCB0byB0aGlzIGNoZWNrLlxuICAgICAgICBy
ZXR1cm4gYW5jZXN0b3JJbmZvLmFUYWdJblNjb3BlO1xuXG4gICAgICBjYXNlICdub2JyJzpcbiAg
ICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5ub2JyVGFnSW5TY29wZTtcbiAgICB9XG5cbiAgICBy
ZXR1cm4gbnVsbDtcbiAgfTtcblxuICAvKipcbiAgICogR2l2ZW4gYSBSZWFjdENvbXBvc2l0ZUNv
bXBvbmVudCBpbnN0YW5jZSwgcmV0dXJuIGEgbGlzdCBvZiBpdHMgcmVjdXJzaXZlXG4gICAqIG93
bmVycywgc3RhcnRpbmcgYXQgdGhlIHJvb3QgYW5kIGVuZGluZyB3aXRoIHRoZSBpbnN0YW5jZSBp
dHNlbGYuXG4gICAqL1xuICB2YXIgZmluZE93bmVyU3RhY2sgPSBmdW5jdGlvbiAoaW5zdGFuY2Up
IHtcbiAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAg
dmFyIHN0YWNrID0gW107XG4gICAgZG8ge1xuICAgICAgc3RhY2sucHVzaChpbnN0YW5jZSk7XG4g
ICAgfSB3aGlsZSAoaW5zdGFuY2UgPSBpbnN0YW5jZS5fY3VycmVudEVsZW1lbnQuX293bmVyKTtc
biAgICBzdGFjay5yZXZlcnNlKCk7XG4gICAgcmV0dXJuIHN0YWNrO1xuICB9O1xuXG4gIHZhciBk
aWRXYXJuID0ge307XG5cbiAgdmFsaWRhdGVET01OZXN0aW5nID0gZnVuY3Rpb24gKGNoaWxkVGFn
LCBjaGlsZFRleHQsIGNoaWxkSW5zdGFuY2UsIGFuY2VzdG9ySW5mbykge1xuICAgIGFuY2VzdG9y
SW5mbyA9IGFuY2VzdG9ySW5mbyB8fCBlbXB0eUFuY2VzdG9ySW5mbztcbiAgICB2YXIgcGFyZW50
SW5mbyA9IGFuY2VzdG9ySW5mby5jdXJyZW50O1xuICAgIHZhciBwYXJlbnRUYWcgPSBwYXJlbnRJ
bmZvICYmIHBhcmVudEluZm8udGFnO1xuXG4gICAgaWYgKGNoaWxkVGV4dCAhPSBudWxsKSB7XG4g
ICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhjaGls
ZFRhZyA9PSBudWxsLCAndmFsaWRhdGVET01OZXN0aW5nOiB3aGVuIGNoaWxkVGV4dCBpcyBwYXNz
ZWQsIGNoaWxkVGFnIHNob3VsZCBiZSBudWxsJykgOiB2b2lkIDA7XG4gICAgICBjaGlsZFRhZyA9
ICcjdGV4dCc7XG4gICAgfVxuXG4gICAgdmFyIGludmFsaWRQYXJlbnQgPSBpc1RhZ1ZhbGlkV2l0
aFBhcmVudChjaGlsZFRhZywgcGFyZW50VGFnKSA/IG51bGwgOiBwYXJlbnRJbmZvO1xuICAgIHZh
ciBpbnZhbGlkQW5jZXN0b3IgPSBpbnZhbGlkUGFyZW50ID8gbnVsbCA6IGZpbmRJbnZhbGlkQW5j
ZXN0b3JGb3JUYWcoY2hpbGRUYWcsIGFuY2VzdG9ySW5mbyk7XG4gICAgdmFyIHByb2JsZW1hdGlj
ID0gaW52YWxpZFBhcmVudCB8fCBpbnZhbGlkQW5jZXN0b3I7XG5cbiAgICBpZiAocHJvYmxlbWF0
aWMpIHtcbiAgICAgIHZhciBhbmNlc3RvclRhZyA9IHByb2JsZW1hdGljLnRhZztcbiAgICAgIHZh
ciBhbmNlc3Rvckluc3RhbmNlID0gcHJvYmxlbWF0aWMuaW5zdGFuY2U7XG5cbiAgICAgIHZhciBj
aGlsZE93bmVyID0gY2hpbGRJbnN0YW5jZSAmJiBjaGlsZEluc3RhbmNlLl9jdXJyZW50RWxlbWVu
dC5fb3duZXI7XG4gICAgICB2YXIgYW5jZXN0b3JPd25lciA9IGFuY2VzdG9ySW5zdGFuY2UgJiYg
YW5jZXN0b3JJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQuX293bmVyO1xuXG4gICAgICB2YXIgY2hp
bGRPd25lcnMgPSBmaW5kT3duZXJTdGFjayhjaGlsZE93bmVyKTtcbiAgICAgIHZhciBhbmNlc3Rv
ck93bmVycyA9IGZpbmRPd25lclN0YWNrKGFuY2VzdG9yT3duZXIpO1xuXG4gICAgICB2YXIgbWlu
U3RhY2tMZW4gPSBNYXRoLm1pbihjaGlsZE93bmVycy5sZW5ndGgsIGFuY2VzdG9yT3duZXJzLmxl
bmd0aCk7XG4gICAgICB2YXIgaTtcblxuICAgICAgdmFyIGRlZXBlc3RDb21tb24gPSAtMTtcbiAg
ICAgIGZvciAoaSA9IDA7IGkgPCBtaW5TdGFja0xlbjsgaSsrKSB7XG4gICAgICAgIGlmIChjaGls
ZE93bmVyc1tpXSA9PT0gYW5jZXN0b3JPd25lcnNbaV0pIHtcbiAgICAgICAgICBkZWVwZXN0Q29t
bW9uID0gaTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxu
ICAgICAgfVxuXG4gICAgICB2YXIgVU5LTk9XTiA9ICcodW5rbm93biknO1xuICAgICAgdmFyIGNo
aWxkT3duZXJOYW1lcyA9IGNoaWxkT3duZXJzLnNsaWNlKGRlZXBlc3RDb21tb24gKyAxKS5tYXAo
ZnVuY3Rpb24gKGluc3QpIHtcbiAgICAgICAgcmV0dXJuIGluc3QuZ2V0TmFtZSgpIHx8IFVOS05P
V047XG4gICAgICB9KTtcbiAgICAgIHZhciBhbmNlc3Rvck93bmVyTmFtZXMgPSBhbmNlc3Rvck93
bmVycy5zbGljZShkZWVwZXN0Q29tbW9uICsgMSkubWFwKGZ1bmN0aW9uIChpbnN0KSB7XG4gICAg
ICAgIHJldHVybiBpbnN0LmdldE5hbWUoKSB8fCBVTktOT1dOO1xuICAgICAgfSk7XG4gICAgICB2
YXIgb3duZXJJbmZvID0gW10uY29uY2F0KFxuICAgICAgLy8gSWYgdGhlIHBhcmVudCBhbmQgY2hp
bGQgaW5zdGFuY2VzIGhhdmUgYSBjb21tb24gb3duZXIgYW5jZXN0b3IsIHN0YXJ0XG4gICAgICAv
LyB3aXRoIHRoYXQgLS0gb3RoZXJ3aXNlIHdlIGp1c3Qgc3RhcnQgd2l0aCB0aGUgcGFyZW50J3Mg
b3duZXJzLlxuICAgICAgZGVlcGVzdENvbW1vbiAhPT0gLTEgPyBjaGlsZE93bmVyc1tkZWVwZXN0
Q29tbW9uXS5nZXROYW1lKCkgfHwgVU5LTk9XTiA6IFtdLCBhbmNlc3Rvck93bmVyTmFtZXMsIGFu
Y2VzdG9yVGFnLFxuICAgICAgLy8gSWYgd2UncmUgd2FybmluZyBhYm91dCBhbiBpbnZhbGlkIChu
b24tcGFyZW50KSBhbmNlc3RyeSwgYWRkICcuLi4nXG4gICAgICBpbnZhbGlkQW5jZXN0b3IgPyBb
Jy4uLiddIDogW10sIGNoaWxkT3duZXJOYW1lcywgY2hpbGRUYWcpLmpvaW4oJyA+ICcpO1xuXG4g
ICAgICB2YXIgd2FybktleSA9ICEhaW52YWxpZFBhcmVudCArICd8JyArIGNoaWxkVGFnICsgJ3wn
ICsgYW5jZXN0b3JUYWcgKyAnfCcgKyBvd25lckluZm87XG4gICAgICBpZiAoZGlkV2Fyblt3YXJu
S2V5XSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBkaWRXYXJuW3dhcm5LZXld
ID0gdHJ1ZTtcblxuICAgICAgdmFyIHRhZ0Rpc3BsYXlOYW1lID0gY2hpbGRUYWc7XG4gICAgICB2
YXIgd2hpdGVzcGFjZUluZm8gPSAnJztcbiAgICAgIGlmIChjaGlsZFRhZyA9PT0gJyN0ZXh0Jykg
e1xuICAgICAgICBpZiAoL1xcUy8udGVzdChjaGlsZFRleHQpKSB7XG4gICAgICAgICAgdGFnRGlz
cGxheU5hbWUgPSAnVGV4dCBub2Rlcyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFn
RGlzcGxheU5hbWUgPSAnV2hpdGVzcGFjZSB0ZXh0IG5vZGVzJztcbiAgICAgICAgICB3aGl0ZXNw
YWNlSW5mbyA9IFwiIE1ha2Ugc3VyZSB5b3UgZG9uJ3QgaGF2ZSBhbnkgZXh0cmEgd2hpdGVzcGFj
ZSBiZXR3ZWVuIHRhZ3Mgb24gXCIgKyAnZWFjaCBsaW5lIG9mIHlvdXIgc291cmNlIGNvZGUuJztc
biAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFnRGlzcGxheU5hbWUgPSAnPCcg
KyBjaGlsZFRhZyArICc+JztcbiAgICAgIH1cblxuICAgICAgaWYgKGludmFsaWRQYXJlbnQpIHtc
biAgICAgICAgdmFyIGluZm8gPSAnJztcbiAgICAgICAgaWYgKGFuY2VzdG9yVGFnID09PSAndGFi
bGUnICYmIGNoaWxkVGFnID09PSAndHInKSB7XG4gICAgICAgICAgaW5mbyArPSAnIEFkZCBhIDx0
Ym9keT4gdG8geW91ciBjb2RlIHRvIG1hdGNoIHRoZSBET00gdHJlZSBnZW5lcmF0ZWQgYnkgJyAr
ICd0aGUgYnJvd3Nlci4nO1xuICAgICAgICB9XG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5W
ICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAndmFsaWRhdGVET01OZXN0aW5nKC4u
Lik6ICVzIGNhbm5vdCBhcHBlYXIgYXMgYSBjaGlsZCBvZiA8JXM+LiVzICcgKyAnU2VlICVzLiVz
JywgdGFnRGlzcGxheU5hbWUsIGFuY2VzdG9yVGFnLCB3aGl0ZXNwYWNlSW5mbywgb3duZXJJbmZv
LCBpbmZvKSA6IHZvaWQgMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2Nlc3MuZW52Lk5P
REVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAndmFsaWRhdGVET01OZXN0
aW5nKC4uLik6ICVzIGNhbm5vdCBhcHBlYXIgYXMgYSBkZXNjZW5kYW50IG9mICcgKyAnPCVzPi4g
U2VlICVzLicsIHRhZ0Rpc3BsYXlOYW1lLCBhbmNlc3RvclRhZywgb3duZXJJbmZvKSA6IHZvaWQg
MDtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgdmFsaWRhdGVET01OZXN0aW5nLnVwZGF0ZWRB
bmNlc3RvckluZm8gPSB1cGRhdGVkQW5jZXN0b3JJbmZvO1xuXG4gIC8vIEZvciB0ZXN0aW5nXG4g
IHZhbGlkYXRlRE9NTmVzdGluZy5pc1RhZ1ZhbGlkSW5Db250ZXh0ID0gZnVuY3Rpb24gKHRhZywg
YW5jZXN0b3JJbmZvKSB7XG4gICAgYW5jZXN0b3JJbmZvID0gYW5jZXN0b3JJbmZvIHx8IGVtcHR5
QW5jZXN0b3JJbmZvO1xuICAgIHZhciBwYXJlbnRJbmZvID0gYW5jZXN0b3JJbmZvLmN1cnJlbnQ7
XG4gICAgdmFyIHBhcmVudFRhZyA9IHBhcmVudEluZm8gJiYgcGFyZW50SW5mby50YWc7XG4gICAg
cmV0dXJuIGlzVGFnVmFsaWRXaXRoUGFyZW50KHRhZywgcGFyZW50VGFnKSAmJiAhZmluZEludmFs
aWRBbmNlc3RvckZvclRhZyh0YWcsIGFuY2VzdG9ySW5mbyk7XG4gIH07XG59XG5cbm1vZHVsZS5l
eHBvcnRzID0gdmFsaWRhdGVET01OZXN0aW5nO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8g
V0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvdmFsaWRhdGVE
T01OZXN0aW5nLmpzXG4vLyBtb2R1bGUgaWQgPSA0NlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIv
KipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmln
aHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIg
dGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRo
ZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50
XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGlu
IHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAq
IGBjaGFyQ29kZWAgcmVwcmVzZW50cyB0aGUgYWN0dWFsIFwiY2hhcmFjdGVyIGNvZGVcIiBhbmQg
aXMgc2FmZSB0byB1c2Ugd2l0aFxuICogYFN0cmluZy5mcm9tQ2hhckNvZGVgLiBBcyBzdWNoLCBv
bmx5IGtleXMgdGhhdCBjb3JyZXNwb25kIHRvIHByaW50YWJsZVxuICogY2hhcmFjdGVycyBwcm9k
dWNlIGEgdmFsaWQgYGNoYXJDb2RlYCwgdGhlIG9ubHkgZXhjZXB0aW9uIHRvIHRoaXMgaXMgRW50
ZXIuXG4gKiBUaGUgVGFiLWtleSBpcyBjb25zaWRlcmVkIG5vbi1wcmludGFibGUgYW5kIGRvZXMg
bm90IGhhdmUgYSBgY2hhckNvZGVgLFxuICogcHJlc3VtYWJseSBiZWNhdXNlIGl0IGRvZXMgbm90
IHByb2R1Y2UgYSB0YWItY2hhcmFjdGVyIGluIGJyb3dzZXJzLlxuICpcbiAqIEBwYXJhbSB7b2Jq
ZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEByZXR1cm4ge251bWJl
cn0gTm9ybWFsaXplZCBgY2hhckNvZGVgIHByb3BlcnR5LlxuICovXG5cbmZ1bmN0aW9uIGdldEV2
ZW50Q2hhckNvZGUobmF0aXZlRXZlbnQpIHtcbiAgdmFyIGNoYXJDb2RlO1xuICB2YXIga2V5Q29k
ZSA9IG5hdGl2ZUV2ZW50LmtleUNvZGU7XG5cbiAgaWYgKCdjaGFyQ29kZScgaW4gbmF0aXZlRXZl
bnQpIHtcbiAgICBjaGFyQ29kZSA9IG5hdGl2ZUV2ZW50LmNoYXJDb2RlO1xuXG4gICAgLy8gRkYg
ZG9lcyBub3Qgc2V0IGBjaGFyQ29kZWAgZm9yIHRoZSBFbnRlci1rZXksIGNoZWNrIGFnYWluc3Qg
YGtleUNvZGVgLlxuICAgIGlmIChjaGFyQ29kZSA9PT0gMCAmJiBrZXlDb2RlID09PSAxMykge1xu
ICAgICAgY2hhckNvZGUgPSAxMztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSUU4IGRvZXMg
bm90IGltcGxlbWVudCBgY2hhckNvZGVgLCBidXQgYGtleUNvZGVgIGhhcyB0aGUgY29ycmVjdCB2
YWx1ZS5cbiAgICBjaGFyQ29kZSA9IGtleUNvZGU7XG4gIH1cblxuICAvLyBTb21lIG5vbi1wcmlu
dGFibGUga2V5cyBhcmUgcmVwb3J0ZWQgaW4gYGNoYXJDb2RlYC9ga2V5Q29kZWAsIGRpc2NhcmQg
dGhlbS5cbiAgLy8gTXVzdCBub3QgZGlzY2FyZCB0aGUgKG5vbi0pcHJpbnRhYmxlIEVudGVyLWtl
eS5cbiAgaWYgKGNoYXJDb2RlID49IDMyIHx8IGNoYXJDb2RlID09PSAxMykge1xuICAgIHJldHVy
biBjaGFyQ29kZTtcbiAgfVxuXG4gIHJldHVybiAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdl
dEV2ZW50Q2hhckNvZGU7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RF
UlxuLy8gLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9nZXRFdmVudENoYXJDb2RlLmpzXG4v
LyBtb2R1bGUgaWQgPSA0N1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJpbXBvcnQgYmFzZUdldFRh
ZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCBnZXRQcm90b3R5cGUgZnJvbSAnLi9f
Z2V0UHJvdG90eXBlLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExp
a2UuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52
YXIgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1p
biBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5
cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBy
ZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1Rv
U3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3Rz
IGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3Rv
Lmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBpbmZlciB0aGUgYE9iamVjdGAgY29uc3Ry
dWN0b3IuICovXG52YXIgb2JqZWN0Q3RvclN0cmluZyA9IGZ1bmNUb1N0cmluZy5jYWxsKE9iamVj
dCk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIHRoYXQg
aXMsIGFuIG9iamVjdCBjcmVhdGVkIGJ5IHRoZVxuICogYE9iamVjdGAgY29uc3RydWN0b3Igb3Ig
b25lIHdpdGggYSBgW1tQcm90b3R5cGVdXWAgb2YgYG51bGxgLlxuICpcbiAqIEBzdGF0aWNcbiAq
IEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC44LjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFy
YW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBS
ZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAu
XG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtc
biAqIH1cbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QobmV3IEZvbyk7XG4gKiAvLyA9PiBmYWxzZVxu
ICpcbiAqIF8uaXNQbGFpbk9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4g
KiBfLmlzUGxhaW5PYmplY3QoeyAneCc6IDAsICd5JzogMCB9KTtcbiAqIC8vID0+IHRydWVcbiAq
XG4gKiBfLmlzUGxhaW5PYmplY3QoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gKiAvLyA9PiB0cnVl
XG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdExp
a2UodmFsdWUpIHx8IGJhc2VHZXRUYWcodmFsdWUpICE9IG9iamVjdFRhZykge1xuICAgIHJldHVy
biBmYWxzZTtcbiAgfVxuICB2YXIgcHJvdG8gPSBnZXRQcm90b3R5cGUodmFsdWUpO1xuICBpZiAo
cHJvdG8gPT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgQ3RvciA9IGhh
c093blByb3BlcnR5LmNhbGwocHJvdG8sICdjb25zdHJ1Y3RvcicpICYmIHByb3RvLmNvbnN0cnVj
dG9yO1xuICByZXR1cm4gdHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yIGluc3RhbmNl
b2YgQ3RvciAmJlxuICAgIGZ1bmNUb1N0cmluZy5jYWxsKEN0b3IpID09IG9iamVjdEN0b3JTdHJp
bmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzUGxhaW5PYmplY3Q7XG5cblxuXG4vLy8vLy8vLy8v
Ly8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMv
aXNQbGFpbk9iamVjdC5qc1xuLy8gbW9kdWxlIGlkID0gNDhcbi8vIG1vZHVsZSBjaHVua3MgPSAw
IiwiLyoqXG4gKiBQcmludHMgYSB3YXJuaW5nIGluIHRoZSBjb25zb2xlIGlmIGl0IGV4aXN0cy5c
biAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBUaGUgd2FybmluZyBtZXNzYWdlLlxuICog
QHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHdhcm5pbmcobWVz
c2FnZSkge1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG4gIGlmICh0eXBlb2Yg
Y29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09ICdmdW5j
dGlvbicpIHtcbiAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICB9XG4gIC8qIGVzbGludC1l
bmFibGUgbm8tY29uc29sZSAqL1xuICB0cnkge1xuICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93
biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgaWYgeW91IGVuYWJsZVxuICAgIC8vIFwiYnJlYWsg
b24gYWxsIGV4Y2VwdGlvbnNcIiBpbiB5b3VyIGNvbnNvbGUsXG4gICAgLy8gaXQgd291bGQgcGF1
c2UgdGhlIGV4ZWN1dGlvbiBhdCB0aGlzIGxpbmUuXG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3Nh
Z2UpO1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWVtcHR5ICovXG4gIH0gY2F0Y2ggKGUpIHt9
XG4gIC8qIGVzbGludC1lbmFibGUgbm8tZW1wdHkgKi9cbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8v
Ly9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy91
dGlscy93YXJuaW5nLmpzXG4vLyBtb2R1bGUgaWQgPSA0OVxuLy8gbW9kdWxlIGNodW5rcyA9IDAi
LCIvKiFcbiAgQ29weXJpZ2h0IChjKSAyMDE2IEplZCBXYXRzb24uXG4gIExpY2Vuc2VkIHVuZGVy
IHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlXG4gIGh0dHA6Ly9qZWR3YXRzb24uZ2l0aHViLmlv
L2NsYXNzbmFtZXNcbiovXG4vKiBnbG9iYWwgZGVmaW5lICovXG5cbihmdW5jdGlvbiAoKSB7XG5c
dCd1c2Ugc3RyaWN0JztcblxuXHR2YXIgaGFzT3duID0ge30uaGFzT3duUHJvcGVydHk7XG5cblx0
ZnVuY3Rpb24gY2xhc3NOYW1lcyAoKSB7XG5cdFx0dmFyIGNsYXNzZXMgPSBbXTtcblxuXHRcdGZv
ciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYXJn
ID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKCFhcmcpIGNvbnRpbnVlO1xuXG5cdFx0XHR2YXIg
YXJnVHlwZSA9IHR5cGVvZiBhcmc7XG5cblx0XHRcdGlmIChhcmdUeXBlID09PSAnc3RyaW5nJyB8
fCBhcmdUeXBlID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRjbGFzc2VzLnB1c2goYXJnKTtcblx0
XHRcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG5cdFx0XHRcdGNsYXNzZXMucHVz
aChjbGFzc05hbWVzLmFwcGx5KG51bGwsIGFyZykpO1xuXHRcdFx0fSBlbHNlIGlmIChhcmdUeXBl
ID09PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRmb3IgKHZhciBrZXkgaW4gYXJnKSB7XG5cdFx0XHRc
dFx0aWYgKGhhc093bi5jYWxsKGFyZywga2V5KSAmJiBhcmdba2V5XSkge1xuXHRcdFx0XHRcdFx0
Y2xhc3Nlcy5wdXNoKGtleSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0
fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xuXHR9XG5cblx0aWYgKHR5cGVvZiBt
b2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdFx0bW9kdWxlLmV4
cG9ydHMgPSBjbGFzc05hbWVzO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5j
dGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHtc
blx0XHQvLyByZWdpc3RlciBhcyAnY2xhc3NuYW1lcycsIGNvbnNpc3RlbnQgd2l0aCBucG0gcGFj
a2FnZSBuYW1lXG5cdFx0ZGVmaW5lKCdjbGFzc25hbWVzJywgW10sIGZ1bmN0aW9uICgpIHtcblx0
XHRcdHJldHVybiBjbGFzc05hbWVzO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHdpbmRvdy5j
bGFzc05hbWVzID0gY2xhc3NOYW1lcztcblx0fVxufSgpKTtcblxuXG5cbi8vLy8vLy8vLy8vLy8v
Ly8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5k
ZXguanNcbi8vIG1vZHVsZSBpZCA9IDUwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIid1c2Ugc3Ry
aWN0JztcblxudmFyIGFzYXAgPSByZXF1aXJlKCdhc2FwL3JhdycpO1xuXG5mdW5jdGlvbiBub29w
KCkge31cblxuLy8gU3RhdGVzOlxuLy9cbi8vIDAgLSBwZW5kaW5nXG4vLyAxIC0gZnVsZmlsbGVk
IHdpdGggX3ZhbHVlXG4vLyAyIC0gcmVqZWN0ZWQgd2l0aCBfdmFsdWVcbi8vIDMgLSBhZG9wdGVk
IHRoZSBzdGF0ZSBvZiBhbm90aGVyIHByb21pc2UsIF92YWx1ZVxuLy9cbi8vIG9uY2UgdGhlIHN0
YXRlIGlzIG5vIGxvbmdlciBwZW5kaW5nICgwKSBpdCBpcyBpbW11dGFibGVcblxuLy8gQWxsIGBf
YCBwcmVmaXhlZCBwcm9wZXJ0aWVzIHdpbGwgYmUgcmVkdWNlZCB0byBgX3tyYW5kb20gbnVtYmVy
fWBcbi8vIGF0IGJ1aWxkIHRpbWUgdG8gb2JmdXNjYXRlIHRoZW0gYW5kIGRpc2NvdXJhZ2UgdGhl
aXIgdXNlLlxuLy8gV2UgZG9uJ3QgdXNlIHN5bWJvbHMgb3IgT2JqZWN0LmRlZmluZVByb3BlcnR5
IHRvIGZ1bGx5IGhpZGUgdGhlbVxuLy8gYmVjYXVzZSB0aGUgcGVyZm9ybWFuY2UgaXNuJ3QgZ29v
ZCBlbm91Z2guXG5cblxuLy8gdG8gYXZvaWQgdXNpbmcgdHJ5L2NhdGNoIGluc2lkZSBjcml0aWNh
bCBmdW5jdGlvbnMsIHdlXG4vLyBleHRyYWN0IHRoZW0gdG8gaGVyZS5cbnZhciBMQVNUX0VSUk9S
ID0gbnVsbDtcbnZhciBJU19FUlJPUiA9IHt9O1xuZnVuY3Rpb24gZ2V0VGhlbihvYmopIHtcbiAg
dHJ5IHtcbiAgICByZXR1cm4gb2JqLnRoZW47XG4gIH0gY2F0Y2ggKGV4KSB7XG4gICAgTEFTVF9F
UlJPUiA9IGV4O1xuICAgIHJldHVybiBJU19FUlJPUjtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cnlD
YWxsT25lKGZuLCBhKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGZuKGEpO1xuICB9IGNhdGNoIChl
eCkge1xuICAgIExBU1RfRVJST1IgPSBleDtcbiAgICByZXR1cm4gSVNfRVJST1I7XG4gIH1cbn1c
bmZ1bmN0aW9uIHRyeUNhbGxUd28oZm4sIGEsIGIpIHtcbiAgdHJ5IHtcbiAgICBmbihhLCBiKTtc
biAgfSBjYXRjaCAoZXgpIHtcbiAgICBMQVNUX0VSUk9SID0gZXg7XG4gICAgcmV0dXJuIElTX0VS
Uk9SO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvbWlzZTtcblxuZnVuY3Rpb24gUHJv
bWlzZShmbikge1xuICBpZiAodHlwZW9mIHRoaXMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cg
bmV3IFR5cGVFcnJvcignUHJvbWlzZXMgbXVzdCBiZSBjb25zdHJ1Y3RlZCB2aWEgbmV3Jyk7XG4g
IH1cbiAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBl
RXJyb3IoJ1Byb21pc2UgY29uc3RydWN0b3JcXCdzIGFyZ3VtZW50IGlzIG5vdCBhIGZ1bmN0aW9u
Jyk7XG4gIH1cbiAgdGhpcy5fNzUgPSAwO1xuICB0aGlzLl84MyA9IDA7XG4gIHRoaXMuXzE4ID0g
bnVsbDtcbiAgdGhpcy5fMzggPSBudWxsO1xuICBpZiAoZm4gPT09IG5vb3ApIHJldHVybjtcbiAg
ZG9SZXNvbHZlKGZuLCB0aGlzKTtcbn1cblByb21pc2UuXzQ3ID0gbnVsbDtcblByb21pc2UuXzcx
ID0gbnVsbDtcblByb21pc2UuXzQ0ID0gbm9vcDtcblxuUHJvbWlzZS5wcm90b3R5cGUudGhlbiA9
IGZ1bmN0aW9uKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gIGlmICh0aGlzLmNvbnN0cnVj
dG9yICE9PSBQcm9taXNlKSB7XG4gICAgcmV0dXJuIHNhZmVUaGVuKHRoaXMsIG9uRnVsZmlsbGVk
LCBvblJlamVjdGVkKTtcbiAgfVxuICB2YXIgcmVzID0gbmV3IFByb21pc2Uobm9vcCk7XG4gIGhh
bmRsZSh0aGlzLCBuZXcgSGFuZGxlcihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgcmVzKSk7XG4g
IHJldHVybiByZXM7XG59O1xuXG5mdW5jdGlvbiBzYWZlVGhlbihzZWxmLCBvbkZ1bGZpbGxlZCwg
b25SZWplY3RlZCkge1xuICByZXR1cm4gbmV3IHNlbGYuY29uc3RydWN0b3IoZnVuY3Rpb24gKHJl
c29sdmUsIHJlamVjdCkge1xuICAgIHZhciByZXMgPSBuZXcgUHJvbWlzZShub29wKTtcbiAgICBy
ZXMudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgIGhhbmRsZShzZWxmLCBuZXcgSGFuZGxlcihv
bkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgcmVzKSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gaGFuZGxl
KHNlbGYsIGRlZmVycmVkKSB7XG4gIHdoaWxlIChzZWxmLl84MyA9PT0gMykge1xuICAgIHNlbGYg
PSBzZWxmLl8xODtcbiAgfVxuICBpZiAoUHJvbWlzZS5fNDcpIHtcbiAgICBQcm9taXNlLl80Nyhz
ZWxmKTtcbiAgfVxuICBpZiAoc2VsZi5fODMgPT09IDApIHtcbiAgICBpZiAoc2VsZi5fNzUgPT09
IDApIHtcbiAgICAgIHNlbGYuXzc1ID0gMTtcbiAgICAgIHNlbGYuXzM4ID0gZGVmZXJyZWQ7XG4g
ICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChzZWxmLl83NSA9PT0gMSkge1xuICAgICAgc2Vs
Zi5fNzUgPSAyO1xuICAgICAgc2VsZi5fMzggPSBbc2VsZi5fMzgsIGRlZmVycmVkXTtcbiAgICAg
IHJldHVybjtcbiAgICB9XG4gICAgc2VsZi5fMzgucHVzaChkZWZlcnJlZCk7XG4gICAgcmV0dXJu
O1xuICB9XG4gIGhhbmRsZVJlc29sdmVkKHNlbGYsIGRlZmVycmVkKTtcbn1cblxuZnVuY3Rpb24g
aGFuZGxlUmVzb2x2ZWQoc2VsZiwgZGVmZXJyZWQpIHtcbiAgYXNhcChmdW5jdGlvbigpIHtcbiAg
ICB2YXIgY2IgPSBzZWxmLl84MyA9PT0gMSA/IGRlZmVycmVkLm9uRnVsZmlsbGVkIDogZGVmZXJy
ZWQub25SZWplY3RlZDtcbiAgICBpZiAoY2IgPT09IG51bGwpIHtcbiAgICAgIGlmIChzZWxmLl84
MyA9PT0gMSkge1xuICAgICAgICByZXNvbHZlKGRlZmVycmVkLnByb21pc2UsIHNlbGYuXzE4KTtc
biAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlamVjdChkZWZlcnJlZC5wcm9taXNlLCBzZWxmLl8x
OCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciByZXQgPSB0cnlDYWxs
T25lKGNiLCBzZWxmLl8xOCk7XG4gICAgaWYgKHJldCA9PT0gSVNfRVJST1IpIHtcbiAgICAgIHJl
amVjdChkZWZlcnJlZC5wcm9taXNlLCBMQVNUX0VSUk9SKTtcbiAgICB9IGVsc2Uge1xuICAgICAg
cmVzb2x2ZShkZWZlcnJlZC5wcm9taXNlLCByZXQpO1xuICAgIH1cbiAgfSk7XG59XG5mdW5jdGlv
biByZXNvbHZlKHNlbGYsIG5ld1ZhbHVlKSB7XG4gIC8vIFByb21pc2UgUmVzb2x1dGlvbiBQcm9j
ZWR1cmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9wcm9taXNlcy1hcGx1cy9wcm9taXNlcy1zcGVjI3Ro
ZS1wcm9taXNlLXJlc29sdXRpb24tcHJvY2VkdXJlXG4gIGlmIChuZXdWYWx1ZSA9PT0gc2VsZikg
e1xuICAgIHJldHVybiByZWplY3QoXG4gICAgICBzZWxmLFxuICAgICAgbmV3IFR5cGVFcnJvcign
QSBwcm9taXNlIGNhbm5vdCBiZSByZXNvbHZlZCB3aXRoIGl0c2VsZi4nKVxuICAgICk7XG4gIH1c
biAgaWYgKFxuICAgIG5ld1ZhbHVlICYmXG4gICAgKHR5cGVvZiBuZXdWYWx1ZSA9PT0gJ29iamVj
dCcgfHwgdHlwZW9mIG5ld1ZhbHVlID09PSAnZnVuY3Rpb24nKVxuICApIHtcbiAgICB2YXIgdGhl
biA9IGdldFRoZW4obmV3VmFsdWUpO1xuICAgIGlmICh0aGVuID09PSBJU19FUlJPUikge1xuICAg
ICAgcmV0dXJuIHJlamVjdChzZWxmLCBMQVNUX0VSUk9SKTtcbiAgICB9XG4gICAgaWYgKFxuICAg
ICAgdGhlbiA9PT0gc2VsZi50aGVuICYmXG4gICAgICBuZXdWYWx1ZSBpbnN0YW5jZW9mIFByb21p
c2VcbiAgICApIHtcbiAgICAgIHNlbGYuXzgzID0gMztcbiAgICAgIHNlbGYuXzE4ID0gbmV3VmFs
dWU7XG4gICAgICBmaW5hbGUoc2VsZik7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmICh0
eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZG9SZXNvbHZlKHRoZW4uYmluZChu
ZXdWYWx1ZSksIHNlbGYpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICBzZWxmLl84MyA9
IDE7XG4gIHNlbGYuXzE4ID0gbmV3VmFsdWU7XG4gIGZpbmFsZShzZWxmKTtcbn1cblxuZnVuY3Rp
b24gcmVqZWN0KHNlbGYsIG5ld1ZhbHVlKSB7XG4gIHNlbGYuXzgzID0gMjtcbiAgc2VsZi5fMTgg
PSBuZXdWYWx1ZTtcbiAgaWYgKFByb21pc2UuXzcxKSB7XG4gICAgUHJvbWlzZS5fNzEoc2VsZiwg
bmV3VmFsdWUpO1xuICB9XG4gIGZpbmFsZShzZWxmKTtcbn1cbmZ1bmN0aW9uIGZpbmFsZShzZWxm
KSB7XG4gIGlmIChzZWxmLl83NSA9PT0gMSkge1xuICAgIGhhbmRsZShzZWxmLCBzZWxmLl8zOCk7
XG4gICAgc2VsZi5fMzggPSBudWxsO1xuICB9XG4gIGlmIChzZWxmLl83NSA9PT0gMikge1xuICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZi5fMzgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGhhbmRs
ZShzZWxmLCBzZWxmLl8zOFtpXSk7XG4gICAgfVxuICAgIHNlbGYuXzM4ID0gbnVsbDtcbiAgfVxu
fVxuXG5mdW5jdGlvbiBIYW5kbGVyKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBwcm9taXNlKXtc
biAgdGhpcy5vbkZ1bGZpbGxlZCA9IHR5cGVvZiBvbkZ1bGZpbGxlZCA9PT0gJ2Z1bmN0aW9uJyA/
IG9uRnVsZmlsbGVkIDogbnVsbDtcbiAgdGhpcy5vblJlamVjdGVkID0gdHlwZW9mIG9uUmVqZWN0
ZWQgPT09ICdmdW5jdGlvbicgPyBvblJlamVjdGVkIDogbnVsbDtcbiAgdGhpcy5wcm9taXNlID0g
cHJvbWlzZTtcbn1cblxuLyoqXG4gKiBUYWtlIGEgcG90ZW50aWFsbHkgbWlzYmVoYXZpbmcgcmVz
b2x2ZXIgZnVuY3Rpb24gYW5kIG1ha2Ugc3VyZVxuICogb25GdWxmaWxsZWQgYW5kIG9uUmVqZWN0
ZWQgYXJlIG9ubHkgY2FsbGVkIG9uY2UuXG4gKlxuICogTWFrZXMgbm8gZ3VhcmFudGVlcyBhYm91
dCBhc3luY2hyb255LlxuICovXG5mdW5jdGlvbiBkb1Jlc29sdmUoZm4sIHByb21pc2UpIHtcbiAg
dmFyIGRvbmUgPSBmYWxzZTtcbiAgdmFyIHJlcyA9IHRyeUNhbGxUd28oZm4sIGZ1bmN0aW9uICh2
YWx1ZSkge1xuICAgIGlmIChkb25lKSByZXR1cm47XG4gICAgZG9uZSA9IHRydWU7XG4gICAgcmVz
b2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICBpZiAo
ZG9uZSkgcmV0dXJuO1xuICAgIGRvbmUgPSB0cnVlO1xuICAgIHJlamVjdChwcm9taXNlLCByZWFz
b24pO1xuICB9KTtcbiAgaWYgKCFkb25lICYmIHJlcyA9PT0gSVNfRVJST1IpIHtcbiAgICBkb25l
ID0gdHJ1ZTtcbiAgICByZWplY3QocHJvbWlzZSwgTEFTVF9FUlJPUik7XG4gIH1cbn1cblxuXG5c
bi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVz
L3JlYWN0LXNjcmlwdHMvbm9kZV9tb2R1bGVzL3Byb21pc2UvbGliL2NvcmUuanNcbi8vIG1vZHVs
ZSBpZCA9IDUxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMt
cHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICog
VGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2Ug
Zm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRo
aXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMg
Y2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5Llxu
ICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfcHJvZEludmFyaWFudCA9IHJlcXVpcmUo
Jy4vcmVhY3RQcm9kSW52YXJpYW50JyksXG4gICAgX2Fzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1h
c3NpZ24nKTtcblxudmFyIFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlID0gcmVxdWlyZSgnLi9SZWFjdE5v
b3BVcGRhdGVRdWV1ZScpO1xuXG52YXIgY2FuRGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL2Nh
bkRlZmluZVByb3BlcnR5Jyk7XG52YXIgZW1wdHlPYmplY3QgPSByZXF1aXJlKCdmYmpzL2xpYi9l
bXB0eU9iamVjdCcpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoJ2ZianMvbGliL2ludmFyaWFu
dCcpO1xudmFyIGxvd1ByaW9yaXR5V2FybmluZyA9IHJlcXVpcmUoJy4vbG93UHJpb3JpdHlXYXJu
aW5nJyk7XG5cbi8qKlxuICogQmFzZSBjbGFzcyBoZWxwZXJzIGZvciB0aGUgdXBkYXRpbmcgc3Rh
dGUgb2YgYSBjb21wb25lbnQuXG4gKi9cbmZ1bmN0aW9uIFJlYWN0Q29tcG9uZW50KHByb3BzLCBj
b250ZXh0LCB1cGRhdGVyKSB7XG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jb250ZXh0
ID0gY29udGV4dDtcbiAgdGhpcy5yZWZzID0gZW1wdHlPYmplY3Q7XG4gIC8vIFdlIGluaXRpYWxp
emUgdGhlIGRlZmF1bHQgdXBkYXRlciBidXQgdGhlIHJlYWwgb25lIGdldHMgaW5qZWN0ZWQgYnkg
dGhlXG4gIC8vIHJlbmRlcmVyLlxuICB0aGlzLnVwZGF0ZXIgPSB1cGRhdGVyIHx8IFJlYWN0Tm9v
cFVwZGF0ZVF1ZXVlO1xufVxuXG5SZWFjdENvbXBvbmVudC5wcm90b3R5cGUuaXNSZWFjdENvbXBv
bmVudCA9IHt9O1xuXG4vKipcbiAqIFNldHMgYSBzdWJzZXQgb2YgdGhlIHN0YXRlLiBBbHdheXMg
dXNlIHRoaXMgdG8gbXV0YXRlXG4gKiBzdGF0ZS4gWW91IHNob3VsZCB0cmVhdCBgdGhpcy5zdGF0
ZWAgYXMgaW1tdXRhYmxlLlxuICpcbiAqIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGB0aGlz
LnN0YXRlYCB3aWxsIGJlIGltbWVkaWF0ZWx5IHVwZGF0ZWQsIHNvXG4gKiBhY2Nlc3NpbmcgYHRo
aXMuc3RhdGVgIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QgbWF5IHJldHVybiB0aGUgb2xkIHZh
bHVlLlxuICpcbiAqIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGNhbGxzIHRvIGBzZXRTdGF0
ZWAgd2lsbCBydW4gc3luY2hyb25vdXNseSxcbiAqIGFzIHRoZXkgbWF5IGV2ZW50dWFsbHkgYmUg
YmF0Y2hlZCB0b2dldGhlci4gIFlvdSBjYW4gcHJvdmlkZSBhbiBvcHRpb25hbFxuICogY2FsbGJh
Y2sgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIGNhbGwgdG8gc2V0U3RhdGUgaXMgYWN0
dWFsbHlcbiAqIGNvbXBsZXRlZC5cbiAqXG4gKiBXaGVuIGEgZnVuY3Rpb24gaXMgcHJvdmlkZWQg
dG8gc2V0U3RhdGUsIGl0IHdpbGwgYmUgY2FsbGVkIGF0IHNvbWUgcG9pbnQgaW5cbiAqIHRoZSBm
dXR1cmUgKG5vdCBzeW5jaHJvbm91c2x5KS4gSXQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgdXAg
dG8gZGF0ZVxuICogY29tcG9uZW50IGFyZ3VtZW50cyAoc3RhdGUsIHByb3BzLCBjb250ZXh0KS4g
VGhlc2UgdmFsdWVzIGNhbiBiZSBkaWZmZXJlbnRcbiAqIGZyb20gdGhpcy4qIGJlY2F1c2UgeW91
ciBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGFmdGVyIHJlY2VpdmVQcm9wcyBidXQgYmVmb3JlXG4g
KiBzaG91bGRDb21wb25lbnRVcGRhdGUsIGFuZCB0aGlzIG5ldyBzdGF0ZSwgcHJvcHMsIGFuZCBj
b250ZXh0IHdpbGwgbm90IHlldCBiZVxuICogYXNzaWduZWQgdG8gdGhpcy5cbiAqXG4gKiBAcGFy
YW0ge29iamVjdHxmdW5jdGlvbn0gcGFydGlhbFN0YXRlIE5leHQgcGFydGlhbCBzdGF0ZSBvciBm
dW5jdGlvbiB0b1xuICogICAgICAgIHByb2R1Y2UgbmV4dCBwYXJ0aWFsIHN0YXRlIHRvIGJlIG1l
cmdlZCB3aXRoIGN1cnJlbnQgc3RhdGUuXG4gKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sg
Q2FsbGVkIGFmdGVyIHN0YXRlIGlzIHVwZGF0ZWQuXG4gKiBAZmluYWxcbiAqIEBwcm90ZWN0ZWRc
biAqL1xuUmVhY3RDb21wb25lbnQucHJvdG90eXBlLnNldFN0YXRlID0gZnVuY3Rpb24gKHBhcnRp
YWxTdGF0ZSwgY2FsbGJhY2spIHtcbiAgISh0eXBlb2YgcGFydGlhbFN0YXRlID09PSAnb2JqZWN0
JyB8fCB0eXBlb2YgcGFydGlhbFN0YXRlID09PSAnZnVuY3Rpb24nIHx8IHBhcnRpYWxTdGF0ZSA9
PSBudWxsKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlh
bnQoZmFsc2UsICdzZXRTdGF0ZSguLi4pOiB0YWtlcyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFi
bGVzIHRvIHVwZGF0ZSBvciBhIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYW4gb2JqZWN0IG9mIHN0
YXRlIHZhcmlhYmxlcy4nKSA6IF9wcm9kSW52YXJpYW50KCc4NScpIDogdm9pZCAwO1xuICB0aGlz
LnVwZGF0ZXIuZW5xdWV1ZVNldFN0YXRlKHRoaXMsIHBhcnRpYWxTdGF0ZSk7XG4gIGlmIChjYWxs
YmFjaykge1xuICAgIHRoaXMudXBkYXRlci5lbnF1ZXVlQ2FsbGJhY2sodGhpcywgY2FsbGJhY2ss
ICdzZXRTdGF0ZScpO1xuICB9XG59O1xuXG4vKipcbiAqIEZvcmNlcyBhbiB1cGRhdGUuIFRoaXMg
c2hvdWxkIG9ubHkgYmUgaW52b2tlZCB3aGVuIGl0IGlzIGtub3duIHdpdGhcbiAqIGNlcnRhaW50
eSB0aGF0IHdlIGFyZSAqKm5vdCoqIGluIGEgRE9NIHRyYW5zYWN0aW9uLlxuICpcbiAqIFlvdSBt
YXkgd2FudCB0byBjYWxsIHRoaXMgd2hlbiB5b3Uga25vdyB0aGF0IHNvbWUgZGVlcGVyIGFzcGVj
dCBvZiB0aGVcbiAqIGNvbXBvbmVudCdzIHN0YXRlIGhhcyBjaGFuZ2VkIGJ1dCBgc2V0U3RhdGVg
IHdhcyBub3QgY2FsbGVkLlxuICpcbiAqIFRoaXMgd2lsbCBub3QgaW52b2tlIGBzaG91bGRDb21w
b25lbnRVcGRhdGVgLCBidXQgaXQgd2lsbCBpbnZva2VcbiAqIGBjb21wb25lbnRXaWxsVXBkYXRl
YCBhbmQgYGNvbXBvbmVudERpZFVwZGF0ZWAuXG4gKlxuICogQHBhcmFtIHs/ZnVuY3Rpb259IGNh
bGxiYWNrIENhbGxlZCBhZnRlciB1cGRhdGUgaXMgY29tcGxldGUuXG4gKiBAZmluYWxcbiAqIEBw
cm90ZWN0ZWRcbiAqL1xuUmVhY3RDb21wb25lbnQucHJvdG90eXBlLmZvcmNlVXBkYXRlID0gZnVu
Y3Rpb24gKGNhbGxiYWNrKSB7XG4gIHRoaXMudXBkYXRlci5lbnF1ZXVlRm9yY2VVcGRhdGUodGhp
cyk7XG4gIGlmIChjYWxsYmFjaykge1xuICAgIHRoaXMudXBkYXRlci5lbnF1ZXVlQ2FsbGJhY2so
dGhpcywgY2FsbGJhY2ssICdmb3JjZVVwZGF0ZScpO1xuICB9XG59O1xuXG4vKipcbiAqIERlcHJl
Y2F0ZWQgQVBJcy4gVGhlc2UgQVBJcyB1c2VkIHRvIGV4aXN0IG9uIGNsYXNzaWMgUmVhY3QgY2xh
c3NlcyBidXQgc2luY2VcbiAqIHdlIHdvdWxkIGxpa2UgdG8gZGVwcmVjYXRlIHRoZW0sIHdlJ3Jl
IG5vdCBnb2luZyB0byBtb3ZlIHRoZW0gb3ZlciB0byB0aGlzXG4gKiBtb2Rlcm4gYmFzZSBjbGFz
cy4gSW5zdGVhZCwgd2UgZGVmaW5lIGEgZ2V0dGVyIHRoYXQgd2FybnMgaWYgaXQncyBhY2Nlc3Nl
ZC5cbiAqL1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAg
dmFyIGRlcHJlY2F0ZWRBUElzID0ge1xuICAgIGlzTW91bnRlZDogWydpc01vdW50ZWQnLCAnSW5z
dGVhZCwgbWFrZSBzdXJlIHRvIGNsZWFuIHVwIHN1YnNjcmlwdGlvbnMgYW5kIHBlbmRpbmcgcmVx
dWVzdHMgaW4gJyArICdjb21wb25lbnRXaWxsVW5tb3VudCB0byBwcmV2ZW50IG1lbW9yeSBsZWFr
cy4nXSxcbiAgICByZXBsYWNlU3RhdGU6IFsncmVwbGFjZVN0YXRlJywgJ1JlZmFjdG9yIHlvdXIg
Y29kZSB0byB1c2Ugc2V0U3RhdGUgaW5zdGVhZCAoc2VlICcgKyAnaHR0cHM6Ly9naXRodWIuY29t
L2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8zMjM2KS4nXVxuICB9O1xuICB2YXIgZGVmaW5lRGVwcmVj
YXRpb25XYXJuaW5nID0gZnVuY3Rpb24gKG1ldGhvZE5hbWUsIGluZm8pIHtcbiAgICBpZiAoY2Fu
RGVmaW5lUHJvcGVydHkpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFjdENvbXBv
bmVudC5wcm90b3R5cGUsIG1ldGhvZE5hbWUsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
XG4gICAgICAgICAgbG93UHJpb3JpdHlXYXJuaW5nKGZhbHNlLCAnJXMoLi4uKSBpcyBkZXByZWNh
dGVkIGluIHBsYWluIEphdmFTY3JpcHQgUmVhY3QgY2xhc3Nlcy4gJXMnLCBpbmZvWzBdLCBpbmZv
WzFdKTtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtc
biAgICB9XG4gIH07XG4gIGZvciAodmFyIGZuTmFtZSBpbiBkZXByZWNhdGVkQVBJcykge1xuICAg
IGlmIChkZXByZWNhdGVkQVBJcy5oYXNPd25Qcm9wZXJ0eShmbk5hbWUpKSB7XG4gICAgICBkZWZp
bmVEZXByZWNhdGlvbldhcm5pbmcoZm5OYW1lLCBkZXByZWNhdGVkQVBJc1tmbk5hbWVdKTtcbiAg
ICB9XG4gIH1cbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGhlbHBlcnMgZm9yIHRoZSB1cGRhdGlu
ZyBzdGF0ZSBvZiBhIGNvbXBvbmVudC5cbiAqL1xuZnVuY3Rpb24gUmVhY3RQdXJlQ29tcG9uZW50
KHByb3BzLCBjb250ZXh0LCB1cGRhdGVyKSB7XG4gIC8vIER1cGxpY2F0ZWQgZnJvbSBSZWFjdENv
bXBvbmVudC5cbiAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0
O1xuICB0aGlzLnJlZnMgPSBlbXB0eU9iamVjdDtcbiAgLy8gV2UgaW5pdGlhbGl6ZSB0aGUgZGVm
YXVsdCB1cGRhdGVyIGJ1dCB0aGUgcmVhbCBvbmUgZ2V0cyBpbmplY3RlZCBieSB0aGVcbiAgLy8g
cmVuZGVyZXIuXG4gIHRoaXMudXBkYXRlciA9IHVwZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVl
dWU7XG59XG5cbmZ1bmN0aW9uIENvbXBvbmVudER1bW15KCkge31cbkNvbXBvbmVudER1bW15LnBy
b3RvdHlwZSA9IFJlYWN0Q29tcG9uZW50LnByb3RvdHlwZTtcblJlYWN0UHVyZUNvbXBvbmVudC5w
cm90b3R5cGUgPSBuZXcgQ29tcG9uZW50RHVtbXkoKTtcblJlYWN0UHVyZUNvbXBvbmVudC5wcm90
b3R5cGUuY29uc3RydWN0b3IgPSBSZWFjdFB1cmVDb21wb25lbnQ7XG4vLyBBdm9pZCBhbiBleHRy
YSBwcm90b3R5cGUganVtcCBmb3IgdGhlc2UgbWV0aG9kcy5cbl9hc3NpZ24oUmVhY3RQdXJlQ29t
cG9uZW50LnByb3RvdHlwZSwgUmVhY3RDb21wb25lbnQucHJvdG90eXBlKTtcblJlYWN0UHVyZUNv
bXBvbmVudC5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQgPSB0cnVlO1xuXG5tb2R1bGUu
ZXhwb3J0cyA9IHtcbiAgQ29tcG9uZW50OiBSZWFjdENvbXBvbmVudCxcbiAgUHVyZUNvbXBvbmVu
dDogUmVhY3RQdXJlQ29tcG9uZW50XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VC
UEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdEJhc2VDbGFzc2Vz
LmpzXG4vLyBtb2R1bGUgaWQgPSA1MlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipcbiAqIENv
cHlyaWdodCAyMDE1LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1z
dHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRp
cmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBw
YXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1l
IGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgd2FybmluZyA9IHJl
cXVpcmUoJ2ZianMvbGliL3dhcm5pbmcnKTtcblxuZnVuY3Rpb24gd2Fybk5vb3AocHVibGljSW5z
dGFuY2UsIGNhbGxlck5hbWUpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJv
ZHVjdGlvbicpIHtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBwdWJsaWNJbnN0YW5jZS5jb25zdHJ1
Y3RvcjtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2Fybmlu
ZyhmYWxzZSwgJyVzKC4uLik6IENhbiBvbmx5IHVwZGF0ZSBhIG1vdW50ZWQgb3IgbW91bnRpbmcg
Y29tcG9uZW50LiAnICsgJ1RoaXMgdXN1YWxseSBtZWFucyB5b3UgY2FsbGVkICVzKCkgb24gYW4g
dW5tb3VudGVkIGNvbXBvbmVudC4gJyArICdUaGlzIGlzIGEgbm8tb3AuIFBsZWFzZSBjaGVjayB0
aGUgY29kZSBmb3IgdGhlICVzIGNvbXBvbmVudC4nLCBjYWxsZXJOYW1lLCBjYWxsZXJOYW1lLCBj
b25zdHJ1Y3RvciAmJiAoY29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgY29uc3RydWN0b3IubmFt
ZSkgfHwgJ1JlYWN0Q2xhc3MnKSA6IHZvaWQgMDtcbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgaXMg
dGhlIGFic3RyYWN0IEFQSSBmb3IgYW4gdXBkYXRlIHF1ZXVlLlxuICovXG52YXIgUmVhY3ROb29w
VXBkYXRlUXVldWUgPSB7XG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBvciBub3QgdGhpcyBj
b21wb3NpdGUgY29tcG9uZW50IGlzIG1vdW50ZWQuXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30g
cHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHdlIHdhbnQgdG8gdGVzdC5cbiAgICogQHJldHVy
biB7Ym9vbGVhbn0gVHJ1ZSBpZiBtb3VudGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqIEBwcm90
ZWN0ZWRcbiAgICogQGZpbmFsXG4gICAqL1xuICBpc01vdW50ZWQ6IGZ1bmN0aW9uIChwdWJsaWNJ
bnN0YW5jZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcblxuICAvKipcbiAgICogRW5xdWV1
ZSBhIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBhZnRlciBhbGwgdGhlIHBlbmRpbmcg
dXBkYXRlc1xuICAgKiBoYXZlIHByb2Nlc3NlZC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENs
YXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdG8gdXNlIGFzIGB0aGlzYCBjb250ZXh0
LlxuICAgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIHN0YXRlIGlz
IHVwZGF0ZWQuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZUNhbGxiYWNrOiBmdW5j
dGlvbiAocHVibGljSW5zdGFuY2UsIGNhbGxiYWNrKSB7fSxcblxuICAvKipcbiAgICogRm9yY2Vz
IGFuIHVwZGF0ZS4gVGhpcyBzaG91bGQgb25seSBiZSBpbnZva2VkIHdoZW4gaXQgaXMga25vd24g
d2l0aFxuICAgKiBjZXJ0YWludHkgdGhhdCB3ZSBhcmUgKipub3QqKiBpbiBhIERPTSB0cmFuc2Fj
dGlvbi5cbiAgICpcbiAgICogWW91IG1heSB3YW50IHRvIGNhbGwgdGhpcyB3aGVuIHlvdSBrbm93
IHRoYXQgc29tZSBkZWVwZXIgYXNwZWN0IG9mIHRoZVxuICAgKiBjb21wb25lbnQncyBzdGF0ZSBo
YXMgY2hhbmdlZCBidXQgYHNldFN0YXRlYCB3YXMgbm90IGNhbGxlZC5cbiAgICpcbiAgICogVGhp
cyB3aWxsIG5vdCBpbnZva2UgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAsIGJ1dCBpdCB3aWxsIGlu
dm9rZVxuICAgKiBgY29tcG9uZW50V2lsbFVwZGF0ZWAgYW5kIGBjb21wb25lbnREaWRVcGRhdGVg
LlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0
YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1
ZXVlRm9yY2VVcGRhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSkge1xuICAgIHdhcm5Ob29w
KHB1YmxpY0luc3RhbmNlLCAnZm9yY2VVcGRhdGUnKTtcbiAgfSxcblxuICAvKipcbiAgICogUmVw
bGFjZXMgYWxsIG9mIHRoZSBzdGF0ZS4gQWx3YXlzIHVzZSB0aGlzIG9yIGBzZXRTdGF0ZWAgdG8g
bXV0YXRlIHN0YXRlLlxuICAgKiBZb3Ugc2hvdWxkIHRyZWF0IGB0aGlzLnN0YXRlYCBhcyBpbW11
dGFibGUuXG4gICAqXG4gICAqIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGB0aGlzLnN0YXRl
YCB3aWxsIGJlIGltbWVkaWF0ZWx5IHVwZGF0ZWQsIHNvXG4gICAqIGFjY2Vzc2luZyBgdGhpcy5z
dGF0ZWAgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBvbGQgdmFsdWUu
XG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3Rh
bmNlIHRoYXQgc2hvdWxkIHJlcmVuZGVyLlxuICAgKiBAcGFyYW0ge29iamVjdH0gY29tcGxldGVT
dGF0ZSBOZXh0IHN0YXRlLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVSZXBsYWNl
U3RhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSwgY29tcGxldGVTdGF0ZSkge1xuICAgIHdh
cm5Ob29wKHB1YmxpY0luc3RhbmNlLCAncmVwbGFjZVN0YXRlJyk7XG4gIH0sXG5cbiAgLyoqXG4g
ICAqIFNldHMgYSBzdWJzZXQgb2YgdGhlIHN0YXRlLiBUaGlzIG9ubHkgZXhpc3RzIGJlY2F1c2Ug
X3BlbmRpbmdTdGF0ZSBpc1xuICAgKiBpbnRlcm5hbC4gVGhpcyBwcm92aWRlcyBhIG1lcmdpbmcg
c3RyYXRlZ3kgdGhhdCBpcyBub3QgYXZhaWxhYmxlIHRvIGRlZXBcbiAgICogcHJvcGVydGllcyB3
aGljaCBpcyBjb25mdXNpbmcuIFRPRE86IEV4cG9zZSBwZW5kaW5nU3RhdGUgb3IgZG9uJ3QgdXNl
IGl0XG4gICAqIGR1cmluZyB0aGUgbWVyZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFz
c30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRoYXQgc2hvdWxkIHJlcmVuZGVyLlxuICAg
KiBAcGFyYW0ge29iamVjdH0gcGFydGlhbFN0YXRlIE5leHQgcGFydGlhbCBzdGF0ZSB0byBiZSBt
ZXJnZWQgd2l0aCBzdGF0ZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlU2V0U3Rh
dGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSwgcGFydGlhbFN0YXRlKSB7XG4gICAgd2Fybk5v
b3AocHVibGljSW5zdGFuY2UsICdzZXRTdGF0ZScpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0
cyA9IFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VC
UEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdE5vb3BVcGRhdGVR
dWV1ZS5qc1xuLy8gbW9kdWxlIGlkID0gNTNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyoqXG4g
KiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBC
U0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9v
dCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICog
b2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUg
c2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2Fu
RGVmaW5lUHJvcGVydHkgPSBmYWxzZTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3By
b2R1Y3Rpb24nKSB7XG4gIHRyeSB7XG4gICAgLy8gJEZsb3dGaXhNZSBodHRwczovL2dpdGh1Yi5j
b20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvMjg1XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9
LCAneCcsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7fSB9KTtcbiAgICBjYW5EZWZpbmVQcm9wZXJ0eSA9
IHRydWU7XG4gIH0gY2F0Y2ggKHgpIHtcbiAgICAvLyBJRSB3aWxsIGZhaWwgb24gZGVmaW5lUHJv
cGVydHlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNhbkRlZmluZVByb3BlcnR5O1xuXG5c
bi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVz
L3JlYWN0L2xpYi9jYW5EZWZpbmVQcm9wZXJ0eS5qc1xuLy8gbW9kdWxlIGlkID0gNTRcbi8vIG1v
ZHVsZSBjaHVua3MgPSAwIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50LCBGYWNlYm9v
aywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2Rl
IGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAq
IExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4g
QW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4g
dGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxu
J3VzZSBzdHJpY3QnO1xuXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1l
bnQgdHlwZS4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0
aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxuXG52YXIgUkVBQ1Rf
RUxFTUVOVF9UWVBFID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2xbJ2Zv
ciddICYmIFN5bWJvbFsnZm9yJ10oJ3JlYWN0LmVsZW1lbnQnKSB8fCAweGVhYzc7XG5cbm1vZHVs
ZS5leHBvcnRzID0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xu
Ly8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdEVsZW1l
bnRTeW1ib2wuanNcbi8vIG1vZHVsZSBpZCA9IDU1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8q
KlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0
aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhl
IHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRc
biAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4g
dGhlIHNhbWUgZGlyZWN0b3J5LlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLy8gUmVhY3QgMTUu
NSByZWZlcmVuY2VzIHRoaXMgbW9kdWxlLCBhbmQgYXNzdW1lcyBQcm9wVHlwZXMgYXJlIHN0aWxs
IGNhbGxhYmxlIGluIHByb2R1Y3Rpb24uXG4vLyBUaGVyZWZvcmUgd2UgcmUtZXhwb3J0IGRldmVs
b3BtZW50LW9ubHkgdmVyc2lvbiB3aXRoIGFsbCB0aGUgUHJvcFR5cGVzIGNoZWNrcyBoZXJlLlxu
Ly8gSG93ZXZlciBpZiBvbmUgaXMgbWlncmF0aW5nIHRvIHRoZSBgcHJvcC10eXBlc2AgbnBtIGxp
YnJhcnksIHRoZXkgd2lsbCBnbyB0aHJvdWdoIHRoZVxuLy8gYGluZGV4LmpzYCBlbnRyeSBwb2lu
dCwgYW5kIGl0IHdpbGwgYnJhbmNoIGRlcGVuZGluZyBvbiB0aGUgZW52aXJvbm1lbnQuXG52YXIg
ZmFjdG9yeSA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMnKTtcbm1vZHVsZS5l
eHBvcnRzID0gZnVuY3Rpb24oaXNWYWxpZEVsZW1lbnQpIHtcbiAgLy8gSXQgaXMgc3RpbGwgYWxs
b3dlZCBpbiAxNS41LlxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IGZhbHNlO1xuICByZXR1
cm4gZmFjdG9yeShpc1ZhbGlkRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7XG59O1xuXG5c
blxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVs
ZXMvcHJvcC10eXBlcy9mYWN0b3J5LmpzXG4vLyBtb2R1bGUgaWQgPSA1NlxuLy8gbW9kdWxlIGNo
dW5rcyA9IDAiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMu
XG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGlj
ZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5T
RSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRp
dGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFU
RU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5c
bnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9ICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9Z
T1VfV0lMTF9CRV9GSVJFRCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNy
ZXQ7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25v
ZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qc1xuLy8gbW9k
dWxlIGlkID0gNTdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAx
NS1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4g
KiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5z
ZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2Yg
dGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0
cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3Rvcnku
XG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0RE9NQ29tcG9uZW50RmxhZ3Mg
PSB7XG4gIGhhc0NhY2hlZENoaWxkTm9kZXM6IDEgPDwgMFxufTtcblxubW9kdWxlLmV4cG9ydHMg
PSBSZWFjdERPTUNvbXBvbmVudEZsYWdzO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VC
UEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RET01Db21w
b25lbnRGbGFncy5qc1xuLy8gbW9kdWxlIGlkID0gNThcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwi
LyoqXG4gKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJp
Z2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVy
IHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0
aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFu
dFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBp
biB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52
YXIgX3Byb2RJbnZhcmlhbnQgPSByZXF1aXJlKCcuL3JlYWN0UHJvZEludmFyaWFudCcpO1xuXG52
YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG5cbi8qKlxuICog
QWNjdW11bGF0ZXMgaXRlbXMgdGhhdCBtdXN0IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZCBpbnRv
IHRoZSBmaXJzdCBvbmUuIFRoaXNcbiAqIGlzIHVzZWQgdG8gY29uc2VydmUgbWVtb3J5IGJ5IGF2
b2lkaW5nIGFycmF5IGFsbG9jYXRpb25zLCBhbmQgdGh1cyBzYWNyaWZpY2VzXG4gKiBBUEkgY2xl
YW5uZXNzLiBTaW5jZSBgY3VycmVudGAgY2FuIGJlIG51bGwgYmVmb3JlIGJlaW5nIHBhc3NlZCBp
biBhbmQgbm90XG4gKiBudWxsIGFmdGVyIHRoaXMgZnVuY3Rpb24sIG1ha2Ugc3VyZSB0byBhc3Np
Z24gaXQgYmFjayB0byBgY3VycmVudGA6XG4gKlxuICogYGEgPSBhY2N1bXVsYXRlSW50byhhLCBi
KTtgXG4gKlxuICogVGhpcyBBUEkgc2hvdWxkIGJlIHNwYXJpbmdseSB1c2VkLiBUcnkgYGFjY3Vt
dWxhdGVgIGZvciBzb21ldGhpbmcgY2xlYW5lci5cbiAqXG4gKiBAcmV0dXJuIHsqfGFycmF5PCo+
fSBBbiBhY2N1bXVsYXRpb24gb2YgaXRlbXMuXG4gKi9cblxuZnVuY3Rpb24gYWNjdW11bGF0ZUlu
dG8oY3VycmVudCwgbmV4dCkge1xuICAhKG5leHQgIT0gbnVsbCkgPyBwcm9jZXNzLmVudi5OT0RF
X0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnYWNjdW11bGF0ZUludG8o
Li4uKTogQWNjdW11bGF0ZWQgaXRlbXMgbXVzdCBub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuJykg
OiBfcHJvZEludmFyaWFudCgnMzAnKSA6IHZvaWQgMDtcblxuICBpZiAoY3VycmVudCA9PSBudWxs
KSB7XG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cblxuICAvLyBCb3RoIGFyZSBub3QgZW1wdHkuIFdh
cm5pbmc6IE5ldmVyIGNhbGwgeC5jb25jYXQoeSkgd2hlbiB5b3UgYXJlIG5vdFxuICAvLyBjZXJ0
YWluIHRoYXQgeCBpcyBhbiBBcnJheSAoeCBjb3VsZCBiZSBhIHN0cmluZyB3aXRoIGNvbmNhdCBt
ZXRob2QpLlxuICBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50KSkge1xuICAgIGlmIChBcnJheS5p
c0FycmF5KG5leHQpKSB7XG4gICAgICBjdXJyZW50LnB1c2guYXBwbHkoY3VycmVudCwgbmV4dCk7
XG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9XG4gICAgY3VycmVudC5wdXNoKG5leHQpO1xu
ICAgIHJldHVybiBjdXJyZW50O1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkobmV4dCkpIHtc
biAgICAvLyBBIGJpdCB0b28gZGFuZ2Vyb3VzIHRvIG11dGF0ZSBgbmV4dGAuXG4gICAgcmV0dXJu
IFtjdXJyZW50XS5jb25jYXQobmV4dCk7XG4gIH1cblxuICByZXR1cm4gW2N1cnJlbnQsIG5leHRd
O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFjY3VtdWxhdGVJbnRvO1xuXG5cbi8vLy8vLy8vLy8v
Ly8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9s
aWIvYWNjdW11bGF0ZUludG8uanNcbi8vIG1vZHVsZSBpZCA9IDU5XG4vLyBtb2R1bGUgY2h1bmtz
ID0gMCIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNl
ZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZp
bGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9u
YWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRT
IGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIFxuICovXG5cbid1c2Ugc3RyaWN0
JztcblxuLyoqXG4gKiBAcGFyYW0ge2FycmF5fSBhcnIgYW4gXCJhY2N1bXVsYXRpb25cIiBvZiBp
dGVtcyB3aGljaCBpcyBlaXRoZXIgYW4gQXJyYXkgb3JcbiAqIGEgc2luZ2xlIGl0ZW0uIFVzZWZ1
bCB3aGVuIHBhaXJlZCB3aXRoIHRoZSBgYWNjdW11bGF0ZWAgbW9kdWxlLiBUaGlzIGlzIGFcbiAq
IHNpbXBsZSB1dGlsaXR5IHRoYXQgYWxsb3dzIHVzIHRvIHJlYXNvbiBhYm91dCBhIGNvbGxlY3Rp
b24gb2YgaXRlbXMsIGJ1dFxuICogaGFuZGxpbmcgdGhlIGNhc2Ugd2hlbiB0aGVyZSBpcyBleGFj
dGx5IG9uZSBpdGVtIChhbmQgd2UgZG8gbm90IG5lZWQgdG9cbiAqIGFsbG9jYXRlIGFuIGFycmF5
KS5cbiAqL1xuXG5mdW5jdGlvbiBmb3JFYWNoQWNjdW11bGF0ZWQoYXJyLCBjYiwgc2NvcGUpIHtc
biAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgIGFyci5mb3JFYWNoKGNiLCBzY29wZSk7
XG4gIH0gZWxzZSBpZiAoYXJyKSB7XG4gICAgY2IuY2FsbChzY29wZSwgYXJyKTtcbiAgfVxufVxu
XG5tb2R1bGUuZXhwb3J0cyA9IGZvckVhY2hBY2N1bXVsYXRlZDtcblxuXG4vLy8vLy8vLy8vLy8v
Ly8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGli
L2ZvckVhY2hBY2N1bXVsYXRlZC5qc1xuLy8gbW9kdWxlIGlkID0gNjBcbi8vIG1vZHVsZSBjaHVu
a3MgPSAwIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxu
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vu
c2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0Ug
ZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRp
b25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVO
VFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0Jztc
blxudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZSgnZmJqcy9saWIvRXhlY3V0aW9u
RW52aXJvbm1lbnQnKTtcblxudmFyIGNvbnRlbnRLZXkgPSBudWxsO1xuXG4vKipcbiAqIEdldHMg
dGhlIGtleSB1c2VkIHRvIGFjY2VzcyB0ZXh0IGNvbnRlbnQgb24gYSBET00gbm9kZS5cbiAqXG4g
KiBAcmV0dXJuIHs/c3RyaW5nfSBLZXkgdXNlZCB0byBhY2Nlc3MgdGV4dCBjb250ZW50LlxuICog
QGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGdldFRleHRDb250ZW50QWNjZXNzb3IoKSB7XG4gIGlm
ICghY29udGVudEtleSAmJiBFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00pIHtcbiAgICAv
LyBQcmVmZXIgdGV4dENvbnRlbnQgdG8gaW5uZXJUZXh0IGJlY2F1c2UgbWFueSBicm93c2VycyBz
dXBwb3J0IGJvdGggYnV0XG4gICAgLy8gU1ZHIDx0ZXh0PiBlbGVtZW50cyBkb24ndCBzdXBwb3J0
IGlubmVyVGV4dCBldmVuIHdoZW4gPGRpdj4gZG9lcy5cbiAgICBjb250ZW50S2V5ID0gJ3RleHRD
b250ZW50JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgPyAndGV4dENvbnRlbnQnIDogJ2lu
bmVyVGV4dCc7XG4gIH1cbiAgcmV0dXJuIGNvbnRlbnRLZXk7XG59XG5cbm1vZHVsZS5leHBvcnRz
ID0gZ2V0VGV4dENvbnRlbnRBY2Nlc3NvcjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdF
QlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL2dldFRleHRDb250
ZW50QWNjZXNzb3IuanNcbi8vIG1vZHVsZSBpZCA9IDYxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIs
Ii8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRl
ciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4g
dGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3Jh
bnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUg
aW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIFxuICovXG5cbid1c2Ugc3RyaWN0Jztcblxu
dmFyIF9wcm9kSW52YXJpYW50ID0gcmVxdWlyZSgnLi9yZWFjdFByb2RJbnZhcmlhbnQnKTtcblxu
ZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShp
bnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwi
Q2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxudmFyIFBvb2xlZENs
YXNzID0gcmVxdWlyZSgnLi9Qb29sZWRDbGFzcycpO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWly
ZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCBwc2V1ZG8t
ZXZlbnQgbW9kdWxlIHRvIGhlbHAga2VlcCB0cmFjayBvZiBjb21wb25lbnRzIHdhaXRpbmcgdG9c
biAqIGJlIG5vdGlmaWVkIHdoZW4gdGhlaXIgRE9NIHJlcHJlc2VudGF0aW9ucyBhcmUgYXZhaWxh
YmxlIGZvciB1c2UuXG4gKlxuICogVGhpcyBpbXBsZW1lbnRzIGBQb29sZWRDbGFzc2AsIHNvIHlv
dSBzaG91bGQgbmV2ZXIgbmVlZCB0byBpbnN0YW50aWF0ZSB0aGlzLlxuICogSW5zdGVhZCwgdXNl
IGBDYWxsYmFja1F1ZXVlLmdldFBvb2xlZCgpYC5cbiAqXG4gKiBAY2xhc3MgUmVhY3RNb3VudFJl
YWR5XG4gKiBAaW1wbGVtZW50cyBQb29sZWRDbGFzc1xuICogQGludGVybmFsXG4gKi9cblxudmFy
IENhbGxiYWNrUXVldWUgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIENhbGxiYWNrUXVldWUo
YXJnKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENhbGxiYWNrUXVldWUpO1xuXG4gICAg
dGhpcy5fY2FsbGJhY2tzID0gbnVsbDtcbiAgICB0aGlzLl9jb250ZXh0cyA9IG51bGw7XG4gICAg
dGhpcy5fYXJnID0gYXJnO1xuICB9XG5cbiAgLyoqXG4gICAqIEVucXVldWVzIGEgY2FsbGJhY2sg
dG8gYmUgaW52b2tlZCB3aGVuIGBub3RpZnlBbGxgIGlzIGludm9rZWQuXG4gICAqXG4gICAqIEBw
YXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIEludm9rZWQgd2hlbiBgbm90aWZ5QWxsYCBpcyBpbnZv
a2VkLlxuICAgKiBAcGFyYW0gez9vYmplY3R9IGNvbnRleHQgQ29udGV4dCB0byBjYWxsIGBjYWxs
YmFja2Agd2l0aC5cbiAgICogQGludGVybmFsXG4gICAqL1xuXG5cbiAgQ2FsbGJhY2tRdWV1ZS5w
cm90b3R5cGUuZW5xdWV1ZSA9IGZ1bmN0aW9uIGVucXVldWUoY2FsbGJhY2ssIGNvbnRleHQpIHtc
biAgICB0aGlzLl9jYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3MgfHwgW107XG4gICAgdGhpcy5f
Y2FsbGJhY2tzLnB1c2goY2FsbGJhY2spO1xuICAgIHRoaXMuX2NvbnRleHRzID0gdGhpcy5fY29u
dGV4dHMgfHwgW107XG4gICAgdGhpcy5fY29udGV4dHMucHVzaChjb250ZXh0KTtcbiAgfTtcblxu
ICAvKipcbiAgICogSW52b2tlcyBhbGwgZW5xdWV1ZWQgY2FsbGJhY2tzIGFuZCBjbGVhcnMgdGhl
IHF1ZXVlLiBUaGlzIGlzIGludm9rZWQgYWZ0ZXJcbiAgICogdGhlIERPTSByZXByZXNlbnRhdGlv
biBvZiBhIGNvbXBvbmVudCBoYXMgYmVlbiBjcmVhdGVkIG9yIHVwZGF0ZWQuXG4gICAqXG4gICAq
IEBpbnRlcm5hbFxuICAgKi9cblxuXG4gIENhbGxiYWNrUXVldWUucHJvdG90eXBlLm5vdGlmeUFs
bCA9IGZ1bmN0aW9uIG5vdGlmeUFsbCgpIHtcbiAgICB2YXIgY2FsbGJhY2tzID0gdGhpcy5fY2Fs
bGJhY2tzO1xuICAgIHZhciBjb250ZXh0cyA9IHRoaXMuX2NvbnRleHRzO1xuICAgIHZhciBhcmcg
PSB0aGlzLl9hcmc7XG4gICAgaWYgKGNhbGxiYWNrcyAmJiBjb250ZXh0cykge1xuICAgICAgIShj
YWxsYmFja3MubGVuZ3RoID09PSBjb250ZXh0cy5sZW5ndGgpID8gcHJvY2Vzcy5lbnYuTk9ERV9F
TlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ01pc21hdGNoZWQgbGlzdCBv
ZiBjb250ZXh0cyBpbiBjYWxsYmFjayBxdWV1ZScpIDogX3Byb2RJbnZhcmlhbnQoJzI0JykgOiB2
b2lkIDA7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBudWxsO1xuICAgICAgdGhpcy5fY29udGV4
dHMgPSBudWxsO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyBp
KyspIHtcbiAgICAgICAgY2FsbGJhY2tzW2ldLmNhbGwoY29udGV4dHNbaV0sIGFyZyk7XG4gICAg
ICB9XG4gICAgICBjYWxsYmFja3MubGVuZ3RoID0gMDtcbiAgICAgIGNvbnRleHRzLmxlbmd0aCA9
IDA7XG4gICAgfVxuICB9O1xuXG4gIENhbGxiYWNrUXVldWUucHJvdG90eXBlLmNoZWNrcG9pbnQg
PSBmdW5jdGlvbiBjaGVja3BvaW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jYWxsYmFja3MgPyB0
aGlzLl9jYWxsYmFja3MubGVuZ3RoIDogMDtcbiAgfTtcblxuICBDYWxsYmFja1F1ZXVlLnByb3Rv
dHlwZS5yb2xsYmFjayA9IGZ1bmN0aW9uIHJvbGxiYWNrKGxlbikge1xuICAgIGlmICh0aGlzLl9j
YWxsYmFja3MgJiYgdGhpcy5fY29udGV4dHMpIHtcbiAgICAgIHRoaXMuX2NhbGxiYWNrcy5sZW5n
dGggPSBsZW47XG4gICAgICB0aGlzLl9jb250ZXh0cy5sZW5ndGggPSBsZW47XG4gICAgfVxuICB9
O1xuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIGludGVybmFsIHF1ZXVlLlxuICAgKlxuICAgKiBA
aW50ZXJuYWxcbiAgICovXG5cblxuICBDYWxsYmFja1F1ZXVlLnByb3RvdHlwZS5yZXNldCA9IGZ1
bmN0aW9uIHJlc2V0KCkge1xuICAgIHRoaXMuX2NhbGxiYWNrcyA9IG51bGw7XG4gICAgdGhpcy5f
Y29udGV4dHMgPSBudWxsO1xuICB9O1xuXG4gIC8qKlxuICAgKiBgUG9vbGVkQ2xhc3NgIGxvb2tz
IGZvciB0aGlzLlxuICAgKi9cblxuXG4gIENhbGxiYWNrUXVldWUucHJvdG90eXBlLmRlc3RydWN0
b3IgPSBmdW5jdGlvbiBkZXN0cnVjdG9yKCkge1xuICAgIHRoaXMucmVzZXQoKTtcbiAgfTtcblxu
ICByZXR1cm4gQ2FsbGJhY2tRdWV1ZTtcbn0oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBQb29sZWRD
bGFzcy5hZGRQb29saW5nVG8oQ2FsbGJhY2tRdWV1ZSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8v
XG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9DYWxs
YmFja1F1ZXVlLmpzXG4vLyBtb2R1bGUgaWQgPSA2MlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIv
KipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmln
aHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIg
dGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRo
ZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50
XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGlu
IHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZh
ciBSZWFjdEZlYXR1cmVGbGFncyA9IHtcbiAgLy8gV2hlbiB0cnVlLCBjYWxsIGNvbnNvbGUudGlt
ZSgpIGJlZm9yZSBhbmQgLnRpbWVFbmQoKSBhZnRlciBlYWNoIHRvcC1sZXZlbFxuICAvLyByZW5k
ZXIgKGJvdGggaW5pdGlhbCByZW5kZXJzIGFuZCB1cGRhdGVzKS4gVXNlZnVsIHdoZW4gbG9va2lu
ZyBhdCBwcm9kLW1vZGVcbiAgLy8gdGltZWxpbmUgcHJvZmlsZXMgaW4gQ2hyb21lLCBmb3IgZXhh
bXBsZS5cbiAgbG9nVG9wTGV2ZWxSZW5kZXJzOiBmYWxzZVxufTtcblxubW9kdWxlLmV4cG9ydHMg
PSBSZWFjdEZlYXR1cmVGbGFncztcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sg
Rk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RmVhdHVyZUZsYWdz
LmpzXG4vLyBtb2R1bGUgaWQgPSA2M1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipcbiAqIENv
cHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1z
dHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRp
cmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBw
YXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1l
IGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RET01Db21w
b25lbnRUcmVlID0gcmVxdWlyZSgnLi9SZWFjdERPTUNvbXBvbmVudFRyZWUnKTtcblxuZnVuY3Rp
b24gaXNDaGVja2FibGUoZWxlbSkge1xuICB2YXIgdHlwZSA9IGVsZW0udHlwZTtcbiAgdmFyIG5v
ZGVOYW1lID0gZWxlbS5ub2RlTmFtZTtcbiAgcmV0dXJuIG5vZGVOYW1lICYmIG5vZGVOYW1lLnRv
TG93ZXJDYXNlKCkgPT09ICdpbnB1dCcgJiYgKHR5cGUgPT09ICdjaGVja2JveCcgfHwgdHlwZSA9
PT0gJ3JhZGlvJyk7XG59XG5cbmZ1bmN0aW9uIGdldFRyYWNrZXIoaW5zdCkge1xuICByZXR1cm4g
aW5zdC5fd3JhcHBlclN0YXRlLnZhbHVlVHJhY2tlcjtcbn1cblxuZnVuY3Rpb24gYXR0YWNoVHJh
Y2tlcihpbnN0LCB0cmFja2VyKSB7XG4gIGluc3QuX3dyYXBwZXJTdGF0ZS52YWx1ZVRyYWNrZXIg
PSB0cmFja2VyO1xufVxuXG5mdW5jdGlvbiBkZXRhY2hUcmFja2VyKGluc3QpIHtcbiAgZGVsZXRl
IGluc3QuX3dyYXBwZXJTdGF0ZS52YWx1ZVRyYWNrZXI7XG59XG5cbmZ1bmN0aW9uIGdldFZhbHVl
RnJvbU5vZGUobm9kZSkge1xuICB2YXIgdmFsdWU7XG4gIGlmIChub2RlKSB7XG4gICAgdmFsdWUg
PSBpc0NoZWNrYWJsZShub2RlKSA/ICcnICsgbm9kZS5jaGVja2VkIDogbm9kZS52YWx1ZTtcbiAg
fVxuICByZXR1cm4gdmFsdWU7XG59XG5cbnZhciBpbnB1dFZhbHVlVHJhY2tpbmcgPSB7XG4gIC8v
IGV4cG9zZWQgZm9yIHRlc3RpbmdcbiAgX2dldFRyYWNrZXJGcm9tTm9kZTogZnVuY3Rpb24gKG5v
ZGUpIHtcbiAgICByZXR1cm4gZ2V0VHJhY2tlcihSZWFjdERPTUNvbXBvbmVudFRyZWUuZ2V0SW5z
dGFuY2VGcm9tTm9kZShub2RlKSk7XG4gIH0sXG5cblxuICB0cmFjazogZnVuY3Rpb24gKGluc3Qp
IHtcbiAgICBpZiAoZ2V0VHJhY2tlcihpbnN0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxu
ICAgIHZhciBub2RlID0gUmVhY3RET01Db21wb25lbnRUcmVlLmdldE5vZGVGcm9tSW5zdGFuY2Uo
aW5zdCk7XG4gICAgdmFyIHZhbHVlRmllbGQgPSBpc0NoZWNrYWJsZShub2RlKSA/ICdjaGVja2Vk
JyA6ICd2YWx1ZSc7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKG5vZGUuY29uc3RydWN0b3IucHJvdG90eXBlLCB2YWx1ZUZpZWxkKTtcblxuICAg
IHZhciBjdXJyZW50VmFsdWUgPSAnJyArIG5vZGVbdmFsdWVGaWVsZF07XG5cbiAgICAvLyBpZiBz
b21lb25lIGhhcyBhbHJlYWR5IGRlZmluZWQgYSB2YWx1ZSBvciBTYWZhcmksIHRoZW4gYmFpbFxu
ICAgIC8vIGFuZCBkb24ndCB0cmFjayB2YWx1ZSB3aWxsIGNhdXNlIG92ZXIgcmVwb3J0aW5nIG9m
IGNoYW5nZXMsXG4gICAgLy8gYnV0IGl0J3MgYmV0dGVyIHRoZW4gYSBoYXJkIGZhaWx1cmVcbiAg
ICAvLyAobmVlZGVkIGZvciBjZXJ0YWluIHRlc3RzIHRoYXQgc3B5T24gaW5wdXQgdmFsdWVzIGFu
ZCBTYWZhcmkpXG4gICAgaWYgKG5vZGUuaGFzT3duUHJvcGVydHkodmFsdWVGaWVsZCkgfHwgdHlw
ZW9mIGRlc2NyaXB0b3IuZ2V0ICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBkZXNjcmlwdG9yLnNl
dCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShub2RlLCB2YWx1ZUZpZWxkLCB7XG4gICAgICBlbnVtZXJhYmxlOiBkZXNj
cmlwdG9yLmVudW1lcmFibGUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6
IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3IuZ2V0LmNhbGwodGhpcyk7
XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgY3VycmVu
dFZhbHVlID0gJycgKyB2YWx1ZTtcbiAgICAgICAgZGVzY3JpcHRvci5zZXQuY2FsbCh0aGlzLCB2
YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBhdHRhY2hUcmFja2VyKGluc3QsIHtcbiAg
ICAgIGdldFZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50VmFsdWU7
XG4gICAgICB9LFxuICAgICAgc2V0VmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBj
dXJyZW50VmFsdWUgPSAnJyArIHZhbHVlO1xuICAgICAgfSxcbiAgICAgIHN0b3BUcmFja2luZzog
ZnVuY3Rpb24gKCkge1xuICAgICAgICBkZXRhY2hUcmFja2VyKGluc3QpO1xuICAgICAgICBkZWxl
dGUgbm9kZVt2YWx1ZUZpZWxkXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSxcblxuICB1cGRhdGVW
YWx1ZUlmQ2hhbmdlZDogZnVuY3Rpb24gKGluc3QpIHtcbiAgICBpZiAoIWluc3QpIHtcbiAgICAg
IHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIHRyYWNrZXIgPSBnZXRUcmFja2VyKGluc3Qp
O1xuXG4gICAgaWYgKCF0cmFja2VyKSB7XG4gICAgICBpbnB1dFZhbHVlVHJhY2tpbmcudHJhY2so
aW5zdCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgbGFzdFZhbHVlID0g
dHJhY2tlci5nZXRWYWx1ZSgpO1xuICAgIHZhciBuZXh0VmFsdWUgPSBnZXRWYWx1ZUZyb21Ob2Rl
KFJlYWN0RE9NQ29tcG9uZW50VHJlZS5nZXROb2RlRnJvbUluc3RhbmNlKGluc3QpKTtcblxuICAg
IGlmIChuZXh0VmFsdWUgIT09IGxhc3RWYWx1ZSkge1xuICAgICAgdHJhY2tlci5zZXRWYWx1ZShu
ZXh0VmFsdWUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNl
O1xuICB9LFxuICBzdG9wVHJhY2tpbmc6IGZ1bmN0aW9uIChpbnN0KSB7XG4gICAgdmFyIHRyYWNr
ZXIgPSBnZXRUcmFja2VyKGluc3QpO1xuICAgIGlmICh0cmFja2VyKSB7XG4gICAgICB0cmFja2Vy
LnN0b3BUcmFja2luZygpO1xuICAgIH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpbnB1
dFZhbHVlVHJhY2tpbmc7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RF
UlxuLy8gLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9pbnB1dFZhbHVlVHJhY2tpbmcuanNc
bi8vIG1vZHVsZSBpZCA9IDY0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qKlxuICogQ29weXJp
Z2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
XG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxl
IGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0
b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVu
dCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGly
ZWN0b3J5LlxuICpcbiAqIFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBAc2VlIGh0
dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdl
L3RoZS1pbnB1dC1lbGVtZW50Lmh0bWwjaW5wdXQtdHlwZS1hdHRyLXN1bW1hcnlcbiAqL1xuXG52
YXIgc3VwcG9ydGVkSW5wdXRUeXBlcyA9IHtcbiAgY29sb3I6IHRydWUsXG4gIGRhdGU6IHRydWUs
XG4gIGRhdGV0aW1lOiB0cnVlLFxuICAnZGF0ZXRpbWUtbG9jYWwnOiB0cnVlLFxuICBlbWFpbDog
dHJ1ZSxcbiAgbW9udGg6IHRydWUsXG4gIG51bWJlcjogdHJ1ZSxcbiAgcGFzc3dvcmQ6IHRydWUs
XG4gIHJhbmdlOiB0cnVlLFxuICBzZWFyY2g6IHRydWUsXG4gIHRlbDogdHJ1ZSxcbiAgdGV4dDog
dHJ1ZSxcbiAgdGltZTogdHJ1ZSxcbiAgdXJsOiB0cnVlLFxuICB3ZWVrOiB0cnVlXG59O1xuXG5m
dW5jdGlvbiBpc1RleHRJbnB1dEVsZW1lbnQoZWxlbSkge1xuICB2YXIgbm9kZU5hbWUgPSBlbGVt
ICYmIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gIGlm
IChub2RlTmFtZSA9PT0gJ2lucHV0Jykge1xuICAgIHJldHVybiAhIXN1cHBvcnRlZElucHV0VHlw
ZXNbZWxlbS50eXBlXTtcbiAgfVxuXG4gIGlmIChub2RlTmFtZSA9PT0gJ3RleHRhcmVhJykge1xu
ICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhw
b3J0cyA9IGlzVGV4dElucHV0RWxlbWVudDtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdF
QlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL2lzVGV4dElucHV0
RWxlbWVudC5qc1xuLy8gbW9kdWxlIGlkID0gNjVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyoq
XG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0
cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRo
ZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxu
ICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0
aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFZpZXdw
b3J0TWV0cmljcyA9IHtcbiAgY3VycmVudFNjcm9sbExlZnQ6IDAsXG5cbiAgY3VycmVudFNjcm9s
bFRvcDogMCxcblxuICByZWZyZXNoU2Nyb2xsVmFsdWVzOiBmdW5jdGlvbiAoc2Nyb2xsUG9zaXRp
b24pIHtcbiAgICBWaWV3cG9ydE1ldHJpY3MuY3VycmVudFNjcm9sbExlZnQgPSBzY3JvbGxQb3Np
dGlvbi54O1xuICAgIFZpZXdwb3J0TWV0cmljcy5jdXJyZW50U2Nyb2xsVG9wID0gc2Nyb2xsUG9z
aXRpb24ueTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBWaWV3cG9ydE1ldHJpY3M7XG5c
blxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVs
ZXMvcmVhY3QtZG9tL2xpYi9WaWV3cG9ydE1ldHJpY3MuanNcbi8vIG1vZHVsZSBpZCA9IDY2XG4v
LyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFj
ZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2Ug
Y29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhl
XG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRy
ZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5k
IGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4n
dXNlIHN0cmljdCc7XG5cbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoJ2ZianMv
bGliL0V4ZWN1dGlvbkVudmlyb25tZW50Jyk7XG52YXIgZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93
c2VyID0gcmVxdWlyZSgnLi9lc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXInKTtcbnZhciBzZXRJ
bm5lckhUTUwgPSByZXF1aXJlKCcuL3NldElubmVySFRNTCcpO1xuXG4vKipcbiAqIFNldCB0aGUg
dGV4dENvbnRlbnQgcHJvcGVydHkgb2YgYSBub2RlLCBlbnN1cmluZyB0aGF0IHdoaXRlc3BhY2Ug
aXMgcHJlc2VydmVkXG4gKiBldmVuIGluIElFOC4gaW5uZXJUZXh0IGlzIGEgcG9vciBzdWJzdGl0
dXRlIGZvciB0ZXh0Q29udGVudCBhbmQsIGFtb25nIG1hbnlcbiAqIGlzc3VlcywgaW5zZXJ0cyA8
YnI+IGluc3RlYWQgb2YgdGhlIGxpdGVyYWwgbmV3bGluZSBjaGFycy4gaW5uZXJIVE1MIGJlaGF2
ZXNcbiAqIGFzIGl0IHNob3VsZC5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAq
IEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAaW50ZXJuYWxcbiAqL1xudmFyIHNldFRleHRDb250
ZW50ID0gZnVuY3Rpb24gKG5vZGUsIHRleHQpIHtcbiAgaWYgKHRleHQpIHtcbiAgICB2YXIgZmly
c3RDaGlsZCA9IG5vZGUuZmlyc3RDaGlsZDtcblxuICAgIGlmIChmaXJzdENoaWxkICYmIGZpcnN0
Q2hpbGQgPT09IG5vZGUubGFzdENoaWxkICYmIGZpcnN0Q2hpbGQubm9kZVR5cGUgPT09IDMpIHtc
biAgICAgIGZpcnN0Q2hpbGQubm9kZVZhbHVlID0gdGV4dDtcbiAgICAgIHJldHVybjtcbiAgICB9
XG4gIH1cbiAgbm9kZS50ZXh0Q29udGVudCA9IHRleHQ7XG59O1xuXG5pZiAoRXhlY3V0aW9uRW52
aXJvbm1lbnQuY2FuVXNlRE9NKSB7XG4gIGlmICghKCd0ZXh0Q29udGVudCcgaW4gZG9jdW1lbnQu
ZG9jdW1lbnRFbGVtZW50KSkge1xuICAgIHNldFRleHRDb250ZW50ID0gZnVuY3Rpb24gKG5vZGUs
IHRleHQpIHtcbiAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSAzKSB7XG4gICAgICAgIG5vZGUu
bm9kZVZhbHVlID0gdGV4dDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc2V0SW5u
ZXJIVE1MKG5vZGUsIGVzY2FwZVRleHRDb250ZW50Rm9yQnJvd3Nlcih0ZXh0KSk7XG4gICAgfTtc
biAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFRleHRDb250ZW50O1xuXG5cbi8vLy8vLy8v
Ly8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0LWRv
bS9saWIvc2V0VGV4dENvbnRlbnQuanNcbi8vIG1vZHVsZSBpZCA9IDY3XG4vLyBtb2R1bGUgY2h1
bmtzID0gMCIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJ
bmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMg
bGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElD
RU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBh
ZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUg
UEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJp
Y3QnO1xuXG4vKipcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZSBpbnB1dC90ZXh0YXJlYSB0
byBmb2N1c1xuICovXG5cbmZ1bmN0aW9uIGZvY3VzTm9kZShub2RlKSB7XG4gIC8vIElFOCBjYW4g
dGhyb3cgXCJDYW4ndCBtb3ZlIGZvY3VzIHRvIHRoZSBjb250cm9sIGJlY2F1c2UgaXQgaXMgaW52
aXNpYmxlLFxuICAvLyBub3QgZW5hYmxlZCwgb3Igb2YgYSB0eXBlIHRoYXQgZG9lcyBub3QgYWNj
ZXB0IHRoZSBmb2N1cy5cIiBmb3IgYWxsIGtpbmRzIG9mXG4gIC8vIHJlYXNvbnMgdGhhdCBhcmUg
dG9vIGV4cGVuc2l2ZSBhbmQgZnJhZ2lsZSB0byB0ZXN0LlxuICB0cnkge1xuICAgIG5vZGUuZm9j
dXMoKTtcbiAgfSBjYXRjaCAoZSkge31cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmb2N1c05vZGU7
XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21v
ZHVsZXMvZmJqcy9saWIvZm9jdXNOb2RlLmpzXG4vLyBtb2R1bGUgaWQgPSA2OFxuLy8gbW9kdWxl
IGNodW5rcyA9IDAiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJ
bmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMg
bGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElD
RU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBh
ZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUg
UEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJp
Y3QnO1xuXG4vKipcbiAqIENTUyBwcm9wZXJ0aWVzIHdoaWNoIGFjY2VwdCBudW1iZXJzIGJ1dCBh
cmUgbm90IGluIHVuaXRzIG9mIFwicHhcIi5cbiAqL1xuXG52YXIgaXNVbml0bGVzc051bWJlciA9
IHtcbiAgYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6IHRydWUsXG4gIGJvcmRlckltYWdlT3V0c2V0
OiB0cnVlLFxuICBib3JkZXJJbWFnZVNsaWNlOiB0cnVlLFxuICBib3JkZXJJbWFnZVdpZHRoOiB0
cnVlLFxuICBib3hGbGV4OiB0cnVlLFxuICBib3hGbGV4R3JvdXA6IHRydWUsXG4gIGJveE9yZGlu
YWxHcm91cDogdHJ1ZSxcbiAgY29sdW1uQ291bnQ6IHRydWUsXG4gIGZsZXg6IHRydWUsXG4gIGZs
ZXhHcm93OiB0cnVlLFxuICBmbGV4UG9zaXRpdmU6IHRydWUsXG4gIGZsZXhTaHJpbms6IHRydWUs
XG4gIGZsZXhOZWdhdGl2ZTogdHJ1ZSxcbiAgZmxleE9yZGVyOiB0cnVlLFxuICBncmlkUm93OiB0
cnVlLFxuICBncmlkUm93RW5kOiB0cnVlLFxuICBncmlkUm93U3BhbjogdHJ1ZSxcbiAgZ3JpZFJv
d1N0YXJ0OiB0cnVlLFxuICBncmlkQ29sdW1uOiB0cnVlLFxuICBncmlkQ29sdW1uRW5kOiB0cnVl
LFxuICBncmlkQ29sdW1uU3BhbjogdHJ1ZSxcbiAgZ3JpZENvbHVtblN0YXJ0OiB0cnVlLFxuICBm
b250V2VpZ2h0OiB0cnVlLFxuICBsaW5lQ2xhbXA6IHRydWUsXG4gIGxpbmVIZWlnaHQ6IHRydWUs
XG4gIG9wYWNpdHk6IHRydWUsXG4gIG9yZGVyOiB0cnVlLFxuICBvcnBoYW5zOiB0cnVlLFxuICB0
YWJTaXplOiB0cnVlLFxuICB3aWRvd3M6IHRydWUsXG4gIHpJbmRleDogdHJ1ZSxcbiAgem9vbTog
dHJ1ZSxcblxuICAvLyBTVkctcmVsYXRlZCBwcm9wZXJ0aWVzXG4gIGZpbGxPcGFjaXR5OiB0cnVl
LFxuICBmbG9vZE9wYWNpdHk6IHRydWUsXG4gIHN0b3BPcGFjaXR5OiB0cnVlLFxuICBzdHJva2VE
YXNoYXJyYXk6IHRydWUsXG4gIHN0cm9rZURhc2hvZmZzZXQ6IHRydWUsXG4gIHN0cm9rZU1pdGVy
bGltaXQ6IHRydWUsXG4gIHN0cm9rZU9wYWNpdHk6IHRydWUsXG4gIHN0cm9rZVdpZHRoOiB0cnVl
XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXggdmVuZG9yLXNwZWNpZmljIHBy
ZWZpeCwgZWc6IFdlYmtpdFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBzdHlsZSBuYW1lLCBlZzog
dHJhbnNpdGlvbkR1cmF0aW9uXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHN0eWxlIG5hbWUgcHJlZml4
ZWQgd2l0aCBgcHJlZml4YCwgcHJvcGVybHkgY2FtZWxDYXNlZCwgZWc6XG4gKiBXZWJraXRUcmFu
c2l0aW9uRHVyYXRpb25cbiAqL1xuZnVuY3Rpb24gcHJlZml4S2V5KHByZWZpeCwga2V5KSB7XG4g
IHJldHVybiBwcmVmaXggKyBrZXkuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBrZXkuc3Vic3Ry
aW5nKDEpO1xufVxuXG4vKipcbiAqIFN1cHBvcnQgc3R5bGUgbmFtZXMgdGhhdCBtYXkgY29tZSBw
YXNzZWQgaW4gcHJlZml4ZWQgYnkgYWRkaW5nIHBlcm11dGF0aW9uc1xuICogb2YgdmVuZG9yIHBy
ZWZpeGVzLlxuICovXG52YXIgcHJlZml4ZXMgPSBbJ1dlYmtpdCcsICdtcycsICdNb3onLCAnTydd
O1xuXG4vLyBVc2luZyBPYmplY3Qua2V5cyBoZXJlLCBvciBlbHNlIHRoZSB2YW5pbGxhIGZvci1p
biBsb29wIG1ha2VzIElFOCBnbyBpbnRvIGFuXG4vLyBpbmZpbml0ZSBsb29wLCBiZWNhdXNlIGl0
IGl0ZXJhdGVzIG92ZXIgdGhlIG5ld2x5IGFkZGVkIHByb3BzIHRvby5cbk9iamVjdC5rZXlzKGlz
VW5pdGxlc3NOdW1iZXIpLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcbiAgcHJlZml4ZXMuZm9y
RWFjaChmdW5jdGlvbiAocHJlZml4KSB7XG4gICAgaXNVbml0bGVzc051bWJlcltwcmVmaXhLZXko
cHJlZml4LCBwcm9wKV0gPSBpc1VuaXRsZXNzTnVtYmVyW3Byb3BdO1xuICB9KTtcbn0pO1xuXG4v
KipcbiAqIE1vc3Qgc3R5bGUgcHJvcGVydGllcyBjYW4gYmUgdW5zZXQgYnkgZG9pbmcgLnN0eWxl
W3Byb3BdID0gJycgYnV0IElFOFxuICogZG9lc24ndCBsaWtlIGRvaW5nIHRoYXQgd2l0aCBzaG9y
dGhhbmQgcHJvcGVydGllcyBzbyBmb3IgdGhlIHByb3BlcnRpZXMgdGhhdFxuICogSUU4IGJyZWFr
cyBvbiwgd2hpY2ggYXJlIGxpc3RlZCBoZXJlLCB3ZSBpbnN0ZWFkIHVuc2V0IGVhY2ggb2YgdGhl
XG4gKiBpbmRpdmlkdWFsIHByb3BlcnRpZXMuIFNlZSBodHRwOi8vYnVncy5qcXVlcnkuY29tL3Rp
Y2tldC8xMjM4NS5cbiAqIFRoZSA0LXZhbHVlICdjbG9jaycgcHJvcGVydGllcyBsaWtlIG1hcmdp
biwgcGFkZGluZywgYm9yZGVyLXdpZHRoIHNlZW0gdG9cbiAqIGJlaGF2ZSB3aXRob3V0IGFueSBw
cm9ibGVtcy4gQ3VyaW91c2x5LCBsaXN0LXN0eWxlIHdvcmtzIHRvbyB3aXRob3V0IGFueVxuICog
c3BlY2lhbCBwcm9kZGluZy5cbiAqL1xudmFyIHNob3J0aGFuZFByb3BlcnR5RXhwYW5zaW9ucyA9
IHtcbiAgYmFja2dyb3VuZDoge1xuICAgIGJhY2tncm91bmRBdHRhY2htZW50OiB0cnVlLFxuICAg
IGJhY2tncm91bmRDb2xvcjogdHJ1ZSxcbiAgICBiYWNrZ3JvdW5kSW1hZ2U6IHRydWUsXG4gICAg
YmFja2dyb3VuZFBvc2l0aW9uWDogdHJ1ZSxcbiAgICBiYWNrZ3JvdW5kUG9zaXRpb25ZOiB0cnVl
LFxuICAgIGJhY2tncm91bmRSZXBlYXQ6IHRydWVcbiAgfSxcbiAgYmFja2dyb3VuZFBvc2l0aW9u
OiB7XG4gICAgYmFja2dyb3VuZFBvc2l0aW9uWDogdHJ1ZSxcbiAgICBiYWNrZ3JvdW5kUG9zaXRp
b25ZOiB0cnVlXG4gIH0sXG4gIGJvcmRlcjoge1xuICAgIGJvcmRlcldpZHRoOiB0cnVlLFxuICAg
IGJvcmRlclN0eWxlOiB0cnVlLFxuICAgIGJvcmRlckNvbG9yOiB0cnVlXG4gIH0sXG4gIGJvcmRl
ckJvdHRvbToge1xuICAgIGJvcmRlckJvdHRvbVdpZHRoOiB0cnVlLFxuICAgIGJvcmRlckJvdHRv
bVN0eWxlOiB0cnVlLFxuICAgIGJvcmRlckJvdHRvbUNvbG9yOiB0cnVlXG4gIH0sXG4gIGJvcmRl
ckxlZnQ6IHtcbiAgICBib3JkZXJMZWZ0V2lkdGg6IHRydWUsXG4gICAgYm9yZGVyTGVmdFN0eWxl
OiB0cnVlLFxuICAgIGJvcmRlckxlZnRDb2xvcjogdHJ1ZVxuICB9LFxuICBib3JkZXJSaWdodDog
e1xuICAgIGJvcmRlclJpZ2h0V2lkdGg6IHRydWUsXG4gICAgYm9yZGVyUmlnaHRTdHlsZTogdHJ1
ZSxcbiAgICBib3JkZXJSaWdodENvbG9yOiB0cnVlXG4gIH0sXG4gIGJvcmRlclRvcDoge1xuICAg
IGJvcmRlclRvcFdpZHRoOiB0cnVlLFxuICAgIGJvcmRlclRvcFN0eWxlOiB0cnVlLFxuICAgIGJv
cmRlclRvcENvbG9yOiB0cnVlXG4gIH0sXG4gIGZvbnQ6IHtcbiAgICBmb250U3R5bGU6IHRydWUs
XG4gICAgZm9udFZhcmlhbnQ6IHRydWUsXG4gICAgZm9udFdlaWdodDogdHJ1ZSxcbiAgICBmb250
U2l6ZTogdHJ1ZSxcbiAgICBsaW5lSGVpZ2h0OiB0cnVlLFxuICAgIGZvbnRGYW1pbHk6IHRydWVc
biAgfSxcbiAgb3V0bGluZToge1xuICAgIG91dGxpbmVXaWR0aDogdHJ1ZSxcbiAgICBvdXRsaW5l
U3R5bGU6IHRydWUsXG4gICAgb3V0bGluZUNvbG9yOiB0cnVlXG4gIH1cbn07XG5cbnZhciBDU1NQ
cm9wZXJ0eSA9IHtcbiAgaXNVbml0bGVzc051bWJlcjogaXNVbml0bGVzc051bWJlcixcbiAgc2hv
cnRoYW5kUHJvcGVydHlFeHBhbnNpb25zOiBzaG9ydGhhbmRQcm9wZXJ0eUV4cGFuc2lvbnNcbn07
XG5cbm1vZHVsZS5leHBvcnRzID0gQ1NTUHJvcGVydHk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8v
XG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9DU1NQ
cm9wZXJ0eS5qc1xuLy8gbW9kdWxlIGlkID0gNjlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyoq
XG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0
cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRo
ZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxu
ICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0
aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIERPTVBy
b3BlcnR5ID0gcmVxdWlyZSgnLi9ET01Qcm9wZXJ0eScpO1xudmFyIFJlYWN0RE9NQ29tcG9uZW50
VHJlZSA9IHJlcXVpcmUoJy4vUmVhY3RET01Db21wb25lbnRUcmVlJyk7XG52YXIgUmVhY3RJbnN0
cnVtZW50YXRpb24gPSByZXF1aXJlKCcuL1JlYWN0SW5zdHJ1bWVudGF0aW9uJyk7XG5cbnZhciBx
dW90ZUF0dHJpYnV0ZVZhbHVlRm9yQnJvd3NlciA9IHJlcXVpcmUoJy4vcXVvdGVBdHRyaWJ1dGVW
YWx1ZUZvckJyb3dzZXInKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2Fybmlu
ZycpO1xuXG52YXIgVkFMSURfQVRUUklCVVRFX05BTUVfUkVHRVggPSBuZXcgUmVnRXhwKCdeWycg
KyBET01Qcm9wZXJ0eS5BVFRSSUJVVEVfTkFNRV9TVEFSVF9DSEFSICsgJ11bJyArIERPTVByb3Bl
cnR5LkFUVFJJQlVURV9OQU1FX0NIQVIgKyAnXSokJyk7XG52YXIgaWxsZWdhbEF0dHJpYnV0ZU5h
bWVDYWNoZSA9IHt9O1xudmFyIHZhbGlkYXRlZEF0dHJpYnV0ZU5hbWVDYWNoZSA9IHt9O1xuXG5m
dW5jdGlvbiBpc0F0dHJpYnV0ZU5hbWVTYWZlKGF0dHJpYnV0ZU5hbWUpIHtcbiAgaWYgKHZhbGlk
YXRlZEF0dHJpYnV0ZU5hbWVDYWNoZS5oYXNPd25Qcm9wZXJ0eShhdHRyaWJ1dGVOYW1lKSkge1xu
ICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChpbGxlZ2FsQXR0cmlidXRlTmFtZUNhY2hlLmhh
c093blByb3BlcnR5KGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4g
IGlmIChWQUxJRF9BVFRSSUJVVEVfTkFNRV9SRUdFWC50ZXN0KGF0dHJpYnV0ZU5hbWUpKSB7XG4g
ICAgdmFsaWRhdGVkQXR0cmlidXRlTmFtZUNhY2hlW2F0dHJpYnV0ZU5hbWVdID0gdHJ1ZTtcbiAg
ICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpbGxlZ2FsQXR0cmlidXRlTmFtZUNhY2hlW2F0dHJpYnV0
ZU5hbWVdID0gdHJ1ZTtcbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/
IHdhcm5pbmcoZmFsc2UsICdJbnZhbGlkIGF0dHJpYnV0ZSBuYW1lOiBgJXNgJywgYXR0cmlidXRl
TmFtZSkgOiB2b2lkIDA7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkSWdu
b3JlVmFsdWUocHJvcGVydHlJbmZvLCB2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCB8
fCBwcm9wZXJ0eUluZm8uaGFzQm9vbGVhblZhbHVlICYmICF2YWx1ZSB8fCBwcm9wZXJ0eUluZm8u
aGFzTnVtZXJpY1ZhbHVlICYmIGlzTmFOKHZhbHVlKSB8fCBwcm9wZXJ0eUluZm8uaGFzUG9zaXRp
dmVOdW1lcmljVmFsdWUgJiYgdmFsdWUgPCAxIHx8IHByb3BlcnR5SW5mby5oYXNPdmVybG9hZGVk
Qm9vbGVhblZhbHVlICYmIHZhbHVlID09PSBmYWxzZTtcbn1cblxuLyoqXG4gKiBPcGVyYXRpb25z
IGZvciBkZWFsaW5nIHdpdGggRE9NIHByb3BlcnRpZXMuXG4gKi9cbnZhciBET01Qcm9wZXJ0eU9w
ZXJhdGlvbnMgPSB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIG1hcmt1cCBmb3IgdGhlIElEIHByb3Bl
cnR5LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgVW5lc2NhcGVkIElELlxuICAgKiBA
cmV0dXJuIHtzdHJpbmd9IE1hcmt1cCBzdHJpbmcuXG4gICAqL1xuICBjcmVhdGVNYXJrdXBGb3JJ
RDogZnVuY3Rpb24gKGlkKSB7XG4gICAgcmV0dXJuIERPTVByb3BlcnR5LklEX0FUVFJJQlVURV9O
QU1FICsgJz0nICsgcXVvdGVBdHRyaWJ1dGVWYWx1ZUZvckJyb3dzZXIoaWQpO1xuICB9LFxuXG4g
IHNldEF0dHJpYnV0ZUZvcklEOiBmdW5jdGlvbiAobm9kZSwgaWQpIHtcbiAgICBub2RlLnNldEF0
dHJpYnV0ZShET01Qcm9wZXJ0eS5JRF9BVFRSSUJVVEVfTkFNRSwgaWQpO1xuICB9LFxuXG4gIGNy
ZWF0ZU1hcmt1cEZvclJvb3Q6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gRE9NUHJvcGVydHku
Uk9PVF9BVFRSSUJVVEVfTkFNRSArICc9XCJcIic7XG4gIH0sXG5cbiAgc2V0QXR0cmlidXRlRm9y
Um9vdDogZnVuY3Rpb24gKG5vZGUpIHtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShET01Qcm9wZXJ0
eS5ST09UX0FUVFJJQlVURV9OQU1FLCAnJyk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMg
bWFya3VwIGZvciBhIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxu
ICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEByZXR1cm4gez9zdHJpbmd9IE1hcmt1cCBzdHJp
bmcsIG9yIG51bGwgaWYgdGhlIHByb3BlcnR5IHdhcyBpbnZhbGlkLlxuICAgKi9cbiAgY3JlYXRl
TWFya3VwRm9yUHJvcGVydHk6IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgIHZhciBwcm9w
ZXJ0eUluZm8gPSBET01Qcm9wZXJ0eS5wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KG5hbWUpID8g
RE9NUHJvcGVydHkucHJvcGVydGllc1tuYW1lXSA6IG51bGw7XG4gICAgaWYgKHByb3BlcnR5SW5m
bykge1xuICAgICAgaWYgKHNob3VsZElnbm9yZVZhbHVlKHByb3BlcnR5SW5mbywgdmFsdWUpKSB7
XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICAgIHZhciBhdHRyaWJ1dGVOYW1lID0g
cHJvcGVydHlJbmZvLmF0dHJpYnV0ZU5hbWU7XG4gICAgICBpZiAocHJvcGVydHlJbmZvLmhhc0Jv
b2xlYW5WYWx1ZSB8fCBwcm9wZXJ0eUluZm8uaGFzT3ZlcmxvYWRlZEJvb2xlYW5WYWx1ZSAmJiB2
YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgICByZXR1cm4gYXR0cmlidXRlTmFtZSArICc9XCJcIic7
XG4gICAgICB9XG4gICAgICByZXR1cm4gYXR0cmlidXRlTmFtZSArICc9JyArIHF1b3RlQXR0cmli
dXRlVmFsdWVGb3JCcm93c2VyKHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKERPTVByb3BlcnR5Lmlz
Q3VzdG9tQXR0cmlidXRlKG5hbWUpKSB7XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAg
ICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmFtZSArICc9JyArIHF1b3Rl
QXR0cmlidXRlVmFsdWVGb3JCcm93c2VyKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7
XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgbWFya3VwIGZvciBhIGN1c3RvbSBwcm9wZXJ0
eS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHsqfSB2YWx1
ZVxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IE1hcmt1cCBzdHJpbmcsIG9yIGVtcHR5IHN0cmluZyBp
ZiB0aGUgcHJvcGVydHkgd2FzIGludmFsaWQuXG4gICAqL1xuICBjcmVhdGVNYXJrdXBGb3JDdXN0
b21BdHRyaWJ1dGU6IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgIGlmICghaXNBdHRyaWJ1
dGVOYW1lU2FmZShuYW1lKSB8fCB2YWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gJyc7XG4g
ICAgfVxuICAgIHJldHVybiBuYW1lICsgJz0nICsgcXVvdGVBdHRyaWJ1dGVWYWx1ZUZvckJyb3dz
ZXIodmFsdWUpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB2YWx1ZSBmb3IgYSBwcm9w
ZXJ0eSBvbiBhIG5vZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICAg
KiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqL1xuICBz
ZXRWYWx1ZUZvclByb3BlcnR5OiBmdW5jdGlvbiAobm9kZSwgbmFtZSwgdmFsdWUpIHtcbiAgICB2
YXIgcHJvcGVydHlJbmZvID0gRE9NUHJvcGVydHkucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShu
YW1lKSA/IERPTVByb3BlcnR5LnByb3BlcnRpZXNbbmFtZV0gOiBudWxsO1xuICAgIGlmIChwcm9w
ZXJ0eUluZm8pIHtcbiAgICAgIHZhciBtdXRhdGlvbk1ldGhvZCA9IHByb3BlcnR5SW5mby5tdXRh
dGlvbk1ldGhvZDtcbiAgICAgIGlmIChtdXRhdGlvbk1ldGhvZCkge1xuICAgICAgICBtdXRhdGlv
bk1ldGhvZChub2RlLCB2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHNob3VsZElnbm9yZVZhbHVl
KHByb3BlcnR5SW5mbywgdmFsdWUpKSB7XG4gICAgICAgIHRoaXMuZGVsZXRlVmFsdWVGb3JQcm9w
ZXJ0eShub2RlLCBuYW1lKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIGlmIChwcm9w
ZXJ0eUluZm8ubXVzdFVzZVByb3BlcnR5KSB7XG4gICAgICAgIC8vIENvbnRyYXJ5IHRvIGBzZXRB
dHRyaWJ1dGVgLCBvYmplY3QgcHJvcGVydGllcyBhcmUgcHJvcGVybHlcbiAgICAgICAgLy8gYHRv
U3RyaW5nYGVkIGJ5IElFOC85LlxuICAgICAgICBub2RlW3Byb3BlcnR5SW5mby5wcm9wZXJ0eU5h
bWVdID0gdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgYXR0cmlidXRlTmFtZSA9
IHByb3BlcnR5SW5mby5hdHRyaWJ1dGVOYW1lO1xuICAgICAgICB2YXIgbmFtZXNwYWNlID0gcHJv
cGVydHlJbmZvLmF0dHJpYnV0ZU5hbWVzcGFjZTtcbiAgICAgICAgLy8gYHNldEF0dHJpYnV0ZWAg
d2l0aCBvYmplY3RzIGJlY29tZXMgb25seSBgW29iamVjdF1gIGluIElFOC85LFxuICAgICAgICAv
LyAoJycgKyB2YWx1ZSkgbWFrZXMgaXQgb3V0cHV0IHRoZSBjb3JyZWN0IHRvU3RyaW5nKCktdmFs
dWUuXG4gICAgICAgIGlmIChuYW1lc3BhY2UpIHtcbiAgICAgICAgICBub2RlLnNldEF0dHJpYnV0
ZU5TKG5hbWVzcGFjZSwgYXR0cmlidXRlTmFtZSwgJycgKyB2YWx1ZSk7XG4gICAgICAgIH0gZWxz
ZSBpZiAocHJvcGVydHlJbmZvLmhhc0Jvb2xlYW5WYWx1ZSB8fCBwcm9wZXJ0eUluZm8uaGFzT3Zl
cmxvYWRlZEJvb2xlYW5WYWx1ZSAmJiB2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIG5vZGUu
c2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUsICcnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAg
ICAgICBub2RlLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lLCAnJyArIHZhbHVlKTtcbiAgICAg
ICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoRE9NUHJvcGVydHkuaXNDdXN0b21BdHRyaWJ1
dGUobmFtZSkpIHtcbiAgICAgIERPTVByb3BlcnR5T3BlcmF0aW9ucy5zZXRWYWx1ZUZvckF0dHJp
YnV0ZShub2RlLCBuYW1lLCB2YWx1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYg
KHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhciBwYXls
b2FkID0ge307XG4gICAgICBwYXlsb2FkW25hbWVdID0gdmFsdWU7XG4gICAgICBSZWFjdEluc3Ry
dW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25Ib3N0T3BlcmF0aW9uKHtcbiAgICAgICAgaW5zdGFuY2VJ
RDogUmVhY3RET01Db21wb25lbnRUcmVlLmdldEluc3RhbmNlRnJvbU5vZGUobm9kZSkuX2RlYnVn
SUQsXG4gICAgICAgIHR5cGU6ICd1cGRhdGUgYXR0cmlidXRlJyxcbiAgICAgICAgcGF5bG9hZDog
cGF5bG9hZFxuICAgICAgfSk7XG4gICAgfVxuICB9LFxuXG4gIHNldFZhbHVlRm9yQXR0cmlidXRl
OiBmdW5jdGlvbiAobm9kZSwgbmFtZSwgdmFsdWUpIHtcbiAgICBpZiAoIWlzQXR0cmlidXRlTmFt
ZVNhZmUobmFtZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09IG51
bGwpIHtcbiAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgIH0gZWxzZSB7XG4g
ICAgICBub2RlLnNldEF0dHJpYnV0ZShuYW1lLCAnJyArIHZhbHVlKTtcbiAgICB9XG5cbiAgICBp
ZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIHBh
eWxvYWQgPSB7fTtcbiAgICAgIHBheWxvYWRbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIFJlYWN0SW5z
dHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vbkhvc3RPcGVyYXRpb24oe1xuICAgICAgICBpbnN0YW5j
ZUlEOiBSZWFjdERPTUNvbXBvbmVudFRyZWUuZ2V0SW5zdGFuY2VGcm9tTm9kZShub2RlKS5fZGVi
dWdJRCxcbiAgICAgICAgdHlwZTogJ3VwZGF0ZSBhdHRyaWJ1dGUnLFxuICAgICAgICBwYXlsb2Fk
OiBwYXlsb2FkXG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIERlbGV0ZXMg
YW4gYXR0cmlidXRlcyBmcm9tIGEgbm9kZS5cbiAgICpcbiAgICogQHBhcmFtIHtET01FbGVtZW50
fSBub2RlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqL1xuICBkZWxldGVWYWx1ZUZv
ckF0dHJpYnV0ZTogZnVuY3Rpb24gKG5vZGUsIG5hbWUpIHtcbiAgICBub2RlLnJlbW92ZUF0dHJp
YnV0ZShuYW1lKTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9u
Jykge1xuICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uSG9zdE9wZXJhdGlv
bih7XG4gICAgICAgIGluc3RhbmNlSUQ6IFJlYWN0RE9NQ29tcG9uZW50VHJlZS5nZXRJbnN0YW5j
ZUZyb21Ob2RlKG5vZGUpLl9kZWJ1Z0lELFxuICAgICAgICB0eXBlOiAncmVtb3ZlIGF0dHJpYnV0
ZScsXG4gICAgICAgIHBheWxvYWQ6IG5hbWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICAv
KipcbiAgICogRGVsZXRlcyB0aGUgdmFsdWUgZm9yIGEgcHJvcGVydHkgb24gYSBub2RlLlxuICAg
KlxuICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5h
bWVcbiAgICovXG4gIGRlbGV0ZVZhbHVlRm9yUHJvcGVydHk6IGZ1bmN0aW9uIChub2RlLCBuYW1l
KSB7XG4gICAgdmFyIHByb3BlcnR5SW5mbyA9IERPTVByb3BlcnR5LnByb3BlcnRpZXMuaGFzT3du
UHJvcGVydHkobmFtZSkgPyBET01Qcm9wZXJ0eS5wcm9wZXJ0aWVzW25hbWVdIDogbnVsbDtcbiAg
ICBpZiAocHJvcGVydHlJbmZvKSB7XG4gICAgICB2YXIgbXV0YXRpb25NZXRob2QgPSBwcm9wZXJ0
eUluZm8ubXV0YXRpb25NZXRob2Q7XG4gICAgICBpZiAobXV0YXRpb25NZXRob2QpIHtcbiAgICAg
ICAgbXV0YXRpb25NZXRob2Qobm9kZSwgdW5kZWZpbmVkKTtcbiAgICAgIH0gZWxzZSBpZiAocHJv
cGVydHlJbmZvLm11c3RVc2VQcm9wZXJ0eSkge1xuICAgICAgICB2YXIgcHJvcE5hbWUgPSBwcm9w
ZXJ0eUluZm8ucHJvcGVydHlOYW1lO1xuICAgICAgICBpZiAocHJvcGVydHlJbmZvLmhhc0Jvb2xl
YW5WYWx1ZSkge1xuICAgICAgICAgIG5vZGVbcHJvcE5hbWVdID0gZmFsc2U7XG4gICAgICAgIH0g
ZWxzZSB7XG4gICAgICAgICAgbm9kZVtwcm9wTmFtZV0gPSAnJztcbiAgICAgICAgfVxuICAgICAg
fSBlbHNlIHtcbiAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUocHJvcGVydHlJbmZvLmF0dHJp
YnV0ZU5hbWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoRE9NUHJvcGVydHkuaXNDdXN0b21B
dHRyaWJ1dGUobmFtZSkpIHtcbiAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAg
IH1cblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4g
ICAgICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25Ib3N0T3BlcmF0aW9uKHtcbiAg
ICAgICAgaW5zdGFuY2VJRDogUmVhY3RET01Db21wb25lbnRUcmVlLmdldEluc3RhbmNlRnJvbU5v
ZGUobm9kZSkuX2RlYnVnSUQsXG4gICAgICAgIHR5cGU6ICdyZW1vdmUgYXR0cmlidXRlJyxcbiAg
ICAgICAgcGF5bG9hZDogbmFtZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUu
ZXhwb3J0cyA9IERPTVByb3BlcnR5T3BlcmF0aW9ucztcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9c
bi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL0RPTVBy
b3BlcnR5T3BlcmF0aW9ucy5qc1xuLy8gbW9kdWxlIGlkID0gNzBcbi8vIG1vZHVsZSBjaHVua3Mg
PSAwIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICog
QWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2Vk
IHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmls
ZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25h
bCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMg
ZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0Jztcblxu
dmFyIF9hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbnZhciBMaW5rZWRWYWx1
ZVV0aWxzID0gcmVxdWlyZSgnLi9MaW5rZWRWYWx1ZVV0aWxzJyk7XG52YXIgUmVhY3RET01Db21w
b25lbnRUcmVlID0gcmVxdWlyZSgnLi9SZWFjdERPTUNvbXBvbmVudFRyZWUnKTtcbnZhciBSZWFj
dFVwZGF0ZXMgPSByZXF1aXJlKCcuL1JlYWN0VXBkYXRlcycpO1xuXG52YXIgd2FybmluZyA9IHJl
cXVpcmUoJ2ZianMvbGliL3dhcm5pbmcnKTtcblxudmFyIGRpZFdhcm5WYWx1ZUxpbmsgPSBmYWxz
ZTtcbnZhciBkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUgPSBmYWxzZTtcblxuZnVuY3Rpb24gdXBk
YXRlT3B0aW9uc0lmUGVuZGluZ1VwZGF0ZUFuZE1vdW50ZWQoKSB7XG4gIGlmICh0aGlzLl9yb290
Tm9kZUlEICYmIHRoaXMuX3dyYXBwZXJTdGF0ZS5wZW5kaW5nVXBkYXRlKSB7XG4gICAgdGhpcy5f
d3JhcHBlclN0YXRlLnBlbmRpbmdVcGRhdGUgPSBmYWxzZTtcblxuICAgIHZhciBwcm9wcyA9IHRo
aXMuX2N1cnJlbnRFbGVtZW50LnByb3BzO1xuICAgIHZhciB2YWx1ZSA9IExpbmtlZFZhbHVlVXRp
bHMuZ2V0VmFsdWUocHJvcHMpO1xuXG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgIHVw
ZGF0ZU9wdGlvbnModGhpcywgQm9vbGVhbihwcm9wcy5tdWx0aXBsZSksIHZhbHVlKTtcbiAgICB9
XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKG93bmVyKSB7
XG4gIGlmIChvd25lcikge1xuICAgIHZhciBuYW1lID0gb3duZXIuZ2V0TmFtZSgpO1xuICAgIGlm
IChuYW1lKSB7XG4gICAgICByZXR1cm4gJyBDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyAr
IG5hbWUgKyAnYC4nO1xuICAgIH1cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbnZhciB2YWx1ZVBy
b3BOYW1lcyA9IFsndmFsdWUnLCAnZGVmYXVsdFZhbHVlJ107XG5cbi8qKlxuICogVmFsaWRhdGlv
biBmdW5jdGlvbiBmb3IgYHZhbHVlYCBhbmQgYGRlZmF1bHRWYWx1ZWAuXG4gKiBAcHJpdmF0ZVxu
ICovXG5mdW5jdGlvbiBjaGVja1NlbGVjdFByb3BUeXBlcyhpbnN0LCBwcm9wcykge1xuICB2YXIg
b3duZXIgPSBpbnN0Ll9jdXJyZW50RWxlbWVudC5fb3duZXI7XG4gIExpbmtlZFZhbHVlVXRpbHMu
Y2hlY2tQcm9wVHlwZXMoJ3NlbGVjdCcsIHByb3BzLCBvd25lcik7XG5cbiAgaWYgKHByb3BzLnZh
bHVlTGluayAhPT0gdW5kZWZpbmVkICYmICFkaWRXYXJuVmFsdWVMaW5rKSB7XG4gICAgcHJvY2Vz
cy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdgdmFsdWVM
aW5rYCBwcm9wIG9uIGBzZWxlY3RgIGlzIGRlcHJlY2F0ZWQ7IHNldCBgdmFsdWVgIGFuZCBgb25D
aGFuZ2VgIGluc3RlYWQuJykgOiB2b2lkIDA7XG4gICAgZGlkV2FyblZhbHVlTGluayA9IHRydWU7
XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlUHJvcE5hbWVzLmxlbmd0aDsgaSsr
KSB7XG4gICAgdmFyIHByb3BOYW1lID0gdmFsdWVQcm9wTmFtZXNbaV07XG4gICAgaWYgKHByb3Bz
W3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdmFyIGlz
QXJyYXkgPSBBcnJheS5pc0FycmF5KHByb3BzW3Byb3BOYW1lXSk7XG4gICAgaWYgKHByb3BzLm11
bHRpcGxlICYmICFpc0FycmF5KSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3By
b2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ1RoZSBgJXNgIHByb3Agc3VwcGxpZWQgdG8gPHNl
bGVjdD4gbXVzdCBiZSBhbiBhcnJheSBpZiAnICsgJ2BtdWx0aXBsZWAgaXMgdHJ1ZS4lcycsIHBy
b3BOYW1lLCBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0ob3duZXIpKSA6IHZvaWQgMDtcbiAg
ICB9IGVsc2UgaWYgKCFwcm9wcy5tdWx0aXBsZSAmJiBpc0FycmF5KSB7XG4gICAgICBwcm9jZXNz
LmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ1RoZSBgJXNg
IHByb3Agc3VwcGxpZWQgdG8gPHNlbGVjdD4gbXVzdCBiZSBhIHNjYWxhciAnICsgJ3ZhbHVlIGlm
IGBtdWx0aXBsZWAgaXMgZmFsc2UuJXMnLCBwcm9wTmFtZSwgZ2V0RGVjbGFyYXRpb25FcnJvckFk
ZGVuZHVtKG93bmVyKSkgOiB2b2lkIDA7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFt
IHtSZWFjdERPTUNvbXBvbmVudH0gaW5zdFxuICogQHBhcmFtIHtib29sZWFufSBtdWx0aXBsZVxu
ICogQHBhcmFtIHsqfSBwcm9wVmFsdWUgQSBzdHJpbmdhYmxlICh3aXRoIGBtdWx0aXBsZWAsIGEg
bGlzdCBvZiBzdHJpbmdhYmxlcykuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB1cGRhdGVP
cHRpb25zKGluc3QsIG11bHRpcGxlLCBwcm9wVmFsdWUpIHtcbiAgdmFyIHNlbGVjdGVkVmFsdWUs
IGk7XG4gIHZhciBvcHRpb25zID0gUmVhY3RET01Db21wb25lbnRUcmVlLmdldE5vZGVGcm9tSW5z
dGFuY2UoaW5zdCkub3B0aW9ucztcblxuICBpZiAobXVsdGlwbGUpIHtcbiAgICBzZWxlY3RlZFZh
bHVlID0ge307XG4gICAgZm9yIChpID0gMDsgaSA8IHByb3BWYWx1ZS5sZW5ndGg7IGkrKykge1xu
ICAgICAgc2VsZWN0ZWRWYWx1ZVsnJyArIHByb3BWYWx1ZVtpXV0gPSB0cnVlO1xuICAgIH1cbiAg
ICBmb3IgKGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlbGVj
dGVkID0gc2VsZWN0ZWRWYWx1ZS5oYXNPd25Qcm9wZXJ0eShvcHRpb25zW2ldLnZhbHVlKTtcbiAg
ICAgIGlmIChvcHRpb25zW2ldLnNlbGVjdGVkICE9PSBzZWxlY3RlZCkge1xuICAgICAgICBvcHRp
b25zW2ldLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xu
ICAgIC8vIERvIG5vdCBzZXQgYHNlbGVjdC52YWx1ZWAgYXMgZXhhY3QgYmVoYXZpb3IgaXNuJ3Qg
Y29uc2lzdGVudCBhY3Jvc3MgYWxsXG4gICAgLy8gYnJvd3NlcnMgZm9yIGFsbCBjYXNlcy5cbiAg
ICBzZWxlY3RlZFZhbHVlID0gJycgKyBwcm9wVmFsdWU7XG4gICAgZm9yIChpID0gMDsgaSA8IG9w
dGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChvcHRpb25zW2ldLnZhbHVlID09PSBzZWxl
Y3RlZFZhbHVlKSB7XG4gICAgICAgIG9wdGlvbnNbaV0uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAg
ICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmxlbmd0aCkge1xuICAg
ICAgb3B0aW9uc1swXS5zZWxlY3RlZCA9IHRydWU7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICog
SW1wbGVtZW50cyBhIDxzZWxlY3Q+IGhvc3QgY29tcG9uZW50IHRoYXQgYWxsb3dzIG9wdGlvbmFs
bHkgc2V0dGluZyB0aGVcbiAqIHByb3BzIGB2YWx1ZWAgYW5kIGBkZWZhdWx0VmFsdWVgLiBJZiBg
bXVsdGlwbGVgIGlzIGZhbHNlLCB0aGUgcHJvcCBtdXN0IGJlIGFcbiAqIHN0cmluZ2FibGUuIElm
IGBtdWx0aXBsZWAgaXMgdHJ1ZSwgdGhlIHByb3AgbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdh
Ymxlcy5cbiAqXG4gKiBJZiBgdmFsdWVgIGlzIG5vdCBzdXBwbGllZCAob3IgbnVsbC91bmRlZmlu
ZWQpLCB1c2VyIGFjdGlvbnMgdGhhdCBjaGFuZ2UgdGhlXG4gKiBzZWxlY3RlZCBvcHRpb24gd2ls
bCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIHJlbmRlcmVkIG9wdGlvbnMuXG4gKlxuICogSWYgaXQg
aXMgc3VwcGxpZWQgKGFuZCBub3QgbnVsbC91bmRlZmluZWQpLCB0aGUgcmVuZGVyZWQgb3B0aW9u
cyB3aWxsIG5vdFxuICogdXBkYXRlIGluIHJlc3BvbnNlIHRvIHVzZXIgYWN0aW9ucy4gSW5zdGVh
ZCwgdGhlIGB2YWx1ZWAgcHJvcCBtdXN0IGNoYW5nZSBpblxuICogb3JkZXIgZm9yIHRoZSByZW5k
ZXJlZCBvcHRpb25zIHRvIHVwZGF0ZS5cbiAqXG4gKiBJZiBgZGVmYXVsdFZhbHVlYCBpcyBwcm92
aWRlZCwgYW55IG9wdGlvbnMgd2l0aCB0aGUgc3VwcGxpZWQgdmFsdWVzIHdpbGwgYmVcbiAqIHNl
bGVjdGVkLlxuICovXG52YXIgUmVhY3RET01TZWxlY3QgPSB7XG4gIGdldEhvc3RQcm9wczogZnVu
Y3Rpb24gKGluc3QsIHByb3BzKSB7XG4gICAgcmV0dXJuIF9hc3NpZ24oe30sIHByb3BzLCB7XG4g
ICAgICBvbkNoYW5nZTogaW5zdC5fd3JhcHBlclN0YXRlLm9uQ2hhbmdlLFxuICAgICAgdmFsdWU6
IHVuZGVmaW5lZFxuICAgIH0pO1xuICB9LFxuXG4gIG1vdW50V3JhcHBlcjogZnVuY3Rpb24gKGlu
c3QsIHByb3BzKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlv
bicpIHtcbiAgICAgIGNoZWNrU2VsZWN0UHJvcFR5cGVzKGluc3QsIHByb3BzKTtcbiAgICB9XG5c
biAgICB2YXIgdmFsdWUgPSBMaW5rZWRWYWx1ZVV0aWxzLmdldFZhbHVlKHByb3BzKTtcbiAgICBp
bnN0Ll93cmFwcGVyU3RhdGUgPSB7XG4gICAgICBwZW5kaW5nVXBkYXRlOiBmYWxzZSxcbiAgICAg
IGluaXRpYWxWYWx1ZTogdmFsdWUgIT0gbnVsbCA/IHZhbHVlIDogcHJvcHMuZGVmYXVsdFZhbHVl
LFxuICAgICAgbGlzdGVuZXJzOiBudWxsLFxuICAgICAgb25DaGFuZ2U6IF9oYW5kbGVDaGFuZ2Uu
YmluZChpbnN0KSxcbiAgICAgIHdhc011bHRpcGxlOiBCb29sZWFuKHByb3BzLm11bHRpcGxlKVxu
ICAgIH07XG5cbiAgICBpZiAocHJvcHMudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5kZWZh
dWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlKSB7XG4g
ICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxz
ZSwgJ1NlbGVjdCBlbGVtZW50cyBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkIG9yIHVuY29udHJv
bGxlZCAnICsgJyhzcGVjaWZ5IGVpdGhlciB0aGUgdmFsdWUgcHJvcCwgb3IgdGhlIGRlZmF1bHRW
YWx1ZSBwcm9wLCBidXQgbm90ICcgKyAnYm90aCkuIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29u
dHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgc2VsZWN0ICcgKyAnZWxlbWVudCBhbmQgcmVtb3ZlIG9u
ZSBvZiB0aGVzZSBwcm9wcy4gTW9yZSBpbmZvOiAnICsgJ2h0dHBzOi8vZmIubWUvcmVhY3QtY29u
dHJvbGxlZC1jb21wb25lbnRzJykgOiB2b2lkIDA7XG4gICAgICBkaWRXYXJuVmFsdWVEZWZhdWx0
VmFsdWUgPSB0cnVlO1xuICAgIH1cbiAgfSxcblxuICBnZXRTZWxlY3RWYWx1ZUNvbnRleHQ6IGZ1
bmN0aW9uIChpbnN0KSB7XG4gICAgLy8gUmVhY3RET01PcHRpb24gbG9va3MgYXQgdGhpcyBpbml0
aWFsIHZhbHVlIHNvIHRoZSBpbml0aWFsIGdlbmVyYXRlZFxuICAgIC8vIG1hcmt1cCBoYXMgY29y
cmVjdCBgc2VsZWN0ZWRgIGF0dHJpYnV0ZXNcbiAgICByZXR1cm4gaW5zdC5fd3JhcHBlclN0YXRl
LmluaXRpYWxWYWx1ZTtcbiAgfSxcblxuICBwb3N0VXBkYXRlV3JhcHBlcjogZnVuY3Rpb24gKGlu
c3QpIHtcbiAgICB2YXIgcHJvcHMgPSBpbnN0Ll9jdXJyZW50RWxlbWVudC5wcm9wcztcblxuICAg
IC8vIEFmdGVyIHRoZSBpbml0aWFsIG1vdW50LCB3ZSBjb250cm9sIHNlbGVjdGVkLW5lc3MgbWFu
dWFsbHkgc28gZG9uJ3QgcGFzc1xuICAgIC8vIHRoaXMgdmFsdWUgZG93blxuICAgIGluc3QuX3dy
YXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUgPSB1bmRlZmluZWQ7XG5cbiAgICB2YXIgd2FzTXVsdGlw
bGUgPSBpbnN0Ll93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGU7XG4gICAgaW5zdC5fd3JhcHBlclN0
YXRlLndhc011bHRpcGxlID0gQm9vbGVhbihwcm9wcy5tdWx0aXBsZSk7XG5cbiAgICB2YXIgdmFs
dWUgPSBMaW5rZWRWYWx1ZVV0aWxzLmdldFZhbHVlKHByb3BzKTtcbiAgICBpZiAodmFsdWUgIT0g
bnVsbCkge1xuICAgICAgaW5zdC5fd3JhcHBlclN0YXRlLnBlbmRpbmdVcGRhdGUgPSBmYWxzZTtc
biAgICAgIHVwZGF0ZU9wdGlvbnMoaW5zdCwgQm9vbGVhbihwcm9wcy5tdWx0aXBsZSksIHZhbHVl
KTtcbiAgICB9IGVsc2UgaWYgKHdhc011bHRpcGxlICE9PSBCb29sZWFuKHByb3BzLm11bHRpcGxl
KSkge1xuICAgICAgLy8gRm9yIHNpbXBsaWNpdHksIHJlYXBwbHkgYGRlZmF1bHRWYWx1ZWAgaWYg
YG11bHRpcGxlYCBpcyB0b2dnbGVkLlxuICAgICAgaWYgKHByb3BzLmRlZmF1bHRWYWx1ZSAhPSBu
dWxsKSB7XG4gICAgICAgIHVwZGF0ZU9wdGlvbnMoaW5zdCwgQm9vbGVhbihwcm9wcy5tdWx0aXBs
ZSksIHByb3BzLmRlZmF1bHRWYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZXZl
cnQgdGhlIHNlbGVjdCBiYWNrIHRvIGl0cyBkZWZhdWx0IHVuc2VsZWN0ZWQgc3RhdGUuXG4gICAg
ICAgIHVwZGF0ZU9wdGlvbnMoaW5zdCwgQm9vbGVhbihwcm9wcy5tdWx0aXBsZSksIHByb3BzLm11
bHRpcGxlID8gW10gOiAnJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5mdW5jdGlvbiBf
aGFuZGxlQ2hhbmdlKGV2ZW50KSB7XG4gIHZhciBwcm9wcyA9IHRoaXMuX2N1cnJlbnRFbGVtZW50
LnByb3BzO1xuICB2YXIgcmV0dXJuVmFsdWUgPSBMaW5rZWRWYWx1ZVV0aWxzLmV4ZWN1dGVPbkNo
YW5nZShwcm9wcywgZXZlbnQpO1xuXG4gIGlmICh0aGlzLl9yb290Tm9kZUlEKSB7XG4gICAgdGhp
cy5fd3JhcHBlclN0YXRlLnBlbmRpbmdVcGRhdGUgPSB0cnVlO1xuICB9XG4gIFJlYWN0VXBkYXRl
cy5hc2FwKHVwZGF0ZU9wdGlvbnNJZlBlbmRpbmdVcGRhdGVBbmRNb3VudGVkLCB0aGlzKTtcbiAg
cmV0dXJuIHJldHVyblZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NU2VsZWN0
O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9t
b2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RET01TZWxlY3QuanNcbi8vIG1vZHVsZSBpZCA9IDcx
XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJv
d3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJv
bSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0
dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4g
YSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2Rl
IHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVu
Y3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5c
blxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5j
dGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91
dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91
dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRl
ZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVv
ZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1l
b3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNl
dFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkg
e1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4g
ICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicp
IHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAg
ICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVh
clRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENs
ZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9u
IHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVv
dXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4g
ICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRp
bWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChj
YWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0
KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0
O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xu
ICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0
IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1
biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdo
ZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4g
ZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAg
ICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAg
ICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBp
dCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZv
ciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwg
dGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0
LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBy
dW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0g
Y2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0
dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAg
IC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmlu
ZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8
fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVk
Q2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0
KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9k
eSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAg
ICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xu
ICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhl
IHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFs
IG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENs
ZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAg
ICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUu
IHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91
ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3Iu
XG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVs
ZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2Fj
aGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxu
XG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVu
dFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNr
KCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1
cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5s
ZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAg
ICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1
ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24g
ZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAg
IH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBk
cmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxl
KGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBb
XTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYg
KGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4
XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0g
LTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVl
ID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1l
b3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIg
YXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50
cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxl
bmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAg
ICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAg
IGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVv
dXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2Jq
ZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4g
ICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24g
KCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3Mu
dGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYg
PSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5
IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5c
bmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlz
dGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtc
bnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5l
cnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVy
ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cbnByb2Nlc3Mu
bGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cblxucHJvY2Vzcy5iaW5k
aW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmlu
ZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgp
IHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0
aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnBy
b2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG5cblxuXG4vLy8vLy8vLy8v
Ly8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jy
b3dzZXIuanNcbi8vIG1vZHVsZSBpZCA9IDcyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qKlxu
ICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUg
QlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJv
b3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAq
IG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhl
IHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfcHJvZElu
dmFyaWFudCA9IHJlcXVpcmUoJy4vcmVhY3RQcm9kSW52YXJpYW50JyksXG4gICAgX2Fzc2lnbiA9
IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxudmFyIFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50
ID0gcmVxdWlyZSgnLi9SZWFjdENvbXBvc2l0ZUNvbXBvbmVudCcpO1xudmFyIFJlYWN0RW1wdHlD
b21wb25lbnQgPSByZXF1aXJlKCcuL1JlYWN0RW1wdHlDb21wb25lbnQnKTtcbnZhciBSZWFjdEhv
c3RDb21wb25lbnQgPSByZXF1aXJlKCcuL1JlYWN0SG9zdENvbXBvbmVudCcpO1xuXG52YXIgZ2V0
TmV4dERlYnVnSUQgPSByZXF1aXJlKCdyZWFjdC9saWIvZ2V0TmV4dERlYnVnSUQnKTtcbnZhciBp
bnZhcmlhbnQgPSByZXF1aXJlKCdmYmpzL2xpYi9pbnZhcmlhbnQnKTtcbnZhciB3YXJuaW5nID0g
cmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuXG4vLyBUbyBhdm9pZCBhIGN5Y2xpYyBkZXBl
bmRlbmN5LCB3ZSBjcmVhdGUgdGhlIGZpbmFsIGNsYXNzIGluIHRoaXMgbW9kdWxlXG52YXIgUmVh
Y3RDb21wb3NpdGVDb21wb25lbnRXcmFwcGVyID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgdGhp
cy5jb25zdHJ1Y3QoZWxlbWVudCk7XG59O1xuXG5mdW5jdGlvbiBnZXREZWNsYXJhdGlvbkVycm9y
QWRkZW5kdW0ob3duZXIpIHtcbiAgaWYgKG93bmVyKSB7XG4gICAgdmFyIG5hbWUgPSBvd25lci5n
ZXROYW1lKCk7XG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIHJldHVybiAnIENoZWNrIHRoZSByZW5k
ZXIgbWV0aG9kIG9mIGAnICsgbmFtZSArICdgLic7XG4gICAgfVxuICB9XG4gIHJldHVybiAnJztc
bn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgdHlwZSByZWZlcmVuY2UgaXMgYSBrbm93biBpbnRl
cm5hbCB0eXBlLiBJLmUuIG5vdCBhIHVzZXJcbiAqIHByb3ZpZGVkIGNvbXBvc2l0ZSB0eXBlLlxu
ICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHR5cGVcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVy
bnMgdHJ1ZSBpZiB0aGlzIGlzIGEgdmFsaWQgaW50ZXJuYWwgdHlwZS5cbiAqL1xuZnVuY3Rpb24g
aXNJbnRlcm5hbENvbXBvbmVudFR5cGUodHlwZSkge1xuICByZXR1cm4gdHlwZW9mIHR5cGUgPT09
ICdmdW5jdGlvbicgJiYgdHlwZW9mIHR5cGUucHJvdG90eXBlICE9PSAndW5kZWZpbmVkJyAmJiB0
eXBlb2YgdHlwZS5wcm90b3R5cGUubW91bnRDb21wb25lbnQgPT09ICdmdW5jdGlvbicgJiYgdHlw
ZW9mIHR5cGUucHJvdG90eXBlLnJlY2VpdmVDb21wb25lbnQgPT09ICdmdW5jdGlvbic7XG59XG5c
bi8qKlxuICogR2l2ZW4gYSBSZWFjdE5vZGUsIGNyZWF0ZSBhbiBpbnN0YW5jZSB0aGF0IHdpbGwg
YWN0dWFsbHkgYmUgbW91bnRlZC5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0Tm9kZX0gbm9kZVxuICog
QHBhcmFtIHtib29sZWFufSBzaG91bGRIYXZlRGVidWdJRFxuICogQHJldHVybiB7b2JqZWN0fSBB
IG5ldyBpbnN0YW5jZSBvZiB0aGUgZWxlbWVudCdzIGNvbnN0cnVjdG9yLlxuICogQHByb3RlY3Rl
ZFxuICovXG5mdW5jdGlvbiBpbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50KG5vZGUsIHNob3VsZEhh
dmVEZWJ1Z0lEKSB7XG4gIHZhciBpbnN0YW5jZTtcblxuICBpZiAobm9kZSA9PT0gbnVsbCB8fCBu
b2RlID09PSBmYWxzZSkge1xuICAgIGluc3RhbmNlID0gUmVhY3RFbXB0eUNvbXBvbmVudC5jcmVh
dGUoaW5zdGFudGlhdGVSZWFjdENvbXBvbmVudCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIG5vZGUg
PT09ICdvYmplY3QnKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBub2RlO1xuICAgIHZhciB0eXBlID0g
ZWxlbWVudC50eXBlO1xuICAgIGlmICh0eXBlb2YgdHlwZSAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBl
b2YgdHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHZhciBpbmZvID0gJyc7XG4gICAgICBpZiAo
cHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAodHlw
ZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBu
dWxsICYmIE9iamVjdC5rZXlzKHR5cGUpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGluZm8g
Kz0gJyBZb3UgbGlrZWx5IGZvcmdvdCB0byBleHBvcnQgeW91ciBjb21wb25lbnQgZnJvbSB0aGUg
ZmlsZSAnICsgXCJpdCdzIGRlZmluZWQgaW4uXCI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAg
IGluZm8gKz0gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKGVsZW1lbnQuX293bmVyKTtcbiAg
ICAgICFmYWxzZSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZh
cmlhbnQoZmFsc2UsICdFbGVtZW50IHR5cGUgaXMgaW52YWxpZDogZXhwZWN0ZWQgYSBzdHJpbmcg
KGZvciBidWlsdC1pbiBjb21wb25lbnRzKSBvciBhIGNsYXNzL2Z1bmN0aW9uIChmb3IgY29tcG9z
aXRlIGNvbXBvbmVudHMpIGJ1dCBnb3Q6ICVzLiVzJywgdHlwZSA9PSBudWxsID8gdHlwZSA6IHR5
cGVvZiB0eXBlLCBpbmZvKSA6IF9wcm9kSW52YXJpYW50KCcxMzAnLCB0eXBlID09IG51bGwgPyB0
eXBlIDogdHlwZW9mIHR5cGUsIGluZm8pIDogdm9pZCAwO1xuICAgIH1cblxuICAgIC8vIFNwZWNp
YWwgY2FzZSBzdHJpbmcgdmFsdWVzXG4gICAgaWYgKHR5cGVvZiBlbGVtZW50LnR5cGUgPT09ICdz
dHJpbmcnKSB7XG4gICAgICBpbnN0YW5jZSA9IFJlYWN0SG9zdENvbXBvbmVudC5jcmVhdGVJbnRl
cm5hbENvbXBvbmVudChlbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKGlzSW50ZXJuYWxDb21wb25l
bnRUeXBlKGVsZW1lbnQudHlwZSkpIHtcbiAgICAgIC8vIFRoaXMgaXMgdGVtcG9yYXJpbHkgYXZh
aWxhYmxlIGZvciBjdXN0b20gY29tcG9uZW50cyB0aGF0IGFyZSBub3Qgc3RyaW5nXG4gICAgICAv
LyByZXByZXNlbnRhdGlvbnMuIEkuZS4gQVJULiBPbmNlIHRob3NlIGFyZSB1cGRhdGVkIHRvIHVz
ZSB0aGUgc3RyaW5nXG4gICAgICAvLyByZXByZXNlbnRhdGlvbiwgd2UgY2FuIGRyb3AgdGhpcyBj
b2RlIHBhdGguXG4gICAgICBpbnN0YW5jZSA9IG5ldyBlbGVtZW50LnR5cGUoZWxlbWVudCk7XG5c
biAgICAgIC8vIFdlIHJlbmFtZWQgdGhpcy4gQWxsb3cgdGhlIG9sZCBuYW1lIGZvciBjb21wYXQu
IDooXG4gICAgICBpZiAoIWluc3RhbmNlLmdldEhvc3ROb2RlKSB7XG4gICAgICAgIGluc3RhbmNl
LmdldEhvc3ROb2RlID0gaW5zdGFuY2UuZ2V0TmF0aXZlTm9kZTtcbiAgICAgIH1cbiAgICB9IGVs
c2Uge1xuICAgICAgaW5zdGFuY2UgPSBuZXcgUmVhY3RDb21wb3NpdGVDb21wb25lbnRXcmFwcGVy
KGVsZW1lbnQpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2Ygbm9kZSA9PT0gJ3N0cmluZycg
fHwgdHlwZW9mIG5vZGUgPT09ICdudW1iZXInKSB7XG4gICAgaW5zdGFuY2UgPSBSZWFjdEhvc3RD
b21wb25lbnQuY3JlYXRlSW5zdGFuY2VGb3JUZXh0KG5vZGUpO1xuICB9IGVsc2Uge1xuICAgICFm
YWxzZSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQo
ZmFsc2UsICdFbmNvdW50ZXJlZCBpbnZhbGlkIFJlYWN0IG5vZGUgb2YgdHlwZSAlcycsIHR5cGVv
ZiBub2RlKSA6IF9wcm9kSW52YXJpYW50KCcxMzEnLCB0eXBlb2Ygbm9kZSkgOiB2b2lkIDA7XG4g
IH1cblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAg
IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKHR5cGVvZiBp
bnN0YW5jZS5tb3VudENvbXBvbmVudCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgaW5zdGFuY2Uu
cmVjZWl2ZUNvbXBvbmVudCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgaW5zdGFuY2UuZ2V0SG9z
dE5vZGUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGluc3RhbmNlLnVubW91bnRDb21wb25lbnQg
PT09ICdmdW5jdGlvbicsICdPbmx5IFJlYWN0IENvbXBvbmVudHMgY2FuIGJlIG1vdW50ZWQuJykg
OiB2b2lkIDA7XG4gIH1cblxuICAvLyBUaGVzZSB0d28gZmllbGRzIGFyZSB1c2VkIGJ5IHRoZSBE
T00gYW5kIEFSVCBkaWZmaW5nIGFsZ29yaXRobXNcbiAgLy8gcmVzcGVjdGl2ZWx5LiBJbnN0ZWFk
IG9mIHVzaW5nIGV4cGFuZG9zIG9uIGNvbXBvbmVudHMsIHdlIHNob3VsZCBiZVxuICAvLyBzdG9y
aW5nIHRoZSBzdGF0ZSBuZWVkZWQgYnkgdGhlIGRpZmZpbmcgYWxnb3JpdGhtcyBlbHNld2hlcmUu
XG4gIGluc3RhbmNlLl9tb3VudEluZGV4ID0gMDtcbiAgaW5zdGFuY2UuX21vdW50SW1hZ2UgPSBu
dWxsO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4g
ICAgaW5zdGFuY2UuX2RlYnVnSUQgPSBzaG91bGRIYXZlRGVidWdJRCA/IGdldE5leHREZWJ1Z0lE
KCkgOiAwO1xuICB9XG5cbiAgLy8gSW50ZXJuYWwgaW5zdGFuY2VzIHNob3VsZCBmdWxseSBjb25z
dHJ1Y3RlZCBhdCB0aGlzIHBvaW50LCBzbyB0aGV5IHNob3VsZFxuICAvLyBub3QgZ2V0IGFueSBu
ZXcgZmllbGRzIGFkZGVkIHRvIHRoZW0gYXQgdGhpcyBwb2ludC5cbiAgaWYgKHByb2Nlc3MuZW52
Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoT2JqZWN0LnByZXZlbnRFeHRl
bnNpb25zKSB7XG4gICAgICBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoaW5zdGFuY2UpO1xuICAg
IH1cbiAgfVxuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuX2Fzc2lnbihSZWFjdENvbXBvc2l0
ZUNvbXBvbmVudFdyYXBwZXIucHJvdG90eXBlLCBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCwge1xu
ICBfaW5zdGFudGlhdGVSZWFjdENvbXBvbmVudDogaW5zdGFudGlhdGVSZWFjdENvbXBvbmVudFxu
fSk7XG5cbm1vZHVsZS5leHBvcnRzID0gaW5zdGFudGlhdGVSZWFjdENvbXBvbmVudDtcblxuXG4v
Ly8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9y
ZWFjdC1kb20vbGliL2luc3RhbnRpYXRlUmVhY3RDb21wb25lbnQuanNcbi8vIG1vZHVsZSBpZCA9
IDczXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2Vu
dCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBz
b3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQg
aW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291
cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJl
IGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAq
IFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9wcm9kSW52YXJpYW50ID0gcmVxdWlyZSgn
Li9yZWFjdFByb2RJbnZhcmlhbnQnKTtcblxudmFyIFJlYWN0ID0gcmVxdWlyZSgncmVhY3QvbGli
L1JlYWN0Jyk7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKCdmYmpzL2xpYi9pbnZhcmlhbnQn
KTtcblxudmFyIFJlYWN0Tm9kZVR5cGVzID0ge1xuICBIT1NUOiAwLFxuICBDT01QT1NJVEU6IDEs
XG4gIEVNUFRZOiAyLFxuXG4gIGdldFR5cGU6IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgaWYgKG5v
ZGUgPT09IG51bGwgfHwgbm9kZSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBSZWFjdE5vZGVU
eXBlcy5FTVBUWTtcbiAgICB9IGVsc2UgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KG5vZGUpKSB7
XG4gICAgICBpZiAodHlwZW9mIG5vZGUudHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBy
ZXR1cm4gUmVhY3ROb2RlVHlwZXMuQ09NUE9TSVRFO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAg
cmV0dXJuIFJlYWN0Tm9kZVR5cGVzLkhPU1Q7XG4gICAgICB9XG4gICAgfVxuICAgICFmYWxzZSA/
IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2Us
ICdVbmV4cGVjdGVkIG5vZGU6ICVzJywgbm9kZSkgOiBfcHJvZEludmFyaWFudCgnMjYnLCBub2Rl
KSA6IHZvaWQgMDtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdE5vZGVUeXBlcztc
blxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9k
dWxlcy9yZWFjdC1kb20vbGliL1JlYWN0Tm9kZVR5cGVzLmpzXG4vLyBtb2R1bGUgaWQgPSA3NFxu
Ly8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipcbiAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQsIEZh
Y2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNl
IGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRo
ZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0
cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3Vu
ZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxu
J3VzZSBzdHJpY3QnO1xuXG52YXIgZW1wdHlDb21wb25lbnRGYWN0b3J5O1xuXG52YXIgUmVhY3RF
bXB0eUNvbXBvbmVudEluamVjdGlvbiA9IHtcbiAgaW5qZWN0RW1wdHlDb21wb25lbnRGYWN0b3J5
OiBmdW5jdGlvbiAoZmFjdG9yeSkge1xuICAgIGVtcHR5Q29tcG9uZW50RmFjdG9yeSA9IGZhY3Rv
cnk7XG4gIH1cbn07XG5cbnZhciBSZWFjdEVtcHR5Q29tcG9uZW50ID0ge1xuICBjcmVhdGU6IGZ1
bmN0aW9uIChpbnN0YW50aWF0ZSkge1xuICAgIHJldHVybiBlbXB0eUNvbXBvbmVudEZhY3Rvcnko
aW5zdGFudGlhdGUpO1xuICB9XG59O1xuXG5SZWFjdEVtcHR5Q29tcG9uZW50LmluamVjdGlvbiA9
IFJlYWN0RW1wdHlDb21wb25lbnRJbmplY3Rpb247XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RF
bXB0eUNvbXBvbmVudDtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVS
XG4vLyAuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RW1wdHlDb21wb25lbnQuanNc
bi8vIG1vZHVsZSBpZCA9IDc1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qKlxuICogQ29weXJp
Z2h0IDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
XG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxl
IGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0
b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVu
dCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGly
ZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfcHJvZEludmFyaWFudCA9
IHJlcXVpcmUoJy4vcmVhY3RQcm9kSW52YXJpYW50Jyk7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1
aXJlKCdmYmpzL2xpYi9pbnZhcmlhbnQnKTtcblxudmFyIGdlbmVyaWNDb21wb25lbnRDbGFzcyA9
IG51bGw7XG52YXIgdGV4dENvbXBvbmVudENsYXNzID0gbnVsbDtcblxudmFyIFJlYWN0SG9zdENv
bXBvbmVudEluamVjdGlvbiA9IHtcbiAgLy8gVGhpcyBhY2NlcHRzIGEgY2xhc3MgdGhhdCByZWNl
aXZlcyB0aGUgdGFnIHN0cmluZy4gVGhpcyBpcyBhIGNhdGNoIGFsbFxuICAvLyB0aGF0IGNhbiBy
ZW5kZXIgYW55IGtpbmQgb2YgdGFnLlxuICBpbmplY3RHZW5lcmljQ29tcG9uZW50Q2xhc3M6IGZ1
bmN0aW9uIChjb21wb25lbnRDbGFzcykge1xuICAgIGdlbmVyaWNDb21wb25lbnRDbGFzcyA9IGNv
bXBvbmVudENsYXNzO1xuICB9LFxuICAvLyBUaGlzIGFjY2VwdHMgYSB0ZXh0IGNvbXBvbmVudCBj
bGFzcyB0aGF0IHRha2VzIHRoZSB0ZXh0IHN0cmluZyB0byBiZVxuICAvLyByZW5kZXJlZCBhcyBw
cm9wcy5cbiAgaW5qZWN0VGV4dENvbXBvbmVudENsYXNzOiBmdW5jdGlvbiAoY29tcG9uZW50Q2xh
c3MpIHtcbiAgICB0ZXh0Q29tcG9uZW50Q2xhc3MgPSBjb21wb25lbnRDbGFzcztcbiAgfVxufTtc
blxuLyoqXG4gKiBHZXQgYSBob3N0IGludGVybmFsIGNvbXBvbmVudCBjbGFzcyBmb3IgYSBzcGVj
aWZpYyB0YWcuXG4gKlxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnQgVGhlIGVsZW1l
bnQgdG8gY3JlYXRlLlxuICogQHJldHVybiB7ZnVuY3Rpb259IFRoZSBpbnRlcm5hbCBjbGFzcyBj
b25zdHJ1Y3RvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW50ZXJuYWxDb21wb25l
bnQoZWxlbWVudCkge1xuICAhZ2VuZXJpY0NvbXBvbmVudENsYXNzID8gcHJvY2Vzcy5lbnYuTk9E
RV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ1RoZXJlIGlzIG5vIHJl
Z2lzdGVyZWQgY29tcG9uZW50IGZvciB0aGUgdGFnICVzJywgZWxlbWVudC50eXBlKSA6IF9wcm9k
SW52YXJpYW50KCcxMTEnLCBlbGVtZW50LnR5cGUpIDogdm9pZCAwO1xuICByZXR1cm4gbmV3IGdl
bmVyaWNDb21wb25lbnRDbGFzcyhlbGVtZW50KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1JlYWN0
VGV4dH0gdGV4dFxuICogQHJldHVybiB7UmVhY3RDb21wb25lbnR9XG4gKi9cbmZ1bmN0aW9uIGNy
ZWF0ZUluc3RhbmNlRm9yVGV4dCh0ZXh0KSB7XG4gIHJldHVybiBuZXcgdGV4dENvbXBvbmVudENs
YXNzKHRleHQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGNvbXBvbmVu
dFxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNUZXh0Q29tcG9uZW50KGNv
bXBvbmVudCkge1xuICByZXR1cm4gY29tcG9uZW50IGluc3RhbmNlb2YgdGV4dENvbXBvbmVudENs
YXNzO1xufVxuXG52YXIgUmVhY3RIb3N0Q29tcG9uZW50ID0ge1xuICBjcmVhdGVJbnRlcm5hbENv
bXBvbmVudDogY3JlYXRlSW50ZXJuYWxDb21wb25lbnQsXG4gIGNyZWF0ZUluc3RhbmNlRm9yVGV4
dDogY3JlYXRlSW5zdGFuY2VGb3JUZXh0LFxuICBpc1RleHRDb21wb25lbnQ6IGlzVGV4dENvbXBv
bmVudCxcbiAgaW5qZWN0aW9uOiBSZWFjdEhvc3RDb21wb25lbnRJbmplY3Rpb25cbn07XG5cbm1v
ZHVsZS5leHBvcnRzID0gUmVhY3RIb3N0Q29tcG9uZW50O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8v
L1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVh
Y3RIb3N0Q29tcG9uZW50LmpzXG4vLyBtb2R1bGUgaWQgPSA3NlxuLy8gbW9kdWxlIGNodW5rcyA9
IDAiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBB
bGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQg
dW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxl
IGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFs
IGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBm
aWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52
YXIgX3Byb2RJbnZhcmlhbnQgPSByZXF1aXJlKCcuL3JlYWN0UHJvZEludmFyaWFudCcpO1xuXG52
YXIgUmVhY3RDdXJyZW50T3duZXIgPSByZXF1aXJlKCdyZWFjdC9saWIvUmVhY3RDdXJyZW50T3du
ZXInKTtcbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSByZXF1aXJlKCcuL1JlYWN0RWxlbWVudFN5
bWJvbCcpO1xuXG52YXIgZ2V0SXRlcmF0b3JGbiA9IHJlcXVpcmUoJy4vZ2V0SXRlcmF0b3JGbicp
O1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoJ2ZianMvbGliL2ludmFyaWFudCcpO1xudmFyIEtl
eUVzY2FwZVV0aWxzID0gcmVxdWlyZSgnLi9LZXlFc2NhcGVVdGlscycpO1xudmFyIHdhcm5pbmcg
PSByZXF1aXJlKCdmYmpzL2xpYi93YXJuaW5nJyk7XG5cbnZhciBTRVBBUkFUT1IgPSAnLic7XG52
YXIgU1VCU0VQQVJBVE9SID0gJzonO1xuXG4vKipcbiAqIFRoaXMgaXMgaW5saW5lZCBmcm9tIFJl
YWN0RWxlbWVudCBzaW5jZSB0aGlzIGZpbGUgaXMgc2hhcmVkIGJldHdlZW5cbiAqIGlzb21vcnBo
aWMgYW5kIHJlbmRlcmVycy4gV2UgY291bGQgZXh0cmFjdCB0aGlzIHRvIGFcbiAqXG4gKi9cblxu
LyoqXG4gKiBUT0RPOiBUZXN0IHRoYXQgYSBzaW5nbGUgY2hpbGQgYW5kIGFuIGFycmF5IHdpdGgg
b25lIGl0ZW0gaGF2ZSB0aGUgc2FtZSBrZXlcbiAqIHBhdHRlcm4uXG4gKi9cblxudmFyIGRpZFdh
cm5BYm91dE1hcHMgPSBmYWxzZTtcblxuLyoqXG4gKiBHZW5lcmF0ZSBhIGtleSBzdHJpbmcgdGhh
dCBpZGVudGlmaWVzIGEgY29tcG9uZW50IHdpdGhpbiBhIHNldC5cbiAqXG4gKiBAcGFyYW0geyp9
IGNvbXBvbmVudCBBIGNvbXBvbmVudCB0aGF0IGNvdWxkIGNvbnRhaW4gYSBtYW51YWwga2V5Llxu
ICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IEluZGV4IHRoYXQgaXMgdXNlZCBpZiBhIG1hbnVhbCBr
ZXkgaXMgbm90IHByb3ZpZGVkLlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBn
ZXRDb21wb25lbnRLZXkoY29tcG9uZW50LCBpbmRleCkge1xuICAvLyBEbyBzb21lIHR5cGVjaGVj
a2luZyBoZXJlIHNpbmNlIHdlIGNhbGwgdGhpcyBibGluZGx5LiBXZSB3YW50IHRvIGVuc3VyZVxu
ICAvLyB0aGF0IHdlIGRvbid0IGJsb2NrIHBvdGVudGlhbCBmdXR1cmUgRVMgQVBJcy5cbiAgaWYg
KGNvbXBvbmVudCAmJiB0eXBlb2YgY29tcG9uZW50ID09PSAnb2JqZWN0JyAmJiBjb21wb25lbnQu
a2V5ICE9IG51bGwpIHtcbiAgICAvLyBFeHBsaWNpdCBrZXlcbiAgICByZXR1cm4gS2V5RXNjYXBl
VXRpbHMuZXNjYXBlKGNvbXBvbmVudC5rZXkpO1xuICB9XG4gIC8vIEltcGxpY2l0IGtleSBkZXRl
cm1pbmVkIGJ5IHRoZSBpbmRleCBpbiB0aGUgc2V0XG4gIHJldHVybiBpbmRleC50b1N0cmluZygz
Nik7XG59XG5cbi8qKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250
YWluZXIuXG4gKiBAcGFyYW0geyFzdHJpbmd9IG5hbWVTb0ZhciBOYW1lIG9mIHRoZSBrZXkgcGF0
aCBzbyBmYXIuXG4gKiBAcGFyYW0geyFmdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGJhY2sgdG8gaW52
b2tlIHdpdGggZWFjaCBjaGlsZCBmb3VuZC5cbiAqIEBwYXJhbSB7Pyp9IHRyYXZlcnNlQ29udGV4
dCBVc2VkIHRvIHBhc3MgaW5mb3JtYXRpb24gdGhyb3VnaG91dCB0aGUgdHJhdmVyc2FsXG4gKiBw
cm9jZXNzLlxuICogQHJldHVybiB7IW51bWJlcn0gVGhlIG51bWJlciBvZiBjaGlsZHJlbiBpbiB0
aGlzIHN1YnRyZWUuXG4gKi9cbmZ1bmN0aW9uIHRyYXZlcnNlQWxsQ2hpbGRyZW5JbXBsKGNoaWxk
cmVuLCBuYW1lU29GYXIsIGNhbGxiYWNrLCB0cmF2ZXJzZUNvbnRleHQpIHtcbiAgdmFyIHR5cGUg
PSB0eXBlb2YgY2hpbGRyZW47XG5cbiAgaWYgKHR5cGUgPT09ICd1bmRlZmluZWQnIHx8IHR5cGUg
PT09ICdib29sZWFuJykge1xuICAgIC8vIEFsbCBvZiB0aGUgYWJvdmUgYXJlIHBlcmNlaXZlZCBh
cyBudWxsLlxuICAgIGNoaWxkcmVuID0gbnVsbDtcbiAgfVxuXG4gIGlmIChjaGlsZHJlbiA9PT0g
bnVsbCB8fCB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlID09PSAnbnVtYmVyJyB8fFxuICAvLyBU
aGUgZm9sbG93aW5nIGlzIGlubGluZWQgZnJvbSBSZWFjdEVsZW1lbnQuIFRoaXMgbWVhbnMgd2Ug
Y2FuIG9wdGltaXplXG4gIC8vIHNvbWUgY2hlY2tzLiBSZWFjdCBGaWJlciBhbHNvIGlubGluZXMg
dGhpcyBsb2dpYyBmb3Igc2ltaWxhciBwdXJwb3Nlcy5cbiAgdHlwZSA9PT0gJ29iamVjdCcgJiYg
Y2hpbGRyZW4uJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRSkge1xuICAgIGNhbGxiYWNr
KHRyYXZlcnNlQ29udGV4dCwgY2hpbGRyZW4sXG4gICAgLy8gSWYgaXQncyB0aGUgb25seSBjaGls
ZCwgdHJlYXQgdGhlIG5hbWUgYXMgaWYgaXQgd2FzIHdyYXBwZWQgaW4gYW4gYXJyYXlcbiAgICAv
LyBzbyB0aGF0IGl0J3MgY29uc2lzdGVudCBpZiB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIGdyb3dz
LlxuICAgIG5hbWVTb0ZhciA9PT0gJycgPyBTRVBBUkFUT1IgKyBnZXRDb21wb25lbnRLZXkoY2hp
bGRyZW4sIDApIDogbmFtZVNvRmFyKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHZhciBjaGls
ZDtcbiAgdmFyIG5leHROYW1lO1xuICB2YXIgc3VidHJlZUNvdW50ID0gMDsgLy8gQ291bnQgb2Yg
Y2hpbGRyZW4gZm91bmQgaW4gdGhlIGN1cnJlbnQgc3VidHJlZS5cbiAgdmFyIG5leHROYW1lUHJl
Zml4ID0gbmFtZVNvRmFyID09PSAnJyA/IFNFUEFSQVRPUiA6IG5hbWVTb0ZhciArIFNVQlNFUEFS
QVRPUjtcblxuICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGlsZCA9IGNoaWxkcmVu
W2ldO1xuICAgICAgbmV4dE5hbWUgPSBuZXh0TmFtZVByZWZpeCArIGdldENvbXBvbmVudEtleShj
aGlsZCwgaSk7XG4gICAgICBzdWJ0cmVlQ291bnQgKz0gdHJhdmVyc2VBbGxDaGlsZHJlbkltcGwo
Y2hpbGQsIG5leHROYW1lLCBjYWxsYmFjaywgdHJhdmVyc2VDb250ZXh0KTtcbiAgICB9XG4gIH0g
ZWxzZSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKGNoaWxkcmVuKTtcbiAg
ICBpZiAoaXRlcmF0b3JGbikge1xuICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxs
KGNoaWxkcmVuKTtcbiAgICAgIHZhciBzdGVwO1xuICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IGNo
aWxkcmVuLmVudHJpZXMpIHtcbiAgICAgICAgdmFyIGlpID0gMDtcbiAgICAgICAgd2hpbGUgKCEo
c3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgIGNoaWxkID0gc3RlcC52
YWx1ZTtcbiAgICAgICAgICBuZXh0TmFtZSA9IG5leHROYW1lUHJlZml4ICsgZ2V0Q29tcG9uZW50
S2V5KGNoaWxkLCBpaSsrKTtcbiAgICAgICAgICBzdWJ0cmVlQ291bnQgKz0gdHJhdmVyc2VBbGxD
aGlsZHJlbkltcGwoY2hpbGQsIG5leHROYW1lLCBjYWxsYmFjaywgdHJhdmVyc2VDb250ZXh0KTtc
biAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVf
RU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICB2YXIgbWFwc0FzQ2hpbGRyZW5BZGRl
bmR1bSA9ICcnO1xuICAgICAgICAgIGlmIChSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XG4g
ICAgICAgICAgICB2YXIgbWFwc0FzQ2hpbGRyZW5Pd25lck5hbWUgPSBSZWFjdEN1cnJlbnRPd25l
ci5jdXJyZW50LmdldE5hbWUoKTtcbiAgICAgICAgICAgIGlmIChtYXBzQXNDaGlsZHJlbk93bmVy
TmFtZSkge1xuICAgICAgICAgICAgICBtYXBzQXNDaGlsZHJlbkFkZGVuZHVtID0gJyBDaGVjayB0
aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG1hcHNBc0NoaWxkcmVuT3duZXJOYW1lICsgJ2AuJztc
biAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9F
TlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZGlkV2FybkFib3V0TWFwcywgJ1VzaW5nIE1h
cHMgYXMgY2hpbGRyZW4gaXMgbm90IHlldCBmdWxseSBzdXBwb3J0ZWQuIEl0IGlzIGFuICcgKyAn
ZXhwZXJpbWVudGFsIGZlYXR1cmUgdGhhdCBtaWdodCBiZSByZW1vdmVkLiBDb252ZXJ0IGl0IHRv
IGEgJyArICdzZXF1ZW5jZSAvIGl0ZXJhYmxlIG9mIGtleWVkIFJlYWN0RWxlbWVudHMgaW5zdGVh
ZC4lcycsIG1hcHNBc0NoaWxkcmVuQWRkZW5kdW0pIDogdm9pZCAwO1xuICAgICAgICAgIGRpZFdh
cm5BYm91dE1hcHMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIEl0ZXJhdG9yIHdpbGwg
cHJvdmlkZSBlbnRyeSBbayx2XSB0dXBsZXMgcmF0aGVyIHRoYW4gdmFsdWVzLlxuICAgICAgICB3
aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgdmFyIGVu
dHJ5ID0gc3RlcC52YWx1ZTtcbiAgICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICAgIGNo
aWxkID0gZW50cnlbMV07XG4gICAgICAgICAgICBuZXh0TmFtZSA9IG5leHROYW1lUHJlZml4ICsg
S2V5RXNjYXBlVXRpbHMuZXNjYXBlKGVudHJ5WzBdKSArIFNVQlNFUEFSQVRPUiArIGdldENvbXBv
bmVudEtleShjaGlsZCwgMCk7XG4gICAgICAgICAgICBzdWJ0cmVlQ291bnQgKz0gdHJhdmVyc2VB
bGxDaGlsZHJlbkltcGwoY2hpbGQsIG5leHROYW1lLCBjYWxsYmFjaywgdHJhdmVyc2VDb250ZXh0
KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUg
PT09ICdvYmplY3QnKSB7XG4gICAgICB2YXIgYWRkZW5kdW0gPSAnJztcbiAgICAgIGlmIChwcm9j
ZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGFkZGVuZHVtID0g
JyBJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiwgdXNlIGFu
IGFycmF5ICcgKyAnaW5zdGVhZCBvciB3cmFwIHRoZSBvYmplY3QgdXNpbmcgY3JlYXRlRnJhZ21l
bnQob2JqZWN0KSBmcm9tIHRoZSAnICsgJ1JlYWN0IGFkZC1vbnMuJztcbiAgICAgICAgaWYgKGNo
aWxkcmVuLl9pc1JlYWN0RWxlbWVudCkge1xuICAgICAgICAgIGFkZGVuZHVtID0gXCIgSXQgbG9v
a3MgbGlrZSB5b3UncmUgdXNpbmcgYW4gZWxlbWVudCBjcmVhdGVkIGJ5IGEgZGlmZmVyZW50IFwi
ICsgJ3ZlcnNpb24gb2YgUmVhY3QuIE1ha2Ugc3VyZSB0byB1c2Ugb25seSBvbmUgY29weSBvZiBS
ZWFjdC4nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50
KSB7XG4gICAgICAgICAgdmFyIG5hbWUgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LmdldE5h
bWUoKTtcbiAgICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgICAgYWRkZW5kdW0gKz0gJyBD
aGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG5hbWUgKyAnYC4nO1xuICAgICAgICAgIH1c
biAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIGNoaWxkcmVuU3RyaW5nID0gU3RyaW5nKGNo
aWxkcmVuKTtcbiAgICAgICFmYWxzZSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVj
dGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdPYmplY3RzIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFj
dCBjaGlsZCAoZm91bmQ6ICVzKS4lcycsIGNoaWxkcmVuU3RyaW5nID09PSAnW29iamVjdCBPYmpl
Y3RdJyA/ICdvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMoY2hpbGRyZW4pLmpvaW4o
JywgJykgKyAnfScgOiBjaGlsZHJlblN0cmluZywgYWRkZW5kdW0pIDogX3Byb2RJbnZhcmlhbnQo
JzMxJywgY2hpbGRyZW5TdHJpbmcgPT09ICdbb2JqZWN0IE9iamVjdF0nID8gJ29iamVjdCB3aXRo
IGtleXMgeycgKyBPYmplY3Qua2V5cyhjaGlsZHJlbikuam9pbignLCAnKSArICd9JyA6IGNoaWxk
cmVuU3RyaW5nLCBhZGRlbmR1bSkgOiB2b2lkIDA7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN1
YnRyZWVDb3VudDtcbn1cblxuLyoqXG4gKiBUcmF2ZXJzZXMgY2hpbGRyZW4gdGhhdCBhcmUgdHlw
aWNhbGx5IHNwZWNpZmllZCBhcyBgcHJvcHMuY2hpbGRyZW5gLCBidXRcbiAqIG1pZ2h0IGFsc28g
YmUgc3BlY2lmaWVkIHRocm91Z2ggYXR0cmlidXRlczpcbiAqXG4gKiAtIGB0cmF2ZXJzZUFsbENo
aWxkcmVuKHRoaXMucHJvcHMuY2hpbGRyZW4sIC4uLilgXG4gKiAtIGB0cmF2ZXJzZUFsbENoaWxk
cmVuKHRoaXMucHJvcHMubGVmdFBhbmVsQ2hpbGRyZW4sIC4uLilgXG4gKlxuICogVGhlIGB0cmF2
ZXJzZUNvbnRleHRgIGlzIGFuIG9wdGlvbmFsIGFyZ3VtZW50IHRoYXQgaXMgcGFzc2VkIHRocm91
Z2ggdGhlXG4gKiBlbnRpcmUgdHJhdmVyc2FsLiBJdCBjYW4gYmUgdXNlZCB0byBzdG9yZSBhY2N1
bXVsYXRpb25zIG9yIGFueXRoaW5nIGVsc2UgdGhhdFxuICogdGhlIGNhbGxiYWNrIG1pZ2h0IGZp
bmQgcmVsZXZhbnQuXG4gKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBv
YmplY3QuXG4gKiBAcGFyYW0geyFmdW5jdGlvbn0gY2FsbGJhY2sgVG8gaW52b2tlIHVwb24gdHJh
dmVyc2luZyBlYWNoIGNoaWxkLlxuICogQHBhcmFtIHs/Kn0gdHJhdmVyc2VDb250ZXh0IENvbnRl
eHQgZm9yIHRyYXZlcnNhbC5cbiAqIEByZXR1cm4geyFudW1iZXJ9IFRoZSBudW1iZXIgb2YgY2hp
bGRyZW4gaW4gdGhpcyBzdWJ0cmVlLlxuICovXG5mdW5jdGlvbiB0cmF2ZXJzZUFsbENoaWxkcmVu
KGNoaWxkcmVuLCBjYWxsYmFjaywgdHJhdmVyc2VDb250ZXh0KSB7XG4gIGlmIChjaGlsZHJlbiA9
PSBudWxsKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICByZXR1cm4gdHJhdmVyc2VBbGxDaGls
ZHJlbkltcGwoY2hpbGRyZW4sICcnLCBjYWxsYmFjaywgdHJhdmVyc2VDb250ZXh0KTtcbn1cblxu
bW9kdWxlLmV4cG9ydHMgPSB0cmF2ZXJzZUFsbENoaWxkcmVuO1xuXG5cbi8vLy8vLy8vLy8vLy8v
Ly8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIv
dHJhdmVyc2VBbGxDaGlsZHJlbi5qc1xuLy8gbW9kdWxlIGlkID0gNzdcbi8vIG1vZHVsZSBjaHVu
a3MgPSAwIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNi1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxu
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vu
c2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0Ug
ZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRp
b25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVO
VFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuJ3VzZSBzdHJp
Y3QnO1xuXG52YXIgX3Byb2RJbnZhcmlhbnQgPSByZXF1aXJlKCcuL3JlYWN0UHJvZEludmFyaWFu
dCcpO1xuXG52YXIgUmVhY3RDdXJyZW50T3duZXIgPSByZXF1aXJlKCcuL1JlYWN0Q3VycmVudE93
bmVyJyk7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKCdmYmpzL2xpYi9pbnZhcmlhbnQnKTtc
bnZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuXG5mdW5jdGlvbiBp
c05hdGl2ZShmbikge1xuICAvLyBCYXNlZCBvbiBpc05hdGl2ZSgpIGZyb20gTG9kYXNoXG4gIHZh
ciBmdW5jVG9TdHJpbmcgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG4gIHZhciBoYXNP
d25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG4gIHZhciByZUlz
TmF0aXZlID0gUmVnRXhwKCdeJyArIGZ1bmNUb1N0cmluZ1xuICAvLyBUYWtlIGFuIGV4YW1wbGUg
bmF0aXZlIGZ1bmN0aW9uIHNvdXJjZSBmb3IgY29tcGFyaXNvblxuICAuY2FsbChoYXNPd25Qcm9w
ZXJ0eVxuICAvLyBTdHJpcCByZWdleCBjaGFyYWN0ZXJzIHNvIHdlIGNhbiB1c2UgaXQgZm9yIHJl
Z2V4XG4gICkucmVwbGFjZSgvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2csICdcXFxcJCYnXG4gIC8v
IFJlbW92ZSBoYXNPd25Qcm9wZXJ0eSBmcm9tIHRoZSB0ZW1wbGF0ZSB0byBtYWtlIGl0IGdlbmVy
aWNcbiAgKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8
IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJyk7XG4gIHRyeSB7XG4gICAgdmFy
IHNvdXJjZSA9IGZ1bmNUb1N0cmluZy5jYWxsKGZuKTtcbiAgICByZXR1cm4gcmVJc05hdGl2ZS50
ZXN0KHNvdXJjZSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxu
fVxuXG52YXIgY2FuVXNlQ29sbGVjdGlvbnMgPVxuLy8gQXJyYXkuZnJvbVxudHlwZW9mIEFycmF5
LmZyb20gPT09ICdmdW5jdGlvbicgJiZcbi8vIE1hcFxudHlwZW9mIE1hcCA9PT0gJ2Z1bmN0aW9u
JyAmJiBpc05hdGl2ZShNYXApICYmXG4vLyBNYXAucHJvdG90eXBlLmtleXNcbk1hcC5wcm90b3R5
cGUgIT0gbnVsbCAmJiB0eXBlb2YgTWFwLnByb3RvdHlwZS5rZXlzID09PSAnZnVuY3Rpb24nICYm
IGlzTmF0aXZlKE1hcC5wcm90b3R5cGUua2V5cykgJiZcbi8vIFNldFxudHlwZW9mIFNldCA9PT0g
J2Z1bmN0aW9uJyAmJiBpc05hdGl2ZShTZXQpICYmXG4vLyBTZXQucHJvdG90eXBlLmtleXNcblNl
dC5wcm90b3R5cGUgIT0gbnVsbCAmJiB0eXBlb2YgU2V0LnByb3RvdHlwZS5rZXlzID09PSAnZnVu
Y3Rpb24nICYmIGlzTmF0aXZlKFNldC5wcm90b3R5cGUua2V5cyk7XG5cbnZhciBzZXRJdGVtO1xu
dmFyIGdldEl0ZW07XG52YXIgcmVtb3ZlSXRlbTtcbnZhciBnZXRJdGVtSURzO1xudmFyIGFkZFJv
b3Q7XG52YXIgcmVtb3ZlUm9vdDtcbnZhciBnZXRSb290SURzO1xuXG5pZiAoY2FuVXNlQ29sbGVj
dGlvbnMpIHtcbiAgdmFyIGl0ZW1NYXAgPSBuZXcgTWFwKCk7XG4gIHZhciByb290SURTZXQgPSBu
ZXcgU2V0KCk7XG5cbiAgc2V0SXRlbSA9IGZ1bmN0aW9uIChpZCwgaXRlbSkge1xuICAgIGl0ZW1N
YXAuc2V0KGlkLCBpdGVtKTtcbiAgfTtcbiAgZ2V0SXRlbSA9IGZ1bmN0aW9uIChpZCkge1xuICAg
IHJldHVybiBpdGVtTWFwLmdldChpZCk7XG4gIH07XG4gIHJlbW92ZUl0ZW0gPSBmdW5jdGlvbiAo
aWQpIHtcbiAgICBpdGVtTWFwWydkZWxldGUnXShpZCk7XG4gIH07XG4gIGdldEl0ZW1JRHMgPSBm
dW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oaXRlbU1hcC5rZXlzKCkpO1xuICB9
O1xuXG4gIGFkZFJvb3QgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICByb290SURTZXQuYWRkKGlkKTtc
biAgfTtcbiAgcmVtb3ZlUm9vdCA9IGZ1bmN0aW9uIChpZCkge1xuICAgIHJvb3RJRFNldFsnZGVs
ZXRlJ10oaWQpO1xuICB9O1xuICBnZXRSb290SURzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVy
biBBcnJheS5mcm9tKHJvb3RJRFNldC5rZXlzKCkpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIGl0
ZW1CeUtleSA9IHt9O1xuICB2YXIgcm9vdEJ5S2V5ID0ge307XG5cbiAgLy8gVXNlIG5vbi1udW1l
cmljIGtleXMgdG8gcHJldmVudCBWOCBwZXJmb3JtYW5jZSBpc3N1ZXM6XG4gIC8vIGh0dHBzOi8v
Z2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzcyMzJcbiAgdmFyIGdldEtleUZyb21JRCA9
IGZ1bmN0aW9uIChpZCkge1xuICAgIHJldHVybiAnLicgKyBpZDtcbiAgfTtcbiAgdmFyIGdldElE
RnJvbUtleSA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gcGFyc2VJbnQoa2V5LnN1YnN0
cigxKSwgMTApO1xuICB9O1xuXG4gIHNldEl0ZW0gPSBmdW5jdGlvbiAoaWQsIGl0ZW0pIHtcbiAg
ICB2YXIga2V5ID0gZ2V0S2V5RnJvbUlEKGlkKTtcbiAgICBpdGVtQnlLZXlba2V5XSA9IGl0ZW07
XG4gIH07XG4gIGdldEl0ZW0gPSBmdW5jdGlvbiAoaWQpIHtcbiAgICB2YXIga2V5ID0gZ2V0S2V5
RnJvbUlEKGlkKTtcbiAgICByZXR1cm4gaXRlbUJ5S2V5W2tleV07XG4gIH07XG4gIHJlbW92ZUl0
ZW0gPSBmdW5jdGlvbiAoaWQpIHtcbiAgICB2YXIga2V5ID0gZ2V0S2V5RnJvbUlEKGlkKTtcbiAg
ICBkZWxldGUgaXRlbUJ5S2V5W2tleV07XG4gIH07XG4gIGdldEl0ZW1JRHMgPSBmdW5jdGlvbiAo
KSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGl0ZW1CeUtleSkubWFwKGdldElERnJvbUtleSk7
XG4gIH07XG5cbiAgYWRkUm9vdCA9IGZ1bmN0aW9uIChpZCkge1xuICAgIHZhciBrZXkgPSBnZXRL
ZXlGcm9tSUQoaWQpO1xuICAgIHJvb3RCeUtleVtrZXldID0gdHJ1ZTtcbiAgfTtcbiAgcmVtb3Zl
Um9vdCA9IGZ1bmN0aW9uIChpZCkge1xuICAgIHZhciBrZXkgPSBnZXRLZXlGcm9tSUQoaWQpO1xu
ICAgIGRlbGV0ZSByb290QnlLZXlba2V5XTtcbiAgfTtcbiAgZ2V0Um9vdElEcyA9IGZ1bmN0aW9u
ICgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMocm9vdEJ5S2V5KS5tYXAoZ2V0SURGcm9tS2V5
KTtcbiAgfTtcbn1cblxudmFyIHVubW91bnRlZElEcyA9IFtdO1xuXG5mdW5jdGlvbiBwdXJnZURl
ZXAoaWQpIHtcbiAgdmFyIGl0ZW0gPSBnZXRJdGVtKGlkKTtcbiAgaWYgKGl0ZW0pIHtcbiAgICB2
YXIgY2hpbGRJRHMgPSBpdGVtLmNoaWxkSURzO1xuXG4gICAgcmVtb3ZlSXRlbShpZCk7XG4gICAg
Y2hpbGRJRHMuZm9yRWFjaChwdXJnZURlZXApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJl
Q29tcG9uZW50RnJhbWUobmFtZSwgc291cmNlLCBvd25lck5hbWUpIHtcbiAgcmV0dXJuICdcXG4g
ICAgaW4gJyArIChuYW1lIHx8ICdVbmtub3duJykgKyAoc291cmNlID8gJyAoYXQgJyArIHNvdXJj
ZS5maWxlTmFtZS5yZXBsYWNlKC9eLipbXFxcXFxcL10vLCAnJykgKyAnOicgKyBzb3VyY2UubGlu
ZU51bWJlciArICcpJyA6IG93bmVyTmFtZSA/ICcgKGNyZWF0ZWQgYnkgJyArIG93bmVyTmFtZSAr
ICcpJyA6ICcnKTtcbn1cblxuZnVuY3Rpb24gZ2V0RGlzcGxheU5hbWUoZWxlbWVudCkge1xuICBp
ZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgcmV0dXJuICcjZW1wdHknO1xuICB9IGVsc2UgaWYg
KHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgZWxlbWVudCA9PT0gJ251bWJl
cicpIHtcbiAgICByZXR1cm4gJyN0ZXh0JztcbiAgfSBlbHNlIGlmICh0eXBlb2YgZWxlbWVudC50
eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBlbGVtZW50LnR5cGU7XG4gIH0gZWxzZSB7
XG4gICAgcmV0dXJuIGVsZW1lbnQudHlwZS5kaXNwbGF5TmFtZSB8fCBlbGVtZW50LnR5cGUubmFt
ZSB8fCAnVW5rbm93bic7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVJRChpZCkge1xuICB2
YXIgbmFtZSA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0RGlzcGxheU5hbWUoaWQpO1xuICB2
YXIgZWxlbWVudCA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0RWxlbWVudChpZCk7XG4gIHZh
ciBvd25lcklEID0gUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXRPd25lcklEKGlkKTtcbiAgdmFy
IG93bmVyTmFtZTtcbiAgaWYgKG93bmVySUQpIHtcbiAgICBvd25lck5hbWUgPSBSZWFjdENvbXBv
bmVudFRyZWVIb29rLmdldERpc3BsYXlOYW1lKG93bmVySUQpO1xuICB9XG4gIHByb2Nlc3MuZW52
Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGVsZW1lbnQsICdSZWFjdENvbXBv
bmVudFRyZWVIb29rOiBNaXNzaW5nIFJlYWN0IGVsZW1lbnQgZm9yIGRlYnVnSUQgJXMgd2hlbiAn
ICsgJ2J1aWxkaW5nIHN0YWNrJywgaWQpIDogdm9pZCAwO1xuICByZXR1cm4gZGVzY3JpYmVDb21w
b25lbnRGcmFtZShuYW1lLCBlbGVtZW50ICYmIGVsZW1lbnQuX3NvdXJjZSwgb3duZXJOYW1lKTtc
bn1cblxudmFyIFJlYWN0Q29tcG9uZW50VHJlZUhvb2sgPSB7XG4gIG9uU2V0Q2hpbGRyZW46IGZ1
bmN0aW9uIChpZCwgbmV4dENoaWxkSURzKSB7XG4gICAgdmFyIGl0ZW0gPSBnZXRJdGVtKGlkKTtc
biAgICAhaXRlbSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZh
cmlhbnQoZmFsc2UsICdJdGVtIG11c3QgaGF2ZSBiZWVuIHNldCcpIDogX3Byb2RJbnZhcmlhbnQo
JzE0NCcpIDogdm9pZCAwO1xuICAgIGl0ZW0uY2hpbGRJRHMgPSBuZXh0Q2hpbGRJRHM7XG5cbiAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IG5leHRDaGlsZElEcy5sZW5ndGg7IGkrKykge1xuICAgICAg
dmFyIG5leHRDaGlsZElEID0gbmV4dENoaWxkSURzW2ldO1xuICAgICAgdmFyIG5leHRDaGlsZCA9
IGdldEl0ZW0obmV4dENoaWxkSUQpO1xuICAgICAgIW5leHRDaGlsZCA/IHByb2Nlc3MuZW52Lk5P
REVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdFeHBlY3RlZCBob29r
IGV2ZW50cyB0byBmaXJlIGZvciB0aGUgY2hpbGQgYmVmb3JlIGl0cyBwYXJlbnQgaW5jbHVkZXMg
aXQgaW4gb25TZXRDaGlsZHJlbigpLicpIDogX3Byb2RJbnZhcmlhbnQoJzE0MCcpIDogdm9pZCAw
O1xuICAgICAgIShuZXh0Q2hpbGQuY2hpbGRJRHMgIT0gbnVsbCB8fCB0eXBlb2YgbmV4dENoaWxk
LmVsZW1lbnQgIT09ICdvYmplY3QnIHx8IG5leHRDaGlsZC5lbGVtZW50ID09IG51bGwpID8gcHJv
Y2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ0V4
cGVjdGVkIG9uU2V0Q2hpbGRyZW4oKSB0byBmaXJlIGZvciBhIGNvbnRhaW5lciBjaGlsZCBiZWZv
cmUgaXRzIHBhcmVudCBpbmNsdWRlcyBpdCBpbiBvblNldENoaWxkcmVuKCkuJykgOiBfcHJvZElu
dmFyaWFudCgnMTQxJykgOiB2b2lkIDA7XG4gICAgICAhbmV4dENoaWxkLmlzTW91bnRlZCA/IHBy
b2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdF
eHBlY3RlZCBvbk1vdW50Q29tcG9uZW50KCkgdG8gZmlyZSBmb3IgdGhlIGNoaWxkIGJlZm9yZSBp
dHMgcGFyZW50IGluY2x1ZGVzIGl0IGluIG9uU2V0Q2hpbGRyZW4oKS4nKSA6IF9wcm9kSW52YXJp
YW50KCc3MScpIDogdm9pZCAwO1xuICAgICAgaWYgKG5leHRDaGlsZC5wYXJlbnRJRCA9PSBudWxs
KSB7XG4gICAgICAgIG5leHRDaGlsZC5wYXJlbnRJRCA9IGlkO1xuICAgICAgICAvLyBUT0RPOiBU
aGlzIHNob3VsZG4ndCBiZSBuZWNlc3NhcnkgYnV0IG1vdW50aW5nIGEgbmV3IHJvb3QgZHVyaW5n
IGluXG4gICAgICAgIC8vIGNvbXBvbmVudFdpbGxNb3VudCBjdXJyZW50bHkgY2F1c2VzIG5vdC15
ZXQtbW91bnRlZCBjb21wb25lbnRzIHRvXG4gICAgICAgIC8vIGJlIHB1cmdlZCBmcm9tIG91ciB0
cmVlIGRhdGEgc28gdGhlaXIgcGFyZW50IGlkIGlzIG1pc3NpbmcuXG4gICAgICB9XG4gICAgICAh
KG5leHRDaGlsZC5wYXJlbnRJRCA9PT0gaWQpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdw
cm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ0V4cGVjdGVkIG9uQmVmb3JlTW91bnRDb21w
b25lbnQoKSBwYXJlbnQgYW5kIG9uU2V0Q2hpbGRyZW4oKSB0byBiZSBjb25zaXN0ZW50ICglcyBo
YXMgcGFyZW50cyAlcyBhbmQgJXMpLicsIG5leHRDaGlsZElELCBuZXh0Q2hpbGQucGFyZW50SUQs
IGlkKSA6IF9wcm9kSW52YXJpYW50KCcxNDInLCBuZXh0Q2hpbGRJRCwgbmV4dENoaWxkLnBhcmVu
dElELCBpZCkgOiB2b2lkIDA7XG4gICAgfVxuICB9LFxuICBvbkJlZm9yZU1vdW50Q29tcG9uZW50
OiBmdW5jdGlvbiAoaWQsIGVsZW1lbnQsIHBhcmVudElEKSB7XG4gICAgdmFyIGl0ZW0gPSB7XG4g
ICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgcGFyZW50SUQ6IHBhcmVudElELFxuICAgICAg
dGV4dDogbnVsbCxcbiAgICAgIGNoaWxkSURzOiBbXSxcbiAgICAgIGlzTW91bnRlZDogZmFsc2Us
XG4gICAgICB1cGRhdGVDb3VudDogMFxuICAgIH07XG4gICAgc2V0SXRlbShpZCwgaXRlbSk7XG4g
IH0sXG4gIG9uQmVmb3JlVXBkYXRlQ29tcG9uZW50OiBmdW5jdGlvbiAoaWQsIGVsZW1lbnQpIHtc
biAgICB2YXIgaXRlbSA9IGdldEl0ZW0oaWQpO1xuICAgIGlmICghaXRlbSB8fCAhaXRlbS5pc01v
dW50ZWQpIHtcbiAgICAgIC8vIFdlIG1heSBlbmQgdXAgaGVyZSBhcyBhIHJlc3VsdCBvZiBzZXRT
dGF0ZSgpIGluIGNvbXBvbmVudFdpbGxVbm1vdW50KCkuXG4gICAgICAvLyBJbiB0aGlzIGNhc2Us
IGlnbm9yZSB0aGUgZWxlbWVudC5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaXRlbS5lbGVt
ZW50ID0gZWxlbWVudDtcbiAgfSxcbiAgb25Nb3VudENvbXBvbmVudDogZnVuY3Rpb24gKGlkKSB7
XG4gICAgdmFyIGl0ZW0gPSBnZXRJdGVtKGlkKTtcbiAgICAhaXRlbSA/IHByb2Nlc3MuZW52Lk5P
REVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdJdGVtIG11c3QgaGF2
ZSBiZWVuIHNldCcpIDogX3Byb2RJbnZhcmlhbnQoJzE0NCcpIDogdm9pZCAwO1xuICAgIGl0ZW0u
aXNNb3VudGVkID0gdHJ1ZTtcbiAgICB2YXIgaXNSb290ID0gaXRlbS5wYXJlbnRJRCA9PT0gMDtc
biAgICBpZiAoaXNSb290KSB7XG4gICAgICBhZGRSb290KGlkKTtcbiAgICB9XG4gIH0sXG4gIG9u
VXBkYXRlQ29tcG9uZW50OiBmdW5jdGlvbiAoaWQpIHtcbiAgICB2YXIgaXRlbSA9IGdldEl0ZW0o
aWQpO1xuICAgIGlmICghaXRlbSB8fCAhaXRlbS5pc01vdW50ZWQpIHtcbiAgICAgIC8vIFdlIG1h
eSBlbmQgdXAgaGVyZSBhcyBhIHJlc3VsdCBvZiBzZXRTdGF0ZSgpIGluIGNvbXBvbmVudFdpbGxV
bm1vdW50KCkuXG4gICAgICAvLyBJbiB0aGlzIGNhc2UsIGlnbm9yZSB0aGUgZWxlbWVudC5cbiAg
ICAgIHJldHVybjtcbiAgICB9XG4gICAgaXRlbS51cGRhdGVDb3VudCsrO1xuICB9LFxuICBvblVu
bW91bnRDb21wb25lbnQ6IGZ1bmN0aW9uIChpZCkge1xuICAgIHZhciBpdGVtID0gZ2V0SXRlbShp
ZCk7XG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgaXQgZXhp
c3RzLlxuICAgICAgLy8gYGl0ZW1gIG1pZ2h0IG5vdCBleGlzdCBpZiBpdCBpcyBpbnNpZGUgYW4g
ZXJyb3IgYm91bmRhcnksIGFuZCBhIHNpYmxpbmdcbiAgICAgIC8vIGVycm9yIGJvdW5kYXJ5IGNo
aWxkIHRocmV3IHdoaWxlIG1vdW50aW5nLiBUaGVuIHRoaXMgaW5zdGFuY2UgbmV2ZXJcbiAgICAg
IC8vIGdvdCBhIGNoYW5jZSB0byBtb3VudCwgYnV0IGl0IHN0aWxsIGdldHMgYW4gdW5tb3VudGlu
ZyBldmVudCBkdXJpbmdcbiAgICAgIC8vIHRoZSBlcnJvciBib3VuZGFyeSBjbGVhbnVwLlxuICAg
ICAgaXRlbS5pc01vdW50ZWQgPSBmYWxzZTtcbiAgICAgIHZhciBpc1Jvb3QgPSBpdGVtLnBhcmVu
dElEID09PSAwO1xuICAgICAgaWYgKGlzUm9vdCkge1xuICAgICAgICByZW1vdmVSb290KGlkKTtc
biAgICAgIH1cbiAgICB9XG4gICAgdW5tb3VudGVkSURzLnB1c2goaWQpO1xuICB9LFxuICBwdXJn
ZVVubW91bnRlZENvbXBvbmVudHM6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoUmVhY3RDb21wb25l
bnRUcmVlSG9vay5fcHJldmVudFB1cmdpbmcpIHtcbiAgICAgIC8vIFNob3VsZCBvbmx5IGJlIHVz
ZWQgZm9yIHRlc3RpbmcuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9
IDA7IGkgPCB1bm1vdW50ZWRJRHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpZCA9IHVubW91
bnRlZElEc1tpXTtcbiAgICAgIHB1cmdlRGVlcChpZCk7XG4gICAgfVxuICAgIHVubW91bnRlZElE
cy5sZW5ndGggPSAwO1xuICB9LFxuICBpc01vdW50ZWQ6IGZ1bmN0aW9uIChpZCkge1xuICAgIHZh
ciBpdGVtID0gZ2V0SXRlbShpZCk7XG4gICAgcmV0dXJuIGl0ZW0gPyBpdGVtLmlzTW91bnRlZCA6
IGZhbHNlO1xuICB9LFxuICBnZXRDdXJyZW50U3RhY2tBZGRlbmR1bTogZnVuY3Rpb24gKHRvcEVs
ZW1lbnQpIHtcbiAgICB2YXIgaW5mbyA9ICcnO1xuICAgIGlmICh0b3BFbGVtZW50KSB7XG4gICAg
ICB2YXIgbmFtZSA9IGdldERpc3BsYXlOYW1lKHRvcEVsZW1lbnQpO1xuICAgICAgdmFyIG93bmVy
ID0gdG9wRWxlbWVudC5fb3duZXI7XG4gICAgICBpbmZvICs9IGRlc2NyaWJlQ29tcG9uZW50RnJh
bWUobmFtZSwgdG9wRWxlbWVudC5fc291cmNlLCBvd25lciAmJiBvd25lci5nZXROYW1lKCkpO1xu
ICAgIH1cblxuICAgIHZhciBjdXJyZW50T3duZXIgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50
O1xuICAgIHZhciBpZCA9IGN1cnJlbnRPd25lciAmJiBjdXJyZW50T3duZXIuX2RlYnVnSUQ7XG5c
biAgICBpbmZvICs9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0U3RhY2tBZGRlbmR1bUJ5SUQo
aWQpO1xuICAgIHJldHVybiBpbmZvO1xuICB9LFxuICBnZXRTdGFja0FkZGVuZHVtQnlJRDogZnVu
Y3Rpb24gKGlkKSB7XG4gICAgdmFyIGluZm8gPSAnJztcbiAgICB3aGlsZSAoaWQpIHtcbiAgICAg
IGluZm8gKz0gZGVzY3JpYmVJRChpZCk7XG4gICAgICBpZCA9IFJlYWN0Q29tcG9uZW50VHJlZUhv
b2suZ2V0UGFyZW50SUQoaWQpO1xuICAgIH1cbiAgICByZXR1cm4gaW5mbztcbiAgfSxcbiAgZ2V0
Q2hpbGRJRHM6IGZ1bmN0aW9uIChpZCkge1xuICAgIHZhciBpdGVtID0gZ2V0SXRlbShpZCk7XG4g
ICAgcmV0dXJuIGl0ZW0gPyBpdGVtLmNoaWxkSURzIDogW107XG4gIH0sXG4gIGdldERpc3BsYXlO
YW1lOiBmdW5jdGlvbiAoaWQpIHtcbiAgICB2YXIgZWxlbWVudCA9IFJlYWN0Q29tcG9uZW50VHJl
ZUhvb2suZ2V0RWxlbWVudChpZCk7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm4g
bnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGdldERpc3BsYXlOYW1lKGVsZW1lbnQpO1xuICB9LFxu
ICBnZXRFbGVtZW50OiBmdW5jdGlvbiAoaWQpIHtcbiAgICB2YXIgaXRlbSA9IGdldEl0ZW0oaWQp
O1xuICAgIHJldHVybiBpdGVtID8gaXRlbS5lbGVtZW50IDogbnVsbDtcbiAgfSxcbiAgZ2V0T3du
ZXJJRDogZnVuY3Rpb24gKGlkKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBSZWFjdENvbXBvbmVudFRy
ZWVIb29rLmdldEVsZW1lbnQoaWQpO1xuICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC5fb3du
ZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZWxlbWVudC5fb3du
ZXIuX2RlYnVnSUQ7XG4gIH0sXG4gIGdldFBhcmVudElEOiBmdW5jdGlvbiAoaWQpIHtcbiAgICB2
YXIgaXRlbSA9IGdldEl0ZW0oaWQpO1xuICAgIHJldHVybiBpdGVtID8gaXRlbS5wYXJlbnRJRCA6
IG51bGw7XG4gIH0sXG4gIGdldFNvdXJjZTogZnVuY3Rpb24gKGlkKSB7XG4gICAgdmFyIGl0ZW0g
PSBnZXRJdGVtKGlkKTtcbiAgICB2YXIgZWxlbWVudCA9IGl0ZW0gPyBpdGVtLmVsZW1lbnQgOiBu
dWxsO1xuICAgIHZhciBzb3VyY2UgPSBlbGVtZW50ICE9IG51bGwgPyBlbGVtZW50Ll9zb3VyY2Ug
OiBudWxsO1xuICAgIHJldHVybiBzb3VyY2U7XG4gIH0sXG4gIGdldFRleHQ6IGZ1bmN0aW9uIChp
ZCkge1xuICAgIHZhciBlbGVtZW50ID0gUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXRFbGVtZW50
KGlkKTtcbiAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1
cm4gZWxlbWVudDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnbnVtYmVyJykg
e1xuICAgICAgcmV0dXJuICcnICsgZWxlbWVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJu
IG51bGw7XG4gICAgfVxuICB9LFxuICBnZXRVcGRhdGVDb3VudDogZnVuY3Rpb24gKGlkKSB7XG4g
ICAgdmFyIGl0ZW0gPSBnZXRJdGVtKGlkKTtcbiAgICByZXR1cm4gaXRlbSA/IGl0ZW0udXBkYXRl
Q291bnQgOiAwO1xuICB9LFxuXG5cbiAgZ2V0Um9vdElEczogZ2V0Um9vdElEcyxcbiAgZ2V0UmVn
aXN0ZXJlZElEczogZ2V0SXRlbUlEcyxcblxuICBwdXNoTm9uU3RhbmRhcmRXYXJuaW5nU3RhY2s6
IGZ1bmN0aW9uIChpc0NyZWF0aW5nRWxlbWVudCwgY3VycmVudFNvdXJjZSkge1xuICAgIGlmICh0
eXBlb2YgY29uc29sZS5yZWFjdFN0YWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm47
XG4gICAgfVxuXG4gICAgdmFyIHN0YWNrID0gW107XG4gICAgdmFyIGN1cnJlbnRPd25lciA9IFJl
YWN0Q3VycmVudE93bmVyLmN1cnJlbnQ7XG4gICAgdmFyIGlkID0gY3VycmVudE93bmVyICYmIGN1
cnJlbnRPd25lci5fZGVidWdJRDtcblxuICAgIHRyeSB7XG4gICAgICBpZiAoaXNDcmVhdGluZ0Vs
ZW1lbnQpIHtcbiAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgbmFtZTogaWQgPyBSZWFj
dENvbXBvbmVudFRyZWVIb29rLmdldERpc3BsYXlOYW1lKGlkKSA6IG51bGwsXG4gICAgICAgICAg
ZmlsZU5hbWU6IGN1cnJlbnRTb3VyY2UgPyBjdXJyZW50U291cmNlLmZpbGVOYW1lIDogbnVsbCxc
biAgICAgICAgICBsaW5lTnVtYmVyOiBjdXJyZW50U291cmNlID8gY3VycmVudFNvdXJjZS5saW5l
TnVtYmVyIDogbnVsbFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKGlkKSB7
XG4gICAgICAgIHZhciBlbGVtZW50ID0gUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXRFbGVtZW50
KGlkKTtcbiAgICAgICAgdmFyIHBhcmVudElEID0gUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXRQ
YXJlbnRJRChpZCk7XG4gICAgICAgIHZhciBvd25lcklEID0gUmVhY3RDb21wb25lbnRUcmVlSG9v
ay5nZXRPd25lcklEKGlkKTtcbiAgICAgICAgdmFyIG93bmVyTmFtZSA9IG93bmVySUQgPyBSZWFj
dENvbXBvbmVudFRyZWVIb29rLmdldERpc3BsYXlOYW1lKG93bmVySUQpIDogbnVsbDtcbiAgICAg
ICAgdmFyIHNvdXJjZSA9IGVsZW1lbnQgJiYgZWxlbWVudC5fc291cmNlO1xuICAgICAgICBzdGFj
ay5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBvd25lck5hbWUsXG4gICAgICAgICAgZmlsZU5hbWU6
IHNvdXJjZSA/IHNvdXJjZS5maWxlTmFtZSA6IG51bGwsXG4gICAgICAgICAgbGluZU51bWJlcjog
c291cmNlID8gc291cmNlLmxpbmVOdW1iZXIgOiBudWxsXG4gICAgICAgIH0pO1xuICAgICAgICBp
ZCA9IHBhcmVudElEO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gSW50
ZXJuYWwgc3RhdGUgaXMgbWVzc2VkIHVwLlxuICAgICAgLy8gU3RvcCBidWlsZGluZyB0aGUgc3Rh
Y2sgKGl0J3MganVzdCBhIG5pY2UgdG8gaGF2ZSkuXG4gICAgfVxuXG4gICAgY29uc29sZS5yZWFj
dFN0YWNrKHN0YWNrKTtcbiAgfSxcbiAgcG9wTm9uU3RhbmRhcmRXYXJuaW5nU3RhY2s6IGZ1bmN0
aW9uICgpIHtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUucmVhY3RTdGFja0VuZCAhPT0gJ2Z1bmN0
aW9uJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zb2xlLnJlYWN0U3RhY2tFbmQo
KTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdENvbXBvbmVudFRyZWVIb29rO1xu
XG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1
bGVzL3JlYWN0L2xpYi9SZWFjdENvbXBvbmVudFRyZWVIb29rLmpzXG4vLyBtb2R1bGUgaWQgPSA3
OFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ29weXJp
Z2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1z
dHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRp
cmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBw
YXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1l
IGRpcmVjdG9yeS5cbiAqXG4gKiBAdHlwZWNoZWNrc1xuICovXG5cbnZhciBlbXB0eUZ1bmN0aW9u
ID0gcmVxdWlyZSgnLi9lbXB0eUZ1bmN0aW9uJyk7XG5cbi8qKlxuICogVXBzdHJlYW0gdmVyc2lv
biBvZiBldmVudCBsaXN0ZW5lci4gRG9lcyBub3QgdGFrZSBpbnRvIGFjY291bnQgc3BlY2lmaWNc
biAqIG5hdHVyZSBvZiBwbGF0Zm9ybS5cbiAqL1xudmFyIEV2ZW50TGlzdGVuZXIgPSB7XG4gIC8q
KlxuICAgKiBMaXN0ZW4gdG8gRE9NIGV2ZW50cyBkdXJpbmcgdGhlIGJ1YmJsZSBwaGFzZS5cbiAg
ICpcbiAgICogQHBhcmFtIHtET01FdmVudFRhcmdldH0gdGFyZ2V0IERPTSBlbGVtZW50IHRvIHJl
Z2lzdGVyIGxpc3RlbmVyIG9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRUeXBlIEV2ZW50
IHR5cGUsIGUuZy4gJ2NsaWNrJyBvciAnbW91c2VvdmVyJy5cbiAgICogQHBhcmFtIHtmdW5jdGlv
bn0gY2FsbGJhY2sgQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqIEByZXR1cm4ge29iamVjdH0gT2Jq
ZWN0IHdpdGggYSBgcmVtb3ZlYCBtZXRob2QuXG4gICAqL1xuICBsaXN0ZW46IGZ1bmN0aW9uIGxp
c3Rlbih0YXJnZXQsIGV2ZW50VHlwZSwgY2FsbGJhY2spIHtcbiAgICBpZiAodGFyZ2V0LmFkZEV2
ZW50TGlzdGVuZXIpIHtcbiAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwg
Y2FsbGJhY2ssIGZhbHNlKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlbW92ZTogZnVuY3Rp
b24gcmVtb3ZlKCkge1xuICAgICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50
VHlwZSwgY2FsbGJhY2ssIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9IGVsc2Ug
aWYgKHRhcmdldC5hdHRhY2hFdmVudCkge1xuICAgICAgdGFyZ2V0LmF0dGFjaEV2ZW50KCdvbicg
KyBldmVudFR5cGUsIGNhbGxiYWNrKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlbW92ZTog
ZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgICAgICAgIHRhcmdldC5kZXRhY2hFdmVudCgnb24nICsg
ZXZlbnRUeXBlLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9LFxu
XG4gIC8qKlxuICAgKiBMaXN0ZW4gdG8gRE9NIGV2ZW50cyBkdXJpbmcgdGhlIGNhcHR1cmUgcGhh
c2UuXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRXZlbnRUYXJnZXR9IHRhcmdldCBET00gZWxlbWVu
dCB0byByZWdpc3RlciBsaXN0ZW5lciBvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50VHlw
ZSBFdmVudCB0eXBlLCBlLmcuICdjbGljaycgb3IgJ21vdXNlb3ZlcicuXG4gICAqIEBwYXJhbSB7
ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKiBAcmV0dXJuIHtvYmpl
Y3R9IE9iamVjdCB3aXRoIGEgYHJlbW92ZWAgbWV0aG9kLlxuICAgKi9cbiAgY2FwdHVyZTogZnVu
Y3Rpb24gY2FwdHVyZSh0YXJnZXQsIGV2ZW50VHlwZSwgY2FsbGJhY2spIHtcbiAgICBpZiAodGFy
Z2V0LmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2
ZW50VHlwZSwgY2FsbGJhY2ssIHRydWUpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVtb3Zl
OiBmdW5jdGlvbiByZW1vdmUoKSB7XG4gICAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVu
ZXIoZXZlbnRUeXBlLCBjYWxsYmFjaywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAg
fSBlbHNlIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24n
KSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0F0dGVtcHRlZCB0byBsaXN0ZW4gdG8gZXZlbnRz
IGR1cmluZyB0aGUgY2FwdHVyZSBwaGFzZSBvbiBhICcgKyAnYnJvd3NlciB0aGF0IGRvZXMgbm90
IHN1cHBvcnQgdGhlIGNhcHR1cmUgcGhhc2UuIFlvdXIgYXBwbGljYXRpb24gJyArICd3aWxsIG5v
dCByZWNlaXZlIHNvbWUgZXZlbnRzLicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAg
ICAgcmVtb3ZlOiBlbXB0eUZ1bmN0aW9uXG4gICAgICB9O1xuICAgIH1cbiAgfSxcblxuICByZWdp
c3RlckRlZmF1bHQ6IGZ1bmN0aW9uIHJlZ2lzdGVyRGVmYXVsdCgpIHt9XG59O1xuXG5tb2R1bGUu
ZXhwb3J0cyA9IEV2ZW50TGlzdGVuZXI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQ
QUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvZmJqcy9saWIvRXZlbnRMaXN0ZW5lci5qc1xu
Ly8gbW9kdWxlIGlkID0gNzlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyoqXG4gKiBDb3B5cmln
aHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5c
biAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUg
bGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rv
cnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50
IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJl
Y3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0RE9NU2VsZWN0aW9u
ID0gcmVxdWlyZSgnLi9SZWFjdERPTVNlbGVjdGlvbicpO1xuXG52YXIgY29udGFpbnNOb2RlID0g
cmVxdWlyZSgnZmJqcy9saWIvY29udGFpbnNOb2RlJyk7XG52YXIgZm9jdXNOb2RlID0gcmVxdWly
ZSgnZmJqcy9saWIvZm9jdXNOb2RlJyk7XG52YXIgZ2V0QWN0aXZlRWxlbWVudCA9IHJlcXVpcmUo
J2ZianMvbGliL2dldEFjdGl2ZUVsZW1lbnQnKTtcblxuZnVuY3Rpb24gaXNJbkRvY3VtZW50KG5v
ZGUpIHtcbiAgcmV0dXJuIGNvbnRhaW5zTm9kZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIG5v
ZGUpO1xufVxuXG4vKipcbiAqIEBSZWFjdElucHV0U2VsZWN0aW9uOiBSZWFjdCBpbnB1dCBzZWxl
Y3Rpb24gbW9kdWxlLiBCYXNlZCBvbiBTZWxlY3Rpb24uanMsXG4gKiBidXQgbW9kaWZpZWQgdG8g
YmUgc3VpdGFibGUgZm9yIHJlYWN0IGFuZCBoYXMgYSBjb3VwbGUgb2YgYnVnIGZpeGVzIChkb2Vz
bid0XG4gKiBhc3N1bWUgYnV0dG9ucyBoYXZlIHJhbmdlIHNlbGVjdGlvbnMgYWxsb3dlZCkuXG4g
KiBJbnB1dCBzZWxlY3Rpb24gbW9kdWxlIGZvciBSZWFjdC5cbiAqL1xudmFyIFJlYWN0SW5wdXRT
ZWxlY3Rpb24gPSB7XG4gIGhhc1NlbGVjdGlvbkNhcGFiaWxpdGllczogZnVuY3Rpb24gKGVsZW0p
IHtcbiAgICB2YXIgbm9kZU5hbWUgPSBlbGVtICYmIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2Rl
TmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiBub2RlTmFtZSAmJiAobm9kZU5hbWUgPT09
ICdpbnB1dCcgJiYgZWxlbS50eXBlID09PSAndGV4dCcgfHwgbm9kZU5hbWUgPT09ICd0ZXh0YXJl
YScgfHwgZWxlbS5jb250ZW50RWRpdGFibGUgPT09ICd0cnVlJyk7XG4gIH0sXG5cbiAgZ2V0U2Vs
ZWN0aW9uSW5mb3JtYXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZm9jdXNlZEVsZW0gPSBn
ZXRBY3RpdmVFbGVtZW50KCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZvY3VzZWRFbGVtOiBmb2N1
c2VkRWxlbSxcbiAgICAgIHNlbGVjdGlvblJhbmdlOiBSZWFjdElucHV0U2VsZWN0aW9uLmhhc1Nl
bGVjdGlvbkNhcGFiaWxpdGllcyhmb2N1c2VkRWxlbSkgPyBSZWFjdElucHV0U2VsZWN0aW9uLmdl
dFNlbGVjdGlvbihmb2N1c2VkRWxlbSkgOiBudWxsXG4gICAgfTtcbiAgfSxcblxuICAvKipcbiAg
ICogQHJlc3RvcmVTZWxlY3Rpb246IElmIGFueSBzZWxlY3Rpb24gaW5mb3JtYXRpb24gd2FzIHBv
dGVudGlhbGx5IGxvc3QsXG4gICAqIHJlc3RvcmUgaXQuIFRoaXMgaXMgdXNlZnVsIHdoZW4gcGVy
Zm9ybWluZyBvcGVyYXRpb25zIHRoYXQgY291bGQgcmVtb3ZlIGRvbVxuICAgKiBub2RlcyBhbmQg
cGxhY2UgdGhlbSBiYWNrIGluLCByZXN1bHRpbmcgaW4gZm9jdXMgYmVpbmcgbG9zdC5cbiAgICov
XG4gIHJlc3RvcmVTZWxlY3Rpb246IGZ1bmN0aW9uIChwcmlvclNlbGVjdGlvbkluZm9ybWF0aW9u
KSB7XG4gICAgdmFyIGN1ckZvY3VzZWRFbGVtID0gZ2V0QWN0aXZlRWxlbWVudCgpO1xuICAgIHZh
ciBwcmlvckZvY3VzZWRFbGVtID0gcHJpb3JTZWxlY3Rpb25JbmZvcm1hdGlvbi5mb2N1c2VkRWxl
bTtcbiAgICB2YXIgcHJpb3JTZWxlY3Rpb25SYW5nZSA9IHByaW9yU2VsZWN0aW9uSW5mb3JtYXRp
b24uc2VsZWN0aW9uUmFuZ2U7XG4gICAgaWYgKGN1ckZvY3VzZWRFbGVtICE9PSBwcmlvckZvY3Vz
ZWRFbGVtICYmIGlzSW5Eb2N1bWVudChwcmlvckZvY3VzZWRFbGVtKSkge1xuICAgICAgaWYgKFJl
YWN0SW5wdXRTZWxlY3Rpb24uaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKHByaW9yRm9jdXNlZEVs
ZW0pKSB7XG4gICAgICAgIFJlYWN0SW5wdXRTZWxlY3Rpb24uc2V0U2VsZWN0aW9uKHByaW9yRm9j
dXNlZEVsZW0sIHByaW9yU2VsZWN0aW9uUmFuZ2UpO1xuICAgICAgfVxuICAgICAgZm9jdXNOb2Rl
KHByaW9yRm9jdXNlZEVsZW0pO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogQGdldFNlbGVj
dGlvbjogR2V0cyB0aGUgc2VsZWN0aW9uIGJvdW5kcyBvZiBhIGZvY3VzZWQgdGV4dGFyZWEsIGlu
cHV0IG9yXG4gICAqIGNvbnRlbnRFZGl0YWJsZSBub2RlLlxuICAgKiAtQGlucHV0OiBMb29rIHVw
IHNlbGVjdGlvbiBib3VuZHMgb2YgdGhpcyBpbnB1dFxuICAgKiAtQHJldHVybiB7c3RhcnQ6IHNl
bGVjdGlvblN0YXJ0LCBlbmQ6IHNlbGVjdGlvbkVuZH1cbiAgICovXG4gIGdldFNlbGVjdGlvbjog
ZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgdmFyIHNlbGVjdGlvbjtcblxuICAgIGlmICgnc2VsZWN0
aW9uU3RhcnQnIGluIGlucHV0KSB7XG4gICAgICAvLyBNb2Rlcm4gYnJvd3NlciB3aXRoIGlucHV0
IG9yIHRleHRhcmVhLlxuICAgICAgc2VsZWN0aW9uID0ge1xuICAgICAgICBzdGFydDogaW5wdXQu
c2VsZWN0aW9uU3RhcnQsXG4gICAgICAgIGVuZDogaW5wdXQuc2VsZWN0aW9uRW5kXG4gICAgICB9
O1xuICAgIH0gZWxzZSBpZiAoZG9jdW1lbnQuc2VsZWN0aW9uICYmIGlucHV0Lm5vZGVOYW1lICYm
IGlucHV0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpbnB1dCcpIHtcbiAgICAgIC8vIElF
OCBpbnB1dC5cbiAgICAgIHZhciByYW5nZSA9IGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5n
ZSgpO1xuICAgICAgLy8gVGhlcmUgY2FuIG9ubHkgYmUgb25lIHNlbGVjdGlvbiBwZXIgZG9jdW1l
bnQgaW4gSUUsIHNvIGl0IG11c3RcbiAgICAgIC8vIGJlIGluIG91ciBlbGVtZW50LlxuICAgICAg
aWYgKHJhbmdlLnBhcmVudEVsZW1lbnQoKSA9PT0gaW5wdXQpIHtcbiAgICAgICAgc2VsZWN0aW9u
ID0ge1xuICAgICAgICAgIHN0YXJ0OiAtcmFuZ2UubW92ZVN0YXJ0KCdjaGFyYWN0ZXInLCAtaW5w
dXQudmFsdWUubGVuZ3RoKSxcbiAgICAgICAgICBlbmQ6IC1yYW5nZS5tb3ZlRW5kKCdjaGFyYWN0
ZXInLCAtaW5wdXQudmFsdWUubGVuZ3RoKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gZWxz
ZSB7XG4gICAgICAvLyBDb250ZW50IGVkaXRhYmxlIG9yIG9sZCBJRSB0ZXh0YXJlYS5cbiAgICAg
IHNlbGVjdGlvbiA9IFJlYWN0RE9NU2VsZWN0aW9uLmdldE9mZnNldHMoaW5wdXQpO1xuICAgIH1c
blxuICAgIHJldHVybiBzZWxlY3Rpb24gfHwgeyBzdGFydDogMCwgZW5kOiAwIH07XG4gIH0sXG5c
biAgLyoqXG4gICAqIEBzZXRTZWxlY3Rpb246IFNldHMgdGhlIHNlbGVjdGlvbiBib3VuZHMgb2Yg
YSB0ZXh0YXJlYSBvciBpbnB1dCBhbmQgZm9jdXNlc1xuICAgKiB0aGUgaW5wdXQuXG4gICAqIC1A
aW5wdXQgICAgIFNldCBzZWxlY3Rpb24gYm91bmRzIG9mIHRoaXMgaW5wdXQgb3IgdGV4dGFyZWFc
biAgICogLUBvZmZzZXRzICAgT2JqZWN0IG9mIHNhbWUgZm9ybSB0aGF0IGlzIHJldHVybmVkIGZy
b20gZ2V0KlxuICAgKi9cbiAgc2V0U2VsZWN0aW9uOiBmdW5jdGlvbiAoaW5wdXQsIG9mZnNldHMp
IHtcbiAgICB2YXIgc3RhcnQgPSBvZmZzZXRzLnN0YXJ0O1xuICAgIHZhciBlbmQgPSBvZmZzZXRz
LmVuZDtcbiAgICBpZiAoZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGVuZCA9IHN0YXJ0O1xu
ICAgIH1cblxuICAgIGlmICgnc2VsZWN0aW9uU3RhcnQnIGluIGlucHV0KSB7XG4gICAgICBpbnB1
dC5zZWxlY3Rpb25TdGFydCA9IHN0YXJ0O1xuICAgICAgaW5wdXQuc2VsZWN0aW9uRW5kID0gTWF0
aC5taW4oZW5kLCBpbnB1dC52YWx1ZS5sZW5ndGgpO1xuICAgIH0gZWxzZSBpZiAoZG9jdW1lbnQu
c2VsZWN0aW9uICYmIGlucHV0Lm5vZGVOYW1lICYmIGlucHV0Lm5vZGVOYW1lLnRvTG93ZXJDYXNl
KCkgPT09ICdpbnB1dCcpIHtcbiAgICAgIHZhciByYW5nZSA9IGlucHV0LmNyZWF0ZVRleHRSYW5n
ZSgpO1xuICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSk7XG4gICAgICByYW5nZS5tb3ZlU3RhcnQo
J2NoYXJhY3RlcicsIHN0YXJ0KTtcbiAgICAgIHJhbmdlLm1vdmVFbmQoJ2NoYXJhY3RlcicsIGVu
ZCAtIHN0YXJ0KTtcbiAgICAgIHJhbmdlLnNlbGVjdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBS
ZWFjdERPTVNlbGVjdGlvbi5zZXRPZmZzZXRzKGlucHV0LCBvZmZzZXRzKTtcbiAgICB9XG4gIH1c
bn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RJbnB1dFNlbGVjdGlvbjtcblxuXG4vLy8vLy8v
Ly8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9yZWFjdC1k
b20vbGliL1JlYWN0SW5wdXRTZWxlY3Rpb24uanNcbi8vIG1vZHVsZSBpZCA9IDgwXG4vLyBtb2R1
bGUgY2h1bmtzID0gMCIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIw
MTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxu
ICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vu
c2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9m
IHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdo
dHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5
LlxuICpcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxuLyogZXNsaW50LWRpc2FibGUgZmItd3d3L3R5
cGVvZi11bmRlZmluZWQgKi9cblxuLyoqXG4gKiBTYW1lIGFzIGRvY3VtZW50LmFjdGl2ZUVsZW1l
bnQgYnV0IHdyYXBzIGluIGEgdHJ5LWNhdGNoIGJsb2NrLiBJbiBJRSBpdCBpc1xuICogbm90IHNh
ZmUgdG8gY2FsbCBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGlmIHRoZXJlIGlzIG5vdGhpbmcgZm9j
dXNlZC5cbiAqXG4gKiBUaGUgYWN0aXZlRWxlbWVudCB3aWxsIGJlIG51bGwgb25seSBpZiB0aGUg
ZG9jdW1lbnQgb3IgZG9jdW1lbnQgYm9keSBpcyBub3RcbiAqIHlldCBkZWZpbmVkLlxuICpcbiAq
IEBwYXJhbSB7P0RPTURvY3VtZW50fSBkb2MgRGVmYXVsdHMgdG8gY3VycmVudCBkb2N1bWVudC5c
biAqIEByZXR1cm4gez9ET01FbGVtZW50fVxuICovXG5mdW5jdGlvbiBnZXRBY3RpdmVFbGVtZW50
KGRvYykgLyo/RE9NRWxlbWVudCove1xuICBkb2MgPSBkb2MgfHwgKHR5cGVvZiBkb2N1bWVudCAh
PT0gJ3VuZGVmaW5lZCcgPyBkb2N1bWVudCA6IHVuZGVmaW5lZCk7XG4gIGlmICh0eXBlb2YgZG9j
ID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHRyeSB7XG4gICAg
cmV0dXJuIGRvYy5hY3RpdmVFbGVtZW50IHx8IGRvYy5ib2R5O1xuICB9IGNhdGNoIChlKSB7XG4g
ICAgcmV0dXJuIGRvYy5ib2R5O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QWN0aXZl
RWxlbWVudDtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAu
L25vZGVfbW9kdWxlcy9mYmpzL2xpYi9nZXRBY3RpdmVFbGVtZW50LmpzXG4vLyBtb2R1bGUgaWQg
PSA4MVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNl
bnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMg
c291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5k
IGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNv
dXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBi
ZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4g
Ki9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3Byb2RJbnZhcmlhbnQgPSByZXF1aXJlKCcuL3Jl
YWN0UHJvZEludmFyaWFudCcpO1xuXG52YXIgRE9NTGF6eVRyZWUgPSByZXF1aXJlKCcuL0RPTUxh
enlUcmVlJyk7XG52YXIgRE9NUHJvcGVydHkgPSByZXF1aXJlKCcuL0RPTVByb3BlcnR5Jyk7XG52
YXIgUmVhY3QgPSByZXF1aXJlKCdyZWFjdC9saWIvUmVhY3QnKTtcbnZhciBSZWFjdEJyb3dzZXJF
dmVudEVtaXR0ZXIgPSByZXF1aXJlKCcuL1JlYWN0QnJvd3NlckV2ZW50RW1pdHRlcicpO1xudmFy
IFJlYWN0Q3VycmVudE93bmVyID0gcmVxdWlyZSgncmVhY3QvbGliL1JlYWN0Q3VycmVudE93bmVy
Jyk7XG52YXIgUmVhY3RET01Db21wb25lbnRUcmVlID0gcmVxdWlyZSgnLi9SZWFjdERPTUNvbXBv
bmVudFRyZWUnKTtcbnZhciBSZWFjdERPTUNvbnRhaW5lckluZm8gPSByZXF1aXJlKCcuL1JlYWN0
RE9NQ29udGFpbmVySW5mbycpO1xudmFyIFJlYWN0RE9NRmVhdHVyZUZsYWdzID0gcmVxdWlyZSgn
Li9SZWFjdERPTUZlYXR1cmVGbGFncycpO1xudmFyIFJlYWN0RmVhdHVyZUZsYWdzID0gcmVxdWly
ZSgnLi9SZWFjdEZlYXR1cmVGbGFncycpO1xudmFyIFJlYWN0SW5zdGFuY2VNYXAgPSByZXF1aXJl
KCcuL1JlYWN0SW5zdGFuY2VNYXAnKTtcbnZhciBSZWFjdEluc3RydW1lbnRhdGlvbiA9IHJlcXVp
cmUoJy4vUmVhY3RJbnN0cnVtZW50YXRpb24nKTtcbnZhciBSZWFjdE1hcmt1cENoZWNrc3VtID0g
cmVxdWlyZSgnLi9SZWFjdE1hcmt1cENoZWNrc3VtJyk7XG52YXIgUmVhY3RSZWNvbmNpbGVyID0g
cmVxdWlyZSgnLi9SZWFjdFJlY29uY2lsZXInKTtcbnZhciBSZWFjdFVwZGF0ZVF1ZXVlID0gcmVx
dWlyZSgnLi9SZWFjdFVwZGF0ZVF1ZXVlJyk7XG52YXIgUmVhY3RVcGRhdGVzID0gcmVxdWlyZSgn
Li9SZWFjdFVwZGF0ZXMnKTtcblxudmFyIGVtcHR5T2JqZWN0ID0gcmVxdWlyZSgnZmJqcy9saWIv
ZW1wdHlPYmplY3QnKTtcbnZhciBpbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50ID0gcmVxdWlyZSgn
Li9pbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50Jyk7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgn
ZmJqcy9saWIvaW52YXJpYW50Jyk7XG52YXIgc2V0SW5uZXJIVE1MID0gcmVxdWlyZSgnLi9zZXRJ
bm5lckhUTUwnKTtcbnZhciBzaG91bGRVcGRhdGVSZWFjdENvbXBvbmVudCA9IHJlcXVpcmUoJy4v
c2hvdWxkVXBkYXRlUmVhY3RDb21wb25lbnQnKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJq
cy9saWIvd2FybmluZycpO1xuXG52YXIgQVRUUl9OQU1FID0gRE9NUHJvcGVydHkuSURfQVRUUklC
VVRFX05BTUU7XG52YXIgUk9PVF9BVFRSX05BTUUgPSBET01Qcm9wZXJ0eS5ST09UX0FUVFJJQlVU
RV9OQU1FO1xuXG52YXIgRUxFTUVOVF9OT0RFX1RZUEUgPSAxO1xudmFyIERPQ19OT0RFX1RZUEUg
PSA5O1xudmFyIERPQ1VNRU5UX0ZSQUdNRU5UX05PREVfVFlQRSA9IDExO1xuXG52YXIgaW5zdGFu
Y2VzQnlSZWFjdFJvb3RJRCA9IHt9O1xuXG4vKipcbiAqIEZpbmRzIHRoZSBpbmRleCBvZiB0aGUg
Zmlyc3QgY2hhcmFjdGVyXG4gKiB0aGF0J3Mgbm90IGNvbW1vbiBiZXR3ZWVuIHRoZSB0d28gZ2l2
ZW4gc3RyaW5ncy5cbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgY2hh
cmFjdGVyIHdoZXJlIHRoZSBzdHJpbmdzIGRpdmVyZ2VcbiAqL1xuZnVuY3Rpb24gZmlyc3REaWZm
ZXJlbmNlSW5kZXgoc3RyaW5nMSwgc3RyaW5nMikge1xuICB2YXIgbWluTGVuID0gTWF0aC5taW4o
c3RyaW5nMS5sZW5ndGgsIHN0cmluZzIubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBt
aW5MZW47IGkrKykge1xuICAgIGlmIChzdHJpbmcxLmNoYXJBdChpKSAhPT0gc3RyaW5nMi5jaGFy
QXQoaSkpIHtcbiAgICAgIHJldHVybiBpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3RyaW5nMS5s
ZW5ndGggPT09IHN0cmluZzIubGVuZ3RoID8gLTEgOiBtaW5MZW47XG59XG5cbi8qKlxuICogQHBh
cmFtIHtET01FbGVtZW50fERPTURvY3VtZW50fSBjb250YWluZXIgRE9NIGVsZW1lbnQgdGhhdCBt
YXkgY29udGFpblxuICogYSBSZWFjdCBjb21wb25lbnRcbiAqIEByZXR1cm4gez8qfSBET00gZWxl
bWVudCB0aGF0IG1heSBoYXZlIHRoZSByZWFjdFJvb3QgSUQsIG9yIG51bGwuXG4gKi9cbmZ1bmN0
aW9uIGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpIHtcbiAgaWYgKCFj
b250YWluZXIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChjb250YWluZXIubm9k
ZVR5cGUgPT09IERPQ19OT0RFX1RZUEUpIHtcbiAgICByZXR1cm4gY29udGFpbmVyLmRvY3VtZW50
RWxlbWVudDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4g
IH1cbn1cblxuZnVuY3Rpb24gaW50ZXJuYWxHZXRJRChub2RlKSB7XG4gIC8vIElmIG5vZGUgaXMg
c29tZXRoaW5nIGxpa2UgYSB3aW5kb3csIGRvY3VtZW50LCBvciB0ZXh0IG5vZGUsIG5vbmUgb2Zc
biAgLy8gd2hpY2ggc3VwcG9ydCBhdHRyaWJ1dGVzIG9yIGEgLmdldEF0dHJpYnV0ZSBtZXRob2Qs
IGdyYWNlZnVsbHkgcmV0dXJuXG4gIC8vIHRoZSBlbXB0eSBzdHJpbmcsIGFzIGlmIHRoZSBhdHRy
aWJ1dGUgd2VyZSBtaXNzaW5nLlxuICByZXR1cm4gbm9kZS5nZXRBdHRyaWJ1dGUgJiYgbm9kZS5n
ZXRBdHRyaWJ1dGUoQVRUUl9OQU1FKSB8fCAnJztcbn1cblxuLyoqXG4gKiBNb3VudHMgdGhpcyBj
b21wb25lbnQgYW5kIGluc2VydHMgaXQgaW50byB0aGUgRE9NLlxuICpcbiAqIEBwYXJhbSB7UmVh
Y3RDb21wb25lbnR9IGNvbXBvbmVudEluc3RhbmNlIFRoZSBpbnN0YW5jZSB0byBtb3VudC5cbiAq
IEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIERPTSBlbGVtZW50IHRvIG1vdW50IGludG8u
XG4gKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gKiBA
cGFyYW0ge2Jvb2xlYW59IHNob3VsZFJldXNlTWFya3VwIElmIHRydWUsIGRvIG5vdCBpbnNlcnQg
bWFya3VwXG4gKi9cbmZ1bmN0aW9uIG1vdW50Q29tcG9uZW50SW50b05vZGUod3JhcHBlckluc3Rh
bmNlLCBjb250YWluZXIsIHRyYW5zYWN0aW9uLCBzaG91bGRSZXVzZU1hcmt1cCwgY29udGV4dCkg
e1xuICB2YXIgbWFya2VyTmFtZTtcbiAgaWYgKFJlYWN0RmVhdHVyZUZsYWdzLmxvZ1RvcExldmVs
UmVuZGVycykge1xuICAgIHZhciB3cmFwcGVkRWxlbWVudCA9IHdyYXBwZXJJbnN0YW5jZS5fY3Vy
cmVudEVsZW1lbnQucHJvcHMuY2hpbGQ7XG4gICAgdmFyIHR5cGUgPSB3cmFwcGVkRWxlbWVudC50
eXBlO1xuICAgIG1hcmtlck5hbWUgPSAnUmVhY3QgbW91bnQ6ICcgKyAodHlwZW9mIHR5cGUgPT09
ICdzdHJpbmcnID8gdHlwZSA6IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lKTtcbiAgICBj
b25zb2xlLnRpbWUobWFya2VyTmFtZSk7XG4gIH1cblxuICB2YXIgbWFya3VwID0gUmVhY3RSZWNv
bmNpbGVyLm1vdW50Q29tcG9uZW50KHdyYXBwZXJJbnN0YW5jZSwgdHJhbnNhY3Rpb24sIG51bGws
IFJlYWN0RE9NQ29udGFpbmVySW5mbyh3cmFwcGVySW5zdGFuY2UsIGNvbnRhaW5lciksIGNvbnRl
eHQsIDAgLyogcGFyZW50RGVidWdJRCAqL1xuICApO1xuXG4gIGlmIChtYXJrZXJOYW1lKSB7XG4g
ICAgY29uc29sZS50aW1lRW5kKG1hcmtlck5hbWUpO1xuICB9XG5cbiAgd3JhcHBlckluc3RhbmNl
Ll9yZW5kZXJlZENvbXBvbmVudC5fdG9wTGV2ZWxXcmFwcGVyID0gd3JhcHBlckluc3RhbmNlO1xu
ICBSZWFjdE1vdW50Ll9tb3VudEltYWdlSW50b05vZGUobWFya3VwLCBjb250YWluZXIsIHdyYXBw
ZXJJbnN0YW5jZSwgc2hvdWxkUmV1c2VNYXJrdXAsIHRyYW5zYWN0aW9uKTtcbn1cblxuLyoqXG4g
KiBCYXRjaGVkIG1vdW50LlxuICpcbiAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGNvbXBvbmVu
dEluc3RhbmNlIFRoZSBpbnN0YW5jZSB0byBtb3VudC5cbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0g
Y29udGFpbmVyIERPTSBlbGVtZW50IHRvIG1vdW50IGludG8uXG4gKiBAcGFyYW0ge2Jvb2xlYW59
IHNob3VsZFJldXNlTWFya3VwIElmIHRydWUsIGRvIG5vdCBpbnNlcnQgbWFya3VwXG4gKi9cbmZ1
bmN0aW9uIGJhdGNoZWRNb3VudENvbXBvbmVudEludG9Ob2RlKGNvbXBvbmVudEluc3RhbmNlLCBj
b250YWluZXIsIHNob3VsZFJldXNlTWFya3VwLCBjb250ZXh0KSB7XG4gIHZhciB0cmFuc2FjdGlv
biA9IFJlYWN0VXBkYXRlcy5SZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uLmdldFBvb2xlZChcbiAg
LyogdXNlQ3JlYXRlRWxlbWVudCAqL1xuICAhc2hvdWxkUmV1c2VNYXJrdXAgJiYgUmVhY3RET01G
ZWF0dXJlRmxhZ3MudXNlQ3JlYXRlRWxlbWVudCk7XG4gIHRyYW5zYWN0aW9uLnBlcmZvcm0obW91
bnRDb21wb25lbnRJbnRvTm9kZSwgbnVsbCwgY29tcG9uZW50SW5zdGFuY2UsIGNvbnRhaW5lciwg
dHJhbnNhY3Rpb24sIHNob3VsZFJldXNlTWFya3VwLCBjb250ZXh0KTtcbiAgUmVhY3RVcGRhdGVz
LlJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24ucmVsZWFzZSh0cmFuc2FjdGlvbik7XG59XG5cbi8q
KlxuICogVW5tb3VudHMgYSBjb21wb25lbnQgYW5kIHJlbW92ZXMgaXQgZnJvbSB0aGUgRE9NLlxu
ICpcbiAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGluc3RhbmNlIFJlYWN0IGNvbXBvbmVudCBp
bnN0YW5jZS5cbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIERPTSBlbGVtZW50IHRv
IHVubW91bnQgZnJvbS5cbiAqIEBmaW5hbFxuICogQGludGVybmFsXG4gKiBAc2VlIHtSZWFjdE1v
dW50LnVubW91bnRDb21wb25lbnRBdE5vZGV9XG4gKi9cbmZ1bmN0aW9uIHVubW91bnRDb21wb25l
bnRGcm9tTm9kZShpbnN0YW5jZSwgY29udGFpbmVyLCBzYWZlbHkpIHtcbiAgaWYgKHByb2Nlc3Mu
ZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBSZWFjdEluc3RydW1lbnRhdGlv
bi5kZWJ1Z1Rvb2wub25CZWdpbkZsdXNoKCk7XG4gIH1cbiAgUmVhY3RSZWNvbmNpbGVyLnVubW91
bnRDb21wb25lbnQoaW5zdGFuY2UsIHNhZmVseSk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VO
ViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29s
Lm9uRW5kRmx1c2goKTtcbiAgfVxuXG4gIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IERPQ19O
T0RFX1RZUEUpIHtcbiAgICBjb250YWluZXIgPSBjb250YWluZXIuZG9jdW1lbnRFbGVtZW50O1xu
ICB9XG5cbiAgLy8gaHR0cDovL2pzcGVyZi5jb20vZW1wdHlpbmctYS1ub2RlXG4gIHdoaWxlIChj
b250YWluZXIubGFzdENoaWxkKSB7XG4gICAgY29udGFpbmVyLnJlbW92ZUNoaWxkKGNvbnRhaW5l
ci5sYXN0Q2hpbGQpO1xuICB9XG59XG5cbi8qKlxuICogVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgRE9N
IG5vZGUgaGFzIGEgZGlyZWN0IFJlYWN0LXJlbmRlcmVkIGNoaWxkIHRoYXQgaXNcbiAqIG5vdCBh
IFJlYWN0IHJvb3QgZWxlbWVudC4gVXNlZnVsIGZvciB3YXJuaW5nIGluIGByZW5kZXJgLFxuICog
YHVubW91bnRDb21wb25lbnRBdE5vZGVgLCBldGMuXG4gKlxuICogQHBhcmFtIHs/RE9NRWxlbWVu
dH0gbm9kZSBUaGUgY2FuZGlkYXRlIERPTSBub2RlLlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1
ZSBpZiB0aGUgRE9NIGVsZW1lbnQgY29udGFpbnMgYSBkaXJlY3QgY2hpbGQgdGhhdCB3YXNcbiAq
IHJlbmRlcmVkIGJ5IFJlYWN0IGJ1dCBpcyBub3QgYSByb290IGVsZW1lbnQuXG4gKiBAaW50ZXJu
YWxcbiAqL1xuZnVuY3Rpb24gaGFzTm9uUm9vdFJlYWN0Q2hpbGQoY29udGFpbmVyKSB7XG4gIHZh
ciByb290RWwgPSBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTtcbiAg
aWYgKHJvb3RFbCkge1xuICAgIHZhciBpbnN0ID0gUmVhY3RET01Db21wb25lbnRUcmVlLmdldElu
c3RhbmNlRnJvbU5vZGUocm9vdEVsKTtcbiAgICByZXR1cm4gISEoaW5zdCAmJiBpbnN0Ll9ob3N0
UGFyZW50KTtcbiAgfVxufVxuXG4vKipcbiAqIFRydWUgaWYgdGhlIHN1cHBsaWVkIERPTSBub2Rl
IGlzIGEgUmVhY3QgRE9NIGVsZW1lbnQgYW5kXG4gKiBpdCBoYXMgYmVlbiByZW5kZXJlZCBieSBh
bm90aGVyIGNvcHkgb2YgUmVhY3QuXG4gKlxuICogQHBhcmFtIHs/RE9NRWxlbWVudH0gbm9kZSBU
aGUgY2FuZGlkYXRlIERPTSBub2RlLlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUg
RE9NIGhhcyBiZWVuIHJlbmRlcmVkIGJ5IGFub3RoZXIgY29weSBvZiBSZWFjdFxuICogQGludGVy
bmFsXG4gKi9cbmZ1bmN0aW9uIG5vZGVJc1JlbmRlcmVkQnlPdGhlckluc3RhbmNlKGNvbnRhaW5l
cikge1xuICB2YXIgcm9vdEVsID0gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRh
aW5lcik7XG4gIHJldHVybiAhIShyb290RWwgJiYgaXNSZWFjdE5vZGUocm9vdEVsKSAmJiAhUmVh
Y3RET01Db21wb25lbnRUcmVlLmdldEluc3RhbmNlRnJvbU5vZGUocm9vdEVsKSk7XG59XG5cbi8q
KlxuICogVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgRE9NIG5vZGUgaXMgYSB2YWxpZCBub2RlIGVsZW1l
bnQuXG4gKlxuICogQHBhcmFtIHs/RE9NRWxlbWVudH0gbm9kZSBUaGUgY2FuZGlkYXRlIERPTSBu
b2RlLlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgRE9NIGlzIGEgdmFsaWQgRE9N
IG5vZGUuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZENvbnRhaW5lcihub2Rl
KSB7XG4gIHJldHVybiAhIShub2RlICYmIChub2RlLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREVf
VFlQRSB8fCBub2RlLm5vZGVUeXBlID09PSBET0NfTk9ERV9UWVBFIHx8IG5vZGUubm9kZVR5cGUg
PT09IERPQ1VNRU5UX0ZSQUdNRU5UX05PREVfVFlQRSkpO1xufVxuXG4vKipcbiAqIFRydWUgaWYg
dGhlIHN1cHBsaWVkIERPTSBub2RlIGlzIGEgdmFsaWQgUmVhY3Qgbm9kZSBlbGVtZW50LlxuICpc
biAqIEBwYXJhbSB7P0RPTUVsZW1lbnR9IG5vZGUgVGhlIGNhbmRpZGF0ZSBET00gbm9kZS5cbiAq
IEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIERPTSBpcyBhIHZhbGlkIFJlYWN0IERPTSBu
b2RlLlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGlzUmVhY3ROb2RlKG5vZGUpIHtcbiAg
cmV0dXJuIGlzVmFsaWRDb250YWluZXIobm9kZSkgJiYgKG5vZGUuaGFzQXR0cmlidXRlKFJPT1Rf
QVRUUl9OQU1FKSB8fCBub2RlLmhhc0F0dHJpYnV0ZShBVFRSX05BTUUpKTtcbn1cblxuZnVuY3Rp
b24gZ2V0SG9zdFJvb3RJbnN0YW5jZUluQ29udGFpbmVyKGNvbnRhaW5lcikge1xuICB2YXIgcm9v
dEVsID0gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gIHZhciBw
cmV2SG9zdEluc3RhbmNlID0gcm9vdEVsICYmIFJlYWN0RE9NQ29tcG9uZW50VHJlZS5nZXRJbnN0
YW5jZUZyb21Ob2RlKHJvb3RFbCk7XG4gIHJldHVybiBwcmV2SG9zdEluc3RhbmNlICYmICFwcmV2
SG9zdEluc3RhbmNlLl9ob3N0UGFyZW50ID8gcHJldkhvc3RJbnN0YW5jZSA6IG51bGw7XG59XG5c
bmZ1bmN0aW9uIGdldFRvcExldmVsV3JhcHBlckluQ29udGFpbmVyKGNvbnRhaW5lcikge1xuICB2
YXIgcm9vdCA9IGdldEhvc3RSb290SW5zdGFuY2VJbkNvbnRhaW5lcihjb250YWluZXIpO1xuICBy
ZXR1cm4gcm9vdCA/IHJvb3QuX2hvc3RDb250YWluZXJJbmZvLl90b3BMZXZlbFdyYXBwZXIgOiBu
dWxsO1xufVxuXG4vKipcbiAqIFRlbXBvcmFyeSAoPykgaGFjayBzbyB0aGF0IHdlIGNhbiBzdG9y
ZSBhbGwgdG9wLWxldmVsIHBlbmRpbmcgdXBkYXRlcyBvblxuICogY29tcG9zaXRlcyBpbnN0ZWFk
IG9mIGhhdmluZyB0byB3b3JyeSBhYm91dCBkaWZmZXJlbnQgdHlwZXMgb2YgY29tcG9uZW50c1xu
ICogaGVyZS5cbiAqL1xudmFyIHRvcExldmVsUm9vdENvdW50ZXIgPSAxO1xudmFyIFRvcExldmVs
V3JhcHBlciA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5yb290SUQgPSB0b3BMZXZlbFJvb3RDb3Vu
dGVyKys7XG59O1xuVG9wTGV2ZWxXcmFwcGVyLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50ID0g
e307XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBUb3BM
ZXZlbFdyYXBwZXIuZGlzcGxheU5hbWUgPSAnVG9wTGV2ZWxXcmFwcGVyJztcbn1cblRvcExldmVs
V3JhcHBlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5w
cm9wcy5jaGlsZDtcbn07XG5Ub3BMZXZlbFdyYXBwZXIuaXNSZWFjdFRvcExldmVsV3JhcHBlciA9
IHRydWU7XG5cbi8qKlxuICogTW91bnRpbmcgaXMgdGhlIHByb2Nlc3Mgb2YgaW5pdGlhbGl6aW5n
IGEgUmVhY3QgY29tcG9uZW50IGJ5IGNyZWF0aW5nIGl0c1xuICogcmVwcmVzZW50YXRpdmUgRE9N
IGVsZW1lbnRzIGFuZCBpbnNlcnRpbmcgdGhlbSBpbnRvIGEgc3VwcGxpZWQgYGNvbnRhaW5lcmAu
XG4gKiBBbnkgcHJpb3IgY29udGVudCBpbnNpZGUgYGNvbnRhaW5lcmAgaXMgZGVzdHJveWVkIGlu
IHRoZSBwcm9jZXNzLlxuICpcbiAqICAgUmVhY3RNb3VudC5yZW5kZXIoXG4gKiAgICAgY29tcG9u
ZW50LFxuICogICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKVxuICogICAp
O1xuICpcbiAqICAgPGRpdiBpZD1cImNvbnRhaW5lclwiPiAgICAgICAgICAgICAgICAgICA8LS0g
U3VwcGxpZWQgYGNvbnRhaW5lcmAuXG4gKiAgICAgPGRpdiBkYXRhLXJlYWN0aWQ9XCIuM1wiPiAg
ICAgICAgICAgICAgPC0tIFJlbmRlcmVkIHJlYWN0Um9vdCBvZiBSZWFjdFxuICogICAgICAgLy8g
Li4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LlxuICogICAgIDwv
ZGl2PlxuICogICA8L2Rpdj5cbiAqXG4gKiBJbnNpZGUgb2YgYGNvbnRhaW5lcmAsIHRoZSBmaXJz
dCBlbGVtZW50IHJlbmRlcmVkIGlzIHRoZSBcInJlYWN0Um9vdFwiLlxuICovXG52YXIgUmVhY3RN
b3VudCA9IHtcbiAgVG9wTGV2ZWxXcmFwcGVyOiBUb3BMZXZlbFdyYXBwZXIsXG5cbiAgLyoqXG4g
ICAqIFVzZWQgYnkgZGV2dG9vbHMuIFRoZSBrZXlzIGFyZSBub3QgaW1wb3J0YW50LlxuICAgKi9c
biAgX2luc3RhbmNlc0J5UmVhY3RSb290SUQ6IGluc3RhbmNlc0J5UmVhY3RSb290SUQsXG5cbiAg
LyoqXG4gICAqIFRoaXMgaXMgYSBob29rIHByb3ZpZGVkIHRvIHN1cHBvcnQgcmVuZGVyaW5nIFJl
YWN0IGNvbXBvbmVudHMgd2hpbGVcbiAgICogZW5zdXJpbmcgdGhhdCB0aGUgYXBwYXJlbnQgc2Ny
b2xsIHBvc2l0aW9uIG9mIGl0cyBgY29udGFpbmVyYCBkb2VzIG5vdFxuICAgKiBjaGFuZ2UuXG4g
ICAqXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIFRoZSBgY29udGFpbmVyYCBi
ZWluZyByZW5kZXJlZCBpbnRvLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSByZW5kZXJDYWxsYmFj
ayBUaGlzIG11c3QgYmUgY2FsbGVkIG9uY2UgdG8gZG8gdGhlIHJlbmRlci5cbiAgICovXG4gIHNj
cm9sbE1vbml0b3I6IGZ1bmN0aW9uIChjb250YWluZXIsIHJlbmRlckNhbGxiYWNrKSB7XG4gICAg
cmVuZGVyQ2FsbGJhY2soKTtcbiAgfSxcblxuICAvKipcbiAgICogVGFrZSBhIGNvbXBvbmVudCB0
aGF0J3MgYWxyZWFkeSBtb3VudGVkIGludG8gdGhlIERPTSBhbmQgcmVwbGFjZSBpdHMgcHJvcHNc
biAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gcHJldkNvbXBvbmVudCBjb21wb25lbnQgaW5z
dGFuY2UgYWxyZWFkeSBpbiB0aGUgRE9NXG4gICAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBuZXh0
RWxlbWVudCBjb21wb25lbnQgaW5zdGFuY2UgdG8gcmVuZGVyXG4gICAqIEBwYXJhbSB7RE9NRWxl
bWVudH0gY29udGFpbmVyIGNvbnRhaW5lciB0byByZW5kZXIgaW50b1xuICAgKiBAcGFyYW0gez9m
dW5jdGlvbn0gY2FsbGJhY2sgZnVuY3Rpb24gdHJpZ2dlcmVkIG9uIGNvbXBsZXRpb25cbiAgICov
XG4gIF91cGRhdGVSb290Q29tcG9uZW50OiBmdW5jdGlvbiAocHJldkNvbXBvbmVudCwgbmV4dEVs
ZW1lbnQsIG5leHRDb250ZXh0LCBjb250YWluZXIsIGNhbGxiYWNrKSB7XG4gICAgUmVhY3RNb3Vu
dC5zY3JvbGxNb25pdG9yKGNvbnRhaW5lciwgZnVuY3Rpb24gKCkge1xuICAgICAgUmVhY3RVcGRh
dGVRdWV1ZS5lbnF1ZXVlRWxlbWVudEludGVybmFsKHByZXZDb21wb25lbnQsIG5leHRFbGVtZW50
LCBuZXh0Q29udGV4dCk7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgUmVhY3RVcGRh
dGVRdWV1ZS5lbnF1ZXVlQ2FsbGJhY2tJbnRlcm5hbChwcmV2Q29tcG9uZW50LCBjYWxsYmFjayk7
XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcHJldkNvbXBvbmVudDtcbiAgfSxcblxu
ICAvKipcbiAgICogUmVuZGVyIGEgbmV3IGNvbXBvbmVudCBpbnRvIHRoZSBET00uIEhvb2tlZCBi
eSBob29rcyFcbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IG5leHRFbGVtZW50IGVs
ZW1lbnQgdG8gcmVuZGVyXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIGNvbnRh
aW5lciB0byByZW5kZXIgaW50b1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNob3VsZFJldXNlTWFy
a3VwIGlmIHdlIHNob3VsZCBza2lwIHRoZSBtYXJrdXAgaW5zZXJ0aW9uXG4gICAqIEByZXR1cm4g
e1JlYWN0Q29tcG9uZW50fSBuZXh0Q29tcG9uZW50XG4gICAqL1xuICBfcmVuZGVyTmV3Um9vdENv
bXBvbmVudDogZnVuY3Rpb24gKG5leHRFbGVtZW50LCBjb250YWluZXIsIHNob3VsZFJldXNlTWFy
a3VwLCBjb250ZXh0KSB7XG4gICAgLy8gVmFyaW91cyBwYXJ0cyBvZiBvdXIgY29kZSAoc3VjaCBh
cyBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCdzXG4gICAgLy8gX3JlbmRlclZhbGlkYXRlZENvbXBv
bmVudCkgYXNzdW1lIHRoYXQgY2FsbHMgdG8gcmVuZGVyIGFyZW4ndCBuZXN0ZWQ7XG4gICAgLy8g
dmVyaWZ5IHRoYXQgdGhhdCdzIHRoZSBjYXNlLlxuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9
PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgPT0gbnVs
bCwgJ19yZW5kZXJOZXdSb290Q29tcG9uZW50KCk6IFJlbmRlciBtZXRob2RzIHNob3VsZCBiZSBh
IHB1cmUgZnVuY3Rpb24gJyArICdvZiBwcm9wcyBhbmQgc3RhdGU7IHRyaWdnZXJpbmcgbmVzdGVk
IGNvbXBvbmVudCB1cGRhdGVzIGZyb20gJyArICdyZW5kZXIgaXMgbm90IGFsbG93ZWQuIElmIG5l
Y2Vzc2FyeSwgdHJpZ2dlciBuZXN0ZWQgdXBkYXRlcyBpbiAnICsgJ2NvbXBvbmVudERpZFVwZGF0
ZS4gQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgJXMuJywgUmVhY3RDdXJyZW50T3duZXIuY3Vy
cmVudCAmJiBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LmdldE5hbWUoKSB8fCAnUmVhY3RDb21w
b3NpdGVDb21wb25lbnQnKSA6IHZvaWQgMDtcblxuICAgICFpc1ZhbGlkQ29udGFpbmVyKGNvbnRh
aW5lcikgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50
KGZhbHNlLCAnX3JlZ2lzdGVyQ29tcG9uZW50KC4uLik6IFRhcmdldCBjb250YWluZXIgaXMgbm90
IGEgRE9NIGVsZW1lbnQuJykgOiBfcHJvZEludmFyaWFudCgnMzcnKSA6IHZvaWQgMDtcblxuICAg
IFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5lbnN1cmVTY3JvbGxWYWx1ZU1vbml0b3JpbmcoKTtc
biAgICB2YXIgY29tcG9uZW50SW5zdGFuY2UgPSBpbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50KG5l
eHRFbGVtZW50LCBmYWxzZSk7XG5cbiAgICAvLyBUaGUgaW5pdGlhbCByZW5kZXIgaXMgc3luY2hy
b25vdXMgYnV0IGFueSB1cGRhdGVzIHRoYXQgaGFwcGVuIGR1cmluZ1xuICAgIC8vIHJlbmRlcmlu
ZywgaW4gY29tcG9uZW50V2lsbE1vdW50IG9yIGNvbXBvbmVudERpZE1vdW50LCB3aWxsIGJlIGJh
dGNoZWRcbiAgICAvLyBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgYmF0Y2hpbmcgc3RyYXRlZ3ku
XG5cbiAgICBSZWFjdFVwZGF0ZXMuYmF0Y2hlZFVwZGF0ZXMoYmF0Y2hlZE1vdW50Q29tcG9uZW50
SW50b05vZGUsIGNvbXBvbmVudEluc3RhbmNlLCBjb250YWluZXIsIHNob3VsZFJldXNlTWFya3Vw
LCBjb250ZXh0KTtcblxuICAgIHZhciB3cmFwcGVySUQgPSBjb21wb25lbnRJbnN0YW5jZS5faW5z
dGFuY2Uucm9vdElEO1xuICAgIGluc3RhbmNlc0J5UmVhY3RSb290SURbd3JhcHBlcklEXSA9IGNv
bXBvbmVudEluc3RhbmNlO1xuXG4gICAgcmV0dXJuIGNvbXBvbmVudEluc3RhbmNlO1xuICB9LFxu
XG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgUmVhY3QgY29tcG9uZW50IGludG8gdGhlIERPTSBpbiB0
aGUgc3VwcGxpZWQgYGNvbnRhaW5lcmAuXG4gICAqXG4gICAqIElmIHRoZSBSZWFjdCBjb21wb25l
bnQgd2FzIHByZXZpb3VzbHkgcmVuZGVyZWQgaW50byBgY29udGFpbmVyYCwgdGhpcyB3aWxsXG4g
ICAqIHBlcmZvcm0gYW4gdXBkYXRlIG9uIGl0IGFuZCBvbmx5IG11dGF0ZSB0aGUgRE9NIGFzIG5l
Y2Vzc2FyeSB0byByZWZsZWN0IHRoZVxuICAgKiBsYXRlc3QgUmVhY3QgY29tcG9uZW50LlxuICAg
KlxuICAgKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBwYXJlbnRDb21wb25lbnQgVGhlIGNvbmNl
cHR1YWwgcGFyZW50IG9mIHRoaXMgcmVuZGVyIHRyZWUuXG4gICAqIEBwYXJhbSB7UmVhY3RFbGVt
ZW50fSBuZXh0RWxlbWVudCBDb21wb25lbnQgZWxlbWVudCB0byByZW5kZXIuXG4gICAqIEBwYXJh
bSB7RE9NRWxlbWVudH0gY29udGFpbmVyIERPTSBlbGVtZW50IHRvIHJlbmRlciBpbnRvLlxuICAg
KiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgZnVuY3Rpb24gdHJpZ2dlcmVkIG9uIGNvbXBs
ZXRpb25cbiAgICogQHJldHVybiB7UmVhY3RDb21wb25lbnR9IENvbXBvbmVudCBpbnN0YW5jZSBy
ZW5kZXJlZCBpbiBgY29udGFpbmVyYC5cbiAgICovXG4gIHJlbmRlclN1YnRyZWVJbnRvQ29udGFp
bmVyOiBmdW5jdGlvbiAocGFyZW50Q29tcG9uZW50LCBuZXh0RWxlbWVudCwgY29udGFpbmVyLCBj
YWxsYmFjaykge1xuICAgICEocGFyZW50Q29tcG9uZW50ICE9IG51bGwgJiYgUmVhY3RJbnN0YW5j
ZU1hcC5oYXMocGFyZW50Q29tcG9uZW50KSkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3By
b2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAncGFyZW50Q29tcG9uZW50IG11c3QgYmUgYSB2
YWxpZCBSZWFjdCBDb21wb25lbnQnKSA6IF9wcm9kSW52YXJpYW50KCczOCcpIDogdm9pZCAwO1xu
ICAgIHJldHVybiBSZWFjdE1vdW50Ll9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihwYXJlbnRD
b21wb25lbnQsIG5leHRFbGVtZW50LCBjb250YWluZXIsIGNhbGxiYWNrKTtcbiAgfSxcblxuICBf
cmVuZGVyU3VidHJlZUludG9Db250YWluZXI6IGZ1bmN0aW9uIChwYXJlbnRDb21wb25lbnQsIG5l
eHRFbGVtZW50LCBjb250YWluZXIsIGNhbGxiYWNrKSB7XG4gICAgUmVhY3RVcGRhdGVRdWV1ZS52
YWxpZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCAnUmVhY3RET00ucmVuZGVyJyk7XG4gICAgIVJlYWN0
LmlzVmFsaWRFbGVtZW50KG5leHRFbGVtZW50KSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAn
cHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdSZWFjdERPTS5yZW5kZXIoKTogSW52YWxp
ZCBjb21wb25lbnQgZWxlbWVudC4lcycsIHR5cGVvZiBuZXh0RWxlbWVudCA9PT0gJ3N0cmluZycg
PyBcIiBJbnN0ZWFkIG9mIHBhc3NpbmcgYSBzdHJpbmcgbGlrZSAnZGl2JywgcGFzcyBcIiArIFwi
UmVhY3QuY3JlYXRlRWxlbWVudCgnZGl2Jykgb3IgPGRpdiAvPi5cIiA6IHR5cGVvZiBuZXh0RWxl
bWVudCA9PT0gJ2Z1bmN0aW9uJyA/ICcgSW5zdGVhZCBvZiBwYXNzaW5nIGEgY2xhc3MgbGlrZSBG
b28sIHBhc3MgJyArICdSZWFjdC5jcmVhdGVFbGVtZW50KEZvbykgb3IgPEZvbyAvPi4nIDogLy8g
Q2hlY2sgaWYgaXQgcXVhY2tzIGxpa2UgYW4gZWxlbWVudFxuICAgIG5leHRFbGVtZW50ICE9IG51
bGwgJiYgbmV4dEVsZW1lbnQucHJvcHMgIT09IHVuZGVmaW5lZCA/ICcgVGhpcyBtYXkgYmUgY2F1
c2VkIGJ5IHVuaW50ZW50aW9uYWxseSBsb2FkaW5nIHR3byBpbmRlcGVuZGVudCAnICsgJ2NvcGll
cyBvZiBSZWFjdC4nIDogJycpIDogX3Byb2RJbnZhcmlhbnQoJzM5JywgdHlwZW9mIG5leHRFbGVt
ZW50ID09PSAnc3RyaW5nJyA/IFwiIEluc3RlYWQgb2YgcGFzc2luZyBhIHN0cmluZyBsaWtlICdk
aXYnLCBwYXNzIFwiICsgXCJSZWFjdC5jcmVhdGVFbGVtZW50KCdkaXYnKSBvciA8ZGl2IC8+Llwi
IDogdHlwZW9mIG5leHRFbGVtZW50ID09PSAnZnVuY3Rpb24nID8gJyBJbnN0ZWFkIG9mIHBhc3Np
bmcgYSBjbGFzcyBsaWtlIEZvbywgcGFzcyAnICsgJ1JlYWN0LmNyZWF0ZUVsZW1lbnQoRm9vKSBv
ciA8Rm9vIC8+LicgOiBuZXh0RWxlbWVudCAhPSBudWxsICYmIG5leHRFbGVtZW50LnByb3BzICE9
PSB1bmRlZmluZWQgPyAnIFRoaXMgbWF5IGJlIGNhdXNlZCBieSB1bmludGVudGlvbmFsbHkgbG9h
ZGluZyB0d28gaW5kZXBlbmRlbnQgJyArICdjb3BpZXMgb2YgUmVhY3QuJyA6ICcnKSA6IHZvaWQg
MDtcblxuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5n
KCFjb250YWluZXIgfHwgIWNvbnRhaW5lci50YWdOYW1lIHx8IGNvbnRhaW5lci50YWdOYW1lLnRv
VXBwZXJDYXNlKCkgIT09ICdCT0RZJywgJ3JlbmRlcigpOiBSZW5kZXJpbmcgY29tcG9uZW50cyBk
aXJlY3RseSBpbnRvIGRvY3VtZW50LmJvZHkgaXMgJyArICdkaXNjb3VyYWdlZCwgc2luY2UgaXRz
IGNoaWxkcmVuIGFyZSBvZnRlbiBtYW5pcHVsYXRlZCBieSB0aGlyZC1wYXJ0eSAnICsgJ3Njcmlw
dHMgYW5kIGJyb3dzZXIgZXh0ZW5zaW9ucy4gVGhpcyBtYXkgbGVhZCB0byBzdWJ0bGUgJyArICdy
ZWNvbmNpbGlhdGlvbiBpc3N1ZXMuIFRyeSByZW5kZXJpbmcgaW50byBhIGNvbnRhaW5lciBlbGVt
ZW50IGNyZWF0ZWQgJyArICdmb3IgeW91ciBhcHAuJykgOiB2b2lkIDA7XG5cbiAgICB2YXIgbmV4
dFdyYXBwZWRFbGVtZW50ID0gUmVhY3QuY3JlYXRlRWxlbWVudChUb3BMZXZlbFdyYXBwZXIsIHtc
biAgICAgIGNoaWxkOiBuZXh0RWxlbWVudFxuICAgIH0pO1xuXG4gICAgdmFyIG5leHRDb250ZXh0
O1xuICAgIGlmIChwYXJlbnRDb21wb25lbnQpIHtcbiAgICAgIHZhciBwYXJlbnRJbnN0ID0gUmVh
Y3RJbnN0YW5jZU1hcC5nZXQocGFyZW50Q29tcG9uZW50KTtcbiAgICAgIG5leHRDb250ZXh0ID0g
cGFyZW50SW5zdC5fcHJvY2Vzc0NoaWxkQ29udGV4dChwYXJlbnRJbnN0Ll9jb250ZXh0KTtcbiAg
ICB9IGVsc2Uge1xuICAgICAgbmV4dENvbnRleHQgPSBlbXB0eU9iamVjdDtcbiAgICB9XG5cbiAg
ICB2YXIgcHJldkNvbXBvbmVudCA9IGdldFRvcExldmVsV3JhcHBlckluQ29udGFpbmVyKGNvbnRh
aW5lcik7XG5cbiAgICBpZiAocHJldkNvbXBvbmVudCkge1xuICAgICAgdmFyIHByZXZXcmFwcGVk
RWxlbWVudCA9IHByZXZDb21wb25lbnQuX2N1cnJlbnRFbGVtZW50O1xuICAgICAgdmFyIHByZXZF
bGVtZW50ID0gcHJldldyYXBwZWRFbGVtZW50LnByb3BzLmNoaWxkO1xuICAgICAgaWYgKHNob3Vs
ZFVwZGF0ZVJlYWN0Q29tcG9uZW50KHByZXZFbGVtZW50LCBuZXh0RWxlbWVudCkpIHtcbiAgICAg
ICAgdmFyIHB1YmxpY0luc3QgPSBwcmV2Q29tcG9uZW50Ll9yZW5kZXJlZENvbXBvbmVudC5nZXRQ
dWJsaWNJbnN0YW5jZSgpO1xuICAgICAgICB2YXIgdXBkYXRlZENhbGxiYWNrID0gY2FsbGJhY2sg
JiYgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNhbGxiYWNrLmNhbGwocHVibGljSW5zdCk7XG4g
ICAgICAgIH07XG4gICAgICAgIFJlYWN0TW91bnQuX3VwZGF0ZVJvb3RDb21wb25lbnQocHJldkNv
bXBvbmVudCwgbmV4dFdyYXBwZWRFbGVtZW50LCBuZXh0Q29udGV4dCwgY29udGFpbmVyLCB1cGRh
dGVkQ2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gcHVibGljSW5zdDtcbiAgICAgIH0gZWxzZSB7
XG4gICAgICAgIFJlYWN0TW91bnQudW5tb3VudENvbXBvbmVudEF0Tm9kZShjb250YWluZXIpO1xu
ICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZWFjdFJvb3RFbGVtZW50ID0gZ2V0UmVhY3RSb290
RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gICAgdmFyIGNvbnRhaW5lckhhc1JlYWN0
TWFya3VwID0gcmVhY3RSb290RWxlbWVudCAmJiAhIWludGVybmFsR2V0SUQocmVhY3RSb290RWxl
bWVudCk7XG4gICAgdmFyIGNvbnRhaW5lckhhc05vblJvb3RSZWFjdENoaWxkID0gaGFzTm9uUm9v
dFJlYWN0Q2hpbGQoY29udGFpbmVyKTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAh
PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1
Y3Rpb24nID8gd2FybmluZyghY29udGFpbmVySGFzTm9uUm9vdFJlYWN0Q2hpbGQsICdyZW5kZXIo
Li4uKTogUmVwbGFjaW5nIFJlYWN0LXJlbmRlcmVkIGNoaWxkcmVuIHdpdGggYSBuZXcgcm9vdCAn
ICsgJ2NvbXBvbmVudC4gSWYgeW91IGludGVuZGVkIHRvIHVwZGF0ZSB0aGUgY2hpbGRyZW4gb2Yg
dGhpcyBub2RlLCAnICsgJ3lvdSBzaG91bGQgaW5zdGVhZCBoYXZlIHRoZSBleGlzdGluZyBjaGls
ZHJlbiB1cGRhdGUgdGhlaXIgc3RhdGUgJyArICdhbmQgcmVuZGVyIHRoZSBuZXcgY29tcG9uZW50
cyBpbnN0ZWFkIG9mIGNhbGxpbmcgUmVhY3RET00ucmVuZGVyLicpIDogdm9pZCAwO1xuXG4gICAg
ICBpZiAoIWNvbnRhaW5lckhhc1JlYWN0TWFya3VwIHx8IHJlYWN0Um9vdEVsZW1lbnQubmV4dFNp
YmxpbmcpIHtcbiAgICAgICAgdmFyIHJvb3RFbGVtZW50U2libGluZyA9IHJlYWN0Um9vdEVsZW1l
bnQ7XG4gICAgICAgIHdoaWxlIChyb290RWxlbWVudFNpYmxpbmcpIHtcbiAgICAgICAgICBpZiAo
aW50ZXJuYWxHZXRJRChyb290RWxlbWVudFNpYmxpbmcpKSB7XG4gICAgICAgICAgICBwcm9jZXNz
LmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ3JlbmRlcigp
OiBUYXJnZXQgbm9kZSBoYXMgbWFya3VwIHJlbmRlcmVkIGJ5IFJlYWN0LCBidXQgdGhlcmUgJyAr
ICdhcmUgdW5yZWxhdGVkIG5vZGVzIGFzIHdlbGwuIFRoaXMgaXMgbW9zdCBjb21tb25seSBjYXVz
ZWQgYnkgJyArICd3aGl0ZS1zcGFjZSBpbnNlcnRlZCBhcm91bmQgc2VydmVyLXJlbmRlcmVkIG1h
cmt1cC4nKSA6IHZvaWQgMDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAg
ICAgICByb290RWxlbWVudFNpYmxpbmcgPSByb290RWxlbWVudFNpYmxpbmcubmV4dFNpYmxpbmc7
XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc2hvdWxkUmV1c2VNYXJrdXAg
PSBjb250YWluZXJIYXNSZWFjdE1hcmt1cCAmJiAhcHJldkNvbXBvbmVudCAmJiAhY29udGFpbmVy
SGFzTm9uUm9vdFJlYWN0Q2hpbGQ7XG4gICAgdmFyIGNvbXBvbmVudCA9IFJlYWN0TW91bnQuX3Jl
bmRlck5ld1Jvb3RDb21wb25lbnQobmV4dFdyYXBwZWRFbGVtZW50LCBjb250YWluZXIsIHNob3Vs
ZFJldXNlTWFya3VwLCBuZXh0Q29udGV4dCkuX3JlbmRlcmVkQ29tcG9uZW50LmdldFB1YmxpY0lu
c3RhbmNlKCk7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjay5jYWxsKGNvbXBv
bmVudCk7XG4gICAgfVxuICAgIHJldHVybiBjb21wb25lbnQ7XG4gIH0sXG5cbiAgLyoqXG4gICAq
IFJlbmRlcnMgYSBSZWFjdCBjb21wb25lbnQgaW50byB0aGUgRE9NIGluIHRoZSBzdXBwbGllZCBg
Y29udGFpbmVyYC5cbiAgICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2Rv
Y3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0ZG9tLnJlbmRlclxuICAgKlxuICAgKiBJZiB0aGUg
UmVhY3QgY29tcG9uZW50IHdhcyBwcmV2aW91c2x5IHJlbmRlcmVkIGludG8gYGNvbnRhaW5lcmAs
IHRoaXMgd2lsbFxuICAgKiBwZXJmb3JtIGFuIHVwZGF0ZSBvbiBpdCBhbmQgb25seSBtdXRhdGUg
dGhlIERPTSBhcyBuZWNlc3NhcnkgdG8gcmVmbGVjdCB0aGVcbiAgICogbGF0ZXN0IFJlYWN0IGNv
bXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IG5leHRFbGVtZW50IENv
bXBvbmVudCBlbGVtZW50IHRvIHJlbmRlci5cbiAgICogQHBhcmFtIHtET01FbGVtZW50fSBjb250
YWluZXIgRE9NIGVsZW1lbnQgdG8gcmVuZGVyIGludG8uXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9u
fSBjYWxsYmFjayBmdW5jdGlvbiB0cmlnZ2VyZWQgb24gY29tcGxldGlvblxuICAgKiBAcmV0dXJu
IHtSZWFjdENvbXBvbmVudH0gQ29tcG9uZW50IGluc3RhbmNlIHJlbmRlcmVkIGluIGBjb250YWlu
ZXJgLlxuICAgKi9cbiAgcmVuZGVyOiBmdW5jdGlvbiAobmV4dEVsZW1lbnQsIGNvbnRhaW5lciwg
Y2FsbGJhY2spIHtcbiAgICByZXR1cm4gUmVhY3RNb3VudC5fcmVuZGVyU3VidHJlZUludG9Db250
YWluZXIobnVsbCwgbmV4dEVsZW1lbnQsIGNvbnRhaW5lciwgY2FsbGJhY2spO1xuICB9LFxuXG4g
IC8qKlxuICAgKiBVbm1vdW50cyBhbmQgZGVzdHJveXMgdGhlIFJlYWN0IGNvbXBvbmVudCByZW5k
ZXJlZCBpbiB0aGUgYGNvbnRhaW5lcmAuXG4gICAqIFNlZSBodHRwczovL2ZhY2Vib29rLmdpdGh1
Yi5pby9yZWFjdC9kb2NzL3RvcC1sZXZlbC1hcGkuaHRtbCNyZWFjdGRvbS51bm1vdW50Y29tcG9u
ZW50YXRub2RlXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIERPTSBl
bGVtZW50IGNvbnRhaW5pbmcgYSBSZWFjdCBjb21wb25lbnQuXG4gICAqIEByZXR1cm4ge2Jvb2xl
YW59IFRydWUgaWYgYSBjb21wb25lbnQgd2FzIGZvdW5kIGluIGFuZCB1bm1vdW50ZWQgZnJvbVxu
ICAgKiAgICAgICAgICAgICAgICAgICBgY29udGFpbmVyYFxuICAgKi9cbiAgdW5tb3VudENvbXBv
bmVudEF0Tm9kZTogZnVuY3Rpb24gKGNvbnRhaW5lcikge1xuICAgIC8vIFZhcmlvdXMgcGFydHMg
b2Ygb3VyIGNvZGUgKHN1Y2ggYXMgUmVhY3RDb21wb3NpdGVDb21wb25lbnQnc1xuICAgIC8vIF9y
ZW5kZXJWYWxpZGF0ZWRDb21wb25lbnQpIGFzc3VtZSB0aGF0IGNhbGxzIHRvIHJlbmRlciBhcmVu
J3QgbmVzdGVkO1xuICAgIC8vIHZlcmlmeSB0aGF0IHRoYXQncyB0aGUgY2FzZS4gKFN0cmljdGx5
IHNwZWFraW5nLCB1bm1vdW50aW5nIHdvbid0IGNhdXNlIGFcbiAgICAvLyByZW5kZXIgYnV0IHdl
IHN0aWxsIGRvbid0IGV4cGVjdCB0byBiZSBpbiBhIHJlbmRlciBjYWxsIGhlcmUuKVxuICAgIHBy
b2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKFJlYWN0Q3VycmVu
dE93bmVyLmN1cnJlbnQgPT0gbnVsbCwgJ3VubW91bnRDb21wb25lbnRBdE5vZGUoKTogUmVuZGVy
IG1ldGhvZHMgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbiAnICsgJ29mIHByb3BzIGFuZCBzdGF0
ZTsgdHJpZ2dlcmluZyBuZXN0ZWQgY29tcG9uZW50IHVwZGF0ZXMgZnJvbSByZW5kZXIgJyArICdp
cyBub3QgYWxsb3dlZC4gSWYgbmVjZXNzYXJ5LCB0cmlnZ2VyIG5lc3RlZCB1cGRhdGVzIGluICcg
KyAnY29tcG9uZW50RGlkVXBkYXRlLiBDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiAlcy4nLCBS
ZWFjdEN1cnJlbnRPd25lci5jdXJyZW50ICYmIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQuZ2V0
TmFtZSgpIHx8ICdSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCcpIDogdm9pZCAwO1xuXG4gICAgIWlz
VmFsaWRDb250YWluZXIoY29udGFpbmVyKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJv
ZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICd1bm1vdW50Q29tcG9uZW50QXROb2RlKC4uLik6
IFRhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuJykgOiBfcHJvZEludmFyaWFu
dCgnNDAnKSA6IHZvaWQgMDtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3By
b2R1Y3Rpb24nKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24n
ID8gd2FybmluZyghbm9kZUlzUmVuZGVyZWRCeU90aGVySW5zdGFuY2UoY29udGFpbmVyKSwgXCJ1
bm1vdW50Q29tcG9uZW50QXROb2RlKCk6IFRoZSBub2RlIHlvdSdyZSBhdHRlbXB0aW5nIHRvIHVu
bW91bnQgXCIgKyAnd2FzIHJlbmRlcmVkIGJ5IGFub3RoZXIgY29weSBvZiBSZWFjdC4nKSA6IHZv
aWQgMDtcbiAgICB9XG5cbiAgICB2YXIgcHJldkNvbXBvbmVudCA9IGdldFRvcExldmVsV3JhcHBl
ckluQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gICAgaWYgKCFwcmV2Q29tcG9uZW50KSB7XG4gICAg
ICAvLyBDaGVjayBpZiB0aGUgbm9kZSBiZWluZyB1bm1vdW50ZWQgd2FzIHJlbmRlcmVkIGJ5IFJl
YWN0LCBidXQgaXNuJ3QgYVxuICAgICAgLy8gcm9vdCBub2RlLlxuICAgICAgdmFyIGNvbnRhaW5l
ckhhc05vblJvb3RSZWFjdENoaWxkID0gaGFzTm9uUm9vdFJlYWN0Q2hpbGQoY29udGFpbmVyKTtc
blxuICAgICAgLy8gQ2hlY2sgaWYgdGhlIGNvbnRhaW5lciBpdHNlbGYgaXMgYSBSZWFjdCByb290
IG5vZGUuXG4gICAgICB2YXIgaXNDb250YWluZXJSZWFjdFJvb3QgPSBjb250YWluZXIubm9kZVR5
cGUgPT09IDEgJiYgY29udGFpbmVyLmhhc0F0dHJpYnV0ZShST09UX0FUVFJfTkFNRSk7XG5cbiAg
ICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAg
IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKCFjb250YWlu
ZXJIYXNOb25Sb290UmVhY3RDaGlsZCwgXCJ1bm1vdW50Q29tcG9uZW50QXROb2RlKCk6IFRoZSBu
b2RlIHlvdSdyZSBhdHRlbXB0aW5nIHRvIHVubW91bnQgXCIgKyAnd2FzIHJlbmRlcmVkIGJ5IFJl
YWN0IGFuZCBpcyBub3QgYSB0b3AtbGV2ZWwgY29udGFpbmVyLiAlcycsIGlzQ29udGFpbmVyUmVh
Y3RSb290ID8gJ1lvdSBtYXkgaGF2ZSBhY2NpZGVudGFsbHkgcGFzc2VkIGluIGEgUmVhY3Qgcm9v
dCBub2RlIGluc3RlYWQgJyArICdvZiBpdHMgY29udGFpbmVyLicgOiAnSW5zdGVhZCwgaGF2ZSB0
aGUgcGFyZW50IGNvbXBvbmVudCB1cGRhdGUgaXRzIHN0YXRlIGFuZCAnICsgJ3JlcmVuZGVyIGlu
IG9yZGVyIHRvIHJlbW92ZSB0aGlzIGNvbXBvbmVudC4nKSA6IHZvaWQgMDtcbiAgICAgIH1cblxu
ICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBkZWxldGUgaW5zdGFuY2VzQnlSZWFjdFJv
b3RJRFtwcmV2Q29tcG9uZW50Ll9pbnN0YW5jZS5yb290SURdO1xuICAgIFJlYWN0VXBkYXRlcy5i
YXRjaGVkVXBkYXRlcyh1bm1vdW50Q29tcG9uZW50RnJvbU5vZGUsIHByZXZDb21wb25lbnQsIGNv
bnRhaW5lciwgZmFsc2UpO1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuXG4gIF9tb3VudEltYWdl
SW50b05vZGU6IGZ1bmN0aW9uIChtYXJrdXAsIGNvbnRhaW5lciwgaW5zdGFuY2UsIHNob3VsZFJl
dXNlTWFya3VwLCB0cmFuc2FjdGlvbikge1xuICAgICFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5l
cikgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZh
bHNlLCAnbW91bnRDb21wb25lbnRJbnRvTm9kZSguLi4pOiBUYXJnZXQgY29udGFpbmVyIGlzIG5v
dCB2YWxpZC4nKSA6IF9wcm9kSW52YXJpYW50KCc0MScpIDogdm9pZCAwO1xuXG4gICAgaWYgKHNo
b3VsZFJldXNlTWFya3VwKSB7XG4gICAgICB2YXIgcm9vdEVsZW1lbnQgPSBnZXRSZWFjdFJvb3RF
bGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTtcbiAgICAgIGlmIChSZWFjdE1hcmt1cENoZWNr
c3VtLmNhblJldXNlTWFya3VwKG1hcmt1cCwgcm9vdEVsZW1lbnQpKSB7XG4gICAgICAgIFJlYWN0
RE9NQ29tcG9uZW50VHJlZS5wcmVjYWNoZU5vZGUoaW5zdGFuY2UsIHJvb3RFbGVtZW50KTtcbiAg
ICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGNoZWNrc3VtID0gcm9v
dEVsZW1lbnQuZ2V0QXR0cmlidXRlKFJlYWN0TWFya3VwQ2hlY2tzdW0uQ0hFQ0tTVU1fQVRUUl9O
QU1FKTtcbiAgICAgICAgcm9vdEVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKFJlYWN0TWFya3VwQ2hl
Y2tzdW0uQ0hFQ0tTVU1fQVRUUl9OQU1FKTtcblxuICAgICAgICB2YXIgcm9vdE1hcmt1cCA9IHJv
b3RFbGVtZW50Lm91dGVySFRNTDtcbiAgICAgICAgcm9vdEVsZW1lbnQuc2V0QXR0cmlidXRlKFJl
YWN0TWFya3VwQ2hlY2tzdW0uQ0hFQ0tTVU1fQVRUUl9OQU1FLCBjaGVja3N1bSk7XG5cbiAgICAg
ICAgdmFyIG5vcm1hbGl6ZWRNYXJrdXAgPSBtYXJrdXA7XG4gICAgICAgIGlmIChwcm9jZXNzLmVu
di5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgLy8gYmVjYXVzZSByb290
TWFya3VwIGlzIHJldHJpZXZlZCBmcm9tIHRoZSBET00sIHZhcmlvdXMgbm9ybWFsaXphdGlvbnNc
biAgICAgICAgICAvLyB3aWxsIGhhdmUgb2NjdXJyZWQgd2hpY2ggd2lsbCBub3QgYmUgcHJlc2Vu
dCBpbiBgbWFya3VwYC4gSGVyZSxcbiAgICAgICAgICAvLyBpbnNlcnQgbWFya3VwIGludG8gYSA8
ZGl2PiBvciA8aWZyYW1lPiBkZXBlbmRpbmcgb24gdGhlIGNvbnRhaW5lclxuICAgICAgICAgIC8v
IHR5cGUgdG8gcGVyZm9ybSB0aGUgc2FtZSBub3JtYWxpemF0aW9ucyBiZWZvcmUgY29tcGFyaW5n
LlxuICAgICAgICAgIHZhciBub3JtYWxpemVyO1xuICAgICAgICAgIGlmIChjb250YWluZXIubm9k
ZVR5cGUgPT09IEVMRU1FTlRfTk9ERV9UWVBFKSB7XG4gICAgICAgICAgICBub3JtYWxpemVyID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBub3JtYWxpemVyLmlu
bmVySFRNTCA9IG1hcmt1cDtcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRNYXJrdXAgPSBub3JtYWxp
emVyLmlubmVySFRNTDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbm9ybWFsaXpl
ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICAgICAgICAgICAgZG9jdW1l
bnQuYm9keS5hcHBlbmRDaGlsZChub3JtYWxpemVyKTtcbiAgICAgICAgICAgIG5vcm1hbGl6ZXIu
Y29udGVudERvY3VtZW50LndyaXRlKG1hcmt1cCk7XG4gICAgICAgICAgICBub3JtYWxpemVkTWFy
a3VwID0gbm9ybWFsaXplci5jb250ZW50RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm91dGVySFRN
TDtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobm9ybWFsaXplcik7XG4g
ICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRpZmZJbmRleCA9IGZpcnN0RGlm
ZmVyZW5jZUluZGV4KG5vcm1hbGl6ZWRNYXJrdXAsIHJvb3RNYXJrdXApO1xuICAgICAgICB2YXIg
ZGlmZmVyZW5jZSA9ICcgKGNsaWVudCkgJyArIG5vcm1hbGl6ZWRNYXJrdXAuc3Vic3RyaW5nKGRp
ZmZJbmRleCAtIDIwLCBkaWZmSW5kZXggKyAyMCkgKyAnXFxuIChzZXJ2ZXIpICcgKyByb290TWFy
a3VwLnN1YnN0cmluZyhkaWZmSW5kZXggLSAyMCwgZGlmZkluZGV4ICsgMjApO1xuXG4gICAgICAg
ICEoY29udGFpbmVyLm5vZGVUeXBlICE9PSBET0NfTk9ERV9UWVBFKSA/IHByb2Nlc3MuZW52Lk5P
REVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdZb3VcXCdyZSB0cnlp
bmcgdG8gcmVuZGVyIGEgY29tcG9uZW50IHRvIHRoZSBkb2N1bWVudCB1c2luZyBzZXJ2ZXIgcmVu
ZGVyaW5nIGJ1dCB0aGUgY2hlY2tzdW0gd2FzIGludmFsaWQuIFRoaXMgdXN1YWxseSBtZWFucyB5
b3UgcmVuZGVyZWQgYSBkaWZmZXJlbnQgY29tcG9uZW50IHR5cGUgb3IgcHJvcHMgb24gdGhlIGNs
aWVudCBmcm9tIHRoZSBvbmUgb24gdGhlIHNlcnZlciwgb3IgeW91ciByZW5kZXIoKSBtZXRob2Rz
IGFyZSBpbXB1cmUuIFJlYWN0IGNhbm5vdCBoYW5kbGUgdGhpcyBjYXNlIGR1ZSB0byBjcm9zcy1i
cm93c2VyIHF1aXJrcyBieSByZW5kZXJpbmcgYXQgdGhlIGRvY3VtZW50IHJvb3QuIFlvdSBzaG91
bGQgbG9vayBmb3IgZW52aXJvbm1lbnQgZGVwZW5kZW50IGNvZGUgaW4geW91ciBjb21wb25lbnRz
IGFuZCBlbnN1cmUgdGhlIHByb3BzIGFyZSB0aGUgc2FtZSBjbGllbnQgYW5kIHNlcnZlciBzaWRl
OlxcbiVzJywgZGlmZmVyZW5jZSkgOiBfcHJvZEludmFyaWFudCgnNDInLCBkaWZmZXJlbmNlKSA6
IHZvaWQgMDtcblxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0
aW9uJykge1xuICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicg
PyB3YXJuaW5nKGZhbHNlLCAnUmVhY3QgYXR0ZW1wdGVkIHRvIHJldXNlIG1hcmt1cCBpbiBhIGNv
bnRhaW5lciBidXQgdGhlICcgKyAnY2hlY2tzdW0gd2FzIGludmFsaWQuIFRoaXMgZ2VuZXJhbGx5
IG1lYW5zIHRoYXQgeW91IGFyZSAnICsgJ3VzaW5nIHNlcnZlciByZW5kZXJpbmcgYW5kIHRoZSBt
YXJrdXAgZ2VuZXJhdGVkIG9uIHRoZSAnICsgJ3NlcnZlciB3YXMgbm90IHdoYXQgdGhlIGNsaWVu
dCB3YXMgZXhwZWN0aW5nLiBSZWFjdCBpbmplY3RlZCAnICsgJ25ldyBtYXJrdXAgdG8gY29tcGVu
c2F0ZSB3aGljaCB3b3JrcyBidXQgeW91IGhhdmUgbG9zdCBtYW55ICcgKyAnb2YgdGhlIGJlbmVm
aXRzIG9mIHNlcnZlciByZW5kZXJpbmcuIEluc3RlYWQsIGZpZ3VyZSBvdXQgJyArICd3aHkgdGhl
IG1hcmt1cCBiZWluZyBnZW5lcmF0ZWQgaXMgZGlmZmVyZW50IG9uIHRoZSBjbGllbnQgJyArICdv
ciBzZXJ2ZXI6XFxuJXMnLCBkaWZmZXJlbmNlKSA6IHZvaWQgMDtcbiAgICAgICAgfVxuICAgICAg
fVxuICAgIH1cblxuICAgICEoY29udGFpbmVyLm5vZGVUeXBlICE9PSBET0NfTk9ERV9UWVBFKSA/
IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2Us
ICdZb3VcXCdyZSB0cnlpbmcgdG8gcmVuZGVyIGEgY29tcG9uZW50IHRvIHRoZSBkb2N1bWVudCBi
dXQgeW91IGRpZG5cXCd0IHVzZSBzZXJ2ZXIgcmVuZGVyaW5nLiBXZSBjYW5cXCd0IGRvIHRoaXMg
d2l0aG91dCB1c2luZyBzZXJ2ZXIgcmVuZGVyaW5nIGR1ZSB0byBjcm9zcy1icm93c2VyIHF1aXJr
cy4gU2VlIFJlYWN0RE9NU2VydmVyLnJlbmRlclRvU3RyaW5nKCkgZm9yIHNlcnZlciByZW5kZXJp
bmcuJykgOiBfcHJvZEludmFyaWFudCgnNDMnKSA6IHZvaWQgMDtcblxuICAgIGlmICh0cmFuc2Fj
dGlvbi51c2VDcmVhdGVFbGVtZW50KSB7XG4gICAgICB3aGlsZSAoY29udGFpbmVyLmxhc3RDaGls
ZCkge1xuICAgICAgICBjb250YWluZXIucmVtb3ZlQ2hpbGQoY29udGFpbmVyLmxhc3RDaGlsZCk7
XG4gICAgICB9XG4gICAgICBET01MYXp5VHJlZS5pbnNlcnRUcmVlQmVmb3JlKGNvbnRhaW5lciwg
bWFya3VwLCBudWxsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0SW5uZXJIVE1MKGNvbnRhaW5l
ciwgbWFya3VwKTtcbiAgICAgIFJlYWN0RE9NQ29tcG9uZW50VHJlZS5wcmVjYWNoZU5vZGUoaW5z
dGFuY2UsIGNvbnRhaW5lci5maXJzdENoaWxkKTtcbiAgICB9XG5cbiAgICBpZiAocHJvY2Vzcy5l
bnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIGhvc3ROb2RlID0gUmVh
Y3RET01Db21wb25lbnRUcmVlLmdldEluc3RhbmNlRnJvbU5vZGUoY29udGFpbmVyLmZpcnN0Q2hp
bGQpO1xuICAgICAgaWYgKGhvc3ROb2RlLl9kZWJ1Z0lEICE9PSAwKSB7XG4gICAgICAgIFJlYWN0
SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vbkhvc3RPcGVyYXRpb24oe1xuICAgICAgICAgIGlu
c3RhbmNlSUQ6IGhvc3ROb2RlLl9kZWJ1Z0lELFxuICAgICAgICAgIHR5cGU6ICdtb3VudCcsXG4g
ICAgICAgICAgcGF5bG9hZDogbWFya3VwLnRvU3RyaW5nKClcbiAgICAgICAgfSk7XG4gICAgICB9
XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0TW91bnQ7XG5cblxuLy8v
Ly8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvcmVh
Y3QtZG9tL2xpYi9SZWFjdE1vdW50LmpzXG4vLyBtb2R1bGUgaWQgPSA4MlxuLy8gbW9kdWxlIGNo
dW5rcyA9IDAiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMu
XG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGlj
ZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5T
RSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRp
dGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFU
RU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3Qn
O1xuXG52YXIgUmVhY3ROb2RlVHlwZXMgPSByZXF1aXJlKCcuL1JlYWN0Tm9kZVR5cGVzJyk7XG5c
bmZ1bmN0aW9uIGdldEhvc3RDb21wb25lbnRGcm9tQ29tcG9zaXRlKGluc3QpIHtcbiAgdmFyIHR5
cGU7XG5cbiAgd2hpbGUgKCh0eXBlID0gaW5zdC5fcmVuZGVyZWROb2RlVHlwZSkgPT09IFJlYWN0
Tm9kZVR5cGVzLkNPTVBPU0lURSkge1xuICAgIGluc3QgPSBpbnN0Ll9yZW5kZXJlZENvbXBvbmVu
dDtcbiAgfVxuXG4gIGlmICh0eXBlID09PSBSZWFjdE5vZGVUeXBlcy5IT1NUKSB7XG4gICAgcmV0
dXJuIGluc3QuX3JlbmRlcmVkQ29tcG9uZW50O1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IFJlYWN0
Tm9kZVR5cGVzLkVNUFRZKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxubW9kdWxlLmV4
cG9ydHMgPSBnZXRIb3N0Q29tcG9uZW50RnJvbUNvbXBvc2l0ZTtcblxuXG4vLy8vLy8vLy8vLy8v
Ly8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGli
L2dldEhvc3RDb21wb25lbnRGcm9tQ29tcG9zaXRlLmpzXG4vLyBtb2R1bGUgaWQgPSA4M1xuLy8g
bW9kdWxlIGNodW5rcyA9IDAiLCJpbXBvcnQgaXNQbGFpbk9iamVjdCBmcm9tICdsb2Rhc2gtZXMv
aXNQbGFpbk9iamVjdCc7XG5pbXBvcnQgJCRvYnNlcnZhYmxlIGZyb20gJ3N5bWJvbC1vYnNlcnZh
YmxlJztcblxuLyoqXG4gKiBUaGVzZSBhcmUgcHJpdmF0ZSBhY3Rpb24gdHlwZXMgcmVzZXJ2ZWQg
YnkgUmVkdXguXG4gKiBGb3IgYW55IHVua25vd24gYWN0aW9ucywgeW91IG11c3QgcmV0dXJuIHRo
ZSBjdXJyZW50IHN0YXRlLlxuICogSWYgdGhlIGN1cnJlbnQgc3RhdGUgaXMgdW5kZWZpbmVkLCB5
b3UgbXVzdCByZXR1cm4gdGhlIGluaXRpYWwgc3RhdGUuXG4gKiBEbyBub3QgcmVmZXJlbmNlIHRo
ZXNlIGFjdGlvbiB0eXBlcyBkaXJlY3RseSBpbiB5b3VyIGNvZGUuXG4gKi9cbmV4cG9ydCB2YXIg
QWN0aW9uVHlwZXMgPSB7XG4gIElOSVQ6ICdAQHJlZHV4L0lOSVQnXG5cbiAgLyoqXG4gICAqIENy
ZWF0ZXMgYSBSZWR1eCBzdG9yZSB0aGF0IGhvbGRzIHRoZSBzdGF0ZSB0cmVlLlxuICAgKiBUaGUg
b25seSB3YXkgdG8gY2hhbmdlIHRoZSBkYXRhIGluIHRoZSBzdG9yZSBpcyB0byBjYWxsIGBkaXNw
YXRjaCgpYCBvbiBpdC5cbiAgICpcbiAgICogVGhlcmUgc2hvdWxkIG9ubHkgYmUgYSBzaW5nbGUg
c3RvcmUgaW4geW91ciBhcHAuIFRvIHNwZWNpZnkgaG93IGRpZmZlcmVudFxuICAgKiBwYXJ0cyBv
ZiB0aGUgc3RhdGUgdHJlZSByZXNwb25kIHRvIGFjdGlvbnMsIHlvdSBtYXkgY29tYmluZSBzZXZl
cmFsIHJlZHVjZXJzXG4gICAqIGludG8gYSBzaW5nbGUgcmVkdWNlciBmdW5jdGlvbiBieSB1c2lu
ZyBgY29tYmluZVJlZHVjZXJzYC5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcmVkdWNl
ciBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbmV4dCBzdGF0ZSB0cmVlLCBnaXZlblxuICAg
KiB0aGUgY3VycmVudCBzdGF0ZSB0cmVlIGFuZCB0aGUgYWN0aW9uIHRvIGhhbmRsZS5cbiAgICpc
biAgICogQHBhcmFtIHthbnl9IFtwcmVsb2FkZWRTdGF0ZV0gVGhlIGluaXRpYWwgc3RhdGUuIFlv
dSBtYXkgb3B0aW9uYWxseSBzcGVjaWZ5IGl0XG4gICAqIHRvIGh5ZHJhdGUgdGhlIHN0YXRlIGZy
b20gdGhlIHNlcnZlciBpbiB1bml2ZXJzYWwgYXBwcywgb3IgdG8gcmVzdG9yZSBhXG4gICAqIHBy
ZXZpb3VzbHkgc2VyaWFsaXplZCB1c2VyIHNlc3Npb24uXG4gICAqIElmIHlvdSB1c2UgYGNvbWJp
bmVSZWR1Y2Vyc2AgdG8gcHJvZHVjZSB0aGUgcm9vdCByZWR1Y2VyIGZ1bmN0aW9uLCB0aGlzIG11
c3QgYmVcbiAgICogYW4gb2JqZWN0IHdpdGggdGhlIHNhbWUgc2hhcGUgYXMgYGNvbWJpbmVSZWR1
Y2Vyc2Aga2V5cy5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2VuaGFuY2VyXSBUaGUg
c3RvcmUgZW5oYW5jZXIuIFlvdSBtYXkgb3B0aW9uYWxseSBzcGVjaWZ5IGl0XG4gICAqIHRvIGVu
aGFuY2UgdGhlIHN0b3JlIHdpdGggdGhpcmQtcGFydHkgY2FwYWJpbGl0aWVzIHN1Y2ggYXMgbWlk
ZGxld2FyZSxcbiAgICogdGltZSB0cmF2ZWwsIHBlcnNpc3RlbmNlLCBldGMuIFRoZSBvbmx5IHN0
b3JlIGVuaGFuY2VyIHRoYXQgc2hpcHMgd2l0aCBSZWR1eFxuICAgKiBpcyBgYXBwbHlNaWRkbGV3
YXJlKClgLlxuICAgKlxuICAgKiBAcmV0dXJucyB7U3RvcmV9IEEgUmVkdXggc3RvcmUgdGhhdCBs
ZXRzIHlvdSByZWFkIHRoZSBzdGF0ZSwgZGlzcGF0Y2ggYWN0aW9uc1xuICAgKiBhbmQgc3Vic2Ny
aWJlIHRvIGNoYW5nZXMuXG4gICAqL1xufTtleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVT
dG9yZShyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSwgZW5oYW5jZXIpIHtcbiAgdmFyIF9yZWYyO1xu
XG4gIGlmICh0eXBlb2YgcHJlbG9hZGVkU3RhdGUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGVu
aGFuY2VyID09PSAndW5kZWZpbmVkJykge1xuICAgIGVuaGFuY2VyID0gcHJlbG9hZGVkU3RhdGU7
XG4gICAgcHJlbG9hZGVkU3RhdGUgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAodHlwZW9mIGVu
aGFuY2VyICE9PSAndW5kZWZpbmVkJykge1xuICAgIGlmICh0eXBlb2YgZW5oYW5jZXIgIT09ICdm
dW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdGhlIGVuaGFuY2Vy
IHRvIGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVuaGFuY2VyKGNyZWF0
ZVN0b3JlKShyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSk7XG4gIH1cblxuICBpZiAodHlwZW9mIHJl
ZHVjZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHRo
ZSByZWR1Y2VyIHRvIGJlIGEgZnVuY3Rpb24uJyk7XG4gIH1cblxuICB2YXIgY3VycmVudFJlZHVj
ZXIgPSByZWR1Y2VyO1xuICB2YXIgY3VycmVudFN0YXRlID0gcHJlbG9hZGVkU3RhdGU7XG4gIHZh
ciBjdXJyZW50TGlzdGVuZXJzID0gW107XG4gIHZhciBuZXh0TGlzdGVuZXJzID0gY3VycmVudExp
c3RlbmVycztcbiAgdmFyIGlzRGlzcGF0Y2hpbmcgPSBmYWxzZTtcblxuICBmdW5jdGlvbiBlbnN1
cmVDYW5NdXRhdGVOZXh0TGlzdGVuZXJzKCkge1xuICAgIGlmIChuZXh0TGlzdGVuZXJzID09PSBj
dXJyZW50TGlzdGVuZXJzKSB7XG4gICAgICBuZXh0TGlzdGVuZXJzID0gY3VycmVudExpc3RlbmVy
cy5zbGljZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkcyB0aGUgc3RhdGUgdHJl
ZSBtYW5hZ2VkIGJ5IHRoZSBzdG9yZS5cbiAgICpcbiAgICogQHJldHVybnMge2FueX0gVGhlIGN1
cnJlbnQgc3RhdGUgdHJlZSBvZiB5b3VyIGFwcGxpY2F0aW9uLlxuICAgKi9cbiAgZnVuY3Rpb24g
Z2V0U3RhdGUoKSB7XG4gICAgcmV0dXJuIGN1cnJlbnRTdGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAg
KiBBZGRzIGEgY2hhbmdlIGxpc3RlbmVyLiBJdCB3aWxsIGJlIGNhbGxlZCBhbnkgdGltZSBhbiBh
Y3Rpb24gaXMgZGlzcGF0Y2hlZCxcbiAgICogYW5kIHNvbWUgcGFydCBvZiB0aGUgc3RhdGUgdHJl
ZSBtYXkgcG90ZW50aWFsbHkgaGF2ZSBjaGFuZ2VkLiBZb3UgbWF5IHRoZW5cbiAgICogY2FsbCBg
Z2V0U3RhdGUoKWAgdG8gcmVhZCB0aGUgY3VycmVudCBzdGF0ZSB0cmVlIGluc2lkZSB0aGUgY2Fs
bGJhY2suXG4gICAqXG4gICAqIFlvdSBtYXkgY2FsbCBgZGlzcGF0Y2goKWAgZnJvbSBhIGNoYW5n
ZSBsaXN0ZW5lciwgd2l0aCB0aGUgZm9sbG93aW5nXG4gICAqIGNhdmVhdHM6XG4gICAqXG4gICAq
IDEuIFRoZSBzdWJzY3JpcHRpb25zIGFyZSBzbmFwc2hvdHRlZCBqdXN0IGJlZm9yZSBldmVyeSBg
ZGlzcGF0Y2goKWAgY2FsbC5cbiAgICogSWYgeW91IHN1YnNjcmliZSBvciB1bnN1YnNjcmliZSB3
aGlsZSB0aGUgbGlzdGVuZXJzIGFyZSBiZWluZyBpbnZva2VkLCB0aGlzXG4gICAqIHdpbGwgbm90
IGhhdmUgYW55IGVmZmVjdCBvbiB0aGUgYGRpc3BhdGNoKClgIHRoYXQgaXMgY3VycmVudGx5IGlu
IHByb2dyZXNzLlxuICAgKiBIb3dldmVyLCB0aGUgbmV4dCBgZGlzcGF0Y2goKWAgY2FsbCwgd2hl
dGhlciBuZXN0ZWQgb3Igbm90LCB3aWxsIHVzZSBhIG1vcmVcbiAgICogcmVjZW50IHNuYXBzaG90
IG9mIHRoZSBzdWJzY3JpcHRpb24gbGlzdC5cbiAgICpcbiAgICogMi4gVGhlIGxpc3RlbmVyIHNo
b3VsZCBub3QgZXhwZWN0IHRvIHNlZSBhbGwgc3RhdGUgY2hhbmdlcywgYXMgdGhlIHN0YXRlXG4g
ICAqIG1pZ2h0IGhhdmUgYmVlbiB1cGRhdGVkIG11bHRpcGxlIHRpbWVzIGR1cmluZyBhIG5lc3Rl
ZCBgZGlzcGF0Y2goKWAgYmVmb3JlXG4gICAqIHRoZSBsaXN0ZW5lciBpcyBjYWxsZWQuIEl0IGlz
LCBob3dldmVyLCBndWFyYW50ZWVkIHRoYXQgYWxsIHN1YnNjcmliZXJzXG4gICAqIHJlZ2lzdGVy
ZWQgYmVmb3JlIHRoZSBgZGlzcGF0Y2goKWAgc3RhcnRlZCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRo
ZSBsYXRlc3RcbiAgICogc3RhdGUgYnkgdGhlIHRpbWUgaXQgZXhpdHMuXG4gICAqXG4gICAqIEBw
YXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIEEgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCBvbiBldmVy
eSBkaXNwYXRjaC5cbiAgICogQHJldHVybnMge0Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRvIHJlbW92
ZSB0aGlzIGNoYW5nZSBsaXN0ZW5lci5cbiAgICovXG4gIGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0
ZW5lcikge1xuICAgIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAg
IHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbi4nKTtc
biAgICB9XG5cbiAgICB2YXIgaXNTdWJzY3JpYmVkID0gdHJ1ZTtcblxuICAgIGVuc3VyZUNhbk11
dGF0ZU5leHRMaXN0ZW5lcnMoKTtcbiAgICBuZXh0TGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xu
XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHVuc3Vic2NyaWJlKCkge1xuICAgICAgaWYgKCFpc1N1YnNj
cmliZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpc1N1YnNjcmliZWQg
PSBmYWxzZTtcblxuICAgICAgZW5zdXJlQ2FuTXV0YXRlTmV4dExpc3RlbmVycygpO1xuICAgICAg
dmFyIGluZGV4ID0gbmV4dExpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICAgIG5leHRM
aXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERp
c3BhdGNoZXMgYW4gYWN0aW9uLiBJdCBpcyB0aGUgb25seSB3YXkgdG8gdHJpZ2dlciBhIHN0YXRl
IGNoYW5nZS5cbiAgICpcbiAgICogVGhlIGByZWR1Y2VyYCBmdW5jdGlvbiwgdXNlZCB0byBjcmVh
dGUgdGhlIHN0b3JlLCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZVxuICAgKiBjdXJyZW50IHN0YXRl
IHRyZWUgYW5kIHRoZSBnaXZlbiBgYWN0aW9uYC4gSXRzIHJldHVybiB2YWx1ZSB3aWxsXG4gICAq
IGJlIGNvbnNpZGVyZWQgdGhlICoqbmV4dCoqIHN0YXRlIG9mIHRoZSB0cmVlLCBhbmQgdGhlIGNo
YW5nZSBsaXN0ZW5lcnNcbiAgICogd2lsbCBiZSBub3RpZmllZC5cbiAgICpcbiAgICogVGhlIGJh
c2UgaW1wbGVtZW50YXRpb24gb25seSBzdXBwb3J0cyBwbGFpbiBvYmplY3QgYWN0aW9ucy4gSWYg
eW91IHdhbnQgdG9cbiAgICogZGlzcGF0Y2ggYSBQcm9taXNlLCBhbiBPYnNlcnZhYmxlLCBhIHRo
dW5rLCBvciBzb21ldGhpbmcgZWxzZSwgeW91IG5lZWQgdG9cbiAgICogd3JhcCB5b3VyIHN0b3Jl
IGNyZWF0aW5nIGZ1bmN0aW9uIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgbWlkZGxld2FyZS4gRm9y
XG4gICAqIGV4YW1wbGUsIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGByZWR1eC10aHVu
a2AgcGFja2FnZS4gRXZlbiB0aGVcbiAgICogbWlkZGxld2FyZSB3aWxsIGV2ZW50dWFsbHkgZGlz
cGF0Y2ggcGxhaW4gb2JqZWN0IGFjdGlvbnMgdXNpbmcgdGhpcyBtZXRob2QuXG4gICAqXG4gICAq
IEBwYXJhbSB7T2JqZWN0fSBhY3Rpb24gQSBwbGFpbiBvYmplY3QgcmVwcmVzZW50aW5nIOKAnHdo
YXQgY2hhbmdlZOKAnS4gSXQgaXNcbiAgICogYSBnb29kIGlkZWEgdG8ga2VlcCBhY3Rpb25zIHNl
cmlhbGl6YWJsZSBzbyB5b3UgY2FuIHJlY29yZCBhbmQgcmVwbGF5IHVzZXJcbiAgICogc2Vzc2lv
bnMsIG9yIHVzZSB0aGUgdGltZSB0cmF2ZWxsaW5nIGByZWR1eC1kZXZ0b29sc2AuIEFuIGFjdGlv
biBtdXN0IGhhdmVcbiAgICogYSBgdHlwZWAgcHJvcGVydHkgd2hpY2ggbWF5IG5vdCBiZSBgdW5k
ZWZpbmVkYC4gSXQgaXMgYSBnb29kIGlkZWEgdG8gdXNlXG4gICAqIHN0cmluZyBjb25zdGFudHMg
Zm9yIGFjdGlvbiB0eXBlcy5cbiAgICpcbiAgICogQHJldHVybnMge09iamVjdH0gRm9yIGNvbnZl
bmllbmNlLCB0aGUgc2FtZSBhY3Rpb24gb2JqZWN0IHlvdSBkaXNwYXRjaGVkLlxuICAgKlxuICAg
KiBOb3RlIHRoYXQsIGlmIHlvdSB1c2UgYSBjdXN0b20gbWlkZGxld2FyZSwgaXQgbWF5IHdyYXAg
YGRpc3BhdGNoKClgIHRvXG4gICAqIHJldHVybiBzb21ldGhpbmcgZWxzZSAoZm9yIGV4YW1wbGUs
IGEgUHJvbWlzZSB5b3UgY2FuIGF3YWl0KS5cbiAgICovXG4gIGZ1bmN0aW9uIGRpc3BhdGNoKGFj
dGlvbikge1xuICAgIGlmICghaXNQbGFpbk9iamVjdChhY3Rpb24pKSB7XG4gICAgICB0aHJvdyBu
ZXcgRXJyb3IoJ0FjdGlvbnMgbXVzdCBiZSBwbGFpbiBvYmplY3RzLiAnICsgJ1VzZSBjdXN0b20g
bWlkZGxld2FyZSBmb3IgYXN5bmMgYWN0aW9ucy4nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9m
IGFjdGlvbi50eXBlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdB
Y3Rpb25zIG1heSBub3QgaGF2ZSBhbiB1bmRlZmluZWQgXCJ0eXBlXCIgcHJvcGVydHkuICcgKyAn
SGF2ZSB5b3UgbWlzc3BlbGxlZCBhIGNvbnN0YW50PycpO1xuICAgIH1cblxuICAgIGlmIChpc0Rp
c3BhdGNoaW5nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZHVjZXJzIG1heSBub3QgZGlz
cGF0Y2ggYWN0aW9ucy4nKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgaXNEaXNwYXRjaGlu
ZyA9IHRydWU7XG4gICAgICBjdXJyZW50U3RhdGUgPSBjdXJyZW50UmVkdWNlcihjdXJyZW50U3Rh
dGUsIGFjdGlvbik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlzRGlzcGF0Y2hpbmcgPSBmYWxz
ZTtcbiAgICB9XG5cbiAgICB2YXIgbGlzdGVuZXJzID0gY3VycmVudExpc3RlbmVycyA9IG5leHRM
aXN0ZW5lcnM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpKysp
IHtcbiAgICAgIHZhciBsaXN0ZW5lciA9IGxpc3RlbmVyc1tpXTtcbiAgICAgIGxpc3RlbmVyKCk7
XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNl
cyB0aGUgcmVkdWNlciBjdXJyZW50bHkgdXNlZCBieSB0aGUgc3RvcmUgdG8gY2FsY3VsYXRlIHRo
ZSBzdGF0ZS5cbiAgICpcbiAgICogWW91IG1pZ2h0IG5lZWQgdGhpcyBpZiB5b3VyIGFwcCBpbXBs
ZW1lbnRzIGNvZGUgc3BsaXR0aW5nIGFuZCB5b3Ugd2FudCB0b1xuICAgKiBsb2FkIHNvbWUgb2Yg
dGhlIHJlZHVjZXJzIGR5bmFtaWNhbGx5LiBZb3UgbWlnaHQgYWxzbyBuZWVkIHRoaXMgaWYgeW91
XG4gICAqIGltcGxlbWVudCBhIGhvdCByZWxvYWRpbmcgbWVjaGFuaXNtIGZvciBSZWR1eC5cbiAg
ICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbmV4dFJlZHVjZXIgVGhlIHJlZHVjZXIgZm9yIHRo
ZSBzdG9yZSB0byB1c2UgaW5zdGVhZC5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBm
dW5jdGlvbiByZXBsYWNlUmVkdWNlcihuZXh0UmVkdWNlcikge1xuICAgIGlmICh0eXBlb2YgbmV4
dFJlZHVjZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0
ZWQgdGhlIG5leHRSZWR1Y2VyIHRvIGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgY3Vy
cmVudFJlZHVjZXIgPSBuZXh0UmVkdWNlcjtcbiAgICBkaXNwYXRjaCh7IHR5cGU6IEFjdGlvblR5
cGVzLklOSVQgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW50ZXJvcGVyYWJpbGl0eSBwb2ludCBm
b3Igb2JzZXJ2YWJsZS9yZWFjdGl2ZSBsaWJyYXJpZXMuXG4gICAqIEByZXR1cm5zIHtvYnNlcnZh
YmxlfSBBIG1pbmltYWwgb2JzZXJ2YWJsZSBvZiBzdGF0ZSBjaGFuZ2VzLlxuICAgKiBGb3IgbW9y
ZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSBvYnNlcnZhYmxlIHByb3Bvc2FsOlxuICAgKiBodHRwczov
L2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYnNlcnZhYmxlXG4gICAqL1xuICBmdW5jdGlvbiBv
YnNlcnZhYmxlKCkge1xuICAgIHZhciBfcmVmO1xuXG4gICAgdmFyIG91dGVyU3Vic2NyaWJlID0g
c3Vic2NyaWJlO1xuICAgIHJldHVybiBfcmVmID0ge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUg
bWluaW1hbCBvYnNlcnZhYmxlIHN1YnNjcmlwdGlvbiBtZXRob2QuXG4gICAgICAgKiBAcGFyYW0g
e09iamVjdH0gb2JzZXJ2ZXIgQW55IG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIGFzIGFuIG9ic2Vy
dmVyLlxuICAgICAgICogVGhlIG9ic2VydmVyIG9iamVjdCBzaG91bGQgaGF2ZSBhIGBuZXh0YCBt
ZXRob2QuXG4gICAgICAgKiBAcmV0dXJucyB7c3Vic2NyaXB0aW9ufSBBbiBvYmplY3Qgd2l0aCBh
biBgdW5zdWJzY3JpYmVgIG1ldGhvZCB0aGF0IGNhblxuICAgICAgICogYmUgdXNlZCB0byB1bnN1
YnNjcmliZSB0aGUgb2JzZXJ2YWJsZSBmcm9tIHRoZSBzdG9yZSwgYW5kIHByZXZlbnQgZnVydGhl
clxuICAgICAgICogZW1pc3Npb24gb2YgdmFsdWVzIGZyb20gdGhlIG9ic2VydmFibGUuXG4gICAg
ICAgKi9cbiAgICAgIHN1YnNjcmliZTogZnVuY3Rpb24gc3Vic2NyaWJlKG9ic2VydmVyKSB7XG4g
ICAgICAgIGlmICh0eXBlb2Ygb2JzZXJ2ZXIgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgdGhy
b3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgdGhlIG9ic2VydmVyIHRvIGJlIGFuIG9iamVjdC4n
KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIG9ic2VydmVTdGF0ZSgpIHtcbiAgICAg
ICAgICBpZiAob2JzZXJ2ZXIubmV4dCkge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChnZXRT
dGF0ZSgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBvYnNlcnZlU3RhdGUo
KTtcbiAgICAgICAgdmFyIHVuc3Vic2NyaWJlID0gb3V0ZXJTdWJzY3JpYmUob2JzZXJ2ZVN0YXRl
KTtcbiAgICAgICAgcmV0dXJuIHsgdW5zdWJzY3JpYmU6IHVuc3Vic2NyaWJlIH07XG4gICAgICB9
XG4gICAgfSwgX3JlZlskJG9ic2VydmFibGVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJu
IHRoaXM7XG4gICAgfSwgX3JlZjtcbiAgfVxuXG4gIC8vIFdoZW4gYSBzdG9yZSBpcyBjcmVhdGVk
LCBhbiBcIklOSVRcIiBhY3Rpb24gaXMgZGlzcGF0Y2hlZCBzbyB0aGF0IGV2ZXJ5XG4gIC8vIHJl
ZHVjZXIgcmV0dXJucyB0aGVpciBpbml0aWFsIHN0YXRlLiBUaGlzIGVmZmVjdGl2ZWx5IHBvcHVs
YXRlc1xuICAvLyB0aGUgaW5pdGlhbCBzdGF0ZSB0cmVlLlxuICBkaXNwYXRjaCh7IHR5cGU6IEFj
dGlvblR5cGVzLklOSVQgfSk7XG5cbiAgcmV0dXJuIF9yZWYyID0ge1xuICAgIGRpc3BhdGNoOiBk
aXNwYXRjaCxcbiAgICBzdWJzY3JpYmU6IHN1YnNjcmliZSxcbiAgICBnZXRTdGF0ZTogZ2V0U3Rh
dGUsXG4gICAgcmVwbGFjZVJlZHVjZXI6IHJlcGxhY2VSZWR1Y2VyXG4gIH0sIF9yZWYyWyQkb2Jz
ZXJ2YWJsZV0gPSBvYnNlcnZhYmxlLCBfcmVmMjtcbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9c
bi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9yZWR1eC9lcy9jcmVhdGVTdG9y
ZS5qc1xuLy8gbW9kdWxlIGlkID0gODRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0IHJv
b3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAq
L1xudmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xuXG5leHBvcnQgZGVmYXVsdCBTeW1ib2w7XG5c
blxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9k
dWxlcy9sb2Rhc2gtZXMvX1N5bWJvbC5qc1xuLy8gbW9kdWxlIGlkID0gODVcbi8vIG1vZHVsZSBj
aHVua3MgPSAwIiwiLyoqXG4gKiBDb21wb3NlcyBzaW5nbGUtYXJndW1lbnQgZnVuY3Rpb25zIGZy
b20gcmlnaHQgdG8gbGVmdC4gVGhlIHJpZ2h0bW9zdFxuICogZnVuY3Rpb24gY2FuIHRha2UgbXVs
dGlwbGUgYXJndW1lbnRzIGFzIGl0IHByb3ZpZGVzIHRoZSBzaWduYXR1cmUgZm9yXG4gKiB0aGUg
cmVzdWx0aW5nIGNvbXBvc2l0ZSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gey4uLkZ1bmN0aW9u
fSBmdW5jcyBUaGUgZnVuY3Rpb25zIHRvIGNvbXBvc2UuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259
IEEgZnVuY3Rpb24gb2J0YWluZWQgYnkgY29tcG9zaW5nIHRoZSBhcmd1bWVudCBmdW5jdGlvbnNc
biAqIGZyb20gcmlnaHQgdG8gbGVmdC4gRm9yIGV4YW1wbGUsIGNvbXBvc2UoZiwgZywgaCkgaXMg
aWRlbnRpY2FsIHRvIGRvaW5nXG4gKiAoLi4uYXJncykgPT4gZihnKGgoLi4uYXJncykpKS5cbiAq
L1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wb3NlKCkge1xuICBmb3IgKHZhciBfbGVu
ID0gYXJndW1lbnRzLmxlbmd0aCwgZnVuY3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkg
PCBfbGVuOyBfa2V5KyspIHtcbiAgICBmdW5jc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAg
fVxuXG4gIGlmIChmdW5jcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGFy
Zykge1xuICAgICAgcmV0dXJuIGFyZztcbiAgICB9O1xuICB9XG5cbiAgaWYgKGZ1bmNzLmxlbmd0
aCA9PT0gMSkge1xuICAgIHJldHVybiBmdW5jc1swXTtcbiAgfVxuXG4gIHJldHVybiBmdW5jcy5y
ZWR1Y2UoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAg
cmV0dXJuIGEoYi5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cykpO1xuICAgIH07XG4gIH0pO1xu
fVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9t
b2R1bGVzL3JlZHV4L2VzL2NvbXBvc2UuanNcbi8vIG1vZHVsZSBpZCA9IDg3XG4vLyBtb2R1bGUg
Y2h1bmtzID0gMCIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIElu
Yy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBs
aWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNF
TlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFk
ZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQ
QVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICovXG5cbmlmIChwcm9jZXNzLmVu
di5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSRUFDVF9FTEVNRU5UX1RZUEUg
PSAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIFN5bWJvbC5mb3IgJiZcbiAg
ICBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykpIHx8XG4gICAgMHhlYWM3O1xuXG4gIHZhciBp
c1ZhbGlkRWxlbWVudCA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiB0eXBlb2Ygb2Jq
ZWN0ID09PSAnb2JqZWN0JyAmJlxuICAgICAgb2JqZWN0ICE9PSBudWxsICYmXG4gICAgICBvYmpl
Y3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbiAgfTtcblxuICAvLyBCeSBleHBs
aWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBkZXZlbG9w
bWVudCBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICB2
YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWly
ZSgnLi9mYWN0b3J5V2l0aFR5cGVDaGVja2VycycpKGlzVmFsaWRFbGVtZW50LCB0aHJvd09uRGly
ZWN0QWNjZXNzKTtcbn0gZWxzZSB7XG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlw
ZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXG4gIC8vIGh0
dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJl
KCcuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcycpKCk7XG59XG5cblxuXG4vLy8vLy8vLy8vLy8v
Ly8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2lu
ZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSA4OVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJpbXBvcnQg
UHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5leHBvcnQgdmFyIHN1YnNjcmlwdGlvblNo
YXBlID0gUHJvcFR5cGVzLnNoYXBlKHtcbiAgdHJ5U3Vic2NyaWJlOiBQcm9wVHlwZXMuZnVuYy5p
c1JlcXVpcmVkLFxuICB0cnlVbnN1YnNjcmliZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxc
biAgbm90aWZ5TmVzdGVkU3ViczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgaXNTdWJz
Y3JpYmVkOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG59KTtcblxuZXhwb3J0IHZhciBzdG9y
ZVNoYXBlID0gUHJvcFR5cGVzLnNoYXBlKHtcbiAgc3Vic2NyaWJlOiBQcm9wVHlwZXMuZnVuYy5p
c1JlcXVpcmVkLFxuICBkaXNwYXRjaDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgZ2V0
U3RhdGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRcbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8v
Ly8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2Vz
L3V0aWxzL1Byb3BUeXBlcy5qc1xuLy8gbW9kdWxlIGlkID0gOTBcbi8vIG1vZHVsZSBjaHVua3Mg
PSAwIiwidmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7
IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2Ug
PSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90
b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBz
b3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuZnVuY3Rpb24gX2NsYXNzQ2Fs
bENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9m
IENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFz
cyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JS
ZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9y
KFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2Fs
bGVkXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0
eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9u
IF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3Mg
IT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBl
RXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlv
biwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9i
amVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1
Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1
ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJv
dG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDog
c3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0
aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBp
biBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3Qu
cHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtp
XSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBob2lzdFN0YXRpY3MgZnJv
bSAnaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MnO1xuaW1wb3J0IGludmFyaWFudCBmcm9tICdpbnZh
cmlhbnQnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBjcmVhdGVFbGVtZW50IH0gZnJvbSAncmVhY3Qn
O1xuXG5pbXBvcnQgU3Vic2NyaXB0aW9uIGZyb20gJy4uL3V0aWxzL1N1YnNjcmlwdGlvbic7XG5p
bXBvcnQgeyBzdG9yZVNoYXBlLCBzdWJzY3JpcHRpb25TaGFwZSB9IGZyb20gJy4uL3V0aWxzL1By
b3BUeXBlcyc7XG5cbnZhciBob3RSZWxvYWRpbmdWZXJzaW9uID0gMDtcbnZhciBkdW1teVN0YXRl
ID0ge307XG5mdW5jdGlvbiBub29wKCkge31cbmZ1bmN0aW9uIG1ha2VTZWxlY3RvclN0YXRlZnVs
KHNvdXJjZVNlbGVjdG9yLCBzdG9yZSkge1xuICAvLyB3cmFwIHRoZSBzZWxlY3RvciBpbiBhbiBv
YmplY3QgdGhhdCB0cmFja3MgaXRzIHJlc3VsdHMgYmV0d2VlbiBydW5zLlxuICB2YXIgc2VsZWN0
b3IgPSB7XG4gICAgcnVuOiBmdW5jdGlvbiBydW5Db21wb25lbnRTZWxlY3Rvcihwcm9wcykge1xu
ICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG5leHRQcm9wcyA9IHNvdXJjZVNlbGVjdG9yKHN0b3Jl
LmdldFN0YXRlKCksIHByb3BzKTtcbiAgICAgICAgaWYgKG5leHRQcm9wcyAhPT0gc2VsZWN0b3Iu
cHJvcHMgfHwgc2VsZWN0b3IuZXJyb3IpIHtcbiAgICAgICAgICBzZWxlY3Rvci5zaG91bGRDb21w
b25lbnRVcGRhdGUgPSB0cnVlO1xuICAgICAgICAgIHNlbGVjdG9yLnByb3BzID0gbmV4dFByb3Bz
O1xuICAgICAgICAgIHNlbGVjdG9yLmVycm9yID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSBj
YXRjaCAoZXJyb3IpIHtcbiAgICAgICAgc2VsZWN0b3Iuc2hvdWxkQ29tcG9uZW50VXBkYXRlID0g
dHJ1ZTtcbiAgICAgICAgc2VsZWN0b3IuZXJyb3IgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4g
IH07XG5cbiAgcmV0dXJuIHNlbGVjdG9yO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBj
b25uZWN0QWR2YW5jZWQoXG4vKlxuICBzZWxlY3RvckZhY3RvcnkgaXMgYSBmdW5jIHRoYXQgaXMg
cmVzcG9uc2libGUgZm9yIHJldHVybmluZyB0aGUgc2VsZWN0b3IgZnVuY3Rpb24gdXNlZCB0b1xu
ICBjb21wdXRlIG5ldyBwcm9wcyBmcm9tIHN0YXRlLCBwcm9wcywgYW5kIGRpc3BhdGNoLiBGb3Ig
ZXhhbXBsZTpcbiAgICAgZXhwb3J0IGRlZmF1bHQgY29ubmVjdEFkdmFuY2VkKChkaXNwYXRjaCwg
b3B0aW9ucykgPT4gKHN0YXRlLCBwcm9wcykgPT4gKHtcbiAgICAgIHRoaW5nOiBzdGF0ZS50aGlu
Z3NbcHJvcHMudGhpbmdJZF0sXG4gICAgICBzYXZlVGhpbmc6IGZpZWxkcyA9PiBkaXNwYXRjaChh
Y3Rpb25DcmVhdG9ycy5zYXZlVGhpbmcocHJvcHMudGhpbmdJZCwgZmllbGRzKSksXG4gICAgfSkp
KFlvdXJDb21wb25lbnQpXG4gICBBY2Nlc3MgdG8gZGlzcGF0Y2ggaXMgcHJvdmlkZWQgdG8gdGhl
IGZhY3Rvcnkgc28gc2VsZWN0b3JGYWN0b3JpZXMgY2FuIGJpbmQgYWN0aW9uQ3JlYXRvcnNcbiAg
b3V0c2lkZSBvZiB0aGVpciBzZWxlY3RvciBhcyBhbiBvcHRpbWl6YXRpb24uIE9wdGlvbnMgcGFz
c2VkIHRvIGNvbm5lY3RBZHZhbmNlZCBhcmUgcGFzc2VkIHRvXG4gIHRoZSBzZWxlY3RvckZhY3Rv
cnksIGFsb25nIHdpdGggZGlzcGxheU5hbWUgYW5kIFdyYXBwZWRDb21wb25lbnQsIGFzIHRoZSBz
ZWNvbmQgYXJndW1lbnQuXG4gICBOb3RlIHRoYXQgc2VsZWN0b3JGYWN0b3J5IGlzIHJlc3BvbnNp
YmxlIGZvciBhbGwgY2FjaGluZy9tZW1vaXphdGlvbiBvZiBpbmJvdW5kIGFuZCBvdXRib3VuZFxu
ICBwcm9wcy4gRG8gbm90IHVzZSBjb25uZWN0QWR2YW5jZWQgZGlyZWN0bHkgd2l0aG91dCBtZW1v
aXppbmcgcmVzdWx0cyBiZXR3ZWVuIGNhbGxzIHRvIHlvdXJcbiAgc2VsZWN0b3IsIG90aGVyd2lz
ZSB0aGUgQ29ubmVjdCBjb21wb25lbnQgd2lsbCByZS1yZW5kZXIgb24gZXZlcnkgc3RhdGUgb3Ig
cHJvcHMgY2hhbmdlLlxuKi9cbnNlbGVjdG9yRmFjdG9yeSkge1xuICB2YXIgX2NvbnRleHRUeXBl
cywgX2NoaWxkQ29udGV4dFR5cGVzO1xuXG4gIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+
IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAg
ICAgIF9yZWYkZ2V0RGlzcGxheU5hbWUgPSBfcmVmLmdldERpc3BsYXlOYW1lLFxuICAgICAgZ2V0
RGlzcGxheU5hbWUgPSBfcmVmJGdldERpc3BsYXlOYW1lID09PSB1bmRlZmluZWQgPyBmdW5jdGlv
biAobmFtZSkge1xuICAgIHJldHVybiAnQ29ubmVjdEFkdmFuY2VkKCcgKyBuYW1lICsgJyknO1xu
ICB9IDogX3JlZiRnZXREaXNwbGF5TmFtZSxcbiAgICAgIF9yZWYkbWV0aG9kTmFtZSA9IF9yZWYu
bWV0aG9kTmFtZSxcbiAgICAgIG1ldGhvZE5hbWUgPSBfcmVmJG1ldGhvZE5hbWUgPT09IHVuZGVm
aW5lZCA/ICdjb25uZWN0QWR2YW5jZWQnIDogX3JlZiRtZXRob2ROYW1lLFxuICAgICAgX3JlZiRy
ZW5kZXJDb3VudFByb3AgPSBfcmVmLnJlbmRlckNvdW50UHJvcCxcbiAgICAgIHJlbmRlckNvdW50
UHJvcCA9IF9yZWYkcmVuZGVyQ291bnRQcm9wID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBf
cmVmJHJlbmRlckNvdW50UHJvcCxcbiAgICAgIF9yZWYkc2hvdWxkSGFuZGxlU3RhdCA9IF9yZWYu
c2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzLFxuICAgICAgc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2Vz
ID0gX3JlZiRzaG91bGRIYW5kbGVTdGF0ID09PSB1bmRlZmluZWQgPyB0cnVlIDogX3JlZiRzaG91
bGRIYW5kbGVTdGF0LFxuICAgICAgX3JlZiRzdG9yZUtleSA9IF9yZWYuc3RvcmVLZXksXG4gICAg
ICBzdG9yZUtleSA9IF9yZWYkc3RvcmVLZXkgPT09IHVuZGVmaW5lZCA/ICdzdG9yZScgOiBfcmVm
JHN0b3JlS2V5LFxuICAgICAgX3JlZiR3aXRoUmVmID0gX3JlZi53aXRoUmVmLFxuICAgICAgd2l0
aFJlZiA9IF9yZWYkd2l0aFJlZiA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBfcmVmJHdpdGhSZWYs
XG4gICAgICBjb25uZWN0T3B0aW9ucyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBb
J2dldERpc3BsYXlOYW1lJywgJ21ldGhvZE5hbWUnLCAncmVuZGVyQ291bnRQcm9wJywgJ3Nob3Vs
ZEhhbmRsZVN0YXRlQ2hhbmdlcycsICdzdG9yZUtleScsICd3aXRoUmVmJ10pO1xuXG4gIHZhciBz
dWJzY3JpcHRpb25LZXkgPSBzdG9yZUtleSArICdTdWJzY3JpcHRpb24nO1xuICB2YXIgdmVyc2lv
biA9IGhvdFJlbG9hZGluZ1ZlcnNpb24rKztcblxuICB2YXIgY29udGV4dFR5cGVzID0gKF9jb250
ZXh0VHlwZXMgPSB7fSwgX2NvbnRleHRUeXBlc1tzdG9yZUtleV0gPSBzdG9yZVNoYXBlLCBfY29u
dGV4dFR5cGVzW3N1YnNjcmlwdGlvbktleV0gPSBzdWJzY3JpcHRpb25TaGFwZSwgX2NvbnRleHRU
eXBlcyk7XG4gIHZhciBjaGlsZENvbnRleHRUeXBlcyA9IChfY2hpbGRDb250ZXh0VHlwZXMgPSB7
fSwgX2NoaWxkQ29udGV4dFR5cGVzW3N1YnNjcmlwdGlvbktleV0gPSBzdWJzY3JpcHRpb25TaGFw
ZSwgX2NoaWxkQ29udGV4dFR5cGVzKTtcblxuICByZXR1cm4gZnVuY3Rpb24gd3JhcFdpdGhDb25u
ZWN0KFdyYXBwZWRDb21wb25lbnQpIHtcbiAgICBpbnZhcmlhbnQodHlwZW9mIFdyYXBwZWRDb21w
b25lbnQgPT0gJ2Z1bmN0aW9uJywgJ1lvdSBtdXN0IHBhc3MgYSBjb21wb25lbnQgdG8gdGhlIGZ1
bmN0aW9uIHJldHVybmVkIGJ5ICcgKyAoJ2Nvbm5lY3QuIEluc3RlYWQgcmVjZWl2ZWQgJyArIEpT
T04uc3RyaW5naWZ5KFdyYXBwZWRDb21wb25lbnQpKSk7XG5cbiAgICB2YXIgd3JhcHBlZENvbXBv
bmVudE5hbWUgPSBXcmFwcGVkQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IFdyYXBwZWRDb21wb25l
bnQubmFtZSB8fCAnQ29tcG9uZW50JztcblxuICAgIHZhciBkaXNwbGF5TmFtZSA9IGdldERpc3Bs
YXlOYW1lKHdyYXBwZWRDb21wb25lbnROYW1lKTtcblxuICAgIHZhciBzZWxlY3RvckZhY3RvcnlP
cHRpb25zID0gX2V4dGVuZHMoe30sIGNvbm5lY3RPcHRpb25zLCB7XG4gICAgICBnZXREaXNwbGF5
TmFtZTogZ2V0RGlzcGxheU5hbWUsXG4gICAgICBtZXRob2ROYW1lOiBtZXRob2ROYW1lLFxuICAg
ICAgcmVuZGVyQ291bnRQcm9wOiByZW5kZXJDb3VudFByb3AsXG4gICAgICBzaG91bGRIYW5kbGVT
dGF0ZUNoYW5nZXM6IHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcyxcbiAgICAgIHN0b3JlS2V5OiBz
dG9yZUtleSxcbiAgICAgIHdpdGhSZWY6IHdpdGhSZWYsXG4gICAgICBkaXNwbGF5TmFtZTogZGlz
cGxheU5hbWUsXG4gICAgICB3cmFwcGVkQ29tcG9uZW50TmFtZTogd3JhcHBlZENvbXBvbmVudE5h
bWUsXG4gICAgICBXcmFwcGVkQ29tcG9uZW50OiBXcmFwcGVkQ29tcG9uZW50XG4gICAgfSk7XG5c
biAgICB2YXIgQ29ubmVjdCA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gICAgICBfaW5oZXJp
dHMoQ29ubmVjdCwgX0NvbXBvbmVudCk7XG5cbiAgICAgIGZ1bmN0aW9uIENvbm5lY3QocHJvcHMs
IGNvbnRleHQpIHtcbiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENvbm5lY3QpO1xuXG4g
ICAgICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9Db21w
b25lbnQuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkpO1xuXG4gICAgICAgIF90aGlzLnZlcnNp
b24gPSB2ZXJzaW9uO1xuICAgICAgICBfdGhpcy5zdGF0ZSA9IHt9O1xuICAgICAgICBfdGhpcy5y
ZW5kZXJDb3VudCA9IDA7XG4gICAgICAgIF90aGlzLnN0b3JlID0gcHJvcHNbc3RvcmVLZXldIHx8
IGNvbnRleHRbc3RvcmVLZXldO1xuICAgICAgICBfdGhpcy5wcm9wc01vZGUgPSBCb29sZWFuKHBy
b3BzW3N0b3JlS2V5XSk7XG4gICAgICAgIF90aGlzLnNldFdyYXBwZWRJbnN0YW5jZSA9IF90aGlz
LnNldFdyYXBwZWRJbnN0YW5jZS5iaW5kKF90aGlzKTtcblxuICAgICAgICBpbnZhcmlhbnQoX3Ro
aXMuc3RvcmUsICdDb3VsZCBub3QgZmluZCBcIicgKyBzdG9yZUtleSArICdcIiBpbiBlaXRoZXIg
dGhlIGNvbnRleHQgb3IgcHJvcHMgb2YgJyArICgnXCInICsgZGlzcGxheU5hbWUgKyAnXCIuIEVp
dGhlciB3cmFwIHRoZSByb290IGNvbXBvbmVudCBpbiBhIDxQcm92aWRlcj4sICcpICsgKCdvciBl
eHBsaWNpdGx5IHBhc3MgXCInICsgc3RvcmVLZXkgKyAnXCIgYXMgYSBwcm9wIHRvIFwiJyArIGRp
c3BsYXlOYW1lICsgJ1wiLicpKTtcblxuICAgICAgICBfdGhpcy5pbml0U2VsZWN0b3IoKTtcbiAg
ICAgICAgX3RoaXMuaW5pdFN1YnNjcmlwdGlvbigpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4g
ICAgICB9XG5cbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmdldENoaWxkQ29udGV4dCA9IGZ1bmN0
aW9uIGdldENoaWxkQ29udGV4dCgpIHtcbiAgICAgICAgdmFyIF9yZWYyO1xuXG4gICAgICAgIC8v
IElmIHRoaXMgY29tcG9uZW50IHJlY2VpdmVkIHN0b3JlIGZyb20gcHJvcHMsIGl0cyBzdWJzY3Jp
cHRpb24gc2hvdWxkIGJlIHRyYW5zcGFyZW50XG4gICAgICAgIC8vIHRvIGFueSBkZXNjZW5kYW50
cyByZWNlaXZpbmcgc3RvcmUrc3Vic2NyaXB0aW9uIGZyb20gY29udGV4dDsgaXQgcGFzc2VzIGFs
b25nXG4gICAgICAgIC8vIHN1YnNjcmlwdGlvbiBwYXNzZWQgdG8gaXQuIE90aGVyd2lzZSwgaXQg
c2hhZG93cyB0aGUgcGFyZW50IHN1YnNjcmlwdGlvbiwgd2hpY2ggYWxsb3dzXG4gICAgICAgIC8v
IENvbm5lY3QgdG8gY29udHJvbCBvcmRlcmluZyBvZiBub3RpZmljYXRpb25zIHRvIGZsb3cgdG9w
LWRvd24uXG4gICAgICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGlzLnByb3BzTW9kZSA/IG51bGwg
OiB0aGlzLnN1YnNjcmlwdGlvbjtcbiAgICAgICAgcmV0dXJuIF9yZWYyID0ge30sIF9yZWYyW3N1
YnNjcmlwdGlvbktleV0gPSBzdWJzY3JpcHRpb24gfHwgdGhpcy5jb250ZXh0W3N1YnNjcmlwdGlv
bktleV0sIF9yZWYyO1xuICAgICAgfTtcblxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuY29tcG9u
ZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgICAgaWYg
KCFzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXMpIHJldHVybjtcblxuICAgICAgICAvLyBjb21wb25l
bnRXaWxsTW91bnQgZmlyZXMgZHVyaW5nIHNlcnZlciBzaWRlIHJlbmRlcmluZywgYnV0IGNvbXBv
bmVudERpZE1vdW50IGFuZFxuICAgICAgICAvLyBjb21wb25lbnRXaWxsVW5tb3VudCBkbyBub3Qu
IEJlY2F1c2Ugb2YgdGhpcywgdHJ5U3Vic2NyaWJlIGhhcHBlbnMgZHVyaW5nIC4uLmRpZE1vdW50
LlxuICAgICAgICAvLyBPdGhlcndpc2UsIHVuc3Vic2NyaXB0aW9uIHdvdWxkIG5ldmVyIHRha2Ug
cGxhY2UgZHVyaW5nIFNTUiwgY2F1c2luZyBhIG1lbW9yeSBsZWFrLlxuICAgICAgICAvLyBUbyBo
YW5kbGUgdGhlIGNhc2Ugd2hlcmUgYSBjaGlsZCBjb21wb25lbnQgbWF5IGhhdmUgdHJpZ2dlcmVk
IGEgc3RhdGUgY2hhbmdlIGJ5XG4gICAgICAgIC8vIGRpc3BhdGNoaW5nIGFuIGFjdGlvbiBpbiBp
dHMgY29tcG9uZW50V2lsbE1vdW50LCB3ZSBoYXZlIHRvIHJlLXJ1biB0aGUgc2VsZWN0IGFuZCBt
YXliZVxuICAgICAgICAvLyByZS1yZW5kZXIuXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnRy
eVN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnNlbGVjdG9yLnJ1bih0aGlzLnByb3BzKTtcbiAg
ICAgICAgaWYgKHRoaXMuc2VsZWN0b3Iuc2hvdWxkQ29tcG9uZW50VXBkYXRlKSB0aGlzLmZvcmNl
VXBkYXRlKCk7XG4gICAgICB9O1xuXG4gICAgICBDb25uZWN0LnByb3RvdHlwZS5jb21wb25lbnRX
aWxsUmVjZWl2ZVByb3BzID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0
UHJvcHMpIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rvci5ydW4obmV4dFByb3BzKTtcbiAgICAgIH07
XG5cbiAgICAgIENvbm5lY3QucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZ1bmN0
aW9uIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0
b3Iuc2hvdWxkQ29tcG9uZW50VXBkYXRlO1xuICAgICAgfTtcblxuICAgICAgQ29ubmVjdC5wcm90
b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3Vu
dCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB0aGlzLnN1YnNjcmlwdGlvbi50
cnlVbnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAg
ICAgIHRoaXMubm90aWZ5TmVzdGVkU3VicyA9IG5vb3A7XG4gICAgICAgIHRoaXMuc3RvcmUgPSBu
dWxsO1xuICAgICAgICB0aGlzLnNlbGVjdG9yLnJ1biA9IG5vb3A7XG4gICAgICAgIHRoaXMuc2Vs
ZWN0b3Iuc2hvdWxkQ29tcG9uZW50VXBkYXRlID0gZmFsc2U7XG4gICAgICB9O1xuXG4gICAgICBD
b25uZWN0LnByb3RvdHlwZS5nZXRXcmFwcGVkSW5zdGFuY2UgPSBmdW5jdGlvbiBnZXRXcmFwcGVk
SW5zdGFuY2UoKSB7XG4gICAgICAgIGludmFyaWFudCh3aXRoUmVmLCAnVG8gYWNjZXNzIHRoZSB3
cmFwcGVkIGluc3RhbmNlLCB5b3UgbmVlZCB0byBzcGVjaWZ5ICcgKyAoJ3sgd2l0aFJlZjogdHJ1
ZSB9IGluIHRoZSBvcHRpb25zIGFyZ3VtZW50IG9mIHRoZSAnICsgbWV0aG9kTmFtZSArICcoKSBj
YWxsLicpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMud3JhcHBlZEluc3RhbmNlO1xuICAgICAgfTtc
blxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuc2V0V3JhcHBlZEluc3RhbmNlID0gZnVuY3Rpb24g
c2V0V3JhcHBlZEluc3RhbmNlKHJlZikge1xuICAgICAgICB0aGlzLndyYXBwZWRJbnN0YW5jZSA9
IHJlZjtcbiAgICAgIH07XG5cbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmluaXRTZWxlY3RvciA9
IGZ1bmN0aW9uIGluaXRTZWxlY3RvcigpIHtcbiAgICAgICAgdmFyIHNvdXJjZVNlbGVjdG9yID0g
c2VsZWN0b3JGYWN0b3J5KHRoaXMuc3RvcmUuZGlzcGF0Y2gsIHNlbGVjdG9yRmFjdG9yeU9wdGlv
bnMpO1xuICAgICAgICB0aGlzLnNlbGVjdG9yID0gbWFrZVNlbGVjdG9yU3RhdGVmdWwoc291cmNl
U2VsZWN0b3IsIHRoaXMuc3RvcmUpO1xuICAgICAgICB0aGlzLnNlbGVjdG9yLnJ1bih0aGlzLnBy
b3BzKTtcbiAgICAgIH07XG5cbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmluaXRTdWJzY3JpcHRp
b24gPSBmdW5jdGlvbiBpbml0U3Vic2NyaXB0aW9uKCkge1xuICAgICAgICBpZiAoIXNob3VsZEhh
bmRsZVN0YXRlQ2hhbmdlcykgcmV0dXJuO1xuXG4gICAgICAgIC8vIHBhcmVudFN1YidzIHNvdXJj
ZSBzaG91bGQgbWF0Y2ggd2hlcmUgc3RvcmUgY2FtZSBmcm9tOiBwcm9wcyB2cy4gY29udGV4dC4g
QSBjb21wb25lbnRcbiAgICAgICAgLy8gY29ubmVjdGVkIHRvIHRoZSBzdG9yZSB2aWEgcHJvcHMg
c2hvdWxkbid0IHVzZSBzdWJzY3JpcHRpb24gZnJvbSBjb250ZXh0LCBvciB2aWNlIHZlcnNhLlxu
ICAgICAgICB2YXIgcGFyZW50U3ViID0gKHRoaXMucHJvcHNNb2RlID8gdGhpcy5wcm9wcyA6IHRo
aXMuY29udGV4dClbc3Vic2NyaXB0aW9uS2V5XTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24g
PSBuZXcgU3Vic2NyaXB0aW9uKHRoaXMuc3RvcmUsIHBhcmVudFN1YiwgdGhpcy5vblN0YXRlQ2hh
bmdlLmJpbmQodGhpcykpO1xuXG4gICAgICAgIC8vIGBub3RpZnlOZXN0ZWRTdWJzYCBpcyBkdXBs
aWNhdGVkIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgY29tcG9uZW50IGlzICB1bm1vdW50
ZWQgaW5cbiAgICAgICAgLy8gdGhlIG1pZGRsZSBvZiB0aGUgbm90aWZpY2F0aW9uIGxvb3AsIHdo
ZXJlIGB0aGlzLnN1YnNjcmlwdGlvbmAgd2lsbCB0aGVuIGJlIG51bGwuIEFuXG4gICAgICAgIC8v
IGV4dHJhIG51bGwgY2hlY2sgZXZlcnkgY2hhbmdlIGNhbiBiZSBhdm9pZGVkIGJ5IGNvcHlpbmcg
dGhlIG1ldGhvZCBvbnRvIGB0aGlzYCBhbmQgdGhlblxuICAgICAgICAvLyByZXBsYWNpbmcgaXQg
d2l0aCBhIG5vLW9wIG9uIHVubW91bnQuIFRoaXMgY2FuIHByb2JhYmx5IGJlIGF2b2lkZWQgaWYg
U3Vic2NyaXB0aW9uJ3NcbiAgICAgICAgLy8gbGlzdGVuZXJzIGxvZ2ljIGlzIGNoYW5nZWQgdG8g
bm90IGNhbGwgbGlzdGVuZXJzIHRoYXQgaGF2ZSBiZWVuIHVuc3Vic2NyaWJlZCBpbiB0aGVcbiAg
ICAgICAgLy8gbWlkZGxlIG9mIHRoZSBub3RpZmljYXRpb24gbG9vcC5cbiAgICAgICAgdGhpcy5u
b3RpZnlOZXN0ZWRTdWJzID0gdGhpcy5zdWJzY3JpcHRpb24ubm90aWZ5TmVzdGVkU3Vicy5iaW5k
KHRoaXMuc3Vic2NyaXB0aW9uKTtcbiAgICAgIH07XG5cbiAgICAgIENvbm5lY3QucHJvdG90eXBl
Lm9uU3RhdGVDaGFuZ2UgPSBmdW5jdGlvbiBvblN0YXRlQ2hhbmdlKCkge1xuICAgICAgICB0aGlz
LnNlbGVjdG9yLnJ1bih0aGlzLnByb3BzKTtcblxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0b3Iu
c2hvdWxkQ29tcG9uZW50VXBkYXRlKSB7XG4gICAgICAgICAgdGhpcy5ub3RpZnlOZXN0ZWRTdWJz
KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jb21wb25lbnREaWRVcGRhdGUg
PSB0aGlzLm5vdGlmeU5lc3RlZFN1YnNPbkNvbXBvbmVudERpZFVwZGF0ZTtcbiAgICAgICAgICB0
aGlzLnNldFN0YXRlKGR1bW15U3RhdGUpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBD
b25uZWN0LnByb3RvdHlwZS5ub3RpZnlOZXN0ZWRTdWJzT25Db21wb25lbnREaWRVcGRhdGUgPSBm
dW5jdGlvbiBub3RpZnlOZXN0ZWRTdWJzT25Db21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICAg
IC8vIGBjb21wb25lbnREaWRVcGRhdGVgIGlzIGNvbmRpdGlvbmFsbHkgaW1wbGVtZW50ZWQgd2hl
biBgb25TdGF0ZUNoYW5nZWAgZGV0ZXJtaW5lcyBpdFxuICAgICAgICAvLyBuZWVkcyB0byBub3Rp
ZnkgbmVzdGVkIHN1YnMuIE9uY2UgY2FsbGVkLCBpdCB1bmltcGxlbWVudHMgaXRzZWxmIHVudGls
IGZ1cnRoZXIgc3RhdGVcbiAgICAgICAgLy8gY2hhbmdlcyBvY2N1ci4gRG9pbmcgaXQgdGhpcyB3
YXkgdnMgaGF2aW5nIGEgcGVybWFuZW50IGBjb21wb25lbnREaWRVcGRhdGVgIHRoYXQgZG9lc1xu
ICAgICAgICAvLyBhIGJvb2xlYW4gY2hlY2sgZXZlcnkgdGltZSBhdm9pZHMgYW4gZXh0cmEgbWV0
aG9kIGNhbGwgbW9zdCBvZiB0aGUgdGltZSwgcmVzdWx0aW5nXG4gICAgICAgIC8vIGluIHNvbWUg
cGVyZiBib29zdC5cbiAgICAgICAgdGhpcy5jb21wb25lbnREaWRVcGRhdGUgPSB1bmRlZmluZWQ7
XG4gICAgICAgIHRoaXMubm90aWZ5TmVzdGVkU3VicygpO1xuICAgICAgfTtcblxuICAgICAgQ29u
bmVjdC5wcm90b3R5cGUuaXNTdWJzY3JpYmVkID0gZnVuY3Rpb24gaXNTdWJzY3JpYmVkKCkge1xu
ICAgICAgICByZXR1cm4gQm9vbGVhbih0aGlzLnN1YnNjcmlwdGlvbikgJiYgdGhpcy5zdWJzY3Jp
cHRpb24uaXNTdWJzY3JpYmVkKCk7XG4gICAgICB9O1xuXG4gICAgICBDb25uZWN0LnByb3RvdHlw
ZS5hZGRFeHRyYVByb3BzID0gZnVuY3Rpb24gYWRkRXh0cmFQcm9wcyhwcm9wcykge1xuICAgICAg
ICBpZiAoIXdpdGhSZWYgJiYgIXJlbmRlckNvdW50UHJvcCAmJiAhKHRoaXMucHJvcHNNb2RlICYm
IHRoaXMuc3Vic2NyaXB0aW9uKSkgcmV0dXJuIHByb3BzO1xuICAgICAgICAvLyBtYWtlIGEgc2hh
bGxvdyBjb3B5IHNvIHRoYXQgZmllbGRzIGFkZGVkIGRvbid0IGxlYWsgdG8gdGhlIG9yaWdpbmFs
IHNlbGVjdG9yLlxuICAgICAgICAvLyB0aGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IGZvciAn
cmVmJyBzaW5jZSB0aGF0J3MgYSByZWZlcmVuY2UgYmFjayB0byB0aGUgY29tcG9uZW50XG4gICAg
ICAgIC8vIGluc3RhbmNlLiBhIHNpbmdsZXRvbiBtZW1vaXplZCBzZWxlY3RvciB3b3VsZCB0aGVu
IGJlIGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gdGhlXG4gICAgICAgIC8vIGluc3RhbmNlLCBwcmV2
ZW50aW5nIHRoZSBpbnN0YW5jZSBmcm9tIGJlaW5nIGdhcmJhZ2UgY29sbGVjdGVkLCBhbmQgdGhh
dCB3b3VsZCBiZSBiYWRcbiAgICAgICAgdmFyIHdpdGhFeHRyYXMgPSBfZXh0ZW5kcyh7fSwgcHJv
cHMpO1xuICAgICAgICBpZiAod2l0aFJlZikgd2l0aEV4dHJhcy5yZWYgPSB0aGlzLnNldFdyYXBw
ZWRJbnN0YW5jZTtcbiAgICAgICAgaWYgKHJlbmRlckNvdW50UHJvcCkgd2l0aEV4dHJhc1tyZW5k
ZXJDb3VudFByb3BdID0gdGhpcy5yZW5kZXJDb3VudCsrO1xuICAgICAgICBpZiAodGhpcy5wcm9w
c01vZGUgJiYgdGhpcy5zdWJzY3JpcHRpb24pIHdpdGhFeHRyYXNbc3Vic2NyaXB0aW9uS2V5XSA9
IHRoaXMuc3Vic2NyaXB0aW9uO1xuICAgICAgICByZXR1cm4gd2l0aEV4dHJhcztcbiAgICAgIH07
XG5cbiAgICAgIENvbm5lY3QucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtc
biAgICAgICAgdmFyIHNlbGVjdG9yID0gdGhpcy5zZWxlY3RvcjtcbiAgICAgICAgc2VsZWN0b3Iu
c2hvdWxkQ29tcG9uZW50VXBkYXRlID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHNlbGVjdG9yLmVy
cm9yKSB7XG4gICAgICAgICAgdGhyb3cgc2VsZWN0b3IuZXJyb3I7XG4gICAgICAgIH0gZWxzZSB7
XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoV3JhcHBlZENvbXBvbmVudCwgdGhpcy5h
ZGRFeHRyYVByb3BzKHNlbGVjdG9yLnByb3BzKSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAg
ICAgIHJldHVybiBDb25uZWN0O1xuICAgIH0oQ29tcG9uZW50KTtcblxuICAgIENvbm5lY3QuV3Jh
cHBlZENvbXBvbmVudCA9IFdyYXBwZWRDb21wb25lbnQ7XG4gICAgQ29ubmVjdC5kaXNwbGF5TmFt
ZSA9IGRpc3BsYXlOYW1lO1xuICAgIENvbm5lY3QuY2hpbGRDb250ZXh0VHlwZXMgPSBjaGlsZENv
bnRleHRUeXBlcztcbiAgICBDb25uZWN0LmNvbnRleHRUeXBlcyA9IGNvbnRleHRUeXBlcztcbiAg
ICBDb25uZWN0LnByb3BUeXBlcyA9IGNvbnRleHRUeXBlcztcblxuICAgIGlmIChwcm9jZXNzLmVu
di5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBDb25uZWN0LnByb3RvdHlwZS5j
b21wb25lbnRXaWxsVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVwZGF0ZSgpIHtcbiAg
ICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgICAgLy8gV2UgYXJlIGhvdCByZWxvYWRp
bmchXG4gICAgICAgIGlmICh0aGlzLnZlcnNpb24gIT09IHZlcnNpb24pIHtcbiAgICAgICAgICB0
aGlzLnZlcnNpb24gPSB2ZXJzaW9uO1xuICAgICAgICAgIHRoaXMuaW5pdFNlbGVjdG9yKCk7XG5c
biAgICAgICAgICAvLyBJZiBhbnkgY29ubmVjdGVkIGRlc2NlbmRhbnRzIGRvbid0IGhvdCByZWxv
YWQgKGFuZCByZXN1YnNjcmliZSBpbiB0aGUgcHJvY2VzcyksIHRoZWlyXG4gICAgICAgICAgLy8g
bGlzdGVuZXJzIHdpbGwgYmUgbG9zdCB3aGVuIHdlIHVuc3Vic2NyaWJlLiBVbmZvcnR1bmF0ZWx5
LCBieSBjb3B5aW5nIG92ZXIgYWxsXG4gICAgICAgICAgLy8gbGlzdGVuZXJzLCB0aGlzIGRvZXMg
bWVhbiB0aGF0IHRoZSBvbGQgdmVyc2lvbnMgb2YgY29ubmVjdGVkIGRlc2NlbmRhbnRzIHdpbGwg
c3RpbGwgYmVcbiAgICAgICAgICAvLyBub3RpZmllZCBvZiBzdGF0ZSBjaGFuZ2VzOyBob3dldmVy
LCB0aGVpciBvblN0YXRlQ2hhbmdlIGZ1bmN0aW9uIGlzIGEgbm8tb3Agc28gdGhpc1xuICAgICAg
ICAgIC8vIGlzbid0IGEgaHVnZSBkZWFsLlxuICAgICAgICAgIHZhciBvbGRMaXN0ZW5lcnMgPSBb
XTtcblxuICAgICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgb2xk
TGlzdGVuZXJzID0gdGhpcy5zdWJzY3JpcHRpb24ubGlzdGVuZXJzLmdldCgpO1xuICAgICAgICAg
ICAgdGhpcy5zdWJzY3JpcHRpb24udHJ5VW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAg
ICAgICAgdGhpcy5pbml0U3Vic2NyaXB0aW9uKCk7XG4gICAgICAgICAgaWYgKHNob3VsZEhhbmRs
ZVN0YXRlQ2hhbmdlcykge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udHJ5U3Vic2Ny
aWJlKCk7XG4gICAgICAgICAgICBvbGRMaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVu
ZXIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5zdWJzY3JpcHRpb24ubGlzdGVuZXJz
LnN1YnNjcmliZShsaXN0ZW5lcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAg
ICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGhvaXN0U3RhdGljcyhDb25uZWN0
LCBXcmFwcGVkQ29tcG9uZW50KTtcbiAgfTtcbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8v
IFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9jb21wb25l
bnRzL2Nvbm5lY3RBZHZhbmNlZC5qc1xuLy8gbW9kdWxlIGlkID0gOTFcbi8vIG1vZHVsZSBjaHVu
a3MgPSAwIiwiaW1wb3J0IHZlcmlmeVBsYWluT2JqZWN0IGZyb20gJy4uL3V0aWxzL3ZlcmlmeVBs
YWluT2JqZWN0JztcblxuZXhwb3J0IGZ1bmN0aW9uIHdyYXBNYXBUb1Byb3BzQ29uc3RhbnQoZ2V0
Q29uc3RhbnQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGluaXRDb25zdGFudFNlbGVjdG9yKGRpc3Bh
dGNoLCBvcHRpb25zKSB7XG4gICAgdmFyIGNvbnN0YW50ID0gZ2V0Q29uc3RhbnQoZGlzcGF0Y2gs
IG9wdGlvbnMpO1xuXG4gICAgZnVuY3Rpb24gY29uc3RhbnRTZWxlY3RvcigpIHtcbiAgICAgIHJl
dHVybiBjb25zdGFudDtcbiAgICB9XG4gICAgY29uc3RhbnRTZWxlY3Rvci5kZXBlbmRzT25Pd25Q
cm9wcyA9IGZhbHNlO1xuICAgIHJldHVybiBjb25zdGFudFNlbGVjdG9yO1xuICB9O1xufVxuXG4v
LyBkZXBlbmRzT25Pd25Qcm9wcyBpcyB1c2VkIGJ5IGNyZWF0ZU1hcFRvUHJvcHNQcm94eSB0byBk
ZXRlcm1pbmUgd2hldGhlciB0byBwYXNzIHByb3BzIGFzIGFyZ3Ncbi8vIHRvIHRoZSBtYXBUb1By
b3BzIGZ1bmN0aW9uIGJlaW5nIHdyYXBwZWQuIEl0IGlzIGFsc28gdXNlZCBieSBtYWtlUHVyZVBy
b3BzU2VsZWN0b3IgdG8gZGV0ZXJtaW5lXG4vLyB3aGV0aGVyIG1hcFRvUHJvcHMgbmVlZHMgdG8g
YmUgaW52b2tlZCB3aGVuIHByb3BzIGhhdmUgY2hhbmdlZC5cbi8vIFxuLy8gQSBsZW5ndGggb2Yg
b25lIHNpZ25hbHMgdGhhdCBtYXBUb1Byb3BzIGRvZXMgbm90IGRlcGVuZCBvbiBwcm9wcyBmcm9t
IHRoZSBwYXJlbnQgY29tcG9uZW50LlxuLy8gQSBsZW5ndGggb2YgemVybyBpcyBhc3N1bWVkIHRv
IG1lYW4gbWFwVG9Qcm9wcyBpcyBnZXR0aW5nIGFyZ3MgdmlhIGFyZ3VtZW50cyBvciAuLi5hcmdz
IGFuZFxuLy8gdGhlcmVmb3JlIG5vdCByZXBvcnRpbmcgaXRzIGxlbmd0aCBhY2N1cmF0ZWx5Li5c
bmV4cG9ydCBmdW5jdGlvbiBnZXREZXBlbmRzT25Pd25Qcm9wcyhtYXBUb1Byb3BzKSB7XG4gIHJl
dHVybiBtYXBUb1Byb3BzLmRlcGVuZHNPbk93blByb3BzICE9PSBudWxsICYmIG1hcFRvUHJvcHMu
ZGVwZW5kc09uT3duUHJvcHMgIT09IHVuZGVmaW5lZCA/IEJvb2xlYW4obWFwVG9Qcm9wcy5kZXBl
bmRzT25Pd25Qcm9wcykgOiBtYXBUb1Byb3BzLmxlbmd0aCAhPT0gMTtcbn1cblxuLy8gVXNlZCBi
eSB3aGVuTWFwU3RhdGVUb1Byb3BzSXNGdW5jdGlvbiBhbmQgd2hlbk1hcERpc3BhdGNoVG9Qcm9w
c0lzRnVuY3Rpb24sXG4vLyB0aGlzIGZ1bmN0aW9uIHdyYXBzIG1hcFRvUHJvcHMgaW4gYSBwcm94
eSBmdW5jdGlvbiB3aGljaCBkb2VzIHNldmVyYWwgdGhpbmdzOlxuLy8gXG4vLyAgKiBEZXRlY3Rz
IHdoZXRoZXIgdGhlIG1hcFRvUHJvcHMgZnVuY3Rpb24gYmVpbmcgY2FsbGVkIGRlcGVuZHMgb24g
cHJvcHMsIHdoaWNoXG4vLyAgICBpcyB1c2VkIGJ5IHNlbGVjdG9yRmFjdG9yeSB0byBkZWNpZGUg
aWYgaXQgc2hvdWxkIHJlaW52b2tlIG9uIHByb3BzIGNoYW5nZXMuXG4vLyAgICBcbi8vICAqIE9u
IGZpcnN0IGNhbGwsIGhhbmRsZXMgbWFwVG9Qcm9wcyBpZiByZXR1cm5zIGFub3RoZXIgZnVuY3Rp
b24sIGFuZCB0cmVhdHMgdGhhdFxuLy8gICAgbmV3IGZ1bmN0aW9uIGFzIHRoZSB0cnVlIG1hcFRv
UHJvcHMgZm9yIHN1YnNlcXVlbnQgY2FsbHMuXG4vLyAgICBcbi8vICAqIE9uIGZpcnN0IGNhbGws
IHZlcmlmaWVzIHRoZSBmaXJzdCByZXN1bHQgaXMgYSBwbGFpbiBvYmplY3QsIGluIG9yZGVyIHRv
IHdhcm5cbi8vICAgIHRoZSBkZXZlbG9wZXIgdGhhdCB0aGVpciBtYXBUb1Byb3BzIGZ1bmN0aW9u
IGlzIG5vdCByZXR1cm5pbmcgYSB2YWxpZCByZXN1bHQuXG4vLyAgICBcbmV4cG9ydCBmdW5jdGlv
biB3cmFwTWFwVG9Qcm9wc0Z1bmMobWFwVG9Qcm9wcywgbWV0aG9kTmFtZSkge1xuICByZXR1cm4g
ZnVuY3Rpb24gaW5pdFByb3h5U2VsZWN0b3IoZGlzcGF0Y2gsIF9yZWYpIHtcbiAgICB2YXIgZGlz
cGxheU5hbWUgPSBfcmVmLmRpc3BsYXlOYW1lO1xuXG4gICAgdmFyIHByb3h5ID0gZnVuY3Rpb24g
bWFwVG9Qcm9wc1Byb3h5KHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpIHtcbiAgICAgIHJldHVy
biBwcm94eS5kZXBlbmRzT25Pd25Qcm9wcyA/IHByb3h5Lm1hcFRvUHJvcHMoc3RhdGVPckRpc3Bh
dGNoLCBvd25Qcm9wcykgOiBwcm94eS5tYXBUb1Byb3BzKHN0YXRlT3JEaXNwYXRjaCk7XG4gICAg
fTtcblxuICAgIC8vIGFsbG93IGRldGVjdEZhY3RvcnlBbmRWZXJpZnkgdG8gZ2V0IG93blByb3Bz
XG4gICAgcHJveHkuZGVwZW5kc09uT3duUHJvcHMgPSB0cnVlO1xuXG4gICAgcHJveHkubWFwVG9Q
cm9wcyA9IGZ1bmN0aW9uIGRldGVjdEZhY3RvcnlBbmRWZXJpZnkoc3RhdGVPckRpc3BhdGNoLCBv
d25Qcm9wcykge1xuICAgICAgcHJveHkubWFwVG9Qcm9wcyA9IG1hcFRvUHJvcHM7XG4gICAgICBw
cm94eS5kZXBlbmRzT25Pd25Qcm9wcyA9IGdldERlcGVuZHNPbk93blByb3BzKG1hcFRvUHJvcHMp
O1xuICAgICAgdmFyIHByb3BzID0gcHJveHkoc3RhdGVPckRpc3BhdGNoLCBvd25Qcm9wcyk7XG5c
biAgICAgIGlmICh0eXBlb2YgcHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcHJveHku
bWFwVG9Qcm9wcyA9IHByb3BzO1xuICAgICAgICBwcm94eS5kZXBlbmRzT25Pd25Qcm9wcyA9IGdl
dERlcGVuZHNPbk93blByb3BzKHByb3BzKTtcbiAgICAgICAgcHJvcHMgPSBwcm94eShzdGF0ZU9y
RGlzcGF0Y2gsIG93blByb3BzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5P
REVfRU5WICE9PSAncHJvZHVjdGlvbicpIHZlcmlmeVBsYWluT2JqZWN0KHByb3BzLCBkaXNwbGF5
TmFtZSwgbWV0aG9kTmFtZSk7XG5cbiAgICAgIHJldHVybiBwcm9wcztcbiAgICB9O1xuXG4gICAg
cmV0dXJuIHByb3h5O1xuICB9O1xufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFD
SyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2Nvbm5lY3Qvd3JhcE1h
cFRvUHJvcHMuanNcbi8vIG1vZHVsZSBpZCA9IDkyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImlt
cG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFByb3BUeXBlcyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0
IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9k
b1RleHRJbnB1dCBleHRlbmRzIENvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4g
ICAgb25TYXZlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHRleHQ6IFByb3BUeXBl
cy5zdHJpbmcsXG4gICAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZWRpdGlu
ZzogUHJvcFR5cGVzLmJvb2wsXG4gICAgbmV3VG9kbzogUHJvcFR5cGVzLmJvb2xcbiAgfVxuXG4g
IHN0YXRlID0ge1xuICAgIHRleHQ6IHRoaXMucHJvcHMudGV4dCB8fCAnJ1xuICB9XG5cbiAgaGFu
ZGxlU3VibWl0ID0gZSA9PiB7XG4gICAgY29uc3QgdGV4dCA9IGUudGFyZ2V0LnZhbHVlLnRyaW0o
KVxuICAgIGlmIChlLndoaWNoID09PSAxMykge1xuICAgICAgdGhpcy5wcm9wcy5vblNhdmUodGV4
dClcbiAgICAgIGlmICh0aGlzLnByb3BzLm5ld1RvZG8pIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0
ZSh7IHRleHQ6ICcnIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlQ2hhbmdlID0g
ZSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHRleHQ6IGUudGFyZ2V0LnZhbHVlIH0pXG4gIH1c
blxuICBoYW5kbGVCbHVyID0gZSA9PiB7XG4gICAgaWYgKCF0aGlzLnByb3BzLm5ld1RvZG8pIHtc
biAgICAgIHRoaXMucHJvcHMub25TYXZlKGUudGFyZ2V0LnZhbHVlKVxuICAgIH1cbiAgfVxuXG4g
IHJlbmRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGlucHV0IGNsYXNzTmFtZT17XG4gICAg
ICAgIGNsYXNzbmFtZXMoe1xuICAgICAgICAgIGVkaXQ6IHRoaXMucHJvcHMuZWRpdGluZyxcbiAg
ICAgICAgICAnbmV3LXRvZG8nOiB0aGlzLnByb3BzLm5ld1RvZG9cbiAgICAgICAgfSl9XG4gICAg
ICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgcGxhY2Vob2xkZXI9e3RoaXMucHJvcHMucGxhY2Vo
b2xkZXJ9XG4gICAgICAgIGF1dG9Gb2N1cz1cInRydWVcIlxuICAgICAgICB2YWx1ZT17dGhpcy5z
dGF0ZS50ZXh0fVxuICAgICAgICBvbkJsdXI9e3RoaXMuaGFuZGxlQmx1cn1cbiAgICAgICAgb25D
aGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICBvbktleURvd249e3RoaXMuaGFuZGxl
U3VibWl0fSAvPlxuICAgIClcbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8v
IC4vc3JjL2NvbXBvbmVudHMvVG9kb1RleHRJbnB1dC5qcyIsImV4cG9ydCBjb25zdCBTSE9XX0FM
TCA9ICdzaG93X2FsbCdcbmV4cG9ydCBjb25zdCBTSE9XX0NPTVBMRVRFRCA9ICdzaG93X2NvbXBs
ZXRlZCdcbmV4cG9ydCBjb25zdCBTSE9XX0FDVElWRSA9ICdzaG93X2FjdGl2ZSdcblxuXG5cbi8v
IFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb25zdGFudHMvVG9kb0ZpbHRlcnMuanMiLCJl
eHBvcnQgY29uc3QgQUREX1RPRE8gPSAnQUREX1RPRE8nXG5leHBvcnQgY29uc3QgREVMRVRFX1RP
RE8gPSAnREVMRVRFX1RPRE8nXG5leHBvcnQgY29uc3QgRURJVF9UT0RPID0gJ0VESVRfVE9ETydc
bmV4cG9ydCBjb25zdCBDT01QTEVURV9UT0RPID0gJ0NPTVBMRVRFX1RPRE8nXG5leHBvcnQgY29u
c3QgQ09NUExFVEVfQUxMID0gJ0NPTVBMRVRFX0FMTCdcbmV4cG9ydCBjb25zdCBDTEVBUl9DT01Q
TEVURUQgPSAnQ0xFQVJfQ09NUExFVEVEJ1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8v
IC4vc3JjL2NvbnN0YW50cy9BY3Rpb25UeXBlcy5qcyIsIi8vIEByZW1vdmUtb24tZWplY3QtYmVn
aW5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE1LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4g
KiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5z
ZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBm
aWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlv
bmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5U
UyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuLy8gQHJlbW92ZS1vbi1lamVjdC1l
bmRcbid1c2Ugc3RyaWN0JztcblxuaWYgKHR5cGVvZiBQcm9taXNlID09PSAndW5kZWZpbmVkJykg
e1xuICAvLyBSZWplY3Rpb24gdHJhY2tpbmcgcHJldmVudHMgYSBjb21tb24gaXNzdWUgd2hlcmUg
UmVhY3QgZ2V0cyBpbnRvIGFuXG4gIC8vIGluY29uc2lzdGVudCBzdGF0ZSBkdWUgdG8gYW4gZXJy
b3IsIGJ1dCBpdCBnZXRzIHN3YWxsb3dlZCBieSBhIFByb21pc2UsXG4gIC8vIGFuZCB0aGUgdXNl
ciBoYXMgbm8gaWRlYSB3aGF0IGNhdXNlcyBSZWFjdCdzIGVycmF0aWMgZnV0dXJlIGJlaGF2aW9y
LlxuICByZXF1aXJlKCdwcm9taXNlL2xpYi9yZWplY3Rpb24tdHJhY2tpbmcnKS5lbmFibGUoKTtc
biAgd2luZG93LlByb21pc2UgPSByZXF1aXJlKCdwcm9taXNlL2xpYi9lczYtZXh0ZW5zaW9ucy5q
cycpO1xufVxuXG4vLyBmZXRjaCgpIHBvbHlmaWxsIGZvciBtYWtpbmcgQVBJIGNhbGxzLlxucmVx
dWlyZSgnd2hhdHdnLWZldGNoJyk7XG5cbi8vIE9iamVjdC5hc3NpZ24oKSBpcyBjb21tb25seSB1
c2VkIHdpdGggUmVhY3QuXG4vLyBJdCB3aWxsIHVzZSB0aGUgbmF0aXZlIGltcGxlbWVudGF0aW9u
IGlmIGl0J3MgcHJlc2VudCBhbmQgaXNuJ3QgYnVnZ3kuXG5PYmplY3QuYXNzaWduID0gcmVxdWly
ZSgnb2JqZWN0LWFzc2lnbicpO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNL
IEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvcmVhY3Qtc2NyaXB0cy9jb25maWcvcG9seWZpbGxz
LmpzXG4vLyBtb2R1bGUgaWQgPSA5OFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmlj
dCc7XG5cbnZhciBQcm9taXNlID0gcmVxdWlyZSgnLi9jb3JlJyk7XG5cbnZhciBERUZBVUxUX1dI
SVRFTElTVCA9IFtcbiAgUmVmZXJlbmNlRXJyb3IsXG4gIFR5cGVFcnJvcixcbiAgUmFuZ2VFcnJv
clxuXTtcblxudmFyIGVuYWJsZWQgPSBmYWxzZTtcbmV4cG9ydHMuZGlzYWJsZSA9IGRpc2FibGU7
XG5mdW5jdGlvbiBkaXNhYmxlKCkge1xuICBlbmFibGVkID0gZmFsc2U7XG4gIFByb21pc2UuXzQ3
ID0gbnVsbDtcbiAgUHJvbWlzZS5fNzEgPSBudWxsO1xufVxuXG5leHBvcnRzLmVuYWJsZSA9IGVu
YWJsZTtcbmZ1bmN0aW9uIGVuYWJsZShvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8
IHt9O1xuICBpZiAoZW5hYmxlZCkgZGlzYWJsZSgpO1xuICBlbmFibGVkID0gdHJ1ZTtcbiAgdmFy
IGlkID0gMDtcbiAgdmFyIGRpc3BsYXlJZCA9IDA7XG4gIHZhciByZWplY3Rpb25zID0ge307XG4g
IFByb21pc2UuXzQ3ID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICBpZiAoXG4gICAgICBwcm9t
aXNlLl84MyA9PT0gMiAmJiAvLyBJUyBSRUpFQ1RFRFxuICAgICAgcmVqZWN0aW9uc1twcm9taXNl
Ll81Nl1cbiAgICApIHtcbiAgICAgIGlmIChyZWplY3Rpb25zW3Byb21pc2UuXzU2XS5sb2dnZWQp
IHtcbiAgICAgICAgb25IYW5kbGVkKHByb21pc2UuXzU2KTtcbiAgICAgIH0gZWxzZSB7XG4gICAg
ICAgIGNsZWFyVGltZW91dChyZWplY3Rpb25zW3Byb21pc2UuXzU2XS50aW1lb3V0KTtcbiAgICAg
IH1cbiAgICAgIGRlbGV0ZSByZWplY3Rpb25zW3Byb21pc2UuXzU2XTtcbiAgICB9XG4gIH07XG4g
IFByb21pc2UuXzcxID0gZnVuY3Rpb24gKHByb21pc2UsIGVycikge1xuICAgIGlmIChwcm9taXNl
Ll83NSA9PT0gMCkgeyAvLyBub3QgeWV0IGhhbmRsZWRcbiAgICAgIHByb21pc2UuXzU2ID0gaWQr
KztcbiAgICAgIHJlamVjdGlvbnNbcHJvbWlzZS5fNTZdID0ge1xuICAgICAgICBkaXNwbGF5SWQ6
IG51bGwsXG4gICAgICAgIGVycm9yOiBlcnIsXG4gICAgICAgIHRpbWVvdXQ6IHNldFRpbWVvdXQo
XG4gICAgICAgICAgb25VbmhhbmRsZWQuYmluZChudWxsLCBwcm9taXNlLl81NiksXG4gICAgICAg
ICAgLy8gRm9yIHJlZmVyZW5jZSBlcnJvcnMgYW5kIHR5cGUgZXJyb3JzLCB0aGlzIGFsbW9zdCBh
bHdheXNcbiAgICAgICAgICAvLyBtZWFucyB0aGUgcHJvZ3JhbW1lciBtYWRlIGEgbWlzdGFrZSwg
c28gbG9nIHRoZW0gYWZ0ZXIganVzdFxuICAgICAgICAgIC8vIDEwMG1zXG4gICAgICAgICAgLy8g
b3RoZXJ3aXNlLCB3YWl0IDIgc2Vjb25kcyB0byBzZWUgaWYgdGhleSBnZXQgaGFuZGxlZFxuICAg
ICAgICAgIG1hdGNoV2hpdGVsaXN0KGVyciwgREVGQVVMVF9XSElURUxJU1QpXG4gICAgICAgICAg
ICA/IDEwMFxuICAgICAgICAgICAgOiAyMDAwXG4gICAgICAgICksXG4gICAgICAgIGxvZ2dlZDog
ZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICB9O1xuICBmdW5jdGlvbiBvblVuaGFuZGxlZChpZCkg
e1xuICAgIGlmIChcbiAgICAgIG9wdGlvbnMuYWxsUmVqZWN0aW9ucyB8fFxuICAgICAgbWF0Y2hX
aGl0ZWxpc3QoXG4gICAgICAgIHJlamVjdGlvbnNbaWRdLmVycm9yLFxuICAgICAgICBvcHRpb25z
LndoaXRlbGlzdCB8fCBERUZBVUxUX1dISVRFTElTVFxuICAgICAgKVxuICAgICkge1xuICAgICAg
cmVqZWN0aW9uc1tpZF0uZGlzcGxheUlkID0gZGlzcGxheUlkKys7XG4gICAgICBpZiAob3B0aW9u
cy5vblVuaGFuZGxlZCkge1xuICAgICAgICByZWplY3Rpb25zW2lkXS5sb2dnZWQgPSB0cnVlO1xu
ICAgICAgICBvcHRpb25zLm9uVW5oYW5kbGVkKFxuICAgICAgICAgIHJlamVjdGlvbnNbaWRdLmRp
c3BsYXlJZCxcbiAgICAgICAgICByZWplY3Rpb25zW2lkXS5lcnJvclxuICAgICAgICApO1xuICAg
ICAgfSBlbHNlIHtcbiAgICAgICAgcmVqZWN0aW9uc1tpZF0ubG9nZ2VkID0gdHJ1ZTtcbiAgICAg
ICAgbG9nRXJyb3IoXG4gICAgICAgICAgcmVqZWN0aW9uc1tpZF0uZGlzcGxheUlkLFxuICAgICAg
ICAgIHJlamVjdGlvbnNbaWRdLmVycm9yXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9
XG4gIGZ1bmN0aW9uIG9uSGFuZGxlZChpZCkge1xuICAgIGlmIChyZWplY3Rpb25zW2lkXS5sb2dn
ZWQpIHtcbiAgICAgIGlmIChvcHRpb25zLm9uSGFuZGxlZCkge1xuICAgICAgICBvcHRpb25zLm9u
SGFuZGxlZChyZWplY3Rpb25zW2lkXS5kaXNwbGF5SWQsIHJlamVjdGlvbnNbaWRdLmVycm9yKTtc
biAgICAgIH0gZWxzZSBpZiAoIXJlamVjdGlvbnNbaWRdLm9uVW5oYW5kbGVkKSB7XG4gICAgICAg
IGNvbnNvbGUud2FybihcbiAgICAgICAgICAnUHJvbWlzZSBSZWplY3Rpb24gSGFuZGxlZCAoaWQ6
ICcgKyByZWplY3Rpb25zW2lkXS5kaXNwbGF5SWQgKyAnKTonXG4gICAgICAgICk7XG4gICAgICAg
IGNvbnNvbGUud2FybihcbiAgICAgICAgICAnICBUaGlzIG1lYW5zIHlvdSBjYW4gaWdub3JlIGFu
eSBwcmV2aW91cyBtZXNzYWdlcyBvZiB0aGUgZm9ybSBcIlBvc3NpYmxlIFVuaGFuZGxlZCBQcm9t
aXNlIFJlamVjdGlvblwiIHdpdGggaWQgJyArXG4gICAgICAgICAgcmVqZWN0aW9uc1tpZF0uZGlz
cGxheUlkICsgJy4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0
aW9uIGxvZ0Vycm9yKGlkLCBlcnJvcikge1xuICBjb25zb2xlLndhcm4oJ1Bvc3NpYmxlIFVuaGFu
ZGxlZCBQcm9taXNlIFJlamVjdGlvbiAoaWQ6ICcgKyBpZCArICcpOicpO1xuICB2YXIgZXJyU3Ry
ID0gKGVycm9yICYmIChlcnJvci5zdGFjayB8fCBlcnJvcikpICsgJyc7XG4gIGVyclN0ci5zcGxp
dCgnXFxuJykuZm9yRWFjaChmdW5jdGlvbiAobGluZSkge1xuICAgIGNvbnNvbGUud2FybignICAn
ICsgbGluZSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBtYXRjaFdoaXRlbGlzdChlcnJvciwgbGlz
dCkge1xuICByZXR1cm4gbGlzdC5zb21lKGZ1bmN0aW9uIChjbHMpIHtcbiAgICByZXR1cm4gZXJy
b3IgaW5zdGFuY2VvZiBjbHM7XG4gIH0pO1xufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8g
V0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0LXNjcmlwdHMvbm9kZV9tb2R1
bGVzL3Byb21pc2UvbGliL3JlamVjdGlvbi10cmFja2luZy5qc1xuLy8gbW9kdWxlIGlkID0gOTlc
bi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIFVzZSB0aGUgZmFz
dGVzdCBtZWFucyBwb3NzaWJsZSB0byBleGVjdXRlIGEgdGFzayBpbiBpdHMgb3duIHR1cm4sIHdp
dGhcbi8vIHByaW9yaXR5IG92ZXIgb3RoZXIgZXZlbnRzIGluY2x1ZGluZyBJTywgYW5pbWF0aW9u
LCByZWZsb3csIGFuZCByZWRyYXdcbi8vIGV2ZW50cyBpbiBicm93c2Vycy5cbi8vXG4vLyBBbiBl
eGNlcHRpb24gdGhyb3duIGJ5IGEgdGFzayB3aWxsIHBlcm1hbmVudGx5IGludGVycnVwdCB0aGUg
cHJvY2Vzc2luZyBvZlxuLy8gc3Vic2VxdWVudCB0YXNrcy4gVGhlIGhpZ2hlciBsZXZlbCBgYXNh
cGAgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IGlmIGFuXG4vLyBleGNlcHRpb24gaXMgdGhyb3duIGJ5
IGEgdGFzaywgdGhhdCB0aGUgdGFzayBxdWV1ZSB3aWxsIGNvbnRpbnVlIGZsdXNoaW5nIGFzXG4v
LyBzb29uIGFzIHBvc3NpYmxlLCBidXQgaWYgeW91IHVzZSBgcmF3QXNhcGAgZGlyZWN0bHksIHlv
dSBhcmUgcmVzcG9uc2libGUgdG9cbi8vIGVpdGhlciBlbnN1cmUgdGhhdCBubyBleGNlcHRpb25z
IGFyZSB0aHJvd24gZnJvbSB5b3VyIHRhc2ssIG9yIHRvIG1hbnVhbGx5XG4vLyBjYWxsIGByYXdB
c2FwLnJlcXVlc3RGbHVzaGAgaWYgYW4gZXhjZXB0aW9uIGlzIHRocm93bi5cbm1vZHVsZS5leHBv
cnRzID0gcmF3QXNhcDtcbmZ1bmN0aW9uIHJhd0FzYXAodGFzaykge1xuICAgIGlmICghcXVldWUu
bGVuZ3RoKSB7XG4gICAgICAgIHJlcXVlc3RGbHVzaCgpO1xuICAgICAgICBmbHVzaGluZyA9IHRy
dWU7XG4gICAgfVxuICAgIC8vIEVxdWl2YWxlbnQgdG8gcHVzaCwgYnV0IGF2b2lkcyBhIGZ1bmN0
aW9uIGNhbGwuXG4gICAgcXVldWVbcXVldWUubGVuZ3RoXSA9IHRhc2s7XG59XG5cbnZhciBxdWV1
ZSA9IFtdO1xuLy8gT25jZSBhIGZsdXNoIGhhcyBiZWVuIHJlcXVlc3RlZCwgbm8gZnVydGhlciBj
YWxscyB0byBgcmVxdWVzdEZsdXNoYCBhcmVcbi8vIG5lY2Vzc2FyeSB1bnRpbCB0aGUgbmV4dCBg
Zmx1c2hgIGNvbXBsZXRlcy5cbnZhciBmbHVzaGluZyA9IGZhbHNlO1xuLy8gYHJlcXVlc3RGbHVz
aGAgaXMgYW4gaW1wbGVtZW50YXRpb24tc3BlY2lmaWMgbWV0aG9kIHRoYXQgYXR0ZW1wdHMgdG8g
a2lja1xuLy8gb2ZmIGEgYGZsdXNoYCBldmVudCBhcyBxdWlja2x5IGFzIHBvc3NpYmxlLiBgZmx1
c2hgIHdpbGwgYXR0ZW1wdCB0byBleGhhdXN0XG4vLyB0aGUgZXZlbnQgcXVldWUgYmVmb3JlIHlp
ZWxkaW5nIHRvIHRoZSBicm93c2VyJ3Mgb3duIGV2ZW50IGxvb3AuXG52YXIgcmVxdWVzdEZsdXNo
O1xuLy8gVGhlIHBvc2l0aW9uIG9mIHRoZSBuZXh0IHRhc2sgdG8gZXhlY3V0ZSBpbiB0aGUgdGFz
ayBxdWV1ZS4gVGhpcyBpc1xuLy8gcHJlc2VydmVkIGJldHdlZW4gY2FsbHMgdG8gYGZsdXNoYCBz
byB0aGF0IGl0IGNhbiBiZSByZXN1bWVkIGlmXG4vLyBhIHRhc2sgdGhyb3dzIGFuIGV4Y2VwdGlv
bi5cbnZhciBpbmRleCA9IDA7XG4vLyBJZiBhIHRhc2sgc2NoZWR1bGVzIGFkZGl0aW9uYWwgdGFz
a3MgcmVjdXJzaXZlbHksIHRoZSB0YXNrIHF1ZXVlIGNhbiBncm93XG4vLyB1bmJvdW5kZWQuIFRv
IHByZXZlbnQgbWVtb3J5IGV4aGF1c3Rpb24sIHRoZSB0YXNrIHF1ZXVlIHdpbGwgcGVyaW9kaWNh
bGx5XG4vLyB0cnVuY2F0ZSBhbHJlYWR5LWNvbXBsZXRlZCB0YXNrcy5cbnZhciBjYXBhY2l0eSA9
IDEwMjQ7XG5cbi8vIFRoZSBmbHVzaCBmdW5jdGlvbiBwcm9jZXNzZXMgYWxsIHRhc2tzIHRoYXQg
aGF2ZSBiZWVuIHNjaGVkdWxlZCB3aXRoXG4vLyBgcmF3QXNhcGAgdW5sZXNzIGFuZCB1bnRpbCBv
bmUgb2YgdGhvc2UgdGFza3MgdGhyb3dzIGFuIGV4Y2VwdGlvbi5cbi8vIElmIGEgdGFzayB0aHJv
d3MgYW4gZXhjZXB0aW9uLCBgZmx1c2hgIGVuc3VyZXMgdGhhdCBpdHMgc3RhdGUgd2lsbCByZW1h
aW5cbi8vIGNvbnNpc3RlbnQgYW5kIHdpbGwgcmVzdW1lIHdoZXJlIGl0IGxlZnQgb2ZmIHdoZW4g
Y2FsbGVkIGFnYWluLlxuLy8gSG93ZXZlciwgYGZsdXNoYCBkb2VzIG5vdCBtYWtlIGFueSBhcnJh
bmdlbWVudHMgdG8gYmUgY2FsbGVkIGFnYWluIGlmIGFuXG4vLyBleGNlcHRpb24gaXMgdGhyb3du
LlxuZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgd2hpbGUgKGluZGV4IDwgcXVldWUubGVuZ3RoKSB7
XG4gICAgICAgIHZhciBjdXJyZW50SW5kZXggPSBpbmRleDtcbiAgICAgICAgLy8gQWR2YW5jZSB0
aGUgaW5kZXggYmVmb3JlIGNhbGxpbmcgdGhlIHRhc2suIFRoaXMgZW5zdXJlcyB0aGF0IHdlIHdp
bGxcbiAgICAgICAgLy8gYmVnaW4gZmx1c2hpbmcgb24gdGhlIG5leHQgdGFzayB0aGUgdGFzayB0
aHJvd3MgYW4gZXJyb3IuXG4gICAgICAgIGluZGV4ID0gaW5kZXggKyAxO1xuICAgICAgICBxdWV1
ZVtjdXJyZW50SW5kZXhdLmNhbGwoKTtcbiAgICAgICAgLy8gUHJldmVudCBsZWFraW5nIG1lbW9y
eSBmb3IgbG9uZyBjaGFpbnMgb2YgcmVjdXJzaXZlIGNhbGxzIHRvIGBhc2FwYC5cbiAgICAgICAg
Ly8gSWYgd2UgY2FsbCBgYXNhcGAgd2l0aGluIHRhc2tzIHNjaGVkdWxlZCBieSBgYXNhcGAsIHRo
ZSBxdWV1ZSB3aWxsXG4gICAgICAgIC8vIGdyb3csIGJ1dCB0byBhdm9pZCBhbiBPKG4pIHdhbGsg
Zm9yIGV2ZXJ5IHRhc2sgd2UgZXhlY3V0ZSwgd2UgZG9uJ3RcbiAgICAgICAgLy8gc2hpZnQgdGFz
a3Mgb2ZmIHRoZSBxdWV1ZSBhZnRlciB0aGV5IGhhdmUgYmVlbiBleGVjdXRlZC5cbiAgICAgICAg
Ly8gSW5zdGVhZCwgd2UgcGVyaW9kaWNhbGx5IHNoaWZ0IDEwMjQgdGFza3Mgb2ZmIHRoZSBxdWV1
ZS5cbiAgICAgICAgaWYgKGluZGV4ID4gY2FwYWNpdHkpIHtcbiAgICAgICAgICAgIC8vIE1hbnVh
bGx5IHNoaWZ0IGFsbCB2YWx1ZXMgc3RhcnRpbmcgYXQgdGhlIGluZGV4IGJhY2sgdG8gdGhlXG4g
ICAgICAgICAgICAvLyBiZWdpbm5pbmcgb2YgdGhlIHF1ZXVlLlxuICAgICAgICAgICAgZm9yICh2
YXIgc2NhbiA9IDAsIG5ld0xlbmd0aCA9IHF1ZXVlLmxlbmd0aCAtIGluZGV4OyBzY2FuIDwgbmV3
TGVuZ3RoOyBzY2FuKyspIHtcbiAgICAgICAgICAgICAgICBxdWV1ZVtzY2FuXSA9IHF1ZXVlW3Nj
YW4gKyBpbmRleF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxdWV1ZS5sZW5ndGggLT0g
aW5kZXg7XG4gICAgICAgICAgICBpbmRleCA9IDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVl
dWUubGVuZ3RoID0gMDtcbiAgICBpbmRleCA9IDA7XG4gICAgZmx1c2hpbmcgPSBmYWxzZTtcbn1c
blxuLy8gYHJlcXVlc3RGbHVzaGAgaXMgaW1wbGVtZW50ZWQgdXNpbmcgYSBzdHJhdGVneSBiYXNl
ZCBvbiBkYXRhIGNvbGxlY3RlZCBmcm9tXG4vLyBldmVyeSBhdmFpbGFibGUgU2F1Y2VMYWJzIFNl
bGVuaXVtIHdlYiBkcml2ZXIgd29ya2VyIGF0IHRpbWUgb2Ygd3JpdGluZy5cbi8vIGh0dHBzOi8v
ZG9jcy5nb29nbGUuY29tL3NwcmVhZHNoZWV0cy9kLzFtRy01VVlHdXA1cXhHZEVNV2toUDZCV0N6
MDUzTlViMkUxUW9VVFUxNnVBL2VkaXQjZ2lkPTc4MzcyNDU5M1xuXG4vLyBTYWZhcmkgNiBhbmQg
Ni4xIGZvciBkZXNrdG9wLCBpUGFkLCBhbmQgaVBob25lIGFyZSB0aGUgb25seSBicm93c2VycyB0
aGF0XG4vLyBoYXZlIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIgYnV0IG5vdCB1bi1wcmVmaXhlZCBN
dXRhdGlvbk9ic2VydmVyLlxuLy8gTXVzdCB1c2UgYGdsb2JhbGAgb3IgYHNlbGZgIGluc3RlYWQg
b2YgYHdpbmRvd2AgdG8gd29yayBpbiBib3RoIGZyYW1lcyBhbmQgd2ViXG4vLyB3b3JrZXJzLiBg
Z2xvYmFsYCBpcyBhIHByb3Zpc2lvbiBvZiBCcm93c2VyaWZ5LCBNciwgTXJzLCBvciBNb3AuXG5c
bi8qIGdsb2JhbHMgc2VsZiAqL1xudmFyIHNjb3BlID0gdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRl
ZmluZWRcIiA/IGdsb2JhbCA6IHNlbGY7XG52YXIgQnJvd3Nlck11dGF0aW9uT2JzZXJ2ZXIgPSBz
Y29wZS5NdXRhdGlvbk9ic2VydmVyIHx8IHNjb3BlLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7XG5c
bi8vIE11dGF0aW9uT2JzZXJ2ZXJzIGFyZSBkZXNpcmFibGUgYmVjYXVzZSB0aGV5IGhhdmUgaGln
aCBwcmlvcml0eSBhbmQgd29ya1xuLy8gcmVsaWFibHkgZXZlcnl3aGVyZSB0aGV5IGFyZSBpbXBs
ZW1lbnRlZC5cbi8vIFRoZXkgYXJlIGltcGxlbWVudGVkIGluIGFsbCBtb2Rlcm4gYnJvd3NlcnMu
XG4vL1xuLy8gLSBBbmRyb2lkIDQtNC4zXG4vLyAtIENocm9tZSAyNi0zNFxuLy8gLSBGaXJlZm94
IDE0LTI5XG4vLyAtIEludGVybmV0IEV4cGxvcmVyIDExXG4vLyAtIGlQYWQgU2FmYXJpIDYtNy4x
XG4vLyAtIGlQaG9uZSBTYWZhcmkgNy03LjFcbi8vIC0gU2FmYXJpIDYtN1xuaWYgKHR5cGVvZiBC
cm93c2VyTXV0YXRpb25PYnNlcnZlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmVxdWVzdEZs
dXNoID0gbWFrZVJlcXVlc3RDYWxsRnJvbU11dGF0aW9uT2JzZXJ2ZXIoZmx1c2gpO1xuXG4vLyBN
ZXNzYWdlQ2hhbm5lbHMgYXJlIGRlc2lyYWJsZSBiZWNhdXNlIHRoZXkgZ2l2ZSBkaXJlY3QgYWNj
ZXNzIHRvIHRoZSBIVE1MXG4vLyB0YXNrIHF1ZXVlLCBhcmUgaW1wbGVtZW50ZWQgaW4gSW50ZXJu
ZXQgRXhwbG9yZXIgMTAsIFNhZmFyaSA1LjAtMSwgYW5kIE9wZXJhXG4vLyAxMS0xMiwgYW5kIGlu
IHdlYiB3b3JrZXJzIGluIG1hbnkgZW5naW5lcy5cbi8vIEFsdGhvdWdoIG1lc3NhZ2UgY2hhbm5l
bHMgeWllbGQgdG8gYW55IHF1ZXVlZCByZW5kZXJpbmcgYW5kIElPIHRhc2tzLCB0aGV5XG4vLyB3
b3VsZCBiZSBiZXR0ZXIgdGhhbiBpbXBvc2luZyB0aGUgNG1zIGRlbGF5IG9mIHRpbWVycy5cbi8v
IEhvd2V2ZXIsIHRoZXkgZG8gbm90IHdvcmsgcmVsaWFibHkgaW4gSW50ZXJuZXQgRXhwbG9yZXIg
b3IgU2FmYXJpLlxuXG4vLyBJbnRlcm5ldCBFeHBsb3JlciAxMCBpcyB0aGUgb25seSBicm93c2Vy
IHRoYXQgaGFzIHNldEltbWVkaWF0ZSBidXQgZG9lc1xuLy8gbm90IGhhdmUgTXV0YXRpb25PYnNl
cnZlcnMuXG4vLyBBbHRob3VnaCBzZXRJbW1lZGlhdGUgeWllbGRzIHRvIHRoZSBicm93c2VyJ3Mg
cmVuZGVyZXIsIGl0IHdvdWxkIGJlXG4vLyBwcmVmZXJyYWJsZSB0byBmYWxsaW5nIGJhY2sgdG8g
c2V0VGltZW91dCBzaW5jZSBpdCBkb2VzIG5vdCBoYXZlXG4vLyB0aGUgbWluaW11bSA0bXMgcGVu
YWx0eS5cbi8vIFVuZm9ydHVuYXRlbHkgdGhlcmUgYXBwZWFycyB0byBiZSBhIGJ1ZyBpbiBJbnRl
cm5ldCBFeHBsb3JlciAxMCBNb2JpbGUgKGFuZFxuLy8gRGVza3RvcCB0byBhIGxlc3NlciBleHRl
bnQpIHRoYXQgcmVuZGVycyBib3RoIHNldEltbWVkaWF0ZSBhbmRcbi8vIE1lc3NhZ2VDaGFubmVs
IHVzZWxlc3MgZm9yIHRoZSBwdXJwb3NlcyBvZiBBU0FQLlxuLy8gaHR0cHM6Ly9naXRodWIuY29t
L2tyaXNrb3dhbC9xL2lzc3Vlcy8zOTZcblxuLy8gVGltZXJzIGFyZSBpbXBsZW1lbnRlZCB1bml2
ZXJzYWxseS5cbi8vIFdlIGZhbGwgYmFjayB0byB0aW1lcnMgaW4gd29ya2VycyBpbiBtb3N0IGVu
Z2luZXMsIGFuZCBpbiBmb3JlZ3JvdW5kXG4vLyBjb250ZXh0cyBpbiB0aGUgZm9sbG93aW5nIGJy
b3dzZXJzLlxuLy8gSG93ZXZlciwgbm90ZSB0aGF0IGV2ZW4gdGhpcyBzaW1wbGUgY2FzZSByZXF1
aXJlcyBudWFuY2VzIHRvIG9wZXJhdGUgaW4gYVxuLy8gYnJvYWQgc3BlY3RydW0gb2YgYnJvd3Nl
cnMuXG4vL1xuLy8gLSBGaXJlZm94IDMtMTNcbi8vIC0gSW50ZXJuZXQgRXhwbG9yZXIgNi05XG4v
LyAtIGlQYWQgU2FmYXJpIDQuM1xuLy8gLSBMeW54IDIuOC43XG59IGVsc2Uge1xuICAgIHJlcXVl
c3RGbHVzaCA9IG1ha2VSZXF1ZXN0Q2FsbEZyb21UaW1lcihmbHVzaCk7XG59XG5cbi8vIGByZXF1
ZXN0Rmx1c2hgIHJlcXVlc3RzIHRoYXQgdGhlIGhpZ2ggcHJpb3JpdHkgZXZlbnQgcXVldWUgYmUg
Zmx1c2hlZCBhc1xuLy8gc29vbiBhcyBwb3NzaWJsZS5cbi8vIFRoaXMgaXMgdXNlZnVsIHRvIHBy
ZXZlbnQgYW4gZXJyb3IgdGhyb3duIGluIGEgdGFzayBmcm9tIHN0YWxsaW5nIHRoZSBldmVudFxu
Ly8gcXVldWUgaWYgdGhlIGV4Y2VwdGlvbiBoYW5kbGVkIGJ5IE5vZGUuanPigJlzXG4vLyBgcHJv
Y2Vzcy5vbihcInVuY2F1Z2h0RXhjZXB0aW9uXCIpYCBvciBieSBhIGRvbWFpbi5cbnJhd0FzYXAu
cmVxdWVzdEZsdXNoID0gcmVxdWVzdEZsdXNoO1xuXG4vLyBUbyByZXF1ZXN0IGEgaGlnaCBwcmlv
cml0eSBldmVudCwgd2UgaW5kdWNlIGEgbXV0YXRpb24gb2JzZXJ2ZXIgYnkgdG9nZ2xpbmdcbi8v
IHRoZSB0ZXh0IG9mIGEgdGV4dCBub2RlIGJldHdlZW4gXCIxXCIgYW5kIFwiLTFcIi5cbmZ1bmN0
aW9uIG1ha2VSZXF1ZXN0Q2FsbEZyb21NdXRhdGlvbk9ic2VydmVyKGNhbGxiYWNrKSB7XG4gICAg
dmFyIHRvZ2dsZSA9IDE7XG4gICAgdmFyIG9ic2VydmVyID0gbmV3IEJyb3dzZXJNdXRhdGlvbk9i
c2VydmVyKGNhbGxiYWNrKTtcbiAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KFwiXCIpO1xuICAgIG9ic2VydmVyLm9ic2VydmUobm9kZSwge2NoYXJhY3RlckRhdGE6IHRydWV9
KTtcbiAgICByZXR1cm4gZnVuY3Rpb24gcmVxdWVzdENhbGwoKSB7XG4gICAgICAgIHRvZ2dsZSA9
IC10b2dnbGU7XG4gICAgICAgIG5vZGUuZGF0YSA9IHRvZ2dsZTtcbiAgICB9O1xufVxuXG4vLyBU
aGUgbWVzc2FnZSBjaGFubmVsIHRlY2huaXF1ZSB3YXMgZGlzY292ZXJlZCBieSBNYWx0ZSBVYmwg
YW5kIHdhcyB0aGVcbi8vIG9yaWdpbmFsIGZvdW5kYXRpb24gZm9yIHRoaXMgbGlicmFyeS5cbi8v
IGh0dHA6Ly93d3cubm9uYmxvY2tpbmcuaW8vMjAxMS8wNi93aW5kb3duZXh0dGljay5odG1sXG5c
bi8vIFNhZmFyaSA2LjAuNSAoYXQgbGVhc3QpIGludGVybWl0dGVudGx5IGZhaWxzIHRvIGNyZWF0
ZSBtZXNzYWdlIHBvcnRzIG9uIGFcbi8vIHBhZ2UncyBmaXJzdCBsb2FkLiBUaGFua2Z1bGx5LCB0
aGlzIHZlcnNpb24gb2YgU2FmYXJpIHN1cHBvcnRzXG4vLyBNdXRhdGlvbk9ic2VydmVycywgc28g
d2UgZG9uJ3QgbmVlZCB0byBmYWxsIGJhY2sgaW4gdGhhdCBjYXNlLlxuXG4vLyBmdW5jdGlvbiBt
YWtlUmVxdWVzdENhbGxGcm9tTWVzc2FnZUNoYW5uZWwoY2FsbGJhY2spIHtcbi8vICAgICB2YXIg
Y2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuLy8gICAgIGNoYW5uZWwucG9ydDEub25t
ZXNzYWdlID0gY2FsbGJhY2s7XG4vLyAgICAgcmV0dXJuIGZ1bmN0aW9uIHJlcXVlc3RDYWxsKCkg
e1xuLy8gICAgICAgICBjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdlKDApO1xuLy8gICAgIH07XG4v
LyB9XG5cbi8vIEZvciByZWFzb25zIGV4cGxhaW5lZCBhYm92ZSwgd2UgYXJlIGFsc28gdW5hYmxl
IHRvIHVzZSBgc2V0SW1tZWRpYXRlYFxuLy8gdW5kZXIgYW55IGNpcmN1bXN0YW5jZXMuXG4vLyBF
dmVuIGlmIHdlIHdlcmUsIHRoZXJlIGlzIGFub3RoZXIgYnVnIGluIEludGVybmV0IEV4cGxvcmVy
IDEwLlxuLy8gSXQgaXMgbm90IHN1ZmZpY2llbnQgdG8gYXNzaWduIGBzZXRJbW1lZGlhdGVgIHRv
IGByZXF1ZXN0Rmx1c2hgIGJlY2F1c2Vcbi8vIGBzZXRJbW1lZGlhdGVgIG11c3QgYmUgY2FsbGVk
ICpieSBuYW1lKiBhbmQgdGhlcmVmb3JlIG11c3QgYmUgd3JhcHBlZCBpbiBhXG4vLyBjbG9zdXJl
LlxuLy8gTmV2ZXIgZm9yZ2V0LlxuXG4vLyBmdW5jdGlvbiBtYWtlUmVxdWVzdENhbGxGcm9tU2V0
SW1tZWRpYXRlKGNhbGxiYWNrKSB7XG4vLyAgICAgcmV0dXJuIGZ1bmN0aW9uIHJlcXVlc3RDYWxs
KCkge1xuLy8gICAgICAgICBzZXRJbW1lZGlhdGUoY2FsbGJhY2spO1xuLy8gICAgIH07XG4vLyB9
XG5cbi8vIFNhZmFyaSA2LjAgaGFzIGEgcHJvYmxlbSB3aGVyZSB0aW1lcnMgd2lsbCBnZXQgbG9z
dCB3aGlsZSB0aGUgdXNlciBpc1xuLy8gc2Nyb2xsaW5nLiBUaGlzIHByb2JsZW0gZG9lcyBub3Qg
aW1wYWN0IEFTQVAgYmVjYXVzZSBTYWZhcmkgNi4wIHN1cHBvcnRzXG4vLyBtdXRhdGlvbiBvYnNl
cnZlcnMsIHNvIHRoYXQgaW1wbGVtZW50YXRpb24gaXMgdXNlZCBpbnN0ZWFkLlxuLy8gSG93ZXZl
ciwgaWYgd2UgZXZlciBlbGVjdCB0byB1c2UgdGltZXJzIGluIFNhZmFyaSwgdGhlIHByZXZhbGVu
dCB3b3JrLWFyb3VuZFxuLy8gaXMgdG8gYWRkIGEgc2Nyb2xsIGV2ZW50IGxpc3RlbmVyIHRoYXQg
Y2FsbHMgZm9yIGEgZmx1c2guXG5cbi8vIGBzZXRUaW1lb3V0YCBkb2VzIG5vdCBjYWxsIHRoZSBw
YXNzZWQgY2FsbGJhY2sgaWYgdGhlIGRlbGF5IGlzIGxlc3MgdGhhblxuLy8gYXBwcm94aW1hdGVs
eSA3IGluIHdlYiB3b3JrZXJzIGluIEZpcmVmb3ggOCB0aHJvdWdoIDE4LCBhbmQgc29tZXRpbWVz
IG5vdFxuLy8gZXZlbiB0aGVuLlxuXG5mdW5jdGlvbiBtYWtlUmVxdWVzdENhbGxGcm9tVGltZXIo
Y2FsbGJhY2spIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gcmVxdWVzdENhbGwoKSB7XG4gICAgICAg
IC8vIFdlIGRpc3BhdGNoIGEgdGltZW91dCB3aXRoIGEgc3BlY2lmaWVkIGRlbGF5IG9mIDAgZm9y
IGVuZ2luZXMgdGhhdFxuICAgICAgICAvLyBjYW4gcmVsaWFibHkgYWNjb21tb2RhdGUgdGhhdCBy
ZXF1ZXN0LiBUaGlzIHdpbGwgdXN1YWxseSBiZSBzbmFwcGVkXG4gICAgICAgIC8vIHRvIGEgNCBt
aWxpc2Vjb25kIGRlbGF5LCBidXQgb25jZSB3ZSdyZSBmbHVzaGluZywgdGhlcmUncyBubyBkZWxh
eVxuICAgICAgICAvLyBiZXR3ZWVuIGV2ZW50cy5cbiAgICAgICAgdmFyIHRpbWVvdXRIYW5kbGUg
PSBzZXRUaW1lb3V0KGhhbmRsZVRpbWVyLCAwKTtcbiAgICAgICAgLy8gSG93ZXZlciwgc2luY2Ug
dGhpcyB0aW1lciBnZXRzIGZyZXF1ZW50bHkgZHJvcHBlZCBpbiBGaXJlZm94XG4gICAgICAgIC8v
IHdvcmtlcnMsIHdlIGVubGlzdCBhbiBpbnRlcnZhbCBoYW5kbGUgdGhhdCB3aWxsIHRyeSB0byBm
aXJlXG4gICAgICAgIC8vIGFuIGV2ZW50IDIwIHRpbWVzIHBlciBzZWNvbmQgdW50aWwgaXQgc3Vj
Y2VlZHMuXG4gICAgICAgIHZhciBpbnRlcnZhbEhhbmRsZSA9IHNldEludGVydmFsKGhhbmRsZVRp
bWVyLCA1MCk7XG5cbiAgICAgICAgZnVuY3Rpb24gaGFuZGxlVGltZXIoKSB7XG4gICAgICAgICAg
ICAvLyBXaGljaGV2ZXIgdGltZXIgc3VjY2VlZHMgd2lsbCBjYW5jZWwgYm90aCB0aW1lcnMgYW5k
XG4gICAgICAgICAgICAvLyBleGVjdXRlIHRoZSBjYWxsYmFjay5cbiAgICAgICAgICAgIGNsZWFy
VGltZW91dCh0aW1lb3V0SGFuZGxlKTtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2
YWxIYW5kbGUpO1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH07XG59
XG5cbi8vIFRoaXMgaXMgZm9yIGBhc2FwLmpzYCBvbmx5LlxuLy8gSXRzIG5hbWUgd2lsbCBiZSBw
ZXJpb2RpY2FsbHkgcmFuZG9taXplZCB0byBicmVhayBhbnkgY29kZSB0aGF0IGRlcGVuZHMgb25c
bi8vIGl0cyBleGlzdGVuY2UuXG5yYXdBc2FwLm1ha2VSZXF1ZXN0Q2FsbEZyb21UaW1lciA9IG1h
a2VSZXF1ZXN0Q2FsbEZyb21UaW1lcjtcblxuLy8gQVNBUCB3YXMgb3JpZ2luYWxseSBhIG5leHRU
aWNrIHNoaW0gaW5jbHVkZWQgaW4gUS4gVGhpcyB3YXMgZmFjdG9yZWQgb3V0XG4vLyBpbnRvIHRo
aXMgQVNBUCBwYWNrYWdlLiBJdCB3YXMgbGF0ZXIgYWRhcHRlZCB0byBSU1ZQIHdoaWNoIG1hZGUg
ZnVydGhlclxuLy8gYW1lbmRtZW50cy4gVGhlc2UgZGVjaXNpb25zLCBwYXJ0aWN1bGFybHkgdG8g
bWFyZ2luYWxpemUgTWVzc2FnZUNoYW5uZWwgYW5kXG4vLyB0byBjYXB0dXJlIHRoZSBNdXRhdGlv
bk9ic2VydmVyIGltcGxlbWVudGF0aW9uIGluIGEgY2xvc3VyZSwgd2VyZSBpbnRlZ3JhdGVkXG4v
LyBiYWNrIGludG8gQVNBUCBwcm9wZXIuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGlsZGVpby9y
c3ZwLmpzL2Jsb2IvY2RkZjcyMzI1NDZhOWNmODU4NTI0Yjc1Y2RlNmY5ZWRmNzI2MjBhNy9saWIv
cnN2cC9hc2FwLmpzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVS
XG4vLyAuL25vZGVfbW9kdWxlcy9hc2FwL2Jyb3dzZXItcmF3LmpzXG4vLyBtb2R1bGUgaWQgPSAx
MDBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiJ3VzZSBzdHJpY3QnO1xuXG4vL1RoaXMgZmlsZSBj
b250YWlucyB0aGUgRVM2IGV4dGVuc2lvbnMgdG8gdGhlIGNvcmUgUHJvbWlzZXMvQSsgQVBJXG5c
bnZhciBQcm9taXNlID0gcmVxdWlyZSgnLi9jb3JlLmpzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0g
UHJvbWlzZTtcblxuLyogU3RhdGljIEZ1bmN0aW9ucyAqL1xuXG52YXIgVFJVRSA9IHZhbHVlUHJv
bWlzZSh0cnVlKTtcbnZhciBGQUxTRSA9IHZhbHVlUHJvbWlzZShmYWxzZSk7XG52YXIgTlVMTCA9
IHZhbHVlUHJvbWlzZShudWxsKTtcbnZhciBVTkRFRklORUQgPSB2YWx1ZVByb21pc2UodW5kZWZp
bmVkKTtcbnZhciBaRVJPID0gdmFsdWVQcm9taXNlKDApO1xudmFyIEVNUFRZU1RSSU5HID0gdmFs
dWVQcm9taXNlKCcnKTtcblxuZnVuY3Rpb24gdmFsdWVQcm9taXNlKHZhbHVlKSB7XG4gIHZhciBw
ID0gbmV3IFByb21pc2UoUHJvbWlzZS5fNDQpO1xuICBwLl84MyA9IDE7XG4gIHAuXzE4ID0gdmFs
dWU7XG4gIHJldHVybiBwO1xufVxuUHJvbWlzZS5yZXNvbHZlID0gZnVuY3Rpb24gKHZhbHVlKSB7
XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFByb21pc2UpIHJldHVybiB2YWx1ZTtcblxuICBpZiAo
dmFsdWUgPT09IG51bGwpIHJldHVybiBOVUxMO1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkg
cmV0dXJuIFVOREVGSU5FRDtcbiAgaWYgKHZhbHVlID09PSB0cnVlKSByZXR1cm4gVFJVRTtcbiAg
aWYgKHZhbHVlID09PSBmYWxzZSkgcmV0dXJuIEZBTFNFO1xuICBpZiAodmFsdWUgPT09IDApIHJl
dHVybiBaRVJPO1xuICBpZiAodmFsdWUgPT09ICcnKSByZXR1cm4gRU1QVFlTVFJJTkc7XG5cbiAg
aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rp
b24nKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciB0aGVuID0gdmFsdWUudGhlbjtcbiAgICAgIGlm
ICh0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21p
c2UodGhlbi5iaW5kKHZhbHVlKSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAg
IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAg
IHJlamVjdChleCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlUHJvbWlz
ZSh2YWx1ZSk7XG59O1xuXG5Qcm9taXNlLmFsbCA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgdmFyIGFy
Z3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcnIpO1xuXG4gIHJldHVybiBuZXcgUHJv
bWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID09
PSAwKSByZXR1cm4gcmVzb2x2ZShbXSk7XG4gICAgdmFyIHJlbWFpbmluZyA9IGFyZ3MubGVuZ3Ro
O1xuICAgIGZ1bmN0aW9uIHJlcyhpLCB2YWwpIHtcbiAgICAgIGlmICh2YWwgJiYgKHR5cGVvZiB2
YWwgPT09ICdvYmplY3QnIHx8IHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICAg
IGlmICh2YWwgaW5zdGFuY2VvZiBQcm9taXNlICYmIHZhbC50aGVuID09PSBQcm9taXNlLnByb3Rv
dHlwZS50aGVuKSB7XG4gICAgICAgICAgd2hpbGUgKHZhbC5fODMgPT09IDMpIHtcbiAgICAgICAg
ICAgIHZhbCA9IHZhbC5fMTg7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh2YWwuXzgzID09
PSAxKSByZXR1cm4gcmVzKGksIHZhbC5fMTgpO1xuICAgICAgICAgIGlmICh2YWwuXzgzID09PSAy
KSByZWplY3QodmFsLl8xOCk7XG4gICAgICAgICAgdmFsLnRoZW4oZnVuY3Rpb24gKHZhbCkge1xu
ICAgICAgICAgICAgcmVzKGksIHZhbCk7XG4gICAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgICAg
ICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHRoZW4gPSB2YWwudGhl
bjtcbiAgICAgICAgICBpZiAodHlwZW9mIHRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAg
ICAgIHZhciBwID0gbmV3IFByb21pc2UodGhlbi5iaW5kKHZhbCkpO1xuICAgICAgICAgICAgcC50
aGVuKGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgICAgcmVzKGksIHZhbCk7XG4gICAgICAg
ICAgICB9LCByZWplY3QpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAg
ICAgfVxuICAgICAgfVxuICAgICAgYXJnc1tpXSA9IHZhbDtcbiAgICAgIGlmICgtLXJlbWFpbmlu
ZyA9PT0gMCkge1xuICAgICAgICByZXNvbHZlKGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlcyhpLCBhcmdz
W2ldKTtcbiAgICB9XG4gIH0pO1xufTtcblxuUHJvbWlzZS5yZWplY3QgPSBmdW5jdGlvbiAodmFs
dWUpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtc
biAgICByZWplY3QodmFsdWUpO1xuICB9KTtcbn07XG5cblByb21pc2UucmFjZSA9IGZ1bmN0aW9u
ICh2YWx1ZXMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWpl
Y3QpIHtcbiAgICB2YWx1ZXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSl7XG4gICAgICBQcm9taXNl
LnJlc29sdmUodmFsdWUpLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICB9KTtcbiAgfSk7XG59
O1xuXG4vKiBQcm90b3R5cGUgTWV0aG9kcyAqL1xuXG5Qcm9taXNlLnByb3RvdHlwZVsnY2F0Y2gn
XSA9IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gIHJldHVybiB0aGlzLnRoZW4obnVsbCwgb25S
ZWplY3RlZCk7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RF
UlxuLy8gLi9ub2RlX21vZHVsZXMvcmVhY3Qtc2NyaXB0cy9ub2RlX21vZHVsZXMvcHJvbWlzZS9s
aWIvZXM2LWV4dGVuc2lvbnMuanNcbi8vIG1vZHVsZSBpZCA9IDEwMVxuLy8gbW9kdWxlIGNodW5r
cyA9IDAiLCIoZnVuY3Rpb24oc2VsZikge1xuICAndXNlIHN0cmljdCc7XG5cbiAgaWYgKHNlbGYu
ZmV0Y2gpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHZhciBzdXBwb3J0ID0ge1xuICAgIHNlYXJj
aFBhcmFtczogJ1VSTFNlYXJjaFBhcmFtcycgaW4gc2VsZixcbiAgICBpdGVyYWJsZTogJ1N5bWJv
bCcgaW4gc2VsZiAmJiAnaXRlcmF0b3InIGluIFN5bWJvbCxcbiAgICBibG9iOiAnRmlsZVJlYWRl
cicgaW4gc2VsZiAmJiAnQmxvYicgaW4gc2VsZiAmJiAoZnVuY3Rpb24oKSB7XG4gICAgICB0cnkg
e1xuICAgICAgICBuZXcgQmxvYigpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9IGNhdGNo
KGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfSkoKSxcbiAgICBmb3Jt
RGF0YTogJ0Zvcm1EYXRhJyBpbiBzZWxmLFxuICAgIGFycmF5QnVmZmVyOiAnQXJyYXlCdWZmZXIn
IGluIHNlbGZcbiAgfVxuXG4gIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyKSB7XG4gICAgdmFyIHZp
ZXdDbGFzc2VzID0gW1xuICAgICAgJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgICAnW29iamVj
dCBVaW50OEFycmF5XScsXG4gICAgICAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAg
ICAgJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgVWludDE2QXJyYXldJyxc
biAgICAgICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICAgICdbb2JqZWN0IFVpbnQzMkFycmF5
XScsXG4gICAgICAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICAgICdbb2JqZWN0IEZsb2F0
NjRBcnJheV0nXG4gICAgXVxuXG4gICAgdmFyIGlzRGF0YVZpZXcgPSBmdW5jdGlvbihvYmopIHtc
biAgICAgIHJldHVybiBvYmogJiYgRGF0YVZpZXcucHJvdG90eXBlLmlzUHJvdG90eXBlT2Yob2Jq
KVxuICAgIH1cblxuICAgIHZhciBpc0FycmF5QnVmZmVyVmlldyA9IEFycmF5QnVmZmVyLmlzVmll
dyB8fCBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgdmlld0NsYXNzZXMuaW5k
ZXhPZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSkgPiAtMVxuICAgIH1cbiAg
fVxuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZU5hbWUobmFtZSkge1xuICAgIGlmICh0eXBlb2YgbmFt
ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIG5hbWUgPSBTdHJpbmcobmFtZSlcbiAgICB9XG4gICAg
aWYgKC9bXmEtejAtOVxcLSMkJSYnKisuXFxeX2B8fl0vaS50ZXN0KG5hbWUpKSB7XG4gICAgICB0
aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGNoYXJhY3RlciBpbiBoZWFkZXIgZmllbGQgbmFt
ZScpXG4gICAgfVxuICAgIHJldHVybiBuYW1lLnRvTG93ZXJDYXNlKClcbiAgfVxuXG4gIGZ1bmN0
aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0
cmluZycpIHtcbiAgICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlKVxuICAgIH1cbiAgICByZXR1cm4g
dmFsdWVcbiAgfVxuXG4gIC8vIEJ1aWxkIGEgZGVzdHJ1Y3RpdmUgaXRlcmF0b3IgZm9yIHRoZSB2
YWx1ZSBsaXN0XG4gIGZ1bmN0aW9uIGl0ZXJhdG9yRm9yKGl0ZW1zKSB7XG4gICAgdmFyIGl0ZXJh
dG9yID0ge1xuICAgICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGl0
ZW1zLnNoaWZ0KClcbiAgICAgICAgcmV0dXJuIHtkb25lOiB2YWx1ZSA9PT0gdW5kZWZpbmVkLCB2
YWx1ZTogdmFsdWV9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN1cHBvcnQuaXRlcmFibGUp
IHtcbiAgICAgIGl0ZXJhdG9yW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICAg
ICAgcmV0dXJuIGl0ZXJhdG9yXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGl0ZXJhdG9y
XG4gIH1cblxuICBmdW5jdGlvbiBIZWFkZXJzKGhlYWRlcnMpIHtcbiAgICB0aGlzLm1hcCA9IHt9
XG5cbiAgICBpZiAoaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnMpIHtcbiAgICAgIGhlYWRlcnMu
Zm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICB0aGlzLmFwcGVuZChuYW1l
LCB2YWx1ZSlcbiAgICAgIH0sIHRoaXMpXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGhl
YWRlcnMpKSB7XG4gICAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24oaGVhZGVyKSB7XG4gICAg
ICAgIHRoaXMuYXBwZW5kKGhlYWRlclswXSwgaGVhZGVyWzFdKVxuICAgICAgfSwgdGhpcylcbiAg
ICB9IGVsc2UgaWYgKGhlYWRlcnMpIHtcbiAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVz
KGhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgICB0aGlzLmFwcGVuZChu
YW1lLCBoZWFkZXJzW25hbWVdKVxuICAgICAgfSwgdGhpcylcbiAgICB9XG4gIH1cblxuICBIZWFk
ZXJzLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgIG5hbWUg
PSBub3JtYWxpemVOYW1lKG5hbWUpXG4gICAgdmFsdWUgPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSlc
biAgICB2YXIgb2xkVmFsdWUgPSB0aGlzLm1hcFtuYW1lXVxuICAgIHRoaXMubWFwW25hbWVdID0g
b2xkVmFsdWUgPyBvbGRWYWx1ZSsnLCcrdmFsdWUgOiB2YWx1ZVxuICB9XG5cbiAgSGVhZGVycy5w
cm90b3R5cGVbJ2RlbGV0ZSddID0gZnVuY3Rpb24obmFtZSkge1xuICAgIGRlbGV0ZSB0aGlzLm1h
cFtub3JtYWxpemVOYW1lKG5hbWUpXVxuICB9XG5cbiAgSGVhZGVycy5wcm90b3R5cGUuZ2V0ID0g
ZnVuY3Rpb24obmFtZSkge1xuICAgIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpXG4gICAgcmV0
dXJuIHRoaXMuaGFzKG5hbWUpID8gdGhpcy5tYXBbbmFtZV0gOiBudWxsXG4gIH1cblxuICBIZWFk
ZXJzLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMubWFw
Lmhhc093blByb3BlcnR5KG5vcm1hbGl6ZU5hbWUobmFtZSkpXG4gIH1cblxuICBIZWFkZXJzLnBy
b3RvdHlwZS5zZXQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgIHRoaXMubWFwW25vcm1h
bGl6ZU5hbWUobmFtZSldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG4gIH1cblxuICBIZWFkZXJz
LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24oY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICBm
b3IgKHZhciBuYW1lIGluIHRoaXMubWFwKSB7XG4gICAgICBpZiAodGhpcy5tYXAuaGFzT3duUHJv
cGVydHkobmFtZSkpIHtcbiAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCB0aGlzLm1hcFtu
YW1lXSwgbmFtZSwgdGhpcylcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBIZWFkZXJzLnByb3Rv
dHlwZS5rZXlzID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGl0ZW1zID0gW11cbiAgICB0aGlzLmZv
ckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHsgaXRlbXMucHVzaChuYW1lKSB9KVxuICAgIHJl
dHVybiBpdGVyYXRvckZvcihpdGVtcylcbiAgfVxuXG4gIEhlYWRlcnMucHJvdG90eXBlLnZhbHVl
cyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBpdGVtcyA9IFtdXG4gICAgdGhpcy5mb3JFYWNoKGZ1
bmN0aW9uKHZhbHVlKSB7IGl0ZW1zLnB1c2godmFsdWUpIH0pXG4gICAgcmV0dXJuIGl0ZXJhdG9y
Rm9yKGl0ZW1zKVxuICB9XG5cbiAgSGVhZGVycy5wcm90b3R5cGUuZW50cmllcyA9IGZ1bmN0aW9u
KCkge1xuICAgIHZhciBpdGVtcyA9IFtdXG4gICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVl
LCBuYW1lKSB7IGl0ZW1zLnB1c2goW25hbWUsIHZhbHVlXSkgfSlcbiAgICByZXR1cm4gaXRlcmF0
b3JGb3IoaXRlbXMpXG4gIH1cblxuICBpZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICAgIEhlYWRl
cnMucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBIZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVz
XG4gIH1cblxuICBmdW5jdGlvbiBjb25zdW1lZChib2R5KSB7XG4gICAgaWYgKGJvZHkuYm9keVVz
ZWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdBbHJlYWR5
IHJlYWQnKSlcbiAgICB9XG4gICAgYm9keS5ib2R5VXNlZCA9IHRydWVcbiAgfVxuXG4gIGZ1bmN0
aW9uIGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVu
Y3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24o
KSB7XG4gICAgICAgIHJlc29sdmUocmVhZGVyLnJlc3VsdClcbiAgICAgIH1cbiAgICAgIHJlYWRl
ci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChyZWFkZXIuZXJyb3IpXG4g
ICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRCbG9iQXNBcnJheUJ1ZmZlcihi
bG9iKSB7XG4gICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgICB2YXIgcHJvbWlz
ZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpXG4gICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVy
KGJsb2IpXG4gICAgcmV0dXJuIHByb21pc2VcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRCbG9iQXNU
ZXh0KGJsb2IpIHtcbiAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICAgIHZhciBw
cm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcilcbiAgICByZWFkZXIucmVhZEFzVGV4dChi
bG9iKVxuICAgIHJldHVybiBwcm9taXNlXG4gIH1cblxuICBmdW5jdGlvbiByZWFkQXJyYXlCdWZm
ZXJBc1RleHQoYnVmKSB7XG4gICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYpXG4gICAg
dmFyIGNoYXJzID0gbmV3IEFycmF5KHZpZXcubGVuZ3RoKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7
IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGFyc1tpXSA9IFN0cmluZy5mcm9tQ2hh
ckNvZGUodmlld1tpXSlcbiAgICB9XG4gICAgcmV0dXJuIGNoYXJzLmpvaW4oJycpXG4gIH1cblxu
ICBmdW5jdGlvbiBidWZmZXJDbG9uZShidWYpIHtcbiAgICBpZiAoYnVmLnNsaWNlKSB7XG4gICAg
ICByZXR1cm4gYnVmLnNsaWNlKDApXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB2aWV3ID0gbmV3
IFVpbnQ4QXJyYXkoYnVmLmJ5dGVMZW5ndGgpXG4gICAgICB2aWV3LnNldChuZXcgVWludDhBcnJh
eShidWYpKVxuICAgICAgcmV0dXJuIHZpZXcuYnVmZmVyXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rp
b24gQm9keSgpIHtcbiAgICB0aGlzLmJvZHlVc2VkID0gZmFsc2VcblxuICAgIHRoaXMuX2luaXRC
b2R5ID0gZnVuY3Rpb24oYm9keSkge1xuICAgICAgdGhpcy5fYm9keUluaXQgPSBib2R5XG4gICAg
ICBpZiAoIWJvZHkpIHtcbiAgICAgICAgdGhpcy5fYm9keVRleHQgPSAnJ1xuICAgICAgfSBlbHNl
IGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5fYm9keVRleHQg
PSBib2R5XG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYmxvYiAmJiBCbG9iLnByb3RvdHlwZS5p
c1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgIHRoaXMuX2JvZHlCbG9iID0gYm9keVxuICAg
ICAgfSBlbHNlIGlmIChzdXBwb3J0LmZvcm1EYXRhICYmIEZvcm1EYXRhLnByb3RvdHlwZS5pc1By
b3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgIHRoaXMuX2JvZHlGb3JtRGF0YSA9IGJvZHlcbiAg
ICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnBy
b3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgIHRoaXMuX2JvZHlUZXh0ID0g
Ym9keS50b1N0cmluZygpXG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYg
c3VwcG9ydC5ibG9iICYmIGlzRGF0YVZpZXcoYm9keSkpIHtcbiAgICAgICAgdGhpcy5fYm9keUFy
cmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keS5idWZmZXIpXG4gICAgICAgIC8vIElFIDEwLTEx
IGNhbid0IGhhbmRsZSBhIERhdGFWaWV3IGJvZHkuXG4gICAgICAgIHRoaXMuX2JvZHlJbml0ID0g
bmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pXG4gICAgICB9IGVsc2UgaWYgKHN1cHBv
cnQuYXJyYXlCdWZmZXIgJiYgKEFycmF5QnVmZmVyLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJv
ZHkpIHx8IGlzQXJyYXlCdWZmZXJWaWV3KGJvZHkpKSkge1xuICAgICAgICB0aGlzLl9ib2R5QXJy
YXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCd1bnN1cHBvcnRlZCBCb2R5SW5pdCB0eXBlJylcbiAgICAgIH1cblxuICAg
ICAgaWYgKCF0aGlzLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSkge1xuICAgICAgICBpZiAo
dHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgn
Y29udGVudC10eXBlJywgJ3RleHQvcGxhaW47Y2hhcnNldD1VVEYtOCcpXG4gICAgICAgIH0gZWxz
ZSBpZiAodGhpcy5fYm9keUJsb2IgJiYgdGhpcy5fYm9keUJsb2IudHlwZSkge1xuICAgICAgICAg
IHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsIHRoaXMuX2JvZHlCbG9iLnR5cGUpXG4g
ICAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1z
LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgICAgdGhpcy5oZWFkZXJz
LnNldCgnY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtj
aGFyc2V0PVVURi04JylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdXBw
b3J0LmJsb2IpIHtcbiAgICAgIHRoaXMuYmxvYiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIg
cmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgICAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAg
ICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9ib2R5
QmxvYikge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUJsb2Ip
XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgICAg
cmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkp
XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIGJsb2InKVxuICAg
ICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2Io
W3RoaXMuX2JvZHlUZXh0XSkpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5hcnJh
eUJ1ZmZlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVy
KSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnN1bWVkKHRoaXMpIHx8IFByb21pc2UucmVzb2x2ZSh0
aGlzLl9ib2R5QXJyYXlCdWZmZXIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJu
IHRoaXMuYmxvYigpLnRoZW4ocmVhZEJsb2JBc0FycmF5QnVmZmVyKVxuICAgICAgICB9XG4gICAg
ICB9XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcmVq
ZWN0ZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICAgIHJl
dHVybiByZWplY3RlZFxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAg
ICAgICAgcmV0dXJuIHJlYWRCbG9iQXNUZXh0KHRoaXMuX2JvZHlCbG9iKVxuICAgICAgfSBlbHNl
IGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVz
b2x2ZShyZWFkQXJyYXlCdWZmZXJBc1RleHQodGhpcy5fYm9keUFycmF5QnVmZmVyKSlcbiAgICAg
IH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJv
cignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyB0ZXh0JylcbiAgICAgIH0gZWxzZSB7
XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keVRleHQpXG4gICAgICB9
XG4gICAgfVxuXG4gICAgaWYgKHN1cHBvcnQuZm9ybURhdGEpIHtcbiAgICAgIHRoaXMuZm9ybURh
dGEgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oZGVjb2Rl
KVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuanNvbiA9IGZ1bmN0aW9uKCkge1xuICAgICAg
cmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oSlNPTi5wYXJzZSlcbiAgICB9XG5cbiAgICByZXR1cm4g
dGhpc1xuICB9XG5cbiAgLy8gSFRUUCBtZXRob2RzIHdob3NlIGNhcGl0YWxpemF0aW9uIHNob3Vs
ZCBiZSBub3JtYWxpemVkXG4gIHZhciBtZXRob2RzID0gWydERUxFVEUnLCAnR0VUJywgJ0hFQUQn
LCAnT1BUSU9OUycsICdQT1NUJywgJ1BVVCddXG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplTWV0aG9k
KG1ldGhvZCkge1xuICAgIHZhciB1cGNhc2VkID0gbWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgICBy
ZXR1cm4gKG1ldGhvZHMuaW5kZXhPZih1cGNhc2VkKSA+IC0xKSA/IHVwY2FzZWQgOiBtZXRob2Rc
biAgfVxuXG4gIGZ1bmN0aW9uIFJlcXVlc3QoaW5wdXQsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25z
ID0gb3B0aW9ucyB8fCB7fVxuICAgIHZhciBib2R5ID0gb3B0aW9ucy5ib2R5XG5cbiAgICBpZiAo
aW5wdXQgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgICBpZiAoaW5wdXQuYm9keVVzZWQpIHtc
biAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQWxyZWFkeSByZWFkJylcbiAgICAgIH1cbiAg
ICAgIHRoaXMudXJsID0gaW5wdXQudXJsXG4gICAgICB0aGlzLmNyZWRlbnRpYWxzID0gaW5wdXQu
Y3JlZGVudGlhbHNcbiAgICAgIGlmICghb3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICAgIHRoaXMu
aGVhZGVycyA9IG5ldyBIZWFkZXJzKGlucHV0LmhlYWRlcnMpXG4gICAgICB9XG4gICAgICB0aGlz
Lm1ldGhvZCA9IGlucHV0Lm1ldGhvZFxuICAgICAgdGhpcy5tb2RlID0gaW5wdXQubW9kZVxuICAg
ICAgaWYgKCFib2R5ICYmIGlucHV0Ll9ib2R5SW5pdCAhPSBudWxsKSB7XG4gICAgICAgIGJvZHkg
PSBpbnB1dC5fYm9keUluaXRcbiAgICAgICAgaW5wdXQuYm9keVVzZWQgPSB0cnVlXG4gICAgICB9
XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXJsID0gU3RyaW5nKGlucHV0KVxuICAgIH1cblxu
ICAgIHRoaXMuY3JlZGVudGlhbHMgPSBvcHRpb25zLmNyZWRlbnRpYWxzIHx8IHRoaXMuY3JlZGVu
dGlhbHMgfHwgJ29taXQnXG4gICAgaWYgKG9wdGlvbnMuaGVhZGVycyB8fCAhdGhpcy5oZWFkZXJz
KSB7XG4gICAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpXG4g
ICAgfVxuICAgIHRoaXMubWV0aG9kID0gbm9ybWFsaXplTWV0aG9kKG9wdGlvbnMubWV0aG9kIHx8
IHRoaXMubWV0aG9kIHx8ICdHRVQnKVxuICAgIHRoaXMubW9kZSA9IG9wdGlvbnMubW9kZSB8fCB0
aGlzLm1vZGUgfHwgbnVsbFxuICAgIHRoaXMucmVmZXJyZXIgPSBudWxsXG5cbiAgICBpZiAoKHRo
aXMubWV0aG9kID09PSAnR0VUJyB8fCB0aGlzLm1ldGhvZCA9PT0gJ0hFQUQnKSAmJiBib2R5KSB7
XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb2R5IG5vdCBhbGxvd2VkIGZvciBHRVQgb3Ig
SEVBRCByZXF1ZXN0cycpXG4gICAgfVxuICAgIHRoaXMuX2luaXRCb2R5KGJvZHkpXG4gIH1cblxu
ICBSZXF1ZXN0LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcg
UmVxdWVzdCh0aGlzLCB7IGJvZHk6IHRoaXMuX2JvZHlJbml0IH0pXG4gIH1cblxuICBmdW5jdGlv
biBkZWNvZGUoYm9keSkge1xuICAgIHZhciBmb3JtID0gbmV3IEZvcm1EYXRhKClcbiAgICBib2R5
LnRyaW0oKS5zcGxpdCgnJicpLmZvckVhY2goZnVuY3Rpb24oYnl0ZXMpIHtcbiAgICAgIGlmIChi
eXRlcykge1xuICAgICAgICB2YXIgc3BsaXQgPSBieXRlcy5zcGxpdCgnPScpXG4gICAgICAgIHZh
ciBuYW1lID0gc3BsaXQuc2hpZnQoKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICB2YXIg
dmFsdWUgPSBzcGxpdC5qb2luKCc9JykucmVwbGFjZSgvXFwrL2csICcgJylcbiAgICAgICAgZm9y
bS5hcHBlbmQoZGVjb2RlVVJJQ29tcG9uZW50KG5hbWUpLCBkZWNvZGVVUklDb21wb25lbnQodmFs
dWUpKVxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIGZvcm1cbiAgfVxuXG4gIGZ1bmN0aW9u
IHBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKSB7XG4gICAgdmFyIGhlYWRlcnMgPSBuZXcgSGVhZGVy
cygpXG4gICAgcmF3SGVhZGVycy5zcGxpdCgvXFxyP1xcbi8pLmZvckVhY2goZnVuY3Rpb24obGlu
ZSkge1xuICAgICAgdmFyIHBhcnRzID0gbGluZS5zcGxpdCgnOicpXG4gICAgICB2YXIga2V5ID0g
cGFydHMuc2hpZnQoKS50cmltKClcbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgdmFyIHZhbHVl
ID0gcGFydHMuam9pbignOicpLnRyaW0oKVxuICAgICAgICBoZWFkZXJzLmFwcGVuZChrZXksIHZh
bHVlKVxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIGhlYWRlcnNcbiAgfVxuXG4gIEJvZHku
Y2FsbChSZXF1ZXN0LnByb3RvdHlwZSlcblxuICBmdW5jdGlvbiBSZXNwb25zZShib2R5SW5pdCwg
b3B0aW9ucykge1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgb3B0aW9ucyA9IHt9XG4gICAg
fVxuXG4gICAgdGhpcy50eXBlID0gJ2RlZmF1bHQnXG4gICAgdGhpcy5zdGF0dXMgPSAnc3RhdHVz
JyBpbiBvcHRpb25zID8gb3B0aW9ucy5zdGF0dXMgOiAyMDBcbiAgICB0aGlzLm9rID0gdGhpcy5z
dGF0dXMgPj0gMjAwICYmIHRoaXMuc3RhdHVzIDwgMzAwXG4gICAgdGhpcy5zdGF0dXNUZXh0ID0g
J3N0YXR1c1RleHQnIGluIG9wdGlvbnMgPyBvcHRpb25zLnN0YXR1c1RleHQgOiAnT0snXG4gICAg
dGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVxuICAgIHRoaXMudXJs
ID0gb3B0aW9ucy51cmwgfHwgJydcbiAgICB0aGlzLl9pbml0Qm9keShib2R5SW5pdClcbiAgfVxu
XG4gIEJvZHkuY2FsbChSZXNwb25zZS5wcm90b3R5cGUpXG5cbiAgUmVzcG9uc2UucHJvdG90eXBl
LmNsb25lID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZSh0aGlzLl9ib2R5
SW5pdCwge1xuICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICAgIHN0YXR1c1RleHQ6IHRo
aXMuc3RhdHVzVGV4dCxcbiAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHRoaXMuaGVhZGVycyks
XG4gICAgICB1cmw6IHRoaXMudXJsXG4gICAgfSlcbiAgfVxuXG4gIFJlc3BvbnNlLmVycm9yID0g
ZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKG51bGwsIHtzdGF0
dXM6IDAsIHN0YXR1c1RleHQ6ICcnfSlcbiAgICByZXNwb25zZS50eXBlID0gJ2Vycm9yJ1xuICAg
IHJldHVybiByZXNwb25zZVxuICB9XG5cbiAgdmFyIHJlZGlyZWN0U3RhdHVzZXMgPSBbMzAxLCAz
MDIsIDMwMywgMzA3LCAzMDhdXG5cbiAgUmVzcG9uc2UucmVkaXJlY3QgPSBmdW5jdGlvbih1cmws
IHN0YXR1cykge1xuICAgIGlmIChyZWRpcmVjdFN0YXR1c2VzLmluZGV4T2Yoc3RhdHVzKSA9PT0g
LTEpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHN0YXR1cyBjb2RlJylc
biAgICB9XG5cbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHtzdGF0dXM6IHN0YXR1cywg
aGVhZGVyczoge2xvY2F0aW9uOiB1cmx9fSlcbiAgfVxuXG4gIHNlbGYuSGVhZGVycyA9IEhlYWRl
cnNcbiAgc2VsZi5SZXF1ZXN0ID0gUmVxdWVzdFxuICBzZWxmLlJlc3BvbnNlID0gUmVzcG9uc2Vc
blxuICBzZWxmLmZldGNoID0gZnVuY3Rpb24oaW5wdXQsIGluaXQpIHtcbiAgICByZXR1cm4gbmV3
IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcmVxdWVzdCA9
IG5ldyBSZXF1ZXN0KGlucHV0LCBpbml0KVxuICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVx
dWVzdCgpXG5cbiAgICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG9w
dGlvbnMgPSB7XG4gICAgICAgICAgc3RhdHVzOiB4aHIuc3RhdHVzLFxuICAgICAgICAgIHN0YXR1
c1RleHQ6IHhoci5zdGF0dXNUZXh0LFxuICAgICAgICAgIGhlYWRlcnM6IHBhcnNlSGVhZGVycyh4
aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkgfHwgJycpXG4gICAgICAgIH1cbiAgICAgICAgb3B0
aW9ucy51cmwgPSAncmVzcG9uc2VVUkwnIGluIHhociA/IHhoci5yZXNwb25zZVVSTCA6IG9wdGlv
bnMuaGVhZGVycy5nZXQoJ1gtUmVxdWVzdC1VUkwnKVxuICAgICAgICB2YXIgYm9keSA9ICdyZXNw
b25zZScgaW4geGhyID8geGhyLnJlc3BvbnNlIDogeGhyLnJlc3BvbnNlVGV4dFxuICAgICAgICBy
ZXNvbHZlKG5ldyBSZXNwb25zZShib2R5LCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgeGhy
Lm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05l
dHdvcmsgcmVxdWVzdCBmYWlsZWQnKSlcbiAgICAgIH1cblxuICAgICAgeGhyLm9udGltZW91dCA9
IGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1
ZXN0IGZhaWxlZCcpKVxuICAgICAgfVxuXG4gICAgICB4aHIub3BlbihyZXF1ZXN0Lm1ldGhvZCwg
cmVxdWVzdC51cmwsIHRydWUpXG5cbiAgICAgIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAn
aW5jbHVkZScpIHtcbiAgICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWVcbiAgICAgIH1c
blxuICAgICAgaWYgKCdyZXNwb25zZVR5cGUnIGluIHhociAmJiBzdXBwb3J0LmJsb2IpIHtcbiAg
ICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdibG9iJ1xuICAgICAgfVxuXG4gICAgICByZXF1ZXN0
LmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICB4aHIuc2V0
UmVxdWVzdEhlYWRlcihuYW1lLCB2YWx1ZSlcbiAgICAgIH0pXG5cbiAgICAgIHhoci5zZW5kKHR5
cGVvZiByZXF1ZXN0Ll9ib2R5SW5pdCA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogcmVxdWVzdC5f
Ym9keUluaXQpXG4gICAgfSlcbiAgfVxuICBzZWxmLmZldGNoLnBvbHlmaWxsID0gdHJ1ZVxufSko
dHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHRoaXMpO1xuXG5cblxuLy8vLy8v
Ly8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvd2hhdHdn
LWZldGNoL2ZldGNoLmpzXG4vLyBtb2R1bGUgaWQgPSAxMDJcbi8vIG1vZHVsZSBjaHVua3MgPSAw
IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAncmVh
Y3QtZG9tJ1xuaW1wb3J0IHsgY3JlYXRlU3RvcmUgfSBmcm9tICdyZWR1eCdcbmltcG9ydCB7IFBy
b3ZpZGVyIH0gZnJvbSAncmVhY3QtcmVkdXgnXG5pbXBvcnQgQXBwIGZyb20gJy4vY29udGFpbmVy
cy9BcHAnXG5pbXBvcnQgcmVkdWNlciBmcm9tICcuL3JlZHVjZXJzJ1xuaW1wb3J0ICd0b2RvbXZj
LWFwcC1jc3MvaW5kZXguY3NzJ1xuXG5jb25zdCBzdG9yZSA9IGNyZWF0ZVN0b3JlKHJlZHVjZXIp
XG5cbnJlbmRlcihcbiAgPFByb3ZpZGVyIHN0b3JlPXtzdG9yZX0+XG4gICAgPEFwcCAvPlxuICA8
L1Byb3ZpZGVyPixcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jvb3QnKVxuKVxuXG5cblxu
Ly8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2luZGV4LmpzIiwiLyoqXG4gKiBDb3B5cmln
aHQgMjAxNC0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAq
XG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGlj
ZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkg
b2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJp
Z2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3Rv
cnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBGb3JrZWQgZnJvbSBmYmpz
L3dhcm5pbmc6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmJqcy9ibG9iL2U2NmJh
MjBhZDViZTQzM2ViNTQ0MjNmMmIwOTdkODI5MzI0ZDlkZTYvcGFja2FnZXMvZmJqcy9zcmMvX19m
b3Jrc19fL3dhcm5pbmcuanNcbiAqXG4gKiBPbmx5IGNoYW5nZSBpcyB3ZSB1c2UgY29uc29sZS53
YXJuIGluc3RlYWQgb2YgY29uc29sZS5lcnJvcixcbiAqIGFuZCBkbyBub3RoaW5nIHdoZW4gJ2Nv
bnNvbGUnIGlzIG5vdCBzdXBwb3J0ZWQuXG4gKiBUaGlzIHJlYWxseSBzaW1wbGlmaWVzIHRoZSBj
b2RlLlxuICogLS0tXG4gKiBTaW1pbGFyIHRvIGludmFyaWFudCBidXQgb25seSBsb2dzIGEgd2Fy
bmluZyBpZiB0aGUgY29uZGl0aW9uIGlzIG5vdCBtZXQuXG4gKiBUaGlzIGNhbiBiZSB1c2VkIHRv
IGxvZyBpc3N1ZXMgaW4gZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzIGluIGNyaXRpY2FsXG4gKiBw
YXRocy4gUmVtb3ZpbmcgdGhlIGxvZ2dpbmcgY29kZSBmb3IgcHJvZHVjdGlvbiBlbnZpcm9ubWVu
dHMgd2lsbCBrZWVwIHRoZVxuICogc2FtZSBsb2dpYyBhbmQgZm9sbG93IHRoZSBzYW1lIGNvZGUg
cGF0aHMuXG4gKi9cblxudmFyIGxvd1ByaW9yaXR5V2FybmluZyA9IGZ1bmN0aW9uICgpIHt9O1xu
XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgcHJp
bnRXYXJuaW5nID0gZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1
bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5
ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1
bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgdmFyIGFyZ0luZGV4ID0gMDtcbiAgICB2YXIgbWVz
c2FnZSA9ICdXYXJuaW5nOiAnICsgZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uICgpIHtc
biAgICAgIHJldHVybiBhcmdzW2FyZ0luZGV4KytdO1xuICAgIH0pO1xuICAgIGlmICh0eXBlb2Yg
Y29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUud2FybihtZXNzYWdlKTtc
biAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFj
dCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNv
IHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNp
dGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJy
b3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfTtcblxuICBsb3dQcmlvcml0eVdh
cm5pbmcgPSBmdW5jdGlvbiAoY29uZGl0aW9uLCBmb3JtYXQpIHtcbiAgICBpZiAoZm9ybWF0ID09
PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYHdhcm5pbmcoY29uZGl0aW9u
LCBmb3JtYXQsIC4uLmFyZ3MpYCByZXF1aXJlcyBhIHdhcm5pbmcgJyArICdtZXNzYWdlIGFyZ3Vt
ZW50Jyk7XG4gICAgfVxuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICBmb3IgKHZhciBfbGVu
MiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuMiA+IDIgPyBfbGVuMiAtIDIg
OiAwKSwgX2tleTIgPSAyOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgIGFyZ3Nb
X2tleTIgLSAyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICB9XG5cbiAgICAgIHByaW50V2Fy
bmluZy5hcHBseSh1bmRlZmluZWQsIFtmb3JtYXRdLmNvbmNhdChhcmdzKSk7XG4gICAgfVxuICB9
O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxvd1ByaW9yaXR5V2FybmluZztcblxuXG4vLy8vLy8v
Ly8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9yZWFjdC9s
aWIvbG93UHJpb3JpdHlXYXJuaW5nLmpzXG4vLyBtb2R1bGUgaWQgPSAxMDRcbi8vIG1vZHVsZSBj
aHVua3MgPSAwIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5j
LlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxp
Y2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VO
U0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRk
aXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBB
VEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0
JztcblxudmFyIFBvb2xlZENsYXNzID0gcmVxdWlyZSgnLi9Qb29sZWRDbGFzcycpO1xudmFyIFJl
YWN0RWxlbWVudCA9IHJlcXVpcmUoJy4vUmVhY3RFbGVtZW50Jyk7XG5cbnZhciBlbXB0eUZ1bmN0
aW9uID0gcmVxdWlyZSgnZmJqcy9saWIvZW1wdHlGdW5jdGlvbicpO1xudmFyIHRyYXZlcnNlQWxs
Q2hpbGRyZW4gPSByZXF1aXJlKCcuL3RyYXZlcnNlQWxsQ2hpbGRyZW4nKTtcblxudmFyIHR3b0Fy
Z3VtZW50UG9vbGVyID0gUG9vbGVkQ2xhc3MudHdvQXJndW1lbnRQb29sZXI7XG52YXIgZm91ckFy
Z3VtZW50UG9vbGVyID0gUG9vbGVkQ2xhc3MuZm91ckFyZ3VtZW50UG9vbGVyO1xuXG52YXIgdXNl
clByb3ZpZGVkS2V5RXNjYXBlUmVnZXggPSAvXFwvKy9nO1xuZnVuY3Rpb24gZXNjYXBlVXNlclBy
b3ZpZGVkS2V5KHRleHQpIHtcbiAgcmV0dXJuICgnJyArIHRleHQpLnJlcGxhY2UodXNlclByb3Zp
ZGVkS2V5RXNjYXBlUmVnZXgsICckJi8nKTtcbn1cblxuLyoqXG4gKiBQb29sZWRDbGFzcyByZXBy
ZXNlbnRpbmcgdGhlIGJvb2trZWVwaW5nIGFzc29jaWF0ZWQgd2l0aCBwZXJmb3JtaW5nIGEgY2hp
bGRcbiAqIHRyYXZlcnNhbC4gQWxsb3dzIGF2b2lkaW5nIGJpbmRpbmcgY2FsbGJhY2tzLlxuICpc
biAqIEBjb25zdHJ1Y3RvciBGb3JFYWNoQm9va0tlZXBpbmdcbiAqIEBwYXJhbSB7IWZ1bmN0aW9u
fSBmb3JFYWNoRnVuY3Rpb24gRnVuY3Rpb24gdG8gcGVyZm9ybSB0cmF2ZXJzYWwgd2l0aC5cbiAq
IEBwYXJhbSB7Pyp9IGZvckVhY2hDb250ZXh0IENvbnRleHQgdG8gcGVyZm9ybSBjb250ZXh0IHdp
dGguXG4gKi9cbmZ1bmN0aW9uIEZvckVhY2hCb29rS2VlcGluZyhmb3JFYWNoRnVuY3Rpb24sIGZv
ckVhY2hDb250ZXh0KSB7XG4gIHRoaXMuZnVuYyA9IGZvckVhY2hGdW5jdGlvbjtcbiAgdGhpcy5j
b250ZXh0ID0gZm9yRWFjaENvbnRleHQ7XG4gIHRoaXMuY291bnQgPSAwO1xufVxuRm9yRWFjaEJv
b2tLZWVwaW5nLnByb3RvdHlwZS5kZXN0cnVjdG9yID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmZ1
bmMgPSBudWxsO1xuICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICB0aGlzLmNvdW50ID0gMDtcbn07
XG5Qb29sZWRDbGFzcy5hZGRQb29saW5nVG8oRm9yRWFjaEJvb2tLZWVwaW5nLCB0d29Bcmd1bWVu
dFBvb2xlcik7XG5cbmZ1bmN0aW9uIGZvckVhY2hTaW5nbGVDaGlsZChib29rS2VlcGluZywgY2hp
bGQsIG5hbWUpIHtcbiAgdmFyIGZ1bmMgPSBib29rS2VlcGluZy5mdW5jLFxuICAgICAgY29udGV4
dCA9IGJvb2tLZWVwaW5nLmNvbnRleHQ7XG5cbiAgZnVuYy5jYWxsKGNvbnRleHQsIGNoaWxkLCBi
b29rS2VlcGluZy5jb3VudCsrKTtcbn1cblxuLyoqXG4gKiBJdGVyYXRlcyB0aHJvdWdoIGNoaWxk
cmVuIHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYC5cbiAq
XG4gKiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy90b3AtbGV2ZWwt
YXBpLmh0bWwjcmVhY3QuY2hpbGRyZW4uZm9yZWFjaFxuICpcbiAqIFRoZSBwcm92aWRlZCBmb3JF
YWNoRnVuYyhjaGlsZCwgaW5kZXgpIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoXG4gKiBsZWFmIGNo
aWxkLlxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVy
LlxuICogQHBhcmFtIHtmdW5jdGlvbigqLCBpbnQpfSBmb3JFYWNoRnVuY1xuICogQHBhcmFtIHsq
fSBmb3JFYWNoQ29udGV4dCBDb250ZXh0IGZvciBmb3JFYWNoQ29udGV4dC5cbiAqL1xuZnVuY3Rp
b24gZm9yRWFjaENoaWxkcmVuKGNoaWxkcmVuLCBmb3JFYWNoRnVuYywgZm9yRWFjaENvbnRleHQp
IHtcbiAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1c
biAgdmFyIHRyYXZlcnNlQ29udGV4dCA9IEZvckVhY2hCb29rS2VlcGluZy5nZXRQb29sZWQoZm9y
RWFjaEZ1bmMsIGZvckVhY2hDb250ZXh0KTtcbiAgdHJhdmVyc2VBbGxDaGlsZHJlbihjaGlsZHJl
biwgZm9yRWFjaFNpbmdsZUNoaWxkLCB0cmF2ZXJzZUNvbnRleHQpO1xuICBGb3JFYWNoQm9va0tl
ZXBpbmcucmVsZWFzZSh0cmF2ZXJzZUNvbnRleHQpO1xufVxuXG4vKipcbiAqIFBvb2xlZENsYXNz
IHJlcHJlc2VudGluZyB0aGUgYm9va2tlZXBpbmcgYXNzb2NpYXRlZCB3aXRoIHBlcmZvcm1pbmcg
YSBjaGlsZFxuICogbWFwcGluZy4gQWxsb3dzIGF2b2lkaW5nIGJpbmRpbmcgY2FsbGJhY2tzLlxu
ICpcbiAqIEBjb25zdHJ1Y3RvciBNYXBCb29rS2VlcGluZ1xuICogQHBhcmFtIHshKn0gbWFwUmVz
dWx0IE9iamVjdCBjb250YWluaW5nIHRoZSBvcmRlcmVkIG1hcCBvZiByZXN1bHRzLlxuICogQHBh
cmFtIHshZnVuY3Rpb259IG1hcEZ1bmN0aW9uIEZ1bmN0aW9uIHRvIHBlcmZvcm0gbWFwcGluZyB3
aXRoLlxuICogQHBhcmFtIHs/Kn0gbWFwQ29udGV4dCBDb250ZXh0IHRvIHBlcmZvcm0gbWFwcGlu
ZyB3aXRoLlxuICovXG5mdW5jdGlvbiBNYXBCb29rS2VlcGluZyhtYXBSZXN1bHQsIGtleVByZWZp
eCwgbWFwRnVuY3Rpb24sIG1hcENvbnRleHQpIHtcbiAgdGhpcy5yZXN1bHQgPSBtYXBSZXN1bHQ7
XG4gIHRoaXMua2V5UHJlZml4ID0ga2V5UHJlZml4O1xuICB0aGlzLmZ1bmMgPSBtYXBGdW5jdGlv
bjtcbiAgdGhpcy5jb250ZXh0ID0gbWFwQ29udGV4dDtcbiAgdGhpcy5jb3VudCA9IDA7XG59XG5N
YXBCb29rS2VlcGluZy5wcm90b3R5cGUuZGVzdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHtcbiAgdGhp
cy5yZXN1bHQgPSBudWxsO1xuICB0aGlzLmtleVByZWZpeCA9IG51bGw7XG4gIHRoaXMuZnVuYyA9
IG51bGw7XG4gIHRoaXMuY29udGV4dCA9IG51bGw7XG4gIHRoaXMuY291bnQgPSAwO1xufTtcblBv
b2xlZENsYXNzLmFkZFBvb2xpbmdUbyhNYXBCb29rS2VlcGluZywgZm91ckFyZ3VtZW50UG9vbGVy
KTtcblxuZnVuY3Rpb24gbWFwU2luZ2xlQ2hpbGRJbnRvQ29udGV4dChib29rS2VlcGluZywgY2hp
bGQsIGNoaWxkS2V5KSB7XG4gIHZhciByZXN1bHQgPSBib29rS2VlcGluZy5yZXN1bHQsXG4gICAg
ICBrZXlQcmVmaXggPSBib29rS2VlcGluZy5rZXlQcmVmaXgsXG4gICAgICBmdW5jID0gYm9va0tl
ZXBpbmcuZnVuYyxcbiAgICAgIGNvbnRleHQgPSBib29rS2VlcGluZy5jb250ZXh0O1xuXG5cbiAg
dmFyIG1hcHBlZENoaWxkID0gZnVuYy5jYWxsKGNvbnRleHQsIGNoaWxkLCBib29rS2VlcGluZy5j
b3VudCsrKTtcbiAgaWYgKEFycmF5LmlzQXJyYXkobWFwcGVkQ2hpbGQpKSB7XG4gICAgbWFwSW50
b1dpdGhLZXlQcmVmaXhJbnRlcm5hbChtYXBwZWRDaGlsZCwgcmVzdWx0LCBjaGlsZEtleSwgZW1w
dHlGdW5jdGlvbi50aGF0UmV0dXJuc0FyZ3VtZW50KTtcbiAgfSBlbHNlIGlmIChtYXBwZWRDaGls
ZCAhPSBudWxsKSB7XG4gICAgaWYgKFJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudChtYXBwZWRD
aGlsZCkpIHtcbiAgICAgIG1hcHBlZENoaWxkID0gUmVhY3RFbGVtZW50LmNsb25lQW5kUmVwbGFj
ZUtleShtYXBwZWRDaGlsZCxcbiAgICAgIC8vIEtlZXAgYm90aCB0aGUgKG1hcHBlZCkgYW5kIG9s
ZCBrZXlzIGlmIHRoZXkgZGlmZmVyLCBqdXN0IGFzXG4gICAgICAvLyB0cmF2ZXJzZUFsbENoaWxk
cmVuIHVzZWQgdG8gZG8gZm9yIG9iamVjdHMgYXMgY2hpbGRyZW5cbiAgICAgIGtleVByZWZpeCAr
IChtYXBwZWRDaGlsZC5rZXkgJiYgKCFjaGlsZCB8fCBjaGlsZC5rZXkgIT09IG1hcHBlZENoaWxk
LmtleSkgPyBlc2NhcGVVc2VyUHJvdmlkZWRLZXkobWFwcGVkQ2hpbGQua2V5KSArICcvJyA6ICcn
KSArIGNoaWxkS2V5KTtcbiAgICB9XG4gICAgcmVzdWx0LnB1c2gobWFwcGVkQ2hpbGQpO1xuICB9
XG59XG5cbmZ1bmN0aW9uIG1hcEludG9XaXRoS2V5UHJlZml4SW50ZXJuYWwoY2hpbGRyZW4sIGFy
cmF5LCBwcmVmaXgsIGZ1bmMsIGNvbnRleHQpIHtcbiAgdmFyIGVzY2FwZWRQcmVmaXggPSAnJztc
biAgaWYgKHByZWZpeCAhPSBudWxsKSB7XG4gICAgZXNjYXBlZFByZWZpeCA9IGVzY2FwZVVzZXJQ
cm92aWRlZEtleShwcmVmaXgpICsgJy8nO1xuICB9XG4gIHZhciB0cmF2ZXJzZUNvbnRleHQgPSBN
YXBCb29rS2VlcGluZy5nZXRQb29sZWQoYXJyYXksIGVzY2FwZWRQcmVmaXgsIGZ1bmMsIGNvbnRl
eHQpO1xuICB0cmF2ZXJzZUFsbENoaWxkcmVuKGNoaWxkcmVuLCBtYXBTaW5nbGVDaGlsZEludG9D
b250ZXh0LCB0cmF2ZXJzZUNvbnRleHQpO1xuICBNYXBCb29rS2VlcGluZy5yZWxlYXNlKHRyYXZl
cnNlQ29udGV4dCk7XG59XG5cbi8qKlxuICogTWFwcyBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2Fs
bHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAuXG4gKlxuICogU2VlIGh0dHBzOi8vZmFj
ZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0LmNoaWxk
cmVuLm1hcFxuICpcbiAqIFRoZSBwcm92aWRlZCBtYXBGdW5jdGlvbihjaGlsZCwga2V5LCBpbmRl
eCkgd2lsbCBiZSBjYWxsZWQgZm9yIGVhY2hcbiAqIGxlYWYgY2hpbGQuXG4gKlxuICogQHBhcmFt
IHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcGFyYW0ge2Z1bmN0
aW9uKCosIGludCl9IGZ1bmMgVGhlIG1hcCBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4
dCBDb250ZXh0IGZvciBtYXBGdW5jdGlvbi5cbiAqIEByZXR1cm4ge29iamVjdH0gT2JqZWN0IGNv
bnRhaW5pbmcgdGhlIG9yZGVyZWQgbWFwIG9mIHJlc3VsdHMuXG4gKi9cbmZ1bmN0aW9uIG1hcENo
aWxkcmVuKGNoaWxkcmVuLCBmdW5jLCBjb250ZXh0KSB7XG4gIGlmIChjaGlsZHJlbiA9PSBudWxs
KSB7XG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgbWFw
SW50b1dpdGhLZXlQcmVmaXhJbnRlcm5hbChjaGlsZHJlbiwgcmVzdWx0LCBudWxsLCBmdW5jLCBj
b250ZXh0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZm9yRWFjaFNpbmdsZUNo
aWxkRHVtbXkodHJhdmVyc2VDb250ZXh0LCBjaGlsZCwgbmFtZSkge1xuICByZXR1cm4gbnVsbDtc
bn1cblxuLyoqXG4gKiBDb3VudCB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGlj
YWxseSBzcGVjaWZpZWQgYXNcbiAqIGBwcm9wcy5jaGlsZHJlbmAuXG4gKlxuICogU2VlIGh0dHBz
Oi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0
LmNoaWxkcmVuLmNvdW50XG4gKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJl
ZSBjb250YWluZXIuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgY2hpbGRyZW4u
XG4gKi9cbmZ1bmN0aW9uIGNvdW50Q2hpbGRyZW4oY2hpbGRyZW4sIGNvbnRleHQpIHtcbiAgcmV0
dXJuIHRyYXZlcnNlQWxsQ2hpbGRyZW4oY2hpbGRyZW4sIGZvckVhY2hTaW5nbGVDaGlsZER1bW15
LCBudWxsKTtcbn1cblxuLyoqXG4gKiBGbGF0dGVuIGEgY2hpbGRyZW4gb2JqZWN0ICh0eXBpY2Fs
bHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmApIGFuZFxuICogcmV0dXJuIGFuIGFycmF5
IHdpdGggYXBwcm9wcmlhdGVseSByZS1rZXllZCBjaGlsZHJlbi5cbiAqXG4gKiBTZWUgaHR0cHM6
Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy90b3AtbGV2ZWwtYXBpLmh0bWwjcmVhY3Qu
Y2hpbGRyZW4udG9hcnJheVxuICovXG5mdW5jdGlvbiB0b0FycmF5KGNoaWxkcmVuKSB7XG4gIHZh
ciByZXN1bHQgPSBbXTtcbiAgbWFwSW50b1dpdGhLZXlQcmVmaXhJbnRlcm5hbChjaGlsZHJlbiwg
cmVzdWx0LCBudWxsLCBlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zQXJndW1lbnQpO1xuICByZXR1
cm4gcmVzdWx0O1xufVxuXG52YXIgUmVhY3RDaGlsZHJlbiA9IHtcbiAgZm9yRWFjaDogZm9yRWFj
aENoaWxkcmVuLFxuICBtYXA6IG1hcENoaWxkcmVuLFxuICBtYXBJbnRvV2l0aEtleVByZWZpeElu
dGVybmFsOiBtYXBJbnRvV2l0aEtleVByZWZpeEludGVybmFsLFxuICBjb3VudDogY291bnRDaGls
ZHJlbixcbiAgdG9BcnJheTogdG9BcnJheVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdENo
aWxkcmVuO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4v
bm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdENoaWxkcmVuLmpzXG4vLyBtb2R1bGUgaWQgPSAx
MDVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50
LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNv
dXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBp
biB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3Vy
Y2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUg
Zm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICog
XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3Byb2RJbnZhcmlhbnQgPSByZXF1aXJlKCcu
L3JlYWN0UHJvZEludmFyaWFudCcpO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9s
aWIvaW52YXJpYW50Jyk7XG5cbi8qKlxuICogU3RhdGljIHBvb2xlcnMuIFNldmVyYWwgY3VzdG9t
IHZlcnNpb25zIGZvciBlYWNoIHBvdGVudGlhbCBudW1iZXIgb2ZcbiAqIGFyZ3VtZW50cy4gQSBj
b21wbGV0ZWx5IGdlbmVyaWMgcG9vbGVyIGlzIGVhc3kgdG8gaW1wbGVtZW50LCBidXQgd291bGRc
biAqIHJlcXVpcmUgYWNjZXNzaW5nIHRoZSBgYXJndW1lbnRzYCBvYmplY3QuIEluIGVhY2ggb2Yg
dGhlc2UsIGB0aGlzYCByZWZlcnMgdG9cbiAqIHRoZSBDbGFzcyBpdHNlbGYsIG5vdCBhbiBpbnN0
YW5jZS4gSWYgYW55IG90aGVycyBhcmUgbmVlZGVkLCBzaW1wbHkgYWRkIHRoZW1cbiAqIGhlcmUs
IG9yIGluIHRoZWlyIG93biBmaWxlcy5cbiAqL1xudmFyIG9uZUFyZ3VtZW50UG9vbGVyID0gZnVu
Y3Rpb24gKGNvcHlGaWVsZHNGcm9tKSB7XG4gIHZhciBLbGFzcyA9IHRoaXM7XG4gIGlmIChLbGFz
cy5pbnN0YW5jZVBvb2wubGVuZ3RoKSB7XG4gICAgdmFyIGluc3RhbmNlID0gS2xhc3MuaW5zdGFu
Y2VQb29sLnBvcCgpO1xuICAgIEtsYXNzLmNhbGwoaW5zdGFuY2UsIGNvcHlGaWVsZHNGcm9tKTtc
biAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBLbGFzcyhj
b3B5RmllbGRzRnJvbSk7XG4gIH1cbn07XG5cbnZhciB0d29Bcmd1bWVudFBvb2xlciA9IGZ1bmN0
aW9uIChhMSwgYTIpIHtcbiAgdmFyIEtsYXNzID0gdGhpcztcbiAgaWYgKEtsYXNzLmluc3RhbmNl
UG9vbC5sZW5ndGgpIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBLbGFzcy5pbnN0YW5jZVBvb2wucG9w
KCk7XG4gICAgS2xhc3MuY2FsbChpbnN0YW5jZSwgYTEsIGEyKTtcbiAgICByZXR1cm4gaW5zdGFu
Y2U7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBLbGFzcyhhMSwgYTIpO1xuICB9XG59O1xu
XG52YXIgdGhyZWVBcmd1bWVudFBvb2xlciA9IGZ1bmN0aW9uIChhMSwgYTIsIGEzKSB7XG4gIHZh
ciBLbGFzcyA9IHRoaXM7XG4gIGlmIChLbGFzcy5pbnN0YW5jZVBvb2wubGVuZ3RoKSB7XG4gICAg
dmFyIGluc3RhbmNlID0gS2xhc3MuaW5zdGFuY2VQb29sLnBvcCgpO1xuICAgIEtsYXNzLmNhbGwo
aW5zdGFuY2UsIGExLCBhMiwgYTMpO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfSBlbHNlIHtc
biAgICByZXR1cm4gbmV3IEtsYXNzKGExLCBhMiwgYTMpO1xuICB9XG59O1xuXG52YXIgZm91ckFy
Z3VtZW50UG9vbGVyID0gZnVuY3Rpb24gKGExLCBhMiwgYTMsIGE0KSB7XG4gIHZhciBLbGFzcyA9
IHRoaXM7XG4gIGlmIChLbGFzcy5pbnN0YW5jZVBvb2wubGVuZ3RoKSB7XG4gICAgdmFyIGluc3Rh
bmNlID0gS2xhc3MuaW5zdGFuY2VQb29sLnBvcCgpO1xuICAgIEtsYXNzLmNhbGwoaW5zdGFuY2Us
IGExLCBhMiwgYTMsIGE0KTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH0gZWxzZSB7XG4gICAg
cmV0dXJuIG5ldyBLbGFzcyhhMSwgYTIsIGEzLCBhNCk7XG4gIH1cbn07XG5cbnZhciBzdGFuZGFy
ZFJlbGVhc2VyID0gZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gIHZhciBLbGFzcyA9IHRoaXM7XG4g
ICEoaW5zdGFuY2UgaW5zdGFuY2VvZiBLbGFzcykgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0g
J3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnVHJ5aW5nIHRvIHJlbGVhc2UgYW4gaW5z
dGFuY2UgaW50byBhIHBvb2wgb2YgYSBkaWZmZXJlbnQgdHlwZS4nKSA6IF9wcm9kSW52YXJpYW50
KCcyNScpIDogdm9pZCAwO1xuICBpbnN0YW5jZS5kZXN0cnVjdG9yKCk7XG4gIGlmIChLbGFzcy5p
bnN0YW5jZVBvb2wubGVuZ3RoIDwgS2xhc3MucG9vbFNpemUpIHtcbiAgICBLbGFzcy5pbnN0YW5j
ZVBvb2wucHVzaChpbnN0YW5jZSk7XG4gIH1cbn07XG5cbnZhciBERUZBVUxUX1BPT0xfU0laRSA9
IDEwO1xudmFyIERFRkFVTFRfUE9PTEVSID0gb25lQXJndW1lbnRQb29sZXI7XG5cbi8qKlxuICog
QXVnbWVudHMgYENvcHlDb25zdHJ1Y3RvcmAgdG8gYmUgYSBwb29sYWJsZSBjbGFzcywgYXVnbWVu
dGluZyBvbmx5IHRoZSBjbGFzc1xuICogaXRzZWxmIChzdGF0aWNhbGx5KSBub3QgYWRkaW5nIGFu
eSBwcm90b3R5cGljYWwgZmllbGRzLiBBbnkgQ29weUNvbnN0cnVjdG9yXG4gKiB5b3UgZ2l2ZSB0
aGlzIG1heSBoYXZlIGEgYHBvb2xTaXplYCBwcm9wZXJ0eSwgYW5kIHdpbGwgbG9vayBmb3IgYVxu
ICogcHJvdG90eXBpY2FsIGBkZXN0cnVjdG9yYCBvbiBpbnN0YW5jZXMuXG4gKlxuICogQHBhcmFt
IHtGdW5jdGlvbn0gQ29weUNvbnN0cnVjdG9yIENvbnN0cnVjdG9yIHRoYXQgY2FuIGJlIHVzZWQg
dG8gcmVzZXQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwb29sZXIgQ3VzdG9taXphYmxlIHBvb2xl
ci5cbiAqL1xudmFyIGFkZFBvb2xpbmdUbyA9IGZ1bmN0aW9uIChDb3B5Q29uc3RydWN0b3IsIHBv
b2xlcikge1xuICAvLyBDYXN0aW5nIGFzIGFueSBzbyB0aGF0IGZsb3cgaWdub3JlcyB0aGUgYWN0
dWFsIGltcGxlbWVudGF0aW9uIGFuZCB0cnVzdHNcbiAgLy8gaXQgdG8gbWF0Y2ggdGhlIHR5cGUg
d2UgZGVjbGFyZWRcbiAgdmFyIE5ld0tsYXNzID0gQ29weUNvbnN0cnVjdG9yO1xuICBOZXdLbGFz
cy5pbnN0YW5jZVBvb2wgPSBbXTtcbiAgTmV3S2xhc3MuZ2V0UG9vbGVkID0gcG9vbGVyIHx8IERF
RkFVTFRfUE9PTEVSO1xuICBpZiAoIU5ld0tsYXNzLnBvb2xTaXplKSB7XG4gICAgTmV3S2xhc3Mu
cG9vbFNpemUgPSBERUZBVUxUX1BPT0xfU0laRTtcbiAgfVxuICBOZXdLbGFzcy5yZWxlYXNlID0g
c3RhbmRhcmRSZWxlYXNlcjtcbiAgcmV0dXJuIE5ld0tsYXNzO1xufTtcblxudmFyIFBvb2xlZENs
YXNzID0ge1xuICBhZGRQb29saW5nVG86IGFkZFBvb2xpbmdUbyxcbiAgb25lQXJndW1lbnRQb29s
ZXI6IG9uZUFyZ3VtZW50UG9vbGVyLFxuICB0d29Bcmd1bWVudFBvb2xlcjogdHdvQXJndW1lbnRQ
b29sZXIsXG4gIHRocmVlQXJndW1lbnRQb29sZXI6IHRocmVlQXJndW1lbnRQb29sZXIsXG4gIGZv
dXJBcmd1bWVudFBvb2xlcjogZm91ckFyZ3VtZW50UG9vbGVyXG59O1xuXG5tb2R1bGUuZXhwb3J0
cyA9IFBvb2xlZENsYXNzO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09U
RVJcbi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9Qb29sZWRDbGFzcy5qc1xuLy8gbW9kdWxl
IGlkID0gMTA2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMt
cHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICog
VGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2Ug
Zm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRo
aXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMg
Y2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5Llxu
ICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfcHJvZEludmFyaWFudCA9IHJlcXVpcmUo
Jy4vcmVhY3RQcm9kSW52YXJpYW50Jyk7XG5cbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IHJlcXVp
cmUoJy4vUmVhY3RDdXJyZW50T3duZXInKTtcbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSByZXF1
aXJlKCcuL1JlYWN0RWxlbWVudFN5bWJvbCcpO1xuXG52YXIgZ2V0SXRlcmF0b3JGbiA9IHJlcXVp
cmUoJy4vZ2V0SXRlcmF0b3JGbicpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoJ2ZianMvbGli
L2ludmFyaWFudCcpO1xudmFyIEtleUVzY2FwZVV0aWxzID0gcmVxdWlyZSgnLi9LZXlFc2NhcGVV
dGlscycpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKCdmYmpzL2xpYi93YXJuaW5nJyk7XG5cbnZh
ciBTRVBBUkFUT1IgPSAnLic7XG52YXIgU1VCU0VQQVJBVE9SID0gJzonO1xuXG4vKipcbiAqIFRo
aXMgaXMgaW5saW5lZCBmcm9tIFJlYWN0RWxlbWVudCBzaW5jZSB0aGlzIGZpbGUgaXMgc2hhcmVk
IGJldHdlZW5cbiAqIGlzb21vcnBoaWMgYW5kIHJlbmRlcmVycy4gV2UgY291bGQgZXh0cmFjdCB0
aGlzIHRvIGFcbiAqXG4gKi9cblxuLyoqXG4gKiBUT0RPOiBUZXN0IHRoYXQgYSBzaW5nbGUgY2hp
bGQgYW5kIGFuIGFycmF5IHdpdGggb25lIGl0ZW0gaGF2ZSB0aGUgc2FtZSBrZXlcbiAqIHBhdHRl
cm4uXG4gKi9cblxudmFyIGRpZFdhcm5BYm91dE1hcHMgPSBmYWxzZTtcblxuLyoqXG4gKiBHZW5l
cmF0ZSBhIGtleSBzdHJpbmcgdGhhdCBpZGVudGlmaWVzIGEgY29tcG9uZW50IHdpdGhpbiBhIHNl
dC5cbiAqXG4gKiBAcGFyYW0geyp9IGNvbXBvbmVudCBBIGNvbXBvbmVudCB0aGF0IGNvdWxkIGNv
bnRhaW4gYSBtYW51YWwga2V5LlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IEluZGV4IHRoYXQg
aXMgdXNlZCBpZiBhIG1hbnVhbCBrZXkgaXMgbm90IHByb3ZpZGVkLlxuICogQHJldHVybiB7c3Ry
aW5nfVxuICovXG5mdW5jdGlvbiBnZXRDb21wb25lbnRLZXkoY29tcG9uZW50LCBpbmRleCkge1xu
ICAvLyBEbyBzb21lIHR5cGVjaGVja2luZyBoZXJlIHNpbmNlIHdlIGNhbGwgdGhpcyBibGluZGx5
LiBXZSB3YW50IHRvIGVuc3VyZVxuICAvLyB0aGF0IHdlIGRvbid0IGJsb2NrIHBvdGVudGlhbCBm
dXR1cmUgRVMgQVBJcy5cbiAgaWYgKGNvbXBvbmVudCAmJiB0eXBlb2YgY29tcG9uZW50ID09PSAn
b2JqZWN0JyAmJiBjb21wb25lbnQua2V5ICE9IG51bGwpIHtcbiAgICAvLyBFeHBsaWNpdCBrZXlc
biAgICByZXR1cm4gS2V5RXNjYXBlVXRpbHMuZXNjYXBlKGNvbXBvbmVudC5rZXkpO1xuICB9XG4g
IC8vIEltcGxpY2l0IGtleSBkZXRlcm1pbmVkIGJ5IHRoZSBpbmRleCBpbiB0aGUgc2V0XG4gIHJl
dHVybiBpbmRleC50b1N0cmluZygzNik7XG59XG5cbi8qKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRy
ZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcGFyYW0geyFzdHJpbmd9IG5hbWVTb0Zh
ciBOYW1lIG9mIHRoZSBrZXkgcGF0aCBzbyBmYXIuXG4gKiBAcGFyYW0geyFmdW5jdGlvbn0gY2Fs
bGJhY2sgQ2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZWFjaCBjaGlsZCBmb3VuZC5cbiAqIEBwYXJh
bSB7Pyp9IHRyYXZlcnNlQ29udGV4dCBVc2VkIHRvIHBhc3MgaW5mb3JtYXRpb24gdGhyb3VnaG91
dCB0aGUgdHJhdmVyc2FsXG4gKiBwcm9jZXNzLlxuICogQHJldHVybiB7IW51bWJlcn0gVGhlIG51
bWJlciBvZiBjaGlsZHJlbiBpbiB0aGlzIHN1YnRyZWUuXG4gKi9cbmZ1bmN0aW9uIHRyYXZlcnNl
QWxsQ2hpbGRyZW5JbXBsKGNoaWxkcmVuLCBuYW1lU29GYXIsIGNhbGxiYWNrLCB0cmF2ZXJzZUNv
bnRleHQpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgY2hpbGRyZW47XG5cbiAgaWYgKHR5cGUgPT09
ICd1bmRlZmluZWQnIHx8IHR5cGUgPT09ICdib29sZWFuJykge1xuICAgIC8vIEFsbCBvZiB0aGUg
YWJvdmUgYXJlIHBlcmNlaXZlZCBhcyBudWxsLlxuICAgIGNoaWxkcmVuID0gbnVsbDtcbiAgfVxu
XG4gIGlmIChjaGlsZHJlbiA9PT0gbnVsbCB8fCB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlID09
PSAnbnVtYmVyJyB8fFxuICAvLyBUaGUgZm9sbG93aW5nIGlzIGlubGluZWQgZnJvbSBSZWFjdEVs
ZW1lbnQuIFRoaXMgbWVhbnMgd2UgY2FuIG9wdGltaXplXG4gIC8vIHNvbWUgY2hlY2tzLiBSZWFj
dCBGaWJlciBhbHNvIGlubGluZXMgdGhpcyBsb2dpYyBmb3Igc2ltaWxhciBwdXJwb3Nlcy5cbiAg
dHlwZSA9PT0gJ29iamVjdCcgJiYgY2hpbGRyZW4uJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRf
VFlQRSkge1xuICAgIGNhbGxiYWNrKHRyYXZlcnNlQ29udGV4dCwgY2hpbGRyZW4sXG4gICAgLy8g
SWYgaXQncyB0aGUgb25seSBjaGlsZCwgdHJlYXQgdGhlIG5hbWUgYXMgaWYgaXQgd2FzIHdyYXBw
ZWQgaW4gYW4gYXJyYXlcbiAgICAvLyBzbyB0aGF0IGl0J3MgY29uc2lzdGVudCBpZiB0aGUgbnVt
YmVyIG9mIGNoaWxkcmVuIGdyb3dzLlxuICAgIG5hbWVTb0ZhciA9PT0gJycgPyBTRVBBUkFUT1Ig
KyBnZXRDb21wb25lbnRLZXkoY2hpbGRyZW4sIDApIDogbmFtZVNvRmFyKTtcbiAgICByZXR1cm4g
MTtcbiAgfVxuXG4gIHZhciBjaGlsZDtcbiAgdmFyIG5leHROYW1lO1xuICB2YXIgc3VidHJlZUNv
dW50ID0gMDsgLy8gQ291bnQgb2YgY2hpbGRyZW4gZm91bmQgaW4gdGhlIGN1cnJlbnQgc3VidHJl
ZS5cbiAgdmFyIG5leHROYW1lUHJlZml4ID0gbmFtZVNvRmFyID09PSAnJyA/IFNFUEFSQVRPUiA6
IG5hbWVTb0ZhciArIFNVQlNFUEFSQVRPUjtcblxuICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJl
bikpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4g
ICAgICBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgICAgbmV4dE5hbWUgPSBuZXh0TmFtZVByZWZp
eCArIGdldENvbXBvbmVudEtleShjaGlsZCwgaSk7XG4gICAgICBzdWJ0cmVlQ291bnQgKz0gdHJh
dmVyc2VBbGxDaGlsZHJlbkltcGwoY2hpbGQsIG5leHROYW1lLCBjYWxsYmFjaywgdHJhdmVyc2VD
b250ZXh0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVy
YXRvckZuKGNoaWxkcmVuKTtcbiAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgICAgdmFyIGl0ZXJh
dG9yID0gaXRlcmF0b3JGbi5jYWxsKGNoaWxkcmVuKTtcbiAgICAgIHZhciBzdGVwO1xuICAgICAg
aWYgKGl0ZXJhdG9yRm4gIT09IGNoaWxkcmVuLmVudHJpZXMpIHtcbiAgICAgICAgdmFyIGlpID0g
MDtcbiAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAg
ICAgICAgIGNoaWxkID0gc3RlcC52YWx1ZTtcbiAgICAgICAgICBuZXh0TmFtZSA9IG5leHROYW1l
UHJlZml4ICsgZ2V0Q29tcG9uZW50S2V5KGNoaWxkLCBpaSsrKTtcbiAgICAgICAgICBzdWJ0cmVl
Q291bnQgKz0gdHJhdmVyc2VBbGxDaGlsZHJlbkltcGwoY2hpbGQsIG5leHROYW1lLCBjYWxsYmFj
aywgdHJhdmVyc2VDb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAg
aWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICB2
YXIgbWFwc0FzQ2hpbGRyZW5BZGRlbmR1bSA9ICcnO1xuICAgICAgICAgIGlmIChSZWFjdEN1cnJl
bnRPd25lci5jdXJyZW50KSB7XG4gICAgICAgICAgICB2YXIgbWFwc0FzQ2hpbGRyZW5Pd25lck5h
bWUgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LmdldE5hbWUoKTtcbiAgICAgICAgICAgIGlm
IChtYXBzQXNDaGlsZHJlbk93bmVyTmFtZSkge1xuICAgICAgICAgICAgICBtYXBzQXNDaGlsZHJl
bkFkZGVuZHVtID0gJyBDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG1hcHNBc0NoaWxk
cmVuT3duZXJOYW1lICsgJ2AuJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAg
ICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZGlkV2Fy
bkFib3V0TWFwcywgJ1VzaW5nIE1hcHMgYXMgY2hpbGRyZW4gaXMgbm90IHlldCBmdWxseSBzdXBw
b3J0ZWQuIEl0IGlzIGFuICcgKyAnZXhwZXJpbWVudGFsIGZlYXR1cmUgdGhhdCBtaWdodCBiZSBy
ZW1vdmVkLiBDb252ZXJ0IGl0IHRvIGEgJyArICdzZXF1ZW5jZSAvIGl0ZXJhYmxlIG9mIGtleWVk
IFJlYWN0RWxlbWVudHMgaW5zdGVhZC4lcycsIG1hcHNBc0NoaWxkcmVuQWRkZW5kdW0pIDogdm9p
ZCAwO1xuICAgICAgICAgIGRpZFdhcm5BYm91dE1hcHMgPSB0cnVlO1xuICAgICAgICB9XG4gICAg
ICAgIC8vIEl0ZXJhdG9yIHdpbGwgcHJvdmlkZSBlbnRyeSBbayx2XSB0dXBsZXMgcmF0aGVyIHRo
YW4gdmFsdWVzLlxuICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25l
KSB7XG4gICAgICAgICAgdmFyIGVudHJ5ID0gc3RlcC52YWx1ZTtcbiAgICAgICAgICBpZiAoZW50
cnkpIHtcbiAgICAgICAgICAgIGNoaWxkID0gZW50cnlbMV07XG4gICAgICAgICAgICBuZXh0TmFt
ZSA9IG5leHROYW1lUHJlZml4ICsgS2V5RXNjYXBlVXRpbHMuZXNjYXBlKGVudHJ5WzBdKSArIFNV
QlNFUEFSQVRPUiArIGdldENvbXBvbmVudEtleShjaGlsZCwgMCk7XG4gICAgICAgICAgICBzdWJ0
cmVlQ291bnQgKz0gdHJhdmVyc2VBbGxDaGlsZHJlbkltcGwoY2hpbGQsIG5leHROYW1lLCBjYWxs
YmFjaywgdHJhdmVyc2VDb250ZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1c
biAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICB2YXIgYWRkZW5kdW0g
PSAnJztcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7
XG4gICAgICAgIGFkZGVuZHVtID0gJyBJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgY29sbGVjdGlv
biBvZiBjaGlsZHJlbiwgdXNlIGFuIGFycmF5ICcgKyAnaW5zdGVhZCBvciB3cmFwIHRoZSBvYmpl
Y3QgdXNpbmcgY3JlYXRlRnJhZ21lbnQob2JqZWN0KSBmcm9tIHRoZSAnICsgJ1JlYWN0IGFkZC1v
bnMuJztcbiAgICAgICAgaWYgKGNoaWxkcmVuLl9pc1JlYWN0RWxlbWVudCkge1xuICAgICAgICAg
IGFkZGVuZHVtID0gXCIgSXQgbG9va3MgbGlrZSB5b3UncmUgdXNpbmcgYW4gZWxlbWVudCBjcmVh
dGVkIGJ5IGEgZGlmZmVyZW50IFwiICsgJ3ZlcnNpb24gb2YgUmVhY3QuIE1ha2Ugc3VyZSB0byB1
c2Ugb25seSBvbmUgY29weSBvZiBSZWFjdC4nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChSZWFj
dEN1cnJlbnRPd25lci5jdXJyZW50KSB7XG4gICAgICAgICAgdmFyIG5hbWUgPSBSZWFjdEN1cnJl
bnRPd25lci5jdXJyZW50LmdldE5hbWUoKTtcbiAgICAgICAgICBpZiAobmFtZSkge1xuICAgICAg
ICAgICAgYWRkZW5kdW0gKz0gJyBDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG5hbWUg
KyAnYC4nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIGNoaWxk
cmVuU3RyaW5nID0gU3RyaW5nKGNoaWxkcmVuKTtcbiAgICAgICFmYWxzZSA/IHByb2Nlc3MuZW52
Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdPYmplY3RzIGFy
ZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZCAoZm91bmQ6ICVzKS4lcycsIGNoaWxkcmVuU3Ry
aW5nID09PSAnW29iamVjdCBPYmplY3RdJyA/ICdvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0
LmtleXMoY2hpbGRyZW4pLmpvaW4oJywgJykgKyAnfScgOiBjaGlsZHJlblN0cmluZywgYWRkZW5k
dW0pIDogX3Byb2RJbnZhcmlhbnQoJzMxJywgY2hpbGRyZW5TdHJpbmcgPT09ICdbb2JqZWN0IE9i
amVjdF0nID8gJ29iamVjdCB3aXRoIGtleXMgeycgKyBPYmplY3Qua2V5cyhjaGlsZHJlbikuam9p
bignLCAnKSArICd9JyA6IGNoaWxkcmVuU3RyaW5nLCBhZGRlbmR1bSkgOiB2b2lkIDA7XG4gICAg
fVxuICB9XG5cbiAgcmV0dXJuIHN1YnRyZWVDb3VudDtcbn1cblxuLyoqXG4gKiBUcmF2ZXJzZXMg
Y2hpbGRyZW4gdGhhdCBhcmUgdHlwaWNhbGx5IHNwZWNpZmllZCBhcyBgcHJvcHMuY2hpbGRyZW5g
LCBidXRcbiAqIG1pZ2h0IGFsc28gYmUgc3BlY2lmaWVkIHRocm91Z2ggYXR0cmlidXRlczpcbiAq
XG4gKiAtIGB0cmF2ZXJzZUFsbENoaWxkcmVuKHRoaXMucHJvcHMuY2hpbGRyZW4sIC4uLilgXG4g
KiAtIGB0cmF2ZXJzZUFsbENoaWxkcmVuKHRoaXMucHJvcHMubGVmdFBhbmVsQ2hpbGRyZW4sIC4u
LilgXG4gKlxuICogVGhlIGB0cmF2ZXJzZUNvbnRleHRgIGlzIGFuIG9wdGlvbmFsIGFyZ3VtZW50
IHRoYXQgaXMgcGFzc2VkIHRocm91Z2ggdGhlXG4gKiBlbnRpcmUgdHJhdmVyc2FsLiBJdCBjYW4g
YmUgdXNlZCB0byBzdG9yZSBhY2N1bXVsYXRpb25zIG9yIGFueXRoaW5nIGVsc2UgdGhhdFxuICog
dGhlIGNhbGxiYWNrIG1pZ2h0IGZpbmQgcmVsZXZhbnQuXG4gKlxuICogQHBhcmFtIHs/Kn0gY2hp
bGRyZW4gQ2hpbGRyZW4gdHJlZSBvYmplY3QuXG4gKiBAcGFyYW0geyFmdW5jdGlvbn0gY2FsbGJh
Y2sgVG8gaW52b2tlIHVwb24gdHJhdmVyc2luZyBlYWNoIGNoaWxkLlxuICogQHBhcmFtIHs/Kn0g
dHJhdmVyc2VDb250ZXh0IENvbnRleHQgZm9yIHRyYXZlcnNhbC5cbiAqIEByZXR1cm4geyFudW1i
ZXJ9IFRoZSBudW1iZXIgb2YgY2hpbGRyZW4gaW4gdGhpcyBzdWJ0cmVlLlxuICovXG5mdW5jdGlv
biB0cmF2ZXJzZUFsbENoaWxkcmVuKGNoaWxkcmVuLCBjYWxsYmFjaywgdHJhdmVyc2VDb250ZXh0
KSB7XG4gIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBy
ZXR1cm4gdHJhdmVyc2VBbGxDaGlsZHJlbkltcGwoY2hpbGRyZW4sICcnLCBjYWxsYmFjaywgdHJh
dmVyc2VDb250ZXh0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0cmF2ZXJzZUFsbENoaWxkcmVu
O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9t
b2R1bGVzL3JlYWN0L2xpYi90cmF2ZXJzZUFsbENoaWxkcmVuLmpzXG4vLyBtb2R1bGUgaWQgPSAx
MDdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50
LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNv
dXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBp
biB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3Vy
Y2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUg
Zm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICog
XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKiBnbG9iYWwgU3ltYm9sICovXG5cbnZhciBJVEVS
QVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVy
YXRvcjtcbnZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJzsgLy8gQmVmb3Jl
IFN5bWJvbCBzcGVjLlxuXG4vKipcbiAqIFJldHVybnMgdGhlIGl0ZXJhdG9yIG1ldGhvZCBmdW5j
dGlvbiBjb250YWluZWQgb24gdGhlIGl0ZXJhYmxlIG9iamVjdC5cbiAqXG4gKiBCZSBzdXJlIHRv
IGludm9rZSB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgaXRlcmFibGUgYXMgY29udGV4dDpcbiAqXG4g
KiAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG15SXRlcmFibGUpO1xuICogICAg
IGlmIChpdGVyYXRvckZuKSB7XG4gKiAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNh
bGwobXlJdGVyYWJsZSk7XG4gKiAgICAgICAuLi5cbiAqICAgICB9XG4gKlxuICogQHBhcmFtIHs/
b2JqZWN0fSBtYXliZUl0ZXJhYmxlXG4gKiBAcmV0dXJuIHs/ZnVuY3Rpb259XG4gKi9cbmZ1bmN0
aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICB2YXIgaXRlcmF0b3JGbiA9IG1h
eWJlSXRlcmFibGUgJiYgKElURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW0lURVJBVE9S
X1NZTUJPTF0gfHwgbWF5YmVJdGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF0pO1xuICBpZiAo
dHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gaXRlcmF0b3JG
bjtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEl0ZXJhdG9yRm47XG5cblxuLy8vLy8v
Ly8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvcmVhY3Qv
bGliL2dldEl0ZXJhdG9yRm4uanNcbi8vIG1vZHVsZSBpZCA9IDEwOFxuLy8gbW9kdWxlIGNodW5r
cyA9IDAiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4g
KiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5z
ZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBm
aWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlv
bmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5U
UyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG4ndXNlIHN0cmlj
dCc7XG5cbi8qKlxuICogRXNjYXBlIGFuZCB3cmFwIGtleSBzbyBpdCBpcyBzYWZlIHRvIHVzZSBh
cyBhIHJlYWN0aWRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IHRvIGJlIGVzY2FwZWQuXG4g
KiBAcmV0dXJuIHtzdHJpbmd9IHRoZSBlc2NhcGVkIGtleS5cbiAqL1xuXG5mdW5jdGlvbiBlc2Nh
cGUoa2V5KSB7XG4gIHZhciBlc2NhcGVSZWdleCA9IC9bPTpdL2c7XG4gIHZhciBlc2NhcGVyTG9v
a3VwID0ge1xuICAgICc9JzogJz0wJyxcbiAgICAnOic6ICc9MidcbiAgfTtcbiAgdmFyIGVzY2Fw
ZWRTdHJpbmcgPSAoJycgKyBrZXkpLnJlcGxhY2UoZXNjYXBlUmVnZXgsIGZ1bmN0aW9uIChtYXRj
aCkge1xuICAgIHJldHVybiBlc2NhcGVyTG9va3VwW21hdGNoXTtcbiAgfSk7XG5cbiAgcmV0dXJu
ICckJyArIGVzY2FwZWRTdHJpbmc7XG59XG5cbi8qKlxuICogVW5lc2NhcGUgYW5kIHVud3JhcCBr
ZXkgZm9yIGh1bWFuLXJlYWRhYmxlIGRpc3BsYXlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5
IHRvIHVuZXNjYXBlLlxuICogQHJldHVybiB7c3RyaW5nfSB0aGUgdW5lc2NhcGVkIGtleS5cbiAq
L1xuZnVuY3Rpb24gdW5lc2NhcGUoa2V5KSB7XG4gIHZhciB1bmVzY2FwZVJlZ2V4ID0gLyg9MHw9
MikvZztcbiAgdmFyIHVuZXNjYXBlckxvb2t1cCA9IHtcbiAgICAnPTAnOiAnPScsXG4gICAgJz0y
JzogJzonXG4gIH07XG4gIHZhciBrZXlTdWJzdHJpbmcgPSBrZXlbMF0gPT09ICcuJyAmJiBrZXlb
MV0gPT09ICckJyA/IGtleS5zdWJzdHJpbmcoMikgOiBrZXkuc3Vic3RyaW5nKDEpO1xuXG4gIHJl
dHVybiAoJycgKyBrZXlTdWJzdHJpbmcpLnJlcGxhY2UodW5lc2NhcGVSZWdleCwgZnVuY3Rpb24g
KG1hdGNoKSB7XG4gICAgcmV0dXJuIHVuZXNjYXBlckxvb2t1cFttYXRjaF07XG4gIH0pO1xufVxu
XG52YXIgS2V5RXNjYXBlVXRpbHMgPSB7XG4gIGVzY2FwZTogZXNjYXBlLFxuICB1bmVzY2FwZTog
dW5lc2NhcGVcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gS2V5RXNjYXBlVXRpbHM7XG5cblxuLy8v
Ly8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvcmVh
Y3QvbGliL0tleUVzY2FwZVV0aWxzLmpzXG4vLyBtb2R1bGUgaWQgPSAxMDlcbi8vIG1vZHVsZSBj
aHVua3MgPSAwIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5j
LlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxp
Y2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VO
U0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRk
aXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBB
VEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0
JztcblxudmFyIFJlYWN0RWxlbWVudCA9IHJlcXVpcmUoJy4vUmVhY3RFbGVtZW50Jyk7XG5cbi8q
KlxuICogQ3JlYXRlIGEgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgSFRNTCB0YWcgZWxlbWVudHMuXG4g
KlxuICogQHByaXZhdGVcbiAqL1xudmFyIGNyZWF0ZURPTUZhY3RvcnkgPSBSZWFjdEVsZW1lbnQu
Y3JlYXRlRmFjdG9yeTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24n
KSB7XG4gIHZhciBSZWFjdEVsZW1lbnRWYWxpZGF0b3IgPSByZXF1aXJlKCcuL1JlYWN0RWxlbWVu
dFZhbGlkYXRvcicpO1xuICBjcmVhdGVET01GYWN0b3J5ID0gUmVhY3RFbGVtZW50VmFsaWRhdG9y
LmNyZWF0ZUZhY3Rvcnk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcHBpbmcgZnJvbSBzdXBw
b3J0ZWQgSFRNTCB0YWdzIHRvIGBSZWFjdERPTUNvbXBvbmVudGAgY2xhc3Nlcy5cbiAqXG4gKiBA
cHVibGljXG4gKi9cbnZhciBSZWFjdERPTUZhY3RvcmllcyA9IHtcbiAgYTogY3JlYXRlRE9NRmFj
dG9yeSgnYScpLFxuICBhYmJyOiBjcmVhdGVET01GYWN0b3J5KCdhYmJyJyksXG4gIGFkZHJlc3M6
IGNyZWF0ZURPTUZhY3RvcnkoJ2FkZHJlc3MnKSxcbiAgYXJlYTogY3JlYXRlRE9NRmFjdG9yeSgn
YXJlYScpLFxuICBhcnRpY2xlOiBjcmVhdGVET01GYWN0b3J5KCdhcnRpY2xlJyksXG4gIGFzaWRl
OiBjcmVhdGVET01GYWN0b3J5KCdhc2lkZScpLFxuICBhdWRpbzogY3JlYXRlRE9NRmFjdG9yeSgn
YXVkaW8nKSxcbiAgYjogY3JlYXRlRE9NRmFjdG9yeSgnYicpLFxuICBiYXNlOiBjcmVhdGVET01G
YWN0b3J5KCdiYXNlJyksXG4gIGJkaTogY3JlYXRlRE9NRmFjdG9yeSgnYmRpJyksXG4gIGJkbzog
Y3JlYXRlRE9NRmFjdG9yeSgnYmRvJyksXG4gIGJpZzogY3JlYXRlRE9NRmFjdG9yeSgnYmlnJyks
XG4gIGJsb2NrcXVvdGU6IGNyZWF0ZURPTUZhY3RvcnkoJ2Jsb2NrcXVvdGUnKSxcbiAgYm9keTog
Y3JlYXRlRE9NRmFjdG9yeSgnYm9keScpLFxuICBicjogY3JlYXRlRE9NRmFjdG9yeSgnYnInKSxc
biAgYnV0dG9uOiBjcmVhdGVET01GYWN0b3J5KCdidXR0b24nKSxcbiAgY2FudmFzOiBjcmVhdGVE
T01GYWN0b3J5KCdjYW52YXMnKSxcbiAgY2FwdGlvbjogY3JlYXRlRE9NRmFjdG9yeSgnY2FwdGlv
bicpLFxuICBjaXRlOiBjcmVhdGVET01GYWN0b3J5KCdjaXRlJyksXG4gIGNvZGU6IGNyZWF0ZURP
TUZhY3RvcnkoJ2NvZGUnKSxcbiAgY29sOiBjcmVhdGVET01GYWN0b3J5KCdjb2wnKSxcbiAgY29s
Z3JvdXA6IGNyZWF0ZURPTUZhY3RvcnkoJ2NvbGdyb3VwJyksXG4gIGRhdGE6IGNyZWF0ZURPTUZh
Y3RvcnkoJ2RhdGEnKSxcbiAgZGF0YWxpc3Q6IGNyZWF0ZURPTUZhY3RvcnkoJ2RhdGFsaXN0Jyks
XG4gIGRkOiBjcmVhdGVET01GYWN0b3J5KCdkZCcpLFxuICBkZWw6IGNyZWF0ZURPTUZhY3Rvcnko
J2RlbCcpLFxuICBkZXRhaWxzOiBjcmVhdGVET01GYWN0b3J5KCdkZXRhaWxzJyksXG4gIGRmbjog
Y3JlYXRlRE9NRmFjdG9yeSgnZGZuJyksXG4gIGRpYWxvZzogY3JlYXRlRE9NRmFjdG9yeSgnZGlh
bG9nJyksXG4gIGRpdjogY3JlYXRlRE9NRmFjdG9yeSgnZGl2JyksXG4gIGRsOiBjcmVhdGVET01G
YWN0b3J5KCdkbCcpLFxuICBkdDogY3JlYXRlRE9NRmFjdG9yeSgnZHQnKSxcbiAgZW06IGNyZWF0
ZURPTUZhY3RvcnkoJ2VtJyksXG4gIGVtYmVkOiBjcmVhdGVET01GYWN0b3J5KCdlbWJlZCcpLFxu
ICBmaWVsZHNldDogY3JlYXRlRE9NRmFjdG9yeSgnZmllbGRzZXQnKSxcbiAgZmlnY2FwdGlvbjog
Y3JlYXRlRE9NRmFjdG9yeSgnZmlnY2FwdGlvbicpLFxuICBmaWd1cmU6IGNyZWF0ZURPTUZhY3Rv
cnkoJ2ZpZ3VyZScpLFxuICBmb290ZXI6IGNyZWF0ZURPTUZhY3RvcnkoJ2Zvb3RlcicpLFxuICBm
b3JtOiBjcmVhdGVET01GYWN0b3J5KCdmb3JtJyksXG4gIGgxOiBjcmVhdGVET01GYWN0b3J5KCdo
MScpLFxuICBoMjogY3JlYXRlRE9NRmFjdG9yeSgnaDInKSxcbiAgaDM6IGNyZWF0ZURPTUZhY3Rv
cnkoJ2gzJyksXG4gIGg0OiBjcmVhdGVET01GYWN0b3J5KCdoNCcpLFxuICBoNTogY3JlYXRlRE9N
RmFjdG9yeSgnaDUnKSxcbiAgaDY6IGNyZWF0ZURPTUZhY3RvcnkoJ2g2JyksXG4gIGhlYWQ6IGNy
ZWF0ZURPTUZhY3RvcnkoJ2hlYWQnKSxcbiAgaGVhZGVyOiBjcmVhdGVET01GYWN0b3J5KCdoZWFk
ZXInKSxcbiAgaGdyb3VwOiBjcmVhdGVET01GYWN0b3J5KCdoZ3JvdXAnKSxcbiAgaHI6IGNyZWF0
ZURPTUZhY3RvcnkoJ2hyJyksXG4gIGh0bWw6IGNyZWF0ZURPTUZhY3RvcnkoJ2h0bWwnKSxcbiAg
aTogY3JlYXRlRE9NRmFjdG9yeSgnaScpLFxuICBpZnJhbWU6IGNyZWF0ZURPTUZhY3RvcnkoJ2lm
cmFtZScpLFxuICBpbWc6IGNyZWF0ZURPTUZhY3RvcnkoJ2ltZycpLFxuICBpbnB1dDogY3JlYXRl
RE9NRmFjdG9yeSgnaW5wdXQnKSxcbiAgaW5zOiBjcmVhdGVET01GYWN0b3J5KCdpbnMnKSxcbiAg
a2JkOiBjcmVhdGVET01GYWN0b3J5KCdrYmQnKSxcbiAga2V5Z2VuOiBjcmVhdGVET01GYWN0b3J5
KCdrZXlnZW4nKSxcbiAgbGFiZWw6IGNyZWF0ZURPTUZhY3RvcnkoJ2xhYmVsJyksXG4gIGxlZ2Vu
ZDogY3JlYXRlRE9NRmFjdG9yeSgnbGVnZW5kJyksXG4gIGxpOiBjcmVhdGVET01GYWN0b3J5KCds
aScpLFxuICBsaW5rOiBjcmVhdGVET01GYWN0b3J5KCdsaW5rJyksXG4gIG1haW46IGNyZWF0ZURP
TUZhY3RvcnkoJ21haW4nKSxcbiAgbWFwOiBjcmVhdGVET01GYWN0b3J5KCdtYXAnKSxcbiAgbWFy
azogY3JlYXRlRE9NRmFjdG9yeSgnbWFyaycpLFxuICBtZW51OiBjcmVhdGVET01GYWN0b3J5KCdt
ZW51JyksXG4gIG1lbnVpdGVtOiBjcmVhdGVET01GYWN0b3J5KCdtZW51aXRlbScpLFxuICBtZXRh
OiBjcmVhdGVET01GYWN0b3J5KCdtZXRhJyksXG4gIG1ldGVyOiBjcmVhdGVET01GYWN0b3J5KCdt
ZXRlcicpLFxuICBuYXY6IGNyZWF0ZURPTUZhY3RvcnkoJ25hdicpLFxuICBub3NjcmlwdDogY3Jl
YXRlRE9NRmFjdG9yeSgnbm9zY3JpcHQnKSxcbiAgb2JqZWN0OiBjcmVhdGVET01GYWN0b3J5KCdv
YmplY3QnKSxcbiAgb2w6IGNyZWF0ZURPTUZhY3RvcnkoJ29sJyksXG4gIG9wdGdyb3VwOiBjcmVh
dGVET01GYWN0b3J5KCdvcHRncm91cCcpLFxuICBvcHRpb246IGNyZWF0ZURPTUZhY3RvcnkoJ29w
dGlvbicpLFxuICBvdXRwdXQ6IGNyZWF0ZURPTUZhY3RvcnkoJ291dHB1dCcpLFxuICBwOiBjcmVh
dGVET01GYWN0b3J5KCdwJyksXG4gIHBhcmFtOiBjcmVhdGVET01GYWN0b3J5KCdwYXJhbScpLFxu
ICBwaWN0dXJlOiBjcmVhdGVET01GYWN0b3J5KCdwaWN0dXJlJyksXG4gIHByZTogY3JlYXRlRE9N
RmFjdG9yeSgncHJlJyksXG4gIHByb2dyZXNzOiBjcmVhdGVET01GYWN0b3J5KCdwcm9ncmVzcycp
LFxuICBxOiBjcmVhdGVET01GYWN0b3J5KCdxJyksXG4gIHJwOiBjcmVhdGVET01GYWN0b3J5KCdy
cCcpLFxuICBydDogY3JlYXRlRE9NRmFjdG9yeSgncnQnKSxcbiAgcnVieTogY3JlYXRlRE9NRmFj
dG9yeSgncnVieScpLFxuICBzOiBjcmVhdGVET01GYWN0b3J5KCdzJyksXG4gIHNhbXA6IGNyZWF0
ZURPTUZhY3RvcnkoJ3NhbXAnKSxcbiAgc2NyaXB0OiBjcmVhdGVET01GYWN0b3J5KCdzY3JpcHQn
KSxcbiAgc2VjdGlvbjogY3JlYXRlRE9NRmFjdG9yeSgnc2VjdGlvbicpLFxuICBzZWxlY3Q6IGNy
ZWF0ZURPTUZhY3RvcnkoJ3NlbGVjdCcpLFxuICBzbWFsbDogY3JlYXRlRE9NRmFjdG9yeSgnc21h
bGwnKSxcbiAgc291cmNlOiBjcmVhdGVET01GYWN0b3J5KCdzb3VyY2UnKSxcbiAgc3BhbjogY3Jl
YXRlRE9NRmFjdG9yeSgnc3BhbicpLFxuICBzdHJvbmc6IGNyZWF0ZURPTUZhY3RvcnkoJ3N0cm9u
ZycpLFxuICBzdHlsZTogY3JlYXRlRE9NRmFjdG9yeSgnc3R5bGUnKSxcbiAgc3ViOiBjcmVhdGVE
T01GYWN0b3J5KCdzdWInKSxcbiAgc3VtbWFyeTogY3JlYXRlRE9NRmFjdG9yeSgnc3VtbWFyeScp
LFxuICBzdXA6IGNyZWF0ZURPTUZhY3RvcnkoJ3N1cCcpLFxuICB0YWJsZTogY3JlYXRlRE9NRmFj
dG9yeSgndGFibGUnKSxcbiAgdGJvZHk6IGNyZWF0ZURPTUZhY3RvcnkoJ3Rib2R5JyksXG4gIHRk
OiBjcmVhdGVET01GYWN0b3J5KCd0ZCcpLFxuICB0ZXh0YXJlYTogY3JlYXRlRE9NRmFjdG9yeSgn
dGV4dGFyZWEnKSxcbiAgdGZvb3Q6IGNyZWF0ZURPTUZhY3RvcnkoJ3Rmb290JyksXG4gIHRoOiBj
cmVhdGVET01GYWN0b3J5KCd0aCcpLFxuICB0aGVhZDogY3JlYXRlRE9NRmFjdG9yeSgndGhlYWQn
KSxcbiAgdGltZTogY3JlYXRlRE9NRmFjdG9yeSgndGltZScpLFxuICB0aXRsZTogY3JlYXRlRE9N
RmFjdG9yeSgndGl0bGUnKSxcbiAgdHI6IGNyZWF0ZURPTUZhY3RvcnkoJ3RyJyksXG4gIHRyYWNr
OiBjcmVhdGVET01GYWN0b3J5KCd0cmFjaycpLFxuICB1OiBjcmVhdGVET01GYWN0b3J5KCd1Jyks
XG4gIHVsOiBjcmVhdGVET01GYWN0b3J5KCd1bCcpLFxuICAndmFyJzogY3JlYXRlRE9NRmFjdG9y
eSgndmFyJyksXG4gIHZpZGVvOiBjcmVhdGVET01GYWN0b3J5KCd2aWRlbycpLFxuICB3YnI6IGNy
ZWF0ZURPTUZhY3RvcnkoJ3dicicpLFxuXG4gIC8vIFNWR1xuICBjaXJjbGU6IGNyZWF0ZURPTUZh
Y3RvcnkoJ2NpcmNsZScpLFxuICBjbGlwUGF0aDogY3JlYXRlRE9NRmFjdG9yeSgnY2xpcFBhdGgn
KSxcbiAgZGVmczogY3JlYXRlRE9NRmFjdG9yeSgnZGVmcycpLFxuICBlbGxpcHNlOiBjcmVhdGVE
T01GYWN0b3J5KCdlbGxpcHNlJyksXG4gIGc6IGNyZWF0ZURPTUZhY3RvcnkoJ2cnKSxcbiAgaW1h
Z2U6IGNyZWF0ZURPTUZhY3RvcnkoJ2ltYWdlJyksXG4gIGxpbmU6IGNyZWF0ZURPTUZhY3Rvcnko
J2xpbmUnKSxcbiAgbGluZWFyR3JhZGllbnQ6IGNyZWF0ZURPTUZhY3RvcnkoJ2xpbmVhckdyYWRp
ZW50JyksXG4gIG1hc2s6IGNyZWF0ZURPTUZhY3RvcnkoJ21hc2snKSxcbiAgcGF0aDogY3JlYXRl
RE9NRmFjdG9yeSgncGF0aCcpLFxuICBwYXR0ZXJuOiBjcmVhdGVET01GYWN0b3J5KCdwYXR0ZXJu
JyksXG4gIHBvbHlnb246IGNyZWF0ZURPTUZhY3RvcnkoJ3BvbHlnb24nKSxcbiAgcG9seWxpbmU6
IGNyZWF0ZURPTUZhY3RvcnkoJ3BvbHlsaW5lJyksXG4gIHJhZGlhbEdyYWRpZW50OiBjcmVhdGVE
T01GYWN0b3J5KCdyYWRpYWxHcmFkaWVudCcpLFxuICByZWN0OiBjcmVhdGVET01GYWN0b3J5KCdy
ZWN0JyksXG4gIHN0b3A6IGNyZWF0ZURPTUZhY3RvcnkoJ3N0b3AnKSxcbiAgc3ZnOiBjcmVhdGVE
T01GYWN0b3J5KCdzdmcnKSxcbiAgdGV4dDogY3JlYXRlRE9NRmFjdG9yeSgndGV4dCcpLFxuICB0
c3BhbjogY3JlYXRlRE9NRmFjdG9yeSgndHNwYW4nKVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBS
ZWFjdERPTUZhY3RvcmllcztcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9P
VEVSXG4vLyAuL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RET01GYWN0b3JpZXMuanNcbi8v
IG1vZHVsZSBpZCA9IDExMFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipcbiAqIENvcHlyaWdo
dCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxu
ICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBs
aWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9y
eSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQg
cmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVj
dG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3JlcXVpcmUgPSByZXF1aXJl
KCcuL1JlYWN0RWxlbWVudCcpLFxuICAgIGlzVmFsaWRFbGVtZW50ID0gX3JlcXVpcmUuaXNWYWxp
ZEVsZW1lbnQ7XG5cbnZhciBmYWN0b3J5ID0gcmVxdWlyZSgncHJvcC10eXBlcy9mYWN0b3J5Jyk7
XG5cbm1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShpc1ZhbGlkRWxlbWVudCk7XG5cblxuLy8vLy8v
Ly8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvcmVhY3Qv
bGliL1JlYWN0UHJvcFR5cGVzLmpzXG4vLyBtb2R1bGUgaWQgPSAxMTFcbi8vIG1vZHVsZSBjaHVu
a3MgPSAwIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxu
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vu
c2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0Ug
ZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRp
b25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVO
VFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52
YXIgZW1wdHlGdW5jdGlvbiA9IHJlcXVpcmUoJ2ZianMvbGliL2VtcHR5RnVuY3Rpb24nKTtcbnZh
ciBpbnZhcmlhbnQgPSByZXF1aXJlKCdmYmpzL2xpYi9pbnZhcmlhbnQnKTtcbnZhciB3YXJuaW5n
ID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNy
ZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xudmFyIGNoZWNrUHJv
cFR5cGVzID0gcmVxdWlyZSgnLi9jaGVja1Byb3BUeXBlcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9
IGZ1bmN0aW9uKGlzVmFsaWRFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKSB7XG4gIC8qIGds
b2JhbCBTeW1ib2wgKi9cbiAgdmFyIElURVJBVE9SX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT09
ICdmdW5jdGlvbicgJiYgU3ltYm9sLml0ZXJhdG9yO1xuICB2YXIgRkFVWF9JVEVSQVRPUl9TWU1C
T0wgPSAnQEBpdGVyYXRvcic7IC8vIEJlZm9yZSBTeW1ib2wgc3BlYy5cblxuICAvKipcbiAgICog
UmV0dXJucyB0aGUgaXRlcmF0b3IgbWV0aG9kIGZ1bmN0aW9uIGNvbnRhaW5lZCBvbiB0aGUgaXRl
cmFibGUgb2JqZWN0LlxuICAgKlxuICAgKiBCZSBzdXJlIHRvIGludm9rZSB0aGUgZnVuY3Rpb24g
d2l0aCB0aGUgaXRlcmFibGUgYXMgY29udGV4dDpcbiAgICpcbiAgICogICAgIHZhciBpdGVyYXRv
ckZuID0gZ2V0SXRlcmF0b3JGbihteUl0ZXJhYmxlKTtcbiAgICogICAgIGlmIChpdGVyYXRvckZu
KSB7XG4gICAqICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChteUl0ZXJhYmxl
KTtcbiAgICogICAgICAgLi4uXG4gICAqICAgICB9XG4gICAqXG4gICAqIEBwYXJhbSB7P29iamVj
dH0gbWF5YmVJdGVyYWJsZVxuICAgKiBAcmV0dXJuIHs/ZnVuY3Rpb259XG4gICAqL1xuICBmdW5j
dGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHtcbiAgICB2YXIgaXRlcmF0b3JGbiA9
IG1heWJlSXRlcmFibGUgJiYgKElURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW0lURVJB
VE9SX1NZTUJPTF0gfHwgbWF5YmVJdGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF0pO1xuICAg
IGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIGl0
ZXJhdG9yRm47XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbGxlY3Rpb24gb2YgbWV0aG9k
cyB0aGF0IGFsbG93IGRlY2xhcmF0aW9uIGFuZCB2YWxpZGF0aW9uIG9mIHByb3BzIHRoYXQgYXJl
XG4gICAqIHN1cHBsaWVkIHRvIFJlYWN0IGNvbXBvbmVudHMuIEV4YW1wbGUgdXNhZ2U6XG4gICAq
XG4gICAqICAgdmFyIFByb3BzID0gcmVxdWlyZSgnUmVhY3RQcm9wVHlwZXMnKTtcbiAgICogICB2
YXIgTXlBcnRpY2xlID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICAgKiAgICAgcHJvcFR5cGVzOiB7
XG4gICAqICAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBwcm9wIG5hbWVkIFwiZGVzY3JpcHRp
b25cIi5cbiAgICogICAgICAgZGVzY3JpcHRpb246IFByb3BzLnN0cmluZyxcbiAgICpcbiAgICog
ICAgICAgLy8gQSByZXF1aXJlZCBlbnVtIHByb3AgbmFtZWQgXCJjYXRlZ29yeVwiLlxuICAgKiAg
ICAgICBjYXRlZ29yeTogUHJvcHMub25lT2YoWydOZXdzJywnUGhvdG9zJ10pLmlzUmVxdWlyZWQs
XG4gICAqXG4gICAqICAgICAgIC8vIEEgcHJvcCBuYW1lZCBcImRpYWxvZ1wiIHRoYXQgcmVxdWly
ZXMgYW4gaW5zdGFuY2Ugb2YgRGlhbG9nLlxuICAgKiAgICAgICBkaWFsb2c6IFByb3BzLmluc3Rh
bmNlT2YoRGlhbG9nKS5pc1JlcXVpcmVkXG4gICAqICAgICB9LFxuICAgKiAgICAgcmVuZGVyOiBm
dW5jdGlvbigpIHsgLi4uIH1cbiAgICogICB9KTtcbiAgICpcbiAgICogQSBtb3JlIGZvcm1hbCBz
cGVjaWZpY2F0aW9uIG9mIGhvdyB0aGVzZSBtZXRob2RzIGFyZSB1c2VkOlxuICAgKlxuICAgKiAg
IHR5cGUgOj0gYXJyYXl8Ym9vbHxmdW5jfG9iamVjdHxudW1iZXJ8c3RyaW5nfG9uZU9mKFsuLi5d
KXxpbnN0YW5jZU9mKC4uLilcbiAgICogICBkZWNsIDo9IFJlYWN0UHJvcFR5cGVzLnt0eXBlfSgu
aXNSZXF1aXJlZCk/XG4gICAqXG4gICAqIEVhY2ggYW5kIGV2ZXJ5IGRlY2xhcmF0aW9uIHByb2R1
Y2VzIGEgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBzaWduYXR1cmUuIFRoaXNcbiAgICogYWxsb3dz
IHRoZSBjcmVhdGlvbiBvZiBjdXN0b20gdmFsaWRhdGlvbiBmdW5jdGlvbnMuIEZvciBleGFtcGxl
OlxuICAgKlxuICAgKiAgdmFyIE15TGluayA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgICogICAg
cHJvcFR5cGVzOiB7XG4gICAqICAgICAgLy8gQW4gb3B0aW9uYWwgc3RyaW5nIG9yIFVSSSBwcm9w
IG5hbWVkIFwiaHJlZlwiLlxuICAgKiAgICAgIGhyZWY6IGZ1bmN0aW9uKHByb3BzLCBwcm9wTmFt
ZSwgY29tcG9uZW50TmFtZSkge1xuICAgKiAgICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3By
b3BOYW1lXTtcbiAgICogICAgICAgIGlmIChwcm9wVmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgcHJv
cFZhbHVlICE9PSAnc3RyaW5nJyAmJlxuICAgKiAgICAgICAgICAgICEocHJvcFZhbHVlIGluc3Rh
bmNlb2YgVVJJKSkge1xuICAgKiAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKFxuICAgKiAgICAg
ICAgICAgICdFeHBlY3RlZCBhIHN0cmluZyBvciBhbiBVUkkgZm9yICcgKyBwcm9wTmFtZSArICcg
aW4gJyArXG4gICAqICAgICAgICAgICAgY29tcG9uZW50TmFtZVxuICAgKiAgICAgICAgICApO1xu
ICAgKiAgICAgICAgfVxuICAgKiAgICAgIH1cbiAgICogICAgfSxcbiAgICogICAgcmVuZGVyOiBm
dW5jdGlvbigpIHsuLi59XG4gICAqICB9KTtcbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xu
XG4gIHZhciBBTk9OWU1PVVMgPSAnPDxhbm9ueW1vdXM+Pic7XG5cbiAgLy8gSW1wb3J0YW50IVxu
ICAvLyBLZWVwIHRoaXMgbGlzdCBpbiBzeW5jIHdpdGggcHJvZHVjdGlvbiB2ZXJzaW9uIGluIGAu
L2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcy5qc2AuXG4gIHZhciBSZWFjdFByb3BUeXBlcyA9IHtc
biAgICBhcnJheTogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2FycmF5JyksXG4gICAgYm9v
bDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2Jvb2xlYW4nKSxcbiAgICBmdW5jOiBjcmVh
dGVQcmltaXRpdmVUeXBlQ2hlY2tlcignZnVuY3Rpb24nKSxcbiAgICBudW1iZXI6IGNyZWF0ZVBy
aW1pdGl2ZVR5cGVDaGVja2VyKCdudW1iZXInKSxcbiAgICBvYmplY3Q6IGNyZWF0ZVByaW1pdGl2
ZVR5cGVDaGVja2VyKCdvYmplY3QnKSxcbiAgICBzdHJpbmc6IGNyZWF0ZVByaW1pdGl2ZVR5cGVD
aGVja2VyKCdzdHJpbmcnKSxcbiAgICBzeW1ib2w6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2Vy
KCdzeW1ib2wnKSxcblxuICAgIGFueTogY3JlYXRlQW55VHlwZUNoZWNrZXIoKSxcbiAgICBhcnJh
eU9mOiBjcmVhdGVBcnJheU9mVHlwZUNoZWNrZXIsXG4gICAgZWxlbWVudDogY3JlYXRlRWxlbWVu
dFR5cGVDaGVja2VyKCksXG4gICAgaW5zdGFuY2VPZjogY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tl
cixcbiAgICBub2RlOiBjcmVhdGVOb2RlQ2hlY2tlcigpLFxuICAgIG9iamVjdE9mOiBjcmVhdGVP
YmplY3RPZlR5cGVDaGVja2VyLFxuICAgIG9uZU9mOiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIsXG4g
ICAgb25lT2ZUeXBlOiBjcmVhdGVVbmlvblR5cGVDaGVja2VyLFxuICAgIHNoYXBlOiBjcmVhdGVT
aGFwZVR5cGVDaGVja2VyXG4gIH07XG5cbiAgLyoqXG4gICAqIGlubGluZWQgT2JqZWN0LmlzIHBv
bHlmaWxsIHRvIGF2b2lkIHJlcXVpcmluZyBjb25zdW1lcnMgc2hpcCB0aGVpciBvd25cbiAgICog
aHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9S
ZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzXG4gICAqL1xuICAvKmVzbGludC1kaXNh
YmxlIG5vLXNlbGYtY29tcGFyZSovXG4gIGZ1bmN0aW9uIGlzKHgsIHkpIHtcbiAgICAvLyBTYW1l
VmFsdWUgYWxnb3JpdGhtXG4gICAgaWYgKHggPT09IHkpIHtcbiAgICAgIC8vIFN0ZXBzIDEtNSwg
Ny0xMFxuICAgICAgLy8gU3RlcHMgNi5iLTYuZTogKzAgIT0gLTBcbiAgICAgIHJldHVybiB4ICE9
PSAwIHx8IDEgLyB4ID09PSAxIC8geTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU3RlcCA2LmE6
IE5hTiA9PSBOYU5cbiAgICAgIHJldHVybiB4ICE9PSB4ICYmIHkgIT09IHk7XG4gICAgfVxuICB9
XG4gIC8qZXNsaW50LWVuYWJsZSBuby1zZWxmLWNvbXBhcmUqL1xuXG4gIC8qKlxuICAgKiBXZSB1
c2UgYW4gRXJyb3ItbGlrZSBvYmplY3QgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYXMgcGVv
cGxlIG1heSBjYWxsXG4gICAqIFByb3BUeXBlcyBkaXJlY3RseSBhbmQgaW5zcGVjdCB0aGVpciBv
dXRwdXQuIEhvd2V2ZXIsIHdlIGRvbid0IHVzZSByZWFsXG4gICAqIEVycm9ycyBhbnltb3JlLiBX
ZSBkb24ndCBpbnNwZWN0IHRoZWlyIHN0YWNrIGFueXdheSwgYW5kIGNyZWF0aW5nIHRoZW1cbiAg
ICogaXMgcHJvaGliaXRpdmVseSBleHBlbnNpdmUgaWYgdGhleSBhcmUgY3JlYXRlZCB0b28gb2Z0
ZW4sIHN1Y2ggYXMgd2hhdFxuICAgKiBoYXBwZW5zIGluIG9uZU9mVHlwZSgpIGZvciBhbnkgdHlw
ZSBiZWZvcmUgdGhlIG9uZSB0aGF0IG1hdGNoZWQuXG4gICAqL1xuICBmdW5jdGlvbiBQcm9wVHlw
ZUVycm9yKG1lc3NhZ2UpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIHRoaXMu
c3RhY2sgPSAnJztcbiAgfVxuICAvLyBNYWtlIGBpbnN0YW5jZW9mIEVycm9yYCBzdGlsbCB3b3Jr
IGZvciByZXR1cm5lZCBlcnJvcnMuXG4gIFByb3BUeXBlRXJyb3IucHJvdG90eXBlID0gRXJyb3Iu
cHJvdG90eXBlO1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlk
YXRlKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtc
biAgICAgIHZhciBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZSA9IHt9O1xuICAgICAgdmFyIG1hbnVh
bFByb3BUeXBlV2FybmluZ0NvdW50ID0gMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tUeXBl
KGlzUmVxdWlyZWQsIHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHBy
b3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgICBjb21wb25lbnROYW1lID0gY29tcG9uZW50TmFt
ZSB8fCBBTk9OWU1PVVM7XG4gICAgICBwcm9wRnVsbE5hbWUgPSBwcm9wRnVsbE5hbWUgfHwgcHJv
cE5hbWU7XG5cbiAgICAgIGlmIChzZWNyZXQgIT09IFJlYWN0UHJvcFR5cGVzU2VjcmV0KSB7XG4g
ICAgICAgIGlmICh0aHJvd09uRGlyZWN0QWNjZXNzKSB7XG4gICAgICAgICAgLy8gTmV3IGJlaGF2
aW9yIG9ubHkgZm9yIHVzZXJzIG9mIGBwcm9wLXR5cGVzYCBwYWNrYWdlXG4gICAgICAgICAgaW52
YXJpYW50KFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAnQ2FsbGluZyBQcm9wVHlw
ZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBl
c2AgcGFja2FnZS4gJyArXG4gICAgICAgICAgICAnVXNlIGBQcm9wVHlwZXMuY2hlY2tQcm9wVHlw
ZXMoKWAgdG8gY2FsbCB0aGVtLiAnICtcbiAgICAgICAgICAgICdSZWFkIG1vcmUgYXQgaHR0cDov
L2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxz
ZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0eXBlb2YgY29u
c29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAvLyBPbGQgYmVoYXZpb3IgZm9yIHBl
b3BsZSB1c2luZyBSZWFjdC5Qcm9wVHlwZXNcbiAgICAgICAgICB2YXIgY2FjaGVLZXkgPSBjb21w
b25lbnROYW1lICsgJzonICsgcHJvcE5hbWU7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAg
IW1hbnVhbFByb3BUeXBlQ2FsbENhY2hlW2NhY2hlS2V5XSAmJlxuICAgICAgICAgICAgLy8gQXZv
aWQgc3BhbW1pbmcgdGhlIGNvbnNvbGUgYmVjYXVzZSB0aGV5IGFyZSBvZnRlbiBub3QgYWN0aW9u
YWJsZSBleGNlcHQgZm9yIGxpYiBhdXRob3JzXG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZVdh
cm5pbmdDb3VudCA8IDNcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHdhcm5pbmcoXG4gICAg
ICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAnWW91IGFyZSBtYW51YWxseSBjYWxsaW5n
IGEgUmVhY3QuUHJvcFR5cGVzIHZhbGlkYXRpb24gJyArXG4gICAgICAgICAgICAgICdmdW5jdGlv
biBmb3IgdGhlIGAlc2AgcHJvcCBvbiBgJXNgLiBUaGlzIGlzIGRlcHJlY2F0ZWQgJyArXG4gICAg
ICAgICAgICAgICdhbmQgd2lsbCB0aHJvdyBpbiB0aGUgc3RhbmRhbG9uZSBgcHJvcC10eXBlc2Ag
cGFja2FnZS4gJyArXG4gICAgICAgICAgICAgICdZb3UgbWF5IGJlIHNlZWluZyB0aGlzIHdhcm5p
bmcgZHVlIHRvIGEgdGhpcmQtcGFydHkgUHJvcFR5cGVzICcgK1xuICAgICAgICAgICAgICAnbGli
cmFyeS4gU2VlIGh0dHBzOi8vZmIubWUvcmVhY3Qtd2FybmluZy1kb250LWNhbGwtcHJvcHR5cGVz
ICcgKyAnZm9yIGRldGFpbHMuJyxcbiAgICAgICAgICAgICAgcHJvcEZ1bGxOYW1lLFxuICAgICAg
ICAgICAgICBjb21wb25lbnROYW1lXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbWFudWFs
UHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIG1hbnVhbFBy
b3BUeXBlV2FybmluZ0NvdW50Kys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4g
ICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09IG51bGwpIHtcbiAgICAgICAgaWYgKGlzUmVxdWly
ZWQpIHtcbiAgICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSBudWxsKSB7XG4gICAgICAg
ICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsgbG9jYXRpb24gKyAnIGAnICsg
cHJvcEZ1bGxOYW1lICsgJ2AgaXMgbWFya2VkIGFzIHJlcXVpcmVkICcgKyAoJ2luIGAnICsgY29t
cG9uZW50TmFtZSArICdgLCBidXQgaXRzIHZhbHVlIGlzIGBudWxsYC4nKSk7XG4gICAgICAgICAg
fVxuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiAr
ICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gJyArICgn
YCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYHVuZGVmaW5lZGAuJykp
O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAg
ICAgcmV0dXJuIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRp
b24sIHByb3BGdWxsTmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNoYWluZWRDaGVj
a1R5cGUgPSBjaGVja1R5cGUuYmluZChudWxsLCBmYWxzZSk7XG4gICAgY2hhaW5lZENoZWNrVHlw
ZS5pc1JlcXVpcmVkID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgdHJ1ZSk7XG5cbiAgICByZXR1cm4g
Y2hhaW5lZENoZWNrVHlwZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVByaW1pdGl2ZVR5cGVD
aGVja2VyKGV4cGVjdGVkVHlwZSkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9w
TmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4g
ICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBl
ID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gZXhwZWN0
ZWRUeXBlKSB7XG4gICAgICAgIC8vIGBwcm9wVmFsdWVgIGJlaW5nIGluc3RhbmNlIG9mLCBzYXks
IGRhdGUvcmVnZXhwLCBwYXNzIHRoZSAnb2JqZWN0J1xuICAgICAgICAvLyBjaGVjaywgYnV0IHdl
IGNhbiBvZmZlciBhIG1vcmUgcHJlY2lzZSBlcnJvciBtZXNzYWdlIGhlcmUgcmF0aGVyIHRoYW5c
biAgICAgICAgLy8gJ29mIHR5cGUgYG9iamVjdGAnLlxuICAgICAgICB2YXIgcHJlY2lzZVR5cGUg
PSBnZXRQcmVjaXNlVHlwZShwcm9wVmFsdWUpO1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5
cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Ag
b2YgdHlwZSAnICsgKCdgJyArIHByZWNpc2VUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21w
b25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdgJyArIGV4cGVjdGVkVHlwZSArICdgLicp
KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRl
Q2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRl
QW55VHlwZUNoZWNrZXIoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2Vy
KGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNOdWxsKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0
ZUFycmF5T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRl
KHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkg
e1xuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAg
ICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1bGxOYW1lICsg
J2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZhbGlkIFByb3BU
eXBlIG5vdGF0aW9uIGluc2lkZSBhcnJheU9mLicpO1xuICAgICAgfVxuICAgICAgdmFyIHByb3BW
YWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShwcm9wVmFs
dWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4g
ICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAn
IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Ag
c3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFuIGFycmF5Licp
KTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcFZhbHVlLmxlbmd0aDsg
aSsrKSB7XG4gICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwgaSwgY29t
cG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICdbJyArIGkgKyAnXScsIFJlYWN0
UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtc
biAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVy
biBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFs
aWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudFR5cGVDaGVja2VyKCkge1xu
ICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9j
YXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BO
YW1lXTtcbiAgICAgIGlmICghaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgICAgICB2
YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3
IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFt
ZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsg
Y29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQuJykpO1xu
ICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFp
bmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVJbnN0
YW5jZVR5cGVDaGVja2VyKGV4cGVjdGVkQ2xhc3MpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShw
cm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtc
biAgICAgIGlmICghKHByb3BzW3Byb3BOYW1lXSBpbnN0YW5jZW9mIGV4cGVjdGVkQ2xhc3MpKSB7
XG4gICAgICAgIHZhciBleHBlY3RlZENsYXNzTmFtZSA9IGV4cGVjdGVkQ2xhc3MubmFtZSB8fCBB
Tk9OWU1PVVM7XG4gICAgICAgIHZhciBhY3R1YWxDbGFzc05hbWUgPSBnZXRDbGFzc05hbWUocHJv
cHNbcHJvcE5hbWVdKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlk
ICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2An
ICsgYWN0dWFsQ2xhc3NOYW1lICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsg
J2AsIGV4cGVjdGVkICcpICsgKCdpbnN0YW5jZSBvZiBgJyArIGV4cGVjdGVkQ2xhc3NOYW1lICsg
J2AuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBj
cmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBj
cmVhdGVFbnVtVHlwZUNoZWNrZXIoZXhwZWN0ZWRWYWx1ZXMpIHtcbiAgICBpZiAoIUFycmF5Lmlz
QXJyYXkoZXhwZWN0ZWRWYWx1ZXMpKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0g
J3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQg
dG8gb25lT2YsIGV4cGVjdGVkIGFuIGluc3RhbmNlIG9mIGFycmF5LicpIDogdm9pZCAwO1xuICAg
ICAgcmV0dXJuIGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNOdWxsO1xuICAgIH1cblxuICAgIGZ1
bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24s
IHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtc
biAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtc
biAgICAgICAgaWYgKGlzKHByb3BWYWx1ZSwgZXhwZWN0ZWRWYWx1ZXNbaV0pKSB7XG4gICAgICAg
ICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHZhbHVlc1N0
cmluZyA9IEpTT04uc3RyaW5naWZ5KGV4cGVjdGVkVmFsdWVzKTtcbiAgICAgIHJldHVybiBuZXcg
UHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1l
ICsgJ2Agb2YgdmFsdWUgYCcgKyBwcm9wVmFsdWUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyAr
IGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgb25lIG9mICcgKyB2YWx1ZXNTdHJpbmcgKyAn
LicpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlk
YXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIodHlwZUNo
ZWNrZXIpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVu
dE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICh0eXBlb2YgdHlwZUNo
ZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9y
KCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBv
bmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgb2JqZWN0
T2YuJyk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xu
ICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChw
cm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9y
KCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBl
ICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUg
KyAnYCwgZXhwZWN0ZWQgYW4gb2JqZWN0LicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGtl
eSBpbiBwcm9wVmFsdWUpIHtcbiAgICAgICAgaWYgKHByb3BWYWx1ZS5oYXNPd25Qcm9wZXJ0eShr
ZXkpKSB7XG4gICAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBrZXks
IGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJlYWN0
UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikg
e1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAg
ICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFi
bGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVVbmlvblR5
cGVDaGVja2VyKGFycmF5T2ZUeXBlQ2hlY2tlcnMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXko
YXJyYXlPZlR5cGVDaGVja2VycykpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAn
cHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0
byBvbmVPZlR5cGUsIGV4cGVjdGVkIGFuIGluc3RhbmNlIG9mIGFycmF5LicpIDogdm9pZCAwO1xu
ICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNOdWxsO1xuICAgIH1cblxuICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZlR5cGVDaGVja2Vycy5sZW5ndGg7IGkrKykge1xu
ICAgICAgdmFyIGNoZWNrZXIgPSBhcnJheU9mVHlwZUNoZWNrZXJzW2ldO1xuICAgICAgaWYgKHR5
cGVvZiBjaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdhcm5pbmcoXG4gICAgICAg
ICAgZmFsc2UsXG4gICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZCB0byBvbmVPZlR5
cGUuIEV4cGVjdGVkIGFuIGFycmF5IG9mIGNoZWNrIGZ1bmN0aW9ucywgYnV0ICcgK1xuICAgICAg
ICAgICdyZWNlaXZlZCAlcyBhdCBpbmRleCAlcy4nLFxuICAgICAgICAgIGdldFBvc3RmaXhGb3JU
eXBlV2FybmluZyhjaGVja2VyKSxcbiAgICAgICAgICBpXG4gICAgICAgICk7XG4gICAgICAgIHJl
dHVybiBlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zTnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAg
ICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0
aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZlR5
cGVDaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZU
eXBlQ2hlY2tlcnNbaV07XG4gICAgICAgIGlmIChjaGVja2VyKHByb3BzLCBwcm9wTmFtZSwgY29t
cG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQp
ID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxu
XG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsg
JyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50
TmFtZSArICdgLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVj
a2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU5vZGVDaGVja2VyKCkge1xu
ICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9j
YXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCFpc05vZGUocHJvcHNbcHJvcE5hbWVd
KSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0
aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29t
cG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIFJlYWN0Tm9kZS4nKSk7XG4gICAgICB9XG4gICAg
ICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVj
a2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIo
c2hhcGVUeXBlcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29t
cG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1
ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHBy
b3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJl
dHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJv
cEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSBgJyArIHByb3BUeXBlICsgJ2AgJyArICgnc3VwcGxpZWQg
dG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGBvYmplY3RgLicpKTtcbiAgICAg
IH1cbiAgICAgIGZvciAodmFyIGtleSBpbiBzaGFwZVR5cGVzKSB7XG4gICAgICAgIHZhciBjaGVj
a2VyID0gc2hhcGVUeXBlc1trZXldO1xuICAgICAgICBpZiAoIWNoZWNrZXIpIHtcbiAgICAgICAg
ICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BW
YWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsg
a2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAg
ICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7
XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7
XG4gIH1cblxuICBmdW5jdGlvbiBpc05vZGUocHJvcFZhbHVlKSB7XG4gICAgc3dpdGNoICh0eXBl
b2YgcHJvcFZhbHVlKSB7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgY2FzZSAnc3RyaW5n
JzpcbiAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAg
Y2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybiAhcHJvcFZhbHVlO1xuICAgICAgY2FzZSAn
b2JqZWN0JzpcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAg
ICAgIHJldHVybiBwcm9wVmFsdWUuZXZlcnkoaXNOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBp
ZiAocHJvcFZhbHVlID09PSBudWxsIHx8IGlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHtcbiAg
ICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpdGVyYXRvckZu
ID0gZ2V0SXRlcmF0b3JGbihwcm9wVmFsdWUpO1xuICAgICAgICBpZiAoaXRlcmF0b3JGbikge1xu
ICAgICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChwcm9wVmFsdWUpO1xuICAg
ICAgICAgIHZhciBzdGVwO1xuICAgICAgICAgIGlmIChpdGVyYXRvckZuICE9PSBwcm9wVmFsdWUu
ZW50cmllcykge1xuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSku
ZG9uZSkge1xuICAgICAgICAgICAgICBpZiAoIWlzTm9kZShzdGVwLnZhbHVlKSkge1xuICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxu
ICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJdGVyYXRvciB3aWxsIHByb3ZpZGUg
ZW50cnkgW2ssdl0gdHVwbGVzIHJhdGhlciB0aGFuIHZhbHVlcy5cbiAgICAgICAgICAgIHdoaWxl
ICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICAgICAgdmFyIGVu
dHJ5ID0gc3RlcC52YWx1ZTtcbiAgICAgICAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAg
ICAgICAgaWYgKCFpc05vZGUoZW50cnlbMV0pKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9
XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtc
biAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgZGVmYXVsdDpcbiAgICAg
ICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzU3ltYm9sKHByb3BU
eXBlLCBwcm9wVmFsdWUpIHtcbiAgICAvLyBOYXRpdmUgU3ltYm9sLlxuICAgIGlmIChwcm9wVHlw
ZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIDE5
LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ10gPT09ICdTeW1ib2wnXG4gICAg
aWYgKHByb3BWYWx1ZVsnQEB0b1N0cmluZ1RhZyddID09PSAnU3ltYm9sJykge1xuICAgICAgcmV0
dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgZm9yIG5vbi1zcGVjIGNvbXBsaWFu
dCBTeW1ib2xzIHdoaWNoIGFyZSBwb2x5ZmlsbGVkLlxuICAgIGlmICh0eXBlb2YgU3ltYm9sID09
PSAnZnVuY3Rpb24nICYmIHByb3BWYWx1ZSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgcmV0
dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gRXF1aXZh
bGVudCBvZiBgdHlwZW9mYCBidXQgd2l0aCBzcGVjaWFsIGhhbmRsaW5nIGZvciBhcnJheSBhbmQg
cmVnZXhwLlxuICBmdW5jdGlvbiBnZXRQcm9wVHlwZShwcm9wVmFsdWUpIHtcbiAgICB2YXIgcHJv
cFR5cGUgPSB0eXBlb2YgcHJvcFZhbHVlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1
ZSkpIHtcbiAgICAgIHJldHVybiAnYXJyYXknO1xuICAgIH1cbiAgICBpZiAocHJvcFZhbHVlIGlu
c3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAvLyBPbGQgd2Via2l0cyAoYXQgbGVhc3QgdW50aWwg
QW5kcm9pZCA0LjApIHJldHVybiAnZnVuY3Rpb24nIHJhdGhlciB0aGFuXG4gICAgICAvLyAnb2Jq
ZWN0JyBmb3IgdHlwZW9mIGEgUmVnRXhwLiBXZSdsbCBub3JtYWxpemUgdGhpcyBoZXJlIHNvIHRo
YXQgL2JsYS9cbiAgICAgIC8vIHBhc3NlcyBQcm9wVHlwZXMub2JqZWN0LlxuICAgICAgcmV0dXJu
ICdvYmplY3QnO1xuICAgIH1cbiAgICBpZiAoaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkp
IHtcbiAgICAgIHJldHVybiAnc3ltYm9sJztcbiAgICB9XG4gICAgcmV0dXJuIHByb3BUeXBlO1xu
ICB9XG5cbiAgLy8gVGhpcyBoYW5kbGVzIG1vcmUgdHlwZXMgdGhhbiBgZ2V0UHJvcFR5cGVgLiBP
bmx5IHVzZWQgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICAvLyBTZWUgYGNyZWF0ZVByaW1pdGl2ZVR5
cGVDaGVja2VyYC5cbiAgZnVuY3Rpb24gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKSB7XG4gICAg
aWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IHByb3BWYWx1ZSA9PT0gbnVs
bCkge1xuICAgICAgcmV0dXJuICcnICsgcHJvcFZhbHVlO1xuICAgIH1cbiAgICB2YXIgcHJvcFR5
cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgIGlmIChwcm9wVHlwZSA9PT0gJ29iamVj
dCcpIHtcbiAgICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIHJl
dHVybiAnZGF0ZSc7XG4gICAgICB9IGVsc2UgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4
cCkge1xuICAgICAgICByZXR1cm4gJ3JlZ2V4cCc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVy
biBwcm9wVHlwZTtcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBzdHJpbmcgdGhhdCBpcyBwb3N0Zml4
ZWQgdG8gYSB3YXJuaW5nIGFib3V0IGFuIGludmFsaWQgdHlwZS5cbiAgLy8gRm9yIGV4YW1wbGUs
IFwidW5kZWZpbmVkXCIgb3IgXCJvZiB0eXBlIGFycmF5XCJcbiAgZnVuY3Rpb24gZ2V0UG9zdGZp
eEZvclR5cGVXYXJuaW5nKHZhbHVlKSB7XG4gICAgdmFyIHR5cGUgPSBnZXRQcmVjaXNlVHlwZSh2
YWx1ZSk7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdhcnJheSc6XG4gICAgICBj
YXNlICdvYmplY3QnOlxuICAgICAgICByZXR1cm4gJ2FuICcgKyB0eXBlO1xuICAgICAgY2FzZSAn
Ym9vbGVhbic6XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgIGNhc2UgJ3JlZ2V4cCc6XG4gICAg
ICAgIHJldHVybiAnYSAnICsgdHlwZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0
eXBlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJldHVybnMgY2xhc3MgbmFtZSBvZiB0aGUgb2JqZWN0
LCBpZiBhbnkuXG4gIGZ1bmN0aW9uIGdldENsYXNzTmFtZShwcm9wVmFsdWUpIHtcbiAgICBpZiAo
IXByb3BWYWx1ZS5jb25zdHJ1Y3RvciB8fCAhcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWUpIHtc
biAgICAgIHJldHVybiBBTk9OWU1PVVM7XG4gICAgfVxuICAgIHJldHVybiBwcm9wVmFsdWUuY29u
c3RydWN0b3IubmFtZTtcbiAgfVxuXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0g
Y2hlY2tQcm9wVHlwZXM7XG4gIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5
cGVzO1xuXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8v
Ly8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2Zh
Y3RvcnlXaXRoVHlwZUNoZWNrZXJzLmpzXG4vLyBtb2R1bGUgaWQgPSAxMTJcbi8vIG1vZHVsZSBj
aHVua3MgPSAwIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5j
LlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxp
Y2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VO
U0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRk
aXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBB
VEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xu
XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgaW52
YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG4gIHZhciB3YXJuaW5nID0g
cmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuICB2YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQg
PSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuICB2YXIgbG9nZ2VkVHlw
ZUZhaWx1cmVzID0ge307XG59XG5cbi8qKlxuICogQXNzZXJ0IHRoYXQgdGhlIHZhbHVlcyBtYXRj
aCB3aXRoIHRoZSB0eXBlIHNwZWNzLlxuICogRXJyb3IgbWVzc2FnZXMgYXJlIG1lbW9yaXplZCBh
bmQgd2lsbCBvbmx5IGJlIHNob3duIG9uY2UuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHR5cGVT
cGVjcyBNYXAgb2YgbmFtZSB0byBhIFJlYWN0UHJvcFR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSB2
YWx1ZXMgUnVudGltZSB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIHR5cGUtY2hlY2tlZFxuICogQHBh
cmFtIHtzdHJpbmd9IGxvY2F0aW9uIGUuZy4gXCJwcm9wXCIsIFwiY29udGV4dFwiLCBcImNoaWxk
IGNvbnRleHRcIlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbXBvbmVudE5hbWUgTmFtZSBvZiB0aGUg
Y29tcG9uZW50IGZvciBlcnJvciBtZXNzYWdlcy5cbiAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBnZXRT
dGFjayBSZXR1cm5zIHRoZSBjb21wb25lbnQgc3RhY2suXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5j
dGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVu
dE5hbWUsIGdldFN0YWNrKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1
Y3Rpb24nKSB7XG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAg
ICAgaWYgKHR5cGVTcGVjcy5oYXNPd25Qcm9wZXJ0eSh0eXBlU3BlY05hbWUpKSB7XG4gICAgICAg
IHZhciBlcnJvcjtcbiAgICAgICAgLy8gUHJvcCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJ
biBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gZmFpbCB0aGUgcmVu
ZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxuICAg
ICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0g
dGhyb3cuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5
IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgICAg
Ly8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRl
ciBtZXNzYWdlLlxuICAgICAgICAgIGludmFyaWFudCh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVj
TmFtZV0gPT09ICdmdW5jdGlvbicsICclczogJXMgdHlwZSBgJXNgIGlzIGludmFsaWQ7IGl0IG11
c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tICcgKyAnUmVhY3QuUHJvcFR5cGVzLicsIGNv
bXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJywgbG9jYXRpb24sIHR5cGVTcGVjTmFtZSk7XG4g
ICAgICAgICAgZXJyb3IgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSh2YWx1ZXMsIHR5cGVTcGVj
TmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGwsIFJlYWN0UHJvcFR5cGVzU2VjcmV0
KTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICBlcnJvciA9IGV4O1xuICAgICAg
ICB9XG4gICAgICAgIHdhcm5pbmcoIWVycm9yIHx8IGVycm9yIGluc3RhbmNlb2YgRXJyb3IsICcl
czogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICVzIGAlc2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hl
Y2tlciAnICsgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCBy
ZXR1cm5lZCBhICVzLiAnICsgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1
bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgKyAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VP
Ziwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICsgJ3NoYXBlIGFsbCByZXF1aXJl
IGFuIGFyZ3VtZW50KS4nLCBjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycsIGxvY2F0aW9u
LCB0eXBlU3BlY05hbWUsIHR5cGVvZiBlcnJvcik7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5j
ZW9mIEVycm9yICYmICEoZXJyb3IubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4g
ICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUg
dGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAg
ICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IubWVzc2FnZV0gPSB0cnVlO1xuXG4gICAgICAg
ICAgdmFyIHN0YWNrID0gZ2V0U3RhY2sgPyBnZXRTdGFjaygpIDogJyc7XG5cbiAgICAgICAgICB3
YXJuaW5nKGZhbHNlLCAnRmFpbGVkICVzIHR5cGU6ICVzJXMnLCBsb2NhdGlvbiwgZXJyb3IubWVz
c2FnZSwgc3RhY2sgIT0gbnVsbCA/IHN0YWNrIDogJycpO1xuICAgICAgICB9XG4gICAgICB9XG4g
ICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2hlY2tQcm9wVHlwZXM7XG5cblxuXG4v
Ly8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9w
cm9wLXR5cGVzL2NoZWNrUHJvcFR5cGVzLmpzXG4vLyBtb2R1bGUgaWQgPSAxMTNcbi8vIG1vZHVs
ZSBjaHVua3MgPSAwIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywg
SW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlz
IGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJ
Q0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4g
YWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhl
IFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3Ry
aWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSAnMTUuNi4xJztcblxuXG4vLy8vLy8vLy8vLy8vLy8v
Ly9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RW
ZXJzaW9uLmpzXG4vLyBtb2R1bGUgaWQgPSAxMTRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyoq
XG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0
cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRo
ZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxu
ICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0
aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9yZXF1
aXJlID0gcmVxdWlyZSgnLi9SZWFjdEJhc2VDbGFzc2VzJyksXG4gICAgQ29tcG9uZW50ID0gX3Jl
cXVpcmUuQ29tcG9uZW50O1xuXG52YXIgX3JlcXVpcmUyID0gcmVxdWlyZSgnLi9SZWFjdEVsZW1l
bnQnKSxcbiAgICBpc1ZhbGlkRWxlbWVudCA9IF9yZXF1aXJlMi5pc1ZhbGlkRWxlbWVudDtcblxu
dmFyIFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlID0gcmVxdWlyZSgnLi9SZWFjdE5vb3BVcGRhdGVRdWV1
ZScpO1xudmFyIGZhY3RvcnkgPSByZXF1aXJlKCdjcmVhdGUtcmVhY3QtY2xhc3MvZmFjdG9yeScp
O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoQ29tcG9uZW50LCBpc1ZhbGlkRWxlbWVudCwg
UmVhY3ROb29wVXBkYXRlUXVldWUpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFD
SyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9jcmVhdGVDbGFzcy5qc1xuLy8g
bW9kdWxlIGlkID0gMTE1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qKlxuICogQ29weXJpZ2h0
IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4g
KlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxp
Y2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5
IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCBy
aWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0
b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfYXNzaWduID0gcmVxdWlyZSgn
b2JqZWN0LWFzc2lnbicpO1xuXG52YXIgZW1wdHlPYmplY3QgPSByZXF1aXJlKCdmYmpzL2xpYi9l
bXB0eU9iamVjdCcpO1xudmFyIF9pbnZhcmlhbnQgPSByZXF1aXJlKCdmYmpzL2xpYi9pbnZhcmlh
bnQnKTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAg
dmFyIHdhcm5pbmcgPSByZXF1aXJlKCdmYmpzL2xpYi93YXJuaW5nJyk7XG59XG5cbnZhciBNSVhJ
TlNfS0VZID0gJ21peGlucyc7XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byBhbGxvdyB0aGUgY3Jl
YXRpb24gb2YgYW5vbnltb3VzIGZ1bmN0aW9ucyB3aGljaCBkbyBub3Rcbi8vIGhhdmUgLm5hbWUg
c2V0IHRvIHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSBiZWluZyBhc3NpZ25lZCB0by5cbmZ1bmN0
aW9uIGlkZW50aXR5KGZuKSB7XG4gIHJldHVybiBmbjtcbn1cblxudmFyIFJlYWN0UHJvcFR5cGVM
b2NhdGlvbk5hbWVzO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicp
IHtcbiAgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXMgPSB7XG4gICAgcHJvcDogJ3Byb3AnLFxu
ICAgIGNvbnRleHQ6ICdjb250ZXh0JyxcbiAgICBjaGlsZENvbnRleHQ6ICdjaGlsZCBjb250ZXh0
J1xuICB9O1xufSBlbHNlIHtcbiAgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXMgPSB7fTtcbn1c
blxuZnVuY3Rpb24gZmFjdG9yeShSZWFjdENvbXBvbmVudCwgaXNWYWxpZEVsZW1lbnQsIFJlYWN0
Tm9vcFVwZGF0ZVF1ZXVlKSB7XG4gIC8qKlxuICAgKiBQb2xpY2llcyB0aGF0IGRlc2NyaWJlIG1l
dGhvZHMgaW4gYFJlYWN0Q2xhc3NJbnRlcmZhY2VgLlxuICAgKi9cblxuICB2YXIgaW5qZWN0ZWRN
aXhpbnMgPSBbXTtcblxuICAvKipcbiAgICogQ29tcG9zaXRlIGNvbXBvbmVudHMgYXJlIGhpZ2hl
ci1sZXZlbCBjb21wb25lbnRzIHRoYXQgY29tcG9zZSBvdGhlciBjb21wb3NpdGVcbiAgICogb3Ig
aG9zdCBjb21wb25lbnRzLlxuICAgKlxuICAgKiBUbyBjcmVhdGUgYSBuZXcgdHlwZSBvZiBgUmVh
Y3RDbGFzc2AsIHBhc3MgYSBzcGVjaWZpY2F0aW9uIG9mXG4gICAqIHlvdXIgbmV3IGNsYXNzIHRv
IGBSZWFjdC5jcmVhdGVDbGFzc2AuIFRoZSBvbmx5IHJlcXVpcmVtZW50IG9mIHlvdXIgY2xhc3Nc
biAgICogc3BlY2lmaWNhdGlvbiBpcyB0aGF0IHlvdSBpbXBsZW1lbnQgYSBgcmVuZGVyYCBtZXRo
b2QuXG4gICAqXG4gICAqICAgdmFyIE15Q29tcG9uZW50ID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xu
ICAgKiAgICAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAgICogICAgICAgcmV0dXJuIDxkaXY+SGVs
bG8gV29ybGQ8L2Rpdj47XG4gICAqICAgICB9XG4gICAqICAgfSk7XG4gICAqXG4gICAqIFRoZSBj
bGFzcyBzcGVjaWZpY2F0aW9uIHN1cHBvcnRzIGEgc3BlY2lmaWMgcHJvdG9jb2wgb2YgbWV0aG9k
cyB0aGF0IGhhdmVcbiAgICogc3BlY2lhbCBtZWFuaW5nIChlLmcuIGByZW5kZXJgKS4gU2VlIGBS
ZWFjdENsYXNzSW50ZXJmYWNlYCBmb3JcbiAgICogbW9yZSB0aGUgY29tcHJlaGVuc2l2ZSBwcm90
b2NvbC4gQW55IG90aGVyIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMgaW4gdGhlXG4gICAqIGNsYXNz
IHNwZWNpZmljYXRpb24gd2lsbCBiZSBhdmFpbGFibGUgb24gdGhlIHByb3RvdHlwZS5cbiAgICpc
biAgICogQGludGVyZmFjZSBSZWFjdENsYXNzSW50ZXJmYWNlXG4gICAqIEBpbnRlcm5hbFxuICAg
Ki9cbiAgdmFyIFJlYWN0Q2xhc3NJbnRlcmZhY2UgPSB7XG4gICAgLyoqXG4gICAgICogQW4gYXJy
YXkgb2YgTWl4aW4gb2JqZWN0cyB0byBpbmNsdWRlIHdoZW4gZGVmaW5pbmcgeW91ciBjb21wb25l
bnQuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7YXJyYXl9XG4gICAgICogQG9wdGlvbmFsXG4gICAg
ICovXG4gICAgbWl4aW5zOiAnREVGSU5FX01BTlknLFxuXG4gICAgLyoqXG4gICAgICogQW4gb2Jq
ZWN0IGNvbnRhaW5pbmcgcHJvcGVydGllcyBhbmQgbWV0aG9kcyB0aGF0IHNob3VsZCBiZSBkZWZp
bmVkIG9uXG4gICAgICogdGhlIGNvbXBvbmVudCdzIGNvbnN0cnVjdG9yIGluc3RlYWQgb2YgaXRz
IHByb3RvdHlwZSAoc3RhdGljIG1ldGhvZHMpLlxuICAgICAqXG4gICAgICogQHR5cGUge29iamVj
dH1cbiAgICAgKiBAb3B0aW9uYWxcbiAgICAgKi9cbiAgICBzdGF0aWNzOiAnREVGSU5FX01BTlkn
LFxuXG4gICAgLyoqXG4gICAgICogRGVmaW5pdGlvbiBvZiBwcm9wIHR5cGVzIGZvciB0aGlzIGNv
bXBvbmVudC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtvYmplY3R9XG4gICAgICogQG9wdGlvbmFs
XG4gICAgICovXG4gICAgcHJvcFR5cGVzOiAnREVGSU5FX01BTlknLFxuXG4gICAgLyoqXG4gICAg
ICogRGVmaW5pdGlvbiBvZiBjb250ZXh0IHR5cGVzIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICAg
KlxuICAgICAqIEB0eXBlIHtvYmplY3R9XG4gICAgICogQG9wdGlvbmFsXG4gICAgICovXG4gICAg
Y29udGV4dFR5cGVzOiAnREVGSU5FX01BTlknLFxuXG4gICAgLyoqXG4gICAgICogRGVmaW5pdGlv
biBvZiBjb250ZXh0IHR5cGVzIHRoaXMgY29tcG9uZW50IHNldHMgZm9yIGl0cyBjaGlsZHJlbi5c
biAgICAgKlxuICAgICAqIEB0eXBlIHtvYmplY3R9XG4gICAgICogQG9wdGlvbmFsXG4gICAgICov
XG4gICAgY2hpbGRDb250ZXh0VHlwZXM6ICdERUZJTkVfTUFOWScsXG5cbiAgICAvLyA9PT09IERl
ZmluaXRpb24gbWV0aG9kcyA9PT09XG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VkIHdoZW4gdGhl
IGNvbXBvbmVudCBpcyBtb3VudGVkLiBWYWx1ZXMgaW4gdGhlIG1hcHBpbmcgd2lsbCBiZSBzZXQg
b25cbiAgICAgKiBgdGhpcy5wcm9wc2AgaWYgdGhhdCBwcm9wIGlzIG5vdCBzcGVjaWZpZWQgKGku
ZS4gdXNpbmcgYW4gYGluYCBjaGVjaykuXG4gICAgICpcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBp
bnZva2VkIGJlZm9yZSBgZ2V0SW5pdGlhbFN0YXRlYCBhbmQgdGhlcmVmb3JlIGNhbm5vdCByZWx5
XG4gICAgICogb24gYHRoaXMuc3RhdGVgIG9yIHVzZSBgdGhpcy5zZXRTdGF0ZWAuXG4gICAgICpc
biAgICAgKiBAcmV0dXJuIHtvYmplY3R9XG4gICAgICogQG9wdGlvbmFsXG4gICAgICovXG4gICAg
Z2V0RGVmYXVsdFByb3BzOiAnREVGSU5FX01BTllfTUVSR0VEJyxcblxuICAgIC8qKlxuICAgICAq
IEludm9rZWQgb25jZSBiZWZvcmUgdGhlIGNvbXBvbmVudCBpcyBtb3VudGVkLiBUaGUgcmV0dXJu
IHZhbHVlIHdpbGwgYmUgdXNlZFxuICAgICAqIGFzIHRoZSBpbml0aWFsIHZhbHVlIG9mIGB0aGlz
LnN0YXRlYC5cbiAgICAgKlxuICAgICAqICAgZ2V0SW5pdGlhbFN0YXRlOiBmdW5jdGlvbigpIHtc
biAgICAgKiAgICAgcmV0dXJuIHtcbiAgICAgKiAgICAgICBpc09uOiBmYWxzZSxcbiAgICAgKiAg
ICAgICBmb29CYXo6IG5ldyBCYXpGb28oKVxuICAgICAqICAgICB9XG4gICAgICogICB9XG4gICAg
ICpcbiAgICAgKiBAcmV0dXJuIHtvYmplY3R9XG4gICAgICogQG9wdGlvbmFsXG4gICAgICovXG4g
ICAgZ2V0SW5pdGlhbFN0YXRlOiAnREVGSU5FX01BTllfTUVSR0VEJyxcblxuICAgIC8qKlxuICAg
ICAqIEByZXR1cm4ge29iamVjdH1cbiAgICAgKiBAb3B0aW9uYWxcbiAgICAgKi9cbiAgICBnZXRD
aGlsZENvbnRleHQ6ICdERUZJTkVfTUFOWV9NRVJHRUQnLFxuXG4gICAgLyoqXG4gICAgICogVXNl
cyBwcm9wcyBmcm9tIGB0aGlzLnByb3BzYCBhbmQgc3RhdGUgZnJvbSBgdGhpcy5zdGF0ZWAgdG8g
cmVuZGVyIHRoZVxuICAgICAqIHN0cnVjdHVyZSBvZiB0aGUgY29tcG9uZW50LlxuICAgICAqXG4g
ICAgICogTm8gZ3VhcmFudGVlcyBhcmUgbWFkZSBhYm91dCB3aGVuIG9yIGhvdyBvZnRlbiB0aGlz
IG1ldGhvZCBpcyBpbnZva2VkLCBzb1xuICAgICAqIGl0IG11c3Qgbm90IGhhdmUgc2lkZSBlZmZl
Y3RzLlxuICAgICAqXG4gICAgICogICByZW5kZXI6IGZ1bmN0aW9uKCkge1xuICAgICAqICAgICB2
YXIgbmFtZSA9IHRoaXMucHJvcHMubmFtZTtcbiAgICAgKiAgICAgcmV0dXJuIDxkaXY+SGVsbG8s
IHtuYW1lfSE8L2Rpdj47XG4gICAgICogICB9XG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtSZWFj
dENvbXBvbmVudH1cbiAgICAgKiBAcmVxdWlyZWRcbiAgICAgKi9cbiAgICByZW5kZXI6ICdERUZJ
TkVfT05DRScsXG5cbiAgICAvLyA9PT09IERlbGVnYXRlIG1ldGhvZHMgPT09PVxuXG4gICAgLyoq
XG4gICAgICogSW52b2tlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgaW5pdGlhbGx5IGNyZWF0ZWQg
YW5kIGFib3V0IHRvIGJlIG1vdW50ZWQuXG4gICAgICogVGhpcyBtYXkgaGF2ZSBzaWRlIGVmZmVj
dHMsIGJ1dCBhbnkgZXh0ZXJuYWwgc3Vic2NyaXB0aW9ucyBvciBkYXRhIGNyZWF0ZWRcbiAgICAg
KiBieSB0aGlzIG1ldGhvZCBtdXN0IGJlIGNsZWFuZWQgdXAgaW4gYGNvbXBvbmVudFdpbGxVbm1v
dW50YC5cbiAgICAgKlxuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIGNvbXBvbmVudFdp
bGxNb3VudDogJ0RFRklORV9NQU5ZJyxcblxuICAgIC8qKlxuICAgICAqIEludm9rZWQgd2hlbiB0
aGUgY29tcG9uZW50IGhhcyBiZWVuIG1vdW50ZWQgYW5kIGhhcyBhIERPTSByZXByZXNlbnRhdGlv
bi5cbiAgICAgKiBIb3dldmVyLCB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCB0aGUgRE9NIG5v
ZGUgaXMgaW4gdGhlIGRvY3VtZW50LlxuICAgICAqXG4gICAgICogVXNlIHRoaXMgYXMgYW4gb3Bw
b3J0dW5pdHkgdG8gb3BlcmF0ZSBvbiB0aGUgRE9NIHdoZW4gdGhlIGNvbXBvbmVudCBoYXNcbiAg
ICAgKiBiZWVuIG1vdW50ZWQgKGluaXRpYWxpemVkIGFuZCByZW5kZXJlZCkgZm9yIHRoZSBmaXJz
dCB0aW1lLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtET01FbGVtZW50fSByb290Tm9kZSBET00g
ZWxlbWVudCByZXByZXNlbnRpbmcgdGhlIGNvbXBvbmVudC5cbiAgICAgKiBAb3B0aW9uYWxcbiAg
ICAgKi9cbiAgICBjb21wb25lbnREaWRNb3VudDogJ0RFRklORV9NQU5ZJyxcblxuICAgIC8qKlxu
ICAgICAqIEludm9rZWQgYmVmb3JlIHRoZSBjb21wb25lbnQgcmVjZWl2ZXMgbmV3IHByb3BzLlxu
ICAgICAqXG4gICAgICogVXNlIHRoaXMgYXMgYW4gb3Bwb3J0dW5pdHkgdG8gcmVhY3QgdG8gYSBw
cm9wIHRyYW5zaXRpb24gYnkgdXBkYXRpbmcgdGhlXG4gICAgICogc3RhdGUgdXNpbmcgYHRoaXMu
c2V0U3RhdGVgLiBDdXJyZW50IHByb3BzIGFyZSBhY2Nlc3NlZCB2aWEgYHRoaXMucHJvcHNgLlxu
ICAgICAqXG4gICAgICogICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzOiBmdW5jdGlvbihuZXh0
UHJvcHMsIG5leHRDb250ZXh0KSB7XG4gICAgICogICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAq
ICAgICAgIGxpa2VzSW5jcmVhc2luZzogbmV4dFByb3BzLmxpa2VDb3VudCA+IHRoaXMucHJvcHMu
bGlrZUNvdW50XG4gICAgICogICAgIH0pO1xuICAgICAqICAgfVxuICAgICAqXG4gICAgICogTk9U
RTogVGhlcmUgaXMgbm8gZXF1aXZhbGVudCBgY29tcG9uZW50V2lsbFJlY2VpdmVTdGF0ZWAuIEFu
IGluY29taW5nIHByb3BcbiAgICAgKiB0cmFuc2l0aW9uIG1heSBjYXVzZSBhIHN0YXRlIGNoYW5n
ZSwgYnV0IHRoZSBvcHBvc2l0ZSBpcyBub3QgdHJ1ZS4gSWYgeW91XG4gICAgICogbmVlZCBpdCwg
eW91IGFyZSBwcm9iYWJseSBsb29raW5nIGZvciBgY29tcG9uZW50V2lsbFVwZGF0ZWAuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gbmV4dFByb3BzXG4gICAgICogQG9wdGlvbmFsXG4g
ICAgICovXG4gICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wczogJ0RFRklORV9NQU5ZJyxcblxu
ICAgIC8qKlxuICAgICAqIEludm9rZWQgd2hpbGUgZGVjaWRpbmcgaWYgdGhlIGNvbXBvbmVudCBz
aG91bGQgYmUgdXBkYXRlZCBhcyBhIHJlc3VsdCBvZlxuICAgICAqIHJlY2VpdmluZyBuZXcgcHJv
cHMsIHN0YXRlIGFuZC9vciBjb250ZXh0LlxuICAgICAqXG4gICAgICogVXNlIHRoaXMgYXMgYW4g
b3Bwb3J0dW5pdHkgdG8gYHJldHVybiBmYWxzZWAgd2hlbiB5b3UncmUgY2VydGFpbiB0aGF0IHRo
ZVxuICAgICAqIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBwcm9wcy9zdGF0ZS9jb250ZXh0IHdpbGwg
bm90IHJlcXVpcmUgYSBjb21wb25lbnRcbiAgICAgKiB1cGRhdGUuXG4gICAgICpcbiAgICAgKiAg
IHNob3VsZENvbXBvbmVudFVwZGF0ZTogZnVuY3Rpb24obmV4dFByb3BzLCBuZXh0U3RhdGUsIG5l
eHRDb250ZXh0KSB7XG4gICAgICogICAgIHJldHVybiAhZXF1YWwobmV4dFByb3BzLCB0aGlzLnBy
b3BzKSB8fFxuICAgICAqICAgICAgICFlcXVhbChuZXh0U3RhdGUsIHRoaXMuc3RhdGUpIHx8XG4g
ICAgICogICAgICAgIWVxdWFsKG5leHRDb250ZXh0LCB0aGlzLmNvbnRleHQpO1xuICAgICAqICAg
fVxuICAgICAqXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG5leHRQcm9wc1xuICAgICAqIEBwYXJh
bSB7P29iamVjdH0gbmV4dFN0YXRlXG4gICAgICogQHBhcmFtIHs/b2JqZWN0fSBuZXh0Q29udGV4
dFxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGNvbXBvbmVudCBzaG91bGQg
dXBkYXRlLlxuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIHNob3VsZENvbXBvbmVudFVw
ZGF0ZTogJ0RFRklORV9PTkNFJyxcblxuICAgIC8qKlxuICAgICAqIEludm9rZWQgd2hlbiB0aGUg
Y29tcG9uZW50IGlzIGFib3V0IHRvIHVwZGF0ZSBkdWUgdG8gYSB0cmFuc2l0aW9uIGZyb21cbiAg
ICAgKiBgdGhpcy5wcm9wc2AsIGB0aGlzLnN0YXRlYCBhbmQgYHRoaXMuY29udGV4dGAgdG8gYG5l
eHRQcm9wc2AsIGBuZXh0U3RhdGVgXG4gICAgICogYW5kIGBuZXh0Q29udGV4dGAuXG4gICAgICpc
biAgICAgKiBVc2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eSB0byBwZXJmb3JtIHByZXBhcmF0aW9u
IGJlZm9yZSBhbiB1cGRhdGUgb2NjdXJzLlxuICAgICAqXG4gICAgICogTk9URTogWW91ICoqY2Fu
bm90KiogdXNlIGB0aGlzLnNldFN0YXRlKClgIGluIHRoaXMgbWV0aG9kLlxuICAgICAqXG4gICAg
ICogQHBhcmFtIHtvYmplY3R9IG5leHRQcm9wc1xuICAgICAqIEBwYXJhbSB7P29iamVjdH0gbmV4
dFN0YXRlXG4gICAgICogQHBhcmFtIHs/b2JqZWN0fSBuZXh0Q29udGV4dFxuICAgICAqIEBwYXJh
bSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICAgKiBAb3B0aW9u
YWxcbiAgICAgKi9cbiAgICBjb21wb25lbnRXaWxsVXBkYXRlOiAnREVGSU5FX01BTlknLFxuXG4g
ICAgLyoqXG4gICAgICogSW52b2tlZCB3aGVuIHRoZSBjb21wb25lbnQncyBET00gcmVwcmVzZW50
YXRpb24gaGFzIGJlZW4gdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIFVzZSB0aGlzIGFzIGFuIG9w
cG9ydHVuaXR5IHRvIG9wZXJhdGUgb24gdGhlIERPTSB3aGVuIHRoZSBjb21wb25lbnQgaGFzXG4g
ICAgICogYmVlbiB1cGRhdGVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtvYmplY3R9IHByZXZQ
cm9wc1xuICAgICAqIEBwYXJhbSB7P29iamVjdH0gcHJldlN0YXRlXG4gICAgICogQHBhcmFtIHs/
b2JqZWN0fSBwcmV2Q29udGV4dFxuICAgICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gcm9vdE5vZGUg
RE9NIGVsZW1lbnQgcmVwcmVzZW50aW5nIHRoZSBjb21wb25lbnQuXG4gICAgICogQG9wdGlvbmFs
XG4gICAgICovXG4gICAgY29tcG9uZW50RGlkVXBkYXRlOiAnREVGSU5FX01BTlknLFxuXG4gICAg
LyoqXG4gICAgICogSW52b2tlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgYWJvdXQgdG8gYmUgcmVt
b3ZlZCBmcm9tIGl0cyBwYXJlbnQgYW5kIGhhdmVcbiAgICAgKiBpdHMgRE9NIHJlcHJlc2VudGF0
aW9uIGRlc3Ryb3llZC5cbiAgICAgKlxuICAgICAqIFVzZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5
IHRvIGRlYWxsb2NhdGUgYW55IGV4dGVybmFsIHJlc291cmNlcy5cbiAgICAgKlxuICAgICAqIE5P
VEU6IFRoZXJlIGlzIG5vIGBjb21wb25lbnREaWRVbm1vdW50YCBzaW5jZSB5b3VyIGNvbXBvbmVu
dCB3aWxsIGhhdmUgYmVlblxuICAgICAqIGRlc3Ryb3llZCBieSB0aGF0IHBvaW50LlxuICAgICAq
XG4gICAgICogQG9wdGlvbmFsXG4gICAgICovXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQ6ICdE
RUZJTkVfTUFOWScsXG5cbiAgICAvLyA9PT09IEFkdmFuY2VkIG1ldGhvZHMgPT09PVxuXG4gICAg
LyoqXG4gICAgICogVXBkYXRlcyB0aGUgY29tcG9uZW50J3MgY3VycmVudGx5IG1vdW50ZWQgRE9N
IHJlcHJlc2VudGF0aW9uLlxuICAgICAqXG4gICAgICogQnkgZGVmYXVsdCwgdGhpcyBpbXBsZW1l
bnRzIFJlYWN0J3MgcmVuZGVyaW5nIGFuZCByZWNvbmNpbGlhdGlvbiBhbGdvcml0aG0uXG4gICAg
ICogU29waGlzdGljYXRlZCBjbGllbnRzIG1heSB3aXNoIHRvIG92ZXJyaWRlIHRoaXMuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9u
XG4gICAgICogQGludGVybmFsXG4gICAgICogQG92ZXJyaWRhYmxlXG4gICAgICovXG4gICAgdXBk
YXRlQ29tcG9uZW50OiAnT1ZFUlJJREVfQkFTRSdcbiAgfTtcblxuICAvKipcbiAgICogTWFwcGlu
ZyBmcm9tIGNsYXNzIHNwZWNpZmljYXRpb24ga2V5cyB0byBzcGVjaWFsIHByb2Nlc3NpbmcgZnVu
Y3Rpb25zLlxuICAgKlxuICAgKiBBbHRob3VnaCB0aGVzZSBhcmUgZGVjbGFyZWQgbGlrZSBpbnN0
YW5jZSBwcm9wZXJ0aWVzIGluIHRoZSBzcGVjaWZpY2F0aW9uXG4gICAqIHdoZW4gZGVmaW5pbmcg
Y2xhc3NlcyB1c2luZyBgUmVhY3QuY3JlYXRlQ2xhc3NgLCB0aGV5IGFyZSBhY3R1YWxseSBzdGF0
aWNcbiAgICogYW5kIGFyZSBhY2Nlc3NpYmxlIG9uIHRoZSBjb25zdHJ1Y3RvciBpbnN0ZWFkIG9m
IHRoZSBwcm90b3R5cGUuIERlc3BpdGVcbiAgICogYmVpbmcgc3RhdGljLCB0aGV5IG11c3QgYmUg
ZGVmaW5lZCBvdXRzaWRlIG9mIHRoZSBcInN0YXRpY3NcIiBrZXkgdW5kZXJcbiAgICogd2hpY2gg
YWxsIG90aGVyIHN0YXRpYyBtZXRob2RzIGFyZSBkZWZpbmVkLlxuICAgKi9cbiAgdmFyIFJFU0VS
VkVEX1NQRUNfS0VZUyA9IHtcbiAgICBkaXNwbGF5TmFtZTogZnVuY3Rpb24oQ29uc3RydWN0b3Is
IGRpc3BsYXlOYW1lKSB7XG4gICAgICBDb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSA9IGRpc3BsYXlO
YW1lO1xuICAgIH0sXG4gICAgbWl4aW5zOiBmdW5jdGlvbihDb25zdHJ1Y3RvciwgbWl4aW5zKSB7
XG4gICAgICBpZiAobWl4aW5zKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWl4aW5z
Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgbWl4U3BlY0ludG9Db21wb25lbnQoQ29uc3RydWN0
b3IsIG1peGluc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGNoaWxkQ29u
dGV4dFR5cGVzOiBmdW5jdGlvbihDb25zdHJ1Y3RvciwgY2hpbGRDb250ZXh0VHlwZXMpIHtcbiAg
ICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAg
IHZhbGlkYXRlVHlwZURlZihDb25zdHJ1Y3RvciwgY2hpbGRDb250ZXh0VHlwZXMsICdjaGlsZENv
bnRleHQnKTtcbiAgICAgIH1cbiAgICAgIENvbnN0cnVjdG9yLmNoaWxkQ29udGV4dFR5cGVzID0g
X2Fzc2lnbihcbiAgICAgICAge30sXG4gICAgICAgIENvbnN0cnVjdG9yLmNoaWxkQ29udGV4dFR5
cGVzLFxuICAgICAgICBjaGlsZENvbnRleHRUeXBlc1xuICAgICAgKTtcbiAgICB9LFxuICAgIGNv
bnRleHRUeXBlczogZnVuY3Rpb24oQ29uc3RydWN0b3IsIGNvbnRleHRUeXBlcykge1xuICAgICAg
aWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgdmFs
aWRhdGVUeXBlRGVmKENvbnN0cnVjdG9yLCBjb250ZXh0VHlwZXMsICdjb250ZXh0Jyk7XG4gICAg
ICB9XG4gICAgICBDb25zdHJ1Y3Rvci5jb250ZXh0VHlwZXMgPSBfYXNzaWduKFxuICAgICAgICB7
fSxcbiAgICAgICAgQ29uc3RydWN0b3IuY29udGV4dFR5cGVzLFxuICAgICAgICBjb250ZXh0VHlw
ZXNcbiAgICAgICk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTcGVjaWFsIGNhc2UgZ2V0RGVm
YXVsdFByb3BzIHdoaWNoIHNob3VsZCBtb3ZlIGludG8gc3RhdGljcyBidXQgcmVxdWlyZXNcbiAg
ICAgKiBhdXRvbWF0aWMgbWVyZ2luZy5cbiAgICAgKi9cbiAgICBnZXREZWZhdWx0UHJvcHM6IGZ1
bmN0aW9uKENvbnN0cnVjdG9yLCBnZXREZWZhdWx0UHJvcHMpIHtcbiAgICAgIGlmIChDb25zdHJ1
Y3Rvci5nZXREZWZhdWx0UHJvcHMpIHtcbiAgICAgICAgQ29uc3RydWN0b3IuZ2V0RGVmYXVsdFBy
b3BzID0gY3JlYXRlTWVyZ2VkUmVzdWx0RnVuY3Rpb24oXG4gICAgICAgICAgQ29uc3RydWN0b3Iu
Z2V0RGVmYXVsdFByb3BzLFxuICAgICAgICAgIGdldERlZmF1bHRQcm9wc1xuICAgICAgICApO1xu
ICAgICAgfSBlbHNlIHtcbiAgICAgICAgQ29uc3RydWN0b3IuZ2V0RGVmYXVsdFByb3BzID0gZ2V0
RGVmYXVsdFByb3BzO1xuICAgICAgfVxuICAgIH0sXG4gICAgcHJvcFR5cGVzOiBmdW5jdGlvbihD
b25zdHJ1Y3RvciwgcHJvcFR5cGVzKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYg
IT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB2YWxpZGF0ZVR5cGVEZWYoQ29uc3RydWN0b3Is
IHByb3BUeXBlcywgJ3Byb3AnKTtcbiAgICAgIH1cbiAgICAgIENvbnN0cnVjdG9yLnByb3BUeXBl
cyA9IF9hc3NpZ24oe30sIENvbnN0cnVjdG9yLnByb3BUeXBlcywgcHJvcFR5cGVzKTtcbiAgICB9
LFxuICAgIHN0YXRpY3M6IGZ1bmN0aW9uKENvbnN0cnVjdG9yLCBzdGF0aWNzKSB7XG4gICAgICBt
aXhTdGF0aWNTcGVjSW50b0NvbXBvbmVudChDb25zdHJ1Y3Rvciwgc3RhdGljcyk7XG4gICAgfSxc
biAgICBhdXRvYmluZDogZnVuY3Rpb24oKSB7fVxuICB9O1xuXG4gIGZ1bmN0aW9uIHZhbGlkYXRl
VHlwZURlZihDb25zdHJ1Y3RvciwgdHlwZURlZiwgbG9jYXRpb24pIHtcbiAgICBmb3IgKHZhciBw
cm9wTmFtZSBpbiB0eXBlRGVmKSB7XG4gICAgICBpZiAodHlwZURlZi5oYXNPd25Qcm9wZXJ0eShw
cm9wTmFtZSkpIHtcbiAgICAgICAgLy8gdXNlIGEgd2FybmluZyBpbnN0ZWFkIG9mIGFuIF9pbnZh
cmlhbnQgc28gY29tcG9uZW50c1xuICAgICAgICAvLyBkb24ndCBzaG93IHVwIGluIHByb2QgYnV0
IG9ubHkgaW4gX19ERVZfX1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdw
cm9kdWN0aW9uJykge1xuICAgICAgICAgIHdhcm5pbmcoXG4gICAgICAgICAgICB0eXBlb2YgdHlw
ZURlZltwcm9wTmFtZV0gPT09ICdmdW5jdGlvbicsXG4gICAgICAgICAgICAnJXM6ICVzIHR5cGUg
YCVzYCBpcyBpbnZhbGlkOyBpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSAnICtc
biAgICAgICAgICAgICAgJ1JlYWN0LlByb3BUeXBlcy4nLFxuICAgICAgICAgICAgQ29uc3RydWN0
b3IuZGlzcGxheU5hbWUgfHwgJ1JlYWN0Q2xhc3MnLFxuICAgICAgICAgICAgUmVhY3RQcm9wVHlw
ZUxvY2F0aW9uTmFtZXNbbG9jYXRpb25dLFxuICAgICAgICAgICAgcHJvcE5hbWVcbiAgICAgICAg
ICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdmFsaWRh
dGVNZXRob2RPdmVycmlkZShpc0FscmVhZHlEZWZpbmVkLCBuYW1lKSB7XG4gICAgdmFyIHNwZWNQ
b2xpY3kgPSBSZWFjdENsYXNzSW50ZXJmYWNlLmhhc093blByb3BlcnR5KG5hbWUpXG4gICAgICA/
IFJlYWN0Q2xhc3NJbnRlcmZhY2VbbmFtZV1cbiAgICAgIDogbnVsbDtcblxuICAgIC8vIERpc2Fs
bG93IG92ZXJyaWRpbmcgb2YgYmFzZSBjbGFzcyBtZXRob2RzIHVubGVzcyBleHBsaWNpdGx5IGFs
bG93ZWQuXG4gICAgaWYgKFJlYWN0Q2xhc3NNaXhpbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xu
ICAgICAgX2ludmFyaWFudChcbiAgICAgICAgc3BlY1BvbGljeSA9PT0gJ09WRVJSSURFX0JBU0Un
LFxuICAgICAgICAnUmVhY3RDbGFzc0ludGVyZmFjZTogWW91IGFyZSBhdHRlbXB0aW5nIHRvIG92
ZXJyaWRlICcgK1xuICAgICAgICAgICdgJXNgIGZyb20geW91ciBjbGFzcyBzcGVjaWZpY2F0aW9u
LiBFbnN1cmUgdGhhdCB5b3VyIG1ldGhvZCBuYW1lcyAnICtcbiAgICAgICAgICAnZG8gbm90IG92
ZXJsYXAgd2l0aCBSZWFjdCBtZXRob2RzLicsXG4gICAgICAgIG5hbWVcbiAgICAgICk7XG4gICAg
fVxuXG4gICAgLy8gRGlzYWxsb3cgZGVmaW5pbmcgbWV0aG9kcyBtb3JlIHRoYW4gb25jZSB1bmxl
c3MgZXhwbGljaXRseSBhbGxvd2VkLlxuICAgIGlmIChpc0FscmVhZHlEZWZpbmVkKSB7XG4gICAg
ICBfaW52YXJpYW50KFxuICAgICAgICBzcGVjUG9saWN5ID09PSAnREVGSU5FX01BTlknIHx8IHNw
ZWNQb2xpY3kgPT09ICdERUZJTkVfTUFOWV9NRVJHRUQnLFxuICAgICAgICAnUmVhY3RDbGFzc0lu
dGVyZmFjZTogWW91IGFyZSBhdHRlbXB0aW5nIHRvIGRlZmluZSAnICtcbiAgICAgICAgICAnYCVz
YCBvbiB5b3VyIGNvbXBvbmVudCBtb3JlIHRoYW4gb25jZS4gVGhpcyBjb25mbGljdCBtYXkgYmUg
ZHVlICcgK1xuICAgICAgICAgICd0byBhIG1peGluLicsXG4gICAgICAgIG5hbWVcbiAgICAgICk7
XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1peGluIGhlbHBlciB3aGljaCBoYW5kbGVzIHBv
bGljeSB2YWxpZGF0aW9uIGFuZCByZXNlcnZlZFxuICAgKiBzcGVjaWZpY2F0aW9uIGtleXMgd2hl
biBidWlsZGluZyBSZWFjdCBjbGFzc2VzLlxuICAgKi9cbiAgZnVuY3Rpb24gbWl4U3BlY0ludG9D
b21wb25lbnQoQ29uc3RydWN0b3IsIHNwZWMpIHtcbiAgICBpZiAoIXNwZWMpIHtcbiAgICAgIGlm
IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHZhciB0
eXBlb2ZTcGVjID0gdHlwZW9mIHNwZWM7XG4gICAgICAgIHZhciBpc01peGluVmFsaWQgPSB0eXBl
b2ZTcGVjID09PSAnb2JqZWN0JyAmJiBzcGVjICE9PSBudWxsO1xuXG4gICAgICAgIGlmIChwcm9j
ZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgd2FybmluZyhc
biAgICAgICAgICAgIGlzTWl4aW5WYWxpZCxcbiAgICAgICAgICAgIFwiJXM6IFlvdSdyZSBhdHRl
bXB0aW5nIHRvIGluY2x1ZGUgYSBtaXhpbiB0aGF0IGlzIGVpdGhlciBudWxsIFwiICtcbiAgICAg
ICAgICAgICAgJ29yIG5vdCBhbiBvYmplY3QuIENoZWNrIHRoZSBtaXhpbnMgaW5jbHVkZWQgYnkg
dGhlIGNvbXBvbmVudCwgJyArXG4gICAgICAgICAgICAgICdhcyB3ZWxsIGFzIGFueSBtaXhpbnMg
dGhleSBpbmNsdWRlIHRoZW1zZWx2ZXMuICcgK1xuICAgICAgICAgICAgICAnRXhwZWN0ZWQgb2Jq
ZWN0IGJ1dCBnb3QgJXMuJyxcbiAgICAgICAgICAgIENvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8
ICdSZWFjdENsYXNzJyxcbiAgICAgICAgICAgIHNwZWMgPT09IG51bGwgPyBudWxsIDogdHlwZW9m
U3BlY1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xu
ICAgIH1cblxuICAgIF9pbnZhcmlhbnQoXG4gICAgICB0eXBlb2Ygc3BlYyAhPT0gJ2Z1bmN0aW9u
JyxcbiAgICAgIFwiUmVhY3RDbGFzczogWW91J3JlIGF0dGVtcHRpbmcgdG8gXCIgK1xuICAgICAg
ICAndXNlIGEgY29tcG9uZW50IGNsYXNzIG9yIGZ1bmN0aW9uIGFzIGEgbWl4aW4uIEluc3RlYWQs
IGp1c3QgdXNlIGEgJyArXG4gICAgICAgICdyZWd1bGFyIG9iamVjdC4nXG4gICAgKTtcbiAgICBf
aW52YXJpYW50KFxuICAgICAgIWlzVmFsaWRFbGVtZW50KHNwZWMpLFxuICAgICAgXCJSZWFjdENs
YXNzOiBZb3UncmUgYXR0ZW1wdGluZyB0byBcIiArXG4gICAgICAgICd1c2UgYSBjb21wb25lbnQg
YXMgYSBtaXhpbi4gSW5zdGVhZCwganVzdCB1c2UgYSByZWd1bGFyIG9iamVjdC4nXG4gICAgKTtc
blxuICAgIHZhciBwcm90byA9IENvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgICB2YXIgYXV0b0Jp
bmRQYWlycyA9IHByb3RvLl9fcmVhY3RBdXRvQmluZFBhaXJzO1xuXG4gICAgLy8gQnkgaGFuZGxp
bmcgbWl4aW5zIGJlZm9yZSBhbnkgb3RoZXIgcHJvcGVydGllcywgd2UgZW5zdXJlIHRoZSBzYW1l
XG4gICAgLy8gY2hhaW5pbmcgb3JkZXIgaXMgYXBwbGllZCB0byBtZXRob2RzIHdpdGggREVGSU5F
X01BTlkgcG9saWN5LCB3aGV0aGVyXG4gICAgLy8gbWl4aW5zIGFyZSBsaXN0ZWQgYmVmb3JlIG9y
IGFmdGVyIHRoZXNlIG1ldGhvZHMgaW4gdGhlIHNwZWMuXG4gICAgaWYgKHNwZWMuaGFzT3duUHJv
cGVydHkoTUlYSU5TX0tFWSkpIHtcbiAgICAgIFJFU0VSVkVEX1NQRUNfS0VZUy5taXhpbnMoQ29u
c3RydWN0b3IsIHNwZWMubWl4aW5zKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBuYW1lIGluIHNw
ZWMpIHtcbiAgICAgIGlmICghc3BlYy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICBj
b250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5hbWUgPT09IE1JWElOU19LRVkpIHtcbiAg
ICAgICAgLy8gV2UgaGF2ZSBhbHJlYWR5IGhhbmRsZWQgbWl4aW5zIGluIGEgc3BlY2lhbCBjYXNl
IGFib3ZlLlxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHByb3BlcnR5
ID0gc3BlY1tuYW1lXTtcbiAgICAgIHZhciBpc0FscmVhZHlEZWZpbmVkID0gcHJvdG8uaGFzT3du
UHJvcGVydHkobmFtZSk7XG4gICAgICB2YWxpZGF0ZU1ldGhvZE92ZXJyaWRlKGlzQWxyZWFkeURl
ZmluZWQsIG5hbWUpO1xuXG4gICAgICBpZiAoUkVTRVJWRURfU1BFQ19LRVlTLmhhc093blByb3Bl
cnR5KG5hbWUpKSB7XG4gICAgICAgIFJFU0VSVkVEX1NQRUNfS0VZU1tuYW1lXShDb25zdHJ1Y3Rv
ciwgcHJvcGVydHkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU2V0dXAgbWV0aG9kcyBv
biBwcm90b3R5cGU6XG4gICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgbWVtYmVyIG1ldGhvZHMgc2hv
dWxkIG5vdCBiZSBhdXRvbWF0aWNhbGx5IGJvdW5kOlxuICAgICAgICAvLyAxLiBFeHBlY3RlZCBS
ZWFjdENsYXNzIG1ldGhvZHMgKGluIHRoZSBcImludGVyZmFjZVwiKS5cbiAgICAgICAgLy8gMi4g
T3ZlcnJpZGRlbiBtZXRob2RzICh0aGF0IHdlcmUgbWl4ZWQgaW4pLlxuICAgICAgICB2YXIgaXNS
ZWFjdENsYXNzTWV0aG9kID0gUmVhY3RDbGFzc0ludGVyZmFjZS5oYXNPd25Qcm9wZXJ0eShuYW1l
KTtcbiAgICAgICAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2YgcHJvcGVydHkgPT09ICdmdW5jdGlv
bic7XG4gICAgICAgIHZhciBzaG91bGRBdXRvQmluZCA9XG4gICAgICAgICAgaXNGdW5jdGlvbiAm
JlxuICAgICAgICAgICFpc1JlYWN0Q2xhc3NNZXRob2QgJiZcbiAgICAgICAgICAhaXNBbHJlYWR5
RGVmaW5lZCAmJlxuICAgICAgICAgIHNwZWMuYXV0b2JpbmQgIT09IGZhbHNlO1xuXG4gICAgICAg
IGlmIChzaG91bGRBdXRvQmluZCkge1xuICAgICAgICAgIGF1dG9CaW5kUGFpcnMucHVzaChuYW1l
LCBwcm9wZXJ0eSk7XG4gICAgICAgICAgcHJvdG9bbmFtZV0gPSBwcm9wZXJ0eTtcbiAgICAgICAg
fSBlbHNlIHtcbiAgICAgICAgICBpZiAoaXNBbHJlYWR5RGVmaW5lZCkge1xuICAgICAgICAgICAg
dmFyIHNwZWNQb2xpY3kgPSBSZWFjdENsYXNzSW50ZXJmYWNlW25hbWVdO1xuXG4gICAgICAgICAg
ICAvLyBUaGVzZSBjYXNlcyBzaG91bGQgYWxyZWFkeSBiZSBjYXVnaHQgYnkgdmFsaWRhdGVNZXRo
b2RPdmVycmlkZS5cbiAgICAgICAgICAgIF9pbnZhcmlhbnQoXG4gICAgICAgICAgICAgIGlzUmVh
Y3RDbGFzc01ldGhvZCAmJlxuICAgICAgICAgICAgICAgIChzcGVjUG9saWN5ID09PSAnREVGSU5F
X01BTllfTUVSR0VEJyB8fFxuICAgICAgICAgICAgICAgICAgc3BlY1BvbGljeSA9PT0gJ0RFRklO
RV9NQU5ZJyksXG4gICAgICAgICAgICAgICdSZWFjdENsYXNzOiBVbmV4cGVjdGVkIHNwZWMgcG9s
aWN5ICVzIGZvciBrZXkgJXMgJyArXG4gICAgICAgICAgICAgICAgJ3doZW4gbWl4aW5nIGluIGNv
bXBvbmVudCBzcGVjcy4nLFxuICAgICAgICAgICAgICBzcGVjUG9saWN5LFxuICAgICAgICAgICAg
ICBuYW1lXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAvLyBGb3IgbWV0aG9kcyB3aGlj
aCBhcmUgZGVmaW5lZCBtb3JlIHRoYW4gb25jZSwgY2FsbCB0aGUgZXhpc3RpbmdcbiAgICAgICAg
ICAgIC8vIG1ldGhvZHMgYmVmb3JlIGNhbGxpbmcgdGhlIG5ldyBwcm9wZXJ0eSwgbWVyZ2luZyBp
ZiBhcHByb3ByaWF0ZS5cbiAgICAgICAgICAgIGlmIChzcGVjUG9saWN5ID09PSAnREVGSU5FX01B
TllfTUVSR0VEJykge1xuICAgICAgICAgICAgICBwcm90b1tuYW1lXSA9IGNyZWF0ZU1lcmdlZFJl
c3VsdEZ1bmN0aW9uKHByb3RvW25hbWVdLCBwcm9wZXJ0eSk7XG4gICAgICAgICAgICB9IGVsc2Ug
aWYgKHNwZWNQb2xpY3kgPT09ICdERUZJTkVfTUFOWScpIHtcbiAgICAgICAgICAgICAgcHJvdG9b
bmFtZV0gPSBjcmVhdGVDaGFpbmVkRnVuY3Rpb24ocHJvdG9bbmFtZV0sIHByb3BlcnR5KTtcbiAg
ICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHJvdG9bbmFtZV0g
PSBwcm9wZXJ0eTtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3By
b2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgIC8vIEFkZCB2ZXJib3NlIGRpc3BsYXlOYW1lIHRv
IHRoZSBmdW5jdGlvbiwgd2hpY2ggaGVscHMgd2hlbiBsb29raW5nXG4gICAgICAgICAgICAgIC8v
IGF0IHByb2ZpbGluZyB0b29scy5cbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wZXJ0eSA9
PT0gJ2Z1bmN0aW9uJyAmJiBzcGVjLmRpc3BsYXlOYW1lKSB7XG4gICAgICAgICAgICAgICAgcHJv
dG9bbmFtZV0uZGlzcGxheU5hbWUgPSBzcGVjLmRpc3BsYXlOYW1lICsgJ18nICsgbmFtZTtcbiAg
ICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAg
ICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG1peFN0YXRpY1NwZWNJbnRvQ29tcG9uZW50
KENvbnN0cnVjdG9yLCBzdGF0aWNzKSB7XG4gICAgaWYgKCFzdGF0aWNzKSB7XG4gICAgICByZXR1
cm47XG4gICAgfVxuICAgIGZvciAodmFyIG5hbWUgaW4gc3RhdGljcykge1xuICAgICAgdmFyIHBy
b3BlcnR5ID0gc3RhdGljc1tuYW1lXTtcbiAgICAgIGlmICghc3RhdGljcy5oYXNPd25Qcm9wZXJ0
eShuYW1lKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGlzUmVz
ZXJ2ZWQgPSBuYW1lIGluIFJFU0VSVkVEX1NQRUNfS0VZUztcbiAgICAgIF9pbnZhcmlhbnQoXG4g
ICAgICAgICFpc1Jlc2VydmVkLFxuICAgICAgICAnUmVhY3RDbGFzczogWW91IGFyZSBhdHRlbXB0
aW5nIHRvIGRlZmluZSBhIHJlc2VydmVkICcgK1xuICAgICAgICAgICdwcm9wZXJ0eSwgYCVzYCwg
dGhhdCBzaG91bGRuXFwndCBiZSBvbiB0aGUgXCJzdGF0aWNzXCIga2V5LiBEZWZpbmUgaXQgJyAr
XG4gICAgICAgICAgJ2FzIGFuIGluc3RhbmNlIHByb3BlcnR5IGluc3RlYWQ7IGl0IHdpbGwgc3Rp
bGwgYmUgYWNjZXNzaWJsZSBvbiB0aGUgJyArXG4gICAgICAgICAgJ2NvbnN0cnVjdG9yLicsXG4g
ICAgICAgIG5hbWVcbiAgICAgICk7XG5cbiAgICAgIHZhciBpc0luaGVyaXRlZCA9IG5hbWUgaW4g
Q29uc3RydWN0b3I7XG4gICAgICBfaW52YXJpYW50KFxuICAgICAgICAhaXNJbmhlcml0ZWQsXG4g
ICAgICAgICdSZWFjdENsYXNzOiBZb3UgYXJlIGF0dGVtcHRpbmcgdG8gZGVmaW5lICcgK1xuICAg
ICAgICAgICdgJXNgIG9uIHlvdXIgY29tcG9uZW50IG1vcmUgdGhhbiBvbmNlLiBUaGlzIGNvbmZs
aWN0IG1heSBiZSAnICtcbiAgICAgICAgICAnZHVlIHRvIGEgbWl4aW4uJyxcbiAgICAgICAgbmFt
ZVxuICAgICAgKTtcbiAgICAgIENvbnN0cnVjdG9yW25hbWVdID0gcHJvcGVydHk7XG4gICAgfVxu
ICB9XG5cbiAgLyoqXG4gICAqIE1lcmdlIHR3byBvYmplY3RzLCBidXQgdGhyb3cgaWYgYm90aCBj
b250YWluIHRoZSBzYW1lIGtleS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9uZSBUaGUg
Zmlyc3Qgb2JqZWN0LCB3aGljaCBpcyBtdXRhdGVkLlxuICAgKiBAcGFyYW0ge29iamVjdH0gdHdv
IFRoZSBzZWNvbmQgb2JqZWN0XG4gICAqIEByZXR1cm4ge29iamVjdH0gb25lIGFmdGVyIGl0IGhh
cyBiZWVuIG11dGF0ZWQgdG8gY29udGFpbiBldmVyeXRoaW5nIGluIHR3by5cbiAgICovXG4gIGZ1
bmN0aW9uIG1lcmdlSW50b1dpdGhOb0R1cGxpY2F0ZUtleXMob25lLCB0d28pIHtcbiAgICBfaW52
YXJpYW50KFxuICAgICAgb25lICYmIHR3byAmJiB0eXBlb2Ygb25lID09PSAnb2JqZWN0JyAmJiB0
eXBlb2YgdHdvID09PSAnb2JqZWN0JyxcbiAgICAgICdtZXJnZUludG9XaXRoTm9EdXBsaWNhdGVL
ZXlzKCk6IENhbm5vdCBtZXJnZSBub24tb2JqZWN0cy4nXG4gICAgKTtcblxuICAgIGZvciAodmFy
IGtleSBpbiB0d28pIHtcbiAgICAgIGlmICh0d28uaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAg
ICAgICBfaW52YXJpYW50KFxuICAgICAgICAgIG9uZVtrZXldID09PSB1bmRlZmluZWQsXG4gICAg
ICAgICAgJ21lcmdlSW50b1dpdGhOb0R1cGxpY2F0ZUtleXMoKTogJyArXG4gICAgICAgICAgICAn
VHJpZWQgdG8gbWVyZ2UgdHdvIG9iamVjdHMgd2l0aCB0aGUgc2FtZSBrZXk6IGAlc2AuIFRoaXMg
Y29uZmxpY3QgJyArXG4gICAgICAgICAgICAnbWF5IGJlIGR1ZSB0byBhIG1peGluOyBpbiBwYXJ0
aWN1bGFyLCB0aGlzIG1heSBiZSBjYXVzZWQgYnkgdHdvICcgK1xuICAgICAgICAgICAgJ2dldElu
aXRpYWxTdGF0ZSgpIG9yIGdldERlZmF1bHRQcm9wcygpIG1ldGhvZHMgcmV0dXJuaW5nIG9iamVj
dHMgJyArXG4gICAgICAgICAgICAnd2l0aCBjbGFzaGluZyBrZXlzLicsXG4gICAgICAgICAga2V5
XG4gICAgICAgICk7XG4gICAgICAgIG9uZVtrZXldID0gdHdvW2tleV07XG4gICAgICB9XG4gICAg
fVxuICAgIHJldHVybiBvbmU7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGZ1bmN0aW9u
IHRoYXQgaW52b2tlcyB0d28gZnVuY3Rpb25zIGFuZCBtZXJnZXMgdGhlaXIgcmV0dXJuIHZhbHVl
cy5cbiAgICpcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gb25lIEZ1bmN0aW9uIHRvIGludm9rZSBm
aXJzdC5cbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gdHdvIEZ1bmN0aW9uIHRvIGludm9rZSBzZWNv
bmQuXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBGdW5jdGlvbiB0aGF0IGludm9rZXMgdGhlIHR3
byBhcmd1bWVudCBmdW5jdGlvbnMuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBmdW5jdGlvbiBj
cmVhdGVNZXJnZWRSZXN1bHRGdW5jdGlvbihvbmUsIHR3bykge1xuICAgIHJldHVybiBmdW5jdGlv
biBtZXJnZWRSZXN1bHQoKSB7XG4gICAgICB2YXIgYSA9IG9uZS5hcHBseSh0aGlzLCBhcmd1bWVu
dHMpO1xuICAgICAgdmFyIGIgPSB0d28uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIGlm
IChhID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGI7XG4gICAgICB9IGVsc2UgaWYgKGIgPT0g
bnVsbCkge1xuICAgICAgICByZXR1cm4gYTtcbiAgICAgIH1cbiAgICAgIHZhciBjID0ge307XG4g
ICAgICBtZXJnZUludG9XaXRoTm9EdXBsaWNhdGVLZXlzKGMsIGEpO1xuICAgICAgbWVyZ2VJbnRv
V2l0aE5vRHVwbGljYXRlS2V5cyhjLCBiKTtcbiAgICAgIHJldHVybiBjO1xuICAgIH07XG4gIH1c
blxuICAvKipcbiAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyB0d28gZnVuY3Rp
b25zIGFuZCBpZ25vcmVzIHRoZWlyIHJldHVybiB2YWxlcy5cbiAgICpcbiAgICogQHBhcmFtIHtm
dW5jdGlvbn0gb25lIEZ1bmN0aW9uIHRvIGludm9rZSBmaXJzdC5cbiAgICogQHBhcmFtIHtmdW5j
dGlvbn0gdHdvIEZ1bmN0aW9uIHRvIGludm9rZSBzZWNvbmQuXG4gICAqIEByZXR1cm4ge2Z1bmN0
aW9ufSBGdW5jdGlvbiB0aGF0IGludm9rZXMgdGhlIHR3byBhcmd1bWVudCBmdW5jdGlvbnMuXG4g
ICAqIEBwcml2YXRlXG4gICAqL1xuICBmdW5jdGlvbiBjcmVhdGVDaGFpbmVkRnVuY3Rpb24ob25l
LCB0d28pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gY2hhaW5lZEZ1bmN0aW9uKCkge1xuICAgICAg
b25lLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB0d28uYXBwbHkodGhpcywgYXJndW1l
bnRzKTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmRzIGEgbWV0aG9kIHRvIHRoZSBj
b21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb21wb25lbnQgQ29tcG9uZW50
IHdob3NlIG1ldGhvZCBpcyBnb2luZyB0byBiZSBib3VuZC5cbiAgICogQHBhcmFtIHtmdW5jdGlv
bn0gbWV0aG9kIE1ldGhvZCB0byBiZSBib3VuZC5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IFRo
ZSBib3VuZCBtZXRob2QuXG4gICAqL1xuICBmdW5jdGlvbiBiaW5kQXV0b0JpbmRNZXRob2QoY29t
cG9uZW50LCBtZXRob2QpIHtcbiAgICB2YXIgYm91bmRNZXRob2QgPSBtZXRob2QuYmluZChjb21w
b25lbnQpO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7
XG4gICAgICBib3VuZE1ldGhvZC5fX3JlYWN0Qm91bmRDb250ZXh0ID0gY29tcG9uZW50O1xuICAg
ICAgYm91bmRNZXRob2QuX19yZWFjdEJvdW5kTWV0aG9kID0gbWV0aG9kO1xuICAgICAgYm91bmRN
ZXRob2QuX19yZWFjdEJvdW5kQXJndW1lbnRzID0gbnVsbDtcbiAgICAgIHZhciBjb21wb25lbnRO
YW1lID0gY29tcG9uZW50LmNvbnN0cnVjdG9yLmRpc3BsYXlOYW1lO1xuICAgICAgdmFyIF9iaW5k
ID0gYm91bmRNZXRob2QuYmluZDtcbiAgICAgIGJvdW5kTWV0aG9kLmJpbmQgPSBmdW5jdGlvbihu
ZXdUaGlzKSB7XG4gICAgICAgIGZvciAoXG4gICAgICAgICAgdmFyIF9sZW4gPSBhcmd1bWVudHMu
bGVuZ3RoLFxuICAgICAgICAgICAgYXJncyA9IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAw
KSxcbiAgICAgICAgICAgIF9rZXkgPSAxO1xuICAgICAgICAgIF9rZXkgPCBfbGVuO1xuICAgICAg
ICAgIF9rZXkrK1xuICAgICAgICApIHtcbiAgICAgICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3Vt
ZW50c1tfa2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVzZXIgaXMgdHJ5aW5nIHRvIGJp
bmQoKSBhbiBhdXRvYm91bmQgbWV0aG9kOyB3ZSBlZmZlY3RpdmVseSB3aWxsXG4gICAgICAgIC8v
IGlnbm9yZSB0aGUgdmFsdWUgb2YgXCJ0aGlzXCIgdGhhdCB0aGUgdXNlciBpcyB0cnlpbmcgdG8g
dXNlLCBzb1xuICAgICAgICAvLyBsZXQncyB3YXJuLlxuICAgICAgICBpZiAobmV3VGhpcyAhPT0g
Y29tcG9uZW50ICYmIG5ld1RoaXMgIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5l
bnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgd2FybmluZyhcbiAg
ICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICdiaW5kKCk6IFJlYWN0IGNvbXBvbmVu
dCBtZXRob2RzIG1heSBvbmx5IGJlIGJvdW5kIHRvIHRoZSAnICtcbiAgICAgICAgICAgICAgICAn
Y29tcG9uZW50IGluc3RhbmNlLiBTZWUgJXMnLFxuICAgICAgICAgICAgICBjb21wb25lbnROYW1l
XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICghYXJncy5s
ZW5ndGgpIHtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0
aW9uJykge1xuICAgICAgICAgICAgd2FybmluZyhcbiAgICAgICAgICAgICAgZmFsc2UsXG4gICAg
ICAgICAgICAgICdiaW5kKCk6IFlvdSBhcmUgYmluZGluZyBhIGNvbXBvbmVudCBtZXRob2QgdG8g
dGhlIGNvbXBvbmVudC4gJyArXG4gICAgICAgICAgICAgICAgJ1JlYWN0IGRvZXMgdGhpcyBmb3Ig
eW91IGF1dG9tYXRpY2FsbHkgaW4gYSBoaWdoLXBlcmZvcm1hbmNlICcgK1xuICAgICAgICAgICAg
ICAgICd3YXksIHNvIHlvdSBjYW4gc2FmZWx5IHJlbW92ZSB0aGlzIGNhbGwuIFNlZSAlcycsXG4g
ICAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxu
ICAgICAgICAgIHJldHVybiBib3VuZE1ldGhvZDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVi
b3VuZE1ldGhvZCA9IF9iaW5kLmFwcGx5KGJvdW5kTWV0aG9kLCBhcmd1bWVudHMpO1xuICAgICAg
ICByZWJvdW5kTWV0aG9kLl9fcmVhY3RCb3VuZENvbnRleHQgPSBjb21wb25lbnQ7XG4gICAgICAg
IHJlYm91bmRNZXRob2QuX19yZWFjdEJvdW5kTWV0aG9kID0gbWV0aG9kO1xuICAgICAgICByZWJv
dW5kTWV0aG9kLl9fcmVhY3RCb3VuZEFyZ3VtZW50cyA9IGFyZ3M7XG4gICAgICAgIHJldHVybiBy
ZWJvdW5kTWV0aG9kO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGJvdW5kTWV0aG9kO1xu
ICB9XG5cbiAgLyoqXG4gICAqIEJpbmRzIGFsbCBhdXRvLWJvdW5kIG1ldGhvZHMgaW4gYSBjb21w
b25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb21wb25lbnQgQ29tcG9uZW50IHdo
b3NlIG1ldGhvZCBpcyBnb2luZyB0byBiZSBib3VuZC5cbiAgICovXG4gIGZ1bmN0aW9uIGJpbmRB
dXRvQmluZE1ldGhvZHMoY29tcG9uZW50KSB7XG4gICAgdmFyIHBhaXJzID0gY29tcG9uZW50Ll9f
cmVhY3RBdXRvQmluZFBhaXJzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFpcnMubGVuZ3Ro
OyBpICs9IDIpIHtcbiAgICAgIHZhciBhdXRvQmluZEtleSA9IHBhaXJzW2ldO1xuICAgICAgdmFy
IG1ldGhvZCA9IHBhaXJzW2kgKyAxXTtcbiAgICAgIGNvbXBvbmVudFthdXRvQmluZEtleV0gPSBi
aW5kQXV0b0JpbmRNZXRob2QoY29tcG9uZW50LCBtZXRob2QpO1xuICAgIH1cbiAgfVxuXG4gIHZh
ciBJc01vdW50ZWRQcmVNaXhpbiA9IHtcbiAgICBjb21wb25lbnREaWRNb3VudDogZnVuY3Rpb24o
KSB7XG4gICAgICB0aGlzLl9faXNNb3VudGVkID0gdHJ1ZTtcbiAgICB9XG4gIH07XG5cbiAgdmFy
IElzTW91bnRlZFBvc3RNaXhpbiA9IHtcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudDogZnVuY3Rp
b24oKSB7XG4gICAgICB0aGlzLl9faXNNb3VudGVkID0gZmFsc2U7XG4gICAgfVxuICB9O1xuXG4g
IC8qKlxuICAgKiBBZGQgbW9yZSB0byB0aGUgUmVhY3RDbGFzcyBiYXNlIGNsYXNzLiBUaGVzZSBh
cmUgYWxsIGxlZ2FjeSBmZWF0dXJlcyBhbmRcbiAgICogdGhlcmVmb3JlIG5vdCBhbHJlYWR5IHBh
cnQgb2YgdGhlIG1vZGVybiBSZWFjdENvbXBvbmVudC5cbiAgICovXG4gIHZhciBSZWFjdENsYXNz
TWl4aW4gPSB7XG4gICAgLyoqXG4gICAgICogVE9ETzogVGhpcyB3aWxsIGJlIGRlcHJlY2F0ZWQg
YmVjYXVzZSBzdGF0ZSBzaG91bGQgYWx3YXlzIGtlZXAgYSBjb25zaXN0ZW50XG4gICAgICogdHlw
ZSBzaWduYXR1cmUgYW5kIHRoZSBvbmx5IHVzZSBjYXNlIGZvciB0aGlzLCBpcyB0byBhdm9pZCB0
aGF0LlxuICAgICAqL1xuICAgIHJlcGxhY2VTdGF0ZTogZnVuY3Rpb24obmV3U3RhdGUsIGNhbGxi
YWNrKSB7XG4gICAgICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZVJlcGxhY2VTdGF0ZSh0aGlzLCBuZXdT
dGF0ZSwgY2FsbGJhY2spO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhl
ciBvciBub3QgdGhpcyBjb21wb3NpdGUgY29tcG9uZW50IGlzIG1vdW50ZWQuXG4gICAgICogQHJl
dHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBtb3VudGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICog
QHByb3RlY3RlZFxuICAgICAqIEBmaW5hbFxuICAgICAqL1xuICAgIGlzTW91bnRlZDogZnVuY3Rp
b24oKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykg
e1xuICAgICAgICB3YXJuaW5nKFxuICAgICAgICAgIHRoaXMuX19kaWRXYXJuSXNNb3VudGVkLFxu
ICAgICAgICAgICclczogaXNNb3VudGVkIGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQsIG1ha2Ugc3Vy
ZSB0byBjbGVhbiB1cCAnICtcbiAgICAgICAgICAgICdzdWJzY3JpcHRpb25zIGFuZCBwZW5kaW5n
IHJlcXVlc3RzIGluIGNvbXBvbmVudFdpbGxVbm1vdW50IHRvICcgK1xuICAgICAgICAgICAgJ3By
ZXZlbnQgbWVtb3J5IGxlYWtzLicsXG4gICAgICAgICAgKHRoaXMuY29uc3RydWN0b3IgJiYgdGhp
cy5jb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSkgfHxcbiAgICAgICAgICAgIHRoaXMubmFtZSB8fFxu
ICAgICAgICAgICAgJ0NvbXBvbmVudCdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fX2RpZFdh
cm5Jc01vdW50ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuICEhdGhpcy5fX2lzTW91
bnRlZDtcbiAgICB9XG4gIH07XG5cbiAgdmFyIFJlYWN0Q2xhc3NDb21wb25lbnQgPSBmdW5jdGlv
bigpIHt9O1xuICBfYXNzaWduKFxuICAgIFJlYWN0Q2xhc3NDb21wb25lbnQucHJvdG90eXBlLFxu
ICAgIFJlYWN0Q29tcG9uZW50LnByb3RvdHlwZSxcbiAgICBSZWFjdENsYXNzTWl4aW5cbiAgKTtc
blxuICAvKipcbiAgICogQ3JlYXRlcyBhIGNvbXBvc2l0ZSBjb21wb25lbnQgY2xhc3MgZ2l2ZW4g
YSBjbGFzcyBzcGVjaWZpY2F0aW9uLlxuICAgKiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIu
aW8vcmVhY3QvZG9jcy90b3AtbGV2ZWwtYXBpLmh0bWwjcmVhY3QuY3JlYXRlY2xhc3NcbiAgICpc
biAgICogQHBhcmFtIHtvYmplY3R9IHNwZWMgQ2xhc3Mgc3BlY2lmaWNhdGlvbiAod2hpY2ggbXVz
dCBkZWZpbmUgYHJlbmRlcmApLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gQ29tcG9uZW50IGNv
bnN0cnVjdG9yIGZ1bmN0aW9uLlxuICAgKiBAcHVibGljXG4gICAqL1xuICBmdW5jdGlvbiBjcmVh
dGVDbGFzcyhzcGVjKSB7XG4gICAgLy8gVG8ga2VlcCBvdXIgd2FybmluZ3MgbW9yZSB1bmRlcnN0
YW5kYWJsZSwgd2UnbGwgdXNlIGEgbGl0dGxlIGhhY2sgaGVyZSB0b1xuICAgIC8vIGVuc3VyZSB0
aGF0IENvbnN0cnVjdG9yLm5hbWUgIT09ICdDb25zdHJ1Y3RvcicuIFRoaXMgbWFrZXMgc3VyZSB3
ZSBkb24ndFxuICAgIC8vIHVubmVjZXNzYXJpbHkgaWRlbnRpZnkgYSBjbGFzcyB3aXRob3V0IGRp
c3BsYXlOYW1lIGFzICdDb25zdHJ1Y3RvcicuXG4gICAgdmFyIENvbnN0cnVjdG9yID0gaWRlbnRp
dHkoZnVuY3Rpb24ocHJvcHMsIGNvbnRleHQsIHVwZGF0ZXIpIHtcbiAgICAgIC8vIFRoaXMgY29u
c3RydWN0b3IgZ2V0cyBvdmVycmlkZGVuIGJ5IG1vY2tzLiBUaGUgYXJndW1lbnQgaXMgdXNlZFxu
ICAgICAgLy8gYnkgbW9ja3MgdG8gYXNzZXJ0IG9uIHdoYXQgZ2V0cyBtb3VudGVkLlxuXG4gICAg
ICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB3
YXJuaW5nKFxuICAgICAgICAgIHRoaXMgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcixcbiAgICAgICAg
ICAnU29tZXRoaW5nIGlzIGNhbGxpbmcgYSBSZWFjdCBjb21wb25lbnQgZGlyZWN0bHkuIFVzZSBh
IGZhY3Rvcnkgb3IgJyArXG4gICAgICAgICAgICAnSlNYIGluc3RlYWQuIFNlZTogaHR0cHM6Ly9m
Yi5tZS9yZWFjdC1sZWdhY3lmYWN0b3J5J1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAv
LyBXaXJlIHVwIGF1dG8tYmluZGluZ1xuICAgICAgaWYgKHRoaXMuX19yZWFjdEF1dG9CaW5kUGFp
cnMubGVuZ3RoKSB7XG4gICAgICAgIGJpbmRBdXRvQmluZE1ldGhvZHModGhpcyk7XG4gICAgICB9
XG5cbiAgICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRl
eHQ7XG4gICAgICB0aGlzLnJlZnMgPSBlbXB0eU9iamVjdDtcbiAgICAgIHRoaXMudXBkYXRlciA9
IHVwZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7XG5cbiAgICAgIHRoaXMuc3RhdGUgPSBu
dWxsO1xuXG4gICAgICAvLyBSZWFjdENsYXNzZXMgZG9lc24ndCBoYXZlIGNvbnN0cnVjdG9ycy4g
SW5zdGVhZCwgdGhleSB1c2UgdGhlXG4gICAgICAvLyBnZXRJbml0aWFsU3RhdGUgYW5kIGNvbXBv
bmVudFdpbGxNb3VudCBtZXRob2RzIGZvciBpbml0aWFsaXphdGlvbi5cblxuICAgICAgdmFyIGlu
aXRpYWxTdGF0ZSA9IHRoaXMuZ2V0SW5pdGlhbFN0YXRlID8gdGhpcy5nZXRJbml0aWFsU3RhdGUo
KSA6IG51bGw7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9u
Jykge1xuICAgICAgICAvLyBXZSBhbGxvdyBhdXRvLW1vY2tzIHRvIHByb2NlZWQgYXMgaWYgdGhl
eSdyZSByZXR1cm5pbmcgbnVsbC5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGluaXRpYWxTdGF0
ZSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgdGhpcy5nZXRJbml0aWFsU3RhdGUuX2lzTW9j
a0Z1bmN0aW9uXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgcHJvYmFibHkgYmFk
IHByYWN0aWNlLiBDb25zaWRlciB3YXJuaW5nIGhlcmUgYW5kXG4gICAgICAgICAgLy8gZGVwcmVj
YXRpbmcgdGhpcyBjb252ZW5pZW5jZS5cbiAgICAgICAgICBpbml0aWFsU3RhdGUgPSBudWxsO1xu
ICAgICAgICB9XG4gICAgICB9XG4gICAgICBfaW52YXJpYW50KFxuICAgICAgICB0eXBlb2YgaW5p
dGlhbFN0YXRlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShpbml0aWFsU3RhdGUpLFxu
ICAgICAgICAnJXMuZ2V0SW5pdGlhbFN0YXRlKCk6IG11c3QgcmV0dXJuIGFuIG9iamVjdCBvciBu
dWxsJyxcbiAgICAgICAgQ29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgJ1JlYWN0Q29tcG9zaXRl
Q29tcG9uZW50J1xuICAgICAgKTtcblxuICAgICAgdGhpcy5zdGF0ZSA9IGluaXRpYWxTdGF0ZTtc
biAgICB9KTtcbiAgICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBuZXcgUmVhY3RDbGFzc0NvbXBv
bmVudCgpO1xuICAgIENvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnN0cnVj
dG9yO1xuICAgIENvbnN0cnVjdG9yLnByb3RvdHlwZS5fX3JlYWN0QXV0b0JpbmRQYWlycyA9IFtd
O1xuXG4gICAgaW5qZWN0ZWRNaXhpbnMuZm9yRWFjaChtaXhTcGVjSW50b0NvbXBvbmVudC5iaW5k
KG51bGwsIENvbnN0cnVjdG9yKSk7XG5cbiAgICBtaXhTcGVjSW50b0NvbXBvbmVudChDb25zdHJ1
Y3RvciwgSXNNb3VudGVkUHJlTWl4aW4pO1xuICAgIG1peFNwZWNJbnRvQ29tcG9uZW50KENvbnN0
cnVjdG9yLCBzcGVjKTtcbiAgICBtaXhTcGVjSW50b0NvbXBvbmVudChDb25zdHJ1Y3RvciwgSXNN
b3VudGVkUG9zdE1peGluKTtcblxuICAgIC8vIEluaXRpYWxpemUgdGhlIGRlZmF1bHRQcm9wcyBw
cm9wZXJ0eSBhZnRlciBhbGwgbWl4aW5zIGhhdmUgYmVlbiBtZXJnZWQuXG4gICAgaWYgKENvbnN0
cnVjdG9yLmdldERlZmF1bHRQcm9wcykge1xuICAgICAgQ29uc3RydWN0b3IuZGVmYXVsdFByb3Bz
ID0gQ29uc3RydWN0b3IuZ2V0RGVmYXVsdFByb3BzKCk7XG4gICAgfVxuXG4gICAgaWYgKHByb2Nl
c3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIC8vIFRoaXMgaXMgYSB0
YWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgdXNlIG9mIHRoZXNlIG1ldGhvZCBuYW1lcyBpcyBvayxc
biAgICAgIC8vIHNpbmNlIGl0J3MgdXNlZCB3aXRoIGNyZWF0ZUNsYXNzLiBJZiBpdCdzIG5vdCwg
dGhlbiBpdCdzIGxpa2VseSBhXG4gICAgICAvLyBtaXN0YWtlIHNvIHdlJ2xsIHdhcm4geW91IHRv
IHVzZSB0aGUgc3RhdGljIHByb3BlcnR5LCBwcm9wZXJ0eVxuICAgICAgLy8gaW5pdGlhbGl6ZXIg
b3IgY29uc3RydWN0b3IgcmVzcGVjdGl2ZWx5LlxuICAgICAgaWYgKENvbnN0cnVjdG9yLmdldERl
ZmF1bHRQcm9wcykge1xuICAgICAgICBDb25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMuaXNSZWFj
dENsYXNzQXBwcm92ZWQgPSB7fTtcbiAgICAgIH1cbiAgICAgIGlmIChDb25zdHJ1Y3Rvci5wcm90
b3R5cGUuZ2V0SW5pdGlhbFN0YXRlKSB7XG4gICAgICAgIENvbnN0cnVjdG9yLnByb3RvdHlwZS5n
ZXRJbml0aWFsU3RhdGUuaXNSZWFjdENsYXNzQXBwcm92ZWQgPSB7fTtcbiAgICAgIH1cbiAgICB9
XG5cbiAgICBfaW52YXJpYW50KFxuICAgICAgQ29uc3RydWN0b3IucHJvdG90eXBlLnJlbmRlcixc
biAgICAgICdjcmVhdGVDbGFzcyguLi4pOiBDbGFzcyBzcGVjaWZpY2F0aW9uIG11c3QgaW1wbGVt
ZW50IGEgYHJlbmRlcmAgbWV0aG9kLidcbiAgICApO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5P
REVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHdhcm5pbmcoXG4gICAgICAgICFDb25z
dHJ1Y3Rvci5wcm90b3R5cGUuY29tcG9uZW50U2hvdWxkVXBkYXRlLFxuICAgICAgICAnJXMgaGFz
IGEgbWV0aG9kIGNhbGxlZCAnICtcbiAgICAgICAgICAnY29tcG9uZW50U2hvdWxkVXBkYXRlKCku
IERpZCB5b3UgbWVhbiBzaG91bGRDb21wb25lbnRVcGRhdGUoKT8gJyArXG4gICAgICAgICAgJ1Ro
ZSBuYW1lIGlzIHBocmFzZWQgYXMgYSBxdWVzdGlvbiBiZWNhdXNlIHRoZSBmdW5jdGlvbiBpcyAn
ICtcbiAgICAgICAgICAnZXhwZWN0ZWQgdG8gcmV0dXJuIGEgdmFsdWUuJyxcbiAgICAgICAgc3Bl
Yy5kaXNwbGF5TmFtZSB8fCAnQSBjb21wb25lbnQnXG4gICAgICApO1xuICAgICAgd2FybmluZyhc
biAgICAgICAgIUNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb21wb25lbnRXaWxsUmVjaWV2ZVByb3Bz
LFxuICAgICAgICAnJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICtcbiAgICAgICAgICAnY29tcG9u
ZW50V2lsbFJlY2lldmVQcm9wcygpLiBEaWQgeW91IG1lYW4gY29tcG9uZW50V2lsbFJlY2VpdmVQ
cm9wcygpPycsXG4gICAgICAgIHNwZWMuZGlzcGxheU5hbWUgfHwgJ0EgY29tcG9uZW50J1xuICAg
ICAgKTtcbiAgICB9XG5cbiAgICAvLyBSZWR1Y2UgdGltZSBzcGVudCBkb2luZyBsb29rdXBzIGJ5
IHNldHRpbmcgdGhlc2Ugb24gdGhlIHByb3RvdHlwZS5cbiAgICBmb3IgKHZhciBtZXRob2ROYW1l
IGluIFJlYWN0Q2xhc3NJbnRlcmZhY2UpIHtcbiAgICAgIGlmICghQ29uc3RydWN0b3IucHJvdG90
eXBlW21ldGhvZE5hbWVdKSB7XG4gICAgICAgIENvbnN0cnVjdG9yLnByb3RvdHlwZVttZXRob2RO
YW1lXSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xu
ICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUNsYXNzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZhY3Rv
cnk7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25v
ZGVfbW9kdWxlcy9jcmVhdGUtcmVhY3QtY2xhc3MvZmFjdG9yeS5qc1xuLy8gbW9kdWxlIGlkID0g
MTE2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2Vu
dCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBz
b3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQg
aW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291
cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJl
IGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAq
L1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3Byb2RJbnZhcmlhbnQgPSByZXF1aXJlKCcuL3JlYWN0
UHJvZEludmFyaWFudCcpO1xuXG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZSgnLi9SZWFjdEVs
ZW1lbnQnKTtcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoJ2ZianMvbGliL2ludmFyaWFudCcp
O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGZpcnN0IGNoaWxkIGluIGEgY29sbGVjdGlvbiBvZiBj
aGlsZHJlbiBhbmQgdmVyaWZpZXMgdGhhdCB0aGVyZVxuICogaXMgb25seSBvbmUgY2hpbGQgaW4g
dGhlIGNvbGxlY3Rpb24uXG4gKlxuICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3Jl
YWN0L2RvY3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0LmNoaWxkcmVuLm9ubHlcbiAqXG4gKiBU
aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCBh
IHNpbmdsZSBjaGlsZCBnZXRzXG4gKiBwYXNzZWQgd2l0aG91dCBhIHdyYXBwZXIsIGJ1dCB0aGUg
cHVycG9zZSBvZiB0aGlzIGhlbHBlciBmdW5jdGlvbiBpcyB0b1xuICogYWJzdHJhY3QgYXdheSB0
aGUgcGFydGljdWxhciBzdHJ1Y3R1cmUgb2YgY2hpbGRyZW4uXG4gKlxuICogQHBhcmFtIHs/b2Jq
ZWN0fSBjaGlsZHJlbiBDaGlsZCBjb2xsZWN0aW9uIHN0cnVjdHVyZS5cbiAqIEByZXR1cm4ge1Jl
YWN0RWxlbWVudH0gVGhlIGZpcnN0IGFuZCBvbmx5IGBSZWFjdEVsZW1lbnRgIGNvbnRhaW5lZCBp
biB0aGVcbiAqIHN0cnVjdHVyZS5cbiAqL1xuZnVuY3Rpb24gb25seUNoaWxkKGNoaWxkcmVuKSB7
XG4gICFSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pID8gcHJvY2Vzcy5lbnYu
Tk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ1JlYWN0LkNoaWxk
cmVuLm9ubHkgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIHNpbmdsZSBSZWFjdCBlbGVtZW50IGNoaWxk
LicpIDogX3Byb2RJbnZhcmlhbnQoJzE0MycpIDogdm9pZCAwO1xuICByZXR1cm4gY2hpbGRyZW47
XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb25seUNoaWxkO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8v
L1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9vbmx5Q2hp
bGQuanNcbi8vIG1vZHVsZSBpZCA9IDExN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0
cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvUmVhY3RET00nKTtcblxu
XG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1
bGVzL3JlYWN0LWRvbS9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gMTE4XG4vLyBtb2R1bGUgY2h1
bmtzID0gMCIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5c
biAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNl
bnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNF
IGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0
aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRF
TlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4vKiBnbG9iYWxzIF9f
UkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJl
YWN0RE9NQ29tcG9uZW50VHJlZSA9IHJlcXVpcmUoJy4vUmVhY3RET01Db21wb25lbnRUcmVlJyk7
XG52YXIgUmVhY3REZWZhdWx0SW5qZWN0aW9uID0gcmVxdWlyZSgnLi9SZWFjdERlZmF1bHRJbmpl
Y3Rpb24nKTtcbnZhciBSZWFjdE1vdW50ID0gcmVxdWlyZSgnLi9SZWFjdE1vdW50Jyk7XG52YXIg
UmVhY3RSZWNvbmNpbGVyID0gcmVxdWlyZSgnLi9SZWFjdFJlY29uY2lsZXInKTtcbnZhciBSZWFj
dFVwZGF0ZXMgPSByZXF1aXJlKCcuL1JlYWN0VXBkYXRlcycpO1xudmFyIFJlYWN0VmVyc2lvbiA9
IHJlcXVpcmUoJy4vUmVhY3RWZXJzaW9uJyk7XG5cbnZhciBmaW5kRE9NTm9kZSA9IHJlcXVpcmUo
Jy4vZmluZERPTU5vZGUnKTtcbnZhciBnZXRIb3N0Q29tcG9uZW50RnJvbUNvbXBvc2l0ZSA9IHJl
cXVpcmUoJy4vZ2V0SG9zdENvbXBvbmVudEZyb21Db21wb3NpdGUnKTtcbnZhciByZW5kZXJTdWJ0
cmVlSW50b0NvbnRhaW5lciA9IHJlcXVpcmUoJy4vcmVuZGVyU3VidHJlZUludG9Db250YWluZXIn
KTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuXG5SZWFjdERl
ZmF1bHRJbmplY3Rpb24uaW5qZWN0KCk7XG5cbnZhciBSZWFjdERPTSA9IHtcbiAgZmluZERPTU5v
ZGU6IGZpbmRET01Ob2RlLFxuICByZW5kZXI6IFJlYWN0TW91bnQucmVuZGVyLFxuICB1bm1vdW50
Q29tcG9uZW50QXROb2RlOiBSZWFjdE1vdW50LnVubW91bnRDb21wb25lbnRBdE5vZGUsXG4gIHZl
cnNpb246IFJlYWN0VmVyc2lvbixcblxuICAvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9c
biAgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXM6IFJlYWN0VXBkYXRlcy5iYXRjaGVkVXBkYXRlcyxc
biAgdW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXI6IHJlbmRlclN1YnRyZWVJbnRv
Q29udGFpbmVyXG4gIC8qIGVzbGludC1lbmFibGUgY2FtZWxjYXNlICovXG59O1xuXG4vLyBJbmpl
Y3QgdGhlIHJ1bnRpbWUgaW50byBhIGRldnRvb2xzIGdsb2JhbCBob29rIHJlZ2FyZGxlc3Mgb2Yg
YnJvd3Nlci5cbi8vIEFsbG93cyBmb3IgZGVidWdnaW5nIHdoZW4gdGhlIGhvb2sgaXMgaW5qZWN0
ZWQgb24gdGhlIHBhZ2UuXG5pZiAodHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tf
XyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tf
Xy5pbmplY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9P
S19fLmluamVjdCh7XG4gICAgQ29tcG9uZW50VHJlZToge1xuICAgICAgZ2V0Q2xvc2VzdEluc3Rh
bmNlRnJvbU5vZGU6IFJlYWN0RE9NQ29tcG9uZW50VHJlZS5nZXRDbG9zZXN0SW5zdGFuY2VGcm9t
Tm9kZSxcbiAgICAgIGdldE5vZGVGcm9tSW5zdGFuY2U6IGZ1bmN0aW9uIChpbnN0KSB7XG4gICAg
ICAgIC8vIGluc3QgaXMgYW4gaW50ZXJuYWwgaW5zdGFuY2UgKGJ1dCBjb3VsZCBiZSBhIGNvbXBv
c2l0ZSlcbiAgICAgICAgaWYgKGluc3QuX3JlbmRlcmVkQ29tcG9uZW50KSB7XG4gICAgICAgICAg
aW5zdCA9IGdldEhvc3RDb21wb25lbnRGcm9tQ29tcG9zaXRlKGluc3QpO1xuICAgICAgICB9XG4g
ICAgICAgIGlmIChpbnN0KSB7XG4gICAgICAgICAgcmV0dXJuIFJlYWN0RE9NQ29tcG9uZW50VHJl
ZS5nZXROb2RlRnJvbUluc3RhbmNlKGluc3QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAg
IHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBNb3VudDogUmVh
Y3RNb3VudCxcbiAgICBSZWNvbmNpbGVyOiBSZWFjdFJlY29uY2lsZXJcbiAgfSk7XG59XG5cbmlm
IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBFeGVjdXRp
b25FbnZpcm9ubWVudCA9IHJlcXVpcmUoJ2ZianMvbGliL0V4ZWN1dGlvbkVudmlyb25tZW50Jyk7
XG4gIGlmIChFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00gJiYgd2luZG93LnRvcCA9PT0g
d2luZG93LnNlbGYpIHtcbiAgICAvLyBGaXJzdCBjaGVjayBpZiBkZXZ0b29scyBpcyBub3QgaW5z
dGFsbGVkXG4gICAgaWYgKHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gPT09
ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBJZiB3ZSdyZSBpbiBDaHJvbWUgb3IgRmlyZWZveCwg
cHJvdmlkZSBhIGRvd25sb2FkIGxpbmsgaWYgbm90IGluc3RhbGxlZC5cbiAgICAgIGlmIChuYXZp
Z2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0Nocm9tZScpID4gLTEgJiYgbmF2aWdhdG9yLnVzZXJB
Z2VudC5pbmRleE9mKCdFZGdlJykgPT09IC0xIHx8IG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhP
ZignRmlyZWZveCcpID4gLTEpIHtcbiAgICAgICAgLy8gRmlyZWZveCBkb2VzIG5vdCBoYXZlIHRo
ZSBpc3N1ZSB3aXRoIGRldnRvb2xzIGxvYWRlZCBvdmVyIGZpbGU6Ly9cbiAgICAgICAgdmFyIHNo
b3dGaWxlVXJsTWVzc2FnZSA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbC5pbmRleE9mKCdodHRw
JykgPT09IC0xICYmIG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignRmlyZWZveCcpID09PSAt
MTtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnRG93bmxvYWQgdGhlIFJlYWN0IERldlRvb2xzICcg
KyAoc2hvd0ZpbGVVcmxNZXNzYWdlID8gJ2FuZCB1c2UgYW4gSFRUUCBzZXJ2ZXIgKGluc3RlYWQg
b2YgYSBmaWxlOiBVUkwpICcgOiAnJykgKyAnZm9yIGEgYmV0dGVyIGRldmVsb3BtZW50IGV4cGVy
aWVuY2U6ICcgKyAnaHR0cHM6Ly9mYi5tZS9yZWFjdC1kZXZ0b29scycpO1xuICAgICAgfVxuICAg
IH1cblxuICAgIHZhciB0ZXN0RnVuYyA9IGZ1bmN0aW9uIHRlc3RGbigpIHt9O1xuICAgIHByb2Nl
c3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKCh0ZXN0RnVuYy5uYW1l
IHx8IHRlc3RGdW5jLnRvU3RyaW5nKCkpLmluZGV4T2YoJ3Rlc3RGbicpICE9PSAtMSwgXCJJdCBs
b29rcyBsaWtlIHlvdSdyZSB1c2luZyBhIG1pbmlmaWVkIGNvcHkgb2YgdGhlIGRldmVsb3BtZW50
IGJ1aWxkIFwiICsgJ29mIFJlYWN0LiBXaGVuIGRlcGxveWluZyBSZWFjdCBhcHBzIHRvIHByb2R1
Y3Rpb24sIG1ha2Ugc3VyZSB0byB1c2UgJyArICd0aGUgcHJvZHVjdGlvbiBidWlsZCB3aGljaCBz
a2lwcyBkZXZlbG9wbWVudCB3YXJuaW5ncyBhbmQgaXMgZmFzdGVyLiAnICsgJ1NlZSBodHRwczov
L2ZiLm1lL3JlYWN0LW1pbmlmaWNhdGlvbiBmb3IgbW9yZSBkZXRhaWxzLicpIDogdm9pZCAwO1xu
XG4gICAgLy8gSWYgd2UncmUgaW4gSUU4LCBjaGVjayB0byBzZWUgaWYgd2UgYXJlIGluIGNvbXBh
dGliaWxpdHkgbW9kZSBhbmQgcHJvdmlkZVxuICAgIC8vIGluZm9ybWF0aW9uIG9uIHByZXZlbnRp
bmcgY29tcGF0aWJpbGl0eSBtb2RlXG4gICAgdmFyIGllQ29tcGF0aWJpbGl0eU1vZGUgPSBkb2N1
bWVudC5kb2N1bWVudE1vZGUgJiYgZG9jdW1lbnQuZG9jdW1lbnRNb2RlIDwgODtcblxuICAgIHBy
b2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKCFpZUNvbXBhdGli
aWxpdHlNb2RlLCAnSW50ZXJuZXQgRXhwbG9yZXIgaXMgcnVubmluZyBpbiBjb21wYXRpYmlsaXR5
IG1vZGU7IHBsZWFzZSBhZGQgdGhlICcgKyAnZm9sbG93aW5nIHRhZyB0byB5b3VyIEhUTUwgdG8g
cHJldmVudCB0aGlzIGZyb20gaGFwcGVuaW5nOiAnICsgJzxtZXRhIGh0dHAtZXF1aXY9XCJYLVVB
LUNvbXBhdGlibGVcIiBjb250ZW50PVwiSUU9ZWRnZVwiIC8+JykgOiB2b2lkIDA7XG5cbiAgICB2
YXIgZXhwZWN0ZWRGZWF0dXJlcyA9IFtcbiAgICAvLyBzaGltc1xuICAgIEFycmF5LmlzQXJyYXks
IEFycmF5LnByb3RvdHlwZS5ldmVyeSwgQXJyYXkucHJvdG90eXBlLmZvckVhY2gsIEFycmF5LnBy
b3RvdHlwZS5pbmRleE9mLCBBcnJheS5wcm90b3R5cGUubWFwLCBEYXRlLm5vdywgRnVuY3Rpb24u
cHJvdG90eXBlLmJpbmQsIE9iamVjdC5rZXlzLCBTdHJpbmcucHJvdG90eXBlLnRyaW1dO1xuXG4g
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHBlY3RlZEZlYXR1cmVzLmxlbmd0aDsgaSsrKSB7XG4g
ICAgICBpZiAoIWV4cGVjdGVkRmVhdHVyZXNbaV0pIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9E
RV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdPbmUgb3IgbW9yZSBFUzUg
c2hpbXMgZXhwZWN0ZWQgYnkgUmVhY3QgYXJlIG5vdCBhdmFpbGFibGU6ICcgKyAnaHR0cHM6Ly9m
Yi5tZS9yZWFjdC13YXJuaW5nLXBvbHlmaWxscycpIDogdm9pZCAwO1xuICAgICAgICBicmVhaztc
biAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAn
cHJvZHVjdGlvbicpIHtcbiAgdmFyIFJlYWN0SW5zdHJ1bWVudGF0aW9uID0gcmVxdWlyZSgnLi9S
ZWFjdEluc3RydW1lbnRhdGlvbicpO1xuICB2YXIgUmVhY3RET01Vbmtub3duUHJvcGVydHlIb29r
ID0gcmVxdWlyZSgnLi9SZWFjdERPTVVua25vd25Qcm9wZXJ0eUhvb2snKTtcbiAgdmFyIFJlYWN0
RE9NTnVsbElucHV0VmFsdWVQcm9wSG9vayA9IHJlcXVpcmUoJy4vUmVhY3RET01OdWxsSW5wdXRW
YWx1ZVByb3BIb29rJyk7XG4gIHZhciBSZWFjdERPTUludmFsaWRBUklBSG9vayA9IHJlcXVpcmUo
Jy4vUmVhY3RET01JbnZhbGlkQVJJQUhvb2snKTtcblxuICBSZWFjdEluc3RydW1lbnRhdGlvbi5k
ZWJ1Z1Rvb2wuYWRkSG9vayhSZWFjdERPTVVua25vd25Qcm9wZXJ0eUhvb2spO1xuICBSZWFjdElu
c3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wuYWRkSG9vayhSZWFjdERPTU51bGxJbnB1dFZhbHVlUHJv
cEhvb2spO1xuICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wuYWRkSG9vayhSZWFjdERP
TUludmFsaWRBUklBSG9vayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RET007XG5cblxu
Ly8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMv
cmVhY3QtZG9tL2xpYi9SZWFjdERPTS5qc1xuLy8gbW9kdWxlIGlkID0gMTE5XG4vLyBtb2R1bGUg
Y2h1bmtzID0gMCIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIElu
Yy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBs
aWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNF
TlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFk
ZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQ
QVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmlj
dCc7XG5cbnZhciBBUklBRE9NUHJvcGVydHlDb25maWcgPSByZXF1aXJlKCcuL0FSSUFET01Qcm9w
ZXJ0eUNvbmZpZycpO1xudmFyIEJlZm9yZUlucHV0RXZlbnRQbHVnaW4gPSByZXF1aXJlKCcuL0Jl
Zm9yZUlucHV0RXZlbnRQbHVnaW4nKTtcbnZhciBDaGFuZ2VFdmVudFBsdWdpbiA9IHJlcXVpcmUo
Jy4vQ2hhbmdlRXZlbnRQbHVnaW4nKTtcbnZhciBEZWZhdWx0RXZlbnRQbHVnaW5PcmRlciA9IHJl
cXVpcmUoJy4vRGVmYXVsdEV2ZW50UGx1Z2luT3JkZXInKTtcbnZhciBFbnRlckxlYXZlRXZlbnRQ
bHVnaW4gPSByZXF1aXJlKCcuL0VudGVyTGVhdmVFdmVudFBsdWdpbicpO1xudmFyIEhUTUxET01Q
cm9wZXJ0eUNvbmZpZyA9IHJlcXVpcmUoJy4vSFRNTERPTVByb3BlcnR5Q29uZmlnJyk7XG52YXIg
UmVhY3RDb21wb25lbnRCcm93c2VyRW52aXJvbm1lbnQgPSByZXF1aXJlKCcuL1JlYWN0Q29tcG9u
ZW50QnJvd3NlckVudmlyb25tZW50Jyk7XG52YXIgUmVhY3RET01Db21wb25lbnQgPSByZXF1aXJl
KCcuL1JlYWN0RE9NQ29tcG9uZW50Jyk7XG52YXIgUmVhY3RET01Db21wb25lbnRUcmVlID0gcmVx
dWlyZSgnLi9SZWFjdERPTUNvbXBvbmVudFRyZWUnKTtcbnZhciBSZWFjdERPTUVtcHR5Q29tcG9u
ZW50ID0gcmVxdWlyZSgnLi9SZWFjdERPTUVtcHR5Q29tcG9uZW50Jyk7XG52YXIgUmVhY3RET01U
cmVlVHJhdmVyc2FsID0gcmVxdWlyZSgnLi9SZWFjdERPTVRyZWVUcmF2ZXJzYWwnKTtcbnZhciBS
ZWFjdERPTVRleHRDb21wb25lbnQgPSByZXF1aXJlKCcuL1JlYWN0RE9NVGV4dENvbXBvbmVudCcp
O1xudmFyIFJlYWN0RGVmYXVsdEJhdGNoaW5nU3RyYXRlZ3kgPSByZXF1aXJlKCcuL1JlYWN0RGVm
YXVsdEJhdGNoaW5nU3RyYXRlZ3knKTtcbnZhciBSZWFjdEV2ZW50TGlzdGVuZXIgPSByZXF1aXJl
KCcuL1JlYWN0RXZlbnRMaXN0ZW5lcicpO1xudmFyIFJlYWN0SW5qZWN0aW9uID0gcmVxdWlyZSgn
Li9SZWFjdEluamVjdGlvbicpO1xudmFyIFJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24gPSByZXF1
aXJlKCcuL1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24nKTtcbnZhciBTVkdET01Qcm9wZXJ0eUNv
bmZpZyA9IHJlcXVpcmUoJy4vU1ZHRE9NUHJvcGVydHlDb25maWcnKTtcbnZhciBTZWxlY3RFdmVu
dFBsdWdpbiA9IHJlcXVpcmUoJy4vU2VsZWN0RXZlbnRQbHVnaW4nKTtcbnZhciBTaW1wbGVFdmVu
dFBsdWdpbiA9IHJlcXVpcmUoJy4vU2ltcGxlRXZlbnRQbHVnaW4nKTtcblxudmFyIGFscmVhZHlJ
bmplY3RlZCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBpbmplY3QoKSB7XG4gIGlmIChhbHJlYWR5SW5q
ZWN0ZWQpIHtcbiAgICAvLyBUT0RPOiBUaGlzIGlzIGN1cnJlbnRseSB0cnVlIGJlY2F1c2UgdGhl
c2UgaW5qZWN0aW9ucyBhcmUgc2hhcmVkIGJldHdlZW5cbiAgICAvLyB0aGUgY2xpZW50IGFuZCB0
aGUgc2VydmVyIHBhY2thZ2UuIFRoZXkgc2hvdWxkIGJlIGJ1aWx0IGluZGVwZW5kZW50bHlcbiAg
ICAvLyBhbmQgbm90IHNoYXJlIGFueSBpbmplY3Rpb24gc3RhdGUuIFRoZW4gdGhpcyBwcm9ibGVt
IHdpbGwgYmUgc29sdmVkLlxuICAgIHJldHVybjtcbiAgfVxuICBhbHJlYWR5SW5qZWN0ZWQgPSB0
cnVlO1xuXG4gIFJlYWN0SW5qZWN0aW9uLkV2ZW50RW1pdHRlci5pbmplY3RSZWFjdEV2ZW50TGlz
dGVuZXIoUmVhY3RFdmVudExpc3RlbmVyKTtcblxuICAvKipcbiAgICogSW5qZWN0IG1vZHVsZXMg
Zm9yIHJlc29sdmluZyBET00gaGllcmFyY2h5IGFuZCBwbHVnaW4gb3JkZXJpbmcuXG4gICAqL1xu
ICBSZWFjdEluamVjdGlvbi5FdmVudFBsdWdpbkh1Yi5pbmplY3RFdmVudFBsdWdpbk9yZGVyKERl
ZmF1bHRFdmVudFBsdWdpbk9yZGVyKTtcbiAgUmVhY3RJbmplY3Rpb24uRXZlbnRQbHVnaW5VdGls
cy5pbmplY3RDb21wb25lbnRUcmVlKFJlYWN0RE9NQ29tcG9uZW50VHJlZSk7XG4gIFJlYWN0SW5q
ZWN0aW9uLkV2ZW50UGx1Z2luVXRpbHMuaW5qZWN0VHJlZVRyYXZlcnNhbChSZWFjdERPTVRyZWVU
cmF2ZXJzYWwpO1xuXG4gIC8qKlxuICAgKiBTb21lIGltcG9ydGFudCBldmVudCBwbHVnaW5zIGlu
Y2x1ZGVkIGJ5IGRlZmF1bHQgKHdpdGhvdXQgaGF2aW5nIHRvIHJlcXVpcmVcbiAgICogdGhlbSku
XG4gICAqL1xuICBSZWFjdEluamVjdGlvbi5FdmVudFBsdWdpbkh1Yi5pbmplY3RFdmVudFBsdWdp
bnNCeU5hbWUoe1xuICAgIFNpbXBsZUV2ZW50UGx1Z2luOiBTaW1wbGVFdmVudFBsdWdpbixcbiAg
ICBFbnRlckxlYXZlRXZlbnRQbHVnaW46IEVudGVyTGVhdmVFdmVudFBsdWdpbixcbiAgICBDaGFu
Z2VFdmVudFBsdWdpbjogQ2hhbmdlRXZlbnRQbHVnaW4sXG4gICAgU2VsZWN0RXZlbnRQbHVnaW46
IFNlbGVjdEV2ZW50UGx1Z2luLFxuICAgIEJlZm9yZUlucHV0RXZlbnRQbHVnaW46IEJlZm9yZUlu
cHV0RXZlbnRQbHVnaW5cbiAgfSk7XG5cbiAgUmVhY3RJbmplY3Rpb24uSG9zdENvbXBvbmVudC5p
bmplY3RHZW5lcmljQ29tcG9uZW50Q2xhc3MoUmVhY3RET01Db21wb25lbnQpO1xuXG4gIFJlYWN0
SW5qZWN0aW9uLkhvc3RDb21wb25lbnQuaW5qZWN0VGV4dENvbXBvbmVudENsYXNzKFJlYWN0RE9N
VGV4dENvbXBvbmVudCk7XG5cbiAgUmVhY3RJbmplY3Rpb24uRE9NUHJvcGVydHkuaW5qZWN0RE9N
UHJvcGVydHlDb25maWcoQVJJQURPTVByb3BlcnR5Q29uZmlnKTtcbiAgUmVhY3RJbmplY3Rpb24u
RE9NUHJvcGVydHkuaW5qZWN0RE9NUHJvcGVydHlDb25maWcoSFRNTERPTVByb3BlcnR5Q29uZmln
KTtcbiAgUmVhY3RJbmplY3Rpb24uRE9NUHJvcGVydHkuaW5qZWN0RE9NUHJvcGVydHlDb25maWco
U1ZHRE9NUHJvcGVydHlDb25maWcpO1xuXG4gIFJlYWN0SW5qZWN0aW9uLkVtcHR5Q29tcG9uZW50
LmluamVjdEVtcHR5Q29tcG9uZW50RmFjdG9yeShmdW5jdGlvbiAoaW5zdGFudGlhdGUpIHtcbiAg
ICByZXR1cm4gbmV3IFJlYWN0RE9NRW1wdHlDb21wb25lbnQoaW5zdGFudGlhdGUpO1xuICB9KTtc
blxuICBSZWFjdEluamVjdGlvbi5VcGRhdGVzLmluamVjdFJlY29uY2lsZVRyYW5zYWN0aW9uKFJl
YWN0UmVjb25jaWxlVHJhbnNhY3Rpb24pO1xuICBSZWFjdEluamVjdGlvbi5VcGRhdGVzLmluamVj
dEJhdGNoaW5nU3RyYXRlZ3koUmVhY3REZWZhdWx0QmF0Y2hpbmdTdHJhdGVneSk7XG5cbiAgUmVh
Y3RJbmplY3Rpb24uQ29tcG9uZW50LmluamVjdEVudmlyb25tZW50KFJlYWN0Q29tcG9uZW50QnJv
d3NlckVudmlyb25tZW50KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGluamVjdDogaW5q
ZWN0XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4v
bm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3REZWZhdWx0SW5qZWN0aW9uLmpzXG4vLyBt
b2R1bGUgaWQgPSAxMjBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyoqXG4gKiBDb3B5cmlnaHQg
MjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAq
XG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGlj
ZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkg
b2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJp
Z2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3Rv
cnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEFSSUFET01Qcm9wZXJ0eUNvbmZp
ZyA9IHtcbiAgUHJvcGVydGllczoge1xuICAgIC8vIEdsb2JhbCBTdGF0ZXMgYW5kIFByb3BlcnRp
ZXNcbiAgICAnYXJpYS1jdXJyZW50JzogMCwgLy8gc3RhdGVcbiAgICAnYXJpYS1kZXRhaWxzJzog
MCxcbiAgICAnYXJpYS1kaXNhYmxlZCc6IDAsIC8vIHN0YXRlXG4gICAgJ2FyaWEtaGlkZGVuJzog
MCwgLy8gc3RhdGVcbiAgICAnYXJpYS1pbnZhbGlkJzogMCwgLy8gc3RhdGVcbiAgICAnYXJpYS1r
ZXlzaG9ydGN1dHMnOiAwLFxuICAgICdhcmlhLWxhYmVsJzogMCxcbiAgICAnYXJpYS1yb2xlZGVz
Y3JpcHRpb24nOiAwLFxuICAgIC8vIFdpZGdldCBBdHRyaWJ1dGVzXG4gICAgJ2FyaWEtYXV0b2Nv
bXBsZXRlJzogMCxcbiAgICAnYXJpYS1jaGVja2VkJzogMCxcbiAgICAnYXJpYS1leHBhbmRlZCc6
IDAsXG4gICAgJ2FyaWEtaGFzcG9wdXAnOiAwLFxuICAgICdhcmlhLWxldmVsJzogMCxcbiAgICAn
YXJpYS1tb2RhbCc6IDAsXG4gICAgJ2FyaWEtbXVsdGlsaW5lJzogMCxcbiAgICAnYXJpYS1tdWx0
aXNlbGVjdGFibGUnOiAwLFxuICAgICdhcmlhLW9yaWVudGF0aW9uJzogMCxcbiAgICAnYXJpYS1w
bGFjZWhvbGRlcic6IDAsXG4gICAgJ2FyaWEtcHJlc3NlZCc6IDAsXG4gICAgJ2FyaWEtcmVhZG9u
bHknOiAwLFxuICAgICdhcmlhLXJlcXVpcmVkJzogMCxcbiAgICAnYXJpYS1zZWxlY3RlZCc6IDAs
XG4gICAgJ2FyaWEtc29ydCc6IDAsXG4gICAgJ2FyaWEtdmFsdWVtYXgnOiAwLFxuICAgICdhcmlh
LXZhbHVlbWluJzogMCxcbiAgICAnYXJpYS12YWx1ZW5vdyc6IDAsXG4gICAgJ2FyaWEtdmFsdWV0
ZXh0JzogMCxcbiAgICAvLyBMaXZlIFJlZ2lvbiBBdHRyaWJ1dGVzXG4gICAgJ2FyaWEtYXRvbWlj
JzogMCxcbiAgICAnYXJpYS1idXN5JzogMCxcbiAgICAnYXJpYS1saXZlJzogMCxcbiAgICAnYXJp
YS1yZWxldmFudCc6IDAsXG4gICAgLy8gRHJhZy1hbmQtRHJvcCBBdHRyaWJ1dGVzXG4gICAgJ2Fy
aWEtZHJvcGVmZmVjdCc6IDAsXG4gICAgJ2FyaWEtZ3JhYmJlZCc6IDAsXG4gICAgLy8gUmVsYXRp
b25zaGlwIEF0dHJpYnV0ZXNcbiAgICAnYXJpYS1hY3RpdmVkZXNjZW5kYW50JzogMCxcbiAgICAn
YXJpYS1jb2xjb3VudCc6IDAsXG4gICAgJ2FyaWEtY29saW5kZXgnOiAwLFxuICAgICdhcmlhLWNv
bHNwYW4nOiAwLFxuICAgICdhcmlhLWNvbnRyb2xzJzogMCxcbiAgICAnYXJpYS1kZXNjcmliZWRi
eSc6IDAsXG4gICAgJ2FyaWEtZXJyb3JtZXNzYWdlJzogMCxcbiAgICAnYXJpYS1mbG93dG8nOiAw
LFxuICAgICdhcmlhLWxhYmVsbGVkYnknOiAwLFxuICAgICdhcmlhLW93bnMnOiAwLFxuICAgICdh
cmlhLXBvc2luc2V0JzogMCxcbiAgICAnYXJpYS1yb3djb3VudCc6IDAsXG4gICAgJ2FyaWEtcm93
aW5kZXgnOiAwLFxuICAgICdhcmlhLXJvd3NwYW4nOiAwLFxuICAgICdhcmlhLXNldHNpemUnOiAw
XG4gIH0sXG4gIERPTUF0dHJpYnV0ZU5hbWVzOiB7fSxcbiAgRE9NUHJvcGVydHlOYW1lczoge31c
bn07XG5cbm1vZHVsZS5leHBvcnRzID0gQVJJQURPTVByb3BlcnR5Q29uZmlnO1xuXG5cbi8vLy8v
Ly8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0
LWRvbS9saWIvQVJJQURPTVByb3BlcnR5Q29uZmlnLmpzXG4vLyBtb2R1bGUgaWQgPSAxMjFcbi8v
IG1vZHVsZSBjaHVua3MgPSAwIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50IEZhY2Vi
b29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNv
ZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxu
ICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVl
LiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBp
biB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3Vz
ZSBzdHJpY3QnO1xuXG52YXIgRXZlbnRQcm9wYWdhdG9ycyA9IHJlcXVpcmUoJy4vRXZlbnRQcm9w
YWdhdG9ycycpO1xudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZSgnZmJqcy9saWIv
RXhlY3V0aW9uRW52aXJvbm1lbnQnKTtcbnZhciBGYWxsYmFja0NvbXBvc2l0aW9uU3RhdGUgPSBy
ZXF1aXJlKCcuL0ZhbGxiYWNrQ29tcG9zaXRpb25TdGF0ZScpO1xudmFyIFN5bnRoZXRpY0NvbXBv
c2l0aW9uRXZlbnQgPSByZXF1aXJlKCcuL1N5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQnKTtcbnZh
ciBTeW50aGV0aWNJbnB1dEV2ZW50ID0gcmVxdWlyZSgnLi9TeW50aGV0aWNJbnB1dEV2ZW50Jyk7
XG5cbnZhciBFTkRfS0VZQ09ERVMgPSBbOSwgMTMsIDI3LCAzMl07IC8vIFRhYiwgUmV0dXJuLCBF
c2MsIFNwYWNlXG52YXIgU1RBUlRfS0VZQ09ERSA9IDIyOTtcblxudmFyIGNhblVzZUNvbXBvc2l0
aW9uRXZlbnQgPSBFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00gJiYgJ0NvbXBvc2l0aW9u
RXZlbnQnIGluIHdpbmRvdztcblxudmFyIGRvY3VtZW50TW9kZSA9IG51bGw7XG5pZiAoRXhlY3V0
aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NICYmICdkb2N1bWVudE1vZGUnIGluIGRvY3VtZW50KSB7
XG4gIGRvY3VtZW50TW9kZSA9IGRvY3VtZW50LmRvY3VtZW50TW9kZTtcbn1cblxuLy8gV2Via2l0
IG9mZmVycyBhIHZlcnkgdXNlZnVsIGB0ZXh0SW5wdXRgIGV2ZW50IHRoYXQgY2FuIGJlIHVzZWQg
dG9cbi8vIGRpcmVjdGx5IHJlcHJlc2VudCBgYmVmb3JlSW5wdXRgLiBUaGUgSUUgYHRleHRpbnB1
dGAgZXZlbnQgaXMgbm90IGFzXG4vLyB1c2VmdWwsIHNvIHdlIGRvbid0IHVzZSBpdC5cbnZhciBj
YW5Vc2VUZXh0SW5wdXRFdmVudCA9IEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSAmJiAn
VGV4dEV2ZW50JyBpbiB3aW5kb3cgJiYgIWRvY3VtZW50TW9kZSAmJiAhaXNQcmVzdG8oKTtcblxu
Ly8gSW4gSUU5Kywgd2UgaGF2ZSBhY2Nlc3MgdG8gY29tcG9zaXRpb24gZXZlbnRzLCBidXQgdGhl
IGRhdGEgc3VwcGxpZWRcbi8vIGJ5IHRoZSBuYXRpdmUgY29tcG9zaXRpb25lbmQgZXZlbnQgbWF5
IGJlIGluY29ycmVjdC4gSmFwYW5lc2UgaWRlb2dyYXBoaWNcbi8vIHNwYWNlcywgZm9yIGluc3Rh
bmNlIChcXHUzMDAwKSBhcmUgbm90IHJlY29yZGVkIGNvcnJlY3RseS5cbnZhciB1c2VGYWxsYmFj
a0NvbXBvc2l0aW9uRGF0YSA9IEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSAmJiAoIWNh
blVzZUNvbXBvc2l0aW9uRXZlbnQgfHwgZG9jdW1lbnRNb2RlICYmIGRvY3VtZW50TW9kZSA+IDgg
JiYgZG9jdW1lbnRNb2RlIDw9IDExKTtcblxuLyoqXG4gKiBPcGVyYSA8PSAxMiBpbmNsdWRlcyBU
ZXh0RXZlbnQgaW4gd2luZG93LCBidXQgZG9lcyBub3QgZmlyZVxuICogdGV4dCBpbnB1dCBldmVu
dHMuIFJlbHkgb24ga2V5cHJlc3MgaW5zdGVhZC5cbiAqL1xuZnVuY3Rpb24gaXNQcmVzdG8oKSB7
XG4gIHZhciBvcGVyYSA9IHdpbmRvdy5vcGVyYTtcbiAgcmV0dXJuIHR5cGVvZiBvcGVyYSA9PT0g
J29iamVjdCcgJiYgdHlwZW9mIG9wZXJhLnZlcnNpb24gPT09ICdmdW5jdGlvbicgJiYgcGFyc2VJ
bnQob3BlcmEudmVyc2lvbigpLCAxMCkgPD0gMTI7XG59XG5cbnZhciBTUEFDRUJBUl9DT0RFID0g
MzI7XG52YXIgU1BBQ0VCQVJfQ0hBUiA9IFN0cmluZy5mcm9tQ2hhckNvZGUoU1BBQ0VCQVJfQ09E
RSk7XG5cbi8vIEV2ZW50cyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSBuYW1lcy5c
bnZhciBldmVudFR5cGVzID0ge1xuICBiZWZvcmVJbnB1dDoge1xuICAgIHBoYXNlZFJlZ2lzdHJh
dGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiAnb25CZWZvcmVJbnB1dCcsXG4gICAgICBjYXB0
dXJlZDogJ29uQmVmb3JlSW5wdXRDYXB0dXJlJ1xuICAgIH0sXG4gICAgZGVwZW5kZW5jaWVzOiBb
J3RvcENvbXBvc2l0aW9uRW5kJywgJ3RvcEtleVByZXNzJywgJ3RvcFRleHRJbnB1dCcsICd0b3BQ
YXN0ZSddXG4gIH0sXG4gIGNvbXBvc2l0aW9uRW5kOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9u
TmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6ICdvbkNvbXBvc2l0aW9uRW5kJyxcbiAgICAgIGNhcHR1
cmVkOiAnb25Db21wb3NpdGlvbkVuZENhcHR1cmUnXG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6
IFsndG9wQmx1cicsICd0b3BDb21wb3NpdGlvbkVuZCcsICd0b3BLZXlEb3duJywgJ3RvcEtleVBy
ZXNzJywgJ3RvcEtleVVwJywgJ3RvcE1vdXNlRG93biddXG4gIH0sXG4gIGNvbXBvc2l0aW9uU3Rh
cnQ6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDogJ29u
Q29tcG9zaXRpb25TdGFydCcsXG4gICAgICBjYXB0dXJlZDogJ29uQ29tcG9zaXRpb25TdGFydENh
cHR1cmUnXG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6IFsndG9wQmx1cicsICd0b3BDb21wb3Np
dGlvblN0YXJ0JywgJ3RvcEtleURvd24nLCAndG9wS2V5UHJlc3MnLCAndG9wS2V5VXAnLCAndG9w
TW91c2VEb3duJ11cbiAgfSxcbiAgY29tcG9zaXRpb25VcGRhdGU6IHtcbiAgICBwaGFzZWRSZWdp
c3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDogJ29uQ29tcG9zaXRpb25VcGRhdGUnLFxu
ICAgICAgY2FwdHVyZWQ6ICdvbkNvbXBvc2l0aW9uVXBkYXRlQ2FwdHVyZSdcbiAgICB9LFxuICAg
IGRlcGVuZGVuY2llczogWyd0b3BCbHVyJywgJ3RvcENvbXBvc2l0aW9uVXBkYXRlJywgJ3RvcEtl
eURvd24nLCAndG9wS2V5UHJlc3MnLCAndG9wS2V5VXAnLCAndG9wTW91c2VEb3duJ11cbiAgfVxu
fTtcblxuLy8gVHJhY2sgd2hldGhlciB3ZSd2ZSBldmVyIGhhbmRsZWQgYSBrZXlwcmVzcyBvbiB0
aGUgc3BhY2Uga2V5LlxudmFyIGhhc1NwYWNlS2V5cHJlc3MgPSBmYWxzZTtcblxuLyoqXG4gKiBS
ZXR1cm4gd2hldGhlciBhIG5hdGl2ZSBrZXlwcmVzcyBldmVudCBpcyBhc3N1bWVkIHRvIGJlIGEg
Y29tbWFuZC5cbiAqIFRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSBGaXJlZm94IGZpcmVzIGBrZXlw
cmVzc2AgZXZlbnRzIGZvciBrZXkgY29tbWFuZHNcbiAqIChjdXQsIGNvcHksIHNlbGVjdC1hbGws
IGV0Yy4pIGV2ZW4gdGhvdWdoIG5vIGNoYXJhY3RlciBpcyBpbnNlcnRlZC5cbiAqL1xuZnVuY3Rp
b24gaXNLZXlwcmVzc0NvbW1hbmQobmF0aXZlRXZlbnQpIHtcbiAgcmV0dXJuIChuYXRpdmVFdmVu
dC5jdHJsS2V5IHx8IG5hdGl2ZUV2ZW50LmFsdEtleSB8fCBuYXRpdmVFdmVudC5tZXRhS2V5KSAm
JlxuICAvLyBjdHJsS2V5ICYmIGFsdEtleSBpcyBlcXVpdmFsZW50IHRvIEFsdEdyLCBhbmQgaXMg
bm90IGEgY29tbWFuZC5cbiAgIShuYXRpdmVFdmVudC5jdHJsS2V5ICYmIG5hdGl2ZUV2ZW50LmFs
dEtleSk7XG59XG5cbi8qKlxuICogVHJhbnNsYXRlIG5hdGl2ZSB0b3AgbGV2ZWwgZXZlbnRzIGlu
dG8gZXZlbnQgdHlwZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVHlwZVxuICog
QHJldHVybiB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiBnZXRDb21wb3NpdGlvbkV2ZW50VHlwZSh0
b3BMZXZlbFR5cGUpIHtcbiAgc3dpdGNoICh0b3BMZXZlbFR5cGUpIHtcbiAgICBjYXNlICd0b3BD
b21wb3NpdGlvblN0YXJ0JzpcbiAgICAgIHJldHVybiBldmVudFR5cGVzLmNvbXBvc2l0aW9uU3Rh
cnQ7XG4gICAgY2FzZSAndG9wQ29tcG9zaXRpb25FbmQnOlxuICAgICAgcmV0dXJuIGV2ZW50VHlw
ZXMuY29tcG9zaXRpb25FbmQ7XG4gICAgY2FzZSAndG9wQ29tcG9zaXRpb25VcGRhdGUnOlxuICAg
ICAgcmV0dXJuIGV2ZW50VHlwZXMuY29tcG9zaXRpb25VcGRhdGU7XG4gIH1cbn1cblxuLyoqXG4g
KiBEb2VzIG91ciBmYWxsYmFjayBiZXN0LWd1ZXNzIG1vZGVsIHRoaW5rIHRoaXMgZXZlbnQgc2ln
bmlmaWVzIHRoYXRcbiAqIGNvbXBvc2l0aW9uIGhhcyBiZWd1bj9cbiAqXG4gKiBAcGFyYW0ge3N0
cmluZ30gdG9wTGV2ZWxUeXBlXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnRcbiAqIEBy
ZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRmFsbGJhY2tDb21wb3NpdGlvblN0YXJ0
KHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQpIHtcbiAgcmV0dXJuIHRvcExldmVsVHlwZSA9PT0g
J3RvcEtleURvd24nICYmIG5hdGl2ZUV2ZW50LmtleUNvZGUgPT09IFNUQVJUX0tFWUNPREU7XG59
XG5cbi8qKlxuICogRG9lcyBvdXIgZmFsbGJhY2sgbW9kZSB0aGluayB0aGF0IHRoaXMgZXZlbnQg
aXMgdGhlIGVuZCBvZiBjb21wb3NpdGlvbj9cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2
ZWxUeXBlXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnRcbiAqIEByZXR1cm4ge2Jvb2xl
YW59XG4gKi9cbmZ1bmN0aW9uIGlzRmFsbGJhY2tDb21wb3NpdGlvbkVuZCh0b3BMZXZlbFR5cGUs
IG5hdGl2ZUV2ZW50KSB7XG4gIHN3aXRjaCAodG9wTGV2ZWxUeXBlKSB7XG4gICAgY2FzZSAndG9w
S2V5VXAnOlxuICAgICAgLy8gQ29tbWFuZCBrZXlzIGluc2VydCBvciBjbGVhciBJTUUgaW5wdXQu
XG4gICAgICByZXR1cm4gRU5EX0tFWUNPREVTLmluZGV4T2YobmF0aXZlRXZlbnQua2V5Q29kZSkg
IT09IC0xO1xuICAgIGNhc2UgJ3RvcEtleURvd24nOlxuICAgICAgLy8gRXhwZWN0IElNRSBrZXlD
b2RlIG9uIGVhY2gga2V5ZG93bi4gSWYgd2UgZ2V0IGFueSBvdGhlclxuICAgICAgLy8gY29kZSB3
ZSBtdXN0IGhhdmUgZXhpdGVkIGVhcmxpZXIuXG4gICAgICByZXR1cm4gbmF0aXZlRXZlbnQua2V5
Q29kZSAhPT0gU1RBUlRfS0VZQ09ERTtcbiAgICBjYXNlICd0b3BLZXlQcmVzcyc6XG4gICAgY2Fz
ZSAndG9wTW91c2VEb3duJzpcbiAgICBjYXNlICd0b3BCbHVyJzpcbiAgICAgIC8vIEV2ZW50cyBh
cmUgbm90IHBvc3NpYmxlIHdpdGhvdXQgY2FuY2VsbGluZyBJTUUuXG4gICAgICByZXR1cm4gdHJ1
ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICog
R29vZ2xlIElucHV0IFRvb2xzIHByb3ZpZGVzIGNvbXBvc2l0aW9uIGRhdGEgdmlhIGEgQ3VzdG9t
RXZlbnQsXG4gKiB3aXRoIHRoZSBgZGF0YWAgcHJvcGVydHkgcG9wdWxhdGVkIGluIHRoZSBgZGV0
YWlsYCBvYmplY3QuIElmIHRoaXNcbiAqIGlzIGF2YWlsYWJsZSBvbiB0aGUgZXZlbnQgb2JqZWN0
LCB1c2UgaXQuIElmIG5vdCwgdGhpcyBpcyBhIHBsYWluXG4gKiBjb21wb3NpdGlvbiBldmVudCBh
bmQgd2UgaGF2ZSBub3RoaW5nIHNwZWNpYWwgdG8gZXh0cmFjdC5cbiAqXG4gKiBAcGFyYW0ge29i
amVjdH0gbmF0aXZlRXZlbnRcbiAqIEByZXR1cm4gez9zdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdl
dERhdGFGcm9tQ3VzdG9tRXZlbnQobmF0aXZlRXZlbnQpIHtcbiAgdmFyIGRldGFpbCA9IG5hdGl2
ZUV2ZW50LmRldGFpbDtcbiAgaWYgKHR5cGVvZiBkZXRhaWwgPT09ICdvYmplY3QnICYmICdkYXRh
JyBpbiBkZXRhaWwpIHtcbiAgICByZXR1cm4gZGV0YWlsLmRhdGE7XG4gIH1cbiAgcmV0dXJuIG51
bGw7XG59XG5cbi8vIFRyYWNrIHRoZSBjdXJyZW50IElNRSBjb21wb3NpdGlvbiBmYWxsYmFjayBv
YmplY3QsIGlmIGFueS5cbnZhciBjdXJyZW50Q29tcG9zaXRpb24gPSBudWxsO1xuXG4vKipcbiAq
IEByZXR1cm4gez9vYmplY3R9IEEgU3ludGhldGljQ29tcG9zaXRpb25FdmVudC5cbiAqL1xuZnVu
Y3Rpb24gZXh0cmFjdENvbXBvc2l0aW9uRXZlbnQodG9wTGV2ZWxUeXBlLCB0YXJnZXRJbnN0LCBu
YXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgdmFyIGV2ZW50VHlwZTtcbiAgdmFy
IGZhbGxiYWNrRGF0YTtcblxuICBpZiAoY2FuVXNlQ29tcG9zaXRpb25FdmVudCkge1xuICAgIGV2
ZW50VHlwZSA9IGdldENvbXBvc2l0aW9uRXZlbnRUeXBlKHRvcExldmVsVHlwZSk7XG4gIH0gZWxz
ZSBpZiAoIWN1cnJlbnRDb21wb3NpdGlvbikge1xuICAgIGlmIChpc0ZhbGxiYWNrQ29tcG9zaXRp
b25TdGFydCh0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50KSkge1xuICAgICAgZXZlbnRUeXBlID0g
ZXZlbnRUeXBlcy5jb21wb3NpdGlvblN0YXJ0O1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc0ZhbGxi
YWNrQ29tcG9zaXRpb25FbmQodG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCkpIHtcbiAgICBldmVu
dFR5cGUgPSBldmVudFR5cGVzLmNvbXBvc2l0aW9uRW5kO1xuICB9XG5cbiAgaWYgKCFldmVudFR5
cGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICh1c2VGYWxsYmFja0NvbXBvc2l0
aW9uRGF0YSkge1xuICAgIC8vIFRoZSBjdXJyZW50IGNvbXBvc2l0aW9uIGlzIHN0b3JlZCBzdGF0
aWNhbGx5IGFuZCBtdXN0IG5vdCBiZVxuICAgIC8vIG92ZXJ3cml0dGVuIHdoaWxlIGNvbXBvc2l0
aW9uIGNvbnRpbnVlcy5cbiAgICBpZiAoIWN1cnJlbnRDb21wb3NpdGlvbiAmJiBldmVudFR5cGUg
PT09IGV2ZW50VHlwZXMuY29tcG9zaXRpb25TdGFydCkge1xuICAgICAgY3VycmVudENvbXBvc2l0
aW9uID0gRmFsbGJhY2tDb21wb3NpdGlvblN0YXRlLmdldFBvb2xlZChuYXRpdmVFdmVudFRhcmdl
dCk7XG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09IGV2ZW50VHlwZXMuY29tcG9zaXRpb25F
bmQpIHtcbiAgICAgIGlmIChjdXJyZW50Q29tcG9zaXRpb24pIHtcbiAgICAgICAgZmFsbGJhY2tE
YXRhID0gY3VycmVudENvbXBvc2l0aW9uLmdldERhdGEoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1c
blxuICB2YXIgZXZlbnQgPSBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50LmdldFBvb2xlZChldmVu
dFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG5cbiAg
aWYgKGZhbGxiYWNrRGF0YSkge1xuICAgIC8vIEluamVjdCBkYXRhIGdlbmVyYXRlZCBmcm9tIGZh
bGxiYWNrIHBhdGggaW50byB0aGUgc3ludGhldGljIGV2ZW50LlxuICAgIC8vIFRoaXMgbWF0Y2hl
cyB0aGUgcHJvcGVydHkgb2YgbmF0aXZlIENvbXBvc2l0aW9uRXZlbnRJbnRlcmZhY2UuXG4gICAg
ZXZlbnQuZGF0YSA9IGZhbGxiYWNrRGF0YTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgY3VzdG9tRGF0
YSA9IGdldERhdGFGcm9tQ3VzdG9tRXZlbnQobmF0aXZlRXZlbnQpO1xuICAgIGlmIChjdXN0b21E
YXRhICE9PSBudWxsKSB7XG4gICAgICBldmVudC5kYXRhID0gY3VzdG9tRGF0YTtcbiAgICB9XG4g
IH1cblxuICBFdmVudFByb3BhZ2F0b3JzLmFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXMoZXZl
bnQpO1xuICByZXR1cm4gZXZlbnQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHRvcExl
dmVsVHlwZSBSZWNvcmQgZnJvbSBgRXZlbnRDb25zdGFudHNgLlxuICogQHBhcmFtIHtvYmplY3R9
IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHJldHVybiB7P3N0cmluZ30g
VGhlIHN0cmluZyBjb3JyZXNwb25kaW5nIHRvIHRoaXMgYGJlZm9yZUlucHV0YCBldmVudC5cbiAq
L1xuZnVuY3Rpb24gZ2V0TmF0aXZlQmVmb3JlSW5wdXRDaGFycyh0b3BMZXZlbFR5cGUsIG5hdGl2
ZUV2ZW50KSB7XG4gIHN3aXRjaCAodG9wTGV2ZWxUeXBlKSB7XG4gICAgY2FzZSAndG9wQ29tcG9z
aXRpb25FbmQnOlxuICAgICAgcmV0dXJuIGdldERhdGFGcm9tQ3VzdG9tRXZlbnQobmF0aXZlRXZl
bnQpO1xuICAgIGNhc2UgJ3RvcEtleVByZXNzJzpcbiAgICAgIC8qKlxuICAgICAgICogSWYgbmF0
aXZlIGB0ZXh0SW5wdXRgIGV2ZW50cyBhcmUgYXZhaWxhYmxlLCBvdXIgZ29hbCBpcyB0byBtYWtl
XG4gICAgICAgKiB1c2Ugb2YgdGhlbS4gSG93ZXZlciwgdGhlcmUgaXMgYSBzcGVjaWFsIGNhc2U6
IHRoZSBzcGFjZWJhciBrZXkuXG4gICAgICAgKiBJbiBXZWJraXQsIHByZXZlbnRpbmcgZGVmYXVs
dCBvbiBhIHNwYWNlYmFyIGB0ZXh0SW5wdXRgIGV2ZW50XG4gICAgICAgKiBjYW5jZWxzIGNoYXJh
Y3RlciBpbnNlcnRpb24sIGJ1dCBpdCAqYWxzbyogY2F1c2VzIHRoZSBicm93c2VyXG4gICAgICAg
KiB0byBmYWxsIGJhY2sgdG8gaXRzIGRlZmF1bHQgc3BhY2ViYXIgYmVoYXZpb3Igb2Ygc2Nyb2xs
aW5nIHRoZVxuICAgICAgICogcGFnZS5cbiAgICAgICAqXG4gICAgICAgKiBUcmFja2luZyBhdDpc
biAgICAgICAqIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFp
bD9pZD0zNTUxMDNcbiAgICAgICAqXG4gICAgICAgKiBUbyBhdm9pZCB0aGlzIGlzc3VlLCB1c2Ug
dGhlIGtleXByZXNzIGV2ZW50IGFzIGlmIG5vIGB0ZXh0SW5wdXRgXG4gICAgICAgKiBldmVudCBp
cyBhdmFpbGFibGUuXG4gICAgICAgKi9cbiAgICAgIHZhciB3aGljaCA9IG5hdGl2ZUV2ZW50Lndo
aWNoO1xuICAgICAgaWYgKHdoaWNoICE9PSBTUEFDRUJBUl9DT0RFKSB7XG4gICAgICAgIHJldHVy
biBudWxsO1xuICAgICAgfVxuXG4gICAgICBoYXNTcGFjZUtleXByZXNzID0gdHJ1ZTtcbiAgICAg
IHJldHVybiBTUEFDRUJBUl9DSEFSO1xuXG4gICAgY2FzZSAndG9wVGV4dElucHV0JzpcbiAgICAg
IC8vIFJlY29yZCB0aGUgY2hhcmFjdGVycyB0byBiZSBhZGRlZCB0byB0aGUgRE9NLlxuICAgICAg
dmFyIGNoYXJzID0gbmF0aXZlRXZlbnQuZGF0YTtcblxuICAgICAgLy8gSWYgaXQncyBhIHNwYWNl
YmFyIGNoYXJhY3RlciwgYXNzdW1lIHRoYXQgd2UgaGF2ZSBhbHJlYWR5IGhhbmRsZWRcbiAgICAg
IC8vIGl0IGF0IHRoZSBrZXlwcmVzcyBsZXZlbCBhbmQgYmFpbCBpbW1lZGlhdGVseS4gQW5kcm9p
ZCBDaHJvbWVcbiAgICAgIC8vIGRvZXNuJ3QgZ2l2ZSB1cyBrZXljb2Rlcywgc28gd2UgbmVlZCB0
byBibGFja2xpc3QgaXQuXG4gICAgICBpZiAoY2hhcnMgPT09IFNQQUNFQkFSX0NIQVIgJiYgaGFz
U3BhY2VLZXlwcmVzcykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAg
cmV0dXJuIGNoYXJzO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIEZvciBvdGhlciBuYXRpdmUg
ZXZlbnQgdHlwZXMsIGRvIG5vdGhpbmcuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4v
KipcbiAqIEZvciBicm93c2VycyB0aGF0IGRvIG5vdCBwcm92aWRlIHRoZSBgdGV4dElucHV0YCBl
dmVudCwgZXh0cmFjdCB0aGVcbiAqIGFwcHJvcHJpYXRlIHN0cmluZyB0byB1c2UgZm9yIFN5bnRo
ZXRpY0lucHV0RXZlbnQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVHlwZSBSZWNv
cmQgZnJvbSBgRXZlbnRDb25zdGFudHNgLlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50
IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHJldHVybiB7P3N0cmluZ30gVGhlIGZhbGxiYWNr
IHN0cmluZyBmb3IgdGhpcyBgYmVmb3JlSW5wdXRgIGV2ZW50LlxuICovXG5mdW5jdGlvbiBnZXRG
YWxsYmFja0JlZm9yZUlucHV0Q2hhcnModG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCkge1xuICAv
LyBJZiB3ZSBhcmUgY3VycmVudGx5IGNvbXBvc2luZyAoSU1FKSBhbmQgdXNpbmcgYSBmYWxsYmFj
ayB0byBkbyBzbyxcbiAgLy8gdHJ5IHRvIGV4dHJhY3QgdGhlIGNvbXBvc2VkIGNoYXJhY3RlcnMg
ZnJvbSB0aGUgZmFsbGJhY2sgb2JqZWN0LlxuICAvLyBJZiBjb21wb3NpdGlvbiBldmVudCBpcyBh
dmFpbGFibGUsIHdlIGV4dHJhY3QgYSBzdHJpbmcgb25seSBhdFxuICAvLyBjb21wb3NpdGlvbmV2
ZW50LCBvdGhlcndpc2UgZXh0cmFjdCBpdCBhdCBmYWxsYmFjayBldmVudHMuXG4gIGlmIChjdXJy
ZW50Q29tcG9zaXRpb24pIHtcbiAgICBpZiAodG9wTGV2ZWxUeXBlID09PSAndG9wQ29tcG9zaXRp
b25FbmQnIHx8ICFjYW5Vc2VDb21wb3NpdGlvbkV2ZW50ICYmIGlzRmFsbGJhY2tDb21wb3NpdGlv
bkVuZCh0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50KSkge1xuICAgICAgdmFyIGNoYXJzID0gY3Vy
cmVudENvbXBvc2l0aW9uLmdldERhdGEoKTtcbiAgICAgIEZhbGxiYWNrQ29tcG9zaXRpb25TdGF0
ZS5yZWxlYXNlKGN1cnJlbnRDb21wb3NpdGlvbik7XG4gICAgICBjdXJyZW50Q29tcG9zaXRpb24g
PSBudWxsO1xuICAgICAgcmV0dXJuIGNoYXJzO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAg
fVxuXG4gIHN3aXRjaCAodG9wTGV2ZWxUeXBlKSB7XG4gICAgY2FzZSAndG9wUGFzdGUnOlxuICAg
ICAgLy8gSWYgYSBwYXN0ZSBldmVudCBvY2N1cnMgYWZ0ZXIgYSBrZXlwcmVzcywgdGhyb3cgb3V0
IHRoZSBpbnB1dFxuICAgICAgLy8gY2hhcnMuIFBhc3RlIGV2ZW50cyBzaG91bGQgbm90IGxlYWQg
dG8gQmVmb3JlSW5wdXQgZXZlbnRzLlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgY2FzZSAndG9w
S2V5UHJlc3MnOlxuICAgICAgLyoqXG4gICAgICAgKiBBcyBvZiB2MjcsIEZpcmVmb3ggbWF5IGZp
cmUga2V5cHJlc3MgZXZlbnRzIGV2ZW4gd2hlbiBubyBjaGFyYWN0ZXJcbiAgICAgICAqIHdpbGwg
YmUgaW5zZXJ0ZWQuIEEgZmV3IHBvc3NpYmlsaXRpZXM6XG4gICAgICAgKlxuICAgICAgICogLSBg
d2hpY2hgIGlzIGAwYC4gQXJyb3cga2V5cywgRXNjIGtleSwgZXRjLlxuICAgICAgICpcbiAgICAg
ICAqIC0gYHdoaWNoYCBpcyB0aGUgcHJlc3NlZCBrZXkgY29kZSwgYnV0IG5vIGNoYXIgaXMgYXZh
aWxhYmxlLlxuICAgICAgICogICBFeDogJ0FsdEdyICsgZGAgaW4gUG9saXNoLiBUaGVyZSBpcyBu
byBtb2RpZmllZCBjaGFyYWN0ZXIgZm9yXG4gICAgICAgKiAgIHRoaXMga2V5IGNvbWJpbmF0aW9u
IGFuZCBubyBjaGFyYWN0ZXIgaXMgaW5zZXJ0ZWQgaW50byB0aGVcbiAgICAgICAqICAgZG9jdW1l
bnQsIGJ1dCBGRiBmaXJlcyB0aGUga2V5cHJlc3MgZm9yIGNoYXIgY29kZSBgMTAwYCBhbnl3YXku
XG4gICAgICAgKiAgIE5vIGBpbnB1dGAgZXZlbnQgd2lsbCBvY2N1ci5cbiAgICAgICAqXG4gICAg
ICAgKiAtIGB3aGljaGAgaXMgdGhlIHByZXNzZWQga2V5IGNvZGUsIGJ1dCBhIGNvbW1hbmQgY29t
YmluYXRpb24gaXNcbiAgICAgICAqICAgYmVpbmcgdXNlZC4gRXg6IGBDbWQrQ2AuIE5vIGNoYXJh
Y3RlciBpcyBpbnNlcnRlZCwgYW5kIG5vXG4gICAgICAgKiAgIGBpbnB1dGAgZXZlbnQgd2lsbCBv
Y2N1ci5cbiAgICAgICAqL1xuICAgICAgaWYgKG5hdGl2ZUV2ZW50LndoaWNoICYmICFpc0tleXBy
ZXNzQ29tbWFuZChuYXRpdmVFdmVudCkpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hh
ckNvZGUobmF0aXZlRXZlbnQud2hpY2gpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4g
ICAgY2FzZSAndG9wQ29tcG9zaXRpb25FbmQnOlxuICAgICAgcmV0dXJuIHVzZUZhbGxiYWNrQ29t
cG9zaXRpb25EYXRhID8gbnVsbCA6IG5hdGl2ZUV2ZW50LmRhdGE7XG4gICAgZGVmYXVsdDpcbiAg
ICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKlxuICogRXh0cmFjdCBhIFN5bnRoZXRpY0lu
cHV0RXZlbnQgZm9yIGBiZWZvcmVJbnB1dGAsIGJhc2VkIG9uIGVpdGhlciBuYXRpdmVcbiAqIGB0
ZXh0SW5wdXRgIG9yIGZhbGxiYWNrIGJlaGF2aW9yLlxuICpcbiAqIEByZXR1cm4gez9vYmplY3R9
IEEgU3ludGhldGljSW5wdXRFdmVudC5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdEJlZm9yZUlucHV0
RXZlbnQodG9wTGV2ZWxUeXBlLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRU
YXJnZXQpIHtcbiAgdmFyIGNoYXJzO1xuXG4gIGlmIChjYW5Vc2VUZXh0SW5wdXRFdmVudCkge1xu
ICAgIGNoYXJzID0gZ2V0TmF0aXZlQmVmb3JlSW5wdXRDaGFycyh0b3BMZXZlbFR5cGUsIG5hdGl2
ZUV2ZW50KTtcbiAgfSBlbHNlIHtcbiAgICBjaGFycyA9IGdldEZhbGxiYWNrQmVmb3JlSW5wdXRD
aGFycyh0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50KTtcbiAgfVxuXG4gIC8vIElmIG5vIGNoYXJh
Y3RlcnMgYXJlIGJlaW5nIGluc2VydGVkLCBubyBCZWZvcmVJbnB1dCBldmVudCBzaG91bGRcbiAg
Ly8gYmUgZmlyZWQuXG4gIGlmICghY2hhcnMpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4g
IHZhciBldmVudCA9IFN5bnRoZXRpY0lucHV0RXZlbnQuZ2V0UG9vbGVkKGV2ZW50VHlwZXMuYmVm
b3JlSW5wdXQsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG5c
biAgZXZlbnQuZGF0YSA9IGNoYXJzO1xuICBFdmVudFByb3BhZ2F0b3JzLmFjY3VtdWxhdGVUd29Q
aGFzZURpc3BhdGNoZXMoZXZlbnQpO1xuICByZXR1cm4gZXZlbnQ7XG59XG5cbi8qKlxuICogQ3Jl
YXRlIGFuIGBvbkJlZm9yZUlucHV0YCBldmVudCB0byBtYXRjaFxuICogaHR0cDovL3d3dy53My5v
cmcvVFIvMjAxMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMtMjAxMzExMDUvI2V2ZW50cy1pbnB1dGV2
ZW50cy5cbiAqXG4gKiBUaGlzIGV2ZW50IHBsdWdpbiBpcyBiYXNlZCBvbiB0aGUgbmF0aXZlIGB0
ZXh0SW5wdXRgIGV2ZW50XG4gKiBhdmFpbGFibGUgaW4gQ2hyb21lLCBTYWZhcmksIE9wZXJhLCBh
bmQgSUUuIFRoaXMgZXZlbnQgZmlyZXMgYWZ0ZXJcbiAqIGBvbktleVByZXNzYCBhbmQgYG9uQ29t
cG9zaXRpb25FbmRgLCBidXQgYmVmb3JlIGBvbklucHV0YC5cbiAqXG4gKiBgYmVmb3JlSW5wdXRg
IGlzIHNwZWMnZCBidXQgbm90IGltcGxlbWVudGVkIGluIGFueSBicm93c2VycywgYW5kXG4gKiB0
aGUgYGlucHV0YCBldmVudCBkb2VzIG5vdCBwcm92aWRlIGFueSB1c2VmdWwgaW5mb3JtYXRpb24g
YWJvdXQgd2hhdCBoYXNcbiAqIGFjdHVhbGx5IGJlZW4gYWRkZWQsIGNvbnRyYXJ5IHRvIHRoZSBz
cGVjLiBUaHVzLCBgdGV4dElucHV0YCBpcyB0aGUgYmVzdFxuICogYXZhaWxhYmxlIGV2ZW50IHRv
IGlkZW50aWZ5IHRoZSBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSBhY3R1YWxseSBiZWVuIGluc2VydGVk
XG4gKiBpbnRvIHRoZSB0YXJnZXQgbm9kZS5cbiAqXG4gKiBUaGlzIHBsdWdpbiBpcyBhbHNvIHJl
c3BvbnNpYmxlIGZvciBlbWl0dGluZyBgY29tcG9zaXRpb25gIGV2ZW50cywgdGh1c1xuICogYWxs
b3dpbmcgdXMgdG8gc2hhcmUgY29tcG9zaXRpb24gZmFsbGJhY2sgY29kZSBmb3IgYm90aCBgYmVm
b3JlSW5wdXRgIGFuZFxuICogYGNvbXBvc2l0aW9uYCBldmVudCB0eXBlcy5cbiAqL1xudmFyIEJl
Zm9yZUlucHV0RXZlbnRQbHVnaW4gPSB7XG4gIGV2ZW50VHlwZXM6IGV2ZW50VHlwZXMsXG5cbiAg
ZXh0cmFjdEV2ZW50czogZnVuY3Rpb24gKHRvcExldmVsVHlwZSwgdGFyZ2V0SW5zdCwgbmF0aXZl
RXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gICAgcmV0dXJuIFtleHRyYWN0Q29tcG9zaXRp
b25FdmVudCh0b3BMZXZlbFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVu
dFRhcmdldCksIGV4dHJhY3RCZWZvcmVJbnB1dEV2ZW50KHRvcExldmVsVHlwZSwgdGFyZ2V0SW5z
dCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KV07XG4gIH1cbn07XG5cbm1vZHVsZS5l
eHBvcnRzID0gQmVmb3JlSW5wdXRFdmVudFBsdWdpbjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9c
bi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL0JlZm9y
ZUlucHV0RXZlbnRQbHVnaW4uanNcbi8vIG1vZHVsZSBpZCA9IDEyMlxuLy8gbW9kdWxlIGNodW5r
cyA9IDAiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4g
KiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5z
ZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBm
aWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlv
bmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5U
UyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xu
XG52YXIgX2Fzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxudmFyIFBvb2xlZENs
YXNzID0gcmVxdWlyZSgnLi9Qb29sZWRDbGFzcycpO1xuXG52YXIgZ2V0VGV4dENvbnRlbnRBY2Nl
c3NvciA9IHJlcXVpcmUoJy4vZ2V0VGV4dENvbnRlbnRBY2Nlc3NvcicpO1xuXG4vKipcbiAqIFRo
aXMgaGVscGVyIGNsYXNzIHN0b3JlcyBpbmZvcm1hdGlvbiBhYm91dCB0ZXh0IGNvbnRlbnQgb2Yg
YSB0YXJnZXQgbm9kZSxcbiAqIGFsbG93aW5nIGNvbXBhcmlzb24gb2YgY29udGVudCBiZWZvcmUg
YW5kIGFmdGVyIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogSWRlbnRpZnkgdGhlIG5vZGUgd2hlcmUg
c2VsZWN0aW9uIGN1cnJlbnRseSBiZWdpbnMsIHRoZW4gb2JzZXJ2ZVxuICogYm90aCBpdHMgdGV4
dCBjb250ZW50IGFuZCBpdHMgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgRE9NLiBTaW5jZSB0aGVc
biAqIGJyb3dzZXIgbWF5IG5hdGl2ZWx5IHJlcGxhY2UgdGhlIHRhcmdldCBub2RlIGR1cmluZyBj
b21wb3NpdGlvbiwgd2UgY2FuXG4gKiB1c2UgaXRzIHBvc2l0aW9uIHRvIGZpbmQgaXRzIHJlcGxh
Y2VtZW50LlxuICpcbiAqIEBwYXJhbSB7RE9NRXZlbnRUYXJnZXR9IHJvb3RcbiAqL1xuZnVuY3Rp
b24gRmFsbGJhY2tDb21wb3NpdGlvblN0YXRlKHJvb3QpIHtcbiAgdGhpcy5fcm9vdCA9IHJvb3Q7
XG4gIHRoaXMuX3N0YXJ0VGV4dCA9IHRoaXMuZ2V0VGV4dCgpO1xuICB0aGlzLl9mYWxsYmFja1Rl
eHQgPSBudWxsO1xufVxuXG5fYXNzaWduKEZhbGxiYWNrQ29tcG9zaXRpb25TdGF0ZS5wcm90b3R5
cGUsIHtcbiAgZGVzdHJ1Y3RvcjogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuX3Jvb3QgPSBudWxs
O1xuICAgIHRoaXMuX3N0YXJ0VGV4dCA9IG51bGw7XG4gICAgdGhpcy5fZmFsbGJhY2tUZXh0ID0g
bnVsbDtcbiAgfSxcblxuICAvKipcbiAgICogR2V0IGN1cnJlbnQgdGV4dCBvZiBpbnB1dC5cbiAg
ICpcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0VGV4dDogZnVuY3Rpb24gKCkg
e1xuICAgIGlmICgndmFsdWUnIGluIHRoaXMuX3Jvb3QpIHtcbiAgICAgIHJldHVybiB0aGlzLl9y
b290LnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcm9vdFtnZXRUZXh0Q29udGVudEFj
Y2Vzc29yKCldO1xuICB9LFxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIGRpZmZlcmluZyBz
dWJzdHJpbmcgYmV0d2VlbiB0aGUgaW5pdGlhbGx5IHN0b3JlZFxuICAgKiB0ZXh0IGNvbnRlbnQg
YW5kIHRoZSBjdXJyZW50IGNvbnRlbnQuXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAg
ICovXG4gIGdldERhdGE6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5fZmFsbGJhY2tUZXh0
KSB7XG4gICAgICByZXR1cm4gdGhpcy5fZmFsbGJhY2tUZXh0O1xuICAgIH1cblxuICAgIHZhciBz
dGFydDtcbiAgICB2YXIgc3RhcnRWYWx1ZSA9IHRoaXMuX3N0YXJ0VGV4dDtcbiAgICB2YXIgc3Rh
cnRMZW5ndGggPSBzdGFydFZhbHVlLmxlbmd0aDtcbiAgICB2YXIgZW5kO1xuICAgIHZhciBlbmRW
YWx1ZSA9IHRoaXMuZ2V0VGV4dCgpO1xuICAgIHZhciBlbmRMZW5ndGggPSBlbmRWYWx1ZS5sZW5n
dGg7XG5cbiAgICBmb3IgKHN0YXJ0ID0gMDsgc3RhcnQgPCBzdGFydExlbmd0aDsgc3RhcnQrKykg
e1xuICAgICAgaWYgKHN0YXJ0VmFsdWVbc3RhcnRdICE9PSBlbmRWYWx1ZVtzdGFydF0pIHtcbiAg
ICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG1pbkVuZCA9IHN0YXJ0TGVu
Z3RoIC0gc3RhcnQ7XG4gICAgZm9yIChlbmQgPSAxOyBlbmQgPD0gbWluRW5kOyBlbmQrKykge1xu
ICAgICAgaWYgKHN0YXJ0VmFsdWVbc3RhcnRMZW5ndGggLSBlbmRdICE9PSBlbmRWYWx1ZVtlbmRM
ZW5ndGggLSBlbmRdKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZh
ciBzbGljZVRhaWwgPSBlbmQgPiAxID8gMSAtIGVuZCA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9m
YWxsYmFja1RleHQgPSBlbmRWYWx1ZS5zbGljZShzdGFydCwgc2xpY2VUYWlsKTtcbiAgICByZXR1
cm4gdGhpcy5fZmFsbGJhY2tUZXh0O1xuICB9XG59KTtcblxuUG9vbGVkQ2xhc3MuYWRkUG9vbGlu
Z1RvKEZhbGxiYWNrQ29tcG9zaXRpb25TdGF0ZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gRmFsbGJh
Y2tDb21wb3NpdGlvblN0YXRlO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBG
T09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvRmFsbGJhY2tDb21wb3NpdGlv
blN0YXRlLmpzXG4vLyBtb2R1bGUgaWQgPSAxMjNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyoq
XG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0
cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRo
ZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxu
ICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0
aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFN5bnRo
ZXRpY0V2ZW50ID0gcmVxdWlyZSgnLi9TeW50aGV0aWNFdmVudCcpO1xuXG4vKipcbiAqIEBpbnRl
cmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZl
bnRzLyNldmVudHMtY29tcG9zaXRpb25ldmVudHNcbiAqL1xudmFyIENvbXBvc2l0aW9uRXZlbnRJ
bnRlcmZhY2UgPSB7XG4gIGRhdGE6IG51bGxcbn07XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9
IGRpc3BhdGNoQ29uZmlnIENvbmZpZ3VyYXRpb24gdXNlZCB0byBkaXNwYXRjaCB0aGlzIGV2ZW50
LlxuICogQHBhcmFtIHtzdHJpbmd9IGRpc3BhdGNoTWFya2VyIE1hcmtlciBpZGVudGlmeWluZyB0
aGUgZXZlbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBi
cm93c2VyIGV2ZW50LlxuICogQGV4dGVuZHMge1N5bnRoZXRpY1VJRXZlbnR9XG4gKi9cbmZ1bmN0
aW9uIFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQoZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFy
a2VyLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgcmV0dXJuIFN5bnRoZXRp
Y0V2ZW50LmNhbGwodGhpcywgZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVF
dmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xufVxuXG5TeW50aGV0aWNFdmVudC5hdWdtZW50Q2xh
c3MoU3ludGhldGljQ29tcG9zaXRpb25FdmVudCwgQ29tcG9zaXRpb25FdmVudEludGVyZmFjZSk7
XG5cbm1vZHVsZS5leHBvcnRzID0gU3ludGhldGljQ29tcG9zaXRpb25FdmVudDtcblxuXG4vLy8v
Ly8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9yZWFj
dC1kb20vbGliL1N5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQuanNcbi8vIG1vZHVsZSBpZCA9IDEy
NFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQs
IEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291
cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGlu
IHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJj
ZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBm
b3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9c
blxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgU3ludGhldGljRXZlbnQgPSByZXF1aXJlKCcuL1N5bnRo
ZXRpY0V2ZW50Jyk7XG5cbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8v
d3d3LnczLm9yZy9UUi8yMDEzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDEzMTEwNVxuICogICAg
ICAvI2V2ZW50cy1pbnB1dGV2ZW50c1xuICovXG52YXIgSW5wdXRFdmVudEludGVyZmFjZSA9IHtc
biAgZGF0YTogbnVsbFxufTtcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZGlzcGF0Y2hDb25m
aWcgQ29uZmlndXJhdGlvbiB1c2VkIHRvIGRpc3BhdGNoIHRoaXMgZXZlbnQuXG4gKiBAcGFyYW0g
e3N0cmluZ30gZGlzcGF0Y2hNYXJrZXIgTWFya2VyIGlkZW50aWZ5aW5nIHRoZSBldmVudCB0YXJn
ZXQuXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQu
XG4gKiBAZXh0ZW5kcyB7U3ludGhldGljVUlFdmVudH1cbiAqL1xuZnVuY3Rpb24gU3ludGhldGlj
SW5wdXRFdmVudChkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50LCBu
YXRpdmVFdmVudFRhcmdldCkge1xuICByZXR1cm4gU3ludGhldGljRXZlbnQuY2FsbCh0aGlzLCBk
aXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRh
cmdldCk7XG59XG5cblN5bnRoZXRpY0V2ZW50LmF1Z21lbnRDbGFzcyhTeW50aGV0aWNJbnB1dEV2
ZW50LCBJbnB1dEV2ZW50SW50ZXJmYWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW50aGV0aWNJ
bnB1dEV2ZW50O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8v
IC4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvU3ludGhldGljSW5wdXRFdmVudC5qc1xuLy8g
bW9kdWxlIGlkID0gMTI1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qKlxuICogQ29weXJpZ2h0
IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4g
KlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxp
Y2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5
IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCBy
aWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0
b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFdmVudFBsdWdpbkh1YiA9IHJl
cXVpcmUoJy4vRXZlbnRQbHVnaW5IdWInKTtcbnZhciBFdmVudFByb3BhZ2F0b3JzID0gcmVxdWly
ZSgnLi9FdmVudFByb3BhZ2F0b3JzJyk7XG52YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSByZXF1
aXJlKCdmYmpzL2xpYi9FeGVjdXRpb25FbnZpcm9ubWVudCcpO1xudmFyIFJlYWN0RE9NQ29tcG9u
ZW50VHJlZSA9IHJlcXVpcmUoJy4vUmVhY3RET01Db21wb25lbnRUcmVlJyk7XG52YXIgUmVhY3RV
cGRhdGVzID0gcmVxdWlyZSgnLi9SZWFjdFVwZGF0ZXMnKTtcbnZhciBTeW50aGV0aWNFdmVudCA9
IHJlcXVpcmUoJy4vU3ludGhldGljRXZlbnQnKTtcblxudmFyIGlucHV0VmFsdWVUcmFja2luZyA9
IHJlcXVpcmUoJy4vaW5wdXRWYWx1ZVRyYWNraW5nJyk7XG52YXIgZ2V0RXZlbnRUYXJnZXQgPSBy
ZXF1aXJlKCcuL2dldEV2ZW50VGFyZ2V0Jyk7XG52YXIgaXNFdmVudFN1cHBvcnRlZCA9IHJlcXVp
cmUoJy4vaXNFdmVudFN1cHBvcnRlZCcpO1xudmFyIGlzVGV4dElucHV0RWxlbWVudCA9IHJlcXVp
cmUoJy4vaXNUZXh0SW5wdXRFbGVtZW50Jyk7XG5cbnZhciBldmVudFR5cGVzID0ge1xuICBjaGFu
Z2U6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDogJ29u
Q2hhbmdlJyxcbiAgICAgIGNhcHR1cmVkOiAnb25DaGFuZ2VDYXB0dXJlJ1xuICAgIH0sXG4gICAg
ZGVwZW5kZW5jaWVzOiBbJ3RvcEJsdXInLCAndG9wQ2hhbmdlJywgJ3RvcENsaWNrJywgJ3RvcEZv
Y3VzJywgJ3RvcElucHV0JywgJ3RvcEtleURvd24nLCAndG9wS2V5VXAnLCAndG9wU2VsZWN0aW9u
Q2hhbmdlJ11cbiAgfVxufTtcblxuZnVuY3Rpb24gY3JlYXRlQW5kQWNjdW11bGF0ZUNoYW5nZUV2
ZW50KGluc3QsIG5hdGl2ZUV2ZW50LCB0YXJnZXQpIHtcbiAgdmFyIGV2ZW50ID0gU3ludGhldGlj
RXZlbnQuZ2V0UG9vbGVkKGV2ZW50VHlwZXMuY2hhbmdlLCBpbnN0LCBuYXRpdmVFdmVudCwgdGFy
Z2V0KTtcbiAgZXZlbnQudHlwZSA9ICdjaGFuZ2UnO1xuICBFdmVudFByb3BhZ2F0b3JzLmFjY3Vt
dWxhdGVUd29QaGFzZURpc3BhdGNoZXMoZXZlbnQpO1xuICByZXR1cm4gZXZlbnQ7XG59XG4vKipc
biAqIEZvciBJRSBzaGltc1xuICovXG52YXIgYWN0aXZlRWxlbWVudCA9IG51bGw7XG52YXIgYWN0
aXZlRWxlbWVudEluc3QgPSBudWxsO1xuXG4vKipcbiAqIFNFQ1RJT046IGhhbmRsZSBgY2hhbmdl
YCBldmVudFxuICovXG5mdW5jdGlvbiBzaG91bGRVc2VDaGFuZ2VFdmVudChlbGVtKSB7XG4gIHZh
ciBub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgp
O1xuICByZXR1cm4gbm9kZU5hbWUgPT09ICdzZWxlY3QnIHx8IG5vZGVOYW1lID09PSAnaW5wdXQn
ICYmIGVsZW0udHlwZSA9PT0gJ2ZpbGUnO1xufVxuXG52YXIgZG9lc0NoYW5nZUV2ZW50QnViYmxl
ID0gZmFsc2U7XG5pZiAoRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NKSB7XG4gIC8vIFNl
ZSBgaGFuZGxlQ2hhbmdlYCBjb21tZW50IGJlbG93XG4gIGRvZXNDaGFuZ2VFdmVudEJ1YmJsZSA9
IGlzRXZlbnRTdXBwb3J0ZWQoJ2NoYW5nZScpICYmICghZG9jdW1lbnQuZG9jdW1lbnRNb2RlIHx8
IGRvY3VtZW50LmRvY3VtZW50TW9kZSA+IDgpO1xufVxuXG5mdW5jdGlvbiBtYW51YWxEaXNwYXRj
aENoYW5nZUV2ZW50KG5hdGl2ZUV2ZW50KSB7XG4gIHZhciBldmVudCA9IGNyZWF0ZUFuZEFjY3Vt
dWxhdGVDaGFuZ2VFdmVudChhY3RpdmVFbGVtZW50SW5zdCwgbmF0aXZlRXZlbnQsIGdldEV2ZW50
VGFyZ2V0KG5hdGl2ZUV2ZW50KSk7XG5cbiAgLy8gSWYgY2hhbmdlIGFuZCBwcm9wZXJ0eWNoYW5n
ZSBidWJibGVkLCB3ZSdkIGp1c3QgYmluZCB0byBpdCBsaWtlIGFsbCB0aGVcbiAgLy8gb3RoZXIg
ZXZlbnRzIGFuZCBoYXZlIGl0IGdvIHRocm91Z2ggUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLiBT
aW5jZSBpdFxuICAvLyBkb2Vzbid0LCB3ZSBtYW51YWxseSBsaXN0ZW4gZm9yIHRoZSBldmVudHMg
YW5kIHNvIHdlIGhhdmUgdG8gZW5xdWV1ZSBhbmRcbiAgLy8gcHJvY2VzcyB0aGUgYWJzdHJhY3Qg
ZXZlbnQgbWFudWFsbHkuXG4gIC8vXG4gIC8vIEJhdGNoaW5nIGlzIG5lY2Vzc2FyeSBoZXJlIGlu
IG9yZGVyIHRvIGVuc3VyZSB0aGF0IGFsbCBldmVudCBoYW5kbGVycyBydW5cbiAgLy8gYmVmb3Jl
IHRoZSBuZXh0IHJlcmVuZGVyIChpbmNsdWRpbmcgZXZlbnQgaGFuZGxlcnMgYXR0YWNoZWQgdG8g
YW5jZXN0b3JcbiAgLy8gZWxlbWVudHMgaW5zdGVhZCBvZiBkaXJlY3RseSBvbiB0aGUgaW5wdXQp
LiBXaXRob3V0IHRoaXMsIGNvbnRyb2xsZWRcbiAgLy8gY29tcG9uZW50cyBkb24ndCB3b3JrIHBy
b3Blcmx5IGluIGNvbmp1bmN0aW9uIHdpdGggZXZlbnQgYnViYmxpbmcgYmVjYXVzZVxuICAvLyB0
aGUgY29tcG9uZW50IGlzIHJlcmVuZGVyZWQgYW5kIHRoZSB2YWx1ZSByZXZlcnRlZCBiZWZvcmUg
YWxsIHRoZSBldmVudFxuICAvLyBoYW5kbGVycyBjYW4gcnVuLiBTZWUgaHR0cHM6Ly9naXRodWIu
Y29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy83MDguXG4gIFJlYWN0VXBkYXRlcy5iYXRjaGVkVXBk
YXRlcyhydW5FdmVudEluQmF0Y2gsIGV2ZW50KTtcbn1cblxuZnVuY3Rpb24gcnVuRXZlbnRJbkJh
dGNoKGV2ZW50KSB7XG4gIEV2ZW50UGx1Z2luSHViLmVucXVldWVFdmVudHMoZXZlbnQpO1xuICBF
dmVudFBsdWdpbkh1Yi5wcm9jZXNzRXZlbnRRdWV1ZShmYWxzZSk7XG59XG5cbmZ1bmN0aW9uIHN0
YXJ0V2F0Y2hpbmdGb3JDaGFuZ2VFdmVudElFOCh0YXJnZXQsIHRhcmdldEluc3QpIHtcbiAgYWN0
aXZlRWxlbWVudCA9IHRhcmdldDtcbiAgYWN0aXZlRWxlbWVudEluc3QgPSB0YXJnZXRJbnN0O1xu
ICBhY3RpdmVFbGVtZW50LmF0dGFjaEV2ZW50KCdvbmNoYW5nZScsIG1hbnVhbERpc3BhdGNoQ2hh
bmdlRXZlbnQpO1xufVxuXG5mdW5jdGlvbiBzdG9wV2F0Y2hpbmdGb3JDaGFuZ2VFdmVudElFOCgp
IHtcbiAgaWYgKCFhY3RpdmVFbGVtZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGFjdGl2ZUVs
ZW1lbnQuZGV0YWNoRXZlbnQoJ29uY2hhbmdlJywgbWFudWFsRGlzcGF0Y2hDaGFuZ2VFdmVudCk7
XG4gIGFjdGl2ZUVsZW1lbnQgPSBudWxsO1xuICBhY3RpdmVFbGVtZW50SW5zdCA9IG51bGw7XG59
XG5cbmZ1bmN0aW9uIGdldEluc3RJZlZhbHVlQ2hhbmdlZCh0YXJnZXRJbnN0LCBuYXRpdmVFdmVu
dCkge1xuICB2YXIgdXBkYXRlZCA9IGlucHV0VmFsdWVUcmFja2luZy51cGRhdGVWYWx1ZUlmQ2hh
bmdlZCh0YXJnZXRJbnN0KTtcbiAgdmFyIHNpbXVsYXRlZCA9IG5hdGl2ZUV2ZW50LnNpbXVsYXRl
ZCA9PT0gdHJ1ZSAmJiBDaGFuZ2VFdmVudFBsdWdpbi5fYWxsb3dTaW11bGF0ZWRQYXNzVGhyb3Vn
aDtcblxuICBpZiAodXBkYXRlZCB8fCBzaW11bGF0ZWQpIHtcbiAgICByZXR1cm4gdGFyZ2V0SW5z
dDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRUYXJnZXRJbnN0Rm9yQ2hhbmdlRXZlbnQodG9wTGV2
ZWxUeXBlLCB0YXJnZXRJbnN0KSB7XG4gIGlmICh0b3BMZXZlbFR5cGUgPT09ICd0b3BDaGFuZ2Un
KSB7XG4gICAgcmV0dXJuIHRhcmdldEluc3Q7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlRXZl
bnRzRm9yQ2hhbmdlRXZlbnRJRTgodG9wTGV2ZWxUeXBlLCB0YXJnZXQsIHRhcmdldEluc3QpIHtc
biAgaWYgKHRvcExldmVsVHlwZSA9PT0gJ3RvcEZvY3VzJykge1xuICAgIC8vIHN0b3BXYXRjaGlu
ZygpIHNob3VsZCBiZSBhIG5vb3AgaGVyZSBidXQgd2UgY2FsbCBpdCBqdXN0IGluIGNhc2Ugd2Vc
biAgICAvLyBtaXNzZWQgYSBibHVyIGV2ZW50IHNvbWVob3cuXG4gICAgc3RvcFdhdGNoaW5nRm9y
Q2hhbmdlRXZlbnRJRTgoKTtcbiAgICBzdGFydFdhdGNoaW5nRm9yQ2hhbmdlRXZlbnRJRTgodGFy
Z2V0LCB0YXJnZXRJbnN0KTtcbiAgfSBlbHNlIGlmICh0b3BMZXZlbFR5cGUgPT09ICd0b3BCbHVy
Jykge1xuICAgIHN0b3BXYXRjaGluZ0ZvckNoYW5nZUV2ZW50SUU4KCk7XG4gIH1cbn1cblxuLyoq
XG4gKiBTRUNUSU9OOiBoYW5kbGUgYGlucHV0YCBldmVudFxuICovXG52YXIgaXNJbnB1dEV2ZW50
U3VwcG9ydGVkID0gZmFsc2U7XG5pZiAoRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NKSB7
XG4gIC8vIElFOSBjbGFpbXMgdG8gc3VwcG9ydCB0aGUgaW5wdXQgZXZlbnQgYnV0IGZhaWxzIHRv
IHRyaWdnZXIgaXQgd2hlblxuICAvLyBkZWxldGluZyB0ZXh0LCBzbyB3ZSBpZ25vcmUgaXRzIGlu
cHV0IGV2ZW50cy5cblxuICBpc0lucHV0RXZlbnRTdXBwb3J0ZWQgPSBpc0V2ZW50U3VwcG9ydGVk
KCdpbnB1dCcpICYmICghKCdkb2N1bWVudE1vZGUnIGluIGRvY3VtZW50KSB8fCBkb2N1bWVudC5k
b2N1bWVudE1vZGUgPiA5KTtcbn1cblxuLyoqXG4gKiAoRm9yIElFIDw9OSkgU3RhcnRzIHRyYWNr
aW5nIHByb3BlcnR5Y2hhbmdlIGV2ZW50cyBvbiB0aGUgcGFzc2VkLWluIGVsZW1lbnRcbiAqIGFu
ZCBvdmVycmlkZSB0aGUgdmFsdWUgcHJvcGVydHkgc28gdGhhdCB3ZSBjYW4gZGlzdGluZ3Vpc2gg
dXNlciBldmVudHMgZnJvbVxuICogdmFsdWUgY2hhbmdlcyBpbiBKUy5cbiAqL1xuZnVuY3Rpb24g
c3RhcnRXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKHRhcmdldCwgdGFyZ2V0SW5zdCkge1xuICBhY3Rp
dmVFbGVtZW50ID0gdGFyZ2V0O1xuICBhY3RpdmVFbGVtZW50SW5zdCA9IHRhcmdldEluc3Q7XG4g
IGFjdGl2ZUVsZW1lbnQuYXR0YWNoRXZlbnQoJ29ucHJvcGVydHljaGFuZ2UnLCBoYW5kbGVQcm9w
ZXJ0eUNoYW5nZSk7XG59XG5cbi8qKlxuICogKEZvciBJRSA8PTkpIFJlbW92ZXMgdGhlIGV2ZW50
IGxpc3RlbmVycyBmcm9tIHRoZSBjdXJyZW50bHktdHJhY2tlZCBlbGVtZW50LFxuICogaWYgYW55
IGV4aXN0cy5cbiAqL1xuZnVuY3Rpb24gc3RvcFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UoKSB7XG4g
IGlmICghYWN0aXZlRWxlbWVudCkge1xuICAgIHJldHVybjtcbiAgfVxuICBhY3RpdmVFbGVtZW50
LmRldGFjaEV2ZW50KCdvbnByb3BlcnR5Y2hhbmdlJywgaGFuZGxlUHJvcGVydHlDaGFuZ2UpO1xu
XG4gIGFjdGl2ZUVsZW1lbnQgPSBudWxsO1xuICBhY3RpdmVFbGVtZW50SW5zdCA9IG51bGw7XG59
XG5cbi8qKlxuICogKEZvciBJRSA8PTkpIEhhbmRsZXMgYSBwcm9wZXJ0eWNoYW5nZSBldmVudCwg
c2VuZGluZyBhIGBjaGFuZ2VgIGV2ZW50IGlmXG4gKiB0aGUgdmFsdWUgb2YgdGhlIGFjdGl2ZSBl
bGVtZW50IGhhcyBjaGFuZ2VkLlxuICovXG5mdW5jdGlvbiBoYW5kbGVQcm9wZXJ0eUNoYW5nZShu
YXRpdmVFdmVudCkge1xuICBpZiAobmF0aXZlRXZlbnQucHJvcGVydHlOYW1lICE9PSAndmFsdWUn
KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChnZXRJbnN0SWZWYWx1ZUNoYW5nZWQoYWN0aXZl
RWxlbWVudEluc3QsIG5hdGl2ZUV2ZW50KSkge1xuICAgIG1hbnVhbERpc3BhdGNoQ2hhbmdlRXZl
bnQobmF0aXZlRXZlbnQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUV2ZW50c0ZvcklucHV0
RXZlbnRQb2x5ZmlsbCh0b3BMZXZlbFR5cGUsIHRhcmdldCwgdGFyZ2V0SW5zdCkge1xuICBpZiAo
dG9wTGV2ZWxUeXBlID09PSAndG9wRm9jdXMnKSB7XG4gICAgLy8gSW4gSUU4LCB3ZSBjYW4gY2Fw
dHVyZSBhbG1vc3QgYWxsIC52YWx1ZSBjaGFuZ2VzIGJ5IGFkZGluZyBhXG4gICAgLy8gcHJvcGVy
dHljaGFuZ2UgaGFuZGxlciBhbmQgbG9va2luZyBmb3IgZXZlbnRzIHdpdGggcHJvcGVydHlOYW1l
XG4gICAgLy8gZXF1YWwgdG8gJ3ZhbHVlJ1xuICAgIC8vIEluIElFOSwgcHJvcGVydHljaGFuZ2Ug
ZmlyZXMgZm9yIG1vc3QgaW5wdXQgZXZlbnRzIGJ1dCBpcyBidWdneSBhbmRcbiAgICAvLyBkb2Vz
bid0IGZpcmUgd2hlbiB0ZXh0IGlzIGRlbGV0ZWQsIGJ1dCBjb252ZW5pZW50bHksIHNlbGVjdGlv
bmNoYW5nZVxuICAgIC8vIGFwcGVhcnMgdG8gZmlyZSBpbiBhbGwgb2YgdGhlIHJlbWFpbmluZyBj
YXNlcyBzbyB3ZSBjYXRjaCB0aG9zZSBhbmRcbiAgICAvLyBmb3J3YXJkIHRoZSBldmVudCBpZiB0
aGUgdmFsdWUgaGFzIGNoYW5nZWRcbiAgICAvLyBJbiBlaXRoZXIgY2FzZSwgd2UgZG9uJ3Qgd2Fu
dCB0byBjYWxsIHRoZSBldmVudCBoYW5kbGVyIGlmIHRoZSB2YWx1ZVxuICAgIC8vIGlzIGNoYW5n
ZWQgZnJvbSBKUyBzbyB3ZSByZWRlZmluZSBhIHNldHRlciBmb3IgYC52YWx1ZWAgdGhhdCB1cGRh
dGVzXG4gICAgLy8gb3VyIGFjdGl2ZUVsZW1lbnRWYWx1ZSB2YXJpYWJsZSwgYWxsb3dpbmcgdXMg
dG8gaWdub3JlIHRob3NlIGNoYW5nZXNcbiAgICAvL1xuICAgIC8vIHN0b3BXYXRjaGluZygpIHNo
b3VsZCBiZSBhIG5vb3AgaGVyZSBidXQgd2UgY2FsbCBpdCBqdXN0IGluIGNhc2Ugd2VcbiAgICAv
LyBtaXNzZWQgYSBibHVyIGV2ZW50IHNvbWVob3cuXG4gICAgc3RvcFdhdGNoaW5nRm9yVmFsdWVD
aGFuZ2UoKTtcbiAgICBzdGFydFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UodGFyZ2V0LCB0YXJnZXRJ
bnN0KTtcbiAgfSBlbHNlIGlmICh0b3BMZXZlbFR5cGUgPT09ICd0b3BCbHVyJykge1xuICAgIHN0
b3BXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKCk7XG4gIH1cbn1cblxuLy8gRm9yIElFOCBhbmQgSUU5
LlxuZnVuY3Rpb24gZ2V0VGFyZ2V0SW5zdEZvcklucHV0RXZlbnRQb2x5ZmlsbCh0b3BMZXZlbFR5
cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50KSB7XG4gIGlmICh0b3BMZXZlbFR5cGUgPT09ICd0
b3BTZWxlY3Rpb25DaGFuZ2UnIHx8IHRvcExldmVsVHlwZSA9PT0gJ3RvcEtleVVwJyB8fCB0b3BM
ZXZlbFR5cGUgPT09ICd0b3BLZXlEb3duJykge1xuICAgIC8vIE9uIHRoZSBzZWxlY3Rpb25jaGFu
Z2UgZXZlbnQsIHRoZSB0YXJnZXQgaXMganVzdCBkb2N1bWVudCB3aGljaCBpc24ndFxuICAgIC8v
IGhlbHBmdWwgZm9yIHVzIHNvIGp1c3QgY2hlY2sgYWN0aXZlRWxlbWVudCBpbnN0ZWFkLlxuICAg
IC8vXG4gICAgLy8gOTklIG9mIHRoZSB0aW1lLCBrZXlkb3duIGFuZCBrZXl1cCBhcmVuJ3QgbmVj
ZXNzYXJ5LiBJRTggZmFpbHMgdG8gZmlyZVxuICAgIC8vIHByb3BlcnR5Y2hhbmdlIG9uIHRoZSBm
aXJzdCBpbnB1dCBldmVudCBhZnRlciBzZXR0aW5nIGB2YWx1ZWAgZnJvbSBhXG4gICAgLy8gc2Ny
aXB0IGFuZCBmaXJlcyBvbmx5IGtleWRvd24sIGtleXByZXNzLCBrZXl1cC4gQ2F0Y2hpbmcga2V5
dXAgdXN1YWxseVxuICAgIC8vIGdldHMgaXQgYW5kIGNhdGNoaW5nIGtleWRvd24gbGV0cyB1cyBm
aXJlIGFuIGV2ZW50IGZvciB0aGUgZmlyc3RcbiAgICAvLyBrZXlzdHJva2UgaWYgdXNlciBkb2Vz
IGEga2V5IHJlcGVhdCAoaXQnbGwgYmUgYSBsaXR0bGUgZGVsYXllZDogcmlnaHRcbiAgICAvLyBi
ZWZvcmUgdGhlIHNlY29uZCBrZXlzdHJva2UpLiBPdGhlciBpbnB1dCBtZXRob2RzIChlLmcuLCBw
YXN0ZSkgc2VlbSB0b1xuICAgIC8vIGZpcmUgc2VsZWN0aW9uY2hhbmdlIG5vcm1hbGx5LlxuICAg
IHJldHVybiBnZXRJbnN0SWZWYWx1ZUNoYW5nZWQoYWN0aXZlRWxlbWVudEluc3QsIG5hdGl2ZUV2
ZW50KTtcbiAgfVxufVxuXG4vKipcbiAqIFNFQ1RJT046IGhhbmRsZSBgY2xpY2tgIGV2ZW50XG4g
Ki9cbmZ1bmN0aW9uIHNob3VsZFVzZUNsaWNrRXZlbnQoZWxlbSkge1xuICAvLyBVc2UgdGhlIGBj
bGlja2AgZXZlbnQgdG8gZGV0ZWN0IGNoYW5nZXMgdG8gY2hlY2tib3ggYW5kIHJhZGlvIGlucHV0
cy5cbiAgLy8gVGhpcyBhcHByb2FjaCB3b3JrcyBhY3Jvc3MgYWxsIGJyb3dzZXJzLCB3aGVyZWFz
IGBjaGFuZ2VgIGRvZXMgbm90IGZpcmVcbiAgLy8gdW50aWwgYGJsdXJgIGluIElFOC5cbiAgdmFy
IG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZTtcbiAgcmV0dXJuIG5vZGVOYW1lICYmIG5vZGVOYW1l
LnRvTG93ZXJDYXNlKCkgPT09ICdpbnB1dCcgJiYgKGVsZW0udHlwZSA9PT0gJ2NoZWNrYm94JyB8
fCBlbGVtLnR5cGUgPT09ICdyYWRpbycpO1xufVxuXG5mdW5jdGlvbiBnZXRUYXJnZXRJbnN0Rm9y
Q2xpY2tFdmVudCh0b3BMZXZlbFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50KSB7XG4gIGlm
ICh0b3BMZXZlbFR5cGUgPT09ICd0b3BDbGljaycpIHtcbiAgICByZXR1cm4gZ2V0SW5zdElmVmFs
dWVDaGFuZ2VkKHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBn
ZXRUYXJnZXRJbnN0Rm9ySW5wdXRPckNoYW5nZUV2ZW50KHRvcExldmVsVHlwZSwgdGFyZ2V0SW5z
dCwgbmF0aXZlRXZlbnQpIHtcbiAgaWYgKHRvcExldmVsVHlwZSA9PT0gJ3RvcElucHV0JyB8fCB0
b3BMZXZlbFR5cGUgPT09ICd0b3BDaGFuZ2UnKSB7XG4gICAgcmV0dXJuIGdldEluc3RJZlZhbHVl
Q2hhbmdlZCh0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFu
ZGxlQ29udHJvbGxlZElucHV0Qmx1cihpbnN0LCBub2RlKSB7XG4gIC8vIFRPRE86IEluIElFLCBp
bnN0IGlzIG9jY2FzaW9uYWxseSBudWxsLiBXaHk/XG4gIGlmIChpbnN0ID09IG51bGwpIHtcbiAg
ICByZXR1cm47XG4gIH1cblxuICAvLyBGaWJlciBhbmQgUmVhY3RET00ga2VlcCB3cmFwcGVyIHN0
YXRlIGluIHNlcGFyYXRlIHBsYWNlc1xuICB2YXIgc3RhdGUgPSBpbnN0Ll93cmFwcGVyU3RhdGUg
fHwgbm9kZS5fd3JhcHBlclN0YXRlO1xuXG4gIGlmICghc3RhdGUgfHwgIXN0YXRlLmNvbnRyb2xs
ZWQgfHwgbm9kZS50eXBlICE9PSAnbnVtYmVyJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8v
IElmIGNvbnRyb2xsZWQsIGFzc2lnbiB0aGUgdmFsdWUgYXR0cmlidXRlIHRvIHRoZSBjdXJyZW50
IHZhbHVlIG9uIGJsdXJcbiAgdmFyIHZhbHVlID0gJycgKyBub2RlLnZhbHVlO1xuICBpZiAobm9k
ZS5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykgIT09IHZhbHVlKSB7XG4gICAgbm9kZS5zZXRBdHRyaWJ1
dGUoJ3ZhbHVlJywgdmFsdWUpO1xuICB9XG59XG5cbi8qKlxuICogVGhpcyBwbHVnaW4gY3JlYXRl
cyBhbiBgb25DaGFuZ2VgIGV2ZW50IHRoYXQgbm9ybWFsaXplcyBjaGFuZ2UgZXZlbnRzXG4gKiBh
Y3Jvc3MgZm9ybSBlbGVtZW50cy4gVGhpcyBldmVudCBmaXJlcyBhdCBhIHRpbWUgd2hlbiBpdCdz
IHBvc3NpYmxlIHRvXG4gKiBjaGFuZ2UgdGhlIGVsZW1lbnQncyB2YWx1ZSB3aXRob3V0IHNlZWlu
ZyBhIGZsaWNrZXIuXG4gKlxuICogU3VwcG9ydGVkIGVsZW1lbnRzIGFyZTpcbiAqIC0gaW5wdXQg
KHNlZSBgaXNUZXh0SW5wdXRFbGVtZW50YClcbiAqIC0gdGV4dGFyZWFcbiAqIC0gc2VsZWN0XG4g
Ki9cbnZhciBDaGFuZ2VFdmVudFBsdWdpbiA9IHtcbiAgZXZlbnRUeXBlczogZXZlbnRUeXBlcyxc
blxuICBfYWxsb3dTaW11bGF0ZWRQYXNzVGhyb3VnaDogdHJ1ZSxcbiAgX2lzSW5wdXRFdmVudFN1
cHBvcnRlZDogaXNJbnB1dEV2ZW50U3VwcG9ydGVkLFxuXG4gIGV4dHJhY3RFdmVudHM6IGZ1bmN0
aW9uICh0b3BMZXZlbFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRh
cmdldCkge1xuICAgIHZhciB0YXJnZXROb2RlID0gdGFyZ2V0SW5zdCA/IFJlYWN0RE9NQ29tcG9u
ZW50VHJlZS5nZXROb2RlRnJvbUluc3RhbmNlKHRhcmdldEluc3QpIDogd2luZG93O1xuXG4gICAg
dmFyIGdldFRhcmdldEluc3RGdW5jLCBoYW5kbGVFdmVudEZ1bmM7XG4gICAgaWYgKHNob3VsZFVz
ZUNoYW5nZUV2ZW50KHRhcmdldE5vZGUpKSB7XG4gICAgICBpZiAoZG9lc0NoYW5nZUV2ZW50QnVi
YmxlKSB7XG4gICAgICAgIGdldFRhcmdldEluc3RGdW5jID0gZ2V0VGFyZ2V0SW5zdEZvckNoYW5n
ZUV2ZW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGFuZGxlRXZlbnRGdW5jID0gaGFuZGxl
RXZlbnRzRm9yQ2hhbmdlRXZlbnRJRTg7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1RleHRJ
bnB1dEVsZW1lbnQodGFyZ2V0Tm9kZSkpIHtcbiAgICAgIGlmIChpc0lucHV0RXZlbnRTdXBwb3J0
ZWQpIHtcbiAgICAgICAgZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9ySW5wdXRP
ckNoYW5nZUV2ZW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ2V0VGFyZ2V0SW5zdEZ1bmMg
PSBnZXRUYXJnZXRJbnN0Rm9ySW5wdXRFdmVudFBvbHlmaWxsO1xuICAgICAgICBoYW5kbGVFdmVu
dEZ1bmMgPSBoYW5kbGVFdmVudHNGb3JJbnB1dEV2ZW50UG9seWZpbGw7XG4gICAgICB9XG4gICAg
fSBlbHNlIGlmIChzaG91bGRVc2VDbGlja0V2ZW50KHRhcmdldE5vZGUpKSB7XG4gICAgICBnZXRU
YXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGb3JDbGlja0V2ZW50O1xuICAgIH1cblxuICAg
IGlmIChnZXRUYXJnZXRJbnN0RnVuYykge1xuICAgICAgdmFyIGluc3QgPSBnZXRUYXJnZXRJbnN0
RnVuYyh0b3BMZXZlbFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50KTtcbiAgICAgIGlmIChp
bnN0KSB7XG4gICAgICAgIHZhciBldmVudCA9IGNyZWF0ZUFuZEFjY3VtdWxhdGVDaGFuZ2VFdmVu
dChpbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgICAgICByZXR1cm4g
ZXZlbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGhhbmRsZUV2ZW50RnVuYykge1xuICAg
ICAgaGFuZGxlRXZlbnRGdW5jKHRvcExldmVsVHlwZSwgdGFyZ2V0Tm9kZSwgdGFyZ2V0SW5zdCk7
XG4gICAgfVxuXG4gICAgLy8gV2hlbiBibHVycmluZywgc2V0IHRoZSB2YWx1ZSBhdHRyaWJ1dGUg
Zm9yIG51bWJlciBpbnB1dHNcbiAgICBpZiAodG9wTGV2ZWxUeXBlID09PSAndG9wQmx1cicpIHtc
biAgICAgIGhhbmRsZUNvbnRyb2xsZWRJbnB1dEJsdXIodGFyZ2V0SW5zdCwgdGFyZ2V0Tm9kZSk7
XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENoYW5nZUV2ZW50UGx1Z2luO1xu
XG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1
bGVzL3JlYWN0LWRvbS9saWIvQ2hhbmdlRXZlbnRQbHVnaW4uanNcbi8vIG1vZHVsZSBpZCA9IDEy
NlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQs
IEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291
cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGlu
IHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJj
ZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBm
b3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBc
biAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdE93bmVyID0gcmVxdWlyZSgnLi9SZWFj
dE93bmVyJyk7XG5cbnZhciBSZWFjdFJlZiA9IHt9O1xuXG5mdW5jdGlvbiBhdHRhY2hSZWYocmVm
LCBjb21wb25lbnQsIG93bmVyKSB7XG4gIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7
XG4gICAgcmVmKGNvbXBvbmVudC5nZXRQdWJsaWNJbnN0YW5jZSgpKTtcbiAgfSBlbHNlIHtcbiAg
ICAvLyBMZWdhY3kgcmVmXG4gICAgUmVhY3RPd25lci5hZGRDb21wb25lbnRBc1JlZlRvKGNvbXBv
bmVudCwgcmVmLCBvd25lcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGV0YWNoUmVmKHJlZiwgY29t
cG9uZW50LCBvd25lcikge1xuICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAg
IHJlZihudWxsKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBMZWdhY3kgcmVmXG4gICAgUmVhY3RPd25l
ci5yZW1vdmVDb21wb25lbnRBc1JlZkZyb20oY29tcG9uZW50LCByZWYsIG93bmVyKTtcbiAgfVxu
fVxuXG5SZWFjdFJlZi5hdHRhY2hSZWZzID0gZnVuY3Rpb24gKGluc3RhbmNlLCBlbGVtZW50KSB7
XG4gIGlmIChlbGVtZW50ID09PSBudWxsIHx8IHR5cGVvZiBlbGVtZW50ICE9PSAnb2JqZWN0Jykg
e1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgcmVmID0gZWxlbWVudC5yZWY7XG4gIGlmIChyZWYg
IT0gbnVsbCkge1xuICAgIGF0dGFjaFJlZihyZWYsIGluc3RhbmNlLCBlbGVtZW50Ll9vd25lcik7
XG4gIH1cbn07XG5cblJlYWN0UmVmLnNob3VsZFVwZGF0ZVJlZnMgPSBmdW5jdGlvbiAocHJldkVs
ZW1lbnQsIG5leHRFbGVtZW50KSB7XG4gIC8vIElmIGVpdGhlciB0aGUgb3duZXIgb3IgYSBgcmVm
YCBoYXMgY2hhbmdlZCwgbWFrZSBzdXJlIHRoZSBuZXdlc3Qgb3duZXJcbiAgLy8gaGFzIHN0b3Jl
ZCBhIHJlZmVyZW5jZSB0byBgdGhpc2AsIGFuZCB0aGUgcHJldmlvdXMgb3duZXIgKGlmIGRpZmZl
cmVudClcbiAgLy8gaGFzIGZvcmdvdHRlbiB0aGUgcmVmZXJlbmNlIHRvIGB0aGlzYC4gV2UgdXNl
IHRoZSBlbGVtZW50IGluc3RlYWRcbiAgLy8gb2YgdGhlIHB1YmxpYyB0aGlzLnByb3BzIGJlY2F1
c2UgdGhlIHBvc3QgcHJvY2Vzc2luZyBjYW5ub3QgZGV0ZXJtaW5lXG4gIC8vIGEgcmVmLiBUaGUg
cmVmIGNvbmNlcHR1YWxseSBsaXZlcyBvbiB0aGUgZWxlbWVudC5cblxuICAvLyBUT0RPOiBTaG91
bGQgdGhpcyBldmVuIGJlIHBvc3NpYmxlPyBUaGUgb3duZXIgY2Fubm90IGNoYW5nZSBiZWNhdXNl
XG4gIC8vIGl0J3MgZm9yYmlkZGVuIGJ5IHNob3VsZFVwZGF0ZVJlYWN0Q29tcG9uZW50LiBUaGUg
cmVmIGNhbiBjaGFuZ2VcbiAgLy8gaWYgeW91IHN3YXAgdGhlIGtleXMgb2YgYnV0IG5vdCB0aGUg
cmVmcy4gUmVjb25zaWRlciB3aGVyZSB0aGlzIGNoZWNrXG4gIC8vIGlzIG1hZGUuIEl0IHByb2Jh
Ymx5IGJlbG9uZ3Mgd2hlcmUgdGhlIGtleSBjaGVja2luZyBhbmRcbiAgLy8gaW5zdGFudGlhdGVS
ZWFjdENvbXBvbmVudCBpcyBkb25lLlxuXG4gIHZhciBwcmV2UmVmID0gbnVsbDtcbiAgdmFyIHBy
ZXZPd25lciA9IG51bGw7XG4gIGlmIChwcmV2RWxlbWVudCAhPT0gbnVsbCAmJiB0eXBlb2YgcHJl
dkVsZW1lbnQgPT09ICdvYmplY3QnKSB7XG4gICAgcHJldlJlZiA9IHByZXZFbGVtZW50LnJlZjtc
biAgICBwcmV2T3duZXIgPSBwcmV2RWxlbWVudC5fb3duZXI7XG4gIH1cblxuICB2YXIgbmV4dFJl
ZiA9IG51bGw7XG4gIHZhciBuZXh0T3duZXIgPSBudWxsO1xuICBpZiAobmV4dEVsZW1lbnQgIT09
IG51bGwgJiYgdHlwZW9mIG5leHRFbGVtZW50ID09PSAnb2JqZWN0Jykge1xuICAgIG5leHRSZWYg
PSBuZXh0RWxlbWVudC5yZWY7XG4gICAgbmV4dE93bmVyID0gbmV4dEVsZW1lbnQuX293bmVyO1xu
ICB9XG5cbiAgcmV0dXJuIHByZXZSZWYgIT09IG5leHRSZWYgfHxcbiAgLy8gSWYgb3duZXIgY2hh
bmdlcyBidXQgd2UgaGF2ZSBhbiB1bmNoYW5nZWQgZnVuY3Rpb24gcmVmLCBkb24ndCB1cGRhdGUg
cmVmc1xuICB0eXBlb2YgbmV4dFJlZiA9PT0gJ3N0cmluZycgJiYgbmV4dE93bmVyICE9PSBwcmV2
T3duZXI7XG59O1xuXG5SZWFjdFJlZi5kZXRhY2hSZWZzID0gZnVuY3Rpb24gKGluc3RhbmNlLCBl
bGVtZW50KSB7XG4gIGlmIChlbGVtZW50ID09PSBudWxsIHx8IHR5cGVvZiBlbGVtZW50ICE9PSAn
b2JqZWN0Jykge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgcmVmID0gZWxlbWVudC5yZWY7XG4g
IGlmIChyZWYgIT0gbnVsbCkge1xuICAgIGRldGFjaFJlZihyZWYsIGluc3RhbmNlLCBlbGVtZW50
Ll9vd25lcik7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RSZWY7XG5cblxuLy8v
Ly8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvcmVh
Y3QtZG9tL2xpYi9SZWFjdFJlZi5qc1xuLy8gbW9kdWxlIGlkID0gMTI3XG4vLyBtb2R1bGUgY2h1
bmtzID0gMCIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5c
biAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNl
bnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNF
IGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0
aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRF
TlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIFxuICovXG5cbid1c2Ugc3Ry
aWN0JztcblxudmFyIF9wcm9kSW52YXJpYW50ID0gcmVxdWlyZSgnLi9yZWFjdFByb2RJbnZhcmlh
bnQnKTtcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoJ2ZianMvbGliL2ludmFyaWFudCcpO1xu
XG4vKipcbiAqIEBwYXJhbSB7P29iamVjdH0gb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBU
cnVlIGlmIGBvYmplY3RgIGlzIGEgdmFsaWQgb3duZXIuXG4gKiBAZmluYWxcbiAqL1xuZnVuY3Rp
b24gaXNWYWxpZE93bmVyKG9iamVjdCkge1xuICByZXR1cm4gISEob2JqZWN0ICYmIHR5cGVvZiBv
YmplY3QuYXR0YWNoUmVmID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmplY3QuZGV0YWNoUmVm
ID09PSAnZnVuY3Rpb24nKTtcbn1cblxuLyoqXG4gKiBSZWFjdE93bmVycyBhcmUgY2FwYWJsZSBv
ZiBzdG9yaW5nIHJlZmVyZW5jZXMgdG8gb3duZWQgY29tcG9uZW50cy5cbiAqXG4gKiBBbGwgY29t
cG9uZW50cyBhcmUgY2FwYWJsZSBvZiAvL2JlaW5nLy8gcmVmZXJlbmNlZCBieSBvd25lciBjb21w
b25lbnRzLCBidXRcbiAqIG9ubHkgUmVhY3RPd25lciBjb21wb25lbnRzIGFyZSBjYXBhYmxlIG9m
IC8vcmVmZXJlbmNpbmcvLyBvd25lZCBjb21wb25lbnRzLlxuICogVGhlIG5hbWVkIHJlZmVyZW5j
ZSBpcyBrbm93biBhcyBhIFwicmVmXCIuXG4gKlxuICogUmVmcyBhcmUgYXZhaWxhYmxlIHdoZW4g
bW91bnRlZCBhbmQgdXBkYXRlZCBkdXJpbmcgcmVjb25jaWxpYXRpb24uXG4gKlxuICogICB2YXIg
TXlDb21wb25lbnQgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gKiAgICAgcmVuZGVyOiBmdW5jdGlv
bigpIHtcbiAqICAgICAgIHJldHVybiAoXG4gKiAgICAgICAgIDxkaXYgb25DbGljaz17dGhpcy5o
YW5kbGVDbGlja30+XG4gKiAgICAgICAgICAgPEN1c3RvbUNvbXBvbmVudCByZWY9XCJjdXN0b21c
IiAvPlxuICogICAgICAgICA8L2Rpdj5cbiAqICAgICAgICk7XG4gKiAgICAgfSxcbiAqICAgICBo
YW5kbGVDbGljazogZnVuY3Rpb24oKSB7XG4gKiAgICAgICB0aGlzLnJlZnMuY3VzdG9tLmhhbmRs
ZUNsaWNrKCk7XG4gKiAgICAgfSxcbiAqICAgICBjb21wb25lbnREaWRNb3VudDogZnVuY3Rpb24o
KSB7XG4gKiAgICAgICB0aGlzLnJlZnMuY3VzdG9tLmluaXRpYWxpemUoKTtcbiAqICAgICB9XG4g
KiAgIH0pO1xuICpcbiAqIFJlZnMgc2hvdWxkIHJhcmVseSBiZSB1c2VkLiBXaGVuIHJlZnMgYXJl
IHVzZWQsIHRoZXkgc2hvdWxkIG9ubHkgYmUgZG9uZSB0b1xuICogY29udHJvbCBkYXRhIHRoYXQg
aXMgbm90IGhhbmRsZWQgYnkgUmVhY3QncyBkYXRhIGZsb3cuXG4gKlxuICogQGNsYXNzIFJlYWN0
T3duZXJcbiAqL1xudmFyIFJlYWN0T3duZXIgPSB7XG4gIC8qKlxuICAgKiBBZGRzIGEgY29tcG9u
ZW50IGJ5IHJlZiB0byBhbiBvd25lciBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVh
Y3RDb21wb25lbnR9IGNvbXBvbmVudCBDb21wb25lbnQgdG8gcmVmZXJlbmNlLlxuICAgKiBAcGFy
YW0ge3N0cmluZ30gcmVmIE5hbWUgYnkgd2hpY2ggdG8gcmVmZXIgdG8gdGhlIGNvbXBvbmVudC5c
biAgICogQHBhcmFtIHtSZWFjdE93bmVyfSBvd25lciBDb21wb25lbnQgb24gd2hpY2ggdG8gcmVj
b3JkIHRoZSByZWYuXG4gICAqIEBmaW5hbFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGFkZENv
bXBvbmVudEFzUmVmVG86IGZ1bmN0aW9uIChjb21wb25lbnQsIHJlZiwgb3duZXIpIHtcbiAgICAh
aXNWYWxpZE93bmVyKG93bmVyKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlv
bicgPyBpbnZhcmlhbnQoZmFsc2UsICdhZGRDb21wb25lbnRBc1JlZlRvKC4uLik6IE9ubHkgYSBS
ZWFjdE93bmVyIGNhbiBoYXZlIHJlZnMuIFlvdSBtaWdodCBiZSBhZGRpbmcgYSByZWYgdG8gYSBj
b21wb25lbnQgdGhhdCB3YXMgbm90IGNyZWF0ZWQgaW5zaWRlIGEgY29tcG9uZW50XFwncyBgcmVu
ZGVyYCBtZXRob2QsIG9yIHlvdSBoYXZlIG11bHRpcGxlIGNvcGllcyBvZiBSZWFjdCBsb2FkZWQg
KGRldGFpbHM6IGh0dHBzOi8vZmIubWUvcmVhY3QtcmVmcy1tdXN0LWhhdmUtb3duZXIpLicpIDog
X3Byb2RJbnZhcmlhbnQoJzExOScpIDogdm9pZCAwO1xuICAgIG93bmVyLmF0dGFjaFJlZihyZWYs
IGNvbXBvbmVudCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBjb21wb25lbnQgYnkg
cmVmIGZyb20gYW4gb3duZXIgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q29t
cG9uZW50fSBjb21wb25lbnQgQ29tcG9uZW50IHRvIGRlcmVmZXJlbmNlLlxuICAgKiBAcGFyYW0g
e3N0cmluZ30gcmVmIE5hbWUgb2YgdGhlIHJlZiB0byByZW1vdmUuXG4gICAqIEBwYXJhbSB7UmVh
Y3RPd25lcn0gb3duZXIgQ29tcG9uZW50IG9uIHdoaWNoIHRoZSByZWYgaXMgcmVjb3JkZWQuXG4g
ICAqIEBmaW5hbFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHJlbW92ZUNvbXBvbmVudEFzUmVm
RnJvbTogZnVuY3Rpb24gKGNvbXBvbmVudCwgcmVmLCBvd25lcikge1xuICAgICFpc1ZhbGlkT3du
ZXIob3duZXIpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFy
aWFudChmYWxzZSwgJ3JlbW92ZUNvbXBvbmVudEFzUmVmRnJvbSguLi4pOiBPbmx5IGEgUmVhY3RP
d25lciBjYW4gaGF2ZSByZWZzLiBZb3UgbWlnaHQgYmUgcmVtb3ZpbmcgYSByZWYgdG8gYSBjb21w
b25lbnQgdGhhdCB3YXMgbm90IGNyZWF0ZWQgaW5zaWRlIGEgY29tcG9uZW50XFwncyBgcmVuZGVy
YCBtZXRob2QsIG9yIHlvdSBoYXZlIG11bHRpcGxlIGNvcGllcyBvZiBSZWFjdCBsb2FkZWQgKGRl
dGFpbHM6IGh0dHBzOi8vZmIubWUvcmVhY3QtcmVmcy1tdXN0LWhhdmUtb3duZXIpLicpIDogX3By
b2RJbnZhcmlhbnQoJzEyMCcpIDogdm9pZCAwO1xuICAgIHZhciBvd25lclB1YmxpY0luc3RhbmNl
ID0gb3duZXIuZ2V0UHVibGljSW5zdGFuY2UoKTtcbiAgICAvLyBDaGVjayB0aGF0IGBjb21wb25l
bnRgJ3Mgb3duZXIgaXMgc3RpbGwgYWxpdmUgYW5kIHRoYXQgYGNvbXBvbmVudGAgaXMgc3RpbGwg
dGhlIGN1cnJlbnQgcmVmXG4gICAgLy8gYmVjYXVzZSB3ZSBkbyBub3Qgd2FudCB0byBkZXRhY2gg
dGhlIHJlZiBpZiBhbm90aGVyIGNvbXBvbmVudCBzdG9sZSBpdC5cbiAgICBpZiAob3duZXJQdWJs
aWNJbnN0YW5jZSAmJiBvd25lclB1YmxpY0luc3RhbmNlLnJlZnNbcmVmXSA9PT0gY29tcG9uZW50
LmdldFB1YmxpY0luc3RhbmNlKCkpIHtcbiAgICAgIG93bmVyLmRldGFjaFJlZihyZWYpO1xuICAg
IH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdE93bmVyO1xuXG5cbi8vLy8vLy8v
Ly8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0LWRv
bS9saWIvUmVhY3RPd25lci5qc1xuLy8gbW9kdWxlIGlkID0gMTI4XG4vLyBtb2R1bGUgY2h1bmtz
ID0gMCIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNl
ZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZp
bGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9u
YWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRT
IGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5c
bi8qKlxuICogTW9kdWxlIHRoYXQgaXMgaW5qZWN0YWJsZSBpbnRvIGBFdmVudFBsdWdpbkh1YmAs
IHRoYXQgc3BlY2lmaWVzIGFcbiAqIGRldGVybWluaXN0aWMgb3JkZXJpbmcgb2YgYEV2ZW50UGx1
Z2luYHMuIEEgY29udmVuaWVudCB3YXkgdG8gcmVhc29uIGFib3V0XG4gKiBwbHVnaW5zLCB3aXRo
b3V0IGhhdmluZyB0byBwYWNrYWdlIGV2ZXJ5IG9uZSBvZiB0aGVtLiBUaGlzIGlzIGJldHRlciB0
aGFuXG4gKiBoYXZpbmcgcGx1Z2lucyBiZSBvcmRlcmVkIGluIHRoZSBzYW1lIG9yZGVyIHRoYXQg
dGhleSBhcmUgaW5qZWN0ZWQgYmVjYXVzZVxuICogdGhhdCBvcmRlcmluZyB3b3VsZCBiZSBpbmZs
dWVuY2VkIGJ5IHRoZSBwYWNrYWdpbmcgb3JkZXIuXG4gKiBgUmVzcG9uZGVyRXZlbnRQbHVnaW5g
IG11c3Qgb2NjdXIgYmVmb3JlIGBTaW1wbGVFdmVudFBsdWdpbmAgc28gdGhhdFxuICogcHJldmVu
dGluZyBkZWZhdWx0IG9uIGV2ZW50cyBpcyBjb252ZW5pZW50IGluIGBTaW1wbGVFdmVudFBsdWdp
bmAgaGFuZGxlcnMuXG4gKi9cblxudmFyIERlZmF1bHRFdmVudFBsdWdpbk9yZGVyID0gWydSZXNw
b25kZXJFdmVudFBsdWdpbicsICdTaW1wbGVFdmVudFBsdWdpbicsICdUYXBFdmVudFBsdWdpbics
ICdFbnRlckxlYXZlRXZlbnRQbHVnaW4nLCAnQ2hhbmdlRXZlbnRQbHVnaW4nLCAnU2VsZWN0RXZl
bnRQbHVnaW4nLCAnQmVmb3JlSW5wdXRFdmVudFBsdWdpbiddO1xuXG5tb2R1bGUuZXhwb3J0cyA9
IERlZmF1bHRFdmVudFBsdWdpbk9yZGVyO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VC
UEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvRGVmYXVsdEV2ZW50
UGx1Z2luT3JkZXIuanNcbi8vIG1vZHVsZSBpZCA9IDEyOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAi
LCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwg
cmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5k
ZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdy
YW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxl
IGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIg
RXZlbnRQcm9wYWdhdG9ycyA9IHJlcXVpcmUoJy4vRXZlbnRQcm9wYWdhdG9ycycpO1xudmFyIFJl
YWN0RE9NQ29tcG9uZW50VHJlZSA9IHJlcXVpcmUoJy4vUmVhY3RET01Db21wb25lbnRUcmVlJyk7
XG52YXIgU3ludGhldGljTW91c2VFdmVudCA9IHJlcXVpcmUoJy4vU3ludGhldGljTW91c2VFdmVu
dCcpO1xuXG52YXIgZXZlbnRUeXBlcyA9IHtcbiAgbW91c2VFbnRlcjoge1xuICAgIHJlZ2lzdHJh
dGlvbk5hbWU6ICdvbk1vdXNlRW50ZXInLFxuICAgIGRlcGVuZGVuY2llczogWyd0b3BNb3VzZU91
dCcsICd0b3BNb3VzZU92ZXInXVxuICB9LFxuICBtb3VzZUxlYXZlOiB7XG4gICAgcmVnaXN0cmF0
aW9uTmFtZTogJ29uTW91c2VMZWF2ZScsXG4gICAgZGVwZW5kZW5jaWVzOiBbJ3RvcE1vdXNlT3V0
JywgJ3RvcE1vdXNlT3ZlciddXG4gIH1cbn07XG5cbnZhciBFbnRlckxlYXZlRXZlbnRQbHVnaW4g
PSB7XG4gIGV2ZW50VHlwZXM6IGV2ZW50VHlwZXMsXG5cbiAgLyoqXG4gICAqIEZvciBhbG1vc3Qg
ZXZlcnkgaW50ZXJhY3Rpb24gd2UgY2FyZSBhYm91dCwgdGhlcmUgd2lsbCBiZSBib3RoIGEgdG9w
LWxldmVsXG4gICAqIGBtb3VzZW92ZXJgIGFuZCBgbW91c2VvdXRgIGV2ZW50IHRoYXQgb2NjdXJz
LiBPbmx5IHVzZSBgbW91c2VvdXRgIHNvIHRoYXRcbiAgICogd2UgZG8gbm90IGV4dHJhY3QgZHVw
bGljYXRlIGV2ZW50cy4gSG93ZXZlciwgbW92aW5nIHRoZSBtb3VzZSBpbnRvIHRoZVxuICAgKiBi
cm93c2VyIGZyb20gb3V0c2lkZSB3aWxsIG5vdCBmaXJlIGEgYG1vdXNlb3V0YCBldmVudC4gSW4g
dGhpcyBjYXNlLCB3ZSB1c2VcbiAgICogdGhlIGBtb3VzZW92ZXJgIHRvcC1sZXZlbCBldmVudC5c
biAgICovXG4gIGV4dHJhY3RFdmVudHM6IGZ1bmN0aW9uICh0b3BMZXZlbFR5cGUsIHRhcmdldElu
c3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICAgIGlmICh0b3BMZXZlbFR5
cGUgPT09ICd0b3BNb3VzZU92ZXInICYmIChuYXRpdmVFdmVudC5yZWxhdGVkVGFyZ2V0IHx8IG5h
dGl2ZUV2ZW50LmZyb21FbGVtZW50KSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAg
IGlmICh0b3BMZXZlbFR5cGUgIT09ICd0b3BNb3VzZU91dCcgJiYgdG9wTGV2ZWxUeXBlICE9PSAn
dG9wTW91c2VPdmVyJykge1xuICAgICAgLy8gTXVzdCBub3QgYmUgYSBtb3VzZSBpbiBvciBtb3Vz
ZSBvdXQgLSBpZ25vcmluZy5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciB3
aW47XG4gICAgaWYgKG5hdGl2ZUV2ZW50VGFyZ2V0LndpbmRvdyA9PT0gbmF0aXZlRXZlbnRUYXJn
ZXQpIHtcbiAgICAgIC8vIGBuYXRpdmVFdmVudFRhcmdldGAgaXMgcHJvYmFibHkgYSB3aW5kb3cg
b2JqZWN0LlxuICAgICAgd2luID0gbmF0aXZlRXZlbnRUYXJnZXQ7XG4gICAgfSBlbHNlIHtcbiAg
ICAgIC8vIFRPRE86IEZpZ3VyZSBvdXQgd2h5IGBvd25lckRvY3VtZW50YCBpcyBzb21ldGltZXMg
dW5kZWZpbmVkIGluIElFOC5cbiAgICAgIHZhciBkb2MgPSBuYXRpdmVFdmVudFRhcmdldC5vd25l
ckRvY3VtZW50O1xuICAgICAgaWYgKGRvYykge1xuICAgICAgICB3aW4gPSBkb2MuZGVmYXVsdFZp
ZXcgfHwgZG9jLnBhcmVudFdpbmRvdztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbiA9IHdp
bmRvdztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZnJvbTtcbiAgICB2YXIgdG87XG4gICAg
aWYgKHRvcExldmVsVHlwZSA9PT0gJ3RvcE1vdXNlT3V0Jykge1xuICAgICAgZnJvbSA9IHRhcmdl
dEluc3Q7XG4gICAgICB2YXIgcmVsYXRlZCA9IG5hdGl2ZUV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwg
bmF0aXZlRXZlbnQudG9FbGVtZW50O1xuICAgICAgdG8gPSByZWxhdGVkID8gUmVhY3RET01Db21w
b25lbnRUcmVlLmdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHJlbGF0ZWQpIDogbnVsbDtcbiAg
ICB9IGVsc2Uge1xuICAgICAgLy8gTW92aW5nIHRvIGEgbm9kZSBmcm9tIG91dHNpZGUgdGhlIHdp
bmRvdy5cbiAgICAgIGZyb20gPSBudWxsO1xuICAgICAgdG8gPSB0YXJnZXRJbnN0O1xuICAgIH1c
blxuICAgIGlmIChmcm9tID09PSB0bykge1xuICAgICAgLy8gTm90aGluZyBwZXJ0YWlucyB0byBv
dXIgbWFuYWdlZCBjb21wb25lbnRzLlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAg
dmFyIGZyb21Ob2RlID0gZnJvbSA9PSBudWxsID8gd2luIDogUmVhY3RET01Db21wb25lbnRUcmVl
LmdldE5vZGVGcm9tSW5zdGFuY2UoZnJvbSk7XG4gICAgdmFyIHRvTm9kZSA9IHRvID09IG51bGwg
PyB3aW4gOiBSZWFjdERPTUNvbXBvbmVudFRyZWUuZ2V0Tm9kZUZyb21JbnN0YW5jZSh0byk7XG5c
biAgICB2YXIgbGVhdmUgPSBTeW50aGV0aWNNb3VzZUV2ZW50LmdldFBvb2xlZChldmVudFR5cGVz
Lm1vdXNlTGVhdmUsIGZyb20sIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAg
bGVhdmUudHlwZSA9ICdtb3VzZWxlYXZlJztcbiAgICBsZWF2ZS50YXJnZXQgPSBmcm9tTm9kZTtc
biAgICBsZWF2ZS5yZWxhdGVkVGFyZ2V0ID0gdG9Ob2RlO1xuXG4gICAgdmFyIGVudGVyID0gU3lu
dGhldGljTW91c2VFdmVudC5nZXRQb29sZWQoZXZlbnRUeXBlcy5tb3VzZUVudGVyLCB0bywgbmF0
aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICBlbnRlci50eXBlID0gJ21vdXNlZW50
ZXInO1xuICAgIGVudGVyLnRhcmdldCA9IHRvTm9kZTtcbiAgICBlbnRlci5yZWxhdGVkVGFyZ2V0
ID0gZnJvbU5vZGU7XG5cbiAgICBFdmVudFByb3BhZ2F0b3JzLmFjY3VtdWxhdGVFbnRlckxlYXZl
RGlzcGF0Y2hlcyhsZWF2ZSwgZW50ZXIsIGZyb20sIHRvKTtcblxuICAgIHJldHVybiBbbGVhdmUs
IGVudGVyXTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBFbnRlckxlYXZlRXZlbnRQbHVn
aW47XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2Rl
X21vZHVsZXMvcmVhY3QtZG9tL2xpYi9FbnRlckxlYXZlRXZlbnRQbHVnaW4uanNcbi8vIG1vZHVs
ZSBpZCA9IDEzMFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipcbiAqIENvcHlyaWdodCAyMDEz
LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAq
IFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNl
IGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0
aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRz
IGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5c
biAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRE9NUHJvcGVydHkgPSByZXF1aXJlKCcu
L0RPTVByb3BlcnR5Jyk7XG5cbnZhciBNVVNUX1VTRV9QUk9QRVJUWSA9IERPTVByb3BlcnR5Lmlu
amVjdGlvbi5NVVNUX1VTRV9QUk9QRVJUWTtcbnZhciBIQVNfQk9PTEVBTl9WQUxVRSA9IERPTVBy
b3BlcnR5LmluamVjdGlvbi5IQVNfQk9PTEVBTl9WQUxVRTtcbnZhciBIQVNfTlVNRVJJQ19WQUxV
RSA9IERPTVByb3BlcnR5LmluamVjdGlvbi5IQVNfTlVNRVJJQ19WQUxVRTtcbnZhciBIQVNfUE9T
SVRJVkVfTlVNRVJJQ19WQUxVRSA9IERPTVByb3BlcnR5LmluamVjdGlvbi5IQVNfUE9TSVRJVkVf
TlVNRVJJQ19WQUxVRTtcbnZhciBIQVNfT1ZFUkxPQURFRF9CT09MRUFOX1ZBTFVFID0gRE9NUHJv
cGVydHkuaW5qZWN0aW9uLkhBU19PVkVSTE9BREVEX0JPT0xFQU5fVkFMVUU7XG5cbnZhciBIVE1M
RE9NUHJvcGVydHlDb25maWcgPSB7XG4gIGlzQ3VzdG9tQXR0cmlidXRlOiBSZWdFeHAucHJvdG90
eXBlLnRlc3QuYmluZChuZXcgUmVnRXhwKCdeKGRhdGF8YXJpYSktWycgKyBET01Qcm9wZXJ0eS5B
VFRSSUJVVEVfTkFNRV9DSEFSICsgJ10qJCcpKSxcbiAgUHJvcGVydGllczoge1xuICAgIC8qKlxu
ICAgICAqIFN0YW5kYXJkIFByb3BlcnRpZXNcbiAgICAgKi9cbiAgICBhY2NlcHQ6IDAsXG4gICAg
YWNjZXB0Q2hhcnNldDogMCxcbiAgICBhY2Nlc3NLZXk6IDAsXG4gICAgYWN0aW9uOiAwLFxuICAg
IGFsbG93RnVsbFNjcmVlbjogSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgYWxsb3dUcmFuc3BhcmVu
Y3k6IDAsXG4gICAgYWx0OiAwLFxuICAgIC8vIHNwZWNpZmllcyB0YXJnZXQgY29udGV4dCBmb3Ig
bGlua3Mgd2l0aCBgcHJlbG9hZGAgdHlwZVxuICAgIGFzOiAwLFxuICAgIGFzeW5jOiBIQVNfQk9P
TEVBTl9WQUxVRSxcbiAgICBhdXRvQ29tcGxldGU6IDAsXG4gICAgLy8gYXV0b0ZvY3VzIGlzIHBv
bHlmaWxsZWQvbm9ybWFsaXplZCBieSBBdXRvRm9jdXNVdGlsc1xuICAgIC8vIGF1dG9Gb2N1czog
SEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgYXV0b1BsYXk6IEhBU19CT09MRUFOX1ZBTFVFLFxuICAg
IGNhcHR1cmU6IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIGNlbGxQYWRkaW5nOiAwLFxuICAgIGNl
bGxTcGFjaW5nOiAwLFxuICAgIGNoYXJTZXQ6IDAsXG4gICAgY2hhbGxlbmdlOiAwLFxuICAgIGNo
ZWNrZWQ6IE1VU1RfVVNFX1BST1BFUlRZIHwgSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgY2l0ZTog
MCxcbiAgICBjbGFzc0lEOiAwLFxuICAgIGNsYXNzTmFtZTogMCxcbiAgICBjb2xzOiBIQVNfUE9T
SVRJVkVfTlVNRVJJQ19WQUxVRSxcbiAgICBjb2xTcGFuOiAwLFxuICAgIGNvbnRlbnQ6IDAsXG4g
ICAgY29udGVudEVkaXRhYmxlOiAwLFxuICAgIGNvbnRleHRNZW51OiAwLFxuICAgIGNvbnRyb2xz
OiBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBjb29yZHM6IDAsXG4gICAgY3Jvc3NPcmlnaW46IDAs
XG4gICAgZGF0YTogMCwgLy8gRm9yIGA8b2JqZWN0IC8+YCBhY3RzIGFzIGBzcmNgLlxuICAgIGRh
dGVUaW1lOiAwLFxuICAgICdkZWZhdWx0JzogSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgZGVmZXI6
IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIGRpcjogMCxcbiAgICBkaXNhYmxlZDogSEFTX0JPT0xF
QU5fVkFMVUUsXG4gICAgZG93bmxvYWQ6IEhBU19PVkVSTE9BREVEX0JPT0xFQU5fVkFMVUUsXG4g
ICAgZHJhZ2dhYmxlOiAwLFxuICAgIGVuY1R5cGU6IDAsXG4gICAgZm9ybTogMCxcbiAgICBmb3Jt
QWN0aW9uOiAwLFxuICAgIGZvcm1FbmNUeXBlOiAwLFxuICAgIGZvcm1NZXRob2Q6IDAsXG4gICAg
Zm9ybU5vVmFsaWRhdGU6IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIGZvcm1UYXJnZXQ6IDAsXG4g
ICAgZnJhbWVCb3JkZXI6IDAsXG4gICAgaGVhZGVyczogMCxcbiAgICBoZWlnaHQ6IDAsXG4gICAg
aGlkZGVuOiBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBoaWdoOiAwLFxuICAgIGhyZWY6IDAsXG4g
ICAgaHJlZkxhbmc6IDAsXG4gICAgaHRtbEZvcjogMCxcbiAgICBodHRwRXF1aXY6IDAsXG4gICAg
aWNvbjogMCxcbiAgICBpZDogMCxcbiAgICBpbnB1dE1vZGU6IDAsXG4gICAgaW50ZWdyaXR5OiAw
LFxuICAgIGlzOiAwLFxuICAgIGtleVBhcmFtczogMCxcbiAgICBrZXlUeXBlOiAwLFxuICAgIGtp
bmQ6IDAsXG4gICAgbGFiZWw6IDAsXG4gICAgbGFuZzogMCxcbiAgICBsaXN0OiAwLFxuICAgIGxv
b3A6IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIGxvdzogMCxcbiAgICBtYW5pZmVzdDogMCxcbiAg
ICBtYXJnaW5IZWlnaHQ6IDAsXG4gICAgbWFyZ2luV2lkdGg6IDAsXG4gICAgbWF4OiAwLFxuICAg
IG1heExlbmd0aDogMCxcbiAgICBtZWRpYTogMCxcbiAgICBtZWRpYUdyb3VwOiAwLFxuICAgIG1l
dGhvZDogMCxcbiAgICBtaW46IDAsXG4gICAgbWluTGVuZ3RoOiAwLFxuICAgIC8vIENhdXRpb247
IGBvcHRpb24uc2VsZWN0ZWRgIGlzIG5vdCB1cGRhdGVkIGlmIGBzZWxlY3QubXVsdGlwbGVgIGlz
XG4gICAgLy8gZGlzYWJsZWQgd2l0aCBgcmVtb3ZlQXR0cmlidXRlYC5cbiAgICBtdWx0aXBsZTog
TVVTVF9VU0VfUFJPUEVSVFkgfCBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBtdXRlZDogTVVTVF9V
U0VfUFJPUEVSVFkgfCBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBuYW1lOiAwLFxuICAgIG5vbmNl
OiAwLFxuICAgIG5vVmFsaWRhdGU6IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIG9wZW46IEhBU19C
T09MRUFOX1ZBTFVFLFxuICAgIG9wdGltdW06IDAsXG4gICAgcGF0dGVybjogMCxcbiAgICBwbGFj
ZWhvbGRlcjogMCxcbiAgICBwbGF5c0lubGluZTogSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgcG9z
dGVyOiAwLFxuICAgIHByZWxvYWQ6IDAsXG4gICAgcHJvZmlsZTogMCxcbiAgICByYWRpb0dyb3Vw
OiAwLFxuICAgIHJlYWRPbmx5OiBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICByZWZlcnJlclBvbGlj
eTogMCxcbiAgICByZWw6IDAsXG4gICAgcmVxdWlyZWQ6IEhBU19CT09MRUFOX1ZBTFVFLFxuICAg
IHJldmVyc2VkOiBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICByb2xlOiAwLFxuICAgIHJvd3M6IEhB
U19QT1NJVElWRV9OVU1FUklDX1ZBTFVFLFxuICAgIHJvd1NwYW46IEhBU19OVU1FUklDX1ZBTFVF
LFxuICAgIHNhbmRib3g6IDAsXG4gICAgc2NvcGU6IDAsXG4gICAgc2NvcGVkOiBIQVNfQk9PTEVB
Tl9WQUxVRSxcbiAgICBzY3JvbGxpbmc6IDAsXG4gICAgc2VhbWxlc3M6IEhBU19CT09MRUFOX1ZB
TFVFLFxuICAgIHNlbGVjdGVkOiBNVVNUX1VTRV9QUk9QRVJUWSB8IEhBU19CT09MRUFOX1ZBTFVF
LFxuICAgIHNoYXBlOiAwLFxuICAgIHNpemU6IEhBU19QT1NJVElWRV9OVU1FUklDX1ZBTFVFLFxu
ICAgIHNpemVzOiAwLFxuICAgIHNwYW46IEhBU19QT1NJVElWRV9OVU1FUklDX1ZBTFVFLFxuICAg
IHNwZWxsQ2hlY2s6IDAsXG4gICAgc3JjOiAwLFxuICAgIHNyY0RvYzogMCxcbiAgICBzcmNMYW5n
OiAwLFxuICAgIHNyY1NldDogMCxcbiAgICBzdGFydDogSEFTX05VTUVSSUNfVkFMVUUsXG4gICAg
c3RlcDogMCxcbiAgICBzdHlsZTogMCxcbiAgICBzdW1tYXJ5OiAwLFxuICAgIHRhYkluZGV4OiAw
LFxuICAgIHRhcmdldDogMCxcbiAgICB0aXRsZTogMCxcbiAgICAvLyBTZXR0aW5nIC50eXBlIHRo
cm93cyBvbiBub24tPGlucHV0PiB0YWdzXG4gICAgdHlwZTogMCxcbiAgICB1c2VNYXA6IDAsXG4g
ICAgdmFsdWU6IDAsXG4gICAgd2lkdGg6IDAsXG4gICAgd21vZGU6IDAsXG4gICAgd3JhcDogMCxc
blxuICAgIC8qKlxuICAgICAqIFJERmEgUHJvcGVydGllc1xuICAgICAqL1xuICAgIGFib3V0OiAw
LFxuICAgIGRhdGF0eXBlOiAwLFxuICAgIGlubGlzdDogMCxcbiAgICBwcmVmaXg6IDAsXG4gICAg
Ly8gcHJvcGVydHkgaXMgYWxzbyBzdXBwb3J0ZWQgZm9yIE9wZW5HcmFwaCBpbiBtZXRhIHRhZ3Mu
XG4gICAgcHJvcGVydHk6IDAsXG4gICAgcmVzb3VyY2U6IDAsXG4gICAgJ3R5cGVvZic6IDAsXG4g
ICAgdm9jYWI6IDAsXG5cbiAgICAvKipcbiAgICAgKiBOb24tc3RhbmRhcmQgUHJvcGVydGllc1xu
ICAgICAqL1xuICAgIC8vIGF1dG9DYXBpdGFsaXplIGFuZCBhdXRvQ29ycmVjdCBhcmUgc3VwcG9y
dGVkIGluIE1vYmlsZSBTYWZhcmkgZm9yXG4gICAgLy8ga2V5Ym9hcmQgaGludHMuXG4gICAgYXV0
b0NhcGl0YWxpemU6IDAsXG4gICAgYXV0b0NvcnJlY3Q6IDAsXG4gICAgLy8gYXV0b1NhdmUgYWxs
b3dzIFdlYktpdC9CbGluayB0byBwZXJzaXN0IHZhbHVlcyBvZiBpbnB1dCBmaWVsZHMgb24gcGFn
ZSByZWxvYWRzXG4gICAgYXV0b1NhdmU6IDAsXG4gICAgLy8gY29sb3IgaXMgZm9yIFNhZmFyaSBt
YXNrLWljb24gbGlua1xuICAgIGNvbG9yOiAwLFxuICAgIC8vIGl0ZW1Qcm9wLCBpdGVtU2NvcGUs
IGl0ZW1UeXBlIGFyZSBmb3JcbiAgICAvLyBNaWNyb2RhdGEgc3VwcG9ydC4gU2VlIGh0dHA6Ly9z
Y2hlbWEub3JnL2RvY3MvZ3MuaHRtbFxuICAgIGl0ZW1Qcm9wOiAwLFxuICAgIGl0ZW1TY29wZTog
SEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgaXRlbVR5cGU6IDAsXG4gICAgLy8gaXRlbUlEIGFuZCBp
dGVtUmVmIGFyZSBmb3IgTWljcm9kYXRhIHN1cHBvcnQgYXMgd2VsbCBidXRcbiAgICAvLyBvbmx5
IHNwZWNpZmllZCBpbiB0aGUgV0hBVFdHIHNwZWMgZG9jdW1lbnQuIFNlZVxuICAgIC8vIGh0dHBz
Oi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL21pY3JvZGF0YS5odG1sI21pY3JvZGF0
YS1kb20tYXBpXG4gICAgaXRlbUlEOiAwLFxuICAgIGl0ZW1SZWY6IDAsXG4gICAgLy8gcmVzdWx0
cyBzaG93IGxvb2tpbmcgZ2xhc3MgaWNvbiBhbmQgcmVjZW50IHNlYXJjaGVzIG9uIGlucHV0XG4g
ICAgLy8gc2VhcmNoIGZpZWxkcyBpbiBXZWJLaXQvQmxpbmtcbiAgICByZXN1bHRzOiAwLFxuICAg
IC8vIElFLW9ubHkgYXR0cmlidXRlIHRoYXQgc3BlY2lmaWVzIHNlY3VyaXR5IHJlc3RyaWN0aW9u
cyBvbiBhbiBpZnJhbWVcbiAgICAvLyBhcyBhbiBhbHRlcm5hdGl2ZSB0byB0aGUgc2FuZGJveCBh
dHRyaWJ1dGUgb24gSUU8MTBcbiAgICBzZWN1cml0eTogMCxcbiAgICAvLyBJRS1vbmx5IGF0dHJp
YnV0ZSB0aGF0IGNvbnRyb2xzIGZvY3VzIGJlaGF2aW9yXG4gICAgdW5zZWxlY3RhYmxlOiAwXG4g
IH0sXG4gIERPTUF0dHJpYnV0ZU5hbWVzOiB7XG4gICAgYWNjZXB0Q2hhcnNldDogJ2FjY2VwdC1j
aGFyc2V0JyxcbiAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgaHRtbEZvcjogJ2ZvcicsXG4g
ICAgaHR0cEVxdWl2OiAnaHR0cC1lcXVpdidcbiAgfSxcbiAgRE9NUHJvcGVydHlOYW1lczoge30s
XG4gIERPTU11dGF0aW9uTWV0aG9kczoge1xuICAgIHZhbHVlOiBmdW5jdGlvbiAobm9kZSwgdmFs
dWUpIHtcbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBub2RlLnJl
bW92ZUF0dHJpYnV0ZSgndmFsdWUnKTtcbiAgICAgIH1cblxuICAgICAgLy8gTnVtYmVyIGlucHV0
cyBnZXQgc3BlY2lhbCB0cmVhdG1lbnQgZHVlIHRvIHNvbWUgZWRnZSBjYXNlcyBpblxuICAgICAg
Ly8gQ2hyb21lLiBMZXQgZXZlcnl0aGluZyBlbHNlIGFzc2lnbiB0aGUgdmFsdWUgYXR0cmlidXRl
IGFzIG5vcm1hbC5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9p
c3N1ZXMvNzI1MyNpc3N1ZWNvbW1lbnQtMjM2MDc0MzI2XG4gICAgICBpZiAobm9kZS50eXBlICE9
PSAnbnVtYmVyJyB8fCBub2RlLmhhc0F0dHJpYnV0ZSgndmFsdWUnKSA9PT0gZmFsc2UpIHtcbiAg
ICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgJycgKyB2YWx1ZSk7XG4gICAgICB9IGVs
c2UgaWYgKG5vZGUudmFsaWRpdHkgJiYgIW5vZGUudmFsaWRpdHkuYmFkSW5wdXQgJiYgbm9kZS5v
d25lckRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IG5vZGUpIHtcbiAgICAgICAgLy8gRG9uJ3Qg
YXNzaWduIGFuIGF0dHJpYnV0ZSBpZiB2YWxpZGF0aW9uIHJlcG9ydHMgYmFkXG4gICAgICAgIC8v
IGlucHV0LiBDaHJvbWUgd2lsbCBjbGVhciB0aGUgdmFsdWUuIEFkZGl0aW9uYWxseSwgZG9uJ3Rc
biAgICAgICAgLy8gb3BlcmF0ZSBvbiBpbnB1dHMgdGhhdCBoYXZlIGZvY3VzLCBvdGhlcndpc2Ug
Q2hyb21lIG1pZ2h0XG4gICAgICAgIC8vIHN0cmlwIG9mZiB0cmFpbGluZyBkZWNpbWFsIHBsYWNl
cyBhbmQgY2F1c2UgdGhlIHVzZXInc1xuICAgICAgICAvLyBjdXJzb3IgcG9zaXRpb24gdG8ganVt
cCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBpbnB1dC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8g
SW4gUmVhY3RET01JbnB1dCwgd2UgaGF2ZSBhbiBvbkJsdXIgZXZlbnQgdGhhdCB3aWxsIHRyaWdn
ZXJcbiAgICAgICAgLy8gdGhpcyBmdW5jdGlvbiBhZ2FpbiB3aGVuIGZvY3VzIGlzIGxvc3QuXG4g
ICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCd2YWx1ZScsICcnICsgdmFsdWUpO1xuICAgICAgfVxu
ICAgIH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBIVE1MRE9NUHJvcGVydHlDb25maWc7
XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21v
ZHVsZXMvcmVhY3QtZG9tL2xpYi9IVE1MRE9NUHJvcGVydHlDb25maWcuanNcbi8vIG1vZHVsZSBp
ZCA9IDEzMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXBy
ZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRo
aXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZv
dW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlz
IHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNh
biBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAq
XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRE9NQ2hpbGRyZW5PcGVyYXRpb25zID0gcmVx
dWlyZSgnLi9ET01DaGlsZHJlbk9wZXJhdGlvbnMnKTtcbnZhciBSZWFjdERPTUlET3BlcmF0aW9u
cyA9IHJlcXVpcmUoJy4vUmVhY3RET01JRE9wZXJhdGlvbnMnKTtcblxuLyoqXG4gKiBBYnN0cmFj
dHMgYXdheSBhbGwgZnVuY3Rpb25hbGl0eSBvZiB0aGUgcmVjb25jaWxlciB0aGF0IHJlcXVpcmVz
IGtub3dsZWRnZSBvZlxuICogdGhlIGJyb3dzZXIgY29udGV4dC4gVE9ETzogVGhlc2UgY2FsbGVy
cyBzaG91bGQgYmUgcmVmYWN0b3JlZCB0byBhdm9pZCB0aGVcbiAqIG5lZWQgZm9yIHRoaXMgaW5q
ZWN0aW9uLlxuICovXG52YXIgUmVhY3RDb21wb25lbnRCcm93c2VyRW52aXJvbm1lbnQgPSB7XG4g
IHByb2Nlc3NDaGlsZHJlblVwZGF0ZXM6IFJlYWN0RE9NSURPcGVyYXRpb25zLmRhbmdlcm91c2x5
UHJvY2Vzc0NoaWxkcmVuVXBkYXRlcyxcblxuICByZXBsYWNlTm9kZVdpdGhNYXJrdXA6IERPTUNo
aWxkcmVuT3BlcmF0aW9ucy5kYW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0aE1hcmt1cFxufTtcblxu
bW9kdWxlLmV4cG9ydHMgPSBSZWFjdENvbXBvbmVudEJyb3dzZXJFbnZpcm9ubWVudDtcblxuXG4v
Ly8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9y
ZWFjdC1kb20vbGliL1JlYWN0Q29tcG9uZW50QnJvd3NlckVudmlyb25tZW50LmpzXG4vLyBtb2R1
bGUgaWQgPSAxMzJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAx
My1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4g
KiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5z
ZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2Yg
dGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0
cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3Rvcnku
XG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9wcm9kSW52YXJpYW50ID0gcmVxdWly
ZSgnLi9yZWFjdFByb2RJbnZhcmlhbnQnKTtcblxudmFyIERPTUxhenlUcmVlID0gcmVxdWlyZSgn
Li9ET01MYXp5VHJlZScpO1xudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZSgnZmJq
cy9saWIvRXhlY3V0aW9uRW52aXJvbm1lbnQnKTtcblxudmFyIGNyZWF0ZU5vZGVzRnJvbU1hcmt1
cCA9IHJlcXVpcmUoJ2ZianMvbGliL2NyZWF0ZU5vZGVzRnJvbU1hcmt1cCcpO1xudmFyIGVtcHR5
RnVuY3Rpb24gPSByZXF1aXJlKCdmYmpzL2xpYi9lbXB0eUZ1bmN0aW9uJyk7XG52YXIgaW52YXJp
YW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG5cbnZhciBEYW5nZXIgPSB7XG4g
IC8qKlxuICAgKiBSZXBsYWNlcyBhIG5vZGUgd2l0aCBhIHN0cmluZyBvZiBtYXJrdXAgYXQgaXRz
IGN1cnJlbnQgcG9zaXRpb24gd2l0aGluIGl0c1xuICAgKiBwYXJlbnQuIFRoZSBtYXJrdXAgbXVz
dCByZW5kZXIgaW50byBhIHNpbmdsZSByb290IG5vZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7RE9N
RWxlbWVudH0gb2xkQ2hpbGQgQ2hpbGQgbm9kZSB0byByZXBsYWNlLlxuICAgKiBAcGFyYW0ge3N0
cmluZ30gbWFya3VwIE1hcmt1cCB0byByZW5kZXIgaW4gcGxhY2Ugb2YgdGhlIGNoaWxkIG5vZGUu
XG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJr
dXA6IGZ1bmN0aW9uIChvbGRDaGlsZCwgbWFya3VwKSB7XG4gICAgIUV4ZWN1dGlvbkVudmlyb25t
ZW50LmNhblVzZURPTSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBp
bnZhcmlhbnQoZmFsc2UsICdkYW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0aE1hcmt1cCguLi4pOiBD
YW5ub3QgcmVuZGVyIG1hcmt1cCBpbiBhIHdvcmtlciB0aHJlYWQuIE1ha2Ugc3VyZSBgd2luZG93
YCBhbmQgYGRvY3VtZW50YCBhcmUgYXZhaWxhYmxlIGdsb2JhbGx5IGJlZm9yZSByZXF1aXJpbmcg
UmVhY3Qgd2hlbiB1bml0IHRlc3Rpbmcgb3IgdXNlIFJlYWN0RE9NU2VydmVyLnJlbmRlclRvU3Ry
aW5nKCkgZm9yIHNlcnZlciByZW5kZXJpbmcuJykgOiBfcHJvZEludmFyaWFudCgnNTYnKSA6IHZv
aWQgMDtcbiAgICAhbWFya3VwID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9u
JyA/IGludmFyaWFudChmYWxzZSwgJ2Rhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwKC4u
Lik6IE1pc3NpbmcgbWFya3VwLicpIDogX3Byb2RJbnZhcmlhbnQoJzU3JykgOiB2b2lkIDA7XG4g
ICAgIShvbGRDaGlsZC5ub2RlTmFtZSAhPT0gJ0hUTUwnKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5W
ICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdkYW5nZXJvdXNseVJlcGxhY2VO
b2RlV2l0aE1hcmt1cCguLi4pOiBDYW5ub3QgcmVwbGFjZSBtYXJrdXAgb2YgdGhlIDxodG1sPiBu
b2RlLiBUaGlzIGlzIGJlY2F1c2UgYnJvd3NlciBxdWlya3MgbWFrZSB0aGlzIHVucmVsaWFibGUg
YW5kL29yIHNsb3cuIElmIHlvdSB3YW50IHRvIHJlbmRlciB0byB0aGUgcm9vdCB5b3UgbXVzdCB1
c2Ugc2VydmVyIHJlbmRlcmluZy4gU2VlIFJlYWN0RE9NU2VydmVyLnJlbmRlclRvU3RyaW5nKCku
JykgOiBfcHJvZEludmFyaWFudCgnNTgnKSA6IHZvaWQgMDtcblxuICAgIGlmICh0eXBlb2YgbWFy
a3VwID09PSAnc3RyaW5nJykge1xuICAgICAgdmFyIG5ld0NoaWxkID0gY3JlYXRlTm9kZXNGcm9t
TWFya3VwKG1hcmt1cCwgZW1wdHlGdW5jdGlvbilbMF07XG4gICAgICBvbGRDaGlsZC5wYXJlbnRO
b2RlLnJlcGxhY2VDaGlsZChuZXdDaGlsZCwgb2xkQ2hpbGQpO1xuICAgIH0gZWxzZSB7XG4gICAg
ICBET01MYXp5VHJlZS5yZXBsYWNlQ2hpbGRXaXRoVHJlZShvbGRDaGlsZCwgbWFya3VwKTtcbiAg
ICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRGFuZ2VyO1xuXG5cbi8vLy8vLy8vLy8v
Ly8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9s
aWIvRGFuZ2VyLmpzXG4vLyBtb2R1bGUgaWQgPSAxMzNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwi
J3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNl
Ym9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBj
b2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVc
biAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJl
ZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQg
aW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHR5cGVj
aGVja3NcbiAqL1xuXG4vKmVzbGludC1kaXNhYmxlIGZiLXd3dy91bnNhZmUtaHRtbCovXG5cbnZh
ciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoJy4vRXhlY3V0aW9uRW52aXJvbm1lbnQn
KTtcblxudmFyIGNyZWF0ZUFycmF5RnJvbU1peGVkID0gcmVxdWlyZSgnLi9jcmVhdGVBcnJheUZy
b21NaXhlZCcpO1xudmFyIGdldE1hcmt1cFdyYXAgPSByZXF1aXJlKCcuL2dldE1hcmt1cFdyYXAn
KTtcbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKCcuL2ludmFyaWFudCcpO1xuXG4vKipcbiAqIER1
bW15IGNvbnRhaW5lciB1c2VkIHRvIHJlbmRlciBhbGwgbWFya3VwLlxuICovXG52YXIgZHVtbXlO
b2RlID0gRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NID8gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgnZGl2JykgOiBudWxsO1xuXG4vKipcbiAqIFBhdHRlcm4gdXNlZCBieSBgZ2V0Tm9kZU5h
bWVgLlxuICovXG52YXIgbm9kZU5hbWVQYXR0ZXJuID0gL15cXHMqPChcXHcrKS87XG5cbi8qKlxu
ICogRXh0cmFjdHMgdGhlIGBub2RlTmFtZWAgb2YgdGhlIGZpcnN0IGVsZW1lbnQgaW4gYSBzdHJp
bmcgb2YgbWFya3VwLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtYXJrdXAgU3RyaW5nIG9mIG1h
cmt1cC5cbiAqIEByZXR1cm4gez9zdHJpbmd9IE5vZGUgbmFtZSBvZiB0aGUgc3VwcGxpZWQgbWFy
a3VwLlxuICovXG5mdW5jdGlvbiBnZXROb2RlTmFtZShtYXJrdXApIHtcbiAgdmFyIG5vZGVOYW1l
TWF0Y2ggPSBtYXJrdXAubWF0Y2gobm9kZU5hbWVQYXR0ZXJuKTtcbiAgcmV0dXJuIG5vZGVOYW1l
TWF0Y2ggJiYgbm9kZU5hbWVNYXRjaFsxXS50b0xvd2VyQ2FzZSgpO1xufVxuXG4vKipcbiAqIENy
ZWF0ZXMgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgbm9kZXMgcmVuZGVyZWQgZnJvbSB0aGUgc3Vw
cGxpZWQgbWFya3VwLiBUaGVcbiAqIG9wdGlvbmFsbHkgc3VwcGxpZWQgYGhhbmRsZVNjcmlwdGAg
ZnVuY3Rpb24gd2lsbCBiZSBpbnZva2VkIG9uY2UgZm9yIGVhY2hcbiAqIDxzY3JpcHQ+IGVsZW1l
bnQgdGhhdCBpcyByZW5kZXJlZC4gSWYgbm8gYGhhbmRsZVNjcmlwdGAgZnVuY3Rpb24gaXMgc3Vw
cGxpZWQsXG4gKiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGlmIGFueSA8c2NyaXB0PiBlbGVtZW50
cyBhcmUgcmVuZGVyZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1hcmt1cCBBIHN0cmluZyBv
ZiB2YWxpZCBIVE1MIG1hcmt1cC5cbiAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBoYW5kbGVTY3JpcHQg
SW52b2tlZCBvbmNlIGZvciBlYWNoIHJlbmRlcmVkIDxzY3JpcHQ+LlxuICogQHJldHVybiB7YXJy
YXk8RE9NRWxlbWVudHxET01UZXh0Tm9kZT59IEFuIGFycmF5IG9mIHJlbmRlcmVkIG5vZGVzLlxu
ICovXG5mdW5jdGlvbiBjcmVhdGVOb2Rlc0Zyb21NYXJrdXAobWFya3VwLCBoYW5kbGVTY3JpcHQp
IHtcbiAgdmFyIG5vZGUgPSBkdW1teU5vZGU7XG4gICEhIWR1bW15Tm9kZSA/IHByb2Nlc3MuZW52
Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdjcmVhdGVOb2Rl
c0Zyb21NYXJrdXAgZHVtbXkgbm90IGluaXRpYWxpemVkJykgOiBpbnZhcmlhbnQoZmFsc2UpIDog
dm9pZCAwO1xuICB2YXIgbm9kZU5hbWUgPSBnZXROb2RlTmFtZShtYXJrdXApO1xuXG4gIHZhciB3
cmFwID0gbm9kZU5hbWUgJiYgZ2V0TWFya3VwV3JhcChub2RlTmFtZSk7XG4gIGlmICh3cmFwKSB7
XG4gICAgbm9kZS5pbm5lckhUTUwgPSB3cmFwWzFdICsgbWFya3VwICsgd3JhcFsyXTtcblxuICAg
IHZhciB3cmFwRGVwdGggPSB3cmFwWzBdO1xuICAgIHdoaWxlICh3cmFwRGVwdGgtLSkge1xuICAg
ICAgbm9kZSA9IG5vZGUubGFzdENoaWxkO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBub2RlLmlu
bmVySFRNTCA9IG1hcmt1cDtcbiAgfVxuXG4gIHZhciBzY3JpcHRzID0gbm9kZS5nZXRFbGVtZW50
c0J5VGFnTmFtZSgnc2NyaXB0Jyk7XG4gIGlmIChzY3JpcHRzLmxlbmd0aCkge1xuICAgICFoYW5k
bGVTY3JpcHQgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJp
YW50KGZhbHNlLCAnY3JlYXRlTm9kZXNGcm9tTWFya3VwKC4uLik6IFVuZXhwZWN0ZWQgPHNjcmlw
dD4gZWxlbWVudCByZW5kZXJlZC4nKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICAg
Y3JlYXRlQXJyYXlGcm9tTWl4ZWQoc2NyaXB0cykuZm9yRWFjaChoYW5kbGVTY3JpcHQpO1xuICB9
XG5cbiAgdmFyIG5vZGVzID0gQXJyYXkuZnJvbShub2RlLmNoaWxkTm9kZXMpO1xuICB3aGlsZSAo
bm9kZS5sYXN0Q2hpbGQpIHtcbiAgICBub2RlLnJlbW92ZUNoaWxkKG5vZGUubGFzdENoaWxkKTtc
biAgfVxuICByZXR1cm4gbm9kZXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlTm9kZXNG
cm9tTWFya3VwO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8v
IC4vbm9kZV9tb2R1bGVzL2ZianMvbGliL2NyZWF0ZU5vZGVzRnJvbU1hcmt1cC5qc1xuLy8gbW9k
dWxlIGlkID0gMTM0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIid1c2Ugc3RyaWN0JztcblxuLyoq
XG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRl
ciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4g
dGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3Jh
bnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUg
aW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxudmFyIGlu
dmFyaWFudCA9IHJlcXVpcmUoJy4vaW52YXJpYW50Jyk7XG5cbi8qKlxuICogQ29udmVydCBhcnJh
eS1saWtlIG9iamVjdHMgdG8gYXJyYXlzLlxuICpcbiAqIFRoaXMgQVBJIGFzc3VtZXMgdGhlIGNh
bGxlciBrbm93cyB0aGUgY29udGVudHMgb2YgdGhlIGRhdGEgdHlwZS4gRm9yIGxlc3NcbiAqIHdl
bGwgZGVmaW5lZCBpbnB1dHMgdXNlIGNyZWF0ZUFycmF5RnJvbU1peGVkLlxuICpcbiAqIEBwYXJh
bSB7b2JqZWN0fGZ1bmN0aW9ufGZpbGVsaXN0fSBvYmpcbiAqIEByZXR1cm4ge2FycmF5fVxuICov
XG5mdW5jdGlvbiB0b0FycmF5KG9iaikge1xuICB2YXIgbGVuZ3RoID0gb2JqLmxlbmd0aDtcblxu
ICAvLyBTb21lIGJyb3dzZXJzIGJ1aWx0aW4gb2JqZWN0cyBjYW4gcmVwb3J0IHR5cGVvZiAnZnVu
Y3Rpb24nIChlLmcuIE5vZGVMaXN0XG4gIC8vIGluIG9sZCB2ZXJzaW9ucyBvZiBTYWZhcmkpLlxu
ICAhKCFBcnJheS5pc0FycmF5KG9iaikgJiYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnIHx8IHR5
cGVvZiBvYmogPT09ICdmdW5jdGlvbicpKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJv
ZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICd0b0FycmF5OiBBcnJheS1saWtlIG9iamVjdCBl
eHBlY3RlZCcpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcblxuICAhKHR5cGVvZiBsZW5n
dGggPT09ICdudW1iZXInKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicg
PyBpbnZhcmlhbnQoZmFsc2UsICd0b0FycmF5OiBPYmplY3QgbmVlZHMgYSBsZW5ndGggcHJvcGVy
dHknKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG5cbiAgIShsZW5ndGggPT09IDAgfHwg
bGVuZ3RoIC0gMSBpbiBvYmopID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9u
JyA/IGludmFyaWFudChmYWxzZSwgJ3RvQXJyYXk6IE9iamVjdCBzaG91bGQgaGF2ZSBrZXlzIGZv
ciBpbmRpY2VzJykgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuXG4gICEodHlwZW9mIG9i
ai5jYWxsZWUgIT09ICdmdW5jdGlvbicpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9k
dWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ3RvQXJyYXk6IE9iamVjdCBjYW5cXCd0IGJlIGBh
cmd1bWVudHNgLiBVc2UgcmVzdCBwYXJhbXMgJyArICcoZnVuY3Rpb24oLi4uYXJncykge30pIG9y
IEFycmF5LmZyb20oKSBpbnN0ZWFkLicpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcblxu
ICAvLyBPbGQgSUUgZG9lc24ndCBnaXZlIGNvbGxlY3Rpb25zIGFjY2VzcyB0byBoYXNPd25Qcm9w
ZXJ0eS4gQXNzdW1lIGlucHV0c1xuICAvLyB3aXRob3V0IG1ldGhvZCB3aWxsIHRocm93IGR1cmlu
ZyB0aGUgc2xpY2UgY2FsbCBhbmQgc2tpcCBzdHJhaWdodCB0byB0aGVcbiAgLy8gZmFsbGJhY2su
XG4gIGlmIChvYmouaGFzT3duUHJvcGVydHkpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEFy
cmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG9iaik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAg
Ly8gSUUgPCA5IGRvZXMgbm90IHN1cHBvcnQgQXJyYXkjc2xpY2Ugb24gY29sbGVjdGlvbnMgb2Jq
ZWN0c1xuICAgIH1cbiAgfVxuXG4gIC8vIEZhbGwgYmFjayB0byBjb3B5aW5nIGtleSBieSBrZXku
IFRoaXMgYXNzdW1lcyBhbGwga2V5cyBoYXZlIGEgdmFsdWUsXG4gIC8vIHNvIHdpbGwgbm90IHBy
ZXNlcnZlIHNwYXJzZWx5IHBvcHVsYXRlZCBpbnB1dHMuXG4gIHZhciByZXQgPSBBcnJheShsZW5n
dGgpO1xuICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgbGVuZ3RoOyBpaSsrKSB7XG4gICAgcmV0W2lp
XSA9IG9ialtpaV07XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBQZXJmb3JtIGEg
aGV1cmlzdGljIHRlc3QgdG8gZGV0ZXJtaW5lIGlmIGFuIG9iamVjdCBpcyBcImFycmF5LWxpa2Vc
Ii5cbiAqXG4gKiAgIEEgbW9uayBhc2tlZCBKb3NodSwgYSBaZW4gbWFzdGVyLCBcIkhhcyBhIGRv
ZyBCdWRkaGEgbmF0dXJlP1wiXG4gKiAgIEpvc2h1IHJlcGxpZWQ6IFwiTXUuXCJcbiAqXG4gKiBU
aGlzIGZ1bmN0aW9uIGRldGVybWluZXMgaWYgaXRzIGFyZ3VtZW50IGhhcyBcImFycmF5IG5hdHVy
ZVwiOiBpdCByZXR1cm5zXG4gKiB0cnVlIGlmIHRoZSBhcmd1bWVudCBpcyBhbiBhY3R1YWwgYXJy
YXksIGFuIGBhcmd1bWVudHMnIG9iamVjdCwgb3IgYW5cbiAqIEhUTUxDb2xsZWN0aW9uIChlLmcu
IG5vZGUuY2hpbGROb2RlcyBvciBub2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCkpLlxuICpcbiAq
IEl0IHdpbGwgcmV0dXJuIGZhbHNlIGZvciBvdGhlciBhcnJheS1saWtlIG9iamVjdHMgbGlrZSBG
aWxlbGlzdC5cbiAqXG4gKiBAcGFyYW0geyp9IG9ialxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAq
L1xuZnVuY3Rpb24gaGFzQXJyYXlOYXR1cmUob2JqKSB7XG4gIHJldHVybiAoXG4gICAgLy8gbm90
IG51bGwvZmFsc2VcbiAgICAhIW9iaiAmJiAoXG4gICAgLy8gYXJyYXlzIGFyZSBvYmplY3RzLCBO
b2RlTGlzdHMgYXJlIGZ1bmN0aW9ucyBpbiBTYWZhcmlcbiAgICB0eXBlb2Ygb2JqID09ICdvYmpl
Y3QnIHx8IHR5cGVvZiBvYmogPT0gJ2Z1bmN0aW9uJykgJiZcbiAgICAvLyBxdWFja3MgbGlrZSBh
biBhcnJheVxuICAgICdsZW5ndGgnIGluIG9iaiAmJlxuICAgIC8vIG5vdCB3aW5kb3dcbiAgICAh
KCdzZXRJbnRlcnZhbCcgaW4gb2JqKSAmJlxuICAgIC8vIG5vIERPTSBub2RlIHNob3VsZCBiZSBj
b25zaWRlcmVkIGFuIGFycmF5LWxpa2VcbiAgICAvLyBhICdzZWxlY3QnIGVsZW1lbnQgaGFzICds
ZW5ndGgnIGFuZCAnaXRlbScgcHJvcGVydGllcyBvbiBJRThcbiAgICB0eXBlb2Ygb2JqLm5vZGVU
eXBlICE9ICdudW1iZXInICYmIChcbiAgICAvLyBhIHJlYWwgYXJyYXlcbiAgICBBcnJheS5pc0Fy
cmF5KG9iaikgfHxcbiAgICAvLyBhcmd1bWVudHNcbiAgICAnY2FsbGVlJyBpbiBvYmogfHxcbiAg
ICAvLyBIVE1MQ29sbGVjdGlvbi9Ob2RlTGlzdFxuICAgICdpdGVtJyBpbiBvYmopXG4gICk7XG59
XG5cbi8qKlxuICogRW5zdXJlIHRoYXQgdGhlIGFyZ3VtZW50IGlzIGFuIGFycmF5IGJ5IHdyYXBw
aW5nIGl0IGluIGFuIGFycmF5IGlmIGl0IGlzIG5vdC5cbiAqIENyZWF0ZXMgYSBjb3B5IG9mIHRo
ZSBhcmd1bWVudCBpZiBpdCBpcyBhbHJlYWR5IGFuIGFycmF5LlxuICpcbiAqIFRoaXMgaXMgbW9z
dGx5IHVzZWZ1bCBpZGlvbWF0aWNhbGx5OlxuICpcbiAqICAgdmFyIGNyZWF0ZUFycmF5RnJvbU1p
eGVkID0gcmVxdWlyZSgnY3JlYXRlQXJyYXlGcm9tTWl4ZWQnKTtcbiAqXG4gKiAgIGZ1bmN0aW9u
IHRha2VzT25lT3JNb3JlVGhpbmdzKHRoaW5ncykge1xuICogICAgIHRoaW5ncyA9IGNyZWF0ZUFy
cmF5RnJvbU1peGVkKHRoaW5ncyk7XG4gKiAgICAgLi4uXG4gKiAgIH1cbiAqXG4gKiBUaGlzIGFs
bG93cyB5b3UgdG8gdHJlYXQgYHRoaW5ncycgYXMgYW4gYXJyYXksIGJ1dCBhY2NlcHQgc2NhbGFy
cyBpbiB0aGUgQVBJLlxuICpcbiAqIElmIHlvdSBuZWVkIHRvIGNvbnZlcnQgYW4gYXJyYXktbGlr
ZSBvYmplY3QsIGxpa2UgYGFyZ3VtZW50c2AsIGludG8gYW4gYXJyYXlcbiAqIHVzZSB0b0FycmF5
IGluc3RlYWQuXG4gKlxuICogQHBhcmFtIHsqfSBvYmpcbiAqIEByZXR1cm4ge2FycmF5fVxuICov
XG5mdW5jdGlvbiBjcmVhdGVBcnJheUZyb21NaXhlZChvYmopIHtcbiAgaWYgKCFoYXNBcnJheU5h
dHVyZShvYmopKSB7XG4gICAgcmV0dXJuIFtvYmpdO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJy
YXkob2JqKSkge1xuICAgIHJldHVybiBvYmouc2xpY2UoKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1
cm4gdG9BcnJheShvYmopO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQXJyYXlG
cm9tTWl4ZWQ7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8g
Li9ub2RlX21vZHVsZXMvZmJqcy9saWIvY3JlYXRlQXJyYXlGcm9tTWl4ZWQuanNcbi8vIG1vZHVs
ZSBpZCA9IDEzNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG5cbi8qKlxu
ICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmln
aHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIg
dGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRo
ZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50
XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGlu
IHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuLyplc2xpbnQtZGlzYWJsZSBmYi13d3cv
dW5zYWZlLWh0bWwgKi9cblxudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZSgnLi9F
eGVjdXRpb25FbnZpcm9ubWVudCcpO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnLi9pbnZh
cmlhbnQnKTtcblxuLyoqXG4gKiBEdW1teSBjb250YWluZXIgdXNlZCB0byBkZXRlY3Qgd2hpY2gg
d3JhcHMgYXJlIG5lY2Vzc2FyeS5cbiAqL1xudmFyIGR1bW15Tm9kZSA9IEV4ZWN1dGlvbkVudmly
b25tZW50LmNhblVzZURPTSA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpIDogbnVsbDtc
blxuLyoqXG4gKiBTb21lIGJyb3dzZXJzIGNhbm5vdCB1c2UgYGlubmVySFRNTGAgdG8gcmVuZGVy
IGNlcnRhaW4gZWxlbWVudHMgc3RhbmRhbG9uZSxcbiAqIHNvIHdlIHdyYXAgdGhlbSwgcmVuZGVy
IHRoZSB3cmFwcGVkIG5vZGVzLCB0aGVuIGV4dHJhY3QgdGhlIGRlc2lyZWQgbm9kZS5cbiAqXG4g
KiBJbiBJRTgsIGNlcnRhaW4gZWxlbWVudHMgY2Fubm90IHJlbmRlciBhbG9uZSwgc28gd3JhcCBh
bGwgZWxlbWVudHMgKCcqJykuXG4gKi9cblxudmFyIHNob3VsZFdyYXAgPSB7fTtcblxudmFyIHNl
bGVjdFdyYXAgPSBbMSwgJzxzZWxlY3QgbXVsdGlwbGU9XCJ0cnVlXCI+JywgJzwvc2VsZWN0Pidd
O1xudmFyIHRhYmxlV3JhcCA9IFsxLCAnPHRhYmxlPicsICc8L3RhYmxlPiddO1xudmFyIHRyV3Jh
cCA9IFszLCAnPHRhYmxlPjx0Ym9keT48dHI+JywgJzwvdHI+PC90Ym9keT48L3RhYmxlPiddO1xu
XG52YXIgc3ZnV3JhcCA9IFsxLCAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAv
c3ZnXCI+JywgJzwvc3ZnPiddO1xuXG52YXIgbWFya3VwV3JhcCA9IHtcbiAgJyonOiBbMSwgJz88
ZGl2PicsICc8L2Rpdj4nXSxcblxuICAnYXJlYSc6IFsxLCAnPG1hcD4nLCAnPC9tYXA+J10sXG4g
ICdjb2wnOiBbMiwgJzx0YWJsZT48dGJvZHk+PC90Ym9keT48Y29sZ3JvdXA+JywgJzwvY29sZ3Jv
dXA+PC90YWJsZT4nXSxcbiAgJ2xlZ2VuZCc6IFsxLCAnPGZpZWxkc2V0PicsICc8L2ZpZWxkc2V0
PiddLFxuICAncGFyYW0nOiBbMSwgJzxvYmplY3Q+JywgJzwvb2JqZWN0PiddLFxuICAndHInOiBb
MiwgJzx0YWJsZT48dGJvZHk+JywgJzwvdGJvZHk+PC90YWJsZT4nXSxcblxuICAnb3B0Z3JvdXAn
OiBzZWxlY3RXcmFwLFxuICAnb3B0aW9uJzogc2VsZWN0V3JhcCxcblxuICAnY2FwdGlvbic6IHRh
YmxlV3JhcCxcbiAgJ2NvbGdyb3VwJzogdGFibGVXcmFwLFxuICAndGJvZHknOiB0YWJsZVdyYXAs
XG4gICd0Zm9vdCc6IHRhYmxlV3JhcCxcbiAgJ3RoZWFkJzogdGFibGVXcmFwLFxuXG4gICd0ZCc6
IHRyV3JhcCxcbiAgJ3RoJzogdHJXcmFwXG59O1xuXG4vLyBJbml0aWFsaXplIHRoZSBTVkcgZWxl
bWVudHMgc2luY2Ugd2Uga25vdyB0aGV5J2xsIGFsd2F5cyBuZWVkIHRvIGJlIHdyYXBwZWRcbi8v
IGNvbnNpc3RlbnRseS4gSWYgdGhleSBhcmUgY3JlYXRlZCBpbnNpZGUgYSA8ZGl2PiB0aGV5IHdp
bGwgYmUgaW5pdGlhbGl6ZWQgaW5cbi8vIHRoZSB3cm9uZyBuYW1lc3BhY2UgKGFuZCB3aWxsIG5v
dCBkaXNwbGF5KS5cbnZhciBzdmdFbGVtZW50cyA9IFsnY2lyY2xlJywgJ2NsaXBQYXRoJywgJ2Rl
ZnMnLCAnZWxsaXBzZScsICdnJywgJ2ltYWdlJywgJ2xpbmUnLCAnbGluZWFyR3JhZGllbnQnLCAn
bWFzaycsICdwYXRoJywgJ3BhdHRlcm4nLCAncG9seWdvbicsICdwb2x5bGluZScsICdyYWRpYWxH
cmFkaWVudCcsICdyZWN0JywgJ3N0b3AnLCAndGV4dCcsICd0c3BhbiddO1xuc3ZnRWxlbWVudHMu
Zm9yRWFjaChmdW5jdGlvbiAobm9kZU5hbWUpIHtcbiAgbWFya3VwV3JhcFtub2RlTmFtZV0gPSBz
dmdXcmFwO1xuICBzaG91bGRXcmFwW25vZGVOYW1lXSA9IHRydWU7XG59KTtcblxuLyoqXG4gKiBH
ZXRzIHRoZSBtYXJrdXAgd3JhcCBjb25maWd1cmF0aW9uIGZvciB0aGUgc3VwcGxpZWQgYG5vZGVO
YW1lYC5cbiAqXG4gKiBOT1RFOiBUaGlzIGxhemlseSBkZXRlY3RzIHdoaWNoIHdyYXBzIGFyZSBu
ZWNlc3NhcnkgZm9yIHRoZSBjdXJyZW50IGJyb3dzZXIuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9
IG5vZGVOYW1lIExvd2VyY2FzZSBgbm9kZU5hbWVgLlxuICogQHJldHVybiB7P2FycmF5fSBNYXJr
dXAgd3JhcCBjb25maWd1cmF0aW9uLCBpZiBhcHBsaWNhYmxlLlxuICovXG5mdW5jdGlvbiBnZXRN
YXJrdXBXcmFwKG5vZGVOYW1lKSB7XG4gICEhIWR1bW15Tm9kZSA/IHByb2Nlc3MuZW52Lk5PREVf
RU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdNYXJrdXAgd3JhcHBpbmcg
bm9kZSBub3QgaW5pdGlhbGl6ZWQnKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIGlm
ICghbWFya3VwV3JhcC5oYXNPd25Qcm9wZXJ0eShub2RlTmFtZSkpIHtcbiAgICBub2RlTmFtZSA9
ICcqJztcbiAgfVxuICBpZiAoIXNob3VsZFdyYXAuaGFzT3duUHJvcGVydHkobm9kZU5hbWUpKSB7
XG4gICAgaWYgKG5vZGVOYW1lID09PSAnKicpIHtcbiAgICAgIGR1bW15Tm9kZS5pbm5lckhUTUwg
PSAnPGxpbmsgLz4nO1xuICAgIH0gZWxzZSB7XG4gICAgICBkdW1teU5vZGUuaW5uZXJIVE1MID0g
JzwnICsgbm9kZU5hbWUgKyAnPjwvJyArIG5vZGVOYW1lICsgJz4nO1xuICAgIH1cbiAgICBzaG91
bGRXcmFwW25vZGVOYW1lXSA9ICFkdW1teU5vZGUuZmlyc3RDaGlsZDtcbiAgfVxuICByZXR1cm4g
c2hvdWxkV3JhcFtub2RlTmFtZV0gPyBtYXJrdXBXcmFwW25vZGVOYW1lXSA6IG51bGw7XG59XG5c
bm1vZHVsZS5leHBvcnRzID0gZ2V0TWFya3VwV3JhcDtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9c
bi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9nZXRNYXJrdXBX
cmFwLmpzXG4vLyBtb2R1bGUgaWQgPSAxMzZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyoqXG4g
KiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBC
U0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9v
dCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICog
b2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUg
c2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIERPTUNoaWxk
cmVuT3BlcmF0aW9ucyA9IHJlcXVpcmUoJy4vRE9NQ2hpbGRyZW5PcGVyYXRpb25zJyk7XG52YXIg
UmVhY3RET01Db21wb25lbnRUcmVlID0gcmVxdWlyZSgnLi9SZWFjdERPTUNvbXBvbmVudFRyZWUn
KTtcblxuLyoqXG4gKiBPcGVyYXRpb25zIHVzZWQgdG8gcHJvY2VzcyB1cGRhdGVzIHRvIERPTSBu
b2Rlcy5cbiAqL1xudmFyIFJlYWN0RE9NSURPcGVyYXRpb25zID0ge1xuICAvKipcbiAgICogVXBk
YXRlcyBhIGNvbXBvbmVudCdzIGNoaWxkcmVuIGJ5IHByb2Nlc3NpbmcgYSBzZXJpZXMgb2YgdXBk
YXRlcy5cbiAgICpcbiAgICogQHBhcmFtIHthcnJheTxvYmplY3Q+fSB1cGRhdGVzIExpc3Qgb2Yg
dXBkYXRlIGNvbmZpZ3VyYXRpb25zLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGRhbmdlcm91
c2x5UHJvY2Vzc0NoaWxkcmVuVXBkYXRlczogZnVuY3Rpb24gKHBhcmVudEluc3QsIHVwZGF0ZXMp
IHtcbiAgICB2YXIgbm9kZSA9IFJlYWN0RE9NQ29tcG9uZW50VHJlZS5nZXROb2RlRnJvbUluc3Rh
bmNlKHBhcmVudEluc3QpO1xuICAgIERPTUNoaWxkcmVuT3BlcmF0aW9ucy5wcm9jZXNzVXBkYXRl
cyhub2RlLCB1cGRhdGVzKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdERPTUlE
T3BlcmF0aW9ucztcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4v
LyAuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RE9NSURPcGVyYXRpb25zLmpzXG4v
LyBtb2R1bGUgaWQgPSAxMzdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyoqXG4gKiBDb3B5cmln
aHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5c
biAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUg
bGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rv
cnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50
IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJl
Y3RvcnkuXG4gKlxuICovXG5cbi8qIGdsb2JhbCBoYXNPd25Qcm9wZXJ0eTp0cnVlICovXG5cbid1
c2Ugc3RyaWN0JztcblxudmFyIF9wcm9kSW52YXJpYW50ID0gcmVxdWlyZSgnLi9yZWFjdFByb2RJ
bnZhcmlhbnQnKSxcbiAgICBfYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xuXG52
YXIgQXV0b0ZvY3VzVXRpbHMgPSByZXF1aXJlKCcuL0F1dG9Gb2N1c1V0aWxzJyk7XG52YXIgQ1NT
UHJvcGVydHlPcGVyYXRpb25zID0gcmVxdWlyZSgnLi9DU1NQcm9wZXJ0eU9wZXJhdGlvbnMnKTtc
bnZhciBET01MYXp5VHJlZSA9IHJlcXVpcmUoJy4vRE9NTGF6eVRyZWUnKTtcbnZhciBET01OYW1l
c3BhY2VzID0gcmVxdWlyZSgnLi9ET01OYW1lc3BhY2VzJyk7XG52YXIgRE9NUHJvcGVydHkgPSBy
ZXF1aXJlKCcuL0RPTVByb3BlcnR5Jyk7XG52YXIgRE9NUHJvcGVydHlPcGVyYXRpb25zID0gcmVx
dWlyZSgnLi9ET01Qcm9wZXJ0eU9wZXJhdGlvbnMnKTtcbnZhciBFdmVudFBsdWdpbkh1YiA9IHJl
cXVpcmUoJy4vRXZlbnRQbHVnaW5IdWInKTtcbnZhciBFdmVudFBsdWdpblJlZ2lzdHJ5ID0gcmVx
dWlyZSgnLi9FdmVudFBsdWdpblJlZ2lzdHJ5Jyk7XG52YXIgUmVhY3RCcm93c2VyRXZlbnRFbWl0
dGVyID0gcmVxdWlyZSgnLi9SZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXInKTtcbnZhciBSZWFjdERP
TUNvbXBvbmVudEZsYWdzID0gcmVxdWlyZSgnLi9SZWFjdERPTUNvbXBvbmVudEZsYWdzJyk7XG52
YXIgUmVhY3RET01Db21wb25lbnRUcmVlID0gcmVxdWlyZSgnLi9SZWFjdERPTUNvbXBvbmVudFRy
ZWUnKTtcbnZhciBSZWFjdERPTUlucHV0ID0gcmVxdWlyZSgnLi9SZWFjdERPTUlucHV0Jyk7XG52
YXIgUmVhY3RET01PcHRpb24gPSByZXF1aXJlKCcuL1JlYWN0RE9NT3B0aW9uJyk7XG52YXIgUmVh
Y3RET01TZWxlY3QgPSByZXF1aXJlKCcuL1JlYWN0RE9NU2VsZWN0Jyk7XG52YXIgUmVhY3RET01U
ZXh0YXJlYSA9IHJlcXVpcmUoJy4vUmVhY3RET01UZXh0YXJlYScpO1xudmFyIFJlYWN0SW5zdHJ1
bWVudGF0aW9uID0gcmVxdWlyZSgnLi9SZWFjdEluc3RydW1lbnRhdGlvbicpO1xudmFyIFJlYWN0
TXVsdGlDaGlsZCA9IHJlcXVpcmUoJy4vUmVhY3RNdWx0aUNoaWxkJyk7XG52YXIgUmVhY3RTZXJ2
ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbiA9IHJlcXVpcmUoJy4vUmVhY3RTZXJ2ZXJSZW5kZXJpbmdU
cmFuc2FjdGlvbicpO1xuXG52YXIgZW1wdHlGdW5jdGlvbiA9IHJlcXVpcmUoJ2ZianMvbGliL2Vt
cHR5RnVuY3Rpb24nKTtcbnZhciBlc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXIgPSByZXF1aXJl
KCcuL2VzY2FwZVRleHRDb250ZW50Rm9yQnJvd3NlcicpO1xudmFyIGludmFyaWFudCA9IHJlcXVp
cmUoJ2ZianMvbGliL2ludmFyaWFudCcpO1xudmFyIGlzRXZlbnRTdXBwb3J0ZWQgPSByZXF1aXJl
KCcuL2lzRXZlbnRTdXBwb3J0ZWQnKTtcbnZhciBzaGFsbG93RXF1YWwgPSByZXF1aXJlKCdmYmpz
L2xpYi9zaGFsbG93RXF1YWwnKTtcbnZhciBpbnB1dFZhbHVlVHJhY2tpbmcgPSByZXF1aXJlKCcu
L2lucHV0VmFsdWVUcmFja2luZycpO1xudmFyIHZhbGlkYXRlRE9NTmVzdGluZyA9IHJlcXVpcmUo
Jy4vdmFsaWRhdGVET01OZXN0aW5nJyk7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoJ2ZianMvbGli
L3dhcm5pbmcnKTtcblxudmFyIEZsYWdzID0gUmVhY3RET01Db21wb25lbnRGbGFncztcbnZhciBk
ZWxldGVMaXN0ZW5lciA9IEV2ZW50UGx1Z2luSHViLmRlbGV0ZUxpc3RlbmVyO1xudmFyIGdldE5v
ZGUgPSBSZWFjdERPTUNvbXBvbmVudFRyZWUuZ2V0Tm9kZUZyb21JbnN0YW5jZTtcbnZhciBsaXN0
ZW5UbyA9IFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5saXN0ZW5UbztcbnZhciByZWdpc3RyYXRp
b25OYW1lTW9kdWxlcyA9IEV2ZW50UGx1Z2luUmVnaXN0cnkucmVnaXN0cmF0aW9uTmFtZU1vZHVs
ZXM7XG5cbi8vIEZvciBxdWlja2x5IG1hdGNoaW5nIGNoaWxkcmVuIHR5cGUsIHRvIHRlc3QgaWYg
Y2FuIGJlIHRyZWF0ZWQgYXMgY29udGVudC5cbnZhciBDT05URU5UX1RZUEVTID0geyBzdHJpbmc6
IHRydWUsIG51bWJlcjogdHJ1ZSB9O1xuXG52YXIgU1RZTEUgPSAnc3R5bGUnO1xudmFyIEhUTUwg
PSAnX19odG1sJztcbnZhciBSRVNFUlZFRF9QUk9QUyA9IHtcbiAgY2hpbGRyZW46IG51bGwsXG4g
IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MOiBudWxsLFxuICBzdXBwcmVzc0NvbnRlbnRFZGl0YWJs
ZVdhcm5pbmc6IG51bGxcbn07XG5cbi8vIE5vZGUgdHlwZSBmb3IgZG9jdW1lbnQgZnJhZ21lbnRz
IChOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpLlxudmFyIERPQ19GUkFHTUVOVF9UWVBFID0g
MTE7XG5cbmZ1bmN0aW9uIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bShpbnRlcm5hbEluc3Rh
bmNlKSB7XG4gIGlmIChpbnRlcm5hbEluc3RhbmNlKSB7XG4gICAgdmFyIG93bmVyID0gaW50ZXJu
YWxJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQuX293bmVyIHx8IG51bGw7XG4gICAgaWYgKG93bmVy
KSB7XG4gICAgICB2YXIgbmFtZSA9IG93bmVyLmdldE5hbWUoKTtcbiAgICAgIGlmIChuYW1lKSB7
XG4gICAgICAgIHJldHVybiAnIFRoaXMgRE9NIG5vZGUgd2FzIHJlbmRlcmVkIGJ5IGAnICsgbmFt
ZSArICdgLic7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rp
b24gZnJpZW5kbHlTdHJpbmdpZnkob2JqKSB7XG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0
Jykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgIHJldHVybiAnWycgKyBv
YmoubWFwKGZyaWVuZGx5U3RyaW5naWZ5KS5qb2luKCcsICcpICsgJ10nO1xuICAgIH0gZWxzZSB7
XG4gICAgICB2YXIgcGFpcnMgPSBbXTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAg
ICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkp
IHtcbiAgICAgICAgICB2YXIga2V5RXNjYXBlZCA9IC9eW2EteiRfXVtcXHckX10qJC9pLnRlc3Qo
a2V5KSA/IGtleSA6IEpTT04uc3RyaW5naWZ5KGtleSk7XG4gICAgICAgICAgcGFpcnMucHVzaChr
ZXlFc2NhcGVkICsgJzogJyArIGZyaWVuZGx5U3RyaW5naWZ5KG9ialtrZXldKSk7XG4gICAgICAg
IH1cbiAgICAgIH1cbiAgICAgIHJldHVybiAneycgKyBwYWlycy5qb2luKCcsICcpICsgJ30nO1xu
ICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqID09PSAnc3RyaW5nJykge1xuICAgIHJldHVy
biBKU09OLnN0cmluZ2lmeShvYmopO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBvYmogPT09ICdmdW5j
dGlvbicpIHtcbiAgICByZXR1cm4gJ1tmdW5jdGlvbiBvYmplY3RdJztcbiAgfVxuICAvLyBEaWZm
ZXJzIGZyb20gSlNPTi5zdHJpbmdpZnkgaW4gdGhhdCB1bmRlZmluZWQgYmVjYXVzZSB1bmRlZmlu
ZWQgYW5kIHRoYXRcbiAgLy8gaW5mIGFuZCBuYW4gZG9uJ3QgYmVjb21lIG51bGxcbiAgcmV0dXJu
IFN0cmluZyhvYmopO1xufVxuXG52YXIgc3R5bGVNdXRhdGlvbldhcm5pbmcgPSB7fTtcblxuZnVu
Y3Rpb24gY2hlY2tBbmRXYXJuRm9yTXV0YXRlZFN0eWxlKHN0eWxlMSwgc3R5bGUyLCBjb21wb25l
bnQpIHtcbiAgaWYgKHN0eWxlMSA9PSBudWxsIHx8IHN0eWxlMiA9PSBudWxsKSB7XG4gICAgcmV0
dXJuO1xuICB9XG4gIGlmIChzaGFsbG93RXF1YWwoc3R5bGUxLCBzdHlsZTIpKSB7XG4gICAgcmV0
dXJuO1xuICB9XG5cbiAgdmFyIGNvbXBvbmVudE5hbWUgPSBjb21wb25lbnQuX3RhZztcbiAgdmFy
IG93bmVyID0gY29tcG9uZW50Ll9jdXJyZW50RWxlbWVudC5fb3duZXI7XG4gIHZhciBvd25lck5h
bWU7XG4gIGlmIChvd25lcikge1xuICAgIG93bmVyTmFtZSA9IG93bmVyLmdldE5hbWUoKTtcbiAg
fVxuXG4gIHZhciBoYXNoID0gb3duZXJOYW1lICsgJ3wnICsgY29tcG9uZW50TmFtZTtcblxuICBp
ZiAoc3R5bGVNdXRhdGlvbldhcm5pbmcuaGFzT3duUHJvcGVydHkoaGFzaCkpIHtcbiAgICByZXR1
cm47XG4gIH1cblxuICBzdHlsZU11dGF0aW9uV2FybmluZ1toYXNoXSA9IHRydWU7XG5cbiAgcHJv
Y2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdgJXNg
IHdhcyBwYXNzZWQgYSBzdHlsZSBvYmplY3QgdGhhdCBoYXMgcHJldmlvdXNseSBiZWVuIG11dGF0
ZWQuICcgKyAnTXV0YXRpbmcgYHN0eWxlYCBpcyBkZXByZWNhdGVkLiBDb25zaWRlciBjbG9uaW5n
IGl0IGJlZm9yZWhhbmQuIENoZWNrICcgKyAndGhlIGByZW5kZXJgICVzLiBQcmV2aW91cyBzdHls
ZTogJXMuIE11dGF0ZWQgc3R5bGU6ICVzLicsIGNvbXBvbmVudE5hbWUsIG93bmVyID8gJ29mIGAn
ICsgb3duZXJOYW1lICsgJ2AnIDogJ3VzaW5nIDwnICsgY29tcG9uZW50TmFtZSArICc+JywgZnJp
ZW5kbHlTdHJpbmdpZnkoc3R5bGUxKSwgZnJpZW5kbHlTdHJpbmdpZnkoc3R5bGUyKSkgOiB2b2lk
IDA7XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGNvbXBvbmVudFxuICogQHBhcmFtIHs/
b2JqZWN0fSBwcm9wc1xuICovXG5mdW5jdGlvbiBhc3NlcnRWYWxpZFByb3BzKGNvbXBvbmVudCwg
cHJvcHMpIHtcbiAgaWYgKCFwcm9wcykge1xuICAgIHJldHVybjtcbiAgfVxuICAvLyBOb3RlIHRo
ZSB1c2Ugb2YgYD09YCB3aGljaCBjaGVja3MgZm9yIG51bGwgb3IgdW5kZWZpbmVkLlxuICBpZiAo
dm9pZEVsZW1lbnRUYWdzW2NvbXBvbmVudC5fdGFnXSkge1xuICAgICEocHJvcHMuY2hpbGRyZW4g
PT0gbnVsbCAmJiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCA9PSBudWxsKSA/IHByb2Nl
c3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICclcyBp
cyBhIHZvaWQgZWxlbWVudCB0YWcgYW5kIG11c3QgbmVpdGhlciBoYXZlIGBjaGlsZHJlbmAgbm9y
IHVzZSBgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLiVzJywgY29tcG9uZW50Ll90YWcsIGNvbXBv
bmVudC5fY3VycmVudEVsZW1lbnQuX293bmVyID8gJyBDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBv
ZiAnICsgY29tcG9uZW50Ll9jdXJyZW50RWxlbWVudC5fb3duZXIuZ2V0TmFtZSgpICsgJy4nIDog
JycpIDogX3Byb2RJbnZhcmlhbnQoJzEzNycsIGNvbXBvbmVudC5fdGFnLCBjb21wb25lbnQuX2N1
cnJlbnRFbGVtZW50Ll9vd25lciA/ICcgQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgJyArIGNv
bXBvbmVudC5fY3VycmVudEVsZW1lbnQuX293bmVyLmdldE5hbWUoKSArICcuJyA6ICcnKSA6IHZv
aWQgMDtcbiAgfVxuICBpZiAocHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgIT0gbnVsbCkg
e1xuICAgICEocHJvcHMuY2hpbGRyZW4gPT0gbnVsbCkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAh
PT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnQ2FuIG9ubHkgc2V0IG9uZSBvZiBg
Y2hpbGRyZW5gIG9yIGBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTGAuJykgOiBfcHJvZElu
dmFyaWFudCgnNjAnKSA6IHZvaWQgMDtcbiAgICAhKHR5cGVvZiBwcm9wcy5kYW5nZXJvdXNseVNl
dElubmVySFRNTCA9PT0gJ29iamVjdCcgJiYgSFRNTCBpbiBwcm9wcy5kYW5nZXJvdXNseVNldElu
bmVySFRNTCkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJp
YW50KGZhbHNlLCAnYHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYCBtdXN0IGJlIGluIHRo
ZSBmb3JtIGB7X19odG1sOiAuLi59YC4gUGxlYXNlIHZpc2l0IGh0dHBzOi8vZmIubWUvcmVhY3Qt
aW52YXJpYW50LWRhbmdlcm91c2x5LXNldC1pbm5lci1odG1sIGZvciBtb3JlIGluZm9ybWF0aW9u
LicpIDogX3Byb2RJbnZhcmlhbnQoJzYxJykgOiB2b2lkIDA7XG4gIH1cbiAgaWYgKHByb2Nlc3Mu
ZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VO
ViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhwcm9wcy5pbm5lckhUTUwgPT0gbnVsbCwgJ0Rp
cmVjdGx5IHNldHRpbmcgcHJvcGVydHkgYGlubmVySFRNTGAgaXMgbm90IHBlcm1pdHRlZC4gJyAr
ICdGb3IgbW9yZSBpbmZvcm1hdGlvbiwgbG9va3VwIGRvY3VtZW50YXRpb24gb24gYGRhbmdlcm91
c2x5U2V0SW5uZXJIVE1MYC4nKSA6IHZvaWQgMDtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAh
PT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhwcm9wcy5zdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdh
cm5pbmcgfHwgIXByb3BzLmNvbnRlbnRFZGl0YWJsZSB8fCBwcm9wcy5jaGlsZHJlbiA9PSBudWxs
LCAnQSBjb21wb25lbnQgaXMgYGNvbnRlbnRFZGl0YWJsZWAgYW5kIGNvbnRhaW5zIGBjaGlsZHJl
bmAgbWFuYWdlZCBieSAnICsgJ1JlYWN0LiBJdCBpcyBub3cgeW91ciByZXNwb25zaWJpbGl0eSB0
byBndWFyYW50ZWUgdGhhdCBub25lIG9mICcgKyAndGhvc2Ugbm9kZXMgYXJlIHVuZXhwZWN0ZWRs
eSBtb2RpZmllZCBvciBkdXBsaWNhdGVkLiBUaGlzIGlzICcgKyAncHJvYmFibHkgbm90IGludGVu
dGlvbmFsLicpIDogdm9pZCAwO1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVj
dGlvbicgPyB3YXJuaW5nKHByb3BzLm9uRm9jdXNJbiA9PSBudWxsICYmIHByb3BzLm9uRm9jdXNP
dXQgPT0gbnVsbCwgJ1JlYWN0IHVzZXMgb25Gb2N1cyBhbmQgb25CbHVyIGluc3RlYWQgb2Ygb25G
b2N1c0luIGFuZCBvbkZvY3VzT3V0LiAnICsgJ0FsbCBSZWFjdCBldmVudHMgYXJlIG5vcm1hbGl6
ZWQgdG8gYnViYmxlLCBzbyBvbkZvY3VzSW4gYW5kIG9uRm9jdXNPdXQgJyArICdhcmUgbm90IG5l
ZWRlZC9zdXBwb3J0ZWQgYnkgUmVhY3QuJykgOiB2b2lkIDA7XG4gIH1cbiAgIShwcm9wcy5zdHls
ZSA9PSBudWxsIHx8IHR5cGVvZiBwcm9wcy5zdHlsZSA9PT0gJ29iamVjdCcpID8gcHJvY2Vzcy5l
bnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ1RoZSBgc3R5
bGVgIHByb3AgZXhwZWN0cyBhIG1hcHBpbmcgZnJvbSBzdHlsZSBwcm9wZXJ0aWVzIHRvIHZhbHVl
cywgbm90IGEgc3RyaW5nLiBGb3IgZXhhbXBsZSwgc3R5bGU9e3ttYXJnaW5SaWdodDogc3BhY2lu
ZyArIFxcJ2VtXFwnfX0gd2hlbiB1c2luZyBKU1guJXMnLCBnZXREZWNsYXJhdGlvbkVycm9yQWRk
ZW5kdW0oY29tcG9uZW50KSkgOiBfcHJvZEludmFyaWFudCgnNjInLCBnZXREZWNsYXJhdGlvbkVy
cm9yQWRkZW5kdW0oY29tcG9uZW50KSkgOiB2b2lkIDA7XG59XG5cbmZ1bmN0aW9uIGVucXVldWVQ
dXRMaXN0ZW5lcihpbnN0LCByZWdpc3RyYXRpb25OYW1lLCBsaXN0ZW5lciwgdHJhbnNhY3Rpb24p
IHtcbiAgaWYgKHRyYW5zYWN0aW9uIGluc3RhbmNlb2YgUmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFu
c2FjdGlvbikge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYg
IT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIElFOCBoYXMgbm8gQVBJIGZvciBldmVudCBjYXB0
dXJpbmcgYW5kIHRoZSBgb25TY3JvbGxgIGV2ZW50IGRvZXNuJ3RcbiAgICAvLyBidWJibGUuXG4g
ICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcocmVnaXN0
cmF0aW9uTmFtZSAhPT0gJ29uU2Nyb2xsJyB8fCBpc0V2ZW50U3VwcG9ydGVkKCdzY3JvbGwnLCB0
cnVlKSwgXCJUaGlzIGJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IHRoZSBgb25TY3JvbGxgIGV2ZW50
XCIpIDogdm9pZCAwO1xuICB9XG4gIHZhciBjb250YWluZXJJbmZvID0gaW5zdC5faG9zdENvbnRh
aW5lckluZm87XG4gIHZhciBpc0RvY3VtZW50RnJhZ21lbnQgPSBjb250YWluZXJJbmZvLl9ub2Rl
ICYmIGNvbnRhaW5lckluZm8uX25vZGUubm9kZVR5cGUgPT09IERPQ19GUkFHTUVOVF9UWVBFO1xu
ICB2YXIgZG9jID0gaXNEb2N1bWVudEZyYWdtZW50ID8gY29udGFpbmVySW5mby5fbm9kZSA6IGNv
bnRhaW5lckluZm8uX293bmVyRG9jdW1lbnQ7XG4gIGxpc3RlblRvKHJlZ2lzdHJhdGlvbk5hbWUs
IGRvYyk7XG4gIHRyYW5zYWN0aW9uLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUocHV0TGlz
dGVuZXIsIHtcbiAgICBpbnN0OiBpbnN0LFxuICAgIHJlZ2lzdHJhdGlvbk5hbWU6IHJlZ2lzdHJh
dGlvbk5hbWUsXG4gICAgbGlzdGVuZXI6IGxpc3RlbmVyXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBw
dXRMaXN0ZW5lcigpIHtcbiAgdmFyIGxpc3RlbmVyVG9QdXQgPSB0aGlzO1xuICBFdmVudFBsdWdp
bkh1Yi5wdXRMaXN0ZW5lcihsaXN0ZW5lclRvUHV0Lmluc3QsIGxpc3RlbmVyVG9QdXQucmVnaXN0
cmF0aW9uTmFtZSwgbGlzdGVuZXJUb1B1dC5saXN0ZW5lcik7XG59XG5cbmZ1bmN0aW9uIGlucHV0
UG9zdE1vdW50KCkge1xuICB2YXIgaW5zdCA9IHRoaXM7XG4gIFJlYWN0RE9NSW5wdXQucG9zdE1v
dW50V3JhcHBlcihpbnN0KTtcbn1cblxuZnVuY3Rpb24gdGV4dGFyZWFQb3N0TW91bnQoKSB7XG4g
IHZhciBpbnN0ID0gdGhpcztcbiAgUmVhY3RET01UZXh0YXJlYS5wb3N0TW91bnRXcmFwcGVyKGlu
c3QpO1xufVxuXG5mdW5jdGlvbiBvcHRpb25Qb3N0TW91bnQoKSB7XG4gIHZhciBpbnN0ID0gdGhp
cztcbiAgUmVhY3RET01PcHRpb24ucG9zdE1vdW50V3JhcHBlcihpbnN0KTtcbn1cblxudmFyIHNl
dEFuZFZhbGlkYXRlQ29udGVudENoaWxkRGV2ID0gZW1wdHlGdW5jdGlvbjtcbmlmIChwcm9jZXNz
LmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHNldEFuZFZhbGlkYXRlQ29udGVu
dENoaWxkRGV2ID0gZnVuY3Rpb24gKGNvbnRlbnQpIHtcbiAgICB2YXIgaGFzRXhpc3RpbmdDb250
ZW50ID0gdGhpcy5fY29udGVudERlYnVnSUQgIT0gbnVsbDtcbiAgICB2YXIgZGVidWdJRCA9IHRo
aXMuX2RlYnVnSUQ7XG4gICAgLy8gVGhpcyBJRCByZXByZXNlbnRzIHRoZSBpbmxpbmVkIGNoaWxk
IHRoYXQgaGFzIG5vIGJhY2tpbmcgaW5zdGFuY2U6XG4gICAgdmFyIGNvbnRlbnREZWJ1Z0lEID0g
LWRlYnVnSUQ7XG5cbiAgICBpZiAoY29udGVudCA9PSBudWxsKSB7XG4gICAgICBpZiAoaGFzRXhp
c3RpbmdDb250ZW50KSB7XG4gICAgICAgIFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5v
blVubW91bnRDb21wb25lbnQodGhpcy5fY29udGVudERlYnVnSUQpO1xuICAgICAgfVxuICAgICAg
dGhpcy5fY29udGVudERlYnVnSUQgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAg
IHZhbGlkYXRlRE9NTmVzdGluZyhudWxsLCBTdHJpbmcoY29udGVudCksIHRoaXMsIHRoaXMuX2Fu
Y2VzdG9ySW5mbyk7XG4gICAgdGhpcy5fY29udGVudERlYnVnSUQgPSBjb250ZW50RGVidWdJRDtc
biAgICBpZiAoaGFzRXhpc3RpbmdDb250ZW50KSB7XG4gICAgICBSZWFjdEluc3RydW1lbnRhdGlv
bi5kZWJ1Z1Rvb2wub25CZWZvcmVVcGRhdGVDb21wb25lbnQoY29udGVudERlYnVnSUQsIGNvbnRl
bnQpO1xuICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uVXBkYXRlQ29tcG9u
ZW50KGNvbnRlbnREZWJ1Z0lEKTtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3RJbnN0cnVtZW50
YXRpb24uZGVidWdUb29sLm9uQmVmb3JlTW91bnRDb21wb25lbnQoY29udGVudERlYnVnSUQsIGNv
bnRlbnQsIGRlYnVnSUQpO1xuICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9u
TW91bnRDb21wb25lbnQoY29udGVudERlYnVnSUQpO1xuICAgICAgUmVhY3RJbnN0cnVtZW50YXRp
b24uZGVidWdUb29sLm9uU2V0Q2hpbGRyZW4oZGVidWdJRCwgW2NvbnRlbnREZWJ1Z0lEXSk7XG4g
ICAgfVxuICB9O1xufVxuXG4vLyBUaGVyZSBhcmUgc28gbWFueSBtZWRpYSBldmVudHMsIGl0IG1h
a2VzIHNlbnNlIHRvIGp1c3Rcbi8vIG1haW50YWluIGEgbGlzdCByYXRoZXIgdGhhbiBjcmVhdGUg
YSBgdHJhcEJ1YmJsZWRFdmVudGAgZm9yIGVhY2hcbnZhciBtZWRpYUV2ZW50cyA9IHtcbiAgdG9w
QWJvcnQ6ICdhYm9ydCcsXG4gIHRvcENhblBsYXk6ICdjYW5wbGF5JyxcbiAgdG9wQ2FuUGxheVRo
cm91Z2g6ICdjYW5wbGF5dGhyb3VnaCcsXG4gIHRvcER1cmF0aW9uQ2hhbmdlOiAnZHVyYXRpb25j
aGFuZ2UnLFxuICB0b3BFbXB0aWVkOiAnZW1wdGllZCcsXG4gIHRvcEVuY3J5cHRlZDogJ2VuY3J5
cHRlZCcsXG4gIHRvcEVuZGVkOiAnZW5kZWQnLFxuICB0b3BFcnJvcjogJ2Vycm9yJyxcbiAgdG9w
TG9hZGVkRGF0YTogJ2xvYWRlZGRhdGEnLFxuICB0b3BMb2FkZWRNZXRhZGF0YTogJ2xvYWRlZG1l
dGFkYXRhJyxcbiAgdG9wTG9hZFN0YXJ0OiAnbG9hZHN0YXJ0JyxcbiAgdG9wUGF1c2U6ICdwYXVz
ZScsXG4gIHRvcFBsYXk6ICdwbGF5JyxcbiAgdG9wUGxheWluZzogJ3BsYXlpbmcnLFxuICB0b3BQ
cm9ncmVzczogJ3Byb2dyZXNzJyxcbiAgdG9wUmF0ZUNoYW5nZTogJ3JhdGVjaGFuZ2UnLFxuICB0
b3BTZWVrZWQ6ICdzZWVrZWQnLFxuICB0b3BTZWVraW5nOiAnc2Vla2luZycsXG4gIHRvcFN0YWxs
ZWQ6ICdzdGFsbGVkJyxcbiAgdG9wU3VzcGVuZDogJ3N1c3BlbmQnLFxuICB0b3BUaW1lVXBkYXRl
OiAndGltZXVwZGF0ZScsXG4gIHRvcFZvbHVtZUNoYW5nZTogJ3ZvbHVtZWNoYW5nZScsXG4gIHRv
cFdhaXRpbmc6ICd3YWl0aW5nJ1xufTtcblxuZnVuY3Rpb24gdHJhY2tJbnB1dFZhbHVlKCkge1xu
ICBpbnB1dFZhbHVlVHJhY2tpbmcudHJhY2sodGhpcyk7XG59XG5cbmZ1bmN0aW9uIHRyYXBCdWJi
bGVkRXZlbnRzTG9jYWwoKSB7XG4gIHZhciBpbnN0ID0gdGhpcztcbiAgLy8gSWYgYSBjb21wb25l
bnQgcmVuZGVycyB0byBudWxsIG9yIGlmIGFub3RoZXIgY29tcG9uZW50IGZhdGFscyBhbmQgY2F1
c2VzXG4gIC8vIHRoZSBzdGF0ZSBvZiB0aGUgdHJlZSB0byBiZSBjb3JydXB0ZWQsIGBub2RlYCBo
ZXJlIGNhbiBiZSBudWxsLlxuICAhaW5zdC5fcm9vdE5vZGVJRCA/IHByb2Nlc3MuZW52Lk5PREVf
RU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdNdXN0IGJlIG1vdW50ZWQg
dG8gdHJhcCBldmVudHMnKSA6IF9wcm9kSW52YXJpYW50KCc2MycpIDogdm9pZCAwO1xuICB2YXIg
bm9kZSA9IGdldE5vZGUoaW5zdCk7XG4gICFub2RlID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09
ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ3RyYXBCdWJibGVkRXZlbnQoLi4uKTog
UmVxdWlyZXMgbm9kZSB0byBiZSByZW5kZXJlZC4nKSA6IF9wcm9kSW52YXJpYW50KCc2NCcpIDog
dm9pZCAwO1xuXG4gIHN3aXRjaCAoaW5zdC5fdGFnKSB7XG4gICAgY2FzZSAnaWZyYW1lJzpcbiAg
ICBjYXNlICdvYmplY3QnOlxuICAgICAgaW5zdC5fd3JhcHBlclN0YXRlLmxpc3RlbmVycyA9IFtS
ZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIudHJhcEJ1YmJsZWRFdmVudCgndG9wTG9hZCcsICdsb2Fk
Jywgbm9kZSldO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndmlkZW8nOlxuICAgIGNhc2UgJ2F1
ZGlvJzpcbiAgICAgIGluc3QuX3dyYXBwZXJTdGF0ZS5saXN0ZW5lcnMgPSBbXTtcbiAgICAgIC8v
IENyZWF0ZSBsaXN0ZW5lciBmb3IgZWFjaCBtZWRpYSBldmVudFxuICAgICAgZm9yICh2YXIgZXZl
bnQgaW4gbWVkaWFFdmVudHMpIHtcbiAgICAgICAgaWYgKG1lZGlhRXZlbnRzLmhhc093blByb3Bl
cnR5KGV2ZW50KSkge1xuICAgICAgICAgIGluc3QuX3dyYXBwZXJTdGF0ZS5saXN0ZW5lcnMucHVz
aChSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIudHJhcEJ1YmJsZWRFdmVudChldmVudCwgbWVkaWFF
dmVudHNbZXZlbnRdLCBub2RlKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJyZWFrO1xu
ICAgIGNhc2UgJ3NvdXJjZSc6XG4gICAgICBpbnN0Ll93cmFwcGVyU3RhdGUubGlzdGVuZXJzID0g
W1JlYWN0QnJvd3NlckV2ZW50RW1pdHRlci50cmFwQnViYmxlZEV2ZW50KCd0b3BFcnJvcicsICdl
cnJvcicsIG5vZGUpXTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2ltZyc6XG4gICAgICBpbnN0
Ll93cmFwcGVyU3RhdGUubGlzdGVuZXJzID0gW1JlYWN0QnJvd3NlckV2ZW50RW1pdHRlci50cmFw
QnViYmxlZEV2ZW50KCd0b3BFcnJvcicsICdlcnJvcicsIG5vZGUpLCBSZWFjdEJyb3dzZXJFdmVu
dEVtaXR0ZXIudHJhcEJ1YmJsZWRFdmVudCgndG9wTG9hZCcsICdsb2FkJywgbm9kZSldO1xuICAg
ICAgYnJlYWs7XG4gICAgY2FzZSAnZm9ybSc6XG4gICAgICBpbnN0Ll93cmFwcGVyU3RhdGUubGlz
dGVuZXJzID0gW1JlYWN0QnJvd3NlckV2ZW50RW1pdHRlci50cmFwQnViYmxlZEV2ZW50KCd0b3BS
ZXNldCcsICdyZXNldCcsIG5vZGUpLCBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIudHJhcEJ1YmJs
ZWRFdmVudCgndG9wU3VibWl0JywgJ3N1Ym1pdCcsIG5vZGUpXTtcbiAgICAgIGJyZWFrO1xuICAg
IGNhc2UgJ2lucHV0JzpcbiAgICBjYXNlICdzZWxlY3QnOlxuICAgIGNhc2UgJ3RleHRhcmVhJzpc
biAgICAgIGluc3QuX3dyYXBwZXJTdGF0ZS5saXN0ZW5lcnMgPSBbUmVhY3RCcm93c2VyRXZlbnRF
bWl0dGVyLnRyYXBCdWJibGVkRXZlbnQoJ3RvcEludmFsaWQnLCAnaW52YWxpZCcsIG5vZGUpXTtc
biAgICAgIGJyZWFrO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBvc3RVcGRhdGVTZWxlY3RXcmFwcGVy
KCkge1xuICBSZWFjdERPTVNlbGVjdC5wb3N0VXBkYXRlV3JhcHBlcih0aGlzKTtcbn1cblxuLy8g
Rm9yIEhUTUwsIGNlcnRhaW4gdGFncyBzaG91bGQgb21pdCB0aGVpciBjbG9zZSB0YWcuIFdlIGtl
ZXAgYSB3aGl0ZWxpc3QgZm9yXG4vLyB0aG9zZSBzcGVjaWFsLWNhc2UgdGFncy5cblxudmFyIG9t
aXR0ZWRDbG9zZVRhZ3MgPSB7XG4gIGFyZWE6IHRydWUsXG4gIGJhc2U6IHRydWUsXG4gIGJyOiB0
cnVlLFxuICBjb2w6IHRydWUsXG4gIGVtYmVkOiB0cnVlLFxuICBocjogdHJ1ZSxcbiAgaW1nOiB0
cnVlLFxuICBpbnB1dDogdHJ1ZSxcbiAga2V5Z2VuOiB0cnVlLFxuICBsaW5rOiB0cnVlLFxuICBt
ZXRhOiB0cnVlLFxuICBwYXJhbTogdHJ1ZSxcbiAgc291cmNlOiB0cnVlLFxuICB0cmFjazogdHJ1
ZSxcbiAgd2JyOiB0cnVlXG4gIC8vIE5PVEU6IG1lbnVpdGVtJ3MgY2xvc2UgdGFnIHNob3VsZCBi
ZSBvbWl0dGVkLCBidXQgdGhhdCBjYXVzZXMgcHJvYmxlbXMuXG59O1xuXG52YXIgbmV3bGluZUVh
dGluZ1RhZ3MgPSB7XG4gIGxpc3Rpbmc6IHRydWUsXG4gIHByZTogdHJ1ZSxcbiAgdGV4dGFyZWE6
IHRydWVcbn07XG5cbi8vIEZvciBIVE1MLCBjZXJ0YWluIHRhZ3MgY2Fubm90IGhhdmUgY2hpbGRy
ZW4uIFRoaXMgaGFzIHRoZSBzYW1lIHB1cnBvc2UgYXNcbi8vIGBvbWl0dGVkQ2xvc2VUYWdzYCBl
eGNlcHQgdGhhdCBgbWVudWl0ZW1gIHNob3VsZCBzdGlsbCBoYXZlIGl0cyBjbG9zaW5nIHRhZy5c
blxudmFyIHZvaWRFbGVtZW50VGFncyA9IF9hc3NpZ24oe1xuICBtZW51aXRlbTogdHJ1ZVxufSwg
b21pdHRlZENsb3NlVGFncyk7XG5cbi8vIFdlIGFjY2VwdCBhbnkgdGFnIHRvIGJlIHJlbmRlcmVk
IGJ1dCBzaW5jZSB0aGlzIGdldHMgaW5qZWN0ZWQgaW50byBhcmJpdHJhcnlcbi8vIEhUTUwsIHdl
IHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgaXQncyBhIHNhZmUgdGFnLlxuLy8gaHR0cDovL3d3dy53
My5vcmcvVFIvUkVDLXhtbC8jTlQtTmFtZVxuXG52YXIgVkFMSURfVEFHX1JFR0VYID0gL15bYS16
QS1aXVthLXpBLVo6X1xcLlxcLVxcZF0qJC87IC8vIFNpbXBsaWZpZWQgc3Vic2V0XG52YXIgdmFs
aWRhdGVkVGFnQ2FjaGUgPSB7fTtcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3Bl
cnR5O1xuXG5mdW5jdGlvbiB2YWxpZGF0ZURhbmdlcm91c1RhZyh0YWcpIHtcbiAgaWYgKCFoYXNP
d25Qcm9wZXJ0eS5jYWxsKHZhbGlkYXRlZFRhZ0NhY2hlLCB0YWcpKSB7XG4gICAgIVZBTElEX1RB
R19SRUdFWC50ZXN0KHRhZykgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24n
ID8gaW52YXJpYW50KGZhbHNlLCAnSW52YWxpZCB0YWc6ICVzJywgdGFnKSA6IF9wcm9kSW52YXJp
YW50KCc2NScsIHRhZykgOiB2b2lkIDA7XG4gICAgdmFsaWRhdGVkVGFnQ2FjaGVbdGFnXSA9IHRy
dWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDdXN0b21Db21wb25lbnQodGFnTmFtZSwgcHJvcHMp
IHtcbiAgcmV0dXJuIHRhZ05hbWUuaW5kZXhPZignLScpID49IDAgfHwgcHJvcHMuaXMgIT0gbnVs
bDtcbn1cblxudmFyIGdsb2JhbElkQ291bnRlciA9IDE7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5l
dyBSZWFjdCBjbGFzcyB0aGF0IGlzIGlkZW1wb3RlbnQgYW5kIGNhcGFibGUgb2YgY29udGFpbmlu
ZyBvdGhlclxuICogUmVhY3QgY29tcG9uZW50cy4gSXQgYWNjZXB0cyBldmVudCBsaXN0ZW5lcnMg
YW5kIERPTSBwcm9wZXJ0aWVzIHRoYXQgYXJlXG4gKiB2YWxpZCBhY2NvcmRpbmcgdG8gYERPTVBy
b3BlcnR5YC5cbiAqXG4gKiAgLSBFdmVudCBsaXN0ZW5lcnM6IGBvbkNsaWNrYCwgYG9uTW91c2VE
b3duYCwgZXRjLlxuICogIC0gRE9NIHByb3BlcnRpZXM6IGBjbGFzc05hbWVgLCBgbmFtZWAsIGB0
aXRsZWAsIGV0Yy5cbiAqXG4gKiBUaGUgYHN0eWxlYCBwcm9wZXJ0eSBmdW5jdGlvbnMgZGlmZmVy
ZW50bHkgZnJvbSB0aGUgRE9NIEFQSS4gSXQgYWNjZXB0cyBhblxuICogb2JqZWN0IG1hcHBpbmcg
b2Ygc3R5bGUgcHJvcGVydGllcyB0byB2YWx1ZXMuXG4gKlxuICogQGNvbnN0cnVjdG9yIFJlYWN0
RE9NQ29tcG9uZW50XG4gKiBAZXh0ZW5kcyBSZWFjdE11bHRpQ2hpbGRcbiAqL1xuZnVuY3Rpb24g
UmVhY3RET01Db21wb25lbnQoZWxlbWVudCkge1xuICB2YXIgdGFnID0gZWxlbWVudC50eXBlO1xu
ICB2YWxpZGF0ZURhbmdlcm91c1RhZyh0YWcpO1xuICB0aGlzLl9jdXJyZW50RWxlbWVudCA9IGVs
ZW1lbnQ7XG4gIHRoaXMuX3RhZyA9IHRhZy50b0xvd2VyQ2FzZSgpO1xuICB0aGlzLl9uYW1lc3Bh
Y2VVUkkgPSBudWxsO1xuICB0aGlzLl9yZW5kZXJlZENoaWxkcmVuID0gbnVsbDtcbiAgdGhpcy5f
cHJldmlvdXNTdHlsZSA9IG51bGw7XG4gIHRoaXMuX3ByZXZpb3VzU3R5bGVDb3B5ID0gbnVsbDtc
biAgdGhpcy5faG9zdE5vZGUgPSBudWxsO1xuICB0aGlzLl9ob3N0UGFyZW50ID0gbnVsbDtcbiAg
dGhpcy5fcm9vdE5vZGVJRCA9IDA7XG4gIHRoaXMuX2RvbUlEID0gMDtcbiAgdGhpcy5faG9zdENv
bnRhaW5lckluZm8gPSBudWxsO1xuICB0aGlzLl93cmFwcGVyU3RhdGUgPSBudWxsO1xuICB0aGlz
Ll90b3BMZXZlbFdyYXBwZXIgPSBudWxsO1xuICB0aGlzLl9mbGFncyA9IDA7XG4gIGlmIChwcm9j
ZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgdGhpcy5fYW5jZXN0b3JJ
bmZvID0gbnVsbDtcbiAgICBzZXRBbmRWYWxpZGF0ZUNvbnRlbnRDaGlsZERldi5jYWxsKHRoaXMs
IG51bGwpO1xuICB9XG59XG5cblJlYWN0RE9NQ29tcG9uZW50LmRpc3BsYXlOYW1lID0gJ1JlYWN0
RE9NQ29tcG9uZW50JztcblxuUmVhY3RET01Db21wb25lbnQuTWl4aW4gPSB7XG4gIC8qKlxuICAg
KiBHZW5lcmF0ZXMgcm9vdCB0YWcgbWFya3VwIHRoZW4gcmVjdXJzZXMuIFRoaXMgbWV0aG9kIGhh
cyBzaWRlIGVmZmVjdHMgYW5kXG4gICAqIGlzIG5vdCBpZGVtcG90ZW50LlxuICAgKlxuICAgKiBA
aW50ZXJuYWxcbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufFJlYWN0U2Vy
dmVyUmVuZGVyaW5nVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7P1JlYWN0
RE9NQ29tcG9uZW50fSB0aGUgcGFyZW50IGNvbXBvbmVudCBpbnN0YW5jZVxuICAgKiBAcGFyYW0g
ez9vYmplY3R9IGluZm8gYWJvdXQgdGhlIGhvc3QgY29udGFpbmVyXG4gICAqIEBwYXJhbSB7b2Jq
ZWN0fSBjb250ZXh0XG4gICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNvbXB1dGVkIG1hcmt1cC5c
biAgICovXG4gIG1vdW50Q29tcG9uZW50OiBmdW5jdGlvbiAodHJhbnNhY3Rpb24sIGhvc3RQYXJl
bnQsIGhvc3RDb250YWluZXJJbmZvLCBjb250ZXh0KSB7XG4gICAgdGhpcy5fcm9vdE5vZGVJRCA9
IGdsb2JhbElkQ291bnRlcisrO1xuICAgIHRoaXMuX2RvbUlEID0gaG9zdENvbnRhaW5lckluZm8u
X2lkQ291bnRlcisrO1xuICAgIHRoaXMuX2hvc3RQYXJlbnQgPSBob3N0UGFyZW50O1xuICAgIHRo
aXMuX2hvc3RDb250YWluZXJJbmZvID0gaG9zdENvbnRhaW5lckluZm87XG5cbiAgICB2YXIgcHJv
cHMgPSB0aGlzLl9jdXJyZW50RWxlbWVudC5wcm9wcztcblxuICAgIHN3aXRjaCAodGhpcy5fdGFn
KSB7XG4gICAgICBjYXNlICdhdWRpbyc6XG4gICAgICBjYXNlICdmb3JtJzpcbiAgICAgIGNhc2Ug
J2lmcmFtZSc6XG4gICAgICBjYXNlICdpbWcnOlxuICAgICAgY2FzZSAnbGluayc6XG4gICAgICBj
YXNlICdvYmplY3QnOlxuICAgICAgY2FzZSAnc291cmNlJzpcbiAgICAgIGNhc2UgJ3ZpZGVvJzpc
biAgICAgICAgdGhpcy5fd3JhcHBlclN0YXRlID0ge1xuICAgICAgICAgIGxpc3RlbmVyczogbnVs
bFxuICAgICAgICB9O1xuICAgICAgICB0cmFuc2FjdGlvbi5nZXRSZWFjdE1vdW50UmVhZHkoKS5l
bnF1ZXVlKHRyYXBCdWJibGVkRXZlbnRzTG9jYWwsIHRoaXMpO1xuICAgICAgICBicmVhaztcbiAg
ICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgICAgUmVhY3RET01JbnB1dC5tb3VudFdyYXBwZXIodGhp
cywgcHJvcHMsIGhvc3RQYXJlbnQpO1xuICAgICAgICBwcm9wcyA9IFJlYWN0RE9NSW5wdXQuZ2V0
SG9zdFByb3BzKHRoaXMsIHByb3BzKTtcbiAgICAgICAgdHJhbnNhY3Rpb24uZ2V0UmVhY3RNb3Vu
dFJlYWR5KCkuZW5xdWV1ZSh0cmFja0lucHV0VmFsdWUsIHRoaXMpO1xuICAgICAgICB0cmFuc2Fj
dGlvbi5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKHRyYXBCdWJibGVkRXZlbnRzTG9jYWws
IHRoaXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICAgIFJl
YWN0RE9NT3B0aW9uLm1vdW50V3JhcHBlcih0aGlzLCBwcm9wcywgaG9zdFBhcmVudCk7XG4gICAg
ICAgIHByb3BzID0gUmVhY3RET01PcHRpb24uZ2V0SG9zdFByb3BzKHRoaXMsIHByb3BzKTtcbiAg
ICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgICBSZWFjdERPTVNlbGVj
dC5tb3VudFdyYXBwZXIodGhpcywgcHJvcHMsIGhvc3RQYXJlbnQpO1xuICAgICAgICBwcm9wcyA9
IFJlYWN0RE9NU2VsZWN0LmdldEhvc3RQcm9wcyh0aGlzLCBwcm9wcyk7XG4gICAgICAgIHRyYW5z
YWN0aW9uLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUodHJhcEJ1YmJsZWRFdmVudHNMb2Nh
bCwgdGhpcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAg
ICBSZWFjdERPTVRleHRhcmVhLm1vdW50V3JhcHBlcih0aGlzLCBwcm9wcywgaG9zdFBhcmVudCk7
XG4gICAgICAgIHByb3BzID0gUmVhY3RET01UZXh0YXJlYS5nZXRIb3N0UHJvcHModGhpcywgcHJv
cHMpO1xuICAgICAgICB0cmFuc2FjdGlvbi5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKHRy
YWNrSW5wdXRWYWx1ZSwgdGhpcyk7XG4gICAgICAgIHRyYW5zYWN0aW9uLmdldFJlYWN0TW91bnRS
ZWFkeSgpLmVucXVldWUodHJhcEJ1YmJsZWRFdmVudHNMb2NhbCwgdGhpcyk7XG4gICAgICAgIGJy
ZWFrO1xuICAgIH1cblxuICAgIGFzc2VydFZhbGlkUHJvcHModGhpcywgcHJvcHMpO1xuXG4gICAg
Ly8gV2UgY3JlYXRlIHRhZ3MgaW4gdGhlIG5hbWVzcGFjZSBvZiB0aGVpciBwYXJlbnQgY29udGFp
bmVyLCBleGNlcHQgSFRNTFxuICAgIC8vIHRhZ3MgZ2V0IG5vIG5hbWVzcGFjZS5cbiAgICB2YXIg
bmFtZXNwYWNlVVJJO1xuICAgIHZhciBwYXJlbnRUYWc7XG4gICAgaWYgKGhvc3RQYXJlbnQgIT0g
bnVsbCkge1xuICAgICAgbmFtZXNwYWNlVVJJID0gaG9zdFBhcmVudC5fbmFtZXNwYWNlVVJJO1xu
ICAgICAgcGFyZW50VGFnID0gaG9zdFBhcmVudC5fdGFnO1xuICAgIH0gZWxzZSBpZiAoaG9zdENv
bnRhaW5lckluZm8uX3RhZykge1xuICAgICAgbmFtZXNwYWNlVVJJID0gaG9zdENvbnRhaW5lcklu
Zm8uX25hbWVzcGFjZVVSSTtcbiAgICAgIHBhcmVudFRhZyA9IGhvc3RDb250YWluZXJJbmZvLl90
YWc7XG4gICAgfVxuICAgIGlmIChuYW1lc3BhY2VVUkkgPT0gbnVsbCB8fCBuYW1lc3BhY2VVUkkg
PT09IERPTU5hbWVzcGFjZXMuc3ZnICYmIHBhcmVudFRhZyA9PT0gJ2ZvcmVpZ25vYmplY3QnKSB7
XG4gICAgICBuYW1lc3BhY2VVUkkgPSBET01OYW1lc3BhY2VzLmh0bWw7XG4gICAgfVxuICAgIGlm
IChuYW1lc3BhY2VVUkkgPT09IERPTU5hbWVzcGFjZXMuaHRtbCkge1xuICAgICAgaWYgKHRoaXMu
X3RhZyA9PT0gJ3N2ZycpIHtcbiAgICAgICAgbmFtZXNwYWNlVVJJID0gRE9NTmFtZXNwYWNlcy5z
dmc7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX3RhZyA9PT0gJ21hdGgnKSB7XG4gICAgICAgIG5h
bWVzcGFjZVVSSSA9IERPTU5hbWVzcGFjZXMubWF0aG1sO1xuICAgICAgfVxuICAgIH1cbiAgICB0
aGlzLl9uYW1lc3BhY2VVUkkgPSBuYW1lc3BhY2VVUkk7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYu
Tk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIHBhcmVudEluZm87XG4gICAg
ICBpZiAoaG9zdFBhcmVudCAhPSBudWxsKSB7XG4gICAgICAgIHBhcmVudEluZm8gPSBob3N0UGFy
ZW50Ll9hbmNlc3RvckluZm87XG4gICAgICB9IGVsc2UgaWYgKGhvc3RDb250YWluZXJJbmZvLl90
YWcpIHtcbiAgICAgICAgcGFyZW50SW5mbyA9IGhvc3RDb250YWluZXJJbmZvLl9hbmNlc3Rvcklu
Zm87XG4gICAgICB9XG4gICAgICBpZiAocGFyZW50SW5mbykge1xuICAgICAgICAvLyBwYXJlbnRJ
bmZvIHNob3VsZCBhbHdheXMgYmUgcHJlc2VudCBleGNlcHQgZm9yIHRoZSB0b3AtbGV2ZWxcbiAg
ICAgICAgLy8gY29tcG9uZW50IHdoZW4gc2VydmVyIHJlbmRlcmluZ1xuICAgICAgICB2YWxpZGF0
ZURPTU5lc3RpbmcodGhpcy5fdGFnLCBudWxsLCB0aGlzLCBwYXJlbnRJbmZvKTtcbiAgICAgIH1c
biAgICAgIHRoaXMuX2FuY2VzdG9ySW5mbyA9IHZhbGlkYXRlRE9NTmVzdGluZy51cGRhdGVkQW5j
ZXN0b3JJbmZvKHBhcmVudEluZm8sIHRoaXMuX3RhZywgdGhpcyk7XG4gICAgfVxuXG4gICAgdmFy
IG1vdW50SW1hZ2U7XG4gICAgaWYgKHRyYW5zYWN0aW9uLnVzZUNyZWF0ZUVsZW1lbnQpIHtcbiAg
ICAgIHZhciBvd25lckRvY3VtZW50ID0gaG9zdENvbnRhaW5lckluZm8uX293bmVyRG9jdW1lbnQ7
XG4gICAgICB2YXIgZWw7XG4gICAgICBpZiAobmFtZXNwYWNlVVJJID09PSBET01OYW1lc3BhY2Vz
Lmh0bWwpIHtcbiAgICAgICAgaWYgKHRoaXMuX3RhZyA9PT0gJ3NjcmlwdCcpIHtcbiAgICAgICAg
ICAvLyBDcmVhdGUgdGhlIHNjcmlwdCB2aWEgLmlubmVySFRNTCBzbyBpdHMgXCJwYXJzZXItaW5z
ZXJ0ZWRcIiBmbGFnIGlzXG4gICAgICAgICAgLy8gc2V0IHRvIHRydWUgYW5kIGl0IGRvZXMgbm90
IGV4ZWN1dGVcbiAgICAgICAgICB2YXIgZGl2ID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50
KCdkaXYnKTtcbiAgICAgICAgICB2YXIgdHlwZSA9IHRoaXMuX2N1cnJlbnRFbGVtZW50LnR5cGU7
XG4gICAgICAgICAgZGl2LmlubmVySFRNTCA9ICc8JyArIHR5cGUgKyAnPjwvJyArIHR5cGUgKyAn
Pic7XG4gICAgICAgICAgZWwgPSBkaXYucmVtb3ZlQ2hpbGQoZGl2LmZpcnN0Q2hpbGQpO1xuICAg
ICAgICB9IGVsc2UgaWYgKHByb3BzLmlzKSB7XG4gICAgICAgICAgZWwgPSBvd25lckRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQodGhpcy5fY3VycmVudEVsZW1lbnQudHlwZSwgcHJvcHMuaXMpO1xuICAg
ICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFNlcGFyYXRlIGVsc2UgYnJhbmNoIGluc3RlYWQg
b2YgdXNpbmcgYHByb3BzLmlzIHx8IHVuZGVmaW5lZGAgYWJvdmUgYmVjdWFzZSBvZiBhIEZpcmVm
b3ggYnVnLlxuICAgICAgICAgIC8vIFNlZSBkaXNjdXNzaW9uIGluIGh0dHBzOi8vZ2l0aHViLmNv
bS9mYWNlYm9vay9yZWFjdC9wdWxsLzY4OTZcbiAgICAgICAgICAvLyBhbmQgZGlzY3Vzc2lvbiBp
biBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc2MjQwXG4g
ICAgICAgICAgZWwgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy5fY3VycmVudEVs
ZW1lbnQudHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsID0gb3du
ZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobmFtZXNwYWNlVVJJLCB0aGlzLl9jdXJyZW50RWxl
bWVudC50eXBlKTtcbiAgICAgIH1cbiAgICAgIFJlYWN0RE9NQ29tcG9uZW50VHJlZS5wcmVjYWNo
ZU5vZGUodGhpcywgZWwpO1xuICAgICAgdGhpcy5fZmxhZ3MgfD0gRmxhZ3MuaGFzQ2FjaGVkQ2hp
bGROb2RlcztcbiAgICAgIGlmICghdGhpcy5faG9zdFBhcmVudCkge1xuICAgICAgICBET01Qcm9w
ZXJ0eU9wZXJhdGlvbnMuc2V0QXR0cmlidXRlRm9yUm9vdChlbCk7XG4gICAgICB9XG4gICAgICB0
aGlzLl91cGRhdGVET01Qcm9wZXJ0aWVzKG51bGwsIHByb3BzLCB0cmFuc2FjdGlvbik7XG4gICAg
ICB2YXIgbGF6eVRyZWUgPSBET01MYXp5VHJlZShlbCk7XG4gICAgICB0aGlzLl9jcmVhdGVJbml0
aWFsQ2hpbGRyZW4odHJhbnNhY3Rpb24sIHByb3BzLCBjb250ZXh0LCBsYXp5VHJlZSk7XG4gICAg
ICBtb3VudEltYWdlID0gbGF6eVRyZWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB0YWdPcGVu
ID0gdGhpcy5fY3JlYXRlT3BlblRhZ01hcmt1cEFuZFB1dExpc3RlbmVycyh0cmFuc2FjdGlvbiwg
cHJvcHMpO1xuICAgICAgdmFyIHRhZ0NvbnRlbnQgPSB0aGlzLl9jcmVhdGVDb250ZW50TWFya3Vw
KHRyYW5zYWN0aW9uLCBwcm9wcywgY29udGV4dCk7XG4gICAgICBpZiAoIXRhZ0NvbnRlbnQgJiYg
b21pdHRlZENsb3NlVGFnc1t0aGlzLl90YWddKSB7XG4gICAgICAgIG1vdW50SW1hZ2UgPSB0YWdP
cGVuICsgJy8+JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1vdW50SW1hZ2UgPSB0YWdPcGVu
ICsgJz4nICsgdGFnQ29udGVudCArICc8LycgKyB0aGlzLl9jdXJyZW50RWxlbWVudC50eXBlICsg
Jz4nO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAodGhpcy5fdGFnKSB7XG4gICAgICBj
YXNlICdpbnB1dCc6XG4gICAgICAgIHRyYW5zYWN0aW9uLmdldFJlYWN0TW91bnRSZWFkeSgpLmVu
cXVldWUoaW5wdXRQb3N0TW91bnQsIHRoaXMpO1xuICAgICAgICBpZiAocHJvcHMuYXV0b0ZvY3Vz
KSB7XG4gICAgICAgICAgdHJhbnNhY3Rpb24uZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShB
dXRvRm9jdXNVdGlscy5mb2N1c0RPTUNvbXBvbmVudCwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAg
ICAgYnJlYWs7XG4gICAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICAgIHRyYW5zYWN0aW9uLmdl
dFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUodGV4dGFyZWFQb3N0TW91bnQsIHRoaXMpO1xuICAg
ICAgICBpZiAocHJvcHMuYXV0b0ZvY3VzKSB7XG4gICAgICAgICAgdHJhbnNhY3Rpb24uZ2V0UmVh
Y3RNb3VudFJlYWR5KCkuZW5xdWV1ZShBdXRvRm9jdXNVdGlscy5mb2N1c0RPTUNvbXBvbmVudCwg
dGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzZWxlY3QnOlxu
ICAgICAgICBpZiAocHJvcHMuYXV0b0ZvY3VzKSB7XG4gICAgICAgICAgdHJhbnNhY3Rpb24uZ2V0
UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShBdXRvRm9jdXNVdGlscy5mb2N1c0RPTUNvbXBvbmVu
dCwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdidXR0b24n
OlxuICAgICAgICBpZiAocHJvcHMuYXV0b0ZvY3VzKSB7XG4gICAgICAgICAgdHJhbnNhY3Rpb24u
Z2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShBdXRvRm9jdXNVdGlscy5mb2N1c0RPTUNvbXBv
bmVudCwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdvcHRp
b24nOlxuICAgICAgICB0cmFuc2FjdGlvbi5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKG9w
dGlvblBvc3RNb3VudCwgdGhpcyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVy
biBtb3VudEltYWdlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIG1hcmt1cCBmb3IgdGhl
IG9wZW4gdGFnIGFuZCBhbGwgYXR0cmlidXRlcy5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgaGFz
IHNpZGUgZWZmZWN0cyBiZWNhdXNlIGV2ZW50cyBnZXQgcmVnaXN0ZXJlZC5cbiAgICpcbiAgICog
SXRlcmF0aW5nIG92ZXIgb2JqZWN0IHByb3BlcnRpZXMgaXMgZmFzdGVyIHRoYW4gaXRlcmF0aW5n
IG92ZXIgYXJyYXlzLlxuICAgKiBAc2VlIGh0dHA6Ly9qc3BlcmYuY29tL29iai12cy1hcnItaXRl
cmF0aW9uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVU
cmFuc2FjdGlvbnxSZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxu
ICAgKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAgICogQHJldHVybiB7c3RyaW5nfSBNYXJrdXAg
b2Ygb3BlbmluZyB0YWcuXG4gICAqL1xuICBfY3JlYXRlT3BlblRhZ01hcmt1cEFuZFB1dExpc3Rl
bmVyczogZnVuY3Rpb24gKHRyYW5zYWN0aW9uLCBwcm9wcykge1xuICAgIHZhciByZXQgPSAnPCcg
KyB0aGlzLl9jdXJyZW50RWxlbWVudC50eXBlO1xuXG4gICAgZm9yICh2YXIgcHJvcEtleSBpbiBw
cm9wcykge1xuICAgICAgaWYgKCFwcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAg
ICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9w
S2V5XTtcbiAgICAgIGlmIChwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgICAgICBjb250aW51ZTtc
biAgICAgIH1cbiAgICAgIGlmIChyZWdpc3RyYXRpb25OYW1lTW9kdWxlcy5oYXNPd25Qcm9wZXJ0
eShwcm9wS2V5KSkge1xuICAgICAgICBpZiAocHJvcFZhbHVlKSB7XG4gICAgICAgICAgZW5xdWV1
ZVB1dExpc3RlbmVyKHRoaXMsIHByb3BLZXksIHByb3BWYWx1ZSwgdHJhbnNhY3Rpb24pO1xuICAg
ICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocHJvcEtleSA9PT0gU1RZTEUpIHtc
biAgICAgICAgICBpZiAocHJvcFZhbHVlKSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYu
Tk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAvLyBTZWUgYF91cGRh
dGVET01Qcm9wZXJ0aWVzYC4gc3R5bGUgYmxvY2tcbiAgICAgICAgICAgICAgdGhpcy5fcHJldmlv
dXNTdHlsZSA9IHByb3BWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByb3BWYWx1
ZSA9IHRoaXMuX3ByZXZpb3VzU3R5bGVDb3B5ID0gX2Fzc2lnbih7fSwgcHJvcHMuc3R5bGUpO1xu
ICAgICAgICAgIH1cbiAgICAgICAgICBwcm9wVmFsdWUgPSBDU1NQcm9wZXJ0eU9wZXJhdGlvbnMu
Y3JlYXRlTWFya3VwRm9yU3R5bGVzKHByb3BWYWx1ZSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAg
ICAgdmFyIG1hcmt1cCA9IG51bGw7XG4gICAgICAgIGlmICh0aGlzLl90YWcgIT0gbnVsbCAmJiBp
c0N1c3RvbUNvbXBvbmVudCh0aGlzLl90YWcsIHByb3BzKSkge1xuICAgICAgICAgIGlmICghUkVT
RVJWRURfUFJPUFMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgICAgICAgIG1hcmt1
cCA9IERPTVByb3BlcnR5T3BlcmF0aW9ucy5jcmVhdGVNYXJrdXBGb3JDdXN0b21BdHRyaWJ1dGUo
cHJvcEtleSwgcHJvcFZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAg
ICAgICAgbWFya3VwID0gRE9NUHJvcGVydHlPcGVyYXRpb25zLmNyZWF0ZU1hcmt1cEZvclByb3Bl
cnR5KHByb3BLZXksIHByb3BWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hcmt1cCkg
e1xuICAgICAgICAgIHJldCArPSAnICcgKyBtYXJrdXA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAg
ICB9XG5cbiAgICAvLyBGb3Igc3RhdGljIHBhZ2VzLCBubyBuZWVkIHRvIHB1dCBSZWFjdCBJRCBh
bmQgY2hlY2tzdW0uIFNhdmVzIGxvdHMgb2ZcbiAgICAvLyBieXRlcy5cbiAgICBpZiAodHJhbnNh
Y3Rpb24ucmVuZGVyVG9TdGF0aWNNYXJrdXApIHtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxu
XG4gICAgaWYgKCF0aGlzLl9ob3N0UGFyZW50KSB7XG4gICAgICByZXQgKz0gJyAnICsgRE9NUHJv
cGVydHlPcGVyYXRpb25zLmNyZWF0ZU1hcmt1cEZvclJvb3QoKTtcbiAgICB9XG4gICAgcmV0ICs9
ICcgJyArIERPTVByb3BlcnR5T3BlcmF0aW9ucy5jcmVhdGVNYXJrdXBGb3JJRCh0aGlzLl9kb21J
RCk7XG4gICAgcmV0dXJuIHJldDtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYXRlcyBtYXJrdXAg
Zm9yIHRoZSBjb250ZW50IGJldHdlZW4gdGhlIHRhZ3MuXG4gICAqXG4gICAqIEBwcml2YXRlXG4g
ICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbnxSZWFjdFNlcnZlclJlbmRlcmlu
Z1RyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAg
ICogQHBhcmFtIHtvYmplY3R9IGNvbnRleHRcbiAgICogQHJldHVybiB7c3RyaW5nfSBDb250ZW50
IG1hcmt1cC5cbiAgICovXG4gIF9jcmVhdGVDb250ZW50TWFya3VwOiBmdW5jdGlvbiAodHJhbnNh
Y3Rpb24sIHByb3BzLCBjb250ZXh0KSB7XG4gICAgdmFyIHJldCA9ICcnO1xuXG4gICAgLy8gSW50
ZW50aW9uYWwgdXNlIG9mICE9IHRvIGF2b2lkIGNhdGNoaW5nIHplcm8vZmFsc2UuXG4gICAgdmFy
IGlubmVySFRNTCA9IHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MO1xuICAgIGlmIChpbm5l
ckhUTUwgIT0gbnVsbCkge1xuICAgICAgaWYgKGlubmVySFRNTC5fX2h0bWwgIT0gbnVsbCkge1xu
ICAgICAgICByZXQgPSBpbm5lckhUTUwuX19odG1sO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4g
ICAgICB2YXIgY29udGVudFRvVXNlID0gQ09OVEVOVF9UWVBFU1t0eXBlb2YgcHJvcHMuY2hpbGRy
ZW5dID8gcHJvcHMuY2hpbGRyZW4gOiBudWxsO1xuICAgICAgdmFyIGNoaWxkcmVuVG9Vc2UgPSBj
b250ZW50VG9Vc2UgIT0gbnVsbCA/IG51bGwgOiBwcm9wcy5jaGlsZHJlbjtcbiAgICAgIGlmIChj
b250ZW50VG9Vc2UgIT0gbnVsbCkge1xuICAgICAgICAvLyBUT0RPOiBWYWxpZGF0ZSB0aGF0IHRl
eHQgaXMgYWxsb3dlZCBhcyBhIGNoaWxkIG9mIHRoaXMgbm9kZVxuICAgICAgICByZXQgPSBlc2Nh
cGVUZXh0Q29udGVudEZvckJyb3dzZXIoY29udGVudFRvVXNlKTtcbiAgICAgICAgaWYgKHByb2Nl
c3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBzZXRBbmRWYWxp
ZGF0ZUNvbnRlbnRDaGlsZERldi5jYWxsKHRoaXMsIGNvbnRlbnRUb1VzZSk7XG4gICAgICAgIH1c
biAgICAgIH0gZWxzZSBpZiAoY2hpbGRyZW5Ub1VzZSAhPSBudWxsKSB7XG4gICAgICAgIHZhciBt
b3VudEltYWdlcyA9IHRoaXMubW91bnRDaGlsZHJlbihjaGlsZHJlblRvVXNlLCB0cmFuc2FjdGlv
biwgY29udGV4dCk7XG4gICAgICAgIHJldCA9IG1vdW50SW1hZ2VzLmpvaW4oJycpO1xuICAgICAg
fVxuICAgIH1cbiAgICBpZiAobmV3bGluZUVhdGluZ1RhZ3NbdGhpcy5fdGFnXSAmJiByZXQuY2hh
ckF0KDApID09PSAnXFxuJykge1xuICAgICAgLy8gdGV4dC9odG1sIGlnbm9yZXMgdGhlIGZpcnN0
IGNoYXJhY3RlciBpbiB0aGVzZSB0YWdzIGlmIGl0J3MgYSBuZXdsaW5lXG4gICAgICAvLyBQcmVm
ZXIgdG8gYnJlYWsgYXBwbGljYXRpb24veG1sIG92ZXIgdGV4dC9odG1sIChmb3Igbm93KSBieSBh
ZGRpbmdcbiAgICAgIC8vIGEgbmV3bGluZSBzcGVjaWZpY2FsbHkgdG8gZ2V0IGVhdGVuIGJ5IHRo
ZSBwYXJzZXIuIChBbHRlcm5hdGVseSBmb3JcbiAgICAgIC8vIHRleHRhcmVhcywgcmVwbGFjaW5n
IFwiXlxcblwiIHdpdGggXCJcXHJcXG5cIiBkb2Vzbid0IGdldCBlYXRlbiwgYW5kIHRoZSBmaXJz
dFxuICAgICAgLy8gXFxyIGlzIG5vcm1hbGl6ZWQgb3V0IGJ5IEhUTUxUZXh0QXJlYUVsZW1lbnQj
dmFsdWUuKVxuICAgICAgLy8gU2VlOiA8aHR0cDovL3d3dy53My5vcmcvVFIvaHRtbC1wb2x5Z2xv
dC8jbmV3bGluZXMtaW4tdGV4dGFyZWEtYW5kLXByZT5cbiAgICAgIC8vIFNlZTogPGh0dHA6Ly93
d3cudzMub3JnL1RSL2h0bWw1L3N5bnRheC5odG1sI2VsZW1lbnQtcmVzdHJpY3Rpb25zPlxuICAg
ICAgLy8gU2VlOiA8aHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUvc3ludGF4Lmh0bWwjbmV3bGlu
ZXM+XG4gICAgICAvLyBTZWU6IFBhcnNpbmcgb2YgXCJ0ZXh0YXJlYVwiIFwibGlzdGluZ1wiIGFu
ZCBcInByZVwiIGVsZW1lbnRzXG4gICAgICAvLyAgZnJvbSA8aHR0cDovL3d3dy53My5vcmcvVFIv
aHRtbDUvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluYm9keT5cbiAgICAgIHJldHVybiAnXFxu
JyArIHJldDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gIH0sXG5c
biAgX2NyZWF0ZUluaXRpYWxDaGlsZHJlbjogZnVuY3Rpb24gKHRyYW5zYWN0aW9uLCBwcm9wcywg
Y29udGV4dCwgbGF6eVRyZWUpIHtcbiAgICAvLyBJbnRlbnRpb25hbCB1c2Ugb2YgIT0gdG8gYXZv
aWQgY2F0Y2hpbmcgemVyby9mYWxzZS5cbiAgICB2YXIgaW5uZXJIVE1MID0gcHJvcHMuZGFuZ2Vy
b3VzbHlTZXRJbm5lckhUTUw7XG4gICAgaWYgKGlubmVySFRNTCAhPSBudWxsKSB7XG4gICAgICBp
ZiAoaW5uZXJIVE1MLl9faHRtbCAhPSBudWxsKSB7XG4gICAgICAgIERPTUxhenlUcmVlLnF1ZXVl
SFRNTChsYXp5VHJlZSwgaW5uZXJIVE1MLl9faHRtbCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtc
biAgICAgIHZhciBjb250ZW50VG9Vc2UgPSBDT05URU5UX1RZUEVTW3R5cGVvZiBwcm9wcy5jaGls
ZHJlbl0gPyBwcm9wcy5jaGlsZHJlbiA6IG51bGw7XG4gICAgICB2YXIgY2hpbGRyZW5Ub1VzZSA9
IGNvbnRlbnRUb1VzZSAhPSBudWxsID8gbnVsbCA6IHByb3BzLmNoaWxkcmVuO1xuICAgICAgLy8g
VE9ETzogVmFsaWRhdGUgdGhhdCB0ZXh0IGlzIGFsbG93ZWQgYXMgYSBjaGlsZCBvZiB0aGlzIG5v
ZGVcbiAgICAgIGlmIChjb250ZW50VG9Vc2UgIT0gbnVsbCkge1xuICAgICAgICAvLyBBdm9pZCBz
ZXR0aW5nIHRleHRDb250ZW50IHdoZW4gdGhlIHRleHQgaXMgZW1wdHkuIEluIElFMTEgc2V0dGlu
Z1xuICAgICAgICAvLyB0ZXh0Q29udGVudCBvbiBhIHRleHQgYXJlYSB3aWxsIGNhdXNlIHRoZSBw
bGFjZWhvbGRlciB0byBub3RcbiAgICAgICAgLy8gc2hvdyB3aXRoaW4gdGhlIHRleHRhcmVhIHVu
dGlsIGl0IGhhcyBiZWVuIGZvY3VzZWQgYW5kIGJsdXJyZWQgYWdhaW4uXG4gICAgICAgIC8vIGh0
dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNjczMSNpc3N1ZWNvbW1lbnQt
MjU0ODc0NTUzXG4gICAgICAgIGlmIChjb250ZW50VG9Vc2UgIT09ICcnKSB7XG4gICAgICAgICAg
aWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAg
IHNldEFuZFZhbGlkYXRlQ29udGVudENoaWxkRGV2LmNhbGwodGhpcywgY29udGVudFRvVXNlKTtc
biAgICAgICAgICB9XG4gICAgICAgICAgRE9NTGF6eVRyZWUucXVldWVUZXh0KGxhenlUcmVlLCBj
b250ZW50VG9Vc2UpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNoaWxkcmVuVG9Vc2Ug
IT0gbnVsbCkge1xuICAgICAgICB2YXIgbW91bnRJbWFnZXMgPSB0aGlzLm1vdW50Q2hpbGRyZW4o
Y2hpbGRyZW5Ub1VzZSwgdHJhbnNhY3Rpb24sIGNvbnRleHQpO1xuICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IG1vdW50SW1hZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgRE9NTGF6eVRy
ZWUucXVldWVDaGlsZChsYXp5VHJlZSwgbW91bnRJbWFnZXNbaV0pO1xuICAgICAgICB9XG4gICAg
ICB9XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBSZWNlaXZlcyBhIG5leHQgZWxlbWVudCBh
bmQgdXBkYXRlcyB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHBh
cmFtIHtSZWFjdEVsZW1lbnR9IG5leHRFbGVtZW50XG4gICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNp
bGVUcmFuc2FjdGlvbnxSZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9ufSB0cmFuc2FjdGlv
blxuICAgKiBAcGFyYW0ge29iamVjdH0gY29udGV4dFxuICAgKi9cbiAgcmVjZWl2ZUNvbXBvbmVu
dDogZnVuY3Rpb24gKG5leHRFbGVtZW50LCB0cmFuc2FjdGlvbiwgY29udGV4dCkge1xuICAgIHZh
ciBwcmV2RWxlbWVudCA9IHRoaXMuX2N1cnJlbnRFbGVtZW50O1xuICAgIHRoaXMuX2N1cnJlbnRF
bGVtZW50ID0gbmV4dEVsZW1lbnQ7XG4gICAgdGhpcy51cGRhdGVDb21wb25lbnQodHJhbnNhY3Rp
b24sIHByZXZFbGVtZW50LCBuZXh0RWxlbWVudCwgY29udGV4dCk7XG4gIH0sXG5cbiAgLyoqXG4g
ICAqIFVwZGF0ZXMgYSBET00gY29tcG9uZW50IGFmdGVyIGl0IGhhcyBhbHJlYWR5IGJlZW4gYWxs
b2NhdGVkIGFuZFxuICAgKiBhdHRhY2hlZCB0byB0aGUgRE9NLiBSZWNvbmNpbGVzIHRoZSByb290
IERPTSBub2RlLCB0aGVuIHJlY3Vyc2VzLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25j
aWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBw
cmV2RWxlbWVudFxuICAgKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gbmV4dEVsZW1lbnRcbiAgICog
QGludGVybmFsXG4gICAqIEBvdmVycmlkYWJsZVxuICAgKi9cbiAgdXBkYXRlQ29tcG9uZW50OiBm
dW5jdGlvbiAodHJhbnNhY3Rpb24sIHByZXZFbGVtZW50LCBuZXh0RWxlbWVudCwgY29udGV4dCkg
e1xuICAgIHZhciBsYXN0UHJvcHMgPSBwcmV2RWxlbWVudC5wcm9wcztcbiAgICB2YXIgbmV4dFBy
b3BzID0gdGhpcy5fY3VycmVudEVsZW1lbnQucHJvcHM7XG5cbiAgICBzd2l0Y2ggKHRoaXMuX3Rh
Zykge1xuICAgICAgY2FzZSAnaW5wdXQnOlxuICAgICAgICBsYXN0UHJvcHMgPSBSZWFjdERPTUlu
cHV0LmdldEhvc3RQcm9wcyh0aGlzLCBsYXN0UHJvcHMpO1xuICAgICAgICBuZXh0UHJvcHMgPSBS
ZWFjdERPTUlucHV0LmdldEhvc3RQcm9wcyh0aGlzLCBuZXh0UHJvcHMpO1xuICAgICAgICBicmVh
aztcbiAgICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICAgIGxhc3RQcm9wcyA9IFJlYWN0RE9NT3B0
aW9uLmdldEhvc3RQcm9wcyh0aGlzLCBsYXN0UHJvcHMpO1xuICAgICAgICBuZXh0UHJvcHMgPSBS
ZWFjdERPTU9wdGlvbi5nZXRIb3N0UHJvcHModGhpcywgbmV4dFByb3BzKTtcbiAgICAgICAgYnJl
YWs7XG4gICAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgICBsYXN0UHJvcHMgPSBSZWFjdERPTVNl
bGVjdC5nZXRIb3N0UHJvcHModGhpcywgbGFzdFByb3BzKTtcbiAgICAgICAgbmV4dFByb3BzID0g
UmVhY3RET01TZWxlY3QuZ2V0SG9zdFByb3BzKHRoaXMsIG5leHRQcm9wcyk7XG4gICAgICAgIGJy
ZWFrO1xuICAgICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgICBsYXN0UHJvcHMgPSBSZWFjdERP
TVRleHRhcmVhLmdldEhvc3RQcm9wcyh0aGlzLCBsYXN0UHJvcHMpO1xuICAgICAgICBuZXh0UHJv
cHMgPSBSZWFjdERPTVRleHRhcmVhLmdldEhvc3RQcm9wcyh0aGlzLCBuZXh0UHJvcHMpO1xuICAg
ICAgICBicmVhaztcbiAgICB9XG5cbiAgICBhc3NlcnRWYWxpZFByb3BzKHRoaXMsIG5leHRQcm9w
cyk7XG4gICAgdGhpcy5fdXBkYXRlRE9NUHJvcGVydGllcyhsYXN0UHJvcHMsIG5leHRQcm9wcywg
dHJhbnNhY3Rpb24pO1xuICAgIHRoaXMuX3VwZGF0ZURPTUNoaWxkcmVuKGxhc3RQcm9wcywgbmV4
dFByb3BzLCB0cmFuc2FjdGlvbiwgY29udGV4dCk7XG5cbiAgICBzd2l0Y2ggKHRoaXMuX3RhZykg
e1xuICAgICAgY2FzZSAnaW5wdXQnOlxuICAgICAgICAvLyBVcGRhdGUgdGhlIHdyYXBwZXIgYXJv
dW5kIGlucHV0cyAqYWZ0ZXIqIHVwZGF0aW5nIHByb3BzLiBUaGlzIGhhcyB0b1xuICAgICAgICAv
LyBoYXBwZW4gYWZ0ZXIgYF91cGRhdGVET01Qcm9wZXJ0aWVzYC4gT3RoZXJ3aXNlIEhUTUw1IGlu
cHV0IHZhbGlkYXRpb25zXG4gICAgICAgIC8vIHJhaXNlIHdhcm5pbmdzIGFuZCBwcmV2ZW50IHRo
ZSBuZXcgdmFsdWUgZnJvbSBiZWluZyBhc3NpZ25lZC5cbiAgICAgICAgUmVhY3RET01JbnB1dC51
cGRhdGVXcmFwcGVyKHRoaXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RleHRhcmVh
JzpcbiAgICAgICAgUmVhY3RET01UZXh0YXJlYS51cGRhdGVXcmFwcGVyKHRoaXMpO1xuICAgICAg
ICBicmVhaztcbiAgICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICAgIC8vIDxzZWxlY3Q+IHZhbHVl
IHVwZGF0ZSBuZWVkcyB0byBvY2N1ciBhZnRlciA8b3B0aW9uPiBjaGlsZHJlblxuICAgICAgICAv
LyByZWNvbmNpbGlhdGlvblxuICAgICAgICB0cmFuc2FjdGlvbi5nZXRSZWFjdE1vdW50UmVhZHko
KS5lbnF1ZXVlKHBvc3RVcGRhdGVTZWxlY3RXcmFwcGVyLCB0aGlzKTtcbiAgICAgICAgYnJlYWs7
XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBSZWNvbmNpbGVzIHRoZSBwcm9wZXJ0aWVzIGJ5
IGRldGVjdGluZyBkaWZmZXJlbmNlcyBpbiBwcm9wZXJ0eSB2YWx1ZXMgYW5kXG4gICAqIHVwZGF0
aW5nIHRoZSBET00gYXMgbmVjZXNzYXJ5LiBUaGlzIGZ1bmN0aW9uIGlzIHByb2JhYmx5IHRoZSBz
aW5nbGUgbW9zdFxuICAgKiBjcml0aWNhbCBwYXRoIGZvciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRp
b24uXG4gICAqXG4gICAqIFRPRE86IEJlbmNobWFyayB3aGV0aGVyIGNoZWNraW5nIGZvciBjaGFu
Z2VkIHZhbHVlcyBpbiBtZW1vcnkgYWN0dWFsbHlcbiAgICogICAgICAgaW1wcm92ZXMgcGVyZm9y
bWFuY2UgKGVzcGVjaWFsbHkgc3RhdGljYWxseSBwb3NpdGlvbmVkIGVsZW1lbnRzKS5cbiAgICog
VE9ETzogQmVuY2htYXJrIHRoZSBlZmZlY3RzIG9mIHB1dHRpbmcgdGhpcyBhdCB0aGUgdG9wIHNp
bmNlIDk5JSBvZiBwcm9wc1xuICAgKiAgICAgICBkbyBub3QgY2hhbmdlIGZvciBhIGdpdmVuIHJl
Y29uY2lsaWF0aW9uLlxuICAgKiBUT0RPOiBCZW5jaG1hcmsgYXJlYXMgdGhhdCBjYW4gYmUgaW1w
cm92ZWQgd2l0aCBjYWNoaW5nLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge29i
amVjdH0gbGFzdFByb3BzXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuZXh0UHJvcHNcbiAgICogQHBh
cmFtIHs/RE9NRWxlbWVudH0gbm9kZVxuICAgKi9cbiAgX3VwZGF0ZURPTVByb3BlcnRpZXM6IGZ1
bmN0aW9uIChsYXN0UHJvcHMsIG5leHRQcm9wcywgdHJhbnNhY3Rpb24pIHtcbiAgICB2YXIgcHJv
cEtleTtcbiAgICB2YXIgc3R5bGVOYW1lO1xuICAgIHZhciBzdHlsZVVwZGF0ZXM7XG4gICAgZm9y
IChwcm9wS2V5IGluIGxhc3RQcm9wcykge1xuICAgICAgaWYgKG5leHRQcm9wcy5oYXNPd25Qcm9w
ZXJ0eShwcm9wS2V5KSB8fCAhbGFzdFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpIHx8IGxh
c3RQcm9wc1twcm9wS2V5XSA9PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxu
ICAgICAgaWYgKHByb3BLZXkgPT09IFNUWUxFKSB7XG4gICAgICAgIHZhciBsYXN0U3R5bGUgPSB0
aGlzLl9wcmV2aW91c1N0eWxlQ29weTtcbiAgICAgICAgZm9yIChzdHlsZU5hbWUgaW4gbGFzdFN0
eWxlKSB7XG4gICAgICAgICAgaWYgKGxhc3RTdHlsZS5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUp
KSB7XG4gICAgICAgICAgICBzdHlsZVVwZGF0ZXMgPSBzdHlsZVVwZGF0ZXMgfHwge307XG4gICAg
ICAgICAgICBzdHlsZVVwZGF0ZXNbc3R5bGVOYW1lXSA9ICcnO1xuICAgICAgICAgIH1cbiAgICAg
ICAgfVxuICAgICAgICB0aGlzLl9wcmV2aW91c1N0eWxlQ29weSA9IG51bGw7XG4gICAgICB9IGVs
c2UgaWYgKHJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7
XG4gICAgICAgIGlmIChsYXN0UHJvcHNbcHJvcEtleV0pIHtcbiAgICAgICAgICAvLyBPbmx5IGNh
bGwgZGVsZXRlTGlzdGVuZXIgaWYgdGhlcmUgd2FzIGEgbGlzdGVuZXIgcHJldmlvdXNseSBvclxu
ICAgICAgICAgIC8vIGVsc2Ugd2lsbERlbGV0ZUxpc3RlbmVyIGdldHMgY2FsbGVkIHdoZW4gdGhl
cmUgd2Fzbid0IGFjdHVhbGx5IGFcbiAgICAgICAgICAvLyBsaXN0ZW5lciAoZS5nLiwgb25DbGlj
az17bnVsbH0pXG4gICAgICAgICAgZGVsZXRlTGlzdGVuZXIodGhpcywgcHJvcEtleSk7XG4gICAg
ICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNDdXN0b21Db21wb25lbnQodGhpcy5fdGFnLCBsYXN0
UHJvcHMpKSB7XG4gICAgICAgIGlmICghUkVTRVJWRURfUFJPUFMuaGFzT3duUHJvcGVydHkocHJv
cEtleSkpIHtcbiAgICAgICAgICBET01Qcm9wZXJ0eU9wZXJhdGlvbnMuZGVsZXRlVmFsdWVGb3JB
dHRyaWJ1dGUoZ2V0Tm9kZSh0aGlzKSwgcHJvcEtleSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxz
ZSBpZiAoRE9NUHJvcGVydHkucHJvcGVydGllc1twcm9wS2V5XSB8fCBET01Qcm9wZXJ0eS5pc0N1
c3RvbUF0dHJpYnV0ZShwcm9wS2V5KSkge1xuICAgICAgICBET01Qcm9wZXJ0eU9wZXJhdGlvbnMu
ZGVsZXRlVmFsdWVGb3JQcm9wZXJ0eShnZXROb2RlKHRoaXMpLCBwcm9wS2V5KTtcbiAgICAgIH1c
biAgICB9XG4gICAgZm9yIChwcm9wS2V5IGluIG5leHRQcm9wcykge1xuICAgICAgdmFyIG5leHRQ
cm9wID0gbmV4dFByb3BzW3Byb3BLZXldO1xuICAgICAgdmFyIGxhc3RQcm9wID0gcHJvcEtleSA9
PT0gU1RZTEUgPyB0aGlzLl9wcmV2aW91c1N0eWxlQ29weSA6IGxhc3RQcm9wcyAhPSBudWxsID8g
bGFzdFByb3BzW3Byb3BLZXldIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKCFuZXh0UHJvcHMuaGFz
T3duUHJvcGVydHkocHJvcEtleSkgfHwgbmV4dFByb3AgPT09IGxhc3RQcm9wIHx8IG5leHRQcm9w
ID09IG51bGwgJiYgbGFzdFByb3AgPT0gbnVsbCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAg
IH1cbiAgICAgIGlmIChwcm9wS2V5ID09PSBTVFlMRSkge1xuICAgICAgICBpZiAobmV4dFByb3Ap
IHtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykg
e1xuICAgICAgICAgICAgY2hlY2tBbmRXYXJuRm9yTXV0YXRlZFN0eWxlKHRoaXMuX3ByZXZpb3Vz
U3R5bGVDb3B5LCB0aGlzLl9wcmV2aW91c1N0eWxlLCB0aGlzKTtcbiAgICAgICAgICAgIHRoaXMu
X3ByZXZpb3VzU3R5bGUgPSBuZXh0UHJvcDtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmV4dFBy
b3AgPSB0aGlzLl9wcmV2aW91c1N0eWxlQ29weSA9IF9hc3NpZ24oe30sIG5leHRQcm9wKTtcbiAg
ICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9wcmV2aW91c1N0eWxlQ29weSA9IG51bGw7
XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxhc3RQcm9wKSB7XG4gICAgICAgICAgLy8gVW5zZXQg
c3R5bGVzIG9uIGBsYXN0UHJvcGAgYnV0IG5vdCBvbiBgbmV4dFByb3BgLlxuICAgICAgICAgIGZv
ciAoc3R5bGVOYW1lIGluIGxhc3RQcm9wKSB7XG4gICAgICAgICAgICBpZiAobGFzdFByb3AuaGFz
T3duUHJvcGVydHkoc3R5bGVOYW1lKSAmJiAoIW5leHRQcm9wIHx8ICFuZXh0UHJvcC5oYXNPd25Q
cm9wZXJ0eShzdHlsZU5hbWUpKSkge1xuICAgICAgICAgICAgICBzdHlsZVVwZGF0ZXMgPSBzdHls
ZVVwZGF0ZXMgfHwge307XG4gICAgICAgICAgICAgIHN0eWxlVXBkYXRlc1tzdHlsZU5hbWVdID0g
Jyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFVwZGF0ZSBzdHls
ZXMgdGhhdCBjaGFuZ2VkIHNpbmNlIGBsYXN0UHJvcGAuXG4gICAgICAgICAgZm9yIChzdHlsZU5h
bWUgaW4gbmV4dFByb3ApIHtcbiAgICAgICAgICAgIGlmIChuZXh0UHJvcC5oYXNPd25Qcm9wZXJ0
eShzdHlsZU5hbWUpICYmIGxhc3RQcm9wW3N0eWxlTmFtZV0gIT09IG5leHRQcm9wW3N0eWxlTmFt
ZV0pIHtcbiAgICAgICAgICAgICAgc3R5bGVVcGRhdGVzID0gc3R5bGVVcGRhdGVzIHx8IHt9O1xu
ICAgICAgICAgICAgICBzdHlsZVVwZGF0ZXNbc3R5bGVOYW1lXSA9IG5leHRQcm9wW3N0eWxlTmFt
ZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAg
ICAgIC8vIFJlbGllcyBvbiBgdXBkYXRlU3R5bGVzQnlJRGAgbm90IG11dGF0aW5nIGBzdHlsZVVw
ZGF0ZXNgLlxuICAgICAgICAgIHN0eWxlVXBkYXRlcyA9IG5leHRQcm9wO1xuICAgICAgICB9XG4g
ICAgICB9IGVsc2UgaWYgKHJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzLmhhc093blByb3BlcnR5KHBy
b3BLZXkpKSB7XG4gICAgICAgIGlmIChuZXh0UHJvcCkge1xuICAgICAgICAgIGVucXVldWVQdXRM
aXN0ZW5lcih0aGlzLCBwcm9wS2V5LCBuZXh0UHJvcCwgdHJhbnNhY3Rpb24pO1xuICAgICAgICB9
IGVsc2UgaWYgKGxhc3RQcm9wKSB7XG4gICAgICAgICAgZGVsZXRlTGlzdGVuZXIodGhpcywgcHJv
cEtleSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNDdXN0b21Db21wb25lbnQodGhp
cy5fdGFnLCBuZXh0UHJvcHMpKSB7XG4gICAgICAgIGlmICghUkVTRVJWRURfUFJPUFMuaGFzT3du
UHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgICAgICBET01Qcm9wZXJ0eU9wZXJhdGlvbnMuc2V0
VmFsdWVGb3JBdHRyaWJ1dGUoZ2V0Tm9kZSh0aGlzKSwgcHJvcEtleSwgbmV4dFByb3ApO1xuICAg
ICAgICB9XG4gICAgICB9IGVsc2UgaWYgKERPTVByb3BlcnR5LnByb3BlcnRpZXNbcHJvcEtleV0g
fHwgRE9NUHJvcGVydHkuaXNDdXN0b21BdHRyaWJ1dGUocHJvcEtleSkpIHtcbiAgICAgICAgdmFy
IG5vZGUgPSBnZXROb2RlKHRoaXMpO1xuICAgICAgICAvLyBJZiB3ZSdyZSB1cGRhdGluZyB0byBu
dWxsIG9yIHVuZGVmaW5lZCwgd2Ugc2hvdWxkIHJlbW92ZSB0aGUgcHJvcGVydHlcbiAgICAgICAg
Ly8gZnJvbSB0aGUgRE9NIG5vZGUgaW5zdGVhZCBvZiBpbmFkdmVydGVudGx5IHNldHRpbmcgdG8g
YSBzdHJpbmcuIFRoaXNcbiAgICAgICAgLy8gYnJpbmdzIHVzIGluIGxpbmUgd2l0aCB0aGUgc2Ft
ZSBiZWhhdmlvciB3ZSBoYXZlIG9uIGluaXRpYWwgcmVuZGVyLlxuICAgICAgICBpZiAobmV4dFBy
b3AgIT0gbnVsbCkge1xuICAgICAgICAgIERPTVByb3BlcnR5T3BlcmF0aW9ucy5zZXRWYWx1ZUZv
clByb3BlcnR5KG5vZGUsIHByb3BLZXksIG5leHRQcm9wKTtcbiAgICAgICAgfSBlbHNlIHtcbiAg
ICAgICAgICBET01Qcm9wZXJ0eU9wZXJhdGlvbnMuZGVsZXRlVmFsdWVGb3JQcm9wZXJ0eShub2Rl
LCBwcm9wS2V5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc3R5bGVVcGRh
dGVzKSB7XG4gICAgICBDU1NQcm9wZXJ0eU9wZXJhdGlvbnMuc2V0VmFsdWVGb3JTdHlsZXMoZ2V0
Tm9kZSh0aGlzKSwgc3R5bGVVcGRhdGVzLCB0aGlzKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4g
ICAqIFJlY29uY2lsZXMgdGhlIGNoaWxkcmVuIHdpdGggdGhlIHZhcmlvdXMgcHJvcGVydGllcyB0
aGF0IGFmZmVjdCB0aGVcbiAgICogY2hpbGRyZW4gY29udGVudC5cbiAgICpcbiAgICogQHBhcmFt
IHtvYmplY3R9IGxhc3RQcm9wc1xuICAgKiBAcGFyYW0ge29iamVjdH0gbmV4dFByb3BzXG4gICAq
IEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICogQHBh
cmFtIHtvYmplY3R9IGNvbnRleHRcbiAgICovXG4gIF91cGRhdGVET01DaGlsZHJlbjogZnVuY3Rp
b24gKGxhc3RQcm9wcywgbmV4dFByb3BzLCB0cmFuc2FjdGlvbiwgY29udGV4dCkge1xuICAgIHZh
ciBsYXN0Q29udGVudCA9IENPTlRFTlRfVFlQRVNbdHlwZW9mIGxhc3RQcm9wcy5jaGlsZHJlbl0g
PyBsYXN0UHJvcHMuY2hpbGRyZW4gOiBudWxsO1xuICAgIHZhciBuZXh0Q29udGVudCA9IENPTlRF
TlRfVFlQRVNbdHlwZW9mIG5leHRQcm9wcy5jaGlsZHJlbl0gPyBuZXh0UHJvcHMuY2hpbGRyZW4g
OiBudWxsO1xuXG4gICAgdmFyIGxhc3RIdG1sID0gbGFzdFByb3BzLmRhbmdlcm91c2x5U2V0SW5u
ZXJIVE1MICYmIGxhc3RQcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTC5fX2h0bWw7XG4gICAg
dmFyIG5leHRIdG1sID0gbmV4dFByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MICYmIG5leHRQ
cm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTC5fX2h0bWw7XG5cbiAgICAvLyBOb3RlIHRoZSB1
c2Ugb2YgYCE9YCB3aGljaCBjaGVja3MgZm9yIG51bGwgb3IgdW5kZWZpbmVkLlxuICAgIHZhciBs
YXN0Q2hpbGRyZW4gPSBsYXN0Q29udGVudCAhPSBudWxsID8gbnVsbCA6IGxhc3RQcm9wcy5jaGls
ZHJlbjtcbiAgICB2YXIgbmV4dENoaWxkcmVuID0gbmV4dENvbnRlbnQgIT0gbnVsbCA/IG51bGwg
OiBuZXh0UHJvcHMuY2hpbGRyZW47XG5cbiAgICAvLyBJZiB3ZSdyZSBzd2l0Y2hpbmcgZnJvbSBj
aGlsZHJlbiB0byBjb250ZW50L2h0bWwgb3IgdmljZSB2ZXJzYSwgcmVtb3ZlXG4gICAgLy8gdGhl
IG9sZCBjb250ZW50XG4gICAgdmFyIGxhc3RIYXNDb250ZW50T3JIdG1sID0gbGFzdENvbnRlbnQg
IT0gbnVsbCB8fCBsYXN0SHRtbCAhPSBudWxsO1xuICAgIHZhciBuZXh0SGFzQ29udGVudE9ySHRt
bCA9IG5leHRDb250ZW50ICE9IG51bGwgfHwgbmV4dEh0bWwgIT0gbnVsbDtcbiAgICBpZiAobGFz
dENoaWxkcmVuICE9IG51bGwgJiYgbmV4dENoaWxkcmVuID09IG51bGwpIHtcbiAgICAgIHRoaXMu
dXBkYXRlQ2hpbGRyZW4obnVsbCwgdHJhbnNhY3Rpb24sIGNvbnRleHQpO1xuICAgIH0gZWxzZSBp
ZiAobGFzdEhhc0NvbnRlbnRPckh0bWwgJiYgIW5leHRIYXNDb250ZW50T3JIdG1sKSB7XG4gICAg
ICB0aGlzLnVwZGF0ZVRleHRDb250ZW50KCcnKTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RF
X0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRl
YnVnVG9vbC5vblNldENoaWxkcmVuKHRoaXMuX2RlYnVnSUQsIFtdKTtcbiAgICAgIH1cbiAgICB9
XG5cbiAgICBpZiAobmV4dENvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgaWYgKGxhc3RDb250ZW50
ICE9PSBuZXh0Q29udGVudCkge1xuICAgICAgICB0aGlzLnVwZGF0ZVRleHRDb250ZW50KCcnICsg
bmV4dENvbnRlbnQpO1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9k
dWN0aW9uJykge1xuICAgICAgICAgIHNldEFuZFZhbGlkYXRlQ29udGVudENoaWxkRGV2LmNhbGwo
dGhpcywgbmV4dENvbnRlbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChu
ZXh0SHRtbCAhPSBudWxsKSB7XG4gICAgICBpZiAobGFzdEh0bWwgIT09IG5leHRIdG1sKSB7XG4g
ICAgICAgIHRoaXMudXBkYXRlTWFya3VwKCcnICsgbmV4dEh0bWwpO1xuICAgICAgfVxuICAgICAg
aWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgUmVh
Y3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uU2V0Q2hpbGRyZW4odGhpcy5fZGVidWdJRCwg
W10pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobmV4dENoaWxkcmVuICE9IG51bGwpIHtcbiAg
ICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAg
IHNldEFuZFZhbGlkYXRlQ29udGVudENoaWxkRGV2LmNhbGwodGhpcywgbnVsbCk7XG4gICAgICB9
XG5cbiAgICAgIHRoaXMudXBkYXRlQ2hpbGRyZW4obmV4dENoaWxkcmVuLCB0cmFuc2FjdGlvbiwg
Y29udGV4dCk7XG4gICAgfVxuICB9LFxuXG4gIGdldEhvc3ROb2RlOiBmdW5jdGlvbiAoKSB7XG4g
ICAgcmV0dXJuIGdldE5vZGUodGhpcyk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIGFs
bCBldmVudCByZWdpc3RyYXRpb25zIGZvciB0aGlzIGluc3RhbmNlLiBEb2VzIG5vdCByZW1vdmUg
ZnJvbVxuICAgKiB0aGUgRE9NLiBUaGF0IG11c3QgYmUgZG9uZSBieSB0aGUgcGFyZW50LlxuICAg
KlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHVubW91bnRDb21wb25lbnQ6IGZ1bmN0aW9uIChz
YWZlbHkpIHtcbiAgICBzd2l0Y2ggKHRoaXMuX3RhZykge1xuICAgICAgY2FzZSAnYXVkaW8nOlxu
ICAgICAgY2FzZSAnZm9ybSc6XG4gICAgICBjYXNlICdpZnJhbWUnOlxuICAgICAgY2FzZSAnaW1n
JzpcbiAgICAgIGNhc2UgJ2xpbmsnOlxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgIGNhc2Ug
J3NvdXJjZSc6XG4gICAgICBjYXNlICd2aWRlbyc6XG4gICAgICAgIHZhciBsaXN0ZW5lcnMgPSB0
aGlzLl93cmFwcGVyU3RhdGUubGlzdGVuZXJzO1xuICAgICAgICBpZiAobGlzdGVuZXJzKSB7XG4g
ICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHtcbiAg
ICAgICAgICAgIGxpc3RlbmVyc1tpXS5yZW1vdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1c
biAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdpbnB1dCc6XG4gICAgICBjYXNlICd0ZXh0YXJl
YSc6XG4gICAgICAgIGlucHV0VmFsdWVUcmFja2luZy5zdG9wVHJhY2tpbmcodGhpcyk7XG4gICAg
ICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaHRtbCc6XG4gICAgICBjYXNlICdoZWFkJzpcbiAgICAg
IGNhc2UgJ2JvZHknOlxuICAgICAgICAvKipcbiAgICAgICAgICogQ29tcG9uZW50cyBsaWtlIDxo
dG1sPiA8aGVhZD4gYW5kIDxib2R5PiBjYW4ndCBiZSByZW1vdmVkIG9yIGFkZGVkXG4gICAgICAg
ICAqIGVhc2lseSBpbiBhIGNyb3NzLWJyb3dzZXIgd2F5LCBob3dldmVyIGl0J3MgdmFsdWFibGUg
dG8gYmUgYWJsZSB0b1xuICAgICAgICAgKiB0YWtlIGFkdmFudGFnZSBvZiBSZWFjdCdzIHJlY29u
Y2lsaWF0aW9uIGZvciBzdHlsaW5nIGFuZCA8dGl0bGU+XG4gICAgICAgICAqIG1hbmFnZW1lbnQu
IFNvIHdlIGp1c3QgZG9jdW1lbnQgaXQgYW5kIHRocm93IGluIGRhbmdlcm91cyBjYXNlcy5cbiAg
ICAgICAgICovXG4gICAgICAgICFmYWxzZSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJv
ZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICc8JXM+IHRyaWVkIHRvIHVubW91bnQuIEJlY2F1
c2Ugb2YgY3Jvc3MtYnJvd3NlciBxdWlya3MgaXQgaXMgaW1wb3NzaWJsZSB0byB1bm1vdW50IHNv
bWUgdG9wLWxldmVsIGNvbXBvbmVudHMgKGVnIDxodG1sPiwgPGhlYWQ+LCBhbmQgPGJvZHk+KSBy
ZWxpYWJseSBhbmQgZWZmaWNpZW50bHkuIFRvIGZpeCB0aGlzLCBoYXZlIGEgc2luZ2xlIHRvcC1s
ZXZlbCBjb21wb25lbnQgdGhhdCBuZXZlciB1bm1vdW50cyByZW5kZXIgdGhlc2UgZWxlbWVudHMu
JywgdGhpcy5fdGFnKSA6IF9wcm9kSW52YXJpYW50KCc2NicsIHRoaXMuX3RhZykgOiB2b2lkIDA7
XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMudW5tb3VudENoaWxkcmVuKHNhZmVs
eSk7XG4gICAgUmVhY3RET01Db21wb25lbnRUcmVlLnVuY2FjaGVOb2RlKHRoaXMpO1xuICAgIEV2
ZW50UGx1Z2luSHViLmRlbGV0ZUFsbExpc3RlbmVycyh0aGlzKTtcbiAgICB0aGlzLl9yb290Tm9k
ZUlEID0gMDtcbiAgICB0aGlzLl9kb21JRCA9IDA7XG4gICAgdGhpcy5fd3JhcHBlclN0YXRlID0g
bnVsbDtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7
XG4gICAgICBzZXRBbmRWYWxpZGF0ZUNvbnRlbnRDaGlsZERldi5jYWxsKHRoaXMsIG51bGwpO1xu
ICAgIH1cbiAgfSxcblxuICBnZXRQdWJsaWNJbnN0YW5jZTogZnVuY3Rpb24gKCkge1xuICAgIHJl
dHVybiBnZXROb2RlKHRoaXMpO1xuICB9XG59O1xuXG5fYXNzaWduKFJlYWN0RE9NQ29tcG9uZW50
LnByb3RvdHlwZSwgUmVhY3RET01Db21wb25lbnQuTWl4aW4sIFJlYWN0TXVsdGlDaGlsZC5NaXhp
bik7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RET01Db21wb25lbnQ7XG5cblxuLy8vLy8vLy8v
Ly8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9t
L2xpYi9SZWFjdERPTUNvbXBvbmVudC5qc1xuLy8gbW9kdWxlIGlkID0gMTM4XG4vLyBtb2R1bGUg
Y2h1bmtzID0gMCIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIElu
Yy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBs
aWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNF
TlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFk
ZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQ
QVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmlj
dCc7XG5cbnZhciBSZWFjdERPTUNvbXBvbmVudFRyZWUgPSByZXF1aXJlKCcuL1JlYWN0RE9NQ29t
cG9uZW50VHJlZScpO1xuXG52YXIgZm9jdXNOb2RlID0gcmVxdWlyZSgnZmJqcy9saWIvZm9jdXNO
b2RlJyk7XG5cbnZhciBBdXRvRm9jdXNVdGlscyA9IHtcbiAgZm9jdXNET01Db21wb25lbnQ6IGZ1
bmN0aW9uICgpIHtcbiAgICBmb2N1c05vZGUoUmVhY3RET01Db21wb25lbnRUcmVlLmdldE5vZGVG
cm9tSW5zdGFuY2UodGhpcykpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEF1dG9Gb2N1
c1V0aWxzO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4v
bm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvQXV0b0ZvY3VzVXRpbHMuanNcbi8vIG1vZHVsZSBp
ZCA9IDEzOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXBy
ZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRo
aXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZv
dW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlz
IHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNh
biBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAq
XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgQ1NTUHJvcGVydHkgPSByZXF1aXJlKCcuL0NT
U1Byb3BlcnR5Jyk7XG52YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSByZXF1aXJlKCdmYmpzL2xp
Yi9FeGVjdXRpb25FbnZpcm9ubWVudCcpO1xudmFyIFJlYWN0SW5zdHJ1bWVudGF0aW9uID0gcmVx
dWlyZSgnLi9SZWFjdEluc3RydW1lbnRhdGlvbicpO1xuXG52YXIgY2FtZWxpemVTdHlsZU5hbWUg
PSByZXF1aXJlKCdmYmpzL2xpYi9jYW1lbGl6ZVN0eWxlTmFtZScpO1xudmFyIGRhbmdlcm91c1N0
eWxlVmFsdWUgPSByZXF1aXJlKCcuL2Rhbmdlcm91c1N0eWxlVmFsdWUnKTtcbnZhciBoeXBoZW5h
dGVTdHlsZU5hbWUgPSByZXF1aXJlKCdmYmpzL2xpYi9oeXBoZW5hdGVTdHlsZU5hbWUnKTtcbnZh
ciBtZW1vaXplU3RyaW5nT25seSA9IHJlcXVpcmUoJ2ZianMvbGliL21lbW9pemVTdHJpbmdPbmx5
Jyk7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoJ2ZianMvbGliL3dhcm5pbmcnKTtcblxudmFyIHBy
b2Nlc3NTdHlsZU5hbWUgPSBtZW1vaXplU3RyaW5nT25seShmdW5jdGlvbiAoc3R5bGVOYW1lKSB7
XG4gIHJldHVybiBoeXBoZW5hdGVTdHlsZU5hbWUoc3R5bGVOYW1lKTtcbn0pO1xuXG52YXIgaGFz
U2hvcnRoYW5kUHJvcGVydHlCdWcgPSBmYWxzZTtcbnZhciBzdHlsZUZsb2F0QWNjZXNzb3IgPSAn
Y3NzRmxvYXQnO1xuaWYgKEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSkge1xuICB2YXIg
dGVtcFN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jykuc3R5bGU7XG4gIHRyeSB7
XG4gICAgLy8gSUU4IHRocm93cyBcIkludmFsaWQgYXJndW1lbnQuXCIgaWYgcmVzZXR0aW5nIHNo
b3J0aGFuZCBzdHlsZSBwcm9wZXJ0aWVzLlxuICAgIHRlbXBTdHlsZS5mb250ID0gJyc7XG4gIH0g
Y2F0Y2ggKGUpIHtcbiAgICBoYXNTaG9ydGhhbmRQcm9wZXJ0eUJ1ZyA9IHRydWU7XG4gIH1cbiAg
Ly8gSUU4IG9ubHkgc3VwcG9ydHMgYWNjZXNzaW5nIGNzc0Zsb2F0IChzdGFuZGFyZCkgYXMgc3R5
bGVGbG9hdFxuICBpZiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmNzc0Zsb2F0ID09
PSB1bmRlZmluZWQpIHtcbiAgICBzdHlsZUZsb2F0QWNjZXNzb3IgPSAnc3R5bGVGbG9hdCc7XG4g
IH1cbn1cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAg
Ly8gJ21zVHJhbnNmb3JtJyBpcyBjb3JyZWN0LCBidXQgdGhlIG90aGVyIHByZWZpeGVzIHNob3Vs
ZCBiZSBjYXBpdGFsaXplZFxuICB2YXIgYmFkVmVuZG9yZWRTdHlsZU5hbWVQYXR0ZXJuID0gL14o
Pzp3ZWJraXR8bW96fG8pW0EtWl0vO1xuXG4gIC8vIHN0eWxlIHZhbHVlcyBzaG91bGRuJ3QgY29u
dGFpbiBhIHNlbWljb2xvblxuICB2YXIgYmFkU3R5bGVWYWx1ZVdpdGhTZW1pY29sb25QYXR0ZXJu
ID0gLztcXHMqJC87XG5cbiAgdmFyIHdhcm5lZFN0eWxlTmFtZXMgPSB7fTtcbiAgdmFyIHdhcm5l
ZFN0eWxlVmFsdWVzID0ge307XG4gIHZhciB3YXJuZWRGb3JOYU5WYWx1ZSA9IGZhbHNlO1xuXG4g
IHZhciB3YXJuSHlwaGVuYXRlZFN0eWxlTmFtZSA9IGZ1bmN0aW9uIChuYW1lLCBvd25lcikge1xu
ICAgIGlmICh3YXJuZWRTdHlsZU5hbWVzLmhhc093blByb3BlcnR5KG5hbWUpICYmIHdhcm5lZFN0
eWxlTmFtZXNbbmFtZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRTdHls
ZU5hbWVzW25hbWVdID0gdHJ1ZTtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1
Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ1Vuc3VwcG9ydGVkIHN0eWxlIHByb3BlcnR5ICVzLiBE
aWQgeW91IG1lYW4gJXM/JXMnLCBuYW1lLCBjYW1lbGl6ZVN0eWxlTmFtZShuYW1lKSwgY2hlY2tS
ZW5kZXJNZXNzYWdlKG93bmVyKSkgOiB2b2lkIDA7XG4gIH07XG5cbiAgdmFyIHdhcm5CYWRWZW5k
b3JlZFN0eWxlTmFtZSA9IGZ1bmN0aW9uIChuYW1lLCBvd25lcikge1xuICAgIGlmICh3YXJuZWRT
dHlsZU5hbWVzLmhhc093blByb3BlcnR5KG5hbWUpICYmIHdhcm5lZFN0eWxlTmFtZXNbbmFtZV0p
IHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRTdHlsZU5hbWVzW25hbWVdID0g
dHJ1ZTtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2Fybmlu
ZyhmYWxzZSwgJ1Vuc3VwcG9ydGVkIHZlbmRvci1wcmVmaXhlZCBzdHlsZSBwcm9wZXJ0eSAlcy4g
RGlkIHlvdSBtZWFuICVzPyVzJywgbmFtZSwgbmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSAr
IG5hbWUuc2xpY2UoMSksIGNoZWNrUmVuZGVyTWVzc2FnZShvd25lcikpIDogdm9pZCAwO1xuICB9
O1xuXG4gIHZhciB3YXJuU3R5bGVWYWx1ZVdpdGhTZW1pY29sb24gPSBmdW5jdGlvbiAobmFtZSwg
dmFsdWUsIG93bmVyKSB7XG4gICAgaWYgKHdhcm5lZFN0eWxlVmFsdWVzLmhhc093blByb3BlcnR5
KHZhbHVlKSAmJiB3YXJuZWRTdHlsZVZhbHVlc1t2YWx1ZV0pIHtcbiAgICAgIHJldHVybjtcbiAg
ICB9XG5cbiAgICB3YXJuZWRTdHlsZVZhbHVlc1t2YWx1ZV0gPSB0cnVlO1xuICAgIHByb2Nlc3Mu
ZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCBcIlN0eWxlIHBy
b3BlcnR5IHZhbHVlcyBzaG91bGRuJ3QgY29udGFpbiBhIHNlbWljb2xvbi4lcyBcIiArICdUcnkg
XCIlczogJXNcIiBpbnN0ZWFkLicsIGNoZWNrUmVuZGVyTWVzc2FnZShvd25lciksIG5hbWUsIHZh
bHVlLnJlcGxhY2UoYmFkU3R5bGVWYWx1ZVdpdGhTZW1pY29sb25QYXR0ZXJuLCAnJykpIDogdm9p
ZCAwO1xuICB9O1xuXG4gIHZhciB3YXJuU3R5bGVWYWx1ZUlzTmFOID0gZnVuY3Rpb24gKG5hbWUs
IHZhbHVlLCBvd25lcikge1xuICAgIGlmICh3YXJuZWRGb3JOYU5WYWx1ZSkge1xuICAgICAgcmV0
dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZEZvck5hTlZhbHVlID0gdHJ1ZTtcbiAgICBwcm9jZXNz
LmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ2BOYU5gIGlz
IGFuIGludmFsaWQgdmFsdWUgZm9yIHRoZSBgJXNgIGNzcyBzdHlsZSBwcm9wZXJ0eS4lcycsIG5h
bWUsIGNoZWNrUmVuZGVyTWVzc2FnZShvd25lcikpIDogdm9pZCAwO1xuICB9O1xuXG4gIHZhciBj
aGVja1JlbmRlck1lc3NhZ2UgPSBmdW5jdGlvbiAob3duZXIpIHtcbiAgICBpZiAob3duZXIpIHtc
biAgICAgIHZhciBuYW1lID0gb3duZXIuZ2V0TmFtZSgpO1xuICAgICAgaWYgKG5hbWUpIHtcbiAg
ICAgICAgcmV0dXJuICcgQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBuYW1lICsgJ2Au
JztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9O1xuXG4gIC8qKlxuICAgKiBA
cGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7
UmVhY3RET01Db21wb25lbnR9IGNvbXBvbmVudFxuICAgKi9cbiAgdmFyIHdhcm5WYWxpZFN0eWxl
ID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlLCBjb21wb25lbnQpIHtcbiAgICB2YXIgb3duZXI7XG4g
ICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgb3duZXIgPSBjb21wb25lbnQuX2N1cnJlbnRFbGVt
ZW50Ll9vd25lcjtcbiAgICB9XG4gICAgaWYgKG5hbWUuaW5kZXhPZignLScpID4gLTEpIHtcbiAg
ICAgIHdhcm5IeXBoZW5hdGVkU3R5bGVOYW1lKG5hbWUsIG93bmVyKTtcbiAgICB9IGVsc2UgaWYg
KGJhZFZlbmRvcmVkU3R5bGVOYW1lUGF0dGVybi50ZXN0KG5hbWUpKSB7XG4gICAgICB3YXJuQmFk
VmVuZG9yZWRTdHlsZU5hbWUobmFtZSwgb3duZXIpO1xuICAgIH0gZWxzZSBpZiAoYmFkU3R5bGVW
YWx1ZVdpdGhTZW1pY29sb25QYXR0ZXJuLnRlc3QodmFsdWUpKSB7XG4gICAgICB3YXJuU3R5bGVW
YWx1ZVdpdGhTZW1pY29sb24obmFtZSwgdmFsdWUsIG93bmVyKTtcbiAgICB9XG5cbiAgICBpZiAo
dHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBpc05hTih2YWx1ZSkpIHtcbiAgICAgIHdhcm5T
dHlsZVZhbHVlSXNOYU4obmFtZSwgdmFsdWUsIG93bmVyKTtcbiAgICB9XG4gIH07XG59XG5cbi8q
KlxuICogT3BlcmF0aW9ucyBmb3IgZGVhbGluZyB3aXRoIENTUyBwcm9wZXJ0aWVzLlxuICovXG52
YXIgQ1NTUHJvcGVydHlPcGVyYXRpb25zID0ge1xuICAvKipcbiAgICogU2VyaWFsaXplcyBhIG1h
cHBpbmcgb2Ygc3R5bGUgcHJvcGVydGllcyBmb3IgdXNlIGFzIGlubGluZSBzdHlsZXM6XG4gICAq
XG4gICAqICAgPiBjcmVhdGVNYXJrdXBGb3JTdHlsZXMoe3dpZHRoOiAnMjAwcHgnLCBoZWlnaHQ6
IDB9KVxuICAgKiAgIFwid2lkdGg6MjAwcHg7aGVpZ2h0OjA7XCJcbiAgICpcbiAgICogVW5kZWZp
bmVkIHZhbHVlcyBhcmUgaWdub3JlZCBzbyB0aGF0IGRlY2xhcmF0aXZlIHByb2dyYW1taW5nIGlz
IGVhc2llci5cbiAgICogVGhlIHJlc3VsdCBzaG91bGQgYmUgSFRNTC1lc2NhcGVkIGJlZm9yZSBp
bnNlcnRpb24gaW50byB0aGUgRE9NLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gc3R5bGVz
XG4gICAqIEBwYXJhbSB7UmVhY3RET01Db21wb25lbnR9IGNvbXBvbmVudFxuICAgKiBAcmV0dXJu
IHs/c3RyaW5nfVxuICAgKi9cbiAgY3JlYXRlTWFya3VwRm9yU3R5bGVzOiBmdW5jdGlvbiAoc3R5
bGVzLCBjb21wb25lbnQpIHtcbiAgICB2YXIgc2VyaWFsaXplZCA9ICcnO1xuICAgIGZvciAodmFy
IHN0eWxlTmFtZSBpbiBzdHlsZXMpIHtcbiAgICAgIGlmICghc3R5bGVzLmhhc093blByb3BlcnR5
KHN0eWxlTmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgaXND
dXN0b21Qcm9wZXJ0eSA9IHN0eWxlTmFtZS5pbmRleE9mKCctLScpID09PSAwO1xuICAgICAgdmFy
IHN0eWxlVmFsdWUgPSBzdHlsZXNbc3R5bGVOYW1lXTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5O
T0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmICghaXNDdXN0b21Qcm9wZXJ0
eSkge1xuICAgICAgICAgIHdhcm5WYWxpZFN0eWxlKHN0eWxlTmFtZSwgc3R5bGVWYWx1ZSwgY29t
cG9uZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHN0eWxlVmFsdWUgIT0gbnVs
bCkge1xuICAgICAgICBzZXJpYWxpemVkICs9IHByb2Nlc3NTdHlsZU5hbWUoc3R5bGVOYW1lKSAr
ICc6JztcbiAgICAgICAgc2VyaWFsaXplZCArPSBkYW5nZXJvdXNTdHlsZVZhbHVlKHN0eWxlTmFt
ZSwgc3R5bGVWYWx1ZSwgY29tcG9uZW50LCBpc0N1c3RvbVByb3BlcnR5KSArICc7JztcbiAgICAg
IH1cbiAgICB9XG4gICAgcmV0dXJuIHNlcmlhbGl6ZWQgfHwgbnVsbDtcbiAgfSxcblxuICAvKipc
biAgICogU2V0cyB0aGUgdmFsdWUgZm9yIG11bHRpcGxlIHN0eWxlcyBvbiBhIG5vZGUuICBJZiBh
IHZhbHVlIGlzIHNwZWNpZmllZCBhc1xuICAgKiAnJyAoZW1wdHkgc3RyaW5nKSwgdGhlIGNvcnJl
c3BvbmRpbmcgc3R5bGUgcHJvcGVydHkgd2lsbCBiZSB1bnNldC5cbiAgICpcbiAgICogQHBhcmFt
IHtET01FbGVtZW50fSBub2RlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzdHlsZXNcbiAgICogQHBh
cmFtIHtSZWFjdERPTUNvbXBvbmVudH0gY29tcG9uZW50XG4gICAqL1xuICBzZXRWYWx1ZUZvclN0
eWxlczogZnVuY3Rpb24gKG5vZGUsIHN0eWxlcywgY29tcG9uZW50KSB7XG4gICAgaWYgKHByb2Nl
c3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIFJlYWN0SW5zdHJ1bWVu
dGF0aW9uLmRlYnVnVG9vbC5vbkhvc3RPcGVyYXRpb24oe1xuICAgICAgICBpbnN0YW5jZUlEOiBj
b21wb25lbnQuX2RlYnVnSUQsXG4gICAgICAgIHR5cGU6ICd1cGRhdGUgc3R5bGVzJyxcbiAgICAg
ICAgcGF5bG9hZDogc3R5bGVzXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgc3R5bGUgPSBu
b2RlLnN0eWxlO1xuICAgIGZvciAodmFyIHN0eWxlTmFtZSBpbiBzdHlsZXMpIHtcbiAgICAgIGlm
ICghc3R5bGVzLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpIHtcbiAgICAgICAgY29udGludWU7
XG4gICAgICB9XG4gICAgICB2YXIgaXNDdXN0b21Qcm9wZXJ0eSA9IHN0eWxlTmFtZS5pbmRleE9m
KCctLScpID09PSAwO1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVj
dGlvbicpIHtcbiAgICAgICAgaWYgKCFpc0N1c3RvbVByb3BlcnR5KSB7XG4gICAgICAgICAgd2Fy
blZhbGlkU3R5bGUoc3R5bGVOYW1lLCBzdHlsZXNbc3R5bGVOYW1lXSwgY29tcG9uZW50KTtcbiAg
ICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIHN0eWxlVmFsdWUgPSBkYW5nZXJvdXNTdHlsZVZh
bHVlKHN0eWxlTmFtZSwgc3R5bGVzW3N0eWxlTmFtZV0sIGNvbXBvbmVudCwgaXNDdXN0b21Qcm9w
ZXJ0eSk7XG4gICAgICBpZiAoc3R5bGVOYW1lID09PSAnZmxvYXQnIHx8IHN0eWxlTmFtZSA9PT0g
J2Nzc0Zsb2F0Jykge1xuICAgICAgICBzdHlsZU5hbWUgPSBzdHlsZUZsb2F0QWNjZXNzb3I7XG4g
ICAgICB9XG4gICAgICBpZiAoaXNDdXN0b21Qcm9wZXJ0eSkge1xuICAgICAgICBzdHlsZS5zZXRQ
cm9wZXJ0eShzdHlsZU5hbWUsIHN0eWxlVmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChzdHlsZVZh
bHVlKSB7XG4gICAgICAgIHN0eWxlW3N0eWxlTmFtZV0gPSBzdHlsZVZhbHVlO1xuICAgICAgfSBl
bHNlIHtcbiAgICAgICAgdmFyIGV4cGFuc2lvbiA9IGhhc1Nob3J0aGFuZFByb3BlcnR5QnVnICYm
IENTU1Byb3BlcnR5LnNob3J0aGFuZFByb3BlcnR5RXhwYW5zaW9uc1tzdHlsZU5hbWVdO1xuICAg
ICAgICBpZiAoZXhwYW5zaW9uKSB7XG4gICAgICAgICAgLy8gU2hvcnRoYW5kIHByb3BlcnR5IHRo
YXQgSUU4IHdvbid0IGxpa2UgdW5zZXR0aW5nLCBzbyB1bnNldCBlYWNoXG4gICAgICAgICAgLy8g
Y29tcG9uZW50IHRvIHBsYWNhdGUgaXRcbiAgICAgICAgICBmb3IgKHZhciBpbmRpdmlkdWFsU3R5
bGVOYW1lIGluIGV4cGFuc2lvbikge1xuICAgICAgICAgICAgc3R5bGVbaW5kaXZpZHVhbFN0eWxl
TmFtZV0gPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3R5
bGVbc3R5bGVOYW1lXSA9ICcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xu
XG5tb2R1bGUuZXhwb3J0cyA9IENTU1Byb3BlcnR5T3BlcmF0aW9ucztcblxuXG4vLy8vLy8vLy8v
Ly8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20v
bGliL0NTU1Byb3BlcnR5T3BlcmF0aW9ucy5qc1xuLy8gbW9kdWxlIGlkID0gMTQwXG4vLyBtb2R1
bGUgY2h1bmtzID0gMCIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vi
b29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNv
ZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxu
ICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVl
LiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBp
biB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAdHlwZWNo
ZWNrc1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGNhbWVsaXplID0gcmVxdWlyZSgnLi9j
YW1lbGl6ZScpO1xuXG52YXIgbXNQYXR0ZXJuID0gL14tbXMtLztcblxuLyoqXG4gKiBDYW1lbGNh
c2VzIGEgaHlwaGVuYXRlZCBDU1MgcHJvcGVydHkgbmFtZSwgZm9yIGV4YW1wbGU6XG4gKlxuICog
ICA+IGNhbWVsaXplU3R5bGVOYW1lKCdiYWNrZ3JvdW5kLWNvbG9yJylcbiAqICAgPCBcImJhY2tn
cm91bmRDb2xvclwiXG4gKiAgID4gY2FtZWxpemVTdHlsZU5hbWUoJy1tb3otdHJhbnNpdGlvbicp
XG4gKiAgIDwgXCJNb3pUcmFuc2l0aW9uXCJcbiAqICAgPiBjYW1lbGl6ZVN0eWxlTmFtZSgnLW1z
LXRyYW5zaXRpb24nKVxuICogICA8IFwibXNUcmFuc2l0aW9uXCJcbiAqXG4gKiBBcyBBbmRpIFNt
aXRoIHN1Z2dlc3RzXG4gKiAoaHR0cDovL3d3dy5hbmRpc21pdGguY29tL2Jsb2cvMjAxMi8wMi9t
b2Rlcm5penItcHJlZml4ZWQvKSwgYW4gYC1tc2AgcHJlZml4XG4gKiBpcyBjb252ZXJ0ZWQgdG8g
bG93ZXJjYXNlIGBtc2AuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZ1xuICogQHJldHVy
biB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBjYW1lbGl6ZVN0eWxlTmFtZShzdHJpbmcpIHtcbiAg
cmV0dXJuIGNhbWVsaXplKHN0cmluZy5yZXBsYWNlKG1zUGF0dGVybiwgJ21zLScpKTtcbn1cblxu
bW9kdWxlLmV4cG9ydHMgPSBjYW1lbGl6ZVN0eWxlTmFtZTtcblxuXG4vLy8vLy8vLy8vLy8vLy8v
Ly9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9jYW1lbGl6
ZVN0eWxlTmFtZS5qc1xuLy8gbW9kdWxlIGlkID0gMTQxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIs
IlwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBG
YWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJj
ZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0
aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2Ug
dHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91
bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHR5
cGVjaGVja3NcbiAqL1xuXG52YXIgX2h5cGhlblBhdHRlcm4gPSAvLSguKS9nO1xuXG4vKipcbiAq
IENhbWVsY2FzZXMgYSBoeXBoZW5hdGVkIHN0cmluZywgZm9yIGV4YW1wbGU6XG4gKlxuICogICA+
IGNhbWVsaXplKCdiYWNrZ3JvdW5kLWNvbG9yJylcbiAqICAgPCBcImJhY2tncm91bmRDb2xvclwi
XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZ1xuICogQHJldHVybiB7c3RyaW5nfVxuICov
XG5mdW5jdGlvbiBjYW1lbGl6ZShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKF9o
eXBoZW5QYXR0ZXJuLCBmdW5jdGlvbiAoXywgY2hhcmFjdGVyKSB7XG4gICAgcmV0dXJuIGNoYXJh
Y3Rlci50b1VwcGVyQ2FzZSgpO1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYW1lbGl6
ZTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVf
bW9kdWxlcy9mYmpzL2xpYi9jYW1lbGl6ZS5qc1xuLy8gbW9kdWxlIGlkID0gMTQyXG4vLyBtb2R1
bGUgY2h1bmtzID0gMCIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ss
IEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBp
cyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBM
SUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFu
IGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRo
ZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0
cmljdCc7XG5cbnZhciBDU1NQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vQ1NTUHJvcGVydHknKTtcbnZh
ciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuXG52YXIgaXNVbml0bGVz
c051bWJlciA9IENTU1Byb3BlcnR5LmlzVW5pdGxlc3NOdW1iZXI7XG52YXIgc3R5bGVXYXJuaW5n
cyA9IHt9O1xuXG4vKipcbiAqIENvbnZlcnQgYSB2YWx1ZSBpbnRvIHRoZSBwcm9wZXIgY3NzIHdy
aXRhYmxlIHZhbHVlLiBUaGUgc3R5bGUgbmFtZSBgbmFtZWBcbiAqIHNob3VsZCBiZSBsb2dpY2Fs
IChubyBoeXBoZW5zKSwgYXMgc3BlY2lmaWVkXG4gKiBpbiBgQ1NTUHJvcGVydHkuaXNVbml0bGVz
c051bWJlcmAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgQ1NTIHByb3BlcnR5IG5hbWUg
c3VjaCBhcyBgdG9wTWFyZ2luYC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQ1NTIHByb3BlcnR5IHZh
bHVlIHN1Y2ggYXMgYDEwcHhgLlxuICogQHBhcmFtIHtSZWFjdERPTUNvbXBvbmVudH0gY29tcG9u
ZW50XG4gKiBAcmV0dXJuIHtzdHJpbmd9IE5vcm1hbGl6ZWQgc3R5bGUgdmFsdWUgd2l0aCBkaW1l
bnNpb25zIGFwcGxpZWQuXG4gKi9cbmZ1bmN0aW9uIGRhbmdlcm91c1N0eWxlVmFsdWUobmFtZSwg
dmFsdWUsIGNvbXBvbmVudCwgaXNDdXN0b21Qcm9wZXJ0eSkge1xuICAvLyBOb3RlIHRoYXQgd2Un
dmUgcmVtb3ZlZCBlc2NhcGVUZXh0Rm9yQnJvd3NlcigpIGNhbGxzIGhlcmUgc2luY2UgdGhlXG4g
IC8vIHdob2xlIHN0cmluZyB3aWxsIGJlIGVzY2FwZWQgd2hlbiB0aGUgYXR0cmlidXRlIGlzIGlu
amVjdGVkIGludG9cbiAgLy8gdGhlIG1hcmt1cC4gSWYgeW91IHByb3ZpZGUgdW5zYWZlIHVzZXIg
ZGF0YSBoZXJlIHRoZXkgY2FuIGluamVjdFxuICAvLyBhcmJpdHJhcnkgQ1NTIHdoaWNoIG1heSBi
ZSBwcm9ibGVtYXRpYyAoSSBjb3VsZG4ndCByZXBybyB0aGlzKTpcbiAgLy8gaHR0cHM6Ly93d3cu
b3dhc3Aub3JnL2luZGV4LnBocC9YU1NfRmlsdGVyX0V2YXNpb25fQ2hlYXRfU2hlZXRcbiAgLy8g
aHR0cDovL3d3dy50aGVzcGFubmVyLmNvLnVrLzIwMDcvMTEvMjYvdWx0aW1hdGUteHNzLWNzcy1p
bmplY3Rpb24vXG4gIC8vIFRoaXMgaXMgbm90IGFuIFhTUyBob2xlIGJ1dCBpbnN0ZWFkIGEgcG90
ZW50aWFsIENTUyBpbmplY3Rpb24gaXNzdWVcbiAgLy8gd2hpY2ggaGFzIGxlYWQgdG8gYSBncmVh
dGVyIGRpc2N1c3Npb24gYWJvdXQgaG93IHdlJ3JlIGdvaW5nIHRvXG4gIC8vIHRydXN0IFVSTHMg
bW92aW5nIGZvcndhcmQuIFNlZSAjMjExNTkwMVxuXG4gIHZhciBpc0VtcHR5ID0gdmFsdWUgPT0g
bnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fCB2YWx1ZSA9PT0gJyc7XG4gIGlm
IChpc0VtcHR5KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgdmFyIGlzTm9uTnVtZXJpYyA9
IGlzTmFOKHZhbHVlKTtcbiAgaWYgKGlzQ3VzdG9tUHJvcGVydHkgfHwgaXNOb25OdW1lcmljIHx8
IHZhbHVlID09PSAwIHx8IGlzVW5pdGxlc3NOdW1iZXIuaGFzT3duUHJvcGVydHkobmFtZSkgJiYg
aXNVbml0bGVzc051bWJlcltuYW1lXSkge1xuICAgIHJldHVybiAnJyArIHZhbHVlOyAvLyBjYXN0
IHRvIHN0cmluZ1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAg
ICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgLy8g
QWxsb3cgJzAnIHRvIHBhc3MgdGhyb3VnaCB3aXRob3V0IHdhcm5pbmcuIDAgaXMgYWxyZWFkeSBz
cGVjaWFsIGFuZFxuICAgICAgLy8gZG9lc24ndCByZXF1aXJlIHVuaXRzLCBzbyB3ZSBkb24ndCBu
ZWVkIHRvIHdhcm4gYWJvdXQgaXQuXG4gICAgICBpZiAoY29tcG9uZW50ICYmIHZhbHVlICE9PSAn
MCcpIHtcbiAgICAgICAgdmFyIG93bmVyID0gY29tcG9uZW50Ll9jdXJyZW50RWxlbWVudC5fb3du
ZXI7XG4gICAgICAgIHZhciBvd25lck5hbWUgPSBvd25lciA/IG93bmVyLmdldE5hbWUoKSA6IG51
bGw7XG4gICAgICAgIGlmIChvd25lck5hbWUgJiYgIXN0eWxlV2FybmluZ3Nbb3duZXJOYW1lXSkg
e1xuICAgICAgICAgIHN0eWxlV2FybmluZ3Nbb3duZXJOYW1lXSA9IHt9O1xuICAgICAgICB9XG4g
ICAgICAgIHZhciB3YXJuZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKG93bmVyTmFtZSkge1xuICAg
ICAgICAgIHZhciB3YXJuaW5ncyA9IHN0eWxlV2FybmluZ3Nbb3duZXJOYW1lXTtcbiAgICAgICAg
ICB3YXJuZWQgPSB3YXJuaW5nc1tuYW1lXTtcbiAgICAgICAgICBpZiAoIXdhcm5lZCkge1xuICAg
ICAgICAgICAgd2FybmluZ3NbbmFtZV0gPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxu
ICAgICAgICBpZiAoIXdhcm5lZCkge1xuICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9
PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnYSBgJXNgIHRhZyAob3duZXI6IGAlc2Ap
IHdhcyBwYXNzZWQgYSBudW1lcmljIHN0cmluZyB2YWx1ZSAnICsgJ2ZvciBDU1MgcHJvcGVydHkg
YCVzYCAodmFsdWU6IGAlc2ApIHdoaWNoIHdpbGwgYmUgdHJlYXRlZCAnICsgJ2FzIGEgdW5pdGxl
c3MgbnVtYmVyIGluIGEgZnV0dXJlIHZlcnNpb24gb2YgUmVhY3QuJywgY29tcG9uZW50Ll9jdXJy
ZW50RWxlbWVudC50eXBlLCBvd25lck5hbWUgfHwgJ3Vua25vd24nLCBuYW1lLCB2YWx1ZSkgOiB2
b2lkIDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdmFsdWUgPSB2YWx1ZS50cmlt
KCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlICsgJ3B4Jztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBk
YW5nZXJvdXNTdHlsZVZhbHVlO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBG
T09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvZGFuZ2Vyb3VzU3R5bGVWYWx1
ZS5qc1xuLy8gbW9kdWxlIGlkID0gMTQzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qKlxuICog
Q29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRz
IHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhl
IEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSBy
b290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4g
KiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRo
ZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAdHlwZWNoZWNrc1xuICovXG5cbid1c2Ugc3RyaWN0
JztcblxudmFyIGh5cGhlbmF0ZSA9IHJlcXVpcmUoJy4vaHlwaGVuYXRlJyk7XG5cbnZhciBtc1Bh
dHRlcm4gPSAvXm1zLS87XG5cbi8qKlxuICogSHlwaGVuYXRlcyBhIGNhbWVsY2FzZWQgQ1NTIHBy
b3BlcnR5IG5hbWUsIGZvciBleGFtcGxlOlxuICpcbiAqICAgPiBoeXBoZW5hdGVTdHlsZU5hbWUo
J2JhY2tncm91bmRDb2xvcicpXG4gKiAgIDwgXCJiYWNrZ3JvdW5kLWNvbG9yXCJcbiAqICAgPiBo
eXBoZW5hdGVTdHlsZU5hbWUoJ01velRyYW5zaXRpb24nKVxuICogICA8IFwiLW1vei10cmFuc2l0
aW9uXCJcbiAqICAgPiBoeXBoZW5hdGVTdHlsZU5hbWUoJ21zVHJhbnNpdGlvbicpXG4gKiAgIDwg
XCItbXMtdHJhbnNpdGlvblwiXG4gKlxuICogQXMgTW9kZXJuaXpyIHN1Z2dlc3RzIChodHRwOi8v
bW9kZXJuaXpyLmNvbS9kb2NzLyNwcmVmaXhlZCksIGFuIGBtc2AgcHJlZml4XG4gKiBpcyBjb252
ZXJ0ZWQgdG8gYC1tcy1gLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmdcbiAqIEByZXR1
cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gaHlwaGVuYXRlU3R5bGVOYW1lKHN0cmluZykge1xu
ICByZXR1cm4gaHlwaGVuYXRlKHN0cmluZykucmVwbGFjZShtc1BhdHRlcm4sICctbXMtJyk7XG59
XG5cbm1vZHVsZS5leHBvcnRzID0gaHlwaGVuYXRlU3R5bGVOYW1lO1xuXG5cbi8vLy8vLy8vLy8v
Ly8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2ZianMvbGliL2h5
cGhlbmF0ZVN0eWxlTmFtZS5qc1xuLy8gbW9kdWxlIGlkID0gMTQ0XG4vLyBtb2R1bGUgY2h1bmtz
ID0gMCIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2Vu
dCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBz
b3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQg
aW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291
cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJl
IGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAq
IEB0eXBlY2hlY2tzXG4gKi9cblxudmFyIF91cHBlcmNhc2VQYXR0ZXJuID0gLyhbQS1aXSkvZztc
blxuLyoqXG4gKiBIeXBoZW5hdGVzIGEgY2FtZWxjYXNlZCBzdHJpbmcsIGZvciBleGFtcGxlOlxu
ICpcbiAqICAgPiBoeXBoZW5hdGUoJ2JhY2tncm91bmRDb2xvcicpXG4gKiAgIDwgXCJiYWNrZ3Jv
dW5kLWNvbG9yXCJcbiAqXG4gKiBGb3IgQ1NTIHN0eWxlIG5hbWVzLCB1c2UgYGh5cGhlbmF0ZVN0
eWxlTmFtZWAgaW5zdGVhZCB3aGljaCB3b3JrcyBwcm9wZXJseVxuICogd2l0aCBhbGwgdmVuZG9y
IHByZWZpeGVzLCBpbmNsdWRpbmcgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5n
XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGh5cGhlbmF0ZShzdHJpbmcpIHtc
biAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKF91cHBlcmNhc2VQYXR0ZXJuLCAnLSQxJykudG9Mb3dl
ckNhc2UoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoeXBoZW5hdGU7XG5cblxuLy8vLy8vLy8v
Ly8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvZmJqcy9saWIv
aHlwaGVuYXRlLmpzXG4vLyBtb2R1bGUgaWQgPSAxNDVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwi
LyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1
bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwg
Z3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZp
bGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIFxuICogQHR5cGVjaGVja3Mgc3RhdGlj
LW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogTWVtb2l6ZXMgdGhlIHJldHVy
biB2YWx1ZSBvZiBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBvbmUgc3RyaW5nIGFyZ3VtZW50Llxu
ICovXG5cbmZ1bmN0aW9uIG1lbW9pemVTdHJpbmdPbmx5KGNhbGxiYWNrKSB7XG4gIHZhciBjYWNo
ZSA9IHt9O1xuICByZXR1cm4gZnVuY3Rpb24gKHN0cmluZykge1xuICAgIGlmICghY2FjaGUuaGFz
T3duUHJvcGVydHkoc3RyaW5nKSkge1xuICAgICAgY2FjaGVbc3RyaW5nXSA9IGNhbGxiYWNrLmNh
bGwodGhpcywgc3RyaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIGNhY2hlW3N0cmluZ107XG4gIH07
XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWVtb2l6ZVN0cmluZ09ubHk7XG5cblxuLy8vLy8vLy8v
Ly8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvZmJqcy9saWIv
bWVtb2l6ZVN0cmluZ09ubHkuanNcbi8vIG1vZHVsZSBpZCA9IDE0NlxuLy8gbW9kdWxlIGNodW5r
cyA9IDAiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4g
KiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5z
ZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBm
aWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlv
bmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5U
UyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xu
XG52YXIgZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyID0gcmVxdWlyZSgnLi9lc2NhcGVUZXh0
Q29udGVudEZvckJyb3dzZXInKTtcblxuLyoqXG4gKiBFc2NhcGVzIGF0dHJpYnV0ZSB2YWx1ZSB0
byBwcmV2ZW50IHNjcmlwdGluZyBhdHRhY2tzLlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFs
dWUgdG8gZXNjYXBlLlxuICogQHJldHVybiB7c3RyaW5nfSBBbiBlc2NhcGVkIHN0cmluZy5cbiAq
L1xuZnVuY3Rpb24gcXVvdGVBdHRyaWJ1dGVWYWx1ZUZvckJyb3dzZXIodmFsdWUpIHtcbiAgcmV0
dXJuICdcIicgKyBlc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXIodmFsdWUpICsgJ1wiJztcbn1c
blxubW9kdWxlLmV4cG9ydHMgPSBxdW90ZUF0dHJpYnV0ZVZhbHVlRm9yQnJvd3NlcjtcblxuXG4v
Ly8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9y
ZWFjdC1kb20vbGliL3F1b3RlQXR0cmlidXRlVmFsdWVGb3JCcm93c2VyLmpzXG4vLyBtb2R1bGUg
aWQgPSAxNDdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1w
cmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBU
aGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBm
b3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhp
cyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBj
YW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4g
KlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEV2ZW50UGx1Z2luSHViID0gcmVxdWlyZSgn
Li9FdmVudFBsdWdpbkh1YicpO1xuXG5mdW5jdGlvbiBydW5FdmVudFF1ZXVlSW5CYXRjaChldmVu
dHMpIHtcbiAgRXZlbnRQbHVnaW5IdWIuZW5xdWV1ZUV2ZW50cyhldmVudHMpO1xuICBFdmVudFBs
dWdpbkh1Yi5wcm9jZXNzRXZlbnRRdWV1ZShmYWxzZSk7XG59XG5cbnZhciBSZWFjdEV2ZW50RW1p
dHRlck1peGluID0ge1xuICAvKipcbiAgICogU3RyZWFtcyBhIGZpcmVkIHRvcC1sZXZlbCBldmVu
dCB0byBgRXZlbnRQbHVnaW5IdWJgIHdoZXJlIHBsdWdpbnMgaGF2ZSB0aGVcbiAgICogb3Bwb3J0
dW5pdHkgdG8gY3JlYXRlIGBSZWFjdEV2ZW50YHMgdG8gYmUgZGlzcGF0Y2hlZC5cbiAgICovXG4g
IGhhbmRsZVRvcExldmVsOiBmdW5jdGlvbiAodG9wTGV2ZWxUeXBlLCB0YXJnZXRJbnN0LCBuYXRp
dmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgICB2YXIgZXZlbnRzID0gRXZlbnRQbHVn
aW5IdWIuZXh0cmFjdEV2ZW50cyh0b3BMZXZlbFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50
LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgcnVuRXZlbnRRdWV1ZUluQmF0Y2goZXZlbnRzKTtc
biAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdEV2ZW50RW1pdHRlck1peGluO1xuXG5c
bi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVz
L3JlYWN0LWRvbS9saWIvUmVhY3RFdmVudEVtaXR0ZXJNaXhpbi5qc1xuLy8gbW9kdWxlIGlkID0g
MTQ4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2Vu
dCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBz
b3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQg
aW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291
cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJl
IGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAq
L1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUo
J2ZianMvbGliL0V4ZWN1dGlvbkVudmlyb25tZW50Jyk7XG5cbi8qKlxuICogR2VuZXJhdGUgYSBt
YXBwaW5nIG9mIHN0YW5kYXJkIHZlbmRvciBwcmVmaXhlcyB1c2luZyB0aGUgZGVmaW5lZCBzdHls
ZSBwcm9wZXJ0eSBhbmQgZXZlbnQgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3R5bGVQ
cm9wXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxu
ICovXG5mdW5jdGlvbiBtYWtlUHJlZml4TWFwKHN0eWxlUHJvcCwgZXZlbnROYW1lKSB7XG4gIHZh
ciBwcmVmaXhlcyA9IHt9O1xuXG4gIHByZWZpeGVzW3N0eWxlUHJvcC50b0xvd2VyQ2FzZSgpXSA9
IGV2ZW50TmFtZS50b0xvd2VyQ2FzZSgpO1xuICBwcmVmaXhlc1snV2Via2l0JyArIHN0eWxlUHJv
cF0gPSAnd2Via2l0JyArIGV2ZW50TmFtZTtcbiAgcHJlZml4ZXNbJ01veicgKyBzdHlsZVByb3Bd
ID0gJ21veicgKyBldmVudE5hbWU7XG4gIHByZWZpeGVzWydtcycgKyBzdHlsZVByb3BdID0gJ01T
JyArIGV2ZW50TmFtZTtcbiAgcHJlZml4ZXNbJ08nICsgc3R5bGVQcm9wXSA9ICdvJyArIGV2ZW50
TmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gIHJldHVybiBwcmVmaXhlcztcbn1cblxuLyoqXG4gKiBB
IGxpc3Qgb2YgZXZlbnQgbmFtZXMgdG8gYSBjb25maWd1cmFibGUgbGlzdCBvZiB2ZW5kb3IgcHJl
Zml4ZXMuXG4gKi9cbnZhciB2ZW5kb3JQcmVmaXhlcyA9IHtcbiAgYW5pbWF0aW9uZW5kOiBtYWtl
UHJlZml4TWFwKCdBbmltYXRpb24nLCAnQW5pbWF0aW9uRW5kJyksXG4gIGFuaW1hdGlvbml0ZXJh
dGlvbjogbWFrZVByZWZpeE1hcCgnQW5pbWF0aW9uJywgJ0FuaW1hdGlvbkl0ZXJhdGlvbicpLFxu
ICBhbmltYXRpb25zdGFydDogbWFrZVByZWZpeE1hcCgnQW5pbWF0aW9uJywgJ0FuaW1hdGlvblN0
YXJ0JyksXG4gIHRyYW5zaXRpb25lbmQ6IG1ha2VQcmVmaXhNYXAoJ1RyYW5zaXRpb24nLCAnVHJh
bnNpdGlvbkVuZCcpXG59O1xuXG4vKipcbiAqIEV2ZW50IG5hbWVzIHRoYXQgaGF2ZSBhbHJlYWR5
IGJlZW4gZGV0ZWN0ZWQgYW5kIHByZWZpeGVkIChpZiBhcHBsaWNhYmxlKS5cbiAqL1xudmFyIHBy
ZWZpeGVkRXZlbnROYW1lcyA9IHt9O1xuXG4vKipcbiAqIEVsZW1lbnQgdG8gY2hlY2sgZm9yIHBy
ZWZpeGVzIG9uLlxuICovXG52YXIgc3R5bGUgPSB7fTtcblxuLyoqXG4gKiBCb290c3RyYXAgaWYg
YSBET00gZXhpc3RzLlxuICovXG5pZiAoRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NKSB7
XG4gIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jykuc3R5bGU7XG5cbiAgLy8g
T24gc29tZSBwbGF0Zm9ybXMsIGluIHBhcnRpY3VsYXIgc29tZSByZWxlYXNlcyBvZiBBbmRyb2lk
IDQueCxcbiAgLy8gdGhlIHVuLXByZWZpeGVkIFwiYW5pbWF0aW9uXCIgYW5kIFwidHJhbnNpdGlv
blwiIHByb3BlcnRpZXMgYXJlIGRlZmluZWQgb24gdGhlXG4gIC8vIHN0eWxlIG9iamVjdCBidXQg
dGhlIGV2ZW50cyB0aGF0IGZpcmUgd2lsbCBzdGlsbCBiZSBwcmVmaXhlZCwgc28gd2UgbmVlZFxu
ICAvLyB0byBjaGVjayBpZiB0aGUgdW4tcHJlZml4ZWQgZXZlbnRzIGFyZSB1c2FibGUsIGFuZCBp
ZiBub3QgcmVtb3ZlIHRoZW0gZnJvbSB0aGUgbWFwLlxuICBpZiAoISgnQW5pbWF0aW9uRXZlbnQn
IGluIHdpbmRvdykpIHtcbiAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMuYW5pbWF0aW9uZW5kLmFu
aW1hdGlvbjtcbiAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMuYW5pbWF0aW9uaXRlcmF0aW9uLmFu
aW1hdGlvbjtcbiAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMuYW5pbWF0aW9uc3RhcnQuYW5pbWF0
aW9uO1xuICB9XG5cbiAgLy8gU2FtZSBhcyBhYm92ZVxuICBpZiAoISgnVHJhbnNpdGlvbkV2ZW50
JyBpbiB3aW5kb3cpKSB7XG4gICAgZGVsZXRlIHZlbmRvclByZWZpeGVzLnRyYW5zaXRpb25lbmQu
dHJhbnNpdGlvbjtcbiAgfVxufVxuXG4vKipcbiAqIEF0dGVtcHRzIHRvIGRldGVybWluZSB0aGUg
Y29ycmVjdCB2ZW5kb3IgcHJlZml4ZWQgZXZlbnQgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmlu
Z30gZXZlbnROYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRWZW5k
b3JQcmVmaXhlZEV2ZW50TmFtZShldmVudE5hbWUpIHtcbiAgaWYgKHByZWZpeGVkRXZlbnROYW1l
c1tldmVudE5hbWVdKSB7XG4gICAgcmV0dXJuIHByZWZpeGVkRXZlbnROYW1lc1tldmVudE5hbWVd
O1xuICB9IGVsc2UgaWYgKCF2ZW5kb3JQcmVmaXhlc1tldmVudE5hbWVdKSB7XG4gICAgcmV0dXJu
IGV2ZW50TmFtZTtcbiAgfVxuXG4gIHZhciBwcmVmaXhNYXAgPSB2ZW5kb3JQcmVmaXhlc1tldmVu
dE5hbWVdO1xuXG4gIGZvciAodmFyIHN0eWxlUHJvcCBpbiBwcmVmaXhNYXApIHtcbiAgICBpZiAo
cHJlZml4TWFwLmhhc093blByb3BlcnR5KHN0eWxlUHJvcCkgJiYgc3R5bGVQcm9wIGluIHN0eWxl
KSB7XG4gICAgICByZXR1cm4gcHJlZml4ZWRFdmVudE5hbWVzW2V2ZW50TmFtZV0gPSBwcmVmaXhN
YXBbc3R5bGVQcm9wXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbm1vZHVsZS5l
eHBvcnRzID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWU7XG5cblxuLy8vLy8vLy8vLy8vLy8v
Ly8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9n
ZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZS5qc1xuLy8gbW9kdWxlIGlkID0gMTQ5XG4vLyBtb2R1
bGUgY2h1bmtzID0gMCIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ss
IEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBp
cyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBM
SUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFu
IGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRo
ZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0
cmljdCc7XG5cbnZhciBfcHJvZEludmFyaWFudCA9IHJlcXVpcmUoJy4vcmVhY3RQcm9kSW52YXJp
YW50JyksXG4gICAgX2Fzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxudmFyIERP
TVByb3BlcnR5T3BlcmF0aW9ucyA9IHJlcXVpcmUoJy4vRE9NUHJvcGVydHlPcGVyYXRpb25zJyk7
XG52YXIgTGlua2VkVmFsdWVVdGlscyA9IHJlcXVpcmUoJy4vTGlua2VkVmFsdWVVdGlscycpO1xu
dmFyIFJlYWN0RE9NQ29tcG9uZW50VHJlZSA9IHJlcXVpcmUoJy4vUmVhY3RET01Db21wb25lbnRU
cmVlJyk7XG52YXIgUmVhY3RVcGRhdGVzID0gcmVxdWlyZSgnLi9SZWFjdFVwZGF0ZXMnKTtcblxu
dmFyIGludmFyaWFudCA9IHJlcXVpcmUoJ2ZianMvbGliL2ludmFyaWFudCcpO1xudmFyIHdhcm5p
bmcgPSByZXF1aXJlKCdmYmpzL2xpYi93YXJuaW5nJyk7XG5cbnZhciBkaWRXYXJuVmFsdWVMaW5r
ID0gZmFsc2U7XG52YXIgZGlkV2FybkNoZWNrZWRMaW5rID0gZmFsc2U7XG52YXIgZGlkV2FyblZh
bHVlRGVmYXVsdFZhbHVlID0gZmFsc2U7XG52YXIgZGlkV2FybkNoZWNrZWREZWZhdWx0Q2hlY2tl
ZCA9IGZhbHNlO1xudmFyIGRpZFdhcm5Db250cm9sbGVkVG9VbmNvbnRyb2xsZWQgPSBmYWxzZTtc
bnZhciBkaWRXYXJuVW5jb250cm9sbGVkVG9Db250cm9sbGVkID0gZmFsc2U7XG5cbmZ1bmN0aW9u
IGZvcmNlVXBkYXRlSWZNb3VudGVkKCkge1xuICBpZiAodGhpcy5fcm9vdE5vZGVJRCkge1xuICAg
IC8vIERPTSBjb21wb25lbnQgaXMgc3RpbGwgbW91bnRlZDsgdXBkYXRlXG4gICAgUmVhY3RET01J
bnB1dC51cGRhdGVXcmFwcGVyKHRoaXMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzQ29udHJvbGxl
ZChwcm9wcykge1xuICB2YXIgdXNlc0NoZWNrZWQgPSBwcm9wcy50eXBlID09PSAnY2hlY2tib3gn
IHx8IHByb3BzLnR5cGUgPT09ICdyYWRpbyc7XG4gIHJldHVybiB1c2VzQ2hlY2tlZCA/IHByb3Bz
LmNoZWNrZWQgIT0gbnVsbCA6IHByb3BzLnZhbHVlICE9IG51bGw7XG59XG5cbi8qKlxuICogSW1w
bGVtZW50cyBhbiA8aW5wdXQ+IGhvc3QgY29tcG9uZW50IHRoYXQgYWxsb3dzIHNldHRpbmcgdGhl
c2Ugb3B0aW9uYWxcbiAqIHByb3BzOiBgY2hlY2tlZGAsIGB2YWx1ZWAsIGBkZWZhdWx0Q2hlY2tl
ZGAsIGFuZCBgZGVmYXVsdFZhbHVlYC5cbiAqXG4gKiBJZiBgY2hlY2tlZGAgb3IgYHZhbHVlYCBh
cmUgbm90IHN1cHBsaWVkIChvciBudWxsL3VuZGVmaW5lZCksIHVzZXIgYWN0aW9uc1xuICogdGhh
dCBhZmZlY3QgdGhlIGNoZWNrZWQgc3RhdGUgb3IgdmFsdWUgd2lsbCB0cmlnZ2VyIHVwZGF0ZXMg
dG8gdGhlIGVsZW1lbnQuXG4gKlxuICogSWYgdGhleSBhcmUgc3VwcGxpZWQgKGFuZCBub3QgbnVs
bC91bmRlZmluZWQpLCB0aGUgcmVuZGVyZWQgZWxlbWVudCB3aWxsIG5vdFxuICogdHJpZ2dlciB1
cGRhdGVzIHRvIHRoZSBlbGVtZW50LiBJbnN0ZWFkLCB0aGUgcHJvcHMgbXVzdCBjaGFuZ2UgaW4g
b3JkZXIgZm9yXG4gKiB0aGUgcmVuZGVyZWQgZWxlbWVudCB0byBiZSB1cGRhdGVkLlxuICpcbiAq
IFRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGwgYmUgaW5pdGlhbGl6ZWQgYXMgdW5jaGVja2VkIChv
ciBgZGVmYXVsdENoZWNrZWRgKVxuICogd2l0aCBhbiBlbXB0eSB2YWx1ZSAob3IgYGRlZmF1bHRW
YWx1ZWApLlxuICpcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0y
MDEyMTAyNS90aGUtaW5wdXQtZWxlbWVudC5odG1sXG4gKi9cbnZhciBSZWFjdERPTUlucHV0ID0g
e1xuICBnZXRIb3N0UHJvcHM6IGZ1bmN0aW9uIChpbnN0LCBwcm9wcykge1xuICAgIHZhciB2YWx1
ZSA9IExpbmtlZFZhbHVlVXRpbHMuZ2V0VmFsdWUocHJvcHMpO1xuICAgIHZhciBjaGVja2VkID0g
TGlua2VkVmFsdWVVdGlscy5nZXRDaGVja2VkKHByb3BzKTtcblxuICAgIHZhciBob3N0UHJvcHMg
PSBfYXNzaWduKHtcbiAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBzZXQgLnR5cGUgYmVmb3JlIGFueSBv
dGhlciBwcm9wZXJ0aWVzIChzZXR0aW5nIC52YWx1ZVxuICAgICAgLy8gYmVmb3JlIC50eXBlIG1l
YW5zIC52YWx1ZSBpcyBsb3N0IGluIElFMTEgYW5kIGJlbG93KVxuICAgICAgdHlwZTogdW5kZWZp
bmVkLFxuICAgICAgLy8gTWFrZSBzdXJlIHdlIHNldCAuc3RlcCBiZWZvcmUgLnZhbHVlIChzZXR0
aW5nIC52YWx1ZSBiZWZvcmUgLnN0ZXBcbiAgICAgIC8vIG1lYW5zIC52YWx1ZSBpcyByb3VuZGVk
IG9uIG1vdW50LCBiYXNlZCB1cG9uIHN0ZXAgcHJlY2lzaW9uKVxuICAgICAgc3RlcDogdW5kZWZp
bmVkLFxuICAgICAgLy8gTWFrZSBzdXJlIHdlIHNldCAubWluICYgLm1heCBiZWZvcmUgLnZhbHVl
ICh0byBlbnN1cmUgcHJvcGVyIG9yZGVyXG4gICAgICAvLyBpbiBjb3JuZXIgY2FzZXMgc3VjaCBh
cyBtaW4gb3IgbWF4IGRlcml2aW5nIGZyb20gdmFsdWUsIGUuZy4gSXNzdWUgIzcxNzApXG4gICAg
ICBtaW46IHVuZGVmaW5lZCxcbiAgICAgIG1heDogdW5kZWZpbmVkXG4gICAgfSwgcHJvcHMsIHtc
biAgICAgIGRlZmF1bHRDaGVja2VkOiB1bmRlZmluZWQsXG4gICAgICBkZWZhdWx0VmFsdWU6IHVu
ZGVmaW5lZCxcbiAgICAgIHZhbHVlOiB2YWx1ZSAhPSBudWxsID8gdmFsdWUgOiBpbnN0Ll93cmFw
cGVyU3RhdGUuaW5pdGlhbFZhbHVlLFxuICAgICAgY2hlY2tlZDogY2hlY2tlZCAhPSBudWxsID8g
Y2hlY2tlZCA6IGluc3QuX3dyYXBwZXJTdGF0ZS5pbml0aWFsQ2hlY2tlZCxcbiAgICAgIG9uQ2hh
bmdlOiBpbnN0Ll93cmFwcGVyU3RhdGUub25DaGFuZ2VcbiAgICB9KTtcblxuICAgIHJldHVybiBo
b3N0UHJvcHM7XG4gIH0sXG5cbiAgbW91bnRXcmFwcGVyOiBmdW5jdGlvbiAoaW5zdCwgcHJvcHMp
IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAg
ICAgTGlua2VkVmFsdWVVdGlscy5jaGVja1Byb3BUeXBlcygnaW5wdXQnLCBwcm9wcywgaW5zdC5f
Y3VycmVudEVsZW1lbnQuX293bmVyKTtcblxuICAgICAgdmFyIG93bmVyID0gaW5zdC5fY3VycmVu
dEVsZW1lbnQuX293bmVyO1xuXG4gICAgICBpZiAocHJvcHMudmFsdWVMaW5rICE9PSB1bmRlZmlu
ZWQgJiYgIWRpZFdhcm5WYWx1ZUxpbmspIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYg
IT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdgdmFsdWVMaW5rYCBwcm9wIG9uIGBp
bnB1dGAgaXMgZGVwcmVjYXRlZDsgc2V0IGB2YWx1ZWAgYW5kIGBvbkNoYW5nZWAgaW5zdGVhZC4n
KSA6IHZvaWQgMDtcbiAgICAgICAgZGlkV2FyblZhbHVlTGluayA9IHRydWU7XG4gICAgICB9XG4g
ICAgICBpZiAocHJvcHMuY2hlY2tlZExpbmsgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FybkNoZWNr
ZWRMaW5rKSB7XG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicg
PyB3YXJuaW5nKGZhbHNlLCAnYGNoZWNrZWRMaW5rYCBwcm9wIG9uIGBpbnB1dGAgaXMgZGVwcmVj
YXRlZDsgc2V0IGB2YWx1ZWAgYW5kIGBvbkNoYW5nZWAgaW5zdGVhZC4nKSA6IHZvaWQgMDtcbiAg
ICAgICAgZGlkV2FybkNoZWNrZWRMaW5rID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9w
cy5jaGVja2VkICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuZGVmYXVsdENoZWNrZWQgIT09IHVuZGVm
aW5lZCAmJiAhZGlkV2FybkNoZWNrZWREZWZhdWx0Q2hlY2tlZCkge1xuICAgICAgICBwcm9jZXNz
LmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJyVzIGNvbnRh
aW5zIGFuIGlucHV0IG9mIHR5cGUgJXMgd2l0aCBib3RoIGNoZWNrZWQgYW5kIGRlZmF1bHRDaGVj
a2VkIHByb3BzLiAnICsgJ0lucHV0IGVsZW1lbnRzIG11c3QgYmUgZWl0aGVyIGNvbnRyb2xsZWQg
b3IgdW5jb250cm9sbGVkICcgKyAnKHNwZWNpZnkgZWl0aGVyIHRoZSBjaGVja2VkIHByb3AsIG9y
IHRoZSBkZWZhdWx0Q2hlY2tlZCBwcm9wLCBidXQgbm90ICcgKyAnYm90aCkuIERlY2lkZSBiZXR3
ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgaW5wdXQgJyArICdlbGVtZW50
IGFuZCByZW1vdmUgb25lIG9mIHRoZXNlIHByb3BzLiBNb3JlIGluZm86ICcgKyAnaHR0cHM6Ly9m
Yi5tZS9yZWFjdC1jb250cm9sbGVkLWNvbXBvbmVudHMnLCBvd25lciAmJiBvd25lci5nZXROYW1l
KCkgfHwgJ0EgY29tcG9uZW50JywgcHJvcHMudHlwZSkgOiB2b2lkIDA7XG4gICAgICAgIGRpZFdh
cm5DaGVja2VkRGVmYXVsdENoZWNrZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHByb3Bz
LnZhbHVlICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQg
JiYgIWRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSkge1xuICAgICAgICBwcm9jZXNzLmVudi5OT0RF
X0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJyVzIGNvbnRhaW5zIGFuIGlu
cHV0IG9mIHR5cGUgJXMgd2l0aCBib3RoIHZhbHVlIGFuZCBkZWZhdWx0VmFsdWUgcHJvcHMuICcg
KyAnSW5wdXQgZWxlbWVudHMgbXVzdCBiZSBlaXRoZXIgY29udHJvbGxlZCBvciB1bmNvbnRyb2xs
ZWQgJyArICcoc3BlY2lmeSBlaXRoZXIgdGhlIHZhbHVlIHByb3AsIG9yIHRoZSBkZWZhdWx0VmFs
dWUgcHJvcCwgYnV0IG5vdCAnICsgJ2JvdGgpLiBEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRy
b2xsZWQgb3IgdW5jb250cm9sbGVkIGlucHV0ICcgKyAnZWxlbWVudCBhbmQgcmVtb3ZlIG9uZSBv
ZiB0aGVzZSBwcm9wcy4gTW9yZSBpbmZvOiAnICsgJ2h0dHBzOi8vZmIubWUvcmVhY3QtY29udHJv
bGxlZC1jb21wb25lbnRzJywgb3duZXIgJiYgb3duZXIuZ2V0TmFtZSgpIHx8ICdBIGNvbXBvbmVu
dCcsIHByb3BzLnR5cGUpIDogdm9pZCAwO1xuICAgICAgICBkaWRXYXJuVmFsdWVEZWZhdWx0VmFs
dWUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBkZWZhdWx0VmFsdWUgPSBwcm9w
cy5kZWZhdWx0VmFsdWU7XG4gICAgaW5zdC5fd3JhcHBlclN0YXRlID0ge1xuICAgICAgaW5pdGlh
bENoZWNrZWQ6IHByb3BzLmNoZWNrZWQgIT0gbnVsbCA/IHByb3BzLmNoZWNrZWQgOiBwcm9wcy5k
ZWZhdWx0Q2hlY2tlZCxcbiAgICAgIGluaXRpYWxWYWx1ZTogcHJvcHMudmFsdWUgIT0gbnVsbCA/
IHByb3BzLnZhbHVlIDogZGVmYXVsdFZhbHVlLFxuICAgICAgbGlzdGVuZXJzOiBudWxsLFxuICAg
ICAgb25DaGFuZ2U6IF9oYW5kbGVDaGFuZ2UuYmluZChpbnN0KSxcbiAgICAgIGNvbnRyb2xsZWQ6
IGlzQ29udHJvbGxlZChwcm9wcylcbiAgICB9O1xuICB9LFxuXG4gIHVwZGF0ZVdyYXBwZXI6IGZ1
bmN0aW9uIChpbnN0KSB7XG4gICAgdmFyIHByb3BzID0gaW5zdC5fY3VycmVudEVsZW1lbnQucHJv
cHM7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xu
ICAgICAgdmFyIGNvbnRyb2xsZWQgPSBpc0NvbnRyb2xsZWQocHJvcHMpO1xuICAgICAgdmFyIG93
bmVyID0gaW5zdC5fY3VycmVudEVsZW1lbnQuX293bmVyO1xuXG4gICAgICBpZiAoIWluc3QuX3dy
YXBwZXJTdGF0ZS5jb250cm9sbGVkICYmIGNvbnRyb2xsZWQgJiYgIWRpZFdhcm5VbmNvbnRyb2xs
ZWRUb0NvbnRyb2xsZWQpIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9k
dWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICclcyBpcyBjaGFuZ2luZyBhbiB1bmNvbnRyb2xsZWQg
aW5wdXQgb2YgdHlwZSAlcyB0byBiZSBjb250cm9sbGVkLiAnICsgJ0lucHV0IGVsZW1lbnRzIHNo
b3VsZCBub3Qgc3dpdGNoIGZyb20gdW5jb250cm9sbGVkIHRvIGNvbnRyb2xsZWQgKG9yIHZpY2Ug
dmVyc2EpLiAnICsgJ0RlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRy
b2xsZWQgaW5wdXQgJyArICdlbGVtZW50IGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNvbXBvbmVu
dC4gTW9yZSBpbmZvOiBodHRwczovL2ZiLm1lL3JlYWN0LWNvbnRyb2xsZWQtY29tcG9uZW50cycs
IG93bmVyICYmIG93bmVyLmdldE5hbWUoKSB8fCAnQSBjb21wb25lbnQnLCBwcm9wcy50eXBlKSA6
IHZvaWQgMDtcbiAgICAgICAgZGlkV2FyblVuY29udHJvbGxlZFRvQ29udHJvbGxlZCA9IHRydWU7
XG4gICAgICB9XG4gICAgICBpZiAoaW5zdC5fd3JhcHBlclN0YXRlLmNvbnRyb2xsZWQgJiYgIWNv
bnRyb2xsZWQgJiYgIWRpZFdhcm5Db250cm9sbGVkVG9VbmNvbnRyb2xsZWQpIHtcbiAgICAgICAg
cHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICcl
cyBpcyBjaGFuZ2luZyBhIGNvbnRyb2xsZWQgaW5wdXQgb2YgdHlwZSAlcyB0byBiZSB1bmNvbnRy
b2xsZWQuICcgKyAnSW5wdXQgZWxlbWVudHMgc2hvdWxkIG5vdCBzd2l0Y2ggZnJvbSBjb250cm9s
bGVkIHRvIHVuY29udHJvbGxlZCAob3IgdmljZSB2ZXJzYSkuICcgKyAnRGVjaWRlIGJldHdlZW4g
dXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBpbnB1dCAnICsgJ2VsZW1lbnQgZm9y
IHRoZSBsaWZldGltZSBvZiB0aGUgY29tcG9uZW50LiBNb3JlIGluZm86IGh0dHBzOi8vZmIubWUv
cmVhY3QtY29udHJvbGxlZC1jb21wb25lbnRzJywgb3duZXIgJiYgb3duZXIuZ2V0TmFtZSgpIHx8
ICdBIGNvbXBvbmVudCcsIHByb3BzLnR5cGUpIDogdm9pZCAwO1xuICAgICAgICBkaWRXYXJuQ29u
dHJvbGxlZFRvVW5jb250cm9sbGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBU
T0RPOiBTaG91bGRuJ3QgdGhpcyBiZSBnZXRDaGVja2VkKHByb3BzKT9cbiAgICB2YXIgY2hlY2tl
ZCA9IHByb3BzLmNoZWNrZWQ7XG4gICAgaWYgKGNoZWNrZWQgIT0gbnVsbCkge1xuICAgICAgRE9N
UHJvcGVydHlPcGVyYXRpb25zLnNldFZhbHVlRm9yUHJvcGVydHkoUmVhY3RET01Db21wb25lbnRU
cmVlLmdldE5vZGVGcm9tSW5zdGFuY2UoaW5zdCksICdjaGVja2VkJywgY2hlY2tlZCB8fCBmYWxz
ZSk7XG4gICAgfVxuXG4gICAgdmFyIG5vZGUgPSBSZWFjdERPTUNvbXBvbmVudFRyZWUuZ2V0Tm9k
ZUZyb21JbnN0YW5jZShpbnN0KTtcbiAgICB2YXIgdmFsdWUgPSBMaW5rZWRWYWx1ZVV0aWxzLmdl
dFZhbHVlKHByb3BzKTtcbiAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgaWYgKHZhbHVl
ID09PSAwICYmIG5vZGUudmFsdWUgPT09ICcnKSB7XG4gICAgICAgIG5vZGUudmFsdWUgPSAnMCc7
XG4gICAgICAgIC8vIE5vdGU6IElFOSByZXBvcnRzIGEgbnVtYmVyIGlucHV0cyBhcyAndGV4dCcs
IHNvIGNoZWNrIHByb3BzIGluc3RlYWQuXG4gICAgICB9IGVsc2UgaWYgKHByb3BzLnR5cGUgPT09
ICdudW1iZXInKSB7XG4gICAgICAgIC8vIFNpbXVsYXRlIGBpbnB1dC52YWx1ZUFzTnVtYmVyYC4g
SUU5IGRvZXMgbm90IHN1cHBvcnQgaXRcbiAgICAgICAgdmFyIHZhbHVlQXNOdW1iZXIgPSBwYXJz
ZUZsb2F0KG5vZGUudmFsdWUsIDEwKSB8fCAwO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgLy8g
ZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgIHZhbHVlICE9IHZhbHVlQXNOdW1iZXIg
fHxcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgIHZhbHVlID09
IHZhbHVlQXNOdW1iZXIgJiYgbm9kZS52YWx1ZSAhPSB2YWx1ZSkge1xuICAgICAgICAgIC8vIENh
c3QgYHZhbHVlYCB0byBhIHN0cmluZyB0byBlbnN1cmUgdGhlIHZhbHVlIGlzIHNldCBjb3JyZWN0
bHkuIFdoaWxlXG4gICAgICAgICAgLy8gYnJvd3NlcnMgdHlwaWNhbGx5IGRvIHRoaXMgYXMgbmVj
ZXNzYXJ5LCBqc2RvbSBkb2Vzbid0LlxuICAgICAgICAgIG5vZGUudmFsdWUgPSAnJyArIHZhbHVl
O1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG5vZGUudmFsdWUgIT09ICcnICsgdmFsdWUp
IHtcbiAgICAgICAgLy8gQ2FzdCBgdmFsdWVgIHRvIGEgc3RyaW5nIHRvIGVuc3VyZSB0aGUgdmFs
dWUgaXMgc2V0IGNvcnJlY3RseS4gV2hpbGVcbiAgICAgICAgLy8gYnJvd3NlcnMgdHlwaWNhbGx5
IGRvIHRoaXMgYXMgbmVjZXNzYXJ5LCBqc2RvbSBkb2Vzbid0LlxuICAgICAgICBub2RlLnZhbHVl
ID0gJycgKyB2YWx1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHByb3BzLnZh
bHVlID09IG51bGwgJiYgcHJvcHMuZGVmYXVsdFZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgLy8g
SW4gQ2hyb21lLCBhc3NpZ25pbmcgZGVmYXVsdFZhbHVlIHRvIGNlcnRhaW4gaW5wdXQgdHlwZXMg
dHJpZ2dlcnMgaW5wdXQgdmFsaWRhdGlvbi5cbiAgICAgICAgLy8gRm9yIG51bWJlciBpbnB1dHMs
IHRoZSBkaXNwbGF5IHZhbHVlIGxvc2VzIHRyYWlsaW5nIGRlY2ltYWwgcG9pbnRzLiBGb3IgZW1h
aWwgaW5wdXRzLFxuICAgICAgICAvLyBDaHJvbWUgcmFpc2VzIFwiVGhlIHNwZWNpZmllZCB2YWx1
ZSA8eD4gaXMgbm90IGEgdmFsaWQgZW1haWwgYWRkcmVzc1wiLlxuICAgICAgICAvL1xuICAgICAg
ICAvLyBIZXJlIHdlIGNoZWNrIHRvIHNlZSBpZiB0aGUgZGVmYXVsdFZhbHVlIGhhcyBhY3R1YWxs
eSBjaGFuZ2VkLCBhdm9pZGluZyB0aGVzZSBwcm9ibGVtc1xuICAgICAgICAvLyB3aGVuIHRoZSB1
c2VyIGlzIGlucHV0dGluZyB0ZXh0XG4gICAgICAgIC8vXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0
aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNzI1M1xuICAgICAgICBpZiAobm9kZS5kZWZh
dWx0VmFsdWUgIT09ICcnICsgcHJvcHMuZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgICAgbm9kZS5k
ZWZhdWx0VmFsdWUgPSAnJyArIHByb3BzLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAg
fVxuICAgICAgaWYgKHByb3BzLmNoZWNrZWQgPT0gbnVsbCAmJiBwcm9wcy5kZWZhdWx0Q2hlY2tl
ZCAhPSBudWxsKSB7XG4gICAgICAgIG5vZGUuZGVmYXVsdENoZWNrZWQgPSAhIXByb3BzLmRlZmF1
bHRDaGVja2VkO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBwb3N0TW91bnRXcmFwcGVyOiBm
dW5jdGlvbiAoaW5zdCkge1xuICAgIHZhciBwcm9wcyA9IGluc3QuX2N1cnJlbnRFbGVtZW50LnBy
b3BzO1xuXG4gICAgLy8gVGhpcyBpcyBpbiBwb3N0TW91bnQgYmVjYXVzZSB3ZSBuZWVkIGFjY2Vz
cyB0byB0aGUgRE9NIG5vZGUsIHdoaWNoIGlzIG5vdFxuICAgIC8vIGF2YWlsYWJsZSB1bnRpbCBh
ZnRlciB0aGUgY29tcG9uZW50IGhhcyBtb3VudGVkLlxuICAgIHZhciBub2RlID0gUmVhY3RET01D
b21wb25lbnRUcmVlLmdldE5vZGVGcm9tSW5zdGFuY2UoaW5zdCk7XG5cbiAgICAvLyBEZXRhY2gg
dmFsdWUgZnJvbSBkZWZhdWx0VmFsdWUuIFdlIHdvbid0IGRvIGFueXRoaW5nIGlmIHdlJ3JlIHdv
cmtpbmcgb25cbiAgICAvLyBzdWJtaXQgb3IgcmVzZXQgaW5wdXRzIGFzIHRob3NlIHZhbHVlcyAm
IGRlZmF1bHRWYWx1ZXMgYXJlIGxpbmtlZC4gVGhleVxuICAgIC8vIGFyZSBub3QgcmVzZXRhYmxl
IG5vZGVzIHNvIHRoaXMgb3BlcmF0aW9uIGRvZXNuJ3QgbWF0dGVyIGFuZCBhY3R1YWxseVxuICAg
IC8vIHJlbW92ZXMgYnJvd3Nlci1kZWZhdWx0IHZhbHVlcyAoZWcgXCJTdWJtaXQgUXVlcnlcIikg
d2hlbiBubyB2YWx1ZSBpc1xuICAgIC8vIHByb3ZpZGVkLlxuXG4gICAgc3dpdGNoIChwcm9wcy50
eXBlKSB7XG4gICAgICBjYXNlICdzdWJtaXQnOlxuICAgICAgY2FzZSAncmVzZXQnOlxuICAgICAg
ICBicmVhaztcbiAgICAgIGNhc2UgJ2NvbG9yJzpcbiAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAg
Y2FzZSAnZGF0ZXRpbWUnOlxuICAgICAgY2FzZSAnZGF0ZXRpbWUtbG9jYWwnOlxuICAgICAgY2Fz
ZSAnbW9udGgnOlxuICAgICAgY2FzZSAndGltZSc6XG4gICAgICBjYXNlICd3ZWVrJzpcbiAgICAg
ICAgLy8gVGhpcyBmaXhlcyB0aGUgbm8tc2hvdyBpc3N1ZSBvbiBpT1MgU2FmYXJpIGFuZCBBbmRy
b2lkIENocm9tZTpcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0
L2lzc3Vlcy83MjMzXG4gICAgICAgIG5vZGUudmFsdWUgPSAnJztcbiAgICAgICAgbm9kZS52YWx1
ZSA9IG5vZGUuZGVmYXVsdFZhbHVlO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4g
ICAgICAgIG5vZGUudmFsdWUgPSBub2RlLnZhbHVlO1xuICAgICAgICBicmVhaztcbiAgICB9XG5c
biAgICAvLyBOb3JtYWxseSwgd2UnZCBqdXN0IGRvIGBub2RlLmNoZWNrZWQgPSBub2RlLmNoZWNr
ZWRgIHVwb24gaW5pdGlhbCBtb3VudCwgbGVzcyB0aGlzIGJ1Z1xuICAgIC8vIHRoaXMgaXMgbmVl
ZGVkIHRvIHdvcmsgYXJvdW5kIGEgY2hyb21lIGJ1ZyB3aGVyZSBzZXR0aW5nIGRlZmF1bHRDaGVj
a2VkXG4gICAgLy8gd2lsbCBzb21ldGltZXMgaW5mbHVlbmNlIHRoZSB2YWx1ZSBvZiBjaGVja2Vk
IChldmVuIGFmdGVyIGRldGFjaG1lbnQpLlxuICAgIC8vIFJlZmVyZW5jZTogaHR0cHM6Ly9idWdz
LmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NjA4NDE2XG4gICAgLy8g
V2UgbmVlZCB0byB0ZW1wb3JhcmlseSB1bnNldCBuYW1lIHRvIGF2b2lkIGRpc3J1cHRpbmcgcmFk
aW8gYnV0dG9uIGdyb3Vwcy5cbiAgICB2YXIgbmFtZSA9IG5vZGUubmFtZTtcbiAgICBpZiAobmFt
ZSAhPT0gJycpIHtcbiAgICAgIG5vZGUubmFtZSA9ICcnO1xuICAgIH1cbiAgICBub2RlLmRlZmF1
bHRDaGVja2VkID0gIW5vZGUuZGVmYXVsdENoZWNrZWQ7XG4gICAgbm9kZS5kZWZhdWx0Q2hlY2tl
ZCA9ICFub2RlLmRlZmF1bHRDaGVja2VkO1xuICAgIGlmIChuYW1lICE9PSAnJykge1xuICAgICAg
bm9kZS5uYW1lID0gbmFtZTtcbiAgICB9XG4gIH1cbn07XG5cbmZ1bmN0aW9uIF9oYW5kbGVDaGFu
Z2UoZXZlbnQpIHtcbiAgdmFyIHByb3BzID0gdGhpcy5fY3VycmVudEVsZW1lbnQucHJvcHM7XG5c
biAgdmFyIHJldHVyblZhbHVlID0gTGlua2VkVmFsdWVVdGlscy5leGVjdXRlT25DaGFuZ2UocHJv
cHMsIGV2ZW50KTtcblxuICAvLyBIZXJlIHdlIHVzZSBhc2FwIHRvIHdhaXQgdW50aWwgYWxsIHVw
ZGF0ZXMgaGF2ZSBwcm9wYWdhdGVkLCB3aGljaFxuICAvLyBpcyBpbXBvcnRhbnQgd2hlbiB1c2lu
ZyBjb250cm9sbGVkIGNvbXBvbmVudHMgd2l0aGluIGxheWVyczpcbiAgLy8gaHR0cHM6Ly9naXRo
dWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNjk4XG4gIFJlYWN0VXBkYXRlcy5hc2FwKGZv
cmNlVXBkYXRlSWZNb3VudGVkLCB0aGlzKTtcblxuICB2YXIgbmFtZSA9IHByb3BzLm5hbWU7XG4g
IGlmIChwcm9wcy50eXBlID09PSAncmFkaW8nICYmIG5hbWUgIT0gbnVsbCkge1xuICAgIHZhciBy
b290Tm9kZSA9IFJlYWN0RE9NQ29tcG9uZW50VHJlZS5nZXROb2RlRnJvbUluc3RhbmNlKHRoaXMp
O1xuICAgIHZhciBxdWVyeVJvb3QgPSByb290Tm9kZTtcblxuICAgIHdoaWxlIChxdWVyeVJvb3Qu
cGFyZW50Tm9kZSkge1xuICAgICAgcXVlcnlSb290ID0gcXVlcnlSb290LnBhcmVudE5vZGU7XG4g
ICAgfVxuXG4gICAgLy8gSWYgYHJvb3ROb2RlLmZvcm1gIHdhcyBub24tbnVsbCwgdGhlbiB3ZSBj
b3VsZCB0cnkgYGZvcm0uZWxlbWVudHNgLFxuICAgIC8vIGJ1dCB0aGF0IHNvbWV0aW1lcyBiZWhh
dmVzIHN0cmFuZ2VseSBpbiBJRTguIFdlIGNvdWxkIGFsc28gdHJ5IHVzaW5nXG4gICAgLy8gYGZv
cm0uZ2V0RWxlbWVudHNCeU5hbWVgLCBidXQgdGhhdCB3aWxsIG9ubHkgcmV0dXJuIGRpcmVjdCBj
aGlsZHJlblxuICAgIC8vIGFuZCB3b24ndCBpbmNsdWRlIGlucHV0cyB0aGF0IHVzZSB0aGUgSFRN
TDUgYGZvcm09YCBhdHRyaWJ1dGUuIFNpbmNlXG4gICAgLy8gdGhlIGlucHV0IG1pZ2h0IG5vdCBl
dmVuIGJlIGluIGEgZm9ybSwgbGV0J3MganVzdCB1c2UgdGhlIGdsb2JhbFxuICAgIC8vIGBxdWVy
eVNlbGVjdG9yQWxsYCB0byBlbnN1cmUgd2UgZG9uJ3QgbWlzcyBhbnl0aGluZy5cbiAgICB2YXIg
Z3JvdXAgPSBxdWVyeVJvb3QucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbbmFtZT0nICsgSlNPTi5z
dHJpbmdpZnkoJycgKyBuYW1lKSArICddW3R5cGU9XCJyYWRpb1wiXScpO1xuXG4gICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBncm91cC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG90aGVyTm9kZSA9
IGdyb3VwW2ldO1xuICAgICAgaWYgKG90aGVyTm9kZSA9PT0gcm9vdE5vZGUgfHwgb3RoZXJOb2Rl
LmZvcm0gIT09IHJvb3ROb2RlLmZvcm0pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4g
ICAgICAvLyBUaGlzIHdpbGwgdGhyb3cgaWYgcmFkaW8gYnV0dG9ucyByZW5kZXJlZCBieSBkaWZm
ZXJlbnQgY29waWVzIG9mIFJlYWN0XG4gICAgICAvLyBhbmQgdGhlIHNhbWUgbmFtZSBhcmUgcmVu
ZGVyZWQgaW50byB0aGUgc2FtZSBmb3JtIChzYW1lIGFzICMxOTM5KS5cbiAgICAgIC8vIFRoYXQn
cyBwcm9iYWJseSBva2F5OyB3ZSBkb24ndCBzdXBwb3J0IGl0IGp1c3QgYXMgd2UgZG9uJ3Qgc3Vw
cG9ydFxuICAgICAgLy8gbWl4aW5nIFJlYWN0IHJhZGlvIGJ1dHRvbnMgd2l0aCBub24tUmVhY3Qg
b25lcy5cbiAgICAgIHZhciBvdGhlckluc3RhbmNlID0gUmVhY3RET01Db21wb25lbnRUcmVlLmdl
dEluc3RhbmNlRnJvbU5vZGUob3RoZXJOb2RlKTtcbiAgICAgICFvdGhlckluc3RhbmNlID8gcHJv
Y2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ1Jl
YWN0RE9NSW5wdXQ6IE1peGluZyBSZWFjdCBhbmQgbm9uLVJlYWN0IHJhZGlvIGlucHV0cyB3aXRo
IHRoZSBzYW1lIGBuYW1lYCBpcyBub3Qgc3VwcG9ydGVkLicpIDogX3Byb2RJbnZhcmlhbnQoJzkw
JykgOiB2b2lkIDA7XG4gICAgICAvLyBJZiB0aGlzIGlzIGEgY29udHJvbGxlZCByYWRpbyBidXR0
b24gZ3JvdXAsIGZvcmNpbmcgdGhlIGlucHV0IHRoYXRcbiAgICAgIC8vIHdhcyBwcmV2aW91c2x5
IGNoZWNrZWQgdG8gdXBkYXRlIHdpbGwgY2F1c2UgaXQgdG8gYmUgY29tZSByZS1jaGVja2VkXG4g
ICAgICAvLyBhcyBhcHByb3ByaWF0ZS5cbiAgICAgIFJlYWN0VXBkYXRlcy5hc2FwKGZvcmNlVXBk
YXRlSWZNb3VudGVkLCBvdGhlckluc3RhbmNlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmV0
dXJuVmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RET01JbnB1dDtcblxuXG4vLy8v
Ly8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9yZWFj
dC1kb20vbGliL1JlYWN0RE9NSW5wdXQuanNcbi8vIG1vZHVsZSBpZCA9IDE1MFxuLy8gbW9kdWxl
IGNodW5rcyA9IDAiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJ
bmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMg
bGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElD
RU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBh
ZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUg
UEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG4ndXNl
IHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9ICdTRUNSRVRfRE9fTk9UX1BB
U1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQ
cm9wVHlwZXNTZWNyZXQ7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RF
UlxuLy8gLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5q
c1xuLy8gbW9kdWxlIGlkID0gMTUxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qKlxuICogQ29w
eXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0
eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGly
ZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBh
dGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUg
ZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfYXNzaWduID0gcmVx
dWlyZSgnb2JqZWN0LWFzc2lnbicpO1xuXG52YXIgUmVhY3QgPSByZXF1aXJlKCdyZWFjdC9saWIv
UmVhY3QnKTtcbnZhciBSZWFjdERPTUNvbXBvbmVudFRyZWUgPSByZXF1aXJlKCcuL1JlYWN0RE9N
Q29tcG9uZW50VHJlZScpO1xudmFyIFJlYWN0RE9NU2VsZWN0ID0gcmVxdWlyZSgnLi9SZWFjdERP
TVNlbGVjdCcpO1xuXG52YXIgd2FybmluZyA9IHJlcXVpcmUoJ2ZianMvbGliL3dhcm5pbmcnKTtc
bnZhciBkaWRXYXJuSW52YWxpZE9wdGlvbkNoaWxkcmVuID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGZs
YXR0ZW5DaGlsZHJlbihjaGlsZHJlbikge1xuICB2YXIgY29udGVudCA9ICcnO1xuXG4gIC8vIEZs
YXR0ZW4gY2hpbGRyZW4gYW5kIHdhcm4gaWYgdGhleSBhcmVuJ3Qgc3RyaW5ncyBvciBudW1iZXJz
O1xuICAvLyBpbnZhbGlkIHR5cGVzIGFyZSBpZ25vcmVkLlxuICBSZWFjdC5DaGlsZHJlbi5mb3JF
YWNoKGNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICBpZiAoY2hpbGQgPT0gbnVsbCkg
e1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGNoaWxkID09PSAnc3RyaW5n
JyB8fCB0eXBlb2YgY2hpbGQgPT09ICdudW1iZXInKSB7XG4gICAgICBjb250ZW50ICs9IGNoaWxk
O1xuICAgIH0gZWxzZSBpZiAoIWRpZFdhcm5JbnZhbGlkT3B0aW9uQ2hpbGRyZW4pIHtcbiAgICAg
IGRpZFdhcm5JbnZhbGlkT3B0aW9uQ2hpbGRyZW4gPSB0cnVlO1xuICAgICAgcHJvY2Vzcy5lbnYu
Tk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdPbmx5IHN0cmluZ3Mg
YW5kIG51bWJlcnMgYXJlIHN1cHBvcnRlZCBhcyA8b3B0aW9uPiBjaGlsZHJlbi4nKSA6IHZvaWQg
MDtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBjb250ZW50O1xufVxuXG4vKipcbiAqIEltcGxl
bWVudHMgYW4gPG9wdGlvbj4gaG9zdCBjb21wb25lbnQgdGhhdCB3YXJucyB3aGVuIGBzZWxlY3Rl
ZGAgaXMgc2V0LlxuICovXG52YXIgUmVhY3RET01PcHRpb24gPSB7XG4gIG1vdW50V3JhcHBlcjog
ZnVuY3Rpb24gKGluc3QsIHByb3BzLCBob3N0UGFyZW50KSB7XG4gICAgLy8gVE9ETyAoeXVuZ3N0
ZXJzKTogUmVtb3ZlIHN1cHBvcnQgZm9yIGBzZWxlY3RlZGAgaW4gPG9wdGlvbj4uXG4gICAgaWYg
KHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHByb2Nlc3Mu
ZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKHByb3BzLnNlbGVjdGVkID09
IG51bGwsICdVc2UgdGhlIGBkZWZhdWx0VmFsdWVgIG9yIGB2YWx1ZWAgcHJvcHMgb24gPHNlbGVj
dD4gaW5zdGVhZCBvZiAnICsgJ3NldHRpbmcgYHNlbGVjdGVkYCBvbiA8b3B0aW9uPi4nKSA6IHZv
aWQgMDtcbiAgICB9XG5cbiAgICAvLyBMb29rIHVwIHdoZXRoZXIgdGhpcyBvcHRpb24gaXMgJ3Nl
bGVjdGVkJ1xuICAgIHZhciBzZWxlY3RWYWx1ZSA9IG51bGw7XG4gICAgaWYgKGhvc3RQYXJlbnQg
IT0gbnVsbCkge1xuICAgICAgdmFyIHNlbGVjdFBhcmVudCA9IGhvc3RQYXJlbnQ7XG5cbiAgICAg
IGlmIChzZWxlY3RQYXJlbnQuX3RhZyA9PT0gJ29wdGdyb3VwJykge1xuICAgICAgICBzZWxlY3RQ
YXJlbnQgPSBzZWxlY3RQYXJlbnQuX2hvc3RQYXJlbnQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChz
ZWxlY3RQYXJlbnQgIT0gbnVsbCAmJiBzZWxlY3RQYXJlbnQuX3RhZyA9PT0gJ3NlbGVjdCcpIHtc
biAgICAgICAgc2VsZWN0VmFsdWUgPSBSZWFjdERPTVNlbGVjdC5nZXRTZWxlY3RWYWx1ZUNvbnRl
eHQoc2VsZWN0UGFyZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgdmFsdWUg
aXMgbnVsbCAoZS5nLiwgbm8gc3BlY2lmaWVkIHZhbHVlIG9yIGFmdGVyIGluaXRpYWwgbW91bnQp
XG4gICAgLy8gb3IgbWlzc2luZyAoZS5nLiwgZm9yIDxkYXRhbGlzdD4pLCB3ZSBkb24ndCBjaGFu
Z2UgcHJvcHMuc2VsZWN0ZWRcbiAgICB2YXIgc2VsZWN0ZWQgPSBudWxsO1xuICAgIGlmIChzZWxl
Y3RWYWx1ZSAhPSBudWxsKSB7XG4gICAgICB2YXIgdmFsdWU7XG4gICAgICBpZiAocHJvcHMudmFs
dWUgIT0gbnVsbCkge1xuICAgICAgICB2YWx1ZSA9IHByb3BzLnZhbHVlICsgJyc7XG4gICAgICB9
IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IGZsYXR0ZW5DaGlsZHJlbihwcm9wcy5jaGlsZHJlbik7
XG4gICAgICB9XG4gICAgICBzZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgaWYgKEFycmF5LmlzQXJy
YXkoc2VsZWN0VmFsdWUpKSB7XG4gICAgICAgIC8vIG11bHRpcGxlXG4gICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgc2VsZWN0VmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoJycg
KyBzZWxlY3RWYWx1ZVtpXSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHNlbGVjdGVkID0gdHJ1
ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBl
bHNlIHtcbiAgICAgICAgc2VsZWN0ZWQgPSAnJyArIHNlbGVjdFZhbHVlID09PSB2YWx1ZTtcbiAg
ICAgIH1cbiAgICB9XG5cbiAgICBpbnN0Ll93cmFwcGVyU3RhdGUgPSB7IHNlbGVjdGVkOiBzZWxl
Y3RlZCB9O1xuICB9LFxuXG4gIHBvc3RNb3VudFdyYXBwZXI6IGZ1bmN0aW9uIChpbnN0KSB7XG4g
ICAgLy8gdmFsdWU9XCJcIiBzaG91bGQgbWFrZSBhIHZhbHVlIGF0dHJpYnV0ZSAoIzYyMTkpXG4g
ICAgdmFyIHByb3BzID0gaW5zdC5fY3VycmVudEVsZW1lbnQucHJvcHM7XG4gICAgaWYgKHByb3Bz
LnZhbHVlICE9IG51bGwpIHtcbiAgICAgIHZhciBub2RlID0gUmVhY3RET01Db21wb25lbnRUcmVl
LmdldE5vZGVGcm9tSW5zdGFuY2UoaW5zdCk7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZSgndmFs
dWUnLCBwcm9wcy52YWx1ZSk7XG4gICAgfVxuICB9LFxuXG4gIGdldEhvc3RQcm9wczogZnVuY3Rp
b24gKGluc3QsIHByb3BzKSB7XG4gICAgdmFyIGhvc3RQcm9wcyA9IF9hc3NpZ24oeyBzZWxlY3Rl
ZDogdW5kZWZpbmVkLCBjaGlsZHJlbjogdW5kZWZpbmVkIH0sIHByb3BzKTtcblxuICAgIC8vIFJl
YWQgc3RhdGUgb25seSBmcm9tIGluaXRpYWwgbW91bnQgYmVjYXVzZSA8c2VsZWN0PiB1cGRhdGVz
IHZhbHVlXG4gICAgLy8gbWFudWFsbHk7IHdlIG5lZWQgdGhlIGluaXRpYWwgc3RhdGUgb25seSBm
b3Igc2VydmVyIHJlbmRlcmluZ1xuICAgIGlmIChpbnN0Ll93cmFwcGVyU3RhdGUuc2VsZWN0ZWQg
IT0gbnVsbCkge1xuICAgICAgaG9zdFByb3BzLnNlbGVjdGVkID0gaW5zdC5fd3JhcHBlclN0YXRl
LnNlbGVjdGVkO1xuICAgIH1cblxuICAgIHZhciBjb250ZW50ID0gZmxhdHRlbkNoaWxkcmVuKHBy
b3BzLmNoaWxkcmVuKTtcblxuICAgIGlmIChjb250ZW50KSB7XG4gICAgICBob3N0UHJvcHMuY2hp
bGRyZW4gPSBjb250ZW50O1xuICAgIH1cblxuICAgIHJldHVybiBob3N0UHJvcHM7XG4gIH1cbn07
XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RET01PcHRpb247XG5cblxuLy8vLy8vLy8vLy8vLy8v
Ly8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9S
ZWFjdERPTU9wdGlvbi5qc1xuLy8gbW9kdWxlIGlkID0gMTUyXG4vLyBtb2R1bGUgY2h1bmtzID0g
MCIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1
bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwg
Z3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZp
bGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZh
ciBfcHJvZEludmFyaWFudCA9IHJlcXVpcmUoJy4vcmVhY3RQcm9kSW52YXJpYW50JyksXG4gICAg
X2Fzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxudmFyIExpbmtlZFZhbHVlVXRp
bHMgPSByZXF1aXJlKCcuL0xpbmtlZFZhbHVlVXRpbHMnKTtcbnZhciBSZWFjdERPTUNvbXBvbmVu
dFRyZWUgPSByZXF1aXJlKCcuL1JlYWN0RE9NQ29tcG9uZW50VHJlZScpO1xudmFyIFJlYWN0VXBk
YXRlcyA9IHJlcXVpcmUoJy4vUmVhY3RVcGRhdGVzJyk7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1
aXJlKCdmYmpzL2xpYi9pbnZhcmlhbnQnKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9s
aWIvd2FybmluZycpO1xuXG52YXIgZGlkV2FyblZhbHVlTGluayA9IGZhbHNlO1xudmFyIGRpZFdh
cm5WYWxEZWZhdWx0VmFsID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGZvcmNlVXBkYXRlSWZNb3VudGVk
KCkge1xuICBpZiAodGhpcy5fcm9vdE5vZGVJRCkge1xuICAgIC8vIERPTSBjb21wb25lbnQgaXMg
c3RpbGwgbW91bnRlZDsgdXBkYXRlXG4gICAgUmVhY3RET01UZXh0YXJlYS51cGRhdGVXcmFwcGVy
KHRoaXMpO1xuICB9XG59XG5cbi8qKlxuICogSW1wbGVtZW50cyBhIDx0ZXh0YXJlYT4gaG9zdCBj
b21wb25lbnQgdGhhdCBhbGxvd3Mgc2V0dGluZyBgdmFsdWVgLCBhbmRcbiAqIGBkZWZhdWx0VmFs
dWVgLiBUaGlzIGRpZmZlcnMgZnJvbSB0aGUgdHJhZGl0aW9uYWwgRE9NIEFQSSBiZWNhdXNlIHZh
bHVlIGlzXG4gKiB1c3VhbGx5IHNldCBhcyBQQ0RBVEEgY2hpbGRyZW4uXG4gKlxuICogSWYgYHZh
bHVlYCBpcyBub3Qgc3VwcGxpZWQgKG9yIG51bGwvdW5kZWZpbmVkKSwgdXNlciBhY3Rpb25zIHRo
YXQgYWZmZWN0IHRoZVxuICogdmFsdWUgd2lsbCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIGVsZW1l
bnQuXG4gKlxuICogSWYgYHZhbHVlYCBpcyBzdXBwbGllZCAoYW5kIG5vdCBudWxsL3VuZGVmaW5l
ZCksIHRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGxcbiAqIG5vdCB0cmlnZ2VyIHVwZGF0ZXMgdG8g
dGhlIGVsZW1lbnQuIEluc3RlYWQsIHRoZSBgdmFsdWVgIHByb3AgbXVzdCBjaGFuZ2UgaW5cbiAq
IG9yZGVyIGZvciB0aGUgcmVuZGVyZWQgZWxlbWVudCB0byBiZSB1cGRhdGVkLlxuICpcbiAqIFRo
ZSByZW5kZXJlZCBlbGVtZW50IHdpbGwgYmUgaW5pdGlhbGl6ZWQgd2l0aCBhbiBlbXB0eSB2YWx1
ZSwgdGhlIHByb3BcbiAqIGBkZWZhdWx0VmFsdWVgIGlmIHNwZWNpZmllZCwgb3IgdGhlIGNoaWxk
cmVuIGNvbnRlbnQgKGRlcHJlY2F0ZWQpLlxuICovXG52YXIgUmVhY3RET01UZXh0YXJlYSA9IHtc
biAgZ2V0SG9zdFByb3BzOiBmdW5jdGlvbiAoaW5zdCwgcHJvcHMpIHtcbiAgICAhKHByb3BzLmRh
bmdlcm91c2x5U2V0SW5uZXJIVE1MID09IG51bGwpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09
ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ2BkYW5nZXJvdXNseVNldElubmVySFRN
TGAgZG9lcyBub3QgbWFrZSBzZW5zZSBvbiA8dGV4dGFyZWE+LicpIDogX3Byb2RJbnZhcmlhbnQo
JzkxJykgOiB2b2lkIDA7XG5cbiAgICAvLyBBbHdheXMgc2V0IGNoaWxkcmVuIHRvIHRoZSBzYW1l
IHRoaW5nLiBJbiBJRTksIHRoZSBzZWxlY3Rpb24gcmFuZ2Ugd2lsbFxuICAgIC8vIGdldCByZXNl
dCBpZiBgdGV4dENvbnRlbnRgIGlzIG11dGF0ZWQuICBXZSBjb3VsZCBhZGQgYSBjaGVjayBpbiBz
ZXRUZXh0Q29udGVudFxuICAgIC8vIHRvIG9ubHkgc2V0IHRoZSB2YWx1ZSBpZi93aGVuIHRoZSB2
YWx1ZSBkaWZmZXJzIGZyb20gdGhlIG5vZGUgdmFsdWUgKHdoaWNoIHdvdWxkXG4gICAgLy8gY29t
cGxldGVseSBzb2x2ZSB0aGlzIElFOSBidWcpLCBidXQgU2ViYXN0aWFuK0JlbiBzZWVtZWQgdG8g
bGlrZSB0aGlzIHNvbHV0aW9uLlxuICAgIC8vIFRoZSB2YWx1ZSBjYW4gYmUgYSBib29sZWFuIG9y
IG9iamVjdCBzbyB0aGF0J3Mgd2h5IGl0J3MgZm9yY2VkIHRvIGJlIGEgc3RyaW5nLlxuICAgIHZh
ciBob3N0UHJvcHMgPSBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgdmFsdWU6IHVuZGVmaW5l
ZCxcbiAgICAgIGRlZmF1bHRWYWx1ZTogdW5kZWZpbmVkLFxuICAgICAgY2hpbGRyZW46ICcnICsg
aW5zdC5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSxcbiAgICAgIG9uQ2hhbmdlOiBpbnN0Ll93
cmFwcGVyU3RhdGUub25DaGFuZ2VcbiAgICB9KTtcblxuICAgIHJldHVybiBob3N0UHJvcHM7XG4g
IH0sXG5cbiAgbW91bnRXcmFwcGVyOiBmdW5jdGlvbiAoaW5zdCwgcHJvcHMpIHtcbiAgICBpZiAo
cHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgTGlua2VkVmFs
dWVVdGlscy5jaGVja1Byb3BUeXBlcygndGV4dGFyZWEnLCBwcm9wcywgaW5zdC5fY3VycmVudEVs
ZW1lbnQuX293bmVyKTtcbiAgICAgIGlmIChwcm9wcy52YWx1ZUxpbmsgIT09IHVuZGVmaW5lZCAm
JiAhZGlkV2FyblZhbHVlTGluaykge1xuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0g
J3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ2B2YWx1ZUxpbmtgIHByb3Agb24gYHRleHRh
cmVhYCBpcyBkZXByZWNhdGVkOyBzZXQgYHZhbHVlYCBhbmQgYG9uQ2hhbmdlYCBpbnN0ZWFkLicp
IDogdm9pZCAwO1xuICAgICAgICBkaWRXYXJuVmFsdWVMaW5rID0gdHJ1ZTtcbiAgICAgIH1cbiAg
ICAgIGlmIChwcm9wcy52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmRlZmF1bHRWYWx1ZSAh
PT0gdW5kZWZpbmVkICYmICFkaWRXYXJuVmFsRGVmYXVsdFZhbCkge1xuICAgICAgICBwcm9jZXNz
LmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ1RleHRhcmVh
IGVsZW1lbnRzIG11c3QgYmUgZWl0aGVyIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkICcgKyAn
KHNwZWNpZnkgZWl0aGVyIHRoZSB2YWx1ZSBwcm9wLCBvciB0aGUgZGVmYXVsdFZhbHVlIHByb3As
IGJ1dCBub3QgJyArICdib3RoKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9y
IHVuY29udHJvbGxlZCB0ZXh0YXJlYSAnICsgJ2FuZCByZW1vdmUgb25lIG9mIHRoZXNlIHByb3Bz
LiBNb3JlIGluZm86ICcgKyAnaHR0cHM6Ly9mYi5tZS9yZWFjdC1jb250cm9sbGVkLWNvbXBvbmVu
dHMnKSA6IHZvaWQgMDtcbiAgICAgICAgZGlkV2FyblZhbERlZmF1bHRWYWwgPSB0cnVlO1xuICAg
ICAgfVxuICAgIH1cblxuICAgIHZhciB2YWx1ZSA9IExpbmtlZFZhbHVlVXRpbHMuZ2V0VmFsdWUo
cHJvcHMpO1xuICAgIHZhciBpbml0aWFsVmFsdWUgPSB2YWx1ZTtcblxuICAgIC8vIE9ubHkgYm90
aGVyIGZldGNoaW5nIGRlZmF1bHQgdmFsdWUgaWYgd2UncmUgZ29pbmcgdG8gdXNlIGl0XG4gICAg
aWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgIHZhciBkZWZhdWx0VmFsdWUgPSBwcm9wcy5kZWZh
dWx0VmFsdWU7XG4gICAgICAvLyBUT0RPICh5dW5nc3RlcnMpOiBSZW1vdmUgc3VwcG9ydCBmb3Ig
Y2hpbGRyZW4gY29udGVudCBpbiA8dGV4dGFyZWE+LlxuICAgICAgdmFyIGNoaWxkcmVuID0gcHJv
cHMuY2hpbGRyZW47XG4gICAgICBpZiAoY2hpbGRyZW4gIT0gbnVsbCkge1xuICAgICAgICBpZiAo
cHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIHByb2Nl
c3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnVXNlIHRo
ZSBgZGVmYXVsdFZhbHVlYCBvciBgdmFsdWVgIHByb3BzIGluc3RlYWQgb2Ygc2V0dGluZyAnICsg
J2NoaWxkcmVuIG9uIDx0ZXh0YXJlYT4uJykgOiB2b2lkIDA7XG4gICAgICAgIH1cbiAgICAgICAg
IShkZWZhdWx0VmFsdWUgPT0gbnVsbCkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1
Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnSWYgeW91IHN1cHBseSBgZGVmYXVsdFZhbHVlYCBv
biBhIDx0ZXh0YXJlYT4sIGRvIG5vdCBwYXNzIGNoaWxkcmVuLicpIDogX3Byb2RJbnZhcmlhbnQo
JzkyJykgOiB2b2lkIDA7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xu
ICAgICAgICAgICEoY2hpbGRyZW4ubGVuZ3RoIDw9IDEpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYg
IT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJzx0ZXh0YXJlYT4gY2FuIG9ubHkg
aGF2ZSBhdCBtb3N0IG9uZSBjaGlsZC4nKSA6IF9wcm9kSW52YXJpYW50KCc5MycpIDogdm9pZCAw
O1xuICAgICAgICAgIGNoaWxkcmVuID0gY2hpbGRyZW5bMF07XG4gICAgICAgIH1cblxuICAgICAg
ICBkZWZhdWx0VmFsdWUgPSAnJyArIGNoaWxkcmVuO1xuICAgICAgfVxuICAgICAgaWYgKGRlZmF1
bHRWYWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9ICcnO1xuICAgICAgfVxu
ICAgICAgaW5pdGlhbFZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIGluc3QuX3dy
YXBwZXJTdGF0ZSA9IHtcbiAgICAgIGluaXRpYWxWYWx1ZTogJycgKyBpbml0aWFsVmFsdWUsXG4g
ICAgICBsaXN0ZW5lcnM6IG51bGwsXG4gICAgICBvbkNoYW5nZTogX2hhbmRsZUNoYW5nZS5iaW5k
KGluc3QpXG4gICAgfTtcbiAgfSxcblxuICB1cGRhdGVXcmFwcGVyOiBmdW5jdGlvbiAoaW5zdCkg
e1xuICAgIHZhciBwcm9wcyA9IGluc3QuX2N1cnJlbnRFbGVtZW50LnByb3BzO1xuXG4gICAgdmFy
IG5vZGUgPSBSZWFjdERPTUNvbXBvbmVudFRyZWUuZ2V0Tm9kZUZyb21JbnN0YW5jZShpbnN0KTtc
biAgICB2YXIgdmFsdWUgPSBMaW5rZWRWYWx1ZVV0aWxzLmdldFZhbHVlKHByb3BzKTtcbiAgICBp
ZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgLy8gQ2FzdCBgdmFsdWVgIHRvIGEgc3RyaW5nIHRv
IGVuc3VyZSB0aGUgdmFsdWUgaXMgc2V0IGNvcnJlY3RseS4gV2hpbGVcbiAgICAgIC8vIGJyb3dz
ZXJzIHR5cGljYWxseSBkbyB0aGlzIGFzIG5lY2Vzc2FyeSwganNkb20gZG9lc24ndC5cbiAgICAg
IHZhciBuZXdWYWx1ZSA9ICcnICsgdmFsdWU7XG5cbiAgICAgIC8vIFRvIGF2b2lkIHNpZGUgZWZm
ZWN0cyAoc3VjaCBhcyBsb3NpbmcgdGV4dCBzZWxlY3Rpb24pLCBvbmx5IHNldCB2YWx1ZSBpZiBj
aGFuZ2VkXG4gICAgICBpZiAobmV3VmFsdWUgIT09IG5vZGUudmFsdWUpIHtcbiAgICAgICAgbm9k
ZS52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzLmRlZmF1bHRWYWx1
ZSA9PSBudWxsKSB7XG4gICAgICAgIG5vZGUuZGVmYXVsdFZhbHVlID0gbmV3VmFsdWU7XG4gICAg
ICB9XG4gICAgfVxuICAgIGlmIChwcm9wcy5kZWZhdWx0VmFsdWUgIT0gbnVsbCkge1xuICAgICAg
bm9kZS5kZWZhdWx0VmFsdWUgPSBwcm9wcy5kZWZhdWx0VmFsdWU7XG4gICAgfVxuICB9LFxuXG4g
IHBvc3RNb3VudFdyYXBwZXI6IGZ1bmN0aW9uIChpbnN0KSB7XG4gICAgLy8gVGhpcyBpcyBpbiBw
b3N0TW91bnQgYmVjYXVzZSB3ZSBuZWVkIGFjY2VzcyB0byB0aGUgRE9NIG5vZGUsIHdoaWNoIGlz
IG5vdFxuICAgIC8vIGF2YWlsYWJsZSB1bnRpbCBhZnRlciB0aGUgY29tcG9uZW50IGhhcyBtb3Vu
dGVkLlxuICAgIHZhciBub2RlID0gUmVhY3RET01Db21wb25lbnRUcmVlLmdldE5vZGVGcm9tSW5z
dGFuY2UoaW5zdCk7XG4gICAgdmFyIHRleHRDb250ZW50ID0gbm9kZS50ZXh0Q29udGVudDtcblxu
ICAgIC8vIE9ubHkgc2V0IG5vZGUudmFsdWUgaWYgdGV4dENvbnRlbnQgaXMgZXF1YWwgdG8gdGhl
IGV4cGVjdGVkXG4gICAgLy8gaW5pdGlhbCB2YWx1ZS4gSW4gSUUxMC9JRTExIHRoZXJlIGlzIGEg
YnVnIHdoZXJlIHRoZSBwbGFjZWhvbGRlciBhdHRyaWJ1dGVcbiAgICAvLyB3aWxsIHBvcHVsYXRl
IHRleHRDb250ZW50IGFzIHdlbGwuXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubWljcm9zb2Z0
LmNvbS9taWNyb3NvZnQtZWRnZS9wbGF0Zm9ybS9pc3N1ZXMvMTAxNTI1L1xuICAgIGlmICh0ZXh0
Q29udGVudCA9PT0gaW5zdC5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSkge1xuICAgICAgbm9k
ZS52YWx1ZSA9IHRleHRDb250ZW50O1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gX2hhbmRs
ZUNoYW5nZShldmVudCkge1xuICB2YXIgcHJvcHMgPSB0aGlzLl9jdXJyZW50RWxlbWVudC5wcm9w
cztcbiAgdmFyIHJldHVyblZhbHVlID0gTGlua2VkVmFsdWVVdGlscy5leGVjdXRlT25DaGFuZ2Uo
cHJvcHMsIGV2ZW50KTtcbiAgUmVhY3RVcGRhdGVzLmFzYXAoZm9yY2VVcGRhdGVJZk1vdW50ZWQs
IHRoaXMpO1xuICByZXR1cm4gcmV0dXJuVmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmVh
Y3RET01UZXh0YXJlYTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVS
XG4vLyAuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RE9NVGV4dGFyZWEuanNcbi8v
IG1vZHVsZSBpZCA9IDE1M1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipcbiAqIENvcHlyaWdo
dCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxu
ICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBs
aWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9y
eSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQg
cmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVj
dG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3Byb2RJbnZhcmlhbnQgPSBy
ZXF1aXJlKCcuL3JlYWN0UHJvZEludmFyaWFudCcpO1xuXG52YXIgUmVhY3RDb21wb25lbnRFbnZp
cm9ubWVudCA9IHJlcXVpcmUoJy4vUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudCcpO1xudmFyIFJl
YWN0SW5zdGFuY2VNYXAgPSByZXF1aXJlKCcuL1JlYWN0SW5zdGFuY2VNYXAnKTtcbnZhciBSZWFj
dEluc3RydW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vUmVhY3RJbnN0cnVtZW50YXRpb24nKTtcblxu
dmFyIFJlYWN0Q3VycmVudE93bmVyID0gcmVxdWlyZSgncmVhY3QvbGliL1JlYWN0Q3VycmVudE93
bmVyJyk7XG52YXIgUmVhY3RSZWNvbmNpbGVyID0gcmVxdWlyZSgnLi9SZWFjdFJlY29uY2lsZXIn
KTtcbnZhciBSZWFjdENoaWxkUmVjb25jaWxlciA9IHJlcXVpcmUoJy4vUmVhY3RDaGlsZFJlY29u
Y2lsZXInKTtcblxudmFyIGVtcHR5RnVuY3Rpb24gPSByZXF1aXJlKCdmYmpzL2xpYi9lbXB0eUZ1
bmN0aW9uJyk7XG52YXIgZmxhdHRlbkNoaWxkcmVuID0gcmVxdWlyZSgnLi9mbGF0dGVuQ2hpbGRy
ZW4nKTtcbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKCdmYmpzL2xpYi9pbnZhcmlhbnQnKTtcblxu
LyoqXG4gKiBNYWtlIGFuIHVwZGF0ZSBmb3IgbWFya3VwIHRvIGJlIHJlbmRlcmVkIGFuZCBpbnNl
cnRlZCBhdCBhIHN1cHBsaWVkIGluZGV4LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtYXJrdXAg
TWFya3VwIHRoYXQgcmVuZGVycyBpbnRvIGFuIGVsZW1lbnQuXG4gKiBAcGFyYW0ge251bWJlcn0g
dG9JbmRleCBEZXN0aW5hdGlvbiBpbmRleC5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIG1h
a2VJbnNlcnRNYXJrdXAobWFya3VwLCBhZnRlck5vZGUsIHRvSW5kZXgpIHtcbiAgLy8gTk9URTog
TnVsbCB2YWx1ZXMgcmVkdWNlIGhpZGRlbiBjbGFzc2VzLlxuICByZXR1cm4ge1xuICAgIHR5cGU6
ICdJTlNFUlRfTUFSS1VQJyxcbiAgICBjb250ZW50OiBtYXJrdXAsXG4gICAgZnJvbUluZGV4OiBu
dWxsLFxuICAgIGZyb21Ob2RlOiBudWxsLFxuICAgIHRvSW5kZXg6IHRvSW5kZXgsXG4gICAgYWZ0
ZXJOb2RlOiBhZnRlck5vZGVcbiAgfTtcbn1cblxuLyoqXG4gKiBNYWtlIGFuIHVwZGF0ZSBmb3Ig
bW92aW5nIGFuIGV4aXN0aW5nIGVsZW1lbnQgdG8gYW5vdGhlciBpbmRleC5cbiAqXG4gKiBAcGFy
YW0ge251bWJlcn0gZnJvbUluZGV4IFNvdXJjZSBpbmRleCBvZiB0aGUgZXhpc3RpbmcgZWxlbWVu
dC5cbiAqIEBwYXJhbSB7bnVtYmVyfSB0b0luZGV4IERlc3RpbmF0aW9uIGluZGV4IG9mIHRoZSBl
bGVtZW50LlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gbWFrZU1vdmUoY2hpbGQsIGFmdGVy
Tm9kZSwgdG9JbmRleCkge1xuICAvLyBOT1RFOiBOdWxsIHZhbHVlcyByZWR1Y2UgaGlkZGVuIGNs
YXNzZXMuXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ01PVkVfRVhJU1RJTkcnLFxuICAgIGNvbnRl
bnQ6IG51bGwsXG4gICAgZnJvbUluZGV4OiBjaGlsZC5fbW91bnRJbmRleCxcbiAgICBmcm9tTm9k
ZTogUmVhY3RSZWNvbmNpbGVyLmdldEhvc3ROb2RlKGNoaWxkKSxcbiAgICB0b0luZGV4OiB0b0lu
ZGV4LFxuICAgIGFmdGVyTm9kZTogYWZ0ZXJOb2RlXG4gIH07XG59XG5cbi8qKlxuICogTWFrZSBh
biB1cGRhdGUgZm9yIHJlbW92aW5nIGFuIGVsZW1lbnQgYXQgYW4gaW5kZXguXG4gKlxuICogQHBh
cmFtIHtudW1iZXJ9IGZyb21JbmRleCBJbmRleCBvZiB0aGUgZWxlbWVudCB0byByZW1vdmUuXG4g
KiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBtYWtlUmVtb3ZlKGNoaWxkLCBub2RlKSB7XG4gIC8v
IE5PVEU6IE51bGwgdmFsdWVzIHJlZHVjZSBoaWRkZW4gY2xhc3Nlcy5cbiAgcmV0dXJuIHtcbiAg
ICB0eXBlOiAnUkVNT1ZFX05PREUnLFxuICAgIGNvbnRlbnQ6IG51bGwsXG4gICAgZnJvbUluZGV4
OiBjaGlsZC5fbW91bnRJbmRleCxcbiAgICBmcm9tTm9kZTogbm9kZSxcbiAgICB0b0luZGV4OiBu
dWxsLFxuICAgIGFmdGVyTm9kZTogbnVsbFxuICB9O1xufVxuXG4vKipcbiAqIE1ha2UgYW4gdXBk
YXRlIGZvciBzZXR0aW5nIHRoZSBtYXJrdXAgb2YgYSBub2RlLlxuICpcbiAqIEBwYXJhbSB7c3Ry
aW5nfSBtYXJrdXAgTWFya3VwIHRoYXQgcmVuZGVycyBpbnRvIGFuIGVsZW1lbnQuXG4gKiBAcHJp
dmF0ZVxuICovXG5mdW5jdGlvbiBtYWtlU2V0TWFya3VwKG1hcmt1cCkge1xuICAvLyBOT1RFOiBO
dWxsIHZhbHVlcyByZWR1Y2UgaGlkZGVuIGNsYXNzZXMuXG4gIHJldHVybiB7XG4gICAgdHlwZTog
J1NFVF9NQVJLVVAnLFxuICAgIGNvbnRlbnQ6IG1hcmt1cCxcbiAgICBmcm9tSW5kZXg6IG51bGws
XG4gICAgZnJvbU5vZGU6IG51bGwsXG4gICAgdG9JbmRleDogbnVsbCxcbiAgICBhZnRlck5vZGU6
IG51bGxcbiAgfTtcbn1cblxuLyoqXG4gKiBNYWtlIGFuIHVwZGF0ZSBmb3Igc2V0dGluZyB0aGUg
dGV4dCBjb250ZW50LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0Q29udGVudCBUZXh0IGNv
bnRlbnQgdG8gc2V0LlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gbWFrZVRleHRDb250ZW50
KHRleHRDb250ZW50KSB7XG4gIC8vIE5PVEU6IE51bGwgdmFsdWVzIHJlZHVjZSBoaWRkZW4gY2xh
c3Nlcy5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnVEVYVF9DT05URU5UJyxcbiAgICBjb250ZW50
OiB0ZXh0Q29udGVudCxcbiAgICBmcm9tSW5kZXg6IG51bGwsXG4gICAgZnJvbU5vZGU6IG51bGws
XG4gICAgdG9JbmRleDogbnVsbCxcbiAgICBhZnRlck5vZGU6IG51bGxcbiAgfTtcbn1cblxuLyoq
XG4gKiBQdXNoIGFuIHVwZGF0ZSwgaWYgYW55LCBvbnRvIHRoZSBxdWV1ZS4gQ3JlYXRlcyBhIG5l
dyBxdWV1ZSBpZiBub25lIGlzXG4gKiBwYXNzZWQgYW5kIGFsd2F5cyByZXR1cm5zIHRoZSBxdWV1
ZS4gTXV0YXRpdmUuXG4gKi9cbmZ1bmN0aW9uIGVucXVldWUocXVldWUsIHVwZGF0ZSkge1xuICBp
ZiAodXBkYXRlKSB7XG4gICAgcXVldWUgPSBxdWV1ZSB8fCBbXTtcbiAgICBxdWV1ZS5wdXNoKHVw
ZGF0ZSk7XG4gIH1cbiAgcmV0dXJuIHF1ZXVlO1xufVxuXG4vKipcbiAqIFByb2Nlc3NlcyBhbnkg
ZW5xdWV1ZWQgdXBkYXRlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBwcm9jZXNz
UXVldWUoaW5zdCwgdXBkYXRlUXVldWUpIHtcbiAgUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudC5w
cm9jZXNzQ2hpbGRyZW5VcGRhdGVzKGluc3QsIHVwZGF0ZVF1ZXVlKTtcbn1cblxudmFyIHNldENo
aWxkcmVuRm9ySW5zdHJ1bWVudGF0aW9uID0gZW1wdHlGdW5jdGlvbjtcbmlmIChwcm9jZXNzLmVu
di5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBnZXREZWJ1Z0lEID0gZnVuY3Rp
b24gKGluc3QpIHtcbiAgICBpZiAoIWluc3QuX2RlYnVnSUQpIHtcbiAgICAgIC8vIENoZWNrIGZv
ciBBUlQtbGlrZSBpbnN0YW5jZXMuIFRPRE86IFRoaXMgaXMgc2lsbHkvZ3Jvc3MuXG4gICAgICB2
YXIgaW50ZXJuYWw7XG4gICAgICBpZiAoaW50ZXJuYWwgPSBSZWFjdEluc3RhbmNlTWFwLmdldChp
bnN0KSkge1xuICAgICAgICBpbnN0ID0gaW50ZXJuYWw7XG4gICAgICB9XG4gICAgfVxuICAgIHJl
dHVybiBpbnN0Ll9kZWJ1Z0lEO1xuICB9O1xuICBzZXRDaGlsZHJlbkZvckluc3RydW1lbnRhdGlv
biA9IGZ1bmN0aW9uIChjaGlsZHJlbikge1xuICAgIHZhciBkZWJ1Z0lEID0gZ2V0RGVidWdJRCh0
aGlzKTtcbiAgICAvLyBUT0RPOiBSZWFjdCBOYXRpdmUgZW1wdHkgY29tcG9uZW50cyBhcmUgYWxz
byBtdWx0aWNoaWxkLlxuICAgIC8vIFRoaXMgbWVhbnMgdGhleSBzdGlsbCBnZXQgaW50byB0aGlz
IG1ldGhvZCBidXQgZG9uJ3QgaGF2ZSBfZGVidWdJRC5cbiAgICBpZiAoZGVidWdJRCAhPT0gMCkg
e1xuICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uU2V0Q2hpbGRyZW4oZGVi
dWdJRCwgY2hpbGRyZW4gPyBPYmplY3Qua2V5cyhjaGlsZHJlbikubWFwKGZ1bmN0aW9uIChrZXkp
IHtcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuW2tleV0uX2RlYnVnSUQ7XG4gICAgICB9KSA6IFtd
KTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogUmVhY3RNdWx0aUNoaWxkIGFyZSBjYXBhYmxl
IG9mIHJlY29uY2lsaW5nIG11bHRpcGxlIGNoaWxkcmVuLlxuICpcbiAqIEBjbGFzcyBSZWFjdE11
bHRpQ2hpbGRcbiAqIEBpbnRlcm5hbFxuICovXG52YXIgUmVhY3RNdWx0aUNoaWxkID0ge1xuICAv
KipcbiAgICogUHJvdmlkZXMgY29tbW9uIGZ1bmN0aW9uYWxpdHkgZm9yIGNvbXBvbmVudHMgdGhh
dCBtdXN0IHJlY29uY2lsZSBtdWx0aXBsZVxuICAgKiBjaGlsZHJlbi4gVGhpcyBpcyB1c2VkIGJ5
IGBSZWFjdERPTUNvbXBvbmVudGAgdG8gbW91bnQsIHVwZGF0ZSwgYW5kXG4gICAqIHVubW91bnQg
Y2hpbGQgY29tcG9uZW50cy5cbiAgICpcbiAgICogQGxlbmRzIHtSZWFjdE11bHRpQ2hpbGQucHJv
dG90eXBlfVxuICAgKi9cbiAgTWl4aW46IHtcbiAgICBfcmVjb25jaWxlckluc3RhbnRpYXRlQ2hp
bGRyZW46IGZ1bmN0aW9uIChuZXN0ZWRDaGlsZHJlbiwgdHJhbnNhY3Rpb24sIGNvbnRleHQpIHtc
biAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAg
ICAgIHZhciBzZWxmRGVidWdJRCA9IGdldERlYnVnSUQodGhpcyk7XG4gICAgICAgIGlmICh0aGlz
Ll9jdXJyZW50RWxlbWVudCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBSZWFjdEN1
cnJlbnRPd25lci5jdXJyZW50ID0gdGhpcy5fY3VycmVudEVsZW1lbnQuX293bmVyO1xuICAgICAg
ICAgICAgcmV0dXJuIFJlYWN0Q2hpbGRSZWNvbmNpbGVyLmluc3RhbnRpYXRlQ2hpbGRyZW4obmVz
dGVkQ2hpbGRyZW4sIHRyYW5zYWN0aW9uLCBjb250ZXh0LCBzZWxmRGVidWdJRCk7XG4gICAgICAg
ICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgPSBu
dWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFJlYWN0
Q2hpbGRSZWNvbmNpbGVyLmluc3RhbnRpYXRlQ2hpbGRyZW4obmVzdGVkQ2hpbGRyZW4sIHRyYW5z
YWN0aW9uLCBjb250ZXh0KTtcbiAgICB9LFxuXG4gICAgX3JlY29uY2lsZXJVcGRhdGVDaGlsZHJl
bjogZnVuY3Rpb24gKHByZXZDaGlsZHJlbiwgbmV4dE5lc3RlZENoaWxkcmVuRWxlbWVudHMsIG1v
dW50SW1hZ2VzLCByZW1vdmVkTm9kZXMsIHRyYW5zYWN0aW9uLCBjb250ZXh0KSB7XG4gICAgICB2
YXIgbmV4dENoaWxkcmVuO1xuICAgICAgdmFyIHNlbGZEZWJ1Z0lEID0gMDtcbiAgICAgIGlmIChw
cm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHNlbGZEZWJ1
Z0lEID0gZ2V0RGVidWdJRCh0aGlzKTtcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRFbGVtZW50
KSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIFJlYWN0Q3VycmVudE93bmVyLmN1cnJl
bnQgPSB0aGlzLl9jdXJyZW50RWxlbWVudC5fb3duZXI7XG4gICAgICAgICAgICBuZXh0Q2hpbGRy
ZW4gPSBmbGF0dGVuQ2hpbGRyZW4obmV4dE5lc3RlZENoaWxkcmVuRWxlbWVudHMsIHNlbGZEZWJ1
Z0lEKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgUmVhY3RDdXJyZW50T3du
ZXIuY3VycmVudCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIFJlYWN0Q2hpbGRSZWNv
bmNpbGVyLnVwZGF0ZUNoaWxkcmVuKHByZXZDaGlsZHJlbiwgbmV4dENoaWxkcmVuLCBtb3VudElt
YWdlcywgcmVtb3ZlZE5vZGVzLCB0cmFuc2FjdGlvbiwgdGhpcywgdGhpcy5faG9zdENvbnRhaW5l
ckluZm8sIGNvbnRleHQsIHNlbGZEZWJ1Z0lEKTtcbiAgICAgICAgICByZXR1cm4gbmV4dENoaWxk
cmVuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBuZXh0Q2hpbGRyZW4gPSBmbGF0dGVuQ2hp
bGRyZW4obmV4dE5lc3RlZENoaWxkcmVuRWxlbWVudHMsIHNlbGZEZWJ1Z0lEKTtcbiAgICAgIFJl
YWN0Q2hpbGRSZWNvbmNpbGVyLnVwZGF0ZUNoaWxkcmVuKHByZXZDaGlsZHJlbiwgbmV4dENoaWxk
cmVuLCBtb3VudEltYWdlcywgcmVtb3ZlZE5vZGVzLCB0cmFuc2FjdGlvbiwgdGhpcywgdGhpcy5f
aG9zdENvbnRhaW5lckluZm8sIGNvbnRleHQsIHNlbGZEZWJ1Z0lEKTtcbiAgICAgIHJldHVybiBu
ZXh0Q2hpbGRyZW47XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlcyBhIFwibW91
bnQgaW1hZ2VcIiBmb3IgZWFjaCBvZiB0aGUgc3VwcGxpZWQgY2hpbGRyZW4uIEluIHRoZSBjYXNl
XG4gICAgICogb2YgYFJlYWN0RE9NQ29tcG9uZW50YCwgYSBtb3VudCBpbWFnZSBpcyBhIHN0cmlu
ZyBvZiBtYXJrdXAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gez9vYmplY3R9IG5lc3RlZENoaWxk
cmVuIE5lc3RlZCBjaGlsZCBtYXBzLlxuICAgICAqIEByZXR1cm4ge2FycmF5fSBBbiBhcnJheSBv
ZiBtb3VudGVkIHJlcHJlc2VudGF0aW9ucy5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAg
ICBtb3VudENoaWxkcmVuOiBmdW5jdGlvbiAobmVzdGVkQ2hpbGRyZW4sIHRyYW5zYWN0aW9uLCBj
b250ZXh0KSB7XG4gICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLl9yZWNvbmNpbGVySW5zdGFudGlh
dGVDaGlsZHJlbihuZXN0ZWRDaGlsZHJlbiwgdHJhbnNhY3Rpb24sIGNvbnRleHQpO1xuICAgICAg
dGhpcy5fcmVuZGVyZWRDaGlsZHJlbiA9IGNoaWxkcmVuO1xuXG4gICAgICB2YXIgbW91bnRJbWFn
ZXMgPSBbXTtcbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICBmb3IgKHZhciBuYW1lIGluIGNo
aWxkcmVuKSB7XG4gICAgICAgIGlmIChjaGlsZHJlbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xu
ICAgICAgICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW25hbWVdO1xuICAgICAgICAgIHZhciBzZWxm
RGVidWdJRCA9IDA7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJv
ZHVjdGlvbicpIHtcbiAgICAgICAgICAgIHNlbGZEZWJ1Z0lEID0gZ2V0RGVidWdJRCh0aGlzKTtc
biAgICAgICAgICB9XG4gICAgICAgICAgdmFyIG1vdW50SW1hZ2UgPSBSZWFjdFJlY29uY2lsZXIu
bW91bnRDb21wb25lbnQoY2hpbGQsIHRyYW5zYWN0aW9uLCB0aGlzLCB0aGlzLl9ob3N0Q29udGFp
bmVySW5mbywgY29udGV4dCwgc2VsZkRlYnVnSUQpO1xuICAgICAgICAgIGNoaWxkLl9tb3VudElu
ZGV4ID0gaW5kZXgrKztcbiAgICAgICAgICBtb3VudEltYWdlcy5wdXNoKG1vdW50SW1hZ2UpO1xu
ICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0g
J3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHNldENoaWxkcmVuRm9ySW5zdHJ1bWVudGF0aW9uLmNh
bGwodGhpcywgY2hpbGRyZW4pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbW91bnRJbWFnZXM7
XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJlcGxhY2VzIGFueSByZW5kZXJlZCBjaGlsZHJl
biB3aXRoIGEgdGV4dCBjb250ZW50IHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3Ry
aW5nfSBuZXh0Q29udGVudCBTdHJpbmcgb2YgY29udGVudC5cbiAgICAgKiBAaW50ZXJuYWxcbiAg
ICAgKi9cbiAgICB1cGRhdGVUZXh0Q29udGVudDogZnVuY3Rpb24gKG5leHRDb250ZW50KSB7XG4g
ICAgICB2YXIgcHJldkNoaWxkcmVuID0gdGhpcy5fcmVuZGVyZWRDaGlsZHJlbjtcbiAgICAgIC8v
IFJlbW92ZSBhbnkgcmVuZGVyZWQgY2hpbGRyZW4uXG4gICAgICBSZWFjdENoaWxkUmVjb25jaWxl
ci51bm1vdW50Q2hpbGRyZW4ocHJldkNoaWxkcmVuLCBmYWxzZSk7XG4gICAgICBmb3IgKHZhciBu
YW1lIGluIHByZXZDaGlsZHJlbikge1xuICAgICAgICBpZiAocHJldkNoaWxkcmVuLmhhc093blBy
b3BlcnR5KG5hbWUpKSB7XG4gICAgICAgICAgIWZhbHNlID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYg
IT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ3VwZGF0ZVRleHRDb250ZW50IGNh
bGxlZCBvbiBub24tZW1wdHkgY29tcG9uZW50LicpIDogX3Byb2RJbnZhcmlhbnQoJzExOCcpIDog
dm9pZCAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBTZXQgbmV3IHRleHQgY29udGVu
dC5cbiAgICAgIHZhciB1cGRhdGVzID0gW21ha2VUZXh0Q29udGVudChuZXh0Q29udGVudCldO1xu
ICAgICAgcHJvY2Vzc1F1ZXVlKHRoaXMsIHVwZGF0ZXMpO1xuICAgIH0sXG5cbiAgICAvKipcbiAg
ICAgKiBSZXBsYWNlcyBhbnkgcmVuZGVyZWQgY2hpbGRyZW4gd2l0aCBhIG1hcmt1cCBzdHJpbmcu
XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmV4dE1hcmt1cCBTdHJpbmcgb2YgbWFy
a3VwLlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHVwZGF0ZU1hcmt1cDogZnVuY3Rp
b24gKG5leHRNYXJrdXApIHtcbiAgICAgIHZhciBwcmV2Q2hpbGRyZW4gPSB0aGlzLl9yZW5kZXJl
ZENoaWxkcmVuO1xuICAgICAgLy8gUmVtb3ZlIGFueSByZW5kZXJlZCBjaGlsZHJlbi5cbiAgICAg
IFJlYWN0Q2hpbGRSZWNvbmNpbGVyLnVubW91bnRDaGlsZHJlbihwcmV2Q2hpbGRyZW4sIGZhbHNl
KTtcbiAgICAgIGZvciAodmFyIG5hbWUgaW4gcHJldkNoaWxkcmVuKSB7XG4gICAgICAgIGlmIChw
cmV2Q2hpbGRyZW4uaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgICAhZmFsc2UgPyBw
cm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAn
dXBkYXRlVGV4dENvbnRlbnQgY2FsbGVkIG9uIG5vbi1lbXB0eSBjb21wb25lbnQuJykgOiBfcHJv
ZEludmFyaWFudCgnMTE4JykgOiB2b2lkIDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZh
ciB1cGRhdGVzID0gW21ha2VTZXRNYXJrdXAobmV4dE1hcmt1cCldO1xuICAgICAgcHJvY2Vzc1F1
ZXVlKHRoaXMsIHVwZGF0ZXMpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRo
ZSByZW5kZXJlZCBjaGlsZHJlbiB3aXRoIG5ldyBjaGlsZHJlbi5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSB7P29iamVjdH0gbmV4dE5lc3RlZENoaWxkcmVuRWxlbWVudHMgTmVzdGVkIGNoaWxkIGVs
ZW1lbnQgbWFwcy5cbiAgICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRy
YW5zYWN0aW9uXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgdXBkYXRlQ2hpbGRyZW46
IGZ1bmN0aW9uIChuZXh0TmVzdGVkQ2hpbGRyZW5FbGVtZW50cywgdHJhbnNhY3Rpb24sIGNvbnRl
eHQpIHtcbiAgICAgIC8vIEhvb2sgdXNlZCBieSBSZWFjdCBBUlRcbiAgICAgIHRoaXMuX3VwZGF0
ZUNoaWxkcmVuKG5leHROZXN0ZWRDaGlsZHJlbkVsZW1lbnRzLCB0cmFuc2FjdGlvbiwgY29udGV4
dCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7P29iamVjdH0gbmV4dE5lc3Rl
ZENoaWxkcmVuRWxlbWVudHMgTmVzdGVkIGNoaWxkIGVsZW1lbnQgbWFwcy5cbiAgICAgKiBAcGFy
YW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAgICogQGZpbmFs
XG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuICAgIF91cGRhdGVDaGlsZHJlbjogZnVuY3Rp
b24gKG5leHROZXN0ZWRDaGlsZHJlbkVsZW1lbnRzLCB0cmFuc2FjdGlvbiwgY29udGV4dCkge1xu
ICAgICAgdmFyIHByZXZDaGlsZHJlbiA9IHRoaXMuX3JlbmRlcmVkQ2hpbGRyZW47XG4gICAgICB2
YXIgcmVtb3ZlZE5vZGVzID0ge307XG4gICAgICB2YXIgbW91bnRJbWFnZXMgPSBbXTtcbiAgICAg
IHZhciBuZXh0Q2hpbGRyZW4gPSB0aGlzLl9yZWNvbmNpbGVyVXBkYXRlQ2hpbGRyZW4ocHJldkNo
aWxkcmVuLCBuZXh0TmVzdGVkQ2hpbGRyZW5FbGVtZW50cywgbW91bnRJbWFnZXMsIHJlbW92ZWRO
b2RlcywgdHJhbnNhY3Rpb24sIGNvbnRleHQpO1xuICAgICAgaWYgKCFuZXh0Q2hpbGRyZW4gJiYg
IXByZXZDaGlsZHJlbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgdXBk
YXRlcyA9IG51bGw7XG4gICAgICB2YXIgbmFtZTtcbiAgICAgIC8vIGBuZXh0SW5kZXhgIHdpbGwg
aW5jcmVtZW50IGZvciBlYWNoIGNoaWxkIGluIGBuZXh0Q2hpbGRyZW5gLCBidXRcbiAgICAgIC8v
IGBsYXN0SW5kZXhgIHdpbGwgYmUgdGhlIGxhc3QgaW5kZXggdmlzaXRlZCBpbiBgcHJldkNoaWxk
cmVuYC5cbiAgICAgIHZhciBuZXh0SW5kZXggPSAwO1xuICAgICAgdmFyIGxhc3RJbmRleCA9IDA7
XG4gICAgICAvLyBgbmV4dE1vdW50SW5kZXhgIHdpbGwgaW5jcmVtZW50IGZvciBlYWNoIG5ld2x5
IG1vdW50ZWQgY2hpbGQuXG4gICAgICB2YXIgbmV4dE1vdW50SW5kZXggPSAwO1xuICAgICAgdmFy
IGxhc3RQbGFjZWROb2RlID0gbnVsbDtcbiAgICAgIGZvciAobmFtZSBpbiBuZXh0Q2hpbGRyZW4p
IHtcbiAgICAgICAgaWYgKCFuZXh0Q2hpbGRyZW4uaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAg
ICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcHJldkNoaWxkID0gcHJl
dkNoaWxkcmVuICYmIHByZXZDaGlsZHJlbltuYW1lXTtcbiAgICAgICAgdmFyIG5leHRDaGlsZCA9
IG5leHRDaGlsZHJlbltuYW1lXTtcbiAgICAgICAgaWYgKHByZXZDaGlsZCA9PT0gbmV4dENoaWxk
KSB7XG4gICAgICAgICAgdXBkYXRlcyA9IGVucXVldWUodXBkYXRlcywgdGhpcy5tb3ZlQ2hpbGQo
cHJldkNoaWxkLCBsYXN0UGxhY2VkTm9kZSwgbmV4dEluZGV4LCBsYXN0SW5kZXgpKTtcbiAgICAg
ICAgICBsYXN0SW5kZXggPSBNYXRoLm1heChwcmV2Q2hpbGQuX21vdW50SW5kZXgsIGxhc3RJbmRl
eCk7XG4gICAgICAgICAgcHJldkNoaWxkLl9tb3VudEluZGV4ID0gbmV4dEluZGV4O1xuICAgICAg
ICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChwcmV2Q2hpbGQpIHtcbiAgICAgICAgICAgIC8vIFVw
ZGF0ZSBgbGFzdEluZGV4YCBiZWZvcmUgYF9tb3VudEluZGV4YCBnZXRzIHVuc2V0IGJ5IHVubW91
bnRpbmcuXG4gICAgICAgICAgICBsYXN0SW5kZXggPSBNYXRoLm1heChwcmV2Q2hpbGQuX21vdW50
SW5kZXgsIGxhc3RJbmRleCk7XG4gICAgICAgICAgICAvLyBUaGUgYHJlbW92ZWROb2Rlc2AgbG9v
cCBiZWxvdyB3aWxsIGFjdHVhbGx5IHJlbW92ZSB0aGUgY2hpbGQuXG4gICAgICAgICAgfVxuICAg
ICAgICAgIC8vIFRoZSBjaGlsZCBtdXN0IGJlIGluc3RhbnRpYXRlZCBiZWZvcmUgaXQncyBtb3Vu
dGVkLlxuICAgICAgICAgIHVwZGF0ZXMgPSBlbnF1ZXVlKHVwZGF0ZXMsIHRoaXMuX21vdW50Q2hp
bGRBdEluZGV4KG5leHRDaGlsZCwgbW91bnRJbWFnZXNbbmV4dE1vdW50SW5kZXhdLCBsYXN0UGxh
Y2VkTm9kZSwgbmV4dEluZGV4LCB0cmFuc2FjdGlvbiwgY29udGV4dCkpO1xuICAgICAgICAgIG5l
eHRNb3VudEluZGV4Kys7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dEluZGV4Kys7XG4gICAgICAg
IGxhc3RQbGFjZWROb2RlID0gUmVhY3RSZWNvbmNpbGVyLmdldEhvc3ROb2RlKG5leHRDaGlsZCk7
XG4gICAgICB9XG4gICAgICAvLyBSZW1vdmUgY2hpbGRyZW4gdGhhdCBhcmUgbm8gbG9uZ2VyIHBy
ZXNlbnQuXG4gICAgICBmb3IgKG5hbWUgaW4gcmVtb3ZlZE5vZGVzKSB7XG4gICAgICAgIGlmIChy
ZW1vdmVkTm9kZXMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgICB1cGRhdGVzID0g
ZW5xdWV1ZSh1cGRhdGVzLCB0aGlzLl91bm1vdW50Q2hpbGQocHJldkNoaWxkcmVuW25hbWVdLCBy
ZW1vdmVkTm9kZXNbbmFtZV0pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHVwZGF0
ZXMpIHtcbiAgICAgICAgcHJvY2Vzc1F1ZXVlKHRoaXMsIHVwZGF0ZXMpO1xuICAgICAgfVxuICAg
ICAgdGhpcy5fcmVuZGVyZWRDaGlsZHJlbiA9IG5leHRDaGlsZHJlbjtcblxuICAgICAgaWYgKHBy
b2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgc2V0Q2hpbGRy
ZW5Gb3JJbnN0cnVtZW50YXRpb24uY2FsbCh0aGlzLCBuZXh0Q2hpbGRyZW4pO1xuICAgICAgfVxu
ICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBVbm1vdW50cyBhbGwgcmVuZGVyZWQgY2hpbGRyZW4u
IFRoaXMgc2hvdWxkIGJlIHVzZWQgdG8gY2xlYW4gdXAgY2hpbGRyZW5cbiAgICAgKiB3aGVuIHRo
aXMgY29tcG9uZW50IGlzIHVubW91bnRlZC4gSXQgZG9lcyBub3QgYWN0dWFsbHkgcGVyZm9ybSBh
bnlcbiAgICAgKiBiYWNrZW5kIG9wZXJhdGlvbnMuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxc
biAgICAgKi9cbiAgICB1bm1vdW50Q2hpbGRyZW46IGZ1bmN0aW9uIChzYWZlbHkpIHtcbiAgICAg
IHZhciByZW5kZXJlZENoaWxkcmVuID0gdGhpcy5fcmVuZGVyZWRDaGlsZHJlbjtcbiAgICAgIFJl
YWN0Q2hpbGRSZWNvbmNpbGVyLnVubW91bnRDaGlsZHJlbihyZW5kZXJlZENoaWxkcmVuLCBzYWZl
bHkpO1xuICAgICAgdGhpcy5fcmVuZGVyZWRDaGlsZHJlbiA9IG51bGw7XG4gICAgfSxcblxuICAg
IC8qKlxuICAgICAqIE1vdmVzIGEgY2hpbGQgY29tcG9uZW50IHRvIHRoZSBzdXBwbGllZCBpbmRl
eC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGNoaWxkIENvbXBvbmVu
dCB0byBtb3ZlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0b0luZGV4IERlc3RpbmF0aW9uIGlu
ZGV4IG9mIHRoZSBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsYXN0SW5kZXggTGFz
dCBpbmRleCB2aXNpdGVkIG9mIHRoZSBzaWJsaW5ncyBvZiBgY2hpbGRgLlxuICAgICAqIEBwcm90
ZWN0ZWRcbiAgICAgKi9cbiAgICBtb3ZlQ2hpbGQ6IGZ1bmN0aW9uIChjaGlsZCwgYWZ0ZXJOb2Rl
LCB0b0luZGV4LCBsYXN0SW5kZXgpIHtcbiAgICAgIC8vIElmIHRoZSBpbmRleCBvZiBgY2hpbGRg
IGlzIGxlc3MgdGhhbiBgbGFzdEluZGV4YCwgdGhlbiBpdCBuZWVkcyB0b1xuICAgICAgLy8gYmUg
bW92ZWQuIE90aGVyd2lzZSwgd2UgZG8gbm90IG5lZWQgdG8gbW92ZSBpdCBiZWNhdXNlIGEgY2hp
bGQgd2lsbCBiZVxuICAgICAgLy8gaW5zZXJ0ZWQgb3IgbW92ZWQgYmVmb3JlIGBjaGlsZGAuXG4g
ICAgICBpZiAoY2hpbGQuX21vdW50SW5kZXggPCBsYXN0SW5kZXgpIHtcbiAgICAgICAgcmV0dXJu
IG1ha2VNb3ZlKGNoaWxkLCBhZnRlck5vZGUsIHRvSW5kZXgpO1xuICAgICAgfVxuICAgIH0sXG5c
biAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY2hpbGQgY29tcG9uZW50LlxuICAgICAqXG4gICAg
ICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gY2hpbGQgQ29tcG9uZW50IHRvIGNyZWF0ZS5cbiAg
ICAgKiBAcGFyYW0ge3N0cmluZ30gbW91bnRJbWFnZSBNYXJrdXAgdG8gaW5zZXJ0LlxuICAgICAq
IEBwcm90ZWN0ZWRcbiAgICAgKi9cbiAgICBjcmVhdGVDaGlsZDogZnVuY3Rpb24gKGNoaWxkLCBh
ZnRlck5vZGUsIG1vdW50SW1hZ2UpIHtcbiAgICAgIHJldHVybiBtYWtlSW5zZXJ0TWFya3VwKG1v
dW50SW1hZ2UsIGFmdGVyTm9kZSwgY2hpbGQuX21vdW50SW5kZXgpO1xuICAgIH0sXG5cbiAgICAv
KipcbiAgICAgKiBSZW1vdmVzIGEgY2hpbGQgY29tcG9uZW50LlxuICAgICAqXG4gICAgICogQHBh
cmFtIHtSZWFjdENvbXBvbmVudH0gY2hpbGQgQ2hpbGQgdG8gcmVtb3ZlLlxuICAgICAqIEBwcm90
ZWN0ZWRcbiAgICAgKi9cbiAgICByZW1vdmVDaGlsZDogZnVuY3Rpb24gKGNoaWxkLCBub2RlKSB7
XG4gICAgICByZXR1cm4gbWFrZVJlbW92ZShjaGlsZCwgbm9kZSk7XG4gICAgfSxcblxuICAgIC8q
KlxuICAgICAqIE1vdW50cyBhIGNoaWxkIHdpdGggdGhlIHN1cHBsaWVkIG5hbWUuXG4gICAgICpc
biAgICAgKiBOT1RFOiBUaGlzIGlzIHBhcnQgb2YgYHVwZGF0ZUNoaWxkcmVuYCBhbmQgaXMgaGVy
ZSBmb3IgcmVhZGFiaWxpdHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50
fSBjaGlsZCBDb21wb25lbnQgdG8gbW91bnQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUg
TmFtZSBvZiB0aGUgY2hpbGQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IEluZGV4IGF0
IHdoaWNoIHRvIGluc2VydCB0aGUgY2hpbGQuXG4gICAgICogQHBhcmFtIHtSZWFjdFJlY29uY2ls
ZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAg
X21vdW50Q2hpbGRBdEluZGV4OiBmdW5jdGlvbiAoY2hpbGQsIG1vdW50SW1hZ2UsIGFmdGVyTm9k
ZSwgaW5kZXgsIHRyYW5zYWN0aW9uLCBjb250ZXh0KSB7XG4gICAgICBjaGlsZC5fbW91bnRJbmRl
eCA9IGluZGV4O1xuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlQ2hpbGQoY2hpbGQsIGFmdGVyTm9k
ZSwgbW91bnRJbWFnZSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFVubW91bnRzIGEgcmVu
ZGVyZWQgY2hpbGQuXG4gICAgICpcbiAgICAgKiBOT1RFOiBUaGlzIGlzIHBhcnQgb2YgYHVwZGF0
ZUNoaWxkcmVuYCBhbmQgaXMgaGVyZSBmb3IgcmVhZGFiaWxpdHkuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0ge1JlYWN0Q29tcG9uZW50fSBjaGlsZCBDb21wb25lbnQgdG8gdW5tb3VudC5cbiAgICAg
KiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF91bm1vdW50Q2hpbGQ6IGZ1bmN0aW9uIChjaGlsZCwg
bm9kZSkge1xuICAgICAgdmFyIHVwZGF0ZSA9IHRoaXMucmVtb3ZlQ2hpbGQoY2hpbGQsIG5vZGUp
O1xuICAgICAgY2hpbGQuX21vdW50SW5kZXggPSBudWxsO1xuICAgICAgcmV0dXJuIHVwZGF0ZTtc
biAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RNdWx0aUNoaWxkO1xuXG5c
bi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVz
L3JlYWN0LWRvbS9saWIvUmVhY3RNdWx0aUNoaWxkLmpzXG4vLyBtb2R1bGUgaWQgPSAxNTRcbi8v
IG1vZHVsZSBjaHVua3MgPSAwIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50LCBGYWNl
Ym9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBj
b2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVc
biAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJl
ZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQg
aW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1
c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UmVjb25jaWxlciA9IHJlcXVpcmUoJy4vUmVhY3RSZWNv
bmNpbGVyJyk7XG5cbnZhciBpbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50ID0gcmVxdWlyZSgnLi9p
bnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50Jyk7XG52YXIgS2V5RXNjYXBlVXRpbHMgPSByZXF1aXJl
KCcuL0tleUVzY2FwZVV0aWxzJyk7XG52YXIgc2hvdWxkVXBkYXRlUmVhY3RDb21wb25lbnQgPSBy
ZXF1aXJlKCcuL3Nob3VsZFVwZGF0ZVJlYWN0Q29tcG9uZW50Jyk7XG52YXIgdHJhdmVyc2VBbGxD
aGlsZHJlbiA9IHJlcXVpcmUoJy4vdHJhdmVyc2VBbGxDaGlsZHJlbicpO1xudmFyIHdhcm5pbmcg
PSByZXF1aXJlKCdmYmpzL2xpYi93YXJuaW5nJyk7XG5cbnZhciBSZWFjdENvbXBvbmVudFRyZWVI
b29rO1xuXG5pZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MuZW52
ICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAndGVzdCcpIHtcbiAgLy8gVGVtcG9yYXJ5IGhh
Y2suXG4gIC8vIElubGluZSByZXF1aXJlcyBkb24ndCB3b3JrIHdlbGwgd2l0aCBKZXN0OlxuICAv
LyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzcyNDBcbiAgLy8gUmVt
b3ZlIHRoZSBpbmxpbmUgcmVxdWlyZXMgd2hlbiB3ZSBkb24ndCBuZWVkIHRoZW0gYW55bW9yZTpc
biAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvNzE3OFxuICBSZWFj
dENvbXBvbmVudFRyZWVIb29rID0gcmVxdWlyZSgncmVhY3QvbGliL1JlYWN0Q29tcG9uZW50VHJl
ZUhvb2snKTtcbn1cblxuZnVuY3Rpb24gaW5zdGFudGlhdGVDaGlsZChjaGlsZEluc3RhbmNlcywg
Y2hpbGQsIG5hbWUsIHNlbGZEZWJ1Z0lEKSB7XG4gIC8vIFdlIGZvdW5kIGEgY29tcG9uZW50IGlu
c3RhbmNlLlxuICB2YXIga2V5VW5pcXVlID0gY2hpbGRJbnN0YW5jZXNbbmFtZV0gPT09IHVuZGVm
aW5lZDtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAg
ICBpZiAoIVJlYWN0Q29tcG9uZW50VHJlZUhvb2spIHtcbiAgICAgIFJlYWN0Q29tcG9uZW50VHJl
ZUhvb2sgPSByZXF1aXJlKCdyZWFjdC9saWIvUmVhY3RDb21wb25lbnRUcmVlSG9vaycpO1xuICAg
IH1cbiAgICBpZiAoIWtleVVuaXF1ZSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09
ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdmbGF0dGVuQ2hpbGRyZW4oLi4uKTogRW5j
b3VudGVyZWQgdHdvIGNoaWxkcmVuIHdpdGggdGhlIHNhbWUga2V5LCAnICsgJ2Alc2AuIENoaWxk
IGtleXMgbXVzdCBiZSB1bmlxdWU7IHdoZW4gdHdvIGNoaWxkcmVuIHNoYXJlIGEga2V5LCBvbmx5
ICcgKyAndGhlIGZpcnN0IGNoaWxkIHdpbGwgYmUgdXNlZC4lcycsIEtleUVzY2FwZVV0aWxzLnVu
ZXNjYXBlKG5hbWUpLCBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldFN0YWNrQWRkZW5kdW1CeUlE
KHNlbGZEZWJ1Z0lEKSkgOiB2b2lkIDA7XG4gICAgfVxuICB9XG4gIGlmIChjaGlsZCAhPSBudWxs
ICYmIGtleVVuaXF1ZSkge1xuICAgIGNoaWxkSW5zdGFuY2VzW25hbWVdID0gaW5zdGFudGlhdGVS
ZWFjdENvbXBvbmVudChjaGlsZCwgdHJ1ZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWFjdENoaWxk
UmVjb25jaWxlciBwcm92aWRlcyBoZWxwZXJzIGZvciBpbml0aWFsaXppbmcgb3IgdXBkYXRpbmcg
YSBzZXQgb2ZcbiAqIGNoaWxkcmVuLiBJdHMgb3V0cHV0IGlzIHN1aXRhYmxlIGZvciBwYXNzaW5n
IGl0IG9udG8gUmVhY3RNdWx0aUNoaWxkIHdoaWNoXG4gKiBkb2VzIGRpZmZlZCByZW9yZGVyaW5n
IGFuZCBpbnNlcnRpb24uXG4gKi9cbnZhciBSZWFjdENoaWxkUmVjb25jaWxlciA9IHtcbiAgLyoq
XG4gICAqIEdlbmVyYXRlcyBhIFwibW91bnQgaW1hZ2VcIiBmb3IgZWFjaCBvZiB0aGUgc3VwcGxp
ZWQgY2hpbGRyZW4uIEluIHRoZSBjYXNlXG4gICAqIG9mIGBSZWFjdERPTUNvbXBvbmVudGAsIGEg
bW91bnQgaW1hZ2UgaXMgYSBzdHJpbmcgb2YgbWFya3VwLlxuICAgKlxuICAgKiBAcGFyYW0gez9v
YmplY3R9IG5lc3RlZENoaWxkTm9kZXMgTmVzdGVkIGNoaWxkIG1hcHMuXG4gICAqIEByZXR1cm4g
ez9vYmplY3R9IEEgc2V0IG9mIGNoaWxkIGluc3RhbmNlcy5cbiAgICogQGludGVybmFsXG4gICAq
L1xuICBpbnN0YW50aWF0ZUNoaWxkcmVuOiBmdW5jdGlvbiAobmVzdGVkQ2hpbGROb2RlcywgdHJh
bnNhY3Rpb24sIGNvbnRleHQsIHNlbGZEZWJ1Z0lEKSAvLyAwIGluIHByb2R1Y3Rpb24gYW5kIGZv
ciByb290c1xuICB7XG4gICAgaWYgKG5lc3RlZENoaWxkTm9kZXMgPT0gbnVsbCkge1xuICAgICAg
cmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBjaGlsZEluc3RhbmNlcyA9IHt9O1xuXG4gICAg
aWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHRyYXZl
cnNlQWxsQ2hpbGRyZW4obmVzdGVkQ2hpbGROb2RlcywgZnVuY3Rpb24gKGNoaWxkSW5zdHMsIGNo
aWxkLCBuYW1lKSB7XG4gICAgICAgIHJldHVybiBpbnN0YW50aWF0ZUNoaWxkKGNoaWxkSW5zdHMs
IGNoaWxkLCBuYW1lLCBzZWxmRGVidWdJRCk7XG4gICAgICB9LCBjaGlsZEluc3RhbmNlcyk7XG4g
ICAgfSBlbHNlIHtcbiAgICAgIHRyYXZlcnNlQWxsQ2hpbGRyZW4obmVzdGVkQ2hpbGROb2Rlcywg
aW5zdGFudGlhdGVDaGlsZCwgY2hpbGRJbnN0YW5jZXMpO1xuICAgIH1cbiAgICByZXR1cm4gY2hp
bGRJbnN0YW5jZXM7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHJlbmRlcmVkIGNo
aWxkcmVuIGFuZCByZXR1cm5zIGEgbmV3IHNldCBvZiBjaGlsZHJlbi5cbiAgICpcbiAgICogQHBh
cmFtIHs/b2JqZWN0fSBwcmV2Q2hpbGRyZW4gUHJldmlvdXNseSBpbml0aWFsaXplZCBzZXQgb2Yg
Y2hpbGRyZW4uXG4gICAqIEBwYXJhbSB7P29iamVjdH0gbmV4dENoaWxkcmVuIEZsYXQgY2hpbGQg
ZWxlbWVudCBtYXBzLlxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRy
YW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb250ZXh0XG4gICAqIEByZXR1cm4gez9v
YmplY3R9IEEgbmV3IHNldCBvZiBjaGlsZCBpbnN0YW5jZXMuXG4gICAqIEBpbnRlcm5hbFxuICAg
Ki9cbiAgdXBkYXRlQ2hpbGRyZW46IGZ1bmN0aW9uIChwcmV2Q2hpbGRyZW4sIG5leHRDaGlsZHJl
biwgbW91bnRJbWFnZXMsIHJlbW92ZWROb2RlcywgdHJhbnNhY3Rpb24sIGhvc3RQYXJlbnQsIGhv
c3RDb250YWluZXJJbmZvLCBjb250ZXh0LCBzZWxmRGVidWdJRCkgLy8gMCBpbiBwcm9kdWN0aW9u
IGFuZCBmb3Igcm9vdHNcbiAge1xuICAgIC8vIFdlIGN1cnJlbnRseSBkb24ndCBoYXZlIGEgd2F5
IHRvIHRyYWNrIG1vdmVzIGhlcmUgYnV0IGlmIHdlIHVzZSBpdGVyYXRvcnNcbiAgICAvLyBpbnN0
ZWFkIG9mIGZvci4uaW4gd2UgY2FuIHppcCB0aGUgaXRlcmF0b3JzIGFuZCBjaGVjayBpZiBhbiBp
dGVtIGhhc1xuICAgIC8vIG1vdmVkLlxuICAgIC8vIFRPRE86IElmIG5vdGhpbmcgaGFzIGNoYW5n
ZWQsIHJldHVybiB0aGUgcHJldkNoaWxkcmVuIG9iamVjdCBzbyB0aGF0IHdlXG4gICAgLy8gY2Fu
IHF1aWNrbHkgYmFpbG91dCBpZiBub3RoaW5nIGhhcyBjaGFuZ2VkLlxuICAgIGlmICghbmV4dENo
aWxkcmVuICYmICFwcmV2Q2hpbGRyZW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFy
IG5hbWU7XG4gICAgdmFyIHByZXZDaGlsZDtcbiAgICBmb3IgKG5hbWUgaW4gbmV4dENoaWxkcmVu
KSB7XG4gICAgICBpZiAoIW5leHRDaGlsZHJlbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAg
ICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHByZXZDaGlsZCA9IHByZXZDaGlsZHJlbiAm
JiBwcmV2Q2hpbGRyZW5bbmFtZV07XG4gICAgICB2YXIgcHJldkVsZW1lbnQgPSBwcmV2Q2hpbGQg
JiYgcHJldkNoaWxkLl9jdXJyZW50RWxlbWVudDtcbiAgICAgIHZhciBuZXh0RWxlbWVudCA9IG5l
eHRDaGlsZHJlbltuYW1lXTtcbiAgICAgIGlmIChwcmV2Q2hpbGQgIT0gbnVsbCAmJiBzaG91bGRV
cGRhdGVSZWFjdENvbXBvbmVudChwcmV2RWxlbWVudCwgbmV4dEVsZW1lbnQpKSB7XG4gICAgICAg
IFJlYWN0UmVjb25jaWxlci5yZWNlaXZlQ29tcG9uZW50KHByZXZDaGlsZCwgbmV4dEVsZW1lbnQs
IHRyYW5zYWN0aW9uLCBjb250ZXh0KTtcbiAgICAgICAgbmV4dENoaWxkcmVuW25hbWVdID0gcHJl
dkNoaWxkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHByZXZDaGlsZCkge1xuICAgICAg
ICAgIHJlbW92ZWROb2Rlc1tuYW1lXSA9IFJlYWN0UmVjb25jaWxlci5nZXRIb3N0Tm9kZShwcmV2
Q2hpbGQpO1xuICAgICAgICAgIFJlYWN0UmVjb25jaWxlci51bm1vdW50Q29tcG9uZW50KHByZXZD
aGlsZCwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoZSBjaGlsZCBtdXN0IGJlIGlu
c3RhbnRpYXRlZCBiZWZvcmUgaXQncyBtb3VudGVkLlxuICAgICAgICB2YXIgbmV4dENoaWxkSW5z
dGFuY2UgPSBpbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50KG5leHRFbGVtZW50LCB0cnVlKTtcbiAg
ICAgICAgbmV4dENoaWxkcmVuW25hbWVdID0gbmV4dENoaWxkSW5zdGFuY2U7XG4gICAgICAgIC8v
IENyZWF0aW5nIG1vdW50IGltYWdlIG5vdyBlbnN1cmVzIHJlZnMgYXJlIHJlc29sdmVkIGluIHJp
Z2h0IG9yZGVyXG4gICAgICAgIC8vIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3Jl
YWN0L3B1bGwvNzEwMSBmb3IgZXhwbGFuYXRpb24pLlxuICAgICAgICB2YXIgbmV4dENoaWxkTW91
bnRJbWFnZSA9IFJlYWN0UmVjb25jaWxlci5tb3VudENvbXBvbmVudChuZXh0Q2hpbGRJbnN0YW5j
ZSwgdHJhbnNhY3Rpb24sIGhvc3RQYXJlbnQsIGhvc3RDb250YWluZXJJbmZvLCBjb250ZXh0LCBz
ZWxmRGVidWdJRCk7XG4gICAgICAgIG1vdW50SW1hZ2VzLnB1c2gobmV4dENoaWxkTW91bnRJbWFn
ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFVubW91bnQgY2hpbGRyZW4gdGhhdCBhcmUgbm8g
bG9uZ2VyIHByZXNlbnQuXG4gICAgZm9yIChuYW1lIGluIHByZXZDaGlsZHJlbikge1xuICAgICAg
aWYgKHByZXZDaGlsZHJlbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiAhKG5leHRDaGlsZHJlbiAm
JiBuZXh0Q2hpbGRyZW4uaGFzT3duUHJvcGVydHkobmFtZSkpKSB7XG4gICAgICAgIHByZXZDaGls
ZCA9IHByZXZDaGlsZHJlbltuYW1lXTtcbiAgICAgICAgcmVtb3ZlZE5vZGVzW25hbWVdID0gUmVh
Y3RSZWNvbmNpbGVyLmdldEhvc3ROb2RlKHByZXZDaGlsZCk7XG4gICAgICAgIFJlYWN0UmVjb25j
aWxlci51bm1vdW50Q29tcG9uZW50KHByZXZDaGlsZCwgZmFsc2UpO1xuICAgICAgfVxuICAgIH1c
biAgfSxcblxuICAvKipcbiAgICogVW5tb3VudHMgYWxsIHJlbmRlcmVkIGNoaWxkcmVuLiBUaGlz
IHNob3VsZCBiZSB1c2VkIHRvIGNsZWFuIHVwIGNoaWxkcmVuXG4gICAqIHdoZW4gdGhpcyBjb21w
b25lbnQgaXMgdW5tb3VudGVkLlxuICAgKlxuICAgKiBAcGFyYW0gez9vYmplY3R9IHJlbmRlcmVk
Q2hpbGRyZW4gUHJldmlvdXNseSBpbml0aWFsaXplZCBzZXQgb2YgY2hpbGRyZW4uXG4gICAqIEBp
bnRlcm5hbFxuICAgKi9cbiAgdW5tb3VudENoaWxkcmVuOiBmdW5jdGlvbiAocmVuZGVyZWRDaGls
ZHJlbiwgc2FmZWx5KSB7XG4gICAgZm9yICh2YXIgbmFtZSBpbiByZW5kZXJlZENoaWxkcmVuKSB7
XG4gICAgICBpZiAocmVuZGVyZWRDaGlsZHJlbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAg
ICAgICB2YXIgcmVuZGVyZWRDaGlsZCA9IHJlbmRlcmVkQ2hpbGRyZW5bbmFtZV07XG4gICAgICAg
IFJlYWN0UmVjb25jaWxlci51bm1vdW50Q29tcG9uZW50KHJlbmRlcmVkQ2hpbGQsIHNhZmVseSk7
XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0Q2hpbGRS
ZWNvbmNpbGVyO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8v
IC4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RDaGlsZFJlY29uY2lsZXIuanNcbi8v
IG1vZHVsZSBpZCA9IDE1NVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipcbiAqIENvcHlyaWdo
dCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxu
ICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBs
aWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9y
eSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQg
cmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVj
dG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3Byb2RJbnZhcmlhbnQgPSBy
ZXF1aXJlKCcuL3JlYWN0UHJvZEludmFyaWFudCcpLFxuICAgIF9hc3NpZ24gPSByZXF1aXJlKCdv
YmplY3QtYXNzaWduJyk7XG5cbnZhciBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0L2xpYi9SZWFjdCcp
O1xudmFyIFJlYWN0Q29tcG9uZW50RW52aXJvbm1lbnQgPSByZXF1aXJlKCcuL1JlYWN0Q29tcG9u
ZW50RW52aXJvbm1lbnQnKTtcbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IHJlcXVpcmUoJ3JlYWN0
L2xpYi9SZWFjdEN1cnJlbnRPd25lcicpO1xudmFyIFJlYWN0RXJyb3JVdGlscyA9IHJlcXVpcmUo
Jy4vUmVhY3RFcnJvclV0aWxzJyk7XG52YXIgUmVhY3RJbnN0YW5jZU1hcCA9IHJlcXVpcmUoJy4v
UmVhY3RJbnN0YW5jZU1hcCcpO1xudmFyIFJlYWN0SW5zdHJ1bWVudGF0aW9uID0gcmVxdWlyZSgn
Li9SZWFjdEluc3RydW1lbnRhdGlvbicpO1xudmFyIFJlYWN0Tm9kZVR5cGVzID0gcmVxdWlyZSgn
Li9SZWFjdE5vZGVUeXBlcycpO1xudmFyIFJlYWN0UmVjb25jaWxlciA9IHJlcXVpcmUoJy4vUmVh
Y3RSZWNvbmNpbGVyJyk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rp
b24nKSB7XG4gIHZhciBjaGVja1JlYWN0VHlwZVNwZWMgPSByZXF1aXJlKCcuL2NoZWNrUmVhY3RU
eXBlU3BlYycpO1xufVxuXG52YXIgZW1wdHlPYmplY3QgPSByZXF1aXJlKCdmYmpzL2xpYi9lbXB0
eU9iamVjdCcpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoJ2ZianMvbGliL2ludmFyaWFudCcp
O1xudmFyIHNoYWxsb3dFcXVhbCA9IHJlcXVpcmUoJ2ZianMvbGliL3NoYWxsb3dFcXVhbCcpO1xu
dmFyIHNob3VsZFVwZGF0ZVJlYWN0Q29tcG9uZW50ID0gcmVxdWlyZSgnLi9zaG91bGRVcGRhdGVS
ZWFjdENvbXBvbmVudCcpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKCdmYmpzL2xpYi93YXJuaW5n
Jyk7XG5cbnZhciBDb21wb3NpdGVUeXBlcyA9IHtcbiAgSW1wdXJlQ2xhc3M6IDAsXG4gIFB1cmVD
bGFzczogMSxcbiAgU3RhdGVsZXNzRnVuY3Rpb25hbDogMlxufTtcblxuZnVuY3Rpb24gU3RhdGVs
ZXNzQ29tcG9uZW50KENvbXBvbmVudCkge31cblN0YXRlbGVzc0NvbXBvbmVudC5wcm90b3R5cGUu
cmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgQ29tcG9uZW50ID0gUmVhY3RJbnN0YW5jZU1h
cC5nZXQodGhpcykuX2N1cnJlbnRFbGVtZW50LnR5cGU7XG4gIHZhciBlbGVtZW50ID0gQ29tcG9u
ZW50KHRoaXMucHJvcHMsIHRoaXMuY29udGV4dCwgdGhpcy51cGRhdGVyKTtcbiAgd2FybklmSW52
YWxpZEVsZW1lbnQoQ29tcG9uZW50LCBlbGVtZW50KTtcbiAgcmV0dXJuIGVsZW1lbnQ7XG59O1xu
XG5mdW5jdGlvbiB3YXJuSWZJbnZhbGlkRWxlbWVudChDb21wb25lbnQsIGVsZW1lbnQpIHtcbiAg
aWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBwcm9jZXNz
LmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhlbGVtZW50ID09PSBudWxs
IHx8IGVsZW1lbnQgPT09IGZhbHNlIHx8IFJlYWN0LmlzVmFsaWRFbGVtZW50KGVsZW1lbnQpLCAn
JXMoLi4uKTogQSB2YWxpZCBSZWFjdCBlbGVtZW50IChvciBudWxsKSBtdXN0IGJlIHJldHVybmVk
LiBZb3UgbWF5IGhhdmUgJyArICdyZXR1cm5lZCB1bmRlZmluZWQsIGFuIGFycmF5IG9yIHNvbWUg
b3RoZXIgaW52YWxpZCBvYmplY3QuJywgQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVu
dC5uYW1lIHx8ICdDb21wb25lbnQnKSA6IHZvaWQgMDtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VO
ViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyghQ29tcG9uZW50LmNoaWxkQ29udGV4dFR5cGVz
LCAnJXMoLi4uKTogY2hpbGRDb250ZXh0VHlwZXMgY2Fubm90IGJlIGRlZmluZWQgb24gYSBmdW5j
dGlvbmFsIGNvbXBvbmVudC4nLCBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5h
bWUgfHwgJ0NvbXBvbmVudCcpIDogdm9pZCAwO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNob3VsZENv
bnN0cnVjdChDb21wb25lbnQpIHtcbiAgcmV0dXJuICEhKENvbXBvbmVudC5wcm90b3R5cGUgJiYg
Q29tcG9uZW50LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KTtcbn1cblxuZnVuY3Rpb24gaXNQ
dXJlQ29tcG9uZW50KENvbXBvbmVudCkge1xuICByZXR1cm4gISEoQ29tcG9uZW50LnByb3RvdHlw
ZSAmJiBDb21wb25lbnQucHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50KTtcbn1cblxuLy8g
U2VwYXJhdGVkIGludG8gYSBmdW5jdGlvbiB0byBjb250YWluIGRlb3B0aW1pemF0aW9ucyBjYXVz
ZWQgYnkgdHJ5L2ZpbmFsbHkuXG5mdW5jdGlvbiBtZWFzdXJlTGlmZUN5Y2xlUGVyZihmbiwgZGVi
dWdJRCwgdGltZXJUeXBlKSB7XG4gIGlmIChkZWJ1Z0lEID09PSAwKSB7XG4gICAgLy8gVG9wLWxl
dmVsIHdyYXBwZXJzIChzZWUgUmVhY3RNb3VudCkgYW5kIGVtcHR5IGNvbXBvbmVudHMgKHNlZVxu
ICAgIC8vIFJlYWN0RE9NRW1wdHlDb21wb25lbnQpIGFyZSBpbnZpc2libGUgdG8gaG9va3MgYW5k
IGRldnRvb2xzLlxuICAgIC8vIEJvdGggYXJlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgdGhhdCBz
aG91bGQgZ28gYXdheSBpbiB0aGUgZnV0dXJlLlxuICAgIHJldHVybiBmbigpO1xuICB9XG5cbiAg
UmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uQmVnaW5MaWZlQ3ljbGVUaW1lcihkZWJ1
Z0lELCB0aW1lclR5cGUpO1xuICB0cnkge1xuICAgIHJldHVybiBmbigpO1xuICB9IGZpbmFsbHkg
e1xuICAgIFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vbkVuZExpZmVDeWNsZVRpbWVy
KGRlYnVnSUQsIHRpbWVyVHlwZSk7XG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0t
LS0gVGhlIExpZmUtQ3ljbGUgb2YgYSBDb21wb3NpdGUgQ29tcG9uZW50IC0tLS0tLS0tLS0tLS0t
LS0tLVxuICpcbiAqIC0gY29uc3RydWN0b3I6IEluaXRpYWxpemF0aW9uIG9mIHN0YXRlLiBUaGUg
aW5zdGFuY2UgaXMgbm93IHJldGFpbmVkLlxuICogICAtIGNvbXBvbmVudFdpbGxNb3VudFxuICog
ICAtIHJlbmRlclxuICogICAtIFtjaGlsZHJlbidzIGNvbnN0cnVjdG9yc11cbiAqICAgICAtIFtj
aGlsZHJlbidzIGNvbXBvbmVudFdpbGxNb3VudCBhbmQgcmVuZGVyXVxuICogICAgIC0gW2NoaWxk
cmVuJ3MgY29tcG9uZW50RGlkTW91bnRdXG4gKiAgICAgLSBjb21wb25lbnREaWRNb3VudFxuICpc
biAqICAgICAgIFVwZGF0ZSBQaGFzZXM6XG4gKiAgICAgICAtIGNvbXBvbmVudFdpbGxSZWNlaXZl
UHJvcHMgKG9ubHkgY2FsbGVkIGlmIHBhcmVudCB1cGRhdGVkKVxuICogICAgICAgLSBzaG91bGRD
b21wb25lbnRVcGRhdGVcbiAqICAgICAgICAgLSBjb21wb25lbnRXaWxsVXBkYXRlXG4gKiAgICAg
ICAgICAgLSByZW5kZXJcbiAqICAgICAgICAgICAtIFtjaGlsZHJlbidzIGNvbnN0cnVjdG9ycyBv
ciByZWNlaXZlIHByb3BzIHBoYXNlc11cbiAqICAgICAgICAgLSBjb21wb25lbnREaWRVcGRhdGVc
biAqXG4gKiAgICAgLSBjb21wb25lbnRXaWxsVW5tb3VudFxuICogICAgIC0gW2NoaWxkcmVuJ3Mg
Y29tcG9uZW50V2lsbFVubW91bnRdXG4gKiAgIC0gW2NoaWxkcmVuIGRlc3Ryb3llZF1cbiAqIC0g
KGRlc3Ryb3llZCk6IFRoZSBpbnN0YW5jZSBpcyBub3cgYmxhbmssIHJlbGVhc2VkIGJ5IFJlYWN0
IGFuZCByZWFkeSBmb3IgR0MuXG4gKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG4v
KipcbiAqIEFuIGluY3JlbWVudGluZyBJRCBhc3NpZ25lZCB0byBlYWNoIGNvbXBvbmVudCB3aGVu
IGl0IGlzIG1vdW50ZWQuIFRoaXMgaXNcbiAqIHVzZWQgdG8gZW5mb3JjZSB0aGUgb3JkZXIgaW4g
d2hpY2ggYFJlYWN0VXBkYXRlc2AgdXBkYXRlcyBkaXJ0eSBjb21wb25lbnRzLlxuICpcbiAqIEBw
cml2YXRlXG4gKi9cbnZhciBuZXh0TW91bnRJRCA9IDE7XG5cbi8qKlxuICogQGxlbmRzIHtSZWFj
dENvbXBvc2l0ZUNvbXBvbmVudC5wcm90b3R5cGV9XG4gKi9cbnZhciBSZWFjdENvbXBvc2l0ZUNv
bXBvbmVudCA9IHtcbiAgLyoqXG4gICAqIEJhc2UgY29uc3RydWN0b3IgZm9yIGFsbCBjb21wb3Np
dGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudFxu
ICAgKiBAZmluYWxcbiAgICogQGludGVybmFsXG4gICAqL1xuICBjb25zdHJ1Y3Q6IGZ1bmN0aW9u
IChlbGVtZW50KSB7XG4gICAgdGhpcy5fY3VycmVudEVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRo
aXMuX3Jvb3ROb2RlSUQgPSAwO1xuICAgIHRoaXMuX2NvbXBvc2l0ZVR5cGUgPSBudWxsO1xuICAg
IHRoaXMuX2luc3RhbmNlID0gbnVsbDtcbiAgICB0aGlzLl9ob3N0UGFyZW50ID0gbnVsbDtcbiAg
ICB0aGlzLl9ob3N0Q29udGFpbmVySW5mbyA9IG51bGw7XG5cbiAgICAvLyBTZWUgUmVhY3RVcGRh
dGVRdWV1ZVxuICAgIHRoaXMuX3VwZGF0ZUJhdGNoTnVtYmVyID0gbnVsbDtcbiAgICB0aGlzLl9w
ZW5kaW5nRWxlbWVudCA9IG51bGw7XG4gICAgdGhpcy5fcGVuZGluZ1N0YXRlUXVldWUgPSBudWxs
O1xuICAgIHRoaXMuX3BlbmRpbmdSZXBsYWNlU3RhdGUgPSBmYWxzZTtcbiAgICB0aGlzLl9wZW5k
aW5nRm9yY2VVcGRhdGUgPSBmYWxzZTtcblxuICAgIHRoaXMuX3JlbmRlcmVkTm9kZVR5cGUgPSBu
dWxsO1xuICAgIHRoaXMuX3JlbmRlcmVkQ29tcG9uZW50ID0gbnVsbDtcbiAgICB0aGlzLl9jb250
ZXh0ID0gbnVsbDtcbiAgICB0aGlzLl9tb3VudE9yZGVyID0gMDtcbiAgICB0aGlzLl90b3BMZXZl
bFdyYXBwZXIgPSBudWxsO1xuXG4gICAgLy8gU2VlIFJlYWN0VXBkYXRlcyBhbmQgUmVhY3RVcGRh
dGVRdWV1ZS5cbiAgICB0aGlzLl9wZW5kaW5nQ2FsbGJhY2tzID0gbnVsbDtcblxuICAgIC8vIENv
bXBvbmVudFdpbGxVbm1vdW50IHNoYWxsIG9ubHkgYmUgY2FsbGVkIG9uY2VcbiAgICB0aGlzLl9j
YWxsZWRDb21wb25lbnRXaWxsVW5tb3VudCA9IGZhbHNlO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52
Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHRoaXMuX3dhcm5lZEFib3V0UmVm
c0luUmVuZGVyID0gZmFsc2U7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXpl
cyB0aGUgY29tcG9uZW50LCByZW5kZXJzIG1hcmt1cCwgYW5kIHJlZ2lzdGVycyBldmVudCBsaXN0
ZW5lcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbnxSZWFj
dFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gez9v
YmplY3R9IGhvc3RQYXJlbnRcbiAgICogQHBhcmFtIHs/b2JqZWN0fSBob3N0Q29udGFpbmVySW5m
b1xuICAgKiBAcGFyYW0gez9vYmplY3R9IGNvbnRleHRcbiAgICogQHJldHVybiB7P3N0cmluZ30g
UmVuZGVyZWQgbWFya3VwIHRvIGJlIGluc2VydGVkIGludG8gdGhlIERPTS5cbiAgICogQGZpbmFs
XG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgbW91bnRDb21wb25lbnQ6IGZ1bmN0aW9uICh0cmFu
c2FjdGlvbiwgaG9zdFBhcmVudCwgaG9zdENvbnRhaW5lckluZm8sIGNvbnRleHQpIHtcbiAgICB2
YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG4gICAgdGhp
cy5fbW91bnRPcmRlciA9IG5leHRNb3VudElEKys7XG4gICAgdGhpcy5faG9zdFBhcmVudCA9IGhv
c3RQYXJlbnQ7XG4gICAgdGhpcy5faG9zdENvbnRhaW5lckluZm8gPSBob3N0Q29udGFpbmVySW5m
bztcblxuICAgIHZhciBwdWJsaWNQcm9wcyA9IHRoaXMuX2N1cnJlbnRFbGVtZW50LnByb3BzO1xu
ICAgIHZhciBwdWJsaWNDb250ZXh0ID0gdGhpcy5fcHJvY2Vzc0NvbnRleHQoY29udGV4dCk7XG5c
biAgICB2YXIgQ29tcG9uZW50ID0gdGhpcy5fY3VycmVudEVsZW1lbnQudHlwZTtcblxuICAgIHZh
ciB1cGRhdGVRdWV1ZSA9IHRyYW5zYWN0aW9uLmdldFVwZGF0ZVF1ZXVlKCk7XG5cbiAgICAvLyBJ
bml0aWFsaXplIHRoZSBwdWJsaWMgY2xhc3NcbiAgICB2YXIgZG9Db25zdHJ1Y3QgPSBzaG91bGRD
b25zdHJ1Y3QoQ29tcG9uZW50KTtcbiAgICB2YXIgaW5zdCA9IHRoaXMuX2NvbnN0cnVjdENvbXBv
bmVudChkb0NvbnN0cnVjdCwgcHVibGljUHJvcHMsIHB1YmxpY0NvbnRleHQsIHVwZGF0ZVF1ZXVl
KTtcbiAgICB2YXIgcmVuZGVyZWRFbGVtZW50O1xuXG4gICAgLy8gU3VwcG9ydCBmdW5jdGlvbmFs
IGNvbXBvbmVudHNcbiAgICBpZiAoIWRvQ29uc3RydWN0ICYmIChpbnN0ID09IG51bGwgfHwgaW5z
dC5yZW5kZXIgPT0gbnVsbCkpIHtcbiAgICAgIHJlbmRlcmVkRWxlbWVudCA9IGluc3Q7XG4gICAg
ICB3YXJuSWZJbnZhbGlkRWxlbWVudChDb21wb25lbnQsIHJlbmRlcmVkRWxlbWVudCk7XG4gICAg
ICAhKGluc3QgPT09IG51bGwgfHwgaW5zdCA9PT0gZmFsc2UgfHwgUmVhY3QuaXNWYWxpZEVsZW1l
bnQoaW5zdCkpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFy
aWFudChmYWxzZSwgJyVzKC4uLik6IEEgdmFsaWQgUmVhY3QgZWxlbWVudCAob3IgbnVsbCkgbXVz
dCBiZSByZXR1cm5lZC4gWW91IG1heSBoYXZlIHJldHVybmVkIHVuZGVmaW5lZCwgYW4gYXJyYXkg
b3Igc29tZSBvdGhlciBpbnZhbGlkIG9iamVjdC4nLCBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwg
Q29tcG9uZW50Lm5hbWUgfHwgJ0NvbXBvbmVudCcpIDogX3Byb2RJbnZhcmlhbnQoJzEwNScsIENv
bXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50JykgOiB2
b2lkIDA7XG4gICAgICBpbnN0ID0gbmV3IFN0YXRlbGVzc0NvbXBvbmVudChDb21wb25lbnQpO1xu
ICAgICAgdGhpcy5fY29tcG9zaXRlVHlwZSA9IENvbXBvc2l0ZVR5cGVzLlN0YXRlbGVzc0Z1bmN0
aW9uYWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpc1B1cmVDb21wb25lbnQoQ29tcG9uZW50
KSkge1xuICAgICAgICB0aGlzLl9jb21wb3NpdGVUeXBlID0gQ29tcG9zaXRlVHlwZXMuUHVyZUNs
YXNzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fY29tcG9zaXRlVHlwZSA9IENvbXBv
c2l0ZVR5cGVzLkltcHVyZUNsYXNzO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcm9jZXNz
LmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAvLyBUaGlzIHdpbGwgdGhy
b3cgbGF0ZXIgaW4gX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudCwgYnV0IGFkZCBhbiBlYXJseVxu
ICAgICAgLy8gd2FybmluZyBub3cgdG8gaGVscCBkZWJ1Z2dpbmdcbiAgICAgIGlmIChpbnN0LnJl
bmRlciA9PSBudWxsKSB7XG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVj
dGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnJXMoLi4uKTogTm8gYHJlbmRlcmAgbWV0aG9kIGZvdW5k
IG9uIHRoZSByZXR1cm5lZCBjb21wb25lbnQgJyArICdpbnN0YW5jZTogeW91IG1heSBoYXZlIGZv
cmdvdHRlbiB0byBkZWZpbmUgYHJlbmRlcmAuJywgQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENv
bXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnQnKSA6IHZvaWQgMDtcbiAgICAgIH1cblxuICAgICAg
dmFyIHByb3BzTXV0YXRlZCA9IGluc3QucHJvcHMgIT09IHB1YmxpY1Byb3BzO1xuICAgICAgdmFy
IGNvbXBvbmVudE5hbWUgPSBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUg
fHwgJ0NvbXBvbmVudCc7XG5cbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVj
dGlvbicgPyB3YXJuaW5nKGluc3QucHJvcHMgPT09IHVuZGVmaW5lZCB8fCAhcHJvcHNNdXRhdGVk
LCAnJXMoLi4uKTogV2hlbiBjYWxsaW5nIHN1cGVyKCkgaW4gYCVzYCwgbWFrZSBzdXJlIHRvIHBh
c3MgJyArIFwidXAgdGhlIHNhbWUgcHJvcHMgdGhhdCB5b3VyIGNvbXBvbmVudCdzIGNvbnN0cnVj
dG9yIHdhcyBwYXNzZWQuXCIsIGNvbXBvbmVudE5hbWUsIGNvbXBvbmVudE5hbWUpIDogdm9pZCAw
O1xuICAgIH1cblxuICAgIC8vIFRoZXNlIHNob3VsZCBiZSBzZXQgdXAgaW4gdGhlIGNvbnN0cnVj
dG9yLCBidXQgYXMgYSBjb252ZW5pZW5jZSBmb3JcbiAgICAvLyBzaW1wbGVyIGNsYXNzIGFic3Ry
YWN0aW9ucywgd2Ugc2V0IHRoZW0gdXAgYWZ0ZXIgdGhlIGZhY3QuXG4gICAgaW5zdC5wcm9wcyA9
IHB1YmxpY1Byb3BzO1xuICAgIGluc3QuY29udGV4dCA9IHB1YmxpY0NvbnRleHQ7XG4gICAgaW5z
dC5yZWZzID0gZW1wdHlPYmplY3Q7XG4gICAgaW5zdC51cGRhdGVyID0gdXBkYXRlUXVldWU7XG5c
biAgICB0aGlzLl9pbnN0YW5jZSA9IGluc3Q7XG5cbiAgICAvLyBTdG9yZSBhIHJlZmVyZW5jZSBm
cm9tIHRoZSBpbnN0YW5jZSBiYWNrIHRvIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvblxuICAg
IFJlYWN0SW5zdGFuY2VNYXAuc2V0KGluc3QsIHRoaXMpO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52
Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIC8vIFNpbmNlIHBsYWluIEpTIGNs
YXNzZXMgYXJlIGRlZmluZWQgd2l0aG91dCBhbnkgc3BlY2lhbCBpbml0aWFsaXphdGlvblxuICAg
ICAgLy8gbG9naWMsIHdlIGNhbiBub3QgY2F0Y2ggY29tbW9uIGVycm9ycyBlYXJseS4gVGhlcmVm
b3JlLCB3ZSBoYXZlIHRvXG4gICAgICAvLyBjYXRjaCB0aGVtIGhlcmUsIGF0IGluaXRpYWxpemF0
aW9uIHRpbWUsIGluc3RlYWQuXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1
Y3Rpb24nID8gd2FybmluZyghaW5zdC5nZXRJbml0aWFsU3RhdGUgfHwgaW5zdC5nZXRJbml0aWFs
U3RhdGUuaXNSZWFjdENsYXNzQXBwcm92ZWQgfHwgaW5zdC5zdGF0ZSwgJ2dldEluaXRpYWxTdGF0
ZSB3YXMgZGVmaW5lZCBvbiAlcywgYSBwbGFpbiBKYXZhU2NyaXB0IGNsYXNzLiAnICsgJ1RoaXMg
aXMgb25seSBzdXBwb3J0ZWQgZm9yIGNsYXNzZXMgY3JlYXRlZCB1c2luZyBSZWFjdC5jcmVhdGVD
bGFzcy4gJyArICdEaWQgeW91IG1lYW4gdG8gZGVmaW5lIGEgc3RhdGUgcHJvcGVydHkgaW5zdGVh
ZD8nLCB0aGlzLmdldE5hbWUoKSB8fCAnYSBjb21wb25lbnQnKSA6IHZvaWQgMDtcbiAgICAgIHBy
b2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKCFpbnN0LmdldERl
ZmF1bHRQcm9wcyB8fCBpbnN0LmdldERlZmF1bHRQcm9wcy5pc1JlYWN0Q2xhc3NBcHByb3ZlZCwg
J2dldERlZmF1bHRQcm9wcyB3YXMgZGVmaW5lZCBvbiAlcywgYSBwbGFpbiBKYXZhU2NyaXB0IGNs
YXNzLiAnICsgJ1RoaXMgaXMgb25seSBzdXBwb3J0ZWQgZm9yIGNsYXNzZXMgY3JlYXRlZCB1c2lu
ZyBSZWFjdC5jcmVhdGVDbGFzcy4gJyArICdVc2UgYSBzdGF0aWMgcHJvcGVydHkgdG8gZGVmaW5l
IGRlZmF1bHRQcm9wcyBpbnN0ZWFkLicsIHRoaXMuZ2V0TmFtZSgpIHx8ICdhIGNvbXBvbmVudCcp
IDogdm9pZCAwO1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/
IHdhcm5pbmcoIWluc3QucHJvcFR5cGVzLCAncHJvcFR5cGVzIHdhcyBkZWZpbmVkIGFzIGFuIGlu
c3RhbmNlIHByb3BlcnR5IG9uICVzLiBVc2UgYSBzdGF0aWMgJyArICdwcm9wZXJ0eSB0byBkZWZp
bmUgcHJvcFR5cGVzIGluc3RlYWQuJywgdGhpcy5nZXROYW1lKCkgfHwgJ2EgY29tcG9uZW50Jykg
OiB2b2lkIDA7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8g
d2FybmluZyghaW5zdC5jb250ZXh0VHlwZXMsICdjb250ZXh0VHlwZXMgd2FzIGRlZmluZWQgYXMg
YW4gaW5zdGFuY2UgcHJvcGVydHkgb24gJXMuIFVzZSBhICcgKyAnc3RhdGljIHByb3BlcnR5IHRv
IGRlZmluZSBjb250ZXh0VHlwZXMgaW5zdGVhZC4nLCB0aGlzLmdldE5hbWUoKSB8fCAnYSBjb21w
b25lbnQnKSA6IHZvaWQgMDtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVj
dGlvbicgPyB3YXJuaW5nKHR5cGVvZiBpbnN0LmNvbXBvbmVudFNob3VsZFVwZGF0ZSAhPT0gJ2Z1
bmN0aW9uJywgJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgJyArICdjb21wb25lbnRTaG91bGRVcGRh
dGUoKS4gRGlkIHlvdSBtZWFuIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpPyAnICsgJ1RoZSBuYW1l
IGlzIHBocmFzZWQgYXMgYSBxdWVzdGlvbiBiZWNhdXNlIHRoZSBmdW5jdGlvbiBpcyAnICsgJ2V4
cGVjdGVkIHRvIHJldHVybiBhIHZhbHVlLicsIHRoaXMuZ2V0TmFtZSgpIHx8ICdBIGNvbXBvbmVu
dCcpIDogdm9pZCAwO1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9u
JyA/IHdhcm5pbmcodHlwZW9mIGluc3QuY29tcG9uZW50RGlkVW5tb3VudCAhPT0gJ2Z1bmN0aW9u
JywgJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgJyArICdjb21wb25lbnREaWRVbm1vdW50KCkuIEJ1
dCB0aGVyZSBpcyBubyBzdWNoIGxpZmVjeWNsZSBtZXRob2QuICcgKyAnRGlkIHlvdSBtZWFuIGNv
bXBvbmVudFdpbGxVbm1vdW50KCk/JywgdGhpcy5nZXROYW1lKCkgfHwgJ0EgY29tcG9uZW50Jykg
OiB2b2lkIDA7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8g
d2FybmluZyh0eXBlb2YgaW5zdC5jb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzICE9PSAnZnVuY3Rp
b24nLCAnJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ2NvbXBvbmVudFdpbGxSZWNpZXZlUHJv
cHMoKS4gRGlkIHlvdSBtZWFuIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoKT8nLCB0aGlzLmdl
dE5hbWUoKSB8fCAnQSBjb21wb25lbnQnKSA6IHZvaWQgMDtcbiAgICB9XG5cbiAgICB2YXIgaW5p
dGlhbFN0YXRlID0gaW5zdC5zdGF0ZTtcbiAgICBpZiAoaW5pdGlhbFN0YXRlID09PSB1bmRlZmlu
ZWQpIHtcbiAgICAgIGluc3Quc3RhdGUgPSBpbml0aWFsU3RhdGUgPSBudWxsO1xuICAgIH1cbiAg
ICAhKHR5cGVvZiBpbml0aWFsU3RhdGUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGlu
aXRpYWxTdGF0ZSkpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGlu
dmFyaWFudChmYWxzZSwgJyVzLnN0YXRlOiBtdXN0IGJlIHNldCB0byBhbiBvYmplY3Qgb3IgbnVs
bCcsIHRoaXMuZ2V0TmFtZSgpIHx8ICdSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCcpIDogX3Byb2RJ
bnZhcmlhbnQoJzEwNicsIHRoaXMuZ2V0TmFtZSgpIHx8ICdSZWFjdENvbXBvc2l0ZUNvbXBvbmVu
dCcpIDogdm9pZCAwO1xuXG4gICAgdGhpcy5fcGVuZGluZ1N0YXRlUXVldWUgPSBudWxsO1xuICAg
IHRoaXMuX3BlbmRpbmdSZXBsYWNlU3RhdGUgPSBmYWxzZTtcbiAgICB0aGlzLl9wZW5kaW5nRm9y
Y2VVcGRhdGUgPSBmYWxzZTtcblxuICAgIHZhciBtYXJrdXA7XG4gICAgaWYgKGluc3QudW5zdGFi
bGVfaGFuZGxlRXJyb3IpIHtcbiAgICAgIG1hcmt1cCA9IHRoaXMucGVyZm9ybUluaXRpYWxNb3Vu
dFdpdGhFcnJvckhhbmRsaW5nKHJlbmRlcmVkRWxlbWVudCwgaG9zdFBhcmVudCwgaG9zdENvbnRh
aW5lckluZm8sIHRyYW5zYWN0aW9uLCBjb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWFy
a3VwID0gdGhpcy5wZXJmb3JtSW5pdGlhbE1vdW50KHJlbmRlcmVkRWxlbWVudCwgaG9zdFBhcmVu
dCwgaG9zdENvbnRhaW5lckluZm8sIHRyYW5zYWN0aW9uLCBjb250ZXh0KTtcbiAgICB9XG5cbiAg
ICBpZiAoaW5zdC5jb21wb25lbnREaWRNb3VudCkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5P
REVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgdHJhbnNhY3Rpb24uZ2V0UmVhY3RN
b3VudFJlYWR5KCkuZW5xdWV1ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgbWVhc3VyZUxpZmVD
eWNsZVBlcmYoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGluc3QuY29tcG9uZW50
RGlkTW91bnQoKTtcbiAgICAgICAgICB9LCBfdGhpcy5fZGVidWdJRCwgJ2NvbXBvbmVudERpZE1v
dW50Jyk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJhbnNhY3Rpb24u
Z2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShpbnN0LmNvbXBvbmVudERpZE1vdW50LCBpbnN0
KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWFya3VwO1xuICB9LFxuXG4gIF9jb25z
dHJ1Y3RDb21wb25lbnQ6IGZ1bmN0aW9uIChkb0NvbnN0cnVjdCwgcHVibGljUHJvcHMsIHB1Ymxp
Y0NvbnRleHQsIHVwZGF0ZVF1ZXVlKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9
PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgPSB0aGlz
O1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnN0cnVjdENvbXBvbmVudFdp
dGhvdXRPd25lcihkb0NvbnN0cnVjdCwgcHVibGljUHJvcHMsIHB1YmxpY0NvbnRleHQsIHVwZGF0
ZVF1ZXVlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudE93bmVyLmN1
cnJlbnQgPSBudWxsO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5f
Y29uc3RydWN0Q29tcG9uZW50V2l0aG91dE93bmVyKGRvQ29uc3RydWN0LCBwdWJsaWNQcm9wcywg
cHVibGljQ29udGV4dCwgdXBkYXRlUXVldWUpO1xuICAgIH1cbiAgfSxcblxuICBfY29uc3RydWN0
Q29tcG9uZW50V2l0aG91dE93bmVyOiBmdW5jdGlvbiAoZG9Db25zdHJ1Y3QsIHB1YmxpY1Byb3Bz
LCBwdWJsaWNDb250ZXh0LCB1cGRhdGVRdWV1ZSkge1xuICAgIHZhciBDb21wb25lbnQgPSB0aGlz
Ll9jdXJyZW50RWxlbWVudC50eXBlO1xuXG4gICAgaWYgKGRvQ29uc3RydWN0KSB7XG4gICAgICBp
ZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICByZXR1
cm4gbWVhc3VyZUxpZmVDeWNsZVBlcmYoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBu
ZXcgQ29tcG9uZW50KHB1YmxpY1Byb3BzLCBwdWJsaWNDb250ZXh0LCB1cGRhdGVRdWV1ZSk7XG4g
ICAgICAgIH0sIHRoaXMuX2RlYnVnSUQsICdjdG9yJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAg
ICByZXR1cm4gbmV3IENvbXBvbmVudChwdWJsaWNQcm9wcywgcHVibGljQ29udGV4dCwgdXBkYXRl
UXVldWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoaXMgY2FuIHN0aWxsIGJlIGFuIGlu
c3RhbmNlIGluIGNhc2Ugb2YgZmFjdG9yeSBjb21wb25lbnRzXG4gICAgLy8gYnV0IHdlJ2xsIGNv
dW50IHRoaXMgYXMgdGltZSBzcGVudCByZW5kZXJpbmcgYXMgdGhlIG1vcmUgY29tbW9uIGNhc2Uu
XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAg
IHJldHVybiBtZWFzdXJlTGlmZUN5Y2xlUGVyZihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVy
biBDb21wb25lbnQocHVibGljUHJvcHMsIHB1YmxpY0NvbnRleHQsIHVwZGF0ZVF1ZXVlKTtcbiAg
ICAgIH0sIHRoaXMuX2RlYnVnSUQsICdyZW5kZXInKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0
dXJuIENvbXBvbmVudChwdWJsaWNQcm9wcywgcHVibGljQ29udGV4dCwgdXBkYXRlUXVldWUpO1xu
ICAgIH1cbiAgfSxcblxuICBwZXJmb3JtSW5pdGlhbE1vdW50V2l0aEVycm9ySGFuZGxpbmc6IGZ1
bmN0aW9uIChyZW5kZXJlZEVsZW1lbnQsIGhvc3RQYXJlbnQsIGhvc3RDb250YWluZXJJbmZvLCB0
cmFuc2FjdGlvbiwgY29udGV4dCkge1xuICAgIHZhciBtYXJrdXA7XG4gICAgdmFyIGNoZWNrcG9p
bnQgPSB0cmFuc2FjdGlvbi5jaGVja3BvaW50KCk7XG4gICAgdHJ5IHtcbiAgICAgIG1hcmt1cCA9
IHRoaXMucGVyZm9ybUluaXRpYWxNb3VudChyZW5kZXJlZEVsZW1lbnQsIGhvc3RQYXJlbnQsIGhv
c3RDb250YWluZXJJbmZvLCB0cmFuc2FjdGlvbiwgY29udGV4dCk7XG4gICAgfSBjYXRjaCAoZSkg
e1xuICAgICAgLy8gUm9sbCBiYWNrIHRvIGNoZWNrcG9pbnQsIGhhbmRsZSBlcnJvciAod2hpY2gg
bWF5IGFkZCBpdGVtcyB0byB0aGUgdHJhbnNhY3Rpb24pLCBhbmQgdGFrZSBhIG5ldyBjaGVja3Bv
aW50XG4gICAgICB0cmFuc2FjdGlvbi5yb2xsYmFjayhjaGVja3BvaW50KTtcbiAgICAgIHRoaXMu
X2luc3RhbmNlLnVuc3RhYmxlX2hhbmRsZUVycm9yKGUpO1xuICAgICAgaWYgKHRoaXMuX3BlbmRp
bmdTdGF0ZVF1ZXVlKSB7XG4gICAgICAgIHRoaXMuX2luc3RhbmNlLnN0YXRlID0gdGhpcy5fcHJv
Y2Vzc1BlbmRpbmdTdGF0ZSh0aGlzLl9pbnN0YW5jZS5wcm9wcywgdGhpcy5faW5zdGFuY2UuY29u
dGV4dCk7XG4gICAgICB9XG4gICAgICBjaGVja3BvaW50ID0gdHJhbnNhY3Rpb24uY2hlY2twb2lu
dCgpO1xuXG4gICAgICB0aGlzLl9yZW5kZXJlZENvbXBvbmVudC51bm1vdW50Q29tcG9uZW50KHRy
dWUpO1xuICAgICAgdHJhbnNhY3Rpb24ucm9sbGJhY2soY2hlY2twb2ludCk7XG5cbiAgICAgIC8v
IFRyeSBhZ2FpbiAtIHdlJ3ZlIGluZm9ybWVkIHRoZSBjb21wb25lbnQgYWJvdXQgdGhlIGVycm9y
LCBzbyB0aGV5IGNhbiByZW5kZXIgYW4gZXJyb3IgbWVzc2FnZSB0aGlzIHRpbWUuXG4gICAgICAv
LyBJZiB0aGlzIHRocm93cyBhZ2FpbiwgdGhlIGVycm9yIHdpbGwgYnViYmxlIHVwIChhbmQgY2Fu
IGJlIGNhdWdodCBieSBhIGhpZ2hlciBlcnJvciBib3VuZGFyeSkuXG4gICAgICBtYXJrdXAgPSB0
aGlzLnBlcmZvcm1Jbml0aWFsTW91bnQocmVuZGVyZWRFbGVtZW50LCBob3N0UGFyZW50LCBob3N0
Q29udGFpbmVySW5mbywgdHJhbnNhY3Rpb24sIGNvbnRleHQpO1xuICAgIH1cbiAgICByZXR1cm4g
bWFya3VwO1xuICB9LFxuXG4gIHBlcmZvcm1Jbml0aWFsTW91bnQ6IGZ1bmN0aW9uIChyZW5kZXJl
ZEVsZW1lbnQsIGhvc3RQYXJlbnQsIGhvc3RDb250YWluZXJJbmZvLCB0cmFuc2FjdGlvbiwgY29u
dGV4dCkge1xuICAgIHZhciBpbnN0ID0gdGhpcy5faW5zdGFuY2U7XG5cbiAgICB2YXIgZGVidWdJ
RCA9IDA7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtc
biAgICAgIGRlYnVnSUQgPSB0aGlzLl9kZWJ1Z0lEO1xuICAgIH1cblxuICAgIGlmIChpbnN0LmNv
bXBvbmVudFdpbGxNb3VudCkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAn
cHJvZHVjdGlvbicpIHtcbiAgICAgICAgbWVhc3VyZUxpZmVDeWNsZVBlcmYoZnVuY3Rpb24gKCkg
e1xuICAgICAgICAgIHJldHVybiBpbnN0LmNvbXBvbmVudFdpbGxNb3VudCgpO1xuICAgICAgICB9
LCBkZWJ1Z0lELCAnY29tcG9uZW50V2lsbE1vdW50Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAg
ICBpbnN0LmNvbXBvbmVudFdpbGxNb3VudCgpO1xuICAgICAgfVxuICAgICAgLy8gV2hlbiBtb3Vu
dGluZywgY2FsbHMgdG8gYHNldFN0YXRlYCBieSBgY29tcG9uZW50V2lsbE1vdW50YCB3aWxsIHNl
dFxuICAgICAgLy8gYHRoaXMuX3BlbmRpbmdTdGF0ZVF1ZXVlYCB3aXRob3V0IHRyaWdnZXJpbmcg
YSByZS1yZW5kZXIuXG4gICAgICBpZiAodGhpcy5fcGVuZGluZ1N0YXRlUXVldWUpIHtcbiAgICAg
ICAgaW5zdC5zdGF0ZSA9IHRoaXMuX3Byb2Nlc3NQZW5kaW5nU3RhdGUoaW5zdC5wcm9wcywgaW5z
dC5jb250ZXh0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiBub3QgYSBzdGF0ZWxlc3Mg
Y29tcG9uZW50LCB3ZSBub3cgcmVuZGVyXG4gICAgaWYgKHJlbmRlcmVkRWxlbWVudCA9PT0gdW5k
ZWZpbmVkKSB7XG4gICAgICByZW5kZXJlZEVsZW1lbnQgPSB0aGlzLl9yZW5kZXJWYWxpZGF0ZWRD
b21wb25lbnQoKTtcbiAgICB9XG5cbiAgICB2YXIgbm9kZVR5cGUgPSBSZWFjdE5vZGVUeXBlcy5n
ZXRUeXBlKHJlbmRlcmVkRWxlbWVudCk7XG4gICAgdGhpcy5fcmVuZGVyZWROb2RlVHlwZSA9IG5v
ZGVUeXBlO1xuICAgIHZhciBjaGlsZCA9IHRoaXMuX2luc3RhbnRpYXRlUmVhY3RDb21wb25lbnQo
cmVuZGVyZWRFbGVtZW50LCBub2RlVHlwZSAhPT0gUmVhY3ROb2RlVHlwZXMuRU1QVFkgLyogc2hv
dWxkSGF2ZURlYnVnSUQgKi9cbiAgICApO1xuICAgIHRoaXMuX3JlbmRlcmVkQ29tcG9uZW50ID0g
Y2hpbGQ7XG5cbiAgICB2YXIgbWFya3VwID0gUmVhY3RSZWNvbmNpbGVyLm1vdW50Q29tcG9uZW50
KGNoaWxkLCB0cmFuc2FjdGlvbiwgaG9zdFBhcmVudCwgaG9zdENvbnRhaW5lckluZm8sIHRoaXMu
X3Byb2Nlc3NDaGlsZENvbnRleHQoY29udGV4dCksIGRlYnVnSUQpO1xuXG4gICAgaWYgKHByb2Nl
c3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChkZWJ1Z0lEICE9
PSAwKSB7XG4gICAgICAgIHZhciBjaGlsZERlYnVnSURzID0gY2hpbGQuX2RlYnVnSUQgIT09IDAg
PyBbY2hpbGQuX2RlYnVnSURdIDogW107XG4gICAgICAgIFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRl
YnVnVG9vbC5vblNldENoaWxkcmVuKGRlYnVnSUQsIGNoaWxkRGVidWdJRHMpO1xuICAgICAgfVxu
ICAgIH1cblxuICAgIHJldHVybiBtYXJrdXA7XG4gIH0sXG5cbiAgZ2V0SG9zdE5vZGU6IGZ1bmN0
aW9uICgpIHtcbiAgICByZXR1cm4gUmVhY3RSZWNvbmNpbGVyLmdldEhvc3ROb2RlKHRoaXMuX3Jl
bmRlcmVkQ29tcG9uZW50KTtcbiAgfSxcblxuICAvKipcbiAgICogUmVsZWFzZXMgYW55IHJlc291
cmNlcyBhbGxvY2F0ZWQgYnkgYG1vdW50Q29tcG9uZW50YC5cbiAgICpcbiAgICogQGZpbmFsXG4g
ICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgdW5tb3VudENvbXBvbmVudDogZnVuY3Rpb24gKHNhZmVs
eSkge1xuICAgIGlmICghdGhpcy5fcmVuZGVyZWRDb21wb25lbnQpIHtcbiAgICAgIHJldHVybjtc
biAgICB9XG5cbiAgICB2YXIgaW5zdCA9IHRoaXMuX2luc3RhbmNlO1xuXG4gICAgaWYgKGluc3Qu
Y29tcG9uZW50V2lsbFVubW91bnQgJiYgIWluc3QuX2NhbGxlZENvbXBvbmVudFdpbGxVbm1vdW50
KSB7XG4gICAgICBpbnN0Ll9jYWxsZWRDb21wb25lbnRXaWxsVW5tb3VudCA9IHRydWU7XG5cbiAg
ICAgIGlmIChzYWZlbHkpIHtcbiAgICAgICAgdmFyIG5hbWUgPSB0aGlzLmdldE5hbWUoKSArICcu
Y29tcG9uZW50V2lsbFVubW91bnQoKSc7XG4gICAgICAgIFJlYWN0RXJyb3JVdGlscy5pbnZva2VH
dWFyZGVkQ2FsbGJhY2sobmFtZSwgaW5zdC5jb21wb25lbnRXaWxsVW5tb3VudC5iaW5kKGluc3Qp
KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0g
J3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgbWVhc3VyZUxpZmVDeWNsZVBlcmYoZnVuY3Rpb24g
KCkge1xuICAgICAgICAgICAgcmV0dXJuIGluc3QuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAg
ICAgICAgICB9LCB0aGlzLl9kZWJ1Z0lELCAnY29tcG9uZW50V2lsbFVubW91bnQnKTtcbiAgICAg
ICAgfSBlbHNlIHtcbiAgICAgICAgICBpbnN0LmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAg
ICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcmVuZGVyZWRDb21wb25lbnQp
IHtcbiAgICAgIFJlYWN0UmVjb25jaWxlci51bm1vdW50Q29tcG9uZW50KHRoaXMuX3JlbmRlcmVk
Q29tcG9uZW50LCBzYWZlbHkpO1xuICAgICAgdGhpcy5fcmVuZGVyZWROb2RlVHlwZSA9IG51bGw7
XG4gICAgICB0aGlzLl9yZW5kZXJlZENvbXBvbmVudCA9IG51bGw7XG4gICAgICB0aGlzLl9pbnN0
YW5jZSA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gUmVzZXQgcGVuZGluZyBmaWVsZHNcbiAgICAv
LyBFdmVuIGlmIHRoaXMgY29tcG9uZW50IGlzIHNjaGVkdWxlZCBmb3IgYW5vdGhlciB1cGRhdGUg
aW4gUmVhY3RVcGRhdGVzLFxuICAgIC8vIGl0IHdvdWxkIHN0aWxsIGJlIGlnbm9yZWQgYmVjYXVz
ZSB0aGVzZSBmaWVsZHMgYXJlIHJlc2V0LlxuICAgIHRoaXMuX3BlbmRpbmdTdGF0ZVF1ZXVlID0g
bnVsbDtcbiAgICB0aGlzLl9wZW5kaW5nUmVwbGFjZVN0YXRlID0gZmFsc2U7XG4gICAgdGhpcy5f
cGVuZGluZ0ZvcmNlVXBkYXRlID0gZmFsc2U7XG4gICAgdGhpcy5fcGVuZGluZ0NhbGxiYWNrcyA9
IG51bGw7XG4gICAgdGhpcy5fcGVuZGluZ0VsZW1lbnQgPSBudWxsO1xuXG4gICAgLy8gVGhlc2Ug
ZmllbGRzIGRvIG5vdCByZWFsbHkgbmVlZCB0byBiZSByZXNldCBzaW5jZSB0aGlzIG9iamVjdCBp
cyBub1xuICAgIC8vIGxvbmdlciBhY2Nlc3NpYmxlLlxuICAgIHRoaXMuX2NvbnRleHQgPSBudWxs
O1xuICAgIHRoaXMuX3Jvb3ROb2RlSUQgPSAwO1xuICAgIHRoaXMuX3RvcExldmVsV3JhcHBlciA9
IG51bGw7XG5cbiAgICAvLyBEZWxldGUgdGhlIHJlZmVyZW5jZSBmcm9tIHRoZSBpbnN0YW5jZSB0
byB0aGlzIGludGVybmFsIHJlcHJlc2VudGF0aW9uXG4gICAgLy8gd2hpY2ggYWxsb3cgdGhlIGlu
dGVybmFscyB0byBiZSBwcm9wZXJseSBjbGVhbmVkIHVwIGV2ZW4gaWYgdGhlIHVzZXJcbiAgICAv
LyBsZWFrcyBhIHJlZmVyZW5jZSB0byB0aGUgcHVibGljIGluc3RhbmNlLlxuICAgIFJlYWN0SW5z
dGFuY2VNYXAucmVtb3ZlKGluc3QpO1xuXG4gICAgLy8gU29tZSBleGlzdGluZyBjb21wb25lbnRz
IHJlbHkgb24gaW5zdC5wcm9wcyBldmVuIGFmdGVyIHRoZXkndmUgYmVlblxuICAgIC8vIGRlc3Ry
b3llZCAoaW4gZXZlbnQgaGFuZGxlcnMpLlxuICAgIC8vIFRPRE86IGluc3QucHJvcHMgPSBudWxs
O1xuICAgIC8vIFRPRE86IGluc3Quc3RhdGUgPSBudWxsO1xuICAgIC8vIFRPRE86IGluc3QuY29u
dGV4dCA9IG51bGw7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEZpbHRlcnMgdGhlIGNvbnRleHQgb2Jq
ZWN0IHRvIG9ubHkgY29udGFpbiBrZXlzIHNwZWNpZmllZCBpblxuICAgKiBgY29udGV4dFR5cGVz
YFxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gY29udGV4dFxuICAgKiBAcmV0dXJuIHs/b2Jq
ZWN0fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21hc2tDb250ZXh0OiBmdW5jdGlvbiAoY29u
dGV4dCkge1xuICAgIHZhciBDb21wb25lbnQgPSB0aGlzLl9jdXJyZW50RWxlbWVudC50eXBlO1xu
ICAgIHZhciBjb250ZXh0VHlwZXMgPSBDb21wb25lbnQuY29udGV4dFR5cGVzO1xuICAgIGlmICgh
Y29udGV4dFR5cGVzKSB7XG4gICAgICByZXR1cm4gZW1wdHlPYmplY3Q7XG4gICAgfVxuICAgIHZh
ciBtYXNrZWRDb250ZXh0ID0ge307XG4gICAgZm9yICh2YXIgY29udGV4dE5hbWUgaW4gY29udGV4
dFR5cGVzKSB7XG4gICAgICBtYXNrZWRDb250ZXh0W2NvbnRleHROYW1lXSA9IGNvbnRleHRbY29u
dGV4dE5hbWVdO1xuICAgIH1cbiAgICByZXR1cm4gbWFza2VkQ29udGV4dDtcbiAgfSxcblxuICAv
KipcbiAgICogRmlsdGVycyB0aGUgY29udGV4dCBvYmplY3QgdG8gb25seSBjb250YWluIGtleXMg
c3BlY2lmaWVkIGluXG4gICAqIGBjb250ZXh0VHlwZXNgLCBhbmQgYXNzZXJ0cyB0aGF0IHRoZXkg
YXJlIHZhbGlkLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gY29udGV4dFxuICAgKiBAcmV0
dXJuIHs/b2JqZWN0fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Byb2Nlc3NDb250ZXh0OiBm
dW5jdGlvbiAoY29udGV4dCkge1xuICAgIHZhciBtYXNrZWRDb250ZXh0ID0gdGhpcy5fbWFza0Nv
bnRleHQoY29udGV4dCk7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVj
dGlvbicpIHtcbiAgICAgIHZhciBDb21wb25lbnQgPSB0aGlzLl9jdXJyZW50RWxlbWVudC50eXBl
O1xuICAgICAgaWYgKENvbXBvbmVudC5jb250ZXh0VHlwZXMpIHtcbiAgICAgICAgdGhpcy5fY2hl
Y2tDb250ZXh0VHlwZXMoQ29tcG9uZW50LmNvbnRleHRUeXBlcywgbWFza2VkQ29udGV4dCwgJ2Nv
bnRleHQnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hc2tlZENvbnRleHQ7XG4gIH0s
XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjdXJyZW50Q29udGV4dFxuICAgKiBAcmV0
dXJuIHtvYmplY3R9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcHJvY2Vzc0NoaWxkQ29udGV4
dDogZnVuY3Rpb24gKGN1cnJlbnRDb250ZXh0KSB7XG4gICAgdmFyIENvbXBvbmVudCA9IHRoaXMu
X2N1cnJlbnRFbGVtZW50LnR5cGU7XG4gICAgdmFyIGluc3QgPSB0aGlzLl9pbnN0YW5jZTtcbiAg
ICB2YXIgY2hpbGRDb250ZXh0O1xuXG4gICAgaWYgKGluc3QuZ2V0Q2hpbGRDb250ZXh0KSB7XG4g
ICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAg
ICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25CZWdpblByb2Nlc3NpbmdDaGlsZENv
bnRleHQoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjaGlsZENvbnRleHQgPSBpbnN0Lmdl
dENoaWxkQ29udGV4dCgpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIFJlYWN0SW5z
dHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vbkVuZFByb2Nlc3NpbmdDaGlsZENvbnRleHQoKTtcbiAg
ICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hpbGRDb250ZXh0ID0gaW5zdC5nZXRD
aGlsZENvbnRleHQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hpbGRDb250ZXh0KSB7
XG4gICAgICAhKHR5cGVvZiBDb21wb25lbnQuY2hpbGRDb250ZXh0VHlwZXMgPT09ICdvYmplY3Qn
KSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFs
c2UsICclcy5nZXRDaGlsZENvbnRleHQoKTogY2hpbGRDb250ZXh0VHlwZXMgbXVzdCBiZSBkZWZp
bmVkIGluIG9yZGVyIHRvIHVzZSBnZXRDaGlsZENvbnRleHQoKS4nLCB0aGlzLmdldE5hbWUoKSB8
fCAnUmVhY3RDb21wb3NpdGVDb21wb25lbnQnKSA6IF9wcm9kSW52YXJpYW50KCcxMDcnLCB0aGlz
LmdldE5hbWUoKSB8fCAnUmVhY3RDb21wb3NpdGVDb21wb25lbnQnKSA6IHZvaWQgMDtcbiAgICAg
IGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHRo
aXMuX2NoZWNrQ29udGV4dFR5cGVzKENvbXBvbmVudC5jaGlsZENvbnRleHRUeXBlcywgY2hpbGRD
b250ZXh0LCAnY2hpbGQgY29udGV4dCcpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgbmFtZSBp
biBjaGlsZENvbnRleHQpIHtcbiAgICAgICAgIShuYW1lIGluIENvbXBvbmVudC5jaGlsZENvbnRl
eHRUeXBlcykgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJp
YW50KGZhbHNlLCAnJXMuZ2V0Q2hpbGRDb250ZXh0KCk6IGtleSBcIiVzXCIgaXMgbm90IGRlZmlu
ZWQgaW4gY2hpbGRDb250ZXh0VHlwZXMuJywgdGhpcy5nZXROYW1lKCkgfHwgJ1JlYWN0Q29tcG9z
aXRlQ29tcG9uZW50JywgbmFtZSkgOiBfcHJvZEludmFyaWFudCgnMTA4JywgdGhpcy5nZXROYW1l
KCkgfHwgJ1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50JywgbmFtZSkgOiB2b2lkIDA7XG4gICAgICB9
XG4gICAgICByZXR1cm4gX2Fzc2lnbih7fSwgY3VycmVudENvbnRleHQsIGNoaWxkQ29udGV4dCk7
XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50Q29udGV4dDtcbiAgfSxcblxuICAvKipcbiAgICog
QXNzZXJ0IHRoYXQgdGhlIGNvbnRleHQgdHlwZXMgYXJlIHZhbGlkXG4gICAqXG4gICAqIEBwYXJh
bSB7b2JqZWN0fSB0eXBlU3BlY3MgTWFwIG9mIGNvbnRleHQgZmllbGQgdG8gYSBSZWFjdFByb3BU
eXBlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZXMgUnVudGltZSB2YWx1ZXMgdGhhdCBuZWVk
IHRvIGJlIHR5cGUtY2hlY2tlZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gbG9jYXRpb24gZS5nLiBc
InByb3BcIiwgXCJjb250ZXh0XCIsIFwiY2hpbGQgY29udGV4dFwiXG4gICAqIEBwcml2YXRlXG4g
ICAqL1xuICBfY2hlY2tDb250ZXh0VHlwZXM6IGZ1bmN0aW9uICh0eXBlU3BlY3MsIHZhbHVlcywg
bG9jYXRpb24pIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9u
Jykge1xuICAgICAgY2hlY2tSZWFjdFR5cGVTcGVjKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlv
biwgdGhpcy5nZXROYW1lKCksIG51bGwsIHRoaXMuX2RlYnVnSUQpO1xuICAgIH1cbiAgfSxcblxu
ICByZWNlaXZlQ29tcG9uZW50OiBmdW5jdGlvbiAobmV4dEVsZW1lbnQsIHRyYW5zYWN0aW9uLCBu
ZXh0Q29udGV4dCkge1xuICAgIHZhciBwcmV2RWxlbWVudCA9IHRoaXMuX2N1cnJlbnRFbGVtZW50
O1xuICAgIHZhciBwcmV2Q29udGV4dCA9IHRoaXMuX2NvbnRleHQ7XG5cbiAgICB0aGlzLl9wZW5k
aW5nRWxlbWVudCA9IG51bGw7XG5cbiAgICB0aGlzLnVwZGF0ZUNvbXBvbmVudCh0cmFuc2FjdGlv
biwgcHJldkVsZW1lbnQsIG5leHRFbGVtZW50LCBwcmV2Q29udGV4dCwgbmV4dENvbnRleHQpO1xu
ICB9LFxuXG4gIC8qKlxuICAgKiBJZiBhbnkgb2YgYF9wZW5kaW5nRWxlbWVudGAsIGBfcGVuZGlu
Z1N0YXRlUXVldWVgLCBvciBgX3BlbmRpbmdGb3JjZVVwZGF0ZWBcbiAgICogaXMgc2V0LCB1cGRh
dGUgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5z
YWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHBlcmZvcm1VcGRh
dGVJZk5lY2Vzc2FyeTogZnVuY3Rpb24gKHRyYW5zYWN0aW9uKSB7XG4gICAgaWYgKHRoaXMuX3Bl
bmRpbmdFbGVtZW50ICE9IG51bGwpIHtcbiAgICAgIFJlYWN0UmVjb25jaWxlci5yZWNlaXZlQ29t
cG9uZW50KHRoaXMsIHRoaXMuX3BlbmRpbmdFbGVtZW50LCB0cmFuc2FjdGlvbiwgdGhpcy5fY29u
dGV4dCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9wZW5kaW5nU3RhdGVRdWV1ZSAhPT0gbnVsbCB8
fCB0aGlzLl9wZW5kaW5nRm9yY2VVcGRhdGUpIHtcbiAgICAgIHRoaXMudXBkYXRlQ29tcG9uZW50
KHRyYW5zYWN0aW9uLCB0aGlzLl9jdXJyZW50RWxlbWVudCwgdGhpcy5fY3VycmVudEVsZW1lbnQs
IHRoaXMuX2NvbnRleHQsIHRoaXMuX2NvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlz
Ll91cGRhdGVCYXRjaE51bWJlciA9IG51bGw7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBQ
ZXJmb3JtIGFuIHVwZGF0ZSB0byBhIG1vdW50ZWQgY29tcG9uZW50LiBUaGUgY29tcG9uZW50V2ls
bFJlY2VpdmVQcm9wcyBhbmRcbiAgICogc2hvdWxkQ29tcG9uZW50VXBkYXRlIG1ldGhvZHMgYXJl
IGNhbGxlZCwgdGhlbiAoYXNzdW1pbmcgdGhlIHVwZGF0ZSBpc24ndFxuICAgKiBza2lwcGVkKSB0
aGUgcmVtYWluaW5nIHVwZGF0ZSBsaWZlY3ljbGUgbWV0aG9kcyBhcmUgY2FsbGVkIGFuZCB0aGUg
RE9NXG4gICAqIHJlcHJlc2VudGF0aW9uIGlzIHVwZGF0ZWQuXG4gICAqXG4gICAqIEJ5IGRlZmF1
bHQsIHRoaXMgaW1wbGVtZW50cyBSZWFjdCdzIHJlbmRlcmluZyBhbmQgcmVjb25jaWxpYXRpb24g
YWxnb3JpdGhtLlxuICAgKiBTb3BoaXN0aWNhdGVkIGNsaWVudHMgbWF5IHdpc2ggdG8gb3ZlcnJp
ZGUgdGhpcy5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0
cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gcHJldlBhcmVudEVsZW1lbnRc
biAgICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IG5leHRQYXJlbnRFbGVtZW50XG4gICAqIEBpbnRl
cm5hbFxuICAgKiBAb3ZlcnJpZGFibGVcbiAgICovXG4gIHVwZGF0ZUNvbXBvbmVudDogZnVuY3Rp
b24gKHRyYW5zYWN0aW9uLCBwcmV2UGFyZW50RWxlbWVudCwgbmV4dFBhcmVudEVsZW1lbnQsIHBy
ZXZVbm1hc2tlZENvbnRleHQsIG5leHRVbm1hc2tlZENvbnRleHQpIHtcbiAgICB2YXIgaW5zdCA9
IHRoaXMuX2luc3RhbmNlO1xuICAgICEoaW5zdCAhPSBudWxsKSA/IHByb2Nlc3MuZW52Lk5PREVf
RU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdBdHRlbXB0ZWQgdG8gdXBk
YXRlIGNvbXBvbmVudCBgJXNgIHRoYXQgaGFzIGFscmVhZHkgYmVlbiB1bm1vdW50ZWQgKG9yIGZh
aWxlZCB0byBtb3VudCkuJywgdGhpcy5nZXROYW1lKCkgfHwgJ1JlYWN0Q29tcG9zaXRlQ29tcG9u
ZW50JykgOiBfcHJvZEludmFyaWFudCgnMTM2JywgdGhpcy5nZXROYW1lKCkgfHwgJ1JlYWN0Q29t
cG9zaXRlQ29tcG9uZW50JykgOiB2b2lkIDA7XG5cbiAgICB2YXIgd2lsbFJlY2VpdmUgPSBmYWxz
ZTtcbiAgICB2YXIgbmV4dENvbnRleHQ7XG5cbiAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIGNvbnRl
eHQgaGFzIGNoYW5nZWQgb3Igbm90XG4gICAgaWYgKHRoaXMuX2NvbnRleHQgPT09IG5leHRVbm1h
c2tlZENvbnRleHQpIHtcbiAgICAgIG5leHRDb250ZXh0ID0gaW5zdC5jb250ZXh0O1xuICAgIH0g
ZWxzZSB7XG4gICAgICBuZXh0Q29udGV4dCA9IHRoaXMuX3Byb2Nlc3NDb250ZXh0KG5leHRVbm1h
c2tlZENvbnRleHQpO1xuICAgICAgd2lsbFJlY2VpdmUgPSB0cnVlO1xuICAgIH1cblxuICAgIHZh
ciBwcmV2UHJvcHMgPSBwcmV2UGFyZW50RWxlbWVudC5wcm9wcztcbiAgICB2YXIgbmV4dFByb3Bz
ID0gbmV4dFBhcmVudEVsZW1lbnQucHJvcHM7XG5cbiAgICAvLyBOb3QgYSBzaW1wbGUgc3RhdGUg
dXBkYXRlIGJ1dCBhIHByb3BzIHVwZGF0ZVxuICAgIGlmIChwcmV2UGFyZW50RWxlbWVudCAhPT0g
bmV4dFBhcmVudEVsZW1lbnQpIHtcbiAgICAgIHdpbGxSZWNlaXZlID0gdHJ1ZTtcbiAgICB9XG5c
biAgICAvLyBBbiB1cGRhdGUgaGVyZSB3aWxsIHNjaGVkdWxlIGFuIHVwZGF0ZSBidXQgaW1tZWRp
YXRlbHkgc2V0XG4gICAgLy8gX3BlbmRpbmdTdGF0ZVF1ZXVlIHdoaWNoIHdpbGwgZW5zdXJlIHRo
YXQgYW55IHN0YXRlIHVwZGF0ZXMgZ2V0c1xuICAgIC8vIGltbWVkaWF0ZWx5IHJlY29uY2lsZWQg
aW5zdGVhZCBvZiB3YWl0aW5nIGZvciB0aGUgbmV4dCBiYXRjaC5cbiAgICBpZiAod2lsbFJlY2Vp
dmUgJiYgaW5zdC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKSB7XG4gICAgICBpZiAocHJvY2Vz
cy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBtZWFzdXJlTGlmZUN5
Y2xlUGVyZihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGluc3QuY29tcG9uZW50V2ls
bFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMsIG5leHRDb250ZXh0KTtcbiAgICAgICAgfSwgdGhpcy5f
ZGVidWdJRCwgJ2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnKTtcbiAgICAgIH0gZWxzZSB7XG4g
ICAgICAgIGluc3QuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMsIG5leHRDb250
ZXh0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbmV4dFN0YXRlID0gdGhpcy5fcHJvY2Vz
c1BlbmRpbmdTdGF0ZShuZXh0UHJvcHMsIG5leHRDb250ZXh0KTtcbiAgICB2YXIgc2hvdWxkVXBk
YXRlID0gdHJ1ZTtcblxuICAgIGlmICghdGhpcy5fcGVuZGluZ0ZvcmNlVXBkYXRlKSB7XG4gICAg
ICBpZiAoaW5zdC5zaG91bGRDb21wb25lbnRVcGRhdGUpIHtcbiAgICAgICAgaWYgKHByb2Nlc3Mu
ZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBzaG91bGRVcGRhdGUg
PSBtZWFzdXJlTGlmZUN5Y2xlUGVyZihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4g
aW5zdC5zaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUsIG5leHRDb250
ZXh0KTtcbiAgICAgICAgICB9LCB0aGlzLl9kZWJ1Z0lELCAnc2hvdWxkQ29tcG9uZW50VXBkYXRl
Jyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2hvdWxkVXBkYXRlID0gaW5zdC5zaG91
bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUsIG5leHRDb250ZXh0KTtcbiAg
ICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuX2NvbXBvc2l0ZVR5cGUg
PT09IENvbXBvc2l0ZVR5cGVzLlB1cmVDbGFzcykge1xuICAgICAgICAgIHNob3VsZFVwZGF0ZSA9
ICFzaGFsbG93RXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpIHx8ICFzaGFsbG93RXF1YWwoaW5z
dC5zdGF0ZSwgbmV4dFN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlm
IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBwcm9jZXNz
LmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhzaG91bGRVcGRhdGUgIT09
IHVuZGVmaW5lZCwgJyVzLnNob3VsZENvbXBvbmVudFVwZGF0ZSgpOiBSZXR1cm5lZCB1bmRlZmlu
ZWQgaW5zdGVhZCBvZiBhICcgKyAnYm9vbGVhbiB2YWx1ZS4gTWFrZSBzdXJlIHRvIHJldHVybiB0
cnVlIG9yIGZhbHNlLicsIHRoaXMuZ2V0TmFtZSgpIHx8ICdSZWFjdENvbXBvc2l0ZUNvbXBvbmVu
dCcpIDogdm9pZCAwO1xuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZUJhdGNoTnVtYmVyID0gbnVs
bDtcbiAgICBpZiAoc2hvdWxkVXBkYXRlKSB7XG4gICAgICB0aGlzLl9wZW5kaW5nRm9yY2VVcGRh
dGUgPSBmYWxzZTtcbiAgICAgIC8vIFdpbGwgc2V0IGB0aGlzLnByb3BzYCwgYHRoaXMuc3RhdGVg
IGFuZCBgdGhpcy5jb250ZXh0YC5cbiAgICAgIHRoaXMuX3BlcmZvcm1Db21wb25lbnRVcGRhdGUo
bmV4dFBhcmVudEVsZW1lbnQsIG5leHRQcm9wcywgbmV4dFN0YXRlLCBuZXh0Q29udGV4dCwgdHJh
bnNhY3Rpb24sIG5leHRVbm1hc2tlZENvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJ
ZiBpdCdzIGRldGVybWluZWQgdGhhdCBhIGNvbXBvbmVudCBzaG91bGQgbm90IHVwZGF0ZSwgd2Ug
c3RpbGwgd2FudFxuICAgICAgLy8gdG8gc2V0IHByb3BzIGFuZCBzdGF0ZSBidXQgd2Ugc2hvcnRj
dXQgdGhlIHJlc3Qgb2YgdGhlIHVwZGF0ZS5cbiAgICAgIHRoaXMuX2N1cnJlbnRFbGVtZW50ID0g
bmV4dFBhcmVudEVsZW1lbnQ7XG4gICAgICB0aGlzLl9jb250ZXh0ID0gbmV4dFVubWFza2VkQ29u
dGV4dDtcbiAgICAgIGluc3QucHJvcHMgPSBuZXh0UHJvcHM7XG4gICAgICBpbnN0LnN0YXRlID0g
bmV4dFN0YXRlO1xuICAgICAgaW5zdC5jb250ZXh0ID0gbmV4dENvbnRleHQ7XG4gICAgfVxuICB9
LFxuXG4gIF9wcm9jZXNzUGVuZGluZ1N0YXRlOiBmdW5jdGlvbiAocHJvcHMsIGNvbnRleHQpIHtc
biAgICB2YXIgaW5zdCA9IHRoaXMuX2luc3RhbmNlO1xuICAgIHZhciBxdWV1ZSA9IHRoaXMuX3Bl
bmRpbmdTdGF0ZVF1ZXVlO1xuICAgIHZhciByZXBsYWNlID0gdGhpcy5fcGVuZGluZ1JlcGxhY2VT
dGF0ZTtcbiAgICB0aGlzLl9wZW5kaW5nUmVwbGFjZVN0YXRlID0gZmFsc2U7XG4gICAgdGhpcy5f
cGVuZGluZ1N0YXRlUXVldWUgPSBudWxsO1xuXG4gICAgaWYgKCFxdWV1ZSkge1xuICAgICAgcmV0
dXJuIGluc3Quc3RhdGU7XG4gICAgfVxuXG4gICAgaWYgKHJlcGxhY2UgJiYgcXVldWUubGVuZ3Ro
ID09PSAxKSB7XG4gICAgICByZXR1cm4gcXVldWVbMF07XG4gICAgfVxuXG4gICAgdmFyIG5leHRT
dGF0ZSA9IF9hc3NpZ24oe30sIHJlcGxhY2UgPyBxdWV1ZVswXSA6IGluc3Quc3RhdGUpO1xuICAg
IGZvciAodmFyIGkgPSByZXBsYWNlID8gMSA6IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xu
ICAgICAgdmFyIHBhcnRpYWwgPSBxdWV1ZVtpXTtcbiAgICAgIF9hc3NpZ24obmV4dFN0YXRlLCB0
eXBlb2YgcGFydGlhbCA9PT0gJ2Z1bmN0aW9uJyA/IHBhcnRpYWwuY2FsbChpbnN0LCBuZXh0U3Rh
dGUsIHByb3BzLCBjb250ZXh0KSA6IHBhcnRpYWwpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXh0
U3RhdGU7XG4gIH0sXG5cbiAgLyoqXG4gICAqIE1lcmdlcyBuZXcgcHJvcHMgYW5kIHN0YXRlLCBu
b3RpZmllcyBkZWxlZ2F0ZSBtZXRob2RzIG9mIHVwZGF0ZSBhbmRcbiAgICogcGVyZm9ybXMgdXBk
YXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gbmV4dEVsZW1lbnQgTmV4dCBl
bGVtZW50XG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuZXh0UHJvcHMgTmV4dCBwdWJsaWMgb2JqZWN0
IHRvIHNldCBhcyBwcm9wZXJ0aWVzLlxuICAgKiBAcGFyYW0gez9vYmplY3R9IG5leHRTdGF0ZSBO
ZXh0IG9iamVjdCB0byBzZXQgYXMgc3RhdGUuXG4gICAqIEBwYXJhbSB7P29iamVjdH0gbmV4dENv
bnRleHQgTmV4dCBwdWJsaWMgb2JqZWN0IHRvIHNldCBhcyBjb250ZXh0LlxuICAgKiBAcGFyYW0g
e1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7P29i
amVjdH0gdW5tYXNrZWRDb250ZXh0XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcGVyZm9ybUNv
bXBvbmVudFVwZGF0ZTogZnVuY3Rpb24gKG5leHRFbGVtZW50LCBuZXh0UHJvcHMsIG5leHRTdGF0
ZSwgbmV4dENvbnRleHQsIHRyYW5zYWN0aW9uLCB1bm1hc2tlZENvbnRleHQpIHtcbiAgICB2YXIg
X3RoaXMyID0gdGhpcztcblxuICAgIHZhciBpbnN0ID0gdGhpcy5faW5zdGFuY2U7XG5cbiAgICB2
YXIgaGFzQ29tcG9uZW50RGlkVXBkYXRlID0gQm9vbGVhbihpbnN0LmNvbXBvbmVudERpZFVwZGF0
ZSk7XG4gICAgdmFyIHByZXZQcm9wcztcbiAgICB2YXIgcHJldlN0YXRlO1xuICAgIHZhciBwcmV2
Q29udGV4dDtcbiAgICBpZiAoaGFzQ29tcG9uZW50RGlkVXBkYXRlKSB7XG4gICAgICBwcmV2UHJv
cHMgPSBpbnN0LnByb3BzO1xuICAgICAgcHJldlN0YXRlID0gaW5zdC5zdGF0ZTtcbiAgICAgIHBy
ZXZDb250ZXh0ID0gaW5zdC5jb250ZXh0O1xuICAgIH1cblxuICAgIGlmIChpbnN0LmNvbXBvbmVu
dFdpbGxVcGRhdGUpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1
Y3Rpb24nKSB7XG4gICAgICAgIG1lYXN1cmVMaWZlQ3ljbGVQZXJmKGZ1bmN0aW9uICgpIHtcbiAg
ICAgICAgICByZXR1cm4gaW5zdC5jb21wb25lbnRXaWxsVXBkYXRlKG5leHRQcm9wcywgbmV4dFN0
YXRlLCBuZXh0Q29udGV4dCk7XG4gICAgICAgIH0sIHRoaXMuX2RlYnVnSUQsICdjb21wb25lbnRX
aWxsVXBkYXRlJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnN0LmNvbXBvbmVudFdpbGxV
cGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUsIG5leHRDb250ZXh0KTtcbiAgICAgIH1cbiAgICB9
XG5cbiAgICB0aGlzLl9jdXJyZW50RWxlbWVudCA9IG5leHRFbGVtZW50O1xuICAgIHRoaXMuX2Nv
bnRleHQgPSB1bm1hc2tlZENvbnRleHQ7XG4gICAgaW5zdC5wcm9wcyA9IG5leHRQcm9wcztcbiAg
ICBpbnN0LnN0YXRlID0gbmV4dFN0YXRlO1xuICAgIGluc3QuY29udGV4dCA9IG5leHRDb250ZXh0
O1xuXG4gICAgdGhpcy5fdXBkYXRlUmVuZGVyZWRDb21wb25lbnQodHJhbnNhY3Rpb24sIHVubWFz
a2VkQ29udGV4dCk7XG5cbiAgICBpZiAoaGFzQ29tcG9uZW50RGlkVXBkYXRlKSB7XG4gICAgICBp
ZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB0cmFu
c2FjdGlvbi5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKGZ1bmN0aW9uICgpIHtcbiAgICAg
ICAgICBtZWFzdXJlTGlmZUN5Y2xlUGVyZihpbnN0LmNvbXBvbmVudERpZFVwZGF0ZS5iaW5kKGlu
c3QsIHByZXZQcm9wcywgcHJldlN0YXRlLCBwcmV2Q29udGV4dCksIF90aGlzMi5fZGVidWdJRCwg
J2NvbXBvbmVudERpZFVwZGF0ZScpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAg
ICAgIHRyYW5zYWN0aW9uLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUoaW5zdC5jb21wb25l
bnREaWRVcGRhdGUuYmluZChpbnN0LCBwcmV2UHJvcHMsIHByZXZTdGF0ZSwgcHJldkNvbnRleHQp
LCBpbnN0KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIENhbGwgdGhlIGNv
bXBvbmVudCdzIGByZW5kZXJgIG1ldGhvZCBhbmQgdXBkYXRlIHRoZSBET00gYWNjb3JkaW5nbHku
XG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rp
b25cbiAgICogQGludGVybmFsXG4gICAqL1xuICBfdXBkYXRlUmVuZGVyZWRDb21wb25lbnQ6IGZ1
bmN0aW9uICh0cmFuc2FjdGlvbiwgY29udGV4dCkge1xuICAgIHZhciBwcmV2Q29tcG9uZW50SW5z
dGFuY2UgPSB0aGlzLl9yZW5kZXJlZENvbXBvbmVudDtcbiAgICB2YXIgcHJldlJlbmRlcmVkRWxl
bWVudCA9IHByZXZDb21wb25lbnRJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQ7XG4gICAgdmFyIG5l
eHRSZW5kZXJlZEVsZW1lbnQgPSB0aGlzLl9yZW5kZXJWYWxpZGF0ZWRDb21wb25lbnQoKTtcblxu
ICAgIHZhciBkZWJ1Z0lEID0gMDtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdw
cm9kdWN0aW9uJykge1xuICAgICAgZGVidWdJRCA9IHRoaXMuX2RlYnVnSUQ7XG4gICAgfVxuXG4g
ICAgaWYgKHNob3VsZFVwZGF0ZVJlYWN0Q29tcG9uZW50KHByZXZSZW5kZXJlZEVsZW1lbnQsIG5l
eHRSZW5kZXJlZEVsZW1lbnQpKSB7XG4gICAgICBSZWFjdFJlY29uY2lsZXIucmVjZWl2ZUNvbXBv
bmVudChwcmV2Q29tcG9uZW50SW5zdGFuY2UsIG5leHRSZW5kZXJlZEVsZW1lbnQsIHRyYW5zYWN0
aW9uLCB0aGlzLl9wcm9jZXNzQ2hpbGRDb250ZXh0KGNvbnRleHQpKTtcbiAgICB9IGVsc2Uge1xu
ICAgICAgdmFyIG9sZEhvc3ROb2RlID0gUmVhY3RSZWNvbmNpbGVyLmdldEhvc3ROb2RlKHByZXZD
b21wb25lbnRJbnN0YW5jZSk7XG4gICAgICBSZWFjdFJlY29uY2lsZXIudW5tb3VudENvbXBvbmVu
dChwcmV2Q29tcG9uZW50SW5zdGFuY2UsIGZhbHNlKTtcblxuICAgICAgdmFyIG5vZGVUeXBlID0g
UmVhY3ROb2RlVHlwZXMuZ2V0VHlwZShuZXh0UmVuZGVyZWRFbGVtZW50KTtcbiAgICAgIHRoaXMu
X3JlbmRlcmVkTm9kZVR5cGUgPSBub2RlVHlwZTtcbiAgICAgIHZhciBjaGlsZCA9IHRoaXMuX2lu
c3RhbnRpYXRlUmVhY3RDb21wb25lbnQobmV4dFJlbmRlcmVkRWxlbWVudCwgbm9kZVR5cGUgIT09
IFJlYWN0Tm9kZVR5cGVzLkVNUFRZIC8qIHNob3VsZEhhdmVEZWJ1Z0lEICovXG4gICAgICApO1xu
ICAgICAgdGhpcy5fcmVuZGVyZWRDb21wb25lbnQgPSBjaGlsZDtcblxuICAgICAgdmFyIG5leHRN
YXJrdXAgPSBSZWFjdFJlY29uY2lsZXIubW91bnRDb21wb25lbnQoY2hpbGQsIHRyYW5zYWN0aW9u
LCB0aGlzLl9ob3N0UGFyZW50LCB0aGlzLl9ob3N0Q29udGFpbmVySW5mbywgdGhpcy5fcHJvY2Vz
c0NoaWxkQ29udGV4dChjb250ZXh0KSwgZGVidWdJRCk7XG5cbiAgICAgIGlmIChwcm9jZXNzLmVu
di5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmIChkZWJ1Z0lEICE9PSAw
KSB7XG4gICAgICAgICAgdmFyIGNoaWxkRGVidWdJRHMgPSBjaGlsZC5fZGVidWdJRCAhPT0gMCA/
IFtjaGlsZC5fZGVidWdJRF0gOiBbXTtcbiAgICAgICAgICBSZWFjdEluc3RydW1lbnRhdGlvbi5k
ZWJ1Z1Rvb2wub25TZXRDaGlsZHJlbihkZWJ1Z0lELCBjaGlsZERlYnVnSURzKTtcbiAgICAgICAg
fVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9yZXBsYWNlTm9kZVdpdGhNYXJrdXAob2xkSG9zdE5v
ZGUsIG5leHRNYXJrdXAsIHByZXZDb21wb25lbnRJbnN0YW5jZSk7XG4gICAgfVxuICB9LFxuXG4g
IC8qKlxuICAgKiBPdmVycmlkZGVuIGluIHNoYWxsb3cgcmVuZGVyaW5nLlxuICAgKlxuICAgKiBA
cHJvdGVjdGVkXG4gICAqL1xuICBfcmVwbGFjZU5vZGVXaXRoTWFya3VwOiBmdW5jdGlvbiAob2xk
SG9zdE5vZGUsIG5leHRNYXJrdXAsIHByZXZJbnN0YW5jZSkge1xuICAgIFJlYWN0Q29tcG9uZW50
RW52aXJvbm1lbnQucmVwbGFjZU5vZGVXaXRoTWFya3VwKG9sZEhvc3ROb2RlLCBuZXh0TWFya3Vw
LCBwcmV2SW5zdGFuY2UpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xu
ICBfcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50V2l0aG91dE93bmVyT3JDb250ZXh0OiBmdW5jdGlv
biAoKSB7XG4gICAgdmFyIGluc3QgPSB0aGlzLl9pbnN0YW5jZTtcbiAgICB2YXIgcmVuZGVyZWRF
bGVtZW50O1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicp
IHtcbiAgICAgIHJlbmRlcmVkRWxlbWVudCA9IG1lYXN1cmVMaWZlQ3ljbGVQZXJmKGZ1bmN0aW9u
ICgpIHtcbiAgICAgICAgcmV0dXJuIGluc3QucmVuZGVyKCk7XG4gICAgICB9LCB0aGlzLl9kZWJ1
Z0lELCAncmVuZGVyJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbmRlcmVkRWxlbWVudCA9IGlu
c3QucmVuZGVyKCk7XG4gICAgfVxuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAn
cHJvZHVjdGlvbicpIHtcbiAgICAgIC8vIFdlIGFsbG93IGF1dG8tbW9ja3MgdG8gcHJvY2VlZCBh
cyBpZiB0aGV5J3JlIHJldHVybmluZyBudWxsLlxuICAgICAgaWYgKHJlbmRlcmVkRWxlbWVudCA9
PT0gdW5kZWZpbmVkICYmIGluc3QucmVuZGVyLl9pc01vY2tGdW5jdGlvbikge1xuICAgICAgICAv
LyBUaGlzIGlzIHByb2JhYmx5IGJhZCBwcmFjdGljZS4gQ29uc2lkZXIgd2FybmluZyBoZXJlIGFu
ZFxuICAgICAgICAvLyBkZXByZWNhdGluZyB0aGlzIGNvbnZlbmllbmNlLlxuICAgICAgICByZW5k
ZXJlZEVsZW1lbnQgPSBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZW5kZXJl
ZEVsZW1lbnQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVuZGVy
VmFsaWRhdGVkQ29tcG9uZW50OiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlbmRlcmVkRWxlbWVu
dDtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyB8fCB0aGlz
Ll9jb21wb3NpdGVUeXBlICE9PSBDb21wb3NpdGVUeXBlcy5TdGF0ZWxlc3NGdW5jdGlvbmFsKSB7
XG4gICAgICBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50ID0gdGhpcztcbiAgICAgIHRyeSB7XG4g
ICAgICAgIHJlbmRlcmVkRWxlbWVudCA9IHRoaXMuX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudFdp
dGhvdXRPd25lck9yQ29udGV4dCgpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RD
dXJyZW50T3duZXIuY3VycmVudCA9IG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAg
IHJlbmRlcmVkRWxlbWVudCA9IHRoaXMuX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudFdpdGhvdXRP
d25lck9yQ29udGV4dCgpO1xuICAgIH1cbiAgICAhKFxuICAgIC8vIFRPRE86IEFuIGBpc1ZhbGlk
Tm9kZWAgZnVuY3Rpb24gd291bGQgcHJvYmFibHkgYmUgbW9yZSBhcHByb3ByaWF0ZVxuICAgIHJl
bmRlcmVkRWxlbWVudCA9PT0gbnVsbCB8fCByZW5kZXJlZEVsZW1lbnQgPT09IGZhbHNlIHx8IFJl
YWN0LmlzVmFsaWRFbGVtZW50KHJlbmRlcmVkRWxlbWVudCkpID8gcHJvY2Vzcy5lbnYuTk9ERV9F
TlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJyVzLnJlbmRlcigpOiBBIHZh
bGlkIFJlYWN0IGVsZW1lbnQgKG9yIG51bGwpIG11c3QgYmUgcmV0dXJuZWQuIFlvdSBtYXkgaGF2
ZSByZXR1cm5lZCB1bmRlZmluZWQsIGFuIGFycmF5IG9yIHNvbWUgb3RoZXIgaW52YWxpZCBvYmpl
Y3QuJywgdGhpcy5nZXROYW1lKCkgfHwgJ1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50JykgOiBfcHJv
ZEludmFyaWFudCgnMTA5JywgdGhpcy5nZXROYW1lKCkgfHwgJ1JlYWN0Q29tcG9zaXRlQ29tcG9u
ZW50JykgOiB2b2lkIDA7XG5cbiAgICByZXR1cm4gcmVuZGVyZWRFbGVtZW50O1xuICB9LFxuXG4g
IC8qKlxuICAgKiBMYXppbHkgYWxsb2NhdGVzIHRoZSByZWZzIG9iamVjdCBhbmQgc3RvcmVzIGBj
b21wb25lbnRgIGFzIGByZWZgLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmIFJlZmVy
ZW5jZSBuYW1lLlxuICAgKiBAcGFyYW0ge2NvbXBvbmVudH0gY29tcG9uZW50IENvbXBvbmVudCB0
byBzdG9yZSBhcyBgcmVmYC5cbiAgICogQGZpbmFsXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBh
dHRhY2hSZWY6IGZ1bmN0aW9uIChyZWYsIGNvbXBvbmVudCkge1xuICAgIHZhciBpbnN0ID0gdGhp
cy5nZXRQdWJsaWNJbnN0YW5jZSgpO1xuICAgICEoaW5zdCAhPSBudWxsKSA/IHByb2Nlc3MuZW52
Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdTdGF0ZWxlc3Mg
ZnVuY3Rpb24gY29tcG9uZW50cyBjYW5ub3QgaGF2ZSByZWZzLicpIDogX3Byb2RJbnZhcmlhbnQo
JzExMCcpIDogdm9pZCAwO1xuICAgIHZhciBwdWJsaWNDb21wb25lbnRJbnN0YW5jZSA9IGNvbXBv
bmVudC5nZXRQdWJsaWNJbnN0YW5jZSgpO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAh
PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudCAm
JiBjb21wb25lbnQuZ2V0TmFtZSA/IGNvbXBvbmVudC5nZXROYW1lKCkgOiAnYSBjb21wb25lbnQn
O1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmco
cHVibGljQ29tcG9uZW50SW5zdGFuY2UgIT0gbnVsbCB8fCBjb21wb25lbnQuX2NvbXBvc2l0ZVR5
cGUgIT09IENvbXBvc2l0ZVR5cGVzLlN0YXRlbGVzc0Z1bmN0aW9uYWwsICdTdGF0ZWxlc3MgZnVu
Y3Rpb24gY29tcG9uZW50cyBjYW5ub3QgYmUgZ2l2ZW4gcmVmcyAnICsgJyhTZWUgcmVmIFwiJXNc
IiBpbiAlcyBjcmVhdGVkIGJ5ICVzKS4gJyArICdBdHRlbXB0cyB0byBhY2Nlc3MgdGhpcyByZWYg
d2lsbCBmYWlsLicsIHJlZiwgY29tcG9uZW50TmFtZSwgdGhpcy5nZXROYW1lKCkpIDogdm9pZCAw
O1xuICAgIH1cbiAgICB2YXIgcmVmcyA9IGluc3QucmVmcyA9PT0gZW1wdHlPYmplY3QgPyBpbnN0
LnJlZnMgPSB7fSA6IGluc3QucmVmcztcbiAgICByZWZzW3JlZl0gPSBwdWJsaWNDb21wb25lbnRJ
bnN0YW5jZTtcbiAgfSxcblxuICAvKipcbiAgICogRGV0YWNoZXMgYSByZWZlcmVuY2UgbmFtZS5c
biAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlZiBOYW1lIHRvIGRlcmVmZXJlbmNlLlxuICAg
KiBAZmluYWxcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRldGFjaFJlZjogZnVuY3Rpb24gKHJl
Zikge1xuICAgIHZhciByZWZzID0gdGhpcy5nZXRQdWJsaWNJbnN0YW5jZSgpLnJlZnM7XG4gICAg
ZGVsZXRlIHJlZnNbcmVmXTtcbiAgfSxcblxuICAvKipcbiAgICogR2V0IGEgdGV4dCBkZXNjcmlw
dGlvbiBvZiB0aGUgY29tcG9uZW50IHRoYXQgY2FuIGJlIHVzZWQgdG8gaWRlbnRpZnkgaXRcbiAg
ICogaW4gZXJyb3IgbWVzc2FnZXMuXG4gICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIG5hbWUgb3Ig
bnVsbC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXROYW1lOiBmdW5jdGlvbiAoKSB7XG4g
ICAgdmFyIHR5cGUgPSB0aGlzLl9jdXJyZW50RWxlbWVudC50eXBlO1xuICAgIHZhciBjb25zdHJ1
Y3RvciA9IHRoaXMuX2luc3RhbmNlICYmIHRoaXMuX2luc3RhbmNlLmNvbnN0cnVjdG9yO1xuICAg
IHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8IGNvbnN0cnVjdG9yICYmIGNvbnN0cnVjdG9yLmRp
c3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCBjb25zdHJ1Y3RvciAmJiBjb25zdHJ1Y3Rvci5uYW1l
IHx8IG51bGw7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcHVibGljbHkgYWNjZXNzaWJs
ZSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGNvbXBvbmVudCAtIGkuZS4gd2hhdFxuICAgKiBpcyBl
eHBvc2VkIGJ5IHJlZnMgYW5kIHJldHVybmVkIGJ5IHJlbmRlci4gQ2FuIGJlIG51bGwgZm9yIHN0
YXRlbGVzc1xuICAgKiBjb21wb25lbnRzLlxuICAgKlxuICAgKiBAcmV0dXJuIHtSZWFjdENvbXBv
bmVudH0gdGhlIHB1YmxpYyBjb21wb25lbnQgaW5zdGFuY2UuXG4gICAqIEBpbnRlcm5hbFxuICAg
Ki9cbiAgZ2V0UHVibGljSW5zdGFuY2U6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaW5zdCA9IHRo
aXMuX2luc3RhbmNlO1xuICAgIGlmICh0aGlzLl9jb21wb3NpdGVUeXBlID09PSBDb21wb3NpdGVU
eXBlcy5TdGF0ZWxlc3NGdW5jdGlvbmFsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4g
ICAgcmV0dXJuIGluc3Q7XG4gIH0sXG5cbiAgLy8gU3R1YlxuICBfaW5zdGFudGlhdGVSZWFjdENv
bXBvbmVudDogbnVsbFxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdENvbXBvc2l0ZUNvbXBv
bmVudDtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25v
ZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50LmpzXG4vLyBt
b2R1bGUgaWQgPSAxNTZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyoqXG4gKiBDb3B5cmlnaHQg
MjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAq
XG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGlj
ZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkg
b2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJp
Z2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3Rv
cnkuXG4gKlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgbmV4dERlYnVnSUQgPSAx
O1xuXG5mdW5jdGlvbiBnZXROZXh0RGVidWdJRCgpIHtcbiAgcmV0dXJuIG5leHREZWJ1Z0lEKys7
XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TmV4dERlYnVnSUQ7XG5cblxuLy8vLy8vLy8vLy8v
Ly8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvcmVhY3QvbGliL2dl
dE5leHREZWJ1Z0lELmpzXG4vLyBtb2R1bGUgaWQgPSAxNTdcbi8vIG1vZHVsZSBjaHVua3MgPSAw
IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxs
IHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVu
ZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBp
biB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBn
cmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmls
ZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xu
XG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQgdHlwZS4gSWYgdGhl
cmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVt
YmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxuXG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0g
dHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2xbJ2ZvciddICYmIFN5bWJvbFsn
Zm9yJ10oJ3JlYWN0LmVsZW1lbnQnKSB8fCAweGVhYzc7XG5cbm1vZHVsZS5leHBvcnRzID0gUkVB
Q1RfRUxFTUVOVF9UWVBFO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09U
RVJcbi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RFbGVtZW50U3ltYm9sLmpz
XG4vLyBtb2R1bGUgaWQgPSAxNThcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyoqXG4gKiBDb3B5
cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5
bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJl
Y3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0
ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBk
aXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKiBnbG9iYWwgU3lt
Ym9sICovXG5cbnZhciBJVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rp
b24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbnZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0
ZXJhdG9yJzsgLy8gQmVmb3JlIFN5bWJvbCBzcGVjLlxuXG4vKipcbiAqIFJldHVybnMgdGhlIGl0
ZXJhdG9yIG1ldGhvZCBmdW5jdGlvbiBjb250YWluZWQgb24gdGhlIGl0ZXJhYmxlIG9iamVjdC5c
biAqXG4gKiBCZSBzdXJlIHRvIGludm9rZSB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgaXRlcmFibGUg
YXMgY29udGV4dDpcbiAqXG4gKiAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG15
SXRlcmFibGUpO1xuICogICAgIGlmIChpdGVyYXRvckZuKSB7XG4gKiAgICAgICB2YXIgaXRlcmF0
b3IgPSBpdGVyYXRvckZuLmNhbGwobXlJdGVyYWJsZSk7XG4gKiAgICAgICAuLi5cbiAqICAgICB9
XG4gKlxuICogQHBhcmFtIHs/b2JqZWN0fSBtYXliZUl0ZXJhYmxlXG4gKiBAcmV0dXJuIHs/ZnVu
Y3Rpb259XG4gKi9cbmZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICB2
YXIgaXRlcmF0b3JGbiA9IG1heWJlSXRlcmFibGUgJiYgKElURVJBVE9SX1NZTUJPTCAmJiBtYXli
ZUl0ZXJhYmxlW0lURVJBVE9SX1NZTUJPTF0gfHwgbWF5YmVJdGVyYWJsZVtGQVVYX0lURVJBVE9S
X1NZTUJPTF0pO1xuICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAg
ICByZXR1cm4gaXRlcmF0b3JGbjtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEl0ZXJh
dG9yRm47XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9u
b2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9nZXRJdGVyYXRvckZuLmpzXG4vLyBtb2R1bGUgaWQg
PSAxNTlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVz
ZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlz
IHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3Vu
ZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBz
b3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4g
YmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxu
ICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgS2V5RXNjYXBlVXRpbHMgPSByZXF1aXJl
KCcuL0tleUVzY2FwZVV0aWxzJyk7XG52YXIgdHJhdmVyc2VBbGxDaGlsZHJlbiA9IHJlcXVpcmUo
Jy4vdHJhdmVyc2VBbGxDaGlsZHJlbicpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKCdmYmpzL2xp
Yi93YXJuaW5nJyk7XG5cbnZhciBSZWFjdENvbXBvbmVudFRyZWVIb29rO1xuXG5pZiAodHlwZW9m
IHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MuZW52ICYmIHByb2Nlc3MuZW52Lk5P
REVfRU5WID09PSAndGVzdCcpIHtcbiAgLy8gVGVtcG9yYXJ5IGhhY2suXG4gIC8vIElubGluZSBy
ZXF1aXJlcyBkb24ndCB3b3JrIHdlbGwgd2l0aCBKZXN0OlxuICAvLyBodHRwczovL2dpdGh1Yi5j
b20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzcyNDBcbiAgLy8gUmVtb3ZlIHRoZSBpbmxpbmUgcmVx
dWlyZXMgd2hlbiB3ZSBkb24ndCBuZWVkIHRoZW0gYW55bW9yZTpcbiAgLy8gaHR0cHM6Ly9naXRo
dWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvNzE3OFxuICBSZWFjdENvbXBvbmVudFRyZWVIb29r
ID0gcmVxdWlyZSgncmVhY3QvbGliL1JlYWN0Q29tcG9uZW50VHJlZUhvb2snKTtcbn1cblxuLyoq
XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSB0cmF2ZXJzZUNvbnRleHQgQ29udGV4dCBwYXNzZWQgdGhy
b3VnaCB0cmF2ZXJzYWwuXG4gKiBAcGFyYW0gez9SZWFjdENvbXBvbmVudH0gY2hpbGQgUmVhY3Qg
Y2hpbGQgY29tcG9uZW50LlxuICogQHBhcmFtIHshc3RyaW5nfSBuYW1lIFN0cmluZyBuYW1lIG9m
IGtleSBwYXRoIHRvIGNoaWxkLlxuICogQHBhcmFtIHtudW1iZXI9fSBzZWxmRGVidWdJRCBPcHRp
b25hbCBkZWJ1Z0lEIG9mIHRoZSBjdXJyZW50IGludGVybmFsIGluc3RhbmNlLlxuICovXG5mdW5j
dGlvbiBmbGF0dGVuU2luZ2xlQ2hpbGRJbnRvQ29udGV4dCh0cmF2ZXJzZUNvbnRleHQsIGNoaWxk
LCBuYW1lLCBzZWxmRGVidWdJRCkge1xuICAvLyBXZSBmb3VuZCBhIGNvbXBvbmVudCBpbnN0YW5j
ZS5cbiAgaWYgKHRyYXZlcnNlQ29udGV4dCAmJiB0eXBlb2YgdHJhdmVyc2VDb250ZXh0ID09PSAn
b2JqZWN0Jykge1xuICAgIHZhciByZXN1bHQgPSB0cmF2ZXJzZUNvbnRleHQ7XG4gICAgdmFyIGtl
eVVuaXF1ZSA9IHJlc3VsdFtuYW1lXSA9PT0gdW5kZWZpbmVkO1xuICAgIGlmIChwcm9jZXNzLmVu
di5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoIVJlYWN0Q29tcG9uZW50
VHJlZUhvb2spIHtcbiAgICAgICAgUmVhY3RDb21wb25lbnRUcmVlSG9vayA9IHJlcXVpcmUoJ3Jl
YWN0L2xpYi9SZWFjdENvbXBvbmVudFRyZWVIb29rJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWtl
eVVuaXF1ZSkge1xuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24n
ID8gd2FybmluZyhmYWxzZSwgJ2ZsYXR0ZW5DaGlsZHJlbiguLi4pOiBFbmNvdW50ZXJlZCB0d28g
Y2hpbGRyZW4gd2l0aCB0aGUgc2FtZSBrZXksICcgKyAnYCVzYC4gQ2hpbGQga2V5cyBtdXN0IGJl
IHVuaXF1ZTsgd2hlbiB0d28gY2hpbGRyZW4gc2hhcmUgYSBrZXksIG9ubHkgJyArICd0aGUgZmly
c3QgY2hpbGQgd2lsbCBiZSB1c2VkLiVzJywgS2V5RXNjYXBlVXRpbHMudW5lc2NhcGUobmFtZSks
IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0U3RhY2tBZGRlbmR1bUJ5SUQoc2VsZkRlYnVnSUQp
KSA6IHZvaWQgMDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGtleVVuaXF1ZSAmJiBjaGlsZCAh
PSBudWxsKSB7XG4gICAgICByZXN1bHRbbmFtZV0gPSBjaGlsZDtcbiAgICB9XG4gIH1cbn1cblxu
LyoqXG4gKiBGbGF0dGVucyBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFz
IGBwcm9wcy5jaGlsZHJlbmAuIEFueSBudWxsXG4gKiBjaGlsZHJlbiB3aWxsIG5vdCBiZSBpbmNs
dWRlZCBpbiB0aGUgcmVzdWx0aW5nIG9iamVjdC5cbiAqIEByZXR1cm4geyFvYmplY3R9IGZsYXR0
ZW5lZCBjaGlsZHJlbiBrZXllZCBieSBuYW1lLlxuICovXG5mdW5jdGlvbiBmbGF0dGVuQ2hpbGRy
ZW4oY2hpbGRyZW4sIHNlbGZEZWJ1Z0lEKSB7XG4gIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4g
ICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9XG4gIHZhciByZXN1bHQgPSB7fTtcblxuICBpZiAocHJv
Y2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHRyYXZlcnNlQWxsQ2hp
bGRyZW4oY2hpbGRyZW4sIGZ1bmN0aW9uICh0cmF2ZXJzZUNvbnRleHQsIGNoaWxkLCBuYW1lKSB7
XG4gICAgICByZXR1cm4gZmxhdHRlblNpbmdsZUNoaWxkSW50b0NvbnRleHQodHJhdmVyc2VDb250
ZXh0LCBjaGlsZCwgbmFtZSwgc2VsZkRlYnVnSUQpO1xuICAgIH0sIHJlc3VsdCk7XG4gIH0gZWxz
ZSB7XG4gICAgdHJhdmVyc2VBbGxDaGlsZHJlbihjaGlsZHJlbiwgZmxhdHRlblNpbmdsZUNoaWxk
SW50b0NvbnRleHQsIHJlc3VsdCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxl
LmV4cG9ydHMgPSBmbGF0dGVuQ2hpbGRyZW47XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBX
RUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9mbGF0dGVuQ2hp
bGRyZW4uanNcbi8vIG1vZHVsZSBpZCA9IDE2MFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipc
biAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRz
IHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhl
IEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSBy
b290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4g
KiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRo
ZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX2Fzc2ln
biA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxudmFyIFBvb2xlZENsYXNzID0gcmVxdWly
ZSgnLi9Qb29sZWRDbGFzcycpO1xudmFyIFRyYW5zYWN0aW9uID0gcmVxdWlyZSgnLi9UcmFuc2Fj
dGlvbicpO1xudmFyIFJlYWN0SW5zdHJ1bWVudGF0aW9uID0gcmVxdWlyZSgnLi9SZWFjdEluc3Ry
dW1lbnRhdGlvbicpO1xudmFyIFJlYWN0U2VydmVyVXBkYXRlUXVldWUgPSByZXF1aXJlKCcuL1Jl
YWN0U2VydmVyVXBkYXRlUXVldWUnKTtcblxuLyoqXG4gKiBFeGVjdXRlZCB3aXRoaW4gdGhlIHNj
b3BlIG9mIHRoZSBgVHJhbnNhY3Rpb25gIGluc3RhbmNlLiBDb25zaWRlciB0aGVzZSBhc1xuICog
YmVpbmcgbWVtYmVyIG1ldGhvZHMsIGJ1dCB3aXRoIGFuIGltcGxpZWQgb3JkZXJpbmcgd2hpbGUg
YmVpbmcgaXNvbGF0ZWQgZnJvbVxuICogZWFjaCBvdGhlci5cbiAqL1xudmFyIFRSQU5TQUNUSU9O
X1dSQVBQRVJTID0gW107XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rp
b24nKSB7XG4gIFRSQU5TQUNUSU9OX1dSQVBQRVJTLnB1c2goe1xuICAgIGluaXRpYWxpemU6IFJl
YWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vbkJlZ2luRmx1c2gsXG4gICAgY2xvc2U6IFJl
YWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vbkVuZEZsdXNoXG4gIH0pO1xufVxuXG52YXIg
bm9vcENhbGxiYWNrUXVldWUgPSB7XG4gIGVucXVldWU6IGZ1bmN0aW9uICgpIHt9XG59O1xuXG4v
KipcbiAqIEBjbGFzcyBSZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9uXG4gKiBAcGFyYW0g
e2Jvb2xlYW59IHJlbmRlclRvU3RhdGljTWFya3VwXG4gKi9cbmZ1bmN0aW9uIFJlYWN0U2VydmVy
UmVuZGVyaW5nVHJhbnNhY3Rpb24ocmVuZGVyVG9TdGF0aWNNYXJrdXApIHtcbiAgdGhpcy5yZWlu
aXRpYWxpemVUcmFuc2FjdGlvbigpO1xuICB0aGlzLnJlbmRlclRvU3RhdGljTWFya3VwID0gcmVu
ZGVyVG9TdGF0aWNNYXJrdXA7XG4gIHRoaXMudXNlQ3JlYXRlRWxlbWVudCA9IGZhbHNlO1xuICB0
aGlzLnVwZGF0ZVF1ZXVlID0gbmV3IFJlYWN0U2VydmVyVXBkYXRlUXVldWUodGhpcyk7XG59XG5c
bnZhciBNaXhpbiA9IHtcbiAgLyoqXG4gICAqIEBzZWUgVHJhbnNhY3Rpb25cbiAgICogQGFic3Ry
YWN0XG4gICAqIEBmaW5hbFxuICAgKiBAcmV0dXJuIHthcnJheX0gRW1wdHkgbGlzdCBvZiBvcGVy
YXRpb24gd3JhcCBwcm9jZWR1cmVzLlxuICAgKi9cbiAgZ2V0VHJhbnNhY3Rpb25XcmFwcGVyczog
ZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBUUkFOU0FDVElPTl9XUkFQUEVSUztcbiAgfSxcblxu
ICAvKipcbiAgICogQHJldHVybiB7b2JqZWN0fSBUaGUgcXVldWUgdG8gY29sbGVjdCBgb25ET01S
ZWFkeWAgY2FsbGJhY2tzIHdpdGguXG4gICAqL1xuICBnZXRSZWFjdE1vdW50UmVhZHk6IGZ1bmN0
aW9uICgpIHtcbiAgICByZXR1cm4gbm9vcENhbGxiYWNrUXVldWU7XG4gIH0sXG5cbiAgLyoqXG4g
ICAqIEByZXR1cm4ge29iamVjdH0gVGhlIHF1ZXVlIHRvIGNvbGxlY3QgUmVhY3QgYXN5bmMgZXZl
bnRzLlxuICAgKi9cbiAgZ2V0VXBkYXRlUXVldWU6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4g
dGhpcy51cGRhdGVRdWV1ZTtcbiAgfSxcblxuICAvKipcbiAgICogYFBvb2xlZENsYXNzYCBsb29r
cyBmb3IgdGhpcywgYW5kIHdpbGwgaW52b2tlIHRoaXMgYmVmb3JlIGFsbG93aW5nIHRoaXNcbiAg
ICogaW5zdGFuY2UgdG8gYmUgcmV1c2VkLlxuICAgKi9cbiAgZGVzdHJ1Y3RvcjogZnVuY3Rpb24g
KCkge30sXG5cbiAgY2hlY2twb2ludDogZnVuY3Rpb24gKCkge30sXG5cbiAgcm9sbGJhY2s6IGZ1
bmN0aW9uICgpIHt9XG59O1xuXG5fYXNzaWduKFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rp
b24ucHJvdG90eXBlLCBUcmFuc2FjdGlvbiwgTWl4aW4pO1xuXG5Qb29sZWRDbGFzcy5hZGRQb29s
aW5nVG8oUmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbik7XG5cbm1vZHVsZS5leHBvcnRz
ID0gUmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbjtcblxuXG4vLy8vLy8vLy8vLy8vLy8v
Ly9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1Jl
YWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb24uanNcbi8vIG1vZHVsZSBpZCA9IDE2MVxuLy8g
bW9kdWxlIGNodW5rcyA9IDAiLCIvKipcbiAqIENvcHlyaWdodCAyMDE1LXByZXNlbnQsIEZhY2Vi
b29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNv
ZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxu
ICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVl
LiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBp
biB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xu
XG4ndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29u
c3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhy
b3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsg
fSB9XG5cbnZhciBSZWFjdFVwZGF0ZVF1ZXVlID0gcmVxdWlyZSgnLi9SZWFjdFVwZGF0ZVF1ZXVl
Jyk7XG5cbnZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuXG5mdW5j
dGlvbiB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgY2FsbGVyTmFtZSkge1xuICBpZiAocHJvY2Vz
cy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHZhciBjb25zdHJ1Y3RvciA9
IHB1YmxpY0luc3RhbmNlLmNvbnN0cnVjdG9yO1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9
PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnJXMoLi4uKTogQ2FuIG9ubHkgdXBkYXRl
IGEgbW91bnRpbmcgY29tcG9uZW50LiAnICsgJ1RoaXMgdXN1YWxseSBtZWFucyB5b3UgY2FsbGVk
ICVzKCkgb3V0c2lkZSBjb21wb25lbnRXaWxsTW91bnQoKSBvbiB0aGUgc2VydmVyLiAnICsgJ1Ro
aXMgaXMgYSBuby1vcC4gUGxlYXNlIGNoZWNrIHRoZSBjb2RlIGZvciB0aGUgJXMgY29tcG9uZW50
LicsIGNhbGxlck5hbWUsIGNhbGxlck5hbWUsIGNvbnN0cnVjdG9yICYmIChjb25zdHJ1Y3Rvci5k
aXNwbGF5TmFtZSB8fCBjb25zdHJ1Y3Rvci5uYW1lKSB8fCAnUmVhY3RDbGFzcycpIDogdm9pZCAw
O1xuICB9XG59XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgdXBkYXRlIHF1ZXVlIHVzZWQgZm9yIHNl
cnZlciByZW5kZXJpbmcuXG4gKiBJdCBkZWxlZ2F0ZXMgdG8gUmVhY3RVcGRhdGVRdWV1ZSB3aGls
ZSBzZXJ2ZXIgcmVuZGVyaW5nIGlzIGluIHByb2dyZXNzIGFuZFxuICogc3dpdGNoZXMgdG8gUmVh
Y3ROb29wVXBkYXRlUXVldWUgYWZ0ZXIgdGhlIHRyYW5zYWN0aW9uIGhhcyBjb21wbGV0ZWQuXG4g
KiBAY2xhc3MgUmVhY3RTZXJ2ZXJVcGRhdGVRdWV1ZVxuICogQHBhcmFtIHtUcmFuc2FjdGlvbn0g
dHJhbnNhY3Rpb25cbiAqL1xuXG52YXIgUmVhY3RTZXJ2ZXJVcGRhdGVRdWV1ZSA9IGZ1bmN0aW9u
ICgpIHtcbiAgZnVuY3Rpb24gUmVhY3RTZXJ2ZXJVcGRhdGVRdWV1ZSh0cmFuc2FjdGlvbikge1xu
ICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBSZWFjdFNlcnZlclVwZGF0ZVF1ZXVlKTtcblxuICAg
IHRoaXMudHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVj
a3Mgd2hldGhlciBvciBub3QgdGhpcyBjb21wb3NpdGUgY29tcG9uZW50IGlzIG1vdW50ZWQuXG4g
ICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHdlIHdh
bnQgdG8gdGVzdC5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBtb3VudGVkLCBmYWxz
ZSBvdGhlcndpc2UuXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQGZpbmFsXG4gICAqL1xuXG5cbiAg
UmVhY3RTZXJ2ZXJVcGRhdGVRdWV1ZS5wcm90b3R5cGUuaXNNb3VudGVkID0gZnVuY3Rpb24gaXNN
b3VudGVkKHB1YmxpY0luc3RhbmNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIC8q
KlxuICAgKiBFbnF1ZXVlIGEgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIGFmdGVyIGFs
bCB0aGUgcGVuZGluZyB1cGRhdGVzXG4gICAqIGhhdmUgcHJvY2Vzc2VkLlxuICAgKlxuICAgKiBA
cGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0byB1c2UgYXMg
YHRoaXNgIGNvbnRleHQuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQg
YWZ0ZXIgc3RhdGUgaXMgdXBkYXRlZC5cbiAgICogQGludGVybmFsXG4gICAqL1xuXG5cbiAgUmVh
Y3RTZXJ2ZXJVcGRhdGVRdWV1ZS5wcm90b3R5cGUuZW5xdWV1ZUNhbGxiYWNrID0gZnVuY3Rpb24g
ZW5xdWV1ZUNhbGxiYWNrKHB1YmxpY0luc3RhbmNlLCBjYWxsYmFjaywgY2FsbGVyTmFtZSkge1xu
ICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uLmlzSW5UcmFuc2FjdGlvbigpKSB7XG4gICAgICBSZWFj
dFVwZGF0ZVF1ZXVlLmVucXVldWVDYWxsYmFjayhwdWJsaWNJbnN0YW5jZSwgY2FsbGJhY2ssIGNh
bGxlck5hbWUpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogRm9yY2VzIGFuIHVwZGF0ZS4g
VGhpcyBzaG91bGQgb25seSBiZSBpbnZva2VkIHdoZW4gaXQgaXMga25vd24gd2l0aFxuICAgKiBj
ZXJ0YWludHkgdGhhdCB3ZSBhcmUgKipub3QqKiBpbiBhIERPTSB0cmFuc2FjdGlvbi5cbiAgICpc
biAgICogWW91IG1heSB3YW50IHRvIGNhbGwgdGhpcyB3aGVuIHlvdSBrbm93IHRoYXQgc29tZSBk
ZWVwZXIgYXNwZWN0IG9mIHRoZVxuICAgKiBjb21wb25lbnQncyBzdGF0ZSBoYXMgY2hhbmdlZCBi
dXQgYHNldFN0YXRlYCB3YXMgbm90IGNhbGxlZC5cbiAgICpcbiAgICogVGhpcyB3aWxsIG5vdCBp
bnZva2UgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAsIGJ1dCBpdCB3aWxsIGludm9rZVxuICAgKiBg
Y29tcG9uZW50V2lsbFVwZGF0ZWAgYW5kIGBjb21wb25lbnREaWRVcGRhdGVgLlxuICAgKlxuICAg
KiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNo
b3VsZCByZXJlbmRlci5cbiAgICogQGludGVybmFsXG4gICAqL1xuXG5cbiAgUmVhY3RTZXJ2ZXJV
cGRhdGVRdWV1ZS5wcm90b3R5cGUuZW5xdWV1ZUZvcmNlVXBkYXRlID0gZnVuY3Rpb24gZW5xdWV1
ZUZvcmNlVXBkYXRlKHB1YmxpY0luc3RhbmNlKSB7XG4gICAgaWYgKHRoaXMudHJhbnNhY3Rpb24u
aXNJblRyYW5zYWN0aW9uKCkpIHtcbiAgICAgIFJlYWN0VXBkYXRlUXVldWUuZW5xdWV1ZUZvcmNl
VXBkYXRlKHB1YmxpY0luc3RhbmNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2Fybk5vb3AocHVi
bGljSW5zdGFuY2UsICdmb3JjZVVwZGF0ZScpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICog
UmVwbGFjZXMgYWxsIG9mIHRoZSBzdGF0ZS4gQWx3YXlzIHVzZSB0aGlzIG9yIGBzZXRTdGF0ZWAg
dG8gbXV0YXRlIHN0YXRlLlxuICAgKiBZb3Ugc2hvdWxkIHRyZWF0IGB0aGlzLnN0YXRlYCBhcyBp
bW11dGFibGUuXG4gICAqXG4gICAqIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGB0aGlzLnN0
YXRlYCB3aWxsIGJlIGltbWVkaWF0ZWx5IHVwZGF0ZWQsIHNvXG4gICAqIGFjY2Vzc2luZyBgdGhp
cy5zdGF0ZWAgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBvbGQgdmFs
dWUuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGlu
c3RhbmNlIHRoYXQgc2hvdWxkIHJlcmVuZGVyLlxuICAgKiBAcGFyYW0ge29iamVjdHxmdW5jdGlv
bn0gY29tcGxldGVTdGF0ZSBOZXh0IHN0YXRlLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG5cblxu
ICBSZWFjdFNlcnZlclVwZGF0ZVF1ZXVlLnByb3RvdHlwZS5lbnF1ZXVlUmVwbGFjZVN0YXRlID0g
ZnVuY3Rpb24gZW5xdWV1ZVJlcGxhY2VTdGF0ZShwdWJsaWNJbnN0YW5jZSwgY29tcGxldGVTdGF0
ZSkge1xuICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uLmlzSW5UcmFuc2FjdGlvbigpKSB7XG4gICAg
ICBSZWFjdFVwZGF0ZVF1ZXVlLmVucXVldWVSZXBsYWNlU3RhdGUocHVibGljSW5zdGFuY2UsIGNv
bXBsZXRlU3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5j
ZSwgJ3JlcGxhY2VTdGF0ZScpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogU2V0cyBhIHN1
YnNldCBvZiB0aGUgc3RhdGUuIFRoaXMgb25seSBleGlzdHMgYmVjYXVzZSBfcGVuZGluZ1N0YXRl
IGlzXG4gICAqIGludGVybmFsLiBUaGlzIHByb3ZpZGVzIGEgbWVyZ2luZyBzdHJhdGVneSB0aGF0
IGlzIG5vdCBhdmFpbGFibGUgdG8gZGVlcFxuICAgKiBwcm9wZXJ0aWVzIHdoaWNoIGlzIGNvbmZ1
c2luZy4gVE9ETzogRXhwb3NlIHBlbmRpbmdTdGF0ZSBvciBkb24ndCB1c2UgaXRcbiAgICogZHVy
aW5nIHRoZSBtZXJnZS5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0
YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuXG4gICAqIEBwYXJhbSB7b2Jq
ZWN0fGZ1bmN0aW9ufSBwYXJ0aWFsU3RhdGUgTmV4dCBwYXJ0aWFsIHN0YXRlIHRvIGJlIG1lcmdl
ZCB3aXRoIHN0YXRlLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG5cblxuICBSZWFjdFNlcnZlclVw
ZGF0ZVF1ZXVlLnByb3RvdHlwZS5lbnF1ZXVlU2V0U3RhdGUgPSBmdW5jdGlvbiBlbnF1ZXVlU2V0
U3RhdGUocHVibGljSW5zdGFuY2UsIHBhcnRpYWxTdGF0ZSkge1xuICAgIGlmICh0aGlzLnRyYW5z
YWN0aW9uLmlzSW5UcmFuc2FjdGlvbigpKSB7XG4gICAgICBSZWFjdFVwZGF0ZVF1ZXVlLmVucXVl
dWVTZXRTdGF0ZShwdWJsaWNJbnN0YW5jZSwgcGFydGlhbFN0YXRlKTtcbiAgICB9IGVsc2Uge1xu
ICAgICAgd2Fybk5vb3AocHVibGljSW5zdGFuY2UsICdzZXRTdGF0ZScpO1xuICAgIH1cbiAgfTtc
blxuICByZXR1cm4gUmVhY3RTZXJ2ZXJVcGRhdGVRdWV1ZTtcbn0oKTtcblxubW9kdWxlLmV4cG9y
dHMgPSBSZWFjdFNlcnZlclVwZGF0ZVF1ZXVlO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8g
V0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RTZXJ2
ZXJVcGRhdGVRdWV1ZS5qc1xuLy8gbW9kdWxlIGlkID0gMTYyXG4vLyBtb2R1bGUgY2h1bmtzID0g
MCIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1
bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwg
Z3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZp
bGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZh
ciBfYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xuXG52YXIgRE9NTGF6eVRyZWUg
PSByZXF1aXJlKCcuL0RPTUxhenlUcmVlJyk7XG52YXIgUmVhY3RET01Db21wb25lbnRUcmVlID0g
cmVxdWlyZSgnLi9SZWFjdERPTUNvbXBvbmVudFRyZWUnKTtcblxudmFyIFJlYWN0RE9NRW1wdHlD
b21wb25lbnQgPSBmdW5jdGlvbiAoaW5zdGFudGlhdGUpIHtcbiAgLy8gUmVhY3RDb21wb3NpdGVD
b21wb25lbnQgdXNlcyB0aGlzOlxuICB0aGlzLl9jdXJyZW50RWxlbWVudCA9IG51bGw7XG4gIC8v
IFJlYWN0RE9NQ29tcG9uZW50VHJlZSB1c2VzIHRoZXNlOlxuICB0aGlzLl9ob3N0Tm9kZSA9IG51
bGw7XG4gIHRoaXMuX2hvc3RQYXJlbnQgPSBudWxsO1xuICB0aGlzLl9ob3N0Q29udGFpbmVySW5m
byA9IG51bGw7XG4gIHRoaXMuX2RvbUlEID0gMDtcbn07XG5fYXNzaWduKFJlYWN0RE9NRW1wdHlD
b21wb25lbnQucHJvdG90eXBlLCB7XG4gIG1vdW50Q29tcG9uZW50OiBmdW5jdGlvbiAodHJhbnNh
Y3Rpb24sIGhvc3RQYXJlbnQsIGhvc3RDb250YWluZXJJbmZvLCBjb250ZXh0KSB7XG4gICAgdmFy
IGRvbUlEID0gaG9zdENvbnRhaW5lckluZm8uX2lkQ291bnRlcisrO1xuICAgIHRoaXMuX2RvbUlE
ID0gZG9tSUQ7XG4gICAgdGhpcy5faG9zdFBhcmVudCA9IGhvc3RQYXJlbnQ7XG4gICAgdGhpcy5f
aG9zdENvbnRhaW5lckluZm8gPSBob3N0Q29udGFpbmVySW5mbztcblxuICAgIHZhciBub2RlVmFs
dWUgPSAnIHJlYWN0LWVtcHR5OiAnICsgdGhpcy5fZG9tSUQgKyAnICc7XG4gICAgaWYgKHRyYW5z
YWN0aW9uLnVzZUNyZWF0ZUVsZW1lbnQpIHtcbiAgICAgIHZhciBvd25lckRvY3VtZW50ID0gaG9z
dENvbnRhaW5lckluZm8uX293bmVyRG9jdW1lbnQ7XG4gICAgICB2YXIgbm9kZSA9IG93bmVyRG9j
dW1lbnQuY3JlYXRlQ29tbWVudChub2RlVmFsdWUpO1xuICAgICAgUmVhY3RET01Db21wb25lbnRU
cmVlLnByZWNhY2hlTm9kZSh0aGlzLCBub2RlKTtcbiAgICAgIHJldHVybiBET01MYXp5VHJlZShu
b2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRyYW5zYWN0aW9uLnJlbmRlclRvU3RhdGlj
TWFya3VwKSB7XG4gICAgICAgIC8vIE5vcm1hbGx5IHdlJ2QgaW5zZXJ0IGEgY29tbWVudCBub2Rl
LCBidXQgc2luY2UgdGhpcyBpcyBhIHNpdHVhdGlvblxuICAgICAgICAvLyB3aGVyZSBSZWFjdCB3
b24ndCB0YWtlIG92ZXIgKHN0YXRpYyBwYWdlcyksIHdlIGNhbiBzaW1wbHkgcmV0dXJuXG4gICAg
ICAgIC8vIG5vdGhpbmcuXG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICAgIHJldHVy
biAnPCEtLScgKyBub2RlVmFsdWUgKyAnLS0+JztcbiAgICB9XG4gIH0sXG4gIHJlY2VpdmVDb21w
b25lbnQ6IGZ1bmN0aW9uICgpIHt9LFxuICBnZXRIb3N0Tm9kZTogZnVuY3Rpb24gKCkge1xuICAg
IHJldHVybiBSZWFjdERPTUNvbXBvbmVudFRyZWUuZ2V0Tm9kZUZyb21JbnN0YW5jZSh0aGlzKTtc
biAgfSxcbiAgdW5tb3VudENvbXBvbmVudDogZnVuY3Rpb24gKCkge1xuICAgIFJlYWN0RE9NQ29t
cG9uZW50VHJlZS51bmNhY2hlTm9kZSh0aGlzKTtcbiAgfVxufSk7XG5cbm1vZHVsZS5leHBvcnRz
ID0gUmVhY3RET01FbXB0eUNvbXBvbmVudDtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdF
QlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RE9NRW1w
dHlDb21wb25lbnQuanNcbi8vIG1vZHVsZSBpZCA9IDE2M1xuLy8gbW9kdWxlIGNodW5rcyA9IDAi
LCIvKipcbiAqIENvcHlyaWdodCAyMDE1LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwg
cmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5k
ZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdy
YW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxl
IGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIg
X3Byb2RJbnZhcmlhbnQgPSByZXF1aXJlKCcuL3JlYWN0UHJvZEludmFyaWFudCcpO1xuXG52YXIg
aW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG5cbi8qKlxuICogUmV0
dXJuIHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mIEEgYW5kIEIsIG9yIG51bGwgaWYgdGhl
eSBhcmUgaW5cbiAqIGRpZmZlcmVudCB0cmVlcy5cbiAqL1xuZnVuY3Rpb24gZ2V0TG93ZXN0Q29t
bW9uQW5jZXN0b3IoaW5zdEEsIGluc3RCKSB7XG4gICEoJ19ob3N0Tm9kZScgaW4gaW5zdEEpID8g
cHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwg
J2dldE5vZGVGcm9tSW5zdGFuY2U6IEludmFsaWQgYXJndW1lbnQuJykgOiBfcHJvZEludmFyaWFu
dCgnMzMnKSA6IHZvaWQgMDtcbiAgISgnX2hvc3ROb2RlJyBpbiBpbnN0QikgPyBwcm9jZXNzLmVu
di5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnZ2V0Tm9kZUZy
b21JbnN0YW5jZTogSW52YWxpZCBhcmd1bWVudC4nKSA6IF9wcm9kSW52YXJpYW50KCczMycpIDog
dm9pZCAwO1xuXG4gIHZhciBkZXB0aEEgPSAwO1xuICBmb3IgKHZhciB0ZW1wQSA9IGluc3RBOyB0
ZW1wQTsgdGVtcEEgPSB0ZW1wQS5faG9zdFBhcmVudCkge1xuICAgIGRlcHRoQSsrO1xuICB9XG4g
IHZhciBkZXB0aEIgPSAwO1xuICBmb3IgKHZhciB0ZW1wQiA9IGluc3RCOyB0ZW1wQjsgdGVtcEIg
PSB0ZW1wQi5faG9zdFBhcmVudCkge1xuICAgIGRlcHRoQisrO1xuICB9XG5cbiAgLy8gSWYgQSBp
cyBkZWVwZXIsIGNyYXdsIHVwLlxuICB3aGlsZSAoZGVwdGhBIC0gZGVwdGhCID4gMCkge1xuICAg
IGluc3RBID0gaW5zdEEuX2hvc3RQYXJlbnQ7XG4gICAgZGVwdGhBLS07XG4gIH1cblxuICAvLyBJ
ZiBCIGlzIGRlZXBlciwgY3Jhd2wgdXAuXG4gIHdoaWxlIChkZXB0aEIgLSBkZXB0aEEgPiAwKSB7
XG4gICAgaW5zdEIgPSBpbnN0Qi5faG9zdFBhcmVudDtcbiAgICBkZXB0aEItLTtcbiAgfVxuXG4g
IC8vIFdhbGsgaW4gbG9ja3N0ZXAgdW50aWwgd2UgZmluZCBhIG1hdGNoLlxuICB2YXIgZGVwdGgg
PSBkZXB0aEE7XG4gIHdoaWxlIChkZXB0aC0tKSB7XG4gICAgaWYgKGluc3RBID09PSBpbnN0Qikg
e1xuICAgICAgcmV0dXJuIGluc3RBO1xuICAgIH1cbiAgICBpbnN0QSA9IGluc3RBLl9ob3N0UGFy
ZW50O1xuICAgIGluc3RCID0gaW5zdEIuX2hvc3RQYXJlbnQ7XG4gIH1cbiAgcmV0dXJuIG51bGw7
XG59XG5cbi8qKlxuICogUmV0dXJuIGlmIEEgaXMgYW4gYW5jZXN0b3Igb2YgQi5cbiAqL1xuZnVu
Y3Rpb24gaXNBbmNlc3RvcihpbnN0QSwgaW5zdEIpIHtcbiAgISgnX2hvc3ROb2RlJyBpbiBpbnN0
QSkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZh
bHNlLCAnaXNBbmNlc3RvcjogSW52YWxpZCBhcmd1bWVudC4nKSA6IF9wcm9kSW52YXJpYW50KCcz
NScpIDogdm9pZCAwO1xuICAhKCdfaG9zdE5vZGUnIGluIGluc3RCKSA/IHByb2Nlc3MuZW52Lk5P
REVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdpc0FuY2VzdG9yOiBJ
bnZhbGlkIGFyZ3VtZW50LicpIDogX3Byb2RJbnZhcmlhbnQoJzM1JykgOiB2b2lkIDA7XG5cbiAg
d2hpbGUgKGluc3RCKSB7XG4gICAgaWYgKGluc3RCID09PSBpbnN0QSkge1xuICAgICAgcmV0dXJu
IHRydWU7XG4gICAgfVxuICAgIGluc3RCID0gaW5zdEIuX2hvc3RQYXJlbnQ7XG4gIH1cbiAgcmV0
dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFJldHVybiB0aGUgcGFyZW50IGluc3RhbmNlIG9mIHRo
ZSBwYXNzZWQtaW4gaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGdldFBhcmVudEluc3RhbmNlKGlu
c3QpIHtcbiAgISgnX2hvc3ROb2RlJyBpbiBpbnN0KSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9
PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdnZXRQYXJlbnRJbnN0YW5jZTogSW52
YWxpZCBhcmd1bWVudC4nKSA6IF9wcm9kSW52YXJpYW50KCczNicpIDogdm9pZCAwO1xuXG4gIHJl
dHVybiBpbnN0Ll9ob3N0UGFyZW50O1xufVxuXG4vKipcbiAqIFNpbXVsYXRlcyB0aGUgdHJhdmVy
c2FsIG9mIGEgdHdvLXBoYXNlLCBjYXB0dXJlL2J1YmJsZSBldmVudCBkaXNwYXRjaC5cbiAqL1xu
ZnVuY3Rpb24gdHJhdmVyc2VUd29QaGFzZShpbnN0LCBmbiwgYXJnKSB7XG4gIHZhciBwYXRoID0g
W107XG4gIHdoaWxlIChpbnN0KSB7XG4gICAgcGF0aC5wdXNoKGluc3QpO1xuICAgIGluc3QgPSBp
bnN0Ll9ob3N0UGFyZW50O1xuICB9XG4gIHZhciBpO1xuICBmb3IgKGkgPSBwYXRoLmxlbmd0aDsg
aS0tID4gMDspIHtcbiAgICBmbihwYXRoW2ldLCAnY2FwdHVyZWQnLCBhcmcpO1xuICB9XG4gIGZv
ciAoaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgZm4ocGF0aFtpXSwgJ2J1YmJs
ZWQnLCBhcmcpO1xuICB9XG59XG5cbi8qKlxuICogVHJhdmVyc2VzIHRoZSBJRCBoaWVyYXJjaHkg
YW5kIGludm9rZXMgdGhlIHN1cHBsaWVkIGBjYmAgb24gYW55IElEcyB0aGF0XG4gKiBzaG91bGQg
d291bGQgcmVjZWl2ZSBhIGBtb3VzZUVudGVyYCBvciBgbW91c2VMZWF2ZWAgZXZlbnQuXG4gKlxu
ICogRG9lcyBub3QgaW52b2tlIHRoZSBjYWxsYmFjayBvbiB0aGUgbmVhcmVzdCBjb21tb24gYW5j
ZXN0b3IgYmVjYXVzZSBub3RoaW5nXG4gKiBcImVudGVyZWRcIiBvciBcImxlZnRcIiB0aGF0IGVs
ZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIHRyYXZlcnNlRW50ZXJMZWF2ZShmcm9tLCB0bywgZm4sIGFy
Z0Zyb20sIGFyZ1RvKSB7XG4gIHZhciBjb21tb24gPSBmcm9tICYmIHRvID8gZ2V0TG93ZXN0Q29t
bW9uQW5jZXN0b3IoZnJvbSwgdG8pIDogbnVsbDtcbiAgdmFyIHBhdGhGcm9tID0gW107XG4gIHdo
aWxlIChmcm9tICYmIGZyb20gIT09IGNvbW1vbikge1xuICAgIHBhdGhGcm9tLnB1c2goZnJvbSk7
XG4gICAgZnJvbSA9IGZyb20uX2hvc3RQYXJlbnQ7XG4gIH1cbiAgdmFyIHBhdGhUbyA9IFtdO1xu
ICB3aGlsZSAodG8gJiYgdG8gIT09IGNvbW1vbikge1xuICAgIHBhdGhUby5wdXNoKHRvKTtcbiAg
ICB0byA9IHRvLl9ob3N0UGFyZW50O1xuICB9XG4gIHZhciBpO1xuICBmb3IgKGkgPSAwOyBpIDwg
cGF0aEZyb20ubGVuZ3RoOyBpKyspIHtcbiAgICBmbihwYXRoRnJvbVtpXSwgJ2J1YmJsZWQnLCBh
cmdGcm9tKTtcbiAgfVxuICBmb3IgKGkgPSBwYXRoVG8ubGVuZ3RoOyBpLS0gPiAwOykge1xuICAg
IGZuKHBhdGhUb1tpXSwgJ2NhcHR1cmVkJywgYXJnVG8pO1xuICB9XG59XG5cbm1vZHVsZS5leHBv
cnRzID0ge1xuICBpc0FuY2VzdG9yOiBpc0FuY2VzdG9yLFxuICBnZXRMb3dlc3RDb21tb25BbmNl
c3RvcjogZ2V0TG93ZXN0Q29tbW9uQW5jZXN0b3IsXG4gIGdldFBhcmVudEluc3RhbmNlOiBnZXRQ
YXJlbnRJbnN0YW5jZSxcbiAgdHJhdmVyc2VUd29QaGFzZTogdHJhdmVyc2VUd29QaGFzZSxcbiAg
dHJhdmVyc2VFbnRlckxlYXZlOiB0cmF2ZXJzZUVudGVyTGVhdmVcbn07XG5cblxuLy8vLy8vLy8v
Ly8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9t
L2xpYi9SZWFjdERPTVRyZWVUcmF2ZXJzYWwuanNcbi8vIG1vZHVsZSBpZCA9IDE2NFxuLy8gbW9k
dWxlIGNodW5rcyA9IDAiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29r
LCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUg
aXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICog
TElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBB
biBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0
aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBz
dHJpY3QnO1xuXG52YXIgX3Byb2RJbnZhcmlhbnQgPSByZXF1aXJlKCcuL3JlYWN0UHJvZEludmFy
aWFudCcpLFxuICAgIF9hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbnZhciBE
T01DaGlsZHJlbk9wZXJhdGlvbnMgPSByZXF1aXJlKCcuL0RPTUNoaWxkcmVuT3BlcmF0aW9ucycp
O1xudmFyIERPTUxhenlUcmVlID0gcmVxdWlyZSgnLi9ET01MYXp5VHJlZScpO1xudmFyIFJlYWN0
RE9NQ29tcG9uZW50VHJlZSA9IHJlcXVpcmUoJy4vUmVhY3RET01Db21wb25lbnRUcmVlJyk7XG5c
bnZhciBlc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXIgPSByZXF1aXJlKCcuL2VzY2FwZVRleHRD
b250ZW50Rm9yQnJvd3NlcicpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoJ2ZianMvbGliL2lu
dmFyaWFudCcpO1xudmFyIHZhbGlkYXRlRE9NTmVzdGluZyA9IHJlcXVpcmUoJy4vdmFsaWRhdGVE
T01OZXN0aW5nJyk7XG5cbi8qKlxuICogVGV4dCBub2RlcyB2aW9sYXRlIGEgY291cGxlIGFzc3Vt
cHRpb25zIHRoYXQgUmVhY3QgbWFrZXMgYWJvdXQgY29tcG9uZW50czpcbiAqXG4gKiAgLSBXaGVu
IG1vdW50aW5nIHRleHQgaW50byB0aGUgRE9NLCBhZGphY2VudCB0ZXh0IG5vZGVzIGFyZSBtZXJn
ZWQuXG4gKiAgLSBUZXh0IG5vZGVzIGNhbm5vdCBiZSBhc3NpZ25lZCBhIFJlYWN0IHJvb3QgSUQu
XG4gKlxuICogVGhpcyBjb21wb25lbnQgaXMgdXNlZCB0byB3cmFwIHN0cmluZ3MgYmV0d2VlbiBj
b21tZW50IG5vZGVzIHNvIHRoYXQgdGhleVxuICogY2FuIHVuZGVyZ28gdGhlIHNhbWUgcmVjb25j
aWxpYXRpb24gdGhhdCBpcyBhcHBsaWVkIHRvIGVsZW1lbnRzLlxuICpcbiAqIFRPRE86IEludmVz
dGlnYXRlIHJlcHJlc2VudGluZyBSZWFjdCBjb21wb25lbnRzIGluIHRoZSBET00gd2l0aCB0ZXh0
IG5vZGVzLlxuICpcbiAqIEBjbGFzcyBSZWFjdERPTVRleHRDb21wb25lbnRcbiAqIEBleHRlbmRz
IFJlYWN0Q29tcG9uZW50XG4gKiBAaW50ZXJuYWxcbiAqL1xudmFyIFJlYWN0RE9NVGV4dENvbXBv
bmVudCA9IGZ1bmN0aW9uICh0ZXh0KSB7XG4gIC8vIFRPRE86IFRoaXMgaXMgcmVhbGx5IGEgUmVh
Y3RUZXh0IChSZWFjdE5vZGUpLCBub3QgYSBSZWFjdEVsZW1lbnRcbiAgdGhpcy5fY3VycmVudEVs
ZW1lbnQgPSB0ZXh0O1xuICB0aGlzLl9zdHJpbmdUZXh0ID0gJycgKyB0ZXh0O1xuICAvLyBSZWFj
dERPTUNvbXBvbmVudFRyZWUgdXNlcyB0aGVzZTpcbiAgdGhpcy5faG9zdE5vZGUgPSBudWxsO1xu
ICB0aGlzLl9ob3N0UGFyZW50ID0gbnVsbDtcblxuICAvLyBQcm9wZXJ0aWVzXG4gIHRoaXMuX2Rv
bUlEID0gMDtcbiAgdGhpcy5fbW91bnRJbmRleCA9IDA7XG4gIHRoaXMuX2Nsb3NpbmdDb21tZW50
ID0gbnVsbDtcbiAgdGhpcy5fY29tbWVudE5vZGVzID0gbnVsbDtcbn07XG5cbl9hc3NpZ24oUmVh
Y3RET01UZXh0Q29tcG9uZW50LnByb3RvdHlwZSwge1xuICAvKipcbiAgICogQ3JlYXRlcyB0aGUg
bWFya3VwIGZvciB0aGlzIHRleHQgbm9kZS4gVGhpcyBub2RlIGlzIG5vdCBpbnRlbmRlZCB0byBo
YXZlXG4gICAqIGFueSBmZWF0dXJlcyBiZXNpZGVzIGNvbnRhaW5pbmcgdGV4dCBjb250ZW50Llxu
ICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb258UmVhY3RTZXJ2ZXJS
ZW5kZXJpbmdUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICogQHJldHVybiB7c3RyaW5nfSBN
YXJrdXAgZm9yIHRoaXMgdGV4dCBub2RlLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG1vdW50
Q29tcG9uZW50OiBmdW5jdGlvbiAodHJhbnNhY3Rpb24sIGhvc3RQYXJlbnQsIGhvc3RDb250YWlu
ZXJJbmZvLCBjb250ZXh0KSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJv
ZHVjdGlvbicpIHtcbiAgICAgIHZhciBwYXJlbnRJbmZvO1xuICAgICAgaWYgKGhvc3RQYXJlbnQg
IT0gbnVsbCkge1xuICAgICAgICBwYXJlbnRJbmZvID0gaG9zdFBhcmVudC5fYW5jZXN0b3JJbmZv
O1xuICAgICAgfSBlbHNlIGlmIChob3N0Q29udGFpbmVySW5mbyAhPSBudWxsKSB7XG4gICAgICAg
IHBhcmVudEluZm8gPSBob3N0Q29udGFpbmVySW5mby5fYW5jZXN0b3JJbmZvO1xuICAgICAgfVxu
ICAgICAgaWYgKHBhcmVudEluZm8pIHtcbiAgICAgICAgLy8gcGFyZW50SW5mbyBzaG91bGQgYWx3
YXlzIGJlIHByZXNlbnQgZXhjZXB0IGZvciB0aGUgdG9wLWxldmVsXG4gICAgICAgIC8vIGNvbXBv
bmVudCB3aGVuIHNlcnZlciByZW5kZXJpbmdcbiAgICAgICAgdmFsaWRhdGVET01OZXN0aW5nKG51
bGwsIHRoaXMuX3N0cmluZ1RleHQsIHRoaXMsIHBhcmVudEluZm8pO1xuICAgICAgfVxuICAgIH1c
blxuICAgIHZhciBkb21JRCA9IGhvc3RDb250YWluZXJJbmZvLl9pZENvdW50ZXIrKztcbiAgICB2
YXIgb3BlbmluZ1ZhbHVlID0gJyByZWFjdC10ZXh0OiAnICsgZG9tSUQgKyAnICc7XG4gICAgdmFy
IGNsb3NpbmdWYWx1ZSA9ICcgL3JlYWN0LXRleHQgJztcbiAgICB0aGlzLl9kb21JRCA9IGRvbUlE
O1xuICAgIHRoaXMuX2hvc3RQYXJlbnQgPSBob3N0UGFyZW50O1xuICAgIGlmICh0cmFuc2FjdGlv
bi51c2VDcmVhdGVFbGVtZW50KSB7XG4gICAgICB2YXIgb3duZXJEb2N1bWVudCA9IGhvc3RDb250
YWluZXJJbmZvLl9vd25lckRvY3VtZW50O1xuICAgICAgdmFyIG9wZW5pbmdDb21tZW50ID0gb3du
ZXJEb2N1bWVudC5jcmVhdGVDb21tZW50KG9wZW5pbmdWYWx1ZSk7XG4gICAgICB2YXIgY2xvc2lu
Z0NvbW1lbnQgPSBvd25lckRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoY2xvc2luZ1ZhbHVlKTtcbiAg
ICAgIHZhciBsYXp5VHJlZSA9IERPTUxhenlUcmVlKG93bmVyRG9jdW1lbnQuY3JlYXRlRG9jdW1l
bnRGcmFnbWVudCgpKTtcbiAgICAgIERPTUxhenlUcmVlLnF1ZXVlQ2hpbGQobGF6eVRyZWUsIERP
TUxhenlUcmVlKG9wZW5pbmdDb21tZW50KSk7XG4gICAgICBpZiAodGhpcy5fc3RyaW5nVGV4dCkg
e1xuICAgICAgICBET01MYXp5VHJlZS5xdWV1ZUNoaWxkKGxhenlUcmVlLCBET01MYXp5VHJlZShv
d25lckRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMuX3N0cmluZ1RleHQpKSk7XG4gICAgICB9
XG4gICAgICBET01MYXp5VHJlZS5xdWV1ZUNoaWxkKGxhenlUcmVlLCBET01MYXp5VHJlZShjbG9z
aW5nQ29tbWVudCkpO1xuICAgICAgUmVhY3RET01Db21wb25lbnRUcmVlLnByZWNhY2hlTm9kZSh0
aGlzLCBvcGVuaW5nQ29tbWVudCk7XG4gICAgICB0aGlzLl9jbG9zaW5nQ29tbWVudCA9IGNsb3Np
bmdDb21tZW50O1xuICAgICAgcmV0dXJuIGxhenlUcmVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB2
YXIgZXNjYXBlZFRleHQgPSBlc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXIodGhpcy5fc3RyaW5n
VGV4dCk7XG5cbiAgICAgIGlmICh0cmFuc2FjdGlvbi5yZW5kZXJUb1N0YXRpY01hcmt1cCkge1xu
ICAgICAgICAvLyBOb3JtYWxseSB3ZSdkIHdyYXAgdGhpcyBiZXR3ZWVuIGNvbW1lbnQgbm9kZXMg
Zm9yIHRoZSByZWFzb25zIHN0YXRlZFxuICAgICAgICAvLyBhYm92ZSwgYnV0IHNpbmNlIHRoaXMg
aXMgYSBzaXR1YXRpb24gd2hlcmUgUmVhY3Qgd29uJ3QgdGFrZSBvdmVyXG4gICAgICAgIC8vIChz
dGF0aWMgcGFnZXMpLCB3ZSBjYW4gc2ltcGx5IHJldHVybiB0aGUgdGV4dCBhcyBpdCBpcy5cbiAg
ICAgICAgcmV0dXJuIGVzY2FwZWRUZXh0O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gJzwhLS0n
ICsgb3BlbmluZ1ZhbHVlICsgJy0tPicgKyBlc2NhcGVkVGV4dCArICc8IS0tJyArIGNsb3NpbmdW
YWx1ZSArICctLT4nO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogVXBkYXRlcyB0aGlzIGNv
bXBvbmVudCBieSB1cGRhdGluZyB0aGUgdGV4dCBjb250ZW50LlxuICAgKlxuICAgKiBAcGFyYW0g
e1JlYWN0VGV4dH0gbmV4dFRleHQgVGhlIG5leHQgdGV4dCBjb250ZW50XG4gICAqIEBwYXJhbSB7
UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICogQGludGVybmFsXG4g
ICAqL1xuICByZWNlaXZlQ29tcG9uZW50OiBmdW5jdGlvbiAobmV4dFRleHQsIHRyYW5zYWN0aW9u
KSB7XG4gICAgaWYgKG5leHRUZXh0ICE9PSB0aGlzLl9jdXJyZW50RWxlbWVudCkge1xuICAgICAg
dGhpcy5fY3VycmVudEVsZW1lbnQgPSBuZXh0VGV4dDtcbiAgICAgIHZhciBuZXh0U3RyaW5nVGV4
dCA9ICcnICsgbmV4dFRleHQ7XG4gICAgICBpZiAobmV4dFN0cmluZ1RleHQgIT09IHRoaXMuX3N0
cmluZ1RleHQpIHtcbiAgICAgICAgLy8gVE9ETzogU2F2ZSB0aGlzIGFzIHBlbmRpbmcgcHJvcHMg
YW5kIHVzZSBwZXJmb3JtVXBkYXRlSWZOZWNlc3NhcnlcbiAgICAgICAgLy8gYW5kL29yIHVwZGF0
ZUNvbXBvbmVudCB0byBkbyB0aGUgYWN0dWFsIHVwZGF0ZSBmb3IgY29uc2lzdGVuY3kgd2l0aFxu
ICAgICAgICAvLyBvdGhlciBjb21wb25lbnQgdHlwZXM/XG4gICAgICAgIHRoaXMuX3N0cmluZ1Rl
eHQgPSBuZXh0U3RyaW5nVGV4dDtcbiAgICAgICAgdmFyIGNvbW1lbnROb2RlcyA9IHRoaXMuZ2V0
SG9zdE5vZGUoKTtcbiAgICAgICAgRE9NQ2hpbGRyZW5PcGVyYXRpb25zLnJlcGxhY2VEZWxpbWl0
ZWRUZXh0KGNvbW1lbnROb2Rlc1swXSwgY29tbWVudE5vZGVzWzFdLCBuZXh0U3RyaW5nVGV4dCk7
XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGdldEhvc3ROb2RlOiBmdW5jdGlvbiAoKSB7XG4g
ICAgdmFyIGhvc3ROb2RlID0gdGhpcy5fY29tbWVudE5vZGVzO1xuICAgIGlmIChob3N0Tm9kZSkg
e1xuICAgICAgcmV0dXJuIGhvc3ROb2RlO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX2Nsb3NpbmdD
b21tZW50KSB7XG4gICAgICB2YXIgb3BlbmluZ0NvbW1lbnQgPSBSZWFjdERPTUNvbXBvbmVudFRy
ZWUuZ2V0Tm9kZUZyb21JbnN0YW5jZSh0aGlzKTtcbiAgICAgIHZhciBub2RlID0gb3BlbmluZ0Nv
bW1lbnQubmV4dFNpYmxpbmc7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAhKG5vZGUg
IT0gbnVsbCkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJp
YW50KGZhbHNlLCAnTWlzc2luZyBjbG9zaW5nIGNvbW1lbnQgZm9yIHRleHQgY29tcG9uZW50ICVz
JywgdGhpcy5fZG9tSUQpIDogX3Byb2RJbnZhcmlhbnQoJzY3JywgdGhpcy5fZG9tSUQpIDogdm9p
ZCAwO1xuICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gOCAmJiBub2RlLm5vZGVWYWx1ZSA9
PT0gJyAvcmVhY3QtdGV4dCAnKSB7XG4gICAgICAgICAgdGhpcy5fY2xvc2luZ0NvbW1lbnQgPSBu
b2RlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIG5vZGUgPSBub2RlLm5l
eHRTaWJsaW5nO1xuICAgICAgfVxuICAgIH1cbiAgICBob3N0Tm9kZSA9IFt0aGlzLl9ob3N0Tm9k
ZSwgdGhpcy5fY2xvc2luZ0NvbW1lbnRdO1xuICAgIHRoaXMuX2NvbW1lbnROb2RlcyA9IGhvc3RO
b2RlO1xuICAgIHJldHVybiBob3N0Tm9kZTtcbiAgfSxcblxuICB1bm1vdW50Q29tcG9uZW50OiBm
dW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fY2xvc2luZ0NvbW1lbnQgPSBudWxsO1xuICAgIHRoaXMu
X2NvbW1lbnROb2RlcyA9IG51bGw7XG4gICAgUmVhY3RET01Db21wb25lbnRUcmVlLnVuY2FjaGVO
b2RlKHRoaXMpO1xuICB9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdERPTVRleHRDb21w
b25lbnQ7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9u
b2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdERPTVRleHRDb21wb25lbnQuanNcbi8vIG1v
ZHVsZSBpZCA9IDE2NVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipcbiAqIENvcHlyaWdodCAy
MDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpc
biAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNl
bnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBv
ZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmln
aHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9y
eS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX2Fzc2lnbiA9IHJlcXVpcmUoJ29i
amVjdC1hc3NpZ24nKTtcblxudmFyIFJlYWN0VXBkYXRlcyA9IHJlcXVpcmUoJy4vUmVhY3RVcGRh
dGVzJyk7XG52YXIgVHJhbnNhY3Rpb24gPSByZXF1aXJlKCcuL1RyYW5zYWN0aW9uJyk7XG5cbnZh
ciBlbXB0eUZ1bmN0aW9uID0gcmVxdWlyZSgnZmJqcy9saWIvZW1wdHlGdW5jdGlvbicpO1xuXG52
YXIgUkVTRVRfQkFUQ0hFRF9VUERBVEVTID0ge1xuICBpbml0aWFsaXplOiBlbXB0eUZ1bmN0aW9u
LFxuICBjbG9zZTogZnVuY3Rpb24gKCkge1xuICAgIFJlYWN0RGVmYXVsdEJhdGNoaW5nU3RyYXRl
Z3kuaXNCYXRjaGluZ1VwZGF0ZXMgPSBmYWxzZTtcbiAgfVxufTtcblxudmFyIEZMVVNIX0JBVENI
RURfVVBEQVRFUyA9IHtcbiAgaW5pdGlhbGl6ZTogZW1wdHlGdW5jdGlvbixcbiAgY2xvc2U6IFJl
YWN0VXBkYXRlcy5mbHVzaEJhdGNoZWRVcGRhdGVzLmJpbmQoUmVhY3RVcGRhdGVzKVxufTtcblxu
dmFyIFRSQU5TQUNUSU9OX1dSQVBQRVJTID0gW0ZMVVNIX0JBVENIRURfVVBEQVRFUywgUkVTRVRf
QkFUQ0hFRF9VUERBVEVTXTtcblxuZnVuY3Rpb24gUmVhY3REZWZhdWx0QmF0Y2hpbmdTdHJhdGVn
eVRyYW5zYWN0aW9uKCkge1xuICB0aGlzLnJlaW5pdGlhbGl6ZVRyYW5zYWN0aW9uKCk7XG59XG5c
bl9hc3NpZ24oUmVhY3REZWZhdWx0QmF0Y2hpbmdTdHJhdGVneVRyYW5zYWN0aW9uLnByb3RvdHlw
ZSwgVHJhbnNhY3Rpb24sIHtcbiAgZ2V0VHJhbnNhY3Rpb25XcmFwcGVyczogZnVuY3Rpb24gKCkg
e1xuICAgIHJldHVybiBUUkFOU0FDVElPTl9XUkFQUEVSUztcbiAgfVxufSk7XG5cbnZhciB0cmFu
c2FjdGlvbiA9IG5ldyBSZWFjdERlZmF1bHRCYXRjaGluZ1N0cmF0ZWd5VHJhbnNhY3Rpb24oKTtc
blxudmFyIFJlYWN0RGVmYXVsdEJhdGNoaW5nU3RyYXRlZ3kgPSB7XG4gIGlzQmF0Y2hpbmdVcGRh
dGVzOiBmYWxzZSxcblxuICAvKipcbiAgICogQ2FsbCB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gaW4g
YSBjb250ZXh0IHdpdGhpbiB3aGljaCBjYWxscyB0byBgc2V0U3RhdGVgXG4gICAqIGFuZCBmcmll
bmRzIGFyZSBiYXRjaGVkIHN1Y2ggdGhhdCBjb21wb25lbnRzIGFyZW4ndCB1cGRhdGVkIHVubmVj
ZXNzYXJpbHkuXG4gICAqL1xuICBiYXRjaGVkVXBkYXRlczogZnVuY3Rpb24gKGNhbGxiYWNrLCBh
LCBiLCBjLCBkLCBlKSB7XG4gICAgdmFyIGFscmVhZHlCYXRjaGluZ1VwZGF0ZXMgPSBSZWFjdERl
ZmF1bHRCYXRjaGluZ1N0cmF0ZWd5LmlzQmF0Y2hpbmdVcGRhdGVzO1xuXG4gICAgUmVhY3REZWZh
dWx0QmF0Y2hpbmdTdHJhdGVneS5pc0JhdGNoaW5nVXBkYXRlcyA9IHRydWU7XG5cbiAgICAvLyBU
aGUgY29kZSBpcyB3cml0dGVuIHRoaXMgd2F5IHRvIGF2b2lkIGV4dHJhIGFsbG9jYXRpb25zXG4g
ICAgaWYgKGFscmVhZHlCYXRjaGluZ1VwZGF0ZXMpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayhh
LCBiLCBjLCBkLCBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRyYW5zYWN0aW9uLnBl
cmZvcm0oY2FsbGJhY2ssIG51bGwsIGEsIGIsIGMsIGQsIGUpO1xuICAgIH1cbiAgfVxufTtcblxu
bW9kdWxlLmV4cG9ydHMgPSBSZWFjdERlZmF1bHRCYXRjaGluZ1N0cmF0ZWd5O1xuXG5cbi8vLy8v
Ly8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0
LWRvbS9saWIvUmVhY3REZWZhdWx0QmF0Y2hpbmdTdHJhdGVneS5qc1xuLy8gbW9kdWxlIGlkID0g
MTY2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2Vu
dCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBz
b3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQg
aW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291
cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJl
IGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAq
L1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2ln
bicpO1xuXG52YXIgRXZlbnRMaXN0ZW5lciA9IHJlcXVpcmUoJ2ZianMvbGliL0V2ZW50TGlzdGVu
ZXInKTtcbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoJ2ZianMvbGliL0V4ZWN1
dGlvbkVudmlyb25tZW50Jyk7XG52YXIgUG9vbGVkQ2xhc3MgPSByZXF1aXJlKCcuL1Bvb2xlZENs
YXNzJyk7XG52YXIgUmVhY3RET01Db21wb25lbnRUcmVlID0gcmVxdWlyZSgnLi9SZWFjdERPTUNv
bXBvbmVudFRyZWUnKTtcbnZhciBSZWFjdFVwZGF0ZXMgPSByZXF1aXJlKCcuL1JlYWN0VXBkYXRl
cycpO1xuXG52YXIgZ2V0RXZlbnRUYXJnZXQgPSByZXF1aXJlKCcuL2dldEV2ZW50VGFyZ2V0Jyk7
XG52YXIgZ2V0VW5ib3VuZGVkU2Nyb2xsUG9zaXRpb24gPSByZXF1aXJlKCdmYmpzL2xpYi9nZXRV
bmJvdW5kZWRTY3JvbGxQb3NpdGlvbicpO1xuXG4vKipcbiAqIEZpbmQgdGhlIGRlZXBlc3QgUmVh
Y3QgY29tcG9uZW50IGNvbXBsZXRlbHkgY29udGFpbmluZyB0aGUgcm9vdCBvZiB0aGVcbiAqIHBh
c3NlZC1pbiBpbnN0YW5jZSAoZm9yIHVzZSB3aGVuIGVudGlyZSBSZWFjdCB0cmVlcyBhcmUgbmVz
dGVkIHdpdGhpbiBlYWNoXG4gKiBvdGhlcikuIElmIFJlYWN0IHRyZWVzIGFyZSBub3QgbmVzdGVk
LCByZXR1cm5zIG51bGwuXG4gKi9cbmZ1bmN0aW9uIGZpbmRQYXJlbnQoaW5zdCkge1xuICAvLyBU
T0RPOiBJdCBtYXkgYmUgYSBnb29kIGlkZWEgdG8gY2FjaGUgdGhpcyB0byBwcmV2ZW50IHVubmVj
ZXNzYXJ5IERPTVxuICAvLyB0cmF2ZXJzYWwsIGJ1dCBjYWNoaW5nIGlzIGRpZmZpY3VsdCB0byBk
byBjb3JyZWN0bHkgd2l0aG91dCB1c2luZyBhXG4gIC8vIG11dGF0aW9uIG9ic2VydmVyIHRvIGxp
c3RlbiBmb3IgYWxsIERPTSBjaGFuZ2VzLlxuICB3aGlsZSAoaW5zdC5faG9zdFBhcmVudCkge1xu
ICAgIGluc3QgPSBpbnN0Ll9ob3N0UGFyZW50O1xuICB9XG4gIHZhciByb290Tm9kZSA9IFJlYWN0
RE9NQ29tcG9uZW50VHJlZS5nZXROb2RlRnJvbUluc3RhbmNlKGluc3QpO1xuICB2YXIgY29udGFp
bmVyID0gcm9vdE5vZGUucGFyZW50Tm9kZTtcbiAgcmV0dXJuIFJlYWN0RE9NQ29tcG9uZW50VHJl
ZS5nZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShjb250YWluZXIpO1xufVxuXG4vLyBVc2VkIHRv
IHN0b3JlIGFuY2VzdG9yIGhpZXJhcmNoeSBpbiB0b3AgbGV2ZWwgY2FsbGJhY2tcbmZ1bmN0aW9u
IFRvcExldmVsQ2FsbGJhY2tCb29rS2VlcGluZyh0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50KSB7
XG4gIHRoaXMudG9wTGV2ZWxUeXBlID0gdG9wTGV2ZWxUeXBlO1xuICB0aGlzLm5hdGl2ZUV2ZW50
ID0gbmF0aXZlRXZlbnQ7XG4gIHRoaXMuYW5jZXN0b3JzID0gW107XG59XG5fYXNzaWduKFRvcExl
dmVsQ2FsbGJhY2tCb29rS2VlcGluZy5wcm90b3R5cGUsIHtcbiAgZGVzdHJ1Y3RvcjogZnVuY3Rp
b24gKCkge1xuICAgIHRoaXMudG9wTGV2ZWxUeXBlID0gbnVsbDtcbiAgICB0aGlzLm5hdGl2ZUV2
ZW50ID0gbnVsbDtcbiAgICB0aGlzLmFuY2VzdG9ycy5sZW5ndGggPSAwO1xuICB9XG59KTtcblBv
b2xlZENsYXNzLmFkZFBvb2xpbmdUbyhUb3BMZXZlbENhbGxiYWNrQm9va0tlZXBpbmcsIFBvb2xl
ZENsYXNzLnR3b0FyZ3VtZW50UG9vbGVyKTtcblxuZnVuY3Rpb24gaGFuZGxlVG9wTGV2ZWxJbXBs
KGJvb2tLZWVwaW5nKSB7XG4gIHZhciBuYXRpdmVFdmVudFRhcmdldCA9IGdldEV2ZW50VGFyZ2V0
KGJvb2tLZWVwaW5nLm5hdGl2ZUV2ZW50KTtcbiAgdmFyIHRhcmdldEluc3QgPSBSZWFjdERPTUNv
bXBvbmVudFRyZWUuZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUobmF0aXZlRXZlbnRUYXJnZXQp
O1xuXG4gIC8vIExvb3AgdGhyb3VnaCB0aGUgaGllcmFyY2h5LCBpbiBjYXNlIHRoZXJlJ3MgYW55
IG5lc3RlZCBjb21wb25lbnRzLlxuICAvLyBJdCdzIGltcG9ydGFudCB0aGF0IHdlIGJ1aWxkIHRo
ZSBhcnJheSBvZiBhbmNlc3RvcnMgYmVmb3JlIGNhbGxpbmcgYW55XG4gIC8vIGV2ZW50IGhhbmRs
ZXJzLCBiZWNhdXNlIGV2ZW50IGhhbmRsZXJzIGNhbiBtb2RpZnkgdGhlIERPTSwgbGVhZGluZyB0
b1xuICAvLyBpbmNvbnNpc3RlbmNpZXMgd2l0aCBSZWFjdE1vdW50J3Mgbm9kZSBjYWNoZS4gU2Vl
ICMxMTA1LlxuICB2YXIgYW5jZXN0b3IgPSB0YXJnZXRJbnN0O1xuICBkbyB7XG4gICAgYm9va0tl
ZXBpbmcuYW5jZXN0b3JzLnB1c2goYW5jZXN0b3IpO1xuICAgIGFuY2VzdG9yID0gYW5jZXN0b3Ig
JiYgZmluZFBhcmVudChhbmNlc3Rvcik7XG4gIH0gd2hpbGUgKGFuY2VzdG9yKTtcblxuICBmb3Ig
KHZhciBpID0gMDsgaSA8IGJvb2tLZWVwaW5nLmFuY2VzdG9ycy5sZW5ndGg7IGkrKykge1xuICAg
IHRhcmdldEluc3QgPSBib29rS2VlcGluZy5hbmNlc3RvcnNbaV07XG4gICAgUmVhY3RFdmVudExp
c3RlbmVyLl9oYW5kbGVUb3BMZXZlbChib29rS2VlcGluZy50b3BMZXZlbFR5cGUsIHRhcmdldElu
c3QsIGJvb2tLZWVwaW5nLm5hdGl2ZUV2ZW50LCBnZXRFdmVudFRhcmdldChib29rS2VlcGluZy5u
YXRpdmVFdmVudCkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNjcm9sbFZhbHVlTW9uaXRvcihjYikg
e1xuICB2YXIgc2Nyb2xsUG9zaXRpb24gPSBnZXRVbmJvdW5kZWRTY3JvbGxQb3NpdGlvbih3aW5k
b3cpO1xuICBjYihzY3JvbGxQb3NpdGlvbik7XG59XG5cbnZhciBSZWFjdEV2ZW50TGlzdGVuZXIg
PSB7XG4gIF9lbmFibGVkOiB0cnVlLFxuICBfaGFuZGxlVG9wTGV2ZWw6IG51bGwsXG5cbiAgV0lO
RE9XX0hBTkRMRTogRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NID8gd2luZG93IDogbnVs
bCxcblxuICBzZXRIYW5kbGVUb3BMZXZlbDogZnVuY3Rpb24gKGhhbmRsZVRvcExldmVsKSB7XG4g
ICAgUmVhY3RFdmVudExpc3RlbmVyLl9oYW5kbGVUb3BMZXZlbCA9IGhhbmRsZVRvcExldmVsO1xu
ICB9LFxuXG4gIHNldEVuYWJsZWQ6IGZ1bmN0aW9uIChlbmFibGVkKSB7XG4gICAgUmVhY3RFdmVu
dExpc3RlbmVyLl9lbmFibGVkID0gISFlbmFibGVkO1xuICB9LFxuXG4gIGlzRW5hYmxlZDogZnVu
Y3Rpb24gKCkge1xuICAgIHJldHVybiBSZWFjdEV2ZW50TGlzdGVuZXIuX2VuYWJsZWQ7XG4gIH0s
XG5cbiAgLyoqXG4gICAqIFRyYXBzIHRvcC1sZXZlbCBldmVudHMgYnkgdXNpbmcgZXZlbnQgYnVi
YmxpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFR5cGUgUmVjb3JkIGZy
b20gYEV2ZW50Q29uc3RhbnRzYC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGhhbmRsZXJCYXNlTmFt
ZSBFdmVudCBuYW1lIChlLmcuIFwiY2xpY2tcIikuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBlbGVt
ZW50IEVsZW1lbnQgb24gd2hpY2ggdG8gYXR0YWNoIGxpc3RlbmVyLlxuICAgKiBAcmV0dXJuIHs/
b2JqZWN0fSBBbiBvYmplY3Qgd2l0aCBhIHJlbW92ZSBmdW5jdGlvbiB3aGljaCB3aWxsIGZvcmNl
ZnVsbHlcbiAgICogICAgICAgICAgICAgICAgICByZW1vdmUgdGhlIGxpc3RlbmVyLlxuICAgKiBA
aW50ZXJuYWxcbiAgICovXG4gIHRyYXBCdWJibGVkRXZlbnQ6IGZ1bmN0aW9uICh0b3BMZXZlbFR5
cGUsIGhhbmRsZXJCYXNlTmFtZSwgZWxlbWVudCkge1xuICAgIGlmICghZWxlbWVudCkge1xuICAg
ICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBFdmVudExpc3RlbmVyLmxpc3Rlbihl
bGVtZW50LCBoYW5kbGVyQmFzZU5hbWUsIFJlYWN0RXZlbnRMaXN0ZW5lci5kaXNwYXRjaEV2ZW50
LmJpbmQobnVsbCwgdG9wTGV2ZWxUeXBlKSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFRyYXBzIGEg
dG9wLWxldmVsIGV2ZW50IGJ5IHVzaW5nIGV2ZW50IGNhcHR1cmluZy5cbiAgICpcbiAgICogQHBh
cmFtIHtzdHJpbmd9IHRvcExldmVsVHlwZSBSZWNvcmQgZnJvbSBgRXZlbnRDb25zdGFudHNgLlxu
ICAgKiBAcGFyYW0ge3N0cmluZ30gaGFuZGxlckJhc2VOYW1lIEV2ZW50IG5hbWUgKGUuZy4gXCJj
bGlja1wiKS5cbiAgICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnQgRWxlbWVudCBvbiB3aGljaCB0
byBhdHRhY2ggbGlzdGVuZXIuXG4gICAqIEByZXR1cm4gez9vYmplY3R9IEFuIG9iamVjdCB3aXRo
IGEgcmVtb3ZlIGZ1bmN0aW9uIHdoaWNoIHdpbGwgZm9yY2VmdWxseVxuICAgKiAgICAgICAgICAg
ICAgICAgIHJlbW92ZSB0aGUgbGlzdGVuZXIuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgdHJh
cENhcHR1cmVkRXZlbnQ6IGZ1bmN0aW9uICh0b3BMZXZlbFR5cGUsIGhhbmRsZXJCYXNlTmFtZSwg
ZWxlbWVudCkge1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAg
fVxuICAgIHJldHVybiBFdmVudExpc3RlbmVyLmNhcHR1cmUoZWxlbWVudCwgaGFuZGxlckJhc2VO
YW1lLCBSZWFjdEV2ZW50TGlzdGVuZXIuZGlzcGF0Y2hFdmVudC5iaW5kKG51bGwsIHRvcExldmVs
VHlwZSkpO1xuICB9LFxuXG4gIG1vbml0b3JTY3JvbGxWYWx1ZTogZnVuY3Rpb24gKHJlZnJlc2gp
IHtcbiAgICB2YXIgY2FsbGJhY2sgPSBzY3JvbGxWYWx1ZU1vbml0b3IuYmluZChudWxsLCByZWZy
ZXNoKTtcbiAgICBFdmVudExpc3RlbmVyLmxpc3Rlbih3aW5kb3csICdzY3JvbGwnLCBjYWxsYmFj
ayk7XG4gIH0sXG5cbiAgZGlzcGF0Y2hFdmVudDogZnVuY3Rpb24gKHRvcExldmVsVHlwZSwgbmF0
aXZlRXZlbnQpIHtcbiAgICBpZiAoIVJlYWN0RXZlbnRMaXN0ZW5lci5fZW5hYmxlZCkge1xuICAg
ICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBib29rS2VlcGluZyA9IFRvcExldmVsQ2FsbGJh
Y2tCb29rS2VlcGluZy5nZXRQb29sZWQodG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCk7XG4gICAg
dHJ5IHtcbiAgICAgIC8vIEV2ZW50IHF1ZXVlIGJlaW5nIHByb2Nlc3NlZCBpbiB0aGUgc2FtZSBj
eWNsZSBhbGxvd3NcbiAgICAgIC8vIGBwcmV2ZW50RGVmYXVsdGAuXG4gICAgICBSZWFjdFVwZGF0
ZXMuYmF0Y2hlZFVwZGF0ZXMoaGFuZGxlVG9wTGV2ZWxJbXBsLCBib29rS2VlcGluZyk7XG4gICAg
fSBmaW5hbGx5IHtcbiAgICAgIFRvcExldmVsQ2FsbGJhY2tCb29rS2VlcGluZy5yZWxlYXNlKGJv
b2tLZWVwaW5nKTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RFdmVu
dExpc3RlbmVyO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8v
IC4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RFdmVudExpc3RlbmVyLmpzXG4vLyBt
b2R1bGUgaWQgPSAxNjdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyoqXG4gKiBDb3B5cmlnaHQg
KGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
XG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxl
IGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0
b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVu
dCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGly
ZWN0b3J5LlxuICpcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipc
biAqIEdldHMgdGhlIHNjcm9sbCBwb3NpdGlvbiBvZiB0aGUgc3VwcGxpZWQgZWxlbWVudCBvciB3
aW5kb3cuXG4gKlxuICogVGhlIHJldHVybiB2YWx1ZXMgYXJlIHVuYm91bmRlZCwgdW5saWtlIGBn
ZXRTY3JvbGxQb3NpdGlvbmAuIFRoaXMgbWVhbnMgdGhleVxuICogbWF5IGJlIG5lZ2F0aXZlIG9y
IGV4Y2VlZCB0aGUgZWxlbWVudCBib3VuZGFyaWVzICh3aGljaCBpcyBwb3NzaWJsZSB1c2luZ1xu
ICogaW5lcnRpYWwgc2Nyb2xsaW5nKS5cbiAqXG4gKiBAcGFyYW0ge0RPTVdpbmRvd3xET01FbGVt
ZW50fSBzY3JvbGxhYmxlXG4gKiBAcmV0dXJuIHtvYmplY3R9IE1hcCB3aXRoIGB4YCBhbmQgYHlg
IGtleXMuXG4gKi9cblxuZnVuY3Rpb24gZ2V0VW5ib3VuZGVkU2Nyb2xsUG9zaXRpb24oc2Nyb2xs
YWJsZSkge1xuICBpZiAoc2Nyb2xsYWJsZS5XaW5kb3cgJiYgc2Nyb2xsYWJsZSBpbnN0YW5jZW9m
IHNjcm9sbGFibGUuV2luZG93KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHNjcm9sbGFibGUu
cGFnZVhPZmZzZXQgfHwgc2Nyb2xsYWJsZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xs
TGVmdCxcbiAgICAgIHk6IHNjcm9sbGFibGUucGFnZVlPZmZzZXQgfHwgc2Nyb2xsYWJsZS5kb2N1
bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xu
ICAgIHg6IHNjcm9sbGFibGUuc2Nyb2xsTGVmdCxcbiAgICB5OiBzY3JvbGxhYmxlLnNjcm9sbFRv
cFxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFVuYm91bmRlZFNjcm9sbFBvc2l0aW9u
O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9t
b2R1bGVzL2ZianMvbGliL2dldFVuYm91bmRlZFNjcm9sbFBvc2l0aW9uLmpzXG4vLyBtb2R1bGUg
aWQgPSAxNjhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1w
cmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBU
aGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBm
b3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhp
cyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBj
YW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4g
KlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIERPTVByb3BlcnR5ID0gcmVxdWlyZSgnLi9E
T01Qcm9wZXJ0eScpO1xudmFyIEV2ZW50UGx1Z2luSHViID0gcmVxdWlyZSgnLi9FdmVudFBsdWdp
bkh1YicpO1xudmFyIEV2ZW50UGx1Z2luVXRpbHMgPSByZXF1aXJlKCcuL0V2ZW50UGx1Z2luVXRp
bHMnKTtcbnZhciBSZWFjdENvbXBvbmVudEVudmlyb25tZW50ID0gcmVxdWlyZSgnLi9SZWFjdENv
bXBvbmVudEVudmlyb25tZW50Jyk7XG52YXIgUmVhY3RFbXB0eUNvbXBvbmVudCA9IHJlcXVpcmUo
Jy4vUmVhY3RFbXB0eUNvbXBvbmVudCcpO1xudmFyIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlciA9
IHJlcXVpcmUoJy4vUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyJyk7XG52YXIgUmVhY3RIb3N0Q29t
cG9uZW50ID0gcmVxdWlyZSgnLi9SZWFjdEhvc3RDb21wb25lbnQnKTtcbnZhciBSZWFjdFVwZGF0
ZXMgPSByZXF1aXJlKCcuL1JlYWN0VXBkYXRlcycpO1xuXG52YXIgUmVhY3RJbmplY3Rpb24gPSB7
XG4gIENvbXBvbmVudDogUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudC5pbmplY3Rpb24sXG4gIERP
TVByb3BlcnR5OiBET01Qcm9wZXJ0eS5pbmplY3Rpb24sXG4gIEVtcHR5Q29tcG9uZW50OiBSZWFj
dEVtcHR5Q29tcG9uZW50LmluamVjdGlvbixcbiAgRXZlbnRQbHVnaW5IdWI6IEV2ZW50UGx1Z2lu
SHViLmluamVjdGlvbixcbiAgRXZlbnRQbHVnaW5VdGlsczogRXZlbnRQbHVnaW5VdGlscy5pbmpl
Y3Rpb24sXG4gIEV2ZW50RW1pdHRlcjogUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLmluamVjdGlv
bixcbiAgSG9zdENvbXBvbmVudDogUmVhY3RIb3N0Q29tcG9uZW50LmluamVjdGlvbixcbiAgVXBk
YXRlczogUmVhY3RVcGRhdGVzLmluamVjdGlvblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFj
dEluamVjdGlvbjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4v
LyAuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0SW5qZWN0aW9uLmpzXG4vLyBtb2R1
bGUgaWQgPSAxNjlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAx
My1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4g
KiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5z
ZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2Yg
dGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0
cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3Rvcnku
XG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9hc3NpZ24gPSByZXF1aXJlKCdvYmpl
Y3QtYXNzaWduJyk7XG5cbnZhciBDYWxsYmFja1F1ZXVlID0gcmVxdWlyZSgnLi9DYWxsYmFja1F1
ZXVlJyk7XG52YXIgUG9vbGVkQ2xhc3MgPSByZXF1aXJlKCcuL1Bvb2xlZENsYXNzJyk7XG52YXIg
UmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnLi9SZWFjdEJyb3dzZXJFdmVudEVt
aXR0ZXInKTtcbnZhciBSZWFjdElucHV0U2VsZWN0aW9uID0gcmVxdWlyZSgnLi9SZWFjdElucHV0
U2VsZWN0aW9uJyk7XG52YXIgUmVhY3RJbnN0cnVtZW50YXRpb24gPSByZXF1aXJlKCcuL1JlYWN0
SW5zdHJ1bWVudGF0aW9uJyk7XG52YXIgVHJhbnNhY3Rpb24gPSByZXF1aXJlKCcuL1RyYW5zYWN0
aW9uJyk7XG52YXIgUmVhY3RVcGRhdGVRdWV1ZSA9IHJlcXVpcmUoJy4vUmVhY3RVcGRhdGVRdWV1
ZScpO1xuXG4vKipcbiAqIEVuc3VyZXMgdGhhdCwgd2hlbiBwb3NzaWJsZSwgdGhlIHNlbGVjdGlv
biByYW5nZSAoY3VycmVudGx5IHNlbGVjdGVkIHRleHRcbiAqIGlucHV0KSBpcyBub3QgZGlzdHVy
YmVkIGJ5IHBlcmZvcm1pbmcgdGhlIHRyYW5zYWN0aW9uLlxuICovXG52YXIgU0VMRUNUSU9OX1JF
U1RPUkFUSU9OID0ge1xuICAvKipcbiAgICogQHJldHVybiB7U2VsZWN0aW9ufSBTZWxlY3Rpb24g
aW5mb3JtYXRpb24uXG4gICAqL1xuICBpbml0aWFsaXplOiBSZWFjdElucHV0U2VsZWN0aW9uLmdl
dFNlbGVjdGlvbkluZm9ybWF0aW9uLFxuICAvKipcbiAgICogQHBhcmFtIHtTZWxlY3Rpb259IHNl
bCBTZWxlY3Rpb24gaW5mb3JtYXRpb24gcmV0dXJuZWQgZnJvbSBgaW5pdGlhbGl6ZWAuXG4gICAq
L1xuICBjbG9zZTogUmVhY3RJbnB1dFNlbGVjdGlvbi5yZXN0b3JlU2VsZWN0aW9uXG59O1xuXG4v
KipcbiAqIFN1cHByZXNzZXMgZXZlbnRzIChibHVyL2ZvY3VzKSB0aGF0IGNvdWxkIGJlIGluYWR2
ZXJ0ZW50bHkgZGlzcGF0Y2hlZCBkdWUgdG9cbiAqIGhpZ2ggbGV2ZWwgRE9NIG1hbmlwdWxhdGlv
bnMgKGxpa2UgdGVtcG9yYXJpbHkgcmVtb3ZpbmcgYSB0ZXh0IGlucHV0IGZyb20gdGhlXG4gKiBE
T00pLlxuICovXG52YXIgRVZFTlRfU1VQUFJFU1NJT04gPSB7XG4gIC8qKlxuICAgKiBAcmV0dXJu
IHtib29sZWFufSBUaGUgZW5hYmxlZCBzdGF0dXMgb2YgYFJlYWN0QnJvd3NlckV2ZW50RW1pdHRl
cmAgYmVmb3JlXG4gICAqIHRoZSByZWNvbmNpbGlhdGlvbi5cbiAgICovXG4gIGluaXRpYWxpemU6
IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgY3VycmVudGx5RW5hYmxlZCA9IFJlYWN0QnJvd3NlckV2
ZW50RW1pdHRlci5pc0VuYWJsZWQoKTtcbiAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuc2V0
RW5hYmxlZChmYWxzZSk7XG4gICAgcmV0dXJuIGN1cnJlbnRseUVuYWJsZWQ7XG4gIH0sXG5cbiAg
LyoqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gcHJldmlvdXNseUVuYWJsZWQgRW5hYmxlZCBzdGF0
dXMgb2ZcbiAgICogICBgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyYCBiZWZvcmUgdGhlIHJlY29u
Y2lsaWF0aW9uIG9jY3VycmVkLiBgY2xvc2VgXG4gICAqICAgcmVzdG9yZXMgdGhlIHByZXZpb3Vz
IHZhbHVlLlxuICAgKi9cbiAgY2xvc2U6IGZ1bmN0aW9uIChwcmV2aW91c2x5RW5hYmxlZCkge1xu
ICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5zZXRFbmFibGVkKHByZXZpb3VzbHlFbmFibGVk
KTtcbiAgfVxufTtcblxuLyoqXG4gKiBQcm92aWRlcyBhIHF1ZXVlIGZvciBjb2xsZWN0aW5nIGBj
b21wb25lbnREaWRNb3VudGAgYW5kXG4gKiBgY29tcG9uZW50RGlkVXBkYXRlYCBjYWxsYmFja3Mg
ZHVyaW5nIHRoZSB0cmFuc2FjdGlvbi5cbiAqL1xudmFyIE9OX0RPTV9SRUFEWV9RVUVVRUlORyA9
IHtcbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBpbnRlcm5hbCBgb25ET01SZWFkeWAgcXVl
dWUuXG4gICAqL1xuICBpbml0aWFsaXplOiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5yZWFjdE1v
dW50UmVhZHkucmVzZXQoKTtcbiAgfSxcblxuICAvKipcbiAgICogQWZ0ZXIgRE9NIGlzIGZsdXNo
ZWQsIGludm9rZSBhbGwgcmVnaXN0ZXJlZCBgb25ET01SZWFkeWAgY2FsbGJhY2tzLlxuICAgKi9c
biAgY2xvc2U6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnJlYWN0TW91bnRSZWFkeS5ub3RpZnlB
bGwoKTtcbiAgfVxufTtcblxuLyoqXG4gKiBFeGVjdXRlZCB3aXRoaW4gdGhlIHNjb3BlIG9mIHRo
ZSBgVHJhbnNhY3Rpb25gIGluc3RhbmNlLiBDb25zaWRlciB0aGVzZSBhc1xuICogYmVpbmcgbWVt
YmVyIG1ldGhvZHMsIGJ1dCB3aXRoIGFuIGltcGxpZWQgb3JkZXJpbmcgd2hpbGUgYmVpbmcgaXNv
bGF0ZWQgZnJvbVxuICogZWFjaCBvdGhlci5cbiAqL1xudmFyIFRSQU5TQUNUSU9OX1dSQVBQRVJT
ID0gW1NFTEVDVElPTl9SRVNUT1JBVElPTiwgRVZFTlRfU1VQUFJFU1NJT04sIE9OX0RPTV9SRUFE
WV9RVUVVRUlOR107XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24n
KSB7XG4gIFRSQU5TQUNUSU9OX1dSQVBQRVJTLnB1c2goe1xuICAgIGluaXRpYWxpemU6IFJlYWN0
SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vbkJlZ2luRmx1c2gsXG4gICAgY2xvc2U6IFJlYWN0
SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vbkVuZEZsdXNoXG4gIH0pO1xufVxuXG4vKipcbiAq
IEN1cnJlbnRseTpcbiAqIC0gVGhlIG9yZGVyIHRoYXQgdGhlc2UgYXJlIGxpc3RlZCBpbiB0aGUg
dHJhbnNhY3Rpb24gaXMgY3JpdGljYWw6XG4gKiAtIFN1cHByZXNzZXMgZXZlbnRzLlxuICogLSBS
ZXN0b3JlcyBzZWxlY3Rpb24gcmFuZ2UuXG4gKlxuICogRnV0dXJlOlxuICogLSBSZXN0b3JlIGRv
Y3VtZW50L292ZXJmbG93IHNjcm9sbCBwb3NpdGlvbnMgdGhhdCB3ZXJlIHVuaW50ZW50aW9uYWxs
eVxuICogICBtb2RpZmllZCB2aWEgRE9NIGluc2VydGlvbnMgYWJvdmUgdGhlIHRvcCB2aWV3cG9y
dCBib3VuZGFyeS5cbiAqIC0gSW1wbGVtZW50L2ludGVncmF0ZSB3aXRoIGN1c3RvbWl6ZWQgY29u
c3RyYWludCBiYXNlZCBsYXlvdXQgc3lzdGVtIGFuZCBrZWVwXG4gKiAgIHRyYWNrIG9mIHdoaWNo
IGRpbWVuc2lvbnMgbXVzdCBiZSByZW1lYXN1cmVkLlxuICpcbiAqIEBjbGFzcyBSZWFjdFJlY29u
Y2lsZVRyYW5zYWN0aW9uXG4gKi9cbmZ1bmN0aW9uIFJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24o
dXNlQ3JlYXRlRWxlbWVudCkge1xuICB0aGlzLnJlaW5pdGlhbGl6ZVRyYW5zYWN0aW9uKCk7XG4g
IC8vIE9ubHkgc2VydmVyLXNpZGUgcmVuZGVyaW5nIHJlYWxseSBuZWVkcyB0aGlzIG9wdGlvbiAo
c2VlXG4gIC8vIGBSZWFjdFNlcnZlclJlbmRlcmluZ2ApLCBidXQgc2VydmVyLXNpZGUgdXNlc1xu
ICAvLyBgUmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbmAgaW5zdGVhZC4gVGhpcyBvcHRp
b24gaXMgaGVyZSBzbyB0aGF0IGl0J3NcbiAgLy8gYWNjZXNzaWJsZSBhbmQgZGVmYXVsdHMgdG8g
ZmFsc2Ugd2hlbiBgUmVhY3RET01Db21wb25lbnRgIGFuZFxuICAvLyBgUmVhY3RET01UZXh0Q29t
cG9uZW50YCBjaGVja3MgaXQgaW4gYG1vdW50Q29tcG9uZW50YC5gXG4gIHRoaXMucmVuZGVyVG9T
dGF0aWNNYXJrdXAgPSBmYWxzZTtcbiAgdGhpcy5yZWFjdE1vdW50UmVhZHkgPSBDYWxsYmFja1F1
ZXVlLmdldFBvb2xlZChudWxsKTtcbiAgdGhpcy51c2VDcmVhdGVFbGVtZW50ID0gdXNlQ3JlYXRl
RWxlbWVudDtcbn1cblxudmFyIE1peGluID0ge1xuICAvKipcbiAgICogQHNlZSBUcmFuc2FjdGlv
blxuICAgKiBAYWJzdHJhY3RcbiAgICogQGZpbmFsXG4gICAqIEByZXR1cm4ge2FycmF5PG9iamVj
dD59IExpc3Qgb2Ygb3BlcmF0aW9uIHdyYXAgcHJvY2VkdXJlcy5cbiAgICogICBUT0RPOiBjb252
ZXJ0IHRvIGFycmF5PFRyYW5zYWN0aW9uV3JhcHBlcj5cbiAgICovXG4gIGdldFRyYW5zYWN0aW9u
V3JhcHBlcnM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gVFJBTlNBQ1RJT05fV1JBUFBFUlM7
XG4gIH0sXG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge29iamVjdH0gVGhlIHF1ZXVlIHRvIGNvbGxl
Y3QgYG9uRE9NUmVhZHlgIGNhbGxiYWNrcyB3aXRoLlxuICAgKi9cbiAgZ2V0UmVhY3RNb3VudFJl
YWR5OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhY3RNb3VudFJlYWR5O1xuICB9
LFxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtvYmplY3R9IFRoZSBxdWV1ZSB0byBjb2xsZWN0IFJl
YWN0IGFzeW5jIGV2ZW50cy5cbiAgICovXG4gIGdldFVwZGF0ZVF1ZXVlOiBmdW5jdGlvbiAoKSB7
XG4gICAgcmV0dXJuIFJlYWN0VXBkYXRlUXVldWU7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFNhdmUg
Y3VycmVudCB0cmFuc2FjdGlvbiBzdGF0ZSAtLSBpZiB0aGUgcmV0dXJuIHZhbHVlIGZyb20gdGhp
cyBtZXRob2QgaXNcbiAgICogcGFzc2VkIHRvIGByb2xsYmFja2AsIHRoZSB0cmFuc2FjdGlvbiB3
aWxsIGJlIHJlc2V0IHRvIHRoYXQgc3RhdGUuXG4gICAqL1xuICBjaGVja3BvaW50OiBmdW5jdGlv
biAoKSB7XG4gICAgLy8gcmVhY3RNb3VudFJlYWR5IGlzIHRoZSBvdXIgb25seSBzdGF0ZWZ1bCB3
cmFwcGVyXG4gICAgcmV0dXJuIHRoaXMucmVhY3RNb3VudFJlYWR5LmNoZWNrcG9pbnQoKTtcbiAg
fSxcblxuICByb2xsYmFjazogZnVuY3Rpb24gKGNoZWNrcG9pbnQpIHtcbiAgICB0aGlzLnJlYWN0
TW91bnRSZWFkeS5yb2xsYmFjayhjaGVja3BvaW50KTtcbiAgfSxcblxuICAvKipcbiAgICogYFBv
b2xlZENsYXNzYCBsb29rcyBmb3IgdGhpcywgYW5kIHdpbGwgaW52b2tlIHRoaXMgYmVmb3JlIGFs
bG93aW5nIHRoaXNcbiAgICogaW5zdGFuY2UgdG8gYmUgcmV1c2VkLlxuICAgKi9cbiAgZGVzdHJ1
Y3RvcjogZnVuY3Rpb24gKCkge1xuICAgIENhbGxiYWNrUXVldWUucmVsZWFzZSh0aGlzLnJlYWN0
TW91bnRSZWFkeSk7XG4gICAgdGhpcy5yZWFjdE1vdW50UmVhZHkgPSBudWxsO1xuICB9XG59O1xu
XG5fYXNzaWduKFJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24ucHJvdG90eXBlLCBUcmFuc2FjdGlv
biwgTWl4aW4pO1xuXG5Qb29sZWRDbGFzcy5hZGRQb29saW5nVG8oUmVhY3RSZWNvbmNpbGVUcmFu
c2FjdGlvbik7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbjtc
blxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9k
dWxlcy9yZWFjdC1kb20vbGliL1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24uanNcbi8vIG1vZHVs
ZSBpZCA9IDE3MFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipcbiAqIENvcHlyaWdodCAyMDEz
LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAq
IFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNl
IGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0
aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRz
IGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5c
biAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSBy
ZXF1aXJlKCdmYmpzL2xpYi9FeGVjdXRpb25FbnZpcm9ubWVudCcpO1xuXG52YXIgZ2V0Tm9kZUZv
ckNoYXJhY3Rlck9mZnNldCA9IHJlcXVpcmUoJy4vZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldCcp
O1xudmFyIGdldFRleHRDb250ZW50QWNjZXNzb3IgPSByZXF1aXJlKCcuL2dldFRleHRDb250ZW50
QWNjZXNzb3InKTtcblxuLyoqXG4gKiBXaGlsZSBgaXNDb2xsYXBzZWRgIGlzIGF2YWlsYWJsZSBv
biB0aGUgU2VsZWN0aW9uIG9iamVjdCBhbmQgYGNvbGxhcHNlZGBcbiAqIGlzIGF2YWlsYWJsZSBv
biB0aGUgUmFuZ2Ugb2JqZWN0LCBJRTExIHNvbWV0aW1lcyBnZXRzIHRoZW0gd3JvbmcuXG4gKiBJ
ZiB0aGUgYW5jaG9yL2ZvY3VzIG5vZGVzIGFuZCBvZmZzZXRzIGFyZSB0aGUgc2FtZSwgdGhlIHJh
bmdlIGlzIGNvbGxhcHNlZC5cbiAqL1xuZnVuY3Rpb24gaXNDb2xsYXBzZWQoYW5jaG9yTm9kZSwg
YW5jaG9yT2Zmc2V0LCBmb2N1c05vZGUsIGZvY3VzT2Zmc2V0KSB7XG4gIHJldHVybiBhbmNob3JO
b2RlID09PSBmb2N1c05vZGUgJiYgYW5jaG9yT2Zmc2V0ID09PSBmb2N1c09mZnNldDtcbn1cblxu
LyoqXG4gKiBHZXQgdGhlIGFwcHJvcHJpYXRlIGFuY2hvciBhbmQgZm9jdXMgbm9kZS9vZmZzZXQg
cGFpcnMgZm9yIElFLlxuICpcbiAqIFRoZSBjYXRjaCBoZXJlIGlzIHRoYXQgSUUncyBzZWxlY3Rp
b24gQVBJIGRvZXNuJ3QgcHJvdmlkZSBpbmZvcm1hdGlvblxuICogYWJvdXQgd2hldGhlciB0aGUg
c2VsZWN0aW9uIGlzIGZvcndhcmQgb3IgYmFja3dhcmQsIHNvIHdlIGhhdmUgdG9cbiAqIGJlaGF2
ZSBhcyB0aG91Z2ggaXQncyBhbHdheXMgZm9yd2FyZC5cbiAqXG4gKiBJRSB0ZXh0IGRpZmZlcnMg
ZnJvbSBtb2Rlcm4gc2VsZWN0aW9uIGluIHRoYXQgaXQgYmVoYXZlcyBhcyB0aG91Z2hcbiAqIGJs
b2NrIGVsZW1lbnRzIGVuZCB3aXRoIGEgbmV3IGxpbmUuIFRoaXMgbWVhbnMgY2hhcmFjdGVyIG9m
ZnNldHMgd2lsbFxuICogZGlmZmVyIGJldHdlZW4gdGhlIHR3byBBUElzLlxuICpcbiAqIEBwYXJh
bSB7RE9NRWxlbWVudH0gbm9kZVxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiBn
ZXRJRU9mZnNldHMobm9kZSkge1xuICB2YXIgc2VsZWN0aW9uID0gZG9jdW1lbnQuc2VsZWN0aW9u
O1xuICB2YXIgc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpO1xuICB2YXIg
c2VsZWN0ZWRMZW5ndGggPSBzZWxlY3RlZFJhbmdlLnRleHQubGVuZ3RoO1xuXG4gIC8vIER1cGxp
Y2F0ZSBzZWxlY3Rpb24gc28gd2UgY2FuIG1vdmUgcmFuZ2Ugd2l0aG91dCBicmVha2luZyB1c2Vy
IHNlbGVjdGlvbi5cbiAgdmFyIGZyb21TdGFydCA9IHNlbGVjdGVkUmFuZ2UuZHVwbGljYXRlKCk7
XG4gIGZyb21TdGFydC5tb3ZlVG9FbGVtZW50VGV4dChub2RlKTtcbiAgZnJvbVN0YXJ0LnNldEVu
ZFBvaW50KCdFbmRUb1N0YXJ0Jywgc2VsZWN0ZWRSYW5nZSk7XG5cbiAgdmFyIHN0YXJ0T2Zmc2V0
ID0gZnJvbVN0YXJ0LnRleHQubGVuZ3RoO1xuICB2YXIgZW5kT2Zmc2V0ID0gc3RhcnRPZmZzZXQg
KyBzZWxlY3RlZExlbmd0aDtcblxuICByZXR1cm4ge1xuICAgIHN0YXJ0OiBzdGFydE9mZnNldCxc
biAgICBlbmQ6IGVuZE9mZnNldFxuICB9O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RE9NRWxlbWVu
dH0gbm9kZVxuICogQHJldHVybiB7P29iamVjdH1cbiAqL1xuZnVuY3Rpb24gZ2V0TW9kZXJuT2Zm
c2V0cyhub2RlKSB7XG4gIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uICYmIHdp
bmRvdy5nZXRTZWxlY3Rpb24oKTtcblxuICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFu
Z2VDb3VudCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIGFuY2hvck5v
ZGUgPSBzZWxlY3Rpb24uYW5jaG9yTm9kZTtcbiAgdmFyIGFuY2hvck9mZnNldCA9IHNlbGVjdGlv
bi5hbmNob3JPZmZzZXQ7XG4gIHZhciBmb2N1c05vZGUgPSBzZWxlY3Rpb24uZm9jdXNOb2RlO1xu
ICB2YXIgZm9jdXNPZmZzZXQgPSBzZWxlY3Rpb24uZm9jdXNPZmZzZXQ7XG5cbiAgdmFyIGN1cnJl
bnRSYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xuXG4gIC8vIEluIEZpcmVmb3gsIHJh
bmdlLnN0YXJ0Q29udGFpbmVyIGFuZCByYW5nZS5lbmRDb250YWluZXIgY2FuIGJlIFwiYW5vbnlt
b3VzXG4gIC8vIGRpdnNcIiwgZS5nLiB0aGUgdXAvZG93biBidXR0b25zIG9uIGFuIDxpbnB1dCB0
eXBlPVwibnVtYmVyXCI+LiBBbm9ueW1vdXNcbiAgLy8gZGl2cyBkbyBub3Qgc2VlbSB0byBleHBv
c2UgcHJvcGVydGllcywgdHJpZ2dlcmluZyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcbiAgLy8gZXJy
b3JcIiBpZiBhbnkgb2YgaXRzIHByb3BlcnRpZXMgYXJlIGFjY2Vzc2VkLiBUaGUgb25seSBzZWVt
aW5nbHkgcG9zc2libGVcbiAgLy8gd2F5IHRvIGF2b2lkIGVycm9yaW5nIGlzIHRvIGFjY2VzcyBh
IHByb3BlcnR5IHRoYXQgdHlwaWNhbGx5IHdvcmtzIGZvclxuICAvLyBub24tYW5vbnltb3VzIGRp
dnMgYW5kIGNhdGNoIGFueSBlcnJvciB0aGF0IG1heSBvdGhlcndpc2UgYXJpc2UuIFNlZVxuICAv
LyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg0MjdcbiAg
dHJ5IHtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtZXhwcmVzc2lvbnMgKi9cbiAg
ICBjdXJyZW50UmFuZ2Uuc3RhcnRDb250YWluZXIubm9kZVR5cGU7XG4gICAgY3VycmVudFJhbmdl
LmVuZENvbnRhaW5lci5ub2RlVHlwZTtcbiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLXVudXNlZC1l
eHByZXNzaW9ucyAqL1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxu
ICAvLyBJZiB0aGUgbm9kZSBhbmQgb2Zmc2V0IHZhbHVlcyBhcmUgdGhlIHNhbWUsIHRoZSBzZWxl
Y3Rpb24gaXMgY29sbGFwc2VkLlxuICAvLyBgU2VsZWN0aW9uLmlzQ29sbGFwc2VkYCBpcyBhdmFp
bGFibGUgbmF0aXZlbHksIGJ1dCBJRSBzb21ldGltZXMgZ2V0c1xuICAvLyB0aGlzIHZhbHVlIHdy
b25nLlxuICB2YXIgaXNTZWxlY3Rpb25Db2xsYXBzZWQgPSBpc0NvbGxhcHNlZChzZWxlY3Rpb24u
YW5jaG9yTm9kZSwgc2VsZWN0aW9uLmFuY2hvck9mZnNldCwgc2VsZWN0aW9uLmZvY3VzTm9kZSwg
c2VsZWN0aW9uLmZvY3VzT2Zmc2V0KTtcblxuICB2YXIgcmFuZ2VMZW5ndGggPSBpc1NlbGVjdGlv
bkNvbGxhcHNlZCA/IDAgOiBjdXJyZW50UmFuZ2UudG9TdHJpbmcoKS5sZW5ndGg7XG5cbiAgdmFy
IHRlbXBSYW5nZSA9IGN1cnJlbnRSYW5nZS5jbG9uZVJhbmdlKCk7XG4gIHRlbXBSYW5nZS5zZWxl
Y3ROb2RlQ29udGVudHMobm9kZSk7XG4gIHRlbXBSYW5nZS5zZXRFbmQoY3VycmVudFJhbmdlLnN0
YXJ0Q29udGFpbmVyLCBjdXJyZW50UmFuZ2Uuc3RhcnRPZmZzZXQpO1xuXG4gIHZhciBpc1RlbXBS
YW5nZUNvbGxhcHNlZCA9IGlzQ29sbGFwc2VkKHRlbXBSYW5nZS5zdGFydENvbnRhaW5lciwgdGVt
cFJhbmdlLnN0YXJ0T2Zmc2V0LCB0ZW1wUmFuZ2UuZW5kQ29udGFpbmVyLCB0ZW1wUmFuZ2UuZW5k
T2Zmc2V0KTtcblxuICB2YXIgc3RhcnQgPSBpc1RlbXBSYW5nZUNvbGxhcHNlZCA/IDAgOiB0ZW1w
UmFuZ2UudG9TdHJpbmcoKS5sZW5ndGg7XG4gIHZhciBlbmQgPSBzdGFydCArIHJhbmdlTGVuZ3Ro
O1xuXG4gIC8vIERldGVjdCB3aGV0aGVyIHRoZSBzZWxlY3Rpb24gaXMgYmFja3dhcmQuXG4gIHZh
ciBkZXRlY3Rpb25SYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gIGRldGVjdGlvblJh
bmdlLnNldFN0YXJ0KGFuY2hvck5vZGUsIGFuY2hvck9mZnNldCk7XG4gIGRldGVjdGlvblJhbmdl
LnNldEVuZChmb2N1c05vZGUsIGZvY3VzT2Zmc2V0KTtcbiAgdmFyIGlzQmFja3dhcmQgPSBkZXRl
Y3Rpb25SYW5nZS5jb2xsYXBzZWQ7XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydDogaXNCYWNrd2Fy
ZCA/IGVuZCA6IHN0YXJ0LFxuICAgIGVuZDogaXNCYWNrd2FyZCA/IHN0YXJ0IDogZW5kXG4gIH07
XG59XG5cbi8qKlxuICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSBub2RlXG4gKiBA
cGFyYW0ge29iamVjdH0gb2Zmc2V0c1xuICovXG5mdW5jdGlvbiBzZXRJRU9mZnNldHMobm9kZSwg
b2Zmc2V0cykge1xuICB2YXIgcmFuZ2UgPSBkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2Uo
KS5kdXBsaWNhdGUoKTtcbiAgdmFyIHN0YXJ0LCBlbmQ7XG5cbiAgaWYgKG9mZnNldHMuZW5kID09
PSB1bmRlZmluZWQpIHtcbiAgICBzdGFydCA9IG9mZnNldHMuc3RhcnQ7XG4gICAgZW5kID0gc3Rh
cnQ7XG4gIH0gZWxzZSBpZiAob2Zmc2V0cy5zdGFydCA+IG9mZnNldHMuZW5kKSB7XG4gICAgc3Rh
cnQgPSBvZmZzZXRzLmVuZDtcbiAgICBlbmQgPSBvZmZzZXRzLnN0YXJ0O1xuICB9IGVsc2Uge1xu
ICAgIHN0YXJ0ID0gb2Zmc2V0cy5zdGFydDtcbiAgICBlbmQgPSBvZmZzZXRzLmVuZDtcbiAgfVxu
XG4gIHJhbmdlLm1vdmVUb0VsZW1lbnRUZXh0KG5vZGUpO1xuICByYW5nZS5tb3ZlU3RhcnQoJ2No
YXJhY3RlcicsIHN0YXJ0KTtcbiAgcmFuZ2Uuc2V0RW5kUG9pbnQoJ0VuZFRvU3RhcnQnLCByYW5n
ZSk7XG4gIHJhbmdlLm1vdmVFbmQoJ2NoYXJhY3RlcicsIGVuZCAtIHN0YXJ0KTtcbiAgcmFuZ2Uu
c2VsZWN0KCk7XG59XG5cbi8qKlxuICogSW4gbW9kZXJuIG5vbi1JRSBicm93c2Vycywgd2UgY2Fu
IHN1cHBvcnQgYm90aCBmb3J3YXJkIGFuZCBiYWNrd2FyZFxuICogc2VsZWN0aW9ucy5cbiAqXG4g
KiBOb3RlOiBJRTEwKyBzdXBwb3J0cyB0aGUgU2VsZWN0aW9uIG9iamVjdCwgYnV0IGl0IGRvZXMg
bm90IHN1cHBvcnRcbiAqIHRoZSBgZXh0ZW5kYCBtZXRob2QsIHdoaWNoIG1lYW5zIHRoYXQgZXZl
biBpbiBtb2Rlcm4gSUUsIGl0J3Mgbm90IHBvc3NpYmxlXG4gKiB0byBwcm9ncmFtbWF0aWNhbGx5
IGNyZWF0ZSBhIGJhY2t3YXJkIHNlbGVjdGlvbi4gVGh1cywgZm9yIGFsbCBJRVxuICogdmVyc2lv
bnMsIHdlIHVzZSB0aGUgb2xkIElFIEFQSSB0byBjcmVhdGUgb3VyIHNlbGVjdGlvbnMuXG4gKlxu
ICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSBub2RlXG4gKiBAcGFyYW0ge29iamVj
dH0gb2Zmc2V0c1xuICovXG5mdW5jdGlvbiBzZXRNb2Rlcm5PZmZzZXRzKG5vZGUsIG9mZnNldHMp
IHtcbiAgaWYgKCF3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAg
dmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgdmFyIGxlbmd0aCA9IG5v
ZGVbZ2V0VGV4dENvbnRlbnRBY2Nlc3NvcigpXS5sZW5ndGg7XG4gIHZhciBzdGFydCA9IE1hdGgu
bWluKG9mZnNldHMuc3RhcnQsIGxlbmd0aCk7XG4gIHZhciBlbmQgPSBvZmZzZXRzLmVuZCA9PT0g
dW5kZWZpbmVkID8gc3RhcnQgOiBNYXRoLm1pbihvZmZzZXRzLmVuZCwgbGVuZ3RoKTtcblxuICAv
LyBJRSAxMSB1c2VzIG1vZGVybiBzZWxlY3Rpb24sIGJ1dCBkb2Vzbid0IHN1cHBvcnQgdGhlIGV4
dGVuZCBtZXRob2QuXG4gIC8vIEZsaXAgYmFja3dhcmQgc2VsZWN0aW9ucywgc28gd2UgY2FuIHNl
dCB3aXRoIGEgc2luZ2xlIHJhbmdlLlxuICBpZiAoIXNlbGVjdGlvbi5leHRlbmQgJiYgc3RhcnQg
PiBlbmQpIHtcbiAgICB2YXIgdGVtcCA9IGVuZDtcbiAgICBlbmQgPSBzdGFydDtcbiAgICBzdGFy
dCA9IHRlbXA7XG4gIH1cblxuICB2YXIgc3RhcnRNYXJrZXIgPSBnZXROb2RlRm9yQ2hhcmFjdGVy
T2Zmc2V0KG5vZGUsIHN0YXJ0KTtcbiAgdmFyIGVuZE1hcmtlciA9IGdldE5vZGVGb3JDaGFyYWN0
ZXJPZmZzZXQobm9kZSwgZW5kKTtcblxuICBpZiAoc3RhcnRNYXJrZXIgJiYgZW5kTWFya2VyKSB7
XG4gICAgdmFyIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICByYW5nZS5zZXRT
dGFydChzdGFydE1hcmtlci5ub2RlLCBzdGFydE1hcmtlci5vZmZzZXQpO1xuICAgIHNlbGVjdGlv
bi5yZW1vdmVBbGxSYW5nZXMoKTtcblxuICAgIGlmIChzdGFydCA+IGVuZCkge1xuICAgICAgc2Vs
ZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcbiAgICAgIHNlbGVjdGlvbi5leHRlbmQoZW5kTWFya2Vy
Lm5vZGUsIGVuZE1hcmtlci5vZmZzZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByYW5nZS5zZXRF
bmQoZW5kTWFya2VyLm5vZGUsIGVuZE1hcmtlci5vZmZzZXQpO1xuICAgICAgc2VsZWN0aW9uLmFk
ZFJhbmdlKHJhbmdlKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIHVzZUlFT2Zmc2V0cyA9IEV4ZWN1
dGlvbkVudmlyb25tZW50LmNhblVzZURPTSAmJiAnc2VsZWN0aW9uJyBpbiBkb2N1bWVudCAmJiAh
KCdnZXRTZWxlY3Rpb24nIGluIHdpbmRvdyk7XG5cbnZhciBSZWFjdERPTVNlbGVjdGlvbiA9IHtc
biAgLyoqXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICAgKi9cbiAgZ2V0T2Zmc2V0
czogdXNlSUVPZmZzZXRzID8gZ2V0SUVPZmZzZXRzIDogZ2V0TW9kZXJuT2Zmc2V0cyxcblxuICAv
KipcbiAgICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSBub2RlXG4gICAqIEBwYXJh
bSB7b2JqZWN0fSBvZmZzZXRzXG4gICAqL1xuICBzZXRPZmZzZXRzOiB1c2VJRU9mZnNldHMgPyBz
ZXRJRU9mZnNldHMgOiBzZXRNb2Rlcm5PZmZzZXRzXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJl
YWN0RE9NU2VsZWN0aW9uO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09U
RVJcbi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RET01TZWxlY3Rpb24uanNc
bi8vIG1vZHVsZSBpZCA9IDE3MVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipcbiAqIENvcHly
aWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVk
LlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHls
ZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVj
dG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRl
bnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRp
cmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEdpdmVuIGFueSBu
b2RlIHJldHVybiB0aGUgZmlyc3QgbGVhZiBub2RlIHdpdGhvdXQgY2hpbGRyZW4uXG4gKlxuICog
QHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSBub2RlXG4gKiBAcmV0dXJuIHtET01FbGVt
ZW50fERPTVRleHROb2RlfVxuICovXG5cbmZ1bmN0aW9uIGdldExlYWZOb2RlKG5vZGUpIHtcbiAg
d2hpbGUgKG5vZGUgJiYgbm9kZS5maXJzdENoaWxkKSB7XG4gICAgbm9kZSA9IG5vZGUuZmlyc3RD
aGlsZDtcbiAgfVxuICByZXR1cm4gbm9kZTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIG5leHQgc2li
bGluZyB3aXRoaW4gYSBjb250YWluZXIuIFRoaXMgd2lsbCB3YWxrIHVwIHRoZVxuICogRE9NIGlm
IGEgbm9kZSdzIHNpYmxpbmdzIGhhdmUgYmVlbiBleGhhdXN0ZWQuXG4gKlxuICogQHBhcmFtIHtE
T01FbGVtZW50fERPTVRleHROb2RlfSBub2RlXG4gKiBAcmV0dXJuIHs/RE9NRWxlbWVudHxET01U
ZXh0Tm9kZX1cbiAqL1xuZnVuY3Rpb24gZ2V0U2libGluZ05vZGUobm9kZSkge1xuICB3aGlsZSAo
bm9kZSkge1xuICAgIGlmIChub2RlLm5leHRTaWJsaW5nKSB7XG4gICAgICByZXR1cm4gbm9kZS5u
ZXh0U2libGluZztcbiAgICB9XG4gICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgfVxufVxu
XG4vKipcbiAqIEdldCBvYmplY3QgZGVzY3JpYmluZyB0aGUgbm9kZXMgd2hpY2ggY29udGFpbiBj
aGFyYWN0ZXJzIGF0IG9mZnNldC5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5v
ZGV9IHJvb3RcbiAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAqIEByZXR1cm4gez9vYmplY3R9
XG4gKi9cbmZ1bmN0aW9uIGdldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQocm9vdCwgb2Zmc2V0KSB7
XG4gIHZhciBub2RlID0gZ2V0TGVhZk5vZGUocm9vdCk7XG4gIHZhciBub2RlU3RhcnQgPSAwO1xu
ICB2YXIgbm9kZUVuZCA9IDA7XG5cbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBpZiAobm9kZS5ub2Rl
VHlwZSA9PT0gMykge1xuICAgICAgbm9kZUVuZCA9IG5vZGVTdGFydCArIG5vZGUudGV4dENvbnRl
bnQubGVuZ3RoO1xuXG4gICAgICBpZiAobm9kZVN0YXJ0IDw9IG9mZnNldCAmJiBub2RlRW5kID49
IG9mZnNldCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAg
ICAgICAgb2Zmc2V0OiBvZmZzZXQgLSBub2RlU3RhcnRcbiAgICAgICAgfTtcbiAgICAgIH1cblxu
ICAgICAgbm9kZVN0YXJ0ID0gbm9kZUVuZDtcbiAgICB9XG5cbiAgICBub2RlID0gZ2V0TGVhZk5v
ZGUoZ2V0U2libGluZ05vZGUobm9kZSkpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0
Tm9kZUZvckNoYXJhY3Rlck9mZnNldDtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBB
Q0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL2dldE5vZGVGb3JDaGFy
YWN0ZXJPZmZzZXQuanNcbi8vIG1vZHVsZSBpZCA9IDE3MlxuLy8gbW9kdWxlIGNodW5rcyA9IDAi
LCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZh
Y2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNl
IGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRo
ZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0
cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3Vu
ZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAq
L1xuXG52YXIgaXNUZXh0Tm9kZSA9IHJlcXVpcmUoJy4vaXNUZXh0Tm9kZScpO1xuXG4vKmVzbGlu
dC1kaXNhYmxlIG5vLWJpdHdpc2UgKi9cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBnaXZlbiBET00g
bm9kZSBjb250YWlucyBvciBpcyBhbm90aGVyIERPTSBub2RlLlxuICovXG5mdW5jdGlvbiBjb250
YWluc05vZGUob3V0ZXJOb2RlLCBpbm5lck5vZGUpIHtcbiAgaWYgKCFvdXRlck5vZGUgfHwgIWlu
bmVyTm9kZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIGlmIChvdXRlck5vZGUgPT09
IGlubmVyTm9kZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGlzVGV4dE5vZGUo
b3V0ZXJOb2RlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIGlmIChpc1RleHROb2Rl
KGlubmVyTm9kZSkpIHtcbiAgICByZXR1cm4gY29udGFpbnNOb2RlKG91dGVyTm9kZSwgaW5uZXJO
b2RlLnBhcmVudE5vZGUpO1xuICB9IGVsc2UgaWYgKCdjb250YWlucycgaW4gb3V0ZXJOb2RlKSB7
XG4gICAgcmV0dXJuIG91dGVyTm9kZS5jb250YWlucyhpbm5lck5vZGUpO1xuICB9IGVsc2UgaWYg
KG91dGVyTm9kZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikge1xuICAgIHJldHVybiAhIShvdXRl
ck5vZGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24oaW5uZXJOb2RlKSAmIDE2KTtcbiAgfSBlbHNl
IHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb250YWlu
c05vZGU7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9u
b2RlX21vZHVsZXMvZmJqcy9saWIvY29udGFpbnNOb2RlLmpzXG4vLyBtb2R1bGUgaWQgPSAxNzNc
bi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENvcHlyaWdo
dCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5
bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJl
Y3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0
ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBk
aXJlY3RvcnkuXG4gKlxuICogQHR5cGVjaGVja3NcbiAqL1xuXG52YXIgaXNOb2RlID0gcmVxdWly
ZSgnLi9pc05vZGUnKTtcblxuLyoqXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgb2JqZWN0IHRv
IGNoZWNrLlxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgdGhlIG9iamVjdCBp
cyBhIERPTSB0ZXh0IG5vZGUuXG4gKi9cbmZ1bmN0aW9uIGlzVGV4dE5vZGUob2JqZWN0KSB7XG4g
IHJldHVybiBpc05vZGUob2JqZWN0KSAmJiBvYmplY3Qubm9kZVR5cGUgPT0gMztcbn1cblxubW9k
dWxlLmV4cG9ydHMgPSBpc1RleHROb2RlO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VC
UEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2ZianMvbGliL2lzVGV4dE5vZGUuanNcbi8v
IG1vZHVsZSBpZCA9IDE3NFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG5c
bi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBB
bGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQg
dW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxl
IGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFs
IGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBm
aWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAdHlwZWNoZWNrc1xuICovXG5cbi8q
KlxuICogQHBhcmFtIHsqfSBvYmplY3QgVGhlIG9iamVjdCB0byBjaGVjay5cbiAqIEByZXR1cm4g
e2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHRoZSBvYmplY3QgaXMgYSBET00gbm9kZS5cbiAqL1xu
ZnVuY3Rpb24gaXNOb2RlKG9iamVjdCkge1xuICB2YXIgZG9jID0gb2JqZWN0ID8gb2JqZWN0Lm93
bmVyRG9jdW1lbnQgfHwgb2JqZWN0IDogZG9jdW1lbnQ7XG4gIHZhciBkZWZhdWx0VmlldyA9IGRv
Yy5kZWZhdWx0VmlldyB8fCB3aW5kb3c7XG4gIHJldHVybiAhIShvYmplY3QgJiYgKHR5cGVvZiBk
ZWZhdWx0Vmlldy5Ob2RlID09PSAnZnVuY3Rpb24nID8gb2JqZWN0IGluc3RhbmNlb2YgZGVmYXVs
dFZpZXcuTm9kZSA6IHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIHR5cGVvZiBvYmplY3Qu
bm9kZVR5cGUgPT09ICdudW1iZXInICYmIHR5cGVvZiBvYmplY3Qubm9kZU5hbWUgPT09ICdzdHJp
bmcnKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNOb2RlO1xuXG5cbi8vLy8vLy8vLy8vLy8v
Ly8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2ZianMvbGliL2lzTm9k
ZS5qc1xuLy8gbW9kdWxlIGlkID0gMTc1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qKlxuICog
Q29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNE
LXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qg
ZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9m
IHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNh
bWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBOUyA9IHtcbiAg
eGxpbms6ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyxcbiAgeG1sOiAnaHR0cDovL3d3
dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlJ1xufTtcblxuLy8gV2UgdXNlIGF0dHJpYnV0ZXMg
Zm9yIGV2ZXJ5dGhpbmcgU1ZHIHNvIGxldCdzIGF2b2lkIHNvbWUgZHVwbGljYXRpb24gYW5kIHJ1
blxuLy8gY29kZSBpbnN0ZWFkLlxuLy8gVGhlIGZvbGxvd2luZyBhcmUgYWxsIHNwZWNpZmllZCBp
biB0aGUgSFRNTCBjb25maWcgYWxyZWFkeSBzbyB3ZSBleGNsdWRlIGhlcmUuXG4vLyAtIGNsYXNz
IChhcyBjbGFzc05hbWUpXG4vLyAtIGNvbG9yXG4vLyAtIGhlaWdodFxuLy8gLSBpZFxuLy8gLSBs
YW5nXG4vLyAtIG1heFxuLy8gLSBtZWRpYVxuLy8gLSBtZXRob2Rcbi8vIC0gbWluXG4vLyAtIG5h
bWVcbi8vIC0gc3R5bGVcbi8vIC0gdGFyZ2V0XG4vLyAtIHR5cGVcbi8vIC0gd2lkdGhcbnZhciBB
VFRSUyA9IHtcbiAgYWNjZW50SGVpZ2h0OiAnYWNjZW50LWhlaWdodCcsXG4gIGFjY3VtdWxhdGU6
IDAsXG4gIGFkZGl0aXZlOiAwLFxuICBhbGlnbm1lbnRCYXNlbGluZTogJ2FsaWdubWVudC1iYXNl
bGluZScsXG4gIGFsbG93UmVvcmRlcjogJ2FsbG93UmVvcmRlcicsXG4gIGFscGhhYmV0aWM6IDAs
XG4gIGFtcGxpdHVkZTogMCxcbiAgYXJhYmljRm9ybTogJ2FyYWJpYy1mb3JtJyxcbiAgYXNjZW50
OiAwLFxuICBhdHRyaWJ1dGVOYW1lOiAnYXR0cmlidXRlTmFtZScsXG4gIGF0dHJpYnV0ZVR5cGU6
ICdhdHRyaWJ1dGVUeXBlJyxcbiAgYXV0b1JldmVyc2U6ICdhdXRvUmV2ZXJzZScsXG4gIGF6aW11
dGg6IDAsXG4gIGJhc2VGcmVxdWVuY3k6ICdiYXNlRnJlcXVlbmN5JyxcbiAgYmFzZVByb2ZpbGU6
ICdiYXNlUHJvZmlsZScsXG4gIGJhc2VsaW5lU2hpZnQ6ICdiYXNlbGluZS1zaGlmdCcsXG4gIGJi
b3g6IDAsXG4gIGJlZ2luOiAwLFxuICBiaWFzOiAwLFxuICBieTogMCxcbiAgY2FsY01vZGU6ICdj
YWxjTW9kZScsXG4gIGNhcEhlaWdodDogJ2NhcC1oZWlnaHQnLFxuICBjbGlwOiAwLFxuICBjbGlw
UGF0aDogJ2NsaXAtcGF0aCcsXG4gIGNsaXBSdWxlOiAnY2xpcC1ydWxlJyxcbiAgY2xpcFBhdGhV
bml0czogJ2NsaXBQYXRoVW5pdHMnLFxuICBjb2xvckludGVycG9sYXRpb246ICdjb2xvci1pbnRl
cnBvbGF0aW9uJyxcbiAgY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczogJ2NvbG9yLWludGVycG9s
YXRpb24tZmlsdGVycycsXG4gIGNvbG9yUHJvZmlsZTogJ2NvbG9yLXByb2ZpbGUnLFxuICBjb2xv
clJlbmRlcmluZzogJ2NvbG9yLXJlbmRlcmluZycsXG4gIGNvbnRlbnRTY3JpcHRUeXBlOiAnY29u
dGVudFNjcmlwdFR5cGUnLFxuICBjb250ZW50U3R5bGVUeXBlOiAnY29udGVudFN0eWxlVHlwZScs
XG4gIGN1cnNvcjogMCxcbiAgY3g6IDAsXG4gIGN5OiAwLFxuICBkOiAwLFxuICBkZWNlbGVyYXRl
OiAwLFxuICBkZXNjZW50OiAwLFxuICBkaWZmdXNlQ29uc3RhbnQ6ICdkaWZmdXNlQ29uc3RhbnQn
LFxuICBkaXJlY3Rpb246IDAsXG4gIGRpc3BsYXk6IDAsXG4gIGRpdmlzb3I6IDAsXG4gIGRvbWlu
YW50QmFzZWxpbmU6ICdkb21pbmFudC1iYXNlbGluZScsXG4gIGR1cjogMCxcbiAgZHg6IDAsXG4g
IGR5OiAwLFxuICBlZGdlTW9kZTogJ2VkZ2VNb2RlJyxcbiAgZWxldmF0aW9uOiAwLFxuICBlbmFi
bGVCYWNrZ3JvdW5kOiAnZW5hYmxlLWJhY2tncm91bmQnLFxuICBlbmQ6IDAsXG4gIGV4cG9uZW50
OiAwLFxuICBleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOiAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZCcsXG4gIGZpbGw6IDAsXG4gIGZpbGxPcGFjaXR5OiAnZmlsbC1vcGFjaXR5JyxcbiAgZmls
bFJ1bGU6ICdmaWxsLXJ1bGUnLFxuICBmaWx0ZXI6IDAsXG4gIGZpbHRlclJlczogJ2ZpbHRlclJl
cycsXG4gIGZpbHRlclVuaXRzOiAnZmlsdGVyVW5pdHMnLFxuICBmbG9vZENvbG9yOiAnZmxvb2Qt
Y29sb3InLFxuICBmbG9vZE9wYWNpdHk6ICdmbG9vZC1vcGFjaXR5JyxcbiAgZm9jdXNhYmxlOiAw
LFxuICBmb250RmFtaWx5OiAnZm9udC1mYW1pbHknLFxuICBmb250U2l6ZTogJ2ZvbnQtc2l6ZScs
XG4gIGZvbnRTaXplQWRqdXN0OiAnZm9udC1zaXplLWFkanVzdCcsXG4gIGZvbnRTdHJldGNoOiAn
Zm9udC1zdHJldGNoJyxcbiAgZm9udFN0eWxlOiAnZm9udC1zdHlsZScsXG4gIGZvbnRWYXJpYW50
OiAnZm9udC12YXJpYW50JyxcbiAgZm9udFdlaWdodDogJ2ZvbnQtd2VpZ2h0JyxcbiAgZm9ybWF0
OiAwLFxuICBmcm9tOiAwLFxuICBmeDogMCxcbiAgZnk6IDAsXG4gIGcxOiAwLFxuICBnMjogMCxc
biAgZ2x5cGhOYW1lOiAnZ2x5cGgtbmFtZScsXG4gIGdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFs
OiAnZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCcsXG4gIGdseXBoT3JpZW50YXRpb25WZXJ0
aWNhbDogJ2dseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsJyxcbiAgZ2x5cGhSZWY6ICdnbHlwaFJl
ZicsXG4gIGdyYWRpZW50VHJhbnNmb3JtOiAnZ3JhZGllbnRUcmFuc2Zvcm0nLFxuICBncmFkaWVu
dFVuaXRzOiAnZ3JhZGllbnRVbml0cycsXG4gIGhhbmdpbmc6IDAsXG4gIGhvcml6QWR2WDogJ2hv
cml6LWFkdi14JyxcbiAgaG9yaXpPcmlnaW5YOiAnaG9yaXotb3JpZ2luLXgnLFxuICBpZGVvZ3Jh
cGhpYzogMCxcbiAgaW1hZ2VSZW5kZXJpbmc6ICdpbWFnZS1yZW5kZXJpbmcnLFxuICAnaW4nOiAw
LFxuICBpbjI6IDAsXG4gIGludGVyY2VwdDogMCxcbiAgazogMCxcbiAgazE6IDAsXG4gIGsyOiAw
LFxuICBrMzogMCxcbiAgazQ6IDAsXG4gIGtlcm5lbE1hdHJpeDogJ2tlcm5lbE1hdHJpeCcsXG4g
IGtlcm5lbFVuaXRMZW5ndGg6ICdrZXJuZWxVbml0TGVuZ3RoJyxcbiAga2VybmluZzogMCxcbiAg
a2V5UG9pbnRzOiAna2V5UG9pbnRzJyxcbiAga2V5U3BsaW5lczogJ2tleVNwbGluZXMnLFxuICBr
ZXlUaW1lczogJ2tleVRpbWVzJyxcbiAgbGVuZ3RoQWRqdXN0OiAnbGVuZ3RoQWRqdXN0JyxcbiAg
bGV0dGVyU3BhY2luZzogJ2xldHRlci1zcGFjaW5nJyxcbiAgbGlnaHRpbmdDb2xvcjogJ2xpZ2h0
aW5nLWNvbG9yJyxcbiAgbGltaXRpbmdDb25lQW5nbGU6ICdsaW1pdGluZ0NvbmVBbmdsZScsXG4g
IGxvY2FsOiAwLFxuICBtYXJrZXJFbmQ6ICdtYXJrZXItZW5kJyxcbiAgbWFya2VyTWlkOiAnbWFy
a2VyLW1pZCcsXG4gIG1hcmtlclN0YXJ0OiAnbWFya2VyLXN0YXJ0JyxcbiAgbWFya2VySGVpZ2h0
OiAnbWFya2VySGVpZ2h0JyxcbiAgbWFya2VyVW5pdHM6ICdtYXJrZXJVbml0cycsXG4gIG1hcmtl
cldpZHRoOiAnbWFya2VyV2lkdGgnLFxuICBtYXNrOiAwLFxuICBtYXNrQ29udGVudFVuaXRzOiAn
bWFza0NvbnRlbnRVbml0cycsXG4gIG1hc2tVbml0czogJ21hc2tVbml0cycsXG4gIG1hdGhlbWF0
aWNhbDogMCxcbiAgbW9kZTogMCxcbiAgbnVtT2N0YXZlczogJ251bU9jdGF2ZXMnLFxuICBvZmZz
ZXQ6IDAsXG4gIG9wYWNpdHk6IDAsXG4gIG9wZXJhdG9yOiAwLFxuICBvcmRlcjogMCxcbiAgb3Jp
ZW50OiAwLFxuICBvcmllbnRhdGlvbjogMCxcbiAgb3JpZ2luOiAwLFxuICBvdmVyZmxvdzogMCxc
biAgb3ZlcmxpbmVQb3NpdGlvbjogJ292ZXJsaW5lLXBvc2l0aW9uJyxcbiAgb3ZlcmxpbmVUaGlj
a25lc3M6ICdvdmVybGluZS10aGlja25lc3MnLFxuICBwYWludE9yZGVyOiAncGFpbnQtb3JkZXIn
LFxuICBwYW5vc2UxOiAncGFub3NlLTEnLFxuICBwYXRoTGVuZ3RoOiAncGF0aExlbmd0aCcsXG4g
IHBhdHRlcm5Db250ZW50VW5pdHM6ICdwYXR0ZXJuQ29udGVudFVuaXRzJyxcbiAgcGF0dGVyblRy
YW5zZm9ybTogJ3BhdHRlcm5UcmFuc2Zvcm0nLFxuICBwYXR0ZXJuVW5pdHM6ICdwYXR0ZXJuVW5p
dHMnLFxuICBwb2ludGVyRXZlbnRzOiAncG9pbnRlci1ldmVudHMnLFxuICBwb2ludHM6IDAsXG4g
IHBvaW50c0F0WDogJ3BvaW50c0F0WCcsXG4gIHBvaW50c0F0WTogJ3BvaW50c0F0WScsXG4gIHBv
aW50c0F0WjogJ3BvaW50c0F0WicsXG4gIHByZXNlcnZlQWxwaGE6ICdwcmVzZXJ2ZUFscGhhJyxc
biAgcHJlc2VydmVBc3BlY3RSYXRpbzogJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLFxuICBwcmltaXRp
dmVVbml0czogJ3ByaW1pdGl2ZVVuaXRzJyxcbiAgcjogMCxcbiAgcmFkaXVzOiAwLFxuICByZWZY
OiAncmVmWCcsXG4gIHJlZlk6ICdyZWZZJyxcbiAgcmVuZGVyaW5nSW50ZW50OiAncmVuZGVyaW5n
LWludGVudCcsXG4gIHJlcGVhdENvdW50OiAncmVwZWF0Q291bnQnLFxuICByZXBlYXREdXI6ICdy
ZXBlYXREdXInLFxuICByZXF1aXJlZEV4dGVuc2lvbnM6ICdyZXF1aXJlZEV4dGVuc2lvbnMnLFxu
ICByZXF1aXJlZEZlYXR1cmVzOiAncmVxdWlyZWRGZWF0dXJlcycsXG4gIHJlc3RhcnQ6IDAsXG4g
IHJlc3VsdDogMCxcbiAgcm90YXRlOiAwLFxuICByeDogMCxcbiAgcnk6IDAsXG4gIHNjYWxlOiAw
LFxuICBzZWVkOiAwLFxuICBzaGFwZVJlbmRlcmluZzogJ3NoYXBlLXJlbmRlcmluZycsXG4gIHNs
b3BlOiAwLFxuICBzcGFjaW5nOiAwLFxuICBzcGVjdWxhckNvbnN0YW50OiAnc3BlY3VsYXJDb25z
dGFudCcsXG4gIHNwZWN1bGFyRXhwb25lbnQ6ICdzcGVjdWxhckV4cG9uZW50JyxcbiAgc3BlZWQ6
IDAsXG4gIHNwcmVhZE1ldGhvZDogJ3NwcmVhZE1ldGhvZCcsXG4gIHN0YXJ0T2Zmc2V0OiAnc3Rh
cnRPZmZzZXQnLFxuICBzdGREZXZpYXRpb246ICdzdGREZXZpYXRpb24nLFxuICBzdGVtaDogMCxc
biAgc3RlbXY6IDAsXG4gIHN0aXRjaFRpbGVzOiAnc3RpdGNoVGlsZXMnLFxuICBzdG9wQ29sb3I6
ICdzdG9wLWNvbG9yJyxcbiAgc3RvcE9wYWNpdHk6ICdzdG9wLW9wYWNpdHknLFxuICBzdHJpa2V0
aHJvdWdoUG9zaXRpb246ICdzdHJpa2V0aHJvdWdoLXBvc2l0aW9uJyxcbiAgc3RyaWtldGhyb3Vn
aFRoaWNrbmVzczogJ3N0cmlrZXRocm91Z2gtdGhpY2tuZXNzJyxcbiAgc3RyaW5nOiAwLFxuICBz
dHJva2U6IDAsXG4gIHN0cm9rZURhc2hhcnJheTogJ3N0cm9rZS1kYXNoYXJyYXknLFxuICBzdHJv
a2VEYXNob2Zmc2V0OiAnc3Ryb2tlLWRhc2hvZmZzZXQnLFxuICBzdHJva2VMaW5lY2FwOiAnc3Ry
b2tlLWxpbmVjYXAnLFxuICBzdHJva2VMaW5lam9pbjogJ3N0cm9rZS1saW5lam9pbicsXG4gIHN0
cm9rZU1pdGVybGltaXQ6ICdzdHJva2UtbWl0ZXJsaW1pdCcsXG4gIHN0cm9rZU9wYWNpdHk6ICdz
dHJva2Utb3BhY2l0eScsXG4gIHN0cm9rZVdpZHRoOiAnc3Ryb2tlLXdpZHRoJyxcbiAgc3VyZmFj
ZVNjYWxlOiAnc3VyZmFjZVNjYWxlJyxcbiAgc3lzdGVtTGFuZ3VhZ2U6ICdzeXN0ZW1MYW5ndWFn
ZScsXG4gIHRhYmxlVmFsdWVzOiAndGFibGVWYWx1ZXMnLFxuICB0YXJnZXRYOiAndGFyZ2V0WCcs
XG4gIHRhcmdldFk6ICd0YXJnZXRZJyxcbiAgdGV4dEFuY2hvcjogJ3RleHQtYW5jaG9yJyxcbiAg
dGV4dERlY29yYXRpb246ICd0ZXh0LWRlY29yYXRpb24nLFxuICB0ZXh0UmVuZGVyaW5nOiAndGV4
dC1yZW5kZXJpbmcnLFxuICB0ZXh0TGVuZ3RoOiAndGV4dExlbmd0aCcsXG4gIHRvOiAwLFxuICB0
cmFuc2Zvcm06IDAsXG4gIHUxOiAwLFxuICB1MjogMCxcbiAgdW5kZXJsaW5lUG9zaXRpb246ICd1
bmRlcmxpbmUtcG9zaXRpb24nLFxuICB1bmRlcmxpbmVUaGlja25lc3M6ICd1bmRlcmxpbmUtdGhp
Y2tuZXNzJyxcbiAgdW5pY29kZTogMCxcbiAgdW5pY29kZUJpZGk6ICd1bmljb2RlLWJpZGknLFxu
ICB1bmljb2RlUmFuZ2U6ICd1bmljb2RlLXJhbmdlJyxcbiAgdW5pdHNQZXJFbTogJ3VuaXRzLXBl
ci1lbScsXG4gIHZBbHBoYWJldGljOiAndi1hbHBoYWJldGljJyxcbiAgdkhhbmdpbmc6ICd2LWhh
bmdpbmcnLFxuICB2SWRlb2dyYXBoaWM6ICd2LWlkZW9ncmFwaGljJyxcbiAgdk1hdGhlbWF0aWNh
bDogJ3YtbWF0aGVtYXRpY2FsJyxcbiAgdmFsdWVzOiAwLFxuICB2ZWN0b3JFZmZlY3Q6ICd2ZWN0
b3ItZWZmZWN0JyxcbiAgdmVyc2lvbjogMCxcbiAgdmVydEFkdlk6ICd2ZXJ0LWFkdi15JyxcbiAg
dmVydE9yaWdpblg6ICd2ZXJ0LW9yaWdpbi14JyxcbiAgdmVydE9yaWdpblk6ICd2ZXJ0LW9yaWdp
bi15JyxcbiAgdmlld0JveDogJ3ZpZXdCb3gnLFxuICB2aWV3VGFyZ2V0OiAndmlld1RhcmdldCcs
XG4gIHZpc2liaWxpdHk6IDAsXG4gIHdpZHRoczogMCxcbiAgd29yZFNwYWNpbmc6ICd3b3JkLXNw
YWNpbmcnLFxuICB3cml0aW5nTW9kZTogJ3dyaXRpbmctbW9kZScsXG4gIHg6IDAsXG4gIHhIZWln
aHQ6ICd4LWhlaWdodCcsXG4gIHgxOiAwLFxuICB4MjogMCxcbiAgeENoYW5uZWxTZWxlY3Rvcjog
J3hDaGFubmVsU2VsZWN0b3InLFxuICB4bGlua0FjdHVhdGU6ICd4bGluazphY3R1YXRlJyxcbiAg
eGxpbmtBcmNyb2xlOiAneGxpbms6YXJjcm9sZScsXG4gIHhsaW5rSHJlZjogJ3hsaW5rOmhyZWYn
LFxuICB4bGlua1JvbGU6ICd4bGluazpyb2xlJyxcbiAgeGxpbmtTaG93OiAneGxpbms6c2hvdycs
XG4gIHhsaW5rVGl0bGU6ICd4bGluazp0aXRsZScsXG4gIHhsaW5rVHlwZTogJ3hsaW5rOnR5cGUn
LFxuICB4bWxCYXNlOiAneG1sOmJhc2UnLFxuICB4bWxuczogMCxcbiAgeG1sbnNYbGluazogJ3ht
bG5zOnhsaW5rJyxcbiAgeG1sTGFuZzogJ3htbDpsYW5nJyxcbiAgeG1sU3BhY2U6ICd4bWw6c3Bh
Y2UnLFxuICB5OiAwLFxuICB5MTogMCxcbiAgeTI6IDAsXG4gIHlDaGFubmVsU2VsZWN0b3I6ICd5
Q2hhbm5lbFNlbGVjdG9yJyxcbiAgejogMCxcbiAgem9vbUFuZFBhbjogJ3pvb21BbmRQYW4nXG59
O1xuXG52YXIgU1ZHRE9NUHJvcGVydHlDb25maWcgPSB7XG4gIFByb3BlcnRpZXM6IHt9LFxuICBE
T01BdHRyaWJ1dGVOYW1lc3BhY2VzOiB7XG4gICAgeGxpbmtBY3R1YXRlOiBOUy54bGluayxcbiAg
ICB4bGlua0FyY3JvbGU6IE5TLnhsaW5rLFxuICAgIHhsaW5rSHJlZjogTlMueGxpbmssXG4gICAg
eGxpbmtSb2xlOiBOUy54bGluayxcbiAgICB4bGlua1Nob3c6IE5TLnhsaW5rLFxuICAgIHhsaW5r
VGl0bGU6IE5TLnhsaW5rLFxuICAgIHhsaW5rVHlwZTogTlMueGxpbmssXG4gICAgeG1sQmFzZTog
TlMueG1sLFxuICAgIHhtbExhbmc6IE5TLnhtbCxcbiAgICB4bWxTcGFjZTogTlMueG1sXG4gIH0s
XG4gIERPTUF0dHJpYnV0ZU5hbWVzOiB7fVxufTtcblxuT2JqZWN0LmtleXMoQVRUUlMpLmZvckVh
Y2goZnVuY3Rpb24gKGtleSkge1xuICBTVkdET01Qcm9wZXJ0eUNvbmZpZy5Qcm9wZXJ0aWVzW2tl
eV0gPSAwO1xuICBpZiAoQVRUUlNba2V5XSkge1xuICAgIFNWR0RPTVByb3BlcnR5Q29uZmlnLkRP
TUF0dHJpYnV0ZU5hbWVzW2tleV0gPSBBVFRSU1trZXldO1xuICB9XG59KTtcblxubW9kdWxlLmV4
cG9ydHMgPSBTVkdET01Qcm9wZXJ0eUNvbmZpZztcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8v
IFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1NWR0RPTVBy
b3BlcnR5Q29uZmlnLmpzXG4vLyBtb2R1bGUgaWQgPSAxNzZcbi8vIG1vZHVsZSBjaHVua3MgPSAw
IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxs
IHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVu
ZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBp
biB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBn
cmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmls
ZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFy
IEV2ZW50UHJvcGFnYXRvcnMgPSByZXF1aXJlKCcuL0V2ZW50UHJvcGFnYXRvcnMnKTtcbnZhciBF
eGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoJ2ZianMvbGliL0V4ZWN1dGlvbkVudmlyb25t
ZW50Jyk7XG52YXIgUmVhY3RET01Db21wb25lbnRUcmVlID0gcmVxdWlyZSgnLi9SZWFjdERPTUNv
bXBvbmVudFRyZWUnKTtcbnZhciBSZWFjdElucHV0U2VsZWN0aW9uID0gcmVxdWlyZSgnLi9SZWFj
dElucHV0U2VsZWN0aW9uJyk7XG52YXIgU3ludGhldGljRXZlbnQgPSByZXF1aXJlKCcuL1N5bnRo
ZXRpY0V2ZW50Jyk7XG5cbnZhciBnZXRBY3RpdmVFbGVtZW50ID0gcmVxdWlyZSgnZmJqcy9saWIv
Z2V0QWN0aXZlRWxlbWVudCcpO1xudmFyIGlzVGV4dElucHV0RWxlbWVudCA9IHJlcXVpcmUoJy4v
aXNUZXh0SW5wdXRFbGVtZW50Jyk7XG52YXIgc2hhbGxvd0VxdWFsID0gcmVxdWlyZSgnZmJqcy9s
aWIvc2hhbGxvd0VxdWFsJyk7XG5cbnZhciBza2lwU2VsZWN0aW9uQ2hhbmdlRXZlbnQgPSBFeGVj
dXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00gJiYgJ2RvY3VtZW50TW9kZScgaW4gZG9jdW1lbnQg
JiYgZG9jdW1lbnQuZG9jdW1lbnRNb2RlIDw9IDExO1xuXG52YXIgZXZlbnRUeXBlcyA9IHtcbiAg
c2VsZWN0OiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6
ICdvblNlbGVjdCcsXG4gICAgICBjYXB0dXJlZDogJ29uU2VsZWN0Q2FwdHVyZSdcbiAgICB9LFxu
ICAgIGRlcGVuZGVuY2llczogWyd0b3BCbHVyJywgJ3RvcENvbnRleHRNZW51JywgJ3RvcEZvY3Vz
JywgJ3RvcEtleURvd24nLCAndG9wS2V5VXAnLCAndG9wTW91c2VEb3duJywgJ3RvcE1vdXNlVXAn
LCAndG9wU2VsZWN0aW9uQ2hhbmdlJ11cbiAgfVxufTtcblxudmFyIGFjdGl2ZUVsZW1lbnQgPSBu
dWxsO1xudmFyIGFjdGl2ZUVsZW1lbnRJbnN0ID0gbnVsbDtcbnZhciBsYXN0U2VsZWN0aW9uID0g
bnVsbDtcbnZhciBtb3VzZURvd24gPSBmYWxzZTtcblxuLy8gVHJhY2sgd2hldGhlciBhIGxpc3Rl
bmVyIGV4aXN0cyBmb3IgdGhpcyBwbHVnaW4uIElmIG5vbmUgZXhpc3QsIHdlIGRvXG4vLyBub3Qg
ZXh0cmFjdCBldmVudHMuIFNlZSAjMzYzOS5cbnZhciBoYXNMaXN0ZW5lciA9IGZhbHNlO1xuXG4v
KipcbiAqIEdldCBhbiBvYmplY3Qgd2hpY2ggaXMgYSB1bmlxdWUgcmVwcmVzZW50YXRpb24gb2Yg
dGhlIGN1cnJlbnQgc2VsZWN0aW9uLlxuICpcbiAqIFRoZSByZXR1cm4gdmFsdWUgd2lsbCBub3Qg
YmUgY29uc2lzdGVudCBhY3Jvc3Mgbm9kZXMgb3IgYnJvd3NlcnMsIGJ1dFxuICogdHdvIGlkZW50
aWNhbCBzZWxlY3Rpb25zIG9uIHRoZSBzYW1lIG5vZGUgd2lsbCByZXR1cm4gaWRlbnRpY2FsIG9i
amVjdHMuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKiBAcmV0dXJuIHtvYmpl
Y3R9XG4gKi9cbmZ1bmN0aW9uIGdldFNlbGVjdGlvbihub2RlKSB7XG4gIGlmICgnc2VsZWN0aW9u
U3RhcnQnIGluIG5vZGUgJiYgUmVhY3RJbnB1dFNlbGVjdGlvbi5oYXNTZWxlY3Rpb25DYXBhYmls
aXRpZXMobm9kZSkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnQ6IG5vZGUuc2VsZWN0aW9u
U3RhcnQsXG4gICAgICBlbmQ6IG5vZGUuc2VsZWN0aW9uRW5kXG4gICAgfTtcbiAgfSBlbHNlIGlm
ICh3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7XG4gICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRT
ZWxlY3Rpb24oKTtcbiAgICByZXR1cm4ge1xuICAgICAgYW5jaG9yTm9kZTogc2VsZWN0aW9uLmFu
Y2hvck5vZGUsXG4gICAgICBhbmNob3JPZmZzZXQ6IHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4g
ICAgICBmb2N1c05vZGU6IHNlbGVjdGlvbi5mb2N1c05vZGUsXG4gICAgICBmb2N1c09mZnNldDog
c2VsZWN0aW9uLmZvY3VzT2Zmc2V0XG4gICAgfTtcbiAgfSBlbHNlIGlmIChkb2N1bWVudC5zZWxl
Y3Rpb24pIHtcbiAgICB2YXIgcmFuZ2UgPSBkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2Uo
KTtcbiAgICByZXR1cm4ge1xuICAgICAgcGFyZW50RWxlbWVudDogcmFuZ2UucGFyZW50RWxlbWVu
dCgpLFxuICAgICAgdGV4dDogcmFuZ2UudGV4dCxcbiAgICAgIHRvcDogcmFuZ2UuYm91bmRpbmdU
b3AsXG4gICAgICBsZWZ0OiByYW5nZS5ib3VuZGluZ0xlZnRcbiAgICB9O1xuICB9XG59XG5cbi8q
KlxuICogUG9sbCBzZWxlY3Rpb24gdG8gc2VlIHdoZXRoZXIgaXQncyBjaGFuZ2VkLlxuICpcbiAq
IEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudFxuICogQHJldHVybiB7P1N5bnRoZXRpY0V2ZW50
fVxuICovXG5mdW5jdGlvbiBjb25zdHJ1Y3RTZWxlY3RFdmVudChuYXRpdmVFdmVudCwgbmF0aXZl
RXZlbnRUYXJnZXQpIHtcbiAgLy8gRW5zdXJlIHdlIGhhdmUgdGhlIHJpZ2h0IGVsZW1lbnQsIGFu
ZCB0aGF0IHRoZSB1c2VyIGlzIG5vdCBkcmFnZ2luZyBhXG4gIC8vIHNlbGVjdGlvbiAodGhpcyBt
YXRjaGVzIG5hdGl2ZSBgc2VsZWN0YCBldmVudCBiZWhhdmlvcikuIEluIEhUTUw1LCBzZWxlY3Rc
biAgLy8gZmlyZXMgb25seSBvbiBpbnB1dCBhbmQgdGV4dGFyZWEgdGh1cyBpZiB0aGVyZSdzIG5v
IGZvY3VzZWQgZWxlbWVudCB3ZVxuICAvLyB3b24ndCBkaXNwYXRjaC5cbiAgaWYgKG1vdXNlRG93
biB8fCBhY3RpdmVFbGVtZW50ID09IG51bGwgfHwgYWN0aXZlRWxlbWVudCAhPT0gZ2V0QWN0aXZl
RWxlbWVudCgpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBPbmx5IGZpcmUgd2hl
biBzZWxlY3Rpb24gaGFzIGFjdHVhbGx5IGNoYW5nZWQuXG4gIHZhciBjdXJyZW50U2VsZWN0aW9u
ID0gZ2V0U2VsZWN0aW9uKGFjdGl2ZUVsZW1lbnQpO1xuICBpZiAoIWxhc3RTZWxlY3Rpb24gfHwg
IXNoYWxsb3dFcXVhbChsYXN0U2VsZWN0aW9uLCBjdXJyZW50U2VsZWN0aW9uKSkge1xuICAgIGxh
c3RTZWxlY3Rpb24gPSBjdXJyZW50U2VsZWN0aW9uO1xuXG4gICAgdmFyIHN5bnRoZXRpY0V2ZW50
ID0gU3ludGhldGljRXZlbnQuZ2V0UG9vbGVkKGV2ZW50VHlwZXMuc2VsZWN0LCBhY3RpdmVFbGVt
ZW50SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcblxuICAgIHN5bnRoZXRp
Y0V2ZW50LnR5cGUgPSAnc2VsZWN0JztcbiAgICBzeW50aGV0aWNFdmVudC50YXJnZXQgPSBhY3Rp
dmVFbGVtZW50O1xuXG4gICAgRXZlbnRQcm9wYWdhdG9ycy5hY2N1bXVsYXRlVHdvUGhhc2VEaXNw
YXRjaGVzKHN5bnRoZXRpY0V2ZW50KTtcblxuICAgIHJldHVybiBzeW50aGV0aWNFdmVudDtcbiAg
fVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIFRoaXMgcGx1Z2luIGNyZWF0ZXMgYW4g
YG9uU2VsZWN0YCBldmVudCB0aGF0IG5vcm1hbGl6ZXMgc2VsZWN0IGV2ZW50c1xuICogYWNyb3Nz
IGZvcm0gZWxlbWVudHMuXG4gKlxuICogU3VwcG9ydGVkIGVsZW1lbnRzIGFyZTpcbiAqIC0gaW5w
dXQgKHNlZSBgaXNUZXh0SW5wdXRFbGVtZW50YClcbiAqIC0gdGV4dGFyZWFcbiAqIC0gY29udGVu
dEVkaXRhYmxlXG4gKlxuICogVGhpcyBkaWZmZXJzIGZyb20gbmF0aXZlIGJyb3dzZXIgaW1wbGVt
ZW50YXRpb25zIGluIHRoZSBmb2xsb3dpbmcgd2F5czpcbiAqIC0gRmlyZXMgb24gY29udGVudEVk
aXRhYmxlIGZpZWxkcyBhcyB3ZWxsIGFzIGlucHV0cy5cbiAqIC0gRmlyZXMgZm9yIGNvbGxhcHNl
ZCBzZWxlY3Rpb24uXG4gKiAtIEZpcmVzIGFmdGVyIHVzZXIgaW5wdXQuXG4gKi9cbnZhciBTZWxl
Y3RFdmVudFBsdWdpbiA9IHtcbiAgZXZlbnRUeXBlczogZXZlbnRUeXBlcyxcblxuICBleHRyYWN0
RXZlbnRzOiBmdW5jdGlvbiAodG9wTGV2ZWxUeXBlLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwg
bmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgICBpZiAoIWhhc0xpc3RlbmVyKSB7XG4gICAgICByZXR1
cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgdGFyZ2V0Tm9kZSA9IHRhcmdldEluc3QgPyBSZWFj
dERPTUNvbXBvbmVudFRyZWUuZ2V0Tm9kZUZyb21JbnN0YW5jZSh0YXJnZXRJbnN0KSA6IHdpbmRv
dztcblxuICAgIHN3aXRjaCAodG9wTGV2ZWxUeXBlKSB7XG4gICAgICAvLyBUcmFjayB0aGUgaW5w
dXQgbm9kZSB0aGF0IGhhcyBmb2N1cy5cbiAgICAgIGNhc2UgJ3RvcEZvY3VzJzpcbiAgICAgICAg
aWYgKGlzVGV4dElucHV0RWxlbWVudCh0YXJnZXROb2RlKSB8fCB0YXJnZXROb2RlLmNvbnRlbnRF
ZGl0YWJsZSA9PT0gJ3RydWUnKSB7XG4gICAgICAgICAgYWN0aXZlRWxlbWVudCA9IHRhcmdldE5v
ZGU7XG4gICAgICAgICAgYWN0aXZlRWxlbWVudEluc3QgPSB0YXJnZXRJbnN0O1xuICAgICAgICAg
IGxhc3RTZWxlY3Rpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAg
Y2FzZSAndG9wQmx1cic6XG4gICAgICAgIGFjdGl2ZUVsZW1lbnQgPSBudWxsO1xuICAgICAgICBh
Y3RpdmVFbGVtZW50SW5zdCA9IG51bGw7XG4gICAgICAgIGxhc3RTZWxlY3Rpb24gPSBudWxsO1xu
ICAgICAgICBicmVhaztcbiAgICAgIC8vIERvbid0IGZpcmUgdGhlIGV2ZW50IHdoaWxlIHRoZSB1
c2VyIGlzIGRyYWdnaW5nLiBUaGlzIG1hdGNoZXMgdGhlXG4gICAgICAvLyBzZW1hbnRpY3Mgb2Yg
dGhlIG5hdGl2ZSBzZWxlY3QgZXZlbnQuXG4gICAgICBjYXNlICd0b3BNb3VzZURvd24nOlxuICAg
ICAgICBtb3VzZURvd24gPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RvcENv
bnRleHRNZW51JzpcbiAgICAgIGNhc2UgJ3RvcE1vdXNlVXAnOlxuICAgICAgICBtb3VzZURvd24g
PSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGNvbnN0cnVjdFNlbGVjdEV2ZW50KG5hdGl2ZUV2ZW50
LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgICAvLyBDaHJvbWUgYW5kIElFIGZpcmUgbm9uLXN0
YW5kYXJkIGV2ZW50IHdoZW4gc2VsZWN0aW9uIGlzIGNoYW5nZWQgKGFuZFxuICAgICAgLy8gc29t
ZXRpbWVzIHdoZW4gaXQgaGFzbid0KS4gSUUncyBldmVudCBmaXJlcyBvdXQgb2Ygb3JkZXIgd2l0
aCByZXNwZWN0XG4gICAgICAvLyB0byBrZXkgYW5kIGlucHV0IGV2ZW50cyBvbiBkZWxldGlvbiwg
c28gd2UgZGlzY2FyZCBpdC5cbiAgICAgIC8vXG4gICAgICAvLyBGaXJlZm94IGRvZXNuJ3Qgc3Vw
cG9ydCBzZWxlY3Rpb25jaGFuZ2UsIHNvIGNoZWNrIHNlbGVjdGlvbiBzdGF0dXNcbiAgICAgIC8v
IGFmdGVyIGVhY2gga2V5IGVudHJ5LiBUaGUgc2VsZWN0aW9uIGNoYW5nZXMgYWZ0ZXIga2V5ZG93
biBhbmQgYmVmb3JlXG4gICAgICAvLyBrZXl1cCwgYnV0IHdlIGNoZWNrIG9uIGtleWRvd24gYXMg
d2VsbCBpbiB0aGUgY2FzZSBvZiBob2xkaW5nIGRvd24gYVxuICAgICAgLy8ga2V5LCB3aGVuIG11
bHRpcGxlIGtleWRvd24gZXZlbnRzIGFyZSBmaXJlZCBidXQgb25seSBvbmUga2V5dXAgaXMuXG4g
ICAgICAvLyBUaGlzIGlzIGFsc28gb3VyIGFwcHJvYWNoIGZvciBJRSBoYW5kbGluZywgZm9yIHRo
ZSByZWFzb24gYWJvdmUuXG4gICAgICBjYXNlICd0b3BTZWxlY3Rpb25DaGFuZ2UnOlxuICAgICAg
ICBpZiAoc2tpcFNlbGVjdGlvbkNoYW5nZUV2ZW50KSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAg
ICAgIH1cbiAgICAgIC8vIGZhbGxzIHRocm91Z2hcbiAgICAgIGNhc2UgJ3RvcEtleURvd24nOlxu
ICAgICAgY2FzZSAndG9wS2V5VXAnOlxuICAgICAgICByZXR1cm4gY29uc3RydWN0U2VsZWN0RXZl
bnQobmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICB9XG5cbiAgICByZXR1cm4g
bnVsbDtcbiAgfSxcblxuICBkaWRQdXRMaXN0ZW5lcjogZnVuY3Rpb24gKGluc3QsIHJlZ2lzdHJh
dGlvbk5hbWUsIGxpc3RlbmVyKSB7XG4gICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWUgPT09ICdvblNl
bGVjdCcpIHtcbiAgICAgIGhhc0xpc3RlbmVyID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn07XG5cbm1v
ZHVsZS5leHBvcnRzID0gU2VsZWN0RXZlbnRQbHVnaW47XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8v
XG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9TZWxl
Y3RFdmVudFBsdWdpbi5qc1xuLy8gbW9kdWxlIGlkID0gMTc3XG4vLyBtb2R1bGUgY2h1bmtzID0g
MCIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1
bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwg
Z3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZp
bGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIFxuICovXG5cbid1c2Ugc3RyaWN0Jztc
blxudmFyIF9wcm9kSW52YXJpYW50ID0gcmVxdWlyZSgnLi9yZWFjdFByb2RJbnZhcmlhbnQnKTtc
blxudmFyIEV2ZW50TGlzdGVuZXIgPSByZXF1aXJlKCdmYmpzL2xpYi9FdmVudExpc3RlbmVyJyk7
XG52YXIgRXZlbnRQcm9wYWdhdG9ycyA9IHJlcXVpcmUoJy4vRXZlbnRQcm9wYWdhdG9ycycpO1xu
dmFyIFJlYWN0RE9NQ29tcG9uZW50VHJlZSA9IHJlcXVpcmUoJy4vUmVhY3RET01Db21wb25lbnRU
cmVlJyk7XG52YXIgU3ludGhldGljQW5pbWF0aW9uRXZlbnQgPSByZXF1aXJlKCcuL1N5bnRoZXRp
Y0FuaW1hdGlvbkV2ZW50Jyk7XG52YXIgU3ludGhldGljQ2xpcGJvYXJkRXZlbnQgPSByZXF1aXJl
KCcuL1N5bnRoZXRpY0NsaXBib2FyZEV2ZW50Jyk7XG52YXIgU3ludGhldGljRXZlbnQgPSByZXF1
aXJlKCcuL1N5bnRoZXRpY0V2ZW50Jyk7XG52YXIgU3ludGhldGljRm9jdXNFdmVudCA9IHJlcXVp
cmUoJy4vU3ludGhldGljRm9jdXNFdmVudCcpO1xudmFyIFN5bnRoZXRpY0tleWJvYXJkRXZlbnQg
PSByZXF1aXJlKCcuL1N5bnRoZXRpY0tleWJvYXJkRXZlbnQnKTtcbnZhciBTeW50aGV0aWNNb3Vz
ZUV2ZW50ID0gcmVxdWlyZSgnLi9TeW50aGV0aWNNb3VzZUV2ZW50Jyk7XG52YXIgU3ludGhldGlj
RHJhZ0V2ZW50ID0gcmVxdWlyZSgnLi9TeW50aGV0aWNEcmFnRXZlbnQnKTtcbnZhciBTeW50aGV0
aWNUb3VjaEV2ZW50ID0gcmVxdWlyZSgnLi9TeW50aGV0aWNUb3VjaEV2ZW50Jyk7XG52YXIgU3lu
dGhldGljVHJhbnNpdGlvbkV2ZW50ID0gcmVxdWlyZSgnLi9TeW50aGV0aWNUcmFuc2l0aW9uRXZl
bnQnKTtcbnZhciBTeW50aGV0aWNVSUV2ZW50ID0gcmVxdWlyZSgnLi9TeW50aGV0aWNVSUV2ZW50
Jyk7XG52YXIgU3ludGhldGljV2hlZWxFdmVudCA9IHJlcXVpcmUoJy4vU3ludGhldGljV2hlZWxF
dmVudCcpO1xuXG52YXIgZW1wdHlGdW5jdGlvbiA9IHJlcXVpcmUoJ2ZianMvbGliL2VtcHR5RnVu
Y3Rpb24nKTtcbnZhciBnZXRFdmVudENoYXJDb2RlID0gcmVxdWlyZSgnLi9nZXRFdmVudENoYXJD
b2RlJyk7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG5c
bi8qKlxuICogVHVybnNcbiAqIFsnYWJvcnQnLCAuLi5dXG4gKiBpbnRvXG4gKiBldmVudFR5cGVz
ID0ge1xuICogICAnYWJvcnQnOiB7XG4gKiAgICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtc
biAqICAgICAgIGJ1YmJsZWQ6ICdvbkFib3J0JyxcbiAqICAgICAgIGNhcHR1cmVkOiAnb25BYm9y
dENhcHR1cmUnLFxuICogICAgIH0sXG4gKiAgICAgZGVwZW5kZW5jaWVzOiBbJ3RvcEFib3J0J10s
XG4gKiAgIH0sXG4gKiAgIC4uLlxuICogfTtcbiAqIHRvcExldmVsRXZlbnRzVG9EaXNwYXRjaENv
bmZpZyA9IHtcbiAqICAgJ3RvcEFib3J0JzogeyBzYW1lQ29uZmlnIH1cbiAqIH07XG4gKi9cbnZh
ciBldmVudFR5cGVzID0ge307XG52YXIgdG9wTGV2ZWxFdmVudHNUb0Rpc3BhdGNoQ29uZmlnID0g
e307XG5bJ2Fib3J0JywgJ2FuaW1hdGlvbkVuZCcsICdhbmltYXRpb25JdGVyYXRpb24nLCAnYW5p
bWF0aW9uU3RhcnQnLCAnYmx1cicsICdjYW5QbGF5JywgJ2NhblBsYXlUaHJvdWdoJywgJ2NsaWNr
JywgJ2NvbnRleHRNZW51JywgJ2NvcHknLCAnY3V0JywgJ2RvdWJsZUNsaWNrJywgJ2RyYWcnLCAn
ZHJhZ0VuZCcsICdkcmFnRW50ZXInLCAnZHJhZ0V4aXQnLCAnZHJhZ0xlYXZlJywgJ2RyYWdPdmVy
JywgJ2RyYWdTdGFydCcsICdkcm9wJywgJ2R1cmF0aW9uQ2hhbmdlJywgJ2VtcHRpZWQnLCAnZW5j
cnlwdGVkJywgJ2VuZGVkJywgJ2Vycm9yJywgJ2ZvY3VzJywgJ2lucHV0JywgJ2ludmFsaWQnLCAn
a2V5RG93bicsICdrZXlQcmVzcycsICdrZXlVcCcsICdsb2FkJywgJ2xvYWRlZERhdGEnLCAnbG9h
ZGVkTWV0YWRhdGEnLCAnbG9hZFN0YXJ0JywgJ21vdXNlRG93bicsICdtb3VzZU1vdmUnLCAnbW91
c2VPdXQnLCAnbW91c2VPdmVyJywgJ21vdXNlVXAnLCAncGFzdGUnLCAncGF1c2UnLCAncGxheScs
ICdwbGF5aW5nJywgJ3Byb2dyZXNzJywgJ3JhdGVDaGFuZ2UnLCAncmVzZXQnLCAnc2Nyb2xsJywg
J3NlZWtlZCcsICdzZWVraW5nJywgJ3N0YWxsZWQnLCAnc3VibWl0JywgJ3N1c3BlbmQnLCAndGlt
ZVVwZGF0ZScsICd0b3VjaENhbmNlbCcsICd0b3VjaEVuZCcsICd0b3VjaE1vdmUnLCAndG91Y2hT
dGFydCcsICd0cmFuc2l0aW9uRW5kJywgJ3ZvbHVtZUNoYW5nZScsICd3YWl0aW5nJywgJ3doZWVs
J10uZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgdmFyIGNhcGl0YWxpemVkRXZlbnQgPSBl
dmVudFswXS50b1VwcGVyQ2FzZSgpICsgZXZlbnQuc2xpY2UoMSk7XG4gIHZhciBvbkV2ZW50ID0g
J29uJyArIGNhcGl0YWxpemVkRXZlbnQ7XG4gIHZhciB0b3BFdmVudCA9ICd0b3AnICsgY2FwaXRh
bGl6ZWRFdmVudDtcblxuICB2YXIgdHlwZSA9IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1l
czoge1xuICAgICAgYnViYmxlZDogb25FdmVudCxcbiAgICAgIGNhcHR1cmVkOiBvbkV2ZW50ICsg
J0NhcHR1cmUnXG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6IFt0b3BFdmVudF1cbiAgfTtcbiAg
ZXZlbnRUeXBlc1tldmVudF0gPSB0eXBlO1xuICB0b3BMZXZlbEV2ZW50c1RvRGlzcGF0Y2hDb25m
aWdbdG9wRXZlbnRdID0gdHlwZTtcbn0pO1xuXG52YXIgb25DbGlja0xpc3RlbmVycyA9IHt9O1xu
XG5mdW5jdGlvbiBnZXREaWN0aW9uYXJ5S2V5KGluc3QpIHtcbiAgLy8gUHJldmVudHMgVjggcGVy
Zm9ybWFuY2UgaXNzdWU6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9w
dWxsLzcyMzJcbiAgcmV0dXJuICcuJyArIGluc3QuX3Jvb3ROb2RlSUQ7XG59XG5cbmZ1bmN0aW9u
IGlzSW50ZXJhY3RpdmUodGFnKSB7XG4gIHJldHVybiB0YWcgPT09ICdidXR0b24nIHx8IHRhZyA9
PT0gJ2lucHV0JyB8fCB0YWcgPT09ICdzZWxlY3QnIHx8IHRhZyA9PT0gJ3RleHRhcmVhJztcbn1c
blxudmFyIFNpbXBsZUV2ZW50UGx1Z2luID0ge1xuICBldmVudFR5cGVzOiBldmVudFR5cGVzLFxu
XG4gIGV4dHJhY3RFdmVudHM6IGZ1bmN0aW9uICh0b3BMZXZlbFR5cGUsIHRhcmdldEluc3QsIG5h
dGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICAgIHZhciBkaXNwYXRjaENvbmZpZyA9
IHRvcExldmVsRXZlbnRzVG9EaXNwYXRjaENvbmZpZ1t0b3BMZXZlbFR5cGVdO1xuICAgIGlmICgh
ZGlzcGF0Y2hDb25maWcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgRXZl
bnRDb25zdHJ1Y3RvcjtcbiAgICBzd2l0Y2ggKHRvcExldmVsVHlwZSkge1xuICAgICAgY2FzZSAn
dG9wQWJvcnQnOlxuICAgICAgY2FzZSAndG9wQ2FuUGxheSc6XG4gICAgICBjYXNlICd0b3BDYW5Q
bGF5VGhyb3VnaCc6XG4gICAgICBjYXNlICd0b3BEdXJhdGlvbkNoYW5nZSc6XG4gICAgICBjYXNl
ICd0b3BFbXB0aWVkJzpcbiAgICAgIGNhc2UgJ3RvcEVuY3J5cHRlZCc6XG4gICAgICBjYXNlICd0
b3BFbmRlZCc6XG4gICAgICBjYXNlICd0b3BFcnJvcic6XG4gICAgICBjYXNlICd0b3BJbnB1dCc6
XG4gICAgICBjYXNlICd0b3BJbnZhbGlkJzpcbiAgICAgIGNhc2UgJ3RvcExvYWQnOlxuICAgICAg
Y2FzZSAndG9wTG9hZGVkRGF0YSc6XG4gICAgICBjYXNlICd0b3BMb2FkZWRNZXRhZGF0YSc6XG4g
ICAgICBjYXNlICd0b3BMb2FkU3RhcnQnOlxuICAgICAgY2FzZSAndG9wUGF1c2UnOlxuICAgICAg
Y2FzZSAndG9wUGxheSc6XG4gICAgICBjYXNlICd0b3BQbGF5aW5nJzpcbiAgICAgIGNhc2UgJ3Rv
cFByb2dyZXNzJzpcbiAgICAgIGNhc2UgJ3RvcFJhdGVDaGFuZ2UnOlxuICAgICAgY2FzZSAndG9w
UmVzZXQnOlxuICAgICAgY2FzZSAndG9wU2Vla2VkJzpcbiAgICAgIGNhc2UgJ3RvcFNlZWtpbmcn
OlxuICAgICAgY2FzZSAndG9wU3RhbGxlZCc6XG4gICAgICBjYXNlICd0b3BTdWJtaXQnOlxuICAg
ICAgY2FzZSAndG9wU3VzcGVuZCc6XG4gICAgICBjYXNlICd0b3BUaW1lVXBkYXRlJzpcbiAgICAg
IGNhc2UgJ3RvcFZvbHVtZUNoYW5nZSc6XG4gICAgICBjYXNlICd0b3BXYWl0aW5nJzpcbiAgICAg
ICAgLy8gSFRNTCBFdmVudHNcbiAgICAgICAgLy8gQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9o
dG1sNS9pbmRleC5odG1sI2V2ZW50cy0wXG4gICAgICAgIEV2ZW50Q29uc3RydWN0b3IgPSBTeW50
aGV0aWNFdmVudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0b3BLZXlQcmVzcyc6XG4g
ICAgICAgIC8vIEZpcmVmb3ggY3JlYXRlcyBhIGtleXByZXNzIGV2ZW50IGZvciBmdW5jdGlvbiBr
ZXlzIHRvby4gVGhpcyByZW1vdmVzXG4gICAgICAgIC8vIHRoZSB1bndhbnRlZCBrZXlwcmVzcyBl
dmVudHMuIEVudGVyIGlzIGhvd2V2ZXIgYm90aCBwcmludGFibGUgYW5kXG4gICAgICAgIC8vIG5v
bi1wcmludGFibGUuIE9uZSB3b3VsZCBleHBlY3QgVGFiIHRvIGJlIGFzIHdlbGwgKGJ1dCBpdCBp
c24ndCkuXG4gICAgICAgIGlmIChnZXRFdmVudENoYXJDb2RlKG5hdGl2ZUV2ZW50KSA9PT0gMCkg
e1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAvKiBmYWxscyB0aHJv
dWdoICovXG4gICAgICBjYXNlICd0b3BLZXlEb3duJzpcbiAgICAgIGNhc2UgJ3RvcEtleVVwJzpc
biAgICAgICAgRXZlbnRDb25zdHJ1Y3RvciA9IFN5bnRoZXRpY0tleWJvYXJkRXZlbnQ7XG4gICAg
ICAgIGJyZWFrO1xuICAgICAgY2FzZSAndG9wQmx1cic6XG4gICAgICBjYXNlICd0b3BGb2N1cyc6
XG4gICAgICAgIEV2ZW50Q29uc3RydWN0b3IgPSBTeW50aGV0aWNGb2N1c0V2ZW50O1xuICAgICAg
ICBicmVhaztcbiAgICAgIGNhc2UgJ3RvcENsaWNrJzpcbiAgICAgICAgLy8gRmlyZWZveCBjcmVh
dGVzIGEgY2xpY2sgZXZlbnQgb24gcmlnaHQgbW91c2UgY2xpY2tzLiBUaGlzIHJlbW92ZXMgdGhl
XG4gICAgICAgIC8vIHVud2FudGVkIGNsaWNrIGV2ZW50cy5cbiAgICAgICAgaWYgKG5hdGl2ZUV2
ZW50LmJ1dHRvbiA9PT0gMikge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4g
ICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICBjYXNlICd0b3BEb3VibGVDbGljayc6XG4g
ICAgICBjYXNlICd0b3BNb3VzZURvd24nOlxuICAgICAgY2FzZSAndG9wTW91c2VNb3ZlJzpcbiAg
ICAgIGNhc2UgJ3RvcE1vdXNlVXAnOlxuICAgICAgLy8gVE9ETzogRGlzYWJsZWQgZWxlbWVudHMg
c2hvdWxkIG5vdCByZXNwb25kIHRvIG1vdXNlIGV2ZW50c1xuICAgICAgLyogZmFsbHMgdGhyb3Vn
aCAqL1xuICAgICAgY2FzZSAndG9wTW91c2VPdXQnOlxuICAgICAgY2FzZSAndG9wTW91c2VPdmVy
JzpcbiAgICAgIGNhc2UgJ3RvcENvbnRleHRNZW51JzpcbiAgICAgICAgRXZlbnRDb25zdHJ1Y3Rv
ciA9IFN5bnRoZXRpY01vdXNlRXZlbnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndG9w
RHJhZyc6XG4gICAgICBjYXNlICd0b3BEcmFnRW5kJzpcbiAgICAgIGNhc2UgJ3RvcERyYWdFbnRl
cic6XG4gICAgICBjYXNlICd0b3BEcmFnRXhpdCc6XG4gICAgICBjYXNlICd0b3BEcmFnTGVhdmUn
OlxuICAgICAgY2FzZSAndG9wRHJhZ092ZXInOlxuICAgICAgY2FzZSAndG9wRHJhZ1N0YXJ0Jzpc
biAgICAgIGNhc2UgJ3RvcERyb3AnOlxuICAgICAgICBFdmVudENvbnN0cnVjdG9yID0gU3ludGhl
dGljRHJhZ0V2ZW50O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RvcFRvdWNoQ2FuY2Vs
JzpcbiAgICAgIGNhc2UgJ3RvcFRvdWNoRW5kJzpcbiAgICAgIGNhc2UgJ3RvcFRvdWNoTW92ZSc6
XG4gICAgICBjYXNlICd0b3BUb3VjaFN0YXJ0JzpcbiAgICAgICAgRXZlbnRDb25zdHJ1Y3RvciA9
IFN5bnRoZXRpY1RvdWNoRXZlbnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndG9wQW5p
bWF0aW9uRW5kJzpcbiAgICAgIGNhc2UgJ3RvcEFuaW1hdGlvbkl0ZXJhdGlvbic6XG4gICAgICBj
YXNlICd0b3BBbmltYXRpb25TdGFydCc6XG4gICAgICAgIEV2ZW50Q29uc3RydWN0b3IgPSBTeW50
aGV0aWNBbmltYXRpb25FdmVudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0b3BUcmFu
c2l0aW9uRW5kJzpcbiAgICAgICAgRXZlbnRDb25zdHJ1Y3RvciA9IFN5bnRoZXRpY1RyYW5zaXRp
b25FdmVudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0b3BTY3JvbGwnOlxuICAgICAg
ICBFdmVudENvbnN0cnVjdG9yID0gU3ludGhldGljVUlFdmVudDtcbiAgICAgICAgYnJlYWs7XG4g
ICAgICBjYXNlICd0b3BXaGVlbCc6XG4gICAgICAgIEV2ZW50Q29uc3RydWN0b3IgPSBTeW50aGV0
aWNXaGVlbEV2ZW50O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RvcENvcHknOlxuICAg
ICAgY2FzZSAndG9wQ3V0JzpcbiAgICAgIGNhc2UgJ3RvcFBhc3RlJzpcbiAgICAgICAgRXZlbnRD
b25zdHJ1Y3RvciA9IFN5bnRoZXRpY0NsaXBib2FyZEV2ZW50O1xuICAgICAgICBicmVhaztcbiAg
ICB9XG4gICAgIUV2ZW50Q29uc3RydWN0b3IgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3By
b2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnU2ltcGxlRXZlbnRQbHVnaW46IFVuaGFuZGxl
ZCBldmVudCB0eXBlLCBgJXNgLicsIHRvcExldmVsVHlwZSkgOiBfcHJvZEludmFyaWFudCgnODYn
LCB0b3BMZXZlbFR5cGUpIDogdm9pZCAwO1xuICAgIHZhciBldmVudCA9IEV2ZW50Q29uc3RydWN0
b3IuZ2V0UG9vbGVkKGRpc3BhdGNoQ29uZmlnLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0
aXZlRXZlbnRUYXJnZXQpO1xuICAgIEV2ZW50UHJvcGFnYXRvcnMuYWNjdW11bGF0ZVR3b1BoYXNl
RGlzcGF0Y2hlcyhldmVudCk7XG4gICAgcmV0dXJuIGV2ZW50O1xuICB9LFxuXG4gIGRpZFB1dExp
c3RlbmVyOiBmdW5jdGlvbiAoaW5zdCwgcmVnaXN0cmF0aW9uTmFtZSwgbGlzdGVuZXIpIHtcbiAg
ICAvLyBNb2JpbGUgU2FmYXJpIGRvZXMgbm90IGZpcmUgcHJvcGVybHkgYnViYmxlIGNsaWNrIGV2
ZW50cyBvblxuICAgIC8vIG5vbi1pbnRlcmFjdGl2ZSBlbGVtZW50cywgd2hpY2ggbWVhbnMgZGVs
ZWdhdGVkIGNsaWNrIGxpc3RlbmVycyBkbyBub3RcbiAgICAvLyBmaXJlLiBUaGUgd29ya2Fyb3Vu
ZCBmb3IgdGhpcyBidWcgaW52b2x2ZXMgYXR0YWNoaW5nIGFuIGVtcHR5IGNsaWNrXG4gICAgLy8g
bGlzdGVuZXIgb24gdGhlIHRhcmdldCBub2RlLlxuICAgIC8vIGh0dHA6Ly93d3cucXVpcmtzbW9k
ZS5vcmcvYmxvZy9hcmNoaXZlcy8yMDEwLzA5L2NsaWNrX2V2ZW50X2RlbC5odG1sXG4gICAgaWYg
KHJlZ2lzdHJhdGlvbk5hbWUgPT09ICdvbkNsaWNrJyAmJiAhaXNJbnRlcmFjdGl2ZShpbnN0Ll90
YWcpKSB7XG4gICAgICB2YXIga2V5ID0gZ2V0RGljdGlvbmFyeUtleShpbnN0KTtcbiAgICAgIHZh
ciBub2RlID0gUmVhY3RET01Db21wb25lbnRUcmVlLmdldE5vZGVGcm9tSW5zdGFuY2UoaW5zdCk7
XG4gICAgICBpZiAoIW9uQ2xpY2tMaXN0ZW5lcnNba2V5XSkge1xuICAgICAgICBvbkNsaWNrTGlz
dGVuZXJzW2tleV0gPSBFdmVudExpc3RlbmVyLmxpc3Rlbihub2RlLCAnY2xpY2snLCBlbXB0eUZ1
bmN0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgd2lsbERlbGV0ZUxpc3RlbmVyOiBm
dW5jdGlvbiAoaW5zdCwgcmVnaXN0cmF0aW9uTmFtZSkge1xuICAgIGlmIChyZWdpc3RyYXRpb25O
YW1lID09PSAnb25DbGljaycgJiYgIWlzSW50ZXJhY3RpdmUoaW5zdC5fdGFnKSkge1xuICAgICAg
dmFyIGtleSA9IGdldERpY3Rpb25hcnlLZXkoaW5zdCk7XG4gICAgICBvbkNsaWNrTGlzdGVuZXJz
W2tleV0ucmVtb3ZlKCk7XG4gICAgICBkZWxldGUgb25DbGlja0xpc3RlbmVyc1trZXldO1xuICAg
IH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBTaW1wbGVFdmVudFBsdWdpbjtcblxuXG4v
Ly8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9y
ZWFjdC1kb20vbGliL1NpbXBsZUV2ZW50UGx1Z2luLmpzXG4vLyBtb2R1bGUgaWQgPSAxNzhcbi8v
IG1vZHVsZSBjaHVua3MgPSAwIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNl
Ym9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBj
b2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVc
biAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJl
ZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQg
aW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1
c2Ugc3RyaWN0JztcblxudmFyIFN5bnRoZXRpY0V2ZW50ID0gcmVxdWlyZSgnLi9TeW50aGV0aWNF
dmVudCcpO1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53
My5vcmcvVFIvY3NzMy1hbmltYXRpb25zLyNBbmltYXRpb25FdmVudC1pbnRlcmZhY2VcbiAqIEBz
ZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0FuaW1h
dGlvbkV2ZW50XG4gKi9cbnZhciBBbmltYXRpb25FdmVudEludGVyZmFjZSA9IHtcbiAgYW5pbWF0
aW9uTmFtZTogbnVsbCxcbiAgZWxhcHNlZFRpbWU6IG51bGwsXG4gIHBzZXVkb0VsZW1lbnQ6IG51
bGxcbn07XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGRpc3BhdGNoQ29uZmlnIENvbmZpZ3Vy
YXRpb24gdXNlZCB0byBkaXNwYXRjaCB0aGlzIGV2ZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGRp
c3BhdGNoTWFya2VyIE1hcmtlciBpZGVudGlmeWluZyB0aGUgZXZlbnQgdGFyZ2V0LlxuICogQHBh
cmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQGV4dGVu
ZHMge1N5bnRoZXRpY0V2ZW50fVxuICovXG5mdW5jdGlvbiBTeW50aGV0aWNBbmltYXRpb25FdmVu
dChkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVu
dFRhcmdldCkge1xuICByZXR1cm4gU3ludGhldGljRXZlbnQuY2FsbCh0aGlzLCBkaXNwYXRjaENv
bmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG59
XG5cblN5bnRoZXRpY0V2ZW50LmF1Z21lbnRDbGFzcyhTeW50aGV0aWNBbmltYXRpb25FdmVudCwg
QW5pbWF0aW9uRXZlbnRJbnRlcmZhY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bnRoZXRpY0Fu
aW1hdGlvbkV2ZW50O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJc
bi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvU3ludGhldGljQW5pbWF0aW9uRXZlbnQu
anNcbi8vIG1vZHVsZSBpZCA9IDE3OVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipcbiAqIENv
cHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1z
dHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRp
cmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBw
YXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1l
IGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgU3ludGhldGljRXZl
bnQgPSByZXF1aXJlKCcuL1N5bnRoZXRpY0V2ZW50Jyk7XG5cbi8qKlxuICogQGludGVyZmFjZSBF
dmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9jbGlwYm9hcmQtYXBpcy9cbiAqL1xu
dmFyIENsaXBib2FyZEV2ZW50SW50ZXJmYWNlID0ge1xuICBjbGlwYm9hcmREYXRhOiBmdW5jdGlv
biAoZXZlbnQpIHtcbiAgICByZXR1cm4gJ2NsaXBib2FyZERhdGEnIGluIGV2ZW50ID8gZXZlbnQu
Y2xpcGJvYXJkRGF0YSA6IHdpbmRvdy5jbGlwYm9hcmREYXRhO1xuICB9XG59O1xuXG4vKipcbiAq
IEBwYXJhbSB7b2JqZWN0fSBkaXNwYXRjaENvbmZpZyBDb25maWd1cmF0aW9uIHVzZWQgdG8gZGlz
cGF0Y2ggdGhpcyBldmVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXNwYXRjaE1hcmtlciBNYXJr
ZXIgaWRlbnRpZnlpbmcgdGhlIGV2ZW50IHRhcmdldC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRp
dmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEBleHRlbmRzIHtTeW50aGV0aWNVSUV2
ZW50fVxuICovXG5mdW5jdGlvbiBTeW50aGV0aWNDbGlwYm9hcmRFdmVudChkaXNwYXRjaENvbmZp
ZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICBy
ZXR1cm4gU3ludGhldGljRXZlbnQuY2FsbCh0aGlzLCBkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hN
YXJrZXIsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG59XG5cblN5bnRoZXRpY0V2
ZW50LmF1Z21lbnRDbGFzcyhTeW50aGV0aWNDbGlwYm9hcmRFdmVudCwgQ2xpcGJvYXJkRXZlbnRJ
bnRlcmZhY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bnRoZXRpY0NsaXBib2FyZEV2ZW50O1xu
XG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1
bGVzL3JlYWN0LWRvbS9saWIvU3ludGhldGljQ2xpcGJvYXJkRXZlbnQuanNcbi8vIG1vZHVsZSBp
ZCA9IDE4MFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXBy
ZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRo
aXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZv
dW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlz
IHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNh
biBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAq
XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgU3ludGhldGljVUlFdmVudCA9IHJlcXVpcmUo
Jy4vU3ludGhldGljVUlFdmVudCcpO1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgRm9jdXNFdmVudFxu
ICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cbnZh
ciBGb2N1c0V2ZW50SW50ZXJmYWNlID0ge1xuICByZWxhdGVkVGFyZ2V0OiBudWxsXG59O1xuXG4v
KipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkaXNwYXRjaENvbmZpZyBDb25maWd1cmF0aW9uIHVzZWQg
dG8gZGlzcGF0Y2ggdGhpcyBldmVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXNwYXRjaE1hcmtl
ciBNYXJrZXIgaWRlbnRpZnlpbmcgdGhlIGV2ZW50IHRhcmdldC5cbiAqIEBwYXJhbSB7b2JqZWN0
fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEBleHRlbmRzIHtTeW50aGV0
aWNVSUV2ZW50fVxuICovXG5mdW5jdGlvbiBTeW50aGV0aWNGb2N1c0V2ZW50KGRpc3BhdGNoQ29u
ZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4g
IHJldHVybiBTeW50aGV0aWNVSUV2ZW50LmNhbGwodGhpcywgZGlzcGF0Y2hDb25maWcsIGRpc3Bh
dGNoTWFya2VyLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xufVxuXG5TeW50aGV0
aWNVSUV2ZW50LmF1Z21lbnRDbGFzcyhTeW50aGV0aWNGb2N1c0V2ZW50LCBGb2N1c0V2ZW50SW50
ZXJmYWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW50aGV0aWNGb2N1c0V2ZW50O1xuXG5cbi8v
Ly8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3Jl
YWN0LWRvbS9saWIvU3ludGhldGljRm9jdXNFdmVudC5qc1xuLy8gbW9kdWxlIGlkID0gMTgxXG4v
LyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFj
ZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2Ug
Y29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhl
XG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRy
ZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5k
IGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4n
dXNlIHN0cmljdCc7XG5cbnZhciBTeW50aGV0aWNVSUV2ZW50ID0gcmVxdWlyZSgnLi9TeW50aGV0
aWNVSUV2ZW50Jyk7XG5cbnZhciBnZXRFdmVudENoYXJDb2RlID0gcmVxdWlyZSgnLi9nZXRFdmVu
dENoYXJDb2RlJyk7XG52YXIgZ2V0RXZlbnRLZXkgPSByZXF1aXJlKCcuL2dldEV2ZW50S2V5Jyk7
XG52YXIgZ2V0RXZlbnRNb2RpZmllclN0YXRlID0gcmVxdWlyZSgnLi9nZXRFdmVudE1vZGlmaWVy
U3RhdGUnKTtcblxuLyoqXG4gKiBAaW50ZXJmYWNlIEtleWJvYXJkRXZlbnRcbiAqIEBzZWUgaHR0
cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG52YXIgS2V5Ym9hcmRF
dmVudEludGVyZmFjZSA9IHtcbiAga2V5OiBnZXRFdmVudEtleSxcbiAgbG9jYXRpb246IG51bGws
XG4gIGN0cmxLZXk6IG51bGwsXG4gIHNoaWZ0S2V5OiBudWxsLFxuICBhbHRLZXk6IG51bGwsXG4g
IG1ldGFLZXk6IG51bGwsXG4gIHJlcGVhdDogbnVsbCxcbiAgbG9jYWxlOiBudWxsLFxuICBnZXRN
b2RpZmllclN0YXRlOiBnZXRFdmVudE1vZGlmaWVyU3RhdGUsXG4gIC8vIExlZ2FjeSBJbnRlcmZh
Y2VcbiAgY2hhckNvZGU6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIC8vIGBjaGFyQ29kZWAgaXMg
dGhlIHJlc3VsdCBvZiBhIEtleVByZXNzIGV2ZW50IGFuZCByZXByZXNlbnRzIHRoZSB2YWx1ZSBv
ZlxuICAgIC8vIHRoZSBhY3R1YWwgcHJpbnRhYmxlIGNoYXJhY3Rlci5cblxuICAgIC8vIEtleVBy
ZXNzIGlzIGRlcHJlY2F0ZWQsIGJ1dCBpdHMgcmVwbGFjZW1lbnQgaXMgbm90IHlldCBmaW5hbCBh
bmQgbm90XG4gICAgLy8gaW1wbGVtZW50ZWQgaW4gYW55IG1ham9yIGJyb3dzZXIuIE9ubHkgS2V5
UHJlc3MgaGFzIGNoYXJDb2RlLlxuICAgIGlmIChldmVudC50eXBlID09PSAna2V5cHJlc3MnKSB7
XG4gICAgICByZXR1cm4gZ2V0RXZlbnRDaGFyQ29kZShldmVudCk7XG4gICAgfVxuICAgIHJldHVy
biAwO1xuICB9LFxuICBrZXlDb2RlOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAvLyBga2V5Q29k
ZWAgaXMgdGhlIHJlc3VsdCBvZiBhIEtleURvd24vVXAgZXZlbnQgYW5kIHJlcHJlc2VudHMgdGhl
IHZhbHVlIG9mXG4gICAgLy8gcGh5c2ljYWwga2V5Ym9hcmQga2V5LlxuXG4gICAgLy8gVGhlIGFj
dHVhbCBtZWFuaW5nIG9mIHRoZSB2YWx1ZSBkZXBlbmRzIG9uIHRoZSB1c2Vycycga2V5Ym9hcmQg
bGF5b3V0XG4gICAgLy8gd2hpY2ggY2Fubm90IGJlIGRldGVjdGVkLiBBc3N1bWluZyB0aGF0IGl0
IGlzIGEgVVMga2V5Ym9hcmQgbGF5b3V0XG4gICAgLy8gcHJvdmlkZXMgYSBzdXJwcmlzaW5nbHkg
YWNjdXJhdGUgbWFwcGluZyBmb3IgVVMgYW5kIEV1cm9wZWFuIHVzZXJzLlxuICAgIC8vIER1ZSB0
byB0aGlzLCBpdCBpcyBsZWZ0IHRvIHRoZSB1c2VyIHRvIGltcGxlbWVudCBhdCB0aGlzIHRpbWUu
XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdrZXlkb3duJyB8fCBldmVudC50eXBlID09PSAna2V5
dXAnKSB7XG4gICAgICByZXR1cm4gZXZlbnQua2V5Q29kZTtcbiAgICB9XG4gICAgcmV0dXJuIDA7
XG4gIH0sXG4gIHdoaWNoOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAvLyBgd2hpY2hgIGlzIGFu
IGFsaWFzIGZvciBlaXRoZXIgYGtleUNvZGVgIG9yIGBjaGFyQ29kZWAgZGVwZW5kaW5nIG9uIHRo
ZVxuICAgIC8vIHR5cGUgb2YgdGhlIGV2ZW50LlxuICAgIGlmIChldmVudC50eXBlID09PSAna2V5
cHJlc3MnKSB7XG4gICAgICByZXR1cm4gZ2V0RXZlbnRDaGFyQ29kZShldmVudCk7XG4gICAgfVxu
ICAgIGlmIChldmVudC50eXBlID09PSAna2V5ZG93bicgfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVw
Jykge1xuICAgICAgcmV0dXJuIGV2ZW50LmtleUNvZGU7XG4gICAgfVxuICAgIHJldHVybiAwO1xu
ICB9XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkaXNwYXRjaENvbmZpZyBDb25maWd1
cmF0aW9uIHVzZWQgdG8gZGlzcGF0Y2ggdGhpcyBldmVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBk
aXNwYXRjaE1hcmtlciBNYXJrZXIgaWRlbnRpZnlpbmcgdGhlIGV2ZW50IHRhcmdldC5cbiAqIEBw
YXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEBleHRl
bmRzIHtTeW50aGV0aWNVSUV2ZW50fVxuICovXG5mdW5jdGlvbiBTeW50aGV0aWNLZXlib2FyZEV2
ZW50KGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2
ZW50VGFyZ2V0KSB7XG4gIHJldHVybiBTeW50aGV0aWNVSUV2ZW50LmNhbGwodGhpcywgZGlzcGF0
Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQp
O1xufVxuXG5TeW50aGV0aWNVSUV2ZW50LmF1Z21lbnRDbGFzcyhTeW50aGV0aWNLZXlib2FyZEV2
ZW50LCBLZXlib2FyZEV2ZW50SW50ZXJmYWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW50aGV0
aWNLZXlib2FyZEV2ZW50O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09U
RVJcbi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvU3ludGhldGljS2V5Ym9hcmRFdmVu
dC5qc1xuLy8gbW9kdWxlIGlkID0gMTgyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qKlxuICog
Q29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNE
LXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qg
ZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9m
IHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNh
bWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBnZXRFdmVudENo
YXJDb2RlID0gcmVxdWlyZSgnLi9nZXRFdmVudENoYXJDb2RlJyk7XG5cbi8qKlxuICogTm9ybWFs
aXphdGlvbiBvZiBkZXByZWNhdGVkIEhUTUw1IGBrZXlgIHZhbHVlc1xuICogQHNlZSBodHRwczov
L2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudCNL
ZXlfbmFtZXNcbiAqL1xudmFyIG5vcm1hbGl6ZUtleSA9IHtcbiAgRXNjOiAnRXNjYXBlJyxcbiAg
U3BhY2ViYXI6ICcgJyxcbiAgTGVmdDogJ0Fycm93TGVmdCcsXG4gIFVwOiAnQXJyb3dVcCcsXG4g
IFJpZ2h0OiAnQXJyb3dSaWdodCcsXG4gIERvd246ICdBcnJvd0Rvd24nLFxuICBEZWw6ICdEZWxl
dGUnLFxuICBXaW46ICdPUycsXG4gIE1lbnU6ICdDb250ZXh0TWVudScsXG4gIEFwcHM6ICdDb250
ZXh0TWVudScsXG4gIFNjcm9sbDogJ1Njcm9sbExvY2snLFxuICBNb3pQcmludGFibGVLZXk6ICdV
bmlkZW50aWZpZWQnXG59O1xuXG4vKipcbiAqIFRyYW5zbGF0aW9uIGZyb20gbGVnYWN5IGBrZXlD
b2RlYCB0byBIVE1MNSBga2V5YFxuICogT25seSBzcGVjaWFsIGtleXMgc3VwcG9ydGVkLCBhbGwg
b3RoZXJzIGRlcGVuZCBvbiBrZXlib2FyZCBsYXlvdXQgb3IgYnJvd3NlclxuICogQHNlZSBodHRw
czovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVu
dCNLZXlfbmFtZXNcbiAqL1xudmFyIHRyYW5zbGF0ZVRvS2V5ID0ge1xuICA4OiAnQmFja3NwYWNl
JyxcbiAgOTogJ1RhYicsXG4gIDEyOiAnQ2xlYXInLFxuICAxMzogJ0VudGVyJyxcbiAgMTY6ICdT
aGlmdCcsXG4gIDE3OiAnQ29udHJvbCcsXG4gIDE4OiAnQWx0JyxcbiAgMTk6ICdQYXVzZScsXG4g
IDIwOiAnQ2Fwc0xvY2snLFxuICAyNzogJ0VzY2FwZScsXG4gIDMyOiAnICcsXG4gIDMzOiAnUGFn
ZVVwJyxcbiAgMzQ6ICdQYWdlRG93bicsXG4gIDM1OiAnRW5kJyxcbiAgMzY6ICdIb21lJyxcbiAg
Mzc6ICdBcnJvd0xlZnQnLFxuICAzODogJ0Fycm93VXAnLFxuICAzOTogJ0Fycm93UmlnaHQnLFxu
ICA0MDogJ0Fycm93RG93bicsXG4gIDQ1OiAnSW5zZXJ0JyxcbiAgNDY6ICdEZWxldGUnLFxuICAx
MTI6ICdGMScsXG4gIDExMzogJ0YyJyxcbiAgMTE0OiAnRjMnLFxuICAxMTU6ICdGNCcsXG4gIDEx
NjogJ0Y1JyxcbiAgMTE3OiAnRjYnLFxuICAxMTg6ICdGNycsXG4gIDExOTogJ0Y4JyxcbiAgMTIw
OiAnRjknLFxuICAxMjE6ICdGMTAnLFxuICAxMjI6ICdGMTEnLFxuICAxMjM6ICdGMTInLFxuICAx
NDQ6ICdOdW1Mb2NrJyxcbiAgMTQ1OiAnU2Nyb2xsTG9jaycsXG4gIDIyNDogJ01ldGEnXG59O1xu
XG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVu
dC5cbiAqIEByZXR1cm4ge3N0cmluZ30gTm9ybWFsaXplZCBga2V5YCBwcm9wZXJ0eS5cbiAqL1xu
ZnVuY3Rpb24gZ2V0RXZlbnRLZXkobmF0aXZlRXZlbnQpIHtcbiAgaWYgKG5hdGl2ZUV2ZW50Lmtl
eSkge1xuICAgIC8vIE5vcm1hbGl6ZSBpbmNvbnNpc3RlbnQgdmFsdWVzIHJlcG9ydGVkIGJ5IGJy
b3dzZXJzIGR1ZSB0b1xuICAgIC8vIGltcGxlbWVudGF0aW9ucyBvZiBhIHdvcmtpbmcgZHJhZnQg
c3BlY2lmaWNhdGlvbi5cblxuICAgIC8vIEZpcmVGb3ggaW1wbGVtZW50cyBga2V5YCBidXQgcmV0
dXJucyBgTW96UHJpbnRhYmxlS2V5YCBmb3IgYWxsXG4gICAgLy8gcHJpbnRhYmxlIGNoYXJhY3Rl
cnMgKG5vcm1hbGl6ZWQgdG8gYFVuaWRlbnRpZmllZGApLCBpZ25vcmUgaXQuXG4gICAgdmFyIGtl
eSA9IG5vcm1hbGl6ZUtleVtuYXRpdmVFdmVudC5rZXldIHx8IG5hdGl2ZUV2ZW50LmtleTtcbiAg
ICBpZiAoa2V5ICE9PSAnVW5pZGVudGlmaWVkJykge1xuICAgICAgcmV0dXJuIGtleTtcbiAgICB9
XG4gIH1cblxuICAvLyBCcm93c2VyIGRvZXMgbm90IGltcGxlbWVudCBga2V5YCwgcG9seWZpbGwg
YXMgbXVjaCBvZiBpdCBhcyB3ZSBjYW4uXG4gIGlmIChuYXRpdmVFdmVudC50eXBlID09PSAna2V5
cHJlc3MnKSB7XG4gICAgdmFyIGNoYXJDb2RlID0gZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVu
dCk7XG5cbiAgICAvLyBUaGUgZW50ZXIta2V5IGlzIHRlY2huaWNhbGx5IGJvdGggcHJpbnRhYmxl
IGFuZCBub24tcHJpbnRhYmxlIGFuZCBjYW5cbiAgICAvLyB0aHVzIGJlIGNhcHR1cmVkIGJ5IGBr
ZXlwcmVzc2AsIG5vIG90aGVyIG5vbi1wcmludGFibGUga2V5IHNob3VsZC5cbiAgICByZXR1cm4g
Y2hhckNvZGUgPT09IDEzID8gJ0VudGVyJyA6IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGUp
O1xuICB9XG4gIGlmIChuYXRpdmVFdmVudC50eXBlID09PSAna2V5ZG93bicgfHwgbmF0aXZlRXZl
bnQudHlwZSA9PT0gJ2tleXVwJykge1xuICAgIC8vIFdoaWxlIHVzZXIga2V5Ym9hcmQgbGF5b3V0
IGRldGVybWluZXMgdGhlIGFjdHVhbCBtZWFuaW5nIG9mIGVhY2hcbiAgICAvLyBga2V5Q29kZWAg
dmFsdWUsIGFsbW9zdCBhbGwgZnVuY3Rpb24ga2V5cyBoYXZlIGEgdW5pdmVyc2FsIHZhbHVlLlxu
ICAgIHJldHVybiB0cmFuc2xhdGVUb0tleVtuYXRpdmVFdmVudC5rZXlDb2RlXSB8fCAnVW5pZGVu
dGlmaWVkJztcbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0RXZl
bnRLZXk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9u
b2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9nZXRFdmVudEtleS5qc1xuLy8gbW9kdWxlIGlkID0g
MTgzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2Vu
dCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBz
b3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQg
aW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291
cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJl
IGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAq
L1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBTeW50aGV0aWNNb3VzZUV2ZW50ID0gcmVxdWlyZSgn
Li9TeW50aGV0aWNNb3VzZUV2ZW50Jyk7XG5cbi8qKlxuICogQGludGVyZmFjZSBEcmFnRXZlbnRc
biAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG52
YXIgRHJhZ0V2ZW50SW50ZXJmYWNlID0ge1xuICBkYXRhVHJhbnNmZXI6IG51bGxcbn07XG5cbi8q
KlxuICogQHBhcmFtIHtvYmplY3R9IGRpc3BhdGNoQ29uZmlnIENvbmZpZ3VyYXRpb24gdXNlZCB0
byBkaXNwYXRjaCB0aGlzIGV2ZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGRpc3BhdGNoTWFya2Vy
IE1hcmtlciBpZGVudGlmeWluZyB0aGUgZXZlbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtvYmplY3R9
IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQGV4dGVuZHMge1N5bnRoZXRp
Y1VJRXZlbnR9XG4gKi9cbmZ1bmN0aW9uIFN5bnRoZXRpY0RyYWdFdmVudChkaXNwYXRjaENvbmZp
ZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICBy
ZXR1cm4gU3ludGhldGljTW91c2VFdmVudC5jYWxsKHRoaXMsIGRpc3BhdGNoQ29uZmlnLCBkaXNw
YXRjaE1hcmtlciwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbn1cblxuU3ludGhl
dGljTW91c2VFdmVudC5hdWdtZW50Q2xhc3MoU3ludGhldGljRHJhZ0V2ZW50LCBEcmFnRXZlbnRJ
bnRlcmZhY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bnRoZXRpY0RyYWdFdmVudDtcblxuXG4v
Ly8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9y
ZWFjdC1kb20vbGliL1N5bnRoZXRpY0RyYWdFdmVudC5qc1xuLy8gbW9kdWxlIGlkID0gMTg0XG4v
LyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFj
ZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2Ug
Y29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhl
XG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRy
ZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5k
IGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4n
dXNlIHN0cmljdCc7XG5cbnZhciBTeW50aGV0aWNVSUV2ZW50ID0gcmVxdWlyZSgnLi9TeW50aGV0
aWNVSUV2ZW50Jyk7XG5cbnZhciBnZXRFdmVudE1vZGlmaWVyU3RhdGUgPSByZXF1aXJlKCcuL2dl
dEV2ZW50TW9kaWZpZXJTdGF0ZScpO1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgVG91Y2hFdmVudFxu
ICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi90b3VjaC1ldmVudHMvXG4gKi9cbnZhciBUb3Vj
aEV2ZW50SW50ZXJmYWNlID0ge1xuICB0b3VjaGVzOiBudWxsLFxuICB0YXJnZXRUb3VjaGVzOiBu
dWxsLFxuICBjaGFuZ2VkVG91Y2hlczogbnVsbCxcbiAgYWx0S2V5OiBudWxsLFxuICBtZXRhS2V5
OiBudWxsLFxuICBjdHJsS2V5OiBudWxsLFxuICBzaGlmdEtleTogbnVsbCxcbiAgZ2V0TW9kaWZp
ZXJTdGF0ZTogZ2V0RXZlbnRNb2RpZmllclN0YXRlXG59O1xuXG4vKipcbiAqIEBwYXJhbSB7b2Jq
ZWN0fSBkaXNwYXRjaENvbmZpZyBDb25maWd1cmF0aW9uIHVzZWQgdG8gZGlzcGF0Y2ggdGhpcyBl
dmVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXNwYXRjaE1hcmtlciBNYXJrZXIgaWRlbnRpZnlp
bmcgdGhlIGV2ZW50IHRhcmdldC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRp
dmUgYnJvd3NlciBldmVudC5cbiAqIEBleHRlbmRzIHtTeW50aGV0aWNVSUV2ZW50fVxuICovXG5m
dW5jdGlvbiBTeW50aGV0aWNUb3VjaEV2ZW50KGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtl
ciwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHJldHVybiBTeW50aGV0aWNV
SUV2ZW50LmNhbGwodGhpcywgZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVF
dmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xufVxuXG5TeW50aGV0aWNVSUV2ZW50LmF1Z21lbnRD
bGFzcyhTeW50aGV0aWNUb3VjaEV2ZW50LCBUb3VjaEV2ZW50SW50ZXJmYWNlKTtcblxubW9kdWxl
LmV4cG9ydHMgPSBTeW50aGV0aWNUb3VjaEV2ZW50O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xu
Ly8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvU3ludGhl
dGljVG91Y2hFdmVudC5qc1xuLy8gbW9kdWxlIGlkID0gMTg1XG4vLyBtb2R1bGUgY2h1bmtzID0g
MCIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1
bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwg
Z3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZp
bGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZh
ciBTeW50aGV0aWNFdmVudCA9IHJlcXVpcmUoJy4vU3ludGhldGljRXZlbnQnKTtcblxuLyoqXG4g
KiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDkvV0Qt
Y3NzMy10cmFuc2l0aW9ucy0yMDA5MDMyMC8jdHJhbnNpdGlvbi1ldmVudHMtXG4gKiBAc2VlIGh0
dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9UcmFuc2l0aW9u
RXZlbnRcbiAqL1xudmFyIFRyYW5zaXRpb25FdmVudEludGVyZmFjZSA9IHtcbiAgcHJvcGVydHlO
YW1lOiBudWxsLFxuICBlbGFwc2VkVGltZTogbnVsbCxcbiAgcHNldWRvRWxlbWVudDogbnVsbFxu
fTtcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZGlzcGF0Y2hDb25maWcgQ29uZmlndXJhdGlv
biB1c2VkIHRvIGRpc3BhdGNoIHRoaXMgZXZlbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlzcGF0
Y2hNYXJrZXIgTWFya2VyIGlkZW50aWZ5aW5nIHRoZSBldmVudCB0YXJnZXQuXG4gKiBAcGFyYW0g
e29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAZXh0ZW5kcyB7
U3ludGhldGljRXZlbnR9XG4gKi9cbmZ1bmN0aW9uIFN5bnRoZXRpY1RyYW5zaXRpb25FdmVudChk
aXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRh
cmdldCkge1xuICByZXR1cm4gU3ludGhldGljRXZlbnQuY2FsbCh0aGlzLCBkaXNwYXRjaENvbmZp
ZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG59XG5c
blN5bnRoZXRpY0V2ZW50LmF1Z21lbnRDbGFzcyhTeW50aGV0aWNUcmFuc2l0aW9uRXZlbnQsIFRy
YW5zaXRpb25FdmVudEludGVyZmFjZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ludGhldGljVHJh
bnNpdGlvbkV2ZW50O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJc
bi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvU3ludGhldGljVHJhbnNpdGlvbkV2ZW50
LmpzXG4vLyBtb2R1bGUgaWQgPSAxODZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyoqXG4gKiBD
b3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNl
cnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qt
c3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBk
aXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2Yg
cGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2Ft
ZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFN5bnRoZXRpY01v
dXNlRXZlbnQgPSByZXF1aXJlKCcuL1N5bnRoZXRpY01vdXNlRXZlbnQnKTtcblxuLyoqXG4gKiBA
aW50ZXJmYWNlIFdoZWVsRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxl
dmVsLTMtRXZlbnRzL1xuICovXG52YXIgV2hlZWxFdmVudEludGVyZmFjZSA9IHtcbiAgZGVsdGFY
OiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gJ2RlbHRhWCcgaW4gZXZlbnQgPyBldmVu
dC5kZWx0YVggOiAvLyBGYWxsYmFjayB0byBgd2hlZWxEZWx0YVhgIGZvciBXZWJraXQgYW5kIG5v
cm1hbGl6ZSAocmlnaHQgaXMgcG9zaXRpdmUpLlxuICAgICd3aGVlbERlbHRhWCcgaW4gZXZlbnQg
PyAtZXZlbnQud2hlZWxEZWx0YVggOiAwO1xuICB9LFxuICBkZWx0YVk6IGZ1bmN0aW9uIChldmVu
dCkge1xuICAgIHJldHVybiAnZGVsdGFZJyBpbiBldmVudCA/IGV2ZW50LmRlbHRhWSA6IC8vIEZh
bGxiYWNrIHRvIGB3aGVlbERlbHRhWWAgZm9yIFdlYmtpdCBhbmQgbm9ybWFsaXplIChkb3duIGlz
IHBvc2l0aXZlKS5cbiAgICAnd2hlZWxEZWx0YVknIGluIGV2ZW50ID8gLWV2ZW50LndoZWVsRGVs
dGFZIDogLy8gRmFsbGJhY2sgdG8gYHdoZWVsRGVsdGFgIGZvciBJRTw5IGFuZCBub3JtYWxpemUg
KGRvd24gaXMgcG9zaXRpdmUpLlxuICAgICd3aGVlbERlbHRhJyBpbiBldmVudCA/IC1ldmVudC53
aGVlbERlbHRhIDogMDtcbiAgfSxcbiAgZGVsdGFaOiBudWxsLFxuXG4gIC8vIEJyb3dzZXJzIHdp
dGhvdXQgXCJkZWx0YU1vZGVcIiBpcyByZXBvcnRpbmcgaW4gcmF3IHdoZWVsIGRlbHRhIHdoZXJl
IG9uZVxuICAvLyBub3RjaCBvbiB0aGUgc2Nyb2xsIGlzIGFsd2F5cyArLy0gMTIwLCByb3VnaGx5
IGVxdWl2YWxlbnQgdG8gcGl4ZWxzLlxuICAvLyBBIGdvb2QgYXBwcm94aW1hdGlvbiBvZiBET01f
REVMVEFfTElORSAoMSkgaXMgNSUgb2Ygdmlld3BvcnQgc2l6ZSBvclxuICAvLyB+NDAgcGl4ZWxz
LCBmb3IgRE9NX0RFTFRBX1NDUkVFTiAoMikgaXQgaXMgODcuNSUgb2Ygdmlld3BvcnQgc2l6ZS5c
biAgZGVsdGFNb2RlOiBudWxsXG59O1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkaXNwYXRj
aENvbmZpZyBDb25maWd1cmF0aW9uIHVzZWQgdG8gZGlzcGF0Y2ggdGhpcyBldmVudC5cbiAqIEBw
YXJhbSB7c3RyaW5nfSBkaXNwYXRjaE1hcmtlciBNYXJrZXIgaWRlbnRpZnlpbmcgdGhlIGV2ZW50
IHRhcmdldC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBl
dmVudC5cbiAqIEBleHRlbmRzIHtTeW50aGV0aWNNb3VzZUV2ZW50fVxuICovXG5mdW5jdGlvbiBT
eW50aGV0aWNXaGVlbEV2ZW50KGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZl
RXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHJldHVybiBTeW50aGV0aWNNb3VzZUV2ZW50
LmNhbGwodGhpcywgZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCwg
bmF0aXZlRXZlbnRUYXJnZXQpO1xufVxuXG5TeW50aGV0aWNNb3VzZUV2ZW50LmF1Z21lbnRDbGFz
cyhTeW50aGV0aWNXaGVlbEV2ZW50LCBXaGVlbEV2ZW50SW50ZXJmYWNlKTtcblxubW9kdWxlLmV4
cG9ydHMgPSBTeW50aGV0aWNXaGVlbEV2ZW50O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8g
V0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvU3ludGhldGlj
V2hlZWxFdmVudC5qc1xuLy8gbW9kdWxlIGlkID0gMTg3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIs
Ii8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRl
ciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4g
dGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3Jh
bnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUg
aW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciB2
YWxpZGF0ZURPTU5lc3RpbmcgPSByZXF1aXJlKCcuL3ZhbGlkYXRlRE9NTmVzdGluZycpO1xuXG52
YXIgRE9DX05PREVfVFlQRSA9IDk7XG5cbmZ1bmN0aW9uIFJlYWN0RE9NQ29udGFpbmVySW5mbyh0
b3BMZXZlbFdyYXBwZXIsIG5vZGUpIHtcbiAgdmFyIGluZm8gPSB7XG4gICAgX3RvcExldmVsV3Jh
cHBlcjogdG9wTGV2ZWxXcmFwcGVyLFxuICAgIF9pZENvdW50ZXI6IDEsXG4gICAgX293bmVyRG9j
dW1lbnQ6IG5vZGUgPyBub2RlLm5vZGVUeXBlID09PSBET0NfTk9ERV9UWVBFID8gbm9kZSA6IG5v
ZGUub3duZXJEb2N1bWVudCA6IG51bGwsXG4gICAgX25vZGU6IG5vZGUsXG4gICAgX3RhZzogbm9k
ZSA/IG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA6IG51bGwsXG4gICAgX25hbWVzcGFjZVVS
STogbm9kZSA/IG5vZGUubmFtZXNwYWNlVVJJIDogbnVsbFxuICB9O1xuICBpZiAocHJvY2Vzcy5l
bnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGluZm8uX2FuY2VzdG9ySW5mbyA9
IG5vZGUgPyB2YWxpZGF0ZURPTU5lc3RpbmcudXBkYXRlZEFuY2VzdG9ySW5mbyhudWxsLCBpbmZv
Ll90YWcsIG51bGwpIDogbnVsbDtcbiAgfVxuICByZXR1cm4gaW5mbztcbn1cblxubW9kdWxlLmV4
cG9ydHMgPSBSZWFjdERPTUNvbnRhaW5lckluZm87XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4v
LyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdERP
TUNvbnRhaW5lckluZm8uanNcbi8vIG1vZHVsZSBpZCA9IDE4OFxuLy8gbW9kdWxlIGNodW5rcyA9
IDAiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBB
bGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQg
dW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxl
IGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFs
IGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBm
aWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52
YXIgUmVhY3RET01GZWF0dXJlRmxhZ3MgPSB7XG4gIHVzZUNyZWF0ZUVsZW1lbnQ6IHRydWUsXG4g
IHVzZUZpYmVyOiBmYWxzZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdERPTUZlYXR1cmVG
bGFncztcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25v
ZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RE9NRmVhdHVyZUZsYWdzLmpzXG4vLyBtb2R1
bGUgaWQgPSAxODlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAx
My1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4g
KiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5z
ZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2Yg
dGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0
cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3Rvcnku
XG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGFkbGVyMzIgPSByZXF1aXJlKCcuL2Fk
bGVyMzInKTtcblxudmFyIFRBR19FTkQgPSAvXFwvPz4vO1xudmFyIENPTU1FTlRfU1RBUlQgPSAv
XjxcXCFcXC1cXC0vO1xuXG52YXIgUmVhY3RNYXJrdXBDaGVja3N1bSA9IHtcbiAgQ0hFQ0tTVU1f
QVRUUl9OQU1FOiAnZGF0YS1yZWFjdC1jaGVja3N1bScsXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7
c3RyaW5nfSBtYXJrdXAgTWFya3VwIHN0cmluZ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IE1hcmt1
cCBzdHJpbmcgd2l0aCBjaGVja3N1bSBhdHRyaWJ1dGUgYXR0YWNoZWRcbiAgICovXG4gIGFkZENo
ZWNrc3VtVG9NYXJrdXA6IGZ1bmN0aW9uIChtYXJrdXApIHtcbiAgICB2YXIgY2hlY2tzdW0gPSBh
ZGxlcjMyKG1hcmt1cCk7XG5cbiAgICAvLyBBZGQgY2hlY2tzdW0gKGhhbmRsZSBib3RoIHBhcmVu
dCB0YWdzLCBjb21tZW50cyBhbmQgc2VsZi1jbG9zaW5nIHRhZ3MpXG4gICAgaWYgKENPTU1FTlRf
U1RBUlQudGVzdChtYXJrdXApKSB7XG4gICAgICByZXR1cm4gbWFya3VwO1xuICAgIH0gZWxzZSB7
XG4gICAgICByZXR1cm4gbWFya3VwLnJlcGxhY2UoVEFHX0VORCwgJyAnICsgUmVhY3RNYXJrdXBD
aGVja3N1bS5DSEVDS1NVTV9BVFRSX05BTUUgKyAnPVwiJyArIGNoZWNrc3VtICsgJ1wiJCYnKTtc
biAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtYXJrdXAgdG8gdXNl
XG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gZWxlbWVudCByb290IFJlYWN0IGVsZW1lbnRcbiAg
ICogQHJldHVybnMge2Jvb2xlYW59IHdoZXRoZXIgb3Igbm90IHRoZSBtYXJrdXAgaXMgdGhlIHNh
bWVcbiAgICovXG4gIGNhblJldXNlTWFya3VwOiBmdW5jdGlvbiAobWFya3VwLCBlbGVtZW50KSB7
XG4gICAgdmFyIGV4aXN0aW5nQ2hlY2tzdW0gPSBlbGVtZW50LmdldEF0dHJpYnV0ZShSZWFjdE1h
cmt1cENoZWNrc3VtLkNIRUNLU1VNX0FUVFJfTkFNRSk7XG4gICAgZXhpc3RpbmdDaGVja3N1bSA9
IGV4aXN0aW5nQ2hlY2tzdW0gJiYgcGFyc2VJbnQoZXhpc3RpbmdDaGVja3N1bSwgMTApO1xuICAg
IHZhciBtYXJrdXBDaGVja3N1bSA9IGFkbGVyMzIobWFya3VwKTtcbiAgICByZXR1cm4gbWFya3Vw
Q2hlY2tzdW0gPT09IGV4aXN0aW5nQ2hlY2tzdW07XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRz
ID0gUmVhY3RNYXJrdXBDaGVja3N1bTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBB
Q0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0TWFya3VwQ2hl
Y2tzdW0uanNcbi8vIG1vZHVsZSBpZCA9IDE5MFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipc
biAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRz
IHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhl
IEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSBy
b290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4g
KiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRo
ZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBN
T0QgPSA2NTUyMTtcblxuLy8gYWRsZXIzMiBpcyBub3QgY3J5cHRvZ3JhcGhpY2FsbHkgc3Ryb25n
LCBhbmQgaXMgb25seSB1c2VkIHRvIHNhbml0eSBjaGVjayB0aGF0XG4vLyBtYXJrdXAgZ2VuZXJh
dGVkIG9uIHRoZSBzZXJ2ZXIgbWF0Y2hlcyB0aGUgbWFya3VwIGdlbmVyYXRlZCBvbiB0aGUgY2xp
ZW50LlxuLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiAoYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBT
aGVldEpTIHZlcnNpb24pIGhhcyBiZWVuIG9wdGltaXplZFxuLy8gZm9yIG91ciB1c2UgY2FzZSwg
YXQgdGhlIGV4cGVuc2Ugb2YgY29uZm9ybWluZyB0byB0aGUgYWRsZXIzMiBzcGVjaWZpY2F0aW9u
XG4vLyBmb3Igbm9uLWFzY2lpIGlucHV0cy5cbmZ1bmN0aW9uIGFkbGVyMzIoZGF0YSkge1xuICB2
YXIgYSA9IDE7XG4gIHZhciBiID0gMDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgbCA9IGRhdGEubGVu
Z3RoO1xuICB2YXIgbSA9IGwgJiB+MHgzO1xuICB3aGlsZSAoaSA8IG0pIHtcbiAgICB2YXIgbiA9
IE1hdGgubWluKGkgKyA0MDk2LCBtKTtcbiAgICBmb3IgKDsgaSA8IG47IGkgKz0gNCkge1xuICAg
ICAgYiArPSAoYSArPSBkYXRhLmNoYXJDb2RlQXQoaSkpICsgKGEgKz0gZGF0YS5jaGFyQ29kZUF0
KGkgKyAxKSkgKyAoYSArPSBkYXRhLmNoYXJDb2RlQXQoaSArIDIpKSArIChhICs9IGRhdGEuY2hh
ckNvZGVBdChpICsgMykpO1xuICAgIH1cbiAgICBhICU9IE1PRDtcbiAgICBiICU9IE1PRDtcbiAg
fVxuICBmb3IgKDsgaSA8IGw7IGkrKykge1xuICAgIGIgKz0gYSArPSBkYXRhLmNoYXJDb2RlQXQo
aSk7XG4gIH1cbiAgYSAlPSBNT0Q7XG4gIGIgJT0gTU9EO1xuICByZXR1cm4gYSB8IGIgPDwgMTY7
XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYWRsZXIzMjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9c
bi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL2FkbGVy
MzIuanNcbi8vIG1vZHVsZSBpZCA9IDE5MVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipcbiAq
IENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJl
c2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJT
RC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290
IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBv
ZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBz
YW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0
cyA9ICcxNS42LjEnO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJc
bi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RWZXJzaW9uLmpzXG4vLyBtb2R1
bGUgaWQgPSAxOTJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAx
My1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4g
KiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5z
ZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2Yg
dGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0
cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3Rvcnku
XG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9wcm9kSW52YXJpYW50ID0gcmVxdWly
ZSgnLi9yZWFjdFByb2RJbnZhcmlhbnQnKTtcblxudmFyIFJlYWN0Q3VycmVudE93bmVyID0gcmVx
dWlyZSgncmVhY3QvbGliL1JlYWN0Q3VycmVudE93bmVyJyk7XG52YXIgUmVhY3RET01Db21wb25l
bnRUcmVlID0gcmVxdWlyZSgnLi9SZWFjdERPTUNvbXBvbmVudFRyZWUnKTtcbnZhciBSZWFjdElu
c3RhbmNlTWFwID0gcmVxdWlyZSgnLi9SZWFjdEluc3RhbmNlTWFwJyk7XG5cbnZhciBnZXRIb3N0
Q29tcG9uZW50RnJvbUNvbXBvc2l0ZSA9IHJlcXVpcmUoJy4vZ2V0SG9zdENvbXBvbmVudEZyb21D
b21wb3NpdGUnKTtcbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKCdmYmpzL2xpYi9pbnZhcmlhbnQn
KTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuXG4vKipcbiAq
IFJldHVybnMgdGhlIERPTSBub2RlIHJlbmRlcmVkIGJ5IHRoaXMgZWxlbWVudC5cbiAqXG4gKiBT
ZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy90b3AtbGV2ZWwtYXBpLmh0
bWwjcmVhY3Rkb20uZmluZGRvbW5vZGVcbiAqXG4gKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fERP
TUVsZW1lbnR9IGNvbXBvbmVudE9yRWxlbWVudFxuICogQHJldHVybiB7P0RPTUVsZW1lbnR9IFRo
ZSByb290IG5vZGUgb2YgdGhpcyBlbGVtZW50LlxuICovXG5mdW5jdGlvbiBmaW5kRE9NTm9kZShj
b21wb25lbnRPckVsZW1lbnQpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJv
ZHVjdGlvbicpIHtcbiAgICB2YXIgb3duZXIgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50O1xu
ICAgIGlmIChvd25lciAhPT0gbnVsbCkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09
ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcob3duZXIuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyLCAn
JXMgaXMgYWNjZXNzaW5nIGZpbmRET01Ob2RlIGluc2lkZSBpdHMgcmVuZGVyKCkuICcgKyAncmVu
ZGVyKCkgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbiBvZiBwcm9wcyBhbmQgc3RhdGUuIEl0IHNo
b3VsZCAnICsgJ25ldmVyIGFjY2VzcyBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyBzdGFsZSBkYXRh
IGZyb20gdGhlIHByZXZpb3VzICcgKyAncmVuZGVyLCBzdWNoIGFzIHJlZnMuIE1vdmUgdGhpcyBs
b2dpYyB0byBjb21wb25lbnREaWRNb3VudCBhbmQgJyArICdjb21wb25lbnREaWRVcGRhdGUgaW5z
dGVhZC4nLCBvd25lci5nZXROYW1lKCkgfHwgJ0EgY29tcG9uZW50JykgOiB2b2lkIDA7XG4gICAg
ICBvd25lci5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBp
ZiAoY29tcG9uZW50T3JFbGVtZW50ID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxu
ICBpZiAoY29tcG9uZW50T3JFbGVtZW50Lm5vZGVUeXBlID09PSAxKSB7XG4gICAgcmV0dXJuIGNv
bXBvbmVudE9yRWxlbWVudDtcbiAgfVxuXG4gIHZhciBpbnN0ID0gUmVhY3RJbnN0YW5jZU1hcC5n
ZXQoY29tcG9uZW50T3JFbGVtZW50KTtcbiAgaWYgKGluc3QpIHtcbiAgICBpbnN0ID0gZ2V0SG9z
dENvbXBvbmVudEZyb21Db21wb3NpdGUoaW5zdCk7XG4gICAgcmV0dXJuIGluc3QgPyBSZWFjdERP
TUNvbXBvbmVudFRyZWUuZ2V0Tm9kZUZyb21JbnN0YW5jZShpbnN0KSA6IG51bGw7XG4gIH1cblxu
ICBpZiAodHlwZW9mIGNvbXBvbmVudE9yRWxlbWVudC5yZW5kZXIgPT09ICdmdW5jdGlvbicpIHtc
biAgICAhZmFsc2UgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52
YXJpYW50KGZhbHNlLCAnZmluZERPTU5vZGUgd2FzIGNhbGxlZCBvbiBhbiB1bm1vdW50ZWQgY29t
cG9uZW50LicpIDogX3Byb2RJbnZhcmlhbnQoJzQ0JykgOiB2b2lkIDA7XG4gIH0gZWxzZSB7XG4g
ICAgIWZhbHNlID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFy
aWFudChmYWxzZSwgJ0VsZW1lbnQgYXBwZWFycyB0byBiZSBuZWl0aGVyIFJlYWN0Q29tcG9uZW50
IG5vciBET01Ob2RlIChrZXlzOiAlcyknLCBPYmplY3Qua2V5cyhjb21wb25lbnRPckVsZW1lbnQp
KSA6IF9wcm9kSW52YXJpYW50KCc0NScsIE9iamVjdC5rZXlzKGNvbXBvbmVudE9yRWxlbWVudCkp
IDogdm9pZCAwO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmluZERPTU5vZGU7XG5cblxu
Ly8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMv
cmVhY3QtZG9tL2xpYi9maW5kRE9NTm9kZS5qc1xuLy8gbW9kdWxlIGlkID0gMTkzXG4vLyBtb2R1
bGUgY2h1bmtzID0gMCIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ss
IEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBp
cyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBM
SUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFu
IGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRo
ZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0
cmljdCc7XG5cbnZhciBSZWFjdE1vdW50ID0gcmVxdWlyZSgnLi9SZWFjdE1vdW50Jyk7XG5cbm1v
ZHVsZS5leHBvcnRzID0gUmVhY3RNb3VudC5yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcjtcblxu
XG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxl
cy9yZWFjdC1kb20vbGliL3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyLmpzXG4vLyBtb2R1bGUg
aWQgPSAxOTRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0IFN5bWJvbCBmcm9tICcuL19T
eW1ib2wuanMnO1xuaW1wb3J0IGdldFJhd1RhZyBmcm9tICcuL19nZXRSYXdUYWcuanMnO1xuaW1w
b3J0IG9iamVjdFRvU3RyaW5nIGZyb20gJy4vX29iamVjdFRvU3RyaW5nLmpzJztcblxuLyoqIGBP
YmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG51bGxUYWcgPSAnW29i
amVjdCBOdWxsXScsXG4gICAgdW5kZWZpbmVkVGFnID0gJ1tvYmplY3QgVW5kZWZpbmVkXSc7XG5c
bi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0g
U3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBi
YXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRUYWdgIHdpdGhvdXQgZmFsbGJhY2tzIGZvciBidWdn
eSBlbnZpcm9ubWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhl
IHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3Ry
aW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSkge1xuICBpZiAodmFsdWUg
PT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkVGFn
IDogbnVsbFRhZztcbiAgfVxuICByZXR1cm4gKHN5bVRvU3RyaW5nVGFnICYmIHN5bVRvU3RyaW5n
VGFnIGluIE9iamVjdCh2YWx1ZSkpXG4gICAgPyBnZXRSYXdUYWcodmFsdWUpXG4gICAgOiBvYmpl
Y3RUb1N0cmluZyh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VHZXRUYWc7XG5cblxu
XG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxl
cy9sb2Rhc2gtZXMvX2Jhc2VHZXRUYWcuanNcbi8vIG1vZHVsZSBpZCA9IDE5NVxuLy8gbW9kdWxl
IGNodW5rcyA9IDAiLCJpbXBvcnQgZnJlZUdsb2JhbCBmcm9tICcuL19mcmVlR2xvYmFsLmpzJztc
blxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5
cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAm
JiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4g
Ki9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJu
IHRoaXMnKSgpO1xuXG5leHBvcnQgZGVmYXVsdCByb290O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8v
Ly8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19yb290
LmpzXG4vLyBtb2R1bGUgaWQgPSAxOTZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyoqIERldGVj
dCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFs
ID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9
PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxuZXhwb3J0IGRlZmF1bHQgZnJlZUdsb2JhbDtcblxuXG5c
bi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVz
L2xvZGFzaC1lcy9fZnJlZUdsb2JhbC5qc1xuLy8gbW9kdWxlIGlkID0gMTk3XG4vLyBtb2R1bGUg
Y2h1bmtzID0gMCIsImltcG9ydCBTeW1ib2wgZnJvbSAnLi9fU3ltYm9sLmpzJztcblxuLyoqIFVz
ZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0g
T2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHBy
b3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9w
ZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0o
aHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnBy
b3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRv
U3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZl
cmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5n
VGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFz
ZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gKlxu
ICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICog
QHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1
bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5j
YWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXG4gICAgICB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmlu
Z1RhZ107XG5cbiAgdHJ5IHtcbiAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB1bmRlZmluZWQ7
XG4gICAgdmFyIHVubWFza2VkID0gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge31cblxuICB2YXIgcmVz
dWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIGlmICh1bm1hc2tlZCkg
e1xuICAgIGlmIChpc093bikge1xuICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnO1xu
ICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuICAgIH1c
biAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXRSYXdUYWc7XG5c
blxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9k
dWxlcy9sb2Rhc2gtZXMvX2dldFJhd1RhZy5qc1xuLy8gbW9kdWxlIGlkID0gMTk4XG4vLyBtb2R1
bGUgY2h1bmtzID0gMCIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4g
Ki9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogVXNlZCB0
byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9u
YWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBv
ZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRv
U3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcgdXNpbmcgYE9i
amVjdC5wcm90b3R5cGUudG9TdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9
IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJu
cyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcodmFs
dWUpIHtcbiAgcmV0dXJuIG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xufVxuXG5l
eHBvcnQgZGVmYXVsdCBvYmplY3RUb1N0cmluZztcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xu
Ly8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb2JqZWN0VG9T
dHJpbmcuanNcbi8vIG1vZHVsZSBpZCA9IDE5OVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJpbXBv
cnQgb3ZlckFyZyBmcm9tICcuL19vdmVyQXJnLmpzJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJl
ZmVyZW5jZXMuICovXG52YXIgZ2V0UHJvdG90eXBlID0gb3ZlckFyZyhPYmplY3QuZ2V0UHJvdG90
eXBlT2YsIE9iamVjdCk7XG5cbmV4cG9ydCBkZWZhdWx0IGdldFByb3RvdHlwZTtcblxuXG5cbi8v
Ly8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2xv
ZGFzaC1lcy9fZ2V0UHJvdG90eXBlLmpzXG4vLyBtb2R1bGUgaWQgPSAyMDBcbi8vIG1vZHVsZSBj
aHVua3MgPSAwIiwiLyoqXG4gKiBDcmVhdGVzIGEgdW5hcnkgZnVuY3Rpb24gdGhhdCBpbnZva2Vz
IGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudCB0cmFuc2Zvcm1lZC5cbiAqXG4gKiBAcHJpdmF0ZVxu
ICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJh
bSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgYXJndW1lbnQgdHJhbnNmb3JtLlxuICogQHJldHVy
bnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92
ZXJBcmcoZnVuYywgdHJhbnNmb3JtKSB7XG4gIHJldHVybiBmdW5jdGlvbihhcmcpIHtcbiAgICBy
ZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IG92
ZXJBcmc7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAu
L25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX292ZXJBcmcuanNcbi8vIG1vZHVsZSBpZCA9IDIwMVxu
Ly8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVj
dC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5k
IGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAq
IEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFy
YW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBS
ZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4g
KiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAq
XG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8u
aXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RM
aWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZh
bHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0
Jztcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNPYmplY3RMaWtlO1xuXG5cblxuLy8vLy8vLy8vLy8v
Ly8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lz
T2JqZWN0TGlrZS5qc1xuLy8gbW9kdWxlIGlkID0gMjAyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIs
Im1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvaW5kZXgnKTtcblxuXG5cbi8vLy8vLy8v
Ly8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3N5bWJvbC1v
YnNlcnZhYmxlL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAyMDNcbi8vIG1vZHVsZSBjaHVua3Mg
PSAwIiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJf
X2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX3BvbnlmaWxsID0gcmVx
dWlyZSgnLi9wb255ZmlsbCcpO1xuXG52YXIgX3BvbnlmaWxsMiA9IF9pbnRlcm9wUmVxdWlyZURl
ZmF1bHQoX3BvbnlmaWxsKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmop
IHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmog
fTsgfVxuXG52YXIgcm9vdDsgLyogZ2xvYmFsIHdpbmRvdyAqL1xuXG5cbmlmICh0eXBlb2Ygc2Vs
ZiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgcm9vdCA9IHNlbGY7XG59IGVsc2UgaWYgKHR5cGVvZiB3
aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gIHJvb3QgPSB3aW5kb3c7XG59IGVsc2UgaWYgKHR5
cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XG4gIHJvb3QgPSBnbG9iYWw7XG59IGVsc2Ug
aWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnKSB7XG4gIHJvb3QgPSBtb2R1bGU7XG59
IGVsc2Uge1xuICByb290ID0gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbn1cblxudmFyIHJl
c3VsdCA9ICgwLCBfcG9ueWZpbGwyWydkZWZhdWx0J10pKHJvb3QpO1xuZXhwb3J0c1snZGVmYXVs
dCddID0gcmVzdWx0O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJc
bi8vIC4vbm9kZV9tb2R1bGVzL3N5bWJvbC1vYnNlcnZhYmxlL2xpYi9pbmRleC5qc1xuLy8gbW9k
dWxlIGlkID0gMjA0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gZnVu
Y3Rpb24obW9kdWxlKSB7XHJcblx0aWYoIW1vZHVsZS53ZWJwYWNrUG9seWZpbGwpIHtcclxuXHRc
dG1vZHVsZS5kZXByZWNhdGUgPSBmdW5jdGlvbigpIHt9O1xyXG5cdFx0bW9kdWxlLnBhdGhzID0g
W107XHJcblx0XHQvLyBtb2R1bGUucGFyZW50ID0gdW5kZWZpbmVkIGJ5IGRlZmF1bHRcclxuXHRc
dGlmKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xyXG5cdFx0T2JqZWN0
LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJsb2FkZWRcIiwge1xyXG5cdFx0XHRlbnVtZXJhYmxl
OiB0cnVlLFxyXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdHJldHVybiBtb2R1
bGUubDtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHko
bW9kdWxlLCBcImlkXCIsIHtcclxuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcclxuXHRcdFx0Z2V0
OiBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmk7XHJcblx0XHRcdH1cclxu
XHRcdH0pO1xyXG5cdFx0bW9kdWxlLndlYnBhY2tQb2x5ZmlsbCA9IDE7XHJcblx0fVxyXG5cdHJl
dHVybiBtb2R1bGU7XHJcbn07XHJcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFD
SyBGT09URVJcbi8vICh3ZWJwYWNrKS9idWlsZGluL21vZHVsZS5qc1xuLy8gbW9kdWxlIGlkID0g
MjA1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG5cdHZhbHVlOiB0cnVlXG59KTtc
bmV4cG9ydHNbJ2RlZmF1bHQnXSA9IHN5bWJvbE9ic2VydmFibGVQb255ZmlsbDtcbmZ1bmN0aW9u
IHN5bWJvbE9ic2VydmFibGVQb255ZmlsbChyb290KSB7XG5cdHZhciByZXN1bHQ7XG5cdHZhciBf
U3ltYm9sID0gcm9vdC5TeW1ib2w7XG5cblx0aWYgKHR5cGVvZiBfU3ltYm9sID09PSAnZnVuY3Rp
b24nKSB7XG5cdFx0aWYgKF9TeW1ib2wub2JzZXJ2YWJsZSkge1xuXHRcdFx0cmVzdWx0ID0gX1N5
bWJvbC5vYnNlcnZhYmxlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXN1bHQgPSBfU3ltYm9sKCdv
YnNlcnZhYmxlJyk7XG5cdFx0XHRfU3ltYm9sLm9ic2VydmFibGUgPSByZXN1bHQ7XG5cdFx0fVxu
XHR9IGVsc2Uge1xuXHRcdHJlc3VsdCA9ICdAQG9ic2VydmFibGUnO1xuXHR9XG5cblx0cmV0dXJu
IHJlc3VsdDtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxu
Ly8gLi9ub2RlX21vZHVsZXMvc3ltYm9sLW9ic2VydmFibGUvbGliL3BvbnlmaWxsLmpzXG4vLyBt
b2R1bGUgaWQgPSAyMDZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0IHsgQWN0aW9uVHlw
ZXMgfSBmcm9tICcuL2NyZWF0ZVN0b3JlJztcbmltcG9ydCBpc1BsYWluT2JqZWN0IGZyb20gJ2xv
ZGFzaC1lcy9pc1BsYWluT2JqZWN0JztcbmltcG9ydCB3YXJuaW5nIGZyb20gJy4vdXRpbHMvd2Fy
bmluZyc7XG5cbmZ1bmN0aW9uIGdldFVuZGVmaW5lZFN0YXRlRXJyb3JNZXNzYWdlKGtleSwgYWN0
aW9uKSB7XG4gIHZhciBhY3Rpb25UeXBlID0gYWN0aW9uICYmIGFjdGlvbi50eXBlO1xuICB2YXIg
YWN0aW9uTmFtZSA9IGFjdGlvblR5cGUgJiYgJ1wiJyArIGFjdGlvblR5cGUudG9TdHJpbmcoKSAr
ICdcIicgfHwgJ2FuIGFjdGlvbic7XG5cbiAgcmV0dXJuICdHaXZlbiBhY3Rpb24gJyArIGFjdGlv
bk5hbWUgKyAnLCByZWR1Y2VyIFwiJyArIGtleSArICdcIiByZXR1cm5lZCB1bmRlZmluZWQuICcg
KyAnVG8gaWdub3JlIGFuIGFjdGlvbiwgeW91IG11c3QgZXhwbGljaXRseSByZXR1cm4gdGhlIHBy
ZXZpb3VzIHN0YXRlLiAnICsgJ0lmIHlvdSB3YW50IHRoaXMgcmVkdWNlciB0byBob2xkIG5vIHZh
bHVlLCB5b3UgY2FuIHJldHVybiBudWxsIGluc3RlYWQgb2YgdW5kZWZpbmVkLic7XG59XG5cbmZ1
bmN0aW9uIGdldFVuZXhwZWN0ZWRTdGF0ZVNoYXBlV2FybmluZ01lc3NhZ2UoaW5wdXRTdGF0ZSwg
cmVkdWNlcnMsIGFjdGlvbiwgdW5leHBlY3RlZEtleUNhY2hlKSB7XG4gIHZhciByZWR1Y2VyS2V5
cyA9IE9iamVjdC5rZXlzKHJlZHVjZXJzKTtcbiAgdmFyIGFyZ3VtZW50TmFtZSA9IGFjdGlvbiAm
JiBhY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZXMuSU5JVCA/ICdwcmVsb2FkZWRTdGF0ZSBhcmd1
bWVudCBwYXNzZWQgdG8gY3JlYXRlU3RvcmUnIDogJ3ByZXZpb3VzIHN0YXRlIHJlY2VpdmVkIGJ5
IHRoZSByZWR1Y2VyJztcblxuICBpZiAocmVkdWNlcktleXMubGVuZ3RoID09PSAwKSB7XG4gICAg
cmV0dXJuICdTdG9yZSBkb2VzIG5vdCBoYXZlIGEgdmFsaWQgcmVkdWNlci4gTWFrZSBzdXJlIHRo
ZSBhcmd1bWVudCBwYXNzZWQgJyArICd0byBjb21iaW5lUmVkdWNlcnMgaXMgYW4gb2JqZWN0IHdo
b3NlIHZhbHVlcyBhcmUgcmVkdWNlcnMuJztcbiAgfVxuXG4gIGlmICghaXNQbGFpbk9iamVjdChp
bnB1dFN0YXRlKSkge1xuICAgIHJldHVybiAnVGhlICcgKyBhcmd1bWVudE5hbWUgKyAnIGhhcyB1
bmV4cGVjdGVkIHR5cGUgb2YgXCInICsge30udG9TdHJpbmcuY2FsbChpbnB1dFN0YXRlKS5tYXRj
aCgvXFxzKFthLXp8QS1aXSspLylbMV0gKyAnXCIuIEV4cGVjdGVkIGFyZ3VtZW50IHRvIGJlIGFu
IG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgJyArICgna2V5czogXCInICsgcmVkdWNlcktleXMu
am9pbignXCIsIFwiJykgKyAnXCInKTtcbiAgfVxuXG4gIHZhciB1bmV4cGVjdGVkS2V5cyA9IE9i
amVjdC5rZXlzKGlucHV0U3RhdGUpLmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJu
ICFyZWR1Y2Vycy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmICF1bmV4cGVjdGVkS2V5Q2FjaGVba2V5
XTtcbiAgfSk7XG5cbiAgdW5leHBlY3RlZEtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4g
ICAgdW5leHBlY3RlZEtleUNhY2hlW2tleV0gPSB0cnVlO1xuICB9KTtcblxuICBpZiAodW5leHBl
Y3RlZEtleXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiAnVW5leHBlY3RlZCAnICsgKHVuZXhw
ZWN0ZWRLZXlzLmxlbmd0aCA+IDEgPyAna2V5cycgOiAna2V5JykgKyAnICcgKyAoJ1wiJyArIHVu
ZXhwZWN0ZWRLZXlzLmpvaW4oJ1wiLCBcIicpICsgJ1wiIGZvdW5kIGluICcgKyBhcmd1bWVudE5h
bWUgKyAnLiAnKSArICdFeHBlY3RlZCB0byBmaW5kIG9uZSBvZiB0aGUga25vd24gcmVkdWNlciBr
ZXlzIGluc3RlYWQ6ICcgKyAoJ1wiJyArIHJlZHVjZXJLZXlzLmpvaW4oJ1wiLCBcIicpICsgJ1wi
LiBVbmV4cGVjdGVkIGtleXMgd2lsbCBiZSBpZ25vcmVkLicpO1xuICB9XG59XG5cbmZ1bmN0aW9u
IGFzc2VydFJlZHVjZXJTaGFwZShyZWR1Y2Vycykge1xuICBPYmplY3Qua2V5cyhyZWR1Y2Vycyku
Zm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHJlZHVjZXIgPSByZWR1Y2Vyc1trZXld
O1xuICAgIHZhciBpbml0aWFsU3RhdGUgPSByZWR1Y2VyKHVuZGVmaW5lZCwgeyB0eXBlOiBBY3Rp
b25UeXBlcy5JTklUIH0pO1xuXG4gICAgaWYgKHR5cGVvZiBpbml0aWFsU3RhdGUgPT09ICd1bmRl
ZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZHVjZXIgXCInICsga2V5ICsgJ1wi
IHJldHVybmVkIHVuZGVmaW5lZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uICcgKyAnSWYgdGhlIHN0
YXRlIHBhc3NlZCB0byB0aGUgcmVkdWNlciBpcyB1bmRlZmluZWQsIHlvdSBtdXN0ICcgKyAnZXhw
bGljaXRseSByZXR1cm4gdGhlIGluaXRpYWwgc3RhdGUuIFRoZSBpbml0aWFsIHN0YXRlIG1heSAn
ICsgJ25vdCBiZSB1bmRlZmluZWQuIElmIHlvdSBkb25cXCd0IHdhbnQgdG8gc2V0IGEgdmFsdWUg
Zm9yIHRoaXMgcmVkdWNlciwgJyArICd5b3UgY2FuIHVzZSBudWxsIGluc3RlYWQgb2YgdW5kZWZp
bmVkLicpO1xuICAgIH1cblxuICAgIHZhciB0eXBlID0gJ0BAcmVkdXgvUFJPQkVfVU5LTk9XTl9B
Q1RJT05fJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZyg3KS5zcGxpdCgn
Jykuam9pbignLicpO1xuICAgIGlmICh0eXBlb2YgcmVkdWNlcih1bmRlZmluZWQsIHsgdHlwZTog
dHlwZSB9KSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUmVkdWNl
ciBcIicgKyBrZXkgKyAnXCIgcmV0dXJuZWQgdW5kZWZpbmVkIHdoZW4gcHJvYmVkIHdpdGggYSBy
YW5kb20gdHlwZS4gJyArICgnRG9uXFwndCB0cnkgdG8gaGFuZGxlICcgKyBBY3Rpb25UeXBlcy5J
TklUICsgJyBvciBvdGhlciBhY3Rpb25zIGluIFwicmVkdXgvKlwiICcpICsgJ25hbWVzcGFjZS4g
VGhleSBhcmUgY29uc2lkZXJlZCBwcml2YXRlLiBJbnN0ZWFkLCB5b3UgbXVzdCByZXR1cm4gdGhl
ICcgKyAnY3VycmVudCBzdGF0ZSBmb3IgYW55IHVua25vd24gYWN0aW9ucywgdW5sZXNzIGl0IGlz
IHVuZGVmaW5lZCwgJyArICdpbiB3aGljaCBjYXNlIHlvdSBtdXN0IHJldHVybiB0aGUgaW5pdGlh
bCBzdGF0ZSwgcmVnYXJkbGVzcyBvZiB0aGUgJyArICdhY3Rpb24gdHlwZS4gVGhlIGluaXRpYWwg
c3RhdGUgbWF5IG5vdCBiZSB1bmRlZmluZWQsIGJ1dCBjYW4gYmUgbnVsbC4nKTtcbiAgICB9XG4g
IH0pO1xufVxuXG4vKipcbiAqIFR1cm5zIGFuIG9iamVjdCB3aG9zZSB2YWx1ZXMgYXJlIGRpZmZl
cmVudCByZWR1Y2VyIGZ1bmN0aW9ucywgaW50byBhIHNpbmdsZVxuICogcmVkdWNlciBmdW5jdGlv
bi4gSXQgd2lsbCBjYWxsIGV2ZXJ5IGNoaWxkIHJlZHVjZXIsIGFuZCBnYXRoZXIgdGhlaXIgcmVz
dWx0c1xuICogaW50byBhIHNpbmdsZSBzdGF0ZSBvYmplY3QsIHdob3NlIGtleXMgY29ycmVzcG9u
ZCB0byB0aGUga2V5cyBvZiB0aGUgcGFzc2VkXG4gKiByZWR1Y2VyIGZ1bmN0aW9ucy5cbiAqXG4g
KiBAcGFyYW0ge09iamVjdH0gcmVkdWNlcnMgQW4gb2JqZWN0IHdob3NlIHZhbHVlcyBjb3JyZXNw
b25kIHRvIGRpZmZlcmVudFxuICogcmVkdWNlciBmdW5jdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGNv
bWJpbmVkIGludG8gb25lLiBPbmUgaGFuZHkgd2F5IHRvIG9idGFpblxuICogaXQgaXMgdG8gdXNl
IEVTNiBgaW1wb3J0ICogYXMgcmVkdWNlcnNgIHN5bnRheC4gVGhlIHJlZHVjZXJzIG1heSBuZXZl
ciByZXR1cm5cbiAqIHVuZGVmaW5lZCBmb3IgYW55IGFjdGlvbi4gSW5zdGVhZCwgdGhleSBzaG91
bGQgcmV0dXJuIHRoZWlyIGluaXRpYWwgc3RhdGVcbiAqIGlmIHRoZSBzdGF0ZSBwYXNzZWQgdG8g
dGhlbSB3YXMgdW5kZWZpbmVkLCBhbmQgdGhlIGN1cnJlbnQgc3RhdGUgZm9yIGFueVxuICogdW5y
ZWNvZ25pemVkIGFjdGlvbi5cbiAqXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgcmVkdWNlciBm
dW5jdGlvbiB0aGF0IGludm9rZXMgZXZlcnkgcmVkdWNlciBpbnNpZGUgdGhlXG4gKiBwYXNzZWQg
b2JqZWN0LCBhbmQgYnVpbGRzIGEgc3RhdGUgb2JqZWN0IHdpdGggdGhlIHNhbWUgc2hhcGUuXG4g
Ki9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbWJpbmVSZWR1Y2VycyhyZWR1Y2Vycykge1xu
ICB2YXIgcmVkdWNlcktleXMgPSBPYmplY3Qua2V5cyhyZWR1Y2Vycyk7XG4gIHZhciBmaW5hbFJl
ZHVjZXJzID0ge307XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmVkdWNlcktleXMubGVuZ3RoOyBp
KyspIHtcbiAgICB2YXIga2V5ID0gcmVkdWNlcktleXNbaV07XG5cbiAgICBpZiAocHJvY2Vzcy5l
bnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiByZWR1Y2Vy
c1trZXldID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB3YXJuaW5nKCdObyByZWR1Y2VyIHBy
b3ZpZGVkIGZvciBrZXkgXCInICsga2V5ICsgJ1wiJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAg
aWYgKHR5cGVvZiByZWR1Y2Vyc1trZXldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBmaW5hbFJl
ZHVjZXJzW2tleV0gPSByZWR1Y2Vyc1trZXldO1xuICAgIH1cbiAgfVxuICB2YXIgZmluYWxSZWR1
Y2VyS2V5cyA9IE9iamVjdC5rZXlzKGZpbmFsUmVkdWNlcnMpO1xuXG4gIHZhciB1bmV4cGVjdGVk
S2V5Q2FjaGUgPSB2b2lkIDA7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1
Y3Rpb24nKSB7XG4gICAgdW5leHBlY3RlZEtleUNhY2hlID0ge307XG4gIH1cblxuICB2YXIgc2hh
cGVBc3NlcnRpb25FcnJvciA9IHZvaWQgMDtcbiAgdHJ5IHtcbiAgICBhc3NlcnRSZWR1Y2VyU2hh
cGUoZmluYWxSZWR1Y2Vycyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBzaGFwZUFzc2VydGlvbkVy
cm9yID0gZTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiBjb21iaW5hdGlvbigpIHtcbiAgICB2
YXIgc3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVm
aW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgIHZhciBhY3Rpb24gPSBhcmd1bWVudHNbMV07
XG5cbiAgICBpZiAoc2hhcGVBc3NlcnRpb25FcnJvcikge1xuICAgICAgdGhyb3cgc2hhcGVBc3Nl
cnRpb25FcnJvcjtcbiAgICB9XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdw
cm9kdWN0aW9uJykge1xuICAgICAgdmFyIHdhcm5pbmdNZXNzYWdlID0gZ2V0VW5leHBlY3RlZFN0
YXRlU2hhcGVXYXJuaW5nTWVzc2FnZShzdGF0ZSwgZmluYWxSZWR1Y2VycywgYWN0aW9uLCB1bmV4
cGVjdGVkS2V5Q2FjaGUpO1xuICAgICAgaWYgKHdhcm5pbmdNZXNzYWdlKSB7XG4gICAgICAgIHdh
cm5pbmcod2FybmluZ01lc3NhZ2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBoYXNDaGFu
Z2VkID0gZmFsc2U7XG4gICAgdmFyIG5leHRTdGF0ZSA9IHt9O1xuICAgIGZvciAodmFyIF9pID0g
MDsgX2kgPCBmaW5hbFJlZHVjZXJLZXlzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9rZXkg
PSBmaW5hbFJlZHVjZXJLZXlzW19pXTtcbiAgICAgIHZhciByZWR1Y2VyID0gZmluYWxSZWR1Y2Vy
c1tfa2V5XTtcbiAgICAgIHZhciBwcmV2aW91c1N0YXRlRm9yS2V5ID0gc3RhdGVbX2tleV07XG4g
ICAgICB2YXIgbmV4dFN0YXRlRm9yS2V5ID0gcmVkdWNlcihwcmV2aW91c1N0YXRlRm9yS2V5LCBh
Y3Rpb24pO1xuICAgICAgaWYgKHR5cGVvZiBuZXh0U3RhdGVGb3JLZXkgPT09ICd1bmRlZmluZWQn
KSB7XG4gICAgICAgIHZhciBlcnJvck1lc3NhZ2UgPSBnZXRVbmRlZmluZWRTdGF0ZUVycm9yTWVz
c2FnZShfa2V5LCBhY3Rpb24pO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdl
KTtcbiAgICAgIH1cbiAgICAgIG5leHRTdGF0ZVtfa2V5XSA9IG5leHRTdGF0ZUZvcktleTtcbiAg
ICAgIGhhc0NoYW5nZWQgPSBoYXNDaGFuZ2VkIHx8IG5leHRTdGF0ZUZvcktleSAhPT0gcHJldmlv
dXNTdGF0ZUZvcktleTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc0NoYW5nZWQgPyBuZXh0U3RhdGUg
OiBzdGF0ZTtcbiAgfTtcbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9P
VEVSXG4vLyAuL25vZGVfbW9kdWxlcy9yZWR1eC9lcy9jb21iaW5lUmVkdWNlcnMuanNcbi8vIG1v
ZHVsZSBpZCA9IDIwN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJmdW5jdGlvbiBiaW5kQWN0aW9u
Q3JlYXRvcihhY3Rpb25DcmVhdG9yLCBkaXNwYXRjaCkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkg
e1xuICAgIHJldHVybiBkaXNwYXRjaChhY3Rpb25DcmVhdG9yLmFwcGx5KHVuZGVmaW5lZCwgYXJn
dW1lbnRzKSk7XG4gIH07XG59XG5cbi8qKlxuICogVHVybnMgYW4gb2JqZWN0IHdob3NlIHZhbHVl
cyBhcmUgYWN0aW9uIGNyZWF0b3JzLCBpbnRvIGFuIG9iamVjdCB3aXRoIHRoZVxuICogc2FtZSBr
ZXlzLCBidXQgd2l0aCBldmVyeSBmdW5jdGlvbiB3cmFwcGVkIGludG8gYSBgZGlzcGF0Y2hgIGNh
bGwgc28gdGhleVxuICogbWF5IGJlIGludm9rZWQgZGlyZWN0bHkuIFRoaXMgaXMganVzdCBhIGNv
bnZlbmllbmNlIG1ldGhvZCwgYXMgeW91IGNhbiBjYWxsXG4gKiBgc3RvcmUuZGlzcGF0Y2goTXlB
Y3Rpb25DcmVhdG9ycy5kb1NvbWV0aGluZygpKWAgeW91cnNlbGYganVzdCBmaW5lLlxuICpcbiAq
IEZvciBjb252ZW5pZW5jZSwgeW91IGNhbiBhbHNvIHBhc3MgYSBzaW5nbGUgZnVuY3Rpb24gYXMg
dGhlIGZpcnN0IGFyZ3VtZW50LFxuICogYW5kIGdldCBhIGZ1bmN0aW9uIGluIHJldHVybi5cbiAq
XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufE9iamVjdH0gYWN0aW9uQ3JlYXRvcnMgQW4gb2JqZWN0IHdo
b3NlIHZhbHVlcyBhcmUgYWN0aW9uXG4gKiBjcmVhdG9yIGZ1bmN0aW9ucy4gT25lIGhhbmR5IHdh
eSB0byBvYnRhaW4gaXQgaXMgdG8gdXNlIEVTNiBgaW1wb3J0ICogYXNgXG4gKiBzeW50YXguIFlv
dSBtYXkgYWxzbyBwYXNzIGEgc2luZ2xlIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rp
b259IGRpc3BhdGNoIFRoZSBgZGlzcGF0Y2hgIGZ1bmN0aW9uIGF2YWlsYWJsZSBvbiB5b3VyIFJl
ZHV4XG4gKiBzdG9yZS5cbiAqXG4gKiBAcmV0dXJucyB7RnVuY3Rpb258T2JqZWN0fSBUaGUgb2Jq
ZWN0IG1pbWlja2luZyB0aGUgb3JpZ2luYWwgb2JqZWN0LCBidXQgd2l0aFxuICogZXZlcnkgYWN0
aW9uIGNyZWF0b3Igd3JhcHBlZCBpbnRvIHRoZSBgZGlzcGF0Y2hgIGNhbGwuIElmIHlvdSBwYXNz
ZWQgYVxuICogZnVuY3Rpb24gYXMgYGFjdGlvbkNyZWF0b3JzYCwgdGhlIHJldHVybiB2YWx1ZSB3
aWxsIGFsc28gYmUgYSBzaW5nbGVcbiAqIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgZGVmYXVsdCBm
dW5jdGlvbiBiaW5kQWN0aW9uQ3JlYXRvcnMoYWN0aW9uQ3JlYXRvcnMsIGRpc3BhdGNoKSB7XG4g
IGlmICh0eXBlb2YgYWN0aW9uQ3JlYXRvcnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4g
YmluZEFjdGlvbkNyZWF0b3IoYWN0aW9uQ3JlYXRvcnMsIGRpc3BhdGNoKTtcbiAgfVxuXG4gIGlm
ICh0eXBlb2YgYWN0aW9uQ3JlYXRvcnMgIT09ICdvYmplY3QnIHx8IGFjdGlvbkNyZWF0b3JzID09
PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdiaW5kQWN0aW9uQ3JlYXRvcnMgZXhwZWN0
ZWQgYW4gb2JqZWN0IG9yIGEgZnVuY3Rpb24sIGluc3RlYWQgcmVjZWl2ZWQgJyArIChhY3Rpb25D
cmVhdG9ycyA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBhY3Rpb25DcmVhdG9ycykgKyAnLiAn
ICsgJ0RpZCB5b3Ugd3JpdGUgXCJpbXBvcnQgQWN0aW9uQ3JlYXRvcnMgZnJvbVwiIGluc3RlYWQg
b2YgXCJpbXBvcnQgKiBhcyBBY3Rpb25DcmVhdG9ycyBmcm9tXCI/Jyk7XG4gIH1cblxuICB2YXIg
a2V5cyA9IE9iamVjdC5rZXlzKGFjdGlvbkNyZWF0b3JzKTtcbiAgdmFyIGJvdW5kQWN0aW9uQ3Jl
YXRvcnMgPSB7fTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4g
ICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgdmFyIGFjdGlvbkNyZWF0b3IgPSBhY3Rpb25DcmVh
dG9yc1trZXldO1xuICAgIGlmICh0eXBlb2YgYWN0aW9uQ3JlYXRvciA9PT0gJ2Z1bmN0aW9uJykg
e1xuICAgICAgYm91bmRBY3Rpb25DcmVhdG9yc1trZXldID0gYmluZEFjdGlvbkNyZWF0b3IoYWN0
aW9uQ3JlYXRvciwgZGlzcGF0Y2gpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYm91bmRBY3Rpb25D
cmVhdG9ycztcbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4v
LyAuL25vZGVfbW9kdWxlcy9yZWR1eC9lcy9iaW5kQWN0aW9uQ3JlYXRvcnMuanNcbi8vIG1vZHVs
ZSBpZCA9IDIwOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgX2V4dGVuZHMgPSBPYmplY3Qu
YXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVu
dHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5
IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNv
dXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFy
Z2V0OyB9O1xuXG5pbXBvcnQgY29tcG9zZSBmcm9tICcuL2NvbXBvc2UnO1xuXG4vKipcbiAqIENy
ZWF0ZXMgYSBzdG9yZSBlbmhhbmNlciB0aGF0IGFwcGxpZXMgbWlkZGxld2FyZSB0byB0aGUgZGlz
cGF0Y2ggbWV0aG9kXG4gKiBvZiB0aGUgUmVkdXggc3RvcmUuIFRoaXMgaXMgaGFuZHkgZm9yIGEg
dmFyaWV0eSBvZiB0YXNrcywgc3VjaCBhcyBleHByZXNzaW5nXG4gKiBhc3luY2hyb25vdXMgYWN0
aW9ucyBpbiBhIGNvbmNpc2UgbWFubmVyLCBvciBsb2dnaW5nIGV2ZXJ5IGFjdGlvbiBwYXlsb2Fk
LlxuICpcbiAqIFNlZSBgcmVkdXgtdGh1bmtgIHBhY2thZ2UgYXMgYW4gZXhhbXBsZSBvZiB0aGUg
UmVkdXggbWlkZGxld2FyZS5cbiAqXG4gKiBCZWNhdXNlIG1pZGRsZXdhcmUgaXMgcG90ZW50aWFs
bHkgYXN5bmNocm9ub3VzLCB0aGlzIHNob3VsZCBiZSB0aGUgZmlyc3RcbiAqIHN0b3JlIGVuaGFu
Y2VyIGluIHRoZSBjb21wb3NpdGlvbiBjaGFpbi5cbiAqXG4gKiBOb3RlIHRoYXQgZWFjaCBtaWRk
bGV3YXJlIHdpbGwgYmUgZ2l2ZW4gdGhlIGBkaXNwYXRjaGAgYW5kIGBnZXRTdGF0ZWAgZnVuY3Rp
b25zXG4gKiBhcyBuYW1lZCBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIHsuLi5GdW5jdGlvbn0g
bWlkZGxld2FyZXMgVGhlIG1pZGRsZXdhcmUgY2hhaW4gdG8gYmUgYXBwbGllZC5cbiAqIEByZXR1
cm5zIHtGdW5jdGlvbn0gQSBzdG9yZSBlbmhhbmNlciBhcHBseWluZyB0aGUgbWlkZGxld2FyZS5c
biAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYXBwbHlNaWRkbGV3YXJlKCkge1xuICBmb3Ig
KHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgbWlkZGxld2FyZXMgPSBBcnJheShfbGVuKSwg
X2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBtaWRkbGV3YXJlc1tfa2V5XSA9
IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoY3JlYXRlU3RvcmUp
IHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBlbmhhbmNl
cikge1xuICAgICAgdmFyIHN0b3JlID0gY3JlYXRlU3RvcmUocmVkdWNlciwgcHJlbG9hZGVkU3Rh
dGUsIGVuaGFuY2VyKTtcbiAgICAgIHZhciBfZGlzcGF0Y2ggPSBzdG9yZS5kaXNwYXRjaDtcbiAg
ICAgIHZhciBjaGFpbiA9IFtdO1xuXG4gICAgICB2YXIgbWlkZGxld2FyZUFQSSA9IHtcbiAgICAg
ICAgZ2V0U3RhdGU6IHN0b3JlLmdldFN0YXRlLFxuICAgICAgICBkaXNwYXRjaDogZnVuY3Rpb24g
ZGlzcGF0Y2goYWN0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIF9kaXNwYXRjaChhY3Rpb24pO1xu
ICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY2hhaW4gPSBtaWRkbGV3YXJlcy5tYXAoZnVuY3Rp
b24gKG1pZGRsZXdhcmUpIHtcbiAgICAgICAgcmV0dXJuIG1pZGRsZXdhcmUobWlkZGxld2FyZUFQ
SSk7XG4gICAgICB9KTtcbiAgICAgIF9kaXNwYXRjaCA9IGNvbXBvc2UuYXBwbHkodW5kZWZpbmVk
LCBjaGFpbikoc3RvcmUuZGlzcGF0Y2gpO1xuXG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0
b3JlLCB7XG4gICAgICAgIGRpc3BhdGNoOiBfZGlzcGF0Y2hcbiAgICAgIH0pO1xuICAgIH07XG4g
IH07XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9u
b2RlX21vZHVsZXMvcmVkdXgvZXMvYXBwbHlNaWRkbGV3YXJlLmpzXG4vLyBtb2R1bGUgaWQgPSAy
MDlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3Rh
bmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9y
KSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0
aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwg
Y2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNu
J3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJl
dHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9
PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhz
dWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rp
b25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBl
ciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsg
dHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUo
c3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1
ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJh
YmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBP
YmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19w
cm90b19fID0gc3VwZXJDbGFzczsgfVxuXG5pbXBvcnQgeyBDb21wb25lbnQsIENoaWxkcmVuIH0g
ZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9y
dCB7IHN0b3JlU2hhcGUsIHN1YnNjcmlwdGlvblNoYXBlIH0gZnJvbSAnLi4vdXRpbHMvUHJvcFR5
cGVzJztcbmltcG9ydCB3YXJuaW5nIGZyb20gJy4uL3V0aWxzL3dhcm5pbmcnO1xuXG52YXIgZGlk
V2FybkFib3V0UmVjZWl2aW5nU3RvcmUgPSBmYWxzZTtcbmZ1bmN0aW9uIHdhcm5BYm91dFJlY2Vp
dmluZ1N0b3JlKCkge1xuICBpZiAoZGlkV2FybkFib3V0UmVjZWl2aW5nU3RvcmUpIHtcbiAgICBy
ZXR1cm47XG4gIH1cbiAgZGlkV2FybkFib3V0UmVjZWl2aW5nU3RvcmUgPSB0cnVlO1xuXG4gIHdh
cm5pbmcoJzxQcm92aWRlcj4gZG9lcyBub3Qgc3VwcG9ydCBjaGFuZ2luZyBgc3RvcmVgIG9uIHRo
ZSBmbHkuICcgKyAnSXQgaXMgbW9zdCBsaWtlbHkgdGhhdCB5b3Ugc2VlIHRoaXMgZXJyb3IgYmVj
YXVzZSB5b3UgdXBkYXRlZCB0byAnICsgJ1JlZHV4IDIueCBhbmQgUmVhY3QgUmVkdXggMi54IHdo
aWNoIG5vIGxvbmdlciBob3QgcmVsb2FkIHJlZHVjZXJzICcgKyAnYXV0b21hdGljYWxseS4gU2Vl
IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXJlZHV4L3JlbGVhc2VzLycgKyAndGFn
L3YyLjAuMCBmb3IgdGhlIG1pZ3JhdGlvbiBpbnN0cnVjdGlvbnMuJyk7XG59XG5cbmV4cG9ydCBm
dW5jdGlvbiBjcmVhdGVQcm92aWRlcigpIHtcbiAgdmFyIF9Qcm92aWRlciRjaGlsZENvbnRleDtc
blxuICB2YXIgc3RvcmVLZXkgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0g
IT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICdzdG9yZSc7XG4gIHZhciBzdWJLZXkgPSBh
cmd1bWVudHNbMV07XG5cbiAgdmFyIHN1YnNjcmlwdGlvbktleSA9IHN1YktleSB8fCBzdG9yZUtl
eSArICdTdWJzY3JpcHRpb24nO1xuXG4gIHZhciBQcm92aWRlciA9IGZ1bmN0aW9uIChfQ29tcG9u
ZW50KSB7XG4gICAgX2luaGVyaXRzKFByb3ZpZGVyLCBfQ29tcG9uZW50KTtcblxuICAgIFByb3Zp
ZGVyLnByb3RvdHlwZS5nZXRDaGlsZENvbnRleHQgPSBmdW5jdGlvbiBnZXRDaGlsZENvbnRleHQo
KSB7XG4gICAgICB2YXIgX3JlZjtcblxuICAgICAgcmV0dXJuIF9yZWYgPSB7fSwgX3JlZltzdG9y
ZUtleV0gPSB0aGlzW3N0b3JlS2V5XSwgX3JlZltzdWJzY3JpcHRpb25LZXldID0gbnVsbCwgX3Jl
ZjtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gUHJvdmlkZXIocHJvcHMsIGNvbnRleHQpIHtcbiAg
ICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQcm92aWRlcik7XG5cbiAgICAgIHZhciBfdGhpcyA9
IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9Db21wb25lbnQuY2FsbCh0aGlzLCBw
cm9wcywgY29udGV4dCkpO1xuXG4gICAgICBfdGhpc1tzdG9yZUtleV0gPSBwcm9wcy5zdG9yZTtc
biAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG5cbiAgICBQcm92aWRlci5wcm90b3R5cGUucmVu
ZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIENoaWxkcmVuLm9ubHkodGhp
cy5wcm9wcy5jaGlsZHJlbik7XG4gICAgfTtcblxuICAgIHJldHVybiBQcm92aWRlcjtcbiAgfShD
b21wb25lbnQpO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24n
KSB7XG4gICAgUHJvdmlkZXIucHJvdG90eXBlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPSBm
dW5jdGlvbiAobmV4dFByb3BzKSB7XG4gICAgICBpZiAodGhpc1tzdG9yZUtleV0gIT09IG5leHRQ
cm9wcy5zdG9yZSkge1xuICAgICAgICB3YXJuQWJvdXRSZWNlaXZpbmdTdG9yZSgpO1xuICAgICAg
fVxuICAgIH07XG4gIH1cblxuICBQcm92aWRlci5wcm9wVHlwZXMgPSB7XG4gICAgc3RvcmU6IHN0
b3JlU2hhcGUuaXNSZXF1aXJlZCxcbiAgICBjaGlsZHJlbjogUHJvcFR5cGVzLmVsZW1lbnQuaXNS
ZXF1aXJlZFxuICB9O1xuICBQcm92aWRlci5jaGlsZENvbnRleHRUeXBlcyA9IChfUHJvdmlkZXIk
Y2hpbGRDb250ZXggPSB7fSwgX1Byb3ZpZGVyJGNoaWxkQ29udGV4W3N0b3JlS2V5XSA9IHN0b3Jl
U2hhcGUuaXNSZXF1aXJlZCwgX1Byb3ZpZGVyJGNoaWxkQ29udGV4W3N1YnNjcmlwdGlvbktleV0g
PSBzdWJzY3JpcHRpb25TaGFwZSwgX1Byb3ZpZGVyJGNoaWxkQ29udGV4KTtcblxuICByZXR1cm4g
UHJvdmlkZXI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVByb3ZpZGVyKCk7XG5cblxuLy8v
Ly8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvcmVh
Y3QtcmVkdXgvZXMvY29tcG9uZW50cy9Qcm92aWRlci5qc1xuLy8gbW9kdWxlIGlkID0gMjEwXG4v
LyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFj
ZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2Ug
Y29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhl
XG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRy
ZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5k
IGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICovXG5cbid1c2Ug
c3RyaWN0JztcblxudmFyIGVtcHR5RnVuY3Rpb24gPSByZXF1aXJlKCdmYmpzL2xpYi9lbXB0eUZ1
bmN0aW9uJyk7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7
XG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBl
c1NlY3JldCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBz
aGltKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFt
ZSwgc2VjcmV0KSB7XG4gICAgaWYgKHNlY3JldCA9PT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtc
biAgICAgIC8vIEl0IGlzIHN0aWxsIHNhZmUgd2hlbiBjYWxsZWQgZnJvbSBSZWFjdC5cbiAgICAg
IHJldHVybjtcbiAgICB9XG4gICAgaW52YXJpYW50KFxuICAgICAgZmFsc2UsXG4gICAgICAnQ2Fs
bGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRo
ZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAnVXNlIFByb3BUeXBlcy5jaGVja1By
b3BUeXBlcygpIHRvIGNhbGwgdGhlbS4gJyArXG4gICAgICAnUmVhZCBtb3JlIGF0IGh0dHA6Ly9m
Yi5tZS91c2UtY2hlY2stcHJvcC10eXBlcydcbiAgICApO1xuICB9O1xuICBzaGltLmlzUmVxdWly
ZWQgPSBzaGltO1xuICBmdW5jdGlvbiBnZXRTaGltKCkge1xuICAgIHJldHVybiBzaGltO1xuICB9
O1xuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9k
dWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanNgLlxuICB2YXIg
UmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IHNoaW0sXG4gICAgYm9vbDogc2hpbSxcbiAg
ICBmdW5jOiBzaGltLFxuICAgIG51bWJlcjogc2hpbSxcbiAgICBvYmplY3Q6IHNoaW0sXG4gICAg
c3RyaW5nOiBzaGltLFxuICAgIHN5bWJvbDogc2hpbSxcblxuICAgIGFueTogc2hpbSxcbiAgICBh
cnJheU9mOiBnZXRTaGltLFxuICAgIGVsZW1lbnQ6IHNoaW0sXG4gICAgaW5zdGFuY2VPZjogZ2V0
U2hpbSxcbiAgICBub2RlOiBzaGltLFxuICAgIG9iamVjdE9mOiBnZXRTaGltLFxuICAgIG9uZU9m
OiBnZXRTaGltLFxuICAgIG9uZU9mVHlwZTogZ2V0U2hpbSxcbiAgICBzaGFwZTogZ2V0U2hpbVxu
ICB9O1xuXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gZW1wdHlGdW5jdGlvbjtc
biAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XG5cbiAgcmV0dXJu
IFJlYWN0UHJvcFR5cGVzO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFD
SyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvZmFjdG9yeVdpdGhUaHJvd2lu
Z1NoaW1zLmpzXG4vLyBtb2R1bGUgaWQgPSAyMTFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyoq
XG4gKiBDb3B5cmlnaHQgMjAxNSwgWWFob28hIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQg
dW5kZXIgdGhlIE5ldyBCU0QgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBm
aWxlIGZvciB0ZXJtcy5cbiAqL1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUkVBQ1RfU1RBVElDUyA9
IHtcbiAgICBjaGlsZENvbnRleHRUeXBlczogdHJ1ZSxcbiAgICBjb250ZXh0VHlwZXM6IHRydWUs
XG4gICAgZGVmYXVsdFByb3BzOiB0cnVlLFxuICAgIGRpc3BsYXlOYW1lOiB0cnVlLFxuICAgIGdl
dERlZmF1bHRQcm9wczogdHJ1ZSxcbiAgICBtaXhpbnM6IHRydWUsXG4gICAgcHJvcFR5cGVzOiB0
cnVlLFxuICAgIHR5cGU6IHRydWVcbn07XG5cbnZhciBLTk9XTl9TVEFUSUNTID0ge1xuICBuYW1l
OiB0cnVlLFxuICBsZW5ndGg6IHRydWUsXG4gIHByb3RvdHlwZTogdHJ1ZSxcbiAgY2FsbGVyOiB0
cnVlLFxuICBjYWxsZWU6IHRydWUsXG4gIGFyZ3VtZW50czogdHJ1ZSxcbiAgYXJpdHk6IHRydWVc
bn07XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBn
ZXRPd25Qcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgZ2V0
T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
O1xudmFyIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xudmFyIG9iamVj
dFByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mICYmIGdldFByb3RvdHlwZU9mKE9iamVjdCk7XG5c
bm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaG9pc3ROb25SZWFjdFN0YXRpY3ModGFyZ2V0Q29t
cG9uZW50LCBzb3VyY2VDb21wb25lbnQsIGJsYWNrbGlzdCkge1xuICAgIGlmICh0eXBlb2Ygc291
cmNlQ29tcG9uZW50ICE9PSAnc3RyaW5nJykgeyAvLyBkb24ndCBob2lzdCBvdmVyIHN0cmluZyAo
aHRtbCkgY29tcG9uZW50c1xuXG4gICAgICAgIGlmIChvYmplY3RQcm90b3R5cGUpIHtcbiAgICAg
ICAgICAgIHZhciBpbmhlcml0ZWRDb21wb25lbnQgPSBnZXRQcm90b3R5cGVPZihzb3VyY2VDb21w
b25lbnQpO1xuICAgICAgICAgICAgaWYgKGluaGVyaXRlZENvbXBvbmVudCAmJiBpbmhlcml0ZWRD
b21wb25lbnQgIT09IG9iamVjdFByb3RvdHlwZSkge1xuICAgICAgICAgICAgICAgIGhvaXN0Tm9u
UmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgaW5oZXJpdGVkQ29tcG9uZW50LCBibGFja2xp
c3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGtleXMgPSBnZXRP
d25Qcm9wZXJ0eU5hbWVzKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICAgICAgaWYgKGdldE93blBy
b3BlcnR5U3ltYm9scykge1xuICAgICAgICAgICAga2V5cyA9IGtleXMuY29uY2F0KGdldE93blBy
b3BlcnR5U3ltYm9scyhzb3VyY2VDb21wb25lbnQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdmFyIGtl
eSA9IGtleXNbaV07XG4gICAgICAgICAgICBpZiAoIVJFQUNUX1NUQVRJQ1Nba2V5XSAmJiAhS05P
V05fU1RBVElDU1trZXldICYmICghYmxhY2tsaXN0IHx8ICFibGFja2xpc3Rba2V5XSkpIHtcbiAg
ICAgICAgICAgICAgICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihz
b3VyY2VDb21wb25lbnQsIGtleSk7XG4gICAgICAgICAgICAgICAgdHJ5IHsgLy8gQXZvaWQgZmFp
bHVyZXMgZnJvbSByZWFkLW9ubHkgcHJvcGVydGllc1xuICAgICAgICAgICAgICAgICAgICBkZWZp
bmVQcm9wZXJ0eSh0YXJnZXRDb21wb25lbnQsIGtleSwgZGVzY3JpcHRvcik7XG4gICAgICAgICAg
ICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAg
IHJldHVybiB0YXJnZXRDb21wb25lbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldENvbXBv
bmVudDtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4v
LyAuL25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9pbmRleC5qc1xuLy8gbW9k
dWxlIGlkID0gMjEyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qKlxuICogQ29weXJpZ2h0IDIw
MTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICog
VGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2Ug
Zm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRo
aXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMg
Y2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5Llxu
ICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBVc2UgaW52YXJpYW50KCkgdG8gYXNzZXJ0
IHN0YXRlIHdoaWNoIHlvdXIgcHJvZ3JhbSBhc3N1bWVzIHRvIGJlIHRydWUuXG4gKlxuICogUHJv
dmlkZSBzcHJpbnRmLXN0eWxlIGZvcm1hdCAob25seSAlcyBpcyBzdXBwb3J0ZWQpIGFuZCBhcmd1
bWVudHNcbiAqIHRvIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBicm9rZSBhbmQgd2hh
dCB5b3Ugd2VyZVxuICogZXhwZWN0aW5nLlxuICpcbiAqIFRoZSBpbnZhcmlhbnQgbWVzc2FnZSB3
aWxsIGJlIHN0cmlwcGVkIGluIHByb2R1Y3Rpb24sIGJ1dCB0aGUgaW52YXJpYW50XG4gKiB3aWxs
IHJlbWFpbiB0byBlbnN1cmUgbG9naWMgZG9lcyBub3QgZGlmZmVyIGluIHByb2R1Y3Rpb24uXG4g
Ki9cblxudmFyIGludmFyaWFudCA9IGZ1bmN0aW9uKGNvbmRpdGlvbiwgZm9ybWF0LCBhLCBiLCBj
LCBkLCBlLCBmKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24n
KSB7XG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJy
b3IoJ2ludmFyaWFudCByZXF1aXJlcyBhbiBlcnJvciBtZXNzYWdlIGFyZ3VtZW50Jyk7XG4gICAg
fVxuICB9XG5cbiAgaWYgKCFjb25kaXRpb24pIHtcbiAgICB2YXIgZXJyb3I7XG4gICAgaWYgKGZv
cm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAg
J01pbmlmaWVkIGV4Y2VwdGlvbiBvY2N1cnJlZDsgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVu
dmlyb25tZW50ICcgK1xuICAgICAgICAnZm9yIHRoZSBmdWxsIGVycm9yIG1lc3NhZ2UgYW5kIGFk
ZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4nXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAg
ICB2YXIgYXJncyA9IFthLCBiLCBjLCBkLCBlLCBmXTtcbiAgICAgIHZhciBhcmdJbmRleCA9IDA7
XG4gICAgICBlcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgZm9ybWF0LnJlcGxhY2UoLyVzL2cs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJnc1thcmdJbmRleCsrXTsgfSlcbiAgICAgICk7XG4gICAg
ICBlcnJvci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgIH1cblxuICAgIGVycm9y
LmZyYW1lc1RvUG9wID0gMTsgLy8gd2UgZG9uJ3QgY2FyZSBhYm91dCBpbnZhcmlhbnQncyBvd24g
ZnJhbWVcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpbnZh
cmlhbnQ7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAu
L25vZGVfbW9kdWxlcy9pbnZhcmlhbnQvYnJvd3Nlci5qc1xuLy8gbW9kdWxlIGlkID0gMjEzXG4v
LyBtb2R1bGUgY2h1bmtzID0gMCIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwg
Q29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsg
dGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwi
KTsgfSB9XG5cbi8vIGVuY2Fwc3VsYXRlcyB0aGUgc3Vic2NyaXB0aW9uIGxvZ2ljIGZvciBjb25u
ZWN0aW5nIGEgY29tcG9uZW50IHRvIHRoZSByZWR1eCBzdG9yZSwgYXNcbi8vIHdlbGwgYXMgbmVz
dGluZyBzdWJzY3JpcHRpb25zIG9mIGRlc2NlbmRhbnQgY29tcG9uZW50cywgc28gdGhhdCB3ZSBj
YW4gZW5zdXJlIHRoZVxuLy8gYW5jZXN0b3IgY29tcG9uZW50cyByZS1yZW5kZXIgYmVmb3JlIGRl
c2NlbmRhbnRzXG5cbnZhciBDTEVBUkVEID0gbnVsbDtcbnZhciBudWxsTGlzdGVuZXJzID0ge1xu
ICBub3RpZnk6IGZ1bmN0aW9uIG5vdGlmeSgpIHt9XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVMaXN0
ZW5lckNvbGxlY3Rpb24oKSB7XG4gIC8vIHRoZSBjdXJyZW50L25leHQgcGF0dGVybiBpcyBjb3Bp
ZWQgZnJvbSByZWR1eCdzIGNyZWF0ZVN0b3JlIGNvZGUuXG4gIC8vIFRPRE86IHJlZmFjdG9yK2V4
cG9zZSB0aGF0IGNvZGUgdG8gYmUgcmV1c2FibGUgaGVyZT9cbiAgdmFyIGN1cnJlbnQgPSBbXTtc
biAgdmFyIG5leHQgPSBbXTtcblxuICByZXR1cm4ge1xuICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVh
cigpIHtcbiAgICAgIG5leHQgPSBDTEVBUkVEO1xuICAgICAgY3VycmVudCA9IENMRUFSRUQ7XG4g
ICAgfSxcbiAgICBub3RpZnk6IGZ1bmN0aW9uIG5vdGlmeSgpIHtcbiAgICAgIHZhciBsaXN0ZW5l
cnMgPSBjdXJyZW50ID0gbmV4dDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdGVuZXJz
Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxpc3RlbmVyc1tpXSgpO1xuICAgICAgfVxuICAgIH0s
XG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9LFxu
ICAgIHN1YnNjcmliZTogZnVuY3Rpb24gc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgICB2YXIg
aXNTdWJzY3JpYmVkID0gdHJ1ZTtcbiAgICAgIGlmIChuZXh0ID09PSBjdXJyZW50KSBuZXh0ID0g
Y3VycmVudC5zbGljZSgpO1xuICAgICAgbmV4dC5wdXNoKGxpc3RlbmVyKTtcblxuICAgICAgcmV0
dXJuIGZ1bmN0aW9uIHVuc3Vic2NyaWJlKCkge1xuICAgICAgICBpZiAoIWlzU3Vic2NyaWJlZCB8
fCBjdXJyZW50ID09PSBDTEVBUkVEKSByZXR1cm47XG4gICAgICAgIGlzU3Vic2NyaWJlZCA9IGZh
bHNlO1xuXG4gICAgICAgIGlmIChuZXh0ID09PSBjdXJyZW50KSBuZXh0ID0gY3VycmVudC5zbGlj
ZSgpO1xuICAgICAgICBuZXh0LnNwbGljZShuZXh0LmluZGV4T2YobGlzdGVuZXIpLCAxKTtcbiAg
ICAgIH07XG4gICAgfVxuICB9O1xufVxuXG52YXIgU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKCkg
e1xuICBmdW5jdGlvbiBTdWJzY3JpcHRpb24oc3RvcmUsIHBhcmVudFN1Yiwgb25TdGF0ZUNoYW5n
ZSkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdWJzY3JpcHRpb24pO1xuXG4gICAgdGhp
cy5zdG9yZSA9IHN0b3JlO1xuICAgIHRoaXMucGFyZW50U3ViID0gcGFyZW50U3ViO1xuICAgIHRo
aXMub25TdGF0ZUNoYW5nZSA9IG9uU3RhdGVDaGFuZ2U7XG4gICAgdGhpcy51bnN1YnNjcmliZSA9
IG51bGw7XG4gICAgdGhpcy5saXN0ZW5lcnMgPSBudWxsTGlzdGVuZXJzO1xuICB9XG5cbiAgU3Vi
c2NyaXB0aW9uLnByb3RvdHlwZS5hZGROZXN0ZWRTdWIgPSBmdW5jdGlvbiBhZGROZXN0ZWRTdWIo
bGlzdGVuZXIpIHtcbiAgICB0aGlzLnRyeVN1YnNjcmliZSgpO1xuICAgIHJldHVybiB0aGlzLmxp
c3RlbmVycy5zdWJzY3JpYmUobGlzdGVuZXIpO1xuICB9O1xuXG4gIFN1YnNjcmlwdGlvbi5wcm90
b3R5cGUubm90aWZ5TmVzdGVkU3VicyA9IGZ1bmN0aW9uIG5vdGlmeU5lc3RlZFN1YnMoKSB7XG4g
ICAgdGhpcy5saXN0ZW5lcnMubm90aWZ5KCk7XG4gIH07XG5cbiAgU3Vic2NyaXB0aW9uLnByb3Rv
dHlwZS5pc1N1YnNjcmliZWQgPSBmdW5jdGlvbiBpc1N1YnNjcmliZWQoKSB7XG4gICAgcmV0dXJu
IEJvb2xlYW4odGhpcy51bnN1YnNjcmliZSk7XG4gIH07XG5cbiAgU3Vic2NyaXB0aW9uLnByb3Rv
dHlwZS50cnlTdWJzY3JpYmUgPSBmdW5jdGlvbiB0cnlTdWJzY3JpYmUoKSB7XG4gICAgaWYgKCF0
aGlzLnVuc3Vic2NyaWJlKSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlID0gdGhpcy5wYXJlbnRT
dWIgPyB0aGlzLnBhcmVudFN1Yi5hZGROZXN0ZWRTdWIodGhpcy5vblN0YXRlQ2hhbmdlKSA6IHRo
aXMuc3RvcmUuc3Vic2NyaWJlKHRoaXMub25TdGF0ZUNoYW5nZSk7XG5cbiAgICAgIHRoaXMubGlz
dGVuZXJzID0gY3JlYXRlTGlzdGVuZXJDb2xsZWN0aW9uKCk7XG4gICAgfVxuICB9O1xuXG4gIFN1
YnNjcmlwdGlvbi5wcm90b3R5cGUudHJ5VW5zdWJzY3JpYmUgPSBmdW5jdGlvbiB0cnlVbnN1YnNj
cmliZSgpIHtcbiAgICBpZiAodGhpcy51bnN1YnNjcmliZSkge1xuICAgICAgdGhpcy51bnN1YnNj
cmliZSgpO1xuICAgICAgdGhpcy51bnN1YnNjcmliZSA9IG51bGw7XG4gICAgICB0aGlzLmxpc3Rl
bmVycy5jbGVhcigpO1xuICAgICAgdGhpcy5saXN0ZW5lcnMgPSBudWxsTGlzdGVuZXJzO1xuICAg
IH1cbiAgfTtcblxuICByZXR1cm4gU3Vic2NyaXB0aW9uO1xufSgpO1xuXG5leHBvcnQgeyBTdWJz
Y3JpcHRpb24gYXMgZGVmYXVsdCB9O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFD
SyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL3V0aWxzL1N1YnNjcmlw
dGlvbi5qc1xuLy8gbW9kdWxlIGlkID0gMjE0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBf
ZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBp
ID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRz
W2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093
blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07
IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVy
dGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBp
ZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUu
aGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ld
OyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IGNvbm5lY3RBZHZhbmNlZCBmcm9tICcuLi9j
b21wb25lbnRzL2Nvbm5lY3RBZHZhbmNlZCc7XG5pbXBvcnQgc2hhbGxvd0VxdWFsIGZyb20gJy4u
L3V0aWxzL3NoYWxsb3dFcXVhbCc7XG5pbXBvcnQgZGVmYXVsdE1hcERpc3BhdGNoVG9Qcm9wc0Zh
Y3RvcmllcyBmcm9tICcuL21hcERpc3BhdGNoVG9Qcm9wcyc7XG5pbXBvcnQgZGVmYXVsdE1hcFN0
YXRlVG9Qcm9wc0ZhY3RvcmllcyBmcm9tICcuL21hcFN0YXRlVG9Qcm9wcyc7XG5pbXBvcnQgZGVm
YXVsdE1lcmdlUHJvcHNGYWN0b3JpZXMgZnJvbSAnLi9tZXJnZVByb3BzJztcbmltcG9ydCBkZWZh
dWx0U2VsZWN0b3JGYWN0b3J5IGZyb20gJy4vc2VsZWN0b3JGYWN0b3J5JztcblxuLypcbiAgY29u
bmVjdCBpcyBhIGZhY2FkZSBvdmVyIGNvbm5lY3RBZHZhbmNlZC4gSXQgdHVybnMgaXRzIGFyZ3Mg
aW50byBhIGNvbXBhdGlibGVcbiAgc2VsZWN0b3JGYWN0b3J5LCB3aGljaCBoYXMgdGhlIHNpZ25h
dHVyZTpcblxuICAgIChkaXNwYXRjaCwgb3B0aW9ucykgPT4gKG5leHRTdGF0ZSwgbmV4dE93blBy
b3BzKSA9PiBuZXh0RmluYWxQcm9wc1xuICBcbiAgY29ubmVjdCBwYXNzZXMgaXRzIGFyZ3MgdG8g
Y29ubmVjdEFkdmFuY2VkIGFzIG9wdGlvbnMsIHdoaWNoIHdpbGwgaW4gdHVybiBwYXNzIHRoZW0g
dG9cbiAgc2VsZWN0b3JGYWN0b3J5IGVhY2ggdGltZSBhIENvbm5lY3QgY29tcG9uZW50IGluc3Rh
bmNlIGlzIGluc3RhbnRpYXRlZCBvciBob3QgcmVsb2FkZWQuXG5cbiAgc2VsZWN0b3JGYWN0b3J5
IHJldHVybnMgYSBmaW5hbCBwcm9wcyBzZWxlY3RvciBmcm9tIGl0cyBtYXBTdGF0ZVRvUHJvcHMs
XG4gIG1hcFN0YXRlVG9Qcm9wc0ZhY3RvcmllcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtYXBEaXNw
YXRjaFRvUHJvcHNGYWN0b3JpZXMsIG1lcmdlUHJvcHMsXG4gIG1lcmdlUHJvcHNGYWN0b3JpZXMs
IGFuZCBwdXJlIGFyZ3MuXG5cbiAgVGhlIHJlc3VsdGluZyBmaW5hbCBwcm9wcyBzZWxlY3RvciBp
cyBjYWxsZWQgYnkgdGhlIENvbm5lY3QgY29tcG9uZW50IGluc3RhbmNlIHdoZW5ldmVyXG4gIGl0
IHJlY2VpdmVzIG5ldyBwcm9wcyBvciBzdG9yZSBzdGF0ZS5cbiAqL1xuXG5mdW5jdGlvbiBtYXRj
aChhcmcsIGZhY3RvcmllcywgbmFtZSkge1xuICBmb3IgKHZhciBpID0gZmFjdG9yaWVzLmxlbmd0
aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgdmFyIHJlc3VsdCA9IGZhY3Rvcmllc1tpXShhcmcp
O1xuICAgIGlmIChyZXN1bHQpIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rp
b24gKGRpc3BhdGNoLCBvcHRpb25zKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHZh
bHVlIG9mIHR5cGUgJyArIHR5cGVvZiBhcmcgKyAnIGZvciAnICsgbmFtZSArICcgYXJndW1lbnQg
d2hlbiBjb25uZWN0aW5nIGNvbXBvbmVudCAnICsgb3B0aW9ucy53cmFwcGVkQ29tcG9uZW50TmFt
ZSArICcuJyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0cmljdEVxdWFsKGEsIGIpIHtcbiAgcmV0
dXJuIGEgPT09IGI7XG59XG5cbi8vIGNyZWF0ZUNvbm5lY3Qgd2l0aCBkZWZhdWx0IGFyZ3MgYnVp
bGRzIHRoZSAnb2ZmaWNpYWwnIGNvbm5lY3QgYmVoYXZpb3IuIENhbGxpbmcgaXQgd2l0aFxuLy8g
ZGlmZmVyZW50IG9wdGlvbnMgb3BlbnMgdXAgc29tZSB0ZXN0aW5nIGFuZCBleHRlbnNpYmlsaXR5
IHNjZW5hcmlvc1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbm5lY3QoKSB7XG4gIHZhciBfcmVm
ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBh
cmd1bWVudHNbMF0gOiB7fSxcbiAgICAgIF9yZWYkY29ubmVjdEhPQyA9IF9yZWYuY29ubmVjdEhP
QyxcbiAgICAgIGNvbm5lY3RIT0MgPSBfcmVmJGNvbm5lY3RIT0MgPT09IHVuZGVmaW5lZCA/IGNv
bm5lY3RBZHZhbmNlZCA6IF9yZWYkY29ubmVjdEhPQyxcbiAgICAgIF9yZWYkbWFwU3RhdGVUb1By
b3BzRiA9IF9yZWYubWFwU3RhdGVUb1Byb3BzRmFjdG9yaWVzLFxuICAgICAgbWFwU3RhdGVUb1By
b3BzRmFjdG9yaWVzID0gX3JlZiRtYXBTdGF0ZVRvUHJvcHNGID09PSB1bmRlZmluZWQgPyBkZWZh
dWx0TWFwU3RhdGVUb1Byb3BzRmFjdG9yaWVzIDogX3JlZiRtYXBTdGF0ZVRvUHJvcHNGLFxuICAg
ICAgX3JlZiRtYXBEaXNwYXRjaFRvUHJvID0gX3JlZi5tYXBEaXNwYXRjaFRvUHJvcHNGYWN0b3Jp
ZXMsXG4gICAgICBtYXBEaXNwYXRjaFRvUHJvcHNGYWN0b3JpZXMgPSBfcmVmJG1hcERpc3BhdGNo
VG9Qcm8gPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRNYXBEaXNwYXRjaFRvUHJvcHNGYWN0b3JpZXMg
OiBfcmVmJG1hcERpc3BhdGNoVG9Qcm8sXG4gICAgICBfcmVmJG1lcmdlUHJvcHNGYWN0b3IgPSBf
cmVmLm1lcmdlUHJvcHNGYWN0b3JpZXMsXG4gICAgICBtZXJnZVByb3BzRmFjdG9yaWVzID0gX3Jl
ZiRtZXJnZVByb3BzRmFjdG9yID09PSB1bmRlZmluZWQgPyBkZWZhdWx0TWVyZ2VQcm9wc0ZhY3Rv
cmllcyA6IF9yZWYkbWVyZ2VQcm9wc0ZhY3RvcixcbiAgICAgIF9yZWYkc2VsZWN0b3JGYWN0b3J5
ID0gX3JlZi5zZWxlY3RvckZhY3RvcnksXG4gICAgICBzZWxlY3RvckZhY3RvcnkgPSBfcmVmJHNl
bGVjdG9yRmFjdG9yeSA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdFNlbGVjdG9yRmFjdG9yeSA6IF9y
ZWYkc2VsZWN0b3JGYWN0b3J5O1xuXG4gIHJldHVybiBmdW5jdGlvbiBjb25uZWN0KG1hcFN0YXRl
VG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzKSB7XG4gICAgdmFyIF9yZWYy
ID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBh
cmd1bWVudHNbM10gOiB7fSxcbiAgICAgICAgX3JlZjIkcHVyZSA9IF9yZWYyLnB1cmUsXG4gICAg
ICAgIHB1cmUgPSBfcmVmMiRwdXJlID09PSB1bmRlZmluZWQgPyB0cnVlIDogX3JlZjIkcHVyZSxc
biAgICAgICAgX3JlZjIkYXJlU3RhdGVzRXF1YWwgPSBfcmVmMi5hcmVTdGF0ZXNFcXVhbCxcbiAg
ICAgICAgYXJlU3RhdGVzRXF1YWwgPSBfcmVmMiRhcmVTdGF0ZXNFcXVhbCA9PT0gdW5kZWZpbmVk
ID8gc3RyaWN0RXF1YWwgOiBfcmVmMiRhcmVTdGF0ZXNFcXVhbCxcbiAgICAgICAgX3JlZjIkYXJl
T3duUHJvcHNFcXVhID0gX3JlZjIuYXJlT3duUHJvcHNFcXVhbCxcbiAgICAgICAgYXJlT3duUHJv
cHNFcXVhbCA9IF9yZWYyJGFyZU93blByb3BzRXF1YSA9PT0gdW5kZWZpbmVkID8gc2hhbGxvd0Vx
dWFsIDogX3JlZjIkYXJlT3duUHJvcHNFcXVhLFxuICAgICAgICBfcmVmMiRhcmVTdGF0ZVByb3Bz
RXEgPSBfcmVmMi5hcmVTdGF0ZVByb3BzRXF1YWwsXG4gICAgICAgIGFyZVN0YXRlUHJvcHNFcXVh
bCA9IF9yZWYyJGFyZVN0YXRlUHJvcHNFcSA9PT0gdW5kZWZpbmVkID8gc2hhbGxvd0VxdWFsIDog
X3JlZjIkYXJlU3RhdGVQcm9wc0VxLFxuICAgICAgICBfcmVmMiRhcmVNZXJnZWRQcm9wc0UgPSBf
cmVmMi5hcmVNZXJnZWRQcm9wc0VxdWFsLFxuICAgICAgICBhcmVNZXJnZWRQcm9wc0VxdWFsID0g
X3JlZjIkYXJlTWVyZ2VkUHJvcHNFID09PSB1bmRlZmluZWQgPyBzaGFsbG93RXF1YWwgOiBfcmVm
MiRhcmVNZXJnZWRQcm9wc0UsXG4gICAgICAgIGV4dHJhT3B0aW9ucyA9IF9vYmplY3RXaXRob3V0
UHJvcGVydGllcyhfcmVmMiwgWydwdXJlJywgJ2FyZVN0YXRlc0VxdWFsJywgJ2FyZU93blByb3Bz
RXF1YWwnLCAnYXJlU3RhdGVQcm9wc0VxdWFsJywgJ2FyZU1lcmdlZFByb3BzRXF1YWwnXSk7XG5c
biAgICB2YXIgaW5pdE1hcFN0YXRlVG9Qcm9wcyA9IG1hdGNoKG1hcFN0YXRlVG9Qcm9wcywgbWFw
U3RhdGVUb1Byb3BzRmFjdG9yaWVzLCAnbWFwU3RhdGVUb1Byb3BzJyk7XG4gICAgdmFyIGluaXRN
YXBEaXNwYXRjaFRvUHJvcHMgPSBtYXRjaChtYXBEaXNwYXRjaFRvUHJvcHMsIG1hcERpc3BhdGNo
VG9Qcm9wc0ZhY3RvcmllcywgJ21hcERpc3BhdGNoVG9Qcm9wcycpO1xuICAgIHZhciBpbml0TWVy
Z2VQcm9wcyA9IG1hdGNoKG1lcmdlUHJvcHMsIG1lcmdlUHJvcHNGYWN0b3JpZXMsICdtZXJnZVBy
b3BzJyk7XG5cbiAgICByZXR1cm4gY29ubmVjdEhPQyhzZWxlY3RvckZhY3RvcnksIF9leHRlbmRz
KHtcbiAgICAgIC8vIHVzZWQgaW4gZXJyb3IgbWVzc2FnZXNcbiAgICAgIG1ldGhvZE5hbWU6ICdj
b25uZWN0JyxcblxuICAgICAgLy8gdXNlZCB0byBjb21wdXRlIENvbm5lY3QncyBkaXNwbGF5TmFt
ZSBmcm9tIHRoZSB3cmFwcGVkIGNvbXBvbmVudCdzIGRpc3BsYXlOYW1lLlxuICAgICAgZ2V0RGlz
cGxheU5hbWU6IGZ1bmN0aW9uIGdldERpc3BsYXlOYW1lKG5hbWUpIHtcbiAgICAgICAgcmV0dXJu
ICdDb25uZWN0KCcgKyBuYW1lICsgJyknO1xuICAgICAgfSxcblxuICAgICAgLy8gaWYgbWFwU3Rh
dGVUb1Byb3BzIGlzIGZhbHN5LCB0aGUgQ29ubmVjdCBjb21wb25lbnQgZG9lc24ndCBzdWJzY3Jp
YmUgdG8gc3RvcmUgc3RhdGUgY2hhbmdlc1xuICAgICAgc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2Vz
OiBCb29sZWFuKG1hcFN0YXRlVG9Qcm9wcyksXG5cbiAgICAgIC8vIHBhc3NlZCB0aHJvdWdoIHRv
IHNlbGVjdG9yRmFjdG9yeVxuICAgICAgaW5pdE1hcFN0YXRlVG9Qcm9wczogaW5pdE1hcFN0YXRl
VG9Qcm9wcyxcbiAgICAgIGluaXRNYXBEaXNwYXRjaFRvUHJvcHM6IGluaXRNYXBEaXNwYXRjaFRv
UHJvcHMsXG4gICAgICBpbml0TWVyZ2VQcm9wczogaW5pdE1lcmdlUHJvcHMsXG4gICAgICBwdXJl
OiBwdXJlLFxuICAgICAgYXJlU3RhdGVzRXF1YWw6IGFyZVN0YXRlc0VxdWFsLFxuICAgICAgYXJl
T3duUHJvcHNFcXVhbDogYXJlT3duUHJvcHNFcXVhbCxcbiAgICAgIGFyZVN0YXRlUHJvcHNFcXVh
bDogYXJlU3RhdGVQcm9wc0VxdWFsLFxuICAgICAgYXJlTWVyZ2VkUHJvcHNFcXVhbDogYXJlTWVy
Z2VkUHJvcHNFcXVhbFxuXG4gICAgfSwgZXh0cmFPcHRpb25zKSk7XG4gIH07XG59XG5cbmV4cG9y
dCBkZWZhdWx0IGNyZWF0ZUNvbm5lY3QoKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdF
QlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9jb25uZWN0L2Nv
bm5lY3QuanNcbi8vIG1vZHVsZSBpZCA9IDIxNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIg
aGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuZnVuY3Rpb24gaXMo
eCwgeSkge1xuICBpZiAoeCA9PT0geSkge1xuICAgIHJldHVybiB4ICE9PSAwIHx8IHkgIT09IDAg
fHwgMSAvIHggPT09IDEgLyB5O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB4ICE9PSB4ICYmIHkg
IT09IHk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2hhbGxvd0VxdWFsKG9i
akEsIG9iakIpIHtcbiAgaWYgKGlzKG9iakEsIG9iakIpKSByZXR1cm4gdHJ1ZTtcblxuICBpZiAo
dHlwZW9mIG9iakEgIT09ICdvYmplY3QnIHx8IG9iakEgPT09IG51bGwgfHwgdHlwZW9mIG9iakIg
IT09ICdvYmplY3QnIHx8IG9iakIgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1c
blxuICB2YXIga2V5c0EgPSBPYmplY3Qua2V5cyhvYmpBKTtcbiAgdmFyIGtleXNCID0gT2JqZWN0
LmtleXMob2JqQik7XG5cbiAgaWYgKGtleXNBLmxlbmd0aCAhPT0ga2V5c0IubGVuZ3RoKSByZXR1
cm4gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzQS5sZW5ndGg7IGkrKykge1xu
ICAgIGlmICghaGFzT3duLmNhbGwob2JqQiwga2V5c0FbaV0pIHx8ICFpcyhvYmpBW2tleXNBW2ld
XSwgb2JqQltrZXlzQVtpXV0pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5c
biAgcmV0dXJuIHRydWU7XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZP
T1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvdXRpbHMvc2hhbGxvd0VxdWFs
LmpzXG4vLyBtb2R1bGUgaWQgPSAyMTZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0IHsg
YmluZEFjdGlvbkNyZWF0b3JzIH0gZnJvbSAncmVkdXgnO1xuaW1wb3J0IHsgd3JhcE1hcFRvUHJv
cHNDb25zdGFudCwgd3JhcE1hcFRvUHJvcHNGdW5jIH0gZnJvbSAnLi93cmFwTWFwVG9Qcm9wcyc7
XG5cbmV4cG9ydCBmdW5jdGlvbiB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNGdW5jdGlvbihtYXBE
aXNwYXRjaFRvUHJvcHMpIHtcbiAgcmV0dXJuIHR5cGVvZiBtYXBEaXNwYXRjaFRvUHJvcHMgPT09
ICdmdW5jdGlvbicgPyB3cmFwTWFwVG9Qcm9wc0Z1bmMobWFwRGlzcGF0Y2hUb1Byb3BzLCAnbWFw
RGlzcGF0Y2hUb1Byb3BzJykgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aGVu
TWFwRGlzcGF0Y2hUb1Byb3BzSXNNaXNzaW5nKG1hcERpc3BhdGNoVG9Qcm9wcykge1xuICByZXR1
cm4gIW1hcERpc3BhdGNoVG9Qcm9wcyA/IHdyYXBNYXBUb1Byb3BzQ29uc3RhbnQoZnVuY3Rpb24g
KGRpc3BhdGNoKSB7XG4gICAgcmV0dXJuIHsgZGlzcGF0Y2g6IGRpc3BhdGNoIH07XG4gIH0pIDog
dW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2hlbk1hcERpc3BhdGNoVG9Qcm9wc0lz
T2JqZWN0KG1hcERpc3BhdGNoVG9Qcm9wcykge1xuICByZXR1cm4gbWFwRGlzcGF0Y2hUb1Byb3Bz
ICYmIHR5cGVvZiBtYXBEaXNwYXRjaFRvUHJvcHMgPT09ICdvYmplY3QnID8gd3JhcE1hcFRvUHJv
cHNDb25zdGFudChmdW5jdGlvbiAoZGlzcGF0Y2gpIHtcbiAgICByZXR1cm4gYmluZEFjdGlvbkNy
ZWF0b3JzKG1hcERpc3BhdGNoVG9Qcm9wcywgZGlzcGF0Y2gpO1xuICB9KSA6IHVuZGVmaW5lZDtc
bn1cblxuZXhwb3J0IGRlZmF1bHQgW3doZW5NYXBEaXNwYXRjaFRvUHJvcHNJc0Z1bmN0aW9uLCB3
aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNNaXNzaW5nLCB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNP
YmplY3RdO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4v
bm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2Nvbm5lY3QvbWFwRGlzcGF0Y2hUb1Byb3BzLmpz
XG4vLyBtb2R1bGUgaWQgPSAyMTdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0IHsgd3Jh
cE1hcFRvUHJvcHNDb25zdGFudCwgd3JhcE1hcFRvUHJvcHNGdW5jIH0gZnJvbSAnLi93cmFwTWFw
VG9Qcm9wcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB3aGVuTWFwU3RhdGVUb1Byb3BzSXNGdW5jdGlv
bihtYXBTdGF0ZVRvUHJvcHMpIHtcbiAgcmV0dXJuIHR5cGVvZiBtYXBTdGF0ZVRvUHJvcHMgPT09
ICdmdW5jdGlvbicgPyB3cmFwTWFwVG9Qcm9wc0Z1bmMobWFwU3RhdGVUb1Byb3BzLCAnbWFwU3Rh
dGVUb1Byb3BzJykgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aGVuTWFwU3Rh
dGVUb1Byb3BzSXNNaXNzaW5nKG1hcFN0YXRlVG9Qcm9wcykge1xuICByZXR1cm4gIW1hcFN0YXRl
VG9Qcm9wcyA/IHdyYXBNYXBUb1Byb3BzQ29uc3RhbnQoZnVuY3Rpb24gKCkge1xuICAgIHJldHVy
biB7fTtcbiAgfSkgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFt3aGVuTWFwU3Rh
dGVUb1Byb3BzSXNGdW5jdGlvbiwgd2hlbk1hcFN0YXRlVG9Qcm9wc0lzTWlzc2luZ107XG5cblxu
Ly8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMv
cmVhY3QtcmVkdXgvZXMvY29ubmVjdC9tYXBTdGF0ZVRvUHJvcHMuanNcbi8vIG1vZHVsZSBpZCA9
IDIxOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWdu
IHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVu
Z3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNv
dXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwg
a2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9
O1xuXG5pbXBvcnQgdmVyaWZ5UGxhaW5PYmplY3QgZnJvbSAnLi4vdXRpbHMvdmVyaWZ5UGxhaW5P
YmplY3QnO1xuXG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdE1lcmdlUHJvcHMoc3RhdGVQcm9wcywg
ZGlzcGF0Y2hQcm9wcywgb3duUHJvcHMpIHtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBvd25Qcm9w
cywgc3RhdGVQcm9wcywgZGlzcGF0Y2hQcm9wcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cmFw
TWVyZ2VQcm9wc0Z1bmMobWVyZ2VQcm9wcykge1xuICByZXR1cm4gZnVuY3Rpb24gaW5pdE1lcmdl
UHJvcHNQcm94eShkaXNwYXRjaCwgX3JlZikge1xuICAgIHZhciBkaXNwbGF5TmFtZSA9IF9yZWYu
ZGlzcGxheU5hbWUsXG4gICAgICAgIHB1cmUgPSBfcmVmLnB1cmUsXG4gICAgICAgIGFyZU1lcmdl
ZFByb3BzRXF1YWwgPSBfcmVmLmFyZU1lcmdlZFByb3BzRXF1YWw7XG5cbiAgICB2YXIgaGFzUnVu
T25jZSA9IGZhbHNlO1xuICAgIHZhciBtZXJnZWRQcm9wcyA9IHZvaWQgMDtcblxuICAgIHJldHVy
biBmdW5jdGlvbiBtZXJnZVByb3BzUHJveHkoc3RhdGVQcm9wcywgZGlzcGF0Y2hQcm9wcywgb3du
UHJvcHMpIHtcbiAgICAgIHZhciBuZXh0TWVyZ2VkUHJvcHMgPSBtZXJnZVByb3BzKHN0YXRlUHJv
cHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKTtcblxuICAgICAgaWYgKGhhc1J1bk9uY2UpIHtc
biAgICAgICAgaWYgKCFwdXJlIHx8ICFhcmVNZXJnZWRQcm9wc0VxdWFsKG5leHRNZXJnZWRQcm9w
cywgbWVyZ2VkUHJvcHMpKSBtZXJnZWRQcm9wcyA9IG5leHRNZXJnZWRQcm9wcztcbiAgICAgIH0g
ZWxzZSB7XG4gICAgICAgIGhhc1J1bk9uY2UgPSB0cnVlO1xuICAgICAgICBtZXJnZWRQcm9wcyA9
IG5leHRNZXJnZWRQcm9wcztcblxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09
ICdwcm9kdWN0aW9uJykgdmVyaWZ5UGxhaW5PYmplY3QobWVyZ2VkUHJvcHMsIGRpc3BsYXlOYW1l
LCAnbWVyZ2VQcm9wcycpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWVyZ2VkUHJvcHM7XG4g
ICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdoZW5NZXJnZVByb3BzSXNGdW5jdGlv
bihtZXJnZVByb3BzKSB7XG4gIHJldHVybiB0eXBlb2YgbWVyZ2VQcm9wcyA9PT0gJ2Z1bmN0aW9u
JyA/IHdyYXBNZXJnZVByb3BzRnVuYyhtZXJnZVByb3BzKSA6IHVuZGVmaW5lZDtcbn1cblxuZXhw
b3J0IGZ1bmN0aW9uIHdoZW5NZXJnZVByb3BzSXNPbWl0dGVkKG1lcmdlUHJvcHMpIHtcbiAgcmV0
dXJuICFtZXJnZVByb3BzID8gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBkZWZhdWx0TWVyZ2VQ
cm9wcztcbiAgfSA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgW3doZW5NZXJnZVBy
b3BzSXNGdW5jdGlvbiwgd2hlbk1lcmdlUHJvcHNJc09taXR0ZWRdO1xuXG5cbi8vLy8vLy8vLy8v
Ly8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4
L2VzL2Nvbm5lY3QvbWVyZ2VQcm9wcy5qc1xuLy8gbW9kdWxlIGlkID0gMjE5XG4vLyBtb2R1bGUg
Y2h1bmtzID0gMCIsImZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMp
IHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9m
KGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHku
Y2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJn
ZXQ7IH1cblxuaW1wb3J0IHZlcmlmeVN1YnNlbGVjdG9ycyBmcm9tICcuL3ZlcmlmeVN1YnNlbGVj
dG9ycyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbXB1cmVGaW5hbFByb3BzU2VsZWN0b3JGYWN0b3J5
KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzLCBkaXNwYXRj
aCkge1xuICByZXR1cm4gZnVuY3Rpb24gaW1wdXJlRmluYWxQcm9wc1NlbGVjdG9yKHN0YXRlLCBv
d25Qcm9wcykge1xuICAgIHJldHVybiBtZXJnZVByb3BzKG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwg
b3duUHJvcHMpLCBtYXBEaXNwYXRjaFRvUHJvcHMoZGlzcGF0Y2gsIG93blByb3BzKSwgb3duUHJv
cHMpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHVyZUZpbmFsUHJvcHNTZWxlY3RvckZh
Y3RvcnkobWFwU3RhdGVUb1Byb3BzLCBtYXBEaXNwYXRjaFRvUHJvcHMsIG1lcmdlUHJvcHMsIGRp
c3BhdGNoLCBfcmVmKSB7XG4gIHZhciBhcmVTdGF0ZXNFcXVhbCA9IF9yZWYuYXJlU3RhdGVzRXF1
YWwsXG4gICAgICBhcmVPd25Qcm9wc0VxdWFsID0gX3JlZi5hcmVPd25Qcm9wc0VxdWFsLFxuICAg
ICAgYXJlU3RhdGVQcm9wc0VxdWFsID0gX3JlZi5hcmVTdGF0ZVByb3BzRXF1YWw7XG5cbiAgdmFy
IGhhc1J1bkF0TGVhc3RPbmNlID0gZmFsc2U7XG4gIHZhciBzdGF0ZSA9IHZvaWQgMDtcbiAgdmFy
IG93blByb3BzID0gdm9pZCAwO1xuICB2YXIgc3RhdGVQcm9wcyA9IHZvaWQgMDtcbiAgdmFyIGRp
c3BhdGNoUHJvcHMgPSB2b2lkIDA7XG4gIHZhciBtZXJnZWRQcm9wcyA9IHZvaWQgMDtcblxuICBm
dW5jdGlvbiBoYW5kbGVGaXJzdENhbGwoZmlyc3RTdGF0ZSwgZmlyc3RPd25Qcm9wcykge1xuICAg
IHN0YXRlID0gZmlyc3RTdGF0ZTtcbiAgICBvd25Qcm9wcyA9IGZpcnN0T3duUHJvcHM7XG4gICAg
c3RhdGVQcm9wcyA9IG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpO1xuICAgIGRpc3Bh
dGNoUHJvcHMgPSBtYXBEaXNwYXRjaFRvUHJvcHMoZGlzcGF0Y2gsIG93blByb3BzKTtcbiAgICBt
ZXJnZWRQcm9wcyA9IG1lcmdlUHJvcHMoc3RhdGVQcm9wcywgZGlzcGF0Y2hQcm9wcywgb3duUHJv
cHMpO1xuICAgIGhhc1J1bkF0TGVhc3RPbmNlID0gdHJ1ZTtcbiAgICByZXR1cm4gbWVyZ2VkUHJv
cHM7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVOZXdQcm9wc0FuZE5ld1N0YXRlKCkge1xuICAg
IHN0YXRlUHJvcHMgPSBtYXBTdGF0ZVRvUHJvcHMoc3RhdGUsIG93blByb3BzKTtcblxuICAgIGlm
IChtYXBEaXNwYXRjaFRvUHJvcHMuZGVwZW5kc09uT3duUHJvcHMpIGRpc3BhdGNoUHJvcHMgPSBt
YXBEaXNwYXRjaFRvUHJvcHMoZGlzcGF0Y2gsIG93blByb3BzKTtcblxuICAgIG1lcmdlZFByb3Bz
ID0gbWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcyk7XG4gICAg
cmV0dXJuIG1lcmdlZFByb3BzO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlTmV3UHJvcHMoKSB7
XG4gICAgaWYgKG1hcFN0YXRlVG9Qcm9wcy5kZXBlbmRzT25Pd25Qcm9wcykgc3RhdGVQcm9wcyA9
IG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpO1xuXG4gICAgaWYgKG1hcERpc3BhdGNo
VG9Qcm9wcy5kZXBlbmRzT25Pd25Qcm9wcykgZGlzcGF0Y2hQcm9wcyA9IG1hcERpc3BhdGNoVG9Q
cm9wcyhkaXNwYXRjaCwgb3duUHJvcHMpO1xuXG4gICAgbWVyZ2VkUHJvcHMgPSBtZXJnZVByb3Bz
KHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKTtcbiAgICByZXR1cm4gbWVyZ2Vk
UHJvcHM7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVOZXdTdGF0ZSgpIHtcbiAgICB2YXIgbmV4
dFN0YXRlUHJvcHMgPSBtYXBTdGF0ZVRvUHJvcHMoc3RhdGUsIG93blByb3BzKTtcbiAgICB2YXIg
c3RhdGVQcm9wc0NoYW5nZWQgPSAhYXJlU3RhdGVQcm9wc0VxdWFsKG5leHRTdGF0ZVByb3BzLCBz
dGF0ZVByb3BzKTtcbiAgICBzdGF0ZVByb3BzID0gbmV4dFN0YXRlUHJvcHM7XG5cbiAgICBpZiAo
c3RhdGVQcm9wc0NoYW5nZWQpIG1lcmdlZFByb3BzID0gbWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBk
aXNwYXRjaFByb3BzLCBvd25Qcm9wcyk7XG5cbiAgICByZXR1cm4gbWVyZ2VkUHJvcHM7XG4gIH1c
blxuICBmdW5jdGlvbiBoYW5kbGVTdWJzZXF1ZW50Q2FsbHMobmV4dFN0YXRlLCBuZXh0T3duUHJv
cHMpIHtcbiAgICB2YXIgcHJvcHNDaGFuZ2VkID0gIWFyZU93blByb3BzRXF1YWwobmV4dE93blBy
b3BzLCBvd25Qcm9wcyk7XG4gICAgdmFyIHN0YXRlQ2hhbmdlZCA9ICFhcmVTdGF0ZXNFcXVhbChu
ZXh0U3RhdGUsIHN0YXRlKTtcbiAgICBzdGF0ZSA9IG5leHRTdGF0ZTtcbiAgICBvd25Qcm9wcyA9
IG5leHRPd25Qcm9wcztcblxuICAgIGlmIChwcm9wc0NoYW5nZWQgJiYgc3RhdGVDaGFuZ2VkKSBy
ZXR1cm4gaGFuZGxlTmV3UHJvcHNBbmROZXdTdGF0ZSgpO1xuICAgIGlmIChwcm9wc0NoYW5nZWQp
IHJldHVybiBoYW5kbGVOZXdQcm9wcygpO1xuICAgIGlmIChzdGF0ZUNoYW5nZWQpIHJldHVybiBo
YW5kbGVOZXdTdGF0ZSgpO1xuICAgIHJldHVybiBtZXJnZWRQcm9wcztcbiAgfVxuXG4gIHJldHVy
biBmdW5jdGlvbiBwdXJlRmluYWxQcm9wc1NlbGVjdG9yKG5leHRTdGF0ZSwgbmV4dE93blByb3Bz
KSB7XG4gICAgcmV0dXJuIGhhc1J1bkF0TGVhc3RPbmNlID8gaGFuZGxlU3Vic2VxdWVudENhbGxz
KG5leHRTdGF0ZSwgbmV4dE93blByb3BzKSA6IGhhbmRsZUZpcnN0Q2FsbChuZXh0U3RhdGUsIG5l
eHRPd25Qcm9wcyk7XG4gIH07XG59XG5cbi8vIFRPRE86IEFkZCBtb3JlIGNvbW1lbnRzXG5cbi8v
IElmIHB1cmUgaXMgdHJ1ZSwgdGhlIHNlbGVjdG9yIHJldHVybmVkIGJ5IHNlbGVjdG9yRmFjdG9y
eSB3aWxsIG1lbW9pemUgaXRzIHJlc3VsdHMsXG4vLyBhbGxvd2luZyBjb25uZWN0QWR2YW5jZWQn
cyBzaG91bGRDb21wb25lbnRVcGRhdGUgdG8gcmV0dXJuIGZhbHNlIGlmIGZpbmFsXG4vLyBwcm9w
cyBoYXZlIG5vdCBjaGFuZ2VkLiBJZiBmYWxzZSwgdGhlIHNlbGVjdG9yIHdpbGwgYWx3YXlzIHJl
dHVybiBhIG5ld1xuLy8gb2JqZWN0IGFuZCBzaG91bGRDb21wb25lbnRVcGRhdGUgd2lsbCBhbHdh
eXMgcmV0dXJuIHRydWUuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZpbmFsUHJvcHNTZWxl
Y3RvckZhY3RvcnkoZGlzcGF0Y2gsIF9yZWYyKSB7XG4gIHZhciBpbml0TWFwU3RhdGVUb1Byb3Bz
ID0gX3JlZjIuaW5pdE1hcFN0YXRlVG9Qcm9wcyxcbiAgICAgIGluaXRNYXBEaXNwYXRjaFRvUHJv
cHMgPSBfcmVmMi5pbml0TWFwRGlzcGF0Y2hUb1Byb3BzLFxuICAgICAgaW5pdE1lcmdlUHJvcHMg
PSBfcmVmMi5pbml0TWVyZ2VQcm9wcyxcbiAgICAgIG9wdGlvbnMgPSBfb2JqZWN0V2l0aG91dFBy
b3BlcnRpZXMoX3JlZjIsIFsnaW5pdE1hcFN0YXRlVG9Qcm9wcycsICdpbml0TWFwRGlzcGF0Y2hU
b1Byb3BzJywgJ2luaXRNZXJnZVByb3BzJ10pO1xuXG4gIHZhciBtYXBTdGF0ZVRvUHJvcHMgPSBp
bml0TWFwU3RhdGVUb1Byb3BzKGRpc3BhdGNoLCBvcHRpb25zKTtcbiAgdmFyIG1hcERpc3BhdGNo
VG9Qcm9wcyA9IGluaXRNYXBEaXNwYXRjaFRvUHJvcHMoZGlzcGF0Y2gsIG9wdGlvbnMpO1xuICB2
YXIgbWVyZ2VQcm9wcyA9IGluaXRNZXJnZVByb3BzKGRpc3BhdGNoLCBvcHRpb25zKTtcblxuICBp
ZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHZlcmlmeVN1
YnNlbGVjdG9ycyhtYXBTdGF0ZVRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wcywgbWVyZ2VQcm9w
cywgb3B0aW9ucy5kaXNwbGF5TmFtZSk7XG4gIH1cblxuICB2YXIgc2VsZWN0b3JGYWN0b3J5ID0g
b3B0aW9ucy5wdXJlID8gcHVyZUZpbmFsUHJvcHNTZWxlY3RvckZhY3RvcnkgOiBpbXB1cmVGaW5h
bFByb3BzU2VsZWN0b3JGYWN0b3J5O1xuXG4gIHJldHVybiBzZWxlY3RvckZhY3RvcnkobWFwU3Rh
dGVUb1Byb3BzLCBtYXBEaXNwYXRjaFRvUHJvcHMsIG1lcmdlUHJvcHMsIGRpc3BhdGNoLCBvcHRp
b25zKTtcbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAu
L25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9jb25uZWN0L3NlbGVjdG9yRmFjdG9yeS5qc1xu
Ly8gbW9kdWxlIGlkID0gMjIwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImltcG9ydCBSZWFjdCwg
eyBQcm9wVHlwZXMgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGJpbmRBY3Rpb25DcmVhdG9ycyB9
IGZyb20gJ3JlZHV4J1xuaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4J1xuaW1w
b3J0IEhlYWRlciBmcm9tICcuLi9jb21wb25lbnRzL0hlYWRlcidcbmltcG9ydCBNYWluU2VjdGlv
biBmcm9tICcuLi9jb21wb25lbnRzL01haW5TZWN0aW9uJ1xuaW1wb3J0ICogYXMgVG9kb0FjdGlv
bnMgZnJvbSAnLi4vYWN0aW9ucydcblxuY29uc3QgQXBwID0gKHt0b2RvcywgYWN0aW9uc30pID0+
IChcbiAgPGRpdj5cbiAgICA8SGVhZGVyIGFkZFRvZG89e2FjdGlvbnMuYWRkVG9kb30gLz5cbiAg
ICA8TWFpblNlY3Rpb24gdG9kb3M9e3RvZG9zfSBhY3Rpb25zPXthY3Rpb25zfSAvPlxuICA8L2Rp
dj5cbilcblxuQXBwLnByb3BUeXBlcyA9IHtcbiAgdG9kb3M6IFByb3BUeXBlcy5hcnJheS5pc1Jl
cXVpcmVkLFxuICBhY3Rpb25zOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWRcbn1cblxuY29u
c3QgbWFwU3RhdGVUb1Byb3BzID0gc3RhdGUgPT4gKHtcbiAgdG9kb3M6IHN0YXRlLnRvZG9zXG59
KVxuXG5jb25zdCBtYXBEaXNwYXRjaFRvUHJvcHMgPSBkaXNwYXRjaCA9PiAoe1xuICAgIGFjdGlv
bnM6IGJpbmRBY3Rpb25DcmVhdG9ycyhUb2RvQWN0aW9ucywgZGlzcGF0Y2gpXG59KVxuXG5leHBv
cnQgZGVmYXVsdCBjb25uZWN0KFxuICBtYXBTdGF0ZVRvUHJvcHMsXG4gIG1hcERpc3BhdGNoVG9Q
cm9wc1xuKShBcHApXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY29udGFp
bmVycy9BcHAuanMiLCJpbXBvcnQgUmVhY3QsIHsgUHJvcFR5cGVzLCBDb21wb25lbnQgfSBmcm9t
ICdyZWFjdCdcbmltcG9ydCBUb2RvVGV4dElucHV0IGZyb20gJy4vVG9kb1RleHRJbnB1dCdcblxu
ZXhwb3J0IGRlZmF1bHQgY2xhc3MgSGVhZGVyIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgc3RhdGlj
IHByb3BUeXBlcyA9IHtcbiAgICBhZGRUb2RvOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG4g
IH1cblxuICBoYW5kbGVTYXZlID0gdGV4dCA9PiB7XG4gICAgaWYgKHRleHQubGVuZ3RoICE9PSAw
KSB7XG4gICAgICB0aGlzLnByb3BzLmFkZFRvZG8odGV4dClcbiAgICB9XG4gIH1cblxuICByZW5k
ZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxoZWFkZXIgY2xhc3NOYW1lPVwiaGVhZGVyXCI+
XG4gICAgICAgIDxoMT50b2RvczwvaDE+XG4gICAgICAgIDxUb2RvVGV4dElucHV0IG5ld1RvZG9c
biAgICAgICAgICAgICAgICAgICAgICAgb25TYXZlPXt0aGlzLmhhbmRsZVNhdmV9XG4gICAgICAg
ICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiV2hhdCBuZWVkcyB0byBiZSBkb25lP1wiIC8+
XG4gICAgICA8L2hlYWRlcj5cbiAgICApXG4gIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVS
IC8vXG4vLyAuL3NyYy9jb21wb25lbnRzL0hlYWRlci5qcyIsImltcG9ydCBSZWFjdCwgeyBDb21w
b25lbnQsIFByb3BUeXBlcyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFRvZG9JdGVtIGZyb20gJy4v
VG9kb0l0ZW0nXG5pbXBvcnQgRm9vdGVyIGZyb20gJy4vRm9vdGVyJ1xuaW1wb3J0IHsgU0hPV19B
TEwsIFNIT1dfQ09NUExFVEVELCBTSE9XX0FDVElWRSB9IGZyb20gJy4uL2NvbnN0YW50cy9Ub2Rv
RmlsdGVycydcblxuY29uc3QgVE9ET19GSUxURVJTID0ge1xuICBbU0hPV19BTExdOiAoKSA9PiB0
cnVlLFxuICBbU0hPV19BQ1RJVkVdOiB0b2RvID0+ICF0b2RvLmNvbXBsZXRlZCxcbiAgW1NIT1df
Q09NUExFVEVEXTogdG9kbyA9PiB0b2RvLmNvbXBsZXRlZFxufVxuXG5leHBvcnQgZGVmYXVsdCBj
bGFzcyBNYWluU2VjdGlvbiBleHRlbmRzIENvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMg
PSB7XG4gICAgdG9kb3M6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICAgIGFjdGlvbnM6
IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZFxuICB9XG5cbiAgc3RhdGUgPSB7IGZpbHRlcjog
U0hPV19BTEwgfVxuXG4gIGhhbmRsZUNsZWFyQ29tcGxldGVkID0gKCkgPT4ge1xuICAgIHRoaXMu
cHJvcHMuYWN0aW9ucy5jbGVhckNvbXBsZXRlZCgpXG4gIH1cblxuICBoYW5kbGVTaG93ID0gZmls
dGVyID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHsgZmlsdGVyIH0pXG4gIH1cblxuICByZW5kZXJU
b2dnbGVBbGwoY29tcGxldGVkQ291bnQpIHtcbiAgICBjb25zdCB7IHRvZG9zLCBhY3Rpb25zIH0g
PSB0aGlzLnByb3BzXG4gICAgaWYgKHRvZG9zLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiAo
XG4gICAgICAgIDxpbnB1dCBjbGFzc05hbWU9XCJ0b2dnbGUtYWxsXCJcbiAgICAgICAgICAgICAg
IHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICBjaGVja2VkPXtjb21wbGV0ZWRDb3Vu
dCA9PT0gdG9kb3MubGVuZ3RofVxuICAgICAgICAgICAgICAgb25DaGFuZ2U9e2FjdGlvbnMuY29t
cGxldGVBbGx9IC8+XG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgcmVuZGVyRm9vdGVyKGNvbXBs
ZXRlZENvdW50KSB7XG4gICAgY29uc3QgeyB0b2RvcyB9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0
IHsgZmlsdGVyIH0gPSB0aGlzLnN0YXRlXG4gICAgY29uc3QgYWN0aXZlQ291bnQgPSB0b2Rvcy5s
ZW5ndGggLSBjb21wbGV0ZWRDb3VudFxuXG4gICAgaWYgKHRvZG9zLmxlbmd0aCkge1xuICAgICAg
cmV0dXJuIChcbiAgICAgICAgPEZvb3RlciBjb21wbGV0ZWRDb3VudD17Y29tcGxldGVkQ291bnR9
XG4gICAgICAgICAgICAgICAgYWN0aXZlQ291bnQ9e2FjdGl2ZUNvdW50fVxuICAgICAgICAgICAg
ICAgIGZpbHRlcj17ZmlsdGVyfVxuICAgICAgICAgICAgICAgIG9uQ2xlYXJDb21wbGV0ZWQ9e3Ro
aXMuaGFuZGxlQ2xlYXJDb21wbGV0ZWQuYmluZCh0aGlzKX1cbiAgICAgICAgICAgICAgICBvblNo
b3c9e3RoaXMuaGFuZGxlU2hvdy5iaW5kKHRoaXMpfSAvPlxuICAgICAgKVxuICAgIH1cbiAgfVxu
XG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IHRvZG9zLCBhY3Rpb25zIH0gPSB0aGlzLnByb3Bz
XG4gICAgY29uc3QgeyBmaWx0ZXIgfSA9IHRoaXMuc3RhdGVcblxuICAgIGNvbnN0IGZpbHRlcmVk
VG9kb3MgPSB0b2Rvcy5maWx0ZXIoVE9ET19GSUxURVJTW2ZpbHRlcl0pXG4gICAgY29uc3QgY29t
cGxldGVkQ291bnQgPSB0b2Rvcy5yZWR1Y2UoKGNvdW50LCB0b2RvKSA9PlxuICAgICAgdG9kby5j
b21wbGV0ZWQgPyBjb3VudCArIDEgOiBjb3VudCxcbiAgICAgIDBcbiAgICApXG5cbiAgICByZXR1
cm4gKFxuICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwibWFpblwiPlxuICAgICAgICB7dGhpcy5y
ZW5kZXJUb2dnbGVBbGwoY29tcGxldGVkQ291bnQpfVxuICAgICAgICA8dWwgY2xhc3NOYW1lPVwi
dG9kby1saXN0XCI+XG4gICAgICAgICAge2ZpbHRlcmVkVG9kb3MubWFwKHRvZG8gPT5cbiAgICAg
ICAgICAgIDxUb2RvSXRlbSBrZXk9e3RvZG8uaWR9IHRvZG89e3RvZG99IHsuLi5hY3Rpb25zfSAv
PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvdWw+XG4gICAgICAgIHt0aGlzLnJlbmRlckZvb3Rl
cihjb21wbGV0ZWRDb3VudCl9XG4gICAgICA8L3NlY3Rpb24+XG4gICAgKVxuICB9XG59XG5cblxu
XG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY29tcG9uZW50cy9NYWluU2VjdGlvbi5q
cyIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFByb3BUeXBlcyB9IGZyb20gJ3JlYWN0J1xu
aW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCBUb2RvVGV4dElucHV0
IGZyb20gJy4vVG9kb1RleHRJbnB1dCdcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9kb0l0ZW0g
ZXh0ZW5kcyBDb21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIHRvZG86IFBy
b3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICBlZGl0VG9kbzogUHJvcFR5cGVzLmZ1bmMu
aXNSZXF1aXJlZCxcbiAgICBkZWxldGVUb2RvOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxu
ICAgIGNvbXBsZXRlVG9kbzogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxuICB9XG5cbiAgc3Rh
dGUgPSB7XG4gICAgZWRpdGluZzogZmFsc2VcbiAgfVxuXG4gIGhhbmRsZURvdWJsZUNsaWNrID0g
KCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoeyBlZGl0aW5nOiB0cnVlIH0pXG4gIH1cblxuICBo
YW5kbGVTYXZlID0gKGlkLCB0ZXh0KSA9PiB7XG4gICAgaWYgKHRleHQubGVuZ3RoID09PSAwKSB7
XG4gICAgICB0aGlzLnByb3BzLmRlbGV0ZVRvZG8oaWQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRo
aXMucHJvcHMuZWRpdFRvZG8oaWQsIHRleHQpXG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoeyBl
ZGl0aW5nOiBmYWxzZSB9KVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgdG9kbywg
Y29tcGxldGVUb2RvLCBkZWxldGVUb2RvIH0gPSB0aGlzLnByb3BzXG5cbiAgICBsZXQgZWxlbWVu
dFxuICAgIGlmICh0aGlzLnN0YXRlLmVkaXRpbmcpIHtcbiAgICAgIGVsZW1lbnQgPSAoXG4gICAg
ICAgIDxUb2RvVGV4dElucHV0IHRleHQ9e3RvZG8udGV4dH1cbiAgICAgICAgICAgICAgICAgICAg
ICAgZWRpdGluZz17dGhpcy5zdGF0ZS5lZGl0aW5nfVxuICAgICAgICAgICAgICAgICAgICAgICBv
blNhdmU9eyh0ZXh0KSA9PiB0aGlzLmhhbmRsZVNhdmUodG9kby5pZCwgdGV4dCl9IC8+XG4gICAg
ICApXG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQgPSAoXG4gICAgICAgIDxkaXYgY2xhc3NO
YW1lPVwidmlld1wiPlxuICAgICAgICAgIDxpbnB1dCBjbGFzc05hbWU9XCJ0b2dnbGVcIlxuICAg
ICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICBjaGVja2Vk
PXt0b2RvLmNvbXBsZXRlZH1cbiAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eygpID0+IGNvbXBs
ZXRlVG9kbyh0b2RvLmlkKX0gLz5cbiAgICAgICAgICA8bGFiZWwgb25Eb3VibGVDbGljaz17dGhp
cy5oYW5kbGVEb3VibGVDbGlja30+XG4gICAgICAgICAgICB7dG9kby50ZXh0fVxuICAgICAgICAg
IDwvbGFiZWw+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJkZXN0cm95XCJcbiAgICAg
ICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGRlbGV0ZVRvZG8odG9kby5pZCl9IC8+XG4gICAg
ICAgIDwvZGl2PlxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8bGkgY2xh
c3NOYW1lPXtjbGFzc25hbWVzKHtcbiAgICAgICAgY29tcGxldGVkOiB0b2RvLmNvbXBsZXRlZCxc
biAgICAgICAgZWRpdGluZzogdGhpcy5zdGF0ZS5lZGl0aW5nXG4gICAgICB9KX0+XG4gICAgICAg
IHtlbGVtZW50fVxuICAgICAgPC9saT5cbiAgICApXG4gIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sg
Rk9PVEVSIC8vXG4vLyAuL3NyYy9jb21wb25lbnRzL1RvZG9JdGVtLmpzIiwiaW1wb3J0IFJlYWN0
LCB7IFByb3BUeXBlcywgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgY2xhc3NuYW1l
cyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgU0hPV19BTEwsIFNIT1dfQ09NUExFVEVELCBT
SE9XX0FDVElWRSB9IGZyb20gJy4uL2NvbnN0YW50cy9Ub2RvRmlsdGVycydcblxuY29uc3QgRklM
VEVSX1RJVExFUyA9IHtcbiAgW1NIT1dfQUxMXTogJ0FsbCcsXG4gIFtTSE9XX0FDVElWRV06ICdB
Y3RpdmUnLFxuICBbU0hPV19DT01QTEVURURdOiAnQ29tcGxldGVkJ1xufVxuXG5leHBvcnQgZGVm
YXVsdCBjbGFzcyBGb290ZXIgZXh0ZW5kcyBDb21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVz
ID0ge1xuICAgIGNvbXBsZXRlZENvdW50OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4g
ICAgYWN0aXZlQ291bnQ6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgICBmaWx0ZXI6
IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBvbkNsZWFyQ29tcGxldGVkOiBQcm9w
VHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uU2hvdzogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1
aXJlZFxuICB9XG5cbiAgcmVuZGVyVG9kb0NvdW50KCkge1xuICAgIGNvbnN0IHsgYWN0aXZlQ291
bnQgfSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCBpdGVtV29yZCA9IGFjdGl2ZUNvdW50ID09PSAx
ID8gJ2l0ZW0nIDogJ2l0ZW1zJ1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxzcGFuIGNsYXNzTmFt
ZT1cInRvZG8tY291bnRcIj5cbiAgICAgICAgPHN0cm9uZz57YWN0aXZlQ291bnQgfHwgJ05vJ308
L3N0cm9uZz4ge2l0ZW1Xb3JkfSBsZWZ0XG4gICAgICA8L3NwYW4+XG4gICAgKVxuICB9XG5cbiAg
cmVuZGVyRmlsdGVyTGluayhmaWx0ZXIpIHtcbiAgICBjb25zdCB0aXRsZSA9IEZJTFRFUl9USVRM
RVNbZmlsdGVyXVxuICAgIGNvbnN0IHsgZmlsdGVyOiBzZWxlY3RlZEZpbHRlciwgb25TaG93IH0g
PSB0aGlzLnByb3BzXG5cbiAgICByZXR1cm4gKFxuICAgICAgPGEgY2xhc3NOYW1lPXtjbGFzc25h
bWVzKHsgc2VsZWN0ZWQ6IGZpbHRlciA9PT0gc2VsZWN0ZWRGaWx0ZXIgfSl9XG4gICAgICAgICBz
dHlsZT17eyBjdXJzb3I6ICdwb2ludGVyJyB9fVxuICAgICAgICAgb25DbGljaz17KCkgPT4gb25T
aG93KGZpbHRlcil9PlxuICAgICAgICB7dGl0bGV9XG4gICAgICA8L2E+XG4gICAgKVxuICB9XG5c
biAgcmVuZGVyQ2xlYXJCdXR0b24oKSB7XG4gICAgY29uc3QgeyBjb21wbGV0ZWRDb3VudCwgb25D
bGVhckNvbXBsZXRlZCB9ID0gdGhpcy5wcm9wc1xuICAgIGlmIChjb21wbGV0ZWRDb3VudCA+IDAp
IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwiY2xlYXItY29t
cGxldGVkXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtvbkNsZWFyQ29tcGxldGVkfSA+XG4g
ICAgICAgICAgQ2xlYXIgY29tcGxldGVkXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgKVxuICAg
IH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGZvb3RlciBjbGFz
c05hbWU9XCJmb290ZXJcIj5cbiAgICAgICAge3RoaXMucmVuZGVyVG9kb0NvdW50KCl9XG4gICAg
ICAgIDx1bCBjbGFzc05hbWU9XCJmaWx0ZXJzXCI+XG4gICAgICAgICAge1sgU0hPV19BTEwsIFNI
T1dfQUNUSVZFLCBTSE9XX0NPTVBMRVRFRCBdLm1hcChmaWx0ZXIgPT5cbiAgICAgICAgICAgIDxs
aSBrZXk9e2ZpbHRlcn0+XG4gICAgICAgICAgICAgIHt0aGlzLnJlbmRlckZpbHRlckxpbmsoZmls
dGVyKX1cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC91bD5cbiAg
ICAgICAge3RoaXMucmVuZGVyQ2xlYXJCdXR0b24oKX1cbiAgICAgIDwvZm9vdGVyPlxuICAgIClc
biAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NvbXBvbmVudHMv
Rm9vdGVyLmpzIiwiaW1wb3J0ICogYXMgdHlwZXMgZnJvbSAnLi4vY29uc3RhbnRzL0FjdGlvblR5
cGVzJ1xuXG5leHBvcnQgY29uc3QgYWRkVG9kbyA9IHRleHQgPT4gKHsgdHlwZTogdHlwZXMuQURE
X1RPRE8sIHRleHQgfSlcbmV4cG9ydCBjb25zdCBkZWxldGVUb2RvID0gaWQgPT4gKHsgdHlwZTog
dHlwZXMuREVMRVRFX1RPRE8sIGlkIH0pXG5leHBvcnQgY29uc3QgZWRpdFRvZG8gPSAoaWQsIHRl
eHQpID0+ICh7IHR5cGU6IHR5cGVzLkVESVRfVE9ETywgaWQsIHRleHQgfSlcbmV4cG9ydCBjb25z
dCBjb21wbGV0ZVRvZG8gPSBpZCA9PiAoeyB0eXBlOiB0eXBlcy5DT01QTEVURV9UT0RPLCBpZCB9
KVxuZXhwb3J0IGNvbnN0IGNvbXBsZXRlQWxsID0gKCkgPT4gKHsgdHlwZTogdHlwZXMuQ09NUExF
VEVfQUxMIH0pXG5leHBvcnQgY29uc3QgY2xlYXJDb21wbGV0ZWQgPSAoKSA9PiAoeyB0eXBlOiB0
eXBlcy5DTEVBUl9DT01QTEVURUQgfSlcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAu
L3NyYy9hY3Rpb25zL2luZGV4LmpzIiwiaW1wb3J0IHsgY29tYmluZVJlZHVjZXJzIH0gZnJvbSAn
cmVkdXgnXG5pbXBvcnQgdG9kb3MgZnJvbSAnLi90b2RvcydcblxuY29uc3Qgcm9vdFJlZHVjZXIg
PSBjb21iaW5lUmVkdWNlcnMoe1xuICB0b2Rvc1xufSlcblxuZXhwb3J0IGRlZmF1bHQgcm9vdFJl
ZHVjZXJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9yZWR1Y2Vycy9pbmRl
eC5qcyIsImltcG9ydCB7IEFERF9UT0RPLCBERUxFVEVfVE9ETywgRURJVF9UT0RPLCBDT01QTEVU
RV9UT0RPLCBDT01QTEVURV9BTEwsIENMRUFSX0NPTVBMRVRFRCB9IGZyb20gJy4uL2NvbnN0YW50
cy9BY3Rpb25UeXBlcydcblxuY29uc3QgaW5pdGlhbFN0YXRlID0gW11cblxuZXhwb3J0IGRlZmF1
bHQgZnVuY3Rpb24gdG9kb3Moc3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbikge1xuICBzd2l0
Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSBBRERfVE9ETzpcbiAgICAgIHJldHVybiBbXG4g
ICAgICAgIC4uLnN0YXRlLFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6IHN0YXRlLnJlZHVjZSgo
bWF4SWQsIHRvZG8pID0+IE1hdGgubWF4KHRvZG8uaWQsIG1heElkKSwgLTEpICsgMSxcbiAgICAg
ICAgICBjb21wbGV0ZWQ6IGZhbHNlLFxuICAgICAgICAgIHRleHQ6IGFjdGlvbi50ZXh0XG4gICAg
ICAgIH1cbiAgICAgIF1cblxuICAgIGNhc2UgREVMRVRFX1RPRE86XG4gICAgICByZXR1cm4gc3Rh
dGUuZmlsdGVyKHRvZG8gPT5cbiAgICAgICAgdG9kby5pZCAhPT0gYWN0aW9uLmlkXG4gICAgICAp
XG5cbiAgICBjYXNlIEVESVRfVE9ETzpcbiAgICAgIHJldHVybiBzdGF0ZS5tYXAodG9kbyA9Plxu
ICAgICAgICB0b2RvLmlkID09PSBhY3Rpb24uaWQgP1xuICAgICAgICAgIHsgLi4udG9kbywgdGV4
dDogYWN0aW9uLnRleHQgfSA6XG4gICAgICAgICAgdG9kb1xuICAgICAgKVxuXG4gICAgY2FzZSBD
T01QTEVURV9UT0RPOlxuICAgICAgcmV0dXJuIHN0YXRlLm1hcCh0b2RvID0+XG4gICAgICAgIHRv
ZG8uaWQgPT09IGFjdGlvbi5pZCA/XG4gICAgICAgICAgeyAuLi50b2RvLCBjb21wbGV0ZWQ6ICF0
b2RvLmNvbXBsZXRlZCB9IDpcbiAgICAgICAgICB0b2RvXG4gICAgICApXG5cbiAgICBjYXNlIENP
TVBMRVRFX0FMTDpcbiAgICAgIGNvbnN0IGFyZUFsbE1hcmtlZCA9IHN0YXRlLmV2ZXJ5KHRvZG8g
PT4gdG9kby5jb21wbGV0ZWQpXG4gICAgICByZXR1cm4gc3RhdGUubWFwKHRvZG8gPT4gKHtcbiAg
ICAgICAgLi4udG9kbyxcbiAgICAgICAgY29tcGxldGVkOiAhYXJlQWxsTWFya2VkXG4gICAgICB9
KSlcblxuICAgIGNhc2UgQ0xFQVJfQ09NUExFVEVEOlxuICAgICAgcmV0dXJuIHN0YXRlLmZpbHRl
cih0b2RvID0+IHRvZG8uY29tcGxldGVkID09PSBmYWxzZSlcblxuICAgIGRlZmF1bHQ6XG4gICAg
ICByZXR1cm4gc3RhdGVcbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4v
c3JjL3JlZHVjZXJzL3RvZG9zLmpzIl0sInNvdXJjZVJvb3QiOiIifQpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRv
bWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0LXJl
ZHV4L3B1YmxpYy9pbmRleC5odG1sIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9t
ZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QtcmVk
dXgvcHVibGljL2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjg3NjY3ODE5NWViMjJmNmU1YmMyZDEy
Nzc1YzQzOGU3YjA4NjMwNwotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5j
aC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL3JlYWN0LXJlZHV4L3B1YmxpYy9pbmRleC5odG1sCkBAIC0wLDAgKzEsMjEgQEAKKzwhZG9j
dHlwZSBodG1sPgorPGh0bWwgbGFuZz0iZW4iPgorICA8aGVhZD4KKyAgICA8bWV0YSBjaGFyc2V0
PSJ1dGYtOCI+CisgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmlj
ZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIj4KKyAgICA8dGl0bGU+UmVhY3QgUmVkdXggVG9kb01W
QyBleGFtcGxlPC90aXRsZT4KKyAgPC9oZWFkPgorICA8Ym9keT4KKyAgICA8ZGl2IGNsYXNzPSJ0
b2RvYXBwIiBpZD0icm9vdCI+PC9kaXY+CisgICAgPCEtLQorICAgICAgVGhpcyBIVE1MIGZpbGUg
aXMgYSB0ZW1wbGF0ZS4KKyAgICAgIElmIHlvdSBvcGVuIGl0IGRpcmVjdGx5IGluIHRoZSBicm93
c2VyLCB5b3Ugd2lsbCBzZWUgYW4gZW1wdHkgcGFnZS4KKworICAgICAgWW91IGNhbiBhZGQgd2Vi
Zm9udHMsIG1ldGEgdGFncywgb3IgYW5hbHl0aWNzIHRvIHRoaXMgZmlsZS4KKyAgICAgIFRoZSBi
dWlsZCBzdGVwIHdpbGwgcGxhY2UgdGhlIGJ1bmRsZWQgc2NyaXB0cyBpbnRvIHRoZSA8Ym9keT4g
dGFnLgorCisgICAgICBUbyBiZWdpbiB0aGUgZGV2ZWxvcG1lbnQsIHJ1biBgbnBtIHN0YXJ0YCBp
biB0aGlzIGZvbGRlci4KKyAgICAgIFRvIGNyZWF0ZSBhIHByb2R1Y3Rpb24gYnVuZGxlLCB1c2Ug
YG5wbSBydW4gYnVpbGRgLgorICAgIC0tPgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2Rv
bXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC1yZWR1eC9zcmMvYWN0aW9ucy9pbmRleC5q
cyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0LXJlZHV4L3NyYy9hY3Rpb25zL2luZGV4
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjdkMDIzYjQ2ZGZlN2ZiOTBiZDY2OTUwZTA0OGQzNzEzYTQ2MjU0OTMK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVy
Mi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC1yZWR1eC9z
cmMvYWN0aW9ucy9pbmRleC5qcwpAQCAtMCwwICsxLDggQEAKK2ltcG9ydCAqIGFzIHR5cGVzIGZy
b20gJy4uL2NvbnN0YW50cy9BY3Rpb25UeXBlcycKKworZXhwb3J0IGNvbnN0IGFkZFRvZG8gPSB0
ZXh0ID0+ICh7IHR5cGU6IHR5cGVzLkFERF9UT0RPLCB0ZXh0IH0pCitleHBvcnQgY29uc3QgZGVs
ZXRlVG9kbyA9IGlkID0+ICh7IHR5cGU6IHR5cGVzLkRFTEVURV9UT0RPLCBpZCB9KQorZXhwb3J0
IGNvbnN0IGVkaXRUb2RvID0gKGlkLCB0ZXh0KSA9PiAoeyB0eXBlOiB0eXBlcy5FRElUX1RPRE8s
IGlkLCB0ZXh0IH0pCitleHBvcnQgY29uc3QgY29tcGxldGVUb2RvID0gaWQgPT4gKHsgdHlwZTog
dHlwZXMuQ09NUExFVEVfVE9ETywgaWQgfSkKK2V4cG9ydCBjb25zdCBjb21wbGV0ZUFsbCA9ICgp
ID0+ICh7IHR5cGU6IHR5cGVzLkNPTVBMRVRFX0FMTCB9KQorZXhwb3J0IGNvbnN0IGNsZWFyQ29t
cGxldGVkID0gKCkgPT4gKHsgdHlwZTogdHlwZXMuQ0xFQVJfQ09NUExFVEVEIH0pCmRpZmYgLS1n
aXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90
b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC1yZWR1eC9zcmMvYWN0aW9ucy9pbmRl
eC5zcGVjLmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QtcmVkdXgvc3JjL2FjdGlv
bnMvaW5kZXguc3BlYy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNmM4OTRjMWE1ZmE1OTQxYTY3YjIyMmY2NDU1
YTkxNjAyNzc5YTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9y
Zy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
cmVhY3QtcmVkdXgvc3JjL2FjdGlvbnMvaW5kZXguc3BlYy5qcwpAQCAtMCwwICsxLDQ1IEBACitp
bXBvcnQgKiBhcyB0eXBlcyBmcm9tICcuLi9jb25zdGFudHMvQWN0aW9uVHlwZXMnCitpbXBvcnQg
KiBhcyBhY3Rpb25zIGZyb20gJy4vaW5kZXgnCisKK2Rlc2NyaWJlKCd0b2RvIGFjdGlvbnMnLCAo
KSA9PiB7CisgIGl0KCdhZGRUb2RvIHNob3VsZCBjcmVhdGUgQUREX1RPRE8gYWN0aW9uJywgKCkg
PT4geworICAgIGV4cGVjdChhY3Rpb25zLmFkZFRvZG8oJ1VzZSBSZWR1eCcpKS50b0VxdWFsKHsK
KyAgICAgIHR5cGU6IHR5cGVzLkFERF9UT0RPLAorICAgICAgdGV4dDogJ1VzZSBSZWR1eCcKKyAg
ICB9KQorICB9KQorCisgIGl0KCdkZWxldGVUb2RvIHNob3VsZCBjcmVhdGUgREVMRVRFX1RPRE8g
YWN0aW9uJywgKCkgPT4geworICAgIGV4cGVjdChhY3Rpb25zLmRlbGV0ZVRvZG8oMSkpLnRvRXF1
YWwoeworICAgICAgdHlwZTogdHlwZXMuREVMRVRFX1RPRE8sCisgICAgICBpZDogMQorICAgIH0p
CisgIH0pCisKKyAgaXQoJ2VkaXRUb2RvIHNob3VsZCBjcmVhdGUgRURJVF9UT0RPIGFjdGlvbics
ICgpID0+IHsKKyAgICBleHBlY3QoYWN0aW9ucy5lZGl0VG9kbygxLCAnVXNlIFJlZHV4IGV2ZXJ5
d2hlcmUnKSkudG9FcXVhbCh7CisgICAgICB0eXBlOiB0eXBlcy5FRElUX1RPRE8sCisgICAgICBp
ZDogMSwKKyAgICAgIHRleHQ6ICdVc2UgUmVkdXggZXZlcnl3aGVyZScKKyAgICB9KQorICB9KQor
CisgIGl0KCdjb21wbGV0ZVRvZG8gc2hvdWxkIGNyZWF0ZSBDT01QTEVURV9UT0RPIGFjdGlvbics
ICgpID0+IHsKKyAgICBleHBlY3QoYWN0aW9ucy5jb21wbGV0ZVRvZG8oMSkpLnRvRXF1YWwoewor
ICAgICAgdHlwZTogdHlwZXMuQ09NUExFVEVfVE9ETywKKyAgICAgIGlkOiAxCisgICAgfSkKKyAg
fSkKKworICBpdCgnY29tcGxldGVBbGwgc2hvdWxkIGNyZWF0ZSBDT01QTEVURV9BTEwgYWN0aW9u
JywgKCkgPT4geworICAgIGV4cGVjdChhY3Rpb25zLmNvbXBsZXRlQWxsKCkpLnRvRXF1YWwoewor
ICAgICAgdHlwZTogdHlwZXMuQ09NUExFVEVfQUxMCisgICAgfSkKKyAgfSkKKworICBpdCgnY2xl
YXJDb21wbGV0ZWQgc2hvdWxkIGNyZWF0ZSBDTEVBUl9DT01QTEVURUQgYWN0aW9uJywgKCkgPT4g
eworICAgIGV4cGVjdChhY3Rpb25zLmNsZWFyQ29tcGxldGVkKCkpLnRvRXF1YWwoeworICAgICAg
dHlwZTogdHlwZXMuQ0xFQVJfQ09NUExFVEVECisgICAgfSkKKyAgfSkKK30pCmRpZmYgLS1naXQg
YS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2Rv
bXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC1yZWR1eC9zcmMvY29tcG9uZW50cy9Gb290
ZXIuanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC1yZWR1eC9zcmMvY29tcG9uZW50
cy9Gb290ZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTI3MmMwOGE1NGNlOWQ3MjM2Y2NkYjJiMmM5NDVhMzZi
ZTlmMTlmNwotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3Bl
ZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0
LXJlZHV4L3NyYy9jb21wb25lbnRzL0Zvb3Rlci5qcwpAQCAtMCwwICsxLDcxIEBACitpbXBvcnQg
UmVhY3QsIHsgUHJvcFR5cGVzLCBDb21wb25lbnQgfSBmcm9tICdyZWFjdCcKK2ltcG9ydCBjbGFz
c25hbWVzIGZyb20gJ2NsYXNzbmFtZXMnCitpbXBvcnQgeyBTSE9XX0FMTCwgU0hPV19DT01QTEVU
RUQsIFNIT1dfQUNUSVZFIH0gZnJvbSAnLi4vY29uc3RhbnRzL1RvZG9GaWx0ZXJzJworCitjb25z
dCBGSUxURVJfVElUTEVTID0geworICBbU0hPV19BTExdOiAnQWxsJywKKyAgW1NIT1dfQUNUSVZF
XTogJ0FjdGl2ZScsCisgIFtTSE9XX0NPTVBMRVRFRF06ICdDb21wbGV0ZWQnCit9CisKK2V4cG9y
dCBkZWZhdWx0IGNsYXNzIEZvb3RlciBleHRlbmRzIENvbXBvbmVudCB7CisgIHN0YXRpYyBwcm9w
VHlwZXMgPSB7CisgICAgY29tcGxldGVkQ291bnQ6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJl
ZCwKKyAgICBhY3RpdmVDb3VudDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLAorICAgIGZp
bHRlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLAorICAgIG9uQ2xlYXJDb21wbGV0ZWQ6
IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsCisgICAgb25TaG93OiBQcm9wVHlwZXMuZnVuYy5p
c1JlcXVpcmVkCisgIH0KKworICByZW5kZXJUb2RvQ291bnQoKSB7CisgICAgY29uc3QgeyBhY3Rp
dmVDb3VudCB9ID0gdGhpcy5wcm9wcworICAgIGNvbnN0IGl0ZW1Xb3JkID0gYWN0aXZlQ291bnQg
PT09IDEgPyAnaXRlbScgOiAnaXRlbXMnCisKKyAgICByZXR1cm4gKAorICAgICAgPHNwYW4gY2xh
c3NOYW1lPSJ0b2RvLWNvdW50Ij4KKyAgICAgICAgPHN0cm9uZz57YWN0aXZlQ291bnQgfHwgJ05v
J308L3N0cm9uZz4ge2l0ZW1Xb3JkfSBsZWZ0CisgICAgICA8L3NwYW4+CisgICAgKQorICB9CisK
KyAgcmVuZGVyRmlsdGVyTGluayhmaWx0ZXIpIHsKKyAgICBjb25zdCB0aXRsZSA9IEZJTFRFUl9U
SVRMRVNbZmlsdGVyXQorICAgIGNvbnN0IHsgZmlsdGVyOiBzZWxlY3RlZEZpbHRlciwgb25TaG93
IH0gPSB0aGlzLnByb3BzCisKKyAgICByZXR1cm4gKAorICAgICAgPGEgY2xhc3NOYW1lPXtjbGFz
c25hbWVzKHsgc2VsZWN0ZWQ6IGZpbHRlciA9PT0gc2VsZWN0ZWRGaWx0ZXIgfSl9CisgICAgICAg
ICBzdHlsZT17eyBjdXJzb3I6ICdwb2ludGVyJyB9fQorICAgICAgICAgb25DbGljaz17KCkgPT4g
b25TaG93KGZpbHRlcil9PgorICAgICAgICB7dGl0bGV9CisgICAgICA8L2E+CisgICAgKQorICB9
CisKKyAgcmVuZGVyQ2xlYXJCdXR0b24oKSB7CisgICAgY29uc3QgeyBjb21wbGV0ZWRDb3VudCwg
b25DbGVhckNvbXBsZXRlZCB9ID0gdGhpcy5wcm9wcworICAgIGlmIChjb21wbGV0ZWRDb3VudCA+
IDApIHsKKyAgICAgIHJldHVybiAoCisgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPSJjbGVhci1j
b21wbGV0ZWQiCisgICAgICAgICAgICAgICAgb25DbGljaz17b25DbGVhckNvbXBsZXRlZH0gPgor
ICAgICAgICAgIENsZWFyIGNvbXBsZXRlZAorICAgICAgICA8L2J1dHRvbj4KKyAgICAgICkKKyAg
ICB9CisgIH0KKworICByZW5kZXIoKSB7CisgICAgcmV0dXJuICgKKyAgICAgIDxmb290ZXIgY2xh
c3NOYW1lPSJmb290ZXIiPgorICAgICAgICB7dGhpcy5yZW5kZXJUb2RvQ291bnQoKX0KKyAgICAg
ICAgPHVsIGNsYXNzTmFtZT0iZmlsdGVycyI+CisgICAgICAgICAge1sgU0hPV19BTEwsIFNIT1df
QUNUSVZFLCBTSE9XX0NPTVBMRVRFRCBdLm1hcChmaWx0ZXIgPT4KKyAgICAgICAgICAgIDxsaSBr
ZXk9e2ZpbHRlcn0+CisgICAgICAgICAgICAgIHt0aGlzLnJlbmRlckZpbHRlckxpbmsoZmlsdGVy
KX0KKyAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgKX0KKyAgICAgICAgPC91bD4KKyAgICAg
ICAge3RoaXMucmVuZGVyQ2xlYXJCdXR0b24oKX0KKyAgICAgIDwvZm9vdGVyPgorICAgICkKKyAg
fQorfQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIu
MS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QtcmVkdXgvc3Jj
L2NvbXBvbmVudHMvRm9vdGVyLnNwZWMuanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1Nw
ZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFj
dC1yZWR1eC9zcmMvY29tcG9uZW50cy9Gb290ZXIuc3BlYy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMGZhODMw
ZTRjNmQzNGVkNzIxMWNjNDdkNGY4MWVkYjM5MjkzZGM1Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vi
c2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QtcmVkdXgvc3JjL2NvbXBvbmVudHMvRm9vdGVyLnNw
ZWMuanMKQEAgLTAsMCArMSwxMDIgQEAKK2ltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCcKK2ltcG9y
dCBUZXN0VXRpbHMgZnJvbSAncmVhY3QtYWRkb25zLXRlc3QtdXRpbHMnCitpbXBvcnQgRm9vdGVy
IGZyb20gJy4vRm9vdGVyJworaW1wb3J0IHsgU0hPV19BTEwsIFNIT1dfQUNUSVZFIH0gZnJvbSAn
Li4vY29uc3RhbnRzL1RvZG9GaWx0ZXJzJworCitjb25zdCBzZXR1cCA9IHByb3BPdmVycmlkZXMg
PT4geworICBjb25zdCBwcm9wcyA9IE9iamVjdC5hc3NpZ24oeworICAgIGNvbXBsZXRlZENvdW50
OiAwLAorICAgIGFjdGl2ZUNvdW50OiAwLAorICAgIGZpbHRlcjogU0hPV19BTEwsCisgICAgb25D
bGVhckNvbXBsZXRlZDogamVzdC5mbigpLAorICAgIG9uU2hvdzogamVzdC5mbigpCisgIH0sIHBy
b3BPdmVycmlkZXMpCisKKyAgY29uc3QgcmVuZGVyZXIgPSBUZXN0VXRpbHMuY3JlYXRlUmVuZGVy
ZXIoKQorICByZW5kZXJlci5yZW5kZXIoPEZvb3RlciB7Li4ucHJvcHN9IC8+KQorICBjb25zdCBv
dXRwdXQgPSByZW5kZXJlci5nZXRSZW5kZXJPdXRwdXQoKQorCisgIHJldHVybiB7CisgICAgcHJv
cHM6IHByb3BzLAorICAgIG91dHB1dDogb3V0cHV0CisgIH0KK30KKworY29uc3QgZ2V0VGV4dENv
bnRlbnQgPSBlbGVtID0+IHsKKyAgY29uc3QgY2hpbGRyZW4gPSBBcnJheS5pc0FycmF5KGVsZW0u
cHJvcHMuY2hpbGRyZW4pID8KKyAgICBlbGVtLnByb3BzLmNoaWxkcmVuIDogWyBlbGVtLnByb3Bz
LmNoaWxkcmVuIF0KKworICByZXR1cm4gY2hpbGRyZW4ucmVkdWNlKChvdXQsIGNoaWxkKSA9Pgor
ICAgIC8vIENvbmNhdGVuYXRlIHRoZSB0ZXh0CisgICAgLy8gQ2hpbGRyZW4gYXJlIGVpdGhlciBl
bGVtZW50cyBvciB0ZXh0IHN0cmluZ3MKKyAgICBvdXQgKyAoY2hpbGQucHJvcHMgPyBnZXRUZXh0
Q29udGVudChjaGlsZCkgOiBjaGlsZCkKKyAgLCAnJykKK30KKworZGVzY3JpYmUoJ2NvbXBvbmVu
dHMnLCAoKSA9PiB7CisgIGRlc2NyaWJlKCdGb290ZXInLCAoKSA9PiB7CisgICAgaXQoJ3Nob3Vs
ZCByZW5kZXIgY29udGFpbmVyJywgKCkgPT4geworICAgICAgY29uc3QgeyBvdXRwdXQgfSA9IHNl
dHVwKCkKKyAgICAgIGV4cGVjdChvdXRwdXQudHlwZSkudG9CZSgnZm9vdGVyJykKKyAgICAgIGV4
cGVjdChvdXRwdXQucHJvcHMuY2xhc3NOYW1lKS50b0JlKCdmb290ZXInKQorICAgIH0pCisKKyAg
ICBpdCgnc2hvdWxkIGRpc3BsYXkgYWN0aXZlIGNvdW50IHdoZW4gMCcsICgpID0+IHsKKyAgICAg
IGNvbnN0IHsgb3V0cHV0IH0gPSBzZXR1cCh7IGFjdGl2ZUNvdW50OiAwIH0pCisgICAgICBjb25z
dCBbIGNvdW50IF0gPSBvdXRwdXQucHJvcHMuY2hpbGRyZW4KKyAgICAgIGV4cGVjdChnZXRUZXh0
Q29udGVudChjb3VudCkpLnRvQmUoJ05vIGl0ZW1zIGxlZnQnKQorICAgIH0pCisKKyAgICBpdCgn
c2hvdWxkIGRpc3BsYXkgYWN0aXZlIGNvdW50IHdoZW4gYWJvdmUgMCcsICgpID0+IHsKKyAgICAg
IGNvbnN0IHsgb3V0cHV0IH0gPSBzZXR1cCh7IGFjdGl2ZUNvdW50OiAxIH0pCisgICAgICBjb25z
dCBbIGNvdW50IF0gPSBvdXRwdXQucHJvcHMuY2hpbGRyZW4KKyAgICAgIGV4cGVjdChnZXRUZXh0
Q29udGVudChjb3VudCkpLnRvQmUoJzEgaXRlbSBsZWZ0JykKKyAgICB9KQorCisgICAgaXQoJ3No
b3VsZCByZW5kZXIgZmlsdGVycycsICgpID0+IHsKKyAgICAgIGNvbnN0IHsgb3V0cHV0IH0gPSBz
ZXR1cCgpCisgICAgICBjb25zdCBbICwgZmlsdGVycyBdID0gb3V0cHV0LnByb3BzLmNoaWxkcmVu
CisgICAgICBleHBlY3QoZmlsdGVycy50eXBlKS50b0JlKCd1bCcpCisgICAgICBleHBlY3QoZmls
dGVycy5wcm9wcy5jbGFzc05hbWUpLnRvQmUoJ2ZpbHRlcnMnKQorICAgICAgZXhwZWN0KGZpbHRl
cnMucHJvcHMuY2hpbGRyZW4ubGVuZ3RoKS50b0JlKDMpCisgICAgICBmaWx0ZXJzLnByb3BzLmNo
aWxkcmVuLmZvckVhY2goZnVuY3Rpb24gY2hlY2tGaWx0ZXIoZmlsdGVyLCBpKSB7CisgICAgICAg
IGV4cGVjdChmaWx0ZXIudHlwZSkudG9CZSgnbGknKQorICAgICAgICBjb25zdCBhID0gZmlsdGVy
LnByb3BzLmNoaWxkcmVuCisgICAgICAgIGV4cGVjdChhLnByb3BzLmNsYXNzTmFtZSkudG9CZShp
ID09PSAwID8gJ3NlbGVjdGVkJyA6ICcnKQorICAgICAgICBleHBlY3QoYS5wcm9wcy5jaGlsZHJl
bikudG9CZSh7CisgICAgICAgICAgMDogJ0FsbCcsCisgICAgICAgICAgMTogJ0FjdGl2ZScsCisg
ICAgICAgICAgMjogJ0NvbXBsZXRlZCcKKyAgICAgICAgfVtpXSkKKyAgICAgIH0pCisgICAgfSkK
KworICAgIGl0KCdzaG91bGQgY2FsbCBvblNob3cgd2hlbiBhIGZpbHRlciBpcyBjbGlja2VkJywg
KCkgPT4geworICAgICAgY29uc3QgeyBvdXRwdXQsIHByb3BzIH0gPSBzZXR1cCgpCisgICAgICBj
b25zdCBbICwgZmlsdGVycyBdID0gb3V0cHV0LnByb3BzLmNoaWxkcmVuCisgICAgICBjb25zdCBm
aWx0ZXJMaW5rID0gZmlsdGVycy5wcm9wcy5jaGlsZHJlblsxXS5wcm9wcy5jaGlsZHJlbgorICAg
ICAgZmlsdGVyTGluay5wcm9wcy5vbkNsaWNrKHt9KQorICAgICAgZXhwZWN0KHByb3BzLm9uU2hv
dykudG9CZUNhbGxlZFdpdGgoU0hPV19BQ1RJVkUpCisgICAgfSkKKworICAgIGl0KCdzaG91bGRu
dCBzaG93IGNsZWFyIGJ1dHRvbiB3aGVuIG5vIGNvbXBsZXRlZCB0b2RvcycsICgpID0+IHsKKyAg
ICAgIGNvbnN0IHsgb3V0cHV0IH0gPSBzZXR1cCh7IGNvbXBsZXRlZENvdW50OiAwIH0pCisgICAg
ICBjb25zdCBbICwgLCBjbGVhciBdID0gb3V0cHV0LnByb3BzLmNoaWxkcmVuCisgICAgICBleHBl
Y3QoY2xlYXIpLnRvQmUodW5kZWZpbmVkKQorICAgIH0pCisKKyAgICBpdCgnc2hvdWxkIHJlbmRl
ciBjbGVhciBidXR0b24gd2hlbiBjb21wbGV0ZWQgdG9kb3MnLCAoKSA9PiB7CisgICAgICBjb25z
dCB7IG91dHB1dCB9ID0gc2V0dXAoeyBjb21wbGV0ZWRDb3VudDogMSB9KQorICAgICAgY29uc3Qg
WyAsICwgY2xlYXIgXSA9IG91dHB1dC5wcm9wcy5jaGlsZHJlbgorICAgICAgZXhwZWN0KGNsZWFy
LnR5cGUpLnRvQmUoJ2J1dHRvbicpCisgICAgICBleHBlY3QoY2xlYXIucHJvcHMuY2hpbGRyZW4p
LnRvQmUoJ0NsZWFyIGNvbXBsZXRlZCcpCisgICAgfSkKKworICAgIGl0KCdzaG91bGQgY2FsbCBv
bkNsZWFyQ29tcGxldGVkIG9uIGNsZWFyIGJ1dHRvbiBjbGljaycsICgpID0+IHsKKyAgICAgIGNv
bnN0IHsgb3V0cHV0LCBwcm9wcyB9ID0gc2V0dXAoeyBjb21wbGV0ZWRDb3VudDogMSB9KQorICAg
ICAgY29uc3QgWyAsICwgY2xlYXIgXSA9IG91dHB1dC5wcm9wcy5jaGlsZHJlbgorICAgICAgY2xl
YXIucHJvcHMub25DbGljayh7fSkKKyAgICAgIGV4cGVjdChwcm9wcy5vbkNsZWFyQ29tcGxldGVk
KS50b0JlQ2FsbGVkKCkKKyAgICB9KQorICB9KQorfSkKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jy
b3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL3JlYWN0LXJlZHV4L3NyYy9jb21wb25lbnRzL0hlYWRlci5qcyBiL1dlYnNp
dGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0LXJlZHV4L3NyYy9jb21wb25lbnRzL0hlYWRlci5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi45ZjE5MjM5OWQ5NTk1MDI4YmI3N2E5MjI3MTkyNjllYWE2NDQwZWUwCi0tLSAv
ZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9y
ZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QtcmVkdXgvc3JjL2Nv
bXBvbmVudHMvSGVhZGVyLmpzCkBAIC0wLDAgKzEsMjUgQEAKK2ltcG9ydCBSZWFjdCwgeyBQcm9w
VHlwZXMsIENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JworaW1wb3J0IFRvZG9UZXh0SW5wdXQgZnJv
bSAnLi9Ub2RvVGV4dElucHV0JworCitleHBvcnQgZGVmYXVsdCBjbGFzcyBIZWFkZXIgZXh0ZW5k
cyBDb21wb25lbnQgeworICBzdGF0aWMgcHJvcFR5cGVzID0geworICAgIGFkZFRvZG86IFByb3BU
eXBlcy5mdW5jLmlzUmVxdWlyZWQKKyAgfQorCisgIGhhbmRsZVNhdmUgPSB0ZXh0ID0+IHsKKyAg
ICBpZiAodGV4dC5sZW5ndGggIT09IDApIHsKKyAgICAgIHRoaXMucHJvcHMuYWRkVG9kbyh0ZXh0
KQorICAgIH0KKyAgfQorCisgIHJlbmRlcigpIHsKKyAgICByZXR1cm4gKAorICAgICAgPGhlYWRl
ciBjbGFzc05hbWU9ImhlYWRlciI+CisgICAgICAgIDxoMT50b2RvczwvaDE+CisgICAgICAgIDxU
b2RvVGV4dElucHV0IG5ld1RvZG8KKyAgICAgICAgICAgICAgICAgICAgICAgb25TYXZlPXt0aGlz
LmhhbmRsZVNhdmV9CisgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJXaGF0IG5l
ZWRzIHRvIGJlIGRvbmU/IiAvPgorICAgICAgPC9oZWFkZXI+CisgICAgKQorICB9Cit9CmRpZmYg
LS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC1yZWR1eC9zcmMvY29tcG9uZW50
cy9IZWFkZXIuc3BlYy5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIy
LjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0LXJlZHV4L3Ny
Yy9jb21wb25lbnRzL0hlYWRlci5zcGVjLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZiNjNkZjJhMzQ2ZTM3N2Y0
YzhiODEwYzM0ZjVlYWQ4MWRmY2Y5NGMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93
c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVy
ZS1leGFtcGxlcy9yZWFjdC1yZWR1eC9zcmMvY29tcG9uZW50cy9IZWFkZXIuc3BlYy5qcwpAQCAt
MCwwICsxLDQ5IEBACitpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnCitpbXBvcnQgVGVzdFV0aWxz
IGZyb20gJ3JlYWN0LWFkZG9ucy10ZXN0LXV0aWxzJworaW1wb3J0IEhlYWRlciBmcm9tICcuL0hl
YWRlcicKK2ltcG9ydCBUb2RvVGV4dElucHV0IGZyb20gJy4vVG9kb1RleHRJbnB1dCcKKworY29u
c3Qgc2V0dXAgPSAoKSA9PiB7CisgIGNvbnN0IHByb3BzID0geworICAgIGFkZFRvZG86IGplc3Qu
Zm4oKQorICB9CisKKyAgY29uc3QgcmVuZGVyZXIgPSBUZXN0VXRpbHMuY3JlYXRlUmVuZGVyZXIo
KQorICByZW5kZXJlci5yZW5kZXIoPEhlYWRlciB7Li4ucHJvcHN9IC8+KQorICBjb25zdCBvdXRw
dXQgPSByZW5kZXJlci5nZXRSZW5kZXJPdXRwdXQoKQorCisgIHJldHVybiB7CisgICAgcHJvcHM6
IHByb3BzLAorICAgIG91dHB1dDogb3V0cHV0LAorICAgIHJlbmRlcmVyOiByZW5kZXJlcgorICB9
Cit9CisKK2Rlc2NyaWJlKCdjb21wb25lbnRzJywgKCkgPT4geworICBkZXNjcmliZSgnSGVhZGVy
JywgKCkgPT4geworICAgIGl0KCdzaG91bGQgcmVuZGVyIGNvcnJlY3RseScsICgpID0+IHsKKyAg
ICAgIGNvbnN0IHsgb3V0cHV0IH0gPSBzZXR1cCgpCisKKyAgICAgIGV4cGVjdChvdXRwdXQudHlw
ZSkudG9CZSgnaGVhZGVyJykKKyAgICAgIGV4cGVjdChvdXRwdXQucHJvcHMuY2xhc3NOYW1lKS50
b0JlKCdoZWFkZXInKQorCisgICAgICBjb25zdCBbIGgxLCBpbnB1dCBdID0gb3V0cHV0LnByb3Bz
LmNoaWxkcmVuCisKKyAgICAgIGV4cGVjdChoMS50eXBlKS50b0JlKCdoMScpCisgICAgICBleHBl
Y3QoaDEucHJvcHMuY2hpbGRyZW4pLnRvQmUoJ3RvZG9zJykKKworICAgICAgZXhwZWN0KGlucHV0
LnR5cGUpLnRvQmUoVG9kb1RleHRJbnB1dCkKKyAgICAgIGV4cGVjdChpbnB1dC5wcm9wcy5uZXdU
b2RvKS50b0JlKHRydWUpCisgICAgICBleHBlY3QoaW5wdXQucHJvcHMucGxhY2Vob2xkZXIpLnRv
QmUoJ1doYXQgbmVlZHMgdG8gYmUgZG9uZT8nKQorICAgIH0pCisKKyAgICBpdCgnc2hvdWxkIGNh
bGwgYWRkVG9kbyBpZiBsZW5ndGggb2YgdGV4dCBpcyBncmVhdGVyIHRoYW4gMCcsICgpID0+IHsK
KyAgICAgIGNvbnN0IHsgb3V0cHV0LCBwcm9wcyB9ID0gc2V0dXAoKQorICAgICAgY29uc3QgaW5w
dXQgPSBvdXRwdXQucHJvcHMuY2hpbGRyZW5bMV0KKyAgICAgIGlucHV0LnByb3BzLm9uU2F2ZSgn
JykKKyAgICAgIGV4cGVjdChwcm9wcy5hZGRUb2RvKS5ub3QudG9CZUNhbGxlZCgpCisgICAgICBp
bnB1dC5wcm9wcy5vblNhdmUoJ1VzZSBSZWR1eCcpCisgICAgICBleHBlY3QocHJvcHMuYWRkVG9k
bykudG9CZUNhbGxlZCgpCisgICAgfSkKKyAgfSkKK30pCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9i
cm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9yZWFjdC1yZWR1eC9zcmMvY29tcG9uZW50cy9NYWluU2VjdGlvbi5qcyBi
L1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9t
dmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0LXJlZHV4L3NyYy9jb21wb25lbnRzL01haW5T
ZWN0aW9uLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVjMjNiNTE2YjhkODc0NDFlMzljNGJiNTg0OTUyN2Q1MDg5
ZGM1NDQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVk
b21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC1y
ZWR1eC9zcmMvY29tcG9uZW50cy9NYWluU2VjdGlvbi5qcwpAQCAtMCwwICsxLDc4IEBACitpbXBv
cnQgUmVhY3QsIHsgQ29tcG9uZW50LCBQcm9wVHlwZXMgfSBmcm9tICdyZWFjdCcKK2ltcG9ydCBU
b2RvSXRlbSBmcm9tICcuL1RvZG9JdGVtJworaW1wb3J0IEZvb3RlciBmcm9tICcuL0Zvb3RlcicK
K2ltcG9ydCB7IFNIT1dfQUxMLCBTSE9XX0NPTVBMRVRFRCwgU0hPV19BQ1RJVkUgfSBmcm9tICcu
Li9jb25zdGFudHMvVG9kb0ZpbHRlcnMnCisKK2NvbnN0IFRPRE9fRklMVEVSUyA9IHsKKyAgW1NI
T1dfQUxMXTogKCkgPT4gdHJ1ZSwKKyAgW1NIT1dfQUNUSVZFXTogdG9kbyA9PiAhdG9kby5jb21w
bGV0ZWQsCisgIFtTSE9XX0NPTVBMRVRFRF06IHRvZG8gPT4gdG9kby5jb21wbGV0ZWQKK30KKwor
ZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWFpblNlY3Rpb24gZXh0ZW5kcyBDb21wb25lbnQgeworICBz
dGF0aWMgcHJvcFR5cGVzID0geworICAgIHRvZG9zOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJl
ZCwKKyAgICBhY3Rpb25zOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQKKyAgfQorCisgIHN0
YXRlID0geyBmaWx0ZXI6IFNIT1dfQUxMIH0KKworICBoYW5kbGVDbGVhckNvbXBsZXRlZCA9ICgp
ID0+IHsKKyAgICB0aGlzLnByb3BzLmFjdGlvbnMuY2xlYXJDb21wbGV0ZWQoKQorICB9CisKKyAg
aGFuZGxlU2hvdyA9IGZpbHRlciA9PiB7CisgICAgdGhpcy5zZXRTdGF0ZSh7IGZpbHRlciB9KQor
ICB9CisKKyAgcmVuZGVyVG9nZ2xlQWxsKGNvbXBsZXRlZENvdW50KSB7CisgICAgY29uc3QgeyB0
b2RvcywgYWN0aW9ucyB9ID0gdGhpcy5wcm9wcworICAgIGlmICh0b2Rvcy5sZW5ndGggPiAwKSB7
CisgICAgICByZXR1cm4gKAorICAgICAgICA8aW5wdXQgY2xhc3NOYW1lPSJ0b2dnbGUtYWxsIgor
ICAgICAgICAgICAgICAgdHlwZT0iY2hlY2tib3giCisgICAgICAgICAgICAgICBjaGVja2VkPXtj
b21wbGV0ZWRDb3VudCA9PT0gdG9kb3MubGVuZ3RofQorICAgICAgICAgICAgICAgb25DaGFuZ2U9
e2FjdGlvbnMuY29tcGxldGVBbGx9IC8+CisgICAgICApCisgICAgfQorICB9CisKKyAgcmVuZGVy
Rm9vdGVyKGNvbXBsZXRlZENvdW50KSB7CisgICAgY29uc3QgeyB0b2RvcyB9ID0gdGhpcy5wcm9w
cworICAgIGNvbnN0IHsgZmlsdGVyIH0gPSB0aGlzLnN0YXRlCisgICAgY29uc3QgYWN0aXZlQ291
bnQgPSB0b2Rvcy5sZW5ndGggLSBjb21wbGV0ZWRDb3VudAorCisgICAgaWYgKHRvZG9zLmxlbmd0
aCkgeworICAgICAgcmV0dXJuICgKKyAgICAgICAgPEZvb3RlciBjb21wbGV0ZWRDb3VudD17Y29t
cGxldGVkQ291bnR9CisgICAgICAgICAgICAgICAgYWN0aXZlQ291bnQ9e2FjdGl2ZUNvdW50fQor
ICAgICAgICAgICAgICAgIGZpbHRlcj17ZmlsdGVyfQorICAgICAgICAgICAgICAgIG9uQ2xlYXJD
b21wbGV0ZWQ9e3RoaXMuaGFuZGxlQ2xlYXJDb21wbGV0ZWQuYmluZCh0aGlzKX0KKyAgICAgICAg
ICAgICAgICBvblNob3c9e3RoaXMuaGFuZGxlU2hvdy5iaW5kKHRoaXMpfSAvPgorICAgICAgKQor
ICAgIH0KKyAgfQorCisgIHJlbmRlcigpIHsKKyAgICBjb25zdCB7IHRvZG9zLCBhY3Rpb25zIH0g
PSB0aGlzLnByb3BzCisgICAgY29uc3QgeyBmaWx0ZXIgfSA9IHRoaXMuc3RhdGUKKworICAgIGNv
bnN0IGZpbHRlcmVkVG9kb3MgPSB0b2Rvcy5maWx0ZXIoVE9ET19GSUxURVJTW2ZpbHRlcl0pCisg
ICAgY29uc3QgY29tcGxldGVkQ291bnQgPSB0b2Rvcy5yZWR1Y2UoKGNvdW50LCB0b2RvKSA9Pgor
ICAgICAgdG9kby5jb21wbGV0ZWQgPyBjb3VudCArIDEgOiBjb3VudCwKKyAgICAgIDAKKyAgICAp
CisKKyAgICByZXR1cm4gKAorICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPSJtYWluIj4KKyAgICAg
ICAge3RoaXMucmVuZGVyVG9nZ2xlQWxsKGNvbXBsZXRlZENvdW50KX0KKyAgICAgICAgPHVsIGNs
YXNzTmFtZT0idG9kby1saXN0Ij4KKyAgICAgICAgICB7ZmlsdGVyZWRUb2Rvcy5tYXAodG9kbyA9
PgorICAgICAgICAgICAgPFRvZG9JdGVtIGtleT17dG9kby5pZH0gdG9kbz17dG9kb30gey4uLmFj
dGlvbnN9IC8+CisgICAgICAgICAgKX0KKyAgICAgICAgPC91bD4KKyAgICAgICAge3RoaXMucmVu
ZGVyRm9vdGVyKGNvbXBsZXRlZENvdW50KX0KKyAgICAgIDwvc2VjdGlvbj4KKyAgICApCisgIH0K
K30KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEv
cmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0LXJlZHV4L3NyYy9j
b21wb25lbnRzL01haW5TZWN0aW9uLnNwZWMuanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3Jn
L1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9y
ZWFjdC1yZWR1eC9zcmMvY29tcG9uZW50cy9NYWluU2VjdGlvbi5zcGVjLmpzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmY1OTI0NTQ4YmI5MTQwNDk3MzM5MDY1MTBjNWNmNzkyY2IzZTU5YTQKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90
b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC1yZWR1eC9zcmMvY29tcG9uZW50cy9N
YWluU2VjdGlvbi5zcGVjLmpzCkBAIC0wLDAgKzEsMTI5IEBACitpbXBvcnQgUmVhY3QgZnJvbSAn
cmVhY3QnCitpbXBvcnQgVGVzdFV0aWxzIGZyb20gJ3JlYWN0LWFkZG9ucy10ZXN0LXV0aWxzJwor
aW1wb3J0IE1haW5TZWN0aW9uIGZyb20gJy4vTWFpblNlY3Rpb24nCitpbXBvcnQgVG9kb0l0ZW0g
ZnJvbSAnLi9Ub2RvSXRlbScKK2ltcG9ydCBGb290ZXIgZnJvbSAnLi9Gb290ZXInCitpbXBvcnQg
eyBTSE9XX0FMTCwgU0hPV19DT01QTEVURUQgfSBmcm9tICcuLi9jb25zdGFudHMvVG9kb0ZpbHRl
cnMnCisKK2NvbnN0IHNldHVwID0gcHJvcE92ZXJyaWRlcyA9PiB7CisgIGNvbnN0IHByb3BzID0g
T2JqZWN0LmFzc2lnbih7CisgICAgdG9kb3M6IFsKKyAgICAgIHsKKyAgICAgICAgdGV4dDogJ1Vz
ZSBSZWR1eCcsCisgICAgICAgIGNvbXBsZXRlZDogZmFsc2UsCisgICAgICAgIGlkOiAwCisgICAg
ICB9LCB7CisgICAgICAgIHRleHQ6ICdSdW4gdGhlIHRlc3RzJywKKyAgICAgICAgY29tcGxldGVk
OiB0cnVlLAorICAgICAgICBpZDogMQorICAgICAgfQorICAgIF0sCisgICAgYWN0aW9uczogewor
ICAgICAgZWRpdFRvZG86IGplc3QuZm4oKSwKKyAgICAgIGRlbGV0ZVRvZG86IGplc3QuZm4oKSwK
KyAgICAgIGNvbXBsZXRlVG9kbzogamVzdC5mbigpLAorICAgICAgY29tcGxldGVBbGw6IGplc3Qu
Zm4oKSwKKyAgICAgIGNsZWFyQ29tcGxldGVkOiBqZXN0LmZuKCkKKyAgICB9CisgIH0sIHByb3BP
dmVycmlkZXMpCisKKyAgY29uc3QgcmVuZGVyZXIgPSBUZXN0VXRpbHMuY3JlYXRlUmVuZGVyZXIo
KQorICByZW5kZXJlci5yZW5kZXIoPE1haW5TZWN0aW9uIHsuLi5wcm9wc30gLz4pCisgIGNvbnN0
IG91dHB1dCA9IHJlbmRlcmVyLmdldFJlbmRlck91dHB1dCgpCisKKyAgcmV0dXJuIHsKKyAgICBw
cm9wczogcHJvcHMsCisgICAgb3V0cHV0OiBvdXRwdXQsCisgICAgcmVuZGVyZXI6IHJlbmRlcmVy
CisgIH0KK30KKworZGVzY3JpYmUoJ2NvbXBvbmVudHMnLCAoKSA9PiB7CisgIGRlc2NyaWJlKCdN
YWluU2VjdGlvbicsICgpID0+IHsKKyAgICBpdCgnc2hvdWxkIHJlbmRlciBjb250YWluZXInLCAo
KSA9PiB7CisgICAgICBjb25zdCB7IG91dHB1dCB9ID0gc2V0dXAoKQorICAgICAgZXhwZWN0KG91
dHB1dC50eXBlKS50b0JlKCdzZWN0aW9uJykKKyAgICAgIGV4cGVjdChvdXRwdXQucHJvcHMuY2xh
c3NOYW1lKS50b0JlKCdtYWluJykKKyAgICB9KQorCisgICAgZGVzY3JpYmUoJ3RvZ2dsZSBhbGwg
aW5wdXQnLCAoKSA9PiB7CisgICAgICBpdCgnc2hvdWxkIHJlbmRlcicsICgpID0+IHsKKyAgICAg
ICAgY29uc3QgeyBvdXRwdXQgfSA9IHNldHVwKCkKKyAgICAgICAgY29uc3QgWyB0b2dnbGUgXSA9
IG91dHB1dC5wcm9wcy5jaGlsZHJlbgorICAgICAgICBleHBlY3QodG9nZ2xlLnR5cGUpLnRvQmUo
J2lucHV0JykKKyAgICAgICAgZXhwZWN0KHRvZ2dsZS5wcm9wcy50eXBlKS50b0JlKCdjaGVja2Jv
eCcpCisgICAgICAgIGV4cGVjdCh0b2dnbGUucHJvcHMuY2hlY2tlZCkudG9CZShmYWxzZSkKKyAg
ICAgIH0pCisKKyAgICAgIGl0KCdzaG91bGQgYmUgY2hlY2tlZCBpZiBhbGwgdG9kb3MgY29tcGxl
dGVkJywgKCkgPT4geworICAgICAgICBjb25zdCB7IG91dHB1dCB9ID0gc2V0dXAoeyB0b2Rvczog
WworICAgICAgICAgIHsKKyAgICAgICAgICAgIHRleHQ6ICdVc2UgUmVkdXgnLAorICAgICAgICAg
ICAgY29tcGxldGVkOiB0cnVlLAorICAgICAgICAgICAgaWQ6IDAKKyAgICAgICAgICB9CisgICAg
ICAgIF0KKyAgICAgICAgfSkKKyAgICAgICAgY29uc3QgWyB0b2dnbGUgXSA9IG91dHB1dC5wcm9w
cy5jaGlsZHJlbgorICAgICAgICBleHBlY3QodG9nZ2xlLnByb3BzLmNoZWNrZWQpLnRvQmUodHJ1
ZSkKKyAgICAgIH0pCisKKyAgICAgIGl0KCdzaG91bGQgY2FsbCBjb21wbGV0ZUFsbCBvbiBjaGFu
Z2UnLCAoKSA9PiB7CisgICAgICAgIGNvbnN0IHsgb3V0cHV0LCBwcm9wcyB9ID0gc2V0dXAoKQor
ICAgICAgICBjb25zdCBbIHRvZ2dsZSBdID0gb3V0cHV0LnByb3BzLmNoaWxkcmVuCisgICAgICAg
IHRvZ2dsZS5wcm9wcy5vbkNoYW5nZSh7fSkKKyAgICAgICAgZXhwZWN0KHByb3BzLmFjdGlvbnMu
Y29tcGxldGVBbGwpLnRvQmVDYWxsZWQoKQorICAgICAgfSkKKyAgICB9KQorCisgICAgZGVzY3Jp
YmUoJ2Zvb3RlcicsICgpID0+IHsKKyAgICAgIGl0KCdzaG91bGQgcmVuZGVyJywgKCkgPT4gewor
ICAgICAgICBjb25zdCB7IG91dHB1dCB9ID0gc2V0dXAoKQorICAgICAgICBjb25zdCBbICwgLCBm
b290ZXIgXSA9IG91dHB1dC5wcm9wcy5jaGlsZHJlbgorICAgICAgICBleHBlY3QoZm9vdGVyLnR5
cGUpLnRvQmUoRm9vdGVyKQorICAgICAgICBleHBlY3QoZm9vdGVyLnByb3BzLmNvbXBsZXRlZENv
dW50KS50b0JlKDEpCisgICAgICAgIGV4cGVjdChmb290ZXIucHJvcHMuYWN0aXZlQ291bnQpLnRv
QmUoMSkKKyAgICAgICAgZXhwZWN0KGZvb3Rlci5wcm9wcy5maWx0ZXIpLnRvQmUoU0hPV19BTEwp
CisgICAgICB9KQorCisgICAgICBpdCgnb25TaG93IHNob3VsZCBzZXQgdGhlIGZpbHRlcicsICgp
ID0+IHsKKyAgICAgICAgY29uc3QgeyBvdXRwdXQsIHJlbmRlcmVyIH0gPSBzZXR1cCgpCisgICAg
ICAgIGNvbnN0IFsgLCAsIGZvb3RlciBdID0gb3V0cHV0LnByb3BzLmNoaWxkcmVuCisgICAgICAg
IGZvb3Rlci5wcm9wcy5vblNob3coU0hPV19DT01QTEVURUQpCisgICAgICAgIGNvbnN0IHVwZGF0
ZWQgPSByZW5kZXJlci5nZXRSZW5kZXJPdXRwdXQoKQorICAgICAgICBjb25zdCBbICwgLCB1cGRh
dGVkRm9vdGVyIF0gPSB1cGRhdGVkLnByb3BzLmNoaWxkcmVuCisgICAgICAgIGV4cGVjdCh1cGRh
dGVkRm9vdGVyLnByb3BzLmZpbHRlcikudG9CZShTSE9XX0NPTVBMRVRFRCkKKyAgICAgIH0pCisK
KyAgICAgIGl0KCdvbkNsZWFyQ29tcGxldGVkIHNob3VsZCBjYWxsIGNsZWFyQ29tcGxldGVkJywg
KCkgPT4geworICAgICAgICBjb25zdCB7IG91dHB1dCwgcHJvcHMgfSA9IHNldHVwKCkKKyAgICAg
ICAgY29uc3QgWyAsICwgZm9vdGVyIF0gPSBvdXRwdXQucHJvcHMuY2hpbGRyZW4KKyAgICAgICAg
Zm9vdGVyLnByb3BzLm9uQ2xlYXJDb21wbGV0ZWQoKQorICAgICAgICBleHBlY3QocHJvcHMuYWN0
aW9ucy5jbGVhckNvbXBsZXRlZCkudG9CZUNhbGxlZCgpCisgICAgICB9KQorICAgIH0pCisKKyAg
ICBkZXNjcmliZSgndG9kbyBsaXN0JywgKCkgPT4geworICAgICAgaXQoJ3Nob3VsZCByZW5kZXIn
LCAoKSA9PiB7CisgICAgICAgIGNvbnN0IHsgb3V0cHV0LCBwcm9wcyB9ID0gc2V0dXAoKQorICAg
ICAgICBjb25zdCBbICwgbGlzdCBdID0gb3V0cHV0LnByb3BzLmNoaWxkcmVuCisgICAgICAgIGV4
cGVjdChsaXN0LnR5cGUpLnRvQmUoJ3VsJykKKyAgICAgICAgZXhwZWN0KGxpc3QucHJvcHMuY2hp
bGRyZW4ubGVuZ3RoKS50b0JlKDIpCisgICAgICAgIGxpc3QucHJvcHMuY2hpbGRyZW4uZm9yRWFj
aCgoaXRlbSwgaSkgPT4geworICAgICAgICAgIGV4cGVjdChpdGVtLnR5cGUpLnRvQmUoVG9kb0l0
ZW0pCisgICAgICAgICAgZXhwZWN0KGl0ZW0ucHJvcHMudG9kbykudG9CZShwcm9wcy50b2Rvc1tp
XSkKKyAgICAgICAgfSkKKyAgICAgIH0pCisKKyAgICAgIGl0KCdzaG91bGQgZmlsdGVyIGl0ZW1z
JywgKCkgPT4geworICAgICAgICBjb25zdCB7IG91dHB1dCwgcmVuZGVyZXIsIHByb3BzIH0gPSBz
ZXR1cCgpCisgICAgICAgIGNvbnN0IFsgLCAsIGZvb3RlciBdID0gb3V0cHV0LnByb3BzLmNoaWxk
cmVuCisgICAgICAgIGZvb3Rlci5wcm9wcy5vblNob3coU0hPV19DT01QTEVURUQpCisgICAgICAg
IGNvbnN0IHVwZGF0ZWQgPSByZW5kZXJlci5nZXRSZW5kZXJPdXRwdXQoKQorICAgICAgICBjb25z
dCBbICwgdXBkYXRlZExpc3QgXSA9IHVwZGF0ZWQucHJvcHMuY2hpbGRyZW4KKyAgICAgICAgZXhw
ZWN0KHVwZGF0ZWRMaXN0LnByb3BzLmNoaWxkcmVuLmxlbmd0aCkudG9CZSgxKQorICAgICAgICBl
eHBlY3QodXBkYXRlZExpc3QucHJvcHMuY2hpbGRyZW5bMF0ucHJvcHMudG9kbykudG9CZShwcm9w
cy50b2Rvc1sxXSkKKyAgICAgIH0pCisgICAgfSkKKyAgfSkKK30pCmRpZmYgLS1naXQgYS9XZWJz
aXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC1yZWR1eC9zcmMvY29tcG9uZW50cy9Ub2RvSXRlbS5q
cyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0LXJlZHV4L3NyYy9jb21wb25lbnRzL1Rv
ZG9JdGVtLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ5MDkyMWQ1NDNkOGYzOGZlMTllZmRjOTNjY2UwMDgzOWM2
NWE4ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVk
b21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC1y
ZWR1eC9zcmMvY29tcG9uZW50cy9Ub2RvSXRlbS5qcwpAQCAtMCwwICsxLDY1IEBACitpbXBvcnQg
UmVhY3QsIHsgQ29tcG9uZW50LCBQcm9wVHlwZXMgfSBmcm9tICdyZWFjdCcKK2ltcG9ydCBjbGFz
c25hbWVzIGZyb20gJ2NsYXNzbmFtZXMnCitpbXBvcnQgVG9kb1RleHRJbnB1dCBmcm9tICcuL1Rv
ZG9UZXh0SW5wdXQnCisKK2V4cG9ydCBkZWZhdWx0IGNsYXNzIFRvZG9JdGVtIGV4dGVuZHMgQ29t
cG9uZW50IHsKKyAgc3RhdGljIHByb3BUeXBlcyA9IHsKKyAgICB0b2RvOiBQcm9wVHlwZXMub2Jq
ZWN0LmlzUmVxdWlyZWQsCisgICAgZWRpdFRvZG86IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQs
CisgICAgZGVsZXRlVG9kbzogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCwKKyAgICBjb21wbGV0
ZVRvZG86IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQKKyAgfQorCisgIHN0YXRlID0geworICAg
IGVkaXRpbmc6IGZhbHNlCisgIH0KKworICBoYW5kbGVEb3VibGVDbGljayA9ICgpID0+IHsKKyAg
ICB0aGlzLnNldFN0YXRlKHsgZWRpdGluZzogdHJ1ZSB9KQorICB9CisKKyAgaGFuZGxlU2F2ZSA9
IChpZCwgdGV4dCkgPT4geworICAgIGlmICh0ZXh0Lmxlbmd0aCA9PT0gMCkgeworICAgICAgdGhp
cy5wcm9wcy5kZWxldGVUb2RvKGlkKQorICAgIH0gZWxzZSB7CisgICAgICB0aGlzLnByb3BzLmVk
aXRUb2RvKGlkLCB0ZXh0KQorICAgIH0KKyAgICB0aGlzLnNldFN0YXRlKHsgZWRpdGluZzogZmFs
c2UgfSkKKyAgfQorCisgIHJlbmRlcigpIHsKKyAgICBjb25zdCB7IHRvZG8sIGNvbXBsZXRlVG9k
bywgZGVsZXRlVG9kbyB9ID0gdGhpcy5wcm9wcworCisgICAgbGV0IGVsZW1lbnQKKyAgICBpZiAo
dGhpcy5zdGF0ZS5lZGl0aW5nKSB7CisgICAgICBlbGVtZW50ID0gKAorICAgICAgICA8VG9kb1Rl
eHRJbnB1dCB0ZXh0PXt0b2RvLnRleHR9CisgICAgICAgICAgICAgICAgICAgICAgIGVkaXRpbmc9
e3RoaXMuc3RhdGUuZWRpdGluZ30KKyAgICAgICAgICAgICAgICAgICAgICAgb25TYXZlPXsodGV4
dCkgPT4gdGhpcy5oYW5kbGVTYXZlKHRvZG8uaWQsIHRleHQpfSAvPgorICAgICAgKQorICAgIH0g
ZWxzZSB7CisgICAgICBlbGVtZW50ID0gKAorICAgICAgICA8ZGl2IGNsYXNzTmFtZT0idmlldyI+
CisgICAgICAgICAgPGlucHV0IGNsYXNzTmFtZT0idG9nZ2xlIgorICAgICAgICAgICAgICAgICB0
eXBlPSJjaGVja2JveCIKKyAgICAgICAgICAgICAgICAgY2hlY2tlZD17dG9kby5jb21wbGV0ZWR9
CisgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoKSA9PiBjb21wbGV0ZVRvZG8odG9kby5pZCl9
IC8+CisgICAgICAgICAgPGxhYmVsIG9uRG91YmxlQ2xpY2s9e3RoaXMuaGFuZGxlRG91YmxlQ2xp
Y2t9PgorICAgICAgICAgICAge3RvZG8udGV4dH0KKyAgICAgICAgICA8L2xhYmVsPgorICAgICAg
ICAgIDxidXR0b24gY2xhc3NOYW1lPSJkZXN0cm95IgorICAgICAgICAgICAgICAgICAgb25DbGlj
az17KCkgPT4gZGVsZXRlVG9kbyh0b2RvLmlkKX0gLz4KKyAgICAgICAgPC9kaXY+CisgICAgICAp
CisgICAgfQorCisgICAgcmV0dXJuICgKKyAgICAgIDxsaSBjbGFzc05hbWU9e2NsYXNzbmFtZXMo
eworICAgICAgICBjb21wbGV0ZWQ6IHRvZG8uY29tcGxldGVkLAorICAgICAgICBlZGl0aW5nOiB0
aGlzLnN0YXRlLmVkaXRpbmcKKyAgICAgIH0pfT4KKyAgICAgICAge2VsZW1lbnR9CisgICAgICA8
L2xpPgorICAgICkKKyAgfQorfQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9y
Zy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
cmVhY3QtcmVkdXgvc3JjL2NvbXBvbmVudHMvVG9kb0l0ZW0uc3BlYy5qcyBiL1dlYnNpdGVzL2Jy
b3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL3JlYWN0LXJlZHV4L3NyYy9jb21wb25lbnRzL1RvZG9JdGVtLnNwZWMuanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNGMzNjRmNWIxOTRhNGRhNmY5YWEwZTVkZDRhZDRmYzdhZTM4YTAxOQotLS0g
L2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEv
cmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0LXJlZHV4L3NyYy9j
b21wb25lbnRzL1RvZG9JdGVtLnNwZWMuanMKQEAgLTAsMCArMSwxMTkgQEAKK2ltcG9ydCBSZWFj
dCBmcm9tICdyZWFjdCcKK2ltcG9ydCBUZXN0VXRpbHMgZnJvbSAncmVhY3QtYWRkb25zLXRlc3Qt
dXRpbHMnCitpbXBvcnQgVG9kb0l0ZW0gZnJvbSAnLi9Ub2RvSXRlbScKK2ltcG9ydCBUb2RvVGV4
dElucHV0IGZyb20gJy4vVG9kb1RleHRJbnB1dCcKKworY29uc3Qgc2V0dXAgPSAoIGVkaXRpbmcg
PSBmYWxzZSApID0+IHsKKyAgY29uc3QgcHJvcHMgPSB7CisgICAgdG9kbzogeworICAgICAgaWQ6
IDAsCisgICAgICB0ZXh0OiAnVXNlIFJlZHV4JywKKyAgICAgIGNvbXBsZXRlZDogZmFsc2UKKyAg
ICB9LAorICAgIGVkaXRUb2RvOiBqZXN0LmZuKCksCisgICAgZGVsZXRlVG9kbzogamVzdC5mbigp
LAorICAgIGNvbXBsZXRlVG9kbzogamVzdC5mbigpCisgIH0KKworICBjb25zdCByZW5kZXJlciA9
IFRlc3RVdGlscy5jcmVhdGVSZW5kZXJlcigpCisKKyAgcmVuZGVyZXIucmVuZGVyKAorICAgIDxU
b2RvSXRlbSB7Li4ucHJvcHN9IC8+CisgICkKKworICBsZXQgb3V0cHV0ID0gcmVuZGVyZXIuZ2V0
UmVuZGVyT3V0cHV0KCkKKworICBpZiAoZWRpdGluZykgeworICAgIGNvbnN0IGxhYmVsID0gb3V0
cHV0LnByb3BzLmNoaWxkcmVuLnByb3BzLmNoaWxkcmVuWzFdCisgICAgbGFiZWwucHJvcHMub25E
b3VibGVDbGljayh7fSkKKyAgICBvdXRwdXQgPSByZW5kZXJlci5nZXRSZW5kZXJPdXRwdXQoKQor
ICB9CisKKyAgcmV0dXJuIHsKKyAgICBwcm9wczogcHJvcHMsCisgICAgb3V0cHV0OiBvdXRwdXQs
CisgICAgcmVuZGVyZXI6IHJlbmRlcmVyCisgIH0KK30KKworZGVzY3JpYmUoJ2NvbXBvbmVudHMn
LCAoKSA9PiB7CisgIGRlc2NyaWJlKCdUb2RvSXRlbScsICgpID0+IHsKKyAgICBpdCgnaW5pdGlh
bCByZW5kZXInLCAoKSA9PiB7CisgICAgICBjb25zdCB7IG91dHB1dCB9ID0gc2V0dXAoKQorCisg
ICAgICBleHBlY3Qob3V0cHV0LnR5cGUpLnRvQmUoJ2xpJykKKyAgICAgIGV4cGVjdChvdXRwdXQu
cHJvcHMuY2xhc3NOYW1lKS50b0JlKCcnKQorCisgICAgICBjb25zdCBkaXYgPSBvdXRwdXQucHJv
cHMuY2hpbGRyZW4KKworICAgICAgZXhwZWN0KGRpdi50eXBlKS50b0JlKCdkaXYnKQorICAgICAg
ZXhwZWN0KGRpdi5wcm9wcy5jbGFzc05hbWUpLnRvQmUoJ3ZpZXcnKQorCisgICAgICBjb25zdCBb
IGlucHV0LCBsYWJlbCwgYnV0dG9uIF0gPSBkaXYucHJvcHMuY2hpbGRyZW4KKworICAgICAgZXhw
ZWN0KGlucHV0LnR5cGUpLnRvQmUoJ2lucHV0JykKKyAgICAgIGV4cGVjdChpbnB1dC5wcm9wcy5j
aGVja2VkKS50b0JlKGZhbHNlKQorCisgICAgICBleHBlY3QobGFiZWwudHlwZSkudG9CZSgnbGFi
ZWwnKQorICAgICAgZXhwZWN0KGxhYmVsLnByb3BzLmNoaWxkcmVuKS50b0JlKCdVc2UgUmVkdXgn
KQorCisgICAgICBleHBlY3QoYnV0dG9uLnR5cGUpLnRvQmUoJ2J1dHRvbicpCisgICAgICBleHBl
Y3QoYnV0dG9uLnByb3BzLmNsYXNzTmFtZSkudG9CZSgnZGVzdHJveScpCisgICAgfSkKKworICAg
IGl0KCdpbnB1dCBvbkNoYW5nZSBzaG91bGQgY2FsbCBjb21wbGV0ZVRvZG8nLCAoKSA9PiB7Cisg
ICAgICBjb25zdCB7IG91dHB1dCwgcHJvcHMgfSA9IHNldHVwKCkKKyAgICAgIGNvbnN0IGlucHV0
ID0gb3V0cHV0LnByb3BzLmNoaWxkcmVuLnByb3BzLmNoaWxkcmVuWzBdCisgICAgICBpbnB1dC5w
cm9wcy5vbkNoYW5nZSh7fSkKKyAgICAgIGV4cGVjdChwcm9wcy5jb21wbGV0ZVRvZG8pLnRvQmVD
YWxsZWRXaXRoKDApCisgICAgfSkKKworICAgIGl0KCdidXR0b24gb25DbGljayBzaG91bGQgY2Fs
bCBkZWxldGVUb2RvJywgKCkgPT4geworICAgICAgY29uc3QgeyBvdXRwdXQsIHByb3BzIH0gPSBz
ZXR1cCgpCisgICAgICBjb25zdCBidXR0b24gPSBvdXRwdXQucHJvcHMuY2hpbGRyZW4ucHJvcHMu
Y2hpbGRyZW5bMl0KKyAgICAgIGJ1dHRvbi5wcm9wcy5vbkNsaWNrKHt9KQorICAgICAgZXhwZWN0
KHByb3BzLmRlbGV0ZVRvZG8pLnRvQmVDYWxsZWRXaXRoKDApCisgICAgfSkKKworICAgIGl0KCds
YWJlbCBvbkRvdWJsZUNsaWNrIHNob3VsZCBwdXQgY29tcG9uZW50IGluIGVkaXQgc3RhdGUnLCAo
KSA9PiB7CisgICAgICBjb25zdCB7IG91dHB1dCwgcmVuZGVyZXIgfSA9IHNldHVwKCkKKyAgICAg
IGNvbnN0IGxhYmVsID0gb3V0cHV0LnByb3BzLmNoaWxkcmVuLnByb3BzLmNoaWxkcmVuWzFdCisg
ICAgICBsYWJlbC5wcm9wcy5vbkRvdWJsZUNsaWNrKHt9KQorICAgICAgY29uc3QgdXBkYXRlZCA9
IHJlbmRlcmVyLmdldFJlbmRlck91dHB1dCgpCisgICAgICBleHBlY3QodXBkYXRlZC50eXBlKS50
b0JlKCdsaScpCisgICAgICBleHBlY3QodXBkYXRlZC5wcm9wcy5jbGFzc05hbWUpLnRvQmUoJ2Vk
aXRpbmcnKQorICAgIH0pCisKKyAgICBpdCgnZWRpdCBzdGF0ZSByZW5kZXInLCAoKSA9PiB7Cisg
ICAgICBjb25zdCB7IG91dHB1dCB9ID0gc2V0dXAodHJ1ZSkKKworICAgICAgZXhwZWN0KG91dHB1
dC50eXBlKS50b0JlKCdsaScpCisgICAgICBleHBlY3Qob3V0cHV0LnByb3BzLmNsYXNzTmFtZSku
dG9CZSgnZWRpdGluZycpCisKKyAgICAgIGNvbnN0IGlucHV0ID0gb3V0cHV0LnByb3BzLmNoaWxk
cmVuCisgICAgICBleHBlY3QoaW5wdXQudHlwZSkudG9CZShUb2RvVGV4dElucHV0KQorICAgICAg
ZXhwZWN0KGlucHV0LnByb3BzLnRleHQpLnRvQmUoJ1VzZSBSZWR1eCcpCisgICAgICBleHBlY3Qo
aW5wdXQucHJvcHMuZWRpdGluZykudG9CZSh0cnVlKQorICAgIH0pCisKKyAgICBpdCgnVG9kb1Rl
eHRJbnB1dCBvblNhdmUgc2hvdWxkIGNhbGwgZWRpdFRvZG8nLCAoKSA9PiB7CisgICAgICBjb25z
dCB7IG91dHB1dCwgcHJvcHMgfSA9IHNldHVwKHRydWUpCisgICAgICBvdXRwdXQucHJvcHMuY2hp
bGRyZW4ucHJvcHMub25TYXZlKCdVc2UgUmVkdXgnKQorICAgICAgZXhwZWN0KHByb3BzLmVkaXRU
b2RvKS50b0JlQ2FsbGVkV2l0aCgwLCAnVXNlIFJlZHV4JykKKyAgICB9KQorCisgICAgaXQoJ1Rv
ZG9UZXh0SW5wdXQgb25TYXZlIHNob3VsZCBjYWxsIGRlbGV0ZVRvZG8gaWYgdGV4dCBpcyBlbXB0
eScsICgpID0+IHsKKyAgICAgIGNvbnN0IHsgb3V0cHV0LCBwcm9wcyB9ID0gc2V0dXAodHJ1ZSkK
KyAgICAgIG91dHB1dC5wcm9wcy5jaGlsZHJlbi5wcm9wcy5vblNhdmUoJycpCisgICAgICBleHBl
Y3QocHJvcHMuZGVsZXRlVG9kbykudG9CZUNhbGxlZFdpdGgoMCkKKyAgICB9KQorCisgICAgaXQo
J1RvZG9UZXh0SW5wdXQgb25TYXZlIHNob3VsZCBleGl0IGNvbXBvbmVudCBmcm9tIGVkaXQgc3Rh
dGUnLCAoKSA9PiB7CisgICAgICBjb25zdCB7IG91dHB1dCwgcmVuZGVyZXIgfSA9IHNldHVwKHRy
dWUpCisgICAgICBvdXRwdXQucHJvcHMuY2hpbGRyZW4ucHJvcHMub25TYXZlKCdVc2UgUmVkdXgn
KQorICAgICAgY29uc3QgdXBkYXRlZCA9IHJlbmRlcmVyLmdldFJlbmRlck91dHB1dCgpCisgICAg
ICBleHBlY3QodXBkYXRlZC50eXBlKS50b0JlKCdsaScpCisgICAgICBleHBlY3QodXBkYXRlZC5w
cm9wcy5jbGFzc05hbWUpLnRvQmUoJycpCisgICAgfSkKKyAgfSkKK30pCmRpZmYgLS1naXQgYS9X
ZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZj
L2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC1yZWR1eC9zcmMvY29tcG9uZW50cy9Ub2RvVGV4
dElucHV0LmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QtcmVkdXgvc3JjL2NvbXBv
bmVudHMvVG9kb1RleHRJbnB1dC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYzA5YTNiMGJiOTdiNmU5YzljZWI0
MzZhZTRkZDU1ZmY1MWFkZjg5Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJl
bmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvcmVhY3QtcmVkdXgvc3JjL2NvbXBvbmVudHMvVG9kb1RleHRJbnB1dC5qcwpAQCAtMCww
ICsxLDUzIEBACitpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBQcm9wVHlwZXMgfSBmcm9tICdy
ZWFjdCcKK2ltcG9ydCBjbGFzc25hbWVzIGZyb20gJ2NsYXNzbmFtZXMnCisKK2V4cG9ydCBkZWZh
dWx0IGNsYXNzIFRvZG9UZXh0SW5wdXQgZXh0ZW5kcyBDb21wb25lbnQgeworICBzdGF0aWMgcHJv
cFR5cGVzID0geworICAgIG9uU2F2ZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCwKKyAgICB0
ZXh0OiBQcm9wVHlwZXMuc3RyaW5nLAorICAgIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5n
LAorICAgIGVkaXRpbmc6IFByb3BUeXBlcy5ib29sLAorICAgIG5ld1RvZG86IFByb3BUeXBlcy5i
b29sCisgIH0KKworICBzdGF0ZSA9IHsKKyAgICB0ZXh0OiB0aGlzLnByb3BzLnRleHQgfHwgJycK
KyAgfQorCisgIGhhbmRsZVN1Ym1pdCA9IGUgPT4geworICAgIGNvbnN0IHRleHQgPSBlLnRhcmdl
dC52YWx1ZS50cmltKCkKKyAgICBpZiAoZS53aGljaCA9PT0gMTMpIHsKKyAgICAgIHRoaXMucHJv
cHMub25TYXZlKHRleHQpCisgICAgICBpZiAodGhpcy5wcm9wcy5uZXdUb2RvKSB7CisgICAgICAg
IHRoaXMuc2V0U3RhdGUoeyB0ZXh0OiAnJyB9KQorICAgICAgfQorICAgIH0KKyAgfQorCisgIGhh
bmRsZUNoYW5nZSA9IGUgPT4geworICAgIHRoaXMuc2V0U3RhdGUoeyB0ZXh0OiBlLnRhcmdldC52
YWx1ZSB9KQorICB9CisKKyAgaGFuZGxlQmx1ciA9IGUgPT4geworICAgIGlmICghdGhpcy5wcm9w
cy5uZXdUb2RvKSB7CisgICAgICB0aGlzLnByb3BzLm9uU2F2ZShlLnRhcmdldC52YWx1ZSkKKyAg
ICB9CisgIH0KKworICByZW5kZXIoKSB7CisgICAgcmV0dXJuICgKKyAgICAgIDxpbnB1dCBjbGFz
c05hbWU9eworICAgICAgICBjbGFzc25hbWVzKHsKKyAgICAgICAgICBlZGl0OiB0aGlzLnByb3Bz
LmVkaXRpbmcsCisgICAgICAgICAgJ25ldy10b2RvJzogdGhpcy5wcm9wcy5uZXdUb2RvCisgICAg
ICAgIH0pfQorICAgICAgICB0eXBlPSJ0ZXh0IgorICAgICAgICBwbGFjZWhvbGRlcj17dGhpcy5w
cm9wcy5wbGFjZWhvbGRlcn0KKyAgICAgICAgYXV0b0ZvY3VzPSJ0cnVlIgorICAgICAgICB2YWx1
ZT17dGhpcy5zdGF0ZS50ZXh0fQorICAgICAgICBvbkJsdXI9e3RoaXMuaGFuZGxlQmx1cn0KKyAg
ICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfQorICAgICAgICBvbktleURvd249e3Ro
aXMuaGFuZGxlU3VibWl0fSAvPgorICAgICkKKyAgfQorfQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMv
YnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvcmVhY3QtcmVkdXgvc3JjL2NvbXBvbmVudHMvVG9kb1RleHRJbnB1dC5z
cGVjLmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QtcmVkdXgvc3JjL2NvbXBvbmVu
dHMvVG9kb1RleHRJbnB1dC5zcGVjLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVmY2E3OWE5MDg1ODQ0NjViZDg0
NmM2NjZkNzQyZDE0NWIwN2M0ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2Vy
YmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9yZWFjdC1yZWR1eC9zcmMvY29tcG9uZW50cy9Ub2RvVGV4dElucHV0LnNwZWMuanMK
QEAgLTAsMCArMSw4MCBAQAoraW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JworaW1wb3J0IFRlc3RV
dGlscyBmcm9tICdyZWFjdC1hZGRvbnMtdGVzdC11dGlscycKK2ltcG9ydCBUb2RvVGV4dElucHV0
IGZyb20gJy4vVG9kb1RleHRJbnB1dCcKKworY29uc3Qgc2V0dXAgPSBwcm9wT3ZlcnJpZGVzID0+
IHsKKyAgY29uc3QgcHJvcHMgPSBPYmplY3QuYXNzaWduKHsKKyAgICBvblNhdmU6IGplc3QuZm4o
KSwKKyAgICB0ZXh0OiAnVXNlIFJlZHV4JywKKyAgICBwbGFjZWhvbGRlcjogJ1doYXQgbmVlZHMg
dG8gYmUgZG9uZT8nLAorICAgIGVkaXRpbmc6IGZhbHNlLAorICAgIG5ld1RvZG86IGZhbHNlCisg
IH0sIHByb3BPdmVycmlkZXMpCisKKyAgY29uc3QgcmVuZGVyZXIgPSBUZXN0VXRpbHMuY3JlYXRl
UmVuZGVyZXIoKQorCisgIHJlbmRlcmVyLnJlbmRlcigKKyAgICA8VG9kb1RleHRJbnB1dCB7Li4u
cHJvcHN9IC8+CisgICkKKworICBjb25zdCBvdXRwdXQgPSByZW5kZXJlci5nZXRSZW5kZXJPdXRw
dXQoKQorCisgIHJldHVybiB7CisgICAgcHJvcHM6IHByb3BzLAorICAgIG91dHB1dDogb3V0cHV0
LAorICAgIHJlbmRlcmVyOiByZW5kZXJlcgorICB9Cit9CisKK2Rlc2NyaWJlKCdjb21wb25lbnRz
JywgKCkgPT4geworICBkZXNjcmliZSgnVG9kb1RleHRJbnB1dCcsICgpID0+IHsKKyAgICBpdCgn
c2hvdWxkIHJlbmRlciBjb3JyZWN0bHknLCAoKSA9PiB7CisgICAgICBjb25zdCB7IG91dHB1dCB9
ID0gc2V0dXAoKQorICAgICAgZXhwZWN0KG91dHB1dC5wcm9wcy5wbGFjZWhvbGRlcikudG9FcXVh
bCgnV2hhdCBuZWVkcyB0byBiZSBkb25lPycpCisgICAgICBleHBlY3Qob3V0cHV0LnByb3BzLnZh
bHVlKS50b0VxdWFsKCdVc2UgUmVkdXgnKQorICAgICAgZXhwZWN0KG91dHB1dC5wcm9wcy5jbGFz
c05hbWUpLnRvRXF1YWwoJycpCisgICAgfSkKKworICAgIGl0KCdzaG91bGQgcmVuZGVyIGNvcnJl
Y3RseSB3aGVuIGVkaXRpbmc9dHJ1ZScsICgpID0+IHsKKyAgICAgIGNvbnN0IHsgb3V0cHV0IH0g
PSBzZXR1cCh7IGVkaXRpbmc6IHRydWUgfSkKKyAgICAgIGV4cGVjdChvdXRwdXQucHJvcHMuY2xh
c3NOYW1lKS50b0VxdWFsKCdlZGl0JykKKyAgICB9KQorCisgICAgaXQoJ3Nob3VsZCByZW5kZXIg
Y29ycmVjdGx5IHdoZW4gbmV3VG9kbz10cnVlJywgKCkgPT4geworICAgICAgY29uc3QgeyBvdXRw
dXQgfSA9IHNldHVwKHsgbmV3VG9kbzogdHJ1ZSB9KQorICAgICAgZXhwZWN0KG91dHB1dC5wcm9w
cy5jbGFzc05hbWUpLnRvRXF1YWwoJ25ldy10b2RvJykKKyAgICB9KQorCisgICAgaXQoJ3Nob3Vs
ZCB1cGRhdGUgdmFsdWUgb24gY2hhbmdlJywgKCkgPT4geworICAgICAgY29uc3QgeyBvdXRwdXQs
IHJlbmRlcmVyIH0gPSBzZXR1cCgpCisgICAgICBvdXRwdXQucHJvcHMub25DaGFuZ2UoeyB0YXJn
ZXQ6IHsgdmFsdWU6ICdVc2UgUmFkb3gnIH0gfSkKKyAgICAgIGNvbnN0IHVwZGF0ZWQgPSByZW5k
ZXJlci5nZXRSZW5kZXJPdXRwdXQoKQorICAgICAgZXhwZWN0KHVwZGF0ZWQucHJvcHMudmFsdWUp
LnRvRXF1YWwoJ1VzZSBSYWRveCcpCisgICAgfSkKKworICAgIGl0KCdzaG91bGQgY2FsbCBvblNh
dmUgb24gcmV0dXJuIGtleSBwcmVzcycsICgpID0+IHsKKyAgICAgIGNvbnN0IHsgb3V0cHV0LCBw
cm9wcyB9ID0gc2V0dXAoKQorICAgICAgb3V0cHV0LnByb3BzLm9uS2V5RG93bih7IHdoaWNoOiAx
MywgdGFyZ2V0OiB7IHZhbHVlOiAnVXNlIFJlZHV4JyB9IH0pCisgICAgICBleHBlY3QocHJvcHMu
b25TYXZlKS50b0JlQ2FsbGVkV2l0aCgnVXNlIFJlZHV4JykKKyAgICB9KQorCisgICAgaXQoJ3No
b3VsZCByZXNldCBzdGF0ZSBvbiByZXR1cm4ga2V5IHByZXNzIGlmIG5ld1RvZG8nLCAoKSA9PiB7
CisgICAgICBjb25zdCB7IG91dHB1dCwgcmVuZGVyZXIgfSA9IHNldHVwKHsgbmV3VG9kbzogdHJ1
ZSB9KQorICAgICAgb3V0cHV0LnByb3BzLm9uS2V5RG93bih7IHdoaWNoOiAxMywgdGFyZ2V0OiB7
IHZhbHVlOiAnVXNlIFJlZHV4JyB9IH0pCisgICAgICBjb25zdCB1cGRhdGVkID0gcmVuZGVyZXIu
Z2V0UmVuZGVyT3V0cHV0KCkKKyAgICAgIGV4cGVjdCh1cGRhdGVkLnByb3BzLnZhbHVlKS50b0Vx
dWFsKCcnKQorICAgIH0pCisKKyAgICBpdCgnc2hvdWxkIGNhbGwgb25TYXZlIG9uIGJsdXInLCAo
KSA9PiB7CisgICAgICBjb25zdCB7IG91dHB1dCwgcHJvcHMgfSA9IHNldHVwKCkKKyAgICAgIG91
dHB1dC5wcm9wcy5vbkJsdXIoeyB0YXJnZXQ6IHsgdmFsdWU6ICdVc2UgUmVkdXgnIH0gfSkKKyAg
ICAgIGV4cGVjdChwcm9wcy5vblNhdmUpLnRvQmVDYWxsZWRXaXRoKCdVc2UgUmVkdXgnKQorICAg
IH0pCisKKyAgICBpdCgnc2hvdWxkbnQgY2FsbCBvblNhdmUgb24gYmx1ciBpZiBuZXdUb2RvJywg
KCkgPT4geworICAgICAgY29uc3QgeyBvdXRwdXQsIHByb3BzIH0gPSBzZXR1cCh7IG5ld1RvZG86
IHRydWUgfSkKKyAgICAgIG91dHB1dC5wcm9wcy5vbkJsdXIoeyB0YXJnZXQ6IHsgdmFsdWU6ICdV
c2UgUmVkdXgnIH0gfSkKKyAgICAgIGV4cGVjdChwcm9wcy5vblNhdmUpLm5vdC50b0JlQ2FsbGVk
KCkKKyAgICB9KQorICB9KQorfSkKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5v
cmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L3JlYWN0LXJlZHV4L3NyYy9jb25zdGFudHMvQWN0aW9uVHlwZXMuanMgYi9XZWJzaXRlcy9icm93
c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVy
ZS1leGFtcGxlcy9yZWFjdC1yZWR1eC9zcmMvY29uc3RhbnRzL0FjdGlvblR5cGVzLmpzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmE3Y2RkMDJkOTNhZmJlOTZiNWZlMTBlMzU0NTFiMGFmZmJmZGNkMTEKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC1yZWR1eC9zcmMvY29uc3Rh
bnRzL0FjdGlvblR5cGVzLmpzCkBAIC0wLDAgKzEsNiBAQAorZXhwb3J0IGNvbnN0IEFERF9UT0RP
ID0gJ0FERF9UT0RPJworZXhwb3J0IGNvbnN0IERFTEVURV9UT0RPID0gJ0RFTEVURV9UT0RPJwor
ZXhwb3J0IGNvbnN0IEVESVRfVE9ETyA9ICdFRElUX1RPRE8nCitleHBvcnQgY29uc3QgQ09NUExF
VEVfVE9ETyA9ICdDT01QTEVURV9UT0RPJworZXhwb3J0IGNvbnN0IENPTVBMRVRFX0FMTCA9ICdD
T01QTEVURV9BTEwnCitleHBvcnQgY29uc3QgQ0xFQVJfQ09NUExFVEVEID0gJ0NMRUFSX0NPTVBM
RVRFRCcKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIy
LjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0LXJlZHV4L3Ny
Yy9jb25zdGFudHMvVG9kb0ZpbHRlcnMuanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1Nw
ZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFj
dC1yZWR1eC9zcmMvY29uc3RhbnRzL1RvZG9GaWx0ZXJzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcyNjg3ODVk
NTZhYWFmMmI5ZmZkYjE5ZjMyNDMxOWE0MDQzNjE1OWMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJz
aXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC1yZWR1eC9zcmMvY29uc3RhbnRzL1RvZG9GaWx0ZXJz
LmpzCkBAIC0wLDAgKzEsMyBAQAorZXhwb3J0IGNvbnN0IFNIT1dfQUxMID0gJ3Nob3dfYWxsJwor
ZXhwb3J0IGNvbnN0IFNIT1dfQ09NUExFVEVEID0gJ3Nob3dfY29tcGxldGVkJworZXhwb3J0IGNv
bnN0IFNIT1dfQUNUSVZFID0gJ3Nob3dfYWN0aXZlJwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJv
d3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1
cmUtZXhhbXBsZXMvcmVhY3QtcmVkdXgvc3JjL2NvbnRhaW5lcnMvQXBwLmpzIGIvV2Vic2l0ZXMv
YnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvcmVhY3QtcmVkdXgvc3JjL2NvbnRhaW5lcnMvQXBwLmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjhkYjdjNzEzYmQ0N2M1NDU2N2I2YzU4MzE5OTgzZDliMGVlNzJjZWEKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC1yZWR1eC9zcmMvY29udGFpbmVy
cy9BcHAuanMKQEAgLTAsMCArMSwzMSBAQAoraW1wb3J0IFJlYWN0LCB7IFByb3BUeXBlcyB9IGZy
b20gJ3JlYWN0JworaW1wb3J0IHsgYmluZEFjdGlvbkNyZWF0b3JzIH0gZnJvbSAncmVkdXgnCitp
bXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnCitpbXBvcnQgSGVhZGVyIGZyb20g
Jy4uL2NvbXBvbmVudHMvSGVhZGVyJworaW1wb3J0IE1haW5TZWN0aW9uIGZyb20gJy4uL2NvbXBv
bmVudHMvTWFpblNlY3Rpb24nCitpbXBvcnQgKiBhcyBUb2RvQWN0aW9ucyBmcm9tICcuLi9hY3Rp
b25zJworCitjb25zdCBBcHAgPSAoe3RvZG9zLCBhY3Rpb25zfSkgPT4gKAorICA8ZGl2PgorICAg
IDxIZWFkZXIgYWRkVG9kbz17YWN0aW9ucy5hZGRUb2RvfSAvPgorICAgIDxNYWluU2VjdGlvbiB0
b2Rvcz17dG9kb3N9IGFjdGlvbnM9e2FjdGlvbnN9IC8+CisgIDwvZGl2PgorKQorCitBcHAucHJv
cFR5cGVzID0geworICB0b2RvczogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsCisgIGFjdGlv
bnM6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZAorfQorCitjb25zdCBtYXBTdGF0ZVRvUHJv
cHMgPSBzdGF0ZSA9PiAoeworICB0b2Rvczogc3RhdGUudG9kb3MKK30pCisKK2NvbnN0IG1hcERp
c3BhdGNoVG9Qcm9wcyA9IGRpc3BhdGNoID0+ICh7CisgICAgYWN0aW9uczogYmluZEFjdGlvbkNy
ZWF0b3JzKFRvZG9BY3Rpb25zLCBkaXNwYXRjaCkKK30pCisKK2V4cG9ydCBkZWZhdWx0IGNvbm5l
Y3QoCisgIG1hcFN0YXRlVG9Qcm9wcywKKyAgbWFwRGlzcGF0Y2hUb1Byb3BzCispKEFwcCkKZGlm
ZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0LXJlZHV4L3NyYy9pbmRleC5q
cyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0LXJlZHV4L3NyYy9pbmRleC5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40NGY1MGFiMjY5ZDg4YjA0MmU1Mzc1NGQyNjZlMmE5NWQyOTYyOTcwCi0tLSAvZGV2
L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QtcmVkdXgvc3JjL2luZGV4
LmpzCkBAIC0wLDAgKzEsMTYgQEAKK2ltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCcKK2ltcG9ydCB7
IHJlbmRlciB9IGZyb20gJ3JlYWN0LWRvbScKK2ltcG9ydCB7IGNyZWF0ZVN0b3JlIH0gZnJvbSAn
cmVkdXgnCitpbXBvcnQgeyBQcm92aWRlciB9IGZyb20gJ3JlYWN0LXJlZHV4JworaW1wb3J0IEFw
cCBmcm9tICcuL2NvbnRhaW5lcnMvQXBwJworaW1wb3J0IHJlZHVjZXIgZnJvbSAnLi9yZWR1Y2Vy
cycKK2ltcG9ydCAndG9kb212Yy1hcHAtY3NzL2luZGV4LmNzcycKKworY29uc3Qgc3RvcmUgPSBj
cmVhdGVTdG9yZShyZWR1Y2VyKQorCityZW5kZXIoCisgIDxQcm92aWRlciBzdG9yZT17c3RvcmV9
PgorICAgIDxBcHAgLz4KKyAgPC9Qcm92aWRlcj4sCisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdyb290JykKKykKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRv
bWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0LXJl
ZHV4L3NyYy9yZWR1Y2Vycy9pbmRleC5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3Bl
ZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0
LXJlZHV4L3NyYy9yZWR1Y2Vycy9pbmRleC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOTRhY2UzNmI5ODExOTc1
NzljNGNlMmI1ZGZiM2U5ZTYzODIzZjE0Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJv
d3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1
cmUtZXhhbXBsZXMvcmVhY3QtcmVkdXgvc3JjL3JlZHVjZXJzL2luZGV4LmpzCkBAIC0wLDAgKzEs
OCBAQAoraW1wb3J0IHsgY29tYmluZVJlZHVjZXJzIH0gZnJvbSAncmVkdXgnCitpbXBvcnQgdG9k
b3MgZnJvbSAnLi90b2RvcycKKworY29uc3Qgcm9vdFJlZHVjZXIgPSBjb21iaW5lUmVkdWNlcnMo
eworICB0b2RvcworfSkKKworZXhwb3J0IGRlZmF1bHQgcm9vdFJlZHVjZXIKZGlmZiAtLWdpdCBh
L1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9t
dmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0LXJlZHV4L3NyYy9yZWR1Y2Vycy90b2Rvcy5q
cyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0LXJlZHV4L3NyYy9yZWR1Y2Vycy90b2Rv
cy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi44NGQ5ODI2NjRkOWJkMWI5Yzg4ODRiYmFmN2E4Y2FmZjU4ZTkxMzU0
Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRl
cjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QtcmVkdXgv
c3JjL3JlZHVjZXJzL3RvZG9zLmpzCkBAIC0wLDAgKzEsNDkgQEAKK2ltcG9ydCB7IEFERF9UT0RP
LCBERUxFVEVfVE9ETywgRURJVF9UT0RPLCBDT01QTEVURV9UT0RPLCBDT01QTEVURV9BTEwsIENM
RUFSX0NPTVBMRVRFRCB9IGZyb20gJy4uL2NvbnN0YW50cy9BY3Rpb25UeXBlcycKKworY29uc3Qg
aW5pdGlhbFN0YXRlID0gW10KKworZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9kb3Moc3RhdGUg
PSBpbml0aWFsU3RhdGUsIGFjdGlvbikgeworICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7CisgICAg
Y2FzZSBBRERfVE9ETzoKKyAgICAgIHJldHVybiBbCisgICAgICAgIC4uLnN0YXRlLAorICAgICAg
ICB7CisgICAgICAgICAgaWQ6IHN0YXRlLnJlZHVjZSgobWF4SWQsIHRvZG8pID0+IE1hdGgubWF4
KHRvZG8uaWQsIG1heElkKSwgLTEpICsgMSwKKyAgICAgICAgICBjb21wbGV0ZWQ6IGZhbHNlLAor
ICAgICAgICAgIHRleHQ6IGFjdGlvbi50ZXh0CisgICAgICAgIH0KKyAgICAgIF0KKworICAgIGNh
c2UgREVMRVRFX1RPRE86CisgICAgICByZXR1cm4gc3RhdGUuZmlsdGVyKHRvZG8gPT4KKyAgICAg
ICAgdG9kby5pZCAhPT0gYWN0aW9uLmlkCisgICAgICApCisKKyAgICBjYXNlIEVESVRfVE9ETzoK
KyAgICAgIHJldHVybiBzdGF0ZS5tYXAodG9kbyA9PgorICAgICAgICB0b2RvLmlkID09PSBhY3Rp
b24uaWQgPworICAgICAgICAgIHsgLi4udG9kbywgdGV4dDogYWN0aW9uLnRleHQgfSA6CisgICAg
ICAgICAgdG9kbworICAgICAgKQorCisgICAgY2FzZSBDT01QTEVURV9UT0RPOgorICAgICAgcmV0
dXJuIHN0YXRlLm1hcCh0b2RvID0+CisgICAgICAgIHRvZG8uaWQgPT09IGFjdGlvbi5pZCA/Cisg
ICAgICAgICAgeyAuLi50b2RvLCBjb21wbGV0ZWQ6ICF0b2RvLmNvbXBsZXRlZCB9IDoKKyAgICAg
ICAgICB0b2RvCisgICAgICApCisKKyAgICBjYXNlIENPTVBMRVRFX0FMTDoKKyAgICAgIGNvbnN0
IGFyZUFsbE1hcmtlZCA9IHN0YXRlLmV2ZXJ5KHRvZG8gPT4gdG9kby5jb21wbGV0ZWQpCisgICAg
ICByZXR1cm4gc3RhdGUubWFwKHRvZG8gPT4gKHsKKyAgICAgICAgLi4udG9kbywKKyAgICAgICAg
Y29tcGxldGVkOiAhYXJlQWxsTWFya2VkCisgICAgICB9KSkKKworICAgIGNhc2UgQ0xFQVJfQ09N
UExFVEVEOgorICAgICAgcmV0dXJuIHN0YXRlLmZpbHRlcih0b2RvID0+IHRvZG8uY29tcGxldGVk
ID09PSBmYWxzZSkKKworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gc3RhdGUKKyAgfQorfQpk
aWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QtcmVkdXgvc3JjL3JlZHVj
ZXJzL3RvZG9zLnNwZWMuanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVy
Mi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC1yZWR1eC9z
cmMvcmVkdWNlcnMvdG9kb3Muc3BlYy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZGRkZWQzNmZiNDU2ODliNGVk
ZDZiMmE5ZTBhOWFjNmIyNGY4NWM1Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3Nl
cmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvcmVhY3QtcmVkdXgvc3JjL3JlZHVjZXJzL3RvZG9zLnNwZWMuanMKQEAgLTAsMCAr
MSwyODQgQEAKK2ltcG9ydCB0b2RvcyBmcm9tICcuL3RvZG9zJworaW1wb3J0ICogYXMgdHlwZXMg
ZnJvbSAnLi4vY29uc3RhbnRzL0FjdGlvblR5cGVzJworCitkZXNjcmliZSgndG9kb3MgcmVkdWNl
cicsICgpID0+IHsKKyAgaXQoJ3Nob3VsZCBoYW5kbGUgaW5pdGlhbCBzdGF0ZScsICgpID0+IHsK
KyAgICBleHBlY3QoCisgICAgICB0b2Rvcyh1bmRlZmluZWQsIHt9KQorICAgICkudG9FcXVhbChb
CisgICAgICB7CisgICAgICAgIHRleHQ6ICdVc2UgUmVkdXgnLAorICAgICAgICBjb21wbGV0ZWQ6
IGZhbHNlLAorICAgICAgICBpZDogMAorICAgICAgfQorICAgIF0pCisgIH0pCisKKyAgaXQoJ3No
b3VsZCBoYW5kbGUgQUREX1RPRE8nLCAoKSA9PiB7CisgICAgZXhwZWN0KAorICAgICAgdG9kb3Mo
W10sIHsKKyAgICAgICAgdHlwZTogdHlwZXMuQUREX1RPRE8sCisgICAgICAgIHRleHQ6ICdSdW4g
dGhlIHRlc3RzJworICAgICAgfSkKKyAgICApLnRvRXF1YWwoWworICAgICAgeworICAgICAgICB0
ZXh0OiAnUnVuIHRoZSB0ZXN0cycsCisgICAgICAgIGNvbXBsZXRlZDogZmFsc2UsCisgICAgICAg
IGlkOiAwCisgICAgICB9CisgICAgXSkKKworICAgIGV4cGVjdCgKKyAgICAgIHRvZG9zKFsKKyAg
ICAgICAgeworICAgICAgICAgIHRleHQ6ICdVc2UgUmVkdXgnLAorICAgICAgICAgIGNvbXBsZXRl
ZDogZmFsc2UsCisgICAgICAgICAgaWQ6IDAKKyAgICAgICAgfQorICAgICAgXSwgeworICAgICAg
ICB0eXBlOiB0eXBlcy5BRERfVE9ETywKKyAgICAgICAgdGV4dDogJ1J1biB0aGUgdGVzdHMnCisg
ICAgICB9KQorICAgICkudG9FcXVhbChbCisgICAgICB7CisgICAgICAgIHRleHQ6ICdSdW4gdGhl
IHRlc3RzJywKKyAgICAgICAgY29tcGxldGVkOiBmYWxzZSwKKyAgICAgICAgaWQ6IDEKKyAgICAg
IH0sIHsKKyAgICAgICAgdGV4dDogJ1VzZSBSZWR1eCcsCisgICAgICAgIGNvbXBsZXRlZDogZmFs
c2UsCisgICAgICAgIGlkOiAwCisgICAgICB9CisgICAgXSkKKworICAgIGV4cGVjdCgKKyAgICAg
IHRvZG9zKFsKKyAgICAgICAgeworICAgICAgICAgIHRleHQ6ICdSdW4gdGhlIHRlc3RzJywKKyAg
ICAgICAgICBjb21wbGV0ZWQ6IGZhbHNlLAorICAgICAgICAgIGlkOiAxCisgICAgICAgIH0sIHsK
KyAgICAgICAgICB0ZXh0OiAnVXNlIFJlZHV4JywKKyAgICAgICAgICBjb21wbGV0ZWQ6IGZhbHNl
LAorICAgICAgICAgIGlkOiAwCisgICAgICAgIH0KKyAgICAgIF0sIHsKKyAgICAgICAgdHlwZTog
dHlwZXMuQUREX1RPRE8sCisgICAgICAgIHRleHQ6ICdGaXggdGhlIHRlc3RzJworICAgICAgfSkK
KyAgICApLnRvRXF1YWwoWworICAgICAgeworICAgICAgICB0ZXh0OiAnRml4IHRoZSB0ZXN0cycs
CisgICAgICAgIGNvbXBsZXRlZDogZmFsc2UsCisgICAgICAgIGlkOiAyCisgICAgICB9LCB7Cisg
ICAgICAgIHRleHQ6ICdSdW4gdGhlIHRlc3RzJywKKyAgICAgICAgY29tcGxldGVkOiBmYWxzZSwK
KyAgICAgICAgaWQ6IDEKKyAgICAgIH0sIHsKKyAgICAgICAgdGV4dDogJ1VzZSBSZWR1eCcsCisg
ICAgICAgIGNvbXBsZXRlZDogZmFsc2UsCisgICAgICAgIGlkOiAwCisgICAgICB9CisgICAgXSkK
KyAgfSkKKworICBpdCgnc2hvdWxkIGhhbmRsZSBERUxFVEVfVE9ETycsICgpID0+IHsKKyAgICBl
eHBlY3QoCisgICAgICB0b2RvcyhbCisgICAgICAgIHsKKyAgICAgICAgICB0ZXh0OiAnUnVuIHRo
ZSB0ZXN0cycsCisgICAgICAgICAgY29tcGxldGVkOiBmYWxzZSwKKyAgICAgICAgICBpZDogMQor
ICAgICAgICB9LCB7CisgICAgICAgICAgdGV4dDogJ1VzZSBSZWR1eCcsCisgICAgICAgICAgY29t
cGxldGVkOiBmYWxzZSwKKyAgICAgICAgICBpZDogMAorICAgICAgICB9CisgICAgICBdLCB7Cisg
ICAgICAgIHR5cGU6IHR5cGVzLkRFTEVURV9UT0RPLAorICAgICAgICBpZDogMQorICAgICAgfSkK
KyAgICApLnRvRXF1YWwoWworICAgICAgeworICAgICAgICB0ZXh0OiAnVXNlIFJlZHV4JywKKyAg
ICAgICAgY29tcGxldGVkOiBmYWxzZSwKKyAgICAgICAgaWQ6IDAKKyAgICAgIH0KKyAgICBdKQor
ICB9KQorCisgIGl0KCdzaG91bGQgaGFuZGxlIEVESVRfVE9ETycsICgpID0+IHsKKyAgICBleHBl
Y3QoCisgICAgICB0b2RvcyhbCisgICAgICAgIHsKKyAgICAgICAgICB0ZXh0OiAnUnVuIHRoZSB0
ZXN0cycsCisgICAgICAgICAgY29tcGxldGVkOiBmYWxzZSwKKyAgICAgICAgICBpZDogMQorICAg
ICAgICB9LCB7CisgICAgICAgICAgdGV4dDogJ1VzZSBSZWR1eCcsCisgICAgICAgICAgY29tcGxl
dGVkOiBmYWxzZSwKKyAgICAgICAgICBpZDogMAorICAgICAgICB9CisgICAgICBdLCB7CisgICAg
ICAgIHR5cGU6IHR5cGVzLkVESVRfVE9ETywKKyAgICAgICAgdGV4dDogJ0ZpeCB0aGUgdGVzdHMn
LAorICAgICAgICBpZDogMQorICAgICAgfSkKKyAgICApLnRvRXF1YWwoWworICAgICAgeworICAg
ICAgICB0ZXh0OiAnRml4IHRoZSB0ZXN0cycsCisgICAgICAgIGNvbXBsZXRlZDogZmFsc2UsCisg
ICAgICAgIGlkOiAxCisgICAgICB9LCB7CisgICAgICAgIHRleHQ6ICdVc2UgUmVkdXgnLAorICAg
ICAgICBjb21wbGV0ZWQ6IGZhbHNlLAorICAgICAgICBpZDogMAorICAgICAgfQorICAgIF0pCisg
IH0pCisKKyAgaXQoJ3Nob3VsZCBoYW5kbGUgQ09NUExFVEVfVE9ETycsICgpID0+IHsKKyAgICBl
eHBlY3QoCisgICAgICB0b2RvcyhbCisgICAgICAgIHsKKyAgICAgICAgICB0ZXh0OiAnUnVuIHRo
ZSB0ZXN0cycsCisgICAgICAgICAgY29tcGxldGVkOiBmYWxzZSwKKyAgICAgICAgICBpZDogMQor
ICAgICAgICB9LCB7CisgICAgICAgICAgdGV4dDogJ1VzZSBSZWR1eCcsCisgICAgICAgICAgY29t
cGxldGVkOiBmYWxzZSwKKyAgICAgICAgICBpZDogMAorICAgICAgICB9CisgICAgICBdLCB7Cisg
ICAgICAgIHR5cGU6IHR5cGVzLkNPTVBMRVRFX1RPRE8sCisgICAgICAgIGlkOiAxCisgICAgICB9
KQorICAgICkudG9FcXVhbChbCisgICAgICB7CisgICAgICAgIHRleHQ6ICdSdW4gdGhlIHRlc3Rz
JywKKyAgICAgICAgY29tcGxldGVkOiB0cnVlLAorICAgICAgICBpZDogMQorICAgICAgfSwgewor
ICAgICAgICB0ZXh0OiAnVXNlIFJlZHV4JywKKyAgICAgICAgY29tcGxldGVkOiBmYWxzZSwKKyAg
ICAgICAgaWQ6IDAKKyAgICAgIH0KKyAgICBdKQorICB9KQorCisgIGl0KCdzaG91bGQgaGFuZGxl
IENPTVBMRVRFX0FMTCcsICgpID0+IHsKKyAgICBleHBlY3QoCisgICAgICB0b2RvcyhbCisgICAg
ICAgIHsKKyAgICAgICAgICB0ZXh0OiAnUnVuIHRoZSB0ZXN0cycsCisgICAgICAgICAgY29tcGxl
dGVkOiB0cnVlLAorICAgICAgICAgIGlkOiAxCisgICAgICAgIH0sIHsKKyAgICAgICAgICB0ZXh0
OiAnVXNlIFJlZHV4JywKKyAgICAgICAgICBjb21wbGV0ZWQ6IGZhbHNlLAorICAgICAgICAgIGlk
OiAwCisgICAgICAgIH0KKyAgICAgIF0sIHsKKyAgICAgICAgdHlwZTogdHlwZXMuQ09NUExFVEVf
QUxMCisgICAgICB9KQorICAgICkudG9FcXVhbChbCisgICAgICB7CisgICAgICAgIHRleHQ6ICdS
dW4gdGhlIHRlc3RzJywKKyAgICAgICAgY29tcGxldGVkOiB0cnVlLAorICAgICAgICBpZDogMQor
ICAgICAgfSwgeworICAgICAgICB0ZXh0OiAnVXNlIFJlZHV4JywKKyAgICAgICAgY29tcGxldGVk
OiB0cnVlLAorICAgICAgICBpZDogMAorICAgICAgfQorICAgIF0pCisKKyAgICAvLyBVbm1hcmsg
aWYgYWxsIHRvZG9zIGFyZSBjdXJyZW50bHkgY29tcGxldGVkCisgICAgZXhwZWN0KAorICAgICAg
dG9kb3MoWworICAgICAgICB7CisgICAgICAgICAgdGV4dDogJ1J1biB0aGUgdGVzdHMnLAorICAg
ICAgICAgIGNvbXBsZXRlZDogdHJ1ZSwKKyAgICAgICAgICBpZDogMQorICAgICAgICB9LCB7Cisg
ICAgICAgICAgdGV4dDogJ1VzZSBSZWR1eCcsCisgICAgICAgICAgY29tcGxldGVkOiB0cnVlLAor
ICAgICAgICAgIGlkOiAwCisgICAgICAgIH0KKyAgICAgIF0sIHsKKyAgICAgICAgdHlwZTogdHlw
ZXMuQ09NUExFVEVfQUxMCisgICAgICB9KQorICAgICkudG9FcXVhbChbCisgICAgICB7CisgICAg
ICAgIHRleHQ6ICdSdW4gdGhlIHRlc3RzJywKKyAgICAgICAgY29tcGxldGVkOiBmYWxzZSwKKyAg
ICAgICAgaWQ6IDEKKyAgICAgIH0sIHsKKyAgICAgICAgdGV4dDogJ1VzZSBSZWR1eCcsCisgICAg
ICAgIGNvbXBsZXRlZDogZmFsc2UsCisgICAgICAgIGlkOiAwCisgICAgICB9CisgICAgXSkKKyAg
fSkKKworICBpdCgnc2hvdWxkIGhhbmRsZSBDTEVBUl9DT01QTEVURUQnLCAoKSA9PiB7CisgICAg
ZXhwZWN0KAorICAgICAgdG9kb3MoWworICAgICAgICB7CisgICAgICAgICAgdGV4dDogJ1J1biB0
aGUgdGVzdHMnLAorICAgICAgICAgIGNvbXBsZXRlZDogdHJ1ZSwKKyAgICAgICAgICBpZDogMQor
ICAgICAgICB9LCB7CisgICAgICAgICAgdGV4dDogJ1VzZSBSZWR1eCcsCisgICAgICAgICAgY29t
cGxldGVkOiBmYWxzZSwKKyAgICAgICAgICBpZDogMAorICAgICAgICB9CisgICAgICBdLCB7Cisg
ICAgICAgIHR5cGU6IHR5cGVzLkNMRUFSX0NPTVBMRVRFRAorICAgICAgfSkKKyAgICApLnRvRXF1
YWwoWworICAgICAgeworICAgICAgICB0ZXh0OiAnVXNlIFJlZHV4JywKKyAgICAgICAgY29tcGxl
dGVkOiBmYWxzZSwKKyAgICAgICAgaWQ6IDAKKyAgICAgIH0KKyAgICBdKQorICB9KQorCisgIGl0
KCdzaG91bGQgbm90IGdlbmVyYXRlIGR1cGxpY2F0ZSBpZHMgYWZ0ZXIgQ0xFQVJfQ09NUExFVEVE
JywgKCkgPT4geworICAgIGV4cGVjdCgKKyAgICAgIFsKKyAgICAgICAgeworICAgICAgICAgIHR5
cGU6IHR5cGVzLkNPTVBMRVRFX1RPRE8sCisgICAgICAgICAgaWQ6IDAKKyAgICAgICAgfSwgewor
ICAgICAgICAgIHR5cGU6IHR5cGVzLkNMRUFSX0NPTVBMRVRFRAorICAgICAgICB9LCB7CisgICAg
ICAgICAgdHlwZTogdHlwZXMuQUREX1RPRE8sCisgICAgICAgICAgdGV4dDogJ1dyaXRlIG1vcmUg
dGVzdHMnCisgICAgICAgIH0KKyAgICAgIF0ucmVkdWNlKHRvZG9zLCBbCisgICAgICAgIHsKKyAg
ICAgICAgICBpZDogMCwKKyAgICAgICAgICBjb21wbGV0ZWQ6IGZhbHNlLAorICAgICAgICAgIHRl
eHQ6ICdVc2UgUmVkdXgnCisgICAgICAgIH0sIHsKKyAgICAgICAgICBpZDogMSwKKyAgICAgICAg
ICBjb21wbGV0ZWQ6IGZhbHNlLAorICAgICAgICAgIHRleHQ6ICdXcml0ZSB0ZXN0cycKKyAgICAg
ICAgfQorICAgICAgXSkKKyAgICApLnRvRXF1YWwoWworICAgICAgeworICAgICAgICB0ZXh0OiAn
V3JpdGUgbW9yZSB0ZXN0cycsCisgICAgICAgIGNvbXBsZXRlZDogZmFsc2UsCisgICAgICAgIGlk
OiAyCisgICAgICB9LCB7CisgICAgICAgIHRleHQ6ICdXcml0ZSB0ZXN0cycsCisgICAgICAgIGNv
bXBsZXRlZDogZmFsc2UsCisgICAgICAgIGlkOiAxCisgICAgICB9CisgICAgXSkKKyAgfSkKK30p
CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jl
c291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9SRUFETUUubWQgYi9X
ZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZj
L2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTU5NTc5
ZDViNzY5NmQwZGQ0MTg3MzUzNjgzYzQxMWNmN2ViMWQxMwotLS0gL2Rldi9udWxsCisrKyBiL1dl
YnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L1JFQURNRS5tZApAQCAtMCwwICsxLDExIEBACisj
IFNwZWVkb21ldGVyIDIuMTogUmVhY3QgVG9kb01WQyBleGFtcGxlCisKKyMjIFRlc3QgbG9jYWxs
eQorCisxLiBgbnBtIGluc3RhbGxgCisyLiBSdW4gYSBsb2NhbCBzZXJ2ZXIgZnJvbSB0aGlzIGRp
cmVjdG9yeS4gKFlvdSBjb3VsZCB1c2UgW2BucG0gaSAtZyBodHRwLXNlcnZlcmBdKGh0dHBzOi8v
Z2l0aHViLmNvbS9pbmRleHplcm8vaHR0cC1zZXJ2ZXIpLikKKzMuIE9wZW4gdGhlIFVSTCBwb2lu
dGluZyB0byB0aGUgbG9jYWwgc2VydmVyIGluIHlvdXIgd2ViIGJyb3dzZXIgb2YgY2hvaWNlLgor
CisjIyBCdWlsZAorCisxLiBgbnBtIHJ1biBidWlsZGAKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jy
b3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL3JlYWN0L2J1aWxkLm1pbi5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5v
cmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L3JlYWN0L2J1aWxkLm1pbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYzVlYWYyNDNiMmNkYTIwZjVjMTBhODM3
M2NlNjJiODc3ZTk4OTBiCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNo
Lm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvcmVhY3QvYnVpbGQubWluLmpzCkBAIC0wLDAgKzEgQEAKK3ZhciBhcHA9YXBwfHx7fTsoZnVu
Y3Rpb24oKXsidXNlIHN0cmljdCI7YXBwLkFMTF9UT0RPUz0iYWxsIjthcHAuQUNUSVZFX1RPRE9T
PSJhY3RpdmUiO2FwcC5DT01QTEVURURfVE9ET1M9ImNvbXBsZXRlZCI7YXBwLlV0aWxzPXt1dWlk
OmZ1bmN0aW9uKCl7dmFyIGkscmFuZG9tO3ZhciB1dWlkPSIiO2ZvcihpPTA7aTwzMjtpKyspe3Jh
bmRvbT1NYXRoLnJhbmRvbSgpKjE2fDA7aWYoaT09PTh8fGk9PT0xMnx8aT09PTE2fHxpPT09MjAp
e3V1aWQrPSItIn11dWlkKz0oaT09PTEyPzQ6aT09PTE2P3JhbmRvbSYzfDg6cmFuZG9tKS50b1N0
cmluZygxNil9cmV0dXJuIHV1aWR9LHBsdXJhbGl6ZTpmdW5jdGlvbihjb3VudCx3b3JkKXtyZXR1
cm4gY291bnQ9PT0xP3dvcmQ6d29yZCsicyJ9LGV4dGVuZDpmdW5jdGlvbigpe3ZhciBuZXdPYmo9
e307Zm9yKHZhciBpPTA7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl7dmFyIG9iaj1hcmd1bWVudHNb
aV07Zm9yKHZhciBrZXkgaW4gb2JqKXtpZihvYmouaGFzT3duUHJvcGVydHkoa2V5KSl7bmV3T2Jq
W2tleV09b2JqW2tleV19fX1yZXR1cm4gbmV3T2JqfX07dmFyIFV0aWxzPWFwcC5VdGlsczthcHAu
VG9kb01vZGVsPWZ1bmN0aW9uKGtleSl7dGhpcy5rZXk9a2V5O3RoaXMudG9kb3M9W107dGhpcy5v
bkNoYW5nZXM9W119O2FwcC5Ub2RvTW9kZWwucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbihv
bkNoYW5nZSl7dGhpcy5vbkNoYW5nZXMucHVzaChvbkNoYW5nZSl9O2FwcC5Ub2RvTW9kZWwucHJv
dG90eXBlLmluZm9ybT1mdW5jdGlvbigpe3RoaXMub25DaGFuZ2VzLmZvckVhY2goZnVuY3Rpb24o
Y2Ipe2NiKCl9KX07YXBwLlRvZG9Nb2RlbC5wcm90b3R5cGUuYWRkVG9kbz1mdW5jdGlvbih0aXRs
ZSl7dGhpcy50b2Rvcz10aGlzLnRvZG9zLmNvbmNhdCh7aWQ6VXRpbHMudXVpZCgpLHRpdGxlOnRp
dGxlLGNvbXBsZXRlZDpmYWxzZX0pO3RoaXMuaW5mb3JtKCl9O2FwcC5Ub2RvTW9kZWwucHJvdG90
eXBlLnRvZ2dsZUFsbD1mdW5jdGlvbihjaGVja2VkKXt0aGlzLnRvZG9zPXRoaXMudG9kb3MubWFw
KGZ1bmN0aW9uKHRvZG8pe3JldHVybiBVdGlscy5leHRlbmQoe30sdG9kbyx7Y29tcGxldGVkOmNo
ZWNrZWR9KX0pO3RoaXMuaW5mb3JtKCl9O2FwcC5Ub2RvTW9kZWwucHJvdG90eXBlLnRvZ2dsZT1m
dW5jdGlvbih0b2RvVG9Ub2dnbGUpe3RoaXMudG9kb3M9dGhpcy50b2Rvcy5tYXAoZnVuY3Rpb24o
dG9kbyl7cmV0dXJuIHRvZG8hPT10b2RvVG9Ub2dnbGU/dG9kbzpVdGlscy5leHRlbmQoe30sdG9k
byx7Y29tcGxldGVkOiF0b2RvLmNvbXBsZXRlZH0pfSk7dGhpcy5pbmZvcm0oKX07YXBwLlRvZG9N
b2RlbC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbih0b2RvKXt0aGlzLnRvZG9zPXRoaXMudG9k
b3MuZmlsdGVyKGZ1bmN0aW9uKGNhbmRpZGF0ZSl7cmV0dXJuIGNhbmRpZGF0ZSE9PXRvZG99KTt0
aGlzLmluZm9ybSgpfTthcHAuVG9kb01vZGVsLnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKHRvZG9U
b1NhdmUsdGV4dCl7dGhpcy50b2Rvcz10aGlzLnRvZG9zLm1hcChmdW5jdGlvbih0b2RvKXtyZXR1
cm4gdG9kbyE9PXRvZG9Ub1NhdmU/dG9kbzpVdGlscy5leHRlbmQoe30sdG9kbyx7dGl0bGU6dGV4
dH0pfSk7dGhpcy5pbmZvcm0oKX07YXBwLlRvZG9Nb2RlbC5wcm90b3R5cGUuY2xlYXJDb21wbGV0
ZWQ9ZnVuY3Rpb24oKXt0aGlzLnRvZG9zPXRoaXMudG9kb3MuZmlsdGVyKGZ1bmN0aW9uKHRvZG8p
e3JldHVybiF0b2RvLmNvbXBsZXRlZH0pO3RoaXMuaW5mb3JtKCl9O3ZhciBUb2RvRm9vdGVyPVJl
YWN0LmNyZWF0ZUNsYXNzKHtyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgYWN0aXZlVG9kb1dvcmQ9YXBw
LlV0aWxzLnBsdXJhbGl6ZSh0aGlzLnByb3BzLmNvdW50LCJpdGVtIik7dmFyIGNsZWFyQnV0dG9u
PW51bGw7aWYodGhpcy5wcm9wcy5jb21wbGV0ZWRDb3VudD4wKXtjbGVhckJ1dHRvbj1SZWFjdC5j
cmVhdGVFbGVtZW50KCJidXR0b24iLHtjbGFzc05hbWU6ImNsZWFyLWNvbXBsZXRlZCIsb25DbGlj
azp0aGlzLnByb3BzLm9uQ2xlYXJDb21wbGV0ZWR9LCJDbGVhciBjb21wbGV0ZWQiKX12YXIgbm93
U2hvd2luZz10aGlzLnByb3BzLm5vd1Nob3dpbmc7cmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQo
ImZvb3RlciIse2NsYXNzTmFtZToiZm9vdGVyIn0sUmVhY3QuY3JlYXRlRWxlbWVudCgic3BhbiIs
e2NsYXNzTmFtZToidG9kby1jb3VudCJ9LFJlYWN0LmNyZWF0ZUVsZW1lbnQoInN0cm9uZyIsbnVs
bCx0aGlzLnByb3BzLmNvdW50KSwiICIsYWN0aXZlVG9kb1dvcmQsIiBsZWZ0IiksUmVhY3QuY3Jl
YXRlRWxlbWVudCgidWwiLHtjbGFzc05hbWU6ImZpbHRlcnMifSxSZWFjdC5jcmVhdGVFbGVtZW50
KCJsaSIsbnVsbCxSZWFjdC5jcmVhdGVFbGVtZW50KCJhIix7aHJlZjoiIy8iLGNsYXNzTmFtZTpj
bGFzc05hbWVzKHtzZWxlY3RlZDpub3dTaG93aW5nPT09YXBwLkFMTF9UT0RPU30pfSwiQWxsIikp
LCIgIixSZWFjdC5jcmVhdGVFbGVtZW50KCJsaSIsbnVsbCxSZWFjdC5jcmVhdGVFbGVtZW50KCJh
Iix7aHJlZjoiIy9hY3RpdmUiLGNsYXNzTmFtZTpjbGFzc05hbWVzKHtzZWxlY3RlZDpub3dTaG93
aW5nPT09YXBwLkFDVElWRV9UT0RPU30pfSwiQWN0aXZlIikpLCIgIixSZWFjdC5jcmVhdGVFbGVt
ZW50KCJsaSIsbnVsbCxSZWFjdC5jcmVhdGVFbGVtZW50KCJhIix7aHJlZjoiIy9jb21wbGV0ZWQi
LGNsYXNzTmFtZTpjbGFzc05hbWVzKHtzZWxlY3RlZDpub3dTaG93aW5nPT09YXBwLkNPTVBMRVRF
RF9UT0RPU30pfSwiQ29tcGxldGVkIikpKSxjbGVhckJ1dHRvbil9fSk7dmFyIEVTQ0FQRV9LRVk9
Mjc7dmFyIEVOVEVSX0tFWT0xMzt2YXIgVG9kb0l0ZW09UmVhY3QuY3JlYXRlQ2xhc3Moe2hhbmRs
ZVN1Ym1pdDpmdW5jdGlvbihldmVudCl7dmFyIHZhbD10aGlzLnN0YXRlLmVkaXRUZXh0LnRyaW0o
KTtpZih2YWwpe3RoaXMucHJvcHMub25TYXZlKHZhbCk7dGhpcy5zZXRTdGF0ZSh7ZWRpdFRleHQ6
dmFsfSl9ZWxzZXt0aGlzLnByb3BzLm9uRGVzdHJveSgpfX0saGFuZGxlRWRpdDpmdW5jdGlvbigp
e3RoaXMucHJvcHMub25FZGl0KCk7dGhpcy5zZXRTdGF0ZSh7ZWRpdFRleHQ6dGhpcy5wcm9wcy50
b2RvLnRpdGxlfSl9LGhhbmRsZUtleURvd246ZnVuY3Rpb24oZXZlbnQpe2lmKGV2ZW50LndoaWNo
PT09RVNDQVBFX0tFWSl7dGhpcy5zZXRTdGF0ZSh7ZWRpdFRleHQ6dGhpcy5wcm9wcy50b2RvLnRp
dGxlfSk7dGhpcy5wcm9wcy5vbkNhbmNlbChldmVudCl9ZWxzZSBpZihldmVudC53aGljaD09PUVO
VEVSX0tFWSl7dGhpcy5oYW5kbGVTdWJtaXQoZXZlbnQpfX0saGFuZGxlQ2hhbmdlOmZ1bmN0aW9u
KGV2ZW50KXtpZih0aGlzLnByb3BzLmVkaXRpbmcpe3RoaXMuc2V0U3RhdGUoe2VkaXRUZXh0OmV2
ZW50LnRhcmdldC52YWx1ZX0pfX0sZ2V0SW5pdGlhbFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJue2Vk
aXRUZXh0OnRoaXMucHJvcHMudG9kby50aXRsZX19LHNob3VsZENvbXBvbmVudFVwZGF0ZTpmdW5j
dGlvbihuZXh0UHJvcHMsbmV4dFN0YXRlKXtyZXR1cm4gbmV4dFByb3BzLnRvZG8hPT10aGlzLnBy
b3BzLnRvZG98fG5leHRQcm9wcy5lZGl0aW5nIT09dGhpcy5wcm9wcy5lZGl0aW5nfHxuZXh0U3Rh
dGUuZWRpdFRleHQhPT10aGlzLnN0YXRlLmVkaXRUZXh0fSxjb21wb25lbnREaWRVcGRhdGU6ZnVu
Y3Rpb24ocHJldlByb3BzKXtpZighcHJldlByb3BzLmVkaXRpbmcmJnRoaXMucHJvcHMuZWRpdGlu
Zyl7dmFyIG5vZGU9UmVhY3QuZmluZERPTU5vZGUodGhpcy5yZWZzLmVkaXRGaWVsZCk7bm9kZS5m
b2N1cygpO25vZGUuc2V0U2VsZWN0aW9uUmFuZ2Uobm9kZS52YWx1ZS5sZW5ndGgsbm9kZS52YWx1
ZS5sZW5ndGgpfX0scmVuZGVyOmZ1bmN0aW9uKCl7cmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQo
ImxpIix7Y2xhc3NOYW1lOmNsYXNzTmFtZXMoe2NvbXBsZXRlZDp0aGlzLnByb3BzLnRvZG8uY29t
cGxldGVkLGVkaXRpbmc6dGhpcy5wcm9wcy5lZGl0aW5nfSl9LFJlYWN0LmNyZWF0ZUVsZW1lbnQo
ImRpdiIse2NsYXNzTmFtZToidmlldyJ9LFJlYWN0LmNyZWF0ZUVsZW1lbnQoImlucHV0Iix7Y2xh
c3NOYW1lOiJ0b2dnbGUiLHR5cGU6ImNoZWNrYm94IixjaGVja2VkOnRoaXMucHJvcHMudG9kby5j
b21wbGV0ZWQsb25DaGFuZ2U6dGhpcy5wcm9wcy5vblRvZ2dsZX0pLFJlYWN0LmNyZWF0ZUVsZW1l
bnQoImxhYmVsIix7b25Eb3VibGVDbGljazp0aGlzLmhhbmRsZUVkaXR9LHRoaXMucHJvcHMudG9k
by50aXRsZSksUmVhY3QuY3JlYXRlRWxlbWVudCgiYnV0dG9uIix7Y2xhc3NOYW1lOiJkZXN0cm95
IixvbkNsaWNrOnRoaXMucHJvcHMub25EZXN0cm95fSkpLFJlYWN0LmNyZWF0ZUVsZW1lbnQoImlu
cHV0Iix7cmVmOiJlZGl0RmllbGQiLGNsYXNzTmFtZToiZWRpdCIsdmFsdWU6dGhpcy5zdGF0ZS5l
ZGl0VGV4dCxvbkJsdXI6dGhpcy5oYW5kbGVTdWJtaXQsb25DaGFuZ2U6dGhpcy5oYW5kbGVDaGFu
Z2Usb25LZXlEb3duOnRoaXMuaGFuZGxlS2V5RG93bn0pKX19KTt2YXIgRU5URVJfS0VZPTEzO3Zh
ciBUb2RvQXBwPVJlYWN0LmNyZWF0ZUNsYXNzKHtnZXRJbml0aWFsU3RhdGU6ZnVuY3Rpb24oKXty
ZXR1cm57bm93U2hvd2luZzphcHAuQUxMX1RPRE9TLGVkaXRpbmc6bnVsbCxuZXdUb2RvOiIifX0s
Y29tcG9uZW50RGlkTW91bnQ6ZnVuY3Rpb24oKXt2YXIgc2V0U3RhdGU9dGhpcy5zZXRTdGF0ZTt2
YXIgcm91dGVyPVJvdXRlcih7Ii8iOnNldFN0YXRlLmJpbmQodGhpcyx7bm93U2hvd2luZzphcHAu
QUxMX1RPRE9TfSksIi9hY3RpdmUiOnNldFN0YXRlLmJpbmQodGhpcyx7bm93U2hvd2luZzphcHAu
QUNUSVZFX1RPRE9TfSksIi9jb21wbGV0ZWQiOnNldFN0YXRlLmJpbmQodGhpcyx7bm93U2hvd2lu
ZzphcHAuQ09NUExFVEVEX1RPRE9TfSl9KTtyb3V0ZXIuaW5pdCgiLyIpfSxoYW5kbGVDaGFuZ2U6
ZnVuY3Rpb24oZXZlbnQpe3RoaXMuc2V0U3RhdGUoe25ld1RvZG86ZXZlbnQudGFyZ2V0LnZhbHVl
fSl9LGhhbmRsZU5ld1RvZG9LZXlEb3duOmZ1bmN0aW9uKGV2ZW50KXtpZihldmVudC5rZXlDb2Rl
IT09RU5URVJfS0VZKXtyZXR1cm59ZXZlbnQucHJldmVudERlZmF1bHQoKTt2YXIgdmFsPXRoaXMu
c3RhdGUubmV3VG9kby50cmltKCk7aWYodmFsKXt0aGlzLnByb3BzLm1vZGVsLmFkZFRvZG8odmFs
KTt0aGlzLnNldFN0YXRlKHtuZXdUb2RvOiIifSl9fSx0b2dnbGVBbGw6ZnVuY3Rpb24oZXZlbnQp
e3ZhciBjaGVja2VkPWV2ZW50LnRhcmdldC5jaGVja2VkO3RoaXMucHJvcHMubW9kZWwudG9nZ2xl
QWxsKGNoZWNrZWQpfSx0b2dnbGU6ZnVuY3Rpb24odG9kb1RvVG9nZ2xlKXt0aGlzLnByb3BzLm1v
ZGVsLnRvZ2dsZSh0b2RvVG9Ub2dnbGUpfSxkZXN0cm95OmZ1bmN0aW9uKHRvZG8pe3RoaXMucHJv
cHMubW9kZWwuZGVzdHJveSh0b2RvKX0sZWRpdDpmdW5jdGlvbih0b2RvKXt0aGlzLnNldFN0YXRl
KHtlZGl0aW5nOnRvZG8uaWR9KX0sc2F2ZTpmdW5jdGlvbih0b2RvVG9TYXZlLHRleHQpe3RoaXMu
cHJvcHMubW9kZWwuc2F2ZSh0b2RvVG9TYXZlLHRleHQpO3RoaXMuc2V0U3RhdGUoe2VkaXRpbmc6
bnVsbH0pfSxjYW5jZWw6ZnVuY3Rpb24oKXt0aGlzLnNldFN0YXRlKHtlZGl0aW5nOm51bGx9KX0s
Y2xlYXJDb21wbGV0ZWQ6ZnVuY3Rpb24oKXt0aGlzLnByb3BzLm1vZGVsLmNsZWFyQ29tcGxldGVk
KCl9LHJlbmRlcjpmdW5jdGlvbigpe3ZhciBmb290ZXI7dmFyIG1haW47dmFyIHRvZG9zPXRoaXMu
cHJvcHMubW9kZWwudG9kb3M7dmFyIHNob3duVG9kb3M9dG9kb3MuZmlsdGVyKGZ1bmN0aW9uKHRv
ZG8pe3N3aXRjaCh0aGlzLnN0YXRlLm5vd1Nob3dpbmcpe2Nhc2UgYXBwLkFDVElWRV9UT0RPUzpy
ZXR1cm4hdG9kby5jb21wbGV0ZWQ7Y2FzZSBhcHAuQ09NUExFVEVEX1RPRE9TOnJldHVybiB0b2Rv
LmNvbXBsZXRlZDtkZWZhdWx0OnJldHVybiB0cnVlfX0sdGhpcyk7dmFyIHRvZG9JdGVtcz1zaG93
blRvZG9zLm1hcChmdW5jdGlvbih0b2RvKXtyZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUb2Rv
SXRlbSx7a2V5OnRvZG8uaWQsdG9kbzp0b2RvLG9uVG9nZ2xlOnRoaXMudG9nZ2xlLmJpbmQodGhp
cyx0b2RvKSxvbkRlc3Ryb3k6dGhpcy5kZXN0cm95LmJpbmQodGhpcyx0b2RvKSxvbkVkaXQ6dGhp
cy5lZGl0LmJpbmQodGhpcyx0b2RvKSxlZGl0aW5nOnRoaXMuc3RhdGUuZWRpdGluZz09PXRvZG8u
aWQsb25TYXZlOnRoaXMuc2F2ZS5iaW5kKHRoaXMsdG9kbyksb25DYW5jZWw6dGhpcy5jYW5jZWx9
KX0sdGhpcyk7dmFyIGFjdGl2ZVRvZG9Db3VudD10b2Rvcy5yZWR1Y2UoZnVuY3Rpb24oYWNjdW0s
dG9kbyl7cmV0dXJuIHRvZG8uY29tcGxldGVkP2FjY3VtOmFjY3VtKzF9LDApO3ZhciBjb21wbGV0
ZWRDb3VudD10b2Rvcy5sZW5ndGgtYWN0aXZlVG9kb0NvdW50O2lmKGFjdGl2ZVRvZG9Db3VudHx8
Y29tcGxldGVkQ291bnQpe2Zvb3Rlcj1SZWFjdC5jcmVhdGVFbGVtZW50KFRvZG9Gb290ZXIse2Nv
dW50OmFjdGl2ZVRvZG9Db3VudCxjb21wbGV0ZWRDb3VudDpjb21wbGV0ZWRDb3VudCxub3dTaG93
aW5nOnRoaXMuc3RhdGUubm93U2hvd2luZyxvbkNsZWFyQ29tcGxldGVkOnRoaXMuY2xlYXJDb21w
bGV0ZWR9KX1pZih0b2Rvcy5sZW5ndGgpe21haW49UmVhY3QuY3JlYXRlRWxlbWVudCgic2VjdGlv
biIse2NsYXNzTmFtZToibWFpbiJ9LFJlYWN0LmNyZWF0ZUVsZW1lbnQoImlucHV0Iix7Y2xhc3NO
YW1lOiJ0b2dnbGUtYWxsIix0eXBlOiJjaGVja2JveCIsb25DaGFuZ2U6dGhpcy50b2dnbGVBbGws
Y2hlY2tlZDphY3RpdmVUb2RvQ291bnQ9PT0wfSksUmVhY3QuY3JlYXRlRWxlbWVudCgidWwiLHtj
bGFzc05hbWU6InRvZG8tbGlzdCJ9LHRvZG9JdGVtcykpfXJldHVybiBSZWFjdC5jcmVhdGVFbGVt
ZW50KCJkaXYiLG51bGwsUmVhY3QuY3JlYXRlRWxlbWVudCgiaGVhZGVyIix7Y2xhc3NOYW1lOiJo
ZWFkZXIifSxSZWFjdC5jcmVhdGVFbGVtZW50KCJoMSIsbnVsbCwidG9kb3MiKSxSZWFjdC5jcmVh
dGVFbGVtZW50KCJpbnB1dCIse2NsYXNzTmFtZToibmV3LXRvZG8iLHBsYWNlaG9sZGVyOiJXaGF0
IG5lZWRzIHRvIGJlIGRvbmU/Iix2YWx1ZTp0aGlzLnN0YXRlLm5ld1RvZG8sb25LZXlEb3duOnRo
aXMuaGFuZGxlTmV3VG9kb0tleURvd24sb25DaGFuZ2U6dGhpcy5oYW5kbGVDaGFuZ2UsYXV0b0Zv
Y3VzOnRydWV9KSksbWFpbixmb290ZXIpfX0pO3ZhciBtb2RlbD1uZXcgYXBwLlRvZG9Nb2RlbCgi
cmVhY3QtdG9kb3MiKTtmdW5jdGlvbiByZW5kZXIoKXtSZWFjdERPTS5yZW5kZXIoUmVhY3QuY3Jl
YXRlRWxlbWVudChUb2RvQXBwLHttb2RlbDptb2RlbH0pLGRvY3VtZW50LmdldEVsZW1lbnRzQnlD
bGFzc05hbWUoInRvZG9hcHAiKVswXSl9bW9kZWwuc3Vic2NyaWJlKHJlbmRlcik7cmVuZGVyKCl9
KSgpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jy
b3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL3JlYWN0L2luZGV4Lmh0bWwgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3Jn
L1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9y
ZWFjdC9pbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJkMWMwMzY4MGVlMDk4ZDUxNzhkZGIzZDA2MDM5
ZGJjOTEzM2QwMzkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3Jn
L1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9y
ZWFjdC9pbmRleC5odG1sCkBAIC0wLDAgKzEsMjIgQEAKKzwhZG9jdHlwZSBodG1sPgorPGh0bWwg
bGFuZz0iZW4iIGRhdGEtZnJhbWV3b3JrPSJyZWFjdCI+CisgICAgPGhlYWQ+CisgICAgICAgIDxt
ZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICAgICAgPHRpdGxlPlJlYWN0IFRvZG9NVkMgZXhhbXBs
ZTwvdGl0bGU+CisgICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ibm9kZV9tb2R1
bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuY3NzIj4KKyAgICAgICAgPGxpbmsgcmVsPSJzdHlsZXNo
ZWV0IiBocmVmPSJub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL2luZGV4LmNzcyI+CisgICAg
PC9oZWFkPgorICAgIDxib2R5PgorICAgICAgICA8c2VjdGlvbiBjbGFzcz0idG9kb2FwcCI+PC9z
ZWN0aW9uPgorICAgICAgICA8Zm9vdGVyIGNsYXNzPSJpbmZvIj4KKyAgICAgICAgICAgIDxwPkRv
dWJsZS1jbGljayB0byBlZGl0IGEgdG9kbzwvcD4KKyAgICAgICAgICAgIDxwPlBhcnQgb2YgPGEg
aHJlZj0iaHR0cDovL3RvZG9tdmMuY29tIj5Ub2RvTVZDPC9hPjwvcD4KKyAgICAgICAgPC9mb290
ZXI+CisKKyAgICAgICAgPHNjcmlwdCBzcmM9Im5vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2luZGV4
LmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9Im5vZGVfbW9kdWxlcy9kaXJlY3Rv
ci9idWlsZC9kaXJlY3Rvci5taW4uanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0i
bm9kZV9tb2R1bGVzL3JlYWN0L2Rpc3QvcmVhY3Qtd2l0aC1hZGRvbnMubWluLmpzIj48L3Njcmlw
dD4KKyAgICAgICAgPHNjcmlwdCBzcmM9Im5vZGVfbW9kdWxlcy9yZWFjdC1kb20vZGlzdC9yZWFj
dC1kb20ubWluLmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9ImJ1aWxkLm1pbi5q
cyI+PC9zY3JpcHQ+CisgICAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMv
YnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvcmVhY3QvanMvYXBwLmpzeCBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5v
cmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L3JlYWN0L2pzL2FwcC5qc3gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmQ4OTVlNTEwNTg0ZmM5ZGVkMTY2YjQ0NDM5
MjY3ODNmMTUwNDJiNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5v
cmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L3JlYWN0L2pzL2FwcC5qc3gKQEAgLTAsMCArMSw0NDIgQEAKKy8qanNoaW50IHF1b3RtYXJrOmZh
bHNlICovCisvKmpzaGludCB3aGl0ZTpmYWxzZSAqLworLypqc2hpbnQgdHJhaWxpbmc6ZmFsc2Ug
Ki8KKy8qanNoaW50IG5ld2NhcDpmYWxzZSAqLworLypnbG9iYWwgUmVhY3QsIFJvdXRlciovCit2
YXIgYXBwID0gYXBwIHx8IHt9OworCisoZnVuY3Rpb24gKCkgeworCSd1c2Ugc3RyaWN0JzsKKwor
CWFwcC5BTExfVE9ET1MgPSAnYWxsJzsKKwlhcHAuQUNUSVZFX1RPRE9TID0gJ2FjdGl2ZSc7CisJ
YXBwLkNPTVBMRVRFRF9UT0RPUyA9ICdjb21wbGV0ZWQnOworCisgIGFwcC5VdGlscyA9IHsKKyAg
ICB1dWlkOiBmdW5jdGlvbiAoKSB7CisgICAgICAvKmpzaGludCBiaXR3aXNlOmZhbHNlICovCisg
ICAgICB2YXIgaSwgcmFuZG9tOworICAgICAgdmFyIHV1aWQgPSAnJzsKKworICAgICAgZm9yIChp
ID0gMDsgaSA8IDMyOyBpKyspIHsKKyAgICAgICAgcmFuZG9tID0gTWF0aC5yYW5kb20oKSAqIDE2
IHwgMDsKKyAgICAgICAgaWYgKGkgPT09IDggfHwgaSA9PT0gMTIgfHwgaSA9PT0gMTYgfHwgaSA9
PT0gMjApIHsKKyAgICAgICAgICB1dWlkICs9ICctJzsKKyAgICAgICAgfQorICAgICAgICB1dWlk
ICs9IChpID09PSAxMiA/IDQgOiAoaSA9PT0gMTYgPyAocmFuZG9tICYgMyB8IDgpIDogcmFuZG9t
KSkKKyAgICAgICAgICAudG9TdHJpbmcoMTYpOworICAgICAgfQorCisgICAgICByZXR1cm4gdXVp
ZDsKKyAgICB9LAorCisgICAgcGx1cmFsaXplOiBmdW5jdGlvbiAoY291bnQsIHdvcmQpIHsKKyAg
ICAgIHJldHVybiBjb3VudCA9PT0gMSA/IHdvcmQgOiB3b3JkICsgJ3MnOworICAgIH0sCisKKyAg
ICBleHRlbmQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciBuZXdPYmogPSB7fTsKKyAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIHZhciBv
YmogPSBhcmd1bWVudHNbaV07CisgICAgICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsKKyAgICAg
ICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHsKKyAgICAgICAgICAgIG5ld09ialtr
ZXldID0gb2JqW2tleV07CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgICBy
ZXR1cm4gbmV3T2JqOworICAgIH0KKyAgfTsKKworICB2YXIgVXRpbHMgPSBhcHAuVXRpbHM7Cisg
IC8vIEdlbmVyaWMgIm1vZGVsIiBvYmplY3QuIFlvdSBjYW4gdXNlIHdoYXRldmVyCisgIC8vIGZy
YW1ld29yayB5b3Ugd2FudC4gRm9yIHRoaXMgYXBwbGljYXRpb24gaXQKKyAgLy8gbWF5IG5vdCBl
dmVuIGJlIHdvcnRoIHNlcGFyYXRpbmcgdGhpcyBsb2dpYworICAvLyBvdXQsIGJ1dCB3ZSBkbyB0
aGlzIHRvIGRlbW9uc3RyYXRlIG9uZSB3YXkgdG8KKyAgLy8gc2VwYXJhdGUgb3V0IHBhcnRzIG9m
IHlvdXIgYXBwbGljYXRpb24uCisgIGFwcC5Ub2RvTW9kZWwgPSBmdW5jdGlvbiAoa2V5KSB7Cisg
ICAgdGhpcy5rZXkgPSBrZXk7CisgICAgdGhpcy50b2RvcyA9IFtdOworICAgIHRoaXMub25DaGFu
Z2VzID0gW107CisgIH07CisKKyAgYXBwLlRvZG9Nb2RlbC5wcm90b3R5cGUuc3Vic2NyaWJlID0g
ZnVuY3Rpb24gKG9uQ2hhbmdlKSB7CisgICAgdGhpcy5vbkNoYW5nZXMucHVzaChvbkNoYW5nZSk7
CisgIH07CisKKyAgYXBwLlRvZG9Nb2RlbC5wcm90b3R5cGUuaW5mb3JtID0gZnVuY3Rpb24gKCkg
eworICAgIHRoaXMub25DaGFuZ2VzLmZvckVhY2goZnVuY3Rpb24gKGNiKSB7IGNiKCk7IH0pOwor
ICB9OworCisgIGFwcC5Ub2RvTW9kZWwucHJvdG90eXBlLmFkZFRvZG8gPSBmdW5jdGlvbiAodGl0
bGUpIHsKKyAgICB0aGlzLnRvZG9zID0gdGhpcy50b2Rvcy5jb25jYXQoeworICAgICAgaWQ6IFV0
aWxzLnV1aWQoKSwKKyAgICAgIHRpdGxlOiB0aXRsZSwKKyAgICAgIGNvbXBsZXRlZDogZmFsc2UK
KyAgICB9KTsKKworICAgIHRoaXMuaW5mb3JtKCk7CisgIH07CisKKyAgYXBwLlRvZG9Nb2RlbC5w
cm90b3R5cGUudG9nZ2xlQWxsID0gZnVuY3Rpb24gKGNoZWNrZWQpIHsKKyAgICAvLyBOb3RlOiBp
dCdzIHVzdWFsbHkgYmV0dGVyIHRvIHVzZSBpbW11dGFibGUgZGF0YSBzdHJ1Y3R1cmVzIHNpbmNl
IHRoZXkncmUKKyAgICAvLyBlYXNpZXIgdG8gcmVhc29uIGFib3V0IGFuZCBSZWFjdCB3b3JrcyB2
ZXJ5IHdlbGwgd2l0aCB0aGVtLiBUaGF0J3Mgd2h5CisgICAgLy8gd2UgdXNlIG1hcCgpIGFuZCBm
aWx0ZXIoKSBldmVyeXdoZXJlIGluc3RlYWQgb2YgbXV0YXRpbmcgdGhlIGFycmF5IG9yCisgICAg
Ly8gdG9kbyBpdGVtcyB0aGVtc2VsdmVzLgorICAgIHRoaXMudG9kb3MgPSB0aGlzLnRvZG9zLm1h
cChmdW5jdGlvbiAodG9kbykgeworICAgICAgcmV0dXJuIFV0aWxzLmV4dGVuZCh7fSwgdG9kbywg
e2NvbXBsZXRlZDogY2hlY2tlZH0pOworICAgIH0pOworCisgICAgdGhpcy5pbmZvcm0oKTsKKyAg
fTsKKworICBhcHAuVG9kb01vZGVsLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiAodG9kb1Rv
VG9nZ2xlKSB7CisgICAgdGhpcy50b2RvcyA9IHRoaXMudG9kb3MubWFwKGZ1bmN0aW9uICh0b2Rv
KSB7CisgICAgICByZXR1cm4gdG9kbyAhPT0gdG9kb1RvVG9nZ2xlID8KKyAgICAgICAgdG9kbyA6
CisgICAgICAgIFV0aWxzLmV4dGVuZCh7fSwgdG9kbywge2NvbXBsZXRlZDogIXRvZG8uY29tcGxl
dGVkfSk7CisgICAgfSk7CisKKyAgICB0aGlzLmluZm9ybSgpOworICB9OworCisgIGFwcC5Ub2Rv
TW9kZWwucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAodG9kbykgeworICAgIHRoaXMudG9k
b3MgPSB0aGlzLnRvZG9zLmZpbHRlcihmdW5jdGlvbiAoY2FuZGlkYXRlKSB7CisgICAgICByZXR1
cm4gY2FuZGlkYXRlICE9PSB0b2RvOworICAgIH0pOworCisgICAgdGhpcy5pbmZvcm0oKTsKKyAg
fTsKKworICBhcHAuVG9kb01vZGVsLnByb3RvdHlwZS5zYXZlID0gZnVuY3Rpb24gKHRvZG9Ub1Nh
dmUsIHRleHQpIHsKKyAgICB0aGlzLnRvZG9zID0gdGhpcy50b2Rvcy5tYXAoZnVuY3Rpb24gKHRv
ZG8pIHsKKyAgICAgIHJldHVybiB0b2RvICE9PSB0b2RvVG9TYXZlID8gdG9kbyA6IFV0aWxzLmV4
dGVuZCh7fSwgdG9kbywge3RpdGxlOiB0ZXh0fSk7CisgICAgfSk7CisKKyAgICB0aGlzLmluZm9y
bSgpOworICB9OworCisgIGFwcC5Ub2RvTW9kZWwucHJvdG90eXBlLmNsZWFyQ29tcGxldGVkID0g
ZnVuY3Rpb24gKCkgeworICAgIHRoaXMudG9kb3MgPSB0aGlzLnRvZG9zLmZpbHRlcihmdW5jdGlv
biAodG9kbykgeworICAgICAgcmV0dXJuICF0b2RvLmNvbXBsZXRlZDsKKyAgICB9KTsKKworICAg
IHRoaXMuaW5mb3JtKCk7CisgIH07CisKKworICB2YXIgVG9kb0Zvb3RlciA9IFJlYWN0LmNyZWF0
ZUNsYXNzKHsKKyAgICByZW5kZXI6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciBhY3RpdmVUb2Rv
V29yZCA9IGFwcC5VdGlscy5wbHVyYWxpemUodGhpcy5wcm9wcy5jb3VudCwgJ2l0ZW0nKTsKKyAg
ICAgIHZhciBjbGVhckJ1dHRvbiA9IG51bGw7CisKKyAgICAgIGlmICh0aGlzLnByb3BzLmNvbXBs
ZXRlZENvdW50ID4gMCkgeworICAgICAgICBjbGVhckJ1dHRvbiA9ICgKKyAgICAgICAgICA8YnV0
dG9uCisgICAgICAgICAgICBjbGFzc05hbWU9ImNsZWFyLWNvbXBsZXRlZCIKKyAgICAgICAgICAg
IG9uQ2xpY2s9e3RoaXMucHJvcHMub25DbGVhckNvbXBsZXRlZH0+CisgICAgICAgICAgICBDbGVh
ciBjb21wbGV0ZWQKKyAgICAgICAgICA8L2J1dHRvbj4KKyAgICAgICAgKTsKKyAgICAgIH0KKwor
ICAgICAgdmFyIG5vd1Nob3dpbmcgPSB0aGlzLnByb3BzLm5vd1Nob3dpbmc7CisgICAgICByZXR1
cm4gKAorICAgICAgICA8Zm9vdGVyIGNsYXNzTmFtZT0iZm9vdGVyIj4KKyAgICAgICAgICA8c3Bh
biBjbGFzc05hbWU9InRvZG8tY291bnQiPgorICAgICAgICAgICAgPHN0cm9uZz57dGhpcy5wcm9w
cy5jb3VudH08L3N0cm9uZz4ge2FjdGl2ZVRvZG9Xb3JkfSBsZWZ0CisgICAgICAgICAgPC9zcGFu
PgorICAgICAgICAgIDx1bCBjbGFzc05hbWU9ImZpbHRlcnMiPgorICAgICAgICAgICAgPGxpPgor
ICAgICAgICAgICAgICA8YQorICAgICAgICAgICAgICAgIGhyZWY9IiMvIgorICAgICAgICAgICAg
ICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyh7c2VsZWN0ZWQ6IG5vd1Nob3dpbmcgPT09IGFwcC5B
TExfVE9ET1N9KX0+CisgICAgICAgICAgICAgICAgICBBbGwKKyAgICAgICAgICAgICAgPC9hPgor
ICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgIHsnICd9CisgICAgICAgICAgICA8bGk+Cisg
ICAgICAgICAgICAgIDxhCisgICAgICAgICAgICAgICAgaHJlZj0iIy9hY3RpdmUiCisgICAgICAg
ICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHtzZWxlY3RlZDogbm93U2hvd2luZyA9PT0g
YXBwLkFDVElWRV9UT0RPU30pfT4KKyAgICAgICAgICAgICAgICAgIEFjdGl2ZQorICAgICAgICAg
ICAgICA8L2E+CisgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgeycgJ30KKyAgICAgICAg
ICAgIDxsaT4KKyAgICAgICAgICAgICAgPGEKKyAgICAgICAgICAgICAgICBocmVmPSIjL2NvbXBs
ZXRlZCIKKyAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoe3NlbGVjdGVkOiBu
b3dTaG93aW5nID09PSBhcHAuQ09NUExFVEVEX1RPRE9TfSl9PgorICAgICAgICAgICAgICAgICAg
Q29tcGxldGVkCisgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgIDwvbGk+CisgICAgICAg
ICAgPC91bD4KKyAgICAgICAgICB7Y2xlYXJCdXR0b259CisgICAgICAgIDwvZm9vdGVyPgorICAg
ICAgKTsKKyAgICB9CisgIH0pOworCisgIHZhciBFU0NBUEVfS0VZID0gMjc7CisgIHZhciBFTlRF
Ul9LRVkgPSAxMzsKKworICB2YXIgVG9kb0l0ZW0gPSBSZWFjdC5jcmVhdGVDbGFzcyh7CisgICAg
aGFuZGxlU3VibWl0OiBmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgIHZhciB2YWwgPSB0aGlzLnN0
YXRlLmVkaXRUZXh0LnRyaW0oKTsKKyAgICAgIGlmICh2YWwpIHsKKyAgICAgICAgdGhpcy5wcm9w
cy5vblNhdmUodmFsKTsKKyAgICAgICAgdGhpcy5zZXRTdGF0ZSh7ZWRpdFRleHQ6IHZhbH0pOwor
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgdGhpcy5wcm9wcy5vbkRlc3Ryb3koKTsKKyAgICAgIH0K
KyAgICB9LAorCisgICAgaGFuZGxlRWRpdDogZnVuY3Rpb24gKCkgeworICAgICAgdGhpcy5wcm9w
cy5vbkVkaXQoKTsKKyAgICAgIHRoaXMuc2V0U3RhdGUoe2VkaXRUZXh0OiB0aGlzLnByb3BzLnRv
ZG8udGl0bGV9KTsKKyAgICB9LAorCisgICAgaGFuZGxlS2V5RG93bjogZnVuY3Rpb24gKGV2ZW50
KSB7CisgICAgICBpZiAoZXZlbnQud2hpY2ggPT09IEVTQ0FQRV9LRVkpIHsKKyAgICAgICAgdGhp
cy5zZXRTdGF0ZSh7ZWRpdFRleHQ6IHRoaXMucHJvcHMudG9kby50aXRsZX0pOworICAgICAgICB0
aGlzLnByb3BzLm9uQ2FuY2VsKGV2ZW50KTsKKyAgICAgIH0gZWxzZSBpZiAoZXZlbnQud2hpY2gg
PT09IEVOVEVSX0tFWSkgeworICAgICAgICB0aGlzLmhhbmRsZVN1Ym1pdChldmVudCk7CisgICAg
ICB9CisgICAgfSwKKworICAgIGhhbmRsZUNoYW5nZTogZnVuY3Rpb24gKGV2ZW50KSB7CisgICAg
ICBpZiAodGhpcy5wcm9wcy5lZGl0aW5nKSB7CisgICAgICAgIHRoaXMuc2V0U3RhdGUoe2VkaXRU
ZXh0OiBldmVudC50YXJnZXQudmFsdWV9KTsKKyAgICAgIH0KKyAgICB9LAorCisgICAgZ2V0SW5p
dGlhbFN0YXRlOiBmdW5jdGlvbiAoKSB7CisgICAgICByZXR1cm4ge2VkaXRUZXh0OiB0aGlzLnBy
b3BzLnRvZG8udGl0bGV9OworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBUaGlzIGlzIGEgY29t
cGxldGVseSBvcHRpb25hbCBwZXJmb3JtYW5jZSBlbmhhbmNlbWVudCB0aGF0IHlvdSBjYW4KKyAg
ICAgKiBpbXBsZW1lbnQgb24gYW55IFJlYWN0IGNvbXBvbmVudC4gSWYgeW91IHdlcmUgdG8gZGVs
ZXRlIHRoaXMgbWV0aG9kCisgICAgICogdGhlIGFwcCB3b3VsZCBzdGlsbCB3b3JrIGNvcnJlY3Rs
eSAoYW5kIHN0aWxsIGJlIHZlcnkgcGVyZm9ybWFudCEpLCB3ZQorICAgICAqIGp1c3QgdXNlIGl0
IGFzIGFuIGV4YW1wbGUgb2YgaG93IGxpdHRsZSBjb2RlIGl0IHRha2VzIHRvIGdldCBhbiBvcmRl
cgorICAgICAqIG9mIG1hZ25pdHVkZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudC4KKyAgICAgKi8K
KyAgICBzaG91bGRDb21wb25lbnRVcGRhdGU6IGZ1bmN0aW9uIChuZXh0UHJvcHMsIG5leHRTdGF0
ZSkgeworICAgICAgcmV0dXJuICgKKyAgICAgICAgbmV4dFByb3BzLnRvZG8gIT09IHRoaXMucHJv
cHMudG9kbyB8fAorICAgICAgICBuZXh0UHJvcHMuZWRpdGluZyAhPT0gdGhpcy5wcm9wcy5lZGl0
aW5nIHx8CisgICAgICAgIG5leHRTdGF0ZS5lZGl0VGV4dCAhPT0gdGhpcy5zdGF0ZS5lZGl0VGV4
dAorICAgICAgKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogU2FmZWx5IG1hbmlwdWxhdGUg
dGhlIERPTSBhZnRlciB1cGRhdGluZyB0aGUgc3RhdGUgd2hlbiBpbnZva2luZworICAgICAqIGB0
aGlzLnByb3BzLm9uRWRpdCgpYCBpbiB0aGUgYGhhbmRsZUVkaXRgIG1ldGhvZCBhYm92ZS4KKyAg
ICAgKiBGb3IgbW9yZSBpbmZvIHJlZmVyIHRvIG5vdGVzIGF0IGh0dHBzOi8vZmFjZWJvb2suZ2l0
aHViLmlvL3JlYWN0L2RvY3MvY29tcG9uZW50LWFwaS5odG1sI3NldHN0YXRlCisgICAgICogYW5k
IGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvY29tcG9uZW50LXNwZWNzLmh0
bWwjdXBkYXRpbmctY29tcG9uZW50ZGlkdXBkYXRlCisgICAgICovCisgICAgY29tcG9uZW50RGlk
VXBkYXRlOiBmdW5jdGlvbiAocHJldlByb3BzKSB7CisgICAgICBpZiAoIXByZXZQcm9wcy5lZGl0
aW5nICYmIHRoaXMucHJvcHMuZWRpdGluZykgeworICAgICAgICB2YXIgbm9kZSA9IFJlYWN0LmZp
bmRET01Ob2RlKHRoaXMucmVmcy5lZGl0RmllbGQpOworICAgICAgICBub2RlLmZvY3VzKCk7Cisg
ICAgICAgIG5vZGUuc2V0U2VsZWN0aW9uUmFuZ2Uobm9kZS52YWx1ZS5sZW5ndGgsIG5vZGUudmFs
dWUubGVuZ3RoKTsKKyAgICAgIH0KKyAgICB9LAorCisgICAgcmVuZGVyOiBmdW5jdGlvbiAoKSB7
CisgICAgICByZXR1cm4gKAorICAgICAgICA8bGkgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHsKKyAg
ICAgICAgICBjb21wbGV0ZWQ6IHRoaXMucHJvcHMudG9kby5jb21wbGV0ZWQsCisgICAgICAgICAg
ZWRpdGluZzogdGhpcy5wcm9wcy5lZGl0aW5nCisgICAgICAgIH0pfT4KKyAgICAgICAgICA8ZGl2
IGNsYXNzTmFtZT0idmlldyI+CisgICAgICAgICAgICA8aW5wdXQKKyAgICAgICAgICAgICAgY2xh
c3NOYW1lPSJ0b2dnbGUiCisgICAgICAgICAgICAgIHR5cGU9ImNoZWNrYm94IgorICAgICAgICAg
ICAgICBjaGVja2VkPXt0aGlzLnByb3BzLnRvZG8uY29tcGxldGVkfQorICAgICAgICAgICAgICBv
bkNoYW5nZT17dGhpcy5wcm9wcy5vblRvZ2dsZX0KKyAgICAgICAgICAgIC8+CisgICAgICAgICAg
ICA8bGFiZWwgb25Eb3VibGVDbGljaz17dGhpcy5oYW5kbGVFZGl0fT4KKyAgICAgICAgICAgICAg
e3RoaXMucHJvcHMudG9kby50aXRsZX0KKyAgICAgICAgICAgIDwvbGFiZWw+CisgICAgICAgICAg
ICA8YnV0dG9uIGNsYXNzTmFtZT0iZGVzdHJveSIgb25DbGljaz17dGhpcy5wcm9wcy5vbkRlc3Ry
b3l9IC8+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPGlucHV0CisgICAgICAgICAgICBy
ZWY9ImVkaXRGaWVsZCIKKyAgICAgICAgICAgIGNsYXNzTmFtZT0iZWRpdCIKKyAgICAgICAgICAg
IHZhbHVlPXt0aGlzLnN0YXRlLmVkaXRUZXh0fQorICAgICAgICAgICAgb25CbHVyPXt0aGlzLmhh
bmRsZVN1Ym1pdH0KKyAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX0KKyAg
ICAgICAgICAgIG9uS2V5RG93bj17dGhpcy5oYW5kbGVLZXlEb3dufQorICAgICAgICAgIC8+Cisg
ICAgICAgIDwvbGk+CisgICAgICApOworICAgIH0KKyAgfSk7CisKKwl2YXIgRU5URVJfS0VZID0g
MTM7CisKKwl2YXIgVG9kb0FwcCA9IFJlYWN0LmNyZWF0ZUNsYXNzKHsKKwkJZ2V0SW5pdGlhbFN0
YXRlOiBmdW5jdGlvbiAoKSB7CisJCQlyZXR1cm4geworCQkJCW5vd1Nob3dpbmc6IGFwcC5BTExf
VE9ET1MsCisJCQkJZWRpdGluZzogbnVsbCwKKwkJCQluZXdUb2RvOiAnJworCQkJfTsKKwkJfSwK
KworCQljb21wb25lbnREaWRNb3VudDogZnVuY3Rpb24gKCkgeworCQkJdmFyIHNldFN0YXRlID0g
dGhpcy5zZXRTdGF0ZTsKKwkJCXZhciByb3V0ZXIgPSBSb3V0ZXIoeworCQkJCScvJzogc2V0U3Rh
dGUuYmluZCh0aGlzLCB7bm93U2hvd2luZzogYXBwLkFMTF9UT0RPU30pLAorCQkJCScvYWN0aXZl
Jzogc2V0U3RhdGUuYmluZCh0aGlzLCB7bm93U2hvd2luZzogYXBwLkFDVElWRV9UT0RPU30pLAor
CQkJCScvY29tcGxldGVkJzogc2V0U3RhdGUuYmluZCh0aGlzLCB7bm93U2hvd2luZzogYXBwLkNP
TVBMRVRFRF9UT0RPU30pCisJCQl9KTsKKwkJCXJvdXRlci5pbml0KCcvJyk7CisJCX0sCisKKwkJ
aGFuZGxlQ2hhbmdlOiBmdW5jdGlvbiAoZXZlbnQpIHsKKwkJCXRoaXMuc2V0U3RhdGUoe25ld1Rv
ZG86IGV2ZW50LnRhcmdldC52YWx1ZX0pOworCQl9LAorCisJCWhhbmRsZU5ld1RvZG9LZXlEb3du
OiBmdW5jdGlvbiAoZXZlbnQpIHsKKwkJCWlmIChldmVudC5rZXlDb2RlICE9PSBFTlRFUl9LRVkp
IHsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJCWV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisKKwkJ
CXZhciB2YWwgPSB0aGlzLnN0YXRlLm5ld1RvZG8udHJpbSgpOworCisJCQlpZiAodmFsKSB7CisJ
CQkJdGhpcy5wcm9wcy5tb2RlbC5hZGRUb2RvKHZhbCk7CisJCQkJdGhpcy5zZXRTdGF0ZSh7bmV3
VG9kbzogJyd9KTsKKwkJCX0KKwkJfSwKKworCQl0b2dnbGVBbGw6IGZ1bmN0aW9uIChldmVudCkg
eworCQkJdmFyIGNoZWNrZWQgPSBldmVudC50YXJnZXQuY2hlY2tlZDsKKwkJCXRoaXMucHJvcHMu
bW9kZWwudG9nZ2xlQWxsKGNoZWNrZWQpOworCQl9LAorCisJCXRvZ2dsZTogZnVuY3Rpb24gKHRv
ZG9Ub1RvZ2dsZSkgeworCQkJdGhpcy5wcm9wcy5tb2RlbC50b2dnbGUodG9kb1RvVG9nZ2xlKTsK
KwkJfSwKKworCQlkZXN0cm95OiBmdW5jdGlvbiAodG9kbykgeworCQkJdGhpcy5wcm9wcy5tb2Rl
bC5kZXN0cm95KHRvZG8pOworCQl9LAorCisJCWVkaXQ6IGZ1bmN0aW9uICh0b2RvKSB7CisJCQl0
aGlzLnNldFN0YXRlKHtlZGl0aW5nOiB0b2RvLmlkfSk7CisJCX0sCisKKwkJc2F2ZTogZnVuY3Rp
b24gKHRvZG9Ub1NhdmUsIHRleHQpIHsKKwkJCXRoaXMucHJvcHMubW9kZWwuc2F2ZSh0b2RvVG9T
YXZlLCB0ZXh0KTsKKwkJCXRoaXMuc2V0U3RhdGUoe2VkaXRpbmc6IG51bGx9KTsKKwkJfSwKKwor
CQljYW5jZWw6IGZ1bmN0aW9uICgpIHsKKwkJCXRoaXMuc2V0U3RhdGUoe2VkaXRpbmc6IG51bGx9
KTsKKwkJfSwKKworCQljbGVhckNvbXBsZXRlZDogZnVuY3Rpb24gKCkgeworCQkJdGhpcy5wcm9w
cy5tb2RlbC5jbGVhckNvbXBsZXRlZCgpOworCQl9LAorCisJCXJlbmRlcjogZnVuY3Rpb24gKCkg
eworCQkJdmFyIGZvb3RlcjsKKwkJCXZhciBtYWluOworCQkJdmFyIHRvZG9zID0gdGhpcy5wcm9w
cy5tb2RlbC50b2RvczsKKworCQkJdmFyIHNob3duVG9kb3MgPSB0b2Rvcy5maWx0ZXIoZnVuY3Rp
b24gKHRvZG8pIHsKKwkJCQlzd2l0Y2ggKHRoaXMuc3RhdGUubm93U2hvd2luZykgeworCQkJCWNh
c2UgYXBwLkFDVElWRV9UT0RPUzoKKwkJCQkJcmV0dXJuICF0b2RvLmNvbXBsZXRlZDsKKwkJCQlj
YXNlIGFwcC5DT01QTEVURURfVE9ET1M6CisJCQkJCXJldHVybiB0b2RvLmNvbXBsZXRlZDsKKwkJ
CQlkZWZhdWx0OgorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQl9CisJCQl9LCB0aGlzKTsKKworCQkJ
dmFyIHRvZG9JdGVtcyA9IHNob3duVG9kb3MubWFwKGZ1bmN0aW9uICh0b2RvKSB7CisJCQkJcmV0
dXJuICgKKwkJCQkJPFRvZG9JdGVtCisJCQkJCQlrZXk9e3RvZG8uaWR9CisJCQkJCQl0b2RvPXt0
b2RvfQorCQkJCQkJb25Ub2dnbGU9e3RoaXMudG9nZ2xlLmJpbmQodGhpcywgdG9kbyl9CisJCQkJ
CQlvbkRlc3Ryb3k9e3RoaXMuZGVzdHJveS5iaW5kKHRoaXMsIHRvZG8pfQorCQkJCQkJb25FZGl0
PXt0aGlzLmVkaXQuYmluZCh0aGlzLCB0b2RvKX0KKwkJCQkJCWVkaXRpbmc9e3RoaXMuc3RhdGUu
ZWRpdGluZyA9PT0gdG9kby5pZH0KKwkJCQkJCW9uU2F2ZT17dGhpcy5zYXZlLmJpbmQodGhpcywg
dG9kbyl9CisJCQkJCQlvbkNhbmNlbD17dGhpcy5jYW5jZWx9CisJCQkJCS8+CisJCQkJKTsKKwkJ
CX0sIHRoaXMpOworCisJCQl2YXIgYWN0aXZlVG9kb0NvdW50ID0gdG9kb3MucmVkdWNlKGZ1bmN0
aW9uIChhY2N1bSwgdG9kbykgeworCQkJCXJldHVybiB0b2RvLmNvbXBsZXRlZCA/IGFjY3VtIDog
YWNjdW0gKyAxOworCQkJfSwgMCk7CisKKwkJCXZhciBjb21wbGV0ZWRDb3VudCA9IHRvZG9zLmxl
bmd0aCAtIGFjdGl2ZVRvZG9Db3VudDsKKworCQkJaWYgKGFjdGl2ZVRvZG9Db3VudCB8fCBjb21w
bGV0ZWRDb3VudCkgeworCQkJCWZvb3RlciA9CisJCQkJCTxUb2RvRm9vdGVyCisJCQkJCQljb3Vu
dD17YWN0aXZlVG9kb0NvdW50fQorCQkJCQkJY29tcGxldGVkQ291bnQ9e2NvbXBsZXRlZENvdW50
fQorCQkJCQkJbm93U2hvd2luZz17dGhpcy5zdGF0ZS5ub3dTaG93aW5nfQorCQkJCQkJb25DbGVh
ckNvbXBsZXRlZD17dGhpcy5jbGVhckNvbXBsZXRlZH0KKwkJCQkJLz47CisJCQl9CisKKwkJCWlm
ICh0b2Rvcy5sZW5ndGgpIHsKKwkJCQltYWluID0gKAorCQkJCQk8c2VjdGlvbiBjbGFzc05hbWU9
Im1haW4iPgorCQkJCQkJPGlucHV0CisJCQkJCQkJY2xhc3NOYW1lPSJ0b2dnbGUtYWxsIgorCQkJ
CQkJCXR5cGU9ImNoZWNrYm94IgorCQkJCQkJCW9uQ2hhbmdlPXt0aGlzLnRvZ2dsZUFsbH0KKwkJ
CQkJCQljaGVja2VkPXthY3RpdmVUb2RvQ291bnQgPT09IDB9CisJCQkJCQkvPgorCQkJCQkJPHVs
IGNsYXNzTmFtZT0idG9kby1saXN0Ij4KKwkJCQkJCQl7dG9kb0l0ZW1zfQorCQkJCQkJPC91bD4K
KwkJCQkJPC9zZWN0aW9uPgorCQkJCSk7CisJCQl9CisKKwkJCXJldHVybiAoCisJCQkJPGRpdj4K
KwkJCQkJPGhlYWRlciBjbGFzc05hbWU9ImhlYWRlciI+CisJCQkJCQk8aDE+dG9kb3M8L2gxPgor
CQkJCQkJPGlucHV0CisJCQkJCQkJY2xhc3NOYW1lPSJuZXctdG9kbyIKKwkJCQkJCQlwbGFjZWhv
bGRlcj0iV2hhdCBuZWVkcyB0byBiZSBkb25lPyIKKwkJCQkJCQl2YWx1ZT17dGhpcy5zdGF0ZS5u
ZXdUb2RvfQorCQkJCQkJCW9uS2V5RG93bj17dGhpcy5oYW5kbGVOZXdUb2RvS2V5RG93bn0KKwkJ
CQkJCQlvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9CisJCQkJCQkJYXV0b0ZvY3VzPXt0cnVl
fQorCQkJCQkJLz4KKwkJCQkJPC9oZWFkZXI+CisJCQkJCXttYWlufQorCQkJCQl7Zm9vdGVyfQor
CQkJCTwvZGl2PgorCQkJKTsKKwkJfQorCX0pOworCisJdmFyIG1vZGVsID0gbmV3IGFwcC5Ub2Rv
TW9kZWwoJ3JlYWN0LXRvZG9zJyk7CisKKwlmdW5jdGlvbiByZW5kZXIoKSB7CisJCVJlYWN0RE9N
LnJlbmRlcigKKwkJCTxUb2RvQXBwIG1vZGVsPXttb2RlbH0vPiwKKwkJCWRvY3VtZW50LmdldEVs
ZW1lbnRzQnlDbGFzc05hbWUoJ3RvZG9hcHAnKVswXQorCQkpOworCX0KKworCW1vZGVsLnN1YnNj
cmliZShyZW5kZXIpOworCXJlbmRlcigpOworfSkoKTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jy
b3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL3JlYWN0L2xpY2Vuc2UubWQgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3Jn
L1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9y
ZWFjdC9saWNlbnNlLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZiZmEyZTM4OWVkOGNjZDg3YjNkNTlkMjI2MWE3
YWQ2MzU0ZmMzNzQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3Jn
L1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9y
ZWFjdC9saWNlbnNlLm1kCkBAIC0wLDAgKzEsMjAgQEAKK0V2ZXJ5dGhpbmcgaW4gdGhpcyByZXBv
IGlzIE1JVCBMaWNlbnNlIHVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkLgorCitDb3B5cmlnaHQg
KGMpIEFkZHkgT3NtYW5pLCBTaW5kcmUgU29yaHVzLCBQYXNjYWwgSGFydGlnLCBTdGVwaGVuIFNh
d2NodWsuCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0
byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YKK3RoaXMgc29mdHdhcmUgYW5kIGFzc29j
aWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluCit0
aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRh
dGlvbiB0aGUgcmlnaHRzIHRvCit1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRp
c3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZgordGhlIFNvZnR3YXJl
LCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVk
IHRvIGRvIHNvLAorc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBh
Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJl
IGluY2x1ZGVkIGluIGFsbAorY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBT
b2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FS
UkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9U
IExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTCitG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIEFVVEhPUlMgT1IKK0NPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5Z
IENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUgorSU4gQU4gQUNUSU9O
IE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1Ig
SU4KK0NPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFM
SU5HUyBJTiBUSEUgU09GVFdBUkUuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0t
Z2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvdnVlanMtY2xpLy5iYWJlbHJjIGIvV2Vic2l0
ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvdnVlanMtY2xpLy5iYWJlbHJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQxNzg5Y2Fj
ZDlmOGYxMzk1MGM0M2EwMmJlNDYxOTljN2E0MTIyOTAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJz
aXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy92dWVqcy1jbGkvLmJhYmVscmMKQEAgLTAsMCArMSw1IEBACit7
CisgICJwcmVzZXRzIjogWyJlczIwMTUiLCAic3RhZ2UtMiJdLAorICAicGx1Z2lucyI6IFsidHJh
bnNmb3JtLXJ1bnRpbWUiXSwKKyAgImNvbW1lbnRzIjogZmFsc2UKK30KZGlmZiAtLWdpdCBhL1dl
YnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3Z1ZWpzLWNsaS8uZXNsaW50aWdub3JlIGIvV2Vic2l0ZXMv
YnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvdnVlanMtY2xpLy5lc2xpbnRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzRhZjM3
NzRmMzEyN2QwNTRkMzBhYzU0NTJmOGFmYzA4Y2RkMDI5MQotLS0gL2Rldi9udWxsCisrKyBiL1dl
YnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3Z1ZWpzLWNsaS8uZXNsaW50aWdub3JlCkBAIC0wLDAgKzEs
MiBAQAorYnVpbGQvKi5qcworY29uZmlnLyouanMKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dz
ZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL3Z1ZWpzLWNsaS8uZXNsaW50cmMuanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gu
b3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy92dWVqcy1jbGkvLmVzbGludHJjLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM2NmVkOGM3ZGVjNzBlYzE5ZjYx
ZDUzZjc2NzQ0M2RlNTA4OGMxZTAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2Vy
YmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy92dWVqcy1jbGkvLmVzbGludHJjLmpzCkBAIC0wLDAgKzEsMTYgQEAKK21vZHVsZS5l
eHBvcnRzID0geworICByb290OiB0cnVlLAorICBwYXJzZXI6ICdiYWJlbC1lc2xpbnQnLAorICBw
YXJzZXJPcHRpb25zOiB7CisgICAgc291cmNlVHlwZTogJ21vZHVsZScKKyAgfSwKKyAgLy8gcmVx
dWlyZWQgdG8gbGludCAqLnZ1ZSBmaWxlcworICBwbHVnaW5zOiBbCisgICAgJ2h0bWwnCisgIF0s
CisgIC8vIGFkZCB5b3VyIGN1c3RvbSBydWxlcyBoZXJlCisgICdydWxlcyc6IHsKKyAgICAvLyBh
bGxvdyBkZWJ1Z2dlciBkdXJpbmcgZGV2ZWxvcG1lbnQKKyAgICAnbm8tZGVidWdnZXInOiBwcm9j
ZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nID8gMiA6IDAKKyAgfQorfQpkaWZmIC0t
Z2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvdnVlanMtY2xpL1JFQURNRS5tZCBiL1dlYnNp
dGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL3Z1ZWpzLWNsaS9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGIwNDA5
NTBmZjljYmVjZjA0MzIzMmQzZjg3ZjIzZjY4ZWQ3ZDllNgotLS0gL2Rldi9udWxsCisrKyBiL1dl
YnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3Z1ZWpzLWNsaS9SRUFETUUubWQKQEAgLTAsMCArMSwxMSBA
QAorIyBTcGVlZG9tZXRlciAyLjE6IFZ1ZS5qcyBUb2RvTVZDIGV4YW1wbGUKKworIyMgVGVzdCBs
b2NhbGx5CisKKzEuIGBucG0gaW5zdGFsbGAKKzIuIGBucG0gcnVuIGRldmAgcnVucyB0aGUgYXBw
IGluIGRldmVsb3BtZW50IG1vZGUKKzMuIE9wZW4gPGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8+IHRv
IHZpZXcgaXQgaW4gdGhlIGJyb3dzZXIuCisKKyMjIEJ1aWxkCisKKzEuIGBucG0gcnVuIGJ1aWxk
YApkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9y
ZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvdnVlanMtY2xpL2J1aWxkL2J1
aWxkLmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvdnVlanMtY2xpL2J1aWxkL2J1aWxkLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmE2NDUwMTE2MTIzN2E4ODQzYmZiZmViNmE2MDhmNDk0Mzk4NTI5NzcKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4x
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy92dWVqcy1jbGkvYnVpbGQv
YnVpbGQuanMKQEAgLTAsMCArMSw0MCBAQAorcmVxdWlyZSgnLi9jaGVjay12ZXJzaW9ucycpKCkK
KworcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPSAncHJvZHVjdGlvbicKKwordmFyIG9yYSA9IHJlcXVp
cmUoJ29yYScpCit2YXIgcm0gPSByZXF1aXJlKCdyaW1yYWYnKQordmFyIHBhdGggPSByZXF1aXJl
KCdwYXRoJykKK3ZhciBjaGFsayA9IHJlcXVpcmUoJ2NoYWxrJykKK3ZhciB3ZWJwYWNrID0gcmVx
dWlyZSgnd2VicGFjaycpCit2YXIgY29uZmlnID0gcmVxdWlyZSgnLi4vY29uZmlnJykKK3ZhciB3
ZWJwYWNrQ29uZmlnID0gcmVxdWlyZSgnLi93ZWJwYWNrLnByb2QuY29uZicpCisKK3ZhciBzcGlu
bmVyID0gb3JhKCdidWlsZGluZyBmb3IgcHJvZHVjdGlvbi4uLicpCitzcGlubmVyLnN0YXJ0KCkK
Kworcm0ocGF0aC5qb2luKGNvbmZpZy5idWlsZC5hc3NldHNSb290LCBjb25maWcuYnVpbGQuYXNz
ZXRzU3ViRGlyZWN0b3J5KSwgZXJyID0+IHsKKyAgaWYgKGVycikgdGhyb3cgZXJyCisgIHdlYnBh
Y2sod2VicGFja0NvbmZpZywgZnVuY3Rpb24gKGVyciwgc3RhdHMpIHsKKyAgICBzcGlubmVyLnN0
b3AoKQorICAgIGlmIChlcnIpIHRocm93IGVycgorICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKHN0
YXRzLnRvU3RyaW5nKHsKKyAgICAgIGNvbG9yczogdHJ1ZSwKKyAgICAgIG1vZHVsZXM6IGZhbHNl
LAorICAgICAgY2hpbGRyZW46IGZhbHNlLAorICAgICAgY2h1bmtzOiBmYWxzZSwKKyAgICAgIGNo
dW5rTW9kdWxlczogZmFsc2UKKyAgICB9KSArICdcblxuJykKKworICAgIGlmIChzdGF0cy5oYXNF
cnJvcnMoKSkgeworICAgICAgY29uc29sZS5sb2coY2hhbGsucmVkKCcgIEJ1aWxkIGZhaWxlZCB3
aXRoIGVycm9ycy5cbicpKQorICAgICAgcHJvY2Vzcy5leGl0KDEpCisgICAgfQorCisgICAgY29u
c29sZS5sb2coY2hhbGsuY3lhbignICBCdWlsZCBjb21wbGV0ZS5cbicpKQorICAgIGNvbnNvbGUu
bG9nKGNoYWxrLnllbGxvdygKKyAgICAgICcgIFRpcDogYnVpbHQgZmlsZXMgYXJlIG1lYW50IHRv
IGJlIHNlcnZlZCBvdmVyIGFuIEhUVFAgc2VydmVyLlxuJyArCisgICAgICAnICBPcGVuaW5nIGlu
ZGV4Lmh0bWwgb3ZlciBmaWxlOi8vIHdvblwndCB3b3JrLlxuJworICAgICkpCisgIH0pCit9KQpk
aWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvdnVlanMtY2xpL2J1aWxkL2NoZWNr
LXZlcnNpb25zLmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9y
ZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvdnVlanMtY2xpL2J1aWxkL2No
ZWNrLXZlcnNpb25zLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIzZTdlMTdlMzQwNTMyY2RiNDI3M2I1ZDM5ZThl
MjQzYTQ5ODRlMjcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3Jn
L1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy92
dWVqcy1jbGkvYnVpbGQvY2hlY2stdmVyc2lvbnMuanMKQEAgLTAsMCArMSw0OCBAQAordmFyIGNo
YWxrID0gcmVxdWlyZSgnY2hhbGsnKQordmFyIHNlbXZlciA9IHJlcXVpcmUoJ3NlbXZlcicpCit2
YXIgcGFja2FnZUNvbmZpZyA9IHJlcXVpcmUoJy4uL3BhY2thZ2UuanNvbicpCit2YXIgc2hlbGwg
PSByZXF1aXJlKCdzaGVsbGpzJykKK2Z1bmN0aW9uIGV4ZWMgKGNtZCkgeworICByZXR1cm4gcmVx
dWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNTeW5jKGNtZCkudG9TdHJpbmcoKS50cmltKCkKK30K
KwordmFyIHZlcnNpb25SZXF1aXJlbWVudHMgPSBbCisgIHsKKyAgICBuYW1lOiAnbm9kZScsCisg
ICAgY3VycmVudFZlcnNpb246IHNlbXZlci5jbGVhbihwcm9jZXNzLnZlcnNpb24pLAorICAgIHZl
cnNpb25SZXF1aXJlbWVudDogcGFja2FnZUNvbmZpZy5lbmdpbmVzLm5vZGUKKyAgfQorXQorCitp
ZiAoc2hlbGwud2hpY2goJ25wbScpKSB7CisgIHZlcnNpb25SZXF1aXJlbWVudHMucHVzaCh7Cisg
ICAgbmFtZTogJ25wbScsCisgICAgY3VycmVudFZlcnNpb246IGV4ZWMoJ25wbSAtLXZlcnNpb24n
KSwKKyAgICB2ZXJzaW9uUmVxdWlyZW1lbnQ6IHBhY2thZ2VDb25maWcuZW5naW5lcy5ucG0KKyAg
fSkKK30KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7CisgIHZhciB3YXJuaW5ncyA9
IFtdCisgIGZvciAodmFyIGkgPSAwOyBpIDwgdmVyc2lvblJlcXVpcmVtZW50cy5sZW5ndGg7IGkr
KykgeworICAgIHZhciBtb2QgPSB2ZXJzaW9uUmVxdWlyZW1lbnRzW2ldCisgICAgaWYgKCFzZW12
ZXIuc2F0aXNmaWVzKG1vZC5jdXJyZW50VmVyc2lvbiwgbW9kLnZlcnNpb25SZXF1aXJlbWVudCkp
IHsKKyAgICAgIHdhcm5pbmdzLnB1c2gobW9kLm5hbWUgKyAnOiAnICsKKyAgICAgICAgY2hhbGsu
cmVkKG1vZC5jdXJyZW50VmVyc2lvbikgKyAnIHNob3VsZCBiZSAnICsKKyAgICAgICAgY2hhbGsu
Z3JlZW4obW9kLnZlcnNpb25SZXF1aXJlbWVudCkKKyAgICAgICkKKyAgICB9CisgIH0KKworICBp
ZiAod2FybmluZ3MubGVuZ3RoKSB7CisgICAgY29uc29sZS5sb2coJycpCisgICAgY29uc29sZS5s
b2coY2hhbGsueWVsbG93KCdUbyB1c2UgdGhpcyB0ZW1wbGF0ZSwgeW91IG11c3QgdXBkYXRlIGZv
bGxvd2luZyB0byBtb2R1bGVzOicpKQorICAgIGNvbnNvbGUubG9nKCkKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHdhcm5pbmdzLmxlbmd0aDsgaSsrKSB7CisgICAgICB2YXIgd2FybmluZyA9IHdh
cm5pbmdzW2ldCisgICAgICBjb25zb2xlLmxvZygnICAnICsgd2FybmluZykKKyAgICB9CisgICAg
Y29uc29sZS5sb2coKQorICAgIHByb2Nlc3MuZXhpdCgxKQorICB9Cit9CmRpZmYgLS1naXQgYS9X
ZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZj
L2FyY2hpdGVjdHVyZS1leGFtcGxlcy92dWVqcy1jbGkvYnVpbGQvZGV2LWNsaWVudC5qcyBiL1dl
YnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3Z1ZWpzLWNsaS9idWlsZC9kZXYtY2xpZW50LmpzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjE4YWExZTIxOTUyYjk0NjhkZDVhN2U2MDNlYjk5NjZkMDM3ZDJmMWEKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy92dWVqcy1jbGkvYnVpbGQvZGV2LWNs
aWVudC5qcwpAQCAtMCwwICsxLDkgQEAKKy8qIGVzbGludC1kaXNhYmxlICovCityZXF1aXJlKCdl
dmVudHNvdXJjZS1wb2x5ZmlsbCcpCit2YXIgaG90Q2xpZW50ID0gcmVxdWlyZSgnd2VicGFjay1o
b3QtbWlkZGxld2FyZS9jbGllbnQ/bm9JbmZvPXRydWUmcmVsb2FkPXRydWUnKQorCitob3RDbGll
bnQuc3Vic2NyaWJlKGZ1bmN0aW9uIChldmVudCkgeworICBpZiAoZXZlbnQuYWN0aW9uID09PSAn
cmVsb2FkJykgeworICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKQorICB9Cit9KQpkaWZmIC0t
Z2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvdnVlanMtY2xpL2J1aWxkL2Rldi1zZXJ2ZXIu
anMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90
b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy92dWVqcy1jbGkvYnVpbGQvZGV2LXNlcnZlci5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4yZTI3Y2FlMjc1NmI2NTE4MTdiMjg0NjJiYzMzYTkxY2NlYjg3ODZkCi0t
LSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIu
MS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvdnVlanMtY2xpL2J1aWxk
L2Rldi1zZXJ2ZXIuanMKQEAgLTAsMCArMSw5MiBAQAorcmVxdWlyZSgnLi9jaGVjay12ZXJzaW9u
cycpKCkKKwordmFyIGNvbmZpZyA9IHJlcXVpcmUoJy4uL2NvbmZpZycpCitpZiAoIXByb2Nlc3Mu
ZW52Lk5PREVfRU5WKSB7CisgIHByb2Nlc3MuZW52Lk5PREVfRU5WID0gSlNPTi5wYXJzZShjb25m
aWcuZGV2LmVudi5OT0RFX0VOVikKK30KKwordmFyIG9wbiA9IHJlcXVpcmUoJ29wbicpCit2YXIg
cGF0aCA9IHJlcXVpcmUoJ3BhdGgnKQordmFyIGV4cHJlc3MgPSByZXF1aXJlKCdleHByZXNzJykK
K3ZhciB3ZWJwYWNrID0gcmVxdWlyZSgnd2VicGFjaycpCit2YXIgcHJveHlNaWRkbGV3YXJlID0g
cmVxdWlyZSgnaHR0cC1wcm94eS1taWRkbGV3YXJlJykKK3ZhciB3ZWJwYWNrQ29uZmlnID0gKHBy
b2Nlc3MuZW52Lk5PREVfRU5WID09PSAndGVzdGluZycgfHwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYg
PT09ICdwcm9kdWN0aW9uJykKKyAgPyByZXF1aXJlKCcuL3dlYnBhY2sucHJvZC5jb25mJykKKyAg
OiByZXF1aXJlKCcuL3dlYnBhY2suZGV2LmNvbmYnKQorCisvLyBkZWZhdWx0IHBvcnQgd2hlcmUg
ZGV2IHNlcnZlciBsaXN0ZW5zIGZvciBpbmNvbWluZyB0cmFmZmljCit2YXIgcG9ydCA9IHByb2Nl
c3MuZW52LlBPUlQgfHwgY29uZmlnLmRldi5wb3J0CisvLyBhdXRvbWF0aWNhbGx5IG9wZW4gYnJv
d3NlciwgaWYgbm90IHNldCB3aWxsIGJlIGZhbHNlCit2YXIgYXV0b09wZW5Ccm93c2VyID0gISFj
b25maWcuZGV2LmF1dG9PcGVuQnJvd3NlcgorLy8gRGVmaW5lIEhUVFAgcHJveGllcyB0byB5b3Vy
IGN1c3RvbSBBUEkgYmFja2VuZAorLy8gaHR0cHM6Ly9naXRodWIuY29tL2NoaW11cmFpL2h0dHAt
cHJveHktbWlkZGxld2FyZQordmFyIHByb3h5VGFibGUgPSBjb25maWcuZGV2LnByb3h5VGFibGUK
KwordmFyIGFwcCA9IGV4cHJlc3MoKQordmFyIGNvbXBpbGVyID0gd2VicGFjayh3ZWJwYWNrQ29u
ZmlnKQorCit2YXIgZGV2TWlkZGxld2FyZSA9IHJlcXVpcmUoJ3dlYnBhY2stZGV2LW1pZGRsZXdh
cmUnKShjb21waWxlciwgeworICBwdWJsaWNQYXRoOiB3ZWJwYWNrQ29uZmlnLm91dHB1dC5wdWJs
aWNQYXRoLAorICBxdWlldDogdHJ1ZQorfSkKKwordmFyIGhvdE1pZGRsZXdhcmUgPSByZXF1aXJl
KCd3ZWJwYWNrLWhvdC1taWRkbGV3YXJlJykoY29tcGlsZXIsIHsKKyAgbG9nOiBmYWxzZSwKKyAg
aGVhcnRiZWF0OiAyMDAwCit9KQorLy8gZm9yY2UgcGFnZSByZWxvYWQgd2hlbiBodG1sLXdlYnBh
Y2stcGx1Z2luIHRlbXBsYXRlIGNoYW5nZXMKK2NvbXBpbGVyLnBsdWdpbignY29tcGlsYXRpb24n
LCBmdW5jdGlvbiAoY29tcGlsYXRpb24pIHsKKyAgY29tcGlsYXRpb24ucGx1Z2luKCdodG1sLXdl
YnBhY2stcGx1Z2luLWFmdGVyLWVtaXQnLCBmdW5jdGlvbiAoZGF0YSwgY2IpIHsKKyAgICBob3RN
aWRkbGV3YXJlLnB1Ymxpc2goeyBhY3Rpb246ICdyZWxvYWQnIH0pCisgICAgY2IoKQorICB9KQor
fSkKKworLy8gcHJveHkgYXBpIHJlcXVlc3RzCitPYmplY3Qua2V5cyhwcm94eVRhYmxlKS5mb3JF
YWNoKGZ1bmN0aW9uIChjb250ZXh0KSB7CisgIHZhciBvcHRpb25zID0gcHJveHlUYWJsZVtjb250
ZXh0XQorICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7CisgICAgb3B0aW9ucyA9
IHsgdGFyZ2V0OiBvcHRpb25zIH0KKyAgfQorICBhcHAudXNlKHByb3h5TWlkZGxld2FyZShvcHRp
b25zLmZpbHRlciB8fCBjb250ZXh0LCBvcHRpb25zKSkKK30pCisKKy8vIGhhbmRsZSBmYWxsYmFj
ayBmb3IgSFRNTDUgaGlzdG9yeSBBUEkKK2FwcC51c2UocmVxdWlyZSgnY29ubmVjdC1oaXN0b3J5
LWFwaS1mYWxsYmFjaycpKCkpCisKKy8vIHNlcnZlIHdlYnBhY2sgYnVuZGxlIG91dHB1dAorYXBw
LnVzZShkZXZNaWRkbGV3YXJlKQorCisvLyBlbmFibGUgaG90LXJlbG9hZCBhbmQgc3RhdGUtcHJl
c2VydmluZworLy8gY29tcGlsYXRpb24gZXJyb3IgZGlzcGxheQorYXBwLnVzZShob3RNaWRkbGV3
YXJlKQorCisvLyBzZXJ2ZSBwdXJlIHN0YXRpYyBhc3NldHMKK3ZhciBzdGF0aWNQYXRoID0gcGF0
aC5wb3NpeC5qb2luKGNvbmZpZy5kZXYuYXNzZXRzUHVibGljUGF0aCwgY29uZmlnLmRldi5hc3Nl
dHNTdWJEaXJlY3RvcnkpCithcHAudXNlKHN0YXRpY1BhdGgsIGV4cHJlc3Muc3RhdGljKCcuL3N0
YXRpYycpKQorCit2YXIgdXJpID0gJ2h0dHA6Ly9sb2NhbGhvc3Q6JyArIHBvcnQKKwordmFyIF9y
ZXNvbHZlCit2YXIgcmVhZHlQcm9taXNlID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7CisgIF9y
ZXNvbHZlID0gcmVzb2x2ZQorfSkKKworY29uc29sZS5sb2coJz4gU3RhcnRpbmcgZGV2IHNlcnZl
ci4uLicpCitkZXZNaWRkbGV3YXJlLndhaXRVbnRpbFZhbGlkKCgpID0+IHsKKyAgY29uc29sZS5s
b2coJz4gTGlzdGVuaW5nIGF0ICcgKyB1cmkgKyAnXG4nKQorICAvLyB3aGVuIGVudiBpcyB0ZXN0
aW5nLCBkb24ndCBuZWVkIG9wZW4gaXQKKyAgaWYgKGF1dG9PcGVuQnJvd3NlciAmJiBwcm9jZXNz
LmVudi5OT0RFX0VOViAhPT0gJ3Rlc3RpbmcnKSB7CisgICAgb3BuKHVyaSkKKyAgfQorICBfcmVz
b2x2ZSgpCit9KQorCit2YXIgc2VydmVyID0gYXBwLmxpc3Rlbihwb3J0KQorCittb2R1bGUuZXhw
b3J0cyA9IHsKKyAgcmVhZHk6IHJlYWR5UHJvbWlzZSwKKyAgY2xvc2U6ICgpID0+IHsKKyAgICBz
ZXJ2ZXIuY2xvc2UoKQorICB9Cit9CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gu
b3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy92dWVqcy1jbGkvYnVpbGQvdXRpbHMuanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1Nw
ZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy92dWVq
cy1jbGkvYnVpbGQvdXRpbHMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjFkNTRiNGQ2YzU1MTYyM2Q3NjliZTBk
MDJhMmE0ZmVmZGExOTJjMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5j
aC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL3Z1ZWpzLWNsaS9idWlsZC91dGlscy5qcwpAQCAtMCwwICsxLDcxIEBACit2YXIgcGF0aCA9
IHJlcXVpcmUoJ3BhdGgnKQordmFyIGNvbmZpZyA9IHJlcXVpcmUoJy4uL2NvbmZpZycpCit2YXIg
RXh0cmFjdFRleHRQbHVnaW4gPSByZXF1aXJlKCdleHRyYWN0LXRleHQtd2VicGFjay1wbHVnaW4n
KQorCitleHBvcnRzLmFzc2V0c1BhdGggPSBmdW5jdGlvbiAoX3BhdGgpIHsKKyAgdmFyIGFzc2V0
c1N1YkRpcmVjdG9yeSA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicKKyAg
ICA/IGNvbmZpZy5idWlsZC5hc3NldHNTdWJEaXJlY3RvcnkKKyAgICA6IGNvbmZpZy5kZXYuYXNz
ZXRzU3ViRGlyZWN0b3J5CisgIHJldHVybiBwYXRoLnBvc2l4LmpvaW4oYXNzZXRzU3ViRGlyZWN0
b3J5LCBfcGF0aCkKK30KKworZXhwb3J0cy5jc3NMb2FkZXJzID0gZnVuY3Rpb24gKG9wdGlvbnMp
IHsKKyAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge30KKworICB2YXIgY3NzTG9hZGVyID0geworICAg
IGxvYWRlcjogJ2Nzcy1sb2FkZXInLAorICAgIG9wdGlvbnM6IHsKKyAgICAgIG1pbmltaXplOiBw
cm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nLAorICAgICAgc291cmNlTWFwOiBv
cHRpb25zLnNvdXJjZU1hcAorICAgIH0KKyAgfQorCisgIC8vIGdlbmVyYXRlIGxvYWRlciBzdHJp
bmcgdG8gYmUgdXNlZCB3aXRoIGV4dHJhY3QgdGV4dCBwbHVnaW4KKyAgZnVuY3Rpb24gZ2VuZXJh
dGVMb2FkZXJzIChsb2FkZXIsIGxvYWRlck9wdGlvbnMpIHsKKyAgICB2YXIgbG9hZGVycyA9IFtj
c3NMb2FkZXJdCisgICAgaWYgKGxvYWRlcikgeworICAgICAgbG9hZGVycy5wdXNoKHsKKyAgICAg
ICAgbG9hZGVyOiBsb2FkZXIgKyAnLWxvYWRlcicsCisgICAgICAgIG9wdGlvbnM6IE9iamVjdC5h
c3NpZ24oe30sIGxvYWRlck9wdGlvbnMsIHsKKyAgICAgICAgICBzb3VyY2VNYXA6IG9wdGlvbnMu
c291cmNlTWFwCisgICAgICAgIH0pCisgICAgICB9KQorICAgIH0KKworICAgIC8vIEV4dHJhY3Qg
Q1NTIHdoZW4gdGhhdCBvcHRpb24gaXMgc3BlY2lmaWVkCisgICAgLy8gKHdoaWNoIGlzIHRoZSBj
YXNlIGR1cmluZyBwcm9kdWN0aW9uIGJ1aWxkKQorICAgIGlmIChvcHRpb25zLmV4dHJhY3QpIHsK
KyAgICAgIHJldHVybiBFeHRyYWN0VGV4dFBsdWdpbi5leHRyYWN0KHsKKyAgICAgICAgdXNlOiBs
b2FkZXJzLAorICAgICAgICBmYWxsYmFjazogJ3Z1ZS1zdHlsZS1sb2FkZXInCisgICAgICB9KQor
ICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gWyd2dWUtc3R5bGUtbG9hZGVyJ10uY29uY2F0KGxv
YWRlcnMpCisgICAgfQorICB9CisKKyAgLy8gaHR0cHM6Ly92dWUtbG9hZGVyLnZ1ZWpzLm9yZy9l
bi9jb25maWd1cmF0aW9ucy9leHRyYWN0LWNzcy5odG1sCisgIHJldHVybiB7CisgICAgY3NzOiBn
ZW5lcmF0ZUxvYWRlcnMoKSwKKyAgICBwb3N0Y3NzOiBnZW5lcmF0ZUxvYWRlcnMoKSwKKyAgICBs
ZXNzOiBnZW5lcmF0ZUxvYWRlcnMoJ2xlc3MnKSwKKyAgICBzYXNzOiBnZW5lcmF0ZUxvYWRlcnMo
J3Nhc3MnLCB7IGluZGVudGVkU3ludGF4OiB0cnVlIH0pLAorICAgIHNjc3M6IGdlbmVyYXRlTG9h
ZGVycygnc2FzcycpLAorICAgIHN0eWx1czogZ2VuZXJhdGVMb2FkZXJzKCdzdHlsdXMnKSwKKyAg
ICBzdHlsOiBnZW5lcmF0ZUxvYWRlcnMoJ3N0eWx1cycpCisgIH0KK30KKworLy8gR2VuZXJhdGUg
bG9hZGVycyBmb3Igc3RhbmRhbG9uZSBzdHlsZSBmaWxlcyAob3V0c2lkZSBvZiAudnVlKQorZXhw
b3J0cy5zdHlsZUxvYWRlcnMgPSBmdW5jdGlvbiAob3B0aW9ucykgeworICB2YXIgb3V0cHV0ID0g
W10KKyAgdmFyIGxvYWRlcnMgPSBleHBvcnRzLmNzc0xvYWRlcnMob3B0aW9ucykKKyAgZm9yICh2
YXIgZXh0ZW5zaW9uIGluIGxvYWRlcnMpIHsKKyAgICB2YXIgbG9hZGVyID0gbG9hZGVyc1tleHRl
bnNpb25dCisgICAgb3V0cHV0LnB1c2goeworICAgICAgdGVzdDogbmV3IFJlZ0V4cCgnXFwuJyAr
IGV4dGVuc2lvbiArICckJyksCisgICAgICB1c2U6IGxvYWRlcgorICAgIH0pCisgIH0KKyAgcmV0
dXJuIG91dHB1dAorfQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVl
ZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvdnVlanMt
Y2xpL2J1aWxkL3Z1ZS1sb2FkZXIuY29uZi5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcv
U3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3Z1
ZWpzLWNsaS9idWlsZC92dWUtbG9hZGVyLmNvbmYuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGEzNDZkNTIyMjZj
MDc4ZGVlNzA1OTJlNTJhMzY1YTI2YzRlMDUxNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVz
L2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL3Z1ZWpzLWNsaS9idWlsZC92dWUtbG9hZGVyLmNvbmYuanMKQEAgLTAs
MCArMSwxOCBAQAordmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpCit2YXIgY29uZmlnID0g
cmVxdWlyZSgnLi4vY29uZmlnJykKK3ZhciBpc1Byb2R1Y3Rpb24gPSBwcm9jZXNzLmVudi5OT0RF
X0VOViA9PT0gJ3Byb2R1Y3Rpb24nCisKK21vZHVsZS5leHBvcnRzID0geworICBsb2FkZXJzOiB1
dGlscy5jc3NMb2FkZXJzKHsKKyAgICBzb3VyY2VNYXA6IGlzUHJvZHVjdGlvbgorICAgICAgPyBj
b25maWcuYnVpbGQucHJvZHVjdGlvblNvdXJjZU1hcAorICAgICAgOiBjb25maWcuZGV2LmNzc1Nv
dXJjZU1hcCwKKyAgICBleHRyYWN0OiBpc1Byb2R1Y3Rpb24KKyAgfSksCisgIHRyYW5zZm9ybVRv
UmVxdWlyZTogeworICAgIHZpZGVvOiAnc3JjJywKKyAgICBzb3VyY2U6ICdzcmMnLAorICAgIGlt
ZzogJ3NyYycsCisgICAgaW1hZ2U6ICd4bGluazpocmVmJworICB9Cit9CmRpZmYgLS1naXQgYS9X
ZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZj
L2FyY2hpdGVjdHVyZS1leGFtcGxlcy92dWVqcy1jbGkvYnVpbGQvd2VicGFjay5iYXNlLmNvbmYu
anMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90
b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy92dWVqcy1jbGkvYnVpbGQvd2VicGFjay5iYXNl
LmNvbmYuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMWM5OWM0ZWIzMTI4YjU5NGI1MjEyNzQzMjkxMzdmZjdhOWJh
NWJmMAotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRv
bWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3Z1ZWpzLWNs
aS9idWlsZC93ZWJwYWNrLmJhc2UuY29uZi5qcwpAQCAtMCwwICsxLDc1IEBACit2YXIgcGF0aCA9
IHJlcXVpcmUoJ3BhdGgnKQordmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpCit2YXIgY29u
ZmlnID0gcmVxdWlyZSgnLi4vY29uZmlnJykKK3ZhciB2dWVMb2FkZXJDb25maWcgPSByZXF1aXJl
KCcuL3Z1ZS1sb2FkZXIuY29uZicpCisKK2Z1bmN0aW9uIHJlc29sdmUgKGRpcikgeworICByZXR1
cm4gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgZGlyKQorfQorCittb2R1bGUuZXhwb3J0cyA9
IHsKKyAgZW50cnk6IHsKKyAgICBhcHA6ICcuL3NyYy9tYWluLmpzJworICB9LAorICBvdXRwdXQ6
IHsKKyAgICBwYXRoOiBjb25maWcuYnVpbGQuYXNzZXRzUm9vdCwKKyAgICBmaWxlbmFtZTogJ1tu
YW1lXS5qcycsCisgICAgcHVibGljUGF0aDogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9k
dWN0aW9uJworICAgICAgPyBjb25maWcuYnVpbGQuYXNzZXRzUHVibGljUGF0aAorICAgICAgOiBj
b25maWcuZGV2LmFzc2V0c1B1YmxpY1BhdGgKKyAgfSwKKyAgcmVzb2x2ZTogeworICAgIGV4dGVu
c2lvbnM6IFsnLmpzJywgJy52dWUnLCAnLmpzb24nXSwKKyAgICBhbGlhczogeworICAgICAgJ3Z1
ZSQnOiAndnVlL2Rpc3QvdnVlLmVzbS5qcycsCisgICAgICAnQCc6IHJlc29sdmUoJ3NyYycpLAor
ICAgIH0KKyAgfSwKKyAgbW9kdWxlOiB7CisgICAgcnVsZXM6IFsKKyAgICAgIHsKKyAgICAgICAg
dGVzdDogL1wuKGpzfHZ1ZSkkLywKKyAgICAgICAgbG9hZGVyOiAnZXNsaW50LWxvYWRlcicsCisg
ICAgICAgIGVuZm9yY2U6ICdwcmUnLAorICAgICAgICBpbmNsdWRlOiBbcmVzb2x2ZSgnc3JjJyks
IHJlc29sdmUoJ3Rlc3QnKV0sCisgICAgICAgIG9wdGlvbnM6IHsKKyAgICAgICAgICBmb3JtYXR0
ZXI6IHJlcXVpcmUoJ2VzbGludC1mcmllbmRseS1mb3JtYXR0ZXInKQorICAgICAgICB9CisgICAg
ICB9LAorICAgICAgeworICAgICAgICB0ZXN0OiAvXC52dWUkLywKKyAgICAgICAgbG9hZGVyOiAn
dnVlLWxvYWRlcicsCisgICAgICAgIG9wdGlvbnM6IHZ1ZUxvYWRlckNvbmZpZworICAgICAgfSwK
KyAgICAgIHsKKyAgICAgICAgdGVzdDogL1wuanMkLywKKyAgICAgICAgbG9hZGVyOiAnYmFiZWwt
bG9hZGVyJywKKyAgICAgICAgaW5jbHVkZTogW3Jlc29sdmUoJ3NyYycpLCByZXNvbHZlKCd0ZXN0
JyldCisgICAgICB9LAorICAgICAgeworICAgICAgICB0ZXN0OiAvXC4ocG5nfGpwZT9nfGdpZnxz
dmcpKFw/LiopPyQvLAorICAgICAgICBsb2FkZXI6ICd1cmwtbG9hZGVyJywKKyAgICAgICAgb3B0
aW9uczogeworICAgICAgICAgIGxpbWl0OiAxMDAwMCwKKyAgICAgICAgICBuYW1lOiB1dGlscy5h
c3NldHNQYXRoKCdpbWcvW25hbWVdLltoYXNoOjddLltleHRdJykKKyAgICAgICAgfQorICAgICAg
fSwKKyAgICAgIHsKKyAgICAgICAgdGVzdDogL1wuKG1wNHx3ZWJtfG9nZ3xtcDN8d2F2fGZsYWN8
YWFjKShcPy4qKT8kLywKKyAgICAgICAgbG9hZGVyOiAndXJsLWxvYWRlcicsCisgICAgICAgIG9w
dGlvbnM6IHsKKyAgICAgICAgICBsaW1pdDogMTAwMDAsCisgICAgICAgICAgbmFtZTogdXRpbHMu
YXNzZXRzUGF0aCgnbWVkaWEvW25hbWVdLltoYXNoOjddLltleHRdJykKKyAgICAgICAgfQorICAg
ICAgfSwKKyAgICAgIHsKKyAgICAgICAgdGVzdDogL1wuKHdvZmYyP3xlb3R8dHRmfG90ZikoXD8u
Kik/JC8sCisgICAgICAgIGxvYWRlcjogJ3VybC1sb2FkZXInLAorICAgICAgICBvcHRpb25zOiB7
CisgICAgICAgICAgbGltaXQ6IDEwMDAwLAorICAgICAgICAgIG5hbWU6IHV0aWxzLmFzc2V0c1Bh
dGgoJ2ZvbnRzL1tuYW1lXS5baGFzaDo3XS5bZXh0XScpCisgICAgICAgIH0KKyAgICAgIH0KKyAg
ICBdCisgIH0KK30KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRv
bWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3Z1ZWpzLWNs
aS9idWlsZC93ZWJwYWNrLmRldi5jb25mLmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9T
cGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvdnVl
anMtY2xpL2J1aWxkL3dlYnBhY2suZGV2LmNvbmYuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTQ3MDQwMmQwMzc3
YzRjMzk5ZmViZmM0OGFhNmIzNTg1ZTMzYzZhMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVz
L2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL3Z1ZWpzLWNsaS9idWlsZC93ZWJwYWNrLmRldi5jb25mLmpzCkBAIC0w
LDAgKzEsMzUgQEAKK3ZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKQordmFyIHdlYnBhY2sg
PSByZXF1aXJlKCd3ZWJwYWNrJykKK3ZhciBjb25maWcgPSByZXF1aXJlKCcuLi9jb25maWcnKQor
dmFyIG1lcmdlID0gcmVxdWlyZSgnd2VicGFjay1tZXJnZScpCit2YXIgYmFzZVdlYnBhY2tDb25m
aWcgPSByZXF1aXJlKCcuL3dlYnBhY2suYmFzZS5jb25mJykKK3ZhciBIdG1sV2VicGFja1BsdWdp
biA9IHJlcXVpcmUoJ2h0bWwtd2VicGFjay1wbHVnaW4nKQordmFyIEZyaWVuZGx5RXJyb3JzUGx1
Z2luID0gcmVxdWlyZSgnZnJpZW5kbHktZXJyb3JzLXdlYnBhY2stcGx1Z2luJykKKworLy8gYWRk
IGhvdC1yZWxvYWQgcmVsYXRlZCBjb2RlIHRvIGVudHJ5IGNodW5rcworT2JqZWN0LmtleXMoYmFz
ZVdlYnBhY2tDb25maWcuZW50cnkpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHsKKyAgYmFzZVdl
YnBhY2tDb25maWcuZW50cnlbbmFtZV0gPSBbJy4vYnVpbGQvZGV2LWNsaWVudCddLmNvbmNhdChi
YXNlV2VicGFja0NvbmZpZy5lbnRyeVtuYW1lXSkKK30pCisKK21vZHVsZS5leHBvcnRzID0gbWVy
Z2UoYmFzZVdlYnBhY2tDb25maWcsIHsKKyAgbW9kdWxlOiB7CisgICAgcnVsZXM6IHV0aWxzLnN0
eWxlTG9hZGVycyh7IHNvdXJjZU1hcDogY29uZmlnLmRldi5jc3NTb3VyY2VNYXAgfSkKKyAgfSwK
KyAgLy8gY2hlYXAtbW9kdWxlLWV2YWwtc291cmNlLW1hcCBpcyBmYXN0ZXIgZm9yIGRldmVsb3Bt
ZW50CisgIGRldnRvb2w6ICcjY2hlYXAtbW9kdWxlLWV2YWwtc291cmNlLW1hcCcsCisgIHBsdWdp
bnM6IFsKKyAgICBuZXcgd2VicGFjay5EZWZpbmVQbHVnaW4oeworICAgICAgJ3Byb2Nlc3MuZW52
JzogY29uZmlnLmRldi5lbnYKKyAgICB9KSwKKyAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2xl
bmphbWluL3dlYnBhY2staG90LW1pZGRsZXdhcmUjaW5zdGFsbGF0aW9uLS11c2FnZQorICAgIG5l
dyB3ZWJwYWNrLkhvdE1vZHVsZVJlcGxhY2VtZW50UGx1Z2luKCksCisgICAgbmV3IHdlYnBhY2su
Tm9FbWl0T25FcnJvcnNQbHVnaW4oKSwKKyAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYW1wZWRh
bmR3aXJlZC9odG1sLXdlYnBhY2stcGx1Z2luCisgICAgbmV3IEh0bWxXZWJwYWNrUGx1Z2luKHsK
KyAgICAgIGZpbGVuYW1lOiAnaW5kZXguaHRtbCcsCisgICAgICB0ZW1wbGF0ZTogJ2luZGV4Lmh0
bWwnLAorICAgICAgaW5qZWN0OiB0cnVlCisgICAgfSksCisgICAgbmV3IEZyaWVuZGx5RXJyb3Jz
UGx1Z2luKCkKKyAgXQorfSkKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcv
U3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3Z1
ZWpzLWNsaS9idWlsZC93ZWJwYWNrLnByb2QuY29uZi5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5j
aC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL3Z1ZWpzLWNsaS9idWlsZC93ZWJwYWNrLnByb2QuY29uZi5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZDRi
Y2U3YmU3ZDlkMzk3MjliMDU5NmMwZjgyYzUzN2I5MzZlMWYwCi0tLSAvZGV2L251bGwKKysrIGIv
V2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212
Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvdnVlanMtY2xpL2J1aWxkL3dlYnBhY2sucHJvZC5jb25m
LmpzCkBAIC0wLDAgKzEsMTI2IEBACit2YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKQordmFyIHV0
aWxzID0gcmVxdWlyZSgnLi91dGlscycpCit2YXIgd2VicGFjayA9IHJlcXVpcmUoJ3dlYnBhY2sn
KQordmFyIGNvbmZpZyA9IHJlcXVpcmUoJy4uL2NvbmZpZycpCit2YXIgbWVyZ2UgPSByZXF1aXJl
KCd3ZWJwYWNrLW1lcmdlJykKK3ZhciBiYXNlV2VicGFja0NvbmZpZyA9IHJlcXVpcmUoJy4vd2Vi
cGFjay5iYXNlLmNvbmYnKQordmFyIENvcHlXZWJwYWNrUGx1Z2luID0gcmVxdWlyZSgnY29weS13
ZWJwYWNrLXBsdWdpbicpCit2YXIgSHRtbFdlYnBhY2tQbHVnaW4gPSByZXF1aXJlKCdodG1sLXdl
YnBhY2stcGx1Z2luJykKK3ZhciBFeHRyYWN0VGV4dFBsdWdpbiA9IHJlcXVpcmUoJ2V4dHJhY3Qt
dGV4dC13ZWJwYWNrLXBsdWdpbicpCit2YXIgT3B0aW1pemVDU1NQbHVnaW4gPSByZXF1aXJlKCdv
cHRpbWl6ZS1jc3MtYXNzZXRzLXdlYnBhY2stcGx1Z2luJykKKwordmFyIGVudiA9IHByb2Nlc3Mu
ZW52Lk5PREVfRU5WID09PSAndGVzdGluZycKKyAgPyByZXF1aXJlKCcuLi9jb25maWcvdGVzdC5l
bnYnKQorICA6IGNvbmZpZy5idWlsZC5lbnYKKwordmFyIHdlYnBhY2tDb25maWcgPSBtZXJnZShi
YXNlV2VicGFja0NvbmZpZywgeworICBtb2R1bGU6IHsKKyAgICBydWxlczogdXRpbHMuc3R5bGVM
b2FkZXJzKHsKKyAgICAgIHNvdXJjZU1hcDogY29uZmlnLmJ1aWxkLnByb2R1Y3Rpb25Tb3VyY2VN
YXAsCisgICAgICBleHRyYWN0OiB0cnVlCisgICAgfSkKKyAgfSwKKyAgZGV2dG9vbDogY29uZmln
LmJ1aWxkLnByb2R1Y3Rpb25Tb3VyY2VNYXAgPyAnI3NvdXJjZS1tYXAnIDogZmFsc2UsCisgIG91
dHB1dDogeworICAgIHBhdGg6IGNvbmZpZy5idWlsZC5hc3NldHNSb290LAorICAgIGZpbGVuYW1l
OiB1dGlscy5hc3NldHNQYXRoKCdqcy9bbmFtZV0uW2NodW5raGFzaF0uanMnKSwKKyAgICBjaHVu
a0ZpbGVuYW1lOiB1dGlscy5hc3NldHNQYXRoKCdqcy9baWRdLltjaHVua2hhc2hdLmpzJykKKyAg
fSwKKyAgcGx1Z2luczogWworICAgIC8vIGh0dHA6Ly92dWVqcy5naXRodWIuaW8vdnVlLWxvYWRl
ci9lbi93b3JrZmxvdy9wcm9kdWN0aW9uLmh0bWwKKyAgICBuZXcgd2VicGFjay5EZWZpbmVQbHVn
aW4oeworICAgICAgJ3Byb2Nlc3MuZW52JzogZW52CisgICAgfSksCisgICAgbmV3IHdlYnBhY2su
b3B0aW1pemUuVWdsaWZ5SnNQbHVnaW4oeworICAgICAgY29tcHJlc3M6IHsKKyAgICAgICAgd2Fy
bmluZ3M6IGZhbHNlCisgICAgICB9LAorICAgICAgc291cmNlTWFwOiB0cnVlCisgICAgfSksCisg
ICAgLy8gZXh0cmFjdCBjc3MgaW50byBpdHMgb3duIGZpbGUKKyAgICBuZXcgRXh0cmFjdFRleHRQ
bHVnaW4oeworICAgICAgZmlsZW5hbWU6IHV0aWxzLmFzc2V0c1BhdGgoJ2Nzcy9bbmFtZV0uW2Nv
bnRlbnRoYXNoXS5jc3MnKQorICAgIH0pLAorICAgIC8vIENvbXByZXNzIGV4dHJhY3RlZCBDU1Mu
IFdlIGFyZSB1c2luZyB0aGlzIHBsdWdpbiBzbyB0aGF0IHBvc3NpYmxlCisgICAgLy8gZHVwbGlj
YXRlZCBDU1MgZnJvbSBkaWZmZXJlbnQgY29tcG9uZW50cyBjYW4gYmUgZGVkdXBlZC4KKyAgICBu
ZXcgT3B0aW1pemVDU1NQbHVnaW4oeworICAgICAgY3NzUHJvY2Vzc29yT3B0aW9uczogeworICAg
ICAgICBzYWZlOiB0cnVlCisgICAgICB9CisgICAgfSksCisgICAgLy8gZ2VuZXJhdGUgZGlzdCBp
bmRleC5odG1sIHdpdGggY29ycmVjdCBhc3NldCBoYXNoIGZvciBjYWNoaW5nLgorICAgIC8vIHlv
dSBjYW4gY3VzdG9taXplIG91dHB1dCBieSBlZGl0aW5nIC9pbmRleC5odG1sCisgICAgLy8gc2Vl
IGh0dHBzOi8vZ2l0aHViLmNvbS9hbXBlZGFuZHdpcmVkL2h0bWwtd2VicGFjay1wbHVnaW4KKyAg
ICBuZXcgSHRtbFdlYnBhY2tQbHVnaW4oeworICAgICAgZmlsZW5hbWU6IHByb2Nlc3MuZW52Lk5P
REVfRU5WID09PSAndGVzdGluZycKKyAgICAgICAgPyAnaW5kZXguaHRtbCcKKyAgICAgICAgOiBj
b25maWcuYnVpbGQuaW5kZXgsCisgICAgICB0ZW1wbGF0ZTogJ2luZGV4Lmh0bWwnLAorICAgICAg
aW5qZWN0OiB0cnVlLAorICAgICAgbWluaWZ5OiB7CisgICAgICAgIHJlbW92ZUNvbW1lbnRzOiB0
cnVlLAorICAgICAgICBjb2xsYXBzZVdoaXRlc3BhY2U6IHRydWUsCisgICAgICAgIHJlbW92ZUF0
dHJpYnV0ZVF1b3RlczogdHJ1ZQorICAgICAgICAvLyBtb3JlIG9wdGlvbnM6CisgICAgICAgIC8v
IGh0dHBzOi8vZ2l0aHViLmNvbS9rYW5nYXgvaHRtbC1taW5pZmllciNvcHRpb25zLXF1aWNrLXJl
ZmVyZW5jZQorICAgICAgfSwKKyAgICAgIC8vIG5lY2Vzc2FyeSB0byBjb25zaXN0ZW50bHkgd29y
ayB3aXRoIG11bHRpcGxlIGNodW5rcyB2aWEgQ29tbW9uc0NodW5rUGx1Z2luCisgICAgICBjaHVu
a3NTb3J0TW9kZTogJ2RlcGVuZGVuY3knCisgICAgfSksCisgICAgLy8ga2VlcCBtb2R1bGUuaWQg
c3RhYmxlIHdoZW4gdmVuZGVyIG1vZHVsZXMgZG9lcyBub3QgY2hhbmdlCisgICAgbmV3IHdlYnBh
Y2suSGFzaGVkTW9kdWxlSWRzUGx1Z2luKCksCisgICAgLy8gc3BsaXQgdmVuZG9yIGpzIGludG8g
aXRzIG93biBmaWxlCisgICAgbmV3IHdlYnBhY2sub3B0aW1pemUuQ29tbW9uc0NodW5rUGx1Z2lu
KHsKKyAgICAgIG5hbWU6ICd2ZW5kb3InLAorICAgICAgbWluQ2h1bmtzOiBmdW5jdGlvbiAobW9k
dWxlLCBjb3VudCkgeworICAgICAgICAvLyBhbnkgcmVxdWlyZWQgbW9kdWxlcyBpbnNpZGUgbm9k
ZV9tb2R1bGVzIGFyZSBleHRyYWN0ZWQgdG8gdmVuZG9yCisgICAgICAgIHJldHVybiAoCisgICAg
ICAgICAgbW9kdWxlLnJlc291cmNlICYmCisgICAgICAgICAgL1wuanMkLy50ZXN0KG1vZHVsZS5y
ZXNvdXJjZSkgJiYKKyAgICAgICAgICBtb2R1bGUucmVzb3VyY2UuaW5kZXhPZigKKyAgICAgICAg
ICAgIHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi9ub2RlX21vZHVsZXMnKQorICAgICAgICAgICkg
PT09IDAKKyAgICAgICAgKQorICAgICAgfQorICAgIH0pLAorICAgIC8vIGV4dHJhY3Qgd2VicGFj
ayBydW50aW1lIGFuZCBtb2R1bGUgbWFuaWZlc3QgdG8gaXRzIG93biBmaWxlIGluIG9yZGVyIHRv
CisgICAgLy8gcHJldmVudCB2ZW5kb3IgaGFzaCBmcm9tIGJlaW5nIHVwZGF0ZWQgd2hlbmV2ZXIg
YXBwIGJ1bmRsZSBpcyB1cGRhdGVkCisgICAgbmV3IHdlYnBhY2sub3B0aW1pemUuQ29tbW9uc0No
dW5rUGx1Z2luKHsKKyAgICAgIG5hbWU6ICdtYW5pZmVzdCcsCisgICAgICBjaHVua3M6IFsndmVu
ZG9yJ10KKyAgICB9KSwKKyAgICAvLyBjb3B5IGN1c3RvbSBzdGF0aWMgYXNzZXRzCisgICAgbmV3
IENvcHlXZWJwYWNrUGx1Z2luKFsKKyAgICAgIHsKKyAgICAgICAgZnJvbTogcGF0aC5yZXNvbHZl
KF9fZGlybmFtZSwgJy4uL3N0YXRpYycpLAorICAgICAgICB0bzogY29uZmlnLmJ1aWxkLmFzc2V0
c1N1YkRpcmVjdG9yeSwKKyAgICAgICAgaWdub3JlOiBbJy4qJ10KKyAgICAgIH0KKyAgICBdKQor
ICBdCit9KQorCitpZiAoY29uZmlnLmJ1aWxkLnByb2R1Y3Rpb25HemlwKSB7CisgIHZhciBDb21w
cmVzc2lvbldlYnBhY2tQbHVnaW4gPSByZXF1aXJlKCdjb21wcmVzc2lvbi13ZWJwYWNrLXBsdWdp
bicpCisKKyAgd2VicGFja0NvbmZpZy5wbHVnaW5zLnB1c2goCisgICAgbmV3IENvbXByZXNzaW9u
V2VicGFja1BsdWdpbih7CisgICAgICBhc3NldDogJ1twYXRoXS5neltxdWVyeV0nLAorICAgICAg
YWxnb3JpdGhtOiAnZ3ppcCcsCisgICAgICB0ZXN0OiBuZXcgUmVnRXhwKAorICAgICAgICAnXFwu
KCcgKworICAgICAgICBjb25maWcuYnVpbGQucHJvZHVjdGlvbkd6aXBFeHRlbnNpb25zLmpvaW4o
J3wnKSArCisgICAgICAgICcpJCcKKyAgICAgICksCisgICAgICB0aHJlc2hvbGQ6IDEwMjQwLAor
ICAgICAgbWluUmF0aW86IDAuOAorICAgIH0pCisgICkKK30KKworaWYgKGNvbmZpZy5idWlsZC5i
dW5kbGVBbmFseXplclJlcG9ydCkgeworICB2YXIgQnVuZGxlQW5hbHl6ZXJQbHVnaW4gPSByZXF1
aXJlKCd3ZWJwYWNrLWJ1bmRsZS1hbmFseXplcicpLkJ1bmRsZUFuYWx5emVyUGx1Z2luCisgIHdl
YnBhY2tDb25maWcucGx1Z2lucy5wdXNoKG5ldyBCdW5kbGVBbmFseXplclBsdWdpbigpKQorfQor
Cittb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb25maWcKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jy
b3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL3Z1ZWpzLWNsaS9idWlsZC93ZWJwYWNrLnRlc3QuY29uZi5qcyBiL1dlYnNp
dGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL3Z1ZWpzLWNsaS9idWlsZC93ZWJwYWNrLnRlc3QuY29uZi5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi40OGY2NGNjMzE5ODU0ZDBkMGRjOGRmNGM2MjUzOTE0MDc4MmUxZDcyCi0tLSAv
ZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9y
ZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvdnVlanMtY2xpL2J1aWxkL3dl
YnBhY2sudGVzdC5jb25mLmpzCkBAIC0wLDAgKzEsMzEgQEAKKy8vIFRoaXMgaXMgdGhlIHdlYnBh
Y2sgY29uZmlnIHVzZWQgZm9yIHVuaXQgdGVzdHMuCisKK3ZhciB1dGlscyA9IHJlcXVpcmUoJy4v
dXRpbHMnKQordmFyIHdlYnBhY2sgPSByZXF1aXJlKCd3ZWJwYWNrJykKK3ZhciBtZXJnZSA9IHJl
cXVpcmUoJ3dlYnBhY2stbWVyZ2UnKQordmFyIGJhc2VDb25maWcgPSByZXF1aXJlKCcuL3dlYnBh
Y2suYmFzZS5jb25mJykKKwordmFyIHdlYnBhY2tDb25maWcgPSBtZXJnZShiYXNlQ29uZmlnLCB7
CisgIC8vIHVzZSBpbmxpbmUgc291cmNlbWFwIGZvciBrYXJtYS1zb3VyY2VtYXAtbG9hZGVyCisg
IG1vZHVsZTogeworICAgIHJ1bGVzOiB1dGlscy5zdHlsZUxvYWRlcnMoKQorICB9LAorICBkZXZ0
b29sOiAnI2lubGluZS1zb3VyY2UtbWFwJywKKyAgcmVzb2x2ZUxvYWRlcjogeworICAgIGFsaWFz
OiB7CisgICAgICAvLyBuZWNlc3NhcnkgdG8gdG8gbWFrZSBsYW5nPSJzY3NzIiB3b3JrIGluIHRl
c3Qgd2hlbiB1c2luZyB2dWUtbG9hZGVyJ3MgP2luamVjdCBvcHRpb24KKyAgICAgIC8vIHNlZSBk
aXNjdXNzaW9uIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtbG9hZGVyL2lzc3Vlcy83
MjQKKyAgICAgICdzY3NzLWxvYWRlcic6ICdzYXNzLWxvYWRlcicKKyAgICB9CisgIH0sCisgIHBs
dWdpbnM6IFsKKyAgICBuZXcgd2VicGFjay5EZWZpbmVQbHVnaW4oeworICAgICAgJ3Byb2Nlc3Mu
ZW52JzogcmVxdWlyZSgnLi4vY29uZmlnL3Rlc3QuZW52JykKKyAgICB9KQorICBdCit9KQorCisv
LyBubyBuZWVkIGZvciBhcHAgZW50cnkgZHVyaW5nIHRlc3RzCitkZWxldGUgd2VicGFja0NvbmZp
Zy5lbnRyeQorCittb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb25maWcKZGlmZiAtLWdpdCBhL1dl
YnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3Z1ZWpzLWNsaS9jb25maWcvZGV2LmVudi5qcyBiL1dlYnNp
dGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL3Z1ZWpzLWNsaS9jb25maWcvZGV2LmVudi5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lZmVhZDdjODQwYTE1ZjJhMDZlZDI4ZmNmMTMwNDI5M2E5YjcwNGUwCi0tLSAvZGV2L251bGwK
KysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvdnVlanMtY2xpL2NvbmZpZy9kZXYuZW52Lmpz
CkBAIC0wLDAgKzEsNiBAQAordmFyIG1lcmdlID0gcmVxdWlyZSgnd2VicGFjay1tZXJnZScpCit2
YXIgcHJvZEVudiA9IHJlcXVpcmUoJy4vcHJvZC5lbnYnKQorCittb2R1bGUuZXhwb3J0cyA9IG1l
cmdlKHByb2RFbnYsIHsKKyAgTk9ERV9FTlY6ICciZGV2ZWxvcG1lbnQiJworfSkKZGlmZiAtLWdp
dCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3Z1ZWpzLWNsaS9jb25maWcvaW5kZXguanMgYi9X
ZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZj
L2FyY2hpdGVjdHVyZS1leGFtcGxlcy92dWVqcy1jbGkvY29uZmlnL2luZGV4LmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjEwZDgyZDUyNTBkOWQ2MDkyNjFjMGJiNjA1ZmUzMTc5N2I1MzIxOWYKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy92dWVqcy1jbGkvY29uZmlnL2luZGV4Lmpz
CkBAIC0wLDAgKzEsMzIgQEAKKy8vIHNlZSBodHRwOi8vdnVlanMtdGVtcGxhdGVzLmdpdGh1Yi5p
by93ZWJwYWNrIGZvciBkb2N1bWVudGF0aW9uLgordmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJykK
KworbW9kdWxlLmV4cG9ydHMgPSB7CisgIGJ1aWxkOiB7CisgICAgZW52OiByZXF1aXJlKCcuL3By
b2QuZW52JyksCisgICAgaW5kZXg6IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLi9kaXN0L2lu
ZGV4Lmh0bWwnKSwKKyAgICBhc3NldHNSb290OiBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi4v
ZGlzdCcpLAorICAgIGFzc2V0c1N1YkRpcmVjdG9yeTogJ3N0YXRpYycsCisgICAgYXNzZXRzUHVi
bGljUGF0aDogJy4vJywKKyAgICBwcm9kdWN0aW9uU291cmNlTWFwOiB0cnVlLAorICAgIC8vIEd6
aXAgb2ZmIGJ5IGRlZmF1bHQgYXMgbWFueSBwb3B1bGFyIHN0YXRpYyBob3N0cyBzdWNoIGFzCisg
ICAgLy8gU3VyZ2Ugb3IgTmV0bGlmeSBhbHJlYWR5IGd6aXAgYWxsIHN0YXRpYyBhc3NldHMgZm9y
IHlvdS4KKyAgICAvLyBCZWZvcmUgc2V0dGluZyB0byBgdHJ1ZWAsIG1ha2Ugc3VyZSB0bzoKKyAg
ICAvLyBucG0gaW5zdGFsbCAtLXNhdmUtZGV2IGNvbXByZXNzaW9uLXdlYnBhY2stcGx1Z2luCisg
ICAgcHJvZHVjdGlvbkd6aXA6IGZhbHNlLAorICAgIHByb2R1Y3Rpb25HemlwRXh0ZW5zaW9uczog
WydqcycsICdjc3MnXQorICB9LAorICBkZXY6IHsKKyAgICBlbnY6IHJlcXVpcmUoJy4vZGV2LmVu
dicpLAorICAgIHBvcnQ6IDgwODAsCisgICAgYXNzZXRzU3ViRGlyZWN0b3J5OiAnc3RhdGljJywK
KyAgICBhc3NldHNQdWJsaWNQYXRoOiAnLycsCisgICAgcHJveHlUYWJsZToge30sCisgICAgLy8g
Q1NTIFNvdXJjZW1hcHMgb2ZmIGJ5IGRlZmF1bHQgYmVjYXVzZSByZWxhdGl2ZSBwYXRocyBhcmUg
ImJ1Z2d5IgorICAgIC8vIHdpdGggdGhpcyBvcHRpb24sIGFjY29yZGluZyB0byB0aGUgQ1NTLUxv
YWRlciBSRUFETUUKKyAgICAvLyAoaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2svY3NzLWxvYWRl
ciNzb3VyY2VtYXBzKQorICAgIC8vIEluIG91ciBleHBlcmllbmNlLCB0aGV5IGdlbmVyYWxseSB3
b3JrIGFzIGV4cGVjdGVkLAorICAgIC8vIGp1c3QgYmUgYXdhcmUgb2YgdGhpcyBpc3N1ZSB3aGVu
IGVuYWJsaW5nIHRoaXMgb3B0aW9uLgorICAgIGNzc1NvdXJjZU1hcDogZmFsc2UKKyAgfQorfQpk
aWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvdnVlanMtY2xpL2NvbmZpZy9wcm9k
LmVudi5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3Z1ZWpzLWNsaS9jb25maWcvcHJvZC5l
bnYuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNzczZDI2M2QzMTI2MGJlMjdkMmQ3ZTNmYmFhNWMxN2FlNGU3MzJm
NgotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0
ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3Z1ZWpzLWNsaS9j
b25maWcvcHJvZC5lbnYuanMKQEAgLTAsMCArMSwzIEBACittb2R1bGUuZXhwb3J0cyA9IHsKKyAg
Tk9ERV9FTlY6ICcicHJvZHVjdGlvbiInCit9CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2Vy
YmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy92dWVqcy1jbGkvZGlzdC9pbmRleC5odG1sIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNo
Lm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvdnVlanMtY2xpL2Rpc3QvaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wOGMxMTZmYmM3YWU5ZDVm
Y2ZhYTYwMzZhY2RkMDdlNDNjYzE0MGI3Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJv
d3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1
cmUtZXhhbXBsZXMvdnVlanMtY2xpL2Rpc3QvaW5kZXguaHRtbApAQCAtMCwwICsxIEBACis8IURP
Q1RZUEUgaHRtbD48aHRtbD48aGVhZD48bWV0YSBjaGFyc2V0PXV0Zi04Pjx0aXRsZT52dWUtY2xp
LXRvZG9tdmM8L3RpdGxlPjxsaW5rIGhyZWY9Li9zdGF0aWMvY3NzL2FwcC41YjQ3MDQwYTIzZWMz
ZmNiNzgwMzdkZTM5OGM1MzU1Ny5jc3MgcmVsPXN0eWxlc2hlZXQ+PC9oZWFkPjxib2R5PjxkaXYg
aWQ9YXBwPjwvZGl2PjxzY3JpcHQgdHlwZT10ZXh0L2phdmFzY3JpcHQgc3JjPS4vc3RhdGljL2pz
L21hbmlmZXN0LmFhOTk3OGFhOTZlZTk0OGYyYTRjLmpzPjwvc2NyaXB0PjxzY3JpcHQgdHlwZT10
ZXh0L2phdmFzY3JpcHQgc3JjPS4vc3RhdGljL2pzL3ZlbmRvci5lNzAwODAwMWE4YmVkMDA5YmJm
MS5qcz48L3NjcmlwdD48c2NyaXB0IHR5cGU9dGV4dC9qYXZhc2NyaXB0IHNyYz0uL3N0YXRpYy9q
cy9hcHAuZTZjMDEwZDU3ZDUzNTM3ZjRhZDIuanM+PC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4KXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVu
Y2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy92dWVqcy1jbGkvZGlzdC9zdGF0aWMvY3NzL2FwcC41YjQ3MDQwYTIzZWMzZmNiNzgwMzdk
ZTM5OGM1MzU1Ny5jc3MgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4x
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy92dWVqcy1jbGkvZGlzdC9z
dGF0aWMvY3NzL2FwcC41YjQ3MDQwYTIzZWMzZmNiNzgwMzdkZTM5OGM1MzU1Ny5jc3MKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMzRmZjVmNTU0Njc1ODk3MDRiNGYzNjkxOWM5NzQ5ZWZmYTdiZjQwMAotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3Z1ZWpzLWNsaS9kaXN0L3N0YXRpYy9j
c3MvYXBwLjViNDcwNDBhMjNlYzNmY2I3ODAzN2RlMzk4YzUzNTU3LmNzcwpAQCAtMCwwICsxIEBA
Citib2R5LGJ1dHRvbixodG1se21hcmdpbjowO3BhZGRpbmc6MH1idXR0b257Ym9yZGVyOjA7YmFj
a2dyb3VuZDpub25lO2ZvbnQtc2l6ZToxMDAlO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2ZvbnQt
ZmFtaWx5OmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdDtjb2xvcjppbmhlcml0Oy13ZWJraXQt
YXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZTstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFu
dGlhbGlhc2VkfWJvZHksYnV0dG9uey1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZX1i
b2R5e2ZvbnQ6MTRweCBIZWx2ZXRpY2EgTmV1ZSxIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZjts
aW5lLWhlaWdodDoxLjRlbTtiYWNrZ3JvdW5kOiNmNWY1ZjU7Y29sb3I6IzRkNGQ0ZDttaW4td2lk
dGg6MjMwcHg7bWF4LXdpZHRoOjU1MHB4O21hcmdpbjowIGF1dG87LXdlYmtpdC1mb250LXNtb290
aGluZzphbnRpYWxpYXNlZDtmb250LXdlaWdodDozMDB9OmZvY3Vze291dGxpbmU6MH0uaGlkZGVu
e2Rpc3BsYXk6bm9uZX0udG9kb2FwcHtiYWNrZ3JvdW5kOiNmZmY7bWFyZ2luOjEzMHB4IDAgNDBw
eDtwb3NpdGlvbjpyZWxhdGl2ZTtib3gtc2hhZG93OjAgMnB4IDRweCAwIHJnYmEoMCwwLDAsLjIp
LDAgMjVweCA1MHB4IDAgcmdiYSgwLDAsMCwuMSl9LnRvZG9hcHAgaW5wdXQ6Oi13ZWJraXQtaW5w
dXQtcGxhY2Vob2xkZXJ7Zm9udC1zdHlsZTppdGFsaWM7Zm9udC13ZWlnaHQ6MzAwO2NvbG9yOiNl
NmU2ZTZ9LnRvZG9hcHAgaW5wdXQ6Oi1tb3otcGxhY2Vob2xkZXJ7Zm9udC1zdHlsZTppdGFsaWM7
Zm9udC13ZWlnaHQ6MzAwO2NvbG9yOiNlNmU2ZTZ9LnRvZG9hcHAgaW5wdXQ6OmlucHV0LXBsYWNl
aG9sZGVye2ZvbnQtc3R5bGU6aXRhbGljO2ZvbnQtd2VpZ2h0OjMwMDtjb2xvcjojZTZlNmU2fS50
b2RvYXBwIGgxe3Bvc2l0aW9uOmFic29sdXRlO3RvcDotMTU1cHg7d2lkdGg6MTAwJTtmb250LXNp
emU6MTAwcHg7Zm9udC13ZWlnaHQ6MTAwO3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOnJnYmEoMTc1
LDQ3LDQ3LC4xNSk7LXdlYmtpdC10ZXh0LXJlbmRlcmluZzpvcHRpbWl6ZUxlZ2liaWxpdHk7LW1v
ei10ZXh0LXJlbmRlcmluZzpvcHRpbWl6ZUxlZ2liaWxpdHk7dGV4dC1yZW5kZXJpbmc6b3B0aW1p
emVMZWdpYmlsaXR5fS5lZGl0LC5uZXctdG9kb3twb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW46MDt3
aWR0aDoxMDAlO2ZvbnQtc2l6ZToyNHB4O2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC13ZWlnaHQ6
aW5oZXJpdDtsaW5lLWhlaWdodDoxLjRlbTtib3JkZXI6MDtjb2xvcjppbmhlcml0O3BhZGRpbmc6
NnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3gtc2hhZG93Omluc2V0IDAgLTFweCA1cHggMCBy
Z2JhKDAsMCwwLC4yKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7LXdlYmtpdC1mb250LXNtb290aGlu
ZzphbnRpYWxpYXNlZDstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGV9Lm5ldy10b2Rv
e3BhZGRpbmc6MTZweCAxNnB4IDE2cHggNjBweDtib3JkZXI6bm9uZTtiYWNrZ3JvdW5kOnJnYmEo
MCwwLDAsLjAwMyk7Ym94LXNoYWRvdzppbnNldCAwIC0ycHggMXB4IHJnYmEoMCwwLDAsLjAzKX0u
bWFpbntwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjI7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U2
ZTZlNn0udG9nZ2xlLWFsbHt0ZXh0LWFsaWduOmNlbnRlcjtib3JkZXI6bm9uZTtvcGFjaXR5OjA7
cG9zaXRpb246YWJzb2x1dGV9LnRvZ2dsZS1hbGwrbGFiZWx7d2lkdGg6NjBweDtoZWlnaHQ6MzRw
eDtmb250LXNpemU6MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTUycHg7bGVmdDotMTNweDstd2Vi
a2l0LXRyYW5zZm9ybTpyb3RhdGUoOTBkZWcpO3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfS50b2dn
bGUtYWxsK2xhYmVsOmJlZm9yZXtjb250ZW50OiJcMjc2RiI7Zm9udC1zaXplOjIycHg7Y29sb3I6
I2U2ZTZlNjtwYWRkaW5nOjEwcHggMjdweH0udG9nZ2xlLWFsbDpjaGVja2VkK2xhYmVsOmJlZm9y
ZXtjb2xvcjojNzM3MzczfS50b2RvLWxpc3R7bWFyZ2luOjA7cGFkZGluZzowO2xpc3Qtc3R5bGU6
bm9uZX0udG9kby1saXN0IGxpe3Bvc2l0aW9uOnJlbGF0aXZlO2ZvbnQtc2l6ZToyNHB4O2JvcmRl
ci1ib3R0b206MXB4IHNvbGlkICNlZGVkZWR9LnRvZG8tbGlzdCBsaTpsYXN0LWNoaWxke2JvcmRl
ci1ib3R0b206bm9uZX0udG9kby1saXN0IGxpLmVkaXRpbmd7Ym9yZGVyLWJvdHRvbTpub25lO3Bh
ZGRpbmc6MH0udG9kby1saXN0IGxpLmVkaXRpbmcgLmVkaXR7ZGlzcGxheTpibG9jazt3aWR0aDo1
MDZweDtwYWRkaW5nOjEycHggMTZweDttYXJnaW46MCAwIDAgNDNweH0udG9kby1saXN0IGxpLmVk
aXRpbmcgLnZpZXd7ZGlzcGxheTpub25lfS50b2RvLWxpc3QgbGkgLnRvZ2dsZXt0ZXh0LWFsaWdu
OmNlbnRlcjt3aWR0aDo0MHB4O2hlaWdodDphdXRvO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2Jv
dHRvbTowO21hcmdpbjphdXRvIDA7Ym9yZGVyOm5vbmU7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7
YXBwZWFyYW5jZTpub25lO29wYWNpdHk6MH0udG9kby1saXN0IGxpIC50b2dnbGUrbGFiZWx7YmFj
a2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LCUzQ3N2ZyUyMHhtbG5z
JTNEJTIyaHR0cCUzQS8vd3d3LnczLm9yZy8yMDAwL3N2ZyUyMiUyMHdpZHRoJTNEJTIyNDAlMjIl
MjBoZWlnaHQlM0QlMjI0MCUyMiUyMHZpZXdCb3glM0QlMjItMTAlMjAtMTglMjAxMDAlMjAxMzUl
MjIlM0UlM0NjaXJjbGUlMjBjeCUzRCUyMjUwJTIyJTIwY3klM0QlMjI1MCUyMiUyMHIlM0QlMjI1
MCUyMiUyMGZpbGwlM0QlMjJub25lJTIyJTIwc3Ryb2tlJTNEJTIyJTIzZWRlZGVkJTIyJTIwc3Ry
b2tlLXdpZHRoJTNEJTIyMyUyMi8lM0UlM0Mvc3ZnJTNFIik7YmFja2dyb3VuZC1yZXBlYXQ6bm8t
cmVwZWF0O2JhY2tncm91bmQtcG9zaXRpb246MH0udG9kby1saXN0IGxpIC50b2dnbGU6Y2hlY2tl
ZCtsYWJlbHtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsJTND
c3ZnJTIweG1sbnMlM0QlMjJodHRwJTNBLy93d3cudzMub3JnLzIwMDAvc3ZnJTIyJTIwd2lkdGgl
M0QlMjI0MCUyMiUyMGhlaWdodCUzRCUyMjQwJTIyJTIwdmlld0JveCUzRCUyMi0xMCUyMC0xOCUy
MDEwMCUyMDEzNSUyMiUzRSUzQ2NpcmNsZSUyMGN4JTNEJTIyNTAlMjIlMjBjeSUzRCUyMjUwJTIy
JTIwciUzRCUyMjUwJTIyJTIwZmlsbCUzRCUyMm5vbmUlMjIlMjBzdHJva2UlM0QlMjIlMjNiZGRh
ZDUlMjIlMjBzdHJva2Utd2lkdGglM0QlMjIzJTIyLyUzRSUzQ3BhdGglMjBmaWxsJTNEJTIyJTIz
NWRjMmFmJTIyJTIwZCUzRCUyMk03MiUyMDI1TDQyJTIwNzElMjAyNyUyMDU2bC00JTIwNCUyMDIw
JTIwMjAlMjAzNC01MnolMjIvJTNFJTNDL3N2ZyUzRSIpfS50b2RvLWxpc3QgbGkgbGFiZWx7d29y
ZC1icmVhazpicmVhay1hbGw7cGFkZGluZzoxNXB4IDE1cHggMTVweCA2MHB4O2Rpc3BsYXk6Ymxv
Y2s7bGluZS1oZWlnaHQ6MS4yO3RyYW5zaXRpb246Y29sb3IgLjRzfS50b2RvLWxpc3QgbGkuY29t
cGxldGVkIGxhYmVse2NvbG9yOiNkOWQ5ZDk7dGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3VnaH0u
dG9kby1saXN0IGxpIC5kZXN0cm95e2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6
MDtyaWdodDoxMHB4O2JvdHRvbTowO3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7bWFyZ2luOmF1dG8g
MDtmb250LXNpemU6MzBweDtjb2xvcjojY2M5YTlhO21hcmdpbi1ib3R0b206MTFweDt0cmFuc2l0
aW9uOmNvbG9yIC4ycyBlYXNlLW91dH0udG9kby1saXN0IGxpIC5kZXN0cm95OmhvdmVye2NvbG9y
OiNhZjViNWV9LnRvZG8tbGlzdCBsaSAuZGVzdHJveTphZnRlcntjb250ZW50OiJcRDcifS50b2Rv
LWxpc3QgbGk6aG92ZXIgLmRlc3Ryb3l7ZGlzcGxheTpibG9ja30udG9kby1saXN0IGxpIC5lZGl0
e2Rpc3BsYXk6bm9uZX0udG9kby1saXN0IGxpLmVkaXRpbmc6bGFzdC1jaGlsZHttYXJnaW4tYm90
dG9tOi0xcHh9LmZvb3Rlcntjb2xvcjojNzc3O3BhZGRpbmc6MTBweCAxNXB4O2hlaWdodDoyMHB4
O3RleHQtYWxpZ246Y2VudGVyO2JvcmRlci10b3A6MXB4IHNvbGlkICNlNmU2ZTZ9LmZvb3Rlcjpi
ZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO2JvdHRvbTowO2xlZnQ6
MDtoZWlnaHQ6NTBweDtvdmVyZmxvdzpoaWRkZW47Ym94LXNoYWRvdzowIDFweCAxcHggcmdiYSgw
LDAsMCwuMiksMCA4cHggMCAtM3B4ICNmNmY2ZjYsMCA5cHggMXB4IC0zcHggcmdiYSgwLDAsMCwu
MiksMCAxNnB4IDAgLTZweCAjZjZmNmY2LDAgMTdweCAycHggLTZweCByZ2JhKDAsMCwwLC4yKX0u
dG9kby1jb3VudHtmbG9hdDpsZWZ0O3RleHQtYWxpZ246bGVmdH0udG9kby1jb3VudCBzdHJvbmd7
Zm9udC13ZWlnaHQ6MzAwfS5maWx0ZXJze21hcmdpbjowO3BhZGRpbmc6MDtsaXN0LXN0eWxlOm5v
bmU7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDtsZWZ0OjB9LmZpbHRlcnMgbGl7ZGlzcGxheTpp
bmxpbmV9LmZpbHRlcnMgbGkgYXtjb2xvcjppbmhlcml0O21hcmdpbjozcHg7cGFkZGluZzozcHgg
N3B4O3RleHQtZGVjb3JhdGlvbjpub25lO2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnQ7Ym9y
ZGVyLXJhZGl1czozcHh9LmZpbHRlcnMgbGkgYTpob3Zlcntib3JkZXItY29sb3I6cmdiYSgxNzUs
NDcsNDcsLjEpfS5maWx0ZXJzIGxpIGEuc2VsZWN0ZWR7Ym9yZGVyLWNvbG9yOnJnYmEoMTc1LDQ3
LDQ3LC4yKX0uY2xlYXItY29tcGxldGVkLGh0bWwgLmNsZWFyLWNvbXBsZXRlZDphY3RpdmV7Zmxv
YXQ6cmlnaHQ7cG9zaXRpb246cmVsYXRpdmU7bGluZS1oZWlnaHQ6MjBweDt0ZXh0LWRlY29yYXRp
b246bm9uZTtjdXJzb3I6cG9pbnRlcn0uY2xlYXItY29tcGxldGVkOmhvdmVye3RleHQtZGVjb3Jh
dGlvbjp1bmRlcmxpbmV9LmluZm97bWFyZ2luOjY1cHggYXV0byAwO2NvbG9yOiNiZmJmYmY7Zm9u
dC1zaXplOjEwcHg7dGV4dC1zaGFkb3c6MCAxcHggMCBoc2xhKDAsMCUsMTAwJSwuNSk7dGV4dC1h
bGlnbjpjZW50ZXJ9LmluZm8gcHtsaW5lLWhlaWdodDoxfS5pbmZvIGF7Y29sb3I6aW5oZXJpdDt0
ZXh0LWRlY29yYXRpb246bm9uZTtmb250LXdlaWdodDo0MDB9LmluZm8gYTpob3Zlcnt0ZXh0LWRl
Y29yYXRpb246dW5kZXJsaW5lfUBtZWRpYSBzY3JlZW4gYW5kICgtd2Via2l0LW1pbi1kZXZpY2Ut
cGl4ZWwtcmF0aW86MCl7LnRvZG8tbGlzdCBsaSAudG9nZ2xlLC50b2dnbGUtYWxse2JhY2tncm91
bmQ6bm9uZX0udG9kby1saXN0IGxpIC50b2dnbGV7aGVpZ2h0OjQwcHh9fUBtZWRpYSAobWF4LXdp
ZHRoOjQzMHB4KXsuZm9vdGVye2hlaWdodDo1MHB4fS5maWx0ZXJze2JvdHRvbToxMHB4fX0KXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVu
Y2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy92dWVqcy1jbGkvZGlzdC9zdGF0aWMvY3NzL2FwcC41YjQ3MDQwYTIzZWMzZmNiNzgwMzdk
ZTM5OGM1MzU1Ny5jc3MubWFwIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRl
cjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvdnVlanMtY2xpL2Rp
c3Qvc3RhdGljL2Nzcy9hcHAuNWI0NzA0MGEyM2VjM2ZjYjc4MDM3ZGUzOThjNTM1NTcuY3NzLm1h
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi43NzkwZjJhYTg3ZWJmNDAzYjU4YTE2NmFmZDE4NjUzYWU3ZDNhNmNhCi0t
LSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIu
MS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvdnVlanMtY2xpL2Rpc3Qv
c3RhdGljL2Nzcy9hcHAuNWI0NzA0MGEyM2VjM2ZjYjc4MDM3ZGUzOThjNTM1NTcuY3NzLm1hcApA
QCAtMCwwICsxIEBACit7InZlcnNpb24iOjMsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9j
b21wb25lbnRzL3RvZG8uY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLGlCQUhJLFNB
Q0EsU0FBVyxDQWdCZCxPQVhHLFNBQ0EsZ0JBQ0EsZUFDQSx3QkFDQSxvQkFDQSxvQkFDQSxjQUNB
LHdCQUNBLGdCQUNBLGtDQUFvQyxDQUd4QyxZQUZJLGlDQUFtQyxDQWF0QyxLQVZHLG9EQUNBLGtC
QUNBLG1CQUNBLGNBQ0EsZ0JBQ0EsZ0JBQ0EsY0FDQSxtQ0FFQSxlQUFpQixDQUVyQixPQUNJLFNB
QVcsQ0FFZixRQUNJLFlBQWMsQ0FFbEIsU0FDSSxnQkFDQSxvQkFDQSxrQkFDQSxrRUFDNkMsQ0FF
akQsMENBQ0ksa0JBQ0EsZ0JBQ0EsYUFBZSxDQUVuQixpQ0FDSSxrQkFDQSxnQkFDQSxhQUFlLENB
RW5CLGtDQUNJLGtCQUNBLGdCQUNBLGFBQWUsQ0FFbkIsWUFDSSxrQkFDQSxXQUNBLFdBQ0EsZ0JB
Q0EsZ0JBQ0Esa0JBQ0EsMEJBQ0EsMENBQ0EsdUNBQ0EsaUNBQW1DLENBRXZDLGdCQUVJLGtCQUNB
LFNBQ0EsV0FDQSxlQUNBLG9CQUNBLG9CQUNBLGtCQUNBLFNBQ0EsY0FDQSxZQUNBLHNCQUNBLDZD
QUNBLHNCQUNBLG1DQUNBLGlDQUFtQyxDQUV2QyxVQUNJLDRCQUNBLFlBQ0EsNEJBQ0EsMkNBQThD
LENBRWxELE1BQ0ksa0JBQ0EsVUFDQSw0QkFBOEIsQ0FFbEMsWUFDSSxrQkFDQSxZQUNBLFVBQ0Es
aUJBQW1CLENBRXZCLGtCQUNJLFdBQ0EsWUFDQSxZQUNBLGtCQUNBLFVBQ0EsV0FDQSxnQ0FDQSx1
QkFBeUIsQ0FFN0IseUJBQ0ksZ0JBQ0EsZUFDQSxjQUNBLGlCQUE2QixDQUVqQyxpQ0FDSSxhQUFl
LENBRW5CLFdBQ0ksU0FDQSxVQUNBLGVBQWlCLENBRXJCLGNBQ0ksa0JBQ0EsZUFDQSwrQkFBaUMs
Q0FFckMseUJBQ0ksa0JBQW9CLENBRXhCLHNCQUNJLG1CQUNBLFNBQVcsQ0FFZiw0QkFDSSxjQUNB
LFlBQ0Esa0JBQ0EsaUJBQW1CLENBRXZCLDRCQUNJLFlBQWMsQ0FFbEIsc0JBQ0ksa0JBQ0EsV0FF
QSxZQUNBLGtCQUNBLE1BQ0EsU0FDQSxjQUNBLFlBQ0Esd0JBQ0EsZ0JBR0EsU0FBVyxDQUVmLDRC
QUtJLG9VQUNBLDRCQUNBLHFCQUFpQyxDQUVyQyxvQ0FDSSx3YUFBMGEsQ0FFOWEsb0JBQ0kscUJB
Q0EsNEJBQ0EsY0FDQSxnQkFDQSxvQkFBdUIsQ0FFM0IsOEJBQ0ksY0FDQSw0QkFBOEIsQ0FFbEMs
dUJBQ0ksYUFDQSxrQkFDQSxNQUNBLFdBQ0EsU0FDQSxXQUNBLFlBQ0EsY0FDQSxlQUNBLGNBQ0Es
bUJBQ0EsNkJBQWdDLENBRXBDLDZCQUNJLGFBQWUsQ0FFbkIsNkJBQ0ksYUFBYSxDQUVqQiw2QkFD
SSxhQUFlLENBRW5CLG9CQUNJLFlBQWMsQ0FFbEIsaUNBQ0ksa0JBQW9CLENBRXhCLFFBQ0ksV0FD
QSxrQkFDQSxZQUNBLGtCQUNBLDRCQUE4QixDQUVsQyxlQUNJLFdBQ0Esa0JBQ0EsUUFDQSxTQUNB
LE9BQ0EsWUFDQSxnQkFDQSwySUFJK0MsQ0FFbkQsWUFDSSxXQUNBLGVBQWlCLENBRXJCLG1CQUNJ
LGVBQWlCLENBRXJCLFNBQ0ksU0FDQSxVQUNBLGdCQUNBLGtCQUNBLFFBQ0EsTUFBUSxDQUVaLFlB
Q0ksY0FBZ0IsQ0FFcEIsY0FDSSxjQUNBLFdBQ0EsZ0JBQ0EscUJBQ0EsNkJBQ0EsaUJBQW1CLENB
RXZCLG9CQUNJLCtCQUFxQyxDQUV6Qyx1QkFDSSwrQkFBcUMsQ0FFekMsOENBRUksWUFDQSxrQkFD
QSxpQkFDQSxxQkFDQSxjQUFnQixDQUVwQix1QkFDSSx5QkFBMkIsQ0FFL0IsTUFDSSxtQkFDQSxj
QUNBLGVBQ0EsdUNBQ0EsaUJBQW1CLENBRXZCLFFBQ0ksYUFBZSxDQUVuQixRQUNJLGNBQ0EscUJB
Q0EsZUFBaUIsQ0FFckIsY0FDSSx5QkFBMkIsQ0FPL0IscURBQ0Esa0NBRVEsZUFBaUIsQ0FFekIs
c0JBQ1EsV0FBYSxDQUNwQixDQUVELHlCQUNBLFFBQ1EsV0FBYSxDQUVyQixTQUNRLFdBQWEsQ0FD
cEIiLCJmaWxlIjoic3RhdGljL2Nzcy9hcHAuNWI0NzA0MGEyM2VjM2ZjYjc4MDM3ZGUzOThjNTM1
NTcuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiXG5odG1sLFxuYm9keSB7XG4gICAgbWFyZ2luOiAw
O1xuICAgIHBhZGRpbmc6IDA7XG59XG5idXR0b24ge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRk
aW5nOiAwO1xuICAgIGJvcmRlcjogMDtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIGZvbnQt
c2l6ZTogMTAwJTtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG4gICAgZm9udC1mYW1p
bHk6IGluaGVyaXQ7XG4gICAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7XG4gICAgY29sb3I6IGluaGVy
aXQ7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAgIGFwcGVhcmFuY2U6IG5vbmU7
XG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gICAgLW1vei1vc3gt
Zm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbn1cbmJvZHkge1xuICAgIGZvbnQ6IDE0cHggJ0hl
bHZldGljYSBOZXVlJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBsaW5lLWhl
aWdodDogMS40ZW07XG4gICAgYmFja2dyb3VuZDogI2Y1ZjVmNTtcbiAgICBjb2xvcjogIzRkNGQ0
ZDtcbiAgICBtaW4td2lkdGg6IDIzMHB4O1xuICAgIG1heC13aWR0aDogNTUwcHg7XG4gICAgbWFy
Z2luOiAwIGF1dG87XG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4g
ICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbiAgICBmb250LXdlaWdodDog
MzAwO1xufVxuOmZvY3VzIHtcbiAgICBvdXRsaW5lOiAwO1xufVxuLmhpZGRlbiB7XG4gICAgZGlz
cGxheTogbm9uZTtcbn1cbi50b2RvYXBwIHtcbiAgICBiYWNrZ3JvdW5kOiAjZmZmO1xuICAgIG1h
cmdpbjogMTMwcHggMCA0MHB4IDA7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGJveC1z
aGFkb3c6IDAgMnB4IDRweCAwIHJnYmEoMCwgMCwgMCwgMC4yKSxcbiAgICAgICAgICAgICAgICAw
IDI1cHggNTBweCAwIHJnYmEoMCwgMCwgMCwgMC4xKTtcbn1cbi50b2RvYXBwIGlucHV0Ojotd2Vi
a2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgZm9u
dC13ZWlnaHQ6IDMwMDtcbiAgICBjb2xvcjogI2U2ZTZlNjtcbn1cbi50b2RvYXBwIGlucHV0Ojot
bW96LXBsYWNlaG9sZGVyIHtcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgZm9udC13ZWln
aHQ6IDMwMDtcbiAgICBjb2xvcjogI2U2ZTZlNjtcbn1cbi50b2RvYXBwIGlucHV0OjppbnB1dC1w
bGFjZWhvbGRlciB7XG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgIGZvbnQtd2VpZ2h0OiAz
MDA7XG4gICAgY29sb3I6ICNlNmU2ZTY7XG59XG4udG9kb2FwcCBoMSB7XG4gICAgcG9zaXRpb246
IGFic29sdXRlO1xuICAgIHRvcDogLTE1NXB4O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGZvbnQt
c2l6ZTogMTAwcHg7XG4gICAgZm9udC13ZWlnaHQ6IDEwMDtcbiAgICB0ZXh0LWFsaWduOiBjZW50
ZXI7XG4gICAgY29sb3I6IHJnYmEoMTc1LCA0NywgNDcsIDAuMTUpO1xuICAgIC13ZWJraXQtdGV4
dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTtcbiAgICAtbW96LXRleHQtcmVuZGVyaW5n
OiBvcHRpbWl6ZUxlZ2liaWxpdHk7XG4gICAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJp
bGl0eTtcbn1cbi5uZXctdG9kbyxcbi5lZGl0IHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4g
ICAgbWFyZ2luOiAwO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGZvbnQtc2l6ZTogMjRweDtcbiAg
ICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgICBmb250LXdlaWdodDogaW5oZXJpdDtcbiAgICBs
aW5lLWhlaWdodDogMS40ZW07XG4gICAgYm9yZGVyOiAwO1xuICAgIGNvbG9yOiBpbmhlcml0O1xu
ICAgIHBhZGRpbmc6IDZweDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjOTk5O1xuICAgIGJveC1z
aGFkb3c6IGluc2V0IDAgLTFweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMik7XG4gICAgYm94LXNp
emluZzogYm9yZGVyLWJveDtcbiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNl
ZDtcbiAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xufVxuLm5ldy10b2Rv
IHtcbiAgICBwYWRkaW5nOiAxNnB4IDE2cHggMTZweCA2MHB4O1xuICAgIGJvcmRlcjogbm9uZTtc
biAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMDAzKTtcbiAgICBib3gtc2hhZG93OiBp
bnNldCAwIC0ycHggMXB4IHJnYmEoMCwwLDAsMC4wMyk7XG59XG4ubWFpbiB7XG4gICAgcG9zaXRp
b246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDI7XG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlk
ICNlNmU2ZTY7XG59XG4udG9nZ2xlLWFsbCB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAg
IGJvcmRlcjogbm9uZTsgLyogTW9iaWxlIFNhZmFyaSAqL1xuICAgIG9wYWNpdHk6IDA7XG4gICAg
cG9zaXRpb246IGFic29sdXRlO1xufVxuLnRvZ2dsZS1hbGwgKyBsYWJlbCB7XG4gICAgd2lkdGg6
IDYwcHg7XG4gICAgaGVpZ2h0OiAzNHB4O1xuICAgIGZvbnQtc2l6ZTogMDtcbiAgICBwb3NpdGlv
bjogYWJzb2x1dGU7XG4gICAgdG9wOiAtNTJweDtcbiAgICBsZWZ0OiAtMTNweDtcbiAgICAtd2Vi
a2l0LXRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRl
Zyk7XG59XG4udG9nZ2xlLWFsbCArIGxhYmVsOmJlZm9yZSB7XG4gICAgY29udGVudDogJ+Kdryc7
XG4gICAgZm9udC1zaXplOiAyMnB4O1xuICAgIGNvbG9yOiAjZTZlNmU2O1xuICAgIHBhZGRpbmc6
IDEwcHggMjdweCAxMHB4IDI3cHg7XG59XG4udG9nZ2xlLWFsbDpjaGVja2VkICsgbGFiZWw6YmVm
b3JlIHtcbiAgICBjb2xvcjogIzczNzM3Mztcbn1cbi50b2RvLWxpc3Qge1xuICAgIG1hcmdpbjog
MDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG59XG4udG9kby1saXN0
IGxpIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZm9udC1zaXplOiAyNHB4O1xuICAg
IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWRlZGVkO1xufVxuLnRvZG8tbGlzdCBsaTpsYXN0
LWNoaWxkIHtcbiAgICBib3JkZXItYm90dG9tOiBub25lO1xufVxuLnRvZG8tbGlzdCBsaS5lZGl0
aW5nIHtcbiAgICBib3JkZXItYm90dG9tOiBub25lO1xuICAgIHBhZGRpbmc6IDA7XG59XG4udG9k
by1saXN0IGxpLmVkaXRpbmcgLmVkaXQge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRo
OiA1MDZweDtcbiAgICBwYWRkaW5nOiAxMnB4IDE2cHg7XG4gICAgbWFyZ2luOiAwIDAgMCA0M3B4
O1xufVxuLnRvZG8tbGlzdCBsaS5lZGl0aW5nIC52aWV3IHtcbiAgICBkaXNwbGF5OiBub25lO1xu
fVxuLnRvZG8tbGlzdCBsaSAudG9nZ2xlIHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAg
d2lkdGg6IDQwcHg7XG4gICAgLyogYXV0bywgc2luY2Ugbm9uLVdlYktpdCBicm93c2VycyBkb2Vz
bid0IHN1cHBvcnQgaW5wdXQgc3R5bGluZyAqL1xuICAgIGhlaWdodDogYXV0bztcbiAgICBwb3Np
dGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBtYXJnaW46
IGF1dG8gMDtcbiAgICBib3JkZXI6IG5vbmU7IC8qIE1vYmlsZSBTYWZhcmkgKi9cbiAgICAtd2Vi
a2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgYXBwZWFyYW5jZTogbm9uZTtcbn1cbi50b2RvLWxp
c3QgbGkgLnRvZ2dsZSB7XG4gICAgb3BhY2l0eTogMDtcbn1cbi50b2RvLWxpc3QgbGkgLnRvZ2ds
ZSArIGxhYmVsIHtcbiAgICAvKlxuICAgICAgICBGaXJlZm94IHJlcXVpcmVzIGAjYCB0byBiZSBl
c2NhcGVkIC0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTIy
NDMzXG4gICAgICAgIElFIGFuZCBFZGdlIHJlcXVpcmVzICpldmVyeXRoaW5nKiB0byBiZSBlc2Nh
cGVkIHRvIHJlbmRlciwgc28gd2UgZG8gdGhhdCBpbnN0ZWFkIG9mIGp1c3QgdGhlIGAjYCAtIGh0
dHBzOi8vZGV2ZWxvcGVyLm1pY3Jvc29mdC5jb20vZW4tdXMvbWljcm9zb2Z0LWVkZ2UvcGxhdGZv
cm0vaXNzdWVzLzcxNTc0NTkvXG4gICAgKi9cbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2Rh
dGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LCUzQ3N2ZyUyMHhtbG5zJTNEJTIyaHR0cCUzQS8vd3d3Lncz
Lm9yZy8yMDAwL3N2ZyUyMiUyMHdpZHRoJTNEJTIyNDAlMjIlMjBoZWlnaHQlM0QlMjI0MCUyMiUy
MHZpZXdCb3glM0QlMjItMTAlMjAtMTglMjAxMDAlMjAxMzUlMjIlM0UlM0NjaXJjbGUlMjBjeCUz
RCUyMjUwJTIyJTIwY3klM0QlMjI1MCUyMiUyMHIlM0QlMjI1MCUyMiUyMGZpbGwlM0QlMjJub25l
JTIyJTIwc3Ryb2tlJTNEJTIyJTIzZWRlZGVkJTIyJTIwc3Ryb2tlLXdpZHRoJTNEJTIyMyUyMi8l
M0UlM0Mvc3ZnJTNFJyk7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICBi
YWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgbGVmdDtcbn1cbi50b2RvLWxpc3QgbGkgLnRvZ2ds
ZTpjaGVja2VkICsgbGFiZWwge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFn
ZS9zdmcreG1sO3V0ZjgsJTNDc3ZnJTIweG1sbnMlM0QlMjJodHRwJTNBLy93d3cudzMub3JnLzIw
MDAvc3ZnJTIyJTIwd2lkdGglM0QlMjI0MCUyMiUyMGhlaWdodCUzRCUyMjQwJTIyJTIwdmlld0Jv
eCUzRCUyMi0xMCUyMC0xOCUyMDEwMCUyMDEzNSUyMiUzRSUzQ2NpcmNsZSUyMGN4JTNEJTIyNTAl
MjIlMjBjeSUzRCUyMjUwJTIyJTIwciUzRCUyMjUwJTIyJTIwZmlsbCUzRCUyMm5vbmUlMjIlMjBz
dHJva2UlM0QlMjIlMjNiZGRhZDUlMjIlMjBzdHJva2Utd2lkdGglM0QlMjIzJTIyLyUzRSUzQ3Bh
dGglMjBmaWxsJTNEJTIyJTIzNWRjMmFmJTIyJTIwZCUzRCUyMk03MiUyMDI1TDQyJTIwNzElMjAy
NyUyMDU2bC00JTIwNCUyMDIwJTIwMjAlMjAzNC01MnolMjIvJTNFJTNDL3N2ZyUzRScpO1xufVxu
LnRvZG8tbGlzdCBsaSBsYWJlbCB7XG4gICAgd29yZC1icmVhazogYnJlYWstYWxsO1xuICAgIHBh
ZGRpbmc6IDE1cHggMTVweCAxNXB4IDYwcHg7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbGlu
ZS1oZWlnaHQ6IDEuMjtcbiAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjRzO1xufVxuLnRvZG8tbGlz
dCBsaS5jb21wbGV0ZWQgbGFiZWwge1xuICAgIGNvbG9yOiAjZDlkOWQ5O1xuICAgIHRleHQtZGVj
b3JhdGlvbjogbGluZS10aHJvdWdoO1xufVxuLnRvZG8tbGlzdCBsaSAuZGVzdHJveSB7XG4gICAg
ZGlzcGxheTogbm9uZTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAg
IHJpZ2h0OiAxMHB4O1xuICAgIGJvdHRvbTogMDtcbiAgICB3aWR0aDogNDBweDtcbiAgICBoZWln
aHQ6IDQwcHg7XG4gICAgbWFyZ2luOiBhdXRvIDA7XG4gICAgZm9udC1zaXplOiAzMHB4O1xuICAg
IGNvbG9yOiAjY2M5YTlhO1xuICAgIG1hcmdpbi1ib3R0b206IDExcHg7XG4gICAgdHJhbnNpdGlv
bjogY29sb3IgMC4ycyBlYXNlLW91dDtcbn1cbi50b2RvLWxpc3QgbGkgLmRlc3Ryb3k6aG92ZXIg
e1xuICAgIGNvbG9yOiAjYWY1YjVlO1xufVxuLnRvZG8tbGlzdCBsaSAuZGVzdHJveTphZnRlciB7
XG4gICAgY29udGVudDogJ8OXJztcbn1cbi50b2RvLWxpc3QgbGk6aG92ZXIgLmRlc3Ryb3kge1xu
ICAgIGRpc3BsYXk6IGJsb2NrO1xufVxuLnRvZG8tbGlzdCBsaSAuZWRpdCB7XG4gICAgZGlzcGxh
eTogbm9uZTtcbn1cbi50b2RvLWxpc3QgbGkuZWRpdGluZzpsYXN0LWNoaWxkIHtcbiAgICBtYXJn
aW4tYm90dG9tOiAtMXB4O1xufVxuLmZvb3RlciB7XG4gICAgY29sb3I6ICM3Nzc7XG4gICAgcGFk
ZGluZzogMTBweCAxNXB4O1xuICAgIGhlaWdodDogMjBweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50
ZXI7XG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlNmU2ZTY7XG59XG4uZm9vdGVyOmJlZm9y
ZSB7XG4gICAgY29udGVudDogJyc7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0
OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBsZWZ0OiAwO1xuICAgIGhlaWdodDogNTBweDtcbiAg
ICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDAsIDAs
IDAsIDAuMiksXG4gICAgICAgICAgICAgICAgMCA4cHggMCAtM3B4ICNmNmY2ZjYsXG4gICAgICAg
ICAgICAgICAgMCA5cHggMXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLFxuICAgICAgICAgICAg
ICAgIDAgMTZweCAwIC02cHggI2Y2ZjZmNixcbiAgICAgICAgICAgICAgICAwIDE3cHggMnB4IC02
cHggcmdiYSgwLCAwLCAwLCAwLjIpO1xufVxuLnRvZG8tY291bnQge1xuICAgIGZsb2F0OiBsZWZ0
O1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG59XG4udG9kby1jb3VudCBzdHJvbmcge1xuICAgIGZv
bnQtd2VpZ2h0OiAzMDA7XG59XG4uZmlsdGVycyB7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRp
bmc6IDA7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4g
ICAgcmlnaHQ6IDA7XG4gICAgbGVmdDogMDtcbn1cbi5maWx0ZXJzIGxpIHtcbiAgICBkaXNwbGF5
OiBpbmxpbmU7XG59XG4uZmlsdGVycyBsaSBhIHtcbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgICBt
YXJnaW46IDNweDtcbiAgICBwYWRkaW5nOiAzcHggN3B4O1xuICAgIHRleHQtZGVjb3JhdGlvbjog
bm9uZTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICBib3JkZXItcmFk
aXVzOiAzcHg7XG59XG4uZmlsdGVycyBsaSBhOmhvdmVyIHtcbiAgICBib3JkZXItY29sb3I6IHJn
YmEoMTc1LCA0NywgNDcsIDAuMSk7XG59XG4uZmlsdGVycyBsaSBhLnNlbGVjdGVkIHtcbiAgICBi
b3JkZXItY29sb3I6IHJnYmEoMTc1LCA0NywgNDcsIDAuMik7XG59XG4uY2xlYXItY29tcGxldGVk
LFxuaHRtbCAuY2xlYXItY29tcGxldGVkOmFjdGl2ZSB7XG4gICAgZmxvYXQ6IHJpZ2h0O1xuICAg
IHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBsaW5lLWhlaWdodDogMjBweDtcbiAgICB0ZXh0LWRl
Y29yYXRpb246IG5vbmU7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNsZWFyLWNvbXBsZXRl
ZDpob3ZlciB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uaW5mbyB7XG4g
ICAgbWFyZ2luOiA2NXB4IGF1dG8gMDtcbiAgICBjb2xvcjogI2JmYmZiZjtcbiAgICBmb250LXNp
emU6IDEwcHg7XG4gICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAw
LjUpO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5pbmZvIHAge1xuICAgIGxpbmUtaGVp
Z2h0OiAxO1xufVxuLmluZm8gYSB7XG4gICAgY29sb3I6IGluaGVyaXQ7XG4gICAgdGV4dC1kZWNv
cmF0aW9uOiBub25lO1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG59XG4uaW5mbyBhOmhvdmVyIHtc
biAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cblxuLypcbiAgICBIYWNrIHRvIHJl
bW92ZSBiYWNrZ3JvdW5kIGZyb20gTW9iaWxlIFNhZmFyaS5cbiAgICBDYW4ndCB1c2UgaXQgZ2xv
YmFsbHkgc2luY2UgaXQgZGVzdHJveXMgY2hlY2tib3hlcyBpbiBGaXJlZm94XG4qL1xuQG1lZGlh
IHNjcmVlbiBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzowKSB7XG4udG9nZ2xl
LWFsbCxcbiAgICAudG9kby1saXN0IGxpIC50b2dnbGUge1xuICAgICAgICBiYWNrZ3JvdW5kOiBu
b25lO1xufVxuLnRvZG8tbGlzdCBsaSAudG9nZ2xlIHtcbiAgICAgICAgaGVpZ2h0OiA0MHB4O1xu
fVxufVxuQG1lZGlhIChtYXgtd2lkdGg6IDQzMHB4KSB7XG4uZm9vdGVyIHtcbiAgICAgICAgaGVp
Z2h0OiA1MHB4O1xufVxuLmZpbHRlcnMge1xuICAgICAgICBib3R0b206IDEwcHg7XG59XG59XG5c
blxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY29tcG9uZW50cy90b2RvLmNzcyJd
LCJzb3VyY2VSb290IjoiIn0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQg
YS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2Rv
bXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy92dWVqcy1jbGkvZGlzdC9zdGF0aWMvanMvYXBwLmU2
YzAxMGQ1N2Q1MzUzN2Y0YWQyLmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9t
ZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvdnVlanMtY2xp
L2Rpc3Qvc3RhdGljL2pzL2FwcC5lNmMwMTBkNTdkNTM1MzdmNGFkMi5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
ODk2OTliNTg5MGNhYzlmOTFhMTkxMThiY2EzYjIxNmI4MjBhNDI3Ci0tLSAvZGV2L251bGwKKysr
IGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9k
b212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvdnVlanMtY2xpL2Rpc3Qvc3RhdGljL2pzL2FwcC5l
NmMwMTBkNTdkNTM1MzdmNGFkMi5qcwpAQCAtMCwwICsxLDIgQEAKK3dlYnBhY2tKc29ucChbMF0s
e0VIVEk6ZnVuY3Rpb24oZSx0LG8peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe28oImpoalIi
KX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGw9
bygiZVhOZSIpLGk9by5uKGwpLHM9bygiYjV5SyIpLGE9bygiVlUvOCIpLGM9bixyPWEoaS5hLHMu
YSxjLG51bGwsbnVsbCk7dC5kZWZhdWx0PXIuZXhwb3J0c30sTTkzeDpmdW5jdGlvbihlLHQsbyl7
InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6
ITB9KTt2YXIgbj1vKCJ4SkQ4IiksbD1vLm4obiksaT1vKCJWRzZwIikscz1vKCJWVS84IiksYT1z
KGwuYSxpLmEsbnVsbCxudWxsLG51bGwpO3QuZGVmYXVsdD1hLmV4cG9ydHN9LE5IbnI6ZnVuY3Rp
b24oZSx0LG8peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1
bGU/ZTp7ZGVmYXVsdDplfX12YXIgbD1vKCI3K3VXIiksaT1uKGwpLHM9bygiTTkzeCIpLGE9bihz
KSxjPW8oInJtbmgiKSxyPW4oYyk7d2luZG93LlZ1ZUFwcD1uZXcgaS5kZWZhdWx0KHtlbDoiI2Fw
cCIscmVuZGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlKGEuZGVmYXVsdCl9fSk7dmFyIGQ9bmV3IHIu
ZGVmYXVsdC5Sb3V0ZXI7WyJhbGwiLCJhY3RpdmUiLCJjb21wbGV0ZWQiXS5mb3JFYWNoKGZ1bmN0
aW9uKGUpe2Qub24oZSxmdW5jdGlvbigpe3dpbmRvdy5WdWVBcHAuZmlsdGVyPWV9KX0pLGQuY29u
ZmlndXJlKHtub3Rmb3VuZDpmdW5jdGlvbigpe3dpbmRvdy5sb2NhdGlvbi5oYXNoPSIiLHdpbmRv
dy5WdWVBcHAuZmlsdGVyPSJhbGwifX0pLGQuaW5pdCgpfSxWRzZwOmZ1bmN0aW9uKGUsdCxvKXsi
dXNlIHN0cmljdCI7dmFyIG49ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVu
dCxvPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIG8oImRpdiIse2F0dHJzOntpZDoiYXBwIn19LFtvKCJU
b2RvcyIpXSwxKX0sbD1bXSxpPXtyZW5kZXI6bixzdGF0aWNSZW5kZXJGbnM6bH07dC5hPWl9LGI1
eUs6ZnVuY3Rpb24oZSx0LG8peyJ1c2Ugc3RyaWN0Ijt2YXIgbj1mdW5jdGlvbigpe3ZhciBlPXRo
aXMsdD1lLiRjcmVhdGVFbGVtZW50LG89ZS5fc2VsZi5fY3x8dDtyZXR1cm4gbygic2VjdGlvbiIs
e3N0YXRpY0NsYXNzOiJ0b2RvYXBwIn0sW28oImhlYWRlciIse3N0YXRpY0NsYXNzOiJoZWFkZXIi
fSxbbygiaDEiLFtlLl92KCJUb2RvcyIpXSksZS5fdigiICIpLG8oImlucHV0Iix7ZGlyZWN0aXZl
czpbe25hbWU6Im1vZGVsIixyYXdOYW1lOiJ2LW1vZGVsIix2YWx1ZTplLm5ld1RvZG8sZXhwcmVz
c2lvbjoibmV3VG9kbyJ9XSxzdGF0aWNDbGFzczoibmV3LXRvZG8iLGF0dHJzOnt0eXBlOiJ0ZXh0
IixhdXRvZm9jdXM6IiIsYXV0b2NvbXBsZXRlOiJvZmYiLHBsYWNlaG9sZGVyOiJXaGF0IG5lZWRz
IHRvIGJlIGRvbmU/In0sZG9tUHJvcHM6e3ZhbHVlOmUubmV3VG9kb30sb246e2tleXVwOmZ1bmN0
aW9uKHQpe2lmKCEoImJ1dHRvbiJpbiB0KSYmZS5fayh0LmtleUNvZGUsImVudGVyIiwxMykpcmV0
dXJuIG51bGw7ZS5hZGRUb2RvKHQpfSxpbnB1dDpmdW5jdGlvbih0KXt0LnRhcmdldC5jb21wb3Np
bmd8fChlLm5ld1RvZG89dC50YXJnZXQudmFsdWUpfX19KV0pLGUuX3YoIiAiKSxvKCJzZWN0aW9u
Iix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6ZS50b2Rv
cy5sZW5ndGgsZXhwcmVzc2lvbjoidG9kb3MubGVuZ3RoIn1dLHN0YXRpY0NsYXNzOiJtYWluIn0s
W28oImlucHV0Iix7ZGlyZWN0aXZlczpbe25hbWU6Im1vZGVsIixyYXdOYW1lOiJ2LW1vZGVsIix2
YWx1ZTplLmFsbERvbmUsZXhwcmVzc2lvbjoiYWxsRG9uZSJ9XSxzdGF0aWNDbGFzczoidG9nZ2xl
LWFsbCIsYXR0cnM6e3R5cGU6ImNoZWNrYm94In0sZG9tUHJvcHM6e2NoZWNrZWQ6QXJyYXkuaXNB
cnJheShlLmFsbERvbmUpP2UuX2koZS5hbGxEb25lLG51bGwpPi0xOmUuYWxsRG9uZX0sb246e19f
YzpmdW5jdGlvbih0KXt2YXIgbz1lLmFsbERvbmUsbj10LnRhcmdldCxsPSEhbi5jaGVja2VkO2lm
KEFycmF5LmlzQXJyYXkobykpe3ZhciBpPWUuX2kobyxudWxsKTtuLmNoZWNrZWQ/aTwwJiYoZS5h
bGxEb25lPW8uY29uY2F0KG51bGwpKTppPi0xJiYoZS5hbGxEb25lPW8uc2xpY2UoMCxpKS5jb25j
YXQoby5zbGljZShpKzEpKSl9ZWxzZSBlLmFsbERvbmU9bH19fSksZS5fdigiICIpLG8oInVsIix7
c3RhdGljQ2xhc3M6InRvZG8tbGlzdCJ9LGUuX2woZS5maWx0ZXJlZFRvZG9zLGZ1bmN0aW9uKHQp
e3JldHVybiBvKCJsaSIse3N0YXRpY0NsYXNzOiJ0b2RvIixjbGFzczp7Y29tcGxldGVkOnQuY29t
cGxldGVkLGVkaXRpbmc6dD09PWUuZWRpdGluZ319LFtvKCJkaXYiLHtzdGF0aWNDbGFzczoidmll
dyJ9LFtvKCJpbnB1dCIse2RpcmVjdGl2ZXM6W3tuYW1lOiJtb2RlbCIscmF3TmFtZToidi1tb2Rl
bCIsdmFsdWU6dC5jb21wbGV0ZWQsZXhwcmVzc2lvbjoidG9kby5jb21wbGV0ZWQifV0sc3RhdGlj
Q2xhc3M6InRvZ2dsZSIsYXR0cnM6e3R5cGU6ImNoZWNrYm94In0sZG9tUHJvcHM6e2NoZWNrZWQ6
QXJyYXkuaXNBcnJheSh0LmNvbXBsZXRlZCk/ZS5faSh0LmNvbXBsZXRlZCxudWxsKT4tMTp0LmNv
bXBsZXRlZH0sb246e19fYzpmdW5jdGlvbihvKXt2YXIgbj10LmNvbXBsZXRlZCxsPW8udGFyZ2V0
LGk9ISFsLmNoZWNrZWQ7aWYoQXJyYXkuaXNBcnJheShuKSl7dmFyIHM9ZS5faShuLG51bGwpO2wu
Y2hlY2tlZD9zPDAmJih0LmNvbXBsZXRlZD1uLmNvbmNhdChudWxsKSk6cz4tMSYmKHQuY29tcGxl
dGVkPW4uc2xpY2UoMCxzKS5jb25jYXQobi5zbGljZShzKzEpKSl9ZWxzZSB0LmNvbXBsZXRlZD1p
fX19KSxlLl92KCIgIiksbygibGFiZWwiLHtvbjp7ZGJsY2xpY2s6ZnVuY3Rpb24obyl7ZS5lZGl0
VG9kbyh0KX19fSxbZS5fdihlLl9zKHQudGl0bGUpKV0pLGUuX3YoIiAiKSxvKCJidXR0b24iLHtz
dGF0aWNDbGFzczoiZGVzdHJveSIsb246e2NsaWNrOmZ1bmN0aW9uKG8pe28ucHJldmVudERlZmF1
bHQoKSxlLmRlbGV0ZVRvZG8odCl9fX0pXSksZS5fdigiICIpLG8oImlucHV0Iix7ZGlyZWN0aXZl
czpbe25hbWU6Im1vZGVsIixyYXdOYW1lOiJ2LW1vZGVsIix2YWx1ZTp0LnRpdGxlLGV4cHJlc3Np
b246InRvZG8udGl0bGUifSx7bmFtZToidG9kb0ZvY3VzIixyYXdOYW1lOiJ2LXRvZG9Gb2N1cyIs
dmFsdWU6dD09PWUuZWRpdGluZyxleHByZXNzaW9uOiJ0b2RvID09PSBlZGl0aW5nIn1dLHN0YXRp
Y0NsYXNzOiJlZGl0IixhdHRyczp7dHlwZToidGV4dCJ9LGRvbVByb3BzOnt2YWx1ZTp0LnRpdGxl
fSxvbjp7a2V5dXA6ZnVuY3Rpb24odCl7aWYoISgiYnV0dG9uImluIHQpJiZlLl9rKHQua2V5Q29k
ZSwiZW50ZXIiLDEzKSlyZXR1cm4gbnVsbDtlLmRvbmVFZGl0KHQpfSxibHVyOmUuZG9uZUVkaXQs
aW5wdXQ6ZnVuY3Rpb24oZSl7ZS50YXJnZXQuY29tcG9zaW5nfHwodC50aXRsZT1lLnRhcmdldC52
YWx1ZSl9fX0pXSl9KSldKSxlLl92KCIgIiksbygiZm9vdGVyIix7ZGlyZWN0aXZlczpbe25hbWU6
InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6ZS50b2Rvcy5sZW5ndGg+MCxleHByZXNzaW9u
OiJ0b2Rvcy5sZW5ndGggPiAwIn1dLHN0YXRpY0NsYXNzOiJmb290ZXIifSxbbygic3BhbiIse3N0
YXRpY0NsYXNzOiJ0b2RvLWNvdW50In0sW28oInN0cm9uZyIsW2UuX3YoZS5fcyhlLnJlbWFpbmlu
ZykpXSksZS5fdigiICIrZS5fcyhlLl9mKCJwbHVyYWxpemUiKShlLnJlbWFpbmluZykpKyIgbGVm
dFxuICAgICAgICAiKV0pLGUuX3YoIiAiKSxvKCJ1bCIse3N0YXRpY0NsYXNzOiJmaWx0ZXJzIn0s
W28oImxpIixbbygiYSIse2NsYXNzOntzZWxlY3RlZDoiYWxsIj09ZS5maWx0ZXJ9LGF0dHJzOnto
cmVmOiIjL2FsbCJ9LG9uOntjbGljazpmdW5jdGlvbih0KXtlLmZpbHRlcj0iYWxsIn19fSxbZS5f
digiQWxsIildKV0pLGUuX3YoIiAiKSxvKCJsaSIsW28oImEiLHtjbGFzczp7c2VsZWN0ZWQ6ImFj
dGl2ZSI9PWUuZmlsdGVyfSxhdHRyczp7aHJlZjoiIy9hY3RpdmUifSxvbjp7Y2xpY2s6ZnVuY3Rp
b24odCl7ZS5maWx0ZXI9ImFjdGl2ZSJ9fX0sW2UuX3YoIkFjdGl2ZSIpXSldKSxlLl92KCIgIiks
bygibGkiLFtvKCJhIix7Y2xhc3M6e3NlbGVjdGVkOiJjb21wbGV0ZWQiPT1lLmZpbHRlcn0sYXR0
cnM6e2hyZWY6IiMvY29tcGxldGVkIn0sb246e2NsaWNrOmZ1bmN0aW9uKHQpe2UuZmlsdGVyPSJj
b21wbGV0ZWQifX19LFtlLl92KCJDb21wbGV0ZWQiKV0pXSldKSxlLl92KCIgIiksbygiYnV0dG9u
Iix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6ZS5jb21w
bGV0ZWQsZXhwcmVzc2lvbjoiY29tcGxldGVkIn1dLHN0YXRpY0NsYXNzOiJjbGVhci1jb21wbGV0
ZWQiLG9uOntjbGljazpmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCksZS5kZWxldGVDb21w
bGV0ZWQodCl9fX0sW2UuX3YoIkNsZWFyIENvbXBsZXRlZCIpXSldKV0pfSxsPVtdLGk9e3JlbmRl
cjpuLHN0YXRpY1JlbmRlckZuczpsfTt0LmE9aX0sZVhOZTpmdW5jdGlvbihlLHQsbyl7InVzZSBz
dHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2
YXIgbj1vKCI3K3VXIiksbD1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2Rl
ZmF1bHQ6ZX19KG4pO3QuZGVmYXVsdD17ZGF0YTpmdW5jdGlvbigpe3JldHVybnt0b2RvczpbXSxu
ZXdUb2RvOiIiLGZpbHRlcjoiYWxsIixhbGxEb25lOiExLGVkaXRpbmc6bnVsbH19LGZpbHRlcnM6
e3BsdXJhbGl6ZTpmdW5jdGlvbihlKXtyZXR1cm4gMT09PWU/Iml0ZW0iOiJpdGVtcyJ9fSxkaXJl
Y3RpdmVzOnt0b2RvRm9jdXM6ZnVuY3Rpb24oZSx0KXt0JiZsLmRlZmF1bHQubmV4dFRpY2soZnVu
Y3Rpb24odCl7ZS5mb2N1cygpfSl9fSxtZXRob2RzOnthZGRUb2RvOmZ1bmN0aW9uKCl7dGhpcy50
b2Rvcy5wdXNoKHtjb21wbGV0ZWQ6ITEsdGl0bGU6dGhpcy5uZXdUb2RvfSksdGhpcy5uZXdUb2Rv
PSIifSxkZWxldGVUb2RvOmZ1bmN0aW9uKGUpe3RoaXMudG9kb3M9dGhpcy50b2Rvcy5maWx0ZXIo
ZnVuY3Rpb24odCl7cmV0dXJuIHQhPT1lfSl9LGRlbGV0ZUNvbXBsZXRlZDpmdW5jdGlvbigpe3Ro
aXMudG9kb3M9dGhpcy50b2Rvcy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuY29tcGxldGVk
fSl9LGVkaXRUb2RvOmZ1bmN0aW9uKGUpe3RoaXMuZWRpdGluZz1lfSxkb25lRWRpdDpmdW5jdGlv
bigpe3RoaXMuZWRpdGluZz1udWxsfX0sY29tcHV0ZWQ6e3JlbWFpbmluZzpmdW5jdGlvbigpe3Jl
dHVybiB0aGlzLnRvZG9zLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5jb21wbGV0ZWR9KS5s
ZW5ndGh9LGNvbXBsZXRlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRvZG9zLmZpbHRlcihmdW5j
dGlvbihlKXtyZXR1cm4gZS5jb21wbGV0ZWR9KS5sZW5ndGh9LGZpbHRlcmVkVG9kb3M6ZnVuY3Rp
b24oKXtyZXR1cm4iYWN0aXZlIj09PXRoaXMuZmlsdGVyP3RoaXMudG9kb3MuZmlsdGVyKGZ1bmN0
aW9uKGUpe3JldHVybiFlLmNvbXBsZXRlZH0pOiJjb21wbGV0ZWQiPT09dGhpcy5maWx0ZXI/dGhp
cy50b2Rvcy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY29tcGxldGVkfSk6dGhpcy50b2Rv
c30sYWxsRG9uZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnJlbWFpbmluZ30sc2V0
OmZ1bmN0aW9uKGUpe3RoaXMudG9kb3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LmNvbXBsZXRlZD1l
fSl9fX19fSxqaGpSOmZ1bmN0aW9uKGUsdCl7fSx4SkQ4OmZ1bmN0aW9uKGUsdCxvKXsidXNlIHN0
cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3Zh
ciBuPW8oIkVIVEkiKSxsPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVm
YXVsdDplfX0obik7dC5kZWZhdWx0PXtuYW1lOiJhcHAiLGNvbXBvbmVudHM6e1RvZG9zOmwuZGVm
YXVsdH19fX0sWyJOSG5yIl0pOworLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXBwLmU2YzAxMGQ1N2Q1
MzUzN2Y0YWQyLmpzLm1hcApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBh
L1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9t
dmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3Z1ZWpzLWNsaS9kaXN0L3N0YXRpYy9qcy9hcHAuZTZj
MDEwZDU3ZDUzNTM3ZjRhZDIuanMubWFwIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVl
ZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvdnVlanMt
Y2xpL2Rpc3Qvc3RhdGljL2pzL2FwcC5lNmMwMTBkNTdkNTM1MzdmNGFkMi5qcy5tYXAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZDk2ZWUyOWIyYjUwNDE4MjQwNTMwYWFkNGJkOWI3YmY4NWZhNWJhMAotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3Z1ZWpzLWNsaS9kaXN0L3N0YXRpYy9q
cy9hcHAuZTZjMDEwZDU3ZDUzNTM3ZjRhZDIuanMubWFwCkBAIC0wLDAgKzEgQEAKK3sidmVyc2lv
biI6Mywic291cmNlcyI6WyJ3ZWJwYWNrOi8vL3N0YXRpYy9qcy9hcHAuZTZjMDEwZDU3ZDUzNTM3
ZjRhZDIuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVG9kb3MudnVlIiwid2VicGFj
azovLy8uL3NyYy9BcHAudnVlIiwid2VicGFjazovLy8uL3NyYy9tYWluLmpzIiwid2VicGFjazov
Ly8uL3NyYy9BcHAudnVlP2M0NGUiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVG9kb3Mu
dnVlPzMwNzUiLCJ3ZWJwYWNrOi8vL1RvZG9zLnZ1ZSIsIndlYnBhY2s6Ly8vQXBwLnZ1ZSJdLCJu
YW1lcyI6WyJ3ZWJwYWNrSnNvbnAiLCJFSFRJIiwibW9kdWxlIiwiX193ZWJwYWNrX2V4cG9ydHNf
XyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJpbmplY3RTdHlsZSIsInNzckNvbnRleHQiLCJPYmpl
Y3QiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19iYWJlbF9sb2FkZXJfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3NlbGVjdG9yX3R5cGVf
c2NyaXB0X2luZGV4XzBfVG9kb3NfdnVlX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X2JhYmVsX2xvYWRlcl9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfc2VsZWN0b3JfdHlwZV9z
Y3JpcHRfaW5kZXhfMF9Ub2Rvc192dWVfX19kZWZhdWx0IiwibiIsIl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3RlbXBsYXRlX2NvbXBpbGVy
X2luZGV4X2lkX2RhdGFfdl83ZDNjYWNiYV9oYXNTY29wZWRfZmFsc2VfdHJhbnNmb3JtVG9SZXF1
aXJlX3ZpZGVvX3NyY19zb3VyY2Vfc3JjX2ltZ19zcmNfaW1hZ2VfeGxpbmtfaHJlZl9ub2RlX21v
ZHVsZXNfdnVlX2xvYWRlcl9saWJfc2VsZWN0b3JfdHlwZV90ZW1wbGF0ZV9pbmRleF8wX1RvZG9z
X3Z1ZV9fIiwibm9ybWFsaXplQ29tcG9uZW50IiwiX192dWVfc3R5bGVzX18iLCJDb21wb25lbnQi
LCJhIiwiTTkzeCIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFiZWxfbG9hZGVyX25v
ZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9zZWxlY3Rvcl90eXBlX3NjcmlwdF9pbmRleF8wX0Fw
cF92dWVfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFiZWxfbG9hZGVyX25vZGVf
bW9kdWxlc192dWVfbG9hZGVyX2xpYl9zZWxlY3Rvcl90eXBlX3NjcmlwdF9pbmRleF8wX0FwcF92
dWVfX19kZWZhdWx0IiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19ub2RlX21vZHVsZXNf
dnVlX2xvYWRlcl9saWJfdGVtcGxhdGVfY29tcGlsZXJfaW5kZXhfaWRfZGF0YV92X2EyNTZlYzZh
X2hhc1Njb3BlZF9mYWxzZV90cmFuc2Zvcm1Ub1JlcXVpcmVfdmlkZW9fc3JjX3NvdXJjZV9zcmNf
aW1nX3NyY19pbWFnZV94bGlua19ocmVmX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9zZWxl
Y3Rvcl90eXBlX3RlbXBsYXRlX2luZGV4XzBfQXBwX3Z1ZV9fIiwiTkhuciIsImV4cG9ydHMiLCJf
aW50ZXJvcFJlcXVpcmVEZWZhdWx0Iiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJfdnVl
IiwiX3Z1ZTIiLCJfQXBwIiwiX0FwcDIiLCJfZGlyZWN0b3IiLCJfZGlyZWN0b3IyIiwid2luZG93
IiwiVnVlQXBwIiwiZWwiLCJyZW5kZXIiLCJoIiwicm91dGVyIiwiUm91dGVyIiwiZm9yRWFjaCIs
InZpc2liaWxpdHkiLCJvbiIsImZpbHRlciIsImNvbmZpZ3VyZSIsIm5vdGZvdW5kIiwibG9jYXRp
b24iLCJoYXNoIiwiaW5pdCIsIlZHNnAiLCJfdm0iLCJ0aGlzIiwiX2giLCIkY3JlYXRlRWxlbWVu
dCIsIl9jIiwiX3NlbGYiLCJhdHRycyIsImlkIiwic3RhdGljUmVuZGVyRm5zIiwiZXNFeHBvcnRz
IiwiYjV5SyIsInN0YXRpY0NsYXNzIiwiX3YiLCJkaXJlY3RpdmVzIiwibmFtZSIsInJhd05hbWUi
LCJleHByZXNzaW9uIiwidHlwZSIsImF1dG9mb2N1cyIsImF1dG9jb21wbGV0ZSIsInBsYWNlaG9s
ZGVyIiwiZG9tUHJvcHMiLCJrZXl1cCIsIiRldmVudCIsIl9rIiwia2V5Q29kZSIsImFkZFRvZG8i
LCJpbnB1dCIsInRhcmdldCIsImNvbXBvc2luZyIsIm5ld1RvZG8iLCJ0b2RvcyIsImNoZWNrZWQi
LCJBcnJheSIsImlzQXJyYXkiLCJhbGxEb25lIiwiX2kiLCJfX2MiLCIkJGEiLCIkJGVsIiwiJCRj
IiwiJCRpIiwiY29uY2F0Iiwic2xpY2UiLCJfbCIsInRvZG8iLCJjbGFzcyIsImNvbXBsZXRlZCIs
ImVkaXRpbmciLCJkYmxjbGljayIsImVkaXRUb2RvIiwiX3MiLCJ0aXRsZSIsImNsaWNrIiwicHJl
dmVudERlZmF1bHQiLCJkZWxldGVUb2RvIiwiZG9uZUVkaXQiLCJibHVyIiwibGVuZ3RoIiwicmVt
YWluaW5nIiwiX2YiLCJzZWxlY3RlZCIsImhyZWYiLCJkZWxldGVDb21wbGV0ZWQiLCJlWE5lIiwi
ZGF0YSIsImZpbHRlcnMiLCJwbHVyYWxpemUiLCJ0b2RvRm9jdXMiLCJuZXh0VGljayIsIl8iLCJm
b2N1cyIsIm1ldGhvZHMiLCJwdXNoIiwidCIsImNvbXB1dGVkIiwiZmlsdGVyZWRUb2RvcyIsImdl
dCIsInNldCIsImpoalIiLCJ4SkQ4IiwiX1RvZG9zIiwiX1RvZG9zMiIsImNvbXBvbmVudHMiLCJU
b2RvcyJdLCJtYXBwaW5ncyI6IkFBQUFBLGNBQWMsSUFFUkMsS0FDQSxTQUFVQyxFQUFRQyxFQUFx
QkMsR0FFN0MsWUNMQSxTQUFBQyxHQUFBQyxHQUNBRixFQUFBLFFES0FHLE9BQU9DLGVBQWVMLEVB
QXFCLGNBQWdCTSxPQUFPLEdBQzdDLElBQUlDLEdBQWlITixFQUFvQixRQUNySU8sRUFBeUhQLEVB
QW9CUSxFQUFFRixHQ1J4S0csRUFBQVQsRUFBQSxRQUdBVSxFQUFBVixFQUFBLFFBTUFXLEVBQUFW
LEVBS0FXLEVBQUFGLEVBQ0FILEVBQUFNLEVBQ0FKLEVBQUEsRUFDQUUsRUFOQSxLQUVBLEtBU0Fa
LEdBQUEsUUFBQWEsRUFBQSxTRGVNRSxLQUNBLFNBQVVoQixFQUFRQyxFQUFxQkMsR0FFN0MsWUFD
QUcsUUFBT0MsZUFBZUwsRUFBcUIsY0FBZ0JNLE9BQU8sR0FDN0MsSUFBSVUsR0FBK0dmLEVBQW9C
LFFBQ25JZ0IsRUFBdUhoQixFQUFvQlEsRUFBRU8sR0UzQ3RLRSxFQUFBakIsRUFBQSxRQUFBVSxF
QUFBVixFQUFBLFFBV0FZLEVBQUFGLEVBQ0FNLEVBQUFILEVBQ0FJLEVBQUEsRUFQQSxLQUVBLEtB
RUEsS0FTQWxCLEdBQUEsUUFBQWEsRUFBQSxTRmtETU0sS0FDQSxTQUFVcEIsRUFBUXFCLEVBQVNu
QixHQUVqQyxZQWVBLFNBQVNvQixHQUF1QkMsR0FBTyxNQUFPQSxJQUFPQSxFQUFJQyxXQUFhRCxH
QUFRRSxRQUFTRixHR3JGdkYsR0FBQUcsR0FBQXhCLEVBQUEsUUgyRUl5QixFQUFRTCxFQUF1Qkks
R0cxRW5DRSxFQUFBMUIsRUFBQSxRSDhFSTJCLEVBQVFQLEVBQXVCTSxHRzdFbkNFLEVBQUE1QixF
QUFBLFFIaUZJNkIsRUFBYVQsRUFBdUJRLEVHOUV4Q0UsUUFBT0MsT0FBUyxHQUFBTixHQUFBRixT
QUNaUyxHQUFJLE9BQ0pDLE9BQVEsU0FBQUMsR0FBQSxNQUFLQSxnQkFHakIsSUFBTUMsR0FBUyxH
QUFJTixHQUFBTixRQUFTYSxRQUUzQixNQUFPLFNBQVUsYUFBYUMsUUFBUSxTQUFBQyxHQUNyQ0gs
RUFBT0ksR0FBR0QsRUFBWSxXQUNwQlIsT0FBT0MsT0FBT1MsT0FBU0YsTUFJM0JILEVBQU9NLFdB
Q0xDLFNBQVUsV0FDUlosT0FBT2EsU0FBU0MsS0FBTyxHQUN2QmQsT0FBT0MsT0FBT1MsT0FBUyxT
QUkzQkwsRUFBT1UsUUh3RkRDLEtBQ0EsU0FBVWhELEVBQVFDLEVBQXFCQyxHQUU3QyxZSXRIQSxJ
QUFBaUMsR0FBQSxXQUEwQixHQUFBYyxHQUFBQyxLQUFhQyxFQUFBRixFQUFBRyxlQUEwQkMsRUFB
QUosRUFBQUssTUFBQUQsSUFBQUYsQ0FBd0IsT0FBQUUsR0FBQSxPQUFpQkUsT0FBT0MsR0FBQSxT
QUFZSCxFQUFBLGNBQzdISSxLQUNBQyxHQUFpQnZCLFNBQUFzQixrQkFDakJ4RCxHQUFBLEtKMkhN
MEQsS0FDQSxTQUFVM0QsRUFBUUMsRUFBcUJDLEdBRTdDLFlLaklBLElBQUFpQyxHQUFBLFdBQTBC
LEdBQUFjLEdBQUFDLEtBQWFDLEVBQUFGLEVBQUFHLGVBQTBCQyxFQUFBSixFQUFBSyxNQUFBRCxJ
QUFBRixDQUF3QixPQUFBRSxHQUFBLFdBQXFCTyxZQUFBLFlBQXNCUCxFQUFBLFVBQWVPLFlBQUEs
V0FBcUJQLEVBQUEsTUFBQUosRUFBQVksR0FBQSxXQUFBWixFQUFBWSxHQUFBLEtBQUFSLEVBQUEs
U0FBcURTLGFBQWFDLEtBQUEsUUFBQUMsUUFBQSxVQUFBekQsTUFBQTBDLEVBQUEsUUFBQWdCLFdB
QUEsWUFBd0VMLFlBQUEsV0FBQUwsT0FBZ0NXLEtBQUEsT0FBQUMsVUFBQSxHQUFBQyxhQUFBLE1B
QUFDLFlBQUEsMEJBQXlGQyxVQUFXL0QsTUFBQTBDLEVBQUEsU0FBc0JSLElBQUs4QixNQUFBLFNB
QUFDLEdBQXlCLGVBQUFBLEtBQUF2QixFQUFBd0IsR0FBQUQsRUFBQUUsUUFBQSxZQUE2RCxXQUFl
ekIsR0FBQTBCLFFBQUFILElBQW9CSSxNQUFBLFNBQUFKLEdBQTBCQSxFQUFBSyxPQUFBQyxZQUFz
QzdCLEVBQUE4QixRQUFBUCxFQUFBSyxPQUFBdEUsYUFBa0MwQyxFQUFBWSxHQUFBLEtBQUFSLEVB
QUEsV0FBOEJTLGFBQWFDLEtBQUEsT0FBQUMsUUFBQSxTQUFBekQsTUFBQTBDLEVBQUErQixNQUFB
LE9BQUFmLFdBQUEsaUJBQWdGTCxZQUFBLFNBQXFCUCxFQUFBLFNBQWNTLGFBQWFDLEtBQUEsUUFB
QUMsUUFBQSxVQUFBekQsTUFBQTBDLEVBQUEsUUFBQWdCLFdBQUEsWUFBd0VMLFlBQUEsYUFBQUws
T0FBa0NXLEtBQUEsWUFBa0JJLFVBQVdXLFFBQUFDLE1BQUFDLFFBQUFsQyxFQUFBbUMsU0FBQW5D
LEVBQUFvQyxHQUFBcEMsRUFBQW1DLFFBQUEsU0FBQW5DLEVBQUEsU0FBK0VSLElBQUs2QyxJQUFB
LFNBQUFkLEdBQXVCLEdBQUFlLEdBQUF0QyxFQUFBbUMsUUFBQUksRUFBQWhCLEVBQUFLLE9BQUFZ
LElBQUFELEVBQUFQLE9BQXVFLElBQUFDLE1BQUFDLFFBQUFJLEdBQUEsQ0FBdUIsR0FBQUcsR0FB
QXpDLEVBQUFvQyxHQUFBRSxFQUFBLEtBQWlDQyxHQUFBUCxRQUFpQlMsRUFBQSxJQUFBekMsRUFB
QW1DLFFBQUFHLEVBQUFJLE9BQWxELE9BQTRGRCxHQUFBLElBQUF6QyxFQUFBbUMsUUFBQUcsRUFB
QUssTUFBQSxFQUFBRixHQUFBQyxPQUFBSixFQUFBSyxNQUFBRixFQUFBLFNBQXNFekMsR0FBQW1D
LFFBQUFLLE1BQW1CeEMsRUFBQVksR0FBQSxLQUFBUixFQUFBLE1BQXVCTyxZQUFBLGFBQXdCWCxF
QUFBNEMsR0FBQTVDLEVBQUEsdUJBQUE2QyxHQUEyQyxNQUFBekMsR0FBQSxNQUFnQk8sWUFBQSxP
QUFBbUMsT0FBMEJDLFVBQUFGLEVBQUFFLFVBQUFDLFFBQUFILElBQUE3QyxFQUFBZ0QsV0FBNkQ1
QyxFQUFBLE9BQVlPLFlBQUEsU0FBbUJQLEVBQUEsU0FBY1MsYUFBYUMsS0FBQSxRQUFBQyxRQUFB
LFVBQUF6RCxNQUFBdUYsRUFBQSxVQUFBN0IsV0FBQSxtQkFBa0ZMLFlBQUEsU0FBQUwsT0FBOEJX
LEtBQUEsWUFBa0JJLFVBQVdXLFFBQUFDLE1BQUFDLFFBQUFXLEVBQUFFLFdBQUEvQyxFQUFBb0Ms
R0FBQVMsRUFBQUUsVUFBQSxTQUFBRixFQUFBLFdBQXdGckQsSUFBSzZDLElBQUEsU0FBQWQsR0FB
dUIsR0FBQWUsR0FBQU8sRUFBQUUsVUFBQVIsRUFBQWhCLEVBQUFLLE9BQUFZLElBQUFELEVBQUFQ
LE9BQTBFLElBQUFDLE1BQUFDLFFBQUFJLEdBQUEsQ0FBdUIsR0FBQUcsR0FBQXpDLEVBQUFvQyxH
QUFBRSxFQUFBLEtBQWlDQyxHQUFBUCxRQUFpQlMsRUFBQSxJQUFBSSxFQUFBRSxVQUFBVCxFQUFB
SSxPQUFsRCxPQUErRkQsR0FBQSxJQUFBSSxFQUFBRSxVQUFBVCxFQUFBSyxNQUFBLEVBQUFGLEdB
QUFDLE9BQUFKLEVBQUFLLE1BQUFGLEVBQUEsU0FBeUVJLEdBQUFFLFVBQUFQLE1BQXNCeEMsRUFB
QVksR0FBQSxLQUFBUixFQUFBLFNBQTBCWixJQUFJeUQsU0FBQSxTQUFBMUIsR0FBNEJ2QixFQUFB
a0QsU0FBQUwsT0FBcUI3QyxFQUFBWSxHQUFBWixFQUFBbUQsR0FBQU4sRUFBQU8sVUFBQXBELEVB
QUFZLEdBQUEsS0FBQVIsRUFBQSxVQUF3RE8sWUFBQSxVQUFBbkIsSUFBMEI2RCxNQUFBLFNBQUE5
QixHQUF5QkEsRUFBQStCLGlCQUF3QnRELEVBQUF1RCxXQUFBVixTQUF1QjdDLEVBQUFZLEdBQUEs
S0FBQVIsRUFBQSxTQUE0QlMsYUFBYUMsS0FBQSxRQUFBQyxRQUFBLFVBQUF6RCxNQUFBdUYsRUFB
QSxNQUFBN0IsV0FBQSxlQUE0RUYsS0FBQSxZQUFBQyxRQUFBLGNBQUF6RCxNQUFBdUYsSUFBQTdD
LEVBQUFnRCxRQUFBaEMsV0FBQSxxQkFBa0dMLFlBQUEsT0FBQUwsT0FBNEJXLEtBQUEsUUFBY0ks
VUFBVy9ELE1BQUF1RixFQUFBLE9BQXFCckQsSUFBSzhCLE1BQUEsU0FBQUMsR0FBeUIsZUFBQUEs
S0FBQXZCLEVBQUF3QixHQUFBRCxFQUFBRSxRQUFBLFlBQTZELFdBQWV6QixHQUFBd0QsU0FBQWpD
LElBQXFCa0MsS0FBQXpELEVBQUF3RCxTQUFBN0IsTUFBQSxTQUFBSixHQUE4Q0EsRUFBQUssT0FB
QUMsWUFBc0NnQixFQUFBTyxNQUFBN0IsRUFBQUssT0FBQXRFLGtCQUFxQzBDLEVBQUFZLEdBQUEs
S0FBQVIsRUFBQSxVQUE4QlMsYUFBYUMsS0FBQSxPQUFBQyxRQUFBLFNBQUF6RCxNQUFBMEMsRUFB
QStCLE1BQUEyQixPQUFBLEVBQUExQyxXQUFBLHFCQUF3RkwsWUFBQSxXQUF1QlAsRUFBQSxRQUFh
TyxZQUFBLGVBQXlCUCxFQUFBLFVBQUFKLEVBQUFZLEdBQUFaLEVBQUFtRCxHQUFBbkQsRUFBQTJE
LGNBQUEzRCxFQUFBWSxHQUFBLElBQUFaLEVBQUFtRCxHQUFBbkQsRUFBQTRELEdBQUEsYUFBQTVE
LEVBQUEyRCxZQUFBLHFCQUFBM0QsRUFBQVksR0FBQSxLQUFBUixFQUFBLE1BQStJTyxZQUFBLFlB
QXNCUCxFQUFBLE1BQUFBLEVBQUEsS0FBbUIwQyxPQUFPZSxTQUFBLE9BQUE3RCxFQUFBUCxRQUE4
QmEsT0FBUXdELEtBQUEsU0FBZXRFLElBQUs2RCxNQUFBLFNBQUE5QixHQUF5QnZCLEVBQUFQLE9B
QUEsVUFBcUJPLEVBQUFZLEdBQUEsV0FBQVosRUFBQVksR0FBQSxLQUFBUixFQUFBLE1BQUFBLEVB
QUEsS0FBaUQwQyxPQUFPZSxTQUFBLFVBQUE3RCxFQUFBUCxRQUFpQ2EsT0FBUXdELEtBQUEsWUFB
a0J0RSxJQUFLNkQsTUFBQSxTQUFBOUIsR0FBeUJ2QixFQUFBUCxPQUFBLGFBQXdCTyxFQUFBWSxH
QUFBLGNBQUFaLEVBQUFZLEdBQUEsS0FBQVIsRUFBQSxNQUFBQSxFQUFBLEtBQW9EMEMsT0FBT2Us
U0FBQSxhQUFBN0QsRUFBQVAsUUFBb0NhLE9BQVF3RCxLQUFBLGVBQXFCdEUsSUFBSzZELE1BQUEs
U0FBQTlCLEdBQXlCdkIsRUFBQVAsT0FBQSxnQkFBMkJPLEVBQUFZLEdBQUEsbUJBQUFaLEVBQUFZ
LEdBQUEsS0FBQVIsRUFBQSxVQUFxRFMsYUFBYUMsS0FBQSxPQUFBQyxRQUFBLFNBQUF6RCxNQUFB
MEMsRUFBQSxVQUFBZ0IsV0FBQSxjQUEwRUwsWUFBQSxrQkFBQW5CLElBQW9DNkQsTUFBQSxTQUFB
OUIsR0FBeUJBLEVBQUErQixpQkFBd0J0RCxFQUFBK0QsZ0JBQUF4QyxPQUE4QnZCLEVBQUFZLEdB
QUEsMEJBQzc3SEosS0FDQUMsR0FBaUJ2QixTQUFBc0Isa0JBQ2pCeEQsR0FBQSxLTHNJTWdILEtB
Q0EsU0FBVWpILEVBQVFxQixFQUFTbkIsR0FFakMsWUFHQUcsUUFBT0MsZUFBZWUsRUFBUyxjQUMz
QmQsT0FBTyxHTTVHWCxJQUFBbUIsR0FBQXhCLEVBQUEsUU5pSEl5QixFQUVKLFNBQWdDSixHQUFP
LE1BQU9BLElBQU9BLEVBQUlDLFdBQWFELEdBQVFFLFFBQVNGLElBRnBERyxFQUluQ0wsR0FBUUks
U0FDSnlGLEtBQU0sV0FDRixPQUNJbEMsU0FDQUQsUU1wSFosR05xSFlyQyxPTXBIWixNTnFIWTBD
LFNNcEhaLEVOcUhZYSxRTW5IWixPTnVISWtCLFNBQ0lDLFVBQVcsU0FBbUIxRyxHQUMxQixNQUFh
LEtBQU5BLEVBQVUsT01ySDdCLFVOd0hJb0QsWUFDSXVELFVBQVcsU0FBbUJuRixFQUFJM0IsR0FD
MUJBLEdBQ0FvQixFQUFNRixRQUFRNkYsU0FBUyxTQUFVQyxHQUM3QnJGLEVNckhwQnNGLFlOMEhJ
QyxTQUNJOUMsUUFBUyxXQUNMekIsS0FBSzhCLE1BQU0wQyxNQUNQMUIsV01ySGhCLEVOc0hnQkss
TUFBT25ELEtNcEh2QjZCLFVOc0hZN0IsS0FBSzZCLFFNckhqQixJTnVIUXlCLFdBQVksU0FBb0JW
LEdBQzVCNUMsS0FBSzhCLE1BQVE5QixLQUFLOEIsTUFBTXRDLE9BQU8sU0FBVWlGLEdBQ3JDLE1B
QU9BLEtNdEh2QjdCLEtOeUhRa0IsZ0JBQWlCLFdBQ2I5RCxLQUFLOEIsTUFBUTlCLEtBQUs4QixN
QUFNdEMsT0FBTyxTQUFVb0QsR0FDckMsT0FBUUEsRU14SHhCRSxhTjJIUUcsU0FBVSxTQUFrQkws
R0FDeEI1QyxLQUFLK0MsUU16SGpCSCxHTjJIUVcsU0FBVSxXQUNOdkQsS0FBSytDLFFNekhqQixP
TjRISTJCLFVBQ0loQixVQUFXLFdBQ1AsTUFBTzFELE1BQUs4QixNQUFNdEMsT0FBTyxTQUFVb0Qs
R0FDL0IsT0FBUUEsRUFBS0UsWU0xSDdCVyxRTjZIUVgsVUFBVyxXQUNQLE1BQU85QyxNQUFLOEIs
TUFBTXRDLE9BQU8sU0FBVW9ELEdBQy9CLE1BQU9BLEdBQUtFLFlNNUg1QlcsUU4rSFFrQixjQUFl
LFdBQ1gsTUFBb0IsV0FBaEIzRSxLQUFLUixPQUNFUSxLQUFLOEIsTUFBTXRDLE9BQU8sU0FBVW9E
LEdBQy9CLE9BQVFBLEVNOUg1QkUsWU5nSXVDLGNBQWhCOUMsS0FBS1IsT0FDTFEsS0FBSzhCLE1B
QU10QyxPQUFPLFNBQVVvRCxHQUMvQixNQUFPQSxHTWhJM0JFLFlOb0ltQjlDLEtNakluQjhCLE9O
b0lRSSxTQUNJMEMsSUFBSyxXQUNELE1NbEloQixLTmtJdUI1RSxLQUFLMEQsV0FFaEJtQixJQUFL
LFNBQWF4SCxHQUNkMkMsS0FBSzhCLE1BQU16QyxRQUFRLFNBQVV1RCxHQUN6QkEsRUFBS0UsVU1s
SXpCekYsU04ySU15SCxLQUNBLFNBQVVoSSxFQUFRcUIsS0FNbEI0RyxLQUNBLFNBQVVqSSxFQUFR
cUIsRUFBU25CLEdBRWpDLFlBR0FHLFFBQU9DLGVBQWVlLEVBQVMsY0FDM0JkLE9BQU8sR094UFgs
SUFBQTJILEdBQUFoSSxFQUFBLFFQNlBJaUksRUFFSixTQUFnQzVHLEdBQU8sTUFBT0EsSUFBT0Es
RUFBSUMsV0FBYUQsR0FBUUUsUUFBU0YsSUFGbEQyRyxFQUlyQzdHLEdBQVFJLFNBQ0pzQyxLT2hR
SixNUGlRSXFFLFlPOVBKQyxNQUFBRixFQUFBMUcsYVBxUUciLCJmaWxlIjoic3RhdGljL2pzL2Fw
cC5lNmMwMTBkNTdkNTM1MzdmNGFkMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIndlYnBhY2tKc29u
cChbMF0se1xuXG4vKioqLyBcIkVIVElcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2Vi
cGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7
XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJfX2VzTW9kdWxl
XCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19iYWJlbF9sb2FkZXJfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJf
bGliX3NlbGVjdG9yX3R5cGVfc2NyaXB0X2luZGV4XzBfVG9kb3NfdnVlX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKFwiZVhOZVwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX2JhYmVsX2xvYWRlcl9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9s
aWJfc2VsZWN0b3JfdHlwZV9zY3JpcHRfaW5kZXhfMF9Ub2Rvc192dWVfX19kZWZhdWx0ID0gX193
ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFiZWxfbG9h
ZGVyX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9zZWxlY3Rvcl90eXBlX3NjcmlwdF9pbmRl
eF8wX1RvZG9zX3Z1ZV9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl90ZW1wbGF0ZV9jb21w
aWxlcl9pbmRleF9pZF9kYXRhX3ZfN2QzY2FjYmFfaGFzU2NvcGVkX2ZhbHNlX3RyYW5zZm9ybVRv
UmVxdWlyZV92aWRlb19zcmNfc291cmNlX3NyY19pbWdfc3JjX2ltYWdlX3hsaW5rX2hyZWZfbm9k
ZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3NlbGVjdG9yX3R5cGVfdGVtcGxhdGVfaW5kZXhfMF9U
b2Rvc192dWVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oXCJiNXlLXCIpO1xuZnVuY3Rpb24gaW5q
ZWN0U3R5bGUgKHNzckNvbnRleHQpIHtcbiAgX193ZWJwYWNrX3JlcXVpcmVfXyhcImpoalJcIilc
bn1cbnZhciBub3JtYWxpemVDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiVlUvOFwi
KVxuLyogc2NyaXB0ICovXG5cbi8qIHRlbXBsYXRlICovXG5cbi8qIHN0eWxlcyAqL1xudmFyIF9f
dnVlX3N0eWxlc19fID0gaW5qZWN0U3R5bGVcbi8qIHNjb3BlSWQgKi9cbnZhciBfX3Z1ZV9zY29w
ZUlkX18gPSBudWxsXG4vKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cbnZhciBf
X3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fID0gbnVsbFxudmFyIENvbXBvbmVudCA9IG5vcm1hbGl6
ZUNvbXBvbmVudChcbiAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYWJlbF9sb2FkZXJf
bm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3NlbGVjdG9yX3R5cGVfc2NyaXB0X2luZGV4XzBf
VG9kb3NfdnVlX19fZGVmYXVsdC5hLFxuICBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX25v
ZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl90ZW1wbGF0ZV9jb21waWxlcl9pbmRleF9pZF9kYXRh
X3ZfN2QzY2FjYmFfaGFzU2NvcGVkX2ZhbHNlX3RyYW5zZm9ybVRvUmVxdWlyZV92aWRlb19zcmNf
c291cmNlX3NyY19pbWdfc3JjX2ltYWdlX3hsaW5rX2hyZWZfbm9kZV9tb2R1bGVzX3Z1ZV9sb2Fk
ZXJfbGliX3NlbGVjdG9yX3R5cGVfdGVtcGxhdGVfaW5kZXhfMF9Ub2Rvc192dWVfX1tcImFcIiAv
KiBkZWZhdWx0ICovXSxcbiAgX192dWVfc3R5bGVzX18sXG4gIF9fdnVlX3Njb3BlSWRfXyxcbiAg
X192dWVfbW9kdWxlX2lkZW50aWZpZXJfX1xuKVxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0
ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKENvbXBvbmVudC5leHBvcnRz
KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCJNOTN4XCI6XG4vKioqLyAoZnVuY3Rpb24obW9k
dWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNl
IHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fd2VicGFja19leHBvcnRzX18sIFwi
X19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFiZWxfbG9hZGVyX25vZGVfbW9kdWxlc192
dWVfbG9hZGVyX2xpYl9zZWxlY3Rvcl90eXBlX3NjcmlwdF9pbmRleF8wX0FwcF92dWVfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oXCJ4SkQ4XCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFiZWxfbG9hZGVyX25vZGVfbW9kdWxlc192dWVf
bG9hZGVyX2xpYl9zZWxlY3Rvcl90eXBlX3NjcmlwdF9pbmRleF8wX0FwcF92dWVfX19kZWZhdWx0
ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFi
ZWxfbG9hZGVyX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9zZWxlY3Rvcl90eXBlX3Njcmlw
dF9pbmRleF8wX0FwcF92dWVfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfdGVtcGxhdGVf
Y29tcGlsZXJfaW5kZXhfaWRfZGF0YV92X2EyNTZlYzZhX2hhc1Njb3BlZF9mYWxzZV90cmFuc2Zv
cm1Ub1JlcXVpcmVfdmlkZW9fc3JjX3NvdXJjZV9zcmNfaW1nX3NyY19pbWFnZV94bGlua19ocmVm
X25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9zZWxlY3Rvcl90eXBlX3RlbXBsYXRlX2luZGV4
XzBfQXBwX3Z1ZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIlZHNnBcIik7XG52YXIgbm9ybWFs
aXplQ29tcG9uZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIlZVLzhcIilcbi8qIHNjcmlwdCAq
L1xuXG4vKiB0ZW1wbGF0ZSAqL1xuXG4vKiBzdHlsZXMgKi9cbnZhciBfX3Z1ZV9zdHlsZXNfXyA9
IG51bGxcbi8qIHNjb3BlSWQgKi9cbnZhciBfX3Z1ZV9zY29wZUlkX18gPSBudWxsXG4vKiBtb2R1
bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cbnZhciBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmll
cl9fID0gbnVsbFxudmFyIENvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYWJlbF9sb2FkZXJfbm9kZV9tb2R1bGVzX3Z1ZV9sb2Fk
ZXJfbGliX3NlbGVjdG9yX3R5cGVfc2NyaXB0X2luZGV4XzBfQXBwX3Z1ZV9fX2RlZmF1bHQuYSxc
biAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9s
aWJfdGVtcGxhdGVfY29tcGlsZXJfaW5kZXhfaWRfZGF0YV92X2EyNTZlYzZhX2hhc1Njb3BlZF9m
YWxzZV90cmFuc2Zvcm1Ub1JlcXVpcmVfdmlkZW9fc3JjX3NvdXJjZV9zcmNfaW1nX3NyY19pbWFn
ZV94bGlua19ocmVmX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9zZWxlY3Rvcl90eXBlX3Rl
bXBsYXRlX2luZGV4XzBfQXBwX3Z1ZV9fW1wiYVwiIC8qIGRlZmF1bHQgKi9dLFxuICBfX3Z1ZV9z
dHlsZXNfXyxcbiAgX192dWVfc2NvcGVJZF9fLFxuICBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9f
XG4pXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tc
ImRlZmF1bHRcIl0gPSAoQ29tcG9uZW50LmV4cG9ydHMpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioq
LyBcIk5IbnJcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19y
ZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIF92dWUgPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKFwiNyt1V1wiKTtcblxudmFyIF92dWUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVs
dChfdnVlKTtcblxudmFyIF9BcHAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiTTkzeFwiKTtcblxu
dmFyIF9BcHAyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfQXBwKTtcblxudmFyIF9kaXJlY3Rv
ciA9IF9fd2VicGFja19yZXF1aXJlX18oXCJybW5oXCIpO1xuXG52YXIgX2RpcmVjdG9yMiA9IF9p
bnRlcm9wUmVxdWlyZURlZmF1bHQoX2RpcmVjdG9yKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1
aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsg
ZGVmYXVsdDogb2JqIH07IH1cblxud2luZG93LlZ1ZUFwcCA9IG5ldyBfdnVlMi5kZWZhdWx0KHtc
biAgZWw6ICcjYXBwJyxcbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCkge1xuICAgIHJldHVy
biBoKF9BcHAyLmRlZmF1bHQpO1xuICB9XG59KTtcblxudmFyIHJvdXRlciA9IG5ldyBfZGlyZWN0
b3IyLmRlZmF1bHQuUm91dGVyKCk7XG5cblsnYWxsJywgJ2FjdGl2ZScsICdjb21wbGV0ZWQnXS5m
b3JFYWNoKGZ1bmN0aW9uICh2aXNpYmlsaXR5KSB7XG4gIHJvdXRlci5vbih2aXNpYmlsaXR5LCBm
dW5jdGlvbiAoKSB7XG4gICAgd2luZG93LlZ1ZUFwcC5maWx0ZXIgPSB2aXNpYmlsaXR5O1xuICB9
KTtcbn0pO1xuXG5yb3V0ZXIuY29uZmlndXJlKHtcbiAgbm90Zm91bmQ6IGZ1bmN0aW9uIG5vdGZv
dW5kKCkge1xuICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gJyc7XG4gICAgd2luZG93LlZ1ZUFw
cC5maWx0ZXIgPSAnYWxsJztcbiAgfVxufSk7XG5cbnJvdXRlci5pbml0KCk7XG5cbi8qKiovIH0p
LFxuXG4vKioqLyBcIlZHNnBcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19l
eHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG52YXIg
cmVuZGVyID0gZnVuY3Rpb24gKCkge3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVt
ZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygnZGl2Jyx7YXR0cnM6e1wiaWRc
IjpcImFwcFwifX0sW19jKCdUb2RvcycpXSwxKX1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxu
dmFyIGVzRXhwb3J0cyA9IHsgcmVuZGVyOiByZW5kZXIsIHN0YXRpY1JlbmRlckZuczogc3RhdGlj
UmVuZGVyRm5zIH1cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9y
dHNfX1tcImFcIl0gPSAoZXNFeHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiYjV5S1wi
OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNr
X3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbnZhciByZW5kZXIgPSBmdW5jdGlvbiAo
KSB7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2Vs
Zi5fY3x8X2g7cmV0dXJuIF9jKCdzZWN0aW9uJyx7c3RhdGljQ2xhc3M6XCJ0b2RvYXBwXCJ9LFtf
YygnaGVhZGVyJyx7c3RhdGljQ2xhc3M6XCJoZWFkZXJcIn0sW19jKCdoMScsW192bS5fdihcIlRv
ZG9zXCIpXSksX3ZtLl92KFwiIFwiKSxfYygnaW5wdXQnLHtkaXJlY3RpdmVzOlt7bmFtZTpcIm1v
ZGVsXCIscmF3TmFtZTpcInYtbW9kZWxcIix2YWx1ZTooX3ZtLm5ld1RvZG8pLGV4cHJlc3Npb246
XCJuZXdUb2RvXCJ9XSxzdGF0aWNDbGFzczpcIm5ldy10b2RvXCIsYXR0cnM6e1widHlwZVwiOlwi
dGV4dFwiLFwiYXV0b2ZvY3VzXCI6XCJcIixcImF1dG9jb21wbGV0ZVwiOlwib2ZmXCIsXCJwbGFj
ZWhvbGRlclwiOlwiV2hhdCBuZWVkcyB0byBiZSBkb25lP1wifSxkb21Qcm9wczp7XCJ2YWx1ZVwi
Oihfdm0ubmV3VG9kbyl9LG9uOntcImtleXVwXCI6ZnVuY3Rpb24oJGV2ZW50KXtpZighKCdidXR0
b24nIGluICRldmVudCkmJl92bS5faygkZXZlbnQua2V5Q29kZSxcImVudGVyXCIsMTMpKXsgcmV0
dXJuIG51bGw7IH1fdm0uYWRkVG9kbygkZXZlbnQpfSxcImlucHV0XCI6ZnVuY3Rpb24oJGV2ZW50
KXtpZigkZXZlbnQudGFyZ2V0LmNvbXBvc2luZyl7IHJldHVybjsgfV92bS5uZXdUb2RvPSRldmVu
dC50YXJnZXQudmFsdWV9fX0pXSksX3ZtLl92KFwiIFwiKSxfYygnc2VjdGlvbicse2RpcmVjdGl2
ZXM6W3tuYW1lOlwic2hvd1wiLHJhd05hbWU6XCJ2LXNob3dcIix2YWx1ZTooX3ZtLnRvZG9zLmxl
bmd0aCksZXhwcmVzc2lvbjpcInRvZG9zLmxlbmd0aFwifV0sc3RhdGljQ2xhc3M6XCJtYWluXCJ9
LFtfYygnaW5wdXQnLHtkaXJlY3RpdmVzOlt7bmFtZTpcIm1vZGVsXCIscmF3TmFtZTpcInYtbW9k
ZWxcIix2YWx1ZTooX3ZtLmFsbERvbmUpLGV4cHJlc3Npb246XCJhbGxEb25lXCJ9XSxzdGF0aWND
bGFzczpcInRvZ2dsZS1hbGxcIixhdHRyczp7XCJ0eXBlXCI6XCJjaGVja2JveFwifSxkb21Qcm9w
czp7XCJjaGVja2VkXCI6QXJyYXkuaXNBcnJheShfdm0uYWxsRG9uZSk/X3ZtLl9pKF92bS5hbGxE
b25lLG51bGwpPi0xOihfdm0uYWxsRG9uZSl9LG9uOntcIl9fY1wiOmZ1bmN0aW9uKCRldmVudCl7
dmFyICQkYT1fdm0uYWxsRG9uZSwkJGVsPSRldmVudC50YXJnZXQsJCRjPSQkZWwuY2hlY2tlZD8o
dHJ1ZSk6KGZhbHNlKTtpZihBcnJheS5pc0FycmF5KCQkYSkpe3ZhciAkJHY9bnVsbCwkJGk9X3Zt
Ll9pKCQkYSwkJHYpO2lmKCQkZWwuY2hlY2tlZCl7JCRpPDAmJihfdm0uYWxsRG9uZT0kJGEuY29u
Y2F0KCQkdikpfWVsc2V7JCRpPi0xJiYoX3ZtLmFsbERvbmU9JCRhLnNsaWNlKDAsJCRpKS5jb25j
YXQoJCRhLnNsaWNlKCQkaSsxKSkpfX1lbHNle192bS5hbGxEb25lPSQkY319fX0pLF92bS5fdihc
IiBcIiksX2MoJ3VsJyx7c3RhdGljQ2xhc3M6XCJ0b2RvLWxpc3RcIn0sX3ZtLl9sKChfdm0uZmls
dGVyZWRUb2RvcyksZnVuY3Rpb24odG9kbyl7cmV0dXJuIF9jKCdsaScse3N0YXRpY0NsYXNzOlwi
dG9kb1wiLGNsYXNzOntjb21wbGV0ZWQgOiB0b2RvLmNvbXBsZXRlZCwgZWRpdGluZyA6IHRvZG8g
PT09IF92bS5lZGl0aW5nIH19LFtfYygnZGl2Jyx7c3RhdGljQ2xhc3M6XCJ2aWV3XCJ9LFtfYygn
aW5wdXQnLHtkaXJlY3RpdmVzOlt7bmFtZTpcIm1vZGVsXCIscmF3TmFtZTpcInYtbW9kZWxcIix2
YWx1ZToodG9kby5jb21wbGV0ZWQpLGV4cHJlc3Npb246XCJ0b2RvLmNvbXBsZXRlZFwifV0sc3Rh
dGljQ2xhc3M6XCJ0b2dnbGVcIixhdHRyczp7XCJ0eXBlXCI6XCJjaGVja2JveFwifSxkb21Qcm9w
czp7XCJjaGVja2VkXCI6QXJyYXkuaXNBcnJheSh0b2RvLmNvbXBsZXRlZCk/X3ZtLl9pKHRvZG8u
Y29tcGxldGVkLG51bGwpPi0xOih0b2RvLmNvbXBsZXRlZCl9LG9uOntcIl9fY1wiOmZ1bmN0aW9u
KCRldmVudCl7dmFyICQkYT10b2RvLmNvbXBsZXRlZCwkJGVsPSRldmVudC50YXJnZXQsJCRjPSQk
ZWwuY2hlY2tlZD8odHJ1ZSk6KGZhbHNlKTtpZihBcnJheS5pc0FycmF5KCQkYSkpe3ZhciAkJHY9
bnVsbCwkJGk9X3ZtLl9pKCQkYSwkJHYpO2lmKCQkZWwuY2hlY2tlZCl7JCRpPDAmJih0b2RvLmNv
bXBsZXRlZD0kJGEuY29uY2F0KCQkdikpfWVsc2V7JCRpPi0xJiYodG9kby5jb21wbGV0ZWQ9JCRh
LnNsaWNlKDAsJCRpKS5jb25jYXQoJCRhLnNsaWNlKCQkaSsxKSkpfX1lbHNle3RvZG8uY29tcGxl
dGVkPSQkY319fX0pLF92bS5fdihcIiBcIiksX2MoJ2xhYmVsJyx7b246e1wiZGJsY2xpY2tcIjpm
dW5jdGlvbigkZXZlbnQpe192bS5lZGl0VG9kbyh0b2RvKX19fSxbX3ZtLl92KF92bS5fcyh0b2Rv
LnRpdGxlKSldKSxfdm0uX3YoXCIgXCIpLF9jKCdidXR0b24nLHtzdGF0aWNDbGFzczpcImRlc3Ry
b3lcIixvbjp7XCJjbGlja1wiOmZ1bmN0aW9uKCRldmVudCl7JGV2ZW50LnByZXZlbnREZWZhdWx0
KCk7X3ZtLmRlbGV0ZVRvZG8odG9kbyl9fX0pXSksX3ZtLl92KFwiIFwiKSxfYygnaW5wdXQnLHtk
aXJlY3RpdmVzOlt7bmFtZTpcIm1vZGVsXCIscmF3TmFtZTpcInYtbW9kZWxcIix2YWx1ZToodG9k
by50aXRsZSksZXhwcmVzc2lvbjpcInRvZG8udGl0bGVcIn0se25hbWU6XCJ0b2RvRm9jdXNcIixy
YXdOYW1lOlwidi10b2RvRm9jdXNcIix2YWx1ZToodG9kbyA9PT0gX3ZtLmVkaXRpbmcpLGV4cHJl
c3Npb246XCJ0b2RvID09PSBlZGl0aW5nXCJ9XSxzdGF0aWNDbGFzczpcImVkaXRcIixhdHRyczp7
XCJ0eXBlXCI6XCJ0ZXh0XCJ9LGRvbVByb3BzOntcInZhbHVlXCI6KHRvZG8udGl0bGUpfSxvbjp7
XCJrZXl1cFwiOmZ1bmN0aW9uKCRldmVudCl7aWYoISgnYnV0dG9uJyBpbiAkZXZlbnQpJiZfdm0u
X2soJGV2ZW50LmtleUNvZGUsXCJlbnRlclwiLDEzKSl7IHJldHVybiBudWxsOyB9X3ZtLmRvbmVF
ZGl0KCRldmVudCl9LFwiYmx1clwiOl92bS5kb25lRWRpdCxcImlucHV0XCI6ZnVuY3Rpb24oJGV2
ZW50KXtpZigkZXZlbnQudGFyZ2V0LmNvbXBvc2luZyl7IHJldHVybjsgfXRvZG8udGl0bGU9JGV2
ZW50LnRhcmdldC52YWx1ZX19fSldKX0pKV0pLF92bS5fdihcIiBcIiksX2MoJ2Zvb3Rlcicse2Rp
cmVjdGl2ZXM6W3tuYW1lOlwic2hvd1wiLHJhd05hbWU6XCJ2LXNob3dcIix2YWx1ZTooX3ZtLnRv
ZG9zLmxlbmd0aCA+IDApLGV4cHJlc3Npb246XCJ0b2Rvcy5sZW5ndGggPiAwXCJ9XSxzdGF0aWND
bGFzczpcImZvb3RlclwifSxbX2MoJ3NwYW4nLHtzdGF0aWNDbGFzczpcInRvZG8tY291bnRcIn0s
W19jKCdzdHJvbmcnLFtfdm0uX3YoX3ZtLl9zKF92bS5yZW1haW5pbmcpKV0pLF92bS5fdihcIiBc
Iitfdm0uX3MoX3ZtLl9mKFwicGx1cmFsaXplXCIpKF92bS5yZW1haW5pbmcpKStcIiBsZWZ0XFxu
ICAgICAgICBcIildKSxfdm0uX3YoXCIgXCIpLF9jKCd1bCcse3N0YXRpY0NsYXNzOlwiZmlsdGVy
c1wifSxbX2MoJ2xpJyxbX2MoJ2EnLHtjbGFzczp7c2VsZWN0ZWQ6IF92bS5maWx0ZXIgPT0gJ2Fs
bCd9LGF0dHJzOntcImhyZWZcIjpcIiMvYWxsXCJ9LG9uOntcImNsaWNrXCI6ZnVuY3Rpb24oJGV2
ZW50KXtfdm0uZmlsdGVyID0gJ2FsbCd9fX0sW192bS5fdihcIkFsbFwiKV0pXSksX3ZtLl92KFwi
IFwiKSxfYygnbGknLFtfYygnYScse2NsYXNzOntzZWxlY3RlZDogX3ZtLmZpbHRlciA9PSAnYWN0
aXZlJ30sYXR0cnM6e1wiaHJlZlwiOlwiIy9hY3RpdmVcIn0sb246e1wiY2xpY2tcIjpmdW5jdGlv
bigkZXZlbnQpe192bS5maWx0ZXIgPSAnYWN0aXZlJ319fSxbX3ZtLl92KFwiQWN0aXZlXCIpXSld
KSxfdm0uX3YoXCIgXCIpLF9jKCdsaScsW19jKCdhJyx7Y2xhc3M6e3NlbGVjdGVkOiBfdm0uZmls
dGVyID09ICdjb21wbGV0ZWQnfSxhdHRyczp7XCJocmVmXCI6XCIjL2NvbXBsZXRlZFwifSxvbjp7
XCJjbGlja1wiOmZ1bmN0aW9uKCRldmVudCl7X3ZtLmZpbHRlciA9ICdjb21wbGV0ZWQnfX19LFtf
dm0uX3YoXCJDb21wbGV0ZWRcIildKV0pXSksX3ZtLl92KFwiIFwiKSxfYygnYnV0dG9uJyx7ZGly
ZWN0aXZlczpbe25hbWU6XCJzaG93XCIscmF3TmFtZTpcInYtc2hvd1wiLHZhbHVlOihfdm0uY29t
cGxldGVkKSxleHByZXNzaW9uOlwiY29tcGxldGVkXCJ9XSxzdGF0aWNDbGFzczpcImNsZWFyLWNv
bXBsZXRlZFwiLG9uOntcImNsaWNrXCI6ZnVuY3Rpb24oJGV2ZW50KXskZXZlbnQucHJldmVudERl
ZmF1bHQoKTtfdm0uZGVsZXRlQ29tcGxldGVkKCRldmVudCl9fX0sW192bS5fdihcIkNsZWFyIENv
bXBsZXRlZFwiKV0pXSldKX1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxudmFyIGVzRXhwb3J0
cyA9IHsgcmVuZGVyOiByZW5kZXIsIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zIH1c
bi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0g
PSAoZXNFeHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiZVhOZVwiOlxuLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBz
dHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxl
XCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfdnVlID0gX193ZWJwYWNrX3JlcXVp
cmVfXyhcIjcrdVdcIik7XG5cbnZhciBfdnVlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Z1
ZSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmog
JiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMu
ZGVmYXVsdCA9IHtcbiAgICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgICAgICByZXR1cm4g
e1xuICAgICAgICAgICAgdG9kb3M6IFtdLFxuICAgICAgICAgICAgbmV3VG9kbzogJycsXG4gICAg
ICAgICAgICBmaWx0ZXI6ICdhbGwnLFxuICAgICAgICAgICAgYWxsRG9uZTogZmFsc2UsXG4gICAg
ICAgICAgICBlZGl0aW5nOiBudWxsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGZpbHRlcnM6
IHtcbiAgICAgICAgcGx1cmFsaXplOiBmdW5jdGlvbiBwbHVyYWxpemUobikge1xuICAgICAgICAg
ICAgcmV0dXJuIG4gPT09IDEgPyAnaXRlbScgOiAnaXRlbXMnO1xuICAgICAgICB9XG4gICAgfSxc
biAgICBkaXJlY3RpdmVzOiB7XG4gICAgICAgIHRvZG9Gb2N1czogZnVuY3Rpb24gdG9kb0ZvY3Vz
KGVsLCB2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAg
X3Z1ZTIuZGVmYXVsdC5uZXh0VGljayhmdW5jdGlvbiAoXykge1xuICAgICAgICAgICAgICAgICAg
ICBlbC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAg
ICB9XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICAgIGFkZFRvZG86IGZ1bmN0aW9uIGFk
ZFRvZG8oKSB7XG4gICAgICAgICAgICB0aGlzLnRvZG9zLnB1c2goe1xuICAgICAgICAgICAgICAg
IGNvbXBsZXRlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMubmV3VG9kb1xu
ICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLm5ld1RvZG8gPSAnJztcbiAgICAgICAg
fSxcbiAgICAgICAgZGVsZXRlVG9kbzogZnVuY3Rpb24gZGVsZXRlVG9kbyh0b2RvKSB7XG4gICAg
ICAgICAgICB0aGlzLnRvZG9zID0gdGhpcy50b2Rvcy5maWx0ZXIoZnVuY3Rpb24gKHQpIHtcbiAg
ICAgICAgICAgICAgICByZXR1cm4gdCAhPT0gdG9kbztcbiAgICAgICAgICAgIH0pO1xuICAgICAg
ICB9LFxuICAgICAgICBkZWxldGVDb21wbGV0ZWQ6IGZ1bmN0aW9uIGRlbGV0ZUNvbXBsZXRlZCgp
IHtcbiAgICAgICAgICAgIHRoaXMudG9kb3MgPSB0aGlzLnRvZG9zLmZpbHRlcihmdW5jdGlvbiAo
dG9kbykge1xuICAgICAgICAgICAgICAgIHJldHVybiAhdG9kby5jb21wbGV0ZWQ7XG4gICAgICAg
ICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZWRpdFRvZG86IGZ1bmN0aW9uIGVkaXRUb2Rv
KHRvZG8pIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdGluZyA9IHRvZG87XG4gICAgICAgIH0sXG4g
ICAgICAgIGRvbmVFZGl0OiBmdW5jdGlvbiBkb25lRWRpdCgpIHtcbiAgICAgICAgICAgIHRoaXMu
ZWRpdGluZyA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGNvbXB1dGVkOiB7XG4gICAg
ICAgIHJlbWFpbmluZzogZnVuY3Rpb24gcmVtYWluaW5nKCkge1xuICAgICAgICAgICAgcmV0dXJu
IHRoaXMudG9kb3MuZmlsdGVyKGZ1bmN0aW9uICh0b2RvKSB7XG4gICAgICAgICAgICAgICAgcmV0
dXJuICF0b2RvLmNvbXBsZXRlZDtcbiAgICAgICAgICAgIH0pLmxlbmd0aDtcbiAgICAgICAgfSxc
biAgICAgICAgY29tcGxldGVkOiBmdW5jdGlvbiBjb21wbGV0ZWQoKSB7XG4gICAgICAgICAgICBy
ZXR1cm4gdGhpcy50b2Rvcy5maWx0ZXIoZnVuY3Rpb24gKHRvZG8pIHtcbiAgICAgICAgICAgICAg
ICByZXR1cm4gdG9kby5jb21wbGV0ZWQ7XG4gICAgICAgICAgICB9KS5sZW5ndGg7XG4gICAgICAg
IH0sXG4gICAgICAgIGZpbHRlcmVkVG9kb3M6IGZ1bmN0aW9uIGZpbHRlcmVkVG9kb3MoKSB7XG4g
ICAgICAgICAgICBpZiAodGhpcy5maWx0ZXIgPT09ICdhY3RpdmUnKSB7XG4gICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMudG9kb3MuZmlsdGVyKGZ1bmN0aW9uICh0b2RvKSB7XG4gICAgICAgICAg
ICAgICAgICAgIHJldHVybiAhdG9kby5jb21wbGV0ZWQ7XG4gICAgICAgICAgICAgICAgfSk7XG4g
ICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZmlsdGVyID09PSAnY29tcGxldGVkJykge1xuICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLnRvZG9zLmZpbHRlcihmdW5jdGlvbiAodG9kbykge1xu
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9kby5jb21wbGV0ZWQ7XG4gICAgICAgICAgICAg
ICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRvZG9zO1xu
ICAgICAgICB9LFxuXG4gICAgICAgIGFsbERvbmU6IHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rp
b24gZ2V0KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbWFpbmluZyA9PT0gMDtc
biAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xu
ICAgICAgICAgICAgICAgIHRoaXMudG9kb3MuZm9yRWFjaChmdW5jdGlvbiAodG9kbykge1xuICAg
ICAgICAgICAgICAgICAgICB0b2RvLmNvbXBsZXRlZCA9IHZhbHVlO1xuICAgICAgICAgICAgICAg
IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqKi8gfSksXG5c
bi8qKiovIFwiamhqUlwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG4v
LyByZW1vdmVkIGJ5IGV4dHJhY3QtdGV4dC13ZWJwYWNrLXBsdWdpblxuXG4vKioqLyB9KSxcblxu
LyoqKi8gXCJ4SkQ4XCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBh
Y2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcblxu
dmFyIF9Ub2RvcyA9IF9fd2VicGFja19yZXF1aXJlX18oXCJFSFRJXCIpO1xuXG52YXIgX1RvZG9z
MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX1RvZG9zKTtcblxuZnVuY3Rpb24gX2ludGVyb3BS
ZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6
IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIG5hbWU6ICdh
cHAnLFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgVG9kb3M6IF9Ub2RvczIuZGVmYXVsdFxu
ICAgIH1cbn07XG5cbi8qKiovIH0pXG5cbn0sW1wiTkhuclwiXSk7XG5cblxuLy8gV0VCUEFDSyBG
T09URVIgLy9cbi8vIHN0YXRpYy9qcy9hcHAuZTZjMDEwZDU3ZDUzNTM3ZjRhZDIuanMiLCJmdW5j
dGlvbiBpbmplY3RTdHlsZSAoc3NyQ29udGV4dCkge1xuICByZXF1aXJlKFwiISEuLi8uLi9ub2Rl
X21vZHVsZXMvZXh0cmFjdC10ZXh0LXdlYnBhY2stcGx1Z2luL2xvYWRlci5qcz97XFxcIm9taXRc
XFwiOjEsXFxcInJlbW92ZVxcXCI6dHJ1ZX0hdnVlLXN0eWxlLWxvYWRlciFjc3MtbG9hZGVyP3tc
XFwibWluaW1pemVcXFwiOnRydWUsXFxcInNvdXJjZU1hcFxcXCI6dHJ1ZX0hLi4vLi4vbm9kZV9t
b2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3N0eWxlLWNvbXBpbGVyL2luZGV4P3tcXFwidnVlXFxcIjp0
cnVlLFxcXCJpZFxcXCI6XFxcImRhdGEtdi03ZDNjYWNiYVxcXCIsXFxcInNjb3BlZFxcXCI6ZmFs
c2UsXFxcImhhc0lubGluZUNvbmZpZ1xcXCI6ZmFsc2V9IS4vdG9kby5jc3NcIilcbn1cbnZhciBu
b3JtYWxpemVDb21wb25lbnQgPSByZXF1aXJlKFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9h
ZGVyL2xpYi9jb21wb25lbnQtbm9ybWFsaXplclwiKVxuLyogc2NyaXB0ICovXG5pbXBvcnQgX192
dWVfc2NyaXB0X18gZnJvbSBcIiEhYmFiZWwtbG9hZGVyIS4uLy4uL25vZGVfbW9kdWxlcy92dWUt
bG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXNjcmlwdCZpbmRleD0wIS4vVG9kb3MudnVlXCJcbi8q
IHRlbXBsYXRlICovXG5pbXBvcnQgX192dWVfdGVtcGxhdGVfXyBmcm9tIFwiISEuLi8uLi9ub2Rl
X21vZHVsZXMvdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXIvaW5kZXg/e1xcXCJpZFxc
XCI6XFxcImRhdGEtdi03ZDNjYWNiYVxcXCIsXFxcImhhc1Njb3BlZFxcXCI6ZmFsc2UsXFxcInRy
YW5zZm9ybVRvUmVxdWlyZVxcXCI6e1xcXCJ2aWRlb1xcXCI6XFxcInNyY1xcXCIsXFxcInNvdXJj
ZVxcXCI6XFxcInNyY1xcXCIsXFxcImltZ1xcXCI6XFxcInNyY1xcXCIsXFxcImltYWdlXFxcIjpc
XFwieGxpbms6aHJlZlxcXCJ9fSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2Vs
ZWN0b3I/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vVG9kb3MudnVlXCJcbi8qIHN0eWxlcyAqL1xu
dmFyIF9fdnVlX3N0eWxlc19fID0gaW5qZWN0U3R5bGVcbi8qIHNjb3BlSWQgKi9cbnZhciBfX3Z1
ZV9zY29wZUlkX18gPSBudWxsXG4vKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9c
bnZhciBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fID0gbnVsbFxudmFyIENvbXBvbmVudCA9IG5v
cm1hbGl6ZUNvbXBvbmVudChcbiAgX192dWVfc2NyaXB0X18sXG4gIF9fdnVlX3RlbXBsYXRlX18s
XG4gIF9fdnVlX3N0eWxlc19fLFxuICBfX3Z1ZV9zY29wZUlkX18sXG4gIF9fdnVlX21vZHVsZV9p
ZGVudGlmaWVyX19cbilcblxuZXhwb3J0IGRlZmF1bHQgQ29tcG9uZW50LmV4cG9ydHNcblxuXG5c
bi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL2NvbXBvbmVu
dHMvVG9kb3MudnVlXG4vLyBtb2R1bGUgaWQgPSBFSFRJXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIs
InZhciBub3JtYWxpemVDb21wb25lbnQgPSByZXF1aXJlKFwiIS4uL25vZGVfbW9kdWxlcy92dWUt
bG9hZGVyL2xpYi9jb21wb25lbnQtbm9ybWFsaXplclwiKVxuLyogc2NyaXB0ICovXG5pbXBvcnQg
X192dWVfc2NyaXB0X18gZnJvbSBcIiEhYmFiZWwtbG9hZGVyIS4uL25vZGVfbW9kdWxlcy92dWUt
bG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXNjcmlwdCZpbmRleD0wIS4vQXBwLnZ1ZVwiXG4vKiB0
ZW1wbGF0ZSAqL1xuaW1wb3J0IF9fdnVlX3RlbXBsYXRlX18gZnJvbSBcIiEhLi4vbm9kZV9tb2R1
bGVzL3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyL2luZGV4P3tcXFwiaWRcXFwiOlxc
XCJkYXRhLXYtYTI1NmVjNmFcXFwiLFxcXCJoYXNTY29wZWRcXFwiOmZhbHNlLFxcXCJ0cmFuc2Zv
cm1Ub1JlcXVpcmVcXFwiOntcXFwidmlkZW9cXFwiOlxcXCJzcmNcXFwiLFxcXCJzb3VyY2VcXFwi
OlxcXCJzcmNcXFwiLFxcXCJpbWdcXFwiOlxcXCJzcmNcXFwiLFxcXCJpbWFnZVxcXCI6XFxcInhs
aW5rOmhyZWZcXFwifX0hLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5
cGU9dGVtcGxhdGUmaW5kZXg9MCEuL0FwcC52dWVcIlxuLyogc3R5bGVzICovXG52YXIgX192dWVf
c3R5bGVzX18gPSBudWxsXG4vKiBzY29wZUlkICovXG52YXIgX192dWVfc2NvcGVJZF9fID0gbnVs
bFxuLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG52YXIgX192dWVfbW9kdWxl
X2lkZW50aWZpZXJfXyA9IG51bGxcbnZhciBDb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQo
XG4gIF9fdnVlX3NjcmlwdF9fLFxuICBfX3Z1ZV90ZW1wbGF0ZV9fLFxuICBfX3Z1ZV9zdHlsZXNf
XyxcbiAgX192dWVfc2NvcGVJZF9fLFxuICBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fXG4pXG5c
bmV4cG9ydCBkZWZhdWx0IENvbXBvbmVudC5leHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8v
Ly9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9BcHAudnVlXG4vLyBtb2R1bGUgaWQgPSBN
OTN4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIFRoZSBWdWUgYnVpbGQgdmVyc2lvbiB0byBs
b2FkIHdpdGggdGhlIGBpbXBvcnRgIGNvbW1hbmRcbi8vIChydW50aW1lLW9ubHkgb3Igc3RhbmRh
bG9uZSkgaGFzIGJlZW4gc2V0IGluIHdlYnBhY2suYmFzZS5jb25mIHdpdGggYW4gYWxpYXMuXG5p
bXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCBBcHAgZnJvbSAnLi9BcHAnXG5pbXBvcnQgRGly
ZWN0b3IgZnJvbSAnZGlyZWN0b3IvYnVpbGQvZGlyZWN0b3InXG5cbi8qIGVzbGludC1kaXNhYmxl
IG5vLW5ldyAqL1xud2luZG93LlZ1ZUFwcCA9IG5ldyBWdWUoe1xuICAgIGVsOiAnI2FwcCcsXG4g
ICAgcmVuZGVyOiBoID0+IGgoQXBwKVxufSlcblxuY29uc3Qgcm91dGVyID0gbmV3IERpcmVjdG9y
LlJvdXRlcigpO1xuXG5bJ2FsbCcsICdhY3RpdmUnLCAnY29tcGxldGVkJ10uZm9yRWFjaCh2aXNp
YmlsaXR5ID0+IHtcbiAgcm91dGVyLm9uKHZpc2liaWxpdHksICgpID0+IHtcbiAgICB3aW5kb3cu
VnVlQXBwLmZpbHRlciA9IHZpc2liaWxpdHk7XG4gIH0pO1xufSk7XG5cbnJvdXRlci5jb25maWd1
cmUoe1xuICBub3Rmb3VuZDogZnVuY3Rpb24gKCkge1xuICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNo
ID0gJyc7XG4gICAgd2luZG93LlZ1ZUFwcC5maWx0ZXIgPSAnYWxsJztcbiAgfVxufSk7XG5cbnJv
dXRlci5pbml0KCk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL21haW4uanMi
LCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVh
dGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygnZGl2Jyx7YXR0cnM6
e1wiaWRcIjpcImFwcFwifX0sW19jKCdUb2RvcycpXSwxKX1cbnZhciBzdGF0aWNSZW5kZXJGbnMg
PSBbXVxudmFyIGVzRXhwb3J0cyA9IHsgcmVuZGVyOiByZW5kZXIsIHN0YXRpY1JlbmRlckZuczog
c3RhdGljUmVuZGVyRm5zIH1cbmV4cG9ydCBkZWZhdWx0IGVzRXhwb3J0c1xuXG5cbi8vLy8vLy8v
Ly8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi92dWUtbG9hZGVyL2xpYi90ZW1w
bGF0ZS1jb21waWxlcj97XCJpZFwiOlwiZGF0YS12LWEyNTZlYzZhXCIsXCJoYXNTY29wZWRcIjpm
YWxzZSxcInRyYW5zZm9ybVRvUmVxdWlyZVwiOntcInZpZGVvXCI6XCJzcmNcIixcInNvdXJjZVwi
Olwic3JjXCIsXCJpbWdcIjpcInNyY1wiLFwiaW1hZ2VcIjpcInhsaW5rOmhyZWZcIn19IS4vfi92
dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9zcmMvQXBw
LnZ1ZVxuLy8gbW9kdWxlIGlkID0gVkc2cFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgcmVu
ZGVyID0gZnVuY3Rpb24gKCkge3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50
O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygnc2VjdGlvbicse3N0YXRpY0NsYXNz
OlwidG9kb2FwcFwifSxbX2MoJ2hlYWRlcicse3N0YXRpY0NsYXNzOlwiaGVhZGVyXCJ9LFtfYygn
aDEnLFtfdm0uX3YoXCJUb2Rvc1wiKV0pLF92bS5fdihcIiBcIiksX2MoJ2lucHV0Jyx7ZGlyZWN0
aXZlczpbe25hbWU6XCJtb2RlbFwiLHJhd05hbWU6XCJ2LW1vZGVsXCIsdmFsdWU6KF92bS5uZXdU
b2RvKSxleHByZXNzaW9uOlwibmV3VG9kb1wifV0sc3RhdGljQ2xhc3M6XCJuZXctdG9kb1wiLGF0
dHJzOntcInR5cGVcIjpcInRleHRcIixcImF1dG9mb2N1c1wiOlwiXCIsXCJhdXRvY29tcGxldGVc
IjpcIm9mZlwiLFwicGxhY2Vob2xkZXJcIjpcIldoYXQgbmVlZHMgdG8gYmUgZG9uZT9cIn0sZG9t
UHJvcHM6e1widmFsdWVcIjooX3ZtLm5ld1RvZG8pfSxvbjp7XCJrZXl1cFwiOmZ1bmN0aW9uKCRl
dmVudCl7aWYoISgnYnV0dG9uJyBpbiAkZXZlbnQpJiZfdm0uX2soJGV2ZW50LmtleUNvZGUsXCJl
bnRlclwiLDEzKSl7IHJldHVybiBudWxsOyB9X3ZtLmFkZFRvZG8oJGV2ZW50KX0sXCJpbnB1dFwi
OmZ1bmN0aW9uKCRldmVudCl7aWYoJGV2ZW50LnRhcmdldC5jb21wb3NpbmcpeyByZXR1cm47IH1f
dm0ubmV3VG9kbz0kZXZlbnQudGFyZ2V0LnZhbHVlfX19KV0pLF92bS5fdihcIiBcIiksX2MoJ3Nl
Y3Rpb24nLHtkaXJlY3RpdmVzOlt7bmFtZTpcInNob3dcIixyYXdOYW1lOlwidi1zaG93XCIsdmFs
dWU6KF92bS50b2Rvcy5sZW5ndGgpLGV4cHJlc3Npb246XCJ0b2Rvcy5sZW5ndGhcIn1dLHN0YXRp
Y0NsYXNzOlwibWFpblwifSxbX2MoJ2lucHV0Jyx7ZGlyZWN0aXZlczpbe25hbWU6XCJtb2RlbFwi
LHJhd05hbWU6XCJ2LW1vZGVsXCIsdmFsdWU6KF92bS5hbGxEb25lKSxleHByZXNzaW9uOlwiYWxs
RG9uZVwifV0sc3RhdGljQ2xhc3M6XCJ0b2dnbGUtYWxsXCIsYXR0cnM6e1widHlwZVwiOlwiY2hl
Y2tib3hcIn0sZG9tUHJvcHM6e1wiY2hlY2tlZFwiOkFycmF5LmlzQXJyYXkoX3ZtLmFsbERvbmUp
P192bS5faShfdm0uYWxsRG9uZSxudWxsKT4tMTooX3ZtLmFsbERvbmUpfSxvbjp7XCJfX2NcIjpm
dW5jdGlvbigkZXZlbnQpe3ZhciAkJGE9X3ZtLmFsbERvbmUsJCRlbD0kZXZlbnQudGFyZ2V0LCQk
Yz0kJGVsLmNoZWNrZWQ/KHRydWUpOihmYWxzZSk7aWYoQXJyYXkuaXNBcnJheSgkJGEpKXt2YXIg
JCR2PW51bGwsJCRpPV92bS5faSgkJGEsJCR2KTtpZigkJGVsLmNoZWNrZWQpeyQkaTwwJiYoX3Zt
LmFsbERvbmU9JCRhLmNvbmNhdCgkJHYpKX1lbHNleyQkaT4tMSYmKF92bS5hbGxEb25lPSQkYS5z
bGljZSgwLCQkaSkuY29uY2F0KCQkYS5zbGljZSgkJGkrMSkpKX19ZWxzZXtfdm0uYWxsRG9uZT0k
JGN9fX19KSxfdm0uX3YoXCIgXCIpLF9jKCd1bCcse3N0YXRpY0NsYXNzOlwidG9kby1saXN0XCJ9
LF92bS5fbCgoX3ZtLmZpbHRlcmVkVG9kb3MpLGZ1bmN0aW9uKHRvZG8pe3JldHVybiBfYygnbGkn
LHtzdGF0aWNDbGFzczpcInRvZG9cIixjbGFzczp7Y29tcGxldGVkIDogdG9kby5jb21wbGV0ZWQs
IGVkaXRpbmcgOiB0b2RvID09PSBfdm0uZWRpdGluZyB9fSxbX2MoJ2Rpdicse3N0YXRpY0NsYXNz
Olwidmlld1wifSxbX2MoJ2lucHV0Jyx7ZGlyZWN0aXZlczpbe25hbWU6XCJtb2RlbFwiLHJhd05h
bWU6XCJ2LW1vZGVsXCIsdmFsdWU6KHRvZG8uY29tcGxldGVkKSxleHByZXNzaW9uOlwidG9kby5j
b21wbGV0ZWRcIn1dLHN0YXRpY0NsYXNzOlwidG9nZ2xlXCIsYXR0cnM6e1widHlwZVwiOlwiY2hl
Y2tib3hcIn0sZG9tUHJvcHM6e1wiY2hlY2tlZFwiOkFycmF5LmlzQXJyYXkodG9kby5jb21wbGV0
ZWQpP192bS5faSh0b2RvLmNvbXBsZXRlZCxudWxsKT4tMToodG9kby5jb21wbGV0ZWQpfSxvbjp7
XCJfX2NcIjpmdW5jdGlvbigkZXZlbnQpe3ZhciAkJGE9dG9kby5jb21wbGV0ZWQsJCRlbD0kZXZl
bnQudGFyZ2V0LCQkYz0kJGVsLmNoZWNrZWQ/KHRydWUpOihmYWxzZSk7aWYoQXJyYXkuaXNBcnJh
eSgkJGEpKXt2YXIgJCR2PW51bGwsJCRpPV92bS5faSgkJGEsJCR2KTtpZigkJGVsLmNoZWNrZWQp
eyQkaTwwJiYodG9kby5jb21wbGV0ZWQ9JCRhLmNvbmNhdCgkJHYpKX1lbHNleyQkaT4tMSYmKHRv
ZG8uY29tcGxldGVkPSQkYS5zbGljZSgwLCQkaSkuY29uY2F0KCQkYS5zbGljZSgkJGkrMSkpKX19
ZWxzZXt0b2RvLmNvbXBsZXRlZD0kJGN9fX19KSxfdm0uX3YoXCIgXCIpLF9jKCdsYWJlbCcse29u
OntcImRibGNsaWNrXCI6ZnVuY3Rpb24oJGV2ZW50KXtfdm0uZWRpdFRvZG8odG9kbyl9fX0sW192
bS5fdihfdm0uX3ModG9kby50aXRsZSkpXSksX3ZtLl92KFwiIFwiKSxfYygnYnV0dG9uJyx7c3Rh
dGljQ2xhc3M6XCJkZXN0cm95XCIsb246e1wiY2xpY2tcIjpmdW5jdGlvbigkZXZlbnQpeyRldmVu
dC5wcmV2ZW50RGVmYXVsdCgpO192bS5kZWxldGVUb2RvKHRvZG8pfX19KV0pLF92bS5fdihcIiBc
IiksX2MoJ2lucHV0Jyx7ZGlyZWN0aXZlczpbe25hbWU6XCJtb2RlbFwiLHJhd05hbWU6XCJ2LW1v
ZGVsXCIsdmFsdWU6KHRvZG8udGl0bGUpLGV4cHJlc3Npb246XCJ0b2RvLnRpdGxlXCJ9LHtuYW1l
OlwidG9kb0ZvY3VzXCIscmF3TmFtZTpcInYtdG9kb0ZvY3VzXCIsdmFsdWU6KHRvZG8gPT09IF92
bS5lZGl0aW5nKSxleHByZXNzaW9uOlwidG9kbyA9PT0gZWRpdGluZ1wifV0sc3RhdGljQ2xhc3M6
XCJlZGl0XCIsYXR0cnM6e1widHlwZVwiOlwidGV4dFwifSxkb21Qcm9wczp7XCJ2YWx1ZVwiOih0
b2RvLnRpdGxlKX0sb246e1wia2V5dXBcIjpmdW5jdGlvbigkZXZlbnQpe2lmKCEoJ2J1dHRvbicg
aW4gJGV2ZW50KSYmX3ZtLl9rKCRldmVudC5rZXlDb2RlLFwiZW50ZXJcIiwxMykpeyByZXR1cm4g
bnVsbDsgfV92bS5kb25lRWRpdCgkZXZlbnQpfSxcImJsdXJcIjpfdm0uZG9uZUVkaXQsXCJpbnB1
dFwiOmZ1bmN0aW9uKCRldmVudCl7aWYoJGV2ZW50LnRhcmdldC5jb21wb3NpbmcpeyByZXR1cm47
IH10b2RvLnRpdGxlPSRldmVudC50YXJnZXQudmFsdWV9fX0pXSl9KSldKSxfdm0uX3YoXCIgXCIp
LF9jKCdmb290ZXInLHtkaXJlY3RpdmVzOlt7bmFtZTpcInNob3dcIixyYXdOYW1lOlwidi1zaG93
XCIsdmFsdWU6KF92bS50b2Rvcy5sZW5ndGggPiAwKSxleHByZXNzaW9uOlwidG9kb3MubGVuZ3Ro
ID4gMFwifV0sc3RhdGljQ2xhc3M6XCJmb290ZXJcIn0sW19jKCdzcGFuJyx7c3RhdGljQ2xhc3M6
XCJ0b2RvLWNvdW50XCJ9LFtfYygnc3Ryb25nJyxbX3ZtLl92KF92bS5fcyhfdm0ucmVtYWluaW5n
KSldKSxfdm0uX3YoXCIgXCIrX3ZtLl9zKF92bS5fZihcInBsdXJhbGl6ZVwiKShfdm0ucmVtYWlu
aW5nKSkrXCIgbGVmdFxcbiAgICAgICAgXCIpXSksX3ZtLl92KFwiIFwiKSxfYygndWwnLHtzdGF0
aWNDbGFzczpcImZpbHRlcnNcIn0sW19jKCdsaScsW19jKCdhJyx7Y2xhc3M6e3NlbGVjdGVkOiBf
dm0uZmlsdGVyID09ICdhbGwnfSxhdHRyczp7XCJocmVmXCI6XCIjL2FsbFwifSxvbjp7XCJjbGlj
a1wiOmZ1bmN0aW9uKCRldmVudCl7X3ZtLmZpbHRlciA9ICdhbGwnfX19LFtfdm0uX3YoXCJBbGxc
IildKV0pLF92bS5fdihcIiBcIiksX2MoJ2xpJyxbX2MoJ2EnLHtjbGFzczp7c2VsZWN0ZWQ6IF92
bS5maWx0ZXIgPT0gJ2FjdGl2ZSd9LGF0dHJzOntcImhyZWZcIjpcIiMvYWN0aXZlXCJ9LG9uOntc
ImNsaWNrXCI6ZnVuY3Rpb24oJGV2ZW50KXtfdm0uZmlsdGVyID0gJ2FjdGl2ZSd9fX0sW192bS5f
dihcIkFjdGl2ZVwiKV0pXSksX3ZtLl92KFwiIFwiKSxfYygnbGknLFtfYygnYScse2NsYXNzOntz
ZWxlY3RlZDogX3ZtLmZpbHRlciA9PSAnY29tcGxldGVkJ30sYXR0cnM6e1wiaHJlZlwiOlwiIy9j
b21wbGV0ZWRcIn0sb246e1wiY2xpY2tcIjpmdW5jdGlvbigkZXZlbnQpe192bS5maWx0ZXIgPSAn
Y29tcGxldGVkJ319fSxbX3ZtLl92KFwiQ29tcGxldGVkXCIpXSldKV0pLF92bS5fdihcIiBcIiks
X2MoJ2J1dHRvbicse2RpcmVjdGl2ZXM6W3tuYW1lOlwic2hvd1wiLHJhd05hbWU6XCJ2LXNob3dc
Iix2YWx1ZTooX3ZtLmNvbXBsZXRlZCksZXhwcmVzc2lvbjpcImNvbXBsZXRlZFwifV0sc3RhdGlj
Q2xhc3M6XCJjbGVhci1jb21wbGV0ZWRcIixvbjp7XCJjbGlja1wiOmZ1bmN0aW9uKCRldmVudCl7
JGV2ZW50LnByZXZlbnREZWZhdWx0KCk7X3ZtLmRlbGV0ZUNvbXBsZXRlZCgkZXZlbnQpfX19LFtf
dm0uX3YoXCJDbGVhciBDb21wbGV0ZWRcIildKV0pXSl9XG52YXIgc3RhdGljUmVuZGVyRm5zID0g
W11cbnZhciBlc0V4cG9ydHMgPSB7IHJlbmRlcjogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnM6IHN0
YXRpY1JlbmRlckZucyB9XG5leHBvcnQgZGVmYXVsdCBlc0V4cG9ydHNcblxuXG4vLy8vLy8vLy8v
Ly8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vdnVlLWxvYWRlci9saWIvdGVtcGxh
dGUtY29tcGlsZXI/e1wiaWRcIjpcImRhdGEtdi03ZDNjYWNiYVwiLFwiaGFzU2NvcGVkXCI6ZmFs
c2UsXCJ0cmFuc2Zvcm1Ub1JlcXVpcmVcIjp7XCJ2aWRlb1wiOlwic3JjXCIsXCJzb3VyY2VcIjpc
InNyY1wiLFwiaW1nXCI6XCJzcmNcIixcImltYWdlXCI6XCJ4bGluazpocmVmXCJ9fSEuL34vdnVl
LWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vc3JjL2NvbXBv
bmVudHMvVG9kb3MudnVlXG4vLyBtb2R1bGUgaWQgPSBiNXlLXG4vLyBtb2R1bGUgY2h1bmtzID0g
MCIsIjx0ZW1wbGF0ZT5cbiAgICA8c2VjdGlvbiBjbGFzcz1cInRvZG9hcHBcIj5cbiAgICAgICAg
PGhlYWRlciBjbGFzcz1cImhlYWRlclwiPlxuICAgICAgICAgICAgPGgxPlRvZG9zPC9oMT5cbiAg
ICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwibmV3LXRvZG9cIiBhdXRvZm9j
dXMgYXV0b2NvbXBsZXRlPVwib2ZmXCIgcGxhY2Vob2xkZXI9XCJXaGF0IG5lZWRzIHRvIGJlIGRv
bmU/XCIgdi1tb2RlbD1cIm5ld1RvZG9cIiBAa2V5dXAuZW50ZXI9XCJhZGRUb2RvXCIgLz5cbiAg
ICAgICAgPC9oZWFkZXI+XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwibWFpblwiIHYtc2hvdz1c
InRvZG9zLmxlbmd0aFwiIHYtY2xvYWs+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNr
Ym94XCIgY2xhc3M9XCJ0b2dnbGUtYWxsXCIgdi1tb2RlbD1cImFsbERvbmVcIj5cbiAgICAgICAg
ICAgIDx1bCBjbGFzcz1cInRvZG8tbGlzdFwiPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1c
InRvZG9cIiB2LWZvcj1cInRvZG8gaW4gZmlsdGVyZWRUb2Rvc1wiIDpjbGFzcz1cIntjb21wbGV0
ZWQgOiB0b2RvLmNvbXBsZXRlZCwgZWRpdGluZyA6IHRvZG8gPT09IGVkaXRpbmcgfVwiPlxuICAg
ICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidmlld1wiPlxuICAgICAgICAgICAgICAgICAg
ICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIHYtbW9kZWw9XCJ0b2RvLmNvbXBsZXRlZFwi
IGNsYXNzPVwidG9nZ2xlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgQGRibGNs
aWNrPVwiZWRpdFRvZG8odG9kbylcIj57eyB0b2RvLnRpdGxlIH19PC9sYWJlbD5cbiAgICAgICAg
ICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkZXN0cm95XCIgQGNsaWNrLnByZXZlbnQ9
XCJkZWxldGVUb2RvKHRvZG8pXCI+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2
PlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImVkaXRc
IiB2LW1vZGVsPVwidG9kby50aXRsZVwiIEBrZXl1cC5lbnRlcj1cImRvbmVFZGl0XCIgQGJsdXI9
XCJkb25lRWRpdFwiIHYtdG9kb0ZvY3VzPVwidG9kbyA9PT0gZWRpdGluZ1wiPjwvaW5wdXQ+XG4g
ICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvc2VjdGlv
bj5cbiAgICAgICAgPGZvb3RlciBjbGFzcz1cImZvb3RlclwiIHYtc2hvdz1cInRvZG9zLmxlbmd0
aCA+IDBcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9kby1jb3VudFwiPlxuICAgICAg
ICAgICAgPHN0cm9uZz57eyByZW1haW5pbmcgfX08L3N0cm9uZz4ge3sgcmVtYWluaW5nIHwgcGx1
cmFsaXplIH19IGxlZnRcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDx1bCBjbGFz
cz1cImZpbHRlcnNcIj5cbiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj1cIiMvYWxsXCIgOmNs
YXNzPVwie3NlbGVjdGVkOiBmaWx0ZXIgPT0gJ2FsbCd9XCIgQGNsaWNrPVwiZmlsdGVyID0gJ2Fs
bCdcIj5BbGw8L2E+PC9saT5cbiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj1cIiMvYWN0aXZl
XCIgOmNsYXNzPVwie3NlbGVjdGVkOiBmaWx0ZXIgPT0gJ2FjdGl2ZSd9XCIgQGNsaWNrPVwiZmls
dGVyID0gJ2FjdGl2ZSdcIj5BY3RpdmU8L2E+PC9saT5cbiAgICAgICAgICAgICAgICA8bGk+PGEg
aHJlZj1cIiMvY29tcGxldGVkXCIgOmNsYXNzPVwie3NlbGVjdGVkOiBmaWx0ZXIgPT0gJ2NvbXBs
ZXRlZCd9XCIgQGNsaWNrPVwiZmlsdGVyID0gJ2NvbXBsZXRlZCdcIj5Db21wbGV0ZWQ8L2E+PC9s
aT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2xlYXIt
Y29tcGxldGVkXCIgdi1zaG93PVwiY29tcGxldGVkXCIgQGNsaWNrLnByZXZlbnQ9XCJkZWxldGVD
b21wbGV0ZWRcIj5DbGVhciBDb21wbGV0ZWQ8L2J1dHRvbj5cbiAgICAgICAgPC9mb290ZXI+XG4g
ICAgPC9zZWN0aW9uPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBWdWUgZnJvbSAn
dnVlJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgZGF0YSAoKSB7XG4gICAgICAgIHJldHVybiB7
XG4gICAgICAgICAgICB0b2RvczogW10sXG4gICAgICAgICAgICBuZXdUb2RvOiAnJyxcbiAgICAg
ICAgICAgIGZpbHRlcjogJ2FsbCcsXG4gICAgICAgICAgICBhbGxEb25lOiBmYWxzZSxcbiAgICAg
ICAgICAgIGVkaXRpbmc6IG51bGxcbiAgICAgICAgfVxuICAgIH0sXG4gICAgZmlsdGVyczoge1xu
ICAgICAgICBwbHVyYWxpemU6IGZ1bmN0aW9uIChuKSB7XG4gICAgICAgIHJldHVybiBuID09PSAx
ID8gJ2l0ZW0nIDogJ2l0ZW1zJ1xuICAgICAgICB9XG4gICAgfSxcbiAgICBkaXJlY3RpdmVzOiB7
XG4gICAgICAgIHRvZG9Gb2N1cyAoZWwsIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUp
IHtcbiAgICAgICAgICAgICAgICBWdWUubmV4dFRpY2soXyA9PiB7XG4gICAgICAgICAgICAgICAg
ICAgIGVsLmZvY3VzKClcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAg
ICB9XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICAgIGFkZFRvZG8gKCkge1xuICAgICAg
ICAgICAgdGhpcy50b2Rvcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBjb21wbGV0ZWQ6IGZhbHNl
LFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aGlzLm5ld1RvZG9cbiAgICAgICAgICAgIH0pXG4g
ICAgICAgICAgICB0aGlzLm5ld1RvZG8gPSAnJ1xuICAgICAgICB9LFxuICAgICAgICBkZWxldGVU
b2RvICh0b2RvKSB7XG4gICAgICAgICAgICB0aGlzLnRvZG9zID0gdGhpcy50b2Rvcy5maWx0ZXIo
dCA9PiB0ICE9PSB0b2RvKVxuICAgICAgICB9LFxuICAgICAgICBkZWxldGVDb21wbGV0ZWQgKCkg
e1xuICAgICAgICAgICAgdGhpcy50b2RvcyA9IHRoaXMudG9kb3MuZmlsdGVyKHRvZG8gPT4gIXRv
ZG8uY29tcGxldGVkKVxuICAgICAgICB9LFxuICAgICAgICBlZGl0VG9kbyAodG9kbykge1xuICAg
ICAgICAgICAgdGhpcy5lZGl0aW5nID0gdG9kb1xuICAgICAgICB9LFxuICAgICAgICBkb25lRWRp
dCAoKSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRpbmcgPSBudWxsXG4gICAgICAgIH1cbiAgICB9
LFxuICAgIGNvbXB1dGVkOiB7XG4gICAgICAgIHJlbWFpbmluZyAoKSB7XG4gICAgICAgICAgICBy
ZXR1cm4gdGhpcy50b2Rvcy5maWx0ZXIodG9kbyA9PiAhdG9kby5jb21wbGV0ZWQpLmxlbmd0aFxu
ICAgICAgICB9LFxuICAgICAgICBjb21wbGV0ZWQgKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRo
aXMudG9kb3MuZmlsdGVyKHRvZG8gPT4gdG9kby5jb21wbGV0ZWQpLmxlbmd0aFxuICAgICAgICB9
LFxuICAgICAgICBmaWx0ZXJlZFRvZG9zICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbHRl
ciA9PT0gJ2FjdGl2ZScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b2Rvcy5maWx0
ZXIodG9kbyA9PiAhdG9kby5jb21wbGV0ZWQpXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMu
ZmlsdGVyID09PSAnY29tcGxldGVkJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRv
ZG9zLmZpbHRlcih0b2RvID0+IHRvZG8uY29tcGxldGVkKVxuICAgICAgICAgICAgfVxuXG4gICAg
ICAgICAgICByZXR1cm4gdGhpcy50b2Rvc1xuICAgICAgICB9LFxuICAgICAgICBhbGxEb25lOiB7
XG4gICAgICAgICAgICBnZXQgKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbWFp
bmluZyA9PT0gMFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCAodmFsdWUpIHtcbiAg
ICAgICAgICAgICAgICB0aGlzLnRvZG9zLmZvckVhY2godG9kbyA9PiB7XG4gICAgICAgICAgICAg
ICAgICAgIHRvZG8uY29tcGxldGVkID0gdmFsdWVcbiAgICAgICAgICAgICAgICB9KVxuICAgICAg
ICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBzcmM9XCIu
L3RvZG8uY3NzXCI+PC9zdHlsZT5cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBUb2Rv
cy52dWU/MWFiMjM4MmYiLCI8dGVtcGxhdGU+XG4gIDxkaXYgaWQ9XCJhcHBcIj5cbiAgICA8VG9k
b3M+PC9Ub2Rvcz5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFRv
ZG9zIGZyb20gJy4vY29tcG9uZW50cy9Ub2RvcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIG5h
bWU6ICdhcHAnLFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgVG9kb3NcbiAgICB9XG59XG48
L3NjcmlwdD5cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBBcHAudnVlPzcxYTRlNTE5
Il0sInNvdXJjZVJvb3QiOiIifQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdp
dCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3Z1ZWpzLWNsaS9kaXN0L3N0YXRpYy9qcy9tYW5p
ZmVzdC5hYTk5NzhhYTk2ZWU5NDhmMmE0Yy5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcv
U3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3Z1
ZWpzLWNsaS9kaXN0L3N0YXRpYy9qcy9tYW5pZmVzdC5hYTk5NzhhYTk2ZWU5NDhmMmE0Yy5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4xMmFjNDdlZTdiMWQzOGJmNWM2MjEzMzBlOTc1YzcyM2UxMzM4ZTE2Ci0tLSAv
ZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9y
ZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvdnVlanMtY2xpL2Rpc3Qvc3Rh
dGljL2pzL21hbmlmZXN0LmFhOTk3OGFhOTZlZTk0OGYyYTRjLmpzCkBAIC0wLDAgKzEsMiBAQAor
IWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4ocil7aWYodFtyXSlyZXR1cm4gdFtyXS5leHBvcnRzO3Zh
ciBvPXRbcl09e2k6cixsOiExLGV4cG9ydHM6e319O3JldHVybiBlW3JdLmNhbGwoby5leHBvcnRz
LG8sby5leHBvcnRzLG4pLG8ubD0hMCxvLmV4cG9ydHN9dmFyIHI9d2luZG93LndlYnBhY2tKc29u
cDt3aW5kb3cud2VicGFja0pzb25wPWZ1bmN0aW9uKHQsYyxpKXtmb3IodmFyIHUsYSxmLHM9MCxs
PVtdO3M8dC5sZW5ndGg7cysrKWE9dFtzXSxvW2FdJiZsLnB1c2gob1thXVswXSksb1thXT0wO2Zv
cih1IGluIGMpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMsdSkmJihlW3Vd
PWNbdV0pO2ZvcihyJiZyKHQsYyxpKTtsLmxlbmd0aDspbC5zaGlmdCgpKCk7aWYoaSlmb3Iocz0w
O3M8aS5sZW5ndGg7cysrKWY9bihuLnM9aVtzXSk7cmV0dXJuIGZ9O3ZhciB0PXt9LG89ezI6MH07
bi5lPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoKXt1Lm9uZXJyb3I9dS5vbmxvYWQ9bnVsbCxjbGVh
clRpbWVvdXQoYSk7dmFyIG49b1tlXTswIT09biYmKG4mJm5bMV0obmV3IEVycm9yKCJMb2FkaW5n
IGNodW5rICIrZSsiIGZhaWxlZC4iKSksb1tlXT12b2lkIDApfXZhciB0PW9bZV07aWYoMD09PXQp
cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUpe2UoKX0pO2lmKHQpcmV0dXJuIHRbMl07dmFy
IGM9bmV3IFByb21pc2UoZnVuY3Rpb24obixyKXt0PW9bZV09W24scl19KTt0WzJdPWM7dmFyIGk9
ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXSx1PWRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoInNjcmlwdCIpO3UudHlwZT0idGV4dC9qYXZhc2NyaXB0Iix1LmNoYXJzZXQ9InV0
Zi04Iix1LmFzeW5jPSEwLHUudGltZW91dD0xMmU0LG4ubmMmJnUuc2V0QXR0cmlidXRlKCJub25j
ZSIsbi5uYyksdS5zcmM9bi5wKyJzdGF0aWMvanMvIitlKyIuIit7MDoiZTZjMDEwZDU3ZDUzNTM3
ZjRhZDIiLDE6ImU3MDA4MDAxYThiZWQwMDliYmYxIn1bZV0rIi5qcyI7dmFyIGE9c2V0VGltZW91
dChyLDEyZTQpO3JldHVybiB1Lm9uZXJyb3I9dS5vbmxvYWQ9cixpLmFwcGVuZENoaWxkKHUpLGN9
LG4ubT1lLG4uYz10LG4uaT1mdW5jdGlvbihlKXtyZXR1cm4gZX0sbi5kPWZ1bmN0aW9uKGUscix0
KXtuLm8oZSxyKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGUscix7Y29uZmlndXJhYmxlOiExLGVu
dW1lcmFibGU6ITAsZ2V0OnR9KX0sbi5uPWZ1bmN0aW9uKGUpe3ZhciByPWUmJmUuX19lc01vZHVs
ZT9mdW5jdGlvbigpe3JldHVybiBlLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIGV9O3JldHVy
biBuLmQociwiYSIscikscn0sbi5vPWZ1bmN0aW9uKGUsbil7cmV0dXJuIE9iamVjdC5wcm90b3R5
cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pfSxuLnA9Ii4vIixuLm9lPWZ1bmN0aW9uKGUpe3Ro
cm93IGNvbnNvbGUuZXJyb3IoZSksZX19KFtdKTsKKy8vIyBzb3VyY2VNYXBwaW5nVVJMPW1hbmlm
ZXN0LmFhOTk3OGFhOTZlZTk0OGYyYTRjLmpzLm1hcApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEv
cmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3Z1ZWpzLWNsaS9kaXN0L3N0
YXRpYy9qcy9tYW5pZmVzdC5hYTk5NzhhYTk2ZWU5NDhmMmE0Yy5qcy5tYXAgYi9XZWJzaXRlcy9i
cm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy92dWVqcy1jbGkvZGlzdC9zdGF0aWMvanMvbWFuaWZlc3QuYWE5OTc4YWE5
NmVlOTQ4ZjJhNGMuanMubWFwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBlZjQ2MDlhY2FmZTU4MjhiOGE5MTY4Njcw
ZGM4MTkyNmZlN2FmYWMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gu
b3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy92dWVqcy1jbGkvZGlzdC9zdGF0aWMvanMvbWFuaWZlc3QuYWE5OTc4YWE5NmVlOTQ4ZjJhNGMu
anMubWFwCkBAIC0wLDAgKzEgQEAKK3sidmVyc2lvbiI6Mywic291cmNlcyI6WyJ3ZWJwYWNrOi8v
L3N0YXRpYy9qcy9tYW5pZmVzdC5hYTk5NzhhYTk2ZWU5NDhmMmE0Yy5qcyIsIndlYnBhY2s6Ly8v
d2VicGFjay9ib290c3RyYXAgZmU2MWIyOWQ5MTY3YTY4ZWFhODIiXSwibmFtZXMiOlsibW9kdWxl
cyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImluc3RhbGxlZE1vZHVsZXMiLCJl
eHBvcnRzIiwibW9kdWxlIiwiaSIsImwiLCJjYWxsIiwicGFyZW50SnNvbnBGdW5jdGlvbiIsIndp
bmRvdyIsImNodW5rSWRzIiwibW9yZU1vZHVsZXMiLCJleGVjdXRlTW9kdWxlcyIsImNodW5rSWQi
LCJyZXN1bHQiLCJyZXNvbHZlcyIsImxlbmd0aCIsImluc3RhbGxlZENodW5rcyIsInB1c2giLCJP
YmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInNoaWZ0IiwicyIsIjIiLCJlIiwi
b25TY3JpcHRDb21wbGV0ZSIsInNjcmlwdCIsIm9uZXJyb3IiLCJvbmxvYWQiLCJjbGVhclRpbWVv
dXQiLCJ0aW1lb3V0IiwiY2h1bmsiLCJFcnJvciIsInVuZGVmaW5lZCIsImluc3RhbGxlZENodW5r
RGF0YSIsIlByb21pc2UiLCJyZXNvbHZlIiwicHJvbWlzZSIsInJlamVjdCIsImhlYWQiLCJkb2N1
bWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiY3JlYXRlRWxlbWVudCIsInR5cGUiLCJjaGFy
c2V0IiwiYXN5bmMiLCJuYyIsInNldEF0dHJpYnV0ZSIsInNyYyIsInAiLCIwIiwiMSIsInNldFRp
bWVvdXQiLCJhcHBlbmRDaGlsZCIsIm0iLCJjIiwidmFsdWUiLCJkIiwibmFtZSIsImdldHRlciIs
Im8iLCJkZWZpbmVQcm9wZXJ0eSIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJnZXQiLCJu
IiwiX19lc01vZHVsZSIsIm9iamVjdCIsInByb3BlcnR5Iiwib2UiLCJlcnIiLCJjb25zb2xlIiwi
ZXJyb3IiXSwibWFwcGluZ3MiOiJDQUFTLFNBQVVBLEdDdUNuQixRQUFBQyxHQUFBQyxHQUdBLEdB
QUFDLEVBQUFELEdBQ0EsTUFBQUMsR0FBQUQsR0FBQUUsT0FHQSxJQUFBQyxHQUFBRixFQUFBRCxJ
QUNBSSxFQUFBSixFQUNBSyxHQUFBLEVBQ0FILFdBVUEsT0FOQUosR0FBQUUsR0FBQU0sS0FBQUgs
RUFBQUQsUUFBQUMsSUFBQUQsUUFBQUgsR0FHQUksRUFBQUUsR0FBQSxFQUdBRixFQUFBRCxRQTFE
QSxHQUFBSyxHQUFBQyxPQUFBLFlBQ0FBLFFBQUEsc0JBQUFDLEVBQUFDLEVBQUFDLEdBSUEsSUFE
QSxHQUFBWCxHQUFBWSxFQUFBQyxFQUFBVCxFQUFBLEVBQUFVLEtBQ1FWLEVBQUFLLEVBQUFNLE9B
QW9CWCxJQUM1QlEsRUFBQUgsRUFBQUwsR0FDQVksRUFBQUosSUFDQUUsRUFBQUcsS0FBQUQsRUFB
QUosR0FBQSxJQUVBSSxFQUFBSixHQUFBLENBRUEsS0FBQVosSUFBQVUsR0FDQVEsT0FBQUMsVUFB
QUMsZUFBQWQsS0FBQUksRUFBQVYsS0FDQUYsRUFBQUUsR0FBQVUsRUFBQVYsR0FJQSxLQURBTyxL
QUFBRSxFQUFBQyxFQUFBQyxHQUNBRyxFQUFBQyxRQUNBRCxFQUFBTyxTQUVBLElBQUFWLEVBQ0Es
SUFBQVAsRUFBQSxFQUFZQSxFQUFBTyxFQUFBSSxPQUEyQlgsSUFDdkNTLEVBQUFkLElBQUF1QixF
QUFBWCxFQUFBUCxHQUdBLE9BQUFTLEdBSUEsSUFBQVosTUFHQWUsR0FDQU8sRUFBQSxFQTZCQXhC
LEdBQUF5QixFQUFBLFNBQUFaLEdBK0JBLFFBQUFhLEtBRUFDLEVBQUFDLFFBQUFELEVBQUFFLE9B
QUEsS0FDQUMsYUFBQUMsRUFDQSxJQUFBQyxHQUFBZixFQUFBSixFQUNBLEtBQUFtQixJQUNBQSxH
QUNBQSxFQUFBLE1BQUFDLE9BQUEsaUJBQUFwQixFQUFBLGFBRUFJLEVBQUFKLE9BQUFxQixJQXZD
QSxHQUFBQyxHQUFBbEIsRUFBQUosRUFDQSxRQUFBc0IsRUFDQSxVQUFBQyxTQUFBLFNBQUFDLEdB
QTBDQSxLQUkxQyxJQUFBRixFQUNBLE1BQUFBLEdBQUEsRUFJQSxJQUFBRyxHQUFBLEdBQUFGLFNB
QUEsU0FBQUMsRUFBQUUsR0FDQUosRUFBQWxCLEVBQUFKLElBQUF3QixFQUFBRSxJQUVBSixHQUFB
LEdBQUFHLENBR0EsSUFBQUUsR0FBQUMsU0FBQUMscUJBQUEsV0FDQWYsRUFBQWMsU0FBQUUsY0FB
QSxTQUNBaEIsR0FBQWlCLEtBQUEsa0JBQ0FqQixFQUFBa0IsUUFBQSxRQUNBbEIsRUFBQW1CLE9B
QUEsRUFDQW5CLEVBQUFJLFFBQUEsS0FFQS9CLEVBQUErQyxJQUNBcEIsRUFBQXFCLGFBQUEsUUFB
QWhELEVBQUErQyxJQUVBcEIsRUFBQXNCLElBQUFqRCxFQUFBa0QsRUFBQSxhQUFBckMsRUFBQSxL
QUF3RXNDLEVBQUEsdUJBQUFDLEVBQUEsd0JBQXNEdkMsR0FBQSxLQUM5SCxJQUFBa0IsR0FBQXNC
LFdBQUEzQixFQUFBLEtBZ0JBLE9BZkFDLEdBQUFDLFFBQUFELEVBQUFFLE9BQUFILEVBYUFjLEVB
QUFjLFlBQUEzQixHQUVBVyxHQUlBdEMsRUFBQXVELEVBQUF4RCxFQUdBQyxFQUFBd0QsRUFBQXRE
LEVBR0FGLEVBQUFLLEVBQUEsU0FBQW9ELEdBQTJDLE1BQUFBLElBRzNDekQsRUFBQTBELEVBQUEs
U0FBQXZELEVBQUF3RCxFQUFBQyxHQUNBNUQsRUFBQTZELEVBQUExRCxFQUFBd0QsSUFDQXhDLE9B
QUEyQyxlQUFBM0QsRUFBQXdELEdBQ0FJLGNBQUEsRUFDQUMsWUFBQSxFQUNBQyxJQUFBTCxLQU1B
NUQsRUFBQWtFLEVBQUEsU0FBQTlELEdBQ0EsR0FBQXdELEdBQUF4RCxLQUFBK0QsV0FDQSxXQUEy
QixNQUFBL0QsR0FBQSxTQUMzQixXQUFpQyxNQUFBQSxHQUVqQyxPQURBSixHQUFBMEQsRUFBQUUs
RUFBQSxJQUFBQSxHQUNBQSxHQUlBNUQsRUFBQTZELEVBQUEsU0FBQU8sRUFBQUMsR0FBc0QsTUFB
QWxELFFBQUFDLFVBQUFDLGVBQUFkLEtBQUE2RCxFQUFBQyxJQUd0RHJFLEVBQUFrRCxFQUFBLEtB
R0FsRCxFQUFBc0UsR0FBQSxTQUFBQyxHQUE4RCxLQUFwQkMsU0FBQUMsTUFBQUYsR0FBb0JBIiwi
ZmlsZSI6InN0YXRpYy9qcy9tYW5pZmVzdC5hYTk5NzhhYTk2ZWU5NDhmMmE0Yy5qcyIsInNvdXJj
ZXNDb250ZW50IjpbIi8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290
c3RyYXBcbi8qKioqKiovIFx0Ly8gaW5zdGFsbCBhIEpTT05QIGNhbGxiYWNrIGZvciBjaHVuayBs
b2FkaW5nXG4vKioqKioqLyBcdHZhciBwYXJlbnRKc29ucEZ1bmN0aW9uID0gd2luZG93W1wid2Vi
cGFja0pzb25wXCJdO1xuLyoqKioqKi8gXHR3aW5kb3dbXCJ3ZWJwYWNrSnNvbnBcIl0gPSBmdW5j
dGlvbiB3ZWJwYWNrSnNvbnBDYWxsYmFjayhjaHVua0lkcywgbW9yZU1vZHVsZXMsIGV4ZWN1dGVN
b2R1bGVzKSB7XG4vKioqKioqLyBcdFx0Ly8gYWRkIFwibW9yZU1vZHVsZXNcIiB0byB0aGUgbW9k
dWxlcyBvYmplY3QsXG4vKioqKioqLyBcdFx0Ly8gdGhlbiBmbGFnIGFsbCBcImNodW5rSWRzXCIg
YXMgbG9hZGVkIGFuZCBmaXJlIGNhbGxiYWNrXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZUlkLCBj
aHVua0lkLCBpID0gMCwgcmVzb2x2ZXMgPSBbXSwgcmVzdWx0O1xuLyoqKioqKi8gXHRcdGZvcig7
aSA8IGNodW5rSWRzLmxlbmd0aDsgaSsrKSB7XG4vKioqKioqLyBcdFx0XHRjaHVua0lkID0gY2h1
bmtJZHNbaV07XG4vKioqKioqLyBcdFx0XHRpZihpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF0pIHtc
bi8qKioqKiovIFx0XHRcdFx0cmVzb2x2ZXMucHVzaChpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF1b
MF0pO1xuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0aW5zdGFsbGVkQ2h1bmtzW2No
dW5rSWRdID0gMDtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Zm9yKG1vZHVsZUlkIGlu
IG1vcmVNb2R1bGVzKSB7XG4vKioqKioqLyBcdFx0XHRpZihPYmplY3QucHJvdG90eXBlLmhhc093
blByb3BlcnR5LmNhbGwobW9yZU1vZHVsZXMsIG1vZHVsZUlkKSkge1xuLyoqKioqKi8gXHRcdFx0
XHRtb2R1bGVzW21vZHVsZUlkXSA9IG1vcmVNb2R1bGVzW21vZHVsZUlkXTtcbi8qKioqKiovIFx0
XHRcdH1cbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0aWYocGFyZW50SnNvbnBGdW5jdGlv
bikgcGFyZW50SnNvbnBGdW5jdGlvbihjaHVua0lkcywgbW9yZU1vZHVsZXMsIGV4ZWN1dGVNb2R1
bGVzKTtcbi8qKioqKiovIFx0XHR3aGlsZShyZXNvbHZlcy5sZW5ndGgpIHtcbi8qKioqKiovIFx0
XHRcdHJlc29sdmVzLnNoaWZ0KCkoKTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0aWYo
ZXhlY3V0ZU1vZHVsZXMpIHtcbi8qKioqKiovIFx0XHRcdGZvcihpPTA7IGkgPCBleGVjdXRlTW9k
dWxlcy5sZW5ndGg7IGkrKykge1xuLyoqKioqKi8gXHRcdFx0XHRyZXN1bHQgPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IGV4ZWN1dGVNb2R1bGVzW2ldKTtcbi8q
KioqKiovIFx0XHRcdH1cbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0cmV0dXJuIHJlc3Vs
dDtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2Fj
aGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbi8qKioqKiovXG4vKioq
KioqLyBcdC8vIG9iamVjdHMgdG8gc3RvcmUgbG9hZGVkIGFuZCBsb2FkaW5nIGNodW5rc1xuLyoq
KioqKi8gXHR2YXIgaW5zdGFsbGVkQ2h1bmtzID0ge1xuLyoqKioqKi8gXHRcdDI6IDBcbi8qKioq
KiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4v
KioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioq
KiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioq
LyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbi8qKioqKiovIFx0XHRcdHJl
dHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1c
bi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhl
IGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVs
ZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGk6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bDog
ZmFsc2UsXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioq
KioqL1xuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioq
Ki8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9k
dWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi9cbi8qKioqKiovIFx0
XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmwgPSB0
cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhl
IG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0
fVxuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhpcyBmaWxlIGNvbnRhaW5zIG9ubHkgdGhlIGVu
dHJ5IGNodW5rLlxuLyoqKioqKi8gXHQvLyBUaGUgY2h1bmsgbG9hZGluZyBmdW5jdGlvbiBmb3Ig
YWRkaXRpb25hbCBjaHVua3Ncbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5lID0gZnVu
Y3Rpb24gcmVxdWlyZUVuc3VyZShjaHVua0lkKSB7XG4vKioqKioqLyBcdFx0dmFyIGluc3RhbGxl
ZENodW5rRGF0YSA9IGluc3RhbGxlZENodW5rc1tjaHVua0lkXTtcbi8qKioqKiovIFx0XHRpZihp
bnN0YWxsZWRDaHVua0RhdGEgPT09IDApIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBuZXcgUHJv
bWlzZShmdW5jdGlvbihyZXNvbHZlKSB7IHJlc29sdmUoKTsgfSk7XG4vKioqKioqLyBcdFx0fVxu
LyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBhIFByb21pc2UgbWVhbnMgXCJjdXJyZW50bHkgbG9h
ZGluZ1wiLlxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZENodW5rRGF0YSkge1xuLyoqKioqKi8g
XHRcdFx0cmV0dXJuIGluc3RhbGxlZENodW5rRGF0YVsyXTtcbi8qKioqKiovIFx0XHR9XG4vKioq
KioqL1xuLyoqKioqKi8gXHRcdC8vIHNldHVwIFByb21pc2UgaW4gY2h1bmsgY2FjaGVcbi8qKioq
KiovIFx0XHR2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVj
dCkge1xuLyoqKioqKi8gXHRcdFx0aW5zdGFsbGVkQ2h1bmtEYXRhID0gaW5zdGFsbGVkQ2h1bmtz
W2NodW5rSWRdID0gW3Jlc29sdmUsIHJlamVjdF07XG4vKioqKioqLyBcdFx0fSk7XG4vKioqKioq
LyBcdFx0aW5zdGFsbGVkQ2h1bmtEYXRhWzJdID0gcHJvbWlzZTtcbi8qKioqKiovXG4vKioqKioq
LyBcdFx0Ly8gc3RhcnQgY2h1bmsgbG9hZGluZ1xuLyoqKioqKi8gXHRcdHZhciBoZWFkID0gZG9j
dW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcbi8qKioqKiovIFx0XHR2YXIg
c2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4vKioqKioqLyBcdFx0
c2NyaXB0LnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0Jztcbi8qKioqKiovIFx0XHRzY3JpcHQuY2hh
cnNldCA9ICd1dGYtOCc7XG4vKioqKioqLyBcdFx0c2NyaXB0LmFzeW5jID0gdHJ1ZTtcbi8qKioq
KiovIFx0XHRzY3JpcHQudGltZW91dCA9IDEyMDAwMDtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0
aWYgKF9fd2VicGFja19yZXF1aXJlX18ubmMpIHtcbi8qKioqKiovIFx0XHRcdHNjcmlwdC5zZXRB
dHRyaWJ1dGUoXCJub25jZVwiLCBfX3dlYnBhY2tfcmVxdWlyZV9fLm5jKTtcbi8qKioqKiovIFx0
XHR9XG4vKioqKioqLyBcdFx0c2NyaXB0LnNyYyA9IF9fd2VicGFja19yZXF1aXJlX18ucCArIFwi
c3RhdGljL2pzL1wiICsgY2h1bmtJZCArIFwiLlwiICsge1wiMFwiOlwiZTZjMDEwZDU3ZDUzNTM3
ZjRhZDJcIixcIjFcIjpcImU3MDA4MDAxYThiZWQwMDliYmYxXCJ9W2NodW5rSWRdICsgXCIuanNc
Ijtcbi8qKioqKiovIFx0XHR2YXIgdGltZW91dCA9IHNldFRpbWVvdXQob25TY3JpcHRDb21wbGV0
ZSwgMTIwMDAwKTtcbi8qKioqKiovIFx0XHRzY3JpcHQub25lcnJvciA9IHNjcmlwdC5vbmxvYWQg
PSBvblNjcmlwdENvbXBsZXRlO1xuLyoqKioqKi8gXHRcdGZ1bmN0aW9uIG9uU2NyaXB0Q29tcGxl
dGUoKSB7XG4vKioqKioqLyBcdFx0XHQvLyBhdm9pZCBtZW0gbGVha3MgaW4gSUUuXG4vKioqKioq
LyBcdFx0XHRzY3JpcHQub25lcnJvciA9IHNjcmlwdC5vbmxvYWQgPSBudWxsO1xuLyoqKioqKi8g
XHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuLyoqKioqKi8gXHRcdFx0dmFyIGNodW5rID0g
aW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdO1xuLyoqKioqKi8gXHRcdFx0aWYoY2h1bmsgIT09IDAp
IHtcbi8qKioqKiovIFx0XHRcdFx0aWYoY2h1bmspIHtcbi8qKioqKiovIFx0XHRcdFx0XHRjaHVu
a1sxXShuZXcgRXJyb3IoJ0xvYWRpbmcgY2h1bmsgJyArIGNodW5rSWQgKyAnIGZhaWxlZC4nKSk7
XG4vKioqKioqLyBcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdFx0aW5zdGFsbGVkQ2h1bmtzW2No
dW5rSWRdID0gdW5kZWZpbmVkO1xuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdH07XG4v
KioqKioqLyBcdFx0aGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuLyoqKioqKi9cbi8qKioqKiov
IFx0XHRyZXR1cm4gcHJvbWlzZTtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBc
dC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioq
KioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioq
Ki8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVx
dWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gaWRl
bnRpdHkgZnVuY3Rpb24gZm9yIGNhbGxpbmcgaGFybW9ueSBpbXBvcnRzIHdpdGggdGhlIGNvcnJl
Y3QgY29udGV4dFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmkgPSBmdW5jdGlvbih2
YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUg
Z2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNr
X3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioq
LyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioq
Ki8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbi8qKioqKiov
IFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdFx0ZW51bWVyYWJs
ZTogdHJ1ZSxcbi8qKioqKiovIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbi8qKioqKiovIFx0XHRcdH0p
O1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8v
IGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFy
bW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9u
KG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9f
ZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJu
IG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVs
ZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3Jl
cXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0
ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90
eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5v
ID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5o
YXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioq
KiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3Jl
cXVpcmVfXy5wID0gXCIuL1wiO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gb24gZXJyb3IgZnVu
Y3Rpb24gZm9yIGFzeW5jIGxvYWRpbmdcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5v
ZSA9IGZ1bmN0aW9uKGVycikgeyBjb25zb2xlLmVycm9yKGVycik7IHRocm93IGVycjsgfTtcbi8q
KioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKFtdKTtcblxuXG4vLyBXRUJQ
QUNLIEZPT1RFUiAvL1xuLy8gc3RhdGljL2pzL21hbmlmZXN0LmFhOTk3OGFhOTZlZTk0OGYyYTRj
LmpzIiwiIFx0Ly8gaW5zdGFsbCBhIEpTT05QIGNhbGxiYWNrIGZvciBjaHVuayBsb2FkaW5nXG4g
XHR2YXIgcGFyZW50SnNvbnBGdW5jdGlvbiA9IHdpbmRvd1tcIndlYnBhY2tKc29ucFwiXTtcbiBc
dHdpbmRvd1tcIndlYnBhY2tKc29ucFwiXSA9IGZ1bmN0aW9uIHdlYnBhY2tKc29ucENhbGxiYWNr
KGNodW5rSWRzLCBtb3JlTW9kdWxlcywgZXhlY3V0ZU1vZHVsZXMpIHtcbiBcdFx0Ly8gYWRkIFwi
bW9yZU1vZHVsZXNcIiB0byB0aGUgbW9kdWxlcyBvYmplY3QsXG4gXHRcdC8vIHRoZW4gZmxhZyBh
bGwgXCJjaHVua0lkc1wiIGFzIGxvYWRlZCBhbmQgZmlyZSBjYWxsYmFja1xuIFx0XHR2YXIgbW9k
dWxlSWQsIGNodW5rSWQsIGkgPSAwLCByZXNvbHZlcyA9IFtdLCByZXN1bHQ7XG4gXHRcdGZvcig7
aSA8IGNodW5rSWRzLmxlbmd0aDsgaSsrKSB7XG4gXHRcdFx0Y2h1bmtJZCA9IGNodW5rSWRzW2ld
O1xuIFx0XHRcdGlmKGluc3RhbGxlZENodW5rc1tjaHVua0lkXSkge1xuIFx0XHRcdFx0cmVzb2x2
ZXMucHVzaChpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF1bMF0pO1xuIFx0XHRcdH1cbiBcdFx0XHRp
bnN0YWxsZWRDaHVua3NbY2h1bmtJZF0gPSAwO1xuIFx0XHR9XG4gXHRcdGZvcihtb2R1bGVJZCBp
biBtb3JlTW9kdWxlcykge1xuIFx0XHRcdGlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVy
dHkuY2FsbChtb3JlTW9kdWxlcywgbW9kdWxlSWQpKSB7XG4gXHRcdFx0XHRtb2R1bGVzW21vZHVs
ZUlkXSA9IG1vcmVNb2R1bGVzW21vZHVsZUlkXTtcbiBcdFx0XHR9XG4gXHRcdH1cbiBcdFx0aWYo
cGFyZW50SnNvbnBGdW5jdGlvbikgcGFyZW50SnNvbnBGdW5jdGlvbihjaHVua0lkcywgbW9yZU1v
ZHVsZXMsIGV4ZWN1dGVNb2R1bGVzKTtcbiBcdFx0d2hpbGUocmVzb2x2ZXMubGVuZ3RoKSB7XG4g
XHRcdFx0cmVzb2x2ZXMuc2hpZnQoKSgpO1xuIFx0XHR9XG4gXHRcdGlmKGV4ZWN1dGVNb2R1bGVz
KSB7XG4gXHRcdFx0Zm9yKGk9MDsgaSA8IGV4ZWN1dGVNb2R1bGVzLmxlbmd0aDsgaSsrKSB7XG4g
XHRcdFx0XHRyZXN1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18u
cyA9IGV4ZWN1dGVNb2R1bGVzW2ldKTtcbiBcdFx0XHR9XG4gXHRcdH1cbiBcdFx0cmV0dXJuIHJl
c3VsdDtcbiBcdH07XG5cbiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRN
b2R1bGVzID0ge307XG5cbiBcdC8vIG9iamVjdHMgdG8gc3RvcmUgbG9hZGVkIGFuZCBsb2FkaW5n
IGNodW5rc1xuIFx0dmFyIGluc3RhbGxlZENodW5rcyA9IHtcbiBcdFx0MjogMFxuIFx0fTtcblxu
IFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJl
X18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBc
dFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFs
bGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBu
ZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0g
aW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRc
dFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVj
dXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1
bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7
XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRy
dWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0
dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG4gXHQvLyBUaGlzIGZpbGUgY29udGFpbnMgb25s
eSB0aGUgZW50cnkgY2h1bmsuXG4gXHQvLyBUaGUgY2h1bmsgbG9hZGluZyBmdW5jdGlvbiBmb3Ig
YWRkaXRpb25hbCBjaHVua3NcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZSA9IGZ1bmN0aW9uIHJl
cXVpcmVFbnN1cmUoY2h1bmtJZCkge1xuIFx0XHR2YXIgaW5zdGFsbGVkQ2h1bmtEYXRhID0gaW5z
dGFsbGVkQ2h1bmtzW2NodW5rSWRdO1xuIFx0XHRpZihpbnN0YWxsZWRDaHVua0RhdGEgPT09IDAp
IHtcbiBcdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkgeyByZXNvbHZl
KCk7IH0pO1xuIFx0XHR9XG5cbiBcdFx0Ly8gYSBQcm9taXNlIG1lYW5zIFwiY3VycmVudGx5IGxv
YWRpbmdcIi5cbiBcdFx0aWYoaW5zdGFsbGVkQ2h1bmtEYXRhKSB7XG4gXHRcdFx0cmV0dXJuIGlu
c3RhbGxlZENodW5rRGF0YVsyXTtcbiBcdFx0fVxuXG4gXHRcdC8vIHNldHVwIFByb21pc2UgaW4g
Y2h1bmsgY2FjaGVcbiBcdFx0dmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNv
bHZlLCByZWplY3QpIHtcbiBcdFx0XHRpbnN0YWxsZWRDaHVua0RhdGEgPSBpbnN0YWxsZWRDaHVu
a3NbY2h1bmtJZF0gPSBbcmVzb2x2ZSwgcmVqZWN0XTtcbiBcdFx0fSk7XG4gXHRcdGluc3RhbGxl
ZENodW5rRGF0YVsyXSA9IHByb21pc2U7XG5cbiBcdFx0Ly8gc3RhcnQgY2h1bmsgbG9hZGluZ1xu
IFx0XHR2YXIgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07
XG4gXHRcdHZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiBc
dFx0c2NyaXB0LnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JztcbiBcdFx0c2NyaXB0LmNoYXJzZXQg
PSAndXRmLTgnO1xuIFx0XHRzY3JpcHQuYXN5bmMgPSB0cnVlO1xuIFx0XHRzY3JpcHQudGltZW91
dCA9IDEyMDAwMDtcblxuIFx0XHRpZiAoX193ZWJwYWNrX3JlcXVpcmVfXy5uYykge1xuIFx0XHRc
dHNjcmlwdC5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLCBfX3dlYnBhY2tfcmVxdWlyZV9fLm5jKTtc
biBcdFx0fVxuIFx0XHRzY3JpcHQuc3JjID0gX193ZWJwYWNrX3JlcXVpcmVfXy5wICsgXCJzdGF0
aWMvanMvXCIgKyBjaHVua0lkICsgXCIuXCIgKyB7XCIwXCI6XCJlNmMwMTBkNTdkNTM1MzdmNGFk
MlwiLFwiMVwiOlwiZTcwMDgwMDFhOGJlZDAwOWJiZjFcIn1bY2h1bmtJZF0gKyBcIi5qc1wiO1xu
IFx0XHR2YXIgdGltZW91dCA9IHNldFRpbWVvdXQob25TY3JpcHRDb21wbGV0ZSwgMTIwMDAwKTtc
biBcdFx0c2NyaXB0Lm9uZXJyb3IgPSBzY3JpcHQub25sb2FkID0gb25TY3JpcHRDb21wbGV0ZTtc
biBcdFx0ZnVuY3Rpb24gb25TY3JpcHRDb21wbGV0ZSgpIHtcbiBcdFx0XHQvLyBhdm9pZCBtZW0g
bGVha3MgaW4gSUUuXG4gXHRcdFx0c2NyaXB0Lm9uZXJyb3IgPSBzY3JpcHQub25sb2FkID0gbnVs
bDtcbiBcdFx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG4gXHRcdFx0dmFyIGNodW5rID0gaW5z
dGFsbGVkQ2h1bmtzW2NodW5rSWRdO1xuIFx0XHRcdGlmKGNodW5rICE9PSAwKSB7XG4gXHRcdFx0
XHRpZihjaHVuaykge1xuIFx0XHRcdFx0XHRjaHVua1sxXShuZXcgRXJyb3IoJ0xvYWRpbmcgY2h1
bmsgJyArIGNodW5rSWQgKyAnIGZhaWxlZC4nKSk7XG4gXHRcdFx0XHR9XG4gXHRcdFx0XHRpbnN0
YWxsZWRDaHVua3NbY2h1bmtJZF0gPSB1bmRlZmluZWQ7XG4gXHRcdFx0fVxuIFx0XHR9O1xuIFx0
XHRoZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG5cbiBcdFx0cmV0dXJuIHByb21pc2U7XG4gXHR9
O1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19f
KVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRo
ZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVs
ZXM7XG5cbiBcdC8vIGlkZW50aXR5IGZ1bmN0aW9uIGZvciBjYWxsaW5nIGhhcm1vbnkgaW1wb3J0
cyB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHRcbiBcdF9fd2VicGFja19yZXF1aXJlX18uaSA9IGZ1
bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBm
dW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBm
dW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1
aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShl
eHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0
ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRc
dH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGli
aWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4g
PSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUu
X19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVs
ZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyBy
ZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScs
IGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJv
dG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1
bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3du
UHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1
YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiLi9cIjtcblxuIFx0Ly8g
b24gZXJyb3IgZnVuY3Rpb24gZm9yIGFzeW5jIGxvYWRpbmdcbiBcdF9fd2VicGFja19yZXF1aXJl
X18ub2UgPSBmdW5jdGlvbihlcnIpIHsgY29uc29sZS5lcnJvcihlcnIpOyB0aHJvdyBlcnI7IH07
XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgZmU2MWIy
OWQ5MTY3YTY4ZWFhODIiXSwic291cmNlUm9vdCI6IiJ9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
ZmlsZQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIu
MS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvdnVlanMtY2xpL2Rpc3Qv
c3RhdGljL2pzL3ZlbmRvci5lNzAwODAwMWE4YmVkMDA5YmJmMS5qcyBiL1dlYnNpdGVzL2Jyb3dz
ZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL3Z1ZWpzLWNsaS9kaXN0L3N0YXRpYy9qcy92ZW5kb3IuZTcwMDgwMDFhOGJlZDAw
OWJiZjEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZjQ2YzdlMzk5NWNhY2UwMjMzZjVhOGE3NTM3NmU5YzlhOTk3
M2E4MQotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRv
bWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3Z1ZWpzLWNs
aS9kaXN0L3N0YXRpYy9qcy92ZW5kb3IuZTcwMDgwMDFhOGJlZDAwOWJiZjEuanMKQEAgLTAsMCAr
MSw3IEBACit3ZWJwYWNrSnNvbnAoWzFdLHsiNyt1VyI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3Ry
aWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZnVu
Y3Rpb24odCl7LyohCisgKiBWdWUuanMgdjIuNC4yCisgKiAoYykgMjAxNC0yMDE3IEV2YW4gWW91
CisgKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuCisgKi8KK2Z1bmN0aW9uIG4odCl7
cmV0dXJuIHZvaWQgMD09PXR8fG51bGw9PT10fWZ1bmN0aW9uIHIodCl7cmV0dXJuIHZvaWQgMCE9
PXQmJm51bGwhPT10fWZ1bmN0aW9uIGkodCl7cmV0dXJuITA9PT10fWZ1bmN0aW9uIG8odCl7cmV0
dXJuITE9PT10fWZ1bmN0aW9uIGEodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0fHwibnVtYmVy
Ij09dHlwZW9mIHR8fCJib29sZWFuIj09dHlwZW9mIHR9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gbnVs
bCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdH1mdW5jdGlvbiBjKHQpe3JldHVybiJbb2JqZWN0IE9i
amVjdF0iPT09UmkuY2FsbCh0KX1mdW5jdGlvbiB1KHQpe3JldHVybiJbb2JqZWN0IFJlZ0V4cF0i
PT09UmkuY2FsbCh0KX1mdW5jdGlvbiBsKHQpe3ZhciBlPXBhcnNlRmxvYXQodCk7cmV0dXJuIGU+
PTAmJk1hdGguZmxvb3IoZSk9PT1lJiZpc0Zpbml0ZSh0KX1mdW5jdGlvbiBmKHQpe3JldHVybiBu
dWxsPT10PyIiOiJvYmplY3QiPT10eXBlb2YgdD9KU09OLnN0cmluZ2lmeSh0LG51bGwsMik6U3Ry
aW5nKHQpfWZ1bmN0aW9uIHAodCl7dmFyIGU9cGFyc2VGbG9hdCh0KTtyZXR1cm4gaXNOYU4oZSk/
dDplfWZ1bmN0aW9uIGQodCxlKXtmb3IodmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKSxyPXQuc3Bs
aXQoIiwiKSxpPTA7aTxyLmxlbmd0aDtpKyspbltyW2ldXT0hMDtyZXR1cm4gZT9mdW5jdGlvbih0
KXtyZXR1cm4gblt0LnRvTG93ZXJDYXNlKCldfTpmdW5jdGlvbih0KXtyZXR1cm4gblt0XX19ZnVu
Y3Rpb24gaCh0LGUpe2lmKHQubGVuZ3RoKXt2YXIgbj10LmluZGV4T2YoZSk7aWYobj4tMSlyZXR1
cm4gdC5zcGxpY2UobiwxKX19ZnVuY3Rpb24gdih0LGUpe3JldHVybiBCaS5jYWxsKHQsZSl9ZnVu
Y3Rpb24gbSh0KXt2YXIgZT1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBmdW5jdGlvbihuKXty
ZXR1cm4gZVtuXXx8KGVbbl09dChuKSl9fWZ1bmN0aW9uIHkodCxlKXtmdW5jdGlvbiBuKG4pe3Zh
ciByPWFyZ3VtZW50cy5sZW5ndGg7cmV0dXJuIHI/cj4xP3QuYXBwbHkoZSxhcmd1bWVudHMpOnQu
Y2FsbChlLG4pOnQuY2FsbChlKX1yZXR1cm4gbi5fbGVuZ3RoPXQubGVuZ3RoLG59ZnVuY3Rpb24g
Zyh0LGUpe2U9ZXx8MDtmb3IodmFyIG49dC5sZW5ndGgtZSxyPW5ldyBBcnJheShuKTtuLS07KXJb
bl09dFtuK2VdO3JldHVybiByfWZ1bmN0aW9uIF8odCxlKXtmb3IodmFyIG4gaW4gZSl0W25dPWVb
bl07cmV0dXJuIHR9ZnVuY3Rpb24gYih0KXtmb3IodmFyIGU9e30sbj0wO248dC5sZW5ndGg7bisr
KXRbbl0mJl8oZSx0W25dKTtyZXR1cm4gZX1mdW5jdGlvbiB3KHQsZSxuKXt9ZnVuY3Rpb24gJCh0
LGUpe2lmKHQ9PT1lKXJldHVybiEwO3ZhciBuPXModCkscj1zKGUpO2lmKCFufHwhcilyZXR1cm4h
biYmIXImJlN0cmluZyh0KT09PVN0cmluZyhlKTt0cnl7dmFyIGk9QXJyYXkuaXNBcnJheSh0KSxv
PUFycmF5LmlzQXJyYXkoZSk7aWYoaSYmbylyZXR1cm4gdC5sZW5ndGg9PT1lLmxlbmd0aCYmdC5l
dmVyeShmdW5jdGlvbih0LG4pe3JldHVybiAkKHQsZVtuXSl9KTtpZihpfHxvKXJldHVybiExO3Zh
ciBhPU9iamVjdC5rZXlzKHQpLGM9T2JqZWN0LmtleXMoZSk7cmV0dXJuIGEubGVuZ3RoPT09Yy5s
ZW5ndGgmJmEuZXZlcnkoZnVuY3Rpb24obil7cmV0dXJuICQodFtuXSxlW25dKX0pfWNhdGNoKHQp
e3JldHVybiExfX1mdW5jdGlvbiBDKHQsZSl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspaWYo
JCh0W25dLGUpKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIHgodCl7dmFyIGU9ITE7cmV0dXJu
IGZ1bmN0aW9uKCl7ZXx8KGU9ITAsdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBB
KHQpe3ZhciBlPSh0KyIiKS5jaGFyQ29kZUF0KDApO3JldHVybiAzNj09PWV8fDk1PT09ZX1mdW5j
dGlvbiBrKHQsZSxuLHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse3ZhbHVlOm4sZW51bWVy
YWJsZTohIXIsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9ZnVuY3Rpb24gTyh0KXtpZigh
UWkudGVzdCh0KSl7dmFyIGU9dC5zcGxpdCgiLiIpO3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFy
IG49MDtuPGUubGVuZ3RoO24rKyl7aWYoIXQpcmV0dXJuO3Q9dFtlW25dXX1yZXR1cm4gdH19fWZ1
bmN0aW9uIFModCxlLG4pe2lmKFhpLmVycm9ySGFuZGxlcilYaS5lcnJvckhhbmRsZXIuY2FsbChu
dWxsLHQsZSxuKTtlbHNle2lmKCFub3x8InVuZGVmaW5lZCI9PXR5cGVvZiBjb25zb2xlKXRocm93
IHQ7Y29uc29sZS5lcnJvcih0KX19ZnVuY3Rpb24gVCh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBl
b2YgdCYmL25hdGl2ZSBjb2RlLy50ZXN0KHQudG9TdHJpbmcoKSl9ZnVuY3Rpb24gRSh0KXt3by50
YXJnZXQmJiRvLnB1c2god28udGFyZ2V0KSx3by50YXJnZXQ9dH1mdW5jdGlvbiBqKCl7d28udGFy
Z2V0PSRvLnBvcCgpfWZ1bmN0aW9uIE4odCxlLG4pe3QuX19wcm90b19fPWV9ZnVuY3Rpb24gTCh0
LGUsbil7Zm9yKHZhciByPTAsaT1uLmxlbmd0aDtyPGk7cisrKXt2YXIgbz1uW3JdO2sodCxvLGVb
b10pfX1mdW5jdGlvbiBNKHQsZSl7aWYocyh0KSl7dmFyIG47cmV0dXJuIHYodCwiX19vYl9fIikm
JnQuX19vYl9fIGluc3RhbmNlb2YgT28/bj10Ll9fb2JfXzprby5zaG91bGRDb252ZXJ0JiYhbW8o
KSYmKEFycmF5LmlzQXJyYXkodCl8fGModCkpJiZPYmplY3QuaXNFeHRlbnNpYmxlKHQpJiYhdC5f
aXNWdWUmJihuPW5ldyBPbyh0KSksZSYmbiYmbi52bUNvdW50Kyssbn19ZnVuY3Rpb24gSSh0LGUs
bixyLGkpe3ZhciBvPW5ldyB3byxhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxl
KTtpZighYXx8ITEhPT1hLmNvbmZpZ3VyYWJsZSl7dmFyIHM9YSYmYS5nZXQsYz1hJiZhLnNldCx1
PSFpJiZNKG4pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse2VudW1lcmFibGU6ITAsY29uZmln
dXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciBlPXM/cy5jYWxsKHQpOm47cmV0dXJuIHdvLnRh
cmdldCYmKG8uZGVwZW5kKCksdSYmdS5kZXAuZGVwZW5kKCksQXJyYXkuaXNBcnJheShlKSYmRChl
KSksZX0sc2V0OmZ1bmN0aW9uKGUpe3ZhciByPXM/cy5jYWxsKHQpOm47ZT09PXJ8fGUhPT1lJiZy
IT09cnx8KGM/Yy5jYWxsKHQsZSk6bj1lLHU9IWkmJk0oZSksby5ub3RpZnkoKSl9fSl9fWZ1bmN0
aW9uIFAodCxlLG4pe2lmKEFycmF5LmlzQXJyYXkodCkmJmwoZSkpcmV0dXJuIHQubGVuZ3RoPU1h
dGgubWF4KHQubGVuZ3RoLGUpLHQuc3BsaWNlKGUsMSxuKSxuO2lmKHYodCxlKSlyZXR1cm4gdFtl
XT1uLG47dmFyIHI9dC5fX29iX187cmV0dXJuIHQuX2lzVnVlfHxyJiZyLnZtQ291bnQ/bjpyPyhJ
KHIudmFsdWUsZSxuKSxyLmRlcC5ub3RpZnkoKSxuKToodFtlXT1uLG4pfWZ1bmN0aW9uIFIodCxl
KXtpZihBcnJheS5pc0FycmF5KHQpJiZsKGUpKXJldHVybiB2b2lkIHQuc3BsaWNlKGUsMSk7dmFy
IG49dC5fX29iX187dC5faXNWdWV8fG4mJm4udm1Db3VudHx8dih0LGUpJiYoZGVsZXRlIHRbZV0s
biYmbi5kZXAubm90aWZ5KCkpfWZ1bmN0aW9uIEQodCl7Zm9yKHZhciBlPXZvaWQgMCxuPTAscj10
Lmxlbmd0aDtuPHI7bisrKWU9dFtuXSxlJiZlLl9fb2JfXyYmZS5fX29iX18uZGVwLmRlcGVuZCgp
LEFycmF5LmlzQXJyYXkoZSkmJkQoZSl9ZnVuY3Rpb24gRih0LGUpe2lmKCFlKXJldHVybiB0O2Zv
cih2YXIgbixyLGksbz1PYmplY3Qua2V5cyhlKSxhPTA7YTxvLmxlbmd0aDthKyspbj1vW2FdLHI9
dFtuXSxpPWVbbl0sdih0LG4pP2MocikmJmMoaSkmJkYocixpKTpQKHQsbixpKTtyZXR1cm4gdH1m
dW5jdGlvbiBCKHQsZSxuKXtyZXR1cm4gbj90fHxlP2Z1bmN0aW9uKCl7dmFyIHI9ImZ1bmN0aW9u
Ij09dHlwZW9mIGU/ZS5jYWxsKG4pOmUsaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90LmNhbGwobik6
dm9pZCAwO3JldHVybiByP0YocixpKTppfTp2b2lkIDA6ZT90P2Z1bmN0aW9uKCl7cmV0dXJuIEYo
ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5jYWxsKHRoaXMpOmUsImZ1bmN0aW9uIj09dHlwZW9mIHQ/
dC5jYWxsKHRoaXMpOnQpfTplOnR9ZnVuY3Rpb24gVSh0LGUpe3JldHVybiBlP3Q/dC5jb25jYXQo
ZSk6QXJyYXkuaXNBcnJheShlKT9lOltlXTp0fWZ1bmN0aW9uIEgodCxlKXt2YXIgbj1PYmplY3Qu
Y3JlYXRlKHR8fG51bGwpO3JldHVybiBlP18obixlKTpufWZ1bmN0aW9uIFYodCl7dmFyIGU9dC5w
cm9wcztpZihlKXt2YXIgbixyLGksbz17fTtpZihBcnJheS5pc0FycmF5KGUpKWZvcihuPWUubGVu
Z3RoO24tLTspInN0cmluZyI9PXR5cGVvZihyPWVbbl0pJiYoaT1IaShyKSxvW2ldPXt0eXBlOm51
bGx9KTtlbHNlIGlmKGMoZSkpZm9yKHZhciBhIGluIGUpcj1lW2FdLGk9SGkoYSksb1tpXT1jKHIp
P3I6e3R5cGU6cn07dC5wcm9wcz1vfX1mdW5jdGlvbiB6KHQpe3ZhciBlPXQuaW5qZWN0O2lmKEFy
cmF5LmlzQXJyYXkoZSkpZm9yKHZhciBuPXQuaW5qZWN0PXt9LHI9MDtyPGUubGVuZ3RoO3IrKylu
W2Vbcl1dPWVbcl19ZnVuY3Rpb24gSih0KXt2YXIgZT10LmRpcmVjdGl2ZXM7aWYoZSlmb3IodmFy
IG4gaW4gZSl7dmFyIHI9ZVtuXTsiZnVuY3Rpb24iPT10eXBlb2YgciYmKGVbbl09e2JpbmQ6cix1
cGRhdGU6cn0pfX1mdW5jdGlvbiBLKHQsZSxuKXtmdW5jdGlvbiByKHIpe3ZhciBpPVNvW3JdfHxU
bztjW3JdPWkodFtyXSxlW3JdLG4scil9ImZ1bmN0aW9uIj09dHlwZW9mIGUmJihlPWUub3B0aW9u
cyksVihlKSx6KGUpLEooZSk7dmFyIGk9ZS5leHRlbmRzO2lmKGkmJih0PUsodCxpLG4pKSxlLm1p
eGlucylmb3IodmFyIG89MCxhPWUubWl4aW5zLmxlbmd0aDtvPGE7bysrKXQ9Syh0LGUubWl4aW5z
W29dLG4pO3ZhciBzLGM9e307Zm9yKHMgaW4gdClyKHMpO2ZvcihzIGluIGUpdih0LHMpfHxyKHMp
O3JldHVybiBjfWZ1bmN0aW9uIHEodCxlLG4scil7aWYoInN0cmluZyI9PXR5cGVvZiBuKXt2YXIg
aT10W2VdO2lmKHYoaSxuKSlyZXR1cm4gaVtuXTt2YXIgbz1IaShuKTtpZih2KGksbykpcmV0dXJu
IGlbb107dmFyIGE9Vmkobyk7aWYodihpLGEpKXJldHVybiBpW2FdO3JldHVybiBpW25dfHxpW29d
fHxpW2FdfX1mdW5jdGlvbiBXKHQsZSxuLHIpe3ZhciBpPWVbdF0sbz0hdihuLHQpLGE9blt0XTtp
ZihYKEJvb2xlYW4saS50eXBlKSYmKG8mJiF2KGksImRlZmF1bHQiKT9hPSExOlgoU3RyaW5nLGku
dHlwZSl8fCIiIT09YSYmYSE9PUppKHQpfHwoYT0hMCkpLHZvaWQgMD09PWEpe2E9WihyLGksdCk7
dmFyIHM9a28uc2hvdWxkQ29udmVydDtrby5zaG91bGRDb252ZXJ0PSEwLE0oYSksa28uc2hvdWxk
Q29udmVydD1zfXJldHVybiBhfWZ1bmN0aW9uIFoodCxlLG4pe2lmKHYoZSwiZGVmYXVsdCIpKXt2
YXIgcj1lLmRlZmF1bHQ7cmV0dXJuIHQmJnQuJG9wdGlvbnMucHJvcHNEYXRhJiZ2b2lkIDA9PT10
LiRvcHRpb25zLnByb3BzRGF0YVtuXSYmdm9pZCAwIT09dC5fcHJvcHNbbl0/dC5fcHJvcHNbbl06
ImZ1bmN0aW9uIj09dHlwZW9mIHImJiJGdW5jdGlvbiIhPT1HKGUudHlwZSk/ci5jYWxsKHQpOnJ9
fWZ1bmN0aW9uIEcodCl7dmFyIGU9dCYmdC50b1N0cmluZygpLm1hdGNoKC9eXHMqZnVuY3Rpb24g
KFx3KykvKTtyZXR1cm4gZT9lWzFdOiIifWZ1bmN0aW9uIFgodCxlKXtpZighQXJyYXkuaXNBcnJh
eShlKSlyZXR1cm4gRyhlKT09PUcodCk7Zm9yKHZhciBuPTAscj1lLmxlbmd0aDtuPHI7bisrKWlm
KEcoZVtuXSk9PT1HKHQpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFkodCl7cmV0dXJuIG5l
dyBFbyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxTdHJpbmcodCkpfWZ1bmN0aW9uIFEodCl7dmFyIGU9
bmV3IEVvKHQudGFnLHQuZGF0YSx0LmNoaWxkcmVuLHQudGV4dCx0LmVsbSx0LmNvbnRleHQsdC5j
b21wb25lbnRPcHRpb25zLHQuYXN5bmNGYWN0b3J5KTtyZXR1cm4gZS5ucz10Lm5zLGUuaXNTdGF0
aWM9dC5pc1N0YXRpYyxlLmtleT10LmtleSxlLmlzQ29tbWVudD10LmlzQ29tbWVudCxlLmlzQ2xv
bmVkPSEwLGV9ZnVuY3Rpb24gdHQodCl7Zm9yKHZhciBlPXQubGVuZ3RoLG49bmV3IEFycmF5KGUp
LHI9MDtyPGU7cisrKW5bcl09USh0W3JdKTtyZXR1cm4gbn1mdW5jdGlvbiBldCh0KXtmdW5jdGlv
biBlKCl7dmFyIHQ9YXJndW1lbnRzLG49ZS5mbnM7aWYoIUFycmF5LmlzQXJyYXkobikpcmV0dXJu
IG4uYXBwbHkobnVsbCxhcmd1bWVudHMpO2Zvcih2YXIgcj1uLnNsaWNlKCksaT0wO2k8ci5sZW5n
dGg7aSsrKXJbaV0uYXBwbHkobnVsbCx0KX1yZXR1cm4gZS5mbnM9dCxlfWZ1bmN0aW9uIG50KHQs
ZSxyLGksbyl7dmFyIGEscyxjLHU7Zm9yKGEgaW4gdClzPXRbYV0sYz1lW2FdLHU9TW8oYSksbihz
KXx8KG4oYyk/KG4ocy5mbnMpJiYocz10W2FdPWV0KHMpKSxyKHUubmFtZSxzLHUub25jZSx1LmNh
cHR1cmUsdS5wYXNzaXZlKSk6cyE9PWMmJihjLmZucz1zLHRbYV09YykpO2ZvcihhIGluIGUpbih0
W2FdKSYmKHU9TW8oYSksaSh1Lm5hbWUsZVthXSx1LmNhcHR1cmUpKX1mdW5jdGlvbiBydCh0LGUs
byl7ZnVuY3Rpb24gYSgpe28uYXBwbHkodGhpcyxhcmd1bWVudHMpLGgocy5mbnMsYSl9dmFyIHMs
Yz10W2VdO24oYyk/cz1ldChbYV0pOnIoYy5mbnMpJiZpKGMubWVyZ2VkKT8ocz1jLHMuZm5zLnB1
c2goYSkpOnM9ZXQoW2MsYV0pLHMubWVyZ2VkPSEwLHRbZV09c31mdW5jdGlvbiBpdCh0LGUsaSl7
dmFyIG89ZS5vcHRpb25zLnByb3BzO2lmKCFuKG8pKXt2YXIgYT17fSxzPXQuYXR0cnMsYz10LnBy
b3BzO2lmKHIocyl8fHIoYykpZm9yKHZhciB1IGluIG8pe3ZhciBsPUppKHUpO290KGEsYyx1LGws
ITApfHxvdChhLHMsdSxsLCExKX1yZXR1cm4gYX19ZnVuY3Rpb24gb3QodCxlLG4saSxvKXtpZihy
KGUpKXtpZih2KGUsbikpcmV0dXJuIHRbbl09ZVtuXSxvfHxkZWxldGUgZVtuXSwhMDtpZih2KGUs
aSkpcmV0dXJuIHRbbl09ZVtpXSxvfHxkZWxldGUgZVtpXSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBh
dCh0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylpZihBcnJheS5pc0FycmF5KHRbZV0pKXJl
dHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLHQpO3JldHVybiB0fWZ1bmN0aW9u
IHN0KHQpe3JldHVybiBhKHQpP1tZKHQpXTpBcnJheS5pc0FycmF5KHQpP3V0KHQpOnZvaWQgMH1m
dW5jdGlvbiBjdCh0KXtyZXR1cm4gcih0KSYmcih0LnRleHQpJiZvKHQuaXNDb21tZW50KX1mdW5j
dGlvbiB1dCh0LGUpe3ZhciBvLHMsYyx1PVtdO2ZvcihvPTA7bzx0Lmxlbmd0aDtvKyspcz10W29d
LG4ocyl8fCJib29sZWFuIj09dHlwZW9mIHN8fChjPXVbdS5sZW5ndGgtMV0sQXJyYXkuaXNBcnJh
eShzKT91LnB1c2guYXBwbHkodSx1dChzLChlfHwiIikrIl8iK28pKTphKHMpP2N0KGMpP2MudGV4
dCs9U3RyaW5nKHMpOiIiIT09cyYmdS5wdXNoKFkocykpOmN0KHMpJiZjdChjKT91W3UubGVuZ3Ro
LTFdPVkoYy50ZXh0K3MudGV4dCk6KGkodC5faXNWTGlzdCkmJnIocy50YWcpJiZuKHMua2V5KSYm
cihlKSYmKHMua2V5PSJfX3ZsaXN0IitlKyJfIitvKyJfXyIpLHUucHVzaChzKSkpO3JldHVybiB1
fWZ1bmN0aW9uIGx0KHQsZSl7cmV0dXJuIHQuX19lc01vZHVsZSYmdC5kZWZhdWx0JiYodD10LmRl
ZmF1bHQpLHModCk/ZS5leHRlbmQodCk6dH1mdW5jdGlvbiBmdCh0LGUsbixyLGkpe3ZhciBvPUxv
KCk7cmV0dXJuIG8uYXN5bmNGYWN0b3J5PXQsby5hc3luY01ldGE9e2RhdGE6ZSxjb250ZXh0Om4s
Y2hpbGRyZW46cix0YWc6aX0sb31mdW5jdGlvbiBwdCh0LGUsbyl7aWYoaSh0LmVycm9yKSYmcih0
LmVycm9yQ29tcCkpcmV0dXJuIHQuZXJyb3JDb21wO2lmKHIodC5yZXNvbHZlZCkpcmV0dXJuIHQu
cmVzb2x2ZWQ7aWYoaSh0LmxvYWRpbmcpJiZyKHQubG9hZGluZ0NvbXApKXJldHVybiB0LmxvYWRp
bmdDb21wO2lmKCFyKHQuY29udGV4dHMpKXt2YXIgYT10LmNvbnRleHRzPVtvXSxjPSEwLHU9ZnVu
Y3Rpb24oKXtmb3IodmFyIHQ9MCxlPWEubGVuZ3RoO3Q8ZTt0KyspYVt0XS4kZm9yY2VVcGRhdGUo
KX0sbD14KGZ1bmN0aW9uKG4pe3QucmVzb2x2ZWQ9bHQobixlKSxjfHx1KCl9KSxmPXgoZnVuY3Rp
b24oZSl7cih0LmVycm9yQ29tcCkmJih0LmVycm9yPSEwLHUoKSl9KSxwPXQobCxmKTtyZXR1cm4g
cyhwKSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBwLnRoZW4/bih0LnJlc29sdmVkKSYmcC50aGVuKGws
Zik6cihwLmNvbXBvbmVudCkmJiJmdW5jdGlvbiI9PXR5cGVvZiBwLmNvbXBvbmVudC50aGVuJiYo
cC5jb21wb25lbnQudGhlbihsLGYpLHIocC5lcnJvcikmJih0LmVycm9yQ29tcD1sdChwLmVycm9y
LGUpKSxyKHAubG9hZGluZykmJih0LmxvYWRpbmdDb21wPWx0KHAubG9hZGluZyxlKSwwPT09cC5k
ZWxheT90LmxvYWRpbmc9ITA6c2V0VGltZW91dChmdW5jdGlvbigpe24odC5yZXNvbHZlZCkmJm4o
dC5lcnJvcikmJih0LmxvYWRpbmc9ITAsdSgpKX0scC5kZWxheXx8MjAwKSkscihwLnRpbWVvdXQp
JiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bih0LnJlc29sdmVkKSYmZihudWxsKX0scC50aW1lb3V0
KSkpLGM9ITEsdC5sb2FkaW5nP3QubG9hZGluZ0NvbXA6dC5yZXNvbHZlZH10LmNvbnRleHRzLnB1
c2gobyl9ZnVuY3Rpb24gZHQodCl7aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIGU9MDtlPHQu
bGVuZ3RoO2UrKyl7dmFyIG49dFtlXTtpZihyKG4pJiZyKG4uY29tcG9uZW50T3B0aW9ucykpcmV0
dXJuIG59fWZ1bmN0aW9uIGh0KHQpe3QuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHQuX2hh
c0hvb2tFdmVudD0hMTt2YXIgZT10LiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnM7ZSYmeXQodCxl
KX1mdW5jdGlvbiB2dCh0LGUsbil7bj9Oby4kb25jZSh0LGUpOk5vLiRvbih0LGUpfWZ1bmN0aW9u
IG10KHQsZSl7Tm8uJG9mZih0LGUpfWZ1bmN0aW9uIHl0KHQsZSxuKXtObz10LG50KGUsbnx8e30s
dnQsbXQsdCl9ZnVuY3Rpb24gZ3QodCxlKXt2YXIgbj17fTtpZighdClyZXR1cm4gbjtmb3IodmFy
IHI9W10saT0wLG89dC5sZW5ndGg7aTxvO2krKyl7dmFyIGE9dFtpXTtpZihhLmNvbnRleHQhPT1l
JiZhLmZ1bmN0aW9uYWxDb250ZXh0IT09ZXx8IWEuZGF0YXx8bnVsbD09YS5kYXRhLnNsb3Qpci5w
dXNoKGEpO2Vsc2V7dmFyIHM9YS5kYXRhLnNsb3QsYz1uW3NdfHwobltzXT1bXSk7InRlbXBsYXRl
Ij09PWEudGFnP2MucHVzaC5hcHBseShjLGEuY2hpbGRyZW4pOmMucHVzaChhKX19cmV0dXJuIHIu
ZXZlcnkoX3QpfHwobi5kZWZhdWx0PXIpLG59ZnVuY3Rpb24gX3QodCl7cmV0dXJuIHQuaXNDb21t
ZW50fHwiICI9PT10LnRleHR9ZnVuY3Rpb24gYnQodCxlKXtlPWV8fHt9O2Zvcih2YXIgbj0wO248
dC5sZW5ndGg7bisrKUFycmF5LmlzQXJyYXkodFtuXSk/YnQodFtuXSxlKTplW3Rbbl0ua2V5XT10
W25dLmZuO3JldHVybiBlfWZ1bmN0aW9uIHd0KHQpe3ZhciBlPXQuJG9wdGlvbnMsbj1lLnBhcmVu
dDtpZihuJiYhZS5hYnN0cmFjdCl7Zm9yKDtuLiRvcHRpb25zLmFic3RyYWN0JiZuLiRwYXJlbnQ7
KW49bi4kcGFyZW50O24uJGNoaWxkcmVuLnB1c2godCl9dC4kcGFyZW50PW4sdC4kcm9vdD1uP24u
JHJvb3Q6dCx0LiRjaGlsZHJlbj1bXSx0LiRyZWZzPXt9LHQuX3dhdGNoZXI9bnVsbCx0Ll9pbmFj
dGl2ZT1udWxsLHQuX2RpcmVjdEluYWN0aXZlPSExLHQuX2lzTW91bnRlZD0hMSx0Ll9pc0Rlc3Ry
b3llZD0hMSx0Ll9pc0JlaW5nRGVzdHJveWVkPSExfWZ1bmN0aW9uICR0KHQsZSxuKXt0LiRlbD1l
LHQuJG9wdGlvbnMucmVuZGVyfHwodC4kb3B0aW9ucy5yZW5kZXI9TG8pLE90KHQsImJlZm9yZU1v
dW50Iik7dmFyIHI7cmV0dXJuIHI9ZnVuY3Rpb24oKXt0Ll91cGRhdGUodC5fcmVuZGVyKCksbil9
LHQuX3dhdGNoZXI9bmV3IFZvKHQscix3KSxuPSExLG51bGw9PXQuJHZub2RlJiYodC5faXNNb3Vu
dGVkPSEwLE90KHQsIm1vdW50ZWQiKSksdH1mdW5jdGlvbiBDdCh0LGUsbixyLGkpe3ZhciBvPSEh
KGl8fHQuJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVufHxyLmRhdGEuc2NvcGVkU2xvdHN8fHQuJHNj
b3BlZFNsb3RzIT09WWkpO2lmKHQuJG9wdGlvbnMuX3BhcmVudFZub2RlPXIsdC4kdm5vZGU9cix0
Ll92bm9kZSYmKHQuX3Zub2RlLnBhcmVudD1yKSx0LiRvcHRpb25zLl9yZW5kZXJDaGlsZHJlbj1p
LHQuJGF0dHJzPXIuZGF0YSYmci5kYXRhLmF0dHJzLHQuJGxpc3RlbmVycz1uLGUmJnQuJG9wdGlv
bnMucHJvcHMpe2tvLnNob3VsZENvbnZlcnQ9ITE7Zm9yKHZhciBhPXQuX3Byb3BzLHM9dC4kb3B0
aW9ucy5fcHJvcEtleXN8fFtdLGM9MDtjPHMubGVuZ3RoO2MrKyl7dmFyIHU9c1tjXTthW3VdPVco
dSx0LiRvcHRpb25zLnByb3BzLGUsdCl9a28uc2hvdWxkQ29udmVydD0hMCx0LiRvcHRpb25zLnBy
b3BzRGF0YT1lfWlmKG4pe3ZhciBsPXQuJG9wdGlvbnMuX3BhcmVudExpc3RlbmVyczt0LiRvcHRp
b25zLl9wYXJlbnRMaXN0ZW5lcnM9bix5dCh0LG4sbCl9byYmKHQuJHNsb3RzPWd0KGksci5jb250
ZXh0KSx0LiRmb3JjZVVwZGF0ZSgpKX1mdW5jdGlvbiB4dCh0KXtmb3IoO3QmJih0PXQuJHBhcmVu
dCk7KWlmKHQuX2luYWN0aXZlKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEF0KHQsZSl7aWYo
ZSl7aWYodC5fZGlyZWN0SW5hY3RpdmU9ITEseHQodCkpcmV0dXJufWVsc2UgaWYodC5fZGlyZWN0
SW5hY3RpdmUpcmV0dXJuO2lmKHQuX2luYWN0aXZlfHxudWxsPT09dC5faW5hY3RpdmUpe3QuX2lu
YWN0aXZlPSExO2Zvcih2YXIgbj0wO248dC4kY2hpbGRyZW4ubGVuZ3RoO24rKylBdCh0LiRjaGls
ZHJlbltuXSk7T3QodCwiYWN0aXZhdGVkIil9fWZ1bmN0aW9uIGt0KHQsZSl7aWYoIShlJiYodC5f
ZGlyZWN0SW5hY3RpdmU9ITAseHQodCkpfHx0Ll9pbmFjdGl2ZSkpe3QuX2luYWN0aXZlPSEwO2Zv
cih2YXIgbj0wO248dC4kY2hpbGRyZW4ubGVuZ3RoO24rKylrdCh0LiRjaGlsZHJlbltuXSk7T3Qo
dCwiZGVhY3RpdmF0ZWQiKX19ZnVuY3Rpb24gT3QodCxlKXt2YXIgbj10LiRvcHRpb25zW2VdO2lm
KG4pZm9yKHZhciByPTAsaT1uLmxlbmd0aDtyPGk7cisrKXRyeXtuW3JdLmNhbGwodCl9Y2F0Y2go
bil7UyhuLHQsZSsiIGhvb2siKX10Ll9oYXNIb29rRXZlbnQmJnQuJGVtaXQoImhvb2s6IitlKX1m
dW5jdGlvbiBTdCgpe1VvPVBvLmxlbmd0aD1Sby5sZW5ndGg9MCxEbz17fSxGbz1Cbz0hMX1mdW5j
dGlvbiBUdCgpe0JvPSEwO3ZhciB0LGU7Zm9yKFBvLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4g
dC5pZC1lLmlkfSksVW89MDtVbzxQby5sZW5ndGg7VW8rKyl0PVBvW1VvXSxlPXQuaWQsRG9bZV09
bnVsbCx0LnJ1bigpO3ZhciBuPVJvLnNsaWNlKCkscj1Qby5zbGljZSgpO1N0KCksTnQobiksRXQo
cikseW8mJlhpLmRldnRvb2xzJiZ5by5lbWl0KCJmbHVzaCIpfWZ1bmN0aW9uIEV0KHQpe2Zvcih2
YXIgZT10Lmxlbmd0aDtlLS07KXt2YXIgbj10W2VdLHI9bi52bTtyLl93YXRjaGVyPT09biYmci5f
aXNNb3VudGVkJiZPdChyLCJ1cGRhdGVkIil9fWZ1bmN0aW9uIGp0KHQpe3QuX2luYWN0aXZlPSEx
LFJvLnB1c2godCl9ZnVuY3Rpb24gTnQodCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdFtl
XS5faW5hY3RpdmU9ITAsQXQodFtlXSwhMCl9ZnVuY3Rpb24gTHQodCl7dmFyIGU9dC5pZDtpZihu
dWxsPT1Eb1tlXSl7aWYoRG9bZV09ITAsQm8pe2Zvcih2YXIgbj1Qby5sZW5ndGgtMTtuPlVvJiZQ
b1tuXS5pZD50LmlkOyluLS07UG8uc3BsaWNlKG4rMSwwLHQpfWVsc2UgUG8ucHVzaCh0KTtGb3x8
KEZvPSEwLF9vKFR0KSl9fWZ1bmN0aW9uIE10KHQpe3pvLmNsZWFyKCksSXQodCx6byl9ZnVuY3Rp
b24gSXQodCxlKXt2YXIgbixyLGk9QXJyYXkuaXNBcnJheSh0KTtpZigoaXx8cyh0KSkmJk9iamVj
dC5pc0V4dGVuc2libGUodCkpe2lmKHQuX19vYl9fKXt2YXIgbz10Ll9fb2JfXy5kZXAuaWQ7aWYo
ZS5oYXMobykpcmV0dXJuO2UuYWRkKG8pfWlmKGkpZm9yKG49dC5sZW5ndGg7bi0tOylJdCh0W25d
LGUpO2Vsc2UgZm9yKHI9T2JqZWN0LmtleXModCksbj1yLmxlbmd0aDtuLS07KUl0KHRbcltuXV0s
ZSl9fWZ1bmN0aW9uIFB0KHQsZSxuKXtKby5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tlXVtu
XX0sSm8uc2V0PWZ1bmN0aW9uKHQpe3RoaXNbZV1bbl09dH0sT2JqZWN0LmRlZmluZVByb3BlcnR5
KHQsbixKbyl9ZnVuY3Rpb24gUnQodCl7dC5fd2F0Y2hlcnM9W107dmFyIGU9dC4kb3B0aW9ucztl
LnByb3BzJiZEdCh0LGUucHJvcHMpLGUubWV0aG9kcyYmenQodCxlLm1ldGhvZHMpLGUuZGF0YT9G
dCh0KTpNKHQuX2RhdGE9e30sITApLGUuY29tcHV0ZWQmJlV0KHQsZS5jb21wdXRlZCksZS53YXRj
aCYmZS53YXRjaCE9PWxvJiZKdCh0LGUud2F0Y2gpfWZ1bmN0aW9uIER0KHQsZSl7dmFyIG49dC4k
b3B0aW9ucy5wcm9wc0RhdGF8fHt9LHI9dC5fcHJvcHM9e30saT10LiRvcHRpb25zLl9wcm9wS2V5
cz1bXSxvPSF0LiRwYXJlbnQ7a28uc2hvdWxkQ29udmVydD1vO2Zvcih2YXIgYSBpbiBlKSFmdW5j
dGlvbihvKXtpLnB1c2gobyk7dmFyIGE9VyhvLGUsbix0KTtJKHIsbyxhKSxvIGluIHR8fFB0KHQs
Il9wcm9wcyIsbyl9KGEpO2tvLnNob3VsZENvbnZlcnQ9ITB9ZnVuY3Rpb24gRnQodCl7dmFyIGU9
dC4kb3B0aW9ucy5kYXRhO2U9dC5fZGF0YT0iZnVuY3Rpb24iPT10eXBlb2YgZT9CdChlLHQpOmV8
fHt9LGMoZSl8fChlPXt9KTtmb3IodmFyIG49T2JqZWN0LmtleXMoZSkscj10LiRvcHRpb25zLnBy
b3BzLGk9KHQuJG9wdGlvbnMubWV0aG9kcyxuLmxlbmd0aCk7aS0tOyl7dmFyIG89bltpXTtyJiZ2
KHIsbyl8fEEobyl8fFB0KHQsIl9kYXRhIixvKX1NKGUsITApfWZ1bmN0aW9uIEJ0KHQsZSl7dHJ5
e3JldHVybiB0LmNhbGwoZSl9Y2F0Y2godCl7cmV0dXJuIFModCxlLCJkYXRhKCkiKSx7fX19ZnVu
Y3Rpb24gVXQodCxlKXt2YXIgbj10Ll9jb21wdXRlZFdhdGNoZXJzPU9iamVjdC5jcmVhdGUobnVs
bCk7Zm9yKHZhciByIGluIGUpe3ZhciBpPWVbcl0sbz0iZnVuY3Rpb24iPT10eXBlb2YgaT9pOmku
Z2V0O25bcl09bmV3IFZvKHQsb3x8dyx3LEtvKSxyIGluIHR8fEh0KHQscixpKX19ZnVuY3Rpb24g
SHQodCxlLG4peyJmdW5jdGlvbiI9PXR5cGVvZiBuPyhKby5nZXQ9VnQoZSksSm8uc2V0PXcpOihK
by5nZXQ9bi5nZXQ/ITEhPT1uLmNhY2hlP1Z0KGUpOm4uZ2V0OncsSm8uc2V0PW4uc2V0P24uc2V0
OncpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUsSm8pfWZ1bmN0aW9uIFZ0KHQpe3JldHVybiBm
dW5jdGlvbigpe3ZhciBlPXRoaXMuX2NvbXB1dGVkV2F0Y2hlcnMmJnRoaXMuX2NvbXB1dGVkV2F0
Y2hlcnNbdF07aWYoZSlyZXR1cm4gZS5kaXJ0eSYmZS5ldmFsdWF0ZSgpLHdvLnRhcmdldCYmZS5k
ZXBlbmQoKSxlLnZhbHVlfX1mdW5jdGlvbiB6dCh0LGUpe3QuJG9wdGlvbnMucHJvcHM7Zm9yKHZh
ciBuIGluIGUpdFtuXT1udWxsPT1lW25dP3c6eShlW25dLHQpfWZ1bmN0aW9uIEp0KHQsZSl7Zm9y
KHZhciBuIGluIGUpe3ZhciByPWVbbl07aWYoQXJyYXkuaXNBcnJheShyKSlmb3IodmFyIGk9MDtp
PHIubGVuZ3RoO2krKylLdCh0LG4scltpXSk7ZWxzZSBLdCh0LG4scil9fWZ1bmN0aW9uIEt0KHQs
ZSxuLHIpe3JldHVybiBjKG4pJiYocj1uLG49bi5oYW5kbGVyKSwic3RyaW5nIj09dHlwZW9mIG4m
JihuPXRbbl0pLHQuJHdhdGNoKGUsbixyKX1mdW5jdGlvbiBxdCh0KXt2YXIgZT10LiRvcHRpb25z
LnByb3ZpZGU7ZSYmKHQuX3Byb3ZpZGVkPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuY2FsbCh0KTpl
KX1mdW5jdGlvbiBXdCh0KXt2YXIgZT1adCh0LiRvcHRpb25zLmluamVjdCx0KTtlJiYoa28uc2hv
dWxkQ29udmVydD0hMSxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe0kodCxuLGVb
bl0pfSksa28uc2hvdWxkQ29udmVydD0hMCl9ZnVuY3Rpb24gWnQodCxlKXtpZih0KXtmb3IodmFy
IG49T2JqZWN0LmNyZWF0ZShudWxsKSxyPWdvP1JlZmxlY3Qub3duS2V5cyh0KTpPYmplY3Qua2V5
cyh0KSxpPTA7aTxyLmxlbmd0aDtpKyspZm9yKHZhciBvPXJbaV0sYT10W29dLHM9ZTtzOyl7aWYo
cy5fcHJvdmlkZWQmJmEgaW4gcy5fcHJvdmlkZWQpe25bb109cy5fcHJvdmlkZWRbYV07YnJlYWt9
cz1zLiRwYXJlbnR9cmV0dXJuIG59fWZ1bmN0aW9uIEd0KHQsZSxuLGksbyl7dmFyIGE9e30scz10
Lm9wdGlvbnMucHJvcHM7aWYocihzKSlmb3IodmFyIGMgaW4gcylhW2NdPVcoYyxzLGV8fHt9KTtl
bHNlIHIobi5hdHRycykmJlh0KGEsbi5hdHRycykscihuLnByb3BzKSYmWHQoYSxuLnByb3BzKTt2
YXIgdT1PYmplY3QuY3JlYXRlKGkpLGw9ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIHJlKHUsdCxl
LG4sciwhMCl9LGY9dC5vcHRpb25zLnJlbmRlci5jYWxsKG51bGwsbCx7ZGF0YTpuLHByb3BzOmEs
Y2hpbGRyZW46byxwYXJlbnQ6aSxsaXN0ZW5lcnM6bi5vbnx8e30saW5qZWN0aW9uczpadCh0Lm9w
dGlvbnMuaW5qZWN0LGkpLHNsb3RzOmZ1bmN0aW9uKCl7cmV0dXJuIGd0KG8saSl9fSk7cmV0dXJu
IGYgaW5zdGFuY2VvZiBFbyYmKGYuZnVuY3Rpb25hbENvbnRleHQ9aSxmLmZ1bmN0aW9uYWxPcHRp
b25zPXQub3B0aW9ucyxuLnNsb3QmJigoZi5kYXRhfHwoZi5kYXRhPXt9KSkuc2xvdD1uLnNsb3Qp
KSxmfWZ1bmN0aW9uIFh0KHQsZSl7Zm9yKHZhciBuIGluIGUpdFtIaShuKV09ZVtuXX1mdW5jdGlv
biBZdCh0LGUsbyxhLGMpe2lmKCFuKHQpKXt2YXIgdT1vLiRvcHRpb25zLl9iYXNlO2lmKHModCkm
Jih0PXUuZXh0ZW5kKHQpKSwiZnVuY3Rpb24iPT10eXBlb2YgdCl7dmFyIGw7aWYobih0LmNpZCkm
JihsPXQsdm9pZCAwPT09KHQ9cHQobCx1LG8pKSkpcmV0dXJuIGZ0KGwsZSxvLGEsYyk7ZT1lfHx7
fSxnZSh0KSxyKGUubW9kZWwpJiZuZSh0Lm9wdGlvbnMsZSk7dmFyIGY9aXQoZSx0LGMpO2lmKGko
dC5vcHRpb25zLmZ1bmN0aW9uYWwpKXJldHVybiBHdCh0LGYsZSxvLGEpO3ZhciBwPWUub247aWYo
ZS5vbj1lLm5hdGl2ZU9uLGkodC5vcHRpb25zLmFic3RyYWN0KSl7dmFyIGQ9ZS5zbG90O2U9e30s
ZCYmKGUuc2xvdD1kKX10ZShlKTt2YXIgaD10Lm9wdGlvbnMubmFtZXx8YztyZXR1cm4gbmV3IEVv
KCJ2dWUtY29tcG9uZW50LSIrdC5jaWQrKGg/Ii0iK2g6IiIpLGUsdm9pZCAwLHZvaWQgMCx2b2lk
IDAsbyx7Q3Rvcjp0LHByb3BzRGF0YTpmLGxpc3RlbmVyczpwLHRhZzpjLGNoaWxkcmVuOmF9LGwp
fX19ZnVuY3Rpb24gUXQodCxlLG4saSl7dmFyIG89dC5jb21wb25lbnRPcHRpb25zLGE9e19pc0Nv
bXBvbmVudDohMCxwYXJlbnQ6ZSxwcm9wc0RhdGE6by5wcm9wc0RhdGEsX2NvbXBvbmVudFRhZzpv
LnRhZyxfcGFyZW50Vm5vZGU6dCxfcGFyZW50TGlzdGVuZXJzOm8ubGlzdGVuZXJzLF9yZW5kZXJD
aGlsZHJlbjpvLmNoaWxkcmVuLF9wYXJlbnRFbG06bnx8bnVsbCxfcmVmRWxtOml8fG51bGx9LHM9
dC5kYXRhLmlubGluZVRlbXBsYXRlO3JldHVybiByKHMpJiYoYS5yZW5kZXI9cy5yZW5kZXIsYS5z
dGF0aWNSZW5kZXJGbnM9cy5zdGF0aWNSZW5kZXJGbnMpLG5ldyBvLkN0b3IoYSl9ZnVuY3Rpb24g
dGUodCl7dC5ob29rfHwodC5ob29rPXt9KTtmb3IodmFyIGU9MDtlPFdvLmxlbmd0aDtlKyspe3Zh
ciBuPVdvW2VdLHI9dC5ob29rW25dLGk9cW9bbl07dC5ob29rW25dPXI/ZWUoaSxyKTppfX1mdW5j
dGlvbiBlZSh0LGUpe3JldHVybiBmdW5jdGlvbihuLHIsaSxvKXt0KG4scixpLG8pLGUobixyLGks
byl9fWZ1bmN0aW9uIG5lKHQsZSl7dmFyIG49dC5tb2RlbCYmdC5tb2RlbC5wcm9wfHwidmFsdWUi
LGk9dC5tb2RlbCYmdC5tb2RlbC5ldmVudHx8ImlucHV0IjsoZS5wcm9wc3x8KGUucHJvcHM9e30p
KVtuXT1lLm1vZGVsLnZhbHVlO3ZhciBvPWUub258fChlLm9uPXt9KTtyKG9baV0pP29baV09W2Uu
bW9kZWwuY2FsbGJhY2tdLmNvbmNhdChvW2ldKTpvW2ldPWUubW9kZWwuY2FsbGJhY2t9ZnVuY3Rp
b24gcmUodCxlLG4scixvLHMpe3JldHVybihBcnJheS5pc0FycmF5KG4pfHxhKG4pKSYmKG89cixy
PW4sbj12b2lkIDApLGkocykmJihvPUdvKSxpZSh0LGUsbixyLG8pfWZ1bmN0aW9uIGllKHQsZSxu
LGksbyl7aWYocihuKSYmcihuLl9fb2JfXykpcmV0dXJuIExvKCk7aWYocihuKSYmcihuLmlzKSYm
KGU9bi5pcyksIWUpcmV0dXJuIExvKCk7QXJyYXkuaXNBcnJheShpKSYmImZ1bmN0aW9uIj09dHlw
ZW9mIGlbMF0mJihuPW58fHt9LG4uc2NvcGVkU2xvdHM9e2RlZmF1bHQ6aVswXX0saS5sZW5ndGg9
MCksbz09PUdvP2k9c3QoaSk6bz09PVpvJiYoaT1hdChpKSk7dmFyIGEscztpZigic3RyaW5nIj09
dHlwZW9mIGUpe3ZhciBjO3M9WGkuZ2V0VGFnTmFtZXNwYWNlKGUpLGE9WGkuaXNSZXNlcnZlZFRh
ZyhlKT9uZXcgRW8oWGkucGFyc2VQbGF0Zm9ybVRhZ05hbWUoZSksbixpLHZvaWQgMCx2b2lkIDAs
dCk6cihjPXEodC4kb3B0aW9ucywiY29tcG9uZW50cyIsZSkpP1l0KGMsbix0LGksZSk6bmV3IEVv
KGUsbixpLHZvaWQgMCx2b2lkIDAsdCl9ZWxzZSBhPVl0KGUsbix0LGkpO3JldHVybiByKGEpPyhz
JiZvZShhLHMpLGEpOkxvKCl9ZnVuY3Rpb24gb2UodCxlKXtpZih0Lm5zPWUsImZvcmVpZ25PYmpl
Y3QiIT09dC50YWcmJnIodC5jaGlsZHJlbikpZm9yKHZhciBpPTAsbz10LmNoaWxkcmVuLmxlbmd0
aDtpPG87aSsrKXt2YXIgYT10LmNoaWxkcmVuW2ldO3IoYS50YWcpJiZuKGEubnMpJiZvZShhLGUp
fX1mdW5jdGlvbiBhZSh0LGUpe3ZhciBuLGksbyxhLGM7aWYoQXJyYXkuaXNBcnJheSh0KXx8InN0
cmluZyI9PXR5cGVvZiB0KWZvcihuPW5ldyBBcnJheSh0Lmxlbmd0aCksaT0wLG89dC5sZW5ndGg7
aTxvO2krKyluW2ldPWUodFtpXSxpKTtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgdClmb3Iobj1u
ZXcgQXJyYXkodCksaT0wO2k8dDtpKyspbltpXT1lKGkrMSxpKTtlbHNlIGlmKHModCkpZm9yKGE9
T2JqZWN0LmtleXModCksbj1uZXcgQXJyYXkoYS5sZW5ndGgpLGk9MCxvPWEubGVuZ3RoO2k8bztp
KyspYz1hW2ldLG5baV09ZSh0W2NdLGMsaSk7cmV0dXJuIHIobikmJihuLl9pc1ZMaXN0PSEwKSxu
fWZ1bmN0aW9uIHNlKHQsZSxuLHIpe3ZhciBpPXRoaXMuJHNjb3BlZFNsb3RzW3RdO2lmKGkpcmV0
dXJuIG49bnx8e30sciYmKG49XyhfKHt9LHIpLG4pKSxpKG4pfHxlO3ZhciBvPXRoaXMuJHNsb3Rz
W3RdO3JldHVybiBvfHxlfWZ1bmN0aW9uIGNlKHQpe3JldHVybiBxKHRoaXMuJG9wdGlvbnMsImZp
bHRlcnMiLHQsITApfHxxaX1mdW5jdGlvbiB1ZSh0LGUsbil7dmFyIHI9WGkua2V5Q29kZXNbZV18
fG47cmV0dXJuIEFycmF5LmlzQXJyYXkocik/LTE9PT1yLmluZGV4T2YodCk6ciE9PXR9ZnVuY3Rp
b24gbGUodCxlLG4scixpKXtpZihuKWlmKHMobikpe0FycmF5LmlzQXJyYXkobikmJihuPWIobikp
O3ZhciBvO2Zvcih2YXIgYSBpbiBuKSFmdW5jdGlvbihhKXtpZigiY2xhc3MiPT09YXx8InN0eWxl
Ij09PWF8fEZpKGEpKW89dDtlbHNle3ZhciBzPXQuYXR0cnMmJnQuYXR0cnMudHlwZTtvPXJ8fFhp
Lm11c3RVc2VQcm9wKGUscyxhKT90LmRvbVByb3BzfHwodC5kb21Qcm9wcz17fSk6dC5hdHRyc3x8
KHQuYXR0cnM9e30pfWlmKCEoYSBpbiBvKSYmKG9bYV09blthXSxpKSl7KHQub258fCh0Lm9uPXt9
KSlbInVwZGF0ZToiK2FdPWZ1bmN0aW9uKHQpe25bYV09dH19fShhKX1lbHNlO3JldHVybiB0fWZ1
bmN0aW9uIGZlKHQsZSl7dmFyIG49dGhpcy5fc3RhdGljVHJlZXNbdF07cmV0dXJuIG4mJiFlP0Fy
cmF5LmlzQXJyYXkobik/dHQobik6UShuKToobj10aGlzLl9zdGF0aWNUcmVlc1t0XT10aGlzLiRv
cHRpb25zLnN0YXRpY1JlbmRlckZuc1t0XS5jYWxsKHRoaXMuX3JlbmRlclByb3h5KSxkZShuLCJf
X3N0YXRpY19fIit0LCExKSxuKX1mdW5jdGlvbiBwZSh0LGUsbil7cmV0dXJuIGRlKHQsIl9fb25j
ZV9fIitlKyhuPyJfIituOiIiKSwhMCksdH1mdW5jdGlvbiBkZSh0LGUsbil7aWYoQXJyYXkuaXNB
cnJheSh0KSlmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl0W3JdJiYic3RyaW5nIiE9dHlwZW9m
IHRbcl0mJmhlKHRbcl0sZSsiXyIrcixuKTtlbHNlIGhlKHQsZSxuKX1mdW5jdGlvbiBoZSh0LGUs
bil7dC5pc1N0YXRpYz0hMCx0LmtleT1lLHQuaXNPbmNlPW59ZnVuY3Rpb24gdmUodCxlKXtpZihl
KWlmKGMoZSkpe3ZhciBuPXQub249dC5vbj9fKHt9LHQub24pOnt9O2Zvcih2YXIgciBpbiBlKXt2
YXIgaT1uW3JdLG89ZVtyXTtuW3JdPWk/W10uY29uY2F0KG8saSk6b319ZWxzZTtyZXR1cm4gdH1m
dW5jdGlvbiBtZSh0KXt0Ll92bm9kZT1udWxsLHQuX3N0YXRpY1RyZWVzPW51bGw7dmFyIGU9dC4k
dm5vZGU9dC4kb3B0aW9ucy5fcGFyZW50Vm5vZGUsbj1lJiZlLmNvbnRleHQ7dC4kc2xvdHM9Z3Qo
dC4kb3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4sbiksdC4kc2NvcGVkU2xvdHM9WWksdC5fYz1mdW5j
dGlvbihlLG4scixpKXtyZXR1cm4gcmUodCxlLG4scixpLCExKX0sdC4kY3JlYXRlRWxlbWVudD1m
dW5jdGlvbihlLG4scixpKXtyZXR1cm4gcmUodCxlLG4scixpLCEwKX07dmFyIHI9ZSYmZS5kYXRh
O0kodCwiJGF0dHJzIixyJiZyLmF0dHJzLG51bGwsITApLEkodCwiJGxpc3RlbmVycyIsdC4kb3B0
aW9ucy5fcGFyZW50TGlzdGVuZXJzLG51bGwsITApfWZ1bmN0aW9uIHllKHQsZSl7dmFyIG49dC4k
b3B0aW9ucz1PYmplY3QuY3JlYXRlKHQuY29uc3RydWN0b3Iub3B0aW9ucyk7bi5wYXJlbnQ9ZS5w
YXJlbnQsbi5wcm9wc0RhdGE9ZS5wcm9wc0RhdGEsbi5fcGFyZW50Vm5vZGU9ZS5fcGFyZW50Vm5v
ZGUsbi5fcGFyZW50TGlzdGVuZXJzPWUuX3BhcmVudExpc3RlbmVycyxuLl9yZW5kZXJDaGlsZHJl
bj1lLl9yZW5kZXJDaGlsZHJlbixuLl9jb21wb25lbnRUYWc9ZS5fY29tcG9uZW50VGFnLG4uX3Bh
cmVudEVsbT1lLl9wYXJlbnRFbG0sbi5fcmVmRWxtPWUuX3JlZkVsbSxlLnJlbmRlciYmKG4ucmVu
ZGVyPWUucmVuZGVyLG4uc3RhdGljUmVuZGVyRm5zPWUuc3RhdGljUmVuZGVyRm5zKX1mdW5jdGlv
biBnZSh0KXt2YXIgZT10Lm9wdGlvbnM7aWYodC5zdXBlcil7dmFyIG49Z2UodC5zdXBlcik7aWYo
biE9PXQuc3VwZXJPcHRpb25zKXt0LnN1cGVyT3B0aW9ucz1uO3ZhciByPV9lKHQpO3ImJl8odC5l
eHRlbmRPcHRpb25zLHIpLGU9dC5vcHRpb25zPUsobix0LmV4dGVuZE9wdGlvbnMpLGUubmFtZSYm
KGUuY29tcG9uZW50c1tlLm5hbWVdPXQpfX1yZXR1cm4gZX1mdW5jdGlvbiBfZSh0KXt2YXIgZSxu
PXQub3B0aW9ucyxyPXQuZXh0ZW5kT3B0aW9ucyxpPXQuc2VhbGVkT3B0aW9ucztmb3IodmFyIG8g
aW4gbiluW29dIT09aVtvXSYmKGV8fChlPXt9KSxlW29dPWJlKG5bb10scltvXSxpW29dKSk7cmV0
dXJuIGV9ZnVuY3Rpb24gYmUodCxlLG4pe2lmKEFycmF5LmlzQXJyYXkodCkpe3ZhciByPVtdO249
QXJyYXkuaXNBcnJheShuKT9uOltuXSxlPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07Zm9yKHZhciBp
PTA7aTx0Lmxlbmd0aDtpKyspKGUuaW5kZXhPZih0W2ldKT49MHx8bi5pbmRleE9mKHRbaV0pPDAp
JiZyLnB1c2godFtpXSk7cmV0dXJuIHJ9cmV0dXJuIHR9ZnVuY3Rpb24gd2UodCl7dGhpcy5faW5p
dCh0KX1mdW5jdGlvbiAkZSh0KXt0LnVzZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pbnN0YWxs
ZWRQbHVnaW5zfHwodGhpcy5faW5zdGFsbGVkUGx1Z2lucz1bXSk7aWYoZS5pbmRleE9mKHQpPi0x
KXJldHVybiB0aGlzO3ZhciBuPWcoYXJndW1lbnRzLDEpO3JldHVybiBuLnVuc2hpZnQodGhpcyks
ImZ1bmN0aW9uIj09dHlwZW9mIHQuaW5zdGFsbD90Lmluc3RhbGwuYXBwbHkodCxuKToiZnVuY3Rp
b24iPT10eXBlb2YgdCYmdC5hcHBseShudWxsLG4pLGUucHVzaCh0KSx0aGlzfX1mdW5jdGlvbiBD
ZSh0KXt0Lm1peGluPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnM9Syh0aGlzLm9wdGlv
bnMsdCksdGhpc319ZnVuY3Rpb24geGUodCl7dC5jaWQ9MDt2YXIgZT0xO3QuZXh0ZW5kPWZ1bmN0
aW9uKHQpe3Q9dHx8e307dmFyIG49dGhpcyxyPW4uY2lkLGk9dC5fQ3Rvcnx8KHQuX0N0b3I9e30p
O2lmKGlbcl0pcmV0dXJuIGlbcl07dmFyIG89dC5uYW1lfHxuLm9wdGlvbnMubmFtZSxhPWZ1bmN0
aW9uKHQpe3RoaXMuX2luaXQodCl9O3JldHVybiBhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4u
cHJvdG90eXBlKSxhLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1hLGEuY2lkPWUrKyxhLm9wdGlvbnM9
SyhuLm9wdGlvbnMsdCksYS5zdXBlcj1uLGEub3B0aW9ucy5wcm9wcyYmQWUoYSksYS5vcHRpb25z
LmNvbXB1dGVkJiZrZShhKSxhLmV4dGVuZD1uLmV4dGVuZCxhLm1peGluPW4ubWl4aW4sYS51c2U9
bi51c2UsWmkuZm9yRWFjaChmdW5jdGlvbih0KXthW3RdPW5bdF19KSxvJiYoYS5vcHRpb25zLmNv
bXBvbmVudHNbb109YSksYS5zdXBlck9wdGlvbnM9bi5vcHRpb25zLGEuZXh0ZW5kT3B0aW9ucz10
LGEuc2VhbGVkT3B0aW9ucz1fKHt9LGEub3B0aW9ucyksaVtyXT1hLGF9fWZ1bmN0aW9uIEFlKHQp
e3ZhciBlPXQub3B0aW9ucy5wcm9wcztmb3IodmFyIG4gaW4gZSlQdCh0LnByb3RvdHlwZSwiX3By
b3BzIixuKX1mdW5jdGlvbiBrZSh0KXt2YXIgZT10Lm9wdGlvbnMuY29tcHV0ZWQ7Zm9yKHZhciBu
IGluIGUpSHQodC5wcm90b3R5cGUsbixlW25dKX1mdW5jdGlvbiBPZSh0KXtaaS5mb3JFYWNoKGZ1
bmN0aW9uKGUpe3RbZV09ZnVuY3Rpb24odCxuKXtyZXR1cm4gbj8oImNvbXBvbmVudCI9PT1lJiZj
KG4pJiYobi5uYW1lPW4ubmFtZXx8dCxuPXRoaXMub3B0aW9ucy5fYmFzZS5leHRlbmQobikpLCJk
aXJlY3RpdmUiPT09ZSYmImZ1bmN0aW9uIj09dHlwZW9mIG4mJihuPXtiaW5kOm4sdXBkYXRlOm59
KSx0aGlzLm9wdGlvbnNbZSsicyJdW3RdPW4sbik6dGhpcy5vcHRpb25zW2UrInMiXVt0XX19KX1m
dW5jdGlvbiBTZSh0KXtyZXR1cm4gdCYmKHQuQ3Rvci5vcHRpb25zLm5hbWV8fHQudGFnKX1mdW5j
dGlvbiBUZSh0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3QuaW5kZXhPZihlKT4tMToic3Ry
aW5nIj09dHlwZW9mIHQ/dC5zcGxpdCgiLCIpLmluZGV4T2YoZSk+LTE6ISF1KHQpJiZ0LnRlc3Qo
ZSl9ZnVuY3Rpb24gRWUodCxlLG4pe2Zvcih2YXIgciBpbiB0KXt2YXIgaT10W3JdO2lmKGkpe3Zh
ciBvPVNlKGkuY29tcG9uZW50T3B0aW9ucyk7byYmIW4obykmJihpIT09ZSYmamUoaSksdFtyXT1u
dWxsKX19fWZ1bmN0aW9uIGplKHQpe3QmJnQuY29tcG9uZW50SW5zdGFuY2UuJGRlc3Ryb3koKX1m
dW5jdGlvbiBOZSh0KXtmb3IodmFyIGU9dC5kYXRhLG49dCxpPXQ7cihpLmNvbXBvbmVudEluc3Rh
bmNlKTspaT1pLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZSxpLmRhdGEmJihlPUxlKGkuZGF0YSxl
KSk7Zm9yKDtyKG49bi5wYXJlbnQpOyluLmRhdGEmJihlPUxlKGUsbi5kYXRhKSk7cmV0dXJuIE1l
KGUuc3RhdGljQ2xhc3MsZS5jbGFzcyl9ZnVuY3Rpb24gTGUodCxlKXtyZXR1cm57c3RhdGljQ2xh
c3M6SWUodC5zdGF0aWNDbGFzcyxlLnN0YXRpY0NsYXNzKSxjbGFzczpyKHQuY2xhc3MpP1t0LmNs
YXNzLGUuY2xhc3NdOmUuY2xhc3N9fWZ1bmN0aW9uIE1lKHQsZSl7cmV0dXJuIHIodCl8fHIoZSk/
SWUodCxQZShlKSk6IiJ9ZnVuY3Rpb24gSWUodCxlKXtyZXR1cm4gdD9lP3QrIiAiK2U6dDplfHwi
In1mdW5jdGlvbiBQZSh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9SZSh0KTpzKHQpP0RlKHQp
OiJzdHJpbmciPT10eXBlb2YgdD90OiIifWZ1bmN0aW9uIFJlKHQpe2Zvcih2YXIgZSxuPSIiLGk9
MCxvPXQubGVuZ3RoO2k8bztpKyspcihlPVBlKHRbaV0pKSYmIiIhPT1lJiYobiYmKG4rPSIgIiks
bis9ZSk7cmV0dXJuIG59ZnVuY3Rpb24gRGUodCl7dmFyIGU9IiI7Zm9yKHZhciBuIGluIHQpdFtu
XSYmKGUmJihlKz0iICIpLGUrPW4pO3JldHVybiBlfWZ1bmN0aW9uIEZlKHQpe3JldHVybiB3YSh0
KT8ic3ZnIjoibWF0aCI9PT10PyJtYXRoIjp2b2lkIDB9ZnVuY3Rpb24gQmUodCl7aWYoIW5vKXJl
dHVybiEwO2lmKENhKHQpKXJldHVybiExO2lmKHQ9dC50b0xvd2VyQ2FzZSgpLG51bGwhPXhhW3Rd
KXJldHVybiB4YVt0XTt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KHQpO3JldHVybiB0Lmlu
ZGV4T2YoIi0iKT4tMT94YVt0XT1lLmNvbnN0cnVjdG9yPT09d2luZG93LkhUTUxVbmtub3duRWxl
bWVudHx8ZS5jb25zdHJ1Y3Rvcj09PXdpbmRvdy5IVE1MRWxlbWVudDp4YVt0XT0vSFRNTFVua25v
d25FbGVtZW50Ly50ZXN0KGUudG9TdHJpbmcoKSl9ZnVuY3Rpb24gVWUodCl7aWYoInN0cmluZyI9
PXR5cGVvZiB0KXt2YXIgZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpO3JldHVybiBlfHxkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKX1yZXR1cm4gdH1mdW5jdGlvbiBIZSh0LGUpe3ZhciBu
PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCk7cmV0dXJuInNlbGVjdCIhPT10P246KGUuZGF0YSYm
ZS5kYXRhLmF0dHJzJiZ2b2lkIDAhPT1lLmRhdGEuYXR0cnMubXVsdGlwbGUmJm4uc2V0QXR0cmli
dXRlKCJtdWx0aXBsZSIsIm11bHRpcGxlIiksbil9ZnVuY3Rpb24gVmUodCxlKXtyZXR1cm4gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudE5TKF9hW3RdLGUpfWZ1bmN0aW9uIHplKHQpe3JldHVybiBkb2N1
bWVudC5jcmVhdGVUZXh0Tm9kZSh0KX1mdW5jdGlvbiBKZSh0KXtyZXR1cm4gZG9jdW1lbnQuY3Jl
YXRlQ29tbWVudCh0KX1mdW5jdGlvbiBLZSh0LGUsbil7dC5pbnNlcnRCZWZvcmUoZSxuKX1mdW5j
dGlvbiBxZSh0LGUpe3QucmVtb3ZlQ2hpbGQoZSl9ZnVuY3Rpb24gV2UodCxlKXt0LmFwcGVuZENo
aWxkKGUpfWZ1bmN0aW9uIFplKHQpe3JldHVybiB0LnBhcmVudE5vZGV9ZnVuY3Rpb24gR2UodCl7
cmV0dXJuIHQubmV4dFNpYmxpbmd9ZnVuY3Rpb24gWGUodCl7cmV0dXJuIHQudGFnTmFtZX1mdW5j
dGlvbiBZZSh0LGUpe3QudGV4dENvbnRlbnQ9ZX1mdW5jdGlvbiBRZSh0LGUsbil7dC5zZXRBdHRy
aWJ1dGUoZSxuKX1mdW5jdGlvbiB0bih0LGUpe3ZhciBuPXQuZGF0YS5yZWY7aWYobil7dmFyIHI9
dC5jb250ZXh0LGk9dC5jb21wb25lbnRJbnN0YW5jZXx8dC5lbG0sbz1yLiRyZWZzO2U/QXJyYXku
aXNBcnJheShvW25dKT9oKG9bbl0saSk6b1tuXT09PWkmJihvW25dPXZvaWQgMCk6dC5kYXRhLnJl
ZkluRm9yP0FycmF5LmlzQXJyYXkob1tuXSk/b1tuXS5pbmRleE9mKGkpPDAmJm9bbl0ucHVzaChp
KTpvW25dPVtpXTpvW25dPWl9fWZ1bmN0aW9uIGVuKHQsZSl7cmV0dXJuIHQua2V5PT09ZS5rZXkm
Jih0LnRhZz09PWUudGFnJiZ0LmlzQ29tbWVudD09PWUuaXNDb21tZW50JiZyKHQuZGF0YSk9PT1y
KGUuZGF0YSkmJm5uKHQsZSl8fGkodC5pc0FzeW5jUGxhY2Vob2xkZXIpJiZ0LmFzeW5jRmFjdG9y
eT09PWUuYXN5bmNGYWN0b3J5JiZuKGUuYXN5bmNGYWN0b3J5LmVycm9yKSl9ZnVuY3Rpb24gbm4o
dCxlKXtpZigiaW5wdXQiIT09dC50YWcpcmV0dXJuITA7dmFyIG47cmV0dXJuKHIobj10LmRhdGEp
JiZyKG49bi5hdHRycykmJm4udHlwZSk9PT0ocihuPWUuZGF0YSkmJnIobj1uLmF0dHJzKSYmbi50
eXBlKX1mdW5jdGlvbiBybih0LGUsbil7dmFyIGksbyxhPXt9O2ZvcihpPWU7aTw9bjsrK2kpbz10
W2ldLmtleSxyKG8pJiYoYVtvXT1pKTtyZXR1cm4gYX1mdW5jdGlvbiBvbih0LGUpeyh0LmRhdGEu
ZGlyZWN0aXZlc3x8ZS5kYXRhLmRpcmVjdGl2ZXMpJiZhbih0LGUpfWZ1bmN0aW9uIGFuKHQsZSl7
dmFyIG4scixpLG89dD09PU9hLGE9ZT09PU9hLHM9c24odC5kYXRhLmRpcmVjdGl2ZXMsdC5jb250
ZXh0KSxjPXNuKGUuZGF0YS5kaXJlY3RpdmVzLGUuY29udGV4dCksdT1bXSxsPVtdO2ZvcihuIGlu
IGMpcj1zW25dLGk9Y1tuXSxyPyhpLm9sZFZhbHVlPXIudmFsdWUsdW4oaSwidXBkYXRlIixlLHQp
LGkuZGVmJiZpLmRlZi5jb21wb25lbnRVcGRhdGVkJiZsLnB1c2goaSkpOih1bihpLCJiaW5kIixl
LHQpLGkuZGVmJiZpLmRlZi5pbnNlcnRlZCYmdS5wdXNoKGkpKTtpZih1Lmxlbmd0aCl7dmFyIGY9
ZnVuY3Rpb24oKXtmb3IodmFyIG49MDtuPHUubGVuZ3RoO24rKyl1bih1W25dLCJpbnNlcnRlZCIs
ZSx0KX07bz9ydChlLmRhdGEuaG9va3x8KGUuZGF0YS5ob29rPXt9KSwiaW5zZXJ0IixmKTpmKCl9
aWYobC5sZW5ndGgmJnJ0KGUuZGF0YS5ob29rfHwoZS5kYXRhLmhvb2s9e30pLCJwb3N0cGF0Y2gi
LGZ1bmN0aW9uKCl7Zm9yKHZhciBuPTA7bjxsLmxlbmd0aDtuKyspdW4obFtuXSwiY29tcG9uZW50
VXBkYXRlZCIsZSx0KX0pLCFvKWZvcihuIGluIHMpY1tuXXx8dW4oc1tuXSwidW5iaW5kIix0LHQs
YSl9ZnVuY3Rpb24gc24odCxlKXt2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpO2lmKCF0KXJldHVy
biBuO3ZhciByLGk7Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKylpPXRbcl0saS5tb2RpZmllcnN8fChp
Lm1vZGlmaWVycz1FYSksbltjbihpKV09aSxpLmRlZj1xKGUuJG9wdGlvbnMsImRpcmVjdGl2ZXMi
LGkubmFtZSwhMCk7cmV0dXJuIG59ZnVuY3Rpb24gY24odCl7cmV0dXJuIHQucmF3TmFtZXx8dC5u
YW1lKyIuIitPYmplY3Qua2V5cyh0Lm1vZGlmaWVyc3x8e30pLmpvaW4oIi4iKX1mdW5jdGlvbiB1
bih0LGUsbixyLGkpe3ZhciBvPXQuZGVmJiZ0LmRlZltlXTtpZihvKXRyeXtvKG4uZWxtLHQsbixy
LGkpfWNhdGNoKHIpe1MocixuLmNvbnRleHQsImRpcmVjdGl2ZSAiK3QubmFtZSsiICIrZSsiIGhv
b2siKX19ZnVuY3Rpb24gbG4odCxlKXt2YXIgaT1lLmNvbXBvbmVudE9wdGlvbnM7aWYoIShyKGkp
JiYhMT09PWkuQ3Rvci5vcHRpb25zLmluaGVyaXRBdHRyc3x8bih0LmRhdGEuYXR0cnMpJiZuKGUu
ZGF0YS5hdHRycykpKXt2YXIgbyxhLHM9ZS5lbG0sYz10LmRhdGEuYXR0cnN8fHt9LHU9ZS5kYXRh
LmF0dHJzfHx7fTtyKHUuX19vYl9fKSYmKHU9ZS5kYXRhLmF0dHJzPV8oe30sdSkpO2ZvcihvIGlu
IHUpYT11W29dLGNbb10hPT1hJiZmbihzLG8sYSk7b28mJnUudmFsdWUhPT1jLnZhbHVlJiZmbihz
LCJ2YWx1ZSIsdS52YWx1ZSk7Zm9yKG8gaW4gYyluKHVbb10pJiYobWEobyk/cy5yZW1vdmVBdHRy
aWJ1dGVOUyh2YSx5YShvKSk6ZGEobyl8fHMucmVtb3ZlQXR0cmlidXRlKG8pKX19ZnVuY3Rpb24g
Zm4odCxlLG4pe2hhKGUpP2dhKG4pP3QucmVtb3ZlQXR0cmlidXRlKGUpOnQuc2V0QXR0cmlidXRl
KGUsZSk6ZGEoZSk/dC5zZXRBdHRyaWJ1dGUoZSxnYShuKXx8ImZhbHNlIj09PW4/ImZhbHNlIjoi
dHJ1ZSIpOm1hKGUpP2dhKG4pP3QucmVtb3ZlQXR0cmlidXRlTlModmEseWEoZSkpOnQuc2V0QXR0
cmlidXRlTlModmEsZSxuKTpnYShuKT90LnJlbW92ZUF0dHJpYnV0ZShlKTp0LnNldEF0dHJpYnV0
ZShlLG4pfWZ1bmN0aW9uIHBuKHQsZSl7dmFyIGk9ZS5lbG0sbz1lLmRhdGEsYT10LmRhdGE7aWYo
IShuKG8uc3RhdGljQ2xhc3MpJiZuKG8uY2xhc3MpJiYobihhKXx8bihhLnN0YXRpY0NsYXNzKSYm
bihhLmNsYXNzKSkpKXt2YXIgcz1OZShlKSxjPWkuX3RyYW5zaXRpb25DbGFzc2VzO3IoYykmJihz
PUllKHMsUGUoYykpKSxzIT09aS5fcHJldkNsYXNzJiYoaS5zZXRBdHRyaWJ1dGUoImNsYXNzIixz
KSxpLl9wcmV2Q2xhc3M9cyl9fWZ1bmN0aW9uIGRuKHQpe2Z1bmN0aW9uIGUoKXsoYXx8KGE9W10p
KS5wdXNoKHQuc2xpY2UoaCxpKS50cmltKCkpLGg9aSsxfXZhciBuLHIsaSxvLGEscz0hMSxjPSEx
LHU9ITEsbD0hMSxmPTAscD0wLGQ9MCxoPTA7Zm9yKGk9MDtpPHQubGVuZ3RoO2krKylpZihyPW4s
bj10LmNoYXJDb2RlQXQoaSkscykzOT09PW4mJjkyIT09ciYmKHM9ITEpO2Vsc2UgaWYoYykzND09
PW4mJjkyIT09ciYmKGM9ITEpO2Vsc2UgaWYodSk5Nj09PW4mJjkyIT09ciYmKHU9ITEpO2Vsc2Ug
aWYobCk0Nz09PW4mJjkyIT09ciYmKGw9ITEpO2Vsc2UgaWYoMTI0IT09bnx8MTI0PT09dC5jaGFy
Q29kZUF0KGkrMSl8fDEyND09PXQuY2hhckNvZGVBdChpLTEpfHxmfHxwfHxkKXtzd2l0Y2gobil7
Y2FzZSAzNDpjPSEwO2JyZWFrO2Nhc2UgMzk6cz0hMDticmVhaztjYXNlIDk2OnU9ITA7YnJlYWs7
Y2FzZSA0MDpkKys7YnJlYWs7Y2FzZSA0MTpkLS07YnJlYWs7Y2FzZSA5MTpwKys7YnJlYWs7Y2Fz
ZSA5MzpwLS07YnJlYWs7Y2FzZSAxMjM6ZisrO2JyZWFrO2Nhc2UgMTI1OmYtLX1pZig0Nz09PW4p
e2Zvcih2YXIgdj1pLTEsbT12b2lkIDA7dj49MCYmIiAiPT09KG09dC5jaGFyQXQodikpO3YtLSk7
bSYmTWEudGVzdChtKXx8KGw9ITApfX1lbHNlIHZvaWQgMD09PW8/KGg9aSsxLG89dC5zbGljZSgw
LGkpLnRyaW0oKSk6ZSgpO2lmKHZvaWQgMD09PW8/bz10LnNsaWNlKDAsaSkudHJpbSgpOjAhPT1o
JiZlKCksYSlmb3IoaT0wO2k8YS5sZW5ndGg7aSsrKW89aG4obyxhW2ldKTtyZXR1cm4gb31mdW5j
dGlvbiBobih0LGUpe3ZhciBuPWUuaW5kZXhPZigiKCIpO3JldHVybiBuPDA/J19mKCInK2UrJyIp
KCcrdCsiKSI6J19mKCInK2Uuc2xpY2UoMCxuKSsnIikoJyt0KyIsIitlLnNsaWNlKG4rMSl9ZnVu
Y3Rpb24gdm4odCl7Y29uc29sZS5lcnJvcigiW1Z1ZSBjb21waWxlcl06ICIrdCl9ZnVuY3Rpb24g
bW4odCxlKXtyZXR1cm4gdD90Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdFtlXX0pLmZpbHRlcihm
dW5jdGlvbih0KXtyZXR1cm4gdH0pOltdfWZ1bmN0aW9uIHluKHQsZSxuKXsodC5wcm9wc3x8KHQu
cHJvcHM9W10pKS5wdXNoKHtuYW1lOmUsdmFsdWU6bn0pfWZ1bmN0aW9uIGduKHQsZSxuKXsodC5h
dHRyc3x8KHQuYXR0cnM9W10pKS5wdXNoKHtuYW1lOmUsdmFsdWU6bn0pfWZ1bmN0aW9uIF9uKHQs
ZSxuLHIsaSxvKXsodC5kaXJlY3RpdmVzfHwodC5kaXJlY3RpdmVzPVtdKSkucHVzaCh7bmFtZTpl
LHJhd05hbWU6bix2YWx1ZTpyLGFyZzppLG1vZGlmaWVyczpvfSl9ZnVuY3Rpb24gYm4odCxlLG4s
cixpLG8pe3ImJnIuY2FwdHVyZSYmKGRlbGV0ZSByLmNhcHR1cmUsZT0iISIrZSksciYmci5vbmNl
JiYoZGVsZXRlIHIub25jZSxlPSJ+IitlKSxyJiZyLnBhc3NpdmUmJihkZWxldGUgci5wYXNzaXZl
LGU9IiYiK2UpO3ZhciBhO3ImJnIubmF0aXZlPyhkZWxldGUgci5uYXRpdmUsYT10Lm5hdGl2ZUV2
ZW50c3x8KHQubmF0aXZlRXZlbnRzPXt9KSk6YT10LmV2ZW50c3x8KHQuZXZlbnRzPXt9KTt2YXIg
cz17dmFsdWU6bixtb2RpZmllcnM6cn0sYz1hW2VdO0FycmF5LmlzQXJyYXkoYyk/aT9jLnVuc2hp
ZnQocyk6Yy5wdXNoKHMpOmFbZV09Yz9pP1tzLGNdOltjLHNdOnN9ZnVuY3Rpb24gd24odCxlLG4p
e3ZhciByPSRuKHQsIjoiK2UpfHwkbih0LCJ2LWJpbmQ6IitlKTtpZihudWxsIT1yKXJldHVybiBk
bihyKTtpZighMSE9PW4pe3ZhciBpPSRuKHQsZSk7aWYobnVsbCE9aSlyZXR1cm4gSlNPTi5zdHJp
bmdpZnkoaSl9fWZ1bmN0aW9uICRuKHQsZSl7dmFyIG47aWYobnVsbCE9KG49dC5hdHRyc01hcFtl
XSkpZm9yKHZhciByPXQuYXR0cnNMaXN0LGk9MCxvPXIubGVuZ3RoO2k8bztpKyspaWYocltpXS5u
YW1lPT09ZSl7ci5zcGxpY2UoaSwxKTticmVha31yZXR1cm4gbn1mdW5jdGlvbiBDbih0LGUsbil7
dmFyIHI9bnx8e30saT1yLm51bWJlcixvPXIudHJpbSxhPSIkJHYiO28mJihhPSIodHlwZW9mICQk
diA9PT0gJ3N0cmluZyc/ICQkdi50cmltKCk6ICQkdikiKSxpJiYoYT0iX24oIithKyIpIik7dmFy
IHM9eG4oZSxhKTt0Lm1vZGVsPXt2YWx1ZToiKCIrZSsiKSIsZXhwcmVzc2lvbjonIicrZSsnIics
Y2FsbGJhY2s6ImZ1bmN0aW9uICgkJHYpIHsiK3MrIn0ifX1mdW5jdGlvbiB4bih0LGUpe3ZhciBu
PUFuKHQpO3JldHVybiBudWxsPT09bi5pZHg/dCsiPSIrZToiJHNldCgiK24uZXhwKyIsICIrbi5p
ZHgrIiwgIitlKyIpIn1mdW5jdGlvbiBBbih0KXtpZihuYT10LGVhPW5hLmxlbmd0aCxpYT1vYT1h
YT0wLHQuaW5kZXhPZigiWyIpPDB8fHQubGFzdEluZGV4T2YoIl0iKTxlYS0xKXJldHVybntleHA6
dCxpZHg6bnVsbH07Zm9yKDshT24oKTspcmE9a24oKSxTbihyYSk/RW4ocmEpOjkxPT09cmEmJlRu
KHJhKTtyZXR1cm57ZXhwOnQuc3Vic3RyaW5nKDAsb2EpLGlkeDp0LnN1YnN0cmluZyhvYSsxLGFh
KX19ZnVuY3Rpb24ga24oKXtyZXR1cm4gbmEuY2hhckNvZGVBdCgrK2lhKX1mdW5jdGlvbiBPbigp
e3JldHVybiBpYT49ZWF9ZnVuY3Rpb24gU24odCl7cmV0dXJuIDM0PT09dHx8Mzk9PT10fWZ1bmN0
aW9uIFRuKHQpe3ZhciBlPTE7Zm9yKG9hPWlhOyFPbigpOylpZih0PWtuKCksU24odCkpRW4odCk7
ZWxzZSBpZig5MT09PXQmJmUrKyw5Mz09PXQmJmUtLSwwPT09ZSl7YWE9aWE7YnJlYWt9fWZ1bmN0
aW9uIEVuKHQpe2Zvcih2YXIgZT10OyFPbigpJiYodD1rbigpKSE9PWU7KTt9ZnVuY3Rpb24gam4o
dCxlLG4pe3NhPW47dmFyIHI9ZS52YWx1ZSxpPWUubW9kaWZpZXJzLG89dC50YWcsYT10LmF0dHJz
TWFwLnR5cGU7aWYodC5jb21wb25lbnQpcmV0dXJuIENuKHQscixpKSwhMTtpZigic2VsZWN0Ij09
PW8pTW4odCxyLGkpO2Vsc2UgaWYoImlucHV0Ij09PW8mJiJjaGVja2JveCI9PT1hKU5uKHQscixp
KTtlbHNlIGlmKCJpbnB1dCI9PT1vJiYicmFkaW8iPT09YSlMbih0LHIsaSk7ZWxzZSBpZigiaW5w
dXQiPT09b3x8InRleHRhcmVhIj09PW8pSW4odCxyLGkpO2Vsc2UgaWYoIVhpLmlzUmVzZXJ2ZWRU
YWcobykpcmV0dXJuIENuKHQscixpKSwhMTtyZXR1cm4hMH1mdW5jdGlvbiBObih0LGUsbil7dmFy
IHI9biYmbi5udW1iZXIsaT13bih0LCJ2YWx1ZSIpfHwibnVsbCIsbz13bih0LCJ0cnVlLXZhbHVl
Iil8fCJ0cnVlIixhPXduKHQsImZhbHNlLXZhbHVlIil8fCJmYWxzZSI7eW4odCwiY2hlY2tlZCIs
IkFycmF5LmlzQXJyYXkoIitlKyIpP19pKCIrZSsiLCIraSsiKT4tMSIrKCJ0cnVlIj09PW8/Ijoo
IitlKyIpIjoiOl9xKCIrZSsiLCIrbysiKSIpKSxibih0LFBhLCJ2YXIgJCRhPSIrZSsiLCQkZWw9
JGV2ZW50LnRhcmdldCwkJGM9JCRlbC5jaGVja2VkPygiK28rIik6KCIrYSsiKTtpZihBcnJheS5p
c0FycmF5KCQkYSkpe3ZhciAkJHY9Iisocj8iX24oIitpKyIpIjppKSsiLCQkaT1faSgkJGEsJCR2
KTtpZigkJGVsLmNoZWNrZWQpeyQkaTwwJiYoIitlKyI9JCRhLmNvbmNhdCgkJHYpKX1lbHNleyQk
aT4tMSYmKCIrZSsiPSQkYS5zbGljZSgwLCQkaSkuY29uY2F0KCQkYS5zbGljZSgkJGkrMSkpKX19
ZWxzZXsiK3huKGUsIiQkYyIpKyJ9IixudWxsLCEwKX1mdW5jdGlvbiBMbih0LGUsbil7dmFyIHI9
biYmbi5udW1iZXIsaT13bih0LCJ2YWx1ZSIpfHwibnVsbCI7aT1yPyJfbigiK2krIikiOmkseW4o
dCwiY2hlY2tlZCIsIl9xKCIrZSsiLCIraSsiKSIpLGJuKHQsUGEseG4oZSxpKSxudWxsLCEwKX1m
dW5jdGlvbiBNbih0LGUsbil7dmFyIHI9biYmbi5udW1iZXIsaT0nQXJyYXkucHJvdG90eXBlLmZp
bHRlci5jYWxsKCRldmVudC50YXJnZXQub3B0aW9ucyxmdW5jdGlvbihvKXtyZXR1cm4gby5zZWxl
Y3RlZH0pLm1hcChmdW5jdGlvbihvKXt2YXIgdmFsID0gIl92YWx1ZSIgaW4gbyA/IG8uX3ZhbHVl
IDogby52YWx1ZTtyZXR1cm4gJysocj8iX24odmFsKSI6InZhbCIpKyJ9KSIsbz0idmFyICQkc2Vs
ZWN0ZWRWYWwgPSAiK2krIjsiO289bysiICIreG4oZSwiJGV2ZW50LnRhcmdldC5tdWx0aXBsZSA/
ICQkc2VsZWN0ZWRWYWwgOiAkJHNlbGVjdGVkVmFsWzBdIiksYm4odCwiY2hhbmdlIixvLG51bGws
ITApfWZ1bmN0aW9uIEluKHQsZSxuKXt2YXIgcj10LmF0dHJzTWFwLnR5cGUsaT1ufHx7fSxvPWku
bGF6eSxhPWkubnVtYmVyLHM9aS50cmltLGM9IW8mJiJyYW5nZSIhPT1yLHU9bz8iY2hhbmdlIjoi
cmFuZ2UiPT09cj9JYToiaW5wdXQiLGw9IiRldmVudC50YXJnZXQudmFsdWUiO3MmJihsPSIkZXZl
bnQudGFyZ2V0LnZhbHVlLnRyaW0oKSIpLGEmJihsPSJfbigiK2wrIikiKTt2YXIgZj14bihlLGwp
O2MmJihmPSJpZigkZXZlbnQudGFyZ2V0LmNvbXBvc2luZylyZXR1cm47IitmKSx5bih0LCJ2YWx1
ZSIsIigiK2UrIikiKSxibih0LHUsZixudWxsLCEwKSwoc3x8YSkmJmJuKHQsImJsdXIiLCIkZm9y
Y2VVcGRhdGUoKSIpfWZ1bmN0aW9uIFBuKHQpe3ZhciBlO3IodFtJYV0pJiYoZT1pbz8iY2hhbmdl
IjoiaW5wdXQiLHRbZV09W10uY29uY2F0KHRbSWFdLHRbZV18fFtdKSxkZWxldGUgdFtJYV0pLHIo
dFtQYV0pJiYoZT11bz8iY2xpY2siOiJjaGFuZ2UiLHRbZV09W10uY29uY2F0KHRbUGFdLHRbZV18
fFtdKSxkZWxldGUgdFtQYV0pfWZ1bmN0aW9uIFJuKHQsZSxuLHIsaSl7aWYobil7dmFyIG89ZSxh
PWNhO2U9ZnVuY3Rpb24obil7bnVsbCE9PSgxPT09YXJndW1lbnRzLmxlbmd0aD9vKG4pOm8uYXBw
bHkobnVsbCxhcmd1bWVudHMpKSYmRG4odCxlLHIsYSl9fWNhLmFkZEV2ZW50TGlzdGVuZXIodCxl
LGZvP3tjYXB0dXJlOnIscGFzc2l2ZTppfTpyKX1mdW5jdGlvbiBEbih0LGUsbixyKXsocnx8Y2Ep
LnJlbW92ZUV2ZW50TGlzdGVuZXIodCxlLG4pfWZ1bmN0aW9uIEZuKHQsZSl7aWYoIW4odC5kYXRh
Lm9uKXx8IW4oZS5kYXRhLm9uKSl7dmFyIHI9ZS5kYXRhLm9ufHx7fSxpPXQuZGF0YS5vbnx8e307
Y2E9ZS5lbG0sUG4ociksbnQocixpLFJuLERuLGUuY29udGV4dCl9fWZ1bmN0aW9uIEJuKHQsZSl7
aWYoIW4odC5kYXRhLmRvbVByb3BzKXx8IW4oZS5kYXRhLmRvbVByb3BzKSl7dmFyIGksbyxhPWUu
ZWxtLHM9dC5kYXRhLmRvbVByb3BzfHx7fSxjPWUuZGF0YS5kb21Qcm9wc3x8e307cihjLl9fb2Jf
XykmJihjPWUuZGF0YS5kb21Qcm9wcz1fKHt9LGMpKTtmb3IoaSBpbiBzKW4oY1tpXSkmJihhW2ld
PSIiKTtmb3IoaSBpbiBjKWlmKG89Y1tpXSwidGV4dENvbnRlbnQiIT09aSYmImlubmVySFRNTCIh
PT1pfHwoZS5jaGlsZHJlbiYmKGUuY2hpbGRyZW4ubGVuZ3RoPTApLG8hPT1zW2ldKSlpZigidmFs
dWUiPT09aSl7YS5fdmFsdWU9bzt2YXIgdT1uKG8pPyIiOlN0cmluZyhvKTtVbihhLGUsdSkmJihh
LnZhbHVlPXUpfWVsc2UgYVtpXT1vfX1mdW5jdGlvbiBVbih0LGUsbil7cmV0dXJuIXQuY29tcG9z
aW5nJiYoIm9wdGlvbiI9PT1lLnRhZ3x8SG4odCxuKXx8Vm4odCxuKSl9ZnVuY3Rpb24gSG4odCxl
KXt2YXIgbj0hMDt0cnl7bj1kb2N1bWVudC5hY3RpdmVFbGVtZW50IT09dH1jYXRjaCh0KXt9cmV0
dXJuIG4mJnQudmFsdWUhPT1lfWZ1bmN0aW9uIFZuKHQsZSl7dmFyIG49dC52YWx1ZSxpPXQuX3ZN
b2RpZmllcnM7cmV0dXJuIHIoaSkmJmkubnVtYmVyP3AobikhPT1wKGUpOnIoaSkmJmkudHJpbT9u
LnRyaW0oKSE9PWUudHJpbSgpOm4hPT1lfWZ1bmN0aW9uIHpuKHQpe3ZhciBlPUpuKHQuc3R5bGUp
O3JldHVybiB0LnN0YXRpY1N0eWxlP18odC5zdGF0aWNTdHlsZSxlKTplfWZ1bmN0aW9uIEpuKHQp
e3JldHVybiBBcnJheS5pc0FycmF5KHQpP2IodCk6InN0cmluZyI9PXR5cGVvZiB0P0ZhKHQpOnR9
ZnVuY3Rpb24gS24odCxlKXt2YXIgbixyPXt9O2lmKGUpZm9yKHZhciBpPXQ7aS5jb21wb25lbnRJ
bnN0YW5jZTspaT1pLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZSxpLmRhdGEmJihuPXpuKGkuZGF0
YSkpJiZfKHIsbik7KG49em4odC5kYXRhKSkmJl8ocixuKTtmb3IodmFyIG89dDtvPW8ucGFyZW50
OylvLmRhdGEmJihuPXpuKG8uZGF0YSkpJiZfKHIsbik7cmV0dXJuIHJ9ZnVuY3Rpb24gcW4odCxl
KXt2YXIgaT1lLmRhdGEsbz10LmRhdGE7aWYoIShuKGkuc3RhdGljU3R5bGUpJiZuKGkuc3R5bGUp
JiZuKG8uc3RhdGljU3R5bGUpJiZuKG8uc3R5bGUpKSl7dmFyIGEscyxjPWUuZWxtLHU9by5zdGF0
aWNTdHlsZSxsPW8ubm9ybWFsaXplZFN0eWxlfHxvLnN0eWxlfHx7fSxmPXV8fGwscD1KbihlLmRh
dGEuc3R5bGUpfHx7fTtlLmRhdGEubm9ybWFsaXplZFN0eWxlPXIocC5fX29iX18pP18oe30scCk6
cDt2YXIgZD1LbihlLCEwKTtmb3IocyBpbiBmKW4oZFtzXSkmJkhhKGMscywiIik7Zm9yKHMgaW4g
ZCkoYT1kW3NdKSE9PWZbc10mJkhhKGMscyxudWxsPT1hPyIiOmEpfX1mdW5jdGlvbiBXbih0LGUp
e2lmKGUmJihlPWUudHJpbSgpKSlpZih0LmNsYXNzTGlzdCllLmluZGV4T2YoIiAiKT4tMT9lLnNw
bGl0KC9ccysvKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiB0LmNsYXNzTGlzdC5hZGQoZSl9
KTp0LmNsYXNzTGlzdC5hZGQoZSk7ZWxzZXt2YXIgbj0iICIrKHQuZ2V0QXR0cmlidXRlKCJjbGFz
cyIpfHwiIikrIiAiO24uaW5kZXhPZigiICIrZSsiICIpPDAmJnQuc2V0QXR0cmlidXRlKCJjbGFz
cyIsKG4rZSkudHJpbSgpKX19ZnVuY3Rpb24gWm4odCxlKXtpZihlJiYoZT1lLnRyaW0oKSkpaWYo
dC5jbGFzc0xpc3QpZS5pbmRleE9mKCIgIik+LTE/ZS5zcGxpdCgvXHMrLykuZm9yRWFjaChmdW5j
dGlvbihlKXtyZXR1cm4gdC5jbGFzc0xpc3QucmVtb3ZlKGUpfSk6dC5jbGFzc0xpc3QucmVtb3Zl
KGUpLHQuY2xhc3NMaXN0Lmxlbmd0aHx8dC5yZW1vdmVBdHRyaWJ1dGUoImNsYXNzIik7ZWxzZXtm
b3IodmFyIG49IiAiKyh0LmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpKyIgIixyPSIgIitlKyIg
IjtuLmluZGV4T2Yocik+PTA7KW49bi5yZXBsYWNlKHIsIiAiKTtuPW4udHJpbSgpLG4/dC5zZXRB
dHRyaWJ1dGUoImNsYXNzIixuKTp0LnJlbW92ZUF0dHJpYnV0ZSgiY2xhc3MiKX19ZnVuY3Rpb24g
R24odCl7aWYodCl7aWYoIm9iamVjdCI9PXR5cGVvZiB0KXt2YXIgZT17fTtyZXR1cm4hMSE9PXQu
Y3NzJiZfKGUsS2EodC5uYW1lfHwidiIpKSxfKGUsdCksZX1yZXR1cm4ic3RyaW5nIj09dHlwZW9m
IHQ/S2EodCk6dm9pZCAwfX1mdW5jdGlvbiBYbih0KXt0cyhmdW5jdGlvbigpe3RzKHQpfSl9ZnVu
Y3Rpb24gWW4odCxlKXt2YXIgbj10Ll90cmFuc2l0aW9uQ2xhc3Nlc3x8KHQuX3RyYW5zaXRpb25D
bGFzc2VzPVtdKTtuLmluZGV4T2YoZSk8MCYmKG4ucHVzaChlKSxXbih0LGUpKX1mdW5jdGlvbiBR
bih0LGUpe3QuX3RyYW5zaXRpb25DbGFzc2VzJiZoKHQuX3RyYW5zaXRpb25DbGFzc2VzLGUpLFpu
KHQsZSl9ZnVuY3Rpb24gdHIodCxlLG4pe3ZhciByPWVyKHQsZSksaT1yLnR5cGUsbz1yLnRpbWVv
dXQsYT1yLnByb3BDb3VudDtpZighaSlyZXR1cm4gbigpO3ZhciBzPWk9PT1XYT9YYTpRYSxjPTAs
dT1mdW5jdGlvbigpe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihzLGwpLG4oKX0sbD1mdW5jdGlvbihl
KXtlLnRhcmdldD09PXQmJisrYz49YSYmdSgpfTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YzxhJiZ1
KCl9LG8rMSksdC5hZGRFdmVudExpc3RlbmVyKHMsbCl9ZnVuY3Rpb24gZXIodCxlKXt2YXIgbixy
PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpLGk9cltHYSsiRGVsYXkiXS5zcGxpdCgiLCAiKSxv
PXJbR2ErIkR1cmF0aW9uIl0uc3BsaXQoIiwgIiksYT1ucihpLG8pLHM9cltZYSsiRGVsYXkiXS5z
cGxpdCgiLCAiKSxjPXJbWWErIkR1cmF0aW9uIl0uc3BsaXQoIiwgIiksdT1ucihzLGMpLGw9MCxm
PTA7cmV0dXJuIGU9PT1XYT9hPjAmJihuPVdhLGw9YSxmPW8ubGVuZ3RoKTplPT09WmE/dT4wJiYo
bj1aYSxsPXUsZj1jLmxlbmd0aCk6KGw9TWF0aC5tYXgoYSx1KSxuPWw+MD9hPnU/V2E6WmE6bnVs
bCxmPW4/bj09PVdhP28ubGVuZ3RoOmMubGVuZ3RoOjApLHt0eXBlOm4sdGltZW91dDpsLHByb3BD
b3VudDpmLGhhc1RyYW5zZm9ybTpuPT09V2EmJmVzLnRlc3QocltHYSsiUHJvcGVydHkiXSl9fWZ1
bmN0aW9uIG5yKHQsZSl7Zm9yKDt0Lmxlbmd0aDxlLmxlbmd0aDspdD10LmNvbmNhdCh0KTtyZXR1
cm4gTWF0aC5tYXguYXBwbHkobnVsbCxlLm1hcChmdW5jdGlvbihlLG4pe3JldHVybiBycihlKSty
cih0W25dKX0pKX1mdW5jdGlvbiBycih0KXtyZXR1cm4gMWUzKk51bWJlcih0LnNsaWNlKDAsLTEp
KX1mdW5jdGlvbiBpcih0LGUpe3ZhciBpPXQuZWxtO3IoaS5fbGVhdmVDYikmJihpLl9sZWF2ZUNi
LmNhbmNlbGxlZD0hMCxpLl9sZWF2ZUNiKCkpO3ZhciBvPUduKHQuZGF0YS50cmFuc2l0aW9uKTtp
ZighbihvKSYmIXIoaS5fZW50ZXJDYikmJjE9PT1pLm5vZGVUeXBlKXtmb3IodmFyIGE9by5jc3Ms
Yz1vLnR5cGUsdT1vLmVudGVyQ2xhc3MsbD1vLmVudGVyVG9DbGFzcyxmPW8uZW50ZXJBY3RpdmVD
bGFzcyxkPW8uYXBwZWFyQ2xhc3MsaD1vLmFwcGVhclRvQ2xhc3Msdj1vLmFwcGVhckFjdGl2ZUNs
YXNzLG09by5iZWZvcmVFbnRlcix5PW8uZW50ZXIsZz1vLmFmdGVyRW50ZXIsXz1vLmVudGVyQ2Fu
Y2VsbGVkLGI9by5iZWZvcmVBcHBlYXIsdz1vLmFwcGVhciwkPW8uYWZ0ZXJBcHBlYXIsQz1vLmFw
cGVhckNhbmNlbGxlZCxBPW8uZHVyYXRpb24saz1JbyxPPUlvLiR2bm9kZTtPJiZPLnBhcmVudDsp
Tz1PLnBhcmVudCxrPU8uY29udGV4dDt2YXIgUz0hay5faXNNb3VudGVkfHwhdC5pc1Jvb3RJbnNl
cnQ7aWYoIVN8fHd8fCIiPT09dyl7dmFyIFQ9UyYmZD9kOnUsRT1TJiZ2P3Y6ZixqPVMmJmg/aDps
LE49Uz9ifHxtOm0sTD1TJiYiZnVuY3Rpb24iPT10eXBlb2Ygdz93OnksTT1TPyR8fGc6ZyxJPVM/
Q3x8XzpfLFA9cChzKEEpP0EuZW50ZXI6QSksUj0hMSE9PWEmJiFvbyxEPXNyKEwpLEY9aS5fZW50
ZXJDYj14KGZ1bmN0aW9uKCl7UiYmKFFuKGksaiksUW4oaSxFKSksRi5jYW5jZWxsZWQ/KFImJlFu
KGksVCksSSYmSShpKSk6TSYmTShpKSxpLl9lbnRlckNiPW51bGx9KTt0LmRhdGEuc2hvd3x8cnQo
dC5kYXRhLmhvb2t8fCh0LmRhdGEuaG9vaz17fSksImluc2VydCIsZnVuY3Rpb24oKXt2YXIgZT1p
LnBhcmVudE5vZGUsbj1lJiZlLl9wZW5kaW5nJiZlLl9wZW5kaW5nW3Qua2V5XTtuJiZuLnRhZz09
PXQudGFnJiZuLmVsbS5fbGVhdmVDYiYmbi5lbG0uX2xlYXZlQ2IoKSxMJiZMKGksRil9KSxOJiZO
KGkpLFImJihZbihpLFQpLFluKGksRSksWG4oZnVuY3Rpb24oKXtZbihpLGopLFFuKGksVCksRi5j
YW5jZWxsZWR8fER8fChhcihQKT9zZXRUaW1lb3V0KEYsUCk6dHIoaSxjLEYpKX0pKSx0LmRhdGEu
c2hvdyYmKGUmJmUoKSxMJiZMKGksRikpLFJ8fER8fEYoKX19fWZ1bmN0aW9uIG9yKHQsZSl7ZnVu
Y3Rpb24gaSgpe0MuY2FuY2VsbGVkfHwodC5kYXRhLnNob3d8fCgoby5wYXJlbnROb2RlLl9wZW5k
aW5nfHwoby5wYXJlbnROb2RlLl9wZW5kaW5nPXt9KSlbdC5rZXldPXQpLGgmJmgobyksYiYmKFlu
KG8sbCksWW4obyxkKSxYbihmdW5jdGlvbigpe1luKG8sZiksUW4obyxsKSxDLmNhbmNlbGxlZHx8
d3x8KGFyKCQpP3NldFRpbWVvdXQoQywkKTp0cihvLHUsQykpfSkpLHYmJnYobyxDKSxifHx3fHxD
KCkpfXZhciBvPXQuZWxtO3Ioby5fZW50ZXJDYikmJihvLl9lbnRlckNiLmNhbmNlbGxlZD0hMCxv
Ll9lbnRlckNiKCkpO3ZhciBhPUduKHQuZGF0YS50cmFuc2l0aW9uKTtpZihuKGEpKXJldHVybiBl
KCk7aWYoIXIoby5fbGVhdmVDYikmJjE9PT1vLm5vZGVUeXBlKXt2YXIgYz1hLmNzcyx1PWEudHlw
ZSxsPWEubGVhdmVDbGFzcyxmPWEubGVhdmVUb0NsYXNzLGQ9YS5sZWF2ZUFjdGl2ZUNsYXNzLGg9
YS5iZWZvcmVMZWF2ZSx2PWEubGVhdmUsbT1hLmFmdGVyTGVhdmUseT1hLmxlYXZlQ2FuY2VsbGVk
LGc9YS5kZWxheUxlYXZlLF89YS5kdXJhdGlvbixiPSExIT09YyYmIW9vLHc9c3IodiksJD1wKHMo
Xyk/Xy5sZWF2ZTpfKSxDPW8uX2xlYXZlQ2I9eChmdW5jdGlvbigpe28ucGFyZW50Tm9kZSYmby5w
YXJlbnROb2RlLl9wZW5kaW5nJiYoby5wYXJlbnROb2RlLl9wZW5kaW5nW3Qua2V5XT1udWxsKSxi
JiYoUW4obyxmKSxRbihvLGQpKSxDLmNhbmNlbGxlZD8oYiYmUW4obyxsKSx5JiZ5KG8pKTooZSgp
LG0mJm0obykpLG8uX2xlYXZlQ2I9bnVsbH0pO2c/ZyhpKTppKCl9fWZ1bmN0aW9uIGFyKHQpe3Jl
dHVybiJudW1iZXIiPT10eXBlb2YgdCYmIWlzTmFOKHQpfWZ1bmN0aW9uIHNyKHQpe2lmKG4odCkp
cmV0dXJuITE7dmFyIGU9dC5mbnM7cmV0dXJuIHIoZSk/c3IoQXJyYXkuaXNBcnJheShlKT9lWzBd
OmUpOih0Ll9sZW5ndGh8fHQubGVuZ3RoKT4xfWZ1bmN0aW9uIGNyKHQsZSl7ITAhPT1lLmRhdGEu
c2hvdyYmaXIoZSl9ZnVuY3Rpb24gdXIodCxlLG4pe3ZhciByPWUudmFsdWUsaT10Lm11bHRpcGxl
O2lmKCFpfHxBcnJheS5pc0FycmF5KHIpKXtmb3IodmFyIG8sYSxzPTAsYz10Lm9wdGlvbnMubGVu
Z3RoO3M8YztzKyspaWYoYT10Lm9wdGlvbnNbc10saSlvPUMocixscihhKSk+LTEsYS5zZWxlY3Rl
ZCE9PW8mJihhLnNlbGVjdGVkPW8pO2Vsc2UgaWYoJChscihhKSxyKSlyZXR1cm4gdm9pZCh0LnNl
bGVjdGVkSW5kZXghPT1zJiYodC5zZWxlY3RlZEluZGV4PXMpKTtpfHwodC5zZWxlY3RlZEluZGV4
PS0xKX19ZnVuY3Rpb24gbHIodCl7cmV0dXJuIl92YWx1ZSJpbiB0P3QuX3ZhbHVlOnQudmFsdWV9
ZnVuY3Rpb24gZnIodCl7dC50YXJnZXQuY29tcG9zaW5nPSEwfWZ1bmN0aW9uIHByKHQpe3QudGFy
Z2V0LmNvbXBvc2luZyYmKHQudGFyZ2V0LmNvbXBvc2luZz0hMSxkcih0LnRhcmdldCwiaW5wdXQi
KSl9ZnVuY3Rpb24gZHIodCxlKXt2YXIgbj1kb2N1bWVudC5jcmVhdGVFdmVudCgiSFRNTEV2ZW50
cyIpO24uaW5pdEV2ZW50KGUsITAsITApLHQuZGlzcGF0Y2hFdmVudChuKX1mdW5jdGlvbiBocih0
KXtyZXR1cm4hdC5jb21wb25lbnRJbnN0YW5jZXx8dC5kYXRhJiZ0LmRhdGEudHJhbnNpdGlvbj90
OmhyKHQuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlKX1mdW5jdGlvbiB2cih0KXt2YXIgZT10JiZ0
LmNvbXBvbmVudE9wdGlvbnM7cmV0dXJuIGUmJmUuQ3Rvci5vcHRpb25zLmFic3RyYWN0P3ZyKGR0
KGUuY2hpbGRyZW4pKTp0fWZ1bmN0aW9uIG1yKHQpe3ZhciBlPXt9LG49dC4kb3B0aW9ucztmb3Io
dmFyIHIgaW4gbi5wcm9wc0RhdGEpZVtyXT10W3JdO3ZhciBpPW4uX3BhcmVudExpc3RlbmVycztm
b3IodmFyIG8gaW4gaSllW0hpKG8pXT1pW29dO3JldHVybiBlfWZ1bmN0aW9uIHlyKHQsZSl7aWYo
L1xkLWtlZXAtYWxpdmUkLy50ZXN0KGUudGFnKSlyZXR1cm4gdCgia2VlcC1hbGl2ZSIse3Byb3Bz
OmUuY29tcG9uZW50T3B0aW9ucy5wcm9wc0RhdGF9KX1mdW5jdGlvbiBncih0KXtmb3IoO3Q9dC5w
YXJlbnQ7KWlmKHQuZGF0YS50cmFuc2l0aW9uKXJldHVybiEwfWZ1bmN0aW9uIF9yKHQsZSl7cmV0
dXJuIGUua2V5PT09dC5rZXkmJmUudGFnPT09dC50YWd9ZnVuY3Rpb24gYnIodCl7cmV0dXJuIHQu
aXNDb21tZW50JiZ0LmFzeW5jRmFjdG9yeX1mdW5jdGlvbiB3cih0KXt0LmVsbS5fbW92ZUNiJiZ0
LmVsbS5fbW92ZUNiKCksdC5lbG0uX2VudGVyQ2ImJnQuZWxtLl9lbnRlckNiKCl9ZnVuY3Rpb24g
JHIodCl7dC5kYXRhLm5ld1Bvcz10LmVsbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1mdW5jdGlv
biBDcih0KXt2YXIgZT10LmRhdGEucG9zLG49dC5kYXRhLm5ld1BvcyxyPWUubGVmdC1uLmxlZnQs
aT1lLnRvcC1uLnRvcDtpZihyfHxpKXt0LmRhdGEubW92ZWQ9ITA7dmFyIG89dC5lbG0uc3R5bGU7
by50cmFuc2Zvcm09by5XZWJraXRUcmFuc2Zvcm09InRyYW5zbGF0ZSgiK3IrInB4LCIraSsicHgp
IixvLnRyYW5zaXRpb25EdXJhdGlvbj0iMHMifX1mdW5jdGlvbiB4cih0LGUpe3ZhciBuPWU/X3Mo
ZSk6eXM7aWYobi50ZXN0KHQpKXtmb3IodmFyIHIsaSxvPVtdLGE9bi5sYXN0SW5kZXg9MDtyPW4u
ZXhlYyh0KTspe2k9ci5pbmRleCxpPmEmJm8ucHVzaChKU09OLnN0cmluZ2lmeSh0LnNsaWNlKGEs
aSkpKTt2YXIgcz1kbihyWzFdLnRyaW0oKSk7by5wdXNoKCJfcygiK3MrIikiKSxhPWkrclswXS5s
ZW5ndGh9cmV0dXJuIGE8dC5sZW5ndGgmJm8ucHVzaChKU09OLnN0cmluZ2lmeSh0LnNsaWNlKGEp
KSksby5qb2luKCIrIil9fWZ1bmN0aW9uIEFyKHQsZSl7dmFyIG49KGUud2Fybiwkbih0LCJjbGFz
cyIpKTtuJiYodC5zdGF0aWNDbGFzcz1KU09OLnN0cmluZ2lmeShuKSk7dmFyIHI9d24odCwiY2xh
c3MiLCExKTtyJiYodC5jbGFzc0JpbmRpbmc9cil9ZnVuY3Rpb24ga3IodCl7dmFyIGU9IiI7cmV0
dXJuIHQuc3RhdGljQ2xhc3MmJihlKz0ic3RhdGljQ2xhc3M6Iit0LnN0YXRpY0NsYXNzKyIsIiks
dC5jbGFzc0JpbmRpbmcmJihlKz0iY2xhc3M6Iit0LmNsYXNzQmluZGluZysiLCIpLGV9ZnVuY3Rp
b24gT3IodCxlKXt2YXIgbj0oZS53YXJuLCRuKHQsInN0eWxlIikpO2lmKG4pe3Quc3RhdGljU3R5
bGU9SlNPTi5zdHJpbmdpZnkoRmEobikpfXZhciByPXduKHQsInN0eWxlIiwhMSk7ciYmKHQuc3R5
bGVCaW5kaW5nPXIpfWZ1bmN0aW9uIFNyKHQpe3ZhciBlPSIiO3JldHVybiB0LnN0YXRpY1N0eWxl
JiYoZSs9InN0YXRpY1N0eWxlOiIrdC5zdGF0aWNTdHlsZSsiLCIpLHQuc3R5bGVCaW5kaW5nJiYo
ZSs9InN0eWxlOigiK3Quc3R5bGVCaW5kaW5nKyIpLCIpLGV9ZnVuY3Rpb24gVHIodCxlKXtlLnZh
bHVlJiZ5bih0LCJ0ZXh0Q29udGVudCIsIl9zKCIrZS52YWx1ZSsiKSIpfWZ1bmN0aW9uIEVyKHQs
ZSl7ZS52YWx1ZSYmeW4odCwiaW5uZXJIVE1MIiwiX3MoIitlLnZhbHVlKyIpIil9ZnVuY3Rpb24g
anIodCxlKXt2YXIgbj1lP25jOmVjO3JldHVybiB0LnJlcGxhY2UobixmdW5jdGlvbih0KXtyZXR1
cm4gdGNbdF19KX1mdW5jdGlvbiBOcih0LGUpe2Z1bmN0aW9uIG4oZSl7bCs9ZSx0PXQuc3Vic3Ry
aW5nKGUpfWZ1bmN0aW9uIHIodCxuLHIpe3ZhciBpLHM7aWYobnVsbD09biYmKG49bCksbnVsbD09
ciYmKHI9bCksdCYmKHM9dC50b0xvd2VyQ2FzZSgpKSx0KWZvcihpPWEubGVuZ3RoLTE7aT49MCYm
YVtpXS5sb3dlckNhc2VkVGFnIT09cztpLS0pO2Vsc2UgaT0wO2lmKGk+PTApe2Zvcih2YXIgYz1h
Lmxlbmd0aC0xO2M+PWk7Yy0tKWUuZW5kJiZlLmVuZChhW2NdLnRhZyxuLHIpO2EubGVuZ3RoPWks
bz1pJiZhW2ktMV0udGFnfWVsc2UiYnIiPT09cz9lLnN0YXJ0JiZlLnN0YXJ0KHQsW10sITAsbixy
KToicCI9PT1zJiYoZS5zdGFydCYmZS5zdGFydCh0LFtdLCExLG4sciksZS5lbmQmJmUuZW5kKHQs
bixyKSl9Zm9yKHZhciBpLG8sYT1bXSxzPWUuZXhwZWN0SFRNTCxjPWUuaXNVbmFyeVRhZ3x8S2ks
dT1lLmNhbkJlTGVmdE9wZW5UYWd8fEtpLGw9MDt0Oyl7aWYoaT10LG8mJllzKG8pKXt2YXIgZj0w
LHA9by50b0xvd2VyQ2FzZSgpLGQ9UXNbcF18fChRc1twXT1uZXcgUmVnRXhwKCIoW1xcc1xcU10q
PykoPC8iK3ArIltePl0qPikiLCJpIikpLGg9dC5yZXBsYWNlKGQsZnVuY3Rpb24odCxuLHIpe3Jl
dHVybiBmPXIubGVuZ3RoLFlzKHApfHwibm9zY3JpcHQiPT09cHx8KG49bi5yZXBsYWNlKC88IS0t
KFtcc1xTXSo/KS0tPi9nLCIkMSIpLnJlcGxhY2UoLzwhXFtDREFUQVxbKFtcc1xTXSo/KV1dPi9n
LCIkMSIpKSxpYyhwLG4pJiYobj1uLnNsaWNlKDEpKSxlLmNoYXJzJiZlLmNoYXJzKG4pLCIifSk7
bCs9dC5sZW5ndGgtaC5sZW5ndGgsdD1oLHIocCxsLWYsbCl9ZWxzZXt2YXIgdj10LmluZGV4T2Yo
IjwiKTtpZigwPT09dil7aWYoRnMudGVzdCh0KSl7dmFyIG09dC5pbmRleE9mKCItLVx4M2UiKTtp
ZihtPj0wKXtlLnNob3VsZEtlZXBDb21tZW50JiZlLmNvbW1lbnQodC5zdWJzdHJpbmcoNCxtKSks
bihtKzMpO2NvbnRpbnVlfX1pZihCcy50ZXN0KHQpKXt2YXIgeT10LmluZGV4T2YoIl0+Iik7aWYo
eT49MCl7bih5KzIpO2NvbnRpbnVlfX12YXIgZz10Lm1hdGNoKERzKTtpZihnKXtuKGdbMF0ubGVu
Z3RoKTtjb250aW51ZX12YXIgXz10Lm1hdGNoKFJzKTtpZihfKXt2YXIgYj1sO24oX1swXS5sZW5n
dGgpLHIoX1sxXSxiLGwpO2NvbnRpbnVlfXZhciB3PWZ1bmN0aW9uKCl7dmFyIGU9dC5tYXRjaChJ
cyk7aWYoZSl7dmFyIHI9e3RhZ05hbWU6ZVsxXSxhdHRyczpbXSxzdGFydDpsfTtuKGVbMF0ubGVu
Z3RoKTtmb3IodmFyIGksbzshKGk9dC5tYXRjaChQcykpJiYobz10Lm1hdGNoKE5zKSk7KW4ob1sw
XS5sZW5ndGgpLHIuYXR0cnMucHVzaChvKTtpZihpKXJldHVybiByLnVuYXJ5U2xhc2g9aVsxXSxu
KGlbMF0ubGVuZ3RoKSxyLmVuZD1sLHJ9fSgpO2lmKHcpeyFmdW5jdGlvbih0KXt2YXIgbj10LnRh
Z05hbWUsaT10LnVuYXJ5U2xhc2g7cyYmKCJwIj09PW8mJmtzKG4pJiZyKG8pLHUobikmJm89PT1u
JiZyKG4pKTtmb3IodmFyIGw9YyhuKXx8ISFpLGY9dC5hdHRycy5sZW5ndGgscD1uZXcgQXJyYXko
ZiksZD0wO2Q8ZjtkKyspe3ZhciBoPXQuYXR0cnNbZF07VXMmJi0xPT09aFswXS5pbmRleE9mKCci
IicpJiYoIiI9PT1oWzNdJiZkZWxldGUgaFszXSwiIj09PWhbNF0mJmRlbGV0ZSBoWzRdLCIiPT09
aFs1XSYmZGVsZXRlIGhbNV0pO3ZhciB2PWhbM118fGhbNF18fGhbNV18fCIiO3BbZF09e25hbWU6
aFsxXSx2YWx1ZTpqcih2LGUuc2hvdWxkRGVjb2RlTmV3bGluZXMpfX1sfHwoYS5wdXNoKHt0YWc6
bixsb3dlckNhc2VkVGFnOm4udG9Mb3dlckNhc2UoKSxhdHRyczpwfSksbz1uKSxlLnN0YXJ0JiZl
LnN0YXJ0KG4scCxsLHQuc3RhcnQsdC5lbmQpfSh3KSxpYyhvLHQpJiZuKDEpO2NvbnRpbnVlfX12
YXIgJD12b2lkIDAsQz12b2lkIDAseD12b2lkIDA7aWYodj49MCl7Zm9yKEM9dC5zbGljZSh2KTsh
KFJzLnRlc3QoQyl8fElzLnRlc3QoQyl8fEZzLnRlc3QoQyl8fEJzLnRlc3QoQyl8fCh4PUMuaW5k
ZXhPZigiPCIsMSkpPDApOyl2Kz14LEM9dC5zbGljZSh2KTskPXQuc3Vic3RyaW5nKDAsdiksbih2
KX12PDAmJigkPXQsdD0iIiksZS5jaGFycyYmJCYmZS5jaGFycygkKX1pZih0PT09aSl7ZS5jaGFy
cyYmZS5jaGFycyh0KTticmVha319cigpfWZ1bmN0aW9uIExyKHQsZSl7ZnVuY3Rpb24gbih0KXt0
LnByZSYmKHM9ITEpLHFzKHQudGFnKSYmKGM9ITEpfUhzPWUud2Fybnx8dm4scXM9ZS5pc1ByZVRh
Z3x8S2ksV3M9ZS5tdXN0VXNlUHJvcHx8S2ksWnM9ZS5nZXRUYWdOYW1lc3BhY2V8fEtpLHpzPW1u
KGUubW9kdWxlcywidHJhbnNmb3JtTm9kZSIpLEpzPW1uKGUubW9kdWxlcywicHJlVHJhbnNmb3Jt
Tm9kZSIpLEtzPW1uKGUubW9kdWxlcywicG9zdFRyYW5zZm9ybU5vZGUiKSxWcz1lLmRlbGltaXRl
cnM7dmFyIHIsaSxvPVtdLGE9ITEhPT1lLnByZXNlcnZlV2hpdGVzcGFjZSxzPSExLGM9ITE7cmV0
dXJuIE5yKHQse3dhcm46SHMsZXhwZWN0SFRNTDplLmV4cGVjdEhUTUwsaXNVbmFyeVRhZzplLmlz
VW5hcnlUYWcsY2FuQmVMZWZ0T3BlblRhZzplLmNhbkJlTGVmdE9wZW5UYWcsc2hvdWxkRGVjb2Rl
TmV3bGluZXM6ZS5zaG91bGREZWNvZGVOZXdsaW5lcyxzaG91bGRLZWVwQ29tbWVudDplLmNvbW1l
bnRzLHN0YXJ0OmZ1bmN0aW9uKHQsYSx1KXt2YXIgbD1pJiZpLm5zfHxacyh0KTtpbyYmInN2ZyI9
PT1sJiYoYT1ZcihhKSk7dmFyIGY9e3R5cGU6MSx0YWc6dCxhdHRyc0xpc3Q6YSxhdHRyc01hcDpa
cihhKSxwYXJlbnQ6aSxjaGlsZHJlbjpbXX07bCYmKGYubnM9bCksWHIoZikmJiFtbygpJiYoZi5m
b3JiaWRkZW49ITApO2Zvcih2YXIgcD0wO3A8SnMubGVuZ3RoO3ArKylKc1twXShmLGUpO2lmKHN8
fChNcihmKSxmLnByZSYmKHM9ITApKSxxcyhmLnRhZykmJihjPSEwKSxzKUlyKGYpO2Vsc2V7RHIo
ZiksRnIoZiksVnIoZiksUHIoZiksZi5wbGFpbj0hZi5rZXkmJiFhLmxlbmd0aCxScihmKSx6cihm
KSxKcihmKTtmb3IodmFyIGQ9MDtkPHpzLmxlbmd0aDtkKyspenNbZF0oZixlKTtLcihmKX1pZihy
P28ubGVuZ3RofHxyLmlmJiYoZi5lbHNlaWZ8fGYuZWxzZSkmJkhyKHIse2V4cDpmLmVsc2VpZixi
bG9jazpmfSk6cj1mLGkmJiFmLmZvcmJpZGRlbilpZihmLmVsc2VpZnx8Zi5lbHNlKUJyKGYsaSk7
ZWxzZSBpZihmLnNsb3RTY29wZSl7aS5wbGFpbj0hMTt2YXIgaD1mLnNsb3RUYXJnZXR8fCciZGVm
YXVsdCInOyhpLnNjb3BlZFNsb3RzfHwoaS5zY29wZWRTbG90cz17fSkpW2hdPWZ9ZWxzZSBpLmNo
aWxkcmVuLnB1c2goZiksZi5wYXJlbnQ9aTt1P24oZik6KGk9ZixvLnB1c2goZikpO2Zvcih2YXIg
dj0wO3Y8S3MubGVuZ3RoO3YrKylLc1t2XShmLGUpfSxlbmQ6ZnVuY3Rpb24oKXt2YXIgdD1vW28u
bGVuZ3RoLTFdLGU9dC5jaGlsZHJlblt0LmNoaWxkcmVuLmxlbmd0aC0xXTtlJiYzPT09ZS50eXBl
JiYiICI9PT1lLnRleHQmJiFjJiZ0LmNoaWxkcmVuLnBvcCgpLG8ubGVuZ3RoLT0xLGk9b1tvLmxl
bmd0aC0xXSxuKHQpfSxjaGFyczpmdW5jdGlvbih0KXtpZihpJiYoIWlvfHwidGV4dGFyZWEiIT09
aS50YWd8fGkuYXR0cnNNYXAucGxhY2Vob2xkZXIhPT10KSl7dmFyIGU9aS5jaGlsZHJlbjtpZih0
PWN8fHQudHJpbSgpP0dyKGkpP3Q6cGModCk6YSYmZS5sZW5ndGg/IiAiOiIiKXt2YXIgbjshcyYm
IiAiIT09dCYmKG49eHIodCxWcykpP2UucHVzaCh7dHlwZToyLGV4cHJlc3Npb246bix0ZXh0OnR9
KToiICI9PT10JiZlLmxlbmd0aCYmIiAiPT09ZVtlLmxlbmd0aC0xXS50ZXh0fHxlLnB1c2goe3R5
cGU6Myx0ZXh0OnR9KX19fSxjb21tZW50OmZ1bmN0aW9uKHQpe2kuY2hpbGRyZW4ucHVzaCh7dHlw
ZTozLHRleHQ6dCxpc0NvbW1lbnQ6ITB9KX19KSxyfWZ1bmN0aW9uIE1yKHQpe251bGwhPSRuKHQs
InYtcHJlIikmJih0LnByZT0hMCl9ZnVuY3Rpb24gSXIodCl7dmFyIGU9dC5hdHRyc0xpc3QubGVu
Z3RoO2lmKGUpZm9yKHZhciBuPXQuYXR0cnM9bmV3IEFycmF5KGUpLHI9MDtyPGU7cisrKW5bcl09
e25hbWU6dC5hdHRyc0xpc3Rbcl0ubmFtZSx2YWx1ZTpKU09OLnN0cmluZ2lmeSh0LmF0dHJzTGlz
dFtyXS52YWx1ZSl9O2Vsc2UgdC5wcmV8fCh0LnBsYWluPSEwKX1mdW5jdGlvbiBQcih0KXt2YXIg
ZT13bih0LCJrZXkiKTtlJiYodC5rZXk9ZSl9ZnVuY3Rpb24gUnIodCl7dmFyIGU9d24odCwicmVm
Iik7ZSYmKHQucmVmPWUsdC5yZWZJbkZvcj1xcih0KSl9ZnVuY3Rpb24gRHIodCl7dmFyIGU7aWYo
ZT0kbih0LCJ2LWZvciIpKXt2YXIgbj1lLm1hdGNoKHNjKTtpZighbilyZXR1cm47dC5mb3I9blsy
XS50cmltKCk7dmFyIHI9blsxXS50cmltKCksaT1yLm1hdGNoKGNjKTtpPyh0LmFsaWFzPWlbMV0u
dHJpbSgpLHQuaXRlcmF0b3IxPWlbMl0udHJpbSgpLGlbM10mJih0Lml0ZXJhdG9yMj1pWzNdLnRy
aW0oKSkpOnQuYWxpYXM9cn19ZnVuY3Rpb24gRnIodCl7dmFyIGU9JG4odCwidi1pZiIpO2lmKGUp
dC5pZj1lLEhyKHQse2V4cDplLGJsb2NrOnR9KTtlbHNle251bGwhPSRuKHQsInYtZWxzZSIpJiYo
dC5lbHNlPSEwKTt2YXIgbj0kbih0LCJ2LWVsc2UtaWYiKTtuJiYodC5lbHNlaWY9bil9fWZ1bmN0
aW9uIEJyKHQsZSl7dmFyIG49VXIoZS5jaGlsZHJlbik7biYmbi5pZiYmSHIobix7ZXhwOnQuZWxz
ZWlmLGJsb2NrOnR9KX1mdW5jdGlvbiBVcih0KXtmb3IodmFyIGU9dC5sZW5ndGg7ZS0tOyl7aWYo
MT09PXRbZV0udHlwZSlyZXR1cm4gdFtlXTt0LnBvcCgpfX1mdW5jdGlvbiBIcih0LGUpe3QuaWZD
b25kaXRpb25zfHwodC5pZkNvbmRpdGlvbnM9W10pLHQuaWZDb25kaXRpb25zLnB1c2goZSl9ZnVu
Y3Rpb24gVnIodCl7bnVsbCE9JG4odCwidi1vbmNlIikmJih0Lm9uY2U9ITApfWZ1bmN0aW9uIHpy
KHQpe2lmKCJzbG90Ij09PXQudGFnKXQuc2xvdE5hbWU9d24odCwibmFtZSIpO2Vsc2V7dmFyIGU9
d24odCwic2xvdCIpO2UmJih0LnNsb3RUYXJnZXQ9JyIiJz09PWU/JyJkZWZhdWx0Iic6ZSksInRl
bXBsYXRlIj09PXQudGFnJiYodC5zbG90U2NvcGU9JG4odCwic2NvcGUiKSl9fWZ1bmN0aW9uIEpy
KHQpe3ZhciBlOyhlPXduKHQsImlzIikpJiYodC5jb21wb25lbnQ9ZSksbnVsbCE9JG4odCwiaW5s
aW5lLXRlbXBsYXRlIikmJih0LmlubGluZVRlbXBsYXRlPSEwKX1mdW5jdGlvbiBLcih0KXt2YXIg
ZSxuLHIsaSxvLGEscyxjPXQuYXR0cnNMaXN0O2ZvcihlPTAsbj1jLmxlbmd0aDtlPG47ZSsrKWlm
KHI9aT1jW2VdLm5hbWUsbz1jW2VdLnZhbHVlLGFjLnRlc3QocikpaWYodC5oYXNCaW5kaW5ncz0h
MCxhPVdyKHIpLGEmJihyPXIucmVwbGFjZShmYywiIikpLGxjLnRlc3Qocikpcj1yLnJlcGxhY2Uo
bGMsIiIpLG89ZG4obykscz0hMSxhJiYoYS5wcm9wJiYocz0hMCwiaW5uZXJIdG1sIj09PShyPUhp
KHIpKSYmKHI9ImlubmVySFRNTCIpKSxhLmNhbWVsJiYocj1IaShyKSksYS5zeW5jJiZibih0LCJ1
cGRhdGU6IitIaShyKSx4bihvLCIkZXZlbnQiKSkpLHN8fCF0LmNvbXBvbmVudCYmV3ModC50YWcs
dC5hdHRyc01hcC50eXBlLHIpP3luKHQscixvKTpnbih0LHIsbyk7ZWxzZSBpZihvYy50ZXN0KHIp
KXI9ci5yZXBsYWNlKG9jLCIiKSxibih0LHIsbyxhLCExLEhzKTtlbHNle3I9ci5yZXBsYWNlKGFj
LCIiKTt2YXIgdT1yLm1hdGNoKHVjKSxsPXUmJnVbMV07bCYmKHI9ci5zbGljZSgwLC0obC5sZW5n
dGgrMSkpKSxfbih0LHIsaSxvLGwsYSl9ZWxzZXtnbih0LHIsSlNPTi5zdHJpbmdpZnkobykpfX1m
dW5jdGlvbiBxcih0KXtmb3IodmFyIGU9dDtlOyl7aWYodm9pZCAwIT09ZS5mb3IpcmV0dXJuITA7
ZT1lLnBhcmVudH1yZXR1cm4hMX1mdW5jdGlvbiBXcih0KXt2YXIgZT10Lm1hdGNoKGZjKTtpZihl
KXt2YXIgbj17fTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe25bdC5zbGljZSgxKV09ITB9
KSxufX1mdW5jdGlvbiBacih0KXtmb3IodmFyIGU9e30sbj0wLHI9dC5sZW5ndGg7bjxyO24rKyll
W3Rbbl0ubmFtZV09dFtuXS52YWx1ZTtyZXR1cm4gZX1mdW5jdGlvbiBHcih0KXtyZXR1cm4ic2Ny
aXB0Ij09PXQudGFnfHwic3R5bGUiPT09dC50YWd9ZnVuY3Rpb24gWHIodCl7cmV0dXJuInN0eWxl
Ij09PXQudGFnfHwic2NyaXB0Ij09PXQudGFnJiYoIXQuYXR0cnNNYXAudHlwZXx8InRleHQvamF2
YXNjcmlwdCI9PT10LmF0dHJzTWFwLnR5cGUpfWZ1bmN0aW9uIFlyKHQpe2Zvcih2YXIgZT1bXSxu
PTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ZGMudGVzdChyLm5hbWUpfHwoci5uYW1lPXIu
bmFtZS5yZXBsYWNlKGhjLCIiKSxlLnB1c2gocikpfXJldHVybiBlfWZ1bmN0aW9uIFFyKHQsZSl7
dCYmKEdzPXZjKGUuc3RhdGljS2V5c3x8IiIpLFhzPWUuaXNSZXNlcnZlZFRhZ3x8S2ksZWkodCks
bmkodCwhMSkpfWZ1bmN0aW9uIHRpKHQpe3JldHVybiBkKCJ0eXBlLHRhZyxhdHRyc0xpc3QsYXR0
cnNNYXAscGxhaW4scGFyZW50LGNoaWxkcmVuLGF0dHJzIisodD8iLCIrdDoiIikpfWZ1bmN0aW9u
IGVpKHQpe2lmKHQuc3RhdGljPXJpKHQpLDE9PT10LnR5cGUpe2lmKCFYcyh0LnRhZykmJiJzbG90
IiE9PXQudGFnJiZudWxsPT10LmF0dHJzTWFwWyJpbmxpbmUtdGVtcGxhdGUiXSlyZXR1cm47Zm9y
KHZhciBlPTAsbj10LmNoaWxkcmVuLmxlbmd0aDtlPG47ZSsrKXt2YXIgcj10LmNoaWxkcmVuW2Vd
O2VpKHIpLHIuc3RhdGljfHwodC5zdGF0aWM9ITEpfWlmKHQuaWZDb25kaXRpb25zKWZvcih2YXIg
aT0xLG89dC5pZkNvbmRpdGlvbnMubGVuZ3RoO2k8bztpKyspe3ZhciBhPXQuaWZDb25kaXRpb25z
W2ldLmJsb2NrO2VpKGEpLGEuc3RhdGljfHwodC5zdGF0aWM9ITEpfX19ZnVuY3Rpb24gbmkodCxl
KXtpZigxPT09dC50eXBlKXtpZigodC5zdGF0aWN8fHQub25jZSkmJih0LnN0YXRpY0luRm9yPWUp
LHQuc3RhdGljJiZ0LmNoaWxkcmVuLmxlbmd0aCYmKDEhPT10LmNoaWxkcmVuLmxlbmd0aHx8MyE9
PXQuY2hpbGRyZW5bMF0udHlwZSkpcmV0dXJuIHZvaWQodC5zdGF0aWNSb290PSEwKTtpZih0LnN0
YXRpY1Jvb3Q9ITEsdC5jaGlsZHJlbilmb3IodmFyIG49MCxyPXQuY2hpbGRyZW4ubGVuZ3RoO248
cjtuKyspbmkodC5jaGlsZHJlbltuXSxlfHwhIXQuZm9yKTtpZih0LmlmQ29uZGl0aW9ucylmb3Io
dmFyIGk9MSxvPXQuaWZDb25kaXRpb25zLmxlbmd0aDtpPG87aSsrKW5pKHQuaWZDb25kaXRpb25z
W2ldLmJsb2NrLGUpfX1mdW5jdGlvbiByaSh0KXtyZXR1cm4gMiE9PXQudHlwZSYmKDM9PT10LnR5
cGV8fCEoIXQucHJlJiYodC5oYXNCaW5kaW5nc3x8dC5pZnx8dC5mb3J8fERpKHQudGFnKXx8IVhz
KHQudGFnKXx8aWkodCl8fCFPYmplY3Qua2V5cyh0KS5ldmVyeShHcykpKSl9ZnVuY3Rpb24gaWko
dCl7Zm9yKDt0LnBhcmVudDspe2lmKHQ9dC5wYXJlbnQsInRlbXBsYXRlIiE9PXQudGFnKXJldHVy
biExO2lmKHQuZm9yKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIG9pKHQsZSxuKXt2YXIgcj1l
PyJuYXRpdmVPbjp7Ijoib246eyI7Zm9yKHZhciBpIGluIHQpe3IrPSciJytpKyciOicrYWkoaSx0
W2ldKSsiLCJ9cmV0dXJuIHIuc2xpY2UoMCwtMSkrIn0ifWZ1bmN0aW9uIGFpKHQsZSl7aWYoIWUp
cmV0dXJuImZ1bmN0aW9uKCl7fSI7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4iWyIrZS5tYXAo
ZnVuY3Rpb24oZSl7cmV0dXJuIGFpKHQsZSl9KS5qb2luKCIsIikrIl0iO3ZhciBuPXljLnRlc3Qo
ZS52YWx1ZSkscj1tYy50ZXN0KGUudmFsdWUpO2lmKGUubW9kaWZpZXJzKXt2YXIgaT0iIixvPSIi
LGE9W107Zm9yKHZhciBzIGluIGUubW9kaWZpZXJzKWJjW3NdPyhvKz1iY1tzXSxnY1tzXSYmYS5w
dXNoKHMpKTphLnB1c2gocyk7YS5sZW5ndGgmJihpKz1zaShhKSksbyYmKGkrPW8pO3JldHVybiJm
dW5jdGlvbigkZXZlbnQpeyIraSsobj9lLnZhbHVlKyIoJGV2ZW50KSI6cj8iKCIrZS52YWx1ZSsi
KSgkZXZlbnQpIjplLnZhbHVlKSsifSJ9cmV0dXJuIG58fHI/ZS52YWx1ZToiZnVuY3Rpb24oJGV2
ZW50KXsiK2UudmFsdWUrIn0ifWZ1bmN0aW9uIHNpKHQpe3JldHVybiJpZighKCdidXR0b24nIGlu
ICRldmVudCkmJiIrdC5tYXAoY2kpLmpvaW4oIiYmIikrIilyZXR1cm4gbnVsbDsifWZ1bmN0aW9u
IGNpKHQpe3ZhciBlPXBhcnNlSW50KHQsMTApO2lmKGUpcmV0dXJuIiRldmVudC5rZXlDb2RlIT09
IitlO3ZhciBuPWdjW3RdO3JldHVybiJfaygkZXZlbnQua2V5Q29kZSwiK0pTT04uc3RyaW5naWZ5
KHQpKyhuPyIsIitKU09OLnN0cmluZ2lmeShuKToiIikrIikifWZ1bmN0aW9uIHVpKHQsZSl7dC53
cmFwTGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3JldHVybiJfZygiK3QrIiwiK2UudmFsdWUrIikifX1m
dW5jdGlvbiBsaSh0LGUpe3Qud3JhcERhdGE9ZnVuY3Rpb24obil7cmV0dXJuIl9iKCIrbisiLCci
K3QudGFnKyInLCIrZS52YWx1ZSsiLCIrKGUubW9kaWZpZXJzJiZlLm1vZGlmaWVycy5wcm9wPyJ0
cnVlIjoiZmFsc2UiKSsoZS5tb2RpZmllcnMmJmUubW9kaWZpZXJzLnN5bmM/Iix0cnVlIjoiIikr
IikifX1mdW5jdGlvbiBmaSh0LGUpe3ZhciBuPW5ldyAkYyhlKTtyZXR1cm57cmVuZGVyOiJ3aXRo
KHRoaXMpe3JldHVybiAiKyh0P3BpKHQsbik6J19jKCJkaXYiKScpKyJ9IixzdGF0aWNSZW5kZXJG
bnM6bi5zdGF0aWNSZW5kZXJGbnN9fWZ1bmN0aW9uIHBpKHQsZSl7aWYodC5zdGF0aWNSb290JiYh
dC5zdGF0aWNQcm9jZXNzZWQpcmV0dXJuIGRpKHQsZSk7aWYodC5vbmNlJiYhdC5vbmNlUHJvY2Vz
c2VkKXJldHVybiBoaSh0LGUpO2lmKHQuZm9yJiYhdC5mb3JQcm9jZXNzZWQpcmV0dXJuIHlpKHQs
ZSk7aWYodC5pZiYmIXQuaWZQcm9jZXNzZWQpcmV0dXJuIHZpKHQsZSk7aWYoInRlbXBsYXRlIiE9
PXQudGFnfHx0LnNsb3RUYXJnZXQpe2lmKCJzbG90Ij09PXQudGFnKXJldHVybiBFaSh0LGUpO3Zh
ciBuO2lmKHQuY29tcG9uZW50KW49amkodC5jb21wb25lbnQsdCxlKTtlbHNle3ZhciByPXQucGxh
aW4/dm9pZCAwOmdpKHQsZSksaT10LmlubGluZVRlbXBsYXRlP251bGw6eGkodCxlLCEwKTtuPSJf
YygnIit0LnRhZysiJyIrKHI/IiwiK3I6IiIpKyhpPyIsIitpOiIiKSsiKSJ9Zm9yKHZhciBvPTA7
bzxlLnRyYW5zZm9ybXMubGVuZ3RoO28rKyluPWUudHJhbnNmb3Jtc1tvXSh0LG4pO3JldHVybiBu
fXJldHVybiB4aSh0LGUpfHwidm9pZCAwIn1mdW5jdGlvbiBkaSh0LGUpe3JldHVybiB0LnN0YXRp
Y1Byb2Nlc3NlZD0hMCxlLnN0YXRpY1JlbmRlckZucy5wdXNoKCJ3aXRoKHRoaXMpe3JldHVybiAi
K3BpKHQsZSkrIn0iKSwiX20oIisoZS5zdGF0aWNSZW5kZXJGbnMubGVuZ3RoLTEpKyh0LnN0YXRp
Y0luRm9yPyIsdHJ1ZSI6IiIpKyIpIn1mdW5jdGlvbiBoaSh0LGUpe2lmKHQub25jZVByb2Nlc3Nl
ZD0hMCx0LmlmJiYhdC5pZlByb2Nlc3NlZClyZXR1cm4gdmkodCxlKTtpZih0LnN0YXRpY0luRm9y
KXtmb3IodmFyIG49IiIscj10LnBhcmVudDtyOyl7aWYoci5mb3Ipe249ci5rZXk7YnJlYWt9cj1y
LnBhcmVudH1yZXR1cm4gbj8iX28oIitwaSh0LGUpKyIsIitlLm9uY2VJZCsrKyhuPyIsIituOiIi
KSsiKSI6cGkodCxlKX1yZXR1cm4gZGkodCxlKX1mdW5jdGlvbiB2aSh0LGUsbixyKXtyZXR1cm4g
dC5pZlByb2Nlc3NlZD0hMCxtaSh0LmlmQ29uZGl0aW9ucy5zbGljZSgpLGUsbixyKX1mdW5jdGlv
biBtaSh0LGUsbixyKXtmdW5jdGlvbiBpKHQpe3JldHVybiBuP24odCxlKTp0Lm9uY2U/aGkodCxl
KTpwaSh0LGUpfWlmKCF0Lmxlbmd0aClyZXR1cm4gcnx8Il9lKCkiO3ZhciBvPXQuc2hpZnQoKTty
ZXR1cm4gby5leHA/IigiK28uZXhwKyIpPyIraShvLmJsb2NrKSsiOiIrbWkodCxlLG4scik6IiIr
aShvLmJsb2NrKX1mdW5jdGlvbiB5aSh0LGUsbixyKXt2YXIgaT10LmZvcixvPXQuYWxpYXMsYT10
Lml0ZXJhdG9yMT8iLCIrdC5pdGVyYXRvcjE6IiIscz10Lml0ZXJhdG9yMj8iLCIrdC5pdGVyYXRv
cjI6IiI7cmV0dXJuIHQuZm9yUHJvY2Vzc2VkPSEwLChyfHwiX2wiKSsiKCgiK2krIiksZnVuY3Rp
b24oIitvK2ErcysiKXtyZXR1cm4gIisobnx8cGkpKHQsZSkrIn0pIn1mdW5jdGlvbiBnaSh0LGUp
e3ZhciBuPSJ7IixyPV9pKHQsZSk7ciYmKG4rPXIrIiwiKSx0LmtleSYmKG4rPSJrZXk6Iit0Lmtl
eSsiLCIpLHQucmVmJiYobis9InJlZjoiK3QucmVmKyIsIiksdC5yZWZJbkZvciYmKG4rPSJyZWZJ
bkZvcjp0cnVlLCIpLHQucHJlJiYobis9InByZTp0cnVlLCIpLHQuY29tcG9uZW50JiYobis9J3Rh
ZzoiJyt0LnRhZysnIiwnKTtmb3IodmFyIGk9MDtpPGUuZGF0YUdlbkZucy5sZW5ndGg7aSsrKW4r
PWUuZGF0YUdlbkZuc1tpXSh0KTtpZih0LmF0dHJzJiYobis9ImF0dHJzOnsiK05pKHQuYXR0cnMp
KyJ9LCIpLHQucHJvcHMmJihuKz0iZG9tUHJvcHM6eyIrTmkodC5wcm9wcykrIn0sIiksdC5ldmVu
dHMmJihuKz1vaSh0LmV2ZW50cywhMSxlLndhcm4pKyIsIiksdC5uYXRpdmVFdmVudHMmJihuKz1v
aSh0Lm5hdGl2ZUV2ZW50cywhMCxlLndhcm4pKyIsIiksdC5zbG90VGFyZ2V0JiYobis9InNsb3Q6
Iit0LnNsb3RUYXJnZXQrIiwiKSx0LnNjb3BlZFNsb3RzJiYobis9d2kodC5zY29wZWRTbG90cyxl
KSsiLCIpLHQubW9kZWwmJihuKz0ibW9kZWw6e3ZhbHVlOiIrdC5tb2RlbC52YWx1ZSsiLGNhbGxi
YWNrOiIrdC5tb2RlbC5jYWxsYmFjaysiLGV4cHJlc3Npb246Iit0Lm1vZGVsLmV4cHJlc3Npb24r
In0sIiksdC5pbmxpbmVUZW1wbGF0ZSl7dmFyIG89YmkodCxlKTtvJiYobis9bysiLCIpfXJldHVy
biBuPW4ucmVwbGFjZSgvLCQvLCIiKSsifSIsdC53cmFwRGF0YSYmKG49dC53cmFwRGF0YShuKSks
dC53cmFwTGlzdGVuZXJzJiYobj10LndyYXBMaXN0ZW5lcnMobikpLG59ZnVuY3Rpb24gX2kodCxl
KXt2YXIgbj10LmRpcmVjdGl2ZXM7aWYobil7dmFyIHIsaSxvLGEscz0iZGlyZWN0aXZlczpbIixj
PSExO2ZvcihyPTAsaT1uLmxlbmd0aDtyPGk7cisrKXtvPW5bcl0sYT0hMDt2YXIgdT1lLmRpcmVj
dGl2ZXNbby5uYW1lXTt1JiYoYT0hIXUodCxvLGUud2FybikpLGEmJihjPSEwLHMrPSd7bmFtZToi
JytvLm5hbWUrJyIscmF3TmFtZToiJytvLnJhd05hbWUrJyInKyhvLnZhbHVlPyIsdmFsdWU6KCIr
by52YWx1ZSsiKSxleHByZXNzaW9uOiIrSlNPTi5zdHJpbmdpZnkoby52YWx1ZSk6IiIpKyhvLmFy
Zz8nLGFyZzoiJytvLmFyZysnIic6IiIpKyhvLm1vZGlmaWVycz8iLG1vZGlmaWVyczoiK0pTT04u
c3RyaW5naWZ5KG8ubW9kaWZpZXJzKToiIikrIn0sIil9cmV0dXJuIGM/cy5zbGljZSgwLC0xKSsi
XSI6dm9pZCAwfX1mdW5jdGlvbiBiaSh0LGUpe3ZhciBuPXQuY2hpbGRyZW5bMF07aWYoMT09PW4u
dHlwZSl7dmFyIHI9ZmkobixlLm9wdGlvbnMpO3JldHVybiJpbmxpbmVUZW1wbGF0ZTp7cmVuZGVy
OmZ1bmN0aW9uKCl7IityLnJlbmRlcisifSxzdGF0aWNSZW5kZXJGbnM6WyIrci5zdGF0aWNSZW5k
ZXJGbnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbigpeyIrdCsifSJ9KS5qb2luKCIs
IikrIl19In19ZnVuY3Rpb24gd2kodCxlKXtyZXR1cm4ic2NvcGVkU2xvdHM6X3UoWyIrT2JqZWN0
LmtleXModCkubWFwKGZ1bmN0aW9uKG4pe3JldHVybiAkaShuLHRbbl0sZSl9KS5qb2luKCIsIikr
Il0pIn1mdW5jdGlvbiAkaSh0LGUsbil7cmV0dXJuIGUuZm9yJiYhZS5mb3JQcm9jZXNzZWQ/Q2ko
dCxlLG4pOiJ7a2V5OiIrdCsiLGZuOmZ1bmN0aW9uKCIrU3RyaW5nKGUuYXR0cnNNYXAuc2NvcGUp
KyIpe3JldHVybiAiKygidGVtcGxhdGUiPT09ZS50YWc/eGkoZSxuKXx8InZvaWQgMCI6cGkoZSxu
KSkrIn19In1mdW5jdGlvbiBDaSh0LGUsbil7dmFyIHI9ZS5mb3IsaT1lLmFsaWFzLG89ZS5pdGVy
YXRvcjE/IiwiK2UuaXRlcmF0b3IxOiIiLGE9ZS5pdGVyYXRvcjI/IiwiK2UuaXRlcmF0b3IyOiIi
O3JldHVybiBlLmZvclByb2Nlc3NlZD0hMCwiX2woKCIrcisiKSxmdW5jdGlvbigiK2krbythKyIp
e3JldHVybiAiKyRpKHQsZSxuKSsifSkifWZ1bmN0aW9uIHhpKHQsZSxuLHIsaSl7dmFyIG89dC5j
aGlsZHJlbjtpZihvLmxlbmd0aCl7dmFyIGE9b1swXTtpZigxPT09by5sZW5ndGgmJmEuZm9yJiYi
dGVtcGxhdGUiIT09YS50YWcmJiJzbG90IiE9PWEudGFnKXJldHVybihyfHxwaSkoYSxlKTt2YXIg
cz1uP0FpKG8sZS5tYXliZUNvbXBvbmVudCk6MCxjPWl8fE9pO3JldHVybiJbIitvLm1hcChmdW5j
dGlvbih0KXtyZXR1cm4gYyh0LGUpfSkuam9pbigiLCIpKyJdIisocz8iLCIrczoiIil9fWZ1bmN0
aW9uIEFpKHQsZSl7Zm9yKHZhciBuPTAscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgaT10W3JdO2lm
KDE9PT1pLnR5cGUpe2lmKGtpKGkpfHxpLmlmQ29uZGl0aW9ucyYmaS5pZkNvbmRpdGlvbnMuc29t
ZShmdW5jdGlvbih0KXtyZXR1cm4ga2kodC5ibG9jayl9KSl7bj0yO2JyZWFrfShlKGkpfHxpLmlm
Q29uZGl0aW9ucyYmaS5pZkNvbmRpdGlvbnMuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gZSh0LmJs
b2NrKX0pKSYmKG49MSl9fXJldHVybiBufWZ1bmN0aW9uIGtpKHQpe3JldHVybiB2b2lkIDAhPT10
LmZvcnx8InRlbXBsYXRlIj09PXQudGFnfHwic2xvdCI9PT10LnRhZ31mdW5jdGlvbiBPaSh0LGUp
e3JldHVybiAxPT09dC50eXBlP3BpKHQsZSk6Mz09PXQudHlwZSYmdC5pc0NvbW1lbnQ/VGkodCk6
U2kodCl9ZnVuY3Rpb24gU2kodCl7cmV0dXJuIl92KCIrKDI9PT10LnR5cGU/dC5leHByZXNzaW9u
OkxpKEpTT04uc3RyaW5naWZ5KHQudGV4dCkpKSsiKSJ9ZnVuY3Rpb24gVGkodCl7cmV0dXJuIl9l
KCIrSlNPTi5zdHJpbmdpZnkodC50ZXh0KSsiKSJ9ZnVuY3Rpb24gRWkodCxlKXt2YXIgbj10LnNs
b3ROYW1lfHwnImRlZmF1bHQiJyxyPXhpKHQsZSksaT0iX3QoIituKyhyPyIsIityOiIiKSxvPXQu
YXR0cnMmJiJ7Iit0LmF0dHJzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gSGkodC5uYW1lKSsiOiIr
dC52YWx1ZX0pLmpvaW4oIiwiKSsifSIsYT10LmF0dHJzTWFwWyJ2LWJpbmQiXTtyZXR1cm4hbyYm
IWF8fHJ8fChpKz0iLG51bGwiKSxvJiYoaSs9IiwiK28pLGEmJihpKz0obz8iIjoiLG51bGwiKSsi
LCIrYSksaSsiKSJ9ZnVuY3Rpb24gamkodCxlLG4pe3ZhciByPWUuaW5saW5lVGVtcGxhdGU/bnVs
bDp4aShlLG4sITApO3JldHVybiJfYygiK3QrIiwiK2dpKGUsbikrKHI/IiwiK3I6IiIpKyIpIn1m
dW5jdGlvbiBOaSh0KXtmb3IodmFyIGU9IiIsbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25d
O2UrPSciJytyLm5hbWUrJyI6JytMaShyLnZhbHVlKSsiLCJ9cmV0dXJuIGUuc2xpY2UoMCwtMSl9
ZnVuY3Rpb24gTGkodCl7cmV0dXJuIHQucmVwbGFjZSgvXHUyMDI4L2csIlxcdTIwMjgiKS5yZXBs
YWNlKC9cdTIwMjkvZywiXFx1MjAyOSIpfWZ1bmN0aW9uIE1pKHQsZSl7dHJ5e3JldHVybiBuZXcg
RnVuY3Rpb24odCl9Y2F0Y2gobil7cmV0dXJuIGUucHVzaCh7ZXJyOm4sY29kZTp0fSksd319ZnVu
Y3Rpb24gSWkodCl7dmFyIGU9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gZnVuY3Rpb24obixy
LGkpe3I9cnx8e307dmFyIG89ci5kZWxpbWl0ZXJzP1N0cmluZyhyLmRlbGltaXRlcnMpK246bjtp
ZihlW29dKXJldHVybiBlW29dO3ZhciBhPXQobixyKSxzPXt9LGM9W107cmV0dXJuIHMucmVuZGVy
PU1pKGEucmVuZGVyLGMpLHMuc3RhdGljUmVuZGVyRm5zPWEuc3RhdGljUmVuZGVyRm5zLm1hcChm
dW5jdGlvbih0KXtyZXR1cm4gTWkodCxjKX0pLGVbb109c319ZnVuY3Rpb24gUGkodCl7aWYodC5v
dXRlckhUTUwpcmV0dXJuIHQub3V0ZXJIVE1MO3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImRpdiIpO3JldHVybiBlLmFwcGVuZENoaWxkKHQuY2xvbmVOb2RlKCEwKSksZS5pbm5lckhUTUx9
dmFyIFJpPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsRGk9ZCgic2xvdCxjb21wb25lbnQiLCEw
KSxGaT1kKCJrZXkscmVmLHNsb3QsaXMiKSxCaT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3Bl
cnR5LFVpPS8tKFx3KS9nLEhpPW0oZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZShVaSxmdW5j
dGlvbih0LGUpe3JldHVybiBlP2UudG9VcHBlckNhc2UoKToiIn0pfSksVmk9bShmdW5jdGlvbih0
KXtyZXR1cm4gdC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpfSksemk9LyhbXi1d
KShbQS1aXSkvZyxKaT1tKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoemksIiQxLSQyIiku
cmVwbGFjZSh6aSwiJDEtJDIiKS50b0xvd2VyQ2FzZSgpfSksS2k9ZnVuY3Rpb24odCxlLG4pe3Jl
dHVybiExfSxxaT1mdW5jdGlvbih0KXtyZXR1cm4gdH0sV2k9ImRhdGEtc2VydmVyLXJlbmRlcmVk
IixaaT1bImNvbXBvbmVudCIsImRpcmVjdGl2ZSIsImZpbHRlciJdLEdpPVsiYmVmb3JlQ3JlYXRl
IiwiY3JlYXRlZCIsImJlZm9yZU1vdW50IiwibW91bnRlZCIsImJlZm9yZVVwZGF0ZSIsInVwZGF0
ZWQiLCJiZWZvcmVEZXN0cm95IiwiZGVzdHJveWVkIiwiYWN0aXZhdGVkIiwiZGVhY3RpdmF0ZWQi
XSxYaT17b3B0aW9uTWVyZ2VTdHJhdGVnaWVzOk9iamVjdC5jcmVhdGUobnVsbCksc2lsZW50OiEx
LHByb2R1Y3Rpb25UaXA6ITEsZGV2dG9vbHM6ITEscGVyZm9ybWFuY2U6ITEsZXJyb3JIYW5kbGVy
Om51bGwsd2FybkhhbmRsZXI6bnVsbCxpZ25vcmVkRWxlbWVudHM6W10sa2V5Q29kZXM6T2JqZWN0
LmNyZWF0ZShudWxsKSxpc1Jlc2VydmVkVGFnOktpLGlzUmVzZXJ2ZWRBdHRyOktpLGlzVW5rbm93
bkVsZW1lbnQ6S2ksZ2V0VGFnTmFtZXNwYWNlOncscGFyc2VQbGF0Zm9ybVRhZ05hbWU6cWksbXVz
dFVzZVByb3A6S2ksX2xpZmVjeWNsZUhvb2tzOkdpfSxZaT1PYmplY3QuZnJlZXplKHt9KSxRaT0v
W15cdy4kXS8sdG89dyxlbz0iX19wcm90b19fImlue30sbm89InVuZGVmaW5lZCIhPXR5cGVvZiB3
aW5kb3cscm89bm8mJndpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCksaW89
cm8mJi9tc2llfHRyaWRlbnQvLnRlc3Qocm8pLG9vPXJvJiZyby5pbmRleE9mKCJtc2llIDkuMCIp
PjAsYW89cm8mJnJvLmluZGV4T2YoImVkZ2UvIik+MCxzbz1ybyYmcm8uaW5kZXhPZigiYW5kcm9p
ZCIpPjAsY289cm8mJi9pcGhvbmV8aXBhZHxpcG9kfGlvcy8udGVzdChybyksdW89cm8mJi9jaHJv
bWVcL1xkKy8udGVzdChybykmJiFhbyxsbz17fS53YXRjaCxmbz0hMTtpZihubyl0cnl7dmFyIHBv
PXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShwbywicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe2Zv
PSEwfX0pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0LXBhc3NpdmUiLG51bGwscG8pfWNh
dGNoKHQpe312YXIgaG8sdm8sbW89ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09aG8mJihobz0h
bm8mJnZvaWQgMCE9PXQmJiJzZXJ2ZXIiPT09dC5wcm9jZXNzLmVudi5WVUVfRU5WKSxob30seW89
bm8mJndpbmRvdy5fX1ZVRV9ERVZUT09MU19HTE9CQUxfSE9PS19fLGdvPSJ1bmRlZmluZWQiIT10
eXBlb2YgU3ltYm9sJiZUKFN5bWJvbCkmJiJ1bmRlZmluZWQiIT10eXBlb2YgUmVmbGVjdCYmVChS
ZWZsZWN0Lm93bktleXMpLF9vPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3I9ITE7dmFyIHQ9bi5z
bGljZSgwKTtuLmxlbmd0aD0wO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0oKX12YXIg
ZSxuPVtdLHI9ITE7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBQcm9taXNlJiZUKFByb21pc2UpKXt2
YXIgaT1Qcm9taXNlLnJlc29sdmUoKSxvPWZ1bmN0aW9uKHQpe2NvbnNvbGUuZXJyb3IodCl9O2U9
ZnVuY3Rpb24oKXtpLnRoZW4odCkuY2F0Y2gobyksY28mJnNldFRpbWVvdXQodyl9fWVsc2UgaWYo
InVuZGVmaW5lZCI9PXR5cGVvZiBNdXRhdGlvbk9ic2VydmVyfHwhVChNdXRhdGlvbk9ic2VydmVy
KSYmIltvYmplY3QgTXV0YXRpb25PYnNlcnZlckNvbnN0cnVjdG9yXSIhPT1NdXRhdGlvbk9ic2Vy
dmVyLnRvU3RyaW5nKCkpZT1mdW5jdGlvbigpe3NldFRpbWVvdXQodCwwKX07ZWxzZXt2YXIgYT0x
LHM9bmV3IE11dGF0aW9uT2JzZXJ2ZXIodCksYz1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShTdHJp
bmcoYSkpO3Mub2JzZXJ2ZShjLHtjaGFyYWN0ZXJEYXRhOiEwfSksZT1mdW5jdGlvbigpe2E9KGEr
MSklMixjLmRhdGE9U3RyaW5nKGEpfX1yZXR1cm4gZnVuY3Rpb24odCxpKXt2YXIgbztpZihuLnB1
c2goZnVuY3Rpb24oKXtpZih0KXRyeXt0LmNhbGwoaSl9Y2F0Y2godCl7Uyh0LGksIm5leHRUaWNr
Iil9ZWxzZSBvJiZvKGkpfSkscnx8KHI9ITAsZSgpKSwhdCYmInVuZGVmaW5lZCIhPXR5cGVvZiBQ
cm9taXNlKXJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0LGUpe289dH0pfX0oKTt2bz0idW5k
ZWZpbmVkIiE9dHlwZW9mIFNldCYmVChTZXQpP1NldDpmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0
aGlzLnNldD1PYmplY3QuY3JlYXRlKG51bGwpfXJldHVybiB0LnByb3RvdHlwZS5oYXM9ZnVuY3Rp
b24odCl7cmV0dXJuITA9PT10aGlzLnNldFt0XX0sdC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQp
e3RoaXMuc2V0W3RdPSEwfSx0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuc2V0PU9i
amVjdC5jcmVhdGUobnVsbCl9LHR9KCk7dmFyIGJvPTAsd289ZnVuY3Rpb24oKXt0aGlzLmlkPWJv
KyssdGhpcy5zdWJzPVtdfTt3by5wcm90b3R5cGUuYWRkU3ViPWZ1bmN0aW9uKHQpe3RoaXMuc3Vi
cy5wdXNoKHQpfSx3by5wcm90b3R5cGUucmVtb3ZlU3ViPWZ1bmN0aW9uKHQpe2godGhpcy5zdWJz
LHQpfSx3by5wcm90b3R5cGUuZGVwZW5kPWZ1bmN0aW9uKCl7d28udGFyZ2V0JiZ3by50YXJnZXQu
YWRkRGVwKHRoaXMpfSx3by5wcm90b3R5cGUubm90aWZ5PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRo
aXMuc3Vicy5zbGljZSgpLGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspdFtlXS51cGRhdGUoKX0sd28u
dGFyZ2V0PW51bGw7dmFyICRvPVtdLENvPUFycmF5LnByb3RvdHlwZSx4bz1PYmplY3QuY3JlYXRl
KENvKTtbInB1c2giLCJwb3AiLCJzaGlmdCIsInVuc2hpZnQiLCJzcGxpY2UiLCJzb3J0IiwicmV2
ZXJzZSJdLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9Q29bdF07ayh4byx0LGZ1bmN0aW9uKCl7
Zm9yKHZhciBuPVtdLHI9YXJndW1lbnRzLmxlbmd0aDtyLS07KW5bcl09YXJndW1lbnRzW3JdO3Zh
ciBpLG89ZS5hcHBseSh0aGlzLG4pLGE9dGhpcy5fX29iX187c3dpdGNoKHQpe2Nhc2UicHVzaCI6
Y2FzZSJ1bnNoaWZ0IjppPW47YnJlYWs7Y2FzZSJzcGxpY2UiOmk9bi5zbGljZSgyKX1yZXR1cm4g
aSYmYS5vYnNlcnZlQXJyYXkoaSksYS5kZXAubm90aWZ5KCksb30pfSk7dmFyIEFvPU9iamVjdC5n
ZXRPd25Qcm9wZXJ0eU5hbWVzKHhvKSxrbz17c2hvdWxkQ29udmVydDohMH0sT289ZnVuY3Rpb24o
dCl7aWYodGhpcy52YWx1ZT10LHRoaXMuZGVwPW5ldyB3byx0aGlzLnZtQ291bnQ9MCxrKHQsIl9f
b2JfXyIsdGhpcyksQXJyYXkuaXNBcnJheSh0KSl7KGVvP046TCkodCx4byxBbyksdGhpcy5vYnNl
cnZlQXJyYXkodCl9ZWxzZSB0aGlzLndhbGsodCl9O09vLnByb3RvdHlwZS53YWxrPWZ1bmN0aW9u
KHQpe2Zvcih2YXIgZT1PYmplY3Qua2V5cyh0KSxuPTA7bjxlLmxlbmd0aDtuKyspSSh0LGVbbl0s
dFtlW25dXSl9LE9vLnByb3RvdHlwZS5vYnNlcnZlQXJyYXk9ZnVuY3Rpb24odCl7Zm9yKHZhciBl
PTAsbj10Lmxlbmd0aDtlPG47ZSsrKU0odFtlXSl9O3ZhciBTbz1YaS5vcHRpb25NZXJnZVN0cmF0
ZWdpZXM7U28uZGF0YT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIG4/Qih0LGUsbik6ZSYmImZ1bmN0
aW9uIiE9dHlwZW9mIGU/dDpCLmNhbGwodGhpcyx0LGUpfSxHaS5mb3JFYWNoKGZ1bmN0aW9uKHQp
e1NvW3RdPVV9KSxaaS5mb3JFYWNoKGZ1bmN0aW9uKHQpe1NvW3QrInMiXT1IfSksU28ud2F0Y2g9
ZnVuY3Rpb24odCxlKXtpZih0PT09bG8mJih0PXZvaWQgMCksZT09PWxvJiYoZT12b2lkIDApLCFl
KXJldHVybiBPYmplY3QuY3JlYXRlKHR8fG51bGwpO2lmKCF0KXJldHVybiBlO3ZhciBuPXt9O18o
bix0KTtmb3IodmFyIHIgaW4gZSl7dmFyIGk9bltyXSxvPWVbcl07aSYmIUFycmF5LmlzQXJyYXko
aSkmJihpPVtpXSksbltyXT1pP2kuY29uY2F0KG8pOkFycmF5LmlzQXJyYXkobyk/bzpbb119cmV0
dXJuIG59LFNvLnByb3BzPVNvLm1ldGhvZHM9U28uaW5qZWN0PVNvLmNvbXB1dGVkPWZ1bmN0aW9u
KHQsZSl7aWYoIXQpcmV0dXJuIGU7dmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gXyhu
LHQpLGUmJl8obixlKSxufSxTby5wcm92aWRlPUI7dmFyIFRvPWZ1bmN0aW9uKHQsZSl7cmV0dXJu
IHZvaWQgMD09PWU/dDplfSxFbz1mdW5jdGlvbih0LGUsbixyLGksbyxhLHMpe3RoaXMudGFnPXQs
dGhpcy5kYXRhPWUsdGhpcy5jaGlsZHJlbj1uLHRoaXMudGV4dD1yLHRoaXMuZWxtPWksdGhpcy5u
cz12b2lkIDAsdGhpcy5jb250ZXh0PW8sdGhpcy5mdW5jdGlvbmFsQ29udGV4dD12b2lkIDAsdGhp
cy5rZXk9ZSYmZS5rZXksdGhpcy5jb21wb25lbnRPcHRpb25zPWEsdGhpcy5jb21wb25lbnRJbnN0
YW5jZT12b2lkIDAsdGhpcy5wYXJlbnQ9dm9pZCAwLHRoaXMucmF3PSExLHRoaXMuaXNTdGF0aWM9
ITEsdGhpcy5pc1Jvb3RJbnNlcnQ9ITAsdGhpcy5pc0NvbW1lbnQ9ITEsdGhpcy5pc0Nsb25lZD0h
MSx0aGlzLmlzT25jZT0hMSx0aGlzLmFzeW5jRmFjdG9yeT1zLHRoaXMuYXN5bmNNZXRhPXZvaWQg
MCx0aGlzLmlzQXN5bmNQbGFjZWhvbGRlcj0hMX0sam89e2NoaWxkOnt9fTtqby5jaGlsZC5nZXQ9
ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb21wb25lbnRJbnN0YW5jZX0sT2JqZWN0LmRlZmluZVBy
b3BlcnRpZXMoRW8ucHJvdG90eXBlLGpvKTt2YXIgTm8sTG89ZnVuY3Rpb24odCl7dm9pZCAwPT09
dCYmKHQ9IiIpO3ZhciBlPW5ldyBFbztyZXR1cm4gZS50ZXh0PXQsZS5pc0NvbW1lbnQ9ITAsZX0s
TW89bShmdW5jdGlvbih0KXt2YXIgZT0iJiI9PT10LmNoYXJBdCgwKTt0PWU/dC5zbGljZSgxKTp0
O3ZhciBuPSJ+Ij09PXQuY2hhckF0KDApO3Q9bj90LnNsaWNlKDEpOnQ7dmFyIHI9IiEiPT09dC5j
aGFyQXQoMCk7cmV0dXJuIHQ9cj90LnNsaWNlKDEpOnQse25hbWU6dCxvbmNlOm4sY2FwdHVyZTpy
LHBhc3NpdmU6ZX19KSxJbz1udWxsLFBvPVtdLFJvPVtdLERvPXt9LEZvPSExLEJvPSExLFVvPTAs
SG89MCxWbz1mdW5jdGlvbih0LGUsbixyKXt0aGlzLnZtPXQsdC5fd2F0Y2hlcnMucHVzaCh0aGlz
KSxyPyh0aGlzLmRlZXA9ISFyLmRlZXAsdGhpcy51c2VyPSEhci51c2VyLHRoaXMubGF6eT0hIXIu
bGF6eSx0aGlzLnN5bmM9ISFyLnN5bmMpOnRoaXMuZGVlcD10aGlzLnVzZXI9dGhpcy5sYXp5PXRo
aXMuc3luYz0hMSx0aGlzLmNiPW4sdGhpcy5pZD0rK0hvLHRoaXMuYWN0aXZlPSEwLHRoaXMuZGly
dHk9dGhpcy5sYXp5LHRoaXMuZGVwcz1bXSx0aGlzLm5ld0RlcHM9W10sdGhpcy5kZXBJZHM9bmV3
IHZvLHRoaXMubmV3RGVwSWRzPW5ldyB2byx0aGlzLmV4cHJlc3Npb249IiIsImZ1bmN0aW9uIj09
dHlwZW9mIGU/dGhpcy5nZXR0ZXI9ZToodGhpcy5nZXR0ZXI9TyhlKSx0aGlzLmdldHRlcnx8KHRo
aXMuZ2V0dGVyPWZ1bmN0aW9uKCl7fSkpLHRoaXMudmFsdWU9dGhpcy5sYXp5P3ZvaWQgMDp0aGlz
LmdldCgpfTtWby5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7RSh0aGlzKTt2YXIgdCxlPXRoaXMu
dm07dHJ5e3Q9dGhpcy5nZXR0ZXIuY2FsbChlLGUpfWNhdGNoKHQpe2lmKCF0aGlzLnVzZXIpdGhy
b3cgdDtTKHQsZSwnZ2V0dGVyIGZvciB3YXRjaGVyICInK3RoaXMuZXhwcmVzc2lvbisnIicpfWZp
bmFsbHl7dGhpcy5kZWVwJiZNdCh0KSxqKCksdGhpcy5jbGVhbnVwRGVwcygpfXJldHVybiB0fSxW
by5wcm90b3R5cGUuYWRkRGVwPWZ1bmN0aW9uKHQpe3ZhciBlPXQuaWQ7dGhpcy5uZXdEZXBJZHMu
aGFzKGUpfHwodGhpcy5uZXdEZXBJZHMuYWRkKGUpLHRoaXMubmV3RGVwcy5wdXNoKHQpLHRoaXMu
ZGVwSWRzLmhhcyhlKXx8dC5hZGRTdWIodGhpcykpfSxWby5wcm90b3R5cGUuY2xlYW51cERlcHM9
ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPXRoaXMuZGVwcy5sZW5ndGg7ZS0tOyl7dmFyIG49
dC5kZXBzW2VdO3QubmV3RGVwSWRzLmhhcyhuLmlkKXx8bi5yZW1vdmVTdWIodCl9dmFyIHI9dGhp
cy5kZXBJZHM7dGhpcy5kZXBJZHM9dGhpcy5uZXdEZXBJZHMsdGhpcy5uZXdEZXBJZHM9cix0aGlz
Lm5ld0RlcElkcy5jbGVhcigpLHI9dGhpcy5kZXBzLHRoaXMuZGVwcz10aGlzLm5ld0RlcHMsdGhp
cy5uZXdEZXBzPXIsdGhpcy5uZXdEZXBzLmxlbmd0aD0wfSxWby5wcm90b3R5cGUudXBkYXRlPWZ1
bmN0aW9uKCl7dGhpcy5sYXp5P3RoaXMuZGlydHk9ITA6dGhpcy5zeW5jP3RoaXMucnVuKCk6THQo
dGhpcyl9LFZvLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXtpZih0aGlzLmFjdGl2ZSl7dmFyIHQ9
dGhpcy5nZXQoKTtpZih0IT09dGhpcy52YWx1ZXx8cyh0KXx8dGhpcy5kZWVwKXt2YXIgZT10aGlz
LnZhbHVlO2lmKHRoaXMudmFsdWU9dCx0aGlzLnVzZXIpdHJ5e3RoaXMuY2IuY2FsbCh0aGlzLnZt
LHQsZSl9Y2F0Y2godCl7Uyh0LHRoaXMudm0sJ2NhbGxiYWNrIGZvciB3YXRjaGVyICInK3RoaXMu
ZXhwcmVzc2lvbisnIicpfWVsc2UgdGhpcy5jYi5jYWxsKHRoaXMudm0sdCxlKX19fSxWby5wcm90
b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oKXt0aGlzLnZhbHVlPXRoaXMuZ2V0KCksdGhpcy5kaXJ0
eT0hMX0sVm8ucHJvdG90eXBlLmRlcGVuZD1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9dGhp
cy5kZXBzLmxlbmd0aDtlLS07KXQuZGVwc1tlXS5kZXBlbmQoKX0sVm8ucHJvdG90eXBlLnRlYXJk
b3duPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZih0aGlzLmFjdGl2ZSl7dGhpcy52bS5faXNCZWlu
Z0Rlc3Ryb3llZHx8aCh0aGlzLnZtLl93YXRjaGVycyx0aGlzKTtmb3IodmFyIGU9dGhpcy5kZXBz
Lmxlbmd0aDtlLS07KXQuZGVwc1tlXS5yZW1vdmVTdWIodCk7dGhpcy5hY3RpdmU9ITF9fTt2YXIg
em89bmV3IHZvLEpvPXtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6dyxzZXQ6d30s
S289e2xhenk6ITB9LHFvPXtpbml0OmZ1bmN0aW9uKHQsZSxuLHIpe2lmKCF0LmNvbXBvbmVudElu
c3RhbmNlfHx0LmNvbXBvbmVudEluc3RhbmNlLl9pc0Rlc3Ryb3llZCl7KHQuY29tcG9uZW50SW5z
dGFuY2U9UXQodCxJbyxuLHIpKS4kbW91bnQoZT90LmVsbTp2b2lkIDAsZSl9ZWxzZSBpZih0LmRh
dGEua2VlcEFsaXZlKXt2YXIgaT10O3FvLnByZXBhdGNoKGksaSl9fSxwcmVwYXRjaDpmdW5jdGlv
bih0LGUpe3ZhciBuPWUuY29tcG9uZW50T3B0aW9ucztDdChlLmNvbXBvbmVudEluc3RhbmNlPXQu
Y29tcG9uZW50SW5zdGFuY2Usbi5wcm9wc0RhdGEsbi5saXN0ZW5lcnMsZSxuLmNoaWxkcmVuKX0s
aW5zZXJ0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuY29udGV4dCxuPXQuY29tcG9uZW50SW5zdGFuY2U7
bi5faXNNb3VudGVkfHwobi5faXNNb3VudGVkPSEwLE90KG4sIm1vdW50ZWQiKSksdC5kYXRhLmtl
ZXBBbGl2ZSYmKGUuX2lzTW91bnRlZD9qdChuKTpBdChuLCEwKSl9LGRlc3Ryb3k6ZnVuY3Rpb24o
dCl7dmFyIGU9dC5jb21wb25lbnRJbnN0YW5jZTtlLl9pc0Rlc3Ryb3llZHx8KHQuZGF0YS5rZWVw
QWxpdmU/a3QoZSwhMCk6ZS4kZGVzdHJveSgpKX19LFdvPU9iamVjdC5rZXlzKHFvKSxabz0xLEdv
PTIsWG89MDshZnVuY3Rpb24odCl7dC5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24odCl7dmFyIGU9
dGhpcztlLl91aWQ9WG8rKyxlLl9pc1Z1ZT0hMCx0JiZ0Ll9pc0NvbXBvbmVudD95ZShlLHQpOmUu
JG9wdGlvbnM9SyhnZShlLmNvbnN0cnVjdG9yKSx0fHx7fSxlKSxlLl9yZW5kZXJQcm94eT1lLGUu
X3NlbGY9ZSx3dChlKSxodChlKSxtZShlKSxPdChlLCJiZWZvcmVDcmVhdGUiKSxXdChlKSxSdChl
KSxxdChlKSxPdChlLCJjcmVhdGVkIiksZS4kb3B0aW9ucy5lbCYmZS4kbW91bnQoZS4kb3B0aW9u
cy5lbCl9fSh3ZSksZnVuY3Rpb24odCl7dmFyIGU9e307ZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4g
dGhpcy5fZGF0YX07dmFyIG49e307bi5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJvcHN9
LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiJGRhdGEiLGUpLE9iamVjdC5kZWZp
bmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiJHByb3BzIixuKSx0LnByb3RvdHlwZS4kc2V0PVAsdC5w
cm90b3R5cGUuJGRlbGV0ZT1SLHQucHJvdG90eXBlLiR3YXRjaD1mdW5jdGlvbih0LGUsbil7dmFy
IHI9dGhpcztpZihjKGUpKXJldHVybiBLdChyLHQsZSxuKTtuPW58fHt9LG4udXNlcj0hMDt2YXIg
aT1uZXcgVm8ocix0LGUsbik7cmV0dXJuIG4uaW1tZWRpYXRlJiZlLmNhbGwocixpLnZhbHVlKSxm
dW5jdGlvbigpe2kudGVhcmRvd24oKX19fSh3ZSksZnVuY3Rpb24odCl7dmFyIGU9L15ob29rOi87
dC5wcm90b3R5cGUuJG9uPWZ1bmN0aW9uKHQsbil7dmFyIHI9dGhpcyxpPXRoaXM7aWYoQXJyYXku
aXNBcnJheSh0KSlmb3IodmFyIG89MCxhPXQubGVuZ3RoO288YTtvKyspci4kb24odFtvXSxuKTtl
bHNlKGkuX2V2ZW50c1t0XXx8KGkuX2V2ZW50c1t0XT1bXSkpLnB1c2gobiksZS50ZXN0KHQpJiYo
aS5faGFzSG9va0V2ZW50PSEwKTtyZXR1cm4gaX0sdC5wcm90b3R5cGUuJG9uY2U9ZnVuY3Rpb24o
dCxlKXtmdW5jdGlvbiBuKCl7ci4kb2ZmKHQsbiksZS5hcHBseShyLGFyZ3VtZW50cyl9dmFyIHI9
dGhpcztyZXR1cm4gbi5mbj1lLHIuJG9uKHQsbikscn0sdC5wcm90b3R5cGUuJG9mZj1mdW5jdGlv
bih0LGUpe3ZhciBuPXRoaXMscj10aGlzO2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiByLl9l
dmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSxyO2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIg
aT0wLG89dC5sZW5ndGg7aTxvO2krKyluLiRvZmYodFtpXSxlKTtyZXR1cm4gcn12YXIgYT1yLl9l
dmVudHNbdF07aWYoIWEpcmV0dXJuIHI7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHIu
X2V2ZW50c1t0XT1udWxsLHI7Zm9yKHZhciBzLGM9YS5sZW5ndGg7Yy0tOylpZigocz1hW2NdKT09
PWV8fHMuZm49PT1lKXthLnNwbGljZShjLDEpO2JyZWFrfXJldHVybiByfSx0LnByb3RvdHlwZS4k
ZW1pdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49ZS5fZXZlbnRzW3RdO2lmKG4pe249bi5sZW5n
dGg+MT9nKG4pOm47Zm9yKHZhciByPWcoYXJndW1lbnRzLDEpLGk9MCxvPW4ubGVuZ3RoO2k8bztp
KyspdHJ5e25baV0uYXBwbHkoZSxyKX1jYXRjaChuKXtTKG4sZSwnZXZlbnQgaGFuZGxlciBmb3Ig
IicrdCsnIicpfX1yZXR1cm4gZX19KHdlKSxmdW5jdGlvbih0KXt0LnByb3RvdHlwZS5fdXBkYXRl
PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztuLl9pc01vdW50ZWQmJk90KG4sImJlZm9yZVVwZGF0
ZSIpO3ZhciByPW4uJGVsLGk9bi5fdm5vZGUsbz1JbztJbz1uLG4uX3Zub2RlPXQsaT9uLiRlbD1u
Ll9fcGF0Y2hfXyhpLHQpOihuLiRlbD1uLl9fcGF0Y2hfXyhuLiRlbCx0LGUsITEsbi4kb3B0aW9u
cy5fcGFyZW50RWxtLG4uJG9wdGlvbnMuX3JlZkVsbSksbi4kb3B0aW9ucy5fcGFyZW50RWxtPW4u
JG9wdGlvbnMuX3JlZkVsbT1udWxsKSxJbz1vLHImJihyLl9fdnVlX189bnVsbCksbi4kZWwmJihu
LiRlbC5fX3Z1ZV9fPW4pLG4uJHZub2RlJiZuLiRwYXJlbnQmJm4uJHZub2RlPT09bi4kcGFyZW50
Ll92bm9kZSYmKG4uJHBhcmVudC4kZWw9bi4kZWwpfSx0LnByb3RvdHlwZS4kZm9yY2VVcGRhdGU9
ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3QuX3dhdGNoZXImJnQuX3dhdGNoZXIudXBkYXRlKCl9LHQu
cHJvdG90eXBlLiRkZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZighdC5faXNCZWluZ0Rl
c3Ryb3llZCl7T3QodCwiYmVmb3JlRGVzdHJveSIpLHQuX2lzQmVpbmdEZXN0cm95ZWQ9ITA7dmFy
IGU9dC4kcGFyZW50OyFlfHxlLl9pc0JlaW5nRGVzdHJveWVkfHx0LiRvcHRpb25zLmFic3RyYWN0
fHxoKGUuJGNoaWxkcmVuLHQpLHQuX3dhdGNoZXImJnQuX3dhdGNoZXIudGVhcmRvd24oKTtmb3Io
dmFyIG49dC5fd2F0Y2hlcnMubGVuZ3RoO24tLTspdC5fd2F0Y2hlcnNbbl0udGVhcmRvd24oKTt0
Ll9kYXRhLl9fb2JfXyYmdC5fZGF0YS5fX29iX18udm1Db3VudC0tLHQuX2lzRGVzdHJveWVkPSEw
LHQuX19wYXRjaF9fKHQuX3Zub2RlLG51bGwpLE90KHQsImRlc3Ryb3llZCIpLHQuJG9mZigpLHQu
JGVsJiYodC4kZWwuX192dWVfXz1udWxsKX19fSh3ZSksZnVuY3Rpb24odCl7dC5wcm90b3R5cGUu
JG5leHRUaWNrPWZ1bmN0aW9uKHQpe3JldHVybiBfbyh0LHRoaXMpfSx0LnByb3RvdHlwZS5fcmVu
ZGVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXQuJG9wdGlvbnMsbj1lLnJlbmRlcixyPWUuc3Rh
dGljUmVuZGVyRm5zLGk9ZS5fcGFyZW50Vm5vZGU7aWYodC5faXNNb3VudGVkKWZvcih2YXIgbyBp
biB0LiRzbG90cyl0LiRzbG90c1tvXT10dCh0LiRzbG90c1tvXSk7dC4kc2NvcGVkU2xvdHM9aSYm
aS5kYXRhLnNjb3BlZFNsb3RzfHxZaSxyJiYhdC5fc3RhdGljVHJlZXMmJih0Ll9zdGF0aWNUcmVl
cz1bXSksdC4kdm5vZGU9aTt2YXIgYTt0cnl7YT1uLmNhbGwodC5fcmVuZGVyUHJveHksdC4kY3Jl
YXRlRWxlbWVudCl9Y2F0Y2goZSl7UyhlLHQsInJlbmRlciBmdW5jdGlvbiIpLGE9dC5fdm5vZGV9
cmV0dXJuIGEgaW5zdGFuY2VvZiBFb3x8KGE9TG8oKSksYS5wYXJlbnQ9aSxhfSx0LnByb3RvdHlw
ZS5fbz1wZSx0LnByb3RvdHlwZS5fbj1wLHQucHJvdG90eXBlLl9zPWYsdC5wcm90b3R5cGUuX2w9
YWUsdC5wcm90b3R5cGUuX3Q9c2UsdC5wcm90b3R5cGUuX3E9JCx0LnByb3RvdHlwZS5faT1DLHQu
cHJvdG90eXBlLl9tPWZlLHQucHJvdG90eXBlLl9mPWNlLHQucHJvdG90eXBlLl9rPXVlLHQucHJv
dG90eXBlLl9iPWxlLHQucHJvdG90eXBlLl92PVksdC5wcm90b3R5cGUuX2U9TG8sdC5wcm90b3R5
cGUuX3U9YnQsdC5wcm90b3R5cGUuX2c9dmV9KHdlKTt2YXIgWW89W1N0cmluZyxSZWdFeHAsQXJy
YXldLFFvPXtuYW1lOiJrZWVwLWFsaXZlIixhYnN0cmFjdDohMCxwcm9wczp7aW5jbHVkZTpZbyxl
eGNsdWRlOllvfSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5jYWNoZT1PYmplY3QuY3JlYXRlKG51
bGwpfSxkZXN0cm95ZWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2Zvcih2YXIgZSBpbiB0LmNhY2hl
KWplKHQuY2FjaGVbZV0pfSx3YXRjaDp7aW5jbHVkZTpmdW5jdGlvbih0KXtFZSh0aGlzLmNhY2hl
LHRoaXMuX3Zub2RlLGZ1bmN0aW9uKGUpe3JldHVybiBUZSh0LGUpfSl9LGV4Y2x1ZGU6ZnVuY3Rp
b24odCl7RWUodGhpcy5jYWNoZSx0aGlzLl92bm9kZSxmdW5jdGlvbihlKXtyZXR1cm4hVGUodCxl
KX0pfX0scmVuZGVyOmZ1bmN0aW9uKCl7dmFyIHQ9ZHQodGhpcy4kc2xvdHMuZGVmYXVsdCksZT10
JiZ0LmNvbXBvbmVudE9wdGlvbnM7aWYoZSl7dmFyIG49U2UoZSk7aWYobiYmKHRoaXMuaW5jbHVk
ZSYmIVRlKHRoaXMuaW5jbHVkZSxuKXx8dGhpcy5leGNsdWRlJiZUZSh0aGlzLmV4Y2x1ZGUsbikp
KXJldHVybiB0O3ZhciByPW51bGw9PXQua2V5P2UuQ3Rvci5jaWQrKGUudGFnPyI6OiIrZS50YWc6
IiIpOnQua2V5O3RoaXMuY2FjaGVbcl0/dC5jb21wb25lbnRJbnN0YW5jZT10aGlzLmNhY2hlW3Jd
LmNvbXBvbmVudEluc3RhbmNlOnRoaXMuY2FjaGVbcl09dCx0LmRhdGEua2VlcEFsaXZlPSEwfXJl
dHVybiB0fX0sdGE9e0tlZXBBbGl2ZTpRb307IWZ1bmN0aW9uKHQpe3ZhciBlPXt9O2UuZ2V0PWZ1
bmN0aW9uKCl7cmV0dXJuIFhpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiY29uZmlnIixlKSx0
LnV0aWw9e3dhcm46dG8sZXh0ZW5kOl8sbWVyZ2VPcHRpb25zOkssZGVmaW5lUmVhY3RpdmU6SX0s
dC5zZXQ9UCx0LmRlbGV0ZT1SLHQubmV4dFRpY2s9X28sdC5vcHRpb25zPU9iamVjdC5jcmVhdGUo
bnVsbCksWmkuZm9yRWFjaChmdW5jdGlvbihlKXt0Lm9wdGlvbnNbZSsicyJdPU9iamVjdC5jcmVh
dGUobnVsbCl9KSx0Lm9wdGlvbnMuX2Jhc2U9dCxfKHQub3B0aW9ucy5jb21wb25lbnRzLHRhKSwk
ZSh0KSxDZSh0KSx4ZSh0KSxPZSh0KX0od2UpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3ZS5wcm90
b3R5cGUsIiRpc1NlcnZlciIse2dldDptb30pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3ZS5wcm90
b3R5cGUsIiRzc3JDb250ZXh0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHZub2RlJiZ0
aGlzLiR2bm9kZS5zc3JDb250ZXh0fX0pLHdlLnZlcnNpb249IjIuNC4yIjt2YXIgZWEsbmEscmEs
aWEsb2EsYWEsc2EsY2EsdWEsbGE9ZCgic3R5bGUsY2xhc3MiKSxmYT1kKCJpbnB1dCx0ZXh0YXJl
YSxvcHRpb24sc2VsZWN0IikscGE9ZnVuY3Rpb24odCxlLG4pe3JldHVybiJ2YWx1ZSI9PT1uJiZm
YSh0KSYmImJ1dHRvbiIhPT1lfHwic2VsZWN0ZWQiPT09biYmIm9wdGlvbiI9PT10fHwiY2hlY2tl
ZCI9PT1uJiYiaW5wdXQiPT09dHx8Im11dGVkIj09PW4mJiJ2aWRlbyI9PT10fSxkYT1kKCJjb250
ZW50ZWRpdGFibGUsZHJhZ2dhYmxlLHNwZWxsY2hlY2siKSxoYT1kKCJhbGxvd2Z1bGxzY3JlZW4s
YXN5bmMsYXV0b2ZvY3VzLGF1dG9wbGF5LGNoZWNrZWQsY29tcGFjdCxjb250cm9scyxkZWNsYXJl
LGRlZmF1bHQsZGVmYXVsdGNoZWNrZWQsZGVmYXVsdG11dGVkLGRlZmF1bHRzZWxlY3RlZCxkZWZl
cixkaXNhYmxlZCxlbmFibGVkLGZvcm1ub3ZhbGlkYXRlLGhpZGRlbixpbmRldGVybWluYXRlLGlu
ZXJ0LGlzbWFwLGl0ZW1zY29wZSxsb29wLG11bHRpcGxlLG11dGVkLG5vaHJlZixub3Jlc2l6ZSxu
b3NoYWRlLG5vdmFsaWRhdGUsbm93cmFwLG9wZW4scGF1c2VvbmV4aXQscmVhZG9ubHkscmVxdWly
ZWQscmV2ZXJzZWQsc2NvcGVkLHNlYW1sZXNzLHNlbGVjdGVkLHNvcnRhYmxlLHRyYW5zbGF0ZSx0
cnVlc3BlZWQsdHlwZW11c3RtYXRjaCx2aXNpYmxlIiksdmE9Imh0dHA6Ly93d3cudzMub3JnLzE5
OTkveGxpbmsiLG1hPWZ1bmN0aW9uKHQpe3JldHVybiI6Ij09PXQuY2hhckF0KDUpJiYieGxpbmsi
PT09dC5zbGljZSgwLDUpfSx5YT1mdW5jdGlvbih0KXtyZXR1cm4gbWEodCk/dC5zbGljZSg2LHQu
bGVuZ3RoKToiIn0sZ2E9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXR8fCExPT09dH0sX2E9e3N2
ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLG1hdGg6Imh0dHA6Ly93d3cudzMub3JnLzE5
OTgvTWF0aC9NYXRoTUwifSxiYT1kKCJodG1sLGJvZHksYmFzZSxoZWFkLGxpbmssbWV0YSxzdHls
ZSx0aXRsZSxhZGRyZXNzLGFydGljbGUsYXNpZGUsZm9vdGVyLGhlYWRlcixoMSxoMixoMyxoNCxo
NSxoNixoZ3JvdXAsbmF2LHNlY3Rpb24sZGl2LGRkLGRsLGR0LGZpZ2NhcHRpb24sZmlndXJlLHBp
Y3R1cmUsaHIsaW1nLGxpLG1haW4sb2wscCxwcmUsdWwsYSxiLGFiYnIsYmRpLGJkbyxicixjaXRl
LGNvZGUsZGF0YSxkZm4sZW0saSxrYmQsbWFyayxxLHJwLHJ0LHJ0YyxydWJ5LHMsc2FtcCxzbWFs
bCxzcGFuLHN0cm9uZyxzdWIsc3VwLHRpbWUsdSx2YXIsd2JyLGFyZWEsYXVkaW8sbWFwLHRyYWNr
LHZpZGVvLGVtYmVkLG9iamVjdCxwYXJhbSxzb3VyY2UsY2FudmFzLHNjcmlwdCxub3NjcmlwdCxk
ZWwsaW5zLGNhcHRpb24sY29sLGNvbGdyb3VwLHRhYmxlLHRoZWFkLHRib2R5LHRkLHRoLHRyLGJ1
dHRvbixkYXRhbGlzdCxmaWVsZHNldCxmb3JtLGlucHV0LGxhYmVsLGxlZ2VuZCxtZXRlcixvcHRn
cm91cCxvcHRpb24sb3V0cHV0LHByb2dyZXNzLHNlbGVjdCx0ZXh0YXJlYSxkZXRhaWxzLGRpYWxv
ZyxtZW51LG1lbnVpdGVtLHN1bW1hcnksY29udGVudCxlbGVtZW50LHNoYWRvdyx0ZW1wbGF0ZSxi
bG9ja3F1b3RlLGlmcmFtZSx0Zm9vdCIpLHdhPWQoInN2ZyxhbmltYXRlLGNpcmNsZSxjbGlwcGF0
aCxjdXJzb3IsZGVmcyxkZXNjLGVsbGlwc2UsZmlsdGVyLGZvbnQtZmFjZSxmb3JlaWduT2JqZWN0
LGcsZ2x5cGgsaW1hZ2UsbGluZSxtYXJrZXIsbWFzayxtaXNzaW5nLWdseXBoLHBhdGgscGF0dGVy
bixwb2x5Z29uLHBvbHlsaW5lLHJlY3Qsc3dpdGNoLHN5bWJvbCx0ZXh0LHRleHRwYXRoLHRzcGFu
LHVzZSx2aWV3IiwhMCksJGE9ZnVuY3Rpb24odCl7cmV0dXJuInByZSI9PT10fSxDYT1mdW5jdGlv
bih0KXtyZXR1cm4gYmEodCl8fHdhKHQpfSx4YT1PYmplY3QuY3JlYXRlKG51bGwpLEFhPU9iamVj
dC5mcmVlemUoe2NyZWF0ZUVsZW1lbnQ6SGUsY3JlYXRlRWxlbWVudE5TOlZlLGNyZWF0ZVRleHRO
b2RlOnplLGNyZWF0ZUNvbW1lbnQ6SmUsaW5zZXJ0QmVmb3JlOktlLHJlbW92ZUNoaWxkOnFlLGFw
cGVuZENoaWxkOldlLHBhcmVudE5vZGU6WmUsbmV4dFNpYmxpbmc6R2UsdGFnTmFtZTpYZSxzZXRU
ZXh0Q29udGVudDpZZSxzZXRBdHRyaWJ1dGU6UWV9KSxrYT17Y3JlYXRlOmZ1bmN0aW9uKHQsZSl7
dG4oZSl9LHVwZGF0ZTpmdW5jdGlvbih0LGUpe3QuZGF0YS5yZWYhPT1lLmRhdGEucmVmJiYodG4o
dCwhMCksdG4oZSkpfSxkZXN0cm95OmZ1bmN0aW9uKHQpe3RuKHQsITApfX0sT2E9bmV3IEVvKCIi
LHt9LFtdKSxTYT1bImNyZWF0ZSIsImFjdGl2YXRlIiwidXBkYXRlIiwicmVtb3ZlIiwiZGVzdHJv
eSJdLFRhPXtjcmVhdGU6b24sdXBkYXRlOm9uLGRlc3Ryb3k6ZnVuY3Rpb24odCl7b24odCxPYSl9
fSxFYT1PYmplY3QuY3JlYXRlKG51bGwpLGphPVtrYSxUYV0sTmE9e2NyZWF0ZTpsbix1cGRhdGU6
bG59LExhPXtjcmVhdGU6cG4sdXBkYXRlOnBufSxNYT0vW1x3KS4rXC1fJFxdXS8sSWE9Il9fciIs
UGE9Il9fYyIsUmE9e2NyZWF0ZTpGbix1cGRhdGU6Rm59LERhPXtjcmVhdGU6Qm4sdXBkYXRlOkJu
fSxGYT1tKGZ1bmN0aW9uKHQpe3ZhciBlPXt9LG49LzsoPyFbXihdKlwpKS9nLHI9LzooLispLzty
ZXR1cm4gdC5zcGxpdChuKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKHQpe3ZhciBuPXQuc3BsaXQo
cik7bi5sZW5ndGg+MSYmKGVbblswXS50cmltKCldPW5bMV0udHJpbSgpKX19KSxlfSksQmE9L14t
LS8sVWE9L1xzKiFpbXBvcnRhbnQkLyxIYT1mdW5jdGlvbih0LGUsbil7aWYoQmEudGVzdChlKSl0
LnN0eWxlLnNldFByb3BlcnR5KGUsbik7ZWxzZSBpZihVYS50ZXN0KG4pKXQuc3R5bGUuc2V0UHJv
cGVydHkoZSxuLnJlcGxhY2UoVWEsIiIpLCJpbXBvcnRhbnQiKTtlbHNle3ZhciByPXphKGUpO2lm
KEFycmF5LmlzQXJyYXkobikpZm9yKHZhciBpPTAsbz1uLmxlbmd0aDtpPG87aSsrKXQuc3R5bGVb
cl09bltpXTtlbHNlIHQuc3R5bGVbcl09bn19LFZhPVsiV2Via2l0IiwiTW96IiwibXMiXSx6YT1t
KGZ1bmN0aW9uKHQpe2lmKHVhPXVhfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKS5zdHls
ZSwiZmlsdGVyIiE9PSh0PUhpKHQpKSYmdCBpbiB1YSlyZXR1cm4gdDtmb3IodmFyIGU9dC5jaGFy
QXQoMCkudG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpLG49MDtuPFZhLmxlbmd0aDtuKyspe3ZhciBy
PVZhW25dK2U7aWYociBpbiB1YSlyZXR1cm4gcn19KSxKYT17Y3JlYXRlOnFuLHVwZGF0ZTpxbn0s
S2E9bShmdW5jdGlvbih0KXtyZXR1cm57ZW50ZXJDbGFzczp0KyItZW50ZXIiLGVudGVyVG9DbGFz
czp0KyItZW50ZXItdG8iLGVudGVyQWN0aXZlQ2xhc3M6dCsiLWVudGVyLWFjdGl2ZSIsbGVhdmVD
bGFzczp0KyItbGVhdmUiLGxlYXZlVG9DbGFzczp0KyItbGVhdmUtdG8iLGxlYXZlQWN0aXZlQ2xh
c3M6dCsiLWxlYXZlLWFjdGl2ZSJ9fSkscWE9bm8mJiFvbyxXYT0idHJhbnNpdGlvbiIsWmE9ImFu
aW1hdGlvbiIsR2E9InRyYW5zaXRpb24iLFhhPSJ0cmFuc2l0aW9uZW5kIixZYT0iYW5pbWF0aW9u
IixRYT0iYW5pbWF0aW9uZW5kIjtxYSYmKHZvaWQgMD09PXdpbmRvdy5vbnRyYW5zaXRpb25lbmQm
JnZvaWQgMCE9PXdpbmRvdy5vbndlYmtpdHRyYW5zaXRpb25lbmQmJihHYT0iV2Via2l0VHJhbnNp
dGlvbiIsWGE9IndlYmtpdFRyYW5zaXRpb25FbmQiKSx2b2lkIDA9PT13aW5kb3cub25hbmltYXRp
b25lbmQmJnZvaWQgMCE9PXdpbmRvdy5vbndlYmtpdGFuaW1hdGlvbmVuZCYmKFlhPSJXZWJraXRB
bmltYXRpb24iLFFhPSJ3ZWJraXRBbmltYXRpb25FbmQiKSk7dmFyIHRzPW5vJiZ3aW5kb3cucmVx
dWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5k
b3cpOnNldFRpbWVvdXQsZXM9L1xiKHRyYW5zZm9ybXxhbGwpKCx8JCkvLG5zPW5vP3tjcmVhdGU6
Y3IsYWN0aXZhdGU6Y3IscmVtb3ZlOmZ1bmN0aW9uKHQsZSl7ITAhPT10LmRhdGEuc2hvdz9vcih0
LGUpOmUoKX19Ont9LHJzPVtOYSxMYSxSYSxEYSxKYSxuc10saXM9cnMuY29uY2F0KGphKSxvcz1m
dW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3JldHVybiBuZXcgRW8oRS50YWdOYW1lKHQpLnRvTG93
ZXJDYXNlKCkse30sW10sdm9pZCAwLHQpfWZ1bmN0aW9uIG8odCxlKXtmdW5jdGlvbiBuKCl7MD09
LS1uLmxpc3RlbmVycyYmcyh0KX1yZXR1cm4gbi5saXN0ZW5lcnM9ZSxufWZ1bmN0aW9uIHModCl7
dmFyIGU9RS5wYXJlbnROb2RlKHQpO3IoZSkmJkUucmVtb3ZlQ2hpbGQoZSx0KX1mdW5jdGlvbiBj
KHQsZSxuLG8sYSl7aWYodC5pc1Jvb3RJbnNlcnQ9IWEsIXUodCxlLG4sbykpe3ZhciBzPXQuZGF0
YSxjPXQuY2hpbGRyZW4sbD10LnRhZztyKGwpPyh0LmVsbT10Lm5zP0UuY3JlYXRlRWxlbWVudE5T
KHQubnMsbCk6RS5jcmVhdGVFbGVtZW50KGwsdCkseSh0KSxoKHQsYyxlKSxyKHMpJiZtKHQsZSks
cChuLHQuZWxtLG8pKTppKHQuaXNDb21tZW50KT8odC5lbG09RS5jcmVhdGVDb21tZW50KHQudGV4
dCkscChuLHQuZWxtLG8pKToodC5lbG09RS5jcmVhdGVUZXh0Tm9kZSh0LnRleHQpLHAobix0LmVs
bSxvKSl9fWZ1bmN0aW9uIHUodCxlLG4sbyl7dmFyIGE9dC5kYXRhO2lmKHIoYSkpe3ZhciBzPXIo
dC5jb21wb25lbnRJbnN0YW5jZSkmJmEua2VlcEFsaXZlO2lmKHIoYT1hLmhvb2spJiZyKGE9YS5p
bml0KSYmYSh0LCExLG4sbykscih0LmNvbXBvbmVudEluc3RhbmNlKSlyZXR1cm4gbCh0LGUpLGko
cykmJmYodCxlLG4sbyksITB9fWZ1bmN0aW9uIGwodCxlKXtyKHQuZGF0YS5wZW5kaW5nSW5zZXJ0
KSYmKGUucHVzaC5hcHBseShlLHQuZGF0YS5wZW5kaW5nSW5zZXJ0KSx0LmRhdGEucGVuZGluZ0lu
c2VydD1udWxsKSx0LmVsbT10LmNvbXBvbmVudEluc3RhbmNlLiRlbCx2KHQpPyhtKHQsZSkseSh0
KSk6KHRuKHQpLGUucHVzaCh0KSl9ZnVuY3Rpb24gZih0LGUsbixpKXtmb3IodmFyIG8sYT10O2Eu
Y29tcG9uZW50SW5zdGFuY2U7KWlmKGE9YS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGUscihvPWEu
ZGF0YSkmJnIobz1vLnRyYW5zaXRpb24pKXtmb3Iobz0wO288Uy5hY3RpdmF0ZS5sZW5ndGg7Kytv
KVMuYWN0aXZhdGVbb10oT2EsYSk7ZS5wdXNoKGEpO2JyZWFrfXAobix0LmVsbSxpKX1mdW5jdGlv
biBwKHQsZSxuKXtyKHQpJiYocihuKT9uLnBhcmVudE5vZGU9PT10JiZFLmluc2VydEJlZm9yZSh0
LGUsbik6RS5hcHBlbmRDaGlsZCh0LGUpKX1mdW5jdGlvbiBoKHQsZSxuKXtpZihBcnJheS5pc0Fy
cmF5KGUpKWZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7KytyKWMoZVtyXSxuLHQuZWxtLG51bGwsITAp
O2Vsc2UgYSh0LnRleHQpJiZFLmFwcGVuZENoaWxkKHQuZWxtLEUuY3JlYXRlVGV4dE5vZGUodC50
ZXh0KSl9ZnVuY3Rpb24gdih0KXtmb3IoO3QuY29tcG9uZW50SW5zdGFuY2U7KXQ9dC5jb21wb25l
bnRJbnN0YW5jZS5fdm5vZGU7cmV0dXJuIHIodC50YWcpfWZ1bmN0aW9uIG0odCxlKXtmb3IodmFy
IG49MDtuPFMuY3JlYXRlLmxlbmd0aDsrK24pUy5jcmVhdGVbbl0oT2EsdCk7az10LmRhdGEuaG9v
ayxyKGspJiYocihrLmNyZWF0ZSkmJmsuY3JlYXRlKE9hLHQpLHIoay5pbnNlcnQpJiZlLnB1c2go
dCkpfWZ1bmN0aW9uIHkodCl7Zm9yKHZhciBlLG49dDtuOylyKGU9bi5jb250ZXh0KSYmcihlPWUu
JG9wdGlvbnMuX3Njb3BlSWQpJiZFLnNldEF0dHJpYnV0ZSh0LmVsbSxlLCIiKSxuPW4ucGFyZW50
O3IoZT1JbykmJmUhPT10LmNvbnRleHQmJnIoZT1lLiRvcHRpb25zLl9zY29wZUlkKSYmRS5zZXRB
dHRyaWJ1dGUodC5lbG0sZSwiIil9ZnVuY3Rpb24gZyh0LGUsbixyLGksbyl7Zm9yKDtyPD1pOysr
ciljKG5bcl0sbyx0LGUpfWZ1bmN0aW9uIF8odCl7dmFyIGUsbixpPXQuZGF0YTtpZihyKGkpKWZv
cihyKGU9aS5ob29rKSYmcihlPWUuZGVzdHJveSkmJmUodCksZT0wO2U8Uy5kZXN0cm95Lmxlbmd0
aDsrK2UpUy5kZXN0cm95W2VdKHQpO2lmKHIoZT10LmNoaWxkcmVuKSlmb3Iobj0wO248dC5jaGls
ZHJlbi5sZW5ndGg7KytuKV8odC5jaGlsZHJlbltuXSl9ZnVuY3Rpb24gYih0LGUsbixpKXtmb3Io
O248PWk7KytuKXt2YXIgbz1lW25dO3IobykmJihyKG8udGFnKT8odyhvKSxfKG8pKTpzKG8uZWxt
KSl9fWZ1bmN0aW9uIHcodCxlKXtpZihyKGUpfHxyKHQuZGF0YSkpe3ZhciBuLGk9Uy5yZW1vdmUu
bGVuZ3RoKzE7Zm9yKHIoZSk/ZS5saXN0ZW5lcnMrPWk6ZT1vKHQuZWxtLGkpLHIobj10LmNvbXBv
bmVudEluc3RhbmNlKSYmcihuPW4uX3Zub2RlKSYmcihuLmRhdGEpJiZ3KG4sZSksbj0wO248Uy5y
ZW1vdmUubGVuZ3RoOysrbilTLnJlbW92ZVtuXSh0LGUpO3Iobj10LmRhdGEuaG9vaykmJnIobj1u
LnJlbW92ZSk/bih0LGUpOmUoKX1lbHNlIHModC5lbG0pfWZ1bmN0aW9uICQodCxlLGksbyxhKXtm
b3IodmFyIHMsdSxsLGYscD0wLGQ9MCxoPWUubGVuZ3RoLTEsdj1lWzBdLG09ZVtoXSx5PWkubGVu
Z3RoLTEsXz1pWzBdLHc9aVt5XSwkPSFhO3A8PWgmJmQ8PXk7KW4odik/dj1lWysrcF06bihtKT9t
PWVbLS1oXTplbih2LF8pPyhDKHYsXyxvKSx2PWVbKytwXSxfPWlbKytkXSk6ZW4obSx3KT8oQyht
LHcsbyksbT1lWy0taF0sdz1pWy0teV0pOmVuKHYsdyk/KEModix3LG8pLCQmJkUuaW5zZXJ0QmVm
b3JlKHQsdi5lbG0sRS5uZXh0U2libGluZyhtLmVsbSkpLHY9ZVsrK3BdLHc9aVstLXldKTplbiht
LF8pPyhDKG0sXyxvKSwkJiZFLmluc2VydEJlZm9yZSh0LG0uZWxtLHYuZWxtKSxtPWVbLS1oXSxf
PWlbKytkXSk6KG4ocykmJihzPXJuKGUscCxoKSksdT1yKF8ua2V5KT9zW18ua2V5XTpudWxsLG4o
dSk/KGMoXyxvLHQsdi5lbG0pLF89aVsrK2RdKToobD1lW3VdLGVuKGwsXyk/KEMobCxfLG8pLGVb
dV09dm9pZCAwLCQmJkUuaW5zZXJ0QmVmb3JlKHQsbC5lbG0sdi5lbG0pLF89aVsrK2RdKTooYyhf
LG8sdCx2LmVsbSksXz1pWysrZF0pKSk7cD5oPyhmPW4oaVt5KzFdKT9udWxsOmlbeSsxXS5lbG0s
Zyh0LGYsaSxkLHksbykpOmQ+eSYmYih0LGUscCxoKX1mdW5jdGlvbiBDKHQsZSxvLGEpe2lmKHQh
PT1lKXt2YXIgcz1lLmVsbT10LmVsbTtpZihpKHQuaXNBc3luY1BsYWNlaG9sZGVyKSlyZXR1cm4g
dm9pZChyKGUuYXN5bmNGYWN0b3J5LnJlc29sdmVkKT9BKHQuZWxtLGUsbyk6ZS5pc0FzeW5jUGxh
Y2Vob2xkZXI9ITApO2lmKGkoZS5pc1N0YXRpYykmJmkodC5pc1N0YXRpYykmJmUua2V5PT09dC5r
ZXkmJihpKGUuaXNDbG9uZWQpfHxpKGUuaXNPbmNlKSkpcmV0dXJuIHZvaWQoZS5jb21wb25lbnRJ
bnN0YW5jZT10LmNvbXBvbmVudEluc3RhbmNlKTt2YXIgYyx1PWUuZGF0YTtyKHUpJiZyKGM9dS5o
b29rKSYmcihjPWMucHJlcGF0Y2gpJiZjKHQsZSk7dmFyIGw9dC5jaGlsZHJlbixmPWUuY2hpbGRy
ZW47aWYocih1KSYmdihlKSl7Zm9yKGM9MDtjPFMudXBkYXRlLmxlbmd0aDsrK2MpUy51cGRhdGVb
Y10odCxlKTtyKGM9dS5ob29rKSYmcihjPWMudXBkYXRlKSYmYyh0LGUpfW4oZS50ZXh0KT9yKGwp
JiZyKGYpP2whPT1mJiYkKHMsbCxmLG8sYSk6cihmKT8ocih0LnRleHQpJiZFLnNldFRleHRDb250
ZW50KHMsIiIpLGcocyxudWxsLGYsMCxmLmxlbmd0aC0xLG8pKTpyKGwpP2IocyxsLDAsbC5sZW5n
dGgtMSk6cih0LnRleHQpJiZFLnNldFRleHRDb250ZW50KHMsIiIpOnQudGV4dCE9PWUudGV4dCYm
RS5zZXRUZXh0Q29udGVudChzLGUudGV4dCkscih1KSYmcihjPXUuaG9vaykmJnIoYz1jLnBvc3Rw
YXRjaCkmJmModCxlKX19ZnVuY3Rpb24geCh0LGUsbil7aWYoaShuKSYmcih0LnBhcmVudCkpdC5w
YXJlbnQuZGF0YS5wZW5kaW5nSW5zZXJ0PWU7ZWxzZSBmb3IodmFyIG89MDtvPGUubGVuZ3RoOysr
byllW29dLmRhdGEuaG9vay5pbnNlcnQoZVtvXSl9ZnVuY3Rpb24gQSh0LGUsbil7aWYoaShlLmlz
Q29tbWVudCkmJnIoZS5hc3luY0ZhY3RvcnkpKXJldHVybiBlLmVsbT10LGUuaXNBc3luY1BsYWNl
aG9sZGVyPSEwLCEwO2UuZWxtPXQ7dmFyIG89ZS50YWcsYT1lLmRhdGEscz1lLmNoaWxkcmVuO2lm
KHIoYSkmJihyKGs9YS5ob29rKSYmcihrPWsuaW5pdCkmJmsoZSwhMCkscihrPWUuY29tcG9uZW50
SW5zdGFuY2UpKSlyZXR1cm4gbChlLG4pLCEwO2lmKHIobykpe2lmKHIocykpaWYodC5oYXNDaGls
ZE5vZGVzKCkpe2Zvcih2YXIgYz0hMCx1PXQuZmlyc3RDaGlsZCxmPTA7ZjxzLmxlbmd0aDtmKysp
e2lmKCF1fHwhQSh1LHNbZl0sbikpe2M9ITE7YnJlYWt9dT11Lm5leHRTaWJsaW5nfWlmKCFjfHx1
KXJldHVybiExfWVsc2UgaChlLHMsbik7aWYocihhKSlmb3IodmFyIHAgaW4gYSlpZighaihwKSl7
bShlLG4pO2JyZWFrfX1lbHNlIHQuZGF0YSE9PWUudGV4dCYmKHQuZGF0YT1lLnRleHQpO3JldHVy
biEwfXZhciBrLE8sUz17fSxUPXQubW9kdWxlcyxFPXQubm9kZU9wcztmb3Ioaz0wO2s8U2EubGVu
Z3RoOysraylmb3IoU1tTYVtrXV09W10sTz0wO088VC5sZW5ndGg7KytPKXIoVFtPXVtTYVtrXV0p
JiZTW1NhW2tdXS5wdXNoKFRbT11bU2Fba11dKTt2YXIgaj1kKCJhdHRycyxzdHlsZSxjbGFzcyxz
dGF0aWNDbGFzcyxzdGF0aWNTdHlsZSxrZXkiKTtyZXR1cm4gZnVuY3Rpb24odCxvLGEscyx1LGwp
e2lmKG4obykpcmV0dXJuIHZvaWQocih0KSYmXyh0KSk7dmFyIGY9ITEscD1bXTtpZihuKHQpKWY9
ITAsYyhvLHAsdSxsKTtlbHNle3ZhciBkPXIodC5ub2RlVHlwZSk7aWYoIWQmJmVuKHQsbykpQyh0
LG8scCxzKTtlbHNle2lmKGQpe2lmKDE9PT10Lm5vZGVUeXBlJiZ0Lmhhc0F0dHJpYnV0ZShXaSkm
Jih0LnJlbW92ZUF0dHJpYnV0ZShXaSksYT0hMCksaShhKSYmQSh0LG8scCkpcmV0dXJuIHgobyxw
LCEwKSx0O3Q9ZSh0KX12YXIgaD10LmVsbSxtPUUucGFyZW50Tm9kZShoKTtpZihjKG8scCxoLl9s
ZWF2ZUNiP251bGw6bSxFLm5leHRTaWJsaW5nKGgpKSxyKG8ucGFyZW50KSl7Zm9yKHZhciB5PW8u
cGFyZW50O3k7KXkuZWxtPW8uZWxtLHk9eS5wYXJlbnQ7aWYodihvKSlmb3IodmFyIGc9MDtnPFMu
Y3JlYXRlLmxlbmd0aDsrK2cpUy5jcmVhdGVbZ10oT2Esby5wYXJlbnQpfXIobSk/YihtLFt0XSww
LDApOnIodC50YWcpJiZfKHQpfX1yZXR1cm4geChvLHAsZiksby5lbG19fSh7bm9kZU9wczpBYSxt
b2R1bGVzOmlzfSksYXM9ZCgidGV4dCxudW1iZXIscGFzc3dvcmQsc2VhcmNoLGVtYWlsLHRlbCx1
cmwiKTtvbyYmZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIixmdW5j
dGlvbigpe3ZhciB0PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7dCYmdC52bW9kZWwmJmRyKHQsImlu
cHV0Iil9KTt2YXIgc3M9e2luc2VydGVkOmZ1bmN0aW9uKHQsZSxuKXtpZigic2VsZWN0Ij09PW4u
dGFnKXt2YXIgcj1mdW5jdGlvbigpe3VyKHQsZSxuLmNvbnRleHQpfTtyKCksKGlvfHxhbykmJnNl
dFRpbWVvdXQociwwKSx0Ll92T3B0aW9ucz1bXS5tYXAuY2FsbCh0Lm9wdGlvbnMsbHIpfWVsc2Uo
InRleHRhcmVhIj09PW4udGFnfHxhcyh0LnR5cGUpKSYmKHQuX3ZNb2RpZmllcnM9ZS5tb2RpZmll
cnMsZS5tb2RpZmllcnMubGF6eXx8KHQuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixwciksc298
fCh0LmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uc3RhcnQiLGZyKSx0LmFkZEV2ZW50TGlz
dGVuZXIoImNvbXBvc2l0aW9uZW5kIixwcikpLG9vJiYodC52bW9kZWw9ITApKSl9LGNvbXBvbmVu
dFVwZGF0ZWQ6ZnVuY3Rpb24odCxlLG4pe2lmKCJzZWxlY3QiPT09bi50YWcpe3VyKHQsZSxuLmNv
bnRleHQpO3ZhciByPXQuX3ZPcHRpb25zOyh0Ll92T3B0aW9ucz1bXS5tYXAuY2FsbCh0Lm9wdGlv
bnMsbHIpKS5zb21lKGZ1bmN0aW9uKHQsZSl7cmV0dXJuISQodCxyW2VdKX0pJiZkcih0LCJjaGFu
Z2UiKX19fSxjcz17YmluZDpmdW5jdGlvbih0LGUsbil7dmFyIHI9ZS52YWx1ZTtuPWhyKG4pO3Zh
ciBpPW4uZGF0YSYmbi5kYXRhLnRyYW5zaXRpb24sbz10Ll9fdk9yaWdpbmFsRGlzcGxheT0ibm9u
ZSI9PT10LnN0eWxlLmRpc3BsYXk/IiI6dC5zdHlsZS5kaXNwbGF5O3ImJmk/KG4uZGF0YS5zaG93
PSEwLGlyKG4sZnVuY3Rpb24oKXt0LnN0eWxlLmRpc3BsYXk9b30pKTp0LnN0eWxlLmRpc3BsYXk9
cj9vOiJub25lIn0sdXBkYXRlOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1lLnZhbHVlO3IhPT1lLm9s
ZFZhbHVlJiYobj1ocihuKSxuLmRhdGEmJm4uZGF0YS50cmFuc2l0aW9uPyhuLmRhdGEuc2hvdz0h
MCxyP2lyKG4sZnVuY3Rpb24oKXt0LnN0eWxlLmRpc3BsYXk9dC5fX3ZPcmlnaW5hbERpc3BsYXl9
KTpvcihuLGZ1bmN0aW9uKCl7dC5zdHlsZS5kaXNwbGF5PSJub25lIn0pKTp0LnN0eWxlLmRpc3Bs
YXk9cj90Ll9fdk9yaWdpbmFsRGlzcGxheToibm9uZSIpfSx1bmJpbmQ6ZnVuY3Rpb24odCxlLG4s
cixpKXtpfHwodC5zdHlsZS5kaXNwbGF5PXQuX192T3JpZ2luYWxEaXNwbGF5KX19LHVzPXttb2Rl
bDpzcyxzaG93OmNzfSxscz17bmFtZTpTdHJpbmcsYXBwZWFyOkJvb2xlYW4sY3NzOkJvb2xlYW4s
bW9kZTpTdHJpbmcsdHlwZTpTdHJpbmcsZW50ZXJDbGFzczpTdHJpbmcsbGVhdmVDbGFzczpTdHJp
bmcsZW50ZXJUb0NsYXNzOlN0cmluZyxsZWF2ZVRvQ2xhc3M6U3RyaW5nLGVudGVyQWN0aXZlQ2xh
c3M6U3RyaW5nLGxlYXZlQWN0aXZlQ2xhc3M6U3RyaW5nLGFwcGVhckNsYXNzOlN0cmluZyxhcHBl
YXJBY3RpdmVDbGFzczpTdHJpbmcsYXBwZWFyVG9DbGFzczpTdHJpbmcsZHVyYXRpb246W051bWJl
cixTdHJpbmcsT2JqZWN0XX0sZnM9e25hbWU6InRyYW5zaXRpb24iLHByb3BzOmxzLGFic3RyYWN0
OiEwLHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dGhpcy4kb3B0aW9ucy5fcmVuZGVy
Q2hpbGRyZW47aWYobiYmKG49bi5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQudGFnfHxicih0
KX0pLG4ubGVuZ3RoKSl7dmFyIHI9dGhpcy5tb2RlLGk9blswXTtpZihncih0aGlzLiR2bm9kZSkp
cmV0dXJuIGk7dmFyIG89dnIoaSk7aWYoIW8pcmV0dXJuIGk7aWYodGhpcy5fbGVhdmluZylyZXR1
cm4geXIodCxpKTt2YXIgcz0iX190cmFuc2l0aW9uLSIrdGhpcy5fdWlkKyItIjtvLmtleT1udWxs
PT1vLmtleT9vLmlzQ29tbWVudD9zKyJjb21tZW50IjpzK28udGFnOmEoby5rZXkpPzA9PT1TdHJp
bmcoby5rZXkpLmluZGV4T2Yocyk/by5rZXk6cytvLmtleTpvLmtleTt2YXIgYz0oby5kYXRhfHwo
by5kYXRhPXt9KSkudHJhbnNpdGlvbj1tcih0aGlzKSx1PXRoaXMuX3Zub2RlLGw9dnIodSk7aWYo
by5kYXRhLmRpcmVjdGl2ZXMmJm8uZGF0YS5kaXJlY3RpdmVzLnNvbWUoZnVuY3Rpb24odCl7cmV0
dXJuInNob3ciPT09dC5uYW1lfSkmJihvLmRhdGEuc2hvdz0hMCksbCYmbC5kYXRhJiYhX3Iobyxs
KSYmIWJyKGwpKXt2YXIgZj1sJiYobC5kYXRhLnRyYW5zaXRpb249Xyh7fSxjKSk7aWYoIm91dC1p
biI9PT1yKXJldHVybiB0aGlzLl9sZWF2aW5nPSEwLHJ0KGYsImFmdGVyTGVhdmUiLGZ1bmN0aW9u
KCl7ZS5fbGVhdmluZz0hMSxlLiRmb3JjZVVwZGF0ZSgpfSkseXIodCxpKTtpZigiaW4tb3V0Ij09
PXIpe2lmKGJyKG8pKXJldHVybiB1O3ZhciBwLGQ9ZnVuY3Rpb24oKXtwKCl9O3J0KGMsImFmdGVy
RW50ZXIiLGQpLHJ0KGMsImVudGVyQ2FuY2VsbGVkIixkKSxydChmLCJkZWxheUxlYXZlIixmdW5j
dGlvbih0KXtwPXR9KX19cmV0dXJuIGl9fX0scHM9Xyh7dGFnOlN0cmluZyxtb3ZlQ2xhc3M6U3Ry
aW5nfSxscyk7ZGVsZXRlIHBzLm1vZGU7dmFyIGRzPXtwcm9wczpwcyxyZW5kZXI6ZnVuY3Rpb24o
dCl7Zm9yKHZhciBlPXRoaXMudGFnfHx0aGlzLiR2bm9kZS5kYXRhLnRhZ3x8InNwYW4iLG49T2Jq
ZWN0LmNyZWF0ZShudWxsKSxyPXRoaXMucHJldkNoaWxkcmVuPXRoaXMuY2hpbGRyZW4saT10aGlz
LiRzbG90cy5kZWZhdWx0fHxbXSxvPXRoaXMuY2hpbGRyZW49W10sYT1tcih0aGlzKSxzPTA7czxp
Lmxlbmd0aDtzKyspe3ZhciBjPWlbc107aWYoYy50YWcpaWYobnVsbCE9Yy5rZXkmJjAhPT1TdHJp
bmcoYy5rZXkpLmluZGV4T2YoIl9fdmxpc3QiKSlvLnB1c2goYyksbltjLmtleV09YywoYy5kYXRh
fHwoYy5kYXRhPXt9KSkudHJhbnNpdGlvbj1hO2Vsc2U7fWlmKHIpe2Zvcih2YXIgdT1bXSxsPVtd
LGY9MDtmPHIubGVuZ3RoO2YrKyl7dmFyIHA9cltmXTtwLmRhdGEudHJhbnNpdGlvbj1hLHAuZGF0
YS5wb3M9cC5lbG0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbltwLmtleV0/dS5wdXNoKHApOmwu
cHVzaChwKX10aGlzLmtlcHQ9dChlLG51bGwsdSksdGhpcy5yZW1vdmVkPWx9cmV0dXJuIHQoZSxu
dWxsLG8pfSxiZWZvcmVVcGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl9fcGF0Y2hfXyh0aGlzLl92bm9k
ZSx0aGlzLmtlcHQsITEsITApLHRoaXMuX3Zub2RlPXRoaXMua2VwdH0sdXBkYXRlZDpmdW5jdGlv
bigpe3ZhciB0PXRoaXMucHJldkNoaWxkcmVuLGU9dGhpcy5tb3ZlQ2xhc3N8fCh0aGlzLm5hbWV8
fCJ2IikrIi1tb3ZlIjtpZih0Lmxlbmd0aCYmdGhpcy5oYXNNb3ZlKHRbMF0uZWxtLGUpKXt0LmZv
ckVhY2god3IpLHQuZm9yRWFjaCgkciksdC5mb3JFYWNoKENyKTt2YXIgbj1kb2N1bWVudC5ib2R5
O24ub2Zmc2V0SGVpZ2h0O3QuZm9yRWFjaChmdW5jdGlvbih0KXtpZih0LmRhdGEubW92ZWQpe3Zh
ciBuPXQuZWxtLHI9bi5zdHlsZTtZbihuLGUpLHIudHJhbnNmb3JtPXIuV2Via2l0VHJhbnNmb3Jt
PXIudHJhbnNpdGlvbkR1cmF0aW9uPSIiLG4uYWRkRXZlbnRMaXN0ZW5lcihYYSxuLl9tb3ZlQ2I9
ZnVuY3Rpb24gdChyKXtyJiYhL3RyYW5zZm9ybSQvLnRlc3Qoci5wcm9wZXJ0eU5hbWUpfHwobi5y
ZW1vdmVFdmVudExpc3RlbmVyKFhhLHQpLG4uX21vdmVDYj1udWxsLFFuKG4sZSkpfSl9fSl9fSxt
ZXRob2RzOntoYXNNb3ZlOmZ1bmN0aW9uKHQsZSl7aWYoIXFhKXJldHVybiExO2lmKHRoaXMuX2hh
c01vdmUpcmV0dXJuIHRoaXMuX2hhc01vdmU7dmFyIG49dC5jbG9uZU5vZGUoKTt0Ll90cmFuc2l0
aW9uQ2xhc3NlcyYmdC5fdHJhbnNpdGlvbkNsYXNzZXMuZm9yRWFjaChmdW5jdGlvbih0KXtabihu
LHQpfSksV24obixlKSxuLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuJGVsLmFwcGVuZENoaWxk
KG4pO3ZhciByPWVyKG4pO3JldHVybiB0aGlzLiRlbC5yZW1vdmVDaGlsZChuKSx0aGlzLl9oYXNN
b3ZlPXIuaGFzVHJhbnNmb3JtfX19LGhzPXtUcmFuc2l0aW9uOmZzLFRyYW5zaXRpb25Hcm91cDpk
c307d2UuY29uZmlnLm11c3RVc2VQcm9wPXBhLHdlLmNvbmZpZy5pc1Jlc2VydmVkVGFnPUNhLHdl
LmNvbmZpZy5pc1Jlc2VydmVkQXR0cj1sYSx3ZS5jb25maWcuZ2V0VGFnTmFtZXNwYWNlPUZlLHdl
LmNvbmZpZy5pc1Vua25vd25FbGVtZW50PUJlLF8od2Uub3B0aW9ucy5kaXJlY3RpdmVzLHVzKSxf
KHdlLm9wdGlvbnMuY29tcG9uZW50cyxocyksd2UucHJvdG90eXBlLl9fcGF0Y2hfXz1ubz9vczp3
LHdlLnByb3RvdHlwZS4kbW91bnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD10JiZubz9VZSh0KTp2
b2lkIDAsJHQodGhpcyx0LGUpfSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7WGkuZGV2dG9vbHMmJnlv
JiZ5by5lbWl0KCJpbml0Iix3ZSl9LDApO3ZhciB2cyxtcz0hIW5vJiZmdW5jdGlvbih0LGUpe3Zh
ciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBuLmlubmVySFRNTD0nPGRp
diBhPSInK3QrJyIvPicsbi5pbm5lckhUTUwuaW5kZXhPZihlKT4wfSgiXG4iLCImIzEwOyIpLHlz
PS9ce1x7KCg/Oi58XG4pKz8pXH1cfS9nLGdzPS9bLS4qKz9eJHt9KCl8W1xdXC9cXF0vZyxfcz1t
KGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0ucmVwbGFjZShncywiXFwkJiIpLG49dFsxXS5yZXBsYWNl
KGdzLCJcXCQmIik7cmV0dXJuIG5ldyBSZWdFeHAoZSsiKCg/Oi58XFxuKSs/KSIrbiwiZyIpfSks
YnM9e3N0YXRpY0tleXM6WyJzdGF0aWNDbGFzcyJdLHRyYW5zZm9ybU5vZGU6QXIsZ2VuRGF0YTpr
cn0sd3M9e3N0YXRpY0tleXM6WyJzdGF0aWNTdHlsZSJdLHRyYW5zZm9ybU5vZGU6T3IsZ2VuRGF0
YTpTcn0sJHM9W2JzLHdzXSxDcz17bW9kZWw6am4sdGV4dDpUcixodG1sOkVyfSx4cz1kKCJhcmVh
LGJhc2UsYnIsY29sLGVtYmVkLGZyYW1lLGhyLGltZyxpbnB1dCxpc2luZGV4LGtleWdlbixsaW5r
LG1ldGEscGFyYW0sc291cmNlLHRyYWNrLHdiciIpLEFzPWQoImNvbGdyb3VwLGRkLGR0LGxpLG9w
dGlvbnMscCx0ZCx0Zm9vdCx0aCx0aGVhZCx0cixzb3VyY2UiKSxrcz1kKCJhZGRyZXNzLGFydGlj
bGUsYXNpZGUsYmFzZSxibG9ja3F1b3RlLGJvZHksY2FwdGlvbixjb2wsY29sZ3JvdXAsZGQsZGV0
YWlscyxkaWFsb2csZGl2LGRsLGR0LGZpZWxkc2V0LGZpZ2NhcHRpb24sZmlndXJlLGZvb3Rlcixm
b3JtLGgxLGgyLGgzLGg0LGg1LGg2LGhlYWQsaGVhZGVyLGhncm91cCxocixodG1sLGxlZ2VuZCxs
aSxtZW51aXRlbSxtZXRhLG9wdGdyb3VwLG9wdGlvbixwYXJhbSxycCxydCxzb3VyY2Usc3R5bGUs
c3VtbWFyeSx0Ym9keSx0ZCx0Zm9vdCx0aCx0aGVhZCx0aXRsZSx0cix0cmFjayIpLE9zPXtleHBl
Y3RIVE1MOiEwLG1vZHVsZXM6JHMsZGlyZWN0aXZlczpDcyxpc1ByZVRhZzokYSxpc1VuYXJ5VGFn
OnhzLG11c3RVc2VQcm9wOnBhLGNhbkJlTGVmdE9wZW5UYWc6QXMsaXNSZXNlcnZlZFRhZzpDYSxn
ZXRUYWdOYW1lc3BhY2U6RmUsc3RhdGljS2V5czpmdW5jdGlvbih0KXtyZXR1cm4gdC5yZWR1Y2Uo
ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jb25jYXQoZS5zdGF0aWNLZXlzfHxbXSl9LFtdKS5qb2lu
KCIsIil9KCRzKX0sU3M9e2RlY29kZTpmdW5jdGlvbih0KXtyZXR1cm4gdnM9dnN8fGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHZzLmlubmVySFRNTD10LHZzLnRleHRDb250ZW50fX0sVHM9
LyhbXlxzIic8PlwvPV0rKS8sRXM9Lyg/Oj0pLyxqcz1bLyIoW14iXSopIisvLnNvdXJjZSwvJyhb
XiddKiknKy8uc291cmNlLC8oW15ccyInPTw+YF0rKS8uc291cmNlXSxOcz1uZXcgUmVnRXhwKCJe
XFxzKiIrVHMuc291cmNlKyIoPzpcXHMqKCIrRXMuc291cmNlKyIpXFxzKig/OiIranMuam9pbigi
fCIpKyIpKT8iKSxMcz0iW2EtekEtWl9dW1xcd1xcLVxcLl0qIixNcz0iKCg/OiIrTHMrIlxcOik/
IitMcysiKSIsSXM9bmV3IFJlZ0V4cCgiXjwiK01zKSxQcz0vXlxzKihcLz8pPi8sUnM9bmV3IFJl
Z0V4cCgiXjxcXC8iK01zKyJbXj5dKj4iKSxEcz0vXjwhRE9DVFlQRSBbXj5dKz4vaSxGcz0vXjwh
LS0vLEJzPS9ePCFcWy8sVXM9ITE7IngiLnJlcGxhY2UoL3goLik/L2csZnVuY3Rpb24odCxlKXtV
cz0iIj09PWV9KTt2YXIgSHMsVnMsenMsSnMsS3MscXMsV3MsWnMsR3MsWHMsWXM9ZCgic2NyaXB0
LHN0eWxlLHRleHRhcmVhIiwhMCksUXM9e30sdGM9eyImbHQ7IjoiPCIsIiZndDsiOiI+IiwiJnF1
b3Q7IjonIicsIiZhbXA7IjoiJiIsIiYjMTA7IjoiXG4ifSxlYz0vJig/Omx0fGd0fHF1b3R8YW1w
KTsvZyxuYz0vJig/Omx0fGd0fHF1b3R8YW1wfCMxMCk7L2cscmM9ZCgicHJlLHRleHRhcmVhIiwh
MCksaWM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmcmModCkmJiJcbiI9PT1lWzBdfSxvYz0vXkB8
XnYtb246LyxhYz0vXnYtfF5AfF46LyxzYz0vKC4qPylccysoPzppbnxvZilccysoLiopLyxjYz0v
XCgoXHtbXn1dKlx9fFteLF0qKSwoW14sXSopKD86LChbXixdKikpP1wpLyx1Yz0vOiguKikkLyxs
Yz0vXjp8XnYtYmluZDovLGZjPS9cLlteLl0rL2cscGM9bShTcy5kZWNvZGUpLGRjPS9eeG1sbnM6
TlNcZCsvLGhjPS9eTlNcZCs6Lyx2Yz1tKHRpKSxtYz0vXlxzKihbXHckX10rfFwoW14pXSo/XCkp
XHMqPT58XmZ1bmN0aW9uXHMqXCgvLHljPS9eXHMqW0EtWmEtel8kXVtcdyRdKig/OlwuW0EtWmEt
el8kXVtcdyRdKnxcWycuKj8nXXxcWyIuKj8iXXxcW1xkK118XFtbQS1aYS16XyRdW1x3JF0qXSkq
XHMqJC8sZ2M9e2VzYzoyNyx0YWI6OSxlbnRlcjoxMyxzcGFjZTozMix1cDozOCxsZWZ0OjM3LHJp
Z2h0OjM5LGRvd246NDAsZGVsZXRlOls4LDQ2XX0sX2M9ZnVuY3Rpb24odCl7cmV0dXJuImlmKCIr
dCsiKXJldHVybiBudWxsOyJ9LGJjPXtzdG9wOiIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Iixw
cmV2ZW50OiIkZXZlbnQucHJldmVudERlZmF1bHQoKTsiLHNlbGY6X2MoIiRldmVudC50YXJnZXQg
IT09ICRldmVudC5jdXJyZW50VGFyZ2V0IiksY3RybDpfYygiISRldmVudC5jdHJsS2V5Iiksc2hp
ZnQ6X2MoIiEkZXZlbnQuc2hpZnRLZXkiKSxhbHQ6X2MoIiEkZXZlbnQuYWx0S2V5IiksbWV0YTpf
YygiISRldmVudC5tZXRhS2V5IiksbGVmdDpfYygiJ2J1dHRvbicgaW4gJGV2ZW50ICYmICRldmVu
dC5idXR0b24gIT09IDAiKSxtaWRkbGU6X2MoIididXR0b24nIGluICRldmVudCAmJiAkZXZlbnQu
YnV0dG9uICE9PSAxIikscmlnaHQ6X2MoIididXR0b24nIGluICRldmVudCAmJiAkZXZlbnQuYnV0
dG9uICE9PSAyIil9LHdjPXtvbjp1aSxiaW5kOmxpLGNsb2FrOnd9LCRjPWZ1bmN0aW9uKHQpe3Ro
aXMub3B0aW9ucz10LHRoaXMud2Fybj10Lndhcm58fHZuLHRoaXMudHJhbnNmb3Jtcz1tbih0Lm1v
ZHVsZXMsInRyYW5zZm9ybUNvZGUiKSx0aGlzLmRhdGFHZW5GbnM9bW4odC5tb2R1bGVzLCJnZW5E
YXRhIiksdGhpcy5kaXJlY3RpdmVzPV8oXyh7fSx3YyksdC5kaXJlY3RpdmVzKTt2YXIgZT10Lmlz
UmVzZXJ2ZWRUYWd8fEtpO3RoaXMubWF5YmVDb21wb25lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIWUo
dC50YWcpfSx0aGlzLm9uY2VJZD0wLHRoaXMuc3RhdGljUmVuZGVyRm5zPVtdfSxDYz0obmV3IFJl
Z0V4cCgiXFxiIisiZG8saWYsZm9yLGxldCxuZXcsdHJ5LHZhcixjYXNlLGVsc2Usd2l0aCxhd2Fp
dCxicmVhayxjYXRjaCxjbGFzcyxjb25zdCxzdXBlcix0aHJvdyx3aGlsZSx5aWVsZCxkZWxldGUs
ZXhwb3J0LGltcG9ydCxyZXR1cm4sc3dpdGNoLGRlZmF1bHQsZXh0ZW5kcyxmaW5hbGx5LGNvbnRp
bnVlLGRlYnVnZ2VyLGZ1bmN0aW9uLGFyZ3VtZW50cyIuc3BsaXQoIiwiKS5qb2luKCJcXGJ8XFxi
IikrIlxcYiIpLG5ldyBSZWdFeHAoIlxcYiIrImRlbGV0ZSx0eXBlb2Ysdm9pZCIuc3BsaXQoIiwi
KS5qb2luKCJcXHMqXFwoW15cXCldKlxcKXxcXGIiKSsiXFxzKlxcKFteXFwpXSpcXCkiKSxmdW5j
dGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihuLHIpe3ZhciBpPU9iamVjdC5j
cmVhdGUoZSksbz1bXSxhPVtdO2lmKGkud2Fybj1mdW5jdGlvbih0LGUpeyhlP2E6bykucHVzaCh0
KX0scil7ci5tb2R1bGVzJiYoaS5tb2R1bGVzPShlLm1vZHVsZXN8fFtdKS5jb25jYXQoci5tb2R1
bGVzKSksci5kaXJlY3RpdmVzJiYoaS5kaXJlY3RpdmVzPV8oT2JqZWN0LmNyZWF0ZShlLmRpcmVj
dGl2ZXMpLHIuZGlyZWN0aXZlcykpO2Zvcih2YXIgcyBpbiByKSJtb2R1bGVzIiE9PXMmJiJkaXJl
Y3RpdmVzIiE9PXMmJihpW3NdPXJbc10pfXZhciBjPXQobixpKTtyZXR1cm4gYy5lcnJvcnM9byxj
LnRpcHM9YSxjfXJldHVybntjb21waWxlOm4sY29tcGlsZVRvRnVuY3Rpb25zOklpKG4pfX19KGZ1
bmN0aW9uKHQsZSl7dmFyIG49THIodC50cmltKCksZSk7UXIobixlKTt2YXIgcj1maShuLGUpO3Jl
dHVybnthc3Q6bixyZW5kZXI6ci5yZW5kZXIsc3RhdGljUmVuZGVyRm5zOnIuc3RhdGljUmVuZGVy
Rm5zfX0pKSx4Yz1DYyhPcyksQWM9eGMuY29tcGlsZVRvRnVuY3Rpb25zLGtjPW0oZnVuY3Rpb24o
dCl7dmFyIGU9VWUodCk7cmV0dXJuIGUmJmUuaW5uZXJIVE1MfSksT2M9d2UucHJvdG90eXBlLiRt
b3VudDt3ZS5wcm90b3R5cGUuJG1vdW50PWZ1bmN0aW9uKHQsZSl7aWYoKHQ9dCYmVWUodCkpPT09
ZG9jdW1lbnQuYm9keXx8dD09PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudClyZXR1cm4gdGhpczt2
YXIgbj10aGlzLiRvcHRpb25zO2lmKCFuLnJlbmRlcil7dmFyIHI9bi50ZW1wbGF0ZTtpZihyKWlm
KCJzdHJpbmciPT10eXBlb2YgcikiIyI9PT1yLmNoYXJBdCgwKSYmKHI9a2MocikpO2Vsc2V7aWYo
IXIubm9kZVR5cGUpcmV0dXJuIHRoaXM7cj1yLmlubmVySFRNTH1lbHNlIHQmJihyPVBpKHQpKTtp
ZihyKXt2YXIgaT1BYyhyLHtzaG91bGREZWNvZGVOZXdsaW5lczptcyxkZWxpbWl0ZXJzOm4uZGVs
aW1pdGVycyxjb21tZW50czpuLmNvbW1lbnRzfSx0aGlzKSxvPWkucmVuZGVyLGE9aS5zdGF0aWNS
ZW5kZXJGbnM7bi5yZW5kZXI9byxuLnN0YXRpY1JlbmRlckZucz1hfX1yZXR1cm4gT2MuY2FsbCh0
aGlzLHQsZSl9LHdlLmNvbXBpbGU9QWMsZS5kZWZhdWx0PXdlfS5jYWxsKGUsbigiRHVSMiIpKX0s
RHVSMjpmdW5jdGlvbih0LGUpe3ZhciBuO249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKTt0cnl7
bj1ufHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpfHwoMCxldmFsKSgidGhpcyIpfWNhdGNoKHQp
eyJvYmplY3QiPT10eXBlb2Ygd2luZG93JiYobj13aW5kb3cpfXQuZXhwb3J0cz1ufSwiRlorZiI6
ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBuKHQsZSl7dmFyIG49dFsxXXx8IiIsaT10WzNdO2lmKCFp
KXJldHVybiBuO2lmKGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBidG9hKXt2YXIgbz1yKGkpO3JldHVy
bltuXS5jb25jYXQoaS5zb3VyY2VzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iLyojIHNvdXJjZVVS
TD0iK2kuc291cmNlUm9vdCt0KyIgKi8ifSkpLmNvbmNhdChbb10pLmpvaW4oIlxuIil9cmV0dXJu
W25dLmpvaW4oIlxuIil9ZnVuY3Rpb24gcih0KXtyZXR1cm4iLyojIHNvdXJjZU1hcHBpbmdVUkw9
ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LCIrYnRvYSh1bmVzY2Fw
ZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkodCkpKSkrIiAqLyJ9dC5leHBvcnRz
PWZ1bmN0aW9uKHQpe3ZhciBlPVtdO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJu
IHRoaXMubWFwKGZ1bmN0aW9uKGUpe3ZhciByPW4oZSx0KTtyZXR1cm4gZVsyXT8iQG1lZGlhICIr
ZVsyXSsieyIrcisifSI6cn0pLmpvaW4oIiIpfSxlLmk9ZnVuY3Rpb24odCxuKXsic3RyaW5nIj09
dHlwZW9mIHQmJih0PVtbbnVsbCx0LCIiXV0pO2Zvcih2YXIgcj17fSxpPTA7aTx0aGlzLmxlbmd0
aDtpKyspe3ZhciBvPXRoaXNbaV1bMF07Im51bWJlciI9PXR5cGVvZiBvJiYocltvXT0hMCl9Zm9y
KGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9dFtpXTsibnVtYmVyIj09dHlwZW9mIGFbMF0mJnJb
YVswXV18fChuJiYhYVsyXT9hWzJdPW46biYmKGFbMl09IigiK2FbMl0rIikgYW5kICgiK24rIiki
KSxlLnB1c2goYSkpfX0sZX19LCJWVS84IjpmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlv
bih0LGUsbixyLGkpe3ZhciBvLGE9dD10fHx7fSxzPXR5cGVvZiB0LmRlZmF1bHQ7Im9iamVjdCIh
PT1zJiYiZnVuY3Rpb24iIT09c3x8KG89dCxhPXQuZGVmYXVsdCk7dmFyIGM9ImZ1bmN0aW9uIj09
dHlwZW9mIGE/YS5vcHRpb25zOmE7ZSYmKGMucmVuZGVyPWUucmVuZGVyLGMuc3RhdGljUmVuZGVy
Rm5zPWUuc3RhdGljUmVuZGVyRm5zKSxyJiYoYy5fc2NvcGVJZD1yKTt2YXIgdTtpZihpPyh1PWZ1
bmN0aW9uKHQpe3Q9dHx8dGhpcy4kdm5vZGUmJnRoaXMuJHZub2RlLnNzckNvbnRleHR8fHRoaXMu
cGFyZW50JiZ0aGlzLnBhcmVudC4kdm5vZGUmJnRoaXMucGFyZW50LiR2bm9kZS5zc3JDb250ZXh0
LHR8fCJ1bmRlZmluZWQiPT10eXBlb2YgX19WVUVfU1NSX0NPTlRFWFRfX3x8KHQ9X19WVUVfU1NS
X0NPTlRFWFRfXyksbiYmbi5jYWxsKHRoaXMsdCksdCYmdC5fcmVnaXN0ZXJlZENvbXBvbmVudHMm
JnQuX3JlZ2lzdGVyZWRDb21wb25lbnRzLmFkZChpKX0sYy5fc3NyUmVnaXN0ZXI9dSk6biYmKHU9
biksdSl7dmFyIGw9Yy5mdW5jdGlvbmFsLGY9bD9jLnJlbmRlcjpjLmJlZm9yZUNyZWF0ZTtsP2Mu
cmVuZGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHUuY2FsbChlKSxmKHQsZSl9OmMuYmVmb3JlQ3Jl
YXRlPWY/W10uY29uY2F0KGYsdSk6W3VdfXJldHVybntlc01vZHVsZTpvLGV4cG9ydHM6YSxvcHRp
b25zOmN9fX0scmpqMDpmdW5jdGlvbih0LGUsbil7ZnVuY3Rpb24gcih0KXtmb3IodmFyIGU9MDtl
PHQubGVuZ3RoO2UrKyl7dmFyIG49dFtlXSxyPWxbbi5pZF07aWYocil7ci5yZWZzKys7Zm9yKHZh
ciBpPTA7aTxyLnBhcnRzLmxlbmd0aDtpKyspci5wYXJ0c1tpXShuLnBhcnRzW2ldKTtmb3IoO2k8
bi5wYXJ0cy5sZW5ndGg7aSsrKXIucGFydHMucHVzaChvKG4ucGFydHNbaV0pKTtyLnBhcnRzLmxl
bmd0aD5uLnBhcnRzLmxlbmd0aCYmKHIucGFydHMubGVuZ3RoPW4ucGFydHMubGVuZ3RoKX1lbHNl
e2Zvcih2YXIgYT1bXSxpPTA7aTxuLnBhcnRzLmxlbmd0aDtpKyspYS5wdXNoKG8obi5wYXJ0c1tp
XSkpO2xbbi5pZF09e2lkOm4uaWQscmVmczoxLHBhcnRzOmF9fX19ZnVuY3Rpb24gaSgpe3ZhciB0
PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7cmV0dXJuIHQudHlwZT0idGV4dC9jc3Mi
LGYuYXBwZW5kQ2hpbGQodCksdH1mdW5jdGlvbiBvKHQpe3ZhciBlLG4scj1kb2N1bWVudC5xdWVy
eVNlbGVjdG9yKCdzdHlsZVtkYXRhLXZ1ZS1zc3ItaWR+PSInK3QuaWQrJyJdJyk7aWYocil7aWYo
aClyZXR1cm4gdjtyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocil9aWYobSl7dmFyIG89ZCsrO3I9
cHx8KHA9aSgpKSxlPWEuYmluZChudWxsLHIsbywhMSksbj1hLmJpbmQobnVsbCxyLG8sITApfWVs
c2Ugcj1pKCksZT1zLmJpbmQobnVsbCxyKSxuPWZ1bmN0aW9uKCl7ci5wYXJlbnROb2RlLnJlbW92
ZUNoaWxkKHIpfTtyZXR1cm4gZSh0KSxmdW5jdGlvbihyKXtpZihyKXtpZihyLmNzcz09PXQuY3Nz
JiZyLm1lZGlhPT09dC5tZWRpYSYmci5zb3VyY2VNYXA9PT10LnNvdXJjZU1hcClyZXR1cm47ZSh0
PXIpfWVsc2UgbigpfX1mdW5jdGlvbiBhKHQsZSxuLHIpe3ZhciBpPW4/IiI6ci5jc3M7aWYodC5z
dHlsZVNoZWV0KXQuc3R5bGVTaGVldC5jc3NUZXh0PXkoZSxpKTtlbHNle3ZhciBvPWRvY3VtZW50
LmNyZWF0ZVRleHROb2RlKGkpLGE9dC5jaGlsZE5vZGVzO2FbZV0mJnQucmVtb3ZlQ2hpbGQoYVtl
XSksYS5sZW5ndGg/dC5pbnNlcnRCZWZvcmUobyxhW2VdKTp0LmFwcGVuZENoaWxkKG8pfX1mdW5j
dGlvbiBzKHQsZSl7dmFyIG49ZS5jc3Mscj1lLm1lZGlhLGk9ZS5zb3VyY2VNYXA7aWYociYmdC5z
ZXRBdHRyaWJ1dGUoIm1lZGlhIixyKSxpJiYobis9IlxuLyojIHNvdXJjZVVSTD0iK2kuc291cmNl
c1swXSsiICovIixuKz0iXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pz
b247YmFzZTY0LCIrYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdp
ZnkoaSkpKSkrIiAqLyIpLHQuc3R5bGVTaGVldCl0LnN0eWxlU2hlZXQuY3NzVGV4dD1uO2Vsc2V7
Zm9yKDt0LmZpcnN0Q2hpbGQ7KXQucmVtb3ZlQ2hpbGQodC5maXJzdENoaWxkKTt0LmFwcGVuZENo
aWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG4pKX19dmFyIGM9InVuZGVmaW5lZCIhPXR5cGVv
ZiBkb2N1bWVudDtpZigidW5kZWZpbmVkIiE9dHlwZW9mIERFQlVHJiZERUJVRyYmIWMpdGhyb3cg
bmV3IEVycm9yKCJ2dWUtc3R5bGUtbG9hZGVyIGNhbm5vdCBiZSB1c2VkIGluIGEgbm9uLWJyb3dz
ZXIgZW52aXJvbm1lbnQuIFVzZSB7IHRhcmdldDogJ25vZGUnIH0gaW4geW91ciBXZWJwYWNrIGNv
bmZpZyB0byBpbmRpY2F0ZSBhIHNlcnZlci1yZW5kZXJpbmcgZW52aXJvbm1lbnQuIik7dmFyIHU9
bigidFRWayIpLGw9e30sZj1jJiYoZG9jdW1lbnQuaGVhZHx8ZG9jdW1lbnQuZ2V0RWxlbWVudHNC
eVRhZ05hbWUoImhlYWQiKVswXSkscD1udWxsLGQ9MCxoPSExLHY9ZnVuY3Rpb24oKXt9LG09InVu
ZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3ImJi9tc2llIFs2LTldXGIvLnRlc3QobmF2aWdhdG9y
LnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe2g9bjt2
YXIgaT11KHQsZSk7cmV0dXJuIHIoaSksZnVuY3Rpb24oZSl7Zm9yKHZhciBuPVtdLG89MDtvPGku
bGVuZ3RoO28rKyl7dmFyIGE9aVtvXSxzPWxbYS5pZF07cy5yZWZzLS0sbi5wdXNoKHMpfWU/KGk9
dSh0LGUpLHIoaSkpOmk9W107Zm9yKHZhciBvPTA7bzxuLmxlbmd0aDtvKyspe3ZhciBzPW5bb107
aWYoMD09PXMucmVmcyl7Zm9yKHZhciBjPTA7YzxzLnBhcnRzLmxlbmd0aDtjKyspcy5wYXJ0c1tj
XSgpO2RlbGV0ZSBsW3MuaWRdfX19fTt2YXIgeT1mdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiBm
dW5jdGlvbihlLG4pe3JldHVybiB0W2VdPW4sdC5maWx0ZXIoQm9vbGVhbikuam9pbigiXG4iKX19
KCl9LHJtbmg6ZnVuY3Rpb24odCxlLG4peyFmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJu
IiI9PT11Lmhhc2h8fCIjIj09PXUuaGFzaH1mdW5jdGlvbiBuKHQsZSl7Zm9yKHZhciBuPTA7bjx0
Lmxlbmd0aDtuKz0xKWlmKCExPT09ZSh0W25dLG4sdCkpcmV0dXJufWZ1bmN0aW9uIHIodCl7Zm9y
KHZhciBlPVtdLG49MCxyPXQubGVuZ3RoO248cjtuKyspZT1lLmNvbmNhdCh0W25dKTtyZXR1cm4g
ZX1mdW5jdGlvbiBpKHQsZSxuKXtpZighdC5sZW5ndGgpcmV0dXJuIG4oKTt2YXIgcj0wOyFmdW5j
dGlvbiBpKCl7ZSh0W3JdLGZ1bmN0aW9uKGUpe2V8fCExPT09ZT8obihlKSxuPWZ1bmN0aW9uKCl7
fSk6KHIrPTEscj09PXQubGVuZ3RoP24oKTppKCkpfSl9KCl9ZnVuY3Rpb24gbyh0LGUsbil7bj10
O2Zvcih2YXIgciBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkocikmJihuPWVbcl0odCkpIT09dCli
cmVhaztyZXR1cm4gbj09PXQ/IihbLl9hLXpBLVowLTktJSgpXSspIjpufWZ1bmN0aW9uIGEodCxl
KXtmb3IodmFyIG4scj0wLGk9IiI7bj10LnN1YnN0cihyKS5tYXRjaCgvW15cd1xkXC0gJUAmXSpc
KlteXHdcZFwtICVAJl0qLyk7KXI9bi5pbmRleCtuWzBdLmxlbmd0aCxuWzBdPW5bMF0ucmVwbGFj
ZSgvXlwqLywiKFtfLigpIVxcICVAJmEtekEtWjAtOS1dKykiKSxpKz10LnN1YnN0cigwLG4uaW5k
ZXgpK25bMF07dD1pKz10LnN1YnN0cihyKTt2YXIgYSxzLGM9dC5tYXRjaCgvOihbXlwvXSspL2dp
KTtpZihjKXtzPWMubGVuZ3RoO2Zvcih2YXIgdT0wO3U8czt1KyspYT1jW3VdLHQ9Ijo6Ij09PWEu
c2xpY2UoMCwyKT9hLnNsaWNlKDEpOnQucmVwbGFjZShhLG8oYSxlKSl9cmV0dXJuIHR9ZnVuY3Rp
b24gYyh0LGUsbixyKXt2YXIgaSxvPTAsYT0wLHM9MCxuPShufHwiKCIpLnRvU3RyaW5nKCkscj0o
cnx8IikiKS50b1N0cmluZygpO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBjPXRbaV07aWYo
Yy5pbmRleE9mKG4sbyk+Yy5pbmRleE9mKHIsbyl8fH5jLmluZGV4T2YobixvKSYmIX5jLmluZGV4
T2YocixvKXx8IX5jLmluZGV4T2YobixvKSYmfmMuaW5kZXhPZihyLG8pKXtpZihhPWMuaW5kZXhP
ZihuLG8pLHM9Yy5pbmRleE9mKHIsbyksfmEmJiF+c3x8IX5hJiZ+cyl7dD1bdC5zbGljZSgwLChp
fHwxKSsxKS5qb2luKGUpXS5jb25jYXQodC5zbGljZSgoaXx8MSkrMSkpfW89KHM+YT9zOmEpKzEs
aT0wfWVsc2Ugbz0wfXJldHVybiB0fXZhciB1PWRvY3VtZW50LmxvY2F0aW9uLGw9e21vZGU6Im1v
ZGVybiIsaGFzaDp1Lmhhc2gsaGlzdG9yeTohMSxjaGVjazpmdW5jdGlvbigpe3ZhciB0PXUuaGFz
aDt0IT10aGlzLmhhc2gmJih0aGlzLmhhc2g9dCx0aGlzLm9uSGFzaENoYW5nZWQoKSl9LGZpcmU6
ZnVuY3Rpb24oKXsibW9kZXJuIj09PXRoaXMubW9kZT8hMD09PXRoaXMuaGlzdG9yeT93aW5kb3cu
b25wb3BzdGF0ZSgpOndpbmRvdy5vbmhhc2hjaGFuZ2UoKTp0aGlzLm9uSGFzaENoYW5nZWQoKX0s
aW5pdDpmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4odCl7Zm9yKHZhciBlPTAsbj1mLmxpc3RlbmVy
cy5sZW5ndGg7ZTxuO2UrKylmLmxpc3RlbmVyc1tlXSh0KX12YXIgcj10aGlzO2lmKHRoaXMuaGlz
dG9yeT1lLGYubGlzdGVuZXJzfHwoZi5saXN0ZW5lcnM9W10pLCJvbmhhc2hjaGFuZ2UiaW4gd2lu
ZG93JiYodm9pZCAwPT09ZG9jdW1lbnQuZG9jdW1lbnRNb2RlfHxkb2N1bWVudC5kb2N1bWVudE1v
ZGU+NykpITA9PT10aGlzLmhpc3Rvcnk/c2V0VGltZW91dChmdW5jdGlvbigpe3dpbmRvdy5vbnBv
cHN0YXRlPW59LDUwMCk6d2luZG93Lm9uaGFzaGNoYW5nZT1uLHRoaXMubW9kZT0ibW9kZXJuIjtl
bHNle3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpO2kuaWQ9InN0YXRlLWZy
YW1lIixpLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaSks
dGhpcy53cml0ZUZyYW1lKCIiKSwib25wcm9wZXJ0eWNoYW5nZSJpbiBkb2N1bWVudCYmImF0dGFj
aEV2ZW50ImluIGRvY3VtZW50JiZkb2N1bWVudC5hdHRhY2hFdmVudCgib25wcm9wZXJ0eWNoYW5n
ZSIsZnVuY3Rpb24oKXsibG9jYXRpb24iPT09ZXZlbnQucHJvcGVydHlOYW1lJiZyLmNoZWNrKCl9
KSx3aW5kb3cuc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtyLmNoZWNrKCl9LDUwKSx0aGlzLm9uSGFz
aENoYW5nZWQ9bix0aGlzLm1vZGU9ImxlZ2FjeSJ9cmV0dXJuIGYubGlzdGVuZXJzLnB1c2godCks
dGhpcy5tb2RlfSxkZXN0cm95OmZ1bmN0aW9uKHQpe2lmKGYmJmYubGlzdGVuZXJzKWZvcih2YXIg
ZT1mLmxpc3RlbmVycyxuPWUubGVuZ3RoLTE7bj49MDtuLS0pZVtuXT09PXQmJmUuc3BsaWNlKG4s
MSl9LHNldEhhc2g6ZnVuY3Rpb24odCl7cmV0dXJuImxlZ2FjeSI9PT10aGlzLm1vZGUmJnRoaXMu
d3JpdGVGcmFtZSh0KSwhMD09PXRoaXMuaGlzdG9yeT8od2luZG93Lmhpc3RvcnkucHVzaFN0YXRl
KHt9LGRvY3VtZW50LnRpdGxlLHQpLHRoaXMuZmlyZSgpKTp1Lmhhc2g9Ii8iPT09dFswXT90OiIv
Iit0LHRoaXN9LHdyaXRlRnJhbWU6ZnVuY3Rpb24odCl7dmFyIGU9ZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoInN0YXRlLWZyYW1lIiksbj1lLmNvbnRlbnREb2N1bWVudHx8ZS5jb250ZW50V2luZG93
LmRvY3VtZW50O24ub3BlbigpLG4ud3JpdGUoIjxzY3JpcHQ+X2hhc2ggPSAnIit0KyInOyBvbmxv
YWQgPSBwYXJlbnQubGlzdGVuZXIuc3luY0hhc2g7PHNjcmlwdD4iKSxuLmNsb3NlKCl9LHN5bmNI
YXNoOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faGFzaDtyZXR1cm4gdCE9dS5oYXNoJiYodS5oYXNo
PXQpLHRoaXN9LG9uSGFzaENoYW5nZWQ6ZnVuY3Rpb24oKXt9fSxmPXQuUm91dGVyPWZ1bmN0aW9u
KHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGYpKXJldHVybiBuZXcgZih0KTt0aGlzLnBhcmFtcz17
fSx0aGlzLnJvdXRlcz17fSx0aGlzLm1ldGhvZHM9WyJvbiIsIm9uY2UiLCJhZnRlciIsImJlZm9y
ZSJdLHRoaXMuc2NvcGU9W10sdGhpcy5fbWV0aG9kcz17fSx0aGlzLl9pbnNlcnQ9dGhpcy5pbnNl
cnQsdGhpcy5pbnNlcnQ9dGhpcy5pbnNlcnRFeCx0aGlzLmhpc3RvcnlTdXBwb3J0PW51bGwhPShu
dWxsIT13aW5kb3cuaGlzdG9yeT93aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGU6bnVsbCksdGhpcy5j
b25maWd1cmUoKSx0aGlzLm1vdW50KHR8fHt9KX07Zi5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbih0
KXt2YXIgbixyPXRoaXM7cmV0dXJuIHRoaXMuaGFuZGxlcj1mdW5jdGlvbih0KXt2YXIgZT10JiZ0
Lm5ld1VSTHx8d2luZG93LmxvY2F0aW9uLmhhc2gsbj0hMD09PXIuaGlzdG9yeT9yLmdldFBhdGgo
KTplLnJlcGxhY2UoLy4qIy8sIiIpO3IuZGlzcGF0Y2goIm9uIiwiLyI9PT1uLmNoYXJBdCgwKT9u
OiIvIituKX0sbC5pbml0KHRoaXMuaGFuZGxlcix0aGlzLmhpc3RvcnkpLCExPT09dGhpcy5oaXN0
b3J5P2UoKSYmdD91Lmhhc2g9dDplKCl8fHIuZGlzcGF0Y2goIm9uIiwiLyIrdS5oYXNoLnJlcGxh
Y2UoL14oI1wvfCN8XC8pLywiIikpOih0aGlzLmNvbnZlcnRfaGFzaF9pbl9pbml0PyhuPWUoKSYm
dD90OmUoKT9udWxsOnUuaGFzaC5yZXBsYWNlKC9eIy8sIiIpKSYmd2luZG93Lmhpc3RvcnkucmVw
bGFjZVN0YXRlKHt9LGRvY3VtZW50LnRpdGxlLG4pOm49dGhpcy5nZXRQYXRoKCksKG58fCEwPT09
dGhpcy5ydW5faW5faW5pdCkmJnRoaXMuaGFuZGxlcigpKSx0aGlzfSxmLnByb3RvdHlwZS5leHBs
b2RlPWZ1bmN0aW9uKCl7dmFyIHQ9ITA9PT10aGlzLmhpc3Rvcnk/dGhpcy5nZXRQYXRoKCk6dS5o
YXNoO3JldHVybiIvIj09PXQuY2hhckF0KDEpJiYodD10LnNsaWNlKDEpKSx0LnNsaWNlKDEsdC5s
ZW5ndGgpLnNwbGl0KCIvIil9LGYucHJvdG90eXBlLnNldFJvdXRlPWZ1bmN0aW9uKHQsZSxuKXt2
YXIgcj10aGlzLmV4cGxvZGUoKTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJiJzdHJpbmciPT10
eXBlb2YgZT9yW3RdPWU6InN0cmluZyI9PXR5cGVvZiBuP3Iuc3BsaWNlKHQsZSxzKTpyPVt0XSxs
LnNldEhhc2goci5qb2luKCIvIikpLHJ9LGYucHJvdG90eXBlLmluc2VydEV4PWZ1bmN0aW9uKHQs
ZSxuLHIpe3JldHVybiJvbmNlIj09PXQmJih0PSJvbiIsbj1mdW5jdGlvbih0KXt2YXIgZT0hMTty
ZXR1cm4gZnVuY3Rpb24oKXtpZighZSlyZXR1cm4gZT0hMCx0LmFwcGx5KHRoaXMsYXJndW1lbnRz
KX19KG4pKSx0aGlzLl9pbnNlcnQodCxlLG4scil9LGYucHJvdG90eXBlLmdldFJvdXRlPWZ1bmN0
aW9uKHQpe3ZhciBlPXQ7aWYoIm51bWJlciI9PXR5cGVvZiB0KWU9dGhpcy5leHBsb2RlKClbdF07
ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciBuPXRoaXMuZXhwbG9kZSgpO2U9bi5pbmRl
eE9mKHQpfWVsc2UgZT10aGlzLmV4cGxvZGUoKTtyZXR1cm4gZX0sZi5wcm90b3R5cGUuZGVzdHJv
eT1mdW5jdGlvbigpe3JldHVybiBsLmRlc3Ryb3kodGhpcy5oYW5kbGVyKSx0aGlzfSxmLnByb3Rv
dHlwZS5nZXRQYXRoPWZ1bmN0aW9uKCl7dmFyIHQ9d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lO3Jl
dHVybiIvIiE9PXQuc3Vic3RyKDAsMSkmJih0PSIvIit0KSx0fTt2YXIgcD0vXD8uKi87Zi5wcm90
b3R5cGUuY29uZmlndXJlPWZ1bmN0aW9uKHQpe3Q9dHx8e307Zm9yKHZhciBlPTA7ZTx0aGlzLm1l
dGhvZHMubGVuZ3RoO2UrKyl0aGlzLl9tZXRob2RzW3RoaXMubWV0aG9kc1tlXV09ITA7cmV0dXJu
IHRoaXMucmVjdXJzZT10LnJlY3Vyc2V8fHRoaXMucmVjdXJzZXx8ITEsdGhpcy5hc3luYz10LmFz
eW5jfHwhMSx0aGlzLmRlbGltaXRlcj10LmRlbGltaXRlcnx8Ii8iLHRoaXMuc3RyaWN0PXZvaWQg
MD09PXQuc3RyaWN0fHx0LnN0cmljdCx0aGlzLm5vdGZvdW5kPXQubm90Zm91bmQsdGhpcy5yZXNv
dXJjZT10LnJlc291cmNlLHRoaXMuaGlzdG9yeT10Lmh0bWw1aGlzdG9yeSYmdGhpcy5oaXN0b3J5
U3VwcG9ydHx8ITEsdGhpcy5ydW5faW5faW5pdD0hMD09PXRoaXMuaGlzdG9yeSYmITEhPT10LnJ1
bl9oYW5kbGVyX2luX2luaXQsdGhpcy5jb252ZXJ0X2hhc2hfaW5faW5pdD0hMD09PXRoaXMuaGlz
dG9yeSYmITEhPT10LmNvbnZlcnRfaGFzaF9pbl9pbml0LHRoaXMuZXZlcnk9e2FmdGVyOnQuYWZ0
ZXJ8fG51bGwsYmVmb3JlOnQuYmVmb3JlfHxudWxsLG9uOnQub258fG51bGx9LHRoaXN9LGYucHJv
dG90eXBlLnBhcmFtPWZ1bmN0aW9uKHQsZSl7IjoiIT09dFswXSYmKHQ9IjoiK3QpO3ZhciBuPW5l
dyBSZWdFeHAodCwiZyIpO3JldHVybiB0aGlzLnBhcmFtc1t0XT1mdW5jdGlvbih0KXtyZXR1cm4g
dC5yZXBsYWNlKG4sZS5zb3VyY2V8fGUpfSx0aGlzfSxmLnByb3RvdHlwZS5vbj1mLnByb3RvdHlw
ZS5yb3V0ZT1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcztyZXR1cm4gbnx8ImZ1bmN0aW9uIiE9
dHlwZW9mIGV8fChuPWUsZT10LHQ9Im9uIiksQXJyYXkuaXNBcnJheShlKT9lLmZvckVhY2goZnVu
Y3Rpb24oZSl7ci5vbih0LGUsbil9KTooZS5zb3VyY2UmJihlPWUuc291cmNlLnJlcGxhY2UoL1xc
XC8vZ2ksIi8iKSksQXJyYXkuaXNBcnJheSh0KT90LmZvckVhY2goZnVuY3Rpb24odCl7ci5vbih0
LnRvTG93ZXJDYXNlKCksZSxuKX0pOihlPWUuc3BsaXQobmV3IFJlZ0V4cCh0aGlzLmRlbGltaXRl
cikpLGU9YyhlLHRoaXMuZGVsaW1pdGVyKSx2b2lkIHRoaXMuaW5zZXJ0KHQsdGhpcy5zY29wZS5j
b25jYXQoZSksbikpKX0sZi5wcm90b3R5cGUucGF0aD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMu
c2NvcGUubGVuZ3RoO3Quc291cmNlJiYodD10LnNvdXJjZS5yZXBsYWNlKC9cXFwvL2dpLCIvIikp
LHQ9dC5zcGxpdChuZXcgUmVnRXhwKHRoaXMuZGVsaW1pdGVyKSksdD1jKHQsdGhpcy5kZWxpbWl0
ZXIpLHRoaXMuc2NvcGU9dGhpcy5zY29wZS5jb25jYXQodCksZS5jYWxsKHRoaXMsdGhpcyksdGhp
cy5zY29wZS5zcGxpY2Uobix0Lmxlbmd0aCl9LGYucHJvdG90eXBlLmRpc3BhdGNoPWZ1bmN0aW9u
KHQsZSxuKXtmdW5jdGlvbiByKCl7by5sYXN0PWEuYWZ0ZXIsby5pbnZva2Uoby5ydW5saXN0KGEp
LG8sbil9dmFyIGksbz10aGlzLGE9dGhpcy50cmF2ZXJzZSh0LGUucmVwbGFjZShwLCIiKSx0aGlz
LnJvdXRlcywiIikscz10aGlzLl9pbnZva2VkO3JldHVybiB0aGlzLl9pbnZva2VkPSEwLGEmJjAh
PT1hLmxlbmd0aD8oImZvcndhcmQiPT09dGhpcy5yZWN1cnNlJiYoYT1hLnJldmVyc2UoKSksKGk9
dGhpcy5ldmVyeSYmdGhpcy5ldmVyeS5hZnRlcj9bdGhpcy5ldmVyeS5hZnRlcl0uY29uY2F0KHRo
aXMubGFzdCk6W3RoaXMubGFzdF0pJiZpLmxlbmd0aD4wJiZzPyh0aGlzLmFzeW5jP3RoaXMuaW52
b2tlKGksdGhpcyxyKToodGhpcy5pbnZva2UoaSx0aGlzKSxyKCkpLCEwKToocigpLCEwKSk6KHRo
aXMubGFzdD1bXSwiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5ub3Rmb3VuZCYmdGhpcy5pbnZva2Uo
W3RoaXMubm90Zm91bmRdLHttZXRob2Q6dCxwYXRoOmV9LG4pLCExKX0sZi5wcm90b3R5cGUuaW52
b2tlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbyxhPXRoaXM7dGhpcy5hc3luYz8obz1mdW5jdGlvbihu
LHIpe2lmKEFycmF5LmlzQXJyYXkobikpcmV0dXJuIGkobixvLHIpOyJmdW5jdGlvbiI9PXR5cGVv
ZiBuJiZuLmFwcGx5KGUsKHQuY2FwdHVyZXN8fFtdKS5jb25jYXQocikpfSxpKHQsbyxmdW5jdGlv
bigpe3ImJnIuYXBwbHkoZSxhcmd1bWVudHMpfSkpOihvPWZ1bmN0aW9uKHIpe3JldHVybiBBcnJh
eS5pc0FycmF5KHIpP24ocixvKToiZnVuY3Rpb24iPT10eXBlb2Ygcj9yLmFwcGx5KGUsdC5jYXB0
dXJlc3x8W10pOnZvaWQoInN0cmluZyI9PXR5cGVvZiByJiZhLnJlc291cmNlJiZhLnJlc291cmNl
W3JdLmFwcGx5KGUsdC5jYXB0dXJlc3x8W10pKX0sbih0LG8pKX0sZi5wcm90b3R5cGUudHJhdmVy
c2U9ZnVuY3Rpb24odCxlLG4scixpKXtmdW5jdGlvbiBvKHQpe2Z1bmN0aW9uIGUodCl7Zm9yKHZh
ciBuPVtdLHI9MDtyPHQubGVuZ3RoO3IrKyluW3JdPUFycmF5LmlzQXJyYXkodFtyXSk/ZSh0W3Jd
KTp0W3JdO3JldHVybiBufWZ1bmN0aW9uIG4odCl7Zm9yKHZhciBlPXQubGVuZ3RoLTE7ZT49MDtl
LS0pQXJyYXkuaXNBcnJheSh0W2VdKT8obih0W2VdKSwwPT09dFtlXS5sZW5ndGgmJnQuc3BsaWNl
KGUsMSkpOmkodFtlXSl8fHQuc3BsaWNlKGUsMSl9aWYoIWkpcmV0dXJuIHQ7dmFyIHI9ZSh0KTty
ZXR1cm4gci5tYXRjaGVkPXQubWF0Y2hlZCxyLmNhcHR1cmVzPXQuY2FwdHVyZXMsci5hZnRlcj10
LmFmdGVyLmZpbHRlcihpKSxuKHIpLHJ9dmFyIGEscyxjLHUsbD1bXTtpZihlPT09dGhpcy5kZWxp
bWl0ZXImJm5bdF0pcmV0dXJuIHU9W1tuLmJlZm9yZSxuW3RdXS5maWx0ZXIoQm9vbGVhbildLHUu
YWZ0ZXI9W24uYWZ0ZXJdLmZpbHRlcihCb29sZWFuKSx1Lm1hdGNoZWQ9ITAsdS5jYXB0dXJlcz1b
XSxvKHUpO2Zvcih2YXIgZiBpbiBuKWlmKG4uaGFzT3duUHJvcGVydHkoZikmJighdGhpcy5fbWV0
aG9kc1tmXXx8dGhpcy5fbWV0aG9kc1tmXSYmIm9iamVjdCI9PXR5cGVvZiBuW2ZdJiYhQXJyYXku
aXNBcnJheShuW2ZdKSkpe2lmKGE9cz1yK3RoaXMuZGVsaW1pdGVyK2YsdGhpcy5zdHJpY3R8fChz
Kz0iWyIrdGhpcy5kZWxpbWl0ZXIrIl0/IiksIShjPWUubWF0Y2gobmV3IFJlZ0V4cCgiXiIrcykp
KSljb250aW51ZTtpZihjWzBdJiZjWzBdPT1lJiZuW2ZdW3RdKXJldHVybiB1PVtbbltmXS5iZWZv
cmUsbltmXVt0XV0uZmlsdGVyKEJvb2xlYW4pXSx1LmFmdGVyPVtuW2ZdLmFmdGVyXS5maWx0ZXIo
Qm9vbGVhbiksdS5tYXRjaGVkPSEwLHUuY2FwdHVyZXM9Yy5zbGljZSgxKSx0aGlzLnJlY3Vyc2Um
Jm49PT10aGlzLnJvdXRlcyYmKHUucHVzaChbbi5iZWZvcmUsbi5vbl0uZmlsdGVyKEJvb2xlYW4p
KSx1LmFmdGVyPXUuYWZ0ZXIuY29uY2F0KFtuLmFmdGVyXS5maWx0ZXIoQm9vbGVhbikpKSxvKHUp
O2lmKHU9dGhpcy50cmF2ZXJzZSh0LGUsbltmXSxhKSx1Lm1hdGNoZWQpcmV0dXJuIHUubGVuZ3Ro
PjAmJihsPWwuY29uY2F0KHUpKSx0aGlzLnJlY3Vyc2UmJihsLnB1c2goW25bZl0uYmVmb3JlLG5b
Zl0ub25dLmZpbHRlcihCb29sZWFuKSksdS5hZnRlcj11LmFmdGVyLmNvbmNhdChbbltmXS5hZnRl
cl0uZmlsdGVyKEJvb2xlYW4pKSxuPT09dGhpcy5yb3V0ZXMmJihsLnB1c2goW24uYmVmb3JlLG4u
b25dLmZpbHRlcihCb29sZWFuKSksdS5hZnRlcj11LmFmdGVyLmNvbmNhdChbbi5hZnRlcl0uZmls
dGVyKEJvb2xlYW4pKSkpLGwubWF0Y2hlZD0hMCxsLmNhcHR1cmVzPXUuY2FwdHVyZXMsbC5hZnRl
cj11LmFmdGVyLG8obCl9cmV0dXJuITF9LGYucHJvdG90eXBlLmluc2VydD1mdW5jdGlvbih0LGUs
bixyKXt2YXIgaSxvLHMsYztpZihlPWUuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0Lmxl
bmd0aD4wfSkscj1yfHx0aGlzLnJvdXRlcyxjPWUuc2hpZnQoKSwvXDp8XCovLnRlc3QoYykmJiEv
XFxkfFxcdy8udGVzdChjKSYmKGM9YShjLHRoaXMucGFyYW1zKSksZS5sZW5ndGg+MClyZXR1cm4g
cltjXT1yW2NdfHx7fSx0aGlzLmluc2VydCh0LGUsbixyW2NdKTtpZihjfHxlLmxlbmd0aHx8ciE9
PXRoaXMucm91dGVzKXtpZihpPXR5cGVvZiByW2NdLG89QXJyYXkuaXNBcnJheShyW2NdKSxyW2Nd
JiYhbyYmIm9iamVjdCI9PWkpc3dpdGNoKHR5cGVvZiByW2NdW3RdKXtjYXNlImZ1bmN0aW9uIjpy
ZXR1cm4gdm9pZChyW2NdW3RdPVtyW2NdW3RdLG5dKTtjYXNlIm9iamVjdCI6cmV0dXJuIHZvaWQg
cltjXVt0XS5wdXNoKG4pO2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4gdm9pZChyW2NdW3RdPW4pfWVs
c2UgaWYoInVuZGVmaW5lZCI9PWkpcmV0dXJuIHM9e30sc1t0XT1uLHZvaWQocltjXT1zKTt0aHJv
dyBuZXcgRXJyb3IoIkludmFsaWQgcm91dGUgY29udGV4dDogIitpKX1zd2l0Y2godHlwZW9mIHJb
dF0pe2Nhc2UiZnVuY3Rpb24iOnJldHVybiB2b2lkKHJbdF09W3JbdF0sbl0pO2Nhc2Uib2JqZWN0
IjpyZXR1cm4gdm9pZCByW3RdLnB1c2gobik7Y2FzZSJ1bmRlZmluZWQiOnJldHVybiB2b2lkKHJb
dF09bil9fSxmLnByb3RvdHlwZS5leHRlbmQ9ZnVuY3Rpb24odCl7dmFyIGUsbj10aGlzLHI9dC5s
ZW5ndGg7Zm9yKGU9MDtlPHI7ZSsrKSFmdW5jdGlvbih0KXtuLl9tZXRob2RzW3RdPSEwLG5bdF09
ZnVuY3Rpb24oKXt2YXIgZT0xPT09YXJndW1lbnRzLmxlbmd0aD9bdCwiIl06W3RdO24ub24uYXBw
bHkobixlLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKSl9fSh0
W2VdKX0sZi5wcm90b3R5cGUucnVubGlzdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmV2ZXJ5JiZ0
aGlzLmV2ZXJ5LmJlZm9yZT9bdGhpcy5ldmVyeS5iZWZvcmVdLmNvbmNhdChyKHQpKTpyKHQpO3Jl
dHVybiB0aGlzLmV2ZXJ5JiZ0aGlzLmV2ZXJ5Lm9uJiZlLnB1c2godGhpcy5ldmVyeS5vbiksZS5j
YXB0dXJlcz10LmNhcHR1cmVzLGUuc291cmNlPXQuc291cmNlLGV9LGYucHJvdG90eXBlLm1vdW50
PWZ1bmN0aW9uKHQsZSl7aWYodCYmIm9iamVjdCI9PXR5cGVvZiB0JiYhQXJyYXkuaXNBcnJheSh0
KSl7dmFyIG49dGhpcztlPWV8fFtdLEFycmF5LmlzQXJyYXkoZSl8fChlPWUuc3BsaXQobi5kZWxp
bWl0ZXIpKTtmb3IodmFyIHIgaW4gdCl0Lmhhc093blByb3BlcnR5KHIpJiZmdW5jdGlvbihlLHIp
e3ZhciBpPWUsbz1lLnNwbGl0KG4uZGVsaW1pdGVyKSxhPXR5cGVvZiB0W2VdLHM9IiI9PT1vWzBd
fHwhbi5fbWV0aG9kc1tvWzBdXSx1PXM/Im9uIjppO2lmKHMmJihpPWkuc2xpY2UoKGkubWF0Y2go
bmV3IFJlZ0V4cCgiXiIrbi5kZWxpbWl0ZXIpKXx8WyIiXSlbMF0ubGVuZ3RoKSxvLnNoaWZ0KCkp
LHMmJiJvYmplY3QiPT09YSYmIUFycmF5LmlzQXJyYXkodFtlXSkpcmV0dXJuIHI9ci5jb25jYXQo
byksdm9pZCBuLm1vdW50KHRbZV0scik7cyYmKHI9ci5jb25jYXQoaS5zcGxpdChuLmRlbGltaXRl
cikpLHI9YyhyLG4uZGVsaW1pdGVyKSksbi5pbnNlcnQodSxyLHRbZV0pfShyLGUuc2xpY2UoMCkp
fX19KGUpfSx0VFZrOmZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZh
ciBuPVtdLHI9e30saT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbz1lW2ldLGE9b1swXSxzPW9bMV0s
Yz1vWzJdLHU9b1szXSxsPXtpZDp0KyI6IitpLGNzczpzLG1lZGlhOmMsc291cmNlTWFwOnV9O3Jb
YV0/clthXS5wYXJ0cy5wdXNoKGwpOm4ucHVzaChyW2FdPXtpZDphLHBhcnRzOltsXX0pfXJldHVy
biBufX19KTsKKy8vIyBzb3VyY2VNYXBwaW5nVVJMPXZlbmRvci5lNzAwODAwMWE4YmVkMDA5YmJm
MS5qcy5tYXAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9XZWJzaXRl
cy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hp
dGVjdHVyZS1leGFtcGxlcy92dWVqcy1jbGkvZGlzdC9zdGF0aWMvanMvdmVuZG9yLmU3MDA4MDAx
YThiZWQwMDliYmYxLmpzLm1hcCBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0
ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3Z1ZWpzLWNsaS9k
aXN0L3N0YXRpYy9qcy92ZW5kb3IuZTcwMDgwMDFhOGJlZDAwOWJiZjEuanMubWFwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmQzMGNlZGRkZjlmNDZjOTI0MjFjMTIxODU4ZGIwY2Y1NGZhYmZiYTcKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy92dWVqcy1jbGkvZGlzdC9zdGF0aWMvanMv
dmVuZG9yLmU3MDA4MDAxYThiZWQwMDliYmYxLmpzLm1hcApAQCAtMCwwICsxIEBACit7InZlcnNp
b24iOjMsInNvdXJjZXMiOlsid2VicGFjazovLy9zdGF0aWMvanMvdmVuZG9yLmU3MDA4MDAxYThi
ZWQwMDliYmYxLmpzIiwid2VicGFjazovLy8uL34vdnVlL2Rpc3QvdnVlLmVzbS5qcyIsIndlYnBh
Y2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL34vY3NzLWxv
YWRlci9saWIvY3NzLWJhc2UuanMiLCJ3ZWJwYWNrOi8vLy4vfi92dWUtbG9hZGVyL2xpYi9jb21w
b25lbnQtbm9ybWFsaXplci5qcyIsIndlYnBhY2s6Ly8vLi9+L3Z1ZS1zdHlsZS1sb2FkZXIvbGli
L2FkZFN0eWxlc0NsaWVudC5qcyIsIndlYnBhY2s6Ly8vLi9+L2RpcmVjdG9yL2J1aWxkL2RpcmVj
dG9yLmpzIiwid2VicGFjazovLy8uL34vdnVlLXN0eWxlLWxvYWRlci9saWIvbGlzdFRvU3R5bGVz
LmpzIl0sIm5hbWVzIjpbIndlYnBhY2tKc29ucCIsIjcrdVciLCJtb2R1bGUiLCJfX3dlYnBhY2tf
ZXhwb3J0c19fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5
IiwidmFsdWUiLCJnbG9iYWwiLCJpc1VuZGVmIiwidiIsInVuZGVmaW5lZCIsImlzRGVmIiwiaXNU
cnVlIiwiaXNGYWxzZSIsImlzUHJpbWl0aXZlIiwiaXNPYmplY3QiLCJvYmoiLCJpc1BsYWluT2Jq
ZWN0IiwiX3RvU3RyaW5nIiwiY2FsbCIsImlzUmVnRXhwIiwiaXNWYWxpZEFycmF5SW5kZXgiLCJ2
YWwiLCJuIiwicGFyc2VGbG9hdCIsIk1hdGgiLCJmbG9vciIsImlzRmluaXRlIiwidG9TdHJpbmci
LCJKU09OIiwic3RyaW5naWZ5IiwiU3RyaW5nIiwidG9OdW1iZXIiLCJpc05hTiIsIm1ha2VNYXAi
LCJzdHIiLCJleHBlY3RzTG93ZXJDYXNlIiwibWFwIiwiY3JlYXRlIiwibGlzdCIsInNwbGl0Iiwi
aSIsImxlbmd0aCIsInRvTG93ZXJDYXNlIiwicmVtb3ZlIiwiYXJyIiwiaXRlbSIsImluZGV4Iiwi
aW5kZXhPZiIsInNwbGljZSIsImhhc093biIsImtleSIsImhhc093blByb3BlcnR5IiwiY2FjaGVk
IiwiZm4iLCJjYWNoZSIsImJpbmQiLCJjdHgiLCJib3VuZEZuIiwiYSIsImwiLCJhcmd1bWVudHMi
LCJhcHBseSIsIl9sZW5ndGgiLCJ0b0FycmF5Iiwic3RhcnQiLCJyZXQiLCJBcnJheSIsImV4dGVu
ZCIsInRvIiwiX2Zyb20iLCJ0b09iamVjdCIsInJlcyIsIm5vb3AiLCJiIiwiYyIsImxvb3NlRXF1
YWwiLCJpc09iamVjdEEiLCJpc09iamVjdEIiLCJpc0FycmF5QSIsImlzQXJyYXkiLCJpc0FycmF5
QiIsImV2ZXJ5IiwiZSIsImtleXNBIiwia2V5cyIsImtleXNCIiwibG9vc2VJbmRleE9mIiwib25j
ZSIsImNhbGxlZCIsInRoaXMiLCJpc1Jlc2VydmVkIiwiY2hhckNvZGVBdCIsImRlZiIsImVudW1l
cmFibGUiLCJ3cml0YWJsZSIsImNvbmZpZ3VyYWJsZSIsInBhcnNlUGF0aCIsInBhdGgiLCJiYWls
UkUiLCJ0ZXN0Iiwic2VnbWVudHMiLCJoYW5kbGVFcnJvciIsImVyciIsInZtIiwiaW5mbyIsImNv
bmZpZyIsImVycm9ySGFuZGxlciIsImluQnJvd3NlciIsImNvbnNvbGUiLCJlcnJvciIsImlzTmF0
aXZlIiwiQ3RvciIsInB1c2hUYXJnZXQiLCJfdGFyZ2V0IiwiRGVwIiwidGFyZ2V0IiwidGFyZ2V0
U3RhY2siLCJwdXNoIiwicG9wVGFyZ2V0IiwicG9wIiwicHJvdG9BdWdtZW50Iiwic3JjIiwiX19w
cm90b19fIiwiY29weUF1Z21lbnQiLCJvYnNlcnZlIiwiYXNSb290RGF0YSIsIm9iIiwiX19vYl9f
IiwiT2JzZXJ2ZXIiLCJvYnNlcnZlclN0YXRlIiwic2hvdWxkQ29udmVydCIsImlzU2VydmVyUmVu
ZGVyaW5nIiwiaXNFeHRlbnNpYmxlIiwiX2lzVnVlIiwidm1Db3VudCIsImRlZmluZVJlYWN0aXZl
JCQxIiwiY3VzdG9tU2V0dGVyIiwic2hhbGxvdyIsImRlcCIsInByb3BlcnR5IiwiZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yIiwiZ2V0dGVyIiwiZ2V0Iiwic2V0dGVyIiwic2V0IiwiY2hpbGRPYiIs
ImRlcGVuZCIsImRlcGVuZEFycmF5IiwibmV3VmFsIiwibm90aWZ5IiwibWF4IiwiZGVsIiwibWVy
Z2VEYXRhIiwiZnJvbSIsInRvVmFsIiwiZnJvbVZhbCIsIm1lcmdlRGF0YU9yRm4iLCJwYXJlbnRW
YWwiLCJjaGlsZFZhbCIsImluc3RhbmNlRGF0YSIsImRlZmF1bHREYXRhIiwibWVyZ2VIb29rIiwi
Y29uY2F0IiwibWVyZ2VBc3NldHMiLCJub3JtYWxpemVQcm9wcyIsIm9wdGlvbnMiLCJwcm9wcyIs
Im5hbWUiLCJjYW1lbGl6ZSIsInR5cGUiLCJub3JtYWxpemVJbmplY3QiLCJpbmplY3QiLCJub3Jt
YWxpemVkIiwibm9ybWFsaXplRGlyZWN0aXZlcyIsImRpcnMiLCJkaXJlY3RpdmVzIiwidXBkYXRl
IiwibWVyZ2VPcHRpb25zIiwicGFyZW50IiwiY2hpbGQiLCJtZXJnZUZpZWxkIiwic3RyYXQiLCJz
dHJhdHMiLCJkZWZhdWx0U3RyYXQiLCJleHRlbmRzRnJvbSIsImV4dGVuZHMiLCJtaXhpbnMiLCJy
ZXNvbHZlQXNzZXQiLCJpZCIsIndhcm5NaXNzaW5nIiwiYXNzZXRzIiwiY2FtZWxpemVkSWQiLCJQ
YXNjYWxDYXNlSWQiLCJjYXBpdGFsaXplIiwidmFsaWRhdGVQcm9wIiwicHJvcE9wdGlvbnMiLCJw
cm9wc0RhdGEiLCJwcm9wIiwiYWJzZW50IiwiaXNUeXBlIiwiQm9vbGVhbiIsImh5cGhlbmF0ZSIs
ImdldFByb3BEZWZhdWx0VmFsdWUiLCJwcmV2U2hvdWxkQ29udmVydCIsImRlZmF1bHQiLCIkb3B0
aW9ucyIsIl9wcm9wcyIsImdldFR5cGUiLCJtYXRjaCIsImxlbiIsImNyZWF0ZVRleHRWTm9kZSIs
IlZOb2RlIiwiY2xvbmVWTm9kZSIsInZub2RlIiwiY2xvbmVkIiwidGFnIiwiZGF0YSIsImNoaWxk
cmVuIiwidGV4dCIsImVsbSIsImNvbnRleHQiLCJjb21wb25lbnRPcHRpb25zIiwiYXN5bmNGYWN0
b3J5IiwibnMiLCJpc1N0YXRpYyIsImlzQ29tbWVudCIsImlzQ2xvbmVkIiwiY2xvbmVWTm9kZXMi
LCJ2bm9kZXMiLCJjcmVhdGVGbkludm9rZXIiLCJmbnMiLCJpbnZva2VyIiwiYXJndW1lbnRzJDEi
LCJzbGljZSIsInVwZGF0ZUxpc3RlbmVycyIsIm9uIiwib2xkT24iLCJhZGQiLCJyZW1vdmUkJDEi
LCJjdXIiLCJvbGQiLCJldmVudCIsIm5vcm1hbGl6ZUV2ZW50IiwiY2FwdHVyZSIsInBhc3NpdmUi
LCJtZXJnZVZOb2RlSG9vayIsImhvb2tLZXkiLCJob29rIiwid3JhcHBlZEhvb2siLCJvbGRIb29r
IiwibWVyZ2VkIiwiZXh0cmFjdFByb3BzRnJvbVZOb2RlRGF0YSIsImF0dHJzIiwiYWx0S2V5Iiwi
Y2hlY2tQcm9wIiwiaGFzaCIsInByZXNlcnZlIiwic2ltcGxlTm9ybWFsaXplQ2hpbGRyZW4iLCJw
cm90b3R5cGUiLCJub3JtYWxpemVDaGlsZHJlbiIsIm5vcm1hbGl6ZUFycmF5Q2hpbGRyZW4iLCJp
c1RleHROb2RlIiwibm9kZSIsIm5lc3RlZEluZGV4IiwibGFzdCIsIl9pc1ZMaXN0IiwiZW5zdXJl
Q3RvciIsImNvbXAiLCJiYXNlIiwiX19lc01vZHVsZSIsImNyZWF0ZUFzeW5jUGxhY2Vob2xkZXIi
LCJmYWN0b3J5IiwiY3JlYXRlRW1wdHlWTm9kZSIsImFzeW5jTWV0YSIsInJlc29sdmVBc3luY0Nv
bXBvbmVudCIsImJhc2VDdG9yIiwiZXJyb3JDb21wIiwicmVzb2x2ZWQiLCJsb2FkaW5nIiwibG9h
ZGluZ0NvbXAiLCJjb250ZXh0cyIsInN5bmMiLCJmb3JjZVJlbmRlciIsIiRmb3JjZVVwZGF0ZSIs
InJlc29sdmUiLCJyZWplY3QiLCJyZWFzb24iLCJ0aGVuIiwiY29tcG9uZW50IiwiZGVsYXkiLCJz
ZXRUaW1lb3V0IiwidGltZW91dCIsImdldEZpcnN0Q29tcG9uZW50Q2hpbGQiLCJpbml0RXZlbnRz
IiwiX2V2ZW50cyIsIl9oYXNIb29rRXZlbnQiLCJsaXN0ZW5lcnMiLCJfcGFyZW50TGlzdGVuZXJz
IiwidXBkYXRlQ29tcG9uZW50TGlzdGVuZXJzIiwib25jZSQkMSIsIiRvbmNlIiwiJG9uIiwicmVt
b3ZlJDEiLCIkb2ZmIiwib2xkTGlzdGVuZXJzIiwicmVzb2x2ZVNsb3RzIiwic2xvdHMiLCJkZWZh
dWx0U2xvdCIsImZ1bmN0aW9uYWxDb250ZXh0Iiwic2xvdCIsImlzV2hpdGVzcGFjZSIsInJlc29s
dmVTY29wZWRTbG90cyIsImluaXRMaWZlY3ljbGUiLCJhYnN0cmFjdCIsIiRwYXJlbnQiLCIkY2hp
bGRyZW4iLCIkcm9vdCIsIiRyZWZzIiwiX3dhdGNoZXIiLCJfaW5hY3RpdmUiLCJfZGlyZWN0SW5h
Y3RpdmUiLCJfaXNNb3VudGVkIiwiX2lzRGVzdHJveWVkIiwiX2lzQmVpbmdEZXN0cm95ZWQiLCJt
b3VudENvbXBvbmVudCIsImVsIiwiaHlkcmF0aW5nIiwiJGVsIiwicmVuZGVyIiwiY2FsbEhvb2si
LCJ1cGRhdGVDb21wb25lbnQiLCJfdXBkYXRlIiwiX3JlbmRlciIsIldhdGNoZXIiLCIkdm5vZGUi
LCJ1cGRhdGVDaGlsZENvbXBvbmVudCIsInBhcmVudFZub2RlIiwicmVuZGVyQ2hpbGRyZW4iLCJo
YXNDaGlsZHJlbiIsIl9yZW5kZXJDaGlsZHJlbiIsInNjb3BlZFNsb3RzIiwiJHNjb3BlZFNsb3Rz
IiwiZW1wdHlPYmplY3QiLCJfcGFyZW50Vm5vZGUiLCJfdm5vZGUiLCIkYXR0cnMiLCIkbGlzdGVu
ZXJzIiwicHJvcEtleXMiLCJfcHJvcEtleXMiLCIkc2xvdHMiLCJpc0luSW5hY3RpdmVUcmVlIiwi
YWN0aXZhdGVDaGlsZENvbXBvbmVudCIsImRpcmVjdCIsImRlYWN0aXZhdGVDaGlsZENvbXBvbmVu
dCIsImhhbmRsZXJzIiwiaiIsIiRlbWl0IiwicmVzZXRTY2hlZHVsZXJTdGF0ZSIsInF1ZXVlIiwi
YWN0aXZhdGVkQ2hpbGRyZW4iLCJoYXMiLCJ3YWl0aW5nIiwiZmx1c2hpbmciLCJmbHVzaFNjaGVk
dWxlclF1ZXVlIiwid2F0Y2hlciIsInNvcnQiLCJydW4iLCJhY3RpdmF0ZWRRdWV1ZSIsInVwZGF0
ZWRRdWV1ZSIsImNhbGxBY3RpdmF0ZWRIb29rcyIsImNhbGxVcGRhdGVkSG9va3MiLCJkZXZ0b29s
cyIsImVtaXQiLCJxdWV1ZUFjdGl2YXRlZENvbXBvbmVudCIsInF1ZXVlV2F0Y2hlciIsIm5leHRU
aWNrIiwidHJhdmVyc2UiLCJzZWVuT2JqZWN0cyIsImNsZWFyIiwiX3RyYXZlcnNlIiwic2VlbiIs
ImlzQSIsImRlcElkIiwicHJveHkiLCJzb3VyY2VLZXkiLCJzaGFyZWRQcm9wZXJ0eURlZmluaXRp
b24iLCJpbml0U3RhdGUiLCJfd2F0Y2hlcnMiLCJvcHRzIiwiaW5pdFByb3BzIiwibWV0aG9kcyIs
ImluaXRNZXRob2RzIiwiaW5pdERhdGEiLCJfZGF0YSIsImNvbXB1dGVkIiwiaW5pdENvbXB1dGVk
Iiwid2F0Y2giLCJuYXRpdmVXYXRjaCIsImluaXRXYXRjaCIsInByb3BzT3B0aW9ucyIsImlzUm9v
dCIsImdldERhdGEiLCJ3YXRjaGVycyIsIl9jb21wdXRlZFdhdGNoZXJzIiwidXNlckRlZiIsImNv
bXB1dGVkV2F0Y2hlck9wdGlvbnMiLCJkZWZpbmVDb21wdXRlZCIsImNyZWF0ZUNvbXB1dGVkR2V0
dGVyIiwiZGlydHkiLCJldmFsdWF0ZSIsImhhbmRsZXIiLCJjcmVhdGVXYXRjaGVyIiwia2V5T3JG
biIsIiR3YXRjaCIsImluaXRQcm92aWRlIiwicHJvdmlkZSIsIl9wcm92aWRlZCIsImluaXRJbmpl
Y3Rpb25zIiwicmVzdWx0IiwicmVzb2x2ZUluamVjdCIsImZvckVhY2giLCJoYXNTeW1ib2wiLCJS
ZWZsZWN0Iiwib3duS2V5cyIsInByb3ZpZGVLZXkiLCJzb3VyY2UiLCJjcmVhdGVGdW5jdGlvbmFs
Q29tcG9uZW50IiwibWVyZ2VQcm9wcyIsIl9jb250ZXh0IiwiaCIsImQiLCJjcmVhdGVFbGVtZW50
IiwiaW5qZWN0aW9ucyIsImZ1bmN0aW9uYWxPcHRpb25zIiwiY3JlYXRlQ29tcG9uZW50IiwiX2Jh
c2UiLCJjaWQiLCJyZXNvbHZlQ29uc3RydWN0b3JPcHRpb25zIiwibW9kZWwiLCJ0cmFuc2Zvcm1N
b2RlbCIsImZ1bmN0aW9uYWwiLCJuYXRpdmVPbiIsIm1lcmdlSG9va3MiLCJjcmVhdGVDb21wb25l
bnRJbnN0YW5jZUZvclZub2RlIiwicGFyZW50RWxtIiwicmVmRWxtIiwidm5vZGVDb21wb25lbnRP
cHRpb25zIiwiX2lzQ29tcG9uZW50IiwiX2NvbXBvbmVudFRhZyIsIl9wYXJlbnRFbG0iLCJfcmVm
RWxtIiwiaW5saW5lVGVtcGxhdGUiLCJzdGF0aWNSZW5kZXJGbnMiLCJob29rc1RvTWVyZ2UiLCJm
cm9tUGFyZW50Iiwib3VycyIsImNvbXBvbmVudFZOb2RlSG9va3MiLCJtZXJnZUhvb2skMSIsIm9u
ZSIsInR3byIsImNhbGxiYWNrIiwibm9ybWFsaXphdGlvblR5cGUiLCJhbHdheXNOb3JtYWxpemUi
LCJBTFdBWVNfTk9STUFMSVpFIiwiX2NyZWF0ZUVsZW1lbnQiLCJpcyIsIlNJTVBMRV9OT1JNQUxJ
WkUiLCJnZXRUYWdOYW1lc3BhY2UiLCJpc1Jlc2VydmVkVGFnIiwicGFyc2VQbGF0Zm9ybVRhZ05h
bWUiLCJhcHBseU5TIiwicmVuZGVyTGlzdCIsInJlbmRlclNsb3QiLCJmYWxsYmFjayIsImJpbmRP
YmplY3QiLCJzY29wZWRTbG90Rm4iLCJzbG90Tm9kZXMiLCJyZXNvbHZlRmlsdGVyIiwiaWRlbnRp
dHkiLCJjaGVja0tleUNvZGVzIiwiZXZlbnRLZXlDb2RlIiwiYnVpbHRJbkFsaWFzIiwia2V5Q29k
ZXMiLCJiaW5kT2JqZWN0UHJvcHMiLCJhc1Byb3AiLCJpc1N5bmMiLCJpc1Jlc2VydmVkQXR0cmli
dXRlIiwibXVzdFVzZVByb3AiLCJkb21Qcm9wcyIsIiRldmVudCIsInJlbmRlclN0YXRpYyIsImlz
SW5Gb3IiLCJ0cmVlIiwiX3N0YXRpY1RyZWVzIiwiX3JlbmRlclByb3h5IiwibWFya1N0YXRpYyIs
Im1hcmtPbmNlIiwiaXNPbmNlIiwibWFya1N0YXRpY05vZGUiLCJiaW5kT2JqZWN0TGlzdGVuZXJz
IiwiZXhpc3RpbmciLCJpbml0UmVuZGVyIiwicmVuZGVyQ29udGV4dCIsIl9jIiwiJGNyZWF0ZUVs
ZW1lbnQiLCJwYXJlbnREYXRhIiwiaW5pdEludGVybmFsQ29tcG9uZW50IiwiY29uc3RydWN0b3Ii
LCJzdXBlciIsInN1cGVyT3B0aW9ucyIsIm1vZGlmaWVkT3B0aW9ucyIsInJlc29sdmVNb2RpZmll
ZE9wdGlvbnMiLCJleHRlbmRPcHRpb25zIiwiY29tcG9uZW50cyIsIm1vZGlmaWVkIiwibGF0ZXN0
IiwiZXh0ZW5kZWQiLCJzZWFsZWQiLCJzZWFsZWRPcHRpb25zIiwiZGVkdXBlIiwiVnVlJDMiLCJf
aW5pdCIsImluaXRVc2UiLCJWdWUiLCJ1c2UiLCJwbHVnaW4iLCJpbnN0YWxsZWRQbHVnaW5zIiwi
X2luc3RhbGxlZFBsdWdpbnMiLCJhcmdzIiwidW5zaGlmdCIsImluc3RhbGwiLCJpbml0TWl4aW4k
MSIsIm1peGluIiwiaW5pdEV4dGVuZCIsIlN1cGVyIiwiU3VwZXJJZCIsImNhY2hlZEN0b3JzIiwi
X0N0b3IiLCJTdWIiLCJpbml0UHJvcHMkMSIsImluaXRDb21wdXRlZCQxIiwiQVNTRVRfVFlQRVMi
LCJDb21wIiwiaW5pdEFzc2V0UmVnaXN0ZXJzIiwiZGVmaW5pdGlvbiIsImdldENvbXBvbmVudE5h
bWUiLCJtYXRjaGVzIiwicGF0dGVybiIsInBydW5lQ2FjaGUiLCJjdXJyZW50IiwiZmlsdGVyIiwi
Y2FjaGVkTm9kZSIsInBydW5lQ2FjaGVFbnRyeSIsImNvbXBvbmVudEluc3RhbmNlIiwiJGRlc3Ry
b3kiLCJnZW5DbGFzc0ZvclZub2RlIiwicGFyZW50Tm9kZSIsImNoaWxkTm9kZSIsIm1lcmdlQ2xh
c3NEYXRhIiwicmVuZGVyQ2xhc3MiLCJzdGF0aWNDbGFzcyIsImNsYXNzIiwiZHluYW1pY0NsYXNz
Iiwic3RyaW5naWZ5Q2xhc3MiLCJzdHJpbmdpZnlBcnJheSIsInN0cmluZ2lmeU9iamVjdCIsInN0
cmluZ2lmaWVkIiwiaXNTVkciLCJpc1Vua25vd25FbGVtZW50IiwidW5rbm93bkVsZW1lbnRDYWNo
ZSIsImRvY3VtZW50Iiwid2luZG93IiwiSFRNTFVua25vd25FbGVtZW50IiwiSFRNTEVsZW1lbnQi
LCJxdWVyeSIsInNlbGVjdGVkIiwicXVlcnlTZWxlY3RvciIsImNyZWF0ZUVsZW1lbnQkMSIsInRh
Z05hbWUiLCJtdWx0aXBsZSIsInNldEF0dHJpYnV0ZSIsImNyZWF0ZUVsZW1lbnROUyIsIm5hbWVz
cGFjZSIsIm5hbWVzcGFjZU1hcCIsImNyZWF0ZVRleHROb2RlIiwiY3JlYXRlQ29tbWVudCIsImlu
c2VydEJlZm9yZSIsIm5ld05vZGUiLCJyZWZlcmVuY2VOb2RlIiwicmVtb3ZlQ2hpbGQiLCJhcHBl
bmRDaGlsZCIsIm5leHRTaWJsaW5nIiwic2V0VGV4dENvbnRlbnQiLCJ0ZXh0Q29udGVudCIsInJl
Z2lzdGVyUmVmIiwiaXNSZW1vdmFsIiwicmVmIiwicmVmcyIsInJlZkluRm9yIiwic2FtZVZub2Rl
Iiwic2FtZUlucHV0VHlwZSIsImlzQXN5bmNQbGFjZWhvbGRlciIsImNyZWF0ZUtleVRvT2xkSWR4
IiwiYmVnaW5JZHgiLCJlbmRJZHgiLCJ1cGRhdGVEaXJlY3RpdmVzIiwib2xkVm5vZGUiLCJvbGRE
aXIiLCJkaXIiLCJpc0NyZWF0ZSIsImVtcHR5Tm9kZSIsImlzRGVzdHJveSIsIm9sZERpcnMiLCJu
b3JtYWxpemVEaXJlY3RpdmVzJDEiLCJuZXdEaXJzIiwiZGlyc1dpdGhJbnNlcnQiLCJkaXJzV2l0
aFBvc3RwYXRjaCIsIm9sZFZhbHVlIiwiY2FsbEhvb2skMSIsImNvbXBvbmVudFVwZGF0ZWQiLCJp
bnNlcnRlZCIsImNhbGxJbnNlcnQiLCJtb2RpZmllcnMiLCJlbXB0eU1vZGlmaWVycyIsImdldFJh
d0Rpck5hbWUiLCJyYXdOYW1lIiwiam9pbiIsInVwZGF0ZUF0dHJzIiwiaW5oZXJpdEF0dHJzIiwi
b2xkQXR0cnMiLCJzZXRBdHRyIiwiaXNJRTkiLCJpc1hsaW5rIiwicmVtb3ZlQXR0cmlidXRlTlMi
LCJ4bGlua05TIiwiZ2V0WGxpbmtQcm9wIiwiaXNFbnVtZXJhdGVkQXR0ciIsInJlbW92ZUF0dHJp
YnV0ZSIsImlzQm9vbGVhbkF0dHIiLCJpc0ZhbHN5QXR0clZhbHVlIiwic2V0QXR0cmlidXRlTlMi
LCJ1cGRhdGVDbGFzcyIsIm9sZERhdGEiLCJjbHMiLCJ0cmFuc2l0aW9uQ2xhc3MiLCJfdHJhbnNp
dGlvbkNsYXNzZXMiLCJfcHJldkNsYXNzIiwicGFyc2VGaWx0ZXJzIiwiZXhwIiwicHVzaEZpbHRl
ciIsImZpbHRlcnMiLCJsYXN0RmlsdGVySW5kZXgiLCJ0cmltIiwicHJldiIsImV4cHJlc3Npb24i
LCJpblNpbmdsZSIsImluRG91YmxlIiwiaW5UZW1wbGF0ZVN0cmluZyIsImluUmVnZXgiLCJjdXJs
eSIsInNxdWFyZSIsInBhcmVuIiwicCIsImNoYXJBdCIsInZhbGlkRGl2aXNpb25DaGFyUkUiLCJ3
cmFwRmlsdGVyIiwiYmFzZVdhcm4iLCJtc2ciLCJwbHVja01vZHVsZUZ1bmN0aW9uIiwibW9kdWxl
cyIsIm0iLCJfIiwiYWRkUHJvcCIsImFkZEF0dHIiLCJhZGREaXJlY3RpdmUiLCJhcmciLCJhZGRI
YW5kbGVyIiwiaW1wb3J0YW50Iiwid2FybiIsImV2ZW50cyIsIm5hdGl2ZSIsIm5hdGl2ZUV2ZW50
cyIsIm5ld0hhbmRsZXIiLCJnZXRCaW5kaW5nQXR0ciIsImdldFN0YXRpYyIsImR5bmFtaWNWYWx1
ZSIsImdldEFuZFJlbW92ZUF0dHIiLCJzdGF0aWNWYWx1ZSIsImF0dHJzTWFwIiwiYXR0cnNMaXN0
IiwiZ2VuQ29tcG9uZW50TW9kZWwiLCJudW1iZXIiLCJ2YWx1ZUV4cHJlc3Npb24iLCJhc3NpZ25t
ZW50IiwiZ2VuQXNzaWdubWVudENvZGUiLCJtb2RlbFJzIiwicGFyc2VNb2RlbCIsImlkeCIsImlu
ZGV4JDEiLCJleHByZXNzaW9uUG9zIiwiZXhwcmVzc2lvbkVuZFBvcyIsImxhc3RJbmRleE9mIiwi
ZW9mIiwiY2hyIiwibmV4dCIsImlzU3RyaW5nU3RhcnQiLCJwYXJzZVN0cmluZyIsInBhcnNlQnJh
Y2tldCIsInN1YnN0cmluZyIsImluQnJhY2tldCIsInN0cmluZ1F1b3RlIiwiX3dhcm4iLCJ3YXJu
JDEiLCJnZW5TZWxlY3QiLCJnZW5DaGVja2JveE1vZGVsIiwiZ2VuUmFkaW9Nb2RlbCIsImdlbkRl
ZmF1bHRNb2RlbCIsInZhbHVlQmluZGluZyIsInRydWVWYWx1ZUJpbmRpbmciLCJmYWxzZVZhbHVl
QmluZGluZyIsIkNIRUNLQk9YX1JBRElPX1RPS0VOIiwic2VsZWN0ZWRWYWwiLCJjb2RlIiwibGF6
eSIsIm5lZWRDb21wb3NpdGlvbkd1YXJkIiwiUkFOR0VfVE9LRU4iLCJub3JtYWxpemVFdmVudHMi
LCJpc0lFIiwiaXNDaHJvbWUiLCJhZGQkMSIsIm9sZEhhbmRsZXIiLCJ0YXJnZXQkMSIsImV2Iiwi
cmVtb3ZlJDIiLCJhZGRFdmVudExpc3RlbmVyIiwic3VwcG9ydHNQYXNzaXZlIiwicmVtb3ZlRXZl
bnRMaXN0ZW5lciIsInVwZGF0ZURPTUxpc3RlbmVycyIsInVwZGF0ZURPTVByb3BzIiwib2xkUHJv
cHMiLCJfdmFsdWUiLCJzdHJDdXIiLCJzaG91bGRVcGRhdGVWYWx1ZSIsImNoZWNrVmFsIiwiY29t
cG9zaW5nIiwiaXNEaXJ0eSIsImlzSW5wdXRDaGFuZ2VkIiwibm90SW5Gb2N1cyIsImFjdGl2ZUVs
ZW1lbnQiLCJfdk1vZGlmaWVycyIsIm5vcm1hbGl6ZVN0eWxlRGF0YSIsInN0eWxlIiwibm9ybWFs
aXplU3R5bGVCaW5kaW5nIiwic3RhdGljU3R5bGUiLCJiaW5kaW5nU3R5bGUiLCJwYXJzZVN0eWxl
VGV4dCIsImdldFN0eWxlIiwiY2hlY2tDaGlsZCIsInN0eWxlRGF0YSIsInVwZGF0ZVN0eWxlIiwi
b2xkU3RhdGljU3R5bGUiLCJvbGRTdHlsZUJpbmRpbmciLCJub3JtYWxpemVkU3R5bGUiLCJvbGRT
dHlsZSIsIm5ld1N0eWxlIiwic2V0UHJvcCIsImFkZENsYXNzIiwiY2xhc3NMaXN0IiwiZ2V0QXR0
cmlidXRlIiwicmVtb3ZlQ2xhc3MiLCJ0YXIiLCJyZXBsYWNlIiwicmVzb2x2ZVRyYW5zaXRpb24i
LCJkZWYkJDEiLCJjc3MiLCJhdXRvQ3NzVHJhbnNpdGlvbiIsIm5leHRGcmFtZSIsInJhZiIsImFk
ZFRyYW5zaXRpb25DbGFzcyIsInRyYW5zaXRpb25DbGFzc2VzIiwicmVtb3ZlVHJhbnNpdGlvbkNs
YXNzIiwid2hlblRyYW5zaXRpb25FbmRzIiwiZXhwZWN0ZWRUeXBlIiwiY2IiLCJnZXRUcmFuc2l0
aW9uSW5mbyIsInByb3BDb3VudCIsIlRSQU5TSVRJT04iLCJ0cmFuc2l0aW9uRW5kRXZlbnQiLCJh
bmltYXRpb25FbmRFdmVudCIsImVuZGVkIiwiZW5kIiwib25FbmQiLCJzdHlsZXMiLCJnZXRDb21w
dXRlZFN0eWxlIiwidHJhbnNpdGlvbkRlbGF5cyIsInRyYW5zaXRpb25Qcm9wIiwidHJhbnNpdGlv
bkR1cmF0aW9ucyIsInRyYW5zaXRpb25UaW1lb3V0IiwiZ2V0VGltZW91dCIsImFuaW1hdGlvbkRl
bGF5cyIsImFuaW1hdGlvblByb3AiLCJhbmltYXRpb25EdXJhdGlvbnMiLCJhbmltYXRpb25UaW1l
b3V0IiwiQU5JTUFUSU9OIiwiaGFzVHJhbnNmb3JtIiwidHJhbnNmb3JtUkUiLCJkZWxheXMiLCJk
dXJhdGlvbnMiLCJ0b01zIiwicyIsIk51bWJlciIsImVudGVyIiwidG9nZ2xlRGlzcGxheSIsIl9s
ZWF2ZUNiIiwiY2FuY2VsbGVkIiwidHJhbnNpdGlvbiIsIl9lbnRlckNiIiwibm9kZVR5cGUiLCJl
bnRlckNsYXNzIiwiZW50ZXJUb0NsYXNzIiwiZW50ZXJBY3RpdmVDbGFzcyIsImFwcGVhckNsYXNz
IiwiYXBwZWFyVG9DbGFzcyIsImFwcGVhckFjdGl2ZUNsYXNzIiwiYmVmb3JlRW50ZXIiLCJhZnRl
ckVudGVyIiwiZW50ZXJDYW5jZWxsZWQiLCJiZWZvcmVBcHBlYXIiLCJhcHBlYXIiLCJhZnRlckFw
cGVhciIsImFwcGVhckNhbmNlbGxlZCIsImR1cmF0aW9uIiwiYWN0aXZlSW5zdGFuY2UiLCJ0cmFu
c2l0aW9uTm9kZSIsImlzQXBwZWFyIiwiaXNSb290SW5zZXJ0Iiwic3RhcnRDbGFzcyIsImFjdGl2
ZUNsYXNzIiwidG9DbGFzcyIsImJlZm9yZUVudGVySG9vayIsImVudGVySG9vayIsImFmdGVyRW50
ZXJIb29rIiwiZW50ZXJDYW5jZWxsZWRIb29rIiwiZXhwbGljaXRFbnRlckR1cmF0aW9uIiwiZXhw
ZWN0c0NTUyIsInVzZXJXYW50c0NvbnRyb2wiLCJnZXRIb29rQXJndW1lbnRzTGVuZ3RoIiwic2hv
dyIsInBlbmRpbmdOb2RlIiwiX3BlbmRpbmciLCJpc1ZhbGlkRHVyYXRpb24iLCJsZWF2ZSIsInJt
IiwicGVyZm9ybUxlYXZlIiwiYmVmb3JlTGVhdmUiLCJsZWF2ZUNsYXNzIiwibGVhdmVBY3RpdmVD
bGFzcyIsImxlYXZlVG9DbGFzcyIsImV4cGxpY2l0TGVhdmVEdXJhdGlvbiIsImFmdGVyTGVhdmUi
LCJsZWF2ZUNhbmNlbGxlZCIsImRlbGF5TGVhdmUiLCJpbnZva2VyRm5zIiwiX2VudGVyIiwic2V0
U2VsZWN0ZWQiLCJiaW5kaW5nIiwiaXNNdWx0aXBsZSIsIm9wdGlvbiIsImdldFZhbHVlIiwic2Vs
ZWN0ZWRJbmRleCIsIm9uQ29tcG9zaXRpb25TdGFydCIsIm9uQ29tcG9zaXRpb25FbmQiLCJ0cmln
Z2VyIiwiY3JlYXRlRXZlbnQiLCJpbml0RXZlbnQiLCJkaXNwYXRjaEV2ZW50IiwibG9jYXRlTm9k
ZSIsImdldFJlYWxDaGlsZCIsImNvbXBPcHRpb25zIiwiZXh0cmFjdFRyYW5zaXRpb25EYXRhIiwi
a2V5JDEiLCJwbGFjZWhvbGRlciIsInJhd0NoaWxkIiwiaGFzUGFyZW50VHJhbnNpdGlvbiIsImlz
U2FtZUNoaWxkIiwib2xkQ2hpbGQiLCJjYWxsUGVuZGluZ0NicyIsIl9tb3ZlQ2IiLCJyZWNvcmRQ
b3NpdGlvbiIsIm5ld1BvcyIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImFwcGx5VHJhbnNsYXRp
b24iLCJvbGRQb3MiLCJwb3MiLCJkeCIsImxlZnQiLCJkeSIsInRvcCIsIm1vdmVkIiwidHJhbnNm
b3JtIiwiV2Via2l0VHJhbnNmb3JtIiwidHJhbnNpdGlvbkR1cmF0aW9uIiwicGFyc2VUZXh0Iiwi
ZGVsaW1pdGVycyIsInRhZ1JFIiwiYnVpbGRSZWdleCIsImRlZmF1bHRUYWdSRSIsInRva2VucyIs
Imxhc3RJbmRleCIsImV4ZWMiLCJ0cmFuc2Zvcm1Ob2RlIiwiY2xhc3NCaW5kaW5nIiwiZ2VuRGF0
YSIsInRyYW5zZm9ybU5vZGUkMSIsInN0eWxlQmluZGluZyIsImdlbkRhdGEkMSIsImh0bWwiLCJk
ZWNvZGVBdHRyIiwic2hvdWxkRGVjb2RlTmV3bGluZXMiLCJyZSIsImVuY29kZWRBdHRyV2l0aE5l
d0xpbmVzIiwiZW5jb2RlZEF0dHIiLCJkZWNvZGluZ01hcCIsInBhcnNlSFRNTCIsImFkdmFuY2Ui
LCJwYXJzZUVuZFRhZyIsImxvd2VyQ2FzZWRUYWdOYW1lIiwic3RhY2siLCJsb3dlckNhc2VkVGFn
IiwibGFzdFRhZyIsImV4cGVjdEhUTUwiLCJpc1VuYXJ5VGFnJCQxIiwiaXNVbmFyeVRhZyIsIm5v
IiwiY2FuQmVMZWZ0T3BlblRhZyQkMSIsImNhbkJlTGVmdE9wZW5UYWciLCJpc1BsYWluVGV4dEVs
ZW1lbnQiLCJlbmRUYWdMZW5ndGgiLCJzdGFja2VkVGFnIiwicmVTdGFja2VkVGFnIiwicmVDYWNo
ZSIsIlJlZ0V4cCIsInJlc3QkMSIsImFsbCIsImVuZFRhZyIsInNob3VsZElnbm9yZUZpcnN0TmV3
bGluZSIsImNoYXJzIiwidGV4dEVuZCIsImNvbW1lbnQiLCJjb21tZW50RW5kIiwic2hvdWxkS2Vl
cENvbW1lbnQiLCJjb25kaXRpb25hbENvbW1lbnQiLCJjb25kaXRpb25hbEVuZCIsImRvY3R5cGVN
YXRjaCIsImRvY3R5cGUiLCJlbmRUYWdNYXRjaCIsImN1ckluZGV4Iiwic3RhcnRUYWdNYXRjaCIs
InN0YXJ0VGFnT3BlbiIsImF0dHIiLCJzdGFydFRhZ0Nsb3NlIiwiYXR0cmlidXRlIiwidW5hcnlT
bGFzaCIsImlzTm9uUGhyYXNpbmdUYWciLCJ1bmFyeSIsIklTX1JFR0VYX0NBUFRVUklOR19CUk9L
RU4iLCJyZXN0IiwicGFyc2UiLCJ0ZW1wbGF0ZSIsImVuZFByZSIsImVsZW1lbnQiLCJwcmUiLCJp
blZQcmUiLCJwbGF0Zm9ybUlzUHJlVGFnIiwiaW5QcmUiLCJ3YXJuJDIiLCJpc1ByZVRhZyIsInBs
YXRmb3JtTXVzdFVzZVByb3AiLCJwbGF0Zm9ybUdldFRhZ05hbWVzcGFjZSIsInRyYW5zZm9ybXMi
LCJwcmVUcmFuc2Zvcm1zIiwicG9zdFRyYW5zZm9ybXMiLCJyb290IiwiY3VycmVudFBhcmVudCIs
InByZXNlcnZlV2hpdGVzcGFjZSIsImNvbW1lbnRzIiwiZ3VhcmRJRVNWR0J1ZyIsIm1ha2VBdHRy
c01hcCIsImlzRm9yYmlkZGVuVGFnIiwiZm9yYmlkZGVuIiwicHJvY2Vzc1ByZSIsInByb2Nlc3NS
YXdBdHRycyIsInByb2Nlc3NGb3IiLCJwcm9jZXNzSWYiLCJwcm9jZXNzT25jZSIsInByb2Nlc3NL
ZXkiLCJwbGFpbiIsInByb2Nlc3NSZWYiLCJwcm9jZXNzU2xvdCIsInByb2Nlc3NDb21wb25lbnQi
LCJpJDEiLCJwcm9jZXNzQXR0cnMiLCJpZiIsImVsc2VpZiIsImVsc2UiLCJhZGRJZkNvbmRpdGlv
biIsImJsb2NrIiwicHJvY2Vzc0lmQ29uZGl0aW9ucyIsInNsb3RTY29wZSIsInNsb3RUYXJnZXQi
LCJpJDIiLCJsYXN0Tm9kZSIsImlzVGV4dFRhZyIsImRlY29kZUhUTUxDYWNoZWQiLCJjaGVja0lu
Rm9yIiwiaW5NYXRjaCIsImZvckFsaWFzUkUiLCJmb3IiLCJhbGlhcyIsIml0ZXJhdG9yTWF0Y2gi
LCJmb3JJdGVyYXRvclJFIiwiaXRlcmF0b3IxIiwiaXRlcmF0b3IyIiwiZmluZFByZXZFbGVtZW50
IiwiY29uZGl0aW9uIiwiaWZDb25kaXRpb25zIiwic2xvdE5hbWUiLCJpc1Byb3AiLCJkaXJSRSIs
Imhhc0JpbmRpbmdzIiwicGFyc2VNb2RpZmllcnMiLCJtb2RpZmllclJFIiwiYmluZFJFIiwiY2Ft
ZWwiLCJvblJFIiwiYXJnTWF0Y2giLCJhcmdSRSIsImllTlNCdWciLCJpZU5TUHJlZml4Iiwib3B0
aW1pemUiLCJpc1N0YXRpY0tleSIsImdlblN0YXRpY0tleXNDYWNoZWQiLCJzdGF0aWNLZXlzIiwi
aXNQbGF0Zm9ybVJlc2VydmVkVGFnIiwibWFya1N0YXRpYyQxIiwibWFya1N0YXRpY1Jvb3RzIiwi
Z2VuU3RhdGljS2V5cyQxIiwic3RhdGljIiwibCQxIiwic3RhdGljSW5Gb3IiLCJzdGF0aWNSb290
IiwiaXNCdWlsdEluVGFnIiwiaXNEaXJlY3RDaGlsZE9mVGVtcGxhdGVGb3IiLCJnZW5IYW5kbGVy
cyIsImdlbkhhbmRsZXIiLCJpc01ldGhvZFBhdGgiLCJzaW1wbGVQYXRoUkUiLCJpc0Z1bmN0aW9u
RXhwcmVzc2lvbiIsImZuRXhwUkUiLCJnZW5Nb2RpZmllckNvZGUiLCJtb2RpZmllckNvZGUiLCJn
ZW5LZXlGaWx0ZXIiLCJnZW5GaWx0ZXJDb2RlIiwia2V5VmFsIiwicGFyc2VJbnQiLCJ3cmFwTGlz
dGVuZXJzIiwiYmluZCQxIiwid3JhcERhdGEiLCJnZW5lcmF0ZSIsImFzdCIsInN0YXRlIiwiQ29k
ZWdlblN0YXRlIiwiZ2VuRWxlbWVudCIsInN0YXRpY1Byb2Nlc3NlZCIsImdlblN0YXRpYyIsIm9u
Y2VQcm9jZXNzZWQiLCJnZW5PbmNlIiwiZm9yUHJvY2Vzc2VkIiwiZ2VuRm9yIiwiaWZQcm9jZXNz
ZWQiLCJnZW5JZiIsImdlblNsb3QiLCJnZW5Db21wb25lbnQiLCJnZW5EYXRhJDIiLCJnZW5DaGls
ZHJlbiIsIm9uY2VJZCIsImFsdEdlbiIsImFsdEVtcHR5IiwiZ2VuSWZDb25kaXRpb25zIiwiY29u
ZGl0aW9ucyIsImdlblRlcm5hcnlFeHAiLCJzaGlmdCIsImFsdEhlbHBlciIsImdlbkRpcmVjdGl2
ZXMiLCJkYXRhR2VuRm5zIiwiZ2VuUHJvcHMiLCJnZW5TY29wZWRTbG90cyIsImdlbklubGluZVRl
bXBsYXRlIiwibmVlZFJ1bnRpbWUiLCJoYXNSdW50aW1lIiwiZ2VuIiwiaW5saW5lUmVuZGVyRm5z
IiwiZ2VuU2NvcGVkU2xvdCIsImdlbkZvclNjb3BlZFNsb3QiLCJzY29wZSIsImNoZWNrU2tpcCIs
ImFsdEdlbkVsZW1lbnQiLCJhbHRHZW5Ob2RlIiwiZWwkMSIsImdldE5vcm1hbGl6YXRpb25UeXBl
IiwibWF5YmVDb21wb25lbnQiLCJnZW5Ob2RlIiwibmVlZHNOb3JtYWxpemF0aW9uIiwic29tZSIs
ImdlbkNvbW1lbnQiLCJnZW5UZXh0IiwidHJhbnNmb3JtU3BlY2lhbE5ld2xpbmVzIiwiYmluZCQk
MSIsImNvbXBvbmVudE5hbWUiLCJjcmVhdGVGdW5jdGlvbiIsImVycm9ycyIsIkZ1bmN0aW9uIiwi
Y3JlYXRlQ29tcGlsZVRvRnVuY3Rpb25GbiIsImNvbXBpbGUiLCJjb21waWxlZCIsImZuR2VuRXJy
b3JzIiwiZ2V0T3V0ZXJIVE1MIiwib3V0ZXJIVE1MIiwiY29udGFpbmVyIiwiY2xvbmVOb2RlIiwi
aW5uZXJIVE1MIiwiY2FtZWxpemVSRSIsInRvVXBwZXJDYXNlIiwiaHlwaGVuYXRlUkUiLCJTU1Jf
QVRUUiIsIkxJRkVDWUNMRV9IT09LUyIsIm9wdGlvbk1lcmdlU3RyYXRlZ2llcyIsInNpbGVudCIs
InByb2R1Y3Rpb25UaXAiLCJwZXJmb3JtYW5jZSIsIndhcm5IYW5kbGVyIiwiaWdub3JlZEVsZW1l
bnRzIiwiaXNSZXNlcnZlZEF0dHIiLCJfbGlmZWN5Y2xlSG9va3MiLCJmcmVlemUiLCJoYXNQcm90
byIsIlVBIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiaXNFZGdlIiwiaXNBbmRyb2lkIiwiaXNJ
T1MiLCJfaXNTZXJ2ZXIiLCJfU2V0IiwiZW52IiwiVlVFX0VOViIsIl9fVlVFX0RFVlRPT0xTX0dM
T0JBTF9IT09LX18iLCJTeW1ib2wiLCJuZXh0VGlja0hhbmRsZXIiLCJwZW5kaW5nIiwiY29waWVz
IiwiY2FsbGJhY2tzIiwidGltZXJGdW5jIiwiUHJvbWlzZSIsImxvZ0Vycm9yIiwiY2F0Y2giLCJN
dXRhdGlvbk9ic2VydmVyIiwiY291bnRlciIsIm9ic2VydmVyIiwidGV4dE5vZGUiLCJjaGFyYWN0
ZXJEYXRhIiwiX3Jlc29sdmUiLCJTZXQiLCJ1aWQiLCJzdWJzIiwiYWRkU3ViIiwic3ViIiwicmVt
b3ZlU3ViIiwiYWRkRGVwIiwiYXJyYXlQcm90byIsImFycmF5TWV0aG9kcyIsIm1ldGhvZCIsIm9y
aWdpbmFsIiwib2JzZXJ2ZUFycmF5IiwiYXJyYXlLZXlzIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIs
IndhbGsiLCJpdGVtcyIsInJhdyIsInByb3RvdHlwZUFjY2Vzc29ycyIsImRlZmluZVByb3BlcnRp
ZXMiLCJ1aWQkMiIsImV4cE9yRm4iLCJkZWVwIiwidXNlciIsImFjdGl2ZSIsImRlcHMiLCJuZXdE
ZXBzIiwiZGVwSWRzIiwibmV3RGVwSWRzIiwiY2xlYW51cERlcHMiLCJ0aGlzJDEiLCJ0bXAiLCJ0
ZWFyZG93biIsImluaXQiLCIkbW91bnQiLCJrZWVwQWxpdmUiLCJtb3VudGVkTm9kZSIsInByZXBh
dGNoIiwiaW5zZXJ0IiwiZGVzdHJveSIsInVpZCQxIiwiX3VpZCIsIl9zZWxmIiwiZGF0YURlZiIs
InByb3BzRGVmIiwiJHNldCIsIiRkZWxldGUiLCJpbW1lZGlhdGUiLCJob29rUkUiLCJjYnMiLCJw
cmV2RWwiLCJwcmV2Vm5vZGUiLCJwcmV2QWN0aXZlSW5zdGFuY2UiLCJfX3BhdGNoX18iLCJfX3Z1
ZV9fIiwiJG5leHRUaWNrIiwiX28iLCJfbiIsIl9zIiwiX2wiLCJfdCIsIl9xIiwiX2kiLCJfbSIs
Il9mIiwiX2siLCJfYiIsIl92IiwiX2UiLCJfdSIsIl9nIiwicGF0dGVyblR5cGVzIiwiS2VlcEFs
aXZlIiwiaW5jbHVkZSIsImV4Y2x1ZGUiLCJjcmVhdGVkIiwiZGVzdHJveWVkIiwiYnVpbHRJbkNv
bXBvbmVudHMiLCJjb25maWdEZWYiLCJ1dGlsIiwiZGVmaW5lUmVhY3RpdmUiLCJkZWxldGUiLCJz
c3JDb250ZXh0IiwidmVyc2lvbiIsImVtcHR5U3R5bGUiLCJhY2NlcHRWYWx1ZSIsInN2ZyIsIm1h
dGgiLCJpc0hUTUxUYWciLCJub2RlT3BzIiwiaG9va3MiLCJiYXNlTW9kdWxlcyIsImtsYXNzIiwi
Y3NzVGV4dCIsImxpc3REZWxpbWl0ZXIiLCJwcm9wZXJ0eURlbGltaXRlciIsImNzc1ZhclJFIiwi
aW1wb3J0YW50UkUiLCJzZXRQcm9wZXJ0eSIsIm5vcm1hbGl6ZWROYW1lIiwibm9ybWFsaXplIiwi
dmVuZG9yTmFtZXMiLCJjYXBOYW1lIiwiaGFzVHJhbnNpdGlvbiIsIm9udHJhbnNpdGlvbmVuZCIs
Im9ud2Via2l0dHJhbnNpdGlvbmVuZCIsIm9uYW5pbWF0aW9uZW5kIiwib253ZWJraXRhbmltYXRp
b25lbmQiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJhY3RpdmF0ZSIsInBsYXRmb3JtTW9kdWxl
cyIsInBhdGNoIiwiYmFja2VuZCIsImVtcHR5Tm9kZUF0IiwiY3JlYXRlUm1DYiIsImNoaWxkRWxt
IiwicmVtb3ZlTm9kZSIsImNyZWF0ZUVsbSIsImluc2VydGVkVm5vZGVRdWV1ZSIsIm5lc3RlZCIs
InNldFNjb3BlIiwiY3JlYXRlQ2hpbGRyZW4iLCJpbnZva2VDcmVhdGVIb29rcyIsImlzUmVhY3Rp
dmF0ZWQiLCJpbml0Q29tcG9uZW50IiwicmVhY3RpdmF0ZUNvbXBvbmVudCIsInBlbmRpbmdJbnNl
cnQiLCJpc1BhdGNoYWJsZSIsImlubmVyTm9kZSIsInJlZiQkMSIsImFuY2VzdG9yIiwiX3Njb3Bl
SWQiLCJhZGRWbm9kZXMiLCJzdGFydElkeCIsImludm9rZURlc3Ryb3lIb29rIiwicmVtb3ZlVm5v
ZGVzIiwiY2giLCJyZW1vdmVBbmRJbnZva2VSZW1vdmVIb29rIiwidXBkYXRlQ2hpbGRyZW4iLCJv
bGRDaCIsIm5ld0NoIiwicmVtb3ZlT25seSIsIm9sZEtleVRvSWR4IiwiaWR4SW5PbGQiLCJlbG1U
b01vdmUiLCJvbGRTdGFydElkeCIsIm5ld1N0YXJ0SWR4Iiwib2xkRW5kSWR4Iiwib2xkU3RhcnRW
bm9kZSIsIm9sZEVuZFZub2RlIiwibmV3RW5kSWR4IiwibmV3U3RhcnRWbm9kZSIsIm5ld0VuZFZu
b2RlIiwiY2FuTW92ZSIsInBhdGNoVm5vZGUiLCJoeWRyYXRlIiwicG9zdHBhdGNoIiwiaW52b2tl
SW5zZXJ0SG9vayIsImluaXRpYWwiLCJoYXNDaGlsZE5vZGVzIiwiY2hpbGRyZW5NYXRjaCIsImZp
cnN0Q2hpbGQiLCJpc1JlbmRlcmVkTW9kdWxlIiwiaXNJbml0aWFsUGF0Y2giLCJpc1JlYWxFbGVt
ZW50IiwiaGFzQXR0cmlidXRlIiwib2xkRWxtIiwicGFyZW50RWxtJDEiLCJpc1RleHRJbnB1dFR5
cGUiLCJ2bW9kZWwiLCJtb2RlbCQxIiwiX3ZPcHRpb25zIiwicHJldk9wdGlvbnMiLCJvIiwidHJh
bnNpdGlvbiQkMSIsIm9yaWdpbmFsRGlzcGxheSIsIl9fdk9yaWdpbmFsRGlzcGxheSIsImRpc3Bs
YXkiLCJ1bmJpbmQiLCJwbGF0Zm9ybURpcmVjdGl2ZXMiLCJ0cmFuc2l0aW9uUHJvcHMiLCJtb2Rl
IiwiVHJhbnNpdGlvbiIsIl9sZWF2aW5nIiwib2xkUmF3Q2hpbGQiLCJkZWxheWVkTGVhdmUiLCJt
b3ZlQ2xhc3MiLCJUcmFuc2l0aW9uR3JvdXAiLCJwcmV2Q2hpbGRyZW4iLCJyYXdDaGlsZHJlbiIs
InRyYW5zaXRpb25EYXRhIiwia2VwdCIsInJlbW92ZWQiLCJjJDEiLCJiZWZvcmVVcGRhdGUiLCJ1
cGRhdGVkIiwiaGFzTW92ZSIsImJvZHkiLCJvZmZzZXRIZWlnaHQiLCJwcm9wZXJ0eU5hbWUiLCJf
aGFzTW92ZSIsImNsb25lIiwicGxhdGZvcm1Db21wb25lbnRzIiwiZGVjb2RlciIsImNvbnRlbnQi
LCJlbmNvZGVkIiwiZGl2IiwicmVnZXhFc2NhcGVSRSIsIm9wZW4iLCJjbG9zZSIsImtsYXNzJDEi
LCJzdHlsZSQxIiwibW9kdWxlcyQxIiwiZGlyZWN0aXZlcyQxIiwiYmFzZU9wdGlvbnMiLCJyZWR1
Y2UiLCJoZSIsImRlY29kZSIsInNpbmdsZUF0dHJJZGVudGlmaWVyIiwic2luZ2xlQXR0ckFzc2ln
biIsInNpbmdsZUF0dHJWYWx1ZXMiLCJuY25hbWUiLCJxbmFtZUNhcHR1cmUiLCJnIiwiJmx0OyIs
IiZndDsiLCImcXVvdDsiLCImYW1wOyIsIiYjMTA7IiwiaXNJZ25vcmVOZXdsaW5lVGFnIiwiZXNj
IiwidGFiIiwic3BhY2UiLCJ1cCIsInJpZ2h0IiwiZG93biIsImdlbkd1YXJkIiwic3RvcCIsInBy
ZXZlbnQiLCJzZWxmIiwiY3RybCIsImFsdCIsIm1ldGEiLCJtaWRkbGUiLCJiYXNlRGlyZWN0aXZl
cyIsImNsb2FrIiwiY3JlYXRlQ29tcGlsZXIiLCJiYXNlQ29tcGlsZSIsImZpbmFsT3B0aW9ucyIs
InRpcHMiLCJ0aXAiLCJjb21waWxlVG9GdW5jdGlvbnMiLCJyZWYkMSIsImlkVG9UZW1wbGF0ZSIs
Im1vdW50IiwiZG9jdW1lbnRFbGVtZW50IiwiRHVSMiIsImV4cG9ydHMiLCJldmFsIiwiRlorZiIs
ImNzc1dpdGhNYXBwaW5nVG9TdHJpbmciLCJ1c2VTb3VyY2VNYXAiLCJjc3NNYXBwaW5nIiwiYnRv
YSIsInNvdXJjZU1hcHBpbmciLCJ0b0NvbW1lbnQiLCJzb3VyY2VzIiwic291cmNlUm9vdCIsInNv
dXJjZU1hcCIsInVuZXNjYXBlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwibWVkaWFRdWVyeSIsImFs
cmVhZHlJbXBvcnRlZE1vZHVsZXMiLCJWVS84IiwicmF3U2NyaXB0RXhwb3J0cyIsImNvbXBpbGVk
VGVtcGxhdGUiLCJpbmplY3RTdHlsZXMiLCJzY29wZUlkIiwibW9kdWxlSWRlbnRpZmllciIsImVz
TW9kdWxlIiwic2NyaXB0RXhwb3J0cyIsIl9fVlVFX1NTUl9DT05URVhUX18iLCJfcmVnaXN0ZXJl
ZENvbXBvbmVudHMiLCJfc3NyUmVnaXN0ZXIiLCJiZWZvcmVDcmVhdGUiLCJyamowIiwiYWRkU3R5
bGVzVG9Eb20iLCJkb21TdHlsZSIsInN0eWxlc0luRG9tIiwicGFydHMiLCJhZGRTdHlsZSIsImNy
ZWF0ZVN0eWxlRWxlbWVudCIsInN0eWxlRWxlbWVudCIsImhlYWQiLCJpc1Byb2R1Y3Rpb24iLCJp
c09sZElFIiwic3R5bGVJbmRleCIsInNpbmdsZXRvbkNvdW50ZXIiLCJzaW5nbGV0b25FbGVtZW50
IiwiYXBwbHlUb1NpbmdsZXRvblRhZyIsImFwcGx5VG9UYWciLCJuZXdPYmoiLCJtZWRpYSIsInN0
eWxlU2hlZXQiLCJyZXBsYWNlVGV4dCIsImNzc05vZGUiLCJjaGlsZE5vZGVzIiwiaGFzRG9jdW1l
bnQiLCJERUJVRyIsIkVycm9yIiwibGlzdFRvU3R5bGVzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUi
LCJwYXJlbnRJZCIsIl9pc1Byb2R1Y3Rpb24iLCJuZXdMaXN0IiwibWF5UmVtb3ZlIiwidGV4dFN0
b3JlIiwicmVwbGFjZW1lbnQiLCJybW5oIiwiZGxvY0hhc2hFbXB0eSIsImRsb2MiLCJfZXZlcnki
LCJpdGVyYXRvciIsIl9mbGF0dGVuIiwiZmxhdCIsIl9hc3luY0V2ZXJ5U2VyaWVzIiwiY29tcGxl
dGVkIiwiaXRlcmF0ZSIsInBhcmFtaWZ5U3RyaW5nIiwicGFyYW1zIiwibW9kIiwicGFyYW0iLCJy
ZWdpZnlTdHJpbmciLCJvdXQiLCJzdWJzdHIiLCJjYXB0dXJlcyIsInRlcm1pbmF0b3IiLCJyb3V0
ZXMiLCJkZWxpbWl0ZXIiLCJjaHVuayIsImxvY2F0aW9uIiwibGlzdGVuZXIiLCJoaXN0b3J5Iiwi
Y2hlY2siLCJvbkhhc2hDaGFuZ2VkIiwiZmlyZSIsIm9ucG9wc3RhdGUiLCJvbmhhc2hjaGFuZ2Ui
LCJvbmNoYW5nZSIsIm9uQ2hhbmdlRXZlbnQiLCJSb3V0ZXIiLCJkb2N1bWVudE1vZGUiLCJmcmFt
ZSIsIndyaXRlRnJhbWUiLCJhdHRhY2hFdmVudCIsInNldEludGVydmFsIiwic2V0SGFzaCIsInB1
c2hTdGF0ZSIsInRpdGxlIiwiZiIsImdldEVsZW1lbnRCeUlkIiwiY29udGVudERvY3VtZW50Iiwi
Y29udGVudFdpbmRvdyIsIndyaXRlIiwic3luY0hhc2giLCJfaGFzaCIsIl9tZXRob2RzIiwiX2lu
c2VydCIsImluc2VydEV4IiwiaGlzdG9yeVN1cHBvcnQiLCJjb25maWd1cmUiLCJyIiwicm91dGVU
byIsIm5ld1VSTCIsInVybCIsImdldFBhdGgiLCJkaXNwYXRjaCIsImNvbnZlcnRfaGFzaF9pbl9p
bml0IiwicmVwbGFjZVN0YXRlIiwicnVuX2luX2luaXQiLCJleHBsb2RlIiwic2V0Um91dGUiLCJy
b3V0ZSIsImdldFJvdXRlIiwicGF0aG5hbWUiLCJRVUVSWV9TRVBBUkFUT1IiLCJyZWN1cnNlIiwi
YXN5bmMiLCJzdHJpY3QiLCJub3Rmb3VuZCIsInJlc291cmNlIiwiaHRtbDVoaXN0b3J5IiwicnVu
X2hhbmRsZXJfaW5faW5pdCIsImFmdGVyIiwiYmVmb3JlIiwidG9rZW4iLCJtYXRjaGVyIiwicm91
dGVzRm4iLCJ1cGRhdGVBbmRJbnZva2UiLCJpbnZva2UiLCJydW5saXN0IiwiaW52b2tlZCIsIl9p
bnZva2VkIiwicmV2ZXJzZSIsInRoaXNBcmciLCJyZWdleHAiLCJmaWx0ZXJSb3V0ZXMiLCJkZWVw
Q29weSIsImFwcGx5RmlsdGVyIiwibmV3Um91dGVzIiwibWF0Y2hlZCIsImV4YWN0IiwicGFyZW50
VHlwZSIsInBhcnQiLCJleHRyYSIsImxvY2FsIiwicmVuYW1lIiwicm91dGVUeXBlIiwiaXNSb3V0
ZSIsInRUVmsiLCJuZXdTdHlsZXMiXSwibWFwcGluZ3MiOiJBQUFBQSxjQUFjLElBRVJDLE9BQ0Es
U0FBVUMsRUFBUUMsRUFBcUJDLEdBRTdDLFlBQ0FDLFFBQU9DLGVBQWVILEVBQXFCLGNBQWdCSSxP
QUFPLElDTmxFLFNBQUFDOzs7OztBQVNBLFFBQUFDLEdBQUFDLEdBQ0EsV0FBQUMsS0FBQUQsR0FB
QSxPQUFBQSxFQUdBLFFBQUFFLEdBQUFGLEdBQ0EsV0FBQUMsS0FBQUQsR0FBQSxPQUFBQSxFQUdB
LFFBQUFHLEdBQUFILEdBQ0EsV0FBQUEsRUFHQSxRQUFBSSxHQUFBSixHQUNBLFdBQUFBLEVBTUEs
UUFBQUssR0FBQVIsR0FDQSxNQUNBLGdCQUFBQSxJQUNBLGdCQUFBQSxJQUNBLGlCQUFBQSxHQVNB
LFFBQUFTLEdBQUFDLEdBQ0EsY0FBQUEsR0FBQSxnQkFBQUEsR0FTQSxRQUFBQyxHQUFBRCxHQUNB
LDBCQUFBRSxHQUFBQyxLQUFBSCxHQUdBLFFBQUFJLEdBQUFYLEdBQ0EsMEJBQUFTLEdBQUFDLEtB
QUFWLEdBTUEsUUFBQVksR0FBQUMsR0FDQSxHQUFBQyxHQUFBQyxXQUFBRixFQUNBLE9BQUFDLElB
QUEsR0FBQUUsS0FBQUMsTUFBQUgsUUFBQUksU0FBQUwsR0FNQSxRQUFBTSxHQUFBTixHQUNBLGFB
QUFBLEVBQ0EsR0FDQSxnQkFBQUEsR0FDQU8sS0FBQUMsVUFBQVIsRUFBQSxRQUNBUyxPQUFBVCxH
QU9BLFFBQUFVLEdBQUFWLEdBQ0EsR0FBQUMsR0FBQUMsV0FBQUYsRUFDQSxPQUFBVyxPQUFBVixH
QUFBRCxFQUFBQyxFQU9BLFFBQUFXLEdBQ0FDLEVBQ0FDLEdBSUEsT0FGQUMsR0FBQWpDLE9BQUFr
QyxPQUFBLE1BQ0FDLEVBQUFKLEVBQUFLLE1BQUEsS0FDQUMsRUFBQSxFQUFpQkEsRUFBQUYsRUFB
QUcsT0FBaUJELElBQ2xDSixFQUFBRSxFQUFBRSxLQUFBLENBRUEsT0FBQUwsR0FDQSxTQUFBZCxH
QUFzQixNQUFBZSxHQUFBZixFQUFBcUIsZ0JBQ3RCLFNBQUFyQixHQUFzQixNQUFBZSxHQUFBZixJ
QWdCdEIsUUFBQXNCLEdBQUFDLEVBQUFDLEdBQ0EsR0FBQUQsRUFBQUgsT0FBQSxDQUNBLEdBQUFL
LEdBQUFGLEVBQUFHLFFBQUFGLEVBQ0EsSUFBQUMsR0FBQSxFQUNBLE1BQUFGLEdBQUFJLE9BQUFG
LEVBQUEsSUFTQSxRQUFBRyxHQUFBbEMsRUFBQW1DLEdBQ0EsTUFBQUMsSUFBQWpDLEtBQUFILEVB
QUFtQyxHQU1BLFFBQUFFLEdBQUFDLEdBQ0EsR0FBQUMsR0FBQW5ELE9BQUFrQyxPQUFBLEtBQ0Es
aUJBQUFILEdBRUEsTUFEQW9CLEdBQUFwQixLQUNBb0IsRUFBQXBCLEdBQUFtQixFQUFBbkIsS0Fp
Q0EsUUFBQXFCLEdBQUFGLEVBQUFHLEdBQ0EsUUFBQUMsR0FBQUMsR0FDQSxHQUFBQyxHQUFBQyxV
QUFBbkIsTUFDQSxPQUFBa0IsR0FDQUEsRUFBQSxFQUNBTixFQUFBUSxNQUFBTCxFQUFBSSxXQUNB
UCxFQUFBbkMsS0FBQXNDLEVBQUFFLEdBQ0FMLEVBQUFuQyxLQUFBc0MsR0FJQSxNQURBQyxHQUFB
SyxRQUFBVCxFQUFBWixPQUNBZ0IsRUFNQSxRQUFBTSxHQUFBekIsRUFBQTBCLEdBQ0FBLEtBQUEs
Q0FHQSxLQUZBLEdBQUF4QixHQUFBRixFQUFBRyxPQUFBdUIsRUFDQUMsRUFBQSxHQUFBQyxPQUFB
MUIsR0FDQUEsS0FDQXlCLEVBQUF6QixHQUFBRixFQUFBRSxFQUFBd0IsRUFFQSxPQUFBQyxHQU1B
LFFBQUFFLEdBQUFDLEVBQUFDLEdBQ0EsT0FBQW5CLEtBQUFtQixHQUNBRCxFQUFBbEIsR0FBQW1C
LEVBQUFuQixFQUVBLE9BQUFrQixHQU1BLFFBQUFFLEdBQUExQixHQUVBLE9BREEyQixNQUNBL0Is
RUFBQSxFQUFpQkEsRUFBQUksRUFBQUgsT0FBZ0JELElBQ2pDSSxFQUFBSixJQUNBMkIsRUFBQUks
RUFBQTNCLEVBQUFKLEdBR0EsT0FBQStCLEdBUUEsUUFBQUMsR0FBQWQsRUFBQWUsRUFBQUMsSUF5
QkEsUUFBQUMsR0FBQWpCLEVBQUFlLEdBQ0EsR0FBQWYsSUFBQWUsRUFBZ0IsUUFDaEIsSUFBQUcs
R0FBQTlELEVBQUE0QyxHQUNBbUIsRUFBQS9ELEVBQUEyRCxFQUNBLEtBQUFHLElBQUFDLEVBc0JH
LE9BQUFELElBQUFDLEdBQ0gvQyxPQUFBNEIsS0FBQTVCLE9BQUEyQyxFQXRCQSxLQUNBLEdBQUFL
LEdBQUFaLE1BQUFhLFFBQUFyQixHQUNBc0IsRUFBQWQsTUFBQWEsUUFBQU4sRUFDQSxJQUFBSyxH
QUFBRSxFQUNBLE1BQUF0QixHQUFBakIsU0FBQWdDLEVBQUFoQyxRQUFBaUIsRUFBQXVCLE1BQUEs
U0FBQUMsRUFBQTFDLEdBQ0EsTUFBQW1DLEdBQUFPLEVBQUFULEVBQUFqQyxLQUVPLElBQUFzQyxH
QUFBRSxFQVFQLFFBUEEsSUFBQUcsR0FBQWhGLE9BQUFpRixLQUFBMUIsR0FDQTJCLEVBQUFsRixP
QUFBaUYsS0FBQVgsRUFDQSxPQUFBVSxHQUFBMUMsU0FBQTRDLEVBQUE1QyxRQUFBMEMsRUFBQUYs
TUFBQSxTQUFBL0IsR0FDQSxNQUFBeUIsR0FBQWpCLEVBQUFSLEdBQUF1QixFQUFBdkIsTUFNSyxN
QUFBZ0MsR0FFTCxVQVNBLFFBQUFJLEdBQUExQyxFQUFBdkIsR0FDQSxPQUFBbUIsR0FBQSxFQUFp
QkEsRUFBQUksRUFBQUgsT0FBZ0JELElBQ2pDLEdBQUFtQyxFQUFBL0IsRUFBQUosR0FBQW5CLEdB
QWtDLE1BQUFtQixFQUVsQyxVQU1BLFFBQUErQyxHQUFBbEMsR0FDQSxHQUFBbUMsSUFBQSxDQUNB
LG1CQUNBQSxJQUNBQSxHQUFBLEVBQ0FuQyxFQUFBUSxNQUFBNEIsS0FBQTdCLGFBeUhBLFFBQUE4
QixHQUFBeEQsR0FDQSxHQUFBd0MsSUFBQXhDLEVBQUEsSUFBQXlELFdBQUEsRUFDQSxhQUFBakIs
R0FBQSxLQUFBQSxFQU1BLFFBQUFrQixHQUFBN0UsRUFBQW1DLEVBQUE3QixFQUFBd0UsR0FDQTFG
LE9BQUFDLGVBQUFXLEVBQUFtQyxHQUNBN0MsTUFBQWdCLEVBQ0F3RSxlQUNBQyxVQUFBLEVBQ0FD
LGNBQUEsSUFRQSxRQUFBQyxHQUFBQyxHQUNBLElBQUFDLEdBQUFDLEtBQUFGLEdBQUEsQ0FHQSxH
QUFBRyxHQUFBSCxFQUFBMUQsTUFBQSxJQUNBLGlCQUFBeEIsR0FDQSxPQUFBeUIsR0FBQSxFQUFt
QkEsRUFBQTRELEVBQUEzRCxPQUFxQkQsSUFBQSxDQUN4QyxJQUFBekIsRUFBaUIsTUFDakJBLEtB
QUFxRixFQUFBNUQsSUFFQSxNQUFBekIsS0FxR0EsUUFBQXNGLEdBQUFDLEVBQUFDLEVBQUFDLEdB
Q0EsR0FBQUMsR0FBQUMsYUFDQUQsR0FBQUMsYUFBQXhGLEtBQUEsS0FBQW9GLEVBQUFDLEVBQUFD
LE9BQ0csQ0FLSCxJQUFBRyxJQUFBLG1CQUFBQyxTQUdBLEtBQUFOLEVBRkFNLFNBQUFDLE1BQUFQ
LElBNkRBLFFBQUFRLEdBQUFDLEdBQ0Esd0JBQUFBLElBQUEsY0FBQVosS0FBQVksRUFBQXBGLFlB
Z0tBLFFBQUFxRixHQUFBQyxHQUNBQyxHQUFBQyxRQUFtQkMsR0FBQUMsS0FBQUgsR0FBQUMsUUFD
bkJELEdBQUFDLE9BQUFGLEVBR0EsUUFBQUssS0FDQUosR0FBQUMsT0FBQUMsR0FBQUcsTUEyR0Es
UUFBQUMsR0FBQUwsRUFBQU0sRUFBQXJDLEdBRUErQixFQUFBTyxVQUFBRCxFQVNBLFFBQUFFLEdB
QUFSLEVBQUFNLEVBQUFyQyxHQUNBLE9BQUE1QyxHQUFBLEVBQUFtQixFQUFBeUIsRUFBQTNDLE9B
QWtDRCxFQUFBbUIsRUFBT25CLElBQUEsQ0FDekMsR0FBQVUsR0FBQWtDLEVBQUE1QyxFQUNBb0Qs
R0FBQXVCLEVBQUFqRSxFQUFBdUUsRUFBQXZFLEtBU0EsUUFBQTBFLEdBQUF2SCxFQUFBd0gsR0FD
QSxHQUFBL0csRUFBQVQsR0FBQSxDQUdBLEdBQUF5SCxFQWVBLE9BZEE3RSxHQUFBNUMsRUFBQSxX
QUFBQSxFQUFBMEgsaUJBQUFDLElBQ0FGLEVBQUF6SCxFQUFBMEgsT0FFQUUsR0FBQUMsZ0JBQ0FD
LE9BQ0FqRSxNQUFBYSxRQUFBMUUsSUFBQVcsRUFBQVgsS0FDQUYsT0FBQWlJLGFBQUEvSCxLQUNB
QSxFQUFBZ0ksU0FFQVAsRUFBQSxHQUFBRSxJQUFBM0gsSUFFQXdILEdBQUFDLEdBQ0FBLEVBQUFR
LFVBRUFSLEdBTUEsUUFBQVMsR0FDQXhILEVBQ0FtQyxFQUNBN0IsRUFDQW1ILEVBQ0FDLEdBRUEs
R0FBQUMsR0FBQSxHQUFBeEIsSUFFQXlCLEVBQUF4SSxPQUFBeUkseUJBQUE3SCxFQUFBbUMsRUFD
QSxLQUFBeUYsSUFBQSxJQUFBQSxFQUFBNUMsYUFBQSxDQUtBLEdBQUE4QyxHQUFBRixLQUFBRyxJ
QUNBQyxFQUFBSixLQUFBSyxJQUVBQyxHQUFBUixHQUFBYixFQUFBdkcsRUFDQWxCLFFBQUFDLGVB
QUFXLEVBQUFtQyxHQUNBMkMsWUFBQSxFQUNBRSxjQUFBLEVBQ0ErQyxJQUFBLFdBQ0EsR0FBQXpJ
LEdBQUF3SSxJQUFBM0gsS0FBQUgsR0FBQU0sQ0FVQSxPQVRBNkYsSUFBQUMsU0FDQXVCLEVBQUFR
LFNBQ0FELEdBQ0FBLEVBQUFQLElBQUFRLFNBRUFoRixNQUFBYSxRQUFBMUUsSUFDQThJLEVBQUE5
SSxJQUdBQSxHQUVBMkksSUFBQSxTQUFBSSxHQUNBLEdBQUEvSSxHQUFBd0ksSUFBQTNILEtBQUFI
LEdBQUFNLENBRUErSCxLQUFBL0ksR0FBQStJLE9BQUEvSSxRQU9BMEksRUFDQUEsRUFBQTdILEtB
QUFILEVBQUFxSSxHQUVBL0gsRUFBQStILEVBRUFILEdBQUFSLEdBQUFiLEVBQUF3QixHQUNBVixF
QUFBVyxjQVVBLFFBQUFMLEdBQUE3QixFQUFBakUsRUFBQTdCLEdBQ0EsR0FBQTZDLE1BQUFhLFFB
QUFvQyxJQUFBL0YsRUFBQThCLEdBR0EsTUFGQWlFLEdBQUExRSxPQUFBakIsS0FBQThILElBQUFu
QyxFQUFBMUUsT0FBQVMsR0FDQWlFLEVBQUFuRSxPQUFBRSxFQUFBLEVBQUE3QixHQUNBQSxDQUVB
LElBQUE0QixFQUFBa0UsRUFBQWpFLEdBRUEsTUFEQWlFLEdBQUFqRSxHQUFBN0IsRUFDQUEsQ0FF
QSxJQUFBeUcsR0FBQSxFQUFBQyxNQUNBLE9BQUFaLEdBQUFrQixRQUFBUCxLQUFBUSxRQUtBakgs
RUFFQXlHLEdBSUFTLEVBQUFULEVBQUF6SCxNQUFBNkMsRUFBQTdCLEdBQ0F5RyxFQUFBWSxJQUFB
VyxTQUNBaEksSUFMQThGLEVBQUFqRSxHQUFBN0IsRUFDQUEsR0FVQSxRQUFBa0ksR0FBQXBDLEVB
QUFqRSxHQUNBLEdBQUFnQixNQUFBYSxRQUFBb0MsSUFBQS9GLEVBQUE4QixHQUVBLFdBREFpRSxH
QUFBbkUsT0FBQUUsRUFBQSxFQUdBLElBQUE0RSxHQUFBLEVBQUFDLE1BQ0FaLEdBQUFrQixRQUFB
UCxLQUFBUSxTQU9BckYsRUFBQWtFLEVBQUFqRSxXQUdBaUUsR0FBQWpFLEdBQ0E0RSxHQUdBQSxF
QUFBWSxJQUFBVyxVQU9BLFFBQUFGLEdBQUE5SSxHQUNBLE9BQUE2RSxPQUFBLEdBQUExQyxFQUFB
LEVBQUFtQixFQUFBdEQsRUFBQW9DLE9BQWlERCxFQUFBbUIsRUFBT25CLElBQ3hEMEMsRUFBQTdF
LEVBQUFtQyxHQUNBMEMsS0FBQTZDLFFBQUE3QyxFQUFBNkMsT0FBQVcsSUFBQVEsU0FDQWhGLE1B
QUFhLFFBQUFHLElBQ0FpRSxFQUFBakUsR0FnQ0EsUUFBQXNFLEdBQUFwRixFQUFBcUYsR0FDQSxJ
QUFBQSxFQUFjLE1BQUFyRixFQUdkLFFBRkFsQixHQUFBd0csRUFBQUMsRUFDQXZFLEVBQUFqRixP
QUFBaUYsS0FBQXFFLEdBQ0FqSCxFQUFBLEVBQWlCQSxFQUFBNEMsRUFBQTNDLE9BQWlCRCxJQUNs
Q1UsRUFBQWtDLEVBQUE1QyxHQUNBa0gsRUFBQXRGLEVBQUFsQixHQUNBeUcsRUFBQUYsRUFBQXZH
LEdBQ0FELEVBQUFtQixFQUFBbEIsR0FFS2xDLEVBQUEwSSxJQUFBMUksRUFBQTJJLElBQ0xILEVB
QUFFLEVBQUFDLEdBRkFYLEVBQUE1RSxFQUFBbEIsRUFBQXlHLEVBS0EsT0FBQXZGLEdBTUEsUUFB
QXdGLEdBQ0FDLEVBQ0FDLEVBQ0F2RCxHQUVBLE1BQUFBLEdBbUJHc0QsR0FBQUMsRUFDSCxXQUVB
LEdBQUFDLEdBQUEsa0JBQUFELEdBQ0FBLEVBQUE1SSxLQUFBcUYsR0FDQXVELEVBQ0FFLEVBQUEs
a0JBQUFILEdBQ0FBLEVBQUEzSSxLQUFBcUYsT0FDQTlGLEVBQ0EsT0FBQXNKLEdBQ0FQLEVBQUFP
LEVBQUFDLEdBRUFBLE9BWkcsR0FqQkhGLEVBR0FELEVBUUEsV0FDQSxNQUFBTCxHQUNBLGtCQUFB
TSxLQUFBNUksS0FBQXVFLE1BQUFxRSxFQUNBLGtCQUFBRCxLQUFBM0ksS0FBQXVFLE1BQUFvRSxJ
QVZBQyxFQUhBRCxFQTJEQSxRQUFBSSxHQUNBSixFQUNBQyxHQUVBLE1BQUFBLEdBQ0FELEVBQ0FB
LEVBQUFLLE9BQUFKLEdBQ0E1RixNQUFBYSxRQUFBK0UsR0FDQUEsR0FDQUEsR0FDQUQsRUFjQSxR
QUFBTSxHQUFBTixFQUFBQyxHQUNBLEdBQUF2RixHQUFBcEUsT0FBQWtDLE9BQUF3SCxHQUFBLEtB
Q0EsT0FBQUMsR0FDQTNGLEVBQUFJLEVBQUF1RixHQUNBdkYsRUE4RUEsUUFBQTZGLEdBQUFDLEdB
Q0EsR0FBQUMsR0FBQUQsRUFBQUMsS0FDQSxJQUFBQSxFQUFBLENBQ0EsR0FDQTlILEdBQUFuQixF
QUFBa0osRUFEQWhHLElBRUEsSUFBQUwsTUFBQWEsUUFBQXVGLEdBRUEsSUFEQTlILEVBQUE4SCxF
QUFBN0gsT0FDQUQsS0FFQSxpQkFEQW5CLEVBQUFpSixFQUFBOUgsTUFFQStILEVBQUFDLEdBQUFu
SixHQUNBa0QsRUFBQWdHLElBQXFCRSxLQUFBLFdBS2xCLElBQUF6SixFQUFBc0osR0FDSCxPQUFB
cEgsS0FBQW9ILEdBQ0FqSixFQUFBaUosRUFBQXBILEdBQ0FxSCxFQUFBQyxHQUFBdEgsR0FDQXFC
LEVBQUFnRyxHQUFBdkosRUFBQUssR0FDQUEsR0FDV29KLEtBQUFwSixFQUdYZ0osR0FBQUMsTUFB
QS9GLEdBTUEsUUFBQW1HLEdBQUFMLEdBQ0EsR0FBQU0sR0FBQU4sRUFBQU0sTUFDQSxJQUFBekcs
TUFBQWEsUUFBQTRGLEdBRUEsT0FEQUMsR0FBQVAsRUFBQU0sVUFDQW5JLEVBQUEsRUFBbUJBLEVB
QUFtSSxFQUFBbEksT0FBbUJELElBQ3RDb0ksRUFBQUQsRUFBQW5JLElBQUFtSSxFQUFBbkksR0FR
QSxRQUFBcUksR0FBQVIsR0FDQSxHQUFBUyxHQUFBVCxFQUFBVSxVQUNBLElBQUFELEVBQ0EsT0FB
QTVILEtBQUE0SCxHQUFBLENBQ0EsR0FBQWxGLEdBQUFrRixFQUFBNUgsRUFDQSxtQkFBQTBDLEtB
Q0FrRixFQUFBNUgsSUFBcUJLLEtBQUFxQyxFQUFBb0YsT0FBQXBGLEtBVXJCLFFBQUFxRixHQUNB
QyxFQUNBQyxFQUNBNUUsR0FnQ0EsUUFBQTZFLEdBQUFsSSxHQUNBLEdBQUFtSSxHQUFBQyxHQUFB
cEksSUFBQXFJLEVBQ0FsQixHQUFBbkgsR0FBQW1JLEVBQUFILEVBQUFoSSxHQUFBaUksRUFBQWpJ
LEdBQUFxRCxFQUFBckQsR0E1QkEsa0JBQUFpSSxLQUNBQSxJQUFBZCxTQUdBRCxFQUFBZSxHQUNB
VCxFQUFBUyxHQUNBTixFQUFBTSxFQUNBLElBQUFLLEdBQUFMLEVBQUFNLE9BSUEsSUFIQUQsSUFD
QU4sRUFBQUQsRUFBQUMsRUFBQU0sRUFBQWpGLElBRUE0RSxFQUFBTyxPQUNBLE9BQUFsSixHQUFB
LEVBQUFtQixFQUFBd0gsRUFBQU8sT0FBQWpKLE9BQTRDRCxFQUFBbUIsRUFBT25CLElBQ25EMEks
RUFBQUQsRUFBQUMsRUFBQUMsRUFBQU8sT0FBQWxKLEdBQUErRCxFQUdBLElBQ0FyRCxHQURBbUgs
SUFFQSxLQUFBbkgsSUFBQWdJLEdBQ0FFLEVBQUFsSSxFQUVBLEtBQUFBLElBQUFpSSxHQUNBbEks
RUFBQWlJLEVBQUFoSSxJQUNBa0ksRUFBQWxJLEVBT0EsT0FBQW1ILEdBUUEsUUFBQXNCLEdBQ0F0
QixFQUNBSSxFQUNBbUIsRUFDQUMsR0FHQSxtQkFBQUQsR0FBQSxDQUdBLEdBQUFFLEdBQUF6QixF
QUFBSSxFQUVBLElBQUF4SCxFQUFBNkksRUFBQUYsR0FBMkIsTUFBQUUsR0FBQUYsRUFDM0IsSUFB
QUcsR0FBQXZCLEdBQUFvQixFQUNBLElBQUEzSSxFQUFBNkksRUFBQUMsR0FBb0MsTUFBQUQsR0FB
QUMsRUFDcEMsSUFBQUMsR0FBQUMsR0FBQUYsRUFDQSxJQUFBOUksRUFBQTZJLEVBQUFFLEdBQXFD
LE1BQUFGLEdBQUFFLEVBU3JDLE9BUEFGLEdBQUFGLElBQUFFLEVBQUFDLElBQUFELEVBQUFFLElB
WUEsUUFBQUUsR0FDQWhKLEVBQ0FpSixFQUNBQyxFQUNBN0YsR0FFQSxHQUFBOEYsR0FBQUYsRUFB
QWpKLEdBQ0FvSixHQUFBckosRUFBQW1KLEVBQUFsSixHQUNBN0MsRUFBQStMLEVBQUFsSixFQVVB
LElBUkFxSixFQUFBQyxRQUFBSCxFQUFBNUIsUUFDQTZCLElBQUFySixFQUFBb0osRUFBQSxXQUNB
aE0sR0FBQSxFQUNLa00sRUFBQXpLLE9BQUF1SyxFQUFBNUIsT0FBQSxLQUFBcEssT0FBQW9NLEdB
QUF2SixLQUNMN0MsR0FBQSxRQUlBSSxLQUFBSixFQUFBLENBQ0FBLEVBQUFxTSxFQUFBbkcsRUFB
QThGLEVBQUFuSixFQUdBLElBQUF5SixHQUFBMUUsR0FBQUMsYUFDQUQsSUFBQUMsZUFBQSxFQUNB
TixFQUFBdkgsR0FDQTRILEdBQUFDLGNBQUF5RSxFQUtBLE1BQUF0TSxHQU1BLFFBQUFxTSxHQUFB
bkcsRUFBQThGLEVBQUFuSixHQUVBLEdBQUFELEVBQUFvSixFQUFBLFlBR0EsR0FBQXpHLEdBQUF5
RyxFQUFBTyxPQVlBLE9BQUFyRyxNQUFBc0csU0FBQVQsZUFDQTNMLEtBQUE4RixFQUFBc0csU0FB
QVQsVUFBQWxKLFFBQ0F6QyxLQUFBOEYsRUFBQXVHLE9BQUE1SixHQUVBcUQsRUFBQXVHLE9BQUE1
SixHQUlBLGtCQUFBMEMsSUFBQSxhQUFBbUgsRUFBQVYsRUFBQTVCLE1BQ0E3RSxFQUFBMUUsS0FB
QXFGLEdBQ0FYLEdBaUZBLFFBQUFtSCxHQUFBMUosR0FDQSxHQUFBMkosR0FBQTNKLEtBQUExQixX
QUFBcUwsTUFBQSxxQkFDQSxPQUFBQSxLQUFBLE1BR0EsUUFBQVQsR0FBQTlCLEVBQUFwSCxHQUNB
LElBQUFhLE1BQUFhLFFBQUExQixHQUNBLE1BQUEwSixHQUFBMUosS0FBQTBKLEVBQUF0QyxFQUVB
LFFBQUFqSSxHQUFBLEVBQUF5SyxFQUFBNUosRUFBQVosT0FBa0NELEVBQUF5SyxFQUFTekssSUFD
M0MsR0FBQXVLLEVBQUExSixFQUFBYixNQUFBdUssRUFBQXRDLEdBQ0EsUUFJQSxVQTRKQSxRQUFB
eUMsR0FBQTdMLEdBQ0EsVUFBQThMLFFBQUExTSxpQkFBQXFCLE9BQUFULElBT0EsUUFBQStMLEdB
QUFDLEdBQ0EsR0FBQUMsR0FBQSxHQUFBSCxJQUNBRSxFQUFBRSxJQUNBRixFQUFBRyxLQUNBSCxF
QUFBSSxTQUNBSixFQUFBSyxLQUNBTCxFQUFBTSxJQUNBTixFQUFBTyxRQUNBUCxFQUFBUSxpQkFD
QVIsRUFBQVMsYUFPQSxPQUxBUixHQUFBUyxHQUFBVixFQUFBVSxHQUNBVCxFQUFBVSxTQUFBWCxF
QUFBVyxTQUNBVixFQUFBcEssSUFBQW1LLEVBQUFuSyxJQUNBb0ssRUFBQVcsVUFBQVosRUFBQVks
VUFDQVgsRUFBQVksVUFBQSxFQUNBWixFQUdBLFFBQUFhLElBQUFDLEdBR0EsT0FGQW5CLEdBQUFt
QixFQUFBM0wsT0FDQThCLEVBQUEsR0FBQUwsT0FBQStJLEdBQ0F6SyxFQUFBLEVBQWlCQSxFQUFB
eUssRUFBU3pLLElBQzFCK0IsRUFBQS9CLEdBQUE0SyxFQUFBZ0IsRUFBQTVMLEdBRUEsT0FBQStC
LEdBb0JBLFFBQUE4SixJQUFBQyxHQUNBLFFBQUFDLEtBQ0EsR0FBQUMsR0FBQTVLLFVBRUEwSyxF
QUFBQyxFQUFBRCxHQUNBLEtBQUFwSyxNQUFBYSxRQUFBdUosR0FPQSxNQUFBQSxHQUFBekssTUFB
QSxLQUFBRCxVQUxBLFFBREEwSixHQUFBZ0IsRUFBQUcsUUFDQWpNLEVBQUEsRUFBcUJBLEVBQUE4
SyxFQUFBN0ssT0FBbUJELElBQ3hDOEssRUFBQTlLLEdBQUFxQixNQUFBLEtBQUEySyxHQVFBLE1B
REFELEdBQUFELE1BQ0FDLEVBR0EsUUFBQUcsSUFDQUMsRUFDQUMsRUFDQUMsRUFDQUMsRUFDQXZJ
LEdBRUEsR0FBQWdFLEdBQUF3RSxFQUFBQyxFQUFBQyxDQUNBLEtBQUExRSxJQUFBb0UsR0FDQUks
RUFBQUosRUFBQXBFLEdBQ0F5RSxFQUFBSixFQUFBckUsR0FDQTBFLEVBQUFDLEdBQUEzRSxHQUNB
aEssRUFBQXdPLEtBS0t4TyxFQUFBeU8sSUFDTHpPLEVBQUF3TyxFQUFBVCxPQUNBUyxFQUFBSixF
QUFBcEUsR0FBQThELEdBQUFVLElBRUFGLEVBQUFJLEVBQUExRSxLQUFBd0UsRUFBQUUsRUFBQTFK
LEtBQUEwSixFQUFBRSxRQUFBRixFQUFBRyxVQUNLTCxJQUFBQyxJQUNMQSxFQUFBVixJQUFBUyxF
QUNBSixFQUFBcEUsR0FBQXlFLEdBR0EsS0FBQXpFLElBQUFxRSxHQUNBck8sRUFBQW9PLEVBQUFw
RSxNQUNBMEUsRUFBQUMsR0FBQTNFLEdBQ0F1RSxFQUFBRyxFQUFBMUUsS0FBQXFFLEVBQUFyRSxH
QUFBMEUsRUFBQUUsVUFPQSxRQUFBRSxJQUFBekosRUFBQTBKLEVBQUFDLEdBSUEsUUFBQUMsS0FD
QUQsRUFBQTFMLE1BQUE0QixLQUFBN0IsV0FHQWpCLEVBQUE0TCxFQUFBRCxJQUFBa0IsR0FQQSxH
QUFBakIsR0FDQWtCLEVBQUE3SixFQUFBMEosRUFTQS9PLEdBQUFrUCxHQUVBbEIsRUFBQUYsSUFB
QW1CLElBR0E5TyxFQUFBK08sRUFBQW5CLE1BQUEzTixFQUFBOE8sRUFBQUMsU0FFQW5CLEVBQUFr
QixFQUNBbEIsRUFBQUQsSUFBQWpILEtBQUFtSSxJQUdBakIsRUFBQUYsSUFBQW9CLEVBQUFELElB
SUFqQixFQUFBbUIsUUFBQSxFQUNBOUosRUFBQTBKLEdBQUFmLEVBS0EsUUFBQW9CLElBQ0FuQyxF
QUNBekcsRUFDQXdHLEdBS0EsR0FBQXBCLEdBQUFwRixFQUFBc0QsUUFBQUMsS0FDQSxLQUFBL0os
RUFBQTRMLEdBQUEsQ0FHQSxHQUFBNUgsTUFDQXFMLEVBQUFwQyxFQUFBb0MsTUFDQXRGLEVBQUFr
RCxFQUFBbEQsS0FDQSxJQUFBNUosRUFBQWtQLElBQUFsUCxFQUFBNEosR0FDQSxPQUFBcEgsS0FB
QWlKLEdBQUEsQ0FDQSxHQUFBMEQsR0FBQXBELEdBQUF2SixFQWlCQTRNLElBQUF2TCxFQUFBK0Ys
RUFBQXBILEVBQUEyTSxHQUFBLElBQ0FDLEdBQUF2TCxFQUFBcUwsRUFBQTFNLEVBQUEyTSxHQUFB
LEdBR0EsTUFBQXRMLElBR0EsUUFBQXVMLElBQ0F2TCxFQUNBd0wsRUFDQTdNLEVBQ0EyTSxFQUNB
RyxHQUVBLEdBQUF0UCxFQUFBcVAsR0FBQSxDQUNBLEdBQUE5TSxFQUFBOE0sRUFBQTdNLEdBS0Es
TUFKQXFCLEdBQUFyQixHQUFBNk0sRUFBQTdNLEdBQ0E4TSxTQUNBRCxHQUFBN00sSUFFQSxDQUNL
LElBQUFELEVBQUE4TSxFQUFBRixHQUtMLE1BSkF0TCxHQUFBckIsR0FBQTZNLEVBQUFGLEdBQ0FH
LFNBQ0FELEdBQUFGLElBRUEsRUFHQSxTQWlCQSxRQUFBSSxJQUFBeEMsR0FDQSxPQUFBakwsR0FB
QSxFQUFpQkEsRUFBQWlMLEVBQUFoTCxPQUFxQkQsSUFDdEMsR0FBQTBCLE1BQUFhLFFBQUEwSSxF
QUFBakwsSUFDQSxNQUFBMEIsT0FBQWdNLFVBQUFoRyxPQUFBckcsU0FBQTRKLEVBR0EsT0FBQUEs
R0FPQSxRQUFBMEMsSUFBQTFDLEdBQ0EsTUFBQTVNLEdBQUE0TSxJQUNBUCxFQUFBTyxJQUNBdkos
TUFBQWEsUUFBQTBJLEdBQ0EyQyxHQUFBM0MsT0FDQWhOLEdBR0EsUUFBQTRQLElBQUFDLEdBQ0Es
TUFBQTVQLEdBQUE0UCxJQUFBNVAsRUFBQTRQLEVBQUE1QyxPQUFBOU0sRUFBQTBQLEVBQUFyQyxX
QUdBLFFBQUFtQyxJQUFBM0MsRUFBQThDLEdBQ0EsR0FDQS9OLEdBQUFrQyxFQUFBOEwsRUFEQWpN
LElBRUEsS0FBQS9CLEVBQUEsRUFBYUEsRUFBQWlMLEVBQUFoTCxPQUFxQkQsSUFDbENrQyxFQUFB
K0ksRUFBQWpMLEdBQ0FqQyxFQUFBbUUsSUFBQSxpQkFBQUEsS0FDQThMLEVBQUFqTSxJQUFBOUIs
T0FBQSxHQUVBeUIsTUFBQWEsUUFBQUwsR0FDQUgsRUFBQThDLEtBQUF4RCxNQUFBVSxFQUFBNkws
R0FBQTFMLEdBQUE2TCxHQUFBLFFBQUEvTixJQUNLM0IsRUFBQTZELEdBQ0wyTCxHQUFBRyxHQUlB
LEVBQUE5QyxNQUFBNUwsT0FBQTRDLEdBQ08sS0FBQUEsR0FFUEgsRUFBQThDLEtBQUE2RixFQUFB
eEksSUFHQTJMLEdBQUEzTCxJQUFBMkwsR0FBQUcsR0FFQWpNLElBQUE5QixPQUFBLEdBQUF5SyxF
QUFBc0QsRUFBQTlDLEtBQUFoSixFQUFBZ0osT0FHQS9NLEVBQUE4TSxFQUFBZ0QsV0FDQS9QLEVB
QUFnRSxFQUFBNkksTUFDQWhOLEVBQUFtRSxFQUFBeEIsTUFDQXhDLEVBQUE2UCxLQUNBN0wsRUFB
QXhCLElBQUEsVUFBQXFOLEVBQUEsSUFBQS9OLEVBQUEsTUFFQStCLEVBQUE4QyxLQUFBM0MsSUFJ
QSxPQUFBSCxHQUtBLFFBQUFtTSxJQUFBQyxFQUFBQyxHQUlBLE1BSEFELEdBQUFFLFlBQUFGLEVB
QUEvRCxVQUNBK0QsSUFBQS9ELFNBRUE5TCxFQUFBNlAsR0FDQUMsRUFBQXpNLE9BQUF3TSxHQUNB
QSxFQUdBLFFBQUFHLElBQ0FDLEVBQ0F2RCxFQUNBSSxFQUNBSCxFQUNBRixHQUVBLEdBQUErQyxH
QUFBVSxJQUdBLE9BRkFWLEdBQUF4QyxhQUFBaUQsRUFDQVQsRUFBQVcsV0FBb0J6RCxPQUFBSSxV
QUFBSCxXQUFBRixPQUNwQitDLEVBR0EsUUFBQVksSUFDQUgsRUFDQUksRUFDQXZELEdBRUEsR0FB
QWpOLEVBQUFvUSxFQUFBbEssUUFBQW5HLEVBQUFxUSxFQUFBSyxXQUNBLE1BQUFMLEdBQUFLLFNB
R0EsSUFBQTFRLEVBQUFxUSxFQUFBTSxVQUNBLE1BQUFOLEdBQUFNLFFBR0EsSUFBQTFRLEVBQUFv
USxFQUFBTyxVQUFBNVEsRUFBQXFRLEVBQUFRLGFBQ0EsTUFBQVIsR0FBQVEsV0FHQSxLQUFBN1Es
RUFBQXFRLEVBQUFTLFVBR0csQ0FDSCxHQUFBQSxHQUFBVCxFQUFBUyxVQUFBNUQsR0FDQTZELEdB
QUEsRUFFQUMsRUFBQSxXQUNBLE9BQUFsUCxHQUFBLEVBQUFtQixFQUFBNk4sRUFBQS9PLE9BQTBD
RCxFQUFBbUIsRUFBT25CLElBQ2pEZ1AsRUFBQWhQLEdBQUFtUCxnQkFJQUMsRUFBQXJNLEVBQUEs
U0FBQWhCLEdBRUF3TSxFQUFBTSxTQUFBWCxHQUFBbk0sRUFBQTRNLEdBR0FNLEdBQ0FDLE1BSUFH
LEVBQUF0TSxFQUFBLFNBQUF1TSxHQUtBcFIsRUFBQXFRLEVBQUFLLGFBQ0FMLEVBQUFsSyxPQUFB
LEVBQ0E2SyxPQUlBbk4sRUFBQXdNLEVBQUFhLEVBQUFDLEVBNkNBLE9BM0NBL1EsR0FBQXlELEtB
Q0Esa0JBQUFBLEdBQUF3TixLQUVBeFIsRUFBQXdRLEVBQUFNLFdBQ0E5TSxFQUFBd04sS0FBQUgs
RUFBQUMsR0FFT25SLEVBQUE2RCxFQUFBeU4sWUFBQSxrQkFBQXpOLEdBQUF5TixVQUFBRCxPQUNQ
eE4sRUFBQXlOLFVBQUFELEtBQUFILEVBQUFDLEdBRUFuUixFQUFBNkQsRUFBQXNDLFNBQ0FrSyxF
QUFBSyxVQUFBVixHQUFBbk0sRUFBQXNDLE1BQUFzSyxJQUdBelEsRUFBQTZELEVBQUErTSxXQUNB
UCxFQUFBUSxZQUFBYixHQUFBbk0sRUFBQStNLFFBQUFILEdBQ0EsSUFBQTVNLEVBQUEwTixNQUNB
bEIsRUFBQU8sU0FBQSxFQUVBWSxXQUFBLFdBQ0EzUixFQUFBd1EsRUFBQU0sV0FBQTlRLEVBQUF3
USxFQUFBbEssU0FDQWtLLEVBQUFPLFNBQUEsRUFDQUksTUFFYW5OLEVBQUEwTixPQUFBLE1BSWJ2
UixFQUFBNkQsRUFBQTROLFVBQ0FELFdBQUEsV0FDQTNSLEVBQUF3USxFQUFBTSxXQUNBUSxFQUdB
LE9BR1d0TixFQUFBNE4sV0FLWFYsR0FBQSxFQUVBVixFQUFBTyxRQUNBUCxFQUFBUSxZQUNBUixF
QUFBTSxTQS9FQU4sRUFBQVMsU0FBQW5LLEtBQUF1RyxHQXFGQSxRQUFBd0UsSUFBQTNFLEdBQ0Es
R0FBQXZKLE1BQUFhLFFBQUEwSSxHQUNBLE9BQUFqTCxHQUFBLEVBQW1CQSxFQUFBaUwsRUFBQWhM
LE9BQXFCRCxJQUFBLENBQ3hDLEdBQUFrQyxHQUFBK0ksRUFBQWpMLEVBQ0EsSUFBQTlCLEVBQUFn
RSxJQUFBaEUsRUFBQWdFLEVBQUFtSixrQkFDQSxNQUFBbkosSUFVQSxRQUFBMk4sSUFBQTlMLEdB
Q0FBLEVBQUErTCxRQUFBblMsT0FBQWtDLE9BQUEsTUFDQWtFLEVBQUFnTSxlQUFBLENBRUEsSUFB
QUMsR0FBQWpNLEVBQUFzRyxTQUFBNEYsZ0JBQ0FELElBQ0FFLEdBQUFuTSxFQUFBaU0sR0FNQSxR
QUFBM0QsSUFBQUksRUFBQTVMLEVBQUFzUCxHQUNBQSxFQUNBeEwsR0FBQXlMLE1BQUEzRCxFQUFB
NUwsR0FFQThELEdBQUEwTCxJQUFBNUQsRUFBQTVMLEdBSUEsUUFBQXlQLElBQUE3RCxFQUFBNUws
R0FDQThELEdBQUE0TCxLQUFBOUQsRUFBQTVMLEdBR0EsUUFBQXFQLElBQ0FuTSxFQUNBaU0sRUFD
QVEsR0FFQTdMLEdBQUFaLEVBQ0FtSSxHQUFBOEQsRUFBQVEsTUFBK0NuRSxHQUFBaUUsR0FBQXZN
LEdBNEcvQyxRQUFBME0sSUFDQXhGLEVBQ0FHLEdBRUEsR0FBQXNGLEtBQ0EsS0FBQXpGLEVBQ0Es
TUFBQXlGLEVBR0EsUUFEQUMsTUFDQTNRLEVBQUEsRUFBQW1CLEVBQUE4SixFQUFBaEwsT0FBc0NE
LEVBQUFtQixFQUFPbkIsSUFBQSxDQUM3QyxHQUFBMkksR0FBQXNDLEVBQUFqTCxFQUdBLElBQUEy
SSxFQUFBeUMsYUFBQXpDLEVBQUFpSSxvQkFBQXhGLElBQ0F6QyxFQUFBcUMsTUFBQSxNQUFBckMs
RUFBQXFDLEtBQUE2RixLQVVBRixFQUFBOUwsS0FBQThELE9BVEEsQ0FDQSxHQUFBWixHQUFBWSxF
QUFBcUMsS0FBQTZGLEtBQ0FBLEVBQUFILEVBQUEzSSxLQUFBMkksRUFBQTNJLE1BQ0EsY0FBQVks
RUFBQW9DLElBQ0E4RixFQUFBaE0sS0FBQXhELE1BQUF3UCxFQUFBbEksRUFBQXNDLFVBRUE0RixF
QUFBaE0sS0FBQThELElBVUEsTUFIQWdJLEdBQUFsTyxNQUFBcU8sTUFDQUosRUFBQXRHLFFBQUF1
RyxHQUVBRCxFQUdBLFFBQUFJLElBQUFoRCxHQUNBLE1BQUFBLEdBQUFyQyxXQUFBLE1BQUFxQyxF
QUFBNUMsS0FHQSxRQUFBNkYsSUFDQWpGLEVBQ0EvSixHQUVBQSxPQUNBLFFBQUEvQixHQUFBLEVB
QWlCQSxFQUFBOEwsRUFBQTdMLE9BQWdCRCxJQUNqQzBCLE1BQUFhLFFBQUF1SixFQUFBOUwsSUFD
QStRLEdBQUFqRixFQUFBOUwsR0FBQStCLEdBRUFBLEVBQUErSixFQUFBOUwsR0FBQVUsS0FBQW9M
LEVBQUE5TCxHQUFBYSxFQUdBLE9BQUFrQixHQVFBLFFBQUFpUCxJQUFBak4sR0FDQSxHQUFBOEQs
R0FBQTlELEVBQUFzRyxTQUdBM0IsRUFBQWIsRUFBQWEsTUFDQSxJQUFBQSxJQUFBYixFQUFBb0os
U0FBQSxDQUNBLEtBQUF2SSxFQUFBMkIsU0FBQTRHLFVBQUF2SSxFQUFBd0ksU0FDQXhJLElBQUF3
SSxPQUVBeEksR0FBQXlJLFVBQUF0TSxLQUFBZCxHQUdBQSxFQUFBbU4sUUFBQXhJLEVBQ0EzRSxF
QUFBcU4sTUFBQTFJLElBQUEwSSxNQUFBck4sRUFFQUEsRUFBQW9OLGFBQ0FwTixFQUFBc04sU0FF
QXROLEVBQUF1TixTQUFBLEtBQ0F2TixFQUFBd04sVUFBQSxLQUNBeE4sRUFBQXlOLGlCQUFBLEVB
Q0F6TixFQUFBME4sWUFBQSxFQUNBMU4sRUFBQTJOLGNBQUEsRUFDQTNOLEVBQUE0TixtQkFBQSxF
QTZGQSxRQUFBQyxJQUNBN04sRUFDQThOLEVBQ0FDLEdBRUEvTixFQUFBZ08sSUFBQUYsRUFDQTlO
LEVBQUFzRyxTQUFBMkgsU0FDQWpPLEVBQUFzRyxTQUFBMkgsT0FBQXhELElBbUJBeUQsR0FBQWxP
LEVBQUEsY0FFQSxJQUFBbU8sRUFrQ0EsT0FkQUEsR0FBQSxXQUNBbk8sRUFBQW9PLFFBQUFwTyxF
QUFBcU8sVUFBQU4sSUFJQS9OLEVBQUF1TixTQUFBLEdBQUFlLElBQUF0TyxFQUFBbU8sRUFBQWxR
LEdBQ0E4UCxHQUFBLEVBSUEsTUFBQS9OLEVBQUF1TyxTQUNBdk8sRUFBQTBOLFlBQUEsRUFDQVEs
R0FBQWxPLEVBQUEsWUFFQUEsRUFHQSxRQUFBd08sSUFDQXhPLEVBQ0E2RixFQUNBb0csRUFDQXdD
LEVBQ0FDLEdBUUEsR0FBQUMsTUFDQUQsR0FDQTFPLEVBQUFzRyxTQUFBc0ksaUJBQ0FILEVBQUF4
SCxLQUFBNEgsYUFDQTdPLEVBQUE4TyxlQUFBQyxHQWtCQSxJQWZBL08sRUFBQXNHLFNBQUEwSSxh
QUFBUCxFQUNBek8sRUFBQXVPLE9BQUFFLEVBRUF6TyxFQUFBaVAsU0FDQWpQLEVBQUFpUCxPQUFB
dEssT0FBQThKLEdBRUF6TyxFQUFBc0csU0FBQXNJLGdCQUFBRixFQUtBMU8sRUFBQWtQLE9BQUFU
LEVBQUF4SCxNQUFBd0gsRUFBQXhILEtBQUFvQyxNQUNBckosRUFBQW1QLFdBQUFsRCxFQUdBcEcs
R0FBQTdGLEVBQUFzRyxTQUFBdkMsTUFBQSxDQUNBckMsR0FBQUMsZUFBQSxDQUdBLFFBRkFvQyxH
QUFBL0QsRUFBQXVHLE9BQ0E2SSxFQUFBcFAsRUFBQXNHLFNBQUErSSxjQUNBcFQsRUFBQSxFQUFt
QkEsRUFBQW1ULEVBQUFsVCxPQUFxQkQsSUFBQSxDQUN4QyxHQUFBVSxHQUFBeVMsRUFBQW5ULEVB
Q0E4SCxHQUFBcEgsR0FBQWdKLEVBQUFoSixFQUFBcUQsRUFBQXNHLFNBQUF2QyxNQUFBOEIsRUFB
QTdGLEdBRUEwQixHQUFBQyxlQUFBLEVBRUEzQixFQUFBc0csU0FBQVQsWUFJQSxHQUFBb0csRUFB
QSxDQUNBLEdBQUFRLEdBQUF6TSxFQUFBc0csU0FBQTRGLGdCQUNBbE0sR0FBQXNHLFNBQUE0Rixp
QkFBQUQsRUFDQUUsR0FBQW5NLEVBQUFpTSxFQUFBUSxHQUdBa0MsSUFDQTNPLEVBQUFzUCxPQUFB
NUMsR0FBQWdDLEVBQUFELEVBQUFwSCxTQUNBckgsRUFBQW9MLGdCQVFBLFFBQUFtRSxJQUFBdlAs
R0FDQSxLQUFBQSxRQUFBbU4sVUFDQSxHQUFBbk4sRUFBQXdOLFVBQXVCLFFBRXZCLFVBR0EsUUFB
QWdDLElBQUF4UCxFQUFBeVAsR0FDQSxHQUFBQSxHQUVBLEdBREF6UCxFQUFBeU4saUJBQUEsRUFD
QThCLEdBQUF2UCxHQUNBLFdBRUcsSUFBQUEsRUFBQXlOLGdCQUNILE1BRUEsSUFBQXpOLEVBQUF3
TixXQUFBLE9BQUF4TixFQUFBd04sVUFBQSxDQUNBeE4sRUFBQXdOLFdBQUEsQ0FDQSxRQUFBdlIs
R0FBQSxFQUFtQkEsRUFBQStELEVBQUFvTixVQUFBbFIsT0FBeUJELElBQzVDdVQsR0FBQXhQLEVB
QUFvTixVQUFBblIsR0FFQWlTLElBQUFsTyxFQUFBLGNBSUEsUUFBQTBQLElBQUExUCxFQUFBeVAs
R0FDQSxLQUFBQSxJQUNBelAsRUFBQXlOLGlCQUFBLEVBQ0E4QixHQUFBdlAsS0FJQUEsRUFBQXdO
LFdBQUEsQ0FDQXhOLEVBQUF3TixXQUFBLENBQ0EsUUFBQXZSLEdBQUEsRUFBbUJBLEVBQUErRCxF
QUFBb04sVUFBQWxSLE9BQXlCRCxJQUM1Q3lULEdBQUExUCxFQUFBb04sVUFBQW5SLEdBRUFpUyxJ
QUFBbE8sRUFBQSxnQkFJQSxRQUFBa08sSUFBQWxPLEVBQUFnSixHQUNBLEdBQUEyRyxHQUFBM1As
RUFBQXNHLFNBQUEwQyxFQUNBLElBQUEyRyxFQUNBLE9BQUExVCxHQUFBLEVBQUEyVCxFQUFBRCxF
QUFBelQsT0FBd0NELEVBQUEyVCxFQUFPM1QsSUFDL0MsSUFDQTBULEVBQUExVCxHQUFBdEIsS0FB
QXFGLEdBQ08sTUFBQXJCLEdBQ1BtQixFQUFBbkIsRUFBQXFCLEVBQUFnSixFQUFBLFNBSUFoSixF
QUFBZ00sZUFDQWhNLEVBQUE2UCxNQUFBLFFBQUE3RyxHQW9CQSxRQUFBOEcsTUFDQXZULEdBQUF3
VCxHQUFBN1QsT0FBQThULEdBQUE5VCxPQUFBLEVBQ0ErVCxNQUlBQyxHQUFBQyxJQUFBLEVBTUEs
UUFBQUMsTUFDQUQsSUFBQSxDQUNBLElBQUFFLEdBQUFoTCxDQWNBLEtBSkEwSyxHQUFBTyxLQUFB
LFNBQUFuVCxFQUFBZSxHQUE4QixNQUFBZixHQUFBa0ksR0FBQW5ILEVBQUFtSCxLQUk5QjlJLEdB
QUEsRUFBaUJBLEdBQUF3VCxHQUFBN1QsT0FBc0JLLEtBQ3ZDOFQsRUFBQU4sR0FBQXhULElBQ0E4
SSxFQUFBZ0wsRUFBQWhMLEdBQ0E0SyxHQUFBNUssR0FBQSxLQUNBZ0wsRUFBQUUsS0FtQkEsSUFB
QUMsR0FBQVIsR0FBQTlILFFBQ0F1SSxFQUFBVixHQUFBN0gsT0FFQTRILE1BR0FZLEdBQUFGLEdB
Q0FHLEdBQUFGLEdBSUFHLElBQUExUSxHQUFBMFEsVUFDQUEsR0FBQUMsS0FBQSxTQUlBLFFBQUFG
LElBQUFaLEdBRUEsSUFEQSxHQUFBOVQsR0FBQThULEVBQUE3VCxPQUNBRCxLQUFBLENBQ0EsR0FB
QW9VLEdBQUFOLEVBQUE5VCxHQUNBK0QsRUFBQXFRLEVBQUFyUSxFQUNBQSxHQUFBdU4sV0FBQThD
LEdBQUFyUSxFQUFBME4sWUFDQVEsR0FBQWxPLEVBQUEsWUFTQSxRQUFBOFEsSUFBQTlRLEdBR0FB
LEVBQUF3TixXQUFBLEVBQ0F3QyxHQUFBbFAsS0FBQWQsR0FHQSxRQUFBMFEsSUFBQVgsR0FDQSxP
QUFBOVQsR0FBQSxFQUFpQkEsRUFBQThULEVBQUE3VCxPQUFrQkQsSUFDbkM4VCxFQUFBOVQsR0FB
QXVSLFdBQUEsRUFDQWdDLEdBQUFPLEVBQUE5VCxJQUFBLEdBU0EsUUFBQThVLElBQUFWLEdBQ0Es
R0FBQWhMLEdBQUFnTCxFQUFBaEwsRUFDQSxVQUFBNEssR0FBQTVLLEdBQUEsQ0FFQSxHQURBNEss
R0FBQTVLLElBQUEsRUFDQThLLEdBRUssQ0FJTCxJQURBLEdBQUFsVSxHQUFBOFQsR0FBQTdULE9B
QUEsRUFDQUQsRUFBQU0sSUFBQXdULEdBQUE5VCxHQUFBb0osR0FBQWdMLEVBQUFoTCxJQUNBcEos
R0FFQThULElBQUF0VCxPQUFBUixFQUFBLElBQUFvVSxPQVJBTixJQUFBalAsS0FBQXVQLEVBV0FI
LE1BQ0FBLElBQUEsRUFDQWMsR0FBQVosTUE0TkEsUUFBQWEsSUFBQW5XLEdBQ0FvVyxHQUFBQyxR
QUNBQyxHQUFBdFcsRUFBQW9XLElBR0EsUUFBQUUsSUFBQXRXLEVBQUF1VyxHQUNBLEdBQUFwVixH
QUFBNEMsRUFDQXlTLEVBQUEzVCxNQUFBYSxRQUFBMUQsRUFDQSxLQUFBd1csR0FBQS9XLEVBQUFP
LEtBQUFsQixPQUFBaUksYUFBQS9HLEdBQUEsQ0FHQSxHQUFBQSxFQUFBMEcsT0FBQSxDQUNBLEdB
QUErUCxHQUFBelcsRUFBQTBHLE9BQUFXLElBQUFrRCxFQUNBLElBQUFnTSxFQUFBcEIsSUFBQXNC
LEdBQ0EsTUFFQUYsR0FBQS9JLElBQUFpSixHQUVBLEdBQUFELEVBRUEsSUFEQXJWLEVBQUFuQixF
QUFBb0IsT0FDQUQsS0FBaUJtVixHQUFBdFcsRUFBQW1CLEdBQUFvVixPQUlqQixLQUZBeFMsRUFB
QWpGLE9BQUFpRixLQUFBL0QsR0FDQW1CLEVBQUE0QyxFQUFBM0MsT0FDQUQsS0FBaUJtVixHQUFB
dFcsRUFBQStELEVBQUE1QyxJQUFBb1YsSUFhakIsUUFBQUcsSUFBQTVRLEVBQUE2USxFQUFBOVUs
R0FDQStVLEdBQUFuUCxJQUFBLFdBQ0EsTUFBQXJELE1BQUF1UyxHQUFBOVUsSUFFQStVLEdBQUFq
UCxJQUFBLFNBQUEzSCxHQUNBb0UsS0FBQXVTLEdBQUE5VSxHQUFBN0IsR0FFQWxCLE9BQUFDLGVB
QUErRyxFQUFBakUsRUFBQStVLElBR0EsUUFBQUMsSUFBQTNSLEdBQ0FBLEVBQUE0UixZQUNBLElB
QUFDLEdBQUE3UixFQUFBc0csUUFDQXVMLEdBQUE5TixPQUFtQitOLEdBQUE5UixFQUFBNlIsRUFB
QTlOLE9BQ25COE4sRUFBQUUsU0FBcUJDLEdBQUFoUyxFQUFBNlIsRUFBQUUsU0FDckJGLEVBQUE1
SyxLQUNBZ0wsR0FBQWpTLEdBRUFxQixFQUFBckIsRUFBQWtTLFVBQXlCLEdBRXpCTCxFQUFBTSxV
QUFzQkMsR0FBQXBTLEVBQUE2UixFQUFBTSxVQUN0Qk4sRUFBQVEsT0FBQVIsRUFBQVEsUUFBQUMs
SUFDQUMsR0FBQXZTLEVBQUE2UixFQUFBUSxPQWNBLFFBQUFQLElBQUE5UixFQUFBd1MsR0FDQSxH
QUFBM00sR0FBQTdGLEVBQUFzRyxTQUFBVCxjQUNBOUIsRUFBQS9ELEVBQUF1RyxVQUdBMUgsRUFB
QW1CLEVBQUFzRyxTQUFBK0ksYUFDQW9ELEdBQUF6UyxFQUFBbU4sT0FFQXpMLElBQUFDLGNBQUE4
USxDQWtDQSxRQUFBOVYsS0FBQTZWLElBakNBLFNBQUE3VixHQUNBa0MsRUFBQWlDLEtBQUFuRSxF
QUNBLElBQUE3QyxHQUFBNkwsRUFBQWhKLEVBQUE2VixFQUFBM00sRUFBQTdGLEVBcUJBZ0MsR0FB
QStCLEVBQUFwSCxFQUFBN0MsR0FLQTZDLElBQUFxRCxJQUNBd1IsR0FBQXhSLEVBQUEsU0FBQXJE
LElBSUFBLEVBQ0ErRSxJQUFBQyxlQUFBLEVBR0EsUUFBQXNRLElBQUFqUyxHQUNBLEdBQUFpSCxH
QUFBakgsRUFBQXNHLFNBQUFXLElBQ0FBLEdBQUFqSCxFQUFBa1MsTUFBQSxrQkFBQWpMLEdBQ0F5
TCxHQUFBekwsRUFBQWpILEdBQ0FpSCxNQUNBeE0sRUFBQXdNLEtBQ0FBLEtBWUEsS0FKQSxHQUFB
cEksR0FBQWpGLE9BQUFpRixLQUFBb0ksR0FDQWxELEVBQUEvRCxFQUFBc0csU0FBQXZDLE1BRUE5
SCxHQURBK0QsRUFBQXNHLFNBQUF5TCxRQUNBbFQsRUFBQTNDLFFBQ0FELEtBQUEsQ0FDQSxHQUFB
VSxHQUFBa0MsRUFBQTVDLEVBU0E4SCxJQUFBckgsRUFBQXFILEVBQUFwSCxJQU1Ld0MsRUFBQXhD
LElBQ0w2VSxHQUFBeFIsRUFBQSxRQUFBckQsR0FJQTBFLEVBQUE0RixHQUFBLEdBR0EsUUFBQXlM
LElBQUF6TCxFQUFBakgsR0FDQSxJQUNBLE1BQUFpSCxHQUFBdE0sS0FBQXFGLEdBQ0csTUFBQXJC
LEdBRUgsTUFEQW1CLEdBQUFuQixFQUFBcUIsRUFBQSxjQU9BLFFBQUFvUyxJQUFBcFMsRUFBQW1T
LEdBRUEsR0FBQVEsR0FBQTNTLEVBQUE0UyxrQkFBQWhaLE9BQUFrQyxPQUFBLEtBRUEsUUFBQWEs
S0FBQXdWLEdBQUEsQ0FDQSxHQUFBVSxHQUFBVixFQUFBeFYsR0FDQTJGLEVBQUEsa0JBQUF1USxP
QUFBdFEsR0FRQW9RLEdBQUFoVyxHQUFBLEdBQUEyUixJQUFBdE8sRUFBQXNDLEdBQUFyRSxJQUFB
NlUsSUFLQW5XLElBQUFxRCxJQUNBK1MsR0FBQS9TLEVBQUFyRCxFQUFBa1csSUFXQSxRQUFBRSxJ
QUFBblMsRUFBQWpFLEVBQUFrVyxHQUNBLGtCQUFBQSxJQUNBbkIsR0FBQW5QLElBQUF5USxHQUFB
clcsR0FDQStVLEdBQUFqUCxJQUFBeEUsSUFFQXlULEdBQUFuUCxJQUFBc1EsRUFBQXRRLEtBQ0Es
SUFBQXNRLEVBQUE5VixNQUNBaVcsR0FBQXJXLEdBQ0FrVyxFQUFBdFEsSUFDQXRFLEVBQ0F5VCxH
QUFBalAsSUFBQW9RLEVBQUFwUSxJQUNBb1EsRUFBQXBRLElBQ0F4RSxHQVdBckUsT0FBQUMsZUFB
QStHLEVBQUFqRSxFQUFBK1UsSUFHQSxRQUFBc0IsSUFBQXJXLEdBQ0Esa0JBQ0EsR0FBQTBULEdB
QUFuUixLQUFBMFQsbUJBQUExVCxLQUFBMFQsa0JBQUFqVyxFQUNBLElBQUEwVCxFQU9BLE1BTkFB
LEdBQUE0QyxPQUNBNUMsRUFBQTZDLFdBRUF2UyxHQUFBQyxRQUNBeVAsRUFBQTFOLFNBRUEwTixF
QUFBdlcsT0FLQSxRQUFBa1ksSUFBQWhTLEVBQUErUixHQUVBL1IsRUFBQXNHLFNBQUF2QyxLQUNB
LFFBQUFwSCxLQUFBb1YsR0FDQS9SLEVBQUFyRCxHQUFBLE1BQUFvVixFQUFBcFYsR0FBQXNCLEVB
QUFqQixFQUFBK1UsRUFBQXBWLEdBQUFxRCxHQW1CQSxRQUFBdVMsSUFBQXZTLEVBQUFxUyxHQUVB
LE9BQUExVixLQUFBMFYsR0FBQSxDQUNBLEdBQUFjLEdBQUFkLEVBQUExVixFQUNBLElBQUFnQixN
QUFBYSxRQUFBMlUsR0FDQSxPQUFBbFgsR0FBQSxFQUFxQkEsRUFBQWtYLEVBQUFqWCxPQUFvQkQs
SUFDekNtWCxHQUFBcFQsRUFBQXJELEVBQUF3VyxFQUFBbFgsUUFHQW1YLElBQUFwVCxFQUFBckQs
RUFBQXdXLElBS0EsUUFBQUMsSUFDQXBULEVBQ0FxVCxFQUNBRixFQUNBclAsR0FTQSxNQVBBckos
R0FBQTBZLEtBQ0FyUCxFQUFBcVAsRUFDQUEsYUFFQSxnQkFBQUEsS0FDQUEsRUFBQW5ULEVBQUFt
VCxJQUVBblQsRUFBQXNULE9BQUFELEVBQUFGLEVBQUFyUCxHQW9EQSxRQUFBeVAsSUFBQXZULEdB
Q0EsR0FBQXdULEdBQUF4VCxFQUFBc0csU0FBQWtOLE9BQ0FBLEtBQ0F4VCxFQUFBeVQsVUFBQSxr
QkFBQUQsR0FDQUEsRUFBQTdZLEtBQUFxRixHQUNBd1QsR0FJQSxRQUFBRSxJQUFBMVQsR0FDQSxH
QUFBMlQsR0FBQUMsR0FBQTVULEVBQUFzRyxTQUFBbEMsT0FBQXBFLEVBQ0EyVCxLQUNBalMsR0FB
QUMsZUFBQSxFQUNBL0gsT0FBQWlGLEtBQUE4VSxHQUFBRSxRQUFBLFNBQUFsWCxHQVlBcUYsRUFB
QWhDLEVBQUFyRCxFQUFBZ1gsRUFBQWhYLE1BR0ErRSxHQUFBQyxlQUFBLEdBSUEsUUFBQWlTLElB
QUF4UCxFQUFBcEUsR0FDQSxHQUFBb0UsRUFBQSxDQU9BLE9BTEF1UCxHQUFBL1osT0FBQWtDLE9B
QUEsTUFDQStDLEVBQUFpVixHQUNBQyxRQUFBQyxRQUFBNVAsR0FDQXhLLE9BQUFpRixLQUFBdUYs
R0FFQW5JLEVBQUEsRUFBbUJBLEVBQUE0QyxFQUFBM0MsT0FBaUJELElBSXBDLElBSEEsR0FBQVUs
R0FBQWtDLEVBQUE1QyxHQUNBZ1ksRUFBQTdQLEVBQUF6SCxHQUNBdVgsRUFBQWxVLEVBQ0FrVSxH
QUFBLENBQ0EsR0FBQUEsRUFBQVQsV0FBQVEsSUFBQUMsR0FBQVQsVUFBQSxDQUNBRSxFQUFBaFgs
R0FBQXVYLEVBQUFULFVBQUFRLEVBQ0EsT0FFQUMsSUFBQS9HLFFBTUEsTUFBQXdHLElBTUEsUUFB
QVEsSUFDQTNULEVBQ0FxRixFQUNBb0IsRUFDQUksRUFDQUgsR0FFQSxHQUFBbkQsTUFDQTZCLEVB
QUFwRixFQUFBc0QsUUFBQUMsS0FDQSxJQUFBNUosRUFBQXlMLEdBQ0EsT0FBQWpKLEtBQUFpSixH
QUNBN0IsRUFBQXBILEdBQUFnSixFQUFBaEosRUFBQWlKLEVBQUFDLFdBR0ExTCxHQUFBOE0sRUFB
QW9DLFFBQTRCK0ssR0FBQXJRLEVBQUFrRCxFQUFBb0MsT0FDNUJsUCxFQUFBOE0sRUFBQWxELFFB
QTRCcVEsR0FBQXJRLEVBQUFrRCxFQUFBbEQsTUFJNUIsSUFBQXNRLEdBQUF6YSxPQUFBa0MsT0FB
QXVMLEdBQ0FpTixFQUFBLFNBQUFuWCxFQUFBZSxFQUFBQyxFQUFBb1csR0FBaUMsTUFBQUMsSUFB
QUgsRUFBQWxYLEVBQUFlLEVBQUFDLEVBQUFvVyxHQUFBLElBQ2pDek4sRUFBQXRHLEVBQUFzRCxR
QUFBbUssT0FBQXRULEtBQUEsS0FBQTJaLEdBQ0FyTixPQUNBbEQsUUFDQW1ELFdBQ0F2QyxPQUFB
MEMsRUFDQTRFLFVBQUFoRixFQUFBbUIsT0FDQXFNLFdBQUFiLEdBQUFwVCxFQUFBc0QsUUFBQU0s
T0FBQWlELEdBQ0FzRixNQUFBLFdBQXdCLE1BQUFELElBQUF4RixFQUFBRyxLQVN4QixPQVBBUCxh
QUFBRixNQUNBRSxFQUFBK0Ysa0JBQUF4RixFQUNBUCxFQUFBNE4sa0JBQUFsVSxFQUFBc0QsUUFD
QW1ELEVBQUE2RixRQUNBaEcsRUFBQUcsT0FBQUgsRUFBQUcsVUFBcUM2RixLQUFBN0YsRUFBQTZG
LE9BR3JDaEcsRUFHQSxRQUFBc04sSUFBQXZXLEVBQUFxRixHQUNBLE9BQUF2RyxLQUFBdUcsR0FD
QXJGLEVBQUFvRyxHQUFBdEgsSUFBQXVHLEVBQUF2RyxHQTRFQSxRQUFBZ1ksSUFDQW5VLEVBQ0F5
RyxFQUNBSSxFQUNBSCxFQUNBRixHQUVBLElBQUFoTixFQUFBd0csR0FBQSxDQUlBLEdBQUFvSyxH
QUFBdkQsRUFBQWYsU0FBQXNPLEtBU0EsSUFOQXJhLEVBQUFpRyxLQUNBQSxFQUFBb0ssRUFBQWhO
LE9BQUE0QyxJQUtBLGtCQUFBQSxHQUFBLENBUUEsR0FBQStHLEVBQ0EsSUFBQXZOLEVBQUF3RyxF
QUFBcVUsT0FDQXROLEVBQUEvRyxNQUVBdEcsTUFEQXNHLEVBQUFtSyxHQUFBcEQsRUFBQXFELEVB
QUF2RCxLQUtBLE1BQUFrRCxJQUNBaEQsRUFDQU4sRUFDQUksRUFDQUgsRUFDQUYsRUFLQUMsU0FJ
QTZOLEdBQUF0VSxHQUdBckcsRUFBQThNLEVBQUE4TixRQUNBQyxHQUFBeFUsRUFBQXNELFFBQUFt
RCxFQUlBLElBQUFwQixHQUFBdUQsR0FBQW5DLEVBQUF6RyxFQUFBd0csRUFHQSxJQUFBNU0sRUFB
QW9HLEVBQUFzRCxRQUFBbVIsWUFDQSxNQUFBZCxJQUFBM1QsRUFBQXFGLEVBQUFvQixFQUFBSSxF
QUFBSCxFQUtBLElBQUErRSxHQUFBaEYsRUFBQW1CLEVBS0EsSUFGQW5CLEVBQUFtQixHQUFBbkIs
RUFBQWlPLFNBRUE5YSxFQUFBb0csRUFBQXNELFFBQUFvSixVQUFBLENBS0EsR0FBQUosR0FBQTdG
LEVBQUE2RixJQUNBN0YsTUFDQTZGLElBQ0E3RixFQUFBNkYsUUFLQXFJLEdBQUFsTyxFQUdBLElB
QUFqRCxHQUFBeEQsRUFBQXNELFFBQUFFLE1BQUFnRCxDQU9BLE9BTkEsSUFBQUosSUFDQSxpQkFB
QXBHLEVBQUEsS0FBQXdELEVBQUEsSUFBQUEsRUFBQSxJQUNBaUQsTUFBQS9NLGlCQUFBbU4sR0FD
SzdHLE9BQUFxRixZQUFBb0csWUFBQWpGLE1BQUFFLFlBQ0xLLEtBS0EsUUFBQTZOLElBQ0F0TyxF
QUNBbkMsRUFDQTBRLEVBQ0FDLEdBRUEsR0FBQUMsR0FBQXpPLEVBQUFRLGlCQUNBeEQsR0FDQTBS
LGNBQUEsRUFDQTdRLFNBQ0FrQixVQUFBMFAsRUFBQTFQLFVBQ0E0UCxjQUFBRixFQUFBdk8sSUFD
QWdJLGFBQUFsSSxFQUNBb0YsaUJBQUFxSixFQUFBdEosVUFDQTJDLGdCQUFBMkcsRUFBQXJPLFNB
Q0F3TyxXQUFBTCxHQUFBLEtBQ0FNLFFBQUFMLEdBQUEsTUFHQU0sRUFBQTlPLEVBQUFHLEtBQUEy
TyxjQUtBLE9BSkF6YixHQUFBeWIsS0FDQTlSLEVBQUFtSyxPQUFBMkgsRUFBQTNILE9BQ0FuSyxF
QUFBK1IsZ0JBQUFELEVBQUFDLGlCQUVBLEdBQUFOLEdBQUEvVSxLQUFBc0QsR0FHQSxRQUFBcVIs
SUFBQWxPLEdBQ0FBLEVBQUErQixPQUNBL0IsRUFBQStCLFFBRUEsUUFBQS9NLEdBQUEsRUFBaUJB
LEVBQUE2WixHQUFBNVosT0FBeUJELElBQUEsQ0FDMUMsR0FBQVUsR0FBQW1aLEdBQUE3WixHQUNB
OFosRUFBQTlPLEVBQUErQixLQUFBck0sR0FDQXFaLEVBQUFDLEdBQUF0WixFQUNBc0ssR0FBQStC
LEtBQUFyTSxHQUFBb1osRUFBQUcsR0FBQUYsRUFBQUQsR0FBQUMsR0FJQSxRQUFBRSxJQUFBQyxF
QUFBQyxHQUNBLGdCQUFBalosRUFBQWUsRUFBQUMsRUFBQW9XLEdBQ0E0QixFQUFBaFosRUFBQWUs
RUFBQUMsRUFBQW9XLEdBQ0E2QixFQUFBalosRUFBQWUsRUFBQUMsRUFBQW9XLElBTUEsUUFBQVMs
SUFBQWxSLEVBQUFtRCxHQUNBLEdBQUFuQixHQUFBaEMsRUFBQWlSLE9BQUFqUixFQUFBaVIsTUFB
QWpQLE1BQUEsUUFDQTRDLEVBQUE1RSxFQUFBaVIsT0FBQWpSLEVBQUFpUixNQUFBck0sT0FBQSxT
QUFnRXpCLEVBQUFsRCxRQUFBa0QsRUFBQWxELFdBQStCK0IsR0FBQW1CLEVBQUE4TixNQUFBamIs
S0FDL0YsSUFBQXNPLEdBQUFuQixFQUFBbUIsS0FBQW5CLEVBQUFtQixNQUNBak8sR0FBQWlPLEVB
QUFNLElBQ0FOLEVBQUFNLElBQUF6QixFQUFBOE4sTUFBQXNCLFVBQUExUyxPQUFBeUUsRUFBQU0s
SUFFQU4sRUFBQU0sR0FBQXpCLEVBQUE4TixNQUFBc0IsU0FXQSxRQUFBN0IsSUFDQW5OLEVBQ0FM
LEVBQ0FDLEVBQ0FDLEVBQ0FvUCxFQUNBQyxHQVVBLE9BUkE1WSxNQUFBYSxRQUFBeUksSUFBQTNN
LEVBQUEyTSxNQUNBcVAsRUFBQXBQLEVBQ0FBLEVBQUFELEVBQ0FBLE1BQUEvTSxJQUVBRSxFQUFB
bWMsS0FDQUQsRUFBQUUsSUFFQUMsR0FBQXBQLEVBQUFMLEVBQUFDLEVBQUFDLEVBQUFvUCxHQUdB
LFFBQUFHLElBQ0FwUCxFQUNBTCxFQUNBQyxFQUNBQyxFQUNBb1AsR0FFQSxHQUFBbmMsRUFBQThN
LElBQUE5TSxFQUFBLEVBQUFxSCxRQU1BLE1BQUFpSixLQU1BLElBSEF0USxFQUFBOE0sSUFBQTlN
LEVBQUE4TSxFQUFBeVAsTUFDQTFQLEVBQUFDLEVBQUF5UCxLQUVBMVAsRUFFQSxNQUFBeUQsS0Fh
QTlNLE9BQUFhLFFBQUEwSSxJQUNBLGtCQUFBQSxHQUFBLEtBRUFELFFBQ0FBLEVBQUE0SCxhQUF3
QnhJLFFBQUFhLEVBQUEsSUFDeEJBLEVBQUFoTCxPQUFBLEdBRUFvYSxJQUFBRSxHQUNBdFAsRUFB
QTBDLEdBQUExQyxHQUNHb1AsSUFBQUssS0FDSHpQLEVBQUF3QyxHQUFBeEMsR0FFQSxJQUFBSixH
QUFBVSxDQUNBLG9CQUFBUixHQUFBLENBQ0EsR0FBQXhHLEVBQ0FnSCxHQUFBdEgsR0FBQTBXLGdC
QUFBNVAsR0FHQUYsRUFGQTVHLEdBQUEyVyxjQUFBN1AsR0FFQSxHQUFBSixJQUNBMUcsR0FBQTRX
LHFCQUFBOVAsR0FBQUMsRUFBQUMsTUFDQWhOLFVBQUFtTixHQUVLbE4sRUFBQXFHLEVBQUE0RSxF
QUFBaUMsRUFBQWYsU0FBQSxhQUFBVSxJQUVMMk4sR0FBQW5VLEVBQUF5RyxFQUFBSSxFQUFBSCxF
QUFBRixHQUtBLEdBQUFKLElBQ0FJLEVBQUFDLEVBQUFDLE1BQ0FoTixVQUFBbU4sT0FLQVAsR0FB
QTZOLEdBQUEzTixFQUFBQyxFQUFBSSxFQUFBSCxFQUVBLE9BQUEvTSxHQUFBMk0sSUFDQVUsR0FB
YXVQLEdBQUFqUSxFQUFBVSxHQUNiVixHQUVBMkQsS0FJQSxRQUFBc00sSUFBQWpRLEVBQUFVLEdB
RUEsR0FEQVYsRUFBQVUsS0FDQSxrQkFBQVYsRUFBQUUsS0FJQTdNLEVBQUEyTSxFQUFBSSxVQUNB
LE9BQUFqTCxHQUFBLEVBQUFtQixFQUFBMEosRUFBQUksU0FBQWhMLE9BQThDRCxFQUFBbUIsRUFB
T25CLElBQUEsQ0FDckQsR0FBQTJJLEdBQUFrQyxFQUFBSSxTQUFBakwsRUFDQTlCLEdBQUF5SyxF
QUFBb0MsTUFBQWhOLEVBQUE0SyxFQUFBNEMsS0FDQXVQLEdBQUFuUyxFQUFBNEMsSUFXQSxRQUFB
d1AsSUFDQWxjLEVBQ0FtVCxHQUVBLEdBQUF2USxHQUFBekIsRUFBQW1CLEVBQUF5QixFQUFBbEMs
Q0FDQSxJQUFBZ0IsTUFBQWEsUUFBQTFELElBQUEsZ0JBQUFBLEdBRUEsSUFEQTRDLEVBQUEsR0FB
QUMsT0FBQTdDLEVBQUFvQixRQUNBRCxFQUFBLEVBQUFtQixFQUFBdEMsRUFBQW9CLE9BQStCRCxF
QUFBbUIsRUFBT25CLElBQ3RDeUIsRUFBQXpCLEdBQUFnUyxFQUFBblQsRUFBQW1CLFVBRUcsb0JB
QUFuQixHQUVILElBREE0QyxFQUFBLEdBQUFDLE9BQUE3QyxHQUNBbUIsRUFBQSxFQUFlQSxFQUFB
bkIsRUFBU21CLElBQ3hCeUIsRUFBQXpCLEdBQUFnUyxFQUFBaFMsRUFBQSxFQUFBQSxPQUVHLElB
QUExQixFQUFBTyxHQUdILElBRkErRCxFQUFBakYsT0FBQWlGLEtBQUEvRCxHQUNBNEMsRUFBQSxH
QUFBQyxPQUFBa0IsRUFBQTNDLFFBQ0FELEVBQUEsRUFBQW1CLEVBQUF5QixFQUFBM0MsT0FBZ0NE
LEVBQUFtQixFQUFPbkIsSUFDdkNVLEVBQUFrQyxFQUFBNUMsR0FDQXlCLEVBQUF6QixHQUFBZ1Ms
RUFBQW5ULEVBQUE2QixLQUFBVixFQU1BLE9BSEE5QixHQUFBdUQsS0FDQSxFQUFBd00sVUFBQSxH
QUVBeE0sRUFRQSxRQUFBdVosSUFDQWpULEVBQ0FrVCxFQUNBblQsRUFDQW9ULEdBRUEsR0FBQUMs
R0FBQWxZLEtBQUE0UCxhQUFBOUssRUFDQSxJQUFBb1QsRUFLQSxNQUpBclQsU0FDQW9ULElBQ0Fw
VCxFQUFBbkcsT0FBOEJ1WixHQUFBcFQsSUFFOUJxVCxFQUFBclQsSUFBQW1ULENBRUEsSUFBQUcs
R0FBQW5ZLEtBQUFvUSxPQUFBdEwsRUFVQSxPQUFBcVQsSUFBQUgsRUFTQSxRQUFBSSxJQUFBalMs
R0FDQSxNQUFBRCxHQUFBbEcsS0FBQW9ILFNBQUEsVUFBQWpCLEdBQUEsSUFBQWtTLEdBUUEsUUFB
QUMsSUFDQUMsRUFDQTlhLEVBQ0ErYSxHQUVBLEdBQUFDLEdBQUF6WCxHQUFBeVgsU0FBQWhiLElB
QUErYSxDQUNBLE9BQUEvWixPQUFBYSxRQUFBbVosSUFDQSxJQUFBQSxFQUFBbmIsUUFBQWliLEdB
RUFFLElBQUFGLEVBU0EsUUFBQUcsSUFDQTNRLEVBQ0FELEVBQ0FsTixFQUNBK2QsRUFDQUMsR0FF
QSxHQUFBaGUsRUFDQSxHQUFBUyxFQUFBVCxHQUtLLENBQ0w2RCxNQUFBYSxRQUFBMUUsS0FDQUEs
RUFBQWlFLEVBQUFqRSxHQUVBLElBQUEwUCxFQTBCQSxRQUFBN00sS0FBQTdDLElBekJBLFNBQUE2
QyxHQUNBLEdBQ0EsVUFBQUEsR0FDQSxVQUFBQSxHQUNBb2IsR0FBQXBiLEdBRUE2TSxFQUFBdkMs
TUFDUyxDQUNULEdBQUEvQyxHQUFBK0MsRUFBQW9DLE9BQUFwQyxFQUFBb0MsTUFBQW5GLElBQ0Fz
RixHQUFBcU8sR0FBQTNYLEdBQUE4WCxZQUFBaFIsRUFBQTlDLEVBQUF2SCxHQUNBc0ssRUFBQWdS
LFdBQUFoUixFQUFBZ1IsYUFDQWhSLEVBQUFvQyxRQUFBcEMsRUFBQW9DLFVBRUEsS0FBQTFNLElB
QUE2TSxNQUNBQSxFQUFBN00sR0FBQTdDLEVBQUE2QyxHQUVBbWIsR0FBQSxFQUNBN1EsRUFBQW1C
LEtBQUFuQixFQUFBbUIsUUFDQSxVQUFBekwsR0FBQSxTQUFBdWIsR0FDQXBlLEVBQUE2QyxHQUFB
dWIsS0FNQXZiLFFBR0EsTUFBQXNLLEdBUUEsUUFBQWtSLElBQ0E1YixFQUNBNmIsR0FFQSxHQUFB
QyxHQUFBblosS0FBQW9aLGFBQUEvYixFQUdBLE9BQUE4YixLQUFBRCxFQUNBemEsTUFBQWEsUUFB
QTZaLEdBQ0F6USxHQUFBeVEsR0FDQXhSLEVBQUF3UixJQUdBQSxFQUFBblosS0FBQW9aLGFBQUEv
YixHQUNBMkMsS0FBQW9ILFNBQUF1UCxnQkFBQXRaLEdBQUE1QixLQUFBdUUsS0FBQXFaLGNBQ0FD
LEdBQUFILEVBQUEsYUFBQTliLEdBQUEsR0FDQThiLEdBT0EsUUFBQUksSUFDQUosRUFDQTliLEVB
Q0FJLEdBR0EsTUFEQTZiLElBQUFILEVBQUEsV0FBQTliLEdBQUFJLEVBQUEsSUFBQUEsRUFBQSxR
QUNBMGIsRUFHQSxRQUFBRyxJQUNBSCxFQUNBMWIsRUFDQStiLEdBRUEsR0FBQS9hLE1BQUFhLFFB
QUE2WixHQUNBLE9BQUFwYyxHQUFBLEVBQW1CQSxFQUFBb2MsRUFBQW5jLE9BQWlCRCxJQUNwQ29j
LEVBQUFwYyxJQUFBLGdCQUFBb2MsR0FBQXBjLElBQ0EwYyxHQUFBTixFQUFBcGMsR0FBQVUsRUFB
QSxJQUFBVixFQUFBeWMsT0FJQUMsSUFBQU4sRUFBQTFiLEVBQUErYixHQUlBLFFBQUFDLElBQUE1
TyxFQUFBcE4sRUFBQStiLEdBQ0EzTyxFQUFBdEMsVUFBQSxFQUNBc0MsRUFBQXBOLE1BQ0FvTixF
QUFBMk8sU0FLQSxRQUFBRSxJQUFBM1IsRUFBQW5OLEdBQ0EsR0FBQUEsRUFDQSxHQUFBVyxFQUFB
WCxHQUtLLENBQ0wsR0FBQXNPLEdBQUFuQixFQUFBbUIsR0FBQW5CLEVBQUFtQixHQUFBeEssS0FB
NENxSixFQUFBbUIsTUFDNUMsUUFBQXpMLEtBQUE3QyxHQUFBLENBQ0EsR0FBQStlLEdBQUF6USxF
QUFBekwsR0FDQXFaLEVBQUFsYyxFQUFBNkMsRUFDQXlMLEdBQUF6TCxHQUFBa2MsS0FBQWxWLE9B
QUFxUyxFQUFBNkMsR0FBQTdDLFFBSUEsTUFBQS9PLEdBS0EsUUFBQTZSLElBQUE5WSxHQUNBQSxF
QUFBaVAsT0FBQSxLQUNBalAsRUFBQXNZLGFBQUEsSUFDQSxJQUFBN0osR0FBQXpPLEVBQUF1TyxP
QUFBdk8sRUFBQXNHLFNBQUEwSSxhQUNBK0osRUFBQXRLLEtBQUFwSCxPQUNBckgsR0FBQXNQLE9B
QUE1QyxHQUFBMU0sRUFBQXNHLFNBQUFzSSxnQkFBQW1LLEdBQ0EvWSxFQUFBOE8sYUFBQUMsR0FL
QS9PLEVBQUFnWixHQUFBLFNBQUE3YixFQUFBZSxFQUFBQyxFQUFBb1csR0FBaUMsTUFBQUMsSUFB
QXhVLEVBQUE3QyxFQUFBZSxFQUFBQyxFQUFBb1csR0FBQSxJQUdqQ3ZVLEVBQUFpWixlQUFBLFNB
QUE5YixFQUFBZSxFQUFBQyxFQUFBb1csR0FBNkMsTUFBQUMsSUFBQXhVLEVBQUE3QyxFQUFBZSxF
QUFBQyxFQUFBb1csR0FBQSxHQUk3QyxJQUFBMkUsR0FBQXpLLEtBQUF4SCxJQVVBakYsR0FBQWhD
LEVBQUEsU0FBQWtaLEtBQUE3UCxNQUFBLFNBQ0FySCxFQUFBaEMsRUFBQSxhQUFBQSxFQUFBc0cs
U0FBQTRGLGlCQUFBLFNBbUpBLFFBQUFpTixJQUFBblosRUFBQThELEdBQ0EsR0FBQStOLEdBQUE3
UixFQUFBc0csU0FBQTFNLE9BQUFrQyxPQUFBa0UsRUFBQW9aLFlBQUF0VixRQUVBK04sR0FBQWxO
LE9BQUFiLEVBQUFhLE9BQ0FrTixFQUFBaE0sVUFBQS9CLEVBQUErQixVQUNBZ00sRUFBQTdDLGFB
QUFsTCxFQUFBa0wsYUFDQTZDLEVBQUEzRixpQkFBQXBJLEVBQUFvSSxpQkFDQTJGLEVBQUFqRCxn
QkFBQTlLLEVBQUE4SyxnQkFDQWlELEVBQUE0RCxjQUFBM1IsRUFBQTJSLGNBQ0E1RCxFQUFBNkQs
V0FBQTVSLEVBQUE0UixXQUNBN0QsRUFBQThELFFBQUE3UixFQUFBNlIsUUFDQTdSLEVBQUFtSyxT
QUNBNEQsRUFBQTVELE9BQUFuSyxFQUFBbUssT0FDQTRELEVBQUFnRSxnQkFBQS9SLEVBQUErUixp
QkFJQSxRQUFBZixJQUFBdFUsR0FDQSxHQUFBc0QsR0FBQXRELEVBQUFzRCxPQUNBLElBQUF0RCxF
QUFBNlksTUFBQSxDQUNBLEdBQUFDLEdBQUF4RSxHQUFBdFUsRUFBQTZZLE1BRUEsSUFBQUMsSUFE
QTlZLEVBQUE4WSxhQUNBLENBR0E5WSxFQUFBOFksY0FFQSxJQUFBQyxHQUFBQyxHQUFBaFosRUFF
QStZLElBQ0EzYixFQUFBNEMsRUFBQWlaLGNBQUFGLEdBRUF6VixFQUFBdEQsRUFBQXNELFFBQUFZ
LEVBQUE0VSxFQUFBOVksRUFBQWlaLGVBQ0EzVixFQUFBRSxPQUNBRixFQUFBNFYsV0FBQTVWLEVB
QUFFLE1BQUF4RCxJQUlBLE1BQUFzRCxHQUdBLFFBQUEwVixJQUFBaFosR0FDQSxHQUFBbVosR0FD
QUMsRUFBQXBaLEVBQUFzRCxRQUNBK1YsRUFBQXJaLEVBQUFpWixjQUNBSyxFQUFBdFosRUFBQXVa
LGFBQ0EsUUFBQXBkLEtBQUFpZCxHQUNBQSxFQUFBamQsS0FBQW1kLEVBQUFuZCxLQUNBZ2QsSUFB
c0JBLE1BQ3RCQSxFQUFBaGQsR0FBQXFkLEdBQUFKLEVBQUFqZCxHQUFBa2QsRUFBQWxkLEdBQUFt
ZCxFQUFBbmQsSUFHQSxPQUFBZ2QsR0FHQSxRQUFBSyxJQUFBSixFQUFBQyxFQUFBQyxHQUdBLEdB
QUFuYyxNQUFBYSxRQUFBb2IsR0FBQSxDQUNBLEdBQUE1YixLQUNBOGIsR0FBQW5jLE1BQUFhLFFB
QUFzYixTQUNBRCxFQUFBbGMsTUFBQWEsUUFBQXFiLFFBQ0EsUUFBQTVkLEdBQUEsRUFBbUJBLEVB
QUEyZCxFQUFBMWQsT0FBbUJELEtBRXRDNGQsRUFBQXJkLFFBQUFvZCxFQUFBM2QsS0FBQSxHQUFB
NmQsRUFBQXRkLFFBQUFvZCxFQUFBM2QsSUFBQSxJQUNBK0IsRUFBQThDLEtBQUE4WSxFQUFBM2Qs
R0FHQSxPQUFBK0IsR0FFQSxNQUFBNGIsR0FJQSxRQUFBSyxJQUFBblcsR0FNQTVFLEtBQUFnYixN
QUFBcFcsR0FXQSxRQUFBcVcsSUFBQUMsR0FDQUEsRUFBQUMsSUFBQSxTQUFBQyxHQUNBLEdBQUFD
LEdBQUFyYixLQUFBc2Isb0JBQUF0YixLQUFBc2IscUJBQ0EsSUFBQUQsRUFBQS9kLFFBQUE4ZCxJ
QUFBLEVBQ0EsTUFBQXBiLEtBSUEsSUFBQXViLEdBQUFqZCxFQUFBSCxVQUFBLEVBUUEsT0FQQW9k
LEdBQUFDLFFBQUF4YixNQUNBLGtCQUFBb2IsR0FBQUssUUFDQUwsRUFBQUssUUFBQXJkLE1BQUFn
ZCxFQUFBRyxHQUNLLGtCQUFBSCxJQUNMQSxFQUFBaGQsTUFBQSxLQUFBbWQsR0FFQUYsRUFBQXpa
LEtBQUF3WixHQUNBcGIsTUFNQSxRQUFBMGIsSUFBQVIsR0FDQUEsRUFBQVMsTUFBQSxTQUFBQSxH
QUVBLE1BREEzYixNQUFBNEUsUUFBQVksRUFBQXhGLEtBQUE0RSxRQUFBK1csR0FDQTNiLE1BTUEs
UUFBQTRiLElBQUFWLEdBTUFBLEVBQUF2RixJQUFBLENBQ0EsSUFBQUEsR0FBQSxDQUtBdUYsR0FB
QXhjLE9BQUEsU0FBQTZiLEdBQ0FBLE9BQ0EsSUFBQXNCLEdBQUE3YixLQUNBOGIsRUFBQUQsRUFB
QWxHLElBQ0FvRyxFQUFBeEIsRUFBQXlCLFFBQUF6QixFQUFBeUIsU0FDQSxJQUFBRCxFQUFBRCxH
QUNBLE1BQUFDLEdBQUFELEVBR0EsSUFBQWhYLEdBQUF5VixFQUFBelYsTUFBQStXLEVBQUFqWCxR
QUFBRSxLQVdBbVgsRUFBQSxTQUFBclgsR0FDQTVFLEtBQUFnYixNQUFBcFcsR0E2Q0EsT0EzQ0Fx
WCxHQUFBeFIsVUFBQS9QLE9BQUFrQyxPQUFBaWYsRUFBQXBSLFdBQ0F3UixFQUFBeFIsVUFBQXlQ
LFlBQUErQixFQUNBQSxFQUFBdEcsUUFDQXNHLEVBQUFyWCxRQUFBWSxFQUNBcVcsRUFBQWpYLFFB
Q0EyVixHQUVBMEIsRUFBQSxNQUFBSixFQUtBSSxFQUFBclgsUUFBQUMsT0FDQXFYLEdBQUFELEdB
RUFBLEVBQUFyWCxRQUFBcU8sVUFDQWtKLEdBQUFGLEdBSUFBLEVBQUF2ZCxPQUFBbWQsRUFBQW5k
LE9BQ0F1ZCxFQUFBTixNQUFBRSxFQUFBRixNQUNBTSxFQUFBZCxJQUFBVSxFQUFBVixJQUlBaUIs
R0FBQXpILFFBQUEsU0FBQTNQLEdBQ0FpWCxFQUFBalgsR0FBQTZXLEVBQUE3VyxLQUdBRixJQUNB
bVgsRUFBQXJYLFFBQUE0VixXQUFBMVYsR0FBQW1YLEdBTUFBLEVBQUE3QixhQUFBeUIsRUFBQWpY
LFFBQ0FxWCxFQUFBMUIsZ0JBQ0EwQixFQUFBcEIsY0FBQW5jLEtBQWlDdWQsRUFBQXJYLFNBR2pD
bVgsRUFBQUQsR0FBQUcsRUFDQUEsR0FJQSxRQUFBQyxJQUFBRyxHQUNBLEdBQUF4WCxHQUFBd1gs
RUFBQXpYLFFBQUFDLEtBQ0EsUUFBQXBILEtBQUFvSCxHQUNBeU4sR0FBQStKLEVBQUE1UixVQUFB
LFNBQUFoTixHQUlBLFFBQUEwZSxJQUFBRSxHQUNBLEdBQUFwSixHQUFBb0osRUFBQXpYLFFBQUFx
TyxRQUNBLFFBQUF4VixLQUFBd1YsR0FDQVksR0FBQXdJLEVBQUE1UixVQUFBaE4sRUFBQXdWLEVB
QUF4VixJQU1BLFFBQUE2ZSxJQUFBcEIsR0FJQWtCLEdBQUF6SCxRQUFBLFNBQUEzUCxHQUNBa1cs
RUFBQWxXLEdBQUEsU0FDQW1CLEVBQ0FvVyxHQUVBLE1BQUFBLElBWUEsY0FBQXZYLEdBQUF6SixF
QUFBZ2hCLEtBQ0FBLEVBQUF6WCxLQUFBeVgsRUFBQXpYLE1BQUFxQixFQUNBb1csRUFBQXZjLEtB
QUE0RSxRQUFBOFEsTUFBQWhYLE9BQUE2ZCxJQUVBLGNBQUF2WCxHQUFBLGtCQUFBdVgsS0FDQUEs
R0FBd0J6ZSxLQUFBeWUsRUFBQWhYLE9BQUFnWCxJQUV4QnZjLEtBQUE0RSxRQUFBSSxFQUFBLEtB
QUFtQixHQUFBb1csRUFDQUEsR0FuQkF2YyxLQUFBNEUsUUFBQUksRUFBQSxLQUFBbUIsTUE2QkEs
UUFBQXFXLElBQUE3SixHQUNBLE1BQUFBLE9BQUFyUixLQUFBc0QsUUFBQUUsTUFBQTZOLEVBQUE3
SyxLQUdBLFFBQUEyVSxJQUFBQyxFQUFBNVgsR0FDQSxNQUFBckcsT0FBQWEsUUFBQW9kLEdBQ0FB
LEVBQUFwZixRQUFBd0gsSUFBQSxFQUNHLGdCQUFBNFgsR0FDSEEsRUFBQTVmLE1BQUEsS0FBQVEs
UUFBQXdILElBQUEsSUFDR3BKLEVBQUFnaEIsSUFDSEEsRUFBQWhjLEtBQUFvRSxHQU1BLFFBQUE2
WCxJQUFBOWUsRUFBQStlLEVBQUFDLEdBQ0EsT0FBQXBmLEtBQUFJLEdBQUEsQ0FDQSxHQUFBaWYs
R0FBQWpmLEVBQUFKLEVBQ0EsSUFBQXFmLEVBQUEsQ0FDQSxHQUFBaFksR0FBQTBYLEdBQUFNLEVB
QUExVSxpQkFDQXRELEtBQUErWCxFQUFBL1gsS0FDQWdZLElBQUFGLEdBQ0FHLEdBQUFELEdBRUFq
ZixFQUFBSixHQUFBLFFBTUEsUUFBQXNmLElBQUFuVixHQUNBQSxHQUNBQSxFQUFBb1Ysa0JBQUFD
LFdBMktBLFFBQUFDLElBQUF0VixHQUlBLElBSEEsR0FBQUcsR0FBQUgsRUFBQUcsS0FDQW9WLEVB
QUF2VixFQUNBd1YsRUFBQXhWLEVBQ0EzTSxFQUFBbWlCLEVBQUFKLG9CQUNBSSxJQUFBSixrQkFB
QWpOLE9BQ0FxTixFQUFBclYsT0FDQUEsRUFBQXNWLEdBQUFELEVBQUFyVixRQUdBLE1BQUE5TSxF
QUFBa2lCLElBQUExWCxTQUNBMFgsRUFBQXBWLE9BQ0FBLEVBQUFzVixHQUFBdFYsRUFBQW9WLEVB
QUFwVixNQUdBLE9BQUF1VixJQUFBdlYsRUFBQXdWLFlBQUF4VixFQUFBeVYsT0FHQSxRQUFBSCxJ
QUFBM1gsRUFBQUQsR0FDQSxPQUNBOFgsWUFBQTlZLEdBQUFpQixFQUFBNlgsWUFBQTlYLEVBQUE4
WCxhQUNBQyxNQUFBdmlCLEVBQUF5SyxFQUFBOFgsUUFDQTlYLEVBQUE4WCxNQUFBL1gsRUFBQStY
LE9BQ0EvWCxFQUFBK1gsT0FJQSxRQUFBRixJQUNBQyxFQUNBRSxHQUVBLE1BQUF4aUIsR0FBQXNp
QixJQUFBdGlCLEVBQUF3aUIsR0FDQWhaLEdBQUE4WSxFQUFBRyxHQUFBRCxJQUdBLEdBR0EsUUFB
QWhaLElBQUF4RyxFQUFBZSxHQUNBLE1BQUFmLEdBQUFlLEVBQUFmLEVBQUEsSUFBQWUsRUFBQWYs
RUFBQWUsR0FBQSxHQUdBLFFBQUEwZSxJQUFBOWlCLEdBQ0EsTUFBQTZELE9BQUFhLFFBQUExRSxH
QUNBK2lCLEdBQUEvaUIsR0FFQVMsRUFBQVQsR0FDQWdqQixHQUFBaGpCLEdBRUEsZ0JBQUFBLEdB
Q0FBLEVBR0EsR0FHQSxRQUFBK2lCLElBQUEvaUIsR0FHQSxPQURBaWpCLEdBREEvZSxFQUFBLEdB
RUEvQixFQUFBLEVBQUFtQixFQUFBdEQsRUFBQW9DLE9BQW1DRCxFQUFBbUIsRUFBT25CLElBQzFD
OUIsRUFBQTRpQixFQUFBSCxHQUFBOWlCLEVBQUFtQyxNQUFBLEtBQUE4Z0IsSUFDQS9lLElBQWdC
QSxHQUFBLEtBQ2hCQSxHQUFBK2UsRUFHQSxPQUFBL2UsR0FHQSxRQUFBOGUsSUFBQWhqQixHQUNB
LEdBQUFrRSxHQUFBLEVBQ0EsUUFBQXJCLEtBQUE3QyxHQUNBQSxFQUFBNkMsS0FDQXFCLElBQWdC
QSxHQUFBLEtBQ2hCQSxHQUFBckIsRUFHQSxPQUFBcUIsR0F1Q0EsUUFBQTRZLElBQUE1UCxHQUNB
LE1BQUFnVyxJQUFBaFcsR0FDQSxNQUlBLFNBQUFBLEVBQ0EsV0FEQSxHQU1BLFFBQUFpVyxJQUFB
alcsR0FFQSxJQUFBNUcsR0FDQSxRQUVBLElBQUF5VyxHQUFBN1AsR0FDQSxRQUlBLElBRkFBLElB
QUE3SyxjQUVBLE1BQUErZ0IsR0FBQWxXLEdBQ0EsTUFBQWtXLElBQUFsVyxFQUVBLElBQUE4RyxH
QUFBcVAsU0FBQTNJLGNBQUF4TixFQUNBLE9BQUFBLEdBQUF4SyxRQUFBLFFBRUEwZ0IsR0FBQWxX
LEdBQ0E4RyxFQUFBc0wsY0FBQWdFLE9BQUFDLG9CQUNBdlAsRUFBQXNMLGNBQUFnRSxPQUFBRSxZ
QUdBSixHQUFBbFcsR0FBQSxxQkFBQXBILEtBQUFrTyxFQUFBMVMsWUFTQSxRQUFBbWlCLElBQUF6
UCxHQUNBLG1CQUFBQSxHQUFBLENBQ0EsR0FBQTBQLEdBQUFMLFNBQUFNLGNBQUEzUCxFQUNBLE9B
QUEwUCxJQUlBTCxTQUFBM0ksY0FBQSxPQUlBLE1BQUExRyxHQU1BLFFBQUE0UCxJQUFBQyxFQUFB
N1csR0FDQSxHQUFBTSxHQUFBK1YsU0FBQTNJLGNBQUFtSixFQUNBLGtCQUFBQSxFQUNBdlcsR0FH
QU4sRUFBQUcsTUFBQUgsRUFBQUcsS0FBQW9DLFdBQUFuUCxLQUFBNE0sRUFBQUcsS0FBQW9DLE1B
QUF1VSxVQUNBeFcsRUFBQXlXLGFBQUEsdUJBRUF6VyxHQUdBLFFBQUEwVyxJQUFBQyxFQUFBSixH
QUNBLE1BQUFSLFVBQUFXLGdCQUFBRSxHQUFBRCxHQUFBSixHQUdBLFFBQUFNLElBQUE5VyxHQUNB
LE1BQUFnVyxVQUFBYyxlQUFBOVcsR0FHQSxRQUFBK1csSUFBQS9XLEdBQ0EsTUFBQWdXLFVBQUFl
LGNBQUEvVyxHQUdBLFFBQUFnWCxJQUFBOUIsRUFBQStCLEVBQUFDLEdBQ0FoQyxFQUFBOEIsYUFB
QUMsRUFBQUMsR0FHQSxRQUFBQyxJQUFBdlUsRUFBQW5GLEdBQ0FtRixFQUFBdVUsWUFBQTFaLEdB
R0EsUUFBQTJaLElBQUF4VSxFQUFBbkYsR0FDQW1GLEVBQUF3VSxZQUFBM1osR0FHQSxRQUFBeVgs
SUFBQXRTLEdBQ0EsTUFBQUEsR0FBQXNTLFdBR0EsUUFBQW1DLElBQUF6VSxHQUNBLE1BQUFBLEdB
QUF5VSxZQUdBLFFBQUFiLElBQUE1VCxHQUNBLE1BQUFBLEdBQUE0VCxRQUdBLFFBQUFjLElBQUEx
VSxFQUFBNUMsR0FDQTRDLEVBQUEyVSxZQUFBdlgsRUFHQSxRQUFBMFcsSUFBQTlULEVBQUFwTixF
QUFBN0IsR0FDQWlQLEVBQUE4VCxhQUFBbGhCLEVBQUE3QixHQW9DQSxRQUFBNmpCLElBQUE3WCxF
QUFBOFgsR0FDQSxHQUFBamlCLEdBQUFtSyxFQUFBRyxLQUFBNFgsR0FDQSxJQUFBbGlCLEVBQUEs
Q0FFQSxHQUFBcUQsR0FBQThHLEVBQUFPLFFBQ0F3WCxFQUFBL1gsRUFBQW9WLG1CQUFBcFYsRUFB
QU0sSUFDQTBYLEVBQUE5ZSxFQUFBc04sS0FDQXNSLEdBQ0FqaEIsTUFBQWEsUUFBQXNnQixFQUFB
bmlCLElBQ0FQLEVBQUEwaUIsRUFBQW5pQixHQUFBa2lCLEdBQ0tDLEVBQUFuaUIsS0FBQWtpQixJ
QUNMQyxFQUFBbmlCLE9BQUF6QyxJQUdBNE0sRUFBQUcsS0FBQThYLFNBQ0FwaEIsTUFBQWEsUUFB
QXNnQixFQUFBbmlCLElBRU9taUIsRUFBQW5pQixHQUFBSCxRQUFBcWlCLEdBQUEsR0FFUEMsRUFB
QW5pQixHQUFBbUUsS0FBQStkLEdBSEFDLEVBQUFuaUIsSUFBQWtpQixHQU1BQyxFQUFBbmlCLEdB
QUFraUIsR0F1QkEsUUFBQUcsSUFBQTdoQixFQUFBZSxHQUNBLE1BQ0FmLEdBQUFSLE1BQUF1QixF
QUFBdkIsTUFFQVEsRUFBQTZKLE1BQUE5SSxFQUFBOEksS0FDQTdKLEVBQUF1SyxZQUFBeEosRUFB
QXdKLFdBQ0F2TixFQUFBZ0QsRUFBQThKLFFBQUE5TSxFQUFBK0QsRUFBQStJLE9BQ0FnWSxHQUFB
OWhCLEVBQUFlLElBRUE5RCxFQUFBK0MsRUFBQStoQixxQkFDQS9oQixFQUFBb0ssZUFBQXJKLEVB
QUFxSixjQUNBdk4sRUFBQWtFLEVBQUFxSixhQUFBakgsUUFRQSxRQUFBMmUsSUFBQTloQixFQUFB
ZSxHQUNBLGFBQUFmLEVBQUE2SixJQUEwQixRQUMxQixJQUFBL0ssRUFHQSxRQUZBOUIsRUFBQThC
LEVBQUFrQixFQUFBOEosT0FBQTlNLEVBQUE4QixJQUFBb04sUUFBQXBOLEVBQUFpSSxTQUNBL0os
RUFBQThCLEVBQUFpQyxFQUFBK0ksT0FBQTlNLEVBQUE4QixJQUFBb04sUUFBQXBOLEVBQUFpSSxN
QUlBLFFBQUFpYixJQUFBalksRUFBQWtZLEVBQUFDLEdBQ0EsR0FBQXBqQixHQUFBVSxFQUNBZCxJ
QUNBLEtBQUFJLEVBQUFtakIsRUFBb0JuakIsR0FBQW9qQixJQUFhcGpCLEVBQ2pDVSxFQUFBdUss
RUFBQWpMLEdBQUFVLElBQ0F4QyxFQUFBd0MsS0FBcUJkLEVBQUFjLEdBQUFWLEVBRXJCLE9BQUFK
LEdBZ21CQSxRQUFBeWpCLElBQUFDLEVBQUF6WSxJQUNBeVksRUFBQXRZLEtBQUF6QyxZQUFBc0Ms
RUFBQUcsS0FBQXpDLGFBQ0E0SixHQUFBbVIsRUFBQXpZLEdBSUEsUUFBQXNILElBQUFtUixFQUFB
elksR0FDQSxHQVFBbkssR0FBQTZpQixFQUFBQyxFQVJBQyxFQUFBSCxJQUFBSSxHQUNBQyxFQUFB
OVksSUFBQTZZLEdBQ0FFLEVBQUFDLEdBQUFQLEVBQUF0WSxLQUFBekMsV0FBQSthLEVBQUFsWSxT
QUNBMFksRUFBQUQsR0FBQWhaLEVBQUFHLEtBQUF6QyxXQUFBc0MsRUFBQU8sU0FFQTJZLEtBQ0FD
LElBR0EsS0FBQXRqQixJQUFBb2pCLEdBQ0FQLEVBQUFLLEVBQUFsakIsR0FDQThpQixFQUFBTSxF
QUFBcGpCLEdBQ0E2aUIsR0FRQUMsRUFBQVMsU0FBQVYsRUFBQTFsQixNQUNBcW1CLEdBQUFWLEVB
QUEsU0FBQTNZLEVBQUF5WSxHQUNBRSxFQUFBcGdCLEtBQUFvZ0IsRUFBQXBnQixJQUFBK2dCLGtC
QUNBSCxFQUFBbmYsS0FBQTJlLEtBVEFVLEdBQUFWLEVBQUEsT0FBQTNZLEVBQUF5WSxHQUNBRSxF
QUFBcGdCLEtBQUFvZ0IsRUFBQXBnQixJQUFBZ2hCLFVBQ0FMLEVBQUFsZixLQUFBMmUsR0FZQSxJ
QUFBTyxFQUFBOWpCLE9BQUEsQ0FDQSxHQUFBb2tCLEdBQUEsV0FDQSxPQUFBcmtCLEdBQUEsRUFB
cUJBLEVBQUErakIsRUFBQTlqQixPQUEyQkQsSUFDaERra0IsR0FBQUgsRUFBQS9qQixHQUFBLFdB
QUE2SyxFQUFBeVksR0FHQUcsR0FDQTVXLEdBQUFoQyxFQUFBRyxLQUFBK0IsT0FBQWxDLEVBQUFH
LEtBQUErQixTQUE2RCxTQUFBc1gsR0FFN0RBLElBWUEsR0FSQUwsRUFBQS9qQixRQUNBNE0sR0FB
QWhDLEVBQUFHLEtBQUErQixPQUFBbEMsRUFBQUcsS0FBQStCLFNBQTJELHVCQUMzRCxPQUFBL00s
R0FBQSxFQUFxQkEsRUFBQWdrQixFQUFBL2pCLE9BQThCRCxJQUNuRGtrQixHQUFBRixFQUFBaGtC
LEdBQUEsbUJBQUE2SyxFQUFBeVksTUFLQUcsRUFDQSxJQUFBL2lCLElBQUFrakIsR0FDQUUsRUFB
QXBqQixJQUVBd2pCLEdBQUFOLEVBQUFsakIsR0FBQSxTQUFBNGlCLElBQUFLLEdBUUEsUUFBQUUs
SUFDQXZiLEVBQ0F2RSxHQUVBLEdBQUFoQyxHQUFBcEUsT0FBQWtDLE9BQUEsS0FDQSxLQUFBeUks
RUFDQSxNQUFBdkcsRUFFQSxJQUFBL0IsR0FBQXdqQixDQUNBLEtBQUF4akIsRUFBQSxFQUFhQSxF
QUFBc0ksRUFBQXJJLE9BQWlCRCxJQUM5QndqQixFQUFBbGIsRUFBQXRJLEdBQ0F3akIsRUFBQWMs
WUFDQWQsRUFBQWMsVUFBQUMsSUFFQXhpQixFQUFBeWlCLEdBQUFoQixNQUNBQSxFQUFBcGdCLElB
QUErRixFQUFBcEYsRUFBQXNHLFNBQUEsYUFBQW1aLEVBQUF6YixNQUFBLEVBRUEsT0FBQWhHLEdB
R0EsUUFBQXlpQixJQUFBaEIsR0FDQSxNQUFBQSxHQUFBaUIsU0FBQWpCLEVBQUEsU0FBQTdsQixP
QUFBaUYsS0FBQTRnQixFQUFBYyxlQUE0RUksS0FBQSxLQUc1RSxRQUFBUixJQUFBVixFQUFBelcs
RUFBQWxDLEVBQUF5WSxFQUFBSyxHQUNBLEdBQUE5aUIsR0FBQTJpQixFQUFBcGdCLEtBQUFvZ0Is
RUFBQXBnQixJQUFBMkosRUFDQSxJQUFBbE0sRUFDQSxJQUNBQSxFQUFBZ0ssRUFBQU0sSUFBQXFZ
LEVBQUEzWSxFQUFBeVksRUFBQUssR0FDSyxNQUFBamhCLEdBQ0xtQixFQUFBbkIsRUFBQW1JLEVB
QUFPLFFBQUEsYUFBQW9ZLEVBQUEsU0FBQXpXLEVBQUEsVUFZQSxRQUFBNFgsSUFBQXJCLEVBQUF6
WSxHQUNBLEdBQUErSyxHQUFBL0ssRUFBQVEsZ0JBQ0EsTUFBQW5OLEVBQUEwWCxLQUFBLElBQUFB
LEVBQUFyUixLQUFBc0QsUUFBQStjLGNBR0E3bUIsRUFBQXVsQixFQUFBdFksS0FBQW9DLFFBQUFy
UCxFQUFBOE0sRUFBQUcsS0FBQW9DLFFBQUEsQ0FHQSxHQUFBMU0sR0FBQTZMLEVBQ0FwQixFQUFB
TixFQUFBTSxJQUNBMFosRUFBQXZCLEVBQUF0WSxLQUFBb0MsVUFDQUEsRUFBQXZDLEVBQUFHLEtB
QUFvQyxTQUVBbFAsR0FBQWtQLEVBQUE3SCxVQUNBNkgsRUFBQXZDLEVBQUFHLEtBQUFvQyxNQUFB
ekwsS0FBd0N5TCxHQUd4QyxLQUFBMU0sSUFBQTBNLEdBQ0FiLEVBQUFhLEVBQUExTSxHQUNBbWtC
LEVBQUFua0IsS0FDQTZMLEdBQ0F1WSxHQUFBM1osRUFBQXpLLEVBQUE2TCxFQUtBd1ksS0FBQTNY
LEVBQUF2UCxRQUFBZ25CLEVBQUFobkIsT0FDQWluQixHQUFBM1osRUFBQSxRQUFBaUMsRUFBQXZQ
LE1BRUEsS0FBQTZDLElBQUFta0IsR0FDQTltQixFQUFBcVAsRUFBQTFNLE1BQ0Fza0IsR0FBQXRr
QixHQUNBeUssRUFBQThaLGtCQUFBQyxHQUFBQyxHQUFBemtCLElBQ08wa0IsR0FBQTFrQixJQUNQ
eUssRUFBQWthLGdCQUFBM2tCLEtBTUEsUUFBQW9rQixJQUFBalQsRUFBQW5SLEVBQUE3QyxHQUNB
eW5CLEdBQUE1a0IsR0FHQTZrQixHQUFBMW5CLEdBQ0FnVSxFQUFBd1QsZ0JBQUEza0IsR0FFQW1S
LEVBQUErUCxhQUFBbGhCLEtBRUcwa0IsR0FBQTFrQixHQUNIbVIsRUFBQStQLGFBQUFsaEIsRUFB
QTZrQixHQUFBMW5CLElBQUEsVUFBQUEsRUFBQSxnQkFDR21uQixHQUFBdGtCLEdBQ0g2a0IsR0FB
QTFuQixHQUNBZ1UsRUFBQW9ULGtCQUFBQyxHQUFBQyxHQUFBemtCLElBRUFtUixFQUFBMlQsZUFB
QU4sR0FBQXhrQixFQUFBN0MsR0FHQTBuQixHQUFBMW5CLEdBQ0FnVSxFQUFBd1QsZ0JBQUEza0Is
R0FFQW1SLEVBQUErUCxhQUFBbGhCLEVBQUE3QyxHQVlBLFFBQUE0bkIsSUFBQW5DLEVBQUF6WSxH
QUNBLEdBQUFnSCxHQUFBaEgsRUFBQU0sSUFDQUgsRUFBQUgsRUFBQUcsS0FDQTBhLEVBQUFwQyxF
QUFBdFksSUFDQSxNQUNBak4sRUFBQWlOLEVBQUF3VixjQUNBemlCLEVBQUFpTixFQUFBeVYsU0FD
QTFpQixFQUFBMm5CLElBQ0EzbkIsRUFBQTJuQixFQUFBbEYsY0FDQXppQixFQUFBMm5CLEVBQUFq
RixTQUxBLENBWUEsR0FBQWtGLEdBQUF4RixHQUFBdFYsR0FHQSthLEVBQUEvVCxFQUFBZ1Usa0JB
Q0EzbkIsR0FBQTBuQixLQUNBRCxFQUFBamUsR0FBQWllLEVBQUFoRixHQUFBaUYsS0FJQUQsSUFB
QTlULEVBQUFpVSxhQUNBalUsRUFBQStQLGFBQUEsUUFBQStELEdBQ0E5VCxFQUFBaVUsV0FBQUgs
SUFhQSxRQUFBSSxJQUFBQyxHQW9FQSxRQUFBQyxNQUNBQyxXQUFBcmhCLEtBQUFtaEIsRUFBQS9a
LE1BQUFrYSxFQUFBbm1CLEdBQUFvbUIsUUFDQUQsRUFBQW5tQixFQUFBLEVBckVBLEdBUUFrQyxH
QUFBbWtCLEVBQUFybUIsRUFBQXNtQixFQUFBSixFQVJBSyxHQUFBLEVBQ0FDLEdBQUEsRUFDQUMs
R0FBQSxFQUNBQyxHQUFBLEVBQ0FDLEVBQUEsRUFDQUMsRUFBQSxFQUNBQyxFQUFBLEVBQ0FWLEVB
QUEsQ0FHQSxLQUFBbm1CLEVBQUEsRUFBYUEsRUFBQWdtQixFQUFBL2xCLE9BQWdCRCxJQUc3QixH
QUZBcW1CLEVBQUFua0IsRUFDQUEsRUFBQThqQixFQUFBN2lCLFdBQUFuRCxHQUNBdW1CLEVBQ0Es
S0FBQXJrQixHQUFBLEtBQUFta0IsSUFBd0NFLEdBQUEsT0FDbkMsSUFBQUMsRUFDTCxLQUFBdGtC
LEdBQUEsS0FBQW1rQixJQUF3Q0csR0FBQSxPQUNuQyxJQUFBQyxFQUNMLEtBQUF2a0IsR0FBQSxL
QUFBbWtCLElBQXdDSSxHQUFBLE9BQ25DLElBQUFDLEVBQ0wsS0FBQXhrQixHQUFBLEtBQUFta0Is
SUFBd0NLLEdBQUEsT0FDbkMsSUFDTCxNQUFBeGtCLEdBQ0EsTUFBQThqQixFQUFBN2lCLFdBQUFu
RCxFQUFBLElBQ0EsTUFBQWdtQixFQUFBN2lCLFdBQUFuRCxFQUFBLElBQ0EybUIsR0FBQUMsR0FB
QUMsRUFTSyxDQUNMLE9BQUEza0IsR0FDQSxRQUFBc2tCLEdBQUEsQ0FBbUMsTUFDbkMsU0FBQUQs
R0FBQSxDQUFtQyxNQUNuQyxTQUFBRSxHQUFBLENBQTJDLE1BQzNDLFNBQUFJLEdBQTJCLE1BQzNC
LFNBQUFBLEdBQTJCLE1BQzNCLFNBQUFELEdBQTRCLE1BQzVCLFNBQUFBLEdBQTRCLE1BQzVCLFVB
QUFELEdBQTJCLE1BQzNCLFVBQUFBLElBRUEsUUFBQXprQixFQUFBLENBSUEsSUFIQSxHQUFBeVIs
R0FBQTNULEVBQUEsRUFDQThtQixNQUFBLEdBRWNuVCxHQUFBLEdBRWQsT0FEQW1ULEVBQUFkLEVB
QUFlLE9BQUFwVCxJQURzQkEsS0FJdEJtVCxHQUFBRSxHQUFBcmpCLEtBQUFtakIsS0FDQUosR0FB
QSxhQTVCQXpvQixLQUFBcW9CLEdBRUFILEVBQUFubUIsRUFBQSxFQUNBc21CLEVBQUFOLEVBQUEv
WixNQUFBLEVBQUFqTSxHQUFBb21CLFFBRUFILEdBd0NBLFFBWEFob0IsS0FBQXFvQixFQUNBQSxF
QUFBTixFQUFBL1osTUFBQSxFQUFBak0sR0FBQW9tQixPQUNHLElBQUFELEdBQ0hGLElBUUFDLEVB
Q0EsSUFBQWxtQixFQUFBLEVBQWVBLEVBQUFrbUIsRUFBQWptQixPQUFvQkQsSUFDbkNzbUIsRUFB
QVcsR0FBQVgsRUFBQUosRUFBQWxtQixHQUlBLE9BQUFzbUIsR0FHQSxRQUFBVyxJQUFBakIsRUFB
QWxHLEdBQ0EsR0FBQTlmLEdBQUE4ZixFQUFBdmYsUUFBQSxJQUNBLE9BQUFQLEdBQUEsRUFFQSxP
QUFBOGYsRUFBQSxNQUFBa0csRUFBQSxJQUlBLE9BRkFsRyxFQUFBN1QsTUFBQSxFQUFBak0sR0FF
QSxNQUFBZ21CLEVBQUEsSUFEQWxHLEVBQUE3VCxNQUFBak0sRUFBQSxHQU9BLFFBQUFrbkIsSUFB
QUMsR0FDQS9pQixRQUFBQyxNQUFBLG1CQUFBOGlCLEdBR0EsUUFBQUMsSUFDQUMsRUFDQTNtQixH
QUVBLE1BQUEybUIsR0FDQUEsRUFBQXpuQixJQUFBLFNBQUEwbkIsR0FBZ0MsTUFBQUEsR0FBQTVt
QixLQUFpQm9mLE9BQUEsU0FBQXlILEdBQXVCLE1BQUFBLFFBSXhFLFFBQUFDLElBQUEzVixFQUFB
OUosRUFBQWxLLElBQ0FnVSxFQUFBL0osUUFBQStKLEVBQUEvSixXQUFBakQsTUFBc0NrRCxPQUFB
bEssVUFHdEMsUUFBQTRwQixJQUFBNVYsRUFBQTlKLEVBQUFsSyxJQUNBZ1UsRUFBQXpFLFFBQUF5
RSxFQUFBekUsV0FBQXZJLE1BQXNDa0QsT0FBQWxLLFVBR3RDLFFBQUE2cEIsSUFDQTdWLEVBQ0E5
SixFQUNBMGMsRUFDQTVtQixFQUNBOHBCLEVBQ0FyRCxJQUVBelMsRUFBQXRKLGFBQUFzSixFQUFB
dEosZ0JBQUExRCxNQUFnRGtELE9BQUEwYyxVQUFBNW1CLFFBQUE4cEIsTUFBQXJELGNBR2hELFFB
QUFzRCxJQUNBL1YsRUFDQTlKLEVBQ0FsSyxFQUNBeW1CLEVBQ0F1RCxFQUNBQyxHQWNBeEQsS0FB
QTNYLGdCQUNBMlgsR0FBQTNYLFFBQ0E1RSxFQUFBLElBQUFBLEdBRUF1YyxLQUFBdmhCLGFBQ0F1
aEIsR0FBQXZoQixLQUNBZ0YsRUFBQSxJQUFBQSxHQUdBdWMsS0FBQTFYLGdCQUNBMFgsR0FBQTFY
LFFBQ0E3RSxFQUFBLElBQUFBLEVBRUEsSUFBQWdnQixFQUNBekQsTUFBQTBELGNBQ0ExRCxHQUFB
MEQsT0FDQUQsRUFBQWxXLEVBQUFvVyxlQUFBcFcsRUFBQW9XLGtCQUVBRixFQUFBbFcsRUFBQWtX
LFNBQUFsVyxFQUFBa1csVUFFQSxJQUFBRyxJQUFvQnJxQixRQUFBeW1CLGFBQ3BCNVEsRUFBQXFV
LEVBQUFoZ0IsRUFFQXJHLE9BQUFhLFFBQUFtUixHQUNBbVUsRUFBQW5VLEVBQUErSyxRQUFBeUos
R0FBQXhVLEVBQUE3TyxLQUFBcWpCLEdBRUFILEVBQUFoZ0IsR0FERzJMLEVBQ0htVSxHQUFBSyxF
QUFBeFUsTUFBQXdVLEdBRUFBLEVBSUEsUUFBQUMsSUFDQXRXLEVBQ0E5SixFQUNBcWdCLEdBRUEs
R0FBQUMsR0FDQUMsR0FBQXpXLEVBQUEsSUFBQTlKLElBQ0F1Z0IsR0FBQXpXLEVBQUEsVUFBQTlK
LEVBQ0EsVUFBQXNnQixFQUNBLE1BQUF0QyxJQUFBc0MsRUFDRyxTQUFBRCxFQUFBLENBQ0gsR0FB
QUcsR0FBQUQsR0FBQXpXLEVBQUE5SixFQUNBLFVBQUF3Z0IsRUFDQSxNQUFBbnBCLE1BQUFDLFVB
QUFrcEIsSUFLQSxRQUFBRCxJQUFBelcsRUFBQTlKLEdBQ0EsR0FBQWxKLEVBQ0EsV0FBQUEsRUFB
QWdULEVBQUEyVyxTQUFBemdCLElBRUEsT0FEQWpJLEdBQUErUixFQUFBNFcsVUFDQXpvQixFQUFB
LEVBQUFtQixFQUFBckIsRUFBQUcsT0FBb0NELEVBQUFtQixFQUFPbkIsSUFDM0MsR0FBQUYsRUFB
QUUsR0FBQStILFNBQUEsQ0FDQWpJLEVBQUFVLE9BQUFSLEVBQUEsRUFDQSxPQUlBLE1BQUFuQixH
QVFBLFFBQUE2cEIsSUFDQTdXLEVBQ0FoVSxFQUNBeW1CLEdBRUEsR0FBQTFCLEdBQUEwQixNQUNB
cUUsRUFBQS9GLEVBQUErRixPQUNBdkMsRUFBQXhELEVBQUF3RCxLQUdBd0MsRUFEQSxLQUVBeEMs
S0FDQXdDLEVBQ0EsOENBSUFELElBQ0FDLEVBQUEsTUFBQUEsRUFBQSxJQUVBLElBQUFDLEdBQUFD
LEdBQUFqckIsRUFBQStxQixFQUVBL1csR0FBQWlILE9BQ0FqYixNQUFBLElBQUFBLEVBQUEsSUFD
QXlvQixXQUFBLElBQUF6b0IsRUFBQSxJQUNBdWMsU0FBQSxtQkFBd0R5TyxFQUFBLEtBT3hELFFB
QUFDLElBQ0FqckIsRUFDQWdyQixHQUVBLEdBQUFFLEdBQUFDLEdBQUFuckIsRUFDQSxlQUFBa3JC
LEVBQUFFLElBQ0FwckIsRUFBQSxJQUFBZ3JCLEVBRUEsUUFBQUUsRUFBQSxTQUFBQSxFQUFBLFNB
QUFGLEVBQUEsSUF5QkEsUUFBQUcsSUFBQW5xQixHQUtBLEdBSkFhLEdBQUFiLEVBQ0E0TCxHQUFB
L0ssR0FBQU8sT0FDQWlwQixHQUFBQyxHQUFBQyxHQUFBLEVBRUF2cUIsRUFBQTBCLFFBQUEsUUFB
QTFCLEVBQUF3cUIsWUFBQSxLQUFBNWUsR0FBQSxFQUNBLE9BQ0F1YixJQUFBbm5CLEVBQ0FvcUIs
SUFBQSxLQUlBLE9BQUFLLE1BQ0FDLEdBQUFDLEtBRUFDLEdBQUFGLElBQ0FHLEdBQUFILElBQ0ss
S0FBQUEsSUFDTEksR0FBQUosR0FJQSxRQUNBdkQsSUFBQW5uQixFQUFBK3FCLFVBQUEsRUFBQVQs
SUFDQUYsSUFBQXBxQixFQUFBK3FCLFVBQUFULEdBQUEsRUFBQUMsS0FJQSxRQUFBSSxNQUNBLE1B
QUE5cEIsSUFBQXlELGFBQUErbEIsSUFHQSxRQUFBSSxNQUNBLE1BQUFKLEtBQUF6ZSxHQUdBLFFB
QUFnZixJQUFBRixHQUNBLFlBQUFBLEdBQUEsS0FBQUEsRUFHQSxRQUFBSSxJQUFBSixHQUNBLEdB
QUFNLEdBQUEsQ0FFQSxLQURBVixHQUFBRCxJQUNBSSxNQUVBLEdBREFDLEVBQUFDLEtBQ0FDLEdB
QUFGLEdBQ0FHLEdBQUFILE9BS0EsSUFGQSxLQUFBQSxHQUF1Qk0sSUFDdkIsS0FBQU4sR0FBdUJN
LElBQ3ZCLElBQUFBLEVBQUEsQ0FDQVQsR0FBQUYsRUFDQSxRQUtBLFFBQUFRLElBQUFILEdBRUEs
SUFEQSxHQUFBTyxHQUFBUCxHQUNBRCxPQUNBQyxFQUFBQyxRQUNBTSxLQWVBLFFBQUFoUixJQUNB
akgsRUFDQTJSLEVBQ0F1RyxHQUVBQyxHQUFBRCxDQUNBLElBQUFsc0IsR0FBQTJsQixFQUFBM2xC
LE1BQ0F5bUIsRUFBQWQsRUFBQWMsVUFDQXZaLEVBQUE4RyxFQUFBOUcsSUFDQTlDLEVBQUE0SixF
QUFBMlcsU0FBQXZnQixJQW9CQSxJQUFBNEosRUFBQXJDLFVBR0EsTUFGQWtaLElBQUE3VyxFQUFB
aFUsRUFBQXltQixJQUVBLENBQ0csZUFBQXZaLEVBQ0hrZixHQUFBcFksRUFBQWhVLEVBQUF5bUIs
T0FDRyxjQUFBdlosR0FBQSxhQUFBOUMsRUFDSGlpQixHQUFBclksRUFBQWhVLEVBQUF5bUIsT0FD
RyxjQUFBdlosR0FBQSxVQUFBOUMsRUFDSGtpQixHQUFBdFksRUFBQWhVLEVBQUF5bUIsT0FDRyxj
QUFBdlosR0FBQSxhQUFBQSxFQUNIcWYsR0FBQXZZLEVBQUFoVSxFQUFBeW1CLE9BQ0csS0FBQXJn
QixHQUFBMlcsY0FBQTdQLEdBR0gsTUFGQTJkLElBQUE3VyxFQUFBaFUsRUFBQXltQixJQUVBLENB
V0EsVUFHQSxRQUFBNEYsSUFDQXJZLEVBQ0FoVSxFQUNBeW1CLEdBRUEsR0FBQXFFLEdBQUFyRSxL
QUFBcUUsT0FDQTBCLEVBQUFsQyxHQUFBdFcsRUFBQSxpQkFDQXlZLEVBQUFuQyxHQUFBdFcsRUFB
QSxzQkFDQTBZLEVBQUFwQyxHQUFBdFcsRUFBQSx1QkFDQTJWLElBQUEzVixFQUFBLFVBQ0EsaUJB
QUFoVSxFQUFBLFFBQ0FBLEVBQUEsSUFBQXdzQixFQUFBLFFBQ0EsU0FBQUMsRUFDQSxLQUFBenNC
LEVBQUEsSUFDQSxPQUFBQSxFQUFBLElBQUF5c0IsRUFBQSxNQUdBMUMsR0FBQS9WLEVBQUEyWSxH
QUNBLFdBQUEzc0IsRUFBQSx5Q0FFQXlzQixFQUFBLE1BQUFDLEVBQUEscUNBRUE1QixFQUFBLE1B
QUEwQixFQUFBLElBQUFBLEdBQUEsNkNBRXdCeHNCLEVBQUEsbUNBQ1pBLEVBQUEscURBQ0RpckIs
R0FBQWpyQixFQUFBLFdBQ1gsU0FJQSxRQUFBc3NCLElBQ0F0WSxFQUNBaFUsRUFDQXltQixHQUVB
LEdBQUFxRSxHQUFBckUsS0FBQXFFLE9BQ0EwQixFQUFBbEMsR0FBQXRXLEVBQUEsZ0JBQ0F3WSxH
QUFBMUIsRUFBQSxNQUFBMEIsRUFBQSxJQUFBQSxFQUNBN0MsR0FBQTNWLEVBQUEsZ0JBQUFoVSxF
QUFBLElBQUF3c0IsRUFBQSxLQUNBekMsR0FBQS9WLEVBQUEyWSxHQUFBMUIsR0FBQWpyQixFQUFB
d3NCLEdBQUEsU0FHQSxRQUFBSixJQUNBcFksRUFDQWhVLEVBQ0F5bUIsR0FFQSxHQUFBcUUsR0FB
QXJFLEtBQUFxRSxPQUNBOEIsRUFBQSwwSkFHQTlCLEVBQUEsc0JBR0ErQixFQUFBLHVCQUFBRCxF
QUFBLEdBQ0FDLEtBQUEsSUFBQTVCLEdBQUFqckIsRUFGQSw2REFHQStwQixHQUFBL1YsRUFBQSxT
QUFBNlksRUFBQSxTQUdBLFFBQUFOLElBQ0F2WSxFQUNBaFUsRUFDQXltQixHQUVBLEdBQUFyYyxH
QUFBNEosRUFBQTJXLFNBQUF2Z0IsS0FDQTJhLEVBQUEwQixNQUNBcUcsRUFBQS9ILEVBQUErSCxL
QUNBaEMsRUFBQS9GLEVBQUErRixPQUNBdkMsRUFBQXhELEVBQUF3RCxLQUNBd0UsR0FBQUQsR0FB
QSxVQUFBMWlCLEVBQ0F3RSxFQUFBa2UsRUFDQSxTQUNBLFVBQUExaUIsRUFDQTRpQixHQUNBLFFB
RUFqQyxFQUFBLHFCQUNBeEMsS0FDQXdDLEVBQUEsOEJBRUFELElBQ0FDLEVBQUEsTUFBQUEsRUFB
QSxJQUdBLElBQUE4QixHQUFBNUIsR0FBQWpyQixFQUFBK3FCLEVBQ0FnQyxLQUNBRixFQUFBLHFD
QUE4Q0EsR0FHOUNsRCxHQUFBM1YsRUFBQSxZQUFBaFUsRUFBQSxLQUNBK3BCLEdBQUEvVixFQUFB
cEYsRUFBQWllLEVBQUEsVUFDQXRFLEdBQUF1QyxJQUNBZixHQUFBL1YsRUFBQSx5QkFVQSxRQUFB
aVosSUFBQTNlLEdBQ0EsR0FBQU0sRUFFQXZPLEdBQUFpTyxFQUFBMGUsT0FFQXBlLEVBQUFzZSxH
QUFBLGlCQUNBNWUsRUFBQU0sTUFBQS9FLE9BQUF5RSxFQUFBMGUsSUFBQTFlLEVBQUFNLGNBQ0FO
LEdBQUEwZSxLQUVBM3NCLEVBQUFpTyxFQUFBcWUsT0FFQS9kLEVBQUF1ZSxHQUFBLGlCQUNBN2Us
RUFBQU0sTUFBQS9FLE9BQUF5RSxFQUFBcWUsSUFBQXJlLEVBQUFNLGNBQ0FOLEdBQUFxZSxLQU1B
LFFBQUFTLElBQ0F4ZSxFQUNBeUssRUFDQS9HLEVBQ0F4RCxFQUNBQyxHQUVBLEdBQUF1RCxFQUFB
LENBQ0EsR0FBQSthLEdBQUFoVSxFQUNBelMsRUFBQTBtQixFQUNBalUsR0FBQSxTQUFBa1UsR0FJ
QSxRQUhBLElBQUFocUIsVUFBQW5CLE9BQ0FpckIsRUFBQUUsR0FDQUYsRUFBQTdwQixNQUFBLEtB
QUFELGFBRUFpcUIsR0FBQTVlLEVBQUF5SyxFQUFBdkssRUFBQWxJLElBSUEwbUIsR0FBQUcsaUJB
Q0E3ZSxFQUNBeUssRUFDQXFVLElBQ1M1ZSxVQUFBQyxXQUNURCxHQUlBLFFBQUEwZSxJQUNBNWUs
RUFDQXlLLEVBQ0F2SyxFQUNBbEksSUFFQUEsR0FBQTBtQixJQUFBSyxvQkFBQS9lLEVBQUF5SyxF
QUFBdkssR0FHQSxRQUFBOGUsSUFBQW5JLEVBQUF6WSxHQUNBLElBQUE5TSxFQUFBdWxCLEVBQUF0
WSxLQUFBbUIsTUFBQXBPLEVBQUE4TSxFQUFBRyxLQUFBbUIsSUFBQSxDQUdBLEdBQUFBLEdBQUF0
QixFQUFBRyxLQUFBbUIsT0FDQUMsRUFBQWtYLEVBQUF0WSxLQUFBbUIsTUFDQWdmLElBQUF0Z0Is
RUFBQU0sSUFDQTJmLEdBQUEzZSxHQUNBRCxHQUFBQyxFQUFBQyxFQUFBNmUsR0FBQUksR0FBQXhn
QixFQUFBTyxVQVVBLFFBQUFzZ0IsSUFBQXBJLEVBQUF6WSxHQUNBLElBQUE5TSxFQUFBdWxCLEVB
QUF0WSxLQUFBZ1IsWUFBQWplLEVBQUE4TSxFQUFBRyxLQUFBZ1IsVUFBQSxDQUdBLEdBQUF0YixH
QUFBNkwsRUFDQXBCLEVBQUFOLEVBQUFNLElBQ0F3Z0IsRUFBQXJJLEVBQUF0WSxLQUFBZ1IsYUFD
QWxVLEVBQUErQyxFQUFBRyxLQUFBZ1IsWUFFQTlkLEdBQUE0SixFQUFBdkMsVUFDQXVDLEVBQUEr
QyxFQUFBRyxLQUFBZ1IsU0FBQXJhLEtBQTJDbUcsR0FHM0MsS0FBQXBILElBQUFpckIsR0FDQTV0
QixFQUFBK0osRUFBQXBILE1BQ0F5SyxFQUFBekssR0FBQSxHQUdBLEtBQUFBLElBQUFvSCxHQUtB
LEdBSkF5RSxFQUFBekUsRUFBQXBILEdBSUEsZ0JBQUFBLEdBQUEsY0FBQUEsSUFDQW1LLEVBQUFJ
LFdBQTJCSixFQUFBSSxTQUFBaEwsT0FBQSxHQUMzQnNNLElBQUFvZixFQUFBanJCLElBR0EsYUFB
QUEsRUFBQSxDQUdBeUssRUFBQXlnQixPQUFBcmYsQ0FFQSxJQUFBc2YsR0FBQTl0QixFQUFBd08s
R0FBQSxHQUFBak4sT0FBQWlOLEVBQ0F1ZixJQUFBM2dCLEVBQUFOLEVBQUFnaEIsS0FDQTFnQixF
QUFBdE4sTUFBQWd1QixPQUdBMWdCLEdBQUF6SyxHQUFBNkwsR0FRQSxRQUFBdWYsSUFDQTNnQixF
QUNBTixFQUNBa2hCLEdBRUEsT0FBQTVnQixFQUFBNmdCLFlBQ0EsV0FBQW5oQixFQUFBRSxLQUNB
a2hCLEdBQUE5Z0IsRUFBQTRnQixJQUNBRyxHQUFBL2dCLEVBQUE0Z0IsSUFJQSxRQUFBRSxJQUFB
OWdCLEVBQUE0Z0IsR0FHQSxHQUFBSSxJQUFBLENBR0EsS0FBT0EsRUFBQWpMLFNBQUFrTCxnQkFB
QWpoQixFQUErQyxNQUFBekksSUFDdEQsTUFBQXlwQixJQUFBaGhCLEVBQUF0TixRQUFBa3VCLEVB
R0EsUUFBQUcsSUFBQS9nQixFQUFBdkUsR0FDQSxHQUFBL0ksR0FBQXNOLEVBQUF0TixNQUNBeW1C
LEVBQUFuWixFQUFBa2hCLFdBQ0EsT0FBQW51QixHQUFBb21CLE1BQUFxRSxPQUNBcHBCLEVBQUEx
QixLQUFBMEIsRUFBQXFILEdBRUExSSxFQUFBb21CLE1BQUE4QixLQUNBdm9CLEVBQUF1b0IsU0FB
QXhmLEVBQUF3ZixPQUVBdm9CLElBQUErSSxFQXdCQSxRQUFBMGxCLElBQUF0aEIsR0FDQSxHQUFB
dWhCLEdBQUFDLEdBQUF4aEIsRUFBQXVoQixNQUdBLE9BQUF2aEIsR0FBQXloQixZQUNBOXFCLEVB
QUFxSixFQUFBeWhCLFlBQUFGLEdBQ0FBLEVBSUEsUUFBQUMsSUFBQUUsR0FDQSxNQUFBaHJCLE9B
QUFhLFFBQUFtcUIsR0FDQTVxQixFQUFBNHFCLEdBRUEsZ0JBQUFBLEdBQ0FDLEdBQUFELEdBRUFB
LEVBT0EsUUFBQUUsSUFBQS9oQixFQUFBZ2lCLEdBQ0EsR0FDQUMsR0FEQS9xQixJQUdBLElBQUE4
cUIsRUFFQSxJQURBLEdBQUF4TSxHQUFBeFYsRUFDQXdWLEVBQUFKLG1CQUNBSSxJQUFBSixrQkFB
QWpOLE9BQ0FxTixFQUFBclYsT0FBQThoQixFQUFBUixHQUFBak0sRUFBQXJWLFFBQ0FySixFQUFB
SSxFQUFBK3FCLElBS0FBLEVBQUFSLEdBQUF6aEIsRUFBQUcsUUFDQXJKLEVBQUFJLEVBQUErcUIs
RUFJQSxLQURBLEdBQUExTSxHQUFBdlYsRUFDQXVWLElBQUExWCxRQUNBMFgsRUFBQXBWLE9BQUE4
aEIsRUFBQVIsR0FBQWxNLEVBQUFwVixRQUNBckosRUFBQUksRUFBQStxQixFQUdBLE9BQUEvcUIs
R0E4Q0EsUUFBQWdyQixJQUFBekosRUFBQXpZLEdBQ0EsR0FBQUcsR0FBQUgsRUFBQUcsS0FDQTBh
LEVBQUFwQyxFQUFBdFksSUFFQSxNQUFBak4sRUFBQWlOLEVBQUF5aEIsY0FBQTF1QixFQUFBaU4s
RUFBQXVoQixRQUNBeHVCLEVBQUEybkIsRUFBQStHLGNBQUExdUIsRUFBQTJuQixFQUFBNkcsUUFE
QSxDQU1BLEdBQUFoZ0IsR0FBQXhFLEVBQ0E4SixFQUFBaEgsRUFBQU0sSUFDQTZoQixFQUFBdEgs
RUFBQStHLFlBQ0FRLEVBQUF2SCxFQUFBd0gsaUJBQUF4SCxFQUFBNkcsVUFHQVksRUFBQUgsR0FB
QUMsRUFFQVYsRUFBQUMsR0FBQTNoQixFQUFBRyxLQUFBdWhCLFVBS0ExaEIsR0FBQUcsS0FBQWtp
QixnQkFBQWh2QixFQUFBcXVCLEVBQUFobkIsUUFDQTVELEtBQWU0cUIsR0FDZkEsQ0FFQSxJQUFB
YSxHQUFBUixHQUFBL2hCLEdBQUEsRUFFQSxLQUFBOUMsSUFBQW9sQixHQUNBcHZCLEVBQUFxdkIs
RUFBQXJsQixLQUNBc2xCLEdBQUF4YixFQUFBOUosRUFBQSxHQUdBLEtBQUFBLElBQUFxbEIsSUFD
QTdnQixFQUFBNmdCLEVBQUFybEIsTUFDQW9sQixFQUFBcGxCLElBRUFzbEIsR0FBQXhiLEVBQUE5
SixFQUFBLE1BQUF3RSxFQUFBLEdBQUFBLElBZ0JBLFFBQUErZ0IsSUFBQXpiLEVBQUE4VCxHQUVB
LEdBQUFBLFFBQUFTLFFBS0EsR0FBQXZVLEVBQUEwYixVQUNBNUgsRUFBQXBsQixRQUFBLFFBQ0Fv
bEIsRUFBQTVsQixNQUFBLE9BQUE2WCxRQUFBLFNBQUExVixHQUE2QyxNQUFBMlAsR0FBQTBiLFVB
QUFsaEIsSUFBQW5LLEtBRTdDMlAsRUFBQTBiLFVBQUFsaEIsSUFBQXNaLE9BRUcsQ0FDSCxHQUFB
cFosR0FBQSxLQUFBc0YsRUFBQTJiLGFBQUEsaUJBQ0FqaEIsR0FBQWhNLFFBQUEsSUFBQW9sQixF
QUFBLFFBQ0E5VCxFQUFBK1AsYUFBQSxTQUFBclYsRUFBQW9aLEdBQUFTLFNBU0EsUUFBQXFILElB
QUE1YixFQUFBOFQsR0FFQSxHQUFBQSxRQUFBUyxRQUtBLEdBQUF2VSxFQUFBMGIsVUFDQTVILEVB
QUFwbEIsUUFBQSxRQUNBb2xCLEVBQUE1bEIsTUFBQSxPQUFBNlgsUUFBQSxTQUFBMVYsR0FBNkMs
TUFBQTJQLEdBQUEwYixVQUFBcHRCLE9BQUErQixLQUU3QzJQLEVBQUEwYixVQUFBcHRCLE9BQUF3
bEIsR0FFQTlULEVBQUEwYixVQUFBdHRCLFFBQ0E0UixFQUFBd1QsZ0JBQUEsYUFFRyxDQUdILElB
RkEsR0FBQTlZLEdBQUEsS0FBQXNGLEVBQUEyYixhQUFBLGtCQUNBRSxFQUFBLElBQUEvSCxFQUFB
LElBQ0FwWixFQUFBaE0sUUFBQW10QixJQUFBLEdBQ0FuaEIsSUFBQW9oQixRQUFBRCxFQUFBLElB
RUFuaEIsS0FBQTZaLE9BQ0E3WixFQUNBc0YsRUFBQStQLGFBQUEsUUFBQXJWLEdBRUFzRixFQUFB
d1QsZ0JBQUEsVUFPQSxRQUFBdUksSUFBQUMsR0FDQSxHQUFBQSxFQUFBLENBSUEsbUJBQUFBLEdB
QUEsQ0FDQSxHQUFBOXJCLEtBS0EsUUFKQSxJQUFBOHJCLEVBQUFDLEtBQ0Fuc0IsRUFBQUksRUFB
QWdzQixHQUFBRixFQUFBOWxCLE1BQUEsTUFFQXBHLEVBQUFJLEVBQUE4ckIsR0FDQTlyQixFQUNH
LHNCQUFBOHJCLEdBQ0hFLEdBQUFGLE9BREcsSUE4Q0gsUUFBQUcsSUFBQW50QixHQUNBb3RCLEdB
QUEsV0FDQUEsR0FBQXB0QixLQUlBLFFBQUFxdEIsSUFBQXJjLEVBQUE4VCxHQUNBLEdBQUF3SSxH
QUFBdGMsRUFBQWdVLHFCQUFBaFUsRUFBQWdVLHNCQUNBc0ksR0FBQTV0QixRQUFBb2xCLEdBQUEs
SUFDQXdJLEVBQUF0cEIsS0FBQThnQixHQUNBMkgsR0FBQXpiLEVBQUE4VCxJQUlBLFFBQUF5SSxJ
QUFBdmMsRUFBQThULEdBQ0E5VCxFQUFBZ1Usb0JBQ0ExbEIsRUFBQTBSLEVBQUFnVSxtQkFBQUYs
R0FFQThILEdBQUE1YixFQUFBOFQsR0FHQSxRQUFBMEksSUFDQXhjLEVBQ0F5YyxFQUNBQyxHQUVB
LEdBQUEzTCxHQUFBNEwsR0FBQTNjLEVBQUF5YyxHQUNBcm1CLEVBQUEyYSxFQUFBM2EsS0FDQTBI
LEVBQUFpVCxFQUFBalQsUUFDQThlLEVBQUE3TCxFQUFBNkwsU0FDQSxLQUFBeG1CLEVBQWMsTUFB
QXNtQixJQUNkLElBQUE5aEIsR0FBQXhFLElBQUF5bUIsR0FBQUMsR0FBQUMsR0FDQUMsRUFBQSxF
QUNBQyxFQUFBLFdBQ0FqZCxFQUFBMlosb0JBQUEvZSxFQUFBc2lCLEdBQ0FSLEtBRUFRLEVBQUEs
U0FBQXJzQixHQUNBQSxFQUFBaUMsU0FBQWtOLEtBQ0FnZCxHQUFBSixHQUNBSyxJQUlBcGYsWUFB
QSxXQUNBbWYsRUFBQUosR0FDQUssS0FFR25mLEVBQUEsR0FDSGtDLEVBQUF5WixpQkFBQTdlLEVB
QUFzaUIsR0FLQSxRQUFBUCxJQUFBM2MsRUFBQXljLEdBQ0EsR0FRQXJtQixHQVJBK21CLEVBQUE3
TixPQUFBOE4saUJBQUFwZCxHQUNBcWQsRUFBQUYsRUFBQUcsR0FBQSxTQUFBcHZCLE1BQUEsTUFD
QXF2QixFQUFBSixFQUFBRyxHQUFBLFlBQUFwdkIsTUFBQSxNQUNBc3ZCLEVBQUFDLEdBQUFKLEVB
QUFFLEdBQ0FHLEVBQUFQLEVBQUFRLEdBQUEsU0FBQXp2QixNQUFBLE1BQ0EwdkIsRUFBQVQsRUFB
QVEsR0FBQSxZQUFBenZCLE1BQUEsTUFDQTJ2QixFQUFBSixHQUFBQyxFQUFBRSxHQUdBOWYsRUFB
QSxFQUNBOGUsRUFBQSxDQThCQSxPQTVCQUgsS0FBQUksR0FDQVcsRUFBQSxJQUNBcG5CLEVBQUF5
bUIsR0FDQS9lLEVBQUEwZixFQUNBWixFQUFBVyxFQUFBbnZCLFFBRUdxdUIsSUFBQXFCLEdBQ0hE
LEVBQUEsSUFDQXpuQixFQUFBMG5CLEdBQ0FoZ0IsRUFBQStmLEVBQ0FqQixFQUFBZ0IsRUFBQXh2
QixTQUdBMFAsRUFBQTNRLEtBQUE4SCxJQUFBdW9CLEVBQUFLLEdBQ0F6bkIsRUFBQTBILEVBQUEs
RUFDQTBmLEVBQUFLLEVBQ0FoQixHQUNBaUIsR0FDQSxLQUNBbEIsRUFBQXhtQixFQUNBQSxJQUFB
eW1CLEdBQ0FVLEVBQUFudkIsT0FDQXd2QixFQUFBeHZCLE9BQ0EsSUFNQWdJLE9BQ0EwSCxVQUNB
OGUsWUFDQW1CLGFBTkEzbkIsSUFBQXltQixJQUNBbUIsR0FBQWxzQixLQUFBcXJCLEVBQUFHLEdB
QUEsY0FTQSxRQUFBRyxJQUFBUSxFQUFBQyxHQUVBLEtBQUFELEVBQUE3dkIsT0FBQTh2QixFQUFB
OXZCLFFBQ0E2dkIsSUFBQXBvQixPQUFBb29CLEVBR0EsT0FBQTl3QixNQUFBOEgsSUFBQXpGLE1B
QUEsS0FBQTB1QixFQUFBbndCLElBQUEsU0FBQTBZLEVBQUF0WSxHQUNBLE1BQUFnd0IsSUFBQTFY
LEdBQUEwWCxHQUFBRixFQUFBOXZCLE9BSUEsUUFBQWd3QixJQUFBQyxHQUNBLFdBQUFDLE9BQUFE
LEVBQUFoa0IsTUFBQSxPQUtBLFFBQUFra0IsSUFBQXRsQixFQUFBdWxCLEdBQ0EsR0FBQXZlLEdB
QUFoSCxFQUFBTSxHQUdBak4sR0FBQTJULEVBQUF3ZSxZQUNBeGUsRUFBQXdlLFNBQUFDLFdBQUEs
RUFDQXplLEVBQUF3ZSxXQUdBLElBQUFybEIsR0FBQTRpQixHQUFBL2lCLEVBQUFHLEtBQUF1bEIs
V0FDQSxLQUFBeHlCLEVBQUFpTixLQUtBOU0sRUFBQTJULEVBQUEyZSxXQUFBLElBQUEzZSxFQUFB
NGUsU0FBQSxDQTRCQSxJQXhCQSxHQUFBM0MsR0FBQTlpQixFQUFBOGlCLElBQ0E3bEIsRUFBQStD
LEVBQUEvQyxLQUNBeW9CLEVBQUExbEIsRUFBQTBsQixXQUNBQyxFQUFBM2xCLEVBQUEybEIsYUFD
QUMsRUFBQTVsQixFQUFBNGxCLGlCQUNBQyxFQUFBN2xCLEVBQUE2bEIsWUFDQUMsRUFBQTlsQixF
QUFBOGxCLGNBQ0FDLEVBQUEvbEIsRUFBQStsQixrQkFDQUMsRUFBQWhtQixFQUFBZ21CLFlBQ0Fi
LEVBQUFubEIsRUFBQW1sQixNQUNBYyxFQUFBam1CLEVBQUFpbUIsV0FDQUMsRUFBQWxtQixFQUFB
a21CLGVBQ0FDLEVBQUFubUIsRUFBQW1tQixhQUNBQyxFQUFBcG1CLEVBQUFvbUIsT0FDQUMsRUFB
QXJtQixFQUFBcW1CLFlBQ0FDLEVBQUF0bUIsRUFBQXNtQixnQkFDQUMsRUFBQXZtQixFQUFBdW1C
LFNBTUFubUIsRUFBQW9tQixHQUNBQyxFQUFBRCxHQUFBbGYsT0FDQW1mLEtBQUEvb0IsUUFDQStv
QixJQUFBL29CLE9BQ0EwQyxFQUFBcW1CLEVBQUFybUIsT0FHQSxJQUFBc21CLElBQUF0bUIsRUFB
QXFHLGFBQUE1RyxFQUFBOG1CLFlBRUEsS0FBQUQsR0FBQU4sR0FBQSxLQUFBQSxFQUFBLENBSUEs
R0FBQVEsR0FBQUYsR0FBQWIsRUFDQUEsRUFDQUgsRUFDQW1CLEVBQUFILEdBQUFYLEVBQ0FBLEVB
Q0FILEVBQ0FrQixFQUFBSixHQUFBWixFQUNBQSxFQUNBSCxFQUVBb0IsRUFBQUwsRUFDQVAsR0FB
QUgsRUFDQUEsRUFDQWdCLEVBQUFOLEdBQ0Esa0JBQUFOLEtBQ0FqQixFQUNBOEIsRUFBQVAsRUFD
QUwsR0FBQUosRUFDQUEsRUFDQWlCLEVBQUFSLEVBQ0FKLEdBQUFKLEVBQ0FBLEVBRUFpQixFQUFB
NXlCLEVBQ0FqQixFQUFBaXpCLEdBQ0FBLEVBQUFwQixNQUNBb0IsR0FPQWEsR0FBQSxJQUFBdEUs
SUFBQS9JLEdBQ0FzTixFQUFBQyxHQUFBTixHQUVBekQsRUFBQTFjLEVBQUEyZSxTQUFBenRCLEVB
QUEsV0FDQXF2QixJQUNBaEUsR0FBQXZjLEVBQUFpZ0IsR0FDQTFELEdBQUF2YyxFQUFBZ2dCLElB
RUF0RCxFQUFBK0IsV0FDQThCLEdBQ0FoRSxHQUFBdmMsRUFBQStmLEdBRUFNLEtBQUFyZ0IsSUFF
QW9nQixLQUFBcGdCLEdBRUFBLEVBQUEyZSxTQUFBLE1BR0EzbEIsR0FBQUcsS0FBQXVuQixNQUVB
MWxCLEdBQUFoQyxFQUFBRyxLQUFBK0IsT0FBQWxDLEVBQUFHLEtBQUErQixTQUEyRCxvQkFDM0Qs
R0FBQXJFLEdBQUFtSixFQUFBdU8sV0FDQW9TLEVBQUE5cEIsS0FBQStwQixVQUFBL3BCLEVBQUEr
cEIsU0FBQTVuQixFQUFBbkssSUFDQTh4QixJQUNBQSxFQUFBem5CLE1BQUFGLEVBQUFFLEtBQ0F5
bkIsRUFBQXJuQixJQUFBa2xCLFVBRUFtQyxFQUFBcm5CLElBQUFrbEIsV0FFQTJCLEtBQUFuZ0Is
RUFBQTBjLEtBS0F3RCxLQUFBbGdCLEdBQ0F1Z0IsSUFDQWxFLEdBQUFyYyxFQUFBK2YsR0FDQTFE
LEdBQUFyYyxFQUFBZ2dCLEdBQ0E3RCxHQUFBLFdBQ0FFLEdBQUFyYyxFQUFBaWdCLEdBQ0ExRCxH
QUFBdmMsRUFBQStmLEdBQ0FyRCxFQUFBK0IsV0FBQStCLElBQ0FLLEdBQUFQLEdBQ0F6aUIsV0FB
QTZlLEVBQUE0RCxHQUVBOUQsR0FBQXhjLEVBQUE1SixFQUFBc21CLE9BTUExakIsRUFBQUcsS0FB
QXVuQixPQUNBbkMsT0FDQTRCLEtBQUFuZ0IsRUFBQTBjLElBR0E2RCxHQUFBQyxHQUNBOUQsTUFJ
QSxRQUFBb0UsSUFBQTluQixFQUFBK25CLEdBc0VBLFFBQUFDLEtBRUF0RSxFQUFBK0IsWUFJQXps
QixFQUFBRyxLQUFBdW5CLFFBQ0ExZ0IsRUFBQXVPLFdBQUFxUyxXQUFBNWdCLEVBQUF1TyxXQUFB
cVMsY0FBNkQ1bkIsRUFBQSxLQUFBQSxHQUU3RGlvQixLQUFBamhCLEdBQ0F1Z0IsSUFDQWxFLEdB
QUFyYyxFQUFBa2hCLEdBQ0E3RSxHQUFBcmMsRUFBQW1oQixHQUNBaEYsR0FBQSxXQUNBRSxHQUFB
cmMsRUFBQW9oQixHQUNBN0UsR0FBQXZjLEVBQUFraEIsR0FDQXhFLEVBQUErQixXQUFBK0IsSUFD
QUssR0FBQVEsR0FDQXhqQixXQUFBNmUsRUFBQTJFLEdBRUE3RSxHQUFBeGMsRUFBQTVKLEVBQUFz
bUIsT0FLQW9FLEtBQUE5Z0IsRUFBQTBjLEdBQ0E2RCxHQUFBQyxHQUNBOUQsS0FoR0EsR0FBQTFj
LEdBQUFoSCxFQUFBTSxHQUdBak4sR0FBQTJULEVBQUEyZSxZQUNBM2UsRUFBQTJlLFNBQUFGLFdB
QUEsRUFDQXplLEVBQUEyZSxXQUdBLElBQUF4bEIsR0FBQTRpQixHQUFBL2lCLEVBQUFHLEtBQUF1
bEIsV0FDQSxJQUFBeHlCLEVBQUFpTixHQUNBLE1BQUE0bkIsSUFJQSxLQUFBMTBCLEVBQUEyVCxF
QUFBd2UsV0FBQSxJQUFBeGUsRUFBQTRlLFNBQUEsQ0FJQSxHQUFBM0MsR0FBQTlpQixFQUFBOGlC
LElBQ0E3bEIsRUFBQStDLEVBQUEvQyxLQUNBOHFCLEVBQUEvbkIsRUFBQStuQixXQUNBRSxFQUFB
am9CLEVBQUFpb0IsYUFDQUQsRUFBQWhvQixFQUFBZ29CLGlCQUNBRixFQUFBOW5CLEVBQUE4bkIs
WUFDQUgsRUFBQTNuQixFQUFBMm5CLE1BQ0FRLEVBQUFub0IsRUFBQW1vQixXQUNBQyxFQUFBcG9C
LEVBQUFvb0IsZUFDQUMsRUFBQXJvQixFQUFBcW9CLFdBQ0E5QixFQUFBdm1CLEVBQUF1bUIsU0FF
QWEsR0FBQSxJQUFBdEUsSUFBQS9JLEdBQ0FzTixFQUFBQyxHQUFBSyxHQUVBTyxFQUFBM3pCLEVB
Q0FqQixFQUFBaXpCLEdBQ0FBLEVBQUFvQixNQUNBcEIsR0FPQWhELEVBQUExYyxFQUFBd2UsU0FB
QXR0QixFQUFBLFdBQ0E4TyxFQUFBdU8sWUFBQXZPLEVBQUF1TyxXQUFBcVMsV0FDQTVnQixFQUFB
dU8sV0FBQXFTLFNBQUE1bkIsRUFBQW5LLEtBQUEsTUFFQTB4QixJQUNBaEUsR0FBQXZjLEVBQUFv
aEIsR0FDQTdFLEdBQUF2YyxFQUFBbWhCLElBRUF6RSxFQUFBK0IsV0FDQThCLEdBQ0FoRSxHQUFB
dmMsRUFBQWtoQixHQUVBSyxLQUFBdmhCLEtBRUErZ0IsSUFDQU8sS0FBQXRoQixJQUVBQSxFQUFB
d2UsU0FBQSxNQUdBZ0QsR0FDQUEsRUFBQVIsR0FFQUEsS0FvREEsUUFBQUgsSUFBQTd6QixHQUNB
LHNCQUFBQSxLQUFBVyxNQUFBWCxHQVNBLFFBQUF5ekIsSUFBQXp4QixHQUNBLEdBQUE5QyxFQUFB
OEMsR0FDQSxRQUVBLElBQUF5eUIsR0FBQXp5QixFQUFBaUwsR0FDQSxPQUFBNU4sR0FBQW8xQixH
QUVBaEIsR0FDQTV3QixNQUFBYSxRQUFBK3dCLEdBQ0FBLEVBQUEsR0FDQUEsSUFHQXp5QixFQUFB
UyxTQUFBVCxFQUFBWixRQUFBLEVBSUEsUUFBQXN6QixJQUFBaE0sRUFBQTFjLElBQ0EsSUFBQUEs
RUFBQUcsS0FBQXVuQixNQUNBcEMsR0FBQXRsQixHQW1HQSxRQUFBMm9CLElBQUEzaEIsRUFBQTRo
QixFQUFBMXZCLEdBQ0EsR0FBQWxHLEdBQUE0MUIsRUFBQTUxQixNQUNBNjFCLEVBQUE3aEIsRUFB
QThQLFFBQ0EsS0FBQStSLEdBQUFoeUIsTUFBQWEsUUFBQTFFLEdBQUEsQ0FTQSxPQURBMGpCLEdB
QUFvUyxFQUNBM3pCLEVBQUEsRUFBQW1CLEVBQUEwUSxFQUFBaEssUUFBQTVILE9BQXdDRCxFQUFB
bUIsRUFBT25CLElBRS9DLEdBREEyekIsRUFBQTloQixFQUFBaEssUUFBQTdILEdBQ0EwekIsRUFD
QW5TLEVBQUF6ZSxFQUFBakYsRUFBQSsxQixHQUFBRCxLQUFBLEVBQ0FBLEVBQUFwUyxlQUNBb1Ms
RUFBQXBTLGdCQUdBLElBQUFwZixFQUFBeXhCLEdBQUFELEdBQUE5MUIsR0FJQSxZQUhBZ1UsRUFB
QWdpQixnQkFBQTd6QixJQUNBNlIsRUFBQWdpQixjQUFBN3pCLEdBTUEwekIsS0FDQTdoQixFQUFB
Z2lCLGVBQUEsSUFJQSxRQUFBRCxJQUFBRCxHQUNBLGdCQUFBQSxHQUNBQSxFQUFBL0gsT0FDQStI
LEVBQUE5MUIsTUFHQSxRQUFBaTJCLElBQUFweEIsR0FDQUEsRUFBQWlDLE9BQUFxbkIsV0FBQSxF
QUdBLFFBQUErSCxJQUFBcnhCLEdBRUFBLEVBQUFpQyxPQUFBcW5CLFlBQ0F0cEIsRUFBQWlDLE9B
QUFxbkIsV0FBQSxFQUNBZ0ksR0FBQXR4QixFQUFBaUMsT0FBQSxVQUdBLFFBQUFxdkIsSUFBQW5p
QixFQUFBNUosR0FDQSxHQUFBdkYsR0FBQXdlLFNBQUErUyxZQUFBLGFBQ0F2eEIsR0FBQXd4QixV
QUFBanNCLEdBQUEsTUFDQTRKLEVBQUFzaUIsY0FBQXp4QixHQU1BLFFBQUEweEIsSUFBQXZwQixH
QUNBLE9BQUFBLEVBQUFvVixtQkFBQXBWLEVBQUFHLE1BQUFILEVBQUFHLEtBQUF1bEIsV0FFQTFs
QixFQURBdXBCLEdBQUF2cEIsRUFBQW9WLGtCQUFBak4sUUF5RkEsUUFBQXFoQixJQUFBeHBCLEdB
Q0EsR0FBQXlwQixHQUFBenBCLEtBQUFRLGdCQUNBLE9BQUFpcEIsTUFBQS92QixLQUFBc0QsUUFB
QW9KLFNBQ0FvakIsR0FBQXprQixHQUFBMGtCLEVBQUFycEIsV0FFQUosRUFJQSxRQUFBMHBCLElB
QUFwbUIsR0FDQSxHQUFBbkQsTUFDQW5ELEVBQUFzRyxFQUFBOUQsUUFFQSxRQUFBM0osS0FBQW1I
LEdBQUErQixVQUNBb0IsRUFBQXRLLEdBQUF5TixFQUFBek4sRUFJQSxJQUFBc1AsR0FBQW5JLEVB
QUFvSSxnQkFDQSxRQUFBdWtCLEtBQUF4a0IsR0FDQWhGLEVBQUFoRCxHQUFBd3NCLElBQUF4a0Is
RUFBQXdrQixFQUVBLE9BQUF4cEIsR0FHQSxRQUFBeXBCLElBQUFwYyxFQUFBcWMsR0FDQSxvQkFB
QS93QixLQUFBK3dCLEVBQUEzcEIsS0FDQSxNQUFBc04sR0FBQSxjQUNBdlEsTUFBQTRzQixFQUFB
cnBCLGlCQUFBekIsWUFLQSxRQUFBK3FCLElBQUE5cEIsR0FDQSxLQUFBQSxJQUFBbkMsUUFDQSxH
QUFBbUMsRUFBQUcsS0FBQXVsQixXQUNBLFNBS0EsUUFBQXFFLElBQUFqc0IsRUFBQWtzQixHQUNB
LE1BQUFBLEdBQUFuMEIsTUFBQWlJLEVBQUFqSSxLQUFBbTBCLEVBQUE5cEIsTUFBQXBDLEVBQUFv
QyxJQUdBLFFBQUFrWSxJQUFBblYsR0FDQSxNQUFBQSxHQUFBckMsV0FBQXFDLEVBQUF4QyxhQW9R
QSxRQUFBd3BCLElBQUE1eUIsR0FFQUEsRUFBQWlKLElBQUE0cEIsU0FDQTd5QixFQUFBaUosSUFB
QTRwQixVQUdBN3lCLEVBQUFpSixJQUFBcWxCLFVBQ0F0dUIsRUFBQWlKLElBQUFxbEIsV0FJQSxR
QUFBd0UsSUFBQTl5QixHQUNBQSxFQUFBOEksS0FBQWlxQixPQUFBL3lCLEVBQUFpSixJQUFBK3BC
LHdCQUdBLFFBQUFDLElBQUFqekIsR0FDQSxHQUFBa3pCLEdBQUFsekIsRUFBQThJLEtBQUFxcUIs
SUFDQUosRUFBQS95QixFQUFBOEksS0FBQWlxQixPQUNBSyxFQUFBRixFQUFBRyxLQUFBTixFQUFB
TSxLQUNBQyxFQUFBSixFQUFBSyxJQUFBUixFQUFBUSxHQUNBLElBQUFILEdBQUFFLEVBQUEsQ0FD
QXR6QixFQUFBOEksS0FBQTBxQixPQUFBLENBQ0EsSUFBQXpGLEdBQUEvdEIsRUFBQWlKLElBQUFv
aEIsS0FDQTBELEdBQUEwRixVQUFBMUYsRUFBQTJGLGdCQUFBLGFBQUFOLEVBQUEsTUFBQUUsRUFB
QSxNQUNBdkYsRUFBQTRGLG1CQUFBLE1BbUZBLFFBQUFDLElBQ0E1cUIsRUFDQTZxQixHQUVBLEdB
QUFDLEdBQUFELEVBQUFFLEdBQUFGLEdBQUFHLEVBQ0EsSUFBQUYsRUFBQXJ5QixLQUFBdUgsR0FB
QSxDQU1BLElBSEEsR0FFQVYsR0FBQWxLLEVBRkE2MUIsS0FDQUMsRUFBQUosRUFBQUksVUFBQSxF
QUVBNXJCLEVBQUF3ckIsRUFBQUssS0FBQW5yQixJQUFBLENBQ0E1SyxFQUFBa0ssRUFBQWxLLE1B
RUFBLEVBQUE4MUIsR0FDQUQsRUFBQXR4QixLQUFBekYsS0FBQUMsVUFBQTZMLEVBQUFlLE1BQUFt
cUIsRUFBQTkxQixJQUdBLElBQUEwbEIsR0FBQUQsR0FBQXZiLEVBQUEsR0FBQTRiLE9BQ0ErUCxH
QUFBdHhCLEtBQUEsTUFBQW1oQixFQUFBLEtBQ0FvUSxFQUFBOTFCLEVBQUFrSyxFQUFBLEdBQUF2
SyxPQUtBLE1BSEFtMkIsR0FBQWxyQixFQUFBakwsUUFDQWsyQixFQUFBdHhCLEtBQUF6RixLQUFB
QyxVQUFBNkwsRUFBQWUsTUFBQW1xQixLQUVBRCxFQUFBelIsS0FBQSxNQUtBLFFBQUE0UixJQUFB
emtCLEVBQUFoSyxHQUNBLEdBQ0EyWSxJQURBM1ksRUFBQWlnQixLQUNBUSxHQUFBelcsRUFBQSxT
QVlBMk8sS0FDQTNPLEVBQUEyTyxZQUFBcGhCLEtBQUFDLFVBQUFtaEIsR0FFQSxJQUFBK1YsR0FB
QXBPLEdBQUF0VyxFQUFBLFdBQ0Ewa0IsS0FDQTFrQixFQUFBMGtCLGdCQUlBLFFBQUFDLElBQUEz
a0IsR0FDQSxHQUFBN0csR0FBQSxFQU9BLE9BTkE2RyxHQUFBMk8sY0FDQXhWLEdBQUEsZUFBQTZH
LEVBQUEsaUJBRUFBLEVBQUEwa0IsZUFDQXZyQixHQUFBLFNBQUE2RyxFQUFBLGtCQUVBN0csRUFX
QSxRQUFBeXJCLElBQUE1a0IsRUFBQWhLLEdBQ0EsR0FDQTRrQixJQURBNWtCLEVBQUFpZ0IsS0FD
QVEsR0FBQXpXLEVBQUEsU0FDQSxJQUFBNGEsRUFBQSxDQWFBNWEsRUFBQTRhLFlBQUFydEIsS0FB
QUMsVUFBQXN0QixHQUFBRixJQUdBLEdBQUFpSyxHQUFBdk8sR0FBQXRXLEVBQUEsV0FDQTZrQixL
QUNBN2tCLEVBQUE2a0IsZ0JBSUEsUUFBQUMsSUFBQTlrQixHQUNBLEdBQUE3RyxHQUFBLEVBT0Es
T0FOQTZHLEdBQUE0YSxjQUNBemhCLEdBQUEsZUFBQTZHLEVBQUEsaUJBRUFBLEVBQUE2a0IsZUFD
QTFyQixHQUFBLFVBQUE2RyxFQUFBLG1CQUVBN0csRUFnQkEsUUFBQUUsSUFBQTJHLEVBQUEyUixH
QUNBQSxFQUFBM2xCLE9BQ0EycEIsR0FBQTNWLEVBQUEsb0JBQUEyUixFQUFBLFdBTUEsUUFBQW9U
LElBQUEva0IsRUFBQTJSLEdBQ0FBLEVBQUEzbEIsT0FDQTJwQixHQUFBM1YsRUFBQSxrQkFBQTJS
LEVBQUEsV0EwSEEsUUFBQXFULElBQUFoNUIsRUFBQWk1QixHQUNBLEdBQUFDLEdBQUFELEVBQUFF
LEdBQUFDLEVBQ0EsT0FBQXA1QixHQUFBOHZCLFFBQUFvSixFQUFBLFNBQUF2c0IsR0FBNkMsTUFB
QTBzQixJQUFBMXNCLEtBRzdDLFFBQUEyc0IsSUFBQVAsRUFBQS91QixHQThIQSxRQUFBdXZCLEdB
QUF0NEIsR0FDQXdCLEdBQUF4QixFQUNBODNCLElBQUFoTixVQUFBOXFCLEdBdUVBLFFBQUF1NEIs
R0FBQTNWLEVBQUFsZ0IsRUFBQXN0QixHQUNBLEdBQUF1RyxHQUFBaUMsQ0FTQSxJQVJBLE1BQUE5
MUIsSUFBd0JBLEVBQUFsQixHQUN4QixNQUFBd3VCLElBQXNCQSxFQUFBeHVCLEdBRXRCb2hCLElB
Q0E0VixFQUFBNVYsRUFBQXhoQixlQUlBd2hCLEVBQ0EsSUFBQTJULEVBQUFrQyxFQUFBdDNCLE9B
QUEsRUFBa0NvMUIsR0FBQSxHQUNsQ2tDLEVBQUFsQyxHQUFBbUMsZ0JBQUFGLEVBRDRDakMsU0FP
NUNBLEdBQUEsQ0FHQSxJQUFBQSxHQUFBLEdBRUEsT0FBQXIxQixHQUFBdTNCLEVBQUF0M0IsT0FB
QSxFQUFvQ0QsR0FBQXExQixFQUFVcjFCLElBUzlDNkgsRUFBQWluQixLQUNBam5CLEVBQUFpbkIs
SUFBQXlJLEVBQUF2M0IsR0FBQStLLElBQUF2SixFQUFBc3RCLEVBS0F5SSxHQUFBdDNCLE9BQUFv
MUIsRUFDQW9DLEVBQUFwQyxHQUFBa0MsRUFBQWxDLEVBQUEsR0FBQXRxQixRQUNLLE9BQUF1c0Is
RUFDTHp2QixFQUFBckcsT0FDQXFHLEVBQUFyRyxNQUFBa2dCLE1BQUEsRUFBQWxnQixFQUFBc3RC
LEdBRUssTUFBQXdJLElBQ0x6dkIsRUFBQXJHLE9BQ0FxRyxFQUFBckcsTUFBQWtnQixNQUFBLEVB
QUFsZ0IsRUFBQXN0QixHQUVBam5CLEVBQUFpbkIsS0FDQWpuQixFQUFBaW5CLElBQUFwTixFQUFB
bGdCLEVBQUFzdEIsSUFqUEEsSUFOQSxHQUtBOWdCLEdBQUF5cEIsRUFMQUYsS0FDQUcsRUFBQTd2
QixFQUFBNnZCLFdBQ0FDLEVBQUE5dkIsRUFBQSt2QixZQUFBQyxHQUNBQyxFQUFBandCLEVBQUFr
d0Isa0JBQUFGLEdBQ0F2M0IsRUFBQSxFQUVBczJCLEdBQUEsQ0FHQSxHQUZBNW9CLEVBQUE0b0Is
RUFFQWEsR0FBQU8sR0FBQVAsR0FnRkssQ0FDTCxHQUFBUSxHQUFBLEVBQ0FDLEVBQUFULEVBQUF2
M0IsY0FDQWk0QixFQUFBQyxHQUFBRixLQUFBRSxHQUFBRixHQUFBLEdBQUFHLFFBQUEsa0JBQUFI
LEVBQUEsZ0JBQ0FJLEVBQUExQixFQUFBakosUUFBQXdLLEVBQUEsU0FBQUksRUFBQXJ0QixFQUFB
c3RCLEdBYUEsTUFaQVAsR0FBQU8sRUFBQXY0QixPQUNBKzNCLEdBQUFFLElBQUEsYUFBQUEsSUFD
QWh0QixJQUNBeWlCLFFBQUEsMkJBQ0FBLFFBQUEsbUNBRUE4SyxHQUFBUCxFQUFBaHRCLEtBQ0FB
LElBQUFlLE1BQUEsSUFFQXBFLEVBQUE2d0IsT0FDQTd3QixFQUFBNndCLE1BQUF4dEIsR0FFQSxJ
QUVBNUssSUFBQXMyQixFQUFBMzJCLE9BQUFxNEIsRUFBQXI0QixPQUNBMjJCLEVBQUEwQixFQUNB
akIsRUFBQWEsRUFBQTUzQixFQUFBMjNCLEVBQUEzM0IsT0FyR0EsQ0FDQSxHQUFBcTRCLEdBQUEv
QixFQUFBcjJCLFFBQUEsSUFDQSxRQUFBbzRCLEVBQUEsQ0FFQSxHQUFBQyxHQUFBajFCLEtBQUFp
ekIsR0FBQSxDQUNBLEdBQUFpQyxHQUFBakMsRUFBQXIyQixRQUFBLFNBRUEsSUFBQXM0QixHQUFB
LEdBQ0FoeEIsRUFBQWl4QixtQkFDQWp4QixFQUFBK3dCLFFBQUFoQyxFQUFBaE4sVUFBQSxFQUFB
aVAsSUFFQXpCLEVBQUF5QixFQUFBLEVBQ0EsV0FLQSxHQUFBRSxHQUFBcDFCLEtBQUFpekIsR0FB
QSxDQUNBLEdBQUFvQyxHQUFBcEMsRUFBQXIyQixRQUFBLEtBRUEsSUFBQXk0QixHQUFBLEdBQ0E1
QixFQUFBNEIsRUFBQSxFQUNBLFdBS0EsR0FBQUMsR0FBQXJDLEVBQUFwc0IsTUFBQTB1QixHQUNB
LElBQUFELEVBQUEsQ0FDQTdCLEVBQUE2QixFQUFBLEdBQUFoNUIsT0FDQSxVQUlBLEdBQUFrNUIs
R0FBQXZDLEVBQUFwc0IsTUFBQWd1QixHQUNBLElBQUFXLEVBQUEsQ0FDQSxHQUFBQyxHQUFBOTRC
LENBQ0E4MkIsR0FBQStCLEVBQUEsR0FBQWw1QixRQUNBbzNCLEVBQUE4QixFQUFBLEdBQUFDLEVB
QUE5NEIsRUFDQSxVQUlBLEdBQUErNEIsR0E4RUEsV0FDQSxHQUFBNzNCLEdBQUFvMUIsRUFBQXBz
QixNQUFBOHVCLEdBQ0EsSUFBQTkzQixFQUFBLENBQ0EsR0FBQWdKLElBQ0FrWCxRQUFBbGdCLEVB
QUEsR0FDQTRMLFNBQ0E1TCxNQUFBbEIsRUFFQTgyQixHQUFBNTFCLEVBQUEsR0FBQXZCLE9BRUEs
S0FEQSxHQUFBNnVCLEdBQUF5SyxJQUNBekssRUFBQThILEVBQUFwc0IsTUFBQWd2QixPQUFBRCxF
QUFBM0MsRUFBQXBzQixNQUFBaXZCLE1BQ0FyQyxFQUFBbUMsRUFBQSxHQUFBdDVCLFFBQ0F1SyxF
QUFBNEMsTUFBQXZJLEtBQUEwMEIsRUFFQSxJQUFBekssRUFJQSxNQUhBdGtCLEdBQUFrdkIsV0FB
QTVLLEVBQUEsR0FDQXNJLEVBQUF0SSxFQUFBLEdBQUE3dUIsUUFDQXVLLEVBQUFza0IsSUFBQXh1
QixFQUNBa0ssS0EvRkEsSUFBQTZ1QixFQUFBLEVBb0dBLFNBQUE3dUIsR0FDQSxHQUFBa1gsR0FB
QWxYLEVBQUFrWCxRQUNBZ1ksRUFBQWx2QixFQUFBa3ZCLFVBRUFoQyxLQUNBLE1BQUFELEdBQUFr
QyxHQUFBalksSUFDQTJWLEVBQUFJLEdBRUFLLEVBQUFwVyxJQUFBK1YsSUFBQS9WLEdBQ0EyVixF
QUFBM1YsR0FRQSxRQUpBa1ksR0FBQWpDLEVBQUFqVyxNQUFBZ1ksRUFFQXY0QixFQUFBcUosRUFB
QTRDLE1BQUFuTixPQUNBbU4sRUFBQSxHQUFBMUwsT0FBQVAsR0FDQW5CLEVBQUEsRUFBbUJBLEVB
QUFtQixFQUFPbkIsSUFBQSxDQUMxQixHQUFBd2UsR0FBQWhVLEVBQUE0QyxNQUFBcE4sRUFFQTY1
QixNQUFBLElBQUFyYixFQUFBLEdBQUFqZSxRQUFBLFFBQ0EsS0FBQWllLEVBQUEsVUFBNkJBLEdB
QUEsR0FDN0IsS0FBQUEsRUFBQSxVQUE2QkEsR0FBQSxHQUM3QixLQUFBQSxFQUFBLFVBQTZCQSxH
QUFBLEdBRTdCLElBQUEzZ0IsR0FBQTJnQixFQUFBLElBQUFBLEVBQUEsSUFBQUEsRUFBQSxNQUNB
cFIsR0FBQXBOLElBQ0ErSCxLQUFBeVcsRUFBQSxHQUNBM2dCLE1BQUFnNUIsR0FDQWg1QixFQUNB
Z0ssRUFBQWl2Qix1QkFLQThDLElBQ0FyQyxFQUFBMXlCLE1BQWtCa0csSUFBQTJXLEVBQUE4Vixj
QUFBOVYsRUFBQXhoQixjQUFBa04sVUFDbEJxcUIsRUFBQS9WLEdBR0E3WixFQUFBckcsT0FDQXFH
LEVBQUFyRyxNQUFBa2dCLEVBQUF0VSxFQUFBd3NCLEVBQUFwdkIsRUFBQWhKLE1BQUFnSixFQUFB
c2tCLE1BNUlBdUssR0FDQVosR0FBQWhCLEVBQUFiLElBQ0FRLEVBQUEsRUFFQSxXQUlBLEdBQUFs
c0IsT0FBQSxHQUFBNHVCLE1BQUEsR0FBQXRRLE1BQUEsRUFDQSxJQUFBbVAsR0FBQSxHQUVBLElB
REFtQixFQUFBbEQsRUFBQTNxQixNQUFBMHNCLEtBRUFILEdBQUE3MEIsS0FBQW0yQixJQUNBUixH
QUFBMzFCLEtBQUFtMkIsSUFDQWxCLEdBQUFqMUIsS0FBQW0yQixJQUNBZixHQUFBcDFCLEtBQUFt
MkIsS0FHQXRRLEVBQUFzUSxFQUFBdjVCLFFBQUEsUUFDQSxJQUNBbzRCLEdBQUFuUCxFQUNBc1Es
RUFBQWxELEVBQUEzcUIsTUFBQTBzQixFQUVBenRCLEdBQUEwckIsRUFBQWhOLFVBQUEsRUFBQStP
LEdBQ0F2QixFQUFBdUIsR0FHQUEsRUFBQSxJQUNBenRCLEVBQUEwckIsRUFDQUEsRUFBQSxJQUdB
L3VCLEVBQUE2d0IsT0FBQXh0QixHQUNBckQsRUFBQTZ3QixNQUFBeHRCLEdBMEJBLEdBQUEwckIs
SUFBQTVvQixFQUFBLENBQ0FuRyxFQUFBNndCLE9BQUE3d0IsRUFBQTZ3QixNQUFBOUIsRUFJQSxR
QUtBUyxJQTRKQSxRQUFBMEMsSUFDQUMsRUFDQW55QixHQTZCQSxRQUFBb3lCLEdBQUFDLEdBRUFB
LEVBQUFDLE1BQ0FDLEdBQUEsR0FFQUMsR0FBQUgsRUFBQW52QixPQUNBdXZCLEdBQUEsR0FqQ0FD
LEdBQUExeUIsRUFBQWlnQixNQUFBWixHQUVBbVQsR0FBQXh5QixFQUFBMnlCLFVBQUEzQyxHQUNB
NEMsR0FBQTV5QixFQUFBa1UsYUFBQThiLEdBQ0E2QyxHQUFBN3lCLEVBQUE4UyxpQkFBQWtkLEdB
RUE4QyxHQUFBdlQsR0FBQXZmLEVBQUF3ZixRQUFBLGlCQUNBdVQsR0FBQXhULEdBQUF2ZixFQUFB
d2YsUUFBQSxvQkFDQXdULEdBQUF6VCxHQUFBdmYsRUFBQXdmLFFBQUEscUJBRUEwTyxHQUFBbHVC
LEVBQUFrdUIsVUFFQSxJQUVBK0UsR0FDQUMsRUFIQXhELEtBQ0F5RCxHQUFBLElBQUFuekIsRUFB
QW16QixtQkFHQVosR0FBQSxFQUNBRSxHQUFBLENBMk5BLE9Bdk1BbkQsSUFBQTZDLEdBQ0FsUyxL
QUFBeVMsR0FDQTdDLFdBQUE3dkIsRUFBQTZ2QixXQUNBRSxXQUFBL3ZCLEVBQUErdkIsV0FDQUcs
aUJBQUFsd0IsRUFBQWt3QixpQkFDQWpCLHFCQUFBanZCLEVBQUFpdkIscUJBQ0FnQyxrQkFBQWp4
QixFQUFBb3pCLFNBQ0F6NUIsTUFBQSxTQUFBdUosRUFBQXFDLEVBQUF3c0IsR0FHQSxHQUFBcnVC
LEdBQUF3dkIsS0FBQXh2QixJQUFBbXZCLEdBQUEzdkIsRUFJQWdnQixLQUFBLFFBQUF4ZixJQUNB
NkIsRUFBQTh0QixHQUFBOXRCLEdBR0EsSUFBQThzQixJQUNBanlCLEtBQUEsRUFDQThDLE1BQ0Ew
ZCxVQUFBcmIsRUFDQW9iLFNBQUEyUyxHQUFBL3RCLEdBQ0ExRSxPQUFBcXlCLEVBQ0E5dkIsWUFF
QU0sS0FDQTJ1QixFQUFBM3VCLE1BR0E2dkIsR0FBQWxCLEtBQUF2MEIsT0FDQXUwQixFQUFBbUIs
V0FBQSxFQVNBLFFBQUFyN0IsR0FBQSxFQUFxQkEsRUFBQTQ2QixHQUFBMzZCLE9BQTBCRCxJQUMv
QzQ2QixHQUFBNTZCLEdBQUFrNkIsRUFBQXJ5QixFQVlBLElBVEF1eUIsSUFDQWtCLEdBQUFwQixH
QUNBQSxFQUFBQyxNQUNBQyxHQUFBLElBR0FDLEdBQUFILEVBQUFudkIsT0FDQXV2QixHQUFBLEdB
RUFGLEVBQ0FtQixHQUFBckIsT0FDTyxDQUNQc0IsR0FBQXRCLEdBQ0F1QixHQUFBdkIsR0FDQXdC
LEdBQUF4QixHQUNBeUIsR0FBQXpCLEdBSUFBLEVBQUEwQixPQUFBMUIsRUFBQXg1QixNQUFBME0s
RUFBQW5OLE9BRUE0N0IsR0FBQTNCLEdBQ0E0QixHQUFBNUIsR0FDQTZCLEdBQUE3QixFQUNBLFFB
QUE4QixHQUFBLEVBQXlCQSxFQUFBckIsR0FBQTE2QixPQUF5Qis3QixJQUNsRHJCLEdBQUFxQixH
QUFBOUIsRUFBQXJ5QixFQUVBbzBCLElBQUEvQixHQXdDQSxHQW5CQVksRUFHT3ZELEVBQUF0M0Is
UUFFUDY2QixFQUFBb0IsS0FBQWhDLEVBQUFpQyxRQUFBakMsRUFBQWtDLE9BRUFDLEdBQUF2QixH
QUNBOVUsSUFBQWtVLEVBQUFpQyxPQUNBRyxNQUFBcEMsSUFSQVksRUFBQVosRUFrQkFhLElBQUFi
LEVBQUFtQixVQUNBLEdBQUFuQixFQUFBaUMsUUFBQWpDLEVBQUFrQyxLQUNBRyxHQUFBckMsRUFB
QWEsT0FDUyxJQUFBYixFQUFBc0MsVUFBQSxDQUNUekIsRUFBQWEsT0FBQSxDQUNBLElBQUE3ekIs
R0FBQW15QixFQUFBdUMsWUFBQSxhQUF1RDFCLEVBQUFub0IsY0FBQW1vQixFQUFBbm9CLGlCQUE2
RDdLLEdBQUFteUIsTUFFcEhhLEdBQUE5dkIsU0FBQXBHLEtBQUFxMUIsR0FDQUEsRUFBQXh4QixP
QUFBcXlCLENBR0FuQixHQUlBSyxFQUFBQyxJQUhBYSxFQUFBYixFQUNBM0MsRUFBQTF5QixLQUFB
cTFCLEdBS0EsUUFBQXdDLEdBQUEsRUFBdUJBLEVBQUE3QixHQUFBNTZCLE9BQTZCeThCLElBQ3BE
N0IsR0FBQTZCLEdBQUF4QyxFQUFBcnlCLElBSUFpbkIsSUFBQSxXQUVBLEdBQUFvTCxHQUFBM0Ms
SUFBQXQzQixPQUFBLEdBQ0EwOEIsRUFBQXpDLEVBQUFqdkIsU0FBQWl2QixFQUFBanZCLFNBQUFo
TCxPQUFBLEVBQ0EwOEIsSUFBQSxJQUFBQSxFQUFBMTBCLE1BQUEsTUFBQTAwQixFQUFBenhCLE9B
QUFvdkIsR0FDQUosRUFBQWp2QixTQUFBbEcsTUFHQXd5QixFQUFBdDNCLFFBQUEsRUFDQTg2QixF
QUFBeEQsSUFBQXQzQixPQUFBLEdBQ0FnNkIsRUFBQUMsSUFHQXhCLE1BQUEsU0FBQXh0QixHQUNB
LEdBQUE2dkIsS0FnQkFoUSxJQUNBLGFBQUFnUSxFQUFBaHdCLEtBQ0Fnd0IsRUFBQXZTLFNBQUFp
TSxjQUFBdnBCLEdBRkEsQ0FNQSxHQUFBRCxHQUFBOHZCLEVBQUE5dkIsUUFLQSxJQUpBQyxFQUFB
b3ZCLEdBQUFwdkIsRUFBQWtiLE9BQ0F3VyxHQUFBN0IsR0FBQTd2QixFQUFBMnhCLEdBQUEzeEIs
R0FFQTh2QixHQUFBL3ZCLEVBQUFoTCxPQUFBLE9BQ0EsQ0FDQSxHQUFBcW1CLElBQ0E4VCxHQUFB
LE1BQUFsdkIsSUFBQW9iLEVBQUF3UCxHQUFBNXFCLEVBQUE2cUIsS0FDQTlxQixFQUFBcEcsTUFD
QW9ELEtBQUEsRUFDQXFlLGFBQ0FwYixTQUVTLE1BQUFBLEdBQUFELEVBQUFoTCxRQUFBLE1BQUFn
TCxJQUFBaEwsT0FBQSxHQUFBaUwsTUFDVEQsRUFBQXBHLE1BQ0FvRCxLQUFBLEVBQ0FpRCxZQUtB
MHRCLFFBQUEsU0FBQTF0QixHQUNBNnZCLEVBQUE5dkIsU0FBQXBHLE1BQ0FvRCxLQUFBLEVBQ0Fp
RCxPQUNBTyxXQUFBLE9BSUFxdkIsRUFHQSxRQUFBUSxJQUFBenBCLEdBQ0EsTUFBQXlXLEdBQUF6
VyxFQUFBLFdBQ0FBLEVBQUFzb0IsS0FBQSxHQUlBLFFBQUFvQixJQUFBMXBCLEdBQ0EsR0FBQTFR
LEdBQUEwUSxFQUFBNFcsVUFBQXhvQixNQUNBLElBQUFrQixFQUVBLE9BREFpTSxHQUFBeUUsRUFB
QXpFLE1BQUEsR0FBQTFMLE9BQUFQLEdBQ0FuQixFQUFBLEVBQW1CQSxFQUFBbUIsRUFBT25CLElB
QzFCb04sRUFBQXBOLElBQ0ErSCxLQUFBOEosRUFBQTRXLFVBQUF6b0IsR0FBQStILEtBQ0FsSyxN
QUFBdUIsS0FBQUMsVUFBQXdTLEVBQUE0VyxVQUFBem9CLEdBQUFuQyxZQUdHZ1UsR0FBQXNvQixN
QUVIdG9CLEVBQUErcEIsT0FBQSxHQUlBLFFBQUFELElBQUE5cEIsR0FDQSxHQUFBbVUsR0FBQW1D
LEdBQUF0VyxFQUFBLE1BQ0FtVSxLQUlBblUsRUFBQW5SLElBQUFzbEIsR0FJQSxRQUFBNlYsSUFB
QWhxQixHQUNBLEdBQUErUSxHQUFBdUYsR0FBQXRXLEVBQUEsTUFDQStRLEtBQ0EvUSxFQUFBK1Es
TUFDQS9RLEVBQUFpUixTQUFBZ2EsR0FBQWpyQixJQUlBLFFBQUEycEIsSUFBQTNwQixHQUNBLEdB
QUFtVSxFQUNBLElBQUFBLEVBQUFzQyxHQUFBelcsRUFBQSxVQUNBLEdBQUFrckIsR0FBQS9XLEVB
QUF4YixNQUFBd3lCLEdBQ0EsS0FBQUQsRUFJQSxNQUVBbHJCLEdBQUFvckIsSUFBQUYsRUFBQSxH
QUFBM1csTUFDQSxJQUFBOFcsR0FBQUgsRUFBQSxHQUFBM1csT0FDQStXLEVBQUFELEVBQUExeUIs
TUFBQTR5QixHQUNBRCxJQUNBdHJCLEVBQUFxckIsTUFBQUMsRUFBQSxHQUFBL1csT0FDQXZVLEVB
QUF3ckIsVUFBQUYsRUFBQSxHQUFBL1csT0FDQStXLEVBQUEsS0FDQXRyQixFQUFBeXJCLFVBQUFI
LEVBQUEsR0FBQS9XLFNBR0F2VSxFQUFBcXJCLFNBS0EsUUFBQXpCLElBQUE1cEIsR0FDQSxHQUFB
bVUsR0FBQXNDLEdBQUF6VyxFQUFBLE9BQ0EsSUFBQW1VLEVBQ0FuVSxFQUFBcXFCLEdBQUFsVyxF
QUNBcVcsR0FBQXhxQixHQUNBbVUsTUFDQXNXLE1BQUF6cUIsUUFFRyxDQUNILE1BQUF5VyxHQUFB
elcsRUFBQSxZQUNBQSxFQUFBdXFCLE1BQUEsRUFFQSxJQUFBRCxHQUFBN1QsR0FBQXpXLEVBQUEs
WUFDQXNxQixLQUNBdHFCLEVBQUFzcUIsV0FLQSxRQUFBSSxJQUFBMXFCLEVBQUFuSixHQUNBLEdB
QUEyZCxHQUFBa1gsR0FBQTcwQixFQUFBdUMsU0FDQW9iLE1BQUE2VixJQUNBRyxHQUFBaFcsR0FD
QUwsSUFBQW5VLEVBQUFzcUIsT0FDQUcsTUFBQXpxQixJQVVBLFFBQUEwckIsSUFBQXR5QixHQUVB
LElBREEsR0FBQWpMLEdBQUFpTCxFQUFBaEwsT0FDQUQsS0FBQSxDQUNBLE9BQUFpTCxFQUFBakws
R0FBQWlJLEtBQ0EsTUFBQWdELEdBQUFqTCxFQVFBaUwsR0FBQWxHLE9BS0EsUUFBQXMzQixJQUFB
eHFCLEVBQUEyckIsR0FDQTNyQixFQUFBNHJCLGVBQ0E1ckIsRUFBQTRyQixpQkFFQTVyQixFQUFB
NHJCLGFBQUE1NEIsS0FBQTI0QixHQUdBLFFBQUE5QixJQUFBN3BCLEdBRUEsTUFEQXlXLEdBQUF6
VyxFQUFBLFlBRUFBLEVBQUE5TyxNQUFBLEdBSUEsUUFBQSs0QixJQUFBanFCLEdBQ0EsWUFBQUEs
RUFBQTlHLElBQ0E4RyxFQUFBNnJCLFNBQUF2VixHQUFBdFcsRUFBQSxZQVFHLENBQ0gsR0FBQTRx
QixHQUFBdFUsR0FBQXRXLEVBQUEsT0FDQTRxQixLQUNBNXFCLEVBQUE0cUIsV0FBQSxPQUFBQSxF
QUFBLFlBQUFBLEdBRUEsYUFBQTVxQixFQUFBOUcsTUFDQThHLEVBQUEycUIsVUFBQWxVLEdBQUF6
VyxFQUFBLFdBS0EsUUFBQWtxQixJQUFBbHFCLEdBQ0EsR0FBQTRoQixJQUNBQSxFQUFBdEwsR0FB
QXRXLEVBQUEsU0FDQUEsRUFBQXJDLFVBQUFpa0IsR0FFQSxNQUFBbkwsR0FBQXpXLEVBQUEscUJB
Q0FBLEVBQUE4SCxnQkFBQSxHQUlBLFFBQUFzaUIsSUFBQXBxQixHQUNBLEdBQ0E3UixHQUFBbUIs
RUFBQTRHLEVBQUEwYyxFQUFBNW1CLEVBQUF5bUIsRUFBQXFaLEVBREE3OUIsRUFBQStSLEVBQUE0
VyxTQUVBLEtBQUF6b0IsRUFBQSxFQUFBbUIsRUFBQXJCLEVBQUFHLE9BQThCRCxFQUFBbUIsRUFB
T25CLElBR3JDLEdBRkErSCxFQUFBMGMsRUFBQTNrQixFQUFBRSxHQUFBK0gsS0FDQWxLLEVBQUFp
QyxFQUFBRSxHQUFBbkMsTUFDQSsvQixHQUFBajZCLEtBQUFvRSxHQVFBLEdBTkE4SixFQUFBZ3NC
LGFBQUEsRUFFQXZaLEVBQUF3WixHQUFBLzFCLEdBQ0F1YyxJQUNBdmMsSUFBQTRsQixRQUFBb1Es
R0FBQSxLQUVBQyxHQUFBcjZCLEtBQUFvRSxHQUNBQSxJQUFBNGxCLFFBQUFxUSxHQUFBLElBQ0Fu
Z0MsRUFBQWtvQixHQUFBbG9CLEdBQ0E4L0IsR0FBQSxFQUNBclosSUFDQUEsRUFBQXphLE9BQ0E4
ekIsR0FBQSxFQUVBLGVBREE1MUIsRUFBQUMsR0FBQUQsTUFDdUNBLEVBQUEsY0FFdkN1YyxFQUFB
MlosUUFDQWwyQixFQUFBQyxHQUFBRCxJQUVBdWMsRUFBQXJWLE1BQ0EyWSxHQUNBL1YsRUFDQSxV
QUFBN0osR0FBQUQsR0FDQStnQixHQUFBanJCLEVBQUEsWUFJQTgvQixJQUNBOXJCLEVBQUFyQyxX
QUFBaXJCLEdBQUE1b0IsRUFBQTlHLElBQUE4RyxFQUFBMlcsU0FBQXZnQixLQUFBRixHQUVBeWYs
R0FBQTNWLEVBQUE5SixFQUFBbEssR0FFQTRwQixHQUFBNVYsRUFBQTlKLEVBQUFsSyxPQUVPLElB
QUFxZ0MsR0FBQXY2QixLQUFBb0UsR0FDUEEsSUFBQTRsQixRQUFBdVEsR0FBQSxJQUNBdFcsR0FB
QS9WLEVBQUE5SixFQUFBbEssRUFBQXltQixHQUFBLEVBQUFpVyxRQUNPLENBQ1B4eUIsSUFBQTRs
QixRQUFBaVEsR0FBQSxHQUVBLElBQUFPLEdBQUFwMkIsRUFBQXlDLE1BQUE0ekIsSUFDQXpXLEVB
QUF3VyxLQUFBLEVBQ0F4VyxLQUNBNWYsSUFBQWtFLE1BQUEsSUFBQTBiLEVBQUExbkIsT0FBQSxL
QUVBeW5CLEdBQUE3VixFQUFBOUosRUFBQTBjLEVBQUE1bUIsRUFBQThwQixFQUFBckQsT0FLSyxD
QWFMbUQsR0FBQTVWLEVBQUE5SixFQUFBM0ksS0FBQUMsVUFBQXhCLEtBS0EsUUFBQWkvQixJQUFB
anJCLEdBRUEsSUFEQSxHQUFBbkosR0FBQW1KLEVBQ0FuSixHQUFBLENBQ0EsT0FBQXpLLEtBQUF5
SyxFQUFBdTBCLElBQ0EsUUFFQXYwQixZQUVBLFNBR0EsUUFBQW8xQixJQUFBLzFCLEdBQ0EsR0FB
QXlDLEdBQUF6QyxFQUFBeUMsTUFBQXV6QixHQUNBLElBQUF2ekIsRUFBQSxDQUNBLEdBQUEvSSxL
QUVBLE9BREErSSxHQUFBb04sUUFBQSxTQUFBMFAsR0FBZ0M3bEIsRUFBQTZsQixFQUFBcmIsTUFB
QSxTQUNoQ3hLLEdBSUEsUUFBQTA1QixJQUFBL3RCLEdBRUEsT0FEQXhOLE1BQ0FJLEVBQUEsRUFB
QW1CLEVBQUFpTSxFQUFBbk4sT0FBbUNELEVBQUFtQixFQUFPbkIsSUFPMUNKLEVBQUF3TixFQUFB
cE4sR0FBQStILE1BQUFxRixFQUFBcE4sR0FBQW5DLEtBRUEsT0FBQStCLEdBSUEsUUFBQWc5QixJ
QUFBL3FCLEdBQ0EsaUJBQUFBLEVBQUE5RyxLQUFBLFVBQUE4RyxFQUFBOUcsSUFHQSxRQUFBcXdC
LElBQUF2cEIsR0FDQSxNQUNBLFVBQUFBLEVBQUE5RyxLQUNBLFdBQUE4RyxFQUFBOUcsT0FDQThH
LEVBQUEyVyxTQUFBdmdCLE1BQ0Esb0JBQUE0SixFQUFBMlcsU0FBQXZnQixNQVNBLFFBQUFpekIs
SUFBQTl0QixHQUVBLE9BREFyTCxNQUNBL0IsRUFBQSxFQUFpQkEsRUFBQW9OLEVBQUFuTixPQUFr
QkQsSUFBQSxDQUNuQyxHQUFBdTVCLEdBQUFuc0IsRUFBQXBOLEVBQ0FxK0IsSUFBQTE2QixLQUFB
NDFCLEVBQUF4eEIsUUFDQXd4QixFQUFBeHhCLEtBQUF3eEIsRUFBQXh4QixLQUFBNGxCLFFBQUEy
USxHQUFBLElBQ0F2OEIsRUFBQThDLEtBQUEwMEIsSUFHQSxNQUFBeDNCLEdBcUNBLFFBQUF3OEIs
SUFBQXpELEVBQUFqekIsR0FDQWl6QixJQUNBMEQsR0FBQUMsR0FBQTUyQixFQUFBNjJCLFlBQUEs
SUFDQUMsR0FBQTkyQixFQUFBK1MsZUFBQWlkLEdBRUErRyxHQUFBOUQsR0FFQStELEdBQUEvRCxH
QUFBLElBR0EsUUFBQWdFLElBQUFsOEIsR0FDQSxNQUFBbkQsR0FDQSwyREFDQW1ELEVBQUEsSUFB
QUEsRUFBQSxLQUlBLFFBQUFnOEIsSUFBQTl3QixHQUVBLEdBREFBLEVBQUFpeEIsT0FBQXZ6QixH
QUFBc0MsR0FDQSxJQUFBQSxFQUFBN0YsS0FBQSxDQUlBLElBQ0EwMkIsR0FBQTd3QixFQUFBL0Ms
TUFDQSxTQUFBK0MsRUFBQS9DLEtBQ0EsTUFBQStDLEVBQUEwYSxTQUFBLG1CQUVBLE1BRUEsUUFB
QXhvQixHQUFBLEVBQUFtQixFQUFBMk0sRUFBQTdDLFNBQUFoTCxPQUE2Q0QsRUFBQW1CLEVBQU9u
QixJQUFBLENBQ3BELEdBQUEySSxHQUFBbUYsRUFBQTdDLFNBQUFqTCxFQUNBNCtCLElBQUFqMkIs
R0FDQUEsRUFBQW8yQixTQUNBanhCLEVBQUFpeEIsUUFBQSxHQUdBLEdBQUFqeEIsRUFBQTJ2Qixh
QUNBLE9BQUF6QixHQUFBLEVBQUFnRCxFQUFBbHhCLEVBQUEydkIsYUFBQXg5QixPQUF1RCs3QixF
QUFBZ0QsRUFBV2hELElBQUEsQ0FDbEUsR0FBQU0sR0FBQXh1QixFQUFBMnZCLGFBQUF6QixHQUFB
TSxLQUNBc0MsSUFBQXRDLEdBQ0FBLEVBQUF5QyxTQUNBanhCLEVBQUFpeEIsUUFBQSxLQU9BLFFB
QUFGLElBQUEvd0IsRUFBQXFPLEdBQ0EsT0FBQXJPLEVBQUE3RixLQUFBLENBT0EsSUFOQTZGLEVB
QUFpeEIsUUFBQWp4QixFQUFBL0ssUUFDQStLLEVBQUFteEIsWUFBQTlpQixHQUtBck8sRUFBQWl4
QixRQUFBanhCLEVBQUE3QyxTQUFBaEwsU0FDQSxJQUFBNk4sRUFBQTdDLFNBQUFoTCxRQUNBLElB
QUE2TixFQUFBN0MsU0FBQSxHQUFBaEQsTUFHQSxZQURBNkYsRUFBQW94QixZQUFBLEVBS0EsSUFG
QXB4QixFQUFBb3hCLFlBQUEsRUFFQXB4QixFQUFBN0MsU0FDQSxPQUFBakwsR0FBQSxFQUFBbUIs
RUFBQTJNLEVBQUE3QyxTQUFBaEwsT0FBK0NELEVBQUFtQixFQUFPbkIsSUFDdEQ2K0IsR0FBQS93
QixFQUFBN0MsU0FBQWpMLEdBQUFtYyxLQUFBck8sRUFBQW12QixJQUdBLElBQUFudkIsRUFBQTJ2
QixhQUNBLE9BQUF6QixHQUFBLEVBQUFnRCxFQUFBbHhCLEVBQUEydkIsYUFBQXg5QixPQUF1RCs3
QixFQUFBZ0QsRUFBV2hELElBQ2xFNkMsR0FBQS93QixFQUFBMnZCLGFBQUF6QixHQUFBTSxNQUFB
bmdCLElBTUEsUUFBQTNRLElBQUFzQyxHQUNBLFdBQUFBLEVBQUE3RixPQUdBLElBQUE2RixFQUFB
N0YsU0FHQTZGLEVBQUFxc0IsTUFDQXJzQixFQUFBK3ZCLGFBQ0EvdkIsRUFBQW91QixJQUFBcHVC
LEVBQUFtdkIsS0FDQWtDLEdBQUFyeEIsRUFBQS9DLE9BQ0E0ekIsR0FBQTd3QixFQUFBL0MsTUFD
QXEwQixHQUFBdHhCLEtBQ0FuUSxPQUFBaUYsS0FBQWtMLEdBQUFyTCxNQUFBKzdCLE9BSUEsUUFB
QVksSUFBQXR4QixHQUNBLEtBQUFBLEVBQUFwRixRQUFBLENBRUEsR0FEQW9GLElBQUFwRixPQUNB
LGFBQUFvRixFQUFBL0MsSUFDQSxRQUVBLElBQUErQyxFQUFBbXZCLElBQ0EsU0FHQSxTQXVDQSxR
QUFBb0MsSUFDQXRYLEVBQ0F6akIsRUFDQXdqQixHQUVBLEdBQUEvbEIsR0FBQXVDLEVBQUEsYUFB
a0MsTUFDbEMsUUFBQXlELEtBQUFnZ0IsR0FBQSxDQVlBaG1CLEdBQUEsSUFBQWdHLEVBQUEsS0FB
QXUzQixHQUFBdjNCLEVBWEFnZ0IsRUFBQWhnQixJQVdBLElBRUEsTUFBQWhHLEdBQUFrSyxNQUFB
LFVBR0EsUUFBQXF6QixJQUNBdjNCLEVBQ0FtUCxHQUVBLElBQUFBLEVBQ0Esb0JBR0EsSUFBQXhW
LE1BQUFhLFFBQUEyVSxHQUNBLFVBQUFBLEVBQUF0WCxJQUFBLFNBQUFzWCxHQUFtRCxNQUFBb29C
LElBQUF2M0IsRUFBQW1QLEtBQW9Dd04sS0FBQSxRQUd2RixJQUFBNmEsR0FBQUMsR0FBQTc3QixL
QUFBdVQsRUFBQXJaLE9BQ0E0aEMsRUFBQUMsR0FBQS83QixLQUFBdVQsRUFBQXJaLE1BRUEsSUFB
QXFaLEVBQUFvTixVQUlHLENBQ0gsR0FBQW9HLEdBQUEsR0FDQWlWLEVBQUEsR0FDQS84QixJQUNB
LFFBQUFsQyxLQUFBd1csR0FBQW9OLFVBQ0FzYixHQUFBbC9CLElBQ0FpL0IsR0FBQUMsR0FBQWwv
QixHQUVBZ2IsR0FBQWhiLElBQ0FrQyxFQUFBaUMsS0FBQW5FLElBR0FrQyxFQUFBaUMsS0FBQW5F
LEVBR0FrQyxHQUFBM0MsU0FDQXlxQixHQUFBbVYsR0FBQWo5QixJQUdBKzhCLElBQ0FqVixHQUFB
aVYsRUFPQSwyQkFBOEJqVixHQUw5QjZVLEVBQ0Fyb0IsRUFBQXJaLE1BQUEsV0FDQTRoQyxFQUNB
LElBQUF2b0IsRUFBQSxrQkFDQUEsRUFBQXJaLE9BQzhCLElBOUI5QixNQUFBMGhDLElBQUFFLEVB
Q0F2b0IsRUFBQXJaLE1BQ0Esb0JBQTJCcVosRUFBQSxVQWdDM0IsUUFBQTJvQixJQUFBajlCLEdB
Q0EsbUNBQUFBLEVBQUFoRCxJQUFBa2dDLElBQUFwYixLQUFBLHNCQUdBLFFBQUFvYixJQUFBcC9C
LEdBQ0EsR0FBQXEvQixHQUFBQyxTQUFBdC9CLEVBQUEsR0FDQSxJQUFBcS9CLEVBQ0EsMEJBQUFB
LENBRUEsSUFBQTdDLEdBQUF4aEIsR0FBQWhiLEVBQ0EsNEJBQUF0QixLQUFBQyxVQUFBcUIsSUFB
QXc4QixFQUFBLElBQUE5OUIsS0FBQUMsVUFBQTY5QixHQUFBLFFBS0EsUUFBQS93QixJQUFBMEYs
RUFBQTJSLEdBSUEzUixFQUFBb3VCLGNBQUEsU0FBQXZWLEdBQXNDLFlBQUFBLEVBQUEsSUFBQWxI
LEVBQUEsV0FLdEMsUUFBQTBjLElBQUFydUIsRUFBQTJSLEdBQ0EzUixFQUFBc3VCLFNBQUEsU0FB
QXpWLEdBQ0EsWUFBQUEsRUFBQSxLQUFBN1ksRUFBQSxTQUFBMlIsRUFBQSxXQUFBQSxFQUFBYyxX
QUFBZCxFQUFBYyxVQUFBemEsS0FBQSxpQkFBQTJaLEVBQUFjLFdBQUFkLEVBQUFjLFVBQUFyVixL
QUFBLGlCQTRCQSxRQUFBbXhCLElBQ0FDLEVBQ0F4NEIsR0FFQSxHQUFBeTRCLEdBQUEsR0FBQUMs
SUFBQTE0QixFQUVBLFFBQ0FtSyxPQUFBLHNCQUZBcXVCLEVBQUFHLEdBQUFILEVBQUFDLEdBQUEs
YUFFeUIsSUFDekIxbUIsZ0JBQUEwbUIsRUFBQTFtQixpQkFJQSxRQUFBNG1CLElBQUEzdUIsRUFB
QXl1QixHQUNBLEdBQUF6dUIsRUFBQXF0QixhQUFBcnRCLEVBQUE0dUIsZ0JBQ0EsTUFBQUMsSUFB
QTd1QixFQUFBeXVCLEVBQ0csSUFBQXp1QixFQUFBOU8sT0FBQThPLEVBQUE4dUIsY0FDSCxNQUFB
QyxJQUFBL3VCLEVBQUF5dUIsRUFDRyxJQUFBenVCLEVBQUFvckIsTUFBQXByQixFQUFBZ3ZCLGFB
Q0gsTUFBQUMsSUFBQWp2QixFQUFBeXVCLEVBQ0csSUFBQXp1QixFQUFBcXFCLEtBQUFycUIsRUFB
QWt2QixZQUNILE1BQUFDLElBQUFudkIsRUFBQXl1QixFQUNHLGlCQUFBenVCLEVBQUE5RyxLQUFB
OEcsRUFBQTRxQixXQUVBLGFBQUE1cUIsRUFBQTlHLElBQ0gsTUFBQWsyQixJQUFBcHZCLEVBQUF5
dUIsRUFHQSxJQUFBNVYsRUFDQSxJQUFBN1ksRUFBQXJDLFVBQ0FrYixFQUFBd1csR0FBQXJ2QixF
QUFBckMsVUFBQXFDLEVBQUF5dUIsT0FDSyxDQUNMLEdBQUF0MUIsR0FBQTZHLEVBQUErcEIsVUFB
QTM5QixHQUFBa2pDLEdBQUF0dkIsRUFBQXl1QixHQUVBcjFCLEVBQUE0RyxFQUFBOEgsZUFBQSxL
QUFBeW5CLEdBQUF2dkIsRUFBQXl1QixHQUFBLEVBQ0E1VixHQUFBLE9BQUE3WSxFQUFBLFNBQUE3
RyxFQUFBLElBQUFBLEVBQUEsS0FBQUMsRUFBQSxJQUFBQSxFQUFBLFFBR0EsT0FBQWpMLEdBQUEs
RUFBbUJBLEVBQUFzZ0MsRUFBQTNGLFdBQUExNkIsT0FBNkJELElBQ2hEMHFCLEVBQUE0VixFQUFB
M0YsV0FBQTM2QixHQUFBNlIsRUFBQTZZLEVBRUEsT0FBQUEsR0FsQkEsTUFBQTBXLElBQUF2dkIs
RUFBQXl1QixJQUFBLFNBdUJBLFFBQUFJLElBQUE3dUIsRUFBQXl1QixHQUdBLE1BRkF6dUIsR0FB
QTR1QixpQkFBQSxFQUNBSCxFQUFBMW1CLGdCQUFBL1UsS0FBQSxxQkFBMEMyN0IsR0FBQTN1QixF
QUFBeXVCLEdBQUEsS0FDMUMsT0FBQUEsRUFBQTFtQixnQkFBQTNaLE9BQUEsSUFBQTRSLEVBQUFv
dEIsWUFBQSxnQkFJQSxRQUFBMkIsSUFBQS91QixFQUFBeXVCLEdBRUEsR0FEQXp1QixFQUFBOHVC
LGVBQUEsRUFDQTl1QixFQUFBcXFCLEtBQUFycUIsRUFBQWt2QixZQUNBLE1BQUFDLElBQUFudkIs
RUFBQXl1QixFQUNHLElBQUF6dUIsRUFBQW90QixZQUFBLENBR0gsSUFGQSxHQUFBditCLEdBQUEs
R0FDQWdJLEVBQUFtSixFQUFBbkosT0FDQUEsR0FBQSxDQUNBLEdBQUFBLEVBQUF1MEIsSUFBQSxD
QUNBdjhCLEVBQUFnSSxFQUFBaEksR0FDQSxPQUVBZ0ksV0FFQSxNQUFBaEksR0FNQSxNQUFBOC9C
LEdBQUEzdUIsRUFBQXl1QixHQUFBLElBQUFBLEVBQUFlLFVBQUEzZ0MsRUFBQSxJQUFBQSxFQUFB
LFFBRkE4L0IsR0FBQTN1QixFQUFBeXVCLEdBSUEsTUFBQUksSUFBQTd1QixFQUFBeXVCLEdBSUEs
UUFBQVUsSUFDQW52QixFQUNBeXVCLEVBQ0FnQixFQUNBQyxHQUdBLE1BREExdkIsR0FBQWt2Qixh
QUFBLEVBQ0FTLEdBQUEzdkIsRUFBQTRyQixhQUFBeHhCLFFBQUFxMEIsRUFBQWdCLEVBQUFDLEdB
R0EsUUFBQUMsSUFDQUMsRUFDQW5CLEVBQ0FnQixFQUNBQyxHQWNBLFFBQUFHLEdBQUE3dkIsR0FD
QSxNQUFBeXZCLEdBQ0FBLEVBQUF6dkIsRUFBQXl1QixHQUNBenVCLEVBQUE5TyxLQUNBNjlCLEdB
QUEvdUIsRUFBQXl1QixHQUNBRSxHQUFBM3VCLEVBQUF5dUIsR0FqQkEsSUFBQW1CLEVBQUF4aEMs
T0FDQSxNQUFBc2hDLElBQUEsTUFHQSxJQUFBL0QsR0FBQWlFLEVBQUFFLE9BQ0EsT0FBQW5FLEdB
QUF4WCxJQUNBLElBQUF3WCxFQUFBLFNBQUFrRSxFQUFBbEUsRUFBQWxCLE9BQUEsSUFBQWtGLEdB
QUFDLEVBQUFuQixFQUFBZ0IsRUFBQUMsR0FFQSxHQUFBRyxFQUFBbEUsRUFBQWxCLE9BYUEsUUFB
QXdFLElBQ0FqdkIsRUFDQXl1QixFQUNBZ0IsRUFDQU0sR0FFQSxHQUFBNWIsR0FBQW5VLEVBQUFv
ckIsSUFDQUMsRUFBQXJyQixFQUFBcXJCLE1BQ0FHLEVBQUF4ckIsRUFBQXdyQixVQUFBLElBQUF4
ckIsRUFBQSxhQUNBeXJCLEVBQUF6ckIsRUFBQXlyQixVQUFBLElBQUF6ckIsRUFBQSxZQWlCQSxP
QURBQSxHQUFBZ3ZCLGNBQUEsR0FDQWUsR0FBQSxXQUFBNWIsRUFBQSxjQUNBa1gsRUFBQUcsRUFB
QUMsRUFBQSxhQUNBZ0UsR0FBQWQsSUFBQTN1QixFQUFBeXVCLEdBQ0EsS0FHQSxRQUFBYSxJQUFB
dHZCLEVBQUF5dUIsR0FDQSxHQUFBdDFCLEdBQUEsSUFJQTFDLEVBQUF1NUIsR0FBQWh3QixFQUFB
eXVCLEVBQ0FoNEIsS0FBYTBDLEdBQUExQyxFQUFBLEtBR2J1SixFQUFBblIsTUFDQXNLLEdBQUEs
T0FBQTZHLEVBQUEsU0FHQUEsRUFBQStRLE1BQ0E1WCxHQUFBLE9BQUE2RyxFQUFBLFNBRUFBLEVB
QUFpUixXQUNBOVgsR0FBQSxrQkFHQTZHLEVBQUFzb0IsTUFDQW52QixHQUFBLGFBR0E2RyxFQUFB
ckMsWUFDQXhFLEdBQUEsUUFBQTZHLEVBQUEsU0FHQSxRQUFBN1IsR0FBQSxFQUFpQkEsRUFBQXNn
QyxFQUFBd0IsV0FBQTdoQyxPQUE2QkQsSUFDOUNnTCxHQUFBczFCLEVBQUF3QixXQUFBOWhDLEdB
QUE2UixFQThCQSxJQTNCQUEsRUFBQXpFLFFBQ0FwQyxHQUFBLFVBQW9CKzJCLEdBQUFsd0IsRUFB
QXpFLE9BQUEsTUFHcEJ5RSxFQUFBL0osUUFDQWtELEdBQUEsYUFBdUIrMkIsR0FBQWx3QixFQUFB
L0osT0FBQSxNQUd2QitKLEVBQUFrVyxTQUNBL2MsR0FBQXEwQixHQUFBeHRCLEVBQUFrVyxRQUFB
LEVBQUF1WSxFQUFBeFksTUFBQSxLQUVBalcsRUFBQW9XLGVBQ0FqZCxHQUFBcTBCLEdBQUF4dEIs
RUFBQW9XLGNBQUEsRUFBQXFZLEVBQUF4WSxNQUFBLEtBR0FqVyxFQUFBNHFCLGFBQ0F6eEIsR0FB
QSxRQUFBNkcsRUFBQSxnQkFHQUEsRUFBQWUsY0FDQTVILEdBQUFnM0IsR0FBQW53QixFQUFBZSxZ
QUFBMHRCLEdBQUEsS0FHQXp1QixFQUFBaUgsUUFDQTlOLEdBQUEsZ0JBQW9CNkcsRUFBQWlILE1B
QUEsbUJBQUFqSCxFQUFBaUgsTUFBQSx3QkFBQWpILEVBQUFpSCxNQUFBLGlCQUdwQmpILEVBQUE4
SCxlQUFBLENBQ0EsR0FBQUEsR0FBQXNvQixHQUFBcHdCLEVBQUF5dUIsRUFDQTNtQixLQUNBM08s
R0FBQTJPLEVBQUEsS0FZQSxNQVRBM08sS0FBQTJpQixRQUFBLGFBRUE5YixFQUFBc3VCLFdBQ0Fu
MUIsRUFBQTZHLEVBQUFzdUIsU0FBQW4xQixJQUdBNkcsRUFBQW91QixnQkFDQWoxQixFQUFBNkcs
RUFBQW91QixjQUFBajFCLElBRUFBLEVBR0EsUUFBQTYyQixJQUFBaHdCLEVBQUF5dUIsR0FDQSxH
QUFBaDRCLEdBQUF1SixFQUFBdEosVUFDQSxJQUFBRCxFQUFBLENBQ0EsR0FFQXRJLEdBQUFtQixF
QUFBcWlCLEVBQUEwZSxFQUZBbmdDLEVBQUEsZUFDQW9nQyxHQUFBLENBRUEsS0FBQW5pQyxFQUFB
LEVBQUFtQixFQUFBbUgsRUFBQXJJLE9BQThCRCxFQUFBbUIsRUFBT25CLElBQUEsQ0FDckN3akIs
RUFBQWxiLEVBQUF0SSxHQUNBa2lDLEdBQUEsQ0FDQSxJQUFBRSxHQUFBOUIsRUFBQS8zQixXQUFB
aWIsRUFBQXpiLEtBQ0FxNkIsS0FHQUYsSUFBQUUsRUFBQXZ3QixFQUFBMlIsRUFBQThjLEVBQUF4
WSxPQUVBb2EsSUFDQUMsR0FBQSxFQUNBcGdDLEdBQUEsVUFBZXloQixFQUFBLG1CQUFBQSxFQUFB
LGFBQUFBLEVBQUEzbEIsTUFBQSxXQUFBMmxCLEVBQUEsc0JBQUFwa0IsS0FBQUMsVUFBQW1rQixF
QUFBM2xCLE9BQUEsS0FBQTJsQixFQUFBbUUsSUFBQSxTQUFBbkUsRUFBQSxhQUFBQSxFQUFBYyxV
QUFBLGNBQUFsbEIsS0FBQUMsVUFBQW1rQixFQUFBYyxXQUFBLFVBR2YsTUFBQTZkLEdBQ0FwZ0Ms
RUFBQWtLLE1BQUEsY0FEQSxJQUtBLFFBQUFnMkIsSUFBQXB3QixFQUFBeXVCLEdBQ0EsR0FBQUQs
R0FBQXh1QixFQUFBNUcsU0FBQSxFQU1BLFFBQUFvMUIsRUFBQXA0QixLQUFBLENBQ0EsR0FBQW82
QixHQUFBakMsR0FBQUMsRUFBQUMsRUFBQXo0QixRQUNBLDRDQUErQ3c2QixFQUFBLDZCQUFpQ0Es
RUFBQXpvQixnQkFBQWhhLElBQUEsU0FBQThxQixHQUE0RSxvQkFBcUJBLEVBQUEsTUFBa0JoRyxL
QUFBLFdBSW5NLFFBQUFzZCxJQUNBdHhCLEVBQ0E0dkIsR0FFQSx5QkFBQTNpQyxPQUFBaUYsS0FB
QThOLEdBQUE5USxJQUFBLFNBQUFjLEdBQ0EsTUFBQTRoQyxJQUFBNWhDLEVBQUFnUSxFQUFBaFEs
R0FBQTQvQixLQUNLNWIsS0FBQSxVQUdMLFFBQUE0ZCxJQUNBNWhDLEVBQ0FtUixFQUNBeXVCLEdB
RUEsTUFBQXp1QixHQUFBb3JCLE1BQUFwckIsRUFBQWd2QixhQUNBMEIsR0FBQTdoQyxFQUFBbVIs
RUFBQXl1QixHQUVBLFFBQVc1L0IsRUFBQSxnQkFBQXBCLE9BQUF1UyxFQUFBMlcsU0FBQWdhLE9B
QUEsYUFDWCxhQUFBM3dCLEVBQUE5RyxJQUNBcTJCLEdBQUF2dkIsRUFBQXl1QixJQUFBLFNBQ0FF
LEdBQUEzdUIsRUFBQXl1QixJQUFBLEtBR0EsUUFBQWlDLElBQ0E3aEMsRUFDQW1SLEVBQ0F5dUIs
R0FFQSxHQUFBdGEsR0FBQW5VLEVBQUFvckIsSUFDQUMsRUFBQXJyQixFQUFBcXJCLE1BQ0FHLEVB
QUF4ckIsRUFBQXdyQixVQUFBLElBQUF4ckIsRUFBQSxhQUNBeXJCLEVBQUF6ckIsRUFBQXlyQixV
QUFBLElBQUF6ckIsRUFBQSxZQUVBLE9BREFBLEdBQUFndkIsY0FBQSxFQUNBLE9BQUE3YSxFQUFB
LGNBQ0FrWCxFQUFBRyxFQUFBQyxFQUFBLFlBQ0FnRixHQUFBNWhDLEVBQUFtUixFQUFBeXVCLEdB
Q0EsS0FHQSxRQUFBYyxJQUNBdnZCLEVBQ0F5dUIsRUFDQW1DLEVBQ0FDLEVBQ0FDLEdBRUEsR0FB
QTEzQixHQUFBNEcsRUFBQTVHLFFBQ0EsSUFBQUEsRUFBQWhMLE9BQUEsQ0FDQSxHQUFBMmlDLEdB
QUEzM0IsRUFBQSxFQUVBLFFBQUFBLEVBQUFoTCxRQUNBMmlDLEVBQUEzRixLQUNBLGFBQUEyRixF
QUFBNzNCLEtBQ0EsU0FBQTYzQixFQUFBNzNCLElBRUEsT0FBQTIzQixHQUFBbEMsSUFBQW9DLEVB
QUF0QyxFQUVBLElBQUFqbUIsR0FBQW9vQixFQUNBSSxHQUFBNTNCLEVBQUFxMUIsRUFBQXdDLGdC
QUNBLEVBQ0FWLEVBQUFPLEdBQUFJLEVBQ0EsV0FBQTkzQixFQUFBckwsSUFBQSxTQUFBc0MsR0FB
OEMsTUFBQWtnQyxHQUFBbGdDLEVBQUFvK0IsS0FBd0I1YixLQUFBLFVBQUFySyxFQUFBLElBQUFB
LEVBQUEsS0FRdEUsUUFBQXdvQixJQUNBNTNCLEVBQ0E2M0IsR0FHQSxPQURBL2dDLEdBQUEsRUFD
QS9CLEVBQUEsRUFBaUJBLEVBQUFpTCxFQUFBaEwsT0FBcUJELElBQUEsQ0FDdEMsR0FBQTZSLEdB
QUE1RyxFQUFBakwsRUFDQSxRQUFBNlIsRUFBQTVKLEtBQUEsQ0FHQSxHQUFBKzZCLEdBQUFueEIs
SUFDQUEsRUFBQTRyQixjQUFBNXJCLEVBQUE0ckIsYUFBQXdGLEtBQUEsU0FBQS9nQyxHQUErRCxN
QUFBOGdDLElBQUE5Z0MsRUFBQW82QixTQUFzQyxDQUNyR3Y2QixFQUFBLENBQ0EsUUFFQStnQyxF
QUFBanhCLElBQ0FBLEVBQUE0ckIsY0FBQTVyQixFQUFBNHJCLGFBQUF3RixLQUFBLFNBQUEvZ0Ms
R0FBK0QsTUFBQTRnQyxHQUFBNWdDLEVBQUFvNkIsWUFDL0R2NkIsRUFBQSxJQUdBLE1BQUFBLEdB
R0EsUUFBQWloQyxJQUFBbnhCLEdBQ0EsV0FBQTVULEtBQUE0VCxFQUFBb3JCLEtBQUEsYUFBQXBy
QixFQUFBOUcsS0FBQSxTQUFBOEcsRUFBQTlHLElBR0EsUUFBQWc0QixJQUFBajFCLEVBQUF3eUIs
R0FDQSxXQUFBeHlCLEVBQUE3RixLQUNBdTRCLEdBQUExeUIsRUFBQXd5QixHQUNHLElBQUF4eUIs
RUFBQTdGLE1BQUE2RixFQUFBckMsVUFDSHkzQixHQUFBcDFCLEdBRUFxMUIsR0FBQXIxQixHQUlB
LFFBQUFxMUIsSUFBQWo0QixHQUNBLGlCQUFBQSxFQUFBakQsS0FDQWlELEVBQUFvYixXQUNBOGMs
R0FBQWhrQyxLQUFBQyxVQUFBNkwsVUFBQSxJQUdBLFFBQUFnNEIsSUFBQXRLLEdBQ0EsWUFBQXg1
QixLQUFBQyxVQUFBdTVCLEVBQUExdEIsTUFBQSxJQUdBLFFBQUErMUIsSUFBQXB2QixFQUFBeXVC
LEdBQ0EsR0FBQTVDLEdBQUE3ckIsRUFBQTZyQixVQUFBLFlBQ0F6eUIsRUFBQW0yQixHQUFBdnZC
LEVBQUF5dUIsR0FDQXYrQixFQUFBLE1BQUEyN0IsR0FBQXp5QixFQUFBLElBQUFBLEVBQUEsSUFD
QW1DLEVBQUF5RSxFQUFBekUsT0FBQSxJQUE2QnlFLEVBQUF6RSxNQUFBeE4sSUFBQSxTQUFBc0Is
R0FBZ0MsTUFBQThHLElBQUE5RyxFQUFBNkcsTUFBQSxJQUFBN0csRUFBQSxRQUFpRHdqQixLQUFB
LFNBQzlHMmUsRUFBQXh4QixFQUFBMlcsU0FBQSxTQVVBLFFBVEFwYixJQUFBaTJCLEdBQUFwNEIs
SUFDQWxKLEdBQUEsU0FFQXFMLElBQ0FyTCxHQUFBLElBQUFxTCxHQUVBaTJCLElBQ0F0aEMsSUFB
QXFMLEVBQUEsZ0JBQUFpMkIsR0FFQXRoQyxFQUFBLElBSUEsUUFBQW0vQixJQUNBb0MsRUFDQXp4
QixFQUNBeXVCLEdBRUEsR0FBQXIxQixHQUFBNEcsRUFBQThILGVBQUEsS0FBQXluQixHQUFBdnZC
LEVBQUF5dUIsR0FBQSxFQUNBLGFBQUFnRCxFQUFBLElBQUFuQyxHQUFBdHZCLEVBQUF5dUIsSUFB
QXIxQixFQUFBLElBQUFBLEVBQUEsUUFHQSxRQUFBODJCLElBQUFqNkIsR0FFQSxPQURBL0YsR0FB
QSxHQUNBL0IsRUFBQSxFQUFpQkEsRUFBQThILEVBQUE3SCxPQUFrQkQsSUFBQSxDQUNuQyxHQUFB
NkosR0FBQS9CLEVBQUE5SCxFQUNBK0IsSUFBQSxJQUFBOEgsRUFBQSxVQUFBdTVCLEdBQUF2NUIs
RUFBQWhNLE9BQUEsSUFFQSxNQUFBa0UsR0FBQWtLLE1BQUEsTUFJQSxRQUFBbTNCLElBQUFsNEIs
R0FDQSxNQUFBQSxHQUNBeWlCLFFBQUEscUJBQ0FBLFFBQUEscUJBc0dBLFFBQUE0VixJQUFBN1ks
RUFBQThZLEdBQ0EsSUFDQSxVQUFBQyxVQUFBL1ksR0FDRyxNQUFBNW1CLEdBRUgsTUFEQTAvQixH
QUFBMytCLE1BQWlCZixNQUFBNG1CLFNBQ2pCMW9CLEdBSUEsUUFBQTBoQyxJQUFBQyxHQUNBLEdB
QUE3aUMsR0FBQW5ELE9BQUFrQyxPQUFBLEtBRUEsaUJBQ0FtNkIsRUFDQW55QixFQUNBOUQsR0FF
QThELE9BcUJBLElBQUFuSCxHQUFBbUgsRUFBQWt1QixXQUNBejJCLE9BQUF1SSxFQUFBa3VCLFlB
QUFpRSxFQUNBQSxDQUNBLElBQUFsNUIsRUFBQUosR0FDQSxNQUFBSSxHQUFBSixFQUlBLElBQUFr
akMsR0FBQUQsRUFBQTNKLEVBQUFueUIsR0FpQkE5RixLQUNBOGhDLElBeUJBLE9BeEJBOWhDLEdB
QUFpUSxPQUFBdXhCLEdBQUFLLEVBQUE1eEIsT0FBQTZ4QixHQUNBOWhDLEVBQUE2WCxnQkFBQWdx
QixFQUFBaHFCLGdCQUFBaGEsSUFBQSxTQUFBOHFCLEdBQ0EsTUFBQTZZLElBQUE3WSxFQUFBbVos
S0FzQkEvaUMsRUFBQUosR0FBQXFCLEdBK0pBLFFBQUEraEMsSUFBQWp5QixHQUNBLEdBQUFBLEVB
QUFreUIsVUFDQSxNQUFBbHlCLEdBQUFreUIsU0FFQSxJQUFBQyxHQUFBOWlCLFNBQUEzSSxjQUFB
LE1BRUEsT0FEQXlyQixHQUFBMWhCLFlBQUF6USxFQUFBb3lCLFdBQUEsSUFDQUQsRUFBQUUsVUFq
elRBLEdBQUF6bEMsSUFBQWQsT0FBQStQLFVBQUF2TyxTQStEQWdnQyxHQUFBMS9CLEVBQUEscUJB
S0FxYyxHQUFBcmMsRUFBQSxtQkFpQkFrQixHQUFBaEQsT0FBQStQLFVBQUEvTSxlQW1CQXdqQyxH
QUFBLFNBQ0FuOEIsR0FBQXBILEVBQUEsU0FBQWxCLEdBQ0EsTUFBQUEsR0FBQWl1QixRQUFBd1cs
R0FBQSxTQUFBNWMsRUFBQXJsQixHQUFrRCxNQUFBQSxLQUFBa2lDLGNBQUEsT0FNbEQzNkIsR0FB
QTdJLEVBQUEsU0FBQWxCLEdBQ0EsTUFBQUEsR0FBQXFuQixPQUFBLEdBQUFxZCxjQUFBMWtDLEVB
QUF1TSxNQUFBLEtBTUFvNEIsR0FBQSxpQkFDQXA2QixHQUFBckosRUFBQSxTQUFBbEIsR0FDQSxN
QUFBQSxHQUNBaXVCLFFBQUEwVyxHQUFBLFNBQ0ExVyxRQUFBMFcsR0FBQSxTQUNBbmtDLGdCQWtF
QTIzQixHQUFBLFNBQUEzMkIsRUFBQWUsRUFBQUMsR0FBNkIsVUFLN0JvWixHQUFBLFNBQUFpTSxH
QUE2QixNQUFBQSxJQW9FN0IrYyxHQUFBLHVCQUVBamxCLElBQ0EsWUFDQSxZQUNBLFVBR0FrbEIs
SUFDQSxlQUNBLFVBQ0EsY0FDQSxVQUNBLGVBQ0EsVUFDQSxnQkFDQSxZQUNBLFlBQ0EsZUFLQXRn
QyxJQUlBdWdDLHNCQUFBN21DLE9BQUFrQyxPQUFBLE1BS0E0a0MsUUFBQSxFQUtBQyxlQUFBLEVB
S0EvdkIsVUFBQSxFQUtBZ3dCLGFBQUEsRUFLQXpnQyxhQUFBLEtBS0EwZ0MsWUFBQSxLQUtBQyxt
QkFLQW5wQixTQUFBL2QsT0FBQWtDLE9BQUEsTUFNQSthLGNBQUFpZCxHQU1BaU4sZUFBQWpOLEdB
TUE3VyxpQkFBQTZXLEdBS0FsZCxnQkFBQTNZLEVBS0E2WSxxQkFBQVMsR0FNQVMsWUFBQThiLEdB
S0FrTixnQkFBQVIsSUFLQXp4QixHQUFBblYsT0FBQXFuQyxXQXlCQXRoQyxHQUFBLFVBaUJBb2tC
LEdBQUE5bEIsRUFtSEFpakMsR0FBQSxnQkFHQTlnQyxHQUFBLG1CQUFBZ2QsUUFDQStqQixHQUFB
L2dDLElBQUFnZCxPQUFBZ2tCLFVBQUFDLFVBQUFsbEMsY0FDQTZxQixHQUFBbWEsSUFBQSxlQUFB
dmhDLEtBQUF1aEMsSUFDQW5nQixHQUFBbWdCLE9BQUEza0MsUUFBQSxjQUNBOGtDLEdBQUFILE9B
QUEza0MsUUFBQSxXQUNBK2tDLEdBQUFKLE9BQUEza0MsUUFBQSxhQUNBZ2xDLEdBQUFMLElBQUEs
dUJBQUF2aEMsS0FBQXVoQyxJQUNBbGEsR0FBQWthLElBQUEsY0FBQXZoQyxLQUFBdWhDLE1BQUFH
LEdBR0FodkIsTUFBcUJELE1BRXJCbVYsSUFBQSxDQUNBLElBQUFwbkIsR0FDQSxJQUNBLEdBQUF5
UixNQUNBalksUUFBQUMsZUFBQWdZLEdBQUEsV0FDQXRQLElBQUEsV0FFQWlsQixJQUFBLEtBR0Fw
SyxPQUFBbUssaUJBQUEsb0JBQUExVixJQUNHLE1BQUFsVCxJQUtILEdBQUE4aUMsSUFpSEFDLEdB
aEhBOS9CLEdBQUEsV0FXQSxXQVZBMUgsS0FBQXVuQyxLQU9BQSxJQUxBcmhDLFFBQUEsS0FBQXJH
LEdBR0EsV0FBQUEsRUFBQSxRQUFBNG5DLElBQUFDLFNBS0FILElBSUE3d0IsR0FBQXhRLElBQUFn
ZCxPQUFBeWtCLDZCQU9BL3RCLEdBQ0EsbUJBQUFndUIsU0FBQXZoQyxFQUFBdWhDLFNBQ0EsbUJB
QUEvdEIsVUFBQXhULEVBQUF3VCxRQUFBQyxTQUtBaEQsR0FBQSxXQUtBLFFBQUErd0IsS0FDQUMs
R0FBQSxDQUNBLElBQUFDLEdBQUFDLEVBQUFoNkIsTUFBQSxFQUNBZzZCLEdBQUFobUMsT0FBQSxD
QUNBLFFBQUFELEdBQUEsRUFBbUJBLEVBQUFnbUMsRUFBQS9sQyxPQUFtQkQsSUFDdENnbUMsRUFB
QWhtQyxLQVRBLEdBRUFrbUMsR0FGQUQsS0FDQUYsR0FBQSxDQW1CQSx1QkFBQUksVUFBQTdoQyxF
QUFBNmhDLFNBQUEsQ0FDQSxHQUFBcmYsR0FBQXFmLFFBQUEvMkIsVUFDQWczQixFQUFBLFNBQUF0
aUMsR0FBbUNNLFFBQUFDLE1BQUFQLEdBQ25Db2lDLEdBQUEsV0FDQXBmLEVBQUF2WCxLQUFBdTJC
LEdBQUFPLE1BQUFELEdBTUFiLElBQWtCNzFCLFdBQUExTixRQUVmLHVCQUFBc2tDLG9CQUNIaGlD
LEVBQUFnaUMsbUJBRUEseUNBQUFBLGlCQUFBbm5DLFdBaUJBK21DLEVBQUEsV0FDQXgyQixXQUFB
bzJCLEVBQUEsUUFqQkEsQ0FHQSxHQUFBUyxHQUFBLEVBQ0FDLEVBQUEsR0FBQUYsa0JBQUFSLEdB
Q0FXLEVBQUF2bEIsU0FBQWMsZUFBQTFpQixPQUFBaW5DLEdBQ0FDLEdBQUFwaEMsUUFBQXFoQyxH
QUNBQyxlQUFBLElBRUFSLEVBQUEsV0FDQUssS0FBQSxLQUNBRSxFQUFBejdCLEtBQUExTCxPQUFB
aW5DLElBVUEsZ0JBQUFoWSxFQUFBdnRCLEdBQ0EsR0FBQTJsQyxFQWdCQSxJQWZBVixFQUFBcGhD
LEtBQUEsV0FDQSxHQUFBMHBCLEVBQ0EsSUFDQUEsRUFBQTd2QixLQUFBc0MsR0FDUyxNQUFBMEIs
R0FDVG1CLEVBQUFuQixFQUFBMUIsRUFBQSxnQkFFTzJsQyxJQUNQQSxFQUFBM2xDLEtBR0Era0Ms
SUFDQUEsR0FBQSxFQUNBRyxNQUVBM1gsR0FBQSxtQkFBQTRYLFNBQ0EsVUFBQUEsU0FBQSxTQUFB
LzJCLEVBQUFDLEdBQ0FzM0IsRUFBQXYzQixPQVVBcTJCLElBRkEsbUJBQUFtQixNQUFBdGlDLEVB
QUFzaUMsS0FFQUEsSUFHQSxXQUNBLFFBQUFBLEtBQ0EzakMsS0FBQXVELElBQUE3SSxPQUFBa0Ms
T0FBQSxNQVlBLE1BVkErbUMsR0FBQWw1QixVQUFBc0csSUFBQSxTQUFBdFQsR0FDQSxXQUFBdUMs
S0FBQXVELElBQUE5RixJQUVBa21DLEVBQUFsNUIsVUFBQXJCLElBQUEsU0FBQTNMLEdBQ0F1QyxL
QUFBdUQsSUFBQTlGLElBQUEsR0FFQWttQyxFQUFBbDVCLFVBQUF3SCxNQUFBLFdBQ0FqUyxLQUFB
dUQsSUFBQTdJLE9BQUFrQyxPQUFBLE9BR0ErbUMsSUFPQSxJQUFBQyxJQUFBLEVBTUFuaUMsR0FB
QSxXQUNBekIsS0FBQW1HLEdBQUF5OUIsS0FDQTVqQyxLQUFBNmpDLFFBR0FwaUMsSUFBQWdKLFVB
QUFxNUIsT0FBQSxTQUFBQyxHQUNBL2pDLEtBQUE2akMsS0FBQWppQyxLQUFBbWlDLElBR0F0aUMs
R0FBQWdKLFVBQUF1NUIsVUFBQSxTQUFBRCxHQUNBN21DLEVBQUE4QyxLQUFBNmpDLEtBQUFFLElB
R0F0aUMsR0FBQWdKLFVBQUFoSCxPQUFBLFdBQ0FoQyxHQUFBQyxRQUNBRCxHQUFBQyxPQUFBdWlD
LE9BQUFqa0MsT0FJQXlCLEdBQUFnSixVQUFBN0csT0FBQSxXQUdBLE9BREFpZ0MsR0FBQTdqQyxL
QUFBNmpDLEtBQUE3NkIsUUFDQWpNLEVBQUEsRUFBQW1CLEVBQUEybEMsRUFBQTdtQyxPQUFrQ0Qs
RUFBQW1CLEVBQU9uQixJQUN6QzhtQyxFQUFBOW1DLEdBQUF3SSxVQU9BOUQsR0FBQUMsT0FBQSxJ
QUNBLElBQUFDLE9BZ0JBdWlDLEdBQUF6bEMsTUFBQWdNLFVBQ0EwNUIsR0FBQXpwQyxPQUFBa0Ms
T0FBQXNuQyxLQUNBLE9BQ0EsTUFDQSxRQUNBLFVBQ0EsU0FDQSxPQUNBLFdBRUF2dkIsUUFBQSxT
QUFBeXZCLEdBRUEsR0FBQUMsR0FBQUgsR0FBQUUsRUFDQWprQyxHQUFBZ2tDLEdBQUFDLEVBQUEs
V0FFQSxJQURBLEdBQUE3b0IsTUFBQS9ULEVBQUFySixVQUFBbkIsT0FDQXdLLEtBQUErVCxFQUFB
L1QsR0FBQXJKLFVBQUFxSixFQUVBLElBRUEyWixHQUZBMU0sRUFBQTR2QixFQUFBam1DLE1BQUE0
QixLQUFBdWIsR0FDQWxaLEVBQUFyQyxLQUFBc0MsTUFFQSxRQUFBOGhDLEdBQ0EsV0FDQSxjQUNB
ampCLEVBQUE1RixDQUNBLE1BQ0EsY0FDQTRGLEVBQUE1RixFQUFBdlMsTUFBQSxHQU1BLE1BSEFt
WSxJQUFtQjllLEVBQUFpaUMsYUFBQW5qQixHQUVuQjllLEVBQUFZLElBQUFXLFNBQ0E2USxLQU1B
LElBQUE4dkIsSUFBQTdwQyxPQUFBOHBDLG9CQUFBTCxJQVFBM2hDLElBQ0FDLGVBQUEsR0FTQUYs
R0FBQSxTQUFBM0gsR0FLQSxHQUpBb0YsS0FBQXBGLFFBQ0FvRixLQUFBaUQsSUFBQSxHQUFBeEIs
SUFDQXpCLEtBQUE2QyxRQUFBLEVBQ0ExQyxFQUFBdkYsRUFBQSxTQUFBb0YsTUFDQXZCLE1BQUFh
LFFBQUExRSxHQUFBLEVBQ0FvbkMsR0FDQWpnQyxFQUNBRyxHQUNBdEgsRUFBQXVwQyxHQUFBSSxJ
QUNBdmtDLEtBQUFza0MsYUFBQTFwQyxPQUVBb0YsTUFBQXlrQyxLQUFBN3BDLEdBU0EySCxJQUFB
a0ksVUFBQWc2QixLQUFBLFNBQUFucEMsR0FFQSxPQURBcUUsR0FBQWpGLE9BQUFpRixLQUFBckUs
R0FDQXlCLEVBQUEsRUFBaUJBLEVBQUE0QyxFQUFBM0MsT0FBaUJELElBQ2xDK0YsRUFBQXhILEVB
QUFxRSxFQUFBNUMsR0FBQXpCLEVBQUFxRSxFQUFBNUMsTUFPQXdGLEdBQUFrSSxVQUFBNjVCLGFB
QUEsU0FBQUksR0FDQSxPQUFBM25DLEdBQUEsRUFBQW1CLEVBQUF3bUMsRUFBQTFuQyxPQUFtQ0Qs
RUFBQW1CLEVBQU9uQixJQUMxQ29GLEVBQUF1aUMsRUFBQTNuQyxJQWlNQSxJQUFBOEksSUFBQTdF
LEdBQUF1Z0MscUJBa0ZBMTdCLElBQUFrQyxLQUFBLFNBQ0EzRCxFQUNBQyxFQUNBdkQsR0FFQSxN
QUFBQSxHQWNBcUQsRUFBQUMsRUFBQUMsRUFBQXZELEdBYkF1RCxHQUFBLGtCQUFBQSxHQVFBRCxF
QUVBRCxFQUFBMUksS0FBQXVFLEtBQUFvRSxFQUFBQyxJQXNCQWk5QixHQUFBM3NCLFFBQUEsU0FB
QTdLLEdBQ0FqRSxHQUFBaUUsR0FBQXRGLElBaUJBNFgsR0FBQXpILFFBQUEsU0FBQTNQLEdBQ0Fh
LEdBQUFiLEVBQUEsS0FBQU4sSUFTQW1CLEdBQUFzTixNQUFBLFNBQUEvTyxFQUFBQyxHQUtBLEdB
SEFELElBQUFnUCxLQUFrQ2hQLE1BQUFwSixJQUNsQ3FKLElBQUErTyxLQUFpQy9PLE1BQUFySixL
QUVqQ3FKLEVBQWtCLE1BQUEzSixRQUFBa0MsT0FBQXdILEdBQUEsS0FDbEIsS0FBQUEsRUFBbUIs
TUFBQUMsRUFDbkIsSUFBQTdGLEtBQ0FFLEdBQUFGLEVBQUE0RixFQUNBLFFBQUEzRyxLQUFBNEcs
R0FBQSxDQUNBLEdBQUFvQixHQUFBakgsRUFBQWYsR0FDQWlJLEVBQUFyQixFQUFBNUcsRUFDQWdJ
LEtBQUFoSCxNQUFBYSxRQUFBbUcsS0FDQUEsT0FFQWpILEVBQUFmLEdBQUFnSSxFQUNBQSxFQUFB
aEIsT0FBQWlCLEdBQ0FqSCxNQUFBYSxRQUFBb0csU0FFQSxNQUFBbEgsSUFNQXFILEdBQUFoQixN
QUNBZ0IsR0FBQWdOLFFBQ0FoTixHQUFBWCxPQUNBVyxHQUFBb04sU0FBQSxTQUFBN08sRUFBQUMs
R0FDQSxJQUFBRCxFQUFtQixNQUFBQyxFQUNuQixJQUFBN0YsR0FBQTlELE9BQUFrQyxPQUFBLEtB
R0EsT0FGQThCLEdBQUFGLEVBQUE0RixHQUNBQyxHQUFpQjNGLEVBQUFGLEVBQUE2RixHQUNqQjdG
LEdBRUFxSCxHQUFBeU8sUUFBQW5RLENBS0EsSUFBQTJCLElBQUEsU0FBQTFCLEVBQUFDLEdBQ0Es
V0FBQXJKLEtBQUFxSixFQUNBRCxFQUNBQyxHQXNhQXFELEdBQUEsU0FDQUksRUFDQUMsRUFDQUMs
RUFDQUMsRUFDQUMsRUFDQUMsRUFDQUMsRUFDQUMsR0FFQXJJLEtBQUE4SCxNQUNBOUgsS0FBQStI
LE9BQ0EvSCxLQUFBZ0ksV0FDQWhJLEtBQUFpSSxPQUNBakksS0FBQWtJLE1BQ0FsSSxLQUFBc0ks
T0FBQXROLEdBQ0FnRixLQUFBbUksVUFDQW5JLEtBQUEyTixzQkFBQTNTLEdBQ0FnRixLQUFBdkMs
SUFBQXNLLEtBQUF0SyxJQUNBdUMsS0FBQW9JLG1CQUNBcEksS0FBQWdkLHNCQUFBaGlCLEdBQ0Fn
RixLQUFBeUYsV0FBQXpLLEdBQ0FnRixLQUFBMmtDLEtBQUEsRUFDQTNrQyxLQUFBdUksVUFBQSxF
QUNBdkksS0FBQTB1QixjQUFBLEVBQ0ExdUIsS0FBQXdJLFdBQUEsRUFDQXhJLEtBQUF5SSxVQUFB
LEVBQ0F6SSxLQUFBd1osUUFBQSxFQUNBeFosS0FBQXFJLGVBQ0FySSxLQUFBd0wsY0FBQXhRLEdB
Q0FnRixLQUFBZ2dCLG9CQUFBLEdBR0E0a0IsSUFBMEJsL0IsU0FJMUJrL0IsSUFBQWwvQixNQUFB
ckMsSUFBQSxXQUNBLE1BQUFyRCxNQUFBZ2QsbUJBR0F0aUIsT0FBQW1xQyxpQkFBQW45QixHQUFB
K0MsVUFBQW02QixHQUVBLElBK2JBbGpDLElBL2JBNkosR0FBQSxTQUFBdEQsT0FDQSxLQUFBQSxN
QUFBLEdBRUEsSUFBQTRDLEdBQUEsR0FBQW5ELEdBR0EsT0FGQW1ELEdBQUE1QyxPQUNBNEMsRUFB
QXJDLFdBQUEsRUFDQXFDLEdBeUNBcEIsR0FBQTlMLEVBQUEsU0FBQW1ILEdBQ0EsR0FBQTZFLEdB
QUEsTUFBQTdFLEVBQUFnZixPQUFBLEVBQ0FoZixHQUFBNkUsRUFBQTdFLEVBQUFrRSxNQUFBLEdB
QUFsRSxDQUNBLElBQUFvSSxHQUFBLE1BQUFwSSxFQUFBZ2YsT0FBQSxFQUNBaGYsR0FBQW9JLEVB
QUFwSSxFQUFBa0UsTUFBQSxHQUFBbEUsQ0FDQSxJQUFBNEUsR0FBQSxNQUFBNUUsRUFBQWdmLE9B
QUEsRUFFQSxPQURBaGYsR0FBQTRFLEVBQUE1RSxFQUFBa0UsTUFBQSxHQUFBbEUsR0FFQUEsT0FD
QWhGLEtBQUFvTixFQUNBeEQsVUFDQUMsYUE0akJBNGtCLEdBQUEsS0F1VEExZCxNQUNBQyxNQUNB
QyxNQUVBQyxJQUFBLEVBQ0FDLElBQUEsRUFDQTVULEdBQUEsRUFtSUF5bkMsR0FBQSxFQU9BMTFC
LEdBQUEsU0FDQXRPLEVBQ0Fpa0MsRUFDQXpaLEVBQ0ExbUIsR0FFQTVFLEtBQUFjLEtBQ0FBLEVB
QUE0UixVQUFBOVEsS0FBQTVCLE1BRUE0RSxHQUNBNUUsS0FBQWdsQyxPQUFBcGdDLEVBQUFvZ0Ms
S0FDQWhsQyxLQUFBaWxDLE9BQUFyZ0MsRUFBQXFnQyxLQUNBamxDLEtBQUEwbkIsT0FBQTlpQixF
QUFBOGlCLEtBQ0ExbkIsS0FBQWdNLE9BQUFwSCxFQUFBb0gsTUFFQWhNLEtBQUFnbEMsS0FBQWhs
QyxLQUFBaWxDLEtBQUFqbEMsS0FBQTBuQixLQUFBMW5CLEtBQUFnTSxNQUFBLEVBRUFoTSxLQUFB
c3JCLEtBQ0F0ckIsS0FBQW1HLEtBQUEyK0IsR0FDQTlrQyxLQUFBa2xDLFFBQUEsRUFDQWxsQyxL
QUFBK1QsTUFBQS9ULEtBQUEwbkIsS0FDQTFuQixLQUFBbWxDLFFBQ0FubEMsS0FBQW9sQyxXQUNB
cGxDLEtBQUFxbEMsT0FBQSxHQUFBN0MsSUFDQXhpQyxLQUFBc2xDLFVBQUEsR0FBQTlDLElBQ0F4
aUMsS0FBQXFqQixXQUVBLEdBRUEsa0JBQUEwaEIsR0FDQS9rQyxLQUFBb0QsT0FBQTJoQyxHQUVB
L2tDLEtBQUFvRCxPQUFBN0MsRUFBQXdrQyxHQUNBL2tDLEtBQUFvRCxTQUNBcEQsS0FBQW9ELE9B
QUEsZUFTQXBELEtBQUFwRixNQUFBb0YsS0FBQTBuQixTQUNBMXNCLEdBQ0FnRixLQUFBcUQsTUFN
QStMLElBQUEzRSxVQUFBcEgsSUFBQSxXQUNBOUIsRUFBQXZCLEtBQ0EsSUFBQXBGLEdBQ0FrRyxF
QUFBZCxLQUFBYyxFQUNBLEtBQ0FsRyxFQUFBb0YsS0FBQW9ELE9BQUEzSCxLQUFBcUYsS0FDRyxN
QUFBckIsR0FDSCxJQUFBTyxLQUFBaWxDLEtBR0EsS0FBQXhsQyxFQUZBbUIsR0FBQW5CLEVBQUFx
QixFQUFBLHVCQUFBZCxLQUFBLGdCQUlHLFFBR0hBLEtBQUFnbEMsTUFDQWp6QixHQUFBblgsR0FF
QWlILElBQ0E3QixLQUFBdWxDLGNBRUEsTUFBQTNxQyxJQU1Bd1UsR0FBQTNFLFVBQUF3NUIsT0FB
QSxTQUFBaGhDLEdBQ0EsR0FBQWtELEdBQUFsRCxFQUFBa0QsRUFDQW5HLE1BQUFzbEMsVUFBQXYw
QixJQUFBNUssS0FDQW5HLEtBQUFzbEMsVUFBQWw4QixJQUFBakQsR0FDQW5HLEtBQUFvbEMsUUFB
QXhqQyxLQUFBcUIsR0FDQWpELEtBQUFxbEMsT0FBQXQwQixJQUFBNUssSUFDQWxELEVBQUE2Z0Ms
T0FBQTlqQyxRQVFBb1AsR0FBQTNFLFVBQUE4NkIsWUFBQSxXQUlBLElBSEEsR0FBQUMsR0FBQXhs
QyxLQUVBakQsRUFBQWlELEtBQUFtbEMsS0FBQW5vQyxPQUNBRCxLQUFBLENBQ0EsR0FBQWtHLEdB
QUF1aUMsRUFBQUwsS0FBQXBvQyxFQUNBeW9DLEdBQUFGLFVBQUF2MEIsSUFBQTlOLEVBQUFrRCxL
QUNBbEQsRUFBQStnQyxVQUFBd0IsR0FHQSxHQUFBQyxHQUFBemxDLEtBQUFxbEMsTUFDQXJsQyxN
QUFBcWxDLE9BQUFybEMsS0FBQXNsQyxVQUNBdGxDLEtBQUFzbEMsVUFBQUcsRUFDQXpsQyxLQUFB
c2xDLFVBQUFyekIsUUFDQXd6QixFQUFBemxDLEtBQUFtbEMsS0FDQW5sQyxLQUFBbWxDLEtBQUFu
bEMsS0FBQW9sQyxRQUNBcGxDLEtBQUFvbEMsUUFBQUssRUFDQXpsQyxLQUFBb2xDLFFBQUFwb0Ms
T0FBQSxHQU9Bb1MsR0FBQTNFLFVBQUFsRixPQUFBLFdBRUF2RixLQUFBMG5CLEtBQ0ExbkIsS0FB
QStULE9BQUEsRUFDRy9ULEtBQUFnTSxLQUNIaE0sS0FBQXFSLE1BRUFRLEdBQUE3UixPQVFBb1As
R0FBQTNFLFVBQUE0RyxJQUFBLFdBQ0EsR0FBQXJSLEtBQUFrbEMsT0FBQSxDQUNBLEdBQUF0cUMs
R0FBQW9GLEtBQUFxRCxLQUNBLElBQ0F6SSxJQUFBb0YsS0FBQXBGLE9BSUFTLEVBQUFULElBQ0Fv
RixLQUFBZ2xDLEtBQ0EsQ0FFQSxHQUFBaGtCLEdBQUFoaEIsS0FBQXBGLEtBRUEsSUFEQW9GLEtB
QUFwRixRQUNBb0YsS0FBQWlsQyxLQUNBLElBQ0FqbEMsS0FBQXNyQixHQUFBN3ZCLEtBQUF1RSxL
QUFBYyxHQUFBbEcsRUFBQW9tQixHQUNTLE1BQUF2aEIsR0FDVG1CLEVBQUFuQixFQUFBTyxLQUFB
YyxHQUFBLHlCQUFBZCxLQUFBLG9CQUdBQSxNQUFBc3JCLEdBQUE3dkIsS0FBQXVFLEtBQUFjLEdB
QUFsRyxFQUFBb21CLE1BVUE1UixHQUFBM0UsVUFBQXVKLFNBQUEsV0FDQWhVLEtBQUFwRixNQUFB
b0YsS0FBQXFELE1BQ0FyRCxLQUFBK1QsT0FBQSxHQU1BM0UsR0FBQTNFLFVBQUFoSCxPQUFBLFdB
SUEsSUFIQSxHQUFBK2hDLEdBQUF4bEMsS0FFQWpELEVBQUFpRCxLQUFBbWxDLEtBQUFub0MsT0FD
QUQsS0FDQXlvQyxFQUFBTCxLQUFBcG9DLEdBQUEwRyxVQU9BMkwsR0FBQTNFLFVBQUFpN0IsU0FB
QSxXQUNBLEdBQUFGLEdBQUF4bEMsSUFFQSxJQUFBQSxLQUFBa2xDLE9BQUEsQ0FJQWxsQyxLQUFB
YyxHQUFBNE4sbUJBQ0F4UixFQUFBOEMsS0FBQWMsR0FBQTRSLFVBQUExUyxLQUdBLEtBREEsR0FB
QWpELEdBQUFpRCxLQUFBbWxDLEtBQUFub0MsT0FDQUQsS0FDQXlvQyxFQUFBTCxLQUFBcG9DLEdB
QUFpbkMsVUFBQXdCLEVBRUF4bEMsTUFBQWtsQyxRQUFBLEdBU0EsSUFBQWx6QixJQUFBLEdBQUF3
d0IsSUErQkFod0IsSUFDQXBTLFlBQUEsRUFDQUUsY0FBQSxFQUNBK0MsSUFBQXRFLEVBQ0F3RSxJ
QUFBeEUsR0F3SUE2VSxJQUE4QjhULE1BQUEsR0E4UjlCM1EsSUFDQTR1QixLQUFBLFNBQ0EvOUIs
RUFDQWlILEVBQ0FzSCxFQUNBQyxHQUVBLElBQUF4TyxFQUFBb1YsbUJBQUFwVixFQUFBb1Ysa0JB
QUF2TyxhQUFBLEVBQ0E3RyxFQUFBb1Ysa0JBQUE5RyxHQUNBdE8sRUFDQTJtQixHQUNBcFksRUFD
QUMsSUFFQXd2QixPQUFBLzJCLEVBQUFqSCxFQUFBTSxRQUFBbE4sR0FBQTZULE9BQ0ssSUFBQWpI
LEVBQUFHLEtBQUE4OUIsVUFBQSxDQUVMLEdBQUFDLEdBQUFsK0IsQ0FDQW1QLElBQUFndkIsU0FB
QUQsT0FJQUMsU0FBQSxTQUFBMWxCLEVBQUF6WSxHQUNBLEdBQUFoRCxHQUFBZ0QsRUFBQVEsZ0JB
RUFrSCxJQURBMUgsRUFBQW9WLGtCQUFBcUQsRUFBQXJELGtCQUdBcFksRUFBQStCLFVBQ0EvQixF
QUFBbUksVUFDQW5GLEVBQ0FoRCxFQUFBb0QsV0FJQWcrQixPQUFBLFNBQUFwK0IsR0FDQSxHQUFB
TyxHQUFBUCxFQUFBTyxRQUNBNlUsRUFBQXBWLEVBQUFvVixpQkFDQUEsR0FBQXhPLGFBQ0F3TyxF
QUFBeE8sWUFBQSxFQUNBUSxHQUFBZ08sRUFBQSxZQUVBcFYsRUFBQUcsS0FBQTg5QixZQUNBMTlC
LEVBQUFxRyxXQU1Bb0QsR0FBQW9MLEdBRUExTSxHQUFBME0sR0FBQSxLQUtBaXBCLFFBQUEsU0FB
QXIrQixHQUNBLEdBQUFvVixHQUFBcFYsRUFBQW9WLGlCQUNBQSxHQUFBdk8sZUFDQTdHLEVBQUFH
LEtBQUE4OUIsVUFHQXIxQixHQUFBd00sR0FBQSxHQUZBQSxFQUFBQyxjQVFBckcsR0FBQWxjLE9B
QUFpRixLQUFBb1gsSUFpS0FVLEdBQUEsRUFDQUgsR0FBQSxFQWdkQTR1QixHQUFBLEdBRUEsU0FB
QWhyQixHQUNBQSxFQUFBelEsVUFBQXVRLE1BQUEsU0FBQXBXLEdBQ0EsR0FBQTlELEdBQUFkLElB
RUFjLEdBQUFxbEMsS0FBQUQsS0FXQXBsQyxFQUFBOEIsUUFBQSxFQUVBZ0MsS0FBQTBSLGFBSUEy
RCxHQUFBblosRUFBQThELEdBRUE5RCxFQUFBc0csU0FBQTVCLEVBQ0FvUSxHQUFBOVUsRUFBQW9a
LGFBQ0F0VixNQUNBOUQsR0FPQUEsRUFBQXVZLGFBQUF2WSxFQUdBQSxFQUFBc2xDLE1BQUF0bEMs
RUFDQWlOLEdBQUFqTixHQUNBOEwsR0FBQTlMLEdBQ0E4WSxHQUFBOVksR0FDQWtPLEdBQUFsTyxF
QUFBLGdCQUNBMFQsR0FBQTFULEdBQ0EyUixHQUFBM1IsR0FDQXVULEdBQUF2VCxHQUNBa08sR0FB
QWxPLEVBQUEsV0FTQUEsRUFBQXNHLFNBQUF3SCxJQUNBOU4sRUFBQThrQyxPQUFBOWtDLEVBQUFz
RyxTQUFBd0gsTUF3RkFtTSxJQXArQkEsU0FBQUcsR0FJQSxHQUFBbXJCLEtBQ0FBLEdBQUFoakMs
SUFBQSxXQUE2QixNQUFBckQsTUFBQWdULE1BQzdCLElBQUFzekIsS0FDQUEsR0FBQWpqQyxJQUFB
LFdBQThCLE1BQUFyRCxNQUFBcUgsUUFhOUIzTSxPQUFBQyxlQUFBdWdCLEVBQUF6USxVQUFBLFFB
QUE0N0IsR0FDQTNyQyxPQUFBQyxlQUFBdWdCLEVBQUF6USxVQUFBLFNBQUE2N0IsR0FFQXByQixF
QUFBelEsVUFBQTg3QixLQUFBaGpDLEVBQ0EyWCxFQUFBelEsVUFBQSs3QixRQUFBMWlDLEVBRUFv
WCxFQUFBelEsVUFBQTJKLE9BQUEsU0FDQTJ3QixFQUNBelosRUFDQTFtQixHQUVBLEdBQUE5RCxH
QUFBZCxJQUNBLElBQUF6RSxFQUFBK3ZCLEdBQ0EsTUFBQXBYLElBQUFwVCxFQUFBaWtDLEVBQUF6
WixFQUFBMW1CLEVBRUFBLFNBQ0FBLEVBQUFxZ0MsTUFBQSxDQUNBLElBQUE5ekIsR0FBQSxHQUFB
L0IsSUFBQXRPLEVBQUFpa0MsRUFBQXpaLEVBQUExbUIsRUFJQSxPQUhBQSxHQUFBNmhDLFdBQ0Fu
YixFQUFBN3ZCLEtBQUFxRixFQUFBcVEsRUFBQXZXLE9BRUEsV0FDQXVXLEVBQUF1MEIsY0EyN0JB
M3FCLElBbmtFQSxTQUFBRyxHQUNBLEdBQUF3ckIsR0FBQSxRQUNBeHJCLEdBQUF6USxVQUFBMkMs
SUFBQSxTQUFBNUQsRUFBQTVMLEdBQ0EsR0FBQTRuQyxHQUFBeGxDLEtBRUFjLEVBQUFkLElBQ0Es
SUFBQXZCLE1BQUFhLFFBQUFrSyxHQUNBLE9BQUF6TSxHQUFBLEVBQUFtQixFQUFBc0wsRUFBQXhN
LE9BQXVDRCxFQUFBbUIsRUFBT25CLElBQzlDeW9DLEVBQUFwNEIsSUFBQTVELEVBQUF6TSxHQUFB
YSxRQUdBa0QsRUFBQStMLFFBQUFyRCxLQUFBMUksRUFBQStMLFFBQUFyRCxRQUFBNUgsS0FBQWhF
LEdBR0E4b0MsRUFBQWhtQyxLQUFBOEksS0FDQTFJLEVBQUFnTSxlQUFBLEVBR0EsT0FBQWhNLElB
R0FvYSxFQUFBelEsVUFBQTBDLE1BQUEsU0FBQTNELEVBQUE1TCxHQUVBLFFBQUFzTCxLQUNBcEks
RUFBQXdNLEtBQUE5RCxFQUFBTixHQUNBdEwsRUFBQVEsTUFBQTBDLEVBQUEzQyxXQUhBLEdBQUEy
QyxHQUFBZCxJQU9BLE9BRkFrSixHQUFBdEwsS0FDQWtELEVBQUFzTSxJQUFBNUQsRUFBQU4sR0FD
QXBJLEdBR0FvYSxFQUFBelEsVUFBQTZDLEtBQUEsU0FBQTlELEVBQUE1TCxHQUNBLEdBQUE0bkMs
R0FBQXhsQyxLQUVBYyxFQUFBZCxJQUVBLEtBQUE3QixVQUFBbkIsT0FFQSxNQURBOEQsR0FBQStM
LFFBQUFuUyxPQUFBa0MsT0FBQSxNQUNBa0UsQ0FHQSxJQUFBckMsTUFBQWEsUUFBQWtLLEdBQUEs
Q0FDQSxPQUFBdXZCLEdBQUEsRUFBQTc2QixFQUFBc0wsRUFBQXhNLE9BQXlDKzdCLEVBQUE3NkIs
RUFBUzY2QixJQUNsRHlNLEVBQUFsNEIsS0FBQTlELEVBQUF1dkIsR0FBQW43QixFQUVBLE9BQUFr
RCxHQUdBLEdBQUE2bEMsR0FBQTdsQyxFQUFBK0wsUUFBQXJELEVBQ0EsS0FBQW05QixFQUNBLE1B
QUE3bEMsRUFFQSxRQUFBM0MsVUFBQW5CLE9BRUEsTUFEQThELEdBQUErTCxRQUFBckQsR0FBQSxL
QUNBMUksQ0FLQSxLQUZBLEdBQUF3cUIsR0FDQXZ1QixFQUFBNHBDLEVBQUEzcEMsT0FDQUQsS0FF
QSxJQURBdXVCLEVBQUFxYixFQUFBNXBDLE1BQ0FhLEdBQUEwdEIsRUFBQTF0QixPQUFBLENBQ0Er
b0MsRUFBQXBwQyxPQUFBUixFQUFBLEVBQ0EsT0FHQSxNQUFBK0QsSUFHQW9hLEVBQUF6USxVQUFB
a0csTUFBQSxTQUFBbkgsR0FDQSxHQUFBMUksR0FBQWQsS0FhQTJtQyxFQUFBN2xDLEVBQUErTCxR
QUFBckQsRUFDQSxJQUFBbTlCLEVBQUEsQ0FDQUEsSUFBQTNwQyxPQUFBLEVBQUFzQixFQUFBcW9D
LElBRUEsUUFEQXByQixHQUFBamQsRUFBQUgsVUFBQSxHQUNBcEIsRUFBQSxFQUFBbUIsRUFBQXlv
QyxFQUFBM3BDLE9BQXFDRCxFQUFBbUIsRUFBT25CLElBQzVDLElBQ0E0cEMsRUFBQTVwQyxHQUFB
cUIsTUFBQTBDLEVBQUF5YSxHQUNTLE1BQUE5YixHQUNUbUIsRUFBQW5CLEVBQUFxQixFQUFBLHNC
QUFBMEksRUFBQSxNQUlBLE1BQUExSSxLQW8rREFpYSxJQXY0REEsU0FBQUcsR0FDQUEsRUFBQXpR
LFVBQUF5RSxRQUFBLFNBQUF0SCxFQUFBaUgsR0FDQSxHQUFBL04sR0FBQWQsSUFDQWMsR0FBQTBO
LFlBQ0FRLEdBQUFsTyxFQUFBLGVBRUEsSUFBQThsQyxHQUFBOWxDLEVBQUFnTyxJQUNBKzNCLEVB
QUEvbEMsRUFBQWlQLE9BQ0ErMkIsRUFBQXZZLEVBQ0FBLElBQUF6dEIsRUFDQUEsRUFBQWlQLE9B
QUFuSSxFQUdBaS9CLEVBWUEvbEMsRUFBQWdPLElBQUFoTyxFQUFBaW1DLFVBQUFGLEVBQUFqL0Is
SUFWQTlHLEVBQUFnTyxJQUFBaE8sRUFBQWltQyxVQUNBam1DLEVBQUFnTyxJQUFBbEgsRUFBQWlI
LEdBQUEsRUFDQS9OLEVBQUFzRyxTQUFBb1AsV0FDQTFWLEVBQUFzRyxTQUFBcVAsU0FJQTNWLEVB
QUFzRyxTQUFBb1AsV0FBQTFWLEVBQUFzRyxTQUFBcVAsUUFBQSxNQUtBOFgsR0FBQXVZLEVBRUFG
LElBQ0FBLEVBQUFJLFFBQUEsTUFFQWxtQyxFQUFBZ08sTUFDQWhPLEVBQUFnTyxJQUFBazRCLFFB
QUFsbUMsR0FHQUEsRUFBQXVPLFFBQUF2TyxFQUFBbU4sU0FBQW5OLEVBQUF1TyxTQUFBdk8sRUFB
QW1OLFFBQUE4QixTQUNBalAsRUFBQW1OLFFBQUFhLElBQUFoTyxFQUFBZ08sTUFNQW9NLEVBQUF6
USxVQUFBeUIsYUFBQSxXQUNBLEdBQUFwTCxHQUFBZCxJQUNBYyxHQUFBdU4sVUFDQXZOLEVBQUF1
TixTQUFBOUksVUFJQTJWLEVBQUF6USxVQUFBd1MsU0FBQSxXQUNBLEdBQUFuYyxHQUFBZCxJQUNB
LEtBQUFjLEVBQUE0TixrQkFBQSxDQUdBTSxHQUFBbE8sRUFBQSxpQkFDQUEsRUFBQTROLG1CQUFB
LENBRUEsSUFBQWpKLEdBQUEzRSxFQUFBbU4sU0FDQXhJLEtBQUFpSixtQkFBQTVOLEVBQUFzRyxT
QUFBNEcsVUFDQTlRLEVBQUF1SSxFQUFBeUksVUFBQXBOLEdBR0FBLEVBQUF1TixVQUNBdk4sRUFB
QXVOLFNBQUFxM0IsVUFHQSxLQURBLEdBQUEzb0MsR0FBQStELEVBQUE0UixVQUFBMVYsT0FDQUQs
S0FDQStELEVBQUE0UixVQUFBM1YsR0FBQTJvQyxVQUlBNWtDLEdBQUFrUyxNQUFBMVEsUUFDQXhC
LEVBQUFrUyxNQUFBMVEsT0FBQU8sVUFHQS9CLEVBQUEyTixjQUFBLEVBRUEzTixFQUFBaW1DLFVB
QUFqbUMsRUFBQWlQLE9BQUEsTUFFQWYsR0FBQWxPLEVBQUEsYUFFQUEsRUFBQXdNLE9BRUF4TSxF
QUFBZ08sTUFDQWhPLEVBQUFnTyxJQUFBazRCLFFBQUEsU0FtekRBanNCLElBck9BLFNBQUFHLEdB
Q0FBLEVBQUF6USxVQUFBdzhCLFVBQUEsU0FBQXJwQyxHQUNBLE1BQUFrVSxJQUFBbFUsRUFBQW9D
LE9BR0FrYixFQUFBelEsVUFBQTBFLFFBQUEsV0FDQSxHQUFBck8sR0FBQWQsS0FDQTJmLEVBQUE3
ZSxFQUFBc0csU0FDQTJILEVBQUE0USxFQUFBNVEsT0FDQTRILEVBQUFnSixFQUFBaEosZ0JBQ0E3
RyxFQUFBNlAsRUFBQTdQLFlBRUEsSUFBQWhQLEVBQUEwTixXQUVBLE9BQUEvUSxLQUFBcUQsR0FB
QXNQLE9BQ0F0UCxFQUFBc1AsT0FBQTNTLEdBQUFpTCxHQUFBNUgsRUFBQXNQLE9BQUEzUyxHQUlB
cUQsR0FBQThPLGFBQUFFLEtBQUEvSCxLQUFBNEgsYUFBQUUsR0FFQThHLElBQUE3VixFQUFBc1ks
ZUFDQXRZLEVBQUFzWSxpQkFJQXRZLEVBQUF1TyxPQUFBUyxDQUVBLElBQUFsSSxFQUNBLEtBQ0FB
LEVBQUFtSCxFQUFBdFQsS0FBQXFGLEVBQUF1WSxhQUFBdlksRUFBQWlaLGdCQUNLLE1BQUF0YSxH
QUNMbUIsRUFBQW5CLEVBQUFxQixFQUFBLG1CQVNBOEcsRUFBQTlHLEVBQUFpUCxPQWdCQSxNQVpB
bkksYUFBQUYsTUFRQUUsRUFBQTJELE1BR0EzRCxFQUFBbkMsT0FBQXFLLEVBQ0FsSSxHQU1Bc1Qs
RUFBQXpRLFVBQUF5OEIsR0FBQTN0QixHQUNBMkIsRUFBQXpRLFVBQUEwOEIsR0FBQTdxQyxFQUNB
NGUsRUFBQXpRLFVBQUEyOEIsR0FBQWxyQyxFQUNBZ2YsRUFBQXpRLFVBQUE0OEIsR0FBQXZ2QixH
QUNBb0QsRUFBQXpRLFVBQUE2OEIsR0FBQXZ2QixHQUNBbUQsRUFBQXpRLFVBQUE4OEIsR0FBQXJv
QyxFQUNBZ2MsRUFBQXpRLFVBQUErOEIsR0FBQTNuQyxFQUNBcWIsRUFBQXpRLFVBQUFnOUIsR0FB
QXh1QixHQUNBaUMsRUFBQXpRLFVBQUFpOUIsR0FBQXR2QixHQUNBOEMsRUFBQXpRLFVBQUFrOUIs
R0FBQXJ2QixHQUNBNEMsRUFBQXpRLFVBQUFtOUIsR0FBQWx2QixHQUNBd0MsRUFBQXpRLFVBQUFv
OUIsR0FBQXBnQyxFQUNBeVQsRUFBQXpRLFVBQUFxOUIsR0FBQXY4QixHQUNBMlAsRUFBQXpRLFVB
QUFzOUIsR0FBQWo2QixHQUNBb04sRUFBQXpRLFVBQUF1OUIsR0FBQXR1QixJQXlKQXFCLEdBMEtB
LElBQUFrdEIsS0FBQTVyQyxPQUFBKzRCLE9BQUEzMkIsT0F1Q0F5cEMsSUFDQXBqQyxLQUFBLGFB
Q0FrSixVQUFBLEVBRUFuSixPQUNBc2pDLFFBQUFGLEdBQ0FHLFFBQUFILElBR0FJLFFBQUEsV0FD
QXJvQyxLQUFBbkMsTUFBQW5ELE9BQUFrQyxPQUFBLE9BR0EwckMsVUFBQSxXQUNBLEdBQUE5QyxH
QUFBeGxDLElBRUEsUUFBQXZDLEtBQUErbkMsR0FBQTNuQyxNQUNBa2YsR0FBQXlvQixFQUFBM25D
LE1BQUFKLEtBSUEwVixPQUNBZzFCLFFBQUEsU0FBQXZzQyxHQUNBK2dCLEdBQUEzYyxLQUFBbkMs
TUFBQW1DLEtBQUErUCxPQUFBLFNBQUFqTCxHQUEyRCxNQUFBMlgsSUFBQTdnQixFQUFBa0osTUFF
M0RzakMsUUFBQSxTQUFBeHNDLEdBQ0ErZ0IsR0FBQTNjLEtBQUFuQyxNQUFBbUMsS0FBQStQLE9B
QUEsU0FBQWpMLEdBQTJELE9BQUEyWCxHQUFBN2dCLEVBQUFrSixPQUkzRGlLLE9BQUEsV0FDQSxH
QUFBbkgsR0FBQStFLEdBQUEzTSxLQUFBb1EsT0FBQWpKLFNBQ0FpQixFQUFBUixLQUFBUSxnQkFD
QSxJQUFBQSxFQUFBLENBRUEsR0FBQXRELEdBQUEwWCxHQUFBcFUsRUFDQSxJQUFBdEQsSUFDQTlF
LEtBQUFtb0MsVUFBQTFyQixHQUFBemMsS0FBQW1vQyxRQUFBcmpDLElBQ0E5RSxLQUFBb29DLFNB
QUEzckIsR0FBQXpjLEtBQUFvb0MsUUFBQXRqQyxJQUVBLE1BQUE4QyxFQUVBLElBQUFuSyxHQUFB
LE1BQUFtSyxFQUFBbkssSUFHQTJLLEVBQUE5RyxLQUFBcVUsS0FBQXZOLEVBQUFOLElBQUEsS0FB
QU0sRUFBQSxRQUNBUixFQUFBbkssR0FDQXVDLE1BQUFuQyxNQUFBSixHQUNBbUssRUFBQW9WLGtC
QUFBaGQsS0FBQW5DLE1BQUFKLEdBQUF1ZixrQkFFQWhkLEtBQUFuQyxNQUFBSixHQUFBbUssRUFF
QUEsRUFBQUcsS0FBQTg5QixXQUFBLEVBRUEsTUFBQWorQixLQUlBMmdDLElBQ0FMLGVBS0EsU0FB
QWh0QixHQUVBLEdBQUFzdEIsS0FDQUEsR0FBQW5sQyxJQUFBLFdBQStCLE1BQUFyQyxLQVEvQnRH
LE9BQUFDLGVBQUF1Z0IsRUFBQSxTQUFBc3RCLEdBS0F0dEIsRUFBQXV0QixNQUNBNWpCLFFBQ0Fu
bUIsU0FDQThHLGVBQ0FrakMsZUFBQTVsQyxHQUdBb1ksRUFBQTNYLE1BQ0EyWCxFQUFBeXRCLE9B
QUE3a0MsRUFDQW9YLEVBQUFwSixZQUVBb0osRUFBQXRXLFFBQUFsSyxPQUFBa0MsT0FBQSxNQUNB
d2YsR0FBQXpILFFBQUEsU0FBQTNQLEdBQ0FrVyxFQUFBdFcsUUFBQUksRUFBQSxLQUFBdEssT0FB
QWtDLE9BQUEsUUFLQXNlLEVBQUF0VyxRQUFBOFEsTUFBQXdGLEVBRUF4YyxFQUFBd2MsRUFBQXRX
LFFBQUE0VixXQUFBK3RCLElBRUF0dEIsR0FBQUMsR0FDQVEsR0FBQVIsR0FDQVUsR0FBQVYsR0FD
QW9CLEdBQUFwQixJQUdBSCxJQUVBcmdCLE9BQUFDLGVBQUFvZ0IsR0FBQXRRLFVBQUEsYUFDQXBI
LElBQUFYLEtBR0FoSSxPQUFBQyxlQUFBb2dCLEdBQUF0USxVQUFBLGVBQ0FwSCxJQUFBLFdBRUEs
TUFBQXJELE1BQUFxUCxRQUFBclAsS0FBQXFQLE9BQUF1NUIsY0FJQTd0QixHQUFBOHRCLFFBQUEs
T0FNQSxJQWc5Q0FyaEMsSUFDQS9LLEdBQ0E2cEIsR0FDQUwsR0FDQUMsR0FDQUMsR0F3RUFZLEdB
eUxBbUIsR0E0T0E0Z0IsR0FsOERBakgsR0FBQXJsQyxFQUFBLGVBR0F1c0MsR0FBQXZzQyxFQUFB
LGdDQUNBc2MsR0FBQSxTQUFBaFIsRUFBQTlDLEVBQUFzeEIsR0FDQSxNQUNBLFVBQUFBLEdBQUF5
UyxHQUFBamhDLElBQUEsV0FBQTlDLEdBQ0EsYUFBQXN4QixHQUFBLFdBQUF4dUIsR0FDQSxZQUFB
d3VCLEdBQUEsVUFBQXh1QixHQUNBLFVBQUF3dUIsR0FBQSxVQUFBeHVCLEdBSUFxYSxHQUFBM2xC
LEVBQUEsd0NBRUE2bEIsR0FBQTdsQixFQUNBLHdZQVFBeWxCLEdBQUEsK0JBRUFGLEdBQUEsU0FB
QWpkLEdBQ0EsWUFBQUEsRUFBQWdmLE9BQUEsY0FBQWhmLEVBQUFrRSxNQUFBLE1BR0FrWixHQUFB
LFNBQUFwZCxHQUNBLE1BQUFpZCxJQUFBamQsS0FBQWtFLE1BQUEsRUFBQWxFLEVBQUE5SCxRQUFB
LElBR0FzbEIsR0FBQSxTQUFBMW1CLEdBQ0EsYUFBQUEsSUFBQSxJQUFBQSxHQXNGQWtqQixJQUNB
a3FCLElBQUEsNkJBQ0FDLEtBQUEsc0NBR0FDLEdBQUExc0MsRUFDQSxzbkJBZUFzaEIsR0FBQXRo
QixFQUNBLGtOQUdBLEdBR0ErNkIsR0FBQSxTQUFBenZCLEdBQStCLGNBQUFBLEdBRS9CNlAsR0FB
QSxTQUFBN1AsR0FDQSxNQUFBb2hDLElBQUFwaEMsSUFBQWdXLEdBQUFoVyxJQWNBa1csR0FBQXRq
QixPQUFBa0MsT0FBQSxNQXlHQXVzQyxHQUFBenVDLE9BQUFxbkMsUUFDQXpzQixjQUFBa0osR0FD
QUksbUJBQ0FHLGtCQUNBQyxpQkFDQUMsZ0JBQ0FHLGVBQ0FDLGVBQ0FsQyxjQUNBbUMsZUFDQWIs
V0FDQWMsa0JBQ0FaLGtCQUtBZ0IsSUFDQS9pQixPQUFBLFNBQUEwbkIsRUFBQTFjLEdBQ0E2WCxH
QUFBN1gsSUFFQXJDLE9BQUEsU0FBQThhLEVBQUF6WSxHQUNBeVksRUFBQXRZLEtBQUE0WCxNQUFB
L1gsRUFBQUcsS0FBQTRYLE1BQ0FGLEdBQUFZLEdBQUEsR0FDQVosR0FBQTdYLEtBR0FxK0IsUUFB
QSxTQUFBcitCLEdBQ0E2WCxHQUFBN1gsR0FBQSxLQTZDQTZZLEdBQUEsR0FBQS9ZLElBQUEsVUFF
QTBoQyxJQUFBLGlEQTRuQkE5akMsSUFDQTFJLE9BQUF3akIsR0FDQTdhLE9BQUE2YSxHQUNBNmxC
LFFBQUEsU0FBQXIrQixHQUNBd1ksR0FBQXhZLEVBQUE2WSxNQXNFQWEsR0FBQTVtQixPQUFBa0Ms
T0FBQSxNQXFDQXlzQyxJQUNBMXBCLEdBQ0FyYSxJQXVFQTZFLElBQ0F2TixPQUFBOGtCLEdBQ0Fu
YyxPQUFBbWMsSUFvQ0E0bkIsSUFDQTFzQyxPQUFBNGxCLEdBQ0FqZCxPQUFBaWQsSUFLQXVCLEdB
QUEsZ0JBc1dBNkQsR0FBQSxNQUNBTCxHQUFBLE1Bc09BekMsSUFDQWxvQixPQUFBNHJCLEdBQ0Fq
akIsT0FBQWlqQixJQXFGQXpQLElBQ0FuYyxPQUFBNnJCLEdBQ0FsakIsT0FBQWtqQixJQUtBaUIs
R0FBQS9yQixFQUFBLFNBQUE0ckMsR0FDQSxHQUFBenFDLE1BQ0EwcUMsRUFBQSxnQkFDQUMsRUFB
QSxPQU9BLE9BTkFGLEdBQUF6c0MsTUFBQTBzQyxHQUFBNzBCLFFBQUEsU0FBQXZYLEdBQ0EsR0FB
QUEsRUFBQSxDQUNBLEdBQUFxb0MsR0FBQXJvQyxFQUFBTixNQUFBMnNDLEVBQ0FoRSxHQUFBem9D
LE9BQUEsSUFBQThCLEVBQUEybUMsRUFBQSxHQUFBdGlCLFFBQUFzaUIsRUFBQSxHQUFBdGlCLFdB
R0Fya0IsSUF5REE0cUMsR0FBQSxNQUNBQyxHQUFBLGlCQUNBdmYsR0FBQSxTQUFBeGIsRUFBQTlK
LEVBQUFsSixHQUVBLEdBQUE4dEMsR0FBQWhwQyxLQUFBb0UsR0FDQThKLEVBQUEwYSxNQUFBc2dC
LFlBQUE5a0MsRUFBQWxKLE9BQ0csSUFBQSt0QyxHQUFBanBDLEtBQUE5RSxHQUNIZ1QsRUFBQTBh
LE1BQUFzZ0IsWUFBQTlrQyxFQUFBbEosRUFBQTh1QixRQUFBaWYsR0FBQSxxQkFDRyxDQUNILEdB
QUFFLEdBQUFDLEdBQUFobEMsRUFDQSxJQUFBckcsTUFBQWEsUUFBQTFELEdBSUEsT0FBQW1CLEdB
QUEsRUFBQXlLLEVBQUE1TCxFQUFBb0IsT0FBdUNELEVBQUF5SyxFQUFTekssSUFDaEQ2UixFQUFB
MGEsTUFBQXVnQixHQUFBanVDLEVBQUFtQixPQUdBNlIsR0FBQTBhLE1BQUF1Z0IsR0FBQWp1QyxJ
QUtBbXVDLElBQUEscUJBR0FELEdBQUFuc0MsRUFBQSxTQUFBaUosR0FHQSxHQUZBa2lDLE9BQUE3
cUIsU0FBQTNJLGNBQUEsT0FBQWdVLE1BRUEsWUFEQTFpQixFQUFBN0IsR0FBQTZCLEtBQ0FBLElB
QUFraUMsSUFDQSxNQUFBbGlDLEVBR0EsUUFEQW9qQyxHQUFBcGpDLEVBQUFrZCxPQUFBLEdBQUFx
ZCxjQUFBdjZCLEVBQUFvQyxNQUFBLEdBQ0FqTSxFQUFBLEVBQWlCQSxFQUFBZ3RDLEdBQUEvc0Ms
T0FBd0JELElBQUEsQ0FDekMsR0FBQStILEdBQUFpbEMsR0FBQWh0QyxHQUFBaXRDLENBQ0EsSUFB
QWxsQyxJQUFBZ2tDLElBQ0EsTUFBQWhrQyxNQWdEQXdrQixJQUNBMXNCLE9BQUFrdEIsR0FDQXZr
QixPQUFBdWtCLElBb0ZBZ0IsR0FBQW50QixFQUFBLFNBQUFtSCxHQUNBLE9BQ0Eyb0IsV0FBQTNv
QixFQUFBLFNBQ0E0b0IsYUFBQTVvQixFQUFBLFlBQ0E2b0IsaUJBQUE3b0IsRUFBQSxnQkFDQWdy
QixXQUFBaHJCLEVBQUEsU0FDQWtyQixhQUFBbHJCLEVBQUEsWUFDQWlyQixpQkFBQWpyQixFQUFB
LG1CQUlBbWxDLEdBQUEvb0MsS0FBQTRnQixHQUNBMkosR0FBQSxhQUNBaUIsR0FBQSxZQUdBUixH
QUFBLGFBQ0FSLEdBQUEsZ0JBQ0FhLEdBQUEsWUFDQVosR0FBQSxjQUNBc2UsVUFFQWp2QyxLQUFB
a2pCLE9BQUFnc0IscUJBQ0FsdkMsS0FBQWtqQixPQUFBaXNCLHdCQUVBamUsR0FBQSxtQkFDQVIs
R0FBQSwyQkFFQTF3QixLQUFBa2pCLE9BQUFrc0Isb0JBQ0FwdkMsS0FBQWtqQixPQUFBbXNCLHVC
QUVBOWQsR0FBQSxrQkFDQVosR0FBQSxzQkFLQSxJQUFBWCxJQUFBOXBCLElBQUFnZCxPQUFBb3NC
LHNCQUNBcHNCLE9BQUFvc0Isc0JBQUF4c0MsS0FBQW9nQixRQUNBelIsV0FzREFtZ0IsR0FBQSx5
QkFpWEFVLEdBQUFwc0IsSUFDQXRFLE9BQUEwekIsR0FDQWlhLFNBQUFqYSxHQUNBcHpCLE9BQUEs
U0FBQTBLLEVBQUErbkIsSUFFQSxJQUFBL25CLEVBQUFHLEtBQUF1bkIsS0FDQUksR0FBQTluQixF
QUFBK25CLEdBRUFBLFNBS0E2YSxJQUNBcmdDLEdBQ0FtL0IsR0FDQXhrQixHQUNBL0wsR0FDQXVR
LEdBQ0FnRSxJQU9BbEosR0FBQW9tQixHQUFBL2xDLE9BQUE0a0MsSUFFQW9CLEdBNXJFQSxTQUFB
QyxHQWdCQSxRQUFBQyxHQUFBemlDLEdBQ0EsVUFBQVIsSUFBQXloQyxFQUFBMXFCLFFBQUF2VyxH
QUFBakwsd0JBQTJEakMsR0FBQWtOLEdBRzNELFFBQUEwaUMsR0FBQUMsRUFBQTk5QixHQUNBLFFB
QUExRCxLQUNBLEtBQUFBLEVBQUEwRCxXQUNBKzlCLEVBQUFELEdBSUEsTUFEQXhoQyxHQUFBMEQs
WUFDQTFELEVBR0EsUUFBQXloQyxHQUFBbDhCLEdBQ0EsR0FBQW5KLEdBQUEwakMsRUFBQWhzQixX
QUFBdk8sRUFFQTNULEdBQUF3SyxJQUNBMGpDLEVBQUEvcEIsWUFBQTNaLEVBQUFtSixHQUtBLFFB
QUFtOEIsR0FBQW5qQyxFQUFBb2pDLEVBQUE3MEIsRUFBQUMsRUFBQTYwQixHQUVBLEdBREFyakMs
RUFBQThtQixjQUFBdWMsR0FDQXgxQixFQUFBN04sRUFBQW9qQyxFQUFBNzBCLEVBQUFDLEdBQUEs
Q0FJQSxHQUFBck8sR0FBQUgsRUFBQUcsS0FDQUMsRUFBQUosRUFBQUksU0FDQUYsRUFBQUYsRUFB
QUUsR0FDQTdNLEdBQUE2TSxJQW1CQUYsRUFBQU0sSUFBQU4sRUFBQVUsR0FDQTZnQyxFQUFBdnFC
LGdCQUFBaFgsRUFBQVUsR0FBQVIsR0FDQXFoQyxFQUFBN3pCLGNBQUF4TixFQUFBRixHQUNBc2pD
LEVBQUF0akMsR0FJQXVqQyxFQUFBdmpDLEVBQUFJLEVBQUFnakMsR0FDQS92QyxFQUFBOE0sSUFD
QXFqQyxFQUFBeGpDLEVBQUFvakMsR0FFQWhGLEVBQUE3dkIsRUFBQXZPLEVBQUFNLElBQUFrTyxJ
QU1LbGIsRUFBQTBNLEVBQUFZLFlBQ0xaLEVBQUFNLElBQUFpaEMsRUFBQW5xQixjQUFBcFgsRUFB
QUssTUFDQSs5QixFQUFBN3ZCLEVBQUF2TyxFQUFBTSxJQUFBa08sS0FFQXhPLEVBQUFNLElBQUFp
aEMsRUFBQXBxQixlQUFBblgsRUFBQUssTUFDQSs5QixFQUFBN3ZCLEVBQUF2TyxFQUFBTSxJQUFB
a08sS0FJQSxRQUFBWCxHQUFBN04sRUFBQW9qQyxFQUFBNzBCLEVBQUFDLEdBQ0EsR0FBQXJaLEdB
QUE2SyxFQUFBRyxJQUNBLElBQUE5TSxFQUFBOEIsR0FBQSxDQUNBLEdBQUFzdUMsR0FBQXB3QyxF
QUFBMk0sRUFBQW9WLG9CQUFBamdCLEVBQUE4b0MsU0FRQSxJQVBBNXFDLEVBQUE4QixJQUFBK00s
T0FBQTdPLEVBQUE4QixJQUFBNG9DLE9BQ0E1b0MsRUFBQTZLLEdBQUEsRUFBQXVPLEVBQUFDLEdB
TUFuYixFQUFBMk0sRUFBQW9WLG1CQUtBLE1BSkFzdUIsR0FBQTFqQyxFQUFBb2pDLEdBQ0E5dkMs
RUFBQW13QyxJQUNBRSxFQUFBM2pDLEVBQUFvakMsRUFBQTcwQixFQUFBQyxJQUVBLEdBS0EsUUFB
QWsxQixHQUFBMWpDLEVBQUFvakMsR0FDQS92QyxFQUFBMk0sRUFBQUcsS0FBQXlqQyxpQkFDQVIs
RUFBQXBwQyxLQUFBeEQsTUFBQTRzQyxFQUFBcGpDLEVBQUFHLEtBQUF5akMsZUFDQTVqQyxFQUFB
RyxLQUFBeWpDLGNBQUEsTUFFQTVqQyxFQUFBTSxJQUFBTixFQUFBb1Ysa0JBQUFsTyxJQUNBMjhC
LEVBQUE3akMsSUFDQXdqQyxFQUFBeGpDLEVBQUFvakMsR0FDQUUsRUFBQXRqQyxLQUlBNlgsR0FB
QTdYLEdBRUFvakMsRUFBQXBwQyxLQUFBZ0csSUFJQSxRQUFBMmpDLEdBQUEzakMsRUFBQW9qQyxF
QUFBNzBCLEVBQUFDLEdBT0EsSUFOQSxHQUFBclosR0FLQTJ1QyxFQUFBOWpDLEVBQ0E4akMsRUFB
QTF1QixtQkFFQSxHQURBMHVCLElBQUExdUIsa0JBQUFqTixPQUNBOVUsRUFBQThCLEVBQUEydUMs
RUFBQTNqQyxPQUFBOU0sRUFBQThCLElBQUF1d0IsWUFBQSxDQUNBLElBQUF2d0IsRUFBQSxFQUFt
QkEsRUFBQTRwQyxFQUFBNEQsU0FBQXZ0QyxTQUF5QkQsRUFDNUM0cEMsRUFBQTRELFNBQUF4dEMs
R0FBQTBqQixHQUFBaXJCLEVBRUFWLEdBQUFwcEMsS0FBQThwQyxFQUNBLE9BS0ExRixFQUFBN3ZC
LEVBQUF2TyxFQUFBTSxJQUFBa08sR0FHQSxRQUFBNHZCLEdBQUF2Z0MsRUFBQXlDLEVBQUF5akMs
R0FDQTF3QyxFQUFBd0ssS0FDQXhLLEVBQUEwd0MsR0FDQUEsRUFBQXh1QixhQUFBMVgsR0FDQTBq
QyxFQUFBbHFCLGFBQUF4WixFQUFBeUMsRUFBQXlqQyxHQUdBeEMsRUFBQTlwQixZQUFBNVosRUFB
QXlDLElBS0EsUUFBQWlqQyxHQUFBdmpDLEVBQUFJLEVBQUFnakMsR0FDQSxHQUFBdnNDLE1BQUFh
LFFBQUEwSSxHQUNBLE9BQUFqTCxHQUFBLEVBQXFCQSxFQUFBaUwsRUFBQWhMLFNBQXFCRCxFQUMx
Q2d1QyxFQUFBL2lDLEVBQUFqTCxHQUFBaXVDLEVBQUFwakMsRUFBQU0sSUFBQSxhQUVLOU0sR0FB
QXdNLEVBQUFLLE9BQ0xraEMsRUFBQTlwQixZQUFBelgsRUFBQU0sSUFBQWloQyxFQUFBcHFCLGVB
QUFuWCxFQUFBSyxPQUlBLFFBQUF3akMsR0FBQTdqQyxHQUNBLEtBQUFBLEVBQUFvVixtQkFDQXBW
LElBQUFvVixrQkFBQWpOLE1BRUEsT0FBQTlVLEdBQUEyTSxFQUFBRSxLQUdBLFFBQUFzakMsR0FB
QXhqQyxFQUFBb2pDLEdBQ0EsT0FBQWpTLEdBQUEsRUFBcUJBLEVBQUE0TixFQUFBL3BDLE9BQUFJ
LFNBQXlCKzdCLEVBQzlDNE4sRUFBQS9wQyxPQUFBbThCLEdBQUF0WSxHQUFBN1ksRUFFQTdLLEdB
QUE2SyxFQUFBRyxLQUFBK0IsS0FDQTdPLEVBQUE4QixLQUNBOUIsRUFBQThCLEVBQUFILFNBQTRC
RyxFQUFBSCxPQUFBNmpCLEdBQUE3WSxHQUM1QjNNLEVBQUE4QixFQUFBaXBDLFNBQTRCZ0YsRUFB
QXBwQyxLQUFBZ0csSUFPNUIsUUFBQXNqQyxHQUFBdGpDLEdBR0EsSUFGQSxHQUFBN0ssR0FDQTZ1
QyxFQUFBaGtDLEVBQ0Fna0MsR0FDQTN3QyxFQUFBOEIsRUFBQTZ1QyxFQUFBempDLFVBQUFsTixF
QUFBOEIsSUFBQXFLLFNBQUF5a0MsV0FDQTFDLEVBQUF4cUIsYUFBQS9XLEVBQUFNLElBQUFuTCxF
QUFBLElBRUE2dUMsSUFBQW5tQyxNQUdBeEssR0FBQThCLEVBQUF3eEIsS0FDQXh4QixJQUFBNkss
RUFBQU8sU0FDQWxOLEVBQUE4QixJQUFBcUssU0FBQXlrQyxXQUVBMUMsRUFBQXhxQixhQUFBL1cs
RUFBQU0sSUFBQW5MLEVBQUEsSUFJQSxRQUFBK3VDLEdBQUEzMUIsRUFBQUMsRUFBQXpOLEVBQUFv
akMsRUFBQTVyQixFQUFBNnFCLEdBQ0EsS0FBVWUsR0FBQTVyQixJQUFvQjRyQixFQUM5QmhCLEVB
QUFwaUMsRUFBQW9qQyxHQUFBZixFQUFBNzBCLEVBQUFDLEdBSUEsUUFBQTQxQixHQUFBcGtDLEdB
Q0EsR0FBQTdLLEdBQUEyVCxFQUNBM0ksRUFBQUgsRUFBQUcsSUFDQSxJQUFBOU0sRUFBQThNLEdB
RUEsSUFEQTlNLEVBQUE4QixFQUFBZ0wsRUFBQStCLE9BQUE3TyxFQUFBOEIsSUFBQWtwQyxVQUF5
RGxwQyxFQUFBNkssR0FDekQ3SyxFQUFBLEVBQWlCQSxFQUFBNHBDLEVBQUFWLFFBQUFqcEMsU0FB
d0JELEVBQU80cEMsRUFBQVYsUUFBQWxwQyxHQUFBNkssRUFFaEQsSUFBQTNNLEVBQUE4QixFQUFB
NkssRUFBQUksVUFDQSxJQUFBMEksRUFBQSxFQUFpQkEsRUFBQTlJLEVBQUFJLFNBQUFoTCxTQUEy
QjBULEVBQzVDczdCLEVBQUFwa0MsRUFBQUksU0FBQTBJLElBS0EsUUFBQXU3QixHQUFBOTFCLEVB
QUF4TixFQUFBb2pDLEVBQUE1ckIsR0FDQSxLQUFVNHJCLEdBQUE1ckIsSUFBb0I0ckIsRUFBQSxD
QUM5QixHQUFBRyxHQUFBdmpDLEVBQUFvakMsRUFDQTl3QyxHQUFBaXhDLEtBQ0FqeEMsRUFBQWl4
QyxFQUFBcGtDLE1BQ0Fxa0MsRUFBQUQsR0FDQUYsRUFBQUUsSUFFQXBCLEVBQUFvQixFQUFBaGtD
LE9BTUEsUUFBQWlrQyxHQUFBdmtDLEVBQUErbkIsR0FDQSxHQUFBMTBCLEVBQUEwMEIsSUFBQTEw
QixFQUFBMk0sRUFBQUcsTUFBQSxDQUNBLEdBQUFoTCxHQUNBZ1EsRUFBQTQ1QixFQUFBenBDLE9B
QUFGLE9BQUEsQ0FhQSxLQVpBL0IsRUFBQTAwQixHQUdBQSxFQUFBNWlCLGFBR0E0aUIsRUFBQWli
LEVBQUFoakMsRUFBQU0sSUFBQTZFLEdBR0E5UixFQUFBOEIsRUFBQTZLLEVBQUFvVixvQkFBQS9o
QixFQUFBOEIsSUFBQWdULFNBQUE5VSxFQUFBOEIsRUFBQWdMLE9BQ0Fva0MsRUFBQXB2QyxFQUFB
NHlCLEdBRUE1eUIsRUFBQSxFQUFpQkEsRUFBQTRwQyxFQUFBenBDLE9BQUFGLFNBQXVCRCxFQUN4
QzRwQyxFQUFBenBDLE9BQUFILEdBQUE2SyxFQUFBK25CLEVBRUExMEIsR0FBQThCLEVBQUE2SyxF
QUFBRyxLQUFBK0IsT0FBQTdPLEVBQUE4QixJQUFBRyxRQUNBSCxFQUFBNkssRUFBQStuQixHQUVB
QSxRQUdBbWIsR0FBQWxqQyxFQUFBTSxLQUlBLFFBQUFra0MsR0FBQWoyQixFQUFBazJCLEVBQUFD
LEVBQUF0QixFQUFBdUIsR0FnQkEsSUFmQSxHQVFBQyxHQUFBQyxFQUFBQyxFQUFBdDJCLEVBUkF1
MkIsRUFBQSxFQUNBQyxFQUFBLEVBQ0FDLEVBQUFSLEVBQUFydkMsT0FBQSxFQUNBOHZDLEVBQUFU
LEVBQUEsR0FDQVUsRUFBQVYsRUFBQVEsR0FDQUcsRUFBQVYsRUFBQXR2QyxPQUFBLEVBQ0Fpd0Ms
RUFBQVgsRUFBQSxHQUNBWSxFQUFBWixFQUFBVSxHQU1BRyxHQUFBWixFQUVBSSxHQUFBRSxHQUFB
RCxHQUFBSSxHQUNBbHlDLEVBQUFneUMsR0FDQUEsRUFBQVQsSUFBQU0sR0FDTzd4QyxFQUFBaXlD
LEdBQ1BBLEVBQUFWLElBQUFRLEdBQ08vc0IsR0FBQWd0QixFQUFBRyxJQUNQRyxFQUFBTixFQUFB
RyxFQUFBakMsR0FDQThCLEVBQUFULElBQUFNLEdBQ0FNLEVBQUFYLElBQUFNLElBQ085c0IsR0FB
QWl0QixFQUFBRyxJQUNQRSxFQUFBTCxFQUFBRyxFQUFBbEMsR0FDQStCLEVBQUFWLElBQUFRLEdB
Q0FLLEVBQUFaLElBQUFVLElBQ09sdEIsR0FBQWd0QixFQUFBSSxJQUNQRSxFQUFBTixFQUFBSSxF
QUFBbEMsR0FDQW1DLEdBQUFoRSxFQUFBbHFCLGFBQUE5SSxFQUFBMjJCLEVBQUE1a0MsSUFBQWlo
QyxFQUFBN3BCLFlBQUF5dEIsRUFBQTdrQyxNQUNBNGtDLEVBQUFULElBQUFNLEdBQ0FPLEVBQUFa
LElBQUFVLElBQ09sdEIsR0FBQWl0QixFQUFBRSxJQUNQRyxFQUFBTCxFQUFBRSxFQUFBakMsR0FD
QW1DLEdBQUFoRSxFQUFBbHFCLGFBQUE5SSxFQUFBNDJCLEVBQUE3a0MsSUFBQTRrQyxFQUFBNWtD
LEtBQ0E2a0MsRUFBQVYsSUFBQVEsR0FDQUksRUFBQVgsSUFBQU0sS0FFQTl4QyxFQUFBMHhDLEtB
QW1DQSxFQUFBdnNCLEdBQUFvc0IsRUFBQU0sRUFBQUUsSUFDbkNKLEVBQUF4eEMsRUFBQWd5QyxF
QUFBeHZDLEtBQUErdUMsRUFBQVMsRUFBQXh2QyxLQUFBLEtBQ0EzQyxFQUFBMnhDLElBQ0ExQixF
QUFBa0MsRUFBQWpDLEVBQUE3MEIsRUFBQTIyQixFQUFBNWtDLEtBQ0Era0MsRUFBQVgsSUFBQU0s
S0FFQUYsRUFBQUwsRUFBQUksR0FRQTNzQixHQUFBNHNCLEVBQUFPLElBQ0FHLEVBQUFWLEVBQUFP
LEVBQUFqQyxHQUNBcUIsRUFBQUksT0FBQXp4QyxHQUNBbXlDLEdBQUFoRSxFQUFBbHFCLGFBQUE5
SSxFQUFBdTJCLEVBQUF4a0MsSUFBQTRrQyxFQUFBNWtDLEtBQ0Era0MsRUFBQVgsSUFBQU0sS0FH
QTdCLEVBQUFrQyxFQUFBakMsRUFBQTcwQixFQUFBMjJCLEVBQUE1a0MsS0FDQStrQyxFQUFBWCxJ
QUFBTSxLQUtBRCxHQUFBRSxHQUNBejJCLEVBQUF0YixFQUFBd3hDLEVBQUFVLEVBQUEsU0FBQVYs
RUFBQVUsRUFBQSxHQUFBOWtDLElBQ0E0akMsRUFBQTMxQixFQUFBQyxFQUFBazJCLEVBQUFNLEVB
QUFJLEVBQUFoQyxJQUNLNEIsRUFBQUksR0FDTGYsRUFBQTkxQixFQUFBazJCLEVBQUFNLEVBQUFF
LEdBSUEsUUFBQU8sR0FBQS9zQixFQUFBelksRUFBQW9qQyxFQUFBdUIsR0FDQSxHQUFBbHNCLElB
QUF6WSxFQUFBLENBSUEsR0FBQU0sR0FBQU4sRUFBQU0sSUFBQW1ZLEVBQUFuWSxHQUVBLElBQUFo
TixFQUFBbWxCLEVBQUFMLG9CQU1BLFlBTEEva0IsRUFBQTJNLEVBQUFTLGFBQUF1RCxVQUNBeWhD
LEVBQUFodEIsRUFBQW5ZLElBQUFOLEVBQUFvakMsR0FFQXBqQyxFQUFBb1ksb0JBQUEsRUFTQSxJ
QUFBOWtCLEVBQUEwTSxFQUFBVyxXQUNBck4sRUFBQW1sQixFQUFBOVgsV0FDQVgsRUFBQW5LLE1B
QUE0aUIsRUFBQTVpQixNQUNBdkMsRUFBQTBNLEVBQUFhLFdBQUF2TixFQUFBME0sRUFBQTRSLFNB
R0EsWUFEQTVSLEVBQUFvVixrQkFBQXFELEVBQUFyRCxrQkFJQSxJQUFBamdCLEdBQ0FnTCxFQUFB
SCxFQUFBRyxJQUNBOU0sR0FBQThNLElBQUE5TSxFQUFBOEIsRUFBQWdMLEVBQUErQixPQUFBN08s
RUFBQThCLElBQUFncEMsV0FDQWhwQyxFQUFBc2pCLEVBQUF6WSxFQUdBLElBQUF5a0MsR0FBQWhz
QixFQUFBclksU0FDQWtrQyxFQUFBdGtDLEVBQUFJLFFBQ0EsSUFBQS9NLEVBQUE4TSxJQUFBMGpD
LEVBQUE3akMsR0FBQSxDQUNBLElBQUE3SyxFQUFBLEVBQWlCQSxFQUFBNHBDLEVBQUFwaEMsT0FB
QXZJLFNBQXVCRCxFQUFPNHBDLEVBQUFwaEMsT0FBQXhJLEdBQUFzakIsRUFBQXpZLEVBQy9DM00s
R0FBQThCLEVBQUFnTCxFQUFBK0IsT0FBQTdPLEVBQUE4QixJQUFBd0ksU0FBd0R4SSxFQUFBc2pC
LEVBQUF6WSxHQUV4RDlNLEVBQUE4TSxFQUFBSyxNQUNBaE4sRUFBQW94QyxJQUFBcHhDLEVBQUFp
eEMsR0FDQUcsSUFBQUgsR0FBMkJFLEVBQUFsa0MsRUFBQW1rQyxFQUFBSCxFQUFBbEIsRUFBQXVC
LEdBQ3BCdHhDLEVBQUFpeEMsSUFDUGp4QyxFQUFBb2xCLEVBQUFwWSxPQUFtQ2toQyxFQUFBNXBC
LGVBQUFyWCxFQUFBLElBQ25DNGpDLEVBQUE1akMsRUFBQSxLQUFBZ2tDLEVBQUEsRUFBQUEsRUFB
QWx2QyxPQUFBLEVBQUFndUMsSUFDTy92QyxFQUFBb3hDLEdBQ1BKLEVBQUEvakMsRUFBQW1rQyxF
QUFBLEVBQUFBLEVBQUFydkMsT0FBQSxHQUNPL0IsRUFBQW9sQixFQUFBcFksT0FDUGtoQyxFQUFB
NXBCLGVBQUFyWCxFQUFBLElBRUttWSxFQUFBcFksT0FBQUwsRUFBQUssTUFDTGtoQyxFQUFBNXBC
LGVBQUFyWCxFQUFBTixFQUFBSyxNQUVBaE4sRUFBQThNLElBQ0E5TSxFQUFBOEIsRUFBQWdMLEVB
QUErQixPQUFBN08sRUFBQThCLElBQUF1d0MsWUFBMkR2d0MsRUFBQXNqQixFQUFBelksSUFJM0Qs
UUFBQTJsQyxHQUFBM2xDLEVBQUFpSixFQUFBMjhCLEdBR0EsR0FBQXR5QyxFQUFBc3lDLElBQUF2
eUMsRUFBQTJNLEVBQUFuQyxRQUNBbUMsRUFBQW5DLE9BQUFzQyxLQUFBeWpDLGNBQUEzNkIsTUFF
QSxRQUFBOVQsR0FBQSxFQUFxQkEsRUFBQThULEVBQUE3VCxTQUFrQkQsRUFDdkM4VCxFQUFBOVQs
R0FBQWdMLEtBQUErQixLQUFBazhCLE9BQUFuMUIsRUFBQTlULElBV0EsUUFBQXN3QyxHQUFBbmxD
LEVBQUFOLEVBQUFvakMsR0FDQSxHQUFBOXZDLEVBQUEwTSxFQUFBWSxZQUFBdk4sRUFBQTJNLEVB
QUFTLGNBR0EsTUFGQVQsR0FBQU0sTUFDQU4sRUFBQW9ZLG9CQUFBLEdBQ0EsQ0FPQXBZLEdBQUFN
LEtBQ0EsSUFBQUosR0FBQUYsRUFBQUUsSUFDQUMsRUFBQUgsRUFBQUcsS0FDQUMsRUFBQUosRUFB
QUksUUFDQSxJQUFBL00sRUFBQThNLEtBQ0E5TSxFQUFBOEIsRUFBQWdMLEVBQUErQixPQUFBN08s
RUFBQThCLElBQUE0b0MsT0FBc0Q1b0MsRUFBQTZLLEdBQUEsR0FDdEQzTSxFQUFBOEIsRUFBQTZL
LEVBQUFvVixvQkFHQSxNQURBc3VCLEdBQUExakMsRUFBQW9qQyxJQUNBLENBR0EsSUFBQS92QyxF
QUFBNk0sR0FBQSxDQUNBLEdBQUE3TSxFQUFBK00sR0FFQSxHQUFBRSxFQUFBdWxDLGdCQUVTLENB
R1QsT0FGQUMsSUFBQSxFQUNBdHdCLEVBQUFsVixFQUFBeWxDLFdBQ0E1VSxFQUFBLEVBQTJCQSxF
QUFBL3dCLEVBQUFoTCxPQUF1Qis3QixJQUFBLENBQ2xELElBQUEzYixJQUFBaXdCLEVBQUFqd0Is
RUFBQXBWLEVBQUErd0IsR0FBQWlTLEdBQUEsQ0FDQTBDLEdBQUEsQ0FDQSxPQUVBdHdCLElBQUFr
QyxZQUlBLElBQUFvdUIsR0FBQXR3QixFQVNBLGFBdEJBK3RCLEdBQUF2akMsRUFBQUksRUFBQWdq
QyxFQTBCQSxJQUFBL3ZDLEVBQUE4TSxHQUNBLE9BQUF0SyxLQUFBc0ssR0FDQSxJQUFBNmxDLEVB
QUFud0MsR0FBQSxDQUNBMnRDLEVBQUF4akMsRUFBQW9qQyxFQUNBLFlBSUs5aUMsR0FBQUgsT0FB
QUgsRUFBQUssT0FDTEMsRUFBQUgsS0FBQUgsRUFBQUssS0FFQSxVQTllQSxHQUFBbEwsR0FBQTJU
LEVBQ0FpMkIsS0FFQXZpQixFQUFBc21CLEVBQUF0bUIsUUFDQStrQixFQUFBdUIsRUFBQXZCLE9B
RUEsS0FBQXBzQyxFQUFBLEVBQWFBLEVBQUFxc0MsR0FBQXBzQyxTQUFrQkQsRUFFL0IsSUFEQTRw
QyxFQUFBeUMsR0FBQXJzQyxPQUNBMlQsRUFBQSxFQUFlQSxFQUFBMFQsRUFBQXBuQixTQUFvQjBU
LEVBQ25DelYsRUFBQW1wQixFQUFBMVQsR0FBQTA0QixHQUFBcnNDLE1BQ0E0cEMsRUFBQXlDLEdB
QUFyc0MsSUFBQTZFLEtBQUF3aUIsRUFBQTFULEdBQUEwNEIsR0FBQXJzQyxJQTJCQSxJQXNZQTZ3
QyxHQUFBcHhDLEVBQUEsZ0RBaUZBLGlCQUFBNmpCLEVBQUF6WSxFQUFBaUgsRUFBQTA5QixFQUFB
cDJCLEVBQUFDLEdBQ0EsR0FBQXRiLEVBQUE4TSxHQUVBLFlBREEzTSxFQUFBb2xCLElBQTRCMnJC
LEVBQUEzckIsR0FJNUIsSUFBQXd0QixJQUFBLEVBQ0E3QyxJQUVBLElBQUFsd0MsRUFBQXVsQixH
QUVBd3RCLEdBQUEsRUFDQTlDLEVBQUFuakMsRUFBQW9qQyxFQUFBNzBCLEVBQUFDLE9BQ0ssQ0FD
TCxHQUFBMDNCLEdBQUE3eUMsRUFBQW9sQixFQUFBbU4sU0FDQSxLQUFBc2dCLEdBQUFodUIsR0FB
QU8sRUFBQXpZLEdBRUF3bEMsRUFBQS9zQixFQUFBelksRUFBQW9qQyxFQUFBdUIsT0FDTyxDQUNQ
LEdBQUF1QixFQUFBLENBUUEsR0FKQSxJQUFBenRCLEVBQUFtTixVQUFBbk4sRUFBQTB0QixhQUFB
MU0sTUFDQWhoQixFQUFBK0IsZ0JBQUFpZixJQUNBeHlCLEdBQUEsR0FFQTNULEVBQUEyVCxJQUNB
dytCLEVBQUFodEIsRUFBQXpZLEVBQUFvakMsR0FFQSxNQURBdUMsR0FBQTNsQyxFQUFBb2pDLEdB
QUEsR0FDQTNxQixDQWFBQSxHQUFBc3FCLEVBQUF0cUIsR0FHQSxHQUFBMnRCLEdBQUEzdEIsRUFB
QW5ZLElBQ0ErbEMsRUFBQTlFLEVBQUFoc0IsV0FBQTZ3QixFQVdBLElBVkFqRCxFQUNBbmpDLEVB
Q0FvakMsRUFJQWdELEVBQUE1Z0IsU0FBQSxLQUFBNmdCLEVBQ0E5RSxFQUFBN3BCLFlBQUEwdUIs
SUFHQS95QyxFQUFBMk0sRUFBQW5DLFFBQUEsQ0FJQSxJQURBLEdBQUFtbUMsR0FBQWhrQyxFQUFB
bkMsT0FDQW1tQyxHQUNBQSxFQUFBMWpDLElBQUFOLEVBQUFNLElBQ0EwakMsSUFBQW5tQyxNQUVB
LElBQUFnbUMsRUFBQTdqQyxHQUNBLE9BQUE3SyxHQUFBLEVBQTJCQSxFQUFBNHBDLEVBQUEvcEMs
T0FBQUksU0FBdUJELEVBQ2xENHBDLEVBQUEvcEMsT0FBQUcsR0FBQTBqQixHQUFBN1ksRUFBQW5D
LFFBS0F4SyxFQUFBZ3pDLEdBQ0FoQyxFQUFBZ0MsR0FBQTV0QixHQUFBLEtBQ1NwbEIsRUFBQW9s
QixFQUFBdlksTUFDVGtrQyxFQUFBM3JCLElBTUEsTUFEQWt0QixHQUFBM2xDLEVBQUFvakMsRUFB
QTZDLEdBQ0FqbUMsRUFBQU0sT0E2bURpQ2loQyxXQUFBL2tCLGFBT2pDOHBCLEdBQUExeEMsRUFB
QSw0Q0FHQXNsQixLQUVBN0QsU0FBQW9LLGlCQUFBLDZCQUNBLEdBQUF6WixHQUFBcVAsU0FBQWtM
LGFBQ0F2YSxNQUFBdS9CLFFBQ0FwZCxHQUFBbmlCLEVBQUEsVUFLQSxJQUFBdy9CLEtBQ0FqdEIs
U0FBQSxTQUFBdlMsRUFBQTRoQixFQUFBNW9CLEdBQ0EsY0FBQUEsRUFBQUUsSUFBQSxDQUNBLEdB
QUF3akIsR0FBQSxXQUNBaUYsR0FBQTNoQixFQUFBNGhCLEVBQUE1b0IsRUFBQU8sU0FFQW1qQixN
QUVBeEQsSUFBQXNhLEtBQ0EzMUIsV0FBQTZlLEVBQUEsR0FFQTFjLEVBQUF5L0IsYUFBQTF4QyxJ
QUFBbEIsS0FBQW1ULEVBQUFoSyxRQUFBK3JCLFNBQ0ssYUFBQS9vQixFQUFBRSxLQUFBb21DLEdB
QUF0L0IsRUFBQTVKLFNBQ0w0SixFQUFBd2EsWUFBQW9ILEVBQUFuUCxVQUNBbVAsRUFBQW5QLFVB
QUFxRyxPQUtBOVksRUFBQXlaLGlCQUFBLFNBQUF5SSxJQUNBdVIsS0FDQXp6QixFQUFBeVosaUJB
QUEsbUJBQUF3SSxJQUNBamlCLEVBQUF5WixpQkFBQSxpQkFBQXlJLEtBR0FoUCxLQUNBbFQsRUFB
QXUvQixRQUFBLE1BS0FqdEIsaUJBQUEsU0FBQXRTLEVBQUE0aEIsRUFBQTVvQixHQUNBLGNBQUFB
LEVBQUFFLElBQUEsQ0FDQXlvQixHQUFBM2hCLEVBQUE0aEIsRUFBQTVvQixFQUFBTyxRQUtBLElB
QUFtbUMsR0FBQTEvQixFQUFBeS9CLFdBQ0F6L0IsRUFBQXkvQixhQUFBMXhDLElBQUFsQixLQUFB
bVQsRUFBQWhLLFFBQUErckIsS0FDQXFQLEtBQUEsU0FBQXVPLEVBQUF4eEMsR0FBMkMsT0FBQW1D
LEVBQUFxdkMsRUFBQUQsRUFBQXZ4QyxPQUMzQ2cwQixHQUFBbmlCLEVBQUEsYUF1RUEwZ0IsSUFD
QXh4QixLQUFBLFNBQUE4USxFQUFBK1EsRUFBQS9YLEdBQ0EsR0FBQWhOLEdBQUEra0IsRUFBQS9r
QixLQUVBZ04sR0FBQXVwQixHQUFBdnBCLEVBQ0EsSUFBQTRtQyxHQUFBNW1DLEVBQUFHLE1BQUFI
LEVBQUFHLEtBQUF1bEIsV0FDQW1oQixFQUFBNy9CLEVBQUE4L0IsbUJBQ0EsU0FBQTkvQixFQUFB
MGEsTUFBQXFsQixRQUFBLEdBQUEvL0IsRUFBQTBhLE1BQUFxbEIsT0FDQS96QyxJQUFBNHpDLEdB
Q0E1bUMsRUFBQUcsS0FBQXVuQixNQUFBLEVBQ0FwQyxHQUFBdGxCLEVBQUEsV0FDQWdILEVBQUEw
YSxNQUFBcWxCLFFBQUFGLEtBR0E3L0IsRUFBQTBhLE1BQUFxbEIsUUFBQS96QyxFQUFBNnpDLEVB
QUEsUUFJQWxwQyxPQUFBLFNBQUFxSixFQUFBK1EsRUFBQS9YLEdBQ0EsR0FBQWhOLEdBQUEra0Is
RUFBQS9rQixLQUlBQSxLQUhBK2tCLEVBQUFxQixXQUlBcFosRUFBQXVwQixHQUFBdnBCLEdBQ0FB
LEVBQUFHLE1BQUFILEVBQUFHLEtBQUF1bEIsWUFFQTFsQixFQUFBRyxLQUFBdW5CLE1BQUEsRUFD
QTEwQixFQUNBc3lCLEdBQUF0bEIsRUFBQSxXQUNBZ0gsRUFBQTBhLE1BQUFxbEIsUUFBQS8vQixF
QUFBOC9CLHFCQUdBaGYsR0FBQTluQixFQUFBLFdBQ0FnSCxFQUFBMGEsTUFBQXFsQixRQUFBLFVB
SUEvL0IsRUFBQTBhLE1BQUFxbEIsUUFBQS96QyxFQUFBZ1UsRUFBQTgvQixtQkFBQSxTQUlBRSxP
QUFBLFNBQ0FoZ0MsRUFDQTRoQixFQUNBNW9CLEVBQ0F5WSxFQUNBSyxHQUVBQSxJQUNBOVIsRUFB
QTBhLE1BQUFxbEIsUUFBQS8vQixFQUFBOC9CLHNCQUtBRyxJQUNBaDVCLE1BQUF1NEIsR0FDQTll
LFNBUUF3ZixJQUNBaHFDLEtBQUF6SSxPQUNBOHhCLE9BQUFwbkIsUUFDQThqQixJQUFBOWpCLFFB
Q0Fnb0MsS0FBQTF5QyxPQUNBMkksS0FBQTNJLE9BQ0FveEIsV0FBQXB4QixPQUNBeXpCLFdBQUF6
ekIsT0FDQXF4QixhQUFBcnhCLE9BQ0EyekIsYUFBQTN6QixPQUNBc3hCLGlCQUFBdHhCLE9BQ0Ew
ekIsaUJBQUExekIsT0FDQXV4QixZQUFBdnhCLE9BQ0F5eEIsa0JBQUF6eEIsT0FDQXd4QixjQUFB
eHhCLE9BQ0FpeUIsVUFBQXJCLE9BQUE1d0IsT0FBQTNCLFNBc0RBczBDLElBQ0FscUMsS0FBQSxh
QUNBRCxNQUFBaXFDLEdBQ0E5Z0MsVUFBQSxFQUVBZSxPQUFBLFNBQUFxRyxHQUNBLEdBQUFvd0Is
R0FBQXhsQyxLQUVBZ0ksRUFBQWhJLEtBQUFvSCxTQUFBc0ksZUFDQSxJQUFBMUgsSUFLQUEsSUFB
QTZVLE9BQUEsU0FBQTVkLEdBQTZDLE1BQUFBLEdBQUE2SSxLQUFBa1ksR0FBQS9nQixLQUU3QytJ
LEVBQUFoTCxRQUFBLENBYUEsR0FBQSt4QyxHQUFBL3VDLEtBQUErdUMsS0FZQXRkLEVBQUF6cEIs
RUFBQSxFQUlBLElBQUEwcEIsR0FBQTF4QixLQUFBcVAsUUFDQSxNQUFBb2lCLEVBS0EsSUFBQS9y
QixHQUFBMHJCLEdBQUFLLEVBRUEsS0FBQS9yQixFQUNBLE1BQUErckIsRUFHQSxJQUFBenhCLEtB
QUFpdkMsU0FDQSxNQUFBemQsSUFBQXBjLEVBQUFxYyxFQU1BLElBQUF0ckIsR0FBQSxnQkFBQW5H
LEtBQUEsUUFDQTBGLEdBQUFqSSxJQUFBLE1BQUFpSSxFQUFBakksSUFDQWlJLEVBQUE4QyxVQUNB
ckMsRUFBQSxVQUNBQSxFQUFBVCxFQUFBb0MsSUFDQTFNLEVBQUFzSyxFQUFBakksS0FDQSxJQUFB
cEIsT0FBQXFKLEVBQUFqSSxLQUFBSCxRQUFBNkksR0FBQVQsRUFBQWpJLElBQUEwSSxFQUFBVCxF
QUFBakksSUFDQWlJLEVBQUFqSSxHQUVBLElBQUFzSyxJQUFBckMsRUFBQXFDLE9BQUFyQyxFQUFB
cUMsVUFBOEN1bEIsV0FBQWdFLEdBQUF0eEIsTUFDOUNrdkMsRUFBQWx2QyxLQUFBK1AsT0FDQTZo
QixFQUFBUixHQUFBOGQsRUFRQSxJQUpBeHBDLEVBQUFxQyxLQUFBekMsWUFBQUksRUFBQXFDLEtB
QUF6QyxXQUFBMDZCLEtBQUEsU0FBQTNxQixHQUEwRSxlQUFBQSxFQUFBdlEsU0FDMUVZLEVBQUFx
QyxLQUFBdW5CLE1BQUEsR0FJQXNDLEdBQ0FBLEVBQUE3cEIsT0FDQTRwQixHQUFBanNCLEVBQUFr
c0IsS0FDQTVSLEdBQUE0UixHQUNBLENBR0EsR0FBQW5QLEdBQUFtUCxNQUFBN3BCLEtBQUF1bEIs
V0FBQTV1QixLQUFxRXFKLEdBRXJFLGVBQUFnbkMsRUFPQSxNQUxBL3VDLE1BQUFpdkMsVUFBQSxF
QUNBcmxDLEdBQUE2WSxFQUFBLHdCQUNBK2lCLEVBQUF5SixVQUFBLEVBQ0F6SixFQUFBdDVCLGlC
QUVBc2xCLEdBQUFwYyxFQUFBcWMsRUFDTyxlQUFBc2QsRUFBQSxDQUNQLEdBQUEvdUIsR0FBQXRh
LEdBQ0EsTUFBQXdwQyxFQUVBLElBQUFDLEdBQ0F2ZixFQUFBLFdBQXdDdWYsSUFDeEN2bEMsSUFB
QTdCLEVBQUEsYUFBQTZuQixHQUNBaG1CLEdBQUE3QixFQUFBLGlCQUFBNm5CLEdBQ0FobUIsR0FB
QTZZLEVBQUEsc0JBQUFpTixHQUFnRXlmLEVBQUF6ZixLQUloRSxNQUFBK0IsTUFpQkE1c0IsR0FB
QW5HLEdBQ0FvSixJQUFBekwsT0FDQSt5QyxVQUFBL3lDLFFBQ0N5eUMsVUFFRGpxQyxJQUFBa3FD
LElBRUEsSUFBQU0sS0FDQXhxQyxTQUVBa0ssT0FBQSxTQUFBcUcsR0FRQSxPQVBBdE4sR0FBQTlI
LEtBQUE4SCxLQUFBOUgsS0FBQXFQLE9BQUF0SCxLQUFBRCxLQUFBLE9BQ0FuTCxFQUFBakMsT0FB
QWtDLE9BQUEsTUFDQTB5QyxFQUFBdHZDLEtBQUFzdkMsYUFBQXR2QyxLQUFBZ0ksU0FDQXVuQyxF
QUFBdnZDLEtBQUFvUSxPQUFBakosWUFDQWEsRUFBQWhJLEtBQUFnSSxZQUNBd25DLEVBQUFsZSxH
QUFBdHhCLE1BRUFqRCxFQUFBLEVBQW1CQSxFQUFBd3lDLEVBQUF2eUMsT0FBd0JELElBQUEsQ0FD
M0MsR0FBQWtDLEdBQUFzd0MsRUFBQXh5QyxFQUNBLElBQUFrQyxFQUFBNkksSUFDQSxTQUFBN0ks
RUFBQXhCLEtBQUEsSUFBQXBCLE9BQUE0QyxFQUFBeEIsS0FBQUgsUUFBQSxXQUNBMEssRUFBQXBH
LEtBQUEzQyxHQUNBdEMsRUFBQXNDLEVBQUF4QixLQUFBd0IsR0FDV0EsRUFBQThJLE9BQUE5SSxF
QUFBOEksVUFBdUJ1bEIsV0FBQWtpQixRQVNsQyxHQUFBRixFQUFBLENBR0EsT0FGQUcsTUFDQUMs
S0FDQTNXLEVBQUEsRUFBdUJBLEVBQUF1VyxFQUFBdHlDLE9BQTJCKzdCLElBQUEsQ0FDbEQsR0FB
QTRXLEdBQUFMLEVBQUF2VyxFQUNBNFcsR0FBQTVuQyxLQUFBdWxCLFdBQUFraUIsRUFDQUcsRUFB
QTVuQyxLQUFBcXFCLElBQUF1ZCxFQUFBem5DLElBQUErcEIsd0JBQ0F0MUIsRUFBQWd6QyxFQUFB
bHlDLEtBQ0FneUMsRUFBQTd0QyxLQUFBK3RDLEdBRUFELEVBQUE5dEMsS0FBQSt0QyxHQUdBM3ZD
LEtBQUF5dkMsS0FBQXI2QixFQUFBdE4sRUFBQSxLQUFBMm5DLEdBQ0F6dkMsS0FBQTB2QyxVQUdB
LE1BQUF0NkIsR0FBQXROLEVBQUEsS0FBQUUsSUFHQTRuQyxhQUFBLFdBRUE1dkMsS0FBQSttQyxV
QUNBL21DLEtBQUErUCxPQUNBL1AsS0FBQXl2QyxNQUNBLEdBQ0EsR0FFQXp2QyxLQUFBK1AsT0FB
QS9QLEtBQUF5dkMsTUFHQUksUUFBQSxXQUNBLEdBQUE3bkMsR0FBQWhJLEtBQUFzdkMsYUFDQUYs
RUFBQXB2QyxLQUFBb3ZDLFlBQUFwdkMsS0FBQThFLE1BQUEsWUFDQSxJQUFBa0QsRUFBQWhMLFFB
QUFnRCxLQUFBOHZDLFFBQUE5bkMsRUFBQSxHQUFBRSxJQUFBa25DLEdBQUEsQ0FNQXBuQyxFQUFB
Mk0sUUFBQWtkLElBQ0E3cEIsRUFBQTJNLFFBQUFvZCxJQUNBL3BCLEVBQUEyTSxRQUFBdWQsR0FH
QSxJQUFBNmQsR0FBQTl4QixTQUFBOHhCLElBQ0FBLEdBQUFDLFlBRUFob0MsR0FBQTJNLFFBQUEs
U0FBQTFWLEdBQ0EsR0FBQUEsRUFBQThJLEtBQUEwcUIsTUFBQSxDQUNBLEdBQUE3akIsR0FBQTNQ
LEVBQUFpSixJQUNBOGtCLEVBQUFwZSxFQUFBMGEsS0FDQTJCLElBQUFyYyxFQUFBd2dDLEdBQ0Fw
aUIsRUFBQTBGLFVBQUExRixFQUFBMkYsZ0JBQUEzRixFQUFBNEYsbUJBQUEsR0FDQWhrQixFQUFB
eVosaUJBQUFxRCxHQUFBOWMsRUFBQWtqQixRQUFBLFFBQUF4RyxHQUFBN3JCLEdBQ0FBLElBQUEs
YUFBQWlCLEtBQUFqQixFQUFBd3dDLGdCQUNBcmhDLEVBQUEyWixvQkFBQW1ELEdBQUFKLEdBQ0Ex
YyxFQUFBa2pCLFFBQUEsS0FDQTNHLEdBQUF2YyxFQUFBd2dDLFdBT0F2OEIsU0FDQWk5QixRQUFB
LFNBQUFsaEMsRUFBQXdnQyxHQUVBLElBQUFuRixHQUNBLFFBR0EsSUFBQWpxQyxLQUFBa3dDLFNB
Q0EsTUFBQWx3QyxNQUFBa3dDLFFBT0EsSUFBQUMsR0FBQXZoQyxFQUFBb3lCLFdBQ0FweUIsR0FB
QWdVLG9CQUNBaFUsRUFBQWdVLG1CQUFBak8sUUFBQSxTQUFBK04sR0FBc0Q4SCxHQUFBMmxCLEVB
QUF6dEIsS0FFdEQySCxHQUFBOGxCLEVBQUFmLEdBQ0FlLEVBQUE3bUIsTUFBQXFsQixRQUFBLE9B
Q0EzdUMsS0FBQThPLElBQUF1USxZQUFBOHdCLEVBQ0EsSUFBQXB2QyxHQUFBd3FCLEdBQUE0a0Is
RUFFQSxPQURBbndDLE1BQUE4TyxJQUFBc1EsWUFBQSt3QixHQUNBbndDLEtBQUFrd0MsU0FBQW52
QyxFQUFBNHJCLGdCQWlDQXlqQixJQUNBcEIsY0FDQUssbUJBTUF0MEIsSUFBQS9aLE9BQUE4WCxl
QUNBaUMsR0FBQS9aLE9BQUEyVyxpQkFDQW9ELEdBQUEvWixPQUFBNmdDLGtCQUNBOW1CLEdBQUEv
WixPQUFBMFcsbUJBQ0FxRCxHQUFBL1osT0FBQStjLG9CQUdBcmYsRUFBQXFjLEdBQUFuVyxRQUFB
VSxXQUFBdXBDLElBQ0Fud0MsRUFBQXFjLEdBQUFuVyxRQUFBNFYsV0FBQTQxQixJQUdBcjFCLEdB
QUF0USxVQUFBczhCLFVBQUE3bEMsR0FBQXVwQyxHQUFBMXJDLEVBR0FnYyxHQUFBdFEsVUFBQW03
QixPQUFBLFNBQ0FoM0IsRUFDQUMsR0FHQSxNQURBRCxNQUFBMU4sR0FBQW1kLEdBQUF6UCxPQUFB
NVQsR0FDQTJULEdBQUEzTyxLQUFBNE8sRUFBQUMsSUFLQXBDLFdBQUEsV0FDQXpMLEdBQUEwUSxV
QUNBQSxJQUNBQSxHQUFBQyxLQUFBLE9BQUFvSixLQWtCQyxFQWFELElBa01BczFCLElBbE1BeGMs
S0FBQTN5QixJQVJBLFNBQUFvdkMsRUFBQUMsR0FDQSxHQUFBQyxHQUFBdnlCLFNBQUEzSSxjQUFB
LE1BRUEsT0FEQWs3QixHQUFBdlAsVUFBQSxXQUFBcVAsRUFBQSxNQUNBRSxFQUFBdlAsVUFBQTNq
QyxRQUFBaXpDLEdBQUEsR0FLQSxjQUlBdGQsR0FBQSx3QkFDQXdkLEdBQUEseUJBRUF6ZCxHQUFB
cjFCLEVBQUEsU0FBQW0xQixHQUNBLEdBQUE0ZCxHQUFBNWQsRUFBQSxHQUFBcEksUUFBQStsQixH
QUFBLFFBQ0FFLEVBQUE3ZCxFQUFBLEdBQUFwSSxRQUFBK2xCLEdBQUEsT0FDQSxXQUFBcmIsUUFB
QXNiLEVBQUEsZ0JBQUFDLEVBQUEsT0FtRUFDLElBQ0FuVixZQUFBLGVBQ0FwSSxpQkFDQUUsWUF5
Q0FzZCxJQUNBcFYsWUFBQSxlQUNBcEksY0FBQUcsR0FDQUQsUUFBQUcsSUFHQW9kLElBQ0FGLEdB
Q0FDLElBbUJBRSxJQUNBbDdCLFNBQ0E1TixRQUNBMHJCLFNBS0FnQixHQUFBbjRCLEVBQ0EsNkZB
TUFzNEIsR0FBQXQ0QixFQUNBLDJEQUtBazZCLEdBQUFsNkIsRUFDQSxtU0FTQXcwQyxJQUNBdmMs
WUFBQSxFQUNBclEsUUFBQTBzQixHQUNBeHJDLFdBQUF5ckMsR0FDQXhaLFlBQ0E1QyxjQUNBN2Is
ZUFDQWdjLG9CQUNBbmQsaUJBQ0FELG1CQUNBK2pCLFdBcnFQQSxTQUFBclgsR0FDQSxNQUFBQSxH
QUFBNnNCLE9BQUEsU0FBQXR4QyxFQUFBMGtCLEdBQ0EsTUFBQTFrQixHQUFBOEUsT0FBQTRmLEVB
QUFvWCxxQkFDR2hhLEtBQUEsTUFrcVBIcXZCLEtBT0FJLElBQ0FDLE9BQUEsU0FBQXhkLEdBR0Es
TUFGQTBjLFFBQUFweUIsU0FBQTNJLGNBQUEsT0FDQSs2QixHQUFBcFAsVUFBQXROLEVBQ0EwYyxH
QUFBN3dCLGNBZ0JBNHhCLEdBQUEsa0JBQ0FDLEdBQUEsUUFDQUMsSUFFQSxhQUFBdDhCLE9BRUEs
YUFBQUEsT0FFQSxpQkFBQUEsUUFFQXdoQixHQUFBLEdBQUFwQixRQUNBLFFBQUFnYyxHQUFBcDhC
LE9BQ0EsV0FBQXE4QixHQUFBcjhCLE9BQUEsV0FDQXM4QixHQUFBN3ZCLEtBQUEsWUFLQTh2QixH
QUFBLHdCQUNBQyxHQUFBLE9BQUFELEdBQUEsUUFBQUEsR0FBQSxJQUNBbGIsR0FBQSxHQUFBakIs
UUFBQSxLQUFBb2MsSUFDQWpiLEdBQUEsYUFDQWhCLEdBQUEsR0FBQUgsUUFBQSxRQUFBb2MsR0FB
QSxVQUNBdmIsR0FBQSxxQkFDQU4sR0FBQSxRQUNBRyxHQUFBLFFBRUFjLElBQUEsQ0FDQSxLQUFB
bE0sUUFBQSxrQkFBQXJHLEVBQUFvdEIsR0FDQTdhLEdBQUEsS0FBQTZhLEdBSUEsSUFrU0FuYSxJ
QUNBeEUsR0FDQTRFLEdBQ0FDLEdBQ0FDLEdBQ0FSLEdBQ0FJLEdBQ0FDLEdBd2pCQThELEdBQ0FH
LEdBbDJCQTNHLEdBQUF2NEIsRUFBQSw0QkFDQTI0QixNQUVBbEIsSUFDQXlkLE9BQU8sSUFDUEMs
T0FBTyxJQUNQQyxTQUFTLElBQ1RDLFFBQVEsSUFDUkMsUUFBUSxNQUVSOWQsR0FBQSx3QkFDQUQs
R0FBQSw0QkFHQWdlLEdBQUF2MUMsRUFBQSxtQkFDQWc1QixHQUFBLFNBQUExdEIsRUFBQTZyQixH
QUFxRCxNQUFBN3JCLElBQUFpcUMsR0FBQWpxQyxJQUFBLE9BQUE2ckIsRUFBQSxJQXVRckRzSCxH
QUFBLFlBQ0FOLEdBQUEsWUFDQVosR0FBQSwyQkFDQUksR0FBQSw2Q0FFQWdCLEdBQUEsU0FDQUos
R0FBQSxjQUNBRCxHQUFBLFdBRUFsQixHQUFBajhCLEVBQUF1ekMsR0FBQUMsUUFnaUJBL1YsR0FB
QSxlQUNBQyxHQUFBLFVBb0NBRyxHQUFBNzlCLEVBQUFrK0IsSUE0SEFZLEdBQUEsK0NBQ0FGLEdB
QUEsK0ZBR0E5akIsSUFDQXU1QixJQUFBLEdBQ0FDLElBQUEsRUFDQS9rQixNQUFBLEdBQ0FnbEIs
TUFBQSxHQUNBQyxHQUFBLEdBQ0E3ZixLQUFBLEdBQ0E4ZixNQUFBLEdBQ0FDLEtBQUEsR0FDQTFK
LFFBQUEsT0FNQTJKLEdBQUEsU0FBQS9YLEdBQXFDLFlBQUFBLEVBQUEsaUJBRXJDb0MsSUFDQTRW
LEtBQUEsNEJBQ0FDLFFBQUEsMkJBQ0FDLEtBQUFILEdBQUEsMENBQ0FJLEtBQUFKLEdBQUEsbUJB
Q0E1VCxNQUFBNFQsR0FBQSxvQkFDQUssSUFBQUwsR0FBQSxrQkFDQU0sS0FBQU4sR0FBQSxtQkFD
QWhnQixLQUFBZ2dCLEdBQUEsNkNBQ0FPLE9BQUFQLEdBQUEsNkNBQ0FGLE1BQUFFLEdBQUEsOENB
NEdBUSxJQUNBNXBDLE1BQ0FwTCxLQUFBbS9CLEdBQ0E4VixNQUFBaDBDLEdBS0F1K0IsR0FBQSxT
QUFBMTRCLEdBQ0E1RSxLQUFBNEUsVUFDQTVFLEtBQUE2a0IsS0FBQWpnQixFQUFBaWdCLE1BQUFa
LEdBQ0Fqa0IsS0FBQTAzQixXQUFBdlQsR0FBQXZmLEVBQUF3ZixRQUFBLGlCQUNBcGtCLEtBQUE2
K0IsV0FBQTFhLEdBQUF2ZixFQUFBd2YsUUFBQSxXQUNBcGtCLEtBQUFzRixXQUFBNUcsT0FBb0Nv
MEMsSUFBQWx1QyxFQUFBVSxXQUNwQyxJQUFBcVMsR0FBQS9TLEVBQUErUyxlQUFBaWQsRUFDQTUw
QixNQUFBNi9CLGVBQUEsU0FBQWp4QixHQUF1QyxPQUFBK0ksRUFBQS9JLEVBQUE5RyxNQUN2QzlI
LEtBQUFvK0IsT0FBQSxFQUNBcCtCLEtBQUEyVyxvQkFvcUJBcThCLElBclBBLEdBQUE1ZCxRQUFB
LHVNQUlBdDRCLE1BQUEsS0FBQTJrQixLQUFBLGtCQUdBLEdBQUEyVCxRQUFBLDJCQUVBdDRCLE1B
QUEsS0FBQTJrQixLQUFBLDhDQXFMQSxTQUFBd3hCLEdBQ0EsZ0JBQUFqQyxHQUNBLFFBQUF0USxH
QUNBM0osRUFDQW55QixHQUVBLEdBQUFzdUMsR0FBQXg0QyxPQUFBa0MsT0FBQW8wQyxHQUNBelEs
S0FDQTRTLElBS0EsSUFKQUQsRUFBQXJ1QixLQUFBLFNBQUFYLEVBQUFrdkIsSUFDQUEsRUFBQUQs
RUFBQTVTLEdBQUEzK0IsS0FBQXNpQixJQUdBdGYsRUFBQSxDQUVBQSxFQUFBd2YsVUFDQTh1QixF
QUFBOXVCLFNBQ0E0c0IsRUFBQTVzQixhQUFBM2YsT0FBQUcsRUFBQXdmLFVBR0F4ZixFQUFBVSxh
QUNBNHRDLEVBQUE1dEMsV0FBQTVHLEVBQ0FoRSxPQUFBa0MsT0FBQW8wQyxFQUFBMXJDLFlBQ0FW
LEVBQUFVLFlBSUEsUUFBQTdILEtBQUFtSCxHQUNBLFlBQUFuSCxHQUFBLGVBQUFBLElBQ0F5MUMs
RUFBQXoxQyxHQUFBbUgsRUFBQW5ILElBS0EsR0FBQWtqQyxHQUFBc1MsRUFBQWxjLEVBQUFtYyxF
QU1BLE9BRkF2UyxHQUFBSixTQUNBSSxFQUFBd1MsT0FDQXhTLEVBR0EsT0FDQUQsVUFDQTJTLG1C
QUFBNVMsR0FBQUMsTUFVQSxTQUNBM0osRUFDQW55QixHQUVBLEdBQUF3NEIsR0FBQXRHLEdBQUFD
LEVBQUE1VCxPQUFBdmUsRUFDQTAyQixJQUFBOEIsRUFBQXg0QixFQUNBLElBQUE2aUIsR0FBQTBW
LEdBQUFDLEVBQUF4NEIsRUFDQSxRQUNBdzRCLE1BQ0FydUIsT0FBQTBZLEVBQUExWSxPQUNBNEgs
Z0JBQUE4USxFQUFBOVEsb0JBTUEyOEIsR0FBQU4sR0FBQWhDLElBQ0FxQyxHQUFBQyxHQUFBRCxt
QkFJQUUsR0FBQTUxQyxFQUFBLFNBQUF3SSxHQUNBLEdBQUF5SSxHQUFBeVAsR0FBQWxZLEVBQ0Es
T0FBQXlJLE1BQUFxeUIsWUFHQXVTLEdBQUF6NEIsR0FBQXRRLFVBQUFtN0IsTUFDQTdxQixJQUFB
dFEsVUFBQW03QixPQUFBLFNBQ0FoM0IsRUFDQUMsR0FLQSxJQUhBRCxLQUFBeVAsR0FBQXpQLE1B
R0FxUCxTQUFBOHhCLE1BQUFuaEMsSUFBQXFQLFNBQUF3MUIsZ0JBSUEsTUFBQXp6QyxLQUdBLElB
QUE0RSxHQUFBNUUsS0FBQW9ILFFBRUEsS0FBQXhDLEVBQUFtSyxPQUFBLENBQ0EsR0FBQWdvQixH
QUFBbnlCLEVBQUFteUIsUUFDQSxJQUFBQSxFQUNBLG1CQUFBQSxHQUNBLE1BQUFBLEVBQUFqVCxP
QUFBLEtBQ0FpVCxFQUFBd2MsR0FBQXhjLFFBU08sS0FBQUEsRUFBQXZKLFNBTVAsTUFBQXh0QixL
QUxBKzJCLEtBQUFrSyxjQU9LcnlCLEtBQ0xtb0IsRUFBQThKLEdBQUFqeUIsR0FFQSxJQUFBbW9C
LEVBQUEsQ0FNQSxHQUFBcFgsR0FBQTB6QixHQUFBdGMsR0FDQWxELHdCQUNBZixXQUFBbHVCLEVB
QUFrdUIsV0FDQWtGLFNBQUFwekIsRUFBQW96QixVQUNPaDRCLE1BQ1ArTyxFQUFBNFEsRUFBQTVR
LE9BQ0E0SCxFQUFBZ0osRUFBQWhKLGVBQ0EvUixHQUFBbUssU0FDQW5LLEVBQUErUixtQkFTQSxN
QUFBNjhCLElBQUEvM0MsS0FBQXVFLEtBQUE0TyxFQUFBQyxJQWlCQWtNLEdBQUEybEIsUUFBQTJT
LEdBRUE3NEMsRUFBQSxZRFg2QmlCLEtBQUtqQixFQUFxQkMsRUFBb0IsVUFJckVpNUMsS0FDQSxT
QUFVbjVDLEVBQVFvNUMsR0U5MVR4QixHQUFBbEMsRUFHQUEsR0FBQSxXQUNBLE1BQUF6eEMsUUFH
QSxLQUVBeXhDLEtBQUFqUixTQUFBLHFCQUFBb1QsTUFBQSxRQUNDLE1BQUFuMEMsR0FFRCxnQkFB
QXllLFVBQ0F1ekIsRUFBQXZ6QixRQU9BM2pCLEVBQUFvNUMsUUFBQWxDLEdGcTJUTW9DLE9BQ0Es
U0FBVXQ1QyxFQUFRbzVDLEdHejBUeEIsUUFBQUcsR0FBQTEyQyxFQUFBMjJDLEdBQ0EsR0FBQXpE
LEdBQUFsekMsRUFBQSxPQUNBNDJDLEVBQUE1MkMsRUFBQSxFQUNBLEtBQUE0MkMsRUFDQSxNQUFB
MUQsRUFHQSxJQUFBeUQsR0FBQSxrQkFBQUUsTUFBQSxDQUNBLEdBQUFDLEdBQUFDLEVBQUFILEVB
S0EsUUFBQTFELEdBQUE3ckMsT0FKQXV2QyxFQUFBSSxRQUFBejNDLElBQUEsU0FBQXFZLEdBQ0Es
dUJBQUFnL0IsRUFBQUssV0FBQXIvQixFQUFBLFNBR0F2USxRQUFBeXZDLElBQUF6eUIsS0FBQSxN
QUdBLE9BQUE2dUIsR0FBQTd1QixLQUFBLE1BSUEsUUFBQTB5QixHQUFBRyxHQUtBLHlFQUhBTCxL
QUFBTSxTQUFBQyxtQkFBQXI0QyxLQUFBQyxVQUFBazRDLE1BR0EsTUFyRUEvNUMsRUFBQW81QyxR
QUFBLFNBQUFJLEdBQ0EsR0FBQWwzQyxLQXdDQSxPQXJDQUEsR0FBQVgsU0FBQSxXQUNBLE1BQUE4
RCxNQUFBckQsSUFBQSxTQUFBUyxHQUNBLEdBQUFrekMsR0FBQXdELEVBQUExMkMsRUFBQTIyQyxF
QUNBLE9BQUEzMkMsR0FBQSxHQUNBLFVBQUFBLEVBQUEsT0FBbUNrekMsRUFBQSxJQUVuQ0EsSUFF
Rzd1QixLQUFBLEtBSUg1a0IsRUFBQUUsRUFBQSxTQUFBcW5CLEVBQUFxd0IsR0FDQSxnQkFBQXJ3
QixLQUNBQSxJQUFBLEtBQUFBLEVBQUEsS0FFQSxRQURBc3dCLE1BQ0EzM0MsRUFBQSxFQUFnQkEs
RUFBQWlELEtBQUFoRCxPQUFpQkQsSUFBQSxDQUNqQyxHQUFBb0osR0FBQW5HLEtBQUFqRCxHQUFB
LEVBQ0EsaUJBQUFvSixLQUNBdXVDLEVBQUF2dUMsSUFBQSxHQUVBLElBQUFwSixFQUFBLEVBQVlB
LEVBQUFxbkIsRUFBQXBuQixPQUFvQkQsSUFBQSxDQUNoQyxHQUFBSyxHQUFBZ25CLEVBQUFybkIs
RUFLQSxpQkFBQUssR0FBQSxJQUFBczNDLEVBQUF0M0MsRUFBQSxNQUNBcTNDLElBQUFyM0MsRUFB
QSxHQUNBQSxFQUFBLEdBQUFxM0MsRUFDS0EsSUFDTHIzQyxFQUFBLE9BQUFBLEVBQUEsYUFBQXEz
QyxFQUFBLEtBRUE1M0MsRUFBQStFLEtBQUF4RSxNQUlBUCxJSDg1VE04M0MsT0FDQSxTQUFVcDZD
LEVBQVFvNUMsR0l4OFR4QnA1QyxFQUFBbzVDLFFBQUEsU0FDQWlCLEVBQ0FDLEVBQ0FDLEVBQ0FD
LEVBQ0FDLEdBRUEsR0FBQUMsR0FDQUMsRUFBQU4sUUFHQTV2QyxRQUFBNHZDLEdBQUF6dEMsT0FD
QSxZQUFBbkMsR0FBQSxhQUFBQSxJQUNBaXdDLEVBQUFMLEVBQ0FNLEVBQUFOLEVBQUF6dEMsUUFJ
QSxJQUFBdkMsR0FBQSxrQkFBQXN3QyxHQUNBQSxFQUFBdHdDLFFBQ0Fzd0MsQ0FHQUwsS0FDQWp3
QyxFQUFBbUssT0FBQThsQyxFQUFBOWxDLE9BQ0FuSyxFQUFBK1IsZ0JBQUFrK0IsRUFBQWwrQixp
QkFJQW8rQixJQUNBbndDLEVBQUFpbkMsU0FBQWtKLEVBR0EsSUFBQWpyQyxFQTRCQSxJQTNCQWty
QyxHQUNBbHJDLEVBQUEsU0FBQTNCLEdBRUFBLEVBQ0FBLEdBQ0FuSSxLQUFBcVAsUUFBQXJQLEtB
QUFxUCxPQUFBdTVCLFlBQ0E1b0MsS0FBQXlGLFFBQUF6RixLQUFBeUYsT0FBQTRKLFFBQUFyUCxL
QUFBeUYsT0FBQTRKLE9BQUF1NUIsV0FFQXpnQyxHQUFBLG1CQUFBZ3RDLHVCQUNBaHRDLEVBQUFn
dEMscUJBR0FMLEdBQ0FBLEVBQUFyNUMsS0FBQXVFLEtBQUFtSSxHQUdBQSxLQUFBaXRDLHVCQUNB
anRDLEVBQUFpdEMsc0JBQUFoc0MsSUFBQTRyQyxJQUtBcHdDLEVBQUF5d0MsYUFBQXZyQyxHQUNH
Z3JDLElBQ0hockMsRUFBQWdyQyxHQUdBaHJDLEVBQUEsQ0FDQSxHQUFBaU0sR0FBQW5SLEVBQUFt
UixXQUNBNEQsRUFBQTVELEVBQ0FuUixFQUFBbUssT0FDQW5LLEVBQUEwd0MsWUFDQXYvQixHQU9B
blIsRUFBQW1LLE9BQUEsU0FBQXFHLEVBQUFqTixHQUVBLE1BREEyQixHQUFBck8sS0FBQTBNLEdB
Q0F3UixFQUFBdkUsRUFBQWpOLElBUEF2RCxFQUFBMHdDLGFBQUEzN0IsS0FDQWxWLE9BQUFrVixF
QUFBN1AsSUFDQUEsR0FVQSxPQUNBbXJDLFdBQ0F0QixRQUFBdUIsRUFDQXR3QyxhSnM5VE0yd0Ms
S0FDQSxTQUFVaDdDLEVBQVFvNUMsRUFBU2w1QyxHSzk5VGpDLFFBQUErNkMsR0FBQXpwQixHQUNB
LE9BQUFodkIsR0FBQSxFQUFpQkEsRUFBQWd2QixFQUFBL3VCLE9BQW1CRCxJQUFBLENBQ3BDLEdB
QUFLLEdBQUEydUIsRUFBQWh2QixHQUNBMDRDLEVBQUFDLEVBQUF0NEMsRUFBQStJLEdBQ0EsSUFB
QXN2QyxFQUFBLENBQ0FBLEVBQUE3MUIsTUFDQSxRQUFBbFAsR0FBQSxFQUFxQkEsRUFBQStrQyxF
QUFBRSxNQUFBMzRDLE9BQTJCMFQsSUFDaEQra0MsRUFBQUUsTUFBQWpsQyxHQUFBdFQsRUFBQXU0
QyxNQUFBamxDLEdBRUEsTUFBWUEsRUFBQXRULEVBQUF1NEMsTUFBQTM0QyxPQUF1QjBULElBQ25D
K2tDLEVBQUFFLE1BQUEvekMsS0FBQWcwQyxFQUFBeDRDLEVBQUF1NEMsTUFBQWpsQyxJQUVBK2tD
LEdBQUFFLE1BQUEzNEMsT0FBQUksRUFBQXU0QyxNQUFBMzRDLFNBQ0F5NEMsRUFBQUUsTUFBQTM0
QyxPQUFBSSxFQUFBdTRDLE1BQUEzNEMsWUFFSyxDQUVMLE9BREEyNEMsTUFDQWpsQyxFQUFBLEVB
QXFCQSxFQUFBdFQsRUFBQXU0QyxNQUFBMzRDLE9BQXVCMFQsSUFDNUNpbEMsRUFBQS96QyxLQUFB
ZzBDLEVBQUF4NEMsRUFBQXU0QyxNQUFBamxDLElBRUFnbEMsR0FBQXQ0QyxFQUFBK0ksS0FBOEJB
LEdBQUEvSSxFQUFBK0ksR0FBQXlaLEtBQUEsRUFBQSsxQixXQUs5QixRQUFBRSxLQUNBLEdBQUFD
LEdBQUE3M0IsU0FBQTNJLGNBQUEsUUFHQSxPQUZBd2dDLEdBQUE5d0MsS0FBQSxXQUNBK3dDLEVB
QUExMkIsWUFBQXkyQixHQUNBQSxFQUdBLFFBQUFGLEdBQUF0NkMsR0FDQSxHQUFBaUssR0FBQXJJ
LEVBQ0E0NEMsRUFBQTczQixTQUFBTSxjQUFBLDJCQUFBampCLEVBQUE2SyxHQUFBLEtBRUEsSUFB
QTJ2QyxFQUFBLENBQ0EsR0FBQUUsRUFHQSxNQUFBajNDLEVBT0ErMkMsR0FBQTM0QixXQUFBaUMs
WUFBQTAyQixHQUlBLEdBQUFHLEVBQUEsQ0FFQSxHQUFBQyxHQUFBQyxHQUNBTCxHQUFBTSxNQUFB
UCxLQUNBdHdDLEVBQUE4d0MsRUFBQXY0QyxLQUFBLEtBQUFnNEMsRUFBQUksR0FBQSxHQUNBaDVD
LEVBQUFtNUMsRUFBQXY0QyxLQUFBLEtBQUFnNEMsRUFBQUksR0FBQSxPQUdBSixHQUFBRCxJQUNB
dHdDLEVBQUErd0MsRUFBQXg0QyxLQUFBLEtBQUFnNEMsR0FDQTU0QyxFQUFBLFdBQ0E0NEMsRUFB
QTM0QixXQUFBaUMsWUFBQTAyQixHQU1BLE9BRkF2d0MsR0FBQWpLLEdBRUEsU0FBQWk3QyxHQUNB
LEdBQUFBLEVBQUEsQ0FDQSxHQUFBQSxFQUFBMXJCLE1BQUF2dkIsRUFBQXV2QixLQUNBMHJCLEVB
QUFDLFFBQUFsN0MsRUFBQWs3QyxPQUNBRCxFQUFBakMsWUFBQWg1QyxFQUFBZzVDLFVBQ0EsTUFF
QS91QyxHQUFBakssRUFBQWk3QyxPQUVBcjVDLE1BY0EsUUFBQW01QyxHQUFBUCxFQUFBejRDLEVB
QUFILEVBQUE1QixHQUNBLEdBQUF1dkIsR0FBQTN0QixFQUFBLEdBQUE1QixFQUFBdXZCLEdBRUEs
SUFBQWlyQixFQUFBVyxXQUNBWCxFQUFBVyxXQUFBbE4sUUFBQW1OLEVBQUFyNUMsRUFBQXd0QixP
QUNHLENBQ0gsR0FBQThyQixHQUFBMTRCLFNBQUFjLGVBQUE4TCxHQUNBK3JCLEVBQUFkLEVBQUFj
LFVBQ0FBLEdBQUF2NUMsSUFBQXk0QyxFQUFBMTJCLFlBQUF3M0IsRUFBQXY1QyxJQUNBdTVDLEVB
QUE1NUMsT0FDQTg0QyxFQUFBNzJCLGFBQUEwM0IsRUFBQUMsRUFBQXY1QyxJQUVBeTRDLEVBQUF6
MkIsWUFBQXMzQixJQUtBLFFBQUFMLEdBQUFSLEVBQUF4NkMsR0FDQSxHQUFBdXZCLEdBQUF2dkIs
RUFBQXV2QixJQUNBMnJCLEVBQUFsN0MsRUFBQWs3QyxNQUNBbEMsRUFBQWg1QyxFQUFBZzVDLFNB
Y0EsSUFaQWtDLEdBQ0FWLEVBQUFuM0IsYUFBQSxRQUFBNjNCLEdBR0FsQyxJQUdBenBCLEdBQUEs
bUJBQUF5cEIsRUFBQUYsUUFBQSxTQUVBdnBCLEdBQUEsdURBQXlEb3BCLEtBQUFNLFNBQUFDLG1C
QUFBcjRDLEtBQUFDLFVBQUFrNEMsTUFBQSxPQUd6RHdCLEVBQUFXLFdBQ0FYLEVBQUFXLFdBQUFs
TixRQUFBMWUsTUFDRyxDQUNILEtBQUFpckIsRUFBQW5JLFlBQ0FtSSxFQUFBMTJCLFlBQUEwMkIs
RUFBQW5JLFdBRUFtSSxHQUFBejJCLFlBQUFwQixTQUFBYyxlQUFBOEwsS0E5TUEsR0FBQWdzQixH
QUFBLG1CQUFBNTRCLFNBRUEsdUJBQUE2NEIsZ0JBQ0FELEVBQ0EsU0FBQUUsT0FDQSwwSkFLQSxJ
QUFBQyxHQUFBdjhDLEVBQUEsUUFlQWk3QyxLQVFBSyxFQUFBYyxJQUFBNTRCLFNBQUE4M0IsTUFB
QTkzQixTQUFBZzVCLHFCQUFBLFlBQ0FiLEVBQUEsS0FDQUQsRUFBQSxFQUNBSCxHQUFBLEVBQ0Fq
M0MsRUFBQSxhQUlBazNDLEVBQUEsbUJBQUEvVCxZQUFBLGVBQUF4aEMsS0FBQXdoQyxVQUFBQyxV
QUFBbGxDLGNBRUExQyxHQUFBbzVDLFFBQUEsU0FBQXVELEVBQUFyNkMsRUFBQXM2QyxHQUNBbkIs
RUFBQW1CLENBRUEsSUFBQXByQixHQUFBaXJCLEVBQUFFLEVBQUFyNkMsRUFHQSxPQUZBMjRDLEdB
QUF6cEIsR0FFQSxTQUFBcXJCLEdBRUEsT0FEQUMsTUFDQXQ2QyxFQUFBLEVBQW1CQSxFQUFBZ3ZC
LEVBQUEvdUIsT0FBbUJELElBQUEsQ0FDdEMsR0FBQUssR0FBQTJ1QixFQUFBaHZCLEdBQ0EwNEMs
RUFBQUMsRUFBQXQ0QyxFQUFBK0ksR0FDQXN2QyxHQUFBNzFCLE9BQ0F5M0IsRUFBQXoxQyxLQUFB
NnpDLEdBRUEyQixHQUNBcnJCLEVBQUFpckIsRUFBQUUsRUFBQUUsR0FDQTVCLEVBQUF6cEIsSUFF
QUEsSUFFQSxRQUFBaHZCLEdBQUEsRUFBbUJBLEVBQUFzNkMsRUFBQXI2QyxPQUFzQkQsSUFBQSxD
QUN6QyxHQUFBMDRDLEdBQUE0QixFQUFBdDZDLEVBQ0EsUUFBQTA0QyxFQUFBNzFCLEtBQUEsQ0FD
QSxPQUFBbFAsR0FBQSxFQUF1QkEsRUFBQStrQyxFQUFBRSxNQUFBMzRDLE9BQTJCMFQsSUFDbEQr
a0MsRUFBQUUsTUFBQWpsQyxXQUVBZ2xDLEdBQUFELEVBQUF0dkMsT0F3RkEsSUFBQXV3QyxHQUFB
LFdBQ0EsR0FBQVksS0FFQSxpQkFBQWo2QyxFQUFBazZDLEdBRUEsTUFEQUQsR0FBQWo2QyxHQUFB
azZDLEVBQ0FELEVBQUF6NkIsT0FBQTlWLFNBQUEwYSxLQUFBLFdMb21VTSsxQixLQUNBLFNBQVVq
OUMsRUFBUW81QyxFQUFTbDVDLElNdHdVakMsU0FBQWs1QyxHQVlBLFFBQUE4RCxLQUdBLFdBQUFD
LEVBQUFwdEMsTUFBQSxNQUFBb3RDLEVBQUFwdEMsS0FpUkEsUUFBQXF0QyxHQUFBeDZDLEVBQUF5
NkMsR0FDQSxPQUFBNzZDLEdBQUEsRUFBaUJBLEVBQUFJLEVBQUFILE9BQWdCRCxHQUFBLEVBQ2pD
LFFBQUE2NkMsRUFBQXo2QyxFQUFBSixLQUFBSSxHQUNBLE9BS0EsUUFBQTA2QyxHQUFBMTZDLEdB
RUEsT0FEQTI2QyxNQUNBLzZDLEVBQUEsRUFBQWxCLEVBQUFzQixFQUFBSCxPQUFpQ0QsRUFBQWxC
LEVBQU9rQixJQUN4Qys2QyxJQUFBcnpDLE9BQUF0SCxFQUFBSixHQUVBLE9BQUErNkMsR0FHQSxR
QUFBQyxHQUFBNTZDLEVBQUF5NkMsRUFBQXpnQyxHQUNBLElBQUFoYSxFQUFBSCxPQUNBLE1BQUFt
YSxJQUVBLElBQUE2Z0MsR0FBQSxHQUNBLFFBQUFDLEtBQ0FMLEVBQUF6NkMsRUFBQTY2QyxHQUFB
LFNBQUFuM0MsR0FDQUEsSUFBQSxJQUFBQSxHQUNBc1csRUFBQXRXLEdBQ0FzVyxFQUFBLGVBRUE2
Z0MsR0FBQSxFQUNBQSxJQUFBNzZDLEVBQUFILE9BQ0FtYSxJQUVBOGdDLFVBT0EsUUFBQUMsR0FB
QXo3QyxFQUFBMDdDLEVBQUFDLEdBQ0FBLEVBQUEzN0MsQ0FDQSxRQUFBNDdDLEtBQUFGLEdBQ0Es
R0FBQUEsRUFBQXo2QyxlQUFBMjZDLEtBQ0FELEVBQUFELEVBQUFFLEdBQUE1N0MsTUFDQUEsRUFD
QSxLQUlBLE9BQUEyN0MsS0FBQTM3QyxFQUFBLHVCQUFBMjdDLEVBR0EsUUFBQUUsR0FBQTc3QyxF
QUFBMDdDLEdBRUEsSUFEQSxHQUFBMTdCLEdBQUExUixFQUFBLEVBQUF3dEMsRUFBQSxHQUNBOTdC
LEVBQUFoZ0IsRUFBQSs3QyxPQUFBenRDLEdBQUF4RCxNQUFBLG1DQUNBd0QsRUFBQTBSLEVBQUFw
ZixNQUFBb2YsRUFBQSxHQUFBemYsT0FDQXlmLEVBQUEsR0FBQUEsRUFBQSxHQUFBaU8sUUFBQSxv
Q0FDQTZ0QixHQUFBOTdDLEVBQUErN0MsT0FBQSxFQUFBLzdCLEVBQUFwZixPQUFBb2YsRUFBQSxF
QUVBaGdCLEdBQUE4N0MsR0FBQTk3QyxFQUFBKzdDLE9BQUF6dEMsRUFDQSxJQUFBckIsR0FBQTFN
LEVBQUF5N0MsRUFBQWg4QyxFQUFBOEssTUFBQSxjQUNBLElBQUFreEMsRUFBQSxDQUNBejdDLEVB
QUF5N0MsRUFBQXo3QyxNQUNBLFFBQUFELEdBQUEsRUFBbUJBLEVBQUFDLEVBQVlELElBQy9CMk0s
RUFBQSt1QyxFQUFBMTdDLEdBRUFOLEVBREEsT0FBQWlOLEVBQUFWLE1BQUEsS0FDQVUsRUFBQVYs
TUFBQSxHQUVBdk0sRUFBQWl1QixRQUFBaGhCLEVBQUF3dUMsRUFBQXh1QyxFQUFBeXVDLElBSUEs
TUFBQTE3QyxHQUdBLFFBQUFpOEMsR0FBQUMsRUFBQUMsRUFBQXI2QyxFQUFBZzBDLEdBQ0EsR0FB
QXgxQyxHQUFBZ08sRUFBQSxFQUFBdW5CLEVBQUEsRUFBQThmLEVBQUEsRUFBQTd6QyxNQUFBLEtB
QUFyQyxXQUFBcTJDLE1BQUEsS0FBQXIyQyxVQUNBLEtBQUFhLEVBQUEsRUFBYUEsRUFBQTQ3QyxF
QUFBMzdDLE9BQW1CRCxJQUFBLENBQ2hDLEdBQUE4N0MsR0FBQUYsRUFBQTU3QyxFQUNBLElBQUE4
N0MsRUFBQXY3QyxRQUFBaUIsRUFBQXdNLEdBQUE4dEMsRUFBQXY3QyxRQUFBaTFDLEVBQUF4bkMs
S0FBQTh0QyxFQUFBdjdDLFFBQUFpQixFQUFBd00sTUFBQTh0QyxFQUFBdjdDLFFBQUFpMUMsRUFB
QXhuQyxNQUFBOHRDLEVBQUF2N0MsUUFBQWlCLEVBQUF3TSxLQUFBOHRDLEVBQUF2N0MsUUFBQWkx
QyxFQUFBeG5DLEdBQUEsQ0FHQSxHQUZBdW5CLEVBQUF1bUIsRUFBQXY3QyxRQUFBaUIsRUFBQXdN
LEdBQ0FxbkMsRUFBQXlHLEVBQUF2N0MsUUFBQWkxQyxFQUFBeG5DLElBQ0F1bkIsS0FBQThmLEtB
QUE5ZixJQUFBOGYsRUFBQSxDQUVBdUcsR0FEQUEsRUFBQTN2QyxNQUFBLEdBQUFqTSxHQUFBLE1B
QUEwa0IsS0FBQW0zQixJQUNBbjBDLE9BQUFrMEMsRUFBQTN2QyxPQUFBak0sR0FBQSxPQUVBZ08s
R0FBQXFuQyxFQUFBOWYsRUFBQThmLEVBQUE5ZixHQUFBLEVBQ0F2MUIsRUFBQSxNQUVBZ08sR0FB
QSxFQUdBLE1BQUE0dEMsR0FqWEEsR0FBQWpCLEdBQUF6NUIsU0FBQTY2QixTQVFBQyxHQUNBaEss
S0FBQSxTQUNBemtDLEtBQUFvdEMsRUFBQXB0QyxLQUNBMHVDLFNBQUEsRUFFQUMsTUFBQSxXQUNB
LEdBQUE3akMsR0FBQXNpQyxFQUFBcHRDLElBQ0E4SyxJQUFBcFYsS0FBQXNLLE9BQ0F0SyxLQUFB
c0ssS0FBQThLLEVBQ0FwVixLQUFBazVDLGtCQUlBQyxLQUFBLFdBQ0EsV0FBQW41QyxLQUFBK3VD
LE1BQ0EsSUFBQS91QyxLQUFBZzVDLFFBQUE5NkIsT0FBQWs3QixhQUFBbDdCLE9BQUFtN0IsZUFH
QXI1QyxLQUFBazVDLGlCQUlBdlQsS0FBQSxTQUFBL25DLEVBQUFvN0MsR0FRQSxRQUFBTSxHQUFB
QyxHQUNBLE9BQUF4OEMsR0FBQSxFQUFBbUIsRUFBQXM3QyxFQUFBenNDLFVBQUEvUCxPQUFrREQs
RUFBQW1CLEVBQU9uQixJQUN6RHk4QyxFQUFBenNDLFVBQUFoUSxHQUFBdzhDLEdBVEEsR0FBQTlH
LEdBQUF6eUMsSUFjQSxJQWJBQSxLQUFBZzVDLFVBRUFRLEVBQUF6c0MsWUFDQXlzQyxFQUFBenND
LGNBVUEsZ0JBQUFtUixjQUFBbGpCLEtBQUFpakIsU0FBQXc3QixjQUNBeDdCLFNBQUF3N0IsYUFB
QSxJQUVBLElBQUF6NUMsS0FBQWc1QyxRQU1BdnNDLFdBQUEsV0FDQXlSLE9BQUFrN0IsV0FBQUUs
R0FDUyxLQUdUcDdCLE9BQUFtN0IsYUFBQUMsRUFFQXQ1QyxLQUFBK3VDLEtBQUEsYUFFQSxDQUlB
LEdBQUEySyxHQUFBejdCLFNBQUEzSSxjQUFBLFNBQ0Fva0MsR0FBQXZ6QyxHQUFBLGNBQ0F1ekMs
RUFBQXB3QixNQUFBcWxCLFFBQUEsT0FDQTF3QixTQUFBOHhCLEtBQUExd0IsWUFBQXE2QixHQUNB
MTVDLEtBQUEyNUMsV0FBQSxJQUVBLG9CQUFBMTdCLFdBQUEsZUFBQUEsV0FDQUEsU0FBQTI3QixZ
QUFBLDhCQUNBLGFBQUFwd0MsTUFBQXltQyxjQUNBd0MsRUFBQXdHLFVBS0EvNkIsT0FBQTI3QixZ
QUFBLFdBQXNDcEgsRUFBQXdHLFNBQWdCLElBRXREajVDLEtBQUFrNUMsY0FBQUksRUFDQXQ1QyxL
QUFBK3VDLEtBQUEsU0FLQSxNQUZBeUssR0FBQXpzQyxVQUFBbkwsS0FBQWhFLEdBRUFvQyxLQUFB
K3VDLE1BR0E5SSxRQUFBLFNBQUFyb0MsR0FDQSxHQUFBNDdDLEtBQUF6c0MsVUFNQSxPQUZBQSxH
QUFBeXNDLEVBQUF6c0MsVUFFQWhRLEVBQUFnUSxFQUFBL1AsT0FBQSxFQUFzQ0QsR0FBQSxFQUFR
QSxJQUM5Q2dRLEVBQUFoUSxLQUFBYSxHQUNBbVAsRUFBQXhQLE9BQUFSLEVBQUEsSUFLQSs4QyxR
QUFBLFNBQUE5c0IsR0FjQSxNQVpBLFdBQUFodEIsS0FBQSt1QyxNQUNBL3VDLEtBQUEyNUMsV0FB
QTNzQixJQUdBLElBQUFodEIsS0FBQWc1QyxTQUNBOTZCLE9BQUE4NkIsUUFBQWUsYUFBaUM5N0Is
U0FBQSs3QixNQUFBaHRCLEdBR2pDaHRCLEtBQUFtNUMsUUFFQXpCLEVBQUFwdEMsS0FBQSxNQUFB
MGlCLEVBQUEsR0FBQUEsRUFBQSxJQUFBQSxFQUVBaHRCLE1BR0EyNUMsV0FBQSxTQUFBM3NCLEdB
RUEsR0FBQWl0QixHQUFBaDhCLFNBQUFpOEIsZUFBQSxlQUNBN2tDLEVBQUE0a0MsRUFBQUUsaUJB
QUFGLEVBQUFHLGNBQUFuOEIsUUFDQTVJLEdBQUFxN0IsT0FDQXI3QixFQUFBZ2xDLE1BQUEsb0JB
QUFydEIsRUFBQSxpREFDQTNYLEVBQUFzN0IsU0FHQTJKLFNBQUEsV0FFQSxHQUFBdHRCLEdBQUFo
dEIsS0FBQXU2QyxLQUlBLE9BSEF2dEIsSUFBQTBxQixFQUFBcHRDLE9BQ0FvdEMsRUFBQXB0QyxL
QUFBMGlCLEdBRUFodEIsTUFHQWs1QyxjQUFBLGNBR0FNLEVBQUE3RixFQUFBNkYsT0FBQSxTQUFB
YixHQUNBLEtBQUEzNEMsZUFBQXc1QyxJQUFBLFVBQUFBLEdBQUFiLEVBRUEzNEMsTUFBQW00QyxV
QUNBbjRDLEtBQUEyNEMsVUFDQTM0QyxLQUFBNlMsU0FBQSw4QkFDQTdTLEtBQUF1L0IsU0FDQXYv
QixLQUFBdzZDLFlBRUF4NkMsS0FBQXk2QyxRQUFBejZDLEtBQUFnbUMsT0FDQWhtQyxLQUFBZ21D
LE9BQUFobUMsS0FBQTA2QyxTQUVBMTZDLEtBQUEyNkMsZUFBQSxhQUFBejhCLE9BQUE4NkIsUUFB
QTk2QixPQUFBODZCLFFBQUFlLFVBQUEsTUFFQS81QyxLQUFBNDZDLFlBQ0E1NkMsS0FBQXd6QyxN
QUFBbUYsT0FHQWEsR0FBQS91QyxVQUFBazdCLEtBQUEsU0FBQWtWLEdBQ0EsR0FDQUMsR0FEQXJJ
LEVBQUF6eUMsSUFxQ0EsT0FuQ0FBLE1BQUFpVSxRQUFBLFNBQUFzbEMsR0FDQSxHQUFBd0IsR0FB
QXhCLEtBQUF3QixRQUFBNzhCLE9BQUE0NkIsU0FBQXh1QyxLQUNBMHdDLEdBQUEsSUFBQXZJLEVB
QUF1RyxRQUFBdkcsRUFBQXdJLFVBQUFGLEVBQUFyd0IsUUFBQSxTQUNBK25CLEdBQUF5SSxTQUFB
LFdBQUFGLEVBQUFsM0IsT0FBQSxHQUFBazNCLEVBQUEsSUFBQUEsSUFHQWpDLEVBQUFwVCxLQUFB
M2xDLEtBQUFpVSxRQUFBalUsS0FBQWc1QyxVQUVBLElBQUFoNUMsS0FBQWc1QyxRQUNBdkIsS0FB
QW9ELEVBQ0FuRCxFQUFBcHRDLEtBQUF1d0MsRUFDS3BELEtBQ0xoRixFQUFBeUksU0FBQSxTQUFB
eEQsRUFBQXB0QyxLQUFBb2dCLFFBQUEsb0JBSUExcUIsS0FBQW03QyxzQkFFQUwsRUFBQXJELEtB
QUFvRCxJQUFBcEQsSUFBQSxLQUFBQyxFQUFBcHRDLEtBQUFvZ0IsUUFBQSxXQUVBeE0sT0FBQTg2
QixRQUFBb0MsZ0JBQXNDbjlCLFNBQUErN0IsTUFBQWMsR0FLdENBLEVBQUE5NkMsS0FBQWk3QyxX
QUtBSCxJQUFBLElBQUE5NkMsS0FBQXE3QyxjQUNBcjdDLEtBQUFpVSxXQUlBalUsTUFHQXc1QyxF
QUFBL3VDLFVBQUE2d0MsUUFBQSxXQUNBLEdBQUF2Z0QsSUFBQSxJQUFBaUYsS0FBQWc1QyxRQUFB
aDVDLEtBQUFpN0MsVUFBQXZELEVBQUFwdEMsSUFFQSxPQURBLE1BQUF2UCxFQUFBK29CLE9BQUEs
S0FBNEIvb0IsSUFBQWlPLE1BQUEsSUFDNUJqTyxFQUFBaU8sTUFBQSxFQUFBak8sRUFBQWlDLFFB
QUFGLE1BQUEsTUFHQTA4QyxFQUFBL3VDLFVBQUE4d0MsU0FBQSxTQUFBeCtDLEVBQUFoQyxFQUFB
YSxHQUNBLEdBQUFvL0MsR0FBQWg3QyxLQUFBczdDLFNBYUEsT0FYQSxnQkFBQXYrQyxJQUFBLGdC
QUFBaEMsR0FDQWlnRCxFQUFBaitDLEdBQUFoQyxFQUVBLGdCQUFBYSxHQUNBby9DLEVBQUF6OUMs
T0FBQVIsRUFBQWhDLEVBQUFpeUIsR0FHQWd1QixHQUFBaitDLEdBR0FnOEMsRUFBQWUsUUFBQWtC
LEVBQUF2NUIsS0FBQSxNQUNBdTVCLEdBV0F4QixFQUFBL3VDLFVBQUFpd0MsU0FBQSxTQUFBdFcs
RUFBQTVqQyxFQUFBZzdDLEVBQUEvMUMsR0FZQSxNQVhBLFNBQUEyK0IsSUFDQUEsRUFBQSxLQUNB
b1gsRUFBQSxTQUFBQSxHQUNBLEdBQUExN0MsSUFBQSxDQUNBLG1CQUNBLElBQUFBLEVBRUEsTUFE
QUEsSUFBQSxFQUNBMDdDLEVBQUFwOUMsTUFBQTRCLEtBQUE3QixhQUVLcTlDLElBRUx4N0MsS0FB
QXk2QyxRQUFBclcsRUFBQTVqQyxFQUFBZzdDLEVBQUEvMUMsSUFHQSt6QyxFQUFBL3VDLFVBQUFn
eEMsU0FBQSxTQUFBMWdELEdBQ0EsR0FBQXlELEdBQUF6RCxDQUVBLG9CQUFBQSxHQUNBeUQsRUFB
QXdCLEtBQUFzN0MsVUFBQXZnRCxPQUVBLG9CQUFBQSxHQUFBLENBQ0EsR0FBQXFhLEdBQUFwVixL
QUFBczdDLFNBQ0E5OEMsR0FBQTRXLEVBQUE5WCxRQUFBdkMsT0FHQXlELEdBQUF3QixLQUFBczdD
LFNBR0EsT0FBQTk4QyxJQUdBZzdDLEVBQUEvdUMsVUFBQXc3QixRQUFBLFdBRUEsTUFEQThTLEdB
QUE5UyxRQUFBam1DLEtBQUFpVSxTQUNBalUsTUFHQXc1QyxFQUFBL3VDLFVBQUF3d0MsUUFBQSxX
QUNBLEdBQUF6NkMsR0FBQTBkLE9BQUE0NkIsU0FBQTRDLFFBSUEsT0FIQSxNQUFBbDdDLEVBQUFn
NEMsT0FBQSxPQUNBaDRDLEVBQUEsSUFBQUEsR0FFQUEsRUFnR0EsSUFBQW03QyxHQUFBLE1BRUFu
QyxHQUFBL3VDLFVBQUFtd0MsVUFBQSxTQUFBaDJDLEdBQ0FBLE9BQ0EsUUFBQTdILEdBQUEsRUFB
aUJBLEVBQUFpRCxLQUFBNlMsUUFBQTdWLE9BQXlCRCxJQUMxQ2lELEtBQUF3NkMsU0FBQXg2QyxL
QUFBNlMsUUFBQTlWLEtBQUEsQ0FnQkEsT0FkQWlELE1BQUE0N0MsUUFBQWgzQyxFQUFBZzNDLFNB
QUE1N0MsS0FBQTQ3QyxVQUFBLEVBQ0E1N0MsS0FBQTY3QyxNQUFBajNDLEVBQUFpM0MsUUFBQSxF
QUNBNzdDLEtBQUE0NEMsVUFBQWgwQyxFQUFBZzBDLFdBQUEsSUFDQTU0QyxLQUFBODdDLFdBQUEs
S0FBQWwzQyxFQUFBazNDLFFBQUFsM0MsRUFBQWszQyxPQUNBOTdDLEtBQUErN0MsU0FBQW4zQyxF
QUFBbTNDLFNBQ0EvN0MsS0FBQWc4QyxTQUFBcDNDLEVBQUFvM0MsU0FDQWg4QyxLQUFBZzVDLFFB
QUFwMEMsRUFBQXEzQyxjQUFBajhDLEtBQUEyNkMsaUJBQUEsRUFDQTM2QyxLQUFBcTdDLGFBQUEs
SUFBQXI3QyxLQUFBZzVDLFVBQUEsSUFBQXAwQyxFQUFBczNDLG9CQUNBbDhDLEtBQUFtN0Msc0JB
QUEsSUFBQW43QyxLQUFBZzVDLFVBQUEsSUFBQXAwQyxFQUFBdTJDLHFCQUNBbjdDLEtBQUFSLE9B
Q0EyOEMsTUFBQXYzQyxFQUFBdTNDLE9BQUEsS0FDQUMsT0FBQXgzQyxFQUFBdzNDLFFBQUEsS0FD
QWx6QyxHQUFBdEUsRUFBQXNFLElBQUEsTUFFQWxKLE1BR0F3NUMsRUFBQS91QyxVQUFBNHRDLE1B
QUEsU0FBQWdFLEVBQUFDLEdBQ0EsTUFBQUQsRUFBQSxLQUNBQSxFQUFBLElBQUFBLEVBRUEsSUFB
QTFiLEdBQUEsR0FBQXZMLFFBQUFpbkIsRUFBQSxJQUlBLE9BSEFyOEMsTUFBQW00QyxPQUFBa0Us
R0FBQSxTQUFBNS9DLEdBQ0EsTUFBQUEsR0FBQWl1QixRQUFBaVcsRUFBQTJiLEVBQUF0bkMsUUFB
QXNuQyxJQUVBdDhDLE1BR0F3NUMsRUFBQS91QyxVQUFBdkIsR0FBQXN3QyxFQUFBL3VDLFVBQUEr
d0MsTUFBQSxTQUFBcFgsRUFBQTVqQyxFQUFBZzdDLEdBQ0EsR0FBQS9JLEdBQUF6eUMsSUFNQSxP
QUxBdzdDLElBQUEsa0JBQUFoN0MsS0FDQWc3QyxFQUFBaDdDLEVBQ0FBLEVBQUE0akMsRUFDQUEs
RUFBQSxNQUVBM2xDLE1BQUFhLFFBQUFrQixHQUNBQSxFQUFBbVUsUUFBQSxTQUFBa1AsR0FDQTR1
QixFQUFBdnBDLEdBQUFrN0IsRUFBQXZnQixFQUFBMjNCLE1BR0FoN0MsRUFBQXdVLFNBQ0F4VSxJ
QUFBd1UsT0FBQTBWLFFBQUEsZUFFQWpzQixNQUFBYSxRQUFBOGtDLEdBQ0FBLEVBQUF6dkIsUUFB
QSxTQUFBMFAsR0FDQW91QixFQUFBdnBDLEdBQUFtYixFQUFBcG5CLGNBQUF1RCxFQUFBZzdDLE1B
R0FoN0MsSUFBQTFELE1BQUEsR0FBQXM0QixRQUFBcDFCLEtBQUE0NEMsWUFDQXA0QyxFQUFBazRD
LEVBQUFsNEMsRUFBQVIsS0FBQTQ0QyxlQUNBNTRDLE1BQUFnbUMsT0FBQTVCLEVBQUFwa0MsS0FB
QXUvQixNQUFBOTZCLE9BQUFqRSxHQUFBZzdDLE1BR0FoQyxFQUFBL3VDLFVBQUFqSyxLQUFBLFNB
QUFBLEVBQUErN0MsR0FDQSxHQUFBdi9DLEdBQUFnRCxLQUFBdS9CLE1BQUF2aUMsTUFDQXdELEdB
QUF3VSxTQUNBeFUsSUFBQXdVLE9BQUEwVixRQUFBLGVBRUFscUIsSUFBQTFELE1BQUEsR0FBQXM0
QixRQUFBcDFCLEtBQUE0NEMsWUFDQXA0QyxFQUFBazRDLEVBQUFsNEMsRUFBQVIsS0FBQTQ0QyxX
QUNBNTRDLEtBQUF1L0IsTUFBQXYvQixLQUFBdS9CLE1BQUE5NkIsT0FBQWpFLEdBQ0ErN0MsRUFB
QTlnRCxLQUFBdUUsV0FDQUEsS0FBQXUvQixNQUFBaGlDLE9BQUFQLEVBQUF3RCxFQUFBeEQsU0FH
QXc4QyxFQUFBL3VDLFVBQUF5d0MsU0FBQSxTQUFBOVcsRUFBQTVqQyxFQUFBMlcsR0FnQkEsUUFB
QXFsQyxLQUNBL0osRUFBQTFuQyxLQUFBbEMsRUFBQXN6QyxNQUNBMUosRUFBQWdLLE9BQUFoSyxF
QUFBaUssUUFBQTd6QyxHQUFBNHBDLEVBQUF0N0IsR0FqQkEsR0FBQWdsQyxHQUFBMUosRUFBQXp5
QyxLQUFBNkksRUFBQTdJLEtBQUErUixTQUFBcXlCLEVBQUE1akMsRUFBQWtxQixRQUFBaXhCLEVB
QUEsSUFBQTM3QyxLQUFBMjRDLE9BQUEsSUFBQWdFLEVBQUEzOEMsS0FBQTQ4QyxRQUVBLE9BREE1
OEMsTUFBQTQ4QyxVQUFBLEVBQ0EvekMsR0FBQSxJQUFBQSxFQUFBN0wsUUFVQSxZQUFBZ0QsS0FB
QTQ3QyxVQUNBL3lDLElBQUFnMEMsWUFNQVYsRUFBQW44QyxLQUFBUixPQUFBUSxLQUFBUixNQUFB
MjhDLE9BQUFuOEMsS0FBQVIsTUFBQTI4QyxPQUFBMTNDLE9BQUF6RSxLQUFBK0ssT0FBQS9LLEtB
QUErSyxRQUNBb3hDLEVBQUFuL0MsT0FBQSxHQUFBMi9DLEdBQ0EzOEMsS0FBQTY3QyxNQUNBNzdD
LEtBQUF5OEMsT0FBQU4sRUFBQW44QyxLQUFBdzhDLElBRUF4OEMsS0FBQXk4QyxPQUFBTixFQUFB
bjhDLE1BQ0F3OEMsTUFFQSxJQUVBQSxLQUNBLEtBM0JBeDhDLEtBQUErSyxRQUNBLGtCQUFBL0ss
TUFBQSs3QyxVQUNBLzdDLEtBQUF5OEMsUUFBQXo4QyxLQUFBKzdDLFdBQ0EzWCxTQUNBNWpDLFFB
Q08yVyxJQUVQLElBdUJBcWlDLEVBQUEvdUMsVUFBQWd5QyxPQUFBLFNBQUE1ekMsRUFBQWkwQyxF
QUFBM2xDLEdBQ0EsR0FDQS9ZLEdBREFxMEMsRUFBQXp5QyxJQUVBQSxNQUFBNjdDLE9BQ0F6OUMs
RUFBQSxTQUFBUixFQUFBMm9CLEdBQ0EsR0FBQTluQixNQUFBYSxRQUFBMUIsR0FDQSxNQUFBbTZD
LEdBQUFuNkMsRUFBQVEsRUFBQW1vQixFQUNPLG1CQUFBM29CLElBQ1BBLEVBQUFRLE1BQUEwK0Ms
R0FBQWowQyxFQUFBNHZDLGNBQUFoMEMsT0FBQThoQixLQUdBd3hCLEVBQUFsdkMsRUFBQXpLLEVB
QUEsV0FDQStZLEdBQ0FBLEVBQUEvWSxNQUFBMCtDLEVBQUEzK0MsZUFJQUMsRUFBQSxTQUFBUixH
QUNBLE1BQUFhLE9BQUFhLFFBQUExQixHQUNBKzVDLEVBQUEvNUMsRUFBQVEsR0FDTyxrQkFBQVIs
R0FDUEEsRUFBQVEsTUFBQTArQyxFQUFBajBDLEVBQUE0dkMsbUJBQ08sZ0JBQUE3NkMsSUFBQTYw
QyxFQUFBdUosVUFDUHZKLEVBQUF1SixTQUFBcCtDLEdBQUFRLE1BQUEwK0MsRUFBQWowQyxFQUFB
NHZDLGdCQUdBZCxFQUFBOXVDLEVBQUF6SyxLQUlBbzdDLEVBQUEvdUMsVUFBQXNILFNBQUEsU0FB
QXF5QixFQUFBNWpDLEVBQUFtNEMsRUFBQW9FLEVBQUFsZ0MsR0FFQSxRQUFBbWdDLEdBQUFyRSxH
QUlBLFFBQUFzRSxHQUFBam9DLEdBRUEsT0FEQVAsTUFDQTFYLEVBQUEsRUFBcUJBLEVBQUFpWSxF
QUFBaFksT0FBbUJELElBQ3hDMFgsRUFBQTFYLEdBQUEwQixNQUFBYSxRQUFBMFYsRUFBQWpZLElB
QUFrZ0QsRUFBQWpvQyxFQUFBalksSUFBQWlZLEVBQUFqWSxFQUVBLE9BQUEwWCxHQUVBLFFBQUF5
b0MsR0FBQXIwQyxHQUNBLE9BQUE5TCxHQUFBOEwsRUFBQTdMLE9BQUEsRUFBa0NELEdBQUEsRUFB
UUEsSUFDMUMwQixNQUFBYSxRQUFBdUosRUFBQTlMLEtBQ0FtZ0QsRUFBQXIwQyxFQUFBOUwsSUFD
QSxJQUFBOEwsRUFBQTlMLEdBQUFDLFFBQ0E2TCxFQUFBdEwsT0FBQVIsRUFBQSxJQUdBOGYsRUFB
QWhVLEVBQUE5TCxLQUNBOEwsRUFBQXRMLE9BQUFSLEVBQUEsR0FuQkEsSUFBQThmLEVBQ0EsTUFB
QTg3QixFQXVCQSxJQUFBd0UsR0FBQUYsRUFBQXRFLEVBS0EsT0FKQXdFLEdBQUFDLFFBQUF6RSxF
QUFBeUUsUUFDQUQsRUFBQTFFLFNBQUFFLEVBQUFGLFNBQ0EwRSxFQUFBaEIsTUFBQXhELEVBQUF3
RCxNQUFBdC9CLFVBQ0FxZ0MsRUFBQUMsR0FDQUEsRUEvQkEsR0FBQXZnQyxHQUFBeWdDLEVBQUE5
MUMsRUFBQWdmLEVBQUExZCxJQWlDQSxJQUFBckksSUFBQVIsS0FBQTQ0QyxXQUFBRCxFQUFBdlUs
R0FLQSxNQUpBN2QsS0FBQW95QixFQUFBeUQsT0FBQXpELEVBQUF2VSxJQUFBdm5CLE9BQUE5VixV
QUNBd2YsRUFBQTQxQixPQUFBeEQsRUFBQXdELE9BQUF0L0IsT0FBQTlWLFNBQ0F3ZixFQUFBNjJC
LFNBQUEsRUFDQTcyQixFQUFBa3lCLFlBQ0F1RSxFQUFBejJCLEVBRUEsUUFBQXMwQixLQUFBbEMs
R0FDQSxHQUFBQSxFQUFBajdDLGVBQUFtOUMsTUFBQTc2QyxLQUFBdzZDLFNBQUFLLElBQUE3NkMs
S0FBQXc2QyxTQUFBSyxJQUFBLGdCQUFBbEMsR0FBQWtDLEtBQUFwOEMsTUFBQWEsUUFBQXE1QyxF
QUFBa0MsS0FBQSxDQU1BLEdBTEFqK0IsRUFBQXlnQyxFQUFBTixFQUFBLzhDLEtBQUE0NEMsVUFB
QWlDLEVBQ0E3NkMsS0FBQTg3QyxTQUNBdUIsR0FBQSxJQUFBcjlDLEtBQUE0NEMsVUFBQSxRQUVB
cnhDLEVBQUEvRyxFQUFBK0csTUFBQSxHQUFBNnRCLFFBQUEsSUFBQWlvQixLQUVBLFFBRUEsSUFB
QTkxQyxFQUFBLElBQUFBLEVBQUEsSUFBQS9HLEdBQUFtNEMsRUFBQWtDLEdBQUF6VyxHQVNBLE1B
UkE3ZCxLQUFBb3lCLEVBQUFrQyxHQUFBdUIsT0FBQXpELEVBQUFrQyxHQUFBelcsSUFBQXZuQixP
QUFBOVYsVUFDQXdmLEVBQUE0MUIsT0FBQXhELEVBQUFrQyxHQUFBc0IsT0FBQXQvQixPQUFBOVYs
U0FDQXdmLEVBQUE2MkIsU0FBQSxFQUNBNzJCLEVBQUFreUIsU0FBQWx4QyxFQUFBeUIsTUFBQSxH
QUNBaEosS0FBQTQ3QyxTQUFBakQsSUFBQTM0QyxLQUFBMjRDLFNBQ0FweUIsRUFBQTNrQixNQUFB
KzJDLEVBQUF5RCxPQUFBekQsRUFBQXp2QyxJQUFBMlQsT0FBQTlWLFVBQ0F3ZixFQUFBNDFCLE1B
QUE1MUIsRUFBQTQxQixNQUFBMTNDLFFBQUFrMEMsRUFBQXdELE9BQUF0L0IsT0FBQTlWLFdBRUFp
MkMsRUFBQXoyQixFQUdBLElBREFBLEVBQUF2bUIsS0FBQStSLFNBQUFxeUIsRUFBQTVqQyxFQUFB
bTRDLEVBQUFrQyxHQUFBaitCLEdBQ0EySixFQUFBNjJCLFFBZUEsTUFkQTcyQixHQUFBdnBCLE9B
QUEsSUFDQTZMLElBQUFwRSxPQUFBOGhCLElBRUF2bUIsS0FBQTQ3QyxVQUNBL3lDLEVBQUFqSCxN
QUFBKzJDLEVBQUFrQyxHQUFBdUIsT0FBQXpELEVBQUFrQyxHQUFBM3hDLElBQUEyVCxPQUFBOVYs
VUFDQXdmLEVBQUE0MUIsTUFBQTUxQixFQUFBNDFCLE1BQUExM0MsUUFBQWswQyxFQUFBa0MsR0FB
QXNCLE9BQUF0L0IsT0FBQTlWLFVBQ0E0eEMsSUFBQTM0QyxLQUFBMjRDLFNBQ0E5dkMsRUFBQWpI
LE1BQUErMkMsRUFBQSxPQUFBQSxFQUFBLElBQUE5N0IsT0FBQTlWLFVBQ0F3ZixFQUFBNDFCLE1B
QUE1MUIsRUFBQTQxQixNQUFBMTNDLFFBQUFrMEMsRUFBQSxPQUFBOTdCLE9BQUE5VixZQUdBOEIs
RUFBQXUwQyxTQUFBLEVBQ0F2MEMsRUFBQTR2QyxTQUFBbHlCLEVBQUFreUIsU0FDQTV2QyxFQUFB
c3pDLE1BQUE1MUIsRUFBQTQxQixNQUNBYSxFQUFBbjBDLEdBSUEsVUFHQTJ3QyxFQUFBL3VDLFVB
QUF1N0IsT0FBQSxTQUFBNUIsRUFBQTVqQyxFQUFBZzdDLEVBQUEvMUMsR0FDQSxHQUFBNjNDLEdB
QUFoK0MsRUFBQTJyQyxFQUFBc1MsQ0FTQSxJQVJBLzhDLElBQUFxYyxPQUFBLFNBQUFnSCxHQUNB
LE1BQUFBLE1BQUE3bUIsT0FBQSxJQUVBeUksS0FBQXpGLEtBQUEyNEMsT0FDQTRFLEVBQUEvOEMs
RUFBQWsrQixRQUNBLFFBQUFoK0IsS0FBQTY4QyxLQUFBLFVBQUE3OEMsS0FBQTY4QyxLQUNBQSxF
QUFBakYsRUFBQWlGLEVBQUF2OUMsS0FBQW00QyxTQUVBMzNDLEVBQUF4RCxPQUFBLEVBRUEsTUFE
QXlJLEdBQUE4M0MsR0FBQTkzQyxFQUFBODNDLE9BQ0F2OUMsS0FBQWdtQyxPQUFBNUIsRUFBQTVq
QyxFQUFBZzdDLEVBQUEvMUMsRUFBQTgzQyxHQUVBLElBQUFBLEdBQUEvOEMsRUFBQXhELFFBQUF5
SSxJQUFBekYsS0FBQTI0QyxPQUFBLENBaUJBLEdBRkEyRSxRQUFBNzNDLEdBQUE4M0MsR0FDQWor
QyxFQUFBYixNQUFBYSxRQUFBbUcsRUFBQTgzQyxJQUNBOTNDLEVBQUE4M0MsS0FBQWorQyxHQUFB
LFVBQUFnK0MsRUFFQSxhQURBNzNDLEdBQUE4M0MsR0FBQW5aLElBRUEsZUFFQSxZQURBMytCLEVB
QUE4M0MsR0FBQW5aLElBQUEzK0IsRUFBQTgzQyxHQUFBblosR0FBQW9YLEdBRUEsY0FFQSxXQURB
LzFDLEdBQUE4M0MsR0FBQW5aLEdBQUF4aUMsS0FBQTQ1QyxFQUVBLGlCQUVBLFlBREEvMUMsRUFB
QTgzQyxHQUFBblosR0FBQW9YLE9BR0csaUJBQUE4QixFQUlILE1BSEFyUyxNQUNBQSxFQUFBN0cs
R0FBQW9YLE9BQ0EvMUMsRUFBQTgzQyxHQUFBdFMsRUFHQSxVQUFBOEwsT0FBQSwwQkFBQXVHLEdB
bENBLGFBREE3M0MsR0FBQTIrQixJQUVBLGVBRUEsWUFEQTMrQixFQUFBMitCLElBQUEzK0IsRUFB
QTIrQixHQUFBb1gsR0FFQSxjQUVBLFdBREEvMUMsR0FBQTIrQixHQUFBeGlDLEtBQUE0NUMsRUFF
QSxpQkFFQSxZQURBLzFDLEVBQUEyK0IsR0FBQW9YLEtBK0JBaEMsRUFBQS91QyxVQUFBL0wsT0FB
QSxTQUFBbVUsR0FDQSxHQUFBOVYsR0FBQTAxQyxFQUFBenlDLEtBQUF3SCxFQUFBcUwsRUFBQTdW
LE1BUUEsS0FBQUQsRUFBQSxFQUFhQSxFQUFBeUssRUFBU3pLLEtBUHRCLFNBQUFxbkMsR0FDQXFP
LEVBQUErSCxTQUFBcFcsSUFBQSxFQUNBcU8sRUFBQXJPLEdBQUEsV0FDQSxHQUFBb1osR0FBQSxJ
QUFBci9DLFVBQUFuQixRQUFBb25DLEVBQUEsS0FBQUEsRUFDQXFPLEdBQUF2cEMsR0FBQTlLLE1B
QUFxMEMsRUFBQStLLEVBQUEvNEMsT0FBQWhHLE1BQUFnTSxVQUFBekIsTUFBQXZOLEtBQUEwQyxl
QUlBMFUsRUFBQTlWLEtBSUF5OEMsRUFBQS91QyxVQUFBaXlDLFFBQUEsU0FBQTd6QyxHQUNBLEdB
QUE2ekMsR0FBQTE4QyxLQUFBUixPQUFBUSxLQUFBUixNQUFBNDhDLFFBQUFwOEMsS0FBQVIsTUFB
QTQ4QyxRQUFBMzNDLE9BQUFvekMsRUFBQWh2QyxJQUFBZ3ZDLEVBQUFodkMsRUFNQSxPQUxBN0ks
TUFBQVIsT0FBQVEsS0FBQVIsTUFBQTBKLElBQ0F3ekMsRUFBQTk2QyxLQUFBNUIsS0FBQVIsTUFB
QTBKLElBRUF3ekMsRUFBQWpFLFNBQUE1dkMsRUFBQTR2QyxTQUNBaUUsRUFBQTFuQyxPQUFBbk0s
RUFBQW1NLE9BQ0EwbkMsR0FHQWxELEVBQUEvdUMsVUFBQStvQyxNQUFBLFNBQUFtRixFQUFBbjRD
LEdBQ0EsR0FBQW00QyxHQUFBLGdCQUFBQSxLQUFBbDZDLE1BQUFhLFFBQUFxNUMsR0FBQSxDQUdB
LEdBQUFsRyxHQUFBenlDLElBQ0FRLFNBQ0EvQixNQUFBYSxRQUFBa0IsS0FDQUEsSUFBQTFELE1B
QUEyMUMsRUFBQW1HLFdBbUJBLFFBQUE0QyxLQUFBN0MsR0FDQUEsRUFBQWo3QyxlQUFBODlDLElB
bEJBLFNBQUFBLEVBQUFpQyxHQUNBLEdBQUFDLEdBQUFsQyxFQUFBN0YsRUFBQTZGLEVBQUExK0Ms
TUFBQTIxQyxFQUFBbUcsV0FBQStFLFFBQUFoRixHQUFBNkMsR0FBQW9DLEVBQUEsS0FBQWpJLEVB
QUEsS0FBQWxELEVBQUErSCxTQUFBN0UsRUFBQSxJQUFBbnNDLEVBQUFvMEMsRUFBQSxLQUFBRixD
QUtBLElBSkFFLElBQ0FGLElBQUExMEMsT0FBQTAwQyxFQUFBbjJDLE1BQUEsR0FBQTZ0QixRQUFB
LElBQUFxZCxFQUFBbUcsY0FBQSxRQUFBNTdDLFFBQ0EyNEMsRUFBQWpYLFNBRUFrZixHQUFBLFdB
QUFELElBQUFsL0MsTUFBQWEsUUFBQXE1QyxFQUFBNkMsSUFHQSxNQUZBaUMsS0FBQWg1QyxPQUFB
a3hDLE9BQ0FsRCxHQUFBZSxNQUFBbUYsRUFBQTZDLEdBQUFpQyxFQUdBRyxLQUNBSCxJQUFBaDVD
LE9BQUFpNUMsRUFBQTVnRCxNQUFBMjFDLEVBQUFtRyxZQUNBNkUsRUFBQS9FLEVBQUErRSxFQUFB
aEwsRUFBQW1HLFlBRUFuRyxFQUFBek0sT0FBQXg4QixFQUFBaTBDLEVBQUE5RSxFQUFBNkMsS0FJ
QUEsRUFBQWg3QyxFQUFBd0ksTUFBQSxPQU9DMnFDLElObXhVS2tLLEtBQ0EsU0FBVXRqRCxFQUFR
bzVDLEdPcCtWeEJwNUMsRUFBQW81QyxRQUFBLFNBQUF1RCxFQUFBcjZDLEdBR0EsT0FGQWt2QixN
QUNBK3hCLEtBQ0EvZ0QsRUFBQSxFQUFpQkEsRUFBQUYsRUFBQUcsT0FBaUJELElBQUEsQ0FDbEMs
R0FBQUssR0FBQVAsRUFBQUUsR0FDQW9KLEVBQUEvSSxFQUFBLEdBQ0F5dEIsRUFBQXp0QixFQUFB
LEdBQ0FvNUMsRUFBQXA1QyxFQUFBLEdBQ0FrM0MsRUFBQWwzQyxFQUFBLEdBQ0FtZ0QsR0FDQXAz
QyxHQUFBK3dDLEVBQUEsSUFBQW42QyxFQUNBOHRCLE1BQ0EyckIsUUFDQWxDLFlBRUF3SixHQUFB
MzNDLEdBR0EyM0MsRUFBQTMzQyxHQUFBd3ZDLE1BQUEvekMsS0FBQTI3QyxHQUZBeHhCLEVBQUFu
cUIsS0FBQWs4QyxFQUFBMzNDLElBQW1DQSxLQUFBd3ZDLE9BQUE0SCxLQUtuQyxNQUFBeHhCIiwi
ZmlsZSI6InN0YXRpYy9qcy92ZW5kb3IuZTcwMDgwMDFhOGJlZDAwOWJiZjEuanMiLCJzb3VyY2Vz
Q29udGVudCI6WyJ3ZWJwYWNrSnNvbnAoWzFdLHtcblxuLyoqKi8gXCI3K3VXXCI6XG4vKioqLyAo
ZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9f
KSB7XG5cblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fd2VicGFja19l
eHBvcnRzX18sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyogV0VCUEFDSyBW
QVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKGdsb2JhbCkgey8qIVxuICogVnVlLmpzIHYyLjQuMlxu
ICogKGMpIDIwMTQtMjAxNyBFdmFuIFlvdVxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNl
bnNlLlxuICovXG4vKiAgKi9cblxuLy8gdGhlc2UgaGVscGVycyBwcm9kdWNlcyBiZXR0ZXIgdm0g
Y29kZSBpbiBKUyBlbmdpbmVzIGR1ZSB0byB0aGVpclxuLy8gZXhwbGljaXRuZXNzIGFuZCBmdW5j
dGlvbiBpbmxpbmluZ1xuZnVuY3Rpb24gaXNVbmRlZiAodikge1xuICByZXR1cm4gdiA9PT0gdW5k
ZWZpbmVkIHx8IHYgPT09IG51bGxcbn1cblxuZnVuY3Rpb24gaXNEZWYgKHYpIHtcbiAgcmV0dXJu
IHYgIT09IHVuZGVmaW5lZCAmJiB2ICE9PSBudWxsXG59XG5cbmZ1bmN0aW9uIGlzVHJ1ZSAodikg
e1xuICByZXR1cm4gdiA9PT0gdHJ1ZVxufVxuXG5mdW5jdGlvbiBpc0ZhbHNlICh2KSB7XG4gIHJl
dHVybiB2ID09PSBmYWxzZVxufVxuXG4vKipcbiAqIENoZWNrIGlmIHZhbHVlIGlzIHByaW1pdGl2
ZVxuICovXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZSAodmFsdWUpIHtcbiAgcmV0dXJuIChcbiAgICB0
eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8XG4gICAgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVy
JyB8fFxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nXG4gIClcbn1cblxuLyoqXG4gKiBR
dWljayBvYmplY3QgY2hlY2sgLSB0aGlzIGlzIHByaW1hcmlseSB1c2VkIHRvIHRlbGxcbiAqIE9i
amVjdHMgZnJvbSBwcmltaXRpdmUgdmFsdWVzIHdoZW4gd2Uga25vdyB0aGUgdmFsdWVcbiAqIGlz
IGEgSlNPTi1jb21wbGlhbnQgdHlwZS5cbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QgKG9iaikge1xu
ICByZXR1cm4gb2JqICE9PSBudWxsICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnXG59XG5cbnZh
ciBfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4vKipcbiAqIFN0cmlj
dCBvYmplY3QgdHlwZSBjaGVjay4gT25seSByZXR1cm5zIHRydWVcbiAqIGZvciBwbGFpbiBKYXZh
U2NyaXB0IG9iamVjdHMuXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QgKG9iaikge1xuICBy
ZXR1cm4gX3RvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSdcbn1cblxuZnVu
Y3Rpb24gaXNSZWdFeHAgKHYpIHtcbiAgcmV0dXJuIF90b1N0cmluZy5jYWxsKHYpID09PSAnW29i
amVjdCBSZWdFeHBdJ1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHZhbCBpcyBhIHZhbGlkIGFycmF5
IGluZGV4LlxuICovXG5mdW5jdGlvbiBpc1ZhbGlkQXJyYXlJbmRleCAodmFsKSB7XG4gIHZhciBu
ID0gcGFyc2VGbG9hdCh2YWwpO1xuICByZXR1cm4gbiA+PSAwICYmIE1hdGguZmxvb3IobikgPT09
IG4gJiYgaXNGaW5pdGUodmFsKVxufVxuXG4vKipcbiAqIENvbnZlcnQgYSB2YWx1ZSB0byBhIHN0
cmluZyB0aGF0IGlzIGFjdHVhbGx5IHJlbmRlcmVkLlxuICovXG5mdW5jdGlvbiB0b1N0cmluZyAo
dmFsKSB7XG4gIHJldHVybiB2YWwgPT0gbnVsbFxuICAgID8gJydcbiAgICA6IHR5cGVvZiB2YWwg
PT09ICdvYmplY3QnXG4gICAgICA/IEpTT04uc3RyaW5naWZ5KHZhbCwgbnVsbCwgMilcbiAgICAg
IDogU3RyaW5nKHZhbClcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgaW5wdXQgdmFsdWUgdG8gYSBu
dW1iZXIgZm9yIHBlcnNpc3RlbmNlLlxuICogSWYgdGhlIGNvbnZlcnNpb24gZmFpbHMsIHJldHVy
biBvcmlnaW5hbCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIHRvTnVtYmVyICh2YWwpIHtcbiAgdmFy
IG4gPSBwYXJzZUZsb2F0KHZhbCk7XG4gIHJldHVybiBpc05hTihuKSA/IHZhbCA6IG5cbn1cblxu
LyoqXG4gKiBNYWtlIGEgbWFwIGFuZCByZXR1cm4gYSBmdW5jdGlvbiBmb3IgY2hlY2tpbmcgaWYg
YSBrZXlcbiAqIGlzIGluIHRoYXQgbWFwLlxuICovXG5mdW5jdGlvbiBtYWtlTWFwIChcbiAgc3Ry
LFxuICBleHBlY3RzTG93ZXJDYXNlXG4pIHtcbiAgdmFyIG1hcCA9IE9iamVjdC5jcmVhdGUobnVs
bCk7XG4gIHZhciBsaXN0ID0gc3RyLnNwbGl0KCcsJyk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwg
bGlzdC5sZW5ndGg7IGkrKykge1xuICAgIG1hcFtsaXN0W2ldXSA9IHRydWU7XG4gIH1cbiAgcmV0
dXJuIGV4cGVjdHNMb3dlckNhc2VcbiAgICA/IGZ1bmN0aW9uICh2YWwpIHsgcmV0dXJuIG1hcFt2
YWwudG9Mb3dlckNhc2UoKV07IH1cbiAgICA6IGZ1bmN0aW9uICh2YWwpIHsgcmV0dXJuIG1hcFt2
YWxdOyB9XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSB0YWcgaXMgYSBidWlsdC1pbiB0YWcuXG4g
Ki9cbnZhciBpc0J1aWx0SW5UYWcgPSBtYWtlTWFwKCdzbG90LGNvbXBvbmVudCcsIHRydWUpO1xu
XG4vKipcbiAqIENoZWNrIGlmIGEgYXR0cmlidXRlIGlzIGEgcmVzZXJ2ZWQgYXR0cmlidXRlLlxu
ICovXG52YXIgaXNSZXNlcnZlZEF0dHJpYnV0ZSA9IG1ha2VNYXAoJ2tleSxyZWYsc2xvdCxpcycp
O1xuXG4vKipcbiAqIFJlbW92ZSBhbiBpdGVtIGZyb20gYW4gYXJyYXlcbiAqL1xuZnVuY3Rpb24g
cmVtb3ZlIChhcnIsIGl0ZW0pIHtcbiAgaWYgKGFyci5sZW5ndGgpIHtcbiAgICB2YXIgaW5kZXgg
PSBhcnIuaW5kZXhPZihpdGVtKTtcbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgcmV0dXJu
IGFyci5zcGxpY2UoaW5kZXgsIDEpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ2hlY2sgd2hl
dGhlciB0aGUgb2JqZWN0IGhhcyB0aGUgcHJvcGVydHkuXG4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0
eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5mdW5jdGlvbiBoYXNPd24gKG9i
aiwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KVxufVxuXG4v
KipcbiAqIENyZWF0ZSBhIGNhY2hlZCB2ZXJzaW9uIG9mIGEgcHVyZSBmdW5jdGlvbi5cbiAqL1xu
ZnVuY3Rpb24gY2FjaGVkIChmbikge1xuICB2YXIgY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwp
O1xuICByZXR1cm4gKGZ1bmN0aW9uIGNhY2hlZEZuIChzdHIpIHtcbiAgICB2YXIgaGl0ID0gY2Fj
aGVbc3RyXTtcbiAgICByZXR1cm4gaGl0IHx8IChjYWNoZVtzdHJdID0gZm4oc3RyKSlcbiAgfSlc
bn1cblxuLyoqXG4gKiBDYW1lbGl6ZSBhIGh5cGhlbi1kZWxpbWl0ZWQgc3RyaW5nLlxuICovXG52
YXIgY2FtZWxpemVSRSA9IC8tKFxcdykvZztcbnZhciBjYW1lbGl6ZSA9IGNhY2hlZChmdW5jdGlv
biAoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZShjYW1lbGl6ZVJFLCBmdW5jdGlvbiAoXywg
YykgeyByZXR1cm4gYyA/IGMudG9VcHBlckNhc2UoKSA6ICcnOyB9KVxufSk7XG5cbi8qKlxuICog
Q2FwaXRhbGl6ZSBhIHN0cmluZy5cbiAqL1xudmFyIGNhcGl0YWxpemUgPSBjYWNoZWQoZnVuY3Rp
b24gKHN0cikge1xuICByZXR1cm4gc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNs
aWNlKDEpXG59KTtcblxuLyoqXG4gKiBIeXBoZW5hdGUgYSBjYW1lbENhc2Ugc3RyaW5nLlxuICov
XG52YXIgaHlwaGVuYXRlUkUgPSAvKFteLV0pKFtBLVpdKS9nO1xudmFyIGh5cGhlbmF0ZSA9IGNh
Y2hlZChmdW5jdGlvbiAoc3RyKSB7XG4gIHJldHVybiBzdHJcbiAgICAucmVwbGFjZShoeXBoZW5h
dGVSRSwgJyQxLSQyJylcbiAgICAucmVwbGFjZShoeXBoZW5hdGVSRSwgJyQxLSQyJylcbiAgICAu
dG9Mb3dlckNhc2UoKVxufSk7XG5cbi8qKlxuICogU2ltcGxlIGJpbmQsIGZhc3RlciB0aGFuIG5h
dGl2ZVxuICovXG5mdW5jdGlvbiBiaW5kIChmbiwgY3R4KSB7XG4gIGZ1bmN0aW9uIGJvdW5kRm4g
KGEpIHtcbiAgICB2YXIgbCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgcmV0dXJuIGxcbiAgICAg
ID8gbCA+IDFcbiAgICAgICAgPyBmbi5hcHBseShjdHgsIGFyZ3VtZW50cylcbiAgICAgICAgOiBm
bi5jYWxsKGN0eCwgYSlcbiAgICAgIDogZm4uY2FsbChjdHgpXG4gIH1cbiAgLy8gcmVjb3JkIG9y
aWdpbmFsIGZuIGxlbmd0aFxuICBib3VuZEZuLl9sZW5ndGggPSBmbi5sZW5ndGg7XG4gIHJldHVy
biBib3VuZEZuXG59XG5cbi8qKlxuICogQ29udmVydCBhbiBBcnJheS1saWtlIG9iamVjdCB0byBh
IHJlYWwgQXJyYXkuXG4gKi9cbmZ1bmN0aW9uIHRvQXJyYXkgKGxpc3QsIHN0YXJ0KSB7XG4gIHN0
YXJ0ID0gc3RhcnQgfHwgMDtcbiAgdmFyIGkgPSBsaXN0Lmxlbmd0aCAtIHN0YXJ0O1xuICB2YXIg
cmV0ID0gbmV3IEFycmF5KGkpO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgcmV0W2ldID0gbGlzdFtp
ICsgc3RhcnRdO1xuICB9XG4gIHJldHVybiByZXRcbn1cblxuLyoqXG4gKiBNaXggcHJvcGVydGll
cyBpbnRvIHRhcmdldCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGV4dGVuZCAodG8sIF9mcm9tKSB7
XG4gIGZvciAodmFyIGtleSBpbiBfZnJvbSkge1xuICAgIHRvW2tleV0gPSBfZnJvbVtrZXldO1xu
ICB9XG4gIHJldHVybiB0b1xufVxuXG4vKipcbiAqIE1lcmdlIGFuIEFycmF5IG9mIE9iamVjdHMg
aW50byBhIHNpbmdsZSBPYmplY3QuXG4gKi9cbmZ1bmN0aW9uIHRvT2JqZWN0IChhcnIpIHtcbiAg
dmFyIHJlcyA9IHt9O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xu
ICAgIGlmIChhcnJbaV0pIHtcbiAgICAgIGV4dGVuZChyZXMsIGFycltpXSk7XG4gICAgfVxuICB9
XG4gIHJldHVybiByZXNcbn1cblxuLyoqXG4gKiBQZXJmb3JtIG5vIG9wZXJhdGlvbi5cbiAqIFN0
dWJiaW5nIGFyZ3MgdG8gbWFrZSBGbG93IGhhcHB5IHdpdGhvdXQgbGVhdmluZyB1c2VsZXNzIHRy
YW5zcGlsZWQgY29kZVxuICogd2l0aCAuLi5yZXN0IChodHRwczovL2Zsb3cub3JnL2Jsb2cvMjAx
Ny8wNS8wNy9TdHJpY3QtRnVuY3Rpb24tQ2FsbC1Bcml0eS8pXG4gKi9cbmZ1bmN0aW9uIG5vb3Ag
KGEsIGIsIGMpIHt9XG5cbi8qKlxuICogQWx3YXlzIHJldHVybiBmYWxzZS5cbiAqL1xudmFyIG5v
ID0gZnVuY3Rpb24gKGEsIGIsIGMpIHsgcmV0dXJuIGZhbHNlOyB9O1xuXG4vKipcbiAqIFJldHVy
biBzYW1lIHZhbHVlXG4gKi9cbnZhciBpZGVudGl0eSA9IGZ1bmN0aW9uIChfKSB7IHJldHVybiBf
OyB9O1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgc3RhdGljIGtleXMgc3RyaW5nIGZyb20gY29tcGls
ZXIgbW9kdWxlcy5cbiAqL1xuZnVuY3Rpb24gZ2VuU3RhdGljS2V5cyAobW9kdWxlcykge1xuICBy
ZXR1cm4gbW9kdWxlcy5yZWR1Y2UoZnVuY3Rpb24gKGtleXMsIG0pIHtcbiAgICByZXR1cm4ga2V5
cy5jb25jYXQobS5zdGF0aWNLZXlzIHx8IFtdKVxuICB9LCBbXSkuam9pbignLCcpXG59XG5cbi8q
KlxuICogQ2hlY2sgaWYgdHdvIHZhbHVlcyBhcmUgbG9vc2VseSBlcXVhbCAtIHRoYXQgaXMsXG4g
KiBpZiB0aGV5IGFyZSBwbGFpbiBvYmplY3RzLCBkbyB0aGV5IGhhdmUgdGhlIHNhbWUgc2hhcGU/
XG4gKi9cbmZ1bmN0aW9uIGxvb3NlRXF1YWwgKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHsgcmV0
dXJuIHRydWUgfVxuICB2YXIgaXNPYmplY3RBID0gaXNPYmplY3QoYSk7XG4gIHZhciBpc09iamVj
dEIgPSBpc09iamVjdChiKTtcbiAgaWYgKGlzT2JqZWN0QSAmJiBpc09iamVjdEIpIHtcbiAgICB0
cnkge1xuICAgICAgdmFyIGlzQXJyYXlBID0gQXJyYXkuaXNBcnJheShhKTtcbiAgICAgIHZhciBp
c0FycmF5QiA9IEFycmF5LmlzQXJyYXkoYik7XG4gICAgICBpZiAoaXNBcnJheUEgJiYgaXNBcnJh
eUIpIHtcbiAgICAgICAgcmV0dXJuIGEubGVuZ3RoID09PSBiLmxlbmd0aCAmJiBhLmV2ZXJ5KGZ1
bmN0aW9uIChlLCBpKSB7XG4gICAgICAgICAgcmV0dXJuIGxvb3NlRXF1YWwoZSwgYltpXSlcbiAg
ICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAoIWlzQXJyYXlBICYmICFpc0FycmF5Qikge1xuICAg
ICAgICB2YXIga2V5c0EgPSBPYmplY3Qua2V5cyhhKTtcbiAgICAgICAgdmFyIGtleXNCID0gT2Jq
ZWN0LmtleXMoYik7XG4gICAgICAgIHJldHVybiBrZXlzQS5sZW5ndGggPT09IGtleXNCLmxlbmd0
aCAmJiBrZXlzQS5ldmVyeShmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgcmV0dXJuIGxvb3Nl
RXF1YWwoYVtrZXldLCBiW2tleV0pXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAg
ICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAg
IH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xu
ICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9IGVsc2UgaWYgKCFpc09iamVjdEEgJiYgIWlz
T2JqZWN0Qikge1xuICAgIHJldHVybiBTdHJpbmcoYSkgPT09IFN0cmluZyhiKVxuICB9IGVsc2Ug
e1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbmZ1bmN0aW9uIGxvb3NlSW5kZXhPZiAoYXJy
LCB2YWwpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICBp
ZiAobG9vc2VFcXVhbChhcnJbaV0sIHZhbCkpIHsgcmV0dXJuIGkgfVxuICB9XG4gIHJldHVybiAt
MVxufVxuXG4vKipcbiAqIEVuc3VyZSBhIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IG9uY2UuXG4g
Ki9cbmZ1bmN0aW9uIG9uY2UgKGZuKSB7XG4gIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgcmV0dXJu
IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWNhbGxlZCkge1xuICAgICAgY2FsbGVkID0gdHJ1ZTtc
biAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICB9XG59XG5cbnZhciBT
U1JfQVRUUiA9ICdkYXRhLXNlcnZlci1yZW5kZXJlZCc7XG5cbnZhciBBU1NFVF9UWVBFUyA9IFtc
biAgJ2NvbXBvbmVudCcsXG4gICdkaXJlY3RpdmUnLFxuICAnZmlsdGVyJ1xuXTtcblxudmFyIExJ
RkVDWUNMRV9IT09LUyA9IFtcbiAgJ2JlZm9yZUNyZWF0ZScsXG4gICdjcmVhdGVkJyxcbiAgJ2Jl
Zm9yZU1vdW50JyxcbiAgJ21vdW50ZWQnLFxuICAnYmVmb3JlVXBkYXRlJyxcbiAgJ3VwZGF0ZWQn
LFxuICAnYmVmb3JlRGVzdHJveScsXG4gICdkZXN0cm95ZWQnLFxuICAnYWN0aXZhdGVkJyxcbiAg
J2RlYWN0aXZhdGVkJ1xuXTtcblxuLyogICovXG5cbnZhciBjb25maWcgPSAoe1xuICAvKipcbiAg
ICogT3B0aW9uIG1lcmdlIHN0cmF0ZWdpZXMgKHVzZWQgaW4gY29yZS91dGlsL29wdGlvbnMpXG4g
ICAqL1xuICBvcHRpb25NZXJnZVN0cmF0ZWdpZXM6IE9iamVjdC5jcmVhdGUobnVsbCksXG5cbiAg
LyoqXG4gICAqIFdoZXRoZXIgdG8gc3VwcHJlc3Mgd2FybmluZ3MuXG4gICAqL1xuICBzaWxlbnQ6
IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBTaG93IHByb2R1Y3Rpb24gbW9kZSB0aXAgbWVzc2FnZSBv
biBib290P1xuICAgKi9cbiAgcHJvZHVjdGlvblRpcDogXCJwcm9kdWN0aW9uXCIgIT09ICdwcm9k
dWN0aW9uJyxcblxuICAvKipcbiAgICogV2hldGhlciB0byBlbmFibGUgZGV2dG9vbHNcbiAgICov
XG4gIGRldnRvb2xzOiBcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nLFxuXG4gIC8qKlxu
ICAgKiBXaGV0aGVyIHRvIHJlY29yZCBwZXJmXG4gICAqL1xuICBwZXJmb3JtYW5jZTogZmFsc2Us
XG5cbiAgLyoqXG4gICAqIEVycm9yIGhhbmRsZXIgZm9yIHdhdGNoZXIgZXJyb3JzXG4gICAqL1xu
ICBlcnJvckhhbmRsZXI6IG51bGwsXG5cbiAgLyoqXG4gICAqIFdhcm4gaGFuZGxlciBmb3Igd2F0
Y2hlciB3YXJuc1xuICAgKi9cbiAgd2FybkhhbmRsZXI6IG51bGwsXG5cbiAgLyoqXG4gICAqIEln
bm9yZSBjZXJ0YWluIGN1c3RvbSBlbGVtZW50c1xuICAgKi9cbiAgaWdub3JlZEVsZW1lbnRzOiBb
XSxcblxuICAvKipcbiAgICogQ3VzdG9tIHVzZXIga2V5IGFsaWFzZXMgZm9yIHYtb25cbiAgICov
XG4gIGtleUNvZGVzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuXG4gIC8qKlxuICAgKiBDaGVjayBp
ZiBhIHRhZyBpcyByZXNlcnZlZCBzbyB0aGF0IGl0IGNhbm5vdCBiZSByZWdpc3RlcmVkIGFzIGFc
biAgICogY29tcG9uZW50LiBUaGlzIGlzIHBsYXRmb3JtLWRlcGVuZGVudCBhbmQgbWF5IGJlIG92
ZXJ3cml0dGVuLlxuICAgKi9cbiAgaXNSZXNlcnZlZFRhZzogbm8sXG5cbiAgLyoqXG4gICAqIENo
ZWNrIGlmIGFuIGF0dHJpYnV0ZSBpcyByZXNlcnZlZCBzbyB0aGF0IGl0IGNhbm5vdCBiZSB1c2Vk
IGFzIGEgY29tcG9uZW50XG4gICAqIHByb3AuIFRoaXMgaXMgcGxhdGZvcm0tZGVwZW5kZW50IGFu
ZCBtYXkgYmUgb3ZlcndyaXR0ZW4uXG4gICAqL1xuICBpc1Jlc2VydmVkQXR0cjogbm8sXG5cbiAg
LyoqXG4gICAqIENoZWNrIGlmIGEgdGFnIGlzIGFuIHVua25vd24gZWxlbWVudC5cbiAgICogUGxh
dGZvcm0tZGVwZW5kZW50LlxuICAgKi9cbiAgaXNVbmtub3duRWxlbWVudDogbm8sXG5cbiAgLyoq
XG4gICAqIEdldCB0aGUgbmFtZXNwYWNlIG9mIGFuIGVsZW1lbnRcbiAgICovXG4gIGdldFRhZ05h
bWVzcGFjZTogbm9vcCxcblxuICAvKipcbiAgICogUGFyc2UgdGhlIHJlYWwgdGFnIG5hbWUgZm9y
IHRoZSBzcGVjaWZpYyBwbGF0Zm9ybS5cbiAgICovXG4gIHBhcnNlUGxhdGZvcm1UYWdOYW1lOiBp
ZGVudGl0eSxcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gYXR0cmlidXRlIG11c3QgYmUgYm91
bmQgdXNpbmcgcHJvcGVydHksIGUuZy4gdmFsdWVcbiAgICogUGxhdGZvcm0tZGVwZW5kZW50Llxu
ICAgKi9cbiAgbXVzdFVzZVByb3A6IG5vLFxuXG4gIC8qKlxuICAgKiBFeHBvc2VkIGZvciBsZWdh
Y3kgcmVhc29uc1xuICAgKi9cbiAgX2xpZmVjeWNsZUhvb2tzOiBMSUZFQ1lDTEVfSE9PS1Ncbn0p
O1xuXG4vKiAgKi9cblxudmFyIGVtcHR5T2JqZWN0ID0gT2JqZWN0LmZyZWV6ZSh7fSk7XG5cbi8q
KlxuICogQ2hlY2sgaWYgYSBzdHJpbmcgc3RhcnRzIHdpdGggJCBvciBfXG4gKi9cbmZ1bmN0aW9u
IGlzUmVzZXJ2ZWQgKHN0cikge1xuICB2YXIgYyA9IChzdHIgKyAnJykuY2hhckNvZGVBdCgwKTtc
biAgcmV0dXJuIGMgPT09IDB4MjQgfHwgYyA9PT0gMHg1RlxufVxuXG4vKipcbiAqIERlZmluZSBh
IHByb3BlcnR5LlxuICovXG5mdW5jdGlvbiBkZWYgKG9iaiwga2V5LCB2YWwsIGVudW1lcmFibGUp
IHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgdmFsdWU6IHZhbCxc
biAgICBlbnVtZXJhYmxlOiAhIWVudW1lcmFibGUsXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAg
Y29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xufVxuXG4vKipcbiAqIFBhcnNlIHNpbXBsZSBwYXRo
LlxuICovXG52YXIgYmFpbFJFID0gL1teXFx3LiRdLztcbmZ1bmN0aW9uIHBhcnNlUGF0aCAocGF0
aCkge1xuICBpZiAoYmFpbFJFLnRlc3QocGF0aCkpIHtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIg
c2VnbWVudHMgPSBwYXRoLnNwbGl0KCcuJyk7XG4gIHJldHVybiBmdW5jdGlvbiAob2JqKSB7XG4g
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWdtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYg
KCFvYmopIHsgcmV0dXJuIH1cbiAgICAgIG9iaiA9IG9ialtzZWdtZW50c1tpXV07XG4gICAgfVxu
ICAgIHJldHVybiBvYmpcbiAgfVxufVxuXG4vKiAgKi9cblxudmFyIHdhcm4gPSBub29wO1xudmFy
IHRpcCA9IG5vb3A7XG52YXIgZm9ybWF0Q29tcG9uZW50TmFtZSA9IChudWxsKTsgLy8gd29yayBh
cm91bmQgZmxvdyBjaGVja1xuXG5pZiAoZmFsc2UpIHtcbiAgdmFyIGhhc0NvbnNvbGUgPSB0eXBl
b2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCc7XG4gIHZhciBjbGFzc2lmeVJFID0gLyg/Ol58Wy1f
XSkoXFx3KS9nO1xuICB2YXIgY2xhc3NpZnkgPSBmdW5jdGlvbiAoc3RyKSB7IHJldHVybiBzdHJc
biAgICAucmVwbGFjZShjbGFzc2lmeVJFLCBmdW5jdGlvbiAoYykgeyByZXR1cm4gYy50b1VwcGVy
Q2FzZSgpOyB9KVxuICAgIC5yZXBsYWNlKC9bLV9dL2csICcnKTsgfTtcblxuICB3YXJuID0gZnVu
Y3Rpb24gKG1zZywgdm0pIHtcbiAgICB2YXIgdHJhY2UgPSB2bSA/IGdlbmVyYXRlQ29tcG9uZW50
VHJhY2Uodm0pIDogJyc7XG5cbiAgICBpZiAoY29uZmlnLndhcm5IYW5kbGVyKSB7XG4gICAgICBj
b25maWcud2FybkhhbmRsZXIuY2FsbChudWxsLCBtc2csIHZtLCB0cmFjZSk7XG4gICAgfSBlbHNl
IGlmIChoYXNDb25zb2xlICYmICghY29uZmlnLnNpbGVudCkpIHtcbiAgICAgIGNvbnNvbGUuZXJy
b3IoKFwiW1Z1ZSB3YXJuXTogXCIgKyBtc2cgKyB0cmFjZSkpO1xuICAgIH1cbiAgfTtcblxuICB0
aXAgPSBmdW5jdGlvbiAobXNnLCB2bSkge1xuICAgIGlmIChoYXNDb25zb2xlICYmICghY29uZmln
LnNpbGVudCkpIHtcbiAgICAgIGNvbnNvbGUud2FybihcIltWdWUgdGlwXTogXCIgKyBtc2cgKyAo
XG4gICAgICAgIHZtID8gZ2VuZXJhdGVDb21wb25lbnRUcmFjZSh2bSkgOiAnJ1xuICAgICAgKSk7
XG4gICAgfVxuICB9O1xuXG4gIGZvcm1hdENvbXBvbmVudE5hbWUgPSBmdW5jdGlvbiAodm0sIGlu
Y2x1ZGVGaWxlKSB7XG4gICAgaWYgKHZtLiRyb290ID09PSB2bSkge1xuICAgICAgcmV0dXJuICc8
Um9vdD4nXG4gICAgfVxuICAgIHZhciBuYW1lID0gdHlwZW9mIHZtID09PSAnc3RyaW5nJ1xuICAg
ICAgPyB2bVxuICAgICAgOiB0eXBlb2Ygdm0gPT09ICdmdW5jdGlvbicgJiYgdm0ub3B0aW9uc1xu
ICAgICAgICA/IHZtLm9wdGlvbnMubmFtZVxuICAgICAgICA6IHZtLl9pc1Z1ZVxuICAgICAgICAg
ID8gdm0uJG9wdGlvbnMubmFtZSB8fCB2bS4kb3B0aW9ucy5fY29tcG9uZW50VGFnXG4gICAgICAg
ICAgOiB2bS5uYW1lO1xuXG4gICAgdmFyIGZpbGUgPSB2bS5faXNWdWUgJiYgdm0uJG9wdGlvbnMu
X19maWxlO1xuICAgIGlmICghbmFtZSAmJiBmaWxlKSB7XG4gICAgICB2YXIgbWF0Y2ggPSBmaWxl
Lm1hdGNoKC8oW14vXFxcXF0rKVxcLnZ1ZSQvKTtcbiAgICAgIG5hbWUgPSBtYXRjaCAmJiBtYXRj
aFsxXTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgKG5hbWUgPyAoXCI8XCIgKyAoY2xh
c3NpZnkobmFtZSkpICsgXCI+XCIpIDogXCI8QW5vbnltb3VzPlwiKSArXG4gICAgICAoZmlsZSAm
JiBpbmNsdWRlRmlsZSAhPT0gZmFsc2UgPyAoXCIgYXQgXCIgKyBmaWxlKSA6ICcnKVxuICAgIClc
biAgfTtcblxuICB2YXIgcmVwZWF0ID0gZnVuY3Rpb24gKHN0ciwgbikge1xuICAgIHZhciByZXMg
PSAnJztcbiAgICB3aGlsZSAobikge1xuICAgICAgaWYgKG4gJSAyID09PSAxKSB7IHJlcyArPSBz
dHI7IH1cbiAgICAgIGlmIChuID4gMSkgeyBzdHIgKz0gc3RyOyB9XG4gICAgICBuID4+PSAxO1xu
ICAgIH1cbiAgICByZXR1cm4gcmVzXG4gIH07XG5cbiAgdmFyIGdlbmVyYXRlQ29tcG9uZW50VHJh
Y2UgPSBmdW5jdGlvbiAodm0pIHtcbiAgICBpZiAodm0uX2lzVnVlICYmIHZtLiRwYXJlbnQpIHtc
biAgICAgIHZhciB0cmVlID0gW107XG4gICAgICB2YXIgY3VycmVudFJlY3Vyc2l2ZVNlcXVlbmNl
ID0gMDtcbiAgICAgIHdoaWxlICh2bSkge1xuICAgICAgICBpZiAodHJlZS5sZW5ndGggPiAwKSB7
XG4gICAgICAgICAgdmFyIGxhc3QgPSB0cmVlW3RyZWUubGVuZ3RoIC0gMV07XG4gICAgICAgICAg
aWYgKGxhc3QuY29uc3RydWN0b3IgPT09IHZtLmNvbnN0cnVjdG9yKSB7XG4gICAgICAgICAgICBj
dXJyZW50UmVjdXJzaXZlU2VxdWVuY2UrKztcbiAgICAgICAgICAgIHZtID0gdm0uJHBhcmVudDtc
biAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50UmVjdXJz
aXZlU2VxdWVuY2UgPiAwKSB7XG4gICAgICAgICAgICB0cmVlW3RyZWUubGVuZ3RoIC0gMV0gPSBb
bGFzdCwgY3VycmVudFJlY3Vyc2l2ZVNlcXVlbmNlXTtcbiAgICAgICAgICAgIGN1cnJlbnRSZWN1
cnNpdmVTZXF1ZW5jZSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRyZWUu
cHVzaCh2bSk7XG4gICAgICAgIHZtID0gdm0uJHBhcmVudDtcbiAgICAgIH1cbiAgICAgIHJldHVy
biAnXFxuXFxuZm91bmQgaW5cXG5cXG4nICsgdHJlZVxuICAgICAgICAubWFwKGZ1bmN0aW9uICh2
bSwgaSkgeyByZXR1cm4gKFwiXCIgKyAoaSA9PT0gMCA/ICctLS0+ICcgOiByZXBlYXQoJyAnLCA1
ICsgaSAqIDIpKSArIChBcnJheS5pc0FycmF5KHZtKVxuICAgICAgICAgICAgPyAoKGZvcm1hdENv
bXBvbmVudE5hbWUodm1bMF0pKSArIFwiLi4uIChcIiArICh2bVsxXSkgKyBcIiByZWN1cnNpdmUg
Y2FsbHMpXCIpXG4gICAgICAgICAgICA6IGZvcm1hdENvbXBvbmVudE5hbWUodm0pKSk7IH0pXG4g
ICAgICAgIC5qb2luKCdcXG4nKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gKFwiXFxuXFxu
KGZvdW5kIGluIFwiICsgKGZvcm1hdENvbXBvbmVudE5hbWUodm0pKSArIFwiKVwiKVxuICAgIH1c
biAgfTtcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGhhbmRsZUVycm9yIChlcnIsIHZtLCBpbmZv
KSB7XG4gIGlmIChjb25maWcuZXJyb3JIYW5kbGVyKSB7XG4gICAgY29uZmlnLmVycm9ySGFuZGxl
ci5jYWxsKG51bGwsIGVyciwgdm0sIGluZm8pO1xuICB9IGVsc2Uge1xuICAgIGlmIChmYWxzZSkg
e1xuICAgICAgd2FybigoXCJFcnJvciBpbiBcIiArIGluZm8gKyBcIjogXFxcIlwiICsgKGVyci50
b1N0cmluZygpKSArIFwiXFxcIlwiKSwgdm0pO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25v
cmUgZWxzZSAqL1xuICAgIGlmIChpbkJyb3dzZXIgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRl
ZmluZWQnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgfSBlbHNlIHtcbiAgICAg
IHRocm93IGVyclxuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cbi8qIGdsb2JhbHMgTXV0YXRpb25P
YnNlcnZlciAqL1xuXG4vLyBjYW4gd2UgdXNlIF9fcHJvdG9fXz9cbnZhciBoYXNQcm90byA9ICdf
X3Byb3RvX18nIGluIHt9O1xuXG4vLyBCcm93c2VyIGVudmlyb25tZW50IHNuaWZmaW5nXG52YXIg
aW5Ccm93c2VyID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCc7XG52YXIgVUEgPSBpbkJy
b3dzZXIgJiYgd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtcbnZhciBp
c0lFID0gVUEgJiYgL21zaWV8dHJpZGVudC8udGVzdChVQSk7XG52YXIgaXNJRTkgPSBVQSAmJiBV
QS5pbmRleE9mKCdtc2llIDkuMCcpID4gMDtcbnZhciBpc0VkZ2UgPSBVQSAmJiBVQS5pbmRleE9m
KCdlZGdlLycpID4gMDtcbnZhciBpc0FuZHJvaWQgPSBVQSAmJiBVQS5pbmRleE9mKCdhbmRyb2lk
JykgPiAwO1xudmFyIGlzSU9TID0gVUEgJiYgL2lwaG9uZXxpcGFkfGlwb2R8aW9zLy50ZXN0KFVB
KTtcbnZhciBpc0Nocm9tZSA9IFVBICYmIC9jaHJvbWVcXC9cXGQrLy50ZXN0KFVBKSAmJiAhaXNF
ZGdlO1xuXG4vLyBGaXJlZml4IGhhcyBhIFwid2F0Y2hcIiBmdW5jdGlvbiBvbiBPYmplY3QucHJv
dG90eXBlLi4uXG52YXIgbmF0aXZlV2F0Y2ggPSAoe30pLndhdGNoO1xuXG52YXIgc3VwcG9ydHNQ
YXNzaXZlID0gZmFsc2U7XG5pZiAoaW5Ccm93c2VyKSB7XG4gIHRyeSB7XG4gICAgdmFyIG9wdHMg
PSB7fTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob3B0cywgJ3Bhc3NpdmUnLCAoe1xuICAg
ICAgZ2V0OiBmdW5jdGlvbiBnZXQgKCkge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4
dCAqL1xuICAgICAgICBzdXBwb3J0c1Bhc3NpdmUgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pKTsg
Ly8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzI4NVxuICAgIHdpbmRv
dy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0LXBhc3NpdmUnLCBudWxsLCBvcHRzKTtcbiAgfSBjYXRj
aCAoZSkge31cbn1cblxuLy8gdGhpcyBuZWVkcyB0byBiZSBsYXp5LWV2YWxlZCBiZWNhdXNlIHZ1
ZSBtYXkgYmUgcmVxdWlyZWQgYmVmb3JlXG4vLyB2dWUtc2VydmVyLXJlbmRlcmVyIGNhbiBzZXQg
VlVFX0VOVlxudmFyIF9pc1NlcnZlcjtcbnZhciBpc1NlcnZlclJlbmRlcmluZyA9IGZ1bmN0aW9u
ICgpIHtcbiAgaWYgKF9pc1NlcnZlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLyogaXN0YW5idWwg
aWdub3JlIGlmICovXG4gICAgaWYgKCFpbkJyb3dzZXIgJiYgdHlwZW9mIGdsb2JhbCAhPT0gJ3Vu
ZGVmaW5lZCcpIHtcbiAgICAgIC8vIGRldGVjdCBwcmVzZW5jZSBvZiB2dWUtc2VydmVyLXJlbmRl
cmVyIGFuZCBhdm9pZFxuICAgICAgLy8gV2VicGFjayBzaGltbWluZyB0aGUgcHJvY2Vzc1xuICAg
ICAgX2lzU2VydmVyID0gZ2xvYmFsWydwcm9jZXNzJ10uZW52LlZVRV9FTlYgPT09ICdzZXJ2ZXIn
O1xuICAgIH0gZWxzZSB7XG4gICAgICBfaXNTZXJ2ZXIgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAg
cmV0dXJuIF9pc1NlcnZlclxufTtcblxuLy8gZGV0ZWN0IGRldnRvb2xzXG52YXIgZGV2dG9vbHMg
PSBpbkJyb3dzZXIgJiYgd2luZG93Ll9fVlVFX0RFVlRPT0xTX0dMT0JBTF9IT09LX187XG5cbi8q
IGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBpc05hdGl2ZSAoQ3Rvcikge1xuICBy
ZXR1cm4gdHlwZW9mIEN0b3IgPT09ICdmdW5jdGlvbicgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KEN0
b3IudG9TdHJpbmcoKSlcbn1cblxudmFyIGhhc1N5bWJvbCA9XG4gIHR5cGVvZiBTeW1ib2wgIT09
ICd1bmRlZmluZWQnICYmIGlzTmF0aXZlKFN5bWJvbCkgJiZcbiAgdHlwZW9mIFJlZmxlY3QgIT09
ICd1bmRlZmluZWQnICYmIGlzTmF0aXZlKFJlZmxlY3Qub3duS2V5cyk7XG5cbi8qKlxuICogRGVm
ZXIgYSB0YXNrIHRvIGV4ZWN1dGUgaXQgYXN5bmNocm9ub3VzbHkuXG4gKi9cbnZhciBuZXh0VGlj
ayA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciBjYWxsYmFja3MgPSBbXTtcbiAgdmFyIHBlbmRpbmcg
PSBmYWxzZTtcbiAgdmFyIHRpbWVyRnVuYztcblxuICBmdW5jdGlvbiBuZXh0VGlja0hhbmRsZXIg
KCkge1xuICAgIHBlbmRpbmcgPSBmYWxzZTtcbiAgICB2YXIgY29waWVzID0gY2FsbGJhY2tzLnNs
aWNlKDApO1xuICAgIGNhbGxiYWNrcy5sZW5ndGggPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgY29waWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb3BpZXNbaV0oKTtcbiAgICB9XG4gIH1c
blxuICAvLyB0aGUgbmV4dFRpY2sgYmVoYXZpb3IgbGV2ZXJhZ2VzIHRoZSBtaWNyb3Rhc2sgcXVl
dWUsIHdoaWNoIGNhbiBiZSBhY2Nlc3NlZFxuICAvLyB2aWEgZWl0aGVyIG5hdGl2ZSBQcm9taXNl
LnRoZW4gb3IgTXV0YXRpb25PYnNlcnZlci5cbiAgLy8gTXV0YXRpb25PYnNlcnZlciBoYXMgd2lk
ZXIgc3VwcG9ydCwgaG93ZXZlciBpdCBpcyBzZXJpb3VzbHkgYnVnZ2VkIGluXG4gIC8vIFVJV2Vi
VmlldyBpbiBpT1MgPj0gOS4zLjMgd2hlbiB0cmlnZ2VyZWQgaW4gdG91Y2ggZXZlbnQgaGFuZGxl
cnMuIEl0XG4gIC8vIGNvbXBsZXRlbHkgc3RvcHMgd29ya2luZyBhZnRlciB0cmlnZ2VyaW5nIGEg
ZmV3IHRpbWVzLi4uIHNvLCBpZiBuYXRpdmVcbiAgLy8gUHJvbWlzZSBpcyBhdmFpbGFibGUsIHdl
IHdpbGwgdXNlIGl0OlxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKHR5cGVvZiBQ
cm9taXNlICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShQcm9taXNlKSkge1xuICAgIHZhciBw
ID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgdmFyIGxvZ0Vycm9yID0gZnVuY3Rpb24gKGVycikg
eyBjb25zb2xlLmVycm9yKGVycik7IH07XG4gICAgdGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xu
ICAgICAgcC50aGVuKG5leHRUaWNrSGFuZGxlcikuY2F0Y2gobG9nRXJyb3IpO1xuICAgICAgLy8g
aW4gcHJvYmxlbWF0aWMgVUlXZWJWaWV3cywgUHJvbWlzZS50aGVuIGRvZXNuJ3QgY29tcGxldGVs
eSBicmVhaywgYnV0XG4gICAgICAvLyBpdCBjYW4gZ2V0IHN0dWNrIGluIGEgd2VpcmQgc3RhdGUg
d2hlcmUgY2FsbGJhY2tzIGFyZSBwdXNoZWQgaW50byB0aGVcbiAgICAgIC8vIG1pY3JvdGFzayBx
dWV1ZSBidXQgdGhlIHF1ZXVlIGlzbid0IGJlaW5nIGZsdXNoZWQsIHVudGlsIHRoZSBicm93c2Vy
XG4gICAgICAvLyBuZWVkcyB0byBkbyBzb21lIG90aGVyIHdvcmssIGUuZy4gaGFuZGxlIGEgdGlt
ZXIuIFRoZXJlZm9yZSB3ZSBjYW5cbiAgICAgIC8vIFwiZm9yY2VcIiB0aGUgbWljcm90YXNrIHF1
ZXVlIHRvIGJlIGZsdXNoZWQgYnkgYWRkaW5nIGFuIGVtcHR5IHRpbWVyLlxuICAgICAgaWYgKGlz
SU9TKSB7IHNldFRpbWVvdXQobm9vcCk7IH1cbiAgICB9O1xuICB9IGVsc2UgaWYgKHR5cGVvZiBN
dXRhdGlvbk9ic2VydmVyICE9PSAndW5kZWZpbmVkJyAmJiAoXG4gICAgaXNOYXRpdmUoTXV0YXRp
b25PYnNlcnZlcikgfHxcbiAgICAvLyBQaGFudG9tSlMgYW5kIGlPUyA3LnhcbiAgICBNdXRhdGlv
bk9ic2VydmVyLnRvU3RyaW5nKCkgPT09ICdbb2JqZWN0IE11dGF0aW9uT2JzZXJ2ZXJDb25zdHJ1
Y3Rvcl0nXG4gICkpIHtcbiAgICAvLyB1c2UgTXV0YXRpb25PYnNlcnZlciB3aGVyZSBuYXRpdmUg
UHJvbWlzZSBpcyBub3QgYXZhaWxhYmxlLFxuICAgIC8vIGUuZy4gUGhhbnRvbUpTIElFMTEsIGlP
UzcsIEFuZHJvaWQgNC40XG4gICAgdmFyIGNvdW50ZXIgPSAxO1xuICAgIHZhciBvYnNlcnZlciA9
IG5ldyBNdXRhdGlvbk9ic2VydmVyKG5leHRUaWNrSGFuZGxlcik7XG4gICAgdmFyIHRleHROb2Rl
ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoU3RyaW5nKGNvdW50ZXIpKTtcbiAgICBvYnNlcnZl
ci5vYnNlcnZlKHRleHROb2RlLCB7XG4gICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlXG4gICAgfSk7
XG4gICAgdGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgICAgY291bnRlciA9IChjb3VudGVy
ICsgMSkgJSAyO1xuICAgICAgdGV4dE5vZGUuZGF0YSA9IFN0cmluZyhjb3VudGVyKTtcbiAgICB9
O1xuICB9IGVsc2Uge1xuICAgIC8vIGZhbGxiYWNrIHRvIHNldFRpbWVvdXRcbiAgICAvKiBpc3Rh
bmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHRpbWVyRnVuYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAg
IHNldFRpbWVvdXQobmV4dFRpY2tIYW5kbGVyLCAwKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJu
IGZ1bmN0aW9uIHF1ZXVlTmV4dFRpY2sgKGNiLCBjdHgpIHtcbiAgICB2YXIgX3Jlc29sdmU7XG4g
ICAgY2FsbGJhY2tzLnB1c2goZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGNiKSB7XG4gICAgICAg
IHRyeSB7XG4gICAgICAgICAgY2IuY2FsbChjdHgpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4g
ICAgICAgICAgaGFuZGxlRXJyb3IoZSwgY3R4LCAnbmV4dFRpY2snKTtcbiAgICAgICAgfVxuICAg
ICAgfSBlbHNlIGlmIChfcmVzb2x2ZSkge1xuICAgICAgICBfcmVzb2x2ZShjdHgpO1xuICAgICAg
fVxuICAgIH0pO1xuICAgIGlmICghcGVuZGluZykge1xuICAgICAgcGVuZGluZyA9IHRydWU7XG4g
ICAgICB0aW1lckZ1bmMoKTtcbiAgICB9XG4gICAgaWYgKCFjYiAmJiB0eXBlb2YgUHJvbWlzZSAh
PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVz
b2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIF9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIH0pXG4g
ICAgfVxuICB9XG59KSgpO1xuXG52YXIgX1NldDtcbi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xu
aWYgKHR5cGVvZiBTZXQgIT09ICd1bmRlZmluZWQnICYmIGlzTmF0aXZlKFNldCkpIHtcbiAgLy8g
dXNlIG5hdGl2ZSBTZXQgd2hlbiBhdmFpbGFibGUuXG4gIF9TZXQgPSBTZXQ7XG59IGVsc2Uge1xu
ICAvLyBhIG5vbi1zdGFuZGFyZCBTZXQgcG9seWZpbGwgdGhhdCBvbmx5IHdvcmtzIHdpdGggcHJp
bWl0aXZlIGtleXMuXG4gIF9TZXQgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNldCAo
KSB7XG4gICAgICB0aGlzLnNldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgfVxuICAgIFNl
dC5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gaGFzIChrZXkpIHtcbiAgICAgIHJldHVybiB0aGlz
LnNldFtrZXldID09PSB0cnVlXG4gICAgfTtcbiAgICBTZXQucHJvdG90eXBlLmFkZCA9IGZ1bmN0
aW9uIGFkZCAoa2V5KSB7XG4gICAgICB0aGlzLnNldFtrZXldID0gdHJ1ZTtcbiAgICB9O1xuICAg
IFNldC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiBjbGVhciAoKSB7XG4gICAgICB0aGlzLnNl
dCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgfTtcblxuICAgIHJldHVybiBTZXQ7XG4gIH0o
KSk7XG59XG5cbi8qICAqL1xuXG5cbnZhciB1aWQgPSAwO1xuXG4vKipcbiAqIEEgZGVwIGlzIGFu
IG9ic2VydmFibGUgdGhhdCBjYW4gaGF2ZSBtdWx0aXBsZVxuICogZGlyZWN0aXZlcyBzdWJzY3Jp
YmluZyB0byBpdC5cbiAqL1xudmFyIERlcCA9IGZ1bmN0aW9uIERlcCAoKSB7XG4gIHRoaXMuaWQg
PSB1aWQrKztcbiAgdGhpcy5zdWJzID0gW107XG59O1xuXG5EZXAucHJvdG90eXBlLmFkZFN1YiA9
IGZ1bmN0aW9uIGFkZFN1YiAoc3ViKSB7XG4gIHRoaXMuc3Vicy5wdXNoKHN1Yik7XG59O1xuXG5E
ZXAucHJvdG90eXBlLnJlbW92ZVN1YiA9IGZ1bmN0aW9uIHJlbW92ZVN1YiAoc3ViKSB7XG4gIHJl
bW92ZSh0aGlzLnN1YnMsIHN1Yik7XG59O1xuXG5EZXAucHJvdG90eXBlLmRlcGVuZCA9IGZ1bmN0
aW9uIGRlcGVuZCAoKSB7XG4gIGlmIChEZXAudGFyZ2V0KSB7XG4gICAgRGVwLnRhcmdldC5hZGRE
ZXAodGhpcyk7XG4gIH1cbn07XG5cbkRlcC5wcm90b3R5cGUubm90aWZ5ID0gZnVuY3Rpb24gbm90
aWZ5ICgpIHtcbiAgLy8gc3RhYmlsaXplIHRoZSBzdWJzY3JpYmVyIGxpc3QgZmlyc3RcbiAgdmFy
IHN1YnMgPSB0aGlzLnN1YnMuc2xpY2UoKTtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBzdWJzLmxl
bmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHN1YnNbaV0udXBkYXRlKCk7XG4gIH1cbn07XG5cbi8v
IHRoZSBjdXJyZW50IHRhcmdldCB3YXRjaGVyIGJlaW5nIGV2YWx1YXRlZC5cbi8vIHRoaXMgaXMg
Z2xvYmFsbHkgdW5pcXVlIGJlY2F1c2UgdGhlcmUgY291bGQgYmUgb25seSBvbmVcbi8vIHdhdGNo
ZXIgYmVpbmcgZXZhbHVhdGVkIGF0IGFueSB0aW1lLlxuRGVwLnRhcmdldCA9IG51bGw7XG52YXIg
dGFyZ2V0U3RhY2sgPSBbXTtcblxuZnVuY3Rpb24gcHVzaFRhcmdldCAoX3RhcmdldCkge1xuICBp
ZiAoRGVwLnRhcmdldCkgeyB0YXJnZXRTdGFjay5wdXNoKERlcC50YXJnZXQpOyB9XG4gIERlcC50
YXJnZXQgPSBfdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBwb3BUYXJnZXQgKCkge1xuICBEZXAudGFy
Z2V0ID0gdGFyZ2V0U3RhY2sucG9wKCk7XG59XG5cbi8qXG4gKiBub3QgdHlwZSBjaGVja2luZyB0
aGlzIGZpbGUgYmVjYXVzZSBmbG93IGRvZXNuJ3QgcGxheSB3ZWxsIHdpdGhcbiAqIGR5bmFtaWNh
bGx5IGFjY2Vzc2luZyBtZXRob2RzIG9uIEFycmF5IHByb3RvdHlwZVxuICovXG5cbnZhciBhcnJh
eVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xudmFyIGFycmF5TWV0aG9kcyA9IE9iamVjdC5jcmVh
dGUoYXJyYXlQcm90byk7W1xuICAncHVzaCcsXG4gICdwb3AnLFxuICAnc2hpZnQnLFxuICAndW5z
aGlmdCcsXG4gICdzcGxpY2UnLFxuICAnc29ydCcsXG4gICdyZXZlcnNlJ1xuXVxuLmZvckVhY2go
ZnVuY3Rpb24gKG1ldGhvZCkge1xuICAvLyBjYWNoZSBvcmlnaW5hbCBtZXRob2RcbiAgdmFyIG9y
aWdpbmFsID0gYXJyYXlQcm90b1ttZXRob2RdO1xuICBkZWYoYXJyYXlNZXRob2RzLCBtZXRob2Qs
IGZ1bmN0aW9uIG11dGF0b3IgKCkge1xuICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50
cy5sZW5ndGg7XG4gICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBs
ZW4gXTtcblxuICAgIHZhciByZXN1bHQgPSBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAg
ICB2YXIgb2IgPSB0aGlzLl9fb2JfXztcbiAgICB2YXIgaW5zZXJ0ZWQ7XG4gICAgc3dpdGNoICht
ZXRob2QpIHtcbiAgICAgIGNhc2UgJ3B1c2gnOlxuICAgICAgY2FzZSAndW5zaGlmdCc6XG4gICAg
ICAgIGluc2VydGVkID0gYXJncztcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3NwbGljZSc6
XG4gICAgICAgIGluc2VydGVkID0gYXJncy5zbGljZSgyKTtcbiAgICAgICAgYnJlYWtcbiAgICB9
XG4gICAgaWYgKGluc2VydGVkKSB7IG9iLm9ic2VydmVBcnJheShpbnNlcnRlZCk7IH1cbiAgICAv
LyBub3RpZnkgY2hhbmdlXG4gICAgb2IuZGVwLm5vdGlmeSgpO1xuICAgIHJldHVybiByZXN1bHRc
biAgfSk7XG59KTtcblxuLyogICovXG5cbnZhciBhcnJheUtleXMgPSBPYmplY3QuZ2V0T3duUHJv
cGVydHlOYW1lcyhhcnJheU1ldGhvZHMpO1xuXG4vKipcbiAqIEJ5IGRlZmF1bHQsIHdoZW4gYSBy
ZWFjdGl2ZSBwcm9wZXJ0eSBpcyBzZXQsIHRoZSBuZXcgdmFsdWUgaXNcbiAqIGFsc28gY29udmVy
dGVkIHRvIGJlY29tZSByZWFjdGl2ZS4gSG93ZXZlciB3aGVuIHBhc3NpbmcgZG93biBwcm9wcyxc
biAqIHdlIGRvbid0IHdhbnQgdG8gZm9yY2UgY29udmVyc2lvbiBiZWNhdXNlIHRoZSB2YWx1ZSBt
YXkgYmUgYSBuZXN0ZWQgdmFsdWVcbiAqIHVuZGVyIGEgZnJvemVuIGRhdGEgc3RydWN0dXJlLiBD
b252ZXJ0aW5nIGl0IHdvdWxkIGRlZmVhdCB0aGUgb3B0aW1pemF0aW9uLlxuICovXG52YXIgb2Jz
ZXJ2ZXJTdGF0ZSA9IHtcbiAgc2hvdWxkQ29udmVydDogdHJ1ZVxufTtcblxuLyoqXG4gKiBPYnNl
cnZlciBjbGFzcyB0aGF0IGFyZSBhdHRhY2hlZCB0byBlYWNoIG9ic2VydmVkXG4gKiBvYmplY3Qu
IE9uY2UgYXR0YWNoZWQsIHRoZSBvYnNlcnZlciBjb252ZXJ0cyB0YXJnZXRcbiAqIG9iamVjdCdz
IHByb3BlcnR5IGtleXMgaW50byBnZXR0ZXIvc2V0dGVycyB0aGF0XG4gKiBjb2xsZWN0IGRlcGVu
ZGVuY2llcyBhbmQgZGlzcGF0Y2hlcyB1cGRhdGVzLlxuICovXG52YXIgT2JzZXJ2ZXIgPSBmdW5j
dGlvbiBPYnNlcnZlciAodmFsdWUpIHtcbiAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB0aGlzLmRl
cCA9IG5ldyBEZXAoKTtcbiAgdGhpcy52bUNvdW50ID0gMDtcbiAgZGVmKHZhbHVlLCAnX19vYl9f
JywgdGhpcyk7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHZhciBhdWdtZW50
ID0gaGFzUHJvdG9cbiAgICAgID8gcHJvdG9BdWdtZW50XG4gICAgICA6IGNvcHlBdWdtZW50O1xu
ICAgIGF1Z21lbnQodmFsdWUsIGFycmF5TWV0aG9kcywgYXJyYXlLZXlzKTtcbiAgICB0aGlzLm9i
c2VydmVBcnJheSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy53YWxrKHZhbHVlKTtcbiAg
fVxufTtcblxuLyoqXG4gKiBXYWxrIHRocm91Z2ggZWFjaCBwcm9wZXJ0eSBhbmQgY29udmVydCB0
aGVtIGludG9cbiAqIGdldHRlci9zZXR0ZXJzLiBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBj
YWxsZWQgd2hlblxuICogdmFsdWUgdHlwZSBpcyBPYmplY3QuXG4gKi9cbk9ic2VydmVyLnByb3Rv
dHlwZS53YWxrID0gZnVuY3Rpb24gd2FsayAob2JqKSB7XG4gIHZhciBrZXlzID0gT2JqZWN0Lmtl
eXMob2JqKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAg
ZGVmaW5lUmVhY3RpdmUkJDEob2JqLCBrZXlzW2ldLCBvYmpba2V5c1tpXV0pO1xuICB9XG59O1xu
XG4vKipcbiAqIE9ic2VydmUgYSBsaXN0IG9mIEFycmF5IGl0ZW1zLlxuICovXG5PYnNlcnZlci5w
cm90b3R5cGUub2JzZXJ2ZUFycmF5ID0gZnVuY3Rpb24gb2JzZXJ2ZUFycmF5IChpdGVtcykge1xu
ICBmb3IgKHZhciBpID0gMCwgbCA9IGl0ZW1zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIG9i
c2VydmUoaXRlbXNbaV0pO1xuICB9XG59O1xuXG4vLyBoZWxwZXJzXG5cbi8qKlxuICogQXVnbWVu
dCBhbiB0YXJnZXQgT2JqZWN0IG9yIEFycmF5IGJ5IGludGVyY2VwdGluZ1xuICogdGhlIHByb3Rv
dHlwZSBjaGFpbiB1c2luZyBfX3Byb3RvX19cbiAqL1xuZnVuY3Rpb24gcHJvdG9BdWdtZW50ICh0
YXJnZXQsIHNyYywga2V5cykge1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuICB0
YXJnZXQuX19wcm90b19fID0gc3JjO1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXByb3RvICovXG59
XG5cbi8qKlxuICogQXVnbWVudCBhbiB0YXJnZXQgT2JqZWN0IG9yIEFycmF5IGJ5IGRlZmluaW5n
XG4gKiBoaWRkZW4gcHJvcGVydGllcy5cbiAqL1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9c
bmZ1bmN0aW9uIGNvcHlBdWdtZW50ICh0YXJnZXQsIHNyYywga2V5cykge1xuICBmb3IgKHZhciBp
ID0gMCwgbCA9IGtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNb
aV07XG4gICAgZGVmKHRhcmdldCwga2V5LCBzcmNba2V5XSk7XG4gIH1cbn1cblxuLyoqXG4gKiBB
dHRlbXB0IHRvIGNyZWF0ZSBhbiBvYnNlcnZlciBpbnN0YW5jZSBmb3IgYSB2YWx1ZSxcbiAqIHJl
dHVybnMgdGhlIG5ldyBvYnNlcnZlciBpZiBzdWNjZXNzZnVsbHkgb2JzZXJ2ZWQsXG4gKiBvciB0
aGUgZXhpc3Rpbmcgb2JzZXJ2ZXIgaWYgdGhlIHZhbHVlIGFscmVhZHkgaGFzIG9uZS5cbiAqL1xu
ZnVuY3Rpb24gb2JzZXJ2ZSAodmFsdWUsIGFzUm9vdERhdGEpIHtcbiAgaWYgKCFpc09iamVjdCh2
YWx1ZSkpIHtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgb2I7XG4gIGlmIChoYXNPd24odmFsdWUs
ICdfX29iX18nKSAmJiB2YWx1ZS5fX29iX18gaW5zdGFuY2VvZiBPYnNlcnZlcikge1xuICAgIG9i
ID0gdmFsdWUuX19vYl9fO1xuICB9IGVsc2UgaWYgKFxuICAgIG9ic2VydmVyU3RhdGUuc2hvdWxk
Q29udmVydCAmJlxuICAgICFpc1NlcnZlclJlbmRlcmluZygpICYmXG4gICAgKEFycmF5LmlzQXJy
YXkodmFsdWUpIHx8IGlzUGxhaW5PYmplY3QodmFsdWUpKSAmJlxuICAgIE9iamVjdC5pc0V4dGVu
c2libGUodmFsdWUpICYmXG4gICAgIXZhbHVlLl9pc1Z1ZVxuICApIHtcbiAgICBvYiA9IG5ldyBP
YnNlcnZlcih2YWx1ZSk7XG4gIH1cbiAgaWYgKGFzUm9vdERhdGEgJiYgb2IpIHtcbiAgICBvYi52
bUNvdW50Kys7XG4gIH1cbiAgcmV0dXJuIG9iXG59XG5cbi8qKlxuICogRGVmaW5lIGEgcmVhY3Rp
dmUgcHJvcGVydHkgb24gYW4gT2JqZWN0LlxuICovXG5mdW5jdGlvbiBkZWZpbmVSZWFjdGl2ZSQk
MSAoXG4gIG9iaixcbiAga2V5LFxuICB2YWwsXG4gIGN1c3RvbVNldHRlcixcbiAgc2hhbGxvd1xu
KSB7XG4gIHZhciBkZXAgPSBuZXcgRGVwKCk7XG5cbiAgdmFyIHByb3BlcnR5ID0gT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSk7XG4gIGlmIChwcm9wZXJ0eSAmJiBwcm9w
ZXJ0eS5jb25maWd1cmFibGUgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyBj
YXRlciBmb3IgcHJlLWRlZmluZWQgZ2V0dGVyL3NldHRlcnNcbiAgdmFyIGdldHRlciA9IHByb3Bl
cnR5ICYmIHByb3BlcnR5LmdldDtcbiAgdmFyIHNldHRlciA9IHByb3BlcnR5ICYmIHByb3BlcnR5
LnNldDtcblxuICB2YXIgY2hpbGRPYiA9ICFzaGFsbG93ICYmIG9ic2VydmUodmFsKTtcbiAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAg
ICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiByZWFjdGl2ZUdldHRlciAo
KSB7XG4gICAgICB2YXIgdmFsdWUgPSBnZXR0ZXIgPyBnZXR0ZXIuY2FsbChvYmopIDogdmFsO1xu
ICAgICAgaWYgKERlcC50YXJnZXQpIHtcbiAgICAgICAgZGVwLmRlcGVuZCgpO1xuICAgICAgICBp
ZiAoY2hpbGRPYikge1xuICAgICAgICAgIGNoaWxkT2IuZGVwLmRlcGVuZCgpO1xuICAgICAgICB9
XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIGRlcGVuZEFy
cmF5KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAg
fSxcbiAgICBzZXQ6IGZ1bmN0aW9uIHJlYWN0aXZlU2V0dGVyIChuZXdWYWwpIHtcbiAgICAgIHZh
ciB2YWx1ZSA9IGdldHRlciA/IGdldHRlci5jYWxsKG9iaikgOiB2YWw7XG4gICAgICAvKiBlc2xp
bnQtZGlzYWJsZSBuby1zZWxmLWNvbXBhcmUgKi9cbiAgICAgIGlmIChuZXdWYWwgPT09IHZhbHVl
IHx8IChuZXdWYWwgIT09IG5ld1ZhbCAmJiB2YWx1ZSAhPT0gdmFsdWUpKSB7XG4gICAgICAgIHJl
dHVyblxuICAgICAgfVxuICAgICAgLyogZXNsaW50LWVuYWJsZSBuby1zZWxmLWNvbXBhcmUgKi9c
biAgICAgIGlmIChmYWxzZSkge1xuICAgICAgICBjdXN0b21TZXR0ZXIoKTtcbiAgICAgIH1cbiAg
ICAgIGlmIChzZXR0ZXIpIHtcbiAgICAgICAgc2V0dGVyLmNhbGwob2JqLCBuZXdWYWwpO1xuICAg
ICAgfSBlbHNlIHtcbiAgICAgICAgdmFsID0gbmV3VmFsO1xuICAgICAgfVxuICAgICAgY2hpbGRP
YiA9ICFzaGFsbG93ICYmIG9ic2VydmUobmV3VmFsKTtcbiAgICAgIGRlcC5ub3RpZnkoKTtcbiAg
ICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIFNldCBhIHByb3BlcnR5IG9uIGFuIG9iamVjdC4gQWRk
cyB0aGUgbmV3IHByb3BlcnR5IGFuZFxuICogdHJpZ2dlcnMgY2hhbmdlIG5vdGlmaWNhdGlvbiBp
ZiB0aGUgcHJvcGVydHkgZG9lc24ndFxuICogYWxyZWFkeSBleGlzdC5cbiAqL1xuZnVuY3Rpb24g
c2V0ICh0YXJnZXQsIGtleSwgdmFsKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHRhcmdldCkgJiYg
aXNWYWxpZEFycmF5SW5kZXgoa2V5KSkge1xuICAgIHRhcmdldC5sZW5ndGggPSBNYXRoLm1heCh0
YXJnZXQubGVuZ3RoLCBrZXkpO1xuICAgIHRhcmdldC5zcGxpY2Uoa2V5LCAxLCB2YWwpO1xuICAg
IHJldHVybiB2YWxcbiAgfVxuICBpZiAoaGFzT3duKHRhcmdldCwga2V5KSkge1xuICAgIHRhcmdl
dFtrZXldID0gdmFsO1xuICAgIHJldHVybiB2YWxcbiAgfVxuICB2YXIgb2IgPSAodGFyZ2V0KS5f
X29iX187XG4gIGlmICh0YXJnZXQuX2lzVnVlIHx8IChvYiAmJiBvYi52bUNvdW50KSkge1xuICAg
IFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICdBdm9pZCBh
ZGRpbmcgcmVhY3RpdmUgcHJvcGVydGllcyB0byBhIFZ1ZSBpbnN0YW5jZSBvciBpdHMgcm9vdCAk
ZGF0YSAnICtcbiAgICAgICdhdCBydW50aW1lIC0gZGVjbGFyZSBpdCB1cGZyb250IGluIHRoZSBk
YXRhIG9wdGlvbi4nXG4gICAgKTtcbiAgICByZXR1cm4gdmFsXG4gIH1cbiAgaWYgKCFvYikge1xu
ICAgIHRhcmdldFtrZXldID0gdmFsO1xuICAgIHJldHVybiB2YWxcbiAgfVxuICBkZWZpbmVSZWFj
dGl2ZSQkMShvYi52YWx1ZSwga2V5LCB2YWwpO1xuICBvYi5kZXAubm90aWZ5KCk7XG4gIHJldHVy
biB2YWxcbn1cblxuLyoqXG4gKiBEZWxldGUgYSBwcm9wZXJ0eSBhbmQgdHJpZ2dlciBjaGFuZ2Ug
aWYgbmVjZXNzYXJ5LlxuICovXG5mdW5jdGlvbiBkZWwgKHRhcmdldCwga2V5KSB7XG4gIGlmIChB
cnJheS5pc0FycmF5KHRhcmdldCkgJiYgaXNWYWxpZEFycmF5SW5kZXgoa2V5KSkge1xuICAgIHRh
cmdldC5zcGxpY2Uoa2V5LCAxKTtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgb2IgPSAodGFyZ2V0
KS5fX29iX187XG4gIGlmICh0YXJnZXQuX2lzVnVlIHx8IChvYiAmJiBvYi52bUNvdW50KSkge1xu
ICAgIFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICdBdm9p
ZCBkZWxldGluZyBwcm9wZXJ0aWVzIG9uIGEgVnVlIGluc3RhbmNlIG9yIGl0cyByb290ICRkYXRh
ICcgK1xuICAgICAgJy0ganVzdCBzZXQgaXQgdG8gbnVsbC4nXG4gICAgKTtcbiAgICByZXR1cm5c
biAgfVxuICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkpIHtcbiAgICByZXR1cm5cbiAgfVxuICBk
ZWxldGUgdGFyZ2V0W2tleV07XG4gIGlmICghb2IpIHtcbiAgICByZXR1cm5cbiAgfVxuICBvYi5k
ZXAubm90aWZ5KCk7XG59XG5cbi8qKlxuICogQ29sbGVjdCBkZXBlbmRlbmNpZXMgb24gYXJyYXkg
ZWxlbWVudHMgd2hlbiB0aGUgYXJyYXkgaXMgdG91Y2hlZCwgc2luY2VcbiAqIHdlIGNhbm5vdCBp
bnRlcmNlcHQgYXJyYXkgZWxlbWVudCBhY2Nlc3MgbGlrZSBwcm9wZXJ0eSBnZXR0ZXJzLlxuICov
XG5mdW5jdGlvbiBkZXBlbmRBcnJheSAodmFsdWUpIHtcbiAgZm9yICh2YXIgZSA9ICh2b2lkIDAp
LCBpID0gMCwgbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGUgPSB2YWx1ZVtp
XTtcbiAgICBlICYmIGUuX19vYl9fICYmIGUuX19vYl9fLmRlcC5kZXBlbmQoKTtcbiAgICBpZiAo
QXJyYXkuaXNBcnJheShlKSkge1xuICAgICAgZGVwZW5kQXJyYXkoZSk7XG4gICAgfVxuICB9XG59
XG5cbi8qICAqL1xuXG4vKipcbiAqIE9wdGlvbiBvdmVyd3JpdGluZyBzdHJhdGVnaWVzIGFyZSBm
dW5jdGlvbnMgdGhhdCBoYW5kbGVcbiAqIGhvdyB0byBtZXJnZSBhIHBhcmVudCBvcHRpb24gdmFs
dWUgYW5kIGEgY2hpbGQgb3B0aW9uXG4gKiB2YWx1ZSBpbnRvIHRoZSBmaW5hbCB2YWx1ZS5cbiAq
L1xudmFyIHN0cmF0cyA9IGNvbmZpZy5vcHRpb25NZXJnZVN0cmF0ZWdpZXM7XG5cbi8qKlxuICog
T3B0aW9ucyB3aXRoIHJlc3RyaWN0aW9uc1xuICovXG5pZiAoZmFsc2UpIHtcbiAgc3RyYXRzLmVs
ID0gc3RyYXRzLnByb3BzRGF0YSA9IGZ1bmN0aW9uIChwYXJlbnQsIGNoaWxkLCB2bSwga2V5KSB7
XG4gICAgaWYgKCF2bSkge1xuICAgICAgd2FybihcbiAgICAgICAgXCJvcHRpb24gXFxcIlwiICsg
a2V5ICsgXCJcXFwiIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIGluc3RhbmNlIFwiICtcbiAgICAg
ICAgJ2NyZWF0aW9uIHdpdGggdGhlIGBuZXdgIGtleXdvcmQuJ1xuICAgICAgKTtcbiAgICB9XG4g
ICAgcmV0dXJuIGRlZmF1bHRTdHJhdChwYXJlbnQsIGNoaWxkKVxuICB9O1xufVxuXG4vKipcbiAq
IEhlbHBlciB0aGF0IHJlY3Vyc2l2ZWx5IG1lcmdlcyB0d28gZGF0YSBvYmplY3RzIHRvZ2V0aGVy
LlxuICovXG5mdW5jdGlvbiBtZXJnZURhdGEgKHRvLCBmcm9tKSB7XG4gIGlmICghZnJvbSkgeyBy
ZXR1cm4gdG8gfVxuICB2YXIga2V5LCB0b1ZhbCwgZnJvbVZhbDtcbiAgdmFyIGtleXMgPSBPYmpl
Y3Qua2V5cyhmcm9tKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7
XG4gICAga2V5ID0ga2V5c1tpXTtcbiAgICB0b1ZhbCA9IHRvW2tleV07XG4gICAgZnJvbVZhbCA9
IGZyb21ba2V5XTtcbiAgICBpZiAoIWhhc093bih0bywga2V5KSkge1xuICAgICAgc2V0KHRvLCBr
ZXksIGZyb21WYWwpO1xuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh0b1ZhbCkgJiYgaXNQ
bGFpbk9iamVjdChmcm9tVmFsKSkge1xuICAgICAgbWVyZ2VEYXRhKHRvVmFsLCBmcm9tVmFsKTtc
biAgICB9XG4gIH1cbiAgcmV0dXJuIHRvXG59XG5cbi8qKlxuICogRGF0YVxuICovXG5mdW5jdGlv
biBtZXJnZURhdGFPckZuIChcbiAgcGFyZW50VmFsLFxuICBjaGlsZFZhbCxcbiAgdm1cbikge1xu
ICBpZiAoIXZtKSB7XG4gICAgLy8gaW4gYSBWdWUuZXh0ZW5kIG1lcmdlLCBib3RoIHNob3VsZCBi
ZSBmdW5jdGlvbnNcbiAgICBpZiAoIWNoaWxkVmFsKSB7XG4gICAgICByZXR1cm4gcGFyZW50VmFs
XG4gICAgfVxuICAgIGlmICghcGFyZW50VmFsKSB7XG4gICAgICByZXR1cm4gY2hpbGRWYWxcbiAg
ICB9XG4gICAgLy8gd2hlbiBwYXJlbnRWYWwgJiBjaGlsZFZhbCBhcmUgYm90aCBwcmVzZW50LFxu
ICAgIC8vIHdlIG5lZWQgdG8gcmV0dXJuIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZVxuICAg
IC8vIG1lcmdlZCByZXN1bHQgb2YgYm90aCBmdW5jdGlvbnMuLi4gbm8gbmVlZCB0b1xuICAgIC8v
IGNoZWNrIGlmIHBhcmVudFZhbCBpcyBhIGZ1bmN0aW9uIGhlcmUgYmVjYXVzZVxuICAgIC8vIGl0
IGhhcyB0byBiZSBhIGZ1bmN0aW9uIHRvIHBhc3MgcHJldmlvdXMgbWVyZ2VzLlxuICAgIHJldHVy
biBmdW5jdGlvbiBtZXJnZWREYXRhRm4gKCkge1xuICAgICAgcmV0dXJuIG1lcmdlRGF0YShcbiAg
ICAgICAgdHlwZW9mIGNoaWxkVmFsID09PSAnZnVuY3Rpb24nID8gY2hpbGRWYWwuY2FsbCh0aGlz
KSA6IGNoaWxkVmFsLFxuICAgICAgICB0eXBlb2YgcGFyZW50VmFsID09PSAnZnVuY3Rpb24nID8g
cGFyZW50VmFsLmNhbGwodGhpcykgOiBwYXJlbnRWYWxcbiAgICAgIClcbiAgICB9XG4gIH0gZWxz
ZSBpZiAocGFyZW50VmFsIHx8IGNoaWxkVmFsKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIG1lcmdl
ZEluc3RhbmNlRGF0YUZuICgpIHtcbiAgICAgIC8vIGluc3RhbmNlIG1lcmdlXG4gICAgICB2YXIg
aW5zdGFuY2VEYXRhID0gdHlwZW9mIGNoaWxkVmFsID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8g
Y2hpbGRWYWwuY2FsbCh2bSlcbiAgICAgICAgOiBjaGlsZFZhbDtcbiAgICAgIHZhciBkZWZhdWx0
RGF0YSA9IHR5cGVvZiBwYXJlbnRWYWwgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBwYXJlbnRW
YWwuY2FsbCh2bSlcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICBpZiAoaW5zdGFuY2VEYXRh
KSB7XG4gICAgICAgIHJldHVybiBtZXJnZURhdGEoaW5zdGFuY2VEYXRhLCBkZWZhdWx0RGF0YSlc
biAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0RGF0YVxuICAgICAgfVxuICAg
IH1cbiAgfVxufVxuXG5zdHJhdHMuZGF0YSA9IGZ1bmN0aW9uIChcbiAgcGFyZW50VmFsLFxuICBj
aGlsZFZhbCxcbiAgdm1cbikge1xuICBpZiAoIXZtKSB7XG4gICAgaWYgKGNoaWxkVmFsICYmIHR5
cGVvZiBjaGlsZFZhbCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgXCJwcm9kdWN0aW9uXCIgIT09
ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICAnVGhlIFwiZGF0YVwiIG9wdGlvbiBzaG91
bGQgYmUgYSBmdW5jdGlvbiAnICtcbiAgICAgICAgJ3RoYXQgcmV0dXJucyBhIHBlci1pbnN0YW5j
ZSB2YWx1ZSBpbiBjb21wb25lbnQgJyArXG4gICAgICAgICdkZWZpbml0aW9ucy4nLFxuICAgICAg
ICB2bVxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIHBhcmVudFZhbFxuICAgIH1cbiAgICByZXR1
cm4gbWVyZ2VEYXRhT3JGbi5jYWxsKHRoaXMsIHBhcmVudFZhbCwgY2hpbGRWYWwpXG4gIH1cblxu
ICByZXR1cm4gbWVyZ2VEYXRhT3JGbihwYXJlbnRWYWwsIGNoaWxkVmFsLCB2bSlcbn07XG5cbi8q
KlxuICogSG9va3MgYW5kIHByb3BzIGFyZSBtZXJnZWQgYXMgYXJyYXlzLlxuICovXG5mdW5jdGlv
biBtZXJnZUhvb2sgKFxuICBwYXJlbnRWYWwsXG4gIGNoaWxkVmFsXG4pIHtcbiAgcmV0dXJuIGNo
aWxkVmFsXG4gICAgPyBwYXJlbnRWYWxcbiAgICAgID8gcGFyZW50VmFsLmNvbmNhdChjaGlsZFZh
bClcbiAgICAgIDogQXJyYXkuaXNBcnJheShjaGlsZFZhbClcbiAgICAgICAgPyBjaGlsZFZhbFxu
ICAgICAgICA6IFtjaGlsZFZhbF1cbiAgICA6IHBhcmVudFZhbFxufVxuXG5MSUZFQ1lDTEVfSE9P
S1MuZm9yRWFjaChmdW5jdGlvbiAoaG9vaykge1xuICBzdHJhdHNbaG9va10gPSBtZXJnZUhvb2s7
XG59KTtcblxuLyoqXG4gKiBBc3NldHNcbiAqXG4gKiBXaGVuIGEgdm0gaXMgcHJlc2VudCAoaW5z
dGFuY2UgY3JlYXRpb24pLCB3ZSBuZWVkIHRvIGRvXG4gKiBhIHRocmVlLXdheSBtZXJnZSBiZXR3
ZWVuIGNvbnN0cnVjdG9yIG9wdGlvbnMsIGluc3RhbmNlXG4gKiBvcHRpb25zIGFuZCBwYXJlbnQg
b3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VBc3NldHMgKHBhcmVudFZhbCwgY2hpbGRWYWwp
IHtcbiAgdmFyIHJlcyA9IE9iamVjdC5jcmVhdGUocGFyZW50VmFsIHx8IG51bGwpO1xuICByZXR1
cm4gY2hpbGRWYWxcbiAgICA/IGV4dGVuZChyZXMsIGNoaWxkVmFsKVxuICAgIDogcmVzXG59XG5c
bkFTU0VUX1RZUEVTLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgc3RyYXRzW3R5cGUgKyAn
cyddID0gbWVyZ2VBc3NldHM7XG59KTtcblxuLyoqXG4gKiBXYXRjaGVycy5cbiAqXG4gKiBXYXRj
aGVycyBoYXNoZXMgc2hvdWxkIG5vdCBvdmVyd3JpdGUgb25lXG4gKiBhbm90aGVyLCBzbyB3ZSBt
ZXJnZSB0aGVtIGFzIGFycmF5cy5cbiAqL1xuc3RyYXRzLndhdGNoID0gZnVuY3Rpb24gKHBhcmVu
dFZhbCwgY2hpbGRWYWwpIHtcbiAgLy8gd29yayBhcm91bmQgRmlyZWZveCdzIE9iamVjdC5wcm90
b3R5cGUud2F0Y2guLi5cbiAgaWYgKHBhcmVudFZhbCA9PT0gbmF0aXZlV2F0Y2gpIHsgcGFyZW50
VmFsID0gdW5kZWZpbmVkOyB9XG4gIGlmIChjaGlsZFZhbCA9PT0gbmF0aXZlV2F0Y2gpIHsgY2hp
bGRWYWwgPSB1bmRlZmluZWQ7IH1cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICgh
Y2hpbGRWYWwpIHsgcmV0dXJuIE9iamVjdC5jcmVhdGUocGFyZW50VmFsIHx8IG51bGwpIH1cbiAg
aWYgKCFwYXJlbnRWYWwpIHsgcmV0dXJuIGNoaWxkVmFsIH1cbiAgdmFyIHJldCA9IHt9O1xuICBl
eHRlbmQocmV0LCBwYXJlbnRWYWwpO1xuICBmb3IgKHZhciBrZXkgaW4gY2hpbGRWYWwpIHtcbiAg
ICB2YXIgcGFyZW50ID0gcmV0W2tleV07XG4gICAgdmFyIGNoaWxkID0gY2hpbGRWYWxba2V5XTtc
biAgICBpZiAocGFyZW50ICYmICFBcnJheS5pc0FycmF5KHBhcmVudCkpIHtcbiAgICAgIHBhcmVu
dCA9IFtwYXJlbnRdO1xuICAgIH1cbiAgICByZXRba2V5XSA9IHBhcmVudFxuICAgICAgPyBwYXJl
bnQuY29uY2F0KGNoaWxkKVxuICAgICAgOiBBcnJheS5pc0FycmF5KGNoaWxkKSA/IGNoaWxkIDog
W2NoaWxkXTtcbiAgfVxuICByZXR1cm4gcmV0XG59O1xuXG4vKipcbiAqIE90aGVyIG9iamVjdCBo
YXNoZXMuXG4gKi9cbnN0cmF0cy5wcm9wcyA9XG5zdHJhdHMubWV0aG9kcyA9XG5zdHJhdHMuaW5q
ZWN0ID1cbnN0cmF0cy5jb21wdXRlZCA9IGZ1bmN0aW9uIChwYXJlbnRWYWwsIGNoaWxkVmFsKSB7
XG4gIGlmICghcGFyZW50VmFsKSB7IHJldHVybiBjaGlsZFZhbCB9XG4gIHZhciByZXQgPSBPYmpl
Y3QuY3JlYXRlKG51bGwpO1xuICBleHRlbmQocmV0LCBwYXJlbnRWYWwpO1xuICBpZiAoY2hpbGRW
YWwpIHsgZXh0ZW5kKHJldCwgY2hpbGRWYWwpOyB9XG4gIHJldHVybiByZXRcbn07XG5zdHJhdHMu
cHJvdmlkZSA9IG1lcmdlRGF0YU9yRm47XG5cbi8qKlxuICogRGVmYXVsdCBzdHJhdGVneS5cbiAq
L1xudmFyIGRlZmF1bHRTdHJhdCA9IGZ1bmN0aW9uIChwYXJlbnRWYWwsIGNoaWxkVmFsKSB7XG4g
IHJldHVybiBjaGlsZFZhbCA9PT0gdW5kZWZpbmVkXG4gICAgPyBwYXJlbnRWYWxcbiAgICA6IGNo
aWxkVmFsXG59O1xuXG4vKipcbiAqIFZhbGlkYXRlIGNvbXBvbmVudCBuYW1lc1xuICovXG5mdW5j
dGlvbiBjaGVja0NvbXBvbmVudHMgKG9wdGlvbnMpIHtcbiAgZm9yICh2YXIga2V5IGluIG9wdGlv
bnMuY29tcG9uZW50cykge1xuICAgIHZhciBsb3dlciA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAg
IGlmIChpc0J1aWx0SW5UYWcobG93ZXIpIHx8IGNvbmZpZy5pc1Jlc2VydmVkVGFnKGxvd2VyKSkg
e1xuICAgICAgd2FybihcbiAgICAgICAgJ0RvIG5vdCB1c2UgYnVpbHQtaW4gb3IgcmVzZXJ2ZWQg
SFRNTCBlbGVtZW50cyBhcyBjb21wb25lbnQgJyArXG4gICAgICAgICdpZDogJyArIGtleVxuICAg
ICAgKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBFbnN1cmUgYWxsIHByb3BzIG9wdGlvbiBz
eW50YXggYXJlIG5vcm1hbGl6ZWQgaW50byB0aGVcbiAqIE9iamVjdC1iYXNlZCBmb3JtYXQuXG4g
Ki9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVByb3BzIChvcHRpb25zKSB7XG4gIHZhciBwcm9wcyA9IG9w
dGlvbnMucHJvcHM7XG4gIGlmICghcHJvcHMpIHsgcmV0dXJuIH1cbiAgdmFyIHJlcyA9IHt9O1xu
ICB2YXIgaSwgdmFsLCBuYW1lO1xuICBpZiAoQXJyYXkuaXNBcnJheShwcm9wcykpIHtcbiAgICBp
ID0gcHJvcHMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIHZhbCA9IHByb3BzW2ld
O1xuICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIG5hbWUgPSBj
YW1lbGl6ZSh2YWwpO1xuICAgICAgICByZXNbbmFtZV0gPSB7IHR5cGU6IG51bGwgfTtcbiAgICAg
IH0gZWxzZSBpZiAoZmFsc2UpIHtcbiAgICAgICAgd2FybigncHJvcHMgbXVzdCBiZSBzdHJpbmdz
IHdoZW4gdXNpbmcgYXJyYXkgc3ludGF4LicpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlm
IChpc1BsYWluT2JqZWN0KHByb3BzKSkge1xuICAgIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xu
ICAgICAgdmFsID0gcHJvcHNba2V5XTtcbiAgICAgIG5hbWUgPSBjYW1lbGl6ZShrZXkpO1xuICAg
ICAgcmVzW25hbWVdID0gaXNQbGFpbk9iamVjdCh2YWwpXG4gICAgICAgID8gdmFsXG4gICAgICAg
IDogeyB0eXBlOiB2YWwgfTtcbiAgICB9XG4gIH1cbiAgb3B0aW9ucy5wcm9wcyA9IHJlcztcbn1c
blxuLyoqXG4gKiBOb3JtYWxpemUgYWxsIGluamVjdGlvbnMgaW50byBPYmplY3QtYmFzZWQgZm9y
bWF0XG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUluamVjdCAob3B0aW9ucykge1xuICB2YXIgaW5q
ZWN0ID0gb3B0aW9ucy5pbmplY3Q7XG4gIGlmIChBcnJheS5pc0FycmF5KGluamVjdCkpIHtcbiAg
ICB2YXIgbm9ybWFsaXplZCA9IG9wdGlvbnMuaW5qZWN0ID0ge307XG4gICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBpbmplY3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIG5vcm1hbGl6ZWRbaW5qZWN0W2ld
XSA9IGluamVjdFtpXTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgcmF3IGZ1
bmN0aW9uIGRpcmVjdGl2ZXMgaW50byBvYmplY3QgZm9ybWF0LlxuICovXG5mdW5jdGlvbiBub3Jt
YWxpemVEaXJlY3RpdmVzIChvcHRpb25zKSB7XG4gIHZhciBkaXJzID0gb3B0aW9ucy5kaXJlY3Rp
dmVzO1xuICBpZiAoZGlycykge1xuICAgIGZvciAodmFyIGtleSBpbiBkaXJzKSB7XG4gICAgICB2
YXIgZGVmID0gZGlyc1trZXldO1xuICAgICAgaWYgKHR5cGVvZiBkZWYgPT09ICdmdW5jdGlvbicp
IHtcbiAgICAgICAgZGlyc1trZXldID0geyBiaW5kOiBkZWYsIHVwZGF0ZTogZGVmIH07XG4gICAg
ICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogTWVyZ2UgdHdvIG9wdGlvbiBvYmplY3RzIGlu
dG8gYSBuZXcgb25lLlxuICogQ29yZSB1dGlsaXR5IHVzZWQgaW4gYm90aCBpbnN0YW50aWF0aW9u
IGFuZCBpbmhlcml0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VPcHRpb25zIChcbiAgcGFyZW50
LFxuICBjaGlsZCxcbiAgdm1cbikge1xuICBpZiAoZmFsc2UpIHtcbiAgICBjaGVja0NvbXBvbmVu
dHMoY2hpbGQpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBjaGlsZCA9PT0gJ2Z1bmN0aW9uJykge1xu
ICAgIGNoaWxkID0gY2hpbGQub3B0aW9ucztcbiAgfVxuXG4gIG5vcm1hbGl6ZVByb3BzKGNoaWxk
KTtcbiAgbm9ybWFsaXplSW5qZWN0KGNoaWxkKTtcbiAgbm9ybWFsaXplRGlyZWN0aXZlcyhjaGls
ZCk7XG4gIHZhciBleHRlbmRzRnJvbSA9IGNoaWxkLmV4dGVuZHM7XG4gIGlmIChleHRlbmRzRnJv
bSkge1xuICAgIHBhcmVudCA9IG1lcmdlT3B0aW9ucyhwYXJlbnQsIGV4dGVuZHNGcm9tLCB2bSk7
XG4gIH1cbiAgaWYgKGNoaWxkLm1peGlucykge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gY2hp
bGQubWl4aW5zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgcGFyZW50ID0gbWVyZ2VPcHRp
b25zKHBhcmVudCwgY2hpbGQubWl4aW5zW2ldLCB2bSk7XG4gICAgfVxuICB9XG4gIHZhciBvcHRp
b25zID0ge307XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIHBhcmVudCkge1xuICAgIG1lcmdl
RmllbGQoa2V5KTtcbiAgfVxuICBmb3IgKGtleSBpbiBjaGlsZCkge1xuICAgIGlmICghaGFzT3du
KHBhcmVudCwga2V5KSkge1xuICAgICAgbWVyZ2VGaWVsZChrZXkpO1xuICAgIH1cbiAgfVxuICBm
dW5jdGlvbiBtZXJnZUZpZWxkIChrZXkpIHtcbiAgICB2YXIgc3RyYXQgPSBzdHJhdHNba2V5XSB8
fCBkZWZhdWx0U3RyYXQ7XG4gICAgb3B0aW9uc1trZXldID0gc3RyYXQocGFyZW50W2tleV0sIGNo
aWxkW2tleV0sIHZtLCBrZXkpO1xuICB9XG4gIHJldHVybiBvcHRpb25zXG59XG5cbi8qKlxuICog
UmVzb2x2ZSBhbiBhc3NldC5cbiAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBiZWNhdXNlIGNoaWxk
IGluc3RhbmNlcyBuZWVkIGFjY2Vzc1xuICogdG8gYXNzZXRzIGRlZmluZWQgaW4gaXRzIGFuY2Vz
dG9yIGNoYWluLlxuICovXG5mdW5jdGlvbiByZXNvbHZlQXNzZXQgKFxuICBvcHRpb25zLFxuICB0
eXBlLFxuICBpZCxcbiAgd2Fybk1pc3Npbmdcbikge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYg
Ki9cbiAgaWYgKHR5cGVvZiBpZCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm5cbiAgfVxuICB2
YXIgYXNzZXRzID0gb3B0aW9uc1t0eXBlXTtcbiAgLy8gY2hlY2sgbG9jYWwgcmVnaXN0cmF0aW9u
IHZhcmlhdGlvbnMgZmlyc3RcbiAgaWYgKGhhc093bihhc3NldHMsIGlkKSkgeyByZXR1cm4gYXNz
ZXRzW2lkXSB9XG4gIHZhciBjYW1lbGl6ZWRJZCA9IGNhbWVsaXplKGlkKTtcbiAgaWYgKGhhc093
bihhc3NldHMsIGNhbWVsaXplZElkKSkgeyByZXR1cm4gYXNzZXRzW2NhbWVsaXplZElkXSB9XG4g
IHZhciBQYXNjYWxDYXNlSWQgPSBjYXBpdGFsaXplKGNhbWVsaXplZElkKTtcbiAgaWYgKGhhc093
bihhc3NldHMsIFBhc2NhbENhc2VJZCkpIHsgcmV0dXJuIGFzc2V0c1tQYXNjYWxDYXNlSWRdIH1c
biAgLy8gZmFsbGJhY2sgdG8gcHJvdG90eXBlIGNoYWluXG4gIHZhciByZXMgPSBhc3NldHNbaWRd
IHx8IGFzc2V0c1tjYW1lbGl6ZWRJZF0gfHwgYXNzZXRzW1Bhc2NhbENhc2VJZF07XG4gIGlmIChm
YWxzZSkge1xuICAgIHdhcm4oXG4gICAgICAnRmFpbGVkIHRvIHJlc29sdmUgJyArIHR5cGUuc2xp
Y2UoMCwgLTEpICsgJzogJyArIGlkLFxuICAgICAgb3B0aW9uc1xuICAgICk7XG4gIH1cbiAgcmV0
dXJuIHJlc1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wIChcbiAga2V5LFxu
ICBwcm9wT3B0aW9ucyxcbiAgcHJvcHNEYXRhLFxuICB2bVxuKSB7XG4gIHZhciBwcm9wID0gcHJv
cE9wdGlvbnNba2V5XTtcbiAgdmFyIGFic2VudCA9ICFoYXNPd24ocHJvcHNEYXRhLCBrZXkpO1xu
ICB2YXIgdmFsdWUgPSBwcm9wc0RhdGFba2V5XTtcbiAgLy8gaGFuZGxlIGJvb2xlYW4gcHJvcHNc
biAgaWYgKGlzVHlwZShCb29sZWFuLCBwcm9wLnR5cGUpKSB7XG4gICAgaWYgKGFic2VudCAmJiAh
aGFzT3duKHByb3AsICdkZWZhdWx0JykpIHtcbiAgICAgIHZhbHVlID0gZmFsc2U7XG4gICAgfSBl
bHNlIGlmICghaXNUeXBlKFN0cmluZywgcHJvcC50eXBlKSAmJiAodmFsdWUgPT09ICcnIHx8IHZh
bHVlID09PSBoeXBoZW5hdGUoa2V5KSkpIHtcbiAgICAgIHZhbHVlID0gdHJ1ZTtcbiAgICB9XG4g
IH1cbiAgLy8gY2hlY2sgZGVmYXVsdCB2YWx1ZVxuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkg
e1xuICAgIHZhbHVlID0gZ2V0UHJvcERlZmF1bHRWYWx1ZSh2bSwgcHJvcCwga2V5KTtcbiAgICAv
LyBzaW5jZSB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBhIGZyZXNoIGNvcHksXG4gICAgLy8gbWFrZSBz
dXJlIHRvIG9ic2VydmUgaXQuXG4gICAgdmFyIHByZXZTaG91bGRDb252ZXJ0ID0gb2JzZXJ2ZXJT
dGF0ZS5zaG91bGRDb252ZXJ0O1xuICAgIG9ic2VydmVyU3RhdGUuc2hvdWxkQ29udmVydCA9IHRy
dWU7XG4gICAgb2JzZXJ2ZSh2YWx1ZSk7XG4gICAgb2JzZXJ2ZXJTdGF0ZS5zaG91bGRDb252ZXJ0
ID0gcHJldlNob3VsZENvbnZlcnQ7XG4gIH1cbiAgaWYgKGZhbHNlKSB7XG4gICAgYXNzZXJ0UHJv
cChwcm9wLCBrZXksIHZhbHVlLCB2bSwgYWJzZW50KTtcbiAgfVxuICByZXR1cm4gdmFsdWVcbn1c
blxuLyoqXG4gKiBHZXQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYSBwcm9wLlxuICovXG5mdW5jdGlv
biBnZXRQcm9wRGVmYXVsdFZhbHVlICh2bSwgcHJvcCwga2V5KSB7XG4gIC8vIG5vIGRlZmF1bHQs
IHJldHVybiB1bmRlZmluZWRcbiAgaWYgKCFoYXNPd24ocHJvcCwgJ2RlZmF1bHQnKSkge1xuICAg
IHJldHVybiB1bmRlZmluZWRcbiAgfVxuICB2YXIgZGVmID0gcHJvcC5kZWZhdWx0O1xuICAvLyB3
YXJuIGFnYWluc3Qgbm9uLWZhY3RvcnkgZGVmYXVsdHMgZm9yIE9iamVjdCAmIEFycmF5XG4gIGlm
IChmYWxzZSkge1xuICAgIHdhcm4oXG4gICAgICAnSW52YWxpZCBkZWZhdWx0IHZhbHVlIGZvciBw
cm9wIFwiJyArIGtleSArICdcIjogJyArXG4gICAgICAnUHJvcHMgd2l0aCB0eXBlIE9iamVjdC9B
cnJheSBtdXN0IHVzZSBhIGZhY3RvcnkgZnVuY3Rpb24gJyArXG4gICAgICAndG8gcmV0dXJuIHRo
ZSBkZWZhdWx0IHZhbHVlLicsXG4gICAgICB2bVxuICAgICk7XG4gIH1cbiAgLy8gdGhlIHJhdyBw
cm9wIHZhbHVlIHdhcyBhbHNvIHVuZGVmaW5lZCBmcm9tIHByZXZpb3VzIHJlbmRlcixcbiAgLy8g
cmV0dXJuIHByZXZpb3VzIGRlZmF1bHQgdmFsdWUgdG8gYXZvaWQgdW5uZWNlc3Nhcnkgd2F0Y2hl
ciB0cmlnZ2VyXG4gIGlmICh2bSAmJiB2bS4kb3B0aW9ucy5wcm9wc0RhdGEgJiZcbiAgICB2bS4k
b3B0aW9ucy5wcm9wc0RhdGFba2V5XSA9PT0gdW5kZWZpbmVkICYmXG4gICAgdm0uX3Byb3BzW2tl
eV0gIT09IHVuZGVmaW5lZFxuICApIHtcbiAgICByZXR1cm4gdm0uX3Byb3BzW2tleV1cbiAgfVxu
ICAvLyBjYWxsIGZhY3RvcnkgZnVuY3Rpb24gZm9yIG5vbi1GdW5jdGlvbiB0eXBlc1xuICAvLyBh
IHZhbHVlIGlzIEZ1bmN0aW9uIGlmIGl0cyBwcm90b3R5cGUgaXMgZnVuY3Rpb24gZXZlbiBhY3Jv
c3MgZGlmZmVyZW50IGV4ZWN1dGlvbiBjb250ZXh0XG4gIHJldHVybiB0eXBlb2YgZGVmID09PSAn
ZnVuY3Rpb24nICYmIGdldFR5cGUocHJvcC50eXBlKSAhPT0gJ0Z1bmN0aW9uJ1xuICAgID8gZGVm
LmNhbGwodm0pXG4gICAgOiBkZWZcbn1cblxuLyoqXG4gKiBBc3NlcnQgd2hldGhlciBhIHByb3Ag
aXMgdmFsaWQuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydFByb3AgKFxuICBwcm9wLFxuICBuYW1lLFxu
ICB2YWx1ZSxcbiAgdm0sXG4gIGFic2VudFxuKSB7XG4gIGlmIChwcm9wLnJlcXVpcmVkICYmIGFi
c2VudCkge1xuICAgIHdhcm4oXG4gICAgICAnTWlzc2luZyByZXF1aXJlZCBwcm9wOiBcIicgKyBu
YW1lICsgJ1wiJyxcbiAgICAgIHZtXG4gICAgKTtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodmFs
dWUgPT0gbnVsbCAmJiAhcHJvcC5yZXF1aXJlZCkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciB0
eXBlID0gcHJvcC50eXBlO1xuICB2YXIgdmFsaWQgPSAhdHlwZSB8fCB0eXBlID09PSB0cnVlO1xu
ICB2YXIgZXhwZWN0ZWRUeXBlcyA9IFtdO1xuICBpZiAodHlwZSkge1xuICAgIGlmICghQXJyYXku
aXNBcnJheSh0eXBlKSkge1xuICAgICAgdHlwZSA9IFt0eXBlXTtcbiAgICB9XG4gICAgZm9yICh2
YXIgaSA9IDA7IGkgPCB0eXBlLmxlbmd0aCAmJiAhdmFsaWQ7IGkrKykge1xuICAgICAgdmFyIGFz
c2VydGVkVHlwZSA9IGFzc2VydFR5cGUodmFsdWUsIHR5cGVbaV0pO1xuICAgICAgZXhwZWN0ZWRU
eXBlcy5wdXNoKGFzc2VydGVkVHlwZS5leHBlY3RlZFR5cGUgfHwgJycpO1xuICAgICAgdmFsaWQg
PSBhc3NlcnRlZFR5cGUudmFsaWQ7XG4gICAgfVxuICB9XG4gIGlmICghdmFsaWQpIHtcbiAgICB3
YXJuKFxuICAgICAgJ0ludmFsaWQgcHJvcDogdHlwZSBjaGVjayBmYWlsZWQgZm9yIHByb3AgXCIn
ICsgbmFtZSArICdcIi4nICtcbiAgICAgICcgRXhwZWN0ZWQgJyArIGV4cGVjdGVkVHlwZXMubWFw
KGNhcGl0YWxpemUpLmpvaW4oJywgJykgK1xuICAgICAgJywgZ290ICcgKyBPYmplY3QucHJvdG90
eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLnNsaWNlKDgsIC0xKSArICcuJyxcbiAgICAgIHZtXG4g
ICAgKTtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgdmFsaWRhdG9yID0gcHJvcC52YWxpZGF0b3I7
XG4gIGlmICh2YWxpZGF0b3IpIHtcbiAgICBpZiAoIXZhbGlkYXRvcih2YWx1ZSkpIHtcbiAgICAg
IHdhcm4oXG4gICAgICAgICdJbnZhbGlkIHByb3A6IGN1c3RvbSB2YWxpZGF0b3IgY2hlY2sgZmFp
bGVkIGZvciBwcm9wIFwiJyArIG5hbWUgKyAnXCIuJyxcbiAgICAgICAgdm1cbiAgICAgICk7XG4g
ICAgfVxuICB9XG59XG5cbnZhciBzaW1wbGVDaGVja1JFID0gL14oU3RyaW5nfE51bWJlcnxCb29s
ZWFufEZ1bmN0aW9ufFN5bWJvbCkkLztcblxuZnVuY3Rpb24gYXNzZXJ0VHlwZSAodmFsdWUsIHR5
cGUpIHtcbiAgdmFyIHZhbGlkO1xuICB2YXIgZXhwZWN0ZWRUeXBlID0gZ2V0VHlwZSh0eXBlKTtc
biAgaWYgKHNpbXBsZUNoZWNrUkUudGVzdChleHBlY3RlZFR5cGUpKSB7XG4gICAgdmFsaWQgPSB0
eXBlb2YgdmFsdWUgPT09IGV4cGVjdGVkVHlwZS50b0xvd2VyQ2FzZSgpO1xuICB9IGVsc2UgaWYg
KGV4cGVjdGVkVHlwZSA9PT0gJ09iamVjdCcpIHtcbiAgICB2YWxpZCA9IGlzUGxhaW5PYmplY3Qo
dmFsdWUpO1xuICB9IGVsc2UgaWYgKGV4cGVjdGVkVHlwZSA9PT0gJ0FycmF5Jykge1xuICAgIHZh
bGlkID0gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFsaWQgPSB2YWx1
ZSBpbnN0YW5jZW9mIHR5cGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB2YWxpZDogdmFsaWQsXG4g
ICAgZXhwZWN0ZWRUeXBlOiBleHBlY3RlZFR5cGVcbiAgfVxufVxuXG4vKipcbiAqIFVzZSBmdW5j
dGlvbiBzdHJpbmcgbmFtZSB0byBjaGVjayBidWlsdC1pbiB0eXBlcyxcbiAqIGJlY2F1c2UgYSBz
aW1wbGUgZXF1YWxpdHkgY2hlY2sgd2lsbCBmYWlsIHdoZW4gcnVubmluZ1xuICogYWNyb3NzIGRp
ZmZlcmVudCB2bXMgLyBpZnJhbWVzLlxuICovXG5mdW5jdGlvbiBnZXRUeXBlIChmbikge1xuICB2
YXIgbWF0Y2ggPSBmbiAmJiBmbi50b1N0cmluZygpLm1hdGNoKC9eXFxzKmZ1bmN0aW9uIChcXHcr
KS8pO1xuICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXSA6ICcnXG59XG5cbmZ1bmN0aW9uIGlzVHlw
ZSAodHlwZSwgZm4pIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGZuKSkge1xuICAgIHJldHVybiBn
ZXRUeXBlKGZuKSA9PT0gZ2V0VHlwZSh0eXBlKVxuICB9XG4gIGZvciAodmFyIGkgPSAwLCBsZW4g
PSBmbi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGlmIChnZXRUeXBlKGZuW2ldKSA9PT0g
Z2V0VHlwZSh0eXBlKSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cbiAgLyogaXN0
YW5idWwgaWdub3JlIG5leHQgKi9cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qICAqL1xuXG52YXIg
bWFyaztcbnZhciBtZWFzdXJlO1xuXG5pZiAoZmFsc2UpIHtcbiAgdmFyIHBlcmYgPSBpbkJyb3dz
ZXIgJiYgd2luZG93LnBlcmZvcm1hbmNlO1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAg
aWYgKFxuICAgIHBlcmYgJiZcbiAgICBwZXJmLm1hcmsgJiZcbiAgICBwZXJmLm1lYXN1cmUgJiZc
biAgICBwZXJmLmNsZWFyTWFya3MgJiZcbiAgICBwZXJmLmNsZWFyTWVhc3VyZXNcbiAgKSB7XG4g
ICAgbWFyayA9IGZ1bmN0aW9uICh0YWcpIHsgcmV0dXJuIHBlcmYubWFyayh0YWcpOyB9O1xuICAg
IG1lYXN1cmUgPSBmdW5jdGlvbiAobmFtZSwgc3RhcnRUYWcsIGVuZFRhZykge1xuICAgICAgcGVy
Zi5tZWFzdXJlKG5hbWUsIHN0YXJ0VGFnLCBlbmRUYWcpO1xuICAgICAgcGVyZi5jbGVhck1hcmtz
KHN0YXJ0VGFnKTtcbiAgICAgIHBlcmYuY2xlYXJNYXJrcyhlbmRUYWcpO1xuICAgICAgcGVyZi5j
bGVhck1lYXN1cmVzKG5hbWUpO1xuICAgIH07XG4gIH1cbn1cblxuLyogbm90IHR5cGUgY2hlY2tp
bmcgdGhpcyBmaWxlIGJlY2F1c2UgZmxvdyBkb2Vzbid0IHBsYXkgd2VsbCB3aXRoIFByb3h5ICov
XG5cbnZhciBpbml0UHJveHk7XG5cbmlmIChmYWxzZSkge1xuICB2YXIgYWxsb3dlZEdsb2JhbHMg
PSBtYWtlTWFwKFxuICAgICdJbmZpbml0eSx1bmRlZmluZWQsTmFOLGlzRmluaXRlLGlzTmFOLCcg
K1xuICAgICdwYXJzZUZsb2F0LHBhcnNlSW50LGRlY29kZVVSSSxkZWNvZGVVUklDb21wb25lbnQs
ZW5jb2RlVVJJLGVuY29kZVVSSUNvbXBvbmVudCwnICtcbiAgICAnTWF0aCxOdW1iZXIsRGF0ZSxB
cnJheSxPYmplY3QsQm9vbGVhbixTdHJpbmcsUmVnRXhwLE1hcCxTZXQsSlNPTixJbnRsLCcgK1xu
ICAgICdyZXF1aXJlJyAvLyBmb3IgV2VicGFjay9Ccm93c2VyaWZ5XG4gICk7XG5cbiAgdmFyIHdh
cm5Ob25QcmVzZW50ID0gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7XG4gICAgd2FybihcbiAgICAg
IFwiUHJvcGVydHkgb3IgbWV0aG9kIFxcXCJcIiArIGtleSArIFwiXFxcIiBpcyBub3QgZGVmaW5l
ZCBvbiB0aGUgaW5zdGFuY2UgYnV0IFwiICtcbiAgICAgIFwicmVmZXJlbmNlZCBkdXJpbmcgcmVu
ZGVyLiBNYWtlIHN1cmUgdG8gZGVjbGFyZSByZWFjdGl2ZSBkYXRhIFwiICtcbiAgICAgIFwicHJv
cGVydGllcyBpbiB0aGUgZGF0YSBvcHRpb24uXCIsXG4gICAgICB0YXJnZXRcbiAgICApO1xuICB9
O1xuXG4gIHZhciBoYXNQcm94eSA9XG4gICAgdHlwZW9mIFByb3h5ICE9PSAndW5kZWZpbmVkJyAm
JlxuICAgIFByb3h5LnRvU3RyaW5nKCkubWF0Y2goL25hdGl2ZSBjb2RlLyk7XG5cbiAgaWYgKGhh
c1Byb3h5KSB7XG4gICAgdmFyIGlzQnVpbHRJbk1vZGlmaWVyID0gbWFrZU1hcCgnc3RvcCxwcmV2
ZW50LHNlbGYsY3RybCxzaGlmdCxhbHQsbWV0YScpO1xuICAgIGNvbmZpZy5rZXlDb2RlcyA9IG5l
dyBQcm94eShjb25maWcua2V5Q29kZXMsIHtcbiAgICAgIHNldDogZnVuY3Rpb24gc2V0ICh0YXJn
ZXQsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKGlzQnVpbHRJbk1vZGlmaWVyKGtleSkpIHtc
biAgICAgICAgICB3YXJuKChcIkF2b2lkIG92ZXJ3cml0aW5nIGJ1aWx0LWluIG1vZGlmaWVyIGlu
IGNvbmZpZy5rZXlDb2RlczogLlwiICsga2V5KSk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4g
ICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAg
ICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB2YXIg
aGFzSGFuZGxlciA9IHtcbiAgICBoYXM6IGZ1bmN0aW9uIGhhcyAodGFyZ2V0LCBrZXkpIHtcbiAg
ICAgIHZhciBoYXMgPSBrZXkgaW4gdGFyZ2V0O1xuICAgICAgdmFyIGlzQWxsb3dlZCA9IGFsbG93
ZWRHbG9iYWxzKGtleSkgfHwga2V5LmNoYXJBdCgwKSA9PT0gJ18nO1xuICAgICAgaWYgKCFoYXMg
JiYgIWlzQWxsb3dlZCkge1xuICAgICAgICB3YXJuTm9uUHJlc2VudCh0YXJnZXQsIGtleSk7XG4g
ICAgICB9XG4gICAgICByZXR1cm4gaGFzIHx8ICFpc0FsbG93ZWRcbiAgICB9XG4gIH07XG5cbiAg
dmFyIGdldEhhbmRsZXIgPSB7XG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQgKHRhcmdldCwga2V5KSB7
XG4gICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycgJiYgIShrZXkgaW4gdGFyZ2V0KSkg
e1xuICAgICAgICB3YXJuTm9uUHJlc2VudCh0YXJnZXQsIGtleSk7XG4gICAgICB9XG4gICAgICBy
ZXR1cm4gdGFyZ2V0W2tleV1cbiAgICB9XG4gIH07XG5cbiAgaW5pdFByb3h5ID0gZnVuY3Rpb24g
aW5pdFByb3h5ICh2bSkge1xuICAgIGlmIChoYXNQcm94eSkge1xuICAgICAgLy8gZGV0ZXJtaW5l
IHdoaWNoIHByb3h5IGhhbmRsZXIgdG8gdXNlXG4gICAgICB2YXIgb3B0aW9ucyA9IHZtLiRvcHRp
b25zO1xuICAgICAgdmFyIGhhbmRsZXJzID0gb3B0aW9ucy5yZW5kZXIgJiYgb3B0aW9ucy5yZW5k
ZXIuX3dpdGhTdHJpcHBlZFxuICAgICAgICA/IGdldEhhbmRsZXJcbiAgICAgICAgOiBoYXNIYW5k
bGVyO1xuICAgICAgdm0uX3JlbmRlclByb3h5ID0gbmV3IFByb3h5KHZtLCBoYW5kbGVycyk7XG4g
ICAgfSBlbHNlIHtcbiAgICAgIHZtLl9yZW5kZXJQcm94eSA9IHZtO1xuICAgIH1cbiAgfTtcbn1c
blxuLyogICovXG5cbnZhciBWTm9kZSA9IGZ1bmN0aW9uIFZOb2RlIChcbiAgdGFnLFxuICBkYXRh
LFxuICBjaGlsZHJlbixcbiAgdGV4dCxcbiAgZWxtLFxuICBjb250ZXh0LFxuICBjb21wb25lbnRP
cHRpb25zLFxuICBhc3luY0ZhY3Rvcnlcbikge1xuICB0aGlzLnRhZyA9IHRhZztcbiAgdGhpcy5k
YXRhID0gZGF0YTtcbiAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB0aGlzLnRleHQgPSB0
ZXh0O1xuICB0aGlzLmVsbSA9IGVsbTtcbiAgdGhpcy5ucyA9IHVuZGVmaW5lZDtcbiAgdGhpcy5j
b250ZXh0ID0gY29udGV4dDtcbiAgdGhpcy5mdW5jdGlvbmFsQ29udGV4dCA9IHVuZGVmaW5lZDtc
biAgdGhpcy5rZXkgPSBkYXRhICYmIGRhdGEua2V5O1xuICB0aGlzLmNvbXBvbmVudE9wdGlvbnMg
PSBjb21wb25lbnRPcHRpb25zO1xuICB0aGlzLmNvbXBvbmVudEluc3RhbmNlID0gdW5kZWZpbmVk
O1xuICB0aGlzLnBhcmVudCA9IHVuZGVmaW5lZDtcbiAgdGhpcy5yYXcgPSBmYWxzZTtcbiAgdGhp
cy5pc1N0YXRpYyA9IGZhbHNlO1xuICB0aGlzLmlzUm9vdEluc2VydCA9IHRydWU7XG4gIHRoaXMu
aXNDb21tZW50ID0gZmFsc2U7XG4gIHRoaXMuaXNDbG9uZWQgPSBmYWxzZTtcbiAgdGhpcy5pc09u
Y2UgPSBmYWxzZTtcbiAgdGhpcy5hc3luY0ZhY3RvcnkgPSBhc3luY0ZhY3Rvcnk7XG4gIHRoaXMu
YXN5bmNNZXRhID0gdW5kZWZpbmVkO1xuICB0aGlzLmlzQXN5bmNQbGFjZWhvbGRlciA9IGZhbHNl
O1xufTtcblxudmFyIHByb3RvdHlwZUFjY2Vzc29ycyA9IHsgY2hpbGQ6IHt9IH07XG5cbi8vIERF
UFJFQ0FURUQ6IGFsaWFzIGZvciBjb21wb25lbnRJbnN0YW5jZSBmb3IgYmFja3dhcmRzIGNvbXBh
dC5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5wcm90b3R5cGVBY2Nlc3NvcnMuY2hpbGQu
Z2V0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jb21wb25lbnRJbnN0YW5jZVxufTtc
blxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoIFZOb2RlLnByb3RvdHlwZSwgcHJvdG90eXBlQWNj
ZXNzb3JzICk7XG5cbnZhciBjcmVhdGVFbXB0eVZOb2RlID0gZnVuY3Rpb24gKHRleHQpIHtcbiAg
aWYgKCB0ZXh0ID09PSB2b2lkIDAgKSB0ZXh0ID0gJyc7XG5cbiAgdmFyIG5vZGUgPSBuZXcgVk5v
ZGUoKTtcbiAgbm9kZS50ZXh0ID0gdGV4dDtcbiAgbm9kZS5pc0NvbW1lbnQgPSB0cnVlO1xuICBy
ZXR1cm4gbm9kZVxufTtcblxuZnVuY3Rpb24gY3JlYXRlVGV4dFZOb2RlICh2YWwpIHtcbiAgcmV0
dXJuIG5ldyBWTm9kZSh1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBTdHJpbmcodmFs
KSlcbn1cblxuLy8gb3B0aW1pemVkIHNoYWxsb3cgY2xvbmVcbi8vIHVzZWQgZm9yIHN0YXRpYyBu
b2RlcyBhbmQgc2xvdCBub2RlcyBiZWNhdXNlIHRoZXkgbWF5IGJlIHJldXNlZCBhY3Jvc3Ncbi8v
IG11bHRpcGxlIHJlbmRlcnMsIGNsb25pbmcgdGhlbSBhdm9pZHMgZXJyb3JzIHdoZW4gRE9NIG1h
bmlwdWxhdGlvbnMgcmVseVxuLy8gb24gdGhlaXIgZWxtIHJlZmVyZW5jZS5cbmZ1bmN0aW9uIGNs
b25lVk5vZGUgKHZub2RlKSB7XG4gIHZhciBjbG9uZWQgPSBuZXcgVk5vZGUoXG4gICAgdm5vZGUu
dGFnLFxuICAgIHZub2RlLmRhdGEsXG4gICAgdm5vZGUuY2hpbGRyZW4sXG4gICAgdm5vZGUudGV4
dCxcbiAgICB2bm9kZS5lbG0sXG4gICAgdm5vZGUuY29udGV4dCxcbiAgICB2bm9kZS5jb21wb25l
bnRPcHRpb25zLFxuICAgIHZub2RlLmFzeW5jRmFjdG9yeVxuICApO1xuICBjbG9uZWQubnMgPSB2
bm9kZS5ucztcbiAgY2xvbmVkLmlzU3RhdGljID0gdm5vZGUuaXNTdGF0aWM7XG4gIGNsb25lZC5r
ZXkgPSB2bm9kZS5rZXk7XG4gIGNsb25lZC5pc0NvbW1lbnQgPSB2bm9kZS5pc0NvbW1lbnQ7XG4g
IGNsb25lZC5pc0Nsb25lZCA9IHRydWU7XG4gIHJldHVybiBjbG9uZWRcbn1cblxuZnVuY3Rpb24g
Y2xvbmVWTm9kZXMgKHZub2Rlcykge1xuICB2YXIgbGVuID0gdm5vZGVzLmxlbmd0aDtcbiAgdmFy
IHJlcyA9IG5ldyBBcnJheShsZW4pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7
XG4gICAgcmVzW2ldID0gY2xvbmVWTm9kZSh2bm9kZXNbaV0pO1xuICB9XG4gIHJldHVybiByZXNc
bn1cblxuLyogICovXG5cbnZhciBub3JtYWxpemVFdmVudCA9IGNhY2hlZChmdW5jdGlvbiAobmFt
ZSkge1xuICB2YXIgcGFzc2l2ZSA9IG5hbWUuY2hhckF0KDApID09PSAnJic7XG4gIG5hbWUgPSBw
YXNzaXZlID8gbmFtZS5zbGljZSgxKSA6IG5hbWU7XG4gIHZhciBvbmNlJCQxID0gbmFtZS5jaGFy
QXQoMCkgPT09ICd+JzsgLy8gUHJlZml4ZWQgbGFzdCwgY2hlY2tlZCBmaXJzdFxuICBuYW1lID0g
b25jZSQkMSA/IG5hbWUuc2xpY2UoMSkgOiBuYW1lO1xuICB2YXIgY2FwdHVyZSA9IG5hbWUuY2hh
ckF0KDApID09PSAnISc7XG4gIG5hbWUgPSBjYXB0dXJlID8gbmFtZS5zbGljZSgxKSA6IG5hbWU7
XG4gIHJldHVybiB7XG4gICAgbmFtZTogbmFtZSxcbiAgICBvbmNlOiBvbmNlJCQxLFxuICAgIGNh
cHR1cmU6IGNhcHR1cmUsXG4gICAgcGFzc2l2ZTogcGFzc2l2ZVxuICB9XG59KTtcblxuZnVuY3Rp
b24gY3JlYXRlRm5JbnZva2VyIChmbnMpIHtcbiAgZnVuY3Rpb24gaW52b2tlciAoKSB7XG4gICAg
dmFyIGFyZ3VtZW50cyQxID0gYXJndW1lbnRzO1xuXG4gICAgdmFyIGZucyA9IGludm9rZXIuZm5z
O1xuICAgIGlmIChBcnJheS5pc0FycmF5KGZucykpIHtcbiAgICAgIHZhciBjbG9uZWQgPSBmbnMu
c2xpY2UoKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2xvbmVkLmxlbmd0aDsgaSsrKSB7
XG4gICAgICAgIGNsb25lZFtpXS5hcHBseShudWxsLCBhcmd1bWVudHMkMSk7XG4gICAgICB9XG4g
ICAgfSBlbHNlIHtcbiAgICAgIC8vIHJldHVybiBoYW5kbGVyIHJldHVybiB2YWx1ZSBmb3Igc2lu
Z2xlIGhhbmRsZXJzXG4gICAgICByZXR1cm4gZm5zLmFwcGx5KG51bGwsIGFyZ3VtZW50cylcbiAg
ICB9XG4gIH1cbiAgaW52b2tlci5mbnMgPSBmbnM7XG4gIHJldHVybiBpbnZva2VyXG59XG5cbmZ1
bmN0aW9uIHVwZGF0ZUxpc3RlbmVycyAoXG4gIG9uLFxuICBvbGRPbixcbiAgYWRkLFxuICByZW1v
dmUkJDEsXG4gIHZtXG4pIHtcbiAgdmFyIG5hbWUsIGN1ciwgb2xkLCBldmVudDtcbiAgZm9yIChu
YW1lIGluIG9uKSB7XG4gICAgY3VyID0gb25bbmFtZV07XG4gICAgb2xkID0gb2xkT25bbmFtZV07
XG4gICAgZXZlbnQgPSBub3JtYWxpemVFdmVudChuYW1lKTtcbiAgICBpZiAoaXNVbmRlZihjdXIp
KSB7XG4gICAgICBcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oXG4gICAg
ICAgIFwiSW52YWxpZCBoYW5kbGVyIGZvciBldmVudCBcXFwiXCIgKyAoZXZlbnQubmFtZSkgKyBc
IlxcXCI6IGdvdCBcIiArIFN0cmluZyhjdXIpLFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9
IGVsc2UgaWYgKGlzVW5kZWYob2xkKSkge1xuICAgICAgaWYgKGlzVW5kZWYoY3VyLmZucykpIHtc
biAgICAgICAgY3VyID0gb25bbmFtZV0gPSBjcmVhdGVGbkludm9rZXIoY3VyKTtcbiAgICAgIH1c
biAgICAgIGFkZChldmVudC5uYW1lLCBjdXIsIGV2ZW50Lm9uY2UsIGV2ZW50LmNhcHR1cmUsIGV2
ZW50LnBhc3NpdmUpO1xuICAgIH0gZWxzZSBpZiAoY3VyICE9PSBvbGQpIHtcbiAgICAgIG9sZC5m
bnMgPSBjdXI7XG4gICAgICBvbltuYW1lXSA9IG9sZDtcbiAgICB9XG4gIH1cbiAgZm9yIChuYW1l
IGluIG9sZE9uKSB7XG4gICAgaWYgKGlzVW5kZWYob25bbmFtZV0pKSB7XG4gICAgICBldmVudCA9
IG5vcm1hbGl6ZUV2ZW50KG5hbWUpO1xuICAgICAgcmVtb3ZlJCQxKGV2ZW50Lm5hbWUsIG9sZE9u
W25hbWVdLCBldmVudC5jYXB0dXJlKTtcbiAgICB9XG4gIH1cbn1cblxuLyogICovXG5cbmZ1bmN0
aW9uIG1lcmdlVk5vZGVIb29rIChkZWYsIGhvb2tLZXksIGhvb2spIHtcbiAgdmFyIGludm9rZXI7
XG4gIHZhciBvbGRIb29rID0gZGVmW2hvb2tLZXldO1xuXG4gIGZ1bmN0aW9uIHdyYXBwZWRIb29r
ICgpIHtcbiAgICBob29rLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgLy8gaW1wb3J0YW50
OiByZW1vdmUgbWVyZ2VkIGhvb2sgdG8gZW5zdXJlIGl0J3MgY2FsbGVkIG9ubHkgb25jZVxuICAg
IC8vIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrXG4gICAgcmVtb3ZlKGludm9rZXIuZm5zLCB3cmFw
cGVkSG9vayk7XG4gIH1cblxuICBpZiAoaXNVbmRlZihvbGRIb29rKSkge1xuICAgIC8vIG5vIGV4
aXN0aW5nIGhvb2tcbiAgICBpbnZva2VyID0gY3JlYXRlRm5JbnZva2VyKFt3cmFwcGVkSG9va10p
O1xuICB9IGVsc2Uge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpc0Rl
ZihvbGRIb29rLmZucykgJiYgaXNUcnVlKG9sZEhvb2subWVyZ2VkKSkge1xuICAgICAgLy8gYWxy
ZWFkeSBhIG1lcmdlZCBpbnZva2VyXG4gICAgICBpbnZva2VyID0gb2xkSG9vaztcbiAgICAgIGlu
dm9rZXIuZm5zLnB1c2god3JhcHBlZEhvb2spO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBleGlz
dGluZyBwbGFpbiBob29rXG4gICAgICBpbnZva2VyID0gY3JlYXRlRm5JbnZva2VyKFtvbGRIb29r
LCB3cmFwcGVkSG9va10pO1xuICAgIH1cbiAgfVxuXG4gIGludm9rZXIubWVyZ2VkID0gdHJ1ZTtc
biAgZGVmW2hvb2tLZXldID0gaW52b2tlcjtcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGV4dHJh
Y3RQcm9wc0Zyb21WTm9kZURhdGEgKFxuICBkYXRhLFxuICBDdG9yLFxuICB0YWdcbikge1xuICAv
LyB3ZSBhcmUgb25seSBleHRyYWN0aW5nIHJhdyB2YWx1ZXMgaGVyZS5cbiAgLy8gdmFsaWRhdGlv
biBhbmQgZGVmYXVsdCB2YWx1ZXMgYXJlIGhhbmRsZWQgaW4gdGhlIGNoaWxkXG4gIC8vIGNvbXBv
bmVudCBpdHNlbGYuXG4gIHZhciBwcm9wT3B0aW9ucyA9IEN0b3Iub3B0aW9ucy5wcm9wcztcbiAg
aWYgKGlzVW5kZWYocHJvcE9wdGlvbnMpKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIHJlcyA9
IHt9O1xuICB2YXIgYXR0cnMgPSBkYXRhLmF0dHJzO1xuICB2YXIgcHJvcHMgPSBkYXRhLnByb3Bz
O1xuICBpZiAoaXNEZWYoYXR0cnMpIHx8IGlzRGVmKHByb3BzKSkge1xuICAgIGZvciAodmFyIGtl
eSBpbiBwcm9wT3B0aW9ucykge1xuICAgICAgdmFyIGFsdEtleSA9IGh5cGhlbmF0ZShrZXkpO1xu
ICAgICAgaWYgKGZhbHNlKSB7XG4gICAgICAgIHZhciBrZXlJbkxvd2VyQ2FzZSA9IGtleS50b0xv
d2VyQ2FzZSgpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAga2V5ICE9PSBrZXlJbkxvd2VyQ2Fz
ZSAmJlxuICAgICAgICAgIGF0dHJzICYmIGhhc093bihhdHRycywga2V5SW5Mb3dlckNhc2UpXG4g
ICAgICAgICkge1xuICAgICAgICAgIHRpcChcbiAgICAgICAgICAgIFwiUHJvcCBcXFwiXCIgKyBr
ZXlJbkxvd2VyQ2FzZSArIFwiXFxcIiBpcyBwYXNzZWQgdG8gY29tcG9uZW50IFwiICtcbiAgICAg
ICAgICAgIChmb3JtYXRDb21wb25lbnROYW1lKHRhZyB8fCBDdG9yKSkgKyBcIiwgYnV0IHRoZSBk
ZWNsYXJlZCBwcm9wIG5hbWUgaXNcIiArXG4gICAgICAgICAgICBcIiBcXFwiXCIgKyBrZXkgKyBc
IlxcXCIuIFwiICtcbiAgICAgICAgICAgIFwiTm90ZSB0aGF0IEhUTUwgYXR0cmlidXRlcyBhcmUg
Y2FzZS1pbnNlbnNpdGl2ZSBhbmQgY2FtZWxDYXNlZCBcIiArXG4gICAgICAgICAgICBcInByb3Bz
IG5lZWQgdG8gdXNlIHRoZWlyIGtlYmFiLWNhc2UgZXF1aXZhbGVudHMgd2hlbiB1c2luZyBpbi1E
T00gXCIgK1xuICAgICAgICAgICAgXCJ0ZW1wbGF0ZXMuIFlvdSBzaG91bGQgcHJvYmFibHkgdXNl
IFxcXCJcIiArIGFsdEtleSArIFwiXFxcIiBpbnN0ZWFkIG9mIFxcXCJcIiArIGtleSArIFwiXFxc
Ii5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNoZWNrUHJvcChy
ZXMsIHByb3BzLCBrZXksIGFsdEtleSwgdHJ1ZSkgfHxcbiAgICAgIGNoZWNrUHJvcChyZXMsIGF0
dHJzLCBrZXksIGFsdEtleSwgZmFsc2UpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5c
bmZ1bmN0aW9uIGNoZWNrUHJvcCAoXG4gIHJlcyxcbiAgaGFzaCxcbiAga2V5LFxuICBhbHRLZXks
XG4gIHByZXNlcnZlXG4pIHtcbiAgaWYgKGlzRGVmKGhhc2gpKSB7XG4gICAgaWYgKGhhc093biho
YXNoLCBrZXkpKSB7XG4gICAgICByZXNba2V5XSA9IGhhc2hba2V5XTtcbiAgICAgIGlmICghcHJl
c2VydmUpIHtcbiAgICAgICAgZGVsZXRlIGhhc2hba2V5XTtcbiAgICAgIH1cbiAgICAgIHJldHVy
biB0cnVlXG4gICAgfSBlbHNlIGlmIChoYXNPd24oaGFzaCwgYWx0S2V5KSkge1xuICAgICAgcmVz
W2tleV0gPSBoYXNoW2FsdEtleV07XG4gICAgICBpZiAoIXByZXNlcnZlKSB7XG4gICAgICAgIGRl
bGV0ZSBoYXNoW2FsdEtleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAg
fVxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyogICovXG5cbi8vIFRoZSB0ZW1wbGF0ZSBjb21waWxl
ciBhdHRlbXB0cyB0byBtaW5pbWl6ZSB0aGUgbmVlZCBmb3Igbm9ybWFsaXphdGlvbiBieVxuLy8g
c3RhdGljYWxseSBhbmFseXppbmcgdGhlIHRlbXBsYXRlIGF0IGNvbXBpbGUgdGltZS5cbi8vXG4v
LyBGb3IgcGxhaW4gSFRNTCBtYXJrdXAsIG5vcm1hbGl6YXRpb24gY2FuIGJlIGNvbXBsZXRlbHkg
c2tpcHBlZCBiZWNhdXNlIHRoZVxuLy8gZ2VuZXJhdGVkIHJlbmRlciBmdW5jdGlvbiBpcyBndWFy
YW50ZWVkIHRvIHJldHVybiBBcnJheTxWTm9kZT4uIFRoZXJlIGFyZVxuLy8gdHdvIGNhc2VzIHdo
ZXJlIGV4dHJhIG5vcm1hbGl6YXRpb24gaXMgbmVlZGVkOlxuXG4vLyAxLiBXaGVuIHRoZSBjaGls
ZHJlbiBjb250YWlucyBjb21wb25lbnRzIC0gYmVjYXVzZSBhIGZ1bmN0aW9uYWwgY29tcG9uZW50
XG4vLyBtYXkgcmV0dXJuIGFuIEFycmF5IGluc3RlYWQgb2YgYSBzaW5nbGUgcm9vdC4gSW4gdGhp
cyBjYXNlLCBqdXN0IGEgc2ltcGxlXG4vLyBub3JtYWxpemF0aW9uIGlzIG5lZWRlZCAtIGlmIGFu
eSBjaGlsZCBpcyBhbiBBcnJheSwgd2UgZmxhdHRlbiB0aGUgd2hvbGVcbi8vIHRoaW5nIHdpdGgg
QXJyYXkucHJvdG90eXBlLmNvbmNhdC4gSXQgaXMgZ3VhcmFudGVlZCB0byBiZSBvbmx5IDEtbGV2
ZWwgZGVlcFxuLy8gYmVjYXVzZSBmdW5jdGlvbmFsIGNvbXBvbmVudHMgYWxyZWFkeSBub3JtYWxp
emUgdGhlaXIgb3duIGNoaWxkcmVuLlxuZnVuY3Rpb24gc2ltcGxlTm9ybWFsaXplQ2hpbGRyZW4g
KGNoaWxkcmVuKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKysp
IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbltpXSkpIHtcbiAgICAgIHJldHVybiBB
cnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBjaGlsZHJlbilcbiAgICB9XG4gIH1cbiAg
cmV0dXJuIGNoaWxkcmVuXG59XG5cbi8vIDIuIFdoZW4gdGhlIGNoaWxkcmVuIGNvbnRhaW5zIGNv
bnN0cnVjdHMgdGhhdCBhbHdheXMgZ2VuZXJhdGVkIG5lc3RlZCBBcnJheXMsXG4vLyBlLmcuIDx0
ZW1wbGF0ZT4sIDxzbG90Piwgdi1mb3IsIG9yIHdoZW4gdGhlIGNoaWxkcmVuIGlzIHByb3ZpZGVk
IGJ5IHVzZXJcbi8vIHdpdGggaGFuZC13cml0dGVuIHJlbmRlciBmdW5jdGlvbnMgLyBKU1guIElu
IHN1Y2ggY2FzZXMgYSBmdWxsIG5vcm1hbGl6YXRpb25cbi8vIGlzIG5lZWRlZCB0byBjYXRlciB0
byBhbGwgcG9zc2libGUgdHlwZXMgb2YgY2hpbGRyZW4gdmFsdWVzLlxuZnVuY3Rpb24gbm9ybWFs
aXplQ2hpbGRyZW4gKGNoaWxkcmVuKSB7XG4gIHJldHVybiBpc1ByaW1pdGl2ZShjaGlsZHJlbilc
biAgICA/IFtjcmVhdGVUZXh0Vk5vZGUoY2hpbGRyZW4pXVxuICAgIDogQXJyYXkuaXNBcnJheShj
aGlsZHJlbilcbiAgICAgID8gbm9ybWFsaXplQXJyYXlDaGlsZHJlbihjaGlsZHJlbilcbiAgICAg
IDogdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGlzVGV4dE5vZGUgKG5vZGUpIHtcbiAgcmV0dXJu
IGlzRGVmKG5vZGUpICYmIGlzRGVmKG5vZGUudGV4dCkgJiYgaXNGYWxzZShub2RlLmlzQ29tbWVu
dClcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXlDaGlsZHJlbiAoY2hpbGRyZW4sIG5lc3Rl
ZEluZGV4KSB7XG4gIHZhciByZXMgPSBbXTtcbiAgdmFyIGksIGMsIGxhc3Q7XG4gIGZvciAoaSA9
IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgIGMgPSBjaGlsZHJlbltpXTtcbiAg
ICBpZiAoaXNVbmRlZihjKSB8fCB0eXBlb2YgYyA9PT0gJ2Jvb2xlYW4nKSB7IGNvbnRpbnVlIH1c
biAgICBsYXN0ID0gcmVzW3Jlcy5sZW5ndGggLSAxXTtcbiAgICAvLyAgbmVzdGVkXG4gICAgaWYg
KEFycmF5LmlzQXJyYXkoYykpIHtcbiAgICAgIHJlcy5wdXNoLmFwcGx5KHJlcywgbm9ybWFsaXpl
QXJyYXlDaGlsZHJlbihjLCAoKG5lc3RlZEluZGV4IHx8ICcnKSArIFwiX1wiICsgaSkpKTtcbiAg
ICB9IGVsc2UgaWYgKGlzUHJpbWl0aXZlKGMpKSB7XG4gICAgICBpZiAoaXNUZXh0Tm9kZShsYXN0
KSkge1xuICAgICAgICAvLyBtZXJnZSBhZGphY2VudCB0ZXh0IG5vZGVzXG4gICAgICAgIC8vIHRo
aXMgaXMgbmVjZXNzYXJ5IGZvciBTU1IgaHlkcmF0aW9uIGJlY2F1c2UgdGV4dCBub2RlcyBhcmVc
biAgICAgICAgLy8gZXNzZW50aWFsbHkgbWVyZ2VkIHdoZW4gcmVuZGVyZWQgdG8gSFRNTCBzdHJp
bmdzXG4gICAgICAgIChsYXN0KS50ZXh0ICs9IFN0cmluZyhjKTtcbiAgICAgIH0gZWxzZSBpZiAo
YyAhPT0gJycpIHtcbiAgICAgICAgLy8gY29udmVydCBwcmltaXRpdmUgdG8gdm5vZGVcbiAgICAg
ICAgcmVzLnB1c2goY3JlYXRlVGV4dFZOb2RlKGMpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xu
ICAgICAgaWYgKGlzVGV4dE5vZGUoYykgJiYgaXNUZXh0Tm9kZShsYXN0KSkge1xuICAgICAgICAv
LyBtZXJnZSBhZGphY2VudCB0ZXh0IG5vZGVzXG4gICAgICAgIHJlc1tyZXMubGVuZ3RoIC0gMV0g
PSBjcmVhdGVUZXh0Vk5vZGUobGFzdC50ZXh0ICsgYy50ZXh0KTtcbiAgICAgIH0gZWxzZSB7XG4g
ICAgICAgIC8vIGRlZmF1bHQga2V5IGZvciBuZXN0ZWQgYXJyYXkgY2hpbGRyZW4gKGxpa2VseSBn
ZW5lcmF0ZWQgYnkgdi1mb3IpXG4gICAgICAgIGlmIChpc1RydWUoY2hpbGRyZW4uX2lzVkxpc3Qp
ICYmXG4gICAgICAgICAgaXNEZWYoYy50YWcpICYmXG4gICAgICAgICAgaXNVbmRlZihjLmtleSkg
JiZcbiAgICAgICAgICBpc0RlZihuZXN0ZWRJbmRleCkpIHtcbiAgICAgICAgICBjLmtleSA9IFwi
X192bGlzdFwiICsgbmVzdGVkSW5kZXggKyBcIl9cIiArIGkgKyBcIl9fXCI7XG4gICAgICAgIH1c
biAgICAgICAgcmVzLnB1c2goYyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNc
bn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGVuc3VyZUN0b3IgKGNvbXAsIGJhc2UpIHtcbiAgaWYg
KGNvbXAuX19lc01vZHVsZSAmJiBjb21wLmRlZmF1bHQpIHtcbiAgICBjb21wID0gY29tcC5kZWZh
dWx0O1xuICB9XG4gIHJldHVybiBpc09iamVjdChjb21wKVxuICAgID8gYmFzZS5leHRlbmQoY29t
cClcbiAgICA6IGNvbXBcbn1cblxuZnVuY3Rpb24gY3JlYXRlQXN5bmNQbGFjZWhvbGRlciAoXG4g
IGZhY3RvcnksXG4gIGRhdGEsXG4gIGNvbnRleHQsXG4gIGNoaWxkcmVuLFxuICB0YWdcbikge1xu
ICB2YXIgbm9kZSA9IGNyZWF0ZUVtcHR5Vk5vZGUoKTtcbiAgbm9kZS5hc3luY0ZhY3RvcnkgPSBm
YWN0b3J5O1xuICBub2RlLmFzeW5jTWV0YSA9IHsgZGF0YTogZGF0YSwgY29udGV4dDogY29udGV4
dCwgY2hpbGRyZW46IGNoaWxkcmVuLCB0YWc6IHRhZyB9O1xuICByZXR1cm4gbm9kZVxufVxuXG5m
dW5jdGlvbiByZXNvbHZlQXN5bmNDb21wb25lbnQgKFxuICBmYWN0b3J5LFxuICBiYXNlQ3Rvcixc
biAgY29udGV4dFxuKSB7XG4gIGlmIChpc1RydWUoZmFjdG9yeS5lcnJvcikgJiYgaXNEZWYoZmFj
dG9yeS5lcnJvckNvbXApKSB7XG4gICAgcmV0dXJuIGZhY3RvcnkuZXJyb3JDb21wXG4gIH1cblxu
ICBpZiAoaXNEZWYoZmFjdG9yeS5yZXNvbHZlZCkpIHtcbiAgICByZXR1cm4gZmFjdG9yeS5yZXNv
bHZlZFxuICB9XG5cbiAgaWYgKGlzVHJ1ZShmYWN0b3J5LmxvYWRpbmcpICYmIGlzRGVmKGZhY3Rv
cnkubG9hZGluZ0NvbXApKSB7XG4gICAgcmV0dXJuIGZhY3RvcnkubG9hZGluZ0NvbXBcbiAgfVxu
XG4gIGlmIChpc0RlZihmYWN0b3J5LmNvbnRleHRzKSkge1xuICAgIC8vIGFscmVhZHkgcGVuZGlu
Z1xuICAgIGZhY3RvcnkuY29udGV4dHMucHVzaChjb250ZXh0KTtcbiAgfSBlbHNlIHtcbiAgICB2
YXIgY29udGV4dHMgPSBmYWN0b3J5LmNvbnRleHRzID0gW2NvbnRleHRdO1xuICAgIHZhciBzeW5j
ID0gdHJ1ZTtcblxuICAgIHZhciBmb3JjZVJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZv
ciAodmFyIGkgPSAwLCBsID0gY29udGV4dHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAg
IGNvbnRleHRzW2ldLiRmb3JjZVVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIg
cmVzb2x2ZSA9IG9uY2UoZnVuY3Rpb24gKHJlcykge1xuICAgICAgLy8gY2FjaGUgcmVzb2x2ZWRc
biAgICAgIGZhY3RvcnkucmVzb2x2ZWQgPSBlbnN1cmVDdG9yKHJlcywgYmFzZUN0b3IpO1xuICAg
ICAgLy8gaW52b2tlIGNhbGxiYWNrcyBvbmx5IGlmIHRoaXMgaXMgbm90IGEgc3luY2hyb25vdXMg
cmVzb2x2ZVxuICAgICAgLy8gKGFzeW5jIHJlc29sdmVzIGFyZSBzaGltbWVkIGFzIHN5bmNocm9u
b3VzIGR1cmluZyBTU1IpXG4gICAgICBpZiAoIXN5bmMpIHtcbiAgICAgICAgZm9yY2VSZW5kZXIo
KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciByZWplY3QgPSBvbmNlKGZ1bmN0aW9uIChy
ZWFzb24pIHtcbiAgICAgIFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicgJiYgd2Fybihc
biAgICAgICAgXCJGYWlsZWQgdG8gcmVzb2x2ZSBhc3luYyBjb21wb25lbnQ6IFwiICsgKFN0cmlu
ZyhmYWN0b3J5KSkgK1xuICAgICAgICAocmVhc29uID8gKFwiXFxuUmVhc29uOiBcIiArIHJlYXNv
bikgOiAnJylcbiAgICAgICk7XG4gICAgICBpZiAoaXNEZWYoZmFjdG9yeS5lcnJvckNvbXApKSB7
XG4gICAgICAgIGZhY3RvcnkuZXJyb3IgPSB0cnVlO1xuICAgICAgICBmb3JjZVJlbmRlcigpO1xu
ICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHJlcyA9IGZhY3RvcnkocmVzb2x2ZSwgcmVqZWN0
KTtcblxuICAgIGlmIChpc09iamVjdChyZXMpKSB7XG4gICAgICBpZiAodHlwZW9mIHJlcy50aGVu
ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vICgpID0+IFByb21pc2VcbiAgICAgICAgaWYg
KGlzVW5kZWYoZmFjdG9yeS5yZXNvbHZlZCkpIHtcbiAgICAgICAgICByZXMudGhlbihyZXNvbHZl
LCByZWplY3QpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzRGVmKHJlcy5jb21wb25l
bnQpICYmIHR5cGVvZiByZXMuY29tcG9uZW50LnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAg
ICAgcmVzLmNvbXBvbmVudC50aGVuKHJlc29sdmUsIHJlamVjdCk7XG5cbiAgICAgICAgaWYgKGlz
RGVmKHJlcy5lcnJvcikpIHtcbiAgICAgICAgICBmYWN0b3J5LmVycm9yQ29tcCA9IGVuc3VyZUN0
b3IocmVzLmVycm9yLCBiYXNlQ3Rvcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNEZWYo
cmVzLmxvYWRpbmcpKSB7XG4gICAgICAgICAgZmFjdG9yeS5sb2FkaW5nQ29tcCA9IGVuc3VyZUN0
b3IocmVzLmxvYWRpbmcsIGJhc2VDdG9yKTtcbiAgICAgICAgICBpZiAocmVzLmRlbGF5ID09PSAw
KSB7XG4gICAgICAgICAgICBmYWN0b3J5LmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgIH0gZWxz
ZSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAg
aWYgKGlzVW5kZWYoZmFjdG9yeS5yZXNvbHZlZCkgJiYgaXNVbmRlZihmYWN0b3J5LmVycm9yKSkg
e1xuICAgICAgICAgICAgICAgIGZhY3RvcnkubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAg
ICAgZm9yY2VSZW5kZXIoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgcmVzLmRl
bGF5IHx8IDIwMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRGVm
KHJlcy50aW1lb3V0KSkge1xuICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAg
ICAgICAgICAgaWYgKGlzVW5kZWYoZmFjdG9yeS5yZXNvbHZlZCkpIHtcbiAgICAgICAgICAgICAg
cmVqZWN0KFxuICAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgICAgICAgPyAoXCJ0
aW1lb3V0IChcIiArIChyZXMudGltZW91dCkgKyBcIm1zKVwiKVxuICAgICAgICAgICAgICAgICAg
OiBudWxsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgcmVz
LnRpbWVvdXQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3luYyA9IGZhbHNl
O1xuICAgIC8vIHJldHVybiBpbiBjYXNlIHJlc29sdmVkIHN5bmNocm9ub3VzbHlcbiAgICByZXR1
cm4gZmFjdG9yeS5sb2FkaW5nXG4gICAgICA/IGZhY3RvcnkubG9hZGluZ0NvbXBcbiAgICAgIDog
ZmFjdG9yeS5yZXNvbHZlZFxuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBnZXRGaXJzdENv
bXBvbmVudENoaWxkIChjaGlsZHJlbikge1xuICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikp
IHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAg
ICB2YXIgYyA9IGNoaWxkcmVuW2ldO1xuICAgICAgaWYgKGlzRGVmKGMpICYmIGlzRGVmKGMuY29t
cG9uZW50T3B0aW9ucykpIHtcbiAgICAgICAgcmV0dXJuIGNcbiAgICAgIH1cbiAgICB9XG4gIH1c
bn1cblxuLyogICovXG5cbi8qICAqL1xuXG5mdW5jdGlvbiBpbml0RXZlbnRzICh2bSkge1xuICB2
bS5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgdm0uX2hhc0hvb2tFdmVudCA9IGZh
bHNlO1xuICAvLyBpbml0IHBhcmVudCBhdHRhY2hlZCBldmVudHNcbiAgdmFyIGxpc3RlbmVycyA9
IHZtLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnM7XG4gIGlmIChsaXN0ZW5lcnMpIHtcbiAgICB1
cGRhdGVDb21wb25lbnRMaXN0ZW5lcnModm0sIGxpc3RlbmVycyk7XG4gIH1cbn1cblxudmFyIHRh
cmdldDtcblxuZnVuY3Rpb24gYWRkIChldmVudCwgZm4sIG9uY2UkJDEpIHtcbiAgaWYgKG9uY2Uk
JDEpIHtcbiAgICB0YXJnZXQuJG9uY2UoZXZlbnQsIGZuKTtcbiAgfSBlbHNlIHtcbiAgICB0YXJn
ZXQuJG9uKGV2ZW50LCBmbik7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlJDEgKGV2ZW50LCBm
bikge1xuICB0YXJnZXQuJG9mZihldmVudCwgZm4pO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVDb21w
b25lbnRMaXN0ZW5lcnMgKFxuICB2bSxcbiAgbGlzdGVuZXJzLFxuICBvbGRMaXN0ZW5lcnNcbikg
e1xuICB0YXJnZXQgPSB2bTtcbiAgdXBkYXRlTGlzdGVuZXJzKGxpc3RlbmVycywgb2xkTGlzdGVu
ZXJzIHx8IHt9LCBhZGQsIHJlbW92ZSQxLCB2bSk7XG59XG5cbmZ1bmN0aW9uIGV2ZW50c01peGlu
IChWdWUpIHtcbiAgdmFyIGhvb2tSRSA9IC9eaG9vazovO1xuICBWdWUucHJvdG90eXBlLiRvbiA9
IGZ1bmN0aW9uIChldmVudCwgZm4pIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZh
ciB2bSA9IHRoaXM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICBmb3Ig
KHZhciBpID0gMCwgbCA9IGV2ZW50Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB0aGlz
JDEuJG9uKGV2ZW50W2ldLCBmbik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICh2bS5f
ZXZlbnRzW2V2ZW50XSB8fCAodm0uX2V2ZW50c1tldmVudF0gPSBbXSkpLnB1c2goZm4pO1xuICAg
ICAgLy8gb3B0aW1pemUgaG9vazpldmVudCBjb3N0IGJ5IHVzaW5nIGEgYm9vbGVhbiBmbGFnIG1h
cmtlZCBhdCByZWdpc3RyYXRpb25cbiAgICAgIC8vIGluc3RlYWQgb2YgYSBoYXNoIGxvb2t1cFxu
ICAgICAgaWYgKGhvb2tSRS50ZXN0KGV2ZW50KSkge1xuICAgICAgICB2bS5faGFzSG9va0V2ZW50
ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZtXG4gIH07XG5cbiAgVnVlLnBy
b3RvdHlwZS4kb25jZSA9IGZ1bmN0aW9uIChldmVudCwgZm4pIHtcbiAgICB2YXIgdm0gPSB0aGlz
O1xuICAgIGZ1bmN0aW9uIG9uICgpIHtcbiAgICAgIHZtLiRvZmYoZXZlbnQsIG9uKTtcbiAgICAg
IGZuLmFwcGx5KHZtLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgICBvbi5mbiA9IGZuO1xuICAgIHZt
LiRvbihldmVudCwgb24pO1xuICAgIHJldHVybiB2bVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUu
JG9mZiA9IGZ1bmN0aW9uIChldmVudCwgZm4pIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxu
ICAgIHZhciB2bSA9IHRoaXM7XG4gICAgLy8gYWxsXG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3Ro
KSB7XG4gICAgICB2bS5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIHJldHVy
biB2bVxuICAgIH1cbiAgICAvLyBhcnJheSBvZiBldmVudHNcbiAgICBpZiAoQXJyYXkuaXNBcnJh
eShldmVudCkpIHtcbiAgICAgIGZvciAodmFyIGkkMSA9IDAsIGwgPSBldmVudC5sZW5ndGg7IGkk
MSA8IGw7IGkkMSsrKSB7XG4gICAgICAgIHRoaXMkMS4kb2ZmKGV2ZW50W2kkMV0sIGZuKTtcbiAg
ICAgIH1cbiAgICAgIHJldHVybiB2bVxuICAgIH1cbiAgICAvLyBzcGVjaWZpYyBldmVudFxuICAg
IHZhciBjYnMgPSB2bS5fZXZlbnRzW2V2ZW50XTtcbiAgICBpZiAoIWNicykge1xuICAgICAgcmV0
dXJuIHZtXG4gICAgfVxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICB2
bS5fZXZlbnRzW2V2ZW50XSA9IG51bGw7XG4gICAgICByZXR1cm4gdm1cbiAgICB9XG4gICAgLy8g
c3BlY2lmaWMgaGFuZGxlclxuICAgIHZhciBjYjtcbiAgICB2YXIgaSA9IGNicy5sZW5ndGg7XG4g
ICAgd2hpbGUgKGktLSkge1xuICAgICAgY2IgPSBjYnNbaV07XG4gICAgICBpZiAoY2IgPT09IGZu
IHx8IGNiLmZuID09PSBmbikge1xuICAgICAgICBjYnMuc3BsaWNlKGksIDEpO1xuICAgICAgICBi
cmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdm1cbiAgfTtcblxuICBWdWUucHJvdG90
eXBlLiRlbWl0ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICBp
ZiAoZmFsc2UpIHtcbiAgICAgIHZhciBsb3dlckNhc2VFdmVudCA9IGV2ZW50LnRvTG93ZXJDYXNl
KCk7XG4gICAgICBpZiAobG93ZXJDYXNlRXZlbnQgIT09IGV2ZW50ICYmIHZtLl9ldmVudHNbbG93
ZXJDYXNlRXZlbnRdKSB7XG4gICAgICAgIHRpcChcbiAgICAgICAgICBcIkV2ZW50IFxcXCJcIiAr
IGxvd2VyQ2FzZUV2ZW50ICsgXCJcXFwiIGlzIGVtaXR0ZWQgaW4gY29tcG9uZW50IFwiICtcbiAg
ICAgICAgICAoZm9ybWF0Q29tcG9uZW50TmFtZSh2bSkpICsgXCIgYnV0IHRoZSBoYW5kbGVyIGlz
IHJlZ2lzdGVyZWQgZm9yIFxcXCJcIiArIGV2ZW50ICsgXCJcXFwiLiBcIiArXG4gICAgICAgICAg
XCJOb3RlIHRoYXQgSFRNTCBhdHRyaWJ1dGVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlIGFuZCB5b3Ug
Y2Fubm90IHVzZSBcIiArXG4gICAgICAgICAgXCJ2LW9uIHRvIGxpc3RlbiB0byBjYW1lbENhc2Ug
ZXZlbnRzIHdoZW4gdXNpbmcgaW4tRE9NIHRlbXBsYXRlcy4gXCIgK1xuICAgICAgICAgIFwiWW91
IHNob3VsZCBwcm9iYWJseSB1c2UgXFxcIlwiICsgKGh5cGhlbmF0ZShldmVudCkpICsgXCJcXFwi
IGluc3RlYWQgb2YgXFxcIlwiICsgZXZlbnQgKyBcIlxcXCIuXCJcbiAgICAgICAgKTtcbiAgICAg
IH1cbiAgICB9XG4gICAgdmFyIGNicyA9IHZtLl9ldmVudHNbZXZlbnRdO1xuICAgIGlmIChjYnMp
IHtcbiAgICAgIGNicyA9IGNicy5sZW5ndGggPiAxID8gdG9BcnJheShjYnMpIDogY2JzO1xuICAg
ICAgdmFyIGFyZ3MgPSB0b0FycmF5KGFyZ3VtZW50cywgMSk7XG4gICAgICBmb3IgKHZhciBpID0g
MCwgbCA9IGNicy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAg
ICBjYnNbaV0uYXBwbHkodm0sIGFyZ3MpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAg
ICAgaGFuZGxlRXJyb3IoZSwgdm0sIChcImV2ZW50IGhhbmRsZXIgZm9yIFxcXCJcIiArIGV2ZW50
ICsgXCJcXFwiXCIpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdm1c
biAgfTtcbn1cblxuLyogICovXG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHJlc29sdmlu
ZyByYXcgY2hpbGRyZW4gVk5vZGVzIGludG8gYSBzbG90IG9iamVjdC5cbiAqL1xuZnVuY3Rpb24g
cmVzb2x2ZVNsb3RzIChcbiAgY2hpbGRyZW4sXG4gIGNvbnRleHRcbikge1xuICB2YXIgc2xvdHMg
PSB7fTtcbiAgaWYgKCFjaGlsZHJlbikge1xuICAgIHJldHVybiBzbG90c1xuICB9XG4gIHZhciBk
ZWZhdWx0U2xvdCA9IFtdO1xuICBmb3IgKHZhciBpID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsg
aSA8IGw7IGkrKykge1xuICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgIC8vIG5hbWVk
IHNsb3RzIHNob3VsZCBvbmx5IGJlIHJlc3BlY3RlZCBpZiB0aGUgdm5vZGUgd2FzIHJlbmRlcmVk
IGluIHRoZVxuICAgIC8vIHNhbWUgY29udGV4dC5cbiAgICBpZiAoKGNoaWxkLmNvbnRleHQgPT09
IGNvbnRleHQgfHwgY2hpbGQuZnVuY3Rpb25hbENvbnRleHQgPT09IGNvbnRleHQpICYmXG4gICAg
ICBjaGlsZC5kYXRhICYmIGNoaWxkLmRhdGEuc2xvdCAhPSBudWxsXG4gICAgKSB7XG4gICAgICB2
YXIgbmFtZSA9IGNoaWxkLmRhdGEuc2xvdDtcbiAgICAgIHZhciBzbG90ID0gKHNsb3RzW25hbWVd
IHx8IChzbG90c1tuYW1lXSA9IFtdKSk7XG4gICAgICBpZiAoY2hpbGQudGFnID09PSAndGVtcGxh
dGUnKSB7XG4gICAgICAgIHNsb3QucHVzaC5hcHBseShzbG90LCBjaGlsZC5jaGlsZHJlbik7XG4g
ICAgICB9IGVsc2Uge1xuICAgICAgICBzbG90LnB1c2goY2hpbGQpO1xuICAgICAgfVxuICAgIH0g
ZWxzZSB7XG4gICAgICBkZWZhdWx0U2xvdC5wdXNoKGNoaWxkKTtcbiAgICB9XG4gIH1cbiAgLy8g
aWdub3JlIHdoaXRlc3BhY2VcbiAgaWYgKCFkZWZhdWx0U2xvdC5ldmVyeShpc1doaXRlc3BhY2Up
KSB7XG4gICAgc2xvdHMuZGVmYXVsdCA9IGRlZmF1bHRTbG90O1xuICB9XG4gIHJldHVybiBzbG90
c1xufVxuXG5mdW5jdGlvbiBpc1doaXRlc3BhY2UgKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuaXND
b21tZW50IHx8IG5vZGUudGV4dCA9PT0gJyAnXG59XG5cbmZ1bmN0aW9uIHJlc29sdmVTY29wZWRT
bG90cyAoXG4gIGZucywgLy8gc2VlIGZsb3cvdm5vZGVcbiAgcmVzXG4pIHtcbiAgcmVzID0gcmVz
IHx8IHt9O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGZucy5sZW5ndGg7IGkrKykge1xuICAgIGlm
IChBcnJheS5pc0FycmF5KGZuc1tpXSkpIHtcbiAgICAgIHJlc29sdmVTY29wZWRTbG90cyhmbnNb
aV0sIHJlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc1tmbnNbaV0ua2V5XSA9IGZuc1tpXS5m
bjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG4vKiAgKi9cblxudmFyIGFjdGl2ZUlu
c3RhbmNlID0gbnVsbDtcbnZhciBpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgPSBmYWxzZTtcblxu
ZnVuY3Rpb24gaW5pdExpZmVjeWNsZSAodm0pIHtcbiAgdmFyIG9wdGlvbnMgPSB2bS4kb3B0aW9u
cztcblxuICAvLyBsb2NhdGUgZmlyc3Qgbm9uLWFic3RyYWN0IHBhcmVudFxuICB2YXIgcGFyZW50
ID0gb3B0aW9ucy5wYXJlbnQ7XG4gIGlmIChwYXJlbnQgJiYgIW9wdGlvbnMuYWJzdHJhY3QpIHtc
biAgICB3aGlsZSAocGFyZW50LiRvcHRpb25zLmFic3RyYWN0ICYmIHBhcmVudC4kcGFyZW50KSB7
XG4gICAgICBwYXJlbnQgPSBwYXJlbnQuJHBhcmVudDtcbiAgICB9XG4gICAgcGFyZW50LiRjaGls
ZHJlbi5wdXNoKHZtKTtcbiAgfVxuXG4gIHZtLiRwYXJlbnQgPSBwYXJlbnQ7XG4gIHZtLiRyb290
ID0gcGFyZW50ID8gcGFyZW50LiRyb290IDogdm07XG5cbiAgdm0uJGNoaWxkcmVuID0gW107XG4g
IHZtLiRyZWZzID0ge307XG5cbiAgdm0uX3dhdGNoZXIgPSBudWxsO1xuICB2bS5faW5hY3RpdmUg
PSBudWxsO1xuICB2bS5fZGlyZWN0SW5hY3RpdmUgPSBmYWxzZTtcbiAgdm0uX2lzTW91bnRlZCA9
IGZhbHNlO1xuICB2bS5faXNEZXN0cm95ZWQgPSBmYWxzZTtcbiAgdm0uX2lzQmVpbmdEZXN0cm95
ZWQgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbGlmZWN5Y2xlTWl4aW4gKFZ1ZSkge1xuICBWdWUu
cHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAodm5vZGUsIGh5ZHJhdGluZykge1xuICAgIHZh
ciB2bSA9IHRoaXM7XG4gICAgaWYgKHZtLl9pc01vdW50ZWQpIHtcbiAgICAgIGNhbGxIb29rKHZt
LCAnYmVmb3JlVXBkYXRlJyk7XG4gICAgfVxuICAgIHZhciBwcmV2RWwgPSB2bS4kZWw7XG4gICAg
dmFyIHByZXZWbm9kZSA9IHZtLl92bm9kZTtcbiAgICB2YXIgcHJldkFjdGl2ZUluc3RhbmNlID0g
YWN0aXZlSW5zdGFuY2U7XG4gICAgYWN0aXZlSW5zdGFuY2UgPSB2bTtcbiAgICB2bS5fdm5vZGUg
PSB2bm9kZTtcbiAgICAvLyBWdWUucHJvdG90eXBlLl9fcGF0Y2hfXyBpcyBpbmplY3RlZCBpbiBl
bnRyeSBwb2ludHNcbiAgICAvLyBiYXNlZCBvbiB0aGUgcmVuZGVyaW5nIGJhY2tlbmQgdXNlZC5c
biAgICBpZiAoIXByZXZWbm9kZSkge1xuICAgICAgLy8gaW5pdGlhbCByZW5kZXJcbiAgICAgIHZt
LiRlbCA9IHZtLl9fcGF0Y2hfXyhcbiAgICAgICAgdm0uJGVsLCB2bm9kZSwgaHlkcmF0aW5nLCBm
YWxzZSAvKiByZW1vdmVPbmx5ICovLFxuICAgICAgICB2bS4kb3B0aW9ucy5fcGFyZW50RWxtLFxu
ICAgICAgICB2bS4kb3B0aW9ucy5fcmVmRWxtXG4gICAgICApO1xuICAgICAgLy8gbm8gbmVlZCBm
b3IgdGhlIHJlZiBub2RlcyBhZnRlciBpbml0aWFsIHBhdGNoXG4gICAgICAvLyB0aGlzIHByZXZl
bnRzIGtlZXBpbmcgYSBkZXRhY2hlZCBET00gdHJlZSBpbiBtZW1vcnkgKCM1ODUxKVxuICAgICAg
dm0uJG9wdGlvbnMuX3BhcmVudEVsbSA9IHZtLiRvcHRpb25zLl9yZWZFbG0gPSBudWxsO1xuICAg
IH0gZWxzZSB7XG4gICAgICAvLyB1cGRhdGVzXG4gICAgICB2bS4kZWwgPSB2bS5fX3BhdGNoX18o
cHJldlZub2RlLCB2bm9kZSk7XG4gICAgfVxuICAgIGFjdGl2ZUluc3RhbmNlID0gcHJldkFjdGl2
ZUluc3RhbmNlO1xuICAgIC8vIHVwZGF0ZSBfX3Z1ZV9fIHJlZmVyZW5jZVxuICAgIGlmIChwcmV2
RWwpIHtcbiAgICAgIHByZXZFbC5fX3Z1ZV9fID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHZtLiRl
bCkge1xuICAgICAgdm0uJGVsLl9fdnVlX18gPSB2bTtcbiAgICB9XG4gICAgLy8gaWYgcGFyZW50
IGlzIGFuIEhPQywgdXBkYXRlIGl0cyAkZWwgYXMgd2VsbFxuICAgIGlmICh2bS4kdm5vZGUgJiYg
dm0uJHBhcmVudCAmJiB2bS4kdm5vZGUgPT09IHZtLiRwYXJlbnQuX3Zub2RlKSB7XG4gICAgICB2
bS4kcGFyZW50LiRlbCA9IHZtLiRlbDtcbiAgICB9XG4gICAgLy8gdXBkYXRlZCBob29rIGlzIGNh
bGxlZCBieSB0aGUgc2NoZWR1bGVyIHRvIGVuc3VyZSB0aGF0IGNoaWxkcmVuIGFyZVxuICAgIC8v
IHVwZGF0ZWQgaW4gYSBwYXJlbnQncyB1cGRhdGVkIGhvb2suXG4gIH07XG5cbiAgVnVlLnByb3Rv
dHlwZS4kZm9yY2VVcGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAg
ICBpZiAodm0uX3dhdGNoZXIpIHtcbiAgICAgIHZtLl93YXRjaGVyLnVwZGF0ZSgpO1xuICAgIH1c
biAgfTtcblxuICBWdWUucHJvdG90eXBlLiRkZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHZh
ciB2bSA9IHRoaXM7XG4gICAgaWYgKHZtLl9pc0JlaW5nRGVzdHJveWVkKSB7XG4gICAgICByZXR1
cm5cbiAgICB9XG4gICAgY2FsbEhvb2sodm0sICdiZWZvcmVEZXN0cm95Jyk7XG4gICAgdm0uX2lz
QmVpbmdEZXN0cm95ZWQgPSB0cnVlO1xuICAgIC8vIHJlbW92ZSBzZWxmIGZyb20gcGFyZW50XG4g
ICAgdmFyIHBhcmVudCA9IHZtLiRwYXJlbnQ7XG4gICAgaWYgKHBhcmVudCAmJiAhcGFyZW50Ll9p
c0JlaW5nRGVzdHJveWVkICYmICF2bS4kb3B0aW9ucy5hYnN0cmFjdCkge1xuICAgICAgcmVtb3Zl
KHBhcmVudC4kY2hpbGRyZW4sIHZtKTtcbiAgICB9XG4gICAgLy8gdGVhcmRvd24gd2F0Y2hlcnNc
biAgICBpZiAodm0uX3dhdGNoZXIpIHtcbiAgICAgIHZtLl93YXRjaGVyLnRlYXJkb3duKCk7XG4g
ICAgfVxuICAgIHZhciBpID0gdm0uX3dhdGNoZXJzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7
XG4gICAgICB2bS5fd2F0Y2hlcnNbaV0udGVhcmRvd24oKTtcbiAgICB9XG4gICAgLy8gcmVtb3Zl
IHJlZmVyZW5jZSBmcm9tIGRhdGEgb2JcbiAgICAvLyBmcm96ZW4gb2JqZWN0IG1heSBub3QgaGF2
ZSBvYnNlcnZlci5cbiAgICBpZiAodm0uX2RhdGEuX19vYl9fKSB7XG4gICAgICB2bS5fZGF0YS5f
X29iX18udm1Db3VudC0tO1xuICAgIH1cbiAgICAvLyBjYWxsIHRoZSBsYXN0IGhvb2suLi5cbiAg
ICB2bS5faXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgIC8vIGludm9rZSBkZXN0cm95IGhvb2tzIG9u
IGN1cnJlbnQgcmVuZGVyZWQgdHJlZVxuICAgIHZtLl9fcGF0Y2hfXyh2bS5fdm5vZGUsIG51bGwp
O1xuICAgIC8vIGZpcmUgZGVzdHJveWVkIGhvb2tcbiAgICBjYWxsSG9vayh2bSwgJ2Rlc3Ryb3ll
ZCcpO1xuICAgIC8vIHR1cm4gb2ZmIGFsbCBpbnN0YW5jZSBsaXN0ZW5lcnMuXG4gICAgdm0uJG9m
ZigpO1xuICAgIC8vIHJlbW92ZSBfX3Z1ZV9fIHJlZmVyZW5jZVxuICAgIGlmICh2bS4kZWwpIHtc
biAgICAgIHZtLiRlbC5fX3Z1ZV9fID0gbnVsbDtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9u
IG1vdW50Q29tcG9uZW50IChcbiAgdm0sXG4gIGVsLFxuICBoeWRyYXRpbmdcbikge1xuICB2bS4k
ZWwgPSBlbDtcbiAgaWYgKCF2bS4kb3B0aW9ucy5yZW5kZXIpIHtcbiAgICB2bS4kb3B0aW9ucy5y
ZW5kZXIgPSBjcmVhdGVFbXB0eVZOb2RlO1xuICAgIGlmIChmYWxzZSkge1xuICAgICAgLyogaXN0
YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoKHZtLiRvcHRpb25zLnRlbXBsYXRlICYmIHZt
LiRvcHRpb25zLnRlbXBsYXRlLmNoYXJBdCgwKSAhPT0gJyMnKSB8fFxuICAgICAgICB2bS4kb3B0
aW9ucy5lbCB8fCBlbCkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgICdZb3UgYXJlIHVzaW5n
IHRoZSBydW50aW1lLW9ubHkgYnVpbGQgb2YgVnVlIHdoZXJlIHRoZSB0ZW1wbGF0ZSAnICtcbiAg
ICAgICAgICAnY29tcGlsZXIgaXMgbm90IGF2YWlsYWJsZS4gRWl0aGVyIHByZS1jb21waWxlIHRo
ZSB0ZW1wbGF0ZXMgaW50byAnICtcbiAgICAgICAgICAncmVuZGVyIGZ1bmN0aW9ucywgb3IgdXNl
IHRoZSBjb21waWxlci1pbmNsdWRlZCBidWlsZC4nLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7
XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgICdGYWlsZWQgdG8gbW91
bnQgY29tcG9uZW50OiB0ZW1wbGF0ZSBvciByZW5kZXIgZnVuY3Rpb24gbm90IGRlZmluZWQuJyxc
biAgICAgICAgICB2bVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjYWxsSG9v
ayh2bSwgJ2JlZm9yZU1vdW50Jyk7XG5cbiAgdmFyIHVwZGF0ZUNvbXBvbmVudDtcbiAgLyogaXN0
YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChmYWxzZSkge1xuICAgIHVwZGF0ZUNvbXBvbmVudCA9
IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBuYW1lID0gdm0uX25hbWU7XG4gICAgICB2YXIgaWQg
PSB2bS5fdWlkO1xuICAgICAgdmFyIHN0YXJ0VGFnID0gXCJ2dWUtcGVyZi1zdGFydDpcIiArIGlk
O1xuICAgICAgdmFyIGVuZFRhZyA9IFwidnVlLXBlcmYtZW5kOlwiICsgaWQ7XG5cbiAgICAgIG1h
cmsoc3RhcnRUYWcpO1xuICAgICAgdmFyIHZub2RlID0gdm0uX3JlbmRlcigpO1xuICAgICAgbWFy
ayhlbmRUYWcpO1xuICAgICAgbWVhc3VyZSgobmFtZSArIFwiIHJlbmRlclwiKSwgc3RhcnRUYWcs
IGVuZFRhZyk7XG5cbiAgICAgIG1hcmsoc3RhcnRUYWcpO1xuICAgICAgdm0uX3VwZGF0ZSh2bm9k
ZSwgaHlkcmF0aW5nKTtcbiAgICAgIG1hcmsoZW5kVGFnKTtcbiAgICAgIG1lYXN1cmUoKG5hbWUg
KyBcIiBwYXRjaFwiKSwgc3RhcnRUYWcsIGVuZFRhZyk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAg
ICB1cGRhdGVDb21wb25lbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2bS5fdXBkYXRlKHZtLl9y
ZW5kZXIoKSwgaHlkcmF0aW5nKTtcbiAgICB9O1xuICB9XG5cbiAgdm0uX3dhdGNoZXIgPSBuZXcg
V2F0Y2hlcih2bSwgdXBkYXRlQ29tcG9uZW50LCBub29wKTtcbiAgaHlkcmF0aW5nID0gZmFsc2U7
XG5cbiAgLy8gbWFudWFsbHkgbW91bnRlZCBpbnN0YW5jZSwgY2FsbCBtb3VudGVkIG9uIHNlbGZc
biAgLy8gbW91bnRlZCBpcyBjYWxsZWQgZm9yIHJlbmRlci1jcmVhdGVkIGNoaWxkIGNvbXBvbmVu
dHMgaW4gaXRzIGluc2VydGVkIGhvb2tcbiAgaWYgKHZtLiR2bm9kZSA9PSBudWxsKSB7XG4gICAg
dm0uX2lzTW91bnRlZCA9IHRydWU7XG4gICAgY2FsbEhvb2sodm0sICdtb3VudGVkJyk7XG4gIH1c
biAgcmV0dXJuIHZtXG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNoaWxkQ29tcG9uZW50IChcbiAgdm0s
XG4gIHByb3BzRGF0YSxcbiAgbGlzdGVuZXJzLFxuICBwYXJlbnRWbm9kZSxcbiAgcmVuZGVyQ2hp
bGRyZW5cbikge1xuICBpZiAoZmFsc2UpIHtcbiAgICBpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQg
PSB0cnVlO1xuICB9XG5cbiAgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgY29tcG9uZW50IGhhcyBzbG90
IGNoaWxkcmVuXG4gIC8vIHdlIG5lZWQgdG8gZG8gdGhpcyBiZWZvcmUgb3ZlcndyaXRpbmcgJG9w
dGlvbnMuX3JlbmRlckNoaWxkcmVuXG4gIHZhciBoYXNDaGlsZHJlbiA9ICEhKFxuICAgIHJlbmRl
ckNoaWxkcmVuIHx8ICAgICAgICAgICAgICAgLy8gaGFzIG5ldyBzdGF0aWMgc2xvdHNcbiAgICB2
bS4kb3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4gfHwgIC8vIGhhcyBvbGQgc3RhdGljIHNsb3RzXG4g
ICAgcGFyZW50Vm5vZGUuZGF0YS5zY29wZWRTbG90cyB8fCAvLyBoYXMgbmV3IHNjb3BlZCBzbG90
c1xuICAgIHZtLiRzY29wZWRTbG90cyAhPT0gZW1wdHlPYmplY3QgLy8gaGFzIG9sZCBzY29wZWQg
c2xvdHNcbiAgKTtcblxuICB2bS4kb3B0aW9ucy5fcGFyZW50Vm5vZGUgPSBwYXJlbnRWbm9kZTtc
biAgdm0uJHZub2RlID0gcGFyZW50Vm5vZGU7IC8vIHVwZGF0ZSB2bSdzIHBsYWNlaG9sZGVyIG5v
ZGUgd2l0aG91dCByZS1yZW5kZXJcblxuICBpZiAodm0uX3Zub2RlKSB7IC8vIHVwZGF0ZSBjaGls
ZCB0cmVlJ3MgcGFyZW50XG4gICAgdm0uX3Zub2RlLnBhcmVudCA9IHBhcmVudFZub2RlO1xuICB9
XG4gIHZtLiRvcHRpb25zLl9yZW5kZXJDaGlsZHJlbiA9IHJlbmRlckNoaWxkcmVuO1xuXG4gIC8v
IHVwZGF0ZSAkYXR0cnMgYW5kICRsaXN0ZW5zZXJzIGhhc2hcbiAgLy8gdGhlc2UgYXJlIGFsc28g
cmVhY3RpdmUgc28gdGhleSBtYXkgdHJpZ2dlciBjaGlsZCB1cGRhdGUgaWYgdGhlIGNoaWxkXG4g
IC8vIHVzZWQgdGhlbSBkdXJpbmcgcmVuZGVyXG4gIHZtLiRhdHRycyA9IHBhcmVudFZub2RlLmRh
dGEgJiYgcGFyZW50Vm5vZGUuZGF0YS5hdHRycztcbiAgdm0uJGxpc3RlbmVycyA9IGxpc3RlbmVy
cztcblxuICAvLyB1cGRhdGUgcHJvcHNcbiAgaWYgKHByb3BzRGF0YSAmJiB2bS4kb3B0aW9ucy5w
cm9wcykge1xuICAgIG9ic2VydmVyU3RhdGUuc2hvdWxkQ29udmVydCA9IGZhbHNlO1xuICAgIHZh
ciBwcm9wcyA9IHZtLl9wcm9wcztcbiAgICB2YXIgcHJvcEtleXMgPSB2bS4kb3B0aW9ucy5fcHJv
cEtleXMgfHwgW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wS2V5cy5sZW5ndGg7IGkr
Kykge1xuICAgICAgdmFyIGtleSA9IHByb3BLZXlzW2ldO1xuICAgICAgcHJvcHNba2V5XSA9IHZh
bGlkYXRlUHJvcChrZXksIHZtLiRvcHRpb25zLnByb3BzLCBwcm9wc0RhdGEsIHZtKTtcbiAgICB9
XG4gICAgb2JzZXJ2ZXJTdGF0ZS5zaG91bGRDb252ZXJ0ID0gdHJ1ZTtcbiAgICAvLyBrZWVwIGEg
Y29weSBvZiByYXcgcHJvcHNEYXRhXG4gICAgdm0uJG9wdGlvbnMucHJvcHNEYXRhID0gcHJvcHNE
YXRhO1xuICB9XG5cbiAgLy8gdXBkYXRlIGxpc3RlbmVyc1xuICBpZiAobGlzdGVuZXJzKSB7XG4g
ICAgdmFyIG9sZExpc3RlbmVycyA9IHZtLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnM7XG4gICAg
dm0uJG9wdGlvbnMuX3BhcmVudExpc3RlbmVycyA9IGxpc3RlbmVycztcbiAgICB1cGRhdGVDb21w
b25lbnRMaXN0ZW5lcnModm0sIGxpc3RlbmVycywgb2xkTGlzdGVuZXJzKTtcbiAgfVxuICAvLyBy
ZXNvbHZlIHNsb3RzICsgZm9yY2UgdXBkYXRlIGlmIGhhcyBjaGlsZHJlblxuICBpZiAoaGFzQ2hp
bGRyZW4pIHtcbiAgICB2bS4kc2xvdHMgPSByZXNvbHZlU2xvdHMocmVuZGVyQ2hpbGRyZW4sIHBh
cmVudFZub2RlLmNvbnRleHQpO1xuICAgIHZtLiRmb3JjZVVwZGF0ZSgpO1xuICB9XG5cbiAgaWYg
KGZhbHNlKSB7XG4gICAgaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50ID0gZmFsc2U7XG4gIH1cbn1c
blxuZnVuY3Rpb24gaXNJbkluYWN0aXZlVHJlZSAodm0pIHtcbiAgd2hpbGUgKHZtICYmICh2bSA9
IHZtLiRwYXJlbnQpKSB7XG4gICAgaWYgKHZtLl9pbmFjdGl2ZSkgeyByZXR1cm4gdHJ1ZSB9XG4g
IH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIGFjdGl2YXRlQ2hpbGRDb21wb25lbnQg
KHZtLCBkaXJlY3QpIHtcbiAgaWYgKGRpcmVjdCkge1xuICAgIHZtLl9kaXJlY3RJbmFjdGl2ZSA9
IGZhbHNlO1xuICAgIGlmIChpc0luSW5hY3RpdmVUcmVlKHZtKSkge1xuICAgICAgcmV0dXJuXG4g
ICAgfVxuICB9IGVsc2UgaWYgKHZtLl9kaXJlY3RJbmFjdGl2ZSkge1xuICAgIHJldHVyblxuICB9
XG4gIGlmICh2bS5faW5hY3RpdmUgfHwgdm0uX2luYWN0aXZlID09PSBudWxsKSB7XG4gICAgdm0u
X2luYWN0aXZlID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2bS4kY2hpbGRyZW4u
bGVuZ3RoOyBpKyspIHtcbiAgICAgIGFjdGl2YXRlQ2hpbGRDb21wb25lbnQodm0uJGNoaWxkcmVu
W2ldKTtcbiAgICB9XG4gICAgY2FsbEhvb2sodm0sICdhY3RpdmF0ZWQnKTtcbiAgfVxufVxuXG5m
dW5jdGlvbiBkZWFjdGl2YXRlQ2hpbGRDb21wb25lbnQgKHZtLCBkaXJlY3QpIHtcbiAgaWYgKGRp
cmVjdCkge1xuICAgIHZtLl9kaXJlY3RJbmFjdGl2ZSA9IHRydWU7XG4gICAgaWYgKGlzSW5JbmFj
dGl2ZVRyZWUodm0pKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gIH1cbiAgaWYgKCF2bS5faW5h
Y3RpdmUpIHtcbiAgICB2bS5faW5hY3RpdmUgPSB0cnVlO1xuICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgdm0uJGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkZWFjdGl2YXRlQ2hpbGRDb21w
b25lbnQodm0uJGNoaWxkcmVuW2ldKTtcbiAgICB9XG4gICAgY2FsbEhvb2sodm0sICdkZWFjdGl2
YXRlZCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbGxIb29rICh2bSwgaG9vaykge1xuICB2YXIg
aGFuZGxlcnMgPSB2bS4kb3B0aW9uc1tob29rXTtcbiAgaWYgKGhhbmRsZXJzKSB7XG4gICAgZm9y
ICh2YXIgaSA9IDAsIGogPSBoYW5kbGVycy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgIHRy
eSB7XG4gICAgICAgIGhhbmRsZXJzW2ldLmNhbGwodm0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xu
ICAgICAgICBoYW5kbGVFcnJvcihlLCB2bSwgKGhvb2sgKyBcIiBob29rXCIpKTtcbiAgICAgIH1c
biAgICB9XG4gIH1cbiAgaWYgKHZtLl9oYXNIb29rRXZlbnQpIHtcbiAgICB2bS4kZW1pdCgnaG9v
azonICsgaG9vayk7XG4gIH1cbn1cblxuLyogICovXG5cblxudmFyIE1BWF9VUERBVEVfQ09VTlQg
PSAxMDA7XG5cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGFjdGl2YXRlZENoaWxkcmVuID0gW107XG52
YXIgaGFzID0ge307XG52YXIgY2lyY3VsYXIgPSB7fTtcbnZhciB3YWl0aW5nID0gZmFsc2U7XG52
YXIgZmx1c2hpbmcgPSBmYWxzZTtcbnZhciBpbmRleCA9IDA7XG5cbi8qKlxuICogUmVzZXQgdGhl
IHNjaGVkdWxlcidzIHN0YXRlLlxuICovXG5mdW5jdGlvbiByZXNldFNjaGVkdWxlclN0YXRlICgp
IHtcbiAgaW5kZXggPSBxdWV1ZS5sZW5ndGggPSBhY3RpdmF0ZWRDaGlsZHJlbi5sZW5ndGggPSAw
O1xuICBoYXMgPSB7fTtcbiAgaWYgKGZhbHNlKSB7XG4gICAgY2lyY3VsYXIgPSB7fTtcbiAgfVxu
ICB3YWl0aW5nID0gZmx1c2hpbmcgPSBmYWxzZTtcbn1cblxuLyoqXG4gKiBGbHVzaCBib3RoIHF1
ZXVlcyBhbmQgcnVuIHRoZSB3YXRjaGVycy5cbiAqL1xuZnVuY3Rpb24gZmx1c2hTY2hlZHVsZXJR
dWV1ZSAoKSB7XG4gIGZsdXNoaW5nID0gdHJ1ZTtcbiAgdmFyIHdhdGNoZXIsIGlkO1xuXG4gIC8v
IFNvcnQgcXVldWUgYmVmb3JlIGZsdXNoLlxuICAvLyBUaGlzIGVuc3VyZXMgdGhhdDpcbiAgLy8g
MS4gQ29tcG9uZW50cyBhcmUgdXBkYXRlZCBmcm9tIHBhcmVudCB0byBjaGlsZC4gKGJlY2F1c2Ug
cGFyZW50IGlzIGFsd2F5c1xuICAvLyAgICBjcmVhdGVkIGJlZm9yZSB0aGUgY2hpbGQpXG4gIC8v
IDIuIEEgY29tcG9uZW50J3MgdXNlciB3YXRjaGVycyBhcmUgcnVuIGJlZm9yZSBpdHMgcmVuZGVy
IHdhdGNoZXIgKGJlY2F1c2VcbiAgLy8gICAgdXNlciB3YXRjaGVycyBhcmUgY3JlYXRlZCBiZWZv
cmUgdGhlIHJlbmRlciB3YXRjaGVyKVxuICAvLyAzLiBJZiBhIGNvbXBvbmVudCBpcyBkZXN0cm95
ZWQgZHVyaW5nIGEgcGFyZW50IGNvbXBvbmVudCdzIHdhdGNoZXIgcnVuLFxuICAvLyAgICBpdHMg
d2F0Y2hlcnMgY2FuIGJlIHNraXBwZWQuXG4gIHF1ZXVlLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsg
cmV0dXJuIGEuaWQgLSBiLmlkOyB9KTtcblxuICAvLyBkbyBub3QgY2FjaGUgbGVuZ3RoIGJlY2F1
c2UgbW9yZSB3YXRjaGVycyBtaWdodCBiZSBwdXNoZWRcbiAgLy8gYXMgd2UgcnVuIGV4aXN0aW5n
IHdhdGNoZXJzXG4gIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHF1ZXVlLmxlbmd0aDsgaW5kZXgr
Kykge1xuICAgIHdhdGNoZXIgPSBxdWV1ZVtpbmRleF07XG4gICAgaWQgPSB3YXRjaGVyLmlkO1xu
ICAgIGhhc1tpZF0gPSBudWxsO1xuICAgIHdhdGNoZXIucnVuKCk7XG4gICAgLy8gaW4gZGV2IGJ1
aWxkLCBjaGVjayBhbmQgc3RvcCBjaXJjdWxhciB1cGRhdGVzLlxuICAgIGlmIChmYWxzZSkge1xu
ICAgICAgY2lyY3VsYXJbaWRdID0gKGNpcmN1bGFyW2lkXSB8fCAwKSArIDE7XG4gICAgICBpZiAo
Y2lyY3VsYXJbaWRdID4gTUFYX1VQREFURV9DT1VOVCkge1xuICAgICAgICB3YXJuKFxuICAgICAg
ICAgICdZb3UgbWF5IGhhdmUgYW4gaW5maW5pdGUgdXBkYXRlIGxvb3AgJyArIChcbiAgICAgICAg
ICAgIHdhdGNoZXIudXNlclxuICAgICAgICAgICAgICA/IChcImluIHdhdGNoZXIgd2l0aCBleHBy
ZXNzaW9uIFxcXCJcIiArICh3YXRjaGVyLmV4cHJlc3Npb24pICsgXCJcXFwiXCIpXG4gICAgICAg
ICAgICAgIDogXCJpbiBhIGNvbXBvbmVudCByZW5kZXIgZnVuY3Rpb24uXCJcbiAgICAgICAgICAp
LFxuICAgICAgICAgIHdhdGNoZXIudm1cbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWtcbiAgICAg
IH1cbiAgICB9XG4gIH1cblxuICAvLyBrZWVwIGNvcGllcyBvZiBwb3N0IHF1ZXVlcyBiZWZvcmUg
cmVzZXR0aW5nIHN0YXRlXG4gIHZhciBhY3RpdmF0ZWRRdWV1ZSA9IGFjdGl2YXRlZENoaWxkcmVu
LnNsaWNlKCk7XG4gIHZhciB1cGRhdGVkUXVldWUgPSBxdWV1ZS5zbGljZSgpO1xuXG4gIHJlc2V0
U2NoZWR1bGVyU3RhdGUoKTtcblxuICAvLyBjYWxsIGNvbXBvbmVudCB1cGRhdGVkIGFuZCBhY3Rp
dmF0ZWQgaG9va3NcbiAgY2FsbEFjdGl2YXRlZEhvb2tzKGFjdGl2YXRlZFF1ZXVlKTtcbiAgY2Fs
bFVwZGF0ZWRIb29rcyh1cGRhdGVkUXVldWUpO1xuXG4gIC8vIGRldnRvb2wgaG9va1xuICAvKiBp
c3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGRldnRvb2xzICYmIGNvbmZpZy5kZXZ0b29scykg
e1xuICAgIGRldnRvb2xzLmVtaXQoJ2ZsdXNoJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FsbFVw
ZGF0ZWRIb29rcyAocXVldWUpIHtcbiAgdmFyIGkgPSBxdWV1ZS5sZW5ndGg7XG4gIHdoaWxlIChp
LS0pIHtcbiAgICB2YXIgd2F0Y2hlciA9IHF1ZXVlW2ldO1xuICAgIHZhciB2bSA9IHdhdGNoZXIu
dm07XG4gICAgaWYgKHZtLl93YXRjaGVyID09PSB3YXRjaGVyICYmIHZtLl9pc01vdW50ZWQpIHtc
biAgICAgIGNhbGxIb29rKHZtLCAndXBkYXRlZCcpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAq
IFF1ZXVlIGEga2VwdC1hbGl2ZSBjb21wb25lbnQgdGhhdCB3YXMgYWN0aXZhdGVkIGR1cmluZyBw
YXRjaC5cbiAqIFRoZSBxdWV1ZSB3aWxsIGJlIHByb2Nlc3NlZCBhZnRlciB0aGUgZW50aXJlIHRy
ZWUgaGFzIGJlZW4gcGF0Y2hlZC5cbiAqL1xuZnVuY3Rpb24gcXVldWVBY3RpdmF0ZWRDb21wb25l
bnQgKHZtKSB7XG4gIC8vIHNldHRpbmcgX2luYWN0aXZlIHRvIGZhbHNlIGhlcmUgc28gdGhhdCBh
IHJlbmRlciBmdW5jdGlvbiBjYW5cbiAgLy8gcmVseSBvbiBjaGVja2luZyB3aGV0aGVyIGl0J3Mg
aW4gYW4gaW5hY3RpdmUgdHJlZSAoZS5nLiByb3V0ZXItdmlldylcbiAgdm0uX2luYWN0aXZlID0g
ZmFsc2U7XG4gIGFjdGl2YXRlZENoaWxkcmVuLnB1c2godm0pO1xufVxuXG5mdW5jdGlvbiBjYWxs
QWN0aXZhdGVkSG9va3MgKHF1ZXVlKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcXVldWUubGVu
Z3RoOyBpKyspIHtcbiAgICBxdWV1ZVtpXS5faW5hY3RpdmUgPSB0cnVlO1xuICAgIGFjdGl2YXRl
Q2hpbGRDb21wb25lbnQocXVldWVbaV0sIHRydWUgLyogdHJ1ZSAqLyk7XG4gIH1cbn1cblxuLyoq
XG4gKiBQdXNoIGEgd2F0Y2hlciBpbnRvIHRoZSB3YXRjaGVyIHF1ZXVlLlxuICogSm9icyB3aXRo
IGR1cGxpY2F0ZSBJRHMgd2lsbCBiZSBza2lwcGVkIHVubGVzcyBpdCdzXG4gKiBwdXNoZWQgd2hl
biB0aGUgcXVldWUgaXMgYmVpbmcgZmx1c2hlZC5cbiAqL1xuZnVuY3Rpb24gcXVldWVXYXRjaGVy
ICh3YXRjaGVyKSB7XG4gIHZhciBpZCA9IHdhdGNoZXIuaWQ7XG4gIGlmIChoYXNbaWRdID09IG51
bGwpIHtcbiAgICBoYXNbaWRdID0gdHJ1ZTtcbiAgICBpZiAoIWZsdXNoaW5nKSB7XG4gICAgICBx
dWV1ZS5wdXNoKHdhdGNoZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiBhbHJlYWR5IGZs
dXNoaW5nLCBzcGxpY2UgdGhlIHdhdGNoZXIgYmFzZWQgb24gaXRzIGlkXG4gICAgICAvLyBpZiBh
bHJlYWR5IHBhc3QgaXRzIGlkLCBpdCB3aWxsIGJlIHJ1biBuZXh0IGltbWVkaWF0ZWx5LlxuICAg
ICAgdmFyIGkgPSBxdWV1ZS5sZW5ndGggLSAxO1xuICAgICAgd2hpbGUgKGkgPiBpbmRleCAmJiBx
dWV1ZVtpXS5pZCA+IHdhdGNoZXIuaWQpIHtcbiAgICAgICAgaS0tO1xuICAgICAgfVxuICAgICAg
cXVldWUuc3BsaWNlKGkgKyAxLCAwLCB3YXRjaGVyKTtcbiAgICB9XG4gICAgLy8gcXVldWUgdGhl
IGZsdXNoXG4gICAgaWYgKCF3YWl0aW5nKSB7XG4gICAgICB3YWl0aW5nID0gdHJ1ZTtcbiAgICAg
IG5leHRUaWNrKGZsdXNoU2NoZWR1bGVyUXVldWUpO1xuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9c
blxudmFyIHVpZCQyID0gMDtcblxuLyoqXG4gKiBBIHdhdGNoZXIgcGFyc2VzIGFuIGV4cHJlc3Np
b24sIGNvbGxlY3RzIGRlcGVuZGVuY2llcyxcbiAqIGFuZCBmaXJlcyBjYWxsYmFjayB3aGVuIHRo
ZSBleHByZXNzaW9uIHZhbHVlIGNoYW5nZXMuXG4gKiBUaGlzIGlzIHVzZWQgZm9yIGJvdGggdGhl
ICR3YXRjaCgpIGFwaSBhbmQgZGlyZWN0aXZlcy5cbiAqL1xudmFyIFdhdGNoZXIgPSBmdW5jdGlv
biBXYXRjaGVyIChcbiAgdm0sXG4gIGV4cE9yRm4sXG4gIGNiLFxuICBvcHRpb25zXG4pIHtcbiAg
dGhpcy52bSA9IHZtO1xuICB2bS5fd2F0Y2hlcnMucHVzaCh0aGlzKTtcbiAgLy8gb3B0aW9uc1xu
ICBpZiAob3B0aW9ucykge1xuICAgIHRoaXMuZGVlcCA9ICEhb3B0aW9ucy5kZWVwO1xuICAgIHRo
aXMudXNlciA9ICEhb3B0aW9ucy51c2VyO1xuICAgIHRoaXMubGF6eSA9ICEhb3B0aW9ucy5sYXp5
O1xuICAgIHRoaXMuc3luYyA9ICEhb3B0aW9ucy5zeW5jO1xuICB9IGVsc2Uge1xuICAgIHRoaXMu
ZGVlcCA9IHRoaXMudXNlciA9IHRoaXMubGF6eSA9IHRoaXMuc3luYyA9IGZhbHNlO1xuICB9XG4g
IHRoaXMuY2IgPSBjYjtcbiAgdGhpcy5pZCA9ICsrdWlkJDI7IC8vIHVpZCBmb3IgYmF0Y2hpbmdc
biAgdGhpcy5hY3RpdmUgPSB0cnVlO1xuICB0aGlzLmRpcnR5ID0gdGhpcy5sYXp5OyAvLyBmb3Ig
bGF6eSB3YXRjaGVyc1xuICB0aGlzLmRlcHMgPSBbXTtcbiAgdGhpcy5uZXdEZXBzID0gW107XG4g
IHRoaXMuZGVwSWRzID0gbmV3IF9TZXQoKTtcbiAgdGhpcy5uZXdEZXBJZHMgPSBuZXcgX1NldCgp
O1xuICB0aGlzLmV4cHJlc3Npb24gPSAgZmFsc2VcbiAgICA/IGV4cE9yRm4udG9TdHJpbmcoKVxu
ICAgIDogJyc7XG4gIC8vIHBhcnNlIGV4cHJlc3Npb24gZm9yIGdldHRlclxuICBpZiAodHlwZW9m
IGV4cE9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICB0aGlzLmdldHRlciA9IGV4cE9yRm47XG4g
IH0gZWxzZSB7XG4gICAgdGhpcy5nZXR0ZXIgPSBwYXJzZVBhdGgoZXhwT3JGbik7XG4gICAgaWYg
KCF0aGlzLmdldHRlcikge1xuICAgICAgdGhpcy5nZXR0ZXIgPSBmdW5jdGlvbiAoKSB7fTtcbiAg
ICAgIFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICAgXCJG
YWlsZWQgd2F0Y2hpbmcgcGF0aDogXFxcIlwiICsgZXhwT3JGbiArIFwiXFxcIiBcIiArXG4gICAg
ICAgICdXYXRjaGVyIG9ubHkgYWNjZXB0cyBzaW1wbGUgZG90LWRlbGltaXRlZCBwYXRocy4gJyAr
XG4gICAgICAgICdGb3IgZnVsbCBjb250cm9sLCB1c2UgYSBmdW5jdGlvbiBpbnN0ZWFkLicsXG4g
ICAgICAgIHZtXG4gICAgICApO1xuICAgIH1cbiAgfVxuICB0aGlzLnZhbHVlID0gdGhpcy5sYXp5
XG4gICAgPyB1bmRlZmluZWRcbiAgICA6IHRoaXMuZ2V0KCk7XG59O1xuXG4vKipcbiAqIEV2YWx1
YXRlIHRoZSBnZXR0ZXIsIGFuZCByZS1jb2xsZWN0IGRlcGVuZGVuY2llcy5cbiAqL1xuV2F0Y2hl
ci5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gZ2V0ICgpIHtcbiAgcHVzaFRhcmdldCh0aGlzKTtc
biAgdmFyIHZhbHVlO1xuICB2YXIgdm0gPSB0aGlzLnZtO1xuICB0cnkge1xuICAgIHZhbHVlID0g
dGhpcy5nZXR0ZXIuY2FsbCh2bSwgdm0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKHRoaXMu
dXNlcikge1xuICAgICAgaGFuZGxlRXJyb3IoZSwgdm0sIChcImdldHRlciBmb3Igd2F0Y2hlciBc
XFwiXCIgKyAodGhpcy5leHByZXNzaW9uKSArIFwiXFxcIlwiKSk7XG4gICAgfSBlbHNlIHtcbiAg
ICAgIHRocm93IGVcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgLy8gXCJ0b3VjaFwiIGV2ZXJ5
IHByb3BlcnR5IHNvIHRoZXkgYXJlIGFsbCB0cmFja2VkIGFzXG4gICAgLy8gZGVwZW5kZW5jaWVz
IGZvciBkZWVwIHdhdGNoaW5nXG4gICAgaWYgKHRoaXMuZGVlcCkge1xuICAgICAgdHJhdmVyc2Uo
dmFsdWUpO1xuICAgIH1cbiAgICBwb3BUYXJnZXQoKTtcbiAgICB0aGlzLmNsZWFudXBEZXBzKCk7
XG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59O1xuXG4vKipcbiAqIEFkZCBhIGRlcGVuZGVuY3kgdG8g
dGhpcyBkaXJlY3RpdmUuXG4gKi9cbldhdGNoZXIucHJvdG90eXBlLmFkZERlcCA9IGZ1bmN0aW9u
IGFkZERlcCAoZGVwKSB7XG4gIHZhciBpZCA9IGRlcC5pZDtcbiAgaWYgKCF0aGlzLm5ld0RlcElk
cy5oYXMoaWQpKSB7XG4gICAgdGhpcy5uZXdEZXBJZHMuYWRkKGlkKTtcbiAgICB0aGlzLm5ld0Rl
cHMucHVzaChkZXApO1xuICAgIGlmICghdGhpcy5kZXBJZHMuaGFzKGlkKSkge1xuICAgICAgZGVw
LmFkZFN1Yih0aGlzKTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogQ2xlYW4gdXAgZm9yIGRl
cGVuZGVuY3kgY29sbGVjdGlvbi5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUuY2xlYW51cERlcHMg
PSBmdW5jdGlvbiBjbGVhbnVwRGVwcyAoKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAg
dmFyIGkgPSB0aGlzLmRlcHMubGVuZ3RoO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgdmFyIGRlcCA9
IHRoaXMkMS5kZXBzW2ldO1xuICAgIGlmICghdGhpcyQxLm5ld0RlcElkcy5oYXMoZGVwLmlkKSkg
e1xuICAgICAgZGVwLnJlbW92ZVN1Yih0aGlzJDEpO1xuICAgIH1cbiAgfVxuICB2YXIgdG1wID0g
dGhpcy5kZXBJZHM7XG4gIHRoaXMuZGVwSWRzID0gdGhpcy5uZXdEZXBJZHM7XG4gIHRoaXMubmV3
RGVwSWRzID0gdG1wO1xuICB0aGlzLm5ld0RlcElkcy5jbGVhcigpO1xuICB0bXAgPSB0aGlzLmRl
cHM7XG4gIHRoaXMuZGVwcyA9IHRoaXMubmV3RGVwcztcbiAgdGhpcy5uZXdEZXBzID0gdG1wO1xu
ICB0aGlzLm5ld0RlcHMubGVuZ3RoID0gMDtcbn07XG5cbi8qKlxuICogU3Vic2NyaWJlciBpbnRl
cmZhY2UuXG4gKiBXaWxsIGJlIGNhbGxlZCB3aGVuIGEgZGVwZW5kZW5jeSBjaGFuZ2VzLlxuICov
XG5XYXRjaGVyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUgKCkge1xuICAvKiBp
c3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAodGhpcy5sYXp5KSB7XG4gICAgdGhpcy5kaXJ0
eSA9IHRydWU7XG4gIH0gZWxzZSBpZiAodGhpcy5zeW5jKSB7XG4gICAgdGhpcy5ydW4oKTtcbiAg
fSBlbHNlIHtcbiAgICBxdWV1ZVdhdGNoZXIodGhpcyk7XG4gIH1cbn07XG5cbi8qKlxuICogU2No
ZWR1bGVyIGpvYiBpbnRlcmZhY2UuXG4gKiBXaWxsIGJlIGNhbGxlZCBieSB0aGUgc2NoZWR1bGVy
LlxuICovXG5XYXRjaGVyLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiBydW4gKCkge1xuICBpZiAo
dGhpcy5hY3RpdmUpIHtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLmdldCgpO1xuICAgIGlmIChcbiAg
ICAgIHZhbHVlICE9PSB0aGlzLnZhbHVlIHx8XG4gICAgICAvLyBEZWVwIHdhdGNoZXJzIGFuZCB3
YXRjaGVycyBvbiBPYmplY3QvQXJyYXlzIHNob3VsZCBmaXJlIGV2ZW5cbiAgICAgIC8vIHdoZW4g
dGhlIHZhbHVlIGlzIHRoZSBzYW1lLCBiZWNhdXNlIHRoZSB2YWx1ZSBtYXlcbiAgICAgIC8vIGhh
dmUgbXV0YXRlZC5cbiAgICAgIGlzT2JqZWN0KHZhbHVlKSB8fFxuICAgICAgdGhpcy5kZWVwXG4g
ICAgKSB7XG4gICAgICAvLyBzZXQgbmV3IHZhbHVlXG4gICAgICB2YXIgb2xkVmFsdWUgPSB0aGlz
LnZhbHVlO1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgaWYgKHRoaXMudXNlcikg
e1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMuY2IuY2FsbCh0aGlzLnZtLCB2YWx1ZSwg
b2xkVmFsdWUpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaGFuZGxlRXJyb3Io
ZSwgdGhpcy52bSwgKFwiY2FsbGJhY2sgZm9yIHdhdGNoZXIgXFxcIlwiICsgKHRoaXMuZXhwcmVz
c2lvbikgKyBcIlxcXCJcIikpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0
aGlzLmNiLmNhbGwodGhpcy52bSwgdmFsdWUsIG9sZFZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4g
IH1cbn07XG5cbi8qKlxuICogRXZhbHVhdGUgdGhlIHZhbHVlIG9mIHRoZSB3YXRjaGVyLlxuICog
VGhpcyBvbmx5IGdldHMgY2FsbGVkIGZvciBsYXp5IHdhdGNoZXJzLlxuICovXG5XYXRjaGVyLnBy
b3RvdHlwZS5ldmFsdWF0ZSA9IGZ1bmN0aW9uIGV2YWx1YXRlICgpIHtcbiAgdGhpcy52YWx1ZSA9
IHRoaXMuZ2V0KCk7XG4gIHRoaXMuZGlydHkgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogRGVwZW5k
IG9uIGFsbCBkZXBzIGNvbGxlY3RlZCBieSB0aGlzIHdhdGNoZXIuXG4gKi9cbldhdGNoZXIucHJv
dG90eXBlLmRlcGVuZCA9IGZ1bmN0aW9uIGRlcGVuZCAoKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRo
aXM7XG5cbiAgdmFyIGkgPSB0aGlzLmRlcHMubGVuZ3RoO1xuICB3aGlsZSAoaS0tKSB7XG4gICAg
dGhpcyQxLmRlcHNbaV0uZGVwZW5kKCk7XG4gIH1cbn07XG5cbi8qKlxuICogUmVtb3ZlIHNlbGYg
ZnJvbSBhbGwgZGVwZW5kZW5jaWVzJyBzdWJzY3JpYmVyIGxpc3QuXG4gKi9cbldhdGNoZXIucHJv
dG90eXBlLnRlYXJkb3duID0gZnVuY3Rpb24gdGVhcmRvd24gKCkge1xuICAgIHZhciB0aGlzJDEg
PSB0aGlzO1xuXG4gIGlmICh0aGlzLmFjdGl2ZSkge1xuICAgIC8vIHJlbW92ZSBzZWxmIGZyb20g
dm0ncyB3YXRjaGVyIGxpc3RcbiAgICAvLyB0aGlzIGlzIGEgc29tZXdoYXQgZXhwZW5zaXZlIG9w
ZXJhdGlvbiBzbyB3ZSBza2lwIGl0XG4gICAgLy8gaWYgdGhlIHZtIGlzIGJlaW5nIGRlc3Ryb3ll
ZC5cbiAgICBpZiAoIXRoaXMudm0uX2lzQmVpbmdEZXN0cm95ZWQpIHtcbiAgICAgIHJlbW92ZSh0
aGlzLnZtLl93YXRjaGVycywgdGhpcyk7XG4gICAgfVxuICAgIHZhciBpID0gdGhpcy5kZXBzLmxl
bmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICB0aGlzJDEuZGVwc1tpXS5yZW1vdmVTdWIo
dGhpcyQxKTtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgfVxufTtcblxuLyoq
XG4gKiBSZWN1cnNpdmVseSB0cmF2ZXJzZSBhbiBvYmplY3QgdG8gZXZva2UgYWxsIGNvbnZlcnRl
ZFxuICogZ2V0dGVycywgc28gdGhhdCBldmVyeSBuZXN0ZWQgcHJvcGVydHkgaW5zaWRlIHRoZSBv
YmplY3RcbiAqIGlzIGNvbGxlY3RlZCBhcyBhIFwiZGVlcFwiIGRlcGVuZGVuY3kuXG4gKi9cbnZh
ciBzZWVuT2JqZWN0cyA9IG5ldyBfU2V0KCk7XG5mdW5jdGlvbiB0cmF2ZXJzZSAodmFsKSB7XG4g
IHNlZW5PYmplY3RzLmNsZWFyKCk7XG4gIF90cmF2ZXJzZSh2YWwsIHNlZW5PYmplY3RzKTtcbn1c
blxuZnVuY3Rpb24gX3RyYXZlcnNlICh2YWwsIHNlZW4pIHtcbiAgdmFyIGksIGtleXM7XG4gIHZh
ciBpc0EgPSBBcnJheS5pc0FycmF5KHZhbCk7XG4gIGlmICgoIWlzQSAmJiAhaXNPYmplY3QodmFs
KSkgfHwgIU9iamVjdC5pc0V4dGVuc2libGUodmFsKSkge1xuICAgIHJldHVyblxuICB9XG4gIGlm
ICh2YWwuX19vYl9fKSB7XG4gICAgdmFyIGRlcElkID0gdmFsLl9fb2JfXy5kZXAuaWQ7XG4gICAg
aWYgKHNlZW4uaGFzKGRlcElkKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHNlZW4uYWRk
KGRlcElkKTtcbiAgfVxuICBpZiAoaXNBKSB7XG4gICAgaSA9IHZhbC5sZW5ndGg7XG4gICAgd2hp
bGUgKGktLSkgeyBfdHJhdmVyc2UodmFsW2ldLCBzZWVuKTsgfVxuICB9IGVsc2Uge1xuICAgIGtl
eXMgPSBPYmplY3Qua2V5cyh2YWwpO1xuICAgIGkgPSBrZXlzLmxlbmd0aDtcbiAgICB3aGlsZSAo
aS0tKSB7IF90cmF2ZXJzZSh2YWxba2V5c1tpXV0sIHNlZW4pOyB9XG4gIH1cbn1cblxuLyogICov
XG5cbnZhciBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24gPSB7XG4gIGVudW1lcmFibGU6IHRydWUs
XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBub29wLFxuICBzZXQ6IG5vb3Bcbn07XG5c
bmZ1bmN0aW9uIHByb3h5ICh0YXJnZXQsIHNvdXJjZUtleSwga2V5KSB7XG4gIHNoYXJlZFByb3Bl
cnR5RGVmaW5pdGlvbi5nZXQgPSBmdW5jdGlvbiBwcm94eUdldHRlciAoKSB7XG4gICAgcmV0dXJu
IHRoaXNbc291cmNlS2V5XVtrZXldXG4gIH07XG4gIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5z
ZXQgPSBmdW5jdGlvbiBwcm94eVNldHRlciAodmFsKSB7XG4gICAgdGhpc1tzb3VyY2VLZXldW2tl
eV0gPSB2YWw7XG4gIH07XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc2hh
cmVkUHJvcGVydHlEZWZpbml0aW9uKTtcbn1cblxuZnVuY3Rpb24gaW5pdFN0YXRlICh2bSkge1xu
ICB2bS5fd2F0Y2hlcnMgPSBbXTtcbiAgdmFyIG9wdHMgPSB2bS4kb3B0aW9ucztcbiAgaWYgKG9w
dHMucHJvcHMpIHsgaW5pdFByb3BzKHZtLCBvcHRzLnByb3BzKTsgfVxuICBpZiAob3B0cy5tZXRo
b2RzKSB7IGluaXRNZXRob2RzKHZtLCBvcHRzLm1ldGhvZHMpOyB9XG4gIGlmIChvcHRzLmRhdGEp
IHtcbiAgICBpbml0RGF0YSh2bSk7XG4gIH0gZWxzZSB7XG4gICAgb2JzZXJ2ZSh2bS5fZGF0YSA9
IHt9LCB0cnVlIC8qIGFzUm9vdERhdGEgKi8pO1xuICB9XG4gIGlmIChvcHRzLmNvbXB1dGVkKSB7
IGluaXRDb21wdXRlZCh2bSwgb3B0cy5jb21wdXRlZCk7IH1cbiAgaWYgKG9wdHMud2F0Y2ggJiYg
b3B0cy53YXRjaCAhPT0gbmF0aXZlV2F0Y2gpIHtcbiAgICBpbml0V2F0Y2godm0sIG9wdHMud2F0
Y2gpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrT3B0aW9uVHlwZSAodm0sIG5hbWUpIHtcbiAg
dmFyIG9wdGlvbiA9IHZtLiRvcHRpb25zW25hbWVdO1xuICBpZiAoIWlzUGxhaW5PYmplY3Qob3B0
aW9uKSkge1xuICAgIHdhcm4oXG4gICAgICAoXCJjb21wb25lbnQgb3B0aW9uIFxcXCJcIiArIG5h
bWUgKyBcIlxcXCIgc2hvdWxkIGJlIGFuIG9iamVjdC5cIiksXG4gICAgICB2bVxuICAgICk7XG4g
IH1cbn1cblxuZnVuY3Rpb24gaW5pdFByb3BzICh2bSwgcHJvcHNPcHRpb25zKSB7XG4gIHZhciBw
cm9wc0RhdGEgPSB2bS4kb3B0aW9ucy5wcm9wc0RhdGEgfHwge307XG4gIHZhciBwcm9wcyA9IHZt
Ll9wcm9wcyA9IHt9O1xuICAvLyBjYWNoZSBwcm9wIGtleXMgc28gdGhhdCBmdXR1cmUgcHJvcHMg
dXBkYXRlcyBjYW4gaXRlcmF0ZSB1c2luZyBBcnJheVxuICAvLyBpbnN0ZWFkIG9mIGR5bmFtaWMg
b2JqZWN0IGtleSBlbnVtZXJhdGlvbi5cbiAgdmFyIGtleXMgPSB2bS4kb3B0aW9ucy5fcHJvcEtl
eXMgPSBbXTtcbiAgdmFyIGlzUm9vdCA9ICF2bS4kcGFyZW50O1xuICAvLyByb290IGluc3RhbmNl
IHByb3BzIHNob3VsZCBiZSBjb252ZXJ0ZWRcbiAgb2JzZXJ2ZXJTdGF0ZS5zaG91bGRDb252ZXJ0
ID0gaXNSb290O1xuICB2YXIgbG9vcCA9IGZ1bmN0aW9uICgga2V5ICkge1xuICAgIGtleXMucHVz
aChrZXkpO1xuICAgIHZhciB2YWx1ZSA9IHZhbGlkYXRlUHJvcChrZXksIHByb3BzT3B0aW9ucywg
cHJvcHNEYXRhLCB2bSk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAo
ZmFsc2UpIHtcbiAgICAgIGlmIChpc1Jlc2VydmVkQXR0cmlidXRlKGtleSkgfHwgY29uZmlnLmlz
UmVzZXJ2ZWRBdHRyKGtleSkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAoXCJcXFwiXCIg
KyBrZXkgKyBcIlxcXCIgaXMgYSByZXNlcnZlZCBhdHRyaWJ1dGUgYW5kIGNhbm5vdCBiZSB1c2Vk
IGFzIGNvbXBvbmVudCBwcm9wLlwiKSxcbiAgICAgICAgICB2bVxuICAgICAgICApO1xuICAgICAg
fVxuICAgICAgZGVmaW5lUmVhY3RpdmUkJDEocHJvcHMsIGtleSwgdmFsdWUsIGZ1bmN0aW9uICgp
IHtcbiAgICAgICAgaWYgKHZtLiRwYXJlbnQgJiYgIWlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCkg
e1xuICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICBcIkF2b2lkIG11dGF0aW5nIGEgcHJvcCBk
aXJlY3RseSBzaW5jZSB0aGUgdmFsdWUgd2lsbCBiZSBcIiArXG4gICAgICAgICAgICBcIm92ZXJ3
cml0dGVuIHdoZW5ldmVyIHRoZSBwYXJlbnQgY29tcG9uZW50IHJlLXJlbmRlcnMuIFwiICtcbiAg
ICAgICAgICAgIFwiSW5zdGVhZCwgdXNlIGEgZGF0YSBvciBjb21wdXRlZCBwcm9wZXJ0eSBiYXNl
ZCBvbiB0aGUgcHJvcCdzIFwiICtcbiAgICAgICAgICAgIFwidmFsdWUuIFByb3AgYmVpbmcgbXV0
YXRlZDogXFxcIlwiICsga2V5ICsgXCJcXFwiXCIsXG4gICAgICAgICAgICB2bVxuICAgICAgICAg
ICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWZpbmVSZWFj
dGl2ZSQkMShwcm9wcywga2V5LCB2YWx1ZSk7XG4gICAgfVxuICAgIC8vIHN0YXRpYyBwcm9wcyBh
cmUgYWxyZWFkeSBwcm94aWVkIG9uIHRoZSBjb21wb25lbnQncyBwcm90b3R5cGVcbiAgICAvLyBk
dXJpbmcgVnVlLmV4dGVuZCgpLiBXZSBvbmx5IG5lZWQgdG8gcHJveHkgcHJvcHMgZGVmaW5lZCBh
dFxuICAgIC8vIGluc3RhbnRpYXRpb24gaGVyZS5cbiAgICBpZiAoIShrZXkgaW4gdm0pKSB7XG4g
ICAgICBwcm94eSh2bSwgXCJfcHJvcHNcIiwga2V5KTtcbiAgICB9XG4gIH07XG5cbiAgZm9yICh2
YXIga2V5IGluIHByb3BzT3B0aW9ucykgbG9vcCgga2V5ICk7XG4gIG9ic2VydmVyU3RhdGUuc2hv
dWxkQ29udmVydCA9IHRydWU7XG59XG5cbmZ1bmN0aW9uIGluaXREYXRhICh2bSkge1xuICB2YXIg
ZGF0YSA9IHZtLiRvcHRpb25zLmRhdGE7XG4gIGRhdGEgPSB2bS5fZGF0YSA9IHR5cGVvZiBkYXRh
ID09PSAnZnVuY3Rpb24nXG4gICAgPyBnZXREYXRhKGRhdGEsIHZtKVxuICAgIDogZGF0YSB8fCB7
fTtcbiAgaWYgKCFpc1BsYWluT2JqZWN0KGRhdGEpKSB7XG4gICAgZGF0YSA9IHt9O1xuICAgIFwi
cHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICdkYXRhIGZ1bmN0
aW9ucyBzaG91bGQgcmV0dXJuIGFuIG9iamVjdDpcXG4nICtcbiAgICAgICdodHRwczovL3Z1ZWpz
Lm9yZy92Mi9ndWlkZS9jb21wb25lbnRzLmh0bWwjZGF0YS1NdXN0LUJlLWEtRnVuY3Rpb24nLFxu
ICAgICAgdm1cbiAgICApO1xuICB9XG4gIC8vIHByb3h5IGRhdGEgb24gaW5zdGFuY2VcbiAgdmFy
IGtleXMgPSBPYmplY3Qua2V5cyhkYXRhKTtcbiAgdmFyIHByb3BzID0gdm0uJG9wdGlvbnMucHJv
cHM7XG4gIHZhciBtZXRob2RzID0gdm0uJG9wdGlvbnMubWV0aG9kcztcbiAgdmFyIGkgPSBrZXlz
Lmxlbmd0aDtcbiAgd2hpbGUgKGktLSkge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlm
IChmYWxzZSkge1xuICAgICAgaWYgKG1ldGhvZHMgJiYgaGFzT3duKG1ldGhvZHMsIGtleSkpIHtc
biAgICAgICAgd2FybihcbiAgICAgICAgICAoXCJtZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwi
IGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZCBhcyBhIGRhdGEgcHJvcGVydHkuXCIpLFxuICAgICAg
ICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcyAmJiBoYXNP
d24ocHJvcHMsIGtleSkpIHtcbiAgICAgIFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicg
JiYgd2FybihcbiAgICAgICAgXCJUaGUgZGF0YSBwcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxc
XCIgaXMgYWxyZWFkeSBkZWNsYXJlZCBhcyBhIHByb3AuIFwiICtcbiAgICAgICAgXCJVc2UgcHJv
cCBkZWZhdWx0IHZhbHVlIGluc3RlYWQuXCIsXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgIH0g
ZWxzZSBpZiAoIWlzUmVzZXJ2ZWQoa2V5KSkge1xuICAgICAgcHJveHkodm0sIFwiX2RhdGFcIiwg
a2V5KTtcbiAgICB9XG4gIH1cbiAgLy8gb2JzZXJ2ZSBkYXRhXG4gIG9ic2VydmUoZGF0YSwgdHJ1
ZSAvKiBhc1Jvb3REYXRhICovKTtcbn1cblxuZnVuY3Rpb24gZ2V0RGF0YSAoZGF0YSwgdm0pIHtc
biAgdHJ5IHtcbiAgICByZXR1cm4gZGF0YS5jYWxsKHZtKVxuICB9IGNhdGNoIChlKSB7XG4gICAg
aGFuZGxlRXJyb3IoZSwgdm0sIFwiZGF0YSgpXCIpO1xuICAgIHJldHVybiB7fVxuICB9XG59XG5c
bnZhciBjb21wdXRlZFdhdGNoZXJPcHRpb25zID0geyBsYXp5OiB0cnVlIH07XG5cbmZ1bmN0aW9u
IGluaXRDb21wdXRlZCAodm0sIGNvbXB1dGVkKSB7XG4gIFwicHJvZHVjdGlvblwiICE9PSAncHJv
ZHVjdGlvbicgJiYgY2hlY2tPcHRpb25UeXBlKHZtLCAnY29tcHV0ZWQnKTtcbiAgdmFyIHdhdGNo
ZXJzID0gdm0uX2NvbXB1dGVkV2F0Y2hlcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIGZv
ciAodmFyIGtleSBpbiBjb21wdXRlZCkge1xuICAgIHZhciB1c2VyRGVmID0gY29tcHV0ZWRba2V5
XTtcbiAgICB2YXIgZ2V0dGVyID0gdHlwZW9mIHVzZXJEZWYgPT09ICdmdW5jdGlvbicgPyB1c2Vy
RGVmIDogdXNlckRlZi5nZXQ7XG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICB3YXJuKFxuICAgICAg
ICAoXCJHZXR0ZXIgaXMgbWlzc2luZyBmb3IgY29tcHV0ZWQgcHJvcGVydHkgXFxcIlwiICsga2V5
ICsgXCJcXFwiLlwiKSxcbiAgICAgICAgdm1cbiAgICAgICk7XG4gICAgfVxuICAgIC8vIGNyZWF0
ZSBpbnRlcm5hbCB3YXRjaGVyIGZvciB0aGUgY29tcHV0ZWQgcHJvcGVydHkuXG4gICAgd2F0Y2hl
cnNba2V5XSA9IG5ldyBXYXRjaGVyKHZtLCBnZXR0ZXIgfHwgbm9vcCwgbm9vcCwgY29tcHV0ZWRX
YXRjaGVyT3B0aW9ucyk7XG5cbiAgICAvLyBjb21wb25lbnQtZGVmaW5lZCBjb21wdXRlZCBwcm9w
ZXJ0aWVzIGFyZSBhbHJlYWR5IGRlZmluZWQgb24gdGhlXG4gICAgLy8gY29tcG9uZW50IHByb3Rv
dHlwZS4gV2Ugb25seSBuZWVkIHRvIGRlZmluZSBjb21wdXRlZCBwcm9wZXJ0aWVzIGRlZmluZWRc
biAgICAvLyBhdCBpbnN0YW50aWF0aW9uIGhlcmUuXG4gICAgaWYgKCEoa2V5IGluIHZtKSkge1xu
ICAgICAgZGVmaW5lQ29tcHV0ZWQodm0sIGtleSwgdXNlckRlZik7XG4gICAgfSBlbHNlIGlmIChm
YWxzZSkge1xuICAgICAgaWYgKGtleSBpbiB2bS4kZGF0YSkge1xuICAgICAgICB3YXJuKChcIlRo
ZSBjb21wdXRlZCBwcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgaXMgYWxyZWFkeSBkZWZp
bmVkIGluIGRhdGEuXCIpLCB2bSk7XG4gICAgICB9IGVsc2UgaWYgKHZtLiRvcHRpb25zLnByb3Bz
ICYmIGtleSBpbiB2bS4kb3B0aW9ucy5wcm9wcykge1xuICAgICAgICB3YXJuKChcIlRoZSBjb21w
dXRlZCBwcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgaXMgYWxyZWFkeSBkZWZpbmVkIGFz
IGEgcHJvcC5cIiksIHZtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVm
aW5lQ29tcHV0ZWQgKHRhcmdldCwga2V5LCB1c2VyRGVmKSB7XG4gIGlmICh0eXBlb2YgdXNlckRl
ZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5nZXQgPSBj
cmVhdGVDb21wdXRlZEdldHRlcihrZXkpO1xuICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5z
ZXQgPSBub29wO1xuICB9IGVsc2Uge1xuICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5nZXQg
PSB1c2VyRGVmLmdldFxuICAgICAgPyB1c2VyRGVmLmNhY2hlICE9PSBmYWxzZVxuICAgICAgICA/
IGNyZWF0ZUNvbXB1dGVkR2V0dGVyKGtleSlcbiAgICAgICAgOiB1c2VyRGVmLmdldFxuICAgICAg
OiBub29wO1xuICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSB1c2VyRGVmLnNldFxu
ICAgICAgPyB1c2VyRGVmLnNldFxuICAgICAgOiBub29wO1xuICB9XG4gIGlmIChmYWxzZSkge1xu
ICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB3
YXJuKFxuICAgICAgICAoXCJDb21wdXRlZCBwcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIg
d2FzIGFzc2lnbmVkIHRvIGJ1dCBpdCBoYXMgbm8gc2V0dGVyLlwiKSxcbiAgICAgICAgdGhpc1xu
ICAgICAgKTtcbiAgICB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtl
eSwgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29tcHV0
ZWRHZXR0ZXIgKGtleSkge1xuICByZXR1cm4gZnVuY3Rpb24gY29tcHV0ZWRHZXR0ZXIgKCkge1xu
ICAgIHZhciB3YXRjaGVyID0gdGhpcy5fY29tcHV0ZWRXYXRjaGVycyAmJiB0aGlzLl9jb21wdXRl
ZFdhdGNoZXJzW2tleV07XG4gICAgaWYgKHdhdGNoZXIpIHtcbiAgICAgIGlmICh3YXRjaGVyLmRp
cnR5KSB7XG4gICAgICAgIHdhdGNoZXIuZXZhbHVhdGUoKTtcbiAgICAgIH1cbiAgICAgIGlmIChE
ZXAudGFyZ2V0KSB7XG4gICAgICAgIHdhdGNoZXIuZGVwZW5kKCk7XG4gICAgICB9XG4gICAgICBy
ZXR1cm4gd2F0Y2hlci52YWx1ZVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0TWV0aG9k
cyAodm0sIG1ldGhvZHMpIHtcbiAgXCJwcm9kdWN0aW9uXCIgIT09ICdwcm9kdWN0aW9uJyAmJiBj
aGVja09wdGlvblR5cGUodm0sICdtZXRob2RzJyk7XG4gIHZhciBwcm9wcyA9IHZtLiRvcHRpb25z
LnByb3BzO1xuICBmb3IgKHZhciBrZXkgaW4gbWV0aG9kcykge1xuICAgIHZtW2tleV0gPSBtZXRo
b2RzW2tleV0gPT0gbnVsbCA/IG5vb3AgOiBiaW5kKG1ldGhvZHNba2V5XSwgdm0pO1xuICAgIGlm
IChmYWxzZSkge1xuICAgICAgaWYgKG1ldGhvZHNba2V5XSA9PSBudWxsKSB7XG4gICAgICAgIHdh
cm4oXG4gICAgICAgICAgXCJtZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGhhcyBhbiB1bmRl
ZmluZWQgdmFsdWUgaW4gdGhlIGNvbXBvbmVudCBkZWZpbml0aW9uLiBcIiArXG4gICAgICAgICAg
XCJEaWQgeW91IHJlZmVyZW5jZSB0aGUgZnVuY3Rpb24gY29ycmVjdGx5P1wiLFxuICAgICAgICAg
IHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMgJiYgaGFzT3duKHByb3Bz
LCBrZXkpKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgKFwibWV0aG9kIFxcXCJcIiArIGtl
eSArIFwiXFxcIiBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQgYXMgYSBwcm9wLlwiKSxcbiAgICAg
ICAgICB2bVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBp
bml0V2F0Y2ggKHZtLCB3YXRjaCkge1xuICBcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24n
ICYmIGNoZWNrT3B0aW9uVHlwZSh2bSwgJ3dhdGNoJyk7XG4gIGZvciAodmFyIGtleSBpbiB3YXRj
aCkge1xuICAgIHZhciBoYW5kbGVyID0gd2F0Y2hba2V5XTtcbiAgICBpZiAoQXJyYXkuaXNBcnJh
eShoYW5kbGVyKSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoYW5kbGVyLmxlbmd0aDsg
aSsrKSB7XG4gICAgICAgIGNyZWF0ZVdhdGNoZXIodm0sIGtleSwgaGFuZGxlcltpXSk7XG4gICAg
ICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNyZWF0ZVdhdGNoZXIodm0sIGtleSwgaGFuZGxlcik7
XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVdhdGNoZXIgKFxuICB2bSxcbiAga2V5
T3JGbixcbiAgaGFuZGxlcixcbiAgb3B0aW9uc1xuKSB7XG4gIGlmIChpc1BsYWluT2JqZWN0KGhh
bmRsZXIpKSB7XG4gICAgb3B0aW9ucyA9IGhhbmRsZXI7XG4gICAgaGFuZGxlciA9IGhhbmRsZXIu
aGFuZGxlcjtcbiAgfVxuICBpZiAodHlwZW9mIGhhbmRsZXIgPT09ICdzdHJpbmcnKSB7XG4gICAg
aGFuZGxlciA9IHZtW2hhbmRsZXJdO1xuICB9XG4gIHJldHVybiB2bS4kd2F0Y2goa2V5T3JGbiwg
aGFuZGxlciwgb3B0aW9ucylcbn1cblxuZnVuY3Rpb24gc3RhdGVNaXhpbiAoVnVlKSB7XG4gIC8v
IGZsb3cgc29tZWhvdyBoYXMgcHJvYmxlbXMgd2l0aCBkaXJlY3RseSBkZWNsYXJlZCBkZWZpbml0
aW9uIG9iamVjdFxuICAvLyB3aGVuIHVzaW5nIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSwgc28gd2Ug
aGF2ZSB0byBwcm9jZWR1cmFsbHkgYnVpbGQgdXBcbiAgLy8gdGhlIG9iamVjdCBoZXJlLlxuICB2
YXIgZGF0YURlZiA9IHt9O1xuICBkYXRhRGVmLmdldCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRo
aXMuX2RhdGEgfTtcbiAgdmFyIHByb3BzRGVmID0ge307XG4gIHByb3BzRGVmLmdldCA9IGZ1bmN0
aW9uICgpIHsgcmV0dXJuIHRoaXMuX3Byb3BzIH07XG4gIGlmIChmYWxzZSkge1xuICAgIGRhdGFE
ZWYuc2V0ID0gZnVuY3Rpb24gKG5ld0RhdGEpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgICdBdm9p
ZCByZXBsYWNpbmcgaW5zdGFuY2Ugcm9vdCAkZGF0YS4gJyArXG4gICAgICAgICdVc2UgbmVzdGVk
IGRhdGEgcHJvcGVydGllcyBpbnN0ZWFkLicsXG4gICAgICAgIHRoaXNcbiAgICAgICk7XG4gICAg
fTtcbiAgICBwcm9wc0RlZi5zZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB3YXJuKFwiJHByb3Bz
IGlzIHJlYWRvbmx5LlwiLCB0aGlzKTtcbiAgICB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShWdWUucHJvdG90eXBlLCAnJGRhdGEnLCBkYXRhRGVmKTtcbiAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KFZ1ZS5wcm90b3R5cGUsICckcHJvcHMnLCBwcm9wc0RlZik7XG5cbiAgVnVlLnByb3Rv
dHlwZS4kc2V0ID0gc2V0O1xuICBWdWUucHJvdG90eXBlLiRkZWxldGUgPSBkZWw7XG5cbiAgVnVl
LnByb3RvdHlwZS4kd2F0Y2ggPSBmdW5jdGlvbiAoXG4gICAgZXhwT3JGbixcbiAgICBjYixcbiAg
ICBvcHRpb25zXG4gICkge1xuICAgIHZhciB2bSA9IHRoaXM7XG4gICAgaWYgKGlzUGxhaW5PYmpl
Y3QoY2IpKSB7XG4gICAgICByZXR1cm4gY3JlYXRlV2F0Y2hlcih2bSwgZXhwT3JGbiwgY2IsIG9w
dGlvbnMpXG4gICAgfVxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIG9wdGlvbnMu
dXNlciA9IHRydWU7XG4gICAgdmFyIHdhdGNoZXIgPSBuZXcgV2F0Y2hlcih2bSwgZXhwT3JGbiwg
Y2IsIG9wdGlvbnMpO1xuICAgIGlmIChvcHRpb25zLmltbWVkaWF0ZSkge1xuICAgICAgY2IuY2Fs
bCh2bSwgd2F0Y2hlci52YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiB1bndhdGNo
Rm4gKCkge1xuICAgICAgd2F0Y2hlci50ZWFyZG93bigpO1xuICAgIH1cbiAgfTtcbn1cblxuLyog
ICovXG5cbmZ1bmN0aW9uIGluaXRQcm92aWRlICh2bSkge1xuICB2YXIgcHJvdmlkZSA9IHZtLiRv
cHRpb25zLnByb3ZpZGU7XG4gIGlmIChwcm92aWRlKSB7XG4gICAgdm0uX3Byb3ZpZGVkID0gdHlw
ZW9mIHByb3ZpZGUgPT09ICdmdW5jdGlvbidcbiAgICAgID8gcHJvdmlkZS5jYWxsKHZtKVxuICAg
ICAgOiBwcm92aWRlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRJbmplY3Rpb25zICh2bSkge1xu
ICB2YXIgcmVzdWx0ID0gcmVzb2x2ZUluamVjdCh2bS4kb3B0aW9ucy5pbmplY3QsIHZtKTtcbiAg
aWYgKHJlc3VsdCkge1xuICAgIG9ic2VydmVyU3RhdGUuc2hvdWxkQ29udmVydCA9IGZhbHNlO1xu
ICAgIE9iamVjdC5rZXlzKHJlc3VsdCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAv
KiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKGZhbHNlKSB7XG4gICAgICAgIGRl
ZmluZVJlYWN0aXZlJCQxKHZtLCBrZXksIHJlc3VsdFtrZXldLCBmdW5jdGlvbiAoKSB7XG4gICAg
ICAgICAgd2FybihcbiAgICAgICAgICAgIFwiQXZvaWQgbXV0YXRpbmcgYW4gaW5qZWN0ZWQgdmFs
dWUgZGlyZWN0bHkgc2luY2UgdGhlIGNoYW5nZXMgd2lsbCBiZSBcIiArXG4gICAgICAgICAgICBc
Im92ZXJ3cml0dGVuIHdoZW5ldmVyIHRoZSBwcm92aWRlZCBjb21wb25lbnQgcmUtcmVuZGVycy4g
XCIgK1xuICAgICAgICAgICAgXCJpbmplY3Rpb24gYmVpbmcgbXV0YXRlZDogXFxcIlwiICsga2V5
ICsgXCJcXFwiXCIsXG4gICAgICAgICAgICB2bVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xu
ICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVmaW5lUmVhY3RpdmUkJDEodm0sIGtleSwgcmVzdWx0
W2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIG9ic2VydmVyU3RhdGUuc2hvdWxkQ29udmVy
dCA9IHRydWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUluamVjdCAoaW5qZWN0LCB2bSkg
e1xuICBpZiAoaW5qZWN0KSB7XG4gICAgLy8gaW5qZWN0IGlzIDphbnkgYmVjYXVzZSBmbG93IGlz
IG5vdCBzbWFydCBlbm91Z2ggdG8gZmlndXJlIG91dCBjYWNoZWRcbiAgICB2YXIgcmVzdWx0ID0g
T2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB2YXIga2V5cyA9IGhhc1N5bWJvbFxuICAgICAgICA/
IFJlZmxlY3Qub3duS2V5cyhpbmplY3QpXG4gICAgICAgIDogT2JqZWN0LmtleXMoaW5qZWN0KTtc
blxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFy
IGtleSA9IGtleXNbaV07XG4gICAgICB2YXIgcHJvdmlkZUtleSA9IGluamVjdFtrZXldO1xuICAg
ICAgdmFyIHNvdXJjZSA9IHZtO1xuICAgICAgd2hpbGUgKHNvdXJjZSkge1xuICAgICAgICBpZiAo
c291cmNlLl9wcm92aWRlZCAmJiBwcm92aWRlS2V5IGluIHNvdXJjZS5fcHJvdmlkZWQpIHtcbiAg
ICAgICAgICByZXN1bHRba2V5XSA9IHNvdXJjZS5fcHJvdmlkZWRbcHJvdmlkZUtleV07XG4gICAg
ICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBzb3VyY2UgPSBzb3VyY2UuJHBhcmVudDtc
biAgICAgIH1cbiAgICAgIGlmIChmYWxzZSkge1xuICAgICAgICB3YXJuKChcIkluamVjdGlvbiBc
XFwiXCIgKyBrZXkgKyBcIlxcXCIgbm90IGZvdW5kXCIpLCB2bSk7XG4gICAgICB9XG4gICAgfVxu
ICAgIHJldHVybiByZXN1bHRcbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gY3JlYXRlRnVu
Y3Rpb25hbENvbXBvbmVudCAoXG4gIEN0b3IsXG4gIHByb3BzRGF0YSxcbiAgZGF0YSxcbiAgY29u
dGV4dCxcbiAgY2hpbGRyZW5cbikge1xuICB2YXIgcHJvcHMgPSB7fTtcbiAgdmFyIHByb3BPcHRp
b25zID0gQ3Rvci5vcHRpb25zLnByb3BzO1xuICBpZiAoaXNEZWYocHJvcE9wdGlvbnMpKSB7XG4g
ICAgZm9yICh2YXIga2V5IGluIHByb3BPcHRpb25zKSB7XG4gICAgICBwcm9wc1trZXldID0gdmFs
aWRhdGVQcm9wKGtleSwgcHJvcE9wdGlvbnMsIHByb3BzRGF0YSB8fCB7fSk7XG4gICAgfVxuICB9
IGVsc2Uge1xuICAgIGlmIChpc0RlZihkYXRhLmF0dHJzKSkgeyBtZXJnZVByb3BzKHByb3BzLCBk
YXRhLmF0dHJzKTsgfVxuICAgIGlmIChpc0RlZihkYXRhLnByb3BzKSkgeyBtZXJnZVByb3BzKHBy
b3BzLCBkYXRhLnByb3BzKTsgfVxuICB9XG4gIC8vIGVuc3VyZSB0aGUgY3JlYXRlRWxlbWVudCBm
dW5jdGlvbiBpbiBmdW5jdGlvbmFsIGNvbXBvbmVudHNcbiAgLy8gZ2V0cyBhIHVuaXF1ZSBjb250
ZXh0IC0gdGhpcyBpcyBuZWNlc3NhcnkgZm9yIGNvcnJlY3QgbmFtZWQgc2xvdCBjaGVja1xuICB2
YXIgX2NvbnRleHQgPSBPYmplY3QuY3JlYXRlKGNvbnRleHQpO1xuICB2YXIgaCA9IGZ1bmN0aW9u
IChhLCBiLCBjLCBkKSB7IHJldHVybiBjcmVhdGVFbGVtZW50KF9jb250ZXh0LCBhLCBiLCBjLCBk
LCB0cnVlKTsgfTtcbiAgdmFyIHZub2RlID0gQ3Rvci5vcHRpb25zLnJlbmRlci5jYWxsKG51bGws
IGgsIHtcbiAgICBkYXRhOiBkYXRhLFxuICAgIHByb3BzOiBwcm9wcyxcbiAgICBjaGlsZHJlbjog
Y2hpbGRyZW4sXG4gICAgcGFyZW50OiBjb250ZXh0LFxuICAgIGxpc3RlbmVyczogZGF0YS5vbiB8
fCB7fSxcbiAgICBpbmplY3Rpb25zOiByZXNvbHZlSW5qZWN0KEN0b3Iub3B0aW9ucy5pbmplY3Qs
IGNvbnRleHQpLFxuICAgIHNsb3RzOiBmdW5jdGlvbiAoKSB7IHJldHVybiByZXNvbHZlU2xvdHMo
Y2hpbGRyZW4sIGNvbnRleHQpOyB9XG4gIH0pO1xuICBpZiAodm5vZGUgaW5zdGFuY2VvZiBWTm9k
ZSkge1xuICAgIHZub2RlLmZ1bmN0aW9uYWxDb250ZXh0ID0gY29udGV4dDtcbiAgICB2bm9kZS5m
dW5jdGlvbmFsT3B0aW9ucyA9IEN0b3Iub3B0aW9ucztcbiAgICBpZiAoZGF0YS5zbG90KSB7XG4g
ICAgICAodm5vZGUuZGF0YSB8fCAodm5vZGUuZGF0YSA9IHt9KSkuc2xvdCA9IGRhdGEuc2xvdDtc
biAgICB9XG4gIH1cbiAgcmV0dXJuIHZub2RlXG59XG5cbmZ1bmN0aW9uIG1lcmdlUHJvcHMgKHRv
LCBmcm9tKSB7XG4gIGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG4gICAgdG9bY2FtZWxpemUoa2V5
KV0gPSBmcm9tW2tleV07XG4gIH1cbn1cblxuLyogICovXG5cbi8vIGhvb2tzIHRvIGJlIGludm9r
ZWQgb24gY29tcG9uZW50IFZOb2RlcyBkdXJpbmcgcGF0Y2hcbnZhciBjb21wb25lbnRWTm9kZUhv
b2tzID0ge1xuICBpbml0OiBmdW5jdGlvbiBpbml0IChcbiAgICB2bm9kZSxcbiAgICBoeWRyYXRp
bmcsXG4gICAgcGFyZW50RWxtLFxuICAgIHJlZkVsbVxuICApIHtcbiAgICBpZiAoIXZub2RlLmNv
bXBvbmVudEluc3RhbmNlIHx8IHZub2RlLmNvbXBvbmVudEluc3RhbmNlLl9pc0Rlc3Ryb3llZCkg
e1xuICAgICAgdmFyIGNoaWxkID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgPSBjcmVhdGVDb21w
b25lbnRJbnN0YW5jZUZvclZub2RlKFxuICAgICAgICB2bm9kZSxcbiAgICAgICAgYWN0aXZlSW5z
dGFuY2UsXG4gICAgICAgIHBhcmVudEVsbSxcbiAgICAgICAgcmVmRWxtXG4gICAgICApO1xuICAg
ICAgY2hpbGQuJG1vdW50KGh5ZHJhdGluZyA/IHZub2RlLmVsbSA6IHVuZGVmaW5lZCwgaHlkcmF0
aW5nKTtcbiAgICB9IGVsc2UgaWYgKHZub2RlLmRhdGEua2VlcEFsaXZlKSB7XG4gICAgICAvLyBr
ZXB0LWFsaXZlIGNvbXBvbmVudHMsIHRyZWF0IGFzIGEgcGF0Y2hcbiAgICAgIHZhciBtb3VudGVk
Tm9kZSA9IHZub2RlOyAvLyB3b3JrIGFyb3VuZCBmbG93XG4gICAgICBjb21wb25lbnRWTm9kZUhv
b2tzLnByZXBhdGNoKG1vdW50ZWROb2RlLCBtb3VudGVkTm9kZSk7XG4gICAgfVxuICB9LFxuXG4g
IHByZXBhdGNoOiBmdW5jdGlvbiBwcmVwYXRjaCAob2xkVm5vZGUsIHZub2RlKSB7XG4gICAgdmFy
IG9wdGlvbnMgPSB2bm9kZS5jb21wb25lbnRPcHRpb25zO1xuICAgIHZhciBjaGlsZCA9IHZub2Rl
LmNvbXBvbmVudEluc3RhbmNlID0gb2xkVm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgdXBk
YXRlQ2hpbGRDb21wb25lbnQoXG4gICAgICBjaGlsZCxcbiAgICAgIG9wdGlvbnMucHJvcHNEYXRh
LCAvLyB1cGRhdGVkIHByb3BzXG4gICAgICBvcHRpb25zLmxpc3RlbmVycywgLy8gdXBkYXRlZCBs
aXN0ZW5lcnNcbiAgICAgIHZub2RlLCAvLyBuZXcgcGFyZW50IHZub2RlXG4gICAgICBvcHRpb25z
LmNoaWxkcmVuIC8vIG5ldyBjaGlsZHJlblxuICAgICk7XG4gIH0sXG5cbiAgaW5zZXJ0OiBmdW5j
dGlvbiBpbnNlcnQgKHZub2RlKSB7XG4gICAgdmFyIGNvbnRleHQgPSB2bm9kZS5jb250ZXh0O1xu
ICAgIHZhciBjb21wb25lbnRJbnN0YW5jZSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlO1xuICAg
IGlmICghY29tcG9uZW50SW5zdGFuY2UuX2lzTW91bnRlZCkge1xuICAgICAgY29tcG9uZW50SW5z
dGFuY2UuX2lzTW91bnRlZCA9IHRydWU7XG4gICAgICBjYWxsSG9vayhjb21wb25lbnRJbnN0YW5j
ZSwgJ21vdW50ZWQnKTtcbiAgICB9XG4gICAgaWYgKHZub2RlLmRhdGEua2VlcEFsaXZlKSB7XG4g
ICAgICBpZiAoY29udGV4dC5faXNNb3VudGVkKSB7XG4gICAgICAgIC8vIHZ1ZS1yb3V0ZXIjMTIx
MlxuICAgICAgICAvLyBEdXJpbmcgdXBkYXRlcywgYSBrZXB0LWFsaXZlIGNvbXBvbmVudCdzIGNo
aWxkIGNvbXBvbmVudHMgbWF5XG4gICAgICAgIC8vIGNoYW5nZSwgc28gZGlyZWN0bHkgd2Fsa2lu
ZyB0aGUgdHJlZSBoZXJlIG1heSBjYWxsIGFjdGl2YXRlZCBob29rc1xuICAgICAgICAvLyBvbiBp
bmNvcnJlY3QgY2hpbGRyZW4uIEluc3RlYWQgd2UgcHVzaCB0aGVtIGludG8gYSBxdWV1ZSB3aGlj
aCB3aWxsXG4gICAgICAgIC8vIGJlIHByb2Nlc3NlZCBhZnRlciB0aGUgd2hvbGUgcGF0Y2ggcHJv
Y2VzcyBlbmRlZC5cbiAgICAgICAgcXVldWVBY3RpdmF0ZWRDb21wb25lbnQoY29tcG9uZW50SW5z
dGFuY2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0aXZhdGVDaGlsZENvbXBvbmVudChj
b21wb25lbnRJbnN0YW5jZSwgdHJ1ZSAvKiBkaXJlY3QgKi8pO1xuICAgICAgfVxuICAgIH1cbiAg
fSxcblxuICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95ICh2bm9kZSkge1xuICAgIHZhciBjb21w
b25lbnRJbnN0YW5jZSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlO1xuICAgIGlmICghY29tcG9u
ZW50SW5zdGFuY2UuX2lzRGVzdHJveWVkKSB7XG4gICAgICBpZiAoIXZub2RlLmRhdGEua2VlcEFs
aXZlKSB7XG4gICAgICAgIGNvbXBvbmVudEluc3RhbmNlLiRkZXN0cm95KCk7XG4gICAgICB9IGVs
c2Uge1xuICAgICAgICBkZWFjdGl2YXRlQ2hpbGRDb21wb25lbnQoY29tcG9uZW50SW5zdGFuY2Us
IHRydWUgLyogZGlyZWN0ICovKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbnZhciBob29r
c1RvTWVyZ2UgPSBPYmplY3Qua2V5cyhjb21wb25lbnRWTm9kZUhvb2tzKTtcblxuZnVuY3Rpb24g
Y3JlYXRlQ29tcG9uZW50IChcbiAgQ3RvcixcbiAgZGF0YSxcbiAgY29udGV4dCxcbiAgY2hpbGRy
ZW4sXG4gIHRhZ1xuKSB7XG4gIGlmIChpc1VuZGVmKEN0b3IpKSB7XG4gICAgcmV0dXJuXG4gIH1c
blxuICB2YXIgYmFzZUN0b3IgPSBjb250ZXh0LiRvcHRpb25zLl9iYXNlO1xuXG4gIC8vIHBsYWlu
IG9wdGlvbnMgb2JqZWN0OiB0dXJuIGl0IGludG8gYSBjb25zdHJ1Y3RvclxuICBpZiAoaXNPYmpl
Y3QoQ3RvcikpIHtcbiAgICBDdG9yID0gYmFzZUN0b3IuZXh0ZW5kKEN0b3IpO1xuICB9XG5cbiAg
Ly8gaWYgYXQgdGhpcyBzdGFnZSBpdCdzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIGFuIGFzeW5jIGNv
bXBvbmVudCBmYWN0b3J5LFxuICAvLyByZWplY3QuXG4gIGlmICh0eXBlb2YgQ3RvciAhPT0gJ2Z1
bmN0aW9uJykge1xuICAgIGlmIChmYWxzZSkge1xuICAgICAgd2FybigoXCJJbnZhbGlkIENvbXBv
bmVudCBkZWZpbml0aW9uOiBcIiArIChTdHJpbmcoQ3RvcikpKSwgY29udGV4dCk7XG4gICAgfVxu
ICAgIHJldHVyblxuICB9XG5cbiAgLy8gYXN5bmMgY29tcG9uZW50XG4gIHZhciBhc3luY0ZhY3Rv
cnk7XG4gIGlmIChpc1VuZGVmKEN0b3IuY2lkKSkge1xuICAgIGFzeW5jRmFjdG9yeSA9IEN0b3I7
XG4gICAgQ3RvciA9IHJlc29sdmVBc3luY0NvbXBvbmVudChhc3luY0ZhY3RvcnksIGJhc2VDdG9y
LCBjb250ZXh0KTtcbiAgICBpZiAoQ3RvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyByZXR1
cm4gYSBwbGFjZWhvbGRlciBub2RlIGZvciBhc3luYyBjb21wb25lbnQsIHdoaWNoIGlzIHJlbmRl
cmVkXG4gICAgICAvLyBhcyBhIGNvbW1lbnQgbm9kZSBidXQgcHJlc2VydmVzIGFsbCB0aGUgcmF3
IGluZm9ybWF0aW9uIGZvciB0aGUgbm9kZS5cbiAgICAgIC8vIHRoZSBpbmZvcm1hdGlvbiB3aWxs
IGJlIHVzZWQgZm9yIGFzeW5jIHNlcnZlci1yZW5kZXJpbmcgYW5kIGh5ZHJhdGlvbi5cbiAgICAg
IHJldHVybiBjcmVhdGVBc3luY1BsYWNlaG9sZGVyKFxuICAgICAgICBhc3luY0ZhY3RvcnksXG4g
ICAgICAgIGRhdGEsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGNoaWxkcmVuLFxuICAgICAg
ICB0YWdcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBkYXRhID0gZGF0YSB8fCB7fTtcblxuICAv
LyByZXNvbHZlIGNvbnN0cnVjdG9yIG9wdGlvbnMgaW4gY2FzZSBnbG9iYWwgbWl4aW5zIGFyZSBh
cHBsaWVkIGFmdGVyXG4gIC8vIGNvbXBvbmVudCBjb25zdHJ1Y3RvciBjcmVhdGlvblxuICByZXNv
bHZlQ29uc3RydWN0b3JPcHRpb25zKEN0b3IpO1xuXG4gIC8vIHRyYW5zZm9ybSBjb21wb25lbnQg
di1tb2RlbCBkYXRhIGludG8gcHJvcHMgJiBldmVudHNcbiAgaWYgKGlzRGVmKGRhdGEubW9kZWwp
KSB7XG4gICAgdHJhbnNmb3JtTW9kZWwoQ3Rvci5vcHRpb25zLCBkYXRhKTtcbiAgfVxuXG4gIC8v
IGV4dHJhY3QgcHJvcHNcbiAgdmFyIHByb3BzRGF0YSA9IGV4dHJhY3RQcm9wc0Zyb21WTm9kZURh
dGEoZGF0YSwgQ3RvciwgdGFnKTtcblxuICAvLyBmdW5jdGlvbmFsIGNvbXBvbmVudFxuICBpZiAo
aXNUcnVlKEN0b3Iub3B0aW9ucy5mdW5jdGlvbmFsKSkge1xuICAgIHJldHVybiBjcmVhdGVGdW5j
dGlvbmFsQ29tcG9uZW50KEN0b3IsIHByb3BzRGF0YSwgZGF0YSwgY29udGV4dCwgY2hpbGRyZW4p
XG4gIH1cblxuICAvLyBleHRyYWN0IGxpc3RlbmVycywgc2luY2UgdGhlc2UgbmVlZHMgdG8gYmUg
dHJlYXRlZCBhc1xuICAvLyBjaGlsZCBjb21wb25lbnQgbGlzdGVuZXJzIGluc3RlYWQgb2YgRE9N
IGxpc3RlbmVyc1xuICB2YXIgbGlzdGVuZXJzID0gZGF0YS5vbjtcbiAgLy8gcmVwbGFjZSB3aXRo
IGxpc3RlbmVycyB3aXRoIC5uYXRpdmUgbW9kaWZpZXJcbiAgLy8gc28gaXQgZ2V0cyBwcm9jZXNz
ZWQgZHVyaW5nIHBhcmVudCBjb21wb25lbnQgcGF0Y2guXG4gIGRhdGEub24gPSBkYXRhLm5hdGl2
ZU9uO1xuXG4gIGlmIChpc1RydWUoQ3Rvci5vcHRpb25zLmFic3RyYWN0KSkge1xuICAgIC8vIGFi
c3RyYWN0IGNvbXBvbmVudHMgZG8gbm90IGtlZXAgYW55dGhpbmdcbiAgICAvLyBvdGhlciB0aGFu
IHByb3BzICYgbGlzdGVuZXJzICYgc2xvdFxuXG4gICAgLy8gd29yayBhcm91bmQgZmxvd1xuICAg
IHZhciBzbG90ID0gZGF0YS5zbG90O1xuICAgIGRhdGEgPSB7fTtcbiAgICBpZiAoc2xvdCkge1xu
ICAgICAgZGF0YS5zbG90ID0gc2xvdDtcbiAgICB9XG4gIH1cblxuICAvLyBtZXJnZSBjb21wb25l
bnQgbWFuYWdlbWVudCBob29rcyBvbnRvIHRoZSBwbGFjZWhvbGRlciBub2RlXG4gIG1lcmdlSG9v
a3MoZGF0YSk7XG5cbiAgLy8gcmV0dXJuIGEgcGxhY2Vob2xkZXIgdm5vZGVcbiAgdmFyIG5hbWUg
PSBDdG9yLm9wdGlvbnMubmFtZSB8fCB0YWc7XG4gIHZhciB2bm9kZSA9IG5ldyBWTm9kZShcbiAg
ICAoXCJ2dWUtY29tcG9uZW50LVwiICsgKEN0b3IuY2lkKSArIChuYW1lID8gKFwiLVwiICsgbmFt
ZSkgOiAnJykpLFxuICAgIGRhdGEsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNv
bnRleHQsXG4gICAgeyBDdG9yOiBDdG9yLCBwcm9wc0RhdGE6IHByb3BzRGF0YSwgbGlzdGVuZXJz
OiBsaXN0ZW5lcnMsIHRhZzogdGFnLCBjaGlsZHJlbjogY2hpbGRyZW4gfSxcbiAgICBhc3luY0Zh
Y3RvcnlcbiAgKTtcbiAgcmV0dXJuIHZub2RlXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVu
dEluc3RhbmNlRm9yVm5vZGUgKFxuICB2bm9kZSwgLy8gd2Uga25vdyBpdCdzIE1vdW50ZWRDb21w
b25lbnRWTm9kZSBidXQgZmxvdyBkb2Vzbid0XG4gIHBhcmVudCwgLy8gYWN0aXZlSW5zdGFuY2Ug
aW4gbGlmZWN5Y2xlIHN0YXRlXG4gIHBhcmVudEVsbSxcbiAgcmVmRWxtXG4pIHtcbiAgdmFyIHZu
b2RlQ29tcG9uZW50T3B0aW9ucyA9IHZub2RlLmNvbXBvbmVudE9wdGlvbnM7XG4gIHZhciBvcHRp
b25zID0ge1xuICAgIF9pc0NvbXBvbmVudDogdHJ1ZSxcbiAgICBwYXJlbnQ6IHBhcmVudCxcbiAg
ICBwcm9wc0RhdGE6IHZub2RlQ29tcG9uZW50T3B0aW9ucy5wcm9wc0RhdGEsXG4gICAgX2NvbXBv
bmVudFRhZzogdm5vZGVDb21wb25lbnRPcHRpb25zLnRhZyxcbiAgICBfcGFyZW50Vm5vZGU6IHZu
b2RlLFxuICAgIF9wYXJlbnRMaXN0ZW5lcnM6IHZub2RlQ29tcG9uZW50T3B0aW9ucy5saXN0ZW5l
cnMsXG4gICAgX3JlbmRlckNoaWxkcmVuOiB2bm9kZUNvbXBvbmVudE9wdGlvbnMuY2hpbGRyZW4s
XG4gICAgX3BhcmVudEVsbTogcGFyZW50RWxtIHx8IG51bGwsXG4gICAgX3JlZkVsbTogcmVmRWxt
IHx8IG51bGxcbiAgfTtcbiAgLy8gY2hlY2sgaW5saW5lLXRlbXBsYXRlIHJlbmRlciBmdW5jdGlv
bnNcbiAgdmFyIGlubGluZVRlbXBsYXRlID0gdm5vZGUuZGF0YS5pbmxpbmVUZW1wbGF0ZTtcbiAg
aWYgKGlzRGVmKGlubGluZVRlbXBsYXRlKSkge1xuICAgIG9wdGlvbnMucmVuZGVyID0gaW5saW5l
VGVtcGxhdGUucmVuZGVyO1xuICAgIG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gaW5saW5lVGVt
cGxhdGUuc3RhdGljUmVuZGVyRm5zO1xuICB9XG4gIHJldHVybiBuZXcgdm5vZGVDb21wb25lbnRP
cHRpb25zLkN0b3Iob3B0aW9ucylcbn1cblxuZnVuY3Rpb24gbWVyZ2VIb29rcyAoZGF0YSkge1xu
ICBpZiAoIWRhdGEuaG9vaykge1xuICAgIGRhdGEuaG9vayA9IHt9O1xuICB9XG4gIGZvciAodmFy
IGkgPSAwOyBpIDwgaG9va3NUb01lcmdlLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGhv
b2tzVG9NZXJnZVtpXTtcbiAgICB2YXIgZnJvbVBhcmVudCA9IGRhdGEuaG9va1trZXldO1xuICAg
IHZhciBvdXJzID0gY29tcG9uZW50Vk5vZGVIb29rc1trZXldO1xuICAgIGRhdGEuaG9va1trZXld
ID0gZnJvbVBhcmVudCA/IG1lcmdlSG9vayQxKG91cnMsIGZyb21QYXJlbnQpIDogb3VycztcbiAg
fVxufVxuXG5mdW5jdGlvbiBtZXJnZUhvb2skMSAob25lLCB0d28pIHtcbiAgcmV0dXJuIGZ1bmN0
aW9uIChhLCBiLCBjLCBkKSB7XG4gICAgb25lKGEsIGIsIGMsIGQpO1xuICAgIHR3byhhLCBiLCBj
LCBkKTtcbiAgfVxufVxuXG4vLyB0cmFuc2Zvcm0gY29tcG9uZW50IHYtbW9kZWwgaW5mbyAodmFs
dWUgYW5kIGNhbGxiYWNrKSBpbnRvXG4vLyBwcm9wIGFuZCBldmVudCBoYW5kbGVyIHJlc3BlY3Rp
dmVseS5cbmZ1bmN0aW9uIHRyYW5zZm9ybU1vZGVsIChvcHRpb25zLCBkYXRhKSB7XG4gIHZhciBw
cm9wID0gKG9wdGlvbnMubW9kZWwgJiYgb3B0aW9ucy5tb2RlbC5wcm9wKSB8fCAndmFsdWUnO1xu
ICB2YXIgZXZlbnQgPSAob3B0aW9ucy5tb2RlbCAmJiBvcHRpb25zLm1vZGVsLmV2ZW50KSB8fCAn
aW5wdXQnOyhkYXRhLnByb3BzIHx8IChkYXRhLnByb3BzID0ge30pKVtwcm9wXSA9IGRhdGEubW9k
ZWwudmFsdWU7XG4gIHZhciBvbiA9IGRhdGEub24gfHwgKGRhdGEub24gPSB7fSk7XG4gIGlmIChp
c0RlZihvbltldmVudF0pKSB7XG4gICAgb25bZXZlbnRdID0gW2RhdGEubW9kZWwuY2FsbGJhY2td
LmNvbmNhdChvbltldmVudF0pO1xuICB9IGVsc2Uge1xuICAgIG9uW2V2ZW50XSA9IGRhdGEubW9k
ZWwuY2FsbGJhY2s7XG4gIH1cbn1cblxuLyogICovXG5cbnZhciBTSU1QTEVfTk9STUFMSVpFID0g
MTtcbnZhciBBTFdBWVNfTk9STUFMSVpFID0gMjtcblxuLy8gd3JhcHBlciBmdW5jdGlvbiBmb3Ig
cHJvdmlkaW5nIGEgbW9yZSBmbGV4aWJsZSBpbnRlcmZhY2Vcbi8vIHdpdGhvdXQgZ2V0dGluZyB5
ZWxsZWQgYXQgYnkgZmxvd1xuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCAoXG4gIGNvbnRleHQsXG4g
IHRhZyxcbiAgZGF0YSxcbiAgY2hpbGRyZW4sXG4gIG5vcm1hbGl6YXRpb25UeXBlLFxuICBhbHdh
eXNOb3JtYWxpemVcbikge1xuICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSB8fCBpc1ByaW1pdGl2
ZShkYXRhKSkge1xuICAgIG5vcm1hbGl6YXRpb25UeXBlID0gY2hpbGRyZW47XG4gICAgY2hpbGRy
ZW4gPSBkYXRhO1xuICAgIGRhdGEgPSB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKGlzVHJ1ZShhbHdh
eXNOb3JtYWxpemUpKSB7XG4gICAgbm9ybWFsaXphdGlvblR5cGUgPSBBTFdBWVNfTk9STUFMSVpF
O1xuICB9XG4gIHJldHVybiBfY3JlYXRlRWxlbWVudChjb250ZXh0LCB0YWcsIGRhdGEsIGNoaWxk
cmVuLCBub3JtYWxpemF0aW9uVHlwZSlcbn1cblxuZnVuY3Rpb24gX2NyZWF0ZUVsZW1lbnQgKFxu
ICBjb250ZXh0LFxuICB0YWcsXG4gIGRhdGEsXG4gIGNoaWxkcmVuLFxuICBub3JtYWxpemF0aW9u
VHlwZVxuKSB7XG4gIGlmIChpc0RlZihkYXRhKSAmJiBpc0RlZigoZGF0YSkuX19vYl9fKSkge1xu
ICAgIFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgIFwiQXZv
aWQgdXNpbmcgb2JzZXJ2ZWQgZGF0YSBvYmplY3QgYXMgdm5vZGUgZGF0YTogXCIgKyAoSlNPTi5z
dHJpbmdpZnkoZGF0YSkpICsgXCJcXG5cIiArXG4gICAgICAnQWx3YXlzIGNyZWF0ZSBmcmVzaCB2
bm9kZSBkYXRhIG9iamVjdHMgaW4gZWFjaCByZW5kZXIhJyxcbiAgICAgIGNvbnRleHRcbiAgICAp
O1xuICAgIHJldHVybiBjcmVhdGVFbXB0eVZOb2RlKClcbiAgfVxuICAvLyBvYmplY3Qgc3ludGF4
IGluIHYtYmluZFxuICBpZiAoaXNEZWYoZGF0YSkgJiYgaXNEZWYoZGF0YS5pcykpIHtcbiAgICB0
YWcgPSBkYXRhLmlzO1xuICB9XG4gIGlmICghdGFnKSB7XG4gICAgLy8gaW4gY2FzZSBvZiBjb21w
b25lbnQgOmlzIHNldCB0byBmYWxzeSB2YWx1ZVxuICAgIHJldHVybiBjcmVhdGVFbXB0eVZOb2Rl
KClcbiAgfVxuICAvLyB3YXJuIGFnYWluc3Qgbm9uLXByaW1pdGl2ZSBrZXlcbiAgaWYgKGZhbHNl
XG4gICkge1xuICAgIHdhcm4oXG4gICAgICAnQXZvaWQgdXNpbmcgbm9uLXByaW1pdGl2ZSB2YWx1
ZSBhcyBrZXksICcgK1xuICAgICAgJ3VzZSBzdHJpbmcvbnVtYmVyIHZhbHVlIGluc3RlYWQuJyxc
biAgICAgIGNvbnRleHRcbiAgICApO1xuICB9XG4gIC8vIHN1cHBvcnQgc2luZ2xlIGZ1bmN0aW9u
IGNoaWxkcmVuIGFzIGRlZmF1bHQgc2NvcGVkIHNsb3RcbiAgaWYgKEFycmF5LmlzQXJyYXkoY2hp
bGRyZW4pICYmXG4gICAgdHlwZW9mIGNoaWxkcmVuWzBdID09PSAnZnVuY3Rpb24nXG4gICkge1xu
ICAgIGRhdGEgPSBkYXRhIHx8IHt9O1xuICAgIGRhdGEuc2NvcGVkU2xvdHMgPSB7IGRlZmF1bHQ6
IGNoaWxkcmVuWzBdIH07XG4gICAgY2hpbGRyZW4ubGVuZ3RoID0gMDtcbiAgfVxuICBpZiAobm9y
bWFsaXphdGlvblR5cGUgPT09IEFMV0FZU19OT1JNQUxJWkUpIHtcbiAgICBjaGlsZHJlbiA9IG5v
cm1hbGl6ZUNoaWxkcmVuKGNoaWxkcmVuKTtcbiAgfSBlbHNlIGlmIChub3JtYWxpemF0aW9uVHlw
ZSA9PT0gU0lNUExFX05PUk1BTElaRSkge1xuICAgIGNoaWxkcmVuID0gc2ltcGxlTm9ybWFsaXpl
Q2hpbGRyZW4oY2hpbGRyZW4pO1xuICB9XG4gIHZhciB2bm9kZSwgbnM7XG4gIGlmICh0eXBlb2Yg
dGFnID09PSAnc3RyaW5nJykge1xuICAgIHZhciBDdG9yO1xuICAgIG5zID0gY29uZmlnLmdldFRh
Z05hbWVzcGFjZSh0YWcpO1xuICAgIGlmIChjb25maWcuaXNSZXNlcnZlZFRhZyh0YWcpKSB7XG4g
ICAgICAvLyBwbGF0Zm9ybSBidWlsdC1pbiBlbGVtZW50c1xuICAgICAgdm5vZGUgPSBuZXcgVk5v
ZGUoXG4gICAgICAgIGNvbmZpZy5wYXJzZVBsYXRmb3JtVGFnTmFtZSh0YWcpLCBkYXRhLCBjaGls
ZHJlbixcbiAgICAgICAgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNvbnRleHRcbiAgICAgICk7XG4g
ICAgfSBlbHNlIGlmIChpc0RlZihDdG9yID0gcmVzb2x2ZUFzc2V0KGNvbnRleHQuJG9wdGlvbnMs
ICdjb21wb25lbnRzJywgdGFnKSkpIHtcbiAgICAgIC8vIGNvbXBvbmVudFxuICAgICAgdm5vZGUg
PSBjcmVhdGVDb21wb25lbnQoQ3RvciwgZGF0YSwgY29udGV4dCwgY2hpbGRyZW4sIHRhZyk7XG4g
ICAgfSBlbHNlIHtcbiAgICAgIC8vIHVua25vd24gb3IgdW5saXN0ZWQgbmFtZXNwYWNlZCBlbGVt
ZW50c1xuICAgICAgLy8gY2hlY2sgYXQgcnVudGltZSBiZWNhdXNlIGl0IG1heSBnZXQgYXNzaWdu
ZWQgYSBuYW1lc3BhY2Ugd2hlbiBpdHNcbiAgICAgIC8vIHBhcmVudCBub3JtYWxpemVzIGNoaWxk
cmVuXG4gICAgICB2bm9kZSA9IG5ldyBWTm9kZShcbiAgICAgICAgdGFnLCBkYXRhLCBjaGlsZHJl
bixcbiAgICAgICAgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNvbnRleHRcbiAgICAgICk7XG4gICAg
fVxuICB9IGVsc2Uge1xuICAgIC8vIGRpcmVjdCBjb21wb25lbnQgb3B0aW9ucyAvIGNvbnN0cnVj
dG9yXG4gICAgdm5vZGUgPSBjcmVhdGVDb21wb25lbnQodGFnLCBkYXRhLCBjb250ZXh0LCBjaGls
ZHJlbik7XG4gIH1cbiAgaWYgKGlzRGVmKHZub2RlKSkge1xuICAgIGlmIChucykgeyBhcHBseU5T
KHZub2RlLCBucyk7IH1cbiAgICByZXR1cm4gdm5vZGVcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4g
Y3JlYXRlRW1wdHlWTm9kZSgpXG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwbHlOUyAodm5vZGUsIG5z
KSB7XG4gIHZub2RlLm5zID0gbnM7XG4gIGlmICh2bm9kZS50YWcgPT09ICdmb3JlaWduT2JqZWN0
Jykge1xuICAgIC8vIHVzZSBkZWZhdWx0IG5hbWVzcGFjZSBpbnNpZGUgZm9yZWlnbk9iamVjdFxu
ICAgIHJldHVyblxuICB9XG4gIGlmIChpc0RlZih2bm9kZS5jaGlsZHJlbikpIHtcbiAgICBmb3Ig
KHZhciBpID0gMCwgbCA9IHZub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAg
ICAgdmFyIGNoaWxkID0gdm5vZGUuY2hpbGRyZW5baV07XG4gICAgICBpZiAoaXNEZWYoY2hpbGQu
dGFnKSAmJiBpc1VuZGVmKGNoaWxkLm5zKSkge1xuICAgICAgICBhcHBseU5TKGNoaWxkLCBucyk7
XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qICAqL1xuXG4vKipcbiAqIFJ1bnRpbWUgaGVs
cGVyIGZvciByZW5kZXJpbmcgdi1mb3IgbGlzdHMuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlckxpc3Qg
KFxuICB2YWwsXG4gIHJlbmRlclxuKSB7XG4gIHZhciByZXQsIGksIGwsIGtleXMsIGtleTtcbiAg
aWYgKEFycmF5LmlzQXJyYXkodmFsKSB8fCB0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAg
IHJldCA9IG5ldyBBcnJheSh2YWwubGVuZ3RoKTtcbiAgICBmb3IgKGkgPSAwLCBsID0gdmFsLmxl
bmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgcmV0W2ldID0gcmVuZGVyKHZhbFtpXSwgaSk7XG4g
ICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgcmV0ID0g
bmV3IEFycmF5KHZhbCk7XG4gICAgZm9yIChpID0gMDsgaSA8IHZhbDsgaSsrKSB7XG4gICAgICBy
ZXRbaV0gPSByZW5kZXIoaSArIDEsIGkpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc09iamVjdCh2
YWwpKSB7XG4gICAga2V5cyA9IE9iamVjdC5rZXlzKHZhbCk7XG4gICAgcmV0ID0gbmV3IEFycmF5
KGtleXMubGVuZ3RoKTtcbiAgICBmb3IgKGkgPSAwLCBsID0ga2V5cy5sZW5ndGg7IGkgPCBsOyBp
KyspIHtcbiAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICByZXRbaV0gPSByZW5kZXIodmFsW2tl
eV0sIGtleSwgaSk7XG4gICAgfVxuICB9XG4gIGlmIChpc0RlZihyZXQpKSB7XG4gICAgKHJldCku
X2lzVkxpc3QgPSB0cnVlO1xuICB9XG4gIHJldHVybiByZXRcbn1cblxuLyogICovXG5cbi8qKlxu
ICogUnVudGltZSBoZWxwZXIgZm9yIHJlbmRlcmluZyA8c2xvdD5cbiAqL1xuZnVuY3Rpb24gcmVu
ZGVyU2xvdCAoXG4gIG5hbWUsXG4gIGZhbGxiYWNrLFxuICBwcm9wcyxcbiAgYmluZE9iamVjdFxu
KSB7XG4gIHZhciBzY29wZWRTbG90Rm4gPSB0aGlzLiRzY29wZWRTbG90c1tuYW1lXTtcbiAgaWYg
KHNjb3BlZFNsb3RGbikgeyAvLyBzY29wZWQgc2xvdFxuICAgIHByb3BzID0gcHJvcHMgfHwge307
XG4gICAgaWYgKGJpbmRPYmplY3QpIHtcbiAgICAgIHByb3BzID0gZXh0ZW5kKGV4dGVuZCh7fSwg
YmluZE9iamVjdCksIHByb3BzKTtcbiAgICB9XG4gICAgcmV0dXJuIHNjb3BlZFNsb3RGbihwcm9w
cykgfHwgZmFsbGJhY2tcbiAgfSBlbHNlIHtcbiAgICB2YXIgc2xvdE5vZGVzID0gdGhpcy4kc2xv
dHNbbmFtZV07XG4gICAgLy8gd2FybiBkdXBsaWNhdGUgc2xvdCB1c2FnZVxuICAgIGlmIChzbG90
Tm9kZXMgJiYgXCJwcm9kdWN0aW9uXCIgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgc2xvdE5v
ZGVzLl9yZW5kZXJlZCAmJiB3YXJuKFxuICAgICAgICBcIkR1cGxpY2F0ZSBwcmVzZW5jZSBvZiBz
bG90IFxcXCJcIiArIG5hbWUgKyBcIlxcXCIgZm91bmQgaW4gdGhlIHNhbWUgcmVuZGVyIHRyZWUg
XCIgK1xuICAgICAgICBcIi0gdGhpcyB3aWxsIGxpa2VseSBjYXVzZSByZW5kZXIgZXJyb3JzLlwi
LFxuICAgICAgICB0aGlzXG4gICAgICApO1xuICAgICAgc2xvdE5vZGVzLl9yZW5kZXJlZCA9IHRy
dWU7XG4gICAgfVxuICAgIHJldHVybiBzbG90Tm9kZXMgfHwgZmFsbGJhY2tcbiAgfVxufVxuXG4v
KiAgKi9cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgcmVzb2x2aW5nIGZpbHRlcnNcbiAq
L1xuZnVuY3Rpb24gcmVzb2x2ZUZpbHRlciAoaWQpIHtcbiAgcmV0dXJuIHJlc29sdmVBc3NldCh0
aGlzLiRvcHRpb25zLCAnZmlsdGVycycsIGlkLCB0cnVlKSB8fCBpZGVudGl0eVxufVxuXG4vKiAg
Ki9cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgY2hlY2tpbmcga2V5Q29kZXMgZnJvbSBj
b25maWcuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrS2V5Q29kZXMgKFxuICBldmVudEtleUNvZGUsXG4g
IGtleSxcbiAgYnVpbHRJbkFsaWFzXG4pIHtcbiAgdmFyIGtleUNvZGVzID0gY29uZmlnLmtleUNv
ZGVzW2tleV0gfHwgYnVpbHRJbkFsaWFzO1xuICBpZiAoQXJyYXkuaXNBcnJheShrZXlDb2Rlcykp
IHtcbiAgICByZXR1cm4ga2V5Q29kZXMuaW5kZXhPZihldmVudEtleUNvZGUpID09PSAtMVxuICB9
IGVsc2Uge1xuICAgIHJldHVybiBrZXlDb2RlcyAhPT0gZXZlbnRLZXlDb2RlXG4gIH1cbn1cblxu
LyogICovXG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIG1lcmdpbmcgdi1iaW5kPVwib2Jq
ZWN0XCIgaW50byBhIFZOb2RlJ3MgZGF0YS5cbiAqL1xuZnVuY3Rpb24gYmluZE9iamVjdFByb3Bz
IChcbiAgZGF0YSxcbiAgdGFnLFxuICB2YWx1ZSxcbiAgYXNQcm9wLFxuICBpc1N5bmNcbikge1xu
ICBpZiAodmFsdWUpIHtcbiAgICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgXCJwcm9k
dWN0aW9uXCIgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICAndi1iaW5kIHdpdGhv
dXQgYXJndW1lbnQgZXhwZWN0cyBhbiBPYmplY3Qgb3IgQXJyYXkgdmFsdWUnLFxuICAgICAgICB0
aGlzXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1
ZSkpIHtcbiAgICAgICAgdmFsdWUgPSB0b09iamVjdCh2YWx1ZSk7XG4gICAgICB9XG4gICAgICB2
YXIgaGFzaDtcbiAgICAgIHZhciBsb29wID0gZnVuY3Rpb24gKCBrZXkgKSB7XG4gICAgICAgIGlm
IChcbiAgICAgICAgICBrZXkgPT09ICdjbGFzcycgfHxcbiAgICAgICAgICBrZXkgPT09ICdzdHls
ZScgfHxcbiAgICAgICAgICBpc1Jlc2VydmVkQXR0cmlidXRlKGtleSlcbiAgICAgICAgKSB7XG4g
ICAgICAgICAgaGFzaCA9IGRhdGE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHR5
cGUgPSBkYXRhLmF0dHJzICYmIGRhdGEuYXR0cnMudHlwZTtcbiAgICAgICAgICBoYXNoID0gYXNQ
cm9wIHx8IGNvbmZpZy5tdXN0VXNlUHJvcCh0YWcsIHR5cGUsIGtleSlcbiAgICAgICAgICAgID8g
ZGF0YS5kb21Qcm9wcyB8fCAoZGF0YS5kb21Qcm9wcyA9IHt9KVxuICAgICAgICAgICAgOiBkYXRh
LmF0dHJzIHx8IChkYXRhLmF0dHJzID0ge30pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKGtl
eSBpbiBoYXNoKSkge1xuICAgICAgICAgIGhhc2hba2V5XSA9IHZhbHVlW2tleV07XG5cbiAgICAg
ICAgICBpZiAoaXNTeW5jKSB7XG4gICAgICAgICAgICB2YXIgb24gPSBkYXRhLm9uIHx8IChkYXRh
Lm9uID0ge30pO1xuICAgICAgICAgICAgb25bKFwidXBkYXRlOlwiICsga2V5KV0gPSBmdW5jdGlv
biAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgIHZhbHVlW2tleV0gPSAkZXZlbnQ7XG4gICAgICAg
ICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9yICh2
YXIga2V5IGluIHZhbHVlKSBsb29wKCBrZXkgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRhdGFc
bn1cblxuLyogICovXG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHJlbmRlcmluZyBzdGF0
aWMgdHJlZXMuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlclN0YXRpYyAoXG4gIGluZGV4LFxuICBpc0lu
Rm9yXG4pIHtcbiAgdmFyIHRyZWUgPSB0aGlzLl9zdGF0aWNUcmVlc1tpbmRleF07XG4gIC8vIGlm
IGhhcyBhbHJlYWR5LXJlbmRlcmVkIHN0YXRpYyB0cmVlIGFuZCBub3QgaW5zaWRlIHYtZm9yLFxu
ICAvLyB3ZSBjYW4gcmV1c2UgdGhlIHNhbWUgdHJlZSBieSBkb2luZyBhIHNoYWxsb3cgY2xvbmUu
XG4gIGlmICh0cmVlICYmICFpc0luRm9yKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodHJl
ZSlcbiAgICAgID8gY2xvbmVWTm9kZXModHJlZSlcbiAgICAgIDogY2xvbmVWTm9kZSh0cmVlKVxu
ICB9XG4gIC8vIG90aGVyd2lzZSwgcmVuZGVyIGEgZnJlc2ggdHJlZS5cbiAgdHJlZSA9IHRoaXMu
X3N0YXRpY1RyZWVzW2luZGV4XSA9XG4gICAgdGhpcy4kb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnNb
aW5kZXhdLmNhbGwodGhpcy5fcmVuZGVyUHJveHkpO1xuICBtYXJrU3RhdGljKHRyZWUsIChcIl9f
c3RhdGljX19cIiArIGluZGV4KSwgZmFsc2UpO1xuICByZXR1cm4gdHJlZVxufVxuXG4vKipcbiAq
IFJ1bnRpbWUgaGVscGVyIGZvciB2LW9uY2UuXG4gKiBFZmZlY3RpdmVseSBpdCBtZWFucyBtYXJr
aW5nIHRoZSBub2RlIGFzIHN0YXRpYyB3aXRoIGEgdW5pcXVlIGtleS5cbiAqL1xuZnVuY3Rpb24g
bWFya09uY2UgKFxuICB0cmVlLFxuICBpbmRleCxcbiAga2V5XG4pIHtcbiAgbWFya1N0YXRpYyh0
cmVlLCAoXCJfX29uY2VfX1wiICsgaW5kZXggKyAoa2V5ID8gKFwiX1wiICsga2V5KSA6IFwiXCIp
KSwgdHJ1ZSk7XG4gIHJldHVybiB0cmVlXG59XG5cbmZ1bmN0aW9uIG1hcmtTdGF0aWMgKFxuICB0
cmVlLFxuICBrZXksXG4gIGlzT25jZVxuKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHRyZWUpKSB7
XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAo
dHJlZVtpXSAmJiB0eXBlb2YgdHJlZVtpXSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgbWFya1N0
YXRpY05vZGUodHJlZVtpXSwgKGtleSArIFwiX1wiICsgaSksIGlzT25jZSk7XG4gICAgICB9XG4g
ICAgfVxuICB9IGVsc2Uge1xuICAgIG1hcmtTdGF0aWNOb2RlKHRyZWUsIGtleSwgaXNPbmNlKTtc
biAgfVxufVxuXG5mdW5jdGlvbiBtYXJrU3RhdGljTm9kZSAobm9kZSwga2V5LCBpc09uY2UpIHtc
biAgbm9kZS5pc1N0YXRpYyA9IHRydWU7XG4gIG5vZGUua2V5ID0ga2V5O1xuICBub2RlLmlzT25j
ZSA9IGlzT25jZTtcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGJpbmRPYmplY3RMaXN0ZW5lcnMg
KGRhdGEsIHZhbHVlKSB7XG4gIGlmICh2YWx1ZSkge1xuICAgIGlmICghaXNQbGFpbk9iamVjdCh2
YWx1ZSkpIHtcbiAgICAgIFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicgJiYgd2Fybihc
biAgICAgICAgJ3Ytb24gd2l0aG91dCBhcmd1bWVudCBleHBlY3RzIGFuIE9iamVjdCB2YWx1ZScs
XG4gICAgICAgIHRoaXNcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBvbiA9IGRh
dGEub24gPSBkYXRhLm9uID8gZXh0ZW5kKHt9LCBkYXRhLm9uKSA6IHt9O1xuICAgICAgZm9yICh2
YXIga2V5IGluIHZhbHVlKSB7XG4gICAgICAgIHZhciBleGlzdGluZyA9IG9uW2tleV07XG4gICAg
ICAgIHZhciBvdXJzID0gdmFsdWVba2V5XTtcbiAgICAgICAgb25ba2V5XSA9IGV4aXN0aW5nID8g
W10uY29uY2F0KG91cnMsIGV4aXN0aW5nKSA6IG91cnM7XG4gICAgICB9XG4gICAgfVxuICB9XG4g
IHJldHVybiBkYXRhXG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBpbml0UmVuZGVyICh2bSkge1xu
ICB2bS5fdm5vZGUgPSBudWxsOyAvLyB0aGUgcm9vdCBvZiB0aGUgY2hpbGQgdHJlZVxuICB2bS5f
c3RhdGljVHJlZXMgPSBudWxsO1xuICB2YXIgcGFyZW50Vm5vZGUgPSB2bS4kdm5vZGUgPSB2bS4k
b3B0aW9ucy5fcGFyZW50Vm5vZGU7IC8vIHRoZSBwbGFjZWhvbGRlciBub2RlIGluIHBhcmVudCB0
cmVlXG4gIHZhciByZW5kZXJDb250ZXh0ID0gcGFyZW50Vm5vZGUgJiYgcGFyZW50Vm5vZGUuY29u
dGV4dDtcbiAgdm0uJHNsb3RzID0gcmVzb2x2ZVNsb3RzKHZtLiRvcHRpb25zLl9yZW5kZXJDaGls
ZHJlbiwgcmVuZGVyQ29udGV4dCk7XG4gIHZtLiRzY29wZWRTbG90cyA9IGVtcHR5T2JqZWN0O1xu
ICAvLyBiaW5kIHRoZSBjcmVhdGVFbGVtZW50IGZuIHRvIHRoaXMgaW5zdGFuY2VcbiAgLy8gc28g
dGhhdCB3ZSBnZXQgcHJvcGVyIHJlbmRlciBjb250ZXh0IGluc2lkZSBpdC5cbiAgLy8gYXJncyBv
cmRlcjogdGFnLCBkYXRhLCBjaGlsZHJlbiwgbm9ybWFsaXphdGlvblR5cGUsIGFsd2F5c05vcm1h
bGl6ZVxuICAvLyBpbnRlcm5hbCB2ZXJzaW9uIGlzIHVzZWQgYnkgcmVuZGVyIGZ1bmN0aW9ucyBj
b21waWxlZCBmcm9tIHRlbXBsYXRlc1xuICB2bS5fYyA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7
IHJldHVybiBjcmVhdGVFbGVtZW50KHZtLCBhLCBiLCBjLCBkLCBmYWxzZSk7IH07XG4gIC8vIG5v
cm1hbGl6YXRpb24gaXMgYWx3YXlzIGFwcGxpZWQgZm9yIHRoZSBwdWJsaWMgdmVyc2lvbiwgdXNl
ZCBpblxuICAvLyB1c2VyLXdyaXR0ZW4gcmVuZGVyIGZ1bmN0aW9ucy5cbiAgdm0uJGNyZWF0ZUVs
ZW1lbnQgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkgeyByZXR1cm4gY3JlYXRlRWxlbWVudCh2bSwg
YSwgYiwgYywgZCwgdHJ1ZSk7IH07XG5cbiAgLy8gJGF0dHJzICYgJGxpc3RlbmVycyBhcmUgZXhw
b3NlZCBmb3IgZWFzaWVyIEhPQyBjcmVhdGlvbi5cbiAgLy8gdGhleSBuZWVkIHRvIGJlIHJlYWN0
aXZlIHNvIHRoYXQgSE9DcyB1c2luZyB0aGVtIGFyZSBhbHdheXMgdXBkYXRlZFxuICB2YXIgcGFy
ZW50RGF0YSA9IHBhcmVudFZub2RlICYmIHBhcmVudFZub2RlLmRhdGE7XG4gIC8qIGlzdGFuYnVs
IGlnbm9yZSBlbHNlICovXG4gIGlmIChmYWxzZSkge1xuICAgIGRlZmluZVJlYWN0aXZlJCQxKHZt
LCAnJGF0dHJzJywgcGFyZW50RGF0YSAmJiBwYXJlbnREYXRhLmF0dHJzLCBmdW5jdGlvbiAoKSB7
XG4gICAgICAhaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50ICYmIHdhcm4oXCIkYXR0cnMgaXMgcmVh
ZG9ubHkuXCIsIHZtKTtcbiAgICB9LCB0cnVlKTtcbiAgICBkZWZpbmVSZWFjdGl2ZSQkMSh2bSwg
JyRsaXN0ZW5lcnMnLCB2bS4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzLCBmdW5jdGlvbiAoKSB7
XG4gICAgICAhaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50ICYmIHdhcm4oXCIkbGlzdGVuZXJzIGlz
IHJlYWRvbmx5LlwiLCB2bSk7XG4gICAgfSwgdHJ1ZSk7XG4gIH0gZWxzZSB7XG4gICAgZGVmaW5l
UmVhY3RpdmUkJDEodm0sICckYXR0cnMnLCBwYXJlbnREYXRhICYmIHBhcmVudERhdGEuYXR0cnMs
IG51bGwsIHRydWUpO1xuICAgIGRlZmluZVJlYWN0aXZlJCQxKHZtLCAnJGxpc3RlbmVycycsIHZt
LiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnMsIG51bGwsIHRydWUpO1xuICB9XG59XG5cbmZ1bmN0
aW9uIHJlbmRlck1peGluIChWdWUpIHtcbiAgVnVlLnByb3RvdHlwZS4kbmV4dFRpY2sgPSBmdW5j
dGlvbiAoZm4pIHtcbiAgICByZXR1cm4gbmV4dFRpY2soZm4sIHRoaXMpXG4gIH07XG5cbiAgVnVl
LnByb3RvdHlwZS5fcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB2bSA9IHRoaXM7XG4g
ICAgdmFyIHJlZiA9IHZtLiRvcHRpb25zO1xuICAgIHZhciByZW5kZXIgPSByZWYucmVuZGVyO1xu
ICAgIHZhciBzdGF0aWNSZW5kZXJGbnMgPSByZWYuc3RhdGljUmVuZGVyRm5zO1xuICAgIHZhciBf
cGFyZW50Vm5vZGUgPSByZWYuX3BhcmVudFZub2RlO1xuXG4gICAgaWYgKHZtLl9pc01vdW50ZWQp
IHtcbiAgICAgIC8vIGNsb25lIHNsb3Qgbm9kZXMgb24gcmUtcmVuZGVyc1xuICAgICAgZm9yICh2
YXIga2V5IGluIHZtLiRzbG90cykge1xuICAgICAgICB2bS4kc2xvdHNba2V5XSA9IGNsb25lVk5v
ZGVzKHZtLiRzbG90c1trZXldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2bS4kc2NvcGVkU2xv
dHMgPSAoX3BhcmVudFZub2RlICYmIF9wYXJlbnRWbm9kZS5kYXRhLnNjb3BlZFNsb3RzKSB8fCBl
bXB0eU9iamVjdDtcblxuICAgIGlmIChzdGF0aWNSZW5kZXJGbnMgJiYgIXZtLl9zdGF0aWNUcmVl
cykge1xuICAgICAgdm0uX3N0YXRpY1RyZWVzID0gW107XG4gICAgfVxuICAgIC8vIHNldCBwYXJl
bnQgdm5vZGUuIHRoaXMgYWxsb3dzIHJlbmRlciBmdW5jdGlvbnMgdG8gaGF2ZSBhY2Nlc3NcbiAg
ICAvLyB0byB0aGUgZGF0YSBvbiB0aGUgcGxhY2Vob2xkZXIgbm9kZS5cbiAgICB2bS4kdm5vZGUg
PSBfcGFyZW50Vm5vZGU7XG4gICAgLy8gcmVuZGVyIHNlbGZcbiAgICB2YXIgdm5vZGU7XG4gICAg
dHJ5IHtcbiAgICAgIHZub2RlID0gcmVuZGVyLmNhbGwodm0uX3JlbmRlclByb3h5LCB2bS4kY3Jl
YXRlRWxlbWVudCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaGFuZGxlRXJyb3IoZSwgdm0s
IFwicmVuZGVyIGZ1bmN0aW9uXCIpO1xuICAgICAgLy8gcmV0dXJuIGVycm9yIHJlbmRlciByZXN1
bHQsXG4gICAgICAvLyBvciBwcmV2aW91cyB2bm9kZSB0byBwcmV2ZW50IHJlbmRlciBlcnJvciBj
YXVzaW5nIGJsYW5rIGNvbXBvbmVudFxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9c
biAgICAgIGlmIChmYWxzZSkge1xuICAgICAgICB2bm9kZSA9IHZtLiRvcHRpb25zLnJlbmRlckVy
cm9yXG4gICAgICAgICAgPyB2bS4kb3B0aW9ucy5yZW5kZXJFcnJvci5jYWxsKHZtLl9yZW5kZXJQ
cm94eSwgdm0uJGNyZWF0ZUVsZW1lbnQsIGUpXG4gICAgICAgICAgOiB2bS5fdm5vZGU7XG4gICAg
ICB9IGVsc2Uge1xuICAgICAgICB2bm9kZSA9IHZtLl92bm9kZTtcbiAgICAgIH1cbiAgICB9XG4g
ICAgLy8gcmV0dXJuIGVtcHR5IHZub2RlIGluIGNhc2UgdGhlIHJlbmRlciBmdW5jdGlvbiBlcnJv
cmVkIG91dFxuICAgIGlmICghKHZub2RlIGluc3RhbmNlb2YgVk5vZGUpKSB7XG4gICAgICBpZiAo
ZmFsc2UpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAnTXVsdGlwbGUgcm9vdCBub2RlcyBy
ZXR1cm5lZCBmcm9tIHJlbmRlciBmdW5jdGlvbi4gUmVuZGVyIGZ1bmN0aW9uICcgK1xuICAgICAg
ICAgICdzaG91bGQgcmV0dXJuIGEgc2luZ2xlIHJvb3Qgbm9kZS4nLFxuICAgICAgICAgIHZtXG4g
ICAgICAgICk7XG4gICAgICB9XG4gICAgICB2bm9kZSA9IGNyZWF0ZUVtcHR5Vk5vZGUoKTtcbiAg
ICB9XG4gICAgLy8gc2V0IHBhcmVudFxuICAgIHZub2RlLnBhcmVudCA9IF9wYXJlbnRWbm9kZTtc
biAgICByZXR1cm4gdm5vZGVcbiAgfTtcblxuICAvLyBpbnRlcm5hbCByZW5kZXIgaGVscGVycy5c
biAgLy8gdGhlc2UgYXJlIGV4cG9zZWQgb24gdGhlIGluc3RhbmNlIHByb3RvdHlwZSB0byByZWR1
Y2UgZ2VuZXJhdGVkIHJlbmRlclxuICAvLyBjb2RlIHNpemUuXG4gIFZ1ZS5wcm90b3R5cGUuX28g
PSBtYXJrT25jZTtcbiAgVnVlLnByb3RvdHlwZS5fbiA9IHRvTnVtYmVyO1xuICBWdWUucHJvdG90
eXBlLl9zID0gdG9TdHJpbmc7XG4gIFZ1ZS5wcm90b3R5cGUuX2wgPSByZW5kZXJMaXN0O1xuICBW
dWUucHJvdG90eXBlLl90ID0gcmVuZGVyU2xvdDtcbiAgVnVlLnByb3RvdHlwZS5fcSA9IGxvb3Nl
RXF1YWw7XG4gIFZ1ZS5wcm90b3R5cGUuX2kgPSBsb29zZUluZGV4T2Y7XG4gIFZ1ZS5wcm90b3R5
cGUuX20gPSByZW5kZXJTdGF0aWM7XG4gIFZ1ZS5wcm90b3R5cGUuX2YgPSByZXNvbHZlRmlsdGVy
O1xuICBWdWUucHJvdG90eXBlLl9rID0gY2hlY2tLZXlDb2RlcztcbiAgVnVlLnByb3RvdHlwZS5f
YiA9IGJpbmRPYmplY3RQcm9wcztcbiAgVnVlLnByb3RvdHlwZS5fdiA9IGNyZWF0ZVRleHRWTm9k
ZTtcbiAgVnVlLnByb3RvdHlwZS5fZSA9IGNyZWF0ZUVtcHR5Vk5vZGU7XG4gIFZ1ZS5wcm90b3R5
cGUuX3UgPSByZXNvbHZlU2NvcGVkU2xvdHM7XG4gIFZ1ZS5wcm90b3R5cGUuX2cgPSBiaW5kT2Jq
ZWN0TGlzdGVuZXJzO1xufVxuXG4vKiAgKi9cblxudmFyIHVpZCQxID0gMDtcblxuZnVuY3Rpb24g
aW5pdE1peGluIChWdWUpIHtcbiAgVnVlLnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uIChvcHRp
b25zKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICAvLyBhIHVpZFxuICAgIHZtLl91aWQgPSB1
aWQkMSsrO1xuXG4gICAgdmFyIHN0YXJ0VGFnLCBlbmRUYWc7XG4gICAgLyogaXN0YW5idWwgaWdu
b3JlIGlmICovXG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICBzdGFydFRhZyA9IFwidnVlLXBlcmYt
aW5pdDpcIiArICh2bS5fdWlkKTtcbiAgICAgIGVuZFRhZyA9IFwidnVlLXBlcmYtZW5kOlwiICsg
KHZtLl91aWQpO1xuICAgICAgbWFyayhzdGFydFRhZyk7XG4gICAgfVxuXG4gICAgLy8gYSBmbGFn
IHRvIGF2b2lkIHRoaXMgYmVpbmcgb2JzZXJ2ZWRcbiAgICB2bS5faXNWdWUgPSB0cnVlO1xuICAg
IC8vIG1lcmdlIG9wdGlvbnNcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLl9pc0NvbXBvbmVu
dCkge1xuICAgICAgLy8gb3B0aW1pemUgaW50ZXJuYWwgY29tcG9uZW50IGluc3RhbnRpYXRpb25c
biAgICAgIC8vIHNpbmNlIGR5bmFtaWMgb3B0aW9ucyBtZXJnaW5nIGlzIHByZXR0eSBzbG93LCBh
bmQgbm9uZSBvZiB0aGVcbiAgICAgIC8vIGludGVybmFsIGNvbXBvbmVudCBvcHRpb25zIG5lZWRz
IHNwZWNpYWwgdHJlYXRtZW50LlxuICAgICAgaW5pdEludGVybmFsQ29tcG9uZW50KHZtLCBvcHRp
b25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdm0uJG9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoXG4g
ICAgICAgIHJlc29sdmVDb25zdHJ1Y3Rvck9wdGlvbnModm0uY29uc3RydWN0b3IpLFxuICAgICAg
ICBvcHRpb25zIHx8IHt9LFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9XG4gICAgLyogaXN0
YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgIGluaXRQcm94eSh2
bSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZtLl9yZW5kZXJQcm94eSA9IHZtO1xuICAgIH1cbiAg
ICAvLyBleHBvc2UgcmVhbCBzZWxmXG4gICAgdm0uX3NlbGYgPSB2bTtcbiAgICBpbml0TGlmZWN5
Y2xlKHZtKTtcbiAgICBpbml0RXZlbnRzKHZtKTtcbiAgICBpbml0UmVuZGVyKHZtKTtcbiAgICBj
YWxsSG9vayh2bSwgJ2JlZm9yZUNyZWF0ZScpO1xuICAgIGluaXRJbmplY3Rpb25zKHZtKTsgLy8g
cmVzb2x2ZSBpbmplY3Rpb25zIGJlZm9yZSBkYXRhL3Byb3BzXG4gICAgaW5pdFN0YXRlKHZtKTtc
biAgICBpbml0UHJvdmlkZSh2bSk7IC8vIHJlc29sdmUgcHJvdmlkZSBhZnRlciBkYXRhL3Byb3Bz
XG4gICAgY2FsbEhvb2sodm0sICdjcmVhdGVkJyk7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUg
aWYgKi9cbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgIHZtLl9uYW1lID0gZm9ybWF0Q29tcG9uZW50
TmFtZSh2bSwgZmFsc2UpO1xuICAgICAgbWFyayhlbmRUYWcpO1xuICAgICAgbWVhc3VyZSgoKHZt
Ll9uYW1lKSArIFwiIGluaXRcIiksIHN0YXJ0VGFnLCBlbmRUYWcpO1xuICAgIH1cblxuICAgIGlm
ICh2bS4kb3B0aW9ucy5lbCkge1xuICAgICAgdm0uJG1vdW50KHZtLiRvcHRpb25zLmVsKTtcbiAg
ICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGluaXRJbnRlcm5hbENvbXBvbmVudCAodm0sIG9wdGlv
bnMpIHtcbiAgdmFyIG9wdHMgPSB2bS4kb3B0aW9ucyA9IE9iamVjdC5jcmVhdGUodm0uY29uc3Ry
dWN0b3Iub3B0aW9ucyk7XG4gIC8vIGRvaW5nIHRoaXMgYmVjYXVzZSBpdCdzIGZhc3RlciB0aGFu
IGR5bmFtaWMgZW51bWVyYXRpb24uXG4gIG9wdHMucGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XG4g
IG9wdHMucHJvcHNEYXRhID0gb3B0aW9ucy5wcm9wc0RhdGE7XG4gIG9wdHMuX3BhcmVudFZub2Rl
ID0gb3B0aW9ucy5fcGFyZW50Vm5vZGU7XG4gIG9wdHMuX3BhcmVudExpc3RlbmVycyA9IG9wdGlv
bnMuX3BhcmVudExpc3RlbmVycztcbiAgb3B0cy5fcmVuZGVyQ2hpbGRyZW4gPSBvcHRpb25zLl9y
ZW5kZXJDaGlsZHJlbjtcbiAgb3B0cy5fY29tcG9uZW50VGFnID0gb3B0aW9ucy5fY29tcG9uZW50
VGFnO1xuICBvcHRzLl9wYXJlbnRFbG0gPSBvcHRpb25zLl9wYXJlbnRFbG07XG4gIG9wdHMuX3Jl
ZkVsbSA9IG9wdGlvbnMuX3JlZkVsbTtcbiAgaWYgKG9wdGlvbnMucmVuZGVyKSB7XG4gICAgb3B0
cy5yZW5kZXIgPSBvcHRpb25zLnJlbmRlcjtcbiAgICBvcHRzLnN0YXRpY1JlbmRlckZucyA9IG9w
dGlvbnMuc3RhdGljUmVuZGVyRm5zO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVDb25zdHJ1
Y3Rvck9wdGlvbnMgKEN0b3IpIHtcbiAgdmFyIG9wdGlvbnMgPSBDdG9yLm9wdGlvbnM7XG4gIGlm
IChDdG9yLnN1cGVyKSB7XG4gICAgdmFyIHN1cGVyT3B0aW9ucyA9IHJlc29sdmVDb25zdHJ1Y3Rv
ck9wdGlvbnMoQ3Rvci5zdXBlcik7XG4gICAgdmFyIGNhY2hlZFN1cGVyT3B0aW9ucyA9IEN0b3Iu
c3VwZXJPcHRpb25zO1xuICAgIGlmIChzdXBlck9wdGlvbnMgIT09IGNhY2hlZFN1cGVyT3B0aW9u
cykge1xuICAgICAgLy8gc3VwZXIgb3B0aW9uIGNoYW5nZWQsXG4gICAgICAvLyBuZWVkIHRvIHJl
c29sdmUgbmV3IG9wdGlvbnMuXG4gICAgICBDdG9yLnN1cGVyT3B0aW9ucyA9IHN1cGVyT3B0aW9u
cztcbiAgICAgIC8vIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgbGF0ZS1tb2RpZmllZC9hdHRhY2hl
ZCBvcHRpb25zICgjNDk3NilcbiAgICAgIHZhciBtb2RpZmllZE9wdGlvbnMgPSByZXNvbHZlTW9k
aWZpZWRPcHRpb25zKEN0b3IpO1xuICAgICAgLy8gdXBkYXRlIGJhc2UgZXh0ZW5kIG9wdGlvbnNc
biAgICAgIGlmIChtb2RpZmllZE9wdGlvbnMpIHtcbiAgICAgICAgZXh0ZW5kKEN0b3IuZXh0ZW5k
T3B0aW9ucywgbW9kaWZpZWRPcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMgPSBDdG9y
Lm9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoc3VwZXJPcHRpb25zLCBDdG9yLmV4dGVuZE9wdGlvbnMp
O1xuICAgICAgaWYgKG9wdGlvbnMubmFtZSkge1xuICAgICAgICBvcHRpb25zLmNvbXBvbmVudHNb
b3B0aW9ucy5uYW1lXSA9IEN0b3I7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBvcHRp
b25zXG59XG5cbmZ1bmN0aW9uIHJlc29sdmVNb2RpZmllZE9wdGlvbnMgKEN0b3IpIHtcbiAgdmFy
IG1vZGlmaWVkO1xuICB2YXIgbGF0ZXN0ID0gQ3Rvci5vcHRpb25zO1xuICB2YXIgZXh0ZW5kZWQg
PSBDdG9yLmV4dGVuZE9wdGlvbnM7XG4gIHZhciBzZWFsZWQgPSBDdG9yLnNlYWxlZE9wdGlvbnM7
XG4gIGZvciAodmFyIGtleSBpbiBsYXRlc3QpIHtcbiAgICBpZiAobGF0ZXN0W2tleV0gIT09IHNl
YWxlZFtrZXldKSB7XG4gICAgICBpZiAoIW1vZGlmaWVkKSB7IG1vZGlmaWVkID0ge307IH1cbiAg
ICAgIG1vZGlmaWVkW2tleV0gPSBkZWR1cGUobGF0ZXN0W2tleV0sIGV4dGVuZGVkW2tleV0sIHNl
YWxlZFtrZXldKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1vZGlmaWVkXG59XG5cbmZ1bmN0aW9u
IGRlZHVwZSAobGF0ZXN0LCBleHRlbmRlZCwgc2VhbGVkKSB7XG4gIC8vIGNvbXBhcmUgbGF0ZXN0
IGFuZCBzZWFsZWQgdG8gZW5zdXJlIGxpZmVjeWNsZSBob29rcyB3b24ndCBiZSBkdXBsaWNhdGVk
XG4gIC8vIGJldHdlZW4gbWVyZ2VzXG4gIGlmIChBcnJheS5pc0FycmF5KGxhdGVzdCkpIHtcbiAg
ICB2YXIgcmVzID0gW107XG4gICAgc2VhbGVkID0gQXJyYXkuaXNBcnJheShzZWFsZWQpID8gc2Vh
bGVkIDogW3NlYWxlZF07XG4gICAgZXh0ZW5kZWQgPSBBcnJheS5pc0FycmF5KGV4dGVuZGVkKSA/
IGV4dGVuZGVkIDogW2V4dGVuZGVkXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxhdGVzdC5s
ZW5ndGg7IGkrKykge1xuICAgICAgLy8gcHVzaCBvcmlnaW5hbCBvcHRpb25zIGFuZCBub3Qgc2Vh
bGVkIG9wdGlvbnMgdG8gZXhjbHVkZSBkdXBsaWNhdGVkIG9wdGlvbnNcbiAgICAgIGlmIChleHRl
bmRlZC5pbmRleE9mKGxhdGVzdFtpXSkgPj0gMCB8fCBzZWFsZWQuaW5kZXhPZihsYXRlc3RbaV0p
IDwgMCkge1xuICAgICAgICByZXMucHVzaChsYXRlc3RbaV0pO1xuICAgICAgfVxuICAgIH1cbiAg
ICByZXR1cm4gcmVzXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxhdGVzdFxuICB9XG59XG5cbmZ1
bmN0aW9uIFZ1ZSQzIChvcHRpb25zKSB7XG4gIGlmIChmYWxzZVxuICApIHtcbiAgICB3YXJuKCdW
dWUgaXMgYSBjb25zdHJ1Y3RvciBhbmQgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBgbmV3YCBr
ZXl3b3JkJyk7XG4gIH1cbiAgdGhpcy5faW5pdChvcHRpb25zKTtcbn1cblxuaW5pdE1peGluKFZ1
ZSQzKTtcbnN0YXRlTWl4aW4oVnVlJDMpO1xuZXZlbnRzTWl4aW4oVnVlJDMpO1xubGlmZWN5Y2xl
TWl4aW4oVnVlJDMpO1xucmVuZGVyTWl4aW4oVnVlJDMpO1xuXG4vKiAgKi9cblxuZnVuY3Rpb24g
aW5pdFVzZSAoVnVlKSB7XG4gIFZ1ZS51c2UgPSBmdW5jdGlvbiAocGx1Z2luKSB7XG4gICAgdmFy
IGluc3RhbGxlZFBsdWdpbnMgPSAodGhpcy5faW5zdGFsbGVkUGx1Z2lucyB8fCAodGhpcy5faW5z
dGFsbGVkUGx1Z2lucyA9IFtdKSk7XG4gICAgaWYgKGluc3RhbGxlZFBsdWdpbnMuaW5kZXhPZihw
bHVnaW4pID4gLTEpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgLy8gYWRkaXRp
b25hbCBwYXJhbWV0ZXJzXG4gICAgdmFyIGFyZ3MgPSB0b0FycmF5KGFyZ3VtZW50cywgMSk7XG4g
ICAgYXJncy51bnNoaWZ0KHRoaXMpO1xuICAgIGlmICh0eXBlb2YgcGx1Z2luLmluc3RhbGwgPT09
ICdmdW5jdGlvbicpIHtcbiAgICAgIHBsdWdpbi5pbnN0YWxsLmFwcGx5KHBsdWdpbiwgYXJncyk7
XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcGx1Z2luID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBw
bHVnaW4uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfVxuICAgIGluc3RhbGxlZFBsdWdpbnMucHVz
aChwbHVnaW4pO1xuICAgIHJldHVybiB0aGlzXG4gIH07XG59XG5cbi8qICAqL1xuXG5mdW5jdGlv
biBpbml0TWl4aW4kMSAoVnVlKSB7XG4gIFZ1ZS5taXhpbiA9IGZ1bmN0aW9uIChtaXhpbikge1xu
ICAgIHRoaXMub3B0aW9ucyA9IG1lcmdlT3B0aW9ucyh0aGlzLm9wdGlvbnMsIG1peGluKTtcbiAg
ICByZXR1cm4gdGhpc1xuICB9O1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdEV4dGVuZCAo
VnVlKSB7XG4gIC8qKlxuICAgKiBFYWNoIGluc3RhbmNlIGNvbnN0cnVjdG9yLCBpbmNsdWRpbmcg
VnVlLCBoYXMgYSB1bmlxdWVcbiAgICogY2lkLiBUaGlzIGVuYWJsZXMgdXMgdG8gY3JlYXRlIHdy
YXBwZWQgXCJjaGlsZFxuICAgKiBjb25zdHJ1Y3RvcnNcIiBmb3IgcHJvdG90eXBhbCBpbmhlcml0
YW5jZSBhbmQgY2FjaGUgdGhlbS5cbiAgICovXG4gIFZ1ZS5jaWQgPSAwO1xuICB2YXIgY2lkID0g
MTtcblxuICAvKipcbiAgICogQ2xhc3MgaW5oZXJpdGFuY2VcbiAgICovXG4gIFZ1ZS5leHRlbmQg
PSBmdW5jdGlvbiAoZXh0ZW5kT3B0aW9ucykge1xuICAgIGV4dGVuZE9wdGlvbnMgPSBleHRlbmRP
cHRpb25zIHx8IHt9O1xuICAgIHZhciBTdXBlciA9IHRoaXM7XG4gICAgdmFyIFN1cGVySWQgPSBT
dXBlci5jaWQ7XG4gICAgdmFyIGNhY2hlZEN0b3JzID0gZXh0ZW5kT3B0aW9ucy5fQ3RvciB8fCAo
ZXh0ZW5kT3B0aW9ucy5fQ3RvciA9IHt9KTtcbiAgICBpZiAoY2FjaGVkQ3RvcnNbU3VwZXJJZF0p
IHtcbiAgICAgIHJldHVybiBjYWNoZWRDdG9yc1tTdXBlcklkXVxuICAgIH1cblxuICAgIHZhciBu
YW1lID0gZXh0ZW5kT3B0aW9ucy5uYW1lIHx8IFN1cGVyLm9wdGlvbnMubmFtZTtcbiAgICBpZiAo
ZmFsc2UpIHtcbiAgICAgIGlmICghL15bYS16QS1aXVtcXHctXSokLy50ZXN0KG5hbWUpKSB7XG4g
ICAgICAgIHdhcm4oXG4gICAgICAgICAgJ0ludmFsaWQgY29tcG9uZW50IG5hbWU6IFwiJyArIG5h
bWUgKyAnXCIuIENvbXBvbmVudCBuYW1lcyAnICtcbiAgICAgICAgICAnY2FuIG9ubHkgY29udGFp
biBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgdGhlIGh5cGhlbiwgJyArXG4gICAgICAgICAg
J2FuZCBtdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAg
IH1cblxuICAgIHZhciBTdWIgPSBmdW5jdGlvbiBWdWVDb21wb25lbnQgKG9wdGlvbnMpIHtcbiAg
ICAgIHRoaXMuX2luaXQob3B0aW9ucyk7XG4gICAgfTtcbiAgICBTdWIucHJvdG90eXBlID0gT2Jq
ZWN0LmNyZWF0ZShTdXBlci5wcm90b3R5cGUpO1xuICAgIFN1Yi5wcm90b3R5cGUuY29uc3RydWN0
b3IgPSBTdWI7XG4gICAgU3ViLmNpZCA9IGNpZCsrO1xuICAgIFN1Yi5vcHRpb25zID0gbWVyZ2VP
cHRpb25zKFxuICAgICAgU3VwZXIub3B0aW9ucyxcbiAgICAgIGV4dGVuZE9wdGlvbnNcbiAgICAp
O1xuICAgIFN1Ylsnc3VwZXInXSA9IFN1cGVyO1xuXG4gICAgLy8gRm9yIHByb3BzIGFuZCBjb21w
dXRlZCBwcm9wZXJ0aWVzLCB3ZSBkZWZpbmUgdGhlIHByb3h5IGdldHRlcnMgb25cbiAgICAvLyB0
aGUgVnVlIGluc3RhbmNlcyBhdCBleHRlbnNpb24gdGltZSwgb24gdGhlIGV4dGVuZGVkIHByb3Rv
dHlwZS4gVGhpc1xuICAgIC8vIGF2b2lkcyBPYmplY3QuZGVmaW5lUHJvcGVydHkgY2FsbHMgZm9y
IGVhY2ggaW5zdGFuY2UgY3JlYXRlZC5cbiAgICBpZiAoU3ViLm9wdGlvbnMucHJvcHMpIHtcbiAg
ICAgIGluaXRQcm9wcyQxKFN1Yik7XG4gICAgfVxuICAgIGlmIChTdWIub3B0aW9ucy5jb21wdXRl
ZCkge1xuICAgICAgaW5pdENvbXB1dGVkJDEoU3ViKTtcbiAgICB9XG5cbiAgICAvLyBhbGxvdyBm
dXJ0aGVyIGV4dGVuc2lvbi9taXhpbi9wbHVnaW4gdXNhZ2VcbiAgICBTdWIuZXh0ZW5kID0gU3Vw
ZXIuZXh0ZW5kO1xuICAgIFN1Yi5taXhpbiA9IFN1cGVyLm1peGluO1xuICAgIFN1Yi51c2UgPSBT
dXBlci51c2U7XG5cbiAgICAvLyBjcmVhdGUgYXNzZXQgcmVnaXN0ZXJzLCBzbyBleHRlbmRlZCBj
bGFzc2VzXG4gICAgLy8gY2FuIGhhdmUgdGhlaXIgcHJpdmF0ZSBhc3NldHMgdG9vLlxuICAgIEFT
U0VUX1RZUEVTLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgIFN1Ylt0eXBlXSA9IFN1
cGVyW3R5cGVdO1xuICAgIH0pO1xuICAgIC8vIGVuYWJsZSByZWN1cnNpdmUgc2VsZi1sb29rdXBc
biAgICBpZiAobmFtZSkge1xuICAgICAgU3ViLm9wdGlvbnMuY29tcG9uZW50c1tuYW1lXSA9IFN1
YjtcbiAgICB9XG5cbiAgICAvLyBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBzdXBlciBvcHRpb25z
IGF0IGV4dGVuc2lvbiB0aW1lLlxuICAgIC8vIGxhdGVyIGF0IGluc3RhbnRpYXRpb24gd2UgY2Fu
IGNoZWNrIGlmIFN1cGVyJ3Mgb3B0aW9ucyBoYXZlXG4gICAgLy8gYmVlbiB1cGRhdGVkLlxuICAg
IFN1Yi5zdXBlck9wdGlvbnMgPSBTdXBlci5vcHRpb25zO1xuICAgIFN1Yi5leHRlbmRPcHRpb25z
ID0gZXh0ZW5kT3B0aW9ucztcbiAgICBTdWIuc2VhbGVkT3B0aW9ucyA9IGV4dGVuZCh7fSwgU3Vi
Lm9wdGlvbnMpO1xuXG4gICAgLy8gY2FjaGUgY29uc3RydWN0b3JcbiAgICBjYWNoZWRDdG9yc1tT
dXBlcklkXSA9IFN1YjtcbiAgICByZXR1cm4gU3ViXG4gIH07XG59XG5cbmZ1bmN0aW9uIGluaXRQ
cm9wcyQxIChDb21wKSB7XG4gIHZhciBwcm9wcyA9IENvbXAub3B0aW9ucy5wcm9wcztcbiAgZm9y
ICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgcHJveHkoQ29tcC5wcm90b3R5cGUsIFwiX3Byb3Bz
XCIsIGtleSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdENvbXB1dGVkJDEgKENvbXApIHtcbiAg
dmFyIGNvbXB1dGVkID0gQ29tcC5vcHRpb25zLmNvbXB1dGVkO1xuICBmb3IgKHZhciBrZXkgaW4g
Y29tcHV0ZWQpIHtcbiAgICBkZWZpbmVDb21wdXRlZChDb21wLnByb3RvdHlwZSwga2V5LCBjb21w
dXRlZFtrZXldKTtcbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdEFzc2V0UmVnaXN0
ZXJzIChWdWUpIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhc3NldCByZWdpc3RyYXRpb24gbWV0aG9k
cy5cbiAgICovXG4gIEFTU0VUX1RZUEVTLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBW
dWVbdHlwZV0gPSBmdW5jdGlvbiAoXG4gICAgICBpZCxcbiAgICAgIGRlZmluaXRpb25cbiAgICAp
IHtcbiAgICAgIGlmICghZGVmaW5pdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25z
W3R5cGUgKyAncyddW2lkXVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdu
b3JlIGlmICovXG4gICAgICAgIGlmIChmYWxzZSkge1xuICAgICAgICAgIGlmICh0eXBlID09PSAn
Y29tcG9uZW50JyAmJiBjb25maWcuaXNSZXNlcnZlZFRhZyhpZCkpIHtcbiAgICAgICAgICAgIHdh
cm4oXG4gICAgICAgICAgICAgICdEbyBub3QgdXNlIGJ1aWx0LWluIG9yIHJlc2VydmVkIEhUTUwg
ZWxlbWVudHMgYXMgY29tcG9uZW50ICcgK1xuICAgICAgICAgICAgICAnaWQ6ICcgKyBpZFxuICAg
ICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgPT09
ICdjb21wb25lbnQnICYmIGlzUGxhaW5PYmplY3QoZGVmaW5pdGlvbikpIHtcbiAgICAgICAgICBk
ZWZpbml0aW9uLm5hbWUgPSBkZWZpbml0aW9uLm5hbWUgfHwgaWQ7XG4gICAgICAgICAgZGVmaW5p
dGlvbiA9IHRoaXMub3B0aW9ucy5fYmFzZS5leHRlbmQoZGVmaW5pdGlvbik7XG4gICAgICAgIH1c
biAgICAgICAgaWYgKHR5cGUgPT09ICdkaXJlY3RpdmUnICYmIHR5cGVvZiBkZWZpbml0aW9uID09
PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgZGVmaW5pdGlvbiA9IHsgYmluZDogZGVmaW5pdGlv
biwgdXBkYXRlOiBkZWZpbml0aW9uIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcHRpb25z
W3R5cGUgKyAncyddW2lkXSA9IGRlZmluaXRpb247XG4gICAgICAgIHJldHVybiBkZWZpbml0aW9u
XG4gICAgICB9XG4gICAgfTtcbiAgfSk7XG59XG5cbi8qICAqL1xuXG52YXIgcGF0dGVyblR5cGVz
ID0gW1N0cmluZywgUmVnRXhwLCBBcnJheV07XG5cbmZ1bmN0aW9uIGdldENvbXBvbmVudE5hbWUg
KG9wdHMpIHtcbiAgcmV0dXJuIG9wdHMgJiYgKG9wdHMuQ3Rvci5vcHRpb25zLm5hbWUgfHwgb3B0
cy50YWcpXG59XG5cbmZ1bmN0aW9uIG1hdGNoZXMgKHBhdHRlcm4sIG5hbWUpIHtcbiAgaWYgKEFy
cmF5LmlzQXJyYXkocGF0dGVybikpIHtcbiAgICByZXR1cm4gcGF0dGVybi5pbmRleE9mKG5hbWUp
ID4gLTFcbiAgfSBlbHNlIGlmICh0eXBlb2YgcGF0dGVybiA9PT0gJ3N0cmluZycpIHtcbiAgICBy
ZXR1cm4gcGF0dGVybi5zcGxpdCgnLCcpLmluZGV4T2YobmFtZSkgPiAtMVxuICB9IGVsc2UgaWYg
KGlzUmVnRXhwKHBhdHRlcm4pKSB7XG4gICAgcmV0dXJuIHBhdHRlcm4udGVzdChuYW1lKVxuICB9
XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIHJldHVybiBmYWxzZVxufVxuXG5mdW5j
dGlvbiBwcnVuZUNhY2hlIChjYWNoZSwgY3VycmVudCwgZmlsdGVyKSB7XG4gIGZvciAodmFyIGtl
eSBpbiBjYWNoZSkge1xuICAgIHZhciBjYWNoZWROb2RlID0gY2FjaGVba2V5XTtcbiAgICBpZiAo
Y2FjaGVkTm9kZSkge1xuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKGNhY2hlZE5v
ZGUuY29tcG9uZW50T3B0aW9ucyk7XG4gICAgICBpZiAobmFtZSAmJiAhZmlsdGVyKG5hbWUpKSB7
XG4gICAgICAgIGlmIChjYWNoZWROb2RlICE9PSBjdXJyZW50KSB7XG4gICAgICAgICAgcHJ1bmVD
YWNoZUVudHJ5KGNhY2hlZE5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGNhY2hlW2tleV0gPSBu
dWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwcnVuZUNhY2hlRW50cnkg
KHZub2RlKSB7XG4gIGlmICh2bm9kZSkge1xuICAgIHZub2RlLmNvbXBvbmVudEluc3RhbmNlLiRk
ZXN0cm95KCk7XG4gIH1cbn1cblxudmFyIEtlZXBBbGl2ZSA9IHtcbiAgbmFtZTogJ2tlZXAtYWxp
dmUnLFxuICBhYnN0cmFjdDogdHJ1ZSxcblxuICBwcm9wczoge1xuICAgIGluY2x1ZGU6IHBhdHRl
cm5UeXBlcyxcbiAgICBleGNsdWRlOiBwYXR0ZXJuVHlwZXNcbiAgfSxcblxuICBjcmVhdGVkOiBm
dW5jdGlvbiBjcmVhdGVkICgpIHtcbiAgICB0aGlzLmNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxs
KTtcbiAgfSxcblxuICBkZXN0cm95ZWQ6IGZ1bmN0aW9uIGRlc3Ryb3llZCAoKSB7XG4gICAgdmFy
IHRoaXMkMSA9IHRoaXM7XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcyQxLmNhY2hlKSB7XG4g
ICAgICBwcnVuZUNhY2hlRW50cnkodGhpcyQxLmNhY2hlW2tleV0pO1xuICAgIH1cbiAgfSxcblxu
ICB3YXRjaDoge1xuICAgIGluY2x1ZGU6IGZ1bmN0aW9uIGluY2x1ZGUgKHZhbCkge1xuICAgICAg
cHJ1bmVDYWNoZSh0aGlzLmNhY2hlLCB0aGlzLl92bm9kZSwgZnVuY3Rpb24gKG5hbWUpIHsgcmV0
dXJuIG1hdGNoZXModmFsLCBuYW1lKTsgfSk7XG4gICAgfSxcbiAgICBleGNsdWRlOiBmdW5jdGlv
biBleGNsdWRlICh2YWwpIHtcbiAgICAgIHBydW5lQ2FjaGUodGhpcy5jYWNoZSwgdGhpcy5fdm5v
ZGUsIGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiAhbWF0Y2hlcyh2YWwsIG5hbWUpOyB9KTtcbiAg
ICB9XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIgKCkge1xuICAgIHZhciB2bm9k
ZSA9IGdldEZpcnN0Q29tcG9uZW50Q2hpbGQodGhpcy4kc2xvdHMuZGVmYXVsdCk7XG4gICAgdmFy
IGNvbXBvbmVudE9wdGlvbnMgPSB2bm9kZSAmJiB2bm9kZS5jb21wb25lbnRPcHRpb25zO1xuICAg
IGlmIChjb21wb25lbnRPcHRpb25zKSB7XG4gICAgICAvLyBjaGVjayBwYXR0ZXJuXG4gICAgICB2
YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoY29tcG9uZW50T3B0aW9ucyk7XG4gICAgICBpZiAo
bmFtZSAmJiAoXG4gICAgICAgICh0aGlzLmluY2x1ZGUgJiYgIW1hdGNoZXModGhpcy5pbmNsdWRl
LCBuYW1lKSkgfHxcbiAgICAgICAgKHRoaXMuZXhjbHVkZSAmJiBtYXRjaGVzKHRoaXMuZXhjbHVk
ZSwgbmFtZSkpXG4gICAgICApKSB7XG4gICAgICAgIHJldHVybiB2bm9kZVxuICAgICAgfVxuICAg
ICAgdmFyIGtleSA9IHZub2RlLmtleSA9PSBudWxsXG4gICAgICAgIC8vIHNhbWUgY29uc3RydWN0
b3IgbWF5IGdldCByZWdpc3RlcmVkIGFzIGRpZmZlcmVudCBsb2NhbCBjb21wb25lbnRzXG4gICAg
ICAgIC8vIHNvIGNpZCBhbG9uZSBpcyBub3QgZW5vdWdoICgjMzI2OSlcbiAgICAgICAgPyBjb21w
b25lbnRPcHRpb25zLkN0b3IuY2lkICsgKGNvbXBvbmVudE9wdGlvbnMudGFnID8gKFwiOjpcIiAr
IChjb21wb25lbnRPcHRpb25zLnRhZykpIDogJycpXG4gICAgICAgIDogdm5vZGUua2V5O1xuICAg
ICAgaWYgKHRoaXMuY2FjaGVba2V5XSkge1xuICAgICAgICB2bm9kZS5jb21wb25lbnRJbnN0YW5j
ZSA9IHRoaXMuY2FjaGVba2V5XS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICAgIH0gZWxzZSB7XG4g
ICAgICAgIHRoaXMuY2FjaGVba2V5XSA9IHZub2RlO1xuICAgICAgfVxuICAgICAgdm5vZGUuZGF0
YS5rZWVwQWxpdmUgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdm5vZGVcbiAgfVxufTtcblxu
dmFyIGJ1aWx0SW5Db21wb25lbnRzID0ge1xuICBLZWVwQWxpdmU6IEtlZXBBbGl2ZVxufTtcblxu
LyogICovXG5cbmZ1bmN0aW9uIGluaXRHbG9iYWxBUEkgKFZ1ZSkge1xuICAvLyBjb25maWdcbiAg
dmFyIGNvbmZpZ0RlZiA9IHt9O1xuICBjb25maWdEZWYuZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1
cm4gY29uZmlnOyB9O1xuICBpZiAoZmFsc2UpIHtcbiAgICBjb25maWdEZWYuc2V0ID0gZnVuY3Rp
b24gKCkge1xuICAgICAgd2FybihcbiAgICAgICAgJ0RvIG5vdCByZXBsYWNlIHRoZSBWdWUuY29u
ZmlnIG9iamVjdCwgc2V0IGluZGl2aWR1YWwgZmllbGRzIGluc3RlYWQuJ1xuICAgICAgKTtcbiAg
ICB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUsICdjb25maWcnLCBjb25maWdE
ZWYpO1xuXG4gIC8vIGV4cG9zZWQgdXRpbCBtZXRob2RzLlxuICAvLyBOT1RFOiB0aGVzZSBhcmUg
bm90IGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgcHVibGljIEFQSSAtIGF2b2lkIHJlbHlpbmcgb25c
biAgLy8gdGhlbSB1bmxlc3MgeW91IGFyZSBhd2FyZSBvZiB0aGUgcmlzay5cbiAgVnVlLnV0aWwg
PSB7XG4gICAgd2Fybjogd2FybixcbiAgICBleHRlbmQ6IGV4dGVuZCxcbiAgICBtZXJnZU9wdGlv
bnM6IG1lcmdlT3B0aW9ucyxcbiAgICBkZWZpbmVSZWFjdGl2ZTogZGVmaW5lUmVhY3RpdmUkJDFc
biAgfTtcblxuICBWdWUuc2V0ID0gc2V0O1xuICBWdWUuZGVsZXRlID0gZGVsO1xuICBWdWUubmV4
dFRpY2sgPSBuZXh0VGljaztcblxuICBWdWUub3B0aW9ucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7
XG4gIEFTU0VUX1RZUEVTLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBWdWUub3B0aW9u
c1t0eXBlICsgJ3MnXSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIH0pO1xuXG4gIC8vIHRoaXMg
aXMgdXNlZCB0byBpZGVudGlmeSB0aGUgXCJiYXNlXCIgY29uc3RydWN0b3IgdG8gZXh0ZW5kIGFs
bCBwbGFpbi1vYmplY3RcbiAgLy8gY29tcG9uZW50cyB3aXRoIGluIFdlZXgncyBtdWx0aS1pbnN0
YW5jZSBzY2VuYXJpb3MuXG4gIFZ1ZS5vcHRpb25zLl9iYXNlID0gVnVlO1xuXG4gIGV4dGVuZChW
dWUub3B0aW9ucy5jb21wb25lbnRzLCBidWlsdEluQ29tcG9uZW50cyk7XG5cbiAgaW5pdFVzZShW
dWUpO1xuICBpbml0TWl4aW4kMShWdWUpO1xuICBpbml0RXh0ZW5kKFZ1ZSk7XG4gIGluaXRBc3Nl
dFJlZ2lzdGVycyhWdWUpO1xufVxuXG5pbml0R2xvYmFsQVBJKFZ1ZSQzKTtcblxuT2JqZWN0LmRl
ZmluZVByb3BlcnR5KFZ1ZSQzLnByb3RvdHlwZSwgJyRpc1NlcnZlcicsIHtcbiAgZ2V0OiBpc1Nl
cnZlclJlbmRlcmluZ1xufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUkMy5wcm90b3R5
cGUsICckc3NyQ29udGV4dCcsIHtcbiAgZ2V0OiBmdW5jdGlvbiBnZXQgKCkge1xuICAgIC8qIGlz
dGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIHRoaXMuJHZub2RlICYmIHRoaXMuJHZu
b2RlLnNzckNvbnRleHRcbiAgfVxufSk7XG5cblZ1ZSQzLnZlcnNpb24gPSAnMi40LjInO1xuXG4v
KiAgKi9cblxuLy8gdGhlc2UgYXJlIHJlc2VydmVkIGZvciB3ZWIgYmVjYXVzZSB0aGV5IGFyZSBk
aXJlY3RseSBjb21waWxlZCBhd2F5XG4vLyBkdXJpbmcgdGVtcGxhdGUgY29tcGlsYXRpb25cbnZh
ciBpc1Jlc2VydmVkQXR0ciA9IG1ha2VNYXAoJ3N0eWxlLGNsYXNzJyk7XG5cbi8vIGF0dHJpYnV0
ZXMgdGhhdCBzaG91bGQgYmUgdXNpbmcgcHJvcHMgZm9yIGJpbmRpbmdcbnZhciBhY2NlcHRWYWx1
ZSA9IG1ha2VNYXAoJ2lucHV0LHRleHRhcmVhLG9wdGlvbixzZWxlY3QnKTtcbnZhciBtdXN0VXNl
UHJvcCA9IGZ1bmN0aW9uICh0YWcsIHR5cGUsIGF0dHIpIHtcbiAgcmV0dXJuIChcbiAgICAoYXR0
ciA9PT0gJ3ZhbHVlJyAmJiBhY2NlcHRWYWx1ZSh0YWcpKSAmJiB0eXBlICE9PSAnYnV0dG9uJyB8
fFxuICAgIChhdHRyID09PSAnc2VsZWN0ZWQnICYmIHRhZyA9PT0gJ29wdGlvbicpIHx8XG4gICAg
KGF0dHIgPT09ICdjaGVja2VkJyAmJiB0YWcgPT09ICdpbnB1dCcpIHx8XG4gICAgKGF0dHIgPT09
ICdtdXRlZCcgJiYgdGFnID09PSAndmlkZW8nKVxuICApXG59O1xuXG52YXIgaXNFbnVtZXJhdGVk
QXR0ciA9IG1ha2VNYXAoJ2NvbnRlbnRlZGl0YWJsZSxkcmFnZ2FibGUsc3BlbGxjaGVjaycpO1xu
XG52YXIgaXNCb29sZWFuQXR0ciA9IG1ha2VNYXAoXG4gICdhbGxvd2Z1bGxzY3JlZW4sYXN5bmMs
YXV0b2ZvY3VzLGF1dG9wbGF5LGNoZWNrZWQsY29tcGFjdCxjb250cm9scyxkZWNsYXJlLCcgK1xu
ICAnZGVmYXVsdCxkZWZhdWx0Y2hlY2tlZCxkZWZhdWx0bXV0ZWQsZGVmYXVsdHNlbGVjdGVkLGRl
ZmVyLGRpc2FibGVkLCcgK1xuICAnZW5hYmxlZCxmb3Jtbm92YWxpZGF0ZSxoaWRkZW4saW5kZXRl
cm1pbmF0ZSxpbmVydCxpc21hcCxpdGVtc2NvcGUsbG9vcCxtdWx0aXBsZSwnICtcbiAgJ211dGVk
LG5vaHJlZixub3Jlc2l6ZSxub3NoYWRlLG5vdmFsaWRhdGUsbm93cmFwLG9wZW4scGF1c2VvbmV4
aXQscmVhZG9ubHksJyArXG4gICdyZXF1aXJlZCxyZXZlcnNlZCxzY29wZWQsc2VhbWxlc3Msc2Vs
ZWN0ZWQsc29ydGFibGUsdHJhbnNsYXRlLCcgK1xuICAndHJ1ZXNwZWVkLHR5cGVtdXN0bWF0Y2gs
dmlzaWJsZSdcbik7XG5cbnZhciB4bGlua05TID0gJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxp
bmsnO1xuXG52YXIgaXNYbGluayA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiBuYW1lLmNo
YXJBdCg1KSA9PT0gJzonICYmIG5hbWUuc2xpY2UoMCwgNSkgPT09ICd4bGluaydcbn07XG5cbnZh
ciBnZXRYbGlua1Byb3AgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gaXNYbGluayhuYW1l
KSA/IG5hbWUuc2xpY2UoNiwgbmFtZS5sZW5ndGgpIDogJydcbn07XG5cbnZhciBpc0ZhbHN5QXR0
clZhbHVlID0gZnVuY3Rpb24gKHZhbCkge1xuICByZXR1cm4gdmFsID09IG51bGwgfHwgdmFsID09
PSBmYWxzZVxufTtcblxuLyogICovXG5cbmZ1bmN0aW9uIGdlbkNsYXNzRm9yVm5vZGUgKHZub2Rl
KSB7XG4gIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgdmFyIHBhcmVudE5vZGUgPSB2bm9kZTtc
biAgdmFyIGNoaWxkTm9kZSA9IHZub2RlO1xuICB3aGlsZSAoaXNEZWYoY2hpbGROb2RlLmNvbXBv
bmVudEluc3RhbmNlKSkge1xuICAgIGNoaWxkTm9kZSA9IGNoaWxkTm9kZS5jb21wb25lbnRJbnN0
YW5jZS5fdm5vZGU7XG4gICAgaWYgKGNoaWxkTm9kZS5kYXRhKSB7XG4gICAgICBkYXRhID0gbWVy
Z2VDbGFzc0RhdGEoY2hpbGROb2RlLmRhdGEsIGRhdGEpO1xuICAgIH1cbiAgfVxuICB3aGlsZSAo
aXNEZWYocGFyZW50Tm9kZSA9IHBhcmVudE5vZGUucGFyZW50KSkge1xuICAgIGlmIChwYXJlbnRO
b2RlLmRhdGEpIHtcbiAgICAgIGRhdGEgPSBtZXJnZUNsYXNzRGF0YShkYXRhLCBwYXJlbnROb2Rl
LmRhdGEpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVuZGVyQ2xhc3MoZGF0YS5zdGF0aWNDbGFz
cywgZGF0YS5jbGFzcylcbn1cblxuZnVuY3Rpb24gbWVyZ2VDbGFzc0RhdGEgKGNoaWxkLCBwYXJl
bnQpIHtcbiAgcmV0dXJuIHtcbiAgICBzdGF0aWNDbGFzczogY29uY2F0KGNoaWxkLnN0YXRpY0Ns
YXNzLCBwYXJlbnQuc3RhdGljQ2xhc3MpLFxuICAgIGNsYXNzOiBpc0RlZihjaGlsZC5jbGFzcylc
biAgICAgID8gW2NoaWxkLmNsYXNzLCBwYXJlbnQuY2xhc3NdXG4gICAgICA6IHBhcmVudC5jbGFz
c1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbmRlckNsYXNzIChcbiAgc3RhdGljQ2xhc3MsXG4gIGR5
bmFtaWNDbGFzc1xuKSB7XG4gIGlmIChpc0RlZihzdGF0aWNDbGFzcykgfHwgaXNEZWYoZHluYW1p
Y0NsYXNzKSkge1xuICAgIHJldHVybiBjb25jYXQoc3RhdGljQ2xhc3MsIHN0cmluZ2lmeUNsYXNz
KGR5bmFtaWNDbGFzcykpXG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgcmV0
dXJuICcnXG59XG5cbmZ1bmN0aW9uIGNvbmNhdCAoYSwgYikge1xuICByZXR1cm4gYSA/IGIgPyAo
YSArICcgJyArIGIpIDogYSA6IChiIHx8ICcnKVxufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlDbGFz
cyAodmFsdWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHN0
cmluZ2lmeUFycmF5KHZhbHVlKVxuICB9XG4gIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICBy
ZXR1cm4gc3RyaW5naWZ5T2JqZWN0KHZhbHVlKVxuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09
ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3Jl
IG5leHQgKi9cbiAgcmV0dXJuICcnXG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeUFycmF5ICh2YWx1
ZSkge1xuICB2YXIgcmVzID0gJyc7XG4gIHZhciBzdHJpbmdpZmllZDtcbiAgZm9yICh2YXIgaSA9
IDAsIGwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBpZiAoaXNEZWYoc3RyaW5n
aWZpZWQgPSBzdHJpbmdpZnlDbGFzcyh2YWx1ZVtpXSkpICYmIHN0cmluZ2lmaWVkICE9PSAnJykg
e1xuICAgICAgaWYgKHJlcykgeyByZXMgKz0gJyAnOyB9XG4gICAgICByZXMgKz0gc3RyaW5naWZp
ZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5T2Jq
ZWN0ICh2YWx1ZSkge1xuICB2YXIgcmVzID0gJyc7XG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkg
e1xuICAgIGlmICh2YWx1ZVtrZXldKSB7XG4gICAgICBpZiAocmVzKSB7IHJlcyArPSAnICc7IH1c
biAgICAgIHJlcyArPSBrZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuLyogICov
XG5cbnZhciBuYW1lc3BhY2VNYXAgPSB7XG4gIHN2ZzogJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAv
c3ZnJyxcbiAgbWF0aDogJ2h0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwnXG59O1xu
XG52YXIgaXNIVE1MVGFnID0gbWFrZU1hcChcbiAgJ2h0bWwsYm9keSxiYXNlLGhlYWQsbGluayxt
ZXRhLHN0eWxlLHRpdGxlLCcgK1xuICAnYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGZvb3RlcixoZWFk
ZXIsaDEsaDIsaDMsaDQsaDUsaDYsaGdyb3VwLG5hdixzZWN0aW9uLCcgK1xuICAnZGl2LGRkLGRs
LGR0LGZpZ2NhcHRpb24sZmlndXJlLHBpY3R1cmUsaHIsaW1nLGxpLG1haW4sb2wscCxwcmUsdWws
JyArXG4gICdhLGIsYWJicixiZGksYmRvLGJyLGNpdGUsY29kZSxkYXRhLGRmbixlbSxpLGtiZCxt
YXJrLHEscnAscnQscnRjLHJ1YnksJyArXG4gICdzLHNhbXAsc21hbGwsc3BhbixzdHJvbmcsc3Vi
LHN1cCx0aW1lLHUsdmFyLHdicixhcmVhLGF1ZGlvLG1hcCx0cmFjayx2aWRlbywnICtcbiAgJ2Vt
YmVkLG9iamVjdCxwYXJhbSxzb3VyY2UsY2FudmFzLHNjcmlwdCxub3NjcmlwdCxkZWwsaW5zLCcg
K1xuICAnY2FwdGlvbixjb2wsY29sZ3JvdXAsdGFibGUsdGhlYWQsdGJvZHksdGQsdGgsdHIsJyAr
XG4gICdidXR0b24sZGF0YWxpc3QsZmllbGRzZXQsZm9ybSxpbnB1dCxsYWJlbCxsZWdlbmQsbWV0
ZXIsb3B0Z3JvdXAsb3B0aW9uLCcgK1xuICAnb3V0cHV0LHByb2dyZXNzLHNlbGVjdCx0ZXh0YXJl
YSwnICtcbiAgJ2RldGFpbHMsZGlhbG9nLG1lbnUsbWVudWl0ZW0sc3VtbWFyeSwnICtcbiAgJ2Nv
bnRlbnQsZWxlbWVudCxzaGFkb3csdGVtcGxhdGUsYmxvY2txdW90ZSxpZnJhbWUsdGZvb3QnXG4p
O1xuXG4vLyB0aGlzIG1hcCBpcyBpbnRlbnRpb25hbGx5IHNlbGVjdGl2ZSwgb25seSBjb3Zlcmlu
ZyBTVkcgZWxlbWVudHMgdGhhdCBtYXlcbi8vIGNvbnRhaW4gY2hpbGQgZWxlbWVudHMuXG52YXIg
aXNTVkcgPSBtYWtlTWFwKFxuICAnc3ZnLGFuaW1hdGUsY2lyY2xlLGNsaXBwYXRoLGN1cnNvcixk
ZWZzLGRlc2MsZWxsaXBzZSxmaWx0ZXIsZm9udC1mYWNlLCcgK1xuICAnZm9yZWlnbk9iamVjdCxn
LGdseXBoLGltYWdlLGxpbmUsbWFya2VyLG1hc2ssbWlzc2luZy1nbHlwaCxwYXRoLHBhdHRlcm4s
JyArXG4gICdwb2x5Z29uLHBvbHlsaW5lLHJlY3Qsc3dpdGNoLHN5bWJvbCx0ZXh0LHRleHRwYXRo
LHRzcGFuLHVzZSx2aWV3JyxcbiAgdHJ1ZVxuKTtcblxudmFyIGlzUHJlVGFnID0gZnVuY3Rpb24g
KHRhZykgeyByZXR1cm4gdGFnID09PSAncHJlJzsgfTtcblxudmFyIGlzUmVzZXJ2ZWRUYWcgPSBm
dW5jdGlvbiAodGFnKSB7XG4gIHJldHVybiBpc0hUTUxUYWcodGFnKSB8fCBpc1NWRyh0YWcpXG59
O1xuXG5mdW5jdGlvbiBnZXRUYWdOYW1lc3BhY2UgKHRhZykge1xuICBpZiAoaXNTVkcodGFnKSkg
e1xuICAgIHJldHVybiAnc3ZnJ1xuICB9XG4gIC8vIGJhc2ljIHN1cHBvcnQgZm9yIE1hdGhNTFxu
ICAvLyBub3RlIGl0IGRvZXNuJ3Qgc3VwcG9ydCBvdGhlciBNYXRoTUwgZWxlbWVudHMgYmVpbmcg
Y29tcG9uZW50IHJvb3RzXG4gIGlmICh0YWcgPT09ICdtYXRoJykge1xuICAgIHJldHVybiAnbWF0
aCdcbiAgfVxufVxuXG52YXIgdW5rbm93bkVsZW1lbnRDYWNoZSA9IE9iamVjdC5jcmVhdGUobnVs
bCk7XG5mdW5jdGlvbiBpc1Vua25vd25FbGVtZW50ICh0YWcpIHtcbiAgLyogaXN0YW5idWwgaWdu
b3JlIGlmICovXG4gIGlmICghaW5Ccm93c2VyKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICBp
ZiAoaXNSZXNlcnZlZFRhZyh0YWcpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgdGFnID0g
dGFnLnRvTG93ZXJDYXNlKCk7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAodW5r
bm93bkVsZW1lbnRDYWNoZVt0YWddICE9IG51bGwpIHtcbiAgICByZXR1cm4gdW5rbm93bkVsZW1l
bnRDYWNoZVt0YWddXG4gIH1cbiAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcp
O1xuICBpZiAodGFnLmluZGV4T2YoJy0nKSA+IC0xKSB7XG4gICAgLy8gaHR0cDovL3N0YWNrb3Zl
cmZsb3cuY29tL2EvMjgyMTAzNjQvMTA3MDI0NFxuICAgIHJldHVybiAodW5rbm93bkVsZW1lbnRD
YWNoZVt0YWddID0gKFxuICAgICAgZWwuY29uc3RydWN0b3IgPT09IHdpbmRvdy5IVE1MVW5rbm93
bkVsZW1lbnQgfHxcbiAgICAgIGVsLmNvbnN0cnVjdG9yID09PSB3aW5kb3cuSFRNTEVsZW1lbnRc
biAgICApKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiAodW5rbm93bkVsZW1lbnRDYWNoZVt0YWdd
ID0gL0hUTUxVbmtub3duRWxlbWVudC8udGVzdChlbC50b1N0cmluZygpKSlcbiAgfVxufVxuXG4v
KiAgKi9cblxuLyoqXG4gKiBRdWVyeSBhbiBlbGVtZW50IHNlbGVjdG9yIGlmIGl0J3Mgbm90IGFu
IGVsZW1lbnQgYWxyZWFkeS5cbiAqL1xuZnVuY3Rpb24gcXVlcnkgKGVsKSB7XG4gIGlmICh0eXBl
b2YgZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFyIHNlbGVjdGVkID0gZG9jdW1lbnQucXVlcnlT
ZWxlY3RvcihlbCk7XG4gICAgaWYgKCFzZWxlY3RlZCkge1xuICAgICAgXCJwcm9kdWN0aW9uXCIg
IT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICAnQ2Fubm90IGZpbmQgZWxlbWVudDog
JyArIGVsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rp
dicpXG4gICAgfVxuICAgIHJldHVybiBzZWxlY3RlZFxuICB9IGVsc2Uge1xuICAgIHJldHVybiBl
bFxuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50JDEgKHRhZ05hbWUs
IHZub2RlKSB7XG4gIHZhciBlbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xu
ICBpZiAodGFnTmFtZSAhPT0gJ3NlbGVjdCcpIHtcbiAgICByZXR1cm4gZWxtXG4gIH1cbiAgLy8g
ZmFsc2Ugb3IgbnVsbCB3aWxsIHJlbW92ZSB0aGUgYXR0cmlidXRlIGJ1dCB1bmRlZmluZWQgd2ls
bCBub3RcbiAgaWYgKHZub2RlLmRhdGEgJiYgdm5vZGUuZGF0YS5hdHRycyAmJiB2bm9kZS5kYXRh
LmF0dHJzLm11bHRpcGxlICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbG0uc2V0QXR0cmlidXRlKCdt
dWx0aXBsZScsICdtdWx0aXBsZScpO1xuICB9XG4gIHJldHVybiBlbG1cbn1cblxuZnVuY3Rpb24g
Y3JlYXRlRWxlbWVudE5TIChuYW1lc3BhY2UsIHRhZ05hbWUpIHtcbiAgcmV0dXJuIGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnROUyhuYW1lc3BhY2VNYXBbbmFtZXNwYWNlXSwgdGFnTmFtZSlcbn1cblxu
ZnVuY3Rpb24gY3JlYXRlVGV4dE5vZGUgKHRleHQpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKHRleHQpXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbW1lbnQgKHRleHQpIHtcbiAg
cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQodGV4dClcbn1cblxuZnVuY3Rpb24gaW5zZXJ0
QmVmb3JlIChwYXJlbnROb2RlLCBuZXdOb2RlLCByZWZlcmVuY2VOb2RlKSB7XG4gIHBhcmVudE5v
ZGUuaW5zZXJ0QmVmb3JlKG5ld05vZGUsIHJlZmVyZW5jZU5vZGUpO1xufVxuXG5mdW5jdGlvbiBy
ZW1vdmVDaGlsZCAobm9kZSwgY2hpbGQpIHtcbiAgbm9kZS5yZW1vdmVDaGlsZChjaGlsZCk7XG59
XG5cbmZ1bmN0aW9uIGFwcGVuZENoaWxkIChub2RlLCBjaGlsZCkge1xuICBub2RlLmFwcGVuZENo
aWxkKGNoaWxkKTtcbn1cblxuZnVuY3Rpb24gcGFyZW50Tm9kZSAobm9kZSkge1xuICByZXR1cm4g
bm9kZS5wYXJlbnROb2RlXG59XG5cbmZ1bmN0aW9uIG5leHRTaWJsaW5nIChub2RlKSB7XG4gIHJl
dHVybiBub2RlLm5leHRTaWJsaW5nXG59XG5cbmZ1bmN0aW9uIHRhZ05hbWUgKG5vZGUpIHtcbiAg
cmV0dXJuIG5vZGUudGFnTmFtZVxufVxuXG5mdW5jdGlvbiBzZXRUZXh0Q29udGVudCAobm9kZSwg
dGV4dCkge1xuICBub2RlLnRleHRDb250ZW50ID0gdGV4dDtcbn1cblxuZnVuY3Rpb24gc2V0QXR0
cmlidXRlIChub2RlLCBrZXksIHZhbCkge1xuICBub2RlLnNldEF0dHJpYnV0ZShrZXksIHZhbCk7
XG59XG5cblxudmFyIG5vZGVPcHMgPSBPYmplY3QuZnJlZXplKHtcblx0Y3JlYXRlRWxlbWVudDog
Y3JlYXRlRWxlbWVudCQxLFxuXHRjcmVhdGVFbGVtZW50TlM6IGNyZWF0ZUVsZW1lbnROUyxcblx0
Y3JlYXRlVGV4dE5vZGU6IGNyZWF0ZVRleHROb2RlLFxuXHRjcmVhdGVDb21tZW50OiBjcmVhdGVD
b21tZW50LFxuXHRpbnNlcnRCZWZvcmU6IGluc2VydEJlZm9yZSxcblx0cmVtb3ZlQ2hpbGQ6IHJl
bW92ZUNoaWxkLFxuXHRhcHBlbmRDaGlsZDogYXBwZW5kQ2hpbGQsXG5cdHBhcmVudE5vZGU6IHBh
cmVudE5vZGUsXG5cdG5leHRTaWJsaW5nOiBuZXh0U2libGluZyxcblx0dGFnTmFtZTogdGFnTmFt
ZSxcblx0c2V0VGV4dENvbnRlbnQ6IHNldFRleHRDb250ZW50LFxuXHRzZXRBdHRyaWJ1dGU6IHNl
dEF0dHJpYnV0ZVxufSk7XG5cbi8qICAqL1xuXG52YXIgcmVmID0ge1xuICBjcmVhdGU6IGZ1bmN0
aW9uIGNyZWF0ZSAoXywgdm5vZGUpIHtcbiAgICByZWdpc3RlclJlZih2bm9kZSk7XG4gIH0sXG4g
IHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgICBpZiAob2xk
Vm5vZGUuZGF0YS5yZWYgIT09IHZub2RlLmRhdGEucmVmKSB7XG4gICAgICByZWdpc3RlclJlZihv
bGRWbm9kZSwgdHJ1ZSk7XG4gICAgICByZWdpc3RlclJlZih2bm9kZSk7XG4gICAgfVxuICB9LFxu
ICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95ICh2bm9kZSkge1xuICAgIHJlZ2lzdGVyUmVmKHZu
b2RlLCB0cnVlKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gcmVnaXN0ZXJSZWYgKHZub2RlLCBpc1Jl
bW92YWwpIHtcbiAgdmFyIGtleSA9IHZub2RlLmRhdGEucmVmO1xuICBpZiAoIWtleSkgeyByZXR1
cm4gfVxuXG4gIHZhciB2bSA9IHZub2RlLmNvbnRleHQ7XG4gIHZhciByZWYgPSB2bm9kZS5jb21w
b25lbnRJbnN0YW5jZSB8fCB2bm9kZS5lbG07XG4gIHZhciByZWZzID0gdm0uJHJlZnM7XG4gIGlm
IChpc1JlbW92YWwpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZWZzW2tleV0pKSB7XG4gICAg
ICByZW1vdmUocmVmc1trZXldLCByZWYpO1xuICAgIH0gZWxzZSBpZiAocmVmc1trZXldID09PSBy
ZWYpIHtcbiAgICAgIHJlZnNba2V5XSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0gZWxzZSB7XG4g
ICAgaWYgKHZub2RlLmRhdGEucmVmSW5Gb3IpIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShy
ZWZzW2tleV0pKSB7XG4gICAgICAgIHJlZnNba2V5XSA9IFtyZWZdO1xuICAgICAgfSBlbHNlIGlm
IChyZWZzW2tleV0uaW5kZXhPZihyZWYpIDwgMCkge1xuICAgICAgICAvLyAkZmxvdy1kaXNhYmxl
LWxpbmVcbiAgICAgICAgcmVmc1trZXldLnB1c2gocmVmKTtcbiAgICAgIH1cbiAgICB9IGVsc2Ug
e1xuICAgICAgcmVmc1trZXldID0gcmVmO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFZpcnR1
YWwgRE9NIHBhdGNoaW5nIGFsZ29yaXRobSBiYXNlZCBvbiBTbmFiYmRvbSBieVxuICogU2ltb24g
RnJpaXMgVmluZHVtIChAcGFsZGVwaW5kKVxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNl
bnNlXG4gKiBodHRwczovL2dpdGh1Yi5jb20vcGFsZGVwaW5kL3NuYWJiZG9tL2Jsb2IvbWFzdGVy
L0xJQ0VOU0VcbiAqXG4gKiBtb2RpZmllZCBieSBFdmFuIFlvdSAoQHl5eDk5MDgwMylcbiAqXG5c
bi8qXG4gKiBOb3QgdHlwZS1jaGVja2luZyB0aGlzIGJlY2F1c2UgdGhpcyBmaWxlIGlzIHBlcmYt
Y3JpdGljYWwgYW5kIHRoZSBjb3N0XG4gKiBvZiBtYWtpbmcgZmxvdyB1bmRlcnN0YW5kIGl0IGlz
IG5vdCB3b3J0aCBpdC5cbiAqL1xuXG52YXIgZW1wdHlOb2RlID0gbmV3IFZOb2RlKCcnLCB7fSwg
W10pO1xuXG52YXIgaG9va3MgPSBbJ2NyZWF0ZScsICdhY3RpdmF0ZScsICd1cGRhdGUnLCAncmVt
b3ZlJywgJ2Rlc3Ryb3knXTtcblxuZnVuY3Rpb24gc2FtZVZub2RlIChhLCBiKSB7XG4gIHJldHVy
biAoXG4gICAgYS5rZXkgPT09IGIua2V5ICYmIChcbiAgICAgIChcbiAgICAgICAgYS50YWcgPT09
IGIudGFnICYmXG4gICAgICAgIGEuaXNDb21tZW50ID09PSBiLmlzQ29tbWVudCAmJlxuICAgICAg
ICBpc0RlZihhLmRhdGEpID09PSBpc0RlZihiLmRhdGEpICYmXG4gICAgICAgIHNhbWVJbnB1dFR5
cGUoYSwgYilcbiAgICAgICkgfHwgKFxuICAgICAgICBpc1RydWUoYS5pc0FzeW5jUGxhY2Vob2xk
ZXIpICYmXG4gICAgICAgIGEuYXN5bmNGYWN0b3J5ID09PSBiLmFzeW5jRmFjdG9yeSAmJlxuICAg
ICAgICBpc1VuZGVmKGIuYXN5bmNGYWN0b3J5LmVycm9yKVxuICAgICAgKVxuICAgIClcbiAgKVxu
fVxuXG4vLyBTb21lIGJyb3dzZXJzIGRvIG5vdCBzdXBwb3J0IGR5bmFtaWNhbGx5IGNoYW5naW5n
IHR5cGUgZm9yIDxpbnB1dD5cbi8vIHNvIHRoZXkgbmVlZCB0byBiZSB0cmVhdGVkIGFzIGRpZmZl
cmVudCBub2Rlc1xuZnVuY3Rpb24gc2FtZUlucHV0VHlwZSAoYSwgYikge1xuICBpZiAoYS50YWcg
IT09ICdpbnB1dCcpIHsgcmV0dXJuIHRydWUgfVxuICB2YXIgaTtcbiAgdmFyIHR5cGVBID0gaXNE
ZWYoaSA9IGEuZGF0YSkgJiYgaXNEZWYoaSA9IGkuYXR0cnMpICYmIGkudHlwZTtcbiAgdmFyIHR5
cGVCID0gaXNEZWYoaSA9IGIuZGF0YSkgJiYgaXNEZWYoaSA9IGkuYXR0cnMpICYmIGkudHlwZTtc
biAgcmV0dXJuIHR5cGVBID09PSB0eXBlQlxufVxuXG5mdW5jdGlvbiBjcmVhdGVLZXlUb09sZElk
eCAoY2hpbGRyZW4sIGJlZ2luSWR4LCBlbmRJZHgpIHtcbiAgdmFyIGksIGtleTtcbiAgdmFyIG1h
cCA9IHt9O1xuICBmb3IgKGkgPSBiZWdpbklkeDsgaSA8PSBlbmRJZHg7ICsraSkge1xuICAgIGtl
eSA9IGNoaWxkcmVuW2ldLmtleTtcbiAgICBpZiAoaXNEZWYoa2V5KSkgeyBtYXBba2V5XSA9IGk7
IH1cbiAgfVxuICByZXR1cm4gbWFwXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVBhdGNoRnVuY3Rpb24g
KGJhY2tlbmQpIHtcbiAgdmFyIGksIGo7XG4gIHZhciBjYnMgPSB7fTtcblxuICB2YXIgbW9kdWxl
cyA9IGJhY2tlbmQubW9kdWxlcztcbiAgdmFyIG5vZGVPcHMgPSBiYWNrZW5kLm5vZGVPcHM7XG5c
biAgZm9yIChpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgKytpKSB7XG4gICAgY2JzW2hvb2tzW2ld
XSA9IFtdO1xuICAgIGZvciAoaiA9IDA7IGogPCBtb2R1bGVzLmxlbmd0aDsgKytqKSB7XG4gICAg
ICBpZiAoaXNEZWYobW9kdWxlc1tqXVtob29rc1tpXV0pKSB7XG4gICAgICAgIGNic1tob29rc1tp
XV0ucHVzaChtb2R1bGVzW2pdW2hvb2tzW2ldXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAg
ZnVuY3Rpb24gZW1wdHlOb2RlQXQgKGVsbSkge1xuICAgIHJldHVybiBuZXcgVk5vZGUobm9kZU9w
cy50YWdOYW1lKGVsbSkudG9Mb3dlckNhc2UoKSwge30sIFtdLCB1bmRlZmluZWQsIGVsbSlcbiAg
fVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVJtQ2IgKGNoaWxkRWxtLCBsaXN0ZW5lcnMpIHtcbiAgICBm
dW5jdGlvbiByZW1vdmUkJDEgKCkge1xuICAgICAgaWYgKC0tcmVtb3ZlJCQxLmxpc3RlbmVycyA9
PT0gMCkge1xuICAgICAgICByZW1vdmVOb2RlKGNoaWxkRWxtKTtcbiAgICAgIH1cbiAgICB9XG4g
ICAgcmVtb3ZlJCQxLmxpc3RlbmVycyA9IGxpc3RlbmVycztcbiAgICByZXR1cm4gcmVtb3ZlJCQx
XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVOb2RlIChlbCkge1xuICAgIHZhciBwYXJlbnQgPSBu
b2RlT3BzLnBhcmVudE5vZGUoZWwpO1xuICAgIC8vIGVsZW1lbnQgbWF5IGhhdmUgYWxyZWFkeSBi
ZWVuIHJlbW92ZWQgZHVlIHRvIHYtaHRtbCAvIHYtdGV4dFxuICAgIGlmIChpc0RlZihwYXJlbnQp
KSB7XG4gICAgICBub2RlT3BzLnJlbW92ZUNoaWxkKHBhcmVudCwgZWwpO1xuICAgIH1cbiAgfVxu
XG4gIHZhciBpblByZSA9IDA7XG4gIGZ1bmN0aW9uIGNyZWF0ZUVsbSAodm5vZGUsIGluc2VydGVk
Vm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0sIG5lc3RlZCkge1xuICAgIHZub2RlLmlzUm9v
dEluc2VydCA9ICFuZXN0ZWQ7IC8vIGZvciB0cmFuc2l0aW9uIGVudGVyIGNoZWNrXG4gICAgaWYg
KGNyZWF0ZUNvbXBvbmVudCh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIHJl
ZkVsbSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHZhciBkYXRhID0gdm5vZGUuZGF0
YTtcbiAgICB2YXIgY2hpbGRyZW4gPSB2bm9kZS5jaGlsZHJlbjtcbiAgICB2YXIgdGFnID0gdm5v
ZGUudGFnO1xuICAgIGlmIChpc0RlZih0YWcpKSB7XG4gICAgICBpZiAoZmFsc2UpIHtcbiAgICAg
ICAgaWYgKGRhdGEgJiYgZGF0YS5wcmUpIHtcbiAgICAgICAgICBpblByZSsrO1xuICAgICAgICB9
XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhaW5QcmUgJiZcbiAgICAgICAgICAhdm5vZGUubnMg
JiZcbiAgICAgICAgICAhKGNvbmZpZy5pZ25vcmVkRWxlbWVudHMubGVuZ3RoICYmIGNvbmZpZy5p
Z25vcmVkRWxlbWVudHMuaW5kZXhPZih0YWcpID4gLTEpICYmXG4gICAgICAgICAgY29uZmlnLmlz
VW5rbm93bkVsZW1lbnQodGFnKVxuICAgICAgICApIHtcbiAgICAgICAgICB3YXJuKFxuICAgICAg
ICAgICAgJ1Vua25vd24gY3VzdG9tIGVsZW1lbnQ6IDwnICsgdGFnICsgJz4gLSBkaWQgeW91ICcg
K1xuICAgICAgICAgICAgJ3JlZ2lzdGVyIHRoZSBjb21wb25lbnQgY29ycmVjdGx5PyBGb3IgcmVj
dXJzaXZlIGNvbXBvbmVudHMsICcgK1xuICAgICAgICAgICAgJ21ha2Ugc3VyZSB0byBwcm92aWRl
IHRoZSBcIm5hbWVcIiBvcHRpb24uJyxcbiAgICAgICAgICAgIHZub2RlLmNvbnRleHRcbiAgICAg
ICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2bm9kZS5lbG0gPSB2bm9kZS5uc1xu
ICAgICAgICA/IG5vZGVPcHMuY3JlYXRlRWxlbWVudE5TKHZub2RlLm5zLCB0YWcpXG4gICAgICAg
IDogbm9kZU9wcy5jcmVhdGVFbGVtZW50KHRhZywgdm5vZGUpO1xuICAgICAgc2V0U2NvcGUodm5v
ZGUpO1xuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIHtcbiAgICAgICAg
Y3JlYXRlQ2hpbGRyZW4odm5vZGUsIGNoaWxkcmVuLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAg
ICAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgICAgICBpbnZva2VDcmVhdGVIb29rcyh2bm9k
ZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgfVxuICAgICAgICBpbnNlcnQocGFyZW50
RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmYWxzZSkge1xu
ICAgICAgICBpblByZS0tO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNUcnVlKHZub2RlLmlz
Q29tbWVudCkpIHtcbiAgICAgIHZub2RlLmVsbSA9IG5vZGVPcHMuY3JlYXRlQ29tbWVudCh2bm9k
ZS50ZXh0KTtcbiAgICAgIGluc2VydChwYXJlbnRFbG0sIHZub2RlLmVsbSwgcmVmRWxtKTtcbiAg
ICB9IGVsc2Uge1xuICAgICAgdm5vZGUuZWxtID0gbm9kZU9wcy5jcmVhdGVUZXh0Tm9kZSh2bm9k
ZS50ZXh0KTtcbiAgICAgIGluc2VydChwYXJlbnRFbG0sIHZub2RlLmVsbSwgcmVmRWxtKTtcbiAg
ICB9XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVDb21wb25lbnQgKHZub2RlLCBpbnNlcnRlZFZu
b2RlUXVldWUsIHBhcmVudEVsbSwgcmVmRWxtKSB7XG4gICAgdmFyIGkgPSB2bm9kZS5kYXRhO1xu
ICAgIGlmIChpc0RlZihpKSkge1xuICAgICAgdmFyIGlzUmVhY3RpdmF0ZWQgPSBpc0RlZih2bm9k
ZS5jb21wb25lbnRJbnN0YW5jZSkgJiYgaS5rZWVwQWxpdmU7XG4gICAgICBpZiAoaXNEZWYoaSA9
IGkuaG9vaykgJiYgaXNEZWYoaSA9IGkuaW5pdCkpIHtcbiAgICAgICAgaSh2bm9kZSwgZmFsc2Ug
LyogaHlkcmF0aW5nICovLCBwYXJlbnRFbG0sIHJlZkVsbSk7XG4gICAgICB9XG4gICAgICAvLyBh
ZnRlciBjYWxsaW5nIHRoZSBpbml0IGhvb2ssIGlmIHRoZSB2bm9kZSBpcyBhIGNoaWxkIGNvbXBv
bmVudFxuICAgICAgLy8gaXQgc2hvdWxkJ3ZlIGNyZWF0ZWQgYSBjaGlsZCBpbnN0YW5jZSBhbmQg
bW91bnRlZCBpdC4gdGhlIGNoaWxkXG4gICAgICAvLyBjb21wb25lbnQgYWxzbyBoYXMgc2V0IHRo
ZSBwbGFjZWhvbGRlciB2bm9kZSdzIGVsbS5cbiAgICAgIC8vIGluIHRoYXQgY2FzZSB3ZSBjYW4g
anVzdCByZXR1cm4gdGhlIGVsZW1lbnQgYW5kIGJlIGRvbmUuXG4gICAgICBpZiAoaXNEZWYodm5v
ZGUuY29tcG9uZW50SW5zdGFuY2UpKSB7XG4gICAgICAgIGluaXRDb21wb25lbnQodm5vZGUsIGlu
c2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgIGlmIChpc1RydWUoaXNSZWFjdGl2YXRlZCkpIHtc
biAgICAgICAgICByZWFjdGl2YXRlQ29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUs
IHBhcmVudEVsbSwgcmVmRWxtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAg
ICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRDb21wb25lbnQgKHZub2RlLCBpbnNl
cnRlZFZub2RlUXVldWUpIHtcbiAgICBpZiAoaXNEZWYodm5vZGUuZGF0YS5wZW5kaW5nSW5zZXJ0
KSkge1xuICAgICAgaW5zZXJ0ZWRWbm9kZVF1ZXVlLnB1c2guYXBwbHkoaW5zZXJ0ZWRWbm9kZVF1
ZXVlLCB2bm9kZS5kYXRhLnBlbmRpbmdJbnNlcnQpO1xuICAgICAgdm5vZGUuZGF0YS5wZW5kaW5n
SW5zZXJ0ID0gbnVsbDtcbiAgICB9XG4gICAgdm5vZGUuZWxtID0gdm5vZGUuY29tcG9uZW50SW5z
dGFuY2UuJGVsO1xuICAgIGlmIChpc1BhdGNoYWJsZSh2bm9kZSkpIHtcbiAgICAgIGludm9rZUNy
ZWF0ZUhvb2tzKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgc2V0U2NvcGUodm5v
ZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBlbXB0eSBjb21wb25lbnQgcm9vdC5cbiAgICAg
IC8vIHNraXAgYWxsIGVsZW1lbnQtcmVsYXRlZCBtb2R1bGVzIGV4Y2VwdCBmb3IgcmVmICgjMzQ1
NSlcbiAgICAgIHJlZ2lzdGVyUmVmKHZub2RlKTtcbiAgICAgIC8vIG1ha2Ugc3VyZSB0byBpbnZv
a2UgdGhlIGluc2VydCBob29rXG4gICAgICBpbnNlcnRlZFZub2RlUXVldWUucHVzaCh2bm9kZSk7
XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhY3RpdmF0ZUNvbXBvbmVudCAodm5vZGUsIGlu
c2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0pIHtcbiAgICB2YXIgaTtcbiAgICAv
LyBoYWNrIGZvciAjNDMzOTogYSByZWFjdGl2YXRlZCBjb21wb25lbnQgd2l0aCBpbm5lciB0cmFu
c2l0aW9uXG4gICAgLy8gZG9lcyBub3QgdHJpZ2dlciBiZWNhdXNlIHRoZSBpbm5lciBub2RlJ3Mg
Y3JlYXRlZCBob29rcyBhcmUgbm90IGNhbGxlZFxuICAgIC8vIGFnYWluLiBJdCdzIG5vdCBpZGVh
bCB0byBpbnZvbHZlIG1vZHVsZS1zcGVjaWZpYyBsb2dpYyBpbiBoZXJlIGJ1dFxuICAgIC8vIHRo
ZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIGJldHRlciB3YXkgdG8gZG8gaXQuXG4gICAgdmFyIGlu
bmVyTm9kZSA9IHZub2RlO1xuICAgIHdoaWxlIChpbm5lck5vZGUuY29tcG9uZW50SW5zdGFuY2Up
IHtcbiAgICAgIGlubmVyTm9kZSA9IGlubmVyTm9kZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGU7
XG4gICAgICBpZiAoaXNEZWYoaSA9IGlubmVyTm9kZS5kYXRhKSAmJiBpc0RlZihpID0gaS50cmFu
c2l0aW9uKSkge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLmFjdGl2YXRlLmxlbmd0aDsg
KytpKSB7XG4gICAgICAgICAgY2JzLmFjdGl2YXRlW2ldKGVtcHR5Tm9kZSwgaW5uZXJOb2RlKTtc
biAgICAgICAgfVxuICAgICAgICBpbnNlcnRlZFZub2RlUXVldWUucHVzaChpbm5lck5vZGUpO1xu
ICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICAvLyB1bmxpa2UgYSBuZXdseSBjcmVh
dGVkIGNvbXBvbmVudCxcbiAgICAvLyBhIHJlYWN0aXZhdGVkIGtlZXAtYWxpdmUgY29tcG9uZW50
IGRvZXNuJ3QgaW5zZXJ0IGl0c2VsZlxuICAgIGluc2VydChwYXJlbnRFbG0sIHZub2RlLmVsbSwg
cmVmRWxtKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluc2VydCAocGFyZW50LCBlbG0sIHJlZiQkMSkg
e1xuICAgIGlmIChpc0RlZihwYXJlbnQpKSB7XG4gICAgICBpZiAoaXNEZWYocmVmJCQxKSkge1xu
ICAgICAgICBpZiAocmVmJCQxLnBhcmVudE5vZGUgPT09IHBhcmVudCkge1xuICAgICAgICAgIG5v
ZGVPcHMuaW5zZXJ0QmVmb3JlKHBhcmVudCwgZWxtLCByZWYkJDEpO1xuICAgICAgICB9XG4gICAg
ICB9IGVsc2Uge1xuICAgICAgICBub2RlT3BzLmFwcGVuZENoaWxkKHBhcmVudCwgZWxtKTtcbiAg
ICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVDaGlsZHJlbiAodm5vZGUsIGNo
aWxkcmVuLCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGls
ZHJlbikpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyArK2kp
IHtcbiAgICAgICAgY3JlYXRlRWxtKGNoaWxkcmVuW2ldLCBpbnNlcnRlZFZub2RlUXVldWUsIHZu
b2RlLmVsbSwgbnVsbCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1ByaW1pdGl2
ZSh2bm9kZS50ZXh0KSkge1xuICAgICAgbm9kZU9wcy5hcHBlbmRDaGlsZCh2bm9kZS5lbG0sIG5v
ZGVPcHMuY3JlYXRlVGV4dE5vZGUodm5vZGUudGV4dCkpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0
aW9uIGlzUGF0Y2hhYmxlICh2bm9kZSkge1xuICAgIHdoaWxlICh2bm9kZS5jb21wb25lbnRJbnN0
YW5jZSkge1xuICAgICAgdm5vZGUgPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGU7XG4g
ICAgfVxuICAgIHJldHVybiBpc0RlZih2bm9kZS50YWcpXG4gIH1cblxuICBmdW5jdGlvbiBpbnZv
a2VDcmVhdGVIb29rcyAodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSkge1xuICAgIGZvciAodmFy
IGkkMSA9IDA7IGkkMSA8IGNicy5jcmVhdGUubGVuZ3RoOyArK2kkMSkge1xuICAgICAgY2JzLmNy
ZWF0ZVtpJDFdKGVtcHR5Tm9kZSwgdm5vZGUpO1xuICAgIH1cbiAgICBpID0gdm5vZGUuZGF0YS5o
b29rOyAvLyBSZXVzZSB2YXJpYWJsZVxuICAgIGlmIChpc0RlZihpKSkge1xuICAgICAgaWYgKGlz
RGVmKGkuY3JlYXRlKSkgeyBpLmNyZWF0ZShlbXB0eU5vZGUsIHZub2RlKTsgfVxuICAgICAgaWYg
KGlzRGVmKGkuaW5zZXJ0KSkgeyBpbnNlcnRlZFZub2RlUXVldWUucHVzaCh2bm9kZSk7IH1cbiAg
ICB9XG4gIH1cblxuICAvLyBzZXQgc2NvcGUgaWQgYXR0cmlidXRlIGZvciBzY29wZWQgQ1NTLlxu
ICAvLyB0aGlzIGlzIGltcGxlbWVudGVkIGFzIGEgc3BlY2lhbCBjYXNlIHRvIGF2b2lkIHRoZSBv
dmVyaGVhZFxuICAvLyBvZiBnb2luZyB0aHJvdWdoIHRoZSBub3JtYWwgYXR0cmlidXRlIHBhdGNo
aW5nIHByb2Nlc3MuXG4gIGZ1bmN0aW9uIHNldFNjb3BlICh2bm9kZSkge1xuICAgIHZhciBpO1xu
ICAgIHZhciBhbmNlc3RvciA9IHZub2RlO1xuICAgIHdoaWxlIChhbmNlc3Rvcikge1xuICAgICAg
aWYgKGlzRGVmKGkgPSBhbmNlc3Rvci5jb250ZXh0KSAmJiBpc0RlZihpID0gaS4kb3B0aW9ucy5f
c2NvcGVJZCkpIHtcbiAgICAgICAgbm9kZU9wcy5zZXRBdHRyaWJ1dGUodm5vZGUuZWxtLCBpLCAn
Jyk7XG4gICAgICB9XG4gICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudDtcbiAgICB9XG4g
ICAgLy8gZm9yIHNsb3QgY29udGVudCB0aGV5IHNob3VsZCBhbHNvIGdldCB0aGUgc2NvcGVJZCBm
cm9tIHRoZSBob3N0IGluc3RhbmNlLlxuICAgIGlmIChpc0RlZihpID0gYWN0aXZlSW5zdGFuY2Up
ICYmXG4gICAgICBpICE9PSB2bm9kZS5jb250ZXh0ICYmXG4gICAgICBpc0RlZihpID0gaS4kb3B0
aW9ucy5fc2NvcGVJZClcbiAgICApIHtcbiAgICAgIG5vZGVPcHMuc2V0QXR0cmlidXRlKHZub2Rl
LmVsbSwgaSwgJycpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZFZub2RlcyAocGFyZW50
RWxtLCByZWZFbG0sIHZub2Rlcywgc3RhcnRJZHgsIGVuZElkeCwgaW5zZXJ0ZWRWbm9kZVF1ZXVl
KSB7XG4gICAgZm9yICg7IHN0YXJ0SWR4IDw9IGVuZElkeDsgKytzdGFydElkeCkge1xuICAgICAg
Y3JlYXRlRWxtKHZub2Rlc1tzdGFydElkeF0sIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxt
LCByZWZFbG0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGludm9rZURlc3Ryb3lIb29rICh2
bm9kZSkge1xuICAgIHZhciBpLCBqO1xuICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICBp
ZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgIGlmIChpc0RlZihpID0gZGF0YS5ob29rKSAmJiBpc0Rl
ZihpID0gaS5kZXN0cm95KSkgeyBpKHZub2RlKTsgfVxuICAgICAgZm9yIChpID0gMDsgaSA8IGNi
cy5kZXN0cm95Lmxlbmd0aDsgKytpKSB7IGNicy5kZXN0cm95W2ldKHZub2RlKTsgfVxuICAgIH1c
biAgICBpZiAoaXNEZWYoaSA9IHZub2RlLmNoaWxkcmVuKSkge1xuICAgICAgZm9yIChqID0gMDsg
aiA8IHZub2RlLmNoaWxkcmVuLmxlbmd0aDsgKytqKSB7XG4gICAgICAgIGludm9rZURlc3Ryb3lI
b29rKHZub2RlLmNoaWxkcmVuW2pdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlv
biByZW1vdmVWbm9kZXMgKHBhcmVudEVsbSwgdm5vZGVzLCBzdGFydElkeCwgZW5kSWR4KSB7XG4g
ICAgZm9yICg7IHN0YXJ0SWR4IDw9IGVuZElkeDsgKytzdGFydElkeCkge1xuICAgICAgdmFyIGNo
ID0gdm5vZGVzW3N0YXJ0SWR4XTtcbiAgICAgIGlmIChpc0RlZihjaCkpIHtcbiAgICAgICAgaWYg
KGlzRGVmKGNoLnRhZykpIHtcbiAgICAgICAgICByZW1vdmVBbmRJbnZva2VSZW1vdmVIb29rKGNo
KTtcbiAgICAgICAgICBpbnZva2VEZXN0cm95SG9vayhjaCk7XG4gICAgICAgIH0gZWxzZSB7IC8v
IFRleHQgbm9kZVxuICAgICAgICAgIHJlbW92ZU5vZGUoY2guZWxtKTtcbiAgICAgICAgfVxuICAg
ICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZUFuZEludm9rZVJlbW92ZUhvb2sg
KHZub2RlLCBybSkge1xuICAgIGlmIChpc0RlZihybSkgfHwgaXNEZWYodm5vZGUuZGF0YSkpIHtc
biAgICAgIHZhciBpO1xuICAgICAgdmFyIGxpc3RlbmVycyA9IGNicy5yZW1vdmUubGVuZ3RoICsg
MTtcbiAgICAgIGlmIChpc0RlZihybSkpIHtcbiAgICAgICAgLy8gd2UgaGF2ZSBhIHJlY3Vyc2l2
ZWx5IHBhc3NlZCBkb3duIHJtIGNhbGxiYWNrXG4gICAgICAgIC8vIGluY3JlYXNlIHRoZSBsaXN0
ZW5lcnMgY291bnRcbiAgICAgICAgcm0ubGlzdGVuZXJzICs9IGxpc3RlbmVycztcbiAgICAgIH0g
ZWxzZSB7XG4gICAgICAgIC8vIGRpcmVjdGx5IHJlbW92aW5nXG4gICAgICAgIHJtID0gY3JlYXRl
Um1DYih2bm9kZS5lbG0sIGxpc3RlbmVycyk7XG4gICAgICB9XG4gICAgICAvLyByZWN1cnNpdmVs
eSBpbnZva2UgaG9va3Mgb24gY2hpbGQgY29tcG9uZW50IHJvb3Qgbm9kZVxuICAgICAgaWYgKGlz
RGVmKGkgPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSkgJiYgaXNEZWYoaSA9IGkuX3Zub2RlKSAm
JiBpc0RlZihpLmRhdGEpKSB7XG4gICAgICAgIHJlbW92ZUFuZEludm9rZVJlbW92ZUhvb2soaSwg
cm0pO1xuICAgICAgfVxuICAgICAgZm9yIChpID0gMDsgaSA8IGNicy5yZW1vdmUubGVuZ3RoOyAr
K2kpIHtcbiAgICAgICAgY2JzLnJlbW92ZVtpXSh2bm9kZSwgcm0pO1xuICAgICAgfVxuICAgICAg
aWYgKGlzRGVmKGkgPSB2bm9kZS5kYXRhLmhvb2spICYmIGlzRGVmKGkgPSBpLnJlbW92ZSkpIHtc
biAgICAgICAgaSh2bm9kZSwgcm0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm0oKTtcbiAg
ICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVtb3ZlTm9kZSh2bm9kZS5lbG0pO1xuICAgIH1c
biAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUNoaWxkcmVuIChwYXJlbnRFbG0sIG9sZENoLCBuZXdD
aCwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCByZW1vdmVPbmx5KSB7XG4gICAgdmFyIG9sZFN0YXJ0SWR4
ID0gMDtcbiAgICB2YXIgbmV3U3RhcnRJZHggPSAwO1xuICAgIHZhciBvbGRFbmRJZHggPSBvbGRD
aC5sZW5ndGggLSAxO1xuICAgIHZhciBvbGRTdGFydFZub2RlID0gb2xkQ2hbMF07XG4gICAgdmFy
IG9sZEVuZFZub2RlID0gb2xkQ2hbb2xkRW5kSWR4XTtcbiAgICB2YXIgbmV3RW5kSWR4ID0gbmV3
Q2gubGVuZ3RoIC0gMTtcbiAgICB2YXIgbmV3U3RhcnRWbm9kZSA9IG5ld0NoWzBdO1xuICAgIHZh
ciBuZXdFbmRWbm9kZSA9IG5ld0NoW25ld0VuZElkeF07XG4gICAgdmFyIG9sZEtleVRvSWR4LCBp
ZHhJbk9sZCwgZWxtVG9Nb3ZlLCByZWZFbG07XG5cbiAgICAvLyByZW1vdmVPbmx5IGlzIGEgc3Bl
Y2lhbCBmbGFnIHVzZWQgb25seSBieSA8dHJhbnNpdGlvbi1ncm91cD5cbiAgICAvLyB0byBlbnN1
cmUgcmVtb3ZlZCBlbGVtZW50cyBzdGF5IGluIGNvcnJlY3QgcmVsYXRpdmUgcG9zaXRpb25zXG4g
ICAgLy8gZHVyaW5nIGxlYXZpbmcgdHJhbnNpdGlvbnNcbiAgICB2YXIgY2FuTW92ZSA9ICFyZW1v
dmVPbmx5O1xuXG4gICAgd2hpbGUgKG9sZFN0YXJ0SWR4IDw9IG9sZEVuZElkeCAmJiBuZXdTdGFy
dElkeCA8PSBuZXdFbmRJZHgpIHtcbiAgICAgIGlmIChpc1VuZGVmKG9sZFN0YXJ0Vm5vZGUpKSB7
XG4gICAgICAgIG9sZFN0YXJ0Vm5vZGUgPSBvbGRDaFsrK29sZFN0YXJ0SWR4XTsgLy8gVm5vZGUg
aGFzIGJlZW4gbW92ZWQgbGVmdFxuICAgICAgfSBlbHNlIGlmIChpc1VuZGVmKG9sZEVuZFZub2Rl
KSkge1xuICAgICAgICBvbGRFbmRWbm9kZSA9IG9sZENoWy0tb2xkRW5kSWR4XTtcbiAgICAgIH0g
ZWxzZSBpZiAoc2FtZVZub2RlKG9sZFN0YXJ0Vm5vZGUsIG5ld1N0YXJ0Vm5vZGUpKSB7XG4gICAg
ICAgIHBhdGNoVm5vZGUob2xkU3RhcnRWbm9kZSwgbmV3U3RhcnRWbm9kZSwgaW5zZXJ0ZWRWbm9k
ZVF1ZXVlKTtcbiAgICAgICAgb2xkU3RhcnRWbm9kZSA9IG9sZENoWysrb2xkU3RhcnRJZHhdO1xu
ICAgICAgICBuZXdTdGFydFZub2RlID0gbmV3Q2hbKytuZXdTdGFydElkeF07XG4gICAgICB9IGVs
c2UgaWYgKHNhbWVWbm9kZShvbGRFbmRWbm9kZSwgbmV3RW5kVm5vZGUpKSB7XG4gICAgICAgIHBh
dGNoVm5vZGUob2xkRW5kVm5vZGUsIG5ld0VuZFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xu
ICAgICAgICBvbGRFbmRWbm9kZSA9IG9sZENoWy0tb2xkRW5kSWR4XTtcbiAgICAgICAgbmV3RW5k
Vm5vZGUgPSBuZXdDaFstLW5ld0VuZElkeF07XG4gICAgICB9IGVsc2UgaWYgKHNhbWVWbm9kZShv
bGRTdGFydFZub2RlLCBuZXdFbmRWbm9kZSkpIHsgLy8gVm5vZGUgbW92ZWQgcmlnaHRcbiAgICAg
ICAgcGF0Y2hWbm9kZShvbGRTdGFydFZub2RlLCBuZXdFbmRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1
ZXVlKTtcbiAgICAgICAgY2FuTW92ZSAmJiBub2RlT3BzLmluc2VydEJlZm9yZShwYXJlbnRFbG0s
IG9sZFN0YXJ0Vm5vZGUuZWxtLCBub2RlT3BzLm5leHRTaWJsaW5nKG9sZEVuZFZub2RlLmVsbSkp
O1xuICAgICAgICBvbGRTdGFydFZub2RlID0gb2xkQ2hbKytvbGRTdGFydElkeF07XG4gICAgICAg
IG5ld0VuZFZub2RlID0gbmV3Q2hbLS1uZXdFbmRJZHhdO1xuICAgICAgfSBlbHNlIGlmIChzYW1l
Vm5vZGUob2xkRW5kVm5vZGUsIG5ld1N0YXJ0Vm5vZGUpKSB7IC8vIFZub2RlIG1vdmVkIGxlZnRc
biAgICAgICAgcGF0Y2hWbm9kZShvbGRFbmRWbm9kZSwgbmV3U3RhcnRWbm9kZSwgaW5zZXJ0ZWRW
bm9kZVF1ZXVlKTtcbiAgICAgICAgY2FuTW92ZSAmJiBub2RlT3BzLmluc2VydEJlZm9yZShwYXJl
bnRFbG0sIG9sZEVuZFZub2RlLmVsbSwgb2xkU3RhcnRWbm9kZS5lbG0pO1xuICAgICAgICBvbGRF
bmRWbm9kZSA9IG9sZENoWy0tb2xkRW5kSWR4XTtcbiAgICAgICAgbmV3U3RhcnRWbm9kZSA9IG5l
d0NoWysrbmV3U3RhcnRJZHhdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzVW5kZWYo
b2xkS2V5VG9JZHgpKSB7IG9sZEtleVRvSWR4ID0gY3JlYXRlS2V5VG9PbGRJZHgob2xkQ2gsIG9s
ZFN0YXJ0SWR4LCBvbGRFbmRJZHgpOyB9XG4gICAgICAgIGlkeEluT2xkID0gaXNEZWYobmV3U3Rh
cnRWbm9kZS5rZXkpID8gb2xkS2V5VG9JZHhbbmV3U3RhcnRWbm9kZS5rZXldIDogbnVsbDtcbiAg
ICAgICAgaWYgKGlzVW5kZWYoaWR4SW5PbGQpKSB7IC8vIE5ldyBlbGVtZW50XG4gICAgICAgICAg
Y3JlYXRlRWxtKG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCBv
bGRTdGFydFZub2RlLmVsbSk7XG4gICAgICAgICAgbmV3U3RhcnRWbm9kZSA9IG5ld0NoWysrbmV3
U3RhcnRJZHhdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVsbVRvTW92ZSA9IG9sZENo
W2lkeEluT2xkXTtcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAg
ICBpZiAoZmFsc2UpIHtcbiAgICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAgICdJdCBzZWVt
cyB0aGVyZSBhcmUgZHVwbGljYXRlIGtleXMgdGhhdCBpcyBjYXVzaW5nIGFuIHVwZGF0ZSBlcnJv
ci4gJyArXG4gICAgICAgICAgICAgICdNYWtlIHN1cmUgZWFjaCB2LWZvciBpdGVtIGhhcyBhIHVu
aXF1ZSBrZXkuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNh
bWVWbm9kZShlbG1Ub01vdmUsIG5ld1N0YXJ0Vm5vZGUpKSB7XG4gICAgICAgICAgICBwYXRjaFZu
b2RlKGVsbVRvTW92ZSwgbmV3U3RhcnRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAg
ICAgICAgIG9sZENoW2lkeEluT2xkXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNhbk1vdmUg
JiYgbm9kZU9wcy5pbnNlcnRCZWZvcmUocGFyZW50RWxtLCBlbG1Ub01vdmUuZWxtLCBvbGRTdGFy
dFZub2RlLmVsbSk7XG4gICAgICAgICAgICBuZXdTdGFydFZub2RlID0gbmV3Q2hbKytuZXdTdGFy
dElkeF07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHNhbWUga2V5IGJ1dCBk
aWZmZXJlbnQgZWxlbWVudC4gdHJlYXQgYXMgbmV3IGVsZW1lbnRcbiAgICAgICAgICAgIGNyZWF0
ZUVsbShuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgb2xkU3Rh
cnRWbm9kZS5lbG0pO1xuICAgICAgICAgICAgbmV3U3RhcnRWbm9kZSA9IG5ld0NoWysrbmV3U3Rh
cnRJZHhdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAo
b2xkU3RhcnRJZHggPiBvbGRFbmRJZHgpIHtcbiAgICAgIHJlZkVsbSA9IGlzVW5kZWYobmV3Q2hb
bmV3RW5kSWR4ICsgMV0pID8gbnVsbCA6IG5ld0NoW25ld0VuZElkeCArIDFdLmVsbTtcbiAgICAg
IGFkZFZub2RlcyhwYXJlbnRFbG0sIHJlZkVsbSwgbmV3Q2gsIG5ld1N0YXJ0SWR4LCBuZXdFbmRJ
ZHgsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgfSBlbHNlIGlmIChuZXdTdGFydElkeCA+IG5l
d0VuZElkeCkge1xuICAgICAgcmVtb3ZlVm5vZGVzKHBhcmVudEVsbSwgb2xkQ2gsIG9sZFN0YXJ0
SWR4LCBvbGRFbmRJZHgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBhdGNoVm5vZGUgKG9s
ZFZub2RlLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCByZW1vdmVPbmx5KSB7XG4gICAgaWYg
KG9sZFZub2RlID09PSB2bm9kZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdmFyIGVs
bSA9IHZub2RlLmVsbSA9IG9sZFZub2RlLmVsbTtcblxuICAgIGlmIChpc1RydWUob2xkVm5vZGUu
aXNBc3luY1BsYWNlaG9sZGVyKSkge1xuICAgICAgaWYgKGlzRGVmKHZub2RlLmFzeW5jRmFjdG9y
eS5yZXNvbHZlZCkpIHtcbiAgICAgICAgaHlkcmF0ZShvbGRWbm9kZS5lbG0sIHZub2RlLCBpbnNl
cnRlZFZub2RlUXVldWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdm5vZGUuaXNBc3luY1Bs
YWNlaG9sZGVyID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8v
IHJldXNlIGVsZW1lbnQgZm9yIHN0YXRpYyB0cmVlcy5cbiAgICAvLyBub3RlIHdlIG9ubHkgZG8g
dGhpcyBpZiB0aGUgdm5vZGUgaXMgY2xvbmVkIC1cbiAgICAvLyBpZiB0aGUgbmV3IG5vZGUgaXMg
bm90IGNsb25lZCBpdCBtZWFucyB0aGUgcmVuZGVyIGZ1bmN0aW9ucyBoYXZlIGJlZW5cbiAgICAv
LyByZXNldCBieSB0aGUgaG90LXJlbG9hZC1hcGkgYW5kIHdlIG5lZWQgdG8gZG8gYSBwcm9wZXIg
cmUtcmVuZGVyLlxuICAgIGlmIChpc1RydWUodm5vZGUuaXNTdGF0aWMpICYmXG4gICAgICBpc1Ry
dWUob2xkVm5vZGUuaXNTdGF0aWMpICYmXG4gICAgICB2bm9kZS5rZXkgPT09IG9sZFZub2RlLmtl
eSAmJlxuICAgICAgKGlzVHJ1ZSh2bm9kZS5pc0Nsb25lZCkgfHwgaXNUcnVlKHZub2RlLmlzT25j
ZSkpXG4gICAgKSB7XG4gICAgICB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSA9IG9sZFZub2RlLmNv
bXBvbmVudEluc3RhbmNlO1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdmFyIGk7XG4gICAg
dmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICAgIGlmIChpc0RlZihkYXRhKSAmJiBpc0RlZihpID0g
ZGF0YS5ob29rKSAmJiBpc0RlZihpID0gaS5wcmVwYXRjaCkpIHtcbiAgICAgIGkob2xkVm5vZGUs
IHZub2RlKTtcbiAgICB9XG5cbiAgICB2YXIgb2xkQ2ggPSBvbGRWbm9kZS5jaGlsZHJlbjtcbiAg
ICB2YXIgY2ggPSB2bm9kZS5jaGlsZHJlbjtcbiAgICBpZiAoaXNEZWYoZGF0YSkgJiYgaXNQYXRj
aGFibGUodm5vZGUpKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLnVwZGF0ZS5sZW5ndGg7
ICsraSkgeyBjYnMudXBkYXRlW2ldKG9sZFZub2RlLCB2bm9kZSk7IH1cbiAgICAgIGlmIChpc0Rl
ZihpID0gZGF0YS5ob29rKSAmJiBpc0RlZihpID0gaS51cGRhdGUpKSB7IGkob2xkVm5vZGUsIHZu
b2RlKTsgfVxuICAgIH1cbiAgICBpZiAoaXNVbmRlZih2bm9kZS50ZXh0KSkge1xuICAgICAgaWYg
KGlzRGVmKG9sZENoKSAmJiBpc0RlZihjaCkpIHtcbiAgICAgICAgaWYgKG9sZENoICE9PSBjaCkg
eyB1cGRhdGVDaGlsZHJlbihlbG0sIG9sZENoLCBjaCwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCByZW1v
dmVPbmx5KTsgfVxuICAgICAgfSBlbHNlIGlmIChpc0RlZihjaCkpIHtcbiAgICAgICAgaWYgKGlz
RGVmKG9sZFZub2RlLnRleHQpKSB7IG5vZGVPcHMuc2V0VGV4dENvbnRlbnQoZWxtLCAnJyk7IH1c
biAgICAgICAgYWRkVm5vZGVzKGVsbSwgbnVsbCwgY2gsIDAsIGNoLmxlbmd0aCAtIDEsIGluc2Vy
dGVkVm5vZGVRdWV1ZSk7XG4gICAgICB9IGVsc2UgaWYgKGlzRGVmKG9sZENoKSkge1xuICAgICAg
ICByZW1vdmVWbm9kZXMoZWxtLCBvbGRDaCwgMCwgb2xkQ2gubGVuZ3RoIC0gMSk7XG4gICAgICB9
IGVsc2UgaWYgKGlzRGVmKG9sZFZub2RlLnRleHQpKSB7XG4gICAgICAgIG5vZGVPcHMuc2V0VGV4
dENvbnRlbnQoZWxtLCAnJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvbGRWbm9kZS50ZXh0
ICE9PSB2bm9kZS50ZXh0KSB7XG4gICAgICBub2RlT3BzLnNldFRleHRDb250ZW50KGVsbSwgdm5v
ZGUudGV4dCk7XG4gICAgfVxuICAgIGlmIChpc0RlZihkYXRhKSkge1xuICAgICAgaWYgKGlzRGVm
KGkgPSBkYXRhLmhvb2spICYmIGlzRGVmKGkgPSBpLnBvc3RwYXRjaCkpIHsgaShvbGRWbm9kZSwg
dm5vZGUpOyB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW52b2tlSW5zZXJ0SG9vayAodm5v
ZGUsIHF1ZXVlLCBpbml0aWFsKSB7XG4gICAgLy8gZGVsYXkgaW5zZXJ0IGhvb2tzIGZvciBjb21w
b25lbnQgcm9vdCBub2RlcywgaW52b2tlIHRoZW0gYWZ0ZXIgdGhlXG4gICAgLy8gZWxlbWVudCBp
cyByZWFsbHkgaW5zZXJ0ZWRcbiAgICBpZiAoaXNUcnVlKGluaXRpYWwpICYmIGlzRGVmKHZub2Rl
LnBhcmVudCkpIHtcbiAgICAgIHZub2RlLnBhcmVudC5kYXRhLnBlbmRpbmdJbnNlcnQgPSBxdWV1
ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7
ICsraSkge1xuICAgICAgICBxdWV1ZVtpXS5kYXRhLmhvb2suaW5zZXJ0KHF1ZXVlW2ldKTtcbiAg
ICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgYmFpbGVkID0gZmFsc2U7XG4gIC8vIGxpc3Qgb2Yg
bW9kdWxlcyB0aGF0IGNhbiBza2lwIGNyZWF0ZSBob29rIGR1cmluZyBoeWRyYXRpb24gYmVjYXVz
ZSB0aGV5XG4gIC8vIGFyZSBhbHJlYWR5IHJlbmRlcmVkIG9uIHRoZSBjbGllbnQgb3IgaGFzIG5v
IG5lZWQgZm9yIGluaXRpYWxpemF0aW9uXG4gIHZhciBpc1JlbmRlcmVkTW9kdWxlID0gbWFrZU1h
cCgnYXR0cnMsc3R5bGUsY2xhc3Msc3RhdGljQ2xhc3Msc3RhdGljU3R5bGUsa2V5Jyk7XG5cbiAg
Ly8gTm90ZTogdGhpcyBpcyBhIGJyb3dzZXItb25seSBmdW5jdGlvbiBzbyB3ZSBjYW4gYXNzdW1l
IGVsbXMgYXJlIERPTSBub2Rlcy5cbiAgZnVuY3Rpb24gaHlkcmF0ZSAoZWxtLCB2bm9kZSwgaW5z
ZXJ0ZWRWbm9kZVF1ZXVlKSB7XG4gICAgaWYgKGlzVHJ1ZSh2bm9kZS5pc0NvbW1lbnQpICYmIGlz
RGVmKHZub2RlLmFzeW5jRmFjdG9yeSkpIHtcbiAgICAgIHZub2RlLmVsbSA9IGVsbTtcbiAgICAg
IHZub2RlLmlzQXN5bmNQbGFjZWhvbGRlciA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAg
IH1cbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgIGlmICghYXNzZXJ0Tm9kZU1hdGNoKGVsbSwgdm5v
ZGUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgICB2bm9kZS5l
bG0gPSBlbG07XG4gICAgdmFyIHRhZyA9IHZub2RlLnRhZztcbiAgICB2YXIgZGF0YSA9IHZub2Rl
LmRhdGE7XG4gICAgdmFyIGNoaWxkcmVuID0gdm5vZGUuY2hpbGRyZW47XG4gICAgaWYgKGlzRGVm
KGRhdGEpKSB7XG4gICAgICBpZiAoaXNEZWYoaSA9IGRhdGEuaG9vaykgJiYgaXNEZWYoaSA9IGku
aW5pdCkpIHsgaSh2bm9kZSwgdHJ1ZSAvKiBoeWRyYXRpbmcgKi8pOyB9XG4gICAgICBpZiAoaXNE
ZWYoaSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSkge1xuICAgICAgICAvLyBjaGlsZCBjb21w
b25lbnQuIGl0IHNob3VsZCBoYXZlIGh5ZHJhdGVkIGl0cyBvd24gdHJlZS5cbiAgICAgICAgaW5p
dENvbXBvbmVudCh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgcmV0dXJuIHRy
dWVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzRGVmKHRhZykpIHtcbiAgICAgIGlmIChpc0Rl
ZihjaGlsZHJlbikpIHtcbiAgICAgICAgLy8gZW1wdHkgZWxlbWVudCwgYWxsb3cgY2xpZW50IHRv
IHBpY2sgdXAgYW5kIHBvcHVsYXRlIGNoaWxkcmVuXG4gICAgICAgIGlmICghZWxtLmhhc0NoaWxk
Tm9kZXMoKSkge1xuICAgICAgICAgIGNyZWF0ZUNoaWxkcmVuKHZub2RlLCBjaGlsZHJlbiwgaW5z
ZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgY2hpbGRy
ZW5NYXRjaCA9IHRydWU7XG4gICAgICAgICAgdmFyIGNoaWxkTm9kZSA9IGVsbS5maXJzdENoaWxk
O1xuICAgICAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IGNoaWxkcmVuLmxlbmd0aDsgaSQx
KyspIHtcbiAgICAgICAgICAgIGlmICghY2hpbGROb2RlIHx8ICFoeWRyYXRlKGNoaWxkTm9kZSwg
Y2hpbGRyZW5baSQxXSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKSkge1xuICAgICAgICAgICAgICBjaGls
ZHJlbk1hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4g
ICAgICAgICAgICBjaGlsZE5vZGUgPSBjaGlsZE5vZGUubmV4dFNpYmxpbmc7XG4gICAgICAgICAg
fVxuICAgICAgICAgIC8vIGlmIGNoaWxkTm9kZSBpcyBub3QgbnVsbCwgaXQgbWVhbnMgdGhlIGFj
dHVhbCBjaGlsZE5vZGVzIGxpc3QgaXNcbiAgICAgICAgICAvLyBsb25nZXIgdGhhbiB0aGUgdmly
dHVhbCBjaGlsZHJlbiBsaXN0LlxuICAgICAgICAgIGlmICghY2hpbGRyZW5NYXRjaCB8fCBjaGls
ZE5vZGUpIHtcbiAgICAgICAgICAgIGlmIChmYWxzZVxuICAgICAgICAgICAgKSB7XG4gICAgICAg
ICAgICAgIGJhaWxlZCA9IHRydWU7XG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybignUGFyZW50
OiAnLCBlbG0pO1xuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ01pc21hdGNoaW5nIGNoaWxk
Tm9kZXMgdnMuIFZOb2RlczogJywgZWxtLmNoaWxkTm9kZXMsIGNoaWxkcmVuKTtcbiAgICAgICAg
ICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxu
ICAgICAgfVxuICAgICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICAgIGZvciAodmFyIGtleSBp
biBkYXRhKSB7XG4gICAgICAgICAgaWYgKCFpc1JlbmRlcmVkTW9kdWxlKGtleSkpIHtcbiAgICAg
ICAgICAgIGludm9rZUNyZWF0ZUhvb2tzKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAg
ICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVs
c2UgaWYgKGVsbS5kYXRhICE9PSB2bm9kZS50ZXh0KSB7XG4gICAgICBlbG0uZGF0YSA9IHZub2Rl
LnRleHQ7XG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBmdW5jdGlvbiBhc3NlcnRO
b2RlTWF0Y2ggKG5vZGUsIHZub2RlKSB7XG4gICAgaWYgKGlzRGVmKHZub2RlLnRhZykpIHtcbiAg
ICAgIHJldHVybiAoXG4gICAgICAgIHZub2RlLnRhZy5pbmRleE9mKCd2dWUtY29tcG9uZW50Jykg
PT09IDAgfHxcbiAgICAgICAgdm5vZGUudGFnLnRvTG93ZXJDYXNlKCkgPT09IChub2RlLnRhZ05h
bWUgJiYgbm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkpXG4gICAgICApXG4gICAgfSBlbHNlIHtc
biAgICAgIHJldHVybiBub2RlLm5vZGVUeXBlID09PSAodm5vZGUuaXNDb21tZW50ID8gOCA6IDMp
XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHBhdGNoIChvbGRWbm9kZSwgdm5vZGUs
IGh5ZHJhdGluZywgcmVtb3ZlT25seSwgcGFyZW50RWxtLCByZWZFbG0pIHtcbiAgICBpZiAoaXNV
bmRlZih2bm9kZSkpIHtcbiAgICAgIGlmIChpc0RlZihvbGRWbm9kZSkpIHsgaW52b2tlRGVzdHJv
eUhvb2sob2xkVm5vZGUpOyB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB2YXIgaXNJbml0
aWFsUGF0Y2ggPSBmYWxzZTtcbiAgICB2YXIgaW5zZXJ0ZWRWbm9kZVF1ZXVlID0gW107XG5cbiAg
ICBpZiAoaXNVbmRlZihvbGRWbm9kZSkpIHtcbiAgICAgIC8vIGVtcHR5IG1vdW50IChsaWtlbHkg
YXMgY29tcG9uZW50KSwgY3JlYXRlIG5ldyByb290IGVsZW1lbnRcbiAgICAgIGlzSW5pdGlhbFBh
dGNoID0gdHJ1ZTtcbiAgICAgIGNyZWF0ZUVsbSh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBw
YXJlbnRFbG0sIHJlZkVsbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBpc1JlYWxFbGVtZW50
ID0gaXNEZWYob2xkVm5vZGUubm9kZVR5cGUpO1xuICAgICAgaWYgKCFpc1JlYWxFbGVtZW50ICYm
IHNhbWVWbm9kZShvbGRWbm9kZSwgdm5vZGUpKSB7XG4gICAgICAgIC8vIHBhdGNoIGV4aXN0aW5n
IHJvb3Qgbm9kZVxuICAgICAgICBwYXRjaFZub2RlKG9sZFZub2RlLCB2bm9kZSwgaW5zZXJ0ZWRW
bm9kZVF1ZXVlLCByZW1vdmVPbmx5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc1Jl
YWxFbGVtZW50KSB7XG4gICAgICAgICAgLy8gbW91bnRpbmcgdG8gYSByZWFsIGVsZW1lbnRcbiAg
ICAgICAgICAvLyBjaGVjayBpZiB0aGlzIGlzIHNlcnZlci1yZW5kZXJlZCBjb250ZW50IGFuZCBp
ZiB3ZSBjYW4gcGVyZm9ybVxuICAgICAgICAgIC8vIGEgc3VjY2Vzc2Z1bCBoeWRyYXRpb24uXG4g
ICAgICAgICAgaWYgKG9sZFZub2RlLm5vZGVUeXBlID09PSAxICYmIG9sZFZub2RlLmhhc0F0dHJp
YnV0ZShTU1JfQVRUUikpIHtcbiAgICAgICAgICAgIG9sZFZub2RlLnJlbW92ZUF0dHJpYnV0ZShT
U1JfQVRUUik7XG4gICAgICAgICAgICBoeWRyYXRpbmcgPSB0cnVlO1xuICAgICAgICAgIH1cbiAg
ICAgICAgICBpZiAoaXNUcnVlKGh5ZHJhdGluZykpIHtcbiAgICAgICAgICAgIGlmIChoeWRyYXRl
KG9sZFZub2RlLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKSkge1xuICAgICAgICAgICAgICBp
bnZva2VJbnNlcnRIb29rKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHRydWUpO1xuICAgICAg
ICAgICAgICByZXR1cm4gb2xkVm5vZGVcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmFsc2UpIHtc
biAgICAgICAgICAgICAgd2FybihcbiAgICAgICAgICAgICAgICAnVGhlIGNsaWVudC1zaWRlIHJl
bmRlcmVkIHZpcnR1YWwgRE9NIHRyZWUgaXMgbm90IG1hdGNoaW5nICcgK1xuICAgICAgICAgICAg
ICAgICdzZXJ2ZXItcmVuZGVyZWQgY29udGVudC4gVGhpcyBpcyBsaWtlbHkgY2F1c2VkIGJ5IGlu
Y29ycmVjdCAnICtcbiAgICAgICAgICAgICAgICAnSFRNTCBtYXJrdXAsIGZvciBleGFtcGxlIG5l
c3RpbmcgYmxvY2stbGV2ZWwgZWxlbWVudHMgaW5zaWRlICcgK1xuICAgICAgICAgICAgICAgICc8
cD4sIG9yIG1pc3NpbmcgPHRib2R5Pi4gQmFpbGluZyBoeWRyYXRpb24gYW5kIHBlcmZvcm1pbmcg
JyArXG4gICAgICAgICAgICAgICAgJ2Z1bGwgY2xpZW50LXNpZGUgcmVuZGVyLidcbiAgICAgICAg
ICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gZWl0aGVy
IG5vdCBzZXJ2ZXItcmVuZGVyZWQsIG9yIGh5ZHJhdGlvbiBmYWlsZWQuXG4gICAgICAgICAgLy8g
Y3JlYXRlIGFuIGVtcHR5IG5vZGUgYW5kIHJlcGxhY2UgaXRcbiAgICAgICAgICBvbGRWbm9kZSA9
IGVtcHR5Tm9kZUF0KG9sZFZub2RlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyByZXBsYWNpbmcg
ZXhpc3RpbmcgZWxlbWVudFxuICAgICAgICB2YXIgb2xkRWxtID0gb2xkVm5vZGUuZWxtO1xuICAg
ICAgICB2YXIgcGFyZW50RWxtJDEgPSBub2RlT3BzLnBhcmVudE5vZGUob2xkRWxtKTtcbiAgICAg
ICAgY3JlYXRlRWxtKFxuICAgICAgICAgIHZub2RlLFxuICAgICAgICAgIGluc2VydGVkVm5vZGVR
dWV1ZSxcbiAgICAgICAgICAvLyBleHRyZW1lbHkgcmFyZSBlZGdlIGNhc2U6IGRvIG5vdCBpbnNl
cnQgaWYgb2xkIGVsZW1lbnQgaXMgaW4gYVxuICAgICAgICAgIC8vIGxlYXZpbmcgdHJhbnNpdGlv
bi4gT25seSBoYXBwZW5zIHdoZW4gY29tYmluaW5nIHRyYW5zaXRpb24gK1xuICAgICAgICAgIC8v
IGtlZXAtYWxpdmUgKyBIT0NzLiAoIzQ1OTApXG4gICAgICAgICAgb2xkRWxtLl9sZWF2ZUNiID8g
bnVsbCA6IHBhcmVudEVsbSQxLFxuICAgICAgICAgIG5vZGVPcHMubmV4dFNpYmxpbmcob2xkRWxt
KVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChpc0RlZih2bm9kZS5wYXJlbnQpKSB7XG4gICAg
ICAgICAgLy8gY29tcG9uZW50IHJvb3QgZWxlbWVudCByZXBsYWNlZC5cbiAgICAgICAgICAvLyB1
cGRhdGUgcGFyZW50IHBsYWNlaG9sZGVyIG5vZGUgZWxlbWVudCwgcmVjdXJzaXZlbHlcbiAgICAg
ICAgICB2YXIgYW5jZXN0b3IgPSB2bm9kZS5wYXJlbnQ7XG4gICAgICAgICAgd2hpbGUgKGFuY2Vz
dG9yKSB7XG4gICAgICAgICAgICBhbmNlc3Rvci5lbG0gPSB2bm9kZS5lbG07XG4gICAgICAgICAg
ICBhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYg
KGlzUGF0Y2hhYmxlKHZub2RlKSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBj
YnMuY3JlYXRlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgIGNicy5jcmVhdGVbaV0oZW1w
dHlOb2RlLCB2bm9kZS5wYXJlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAg
ICAgfVxuXG4gICAgICAgIGlmIChpc0RlZihwYXJlbnRFbG0kMSkpIHtcbiAgICAgICAgICByZW1v
dmVWbm9kZXMocGFyZW50RWxtJDEsIFtvbGRWbm9kZV0sIDAsIDApO1xuICAgICAgICB9IGVsc2Ug
aWYgKGlzRGVmKG9sZFZub2RlLnRhZykpIHtcbiAgICAgICAgICBpbnZva2VEZXN0cm95SG9vayhv
bGRWbm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpbnZva2VJbnNlcnRI
b29rKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIGlzSW5pdGlhbFBhdGNoKTtcbiAgICByZXR1
cm4gdm5vZGUuZWxtXG4gIH1cbn1cblxuLyogICovXG5cbnZhciBkaXJlY3RpdmVzID0ge1xuICBj
cmVhdGU6IHVwZGF0ZURpcmVjdGl2ZXMsXG4gIHVwZGF0ZTogdXBkYXRlRGlyZWN0aXZlcyxcbiAg
ZGVzdHJveTogZnVuY3Rpb24gdW5iaW5kRGlyZWN0aXZlcyAodm5vZGUpIHtcbiAgICB1cGRhdGVE
aXJlY3RpdmVzKHZub2RlLCBlbXB0eU5vZGUpO1xuICB9XG59O1xuXG5mdW5jdGlvbiB1cGRhdGVE
aXJlY3RpdmVzIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgaWYgKG9sZFZub2RlLmRhdGEuZGlyZWN0
aXZlcyB8fCB2bm9kZS5kYXRhLmRpcmVjdGl2ZXMpIHtcbiAgICBfdXBkYXRlKG9sZFZub2RlLCB2
bm9kZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX3VwZGF0ZSAob2xkVm5vZGUsIHZub2RlKSB7XG4g
IHZhciBpc0NyZWF0ZSA9IG9sZFZub2RlID09PSBlbXB0eU5vZGU7XG4gIHZhciBpc0Rlc3Ryb3kg
PSB2bm9kZSA9PT0gZW1wdHlOb2RlO1xuICB2YXIgb2xkRGlycyA9IG5vcm1hbGl6ZURpcmVjdGl2
ZXMkMShvbGRWbm9kZS5kYXRhLmRpcmVjdGl2ZXMsIG9sZFZub2RlLmNvbnRleHQpO1xuICB2YXIg
bmV3RGlycyA9IG5vcm1hbGl6ZURpcmVjdGl2ZXMkMSh2bm9kZS5kYXRhLmRpcmVjdGl2ZXMsIHZu
b2RlLmNvbnRleHQpO1xuXG4gIHZhciBkaXJzV2l0aEluc2VydCA9IFtdO1xuICB2YXIgZGlyc1dp
dGhQb3N0cGF0Y2ggPSBbXTtcblxuICB2YXIga2V5LCBvbGREaXIsIGRpcjtcbiAgZm9yIChrZXkg
aW4gbmV3RGlycykge1xuICAgIG9sZERpciA9IG9sZERpcnNba2V5XTtcbiAgICBkaXIgPSBuZXdE
aXJzW2tleV07XG4gICAgaWYgKCFvbGREaXIpIHtcbiAgICAgIC8vIG5ldyBkaXJlY3RpdmUsIGJp
bmRcbiAgICAgIGNhbGxIb29rJDEoZGlyLCAnYmluZCcsIHZub2RlLCBvbGRWbm9kZSk7XG4gICAg
ICBpZiAoZGlyLmRlZiAmJiBkaXIuZGVmLmluc2VydGVkKSB7XG4gICAgICAgIGRpcnNXaXRoSW5z
ZXJ0LnB1c2goZGlyKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZXhpc3Rpbmcg
ZGlyZWN0aXZlLCB1cGRhdGVcbiAgICAgIGRpci5vbGRWYWx1ZSA9IG9sZERpci52YWx1ZTtcbiAg
ICAgIGNhbGxIb29rJDEoZGlyLCAndXBkYXRlJywgdm5vZGUsIG9sZFZub2RlKTtcbiAgICAgIGlm
IChkaXIuZGVmICYmIGRpci5kZWYuY29tcG9uZW50VXBkYXRlZCkge1xuICAgICAgICBkaXJzV2l0
aFBvc3RwYXRjaC5wdXNoKGRpcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGRpcnNX
aXRoSW5zZXJ0Lmxlbmd0aCkge1xuICAgIHZhciBjYWxsSW5zZXJ0ID0gZnVuY3Rpb24gKCkge1xu
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXJzV2l0aEluc2VydC5sZW5ndGg7IGkrKykge1xu
ICAgICAgICBjYWxsSG9vayQxKGRpcnNXaXRoSW5zZXJ0W2ldLCAnaW5zZXJ0ZWQnLCB2bm9kZSwg
b2xkVm5vZGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgaWYgKGlzQ3JlYXRlKSB7XG4gICAgICBt
ZXJnZVZOb2RlSG9vayh2bm9kZS5kYXRhLmhvb2sgfHwgKHZub2RlLmRhdGEuaG9vayA9IHt9KSwg
J2luc2VydCcsIGNhbGxJbnNlcnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsSW5zZXJ0KCk7
XG4gICAgfVxuICB9XG5cbiAgaWYgKGRpcnNXaXRoUG9zdHBhdGNoLmxlbmd0aCkge1xuICAgIG1l
cmdlVk5vZGVIb29rKHZub2RlLmRhdGEuaG9vayB8fCAodm5vZGUuZGF0YS5ob29rID0ge30pLCAn
cG9zdHBhdGNoJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXJz
V2l0aFBvc3RwYXRjaC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjYWxsSG9vayQxKGRpcnNXaXRo
UG9zdHBhdGNoW2ldLCAnY29tcG9uZW50VXBkYXRlZCcsIHZub2RlLCBvbGRWbm9kZSk7XG4gICAg
ICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAoIWlzQ3JlYXRlKSB7XG4gICAgZm9yIChrZXkgaW4g
b2xkRGlycykge1xuICAgICAgaWYgKCFuZXdEaXJzW2tleV0pIHtcbiAgICAgICAgLy8gbm8gbG9u
Z2VyIHByZXNlbnQsIHVuYmluZFxuICAgICAgICBjYWxsSG9vayQxKG9sZERpcnNba2V5XSwgJ3Vu
YmluZCcsIG9sZFZub2RlLCBvbGRWbm9kZSwgaXNEZXN0cm95KTtcbiAgICAgIH1cbiAgICB9XG4g
IH1cbn1cblxudmFyIGVtcHR5TW9kaWZpZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuZnVu
Y3Rpb24gbm9ybWFsaXplRGlyZWN0aXZlcyQxIChcbiAgZGlycyxcbiAgdm1cbikge1xuICB2YXIg
cmVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWYgKCFkaXJzKSB7XG4gICAgcmV0dXJuIHJl
c1xuICB9XG4gIHZhciBpLCBkaXI7XG4gIGZvciAoaSA9IDA7IGkgPCBkaXJzLmxlbmd0aDsgaSsr
KSB7XG4gICAgZGlyID0gZGlyc1tpXTtcbiAgICBpZiAoIWRpci5tb2RpZmllcnMpIHtcbiAgICAg
IGRpci5tb2RpZmllcnMgPSBlbXB0eU1vZGlmaWVycztcbiAgICB9XG4gICAgcmVzW2dldFJhd0Rp
ck5hbWUoZGlyKV0gPSBkaXI7XG4gICAgZGlyLmRlZiA9IHJlc29sdmVBc3NldCh2bS4kb3B0aW9u
cywgJ2RpcmVjdGl2ZXMnLCBkaXIubmFtZSwgdHJ1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxu
XG5mdW5jdGlvbiBnZXRSYXdEaXJOYW1lIChkaXIpIHtcbiAgcmV0dXJuIGRpci5yYXdOYW1lIHx8
ICgoZGlyLm5hbWUpICsgXCIuXCIgKyAoT2JqZWN0LmtleXMoZGlyLm1vZGlmaWVycyB8fCB7fSku
am9pbignLicpKSlcbn1cblxuZnVuY3Rpb24gY2FsbEhvb2skMSAoZGlyLCBob29rLCB2bm9kZSwg
b2xkVm5vZGUsIGlzRGVzdHJveSkge1xuICB2YXIgZm4gPSBkaXIuZGVmICYmIGRpci5kZWZbaG9v
a107XG4gIGlmIChmbikge1xuICAgIHRyeSB7XG4gICAgICBmbih2bm9kZS5lbG0sIGRpciwgdm5v
ZGUsIG9sZFZub2RlLCBpc0Rlc3Ryb3kpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGhhbmRs
ZUVycm9yKGUsIHZub2RlLmNvbnRleHQsIChcImRpcmVjdGl2ZSBcIiArIChkaXIubmFtZSkgKyBc
IiBcIiArIGhvb2sgKyBcIiBob29rXCIpKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIGJhc2VNb2R1
bGVzID0gW1xuICByZWYsXG4gIGRpcmVjdGl2ZXNcbl07XG5cbi8qICAqL1xuXG5mdW5jdGlvbiB1
cGRhdGVBdHRycyAob2xkVm5vZGUsIHZub2RlKSB7XG4gIHZhciBvcHRzID0gdm5vZGUuY29tcG9u
ZW50T3B0aW9ucztcbiAgaWYgKGlzRGVmKG9wdHMpICYmIG9wdHMuQ3Rvci5vcHRpb25zLmluaGVy
aXRBdHRycyA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoaXNVbmRlZihvbGRW
bm9kZS5kYXRhLmF0dHJzKSAmJiBpc1VuZGVmKHZub2RlLmRhdGEuYXR0cnMpKSB7XG4gICAgcmV0
dXJuXG4gIH1cbiAgdmFyIGtleSwgY3VyLCBvbGQ7XG4gIHZhciBlbG0gPSB2bm9kZS5lbG07XG4g
IHZhciBvbGRBdHRycyA9IG9sZFZub2RlLmRhdGEuYXR0cnMgfHwge307XG4gIHZhciBhdHRycyA9
IHZub2RlLmRhdGEuYXR0cnMgfHwge307XG4gIC8vIGNsb25lIG9ic2VydmVkIG9iamVjdHMsIGFz
IHRoZSB1c2VyIHByb2JhYmx5IHdhbnRzIHRvIG11dGF0ZSBpdFxuICBpZiAoaXNEZWYoYXR0cnMu
X19vYl9fKSkge1xuICAgIGF0dHJzID0gdm5vZGUuZGF0YS5hdHRycyA9IGV4dGVuZCh7fSwgYXR0
cnMpO1xuICB9XG5cbiAgZm9yIChrZXkgaW4gYXR0cnMpIHtcbiAgICBjdXIgPSBhdHRyc1trZXld
O1xuICAgIG9sZCA9IG9sZEF0dHJzW2tleV07XG4gICAgaWYgKG9sZCAhPT0gY3VyKSB7XG4gICAg
ICBzZXRBdHRyKGVsbSwga2V5LCBjdXIpO1xuICAgIH1cbiAgfVxuICAvLyAjNDM5MTogaW4gSUU5
LCBzZXR0aW5nIHR5cGUgY2FuIHJlc2V0IHZhbHVlIGZvciBpbnB1dFt0eXBlPXJhZGlvXVxuICAv
KiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGlzSUU5ICYmIGF0dHJzLnZhbHVlICE9PSBv
bGRBdHRycy52YWx1ZSkge1xuICAgIHNldEF0dHIoZWxtLCAndmFsdWUnLCBhdHRycy52YWx1ZSk7
XG4gIH1cbiAgZm9yIChrZXkgaW4gb2xkQXR0cnMpIHtcbiAgICBpZiAoaXNVbmRlZihhdHRyc1tr
ZXldKSkge1xuICAgICAgaWYgKGlzWGxpbmsoa2V5KSkge1xuICAgICAgICBlbG0ucmVtb3ZlQXR0
cmlidXRlTlMoeGxpbmtOUywgZ2V0WGxpbmtQcm9wKGtleSkpO1xuICAgICAgfSBlbHNlIGlmICgh
aXNFbnVtZXJhdGVkQXR0cihrZXkpKSB7XG4gICAgICAgIGVsbS5yZW1vdmVBdHRyaWJ1dGUoa2V5
KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0QXR0ciAoZWwsIGtleSwg
dmFsdWUpIHtcbiAgaWYgKGlzQm9vbGVhbkF0dHIoa2V5KSkge1xuICAgIC8vIHNldCBhdHRyaWJ1
dGUgZm9yIGJsYW5rIHZhbHVlXG4gICAgLy8gZS5nLiA8b3B0aW9uIGRpc2FibGVkPlNlbGVjdCBv
bmU8L29wdGlvbj5cbiAgICBpZiAoaXNGYWxzeUF0dHJWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgIGVs
LnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbC5zZXRBdHRyaWJ1
dGUoa2V5LCBrZXkpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc0VudW1lcmF0ZWRBdHRyKGtleSkp
IHtcbiAgICBlbC5zZXRBdHRyaWJ1dGUoa2V5LCBpc0ZhbHN5QXR0clZhbHVlKHZhbHVlKSB8fCB2
YWx1ZSA9PT0gJ2ZhbHNlJyA/ICdmYWxzZScgOiAndHJ1ZScpO1xuICB9IGVsc2UgaWYgKGlzWGxp
bmsoa2V5KSkge1xuICAgIGlmIChpc0ZhbHN5QXR0clZhbHVlKHZhbHVlKSkge1xuICAgICAgZWwu
cmVtb3ZlQXR0cmlidXRlTlMoeGxpbmtOUywgZ2V0WGxpbmtQcm9wKGtleSkpO1xuICAgIH0gZWxz
ZSB7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGVOUyh4bGlua05TLCBrZXksIHZhbHVlKTtcbiAgICB9
XG4gIH0gZWxzZSB7XG4gICAgaWYgKGlzRmFsc3lBdHRyVmFsdWUodmFsdWUpKSB7XG4gICAgICBl
bC5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwuc2V0QXR0cmli
dXRlKGtleSwgdmFsdWUpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgYXR0cnMgPSB7XG4gIGNyZWF0
ZTogdXBkYXRlQXR0cnMsXG4gIHVwZGF0ZTogdXBkYXRlQXR0cnNcbn07XG5cbi8qICAqL1xuXG5m
dW5jdGlvbiB1cGRhdGVDbGFzcyAob2xkVm5vZGUsIHZub2RlKSB7XG4gIHZhciBlbCA9IHZub2Rl
LmVsbTtcbiAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICB2YXIgb2xkRGF0YSA9IG9sZFZub2Rl
LmRhdGE7XG4gIGlmIChcbiAgICBpc1VuZGVmKGRhdGEuc3RhdGljQ2xhc3MpICYmXG4gICAgaXNV
bmRlZihkYXRhLmNsYXNzKSAmJiAoXG4gICAgICBpc1VuZGVmKG9sZERhdGEpIHx8IChcbiAgICAg
ICAgaXNVbmRlZihvbGREYXRhLnN0YXRpY0NsYXNzKSAmJlxuICAgICAgICBpc1VuZGVmKG9sZERh
dGEuY2xhc3MpXG4gICAgICApXG4gICAgKVxuICApIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHZh
ciBjbHMgPSBnZW5DbGFzc0ZvclZub2RlKHZub2RlKTtcblxuICAvLyBoYW5kbGUgdHJhbnNpdGlv
biBjbGFzc2VzXG4gIHZhciB0cmFuc2l0aW9uQ2xhc3MgPSBlbC5fdHJhbnNpdGlvbkNsYXNzZXM7
XG4gIGlmIChpc0RlZih0cmFuc2l0aW9uQ2xhc3MpKSB7XG4gICAgY2xzID0gY29uY2F0KGNscywg
c3RyaW5naWZ5Q2xhc3ModHJhbnNpdGlvbkNsYXNzKSk7XG4gIH1cblxuICAvLyBzZXQgdGhlIGNs
YXNzXG4gIGlmIChjbHMgIT09IGVsLl9wcmV2Q2xhc3MpIHtcbiAgICBlbC5zZXRBdHRyaWJ1dGUo
J2NsYXNzJywgY2xzKTtcbiAgICBlbC5fcHJldkNsYXNzID0gY2xzO1xuICB9XG59XG5cbnZhciBr
bGFzcyA9IHtcbiAgY3JlYXRlOiB1cGRhdGVDbGFzcyxcbiAgdXBkYXRlOiB1cGRhdGVDbGFzc1xu
fTtcblxuLyogICovXG5cbnZhciB2YWxpZERpdmlzaW9uQ2hhclJFID0gL1tcXHcpLitcXC1fJFxc
XV0vO1xuXG5mdW5jdGlvbiBwYXJzZUZpbHRlcnMgKGV4cCkge1xuICB2YXIgaW5TaW5nbGUgPSBm
YWxzZTtcbiAgdmFyIGluRG91YmxlID0gZmFsc2U7XG4gIHZhciBpblRlbXBsYXRlU3RyaW5nID0g
ZmFsc2U7XG4gIHZhciBpblJlZ2V4ID0gZmFsc2U7XG4gIHZhciBjdXJseSA9IDA7XG4gIHZhciBz
cXVhcmUgPSAwO1xuICB2YXIgcGFyZW4gPSAwO1xuICB2YXIgbGFzdEZpbHRlckluZGV4ID0gMDtc
biAgdmFyIGMsIHByZXYsIGksIGV4cHJlc3Npb24sIGZpbHRlcnM7XG5cbiAgZm9yIChpID0gMDsg
aSA8IGV4cC5sZW5ndGg7IGkrKykge1xuICAgIHByZXYgPSBjO1xuICAgIGMgPSBleHAuY2hhckNv
ZGVBdChpKTtcbiAgICBpZiAoaW5TaW5nbGUpIHtcbiAgICAgIGlmIChjID09PSAweDI3ICYmIHBy
ZXYgIT09IDB4NUMpIHsgaW5TaW5nbGUgPSBmYWxzZTsgfVxuICAgIH0gZWxzZSBpZiAoaW5Eb3Vi
bGUpIHtcbiAgICAgIGlmIChjID09PSAweDIyICYmIHByZXYgIT09IDB4NUMpIHsgaW5Eb3VibGUg
PSBmYWxzZTsgfVxuICAgIH0gZWxzZSBpZiAoaW5UZW1wbGF0ZVN0cmluZykge1xuICAgICAgaWYg
KGMgPT09IDB4NjAgJiYgcHJldiAhPT0gMHg1QykgeyBpblRlbXBsYXRlU3RyaW5nID0gZmFsc2U7
IH1cbiAgICB9IGVsc2UgaWYgKGluUmVnZXgpIHtcbiAgICAgIGlmIChjID09PSAweDJmICYmIHBy
ZXYgIT09IDB4NUMpIHsgaW5SZWdleCA9IGZhbHNlOyB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAg
IGMgPT09IDB4N0MgJiYgLy8gcGlwZVxuICAgICAgZXhwLmNoYXJDb2RlQXQoaSArIDEpICE9PSAw
eDdDICYmXG4gICAgICBleHAuY2hhckNvZGVBdChpIC0gMSkgIT09IDB4N0MgJiZcbiAgICAgICFj
dXJseSAmJiAhc3F1YXJlICYmICFwYXJlblxuICAgICkge1xuICAgICAgaWYgKGV4cHJlc3Npb24g
PT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBmaXJzdCBmaWx0ZXIsIGVuZCBvZiBleHByZXNz
aW9uXG4gICAgICAgIGxhc3RGaWx0ZXJJbmRleCA9IGkgKyAxO1xuICAgICAgICBleHByZXNzaW9u
ID0gZXhwLnNsaWNlKDAsIGkpLnRyaW0oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHB1c2hG
aWx0ZXIoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3dpdGNoIChjKSB7XG4gICAg
ICAgIGNhc2UgMHgyMjogaW5Eb3VibGUgPSB0cnVlOyBicmVhayAgICAgICAgIC8vIFwiXG4gICAg
ICAgIGNhc2UgMHgyNzogaW5TaW5nbGUgPSB0cnVlOyBicmVhayAgICAgICAgIC8vICdcbiAgICAg
ICAgY2FzZSAweDYwOiBpblRlbXBsYXRlU3RyaW5nID0gdHJ1ZTsgYnJlYWsgLy8gYFxuICAgICAg
ICBjYXNlIDB4Mjg6IHBhcmVuKys7IGJyZWFrICAgICAgICAgICAgICAgICAvLyAoXG4gICAgICAg
IGNhc2UgMHgyOTogcGFyZW4tLTsgYnJlYWsgICAgICAgICAgICAgICAgIC8vIClcbiAgICAgICAg
Y2FzZSAweDVCOiBzcXVhcmUrKzsgYnJlYWsgICAgICAgICAgICAgICAgLy8gW1xuICAgICAgICBj
YXNlIDB4NUQ6IHNxdWFyZS0tOyBicmVhayAgICAgICAgICAgICAgICAvLyBdXG4gICAgICAgIGNh
c2UgMHg3QjogY3VybHkrKzsgYnJlYWsgICAgICAgICAgICAgICAgIC8vIHtcbiAgICAgICAgY2Fz
ZSAweDdEOiBjdXJseS0tOyBicmVhayAgICAgICAgICAgICAgICAgLy8gfVxuICAgICAgfVxuICAg
ICAgaWYgKGMgPT09IDB4MmYpIHsgLy8gL1xuICAgICAgICB2YXIgaiA9IGkgLSAxO1xuICAgICAg
ICB2YXIgcCA9ICh2b2lkIDApO1xuICAgICAgICAvLyBmaW5kIGZpcnN0IG5vbi13aGl0ZXNwYWNl
IHByZXYgY2hhclxuICAgICAgICBmb3IgKDsgaiA+PSAwOyBqLS0pIHtcbiAgICAgICAgICBwID0g
ZXhwLmNoYXJBdChqKTtcbiAgICAgICAgICBpZiAocCAhPT0gJyAnKSB7IGJyZWFrIH1cbiAgICAg
ICAgfVxuICAgICAgICBpZiAoIXAgfHwgIXZhbGlkRGl2aXNpb25DaGFyUkUudGVzdChwKSkge1xu
ICAgICAgICAgIGluUmVnZXggPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9
XG5cbiAgaWYgKGV4cHJlc3Npb24gPT09IHVuZGVmaW5lZCkge1xuICAgIGV4cHJlc3Npb24gPSBl
eHAuc2xpY2UoMCwgaSkudHJpbSgpO1xuICB9IGVsc2UgaWYgKGxhc3RGaWx0ZXJJbmRleCAhPT0g
MCkge1xuICAgIHB1c2hGaWx0ZXIoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHB1c2hGaWx0ZXIgKCkg
e1xuICAgIChmaWx0ZXJzIHx8IChmaWx0ZXJzID0gW10pKS5wdXNoKGV4cC5zbGljZShsYXN0Rmls
dGVySW5kZXgsIGkpLnRyaW0oKSk7XG4gICAgbGFzdEZpbHRlckluZGV4ID0gaSArIDE7XG4gIH1c
blxuICBpZiAoZmlsdGVycykge1xuICAgIGZvciAoaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aDsg
aSsrKSB7XG4gICAgICBleHByZXNzaW9uID0gd3JhcEZpbHRlcihleHByZXNzaW9uLCBmaWx0ZXJz
W2ldKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXhwcmVzc2lvblxufVxuXG5mdW5jdGlvbiB3
cmFwRmlsdGVyIChleHAsIGZpbHRlcikge1xuICB2YXIgaSA9IGZpbHRlci5pbmRleE9mKCcoJyk7
XG4gIGlmIChpIDwgMCkge1xuICAgIC8vIF9mOiByZXNvbHZlRmlsdGVyXG4gICAgcmV0dXJuIChc
Il9mKFxcXCJcIiArIGZpbHRlciArIFwiXFxcIikoXCIgKyBleHAgKyBcIilcIilcbiAgfSBlbHNl
IHtcbiAgICB2YXIgbmFtZSA9IGZpbHRlci5zbGljZSgwLCBpKTtcbiAgICB2YXIgYXJncyA9IGZp
bHRlci5zbGljZShpICsgMSk7XG4gICAgcmV0dXJuIChcIl9mKFxcXCJcIiArIG5hbWUgKyBcIlxc
XCIpKFwiICsgZXhwICsgXCIsXCIgKyBhcmdzKVxuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlv
biBiYXNlV2FybiAobXNnKSB7XG4gIGNvbnNvbGUuZXJyb3IoKFwiW1Z1ZSBjb21waWxlcl06IFwi
ICsgbXNnKSk7XG59XG5cbmZ1bmN0aW9uIHBsdWNrTW9kdWxlRnVuY3Rpb24gKFxuICBtb2R1bGVz
LFxuICBrZXlcbikge1xuICByZXR1cm4gbW9kdWxlc1xuICAgID8gbW9kdWxlcy5tYXAoZnVuY3Rp
b24gKG0pIHsgcmV0dXJuIG1ba2V5XTsgfSkuZmlsdGVyKGZ1bmN0aW9uIChfKSB7IHJldHVybiBf
OyB9KVxuICAgIDogW11cbn1cblxuZnVuY3Rpb24gYWRkUHJvcCAoZWwsIG5hbWUsIHZhbHVlKSB7
XG4gIChlbC5wcm9wcyB8fCAoZWwucHJvcHMgPSBbXSkpLnB1c2goeyBuYW1lOiBuYW1lLCB2YWx1
ZTogdmFsdWUgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZEF0dHIgKGVsLCBuYW1lLCB2YWx1ZSkge1xu
ICAoZWwuYXR0cnMgfHwgKGVsLmF0dHJzID0gW10pKS5wdXNoKHsgbmFtZTogbmFtZSwgdmFsdWU6
IHZhbHVlIH0pO1xufVxuXG5mdW5jdGlvbiBhZGREaXJlY3RpdmUgKFxuICBlbCxcbiAgbmFtZSxc
biAgcmF3TmFtZSxcbiAgdmFsdWUsXG4gIGFyZyxcbiAgbW9kaWZpZXJzXG4pIHtcbiAgKGVsLmRp
cmVjdGl2ZXMgfHwgKGVsLmRpcmVjdGl2ZXMgPSBbXSkpLnB1c2goeyBuYW1lOiBuYW1lLCByYXdO
YW1lOiByYXdOYW1lLCB2YWx1ZTogdmFsdWUsIGFyZzogYXJnLCBtb2RpZmllcnM6IG1vZGlmaWVy
cyB9KTtcbn1cblxuZnVuY3Rpb24gYWRkSGFuZGxlciAoXG4gIGVsLFxuICBuYW1lLFxuICB2YWx1
ZSxcbiAgbW9kaWZpZXJzLFxuICBpbXBvcnRhbnQsXG4gIHdhcm5cbikge1xuICAvLyB3YXJuIHBy
ZXZlbnQgYW5kIHBhc3NpdmUgbW9kaWZpZXJcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4g
IGlmIChcbiAgICBmYWxzZVxuICApIHtcbiAgICB3YXJuKFxuICAgICAgJ3Bhc3NpdmUgYW5kIHBy
ZXZlbnQgY2FuXFwndCBiZSB1c2VkIHRvZ2V0aGVyLiAnICtcbiAgICAgICdQYXNzaXZlIGhhbmRs
ZXIgY2FuXFwndCBwcmV2ZW50IGRlZmF1bHQgZXZlbnQuJ1xuICAgICk7XG4gIH1cbiAgLy8gY2hl
Y2sgY2FwdHVyZSBtb2RpZmllclxuICBpZiAobW9kaWZpZXJzICYmIG1vZGlmaWVycy5jYXB0dXJl
KSB7XG4gICAgZGVsZXRlIG1vZGlmaWVycy5jYXB0dXJlO1xuICAgIG5hbWUgPSAnIScgKyBuYW1l
OyAvLyBtYXJrIHRoZSBldmVudCBhcyBjYXB0dXJlZFxuICB9XG4gIGlmIChtb2RpZmllcnMgJiYg
bW9kaWZpZXJzLm9uY2UpIHtcbiAgICBkZWxldGUgbW9kaWZpZXJzLm9uY2U7XG4gICAgbmFtZSA9
ICd+JyArIG5hbWU7IC8vIG1hcmsgdGhlIGV2ZW50IGFzIG9uY2VcbiAgfVxuICAvKiBpc3RhbmJ1
bCBpZ25vcmUgaWYgKi9cbiAgaWYgKG1vZGlmaWVycyAmJiBtb2RpZmllcnMucGFzc2l2ZSkge1xu
ICAgIGRlbGV0ZSBtb2RpZmllcnMucGFzc2l2ZTtcbiAgICBuYW1lID0gJyYnICsgbmFtZTsgLy8g
bWFyayB0aGUgZXZlbnQgYXMgcGFzc2l2ZVxuICB9XG4gIHZhciBldmVudHM7XG4gIGlmIChtb2Rp
ZmllcnMgJiYgbW9kaWZpZXJzLm5hdGl2ZSkge1xuICAgIGRlbGV0ZSBtb2RpZmllcnMubmF0aXZl
O1xuICAgIGV2ZW50cyA9IGVsLm5hdGl2ZUV2ZW50cyB8fCAoZWwubmF0aXZlRXZlbnRzID0ge30p
O1xuICB9IGVsc2Uge1xuICAgIGV2ZW50cyA9IGVsLmV2ZW50cyB8fCAoZWwuZXZlbnRzID0ge30p
O1xuICB9XG4gIHZhciBuZXdIYW5kbGVyID0geyB2YWx1ZTogdmFsdWUsIG1vZGlmaWVyczogbW9k
aWZpZXJzIH07XG4gIHZhciBoYW5kbGVycyA9IGV2ZW50c1tuYW1lXTtcbiAgLyogaXN0YW5idWwg
aWdub3JlIGlmICovXG4gIGlmIChBcnJheS5pc0FycmF5KGhhbmRsZXJzKSkge1xuICAgIGltcG9y
dGFudCA/IGhhbmRsZXJzLnVuc2hpZnQobmV3SGFuZGxlcikgOiBoYW5kbGVycy5wdXNoKG5ld0hh
bmRsZXIpO1xuICB9IGVsc2UgaWYgKGhhbmRsZXJzKSB7XG4gICAgZXZlbnRzW25hbWVdID0gaW1w
b3J0YW50ID8gW25ld0hhbmRsZXIsIGhhbmRsZXJzXSA6IFtoYW5kbGVycywgbmV3SGFuZGxlcl07
XG4gIH0gZWxzZSB7XG4gICAgZXZlbnRzW25hbWVdID0gbmV3SGFuZGxlcjtcbiAgfVxufVxuXG5m
dW5jdGlvbiBnZXRCaW5kaW5nQXR0ciAoXG4gIGVsLFxuICBuYW1lLFxuICBnZXRTdGF0aWNcbikg
e1xuICB2YXIgZHluYW1pY1ZhbHVlID1cbiAgICBnZXRBbmRSZW1vdmVBdHRyKGVsLCAnOicgKyBu
YW1lKSB8fFxuICAgIGdldEFuZFJlbW92ZUF0dHIoZWwsICd2LWJpbmQ6JyArIG5hbWUpO1xuICBp
ZiAoZHluYW1pY1ZhbHVlICE9IG51bGwpIHtcbiAgICByZXR1cm4gcGFyc2VGaWx0ZXJzKGR5bmFt
aWNWYWx1ZSlcbiAgfSBlbHNlIGlmIChnZXRTdGF0aWMgIT09IGZhbHNlKSB7XG4gICAgdmFyIHN0
YXRpY1ZhbHVlID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgbmFtZSk7XG4gICAgaWYgKHN0YXRpY1Zh
bHVlICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShzdGF0aWNWYWx1ZSlc
biAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0QW5kUmVtb3ZlQXR0ciAoZWwsIG5hbWUpIHtc
biAgdmFyIHZhbDtcbiAgaWYgKCh2YWwgPSBlbC5hdHRyc01hcFtuYW1lXSkgIT0gbnVsbCkge1xu
ICAgIHZhciBsaXN0ID0gZWwuYXR0cnNMaXN0O1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gbGlz
dC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGlmIChsaXN0W2ldLm5hbWUgPT09IG5hbWUp
IHtcbiAgICAgICAgbGlzdC5zcGxpY2UoaSwgMSk7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4g
ICAgfVxuICB9XG4gIHJldHVybiB2YWxcbn1cblxuLyogICovXG5cbi8qKlxuICogQ3Jvc3MtcGxh
dGZvcm0gY29kZSBnZW5lcmF0aW9uIGZvciBjb21wb25lbnQgdi1tb2RlbFxuICovXG5mdW5jdGlv
biBnZW5Db21wb25lbnRNb2RlbCAoXG4gIGVsLFxuICB2YWx1ZSxcbiAgbW9kaWZpZXJzXG4pIHtc
biAgdmFyIHJlZiA9IG1vZGlmaWVycyB8fCB7fTtcbiAgdmFyIG51bWJlciA9IHJlZi5udW1iZXI7
XG4gIHZhciB0cmltID0gcmVmLnRyaW07XG5cbiAgdmFyIGJhc2VWYWx1ZUV4cHJlc3Npb24gPSAn
JCR2JztcbiAgdmFyIHZhbHVlRXhwcmVzc2lvbiA9IGJhc2VWYWx1ZUV4cHJlc3Npb247XG4gIGlm
ICh0cmltKSB7XG4gICAgdmFsdWVFeHByZXNzaW9uID1cbiAgICAgIFwiKHR5cGVvZiBcIiArIGJh
c2VWYWx1ZUV4cHJlc3Npb24gKyBcIiA9PT0gJ3N0cmluZydcIiArXG4gICAgICAgIFwiPyBcIiAr
IGJhc2VWYWx1ZUV4cHJlc3Npb24gKyBcIi50cmltKClcIiArXG4gICAgICAgIFwiOiBcIiArIGJh
c2VWYWx1ZUV4cHJlc3Npb24gKyBcIilcIjtcbiAgfVxuICBpZiAobnVtYmVyKSB7XG4gICAgdmFs
dWVFeHByZXNzaW9uID0gXCJfbihcIiArIHZhbHVlRXhwcmVzc2lvbiArIFwiKVwiO1xuICB9XG4g
IHZhciBhc3NpZ25tZW50ID0gZ2VuQXNzaWdubWVudENvZGUodmFsdWUsIHZhbHVlRXhwcmVzc2lv
bik7XG5cbiAgZWwubW9kZWwgPSB7XG4gICAgdmFsdWU6IChcIihcIiArIHZhbHVlICsgXCIpXCIp
LFxuICAgIGV4cHJlc3Npb246IChcIlxcXCJcIiArIHZhbHVlICsgXCJcXFwiXCIpLFxuICAgIGNh
bGxiYWNrOiAoXCJmdW5jdGlvbiAoXCIgKyBiYXNlVmFsdWVFeHByZXNzaW9uICsgXCIpIHtcIiAr
IGFzc2lnbm1lbnQgKyBcIn1cIilcbiAgfTtcbn1cblxuLyoqXG4gKiBDcm9zcy1wbGF0Zm9ybSBj
b2RlZ2VuIGhlbHBlciBmb3IgZ2VuZXJhdGluZyB2LW1vZGVsIHZhbHVlIGFzc2lnbm1lbnQgY29k
ZS5cbiAqL1xuZnVuY3Rpb24gZ2VuQXNzaWdubWVudENvZGUgKFxuICB2YWx1ZSxcbiAgYXNzaWdu
bWVudFxuKSB7XG4gIHZhciBtb2RlbFJzID0gcGFyc2VNb2RlbCh2YWx1ZSk7XG4gIGlmIChtb2Rl
bFJzLmlkeCA9PT0gbnVsbCkge1xuICAgIHJldHVybiAodmFsdWUgKyBcIj1cIiArIGFzc2lnbm1l
bnQpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIChcIiRzZXQoXCIgKyAobW9kZWxScy5leHApICsg
XCIsIFwiICsgKG1vZGVsUnMuaWR4KSArIFwiLCBcIiArIGFzc2lnbm1lbnQgKyBcIilcIilcbiAg
fVxufVxuXG4vKipcbiAqIHBhcnNlIGRpcmVjdGl2ZSBtb2RlbCB0byBkbyB0aGUgYXJyYXkgdXBk
YXRlIHRyYW5zZm9ybS4gYVtpZHhdID0gdmFsID0+ICQkYS5zcGxpY2UoJCRpZHgsIDEsIHZhbClc
biAqXG4gKiBmb3IgbG9vcCBwb3NzaWJsZSBjYXNlczpcbiAqXG4gKiAtIHRlc3RcbiAqIC0gdGVz
dFtpZHhdXG4gKiAtIHRlc3RbdGVzdDFbaWR4XV1cbiAqIC0gdGVzdFtcImFcIl1baWR4XVxuICog
LSB4eHgudGVzdFthW2FdLnRlc3QxW2lkeF1dXG4gKiAtIHRlc3QueHh4LmFbXCJhc2FcIl1bdGVz
dDFbaWR4XV1cbiAqXG4gKi9cblxudmFyIGxlbjtcbnZhciBzdHI7XG52YXIgY2hyO1xudmFyIGlu
ZGV4JDE7XG52YXIgZXhwcmVzc2lvblBvcztcbnZhciBleHByZXNzaW9uRW5kUG9zO1xuXG5mdW5j
dGlvbiBwYXJzZU1vZGVsICh2YWwpIHtcbiAgc3RyID0gdmFsO1xuICBsZW4gPSBzdHIubGVuZ3Ro
O1xuICBpbmRleCQxID0gZXhwcmVzc2lvblBvcyA9IGV4cHJlc3Npb25FbmRQb3MgPSAwO1xuXG4g
IGlmICh2YWwuaW5kZXhPZignWycpIDwgMCB8fCB2YWwubGFzdEluZGV4T2YoJ10nKSA8IGxlbiAt
IDEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXhwOiB2YWwsXG4gICAgICBpZHg6IG51bGxcbiAg
ICB9XG4gIH1cblxuICB3aGlsZSAoIWVvZigpKSB7XG4gICAgY2hyID0gbmV4dCgpO1xuICAgIC8q
IGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpc1N0cmluZ1N0YXJ0KGNocikpIHtcbiAg
ICAgIHBhcnNlU3RyaW5nKGNocik7XG4gICAgfSBlbHNlIGlmIChjaHIgPT09IDB4NUIpIHtcbiAg
ICAgIHBhcnNlQnJhY2tldChjaHIpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZXhw
OiB2YWwuc3Vic3RyaW5nKDAsIGV4cHJlc3Npb25Qb3MpLFxuICAgIGlkeDogdmFsLnN1YnN0cmlu
ZyhleHByZXNzaW9uUG9zICsgMSwgZXhwcmVzc2lvbkVuZFBvcylcbiAgfVxufVxuXG5mdW5jdGlv
biBuZXh0ICgpIHtcbiAgcmV0dXJuIHN0ci5jaGFyQ29kZUF0KCsraW5kZXgkMSlcbn1cblxuZnVu
Y3Rpb24gZW9mICgpIHtcbiAgcmV0dXJuIGluZGV4JDEgPj0gbGVuXG59XG5cbmZ1bmN0aW9uIGlz
U3RyaW5nU3RhcnQgKGNocikge1xuICByZXR1cm4gY2hyID09PSAweDIyIHx8IGNociA9PT0gMHgy
N1xufVxuXG5mdW5jdGlvbiBwYXJzZUJyYWNrZXQgKGNocikge1xuICB2YXIgaW5CcmFja2V0ID0g
MTtcbiAgZXhwcmVzc2lvblBvcyA9IGluZGV4JDE7XG4gIHdoaWxlICghZW9mKCkpIHtcbiAgICBj
aHIgPSBuZXh0KCk7XG4gICAgaWYgKGlzU3RyaW5nU3RhcnQoY2hyKSkge1xuICAgICAgcGFyc2VT
dHJpbmcoY2hyKTtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChjaHIgPT09IDB4NUIp
IHsgaW5CcmFja2V0Kys7IH1cbiAgICBpZiAoY2hyID09PSAweDVEKSB7IGluQnJhY2tldC0tOyB9
XG4gICAgaWYgKGluQnJhY2tldCA9PT0gMCkge1xuICAgICAgZXhwcmVzc2lvbkVuZFBvcyA9IGlu
ZGV4JDE7XG4gICAgICBicmVha1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVN0cmlu
ZyAoY2hyKSB7XG4gIHZhciBzdHJpbmdRdW90ZSA9IGNocjtcbiAgd2hpbGUgKCFlb2YoKSkge1xu
ICAgIGNociA9IG5leHQoKTtcbiAgICBpZiAoY2hyID09PSBzdHJpbmdRdW90ZSkge1xuICAgICAg
YnJlYWtcbiAgICB9XG4gIH1cbn1cblxuLyogICovXG5cbnZhciB3YXJuJDE7XG5cbi8vIGluIHNv
bWUgY2FzZXMsIHRoZSBldmVudCB1c2VkIGhhcyB0byBiZSBkZXRlcm1pbmVkIGF0IHJ1bnRpbWVc
bi8vIHNvIHdlIHVzZWQgc29tZSByZXNlcnZlZCB0b2tlbnMgZHVyaW5nIGNvbXBpbGUuXG52YXIg
UkFOR0VfVE9LRU4gPSAnX19yJztcbnZhciBDSEVDS0JPWF9SQURJT19UT0tFTiA9ICdfX2MnO1xu
XG5mdW5jdGlvbiBtb2RlbCAoXG4gIGVsLFxuICBkaXIsXG4gIF93YXJuXG4pIHtcbiAgd2FybiQx
ID0gX3dhcm47XG4gIHZhciB2YWx1ZSA9IGRpci52YWx1ZTtcbiAgdmFyIG1vZGlmaWVycyA9IGRp
ci5tb2RpZmllcnM7XG4gIHZhciB0YWcgPSBlbC50YWc7XG4gIHZhciB0eXBlID0gZWwuYXR0cnNN
YXAudHlwZTtcblxuICBpZiAoZmFsc2UpIHtcbiAgICB2YXIgZHluYW1pY1R5cGUgPSBlbC5hdHRy
c01hcFsndi1iaW5kOnR5cGUnXSB8fCBlbC5hdHRyc01hcFsnOnR5cGUnXTtcbiAgICBpZiAodGFn
ID09PSAnaW5wdXQnICYmIGR5bmFtaWNUeXBlKSB7XG4gICAgICB3YXJuJDEoXG4gICAgICAgIFwi
PGlucHV0IDp0eXBlPVxcXCJcIiArIGR5bmFtaWNUeXBlICsgXCJcXFwiIHYtbW9kZWw9XFxcIlwi
ICsgdmFsdWUgKyBcIlxcXCI+OlxcblwiICtcbiAgICAgICAgXCJ2LW1vZGVsIGRvZXMgbm90IHN1
cHBvcnQgZHluYW1pYyBpbnB1dCB0eXBlcy4gVXNlIHYtaWYgYnJhbmNoZXMgaW5zdGVhZC5cIlxu
ICAgICAgKTtcbiAgICB9XG4gICAgLy8gaW5wdXRzIHdpdGggdHlwZT1cImZpbGVcIiBhcmUgcmVh
ZCBvbmx5IGFuZCBzZXR0aW5nIHRoZSBpbnB1dCdzXG4gICAgLy8gdmFsdWUgd2lsbCB0aHJvdyBh
biBlcnJvci5cbiAgICBpZiAodGFnID09PSAnaW5wdXQnICYmIHR5cGUgPT09ICdmaWxlJykge1xu
ICAgICAgd2FybiQxKFxuICAgICAgICBcIjxcIiArIChlbC50YWcpICsgXCIgdi1tb2RlbD1cXFwi
XCIgKyB2YWx1ZSArIFwiXFxcIiB0eXBlPVxcXCJmaWxlXFxcIj46XFxuXCIgK1xuICAgICAgICBc
IkZpbGUgaW5wdXRzIGFyZSByZWFkIG9ubHkuIFVzZSBhIHYtb246Y2hhbmdlIGxpc3RlbmVyIGlu
c3RlYWQuXCJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGVsLmNvbXBvbmVudCkge1xu
ICAgIGdlbkNvbXBvbmVudE1vZGVsKGVsLCB2YWx1ZSwgbW9kaWZpZXJzKTtcbiAgICAvLyBjb21w
b25lbnQgdi1tb2RlbCBkb2Vzbid0IG5lZWQgZXh0cmEgcnVudGltZVxuICAgIHJldHVybiBmYWxz
ZVxuICB9IGVsc2UgaWYgKHRhZyA9PT0gJ3NlbGVjdCcpIHtcbiAgICBnZW5TZWxlY3QoZWwsIHZh
bHVlLCBtb2RpZmllcnMpO1xuICB9IGVsc2UgaWYgKHRhZyA9PT0gJ2lucHV0JyAmJiB0eXBlID09
PSAnY2hlY2tib3gnKSB7XG4gICAgZ2VuQ2hlY2tib3hNb2RlbChlbCwgdmFsdWUsIG1vZGlmaWVy
cyk7XG4gIH0gZWxzZSBpZiAodGFnID09PSAnaW5wdXQnICYmIHR5cGUgPT09ICdyYWRpbycpIHtc
biAgICBnZW5SYWRpb01vZGVsKGVsLCB2YWx1ZSwgbW9kaWZpZXJzKTtcbiAgfSBlbHNlIGlmICh0
YWcgPT09ICdpbnB1dCcgfHwgdGFnID09PSAndGV4dGFyZWEnKSB7XG4gICAgZ2VuRGVmYXVsdE1v
ZGVsKGVsLCB2YWx1ZSwgbW9kaWZpZXJzKTtcbiAgfSBlbHNlIGlmICghY29uZmlnLmlzUmVzZXJ2
ZWRUYWcodGFnKSkge1xuICAgIGdlbkNvbXBvbmVudE1vZGVsKGVsLCB2YWx1ZSwgbW9kaWZpZXJz
KTtcbiAgICAvLyBjb21wb25lbnQgdi1tb2RlbCBkb2Vzbid0IG5lZWQgZXh0cmEgcnVudGltZVxu
ICAgIHJldHVybiBmYWxzZVxuICB9IGVsc2UgaWYgKGZhbHNlKSB7XG4gICAgd2FybiQxKFxuICAg
ICAgXCI8XCIgKyAoZWwudGFnKSArIFwiIHYtbW9kZWw9XFxcIlwiICsgdmFsdWUgKyBcIlxcXCI+
OiBcIiArXG4gICAgICBcInYtbW9kZWwgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGVsZW1lbnQg
dHlwZS4gXCIgK1xuICAgICAgJ0lmIHlvdSBhcmUgd29ya2luZyB3aXRoIGNvbnRlbnRlZGl0YWJs
ZSwgaXRcXCdzIHJlY29tbWVuZGVkIHRvICcgK1xuICAgICAgJ3dyYXAgYSBsaWJyYXJ5IGRlZGlj
YXRlZCBmb3IgdGhhdCBwdXJwb3NlIGluc2lkZSBhIGN1c3RvbSBjb21wb25lbnQuJ1xuICAgICk7
XG4gIH1cblxuICAvLyBlbnN1cmUgcnVudGltZSBkaXJlY3RpdmUgbWV0YWRhdGFcbiAgcmV0dXJu
IHRydWVcbn1cblxuZnVuY3Rpb24gZ2VuQ2hlY2tib3hNb2RlbCAoXG4gIGVsLFxuICB2YWx1ZSxc
biAgbW9kaWZpZXJzXG4pIHtcbiAgdmFyIG51bWJlciA9IG1vZGlmaWVycyAmJiBtb2RpZmllcnMu
bnVtYmVyO1xuICB2YXIgdmFsdWVCaW5kaW5nID0gZ2V0QmluZGluZ0F0dHIoZWwsICd2YWx1ZScp
IHx8ICdudWxsJztcbiAgdmFyIHRydWVWYWx1ZUJpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwg
J3RydWUtdmFsdWUnKSB8fCAndHJ1ZSc7XG4gIHZhciBmYWxzZVZhbHVlQmluZGluZyA9IGdldEJp
bmRpbmdBdHRyKGVsLCAnZmFsc2UtdmFsdWUnKSB8fCAnZmFsc2UnO1xuICBhZGRQcm9wKGVsLCAn
Y2hlY2tlZCcsXG4gICAgXCJBcnJheS5pc0FycmF5KFwiICsgdmFsdWUgKyBcIilcIiArXG4gICAg
ICBcIj9faShcIiArIHZhbHVlICsgXCIsXCIgKyB2YWx1ZUJpbmRpbmcgKyBcIik+LTFcIiArIChc
biAgICAgICAgdHJ1ZVZhbHVlQmluZGluZyA9PT0gJ3RydWUnXG4gICAgICAgICAgPyAoXCI6KFwi
ICsgdmFsdWUgKyBcIilcIilcbiAgICAgICAgICA6IChcIjpfcShcIiArIHZhbHVlICsgXCIsXCIg
KyB0cnVlVmFsdWVCaW5kaW5nICsgXCIpXCIpXG4gICAgICApXG4gICk7XG4gIGFkZEhhbmRsZXIo
ZWwsIENIRUNLQk9YX1JBRElPX1RPS0VOLFxuICAgIFwidmFyICQkYT1cIiArIHZhbHVlICsgXCIs
XCIgK1xuICAgICAgICAnJCRlbD0kZXZlbnQudGFyZ2V0LCcgK1xuICAgICAgICBcIiQkYz0kJGVs
LmNoZWNrZWQ/KFwiICsgdHJ1ZVZhbHVlQmluZGluZyArIFwiKTooXCIgKyBmYWxzZVZhbHVlQmlu
ZGluZyArIFwiKTtcIiArXG4gICAgJ2lmKEFycmF5LmlzQXJyYXkoJCRhKSl7JyArXG4gICAgICBc
InZhciAkJHY9XCIgKyAobnVtYmVyID8gJ19uKCcgKyB2YWx1ZUJpbmRpbmcgKyAnKScgOiB2YWx1
ZUJpbmRpbmcpICsgXCIsXCIgK1xuICAgICAgICAgICckJGk9X2koJCRhLCQkdik7JyArXG4gICAg
ICBcImlmKCQkZWwuY2hlY2tlZCl7JCRpPDAmJihcIiArIHZhbHVlICsgXCI9JCRhLmNvbmNhdCgk
JHYpKX1cIiArXG4gICAgICBcImVsc2V7JCRpPi0xJiYoXCIgKyB2YWx1ZSArIFwiPSQkYS5zbGlj
ZSgwLCQkaSkuY29uY2F0KCQkYS5zbGljZSgkJGkrMSkpKX1cIiArXG4gICAgXCJ9ZWxzZXtcIiAr
IChnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgJyQkYycpKSArIFwifVwiLFxuICAgIG51bGwsIHRy
dWVcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2VuUmFkaW9Nb2RlbCAoXG4gICAgZWwsXG4gICAgdmFs
dWUsXG4gICAgbW9kaWZpZXJzXG4pIHtcbiAgdmFyIG51bWJlciA9IG1vZGlmaWVycyAmJiBtb2Rp
ZmllcnMubnVtYmVyO1xuICB2YXIgdmFsdWVCaW5kaW5nID0gZ2V0QmluZGluZ0F0dHIoZWwsICd2
YWx1ZScpIHx8ICdudWxsJztcbiAgdmFsdWVCaW5kaW5nID0gbnVtYmVyID8gKFwiX24oXCIgKyB2
YWx1ZUJpbmRpbmcgKyBcIilcIikgOiB2YWx1ZUJpbmRpbmc7XG4gIGFkZFByb3AoZWwsICdjaGVj
a2VkJywgKFwiX3EoXCIgKyB2YWx1ZSArIFwiLFwiICsgdmFsdWVCaW5kaW5nICsgXCIpXCIpKTtc
biAgYWRkSGFuZGxlcihlbCwgQ0hFQ0tCT1hfUkFESU9fVE9LRU4sIGdlbkFzc2lnbm1lbnRDb2Rl
KHZhbHVlLCB2YWx1ZUJpbmRpbmcpLCBudWxsLCB0cnVlKTtcbn1cblxuZnVuY3Rpb24gZ2VuU2Vs
ZWN0IChcbiAgICBlbCxcbiAgICB2YWx1ZSxcbiAgICBtb2RpZmllcnNcbikge1xuICB2YXIgbnVt
YmVyID0gbW9kaWZpZXJzICYmIG1vZGlmaWVycy5udW1iZXI7XG4gIHZhciBzZWxlY3RlZFZhbCA9
IFwiQXJyYXkucHJvdG90eXBlLmZpbHRlclwiICtcbiAgICBcIi5jYWxsKCRldmVudC50YXJnZXQu
b3B0aW9ucyxmdW5jdGlvbihvKXtyZXR1cm4gby5zZWxlY3RlZH0pXCIgK1xuICAgIFwiLm1hcChm
dW5jdGlvbihvKXt2YXIgdmFsID0gXFxcIl92YWx1ZVxcXCIgaW4gbyA/IG8uX3ZhbHVlIDogby52
YWx1ZTtcIiArXG4gICAgXCJyZXR1cm4gXCIgKyAobnVtYmVyID8gJ19uKHZhbCknIDogJ3ZhbCcp
ICsgXCJ9KVwiO1xuXG4gIHZhciBhc3NpZ25tZW50ID0gJyRldmVudC50YXJnZXQubXVsdGlwbGUg
PyAkJHNlbGVjdGVkVmFsIDogJCRzZWxlY3RlZFZhbFswXSc7XG4gIHZhciBjb2RlID0gXCJ2YXIg
JCRzZWxlY3RlZFZhbCA9IFwiICsgc2VsZWN0ZWRWYWwgKyBcIjtcIjtcbiAgY29kZSA9IGNvZGUg
KyBcIiBcIiArIChnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgYXNzaWdubWVudCkpO1xuICBhZGRI
YW5kbGVyKGVsLCAnY2hhbmdlJywgY29kZSwgbnVsbCwgdHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIGdl
bkRlZmF1bHRNb2RlbCAoXG4gIGVsLFxuICB2YWx1ZSxcbiAgbW9kaWZpZXJzXG4pIHtcbiAgdmFy
IHR5cGUgPSBlbC5hdHRyc01hcC50eXBlO1xuICB2YXIgcmVmID0gbW9kaWZpZXJzIHx8IHt9O1xu
ICB2YXIgbGF6eSA9IHJlZi5sYXp5O1xuICB2YXIgbnVtYmVyID0gcmVmLm51bWJlcjtcbiAgdmFy
IHRyaW0gPSByZWYudHJpbTtcbiAgdmFyIG5lZWRDb21wb3NpdGlvbkd1YXJkID0gIWxhenkgJiYg
dHlwZSAhPT0gJ3JhbmdlJztcbiAgdmFyIGV2ZW50ID0gbGF6eVxuICAgID8gJ2NoYW5nZSdcbiAg
ICA6IHR5cGUgPT09ICdyYW5nZSdcbiAgICAgID8gUkFOR0VfVE9LRU5cbiAgICAgIDogJ2lucHV0
JztcblxuICB2YXIgdmFsdWVFeHByZXNzaW9uID0gJyRldmVudC50YXJnZXQudmFsdWUnO1xuICBp
ZiAodHJpbSkge1xuICAgIHZhbHVlRXhwcmVzc2lvbiA9IFwiJGV2ZW50LnRhcmdldC52YWx1ZS50
cmltKClcIjtcbiAgfVxuICBpZiAobnVtYmVyKSB7XG4gICAgdmFsdWVFeHByZXNzaW9uID0gXCJf
bihcIiArIHZhbHVlRXhwcmVzc2lvbiArIFwiKVwiO1xuICB9XG5cbiAgdmFyIGNvZGUgPSBnZW5B
c3NpZ25tZW50Q29kZSh2YWx1ZSwgdmFsdWVFeHByZXNzaW9uKTtcbiAgaWYgKG5lZWRDb21wb3Np
dGlvbkd1YXJkKSB7XG4gICAgY29kZSA9IFwiaWYoJGV2ZW50LnRhcmdldC5jb21wb3NpbmcpcmV0
dXJuO1wiICsgY29kZTtcbiAgfVxuXG4gIGFkZFByb3AoZWwsICd2YWx1ZScsIChcIihcIiArIHZh
bHVlICsgXCIpXCIpKTtcbiAgYWRkSGFuZGxlcihlbCwgZXZlbnQsIGNvZGUsIG51bGwsIHRydWUp
O1xuICBpZiAodHJpbSB8fCBudW1iZXIpIHtcbiAgICBhZGRIYW5kbGVyKGVsLCAnYmx1cicsICck
Zm9yY2VVcGRhdGUoKScpO1xuICB9XG59XG5cbi8qICAqL1xuXG4vLyBub3JtYWxpemUgdi1tb2Rl
bCBldmVudCB0b2tlbnMgdGhhdCBjYW4gb25seSBiZSBkZXRlcm1pbmVkIGF0IHJ1bnRpbWUuXG4v
LyBpdCdzIGltcG9ydGFudCB0byBwbGFjZSB0aGUgZXZlbnQgYXMgdGhlIGZpcnN0IGluIHRoZSBh
cnJheSBiZWNhdXNlXG4vLyB0aGUgd2hvbGUgcG9pbnQgaXMgZW5zdXJpbmcgdGhlIHYtbW9kZWwg
Y2FsbGJhY2sgZ2V0cyBjYWxsZWQgYmVmb3JlXG4vLyB1c2VyLWF0dGFjaGVkIGhhbmRsZXJzLlxu
ZnVuY3Rpb24gbm9ybWFsaXplRXZlbnRzIChvbikge1xuICB2YXIgZXZlbnQ7XG4gIC8qIGlzdGFu
YnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoaXNEZWYob25bUkFOR0VfVE9LRU5dKSkge1xuICAgIC8v
IElFIGlucHV0W3R5cGU9cmFuZ2VdIG9ubHkgc3VwcG9ydHMgYGNoYW5nZWAgZXZlbnRcbiAgICBl
dmVudCA9IGlzSUUgPyAnY2hhbmdlJyA6ICdpbnB1dCc7XG4gICAgb25bZXZlbnRdID0gW10uY29u
Y2F0KG9uW1JBTkdFX1RPS0VOXSwgb25bZXZlbnRdIHx8IFtdKTtcbiAgICBkZWxldGUgb25bUkFO
R0VfVE9LRU5dO1xuICB9XG4gIGlmIChpc0RlZihvbltDSEVDS0JPWF9SQURJT19UT0tFTl0pKSB7
XG4gICAgLy8gQ2hyb21lIGZpcmVzIG1pY3JvdGFza3MgaW4gYmV0d2VlbiBjbGljay9jaGFuZ2Us
IGxlYWRzIHRvICM0NTIxXG4gICAgZXZlbnQgPSBpc0Nocm9tZSA/ICdjbGljaycgOiAnY2hhbmdl
JztcbiAgICBvbltldmVudF0gPSBbXS5jb25jYXQob25bQ0hFQ0tCT1hfUkFESU9fVE9LRU5dLCBv
bltldmVudF0gfHwgW10pO1xuICAgIGRlbGV0ZSBvbltDSEVDS0JPWF9SQURJT19UT0tFTl07XG4g
IH1cbn1cblxudmFyIHRhcmdldCQxO1xuXG5mdW5jdGlvbiBhZGQkMSAoXG4gIGV2ZW50LFxuICBo
YW5kbGVyLFxuICBvbmNlJCQxLFxuICBjYXB0dXJlLFxuICBwYXNzaXZlXG4pIHtcbiAgaWYgKG9u
Y2UkJDEpIHtcbiAgICB2YXIgb2xkSGFuZGxlciA9IGhhbmRsZXI7XG4gICAgdmFyIF90YXJnZXQg
PSB0YXJnZXQkMTsgLy8gc2F2ZSBjdXJyZW50IHRhcmdldCBlbGVtZW50IGluIGNsb3N1cmVcbiAg
ICBoYW5kbGVyID0gZnVuY3Rpb24gKGV2KSB7XG4gICAgICB2YXIgcmVzID0gYXJndW1lbnRzLmxl
bmd0aCA9PT0gMVxuICAgICAgICA/IG9sZEhhbmRsZXIoZXYpXG4gICAgICAgIDogb2xkSGFuZGxl
ci5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgaWYgKHJlcyAhPT0gbnVsbCkge1xuICAg
ICAgICByZW1vdmUkMihldmVudCwgaGFuZGxlciwgY2FwdHVyZSwgX3RhcmdldCk7XG4gICAgICB9
XG4gICAgfTtcbiAgfVxuICB0YXJnZXQkMS5hZGRFdmVudExpc3RlbmVyKFxuICAgIGV2ZW50LFxu
ICAgIGhhbmRsZXIsXG4gICAgc3VwcG9ydHNQYXNzaXZlXG4gICAgICA/IHsgY2FwdHVyZTogY2Fw
dHVyZSwgcGFzc2l2ZTogcGFzc2l2ZSB9XG4gICAgICA6IGNhcHR1cmVcbiAgKTtcbn1cblxuZnVu
Y3Rpb24gcmVtb3ZlJDIgKFxuICBldmVudCxcbiAgaGFuZGxlcixcbiAgY2FwdHVyZSxcbiAgX3Rh
cmdldFxuKSB7XG4gIChfdGFyZ2V0IHx8IHRhcmdldCQxKS5yZW1vdmVFdmVudExpc3RlbmVyKGV2
ZW50LCBoYW5kbGVyLCBjYXB0dXJlKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlRE9NTGlzdGVuZXJz
IChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgaWYgKGlzVW5kZWYob2xkVm5vZGUuZGF0YS5vbikgJiYg
aXNVbmRlZih2bm9kZS5kYXRhLm9uKSkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciBvbiA9IHZu
b2RlLmRhdGEub24gfHwge307XG4gIHZhciBvbGRPbiA9IG9sZFZub2RlLmRhdGEub24gfHwge307
XG4gIHRhcmdldCQxID0gdm5vZGUuZWxtO1xuICBub3JtYWxpemVFdmVudHMob24pO1xuICB1cGRh
dGVMaXN0ZW5lcnMob24sIG9sZE9uLCBhZGQkMSwgcmVtb3ZlJDIsIHZub2RlLmNvbnRleHQpO1xu
fVxuXG52YXIgZXZlbnRzID0ge1xuICBjcmVhdGU6IHVwZGF0ZURPTUxpc3RlbmVycyxcbiAgdXBk
YXRlOiB1cGRhdGVET01MaXN0ZW5lcnNcbn07XG5cbi8qICAqL1xuXG5mdW5jdGlvbiB1cGRhdGVE
T01Qcm9wcyAob2xkVm5vZGUsIHZub2RlKSB7XG4gIGlmIChpc1VuZGVmKG9sZFZub2RlLmRhdGEu
ZG9tUHJvcHMpICYmIGlzVW5kZWYodm5vZGUuZGF0YS5kb21Qcm9wcykpIHtcbiAgICByZXR1cm5c
biAgfVxuICB2YXIga2V5LCBjdXI7XG4gIHZhciBlbG0gPSB2bm9kZS5lbG07XG4gIHZhciBvbGRQ
cm9wcyA9IG9sZFZub2RlLmRhdGEuZG9tUHJvcHMgfHwge307XG4gIHZhciBwcm9wcyA9IHZub2Rl
LmRhdGEuZG9tUHJvcHMgfHwge307XG4gIC8vIGNsb25lIG9ic2VydmVkIG9iamVjdHMsIGFzIHRo
ZSB1c2VyIHByb2JhYmx5IHdhbnRzIHRvIG11dGF0ZSBpdFxuICBpZiAoaXNEZWYocHJvcHMuX19v
Yl9fKSkge1xuICAgIHByb3BzID0gdm5vZGUuZGF0YS5kb21Qcm9wcyA9IGV4dGVuZCh7fSwgcHJv
cHMpO1xuICB9XG5cbiAgZm9yIChrZXkgaW4gb2xkUHJvcHMpIHtcbiAgICBpZiAoaXNVbmRlZihw
cm9wc1trZXldKSkge1xuICAgICAgZWxtW2tleV0gPSAnJztcbiAgICB9XG4gIH1cbiAgZm9yIChr
ZXkgaW4gcHJvcHMpIHtcbiAgICBjdXIgPSBwcm9wc1trZXldO1xuICAgIC8vIGlnbm9yZSBjaGls
ZHJlbiBpZiB0aGUgbm9kZSBoYXMgdGV4dENvbnRlbnQgb3IgaW5uZXJIVE1MLFxuICAgIC8vIGFz
IHRoZXNlIHdpbGwgdGhyb3cgYXdheSBleGlzdGluZyBET00gbm9kZXMgYW5kIGNhdXNlIHJlbW92
YWwgZXJyb3JzXG4gICAgLy8gb24gc3Vic2VxdWVudCBwYXRjaGVzICgjMzM2MClcbiAgICBpZiAo
a2V5ID09PSAndGV4dENvbnRlbnQnIHx8IGtleSA9PT0gJ2lubmVySFRNTCcpIHtcbiAgICAgIGlm
ICh2bm9kZS5jaGlsZHJlbikgeyB2bm9kZS5jaGlsZHJlbi5sZW5ndGggPSAwOyB9XG4gICAgICBp
ZiAoY3VyID09PSBvbGRQcm9wc1trZXldKSB7IGNvbnRpbnVlIH1cbiAgICB9XG5cbiAgICBpZiAo
a2V5ID09PSAndmFsdWUnKSB7XG4gICAgICAvLyBzdG9yZSB2YWx1ZSBhcyBfdmFsdWUgYXMgd2Vs
bCBzaW5jZVxuICAgICAgLy8gbm9uLXN0cmluZyB2YWx1ZXMgd2lsbCBiZSBzdHJpbmdpZmllZFxu
ICAgICAgZWxtLl92YWx1ZSA9IGN1cjtcbiAgICAgIC8vIGF2b2lkIHJlc2V0dGluZyBjdXJzb3Ig
cG9zaXRpb24gd2hlbiB2YWx1ZSBpcyB0aGUgc2FtZVxuICAgICAgdmFyIHN0ckN1ciA9IGlzVW5k
ZWYoY3VyKSA/ICcnIDogU3RyaW5nKGN1cik7XG4gICAgICBpZiAoc2hvdWxkVXBkYXRlVmFsdWUo
ZWxtLCB2bm9kZSwgc3RyQ3VyKSkge1xuICAgICAgICBlbG0udmFsdWUgPSBzdHJDdXI7XG4gICAg
ICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsbVtrZXldID0gY3VyO1xuICAgIH1cbiAgfVxufVxu
XG4vLyBjaGVjayBwbGF0Zm9ybXMvd2ViL3V0aWwvYXR0cnMuanMgYWNjZXB0VmFsdWVcblxuXG5m
dW5jdGlvbiBzaG91bGRVcGRhdGVWYWx1ZSAoXG4gIGVsbSxcbiAgdm5vZGUsXG4gIGNoZWNrVmFs
XG4pIHtcbiAgcmV0dXJuICghZWxtLmNvbXBvc2luZyAmJiAoXG4gICAgdm5vZGUudGFnID09PSAn
b3B0aW9uJyB8fFxuICAgIGlzRGlydHkoZWxtLCBjaGVja1ZhbCkgfHxcbiAgICBpc0lucHV0Q2hh
bmdlZChlbG0sIGNoZWNrVmFsKVxuICApKVxufVxuXG5mdW5jdGlvbiBpc0RpcnR5IChlbG0sIGNo
ZWNrVmFsKSB7XG4gIC8vIHJldHVybiB0cnVlIHdoZW4gdGV4dGJveCAoLm51bWJlciBhbmQgLnRy
aW0pIGxvc2VzIGZvY3VzIGFuZCBpdHMgdmFsdWUgaXNcbiAgLy8gbm90IGVxdWFsIHRvIHRoZSB1
cGRhdGVkIHZhbHVlXG4gIHZhciBub3RJbkZvY3VzID0gdHJ1ZTtcbiAgLy8gIzYxNTdcbiAgLy8g
d29yayBhcm91bmQgSUUgYnVnIHdoZW4gYWNjZXNzaW5nIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQg
aW4gYW4gaWZyYW1lXG4gIHRyeSB7IG5vdEluRm9jdXMgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50
ICE9PSBlbG07IH0gY2F0Y2ggKGUpIHt9XG4gIHJldHVybiBub3RJbkZvY3VzICYmIGVsbS52YWx1
ZSAhPT0gY2hlY2tWYWxcbn1cblxuZnVuY3Rpb24gaXNJbnB1dENoYW5nZWQgKGVsbSwgbmV3VmFs
KSB7XG4gIHZhciB2YWx1ZSA9IGVsbS52YWx1ZTtcbiAgdmFyIG1vZGlmaWVycyA9IGVsbS5fdk1v
ZGlmaWVyczsgLy8gaW5qZWN0ZWQgYnkgdi1tb2RlbCBydW50aW1lXG4gIGlmIChpc0RlZihtb2Rp
ZmllcnMpICYmIG1vZGlmaWVycy5udW1iZXIpIHtcbiAgICByZXR1cm4gdG9OdW1iZXIodmFsdWUp
ICE9PSB0b051bWJlcihuZXdWYWwpXG4gIH1cbiAgaWYgKGlzRGVmKG1vZGlmaWVycykgJiYgbW9k
aWZpZXJzLnRyaW0pIHtcbiAgICByZXR1cm4gdmFsdWUudHJpbSgpICE9PSBuZXdWYWwudHJpbSgp
XG4gIH1cbiAgcmV0dXJuIHZhbHVlICE9PSBuZXdWYWxcbn1cblxudmFyIGRvbVByb3BzID0ge1xu
ICBjcmVhdGU6IHVwZGF0ZURPTVByb3BzLFxuICB1cGRhdGU6IHVwZGF0ZURPTVByb3BzXG59O1xu
XG4vKiAgKi9cblxudmFyIHBhcnNlU3R5bGVUZXh0ID0gY2FjaGVkKGZ1bmN0aW9uIChjc3NUZXh0
KSB7XG4gIHZhciByZXMgPSB7fTtcbiAgdmFyIGxpc3REZWxpbWl0ZXIgPSAvOyg/IVteKF0qXFwp
KS9nO1xuICB2YXIgcHJvcGVydHlEZWxpbWl0ZXIgPSAvOiguKykvO1xuICBjc3NUZXh0LnNwbGl0
KGxpc3REZWxpbWl0ZXIpLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICBpZiAoaXRlbSkg
e1xuICAgICAgdmFyIHRtcCA9IGl0ZW0uc3BsaXQocHJvcGVydHlEZWxpbWl0ZXIpO1xuICAgICAg
dG1wLmxlbmd0aCA+IDEgJiYgKHJlc1t0bXBbMF0udHJpbSgpXSA9IHRtcFsxXS50cmltKCkpO1xu
ICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXNcbn0pO1xuXG4vLyBtZXJnZSBzdGF0aWMgYW5kIGR5
bmFtaWMgc3R5bGUgZGF0YSBvbiB0aGUgc2FtZSB2bm9kZVxuZnVuY3Rpb24gbm9ybWFsaXplU3R5
bGVEYXRhIChkYXRhKSB7XG4gIHZhciBzdHlsZSA9IG5vcm1hbGl6ZVN0eWxlQmluZGluZyhkYXRh
LnN0eWxlKTtcbiAgLy8gc3RhdGljIHN0eWxlIGlzIHByZS1wcm9jZXNzZWQgaW50byBhbiBvYmpl
Y3QgZHVyaW5nIGNvbXBpbGF0aW9uXG4gIC8vIGFuZCBpcyBhbHdheXMgYSBmcmVzaCBvYmplY3Qs
IHNvIGl0J3Mgc2FmZSB0byBtZXJnZSBpbnRvIGl0XG4gIHJldHVybiBkYXRhLnN0YXRpY1N0eWxl
XG4gICAgPyBleHRlbmQoZGF0YS5zdGF0aWNTdHlsZSwgc3R5bGUpXG4gICAgOiBzdHlsZVxufVxu
XG4vLyBub3JtYWxpemUgcG9zc2libGUgYXJyYXkgLyBzdHJpbmcgdmFsdWVzIGludG8gT2JqZWN0
XG5mdW5jdGlvbiBub3JtYWxpemVTdHlsZUJpbmRpbmcgKGJpbmRpbmdTdHlsZSkge1xuICBpZiAo
QXJyYXkuaXNBcnJheShiaW5kaW5nU3R5bGUpKSB7XG4gICAgcmV0dXJuIHRvT2JqZWN0KGJpbmRp
bmdTdHlsZSlcbiAgfVxuICBpZiAodHlwZW9mIGJpbmRpbmdTdHlsZSA9PT0gJ3N0cmluZycpIHtc
biAgICByZXR1cm4gcGFyc2VTdHlsZVRleHQoYmluZGluZ1N0eWxlKVxuICB9XG4gIHJldHVybiBi
aW5kaW5nU3R5bGVcbn1cblxuLyoqXG4gKiBwYXJlbnQgY29tcG9uZW50IHN0eWxlIHNob3VsZCBi
ZSBhZnRlciBjaGlsZCdzXG4gKiBzbyB0aGF0IHBhcmVudCBjb21wb25lbnQncyBzdHlsZSBjb3Vs
ZCBvdmVycmlkZSBpdFxuICovXG5mdW5jdGlvbiBnZXRTdHlsZSAodm5vZGUsIGNoZWNrQ2hpbGQp
IHtcbiAgdmFyIHJlcyA9IHt9O1xuICB2YXIgc3R5bGVEYXRhO1xuXG4gIGlmIChjaGVja0NoaWxk
KSB7XG4gICAgdmFyIGNoaWxkTm9kZSA9IHZub2RlO1xuICAgIHdoaWxlIChjaGlsZE5vZGUuY29t
cG9uZW50SW5zdGFuY2UpIHtcbiAgICAgIGNoaWxkTm9kZSA9IGNoaWxkTm9kZS5jb21wb25lbnRJ
bnN0YW5jZS5fdm5vZGU7XG4gICAgICBpZiAoY2hpbGROb2RlLmRhdGEgJiYgKHN0eWxlRGF0YSA9
IG5vcm1hbGl6ZVN0eWxlRGF0YShjaGlsZE5vZGUuZGF0YSkpKSB7XG4gICAgICAgIGV4dGVuZChy
ZXMsIHN0eWxlRGF0YSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKChzdHlsZURhdGEg
PSBub3JtYWxpemVTdHlsZURhdGEodm5vZGUuZGF0YSkpKSB7XG4gICAgZXh0ZW5kKHJlcywgc3R5
bGVEYXRhKTtcbiAgfVxuXG4gIHZhciBwYXJlbnROb2RlID0gdm5vZGU7XG4gIHdoaWxlICgocGFy
ZW50Tm9kZSA9IHBhcmVudE5vZGUucGFyZW50KSkge1xuICAgIGlmIChwYXJlbnROb2RlLmRhdGEg
JiYgKHN0eWxlRGF0YSA9IG5vcm1hbGl6ZVN0eWxlRGF0YShwYXJlbnROb2RlLmRhdGEpKSkge1xu
ICAgICAgZXh0ZW5kKHJlcywgc3R5bGVEYXRhKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xu
fVxuXG4vKiAgKi9cblxudmFyIGNzc1ZhclJFID0gL14tLS87XG52YXIgaW1wb3J0YW50UkUgPSAv
XFxzKiFpbXBvcnRhbnQkLztcbnZhciBzZXRQcm9wID0gZnVuY3Rpb24gKGVsLCBuYW1lLCB2YWwp
IHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChjc3NWYXJSRS50ZXN0KG5hbWUp
KSB7XG4gICAgZWwuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgdmFsKTtcbiAgfSBlbHNlIGlmIChp
bXBvcnRhbnRSRS50ZXN0KHZhbCkpIHtcbiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eShuYW1lLCB2
YWwucmVwbGFjZShpbXBvcnRhbnRSRSwgJycpLCAnaW1wb3J0YW50Jyk7XG4gIH0gZWxzZSB7XG4g
ICAgdmFyIG5vcm1hbGl6ZWROYW1lID0gbm9ybWFsaXplKG5hbWUpO1xuICAgIGlmIChBcnJheS5p
c0FycmF5KHZhbCkpIHtcbiAgICAgIC8vIFN1cHBvcnQgdmFsdWVzIGFycmF5IGNyZWF0ZWQgYnkg
YXV0b3ByZWZpeGVyLCBlLmcuXG4gICAgICAvLyB7ZGlzcGxheTogW1wiLXdlYmtpdC1ib3hcIiwg
XCItbXMtZmxleGJveFwiLCBcImZsZXhcIl19XG4gICAgICAvLyBTZXQgdGhlbSBvbmUgYnkgb25l
LCBhbmQgdGhlIGJyb3dzZXIgd2lsbCBvbmx5IHNldCB0aG9zZSBpdCBjYW4gcmVjb2duaXplXG4g
ICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdmFsLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4g
ICAgICAgIGVsLnN0eWxlW25vcm1hbGl6ZWROYW1lXSA9IHZhbFtpXTtcbiAgICAgIH1cbiAgICB9
IGVsc2Uge1xuICAgICAgZWwuc3R5bGVbbm9ybWFsaXplZE5hbWVdID0gdmFsO1xuICAgIH1cbiAg
fVxufTtcblxudmFyIHZlbmRvck5hbWVzID0gWydXZWJraXQnLCAnTW96JywgJ21zJ107XG5cbnZh
ciBlbXB0eVN0eWxlO1xudmFyIG5vcm1hbGl6ZSA9IGNhY2hlZChmdW5jdGlvbiAocHJvcCkge1xu
ICBlbXB0eVN0eWxlID0gZW1wdHlTdHlsZSB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYn
KS5zdHlsZTtcbiAgcHJvcCA9IGNhbWVsaXplKHByb3ApO1xuICBpZiAocHJvcCAhPT0gJ2ZpbHRl
cicgJiYgKHByb3AgaW4gZW1wdHlTdHlsZSkpIHtcbiAgICByZXR1cm4gcHJvcFxuICB9XG4gIHZh
ciBjYXBOYW1lID0gcHJvcC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHByb3Auc2xpY2UoMSk7
XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdmVuZG9yTmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2
YXIgbmFtZSA9IHZlbmRvck5hbWVzW2ldICsgY2FwTmFtZTtcbiAgICBpZiAobmFtZSBpbiBlbXB0
eVN0eWxlKSB7XG4gICAgICByZXR1cm4gbmFtZVxuICAgIH1cbiAgfVxufSk7XG5cbmZ1bmN0aW9u
IHVwZGF0ZVN0eWxlIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgdmFyIGRhdGEgPSB2bm9kZS5kYXRh
O1xuICB2YXIgb2xkRGF0YSA9IG9sZFZub2RlLmRhdGE7XG5cbiAgaWYgKGlzVW5kZWYoZGF0YS5z
dGF0aWNTdHlsZSkgJiYgaXNVbmRlZihkYXRhLnN0eWxlKSAmJlxuICAgIGlzVW5kZWYob2xkRGF0
YS5zdGF0aWNTdHlsZSkgJiYgaXNVbmRlZihvbGREYXRhLnN0eWxlKVxuICApIHtcbiAgICByZXR1
cm5cbiAgfVxuXG4gIHZhciBjdXIsIG5hbWU7XG4gIHZhciBlbCA9IHZub2RlLmVsbTtcbiAgdmFy
IG9sZFN0YXRpY1N0eWxlID0gb2xkRGF0YS5zdGF0aWNTdHlsZTtcbiAgdmFyIG9sZFN0eWxlQmlu
ZGluZyA9IG9sZERhdGEubm9ybWFsaXplZFN0eWxlIHx8IG9sZERhdGEuc3R5bGUgfHwge307XG5c
biAgLy8gaWYgc3RhdGljIHN0eWxlIGV4aXN0cywgc3R5bGViaW5kaW5nIGFscmVhZHkgbWVyZ2Vk
IGludG8gaXQgd2hlbiBkb2luZyBub3JtYWxpemVTdHlsZURhdGFcbiAgdmFyIG9sZFN0eWxlID0g
b2xkU3RhdGljU3R5bGUgfHwgb2xkU3R5bGVCaW5kaW5nO1xuXG4gIHZhciBzdHlsZSA9IG5vcm1h
bGl6ZVN0eWxlQmluZGluZyh2bm9kZS5kYXRhLnN0eWxlKSB8fCB7fTtcblxuICAvLyBzdG9yZSBu
b3JtYWxpemVkIHN0eWxlIHVuZGVyIGEgZGlmZmVyZW50IGtleSBmb3IgbmV4dCBkaWZmXG4gIC8v
IG1ha2Ugc3VyZSB0byBjbG9uZSBpdCBpZiBpdCdzIHJlYWN0aXZlLCBzaW5jZSB0aGUgdXNlciBs
aWtsZXkgd2FudHNcbiAgLy8gdG8gbXV0YXRlIGl0LlxuICB2bm9kZS5kYXRhLm5vcm1hbGl6ZWRT
dHlsZSA9IGlzRGVmKHN0eWxlLl9fb2JfXylcbiAgICA/IGV4dGVuZCh7fSwgc3R5bGUpXG4gICAg
OiBzdHlsZTtcblxuICB2YXIgbmV3U3R5bGUgPSBnZXRTdHlsZSh2bm9kZSwgdHJ1ZSk7XG5cbiAg
Zm9yIChuYW1lIGluIG9sZFN0eWxlKSB7XG4gICAgaWYgKGlzVW5kZWYobmV3U3R5bGVbbmFtZV0p
KSB7XG4gICAgICBzZXRQcm9wKGVsLCBuYW1lLCAnJyk7XG4gICAgfVxuICB9XG4gIGZvciAobmFt
ZSBpbiBuZXdTdHlsZSkge1xuICAgIGN1ciA9IG5ld1N0eWxlW25hbWVdO1xuICAgIGlmIChjdXIg
IT09IG9sZFN0eWxlW25hbWVdKSB7XG4gICAgICAvLyBpZTkgc2V0dGluZyB0byBudWxsIGhhcyBu
byBlZmZlY3QsIG11c3QgdXNlIGVtcHR5IHN0cmluZ1xuICAgICAgc2V0UHJvcChlbCwgbmFtZSwg
Y3VyID09IG51bGwgPyAnJyA6IGN1cik7XG4gICAgfVxuICB9XG59XG5cbnZhciBzdHlsZSA9IHtc
biAgY3JlYXRlOiB1cGRhdGVTdHlsZSxcbiAgdXBkYXRlOiB1cGRhdGVTdHlsZVxufTtcblxuLyog
ICovXG5cbi8qKlxuICogQWRkIGNsYXNzIHdpdGggY29tcGF0aWJpbGl0eSBmb3IgU1ZHIHNpbmNl
IGNsYXNzTGlzdCBpcyBub3Qgc3VwcG9ydGVkIG9uXG4gKiBTVkcgZWxlbWVudHMgaW4gSUVcbiAq
L1xuZnVuY3Rpb24gYWRkQ2xhc3MgKGVsLCBjbHMpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlm
ICovXG4gIGlmICghY2xzIHx8ICEoY2xzID0gY2xzLnRyaW0oKSkpIHtcbiAgICByZXR1cm5cbiAg
fVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChlbC5jbGFzc0xpc3QpIHtc
biAgICBpZiAoY2xzLmluZGV4T2YoJyAnKSA+IC0xKSB7XG4gICAgICBjbHMuc3BsaXQoL1xccysv
KS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7IHJldHVybiBlbC5jbGFzc0xpc3QuYWRkKGMpOyB9KTtc
biAgICB9IGVsc2Uge1xuICAgICAgZWwuY2xhc3NMaXN0LmFkZChjbHMpO1xuICAgIH1cbiAgfSBl
bHNlIHtcbiAgICB2YXIgY3VyID0gXCIgXCIgKyAoZWwuZ2V0QXR0cmlidXRlKCdjbGFzcycpIHx8
ICcnKSArIFwiIFwiO1xuICAgIGlmIChjdXIuaW5kZXhPZignICcgKyBjbHMgKyAnICcpIDwgMCkg
e1xuICAgICAgZWwuc2V0QXR0cmlidXRlKCdjbGFzcycsIChjdXIgKyBjbHMpLnRyaW0oKSk7XG4g
ICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVtb3ZlIGNsYXNzIHdpdGggY29tcGF0aWJpbGl0eSBm
b3IgU1ZHIHNpbmNlIGNsYXNzTGlzdCBpcyBub3Qgc3VwcG9ydGVkIG9uXG4gKiBTVkcgZWxlbWVu
dHMgaW4gSUVcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQ2xhc3MgKGVsLCBjbHMpIHtcbiAgLyogaXN0
YW5idWwgaWdub3JlIGlmICovXG4gIGlmICghY2xzIHx8ICEoY2xzID0gY2xzLnRyaW0oKSkpIHtc
biAgICByZXR1cm5cbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChl
bC5jbGFzc0xpc3QpIHtcbiAgICBpZiAoY2xzLmluZGV4T2YoJyAnKSA+IC0xKSB7XG4gICAgICBj
bHMuc3BsaXQoL1xccysvKS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7IHJldHVybiBlbC5jbGFzc0xp
c3QucmVtb3ZlKGMpOyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwuY2xhc3NMaXN0LnJlbW92
ZShjbHMpO1xuICAgIH1cbiAgICBpZiAoIWVsLmNsYXNzTGlzdC5sZW5ndGgpIHtcbiAgICAgIGVs
LnJlbW92ZUF0dHJpYnV0ZSgnY2xhc3MnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGN1
ciA9IFwiIFwiICsgKGVsLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSB8fCAnJykgKyBcIiBcIjtcbiAg
ICB2YXIgdGFyID0gJyAnICsgY2xzICsgJyAnO1xuICAgIHdoaWxlIChjdXIuaW5kZXhPZih0YXIp
ID49IDApIHtcbiAgICAgIGN1ciA9IGN1ci5yZXBsYWNlKHRhciwgJyAnKTtcbiAgICB9XG4gICAg
Y3VyID0gY3VyLnRyaW0oKTtcbiAgICBpZiAoY3VyKSB7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUo
J2NsYXNzJywgY3VyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKCdj
bGFzcycpO1xuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gcmVzb2x2ZVRyYW5z
aXRpb24gKGRlZiQkMSkge1xuICBpZiAoIWRlZiQkMSkge1xuICAgIHJldHVyblxuICB9XG4gIC8q
IGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmICh0eXBlb2YgZGVmJCQxID09PSAnb2JqZWN0
Jykge1xuICAgIHZhciByZXMgPSB7fTtcbiAgICBpZiAoZGVmJCQxLmNzcyAhPT0gZmFsc2UpIHtc
biAgICAgIGV4dGVuZChyZXMsIGF1dG9Dc3NUcmFuc2l0aW9uKGRlZiQkMS5uYW1lIHx8ICd2Jykp
O1xuICAgIH1cbiAgICBleHRlbmQocmVzLCBkZWYkJDEpO1xuICAgIHJldHVybiByZXNcbiAgfSBl
bHNlIGlmICh0eXBlb2YgZGVmJCQxID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBhdXRvQ3Nz
VHJhbnNpdGlvbihkZWYkJDEpXG4gIH1cbn1cblxudmFyIGF1dG9Dc3NUcmFuc2l0aW9uID0gY2Fj
aGVkKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiB7XG4gICAgZW50ZXJDbGFzczogKG5hbWUg
KyBcIi1lbnRlclwiKSxcbiAgICBlbnRlclRvQ2xhc3M6IChuYW1lICsgXCItZW50ZXItdG9cIiks
XG4gICAgZW50ZXJBY3RpdmVDbGFzczogKG5hbWUgKyBcIi1lbnRlci1hY3RpdmVcIiksXG4gICAg
bGVhdmVDbGFzczogKG5hbWUgKyBcIi1sZWF2ZVwiKSxcbiAgICBsZWF2ZVRvQ2xhc3M6IChuYW1l
ICsgXCItbGVhdmUtdG9cIiksXG4gICAgbGVhdmVBY3RpdmVDbGFzczogKG5hbWUgKyBcIi1sZWF2
ZS1hY3RpdmVcIilcbiAgfVxufSk7XG5cbnZhciBoYXNUcmFuc2l0aW9uID0gaW5Ccm93c2VyICYm
ICFpc0lFOTtcbnZhciBUUkFOU0lUSU9OID0gJ3RyYW5zaXRpb24nO1xudmFyIEFOSU1BVElPTiA9
ICdhbmltYXRpb24nO1xuXG4vLyBUcmFuc2l0aW9uIHByb3BlcnR5L2V2ZW50IHNuaWZmaW5nXG52
YXIgdHJhbnNpdGlvblByb3AgPSAndHJhbnNpdGlvbic7XG52YXIgdHJhbnNpdGlvbkVuZEV2ZW50
ID0gJ3RyYW5zaXRpb25lbmQnO1xudmFyIGFuaW1hdGlvblByb3AgPSAnYW5pbWF0aW9uJztcbnZh
ciBhbmltYXRpb25FbmRFdmVudCA9ICdhbmltYXRpb25lbmQnO1xuaWYgKGhhc1RyYW5zaXRpb24p
IHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICh3aW5kb3cub250cmFuc2l0aW9u
ZW5kID09PSB1bmRlZmluZWQgJiZcbiAgICB3aW5kb3cub253ZWJraXR0cmFuc2l0aW9uZW5kICE9
PSB1bmRlZmluZWRcbiAgKSB7XG4gICAgdHJhbnNpdGlvblByb3AgPSAnV2Via2l0VHJhbnNpdGlv
bic7XG4gICAgdHJhbnNpdGlvbkVuZEV2ZW50ID0gJ3dlYmtpdFRyYW5zaXRpb25FbmQnO1xuICB9
XG4gIGlmICh3aW5kb3cub25hbmltYXRpb25lbmQgPT09IHVuZGVmaW5lZCAmJlxuICAgIHdpbmRv
dy5vbndlYmtpdGFuaW1hdGlvbmVuZCAhPT0gdW5kZWZpbmVkXG4gICkge1xuICAgIGFuaW1hdGlv
blByb3AgPSAnV2Via2l0QW5pbWF0aW9uJztcbiAgICBhbmltYXRpb25FbmRFdmVudCA9ICd3ZWJr
aXRBbmltYXRpb25FbmQnO1xuICB9XG59XG5cbi8vIGJpbmRpbmcgdG8gd2luZG93IGlzIG5lY2Vz
c2FyeSB0byBtYWtlIGhvdCByZWxvYWQgd29yayBpbiBJRSBpbiBzdHJpY3QgbW9kZVxudmFyIHJh
ZiA9IGluQnJvd3NlciAmJiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lXG4gID8gd2luZG93
LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdylcbiAgOiBzZXRUaW1lb3V0O1xuXG5m
dW5jdGlvbiBuZXh0RnJhbWUgKGZuKSB7XG4gIHJhZihmdW5jdGlvbiAoKSB7XG4gICAgcmFmKGZu
KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZFRyYW5zaXRpb25DbGFzcyAoZWwsIGNscykge1xu
ICB2YXIgdHJhbnNpdGlvbkNsYXNzZXMgPSBlbC5fdHJhbnNpdGlvbkNsYXNzZXMgfHwgKGVsLl90
cmFuc2l0aW9uQ2xhc3NlcyA9IFtdKTtcbiAgaWYgKHRyYW5zaXRpb25DbGFzc2VzLmluZGV4T2Yo
Y2xzKSA8IDApIHtcbiAgICB0cmFuc2l0aW9uQ2xhc3Nlcy5wdXNoKGNscyk7XG4gICAgYWRkQ2xh
c3MoZWwsIGNscyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlVHJhbnNpdGlvbkNsYXNzIChl
bCwgY2xzKSB7XG4gIGlmIChlbC5fdHJhbnNpdGlvbkNsYXNzZXMpIHtcbiAgICByZW1vdmUoZWwu
X3RyYW5zaXRpb25DbGFzc2VzLCBjbHMpO1xuICB9XG4gIHJlbW92ZUNsYXNzKGVsLCBjbHMpO1xu
fVxuXG5mdW5jdGlvbiB3aGVuVHJhbnNpdGlvbkVuZHMgKFxuICBlbCxcbiAgZXhwZWN0ZWRUeXBl
LFxuICBjYlxuKSB7XG4gIHZhciByZWYgPSBnZXRUcmFuc2l0aW9uSW5mbyhlbCwgZXhwZWN0ZWRU
eXBlKTtcbiAgdmFyIHR5cGUgPSByZWYudHlwZTtcbiAgdmFyIHRpbWVvdXQgPSByZWYudGltZW91
dDtcbiAgdmFyIHByb3BDb3VudCA9IHJlZi5wcm9wQ291bnQ7XG4gIGlmICghdHlwZSkgeyByZXR1
cm4gY2IoKSB9XG4gIHZhciBldmVudCA9IHR5cGUgPT09IFRSQU5TSVRJT04gPyB0cmFuc2l0aW9u
RW5kRXZlbnQgOiBhbmltYXRpb25FbmRFdmVudDtcbiAgdmFyIGVuZGVkID0gMDtcbiAgdmFyIGVu
ZCA9IGZ1bmN0aW9uICgpIHtcbiAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBvbkVu
ZCk7XG4gICAgY2IoKTtcbiAgfTtcbiAgdmFyIG9uRW5kID0gZnVuY3Rpb24gKGUpIHtcbiAgICBp
ZiAoZS50YXJnZXQgPT09IGVsKSB7XG4gICAgICBpZiAoKytlbmRlZCA+PSBwcm9wQ291bnQpIHtc
biAgICAgICAgZW5kKCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBzZXRUaW1lb3V0KGZ1bmN0
aW9uICgpIHtcbiAgICBpZiAoZW5kZWQgPCBwcm9wQ291bnQpIHtcbiAgICAgIGVuZCgpO1xuICAg
IH1cbiAgfSwgdGltZW91dCArIDEpO1xuICBlbC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBvbkVu
ZCk7XG59XG5cbnZhciB0cmFuc2Zvcm1SRSA9IC9cXGIodHJhbnNmb3JtfGFsbCkoLHwkKS87XG5c
bmZ1bmN0aW9uIGdldFRyYW5zaXRpb25JbmZvIChlbCwgZXhwZWN0ZWRUeXBlKSB7XG4gIHZhciBz
dHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCk7XG4gIHZhciB0cmFuc2l0aW9uRGVs
YXlzID0gc3R5bGVzW3RyYW5zaXRpb25Qcm9wICsgJ0RlbGF5J10uc3BsaXQoJywgJyk7XG4gIHZh
ciB0cmFuc2l0aW9uRHVyYXRpb25zID0gc3R5bGVzW3RyYW5zaXRpb25Qcm9wICsgJ0R1cmF0aW9u
J10uc3BsaXQoJywgJyk7XG4gIHZhciB0cmFuc2l0aW9uVGltZW91dCA9IGdldFRpbWVvdXQodHJh
bnNpdGlvbkRlbGF5cywgdHJhbnNpdGlvbkR1cmF0aW9ucyk7XG4gIHZhciBhbmltYXRpb25EZWxh
eXMgPSBzdHlsZXNbYW5pbWF0aW9uUHJvcCArICdEZWxheSddLnNwbGl0KCcsICcpO1xuICB2YXIg
YW5pbWF0aW9uRHVyYXRpb25zID0gc3R5bGVzW2FuaW1hdGlvblByb3AgKyAnRHVyYXRpb24nXS5z
cGxpdCgnLCAnKTtcbiAgdmFyIGFuaW1hdGlvblRpbWVvdXQgPSBnZXRUaW1lb3V0KGFuaW1hdGlv
bkRlbGF5cywgYW5pbWF0aW9uRHVyYXRpb25zKTtcblxuICB2YXIgdHlwZTtcbiAgdmFyIHRpbWVv
dXQgPSAwO1xuICB2YXIgcHJvcENvdW50ID0gMDtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICov
XG4gIGlmIChleHBlY3RlZFR5cGUgPT09IFRSQU5TSVRJT04pIHtcbiAgICBpZiAodHJhbnNpdGlv
blRpbWVvdXQgPiAwKSB7XG4gICAgICB0eXBlID0gVFJBTlNJVElPTjtcbiAgICAgIHRpbWVvdXQg
PSB0cmFuc2l0aW9uVGltZW91dDtcbiAgICAgIHByb3BDb3VudCA9IHRyYW5zaXRpb25EdXJhdGlv
bnMubGVuZ3RoO1xuICAgIH1cbiAgfSBlbHNlIGlmIChleHBlY3RlZFR5cGUgPT09IEFOSU1BVElP
Tikge1xuICAgIGlmIChhbmltYXRpb25UaW1lb3V0ID4gMCkge1xuICAgICAgdHlwZSA9IEFOSU1B
VElPTjtcbiAgICAgIHRpbWVvdXQgPSBhbmltYXRpb25UaW1lb3V0O1xuICAgICAgcHJvcENvdW50
ID0gYW5pbWF0aW9uRHVyYXRpb25zLmxlbmd0aDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGlt
ZW91dCA9IE1hdGgubWF4KHRyYW5zaXRpb25UaW1lb3V0LCBhbmltYXRpb25UaW1lb3V0KTtcbiAg
ICB0eXBlID0gdGltZW91dCA+IDBcbiAgICAgID8gdHJhbnNpdGlvblRpbWVvdXQgPiBhbmltYXRp
b25UaW1lb3V0XG4gICAgICAgID8gVFJBTlNJVElPTlxuICAgICAgICA6IEFOSU1BVElPTlxuICAg
ICAgOiBudWxsO1xuICAgIHByb3BDb3VudCA9IHR5cGVcbiAgICAgID8gdHlwZSA9PT0gVFJBTlNJ
VElPTlxuICAgICAgICA/IHRyYW5zaXRpb25EdXJhdGlvbnMubGVuZ3RoXG4gICAgICAgIDogYW5p
bWF0aW9uRHVyYXRpb25zLmxlbmd0aFxuICAgICAgOiAwO1xuICB9XG4gIHZhciBoYXNUcmFuc2Zv
cm0gPVxuICAgIHR5cGUgPT09IFRSQU5TSVRJT04gJiZcbiAgICB0cmFuc2Zvcm1SRS50ZXN0KHN0
eWxlc1t0cmFuc2l0aW9uUHJvcCArICdQcm9wZXJ0eSddKTtcbiAgcmV0dXJuIHtcbiAgICB0eXBl
OiB0eXBlLFxuICAgIHRpbWVvdXQ6IHRpbWVvdXQsXG4gICAgcHJvcENvdW50OiBwcm9wQ291bnQs
XG4gICAgaGFzVHJhbnNmb3JtOiBoYXNUcmFuc2Zvcm1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRU
aW1lb3V0IChkZWxheXMsIGR1cmF0aW9ucykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAq
L1xuICB3aGlsZSAoZGVsYXlzLmxlbmd0aCA8IGR1cmF0aW9ucy5sZW5ndGgpIHtcbiAgICBkZWxh
eXMgPSBkZWxheXMuY29uY2F0KGRlbGF5cyk7XG4gIH1cblxuICByZXR1cm4gTWF0aC5tYXguYXBw
bHkobnVsbCwgZHVyYXRpb25zLm1hcChmdW5jdGlvbiAoZCwgaSkge1xuICAgIHJldHVybiB0b01z
KGQpICsgdG9NcyhkZWxheXNbaV0pXG4gIH0pKVxufVxuXG5mdW5jdGlvbiB0b01zIChzKSB7XG4g
IHJldHVybiBOdW1iZXIocy5zbGljZSgwLCAtMSkpICogMTAwMFxufVxuXG4vKiAgKi9cblxuZnVu
Y3Rpb24gZW50ZXIgKHZub2RlLCB0b2dnbGVEaXNwbGF5KSB7XG4gIHZhciBlbCA9IHZub2RlLmVs
bTtcblxuICAvLyBjYWxsIGxlYXZlIGNhbGxiYWNrIG5vd1xuICBpZiAoaXNEZWYoZWwuX2xlYXZl
Q2IpKSB7XG4gICAgZWwuX2xlYXZlQ2IuY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICBlbC5fbGVhdmVD
YigpO1xuICB9XG5cbiAgdmFyIGRhdGEgPSByZXNvbHZlVHJhbnNpdGlvbih2bm9kZS5kYXRhLnRy
YW5zaXRpb24pO1xuICBpZiAoaXNVbmRlZihkYXRhKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAg
LyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChpc0RlZihlbC5fZW50ZXJDYikgfHwgZWwu
bm9kZVR5cGUgIT09IDEpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHZhciBjc3MgPSBkYXRhLmNz
cztcbiAgdmFyIHR5cGUgPSBkYXRhLnR5cGU7XG4gIHZhciBlbnRlckNsYXNzID0gZGF0YS5lbnRl
ckNsYXNzO1xuICB2YXIgZW50ZXJUb0NsYXNzID0gZGF0YS5lbnRlclRvQ2xhc3M7XG4gIHZhciBl
bnRlckFjdGl2ZUNsYXNzID0gZGF0YS5lbnRlckFjdGl2ZUNsYXNzO1xuICB2YXIgYXBwZWFyQ2xh
c3MgPSBkYXRhLmFwcGVhckNsYXNzO1xuICB2YXIgYXBwZWFyVG9DbGFzcyA9IGRhdGEuYXBwZWFy
VG9DbGFzcztcbiAgdmFyIGFwcGVhckFjdGl2ZUNsYXNzID0gZGF0YS5hcHBlYXJBY3RpdmVDbGFz
cztcbiAgdmFyIGJlZm9yZUVudGVyID0gZGF0YS5iZWZvcmVFbnRlcjtcbiAgdmFyIGVudGVyID0g
ZGF0YS5lbnRlcjtcbiAgdmFyIGFmdGVyRW50ZXIgPSBkYXRhLmFmdGVyRW50ZXI7XG4gIHZhciBl
bnRlckNhbmNlbGxlZCA9IGRhdGEuZW50ZXJDYW5jZWxsZWQ7XG4gIHZhciBiZWZvcmVBcHBlYXIg
PSBkYXRhLmJlZm9yZUFwcGVhcjtcbiAgdmFyIGFwcGVhciA9IGRhdGEuYXBwZWFyO1xuICB2YXIg
YWZ0ZXJBcHBlYXIgPSBkYXRhLmFmdGVyQXBwZWFyO1xuICB2YXIgYXBwZWFyQ2FuY2VsbGVkID0g
ZGF0YS5hcHBlYXJDYW5jZWxsZWQ7XG4gIHZhciBkdXJhdGlvbiA9IGRhdGEuZHVyYXRpb247XG5c
biAgLy8gYWN0aXZlSW5zdGFuY2Ugd2lsbCBhbHdheXMgYmUgdGhlIDx0cmFuc2l0aW9uPiBjb21w
b25lbnQgbWFuYWdpbmcgdGhpc1xuICAvLyB0cmFuc2l0aW9uLiBPbmUgZWRnZSBjYXNlIHRvIGNo
ZWNrIGlzIHdoZW4gdGhlIDx0cmFuc2l0aW9uPiBpcyBwbGFjZWRcbiAgLy8gYXMgdGhlIHJvb3Qg
bm9kZSBvZiBhIGNoaWxkIGNvbXBvbmVudC4gSW4gdGhhdCBjYXNlIHdlIG5lZWQgdG8gY2hlY2tc
biAgLy8gPHRyYW5zaXRpb24+J3MgcGFyZW50IGZvciBhcHBlYXIgY2hlY2suXG4gIHZhciBjb250
ZXh0ID0gYWN0aXZlSW5zdGFuY2U7XG4gIHZhciB0cmFuc2l0aW9uTm9kZSA9IGFjdGl2ZUluc3Rh
bmNlLiR2bm9kZTtcbiAgd2hpbGUgKHRyYW5zaXRpb25Ob2RlICYmIHRyYW5zaXRpb25Ob2RlLnBh
cmVudCkge1xuICAgIHRyYW5zaXRpb25Ob2RlID0gdHJhbnNpdGlvbk5vZGUucGFyZW50O1xuICAg
IGNvbnRleHQgPSB0cmFuc2l0aW9uTm9kZS5jb250ZXh0O1xuICB9XG5cbiAgdmFyIGlzQXBwZWFy
ID0gIWNvbnRleHQuX2lzTW91bnRlZCB8fCAhdm5vZGUuaXNSb290SW5zZXJ0O1xuXG4gIGlmIChp
c0FwcGVhciAmJiAhYXBwZWFyICYmIGFwcGVhciAhPT0gJycpIHtcbiAgICByZXR1cm5cbiAgfVxu
XG4gIHZhciBzdGFydENsYXNzID0gaXNBcHBlYXIgJiYgYXBwZWFyQ2xhc3NcbiAgICA/IGFwcGVh
ckNsYXNzXG4gICAgOiBlbnRlckNsYXNzO1xuICB2YXIgYWN0aXZlQ2xhc3MgPSBpc0FwcGVhciAm
JiBhcHBlYXJBY3RpdmVDbGFzc1xuICAgID8gYXBwZWFyQWN0aXZlQ2xhc3NcbiAgICA6IGVudGVy
QWN0aXZlQ2xhc3M7XG4gIHZhciB0b0NsYXNzID0gaXNBcHBlYXIgJiYgYXBwZWFyVG9DbGFzc1xu
ICAgID8gYXBwZWFyVG9DbGFzc1xuICAgIDogZW50ZXJUb0NsYXNzO1xuXG4gIHZhciBiZWZvcmVF
bnRlckhvb2sgPSBpc0FwcGVhclxuICAgID8gKGJlZm9yZUFwcGVhciB8fCBiZWZvcmVFbnRlcilc
biAgICA6IGJlZm9yZUVudGVyO1xuICB2YXIgZW50ZXJIb29rID0gaXNBcHBlYXJcbiAgICA/ICh0
eXBlb2YgYXBwZWFyID09PSAnZnVuY3Rpb24nID8gYXBwZWFyIDogZW50ZXIpXG4gICAgOiBlbnRl
cjtcbiAgdmFyIGFmdGVyRW50ZXJIb29rID0gaXNBcHBlYXJcbiAgICA/IChhZnRlckFwcGVhciB8
fCBhZnRlckVudGVyKVxuICAgIDogYWZ0ZXJFbnRlcjtcbiAgdmFyIGVudGVyQ2FuY2VsbGVkSG9v
ayA9IGlzQXBwZWFyXG4gICAgPyAoYXBwZWFyQ2FuY2VsbGVkIHx8IGVudGVyQ2FuY2VsbGVkKVxu
ICAgIDogZW50ZXJDYW5jZWxsZWQ7XG5cbiAgdmFyIGV4cGxpY2l0RW50ZXJEdXJhdGlvbiA9IHRv
TnVtYmVyKFxuICAgIGlzT2JqZWN0KGR1cmF0aW9uKVxuICAgICAgPyBkdXJhdGlvbi5lbnRlclxu
ICAgICAgOiBkdXJhdGlvblxuICApO1xuXG4gIGlmIChmYWxzZSkge1xuICAgIGNoZWNrRHVyYXRp
b24oZXhwbGljaXRFbnRlckR1cmF0aW9uLCAnZW50ZXInLCB2bm9kZSk7XG4gIH1cblxuICB2YXIg
ZXhwZWN0c0NTUyA9IGNzcyAhPT0gZmFsc2UgJiYgIWlzSUU5O1xuICB2YXIgdXNlcldhbnRzQ29u
dHJvbCA9IGdldEhvb2tBcmd1bWVudHNMZW5ndGgoZW50ZXJIb29rKTtcblxuICB2YXIgY2IgPSBl
bC5fZW50ZXJDYiA9IG9uY2UoZnVuY3Rpb24gKCkge1xuICAgIGlmIChleHBlY3RzQ1NTKSB7XG4g
ICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIHRvQ2xhc3MpO1xuICAgICAgcmVtb3ZlVHJh
bnNpdGlvbkNsYXNzKGVsLCBhY3RpdmVDbGFzcyk7XG4gICAgfVxuICAgIGlmIChjYi5jYW5jZWxs
ZWQpIHtcbiAgICAgIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgICAgIHJlbW92ZVRyYW5zaXRpb25D
bGFzcyhlbCwgc3RhcnRDbGFzcyk7XG4gICAgICB9XG4gICAgICBlbnRlckNhbmNlbGxlZEhvb2sg
JiYgZW50ZXJDYW5jZWxsZWRIb29rKGVsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWZ0ZXJFbnRl
ckhvb2sgJiYgYWZ0ZXJFbnRlckhvb2soZWwpO1xuICAgIH1cbiAgICBlbC5fZW50ZXJDYiA9IG51
bGw7XG4gIH0pO1xuXG4gIGlmICghdm5vZGUuZGF0YS5zaG93KSB7XG4gICAgLy8gcmVtb3ZlIHBl
bmRpbmcgbGVhdmUgZWxlbWVudCBvbiBlbnRlciBieSBpbmplY3RpbmcgYW4gaW5zZXJ0IGhvb2tc
biAgICBtZXJnZVZOb2RlSG9vayh2bm9kZS5kYXRhLmhvb2sgfHwgKHZub2RlLmRhdGEuaG9vayA9
IHt9KSwgJ2luc2VydCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBwYXJlbnQgPSBlbC5wYXJl
bnROb2RlO1xuICAgICAgdmFyIHBlbmRpbmdOb2RlID0gcGFyZW50ICYmIHBhcmVudC5fcGVuZGlu
ZyAmJiBwYXJlbnQuX3BlbmRpbmdbdm5vZGUua2V5XTtcbiAgICAgIGlmIChwZW5kaW5nTm9kZSAm
JlxuICAgICAgICBwZW5kaW5nTm9kZS50YWcgPT09IHZub2RlLnRhZyAmJlxuICAgICAgICBwZW5k
aW5nTm9kZS5lbG0uX2xlYXZlQ2JcbiAgICAgICkge1xuICAgICAgICBwZW5kaW5nTm9kZS5lbG0u
X2xlYXZlQ2IoKTtcbiAgICAgIH1cbiAgICAgIGVudGVySG9vayAmJiBlbnRlckhvb2soZWwsIGNi
KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIHN0YXJ0IGVudGVyIHRyYW5zaXRpb25cbiAgYmVmb3Jl
RW50ZXJIb29rICYmIGJlZm9yZUVudGVySG9vayhlbCk7XG4gIGlmIChleHBlY3RzQ1NTKSB7XG4g
ICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBzdGFydENsYXNzKTtcbiAgICBhZGRUcmFuc2l0aW9u
Q2xhc3MoZWwsIGFjdGl2ZUNsYXNzKTtcbiAgICBuZXh0RnJhbWUoZnVuY3Rpb24gKCkge1xuICAg
ICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCB0b0NsYXNzKTtcbiAgICAgIHJlbW92ZVRyYW5zaXRp
b25DbGFzcyhlbCwgc3RhcnRDbGFzcyk7XG4gICAgICBpZiAoIWNiLmNhbmNlbGxlZCAmJiAhdXNl
cldhbnRzQ29udHJvbCkge1xuICAgICAgICBpZiAoaXNWYWxpZER1cmF0aW9uKGV4cGxpY2l0RW50
ZXJEdXJhdGlvbikpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KGNiLCBleHBsaWNpdEVudGVyRHVy
YXRpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdoZW5UcmFuc2l0aW9uRW5kcyhl
bCwgdHlwZSwgY2IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAo
dm5vZGUuZGF0YS5zaG93KSB7XG4gICAgdG9nZ2xlRGlzcGxheSAmJiB0b2dnbGVEaXNwbGF5KCk7
XG4gICAgZW50ZXJIb29rICYmIGVudGVySG9vayhlbCwgY2IpO1xuICB9XG5cbiAgaWYgKCFleHBl
Y3RzQ1NTICYmICF1c2VyV2FudHNDb250cm9sKSB7XG4gICAgY2IoKTtcbiAgfVxufVxuXG5mdW5j
dGlvbiBsZWF2ZSAodm5vZGUsIHJtKSB7XG4gIHZhciBlbCA9IHZub2RlLmVsbTtcblxuICAvLyBj
YWxsIGVudGVyIGNhbGxiYWNrIG5vd1xuICBpZiAoaXNEZWYoZWwuX2VudGVyQ2IpKSB7XG4gICAg
ZWwuX2VudGVyQ2IuY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICBlbC5fZW50ZXJDYigpO1xuICB9XG5c
biAgdmFyIGRhdGEgPSByZXNvbHZlVHJhbnNpdGlvbih2bm9kZS5kYXRhLnRyYW5zaXRpb24pO1xu
ICBpZiAoaXNVbmRlZihkYXRhKSkge1xuICAgIHJldHVybiBybSgpXG4gIH1cblxuICAvKiBpc3Rh
bmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGlzRGVmKGVsLl9sZWF2ZUNiKSB8fCBlbC5ub2RlVHlw
ZSAhPT0gMSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIGNzcyA9IGRhdGEuY3NzO1xuICB2
YXIgdHlwZSA9IGRhdGEudHlwZTtcbiAgdmFyIGxlYXZlQ2xhc3MgPSBkYXRhLmxlYXZlQ2xhc3M7
XG4gIHZhciBsZWF2ZVRvQ2xhc3MgPSBkYXRhLmxlYXZlVG9DbGFzcztcbiAgdmFyIGxlYXZlQWN0
aXZlQ2xhc3MgPSBkYXRhLmxlYXZlQWN0aXZlQ2xhc3M7XG4gIHZhciBiZWZvcmVMZWF2ZSA9IGRh
dGEuYmVmb3JlTGVhdmU7XG4gIHZhciBsZWF2ZSA9IGRhdGEubGVhdmU7XG4gIHZhciBhZnRlckxl
YXZlID0gZGF0YS5hZnRlckxlYXZlO1xuICB2YXIgbGVhdmVDYW5jZWxsZWQgPSBkYXRhLmxlYXZl
Q2FuY2VsbGVkO1xuICB2YXIgZGVsYXlMZWF2ZSA9IGRhdGEuZGVsYXlMZWF2ZTtcbiAgdmFyIGR1
cmF0aW9uID0gZGF0YS5kdXJhdGlvbjtcblxuICB2YXIgZXhwZWN0c0NTUyA9IGNzcyAhPT0gZmFs
c2UgJiYgIWlzSUU5O1xuICB2YXIgdXNlcldhbnRzQ29udHJvbCA9IGdldEhvb2tBcmd1bWVudHNM
ZW5ndGgobGVhdmUpO1xuXG4gIHZhciBleHBsaWNpdExlYXZlRHVyYXRpb24gPSB0b051bWJlcihc
biAgICBpc09iamVjdChkdXJhdGlvbilcbiAgICAgID8gZHVyYXRpb24ubGVhdmVcbiAgICAgIDog
ZHVyYXRpb25cbiAgKTtcblxuICBpZiAoZmFsc2UpIHtcbiAgICBjaGVja0R1cmF0aW9uKGV4cGxp
Y2l0TGVhdmVEdXJhdGlvbiwgJ2xlYXZlJywgdm5vZGUpO1xuICB9XG5cbiAgdmFyIGNiID0gZWwu
X2xlYXZlQ2IgPSBvbmNlKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZWwucGFyZW50Tm9kZSAmJiBl
bC5wYXJlbnROb2RlLl9wZW5kaW5nKSB7XG4gICAgICBlbC5wYXJlbnROb2RlLl9wZW5kaW5nW3Zu
b2RlLmtleV0gPSBudWxsO1xuICAgIH1cbiAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgcmVt
b3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZVRvQ2xhc3MpO1xuICAgICAgcmVtb3ZlVHJhbnNp
dGlvbkNsYXNzKGVsLCBsZWF2ZUFjdGl2ZUNsYXNzKTtcbiAgICB9XG4gICAgaWYgKGNiLmNhbmNl
bGxlZCkge1xuICAgICAgaWYgKGV4cGVjdHNDU1MpIHtcbiAgICAgICAgcmVtb3ZlVHJhbnNpdGlv
bkNsYXNzKGVsLCBsZWF2ZUNsYXNzKTtcbiAgICAgIH1cbiAgICAgIGxlYXZlQ2FuY2VsbGVkICYm
IGxlYXZlQ2FuY2VsbGVkKGVsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcm0oKTtcbiAgICAgIGFm
dGVyTGVhdmUgJiYgYWZ0ZXJMZWF2ZShlbCk7XG4gICAgfVxuICAgIGVsLl9sZWF2ZUNiID0gbnVs
bDtcbiAgfSk7XG5cbiAgaWYgKGRlbGF5TGVhdmUpIHtcbiAgICBkZWxheUxlYXZlKHBlcmZvcm1M
ZWF2ZSk7XG4gIH0gZWxzZSB7XG4gICAgcGVyZm9ybUxlYXZlKCk7XG4gIH1cblxuICBmdW5jdGlv
biBwZXJmb3JtTGVhdmUgKCkge1xuICAgIC8vIHRoZSBkZWxheWVkIGxlYXZlIG1heSBoYXZlIGFs
cmVhZHkgYmVlbiBjYW5jZWxsZWRcbiAgICBpZiAoY2IuY2FuY2VsbGVkKSB7XG4gICAgICByZXR1
cm5cbiAgICB9XG4gICAgLy8gcmVjb3JkIGxlYXZpbmcgZWxlbWVudFxuICAgIGlmICghdm5vZGUu
ZGF0YS5zaG93KSB7XG4gICAgICAoZWwucGFyZW50Tm9kZS5fcGVuZGluZyB8fCAoZWwucGFyZW50
Tm9kZS5fcGVuZGluZyA9IHt9KSlbKHZub2RlLmtleSldID0gdm5vZGU7XG4gICAgfVxuICAgIGJl
Zm9yZUxlYXZlICYmIGJlZm9yZUxlYXZlKGVsKTtcbiAgICBpZiAoZXhwZWN0c0NTUykge1xuICAg
ICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUNsYXNzKTtcbiAgICAgIGFkZFRyYW5zaXRp
b25DbGFzcyhlbCwgbGVhdmVBY3RpdmVDbGFzcyk7XG4gICAgICBuZXh0RnJhbWUoZnVuY3Rpb24g
KCkge1xuICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlVG9DbGFzcyk7XG4gICAg
ICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVDbGFzcyk7XG4gICAgICAgIGlmICgh
Y2IuY2FuY2VsbGVkICYmICF1c2VyV2FudHNDb250cm9sKSB7XG4gICAgICAgICAgaWYgKGlzVmFs
aWREdXJhdGlvbihleHBsaWNpdExlYXZlRHVyYXRpb24pKSB7XG4gICAgICAgICAgICBzZXRUaW1l
b3V0KGNiLCBleHBsaWNpdExlYXZlRHVyYXRpb24pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAg
ICAgICAgICB3aGVuVHJhbnNpdGlvbkVuZHMoZWwsIHR5cGUsIGNiKTtcbiAgICAgICAgICB9XG4g
ICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBsZWF2ZSAmJiBsZWF2ZShlbCwgY2IpO1xu
ICAgIGlmICghZXhwZWN0c0NTUyAmJiAhdXNlcldhbnRzQ29udHJvbCkge1xuICAgICAgY2IoKTtc
biAgICB9XG4gIH1cbn1cblxuLy8gb25seSB1c2VkIGluIGRldiBtb2RlXG5mdW5jdGlvbiBjaGVj
a0R1cmF0aW9uICh2YWwsIG5hbWUsIHZub2RlKSB7XG4gIGlmICh0eXBlb2YgdmFsICE9PSAnbnVt
YmVyJykge1xuICAgIHdhcm4oXG4gICAgICBcIjx0cmFuc2l0aW9uPiBleHBsaWNpdCBcIiArIG5h
bWUgKyBcIiBkdXJhdGlvbiBpcyBub3QgYSB2YWxpZCBudW1iZXIgLSBcIiArXG4gICAgICBcImdv
dCBcIiArIChKU09OLnN0cmluZ2lmeSh2YWwpKSArIFwiLlwiLFxuICAgICAgdm5vZGUuY29udGV4
dFxuICAgICk7XG4gIH0gZWxzZSBpZiAoaXNOYU4odmFsKSkge1xuICAgIHdhcm4oXG4gICAgICBc
Ijx0cmFuc2l0aW9uPiBleHBsaWNpdCBcIiArIG5hbWUgKyBcIiBkdXJhdGlvbiBpcyBOYU4gLSBc
IiArXG4gICAgICAndGhlIGR1cmF0aW9uIGV4cHJlc3Npb24gbWlnaHQgYmUgaW5jb3JyZWN0Lics
XG4gICAgICB2bm9kZS5jb250ZXh0XG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1ZhbGlk
RHVyYXRpb24gKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ251bWJlcicgJiYgIWlz
TmFOKHZhbClcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgYSB0cmFuc2l0aW9uIGhvb2sncyBhcmd1
bWVudCBsZW5ndGguIFRoZSBob29rIG1heSBiZTpcbiAqIC0gYSBtZXJnZWQgaG9vayAoaW52b2tl
cikgd2l0aCB0aGUgb3JpZ2luYWwgaW4gLmZuc1xuICogLSBhIHdyYXBwZWQgY29tcG9uZW50IG1l
dGhvZCAoY2hlY2sgLl9sZW5ndGgpXG4gKiAtIGEgcGxhaW4gZnVuY3Rpb24gKC5sZW5ndGgpXG4g
Ki9cbmZ1bmN0aW9uIGdldEhvb2tBcmd1bWVudHNMZW5ndGggKGZuKSB7XG4gIGlmIChpc1VuZGVm
KGZuKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHZhciBpbnZva2VyRm5zID0gZm4uZm5z
O1xuICBpZiAoaXNEZWYoaW52b2tlckZucykpIHtcbiAgICAvLyBpbnZva2VyXG4gICAgcmV0dXJu
IGdldEhvb2tBcmd1bWVudHNMZW5ndGgoXG4gICAgICBBcnJheS5pc0FycmF5KGludm9rZXJGbnMp
XG4gICAgICAgID8gaW52b2tlckZuc1swXVxuICAgICAgICA6IGludm9rZXJGbnNcbiAgICApXG4g
IH0gZWxzZSB7XG4gICAgcmV0dXJuIChmbi5fbGVuZ3RoIHx8IGZuLmxlbmd0aCkgPiAxXG4gIH1c
bn1cblxuZnVuY3Rpb24gX2VudGVyIChfLCB2bm9kZSkge1xuICBpZiAodm5vZGUuZGF0YS5zaG93
ICE9PSB0cnVlKSB7XG4gICAgZW50ZXIodm5vZGUpO1xuICB9XG59XG5cbnZhciB0cmFuc2l0aW9u
ID0gaW5Ccm93c2VyID8ge1xuICBjcmVhdGU6IF9lbnRlcixcbiAgYWN0aXZhdGU6IF9lbnRlcixc
biAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUkJDEgKHZub2RlLCBybSkge1xuICAgIC8qIGlzdGFu
YnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHZub2RlLmRhdGEuc2hvdyAhPT0gdHJ1ZSkge1xu
ICAgICAgbGVhdmUodm5vZGUsIHJtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcm0oKTtcbiAgICB9
XG4gIH1cbn0gOiB7fTtcblxudmFyIHBsYXRmb3JtTW9kdWxlcyA9IFtcbiAgYXR0cnMsXG4gIGts
YXNzLFxuICBldmVudHMsXG4gIGRvbVByb3BzLFxuICBzdHlsZSxcbiAgdHJhbnNpdGlvblxuXTtc
blxuLyogICovXG5cbi8vIHRoZSBkaXJlY3RpdmUgbW9kdWxlIHNob3VsZCBiZSBhcHBsaWVkIGxh
c3QsIGFmdGVyIGFsbFxuLy8gYnVpbHQtaW4gbW9kdWxlcyBoYXZlIGJlZW4gYXBwbGllZC5cbnZh
ciBtb2R1bGVzID0gcGxhdGZvcm1Nb2R1bGVzLmNvbmNhdChiYXNlTW9kdWxlcyk7XG5cbnZhciBw
YXRjaCA9IGNyZWF0ZVBhdGNoRnVuY3Rpb24oeyBub2RlT3BzOiBub2RlT3BzLCBtb2R1bGVzOiBt
b2R1bGVzIH0pO1xuXG4vKipcbiAqIE5vdCB0eXBlIGNoZWNraW5nIHRoaXMgZmlsZSBiZWNhdXNl
IGZsb3cgZG9lc24ndCBsaWtlIGF0dGFjaGluZ1xuICogcHJvcGVydGllcyB0byBFbGVtZW50cy5c
biAqL1xuXG52YXIgaXNUZXh0SW5wdXRUeXBlID0gbWFrZU1hcCgndGV4dCxudW1iZXIscGFzc3dv
cmQsc2VhcmNoLGVtYWlsLHRlbCx1cmwnKTtcblxuLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5p
ZiAoaXNJRTkpIHtcbiAgLy8gaHR0cDovL3d3dy5tYXR0czQxMS5jb20vcG9zdC9pbnRlcm5ldC1l
eHBsb3Jlci05LW9uaW5wdXQvXG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3NlbGVjdGlv
bmNoYW5nZScsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZWwgPSBkb2N1bWVudC5hY3RpdmVFbGVt
ZW50O1xuICAgIGlmIChlbCAmJiBlbC52bW9kZWwpIHtcbiAgICAgIHRyaWdnZXIoZWwsICdpbnB1
dCcpO1xuICAgIH1cbiAgfSk7XG59XG5cbnZhciBtb2RlbCQxID0ge1xuICBpbnNlcnRlZDogZnVu
Y3Rpb24gaW5zZXJ0ZWQgKGVsLCBiaW5kaW5nLCB2bm9kZSkge1xuICAgIGlmICh2bm9kZS50YWcg
PT09ICdzZWxlY3QnKSB7XG4gICAgICB2YXIgY2IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNl
dFNlbGVjdGVkKGVsLCBiaW5kaW5nLCB2bm9kZS5jb250ZXh0KTtcbiAgICAgIH07XG4gICAgICBj
YigpO1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoaXNJRSB8fCBp
c0VkZ2UpIHtcbiAgICAgICAgc2V0VGltZW91dChjYiwgMCk7XG4gICAgICB9XG4gICAgICBlbC5f
dk9wdGlvbnMgPSBbXS5tYXAuY2FsbChlbC5vcHRpb25zLCBnZXRWYWx1ZSk7XG4gICAgfSBlbHNl
IGlmICh2bm9kZS50YWcgPT09ICd0ZXh0YXJlYScgfHwgaXNUZXh0SW5wdXRUeXBlKGVsLnR5cGUp
KSB7XG4gICAgICBlbC5fdk1vZGlmaWVycyA9IGJpbmRpbmcubW9kaWZpZXJzO1xuICAgICAgaWYg
KCFiaW5kaW5nLm1vZGlmaWVycy5sYXp5KSB7XG4gICAgICAgIC8vIFNhZmFyaSA8IDEwLjIgJiBV
SVdlYlZpZXcgZG9lc24ndCBmaXJlIGNvbXBvc2l0aW9uZW5kIHdoZW5cbiAgICAgICAgLy8gc3dp
dGNoaW5nIGZvY3VzIGJlZm9yZSBjb25maXJtaW5nIGNvbXBvc2l0aW9uIGNob2ljZVxuICAgICAg
ICAvLyB0aGlzIGFsc28gZml4ZXMgdGhlIGlzc3VlIHdoZXJlIHNvbWUgYnJvd3NlcnMgZS5nLiBp
T1MgQ2hyb21lXG4gICAgICAgIC8vIGZpcmVzIFwiY2hhbmdlXCIgaW5zdGVhZCBvZiBcImlucHV0
XCIgb24gYXV0b2NvbXBsZXRlLlxuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2Un
LCBvbkNvbXBvc2l0aW9uRW5kKTtcbiAgICAgICAgaWYgKCFpc0FuZHJvaWQpIHtcbiAgICAgICAg
ICBlbC5hZGRFdmVudExpc3RlbmVyKCdjb21wb3NpdGlvbnN0YXJ0Jywgb25Db21wb3NpdGlvblN0
YXJ0KTtcbiAgICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdjb21wb3NpdGlvbmVuZCcsIG9u
Q29tcG9zaXRpb25FbmQpO1xuICAgICAgICB9XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBp
ZiAqL1xuICAgICAgICBpZiAoaXNJRTkpIHtcbiAgICAgICAgICBlbC52bW9kZWwgPSB0cnVlO1xu
ICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBjb21wb25lbnRVcGRhdGVkOiBmdW5j
dGlvbiBjb21wb25lbnRVcGRhdGVkIChlbCwgYmluZGluZywgdm5vZGUpIHtcbiAgICBpZiAodm5v
ZGUudGFnID09PSAnc2VsZWN0Jykge1xuICAgICAgc2V0U2VsZWN0ZWQoZWwsIGJpbmRpbmcsIHZu
b2RlLmNvbnRleHQpO1xuICAgICAgLy8gaW4gY2FzZSB0aGUgb3B0aW9ucyByZW5kZXJlZCBieSB2
LWZvciBoYXZlIGNoYW5nZWQsXG4gICAgICAvLyBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHZhbHVl
IGlzIG91dC1vZi1zeW5jIHdpdGggdGhlIHJlbmRlcmVkIG9wdGlvbnMuXG4gICAgICAvLyBkZXRl
Y3Qgc3VjaCBjYXNlcyBhbmQgZmlsdGVyIG91dCB2YWx1ZXMgdGhhdCBubyBsb25nZXIgaGFzIGEg
bWF0Y2hpbmdcbiAgICAgIC8vIG9wdGlvbiBpbiB0aGUgRE9NLlxuICAgICAgdmFyIHByZXZPcHRp
b25zID0gZWwuX3ZPcHRpb25zO1xuICAgICAgdmFyIGN1ck9wdGlvbnMgPSBlbC5fdk9wdGlvbnMg
PSBbXS5tYXAuY2FsbChlbC5vcHRpb25zLCBnZXRWYWx1ZSk7XG4gICAgICBpZiAoY3VyT3B0aW9u
cy5zb21lKGZ1bmN0aW9uIChvLCBpKSB7IHJldHVybiAhbG9vc2VFcXVhbChvLCBwcmV2T3B0aW9u
c1tpXSk7IH0pKSB7XG4gICAgICAgIHRyaWdnZXIoZWwsICdjaGFuZ2UnKTtcbiAgICAgIH1cbiAg
ICB9XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHNldFNlbGVjdGVkIChlbCwgYmluZGluZywgdm0pIHtc
biAgdmFyIHZhbHVlID0gYmluZGluZy52YWx1ZTtcbiAgdmFyIGlzTXVsdGlwbGUgPSBlbC5tdWx0
aXBsZTtcbiAgaWYgKGlzTXVsdGlwbGUgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAg
XCJwcm9kdWN0aW9uXCIgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgXCI8c2VsZWN0
IG11bHRpcGxlIHYtbW9kZWw9XFxcIlwiICsgKGJpbmRpbmcuZXhwcmVzc2lvbikgKyBcIlxcXCI+
IFwiICtcbiAgICAgIFwiZXhwZWN0cyBhbiBBcnJheSB2YWx1ZSBmb3IgaXRzIGJpbmRpbmcsIGJ1
dCBnb3QgXCIgKyAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKS5zbGljZSg4
LCAtMSkpLFxuICAgICAgdm1cbiAgICApO1xuICAgIHJldHVyblxuICB9XG4gIHZhciBzZWxlY3Rl
ZCwgb3B0aW9uO1xuICBmb3IgKHZhciBpID0gMCwgbCA9IGVsLm9wdGlvbnMubGVuZ3RoOyBpIDwg
bDsgaSsrKSB7XG4gICAgb3B0aW9uID0gZWwub3B0aW9uc1tpXTtcbiAgICBpZiAoaXNNdWx0aXBs
ZSkge1xuICAgICAgc2VsZWN0ZWQgPSBsb29zZUluZGV4T2YodmFsdWUsIGdldFZhbHVlKG9wdGlv
bikpID4gLTE7XG4gICAgICBpZiAob3B0aW9uLnNlbGVjdGVkICE9PSBzZWxlY3RlZCkge1xuICAg
ICAgICBvcHRpb24uc2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xu
ICAgICAgaWYgKGxvb3NlRXF1YWwoZ2V0VmFsdWUob3B0aW9uKSwgdmFsdWUpKSB7XG4gICAgICAg
IGlmIChlbC5zZWxlY3RlZEluZGV4ICE9PSBpKSB7XG4gICAgICAgICAgZWwuc2VsZWN0ZWRJbmRl
eCA9IGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICB9XG4g
IGlmICghaXNNdWx0aXBsZSkge1xuICAgIGVsLnNlbGVjdGVkSW5kZXggPSAtMTtcbiAgfVxufVxu
XG5mdW5jdGlvbiBnZXRWYWx1ZSAob3B0aW9uKSB7XG4gIHJldHVybiAnX3ZhbHVlJyBpbiBvcHRp
b25cbiAgICA/IG9wdGlvbi5fdmFsdWVcbiAgICA6IG9wdGlvbi52YWx1ZVxufVxuXG5mdW5jdGlv
biBvbkNvbXBvc2l0aW9uU3RhcnQgKGUpIHtcbiAgZS50YXJnZXQuY29tcG9zaW5nID0gdHJ1ZTtc
bn1cblxuZnVuY3Rpb24gb25Db21wb3NpdGlvbkVuZCAoZSkge1xuICAvLyBwcmV2ZW50IHRyaWdn
ZXJpbmcgYW4gaW5wdXQgZXZlbnQgZm9yIG5vIHJlYXNvblxuICBpZiAoIWUudGFyZ2V0LmNvbXBv
c2luZykgeyByZXR1cm4gfVxuICBlLnRhcmdldC5jb21wb3NpbmcgPSBmYWxzZTtcbiAgdHJpZ2dl
cihlLnRhcmdldCwgJ2lucHV0Jyk7XG59XG5cbmZ1bmN0aW9uIHRyaWdnZXIgKGVsLCB0eXBlKSB7
XG4gIHZhciBlID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0hUTUxFdmVudHMnKTtcbiAgZS5pbml0
RXZlbnQodHlwZSwgdHJ1ZSwgdHJ1ZSk7XG4gIGVsLmRpc3BhdGNoRXZlbnQoZSk7XG59XG5cbi8q
ICAqL1xuXG4vLyByZWN1cnNpdmVseSBzZWFyY2ggZm9yIHBvc3NpYmxlIHRyYW5zaXRpb24gZGVm
aW5lZCBpbnNpZGUgdGhlIGNvbXBvbmVudCByb290XG5mdW5jdGlvbiBsb2NhdGVOb2RlICh2bm9k
ZSkge1xuICByZXR1cm4gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgJiYgKCF2bm9kZS5kYXRhIHx8
ICF2bm9kZS5kYXRhLnRyYW5zaXRpb24pXG4gICAgPyBsb2NhdGVOb2RlKHZub2RlLmNvbXBvbmVu
dEluc3RhbmNlLl92bm9kZSlcbiAgICA6IHZub2RlXG59XG5cbnZhciBzaG93ID0ge1xuICBiaW5k
OiBmdW5jdGlvbiBiaW5kIChlbCwgcmVmLCB2bm9kZSkge1xuICAgIHZhciB2YWx1ZSA9IHJlZi52
YWx1ZTtcblxuICAgIHZub2RlID0gbG9jYXRlTm9kZSh2bm9kZSk7XG4gICAgdmFyIHRyYW5zaXRp
b24kJDEgPSB2bm9kZS5kYXRhICYmIHZub2RlLmRhdGEudHJhbnNpdGlvbjtcbiAgICB2YXIgb3Jp
Z2luYWxEaXNwbGF5ID0gZWwuX192T3JpZ2luYWxEaXNwbGF5ID1cbiAgICAgIGVsLnN0eWxlLmRp
c3BsYXkgPT09ICdub25lJyA/ICcnIDogZWwuc3R5bGUuZGlzcGxheTtcbiAgICBpZiAodmFsdWUg
JiYgdHJhbnNpdGlvbiQkMSkge1xuICAgICAgdm5vZGUuZGF0YS5zaG93ID0gdHJ1ZTtcbiAgICAg
IGVudGVyKHZub2RlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSBv
cmlnaW5hbERpc3BsYXk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwuc3R5bGUu
ZGlzcGxheSA9IHZhbHVlID8gb3JpZ2luYWxEaXNwbGF5IDogJ25vbmUnO1xuICAgIH1cbiAgfSxc
blxuICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZSAoZWwsIHJlZiwgdm5vZGUpIHtcbiAgICB2YXIg
dmFsdWUgPSByZWYudmFsdWU7XG4gICAgdmFyIG9sZFZhbHVlID0gcmVmLm9sZFZhbHVlO1xuXG4g
ICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHZhbHVlID09PSBvbGRWYWx1ZSkg
eyByZXR1cm4gfVxuICAgIHZub2RlID0gbG9jYXRlTm9kZSh2bm9kZSk7XG4gICAgdmFyIHRyYW5z
aXRpb24kJDEgPSB2bm9kZS5kYXRhICYmIHZub2RlLmRhdGEudHJhbnNpdGlvbjtcbiAgICBpZiAo
dHJhbnNpdGlvbiQkMSkge1xuICAgICAgdm5vZGUuZGF0YS5zaG93ID0gdHJ1ZTtcbiAgICAgIGlm
ICh2YWx1ZSkge1xuICAgICAgICBlbnRlcih2bm9kZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAg
IGVsLnN0eWxlLmRpc3BsYXkgPSBlbC5fX3ZPcmlnaW5hbERpc3BsYXk7XG4gICAgICAgIH0pO1xu
ICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGVhdmUodm5vZGUsIGZ1bmN0aW9uICgpIHtcbiAgICAg
ICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAg
ICB9IGVsc2Uge1xuICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IHZhbHVlID8gZWwuX192T3JpZ2lu
YWxEaXNwbGF5IDogJ25vbmUnO1xuICAgIH1cbiAgfSxcblxuICB1bmJpbmQ6IGZ1bmN0aW9uIHVu
YmluZCAoXG4gICAgZWwsXG4gICAgYmluZGluZyxcbiAgICB2bm9kZSxcbiAgICBvbGRWbm9kZSxc
biAgICBpc0Rlc3Ryb3lcbiAgKSB7XG4gICAgaWYgKCFpc0Rlc3Ryb3kpIHtcbiAgICAgIGVsLnN0
eWxlLmRpc3BsYXkgPSBlbC5fX3ZPcmlnaW5hbERpc3BsYXk7XG4gICAgfVxuICB9XG59O1xuXG52
YXIgcGxhdGZvcm1EaXJlY3RpdmVzID0ge1xuICBtb2RlbDogbW9kZWwkMSxcbiAgc2hvdzogc2hv
d1xufTtcblxuLyogICovXG5cbi8vIFByb3ZpZGVzIHRyYW5zaXRpb24gc3VwcG9ydCBmb3IgYSBz
aW5nbGUgZWxlbWVudC9jb21wb25lbnQuXG4vLyBzdXBwb3J0cyB0cmFuc2l0aW9uIG1vZGUgKG91
dC1pbiAvIGluLW91dClcblxudmFyIHRyYW5zaXRpb25Qcm9wcyA9IHtcbiAgbmFtZTogU3RyaW5n
LFxuICBhcHBlYXI6IEJvb2xlYW4sXG4gIGNzczogQm9vbGVhbixcbiAgbW9kZTogU3RyaW5nLFxu
ICB0eXBlOiBTdHJpbmcsXG4gIGVudGVyQ2xhc3M6IFN0cmluZyxcbiAgbGVhdmVDbGFzczogU3Ry
aW5nLFxuICBlbnRlclRvQ2xhc3M6IFN0cmluZyxcbiAgbGVhdmVUb0NsYXNzOiBTdHJpbmcsXG4g
IGVudGVyQWN0aXZlQ2xhc3M6IFN0cmluZyxcbiAgbGVhdmVBY3RpdmVDbGFzczogU3RyaW5nLFxu
ICBhcHBlYXJDbGFzczogU3RyaW5nLFxuICBhcHBlYXJBY3RpdmVDbGFzczogU3RyaW5nLFxuICBh
cHBlYXJUb0NsYXNzOiBTdHJpbmcsXG4gIGR1cmF0aW9uOiBbTnVtYmVyLCBTdHJpbmcsIE9iamVj
dF1cbn07XG5cbi8vIGluIGNhc2UgdGhlIGNoaWxkIGlzIGFsc28gYW4gYWJzdHJhY3QgY29tcG9u
ZW50LCBlLmcuIDxrZWVwLWFsaXZlPlxuLy8gd2Ugd2FudCB0byByZWN1cnNpdmVseSByZXRyaWV2
ZSB0aGUgcmVhbCBjb21wb25lbnQgdG8gYmUgcmVuZGVyZWRcbmZ1bmN0aW9uIGdldFJlYWxDaGls
ZCAodm5vZGUpIHtcbiAgdmFyIGNvbXBPcHRpb25zID0gdm5vZGUgJiYgdm5vZGUuY29tcG9uZW50
T3B0aW9ucztcbiAgaWYgKGNvbXBPcHRpb25zICYmIGNvbXBPcHRpb25zLkN0b3Iub3B0aW9ucy5h
YnN0cmFjdCkge1xuICAgIHJldHVybiBnZXRSZWFsQ2hpbGQoZ2V0Rmlyc3RDb21wb25lbnRDaGls
ZChjb21wT3B0aW9ucy5jaGlsZHJlbikpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZub2RlXG4g
IH1cbn1cblxuZnVuY3Rpb24gZXh0cmFjdFRyYW5zaXRpb25EYXRhIChjb21wKSB7XG4gIHZhciBk
YXRhID0ge307XG4gIHZhciBvcHRpb25zID0gY29tcC4kb3B0aW9ucztcbiAgLy8gcHJvcHNcbiAg
Zm9yICh2YXIga2V5IGluIG9wdGlvbnMucHJvcHNEYXRhKSB7XG4gICAgZGF0YVtrZXldID0gY29t
cFtrZXldO1xuICB9XG4gIC8vIGV2ZW50cy5cbiAgLy8gZXh0cmFjdCBsaXN0ZW5lcnMgYW5kIHBh
c3MgdGhlbSBkaXJlY3RseSB0byB0aGUgdHJhbnNpdGlvbiBtZXRob2RzXG4gIHZhciBsaXN0ZW5l
cnMgPSBvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnM7XG4gIGZvciAodmFyIGtleSQxIGluIGxpc3Rl
bmVycykge1xuICAgIGRhdGFbY2FtZWxpemUoa2V5JDEpXSA9IGxpc3RlbmVyc1trZXkkMV07XG4g
IH1cbiAgcmV0dXJuIGRhdGFcbn1cblxuZnVuY3Rpb24gcGxhY2Vob2xkZXIgKGgsIHJhd0NoaWxk
KSB7XG4gIGlmICgvXFxkLWtlZXAtYWxpdmUkLy50ZXN0KHJhd0NoaWxkLnRhZykpIHtcbiAgICBy
ZXR1cm4gaCgna2VlcC1hbGl2ZScsIHtcbiAgICAgIHByb3BzOiByYXdDaGlsZC5jb21wb25lbnRP
cHRpb25zLnByb3BzRGF0YVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gaGFzUGFyZW50VHJh
bnNpdGlvbiAodm5vZGUpIHtcbiAgd2hpbGUgKCh2bm9kZSA9IHZub2RlLnBhcmVudCkpIHtcbiAg
ICBpZiAodm5vZGUuZGF0YS50cmFuc2l0aW9uKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1c
biAgfVxufVxuXG5mdW5jdGlvbiBpc1NhbWVDaGlsZCAoY2hpbGQsIG9sZENoaWxkKSB7XG4gIHJl
dHVybiBvbGRDaGlsZC5rZXkgPT09IGNoaWxkLmtleSAmJiBvbGRDaGlsZC50YWcgPT09IGNoaWxk
LnRhZ1xufVxuXG5mdW5jdGlvbiBpc0FzeW5jUGxhY2Vob2xkZXIgKG5vZGUpIHtcbiAgcmV0dXJu
IG5vZGUuaXNDb21tZW50ICYmIG5vZGUuYXN5bmNGYWN0b3J5XG59XG5cbnZhciBUcmFuc2l0aW9u
ID0ge1xuICBuYW1lOiAndHJhbnNpdGlvbicsXG4gIHByb3BzOiB0cmFuc2l0aW9uUHJvcHMsXG4g
IGFic3RyYWN0OiB0cnVlLFxuXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyIChoKSB7XG4gICAg
dmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLiRvcHRpb25zLl9y
ZW5kZXJDaGlsZHJlbjtcbiAgICBpZiAoIWNoaWxkcmVuKSB7XG4gICAgICByZXR1cm5cbiAgICB9
XG5cbiAgICAvLyBmaWx0ZXIgb3V0IHRleHQgbm9kZXMgKHBvc3NpYmxlIHdoaXRlc3BhY2VzKVxu
ICAgIGNoaWxkcmVuID0gY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uIChjKSB7IHJldHVybiBjLnRh
ZyB8fCBpc0FzeW5jUGxhY2Vob2xkZXIoYyk7IH0pO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBp
ZiAqL1xuICAgIGlmICghY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5c
biAgICAvLyB3YXJuIG11bHRpcGxlIGVsZW1lbnRzXG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICB3
YXJuKFxuICAgICAgICAnPHRyYW5zaXRpb24+IGNhbiBvbmx5IGJlIHVzZWQgb24gYSBzaW5nbGUg
ZWxlbWVudC4gVXNlICcgK1xuICAgICAgICAnPHRyYW5zaXRpb24tZ3JvdXA+IGZvciBsaXN0cy4n
LFxuICAgICAgICB0aGlzLiRwYXJlbnRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIG1vZGUg
PSB0aGlzLm1vZGU7XG5cbiAgICAvLyB3YXJuIGludmFsaWQgbW9kZVxuICAgIGlmIChmYWxzZVxu
ICAgICkge1xuICAgICAgd2FybihcbiAgICAgICAgJ2ludmFsaWQgPHRyYW5zaXRpb24+IG1vZGU6
ICcgKyBtb2RlLFxuICAgICAgICB0aGlzLiRwYXJlbnRcbiAgICAgICk7XG4gICAgfVxuXG4gICAg
dmFyIHJhd0NoaWxkID0gY2hpbGRyZW5bMF07XG5cbiAgICAvLyBpZiB0aGlzIGlzIGEgY29tcG9u
ZW50IHJvb3Qgbm9kZSBhbmQgdGhlIGNvbXBvbmVudCdzXG4gICAgLy8gcGFyZW50IGNvbnRhaW5l
ciBub2RlIGFsc28gaGFzIHRyYW5zaXRpb24sIHNraXAuXG4gICAgaWYgKGhhc1BhcmVudFRyYW5z
aXRpb24odGhpcy4kdm5vZGUpKSB7XG4gICAgICByZXR1cm4gcmF3Q2hpbGRcbiAgICB9XG5cbiAg
ICAvLyBhcHBseSB0cmFuc2l0aW9uIGRhdGEgdG8gY2hpbGRcbiAgICAvLyB1c2UgZ2V0UmVhbENo
aWxkKCkgdG8gaWdub3JlIGFic3RyYWN0IGNvbXBvbmVudHMgZS5nLiBrZWVwLWFsaXZlXG4gICAg
dmFyIGNoaWxkID0gZ2V0UmVhbENoaWxkKHJhd0NoaWxkKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25v
cmUgaWYgKi9cbiAgICBpZiAoIWNoaWxkKSB7XG4gICAgICByZXR1cm4gcmF3Q2hpbGRcbiAgICB9
XG5cbiAgICBpZiAodGhpcy5fbGVhdmluZykge1xuICAgICAgcmV0dXJuIHBsYWNlaG9sZGVyKGgs
IHJhd0NoaWxkKVxuICAgIH1cblxuICAgIC8vIGVuc3VyZSBhIGtleSB0aGF0IGlzIHVuaXF1ZSB0
byB0aGUgdm5vZGUgdHlwZSBhbmQgdG8gdGhpcyB0cmFuc2l0aW9uXG4gICAgLy8gY29tcG9uZW50
IGluc3RhbmNlLiBUaGlzIGtleSB3aWxsIGJlIHVzZWQgdG8gcmVtb3ZlIHBlbmRpbmcgbGVhdmlu
ZyBub2Rlc1xuICAgIC8vIGR1cmluZyBlbnRlcmluZy5cbiAgICB2YXIgaWQgPSBcIl9fdHJhbnNp
dGlvbi1cIiArICh0aGlzLl91aWQpICsgXCItXCI7XG4gICAgY2hpbGQua2V5ID0gY2hpbGQua2V5
ID09IG51bGxcbiAgICAgID8gY2hpbGQuaXNDb21tZW50XG4gICAgICAgID8gaWQgKyAnY29tbWVu
dCdcbiAgICAgICAgOiBpZCArIGNoaWxkLnRhZ1xuICAgICAgOiBpc1ByaW1pdGl2ZShjaGlsZC5r
ZXkpXG4gICAgICAgID8gKFN0cmluZyhjaGlsZC5rZXkpLmluZGV4T2YoaWQpID09PSAwID8gY2hp
bGQua2V5IDogaWQgKyBjaGlsZC5rZXkpXG4gICAgICAgIDogY2hpbGQua2V5O1xuXG4gICAgdmFy
IGRhdGEgPSAoY2hpbGQuZGF0YSB8fCAoY2hpbGQuZGF0YSA9IHt9KSkudHJhbnNpdGlvbiA9IGV4
dHJhY3RUcmFuc2l0aW9uRGF0YSh0aGlzKTtcbiAgICB2YXIgb2xkUmF3Q2hpbGQgPSB0aGlzLl92
bm9kZTtcbiAgICB2YXIgb2xkQ2hpbGQgPSBnZXRSZWFsQ2hpbGQob2xkUmF3Q2hpbGQpO1xuXG4g
ICAgLy8gbWFyayB2LXNob3dcbiAgICAvLyBzbyB0aGF0IHRoZSB0cmFuc2l0aW9uIG1vZHVsZSBj
YW4gaGFuZCBvdmVyIHRoZSBjb250cm9sIHRvIHRoZSBkaXJlY3RpdmVcbiAgICBpZiAoY2hpbGQu
ZGF0YS5kaXJlY3RpdmVzICYmIGNoaWxkLmRhdGEuZGlyZWN0aXZlcy5zb21lKGZ1bmN0aW9uIChk
KSB7IHJldHVybiBkLm5hbWUgPT09ICdzaG93JzsgfSkpIHtcbiAgICAgIGNoaWxkLmRhdGEuc2hv
dyA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgb2xkQ2hpbGQgJiZcbiAgICAgIG9s
ZENoaWxkLmRhdGEgJiZcbiAgICAgICFpc1NhbWVDaGlsZChjaGlsZCwgb2xkQ2hpbGQpICYmXG4g
ICAgICAhaXNBc3luY1BsYWNlaG9sZGVyKG9sZENoaWxkKVxuICAgICkge1xuICAgICAgLy8gcmVw
bGFjZSBvbGQgY2hpbGQgdHJhbnNpdGlvbiBkYXRhIHdpdGggZnJlc2ggb25lXG4gICAgICAvLyBp
bXBvcnRhbnQgZm9yIGR5bmFtaWMgdHJhbnNpdGlvbnMhXG4gICAgICB2YXIgb2xkRGF0YSA9IG9s
ZENoaWxkICYmIChvbGRDaGlsZC5kYXRhLnRyYW5zaXRpb24gPSBleHRlbmQoe30sIGRhdGEpKTtc
biAgICAgIC8vIGhhbmRsZSB0cmFuc2l0aW9uIG1vZGVcbiAgICAgIGlmIChtb2RlID09PSAnb3V0
LWluJykge1xuICAgICAgICAvLyByZXR1cm4gcGxhY2Vob2xkZXIgbm9kZSBhbmQgcXVldWUgdXBk
YXRlIHdoZW4gbGVhdmUgZmluaXNoZXNcbiAgICAgICAgdGhpcy5fbGVhdmluZyA9IHRydWU7XG4g
ICAgICAgIG1lcmdlVk5vZGVIb29rKG9sZERhdGEsICdhZnRlckxlYXZlJywgZnVuY3Rpb24gKCkg
e1xuICAgICAgICAgIHRoaXMkMS5fbGVhdmluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMkMS4k
Zm9yY2VVcGRhdGUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwbGFjZWhvbGRlciho
LCByYXdDaGlsZClcbiAgICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gJ2luLW91dCcpIHtcbiAgICAg
ICAgaWYgKGlzQXN5bmNQbGFjZWhvbGRlcihjaGlsZCkpIHtcbiAgICAgICAgICByZXR1cm4gb2xk
UmF3Q2hpbGRcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGVsYXllZExlYXZlO1xuICAgICAgICB2
YXIgcGVyZm9ybUxlYXZlID0gZnVuY3Rpb24gKCkgeyBkZWxheWVkTGVhdmUoKTsgfTtcbiAgICAg
ICAgbWVyZ2VWTm9kZUhvb2soZGF0YSwgJ2FmdGVyRW50ZXInLCBwZXJmb3JtTGVhdmUpO1xuICAg
ICAgICBtZXJnZVZOb2RlSG9vayhkYXRhLCAnZW50ZXJDYW5jZWxsZWQnLCBwZXJmb3JtTGVhdmUp
O1xuICAgICAgICBtZXJnZVZOb2RlSG9vayhvbGREYXRhLCAnZGVsYXlMZWF2ZScsIGZ1bmN0aW9u
IChsZWF2ZSkgeyBkZWxheWVkTGVhdmUgPSBsZWF2ZTsgfSk7XG4gICAgICB9XG4gICAgfVxuXG4g
ICAgcmV0dXJuIHJhd0NoaWxkXG4gIH1cbn07XG5cbi8qICAqL1xuXG4vLyBQcm92aWRlcyB0cmFu
c2l0aW9uIHN1cHBvcnQgZm9yIGxpc3QgaXRlbXMuXG4vLyBzdXBwb3J0cyBtb3ZlIHRyYW5zaXRp
b25zIHVzaW5nIHRoZSBGTElQIHRlY2huaXF1ZS5cblxuLy8gQmVjYXVzZSB0aGUgdmRvbSdzIGNo
aWxkcmVuIHVwZGF0ZSBhbGdvcml0aG0gaXMgXCJ1bnN0YWJsZVwiIC0gaS5lLlxuLy8gaXQgZG9l
c24ndCBndWFyYW50ZWUgdGhlIHJlbGF0aXZlIHBvc2l0aW9uaW5nIG9mIHJlbW92ZWQgZWxlbWVu
dHMsXG4vLyB3ZSBmb3JjZSB0cmFuc2l0aW9uLWdyb3VwIHRvIHVwZGF0ZSBpdHMgY2hpbGRyZW4g
aW50byB0d28gcGFzc2VzOlxuLy8gaW4gdGhlIGZpcnN0IHBhc3MsIHdlIHJlbW92ZSBhbGwgbm9k
ZXMgdGhhdCBuZWVkIHRvIGJlIHJlbW92ZWQsXG4vLyB0cmlnZ2VyaW5nIHRoZWlyIGxlYXZpbmcg
dHJhbnNpdGlvbjsgaW4gdGhlIHNlY29uZCBwYXNzLCB3ZSBpbnNlcnQvbW92ZVxuLy8gaW50byB0
aGUgZmluYWwgZGVzaXJlZCBzdGF0ZS4gVGhpcyB3YXkgaW4gdGhlIHNlY29uZCBwYXNzIHJlbW92
ZWRcbi8vIG5vZGVzIHdpbGwgcmVtYWluIHdoZXJlIHRoZXkgc2hvdWxkIGJlLlxuXG52YXIgcHJv
cHMgPSBleHRlbmQoe1xuICB0YWc6IFN0cmluZyxcbiAgbW92ZUNsYXNzOiBTdHJpbmdcbn0sIHRy
YW5zaXRpb25Qcm9wcyk7XG5cbmRlbGV0ZSBwcm9wcy5tb2RlO1xuXG52YXIgVHJhbnNpdGlvbkdy
b3VwID0ge1xuICBwcm9wczogcHJvcHMsXG5cbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIgKGgp
IHtcbiAgICB2YXIgdGFnID0gdGhpcy50YWcgfHwgdGhpcy4kdm5vZGUuZGF0YS50YWcgfHwgJ3Nw
YW4nO1xuICAgIHZhciBtYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHZhciBwcmV2Q2hp
bGRyZW4gPSB0aGlzLnByZXZDaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XG4gICAgdmFyIHJhd0No
aWxkcmVuID0gdGhpcy4kc2xvdHMuZGVmYXVsdCB8fCBbXTtcbiAgICB2YXIgY2hpbGRyZW4gPSB0
aGlzLmNoaWxkcmVuID0gW107XG4gICAgdmFyIHRyYW5zaXRpb25EYXRhID0gZXh0cmFjdFRyYW5z
aXRpb25EYXRhKHRoaXMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYXdDaGlsZHJlbi5s
ZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGMgPSByYXdDaGlsZHJlbltpXTtcbiAgICAgIGlmIChj
LnRhZykge1xuICAgICAgICBpZiAoYy5rZXkgIT0gbnVsbCAmJiBTdHJpbmcoYy5rZXkpLmluZGV4
T2YoJ19fdmxpc3QnKSAhPT0gMCkge1xuICAgICAgICAgIGNoaWxkcmVuLnB1c2goYyk7XG4gICAg
ICAgICAgbWFwW2Mua2V5XSA9IGNcbiAgICAgICAgICA7KGMuZGF0YSB8fCAoYy5kYXRhID0ge30p
KS50cmFuc2l0aW9uID0gdHJhbnNpdGlvbkRhdGE7XG4gICAgICAgIH0gZWxzZSBpZiAoZmFsc2Up
IHtcbiAgICAgICAgICB2YXIgb3B0cyA9IGMuY29tcG9uZW50T3B0aW9ucztcbiAgICAgICAgICB2
YXIgbmFtZSA9IG9wdHMgPyAob3B0cy5DdG9yLm9wdGlvbnMubmFtZSB8fCBvcHRzLnRhZyB8fCAn
JykgOiBjLnRhZztcbiAgICAgICAgICB3YXJuKChcIjx0cmFuc2l0aW9uLWdyb3VwPiBjaGlsZHJl
biBtdXN0IGJlIGtleWVkOiA8XCIgKyBuYW1lICsgXCI+XCIpKTtcbiAgICAgICAgfVxuICAgICAg
fVxuICAgIH1cblxuICAgIGlmIChwcmV2Q2hpbGRyZW4pIHtcbiAgICAgIHZhciBrZXB0ID0gW107
XG4gICAgICB2YXIgcmVtb3ZlZCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwg
cHJldkNoaWxkcmVuLmxlbmd0aDsgaSQxKyspIHtcbiAgICAgICAgdmFyIGMkMSA9IHByZXZDaGls
ZHJlbltpJDFdO1xuICAgICAgICBjJDEuZGF0YS50cmFuc2l0aW9uID0gdHJhbnNpdGlvbkRhdGE7
XG4gICAgICAgIGMkMS5kYXRhLnBvcyA9IGMkMS5lbG0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7
XG4gICAgICAgIGlmIChtYXBbYyQxLmtleV0pIHtcbiAgICAgICAgICBrZXB0LnB1c2goYyQxKTtc
biAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZW1vdmVkLnB1c2goYyQxKTtcbiAgICAgICAg
fVxuICAgICAgfVxuICAgICAgdGhpcy5rZXB0ID0gaCh0YWcsIG51bGwsIGtlcHQpO1xuICAgICAg
dGhpcy5yZW1vdmVkID0gcmVtb3ZlZDtcbiAgICB9XG5cbiAgICByZXR1cm4gaCh0YWcsIG51bGws
IGNoaWxkcmVuKVxuICB9LFxuXG4gIGJlZm9yZVVwZGF0ZTogZnVuY3Rpb24gYmVmb3JlVXBkYXRl
ICgpIHtcbiAgICAvLyBmb3JjZSByZW1vdmluZyBwYXNzXG4gICAgdGhpcy5fX3BhdGNoX18oXG4g
ICAgICB0aGlzLl92bm9kZSxcbiAgICAgIHRoaXMua2VwdCxcbiAgICAgIGZhbHNlLCAvLyBoeWRy
YXRpbmdcbiAgICAgIHRydWUgLy8gcmVtb3ZlT25seSAoIWltcG9ydGFudCwgYXZvaWRzIHVubmVj
ZXNzYXJ5IG1vdmVzKVxuICAgICk7XG4gICAgdGhpcy5fdm5vZGUgPSB0aGlzLmtlcHQ7XG4gIH0s
XG5cbiAgdXBkYXRlZDogZnVuY3Rpb24gdXBkYXRlZCAoKSB7XG4gICAgdmFyIGNoaWxkcmVuID0g
dGhpcy5wcmV2Q2hpbGRyZW47XG4gICAgdmFyIG1vdmVDbGFzcyA9IHRoaXMubW92ZUNsYXNzIHx8
ICgodGhpcy5uYW1lIHx8ICd2JykgKyAnLW1vdmUnKTtcbiAgICBpZiAoIWNoaWxkcmVuLmxlbmd0
aCB8fCAhdGhpcy5oYXNNb3ZlKGNoaWxkcmVuWzBdLmVsbSwgbW92ZUNsYXNzKSkge1xuICAgICAg
cmV0dXJuXG4gICAgfVxuXG4gICAgLy8gd2UgZGl2aWRlIHRoZSB3b3JrIGludG8gdGhyZWUgbG9v
cHMgdG8gYXZvaWQgbWl4aW5nIERPTSByZWFkcyBhbmQgd3JpdGVzXG4gICAgLy8gaW4gZWFjaCBp
dGVyYXRpb24gLSB3aGljaCBoZWxwcyBwcmV2ZW50IGxheW91dCB0aHJhc2hpbmcuXG4gICAgY2hp
bGRyZW4uZm9yRWFjaChjYWxsUGVuZGluZ0Nicyk7XG4gICAgY2hpbGRyZW4uZm9yRWFjaChyZWNv
cmRQb3NpdGlvbik7XG4gICAgY2hpbGRyZW4uZm9yRWFjaChhcHBseVRyYW5zbGF0aW9uKTtcblxu
ICAgIC8vIGZvcmNlIHJlZmxvdyB0byBwdXQgZXZlcnl0aGluZyBpbiBwb3NpdGlvblxuICAgIHZh
ciBib2R5ID0gZG9jdW1lbnQuYm9keTtcbiAgICB2YXIgZiA9IGJvZHkub2Zmc2V0SGVpZ2h0OyAv
LyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBjaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChj
KSB7XG4gICAgICBpZiAoYy5kYXRhLm1vdmVkKSB7XG4gICAgICAgIHZhciBlbCA9IGMuZWxtO1xu
ICAgICAgICB2YXIgcyA9IGVsLnN0eWxlO1xuICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWws
IG1vdmVDbGFzcyk7XG4gICAgICAgIHMudHJhbnNmb3JtID0gcy5XZWJraXRUcmFuc2Zvcm0gPSBz
LnRyYW5zaXRpb25EdXJhdGlvbiA9ICcnO1xuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKHRy
YW5zaXRpb25FbmRFdmVudCwgZWwuX21vdmVDYiA9IGZ1bmN0aW9uIGNiIChlKSB7XG4gICAgICAg
ICAgaWYgKCFlIHx8IC90cmFuc2Zvcm0kLy50ZXN0KGUucHJvcGVydHlOYW1lKSkge1xuICAgICAg
ICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcih0cmFuc2l0aW9uRW5kRXZlbnQsIGNiKTtcbiAg
ICAgICAgICAgIGVsLl9tb3ZlQ2IgPSBudWxsO1xuICAgICAgICAgICAgcmVtb3ZlVHJhbnNpdGlv
bkNsYXNzKGVsLCBtb3ZlQ2xhc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9
XG4gICAgfSk7XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhc01vdmU6IGZ1bmN0aW9uIGhh
c01vdmUgKGVsLCBtb3ZlQ2xhc3MpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xu
ICAgICAgaWYgKCFoYXNUcmFuc2l0aW9uKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAg
fVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAodGhpcy5faGFzTW92
ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzTW92ZVxuICAgICAgfVxuICAgICAgLy8gRGV0
ZWN0IHdoZXRoZXIgYW4gZWxlbWVudCB3aXRoIHRoZSBtb3ZlIGNsYXNzIGFwcGxpZWQgaGFzXG4g
ICAgICAvLyBDU1MgdHJhbnNpdGlvbnMuIFNpbmNlIHRoZSBlbGVtZW50IG1heSBiZSBpbnNpZGUg
YW4gZW50ZXJpbmdcbiAgICAgIC8vIHRyYW5zaXRpb24gYXQgdGhpcyB2ZXJ5IG1vbWVudCwgd2Ug
bWFrZSBhIGNsb25lIG9mIGl0IGFuZCByZW1vdmVcbiAgICAgIC8vIGFsbCBvdGhlciB0cmFuc2l0
aW9uIGNsYXNzZXMgYXBwbGllZCB0byBlbnN1cmUgb25seSB0aGUgbW92ZSBjbGFzc1xuICAgICAg
Ly8gaXMgYXBwbGllZC5cbiAgICAgIHZhciBjbG9uZSA9IGVsLmNsb25lTm9kZSgpO1xuICAgICAg
aWYgKGVsLl90cmFuc2l0aW9uQ2xhc3Nlcykge1xuICAgICAgICBlbC5fdHJhbnNpdGlvbkNsYXNz
ZXMuZm9yRWFjaChmdW5jdGlvbiAoY2xzKSB7IHJlbW92ZUNsYXNzKGNsb25lLCBjbHMpOyB9KTtc
biAgICAgIH1cbiAgICAgIGFkZENsYXNzKGNsb25lLCBtb3ZlQ2xhc3MpO1xuICAgICAgY2xvbmUu
c3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIHRoaXMuJGVsLmFwcGVuZENoaWxkKGNsb25l
KTtcbiAgICAgIHZhciBpbmZvID0gZ2V0VHJhbnNpdGlvbkluZm8oY2xvbmUpO1xuICAgICAgdGhp
cy4kZWwucmVtb3ZlQ2hpbGQoY2xvbmUpO1xuICAgICAgcmV0dXJuICh0aGlzLl9oYXNNb3ZlID0g
aW5mby5oYXNUcmFuc2Zvcm0pXG4gICAgfVxuICB9XG59O1xuXG5mdW5jdGlvbiBjYWxsUGVuZGlu
Z0NicyAoYykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGMuZWxtLl9tb3Zl
Q2IpIHtcbiAgICBjLmVsbS5fbW92ZUNiKCk7XG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIGlm
ICovXG4gIGlmIChjLmVsbS5fZW50ZXJDYikge1xuICAgIGMuZWxtLl9lbnRlckNiKCk7XG4gIH1c
bn1cblxuZnVuY3Rpb24gcmVjb3JkUG9zaXRpb24gKGMpIHtcbiAgYy5kYXRhLm5ld1BvcyA9IGMu
ZWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xufVxuXG5mdW5jdGlvbiBhcHBseVRyYW5zbGF0
aW9uIChjKSB7XG4gIHZhciBvbGRQb3MgPSBjLmRhdGEucG9zO1xuICB2YXIgbmV3UG9zID0gYy5k
YXRhLm5ld1BvcztcbiAgdmFyIGR4ID0gb2xkUG9zLmxlZnQgLSBuZXdQb3MubGVmdDtcbiAgdmFy
IGR5ID0gb2xkUG9zLnRvcCAtIG5ld1Bvcy50b3A7XG4gIGlmIChkeCB8fCBkeSkge1xuICAgIGMu
ZGF0YS5tb3ZlZCA9IHRydWU7XG4gICAgdmFyIHMgPSBjLmVsbS5zdHlsZTtcbiAgICBzLnRyYW5z
Zm9ybSA9IHMuV2Via2l0VHJhbnNmb3JtID0gXCJ0cmFuc2xhdGUoXCIgKyBkeCArIFwicHgsXCIg
KyBkeSArIFwicHgpXCI7XG4gICAgcy50cmFuc2l0aW9uRHVyYXRpb24gPSAnMHMnO1xuICB9XG59
XG5cbnZhciBwbGF0Zm9ybUNvbXBvbmVudHMgPSB7XG4gIFRyYW5zaXRpb246IFRyYW5zaXRpb24s
XG4gIFRyYW5zaXRpb25Hcm91cDogVHJhbnNpdGlvbkdyb3VwXG59O1xuXG4vKiAgKi9cblxuLy8g
aW5zdGFsbCBwbGF0Zm9ybSBzcGVjaWZpYyB1dGlsc1xuVnVlJDMuY29uZmlnLm11c3RVc2VQcm9w
ID0gbXVzdFVzZVByb3A7XG5WdWUkMy5jb25maWcuaXNSZXNlcnZlZFRhZyA9IGlzUmVzZXJ2ZWRU
YWc7XG5WdWUkMy5jb25maWcuaXNSZXNlcnZlZEF0dHIgPSBpc1Jlc2VydmVkQXR0cjtcblZ1ZSQz
LmNvbmZpZy5nZXRUYWdOYW1lc3BhY2UgPSBnZXRUYWdOYW1lc3BhY2U7XG5WdWUkMy5jb25maWcu
aXNVbmtub3duRWxlbWVudCA9IGlzVW5rbm93bkVsZW1lbnQ7XG5cbi8vIGluc3RhbGwgcGxhdGZv
cm0gcnVudGltZSBkaXJlY3RpdmVzICYgY29tcG9uZW50c1xuZXh0ZW5kKFZ1ZSQzLm9wdGlvbnMu
ZGlyZWN0aXZlcywgcGxhdGZvcm1EaXJlY3RpdmVzKTtcbmV4dGVuZChWdWUkMy5vcHRpb25zLmNv
bXBvbmVudHMsIHBsYXRmb3JtQ29tcG9uZW50cyk7XG5cbi8vIGluc3RhbGwgcGxhdGZvcm0gcGF0
Y2ggZnVuY3Rpb25cblZ1ZSQzLnByb3RvdHlwZS5fX3BhdGNoX18gPSBpbkJyb3dzZXIgPyBwYXRj
aCA6IG5vb3A7XG5cbi8vIHB1YmxpYyBtb3VudCBtZXRob2RcblZ1ZSQzLnByb3RvdHlwZS4kbW91
bnQgPSBmdW5jdGlvbiAoXG4gIGVsLFxuICBoeWRyYXRpbmdcbikge1xuICBlbCA9IGVsICYmIGlu
QnJvd3NlciA/IHF1ZXJ5KGVsKSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIG1vdW50Q29tcG9uZW50
KHRoaXMsIGVsLCBoeWRyYXRpbmcpXG59O1xuXG4vLyBkZXZ0b29scyBnbG9iYWwgaG9va1xuLyog
aXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICBpZiAo
Y29uZmlnLmRldnRvb2xzKSB7XG4gICAgaWYgKGRldnRvb2xzKSB7XG4gICAgICBkZXZ0b29scy5l
bWl0KCdpbml0JywgVnVlJDMpO1xuICAgIH0gZWxzZSBpZiAoZmFsc2UpIHtcbiAgICAgIGNvbnNv
bGVbY29uc29sZS5pbmZvID8gJ2luZm8nIDogJ2xvZyddKFxuICAgICAgICAnRG93bmxvYWQgdGhl
IFZ1ZSBEZXZ0b29scyBleHRlbnNpb24gZm9yIGEgYmV0dGVyIGRldmVsb3BtZW50IGV4cGVyaWVu
Y2U6XFxuJyArXG4gICAgICAgICdodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLWRldnRvb2xz
J1xuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgaWYgKGZhbHNlXG4gICkge1xuICAgIGNvbnNvbGVb
Y29uc29sZS5pbmZvID8gJ2luZm8nIDogJ2xvZyddKFxuICAgICAgXCJZb3UgYXJlIHJ1bm5pbmcg
VnVlIGluIGRldmVsb3BtZW50IG1vZGUuXFxuXCIgK1xuICAgICAgXCJNYWtlIHN1cmUgdG8gdHVy
biBvbiBwcm9kdWN0aW9uIG1vZGUgd2hlbiBkZXBsb3lpbmcgZm9yIHByb2R1Y3Rpb24uXFxuXCIg
K1xuICAgICAgXCJTZWUgbW9yZSB0aXBzIGF0IGh0dHBzOi8vdnVlanMub3JnL2d1aWRlL2RlcGxv
eW1lbnQuaHRtbFwiXG4gICAgKTtcbiAgfVxufSwgMCk7XG5cbi8qICAqL1xuXG4vLyBjaGVjayB3
aGV0aGVyIGN1cnJlbnQgYnJvd3NlciBlbmNvZGVzIGEgY2hhciBpbnNpZGUgYXR0cmlidXRlIHZh
bHVlc1xuZnVuY3Rpb24gc2hvdWxkRGVjb2RlIChjb250ZW50LCBlbmNvZGVkKSB7XG4gIHZhciBk
aXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgZGl2LmlubmVySFRNTCA9IFwi
PGRpdiBhPVxcXCJcIiArIGNvbnRlbnQgKyBcIlxcXCIvPlwiO1xuICByZXR1cm4gZGl2LmlubmVy
SFRNTC5pbmRleE9mKGVuY29kZWQpID4gMFxufVxuXG4vLyAjMzY2M1xuLy8gSUUgZW5jb2RlcyBu
ZXdsaW5lcyBpbnNpZGUgYXR0cmlidXRlIHZhbHVlcyB3aGlsZSBvdGhlciBicm93c2VycyBkb24n
dFxudmFyIHNob3VsZERlY29kZU5ld2xpbmVzID0gaW5Ccm93c2VyID8gc2hvdWxkRGVjb2RlKCdc
XG4nLCAnJiMxMDsnKSA6IGZhbHNlO1xuXG4vKiAgKi9cblxudmFyIGRlZmF1bHRUYWdSRSA9IC9c
XHtcXHsoKD86LnxcXG4pKz8pXFx9XFx9L2c7XG52YXIgcmVnZXhFc2NhcGVSRSA9IC9bLS4qKz9e
JHt9KCl8W1xcXVxcL1xcXFxdL2c7XG5cbnZhciBidWlsZFJlZ2V4ID0gY2FjaGVkKGZ1bmN0aW9u
IChkZWxpbWl0ZXJzKSB7XG4gIHZhciBvcGVuID0gZGVsaW1pdGVyc1swXS5yZXBsYWNlKHJlZ2V4
RXNjYXBlUkUsICdcXFxcJCYnKTtcbiAgdmFyIGNsb3NlID0gZGVsaW1pdGVyc1sxXS5yZXBsYWNl
KHJlZ2V4RXNjYXBlUkUsICdcXFxcJCYnKTtcbiAgcmV0dXJuIG5ldyBSZWdFeHAob3BlbiArICco
KD86LnxcXFxcbikrPyknICsgY2xvc2UsICdnJylcbn0pO1xuXG5mdW5jdGlvbiBwYXJzZVRleHQg
KFxuICB0ZXh0LFxuICBkZWxpbWl0ZXJzXG4pIHtcbiAgdmFyIHRhZ1JFID0gZGVsaW1pdGVycyA/
IGJ1aWxkUmVnZXgoZGVsaW1pdGVycykgOiBkZWZhdWx0VGFnUkU7XG4gIGlmICghdGFnUkUudGVz
dCh0ZXh0KSkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciB0b2tlbnMgPSBbXTtcbiAgdmFyIGxh
c3RJbmRleCA9IHRhZ1JFLmxhc3RJbmRleCA9IDA7XG4gIHZhciBtYXRjaCwgaW5kZXg7XG4gIHdo
aWxlICgobWF0Y2ggPSB0YWdSRS5leGVjKHRleHQpKSkge1xuICAgIGluZGV4ID0gbWF0Y2guaW5k
ZXg7XG4gICAgLy8gcHVzaCB0ZXh0IHRva2VuXG4gICAgaWYgKGluZGV4ID4gbGFzdEluZGV4KSB7
XG4gICAgICB0b2tlbnMucHVzaChKU09OLnN0cmluZ2lmeSh0ZXh0LnNsaWNlKGxhc3RJbmRleCwg
aW5kZXgpKSk7XG4gICAgfVxuICAgIC8vIHRhZyB0b2tlblxuICAgIHZhciBleHAgPSBwYXJzZUZp
bHRlcnMobWF0Y2hbMV0udHJpbSgpKTtcbiAgICB0b2tlbnMucHVzaCgoXCJfcyhcIiArIGV4cCAr
IFwiKVwiKSk7XG4gICAgbGFzdEluZGV4ID0gaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG4gIH1c
biAgaWYgKGxhc3RJbmRleCA8IHRleHQubGVuZ3RoKSB7XG4gICAgdG9rZW5zLnB1c2goSlNPTi5z
dHJpbmdpZnkodGV4dC5zbGljZShsYXN0SW5kZXgpKSk7XG4gIH1cbiAgcmV0dXJuIHRva2Vucy5q
b2luKCcrJylcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIHRyYW5zZm9ybU5vZGUgKGVsLCBvcHRp
b25zKSB7XG4gIHZhciB3YXJuID0gb3B0aW9ucy53YXJuIHx8IGJhc2VXYXJuO1xuICB2YXIgc3Rh
dGljQ2xhc3MgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAnY2xhc3MnKTtcbiAgaWYgKGZhbHNlKSB7
XG4gICAgdmFyIGV4cHJlc3Npb24gPSBwYXJzZVRleHQoc3RhdGljQ2xhc3MsIG9wdGlvbnMuZGVs
aW1pdGVycyk7XG4gICAgaWYgKGV4cHJlc3Npb24pIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIFwi
Y2xhc3M9XFxcIlwiICsgc3RhdGljQ2xhc3MgKyBcIlxcXCI6IFwiICtcbiAgICAgICAgJ0ludGVy
cG9sYXRpb24gaW5zaWRlIGF0dHJpYnV0ZXMgaGFzIGJlZW4gcmVtb3ZlZC4gJyArXG4gICAgICAg
ICdVc2Ugdi1iaW5kIG9yIHRoZSBjb2xvbiBzaG9ydGhhbmQgaW5zdGVhZC4gRm9yIGV4YW1wbGUs
ICcgK1xuICAgICAgICAnaW5zdGVhZCBvZiA8ZGl2IGNsYXNzPVwie3sgdmFsIH19XCI+LCB1c2Ug
PGRpdiA6Y2xhc3M9XCJ2YWxcIj4uJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgaWYgKHN0YXRp
Y0NsYXNzKSB7XG4gICAgZWwuc3RhdGljQ2xhc3MgPSBKU09OLnN0cmluZ2lmeShzdGF0aWNDbGFz
cyk7XG4gIH1cbiAgdmFyIGNsYXNzQmluZGluZyA9IGdldEJpbmRpbmdBdHRyKGVsLCAnY2xhc3Mn
LCBmYWxzZSAvKiBnZXRTdGF0aWMgKi8pO1xuICBpZiAoY2xhc3NCaW5kaW5nKSB7XG4gICAgZWwu
Y2xhc3NCaW5kaW5nID0gY2xhc3NCaW5kaW5nO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdlbkRhdGEg
KGVsKSB7XG4gIHZhciBkYXRhID0gJyc7XG4gIGlmIChlbC5zdGF0aWNDbGFzcykge1xuICAgIGRh
dGEgKz0gXCJzdGF0aWNDbGFzczpcIiArIChlbC5zdGF0aWNDbGFzcykgKyBcIixcIjtcbiAgfVxu
ICBpZiAoZWwuY2xhc3NCaW5kaW5nKSB7XG4gICAgZGF0YSArPSBcImNsYXNzOlwiICsgKGVsLmNs
YXNzQmluZGluZykgKyBcIixcIjtcbiAgfVxuICByZXR1cm4gZGF0YVxufVxuXG52YXIga2xhc3Mk
MSA9IHtcbiAgc3RhdGljS2V5czogWydzdGF0aWNDbGFzcyddLFxuICB0cmFuc2Zvcm1Ob2RlOiB0
cmFuc2Zvcm1Ob2RlLFxuICBnZW5EYXRhOiBnZW5EYXRhXG59O1xuXG4vKiAgKi9cblxuZnVuY3Rp
b24gdHJhbnNmb3JtTm9kZSQxIChlbCwgb3B0aW9ucykge1xuICB2YXIgd2FybiA9IG9wdGlvbnMu
d2FybiB8fCBiYXNlV2FybjtcbiAgdmFyIHN0YXRpY1N0eWxlID0gZ2V0QW5kUmVtb3ZlQXR0cihl
bCwgJ3N0eWxlJyk7XG4gIGlmIChzdGF0aWNTdHlsZSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9y
ZSBpZiAqL1xuICAgIGlmIChmYWxzZSkge1xuICAgICAgdmFyIGV4cHJlc3Npb24gPSBwYXJzZVRl
eHQoc3RhdGljU3R5bGUsIG9wdGlvbnMuZGVsaW1pdGVycyk7XG4gICAgICBpZiAoZXhwcmVzc2lv
bikge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgIFwic3R5bGU9XFxcIlwiICsgc3RhdGljU3R5
bGUgKyBcIlxcXCI6IFwiICtcbiAgICAgICAgICAnSW50ZXJwb2xhdGlvbiBpbnNpZGUgYXR0cmli
dXRlcyBoYXMgYmVlbiByZW1vdmVkLiAnICtcbiAgICAgICAgICAnVXNlIHYtYmluZCBvciB0aGUg
Y29sb24gc2hvcnRoYW5kIGluc3RlYWQuIEZvciBleGFtcGxlLCAnICtcbiAgICAgICAgICAnaW5z
dGVhZCBvZiA8ZGl2IHN0eWxlPVwie3sgdmFsIH19XCI+LCB1c2UgPGRpdiA6c3R5bGU9XCJ2YWxc
Ij4uJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBlbC5zdGF0aWNTdHlsZSA9IEpT
T04uc3RyaW5naWZ5KHBhcnNlU3R5bGVUZXh0KHN0YXRpY1N0eWxlKSk7XG4gIH1cblxuICB2YXIg
c3R5bGVCaW5kaW5nID0gZ2V0QmluZGluZ0F0dHIoZWwsICdzdHlsZScsIGZhbHNlIC8qIGdldFN0
YXRpYyAqLyk7XG4gIGlmIChzdHlsZUJpbmRpbmcpIHtcbiAgICBlbC5zdHlsZUJpbmRpbmcgPSBz
dHlsZUJpbmRpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2VuRGF0YSQxIChlbCkge1xuICB2YXIg
ZGF0YSA9ICcnO1xuICBpZiAoZWwuc3RhdGljU3R5bGUpIHtcbiAgICBkYXRhICs9IFwic3RhdGlj
U3R5bGU6XCIgKyAoZWwuc3RhdGljU3R5bGUpICsgXCIsXCI7XG4gIH1cbiAgaWYgKGVsLnN0eWxl
QmluZGluZykge1xuICAgIGRhdGEgKz0gXCJzdHlsZTooXCIgKyAoZWwuc3R5bGVCaW5kaW5nKSAr
IFwiKSxcIjtcbiAgfVxuICByZXR1cm4gZGF0YVxufVxuXG52YXIgc3R5bGUkMSA9IHtcbiAgc3Rh
dGljS2V5czogWydzdGF0aWNTdHlsZSddLFxuICB0cmFuc2Zvcm1Ob2RlOiB0cmFuc2Zvcm1Ob2Rl
JDEsXG4gIGdlbkRhdGE6IGdlbkRhdGEkMVxufTtcblxudmFyIG1vZHVsZXMkMSA9IFtcbiAga2xh
c3MkMSxcbiAgc3R5bGUkMVxuXTtcblxuLyogICovXG5cbmZ1bmN0aW9uIHRleHQgKGVsLCBkaXIp
IHtcbiAgaWYgKGRpci52YWx1ZSkge1xuICAgIGFkZFByb3AoZWwsICd0ZXh0Q29udGVudCcsIChc
Il9zKFwiICsgKGRpci52YWx1ZSkgKyBcIilcIikpO1xuICB9XG59XG5cbi8qICAqL1xuXG5mdW5j
dGlvbiBodG1sIChlbCwgZGlyKSB7XG4gIGlmIChkaXIudmFsdWUpIHtcbiAgICBhZGRQcm9wKGVs
LCAnaW5uZXJIVE1MJywgKFwiX3MoXCIgKyAoZGlyLnZhbHVlKSArIFwiKVwiKSk7XG4gIH1cbn1c
blxudmFyIGRpcmVjdGl2ZXMkMSA9IHtcbiAgbW9kZWw6IG1vZGVsLFxuICB0ZXh0OiB0ZXh0LFxu
ICBodG1sOiBodG1sXG59O1xuXG4vKiAgKi9cblxudmFyIGlzVW5hcnlUYWcgPSBtYWtlTWFwKFxu
ICAnYXJlYSxiYXNlLGJyLGNvbCxlbWJlZCxmcmFtZSxocixpbWcsaW5wdXQsaXNpbmRleCxrZXln
ZW4sJyArXG4gICdsaW5rLG1ldGEscGFyYW0sc291cmNlLHRyYWNrLHdicidcbik7XG5cbi8vIEVs
ZW1lbnRzIHRoYXQgeW91IGNhbiwgaW50ZW50aW9uYWxseSwgbGVhdmUgb3BlblxuLy8gKGFuZCB3
aGljaCBjbG9zZSB0aGVtc2VsdmVzKVxudmFyIGNhbkJlTGVmdE9wZW5UYWcgPSBtYWtlTWFwKFxu
ICAnY29sZ3JvdXAsZGQsZHQsbGksb3B0aW9ucyxwLHRkLHRmb290LHRoLHRoZWFkLHRyLHNvdXJj
ZSdcbik7XG5cbi8vIEhUTUw1IHRhZ3MgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0
aXBhZ2UvaW5kaWNlcy5odG1sI2VsZW1lbnRzLTNcbi8vIFBocmFzaW5nIENvbnRlbnQgaHR0cHM6
Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZG9tLmh0bWwjcGhyYXNpbmctY29udGVu
dFxudmFyIGlzTm9uUGhyYXNpbmdUYWcgPSBtYWtlTWFwKFxuICAnYWRkcmVzcyxhcnRpY2xlLGFz
aWRlLGJhc2UsYmxvY2txdW90ZSxib2R5LGNhcHRpb24sY29sLGNvbGdyb3VwLGRkLCcgK1xuICAn
ZGV0YWlscyxkaWFsb2csZGl2LGRsLGR0LGZpZWxkc2V0LGZpZ2NhcHRpb24sZmlndXJlLGZvb3Rl
cixmb3JtLCcgK1xuICAnaDEsaDIsaDMsaDQsaDUsaDYsaGVhZCxoZWFkZXIsaGdyb3VwLGhyLGh0
bWwsbGVnZW5kLGxpLG1lbnVpdGVtLG1ldGEsJyArXG4gICdvcHRncm91cCxvcHRpb24scGFyYW0s
cnAscnQsc291cmNlLHN0eWxlLHN1bW1hcnksdGJvZHksdGQsdGZvb3QsdGgsdGhlYWQsJyArXG4g
ICd0aXRsZSx0cix0cmFjaydcbik7XG5cbi8qICAqL1xuXG52YXIgYmFzZU9wdGlvbnMgPSB7XG4g
IGV4cGVjdEhUTUw6IHRydWUsXG4gIG1vZHVsZXM6IG1vZHVsZXMkMSxcbiAgZGlyZWN0aXZlczog
ZGlyZWN0aXZlcyQxLFxuICBpc1ByZVRhZzogaXNQcmVUYWcsXG4gIGlzVW5hcnlUYWc6IGlzVW5h
cnlUYWcsXG4gIG11c3RVc2VQcm9wOiBtdXN0VXNlUHJvcCxcbiAgY2FuQmVMZWZ0T3BlblRhZzog
Y2FuQmVMZWZ0T3BlblRhZyxcbiAgaXNSZXNlcnZlZFRhZzogaXNSZXNlcnZlZFRhZyxcbiAgZ2V0
VGFnTmFtZXNwYWNlOiBnZXRUYWdOYW1lc3BhY2UsXG4gIHN0YXRpY0tleXM6IGdlblN0YXRpY0tl
eXMobW9kdWxlcyQxKVxufTtcblxuLyogICovXG5cbnZhciBkZWNvZGVyO1xuXG52YXIgaGUgPSB7
XG4gIGRlY29kZTogZnVuY3Rpb24gZGVjb2RlIChodG1sKSB7XG4gICAgZGVjb2RlciA9IGRlY29k
ZXIgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZGVjb2Rlci5pbm5lckhU
TUwgPSBodG1sO1xuICAgIHJldHVybiBkZWNvZGVyLnRleHRDb250ZW50XG4gIH1cbn07XG5cbi8q
KlxuICogTm90IHR5cGUtY2hlY2tpbmcgdGhpcyBmaWxlIGJlY2F1c2UgaXQncyBtb3N0bHkgdmVu
ZG9yIGNvZGUuXG4gKi9cblxuLyohXG4gKiBIVE1MIFBhcnNlciBCeSBKb2huIFJlc2lnIChlam9o
bi5vcmcpXG4gKiBNb2RpZmllZCBieSBKdXJpeSBcImthbmdheFwiIFpheXRzZXZcbiAqIE9yaWdp
bmFsIGNvZGUgYnkgRXJpayBBcnZpZHNzb24sIE1vemlsbGEgUHVibGljIExpY2Vuc2VcbiAqIGh0
dHA6Ly9lcmlrLmVhZS5uZXQvc2ltcGxlaHRtbHBhcnNlci9zaW1wbGVodG1scGFyc2VyLmpzXG4g
Ki9cblxuLy8gUmVndWxhciBFeHByZXNzaW9ucyBmb3IgcGFyc2luZyB0YWdzIGFuZCBhdHRyaWJ1
dGVzXG52YXIgc2luZ2xlQXR0cklkZW50aWZpZXIgPSAvKFteXFxzXCInPD4vPV0rKS87XG52YXIg
c2luZ2xlQXR0ckFzc2lnbiA9IC8oPzo9KS87XG52YXIgc2luZ2xlQXR0clZhbHVlcyA9IFtcbiAg
Ly8gYXR0ciB2YWx1ZSBkb3VibGUgcXVvdGVzXG4gIC9cIihbXlwiXSopXCIrLy5zb3VyY2UsXG4g
IC8vIGF0dHIgdmFsdWUsIHNpbmdsZSBxdW90ZXNcbiAgLycoW14nXSopJysvLnNvdXJjZSxcbiAg
Ly8gYXR0ciB2YWx1ZSwgbm8gcXVvdGVzXG4gIC8oW15cXHNcIic9PD5gXSspLy5zb3VyY2Vcbl07
XG52YXIgYXR0cmlidXRlID0gbmV3IFJlZ0V4cChcbiAgJ15cXFxccyonICsgc2luZ2xlQXR0cklk
ZW50aWZpZXIuc291cmNlICtcbiAgJyg/OlxcXFxzKignICsgc2luZ2xlQXR0ckFzc2lnbi5zb3Vy
Y2UgKyAnKScgK1xuICAnXFxcXHMqKD86JyArIHNpbmdsZUF0dHJWYWx1ZXMuam9pbignfCcpICsg
JykpPydcbik7XG5cbi8vIGNvdWxkIHVzZSBodHRwczovL3d3dy53My5vcmcvVFIvMTk5OS9SRUMt
eG1sLW5hbWVzLTE5OTkwMTE0LyNOVC1RTmFtZVxuLy8gYnV0IGZvciBWdWUgdGVtcGxhdGVzIHdl
IGNhbiBlbmZvcmNlIGEgc2ltcGxlIGNoYXJzZXRcbnZhciBuY25hbWUgPSAnW2EtekEtWl9dW1xc
XFx3XFxcXC1cXFxcLl0qJztcbnZhciBxbmFtZUNhcHR1cmUgPSAnKCg/OicgKyBuY25hbWUgKyAn
XFxcXDopPycgKyBuY25hbWUgKyAnKSc7XG52YXIgc3RhcnRUYWdPcGVuID0gbmV3IFJlZ0V4cCgn
XjwnICsgcW5hbWVDYXB0dXJlKTtcbnZhciBzdGFydFRhZ0Nsb3NlID0gL15cXHMqKFxcLz8pPi87
XG52YXIgZW5kVGFnID0gbmV3IFJlZ0V4cCgnXjxcXFxcLycgKyBxbmFtZUNhcHR1cmUgKyAnW14+
XSo+Jyk7XG52YXIgZG9jdHlwZSA9IC9ePCFET0NUWVBFIFtePl0rPi9pO1xudmFyIGNvbW1lbnQg
PSAvXjwhLS0vO1xudmFyIGNvbmRpdGlvbmFsQ29tbWVudCA9IC9ePCFcXFsvO1xuXG52YXIgSVNf
UkVHRVhfQ0FQVFVSSU5HX0JST0tFTiA9IGZhbHNlO1xuJ3gnLnJlcGxhY2UoL3goLik/L2csIGZ1
bmN0aW9uIChtLCBnKSB7XG4gIElTX1JFR0VYX0NBUFRVUklOR19CUk9LRU4gPSBnID09PSAnJztc
bn0pO1xuXG4vLyBTcGVjaWFsIEVsZW1lbnRzIChjYW4gY29udGFpbiBhbnl0aGluZylcbnZhciBp
c1BsYWluVGV4dEVsZW1lbnQgPSBtYWtlTWFwKCdzY3JpcHQsc3R5bGUsdGV4dGFyZWEnLCB0cnVl
KTtcbnZhciByZUNhY2hlID0ge307XG5cbnZhciBkZWNvZGluZ01hcCA9IHtcbiAgJyZsdDsnOiAn
PCcsXG4gICcmZ3Q7JzogJz4nLFxuICAnJnF1b3Q7JzogJ1wiJyxcbiAgJyZhbXA7JzogJyYnLFxu
ICAnJiMxMDsnOiAnXFxuJ1xufTtcbnZhciBlbmNvZGVkQXR0ciA9IC8mKD86bHR8Z3R8cXVvdHxh
bXApOy9nO1xudmFyIGVuY29kZWRBdHRyV2l0aE5ld0xpbmVzID0gLyYoPzpsdHxndHxxdW90fGFt
cHwjMTApOy9nO1xuXG4vLyAjNTk5MlxudmFyIGlzSWdub3JlTmV3bGluZVRhZyA9IG1ha2VNYXAo
J3ByZSx0ZXh0YXJlYScsIHRydWUpO1xudmFyIHNob3VsZElnbm9yZUZpcnN0TmV3bGluZSA9IGZ1
bmN0aW9uICh0YWcsIGh0bWwpIHsgcmV0dXJuIHRhZyAmJiBpc0lnbm9yZU5ld2xpbmVUYWcodGFn
KSAmJiBodG1sWzBdID09PSAnXFxuJzsgfTtcblxuZnVuY3Rpb24gZGVjb2RlQXR0ciAodmFsdWUs
IHNob3VsZERlY29kZU5ld2xpbmVzKSB7XG4gIHZhciByZSA9IHNob3VsZERlY29kZU5ld2xpbmVz
ID8gZW5jb2RlZEF0dHJXaXRoTmV3TGluZXMgOiBlbmNvZGVkQXR0cjtcbiAgcmV0dXJuIHZhbHVl
LnJlcGxhY2UocmUsIGZ1bmN0aW9uIChtYXRjaCkgeyByZXR1cm4gZGVjb2RpbmdNYXBbbWF0Y2hd
OyB9KVxufVxuXG5mdW5jdGlvbiBwYXJzZUhUTUwgKGh0bWwsIG9wdGlvbnMpIHtcbiAgdmFyIHN0
YWNrID0gW107XG4gIHZhciBleHBlY3RIVE1MID0gb3B0aW9ucy5leHBlY3RIVE1MO1xuICB2YXIg
aXNVbmFyeVRhZyQkMSA9IG9wdGlvbnMuaXNVbmFyeVRhZyB8fCBubztcbiAgdmFyIGNhbkJlTGVm
dE9wZW5UYWckJDEgPSBvcHRpb25zLmNhbkJlTGVmdE9wZW5UYWcgfHwgbm87XG4gIHZhciBpbmRl
eCA9IDA7XG4gIHZhciBsYXN0LCBsYXN0VGFnO1xuICB3aGlsZSAoaHRtbCkge1xuICAgIGxhc3Qg
PSBodG1sO1xuICAgIC8vIE1ha2Ugc3VyZSB3ZSdyZSBub3QgaW4gYSBwbGFpbnRleHQgY29udGVu
dCBlbGVtZW50IGxpa2Ugc2NyaXB0L3N0eWxlXG4gICAgaWYgKCFsYXN0VGFnIHx8ICFpc1BsYWlu
VGV4dEVsZW1lbnQobGFzdFRhZykpIHtcbiAgICAgIHZhciB0ZXh0RW5kID0gaHRtbC5pbmRleE9m
KCc8Jyk7XG4gICAgICBpZiAodGV4dEVuZCA9PT0gMCkge1xuICAgICAgICAvLyBDb21tZW50Olxu
ICAgICAgICBpZiAoY29tbWVudC50ZXN0KGh0bWwpKSB7XG4gICAgICAgICAgdmFyIGNvbW1lbnRF
bmQgPSBodG1sLmluZGV4T2YoJy0tPicpO1xuXG4gICAgICAgICAgaWYgKGNvbW1lbnRFbmQgPj0g
MCkge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2hvdWxkS2VlcENvbW1lbnQpIHtcbiAgICAg
ICAgICAgICAgb3B0aW9ucy5jb21tZW50KGh0bWwuc3Vic3RyaW5nKDQsIGNvbW1lbnRFbmQpKTtc
biAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFkdmFuY2UoY29tbWVudEVuZCArIDMpO1xuICAg
ICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBo
dHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbmRpdGlvbmFsX2NvbW1lbnQjRG93bmxldmVs
LXJldmVhbGVkX2NvbmRpdGlvbmFsX2NvbW1lbnRcbiAgICAgICAgaWYgKGNvbmRpdGlvbmFsQ29t
bWVudC50ZXN0KGh0bWwpKSB7XG4gICAgICAgICAgdmFyIGNvbmRpdGlvbmFsRW5kID0gaHRtbC5p
bmRleE9mKCddPicpO1xuXG4gICAgICAgICAgaWYgKGNvbmRpdGlvbmFsRW5kID49IDApIHtcbiAg
ICAgICAgICAgIGFkdmFuY2UoY29uZGl0aW9uYWxFbmQgKyAyKTtcbiAgICAgICAgICAgIGNvbnRp
bnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRG9jdHlwZTpcbiAgICAg
ICAgdmFyIGRvY3R5cGVNYXRjaCA9IGh0bWwubWF0Y2goZG9jdHlwZSk7XG4gICAgICAgIGlmIChk
b2N0eXBlTWF0Y2gpIHtcbiAgICAgICAgICBhZHZhbmNlKGRvY3R5cGVNYXRjaFswXS5sZW5ndGgp
O1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyBFbmQgdGFnOlxu
ICAgICAgICB2YXIgZW5kVGFnTWF0Y2ggPSBodG1sLm1hdGNoKGVuZFRhZyk7XG4gICAgICAgIGlm
IChlbmRUYWdNYXRjaCkge1xuICAgICAgICAgIHZhciBjdXJJbmRleCA9IGluZGV4O1xuICAgICAg
ICAgIGFkdmFuY2UoZW5kVGFnTWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgICBwYXJzZUVuZFRh
ZyhlbmRUYWdNYXRjaFsxXSwgY3VySW5kZXgsIGluZGV4KTtcbiAgICAgICAgICBjb250aW51ZVxu
ICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RhcnQgdGFnOlxuICAgICAgICB2YXIgc3RhcnRUYWdN
YXRjaCA9IHBhcnNlU3RhcnRUYWcoKTtcbiAgICAgICAgaWYgKHN0YXJ0VGFnTWF0Y2gpIHtcbiAg
ICAgICAgICBoYW5kbGVTdGFydFRhZyhzdGFydFRhZ01hdGNoKTtcbiAgICAgICAgICBpZiAoc2hv
dWxkSWdub3JlRmlyc3ROZXdsaW5lKGxhc3RUYWcsIGh0bWwpKSB7XG4gICAgICAgICAgICBhZHZh
bmNlKDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAg
ICB9XG5cbiAgICAgIHZhciB0ZXh0ID0gKHZvaWQgMCksIHJlc3QgPSAodm9pZCAwKSwgbmV4dCA9
ICh2b2lkIDApO1xuICAgICAgaWYgKHRleHRFbmQgPj0gMCkge1xuICAgICAgICByZXN0ID0gaHRt
bC5zbGljZSh0ZXh0RW5kKTtcbiAgICAgICAgd2hpbGUgKFxuICAgICAgICAgICFlbmRUYWcudGVz
dChyZXN0KSAmJlxuICAgICAgICAgICFzdGFydFRhZ09wZW4udGVzdChyZXN0KSAmJlxuICAgICAg
ICAgICFjb21tZW50LnRlc3QocmVzdCkgJiZcbiAgICAgICAgICAhY29uZGl0aW9uYWxDb21tZW50
LnRlc3QocmVzdClcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gPCBpbiBwbGFpbiB0ZXh0LCBi
ZSBmb3JnaXZpbmcgYW5kIHRyZWF0IGl0IGFzIHRleHRcbiAgICAgICAgICBuZXh0ID0gcmVzdC5p
bmRleE9mKCc8JywgMSk7XG4gICAgICAgICAgaWYgKG5leHQgPCAwKSB7IGJyZWFrIH1cbiAgICAg
ICAgICB0ZXh0RW5kICs9IG5leHQ7XG4gICAgICAgICAgcmVzdCA9IGh0bWwuc2xpY2UodGV4dEVu
ZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGV4dCA9IGh0bWwuc3Vic3RyaW5nKDAsIHRleHRFbmQp
O1xuICAgICAgICBhZHZhbmNlKHRleHRFbmQpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGV4dEVu
ZCA8IDApIHtcbiAgICAgICAgdGV4dCA9IGh0bWw7XG4gICAgICAgIGh0bWwgPSAnJztcbiAgICAg
IH1cblxuICAgICAgaWYgKG9wdGlvbnMuY2hhcnMgJiYgdGV4dCkge1xuICAgICAgICBvcHRpb25z
LmNoYXJzKHRleHQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZW5kVGFnTGVu
Z3RoID0gMDtcbiAgICAgIHZhciBzdGFja2VkVGFnID0gbGFzdFRhZy50b0xvd2VyQ2FzZSgpO1xu
ICAgICAgdmFyIHJlU3RhY2tlZFRhZyA9IHJlQ2FjaGVbc3RhY2tlZFRhZ10gfHwgKHJlQ2FjaGVb
c3RhY2tlZFRhZ10gPSBuZXcgUmVnRXhwKCcoW1xcXFxzXFxcXFNdKj8pKDwvJyArIHN0YWNrZWRU
YWcgKyAnW14+XSo+KScsICdpJykpO1xuICAgICAgdmFyIHJlc3QkMSA9IGh0bWwucmVwbGFjZShy
ZVN0YWNrZWRUYWcsIGZ1bmN0aW9uIChhbGwsIHRleHQsIGVuZFRhZykge1xuICAgICAgICBlbmRU
YWdMZW5ndGggPSBlbmRUYWcubGVuZ3RoO1xuICAgICAgICBpZiAoIWlzUGxhaW5UZXh0RWxlbWVu
dChzdGFja2VkVGFnKSAmJiBzdGFja2VkVGFnICE9PSAnbm9zY3JpcHQnKSB7XG4gICAgICAgICAg
dGV4dCA9IHRleHRcbiAgICAgICAgICAgIC5yZXBsYWNlKC88IS0tKFtcXHNcXFNdKj8pLS0+L2cs
ICckMScpXG4gICAgICAgICAgICAucmVwbGFjZSgvPCFcXFtDREFUQVxcWyhbXFxzXFxTXSo/KV1d
Pi9nLCAnJDEnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2hvdWxkSWdub3JlRmlyc3ROZXds
aW5lKHN0YWNrZWRUYWcsIHRleHQpKSB7XG4gICAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMSk7
XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuY2hhcnMpIHtcbiAgICAgICAgICBvcHRp
b25zLmNoYXJzKHRleHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJ1xuICAgICAgfSk7
XG4gICAgICBpbmRleCArPSBodG1sLmxlbmd0aCAtIHJlc3QkMS5sZW5ndGg7XG4gICAgICBodG1s
ID0gcmVzdCQxO1xuICAgICAgcGFyc2VFbmRUYWcoc3RhY2tlZFRhZywgaW5kZXggLSBlbmRUYWdM
ZW5ndGgsIGluZGV4KTtcbiAgICB9XG5cbiAgICBpZiAoaHRtbCA9PT0gbGFzdCkge1xuICAgICAg
b3B0aW9ucy5jaGFycyAmJiBvcHRpb25zLmNoYXJzKGh0bWwpO1xuICAgICAgaWYgKGZhbHNlKSB7
XG4gICAgICAgIG9wdGlvbnMud2FybigoXCJNYWwtZm9ybWF0dGVkIHRhZyBhdCBlbmQgb2YgdGVt
cGxhdGU6IFxcXCJcIiArIGh0bWwgKyBcIlxcXCJcIikpO1xuICAgICAgfVxuICAgICAgYnJlYWtc
biAgICB9XG4gIH1cblxuICAvLyBDbGVhbiB1cCBhbnkgcmVtYWluaW5nIHRhZ3NcbiAgcGFyc2VF
bmRUYWcoKTtcblxuICBmdW5jdGlvbiBhZHZhbmNlIChuKSB7XG4gICAgaW5kZXggKz0gbjtcbiAg
ICBodG1sID0gaHRtbC5zdWJzdHJpbmcobik7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVN0YXJ0
VGFnICgpIHtcbiAgICB2YXIgc3RhcnQgPSBodG1sLm1hdGNoKHN0YXJ0VGFnT3Blbik7XG4gICAg
aWYgKHN0YXJ0KSB7XG4gICAgICB2YXIgbWF0Y2ggPSB7XG4gICAgICAgIHRhZ05hbWU6IHN0YXJ0
WzFdLFxuICAgICAgICBhdHRyczogW10sXG4gICAgICAgIHN0YXJ0OiBpbmRleFxuICAgICAgfTtc
biAgICAgIGFkdmFuY2Uoc3RhcnRbMF0ubGVuZ3RoKTtcbiAgICAgIHZhciBlbmQsIGF0dHI7XG4g
ICAgICB3aGlsZSAoIShlbmQgPSBodG1sLm1hdGNoKHN0YXJ0VGFnQ2xvc2UpKSAmJiAoYXR0ciA9
IGh0bWwubWF0Y2goYXR0cmlidXRlKSkpIHtcbiAgICAgICAgYWR2YW5jZShhdHRyWzBdLmxlbmd0
aCk7XG4gICAgICAgIG1hdGNoLmF0dHJzLnB1c2goYXR0cik7XG4gICAgICB9XG4gICAgICBpZiAo
ZW5kKSB7XG4gICAgICAgIG1hdGNoLnVuYXJ5U2xhc2ggPSBlbmRbMV07XG4gICAgICAgIGFkdmFu
Y2UoZW5kWzBdLmxlbmd0aCk7XG4gICAgICAgIG1hdGNoLmVuZCA9IGluZGV4O1xuICAgICAgICBy
ZXR1cm4gbWF0Y2hcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVTdGFy
dFRhZyAobWF0Y2gpIHtcbiAgICB2YXIgdGFnTmFtZSA9IG1hdGNoLnRhZ05hbWU7XG4gICAgdmFy
IHVuYXJ5U2xhc2ggPSBtYXRjaC51bmFyeVNsYXNoO1xuXG4gICAgaWYgKGV4cGVjdEhUTUwpIHtc
biAgICAgIGlmIChsYXN0VGFnID09PSAncCcgJiYgaXNOb25QaHJhc2luZ1RhZyh0YWdOYW1lKSkg
e1xuICAgICAgICBwYXJzZUVuZFRhZyhsYXN0VGFnKTtcbiAgICAgIH1cbiAgICAgIGlmIChjYW5C
ZUxlZnRPcGVuVGFnJCQxKHRhZ05hbWUpICYmIGxhc3RUYWcgPT09IHRhZ05hbWUpIHtcbiAgICAg
ICAgcGFyc2VFbmRUYWcodGFnTmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHVuYXJ5
ID0gaXNVbmFyeVRhZyQkMSh0YWdOYW1lKSB8fCAhIXVuYXJ5U2xhc2g7XG5cbiAgICB2YXIgbCA9
IG1hdGNoLmF0dHJzLmxlbmd0aDtcbiAgICB2YXIgYXR0cnMgPSBuZXcgQXJyYXkobCk7XG4gICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBhcmdzID0gbWF0Y2guYXR0
cnNbaV07XG4gICAgICAvLyBoYWNraXNoIHdvcmsgYXJvdW5kIEZGIGJ1ZyBodHRwczovL2J1Z3pp
bGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjk3NzhcbiAgICAgIGlmIChJU19SRUdF
WF9DQVBUVVJJTkdfQlJPS0VOICYmIGFyZ3NbMF0uaW5kZXhPZignXCJcIicpID09PSAtMSkge1xu
ICAgICAgICBpZiAoYXJnc1szXSA9PT0gJycpIHsgZGVsZXRlIGFyZ3NbM107IH1cbiAgICAgICAg
aWYgKGFyZ3NbNF0gPT09ICcnKSB7IGRlbGV0ZSBhcmdzWzRdOyB9XG4gICAgICAgIGlmIChhcmdz
WzVdID09PSAnJykgeyBkZWxldGUgYXJnc1s1XTsgfVxuICAgICAgfVxuICAgICAgdmFyIHZhbHVl
ID0gYXJnc1szXSB8fCBhcmdzWzRdIHx8IGFyZ3NbNV0gfHwgJyc7XG4gICAgICBhdHRyc1tpXSA9
IHtcbiAgICAgICAgbmFtZTogYXJnc1sxXSxcbiAgICAgICAgdmFsdWU6IGRlY29kZUF0dHIoXG4g
ICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgb3B0aW9ucy5zaG91bGREZWNvZGVOZXdsaW5lc1xu
ICAgICAgICApXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICghdW5hcnkpIHtcbiAgICAgIHN0
YWNrLnB1c2goeyB0YWc6IHRhZ05hbWUsIGxvd2VyQ2FzZWRUYWc6IHRhZ05hbWUudG9Mb3dlckNh
c2UoKSwgYXR0cnM6IGF0dHJzIH0pO1xuICAgICAgbGFzdFRhZyA9IHRhZ05hbWU7XG4gICAgfVxu
XG4gICAgaWYgKG9wdGlvbnMuc3RhcnQpIHtcbiAgICAgIG9wdGlvbnMuc3RhcnQodGFnTmFtZSwg
YXR0cnMsIHVuYXJ5LCBtYXRjaC5zdGFydCwgbWF0Y2guZW5kKTtcbiAgICB9XG4gIH1cblxuICBm
dW5jdGlvbiBwYXJzZUVuZFRhZyAodGFnTmFtZSwgc3RhcnQsIGVuZCkge1xuICAgIHZhciBwb3Ms
IGxvd2VyQ2FzZWRUYWdOYW1lO1xuICAgIGlmIChzdGFydCA9PSBudWxsKSB7IHN0YXJ0ID0gaW5k
ZXg7IH1cbiAgICBpZiAoZW5kID09IG51bGwpIHsgZW5kID0gaW5kZXg7IH1cblxuICAgIGlmICh0
YWdOYW1lKSB7XG4gICAgICBsb3dlckNhc2VkVGFnTmFtZSA9IHRhZ05hbWUudG9Mb3dlckNhc2Uo
KTtcbiAgICB9XG5cbiAgICAvLyBGaW5kIHRoZSBjbG9zZXN0IG9wZW5lZCB0YWcgb2YgdGhlIHNh
bWUgdHlwZVxuICAgIGlmICh0YWdOYW1lKSB7XG4gICAgICBmb3IgKHBvcyA9IHN0YWNrLmxlbmd0
aCAtIDE7IHBvcyA+PSAwOyBwb3MtLSkge1xuICAgICAgICBpZiAoc3RhY2tbcG9zXS5sb3dlckNh
c2VkVGFnID09PSBsb3dlckNhc2VkVGFnTmFtZSkge1xuICAgICAgICAgIGJyZWFrXG4gICAgICAg
IH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgbm8gdGFnIG5hbWUgaXMgcHJv
dmlkZWQsIGNsZWFuIHNob3BcbiAgICAgIHBvcyA9IDA7XG4gICAgfVxuXG4gICAgaWYgKHBvcyA+
PSAwKSB7XG4gICAgICAvLyBDbG9zZSBhbGwgdGhlIG9wZW4gZWxlbWVudHMsIHVwIHRoZSBzdGFj
a1xuICAgICAgZm9yICh2YXIgaSA9IHN0YWNrLmxlbmd0aCAtIDE7IGkgPj0gcG9zOyBpLS0pIHtc
biAgICAgICAgaWYgKGZhbHNlXG4gICAgICAgICkge1xuICAgICAgICAgIG9wdGlvbnMud2Fybihc
biAgICAgICAgICAgIChcInRhZyA8XCIgKyAoc3RhY2tbaV0udGFnKSArIFwiPiBoYXMgbm8gbWF0
Y2hpbmcgZW5kIHRhZy5cIilcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChv
cHRpb25zLmVuZCkge1xuICAgICAgICAgIG9wdGlvbnMuZW5kKHN0YWNrW2ldLnRhZywgc3RhcnQs
IGVuZCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gUmVtb3ZlIHRoZSBvcGVuIGVs
ZW1lbnRzIGZyb20gdGhlIHN0YWNrXG4gICAgICBzdGFjay5sZW5ndGggPSBwb3M7XG4gICAgICBs
YXN0VGFnID0gcG9zICYmIHN0YWNrW3BvcyAtIDFdLnRhZztcbiAgICB9IGVsc2UgaWYgKGxvd2Vy
Q2FzZWRUYWdOYW1lID09PSAnYnInKSB7XG4gICAgICBpZiAob3B0aW9ucy5zdGFydCkge1xuICAg
ICAgICBvcHRpb25zLnN0YXJ0KHRhZ05hbWUsIFtdLCB0cnVlLCBzdGFydCwgZW5kKTtcbiAgICAg
IH1cbiAgICB9IGVsc2UgaWYgKGxvd2VyQ2FzZWRUYWdOYW1lID09PSAncCcpIHtcbiAgICAgIGlm
IChvcHRpb25zLnN0YXJ0KSB7XG4gICAgICAgIG9wdGlvbnMuc3RhcnQodGFnTmFtZSwgW10sIGZh
bHNlLCBzdGFydCwgZW5kKTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLmVuZCkge1xuICAg
ICAgICBvcHRpb25zLmVuZCh0YWdOYW1lLCBzdGFydCwgZW5kKTtcbiAgICAgIH1cbiAgICB9XG4g
IH1cbn1cblxuLyogICovXG5cbnZhciBvblJFID0gL15AfF52LW9uOi87XG52YXIgZGlyUkUgPSAv
XnYtfF5AfF46LztcbnZhciBmb3JBbGlhc1JFID0gLyguKj8pXFxzKyg/OmlufG9mKVxccysoLiop
LztcbnZhciBmb3JJdGVyYXRvclJFID0gL1xcKChcXHtbXn1dKlxcfXxbXixdKiksKFteLF0qKSg/
OiwoW14sXSopKT9cXCkvO1xuXG52YXIgYXJnUkUgPSAvOiguKikkLztcbnZhciBiaW5kUkUgPSAv
Xjp8XnYtYmluZDovO1xudmFyIG1vZGlmaWVyUkUgPSAvXFwuW14uXSsvZztcblxudmFyIGRlY29k
ZUhUTUxDYWNoZWQgPSBjYWNoZWQoaGUuZGVjb2RlKTtcblxuLy8gY29uZmlndXJhYmxlIHN0YXRl
XG52YXIgd2FybiQyO1xudmFyIGRlbGltaXRlcnM7XG52YXIgdHJhbnNmb3JtcztcbnZhciBwcmVU
cmFuc2Zvcm1zO1xudmFyIHBvc3RUcmFuc2Zvcm1zO1xudmFyIHBsYXRmb3JtSXNQcmVUYWc7XG52
YXIgcGxhdGZvcm1NdXN0VXNlUHJvcDtcbnZhciBwbGF0Zm9ybUdldFRhZ05hbWVzcGFjZTtcblxu
LyoqXG4gKiBDb252ZXJ0IEhUTUwgc3RyaW5nIHRvIEFTVC5cbiAqL1xuZnVuY3Rpb24gcGFyc2Ug
KFxuICB0ZW1wbGF0ZSxcbiAgb3B0aW9uc1xuKSB7XG4gIHdhcm4kMiA9IG9wdGlvbnMud2FybiB8
fCBiYXNlV2FybjtcblxuICBwbGF0Zm9ybUlzUHJlVGFnID0gb3B0aW9ucy5pc1ByZVRhZyB8fCBu
bztcbiAgcGxhdGZvcm1NdXN0VXNlUHJvcCA9IG9wdGlvbnMubXVzdFVzZVByb3AgfHwgbm87XG4g
IHBsYXRmb3JtR2V0VGFnTmFtZXNwYWNlID0gb3B0aW9ucy5nZXRUYWdOYW1lc3BhY2UgfHwgbm87
XG5cbiAgdHJhbnNmb3JtcyA9IHBsdWNrTW9kdWxlRnVuY3Rpb24ob3B0aW9ucy5tb2R1bGVzLCAn
dHJhbnNmb3JtTm9kZScpO1xuICBwcmVUcmFuc2Zvcm1zID0gcGx1Y2tNb2R1bGVGdW5jdGlvbihv
cHRpb25zLm1vZHVsZXMsICdwcmVUcmFuc2Zvcm1Ob2RlJyk7XG4gIHBvc3RUcmFuc2Zvcm1zID0g
cGx1Y2tNb2R1bGVGdW5jdGlvbihvcHRpb25zLm1vZHVsZXMsICdwb3N0VHJhbnNmb3JtTm9kZScp
O1xuXG4gIGRlbGltaXRlcnMgPSBvcHRpb25zLmRlbGltaXRlcnM7XG5cbiAgdmFyIHN0YWNrID0g
W107XG4gIHZhciBwcmVzZXJ2ZVdoaXRlc3BhY2UgPSBvcHRpb25zLnByZXNlcnZlV2hpdGVzcGFj
ZSAhPT0gZmFsc2U7XG4gIHZhciByb290O1xuICB2YXIgY3VycmVudFBhcmVudDtcbiAgdmFyIGlu
VlByZSA9IGZhbHNlO1xuICB2YXIgaW5QcmUgPSBmYWxzZTtcbiAgdmFyIHdhcm5lZCA9IGZhbHNl
O1xuXG4gIGZ1bmN0aW9uIHdhcm5PbmNlIChtc2cpIHtcbiAgICBpZiAoIXdhcm5lZCkge1xuICAg
ICAgd2FybmVkID0gdHJ1ZTtcbiAgICAgIHdhcm4kMihtc2cpO1xuICAgIH1cbiAgfVxuXG4gIGZ1
bmN0aW9uIGVuZFByZSAoZWxlbWVudCkge1xuICAgIC8vIGNoZWNrIHByZSBzdGF0ZVxuICAgIGlm
IChlbGVtZW50LnByZSkge1xuICAgICAgaW5WUHJlID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChw
bGF0Zm9ybUlzUHJlVGFnKGVsZW1lbnQudGFnKSkge1xuICAgICAgaW5QcmUgPSBmYWxzZTtcbiAg
ICB9XG4gIH1cblxuICBwYXJzZUhUTUwodGVtcGxhdGUsIHtcbiAgICB3YXJuOiB3YXJuJDIsXG4g
ICAgZXhwZWN0SFRNTDogb3B0aW9ucy5leHBlY3RIVE1MLFxuICAgIGlzVW5hcnlUYWc6IG9wdGlv
bnMuaXNVbmFyeVRhZyxcbiAgICBjYW5CZUxlZnRPcGVuVGFnOiBvcHRpb25zLmNhbkJlTGVmdE9w
ZW5UYWcsXG4gICAgc2hvdWxkRGVjb2RlTmV3bGluZXM6IG9wdGlvbnMuc2hvdWxkRGVjb2RlTmV3
bGluZXMsXG4gICAgc2hvdWxkS2VlcENvbW1lbnQ6IG9wdGlvbnMuY29tbWVudHMsXG4gICAgc3Rh
cnQ6IGZ1bmN0aW9uIHN0YXJ0ICh0YWcsIGF0dHJzLCB1bmFyeSkge1xuICAgICAgLy8gY2hlY2sg
bmFtZXNwYWNlLlxuICAgICAgLy8gaW5oZXJpdCBwYXJlbnQgbnMgaWYgdGhlcmUgaXMgb25lXG4g
ICAgICB2YXIgbnMgPSAoY3VycmVudFBhcmVudCAmJiBjdXJyZW50UGFyZW50Lm5zKSB8fCBwbGF0
Zm9ybUdldFRhZ05hbWVzcGFjZSh0YWcpO1xuXG4gICAgICAvLyBoYW5kbGUgSUUgc3ZnIGJ1Z1xu
ICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoaXNJRSAmJiBucyA9PT0g
J3N2ZycpIHtcbiAgICAgICAgYXR0cnMgPSBndWFyZElFU1ZHQnVnKGF0dHJzKTtcbiAgICAgIH1c
blxuICAgICAgdmFyIGVsZW1lbnQgPSB7XG4gICAgICAgIHR5cGU6IDEsXG4gICAgICAgIHRhZzog
dGFnLFxuICAgICAgICBhdHRyc0xpc3Q6IGF0dHJzLFxuICAgICAgICBhdHRyc01hcDogbWFrZUF0
dHJzTWFwKGF0dHJzKSxcbiAgICAgICAgcGFyZW50OiBjdXJyZW50UGFyZW50LFxuICAgICAgICBj
aGlsZHJlbjogW11cbiAgICAgIH07XG4gICAgICBpZiAobnMpIHtcbiAgICAgICAgZWxlbWVudC5u
cyA9IG5zO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNGb3JiaWRkZW5UYWcoZWxlbWVudCkgJiYg
IWlzU2VydmVyUmVuZGVyaW5nKCkpIHtcbiAgICAgICAgZWxlbWVudC5mb3JiaWRkZW4gPSB0cnVl
O1xuICAgICAgICBcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4kMihcbiAg
ICAgICAgICAnVGVtcGxhdGVzIHNob3VsZCBvbmx5IGJlIHJlc3BvbnNpYmxlIGZvciBtYXBwaW5n
IHRoZSBzdGF0ZSB0byB0aGUgJyArXG4gICAgICAgICAgJ1VJLiBBdm9pZCBwbGFjaW5nIHRhZ3Mg
d2l0aCBzaWRlLWVmZmVjdHMgaW4geW91ciB0ZW1wbGF0ZXMsIHN1Y2ggYXMgJyArXG4gICAgICAg
ICAgXCI8XCIgKyB0YWcgKyBcIj5cIiArICcsIGFzIHRoZXkgd2lsbCBub3QgYmUgcGFyc2VkLidc
biAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gYXBwbHkgcHJlLXRyYW5zZm9ybXNcbiAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJlVHJhbnNmb3Jtcy5sZW5ndGg7IGkrKykge1xuICAg
ICAgICBwcmVUcmFuc2Zvcm1zW2ldKGVsZW1lbnQsIG9wdGlvbnMpO1xuICAgICAgfVxuXG4gICAg
ICBpZiAoIWluVlByZSkge1xuICAgICAgICBwcm9jZXNzUHJlKGVsZW1lbnQpO1xuICAgICAgICBp
ZiAoZWxlbWVudC5wcmUpIHtcbiAgICAgICAgICBpblZQcmUgPSB0cnVlO1xuICAgICAgICB9XG4g
ICAgICB9XG4gICAgICBpZiAocGxhdGZvcm1Jc1ByZVRhZyhlbGVtZW50LnRhZykpIHtcbiAgICAg
ICAgaW5QcmUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGluVlByZSkge1xuICAgICAgICBw
cm9jZXNzUmF3QXR0cnMoZWxlbWVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9jZXNz
Rm9yKGVsZW1lbnQpO1xuICAgICAgICBwcm9jZXNzSWYoZWxlbWVudCk7XG4gICAgICAgIHByb2Nl
c3NPbmNlKGVsZW1lbnQpO1xuICAgICAgICBwcm9jZXNzS2V5KGVsZW1lbnQpO1xuXG4gICAgICAg
IC8vIGRldGVybWluZSB3aGV0aGVyIHRoaXMgaXMgYSBwbGFpbiBlbGVtZW50IGFmdGVyXG4gICAg
ICAgIC8vIHJlbW92aW5nIHN0cnVjdHVyYWwgYXR0cmlidXRlc1xuICAgICAgICBlbGVtZW50LnBs
YWluID0gIWVsZW1lbnQua2V5ICYmICFhdHRycy5sZW5ndGg7XG5cbiAgICAgICAgcHJvY2Vzc1Jl
ZihlbGVtZW50KTtcbiAgICAgICAgcHJvY2Vzc1Nsb3QoZWxlbWVudCk7XG4gICAgICAgIHByb2Nl
c3NDb21wb25lbnQoZWxlbWVudCk7XG4gICAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IHRy
YW5zZm9ybXMubGVuZ3RoOyBpJDErKykge1xuICAgICAgICAgIHRyYW5zZm9ybXNbaSQxXShlbGVt
ZW50LCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBwcm9jZXNzQXR0cnMoZWxlbWVudCk7
XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGNoZWNrUm9vdENvbnN0cmFpbnRzIChlbCkge1xu
ICAgICAgICBpZiAoZmFsc2UpIHtcbiAgICAgICAgICBpZiAoZWwudGFnID09PSAnc2xvdCcgfHwg
ZWwudGFnID09PSAndGVtcGxhdGUnKSB7XG4gICAgICAgICAgICB3YXJuT25jZShcbiAgICAgICAg
ICAgICAgXCJDYW5ub3QgdXNlIDxcIiArIChlbC50YWcpICsgXCI+IGFzIGNvbXBvbmVudCByb290
IGVsZW1lbnQgYmVjYXVzZSBpdCBtYXkgXCIgK1xuICAgICAgICAgICAgICAnY29udGFpbiBtdWx0
aXBsZSBub2Rlcy4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAo
ZWwuYXR0cnNNYXAuaGFzT3duUHJvcGVydHkoJ3YtZm9yJykpIHtcbiAgICAgICAgICAgIHdhcm5P
bmNlKFxuICAgICAgICAgICAgICAnQ2Fubm90IHVzZSB2LWZvciBvbiBzdGF0ZWZ1bCBjb21wb25l
bnQgcm9vdCBlbGVtZW50IGJlY2F1c2UgJyArXG4gICAgICAgICAgICAgICdpdCByZW5kZXJzIG11
bHRpcGxlIGVsZW1lbnRzLidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9
XG4gICAgICB9XG5cbiAgICAgIC8vIHRyZWUgbWFuYWdlbWVudFxuICAgICAgaWYgKCFyb290KSB7
XG4gICAgICAgIHJvb3QgPSBlbGVtZW50O1xuICAgICAgICBjaGVja1Jvb3RDb25zdHJhaW50cyhy
b290KTtcbiAgICAgIH0gZWxzZSBpZiAoIXN0YWNrLmxlbmd0aCkge1xuICAgICAgICAvLyBhbGxv
dyByb290IGVsZW1lbnRzIHdpdGggdi1pZiwgdi1lbHNlLWlmIGFuZCB2LWVsc2VcbiAgICAgICAg
aWYgKHJvb3QuaWYgJiYgKGVsZW1lbnQuZWxzZWlmIHx8IGVsZW1lbnQuZWxzZSkpIHtcbiAgICAg
ICAgICBjaGVja1Jvb3RDb25zdHJhaW50cyhlbGVtZW50KTtcbiAgICAgICAgICBhZGRJZkNvbmRp
dGlvbihyb290LCB7XG4gICAgICAgICAgICBleHA6IGVsZW1lbnQuZWxzZWlmLFxuICAgICAgICAg
ICAgYmxvY2s6IGVsZW1lbnRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChmYWxz
ZSkge1xuICAgICAgICAgIHdhcm5PbmNlKFxuICAgICAgICAgICAgXCJDb21wb25lbnQgdGVtcGxh
dGUgc2hvdWxkIGNvbnRhaW4gZXhhY3RseSBvbmUgcm9vdCBlbGVtZW50LiBcIiArXG4gICAgICAg
ICAgICBcIklmIHlvdSBhcmUgdXNpbmcgdi1pZiBvbiBtdWx0aXBsZSBlbGVtZW50cywgXCIgK1xu
ICAgICAgICAgICAgXCJ1c2Ugdi1lbHNlLWlmIHRvIGNoYWluIHRoZW0gaW5zdGVhZC5cIlxuICAg
ICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjdXJyZW50UGFyZW50ICYm
ICFlbGVtZW50LmZvcmJpZGRlbikge1xuICAgICAgICBpZiAoZWxlbWVudC5lbHNlaWYgfHwgZWxl
bWVudC5lbHNlKSB7XG4gICAgICAgICAgcHJvY2Vzc0lmQ29uZGl0aW9ucyhlbGVtZW50LCBjdXJy
ZW50UGFyZW50KTtcbiAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LnNsb3RTY29wZSkgeyAvLyBz
Y29wZWQgc2xvdFxuICAgICAgICAgIGN1cnJlbnRQYXJlbnQucGxhaW4gPSBmYWxzZTtcbiAgICAg
ICAgICB2YXIgbmFtZSA9IGVsZW1lbnQuc2xvdFRhcmdldCB8fCAnXCJkZWZhdWx0XCInOyhjdXJy
ZW50UGFyZW50LnNjb3BlZFNsb3RzIHx8IChjdXJyZW50UGFyZW50LnNjb3BlZFNsb3RzID0ge30p
KVtuYW1lXSA9IGVsZW1lbnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3VycmVudFBh
cmVudC5jaGlsZHJlbi5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgIGVsZW1lbnQucGFyZW50ID0g
Y3VycmVudFBhcmVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCF1bmFyeSkge1xu
ICAgICAgICBjdXJyZW50UGFyZW50ID0gZWxlbWVudDtcbiAgICAgICAgc3RhY2sucHVzaChlbGVt
ZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVuZFByZShlbGVtZW50KTtcbiAgICAgIH1c
biAgICAgIC8vIGFwcGx5IHBvc3QtdHJhbnNmb3Jtc1xuICAgICAgZm9yICh2YXIgaSQyID0gMDsg
aSQyIDwgcG9zdFRyYW5zZm9ybXMubGVuZ3RoOyBpJDIrKykge1xuICAgICAgICBwb3N0VHJhbnNm
b3Jtc1tpJDJdKGVsZW1lbnQsIG9wdGlvbnMpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBlbmQ6
IGZ1bmN0aW9uIGVuZCAoKSB7XG4gICAgICAvLyByZW1vdmUgdHJhaWxpbmcgd2hpdGVzcGFjZVxu
ICAgICAgdmFyIGVsZW1lbnQgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcbiAgICAgIHZhciBs
YXN0Tm9kZSA9IGVsZW1lbnQuY2hpbGRyZW5bZWxlbWVudC5jaGlsZHJlbi5sZW5ndGggLSAxXTtc
biAgICAgIGlmIChsYXN0Tm9kZSAmJiBsYXN0Tm9kZS50eXBlID09PSAzICYmIGxhc3ROb2RlLnRl
eHQgPT09ICcgJyAmJiAhaW5QcmUpIHtcbiAgICAgICAgZWxlbWVudC5jaGlsZHJlbi5wb3AoKTtc
biAgICAgIH1cbiAgICAgIC8vIHBvcCBzdGFja1xuICAgICAgc3RhY2subGVuZ3RoIC09IDE7XG4g
ICAgICBjdXJyZW50UGFyZW50ID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG4gICAgICBlbmRQ
cmUoZWxlbWVudCk7XG4gICAgfSxcblxuICAgIGNoYXJzOiBmdW5jdGlvbiBjaGFycyAodGV4dCkg
e1xuICAgICAgaWYgKCFjdXJyZW50UGFyZW50KSB7XG4gICAgICAgIGlmIChmYWxzZSkge1xuICAg
ICAgICAgIGlmICh0ZXh0ID09PSB0ZW1wbGF0ZSkge1xuICAgICAgICAgICAgd2Fybk9uY2UoXG4g
ICAgICAgICAgICAgICdDb21wb25lbnQgdGVtcGxhdGUgcmVxdWlyZXMgYSByb290IGVsZW1lbnQs
IHJhdGhlciB0aGFuIGp1c3QgdGV4dC4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxz
ZSBpZiAoKHRleHQgPSB0ZXh0LnRyaW0oKSkpIHtcbiAgICAgICAgICAgIHdhcm5PbmNlKFxuICAg
ICAgICAgICAgICAoXCJ0ZXh0IFxcXCJcIiArIHRleHQgKyBcIlxcXCIgb3V0c2lkZSByb290IGVs
ZW1lbnQgd2lsbCBiZSBpZ25vcmVkLlwiKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4g
ICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICAvLyBJRSB0ZXh0YXJlYSBw
bGFjZWhvbGRlciBidWdcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYg
KGlzSUUgJiZcbiAgICAgICAgY3VycmVudFBhcmVudC50YWcgPT09ICd0ZXh0YXJlYScgJiZcbiAg
ICAgICAgY3VycmVudFBhcmVudC5hdHRyc01hcC5wbGFjZWhvbGRlciA9PT0gdGV4dFxuICAgICAg
KSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdmFyIGNoaWxkcmVuID0gY3VycmVu
dFBhcmVudC5jaGlsZHJlbjtcbiAgICAgIHRleHQgPSBpblByZSB8fCB0ZXh0LnRyaW0oKVxuICAg
ICAgICA/IGlzVGV4dFRhZyhjdXJyZW50UGFyZW50KSA/IHRleHQgOiBkZWNvZGVIVE1MQ2FjaGVk
KHRleHQpXG4gICAgICAgIC8vIG9ubHkgcHJlc2VydmUgd2hpdGVzcGFjZSBpZiBpdHMgbm90IHJp
Z2h0IGFmdGVyIGEgc3RhcnRpbmcgdGFnXG4gICAgICAgIDogcHJlc2VydmVXaGl0ZXNwYWNlICYm
IGNoaWxkcmVuLmxlbmd0aCA/ICcgJyA6ICcnO1xuICAgICAgaWYgKHRleHQpIHtcbiAgICAgICAg
dmFyIGV4cHJlc3Npb247XG4gICAgICAgIGlmICghaW5WUHJlICYmIHRleHQgIT09ICcgJyAmJiAo
ZXhwcmVzc2lvbiA9IHBhcnNlVGV4dCh0ZXh0LCBkZWxpbWl0ZXJzKSkpIHtcbiAgICAgICAgICBj
aGlsZHJlbi5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6IDIsXG4gICAgICAgICAgICBleHByZXNz
aW9uOiBleHByZXNzaW9uLFxuICAgICAgICAgICAgdGV4dDogdGV4dFxuICAgICAgICAgIH0pO1xu
ICAgICAgICB9IGVsc2UgaWYgKHRleHQgIT09ICcgJyB8fCAhY2hpbGRyZW4ubGVuZ3RoIHx8IGNo
aWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdLnRleHQgIT09ICcgJykge1xuICAgICAgICAgIGNo
aWxkcmVuLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogMyxcbiAgICAgICAgICAgIHRleHQ6IHRl
eHRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgY29tbWVu
dDogZnVuY3Rpb24gY29tbWVudCAodGV4dCkge1xuICAgICAgY3VycmVudFBhcmVudC5jaGlsZHJl
bi5wdXNoKHtcbiAgICAgICAgdHlwZTogMyxcbiAgICAgICAgdGV4dDogdGV4dCxcbiAgICAgICAg
aXNDb21tZW50OiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcm9vdFxu
fVxuXG5mdW5jdGlvbiBwcm9jZXNzUHJlIChlbCkge1xuICBpZiAoZ2V0QW5kUmVtb3ZlQXR0cihl
bCwgJ3YtcHJlJykgIT0gbnVsbCkge1xuICAgIGVsLnByZSA9IHRydWU7XG4gIH1cbn1cblxuZnVu
Y3Rpb24gcHJvY2Vzc1Jhd0F0dHJzIChlbCkge1xuICB2YXIgbCA9IGVsLmF0dHJzTGlzdC5sZW5n
dGg7XG4gIGlmIChsKSB7XG4gICAgdmFyIGF0dHJzID0gZWwuYXR0cnMgPSBuZXcgQXJyYXkobCk7
XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgIGF0dHJzW2ldID0ge1xu
ICAgICAgICBuYW1lOiBlbC5hdHRyc0xpc3RbaV0ubmFtZSxcbiAgICAgICAgdmFsdWU6IEpTT04u
c3RyaW5naWZ5KGVsLmF0dHJzTGlzdFtpXS52YWx1ZSlcbiAgICAgIH07XG4gICAgfVxuICB9IGVs
c2UgaWYgKCFlbC5wcmUpIHtcbiAgICAvLyBub24gcm9vdCBub2RlIGluIHByZSBibG9ja3Mgd2l0
aCBubyBhdHRyaWJ1dGVzXG4gICAgZWwucGxhaW4gPSB0cnVlO1xuICB9XG59XG5cbmZ1bmN0aW9u
IHByb2Nlc3NLZXkgKGVsKSB7XG4gIHZhciBleHAgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ2tleScp
O1xuICBpZiAoZXhwKSB7XG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICB3YXJuJDIoXCI8dGVtcGxh
dGU+IGNhbm5vdCBiZSBrZXllZC4gUGxhY2UgdGhlIGtleSBvbiByZWFsIGVsZW1lbnRzIGluc3Rl
YWQuXCIpO1xuICAgIH1cbiAgICBlbC5rZXkgPSBleHA7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJv
Y2Vzc1JlZiAoZWwpIHtcbiAgdmFyIHJlZiA9IGdldEJpbmRpbmdBdHRyKGVsLCAncmVmJyk7XG4g
IGlmIChyZWYpIHtcbiAgICBlbC5yZWYgPSByZWY7XG4gICAgZWwucmVmSW5Gb3IgPSBjaGVja0lu
Rm9yKGVsKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzRm9yIChlbCkge1xuICB2YXIgZXhw
O1xuICBpZiAoKGV4cCA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICd2LWZvcicpKSkge1xuICAgIHZh
ciBpbk1hdGNoID0gZXhwLm1hdGNoKGZvckFsaWFzUkUpO1xuICAgIGlmICghaW5NYXRjaCkge1xu
ICAgICAgXCJwcm9kdWN0aW9uXCIgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuJDIoXG4gICAgICAg
IChcIkludmFsaWQgdi1mb3IgZXhwcmVzc2lvbjogXCIgKyBleHApXG4gICAgICApO1xuICAgICAg
cmV0dXJuXG4gICAgfVxuICAgIGVsLmZvciA9IGluTWF0Y2hbMl0udHJpbSgpO1xuICAgIHZhciBh
bGlhcyA9IGluTWF0Y2hbMV0udHJpbSgpO1xuICAgIHZhciBpdGVyYXRvck1hdGNoID0gYWxpYXMu
bWF0Y2goZm9ySXRlcmF0b3JSRSk7XG4gICAgaWYgKGl0ZXJhdG9yTWF0Y2gpIHtcbiAgICAgIGVs
LmFsaWFzID0gaXRlcmF0b3JNYXRjaFsxXS50cmltKCk7XG4gICAgICBlbC5pdGVyYXRvcjEgPSBp
dGVyYXRvck1hdGNoWzJdLnRyaW0oKTtcbiAgICAgIGlmIChpdGVyYXRvck1hdGNoWzNdKSB7XG4g
ICAgICAgIGVsLml0ZXJhdG9yMiA9IGl0ZXJhdG9yTWF0Y2hbM10udHJpbSgpO1xuICAgICAgfVxu
ICAgIH0gZWxzZSB7XG4gICAgICBlbC5hbGlhcyA9IGFsaWFzO1xuICAgIH1cbiAgfVxufVxuXG5m
dW5jdGlvbiBwcm9jZXNzSWYgKGVsKSB7XG4gIHZhciBleHAgPSBnZXRBbmRSZW1vdmVBdHRyKGVs
LCAndi1pZicpO1xuICBpZiAoZXhwKSB7XG4gICAgZWwuaWYgPSBleHA7XG4gICAgYWRkSWZDb25k
aXRpb24oZWwsIHtcbiAgICAgIGV4cDogZXhwLFxuICAgICAgYmxvY2s6IGVsXG4gICAgfSk7XG4g
IH0gZWxzZSB7XG4gICAgaWYgKGdldEFuZFJlbW92ZUF0dHIoZWwsICd2LWVsc2UnKSAhPSBudWxs
KSB7XG4gICAgICBlbC5lbHNlID0gdHJ1ZTtcbiAgICB9XG4gICAgdmFyIGVsc2VpZiA9IGdldEFu
ZFJlbW92ZUF0dHIoZWwsICd2LWVsc2UtaWYnKTtcbiAgICBpZiAoZWxzZWlmKSB7XG4gICAgICBl
bC5lbHNlaWYgPSBlbHNlaWY7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NJZkNv
bmRpdGlvbnMgKGVsLCBwYXJlbnQpIHtcbiAgdmFyIHByZXYgPSBmaW5kUHJldkVsZW1lbnQocGFy
ZW50LmNoaWxkcmVuKTtcbiAgaWYgKHByZXYgJiYgcHJldi5pZikge1xuICAgIGFkZElmQ29uZGl0
aW9uKHByZXYsIHtcbiAgICAgIGV4cDogZWwuZWxzZWlmLFxuICAgICAgYmxvY2s6IGVsXG4gICAg
fSk7XG4gIH0gZWxzZSBpZiAoZmFsc2UpIHtcbiAgICB3YXJuJDIoXG4gICAgICBcInYtXCIgKyAo
ZWwuZWxzZWlmID8gKCdlbHNlLWlmPVwiJyArIGVsLmVsc2VpZiArICdcIicpIDogJ2Vsc2UnKSAr
IFwiIFwiICtcbiAgICAgIFwidXNlZCBvbiBlbGVtZW50IDxcIiArIChlbC50YWcpICsgXCI+IHdp
dGhvdXQgY29ycmVzcG9uZGluZyB2LWlmLlwiXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBm
aW5kUHJldkVsZW1lbnQgKGNoaWxkcmVuKSB7XG4gIHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoO1xu
ICB3aGlsZSAoaS0tKSB7XG4gICAgaWYgKGNoaWxkcmVuW2ldLnR5cGUgPT09IDEpIHtcbiAgICAg
IHJldHVybiBjaGlsZHJlbltpXVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZmFsc2UpIHtcbiAg
ICAgICAgd2FybiQyKFxuICAgICAgICAgIFwidGV4dCBcXFwiXCIgKyAoY2hpbGRyZW5baV0udGV4
dC50cmltKCkpICsgXCJcXFwiIGJldHdlZW4gdi1pZiBhbmQgdi1lbHNlKC1pZikgXCIgK1xuICAg
ICAgICAgIFwid2lsbCBiZSBpZ25vcmVkLlwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBj
aGlsZHJlbi5wb3AoKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkSWZDb25kaXRpb24g
KGVsLCBjb25kaXRpb24pIHtcbiAgaWYgKCFlbC5pZkNvbmRpdGlvbnMpIHtcbiAgICBlbC5pZkNv
bmRpdGlvbnMgPSBbXTtcbiAgfVxuICBlbC5pZkNvbmRpdGlvbnMucHVzaChjb25kaXRpb24pO1xu
fVxuXG5mdW5jdGlvbiBwcm9jZXNzT25jZSAoZWwpIHtcbiAgdmFyIG9uY2UkJDEgPSBnZXRBbmRS
ZW1vdmVBdHRyKGVsLCAndi1vbmNlJyk7XG4gIGlmIChvbmNlJCQxICE9IG51bGwpIHtcbiAgICBl
bC5vbmNlID0gdHJ1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzU2xvdCAoZWwpIHtcbiAg
aWYgKGVsLnRhZyA9PT0gJ3Nsb3QnKSB7XG4gICAgZWwuc2xvdE5hbWUgPSBnZXRCaW5kaW5nQXR0
cihlbCwgJ25hbWUnKTtcbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgIHdhcm4kMihcbiAgICAgICAg
XCJga2V5YCBkb2VzIG5vdCB3b3JrIG9uIDxzbG90PiBiZWNhdXNlIHNsb3RzIGFyZSBhYnN0cmFj
dCBvdXRsZXRzIFwiICtcbiAgICAgICAgXCJhbmQgY2FuIHBvc3NpYmx5IGV4cGFuZCBpbnRvIG11
bHRpcGxlIGVsZW1lbnRzLiBcIiArXG4gICAgICAgIFwiVXNlIHRoZSBrZXkgb24gYSB3cmFwcGlu
ZyBlbGVtZW50IGluc3RlYWQuXCJcbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZh
ciBzbG90VGFyZ2V0ID0gZ2V0QmluZGluZ0F0dHIoZWwsICdzbG90Jyk7XG4gICAgaWYgKHNsb3RU
YXJnZXQpIHtcbiAgICAgIGVsLnNsb3RUYXJnZXQgPSBzbG90VGFyZ2V0ID09PSAnXCJcIicgPyAn
XCJkZWZhdWx0XCInIDogc2xvdFRhcmdldDtcbiAgICB9XG4gICAgaWYgKGVsLnRhZyA9PT0gJ3Rl
bXBsYXRlJykge1xuICAgICAgZWwuc2xvdFNjb3BlID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3Nj
b3BlJyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NDb21wb25lbnQgKGVsKSB7
XG4gIHZhciBiaW5kaW5nO1xuICBpZiAoKGJpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ2lz
JykpKSB7XG4gICAgZWwuY29tcG9uZW50ID0gYmluZGluZztcbiAgfVxuICBpZiAoZ2V0QW5kUmVt
b3ZlQXR0cihlbCwgJ2lubGluZS10ZW1wbGF0ZScpICE9IG51bGwpIHtcbiAgICBlbC5pbmxpbmVU
ZW1wbGF0ZSA9IHRydWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0F0dHJzIChlbCkge1xu
ICB2YXIgbGlzdCA9IGVsLmF0dHJzTGlzdDtcbiAgdmFyIGksIGwsIG5hbWUsIHJhd05hbWUsIHZh
bHVlLCBtb2RpZmllcnMsIGlzUHJvcDtcbiAgZm9yIChpID0gMCwgbCA9IGxpc3QubGVuZ3RoOyBp
IDwgbDsgaSsrKSB7XG4gICAgbmFtZSA9IHJhd05hbWUgPSBsaXN0W2ldLm5hbWU7XG4gICAgdmFs
dWUgPSBsaXN0W2ldLnZhbHVlO1xuICAgIGlmIChkaXJSRS50ZXN0KG5hbWUpKSB7XG4gICAgICAv
LyBtYXJrIGVsZW1lbnQgYXMgZHluYW1pY1xuICAgICAgZWwuaGFzQmluZGluZ3MgPSB0cnVlO1xu
ICAgICAgLy8gbW9kaWZpZXJzXG4gICAgICBtb2RpZmllcnMgPSBwYXJzZU1vZGlmaWVycyhuYW1l
KTtcbiAgICAgIGlmIChtb2RpZmllcnMpIHtcbiAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZSht
b2RpZmllclJFLCAnJyk7XG4gICAgICB9XG4gICAgICBpZiAoYmluZFJFLnRlc3QobmFtZSkpIHsg
Ly8gdi1iaW5kXG4gICAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoYmluZFJFLCAnJyk7XG4gICAg
ICAgIHZhbHVlID0gcGFyc2VGaWx0ZXJzKHZhbHVlKTtcbiAgICAgICAgaXNQcm9wID0gZmFsc2U7
XG4gICAgICAgIGlmIChtb2RpZmllcnMpIHtcbiAgICAgICAgICBpZiAobW9kaWZpZXJzLnByb3Ap
IHtcbiAgICAgICAgICAgIGlzUHJvcCA9IHRydWU7XG4gICAgICAgICAgICBuYW1lID0gY2FtZWxp
emUobmFtZSk7XG4gICAgICAgICAgICBpZiAobmFtZSA9PT0gJ2lubmVySHRtbCcpIHsgbmFtZSA9
ICdpbm5lckhUTUwnOyB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChtb2RpZmllcnMuY2Ft
ZWwpIHtcbiAgICAgICAgICAgIG5hbWUgPSBjYW1lbGl6ZShuYW1lKTtcbiAgICAgICAgICB9XG4g
ICAgICAgICAgaWYgKG1vZGlmaWVycy5zeW5jKSB7XG4gICAgICAgICAgICBhZGRIYW5kbGVyKFxu
ICAgICAgICAgICAgICBlbCxcbiAgICAgICAgICAgICAgKFwidXBkYXRlOlwiICsgKGNhbWVsaXpl
KG5hbWUpKSksXG4gICAgICAgICAgICAgIGdlbkFzc2lnbm1lbnRDb2RlKHZhbHVlLCBcIiRldmVu
dFwiKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYg
KGlzUHJvcCB8fCAoXG4gICAgICAgICAgIWVsLmNvbXBvbmVudCAmJiBwbGF0Zm9ybU11c3RVc2VQ
cm9wKGVsLnRhZywgZWwuYXR0cnNNYXAudHlwZSwgbmFtZSlcbiAgICAgICAgKSkge1xuICAgICAg
ICAgIGFkZFByb3AoZWwsIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAg
ICBhZGRBdHRyKGVsLCBuYW1lLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAo
b25SRS50ZXN0KG5hbWUpKSB7IC8vIHYtb25cbiAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZShv
blJFLCAnJyk7XG4gICAgICAgIGFkZEhhbmRsZXIoZWwsIG5hbWUsIHZhbHVlLCBtb2RpZmllcnMs
IGZhbHNlLCB3YXJuJDIpO1xuICAgICAgfSBlbHNlIHsgLy8gbm9ybWFsIGRpcmVjdGl2ZXNcbiAg
ICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZShkaXJSRSwgJycpO1xuICAgICAgICAvLyBwYXJzZSBh
cmdcbiAgICAgICAgdmFyIGFyZ01hdGNoID0gbmFtZS5tYXRjaChhcmdSRSk7XG4gICAgICAgIHZh
ciBhcmcgPSBhcmdNYXRjaCAmJiBhcmdNYXRjaFsxXTtcbiAgICAgICAgaWYgKGFyZykge1xuICAg
ICAgICAgIG5hbWUgPSBuYW1lLnNsaWNlKDAsIC0oYXJnLmxlbmd0aCArIDEpKTtcbiAgICAgICAg
fVxuICAgICAgICBhZGREaXJlY3RpdmUoZWwsIG5hbWUsIHJhd05hbWUsIHZhbHVlLCBhcmcsIG1v
ZGlmaWVycyk7XG4gICAgICAgIGlmIChmYWxzZSkge1xuICAgICAgICAgIGNoZWNrRm9yQWxpYXNN
b2RlbChlbCwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAg
IC8vIGxpdGVyYWwgYXR0cmlidXRlXG4gICAgICBpZiAoZmFsc2UpIHtcbiAgICAgICAgdmFyIGV4
cHJlc3Npb24gPSBwYXJzZVRleHQodmFsdWUsIGRlbGltaXRlcnMpO1xuICAgICAgICBpZiAoZXhw
cmVzc2lvbikge1xuICAgICAgICAgIHdhcm4kMihcbiAgICAgICAgICAgIG5hbWUgKyBcIj1cXFwi
XCIgKyB2YWx1ZSArIFwiXFxcIjogXCIgK1xuICAgICAgICAgICAgJ0ludGVycG9sYXRpb24gaW5z
aWRlIGF0dHJpYnV0ZXMgaGFzIGJlZW4gcmVtb3ZlZC4gJyArXG4gICAgICAgICAgICAnVXNlIHYt
YmluZCBvciB0aGUgY29sb24gc2hvcnRoYW5kIGluc3RlYWQuIEZvciBleGFtcGxlLCAnICtcbiAg
ICAgICAgICAgICdpbnN0ZWFkIG9mIDxkaXYgaWQ9XCJ7eyB2YWwgfX1cIj4sIHVzZSA8ZGl2IDpp
ZD1cInZhbFwiPi4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYWRk
QXR0cihlbCwgbmFtZSwgSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcbiAgICB9XG4gIH1cbn1cblxu
ZnVuY3Rpb24gY2hlY2tJbkZvciAoZWwpIHtcbiAgdmFyIHBhcmVudCA9IGVsO1xuICB3aGlsZSAo
cGFyZW50KSB7XG4gICAgaWYgKHBhcmVudC5mb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0
dXJuIHRydWVcbiAgICB9XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgfVxuICByZXR1
cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gcGFyc2VNb2RpZmllcnMgKG5hbWUpIHtcbiAgdmFyIG1h
dGNoID0gbmFtZS5tYXRjaChtb2RpZmllclJFKTtcbiAgaWYgKG1hdGNoKSB7XG4gICAgdmFyIHJl
dCA9IHt9O1xuICAgIG1hdGNoLmZvckVhY2goZnVuY3Rpb24gKG0pIHsgcmV0W20uc2xpY2UoMSld
ID0gdHJ1ZTsgfSk7XG4gICAgcmV0dXJuIHJldFxuICB9XG59XG5cbmZ1bmN0aW9uIG1ha2VBdHRy
c01hcCAoYXR0cnMpIHtcbiAgdmFyIG1hcCA9IHt9O1xuICBmb3IgKHZhciBpID0gMCwgbCA9IGF0
dHJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGlmIChcbiAgICAgIGZhbHNlXG4gICAgKSB7
XG4gICAgICB3YXJuJDIoJ2R1cGxpY2F0ZSBhdHRyaWJ1dGU6ICcgKyBhdHRyc1tpXS5uYW1lKTtc
biAgICB9XG4gICAgbWFwW2F0dHJzW2ldLm5hbWVdID0gYXR0cnNbaV0udmFsdWU7XG4gIH1cbiAg
cmV0dXJuIG1hcFxufVxuXG4vLyBmb3Igc2NyaXB0IChlLmcuIHR5cGU9XCJ4L3RlbXBsYXRlXCIp
IG9yIHN0eWxlLCBkbyBub3QgZGVjb2RlIGNvbnRlbnRcbmZ1bmN0aW9uIGlzVGV4dFRhZyAoZWwp
IHtcbiAgcmV0dXJuIGVsLnRhZyA9PT0gJ3NjcmlwdCcgfHwgZWwudGFnID09PSAnc3R5bGUnXG59
XG5cbmZ1bmN0aW9uIGlzRm9yYmlkZGVuVGFnIChlbCkge1xuICByZXR1cm4gKFxuICAgIGVsLnRh
ZyA9PT0gJ3N0eWxlJyB8fFxuICAgIChlbC50YWcgPT09ICdzY3JpcHQnICYmIChcbiAgICAgICFl
bC5hdHRyc01hcC50eXBlIHx8XG4gICAgICBlbC5hdHRyc01hcC50eXBlID09PSAndGV4dC9qYXZh
c2NyaXB0J1xuICAgICkpXG4gIClcbn1cblxudmFyIGllTlNCdWcgPSAvXnhtbG5zOk5TXFxkKy87
XG52YXIgaWVOU1ByZWZpeCA9IC9eTlNcXGQrOi87XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0
ICovXG5mdW5jdGlvbiBndWFyZElFU1ZHQnVnIChhdHRycykge1xuICB2YXIgcmVzID0gW107XG4g
IGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgYXR0ciA9
IGF0dHJzW2ldO1xuICAgIGlmICghaWVOU0J1Zy50ZXN0KGF0dHIubmFtZSkpIHtcbiAgICAgIGF0
dHIubmFtZSA9IGF0dHIubmFtZS5yZXBsYWNlKGllTlNQcmVmaXgsICcnKTtcbiAgICAgIHJlcy5w
dXNoKGF0dHIpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGNoZWNr
Rm9yQWxpYXNNb2RlbCAoZWwsIHZhbHVlKSB7XG4gIHZhciBfZWwgPSBlbDtcbiAgd2hpbGUgKF9l
bCkge1xuICAgIGlmIChfZWwuZm9yICYmIF9lbC5hbGlhcyA9PT0gdmFsdWUpIHtcbiAgICAgIHdh
cm4kMihcbiAgICAgICAgXCI8XCIgKyAoZWwudGFnKSArIFwiIHYtbW9kZWw9XFxcIlwiICsgdmFs
dWUgKyBcIlxcXCI+OiBcIiArXG4gICAgICAgIFwiWW91IGFyZSBiaW5kaW5nIHYtbW9kZWwgZGly
ZWN0bHkgdG8gYSB2LWZvciBpdGVyYXRpb24gYWxpYXMuIFwiICtcbiAgICAgICAgXCJUaGlzIHdp
bGwgbm90IGJlIGFibGUgdG8gbW9kaWZ5IHRoZSB2LWZvciBzb3VyY2UgYXJyYXkgYmVjYXVzZSBc
IiArXG4gICAgICAgIFwid3JpdGluZyB0byB0aGUgYWxpYXMgaXMgbGlrZSBtb2RpZnlpbmcgYSBm
dW5jdGlvbiBsb2NhbCB2YXJpYWJsZS4gXCIgK1xuICAgICAgICBcIkNvbnNpZGVyIHVzaW5nIGFu
IGFycmF5IG9mIG9iamVjdHMgYW5kIHVzZSB2LW1vZGVsIG9uIGFuIG9iamVjdCBwcm9wZXJ0eSBp
bnN0ZWFkLlwiXG4gICAgICApO1xuICAgIH1cbiAgICBfZWwgPSBfZWwucGFyZW50O1xuICB9XG59
XG5cbi8qICAqL1xuXG52YXIgaXNTdGF0aWNLZXk7XG52YXIgaXNQbGF0Zm9ybVJlc2VydmVkVGFn
O1xuXG52YXIgZ2VuU3RhdGljS2V5c0NhY2hlZCA9IGNhY2hlZChnZW5TdGF0aWNLZXlzJDEpO1xu
XG4vKipcbiAqIEdvYWwgb2YgdGhlIG9wdGltaXplcjogd2FsayB0aGUgZ2VuZXJhdGVkIHRlbXBs
YXRlIEFTVCB0cmVlXG4gKiBhbmQgZGV0ZWN0IHN1Yi10cmVlcyB0aGF0IGFyZSBwdXJlbHkgc3Rh
dGljLCBpLmUuIHBhcnRzIG9mXG4gKiB0aGUgRE9NIHRoYXQgbmV2ZXIgbmVlZHMgdG8gY2hhbmdl
LlxuICpcbiAqIE9uY2Ugd2UgZGV0ZWN0IHRoZXNlIHN1Yi10cmVlcywgd2UgY2FuOlxuICpcbiAq
IDEuIEhvaXN0IHRoZW0gaW50byBjb25zdGFudHMsIHNvIHRoYXQgd2Ugbm8gbG9uZ2VyIG5lZWQg
dG9cbiAqICAgIGNyZWF0ZSBmcmVzaCBub2RlcyBmb3IgdGhlbSBvbiBlYWNoIHJlLXJlbmRlcjtc
biAqIDIuIENvbXBsZXRlbHkgc2tpcCB0aGVtIGluIHRoZSBwYXRjaGluZyBwcm9jZXNzLlxuICov
XG5mdW5jdGlvbiBvcHRpbWl6ZSAocm9vdCwgb3B0aW9ucykge1xuICBpZiAoIXJvb3QpIHsgcmV0
dXJuIH1cbiAgaXNTdGF0aWNLZXkgPSBnZW5TdGF0aWNLZXlzQ2FjaGVkKG9wdGlvbnMuc3RhdGlj
S2V5cyB8fCAnJyk7XG4gIGlzUGxhdGZvcm1SZXNlcnZlZFRhZyA9IG9wdGlvbnMuaXNSZXNlcnZl
ZFRhZyB8fCBubztcbiAgLy8gZmlyc3QgcGFzczogbWFyayBhbGwgbm9uLXN0YXRpYyBub2Rlcy5c
biAgbWFya1N0YXRpYyQxKHJvb3QpO1xuICAvLyBzZWNvbmQgcGFzczogbWFyayBzdGF0aWMgcm9v
dHMuXG4gIG1hcmtTdGF0aWNSb290cyhyb290LCBmYWxzZSk7XG59XG5cbmZ1bmN0aW9uIGdlblN0
YXRpY0tleXMkMSAoa2V5cykge1xuICByZXR1cm4gbWFrZU1hcChcbiAgICAndHlwZSx0YWcsYXR0
cnNMaXN0LGF0dHJzTWFwLHBsYWluLHBhcmVudCxjaGlsZHJlbixhdHRycycgK1xuICAgIChrZXlz
ID8gJywnICsga2V5cyA6ICcnKVxuICApXG59XG5cbmZ1bmN0aW9uIG1hcmtTdGF0aWMkMSAobm9k
ZSkge1xuICBub2RlLnN0YXRpYyA9IGlzU3RhdGljKG5vZGUpO1xuICBpZiAobm9kZS50eXBlID09
PSAxKSB7XG4gICAgLy8gZG8gbm90IG1ha2UgY29tcG9uZW50IHNsb3QgY29udGVudCBzdGF0aWMu
IHRoaXMgYXZvaWRzXG4gICAgLy8gMS4gY29tcG9uZW50cyBub3QgYWJsZSB0byBtdXRhdGUgc2xv
dCBub2Rlc1xuICAgIC8vIDIuIHN0YXRpYyBzbG90IGNvbnRlbnQgZmFpbHMgZm9yIGhvdC1yZWxv
YWRpbmdcbiAgICBpZiAoXG4gICAgICAhaXNQbGF0Zm9ybVJlc2VydmVkVGFnKG5vZGUudGFnKSAm
JlxuICAgICAgbm9kZS50YWcgIT09ICdzbG90JyAmJlxuICAgICAgbm9kZS5hdHRyc01hcFsnaW5s
aW5lLXRlbXBsYXRlJ10gPT0gbnVsbFxuICAgICkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAg
IGZvciAodmFyIGkgPSAwLCBsID0gbm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtc
biAgICAgIHZhciBjaGlsZCA9IG5vZGUuY2hpbGRyZW5baV07XG4gICAgICBtYXJrU3RhdGljJDEo
Y2hpbGQpO1xuICAgICAgaWYgKCFjaGlsZC5zdGF0aWMpIHtcbiAgICAgICAgbm9kZS5zdGF0aWMg
PSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG5vZGUuaWZDb25kaXRpb25zKSB7XG4g
ICAgICBmb3IgKHZhciBpJDEgPSAxLCBsJDEgPSBub2RlLmlmQ29uZGl0aW9ucy5sZW5ndGg7IGkk
MSA8IGwkMTsgaSQxKyspIHtcbiAgICAgICAgdmFyIGJsb2NrID0gbm9kZS5pZkNvbmRpdGlvbnNb
aSQxXS5ibG9jaztcbiAgICAgICAgbWFya1N0YXRpYyQxKGJsb2NrKTtcbiAgICAgICAgaWYgKCFi
bG9jay5zdGF0aWMpIHtcbiAgICAgICAgICBub2RlLnN0YXRpYyA9IGZhbHNlO1xuICAgICAgICB9
XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtTdGF0aWNSb290cyAobm9k
ZSwgaXNJbkZvcikge1xuICBpZiAobm9kZS50eXBlID09PSAxKSB7XG4gICAgaWYgKG5vZGUuc3Rh
dGljIHx8IG5vZGUub25jZSkge1xuICAgICAgbm9kZS5zdGF0aWNJbkZvciA9IGlzSW5Gb3I7XG4g
ICAgfVxuICAgIC8vIEZvciBhIG5vZGUgdG8gcXVhbGlmeSBhcyBhIHN0YXRpYyByb290LCBpdCBz
aG91bGQgaGF2ZSBjaGlsZHJlbiB0aGF0XG4gICAgLy8gYXJlIG5vdCBqdXN0IHN0YXRpYyB0ZXh0
LiBPdGhlcndpc2UgdGhlIGNvc3Qgb2YgaG9pc3Rpbmcgb3V0IHdpbGxcbiAgICAvLyBvdXR3ZWln
aCB0aGUgYmVuZWZpdHMgYW5kIGl0J3MgYmV0dGVyIG9mZiB0byBqdXN0IGFsd2F5cyByZW5kZXIg
aXQgZnJlc2guXG4gICAgaWYgKG5vZGUuc3RhdGljICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoICYm
ICEoXG4gICAgICBub2RlLmNoaWxkcmVuLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgbm9kZS5jaGls
ZHJlblswXS50eXBlID09PSAzXG4gICAgKSkge1xuICAgICAgbm9kZS5zdGF0aWNSb290ID0gdHJ1
ZTtcbiAgICAgIHJldHVyblxuICAgIH0gZWxzZSB7XG4gICAgICBub2RlLnN0YXRpY1Jvb3QgPSBm
YWxzZTtcbiAgICB9XG4gICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIGZvciAodmFyIGkg
PSAwLCBsID0gbm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgbWFy
a1N0YXRpY1Jvb3RzKG5vZGUuY2hpbGRyZW5baV0sIGlzSW5Gb3IgfHwgISFub2RlLmZvcik7XG4g
ICAgICB9XG4gICAgfVxuICAgIGlmIChub2RlLmlmQ29uZGl0aW9ucykge1xuICAgICAgZm9yICh2
YXIgaSQxID0gMSwgbCQxID0gbm9kZS5pZkNvbmRpdGlvbnMubGVuZ3RoOyBpJDEgPCBsJDE7IGkk
MSsrKSB7XG4gICAgICAgIG1hcmtTdGF0aWNSb290cyhub2RlLmlmQ29uZGl0aW9uc1tpJDFdLmJs
b2NrLCBpc0luRm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNTdGF0
aWMgKG5vZGUpIHtcbiAgaWYgKG5vZGUudHlwZSA9PT0gMikgeyAvLyBleHByZXNzaW9uXG4gICAg
cmV0dXJuIGZhbHNlXG4gIH1cbiAgaWYgKG5vZGUudHlwZSA9PT0gMykgeyAvLyB0ZXh0XG4gICAg
cmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gISEobm9kZS5wcmUgfHwgKFxuICAgICFub2RlLmhh
c0JpbmRpbmdzICYmIC8vIG5vIGR5bmFtaWMgYmluZGluZ3NcbiAgICAhbm9kZS5pZiAmJiAhbm9k
ZS5mb3IgJiYgLy8gbm90IHYtaWYgb3Igdi1mb3Igb3Igdi1lbHNlXG4gICAgIWlzQnVpbHRJblRh
Zyhub2RlLnRhZykgJiYgLy8gbm90IGEgYnVpbHQtaW5cbiAgICBpc1BsYXRmb3JtUmVzZXJ2ZWRU
YWcobm9kZS50YWcpICYmIC8vIG5vdCBhIGNvbXBvbmVudFxuICAgICFpc0RpcmVjdENoaWxkT2ZU
ZW1wbGF0ZUZvcihub2RlKSAmJlxuICAgIE9iamVjdC5rZXlzKG5vZGUpLmV2ZXJ5KGlzU3RhdGlj
S2V5KVxuICApKVxufVxuXG5mdW5jdGlvbiBpc0RpcmVjdENoaWxkT2ZUZW1wbGF0ZUZvciAobm9k
ZSkge1xuICB3aGlsZSAobm9kZS5wYXJlbnQpIHtcbiAgICBub2RlID0gbm9kZS5wYXJlbnQ7XG4g
ICAgaWYgKG5vZGUudGFnICE9PSAndGVtcGxhdGUnKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAg
ICB9XG4gICAgaWYgKG5vZGUuZm9yKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxu
ICByZXR1cm4gZmFsc2Vcbn1cblxuLyogICovXG5cbnZhciBmbkV4cFJFID0gL15cXHMqKFtcXHck
X10rfFxcKFteKV0qP1xcKSlcXHMqPT58XmZ1bmN0aW9uXFxzKlxcKC87XG52YXIgc2ltcGxlUGF0
aFJFID0gL15cXHMqW0EtWmEtel8kXVtcXHckXSooPzpcXC5bQS1aYS16XyRdW1xcdyRdKnxcXFsn
Lio/J118XFxbXCIuKj9cIl18XFxbXFxkK118XFxbW0EtWmEtel8kXVtcXHckXSpdKSpcXHMqJC87
XG5cbi8vIGtleUNvZGUgYWxpYXNlc1xudmFyIGtleUNvZGVzID0ge1xuICBlc2M6IDI3LFxuICB0
YWI6IDksXG4gIGVudGVyOiAxMyxcbiAgc3BhY2U6IDMyLFxuICB1cDogMzgsXG4gIGxlZnQ6IDM3
LFxuICByaWdodDogMzksXG4gIGRvd246IDQwLFxuICAnZGVsZXRlJzogWzgsIDQ2XVxufTtcblxu
Ly8gIzQ4Njg6IG1vZGlmaWVycyB0aGF0IHByZXZlbnQgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgbGlz
dGVuZXJcbi8vIG5lZWQgdG8gZXhwbGljaXRseSByZXR1cm4gbnVsbCBzbyB0aGF0IHdlIGNhbiBk
ZXRlcm1pbmUgd2hldGhlciB0byByZW1vdmVcbi8vIHRoZSBsaXN0ZW5lciBmb3IgLm9uY2VcbnZh
ciBnZW5HdWFyZCA9IGZ1bmN0aW9uIChjb25kaXRpb24pIHsgcmV0dXJuIChcImlmKFwiICsgY29u
ZGl0aW9uICsgXCIpcmV0dXJuIG51bGw7XCIpOyB9O1xuXG52YXIgbW9kaWZpZXJDb2RlID0ge1xu
ICBzdG9wOiAnJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOycsXG4gIHByZXZlbnQ6ICckZXZlbnQu
cHJldmVudERlZmF1bHQoKTsnLFxuICBzZWxmOiBnZW5HdWFyZChcIiRldmVudC50YXJnZXQgIT09
ICRldmVudC5jdXJyZW50VGFyZ2V0XCIpLFxuICBjdHJsOiBnZW5HdWFyZChcIiEkZXZlbnQuY3Ry
bEtleVwiKSxcbiAgc2hpZnQ6IGdlbkd1YXJkKFwiISRldmVudC5zaGlmdEtleVwiKSxcbiAgYWx0
OiBnZW5HdWFyZChcIiEkZXZlbnQuYWx0S2V5XCIpLFxuICBtZXRhOiBnZW5HdWFyZChcIiEkZXZl
bnQubWV0YUtleVwiKSxcbiAgbGVmdDogZ2VuR3VhcmQoXCInYnV0dG9uJyBpbiAkZXZlbnQgJiYg
JGV2ZW50LmJ1dHRvbiAhPT0gMFwiKSxcbiAgbWlkZGxlOiBnZW5HdWFyZChcIididXR0b24nIGlu
ICRldmVudCAmJiAkZXZlbnQuYnV0dG9uICE9PSAxXCIpLFxuICByaWdodDogZ2VuR3VhcmQoXCIn
YnV0dG9uJyBpbiAkZXZlbnQgJiYgJGV2ZW50LmJ1dHRvbiAhPT0gMlwiKVxufTtcblxuZnVuY3Rp
b24gZ2VuSGFuZGxlcnMgKFxuICBldmVudHMsXG4gIGlzTmF0aXZlLFxuICB3YXJuXG4pIHtcbiAg
dmFyIHJlcyA9IGlzTmF0aXZlID8gJ25hdGl2ZU9uOnsnIDogJ29uOnsnO1xuICBmb3IgKHZhciBu
YW1lIGluIGV2ZW50cykge1xuICAgIHZhciBoYW5kbGVyID0gZXZlbnRzW25hbWVdO1xuICAgIC8v
ICM1MzMwOiB3YXJuIGNsaWNrLnJpZ2h0LCBzaW5jZSByaWdodCBjbGlja3MgZG8gbm90IGFjdHVh
bGx5IGZpcmUgY2xpY2sgZXZlbnRzLlxuICAgIGlmIChmYWxzZVxuICAgICkge1xuICAgICAgd2Fy
bihcbiAgICAgICAgXCJVc2UgXFxcImNvbnRleHRtZW51XFxcIiBpbnN0ZWFkIG9mIFxcXCJjbGlj
ay5yaWdodFxcXCIgc2luY2UgcmlnaHQgY2xpY2tzIFwiICtcbiAgICAgICAgXCJkbyBub3QgYWN0
dWFsbHkgZmlyZSBcXFwiY2xpY2tcXFwiIGV2ZW50cy5cIlxuICAgICAgKTtcbiAgICB9XG4gICAg
cmVzICs9IFwiXFxcIlwiICsgbmFtZSArIFwiXFxcIjpcIiArIChnZW5IYW5kbGVyKG5hbWUsIGhh
bmRsZXIpKSArIFwiLFwiO1xuICB9XG4gIHJldHVybiByZXMuc2xpY2UoMCwgLTEpICsgJ30nXG59
XG5cbmZ1bmN0aW9uIGdlbkhhbmRsZXIgKFxuICBuYW1lLFxuICBoYW5kbGVyXG4pIHtcbiAgaWYg
KCFoYW5kbGVyKSB7XG4gICAgcmV0dXJuICdmdW5jdGlvbigpe30nXG4gIH1cblxuICBpZiAoQXJy
YXkuaXNBcnJheShoYW5kbGVyKSkge1xuICAgIHJldHVybiAoXCJbXCIgKyAoaGFuZGxlci5tYXAo
ZnVuY3Rpb24gKGhhbmRsZXIpIHsgcmV0dXJuIGdlbkhhbmRsZXIobmFtZSwgaGFuZGxlcik7IH0p
LmpvaW4oJywnKSkgKyBcIl1cIilcbiAgfVxuXG4gIHZhciBpc01ldGhvZFBhdGggPSBzaW1wbGVQ
YXRoUkUudGVzdChoYW5kbGVyLnZhbHVlKTtcbiAgdmFyIGlzRnVuY3Rpb25FeHByZXNzaW9uID0g
Zm5FeHBSRS50ZXN0KGhhbmRsZXIudmFsdWUpO1xuXG4gIGlmICghaGFuZGxlci5tb2RpZmllcnMp
IHtcbiAgICByZXR1cm4gaXNNZXRob2RQYXRoIHx8IGlzRnVuY3Rpb25FeHByZXNzaW9uXG4gICAg
ICA/IGhhbmRsZXIudmFsdWVcbiAgICAgIDogKFwiZnVuY3Rpb24oJGV2ZW50KXtcIiArIChoYW5k
bGVyLnZhbHVlKSArIFwifVwiKSAvLyBpbmxpbmUgc3RhdGVtZW50XG4gIH0gZWxzZSB7XG4gICAg
dmFyIGNvZGUgPSAnJztcbiAgICB2YXIgZ2VuTW9kaWZpZXJDb2RlID0gJyc7XG4gICAgdmFyIGtl
eXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gaGFuZGxlci5tb2RpZmllcnMpIHtcbiAgICAg
IGlmIChtb2RpZmllckNvZGVba2V5XSkge1xuICAgICAgICBnZW5Nb2RpZmllckNvZGUgKz0gbW9k
aWZpZXJDb2RlW2tleV07XG4gICAgICAgIC8vIGxlZnQvcmlnaHRcbiAgICAgICAgaWYgKGtleUNv
ZGVzW2tleV0pIHtcbiAgICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgICAg
fSBlbHNlIHtcbiAgICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlm
IChrZXlzLmxlbmd0aCkge1xuICAgICAgY29kZSArPSBnZW5LZXlGaWx0ZXIoa2V5cyk7XG4gICAg
fVxuICAgIC8vIE1ha2Ugc3VyZSBtb2RpZmllcnMgbGlrZSBwcmV2ZW50IGFuZCBzdG9wIGdldCBl
eGVjdXRlZCBhZnRlciBrZXkgZmlsdGVyaW5nXG4gICAgaWYgKGdlbk1vZGlmaWVyQ29kZSkge1xu
ICAgICAgY29kZSArPSBnZW5Nb2RpZmllckNvZGU7XG4gICAgfVxuICAgIHZhciBoYW5kbGVyQ29k
ZSA9IGlzTWV0aG9kUGF0aFxuICAgICAgPyBoYW5kbGVyLnZhbHVlICsgJygkZXZlbnQpJ1xuICAg
ICAgOiBpc0Z1bmN0aW9uRXhwcmVzc2lvblxuICAgICAgICA/IChcIihcIiArIChoYW5kbGVyLnZh
bHVlKSArIFwiKSgkZXZlbnQpXCIpXG4gICAgICAgIDogaGFuZGxlci52YWx1ZTtcbiAgICByZXR1
cm4gKFwiZnVuY3Rpb24oJGV2ZW50KXtcIiArIGNvZGUgKyBoYW5kbGVyQ29kZSArIFwifVwiKVxu
ICB9XG59XG5cbmZ1bmN0aW9uIGdlbktleUZpbHRlciAoa2V5cykge1xuICByZXR1cm4gKFwiaWYo
ISgnYnV0dG9uJyBpbiAkZXZlbnQpJiZcIiArIChrZXlzLm1hcChnZW5GaWx0ZXJDb2RlKS5qb2lu
KCcmJicpKSArIFwiKXJldHVybiBudWxsO1wiKVxufVxuXG5mdW5jdGlvbiBnZW5GaWx0ZXJDb2Rl
IChrZXkpIHtcbiAgdmFyIGtleVZhbCA9IHBhcnNlSW50KGtleSwgMTApO1xuICBpZiAoa2V5VmFs
KSB7XG4gICAgcmV0dXJuIChcIiRldmVudC5rZXlDb2RlIT09XCIgKyBrZXlWYWwpXG4gIH1cbiAg
dmFyIGFsaWFzID0ga2V5Q29kZXNba2V5XTtcbiAgcmV0dXJuIChcIl9rKCRldmVudC5rZXlDb2Rl
LFwiICsgKEpTT04uc3RyaW5naWZ5KGtleSkpICsgKGFsaWFzID8gJywnICsgSlNPTi5zdHJpbmdp
ZnkoYWxpYXMpIDogJycpICsgXCIpXCIpXG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBvbiAoZWws
IGRpcikge1xuICBpZiAoZmFsc2UpIHtcbiAgICB3YXJuKFwidi1vbiB3aXRob3V0IGFyZ3VtZW50
IGRvZXMgbm90IHN1cHBvcnQgbW9kaWZpZXJzLlwiKTtcbiAgfVxuICBlbC53cmFwTGlzdGVuZXJz
ID0gZnVuY3Rpb24gKGNvZGUpIHsgcmV0dXJuIChcIl9nKFwiICsgY29kZSArIFwiLFwiICsgKGRp
ci52YWx1ZSkgKyBcIilcIik7IH07XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBiaW5kJDEgKGVs
LCBkaXIpIHtcbiAgZWwud3JhcERhdGEgPSBmdW5jdGlvbiAoY29kZSkge1xuICAgIHJldHVybiAo
XCJfYihcIiArIGNvZGUgKyBcIiwnXCIgKyAoZWwudGFnKSArIFwiJyxcIiArIChkaXIudmFsdWUp
ICsgXCIsXCIgKyAoZGlyLm1vZGlmaWVycyAmJiBkaXIubW9kaWZpZXJzLnByb3AgPyAndHJ1ZScg
OiAnZmFsc2UnKSArIChkaXIubW9kaWZpZXJzICYmIGRpci5tb2RpZmllcnMuc3luYyA/ICcsdHJ1
ZScgOiAnJykgKyBcIilcIilcbiAgfTtcbn1cblxuLyogICovXG5cbnZhciBiYXNlRGlyZWN0aXZl
cyA9IHtcbiAgb246IG9uLFxuICBiaW5kOiBiaW5kJDEsXG4gIGNsb2FrOiBub29wXG59O1xuXG4v
KiAgKi9cblxudmFyIENvZGVnZW5TdGF0ZSA9IGZ1bmN0aW9uIENvZGVnZW5TdGF0ZSAob3B0aW9u
cykge1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB0aGlzLndhcm4gPSBvcHRpb25zLndh
cm4gfHwgYmFzZVdhcm47XG4gIHRoaXMudHJhbnNmb3JtcyA9IHBsdWNrTW9kdWxlRnVuY3Rpb24o
b3B0aW9ucy5tb2R1bGVzLCAndHJhbnNmb3JtQ29kZScpO1xuICB0aGlzLmRhdGFHZW5GbnMgPSBw
bHVja01vZHVsZUZ1bmN0aW9uKG9wdGlvbnMubW9kdWxlcywgJ2dlbkRhdGEnKTtcbiAgdGhpcy5k
aXJlY3RpdmVzID0gZXh0ZW5kKGV4dGVuZCh7fSwgYmFzZURpcmVjdGl2ZXMpLCBvcHRpb25zLmRp
cmVjdGl2ZXMpO1xuICB2YXIgaXNSZXNlcnZlZFRhZyA9IG9wdGlvbnMuaXNSZXNlcnZlZFRhZyB8
fCBubztcbiAgdGhpcy5tYXliZUNvbXBvbmVudCA9IGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gIWlz
UmVzZXJ2ZWRUYWcoZWwudGFnKTsgfTtcbiAgdGhpcy5vbmNlSWQgPSAwO1xuICB0aGlzLnN0YXRp
Y1JlbmRlckZucyA9IFtdO1xufTtcblxuXG5cbmZ1bmN0aW9uIGdlbmVyYXRlIChcbiAgYXN0LFxu
ICBvcHRpb25zXG4pIHtcbiAgdmFyIHN0YXRlID0gbmV3IENvZGVnZW5TdGF0ZShvcHRpb25zKTtc
biAgdmFyIGNvZGUgPSBhc3QgPyBnZW5FbGVtZW50KGFzdCwgc3RhdGUpIDogJ19jKFwiZGl2XCIp
JztcbiAgcmV0dXJuIHtcbiAgICByZW5kZXI6IChcIndpdGgodGhpcyl7cmV0dXJuIFwiICsgY29k
ZSArIFwifVwiKSxcbiAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRlLnN0YXRpY1JlbmRlckZuc1xu
ICB9XG59XG5cbmZ1bmN0aW9uIGdlbkVsZW1lbnQgKGVsLCBzdGF0ZSkge1xuICBpZiAoZWwuc3Rh
dGljUm9vdCAmJiAhZWwuc3RhdGljUHJvY2Vzc2VkKSB7XG4gICAgcmV0dXJuIGdlblN0YXRpYyhl
bCwgc3RhdGUpXG4gIH0gZWxzZSBpZiAoZWwub25jZSAmJiAhZWwub25jZVByb2Nlc3NlZCkge1xu
ICAgIHJldHVybiBnZW5PbmNlKGVsLCBzdGF0ZSlcbiAgfSBlbHNlIGlmIChlbC5mb3IgJiYgIWVs
LmZvclByb2Nlc3NlZCkge1xuICAgIHJldHVybiBnZW5Gb3IoZWwsIHN0YXRlKVxuICB9IGVsc2Ug
aWYgKGVsLmlmICYmICFlbC5pZlByb2Nlc3NlZCkge1xuICAgIHJldHVybiBnZW5JZihlbCwgc3Rh
dGUpXG4gIH0gZWxzZSBpZiAoZWwudGFnID09PSAndGVtcGxhdGUnICYmICFlbC5zbG90VGFyZ2V0
KSB7XG4gICAgcmV0dXJuIGdlbkNoaWxkcmVuKGVsLCBzdGF0ZSkgfHwgJ3ZvaWQgMCdcbiAgfSBl
bHNlIGlmIChlbC50YWcgPT09ICdzbG90Jykge1xuICAgIHJldHVybiBnZW5TbG90KGVsLCBzdGF0
ZSlcbiAgfSBlbHNlIHtcbiAgICAvLyBjb21wb25lbnQgb3IgZWxlbWVudFxuICAgIHZhciBjb2Rl
O1xuICAgIGlmIChlbC5jb21wb25lbnQpIHtcbiAgICAgIGNvZGUgPSBnZW5Db21wb25lbnQoZWwu
Y29tcG9uZW50LCBlbCwgc3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZGF0YSA9IGVs
LnBsYWluID8gdW5kZWZpbmVkIDogZ2VuRGF0YSQyKGVsLCBzdGF0ZSk7XG5cbiAgICAgIHZhciBj
aGlsZHJlbiA9IGVsLmlubGluZVRlbXBsYXRlID8gbnVsbCA6IGdlbkNoaWxkcmVuKGVsLCBzdGF0
ZSwgdHJ1ZSk7XG4gICAgICBjb2RlID0gXCJfYygnXCIgKyAoZWwudGFnKSArIFwiJ1wiICsgKGRh
dGEgPyAoXCIsXCIgKyBkYXRhKSA6ICcnKSArIChjaGlsZHJlbiA/IChcIixcIiArIGNoaWxkcmVu
KSA6ICcnKSArIFwiKVwiO1xuICAgIH1cbiAgICAvLyBtb2R1bGUgdHJhbnNmb3Jtc1xuICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgc3RhdGUudHJhbnNmb3Jtcy5sZW5ndGg7IGkrKykge1xuICAgICAg
Y29kZSA9IHN0YXRlLnRyYW5zZm9ybXNbaV0oZWwsIGNvZGUpO1xuICAgIH1cbiAgICByZXR1cm4g
Y29kZVxuICB9XG59XG5cbi8vIGhvaXN0IHN0YXRpYyBzdWItdHJlZXMgb3V0XG5mdW5jdGlvbiBn
ZW5TdGF0aWMgKGVsLCBzdGF0ZSkge1xuICBlbC5zdGF0aWNQcm9jZXNzZWQgPSB0cnVlO1xuICBz
dGF0ZS5zdGF0aWNSZW5kZXJGbnMucHVzaCgoXCJ3aXRoKHRoaXMpe3JldHVybiBcIiArIChnZW5F
bGVtZW50KGVsLCBzdGF0ZSkpICsgXCJ9XCIpKTtcbiAgcmV0dXJuIChcIl9tKFwiICsgKHN0YXRl
LnN0YXRpY1JlbmRlckZucy5sZW5ndGggLSAxKSArIChlbC5zdGF0aWNJbkZvciA/ICcsdHJ1ZScg
OiAnJykgKyBcIilcIilcbn1cblxuLy8gdi1vbmNlXG5mdW5jdGlvbiBnZW5PbmNlIChlbCwgc3Rh
dGUpIHtcbiAgZWwub25jZVByb2Nlc3NlZCA9IHRydWU7XG4gIGlmIChlbC5pZiAmJiAhZWwuaWZQ
cm9jZXNzZWQpIHtcbiAgICByZXR1cm4gZ2VuSWYoZWwsIHN0YXRlKVxuICB9IGVsc2UgaWYgKGVs
LnN0YXRpY0luRm9yKSB7XG4gICAgdmFyIGtleSA9ICcnO1xuICAgIHZhciBwYXJlbnQgPSBlbC5w
YXJlbnQ7XG4gICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgaWYgKHBhcmVudC5mb3IpIHtcbiAg
ICAgICAga2V5ID0gcGFyZW50LmtleTtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIHBh
cmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gICAgfVxuICAgIGlmICgha2V5KSB7XG4gICAgICBcInBy
b2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nICYmIHN0YXRlLndhcm4oXG4gICAgICAgIFwidi1v
bmNlIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIHYtZm9yIHRoYXQgaXMga2V5ZWQuIFwiXG4gICAg
ICApO1xuICAgICAgcmV0dXJuIGdlbkVsZW1lbnQoZWwsIHN0YXRlKVxuICAgIH1cbiAgICByZXR1
cm4gKFwiX28oXCIgKyAoZ2VuRWxlbWVudChlbCwgc3RhdGUpKSArIFwiLFwiICsgKHN0YXRlLm9u
Y2VJZCsrKSArIChrZXkgPyAoXCIsXCIgKyBrZXkpIDogXCJcIikgKyBcIilcIilcbiAgfSBlbHNl
IHtcbiAgICByZXR1cm4gZ2VuU3RhdGljKGVsLCBzdGF0ZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBn
ZW5JZiAoXG4gIGVsLFxuICBzdGF0ZSxcbiAgYWx0R2VuLFxuICBhbHRFbXB0eVxuKSB7XG4gIGVs
LmlmUHJvY2Vzc2VkID0gdHJ1ZTsgLy8gYXZvaWQgcmVjdXJzaW9uXG4gIHJldHVybiBnZW5JZkNv
bmRpdGlvbnMoZWwuaWZDb25kaXRpb25zLnNsaWNlKCksIHN0YXRlLCBhbHRHZW4sIGFsdEVtcHR5
KVxufVxuXG5mdW5jdGlvbiBnZW5JZkNvbmRpdGlvbnMgKFxuICBjb25kaXRpb25zLFxuICBzdGF0
ZSxcbiAgYWx0R2VuLFxuICBhbHRFbXB0eVxuKSB7XG4gIGlmICghY29uZGl0aW9ucy5sZW5ndGgp
IHtcbiAgICByZXR1cm4gYWx0RW1wdHkgfHwgJ19lKCknXG4gIH1cblxuICB2YXIgY29uZGl0aW9u
ID0gY29uZGl0aW9ucy5zaGlmdCgpO1xuICBpZiAoY29uZGl0aW9uLmV4cCkge1xuICAgIHJldHVy
biAoXCIoXCIgKyAoY29uZGl0aW9uLmV4cCkgKyBcIik/XCIgKyAoZ2VuVGVybmFyeUV4cChjb25k
aXRpb24uYmxvY2spKSArIFwiOlwiICsgKGdlbklmQ29uZGl0aW9ucyhjb25kaXRpb25zLCBzdGF0
ZSwgYWx0R2VuLCBhbHRFbXB0eSkpKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiAoXCJcIiArIChn
ZW5UZXJuYXJ5RXhwKGNvbmRpdGlvbi5ibG9jaykpKVxuICB9XG5cbiAgLy8gdi1pZiB3aXRoIHYt
b25jZSBzaG91bGQgZ2VuZXJhdGUgY29kZSBsaWtlIChhKT9fbSgwKTpfbSgxKVxuICBmdW5jdGlv
biBnZW5UZXJuYXJ5RXhwIChlbCkge1xuICAgIHJldHVybiBhbHRHZW5cbiAgICAgID8gYWx0R2Vu
KGVsLCBzdGF0ZSlcbiAgICAgIDogZWwub25jZVxuICAgICAgICA/IGdlbk9uY2UoZWwsIHN0YXRl
KVxuICAgICAgICA6IGdlbkVsZW1lbnQoZWwsIHN0YXRlKVxuICB9XG59XG5cbmZ1bmN0aW9uIGdl
bkZvciAoXG4gIGVsLFxuICBzdGF0ZSxcbiAgYWx0R2VuLFxuICBhbHRIZWxwZXJcbikge1xuICB2
YXIgZXhwID0gZWwuZm9yO1xuICB2YXIgYWxpYXMgPSBlbC5hbGlhcztcbiAgdmFyIGl0ZXJhdG9y
MSA9IGVsLml0ZXJhdG9yMSA/IChcIixcIiArIChlbC5pdGVyYXRvcjEpKSA6ICcnO1xuICB2YXIg
aXRlcmF0b3IyID0gZWwuaXRlcmF0b3IyID8gKFwiLFwiICsgKGVsLml0ZXJhdG9yMikpIDogJyc7
XG5cbiAgaWYgKGZhbHNlXG4gICkge1xuICAgIHN0YXRlLndhcm4oXG4gICAgICBcIjxcIiArIChl
bC50YWcpICsgXCIgdi1mb3I9XFxcIlwiICsgYWxpYXMgKyBcIiBpbiBcIiArIGV4cCArIFwiXFxc
Ij46IGNvbXBvbmVudCBsaXN0cyByZW5kZXJlZCB3aXRoIFwiICtcbiAgICAgIFwidi1mb3Igc2hv
dWxkIGhhdmUgZXhwbGljaXQga2V5cy4gXCIgK1xuICAgICAgXCJTZWUgaHR0cHM6Ly92dWVqcy5v
cmcvZ3VpZGUvbGlzdC5odG1sI2tleSBmb3IgbW9yZSBpbmZvLlwiLFxuICAgICAgdHJ1ZSAvKiB0
aXAgKi9cbiAgICApO1xuICB9XG5cbiAgZWwuZm9yUHJvY2Vzc2VkID0gdHJ1ZTsgLy8gYXZvaWQg
cmVjdXJzaW9uXG4gIHJldHVybiAoYWx0SGVscGVyIHx8ICdfbCcpICsgXCIoKFwiICsgZXhwICsg
XCIpLFwiICtcbiAgICBcImZ1bmN0aW9uKFwiICsgYWxpYXMgKyBpdGVyYXRvcjEgKyBpdGVyYXRv
cjIgKyBcIil7XCIgK1xuICAgICAgXCJyZXR1cm4gXCIgKyAoKGFsdEdlbiB8fCBnZW5FbGVtZW50
KShlbCwgc3RhdGUpKSArXG4gICAgJ30pJ1xufVxuXG5mdW5jdGlvbiBnZW5EYXRhJDIgKGVsLCBz
dGF0ZSkge1xuICB2YXIgZGF0YSA9ICd7JztcblxuICAvLyBkaXJlY3RpdmVzIGZpcnN0LlxuICAv
LyBkaXJlY3RpdmVzIG1heSBtdXRhdGUgdGhlIGVsJ3Mgb3RoZXIgcHJvcGVydGllcyBiZWZvcmUg
dGhleSBhcmUgZ2VuZXJhdGVkLlxuICB2YXIgZGlycyA9IGdlbkRpcmVjdGl2ZXMoZWwsIHN0YXRl
KTtcbiAgaWYgKGRpcnMpIHsgZGF0YSArPSBkaXJzICsgJywnOyB9XG5cbiAgLy8ga2V5XG4gIGlm
IChlbC5rZXkpIHtcbiAgICBkYXRhICs9IFwia2V5OlwiICsgKGVsLmtleSkgKyBcIixcIjtcbiAg
fVxuICAvLyByZWZcbiAgaWYgKGVsLnJlZikge1xuICAgIGRhdGEgKz0gXCJyZWY6XCIgKyAoZWwu
cmVmKSArIFwiLFwiO1xuICB9XG4gIGlmIChlbC5yZWZJbkZvcikge1xuICAgIGRhdGEgKz0gXCJy
ZWZJbkZvcjp0cnVlLFwiO1xuICB9XG4gIC8vIHByZVxuICBpZiAoZWwucHJlKSB7XG4gICAgZGF0
YSArPSBcInByZTp0cnVlLFwiO1xuICB9XG4gIC8vIHJlY29yZCBvcmlnaW5hbCB0YWcgbmFtZSBm
b3IgY29tcG9uZW50cyB1c2luZyBcImlzXCIgYXR0cmlidXRlXG4gIGlmIChlbC5jb21wb25lbnQp
IHtcbiAgICBkYXRhICs9IFwidGFnOlxcXCJcIiArIChlbC50YWcpICsgXCJcXFwiLFwiO1xuICB9
XG4gIC8vIG1vZHVsZSBkYXRhIGdlbmVyYXRpb24gZnVuY3Rpb25zXG4gIGZvciAodmFyIGkgPSAw
OyBpIDwgc3RhdGUuZGF0YUdlbkZucy5sZW5ndGg7IGkrKykge1xuICAgIGRhdGEgKz0gc3RhdGUu
ZGF0YUdlbkZuc1tpXShlbCk7XG4gIH1cbiAgLy8gYXR0cmlidXRlc1xuICBpZiAoZWwuYXR0cnMp
IHtcbiAgICBkYXRhICs9IFwiYXR0cnM6e1wiICsgKGdlblByb3BzKGVsLmF0dHJzKSkgKyBcIn0s
XCI7XG4gIH1cbiAgLy8gRE9NIHByb3BzXG4gIGlmIChlbC5wcm9wcykge1xuICAgIGRhdGEgKz0g
XCJkb21Qcm9wczp7XCIgKyAoZ2VuUHJvcHMoZWwucHJvcHMpKSArIFwifSxcIjtcbiAgfVxuICAv
LyBldmVudCBoYW5kbGVyc1xuICBpZiAoZWwuZXZlbnRzKSB7XG4gICAgZGF0YSArPSAoZ2VuSGFu
ZGxlcnMoZWwuZXZlbnRzLCBmYWxzZSwgc3RhdGUud2FybikpICsgXCIsXCI7XG4gIH1cbiAgaWYg
KGVsLm5hdGl2ZUV2ZW50cykge1xuICAgIGRhdGEgKz0gKGdlbkhhbmRsZXJzKGVsLm5hdGl2ZUV2
ZW50cywgdHJ1ZSwgc3RhdGUud2FybikpICsgXCIsXCI7XG4gIH1cbiAgLy8gc2xvdCB0YXJnZXRc
biAgaWYgKGVsLnNsb3RUYXJnZXQpIHtcbiAgICBkYXRhICs9IFwic2xvdDpcIiArIChlbC5zbG90
VGFyZ2V0KSArIFwiLFwiO1xuICB9XG4gIC8vIHNjb3BlZCBzbG90c1xuICBpZiAoZWwuc2NvcGVk
U2xvdHMpIHtcbiAgICBkYXRhICs9IChnZW5TY29wZWRTbG90cyhlbC5zY29wZWRTbG90cywgc3Rh
dGUpKSArIFwiLFwiO1xuICB9XG4gIC8vIGNvbXBvbmVudCB2LW1vZGVsXG4gIGlmIChlbC5tb2Rl
bCkge1xuICAgIGRhdGEgKz0gXCJtb2RlbDp7dmFsdWU6XCIgKyAoZWwubW9kZWwudmFsdWUpICsg
XCIsY2FsbGJhY2s6XCIgKyAoZWwubW9kZWwuY2FsbGJhY2spICsgXCIsZXhwcmVzc2lvbjpcIiAr
IChlbC5tb2RlbC5leHByZXNzaW9uKSArIFwifSxcIjtcbiAgfVxuICAvLyBpbmxpbmUtdGVtcGxh
dGVcbiAgaWYgKGVsLmlubGluZVRlbXBsYXRlKSB7XG4gICAgdmFyIGlubGluZVRlbXBsYXRlID0g
Z2VuSW5saW5lVGVtcGxhdGUoZWwsIHN0YXRlKTtcbiAgICBpZiAoaW5saW5lVGVtcGxhdGUpIHtc
biAgICAgIGRhdGEgKz0gaW5saW5lVGVtcGxhdGUgKyBcIixcIjtcbiAgICB9XG4gIH1cbiAgZGF0
YSA9IGRhdGEucmVwbGFjZSgvLCQvLCAnJykgKyAnfSc7XG4gIC8vIHYtYmluZCBkYXRhIHdyYXBc
biAgaWYgKGVsLndyYXBEYXRhKSB7XG4gICAgZGF0YSA9IGVsLndyYXBEYXRhKGRhdGEpO1xuICB9
XG4gIC8vIHYtb24gZGF0YSB3cmFwXG4gIGlmIChlbC53cmFwTGlzdGVuZXJzKSB7XG4gICAgZGF0
YSA9IGVsLndyYXBMaXN0ZW5lcnMoZGF0YSk7XG4gIH1cbiAgcmV0dXJuIGRhdGFcbn1cblxuZnVu
Y3Rpb24gZ2VuRGlyZWN0aXZlcyAoZWwsIHN0YXRlKSB7XG4gIHZhciBkaXJzID0gZWwuZGlyZWN0
aXZlcztcbiAgaWYgKCFkaXJzKSB7IHJldHVybiB9XG4gIHZhciByZXMgPSAnZGlyZWN0aXZlczpb
JztcbiAgdmFyIGhhc1J1bnRpbWUgPSBmYWxzZTtcbiAgdmFyIGksIGwsIGRpciwgbmVlZFJ1bnRp
bWU7XG4gIGZvciAoaSA9IDAsIGwgPSBkaXJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGRp
ciA9IGRpcnNbaV07XG4gICAgbmVlZFJ1bnRpbWUgPSB0cnVlO1xuICAgIHZhciBnZW4gPSBzdGF0
ZS5kaXJlY3RpdmVzW2Rpci5uYW1lXTtcbiAgICBpZiAoZ2VuKSB7XG4gICAgICAvLyBjb21waWxl
LXRpbWUgZGlyZWN0aXZlIHRoYXQgbWFuaXB1bGF0ZXMgQVNULlxuICAgICAgLy8gcmV0dXJucyB0
cnVlIGlmIGl0IGFsc28gbmVlZHMgYSBydW50aW1lIGNvdW50ZXJwYXJ0LlxuICAgICAgbmVlZFJ1
bnRpbWUgPSAhIWdlbihlbCwgZGlyLCBzdGF0ZS53YXJuKTtcbiAgICB9XG4gICAgaWYgKG5lZWRS
dW50aW1lKSB7XG4gICAgICBoYXNSdW50aW1lID0gdHJ1ZTtcbiAgICAgIHJlcyArPSBcIntuYW1l
OlxcXCJcIiArIChkaXIubmFtZSkgKyBcIlxcXCIscmF3TmFtZTpcXFwiXCIgKyAoZGlyLnJhd05h
bWUpICsgXCJcXFwiXCIgKyAoZGlyLnZhbHVlID8gKFwiLHZhbHVlOihcIiArIChkaXIudmFsdWUp
ICsgXCIpLGV4cHJlc3Npb246XCIgKyAoSlNPTi5zdHJpbmdpZnkoZGlyLnZhbHVlKSkpIDogJycp
ICsgKGRpci5hcmcgPyAoXCIsYXJnOlxcXCJcIiArIChkaXIuYXJnKSArIFwiXFxcIlwiKSA6ICcn
KSArIChkaXIubW9kaWZpZXJzID8gKFwiLG1vZGlmaWVyczpcIiArIChKU09OLnN0cmluZ2lmeShk
aXIubW9kaWZpZXJzKSkpIDogJycpICsgXCJ9LFwiO1xuICAgIH1cbiAgfVxuICBpZiAoaGFzUnVu
dGltZSkge1xuICAgIHJldHVybiByZXMuc2xpY2UoMCwgLTEpICsgJ10nXG4gIH1cbn1cblxuZnVu
Y3Rpb24gZ2VuSW5saW5lVGVtcGxhdGUgKGVsLCBzdGF0ZSkge1xuICB2YXIgYXN0ID0gZWwuY2hp
bGRyZW5bMF07XG4gIGlmIChmYWxzZSkge1xuICAgIHN0YXRlLndhcm4oJ0lubGluZS10ZW1wbGF0
ZSBjb21wb25lbnRzIG11c3QgaGF2ZSBleGFjdGx5IG9uZSBjaGlsZCBlbGVtZW50LicpO1xuICB9
XG4gIGlmIChhc3QudHlwZSA9PT0gMSkge1xuICAgIHZhciBpbmxpbmVSZW5kZXJGbnMgPSBnZW5l
cmF0ZShhc3QsIHN0YXRlLm9wdGlvbnMpO1xuICAgIHJldHVybiAoXCJpbmxpbmVUZW1wbGF0ZTp7
cmVuZGVyOmZ1bmN0aW9uKCl7XCIgKyAoaW5saW5lUmVuZGVyRm5zLnJlbmRlcikgKyBcIn0sc3Rh
dGljUmVuZGVyRm5zOltcIiArIChpbmxpbmVSZW5kZXJGbnMuc3RhdGljUmVuZGVyRm5zLm1hcChm
dW5jdGlvbiAoY29kZSkgeyByZXR1cm4gKFwiZnVuY3Rpb24oKXtcIiArIGNvZGUgKyBcIn1cIik7
IH0pLmpvaW4oJywnKSkgKyBcIl19XCIpXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2VuU2NvcGVkU2xv
dHMgKFxuICBzbG90cyxcbiAgc3RhdGVcbikge1xuICByZXR1cm4gKFwic2NvcGVkU2xvdHM6X3Uo
W1wiICsgKE9iamVjdC5rZXlzKHNsb3RzKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0
dXJuIGdlblNjb3BlZFNsb3Qoa2V5LCBzbG90c1trZXldLCBzdGF0ZSlcbiAgICB9KS5qb2luKCcs
JykpICsgXCJdKVwiKVxufVxuXG5mdW5jdGlvbiBnZW5TY29wZWRTbG90IChcbiAga2V5LFxuICBl
bCxcbiAgc3RhdGVcbikge1xuICBpZiAoZWwuZm9yICYmICFlbC5mb3JQcm9jZXNzZWQpIHtcbiAg
ICByZXR1cm4gZ2VuRm9yU2NvcGVkU2xvdChrZXksIGVsLCBzdGF0ZSlcbiAgfVxuICByZXR1cm4g
XCJ7a2V5OlwiICsga2V5ICsgXCIsZm46ZnVuY3Rpb24oXCIgKyAoU3RyaW5nKGVsLmF0dHJzTWFw
LnNjb3BlKSkgKyBcIil7XCIgK1xuICAgIFwicmV0dXJuIFwiICsgKGVsLnRhZyA9PT0gJ3RlbXBs
YXRlJ1xuICAgICAgPyBnZW5DaGlsZHJlbihlbCwgc3RhdGUpIHx8ICd2b2lkIDAnXG4gICAgICA6
IGdlbkVsZW1lbnQoZWwsIHN0YXRlKSkgKyBcIn19XCJcbn1cblxuZnVuY3Rpb24gZ2VuRm9yU2Nv
cGVkU2xvdCAoXG4gIGtleSxcbiAgZWwsXG4gIHN0YXRlXG4pIHtcbiAgdmFyIGV4cCA9IGVsLmZv
cjtcbiAgdmFyIGFsaWFzID0gZWwuYWxpYXM7XG4gIHZhciBpdGVyYXRvcjEgPSBlbC5pdGVyYXRv
cjEgPyAoXCIsXCIgKyAoZWwuaXRlcmF0b3IxKSkgOiAnJztcbiAgdmFyIGl0ZXJhdG9yMiA9IGVs
Lml0ZXJhdG9yMiA/IChcIixcIiArIChlbC5pdGVyYXRvcjIpKSA6ICcnO1xuICBlbC5mb3JQcm9j
ZXNzZWQgPSB0cnVlOyAvLyBhdm9pZCByZWN1cnNpb25cbiAgcmV0dXJuIFwiX2woKFwiICsgZXhw
ICsgXCIpLFwiICtcbiAgICBcImZ1bmN0aW9uKFwiICsgYWxpYXMgKyBpdGVyYXRvcjEgKyBpdGVy
YXRvcjIgKyBcIil7XCIgK1xuICAgICAgXCJyZXR1cm4gXCIgKyAoZ2VuU2NvcGVkU2xvdChrZXks
IGVsLCBzdGF0ZSkpICtcbiAgICAnfSknXG59XG5cbmZ1bmN0aW9uIGdlbkNoaWxkcmVuIChcbiAg
ZWwsXG4gIHN0YXRlLFxuICBjaGVja1NraXAsXG4gIGFsdEdlbkVsZW1lbnQsXG4gIGFsdEdlbk5v
ZGVcbikge1xuICB2YXIgY2hpbGRyZW4gPSBlbC5jaGlsZHJlbjtcbiAgaWYgKGNoaWxkcmVuLmxl
bmd0aCkge1xuICAgIHZhciBlbCQxID0gY2hpbGRyZW5bMF07XG4gICAgLy8gb3B0aW1pemUgc2lu
Z2xlIHYtZm9yXG4gICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgZWwkMS5m
b3IgJiZcbiAgICAgIGVsJDEudGFnICE9PSAndGVtcGxhdGUnICYmXG4gICAgICBlbCQxLnRhZyAh
PT0gJ3Nsb3QnXG4gICAgKSB7XG4gICAgICByZXR1cm4gKGFsdEdlbkVsZW1lbnQgfHwgZ2VuRWxl
bWVudCkoZWwkMSwgc3RhdGUpXG4gICAgfVxuICAgIHZhciBub3JtYWxpemF0aW9uVHlwZSA9IGNo
ZWNrU2tpcFxuICAgICAgPyBnZXROb3JtYWxpemF0aW9uVHlwZShjaGlsZHJlbiwgc3RhdGUubWF5
YmVDb21wb25lbnQpXG4gICAgICA6IDA7XG4gICAgdmFyIGdlbiA9IGFsdEdlbk5vZGUgfHwgZ2Vu
Tm9kZTtcbiAgICByZXR1cm4gKFwiW1wiICsgKGNoaWxkcmVuLm1hcChmdW5jdGlvbiAoYykgeyBy
ZXR1cm4gZ2VuKGMsIHN0YXRlKTsgfSkuam9pbignLCcpKSArIFwiXVwiICsgKG5vcm1hbGl6YXRp
b25UeXBlID8gKFwiLFwiICsgbm9ybWFsaXphdGlvblR5cGUpIDogJycpKVxuICB9XG59XG5cbi8v
IGRldGVybWluZSB0aGUgbm9ybWFsaXphdGlvbiBuZWVkZWQgZm9yIHRoZSBjaGlsZHJlbiBhcnJh
eS5cbi8vIDA6IG5vIG5vcm1hbGl6YXRpb24gbmVlZGVkXG4vLyAxOiBzaW1wbGUgbm9ybWFsaXph
dGlvbiBuZWVkZWQgKHBvc3NpYmxlIDEtbGV2ZWwgZGVlcCBuZXN0ZWQgYXJyYXkpXG4vLyAyOiBm
dWxsIG5vcm1hbGl6YXRpb24gbmVlZGVkXG5mdW5jdGlvbiBnZXROb3JtYWxpemF0aW9uVHlwZSAo
XG4gIGNoaWxkcmVuLFxuICBtYXliZUNvbXBvbmVudFxuKSB7XG4gIHZhciByZXMgPSAwO1xuICBm
b3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGVsID0g
Y2hpbGRyZW5baV07XG4gICAgaWYgKGVsLnR5cGUgIT09IDEpIHtcbiAgICAgIGNvbnRpbnVlXG4g
ICAgfVxuICAgIGlmIChuZWVkc05vcm1hbGl6YXRpb24oZWwpIHx8XG4gICAgICAgIChlbC5pZkNv
bmRpdGlvbnMgJiYgZWwuaWZDb25kaXRpb25zLnNvbWUoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIG5l
ZWRzTm9ybWFsaXphdGlvbihjLmJsb2NrKTsgfSkpKSB7XG4gICAgICByZXMgPSAyO1xuICAgICAg
YnJlYWtcbiAgICB9XG4gICAgaWYgKG1heWJlQ29tcG9uZW50KGVsKSB8fFxuICAgICAgICAoZWwu
aWZDb25kaXRpb25zICYmIGVsLmlmQ29uZGl0aW9ucy5zb21lKGZ1bmN0aW9uIChjKSB7IHJldHVy
biBtYXliZUNvbXBvbmVudChjLmJsb2NrKTsgfSkpKSB7XG4gICAgICByZXMgPSAxO1xuICAgIH1c
biAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIG5lZWRzTm9ybWFsaXphdGlvbiAoZWwp
IHtcbiAgcmV0dXJuIGVsLmZvciAhPT0gdW5kZWZpbmVkIHx8IGVsLnRhZyA9PT0gJ3RlbXBsYXRl
JyB8fCBlbC50YWcgPT09ICdzbG90J1xufVxuXG5mdW5jdGlvbiBnZW5Ob2RlIChub2RlLCBzdGF0
ZSkge1xuICBpZiAobm9kZS50eXBlID09PSAxKSB7XG4gICAgcmV0dXJuIGdlbkVsZW1lbnQobm9k
ZSwgc3RhdGUpXG4gIH0gaWYgKG5vZGUudHlwZSA9PT0gMyAmJiBub2RlLmlzQ29tbWVudCkge1xu
ICAgIHJldHVybiBnZW5Db21tZW50KG5vZGUpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGdlblRl
eHQobm9kZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBnZW5UZXh0ICh0ZXh0KSB7XG4gIHJldHVybiAo
XCJfdihcIiArICh0ZXh0LnR5cGUgPT09IDJcbiAgICA/IHRleHQuZXhwcmVzc2lvbiAvLyBubyBu
ZWVkIGZvciAoKSBiZWNhdXNlIGFscmVhZHkgd3JhcHBlZCBpbiBfcygpXG4gICAgOiB0cmFuc2Zv
cm1TcGVjaWFsTmV3bGluZXMoSlNPTi5zdHJpbmdpZnkodGV4dC50ZXh0KSkpICsgXCIpXCIpXG59
XG5cbmZ1bmN0aW9uIGdlbkNvbW1lbnQgKGNvbW1lbnQpIHtcbiAgcmV0dXJuIChcIl9lKFwiICsg
KEpTT04uc3RyaW5naWZ5KGNvbW1lbnQudGV4dCkpICsgXCIpXCIpXG59XG5cbmZ1bmN0aW9uIGdl
blNsb3QgKGVsLCBzdGF0ZSkge1xuICB2YXIgc2xvdE5hbWUgPSBlbC5zbG90TmFtZSB8fCAnXCJk
ZWZhdWx0XCInO1xuICB2YXIgY2hpbGRyZW4gPSBnZW5DaGlsZHJlbihlbCwgc3RhdGUpO1xuICB2
YXIgcmVzID0gXCJfdChcIiArIHNsb3ROYW1lICsgKGNoaWxkcmVuID8gKFwiLFwiICsgY2hpbGRy
ZW4pIDogJycpO1xuICB2YXIgYXR0cnMgPSBlbC5hdHRycyAmJiAoXCJ7XCIgKyAoZWwuYXR0cnMu
bWFwKGZ1bmN0aW9uIChhKSB7IHJldHVybiAoKGNhbWVsaXplKGEubmFtZSkpICsgXCI6XCIgKyAo
YS52YWx1ZSkpOyB9KS5qb2luKCcsJykpICsgXCJ9XCIpO1xuICB2YXIgYmluZCQkMSA9IGVsLmF0
dHJzTWFwWyd2LWJpbmQnXTtcbiAgaWYgKChhdHRycyB8fCBiaW5kJCQxKSAmJiAhY2hpbGRyZW4p
IHtcbiAgICByZXMgKz0gXCIsbnVsbFwiO1xuICB9XG4gIGlmIChhdHRycykge1xuICAgIHJlcyAr
PSBcIixcIiArIGF0dHJzO1xuICB9XG4gIGlmIChiaW5kJCQxKSB7XG4gICAgcmVzICs9IChhdHRy
cyA/ICcnIDogJyxudWxsJykgKyBcIixcIiArIGJpbmQkJDE7XG4gIH1cbiAgcmV0dXJuIHJlcyAr
ICcpJ1xufVxuXG4vLyBjb21wb25lbnROYW1lIGlzIGVsLmNvbXBvbmVudCwgdGFrZSBpdCBhcyBh
cmd1bWVudCB0byBzaHVuIGZsb3cncyBwZXNzaW1pc3RpYyByZWZpbmVtZW50XG5mdW5jdGlvbiBn
ZW5Db21wb25lbnQgKFxuICBjb21wb25lbnROYW1lLFxuICBlbCxcbiAgc3RhdGVcbikge1xuICB2
YXIgY2hpbGRyZW4gPSBlbC5pbmxpbmVUZW1wbGF0ZSA/IG51bGwgOiBnZW5DaGlsZHJlbihlbCwg
c3RhdGUsIHRydWUpO1xuICByZXR1cm4gKFwiX2MoXCIgKyBjb21wb25lbnROYW1lICsgXCIsXCIg
KyAoZ2VuRGF0YSQyKGVsLCBzdGF0ZSkpICsgKGNoaWxkcmVuID8gKFwiLFwiICsgY2hpbGRyZW4p
IDogJycpICsgXCIpXCIpXG59XG5cbmZ1bmN0aW9uIGdlblByb3BzIChwcm9wcykge1xuICB2YXIg
cmVzID0gJyc7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAg
ICB2YXIgcHJvcCA9IHByb3BzW2ldO1xuICAgIHJlcyArPSBcIlxcXCJcIiArIChwcm9wLm5hbWUp
ICsgXCJcXFwiOlwiICsgKHRyYW5zZm9ybVNwZWNpYWxOZXdsaW5lcyhwcm9wLnZhbHVlKSkgKyBc
IixcIjtcbiAgfVxuICByZXR1cm4gcmVzLnNsaWNlKDAsIC0xKVxufVxuXG4vLyAjMzg5NSwgIzQy
NjhcbmZ1bmN0aW9uIHRyYW5zZm9ybVNwZWNpYWxOZXdsaW5lcyAodGV4dCkge1xuICByZXR1cm4g
dGV4dFxuICAgIC5yZXBsYWNlKC9cXHUyMDI4L2csICdcXFxcdTIwMjgnKVxuICAgIC5yZXBsYWNl
KC9cXHUyMDI5L2csICdcXFxcdTIwMjknKVxufVxuXG4vKiAgKi9cblxuLy8gdGhlc2Uga2V5d29y
ZHMgc2hvdWxkIG5vdCBhcHBlYXIgaW5zaWRlIGV4cHJlc3Npb25zLCBidXQgb3BlcmF0b3JzIGxp
a2Vcbi8vIHR5cGVvZiwgaW5zdGFuY2VvZiBhbmQgaW4gYXJlIGFsbG93ZWRcbnZhciBwcm9oaWJp
dGVkS2V5d29yZFJFID0gbmV3IFJlZ0V4cCgnXFxcXGInICsgKFxuICAnZG8saWYsZm9yLGxldCxu
ZXcsdHJ5LHZhcixjYXNlLGVsc2Usd2l0aCxhd2FpdCxicmVhayxjYXRjaCxjbGFzcyxjb25zdCwn
ICtcbiAgJ3N1cGVyLHRocm93LHdoaWxlLHlpZWxkLGRlbGV0ZSxleHBvcnQsaW1wb3J0LHJldHVy
bixzd2l0Y2gsZGVmYXVsdCwnICtcbiAgJ2V4dGVuZHMsZmluYWxseSxjb250aW51ZSxkZWJ1Z2dl
cixmdW5jdGlvbixhcmd1bWVudHMnXG4pLnNwbGl0KCcsJykuam9pbignXFxcXGJ8XFxcXGInKSAr
ICdcXFxcYicpO1xuXG4vLyB0aGVzZSB1bmFyeSBvcGVyYXRvcnMgc2hvdWxkIG5vdCBiZSB1c2Vk
IGFzIHByb3BlcnR5L21ldGhvZCBuYW1lc1xudmFyIHVuYXJ5T3BlcmF0b3JzUkUgPSBuZXcgUmVn
RXhwKCdcXFxcYicgKyAoXG4gICdkZWxldGUsdHlwZW9mLHZvaWQnXG4pLnNwbGl0KCcsJykuam9p
bignXFxcXHMqXFxcXChbXlxcXFwpXSpcXFxcKXxcXFxcYicpICsgJ1xcXFxzKlxcXFwoW15cXFxc
KV0qXFxcXCknKTtcblxuLy8gY2hlY2sgdmFsaWQgaWRlbnRpZmllciBmb3Igdi1mb3JcbnZhciBp
ZGVudFJFID0gL1tBLVphLXpfJF1bXFx3JF0qLztcblxuLy8gc3RyaXAgc3RyaW5ncyBpbiBleHBy
ZXNzaW9uc1xudmFyIHN0cmlwU3RyaW5nUkUgPSAvJyg/OlteJ1xcXFxdfFxcXFwuKSonfFwiKD86
W15cIlxcXFxdfFxcXFwuKSpcInxgKD86W15gXFxcXF18XFxcXC4pKlxcJFxce3xcXH0oPzpbXmBc
XFxcXXxcXFxcLikqYHxgKD86W15gXFxcXF18XFxcXC4pKmAvZztcblxuLy8gZGV0ZWN0IHByb2Js
ZW1hdGljIGV4cHJlc3Npb25zIGluIGEgdGVtcGxhdGVcbmZ1bmN0aW9uIGRldGVjdEVycm9ycyAo
YXN0KSB7XG4gIHZhciBlcnJvcnMgPSBbXTtcbiAgaWYgKGFzdCkge1xuICAgIGNoZWNrTm9kZShh
c3QsIGVycm9ycyk7XG4gIH1cbiAgcmV0dXJuIGVycm9yc1xufVxuXG5mdW5jdGlvbiBjaGVja05v
ZGUgKG5vZGUsIGVycm9ycykge1xuICBpZiAobm9kZS50eXBlID09PSAxKSB7XG4gICAgZm9yICh2
YXIgbmFtZSBpbiBub2RlLmF0dHJzTWFwKSB7XG4gICAgICBpZiAoZGlyUkUudGVzdChuYW1lKSkg
e1xuICAgICAgICB2YXIgdmFsdWUgPSBub2RlLmF0dHJzTWFwW25hbWVdO1xuICAgICAgICBpZiAo
dmFsdWUpIHtcbiAgICAgICAgICBpZiAobmFtZSA9PT0gJ3YtZm9yJykge1xuICAgICAgICAgICAg
Y2hlY2tGb3Iobm9kZSwgKFwidi1mb3I9XFxcIlwiICsgdmFsdWUgKyBcIlxcXCJcIiksIGVycm9y
cyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChvblJFLnRlc3QobmFtZSkpIHtcbiAgICAgICAgICAg
IGNoZWNrRXZlbnQodmFsdWUsIChuYW1lICsgXCI9XFxcIlwiICsgdmFsdWUgKyBcIlxcXCJcIiks
IGVycm9ycyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNoZWNrRXhwcmVzc2lv
bih2YWx1ZSwgKG5hbWUgKyBcIj1cXFwiXCIgKyB2YWx1ZSArIFwiXFxcIlwiKSwgZXJyb3JzKTtc
biAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG5vZGUuY2hp
bGRyZW4pIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5jaGlsZHJlbi5sZW5ndGg7
IGkrKykge1xuICAgICAgICBjaGVja05vZGUobm9kZS5jaGlsZHJlbltpXSwgZXJyb3JzKTtcbiAg
ICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAobm9kZS50eXBlID09PSAyKSB7XG4gICAgY2hlY2tF
eHByZXNzaW9uKG5vZGUuZXhwcmVzc2lvbiwgbm9kZS50ZXh0LCBlcnJvcnMpO1xuICB9XG59XG5c
bmZ1bmN0aW9uIGNoZWNrRXZlbnQgKGV4cCwgdGV4dCwgZXJyb3JzKSB7XG4gIHZhciBzdGlwcGVk
ID0gZXhwLnJlcGxhY2Uoc3RyaXBTdHJpbmdSRSwgJycpO1xuICB2YXIga2V5d29yZE1hdGNoID0g
c3RpcHBlZC5tYXRjaCh1bmFyeU9wZXJhdG9yc1JFKTtcbiAgaWYgKGtleXdvcmRNYXRjaCAmJiBz
dGlwcGVkLmNoYXJBdChrZXl3b3JkTWF0Y2guaW5kZXggLSAxKSAhPT0gJyQnKSB7XG4gICAgZXJy
b3JzLnB1c2goXG4gICAgICBcImF2b2lkIHVzaW5nIEphdmFTY3JpcHQgdW5hcnkgb3BlcmF0b3Ig
YXMgcHJvcGVydHkgbmFtZTogXCIgK1xuICAgICAgXCJcXFwiXCIgKyAoa2V5d29yZE1hdGNoWzBd
KSArIFwiXFxcIiBpbiBleHByZXNzaW9uIFwiICsgKHRleHQudHJpbSgpKVxuICAgICk7XG4gIH1c
biAgY2hlY2tFeHByZXNzaW9uKGV4cCwgdGV4dCwgZXJyb3JzKTtcbn1cblxuZnVuY3Rpb24gY2hl
Y2tGb3IgKG5vZGUsIHRleHQsIGVycm9ycykge1xuICBjaGVja0V4cHJlc3Npb24obm9kZS5mb3Ig
fHwgJycsIHRleHQsIGVycm9ycyk7XG4gIGNoZWNrSWRlbnRpZmllcihub2RlLmFsaWFzLCAndi1m
b3IgYWxpYXMnLCB0ZXh0LCBlcnJvcnMpO1xuICBjaGVja0lkZW50aWZpZXIobm9kZS5pdGVyYXRv
cjEsICd2LWZvciBpdGVyYXRvcicsIHRleHQsIGVycm9ycyk7XG4gIGNoZWNrSWRlbnRpZmllcihu
b2RlLml0ZXJhdG9yMiwgJ3YtZm9yIGl0ZXJhdG9yJywgdGV4dCwgZXJyb3JzKTtcbn1cblxuZnVu
Y3Rpb24gY2hlY2tJZGVudGlmaWVyIChpZGVudCwgdHlwZSwgdGV4dCwgZXJyb3JzKSB7XG4gIGlm
ICh0eXBlb2YgaWRlbnQgPT09ICdzdHJpbmcnICYmICFpZGVudFJFLnRlc3QoaWRlbnQpKSB7XG4g
ICAgZXJyb3JzLnB1c2goKFwiaW52YWxpZCBcIiArIHR5cGUgKyBcIiBcXFwiXCIgKyBpZGVudCAr
IFwiXFxcIiBpbiBleHByZXNzaW9uOiBcIiArICh0ZXh0LnRyaW0oKSkpKTtcbiAgfVxufVxuXG5m
dW5jdGlvbiBjaGVja0V4cHJlc3Npb24gKGV4cCwgdGV4dCwgZXJyb3JzKSB7XG4gIHRyeSB7XG4g
ICAgbmV3IEZ1bmN0aW9uKChcInJldHVybiBcIiArIGV4cCkpO1xuICB9IGNhdGNoIChlKSB7XG4g
ICAgdmFyIGtleXdvcmRNYXRjaCA9IGV4cC5yZXBsYWNlKHN0cmlwU3RyaW5nUkUsICcnKS5tYXRj
aChwcm9oaWJpdGVkS2V5d29yZFJFKTtcbiAgICBpZiAoa2V5d29yZE1hdGNoKSB7XG4gICAgICBl
cnJvcnMucHVzaChcbiAgICAgICAgXCJhdm9pZCB1c2luZyBKYXZhU2NyaXB0IGtleXdvcmQgYXMg
cHJvcGVydHkgbmFtZTogXCIgK1xuICAgICAgICBcIlxcXCJcIiArIChrZXl3b3JkTWF0Y2hbMF0p
ICsgXCJcXFwiIGluIGV4cHJlc3Npb24gXCIgKyAodGV4dC50cmltKCkpXG4gICAgICApO1xuICAg
IH0gZWxzZSB7XG4gICAgICBlcnJvcnMucHVzaCgoXCJpbnZhbGlkIGV4cHJlc3Npb246IFwiICsg
KHRleHQudHJpbSgpKSkpO1xuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gY3Jl
YXRlRnVuY3Rpb24gKGNvZGUsIGVycm9ycykge1xuICB0cnkge1xuICAgIHJldHVybiBuZXcgRnVu
Y3Rpb24oY29kZSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZXJyb3JzLnB1c2goeyBlcnI6IGVy
ciwgY29kZTogY29kZSB9KTtcbiAgICByZXR1cm4gbm9vcFxuICB9XG59XG5cbmZ1bmN0aW9uIGNy
ZWF0ZUNvbXBpbGVUb0Z1bmN0aW9uRm4gKGNvbXBpbGUpIHtcbiAgdmFyIGNhY2hlID0gT2JqZWN0
LmNyZWF0ZShudWxsKTtcblxuICByZXR1cm4gZnVuY3Rpb24gY29tcGlsZVRvRnVuY3Rpb25zIChc
biAgICB0ZW1wbGF0ZSxcbiAgICBvcHRpb25zLFxuICAgIHZtXG4gICkge1xuICAgIG9wdGlvbnMg
PSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYg
KGZhbHNlKSB7XG4gICAgICAvLyBkZXRlY3QgcG9zc2libGUgQ1NQIHJlc3RyaWN0aW9uXG4gICAg
ICB0cnkge1xuICAgICAgICBuZXcgRnVuY3Rpb24oJ3JldHVybiAxJyk7XG4gICAgICB9IGNhdGNo
IChlKSB7XG4gICAgICAgIGlmIChlLnRvU3RyaW5nKCkubWF0Y2goL3Vuc2FmZS1ldmFsfENTUC8p
KSB7XG4gICAgICAgICAgd2FybihcbiAgICAgICAgICAgICdJdCBzZWVtcyB5b3UgYXJlIHVzaW5n
IHRoZSBzdGFuZGFsb25lIGJ1aWxkIG9mIFZ1ZS5qcyBpbiBhbiAnICtcbiAgICAgICAgICAgICdl
bnZpcm9ubWVudCB3aXRoIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IHRoYXQgcHJvaGliaXRzIHVu
c2FmZS1ldmFsLiAnICtcbiAgICAgICAgICAgICdUaGUgdGVtcGxhdGUgY29tcGlsZXIgY2Fubm90
IHdvcmsgaW4gdGhpcyBlbnZpcm9ubWVudC4gQ29uc2lkZXIgJyArXG4gICAgICAgICAgICAncmVs
YXhpbmcgdGhlIHBvbGljeSB0byBhbGxvdyB1bnNhZmUtZXZhbCBvciBwcmUtY29tcGlsaW5nIHlv
dXIgJyArXG4gICAgICAgICAgICAndGVtcGxhdGVzIGludG8gcmVuZGVyIGZ1bmN0aW9ucy4nXG4g
ICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNoZWNrIGNh
Y2hlXG4gICAgdmFyIGtleSA9IG9wdGlvbnMuZGVsaW1pdGVyc1xuICAgICAgPyBTdHJpbmcob3B0
aW9ucy5kZWxpbWl0ZXJzKSArIHRlbXBsYXRlXG4gICAgICA6IHRlbXBsYXRlO1xuICAgIGlmIChj
YWNoZVtrZXldKSB7XG4gICAgICByZXR1cm4gY2FjaGVba2V5XVxuICAgIH1cblxuICAgIC8vIGNv
bXBpbGVcbiAgICB2YXIgY29tcGlsZWQgPSBjb21waWxlKHRlbXBsYXRlLCBvcHRpb25zKTtcblxu
ICAgIC8vIGNoZWNrIGNvbXBpbGF0aW9uIGVycm9ycy90aXBzXG4gICAgaWYgKGZhbHNlKSB7XG4g
ICAgICBpZiAoY29tcGlsZWQuZXJyb3JzICYmIGNvbXBpbGVkLmVycm9ycy5sZW5ndGgpIHtcbiAg
ICAgICAgd2FybihcbiAgICAgICAgICBcIkVycm9yIGNvbXBpbGluZyB0ZW1wbGF0ZTpcXG5cXG5c
IiArIHRlbXBsYXRlICsgXCJcXG5cXG5cIiArXG4gICAgICAgICAgY29tcGlsZWQuZXJyb3JzLm1h
cChmdW5jdGlvbiAoZSkgeyByZXR1cm4gKFwiLSBcIiArIGUpOyB9KS5qb2luKCdcXG4nKSArICdc
XG4nLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoY29tcGls
ZWQudGlwcyAmJiBjb21waWxlZC50aXBzLmxlbmd0aCkge1xuICAgICAgICBjb21waWxlZC50aXBz
LmZvckVhY2goZnVuY3Rpb24gKG1zZykgeyByZXR1cm4gdGlwKG1zZywgdm0pOyB9KTtcbiAgICAg
IH1cbiAgICB9XG5cbiAgICAvLyB0dXJuIGNvZGUgaW50byBmdW5jdGlvbnNcbiAgICB2YXIgcmVz
ID0ge307XG4gICAgdmFyIGZuR2VuRXJyb3JzID0gW107XG4gICAgcmVzLnJlbmRlciA9IGNyZWF0
ZUZ1bmN0aW9uKGNvbXBpbGVkLnJlbmRlciwgZm5HZW5FcnJvcnMpO1xuICAgIHJlcy5zdGF0aWNS
ZW5kZXJGbnMgPSBjb21waWxlZC5zdGF0aWNSZW5kZXJGbnMubWFwKGZ1bmN0aW9uIChjb2RlKSB7
XG4gICAgICByZXR1cm4gY3JlYXRlRnVuY3Rpb24oY29kZSwgZm5HZW5FcnJvcnMpXG4gICAgfSk7
XG5cbiAgICAvLyBjaGVjayBmdW5jdGlvbiBnZW5lcmF0aW9uIGVycm9ycy5cbiAgICAvLyB0aGlz
IHNob3VsZCBvbmx5IGhhcHBlbiBpZiB0aGVyZSBpcyBhIGJ1ZyBpbiB0aGUgY29tcGlsZXIgaXRz
ZWxmLlxuICAgIC8vIG1vc3RseSBmb3IgY29kZWdlbiBkZXZlbG9wbWVudCB1c2VcbiAgICAvKiBp
c3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgIGlmICgoIWNvbXBp
bGVkLmVycm9ycyB8fCAhY29tcGlsZWQuZXJyb3JzLmxlbmd0aCkgJiYgZm5HZW5FcnJvcnMubGVu
Z3RoKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgXCJGYWlsZWQgdG8gZ2VuZXJhdGUgcmVu
ZGVyIGZ1bmN0aW9uOlxcblxcblwiICtcbiAgICAgICAgICBmbkdlbkVycm9ycy5tYXAoZnVuY3Rp
b24gKHJlZikge1xuICAgICAgICAgICAgdmFyIGVyciA9IHJlZi5lcnI7XG4gICAgICAgICAgICB2
YXIgY29kZSA9IHJlZi5jb2RlO1xuXG4gICAgICAgICAgICByZXR1cm4gKChlcnIudG9TdHJpbmco
KSkgKyBcIiBpblxcblxcblwiICsgY29kZSArIFwiXFxuXCIpO1xuICAgICAgICB9KS5qb2luKCdc
XG4nKSxcbiAgICAgICAgICB2bVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJl
dHVybiAoY2FjaGVba2V5XSA9IHJlcylcbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gY3Jl
YXRlQ29tcGlsZXJDcmVhdG9yIChiYXNlQ29tcGlsZSkge1xuICByZXR1cm4gZnVuY3Rpb24gY3Jl
YXRlQ29tcGlsZXIgKGJhc2VPcHRpb25zKSB7XG4gICAgZnVuY3Rpb24gY29tcGlsZSAoXG4gICAg
ICB0ZW1wbGF0ZSxcbiAgICAgIG9wdGlvbnNcbiAgICApIHtcbiAgICAgIHZhciBmaW5hbE9wdGlv
bnMgPSBPYmplY3QuY3JlYXRlKGJhc2VPcHRpb25zKTtcbiAgICAgIHZhciBlcnJvcnMgPSBbXTtc
biAgICAgIHZhciB0aXBzID0gW107XG4gICAgICBmaW5hbE9wdGlvbnMud2FybiA9IGZ1bmN0aW9u
IChtc2csIHRpcCkge1xuICAgICAgICAodGlwID8gdGlwcyA6IGVycm9ycykucHVzaChtc2cpO1xu
ICAgICAgfTtcblxuICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgLy8gbWVyZ2UgY3VzdG9t
IG1vZHVsZXNcbiAgICAgICAgaWYgKG9wdGlvbnMubW9kdWxlcykge1xuICAgICAgICAgIGZpbmFs
T3B0aW9ucy5tb2R1bGVzID1cbiAgICAgICAgICAgIChiYXNlT3B0aW9ucy5tb2R1bGVzIHx8IFtd
KS5jb25jYXQob3B0aW9ucy5tb2R1bGVzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBtZXJnZSBj
dXN0b20gZGlyZWN0aXZlc1xuICAgICAgICBpZiAob3B0aW9ucy5kaXJlY3RpdmVzKSB7XG4gICAg
ICAgICAgZmluYWxPcHRpb25zLmRpcmVjdGl2ZXMgPSBleHRlbmQoXG4gICAgICAgICAgICBPYmpl
Y3QuY3JlYXRlKGJhc2VPcHRpb25zLmRpcmVjdGl2ZXMpLFxuICAgICAgICAgICAgb3B0aW9ucy5k
aXJlY3RpdmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb3B5IG90aGVy
IG9wdGlvbnNcbiAgICAgICAgZm9yICh2YXIga2V5IGluIG9wdGlvbnMpIHtcbiAgICAgICAgICBp
ZiAoa2V5ICE9PSAnbW9kdWxlcycgJiYga2V5ICE9PSAnZGlyZWN0aXZlcycpIHtcbiAgICAgICAg
ICAgIGZpbmFsT3B0aW9uc1trZXldID0gb3B0aW9uc1trZXldO1xuICAgICAgICAgIH1cbiAgICAg
ICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgY29tcGlsZWQgPSBiYXNlQ29tcGlsZSh0ZW1wbGF0
ZSwgZmluYWxPcHRpb25zKTtcbiAgICAgIGlmIChmYWxzZSkge1xuICAgICAgICBlcnJvcnMucHVz
aC5hcHBseShlcnJvcnMsIGRldGVjdEVycm9ycyhjb21waWxlZC5hc3QpKTtcbiAgICAgIH1cbiAg
ICAgIGNvbXBpbGVkLmVycm9ycyA9IGVycm9ycztcbiAgICAgIGNvbXBpbGVkLnRpcHMgPSB0aXBz
O1xuICAgICAgcmV0dXJuIGNvbXBpbGVkXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNv
bXBpbGU6IGNvbXBpbGUsXG4gICAgICBjb21waWxlVG9GdW5jdGlvbnM6IGNyZWF0ZUNvbXBpbGVU
b0Z1bmN0aW9uRm4oY29tcGlsZSlcbiAgICB9XG4gIH1cbn1cblxuLyogICovXG5cbi8vIGBjcmVh
dGVDb21waWxlckNyZWF0b3JgIGFsbG93cyBjcmVhdGluZyBjb21waWxlcnMgdGhhdCB1c2UgYWx0
ZXJuYXRpdmVcbi8vIHBhcnNlci9vcHRpbWl6ZXIvY29kZWdlbiwgZS5nIHRoZSBTU1Igb3B0aW1p
emluZyBjb21waWxlci5cbi8vIEhlcmUgd2UganVzdCBleHBvcnQgYSBkZWZhdWx0IGNvbXBpbGVy
IHVzaW5nIHRoZSBkZWZhdWx0IHBhcnRzLlxudmFyIGNyZWF0ZUNvbXBpbGVyID0gY3JlYXRlQ29t
cGlsZXJDcmVhdG9yKGZ1bmN0aW9uIGJhc2VDb21waWxlIChcbiAgdGVtcGxhdGUsXG4gIG9wdGlv
bnNcbikge1xuICB2YXIgYXN0ID0gcGFyc2UodGVtcGxhdGUudHJpbSgpLCBvcHRpb25zKTtcbiAg
b3B0aW1pemUoYXN0LCBvcHRpb25zKTtcbiAgdmFyIGNvZGUgPSBnZW5lcmF0ZShhc3QsIG9wdGlv
bnMpO1xuICByZXR1cm4ge1xuICAgIGFzdDogYXN0LFxuICAgIHJlbmRlcjogY29kZS5yZW5kZXIs
XG4gICAgc3RhdGljUmVuZGVyRm5zOiBjb2RlLnN0YXRpY1JlbmRlckZuc1xuICB9XG59KTtcblxu
LyogICovXG5cbnZhciByZWYkMSA9IGNyZWF0ZUNvbXBpbGVyKGJhc2VPcHRpb25zKTtcbnZhciBj
b21waWxlVG9GdW5jdGlvbnMgPSByZWYkMS5jb21waWxlVG9GdW5jdGlvbnM7XG5cbi8qICAqL1xu
XG52YXIgaWRUb1RlbXBsYXRlID0gY2FjaGVkKGZ1bmN0aW9uIChpZCkge1xuICB2YXIgZWwgPSBx
dWVyeShpZCk7XG4gIHJldHVybiBlbCAmJiBlbC5pbm5lckhUTUxcbn0pO1xuXG52YXIgbW91bnQg
PSBWdWUkMy5wcm90b3R5cGUuJG1vdW50O1xuVnVlJDMucHJvdG90eXBlLiRtb3VudCA9IGZ1bmN0
aW9uIChcbiAgZWwsXG4gIGh5ZHJhdGluZ1xuKSB7XG4gIGVsID0gZWwgJiYgcXVlcnkoZWwpO1xu
XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoZWwgPT09IGRvY3VtZW50LmJvZHkg
fHwgZWwgPT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgIFwicHJvZHVjdGlvblwi
ICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgIFwiRG8gbm90IG1vdW50IFZ1ZSB0byA8
aHRtbD4gb3IgPGJvZHk+IC0gbW91bnQgdG8gbm9ybWFsIGVsZW1lbnRzIGluc3RlYWQuXCJcbiAg
ICApO1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICB2YXIgb3B0aW9ucyA9IHRoaXMuJG9wdGlv
bnM7XG4gIC8vIHJlc29sdmUgdGVtcGxhdGUvZWwgYW5kIGNvbnZlcnQgdG8gcmVuZGVyIGZ1bmN0
aW9uXG4gIGlmICghb3B0aW9ucy5yZW5kZXIpIHtcbiAgICB2YXIgdGVtcGxhdGUgPSBvcHRpb25z
LnRlbXBsYXRlO1xuICAgIGlmICh0ZW1wbGF0ZSkge1xuICAgICAgaWYgKHR5cGVvZiB0ZW1wbGF0
ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHRlbXBsYXRlLmNoYXJBdCgwKSA9PT0gJyMn
KSB7XG4gICAgICAgICAgdGVtcGxhdGUgPSBpZFRvVGVtcGxhdGUodGVtcGxhdGUpO1xuICAgICAg
ICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgIGlmIChmYWxzZSkge1xuICAg
ICAgICAgICAgd2FybihcbiAgICAgICAgICAgICAgKFwiVGVtcGxhdGUgZWxlbWVudCBub3QgZm91
bmQgb3IgaXMgZW1wdHk6IFwiICsgKG9wdGlvbnMudGVtcGxhdGUpKSxcbiAgICAgICAgICAgICAg
dGhpc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxz
ZSBpZiAodGVtcGxhdGUubm9kZVR5cGUpIHtcbiAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZS5p
bm5lckhUTUw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZmFsc2UpIHtcbiAgICAgICAg
ICB3YXJuKCdpbnZhbGlkIHRlbXBsYXRlIG9wdGlvbjonICsgdGVtcGxhdGUsIHRoaXMpO1xuICAg
ICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbCkg
e1xuICAgICAgdGVtcGxhdGUgPSBnZXRPdXRlckhUTUwoZWwpO1xuICAgIH1cbiAgICBpZiAodGVt
cGxhdGUpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKGZhbHNl
KSB7XG4gICAgICAgIG1hcmsoJ2NvbXBpbGUnKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlZiA9
IGNvbXBpbGVUb0Z1bmN0aW9ucyh0ZW1wbGF0ZSwge1xuICAgICAgICBzaG91bGREZWNvZGVOZXds
aW5lczogc2hvdWxkRGVjb2RlTmV3bGluZXMsXG4gICAgICAgIGRlbGltaXRlcnM6IG9wdGlvbnMu
ZGVsaW1pdGVycyxcbiAgICAgICAgY29tbWVudHM6IG9wdGlvbnMuY29tbWVudHNcbiAgICAgIH0s
IHRoaXMpO1xuICAgICAgdmFyIHJlbmRlciA9IHJlZi5yZW5kZXI7XG4gICAgICB2YXIgc3RhdGlj
UmVuZGVyRm5zID0gcmVmLnN0YXRpY1JlbmRlckZucztcbiAgICAgIG9wdGlvbnMucmVuZGVyID0g
cmVuZGVyO1xuICAgICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBzdGF0aWNSZW5kZXJGbnM7
XG5cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKGZhbHNlKSB7XG4g
ICAgICAgIG1hcmsoJ2NvbXBpbGUgZW5kJyk7XG4gICAgICAgIG1lYXN1cmUoKCh0aGlzLl9uYW1l
KSArIFwiIGNvbXBpbGVcIiksICdjb21waWxlJywgJ2NvbXBpbGUgZW5kJyk7XG4gICAgICB9XG4g
ICAgfVxuICB9XG4gIHJldHVybiBtb3VudC5jYWxsKHRoaXMsIGVsLCBoeWRyYXRpbmcpXG59O1xu
XG4vKipcbiAqIEdldCBvdXRlckhUTUwgb2YgZWxlbWVudHMsIHRha2luZyBjYXJlXG4gKiBvZiBT
VkcgZWxlbWVudHMgaW4gSUUgYXMgd2VsbC5cbiAqL1xuZnVuY3Rpb24gZ2V0T3V0ZXJIVE1MIChl
bCkge1xuICBpZiAoZWwub3V0ZXJIVE1MKSB7XG4gICAgcmV0dXJuIGVsLm91dGVySFRNTFxuICB9
IGVsc2Uge1xuICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYn
KTtcbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZWwuY2xvbmVOb2RlKHRydWUpKTtcbiAgICBy
ZXR1cm4gY29udGFpbmVyLmlubmVySFRNTFxuICB9XG59XG5cblZ1ZSQzLmNvbXBpbGUgPSBjb21w
aWxlVG9GdW5jdGlvbnM7XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNr
X2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoVnVlJDMpO1xuXG4vKiBXRUJQQUNLIFZBUiBJTkpF
Q1RJT04gKi99LmNhbGwoX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXyhc
IkR1UjJcIikpKVxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCJEdVIyXCI6XG4vKioqLyAoZnVuY3Rp
b24obW9kdWxlLCBleHBvcnRzKSB7XG5cbnZhciBnO1xyXG5cclxuLy8gVGhpcyB3b3JrcyBpbiBu
b24tc3RyaWN0IG1vZGVcclxuZyA9IChmdW5jdGlvbigpIHtcclxuXHRyZXR1cm4gdGhpcztcclxu
fSkoKTtcclxuXHJcbnRyeSB7XHJcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQg
KHNlZSBDU1ApXHJcblx0ZyA9IGcgfHwgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpIHx8ICgx
LGV2YWwpKFwidGhpc1wiKTtcclxufSBjYXRjaChlKSB7XHJcblx0Ly8gVGhpcyB3b3JrcyBpZiB0
aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcclxuXHRpZih0eXBlb2Ygd2luZG93ID09
PSBcIm9iamVjdFwiKVxyXG5cdFx0ZyA9IHdpbmRvdztcclxufVxyXG5cclxuLy8gZyBjYW4gc3Rp
bGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxyXG4vLyBXZSBy
ZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xyXG4vLyBl
YXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XHJcblxyXG5tb2R1
bGUuZXhwb3J0cyA9IGc7XHJcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCJGWitmXCI6XG4vKioq
LyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbi8qXG5cdE1JVCBMaWNlbnNlIGh0dHA6
Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG5cdEF1dGhvciBU
b2JpYXMgS29wcGVycyBAc29rcmFcbiovXG4vLyBjc3MgYmFzZSBjb2RlLCBpbmplY3RlZCBieSB0
aGUgY3NzLWxvYWRlclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbih1c2VTb3VyY2VNYXApIHtc
blx0dmFyIGxpc3QgPSBbXTtcblxuXHQvLyByZXR1cm4gdGhlIGxpc3Qgb2YgbW9kdWxlcyBhcyBj
c3Mgc3RyaW5nXG5cdGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcblx0XHRy
ZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcblx0XHRcdHZhciBjb250ZW50ID0gY3Nz
V2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtLCB1c2VTb3VyY2VNYXApO1xuXHRcdFx0aWYoaXRlbVsy
XSkge1xuXHRcdFx0XHRyZXR1cm4gXCJAbWVkaWEgXCIgKyBpdGVtWzJdICsgXCJ7XCIgKyBjb250
ZW50ICsgXCJ9XCI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gY29udGVudDtcblx0
XHRcdH1cblx0XHR9KS5qb2luKFwiXCIpO1xuXHR9O1xuXG5cdC8vIGltcG9ydCBhIGxpc3Qgb2Yg
bW9kdWxlcyBpbnRvIHRoZSBsaXN0XG5cdGxpc3QuaSA9IGZ1bmN0aW9uKG1vZHVsZXMsIG1lZGlh
UXVlcnkpIHtcblx0XHRpZih0eXBlb2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIilcblx0XHRcdG1v
ZHVsZXMgPSBbW251bGwsIG1vZHVsZXMsIFwiXCJdXTtcblx0XHR2YXIgYWxyZWFkeUltcG9ydGVk
TW9kdWxlcyA9IHt9O1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7
XG5cdFx0XHR2YXIgaWQgPSB0aGlzW2ldWzBdO1xuXHRcdFx0aWYodHlwZW9mIGlkID09PSBcIm51
bWJlclwiKVxuXHRcdFx0XHRhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2lkXSA9IHRydWU7XG5cdFx0
fVxuXHRcdGZvcihpID0gMDsgaSA8IG1vZHVsZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBp
dGVtID0gbW9kdWxlc1tpXTtcblx0XHRcdC8vIHNraXAgYWxyZWFkeSBpbXBvcnRlZCBtb2R1bGVc
blx0XHRcdC8vIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgbm90IDEwMCUgcGVyZmVjdCBmb3Igd2Vp
cmQgbWVkaWEgcXVlcnkgY29tYmluYXRpb25zXG5cdFx0XHQvLyAgd2hlbiBhIG1vZHVsZSBpcyBp
bXBvcnRlZCBtdWx0aXBsZSB0aW1lcyB3aXRoIGRpZmZlcmVudCBtZWRpYSBxdWVyaWVzLlxuXHRc
dFx0Ly8gIEkgaG9wZSB0aGlzIHdpbGwgbmV2ZXIgb2NjdXIgKEhleSB0aGlzIHdheSB3ZSBoYXZl
IHNtYWxsZXIgYnVuZGxlcylcblx0XHRcdGlmKHR5cGVvZiBpdGVtWzBdICE9PSBcIm51bWJlclwi
IHx8ICFhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XG5cdFx0XHRcdGlmKG1lZGlh
UXVlcnkgJiYgIWl0ZW1bMl0pIHtcblx0XHRcdFx0XHRpdGVtWzJdID0gbWVkaWFRdWVyeTtcblx0
XHRcdFx0fSBlbHNlIGlmKG1lZGlhUXVlcnkpIHtcblx0XHRcdFx0XHRpdGVtWzJdID0gXCIoXCIg
KyBpdGVtWzJdICsgXCIpIGFuZCAoXCIgKyBtZWRpYVF1ZXJ5ICsgXCIpXCI7XG5cdFx0XHRcdH1c
blx0XHRcdFx0bGlzdC5wdXNoKGl0ZW0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJu
IGxpc3Q7XG59O1xuXG5mdW5jdGlvbiBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0sIHVzZVNv
dXJjZU1hcCkge1xuXHR2YXIgY29udGVudCA9IGl0ZW1bMV0gfHwgJyc7XG5cdHZhciBjc3NNYXBw
aW5nID0gaXRlbVszXTtcblx0aWYgKCFjc3NNYXBwaW5nKSB7XG5cdFx0cmV0dXJuIGNvbnRlbnQ7
XG5cdH1cblxuXHRpZiAodXNlU291cmNlTWFwICYmIHR5cGVvZiBidG9hID09PSAnZnVuY3Rpb24n
KSB7XG5cdFx0dmFyIHNvdXJjZU1hcHBpbmcgPSB0b0NvbW1lbnQoY3NzTWFwcGluZyk7XG5cdFx0
dmFyIHNvdXJjZVVSTHMgPSBjc3NNYXBwaW5nLnNvdXJjZXMubWFwKGZ1bmN0aW9uIChzb3VyY2Up
IHtcblx0XHRcdHJldHVybiAnLyojIHNvdXJjZVVSTD0nICsgY3NzTWFwcGluZy5zb3VyY2VSb290
ICsgc291cmNlICsgJyAqLydcblx0XHR9KTtcblxuXHRcdHJldHVybiBbY29udGVudF0uY29uY2F0
KHNvdXJjZVVSTHMpLmNvbmNhdChbc291cmNlTWFwcGluZ10pLmpvaW4oJ1xcbicpO1xuXHR9XG5c
blx0cmV0dXJuIFtjb250ZW50XS5qb2luKCdcXG4nKTtcbn1cblxuLy8gQWRhcHRlZCBmcm9tIGNv
bnZlcnQtc291cmNlLW1hcCAoTUlUKVxuZnVuY3Rpb24gdG9Db21tZW50KHNvdXJjZU1hcCkge1xu
XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcblx0dmFyIGJhc2U2NCA9IGJ0
b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkp
KSk7XG5cdHZhciBkYXRhID0gJ3NvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29u
O2NoYXJzZXQ9dXRmLTg7YmFzZTY0LCcgKyBiYXNlNjQ7XG5cblx0cmV0dXJuICcvKiMgJyArIGRh
dGEgKyAnICovJztcbn1cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCJWVS84XCI6XG4vKioqLyAo
ZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbi8qIGdsb2JhbHMgX19WVUVfU1NSX0NPTlRF
WFRfXyAqL1xuXG4vLyB0aGlzIG1vZHVsZSBpcyBhIHJ1bnRpbWUgdXRpbGl0eSBmb3IgY2xlYW5l
ciBjb21wb25lbnQgbW9kdWxlIG91dHB1dCBhbmQgd2lsbFxuLy8gYmUgaW5jbHVkZWQgaW4gdGhl
IGZpbmFsIHdlYnBhY2sgdXNlciBidW5kbGVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBu
b3JtYWxpemVDb21wb25lbnQgKFxuICByYXdTY3JpcHRFeHBvcnRzLFxuICBjb21waWxlZFRlbXBs
YXRlLFxuICBpbmplY3RTdHlsZXMsXG4gIHNjb3BlSWQsXG4gIG1vZHVsZUlkZW50aWZpZXIgLyog
c2VydmVyIG9ubHkgKi9cbikge1xuICB2YXIgZXNNb2R1bGVcbiAgdmFyIHNjcmlwdEV4cG9ydHMg
PSByYXdTY3JpcHRFeHBvcnRzID0gcmF3U2NyaXB0RXhwb3J0cyB8fCB7fVxuXG4gIC8vIEVTNiBt
b2R1bGVzIGludGVyb3BcbiAgdmFyIHR5cGUgPSB0eXBlb2YgcmF3U2NyaXB0RXhwb3J0cy5kZWZh
dWx0XG4gIGlmICh0eXBlID09PSAnb2JqZWN0JyB8fCB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4g
ICAgZXNNb2R1bGUgPSByYXdTY3JpcHRFeHBvcnRzXG4gICAgc2NyaXB0RXhwb3J0cyA9IHJhd1Nj
cmlwdEV4cG9ydHMuZGVmYXVsdFxuICB9XG5cbiAgLy8gVnVlLmV4dGVuZCBjb25zdHJ1Y3RvciBl
eHBvcnQgaW50ZXJvcFxuICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBzY3JpcHRFeHBvcnRzID09PSAn
ZnVuY3Rpb24nXG4gICAgPyBzY3JpcHRFeHBvcnRzLm9wdGlvbnNcbiAgICA6IHNjcmlwdEV4cG9y
dHNcblxuICAvLyByZW5kZXIgZnVuY3Rpb25zXG4gIGlmIChjb21waWxlZFRlbXBsYXRlKSB7XG4g
ICAgb3B0aW9ucy5yZW5kZXIgPSBjb21waWxlZFRlbXBsYXRlLnJlbmRlclxuICAgIG9wdGlvbnMu
c3RhdGljUmVuZGVyRm5zID0gY29tcGlsZWRUZW1wbGF0ZS5zdGF0aWNSZW5kZXJGbnNcbiAgfVxu
XG4gIC8vIHNjb3BlZElkXG4gIGlmIChzY29wZUlkKSB7XG4gICAgb3B0aW9ucy5fc2NvcGVJZCA9
IHNjb3BlSWRcbiAgfVxuXG4gIHZhciBob29rXG4gIGlmIChtb2R1bGVJZGVudGlmaWVyKSB7IC8v
IHNlcnZlciBidWlsZFxuICAgIGhvb2sgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgLy8g
Mi4zIGluamVjdGlvblxuICAgICAgY29udGV4dCA9XG4gICAgICAgIGNvbnRleHQgfHwgLy8gY2Fj
aGVkIGNhbGxcbiAgICAgICAgKHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHQp
IHx8IC8vIHN0YXRlZnVsXG4gICAgICAgICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC4kdm5v
ZGUgJiYgdGhpcy5wYXJlbnQuJHZub2RlLnNzckNvbnRleHQpIC8vIGZ1bmN0aW9uYWxcbiAgICAg
IC8vIDIuMiB3aXRoIHJ1bkluTmV3Q29udGV4dDogdHJ1ZVxuICAgICAgaWYgKCFjb250ZXh0ICYm
IHR5cGVvZiBfX1ZVRV9TU1JfQ09OVEVYVF9fICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBj
b250ZXh0ID0gX19WVUVfU1NSX0NPTlRFWFRfX1xuICAgICAgfVxuICAgICAgLy8gaW5qZWN0IGNv
bXBvbmVudCBzdHlsZXNcbiAgICAgIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICAgICAgaW5qZWN0
U3R5bGVzLmNhbGwodGhpcywgY29udGV4dClcbiAgICAgIH1cbiAgICAgIC8vIHJlZ2lzdGVyIGNv
bXBvbmVudCBtb2R1bGUgaWRlbnRpZmllciBmb3IgYXN5bmMgY2h1bmsgaW5mZXJyZW5jZVxuICAg
ICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMpIHtcbiAgICAg
ICAgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMuYWRkKG1vZHVsZUlkZW50aWZpZXIpXG4g
ICAgICB9XG4gICAgfVxuICAgIC8vIHVzZWQgYnkgc3NyIGluIGNhc2UgY29tcG9uZW50IGlzIGNh
Y2hlZCBhbmQgYmVmb3JlQ3JlYXRlXG4gICAgLy8gbmV2ZXIgZ2V0cyBjYWxsZWRcbiAgICBvcHRp
b25zLl9zc3JSZWdpc3RlciA9IGhvb2tcbiAgfSBlbHNlIGlmIChpbmplY3RTdHlsZXMpIHtcbiAg
ICBob29rID0gaW5qZWN0U3R5bGVzXG4gIH1cblxuICBpZiAoaG9vaykge1xuICAgIHZhciBmdW5j
dGlvbmFsID0gb3B0aW9ucy5mdW5jdGlvbmFsXG4gICAgdmFyIGV4aXN0aW5nID0gZnVuY3Rpb25h
bFxuICAgICAgPyBvcHRpb25zLnJlbmRlclxuICAgICAgOiBvcHRpb25zLmJlZm9yZUNyZWF0ZVxu
ICAgIGlmICghZnVuY3Rpb25hbCkge1xuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCByZWdpc3Ry
YXRpb24gYXMgYmVmb3JlQ3JlYXRlIGhvb2tcbiAgICAgIG9wdGlvbnMuYmVmb3JlQ3JlYXRlID0g
ZXhpc3RpbmdcbiAgICAgICAgPyBbXS5jb25jYXQoZXhpc3RpbmcsIGhvb2spXG4gICAgICAgIDog
W2hvb2tdXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHJlZ2lzdGVyIGZvciBmdW5jdGlvYWwgY29t
cG9uZW50IGluIHZ1ZSBmaWxlXG4gICAgICBvcHRpb25zLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRl
cldpdGhTdHlsZUluamVjdGlvbiAoaCwgY29udGV4dCkge1xuICAgICAgICBob29rLmNhbGwoY29u
dGV4dClcbiAgICAgICAgcmV0dXJuIGV4aXN0aW5nKGgsIGNvbnRleHQpXG4gICAgICB9XG4gICAg
fVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBlc01vZHVsZTogZXNNb2R1bGUsXG4gICAgZXhwb3J0
czogc2NyaXB0RXhwb3J0cyxcbiAgICBvcHRpb25zOiBvcHRpb25zXG4gIH1cbn1cblxuXG4vKioq
LyB9KSxcblxuLyoqKi8gXCJyamowXCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRz
LCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8qXG4gIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cu
b3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4gIEF1dGhvciBUb2JpYXMg
S29wcGVycyBAc29rcmFcbiAgTW9kaWZpZWQgYnkgRXZhbiBZb3UgQHl5eDk5MDgwM1xuKi9cblxu
dmFyIGhhc0RvY3VtZW50ID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ1xuXG5pZiAo
dHlwZW9mIERFQlVHICE9PSAndW5kZWZpbmVkJyAmJiBERUJVRykge1xuICBpZiAoIWhhc0RvY3Vt
ZW50KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICd2dWUtc3R5bGUtbG9hZGVyIGNhbm5v
dCBiZSB1c2VkIGluIGEgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnQuICcgK1xuICAgIFwiVXNlIHsg
dGFyZ2V0OiAnbm9kZScgfSBpbiB5b3VyIFdlYnBhY2sgY29uZmlnIHRvIGluZGljYXRlIGEgc2Vy
dmVyLXJlbmRlcmluZyBlbnZpcm9ubWVudC5cIlxuICApIH1cbn1cblxudmFyIGxpc3RUb1N0eWxl
cyA9IF9fd2VicGFja19yZXF1aXJlX18oXCJ0VFZrXCIpXG5cbi8qXG50eXBlIFN0eWxlT2JqZWN0
ID0ge1xuICBpZDogbnVtYmVyO1xuICBwYXJ0czogQXJyYXk8U3R5bGVPYmplY3RQYXJ0PlxufVxu
XG50eXBlIFN0eWxlT2JqZWN0UGFydCA9IHtcbiAgY3NzOiBzdHJpbmc7XG4gIG1lZGlhOiBzdHJp
bmc7XG4gIHNvdXJjZU1hcDogP3N0cmluZ1xufVxuKi9cblxudmFyIHN0eWxlc0luRG9tID0gey8q
XG4gIFtpZDogbnVtYmVyXToge1xuICAgIGlkOiBudW1iZXIsXG4gICAgcmVmczogbnVtYmVyLFxu
ICAgIHBhcnRzOiBBcnJheTwob2JqPzogU3R5bGVPYmplY3RQYXJ0KSA9PiB2b2lkPlxuICB9XG4q
L31cblxudmFyIGhlYWQgPSBoYXNEb2N1bWVudCAmJiAoZG9jdW1lbnQuaGVhZCB8fCBkb2N1bWVu
dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdKVxudmFyIHNpbmdsZXRvbkVsZW1lbnQg
PSBudWxsXG52YXIgc2luZ2xldG9uQ291bnRlciA9IDBcbnZhciBpc1Byb2R1Y3Rpb24gPSBmYWxz
ZVxudmFyIG5vb3AgPSBmdW5jdGlvbiAoKSB7fVxuXG4vLyBGb3JjZSBzaW5nbGUtdGFnIHNvbHV0
aW9uIG9uIElFNi05LCB3aGljaCBoYXMgYSBoYXJkIGxpbWl0IG9uIHRoZSAjIG9mIDxzdHlsZT5c
bi8vIHRhZ3MgaXQgd2lsbCBhbGxvdyBvbiBhIHBhZ2VcbnZhciBpc09sZElFID0gdHlwZW9mIG5h
dmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgL21zaWUgWzYtOV1cXGIvLnRlc3QobmF2aWdhdG9y
LnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChw
YXJlbnRJZCwgbGlzdCwgX2lzUHJvZHVjdGlvbikge1xuICBpc1Byb2R1Y3Rpb24gPSBfaXNQcm9k
dWN0aW9uXG5cbiAgdmFyIHN0eWxlcyA9IGxpc3RUb1N0eWxlcyhwYXJlbnRJZCwgbGlzdClcbiAg
YWRkU3R5bGVzVG9Eb20oc3R5bGVzKVxuXG4gIHJldHVybiBmdW5jdGlvbiB1cGRhdGUgKG5ld0xp
c3QpIHtcbiAgICB2YXIgbWF5UmVtb3ZlID0gW11cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0
eWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSBzdHlsZXNbaV1cbiAgICAgIHZh
ciBkb21TdHlsZSA9IHN0eWxlc0luRG9tW2l0ZW0uaWRdXG4gICAgICBkb21TdHlsZS5yZWZzLS1c
biAgICAgIG1heVJlbW92ZS5wdXNoKGRvbVN0eWxlKVxuICAgIH1cbiAgICBpZiAobmV3TGlzdCkg
e1xuICAgICAgc3R5bGVzID0gbGlzdFRvU3R5bGVzKHBhcmVudElkLCBuZXdMaXN0KVxuICAgICAg
YWRkU3R5bGVzVG9Eb20oc3R5bGVzKVxuICAgIH0gZWxzZSB7XG4gICAgICBzdHlsZXMgPSBbXVxu
ICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heVJlbW92ZS5sZW5ndGg7IGkrKykge1xu
ICAgICAgdmFyIGRvbVN0eWxlID0gbWF5UmVtb3ZlW2ldXG4gICAgICBpZiAoZG9tU3R5bGUucmVm
cyA9PT0gMCkge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGRvbVN0eWxlLnBhcnRzLmxl
bmd0aDsgaisrKSB7XG4gICAgICAgICAgZG9tU3R5bGUucGFydHNbal0oKVxuICAgICAgICB9XG4g
ICAgICAgIGRlbGV0ZSBzdHlsZXNJbkRvbVtkb21TdHlsZS5pZF1cbiAgICAgIH1cbiAgICB9XG4g
IH1cbn1cblxuZnVuY3Rpb24gYWRkU3R5bGVzVG9Eb20gKHN0eWxlcyAvKiBBcnJheTxTdHlsZU9i
amVjdD4gKi8pIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZXMubGVuZ3RoOyBpKyspIHtc
biAgICB2YXIgaXRlbSA9IHN0eWxlc1tpXVxuICAgIHZhciBkb21TdHlsZSA9IHN0eWxlc0luRG9t
W2l0ZW0uaWRdXG4gICAgaWYgKGRvbVN0eWxlKSB7XG4gICAgICBkb21TdHlsZS5yZWZzKytcbiAg
ICAgIGZvciAodmFyIGogPSAwOyBqIDwgZG9tU3R5bGUucGFydHMubGVuZ3RoOyBqKyspIHtcbiAg
ICAgICAgZG9tU3R5bGUucGFydHNbal0oaXRlbS5wYXJ0c1tqXSlcbiAgICAgIH1cbiAgICAgIGZv
ciAoOyBqIDwgaXRlbS5wYXJ0cy5sZW5ndGg7IGorKykge1xuICAgICAgICBkb21TdHlsZS5wYXJ0
cy5wdXNoKGFkZFN0eWxlKGl0ZW0ucGFydHNbal0pKVxuICAgICAgfVxuICAgICAgaWYgKGRvbVN0
eWxlLnBhcnRzLmxlbmd0aCA+IGl0ZW0ucGFydHMubGVuZ3RoKSB7XG4gICAgICAgIGRvbVN0eWxl
LnBhcnRzLmxlbmd0aCA9IGl0ZW0ucGFydHMubGVuZ3RoXG4gICAgICB9XG4gICAgfSBlbHNlIHtc
biAgICAgIHZhciBwYXJ0cyA9IFtdXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGl0ZW0ucGFy
dHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgcGFydHMucHVzaChhZGRTdHlsZShpdGVtLnBhcnRz
W2pdKSlcbiAgICAgIH1cbiAgICAgIHN0eWxlc0luRG9tW2l0ZW0uaWRdID0geyBpZDogaXRlbS5p
ZCwgcmVmczogMSwgcGFydHM6IHBhcnRzIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY3Jl
YXRlU3R5bGVFbGVtZW50ICgpIHtcbiAgdmFyIHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ3N0eWxlJylcbiAgc3R5bGVFbGVtZW50LnR5cGUgPSAndGV4dC9jc3MnXG4gIGhl
YWQuYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KVxuICByZXR1cm4gc3R5bGVFbGVtZW50XG59XG5c
bmZ1bmN0aW9uIGFkZFN0eWxlIChvYmogLyogU3R5bGVPYmplY3RQYXJ0ICovKSB7XG4gIHZhciB1
cGRhdGUsIHJlbW92ZVxuICB2YXIgc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rv
cignc3R5bGVbZGF0YS12dWUtc3NyLWlkfj1cIicgKyBvYmouaWQgKyAnXCJdJylcblxuICBpZiAo
c3R5bGVFbGVtZW50KSB7XG4gICAgaWYgKGlzUHJvZHVjdGlvbikge1xuICAgICAgLy8gaGFzIFNT
UiBzdHlsZXMgYW5kIGluIHByb2R1Y3Rpb24gbW9kZS5cbiAgICAgIC8vIHNpbXBseSBkbyBub3Ro
aW5nLlxuICAgICAgcmV0dXJuIG5vb3BcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaGFzIFNTUiBz
dHlsZXMgYnV0IGluIGRldiBtb2RlLlxuICAgICAgLy8gZm9yIHNvbWUgcmVhc29uIENocm9tZSBj
YW4ndCBoYW5kbGUgc291cmNlIG1hcCBpbiBzZXJ2ZXItcmVuZGVyZWRcbiAgICAgIC8vIHN0eWxl
IHRhZ3MgLSBzb3VyY2UgbWFwcyBpbiA8c3R5bGU+IG9ubHkgd29ya3MgaWYgdGhlIHN0eWxlIHRh
ZyBpc1xuICAgICAgLy8gY3JlYXRlZCBhbmQgaW5zZXJ0ZWQgZHluYW1pY2FsbHkuIFNvIHdlIHJl
bW92ZSB0aGUgc2VydmVyIHJlbmRlcmVkXG4gICAgICAvLyBzdHlsZXMgYW5kIGluamVjdCBuZXcg
b25lcy5cbiAgICAgIHN0eWxlRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlRWxl
bWVudClcbiAgICB9XG4gIH1cblxuICBpZiAoaXNPbGRJRSkge1xuICAgIC8vIHVzZSBzaW5nbGV0
b24gbW9kZSBmb3IgSUU5LlxuICAgIHZhciBzdHlsZUluZGV4ID0gc2luZ2xldG9uQ291bnRlcisr
XG4gICAgc3R5bGVFbGVtZW50ID0gc2luZ2xldG9uRWxlbWVudCB8fCAoc2luZ2xldG9uRWxlbWVu
dCA9IGNyZWF0ZVN0eWxlRWxlbWVudCgpKVxuICAgIHVwZGF0ZSA9IGFwcGx5VG9TaW5nbGV0b25U
YWcuYmluZChudWxsLCBzdHlsZUVsZW1lbnQsIHN0eWxlSW5kZXgsIGZhbHNlKVxuICAgIHJlbW92
ZSA9IGFwcGx5VG9TaW5nbGV0b25UYWcuYmluZChudWxsLCBzdHlsZUVsZW1lbnQsIHN0eWxlSW5k
ZXgsIHRydWUpXG4gIH0gZWxzZSB7XG4gICAgLy8gdXNlIG11bHRpLXN0eWxlLXRhZyBtb2RlIGlu
IGFsbCBvdGhlciBjYXNlc1xuICAgIHN0eWxlRWxlbWVudCA9IGNyZWF0ZVN0eWxlRWxlbWVudCgp
XG4gICAgdXBkYXRlID0gYXBwbHlUb1RhZy5iaW5kKG51bGwsIHN0eWxlRWxlbWVudClcbiAgICBy
ZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzdHlsZUVsZW1lbnQucGFyZW50Tm9kZS5yZW1v
dmVDaGlsZChzdHlsZUVsZW1lbnQpXG4gICAgfVxuICB9XG5cbiAgdXBkYXRlKG9iailcblxuICBy
ZXR1cm4gZnVuY3Rpb24gdXBkYXRlU3R5bGUgKG5ld09iaiAvKiBTdHlsZU9iamVjdFBhcnQgKi8p
IHtcbiAgICBpZiAobmV3T2JqKSB7XG4gICAgICBpZiAobmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAm
JlxuICAgICAgICAgIG5ld09iai5tZWRpYSA9PT0gb2JqLm1lZGlhICYmXG4gICAgICAgICAgbmV3
T2JqLnNvdXJjZU1hcCA9PT0gb2JqLnNvdXJjZU1hcCkge1xuICAgICAgICByZXR1cm5cbiAgICAg
IH1cbiAgICAgIHVwZGF0ZShvYmogPSBuZXdPYmopXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbW92
ZSgpXG4gICAgfVxuICB9XG59XG5cbnZhciByZXBsYWNlVGV4dCA9IChmdW5jdGlvbiAoKSB7XG4g
IHZhciB0ZXh0U3RvcmUgPSBbXVxuXG4gIHJldHVybiBmdW5jdGlvbiAoaW5kZXgsIHJlcGxhY2Vt
ZW50KSB7XG4gICAgdGV4dFN0b3JlW2luZGV4XSA9IHJlcGxhY2VtZW50XG4gICAgcmV0dXJuIHRl
eHRTdG9yZS5maWx0ZXIoQm9vbGVhbikuam9pbignXFxuJylcbiAgfVxufSkoKVxuXG5mdW5jdGlv
biBhcHBseVRvU2luZ2xldG9uVGFnIChzdHlsZUVsZW1lbnQsIGluZGV4LCByZW1vdmUsIG9iaikg
e1xuICB2YXIgY3NzID0gcmVtb3ZlID8gJycgOiBvYmouY3NzXG5cbiAgaWYgKHN0eWxlRWxlbWVu
dC5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQuY3NzVGV4dCA9IHJl
cGxhY2VUZXh0KGluZGV4LCBjc3MpXG4gIH0gZWxzZSB7XG4gICAgdmFyIGNzc05vZGUgPSBkb2N1
bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpXG4gICAgdmFyIGNoaWxkTm9kZXMgPSBzdHlsZUVsZW1l
bnQuY2hpbGROb2Rlc1xuICAgIGlmIChjaGlsZE5vZGVzW2luZGV4XSkgc3R5bGVFbGVtZW50LnJl
bW92ZUNoaWxkKGNoaWxkTm9kZXNbaW5kZXhdKVxuICAgIGlmIChjaGlsZE5vZGVzLmxlbmd0aCkg
e1xuICAgICAgc3R5bGVFbGVtZW50Lmluc2VydEJlZm9yZShjc3NOb2RlLCBjaGlsZE5vZGVzW2lu
ZGV4XSlcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGVFbGVtZW50LmFwcGVuZENoaWxkKGNzc05v
ZGUpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFwcGx5VG9UYWcgKHN0eWxlRWxlbWVudCwg
b2JqKSB7XG4gIHZhciBjc3MgPSBvYmouY3NzXG4gIHZhciBtZWRpYSA9IG9iai5tZWRpYVxuICB2
YXIgc291cmNlTWFwID0gb2JqLnNvdXJjZU1hcFxuXG4gIGlmIChtZWRpYSkge1xuICAgIHN0eWxl
RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ21lZGlhJywgbWVkaWEpXG4gIH1cblxuICBpZiAoc291cmNl
TWFwKSB7XG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuY2hyb21lLmNvbS9kZXZ0b29scy9kb2Nz
L2phdmFzY3JpcHQtZGVidWdnaW5nXG4gICAgLy8gdGhpcyBtYWtlcyBzb3VyY2UgbWFwcyBpbnNp
ZGUgc3R5bGUgdGFncyB3b3JrIHByb3Blcmx5IGluIENocm9tZVxuICAgIGNzcyArPSAnXFxuLyoj
IHNvdXJjZVVSTD0nICsgc291cmNlTWFwLnNvdXJjZXNbMF0gKyAnICovJ1xuICAgIC8vIGh0dHA6
Ly9zdGFja292ZXJmbG93LmNvbS9hLzI2NjAzODc1XG4gICAgY3NzICs9ICdcXG4vKiMgc291cmNl
TWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LCcgKyBidG9hKHVuZXNjYXBl
KGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpICsgJyAqLydc
biAgfVxuXG4gIGlmIChzdHlsZUVsZW1lbnQuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlRWxlbWVu
dC5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3NcbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoc3R5bGVF
bGVtZW50LmZpcnN0Q2hpbGQpIHtcbiAgICAgIHN0eWxlRWxlbWVudC5yZW1vdmVDaGlsZChzdHls
ZUVsZW1lbnQuZmlyc3RDaGlsZClcbiAgICB9XG4gICAgc3R5bGVFbGVtZW50LmFwcGVuZENoaWxk
KGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpXG4gIH1cbn1cblxuXG4vKioqLyB9KSxcblxu
LyoqKi8gXCJybW5oXCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBh
Y2tfcmVxdWlyZV9fKSB7XG5cblxuXG4vL1xuLy8gR2VuZXJhdGVkIG9uIFR1ZSBEZWMgMTYgMjAx
NCAxMjoxMzo0NyBHTVQrMDEwMCAoQ0VUKSBieSBDaGFybGllIFJvYmJpbnMsIFBhb2xvIEZyYWdv
bWVuaSAmIHRoZSBDb250cmlidXRvcnMgKFVzaW5nIENvZGVzdXJnZW9uKS5cbi8vIFZlcnNpb24g
MS4yLjZcbi8vXG5cbihmdW5jdGlvbiAoZXhwb3J0cykge1xuXG4vKlxuICogYnJvd3Nlci5qczog
QnJvd3NlciBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5IGZvciBkaXJlY3Rvci5cbiAqXG4gKiAoQykg
MjAxMSwgQ2hhcmxpZSBSb2JiaW5zLCBQYW9sbyBGcmFnb21lbmksICYgdGhlIENvbnRyaWJ1dG9y
cy5cbiAqIE1JVCBMSUNFTlNFXG4gKlxuICovXG5cbnZhciBkbG9jID0gZG9jdW1lbnQubG9jYXRp
b247XG5cbmZ1bmN0aW9uIGRsb2NIYXNoRW1wdHkoKSB7XG4gIC8vIE5vbi1JRSBicm93c2VycyBy
ZXR1cm4gJycgd2hlbiB0aGUgYWRkcmVzcyBiYXIgc2hvd3MgJyMnOyBEaXJlY3RvcidzIGxvZ2lj
XG4gIC8vIGFzc3VtZXMgYm90aCBtZWFuIGVtcHR5LlxuICByZXR1cm4gZGxvYy5oYXNoID09PSAn
JyB8fCBkbG9jLmhhc2ggPT09ICcjJztcbn1cblxudmFyIGxpc3RlbmVyID0ge1xuICBtb2RlOiAn
bW9kZXJuJyxcbiAgaGFzaDogZGxvYy5oYXNoLFxuICBoaXN0b3J5OiBmYWxzZSxcblxuICBjaGVj
azogZnVuY3Rpb24gKCkge1xuICAgIHZhciBoID0gZGxvYy5oYXNoO1xuICAgIGlmIChoICE9IHRo
aXMuaGFzaCkge1xuICAgICAgdGhpcy5oYXNoID0gaDtcbiAgICAgIHRoaXMub25IYXNoQ2hhbmdl
ZCgpO1xuICAgIH1cbiAgfSxcblxuICBmaXJlOiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMu
bW9kZSA9PT0gJ21vZGVybicpIHtcbiAgICAgIHRoaXMuaGlzdG9yeSA9PT0gdHJ1ZSA/IHdpbmRv
dy5vbnBvcHN0YXRlKCkgOiB3aW5kb3cub25oYXNoY2hhbmdlKCk7XG4gICAgfVxuICAgIGVsc2Ug
e1xuICAgICAgdGhpcy5vbkhhc2hDaGFuZ2VkKCk7XG4gICAgfVxuICB9LFxuXG4gIGluaXQ6IGZ1
bmN0aW9uIChmbiwgaGlzdG9yeSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLmhp
c3RvcnkgPSBoaXN0b3J5O1xuXG4gICAgaWYgKCFSb3V0ZXIubGlzdGVuZXJzKSB7XG4gICAgICBS
b3V0ZXIubGlzdGVuZXJzID0gW107XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25jaGFuZ2Uob25D
aGFuZ2VFdmVudCkge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBSb3V0ZXIubGlzdGVuZXJz
Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBSb3V0ZXIubGlzdGVuZXJzW2ldKG9uQ2hh
bmdlRXZlbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vbm90ZSBJRTggaXMgYmVpbmcgY291
bnRlZCBhcyAnbW9kZXJuJyBiZWNhdXNlIGl0IGhhcyB0aGUgaGFzaGNoYW5nZSBldmVudFxuICAg
IGlmICgnb25oYXNoY2hhbmdlJyBpbiB3aW5kb3cgJiYgKGRvY3VtZW50LmRvY3VtZW50TW9kZSA9
PT0gdW5kZWZpbmVkXG4gICAgICB8fCBkb2N1bWVudC5kb2N1bWVudE1vZGUgPiA3KSkge1xuICAg
ICAgLy8gQXQgbGVhc3QgZm9yIG5vdyBIVE1MNSBoaXN0b3J5IGlzIGF2YWlsYWJsZSBmb3IgJ21v
ZGVybicgYnJvd3NlcnMgb25seVxuICAgICAgaWYgKHRoaXMuaGlzdG9yeSA9PT0gdHJ1ZSkge1xu
ICAgICAgICAvLyBUaGVyZSBpcyBhbiBvbGQgYnVnIGluIENocm9tZSB0aGF0IGNhdXNlcyBvbnBv
cHN0YXRlIHRvIGZpcmUgZXZlblxuICAgICAgICAvLyB1cG9uIGluaXRpYWwgcGFnZSBsb2FkLiBT
aW5jZSB0aGUgaGFuZGxlciBpcyBydW4gbWFudWFsbHkgaW4gaW5pdCgpLFxuICAgICAgICAvLyB0
aGlzIHdvdWxkIGNhdXNlIENocm9tZSB0byBydW4gaXQgdHdpc2UuIEN1cnJlbnRseSB0aGUgb25s
eVxuICAgICAgICAvLyB3b3JrYXJvdW5kIHNlZW1zIHRvIGJlIHRvIHNldCB0aGUgaGFuZGxlciBh
ZnRlciB0aGUgaW5pdGlhbCBwYWdlIGxvYWRcbiAgICAgICAgLy8gaHR0cDovL2NvZGUuZ29vZ2xl
LmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NjMwNDBcbiAgICAgICAgc2V0VGltZW91
dChmdW5jdGlvbigpIHtcbiAgICAgICAgICB3aW5kb3cub25wb3BzdGF0ZSA9IG9uY2hhbmdlO1xu
ICAgICAgICB9LCA1MDApO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHdpbmRvdy5v
bmhhc2hjaGFuZ2UgPSBvbmNoYW5nZTtcbiAgICAgIH1cbiAgICAgIHRoaXMubW9kZSA9ICdtb2Rl
cm4nO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIC8vXG4gICAgICAvLyBJRSBzdXBwb3J0LCBi
YXNlZCBvbiBhIGNvbmNlcHQgYnkgRXJpayBBcnZpZHNvbiAuLi5cbiAgICAgIC8vXG4gICAgICB2
YXIgZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgICAgIGZyYW1l
LmlkID0gJ3N0YXRlLWZyYW1lJztcbiAgICAgIGZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7
XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGZyYW1lKTtcbiAgICAgIHRoaXMud3Jp
dGVGcmFtZSgnJyk7XG5cbiAgICAgIGlmICgnb25wcm9wZXJ0eWNoYW5nZScgaW4gZG9jdW1lbnQg
JiYgJ2F0dGFjaEV2ZW50JyBpbiBkb2N1bWVudCkge1xuICAgICAgICBkb2N1bWVudC5hdHRhY2hF
dmVudCgnb25wcm9wZXJ0eWNoYW5nZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoZXZl
bnQucHJvcGVydHlOYW1lID09PSAnbG9jYXRpb24nKSB7XG4gICAgICAgICAgICBzZWxmLmNoZWNr
KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgd2luZG93LnNl
dEludGVydmFsKGZ1bmN0aW9uICgpIHsgc2VsZi5jaGVjaygpOyB9LCA1MCk7XG5cbiAgICAgIHRo
aXMub25IYXNoQ2hhbmdlZCA9IG9uY2hhbmdlO1xuICAgICAgdGhpcy5tb2RlID0gJ2xlZ2FjeSc7
XG4gICAgfVxuXG4gICAgUm91dGVyLmxpc3RlbmVycy5wdXNoKGZuKTtcblxuICAgIHJldHVybiB0
aGlzLm1vZGU7XG4gIH0sXG5cbiAgZGVzdHJveTogZnVuY3Rpb24gKGZuKSB7XG4gICAgaWYgKCFS
b3V0ZXIgfHwgIVJvdXRlci5saXN0ZW5lcnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAg
ICB2YXIgbGlzdGVuZXJzID0gUm91dGVyLmxpc3RlbmVycztcblxuICAgIGZvciAodmFyIGkgPSBs
aXN0ZW5lcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGlmIChsaXN0ZW5lcnNb
aV0gPT09IGZuKSB7XG4gICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaSwgMSk7XG4gICAgICB9XG4g
ICAgfVxuICB9LFxuXG4gIHNldEhhc2g6IGZ1bmN0aW9uIChzKSB7XG4gICAgLy8gTW96aWxsYSBh
bHdheXMgYWRkcyBhbiBlbnRyeSB0byB0aGUgaGlzdG9yeVxuICAgIGlmICh0aGlzLm1vZGUgPT09
ICdsZWdhY3knKSB7XG4gICAgICB0aGlzLndyaXRlRnJhbWUocyk7XG4gICAgfVxuXG4gICAgaWYg
KHRoaXMuaGlzdG9yeSA9PT0gdHJ1ZSkge1xuICAgICAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRl
KHt9LCBkb2N1bWVudC50aXRsZSwgcyk7XG4gICAgICAvLyBGaXJlIGFuIG9ucG9wc3RhdGUgZXZl
bnQgbWFudWFsbHkgc2luY2UgcHVzaGluZyBkb2VzIG5vdCBvYnZpb3VzbHlcbiAgICAgIC8vIHRy
aWdnZXIgdGhlIHBvcCBldmVudC5cbiAgICAgIHRoaXMuZmlyZSgpO1xuICAgIH0gZWxzZSB7XG4g
ICAgICBkbG9jLmhhc2ggPSAoc1swXSA9PT0gJy8nKSA/IHMgOiAnLycgKyBzO1xuICAgIH1cbiAg
ICByZXR1cm4gdGhpcztcbiAgfSxcblxuICB3cml0ZUZyYW1lOiBmdW5jdGlvbiAocykge1xuICAg
IC8vIElFIHN1cHBvcnQuLi5cbiAgICB2YXIgZiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdz
dGF0ZS1mcmFtZScpO1xuICAgIHZhciBkID0gZi5jb250ZW50RG9jdW1lbnQgfHwgZi5jb250ZW50
V2luZG93LmRvY3VtZW50O1xuICAgIGQub3BlbigpO1xuICAgIGQud3JpdGUoXCI8c2NyaXB0Pl9o
YXNoID0gJ1wiICsgcyArIFwiJzsgb25sb2FkID0gcGFyZW50Lmxpc3RlbmVyLnN5bmNIYXNoOzxz
Y3JpcHQ+XCIpO1xuICAgIGQuY2xvc2UoKTtcbiAgfSxcblxuICBzeW5jSGFzaDogZnVuY3Rpb24g
KCkge1xuICAgIC8vIElFIHN1cHBvcnQuLi5cbiAgICB2YXIgcyA9IHRoaXMuX2hhc2g7XG4gICAg
aWYgKHMgIT0gZGxvYy5oYXNoKSB7XG4gICAgICBkbG9jLmhhc2ggPSBzO1xuICAgIH1cbiAgICBy
ZXR1cm4gdGhpcztcbiAgfSxcblxuICBvbkhhc2hDaGFuZ2VkOiBmdW5jdGlvbiAoKSB7fVxufTtc
blxudmFyIFJvdXRlciA9IGV4cG9ydHMuUm91dGVyID0gZnVuY3Rpb24gKHJvdXRlcykge1xuICBp
ZiAoISh0aGlzIGluc3RhbmNlb2YgUm91dGVyKSkgcmV0dXJuIG5ldyBSb3V0ZXIocm91dGVzKTtc
blxuICB0aGlzLnBhcmFtcyAgID0ge307XG4gIHRoaXMucm91dGVzICAgPSB7fTtcbiAgdGhpcy5t
ZXRob2RzICA9IFsnb24nLCAnb25jZScsICdhZnRlcicsICdiZWZvcmUnXTtcbiAgdGhpcy5zY29w
ZSAgICA9IFtdO1xuICB0aGlzLl9tZXRob2RzID0ge307XG5cbiAgdGhpcy5faW5zZXJ0ID0gdGhp
cy5pbnNlcnQ7XG4gIHRoaXMuaW5zZXJ0ID0gdGhpcy5pbnNlcnRFeDtcblxuICB0aGlzLmhpc3Rv
cnlTdXBwb3J0ID0gKHdpbmRvdy5oaXN0b3J5ICE9IG51bGwgPyB3aW5kb3cuaGlzdG9yeS5wdXNo
U3RhdGUgOiBudWxsKSAhPSBudWxsXG5cbiAgdGhpcy5jb25maWd1cmUoKTtcbiAgdGhpcy5tb3Vu
dChyb3V0ZXMgfHwge30pO1xufTtcblxuUm91dGVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24g
KHIpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gICAgLCByb3V0ZVRvO1xuICB0aGlzLmhhbmRsZXIg
PSBmdW5jdGlvbihvbkNoYW5nZUV2ZW50KSB7XG4gICAgdmFyIG5ld1VSTCA9IG9uQ2hhbmdlRXZl
bnQgJiYgb25DaGFuZ2VFdmVudC5uZXdVUkwgfHwgd2luZG93LmxvY2F0aW9uLmhhc2g7XG4gICAg
dmFyIHVybCA9IHNlbGYuaGlzdG9yeSA9PT0gdHJ1ZSA/IHNlbGYuZ2V0UGF0aCgpIDogbmV3VVJM
LnJlcGxhY2UoLy4qIy8sICcnKTtcbiAgICBzZWxmLmRpc3BhdGNoKCdvbicsIHVybC5jaGFyQXQo
MCkgPT09ICcvJyA/IHVybCA6ICcvJyArIHVybCk7XG4gIH07XG5cbiAgbGlzdGVuZXIuaW5pdCh0
aGlzLmhhbmRsZXIsIHRoaXMuaGlzdG9yeSk7XG5cbiAgaWYgKHRoaXMuaGlzdG9yeSA9PT0gZmFs
c2UpIHtcbiAgICBpZiAoZGxvY0hhc2hFbXB0eSgpICYmIHIpIHtcbiAgICAgIGRsb2MuaGFzaCA9
IHI7XG4gICAgfSBlbHNlIGlmICghZGxvY0hhc2hFbXB0eSgpKSB7XG4gICAgICBzZWxmLmRpc3Bh
dGNoKCdvbicsICcvJyArIGRsb2MuaGFzaC5yZXBsYWNlKC9eKCNcXC98I3xcXC8pLywgJycpKTtc
biAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgaWYgKHRoaXMuY29udmVydF9oYXNoX2luX2luaXQp
IHtcbiAgICAgIC8vIFVzZSBoYXNoIGFzIHJvdXRlXG4gICAgICByb3V0ZVRvID0gZGxvY0hhc2hF
bXB0eSgpICYmIHIgPyByIDogIWRsb2NIYXNoRW1wdHkoKSA/IGRsb2MuaGFzaC5yZXBsYWNlKC9e
Iy8sICcnKSA6IG51bGw7XG4gICAgICBpZiAocm91dGVUbykge1xuICAgICAgICB3aW5kb3cuaGlz
dG9yeS5yZXBsYWNlU3RhdGUoe30sIGRvY3VtZW50LnRpdGxlLCByb3V0ZVRvKTtcbiAgICAgIH1c
biAgICB9XG4gICAgZWxzZSB7XG4gICAgICAvLyBVc2UgY2Fub25pY2FsIHVybFxuICAgICAgcm91
dGVUbyA9IHRoaXMuZ2V0UGF0aCgpO1xuICAgIH1cblxuICAgIC8vIFJvdXRlciBoYXMgYmVlbiBp
bml0aWFsaXplZCwgYnV0IGR1ZSB0byB0aGUgY2hyb21lIGJ1ZyBpdCB3aWxsIG5vdFxuICAgIC8v
IHlldCBhY3R1YWxseSByb3V0ZSBIVE1MNSBoaXN0b3J5IHN0YXRlIGNoYW5nZXMuIFRodXMsIGRl
Y2lkZSBpZiBzaG91bGQgcm91dGUuXG4gICAgaWYgKHJvdXRlVG8gfHwgdGhpcy5ydW5faW5faW5p
dCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5oYW5kbGVyKCk7XG4gICAgfVxuICB9XG5cbiAgcmV0
dXJuIHRoaXM7XG59O1xuXG5Sb3V0ZXIucHJvdG90eXBlLmV4cGxvZGUgPSBmdW5jdGlvbiAoKSB7
XG4gIHZhciB2ID0gdGhpcy5oaXN0b3J5ID09PSB0cnVlID8gdGhpcy5nZXRQYXRoKCkgOiBkbG9j
Lmhhc2g7XG4gIGlmICh2LmNoYXJBdCgxKSA9PT0gJy8nKSB7IHY9di5zbGljZSgxKSB9XG4gIHJl
dHVybiB2LnNsaWNlKDEsIHYubGVuZ3RoKS5zcGxpdChcIi9cIik7XG59O1xuXG5Sb3V0ZXIucHJv
dG90eXBlLnNldFJvdXRlID0gZnVuY3Rpb24gKGksIHYsIHZhbCkge1xuICB2YXIgdXJsID0gdGhp
cy5leHBsb2RlKCk7XG5cbiAgaWYgKHR5cGVvZiBpID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgdiA9
PT0gJ3N0cmluZycpIHtcbiAgICB1cmxbaV0gPSB2O1xuICB9XG4gIGVsc2UgaWYgKHR5cGVvZiB2
YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgdXJsLnNwbGljZShpLCB2LCBzKTtcbiAgfVxuICBlbHNl
IHtcbiAgICB1cmwgPSBbaV07XG4gIH1cblxuICBsaXN0ZW5lci5zZXRIYXNoKHVybC5qb2luKCcv
JykpO1xuICByZXR1cm4gdXJsO1xufTtcblxuLy9cbi8vICMjIyBmdW5jdGlvbiBpbnNlcnRFeCht
ZXRob2QsIHBhdGgsIHJvdXRlLCBwYXJlbnQpXG4vLyAjIyMjIEBtZXRob2Qge3N0cmluZ30gTWV0
aG9kIHRvIGluc2VydCB0aGUgc3BlY2lmaWMgYHJvdXRlYC5cbi8vICMjIyMgQHBhdGgge0FycmF5
fSBQYXJzZWQgcGF0aCB0byBpbnNlcnQgdGhlIGByb3V0ZWAgYXQuXG4vLyAjIyMjIEByb3V0ZSB7
QXJyYXl8ZnVuY3Rpb259IFJvdXRlIGhhbmRsZXJzIHRvIGluc2VydC5cbi8vICMjIyMgQHBhcmVu
dCB7T2JqZWN0fSAqKk9wdGlvbmFsKiogUGFyZW50IFwicm91dGVzXCIgdG8gaW5zZXJ0IGludG8u
XG4vLyBpbnNlcnQgYSBjYWxsYmFjayB0aGF0IHdpbGwgb25seSBvY2N1ciBvbmNlIHBlciB0aGUg
bWF0Y2hlZCByb3V0ZS5cbi8vXG5Sb3V0ZXIucHJvdG90eXBlLmluc2VydEV4ID0gZnVuY3Rpb24o
bWV0aG9kLCBwYXRoLCByb3V0ZSwgcGFyZW50KSB7XG4gIGlmIChtZXRob2QgPT09IFwib25jZVwi
KSB7XG4gICAgbWV0aG9kID0gXCJvblwiO1xuICAgIHJvdXRlID0gZnVuY3Rpb24ocm91dGUpIHtc
biAgICAgIHZhciBvbmNlID0gZmFsc2U7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAg
ICAgIGlmIChvbmNlKSByZXR1cm47XG4gICAgICAgIG9uY2UgPSB0cnVlO1xuICAgICAgICByZXR1
cm4gcm91dGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH07XG4gICAgfShyb3V0ZSk7
XG4gIH1cbiAgcmV0dXJuIHRoaXMuX2luc2VydChtZXRob2QsIHBhdGgsIHJvdXRlLCBwYXJlbnQp
O1xufTtcblxuUm91dGVyLnByb3RvdHlwZS5nZXRSb3V0ZSA9IGZ1bmN0aW9uICh2KSB7XG4gIHZh
ciByZXQgPSB2O1xuXG4gIGlmICh0eXBlb2YgdiA9PT0gXCJudW1iZXJcIikge1xuICAgIHJldCA9
IHRoaXMuZXhwbG9kZSgpW3ZdO1xuICB9XG4gIGVsc2UgaWYgKHR5cGVvZiB2ID09PSBcInN0cmlu
Z1wiKXtcbiAgICB2YXIgaCA9IHRoaXMuZXhwbG9kZSgpO1xuICAgIHJldCA9IGguaW5kZXhPZih2
KTtcbiAgfVxuICBlbHNlIHtcbiAgICByZXQgPSB0aGlzLmV4cGxvZGUoKTtcbiAgfVxuXG4gIHJl
dHVybiByZXQ7XG59O1xuXG5Sb3V0ZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7
XG4gIGxpc3RlbmVyLmRlc3Ryb3kodGhpcy5oYW5kbGVyKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xu
XG5Sb3V0ZXIucHJvdG90eXBlLmdldFBhdGggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBwYXRoID0g
d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lO1xuICBpZiAocGF0aC5zdWJzdHIoMCwgMSkgIT09ICcv
Jykge1xuICAgIHBhdGggPSAnLycgKyBwYXRoO1xuICB9XG4gIHJldHVybiBwYXRoO1xufTtcbmZ1
bmN0aW9uIF9ldmVyeShhcnIsIGl0ZXJhdG9yKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJy
Lmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKGl0ZXJhdG9yKGFycltpXSwgaSwgYXJyKSA9PT0g
ZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gX2ZsYXR0
ZW4oYXJyKSB7XG4gIHZhciBmbGF0ID0gW107XG4gIGZvciAodmFyIGkgPSAwLCBuID0gYXJyLmxl
bmd0aDsgaSA8IG47IGkrKykge1xuICAgIGZsYXQgPSBmbGF0LmNvbmNhdChhcnJbaV0pO1xuICB9
XG4gIHJldHVybiBmbGF0O1xufVxuXG5mdW5jdGlvbiBfYXN5bmNFdmVyeVNlcmllcyhhcnIsIGl0
ZXJhdG9yLCBjYWxsYmFjaykge1xuICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICByZXR1cm4gY2Fs
bGJhY2soKTtcbiAgfVxuICB2YXIgY29tcGxldGVkID0gMDtcbiAgKGZ1bmN0aW9uIGl0ZXJhdGUo
KSB7XG4gICAgaXRlcmF0b3IoYXJyW2NvbXBsZXRlZF0sIGZ1bmN0aW9uKGVycikge1xuICAgICAg
aWYgKGVyciB8fCBlcnIgPT09IGZhbHNlKSB7XG4gICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAg
ICAgIGNhbGxiYWNrID0gZnVuY3Rpb24oKSB7fTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNv
bXBsZXRlZCArPSAxO1xuICAgICAgICBpZiAoY29tcGxldGVkID09PSBhcnIubGVuZ3RoKSB7XG4g
ICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVyYXRl
KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSkoKTtcbn1cblxuZnVuY3Rpb24g
cGFyYW1pZnlTdHJpbmcoc3RyLCBwYXJhbXMsIG1vZCkge1xuICBtb2QgPSBzdHI7XG4gIGZvciAo
dmFyIHBhcmFtIGluIHBhcmFtcykge1xuICAgIGlmIChwYXJhbXMuaGFzT3duUHJvcGVydHkocGFy
YW0pKSB7XG4gICAgICBtb2QgPSBwYXJhbXNbcGFyYW1dKHN0cik7XG4gICAgICBpZiAobW9kICE9
PSBzdHIpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBt
b2QgPT09IHN0ciA/IFwiKFsuX2EtekEtWjAtOS0lKCldKylcIiA6IG1vZDtcbn1cblxuZnVuY3Rp
b24gcmVnaWZ5U3RyaW5nKHN0ciwgcGFyYW1zKSB7XG4gIHZhciBtYXRjaGVzLCBsYXN0ID0gMCwg
b3V0ID0gXCJcIjtcbiAgd2hpbGUgKG1hdGNoZXMgPSBzdHIuc3Vic3RyKGxhc3QpLm1hdGNoKC9b
Xlxcd1xcZFxcLSAlQCZdKlxcKlteXFx3XFxkXFwtICVAJl0qLykpIHtcbiAgICBsYXN0ID0gbWF0
Y2hlcy5pbmRleCArIG1hdGNoZXNbMF0ubGVuZ3RoO1xuICAgIG1hdGNoZXNbMF0gPSBtYXRjaGVz
WzBdLnJlcGxhY2UoL15cXCovLCBcIihbXy4oKSFcXFxcICVAJmEtekEtWjAtOS1dKylcIik7XG4g
ICAgb3V0ICs9IHN0ci5zdWJzdHIoMCwgbWF0Y2hlcy5pbmRleCkgKyBtYXRjaGVzWzBdO1xuICB9
XG4gIHN0ciA9IG91dCArPSBzdHIuc3Vic3RyKGxhc3QpO1xuICB2YXIgY2FwdHVyZXMgPSBzdHIu
bWF0Y2goLzooW15cXC9dKykvaWcpLCBjYXB0dXJlLCBsZW5ndGg7XG4gIGlmIChjYXB0dXJlcykg
e1xuICAgIGxlbmd0aCA9IGNhcHR1cmVzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSB7XG4gICAgICBjYXB0dXJlID0gY2FwdHVyZXNbaV07XG4gICAgICBpZiAo
Y2FwdHVyZS5zbGljZSgwLCAyKSA9PT0gXCI6OlwiKSB7XG4gICAgICAgIHN0ciA9IGNhcHR1cmUu
c2xpY2UoMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZShjYXB0
dXJlLCBwYXJhbWlmeVN0cmluZyhjYXB0dXJlLCBwYXJhbXMpKTtcbiAgICAgIH1cbiAgICB9XG4g
IH1cbiAgcmV0dXJuIHN0cjtcbn1cblxuZnVuY3Rpb24gdGVybWluYXRvcihyb3V0ZXMsIGRlbGlt
aXRlciwgc3RhcnQsIHN0b3ApIHtcbiAgdmFyIGxhc3QgPSAwLCBsZWZ0ID0gMCwgcmlnaHQgPSAw
LCBzdGFydCA9IChzdGFydCB8fCBcIihcIikudG9TdHJpbmcoKSwgc3RvcCA9IChzdG9wIHx8IFwi
KVwiKS50b1N0cmluZygpLCBpO1xuICBmb3IgKGkgPSAwOyBpIDwgcm91dGVzLmxlbmd0aDsgaSsr
KSB7XG4gICAgdmFyIGNodW5rID0gcm91dGVzW2ldO1xuICAgIGlmIChjaHVuay5pbmRleE9mKHN0
YXJ0LCBsYXN0KSA+IGNodW5rLmluZGV4T2Yoc3RvcCwgbGFzdCkgfHwgfmNodW5rLmluZGV4T2Yo
c3RhcnQsIGxhc3QpICYmICF+Y2h1bmsuaW5kZXhPZihzdG9wLCBsYXN0KSB8fCAhfmNodW5rLmlu
ZGV4T2Yoc3RhcnQsIGxhc3QpICYmIH5jaHVuay5pbmRleE9mKHN0b3AsIGxhc3QpKSB7XG4gICAg
ICBsZWZ0ID0gY2h1bmsuaW5kZXhPZihzdGFydCwgbGFzdCk7XG4gICAgICByaWdodCA9IGNodW5r
LmluZGV4T2Yoc3RvcCwgbGFzdCk7XG4gICAgICBpZiAofmxlZnQgJiYgIX5yaWdodCB8fCAhfmxl
ZnQgJiYgfnJpZ2h0KSB7XG4gICAgICAgIHZhciB0bXAgPSByb3V0ZXMuc2xpY2UoMCwgKGkgfHwg
MSkgKyAxKS5qb2luKGRlbGltaXRlcik7XG4gICAgICAgIHJvdXRlcyA9IFsgdG1wIF0uY29uY2F0
KHJvdXRlcy5zbGljZSgoaSB8fCAxKSArIDEpKTtcbiAgICAgIH1cbiAgICAgIGxhc3QgPSAocmln
aHQgPiBsZWZ0ID8gcmlnaHQgOiBsZWZ0KSArIDE7XG4gICAgICBpID0gMDtcbiAgICB9IGVsc2Ug
e1xuICAgICAgbGFzdCA9IDA7XG4gICAgfVxuICB9XG4gIHJldHVybiByb3V0ZXM7XG59XG5cbnZh
ciBRVUVSWV9TRVBBUkFUT1IgPSAvXFw/LiovO1xuXG5Sb3V0ZXIucHJvdG90eXBlLmNvbmZpZ3Vy
ZSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGZv
ciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tZXRob2RzLmxlbmd0aDsgaSsrKSB7XG4gICAgdGhpcy5f
bWV0aG9kc1t0aGlzLm1ldGhvZHNbaV1dID0gdHJ1ZTtcbiAgfVxuICB0aGlzLnJlY3Vyc2UgPSBv
cHRpb25zLnJlY3Vyc2UgfHwgdGhpcy5yZWN1cnNlIHx8IGZhbHNlO1xuICB0aGlzLmFzeW5jID0g
b3B0aW9ucy5hc3luYyB8fCBmYWxzZTtcbiAgdGhpcy5kZWxpbWl0ZXIgPSBvcHRpb25zLmRlbGlt
aXRlciB8fCBcIi9cIjtcbiAgdGhpcy5zdHJpY3QgPSB0eXBlb2Ygb3B0aW9ucy5zdHJpY3QgPT09
IFwidW5kZWZpbmVkXCIgPyB0cnVlIDogb3B0aW9ucy5zdHJpY3Q7XG4gIHRoaXMubm90Zm91bmQg
PSBvcHRpb25zLm5vdGZvdW5kO1xuICB0aGlzLnJlc291cmNlID0gb3B0aW9ucy5yZXNvdXJjZTtc
biAgdGhpcy5oaXN0b3J5ID0gb3B0aW9ucy5odG1sNWhpc3RvcnkgJiYgdGhpcy5oaXN0b3J5U3Vw
cG9ydCB8fCBmYWxzZTtcbiAgdGhpcy5ydW5faW5faW5pdCA9IHRoaXMuaGlzdG9yeSA9PT0gdHJ1
ZSAmJiBvcHRpb25zLnJ1bl9oYW5kbGVyX2luX2luaXQgIT09IGZhbHNlO1xuICB0aGlzLmNvbnZl
cnRfaGFzaF9pbl9pbml0ID0gdGhpcy5oaXN0b3J5ID09PSB0cnVlICYmIG9wdGlvbnMuY29udmVy
dF9oYXNoX2luX2luaXQgIT09IGZhbHNlO1xuICB0aGlzLmV2ZXJ5ID0ge1xuICAgIGFmdGVyOiBv
cHRpb25zLmFmdGVyIHx8IG51bGwsXG4gICAgYmVmb3JlOiBvcHRpb25zLmJlZm9yZSB8fCBudWxs
LFxuICAgIG9uOiBvcHRpb25zLm9uIHx8IG51bGxcbiAgfTtcbiAgcmV0dXJuIHRoaXM7XG59O1xu
XG5Sb3V0ZXIucHJvdG90eXBlLnBhcmFtID0gZnVuY3Rpb24odG9rZW4sIG1hdGNoZXIpIHtcbiAg
aWYgKHRva2VuWzBdICE9PSBcIjpcIikge1xuICAgIHRva2VuID0gXCI6XCIgKyB0b2tlbjtcbiAg
fVxuICB2YXIgY29tcGlsZWQgPSBuZXcgUmVnRXhwKHRva2VuLCBcImdcIik7XG4gIHRoaXMucGFy
YW1zW3Rva2VuXSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZShjb21w
aWxlZCwgbWF0Y2hlci5zb3VyY2UgfHwgbWF0Y2hlcik7XG4gIH07XG4gIHJldHVybiB0aGlzO1xu
fTtcblxuUm91dGVyLnByb3RvdHlwZS5vbiA9IFJvdXRlci5wcm90b3R5cGUucm91dGUgPSBmdW5j
dGlvbihtZXRob2QsIHBhdGgsIHJvdXRlKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgaWYgKCFy
b3V0ZSAmJiB0eXBlb2YgcGF0aCA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByb3V0ZSA9IHBhdGg7
XG4gICAgcGF0aCA9IG1ldGhvZDtcbiAgICBtZXRob2QgPSBcIm9uXCI7XG4gIH1cbiAgaWYgKEFy
cmF5LmlzQXJyYXkocGF0aCkpIHtcbiAgICByZXR1cm4gcGF0aC5mb3JFYWNoKGZ1bmN0aW9uKHAp
IHtcbiAgICAgIHNlbGYub24obWV0aG9kLCBwLCByb3V0ZSk7XG4gICAgfSk7XG4gIH1cbiAgaWYg
KHBhdGguc291cmNlKSB7XG4gICAgcGF0aCA9IHBhdGguc291cmNlLnJlcGxhY2UoL1xcXFxcXC8v
aWcsIFwiL1wiKTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheShtZXRob2QpKSB7XG4gICAgcmV0
dXJuIG1ldGhvZC5mb3JFYWNoKGZ1bmN0aW9uKG0pIHtcbiAgICAgIHNlbGYub24obS50b0xvd2Vy
Q2FzZSgpLCBwYXRoLCByb3V0ZSk7XG4gICAgfSk7XG4gIH1cbiAgcGF0aCA9IHBhdGguc3BsaXQo
bmV3IFJlZ0V4cCh0aGlzLmRlbGltaXRlcikpO1xuICBwYXRoID0gdGVybWluYXRvcihwYXRoLCB0
aGlzLmRlbGltaXRlcik7XG4gIHRoaXMuaW5zZXJ0KG1ldGhvZCwgdGhpcy5zY29wZS5jb25jYXQo
cGF0aCksIHJvdXRlKTtcbn07XG5cblJvdXRlci5wcm90b3R5cGUucGF0aCA9IGZ1bmN0aW9uKHBh
dGgsIHJvdXRlc0ZuKSB7XG4gIHZhciBzZWxmID0gdGhpcywgbGVuZ3RoID0gdGhpcy5zY29wZS5s
ZW5ndGg7XG4gIGlmIChwYXRoLnNvdXJjZSkge1xuICAgIHBhdGggPSBwYXRoLnNvdXJjZS5yZXBs
YWNlKC9cXFxcXFwvL2lnLCBcIi9cIik7XG4gIH1cbiAgcGF0aCA9IHBhdGguc3BsaXQobmV3IFJl
Z0V4cCh0aGlzLmRlbGltaXRlcikpO1xuICBwYXRoID0gdGVybWluYXRvcihwYXRoLCB0aGlzLmRl
bGltaXRlcik7XG4gIHRoaXMuc2NvcGUgPSB0aGlzLnNjb3BlLmNvbmNhdChwYXRoKTtcbiAgcm91
dGVzRm4uY2FsbCh0aGlzLCB0aGlzKTtcbiAgdGhpcy5zY29wZS5zcGxpY2UobGVuZ3RoLCBwYXRo
Lmxlbmd0aCk7XG59O1xuXG5Sb3V0ZXIucHJvdG90eXBlLmRpc3BhdGNoID0gZnVuY3Rpb24obWV0
aG9kLCBwYXRoLCBjYWxsYmFjaykge1xuICB2YXIgc2VsZiA9IHRoaXMsIGZucyA9IHRoaXMudHJh
dmVyc2UobWV0aG9kLCBwYXRoLnJlcGxhY2UoUVVFUllfU0VQQVJBVE9SLCBcIlwiKSwgdGhpcy5y
b3V0ZXMsIFwiXCIpLCBpbnZva2VkID0gdGhpcy5faW52b2tlZCwgYWZ0ZXI7XG4gIHRoaXMuX2lu
dm9rZWQgPSB0cnVlO1xuICBpZiAoIWZucyB8fCBmbnMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhp
cy5sYXN0ID0gW107XG4gICAgaWYgKHR5cGVvZiB0aGlzLm5vdGZvdW5kID09PSBcImZ1bmN0aW9u
XCIpIHtcbiAgICAgIHRoaXMuaW52b2tlKFsgdGhpcy5ub3Rmb3VuZCBdLCB7XG4gICAgICAgIG1l
dGhvZDogbWV0aG9kLFxuICAgICAgICBwYXRoOiBwYXRoXG4gICAgICB9LCBjYWxsYmFjayk7XG4g
ICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodGhpcy5yZWN1cnNlID09PSBcImZv
cndhcmRcIikge1xuICAgIGZucyA9IGZucy5yZXZlcnNlKCk7XG4gIH1cbiAgZnVuY3Rpb24gdXBk
YXRlQW5kSW52b2tlKCkge1xuICAgIHNlbGYubGFzdCA9IGZucy5hZnRlcjtcbiAgICBzZWxmLmlu
dm9rZShzZWxmLnJ1bmxpc3QoZm5zKSwgc2VsZiwgY2FsbGJhY2spO1xuICB9XG4gIGFmdGVyID0g
dGhpcy5ldmVyeSAmJiB0aGlzLmV2ZXJ5LmFmdGVyID8gWyB0aGlzLmV2ZXJ5LmFmdGVyIF0uY29u
Y2F0KHRoaXMubGFzdCkgOiBbIHRoaXMubGFzdCBdO1xuICBpZiAoYWZ0ZXIgJiYgYWZ0ZXIubGVu
Z3RoID4gMCAmJiBpbnZva2VkKSB7XG4gICAgaWYgKHRoaXMuYXN5bmMpIHtcbiAgICAgIHRoaXMu
aW52b2tlKGFmdGVyLCB0aGlzLCB1cGRhdGVBbmRJbnZva2UpO1xuICAgIH0gZWxzZSB7XG4gICAg
ICB0aGlzLmludm9rZShhZnRlciwgdGhpcyk7XG4gICAgICB1cGRhdGVBbmRJbnZva2UoKTtcbiAg
ICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdXBkYXRlQW5kSW52b2tlKCk7XG4gIHJldHVy
biB0cnVlO1xufTtcblxuUm91dGVyLnByb3RvdHlwZS5pbnZva2UgPSBmdW5jdGlvbihmbnMsIHRo
aXNBcmcsIGNhbGxiYWNrKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIGFwcGx5O1xuICBp
ZiAodGhpcy5hc3luYykge1xuICAgIGFwcGx5ID0gZnVuY3Rpb24oZm4sIG5leHQpIHtcbiAgICAg
IGlmIChBcnJheS5pc0FycmF5KGZuKSkge1xuICAgICAgICByZXR1cm4gX2FzeW5jRXZlcnlTZXJp
ZXMoZm4sIGFwcGx5LCBuZXh0KTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGZuID09IFwiZnVu
Y3Rpb25cIikge1xuICAgICAgICBmbi5hcHBseSh0aGlzQXJnLCAoZm5zLmNhcHR1cmVzIHx8IFtd
KS5jb25jYXQobmV4dCkpO1xuICAgICAgfVxuICAgIH07XG4gICAgX2FzeW5jRXZlcnlTZXJpZXMo
Zm5zLCBhcHBseSwgZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAg
Y2FsbGJhY2suYXBwbHkodGhpc0FyZywgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAg
fSBlbHNlIHtcbiAgICBhcHBseSA9IGZ1bmN0aW9uKGZuKSB7XG4gICAgICBpZiAoQXJyYXkuaXNB
cnJheShmbikpIHtcbiAgICAgICAgcmV0dXJuIF9ldmVyeShmbiwgYXBwbHkpO1xuICAgICAgfSBl
bHNlIGlmICh0eXBlb2YgZm4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gZm4u
YXBwbHkodGhpc0FyZywgZm5zLmNhcHR1cmVzIHx8IFtdKTtcbiAgICAgIH0gZWxzZSBpZiAodHlw
ZW9mIGZuID09PSBcInN0cmluZ1wiICYmIHNlbGYucmVzb3VyY2UpIHtcbiAgICAgICAgc2VsZi5y
ZXNvdXJjZVtmbl0uYXBwbHkodGhpc0FyZywgZm5zLmNhcHR1cmVzIHx8IFtdKTtcbiAgICAgIH1c
biAgICB9O1xuICAgIF9ldmVyeShmbnMsIGFwcGx5KTtcbiAgfVxufTtcblxuUm91dGVyLnByb3Rv
dHlwZS50cmF2ZXJzZSA9IGZ1bmN0aW9uKG1ldGhvZCwgcGF0aCwgcm91dGVzLCByZWdleHAsIGZp
bHRlcikge1xuICB2YXIgZm5zID0gW10sIGN1cnJlbnQsIGV4YWN0LCBtYXRjaCwgbmV4dCwgdGhh
dDtcbiAgZnVuY3Rpb24gZmlsdGVyUm91dGVzKHJvdXRlcykge1xuICAgIGlmICghZmlsdGVyKSB7
XG4gICAgICByZXR1cm4gcm91dGVzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZWVwQ29weShzb3Vy
Y2UpIHtcbiAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
c291cmNlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdFtpXSA9IEFycmF5LmlzQXJyYXko
c291cmNlW2ldKSA/IGRlZXBDb3B5KHNvdXJjZVtpXSkgOiBzb3VyY2VbaV07XG4gICAgICB9XG4g
ICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBhcHBseUZpbHRlcihmbnMp
IHtcbiAgICAgIGZvciAodmFyIGkgPSBmbnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAg
ICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZm5zW2ldKSkge1xuICAgICAgICAgIGFwcGx5RmlsdGVy
KGZuc1tpXSk7XG4gICAgICAgICAgaWYgKGZuc1tpXS5sZW5ndGggPT09IDApIHtcbiAgICAgICAg
ICAgIGZucy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAg
ICAgICAgIGlmICghZmlsdGVyKGZuc1tpXSkpIHtcbiAgICAgICAgICAgIGZucy5zcGxpY2UoaSwg
MSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBuZXdS
b3V0ZXMgPSBkZWVwQ29weShyb3V0ZXMpO1xuICAgIG5ld1JvdXRlcy5tYXRjaGVkID0gcm91dGVz
Lm1hdGNoZWQ7XG4gICAgbmV3Um91dGVzLmNhcHR1cmVzID0gcm91dGVzLmNhcHR1cmVzO1xuICAg
IG5ld1JvdXRlcy5hZnRlciA9IHJvdXRlcy5hZnRlci5maWx0ZXIoZmlsdGVyKTtcbiAgICBhcHBs
eUZpbHRlcihuZXdSb3V0ZXMpO1xuICAgIHJldHVybiBuZXdSb3V0ZXM7XG4gIH1cbiAgaWYgKHBh
dGggPT09IHRoaXMuZGVsaW1pdGVyICYmIHJvdXRlc1ttZXRob2RdKSB7XG4gICAgbmV4dCA9IFsg
WyByb3V0ZXMuYmVmb3JlLCByb3V0ZXNbbWV0aG9kXSBdLmZpbHRlcihCb29sZWFuKSBdO1xuICAg
IG5leHQuYWZ0ZXIgPSBbIHJvdXRlcy5hZnRlciBdLmZpbHRlcihCb29sZWFuKTtcbiAgICBuZXh0
Lm1hdGNoZWQgPSB0cnVlO1xuICAgIG5leHQuY2FwdHVyZXMgPSBbXTtcbiAgICByZXR1cm4gZmls
dGVyUm91dGVzKG5leHQpO1xuICB9XG4gIGZvciAodmFyIHIgaW4gcm91dGVzKSB7XG4gICAgaWYg
KHJvdXRlcy5oYXNPd25Qcm9wZXJ0eShyKSAmJiAoIXRoaXMuX21ldGhvZHNbcl0gfHwgdGhpcy5f
bWV0aG9kc1tyXSAmJiB0eXBlb2Ygcm91dGVzW3JdID09PSBcIm9iamVjdFwiICYmICFBcnJheS5p
c0FycmF5KHJvdXRlc1tyXSkpKSB7XG4gICAgICBjdXJyZW50ID0gZXhhY3QgPSByZWdleHAgKyB0
aGlzLmRlbGltaXRlciArIHI7XG4gICAgICBpZiAoIXRoaXMuc3RyaWN0KSB7XG4gICAgICAgIGV4
YWN0ICs9IFwiW1wiICsgdGhpcy5kZWxpbWl0ZXIgKyBcIl0/XCI7XG4gICAgICB9XG4gICAgICBt
YXRjaCA9IHBhdGgubWF0Y2gobmV3IFJlZ0V4cChcIl5cIiArIGV4YWN0KSk7XG4gICAgICBpZiAo
IW1hdGNoKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKG1hdGNoWzBd
ICYmIG1hdGNoWzBdID09IHBhdGggJiYgcm91dGVzW3JdW21ldGhvZF0pIHtcbiAgICAgICAgbmV4
dCA9IFsgWyByb3V0ZXNbcl0uYmVmb3JlLCByb3V0ZXNbcl1bbWV0aG9kXSBdLmZpbHRlcihCb29s
ZWFuKSBdO1xuICAgICAgICBuZXh0LmFmdGVyID0gWyByb3V0ZXNbcl0uYWZ0ZXIgXS5maWx0ZXIo
Qm9vbGVhbik7XG4gICAgICAgIG5leHQubWF0Y2hlZCA9IHRydWU7XG4gICAgICAgIG5leHQuY2Fw
dHVyZXMgPSBtYXRjaC5zbGljZSgxKTtcbiAgICAgICAgaWYgKHRoaXMucmVjdXJzZSAmJiByb3V0
ZXMgPT09IHRoaXMucm91dGVzKSB7XG4gICAgICAgICAgbmV4dC5wdXNoKFsgcm91dGVzLmJlZm9y
ZSwgcm91dGVzLm9uIF0uZmlsdGVyKEJvb2xlYW4pKTtcbiAgICAgICAgICBuZXh0LmFmdGVyID0g
bmV4dC5hZnRlci5jb25jYXQoWyByb3V0ZXMuYWZ0ZXIgXS5maWx0ZXIoQm9vbGVhbikpO1xuICAg
ICAgICB9XG4gICAgICAgIHJldHVybiBmaWx0ZXJSb3V0ZXMobmV4dCk7XG4gICAgICB9XG4gICAg
ICBuZXh0ID0gdGhpcy50cmF2ZXJzZShtZXRob2QsIHBhdGgsIHJvdXRlc1tyXSwgY3VycmVudCk7
XG4gICAgICBpZiAobmV4dC5tYXRjaGVkKSB7XG4gICAgICAgIGlmIChuZXh0Lmxlbmd0aCA+IDAp
IHtcbiAgICAgICAgICBmbnMgPSBmbnMuY29uY2F0KG5leHQpO1xuICAgICAgICB9XG4gICAgICAg
IGlmICh0aGlzLnJlY3Vyc2UpIHtcbiAgICAgICAgICBmbnMucHVzaChbIHJvdXRlc1tyXS5iZWZv
cmUsIHJvdXRlc1tyXS5vbiBdLmZpbHRlcihCb29sZWFuKSk7XG4gICAgICAgICAgbmV4dC5hZnRl
ciA9IG5leHQuYWZ0ZXIuY29uY2F0KFsgcm91dGVzW3JdLmFmdGVyIF0uZmlsdGVyKEJvb2xlYW4p
KTtcbiAgICAgICAgICBpZiAocm91dGVzID09PSB0aGlzLnJvdXRlcykge1xuICAgICAgICAgICAg
Zm5zLnB1c2goWyByb3V0ZXNbXCJiZWZvcmVcIl0sIHJvdXRlc1tcIm9uXCJdIF0uZmlsdGVyKEJv
b2xlYW4pKTtcbiAgICAgICAgICAgIG5leHQuYWZ0ZXIgPSBuZXh0LmFmdGVyLmNvbmNhdChbIHJv
dXRlc1tcImFmdGVyXCJdIF0uZmlsdGVyKEJvb2xlYW4pKTtcbiAgICAgICAgICB9XG4gICAgICAg
IH1cbiAgICAgICAgZm5zLm1hdGNoZWQgPSB0cnVlO1xuICAgICAgICBmbnMuY2FwdHVyZXMgPSBu
ZXh0LmNhcHR1cmVzO1xuICAgICAgICBmbnMuYWZ0ZXIgPSBuZXh0LmFmdGVyO1xuICAgICAgICBy
ZXR1cm4gZmlsdGVyUm91dGVzKGZucyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBm
YWxzZTtcbn07XG5cblJvdXRlci5wcm90b3R5cGUuaW5zZXJ0ID0gZnVuY3Rpb24obWV0aG9kLCBw
YXRoLCByb3V0ZSwgcGFyZW50KSB7XG4gIHZhciBtZXRob2RUeXBlLCBwYXJlbnRUeXBlLCBpc0Fy
cmF5LCBuZXN0ZWQsIHBhcnQ7XG4gIHBhdGggPSBwYXRoLmZpbHRlcihmdW5jdGlvbihwKSB7XG4g
ICAgcmV0dXJuIHAgJiYgcC5sZW5ndGggPiAwO1xuICB9KTtcbiAgcGFyZW50ID0gcGFyZW50IHx8
IHRoaXMucm91dGVzO1xuICBwYXJ0ID0gcGF0aC5zaGlmdCgpO1xuICBpZiAoL1xcOnxcXCovLnRl
c3QocGFydCkgJiYgIS9cXFxcZHxcXFxcdy8udGVzdChwYXJ0KSkge1xuICAgIHBhcnQgPSByZWdp
ZnlTdHJpbmcocGFydCwgdGhpcy5wYXJhbXMpO1xuICB9XG4gIGlmIChwYXRoLmxlbmd0aCA+IDAp
IHtcbiAgICBwYXJlbnRbcGFydF0gPSBwYXJlbnRbcGFydF0gfHwge307XG4gICAgcmV0dXJuIHRo
aXMuaW5zZXJ0KG1ldGhvZCwgcGF0aCwgcm91dGUsIHBhcmVudFtwYXJ0XSk7XG4gIH1cbiAgaWYg
KCFwYXJ0ICYmICFwYXRoLmxlbmd0aCAmJiBwYXJlbnQgPT09IHRoaXMucm91dGVzKSB7XG4gICAg
bWV0aG9kVHlwZSA9IHR5cGVvZiBwYXJlbnRbbWV0aG9kXTtcbiAgICBzd2l0Y2ggKG1ldGhvZFR5
cGUpIHtcbiAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICBwYXJlbnRbbWV0aG9kXSA9IFsg
cGFyZW50W21ldGhvZF0sIHJvdXRlIF07XG4gICAgICByZXR1cm47XG4gICAgIGNhc2UgXCJvYmpl
Y3RcIjpcbiAgICAgIHBhcmVudFttZXRob2RdLnB1c2gocm91dGUpO1xuICAgICAgcmV0dXJuO1xu
ICAgICBjYXNlIFwidW5kZWZpbmVkXCI6XG4gICAgICBwYXJlbnRbbWV0aG9kXSA9IHJvdXRlO1xu
ICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cbiAgcGFyZW50VHlwZSA9IHR5
cGVvZiBwYXJlbnRbcGFydF07XG4gIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KHBhcmVudFtwYXJ0
XSk7XG4gIGlmIChwYXJlbnRbcGFydF0gJiYgIWlzQXJyYXkgJiYgcGFyZW50VHlwZSA9PSBcIm9i
amVjdFwiKSB7XG4gICAgbWV0aG9kVHlwZSA9IHR5cGVvZiBwYXJlbnRbcGFydF1bbWV0aG9kXTtc
biAgICBzd2l0Y2ggKG1ldGhvZFR5cGUpIHtcbiAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAg
ICBwYXJlbnRbcGFydF1bbWV0aG9kXSA9IFsgcGFyZW50W3BhcnRdW21ldGhvZF0sIHJvdXRlIF07
XG4gICAgICByZXR1cm47XG4gICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgIHBhcmVudFtwYXJ0
XVttZXRob2RdLnB1c2gocm91dGUpO1xuICAgICAgcmV0dXJuO1xuICAgICBjYXNlIFwidW5kZWZp
bmVkXCI6XG4gICAgICBwYXJlbnRbcGFydF1bbWV0aG9kXSA9IHJvdXRlO1xuICAgICAgcmV0dXJu
O1xuICAgIH1cbiAgfSBlbHNlIGlmIChwYXJlbnRUeXBlID09IFwidW5kZWZpbmVkXCIpIHtcbiAg
ICBuZXN0ZWQgPSB7fTtcbiAgICBuZXN0ZWRbbWV0aG9kXSA9IHJvdXRlO1xuICAgIHBhcmVudFtw
YXJ0XSA9IG5lc3RlZDtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwiSW52
YWxpZCByb3V0ZSBjb250ZXh0OiBcIiArIHBhcmVudFR5cGUpO1xufTtcblxuXG5cblJvdXRlci5w
cm90b3R5cGUuZXh0ZW5kID0gZnVuY3Rpb24obWV0aG9kcykge1xuICB2YXIgc2VsZiA9IHRoaXMs
IGxlbiA9IG1ldGhvZHMubGVuZ3RoLCBpO1xuICBmdW5jdGlvbiBleHRlbmQobWV0aG9kKSB7XG4g
ICAgc2VsZi5fbWV0aG9kc1ttZXRob2RdID0gdHJ1ZTtcbiAgICBzZWxmW21ldGhvZF0gPSBmdW5j
dGlvbigpIHtcbiAgICAgIHZhciBleHRyYSA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBbIG1l
dGhvZCwgXCJcIiBdIDogWyBtZXRob2QgXTtcbiAgICAgIHNlbGYub24uYXBwbHkoc2VsZiwgZXh0
cmEuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpKTtcbiAgICB9
O1xuICB9XG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGV4dGVuZChtZXRob2Rz
W2ldKTtcbiAgfVxufTtcblxuUm91dGVyLnByb3RvdHlwZS5ydW5saXN0ID0gZnVuY3Rpb24oZm5z
KSB7XG4gIHZhciBydW5saXN0ID0gdGhpcy5ldmVyeSAmJiB0aGlzLmV2ZXJ5LmJlZm9yZSA/IFsg
dGhpcy5ldmVyeS5iZWZvcmUgXS5jb25jYXQoX2ZsYXR0ZW4oZm5zKSkgOiBfZmxhdHRlbihmbnMp
O1xuICBpZiAodGhpcy5ldmVyeSAmJiB0aGlzLmV2ZXJ5Lm9uKSB7XG4gICAgcnVubGlzdC5wdXNo
KHRoaXMuZXZlcnkub24pO1xuICB9XG4gIHJ1bmxpc3QuY2FwdHVyZXMgPSBmbnMuY2FwdHVyZXM7
XG4gIHJ1bmxpc3Quc291cmNlID0gZm5zLnNvdXJjZTtcbiAgcmV0dXJuIHJ1bmxpc3Q7XG59O1xu
XG5Sb3V0ZXIucHJvdG90eXBlLm1vdW50ID0gZnVuY3Rpb24ocm91dGVzLCBwYXRoKSB7XG4gIGlm
ICghcm91dGVzIHx8IHR5cGVvZiByb3V0ZXMgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJh
eShyb3V0ZXMpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBzZWxmID0gdGhpcztcbiAgcGF0
aCA9IHBhdGggfHwgW107XG4gIGlmICghQXJyYXkuaXNBcnJheShwYXRoKSkge1xuICAgIHBhdGgg
PSBwYXRoLnNwbGl0KHNlbGYuZGVsaW1pdGVyKTtcbiAgfVxuICBmdW5jdGlvbiBpbnNlcnRPck1v
dW50KHJvdXRlLCBsb2NhbCkge1xuICAgIHZhciByZW5hbWUgPSByb3V0ZSwgcGFydHMgPSByb3V0
ZS5zcGxpdChzZWxmLmRlbGltaXRlciksIHJvdXRlVHlwZSA9IHR5cGVvZiByb3V0ZXNbcm91dGVd
LCBpc1JvdXRlID0gcGFydHNbMF0gPT09IFwiXCIgfHwgIXNlbGYuX21ldGhvZHNbcGFydHNbMF1d
LCBldmVudCA9IGlzUm91dGUgPyBcIm9uXCIgOiByZW5hbWU7XG4gICAgaWYgKGlzUm91dGUpIHtc
biAgICAgIHJlbmFtZSA9IHJlbmFtZS5zbGljZSgocmVuYW1lLm1hdGNoKG5ldyBSZWdFeHAoXCJe
XCIgKyBzZWxmLmRlbGltaXRlcikpIHx8IFsgXCJcIiBdKVswXS5sZW5ndGgpO1xuICAgICAgcGFy
dHMuc2hpZnQoKTtcbiAgICB9XG4gICAgaWYgKGlzUm91dGUgJiYgcm91dGVUeXBlID09PSBcIm9i
amVjdFwiICYmICFBcnJheS5pc0FycmF5KHJvdXRlc1tyb3V0ZV0pKSB7XG4gICAgICBsb2NhbCA9
IGxvY2FsLmNvbmNhdChwYXJ0cyk7XG4gICAgICBzZWxmLm1vdW50KHJvdXRlc1tyb3V0ZV0sIGxv
Y2FsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGlzUm91dGUpIHtcbiAgICAgIGxv
Y2FsID0gbG9jYWwuY29uY2F0KHJlbmFtZS5zcGxpdChzZWxmLmRlbGltaXRlcikpO1xuICAgICAg
bG9jYWwgPSB0ZXJtaW5hdG9yKGxvY2FsLCBzZWxmLmRlbGltaXRlcik7XG4gICAgfVxuICAgIHNl
bGYuaW5zZXJ0KGV2ZW50LCBsb2NhbCwgcm91dGVzW3JvdXRlXSk7XG4gIH1cbiAgZm9yICh2YXIg
cm91dGUgaW4gcm91dGVzKSB7XG4gICAgaWYgKHJvdXRlcy5oYXNPd25Qcm9wZXJ0eShyb3V0ZSkp
IHtcbiAgICAgIGluc2VydE9yTW91bnQocm91dGUsIHBhdGguc2xpY2UoMCkpO1xuICAgIH1cbiAg
fVxufTtcblxuXG5cbn0oIHRydWUgPyBleHBvcnRzIDogd2luZG93KSk7XG5cbi8qKiovIH0pLFxu
XG4vKioqLyBcInRUVmtcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxu
LyoqXG4gKiBUcmFuc2xhdGVzIHRoZSBsaXN0IGZvcm1hdCBwcm9kdWNlZCBieSBjc3MtbG9hZGVy
IGludG8gc29tZXRoaW5nXG4gKiBlYXNpZXIgdG8gbWFuaXB1bGF0ZS5cbiAqL1xubW9kdWxlLmV4
cG9ydHMgPSBmdW5jdGlvbiBsaXN0VG9TdHlsZXMgKHBhcmVudElkLCBsaXN0KSB7XG4gIHZhciBz
dHlsZXMgPSBbXVxuICB2YXIgbmV3U3R5bGVzID0ge31cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBs
aXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGl0ZW0gPSBsaXN0W2ldXG4gICAgdmFyIGlkID0g
aXRlbVswXVxuICAgIHZhciBjc3MgPSBpdGVtWzFdXG4gICAgdmFyIG1lZGlhID0gaXRlbVsyXVxu
ICAgIHZhciBzb3VyY2VNYXAgPSBpdGVtWzNdXG4gICAgdmFyIHBhcnQgPSB7XG4gICAgICBpZDog
cGFyZW50SWQgKyAnOicgKyBpLFxuICAgICAgY3NzOiBjc3MsXG4gICAgICBtZWRpYTogbWVkaWEs
XG4gICAgICBzb3VyY2VNYXA6IHNvdXJjZU1hcFxuICAgIH1cbiAgICBpZiAoIW5ld1N0eWxlc1tp
ZF0pIHtcbiAgICAgIHN0eWxlcy5wdXNoKG5ld1N0eWxlc1tpZF0gPSB7IGlkOiBpZCwgcGFydHM6
IFtwYXJ0XSB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdTdHlsZXNbaWRdLnBhcnRzLnB1c2go
cGFydClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN0eWxlc1xufVxuXG5cbi8qKiovIH0pXG5cbn0p
O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBzdGF0aWMvanMvdmVuZG9yLmU3MDA4MDAx
YThiZWQwMDliYmYxLmpzIiwiLyohXG4gKiBWdWUuanMgdjIuNC4yXG4gKiAoYykgMjAxNC0yMDE3
IEV2YW4gWW91XG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKi9cbi8qICAq
L1xuXG4vLyB0aGVzZSBoZWxwZXJzIHByb2R1Y2VzIGJldHRlciB2bSBjb2RlIGluIEpTIGVuZ2lu
ZXMgZHVlIHRvIHRoZWlyXG4vLyBleHBsaWNpdG5lc3MgYW5kIGZ1bmN0aW9uIGlubGluaW5nXG5m
dW5jdGlvbiBpc1VuZGVmICh2KSB7XG4gIHJldHVybiB2ID09PSB1bmRlZmluZWQgfHwgdiA9PT0g
bnVsbFxufVxuXG5mdW5jdGlvbiBpc0RlZiAodikge1xuICByZXR1cm4gdiAhPT0gdW5kZWZpbmVk
ICYmIHYgIT09IG51bGxcbn1cblxuZnVuY3Rpb24gaXNUcnVlICh2KSB7XG4gIHJldHVybiB2ID09
PSB0cnVlXG59XG5cbmZ1bmN0aW9uIGlzRmFsc2UgKHYpIHtcbiAgcmV0dXJuIHYgPT09IGZhbHNl
XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdmFsdWUgaXMgcHJpbWl0aXZlXG4gKi9cbmZ1bmN0aW9u
IGlzUHJpbWl0aXZlICh2YWx1ZSkge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB2YWx1ZSA9PT0g
J3N0cmluZycgfHxcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8XG4gICAgdHlwZW9m
IHZhbHVlID09PSAnYm9vbGVhbidcbiAgKVxufVxuXG4vKipcbiAqIFF1aWNrIG9iamVjdCBjaGVj
ayAtIHRoaXMgaXMgcHJpbWFyaWx5IHVzZWQgdG8gdGVsbFxuICogT2JqZWN0cyBmcm9tIHByaW1p
dGl2ZSB2YWx1ZXMgd2hlbiB3ZSBrbm93IHRoZSB2YWx1ZVxuICogaXMgYSBKU09OLWNvbXBsaWFu
dCB0eXBlLlxuICovXG5mdW5jdGlvbiBpc09iamVjdCAob2JqKSB7XG4gIHJldHVybiBvYmogIT09
IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCdcbn1cblxudmFyIF90b1N0cmluZyA9IE9i
amVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8qKlxuICogU3RyaWN0IG9iamVjdCB0eXBlIGNo
ZWNrLiBPbmx5IHJldHVybnMgdHJ1ZVxuICogZm9yIHBsYWluIEphdmFTY3JpcHQgb2JqZWN0cy5c
biAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCAob2JqKSB7XG4gIHJldHVybiBfdG9TdHJpbmcu
Y2FsbChvYmopID09PSAnW29iamVjdCBPYmplY3RdJ1xufVxuXG5mdW5jdGlvbiBpc1JlZ0V4cCAo
dikge1xuICByZXR1cm4gX3RvU3RyaW5nLmNhbGwodikgPT09ICdbb2JqZWN0IFJlZ0V4cF0nXG59
XG5cbi8qKlxuICogQ2hlY2sgaWYgdmFsIGlzIGEgdmFsaWQgYXJyYXkgaW5kZXguXG4gKi9cbmZ1
bmN0aW9uIGlzVmFsaWRBcnJheUluZGV4ICh2YWwpIHtcbiAgdmFyIG4gPSBwYXJzZUZsb2F0KHZh
bCk7XG4gIHJldHVybiBuID49IDAgJiYgTWF0aC5mbG9vcihuKSA9PT0gbiAmJiBpc0Zpbml0ZSh2
YWwpXG59XG5cbi8qKlxuICogQ29udmVydCBhIHZhbHVlIHRvIGEgc3RyaW5nIHRoYXQgaXMgYWN0
dWFsbHkgcmVuZGVyZWQuXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nICh2YWwpIHtcbiAgcmV0dXJu
IHZhbCA9PSBudWxsXG4gICAgPyAnJ1xuICAgIDogdHlwZW9mIHZhbCA9PT0gJ29iamVjdCdcbiAg
ICAgID8gSlNPTi5zdHJpbmdpZnkodmFsLCBudWxsLCAyKVxuICAgICAgOiBTdHJpbmcodmFsKVxu
fVxuXG4vKipcbiAqIENvbnZlcnQgYSBpbnB1dCB2YWx1ZSB0byBhIG51bWJlciBmb3IgcGVyc2lz
dGVuY2UuXG4gKiBJZiB0aGUgY29udmVyc2lvbiBmYWlscywgcmV0dXJuIG9yaWdpbmFsIHN0cmlu
Zy5cbiAqL1xuZnVuY3Rpb24gdG9OdW1iZXIgKHZhbCkge1xuICB2YXIgbiA9IHBhcnNlRmxvYXQo
dmFsKTtcbiAgcmV0dXJuIGlzTmFOKG4pID8gdmFsIDogblxufVxuXG4vKipcbiAqIE1ha2UgYSBt
YXAgYW5kIHJldHVybiBhIGZ1bmN0aW9uIGZvciBjaGVja2luZyBpZiBhIGtleVxuICogaXMgaW4g
dGhhdCBtYXAuXG4gKi9cbmZ1bmN0aW9uIG1ha2VNYXAgKFxuICBzdHIsXG4gIGV4cGVjdHNMb3dl
ckNhc2Vcbikge1xuICB2YXIgbWFwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgdmFyIGxpc3Qg
PSBzdHIuc3BsaXQoJywnKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsr
KSB7XG4gICAgbWFwW2xpc3RbaV1dID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZXhwZWN0c0xvd2Vy
Q2FzZVxuICAgID8gZnVuY3Rpb24gKHZhbCkgeyByZXR1cm4gbWFwW3ZhbC50b0xvd2VyQ2FzZSgp
XTsgfVxuICAgIDogZnVuY3Rpb24gKHZhbCkgeyByZXR1cm4gbWFwW3ZhbF07IH1cbn1cblxuLyoq
XG4gKiBDaGVjayBpZiBhIHRhZyBpcyBhIGJ1aWx0LWluIHRhZy5cbiAqL1xudmFyIGlzQnVpbHRJ
blRhZyA9IG1ha2VNYXAoJ3Nsb3QsY29tcG9uZW50JywgdHJ1ZSk7XG5cbi8qKlxuICogQ2hlY2sg
aWYgYSBhdHRyaWJ1dGUgaXMgYSByZXNlcnZlZCBhdHRyaWJ1dGUuXG4gKi9cbnZhciBpc1Jlc2Vy
dmVkQXR0cmlidXRlID0gbWFrZU1hcCgna2V5LHJlZixzbG90LGlzJyk7XG5cbi8qKlxuICogUmVt
b3ZlIGFuIGl0ZW0gZnJvbSBhbiBhcnJheVxuICovXG5mdW5jdGlvbiByZW1vdmUgKGFyciwgaXRl
bSkge1xuICBpZiAoYXJyLmxlbmd0aCkge1xuICAgIHZhciBpbmRleCA9IGFyci5pbmRleE9mKGl0
ZW0pO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICByZXR1cm4gYXJyLnNwbGljZShpbmRl
eCwgMSlcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBvYmplY3Qg
aGFzIHRoZSBwcm9wZXJ0eS5cbiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3Rv
dHlwZS5oYXNPd25Qcm9wZXJ0eTtcbmZ1bmN0aW9uIGhhc093biAob2JqLCBrZXkpIHtcbiAgcmV0
dXJuIGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpXG59XG5cbi8qKlxuICogQ3JlYXRlIGEg
Y2FjaGVkIHZlcnNpb24gb2YgYSBwdXJlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjYWNoZWQg
KGZuKSB7XG4gIHZhciBjYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHJldHVybiAoZnVu
Y3Rpb24gY2FjaGVkRm4gKHN0cikge1xuICAgIHZhciBoaXQgPSBjYWNoZVtzdHJdO1xuICAgIHJl
dHVybiBoaXQgfHwgKGNhY2hlW3N0cl0gPSBmbihzdHIpKVxuICB9KVxufVxuXG4vKipcbiAqIENh
bWVsaXplIGEgaHlwaGVuLWRlbGltaXRlZCBzdHJpbmcuXG4gKi9cbnZhciBjYW1lbGl6ZVJFID0g
Ly0oXFx3KS9nO1xudmFyIGNhbWVsaXplID0gY2FjaGVkKGZ1bmN0aW9uIChzdHIpIHtcbiAgcmV0
dXJuIHN0ci5yZXBsYWNlKGNhbWVsaXplUkUsIGZ1bmN0aW9uIChfLCBjKSB7IHJldHVybiBjID8g
Yy50b1VwcGVyQ2FzZSgpIDogJyc7IH0pXG59KTtcblxuLyoqXG4gKiBDYXBpdGFsaXplIGEgc3Ry
aW5nLlxuICovXG52YXIgY2FwaXRhbGl6ZSA9IGNhY2hlZChmdW5jdGlvbiAoc3RyKSB7XG4gIHJl
dHVybiBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSlcbn0pO1xuXG4v
KipcbiAqIEh5cGhlbmF0ZSBhIGNhbWVsQ2FzZSBzdHJpbmcuXG4gKi9cbnZhciBoeXBoZW5hdGVS
RSA9IC8oW14tXSkoW0EtWl0pL2c7XG52YXIgaHlwaGVuYXRlID0gY2FjaGVkKGZ1bmN0aW9uIChz
dHIpIHtcbiAgcmV0dXJuIHN0clxuICAgIC5yZXBsYWNlKGh5cGhlbmF0ZVJFLCAnJDEtJDInKVxu
ICAgIC5yZXBsYWNlKGh5cGhlbmF0ZVJFLCAnJDEtJDInKVxuICAgIC50b0xvd2VyQ2FzZSgpXG59
KTtcblxuLyoqXG4gKiBTaW1wbGUgYmluZCwgZmFzdGVyIHRoYW4gbmF0aXZlXG4gKi9cbmZ1bmN0
aW9uIGJpbmQgKGZuLCBjdHgpIHtcbiAgZnVuY3Rpb24gYm91bmRGbiAoYSkge1xuICAgIHZhciBs
ID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICByZXR1cm4gbFxuICAgICAgPyBsID4gMVxuICAgICAg
ICA/IGZuLmFwcGx5KGN0eCwgYXJndW1lbnRzKVxuICAgICAgICA6IGZuLmNhbGwoY3R4LCBhKVxu
ICAgICAgOiBmbi5jYWxsKGN0eClcbiAgfVxuICAvLyByZWNvcmQgb3JpZ2luYWwgZm4gbGVuZ3Ro
XG4gIGJvdW5kRm4uX2xlbmd0aCA9IGZuLmxlbmd0aDtcbiAgcmV0dXJuIGJvdW5kRm5cbn1cblxu
LyoqXG4gKiBDb252ZXJ0IGFuIEFycmF5LWxpa2Ugb2JqZWN0IHRvIGEgcmVhbCBBcnJheS5cbiAq
L1xuZnVuY3Rpb24gdG9BcnJheSAobGlzdCwgc3RhcnQpIHtcbiAgc3RhcnQgPSBzdGFydCB8fCAw
O1xuICB2YXIgaSA9IGxpc3QubGVuZ3RoIC0gc3RhcnQ7XG4gIHZhciByZXQgPSBuZXcgQXJyYXko
aSk7XG4gIHdoaWxlIChpLS0pIHtcbiAgICByZXRbaV0gPSBsaXN0W2kgKyBzdGFydF07XG4gIH1c
biAgcmV0dXJuIHJldFxufVxuXG4vKipcbiAqIE1peCBwcm9wZXJ0aWVzIGludG8gdGFyZ2V0IG9i
amVjdC5cbiAqL1xuZnVuY3Rpb24gZXh0ZW5kICh0bywgX2Zyb20pIHtcbiAgZm9yICh2YXIga2V5
IGluIF9mcm9tKSB7XG4gICAgdG9ba2V5XSA9IF9mcm9tW2tleV07XG4gIH1cbiAgcmV0dXJuIHRv
XG59XG5cbi8qKlxuICogTWVyZ2UgYW4gQXJyYXkgb2YgT2JqZWN0cyBpbnRvIGEgc2luZ2xlIE9i
amVjdC5cbiAqL1xuZnVuY3Rpb24gdG9PYmplY3QgKGFycikge1xuICB2YXIgcmVzID0ge307XG4g
IGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGFycltpXSkg
e1xuICAgICAgZXh0ZW5kKHJlcywgYXJyW2ldKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xu
fVxuXG4vKipcbiAqIFBlcmZvcm0gbm8gb3BlcmF0aW9uLlxuICogU3R1YmJpbmcgYXJncyB0byBt
YWtlIEZsb3cgaGFwcHkgd2l0aG91dCBsZWF2aW5nIHVzZWxlc3MgdHJhbnNwaWxlZCBjb2RlXG4g
KiB3aXRoIC4uLnJlc3QgKGh0dHBzOi8vZmxvdy5vcmcvYmxvZy8yMDE3LzA1LzA3L1N0cmljdC1G
dW5jdGlvbi1DYWxsLUFyaXR5LylcbiAqL1xuZnVuY3Rpb24gbm9vcCAoYSwgYiwgYykge31cblxu
LyoqXG4gKiBBbHdheXMgcmV0dXJuIGZhbHNlLlxuICovXG52YXIgbm8gPSBmdW5jdGlvbiAoYSwg
YiwgYykgeyByZXR1cm4gZmFsc2U7IH07XG5cbi8qKlxuICogUmV0dXJuIHNhbWUgdmFsdWVcbiAq
L1xudmFyIGlkZW50aXR5ID0gZnVuY3Rpb24gKF8pIHsgcmV0dXJuIF87IH07XG5cbi8qKlxuICog
R2VuZXJhdGUgYSBzdGF0aWMga2V5cyBzdHJpbmcgZnJvbSBjb21waWxlciBtb2R1bGVzLlxuICov
XG5mdW5jdGlvbiBnZW5TdGF0aWNLZXlzIChtb2R1bGVzKSB7XG4gIHJldHVybiBtb2R1bGVzLnJl
ZHVjZShmdW5jdGlvbiAoa2V5cywgbSkge1xuICAgIHJldHVybiBrZXlzLmNvbmNhdChtLnN0YXRp
Y0tleXMgfHwgW10pXG4gIH0sIFtdKS5qb2luKCcsJylcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0
d28gdmFsdWVzIGFyZSBsb29zZWx5IGVxdWFsIC0gdGhhdCBpcyxcbiAqIGlmIHRoZXkgYXJlIHBs
YWluIG9iamVjdHMsIGRvIHRoZXkgaGF2ZSB0aGUgc2FtZSBzaGFwZT9cbiAqL1xuZnVuY3Rpb24g
bG9vc2VFcXVhbCAoYSwgYikge1xuICBpZiAoYSA9PT0gYikgeyByZXR1cm4gdHJ1ZSB9XG4gIHZh
ciBpc09iamVjdEEgPSBpc09iamVjdChhKTtcbiAgdmFyIGlzT2JqZWN0QiA9IGlzT2JqZWN0KGIp
O1xuICBpZiAoaXNPYmplY3RBICYmIGlzT2JqZWN0Qikge1xuICAgIHRyeSB7XG4gICAgICB2YXIg
aXNBcnJheUEgPSBBcnJheS5pc0FycmF5KGEpO1xuICAgICAgdmFyIGlzQXJyYXlCID0gQXJyYXku
aXNBcnJheShiKTtcbiAgICAgIGlmIChpc0FycmF5QSAmJiBpc0FycmF5Qikge1xuICAgICAgICBy
ZXR1cm4gYS5sZW5ndGggPT09IGIubGVuZ3RoICYmIGEuZXZlcnkoZnVuY3Rpb24gKGUsIGkpIHtc
biAgICAgICAgICByZXR1cm4gbG9vc2VFcXVhbChlLCBiW2ldKVxuICAgICAgICB9KVxuICAgICAg
fSBlbHNlIGlmICghaXNBcnJheUEgJiYgIWlzQXJyYXlCKSB7XG4gICAgICAgIHZhciBrZXlzQSA9
IE9iamVjdC5rZXlzKGEpO1xuICAgICAgICB2YXIga2V5c0IgPSBPYmplY3Qua2V5cyhiKTtcbiAg
ICAgICAgcmV0dXJuIGtleXNBLmxlbmd0aCA9PT0ga2V5c0IubGVuZ3RoICYmIGtleXNBLmV2ZXJ5
KGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICByZXR1cm4gbG9vc2VFcXVhbChhW2tleV0sIGJb
a2V5XSlcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGln
bm9yZSBuZXh0ICovXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH0gY2F0Y2gg
KGUpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICByZXR1cm4gZmFs
c2VcbiAgICB9XG4gIH0gZWxzZSBpZiAoIWlzT2JqZWN0QSAmJiAhaXNPYmplY3RCKSB7XG4gICAg
cmV0dXJuIFN0cmluZyhhKSA9PT0gU3RyaW5nKGIpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZh
bHNlXG4gIH1cbn1cblxuZnVuY3Rpb24gbG9vc2VJbmRleE9mIChhcnIsIHZhbCkge1xuICBmb3Ig
KHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgIGlmIChsb29zZUVxdWFsKGFy
cltpXSwgdmFsKSkgeyByZXR1cm4gaSB9XG4gIH1cbiAgcmV0dXJuIC0xXG59XG5cbi8qKlxuICog
RW5zdXJlIGEgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgb25jZS5cbiAqL1xuZnVuY3Rpb24gb25j
ZSAoZm4pIHtcbiAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xu
ICAgIGlmICghY2FsbGVkKSB7XG4gICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgZm4uYXBwbHko
dGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIFNTUl9BVFRSID0gJ2RhdGEt
c2VydmVyLXJlbmRlcmVkJztcblxudmFyIEFTU0VUX1RZUEVTID0gW1xuICAnY29tcG9uZW50Jyxc
biAgJ2RpcmVjdGl2ZScsXG4gICdmaWx0ZXInXG5dO1xuXG52YXIgTElGRUNZQ0xFX0hPT0tTID0g
W1xuICAnYmVmb3JlQ3JlYXRlJyxcbiAgJ2NyZWF0ZWQnLFxuICAnYmVmb3JlTW91bnQnLFxuICAn
bW91bnRlZCcsXG4gICdiZWZvcmVVcGRhdGUnLFxuICAndXBkYXRlZCcsXG4gICdiZWZvcmVEZXN0
cm95JyxcbiAgJ2Rlc3Ryb3llZCcsXG4gICdhY3RpdmF0ZWQnLFxuICAnZGVhY3RpdmF0ZWQnXG5d
O1xuXG4vKiAgKi9cblxudmFyIGNvbmZpZyA9ICh7XG4gIC8qKlxuICAgKiBPcHRpb24gbWVyZ2Ug
c3RyYXRlZ2llcyAodXNlZCBpbiBjb3JlL3V0aWwvb3B0aW9ucylcbiAgICovXG4gIG9wdGlvbk1l
cmdlU3RyYXRlZ2llczogT2JqZWN0LmNyZWF0ZShudWxsKSxcblxuICAvKipcbiAgICogV2hldGhl
ciB0byBzdXBwcmVzcyB3YXJuaW5ncy5cbiAgICovXG4gIHNpbGVudDogZmFsc2UsXG5cbiAgLyoq
XG4gICAqIFNob3cgcHJvZHVjdGlvbiBtb2RlIHRpcCBtZXNzYWdlIG9uIGJvb3Q/XG4gICAqL1xu
ICBwcm9kdWN0aW9uVGlwOiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nLFxu
XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGVuYWJsZSBkZXZ0b29sc1xuICAgKi9cbiAgZGV2dG9v
bHM6IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicsXG5cbiAgLyoqXG4gICAq
IFdoZXRoZXIgdG8gcmVjb3JkIHBlcmZcbiAgICovXG4gIHBlcmZvcm1hbmNlOiBmYWxzZSxcblxu
ICAvKipcbiAgICogRXJyb3IgaGFuZGxlciBmb3Igd2F0Y2hlciBlcnJvcnNcbiAgICovXG4gIGVy
cm9ySGFuZGxlcjogbnVsbCxcblxuICAvKipcbiAgICogV2FybiBoYW5kbGVyIGZvciB3YXRjaGVy
IHdhcm5zXG4gICAqL1xuICB3YXJuSGFuZGxlcjogbnVsbCxcblxuICAvKipcbiAgICogSWdub3Jl
IGNlcnRhaW4gY3VzdG9tIGVsZW1lbnRzXG4gICAqL1xuICBpZ25vcmVkRWxlbWVudHM6IFtdLFxu
XG4gIC8qKlxuICAgKiBDdXN0b20gdXNlciBrZXkgYWxpYXNlcyBmb3Igdi1vblxuICAgKi9cbiAg
a2V5Q29kZXM6IE9iamVjdC5jcmVhdGUobnVsbCksXG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEg
dGFnIGlzIHJlc2VydmVkIHNvIHRoYXQgaXQgY2Fubm90IGJlIHJlZ2lzdGVyZWQgYXMgYVxuICAg
KiBjb21wb25lbnQuIFRoaXMgaXMgcGxhdGZvcm0tZGVwZW5kZW50IGFuZCBtYXkgYmUgb3Zlcndy
aXR0ZW4uXG4gICAqL1xuICBpc1Jlc2VydmVkVGFnOiBubyxcblxuICAvKipcbiAgICogQ2hlY2sg
aWYgYW4gYXR0cmlidXRlIGlzIHJlc2VydmVkIHNvIHRoYXQgaXQgY2Fubm90IGJlIHVzZWQgYXMg
YSBjb21wb25lbnRcbiAgICogcHJvcC4gVGhpcyBpcyBwbGF0Zm9ybS1kZXBlbmRlbnQgYW5kIG1h
eSBiZSBvdmVyd3JpdHRlbi5cbiAgICovXG4gIGlzUmVzZXJ2ZWRBdHRyOiBubyxcblxuICAvKipc
biAgICogQ2hlY2sgaWYgYSB0YWcgaXMgYW4gdW5rbm93biBlbGVtZW50LlxuICAgKiBQbGF0Zm9y
bS1kZXBlbmRlbnQuXG4gICAqL1xuICBpc1Vua25vd25FbGVtZW50OiBubyxcblxuICAvKipcbiAg
ICogR2V0IHRoZSBuYW1lc3BhY2Ugb2YgYW4gZWxlbWVudFxuICAgKi9cbiAgZ2V0VGFnTmFtZXNw
YWNlOiBub29wLFxuXG4gIC8qKlxuICAgKiBQYXJzZSB0aGUgcmVhbCB0YWcgbmFtZSBmb3IgdGhl
IHNwZWNpZmljIHBsYXRmb3JtLlxuICAgKi9cbiAgcGFyc2VQbGF0Zm9ybVRhZ05hbWU6IGlkZW50
aXR5LFxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBhdHRyaWJ1dGUgbXVzdCBiZSBib3VuZCB1
c2luZyBwcm9wZXJ0eSwgZS5nLiB2YWx1ZVxuICAgKiBQbGF0Zm9ybS1kZXBlbmRlbnQuXG4gICAq
L1xuICBtdXN0VXNlUHJvcDogbm8sXG5cbiAgLyoqXG4gICAqIEV4cG9zZWQgZm9yIGxlZ2FjeSBy
ZWFzb25zXG4gICAqL1xuICBfbGlmZWN5Y2xlSG9va3M6IExJRkVDWUNMRV9IT09LU1xufSk7XG5c
bi8qICAqL1xuXG52YXIgZW1wdHlPYmplY3QgPSBPYmplY3QuZnJlZXplKHt9KTtcblxuLyoqXG4g
KiBDaGVjayBpZiBhIHN0cmluZyBzdGFydHMgd2l0aCAkIG9yIF9cbiAqL1xuZnVuY3Rpb24gaXNS
ZXNlcnZlZCAoc3RyKSB7XG4gIHZhciBjID0gKHN0ciArICcnKS5jaGFyQ29kZUF0KDApO1xuICBy
ZXR1cm4gYyA9PT0gMHgyNCB8fCBjID09PSAweDVGXG59XG5cbi8qKlxuICogRGVmaW5lIGEgcHJv
cGVydHkuXG4gKi9cbmZ1bmN0aW9uIGRlZiAob2JqLCBrZXksIHZhbCwgZW51bWVyYWJsZSkge1xu
ICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICB2YWx1ZTogdmFsLFxuICAg
IGVudW1lcmFibGU6ICEhZW51bWVyYWJsZSxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBjb25m
aWd1cmFibGU6IHRydWVcbiAgfSk7XG59XG5cbi8qKlxuICogUGFyc2Ugc2ltcGxlIHBhdGguXG4g
Ki9cbnZhciBiYWlsUkUgPSAvW15cXHcuJF0vO1xuZnVuY3Rpb24gcGFyc2VQYXRoIChwYXRoKSB7
XG4gIGlmIChiYWlsUkUudGVzdChwYXRoKSkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciBzZWdt
ZW50cyA9IHBhdGguc3BsaXQoJy4nKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChvYmopIHtcbiAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHNlZ21lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIW9i
aikgeyByZXR1cm4gfVxuICAgICAgb2JqID0gb2JqW3NlZ21lbnRzW2ldXTtcbiAgICB9XG4gICAg
cmV0dXJuIG9ialxuICB9XG59XG5cbi8qICAqL1xuXG52YXIgd2FybiA9IG5vb3A7XG52YXIgdGlw
ID0gbm9vcDtcbnZhciBmb3JtYXRDb21wb25lbnROYW1lID0gKG51bGwpOyAvLyB3b3JrIGFyb3Vu
ZCBmbG93IGNoZWNrXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24n
KSB7XG4gIHZhciBoYXNDb25zb2xlID0gdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnO1xu
ICB2YXIgY2xhc3NpZnlSRSA9IC8oPzpefFstX10pKFxcdykvZztcbiAgdmFyIGNsYXNzaWZ5ID0g
ZnVuY3Rpb24gKHN0cikgeyByZXR1cm4gc3RyXG4gICAgLnJlcGxhY2UoY2xhc3NpZnlSRSwgZnVu
Y3Rpb24gKGMpIHsgcmV0dXJuIGMudG9VcHBlckNhc2UoKTsgfSlcbiAgICAucmVwbGFjZSgvWy1f
XS9nLCAnJyk7IH07XG5cbiAgd2FybiA9IGZ1bmN0aW9uIChtc2csIHZtKSB7XG4gICAgdmFyIHRy
YWNlID0gdm0gPyBnZW5lcmF0ZUNvbXBvbmVudFRyYWNlKHZtKSA6ICcnO1xuXG4gICAgaWYgKGNv
bmZpZy53YXJuSGFuZGxlcikge1xuICAgICAgY29uZmlnLndhcm5IYW5kbGVyLmNhbGwobnVsbCwg
bXNnLCB2bSwgdHJhY2UpO1xuICAgIH0gZWxzZSBpZiAoaGFzQ29uc29sZSAmJiAoIWNvbmZpZy5z
aWxlbnQpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKChcIltWdWUgd2Fybl06IFwiICsgbXNnICsg
dHJhY2UpKTtcbiAgICB9XG4gIH07XG5cbiAgdGlwID0gZnVuY3Rpb24gKG1zZywgdm0pIHtcbiAg
ICBpZiAoaGFzQ29uc29sZSAmJiAoIWNvbmZpZy5zaWxlbnQpKSB7XG4gICAgICBjb25zb2xlLndh
cm4oXCJbVnVlIHRpcF06IFwiICsgbXNnICsgKFxuICAgICAgICB2bSA/IGdlbmVyYXRlQ29tcG9u
ZW50VHJhY2Uodm0pIDogJydcbiAgICAgICkpO1xuICAgIH1cbiAgfTtcblxuICBmb3JtYXRDb21w
b25lbnROYW1lID0gZnVuY3Rpb24gKHZtLCBpbmNsdWRlRmlsZSkge1xuICAgIGlmICh2bS4kcm9v
dCA9PT0gdm0pIHtcbiAgICAgIHJldHVybiAnPFJvb3Q+J1xuICAgIH1cbiAgICB2YXIgbmFtZSA9
IHR5cGVvZiB2bSA9PT0gJ3N0cmluZydcbiAgICAgID8gdm1cbiAgICAgIDogdHlwZW9mIHZtID09
PSAnZnVuY3Rpb24nICYmIHZtLm9wdGlvbnNcbiAgICAgICAgPyB2bS5vcHRpb25zLm5hbWVcbiAg
ICAgICAgOiB2bS5faXNWdWVcbiAgICAgICAgICA/IHZtLiRvcHRpb25zLm5hbWUgfHwgdm0uJG9w
dGlvbnMuX2NvbXBvbmVudFRhZ1xuICAgICAgICAgIDogdm0ubmFtZTtcblxuICAgIHZhciBmaWxl
ID0gdm0uX2lzVnVlICYmIHZtLiRvcHRpb25zLl9fZmlsZTtcbiAgICBpZiAoIW5hbWUgJiYgZmls
ZSkge1xuICAgICAgdmFyIG1hdGNoID0gZmlsZS5tYXRjaCgvKFteL1xcXFxdKylcXC52dWUkLyk7
XG4gICAgICBuYW1lID0gbWF0Y2ggJiYgbWF0Y2hbMV07XG4gICAgfVxuXG4gICAgcmV0dXJuIChc
biAgICAgIChuYW1lID8gKFwiPFwiICsgKGNsYXNzaWZ5KG5hbWUpKSArIFwiPlwiKSA6IFwiPEFu
b255bW91cz5cIikgK1xuICAgICAgKGZpbGUgJiYgaW5jbHVkZUZpbGUgIT09IGZhbHNlID8gKFwi
IGF0IFwiICsgZmlsZSkgOiAnJylcbiAgICApXG4gIH07XG5cbiAgdmFyIHJlcGVhdCA9IGZ1bmN0
aW9uIChzdHIsIG4pIHtcbiAgICB2YXIgcmVzID0gJyc7XG4gICAgd2hpbGUgKG4pIHtcbiAgICAg
IGlmIChuICUgMiA9PT0gMSkgeyByZXMgKz0gc3RyOyB9XG4gICAgICBpZiAobiA+IDEpIHsgc3Ry
ICs9IHN0cjsgfVxuICAgICAgbiA+Pj0gMTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc1xuICB9O1xu
XG4gIHZhciBnZW5lcmF0ZUNvbXBvbmVudFRyYWNlID0gZnVuY3Rpb24gKHZtKSB7XG4gICAgaWYg
KHZtLl9pc1Z1ZSAmJiB2bS4kcGFyZW50KSB7XG4gICAgICB2YXIgdHJlZSA9IFtdO1xuICAgICAg
dmFyIGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZSA9IDA7XG4gICAgICB3aGlsZSAodm0pIHtcbiAg
ICAgICAgaWYgKHRyZWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHZhciBsYXN0ID0gdHJlZVt0
cmVlLmxlbmd0aCAtIDFdO1xuICAgICAgICAgIGlmIChsYXN0LmNvbnN0cnVjdG9yID09PSB2bS5j
b25zdHJ1Y3Rvcikge1xuICAgICAgICAgICAgY3VycmVudFJlY3Vyc2l2ZVNlcXVlbmNlKys7XG4g
ICAgICAgICAgICB2bSA9IHZtLiRwYXJlbnQ7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAg
ICAgIH0gZWxzZSBpZiAoY3VycmVudFJlY3Vyc2l2ZVNlcXVlbmNlID4gMCkge1xuICAgICAgICAg
ICAgdHJlZVt0cmVlLmxlbmd0aCAtIDFdID0gW2xhc3QsIGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5j
ZV07XG4gICAgICAgICAgICBjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2UgPSAwO1xuICAgICAgICAg
IH1cbiAgICAgICAgfVxuICAgICAgICB0cmVlLnB1c2godm0pO1xuICAgICAgICB2bSA9IHZtLiRw
YXJlbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gJ1xcblxcbmZvdW5kIGluXFxuXFxuJyArIHRy
ZWVcbiAgICAgICAgLm1hcChmdW5jdGlvbiAodm0sIGkpIHsgcmV0dXJuIChcIlwiICsgKGkgPT09
IDAgPyAnLS0tPiAnIDogcmVwZWF0KCcgJywgNSArIGkgKiAyKSkgKyAoQXJyYXkuaXNBcnJheSh2
bSlcbiAgICAgICAgICAgID8gKChmb3JtYXRDb21wb25lbnROYW1lKHZtWzBdKSkgKyBcIi4uLiAo
XCIgKyAodm1bMV0pICsgXCIgcmVjdXJzaXZlIGNhbGxzKVwiKVxuICAgICAgICAgICAgOiBmb3Jt
YXRDb21wb25lbnROYW1lKHZtKSkpOyB9KVxuICAgICAgICAuam9pbignXFxuJylcbiAgICB9IGVs
c2Uge1xuICAgICAgcmV0dXJuIChcIlxcblxcbihmb3VuZCBpbiBcIiArIChmb3JtYXRDb21wb25l
bnROYW1lKHZtKSkgKyBcIilcIilcbiAgICB9XG4gIH07XG59XG5cbi8qICAqL1xuXG5mdW5jdGlv
biBoYW5kbGVFcnJvciAoZXJyLCB2bSwgaW5mbykge1xuICBpZiAoY29uZmlnLmVycm9ySGFuZGxl
cikge1xuICAgIGNvbmZpZy5lcnJvckhhbmRsZXIuY2FsbChudWxsLCBlcnIsIHZtLCBpbmZvKTtc
biAgfSBlbHNlIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9u
Jykge1xuICAgICAgd2FybigoXCJFcnJvciBpbiBcIiArIGluZm8gKyBcIjogXFxcIlwiICsgKGVy
ci50b1N0cmluZygpKSArIFwiXFxcIlwiKSwgdm0pO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBp
Z25vcmUgZWxzZSAqL1xuICAgIGlmIChpbkJyb3dzZXIgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1
bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgfSBlbHNlIHtcbiAg
ICAgIHRocm93IGVyclxuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cbi8qIGdsb2JhbHMgTXV0YXRp
b25PYnNlcnZlciAqL1xuXG4vLyBjYW4gd2UgdXNlIF9fcHJvdG9fXz9cbnZhciBoYXNQcm90byA9
ICdfX3Byb3RvX18nIGluIHt9O1xuXG4vLyBCcm93c2VyIGVudmlyb25tZW50IHNuaWZmaW5nXG52
YXIgaW5Ccm93c2VyID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCc7XG52YXIgVUEgPSBp
bkJyb3dzZXIgJiYgd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtcbnZh
ciBpc0lFID0gVUEgJiYgL21zaWV8dHJpZGVudC8udGVzdChVQSk7XG52YXIgaXNJRTkgPSBVQSAm
JiBVQS5pbmRleE9mKCdtc2llIDkuMCcpID4gMDtcbnZhciBpc0VkZ2UgPSBVQSAmJiBVQS5pbmRl
eE9mKCdlZGdlLycpID4gMDtcbnZhciBpc0FuZHJvaWQgPSBVQSAmJiBVQS5pbmRleE9mKCdhbmRy
b2lkJykgPiAwO1xudmFyIGlzSU9TID0gVUEgJiYgL2lwaG9uZXxpcGFkfGlwb2R8aW9zLy50ZXN0
KFVBKTtcbnZhciBpc0Nocm9tZSA9IFVBICYmIC9jaHJvbWVcXC9cXGQrLy50ZXN0KFVBKSAmJiAh
aXNFZGdlO1xuXG4vLyBGaXJlZml4IGhhcyBhIFwid2F0Y2hcIiBmdW5jdGlvbiBvbiBPYmplY3Qu
cHJvdG90eXBlLi4uXG52YXIgbmF0aXZlV2F0Y2ggPSAoe30pLndhdGNoO1xuXG52YXIgc3VwcG9y
dHNQYXNzaXZlID0gZmFsc2U7XG5pZiAoaW5Ccm93c2VyKSB7XG4gIHRyeSB7XG4gICAgdmFyIG9w
dHMgPSB7fTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob3B0cywgJ3Bhc3NpdmUnLCAoe1xu
ICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQgKCkge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUg
bmV4dCAqL1xuICAgICAgICBzdXBwb3J0c1Bhc3NpdmUgPSB0cnVlO1xuICAgICAgfVxuICAgIH0p
KTsgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzI4NVxuICAgIHdp
bmRvdy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0LXBhc3NpdmUnLCBudWxsLCBvcHRzKTtcbiAgfSBj
YXRjaCAoZSkge31cbn1cblxuLy8gdGhpcyBuZWVkcyB0byBiZSBsYXp5LWV2YWxlZCBiZWNhdXNl
IHZ1ZSBtYXkgYmUgcmVxdWlyZWQgYmVmb3JlXG4vLyB2dWUtc2VydmVyLXJlbmRlcmVyIGNhbiBz
ZXQgVlVFX0VOVlxudmFyIF9pc1NlcnZlcjtcbnZhciBpc1NlcnZlclJlbmRlcmluZyA9IGZ1bmN0
aW9uICgpIHtcbiAgaWYgKF9pc1NlcnZlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLyogaXN0YW5i
dWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFpbkJyb3dzZXIgJiYgdHlwZW9mIGdsb2JhbCAhPT0g
J3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIGRldGVjdCBwcmVzZW5jZSBvZiB2dWUtc2VydmVyLXJl
bmRlcmVyIGFuZCBhdm9pZFxuICAgICAgLy8gV2VicGFjayBzaGltbWluZyB0aGUgcHJvY2Vzc1xu
ICAgICAgX2lzU2VydmVyID0gZ2xvYmFsWydwcm9jZXNzJ10uZW52LlZVRV9FTlYgPT09ICdzZXJ2
ZXInO1xuICAgIH0gZWxzZSB7XG4gICAgICBfaXNTZXJ2ZXIgPSBmYWxzZTtcbiAgICB9XG4gIH1c
biAgcmV0dXJuIF9pc1NlcnZlclxufTtcblxuLy8gZGV0ZWN0IGRldnRvb2xzXG52YXIgZGV2dG9v
bHMgPSBpbkJyb3dzZXIgJiYgd2luZG93Ll9fVlVFX0RFVlRPT0xTX0dMT0JBTF9IT09LX187XG5c
bi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBpc05hdGl2ZSAoQ3Rvcikge1xu
ICByZXR1cm4gdHlwZW9mIEN0b3IgPT09ICdmdW5jdGlvbicgJiYgL25hdGl2ZSBjb2RlLy50ZXN0
KEN0b3IudG9TdHJpbmcoKSlcbn1cblxudmFyIGhhc1N5bWJvbCA9XG4gIHR5cGVvZiBTeW1ib2wg
IT09ICd1bmRlZmluZWQnICYmIGlzTmF0aXZlKFN5bWJvbCkgJiZcbiAgdHlwZW9mIFJlZmxlY3Qg
IT09ICd1bmRlZmluZWQnICYmIGlzTmF0aXZlKFJlZmxlY3Qub3duS2V5cyk7XG5cbi8qKlxuICog
RGVmZXIgYSB0YXNrIHRvIGV4ZWN1dGUgaXQgYXN5bmNocm9ub3VzbHkuXG4gKi9cbnZhciBuZXh0
VGljayA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciBjYWxsYmFja3MgPSBbXTtcbiAgdmFyIHBlbmRp
bmcgPSBmYWxzZTtcbiAgdmFyIHRpbWVyRnVuYztcblxuICBmdW5jdGlvbiBuZXh0VGlja0hhbmRs
ZXIgKCkge1xuICAgIHBlbmRpbmcgPSBmYWxzZTtcbiAgICB2YXIgY29waWVzID0gY2FsbGJhY2tz
LnNsaWNlKDApO1xuICAgIGNhbGxiYWNrcy5sZW5ndGggPSAwO1xuICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgY29waWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb3BpZXNbaV0oKTtcbiAgICB9XG4g
IH1cblxuICAvLyB0aGUgbmV4dFRpY2sgYmVoYXZpb3IgbGV2ZXJhZ2VzIHRoZSBtaWNyb3Rhc2sg
cXVldWUsIHdoaWNoIGNhbiBiZSBhY2Nlc3NlZFxuICAvLyB2aWEgZWl0aGVyIG5hdGl2ZSBQcm9t
aXNlLnRoZW4gb3IgTXV0YXRpb25PYnNlcnZlci5cbiAgLy8gTXV0YXRpb25PYnNlcnZlciBoYXMg
d2lkZXIgc3VwcG9ydCwgaG93ZXZlciBpdCBpcyBzZXJpb3VzbHkgYnVnZ2VkIGluXG4gIC8vIFVJ
V2ViVmlldyBpbiBpT1MgPj0gOS4zLjMgd2hlbiB0cmlnZ2VyZWQgaW4gdG91Y2ggZXZlbnQgaGFu
ZGxlcnMuIEl0XG4gIC8vIGNvbXBsZXRlbHkgc3RvcHMgd29ya2luZyBhZnRlciB0cmlnZ2VyaW5n
IGEgZmV3IHRpbWVzLi4uIHNvLCBpZiBuYXRpdmVcbiAgLy8gUHJvbWlzZSBpcyBhdmFpbGFibGUs
IHdlIHdpbGwgdXNlIGl0OlxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKHR5cGVv
ZiBQcm9taXNlICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShQcm9taXNlKSkge1xuICAgIHZh
ciBwID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgdmFyIGxvZ0Vycm9yID0gZnVuY3Rpb24gKGVy
cikgeyBjb25zb2xlLmVycm9yKGVycik7IH07XG4gICAgdGltZXJGdW5jID0gZnVuY3Rpb24gKCkg
e1xuICAgICAgcC50aGVuKG5leHRUaWNrSGFuZGxlcikuY2F0Y2gobG9nRXJyb3IpO1xuICAgICAg
Ly8gaW4gcHJvYmxlbWF0aWMgVUlXZWJWaWV3cywgUHJvbWlzZS50aGVuIGRvZXNuJ3QgY29tcGxl
dGVseSBicmVhaywgYnV0XG4gICAgICAvLyBpdCBjYW4gZ2V0IHN0dWNrIGluIGEgd2VpcmQgc3Rh
dGUgd2hlcmUgY2FsbGJhY2tzIGFyZSBwdXNoZWQgaW50byB0aGVcbiAgICAgIC8vIG1pY3JvdGFz
ayBxdWV1ZSBidXQgdGhlIHF1ZXVlIGlzbid0IGJlaW5nIGZsdXNoZWQsIHVudGlsIHRoZSBicm93
c2VyXG4gICAgICAvLyBuZWVkcyB0byBkbyBzb21lIG90aGVyIHdvcmssIGUuZy4gaGFuZGxlIGEg
dGltZXIuIFRoZXJlZm9yZSB3ZSBjYW5cbiAgICAgIC8vIFwiZm9yY2VcIiB0aGUgbWljcm90YXNr
IHF1ZXVlIHRvIGJlIGZsdXNoZWQgYnkgYWRkaW5nIGFuIGVtcHR5IHRpbWVyLlxuICAgICAgaWYg
KGlzSU9TKSB7IHNldFRpbWVvdXQobm9vcCk7IH1cbiAgICB9O1xuICB9IGVsc2UgaWYgKHR5cGVv
ZiBNdXRhdGlvbk9ic2VydmVyICE9PSAndW5kZWZpbmVkJyAmJiAoXG4gICAgaXNOYXRpdmUoTXV0
YXRpb25PYnNlcnZlcikgfHxcbiAgICAvLyBQaGFudG9tSlMgYW5kIGlPUyA3LnhcbiAgICBNdXRh
dGlvbk9ic2VydmVyLnRvU3RyaW5nKCkgPT09ICdbb2JqZWN0IE11dGF0aW9uT2JzZXJ2ZXJDb25z
dHJ1Y3Rvcl0nXG4gICkpIHtcbiAgICAvLyB1c2UgTXV0YXRpb25PYnNlcnZlciB3aGVyZSBuYXRp
dmUgUHJvbWlzZSBpcyBub3QgYXZhaWxhYmxlLFxuICAgIC8vIGUuZy4gUGhhbnRvbUpTIElFMTEs
IGlPUzcsIEFuZHJvaWQgNC40XG4gICAgdmFyIGNvdW50ZXIgPSAxO1xuICAgIHZhciBvYnNlcnZl
ciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKG5leHRUaWNrSGFuZGxlcik7XG4gICAgdmFyIHRleHRO
b2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoU3RyaW5nKGNvdW50ZXIpKTtcbiAgICBvYnNl
cnZlci5vYnNlcnZlKHRleHROb2RlLCB7XG4gICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlXG4gICAg
fSk7XG4gICAgdGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgICAgY291bnRlciA9IChjb3Vu
dGVyICsgMSkgJSAyO1xuICAgICAgdGV4dE5vZGUuZGF0YSA9IFN0cmluZyhjb3VudGVyKTtcbiAg
ICB9O1xuICB9IGVsc2Uge1xuICAgIC8vIGZhbGxiYWNrIHRvIHNldFRpbWVvdXRcbiAgICAvKiBp
c3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHRpbWVyRnVuYyA9IGZ1bmN0aW9uICgpIHtcbiAg
ICAgIHNldFRpbWVvdXQobmV4dFRpY2tIYW5kbGVyLCAwKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0
dXJuIGZ1bmN0aW9uIHF1ZXVlTmV4dFRpY2sgKGNiLCBjdHgpIHtcbiAgICB2YXIgX3Jlc29sdmU7
XG4gICAgY2FsbGJhY2tzLnB1c2goZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGNiKSB7XG4gICAg
ICAgIHRyeSB7XG4gICAgICAgICAgY2IuY2FsbChjdHgpO1xuICAgICAgICB9IGNhdGNoIChlKSB7
XG4gICAgICAgICAgaGFuZGxlRXJyb3IoZSwgY3R4LCAnbmV4dFRpY2snKTtcbiAgICAgICAgfVxu
ICAgICAgfSBlbHNlIGlmIChfcmVzb2x2ZSkge1xuICAgICAgICBfcmVzb2x2ZShjdHgpO1xuICAg
ICAgfVxuICAgIH0pO1xuICAgIGlmICghcGVuZGluZykge1xuICAgICAgcGVuZGluZyA9IHRydWU7
XG4gICAgICB0aW1lckZ1bmMoKTtcbiAgICB9XG4gICAgaWYgKCFjYiAmJiB0eXBlb2YgUHJvbWlz
ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAo
cmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIF9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIH0p
XG4gICAgfVxuICB9XG59KSgpO1xuXG52YXIgX1NldDtcbi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAq
L1xuaWYgKHR5cGVvZiBTZXQgIT09ICd1bmRlZmluZWQnICYmIGlzTmF0aXZlKFNldCkpIHtcbiAg
Ly8gdXNlIG5hdGl2ZSBTZXQgd2hlbiBhdmFpbGFibGUuXG4gIF9TZXQgPSBTZXQ7XG59IGVsc2Ug
e1xuICAvLyBhIG5vbi1zdGFuZGFyZCBTZXQgcG9seWZpbGwgdGhhdCBvbmx5IHdvcmtzIHdpdGgg
cHJpbWl0aXZlIGtleXMuXG4gIF9TZXQgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNl
dCAoKSB7XG4gICAgICB0aGlzLnNldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgfVxuICAg
IFNldC5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gaGFzIChrZXkpIHtcbiAgICAgIHJldHVybiB0
aGlzLnNldFtrZXldID09PSB0cnVlXG4gICAgfTtcbiAgICBTZXQucHJvdG90eXBlLmFkZCA9IGZ1
bmN0aW9uIGFkZCAoa2V5KSB7XG4gICAgICB0aGlzLnNldFtrZXldID0gdHJ1ZTtcbiAgICB9O1xu
ICAgIFNldC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiBjbGVhciAoKSB7XG4gICAgICB0aGlz
LnNldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgfTtcblxuICAgIHJldHVybiBTZXQ7XG4g
IH0oKSk7XG59XG5cbi8qICAqL1xuXG5cbnZhciB1aWQgPSAwO1xuXG4vKipcbiAqIEEgZGVwIGlz
IGFuIG9ic2VydmFibGUgdGhhdCBjYW4gaGF2ZSBtdWx0aXBsZVxuICogZGlyZWN0aXZlcyBzdWJz
Y3JpYmluZyB0byBpdC5cbiAqL1xudmFyIERlcCA9IGZ1bmN0aW9uIERlcCAoKSB7XG4gIHRoaXMu
aWQgPSB1aWQrKztcbiAgdGhpcy5zdWJzID0gW107XG59O1xuXG5EZXAucHJvdG90eXBlLmFkZFN1
YiA9IGZ1bmN0aW9uIGFkZFN1YiAoc3ViKSB7XG4gIHRoaXMuc3Vicy5wdXNoKHN1Yik7XG59O1xu
XG5EZXAucHJvdG90eXBlLnJlbW92ZVN1YiA9IGZ1bmN0aW9uIHJlbW92ZVN1YiAoc3ViKSB7XG4g
IHJlbW92ZSh0aGlzLnN1YnMsIHN1Yik7XG59O1xuXG5EZXAucHJvdG90eXBlLmRlcGVuZCA9IGZ1
bmN0aW9uIGRlcGVuZCAoKSB7XG4gIGlmIChEZXAudGFyZ2V0KSB7XG4gICAgRGVwLnRhcmdldC5h
ZGREZXAodGhpcyk7XG4gIH1cbn07XG5cbkRlcC5wcm90b3R5cGUubm90aWZ5ID0gZnVuY3Rpb24g
bm90aWZ5ICgpIHtcbiAgLy8gc3RhYmlsaXplIHRoZSBzdWJzY3JpYmVyIGxpc3QgZmlyc3RcbiAg
dmFyIHN1YnMgPSB0aGlzLnN1YnMuc2xpY2UoKTtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBzdWJz
Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHN1YnNbaV0udXBkYXRlKCk7XG4gIH1cbn07XG5c
bi8vIHRoZSBjdXJyZW50IHRhcmdldCB3YXRjaGVyIGJlaW5nIGV2YWx1YXRlZC5cbi8vIHRoaXMg
aXMgZ2xvYmFsbHkgdW5pcXVlIGJlY2F1c2UgdGhlcmUgY291bGQgYmUgb25seSBvbmVcbi8vIHdh
dGNoZXIgYmVpbmcgZXZhbHVhdGVkIGF0IGFueSB0aW1lLlxuRGVwLnRhcmdldCA9IG51bGw7XG52
YXIgdGFyZ2V0U3RhY2sgPSBbXTtcblxuZnVuY3Rpb24gcHVzaFRhcmdldCAoX3RhcmdldCkge1xu
ICBpZiAoRGVwLnRhcmdldCkgeyB0YXJnZXRTdGFjay5wdXNoKERlcC50YXJnZXQpOyB9XG4gIERl
cC50YXJnZXQgPSBfdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBwb3BUYXJnZXQgKCkge1xuICBEZXAu
dGFyZ2V0ID0gdGFyZ2V0U3RhY2sucG9wKCk7XG59XG5cbi8qXG4gKiBub3QgdHlwZSBjaGVja2lu
ZyB0aGlzIGZpbGUgYmVjYXVzZSBmbG93IGRvZXNuJ3QgcGxheSB3ZWxsIHdpdGhcbiAqIGR5bmFt
aWNhbGx5IGFjY2Vzc2luZyBtZXRob2RzIG9uIEFycmF5IHByb3RvdHlwZVxuICovXG5cbnZhciBh
cnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xudmFyIGFycmF5TWV0aG9kcyA9IE9iamVjdC5j
cmVhdGUoYXJyYXlQcm90byk7W1xuICAncHVzaCcsXG4gICdwb3AnLFxuICAnc2hpZnQnLFxuICAn
dW5zaGlmdCcsXG4gICdzcGxpY2UnLFxuICAnc29ydCcsXG4gICdyZXZlcnNlJ1xuXVxuLmZvckVh
Y2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICAvLyBjYWNoZSBvcmlnaW5hbCBtZXRob2RcbiAgdmFy
IG9yaWdpbmFsID0gYXJyYXlQcm90b1ttZXRob2RdO1xuICBkZWYoYXJyYXlNZXRob2RzLCBtZXRo
b2QsIGZ1bmN0aW9uIG11dGF0b3IgKCkge1xuICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3Vt
ZW50cy5sZW5ndGg7XG4gICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRz
WyBsZW4gXTtcblxuICAgIHZhciByZXN1bHQgPSBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtc
biAgICB2YXIgb2IgPSB0aGlzLl9fb2JfXztcbiAgICB2YXIgaW5zZXJ0ZWQ7XG4gICAgc3dpdGNo
IChtZXRob2QpIHtcbiAgICAgIGNhc2UgJ3B1c2gnOlxuICAgICAgY2FzZSAndW5zaGlmdCc6XG4g
ICAgICAgIGluc2VydGVkID0gYXJncztcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3NwbGlj
ZSc6XG4gICAgICAgIGluc2VydGVkID0gYXJncy5zbGljZSgyKTtcbiAgICAgICAgYnJlYWtcbiAg
ICB9XG4gICAgaWYgKGluc2VydGVkKSB7IG9iLm9ic2VydmVBcnJheShpbnNlcnRlZCk7IH1cbiAg
ICAvLyBub3RpZnkgY2hhbmdlXG4gICAgb2IuZGVwLm5vdGlmeSgpO1xuICAgIHJldHVybiByZXN1
bHRcbiAgfSk7XG59KTtcblxuLyogICovXG5cbnZhciBhcnJheUtleXMgPSBPYmplY3QuZ2V0T3du
UHJvcGVydHlOYW1lcyhhcnJheU1ldGhvZHMpO1xuXG4vKipcbiAqIEJ5IGRlZmF1bHQsIHdoZW4g
YSByZWFjdGl2ZSBwcm9wZXJ0eSBpcyBzZXQsIHRoZSBuZXcgdmFsdWUgaXNcbiAqIGFsc28gY29u
dmVydGVkIHRvIGJlY29tZSByZWFjdGl2ZS4gSG93ZXZlciB3aGVuIHBhc3NpbmcgZG93biBwcm9w
cyxcbiAqIHdlIGRvbid0IHdhbnQgdG8gZm9yY2UgY29udmVyc2lvbiBiZWNhdXNlIHRoZSB2YWx1
ZSBtYXkgYmUgYSBuZXN0ZWQgdmFsdWVcbiAqIHVuZGVyIGEgZnJvemVuIGRhdGEgc3RydWN0dXJl
LiBDb252ZXJ0aW5nIGl0IHdvdWxkIGRlZmVhdCB0aGUgb3B0aW1pemF0aW9uLlxuICovXG52YXIg
b2JzZXJ2ZXJTdGF0ZSA9IHtcbiAgc2hvdWxkQ29udmVydDogdHJ1ZVxufTtcblxuLyoqXG4gKiBP
YnNlcnZlciBjbGFzcyB0aGF0IGFyZSBhdHRhY2hlZCB0byBlYWNoIG9ic2VydmVkXG4gKiBvYmpl
Y3QuIE9uY2UgYXR0YWNoZWQsIHRoZSBvYnNlcnZlciBjb252ZXJ0cyB0YXJnZXRcbiAqIG9iamVj
dCdzIHByb3BlcnR5IGtleXMgaW50byBnZXR0ZXIvc2V0dGVycyB0aGF0XG4gKiBjb2xsZWN0IGRl
cGVuZGVuY2llcyBhbmQgZGlzcGF0Y2hlcyB1cGRhdGVzLlxuICovXG52YXIgT2JzZXJ2ZXIgPSBm
dW5jdGlvbiBPYnNlcnZlciAodmFsdWUpIHtcbiAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB0aGlz
LmRlcCA9IG5ldyBEZXAoKTtcbiAgdGhpcy52bUNvdW50ID0gMDtcbiAgZGVmKHZhbHVlLCAnX19v
Yl9fJywgdGhpcyk7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHZhciBhdWdt
ZW50ID0gaGFzUHJvdG9cbiAgICAgID8gcHJvdG9BdWdtZW50XG4gICAgICA6IGNvcHlBdWdtZW50
O1xuICAgIGF1Z21lbnQodmFsdWUsIGFycmF5TWV0aG9kcywgYXJyYXlLZXlzKTtcbiAgICB0aGlz
Lm9ic2VydmVBcnJheSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy53YWxrKHZhbHVlKTtc
biAgfVxufTtcblxuLyoqXG4gKiBXYWxrIHRocm91Z2ggZWFjaCBwcm9wZXJ0eSBhbmQgY29udmVy
dCB0aGVtIGludG9cbiAqIGdldHRlci9zZXR0ZXJzLiBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBi
ZSBjYWxsZWQgd2hlblxuICogdmFsdWUgdHlwZSBpcyBPYmplY3QuXG4gKi9cbk9ic2VydmVyLnBy
b3RvdHlwZS53YWxrID0gZnVuY3Rpb24gd2FsayAob2JqKSB7XG4gIHZhciBrZXlzID0gT2JqZWN0
LmtleXMob2JqKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4g
ICAgZGVmaW5lUmVhY3RpdmUkJDEob2JqLCBrZXlzW2ldLCBvYmpba2V5c1tpXV0pO1xuICB9XG59
O1xuXG4vKipcbiAqIE9ic2VydmUgYSBsaXN0IG9mIEFycmF5IGl0ZW1zLlxuICovXG5PYnNlcnZl
ci5wcm90b3R5cGUub2JzZXJ2ZUFycmF5ID0gZnVuY3Rpb24gb2JzZXJ2ZUFycmF5IChpdGVtcykg
e1xuICBmb3IgKHZhciBpID0gMCwgbCA9IGl0ZW1zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAg
IG9ic2VydmUoaXRlbXNbaV0pO1xuICB9XG59O1xuXG4vLyBoZWxwZXJzXG5cbi8qKlxuICogQXVn
bWVudCBhbiB0YXJnZXQgT2JqZWN0IG9yIEFycmF5IGJ5IGludGVyY2VwdGluZ1xuICogdGhlIHBy
b3RvdHlwZSBjaGFpbiB1c2luZyBfX3Byb3RvX19cbiAqL1xuZnVuY3Rpb24gcHJvdG9BdWdtZW50
ICh0YXJnZXQsIHNyYywga2V5cykge1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xu
ICB0YXJnZXQuX19wcm90b19fID0gc3JjO1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXByb3RvICov
XG59XG5cbi8qKlxuICogQXVnbWVudCBhbiB0YXJnZXQgT2JqZWN0IG9yIEFycmF5IGJ5IGRlZmlu
aW5nXG4gKiBoaWRkZW4gcHJvcGVydGllcy5cbiAqL1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQg
Ki9cbmZ1bmN0aW9uIGNvcHlBdWdtZW50ICh0YXJnZXQsIHNyYywga2V5cykge1xuICBmb3IgKHZh
ciBpID0gMCwgbCA9IGtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtl
eXNbaV07XG4gICAgZGVmKHRhcmdldCwga2V5LCBzcmNba2V5XSk7XG4gIH1cbn1cblxuLyoqXG4g
KiBBdHRlbXB0IHRvIGNyZWF0ZSBhbiBvYnNlcnZlciBpbnN0YW5jZSBmb3IgYSB2YWx1ZSxcbiAq
IHJldHVybnMgdGhlIG5ldyBvYnNlcnZlciBpZiBzdWNjZXNzZnVsbHkgb2JzZXJ2ZWQsXG4gKiBv
ciB0aGUgZXhpc3Rpbmcgb2JzZXJ2ZXIgaWYgdGhlIHZhbHVlIGFscmVhZHkgaGFzIG9uZS5cbiAq
L1xuZnVuY3Rpb24gb2JzZXJ2ZSAodmFsdWUsIGFzUm9vdERhdGEpIHtcbiAgaWYgKCFpc09iamVj
dCh2YWx1ZSkpIHtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgb2I7XG4gIGlmIChoYXNPd24odmFs
dWUsICdfX29iX18nKSAmJiB2YWx1ZS5fX29iX18gaW5zdGFuY2VvZiBPYnNlcnZlcikge1xuICAg
IG9iID0gdmFsdWUuX19vYl9fO1xuICB9IGVsc2UgaWYgKFxuICAgIG9ic2VydmVyU3RhdGUuc2hv
dWxkQ29udmVydCAmJlxuICAgICFpc1NlcnZlclJlbmRlcmluZygpICYmXG4gICAgKEFycmF5Lmlz
QXJyYXkodmFsdWUpIHx8IGlzUGxhaW5PYmplY3QodmFsdWUpKSAmJlxuICAgIE9iamVjdC5pc0V4
dGVuc2libGUodmFsdWUpICYmXG4gICAgIXZhbHVlLl9pc1Z1ZVxuICApIHtcbiAgICBvYiA9IG5l
dyBPYnNlcnZlcih2YWx1ZSk7XG4gIH1cbiAgaWYgKGFzUm9vdERhdGEgJiYgb2IpIHtcbiAgICBv
Yi52bUNvdW50Kys7XG4gIH1cbiAgcmV0dXJuIG9iXG59XG5cbi8qKlxuICogRGVmaW5lIGEgcmVh
Y3RpdmUgcHJvcGVydHkgb24gYW4gT2JqZWN0LlxuICovXG5mdW5jdGlvbiBkZWZpbmVSZWFjdGl2
ZSQkMSAoXG4gIG9iaixcbiAga2V5LFxuICB2YWwsXG4gIGN1c3RvbVNldHRlcixcbiAgc2hhbGxv
d1xuKSB7XG4gIHZhciBkZXAgPSBuZXcgRGVwKCk7XG5cbiAgdmFyIHByb3BlcnR5ID0gT2JqZWN0
LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSk7XG4gIGlmIChwcm9wZXJ0eSAmJiBw
cm9wZXJ0eS5jb25maWd1cmFibGUgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAv
LyBjYXRlciBmb3IgcHJlLWRlZmluZWQgZ2V0dGVyL3NldHRlcnNcbiAgdmFyIGdldHRlciA9IHBy
b3BlcnR5ICYmIHByb3BlcnR5LmdldDtcbiAgdmFyIHNldHRlciA9IHByb3BlcnR5ICYmIHByb3Bl
cnR5LnNldDtcblxuICB2YXIgY2hpbGRPYiA9ICFzaGFsbG93ICYmIG9ic2VydmUodmFsKTtcbiAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxc
biAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiByZWFjdGl2ZUdldHRl
ciAoKSB7XG4gICAgICB2YXIgdmFsdWUgPSBnZXR0ZXIgPyBnZXR0ZXIuY2FsbChvYmopIDogdmFs
O1xuICAgICAgaWYgKERlcC50YXJnZXQpIHtcbiAgICAgICAgZGVwLmRlcGVuZCgpO1xuICAgICAg
ICBpZiAoY2hpbGRPYikge1xuICAgICAgICAgIGNoaWxkT2IuZGVwLmRlcGVuZCgpO1xuICAgICAg
ICB9XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIGRlcGVu
ZEFycmF5KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlXG4g
ICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIHJlYWN0aXZlU2V0dGVyIChuZXdWYWwpIHtcbiAgICAg
IHZhciB2YWx1ZSA9IGdldHRlciA/IGdldHRlci5jYWxsKG9iaikgOiB2YWw7XG4gICAgICAvKiBl
c2xpbnQtZGlzYWJsZSBuby1zZWxmLWNvbXBhcmUgKi9cbiAgICAgIGlmIChuZXdWYWwgPT09IHZh
bHVlIHx8IChuZXdWYWwgIT09IG5ld1ZhbCAmJiB2YWx1ZSAhPT0gdmFsdWUpKSB7XG4gICAgICAg
IHJldHVyblxuICAgICAgfVxuICAgICAgLyogZXNsaW50LWVuYWJsZSBuby1zZWxmLWNvbXBhcmUg
Ki9cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGN1
c3RvbVNldHRlcikge1xuICAgICAgICBjdXN0b21TZXR0ZXIoKTtcbiAgICAgIH1cbiAgICAgIGlm
IChzZXR0ZXIpIHtcbiAgICAgICAgc2V0dGVyLmNhbGwob2JqLCBuZXdWYWwpO1xuICAgICAgfSBl
bHNlIHtcbiAgICAgICAgdmFsID0gbmV3VmFsO1xuICAgICAgfVxuICAgICAgY2hpbGRPYiA9ICFz
aGFsbG93ICYmIG9ic2VydmUobmV3VmFsKTtcbiAgICAgIGRlcC5ub3RpZnkoKTtcbiAgICB9XG4g
IH0pO1xufVxuXG4vKipcbiAqIFNldCBhIHByb3BlcnR5IG9uIGFuIG9iamVjdC4gQWRkcyB0aGUg
bmV3IHByb3BlcnR5IGFuZFxuICogdHJpZ2dlcnMgY2hhbmdlIG5vdGlmaWNhdGlvbiBpZiB0aGUg
cHJvcGVydHkgZG9lc24ndFxuICogYWxyZWFkeSBleGlzdC5cbiAqL1xuZnVuY3Rpb24gc2V0ICh0
YXJnZXQsIGtleSwgdmFsKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHRhcmdldCkgJiYgaXNWYWxp
ZEFycmF5SW5kZXgoa2V5KSkge1xuICAgIHRhcmdldC5sZW5ndGggPSBNYXRoLm1heCh0YXJnZXQu
bGVuZ3RoLCBrZXkpO1xuICAgIHRhcmdldC5zcGxpY2Uoa2V5LCAxLCB2YWwpO1xuICAgIHJldHVy
biB2YWxcbiAgfVxuICBpZiAoaGFzT3duKHRhcmdldCwga2V5KSkge1xuICAgIHRhcmdldFtrZXld
ID0gdmFsO1xuICAgIHJldHVybiB2YWxcbiAgfVxuICB2YXIgb2IgPSAodGFyZ2V0KS5fX29iX187
XG4gIGlmICh0YXJnZXQuX2lzVnVlIHx8IChvYiAmJiBvYi52bUNvdW50KSkge1xuICAgIHByb2Nl
c3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICdBdm9pZCBh
ZGRpbmcgcmVhY3RpdmUgcHJvcGVydGllcyB0byBhIFZ1ZSBpbnN0YW5jZSBvciBpdHMgcm9vdCAk
ZGF0YSAnICtcbiAgICAgICdhdCBydW50aW1lIC0gZGVjbGFyZSBpdCB1cGZyb250IGluIHRoZSBk
YXRhIG9wdGlvbi4nXG4gICAgKTtcbiAgICByZXR1cm4gdmFsXG4gIH1cbiAgaWYgKCFvYikge1xu
ICAgIHRhcmdldFtrZXldID0gdmFsO1xuICAgIHJldHVybiB2YWxcbiAgfVxuICBkZWZpbmVSZWFj
dGl2ZSQkMShvYi52YWx1ZSwga2V5LCB2YWwpO1xuICBvYi5kZXAubm90aWZ5KCk7XG4gIHJldHVy
biB2YWxcbn1cblxuLyoqXG4gKiBEZWxldGUgYSBwcm9wZXJ0eSBhbmQgdHJpZ2dlciBjaGFuZ2Ug
aWYgbmVjZXNzYXJ5LlxuICovXG5mdW5jdGlvbiBkZWwgKHRhcmdldCwga2V5KSB7XG4gIGlmIChB
cnJheS5pc0FycmF5KHRhcmdldCkgJiYgaXNWYWxpZEFycmF5SW5kZXgoa2V5KSkge1xuICAgIHRh
cmdldC5zcGxpY2Uoa2V5LCAxKTtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgb2IgPSAodGFyZ2V0
KS5fX29iX187XG4gIGlmICh0YXJnZXQuX2lzVnVlIHx8IChvYiAmJiBvYi52bUNvdW50KSkge1xu
ICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAg
ICdBdm9pZCBkZWxldGluZyBwcm9wZXJ0aWVzIG9uIGEgVnVlIGluc3RhbmNlIG9yIGl0cyByb290
ICRkYXRhICcgK1xuICAgICAgJy0ganVzdCBzZXQgaXQgdG8gbnVsbC4nXG4gICAgKTtcbiAgICBy
ZXR1cm5cbiAgfVxuICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkpIHtcbiAgICByZXR1cm5cbiAg
fVxuICBkZWxldGUgdGFyZ2V0W2tleV07XG4gIGlmICghb2IpIHtcbiAgICByZXR1cm5cbiAgfVxu
ICBvYi5kZXAubm90aWZ5KCk7XG59XG5cbi8qKlxuICogQ29sbGVjdCBkZXBlbmRlbmNpZXMgb24g
YXJyYXkgZWxlbWVudHMgd2hlbiB0aGUgYXJyYXkgaXMgdG91Y2hlZCwgc2luY2VcbiAqIHdlIGNh
bm5vdCBpbnRlcmNlcHQgYXJyYXkgZWxlbWVudCBhY2Nlc3MgbGlrZSBwcm9wZXJ0eSBnZXR0ZXJz
LlxuICovXG5mdW5jdGlvbiBkZXBlbmRBcnJheSAodmFsdWUpIHtcbiAgZm9yICh2YXIgZSA9ICh2
b2lkIDApLCBpID0gMCwgbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGUgPSB2
YWx1ZVtpXTtcbiAgICBlICYmIGUuX19vYl9fICYmIGUuX19vYl9fLmRlcC5kZXBlbmQoKTtcbiAg
ICBpZiAoQXJyYXkuaXNBcnJheShlKSkge1xuICAgICAgZGVwZW5kQXJyYXkoZSk7XG4gICAgfVxu
ICB9XG59XG5cbi8qICAqL1xuXG4vKipcbiAqIE9wdGlvbiBvdmVyd3JpdGluZyBzdHJhdGVnaWVz
IGFyZSBmdW5jdGlvbnMgdGhhdCBoYW5kbGVcbiAqIGhvdyB0byBtZXJnZSBhIHBhcmVudCBvcHRp
b24gdmFsdWUgYW5kIGEgY2hpbGQgb3B0aW9uXG4gKiB2YWx1ZSBpbnRvIHRoZSBmaW5hbCB2YWx1
ZS5cbiAqL1xudmFyIHN0cmF0cyA9IGNvbmZpZy5vcHRpb25NZXJnZVN0cmF0ZWdpZXM7XG5cbi8q
KlxuICogT3B0aW9ucyB3aXRoIHJlc3RyaWN0aW9uc1xuICovXG5pZiAocHJvY2Vzcy5lbnYuTk9E
RV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBzdHJhdHMuZWwgPSBzdHJhdHMucHJvcHNEYXRh
ID0gZnVuY3Rpb24gKHBhcmVudCwgY2hpbGQsIHZtLCBrZXkpIHtcbiAgICBpZiAoIXZtKSB7XG4g
ICAgICB3YXJuKFxuICAgICAgICBcIm9wdGlvbiBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgY2FuIG9u
bHkgYmUgdXNlZCBkdXJpbmcgaW5zdGFuY2UgXCIgK1xuICAgICAgICAnY3JlYXRpb24gd2l0aCB0
aGUgYG5ld2Aga2V5d29yZC4nXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZGVmYXVsdFN0
cmF0KHBhcmVudCwgY2hpbGQpXG4gIH07XG59XG5cbi8qKlxuICogSGVscGVyIHRoYXQgcmVjdXJz
aXZlbHkgbWVyZ2VzIHR3byBkYXRhIG9iamVjdHMgdG9nZXRoZXIuXG4gKi9cbmZ1bmN0aW9uIG1l
cmdlRGF0YSAodG8sIGZyb20pIHtcbiAgaWYgKCFmcm9tKSB7IHJldHVybiB0byB9XG4gIHZhciBr
ZXksIHRvVmFsLCBmcm9tVmFsO1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGZyb20pO1xuICBm
b3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBrZXlzW2ld
O1xuICAgIHRvVmFsID0gdG9ba2V5XTtcbiAgICBmcm9tVmFsID0gZnJvbVtrZXldO1xuICAgIGlm
ICghaGFzT3duKHRvLCBrZXkpKSB7XG4gICAgICBzZXQodG8sIGtleSwgZnJvbVZhbCk7XG4gICAg
fSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHRvVmFsKSAmJiBpc1BsYWluT2JqZWN0KGZyb21WYWwp
KSB7XG4gICAgICBtZXJnZURhdGEodG9WYWwsIGZyb21WYWwpO1xuICAgIH1cbiAgfVxuICByZXR1
cm4gdG9cbn1cblxuLyoqXG4gKiBEYXRhXG4gKi9cbmZ1bmN0aW9uIG1lcmdlRGF0YU9yRm4gKFxu
ICBwYXJlbnRWYWwsXG4gIGNoaWxkVmFsLFxuICB2bVxuKSB7XG4gIGlmICghdm0pIHtcbiAgICAv
LyBpbiBhIFZ1ZS5leHRlbmQgbWVyZ2UsIGJvdGggc2hvdWxkIGJlIGZ1bmN0aW9uc1xuICAgIGlm
ICghY2hpbGRWYWwpIHtcbiAgICAgIHJldHVybiBwYXJlbnRWYWxcbiAgICB9XG4gICAgaWYgKCFw
YXJlbnRWYWwpIHtcbiAgICAgIHJldHVybiBjaGlsZFZhbFxuICAgIH1cbiAgICAvLyB3aGVuIHBh
cmVudFZhbCAmIGNoaWxkVmFsIGFyZSBib3RoIHByZXNlbnQsXG4gICAgLy8gd2UgbmVlZCB0byBy
ZXR1cm4gYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlXG4gICAgLy8gbWVyZ2VkIHJlc3VsdCBv
ZiBib3RoIGZ1bmN0aW9ucy4uLiBubyBuZWVkIHRvXG4gICAgLy8gY2hlY2sgaWYgcGFyZW50VmFs
IGlzIGEgZnVuY3Rpb24gaGVyZSBiZWNhdXNlXG4gICAgLy8gaXQgaGFzIHRvIGJlIGEgZnVuY3Rp
b24gdG8gcGFzcyBwcmV2aW91cyBtZXJnZXMuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG1lcmdlZERh
dGFGbiAoKSB7XG4gICAgICByZXR1cm4gbWVyZ2VEYXRhKFxuICAgICAgICB0eXBlb2YgY2hpbGRW
YWwgPT09ICdmdW5jdGlvbicgPyBjaGlsZFZhbC5jYWxsKHRoaXMpIDogY2hpbGRWYWwsXG4gICAg
ICAgIHR5cGVvZiBwYXJlbnRWYWwgPT09ICdmdW5jdGlvbicgPyBwYXJlbnRWYWwuY2FsbCh0aGlz
KSA6IHBhcmVudFZhbFxuICAgICAgKVxuICAgIH1cbiAgfSBlbHNlIGlmIChwYXJlbnRWYWwgfHwg
Y2hpbGRWYWwpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VkSW5zdGFuY2VEYXRhRm4gKCkg
e1xuICAgICAgLy8gaW5zdGFuY2UgbWVyZ2VcbiAgICAgIHZhciBpbnN0YW5jZURhdGEgPSB0eXBl
b2YgY2hpbGRWYWwgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBjaGlsZFZhbC5jYWxsKHZtKVxu
ICAgICAgICA6IGNoaWxkVmFsO1xuICAgICAgdmFyIGRlZmF1bHREYXRhID0gdHlwZW9mIHBhcmVu
dFZhbCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IHBhcmVudFZhbC5jYWxsKHZtKVxuICAgICAg
ICA6IHVuZGVmaW5lZDtcbiAgICAgIGlmIChpbnN0YW5jZURhdGEpIHtcbiAgICAgICAgcmV0dXJu
IG1lcmdlRGF0YShpbnN0YW5jZURhdGEsIGRlZmF1bHREYXRhKVxuICAgICAgfSBlbHNlIHtcbiAg
ICAgICAgcmV0dXJuIGRlZmF1bHREYXRhXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnN0cmF0
cy5kYXRhID0gZnVuY3Rpb24gKFxuICBwYXJlbnRWYWwsXG4gIGNoaWxkVmFsLFxuICB2bVxuKSB7
XG4gIGlmICghdm0pIHtcbiAgICBpZiAoY2hpbGRWYWwgJiYgdHlwZW9mIGNoaWxkVmFsICE9PSAn
ZnVuY3Rpb24nKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24n
ICYmIHdhcm4oXG4gICAgICAgICdUaGUgXCJkYXRhXCIgb3B0aW9uIHNob3VsZCBiZSBhIGZ1bmN0
aW9uICcgK1xuICAgICAgICAndGhhdCByZXR1cm5zIGEgcGVyLWluc3RhbmNlIHZhbHVlIGluIGNv
bXBvbmVudCAnICtcbiAgICAgICAgJ2RlZmluaXRpb25zLicsXG4gICAgICAgIHZtXG4gICAgICAp
O1xuXG4gICAgICByZXR1cm4gcGFyZW50VmFsXG4gICAgfVxuICAgIHJldHVybiBtZXJnZURhdGFP
ckZuLmNhbGwodGhpcywgcGFyZW50VmFsLCBjaGlsZFZhbClcbiAgfVxuXG4gIHJldHVybiBtZXJn
ZURhdGFPckZuKHBhcmVudFZhbCwgY2hpbGRWYWwsIHZtKVxufTtcblxuLyoqXG4gKiBIb29rcyBh
bmQgcHJvcHMgYXJlIG1lcmdlZCBhcyBhcnJheXMuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlSG9vayAo
XG4gIHBhcmVudFZhbCxcbiAgY2hpbGRWYWxcbikge1xuICByZXR1cm4gY2hpbGRWYWxcbiAgICA/
IHBhcmVudFZhbFxuICAgICAgPyBwYXJlbnRWYWwuY29uY2F0KGNoaWxkVmFsKVxuICAgICAgOiBB
cnJheS5pc0FycmF5KGNoaWxkVmFsKVxuICAgICAgICA/IGNoaWxkVmFsXG4gICAgICAgIDogW2No
aWxkVmFsXVxuICAgIDogcGFyZW50VmFsXG59XG5cbkxJRkVDWUNMRV9IT09LUy5mb3JFYWNoKGZ1
bmN0aW9uIChob29rKSB7XG4gIHN0cmF0c1tob29rXSA9IG1lcmdlSG9vaztcbn0pO1xuXG4vKipc
biAqIEFzc2V0c1xuICpcbiAqIFdoZW4gYSB2bSBpcyBwcmVzZW50IChpbnN0YW5jZSBjcmVhdGlv
biksIHdlIG5lZWQgdG8gZG9cbiAqIGEgdGhyZWUtd2F5IG1lcmdlIGJldHdlZW4gY29uc3RydWN0
b3Igb3B0aW9ucywgaW5zdGFuY2VcbiAqIG9wdGlvbnMgYW5kIHBhcmVudCBvcHRpb25zLlxuICov
XG5mdW5jdGlvbiBtZXJnZUFzc2V0cyAocGFyZW50VmFsLCBjaGlsZFZhbCkge1xuICB2YXIgcmVz
ID0gT2JqZWN0LmNyZWF0ZShwYXJlbnRWYWwgfHwgbnVsbCk7XG4gIHJldHVybiBjaGlsZFZhbFxu
ICAgID8gZXh0ZW5kKHJlcywgY2hpbGRWYWwpXG4gICAgOiByZXNcbn1cblxuQVNTRVRfVFlQRVMu
Zm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuICBzdHJhdHNbdHlwZSArICdzJ10gPSBtZXJnZUFz
c2V0cztcbn0pO1xuXG4vKipcbiAqIFdhdGNoZXJzLlxuICpcbiAqIFdhdGNoZXJzIGhhc2hlcyBz
aG91bGQgbm90IG92ZXJ3cml0ZSBvbmVcbiAqIGFub3RoZXIsIHNvIHdlIG1lcmdlIHRoZW0gYXMg
YXJyYXlzLlxuICovXG5zdHJhdHMud2F0Y2ggPSBmdW5jdGlvbiAocGFyZW50VmFsLCBjaGlsZFZh
bCkge1xuICAvLyB3b3JrIGFyb3VuZCBGaXJlZm94J3MgT2JqZWN0LnByb3RvdHlwZS53YXRjaC4u
LlxuICBpZiAocGFyZW50VmFsID09PSBuYXRpdmVXYXRjaCkgeyBwYXJlbnRWYWwgPSB1bmRlZmlu
ZWQ7IH1cbiAgaWYgKGNoaWxkVmFsID09PSBuYXRpdmVXYXRjaCkgeyBjaGlsZFZhbCA9IHVuZGVm
aW5lZDsgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKCFjaGlsZFZhbCkgeyBy
ZXR1cm4gT2JqZWN0LmNyZWF0ZShwYXJlbnRWYWwgfHwgbnVsbCkgfVxuICBpZiAoIXBhcmVudFZh
bCkgeyByZXR1cm4gY2hpbGRWYWwgfVxuICB2YXIgcmV0ID0ge307XG4gIGV4dGVuZChyZXQsIHBh
cmVudFZhbCk7XG4gIGZvciAodmFyIGtleSBpbiBjaGlsZFZhbCkge1xuICAgIHZhciBwYXJlbnQg
PSByZXRba2V5XTtcbiAgICB2YXIgY2hpbGQgPSBjaGlsZFZhbFtrZXldO1xuICAgIGlmIChwYXJl
bnQgJiYgIUFycmF5LmlzQXJyYXkocGFyZW50KSkge1xuICAgICAgcGFyZW50ID0gW3BhcmVudF07
XG4gICAgfVxuICAgIHJldFtrZXldID0gcGFyZW50XG4gICAgICA/IHBhcmVudC5jb25jYXQoY2hp
bGQpXG4gICAgICA6IEFycmF5LmlzQXJyYXkoY2hpbGQpID8gY2hpbGQgOiBbY2hpbGRdO1xuICB9
XG4gIHJldHVybiByZXRcbn07XG5cbi8qKlxuICogT3RoZXIgb2JqZWN0IGhhc2hlcy5cbiAqL1xu
c3RyYXRzLnByb3BzID1cbnN0cmF0cy5tZXRob2RzID1cbnN0cmF0cy5pbmplY3QgPVxuc3RyYXRz
LmNvbXB1dGVkID0gZnVuY3Rpb24gKHBhcmVudFZhbCwgY2hpbGRWYWwpIHtcbiAgaWYgKCFwYXJl
bnRWYWwpIHsgcmV0dXJuIGNoaWxkVmFsIH1cbiAgdmFyIHJldCA9IE9iamVjdC5jcmVhdGUobnVs
bCk7XG4gIGV4dGVuZChyZXQsIHBhcmVudFZhbCk7XG4gIGlmIChjaGlsZFZhbCkgeyBleHRlbmQo
cmV0LCBjaGlsZFZhbCk7IH1cbiAgcmV0dXJuIHJldFxufTtcbnN0cmF0cy5wcm92aWRlID0gbWVy
Z2VEYXRhT3JGbjtcblxuLyoqXG4gKiBEZWZhdWx0IHN0cmF0ZWd5LlxuICovXG52YXIgZGVmYXVs
dFN0cmF0ID0gZnVuY3Rpb24gKHBhcmVudFZhbCwgY2hpbGRWYWwpIHtcbiAgcmV0dXJuIGNoaWxk
VmFsID09PSB1bmRlZmluZWRcbiAgICA/IHBhcmVudFZhbFxuICAgIDogY2hpbGRWYWxcbn07XG5c
bi8qKlxuICogVmFsaWRhdGUgY29tcG9uZW50IG5hbWVzXG4gKi9cbmZ1bmN0aW9uIGNoZWNrQ29t
cG9uZW50cyAob3B0aW9ucykge1xuICBmb3IgKHZhciBrZXkgaW4gb3B0aW9ucy5jb21wb25lbnRz
KSB7XG4gICAgdmFyIGxvd2VyID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGlzQnVpbHRJ
blRhZyhsb3dlcikgfHwgY29uZmlnLmlzUmVzZXJ2ZWRUYWcobG93ZXIpKSB7XG4gICAgICB3YXJu
KFxuICAgICAgICAnRG8gbm90IHVzZSBidWlsdC1pbiBvciByZXNlcnZlZCBIVE1MIGVsZW1lbnRz
IGFzIGNvbXBvbmVudCAnICtcbiAgICAgICAgJ2lkOiAnICsga2V5XG4gICAgICApO1xuICAgIH1c
biAgfVxufVxuXG4vKipcbiAqIEVuc3VyZSBhbGwgcHJvcHMgb3B0aW9uIHN5bnRheCBhcmUgbm9y
bWFsaXplZCBpbnRvIHRoZVxuICogT2JqZWN0LWJhc2VkIGZvcm1hdC5cbiAqL1xuZnVuY3Rpb24g
bm9ybWFsaXplUHJvcHMgKG9wdGlvbnMpIHtcbiAgdmFyIHByb3BzID0gb3B0aW9ucy5wcm9wcztc
biAgaWYgKCFwcm9wcykgeyByZXR1cm4gfVxuICB2YXIgcmVzID0ge307XG4gIHZhciBpLCB2YWws
IG5hbWU7XG4gIGlmIChBcnJheS5pc0FycmF5KHByb3BzKSkge1xuICAgIGkgPSBwcm9wcy5sZW5n
dGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgdmFsID0gcHJvcHNbaV07XG4gICAgICBpZiAo
dHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgbmFtZSA9IGNhbWVsaXplKHZhbCk7
XG4gICAgICAgIHJlc1tuYW1lXSA9IHsgdHlwZTogbnVsbCB9O1xuICAgICAgfSBlbHNlIGlmIChw
cm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHdhcm4oJ3By
b3BzIG11c3QgYmUgc3RyaW5ncyB3aGVuIHVzaW5nIGFycmF5IHN5bnRheC4nKTtcbiAgICAgIH1c
biAgICB9XG4gIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChwcm9wcykpIHtcbiAgICBmb3IgKHZh
ciBrZXkgaW4gcHJvcHMpIHtcbiAgICAgIHZhbCA9IHByb3BzW2tleV07XG4gICAgICBuYW1lID0g
Y2FtZWxpemUoa2V5KTtcbiAgICAgIHJlc1tuYW1lXSA9IGlzUGxhaW5PYmplY3QodmFsKVxuICAg
ICAgICA/IHZhbFxuICAgICAgICA6IHsgdHlwZTogdmFsIH07XG4gICAgfVxuICB9XG4gIG9wdGlv
bnMucHJvcHMgPSByZXM7XG59XG5cbi8qKlxuICogTm9ybWFsaXplIGFsbCBpbmplY3Rpb25zIGlu
dG8gT2JqZWN0LWJhc2VkIGZvcm1hdFxuICovXG5mdW5jdGlvbiBub3JtYWxpemVJbmplY3QgKG9w
dGlvbnMpIHtcbiAgdmFyIGluamVjdCA9IG9wdGlvbnMuaW5qZWN0O1xuICBpZiAoQXJyYXkuaXNB
cnJheShpbmplY3QpKSB7XG4gICAgdmFyIG5vcm1hbGl6ZWQgPSBvcHRpb25zLmluamVjdCA9IHt9
O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5qZWN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBu
b3JtYWxpemVkW2luamVjdFtpXV0gPSBpbmplY3RbaV07XG4gICAgfVxuICB9XG59XG5cbi8qKlxu
ICogTm9ybWFsaXplIHJhdyBmdW5jdGlvbiBkaXJlY3RpdmVzIGludG8gb2JqZWN0IGZvcm1hdC5c
biAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRGlyZWN0aXZlcyAob3B0aW9ucykge1xuICB2YXIgZGly
cyA9IG9wdGlvbnMuZGlyZWN0aXZlcztcbiAgaWYgKGRpcnMpIHtcbiAgICBmb3IgKHZhciBrZXkg
aW4gZGlycykge1xuICAgICAgdmFyIGRlZiA9IGRpcnNba2V5XTtcbiAgICAgIGlmICh0eXBlb2Yg
ZGVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGRpcnNba2V5XSA9IHsgYmluZDogZGVmLCB1
cGRhdGU6IGRlZiB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIE1lcmdlIHR3
byBvcHRpb24gb2JqZWN0cyBpbnRvIGEgbmV3IG9uZS5cbiAqIENvcmUgdXRpbGl0eSB1c2VkIGlu
IGJvdGggaW5zdGFudGlhdGlvbiBhbmQgaW5oZXJpdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIG1lcmdl
T3B0aW9ucyAoXG4gIHBhcmVudCxcbiAgY2hpbGQsXG4gIHZtXG4pIHtcbiAgaWYgKHByb2Nlc3Mu
ZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBjaGVja0NvbXBvbmVudHMoY2hp
bGQpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBjaGlsZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNo
aWxkID0gY2hpbGQub3B0aW9ucztcbiAgfVxuXG4gIG5vcm1hbGl6ZVByb3BzKGNoaWxkKTtcbiAg
bm9ybWFsaXplSW5qZWN0KGNoaWxkKTtcbiAgbm9ybWFsaXplRGlyZWN0aXZlcyhjaGlsZCk7XG4g
IHZhciBleHRlbmRzRnJvbSA9IGNoaWxkLmV4dGVuZHM7XG4gIGlmIChleHRlbmRzRnJvbSkge1xu
ICAgIHBhcmVudCA9IG1lcmdlT3B0aW9ucyhwYXJlbnQsIGV4dGVuZHNGcm9tLCB2bSk7XG4gIH1c
biAgaWYgKGNoaWxkLm1peGlucykge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gY2hpbGQubWl4
aW5zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgcGFyZW50ID0gbWVyZ2VPcHRpb25zKHBh
cmVudCwgY2hpbGQubWl4aW5zW2ldLCB2bSk7XG4gICAgfVxuICB9XG4gIHZhciBvcHRpb25zID0g
e307XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIHBhcmVudCkge1xuICAgIG1lcmdlRmllbGQo
a2V5KTtcbiAgfVxuICBmb3IgKGtleSBpbiBjaGlsZCkge1xuICAgIGlmICghaGFzT3duKHBhcmVu
dCwga2V5KSkge1xuICAgICAgbWVyZ2VGaWVsZChrZXkpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlv
biBtZXJnZUZpZWxkIChrZXkpIHtcbiAgICB2YXIgc3RyYXQgPSBzdHJhdHNba2V5XSB8fCBkZWZh
dWx0U3RyYXQ7XG4gICAgb3B0aW9uc1trZXldID0gc3RyYXQocGFyZW50W2tleV0sIGNoaWxkW2tl
eV0sIHZtLCBrZXkpO1xuICB9XG4gIHJldHVybiBvcHRpb25zXG59XG5cbi8qKlxuICogUmVzb2x2
ZSBhbiBhc3NldC5cbiAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBiZWNhdXNlIGNoaWxkIGluc3Rh
bmNlcyBuZWVkIGFjY2Vzc1xuICogdG8gYXNzZXRzIGRlZmluZWQgaW4gaXRzIGFuY2VzdG9yIGNo
YWluLlxuICovXG5mdW5jdGlvbiByZXNvbHZlQXNzZXQgKFxuICBvcHRpb25zLFxuICB0eXBlLFxu
ICBpZCxcbiAgd2Fybk1pc3Npbmdcbikge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAg
aWYgKHR5cGVvZiBpZCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgYXNz
ZXRzID0gb3B0aW9uc1t0eXBlXTtcbiAgLy8gY2hlY2sgbG9jYWwgcmVnaXN0cmF0aW9uIHZhcmlh
dGlvbnMgZmlyc3RcbiAgaWYgKGhhc093bihhc3NldHMsIGlkKSkgeyByZXR1cm4gYXNzZXRzW2lk
XSB9XG4gIHZhciBjYW1lbGl6ZWRJZCA9IGNhbWVsaXplKGlkKTtcbiAgaWYgKGhhc093bihhc3Nl
dHMsIGNhbWVsaXplZElkKSkgeyByZXR1cm4gYXNzZXRzW2NhbWVsaXplZElkXSB9XG4gIHZhciBQ
YXNjYWxDYXNlSWQgPSBjYXBpdGFsaXplKGNhbWVsaXplZElkKTtcbiAgaWYgKGhhc093bihhc3Nl
dHMsIFBhc2NhbENhc2VJZCkpIHsgcmV0dXJuIGFzc2V0c1tQYXNjYWxDYXNlSWRdIH1cbiAgLy8g
ZmFsbGJhY2sgdG8gcHJvdG90eXBlIGNoYWluXG4gIHZhciByZXMgPSBhc3NldHNbaWRdIHx8IGFz
c2V0c1tjYW1lbGl6ZWRJZF0gfHwgYXNzZXRzW1Bhc2NhbENhc2VJZF07XG4gIGlmIChwcm9jZXNz
LmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm5NaXNzaW5nICYmICFyZXMpIHtc
biAgICB3YXJuKFxuICAgICAgJ0ZhaWxlZCB0byByZXNvbHZlICcgKyB0eXBlLnNsaWNlKDAsIC0x
KSArICc6ICcgKyBpZCxcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuICB9XG4gIHJldHVybiByZXNc
bn1cblxuLyogICovXG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcCAoXG4gIGtleSxcbiAgcHJvcE9w
dGlvbnMsXG4gIHByb3BzRGF0YSxcbiAgdm1cbikge1xuICB2YXIgcHJvcCA9IHByb3BPcHRpb25z
W2tleV07XG4gIHZhciBhYnNlbnQgPSAhaGFzT3duKHByb3BzRGF0YSwga2V5KTtcbiAgdmFyIHZh
bHVlID0gcHJvcHNEYXRhW2tleV07XG4gIC8vIGhhbmRsZSBib29sZWFuIHByb3BzXG4gIGlmIChp
c1R5cGUoQm9vbGVhbiwgcHJvcC50eXBlKSkge1xuICAgIGlmIChhYnNlbnQgJiYgIWhhc093bihw
cm9wLCAnZGVmYXVsdCcpKSB7XG4gICAgICB2YWx1ZSA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAo
IWlzVHlwZShTdHJpbmcsIHByb3AudHlwZSkgJiYgKHZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PT0g
aHlwaGVuYXRlKGtleSkpKSB7XG4gICAgICB2YWx1ZSA9IHRydWU7XG4gICAgfVxuICB9XG4gIC8v
IGNoZWNrIGRlZmF1bHQgdmFsdWVcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICB2
YWx1ZSA9IGdldFByb3BEZWZhdWx0VmFsdWUodm0sIHByb3AsIGtleSk7XG4gICAgLy8gc2luY2Ug
dGhlIGRlZmF1bHQgdmFsdWUgaXMgYSBmcmVzaCBjb3B5LFxuICAgIC8vIG1ha2Ugc3VyZSB0byBv
YnNlcnZlIGl0LlxuICAgIHZhciBwcmV2U2hvdWxkQ29udmVydCA9IG9ic2VydmVyU3RhdGUuc2hv
dWxkQ29udmVydDtcbiAgICBvYnNlcnZlclN0YXRlLnNob3VsZENvbnZlcnQgPSB0cnVlO1xuICAg
IG9ic2VydmUodmFsdWUpO1xuICAgIG9ic2VydmVyU3RhdGUuc2hvdWxkQ29udmVydCA9IHByZXZT
aG91bGRDb252ZXJ0O1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1
Y3Rpb24nKSB7XG4gICAgYXNzZXJ0UHJvcChwcm9wLCBrZXksIHZhbHVlLCB2bSwgYWJzZW50KTtc
biAgfVxuICByZXR1cm4gdmFsdWVcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGRlZmF1bHQgdmFsdWUg
b2YgYSBwcm9wLlxuICovXG5mdW5jdGlvbiBnZXRQcm9wRGVmYXVsdFZhbHVlICh2bSwgcHJvcCwg
a2V5KSB7XG4gIC8vIG5vIGRlZmF1bHQsIHJldHVybiB1bmRlZmluZWRcbiAgaWYgKCFoYXNPd24o
cHJvcCwgJ2RlZmF1bHQnKSkge1xuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuICB2YXIgZGVm
ID0gcHJvcC5kZWZhdWx0O1xuICAvLyB3YXJuIGFnYWluc3Qgbm9uLWZhY3RvcnkgZGVmYXVsdHMg
Zm9yIE9iamVjdCAmIEFycmF5XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1
Y3Rpb24nICYmIGlzT2JqZWN0KGRlZikpIHtcbiAgICB3YXJuKFxuICAgICAgJ0ludmFsaWQgZGVm
YXVsdCB2YWx1ZSBmb3IgcHJvcCBcIicgKyBrZXkgKyAnXCI6ICcgK1xuICAgICAgJ1Byb3BzIHdp
dGggdHlwZSBPYmplY3QvQXJyYXkgbXVzdCB1c2UgYSBmYWN0b3J5IGZ1bmN0aW9uICcgK1xuICAg
ICAgJ3RvIHJldHVybiB0aGUgZGVmYXVsdCB2YWx1ZS4nLFxuICAgICAgdm1cbiAgICApO1xuICB9
XG4gIC8vIHRoZSByYXcgcHJvcCB2YWx1ZSB3YXMgYWxzbyB1bmRlZmluZWQgZnJvbSBwcmV2aW91
cyByZW5kZXIsXG4gIC8vIHJldHVybiBwcmV2aW91cyBkZWZhdWx0IHZhbHVlIHRvIGF2b2lkIHVu
bmVjZXNzYXJ5IHdhdGNoZXIgdHJpZ2dlclxuICBpZiAodm0gJiYgdm0uJG9wdGlvbnMucHJvcHNE
YXRhICYmXG4gICAgdm0uJG9wdGlvbnMucHJvcHNEYXRhW2tleV0gPT09IHVuZGVmaW5lZCAmJlxu
ICAgIHZtLl9wcm9wc1trZXldICE9PSB1bmRlZmluZWRcbiAgKSB7XG4gICAgcmV0dXJuIHZtLl9w
cm9wc1trZXldXG4gIH1cbiAgLy8gY2FsbCBmYWN0b3J5IGZ1bmN0aW9uIGZvciBub24tRnVuY3Rp
b24gdHlwZXNcbiAgLy8gYSB2YWx1ZSBpcyBGdW5jdGlvbiBpZiBpdHMgcHJvdG90eXBlIGlzIGZ1
bmN0aW9uIGV2ZW4gYWNyb3NzIGRpZmZlcmVudCBleGVjdXRpb24gY29udGV4dFxuICByZXR1cm4g
dHlwZW9mIGRlZiA9PT0gJ2Z1bmN0aW9uJyAmJiBnZXRUeXBlKHByb3AudHlwZSkgIT09ICdGdW5j
dGlvbidcbiAgICA/IGRlZi5jYWxsKHZtKVxuICAgIDogZGVmXG59XG5cbi8qKlxuICogQXNzZXJ0
IHdoZXRoZXIgYSBwcm9wIGlzIHZhbGlkLlxuICovXG5mdW5jdGlvbiBhc3NlcnRQcm9wIChcbiAg
cHJvcCxcbiAgbmFtZSxcbiAgdmFsdWUsXG4gIHZtLFxuICBhYnNlbnRcbikge1xuICBpZiAocHJv
cC5yZXF1aXJlZCAmJiBhYnNlbnQpIHtcbiAgICB3YXJuKFxuICAgICAgJ01pc3NpbmcgcmVxdWly
ZWQgcHJvcDogXCInICsgbmFtZSArICdcIicsXG4gICAgICB2bVxuICAgICk7XG4gICAgcmV0dXJu
XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwgJiYgIXByb3AucmVxdWlyZWQpIHtcbiAgICByZXR1
cm5cbiAgfVxuICB2YXIgdHlwZSA9IHByb3AudHlwZTtcbiAgdmFyIHZhbGlkID0gIXR5cGUgfHwg
dHlwZSA9PT0gdHJ1ZTtcbiAgdmFyIGV4cGVjdGVkVHlwZXMgPSBbXTtcbiAgaWYgKHR5cGUpIHtc
biAgICBpZiAoIUFycmF5LmlzQXJyYXkodHlwZSkpIHtcbiAgICAgIHR5cGUgPSBbdHlwZV07XG4g
ICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZS5sZW5ndGggJiYgIXZhbGlkOyBpKysp
IHtcbiAgICAgIHZhciBhc3NlcnRlZFR5cGUgPSBhc3NlcnRUeXBlKHZhbHVlLCB0eXBlW2ldKTtc
biAgICAgIGV4cGVjdGVkVHlwZXMucHVzaChhc3NlcnRlZFR5cGUuZXhwZWN0ZWRUeXBlIHx8ICcn
KTtcbiAgICAgIHZhbGlkID0gYXNzZXJ0ZWRUeXBlLnZhbGlkO1xuICAgIH1cbiAgfVxuICBpZiAo
IXZhbGlkKSB7XG4gICAgd2FybihcbiAgICAgICdJbnZhbGlkIHByb3A6IHR5cGUgY2hlY2sgZmFp
bGVkIGZvciBwcm9wIFwiJyArIG5hbWUgKyAnXCIuJyArXG4gICAgICAnIEV4cGVjdGVkICcgKyBl
eHBlY3RlZFR5cGVzLm1hcChjYXBpdGFsaXplKS5qb2luKCcsICcpICtcbiAgICAgICcsIGdvdCAn
ICsgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKS5zbGljZSg4LCAtMSkgKyAn
LicsXG4gICAgICB2bVxuICAgICk7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIHZhbGlkYXRvciA9
IHByb3AudmFsaWRhdG9yO1xuICBpZiAodmFsaWRhdG9yKSB7XG4gICAgaWYgKCF2YWxpZGF0b3Io
dmFsdWUpKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAnSW52YWxpZCBwcm9wOiBjdXN0b20gdmFs
aWRhdG9yIGNoZWNrIGZhaWxlZCBmb3IgcHJvcCBcIicgKyBuYW1lICsgJ1wiLicsXG4gICAgICAg
IHZtXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG52YXIgc2ltcGxlQ2hlY2tSRSA9IC9eKFN0
cmluZ3xOdW1iZXJ8Qm9vbGVhbnxGdW5jdGlvbnxTeW1ib2wpJC87XG5cbmZ1bmN0aW9uIGFzc2Vy
dFR5cGUgKHZhbHVlLCB0eXBlKSB7XG4gIHZhciB2YWxpZDtcbiAgdmFyIGV4cGVjdGVkVHlwZSA9
IGdldFR5cGUodHlwZSk7XG4gIGlmIChzaW1wbGVDaGVja1JFLnRlc3QoZXhwZWN0ZWRUeXBlKSkg
e1xuICAgIHZhbGlkID0gdHlwZW9mIHZhbHVlID09PSBleHBlY3RlZFR5cGUudG9Mb3dlckNhc2Uo
KTtcbiAgfSBlbHNlIGlmIChleHBlY3RlZFR5cGUgPT09ICdPYmplY3QnKSB7XG4gICAgdmFsaWQg
PSBpc1BsYWluT2JqZWN0KHZhbHVlKTtcbiAgfSBlbHNlIGlmIChleHBlY3RlZFR5cGUgPT09ICdB
cnJheScpIHtcbiAgICB2YWxpZCA9IEFycmF5LmlzQXJyYXkodmFsdWUpO1xuICB9IGVsc2Uge1xu
ICAgIHZhbGlkID0gdmFsdWUgaW5zdGFuY2VvZiB0eXBlO1xuICB9XG4gIHJldHVybiB7XG4gICAg
dmFsaWQ6IHZhbGlkLFxuICAgIGV4cGVjdGVkVHlwZTogZXhwZWN0ZWRUeXBlXG4gIH1cbn1cblxu
LyoqXG4gKiBVc2UgZnVuY3Rpb24gc3RyaW5nIG5hbWUgdG8gY2hlY2sgYnVpbHQtaW4gdHlwZXMs
XG4gKiBiZWNhdXNlIGEgc2ltcGxlIGVxdWFsaXR5IGNoZWNrIHdpbGwgZmFpbCB3aGVuIHJ1bm5p
bmdcbiAqIGFjcm9zcyBkaWZmZXJlbnQgdm1zIC8gaWZyYW1lcy5cbiAqL1xuZnVuY3Rpb24gZ2V0
VHlwZSAoZm4pIHtcbiAgdmFyIG1hdGNoID0gZm4gJiYgZm4udG9TdHJpbmcoKS5tYXRjaCgvXlxc
cypmdW5jdGlvbiAoXFx3KykvKTtcbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0gOiAnJ1xufVxu
XG5mdW5jdGlvbiBpc1R5cGUgKHR5cGUsIGZuKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShmbikp
IHtcbiAgICByZXR1cm4gZ2V0VHlwZShmbikgPT09IGdldFR5cGUodHlwZSlcbiAgfVxuICBmb3Ig
KHZhciBpID0gMCwgbGVuID0gZm4ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAoZ2V0
VHlwZShmbltpXSkgPT09IGdldFR5cGUodHlwZSkpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAg
fVxuICB9XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIHJldHVybiBmYWxzZVxufVxu
XG4vKiAgKi9cblxudmFyIG1hcms7XG52YXIgbWVhc3VyZTtcblxuaWYgKHByb2Nlc3MuZW52Lk5P
REVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIHBlcmYgPSBpbkJyb3dzZXIgJiYgd2lu
ZG93LnBlcmZvcm1hbmNlO1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKFxuICAg
IHBlcmYgJiZcbiAgICBwZXJmLm1hcmsgJiZcbiAgICBwZXJmLm1lYXN1cmUgJiZcbiAgICBwZXJm
LmNsZWFyTWFya3MgJiZcbiAgICBwZXJmLmNsZWFyTWVhc3VyZXNcbiAgKSB7XG4gICAgbWFyayA9
IGZ1bmN0aW9uICh0YWcpIHsgcmV0dXJuIHBlcmYubWFyayh0YWcpOyB9O1xuICAgIG1lYXN1cmUg
PSBmdW5jdGlvbiAobmFtZSwgc3RhcnRUYWcsIGVuZFRhZykge1xuICAgICAgcGVyZi5tZWFzdXJl
KG5hbWUsIHN0YXJ0VGFnLCBlbmRUYWcpO1xuICAgICAgcGVyZi5jbGVhck1hcmtzKHN0YXJ0VGFn
KTtcbiAgICAgIHBlcmYuY2xlYXJNYXJrcyhlbmRUYWcpO1xuICAgICAgcGVyZi5jbGVhck1lYXN1
cmVzKG5hbWUpO1xuICAgIH07XG4gIH1cbn1cblxuLyogbm90IHR5cGUgY2hlY2tpbmcgdGhpcyBm
aWxlIGJlY2F1c2UgZmxvdyBkb2Vzbid0IHBsYXkgd2VsbCB3aXRoIFByb3h5ICovXG5cbnZhciBp
bml0UHJveHk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7
XG4gIHZhciBhbGxvd2VkR2xvYmFscyA9IG1ha2VNYXAoXG4gICAgJ0luZmluaXR5LHVuZGVmaW5l
ZCxOYU4saXNGaW5pdGUsaXNOYU4sJyArXG4gICAgJ3BhcnNlRmxvYXQscGFyc2VJbnQsZGVjb2Rl
VVJJLGRlY29kZVVSSUNvbXBvbmVudCxlbmNvZGVVUkksZW5jb2RlVVJJQ29tcG9uZW50LCcgK1xu
ICAgICdNYXRoLE51bWJlcixEYXRlLEFycmF5LE9iamVjdCxCb29sZWFuLFN0cmluZyxSZWdFeHAs
TWFwLFNldCxKU09OLEludGwsJyArXG4gICAgJ3JlcXVpcmUnIC8vIGZvciBXZWJwYWNrL0Jyb3dz
ZXJpZnlcbiAgKTtcblxuICB2YXIgd2Fybk5vblByZXNlbnQgPSBmdW5jdGlvbiAodGFyZ2V0LCBr
ZXkpIHtcbiAgICB3YXJuKFxuICAgICAgXCJQcm9wZXJ0eSBvciBtZXRob2QgXFxcIlwiICsga2V5
ICsgXCJcXFwiIGlzIG5vdCBkZWZpbmVkIG9uIHRoZSBpbnN0YW5jZSBidXQgXCIgK1xuICAgICAg
XCJyZWZlcmVuY2VkIGR1cmluZyByZW5kZXIuIE1ha2Ugc3VyZSB0byBkZWNsYXJlIHJlYWN0aXZl
IGRhdGEgXCIgK1xuICAgICAgXCJwcm9wZXJ0aWVzIGluIHRoZSBkYXRhIG9wdGlvbi5cIixcbiAg
ICAgIHRhcmdldFxuICAgICk7XG4gIH07XG5cbiAgdmFyIGhhc1Byb3h5ID1cbiAgICB0eXBlb2Yg
UHJveHkgIT09ICd1bmRlZmluZWQnICYmXG4gICAgUHJveHkudG9TdHJpbmcoKS5tYXRjaCgvbmF0
aXZlIGNvZGUvKTtcblxuICBpZiAoaGFzUHJveHkpIHtcbiAgICB2YXIgaXNCdWlsdEluTW9kaWZp
ZXIgPSBtYWtlTWFwKCdzdG9wLHByZXZlbnQsc2VsZixjdHJsLHNoaWZ0LGFsdCxtZXRhJyk7XG4g
ICAgY29uZmlnLmtleUNvZGVzID0gbmV3IFByb3h5KGNvbmZpZy5rZXlDb2Rlcywge1xuICAgICAg
c2V0OiBmdW5jdGlvbiBzZXQgKHRhcmdldCwga2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAoaXNC
dWlsdEluTW9kaWZpZXIoa2V5KSkge1xuICAgICAgICAgIHdhcm4oKFwiQXZvaWQgb3ZlcndyaXRp
bmcgYnVpbHQtaW4gbW9kaWZpZXIgaW4gY29uZmlnLmtleUNvZGVzOiAuXCIgKyBrZXkpKTtcbiAg
ICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0YXJnZXRb
a2V5XSA9IHZhbHVlO1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1c
biAgICB9KTtcbiAgfVxuXG4gIHZhciBoYXNIYW5kbGVyID0ge1xuICAgIGhhczogZnVuY3Rpb24g
aGFzICh0YXJnZXQsIGtleSkge1xuICAgICAgdmFyIGhhcyA9IGtleSBpbiB0YXJnZXQ7XG4gICAg
ICB2YXIgaXNBbGxvd2VkID0gYWxsb3dlZEdsb2JhbHMoa2V5KSB8fCBrZXkuY2hhckF0KDApID09
PSAnXyc7XG4gICAgICBpZiAoIWhhcyAmJiAhaXNBbGxvd2VkKSB7XG4gICAgICAgIHdhcm5Ob25Q
cmVzZW50KHRhcmdldCwga2V5KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXMgfHwgIWlzQWxs
b3dlZFxuICAgIH1cbiAgfTtcblxuICB2YXIgZ2V0SGFuZGxlciA9IHtcbiAgICBnZXQ6IGZ1bmN0
aW9uIGdldCAodGFyZ2V0LCBrZXkpIHtcbiAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5n
JyAmJiAhKGtleSBpbiB0YXJnZXQpKSB7XG4gICAgICAgIHdhcm5Ob25QcmVzZW50KHRhcmdldCwg
a2V5KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0YXJnZXRba2V5XVxuICAgIH1cbiAgfTtcblxu
ICBpbml0UHJveHkgPSBmdW5jdGlvbiBpbml0UHJveHkgKHZtKSB7XG4gICAgaWYgKGhhc1Byb3h5
KSB7XG4gICAgICAvLyBkZXRlcm1pbmUgd2hpY2ggcHJveHkgaGFuZGxlciB0byB1c2VcbiAgICAg
IHZhciBvcHRpb25zID0gdm0uJG9wdGlvbnM7XG4gICAgICB2YXIgaGFuZGxlcnMgPSBvcHRpb25z
LnJlbmRlciAmJiBvcHRpb25zLnJlbmRlci5fd2l0aFN0cmlwcGVkXG4gICAgICAgID8gZ2V0SGFu
ZGxlclxuICAgICAgICA6IGhhc0hhbmRsZXI7XG4gICAgICB2bS5fcmVuZGVyUHJveHkgPSBuZXcg
UHJveHkodm0sIGhhbmRsZXJzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdm0uX3JlbmRlclByb3h5
ID0gdm07XG4gICAgfVxuICB9O1xufVxuXG4vKiAgKi9cblxudmFyIFZOb2RlID0gZnVuY3Rpb24g
Vk5vZGUgKFxuICB0YWcsXG4gIGRhdGEsXG4gIGNoaWxkcmVuLFxuICB0ZXh0LFxuICBlbG0sXG4g
IGNvbnRleHQsXG4gIGNvbXBvbmVudE9wdGlvbnMsXG4gIGFzeW5jRmFjdG9yeVxuKSB7XG4gIHRo
aXMudGFnID0gdGFnO1xuICB0aGlzLmRhdGEgPSBkYXRhO1xuICB0aGlzLmNoaWxkcmVuID0gY2hp
bGRyZW47XG4gIHRoaXMudGV4dCA9IHRleHQ7XG4gIHRoaXMuZWxtID0gZWxtO1xuICB0aGlzLm5z
ID0gdW5kZWZpbmVkO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLmZ1bmN0aW9u
YWxDb250ZXh0ID0gdW5kZWZpbmVkO1xuICB0aGlzLmtleSA9IGRhdGEgJiYgZGF0YS5rZXk7XG4g
IHRoaXMuY29tcG9uZW50T3B0aW9ucyA9IGNvbXBvbmVudE9wdGlvbnM7XG4gIHRoaXMuY29tcG9u
ZW50SW5zdGFuY2UgPSB1bmRlZmluZWQ7XG4gIHRoaXMucGFyZW50ID0gdW5kZWZpbmVkO1xuICB0
aGlzLnJhdyA9IGZhbHNlO1xuICB0aGlzLmlzU3RhdGljID0gZmFsc2U7XG4gIHRoaXMuaXNSb290
SW5zZXJ0ID0gdHJ1ZTtcbiAgdGhpcy5pc0NvbW1lbnQgPSBmYWxzZTtcbiAgdGhpcy5pc0Nsb25l
ZCA9IGZhbHNlO1xuICB0aGlzLmlzT25jZSA9IGZhbHNlO1xuICB0aGlzLmFzeW5jRmFjdG9yeSA9
IGFzeW5jRmFjdG9yeTtcbiAgdGhpcy5hc3luY01ldGEgPSB1bmRlZmluZWQ7XG4gIHRoaXMuaXNB
c3luY1BsYWNlaG9sZGVyID0gZmFsc2U7XG59O1xuXG52YXIgcHJvdG90eXBlQWNjZXNzb3JzID0g
eyBjaGlsZDoge30gfTtcblxuLy8gREVQUkVDQVRFRDogYWxpYXMgZm9yIGNvbXBvbmVudEluc3Rh
bmNlIGZvciBiYWNrd2FyZHMgY29tcGF0LlxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnBy
b3RvdHlwZUFjY2Vzc29ycy5jaGlsZC5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlz
LmNvbXBvbmVudEluc3RhbmNlXG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyggVk5vZGUu
cHJvdG90eXBlLCBwcm90b3R5cGVBY2Nlc3NvcnMgKTtcblxudmFyIGNyZWF0ZUVtcHR5Vk5vZGUg
PSBmdW5jdGlvbiAodGV4dCkge1xuICBpZiAoIHRleHQgPT09IHZvaWQgMCApIHRleHQgPSAnJztc
blxuICB2YXIgbm9kZSA9IG5ldyBWTm9kZSgpO1xuICBub2RlLnRleHQgPSB0ZXh0O1xuICBub2Rl
LmlzQ29tbWVudCA9IHRydWU7XG4gIHJldHVybiBub2RlXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVU
ZXh0Vk5vZGUgKHZhbCkge1xuICByZXR1cm4gbmV3IFZOb2RlKHVuZGVmaW5lZCwgdW5kZWZpbmVk
LCB1bmRlZmluZWQsIFN0cmluZyh2YWwpKVxufVxuXG4vLyBvcHRpbWl6ZWQgc2hhbGxvdyBjbG9u
ZVxuLy8gdXNlZCBmb3Igc3RhdGljIG5vZGVzIGFuZCBzbG90IG5vZGVzIGJlY2F1c2UgdGhleSBt
YXkgYmUgcmV1c2VkIGFjcm9zc1xuLy8gbXVsdGlwbGUgcmVuZGVycywgY2xvbmluZyB0aGVtIGF2
b2lkcyBlcnJvcnMgd2hlbiBET00gbWFuaXB1bGF0aW9ucyByZWx5XG4vLyBvbiB0aGVpciBlbG0g
cmVmZXJlbmNlLlxuZnVuY3Rpb24gY2xvbmVWTm9kZSAodm5vZGUpIHtcbiAgdmFyIGNsb25lZCA9
IG5ldyBWTm9kZShcbiAgICB2bm9kZS50YWcsXG4gICAgdm5vZGUuZGF0YSxcbiAgICB2bm9kZS5j
aGlsZHJlbixcbiAgICB2bm9kZS50ZXh0LFxuICAgIHZub2RlLmVsbSxcbiAgICB2bm9kZS5jb250
ZXh0LFxuICAgIHZub2RlLmNvbXBvbmVudE9wdGlvbnMsXG4gICAgdm5vZGUuYXN5bmNGYWN0b3J5
XG4gICk7XG4gIGNsb25lZC5ucyA9IHZub2RlLm5zO1xuICBjbG9uZWQuaXNTdGF0aWMgPSB2bm9k
ZS5pc1N0YXRpYztcbiAgY2xvbmVkLmtleSA9IHZub2RlLmtleTtcbiAgY2xvbmVkLmlzQ29tbWVu
dCA9IHZub2RlLmlzQ29tbWVudDtcbiAgY2xvbmVkLmlzQ2xvbmVkID0gdHJ1ZTtcbiAgcmV0dXJu
IGNsb25lZFxufVxuXG5mdW5jdGlvbiBjbG9uZVZOb2RlcyAodm5vZGVzKSB7XG4gIHZhciBsZW4g
PSB2bm9kZXMubGVuZ3RoO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KGxlbik7XG4gIGZvciAodmFy
IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICByZXNbaV0gPSBjbG9uZVZOb2RlKHZub2Rlc1tp
XSk7XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG4vKiAgKi9cblxudmFyIG5vcm1hbGl6ZUV2ZW50
ID0gY2FjaGVkKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHZhciBwYXNzaXZlID0gbmFtZS5jaGFyQXQo
MCkgPT09ICcmJztcbiAgbmFtZSA9IHBhc3NpdmUgPyBuYW1lLnNsaWNlKDEpIDogbmFtZTtcbiAg
dmFyIG9uY2UkJDEgPSBuYW1lLmNoYXJBdCgwKSA9PT0gJ34nOyAvLyBQcmVmaXhlZCBsYXN0LCBj
aGVja2VkIGZpcnN0XG4gIG5hbWUgPSBvbmNlJCQxID8gbmFtZS5zbGljZSgxKSA6IG5hbWU7XG4g
IHZhciBjYXB0dXJlID0gbmFtZS5jaGFyQXQoMCkgPT09ICchJztcbiAgbmFtZSA9IGNhcHR1cmUg
PyBuYW1lLnNsaWNlKDEpIDogbmFtZTtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lLFxuICAg
IG9uY2U6IG9uY2UkJDEsXG4gICAgY2FwdHVyZTogY2FwdHVyZSxcbiAgICBwYXNzaXZlOiBwYXNz
aXZlXG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBjcmVhdGVGbkludm9rZXIgKGZucykge1xuICBmdW5j
dGlvbiBpbnZva2VyICgpIHtcbiAgICB2YXIgYXJndW1lbnRzJDEgPSBhcmd1bWVudHM7XG5cbiAg
ICB2YXIgZm5zID0gaW52b2tlci5mbnM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm5zKSkge1xu
ICAgICAgdmFyIGNsb25lZCA9IGZucy5zbGljZSgpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBjbG9uZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY2xvbmVkW2ldLmFwcGx5KG51bGwsIGFy
Z3VtZW50cyQxKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcmV0dXJuIGhhbmRs
ZXIgcmV0dXJuIHZhbHVlIGZvciBzaW5nbGUgaGFuZGxlcnNcbiAgICAgIHJldHVybiBmbnMuYXBw
bHkobnVsbCwgYXJndW1lbnRzKVxuICAgIH1cbiAgfVxuICBpbnZva2VyLmZucyA9IGZucztcbiAg
cmV0dXJuIGludm9rZXJcbn1cblxuZnVuY3Rpb24gdXBkYXRlTGlzdGVuZXJzIChcbiAgb24sXG4g
IG9sZE9uLFxuICBhZGQsXG4gIHJlbW92ZSQkMSxcbiAgdm1cbikge1xuICB2YXIgbmFtZSwgY3Vy
LCBvbGQsIGV2ZW50O1xuICBmb3IgKG5hbWUgaW4gb24pIHtcbiAgICBjdXIgPSBvbltuYW1lXTtc
biAgICBvbGQgPSBvbGRPbltuYW1lXTtcbiAgICBldmVudCA9IG5vcm1hbGl6ZUV2ZW50KG5hbWUp
O1xuICAgIGlmIChpc1VuZGVmKGN1cikpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9
PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICAgXCJJbnZhbGlkIGhhbmRsZXIgZm9yIGV2
ZW50IFxcXCJcIiArIChldmVudC5uYW1lKSArIFwiXFxcIjogZ290IFwiICsgU3RyaW5nKGN1ciks
XG4gICAgICAgIHZtXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoaXNVbmRlZihvbGQpKSB7XG4g
ICAgICBpZiAoaXNVbmRlZihjdXIuZm5zKSkge1xuICAgICAgICBjdXIgPSBvbltuYW1lXSA9IGNy
ZWF0ZUZuSW52b2tlcihjdXIpO1xuICAgICAgfVxuICAgICAgYWRkKGV2ZW50Lm5hbWUsIGN1ciwg
ZXZlbnQub25jZSwgZXZlbnQuY2FwdHVyZSwgZXZlbnQucGFzc2l2ZSk7XG4gICAgfSBlbHNlIGlm
IChjdXIgIT09IG9sZCkge1xuICAgICAgb2xkLmZucyA9IGN1cjtcbiAgICAgIG9uW25hbWVdID0g
b2xkO1xuICAgIH1cbiAgfVxuICBmb3IgKG5hbWUgaW4gb2xkT24pIHtcbiAgICBpZiAoaXNVbmRl
ZihvbltuYW1lXSkpIHtcbiAgICAgIGV2ZW50ID0gbm9ybWFsaXplRXZlbnQobmFtZSk7XG4gICAg
ICByZW1vdmUkJDEoZXZlbnQubmFtZSwgb2xkT25bbmFtZV0sIGV2ZW50LmNhcHR1cmUpO1xuICAg
IH1cbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gbWVyZ2VWTm9kZUhvb2sgKGRlZiwgaG9v
a0tleSwgaG9vaykge1xuICB2YXIgaW52b2tlcjtcbiAgdmFyIG9sZEhvb2sgPSBkZWZbaG9va0tl
eV07XG5cbiAgZnVuY3Rpb24gd3JhcHBlZEhvb2sgKCkge1xuICAgIGhvb2suYXBwbHkodGhpcywg
YXJndW1lbnRzKTtcbiAgICAvLyBpbXBvcnRhbnQ6IHJlbW92ZSBtZXJnZWQgaG9vayB0byBlbnN1
cmUgaXQncyBjYWxsZWQgb25seSBvbmNlXG4gICAgLy8gYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtc
biAgICByZW1vdmUoaW52b2tlci5mbnMsIHdyYXBwZWRIb29rKTtcbiAgfVxuXG4gIGlmIChpc1Vu
ZGVmKG9sZEhvb2spKSB7XG4gICAgLy8gbm8gZXhpc3RpbmcgaG9va1xuICAgIGludm9rZXIgPSBj
cmVhdGVGbkludm9rZXIoW3dyYXBwZWRIb29rXSk7XG4gIH0gZWxzZSB7XG4gICAgLyogaXN0YW5i
dWwgaWdub3JlIGlmICovXG4gICAgaWYgKGlzRGVmKG9sZEhvb2suZm5zKSAmJiBpc1RydWUob2xk
SG9vay5tZXJnZWQpKSB7XG4gICAgICAvLyBhbHJlYWR5IGEgbWVyZ2VkIGludm9rZXJcbiAgICAg
IGludm9rZXIgPSBvbGRIb29rO1xuICAgICAgaW52b2tlci5mbnMucHVzaCh3cmFwcGVkSG9vayk7
XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGV4aXN0aW5nIHBsYWluIGhvb2tcbiAgICAgIGludm9r
ZXIgPSBjcmVhdGVGbkludm9rZXIoW29sZEhvb2ssIHdyYXBwZWRIb29rXSk7XG4gICAgfVxuICB9
XG5cbiAgaW52b2tlci5tZXJnZWQgPSB0cnVlO1xuICBkZWZbaG9va0tleV0gPSBpbnZva2VyO1xu
fVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gZXh0cmFjdFByb3BzRnJvbVZOb2RlRGF0YSAoXG4gIGRh
dGEsXG4gIEN0b3IsXG4gIHRhZ1xuKSB7XG4gIC8vIHdlIGFyZSBvbmx5IGV4dHJhY3RpbmcgcmF3
IHZhbHVlcyBoZXJlLlxuICAvLyB2YWxpZGF0aW9uIGFuZCBkZWZhdWx0IHZhbHVlcyBhcmUgaGFu
ZGxlZCBpbiB0aGUgY2hpbGRcbiAgLy8gY29tcG9uZW50IGl0c2VsZi5cbiAgdmFyIHByb3BPcHRp
b25zID0gQ3Rvci5vcHRpb25zLnByb3BzO1xuICBpZiAoaXNVbmRlZihwcm9wT3B0aW9ucykpIHtc
biAgICByZXR1cm5cbiAgfVxuICB2YXIgcmVzID0ge307XG4gIHZhciBhdHRycyA9IGRhdGEuYXR0
cnM7XG4gIHZhciBwcm9wcyA9IGRhdGEucHJvcHM7XG4gIGlmIChpc0RlZihhdHRycykgfHwgaXNE
ZWYocHJvcHMpKSB7XG4gICAgZm9yICh2YXIga2V5IGluIHByb3BPcHRpb25zKSB7XG4gICAgICB2
YXIgYWx0S2V5ID0gaHlwaGVuYXRlKGtleSk7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9F
TlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB2YXIga2V5SW5Mb3dlckNhc2UgPSBrZXku
dG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGtleSAhPT0ga2V5SW5Mb3dl
ckNhc2UgJiZcbiAgICAgICAgICBhdHRycyAmJiBoYXNPd24oYXR0cnMsIGtleUluTG93ZXJDYXNl
KVxuICAgICAgICApIHtcbiAgICAgICAgICB0aXAoXG4gICAgICAgICAgICBcIlByb3AgXFxcIlwi
ICsga2V5SW5Mb3dlckNhc2UgKyBcIlxcXCIgaXMgcGFzc2VkIHRvIGNvbXBvbmVudCBcIiArXG4g
ICAgICAgICAgICAoZm9ybWF0Q29tcG9uZW50TmFtZSh0YWcgfHwgQ3RvcikpICsgXCIsIGJ1dCB0
aGUgZGVjbGFyZWQgcHJvcCBuYW1lIGlzXCIgK1xuICAgICAgICAgICAgXCIgXFxcIlwiICsga2V5
ICsgXCJcXFwiLiBcIiArXG4gICAgICAgICAgICBcIk5vdGUgdGhhdCBIVE1MIGF0dHJpYnV0ZXMg
YXJlIGNhc2UtaW5zZW5zaXRpdmUgYW5kIGNhbWVsQ2FzZWQgXCIgK1xuICAgICAgICAgICAgXCJw
cm9wcyBuZWVkIHRvIHVzZSB0aGVpciBrZWJhYi1jYXNlIGVxdWl2YWxlbnRzIHdoZW4gdXNpbmcg
aW4tRE9NIFwiICtcbiAgICAgICAgICAgIFwidGVtcGxhdGVzLiBZb3Ugc2hvdWxkIHByb2JhYmx5
IHVzZSBcXFwiXCIgKyBhbHRLZXkgKyBcIlxcXCIgaW5zdGVhZCBvZiBcXFwiXCIgKyBrZXkgKyBc
IlxcXCIuXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjaGVja1By
b3AocmVzLCBwcm9wcywga2V5LCBhbHRLZXksIHRydWUpIHx8XG4gICAgICBjaGVja1Byb3AocmVz
LCBhdHRycywga2V5LCBhbHRLZXksIGZhbHNlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xu
fVxuXG5mdW5jdGlvbiBjaGVja1Byb3AgKFxuICByZXMsXG4gIGhhc2gsXG4gIGtleSxcbiAgYWx0
S2V5LFxuICBwcmVzZXJ2ZVxuKSB7XG4gIGlmIChpc0RlZihoYXNoKSkge1xuICAgIGlmIChoYXNP
d24oaGFzaCwga2V5KSkge1xuICAgICAgcmVzW2tleV0gPSBoYXNoW2tleV07XG4gICAgICBpZiAo
IXByZXNlcnZlKSB7XG4gICAgICAgIGRlbGV0ZSBoYXNoW2tleV07XG4gICAgICB9XG4gICAgICBy
ZXR1cm4gdHJ1ZVxuICAgIH0gZWxzZSBpZiAoaGFzT3duKGhhc2gsIGFsdEtleSkpIHtcbiAgICAg
IHJlc1trZXldID0gaGFzaFthbHRLZXldO1xuICAgICAgaWYgKCFwcmVzZXJ2ZSkge1xuICAgICAg
ICBkZWxldGUgaGFzaFthbHRLZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9
XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qICAqL1xuXG4vLyBUaGUgdGVtcGxhdGUgY29t
cGlsZXIgYXR0ZW1wdHMgdG8gbWluaW1pemUgdGhlIG5lZWQgZm9yIG5vcm1hbGl6YXRpb24gYnlc
bi8vIHN0YXRpY2FsbHkgYW5hbHl6aW5nIHRoZSB0ZW1wbGF0ZSBhdCBjb21waWxlIHRpbWUuXG4v
L1xuLy8gRm9yIHBsYWluIEhUTUwgbWFya3VwLCBub3JtYWxpemF0aW9uIGNhbiBiZSBjb21wbGV0
ZWx5IHNraXBwZWQgYmVjYXVzZSB0aGVcbi8vIGdlbmVyYXRlZCByZW5kZXIgZnVuY3Rpb24gaXMg
Z3VhcmFudGVlZCB0byByZXR1cm4gQXJyYXk8Vk5vZGU+LiBUaGVyZSBhcmVcbi8vIHR3byBjYXNl
cyB3aGVyZSBleHRyYSBub3JtYWxpemF0aW9uIGlzIG5lZWRlZDpcblxuLy8gMS4gV2hlbiB0aGUg
Y2hpbGRyZW4gY29udGFpbnMgY29tcG9uZW50cyAtIGJlY2F1c2UgYSBmdW5jdGlvbmFsIGNvbXBv
bmVudFxuLy8gbWF5IHJldHVybiBhbiBBcnJheSBpbnN0ZWFkIG9mIGEgc2luZ2xlIHJvb3QuIElu
IHRoaXMgY2FzZSwganVzdCBhIHNpbXBsZVxuLy8gbm9ybWFsaXphdGlvbiBpcyBuZWVkZWQgLSBp
ZiBhbnkgY2hpbGQgaXMgYW4gQXJyYXksIHdlIGZsYXR0ZW4gdGhlIHdob2xlXG4vLyB0aGluZyB3
aXRoIEFycmF5LnByb3RvdHlwZS5jb25jYXQuIEl0IGlzIGd1YXJhbnRlZWQgdG8gYmUgb25seSAx
LWxldmVsIGRlZXBcbi8vIGJlY2F1c2UgZnVuY3Rpb25hbCBjb21wb25lbnRzIGFscmVhZHkgbm9y
bWFsaXplIHRoZWlyIG93biBjaGlsZHJlbi5cbmZ1bmN0aW9uIHNpbXBsZU5vcm1hbGl6ZUNoaWxk
cmVuIChjaGlsZHJlbikge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsg
aSsrKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW5baV0pKSB7XG4gICAgICByZXR1
cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSwgY2hpbGRyZW4pXG4gICAgfVxuICB9
XG4gIHJldHVybiBjaGlsZHJlblxufVxuXG4vLyAyLiBXaGVuIHRoZSBjaGlsZHJlbiBjb250YWlu
cyBjb25zdHJ1Y3RzIHRoYXQgYWx3YXlzIGdlbmVyYXRlZCBuZXN0ZWQgQXJyYXlzLFxuLy8gZS5n
LiA8dGVtcGxhdGU+LCA8c2xvdD4sIHYtZm9yLCBvciB3aGVuIHRoZSBjaGlsZHJlbiBpcyBwcm92
aWRlZCBieSB1c2VyXG4vLyB3aXRoIGhhbmQtd3JpdHRlbiByZW5kZXIgZnVuY3Rpb25zIC8gSlNY
LiBJbiBzdWNoIGNhc2VzIGEgZnVsbCBub3JtYWxpemF0aW9uXG4vLyBpcyBuZWVkZWQgdG8gY2F0
ZXIgdG8gYWxsIHBvc3NpYmxlIHR5cGVzIG9mIGNoaWxkcmVuIHZhbHVlcy5cbmZ1bmN0aW9uIG5v
cm1hbGl6ZUNoaWxkcmVuIChjaGlsZHJlbikge1xuICByZXR1cm4gaXNQcmltaXRpdmUoY2hpbGRy
ZW4pXG4gICAgPyBbY3JlYXRlVGV4dFZOb2RlKGNoaWxkcmVuKV1cbiAgICA6IEFycmF5LmlzQXJy
YXkoY2hpbGRyZW4pXG4gICAgICA/IG5vcm1hbGl6ZUFycmF5Q2hpbGRyZW4oY2hpbGRyZW4pXG4g
ICAgICA6IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBpc1RleHROb2RlIChub2RlKSB7XG4gIHJl
dHVybiBpc0RlZihub2RlKSAmJiBpc0RlZihub2RlLnRleHQpICYmIGlzRmFsc2Uobm9kZS5pc0Nv
bW1lbnQpXG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5Q2hpbGRyZW4gKGNoaWxkcmVuLCBu
ZXN0ZWRJbmRleCkge1xuICB2YXIgcmVzID0gW107XG4gIHZhciBpLCBjLCBsYXN0O1xuICBmb3Ig
KGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICBjID0gY2hpbGRyZW5baV07
XG4gICAgaWYgKGlzVW5kZWYoYykgfHwgdHlwZW9mIGMgPT09ICdib29sZWFuJykgeyBjb250aW51
ZSB9XG4gICAgbGFzdCA9IHJlc1tyZXMubGVuZ3RoIC0gMV07XG4gICAgLy8gIG5lc3RlZFxuICAg
IGlmIChBcnJheS5pc0FycmF5KGMpKSB7XG4gICAgICByZXMucHVzaC5hcHBseShyZXMsIG5vcm1h
bGl6ZUFycmF5Q2hpbGRyZW4oYywgKChuZXN0ZWRJbmRleCB8fCAnJykgKyBcIl9cIiArIGkpKSk7
XG4gICAgfSBlbHNlIGlmIChpc1ByaW1pdGl2ZShjKSkge1xuICAgICAgaWYgKGlzVGV4dE5vZGUo
bGFzdCkpIHtcbiAgICAgICAgLy8gbWVyZ2UgYWRqYWNlbnQgdGV4dCBub2Rlc1xuICAgICAgICAv
LyB0aGlzIGlzIG5lY2Vzc2FyeSBmb3IgU1NSIGh5ZHJhdGlvbiBiZWNhdXNlIHRleHQgbm9kZXMg
YXJlXG4gICAgICAgIC8vIGVzc2VudGlhbGx5IG1lcmdlZCB3aGVuIHJlbmRlcmVkIHRvIEhUTUwg
c3RyaW5nc1xuICAgICAgICAobGFzdCkudGV4dCArPSBTdHJpbmcoYyk7XG4gICAgICB9IGVsc2Ug
aWYgKGMgIT09ICcnKSB7XG4gICAgICAgIC8vIGNvbnZlcnQgcHJpbWl0aXZlIHRvIHZub2RlXG4g
ICAgICAgIHJlcy5wdXNoKGNyZWF0ZVRleHRWTm9kZShjKSk7XG4gICAgICB9XG4gICAgfSBlbHNl
IHtcbiAgICAgIGlmIChpc1RleHROb2RlKGMpICYmIGlzVGV4dE5vZGUobGFzdCkpIHtcbiAgICAg
ICAgLy8gbWVyZ2UgYWRqYWNlbnQgdGV4dCBub2Rlc1xuICAgICAgICByZXNbcmVzLmxlbmd0aCAt
IDFdID0gY3JlYXRlVGV4dFZOb2RlKGxhc3QudGV4dCArIGMudGV4dCk7XG4gICAgICB9IGVsc2Ug
e1xuICAgICAgICAvLyBkZWZhdWx0IGtleSBmb3IgbmVzdGVkIGFycmF5IGNoaWxkcmVuIChsaWtl
bHkgZ2VuZXJhdGVkIGJ5IHYtZm9yKVxuICAgICAgICBpZiAoaXNUcnVlKGNoaWxkcmVuLl9pc1ZM
aXN0KSAmJlxuICAgICAgICAgIGlzRGVmKGMudGFnKSAmJlxuICAgICAgICAgIGlzVW5kZWYoYy5r
ZXkpICYmXG4gICAgICAgICAgaXNEZWYobmVzdGVkSW5kZXgpKSB7XG4gICAgICAgICAgYy5rZXkg
PSBcIl9fdmxpc3RcIiArIG5lc3RlZEluZGV4ICsgXCJfXCIgKyBpICsgXCJfX1wiO1xuICAgICAg
ICB9XG4gICAgICAgIHJlcy5wdXNoKGMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4g
cmVzXG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBlbnN1cmVDdG9yIChjb21wLCBiYXNlKSB7XG4g
IGlmIChjb21wLl9fZXNNb2R1bGUgJiYgY29tcC5kZWZhdWx0KSB7XG4gICAgY29tcCA9IGNvbXAu
ZGVmYXVsdDtcbiAgfVxuICByZXR1cm4gaXNPYmplY3QoY29tcClcbiAgICA/IGJhc2UuZXh0ZW5k
KGNvbXApXG4gICAgOiBjb21wXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFzeW5jUGxhY2Vob2xkZXIg
KFxuICBmYWN0b3J5LFxuICBkYXRhLFxuICBjb250ZXh0LFxuICBjaGlsZHJlbixcbiAgdGFnXG4p
IHtcbiAgdmFyIG5vZGUgPSBjcmVhdGVFbXB0eVZOb2RlKCk7XG4gIG5vZGUuYXN5bmNGYWN0b3J5
ID0gZmFjdG9yeTtcbiAgbm9kZS5hc3luY01ldGEgPSB7IGRhdGE6IGRhdGEsIGNvbnRleHQ6IGNv
bnRleHQsIGNoaWxkcmVuOiBjaGlsZHJlbiwgdGFnOiB0YWcgfTtcbiAgcmV0dXJuIG5vZGVcbn1c
blxuZnVuY3Rpb24gcmVzb2x2ZUFzeW5jQ29tcG9uZW50IChcbiAgZmFjdG9yeSxcbiAgYmFzZUN0
b3IsXG4gIGNvbnRleHRcbikge1xuICBpZiAoaXNUcnVlKGZhY3RvcnkuZXJyb3IpICYmIGlzRGVm
KGZhY3RvcnkuZXJyb3JDb21wKSkge1xuICAgIHJldHVybiBmYWN0b3J5LmVycm9yQ29tcFxuICB9
XG5cbiAgaWYgKGlzRGVmKGZhY3RvcnkucmVzb2x2ZWQpKSB7XG4gICAgcmV0dXJuIGZhY3Rvcnku
cmVzb2x2ZWRcbiAgfVxuXG4gIGlmIChpc1RydWUoZmFjdG9yeS5sb2FkaW5nKSAmJiBpc0RlZihm
YWN0b3J5LmxvYWRpbmdDb21wKSkge1xuICAgIHJldHVybiBmYWN0b3J5LmxvYWRpbmdDb21wXG4g
IH1cblxuICBpZiAoaXNEZWYoZmFjdG9yeS5jb250ZXh0cykpIHtcbiAgICAvLyBhbHJlYWR5IHBl
bmRpbmdcbiAgICBmYWN0b3J5LmNvbnRleHRzLnB1c2goY29udGV4dCk7XG4gIH0gZWxzZSB7XG4g
ICAgdmFyIGNvbnRleHRzID0gZmFjdG9yeS5jb250ZXh0cyA9IFtjb250ZXh0XTtcbiAgICB2YXIg
c3luYyA9IHRydWU7XG5cbiAgICB2YXIgZm9yY2VSZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAg
ICBmb3IgKHZhciBpID0gMCwgbCA9IGNvbnRleHRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAg
ICAgICBjb250ZXh0c1tpXS4kZm9yY2VVcGRhdGUoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAg
dmFyIHJlc29sdmUgPSBvbmNlKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgIC8vIGNhY2hlIHJlc29s
dmVkXG4gICAgICBmYWN0b3J5LnJlc29sdmVkID0gZW5zdXJlQ3RvcihyZXMsIGJhc2VDdG9yKTtc
biAgICAgIC8vIGludm9rZSBjYWxsYmFja3Mgb25seSBpZiB0aGlzIGlzIG5vdCBhIHN5bmNocm9u
b3VzIHJlc29sdmVcbiAgICAgIC8vIChhc3luYyByZXNvbHZlcyBhcmUgc2hpbW1lZCBhcyBzeW5j
aHJvbm91cyBkdXJpbmcgU1NSKVxuICAgICAgaWYgKCFzeW5jKSB7XG4gICAgICAgIGZvcmNlUmVu
ZGVyKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgcmVqZWN0ID0gb25jZShmdW5jdGlv
biAocmVhc29uKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24n
ICYmIHdhcm4oXG4gICAgICAgIFwiRmFpbGVkIHRvIHJlc29sdmUgYXN5bmMgY29tcG9uZW50OiBc
IiArIChTdHJpbmcoZmFjdG9yeSkpICtcbiAgICAgICAgKHJlYXNvbiA/IChcIlxcblJlYXNvbjog
XCIgKyByZWFzb24pIDogJycpXG4gICAgICApO1xuICAgICAgaWYgKGlzRGVmKGZhY3RvcnkuZXJy
b3JDb21wKSkge1xuICAgICAgICBmYWN0b3J5LmVycm9yID0gdHJ1ZTtcbiAgICAgICAgZm9yY2VS
ZW5kZXIoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciByZXMgPSBmYWN0b3J5KHJlc29s
dmUsIHJlamVjdCk7XG5cbiAgICBpZiAoaXNPYmplY3QocmVzKSkge1xuICAgICAgaWYgKHR5cGVv
ZiByZXMudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyAoKSA9PiBQcm9taXNlXG4g
ICAgICAgIGlmIChpc1VuZGVmKGZhY3RvcnkucmVzb2x2ZWQpKSB7XG4gICAgICAgICAgcmVzLnRo
ZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc0RlZihy
ZXMuY29tcG9uZW50KSAmJiB0eXBlb2YgcmVzLmNvbXBvbmVudC50aGVuID09PSAnZnVuY3Rpb24n
KSB7XG4gICAgICAgIHJlcy5jb21wb25lbnQudGhlbihyZXNvbHZlLCByZWplY3QpO1xuXG4gICAg
ICAgIGlmIChpc0RlZihyZXMuZXJyb3IpKSB7XG4gICAgICAgICAgZmFjdG9yeS5lcnJvckNvbXAg
PSBlbnN1cmVDdG9yKHJlcy5lcnJvciwgYmFzZUN0b3IpO1xuICAgICAgICB9XG5cbiAgICAgICAg
aWYgKGlzRGVmKHJlcy5sb2FkaW5nKSkge1xuICAgICAgICAgIGZhY3RvcnkubG9hZGluZ0NvbXAg
PSBlbnN1cmVDdG9yKHJlcy5sb2FkaW5nLCBiYXNlQ3Rvcik7XG4gICAgICAgICAgaWYgKHJlcy5k
ZWxheSA9PT0gMCkge1xuICAgICAgICAgICAgZmFjdG9yeS5sb2FkaW5nID0gdHJ1ZTtcbiAgICAg
ICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAg
ICAgICAgICAgIGlmIChpc1VuZGVmKGZhY3RvcnkucmVzb2x2ZWQpICYmIGlzVW5kZWYoZmFjdG9y
eS5lcnJvcikpIHtcbiAgICAgICAgICAgICAgICBmYWN0b3J5LmxvYWRpbmcgPSB0cnVlO1xuICAg
ICAgICAgICAgICAgIGZvcmNlUmVuZGVyKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAg
IH0sIHJlcy5kZWxheSB8fCAyMDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAg
IGlmIChpc0RlZihyZXMudGltZW91dCkpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9u
ICgpIHtcbiAgICAgICAgICAgIGlmIChpc1VuZGVmKGZhY3RvcnkucmVzb2x2ZWQpKSB7XG4gICAg
ICAgICAgICAgIHJlamVjdChcbiAgICAgICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAh
PT0gJ3Byb2R1Y3Rpb24nXG4gICAgICAgICAgICAgICAgICA/IChcInRpbWVvdXQgKFwiICsgKHJl
cy50aW1lb3V0KSArIFwibXMpXCIpXG4gICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAg
ICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCByZXMudGltZW91dCk7XG4gICAg
ICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzeW5jID0gZmFsc2U7XG4gICAgLy8gcmV0dXJu
IGluIGNhc2UgcmVzb2x2ZWQgc3luY2hyb25vdXNseVxuICAgIHJldHVybiBmYWN0b3J5LmxvYWRp
bmdcbiAgICAgID8gZmFjdG9yeS5sb2FkaW5nQ29tcFxuICAgICAgOiBmYWN0b3J5LnJlc29sdmVk
XG4gIH1cbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGdldEZpcnN0Q29tcG9uZW50Q2hpbGQgKGNo
aWxkcmVuKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjID0gY2hpbGRy
ZW5baV07XG4gICAgICBpZiAoaXNEZWYoYykgJiYgaXNEZWYoYy5jb21wb25lbnRPcHRpb25zKSkg
e1xuICAgICAgICByZXR1cm4gY1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxu
LyogICovXG5cbmZ1bmN0aW9uIGluaXRFdmVudHMgKHZtKSB7XG4gIHZtLl9ldmVudHMgPSBPYmpl
Y3QuY3JlYXRlKG51bGwpO1xuICB2bS5faGFzSG9va0V2ZW50ID0gZmFsc2U7XG4gIC8vIGluaXQg
cGFyZW50IGF0dGFjaGVkIGV2ZW50c1xuICB2YXIgbGlzdGVuZXJzID0gdm0uJG9wdGlvbnMuX3Bh
cmVudExpc3RlbmVycztcbiAgaWYgKGxpc3RlbmVycykge1xuICAgIHVwZGF0ZUNvbXBvbmVudExp
c3RlbmVycyh2bSwgbGlzdGVuZXJzKTtcbiAgfVxufVxuXG52YXIgdGFyZ2V0O1xuXG5mdW5jdGlv
biBhZGQgKGV2ZW50LCBmbiwgb25jZSQkMSkge1xuICBpZiAob25jZSQkMSkge1xuICAgIHRhcmdl
dC4kb25jZShldmVudCwgZm4pO1xuICB9IGVsc2Uge1xuICAgIHRhcmdldC4kb24oZXZlbnQsIGZu
KTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW1vdmUkMSAoZXZlbnQsIGZuKSB7XG4gIHRhcmdldC4k
b2ZmKGV2ZW50LCBmbik7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNvbXBvbmVudExpc3RlbmVycyAo
XG4gIHZtLFxuICBsaXN0ZW5lcnMsXG4gIG9sZExpc3RlbmVyc1xuKSB7XG4gIHRhcmdldCA9IHZt
O1xuICB1cGRhdGVMaXN0ZW5lcnMobGlzdGVuZXJzLCBvbGRMaXN0ZW5lcnMgfHwge30sIGFkZCwg
cmVtb3ZlJDEsIHZtKTtcbn1cblxuZnVuY3Rpb24gZXZlbnRzTWl4aW4gKFZ1ZSkge1xuICB2YXIg
aG9va1JFID0gL15ob29rOi87XG4gIFZ1ZS5wcm90b3R5cGUuJG9uID0gZnVuY3Rpb24gKGV2ZW50
LCBmbikge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIHZtID0gdGhpcztcbiAg
ICBpZiAoQXJyYXkuaXNBcnJheShldmVudCkpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0g
ZXZlbnQubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHRoaXMkMS4kb24oZXZlbnRbaV0s
IGZuKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgKHZtLl9ldmVudHNbZXZlbnRdIHx8
ICh2bS5fZXZlbnRzW2V2ZW50XSA9IFtdKSkucHVzaChmbik7XG4gICAgICAvLyBvcHRpbWl6ZSBo
b29rOmV2ZW50IGNvc3QgYnkgdXNpbmcgYSBib29sZWFuIGZsYWcgbWFya2VkIGF0IHJlZ2lzdHJh
dGlvblxuICAgICAgLy8gaW5zdGVhZCBvZiBhIGhhc2ggbG9va3VwXG4gICAgICBpZiAoaG9va1JF
LnRlc3QoZXZlbnQpKSB7XG4gICAgICAgIHZtLl9oYXNIb29rRXZlbnQgPSB0cnVlO1xuICAgICAg
fVxuICAgIH1cbiAgICByZXR1cm4gdm1cbiAgfTtcblxuICBWdWUucHJvdG90eXBlLiRvbmNlID0g
ZnVuY3Rpb24gKGV2ZW50LCBmbikge1xuICAgIHZhciB2bSA9IHRoaXM7XG4gICAgZnVuY3Rpb24g
b24gKCkge1xuICAgICAgdm0uJG9mZihldmVudCwgb24pO1xuICAgICAgZm4uYXBwbHkodm0sIGFy
Z3VtZW50cyk7XG4gICAgfVxuICAgIG9uLmZuID0gZm47XG4gICAgdm0uJG9uKGV2ZW50LCBvbik7
XG4gICAgcmV0dXJuIHZtXG4gIH07XG5cbiAgVnVlLnByb3RvdHlwZS4kb2ZmID0gZnVuY3Rpb24g
KGV2ZW50LCBmbikge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIHZtID0gdGhp
cztcbiAgICAvLyBhbGxcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIHZtLl9l
dmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgcmV0dXJuIHZtXG4gICAgfVxuICAg
IC8vIGFycmF5IG9mIGV2ZW50c1xuICAgIGlmIChBcnJheS5pc0FycmF5KGV2ZW50KSkge1xuICAg
ICAgZm9yICh2YXIgaSQxID0gMCwgbCA9IGV2ZW50Lmxlbmd0aDsgaSQxIDwgbDsgaSQxKyspIHtc
biAgICAgICAgdGhpcyQxLiRvZmYoZXZlbnRbaSQxXSwgZm4pO1xuICAgICAgfVxuICAgICAgcmV0
dXJuIHZtXG4gICAgfVxuICAgIC8vIHNwZWNpZmljIGV2ZW50XG4gICAgdmFyIGNicyA9IHZtLl9l
dmVudHNbZXZlbnRdO1xuICAgIGlmICghY2JzKSB7XG4gICAgICByZXR1cm4gdm1cbiAgICB9XG4g
ICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZtLl9ldmVudHNbZXZlbnRd
ID0gbnVsbDtcbiAgICAgIHJldHVybiB2bVxuICAgIH1cbiAgICAvLyBzcGVjaWZpYyBoYW5kbGVy
XG4gICAgdmFyIGNiO1xuICAgIHZhciBpID0gY2JzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7
XG4gICAgICBjYiA9IGNic1tpXTtcbiAgICAgIGlmIChjYiA9PT0gZm4gfHwgY2IuZm4gPT09IGZu
KSB7XG4gICAgICAgIGNicy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4g
ICAgfVxuICAgIHJldHVybiB2bVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJGVtaXQgPSBmdW5j
dGlvbiAoZXZlbnQpIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIGlmIChwcm9jZXNzLmVudi5O
T0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgbG93ZXJDYXNlRXZlbnQgPSBl
dmVudC50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKGxvd2VyQ2FzZUV2ZW50ICE9PSBldmVudCAm
JiB2bS5fZXZlbnRzW2xvd2VyQ2FzZUV2ZW50XSkge1xuICAgICAgICB0aXAoXG4gICAgICAgICAg
XCJFdmVudCBcXFwiXCIgKyBsb3dlckNhc2VFdmVudCArIFwiXFxcIiBpcyBlbWl0dGVkIGluIGNv
bXBvbmVudCBcIiArXG4gICAgICAgICAgKGZvcm1hdENvbXBvbmVudE5hbWUodm0pKSArIFwiIGJ1
dCB0aGUgaGFuZGxlciBpcyByZWdpc3RlcmVkIGZvciBcXFwiXCIgKyBldmVudCArIFwiXFxcIi4g
XCIgK1xuICAgICAgICAgIFwiTm90ZSB0aGF0IEhUTUwgYXR0cmlidXRlcyBhcmUgY2FzZS1pbnNl
bnNpdGl2ZSBhbmQgeW91IGNhbm5vdCB1c2UgXCIgK1xuICAgICAgICAgIFwidi1vbiB0byBsaXN0
ZW4gdG8gY2FtZWxDYXNlIGV2ZW50cyB3aGVuIHVzaW5nIGluLURPTSB0ZW1wbGF0ZXMuIFwiICtc
biAgICAgICAgICBcIllvdSBzaG91bGQgcHJvYmFibHkgdXNlIFxcXCJcIiArIChoeXBoZW5hdGUo
ZXZlbnQpKSArIFwiXFxcIiBpbnN0ZWFkIG9mIFxcXCJcIiArIGV2ZW50ICsgXCJcXFwiLlwiXG4g
ICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBjYnMgPSB2bS5fZXZlbnRzW2V2ZW50
XTtcbiAgICBpZiAoY2JzKSB7XG4gICAgICBjYnMgPSBjYnMubGVuZ3RoID4gMSA/IHRvQXJyYXko
Y2JzKSA6IGNicztcbiAgICAgIHZhciBhcmdzID0gdG9BcnJheShhcmd1bWVudHMsIDEpO1xuICAg
ICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjYnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAg
IHRyeSB7XG4gICAgICAgICAgY2JzW2ldLmFwcGx5KHZtLCBhcmdzKTtcbiAgICAgICAgfSBjYXRj
aCAoZSkge1xuICAgICAgICAgIGhhbmRsZUVycm9yKGUsIHZtLCAoXCJldmVudCBoYW5kbGVyIGZv
ciBcXFwiXCIgKyBldmVudCArIFwiXFxcIlwiKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9
XG4gICAgcmV0dXJuIHZtXG4gIH07XG59XG5cbi8qICAqL1xuXG4vKipcbiAqIFJ1bnRpbWUgaGVs
cGVyIGZvciByZXNvbHZpbmcgcmF3IGNoaWxkcmVuIFZOb2RlcyBpbnRvIGEgc2xvdCBvYmplY3Qu
XG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVTbG90cyAoXG4gIGNoaWxkcmVuLFxuICBjb250ZXh0XG4p
IHtcbiAgdmFyIHNsb3RzID0ge307XG4gIGlmICghY2hpbGRyZW4pIHtcbiAgICByZXR1cm4gc2xv
dHNcbiAgfVxuICB2YXIgZGVmYXVsdFNsb3QgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBj
aGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltp
XTtcbiAgICAvLyBuYW1lZCBzbG90cyBzaG91bGQgb25seSBiZSByZXNwZWN0ZWQgaWYgdGhlIHZu
b2RlIHdhcyByZW5kZXJlZCBpbiB0aGVcbiAgICAvLyBzYW1lIGNvbnRleHQuXG4gICAgaWYgKChj
aGlsZC5jb250ZXh0ID09PSBjb250ZXh0IHx8IGNoaWxkLmZ1bmN0aW9uYWxDb250ZXh0ID09PSBj
b250ZXh0KSAmJlxuICAgICAgY2hpbGQuZGF0YSAmJiBjaGlsZC5kYXRhLnNsb3QgIT0gbnVsbFxu
ICAgICkge1xuICAgICAgdmFyIG5hbWUgPSBjaGlsZC5kYXRhLnNsb3Q7XG4gICAgICB2YXIgc2xv
dCA9IChzbG90c1tuYW1lXSB8fCAoc2xvdHNbbmFtZV0gPSBbXSkpO1xuICAgICAgaWYgKGNoaWxk
LnRhZyA9PT0gJ3RlbXBsYXRlJykge1xuICAgICAgICBzbG90LnB1c2guYXBwbHkoc2xvdCwgY2hp
bGQuY2hpbGRyZW4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2xvdC5wdXNoKGNoaWxkKTtc
biAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGVmYXVsdFNsb3QucHVzaChjaGlsZCk7XG4g
ICAgfVxuICB9XG4gIC8vIGlnbm9yZSB3aGl0ZXNwYWNlXG4gIGlmICghZGVmYXVsdFNsb3QuZXZl
cnkoaXNXaGl0ZXNwYWNlKSkge1xuICAgIHNsb3RzLmRlZmF1bHQgPSBkZWZhdWx0U2xvdDtcbiAg
fVxuICByZXR1cm4gc2xvdHNcbn1cblxuZnVuY3Rpb24gaXNXaGl0ZXNwYWNlIChub2RlKSB7XG4g
IHJldHVybiBub2RlLmlzQ29tbWVudCB8fCBub2RlLnRleHQgPT09ICcgJ1xufVxuXG5mdW5jdGlv
biByZXNvbHZlU2NvcGVkU2xvdHMgKFxuICBmbnMsIC8vIHNlZSBmbG93L3Zub2RlXG4gIHJlc1xu
KSB7XG4gIHJlcyA9IHJlcyB8fCB7fTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBmbnMubGVuZ3Ro
OyBpKyspIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmbnNbaV0pKSB7XG4gICAgICByZXNvbHZl
U2NvcGVkU2xvdHMoZm5zW2ldLCByZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNbZm5zW2ld
LmtleV0gPSBmbnNbaV0uZm47XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuLyogICov
XG5cbnZhciBhY3RpdmVJbnN0YW5jZSA9IG51bGw7XG52YXIgaXNVcGRhdGluZ0NoaWxkQ29tcG9u
ZW50ID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGluaXRMaWZlY3ljbGUgKHZtKSB7XG4gIHZhciBvcHRp
b25zID0gdm0uJG9wdGlvbnM7XG5cbiAgLy8gbG9jYXRlIGZpcnN0IG5vbi1hYnN0cmFjdCBwYXJl
bnRcbiAgdmFyIHBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuICBpZiAocGFyZW50ICYmICFvcHRp
b25zLmFic3RyYWN0KSB7XG4gICAgd2hpbGUgKHBhcmVudC4kb3B0aW9ucy5hYnN0cmFjdCAmJiBw
YXJlbnQuJHBhcmVudCkge1xuICAgICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XG4gICAgfVxu
ICAgIHBhcmVudC4kY2hpbGRyZW4ucHVzaCh2bSk7XG4gIH1cblxuICB2bS4kcGFyZW50ID0gcGFy
ZW50O1xuICB2bS4kcm9vdCA9IHBhcmVudCA/IHBhcmVudC4kcm9vdCA6IHZtO1xuXG4gIHZtLiRj
aGlsZHJlbiA9IFtdO1xuICB2bS4kcmVmcyA9IHt9O1xuXG4gIHZtLl93YXRjaGVyID0gbnVsbDtc
biAgdm0uX2luYWN0aXZlID0gbnVsbDtcbiAgdm0uX2RpcmVjdEluYWN0aXZlID0gZmFsc2U7XG4g
IHZtLl9pc01vdW50ZWQgPSBmYWxzZTtcbiAgdm0uX2lzRGVzdHJveWVkID0gZmFsc2U7XG4gIHZt
Ll9pc0JlaW5nRGVzdHJveWVkID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGxpZmVjeWNsZU1peGlu
IChWdWUpIHtcbiAgVnVlLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKHZub2RlLCBoeWRy
YXRpbmcpIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIGlmICh2bS5faXNNb3VudGVkKSB7XG4g
ICAgICBjYWxsSG9vayh2bSwgJ2JlZm9yZVVwZGF0ZScpO1xuICAgIH1cbiAgICB2YXIgcHJldkVs
ID0gdm0uJGVsO1xuICAgIHZhciBwcmV2Vm5vZGUgPSB2bS5fdm5vZGU7XG4gICAgdmFyIHByZXZB
Y3RpdmVJbnN0YW5jZSA9IGFjdGl2ZUluc3RhbmNlO1xuICAgIGFjdGl2ZUluc3RhbmNlID0gdm07
XG4gICAgdm0uX3Zub2RlID0gdm5vZGU7XG4gICAgLy8gVnVlLnByb3RvdHlwZS5fX3BhdGNoX18g
aXMgaW5qZWN0ZWQgaW4gZW50cnkgcG9pbnRzXG4gICAgLy8gYmFzZWQgb24gdGhlIHJlbmRlcmlu
ZyBiYWNrZW5kIHVzZWQuXG4gICAgaWYgKCFwcmV2Vm5vZGUpIHtcbiAgICAgIC8vIGluaXRpYWwg
cmVuZGVyXG4gICAgICB2bS4kZWwgPSB2bS5fX3BhdGNoX18oXG4gICAgICAgIHZtLiRlbCwgdm5v
ZGUsIGh5ZHJhdGluZywgZmFsc2UgLyogcmVtb3ZlT25seSAqLyxcbiAgICAgICAgdm0uJG9wdGlv
bnMuX3BhcmVudEVsbSxcbiAgICAgICAgdm0uJG9wdGlvbnMuX3JlZkVsbVxuICAgICAgKTtcbiAg
ICAgIC8vIG5vIG5lZWQgZm9yIHRoZSByZWYgbm9kZXMgYWZ0ZXIgaW5pdGlhbCBwYXRjaFxuICAg
ICAgLy8gdGhpcyBwcmV2ZW50cyBrZWVwaW5nIGEgZGV0YWNoZWQgRE9NIHRyZWUgaW4gbWVtb3J5
ICgjNTg1MSlcbiAgICAgIHZtLiRvcHRpb25zLl9wYXJlbnRFbG0gPSB2bS4kb3B0aW9ucy5fcmVm
RWxtID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdXBkYXRlc1xuICAgICAgdm0uJGVs
ID0gdm0uX19wYXRjaF9fKHByZXZWbm9kZSwgdm5vZGUpO1xuICAgIH1cbiAgICBhY3RpdmVJbnN0
YW5jZSA9IHByZXZBY3RpdmVJbnN0YW5jZTtcbiAgICAvLyB1cGRhdGUgX192dWVfXyByZWZlcmVu
Y2VcbiAgICBpZiAocHJldkVsKSB7XG4gICAgICBwcmV2RWwuX192dWVfXyA9IG51bGw7XG4gICAg
fVxuICAgIGlmICh2bS4kZWwpIHtcbiAgICAgIHZtLiRlbC5fX3Z1ZV9fID0gdm07XG4gICAgfVxu
ICAgIC8vIGlmIHBhcmVudCBpcyBhbiBIT0MsIHVwZGF0ZSBpdHMgJGVsIGFzIHdlbGxcbiAgICBp
ZiAodm0uJHZub2RlICYmIHZtLiRwYXJlbnQgJiYgdm0uJHZub2RlID09PSB2bS4kcGFyZW50Ll92
bm9kZSkge1xuICAgICAgdm0uJHBhcmVudC4kZWwgPSB2bS4kZWw7XG4gICAgfVxuICAgIC8vIHVw
ZGF0ZWQgaG9vayBpcyBjYWxsZWQgYnkgdGhlIHNjaGVkdWxlciB0byBlbnN1cmUgdGhhdCBjaGls
ZHJlbiBhcmVcbiAgICAvLyB1cGRhdGVkIGluIGEgcGFyZW50J3MgdXBkYXRlZCBob29rLlxuICB9
O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJGZvcmNlVXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHZh
ciB2bSA9IHRoaXM7XG4gICAgaWYgKHZtLl93YXRjaGVyKSB7XG4gICAgICB2bS5fd2F0Y2hlci51
cGRhdGUoKTtcbiAgICB9XG4gIH07XG5cbiAgVnVlLnByb3RvdHlwZS4kZGVzdHJveSA9IGZ1bmN0
aW9uICgpIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIGlmICh2bS5faXNCZWluZ0Rlc3Ryb3ll
ZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNhbGxIb29rKHZtLCAnYmVmb3JlRGVzdHJv
eScpO1xuICAgIHZtLl9pc0JlaW5nRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAvLyByZW1vdmUgc2Vs
ZiBmcm9tIHBhcmVudFxuICAgIHZhciBwYXJlbnQgPSB2bS4kcGFyZW50O1xuICAgIGlmIChwYXJl
bnQgJiYgIXBhcmVudC5faXNCZWluZ0Rlc3Ryb3llZCAmJiAhdm0uJG9wdGlvbnMuYWJzdHJhY3Qp
IHtcbiAgICAgIHJlbW92ZShwYXJlbnQuJGNoaWxkcmVuLCB2bSk7XG4gICAgfVxuICAgIC8vIHRl
YXJkb3duIHdhdGNoZXJzXG4gICAgaWYgKHZtLl93YXRjaGVyKSB7XG4gICAgICB2bS5fd2F0Y2hl
ci50ZWFyZG93bigpO1xuICAgIH1cbiAgICB2YXIgaSA9IHZtLl93YXRjaGVycy5sZW5ndGg7XG4g
ICAgd2hpbGUgKGktLSkge1xuICAgICAgdm0uX3dhdGNoZXJzW2ldLnRlYXJkb3duKCk7XG4gICAg
fVxuICAgIC8vIHJlbW92ZSByZWZlcmVuY2UgZnJvbSBkYXRhIG9iXG4gICAgLy8gZnJvemVuIG9i
amVjdCBtYXkgbm90IGhhdmUgb2JzZXJ2ZXIuXG4gICAgaWYgKHZtLl9kYXRhLl9fb2JfXykge1xu
ICAgICAgdm0uX2RhdGEuX19vYl9fLnZtQ291bnQtLTtcbiAgICB9XG4gICAgLy8gY2FsbCB0aGUg
bGFzdCBob29rLi4uXG4gICAgdm0uX2lzRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAvLyBpbnZva2Ug
ZGVzdHJveSBob29rcyBvbiBjdXJyZW50IHJlbmRlcmVkIHRyZWVcbiAgICB2bS5fX3BhdGNoX18o
dm0uX3Zub2RlLCBudWxsKTtcbiAgICAvLyBmaXJlIGRlc3Ryb3llZCBob29rXG4gICAgY2FsbEhv
b2sodm0sICdkZXN0cm95ZWQnKTtcbiAgICAvLyB0dXJuIG9mZiBhbGwgaW5zdGFuY2UgbGlzdGVu
ZXJzLlxuICAgIHZtLiRvZmYoKTtcbiAgICAvLyByZW1vdmUgX192dWVfXyByZWZlcmVuY2VcbiAg
ICBpZiAodm0uJGVsKSB7XG4gICAgICB2bS4kZWwuX192dWVfXyA9IG51bGw7XG4gICAgfVxuICB9
O1xufVxuXG5mdW5jdGlvbiBtb3VudENvbXBvbmVudCAoXG4gIHZtLFxuICBlbCxcbiAgaHlkcmF0
aW5nXG4pIHtcbiAgdm0uJGVsID0gZWw7XG4gIGlmICghdm0uJG9wdGlvbnMucmVuZGVyKSB7XG4g
ICAgdm0uJG9wdGlvbnMucmVuZGVyID0gY3JlYXRlRW1wdHlWTm9kZTtcbiAgICBpZiAocHJvY2Vz
cy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgLyogaXN0YW5idWwgaWdu
b3JlIGlmICovXG4gICAgICBpZiAoKHZtLiRvcHRpb25zLnRlbXBsYXRlICYmIHZtLiRvcHRpb25z
LnRlbXBsYXRlLmNoYXJBdCgwKSAhPT0gJyMnKSB8fFxuICAgICAgICB2bS4kb3B0aW9ucy5lbCB8
fCBlbCkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgICdZb3UgYXJlIHVzaW5nIHRoZSBydW50
aW1lLW9ubHkgYnVpbGQgb2YgVnVlIHdoZXJlIHRoZSB0ZW1wbGF0ZSAnICtcbiAgICAgICAgICAn
Y29tcGlsZXIgaXMgbm90IGF2YWlsYWJsZS4gRWl0aGVyIHByZS1jb21waWxlIHRoZSB0ZW1wbGF0
ZXMgaW50byAnICtcbiAgICAgICAgICAncmVuZGVyIGZ1bmN0aW9ucywgb3IgdXNlIHRoZSBjb21w
aWxlci1pbmNsdWRlZCBidWlsZC4nLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9
IGVsc2Uge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgICdGYWlsZWQgdG8gbW91bnQgY29tcG9u
ZW50OiB0ZW1wbGF0ZSBvciByZW5kZXIgZnVuY3Rpb24gbm90IGRlZmluZWQuJyxcbiAgICAgICAg
ICB2bVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjYWxsSG9vayh2bSwgJ2Jl
Zm9yZU1vdW50Jyk7XG5cbiAgdmFyIHVwZGF0ZUNvbXBvbmVudDtcbiAgLyogaXN0YW5idWwgaWdu
b3JlIGlmICovXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYm
IGNvbmZpZy5wZXJmb3JtYW5jZSAmJiBtYXJrKSB7XG4gICAgdXBkYXRlQ29tcG9uZW50ID0gZnVu
Y3Rpb24gKCkge1xuICAgICAgdmFyIG5hbWUgPSB2bS5fbmFtZTtcbiAgICAgIHZhciBpZCA9IHZt
Ll91aWQ7XG4gICAgICB2YXIgc3RhcnRUYWcgPSBcInZ1ZS1wZXJmLXN0YXJ0OlwiICsgaWQ7XG4g
ICAgICB2YXIgZW5kVGFnID0gXCJ2dWUtcGVyZi1lbmQ6XCIgKyBpZDtcblxuICAgICAgbWFyayhz
dGFydFRhZyk7XG4gICAgICB2YXIgdm5vZGUgPSB2bS5fcmVuZGVyKCk7XG4gICAgICBtYXJrKGVu
ZFRhZyk7XG4gICAgICBtZWFzdXJlKChuYW1lICsgXCIgcmVuZGVyXCIpLCBzdGFydFRhZywgZW5k
VGFnKTtcblxuICAgICAgbWFyayhzdGFydFRhZyk7XG4gICAgICB2bS5fdXBkYXRlKHZub2RlLCBo
eWRyYXRpbmcpO1xuICAgICAgbWFyayhlbmRUYWcpO1xuICAgICAgbWVhc3VyZSgobmFtZSArIFwi
IHBhdGNoXCIpLCBzdGFydFRhZywgZW5kVGFnKTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHVw
ZGF0ZUNvbXBvbmVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZtLl91cGRhdGUodm0uX3JlbmRl
cigpLCBoeWRyYXRpbmcpO1xuICAgIH07XG4gIH1cblxuICB2bS5fd2F0Y2hlciA9IG5ldyBXYXRj
aGVyKHZtLCB1cGRhdGVDb21wb25lbnQsIG5vb3ApO1xuICBoeWRyYXRpbmcgPSBmYWxzZTtcblxu
ICAvLyBtYW51YWxseSBtb3VudGVkIGluc3RhbmNlLCBjYWxsIG1vdW50ZWQgb24gc2VsZlxuICAv
LyBtb3VudGVkIGlzIGNhbGxlZCBmb3IgcmVuZGVyLWNyZWF0ZWQgY2hpbGQgY29tcG9uZW50cyBp
biBpdHMgaW5zZXJ0ZWQgaG9va1xuICBpZiAodm0uJHZub2RlID09IG51bGwpIHtcbiAgICB2bS5f
aXNNb3VudGVkID0gdHJ1ZTtcbiAgICBjYWxsSG9vayh2bSwgJ21vdW50ZWQnKTtcbiAgfVxuICBy
ZXR1cm4gdm1cbn1cblxuZnVuY3Rpb24gdXBkYXRlQ2hpbGRDb21wb25lbnQgKFxuICB2bSxcbiAg
cHJvcHNEYXRhLFxuICBsaXN0ZW5lcnMsXG4gIHBhcmVudFZub2RlLFxuICByZW5kZXJDaGlsZHJl
blxuKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4g
ICAgaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50ID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIGRldGVybWlu
ZSB3aGV0aGVyIGNvbXBvbmVudCBoYXMgc2xvdCBjaGlsZHJlblxuICAvLyB3ZSBuZWVkIHRvIGRv
IHRoaXMgYmVmb3JlIG92ZXJ3cml0aW5nICRvcHRpb25zLl9yZW5kZXJDaGlsZHJlblxuICB2YXIg
aGFzQ2hpbGRyZW4gPSAhIShcbiAgICByZW5kZXJDaGlsZHJlbiB8fCAgICAgICAgICAgICAgIC8v
IGhhcyBuZXcgc3RhdGljIHNsb3RzXG4gICAgdm0uJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuIHx8
ICAvLyBoYXMgb2xkIHN0YXRpYyBzbG90c1xuICAgIHBhcmVudFZub2RlLmRhdGEuc2NvcGVkU2xv
dHMgfHwgLy8gaGFzIG5ldyBzY29wZWQgc2xvdHNcbiAgICB2bS4kc2NvcGVkU2xvdHMgIT09IGVt
cHR5T2JqZWN0IC8vIGhhcyBvbGQgc2NvcGVkIHNsb3RzXG4gICk7XG5cbiAgdm0uJG9wdGlvbnMu
X3BhcmVudFZub2RlID0gcGFyZW50Vm5vZGU7XG4gIHZtLiR2bm9kZSA9IHBhcmVudFZub2RlOyAv
LyB1cGRhdGUgdm0ncyBwbGFjZWhvbGRlciBub2RlIHdpdGhvdXQgcmUtcmVuZGVyXG5cbiAgaWYg
KHZtLl92bm9kZSkgeyAvLyB1cGRhdGUgY2hpbGQgdHJlZSdzIHBhcmVudFxuICAgIHZtLl92bm9k
ZS5wYXJlbnQgPSBwYXJlbnRWbm9kZTtcbiAgfVxuICB2bS4kb3B0aW9ucy5fcmVuZGVyQ2hpbGRy
ZW4gPSByZW5kZXJDaGlsZHJlbjtcblxuICAvLyB1cGRhdGUgJGF0dHJzIGFuZCAkbGlzdGVuc2Vy
cyBoYXNoXG4gIC8vIHRoZXNlIGFyZSBhbHNvIHJlYWN0aXZlIHNvIHRoZXkgbWF5IHRyaWdnZXIg
Y2hpbGQgdXBkYXRlIGlmIHRoZSBjaGlsZFxuICAvLyB1c2VkIHRoZW0gZHVyaW5nIHJlbmRlclxu
ICB2bS4kYXR0cnMgPSBwYXJlbnRWbm9kZS5kYXRhICYmIHBhcmVudFZub2RlLmRhdGEuYXR0cnM7
XG4gIHZtLiRsaXN0ZW5lcnMgPSBsaXN0ZW5lcnM7XG5cbiAgLy8gdXBkYXRlIHByb3BzXG4gIGlm
IChwcm9wc0RhdGEgJiYgdm0uJG9wdGlvbnMucHJvcHMpIHtcbiAgICBvYnNlcnZlclN0YXRlLnNo
b3VsZENvbnZlcnQgPSBmYWxzZTtcbiAgICB2YXIgcHJvcHMgPSB2bS5fcHJvcHM7XG4gICAgdmFy
IHByb3BLZXlzID0gdm0uJG9wdGlvbnMuX3Byb3BLZXlzIHx8IFtdO1xuICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgcHJvcEtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBwcm9wS2V5
c1tpXTtcbiAgICAgIHByb3BzW2tleV0gPSB2YWxpZGF0ZVByb3Aoa2V5LCB2bS4kb3B0aW9ucy5w
cm9wcywgcHJvcHNEYXRhLCB2bSk7XG4gICAgfVxuICAgIG9ic2VydmVyU3RhdGUuc2hvdWxkQ29u
dmVydCA9IHRydWU7XG4gICAgLy8ga2VlcCBhIGNvcHkgb2YgcmF3IHByb3BzRGF0YVxuICAgIHZt
LiRvcHRpb25zLnByb3BzRGF0YSA9IHByb3BzRGF0YTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBsaXN0
ZW5lcnNcbiAgaWYgKGxpc3RlbmVycykge1xuICAgIHZhciBvbGRMaXN0ZW5lcnMgPSB2bS4kb3B0
aW9ucy5fcGFyZW50TGlzdGVuZXJzO1xuICAgIHZtLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnMg
PSBsaXN0ZW5lcnM7XG4gICAgdXBkYXRlQ29tcG9uZW50TGlzdGVuZXJzKHZtLCBsaXN0ZW5lcnMs
IG9sZExpc3RlbmVycyk7XG4gIH1cbiAgLy8gcmVzb2x2ZSBzbG90cyArIGZvcmNlIHVwZGF0ZSBp
ZiBoYXMgY2hpbGRyZW5cbiAgaWYgKGhhc0NoaWxkcmVuKSB7XG4gICAgdm0uJHNsb3RzID0gcmVz
b2x2ZVNsb3RzKHJlbmRlckNoaWxkcmVuLCBwYXJlbnRWbm9kZS5jb250ZXh0KTtcbiAgICB2bS4k
Zm9yY2VVcGRhdGUoKTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3By
b2R1Y3Rpb24nKSB7XG4gICAgaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50ID0gZmFsc2U7XG4gIH1c
bn1cblxuZnVuY3Rpb24gaXNJbkluYWN0aXZlVHJlZSAodm0pIHtcbiAgd2hpbGUgKHZtICYmICh2
bSA9IHZtLiRwYXJlbnQpKSB7XG4gICAgaWYgKHZtLl9pbmFjdGl2ZSkgeyByZXR1cm4gdHJ1ZSB9
XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIGFjdGl2YXRlQ2hpbGRDb21wb25l
bnQgKHZtLCBkaXJlY3QpIHtcbiAgaWYgKGRpcmVjdCkge1xuICAgIHZtLl9kaXJlY3RJbmFjdGl2
ZSA9IGZhbHNlO1xuICAgIGlmIChpc0luSW5hY3RpdmVUcmVlKHZtKSkge1xuICAgICAgcmV0dXJu
XG4gICAgfVxuICB9IGVsc2UgaWYgKHZtLl9kaXJlY3RJbmFjdGl2ZSkge1xuICAgIHJldHVyblxu
ICB9XG4gIGlmICh2bS5faW5hY3RpdmUgfHwgdm0uX2luYWN0aXZlID09PSBudWxsKSB7XG4gICAg
dm0uX2luYWN0aXZlID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2bS4kY2hpbGRy
ZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFjdGl2YXRlQ2hpbGRDb21wb25lbnQodm0uJGNoaWxk
cmVuW2ldKTtcbiAgICB9XG4gICAgY2FsbEhvb2sodm0sICdhY3RpdmF0ZWQnKTtcbiAgfVxufVxu
XG5mdW5jdGlvbiBkZWFjdGl2YXRlQ2hpbGRDb21wb25lbnQgKHZtLCBkaXJlY3QpIHtcbiAgaWYg
KGRpcmVjdCkge1xuICAgIHZtLl9kaXJlY3RJbmFjdGl2ZSA9IHRydWU7XG4gICAgaWYgKGlzSW5J
bmFjdGl2ZVRyZWUodm0pKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gIH1cbiAgaWYgKCF2bS5f
aW5hY3RpdmUpIHtcbiAgICB2bS5faW5hY3RpdmUgPSB0cnVlO1xuICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgdm0uJGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkZWFjdGl2YXRlQ2hpbGRD
b21wb25lbnQodm0uJGNoaWxkcmVuW2ldKTtcbiAgICB9XG4gICAgY2FsbEhvb2sodm0sICdkZWFj
dGl2YXRlZCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbGxIb29rICh2bSwgaG9vaykge1xuICB2
YXIgaGFuZGxlcnMgPSB2bS4kb3B0aW9uc1tob29rXTtcbiAgaWYgKGhhbmRsZXJzKSB7XG4gICAg
Zm9yICh2YXIgaSA9IDAsIGogPSBoYW5kbGVycy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAg
IHRyeSB7XG4gICAgICAgIGhhbmRsZXJzW2ldLmNhbGwodm0pO1xuICAgICAgfSBjYXRjaCAoZSkg
e1xuICAgICAgICBoYW5kbGVFcnJvcihlLCB2bSwgKGhvb2sgKyBcIiBob29rXCIpKTtcbiAgICAg
IH1cbiAgICB9XG4gIH1cbiAgaWYgKHZtLl9oYXNIb29rRXZlbnQpIHtcbiAgICB2bS4kZW1pdCgn
aG9vazonICsgaG9vayk7XG4gIH1cbn1cblxuLyogICovXG5cblxudmFyIE1BWF9VUERBVEVfQ09V
TlQgPSAxMDA7XG5cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGFjdGl2YXRlZENoaWxkcmVuID0gW107
XG52YXIgaGFzID0ge307XG52YXIgY2lyY3VsYXIgPSB7fTtcbnZhciB3YWl0aW5nID0gZmFsc2U7
XG52YXIgZmx1c2hpbmcgPSBmYWxzZTtcbnZhciBpbmRleCA9IDA7XG5cbi8qKlxuICogUmVzZXQg
dGhlIHNjaGVkdWxlcidzIHN0YXRlLlxuICovXG5mdW5jdGlvbiByZXNldFNjaGVkdWxlclN0YXRl
ICgpIHtcbiAgaW5kZXggPSBxdWV1ZS5sZW5ndGggPSBhY3RpdmF0ZWRDaGlsZHJlbi5sZW5ndGgg
PSAwO1xuICBoYXMgPSB7fTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVj
dGlvbicpIHtcbiAgICBjaXJjdWxhciA9IHt9O1xuICB9XG4gIHdhaXRpbmcgPSBmbHVzaGluZyA9
IGZhbHNlO1xufVxuXG4vKipcbiAqIEZsdXNoIGJvdGggcXVldWVzIGFuZCBydW4gdGhlIHdhdGNo
ZXJzLlxuICovXG5mdW5jdGlvbiBmbHVzaFNjaGVkdWxlclF1ZXVlICgpIHtcbiAgZmx1c2hpbmcg
PSB0cnVlO1xuICB2YXIgd2F0Y2hlciwgaWQ7XG5cbiAgLy8gU29ydCBxdWV1ZSBiZWZvcmUgZmx1
c2guXG4gIC8vIFRoaXMgZW5zdXJlcyB0aGF0OlxuICAvLyAxLiBDb21wb25lbnRzIGFyZSB1cGRh
dGVkIGZyb20gcGFyZW50IHRvIGNoaWxkLiAoYmVjYXVzZSBwYXJlbnQgaXMgYWx3YXlzXG4gIC8v
ICAgIGNyZWF0ZWQgYmVmb3JlIHRoZSBjaGlsZClcbiAgLy8gMi4gQSBjb21wb25lbnQncyB1c2Vy
IHdhdGNoZXJzIGFyZSBydW4gYmVmb3JlIGl0cyByZW5kZXIgd2F0Y2hlciAoYmVjYXVzZVxuICAv
LyAgICB1c2VyIHdhdGNoZXJzIGFyZSBjcmVhdGVkIGJlZm9yZSB0aGUgcmVuZGVyIHdhdGNoZXIp
XG4gIC8vIDMuIElmIGEgY29tcG9uZW50IGlzIGRlc3Ryb3llZCBkdXJpbmcgYSBwYXJlbnQgY29t
cG9uZW50J3Mgd2F0Y2hlciBydW4sXG4gIC8vICAgIGl0cyB3YXRjaGVycyBjYW4gYmUgc2tpcHBl
ZC5cbiAgcXVldWUuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYS5pZCAtIGIuaWQ7IH0p
O1xuXG4gIC8vIGRvIG5vdCBjYWNoZSBsZW5ndGggYmVjYXVzZSBtb3JlIHdhdGNoZXJzIG1pZ2h0
IGJlIHB1c2hlZFxuICAvLyBhcyB3ZSBydW4gZXhpc3Rpbmcgd2F0Y2hlcnNcbiAgZm9yIChpbmRl
eCA9IDA7IGluZGV4IDwgcXVldWUubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgd2F0Y2hlciA9IHF1
ZXVlW2luZGV4XTtcbiAgICBpZCA9IHdhdGNoZXIuaWQ7XG4gICAgaGFzW2lkXSA9IG51bGw7XG4g
ICAgd2F0Y2hlci5ydW4oKTtcbiAgICAvLyBpbiBkZXYgYnVpbGQsIGNoZWNrIGFuZCBzdG9wIGNp
cmN1bGFyIHVwZGF0ZXMuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVj
dGlvbicgJiYgaGFzW2lkXSAhPSBudWxsKSB7XG4gICAgICBjaXJjdWxhcltpZF0gPSAoY2lyY3Vs
YXJbaWRdIHx8IDApICsgMTtcbiAgICAgIGlmIChjaXJjdWxhcltpZF0gPiBNQVhfVVBEQVRFX0NP
VU5UKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ1lvdSBtYXkgaGF2ZSBhbiBpbmZpbml0
ZSB1cGRhdGUgbG9vcCAnICsgKFxuICAgICAgICAgICAgd2F0Y2hlci51c2VyXG4gICAgICAgICAg
ICAgID8gKFwiaW4gd2F0Y2hlciB3aXRoIGV4cHJlc3Npb24gXFxcIlwiICsgKHdhdGNoZXIuZXhw
cmVzc2lvbikgKyBcIlxcXCJcIilcbiAgICAgICAgICAgICAgOiBcImluIGEgY29tcG9uZW50IHJl
bmRlciBmdW5jdGlvbi5cIlxuICAgICAgICAgICksXG4gICAgICAgICAgd2F0Y2hlci52bVxuICAg
ICAgICApO1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGtlZXAg
Y29waWVzIG9mIHBvc3QgcXVldWVzIGJlZm9yZSByZXNldHRpbmcgc3RhdGVcbiAgdmFyIGFjdGl2
YXRlZFF1ZXVlID0gYWN0aXZhdGVkQ2hpbGRyZW4uc2xpY2UoKTtcbiAgdmFyIHVwZGF0ZWRRdWV1
ZSA9IHF1ZXVlLnNsaWNlKCk7XG5cbiAgcmVzZXRTY2hlZHVsZXJTdGF0ZSgpO1xuXG4gIC8vIGNh
bGwgY29tcG9uZW50IHVwZGF0ZWQgYW5kIGFjdGl2YXRlZCBob29rc1xuICBjYWxsQWN0aXZhdGVk
SG9va3MoYWN0aXZhdGVkUXVldWUpO1xuICBjYWxsVXBkYXRlZEhvb2tzKHVwZGF0ZWRRdWV1ZSk7
XG5cbiAgLy8gZGV2dG9vbCBob29rXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAo
ZGV2dG9vbHMgJiYgY29uZmlnLmRldnRvb2xzKSB7XG4gICAgZGV2dG9vbHMuZW1pdCgnZmx1c2gn
KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYWxsVXBkYXRlZEhvb2tzIChxdWV1ZSkge1xuICB2YXIg
aSA9IHF1ZXVlLmxlbmd0aDtcbiAgd2hpbGUgKGktLSkge1xuICAgIHZhciB3YXRjaGVyID0gcXVl
dWVbaV07XG4gICAgdmFyIHZtID0gd2F0Y2hlci52bTtcbiAgICBpZiAodm0uX3dhdGNoZXIgPT09
IHdhdGNoZXIgJiYgdm0uX2lzTW91bnRlZCkge1xuICAgICAgY2FsbEhvb2sodm0sICd1cGRhdGVk
Jyk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUXVldWUgYSBrZXB0LWFsaXZlIGNvbXBvbmVu
dCB0aGF0IHdhcyBhY3RpdmF0ZWQgZHVyaW5nIHBhdGNoLlxuICogVGhlIHF1ZXVlIHdpbGwgYmUg
cHJvY2Vzc2VkIGFmdGVyIHRoZSBlbnRpcmUgdHJlZSBoYXMgYmVlbiBwYXRjaGVkLlxuICovXG5m
dW5jdGlvbiBxdWV1ZUFjdGl2YXRlZENvbXBvbmVudCAodm0pIHtcbiAgLy8gc2V0dGluZyBfaW5h
Y3RpdmUgdG8gZmFsc2UgaGVyZSBzbyB0aGF0IGEgcmVuZGVyIGZ1bmN0aW9uIGNhblxuICAvLyBy
ZWx5IG9uIGNoZWNraW5nIHdoZXRoZXIgaXQncyBpbiBhbiBpbmFjdGl2ZSB0cmVlIChlLmcuIHJv
dXRlci12aWV3KVxuICB2bS5faW5hY3RpdmUgPSBmYWxzZTtcbiAgYWN0aXZhdGVkQ2hpbGRyZW4u
cHVzaCh2bSk7XG59XG5cbmZ1bmN0aW9uIGNhbGxBY3RpdmF0ZWRIb29rcyAocXVldWUpIHtcbiAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgIHF1ZXVlW2ldLl9p
bmFjdGl2ZSA9IHRydWU7XG4gICAgYWN0aXZhdGVDaGlsZENvbXBvbmVudChxdWV1ZVtpXSwgdHJ1
ZSAvKiB0cnVlICovKTtcbiAgfVxufVxuXG4vKipcbiAqIFB1c2ggYSB3YXRjaGVyIGludG8gdGhl
IHdhdGNoZXIgcXVldWUuXG4gKiBKb2JzIHdpdGggZHVwbGljYXRlIElEcyB3aWxsIGJlIHNraXBw
ZWQgdW5sZXNzIGl0J3NcbiAqIHB1c2hlZCB3aGVuIHRoZSBxdWV1ZSBpcyBiZWluZyBmbHVzaGVk
LlxuICovXG5mdW5jdGlvbiBxdWV1ZVdhdGNoZXIgKHdhdGNoZXIpIHtcbiAgdmFyIGlkID0gd2F0
Y2hlci5pZDtcbiAgaWYgKGhhc1tpZF0gPT0gbnVsbCkge1xuICAgIGhhc1tpZF0gPSB0cnVlO1xu
ICAgIGlmICghZmx1c2hpbmcpIHtcbiAgICAgIHF1ZXVlLnB1c2god2F0Y2hlcik7XG4gICAgfSBl
bHNlIHtcbiAgICAgIC8vIGlmIGFscmVhZHkgZmx1c2hpbmcsIHNwbGljZSB0aGUgd2F0Y2hlciBi
YXNlZCBvbiBpdHMgaWRcbiAgICAgIC8vIGlmIGFscmVhZHkgcGFzdCBpdHMgaWQsIGl0IHdpbGwg
YmUgcnVuIG5leHQgaW1tZWRpYXRlbHkuXG4gICAgICB2YXIgaSA9IHF1ZXVlLmxlbmd0aCAtIDE7
XG4gICAgICB3aGlsZSAoaSA+IGluZGV4ICYmIHF1ZXVlW2ldLmlkID4gd2F0Y2hlci5pZCkge1xu
ICAgICAgICBpLS07XG4gICAgICB9XG4gICAgICBxdWV1ZS5zcGxpY2UoaSArIDEsIDAsIHdhdGNo
ZXIpO1xuICAgIH1cbiAgICAvLyBxdWV1ZSB0aGUgZmx1c2hcbiAgICBpZiAoIXdhaXRpbmcpIHtc
biAgICAgIHdhaXRpbmcgPSB0cnVlO1xuICAgICAgbmV4dFRpY2soZmx1c2hTY2hlZHVsZXJRdWV1
ZSk7XG4gICAgfVxuICB9XG59XG5cbi8qICAqL1xuXG52YXIgdWlkJDIgPSAwO1xuXG4vKipcbiAq
IEEgd2F0Y2hlciBwYXJzZXMgYW4gZXhwcmVzc2lvbiwgY29sbGVjdHMgZGVwZW5kZW5jaWVzLFxu
ICogYW5kIGZpcmVzIGNhbGxiYWNrIHdoZW4gdGhlIGV4cHJlc3Npb24gdmFsdWUgY2hhbmdlcy5c
biAqIFRoaXMgaXMgdXNlZCBmb3IgYm90aCB0aGUgJHdhdGNoKCkgYXBpIGFuZCBkaXJlY3RpdmVz
LlxuICovXG52YXIgV2F0Y2hlciA9IGZ1bmN0aW9uIFdhdGNoZXIgKFxuICB2bSxcbiAgZXhwT3JG
bixcbiAgY2IsXG4gIG9wdGlvbnNcbikge1xuICB0aGlzLnZtID0gdm07XG4gIHZtLl93YXRjaGVy
cy5wdXNoKHRoaXMpO1xuICAvLyBvcHRpb25zXG4gIGlmIChvcHRpb25zKSB7XG4gICAgdGhpcy5k
ZWVwID0gISFvcHRpb25zLmRlZXA7XG4gICAgdGhpcy51c2VyID0gISFvcHRpb25zLnVzZXI7XG4g
ICAgdGhpcy5sYXp5ID0gISFvcHRpb25zLmxhenk7XG4gICAgdGhpcy5zeW5jID0gISFvcHRpb25z
LnN5bmM7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5kZWVwID0gdGhpcy51c2VyID0gdGhpcy5sYXp5
ID0gdGhpcy5zeW5jID0gZmFsc2U7XG4gIH1cbiAgdGhpcy5jYiA9IGNiO1xuICB0aGlzLmlkID0g
Kyt1aWQkMjsgLy8gdWlkIGZvciBiYXRjaGluZ1xuICB0aGlzLmFjdGl2ZSA9IHRydWU7XG4gIHRo
aXMuZGlydHkgPSB0aGlzLmxhenk7IC8vIGZvciBsYXp5IHdhdGNoZXJzXG4gIHRoaXMuZGVwcyA9
IFtdO1xuICB0aGlzLm5ld0RlcHMgPSBbXTtcbiAgdGhpcy5kZXBJZHMgPSBuZXcgX1NldCgpO1xu
ICB0aGlzLm5ld0RlcElkcyA9IG5ldyBfU2V0KCk7XG4gIHRoaXMuZXhwcmVzc2lvbiA9IHByb2Nl
c3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbidcbiAgICA/IGV4cE9yRm4udG9TdHJpbmco
KVxuICAgIDogJyc7XG4gIC8vIHBhcnNlIGV4cHJlc3Npb24gZm9yIGdldHRlclxuICBpZiAodHlw
ZW9mIGV4cE9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICB0aGlzLmdldHRlciA9IGV4cE9yRm47
XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5nZXR0ZXIgPSBwYXJzZVBhdGgoZXhwT3JGbik7XG4gICAg
aWYgKCF0aGlzLmdldHRlcikge1xuICAgICAgdGhpcy5nZXR0ZXIgPSBmdW5jdGlvbiAoKSB7fTtc
biAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAg
ICAgICAgXCJGYWlsZWQgd2F0Y2hpbmcgcGF0aDogXFxcIlwiICsgZXhwT3JGbiArIFwiXFxcIiBc
IiArXG4gICAgICAgICdXYXRjaGVyIG9ubHkgYWNjZXB0cyBzaW1wbGUgZG90LWRlbGltaXRlZCBw
YXRocy4gJyArXG4gICAgICAgICdGb3IgZnVsbCBjb250cm9sLCB1c2UgYSBmdW5jdGlvbiBpbnN0
ZWFkLicsXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgIH1cbiAgfVxuICB0aGlzLnZhbHVlID0g
dGhpcy5sYXp5XG4gICAgPyB1bmRlZmluZWRcbiAgICA6IHRoaXMuZ2V0KCk7XG59O1xuXG4vKipc
biAqIEV2YWx1YXRlIHRoZSBnZXR0ZXIsIGFuZCByZS1jb2xsZWN0IGRlcGVuZGVuY2llcy5cbiAq
L1xuV2F0Y2hlci5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gZ2V0ICgpIHtcbiAgcHVzaFRhcmdl
dCh0aGlzKTtcbiAgdmFyIHZhbHVlO1xuICB2YXIgdm0gPSB0aGlzLnZtO1xuICB0cnkge1xuICAg
IHZhbHVlID0gdGhpcy5nZXR0ZXIuY2FsbCh2bSwgdm0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAg
aWYgKHRoaXMudXNlcikge1xuICAgICAgaGFuZGxlRXJyb3IoZSwgdm0sIChcImdldHRlciBmb3Ig
d2F0Y2hlciBcXFwiXCIgKyAodGhpcy5leHByZXNzaW9uKSArIFwiXFxcIlwiKSk7XG4gICAgfSBl
bHNlIHtcbiAgICAgIHRocm93IGVcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgLy8gXCJ0b3Vj
aFwiIGV2ZXJ5IHByb3BlcnR5IHNvIHRoZXkgYXJlIGFsbCB0cmFja2VkIGFzXG4gICAgLy8gZGVw
ZW5kZW5jaWVzIGZvciBkZWVwIHdhdGNoaW5nXG4gICAgaWYgKHRoaXMuZGVlcCkge1xuICAgICAg
dHJhdmVyc2UodmFsdWUpO1xuICAgIH1cbiAgICBwb3BUYXJnZXQoKTtcbiAgICB0aGlzLmNsZWFu
dXBEZXBzKCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59O1xuXG4vKipcbiAqIEFkZCBhIGRlcGVu
ZGVuY3kgdG8gdGhpcyBkaXJlY3RpdmUuXG4gKi9cbldhdGNoZXIucHJvdG90eXBlLmFkZERlcCA9
IGZ1bmN0aW9uIGFkZERlcCAoZGVwKSB7XG4gIHZhciBpZCA9IGRlcC5pZDtcbiAgaWYgKCF0aGlz
Lm5ld0RlcElkcy5oYXMoaWQpKSB7XG4gICAgdGhpcy5uZXdEZXBJZHMuYWRkKGlkKTtcbiAgICB0
aGlzLm5ld0RlcHMucHVzaChkZXApO1xuICAgIGlmICghdGhpcy5kZXBJZHMuaGFzKGlkKSkge1xu
ICAgICAgZGVwLmFkZFN1Yih0aGlzKTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogQ2xlYW4g
dXAgZm9yIGRlcGVuZGVuY3kgY29sbGVjdGlvbi5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUuY2xl
YW51cERlcHMgPSBmdW5jdGlvbiBjbGVhbnVwRGVwcyAoKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRo
aXM7XG5cbiAgdmFyIGkgPSB0aGlzLmRlcHMubGVuZ3RoO1xuICB3aGlsZSAoaS0tKSB7XG4gICAg
dmFyIGRlcCA9IHRoaXMkMS5kZXBzW2ldO1xuICAgIGlmICghdGhpcyQxLm5ld0RlcElkcy5oYXMo
ZGVwLmlkKSkge1xuICAgICAgZGVwLnJlbW92ZVN1Yih0aGlzJDEpO1xuICAgIH1cbiAgfVxuICB2
YXIgdG1wID0gdGhpcy5kZXBJZHM7XG4gIHRoaXMuZGVwSWRzID0gdGhpcy5uZXdEZXBJZHM7XG4g
IHRoaXMubmV3RGVwSWRzID0gdG1wO1xuICB0aGlzLm5ld0RlcElkcy5jbGVhcigpO1xuICB0bXAg
PSB0aGlzLmRlcHM7XG4gIHRoaXMuZGVwcyA9IHRoaXMubmV3RGVwcztcbiAgdGhpcy5uZXdEZXBz
ID0gdG1wO1xuICB0aGlzLm5ld0RlcHMubGVuZ3RoID0gMDtcbn07XG5cbi8qKlxuICogU3Vic2Ny
aWJlciBpbnRlcmZhY2UuXG4gKiBXaWxsIGJlIGNhbGxlZCB3aGVuIGEgZGVwZW5kZW5jeSBjaGFu
Z2VzLlxuICovXG5XYXRjaGVyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUgKCkg
e1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAodGhpcy5sYXp5KSB7XG4gICAg
dGhpcy5kaXJ0eSA9IHRydWU7XG4gIH0gZWxzZSBpZiAodGhpcy5zeW5jKSB7XG4gICAgdGhpcy5y
dW4oKTtcbiAgfSBlbHNlIHtcbiAgICBxdWV1ZVdhdGNoZXIodGhpcyk7XG4gIH1cbn07XG5cbi8q
KlxuICogU2NoZWR1bGVyIGpvYiBpbnRlcmZhY2UuXG4gKiBXaWxsIGJlIGNhbGxlZCBieSB0aGUg
c2NoZWR1bGVyLlxuICovXG5XYXRjaGVyLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiBydW4gKCkg
e1xuICBpZiAodGhpcy5hY3RpdmUpIHtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLmdldCgpO1xuICAg
IGlmIChcbiAgICAgIHZhbHVlICE9PSB0aGlzLnZhbHVlIHx8XG4gICAgICAvLyBEZWVwIHdhdGNo
ZXJzIGFuZCB3YXRjaGVycyBvbiBPYmplY3QvQXJyYXlzIHNob3VsZCBmaXJlIGV2ZW5cbiAgICAg
IC8vIHdoZW4gdGhlIHZhbHVlIGlzIHRoZSBzYW1lLCBiZWNhdXNlIHRoZSB2YWx1ZSBtYXlcbiAg
ICAgIC8vIGhhdmUgbXV0YXRlZC5cbiAgICAgIGlzT2JqZWN0KHZhbHVlKSB8fFxuICAgICAgdGhp
cy5kZWVwXG4gICAgKSB7XG4gICAgICAvLyBzZXQgbmV3IHZhbHVlXG4gICAgICB2YXIgb2xkVmFs
dWUgPSB0aGlzLnZhbHVlO1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgaWYgKHRo
aXMudXNlcikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMuY2IuY2FsbCh0aGlzLnZt
LCB2YWx1ZSwgb2xkVmFsdWUpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaGFu
ZGxlRXJyb3IoZSwgdGhpcy52bSwgKFwiY2FsbGJhY2sgZm9yIHdhdGNoZXIgXFxcIlwiICsgKHRo
aXMuZXhwcmVzc2lvbikgKyBcIlxcXCJcIikpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xu
ICAgICAgICB0aGlzLmNiLmNhbGwodGhpcy52bSwgdmFsdWUsIG9sZFZhbHVlKTtcbiAgICAgIH1c
biAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogRXZhbHVhdGUgdGhlIHZhbHVlIG9mIHRoZSB3YXRj
aGVyLlxuICogVGhpcyBvbmx5IGdldHMgY2FsbGVkIGZvciBsYXp5IHdhdGNoZXJzLlxuICovXG5X
YXRjaGVyLnByb3RvdHlwZS5ldmFsdWF0ZSA9IGZ1bmN0aW9uIGV2YWx1YXRlICgpIHtcbiAgdGhp
cy52YWx1ZSA9IHRoaXMuZ2V0KCk7XG4gIHRoaXMuZGlydHkgPSBmYWxzZTtcbn07XG5cbi8qKlxu
ICogRGVwZW5kIG9uIGFsbCBkZXBzIGNvbGxlY3RlZCBieSB0aGlzIHdhdGNoZXIuXG4gKi9cbldh
dGNoZXIucHJvdG90eXBlLmRlcGVuZCA9IGZ1bmN0aW9uIGRlcGVuZCAoKSB7XG4gICAgdmFyIHRo
aXMkMSA9IHRoaXM7XG5cbiAgdmFyIGkgPSB0aGlzLmRlcHMubGVuZ3RoO1xuICB3aGlsZSAoaS0t
KSB7XG4gICAgdGhpcyQxLmRlcHNbaV0uZGVwZW5kKCk7XG4gIH1cbn07XG5cbi8qKlxuICogUmVt
b3ZlIHNlbGYgZnJvbSBhbGwgZGVwZW5kZW5jaWVzJyBzdWJzY3JpYmVyIGxpc3QuXG4gKi9cbldh
dGNoZXIucHJvdG90eXBlLnRlYXJkb3duID0gZnVuY3Rpb24gdGVhcmRvd24gKCkge1xuICAgIHZh
ciB0aGlzJDEgPSB0aGlzO1xuXG4gIGlmICh0aGlzLmFjdGl2ZSkge1xuICAgIC8vIHJlbW92ZSBz
ZWxmIGZyb20gdm0ncyB3YXRjaGVyIGxpc3RcbiAgICAvLyB0aGlzIGlzIGEgc29tZXdoYXQgZXhw
ZW5zaXZlIG9wZXJhdGlvbiBzbyB3ZSBza2lwIGl0XG4gICAgLy8gaWYgdGhlIHZtIGlzIGJlaW5n
IGRlc3Ryb3llZC5cbiAgICBpZiAoIXRoaXMudm0uX2lzQmVpbmdEZXN0cm95ZWQpIHtcbiAgICAg
IHJlbW92ZSh0aGlzLnZtLl93YXRjaGVycywgdGhpcyk7XG4gICAgfVxuICAgIHZhciBpID0gdGhp
cy5kZXBzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICB0aGlzJDEuZGVwc1tpXS5y
ZW1vdmVTdWIodGhpcyQxKTtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgfVxu
fTtcblxuLyoqXG4gKiBSZWN1cnNpdmVseSB0cmF2ZXJzZSBhbiBvYmplY3QgdG8gZXZva2UgYWxs
IGNvbnZlcnRlZFxuICogZ2V0dGVycywgc28gdGhhdCBldmVyeSBuZXN0ZWQgcHJvcGVydHkgaW5z
aWRlIHRoZSBvYmplY3RcbiAqIGlzIGNvbGxlY3RlZCBhcyBhIFwiZGVlcFwiIGRlcGVuZGVuY3ku
XG4gKi9cbnZhciBzZWVuT2JqZWN0cyA9IG5ldyBfU2V0KCk7XG5mdW5jdGlvbiB0cmF2ZXJzZSAo
dmFsKSB7XG4gIHNlZW5PYmplY3RzLmNsZWFyKCk7XG4gIF90cmF2ZXJzZSh2YWwsIHNlZW5PYmpl
Y3RzKTtcbn1cblxuZnVuY3Rpb24gX3RyYXZlcnNlICh2YWwsIHNlZW4pIHtcbiAgdmFyIGksIGtl
eXM7XG4gIHZhciBpc0EgPSBBcnJheS5pc0FycmF5KHZhbCk7XG4gIGlmICgoIWlzQSAmJiAhaXNP
YmplY3QodmFsKSkgfHwgIU9iamVjdC5pc0V4dGVuc2libGUodmFsKSkge1xuICAgIHJldHVyblxu
ICB9XG4gIGlmICh2YWwuX19vYl9fKSB7XG4gICAgdmFyIGRlcElkID0gdmFsLl9fb2JfXy5kZXAu
aWQ7XG4gICAgaWYgKHNlZW4uaGFzKGRlcElkKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAg
IHNlZW4uYWRkKGRlcElkKTtcbiAgfVxuICBpZiAoaXNBKSB7XG4gICAgaSA9IHZhbC5sZW5ndGg7
XG4gICAgd2hpbGUgKGktLSkgeyBfdHJhdmVyc2UodmFsW2ldLCBzZWVuKTsgfVxuICB9IGVsc2Ug
e1xuICAgIGtleXMgPSBPYmplY3Qua2V5cyh2YWwpO1xuICAgIGkgPSBrZXlzLmxlbmd0aDtcbiAg
ICB3aGlsZSAoaS0tKSB7IF90cmF2ZXJzZSh2YWxba2V5c1tpXV0sIHNlZW4pOyB9XG4gIH1cbn1c
blxuLyogICovXG5cbnZhciBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24gPSB7XG4gIGVudW1lcmFi
bGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBub29wLFxuICBzZXQ6IG5v
b3Bcbn07XG5cbmZ1bmN0aW9uIHByb3h5ICh0YXJnZXQsIHNvdXJjZUtleSwga2V5KSB7XG4gIHNo
YXJlZFByb3BlcnR5RGVmaW5pdGlvbi5nZXQgPSBmdW5jdGlvbiBwcm94eUdldHRlciAoKSB7XG4g
ICAgcmV0dXJuIHRoaXNbc291cmNlS2V5XVtrZXldXG4gIH07XG4gIHNoYXJlZFByb3BlcnR5RGVm
aW5pdGlvbi5zZXQgPSBmdW5jdGlvbiBwcm94eVNldHRlciAodmFsKSB7XG4gICAgdGhpc1tzb3Vy
Y2VLZXldW2tleV0gPSB2YWw7XG4gIH07XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQs
IGtleSwgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uKTtcbn1cblxuZnVuY3Rpb24gaW5pdFN0YXRl
ICh2bSkge1xuICB2bS5fd2F0Y2hlcnMgPSBbXTtcbiAgdmFyIG9wdHMgPSB2bS4kb3B0aW9ucztc
biAgaWYgKG9wdHMucHJvcHMpIHsgaW5pdFByb3BzKHZtLCBvcHRzLnByb3BzKTsgfVxuICBpZiAo
b3B0cy5tZXRob2RzKSB7IGluaXRNZXRob2RzKHZtLCBvcHRzLm1ldGhvZHMpOyB9XG4gIGlmIChv
cHRzLmRhdGEpIHtcbiAgICBpbml0RGF0YSh2bSk7XG4gIH0gZWxzZSB7XG4gICAgb2JzZXJ2ZSh2
bS5fZGF0YSA9IHt9LCB0cnVlIC8qIGFzUm9vdERhdGEgKi8pO1xuICB9XG4gIGlmIChvcHRzLmNv
bXB1dGVkKSB7IGluaXRDb21wdXRlZCh2bSwgb3B0cy5jb21wdXRlZCk7IH1cbiAgaWYgKG9wdHMu
d2F0Y2ggJiYgb3B0cy53YXRjaCAhPT0gbmF0aXZlV2F0Y2gpIHtcbiAgICBpbml0V2F0Y2godm0s
IG9wdHMud2F0Y2gpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrT3B0aW9uVHlwZSAodm0sIG5h
bWUpIHtcbiAgdmFyIG9wdGlvbiA9IHZtLiRvcHRpb25zW25hbWVdO1xuICBpZiAoIWlzUGxhaW5P
YmplY3Qob3B0aW9uKSkge1xuICAgIHdhcm4oXG4gICAgICAoXCJjb21wb25lbnQgb3B0aW9uIFxc
XCJcIiArIG5hbWUgKyBcIlxcXCIgc2hvdWxkIGJlIGFuIG9iamVjdC5cIiksXG4gICAgICB2bVxu
ICAgICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdFByb3BzICh2bSwgcHJvcHNPcHRpb25zKSB7
XG4gIHZhciBwcm9wc0RhdGEgPSB2bS4kb3B0aW9ucy5wcm9wc0RhdGEgfHwge307XG4gIHZhciBw
cm9wcyA9IHZtLl9wcm9wcyA9IHt9O1xuICAvLyBjYWNoZSBwcm9wIGtleXMgc28gdGhhdCBmdXR1
cmUgcHJvcHMgdXBkYXRlcyBjYW4gaXRlcmF0ZSB1c2luZyBBcnJheVxuICAvLyBpbnN0ZWFkIG9m
IGR5bmFtaWMgb2JqZWN0IGtleSBlbnVtZXJhdGlvbi5cbiAgdmFyIGtleXMgPSB2bS4kb3B0aW9u
cy5fcHJvcEtleXMgPSBbXTtcbiAgdmFyIGlzUm9vdCA9ICF2bS4kcGFyZW50O1xuICAvLyByb290
IGluc3RhbmNlIHByb3BzIHNob3VsZCBiZSBjb252ZXJ0ZWRcbiAgb2JzZXJ2ZXJTdGF0ZS5zaG91
bGRDb252ZXJ0ID0gaXNSb290O1xuICB2YXIgbG9vcCA9IGZ1bmN0aW9uICgga2V5ICkge1xuICAg
IGtleXMucHVzaChrZXkpO1xuICAgIHZhciB2YWx1ZSA9IHZhbGlkYXRlUHJvcChrZXksIHByb3Bz
T3B0aW9ucywgcHJvcHNEYXRhLCB2bSk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9c
biAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAg
aWYgKGlzUmVzZXJ2ZWRBdHRyaWJ1dGUoa2V5KSB8fCBjb25maWcuaXNSZXNlcnZlZEF0dHIoa2V5
KSkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgIChcIlxcXCJcIiArIGtleSArIFwiXFxcIiBp
cyBhIHJlc2VydmVkIGF0dHJpYnV0ZSBhbmQgY2Fubm90IGJlIHVzZWQgYXMgY29tcG9uZW50IHBy
b3AuXCIpLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBkZWZpbmVS
ZWFjdGl2ZSQkMShwcm9wcywga2V5LCB2YWx1ZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAo
dm0uJHBhcmVudCAmJiAhaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50KSB7XG4gICAgICAgICAgd2Fy
bihcbiAgICAgICAgICAgIFwiQXZvaWQgbXV0YXRpbmcgYSBwcm9wIGRpcmVjdGx5IHNpbmNlIHRo
ZSB2YWx1ZSB3aWxsIGJlIFwiICtcbiAgICAgICAgICAgIFwib3ZlcndyaXR0ZW4gd2hlbmV2ZXIg
dGhlIHBhcmVudCBjb21wb25lbnQgcmUtcmVuZGVycy4gXCIgK1xuICAgICAgICAgICAgXCJJbnN0
ZWFkLCB1c2UgYSBkYXRhIG9yIGNvbXB1dGVkIHByb3BlcnR5IGJhc2VkIG9uIHRoZSBwcm9wJ3Mg
XCIgK1xuICAgICAgICAgICAgXCJ2YWx1ZS4gUHJvcCBiZWluZyBtdXRhdGVkOiBcXFwiXCIgKyBr
ZXkgKyBcIlxcXCJcIixcbiAgICAgICAgICAgIHZtXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxu
ICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlZmluZVJlYWN0aXZlJCQxKHByb3BzLCBr
ZXksIHZhbHVlKTtcbiAgICB9XG4gICAgLy8gc3RhdGljIHByb3BzIGFyZSBhbHJlYWR5IHByb3hp
ZWQgb24gdGhlIGNvbXBvbmVudCdzIHByb3RvdHlwZVxuICAgIC8vIGR1cmluZyBWdWUuZXh0ZW5k
KCkuIFdlIG9ubHkgbmVlZCB0byBwcm94eSBwcm9wcyBkZWZpbmVkIGF0XG4gICAgLy8gaW5zdGFu
dGlhdGlvbiBoZXJlLlxuICAgIGlmICghKGtleSBpbiB2bSkpIHtcbiAgICAgIHByb3h5KHZtLCBc
Il9wcm9wc1wiLCBrZXkpO1xuICAgIH1cbiAgfTtcblxuICBmb3IgKHZhciBrZXkgaW4gcHJvcHNP
cHRpb25zKSBsb29wKCBrZXkgKTtcbiAgb2JzZXJ2ZXJTdGF0ZS5zaG91bGRDb252ZXJ0ID0gdHJ1
ZTtcbn1cblxuZnVuY3Rpb24gaW5pdERhdGEgKHZtKSB7XG4gIHZhciBkYXRhID0gdm0uJG9wdGlv
bnMuZGF0YTtcbiAgZGF0YSA9IHZtLl9kYXRhID0gdHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbidc
biAgICA/IGdldERhdGEoZGF0YSwgdm0pXG4gICAgOiBkYXRhIHx8IHt9O1xuICBpZiAoIWlzUGxh
aW5PYmplY3QoZGF0YSkpIHtcbiAgICBkYXRhID0ge307XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9F
TlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgJ2RhdGEgZnVuY3Rpb25zIHNob3Vs
ZCByZXR1cm4gYW4gb2JqZWN0OlxcbicgK1xuICAgICAgJ2h0dHBzOi8vdnVlanMub3JnL3YyL2d1
aWRlL2NvbXBvbmVudHMuaHRtbCNkYXRhLU11c3QtQmUtYS1GdW5jdGlvbicsXG4gICAgICB2bVxu
ICAgICk7XG4gIH1cbiAgLy8gcHJveHkgZGF0YSBvbiBpbnN0YW5jZVxuICB2YXIga2V5cyA9IE9i
amVjdC5rZXlzKGRhdGEpO1xuICB2YXIgcHJvcHMgPSB2bS4kb3B0aW9ucy5wcm9wcztcbiAgdmFy
IG1ldGhvZHMgPSB2bS4kb3B0aW9ucy5tZXRob2RzO1xuICB2YXIgaSA9IGtleXMubGVuZ3RoO1xu
ICB3aGlsZSAoaS0tKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgaWYgKHByb2Nlc3Mu
ZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChtZXRob2RzICYmIGhh
c093bihtZXRob2RzLCBrZXkpKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgKFwibWV0aG9k
IFxcXCJcIiArIGtleSArIFwiXFxcIiBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQgYXMgYSBkYXRh
IHByb3BlcnR5LlwiKSxcbiAgICAgICAgICB2bVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1c
biAgICBpZiAocHJvcHMgJiYgaGFzT3duKHByb3BzLCBrZXkpKSB7XG4gICAgICBwcm9jZXNzLmVu
di5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oXG4gICAgICAgIFwiVGhlIGRhdGEg
cHJvcGVydHkgXFxcIlwiICsga2V5ICsgXCJcXFwiIGlzIGFscmVhZHkgZGVjbGFyZWQgYXMgYSBw
cm9wLiBcIiArXG4gICAgICAgIFwiVXNlIHByb3AgZGVmYXVsdCB2YWx1ZSBpbnN0ZWFkLlwiLFxu
ICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKCFpc1Jlc2VydmVkKGtleSkpIHtc
biAgICAgIHByb3h5KHZtLCBcIl9kYXRhXCIsIGtleSk7XG4gICAgfVxuICB9XG4gIC8vIG9ic2Vy
dmUgZGF0YVxuICBvYnNlcnZlKGRhdGEsIHRydWUgLyogYXNSb290RGF0YSAqLyk7XG59XG5cbmZ1
bmN0aW9uIGdldERhdGEgKGRhdGEsIHZtKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGRhdGEuY2Fs
bCh2bSlcbiAgfSBjYXRjaCAoZSkge1xuICAgIGhhbmRsZUVycm9yKGUsIHZtLCBcImRhdGEoKVwi
KTtcbiAgICByZXR1cm4ge31cbiAgfVxufVxuXG52YXIgY29tcHV0ZWRXYXRjaGVyT3B0aW9ucyA9
IHsgbGF6eTogdHJ1ZSB9O1xuXG5mdW5jdGlvbiBpbml0Q29tcHV0ZWQgKHZtLCBjb21wdXRlZCkg
e1xuICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGNoZWNrT3B0aW9u
VHlwZSh2bSwgJ2NvbXB1dGVkJyk7XG4gIHZhciB3YXRjaGVycyA9IHZtLl9jb21wdXRlZFdhdGNo
ZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICBmb3IgKHZhciBrZXkgaW4gY29tcHV0ZWQp
IHtcbiAgICB2YXIgdXNlckRlZiA9IGNvbXB1dGVkW2tleV07XG4gICAgdmFyIGdldHRlciA9IHR5
cGVvZiB1c2VyRGVmID09PSAnZnVuY3Rpb24nID8gdXNlckRlZiA6IHVzZXJEZWYuZ2V0O1xuICAg
IGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGdldHRlciA9PSBu
dWxsKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAoXCJHZXR0ZXIgaXMgbWlzc2luZyBmb3IgY29t
cHV0ZWQgcHJvcGVydHkgXFxcIlwiICsga2V5ICsgXCJcXFwiLlwiKSxcbiAgICAgICAgdm1cbiAg
ICAgICk7XG4gICAgfVxuICAgIC8vIGNyZWF0ZSBpbnRlcm5hbCB3YXRjaGVyIGZvciB0aGUgY29t
cHV0ZWQgcHJvcGVydHkuXG4gICAgd2F0Y2hlcnNba2V5XSA9IG5ldyBXYXRjaGVyKHZtLCBnZXR0
ZXIgfHwgbm9vcCwgbm9vcCwgY29tcHV0ZWRXYXRjaGVyT3B0aW9ucyk7XG5cbiAgICAvLyBjb21w
b25lbnQtZGVmaW5lZCBjb21wdXRlZCBwcm9wZXJ0aWVzIGFyZSBhbHJlYWR5IGRlZmluZWQgb24g
dGhlXG4gICAgLy8gY29tcG9uZW50IHByb3RvdHlwZS4gV2Ugb25seSBuZWVkIHRvIGRlZmluZSBj
b21wdXRlZCBwcm9wZXJ0aWVzIGRlZmluZWRcbiAgICAvLyBhdCBpbnN0YW50aWF0aW9uIGhlcmUu
XG4gICAgaWYgKCEoa2V5IGluIHZtKSkge1xuICAgICAgZGVmaW5lQ29tcHV0ZWQodm0sIGtleSwg
dXNlckRlZik7XG4gICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1
Y3Rpb24nKSB7XG4gICAgICBpZiAoa2V5IGluIHZtLiRkYXRhKSB7XG4gICAgICAgIHdhcm4oKFwi
VGhlIGNvbXB1dGVkIHByb3BlcnR5IFxcXCJcIiArIGtleSArIFwiXFxcIiBpcyBhbHJlYWR5IGRl
ZmluZWQgaW4gZGF0YS5cIiksIHZtKTtcbiAgICAgIH0gZWxzZSBpZiAodm0uJG9wdGlvbnMucHJv
cHMgJiYga2V5IGluIHZtLiRvcHRpb25zLnByb3BzKSB7XG4gICAgICAgIHdhcm4oKFwiVGhlIGNv
bXB1dGVkIHByb3BlcnR5IFxcXCJcIiArIGtleSArIFwiXFxcIiBpcyBhbHJlYWR5IGRlZmluZWQg
YXMgYSBwcm9wLlwiKSwgdm0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBk
ZWZpbmVDb21wdXRlZCAodGFyZ2V0LCBrZXksIHVzZXJEZWYpIHtcbiAgaWYgKHR5cGVvZiB1c2Vy
RGVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLmdldCA9
IGNyZWF0ZUNvbXB1dGVkR2V0dGVyKGtleSk7XG4gICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9u
LnNldCA9IG5vb3A7XG4gIH0gZWxzZSB7XG4gICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLmdl
dCA9IHVzZXJEZWYuZ2V0XG4gICAgICA/IHVzZXJEZWYuY2FjaGUgIT09IGZhbHNlXG4gICAgICAg
ID8gY3JlYXRlQ29tcHV0ZWRHZXR0ZXIoa2V5KVxuICAgICAgICA6IHVzZXJEZWYuZ2V0XG4gICAg
ICA6IG5vb3A7XG4gICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLnNldCA9IHVzZXJEZWYuc2V0
XG4gICAgICA/IHVzZXJEZWYuc2V0XG4gICAgICA6IG5vb3A7XG4gIH1cbiAgaWYgKHByb2Nlc3Mu
ZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgIHNoYXJlZFByb3BlcnR5RGVm
aW5pdGlvbi5zZXQgPT09IG5vb3ApIHtcbiAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0
ID0gZnVuY3Rpb24gKCkge1xuICAgICAgd2FybihcbiAgICAgICAgKFwiQ29tcHV0ZWQgcHJvcGVy
dHkgXFxcIlwiICsga2V5ICsgXCJcXFwiIHdhcyBhc3NpZ25lZCB0byBidXQgaXQgaGFzIG5vIHNl
dHRlci5cIiksXG4gICAgICAgIHRoaXNcbiAgICAgICk7XG4gICAgfTtcbiAgfVxuICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbik7XG59
XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbXB1dGVkR2V0dGVyIChrZXkpIHtcbiAgcmV0dXJuIGZ1bmN0
aW9uIGNvbXB1dGVkR2V0dGVyICgpIHtcbiAgICB2YXIgd2F0Y2hlciA9IHRoaXMuX2NvbXB1dGVk
V2F0Y2hlcnMgJiYgdGhpcy5fY29tcHV0ZWRXYXRjaGVyc1trZXldO1xuICAgIGlmICh3YXRjaGVy
KSB7XG4gICAgICBpZiAod2F0Y2hlci5kaXJ0eSkge1xuICAgICAgICB3YXRjaGVyLmV2YWx1YXRl
KCk7XG4gICAgICB9XG4gICAgICBpZiAoRGVwLnRhcmdldCkge1xuICAgICAgICB3YXRjaGVyLmRl
cGVuZCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdhdGNoZXIudmFsdWVcbiAgICB9XG4gIH1c
bn1cblxuZnVuY3Rpb24gaW5pdE1ldGhvZHMgKHZtLCBtZXRob2RzKSB7XG4gIHByb2Nlc3MuZW52
Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY2hlY2tPcHRpb25UeXBlKHZtLCAnbWV0aG9k
cycpO1xuICB2YXIgcHJvcHMgPSB2bS4kb3B0aW9ucy5wcm9wcztcbiAgZm9yICh2YXIga2V5IGlu
IG1ldGhvZHMpIHtcbiAgICB2bVtrZXldID0gbWV0aG9kc1trZXldID09IG51bGwgPyBub29wIDog
YmluZChtZXRob2RzW2tleV0sIHZtKTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09
ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKG1ldGhvZHNba2V5XSA9PSBudWxsKSB7XG4gICAg
ICAgIHdhcm4oXG4gICAgICAgICAgXCJtZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGhhcyBh
biB1bmRlZmluZWQgdmFsdWUgaW4gdGhlIGNvbXBvbmVudCBkZWZpbml0aW9uLiBcIiArXG4gICAg
ICAgICAgXCJEaWQgeW91IHJlZmVyZW5jZSB0aGUgZnVuY3Rpb24gY29ycmVjdGx5P1wiLFxuICAg
ICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMgJiYgaGFzT3du
KHByb3BzLCBrZXkpKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgKFwibWV0aG9kIFxcXCJc
IiArIGtleSArIFwiXFxcIiBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQgYXMgYSBwcm9wLlwiKSxc
biAgICAgICAgICB2bVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5j
dGlvbiBpbml0V2F0Y2ggKHZtLCB3YXRjaCkge1xuICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0g
J3Byb2R1Y3Rpb24nICYmIGNoZWNrT3B0aW9uVHlwZSh2bSwgJ3dhdGNoJyk7XG4gIGZvciAodmFy
IGtleSBpbiB3YXRjaCkge1xuICAgIHZhciBoYW5kbGVyID0gd2F0Y2hba2V5XTtcbiAgICBpZiAo
QXJyYXkuaXNBcnJheShoYW5kbGVyKSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoYW5k
bGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNyZWF0ZVdhdGNoZXIodm0sIGtleSwgaGFuZGxl
cltpXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNyZWF0ZVdhdGNoZXIodm0sIGtl
eSwgaGFuZGxlcik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVdhdGNoZXIgKFxu
ICB2bSxcbiAga2V5T3JGbixcbiAgaGFuZGxlcixcbiAgb3B0aW9uc1xuKSB7XG4gIGlmIChpc1Bs
YWluT2JqZWN0KGhhbmRsZXIpKSB7XG4gICAgb3B0aW9ucyA9IGhhbmRsZXI7XG4gICAgaGFuZGxl
ciA9IGhhbmRsZXIuaGFuZGxlcjtcbiAgfVxuICBpZiAodHlwZW9mIGhhbmRsZXIgPT09ICdzdHJp
bmcnKSB7XG4gICAgaGFuZGxlciA9IHZtW2hhbmRsZXJdO1xuICB9XG4gIHJldHVybiB2bS4kd2F0
Y2goa2V5T3JGbiwgaGFuZGxlciwgb3B0aW9ucylcbn1cblxuZnVuY3Rpb24gc3RhdGVNaXhpbiAo
VnVlKSB7XG4gIC8vIGZsb3cgc29tZWhvdyBoYXMgcHJvYmxlbXMgd2l0aCBkaXJlY3RseSBkZWNs
YXJlZCBkZWZpbml0aW9uIG9iamVjdFxuICAvLyB3aGVuIHVzaW5nIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eSwgc28gd2UgaGF2ZSB0byBwcm9jZWR1cmFsbHkgYnVpbGQgdXBcbiAgLy8gdGhlIG9iamVj
dCBoZXJlLlxuICB2YXIgZGF0YURlZiA9IHt9O1xuICBkYXRhRGVmLmdldCA9IGZ1bmN0aW9uICgp
IHsgcmV0dXJuIHRoaXMuX2RhdGEgfTtcbiAgdmFyIHByb3BzRGVmID0ge307XG4gIHByb3BzRGVm
LmdldCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX3Byb3BzIH07XG4gIGlmIChwcm9jZXNz
LmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgZGF0YURlZi5zZXQgPSBmdW5j
dGlvbiAobmV3RGF0YSkge1xuICAgICAgd2FybihcbiAgICAgICAgJ0F2b2lkIHJlcGxhY2luZyBp
bnN0YW5jZSByb290ICRkYXRhLiAnICtcbiAgICAgICAgJ1VzZSBuZXN0ZWQgZGF0YSBwcm9wZXJ0
aWVzIGluc3RlYWQuJyxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9O1xuICAgIHByb3Bz
RGVmLnNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHdhcm4oXCIkcHJvcHMgaXMgcmVhZG9ubHku
XCIsIHRoaXMpO1xuICAgIH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZS5wcm90
b3R5cGUsICckZGF0YScsIGRhdGFEZWYpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLnBy
b3RvdHlwZSwgJyRwcm9wcycsIHByb3BzRGVmKTtcblxuICBWdWUucHJvdG90eXBlLiRzZXQgPSBz
ZXQ7XG4gIFZ1ZS5wcm90b3R5cGUuJGRlbGV0ZSA9IGRlbDtcblxuICBWdWUucHJvdG90eXBlLiR3
YXRjaCA9IGZ1bmN0aW9uIChcbiAgICBleHBPckZuLFxuICAgIGNiLFxuICAgIG9wdGlvbnNcbiAg
KSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICBpZiAoaXNQbGFpbk9iamVjdChjYikpIHtcbiAg
ICAgIHJldHVybiBjcmVhdGVXYXRjaGVyKHZtLCBleHBPckZuLCBjYiwgb3B0aW9ucylcbiAgICB9
XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgb3B0aW9ucy51c2VyID0gdHJ1ZTtc
biAgICB2YXIgd2F0Y2hlciA9IG5ldyBXYXRjaGVyKHZtLCBleHBPckZuLCBjYiwgb3B0aW9ucyk7
XG4gICAgaWYgKG9wdGlvbnMuaW1tZWRpYXRlKSB7XG4gICAgICBjYi5jYWxsKHZtLCB3YXRjaGVy
LnZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHVud2F0Y2hGbiAoKSB7XG4gICAg
ICB3YXRjaGVyLnRlYXJkb3duKCk7XG4gICAgfVxuICB9O1xufVxuXG4vKiAgKi9cblxuZnVuY3Rp
b24gaW5pdFByb3ZpZGUgKHZtKSB7XG4gIHZhciBwcm92aWRlID0gdm0uJG9wdGlvbnMucHJvdmlk
ZTtcbiAgaWYgKHByb3ZpZGUpIHtcbiAgICB2bS5fcHJvdmlkZWQgPSB0eXBlb2YgcHJvdmlkZSA9
PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBwcm92aWRlLmNhbGwodm0pXG4gICAgICA6IHByb3ZpZGU7
XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdEluamVjdGlvbnMgKHZtKSB7XG4gIHZhciByZXN1bHQg
PSByZXNvbHZlSW5qZWN0KHZtLiRvcHRpb25zLmluamVjdCwgdm0pO1xuICBpZiAocmVzdWx0KSB7
XG4gICAgb2JzZXJ2ZXJTdGF0ZS5zaG91bGRDb252ZXJ0ID0gZmFsc2U7XG4gICAgT2JqZWN0Lmtl
eXMocmVzdWx0KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGln
bm9yZSBlbHNlICovXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0
aW9uJykge1xuICAgICAgICBkZWZpbmVSZWFjdGl2ZSQkMSh2bSwga2V5LCByZXN1bHRba2V5XSwg
ZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICBcIkF2b2lkIG11dGF0
aW5nIGFuIGluamVjdGVkIHZhbHVlIGRpcmVjdGx5IHNpbmNlIHRoZSBjaGFuZ2VzIHdpbGwgYmUg
XCIgK1xuICAgICAgICAgICAgXCJvdmVyd3JpdHRlbiB3aGVuZXZlciB0aGUgcHJvdmlkZWQgY29t
cG9uZW50IHJlLXJlbmRlcnMuIFwiICtcbiAgICAgICAgICAgIFwiaW5qZWN0aW9uIGJlaW5nIG11
dGF0ZWQ6IFxcXCJcIiArIGtleSArIFwiXFxcIlwiLFxuICAgICAgICAgICAgdm1cbiAgICAgICAg
ICApO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlZmluZVJlYWN0aXZl
JCQxKHZtLCBrZXksIHJlc3VsdFtrZXldKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBvYnNlcnZl
clN0YXRlLnNob3VsZENvbnZlcnQgPSB0cnVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVJ
bmplY3QgKGluamVjdCwgdm0pIHtcbiAgaWYgKGluamVjdCkge1xuICAgIC8vIGluamVjdCBpcyA6
YW55IGJlY2F1c2UgZmxvdyBpcyBub3Qgc21hcnQgZW5vdWdoIHRvIGZpZ3VyZSBvdXQgY2FjaGVk
XG4gICAgdmFyIHJlc3VsdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdmFyIGtleXMgPSBo
YXNTeW1ib2xcbiAgICAgICAgPyBSZWZsZWN0Lm93bktleXMoaW5qZWN0KVxuICAgICAgICA6IE9i
amVjdC5rZXlzKGluamVjdCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3Ro
OyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgdmFyIHByb3ZpZGVLZXkg
PSBpbmplY3Rba2V5XTtcbiAgICAgIHZhciBzb3VyY2UgPSB2bTtcbiAgICAgIHdoaWxlIChzb3Vy
Y2UpIHtcbiAgICAgICAgaWYgKHNvdXJjZS5fcHJvdmlkZWQgJiYgcHJvdmlkZUtleSBpbiBzb3Vy
Y2UuX3Byb3ZpZGVkKSB7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSBzb3VyY2UuX3Byb3ZpZGVk
W3Byb3ZpZGVLZXldO1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgc291cmNl
ID0gc291cmNlLiRwYXJlbnQ7XG4gICAgICB9XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9F
TlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhc291cmNlKSB7XG4gICAgICAgIHdhcm4oKFwiSW5qZWN0
aW9uIFxcXCJcIiArIGtleSArIFwiXFxcIiBub3QgZm91bmRcIiksIHZtKTtcbiAgICAgIH1cbiAg
ICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBjcmVh
dGVGdW5jdGlvbmFsQ29tcG9uZW50IChcbiAgQ3RvcixcbiAgcHJvcHNEYXRhLFxuICBkYXRhLFxu
ICBjb250ZXh0LFxuICBjaGlsZHJlblxuKSB7XG4gIHZhciBwcm9wcyA9IHt9O1xuICB2YXIgcHJv
cE9wdGlvbnMgPSBDdG9yLm9wdGlvbnMucHJvcHM7XG4gIGlmIChpc0RlZihwcm9wT3B0aW9ucykp
IHtcbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcE9wdGlvbnMpIHtcbiAgICAgIHByb3BzW2tleV0g
PSB2YWxpZGF0ZVByb3Aoa2V5LCBwcm9wT3B0aW9ucywgcHJvcHNEYXRhIHx8IHt9KTtcbiAgICB9
XG4gIH0gZWxzZSB7XG4gICAgaWYgKGlzRGVmKGRhdGEuYXR0cnMpKSB7IG1lcmdlUHJvcHMocHJv
cHMsIGRhdGEuYXR0cnMpOyB9XG4gICAgaWYgKGlzRGVmKGRhdGEucHJvcHMpKSB7IG1lcmdlUHJv
cHMocHJvcHMsIGRhdGEucHJvcHMpOyB9XG4gIH1cbiAgLy8gZW5zdXJlIHRoZSBjcmVhdGVFbGVt
ZW50IGZ1bmN0aW9uIGluIGZ1bmN0aW9uYWwgY29tcG9uZW50c1xuICAvLyBnZXRzIGEgdW5pcXVl
IGNvbnRleHQgLSB0aGlzIGlzIG5lY2Vzc2FyeSBmb3IgY29ycmVjdCBuYW1lZCBzbG90IGNoZWNr
XG4gIHZhciBfY29udGV4dCA9IE9iamVjdC5jcmVhdGUoY29udGV4dCk7XG4gIHZhciBoID0gZnVu
Y3Rpb24gKGEsIGIsIGMsIGQpIHsgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoX2NvbnRleHQsIGEsIGIs
IGMsIGQsIHRydWUpOyB9O1xuICB2YXIgdm5vZGUgPSBDdG9yLm9wdGlvbnMucmVuZGVyLmNhbGwo
bnVsbCwgaCwge1xuICAgIGRhdGE6IGRhdGEsXG4gICAgcHJvcHM6IHByb3BzLFxuICAgIGNoaWxk
cmVuOiBjaGlsZHJlbixcbiAgICBwYXJlbnQ6IGNvbnRleHQsXG4gICAgbGlzdGVuZXJzOiBkYXRh
Lm9uIHx8IHt9LFxuICAgIGluamVjdGlvbnM6IHJlc29sdmVJbmplY3QoQ3Rvci5vcHRpb25zLmlu
amVjdCwgY29udGV4dCksXG4gICAgc2xvdHM6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc29sdmVT
bG90cyhjaGlsZHJlbiwgY29udGV4dCk7IH1cbiAgfSk7XG4gIGlmICh2bm9kZSBpbnN0YW5jZW9m
IFZOb2RlKSB7XG4gICAgdm5vZGUuZnVuY3Rpb25hbENvbnRleHQgPSBjb250ZXh0O1xuICAgIHZu
b2RlLmZ1bmN0aW9uYWxPcHRpb25zID0gQ3Rvci5vcHRpb25zO1xuICAgIGlmIChkYXRhLnNsb3Qp
IHtcbiAgICAgICh2bm9kZS5kYXRhIHx8ICh2bm9kZS5kYXRhID0ge30pKS5zbG90ID0gZGF0YS5z
bG90O1xuICAgIH1cbiAgfVxuICByZXR1cm4gdm5vZGVcbn1cblxuZnVuY3Rpb24gbWVyZ2VQcm9w
cyAodG8sIGZyb20pIHtcbiAgZm9yICh2YXIga2V5IGluIGZyb20pIHtcbiAgICB0b1tjYW1lbGl6
ZShrZXkpXSA9IGZyb21ba2V5XTtcbiAgfVxufVxuXG4vKiAgKi9cblxuLy8gaG9va3MgdG8gYmUg
aW52b2tlZCBvbiBjb21wb25lbnQgVk5vZGVzIGR1cmluZyBwYXRjaFxudmFyIGNvbXBvbmVudFZO
b2RlSG9va3MgPSB7XG4gIGluaXQ6IGZ1bmN0aW9uIGluaXQgKFxuICAgIHZub2RlLFxuICAgIGh5
ZHJhdGluZyxcbiAgICBwYXJlbnRFbG0sXG4gICAgcmVmRWxtXG4gICkge1xuICAgIGlmICghdm5v
ZGUuY29tcG9uZW50SW5zdGFuY2UgfHwgdm5vZGUuY29tcG9uZW50SW5zdGFuY2UuX2lzRGVzdHJv
eWVkKSB7XG4gICAgICB2YXIgY2hpbGQgPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSA9IGNyZWF0
ZUNvbXBvbmVudEluc3RhbmNlRm9yVm5vZGUoXG4gICAgICAgIHZub2RlLFxuICAgICAgICBhY3Rp
dmVJbnN0YW5jZSxcbiAgICAgICAgcGFyZW50RWxtLFxuICAgICAgICByZWZFbG1cbiAgICAgICk7
XG4gICAgICBjaGlsZC4kbW91bnQoaHlkcmF0aW5nID8gdm5vZGUuZWxtIDogdW5kZWZpbmVkLCBo
eWRyYXRpbmcpO1xuICAgIH0gZWxzZSBpZiAodm5vZGUuZGF0YS5rZWVwQWxpdmUpIHtcbiAgICAg
IC8vIGtlcHQtYWxpdmUgY29tcG9uZW50cywgdHJlYXQgYXMgYSBwYXRjaFxuICAgICAgdmFyIG1v
dW50ZWROb2RlID0gdm5vZGU7IC8vIHdvcmsgYXJvdW5kIGZsb3dcbiAgICAgIGNvbXBvbmVudFZO
b2RlSG9va3MucHJlcGF0Y2gobW91bnRlZE5vZGUsIG1vdW50ZWROb2RlKTtcbiAgICB9XG4gIH0s
XG5cbiAgcHJlcGF0Y2g6IGZ1bmN0aW9uIHByZXBhdGNoIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAg
ICB2YXIgb3B0aW9ucyA9IHZub2RlLmNvbXBvbmVudE9wdGlvbnM7XG4gICAgdmFyIGNoaWxkID0g
dm5vZGUuY29tcG9uZW50SW5zdGFuY2UgPSBvbGRWbm9kZS5jb21wb25lbnRJbnN0YW5jZTtcbiAg
ICB1cGRhdGVDaGlsZENvbXBvbmVudChcbiAgICAgIGNoaWxkLFxuICAgICAgb3B0aW9ucy5wcm9w
c0RhdGEsIC8vIHVwZGF0ZWQgcHJvcHNcbiAgICAgIG9wdGlvbnMubGlzdGVuZXJzLCAvLyB1cGRh
dGVkIGxpc3RlbmVyc1xuICAgICAgdm5vZGUsIC8vIG5ldyBwYXJlbnQgdm5vZGVcbiAgICAgIG9w
dGlvbnMuY2hpbGRyZW4gLy8gbmV3IGNoaWxkcmVuXG4gICAgKTtcbiAgfSxcblxuICBpbnNlcnQ6
IGZ1bmN0aW9uIGluc2VydCAodm5vZGUpIHtcbiAgICB2YXIgY29udGV4dCA9IHZub2RlLmNvbnRl
eHQ7XG4gICAgdmFyIGNvbXBvbmVudEluc3RhbmNlID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2U7
XG4gICAgaWYgKCFjb21wb25lbnRJbnN0YW5jZS5faXNNb3VudGVkKSB7XG4gICAgICBjb21wb25l
bnRJbnN0YW5jZS5faXNNb3VudGVkID0gdHJ1ZTtcbiAgICAgIGNhbGxIb29rKGNvbXBvbmVudElu
c3RhbmNlLCAnbW91bnRlZCcpO1xuICAgIH1cbiAgICBpZiAodm5vZGUuZGF0YS5rZWVwQWxpdmUp
IHtcbiAgICAgIGlmIChjb250ZXh0Ll9pc01vdW50ZWQpIHtcbiAgICAgICAgLy8gdnVlLXJvdXRl
ciMxMjEyXG4gICAgICAgIC8vIER1cmluZyB1cGRhdGVzLCBhIGtlcHQtYWxpdmUgY29tcG9uZW50
J3MgY2hpbGQgY29tcG9uZW50cyBtYXlcbiAgICAgICAgLy8gY2hhbmdlLCBzbyBkaXJlY3RseSB3
YWxraW5nIHRoZSB0cmVlIGhlcmUgbWF5IGNhbGwgYWN0aXZhdGVkIGhvb2tzXG4gICAgICAgIC8v
IG9uIGluY29ycmVjdCBjaGlsZHJlbi4gSW5zdGVhZCB3ZSBwdXNoIHRoZW0gaW50byBhIHF1ZXVl
IHdoaWNoIHdpbGxcbiAgICAgICAgLy8gYmUgcHJvY2Vzc2VkIGFmdGVyIHRoZSB3aG9sZSBwYXRj
aCBwcm9jZXNzIGVuZGVkLlxuICAgICAgICBxdWV1ZUFjdGl2YXRlZENvbXBvbmVudChjb21wb25l
bnRJbnN0YW5jZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY3RpdmF0ZUNoaWxkQ29tcG9u
ZW50KGNvbXBvbmVudEluc3RhbmNlLCB0cnVlIC8qIGRpcmVjdCAqLyk7XG4gICAgICB9XG4gICAg
fVxuICB9LFxuXG4gIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3kgKHZub2RlKSB7XG4gICAgdmFy
IGNvbXBvbmVudEluc3RhbmNlID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgaWYgKCFj
b21wb25lbnRJbnN0YW5jZS5faXNEZXN0cm95ZWQpIHtcbiAgICAgIGlmICghdm5vZGUuZGF0YS5r
ZWVwQWxpdmUpIHtcbiAgICAgICAgY29tcG9uZW50SW5zdGFuY2UuJGRlc3Ryb3koKTtcbiAgICAg
IH0gZWxzZSB7XG4gICAgICAgIGRlYWN0aXZhdGVDaGlsZENvbXBvbmVudChjb21wb25lbnRJbnN0
YW5jZSwgdHJ1ZSAvKiBkaXJlY3QgKi8pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxudmFy
IGhvb2tzVG9NZXJnZSA9IE9iamVjdC5rZXlzKGNvbXBvbmVudFZOb2RlSG9va3MpO1xuXG5mdW5j
dGlvbiBjcmVhdGVDb21wb25lbnQgKFxuICBDdG9yLFxuICBkYXRhLFxuICBjb250ZXh0LFxuICBj
aGlsZHJlbixcbiAgdGFnXG4pIHtcbiAgaWYgKGlzVW5kZWYoQ3RvcikpIHtcbiAgICByZXR1cm5c
biAgfVxuXG4gIHZhciBiYXNlQ3RvciA9IGNvbnRleHQuJG9wdGlvbnMuX2Jhc2U7XG5cbiAgLy8g
cGxhaW4gb3B0aW9ucyBvYmplY3Q6IHR1cm4gaXQgaW50byBhIGNvbnN0cnVjdG9yXG4gIGlmIChp
c09iamVjdChDdG9yKSkge1xuICAgIEN0b3IgPSBiYXNlQ3Rvci5leHRlbmQoQ3Rvcik7XG4gIH1c
blxuICAvLyBpZiBhdCB0aGlzIHN0YWdlIGl0J3Mgbm90IGEgY29uc3RydWN0b3Igb3IgYW4gYXN5
bmMgY29tcG9uZW50IGZhY3RvcnksXG4gIC8vIHJlamVjdC5cbiAgaWYgKHR5cGVvZiBDdG9yICE9
PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVj
dGlvbicpIHtcbiAgICAgIHdhcm4oKFwiSW52YWxpZCBDb21wb25lbnQgZGVmaW5pdGlvbjogXCIg
KyAoU3RyaW5nKEN0b3IpKSksIGNvbnRleHQpO1xuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuXG4g
IC8vIGFzeW5jIGNvbXBvbmVudFxuICB2YXIgYXN5bmNGYWN0b3J5O1xuICBpZiAoaXNVbmRlZihD
dG9yLmNpZCkpIHtcbiAgICBhc3luY0ZhY3RvcnkgPSBDdG9yO1xuICAgIEN0b3IgPSByZXNvbHZl
QXN5bmNDb21wb25lbnQoYXN5bmNGYWN0b3J5LCBiYXNlQ3RvciwgY29udGV4dCk7XG4gICAgaWYg
KEN0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gcmV0dXJuIGEgcGxhY2Vob2xkZXIgbm9k
ZSBmb3IgYXN5bmMgY29tcG9uZW50LCB3aGljaCBpcyByZW5kZXJlZFxuICAgICAgLy8gYXMgYSBj
b21tZW50IG5vZGUgYnV0IHByZXNlcnZlcyBhbGwgdGhlIHJhdyBpbmZvcm1hdGlvbiBmb3IgdGhl
IG5vZGUuXG4gICAgICAvLyB0aGUgaW5mb3JtYXRpb24gd2lsbCBiZSB1c2VkIGZvciBhc3luYyBz
ZXJ2ZXItcmVuZGVyaW5nIGFuZCBoeWRyYXRpb24uXG4gICAgICByZXR1cm4gY3JlYXRlQXN5bmNQ
bGFjZWhvbGRlcihcbiAgICAgICAgYXN5bmNGYWN0b3J5LFxuICAgICAgICBkYXRhLFxuICAgICAg
ICBjb250ZXh0LFxuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgdGFnXG4gICAgICApXG4gICAg
fVxuICB9XG5cbiAgZGF0YSA9IGRhdGEgfHwge307XG5cbiAgLy8gcmVzb2x2ZSBjb25zdHJ1Y3Rv
ciBvcHRpb25zIGluIGNhc2UgZ2xvYmFsIG1peGlucyBhcmUgYXBwbGllZCBhZnRlclxuICAvLyBj
b21wb25lbnQgY29uc3RydWN0b3IgY3JlYXRpb25cbiAgcmVzb2x2ZUNvbnN0cnVjdG9yT3B0aW9u
cyhDdG9yKTtcblxuICAvLyB0cmFuc2Zvcm0gY29tcG9uZW50IHYtbW9kZWwgZGF0YSBpbnRvIHBy
b3BzICYgZXZlbnRzXG4gIGlmIChpc0RlZihkYXRhLm1vZGVsKSkge1xuICAgIHRyYW5zZm9ybU1v
ZGVsKEN0b3Iub3B0aW9ucywgZGF0YSk7XG4gIH1cblxuICAvLyBleHRyYWN0IHByb3BzXG4gIHZh
ciBwcm9wc0RhdGEgPSBleHRyYWN0UHJvcHNGcm9tVk5vZGVEYXRhKGRhdGEsIEN0b3IsIHRhZyk7
XG5cbiAgLy8gZnVuY3Rpb25hbCBjb21wb25lbnRcbiAgaWYgKGlzVHJ1ZShDdG9yLm9wdGlvbnMu
ZnVuY3Rpb25hbCkpIHtcbiAgICByZXR1cm4gY3JlYXRlRnVuY3Rpb25hbENvbXBvbmVudChDdG9y
LCBwcm9wc0RhdGEsIGRhdGEsIGNvbnRleHQsIGNoaWxkcmVuKVxuICB9XG5cbiAgLy8gZXh0cmFj
dCBsaXN0ZW5lcnMsIHNpbmNlIHRoZXNlIG5lZWRzIHRvIGJlIHRyZWF0ZWQgYXNcbiAgLy8gY2hp
bGQgY29tcG9uZW50IGxpc3RlbmVycyBpbnN0ZWFkIG9mIERPTSBsaXN0ZW5lcnNcbiAgdmFyIGxp
c3RlbmVycyA9IGRhdGEub247XG4gIC8vIHJlcGxhY2Ugd2l0aCBsaXN0ZW5lcnMgd2l0aCAubmF0
aXZlIG1vZGlmaWVyXG4gIC8vIHNvIGl0IGdldHMgcHJvY2Vzc2VkIGR1cmluZyBwYXJlbnQgY29t
cG9uZW50IHBhdGNoLlxuICBkYXRhLm9uID0gZGF0YS5uYXRpdmVPbjtcblxuICBpZiAoaXNUcnVl
KEN0b3Iub3B0aW9ucy5hYnN0cmFjdCkpIHtcbiAgICAvLyBhYnN0cmFjdCBjb21wb25lbnRzIGRv
IG5vdCBrZWVwIGFueXRoaW5nXG4gICAgLy8gb3RoZXIgdGhhbiBwcm9wcyAmIGxpc3RlbmVycyAm
IHNsb3RcblxuICAgIC8vIHdvcmsgYXJvdW5kIGZsb3dcbiAgICB2YXIgc2xvdCA9IGRhdGEuc2xv
dDtcbiAgICBkYXRhID0ge307XG4gICAgaWYgKHNsb3QpIHtcbiAgICAgIGRhdGEuc2xvdCA9IHNs
b3Q7XG4gICAgfVxuICB9XG5cbiAgLy8gbWVyZ2UgY29tcG9uZW50IG1hbmFnZW1lbnQgaG9va3Mg
b250byB0aGUgcGxhY2Vob2xkZXIgbm9kZVxuICBtZXJnZUhvb2tzKGRhdGEpO1xuXG4gIC8vIHJl
dHVybiBhIHBsYWNlaG9sZGVyIHZub2RlXG4gIHZhciBuYW1lID0gQ3Rvci5vcHRpb25zLm5hbWUg
fHwgdGFnO1xuICB2YXIgdm5vZGUgPSBuZXcgVk5vZGUoXG4gICAgKFwidnVlLWNvbXBvbmVudC1c
IiArIChDdG9yLmNpZCkgKyAobmFtZSA/IChcIi1cIiArIG5hbWUpIDogJycpKSxcbiAgICBkYXRh
LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBjb250ZXh0LFxuICAgIHsgQ3Rvcjog
Q3RvciwgcHJvcHNEYXRhOiBwcm9wc0RhdGEsIGxpc3RlbmVyczogbGlzdGVuZXJzLCB0YWc6IHRh
ZywgY2hpbGRyZW46IGNoaWxkcmVuIH0sXG4gICAgYXN5bmNGYWN0b3J5XG4gICk7XG4gIHJldHVy
biB2bm9kZVxufVxuXG5mdW5jdGlvbiBjcmVhdGVDb21wb25lbnRJbnN0YW5jZUZvclZub2RlIChc
biAgdm5vZGUsIC8vIHdlIGtub3cgaXQncyBNb3VudGVkQ29tcG9uZW50Vk5vZGUgYnV0IGZsb3cg
ZG9lc24ndFxuICBwYXJlbnQsIC8vIGFjdGl2ZUluc3RhbmNlIGluIGxpZmVjeWNsZSBzdGF0ZVxu
ICBwYXJlbnRFbG0sXG4gIHJlZkVsbVxuKSB7XG4gIHZhciB2bm9kZUNvbXBvbmVudE9wdGlvbnMg
PSB2bm9kZS5jb21wb25lbnRPcHRpb25zO1xuICB2YXIgb3B0aW9ucyA9IHtcbiAgICBfaXNDb21w
b25lbnQ6IHRydWUsXG4gICAgcGFyZW50OiBwYXJlbnQsXG4gICAgcHJvcHNEYXRhOiB2bm9kZUNv
bXBvbmVudE9wdGlvbnMucHJvcHNEYXRhLFxuICAgIF9jb21wb25lbnRUYWc6IHZub2RlQ29tcG9u
ZW50T3B0aW9ucy50YWcsXG4gICAgX3BhcmVudFZub2RlOiB2bm9kZSxcbiAgICBfcGFyZW50TGlz
dGVuZXJzOiB2bm9kZUNvbXBvbmVudE9wdGlvbnMubGlzdGVuZXJzLFxuICAgIF9yZW5kZXJDaGls
ZHJlbjogdm5vZGVDb21wb25lbnRPcHRpb25zLmNoaWxkcmVuLFxuICAgIF9wYXJlbnRFbG06IHBh
cmVudEVsbSB8fCBudWxsLFxuICAgIF9yZWZFbG06IHJlZkVsbSB8fCBudWxsXG4gIH07XG4gIC8v
IGNoZWNrIGlubGluZS10ZW1wbGF0ZSByZW5kZXIgZnVuY3Rpb25zXG4gIHZhciBpbmxpbmVUZW1w
bGF0ZSA9IHZub2RlLmRhdGEuaW5saW5lVGVtcGxhdGU7XG4gIGlmIChpc0RlZihpbmxpbmVUZW1w
bGF0ZSkpIHtcbiAgICBvcHRpb25zLnJlbmRlciA9IGlubGluZVRlbXBsYXRlLnJlbmRlcjtcbiAg
ICBvcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IGlubGluZVRlbXBsYXRlLnN0YXRpY1JlbmRlckZu
cztcbiAgfVxuICByZXR1cm4gbmV3IHZub2RlQ29tcG9uZW50T3B0aW9ucy5DdG9yKG9wdGlvbnMp
XG59XG5cbmZ1bmN0aW9uIG1lcmdlSG9va3MgKGRhdGEpIHtcbiAgaWYgKCFkYXRhLmhvb2spIHtc
biAgICBkYXRhLmhvb2sgPSB7fTtcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGhvb2tzVG9N
ZXJnZS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBob29rc1RvTWVyZ2VbaV07XG4gICAg
dmFyIGZyb21QYXJlbnQgPSBkYXRhLmhvb2tba2V5XTtcbiAgICB2YXIgb3VycyA9IGNvbXBvbmVu
dFZOb2RlSG9va3Nba2V5XTtcbiAgICBkYXRhLmhvb2tba2V5XSA9IGZyb21QYXJlbnQgPyBtZXJn
ZUhvb2skMShvdXJzLCBmcm9tUGFyZW50KSA6IG91cnM7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWVy
Z2VIb29rJDEgKG9uZSwgdHdvKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoYSwgYiwgYywgZCkge1xu
ICAgIG9uZShhLCBiLCBjLCBkKTtcbiAgICB0d28oYSwgYiwgYywgZCk7XG4gIH1cbn1cblxuLy8g
dHJhbnNmb3JtIGNvbXBvbmVudCB2LW1vZGVsIGluZm8gKHZhbHVlIGFuZCBjYWxsYmFjaykgaW50
b1xuLy8gcHJvcCBhbmQgZXZlbnQgaGFuZGxlciByZXNwZWN0aXZlbHkuXG5mdW5jdGlvbiB0cmFu
c2Zvcm1Nb2RlbCAob3B0aW9ucywgZGF0YSkge1xuICB2YXIgcHJvcCA9IChvcHRpb25zLm1vZGVs
ICYmIG9wdGlvbnMubW9kZWwucHJvcCkgfHwgJ3ZhbHVlJztcbiAgdmFyIGV2ZW50ID0gKG9wdGlv
bnMubW9kZWwgJiYgb3B0aW9ucy5tb2RlbC5ldmVudCkgfHwgJ2lucHV0JzsoZGF0YS5wcm9wcyB8
fCAoZGF0YS5wcm9wcyA9IHt9KSlbcHJvcF0gPSBkYXRhLm1vZGVsLnZhbHVlO1xuICB2YXIgb24g
PSBkYXRhLm9uIHx8IChkYXRhLm9uID0ge30pO1xuICBpZiAoaXNEZWYob25bZXZlbnRdKSkge1xu
ICAgIG9uW2V2ZW50XSA9IFtkYXRhLm1vZGVsLmNhbGxiYWNrXS5jb25jYXQob25bZXZlbnRdKTtc
biAgfSBlbHNlIHtcbiAgICBvbltldmVudF0gPSBkYXRhLm1vZGVsLmNhbGxiYWNrO1xuICB9XG59
XG5cbi8qICAqL1xuXG52YXIgU0lNUExFX05PUk1BTElaRSA9IDE7XG52YXIgQUxXQVlTX05PUk1B
TElaRSA9IDI7XG5cbi8vIHdyYXBwZXIgZnVuY3Rpb24gZm9yIHByb3ZpZGluZyBhIG1vcmUgZmxl
eGlibGUgaW50ZXJmYWNlXG4vLyB3aXRob3V0IGdldHRpbmcgeWVsbGVkIGF0IGJ5IGZsb3dcbmZ1
bmN0aW9uIGNyZWF0ZUVsZW1lbnQgKFxuICBjb250ZXh0LFxuICB0YWcsXG4gIGRhdGEsXG4gIGNo
aWxkcmVuLFxuICBub3JtYWxpemF0aW9uVHlwZSxcbiAgYWx3YXlzTm9ybWFsaXplXG4pIHtcbiAg
aWYgKEFycmF5LmlzQXJyYXkoZGF0YSkgfHwgaXNQcmltaXRpdmUoZGF0YSkpIHtcbiAgICBub3Jt
YWxpemF0aW9uVHlwZSA9IGNoaWxkcmVuO1xuICAgIGNoaWxkcmVuID0gZGF0YTtcbiAgICBkYXRh
ID0gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChpc1RydWUoYWx3YXlzTm9ybWFsaXplKSkge1xuICAg
IG5vcm1hbGl6YXRpb25UeXBlID0gQUxXQVlTX05PUk1BTElaRTtcbiAgfVxuICByZXR1cm4gX2Ny
ZWF0ZUVsZW1lbnQoY29udGV4dCwgdGFnLCBkYXRhLCBjaGlsZHJlbiwgbm9ybWFsaXphdGlvblR5
cGUpXG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVFbGVtZW50IChcbiAgY29udGV4dCxcbiAgdGFnLFxu
ICBkYXRhLFxuICBjaGlsZHJlbixcbiAgbm9ybWFsaXphdGlvblR5cGVcbikge1xuICBpZiAoaXNE
ZWYoZGF0YSkgJiYgaXNEZWYoKGRhdGEpLl9fb2JfXykpIHtcbiAgICBwcm9jZXNzLmVudi5OT0RF
X0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oXG4gICAgICBcIkF2b2lkIHVzaW5nIG9ic2Vy
dmVkIGRhdGEgb2JqZWN0IGFzIHZub2RlIGRhdGE6IFwiICsgKEpTT04uc3RyaW5naWZ5KGRhdGEp
KSArIFwiXFxuXCIgK1xuICAgICAgJ0Fsd2F5cyBjcmVhdGUgZnJlc2ggdm5vZGUgZGF0YSBvYmpl
Y3RzIGluIGVhY2ggcmVuZGVyIScsXG4gICAgICBjb250ZXh0XG4gICAgKTtcbiAgICByZXR1cm4g
Y3JlYXRlRW1wdHlWTm9kZSgpXG4gIH1cbiAgLy8gb2JqZWN0IHN5bnRheCBpbiB2LWJpbmRcbiAg
aWYgKGlzRGVmKGRhdGEpICYmIGlzRGVmKGRhdGEuaXMpKSB7XG4gICAgdGFnID0gZGF0YS5pcztc
biAgfVxuICBpZiAoIXRhZykge1xuICAgIC8vIGluIGNhc2Ugb2YgY29tcG9uZW50IDppcyBzZXQg
dG8gZmFsc3kgdmFsdWVcbiAgICByZXR1cm4gY3JlYXRlRW1wdHlWTm9kZSgpXG4gIH1cbiAgLy8g
d2FybiBhZ2FpbnN0IG5vbi1wcmltaXRpdmUga2V5XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VO
ViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgaXNEZWYoZGF0YSkgJiYgaXNEZWYoZGF0YS5rZXkp
ICYmICFpc1ByaW1pdGl2ZShkYXRhLmtleSlcbiAgKSB7XG4gICAgd2FybihcbiAgICAgICdBdm9p
ZCB1c2luZyBub24tcHJpbWl0aXZlIHZhbHVlIGFzIGtleSwgJyArXG4gICAgICAndXNlIHN0cmlu
Zy9udW1iZXIgdmFsdWUgaW5zdGVhZC4nLFxuICAgICAgY29udGV4dFxuICAgICk7XG4gIH1cbiAg
Ly8gc3VwcG9ydCBzaW5nbGUgZnVuY3Rpb24gY2hpbGRyZW4gYXMgZGVmYXVsdCBzY29wZWQgc2xv
dFxuICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikgJiZcbiAgICB0eXBlb2YgY2hpbGRyZW5b
MF0gPT09ICdmdW5jdGlvbidcbiAgKSB7XG4gICAgZGF0YSA9IGRhdGEgfHwge307XG4gICAgZGF0
YS5zY29wZWRTbG90cyA9IHsgZGVmYXVsdDogY2hpbGRyZW5bMF0gfTtcbiAgICBjaGlsZHJlbi5s
ZW5ndGggPSAwO1xuICB9XG4gIGlmIChub3JtYWxpemF0aW9uVHlwZSA9PT0gQUxXQVlTX05PUk1B
TElaRSkge1xuICAgIGNoaWxkcmVuID0gbm9ybWFsaXplQ2hpbGRyZW4oY2hpbGRyZW4pO1xuICB9
IGVsc2UgaWYgKG5vcm1hbGl6YXRpb25UeXBlID09PSBTSU1QTEVfTk9STUFMSVpFKSB7XG4gICAg
Y2hpbGRyZW4gPSBzaW1wbGVOb3JtYWxpemVDaGlsZHJlbihjaGlsZHJlbik7XG4gIH1cbiAgdmFy
IHZub2RlLCBucztcbiAgaWYgKHR5cGVvZiB0YWcgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFyIEN0
b3I7XG4gICAgbnMgPSBjb25maWcuZ2V0VGFnTmFtZXNwYWNlKHRhZyk7XG4gICAgaWYgKGNvbmZp
Zy5pc1Jlc2VydmVkVGFnKHRhZykpIHtcbiAgICAgIC8vIHBsYXRmb3JtIGJ1aWx0LWluIGVsZW1l
bnRzXG4gICAgICB2bm9kZSA9IG5ldyBWTm9kZShcbiAgICAgICAgY29uZmlnLnBhcnNlUGxhdGZv
cm1UYWdOYW1lKHRhZyksIGRhdGEsIGNoaWxkcmVuLFxuICAgICAgICB1bmRlZmluZWQsIHVuZGVm
aW5lZCwgY29udGV4dFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGlzRGVmKEN0b3IgPSByZXNv
bHZlQXNzZXQoY29udGV4dC4kb3B0aW9ucywgJ2NvbXBvbmVudHMnLCB0YWcpKSkge1xuICAgICAg
Ly8gY29tcG9uZW50XG4gICAgICB2bm9kZSA9IGNyZWF0ZUNvbXBvbmVudChDdG9yLCBkYXRhLCBj
b250ZXh0LCBjaGlsZHJlbiwgdGFnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdW5rbm93biBv
ciB1bmxpc3RlZCBuYW1lc3BhY2VkIGVsZW1lbnRzXG4gICAgICAvLyBjaGVjayBhdCBydW50aW1l
IGJlY2F1c2UgaXQgbWF5IGdldCBhc3NpZ25lZCBhIG5hbWVzcGFjZSB3aGVuIGl0c1xuICAgICAg
Ly8gcGFyZW50IG5vcm1hbGl6ZXMgY2hpbGRyZW5cbiAgICAgIHZub2RlID0gbmV3IFZOb2RlKFxu
ICAgICAgICB0YWcsIGRhdGEsIGNoaWxkcmVuLFxuICAgICAgICB1bmRlZmluZWQsIHVuZGVmaW5l
ZCwgY29udGV4dFxuICAgICAgKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gZGlyZWN0IGNv
bXBvbmVudCBvcHRpb25zIC8gY29uc3RydWN0b3JcbiAgICB2bm9kZSA9IGNyZWF0ZUNvbXBvbmVu
dCh0YWcsIGRhdGEsIGNvbnRleHQsIGNoaWxkcmVuKTtcbiAgfVxuICBpZiAoaXNEZWYodm5vZGUp
KSB7XG4gICAgaWYgKG5zKSB7IGFwcGx5TlModm5vZGUsIG5zKTsgfVxuICAgIHJldHVybiB2bm9k
ZVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBjcmVhdGVFbXB0eVZOb2RlKClcbiAgfVxufVxuXG5m
dW5jdGlvbiBhcHBseU5TICh2bm9kZSwgbnMpIHtcbiAgdm5vZGUubnMgPSBucztcbiAgaWYgKHZu
b2RlLnRhZyA9PT0gJ2ZvcmVpZ25PYmplY3QnKSB7XG4gICAgLy8gdXNlIGRlZmF1bHQgbmFtZXNw
YWNlIGluc2lkZSBmb3JlaWduT2JqZWN0XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGlzRGVmKHZu
b2RlLmNoaWxkcmVuKSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gdm5vZGUuY2hpbGRyZW4u
bGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgY2hpbGQgPSB2bm9kZS5jaGlsZHJlbltp
XTtcbiAgICAgIGlmIChpc0RlZihjaGlsZC50YWcpICYmIGlzVW5kZWYoY2hpbGQubnMpKSB7XG4g
ICAgICAgIGFwcGx5TlMoY2hpbGQsIG5zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyog
ICovXG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHJlbmRlcmluZyB2LWZvciBsaXN0cy5c
biAqL1xuZnVuY3Rpb24gcmVuZGVyTGlzdCAoXG4gIHZhbCxcbiAgcmVuZGVyXG4pIHtcbiAgdmFy
IHJldCwgaSwgbCwga2V5cywga2V5O1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpIHx8IHR5cGVv
ZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0ID0gbmV3IEFycmF5KHZhbC5sZW5ndGgpO1xu
ICAgIGZvciAoaSA9IDAsIGwgPSB2YWwubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICByZXRb
aV0gPSByZW5kZXIodmFsW2ldLCBpKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9
PT0gJ251bWJlcicpIHtcbiAgICByZXQgPSBuZXcgQXJyYXkodmFsKTtcbiAgICBmb3IgKGkgPSAw
OyBpIDwgdmFsOyBpKyspIHtcbiAgICAgIHJldFtpXSA9IHJlbmRlcihpICsgMSwgaSk7XG4gICAg
fVxuICB9IGVsc2UgaWYgKGlzT2JqZWN0KHZhbCkpIHtcbiAgICBrZXlzID0gT2JqZWN0LmtleXMo
dmFsKTtcbiAgICByZXQgPSBuZXcgQXJyYXkoa2V5cy5sZW5ndGgpO1xuICAgIGZvciAoaSA9IDAs
IGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAga2V5ID0ga2V5c1tpXTtcbiAg
ICAgIHJldFtpXSA9IHJlbmRlcih2YWxba2V5XSwga2V5LCBpKTtcbiAgICB9XG4gIH1cbiAgaWYg
KGlzRGVmKHJldCkpIHtcbiAgICAocmV0KS5faXNWTGlzdCA9IHRydWU7XG4gIH1cbiAgcmV0dXJu
IHJldFxufVxuXG4vKiAgKi9cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgcmVuZGVyaW5n
IDxzbG90PlxuICovXG5mdW5jdGlvbiByZW5kZXJTbG90IChcbiAgbmFtZSxcbiAgZmFsbGJhY2ss
XG4gIHByb3BzLFxuICBiaW5kT2JqZWN0XG4pIHtcbiAgdmFyIHNjb3BlZFNsb3RGbiA9IHRoaXMu
JHNjb3BlZFNsb3RzW25hbWVdO1xuICBpZiAoc2NvcGVkU2xvdEZuKSB7IC8vIHNjb3BlZCBzbG90
XG4gICAgcHJvcHMgPSBwcm9wcyB8fCB7fTtcbiAgICBpZiAoYmluZE9iamVjdCkge1xuICAgICAg
cHJvcHMgPSBleHRlbmQoZXh0ZW5kKHt9LCBiaW5kT2JqZWN0KSwgcHJvcHMpO1xuICAgIH1cbiAg
ICByZXR1cm4gc2NvcGVkU2xvdEZuKHByb3BzKSB8fCBmYWxsYmFja1xuICB9IGVsc2Uge1xuICAg
IHZhciBzbG90Tm9kZXMgPSB0aGlzLiRzbG90c1tuYW1lXTtcbiAgICAvLyB3YXJuIGR1cGxpY2F0
ZSBzbG90IHVzYWdlXG4gICAgaWYgKHNsb3ROb2RlcyAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAh
PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBzbG90Tm9kZXMuX3JlbmRlcmVkICYmIHdhcm4oXG4g
ICAgICAgIFwiRHVwbGljYXRlIHByZXNlbmNlIG9mIHNsb3QgXFxcIlwiICsgbmFtZSArIFwiXFxc
IiBmb3VuZCBpbiB0aGUgc2FtZSByZW5kZXIgdHJlZSBcIiArXG4gICAgICAgIFwiLSB0aGlzIHdp
bGwgbGlrZWx5IGNhdXNlIHJlbmRlciBlcnJvcnMuXCIsXG4gICAgICAgIHRoaXNcbiAgICAgICk7
XG4gICAgICBzbG90Tm9kZXMuX3JlbmRlcmVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHNs
b3ROb2RlcyB8fCBmYWxsYmFja1xuICB9XG59XG5cbi8qICAqL1xuXG4vKipcbiAqIFJ1bnRpbWUg
aGVscGVyIGZvciByZXNvbHZpbmcgZmlsdGVyc1xuICovXG5mdW5jdGlvbiByZXNvbHZlRmlsdGVy
IChpZCkge1xuICByZXR1cm4gcmVzb2x2ZUFzc2V0KHRoaXMuJG9wdGlvbnMsICdmaWx0ZXJzJywg
aWQsIHRydWUpIHx8IGlkZW50aXR5XG59XG5cbi8qICAqL1xuXG4vKipcbiAqIFJ1bnRpbWUgaGVs
cGVyIGZvciBjaGVja2luZyBrZXlDb2RlcyBmcm9tIGNvbmZpZy5cbiAqL1xuZnVuY3Rpb24gY2hl
Y2tLZXlDb2RlcyAoXG4gIGV2ZW50S2V5Q29kZSxcbiAga2V5LFxuICBidWlsdEluQWxpYXNcbikg
e1xuICB2YXIga2V5Q29kZXMgPSBjb25maWcua2V5Q29kZXNba2V5XSB8fCBidWlsdEluQWxpYXM7
XG4gIGlmIChBcnJheS5pc0FycmF5KGtleUNvZGVzKSkge1xuICAgIHJldHVybiBrZXlDb2Rlcy5p
bmRleE9mKGV2ZW50S2V5Q29kZSkgPT09IC0xXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGtleUNv
ZGVzICE9PSBldmVudEtleUNvZGVcbiAgfVxufVxuXG4vKiAgKi9cblxuLyoqXG4gKiBSdW50aW1l
IGhlbHBlciBmb3IgbWVyZ2luZyB2LWJpbmQ9XCJvYmplY3RcIiBpbnRvIGEgVk5vZGUncyBkYXRh
LlxuICovXG5mdW5jdGlvbiBiaW5kT2JqZWN0UHJvcHMgKFxuICBkYXRhLFxuICB0YWcsXG4gIHZh
bHVlLFxuICBhc1Byb3AsXG4gIGlzU3luY1xuKSB7XG4gIGlmICh2YWx1ZSkge1xuICAgIGlmICgh
aXNPYmplY3QodmFsdWUpKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1
Y3Rpb24nICYmIHdhcm4oXG4gICAgICAgICd2LWJpbmQgd2l0aG91dCBhcmd1bWVudCBleHBlY3Rz
IGFuIE9iamVjdCBvciBBcnJheSB2YWx1ZScsXG4gICAgICAgIHRoaXNcbiAgICAgICk7XG4gICAg
fSBlbHNlIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICB2YWx1
ZSA9IHRvT2JqZWN0KHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHZhciBoYXNoO1xuICAgICAgdmFy
IGxvb3AgPSBmdW5jdGlvbiAoIGtleSApIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGtleSA9
PT0gJ2NsYXNzJyB8fFxuICAgICAgICAgIGtleSA9PT0gJ3N0eWxlJyB8fFxuICAgICAgICAgIGlz
UmVzZXJ2ZWRBdHRyaWJ1dGUoa2V5KVxuICAgICAgICApIHtcbiAgICAgICAgICBoYXNoID0gZGF0
YTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgdHlwZSA9IGRhdGEuYXR0cnMgJiYg
ZGF0YS5hdHRycy50eXBlO1xuICAgICAgICAgIGhhc2ggPSBhc1Byb3AgfHwgY29uZmlnLm11c3RV
c2VQcm9wKHRhZywgdHlwZSwga2V5KVxuICAgICAgICAgICAgPyBkYXRhLmRvbVByb3BzIHx8IChk
YXRhLmRvbVByb3BzID0ge30pXG4gICAgICAgICAgICA6IGRhdGEuYXR0cnMgfHwgKGRhdGEuYXR0
cnMgPSB7fSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEoa2V5IGluIGhhc2gpKSB7XG4gICAg
ICAgICAgaGFzaFtrZXldID0gdmFsdWVba2V5XTtcblxuICAgICAgICAgIGlmIChpc1N5bmMpIHtc
biAgICAgICAgICAgIHZhciBvbiA9IGRhdGEub24gfHwgKGRhdGEub24gPSB7fSk7XG4gICAgICAg
ICAgICBvblsoXCJ1cGRhdGU6XCIgKyBrZXkpXSA9IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAg
ICAgICAgICAgdmFsdWVba2V5XSA9ICRldmVudDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAg
fVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIGxv
b3AoIGtleSApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGF0YVxufVxuXG4vKiAgKi9cblxuLyoq
XG4gKiBSdW50aW1lIGhlbHBlciBmb3IgcmVuZGVyaW5nIHN0YXRpYyB0cmVlcy5cbiAqL1xuZnVu
Y3Rpb24gcmVuZGVyU3RhdGljIChcbiAgaW5kZXgsXG4gIGlzSW5Gb3Jcbikge1xuICB2YXIgdHJl
ZSA9IHRoaXMuX3N0YXRpY1RyZWVzW2luZGV4XTtcbiAgLy8gaWYgaGFzIGFscmVhZHktcmVuZGVy
ZWQgc3RhdGljIHRyZWUgYW5kIG5vdCBpbnNpZGUgdi1mb3IsXG4gIC8vIHdlIGNhbiByZXVzZSB0
aGUgc2FtZSB0cmVlIGJ5IGRvaW5nIGEgc2hhbGxvdyBjbG9uZS5cbiAgaWYgKHRyZWUgJiYgIWlz
SW5Gb3IpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0cmVlKVxuICAgICAgPyBjbG9uZVZO
b2Rlcyh0cmVlKVxuICAgICAgOiBjbG9uZVZOb2RlKHRyZWUpXG4gIH1cbiAgLy8gb3RoZXJ3aXNl
LCByZW5kZXIgYSBmcmVzaCB0cmVlLlxuICB0cmVlID0gdGhpcy5fc3RhdGljVHJlZXNbaW5kZXhd
ID1cbiAgICB0aGlzLiRvcHRpb25zLnN0YXRpY1JlbmRlckZuc1tpbmRleF0uY2FsbCh0aGlzLl9y
ZW5kZXJQcm94eSk7XG4gIG1hcmtTdGF0aWModHJlZSwgKFwiX19zdGF0aWNfX1wiICsgaW5kZXgp
LCBmYWxzZSk7XG4gIHJldHVybiB0cmVlXG59XG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9y
IHYtb25jZS5cbiAqIEVmZmVjdGl2ZWx5IGl0IG1lYW5zIG1hcmtpbmcgdGhlIG5vZGUgYXMgc3Rh
dGljIHdpdGggYSB1bmlxdWUga2V5LlxuICovXG5mdW5jdGlvbiBtYXJrT25jZSAoXG4gIHRyZWUs
XG4gIGluZGV4LFxuICBrZXlcbikge1xuICBtYXJrU3RhdGljKHRyZWUsIChcIl9fb25jZV9fXCIg
KyBpbmRleCArIChrZXkgPyAoXCJfXCIgKyBrZXkpIDogXCJcIikpLCB0cnVlKTtcbiAgcmV0dXJu
IHRyZWVcbn1cblxuZnVuY3Rpb24gbWFya1N0YXRpYyAoXG4gIHRyZWUsXG4gIGtleSxcbiAgaXNP
bmNlXG4pIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodHJlZSkpIHtcbiAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHRyZWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0cmVlW2ldICYmIHR5cGVvZiB0
cmVlW2ldICE9PSAnc3RyaW5nJykge1xuICAgICAgICBtYXJrU3RhdGljTm9kZSh0cmVlW2ldLCAo
a2V5ICsgXCJfXCIgKyBpKSwgaXNPbmNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4g
ICAgbWFya1N0YXRpY05vZGUodHJlZSwga2V5LCBpc09uY2UpO1xuICB9XG59XG5cbmZ1bmN0aW9u
IG1hcmtTdGF0aWNOb2RlIChub2RlLCBrZXksIGlzT25jZSkge1xuICBub2RlLmlzU3RhdGljID0g
dHJ1ZTtcbiAgbm9kZS5rZXkgPSBrZXk7XG4gIG5vZGUuaXNPbmNlID0gaXNPbmNlO1xufVxuXG4v
KiAgKi9cblxuZnVuY3Rpb24gYmluZE9iamVjdExpc3RlbmVycyAoZGF0YSwgdmFsdWUpIHtcbiAg
aWYgKHZhbHVlKSB7XG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgICAgcHJv
Y2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICAndi1v
biB3aXRob3V0IGFyZ3VtZW50IGV4cGVjdHMgYW4gT2JqZWN0IHZhbHVlJyxcbiAgICAgICAgdGhp
c1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG9uID0gZGF0YS5vbiA9IGRhdGEu
b24gPyBleHRlbmQoe30sIGRhdGEub24pIDoge307XG4gICAgICBmb3IgKHZhciBrZXkgaW4gdmFs
dWUpIHtcbiAgICAgICAgdmFyIGV4aXN0aW5nID0gb25ba2V5XTtcbiAgICAgICAgdmFyIG91cnMg
PSB2YWx1ZVtrZXldO1xuICAgICAgICBvbltrZXldID0gZXhpc3RpbmcgPyBbXS5jb25jYXQob3Vy
cywgZXhpc3RpbmcpIDogb3VycztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRhdGFc
bn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGluaXRSZW5kZXIgKHZtKSB7XG4gIHZtLl92bm9kZSA9
IG51bGw7IC8vIHRoZSByb290IG9mIHRoZSBjaGlsZCB0cmVlXG4gIHZtLl9zdGF0aWNUcmVlcyA9
IG51bGw7XG4gIHZhciBwYXJlbnRWbm9kZSA9IHZtLiR2bm9kZSA9IHZtLiRvcHRpb25zLl9wYXJl
bnRWbm9kZTsgLy8gdGhlIHBsYWNlaG9sZGVyIG5vZGUgaW4gcGFyZW50IHRyZWVcbiAgdmFyIHJl
bmRlckNvbnRleHQgPSBwYXJlbnRWbm9kZSAmJiBwYXJlbnRWbm9kZS5jb250ZXh0O1xuICB2bS4k
c2xvdHMgPSByZXNvbHZlU2xvdHModm0uJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuLCByZW5kZXJD
b250ZXh0KTtcbiAgdm0uJHNjb3BlZFNsb3RzID0gZW1wdHlPYmplY3Q7XG4gIC8vIGJpbmQgdGhl
IGNyZWF0ZUVsZW1lbnQgZm4gdG8gdGhpcyBpbnN0YW5jZVxuICAvLyBzbyB0aGF0IHdlIGdldCBw
cm9wZXIgcmVuZGVyIGNvbnRleHQgaW5zaWRlIGl0LlxuICAvLyBhcmdzIG9yZGVyOiB0YWcsIGRh
dGEsIGNoaWxkcmVuLCBub3JtYWxpemF0aW9uVHlwZSwgYWx3YXlzTm9ybWFsaXplXG4gIC8vIGlu
dGVybmFsIHZlcnNpb24gaXMgdXNlZCBieSByZW5kZXIgZnVuY3Rpb25zIGNvbXBpbGVkIGZyb20g
dGVtcGxhdGVzXG4gIHZtLl9jID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHsgcmV0dXJuIGNyZWF0
ZUVsZW1lbnQodm0sIGEsIGIsIGMsIGQsIGZhbHNlKTsgfTtcbiAgLy8gbm9ybWFsaXphdGlvbiBp
cyBhbHdheXMgYXBwbGllZCBmb3IgdGhlIHB1YmxpYyB2ZXJzaW9uLCB1c2VkIGluXG4gIC8vIHVz
ZXItd3JpdHRlbiByZW5kZXIgZnVuY3Rpb25zLlxuICB2bS4kY3JlYXRlRWxlbWVudCA9IGZ1bmN0
aW9uIChhLCBiLCBjLCBkKSB7IHJldHVybiBjcmVhdGVFbGVtZW50KHZtLCBhLCBiLCBjLCBkLCB0
cnVlKTsgfTtcblxuICAvLyAkYXR0cnMgJiAkbGlzdGVuZXJzIGFyZSBleHBvc2VkIGZvciBlYXNp
ZXIgSE9DIGNyZWF0aW9uLlxuICAvLyB0aGV5IG5lZWQgdG8gYmUgcmVhY3RpdmUgc28gdGhhdCBI
T0NzIHVzaW5nIHRoZW0gYXJlIGFsd2F5cyB1cGRhdGVkXG4gIHZhciBwYXJlbnREYXRhID0gcGFy
ZW50Vm5vZGUgJiYgcGFyZW50Vm5vZGUuZGF0YTtcbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2Ug
Ki9cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBk
ZWZpbmVSZWFjdGl2ZSQkMSh2bSwgJyRhdHRycycsIHBhcmVudERhdGEgJiYgcGFyZW50RGF0YS5h
dHRycywgZnVuY3Rpb24gKCkge1xuICAgICAgIWlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCAmJiB3
YXJuKFwiJGF0dHJzIGlzIHJlYWRvbmx5LlwiLCB2bSk7XG4gICAgfSwgdHJ1ZSk7XG4gICAgZGVm
aW5lUmVhY3RpdmUkJDEodm0sICckbGlzdGVuZXJzJywgdm0uJG9wdGlvbnMuX3BhcmVudExpc3Rl
bmVycywgZnVuY3Rpb24gKCkge1xuICAgICAgIWlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCAmJiB3
YXJuKFwiJGxpc3RlbmVycyBpcyByZWFkb25seS5cIiwgdm0pO1xuICAgIH0sIHRydWUpO1xuICB9
IGVsc2Uge1xuICAgIGRlZmluZVJlYWN0aXZlJCQxKHZtLCAnJGF0dHJzJywgcGFyZW50RGF0YSAm
JiBwYXJlbnREYXRhLmF0dHJzLCBudWxsLCB0cnVlKTtcbiAgICBkZWZpbmVSZWFjdGl2ZSQkMSh2
bSwgJyRsaXN0ZW5lcnMnLCB2bS4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzLCBudWxsLCB0cnVl
KTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW5kZXJNaXhpbiAoVnVlKSB7XG4gIFZ1ZS5wcm90b3R5
cGUuJG5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgcmV0dXJuIG5leHRUaWNrKGZuLCB0
aGlzKVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuX3JlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAg
ICB2YXIgdm0gPSB0aGlzO1xuICAgIHZhciByZWYgPSB2bS4kb3B0aW9ucztcbiAgICB2YXIgcmVu
ZGVyID0gcmVmLnJlbmRlcjtcbiAgICB2YXIgc3RhdGljUmVuZGVyRm5zID0gcmVmLnN0YXRpY1Jl
bmRlckZucztcbiAgICB2YXIgX3BhcmVudFZub2RlID0gcmVmLl9wYXJlbnRWbm9kZTtcblxuICAg
IGlmICh2bS5faXNNb3VudGVkKSB7XG4gICAgICAvLyBjbG9uZSBzbG90IG5vZGVzIG9uIHJlLXJl
bmRlcnNcbiAgICAgIGZvciAodmFyIGtleSBpbiB2bS4kc2xvdHMpIHtcbiAgICAgICAgdm0uJHNs
b3RzW2tleV0gPSBjbG9uZVZOb2Rlcyh2bS4kc2xvdHNba2V5XSk7XG4gICAgICB9XG4gICAgfVxu
XG4gICAgdm0uJHNjb3BlZFNsb3RzID0gKF9wYXJlbnRWbm9kZSAmJiBfcGFyZW50Vm5vZGUuZGF0
YS5zY29wZWRTbG90cykgfHwgZW1wdHlPYmplY3Q7XG5cbiAgICBpZiAoc3RhdGljUmVuZGVyRm5z
ICYmICF2bS5fc3RhdGljVHJlZXMpIHtcbiAgICAgIHZtLl9zdGF0aWNUcmVlcyA9IFtdO1xuICAg
IH1cbiAgICAvLyBzZXQgcGFyZW50IHZub2RlLiB0aGlzIGFsbG93cyByZW5kZXIgZnVuY3Rpb25z
IHRvIGhhdmUgYWNjZXNzXG4gICAgLy8gdG8gdGhlIGRhdGEgb24gdGhlIHBsYWNlaG9sZGVyIG5v
ZGUuXG4gICAgdm0uJHZub2RlID0gX3BhcmVudFZub2RlO1xuICAgIC8vIHJlbmRlciBzZWxmXG4g
ICAgdmFyIHZub2RlO1xuICAgIHRyeSB7XG4gICAgICB2bm9kZSA9IHJlbmRlci5jYWxsKHZtLl9y
ZW5kZXJQcm94eSwgdm0uJGNyZWF0ZUVsZW1lbnQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAg
IGhhbmRsZUVycm9yKGUsIHZtLCBcInJlbmRlciBmdW5jdGlvblwiKTtcbiAgICAgIC8vIHJldHVy
biBlcnJvciByZW5kZXIgcmVzdWx0LFxuICAgICAgLy8gb3IgcHJldmlvdXMgdm5vZGUgdG8gcHJl
dmVudCByZW5kZXIgZXJyb3IgY2F1c2luZyBibGFuayBjb21wb25lbnRcbiAgICAgIC8qIGlzdGFu
YnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdw
cm9kdWN0aW9uJykge1xuICAgICAgICB2bm9kZSA9IHZtLiRvcHRpb25zLnJlbmRlckVycm9yXG4g
ICAgICAgICAgPyB2bS4kb3B0aW9ucy5yZW5kZXJFcnJvci5jYWxsKHZtLl9yZW5kZXJQcm94eSwg
dm0uJGNyZWF0ZUVsZW1lbnQsIGUpXG4gICAgICAgICAgOiB2bS5fdm5vZGU7XG4gICAgICB9IGVs
c2Uge1xuICAgICAgICB2bm9kZSA9IHZtLl92bm9kZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8g
cmV0dXJuIGVtcHR5IHZub2RlIGluIGNhc2UgdGhlIHJlbmRlciBmdW5jdGlvbiBlcnJvcmVkIG91
dFxuICAgIGlmICghKHZub2RlIGluc3RhbmNlb2YgVk5vZGUpKSB7XG4gICAgICBpZiAocHJvY2Vz
cy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBBcnJheS5pc0FycmF5KHZub2RlKSkg
e1xuICAgICAgICB3YXJuKFxuICAgICAgICAgICdNdWx0aXBsZSByb290IG5vZGVzIHJldHVybmVk
IGZyb20gcmVuZGVyIGZ1bmN0aW9uLiBSZW5kZXIgZnVuY3Rpb24gJyArXG4gICAgICAgICAgJ3No
b3VsZCByZXR1cm4gYSBzaW5nbGUgcm9vdCBub2RlLicsXG4gICAgICAgICAgdm1cbiAgICAgICAg
KTtcbiAgICAgIH1cbiAgICAgIHZub2RlID0gY3JlYXRlRW1wdHlWTm9kZSgpO1xuICAgIH1cbiAg
ICAvLyBzZXQgcGFyZW50XG4gICAgdm5vZGUucGFyZW50ID0gX3BhcmVudFZub2RlO1xuICAgIHJl
dHVybiB2bm9kZVxuICB9O1xuXG4gIC8vIGludGVybmFsIHJlbmRlciBoZWxwZXJzLlxuICAvLyB0
aGVzZSBhcmUgZXhwb3NlZCBvbiB0aGUgaW5zdGFuY2UgcHJvdG90eXBlIHRvIHJlZHVjZSBnZW5l
cmF0ZWQgcmVuZGVyXG4gIC8vIGNvZGUgc2l6ZS5cbiAgVnVlLnByb3RvdHlwZS5fbyA9IG1hcmtP
bmNlO1xuICBWdWUucHJvdG90eXBlLl9uID0gdG9OdW1iZXI7XG4gIFZ1ZS5wcm90b3R5cGUuX3Mg
PSB0b1N0cmluZztcbiAgVnVlLnByb3RvdHlwZS5fbCA9IHJlbmRlckxpc3Q7XG4gIFZ1ZS5wcm90
b3R5cGUuX3QgPSByZW5kZXJTbG90O1xuICBWdWUucHJvdG90eXBlLl9xID0gbG9vc2VFcXVhbDtc
biAgVnVlLnByb3RvdHlwZS5faSA9IGxvb3NlSW5kZXhPZjtcbiAgVnVlLnByb3RvdHlwZS5fbSA9
IHJlbmRlclN0YXRpYztcbiAgVnVlLnByb3RvdHlwZS5fZiA9IHJlc29sdmVGaWx0ZXI7XG4gIFZ1
ZS5wcm90b3R5cGUuX2sgPSBjaGVja0tleUNvZGVzO1xuICBWdWUucHJvdG90eXBlLl9iID0gYmlu
ZE9iamVjdFByb3BzO1xuICBWdWUucHJvdG90eXBlLl92ID0gY3JlYXRlVGV4dFZOb2RlO1xuICBW
dWUucHJvdG90eXBlLl9lID0gY3JlYXRlRW1wdHlWTm9kZTtcbiAgVnVlLnByb3RvdHlwZS5fdSA9
IHJlc29sdmVTY29wZWRTbG90cztcbiAgVnVlLnByb3RvdHlwZS5fZyA9IGJpbmRPYmplY3RMaXN0
ZW5lcnM7XG59XG5cbi8qICAqL1xuXG52YXIgdWlkJDEgPSAwO1xuXG5mdW5jdGlvbiBpbml0TWl4
aW4gKFZ1ZSkge1xuICBWdWUucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtc
biAgICB2YXIgdm0gPSB0aGlzO1xuICAgIC8vIGEgdWlkXG4gICAgdm0uX3VpZCA9IHVpZCQxKys7
XG5cbiAgICB2YXIgc3RhcnRUYWcsIGVuZFRhZztcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYg
Ki9cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBjb25m
aWcucGVyZm9ybWFuY2UgJiYgbWFyaykge1xuICAgICAgc3RhcnRUYWcgPSBcInZ1ZS1wZXJmLWlu
aXQ6XCIgKyAodm0uX3VpZCk7XG4gICAgICBlbmRUYWcgPSBcInZ1ZS1wZXJmLWVuZDpcIiArICh2
bS5fdWlkKTtcbiAgICAgIG1hcmsoc3RhcnRUYWcpO1xuICAgIH1cblxuICAgIC8vIGEgZmxhZyB0
byBhdm9pZCB0aGlzIGJlaW5nIG9ic2VydmVkXG4gICAgdm0uX2lzVnVlID0gdHJ1ZTtcbiAgICAv
LyBtZXJnZSBvcHRpb25zXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5faXNDb21wb25lbnQp
IHtcbiAgICAgIC8vIG9wdGltaXplIGludGVybmFsIGNvbXBvbmVudCBpbnN0YW50aWF0aW9uXG4g
ICAgICAvLyBzaW5jZSBkeW5hbWljIG9wdGlvbnMgbWVyZ2luZyBpcyBwcmV0dHkgc2xvdywgYW5k
IG5vbmUgb2YgdGhlXG4gICAgICAvLyBpbnRlcm5hbCBjb21wb25lbnQgb3B0aW9ucyBuZWVkcyBz
cGVjaWFsIHRyZWF0bWVudC5cbiAgICAgIGluaXRJbnRlcm5hbENvbXBvbmVudCh2bSwgb3B0aW9u
cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZtLiRvcHRpb25zID0gbWVyZ2VPcHRpb25zKFxuICAg
ICAgICByZXNvbHZlQ29uc3RydWN0b3JPcHRpb25zKHZtLmNvbnN0cnVjdG9yKSxcbiAgICAgICAg
b3B0aW9ucyB8fCB7fSxcbiAgICAgICAgdm1cbiAgICAgICk7XG4gICAgfVxuICAgIC8qIGlzdGFu
YnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJv
ZHVjdGlvbicpIHtcbiAgICAgIGluaXRQcm94eSh2bSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZt
Ll9yZW5kZXJQcm94eSA9IHZtO1xuICAgIH1cbiAgICAvLyBleHBvc2UgcmVhbCBzZWxmXG4gICAg
dm0uX3NlbGYgPSB2bTtcbiAgICBpbml0TGlmZWN5Y2xlKHZtKTtcbiAgICBpbml0RXZlbnRzKHZt
KTtcbiAgICBpbml0UmVuZGVyKHZtKTtcbiAgICBjYWxsSG9vayh2bSwgJ2JlZm9yZUNyZWF0ZScp
O1xuICAgIGluaXRJbmplY3Rpb25zKHZtKTsgLy8gcmVzb2x2ZSBpbmplY3Rpb25zIGJlZm9yZSBk
YXRhL3Byb3BzXG4gICAgaW5pdFN0YXRlKHZtKTtcbiAgICBpbml0UHJvdmlkZSh2bSk7IC8vIHJl
c29sdmUgcHJvdmlkZSBhZnRlciBkYXRhL3Byb3BzXG4gICAgY2FsbEhvb2sodm0sICdjcmVhdGVk
Jyk7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAocHJvY2Vzcy5lbnYu
Tk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBjb25maWcucGVyZm9ybWFuY2UgJiYgbWFyaykg
e1xuICAgICAgdm0uX25hbWUgPSBmb3JtYXRDb21wb25lbnROYW1lKHZtLCBmYWxzZSk7XG4gICAg
ICBtYXJrKGVuZFRhZyk7XG4gICAgICBtZWFzdXJlKCgodm0uX25hbWUpICsgXCIgaW5pdFwiKSwg
c3RhcnRUYWcsIGVuZFRhZyk7XG4gICAgfVxuXG4gICAgaWYgKHZtLiRvcHRpb25zLmVsKSB7XG4g
ICAgICB2bS4kbW91bnQodm0uJG9wdGlvbnMuZWwpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rp
b24gaW5pdEludGVybmFsQ29tcG9uZW50ICh2bSwgb3B0aW9ucykge1xuICB2YXIgb3B0cyA9IHZt
LiRvcHRpb25zID0gT2JqZWN0LmNyZWF0ZSh2bS5jb25zdHJ1Y3Rvci5vcHRpb25zKTtcbiAgLy8g
ZG9pbmcgdGhpcyBiZWNhdXNlIGl0J3MgZmFzdGVyIHRoYW4gZHluYW1pYyBlbnVtZXJhdGlvbi5c
biAgb3B0cy5wYXJlbnQgPSBvcHRpb25zLnBhcmVudDtcbiAgb3B0cy5wcm9wc0RhdGEgPSBvcHRp
b25zLnByb3BzRGF0YTtcbiAgb3B0cy5fcGFyZW50Vm5vZGUgPSBvcHRpb25zLl9wYXJlbnRWbm9k
ZTtcbiAgb3B0cy5fcGFyZW50TGlzdGVuZXJzID0gb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzO1xu
ICBvcHRzLl9yZW5kZXJDaGlsZHJlbiA9IG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuO1xuICBvcHRz
Ll9jb21wb25lbnRUYWcgPSBvcHRpb25zLl9jb21wb25lbnRUYWc7XG4gIG9wdHMuX3BhcmVudEVs
bSA9IG9wdGlvbnMuX3BhcmVudEVsbTtcbiAgb3B0cy5fcmVmRWxtID0gb3B0aW9ucy5fcmVmRWxt
O1xuICBpZiAob3B0aW9ucy5yZW5kZXIpIHtcbiAgICBvcHRzLnJlbmRlciA9IG9wdGlvbnMucmVu
ZGVyO1xuICAgIG9wdHMuc3RhdGljUmVuZGVyRm5zID0gb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnM7
XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUNvbnN0cnVjdG9yT3B0aW9ucyAoQ3Rvcikge1xu
ICB2YXIgb3B0aW9ucyA9IEN0b3Iub3B0aW9ucztcbiAgaWYgKEN0b3Iuc3VwZXIpIHtcbiAgICB2
YXIgc3VwZXJPcHRpb25zID0gcmVzb2x2ZUNvbnN0cnVjdG9yT3B0aW9ucyhDdG9yLnN1cGVyKTtc
biAgICB2YXIgY2FjaGVkU3VwZXJPcHRpb25zID0gQ3Rvci5zdXBlck9wdGlvbnM7XG4gICAgaWYg
KHN1cGVyT3B0aW9ucyAhPT0gY2FjaGVkU3VwZXJPcHRpb25zKSB7XG4gICAgICAvLyBzdXBlciBv
cHRpb24gY2hhbmdlZCxcbiAgICAgIC8vIG5lZWQgdG8gcmVzb2x2ZSBuZXcgb3B0aW9ucy5cbiAg
ICAgIEN0b3Iuc3VwZXJPcHRpb25zID0gc3VwZXJPcHRpb25zO1xuICAgICAgLy8gY2hlY2sgaWYg
dGhlcmUgYXJlIGFueSBsYXRlLW1vZGlmaWVkL2F0dGFjaGVkIG9wdGlvbnMgKCM0OTc2KVxuICAg
ICAgdmFyIG1vZGlmaWVkT3B0aW9ucyA9IHJlc29sdmVNb2RpZmllZE9wdGlvbnMoQ3Rvcik7XG4g
ICAgICAvLyB1cGRhdGUgYmFzZSBleHRlbmQgb3B0aW9uc1xuICAgICAgaWYgKG1vZGlmaWVkT3B0
aW9ucykge1xuICAgICAgICBleHRlbmQoQ3Rvci5leHRlbmRPcHRpb25zLCBtb2RpZmllZE9wdGlv
bnMpO1xuICAgICAgfVxuICAgICAgb3B0aW9ucyA9IEN0b3Iub3B0aW9ucyA9IG1lcmdlT3B0aW9u
cyhzdXBlck9wdGlvbnMsIEN0b3IuZXh0ZW5kT3B0aW9ucyk7XG4gICAgICBpZiAob3B0aW9ucy5u
YW1lKSB7XG4gICAgICAgIG9wdGlvbnMuY29tcG9uZW50c1tvcHRpb25zLm5hbWVdID0gQ3Rvcjtc
biAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnNcbn1cblxuZnVuY3Rpb24gcmVz
b2x2ZU1vZGlmaWVkT3B0aW9ucyAoQ3Rvcikge1xuICB2YXIgbW9kaWZpZWQ7XG4gIHZhciBsYXRl
c3QgPSBDdG9yLm9wdGlvbnM7XG4gIHZhciBleHRlbmRlZCA9IEN0b3IuZXh0ZW5kT3B0aW9ucztc
biAgdmFyIHNlYWxlZCA9IEN0b3Iuc2VhbGVkT3B0aW9ucztcbiAgZm9yICh2YXIga2V5IGluIGxh
dGVzdCkge1xuICAgIGlmIChsYXRlc3Rba2V5XSAhPT0gc2VhbGVkW2tleV0pIHtcbiAgICAgIGlm
ICghbW9kaWZpZWQpIHsgbW9kaWZpZWQgPSB7fTsgfVxuICAgICAgbW9kaWZpZWRba2V5XSA9IGRl
ZHVwZShsYXRlc3Rba2V5XSwgZXh0ZW5kZWRba2V5XSwgc2VhbGVkW2tleV0pO1xuICAgIH1cbiAg
fVxuICByZXR1cm4gbW9kaWZpZWRcbn1cblxuZnVuY3Rpb24gZGVkdXBlIChsYXRlc3QsIGV4dGVu
ZGVkLCBzZWFsZWQpIHtcbiAgLy8gY29tcGFyZSBsYXRlc3QgYW5kIHNlYWxlZCB0byBlbnN1cmUg
bGlmZWN5Y2xlIGhvb2tzIHdvbid0IGJlIGR1cGxpY2F0ZWRcbiAgLy8gYmV0d2VlbiBtZXJnZXNc
biAgaWYgKEFycmF5LmlzQXJyYXkobGF0ZXN0KSkge1xuICAgIHZhciByZXMgPSBbXTtcbiAgICBz
ZWFsZWQgPSBBcnJheS5pc0FycmF5KHNlYWxlZCkgPyBzZWFsZWQgOiBbc2VhbGVkXTtcbiAgICBl
eHRlbmRlZCA9IEFycmF5LmlzQXJyYXkoZXh0ZW5kZWQpID8gZXh0ZW5kZWQgOiBbZXh0ZW5kZWRd
O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGF0ZXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAv
LyBwdXNoIG9yaWdpbmFsIG9wdGlvbnMgYW5kIG5vdCBzZWFsZWQgb3B0aW9ucyB0byBleGNsdWRl
IGR1cGxpY2F0ZWQgb3B0aW9uc1xuICAgICAgaWYgKGV4dGVuZGVkLmluZGV4T2YobGF0ZXN0W2ld
KSA+PSAwIHx8IHNlYWxlZC5pbmRleE9mKGxhdGVzdFtpXSkgPCAwKSB7XG4gICAgICAgIHJlcy5w
dXNoKGxhdGVzdFtpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXNcbiAgfSBlbHNl
IHtcbiAgICByZXR1cm4gbGF0ZXN0XG4gIH1cbn1cblxuZnVuY3Rpb24gVnVlJDMgKG9wdGlvbnMp
IHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAh
KHRoaXMgaW5zdGFuY2VvZiBWdWUkMylcbiAgKSB7XG4gICAgd2FybignVnVlIGlzIGEgY29uc3Ry
dWN0b3IgYW5kIHNob3VsZCBiZSBjYWxsZWQgd2l0aCB0aGUgYG5ld2Aga2V5d29yZCcpO1xuICB9
XG4gIHRoaXMuX2luaXQob3B0aW9ucyk7XG59XG5cbmluaXRNaXhpbihWdWUkMyk7XG5zdGF0ZU1p
eGluKFZ1ZSQzKTtcbmV2ZW50c01peGluKFZ1ZSQzKTtcbmxpZmVjeWNsZU1peGluKFZ1ZSQzKTtc
bnJlbmRlck1peGluKFZ1ZSQzKTtcblxuLyogICovXG5cbmZ1bmN0aW9uIGluaXRVc2UgKFZ1ZSkg
e1xuICBWdWUudXNlID0gZnVuY3Rpb24gKHBsdWdpbikge1xuICAgIHZhciBpbnN0YWxsZWRQbHVn
aW5zID0gKHRoaXMuX2luc3RhbGxlZFBsdWdpbnMgfHwgKHRoaXMuX2luc3RhbGxlZFBsdWdpbnMg
PSBbXSkpO1xuICAgIGlmIChpbnN0YWxsZWRQbHVnaW5zLmluZGV4T2YocGx1Z2luKSA+IC0xKSB7
XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIC8vIGFkZGl0aW9uYWwgcGFyYW1ldGVy
c1xuICAgIHZhciBhcmdzID0gdG9BcnJheShhcmd1bWVudHMsIDEpO1xuICAgIGFyZ3MudW5zaGlm
dCh0aGlzKTtcbiAgICBpZiAodHlwZW9mIHBsdWdpbi5pbnN0YWxsID09PSAnZnVuY3Rpb24nKSB7
XG4gICAgICBwbHVnaW4uaW5zdGFsbC5hcHBseShwbHVnaW4sIGFyZ3MpO1xuICAgIH0gZWxzZSBp
ZiAodHlwZW9mIHBsdWdpbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcGx1Z2luLmFwcGx5KG51
bGwsIGFyZ3MpO1xuICAgIH1cbiAgICBpbnN0YWxsZWRQbHVnaW5zLnB1c2gocGx1Z2luKTtcbiAg
ICByZXR1cm4gdGhpc1xuICB9O1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdE1peGluJDEg
KFZ1ZSkge1xuICBWdWUubWl4aW4gPSBmdW5jdGlvbiAobWl4aW4pIHtcbiAgICB0aGlzLm9wdGlv
bnMgPSBtZXJnZU9wdGlvbnModGhpcy5vcHRpb25zLCBtaXhpbik7XG4gICAgcmV0dXJuIHRoaXNc
biAgfTtcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGluaXRFeHRlbmQgKFZ1ZSkge1xuICAvKipc
biAgICogRWFjaCBpbnN0YW5jZSBjb25zdHJ1Y3RvciwgaW5jbHVkaW5nIFZ1ZSwgaGFzIGEgdW5p
cXVlXG4gICAqIGNpZC4gVGhpcyBlbmFibGVzIHVzIHRvIGNyZWF0ZSB3cmFwcGVkIFwiY2hpbGRc
biAgICogY29uc3RydWN0b3JzXCIgZm9yIHByb3RvdHlwYWwgaW5oZXJpdGFuY2UgYW5kIGNhY2hl
IHRoZW0uXG4gICAqL1xuICBWdWUuY2lkID0gMDtcbiAgdmFyIGNpZCA9IDE7XG5cbiAgLyoqXG4g
ICAqIENsYXNzIGluaGVyaXRhbmNlXG4gICAqL1xuICBWdWUuZXh0ZW5kID0gZnVuY3Rpb24gKGV4
dGVuZE9wdGlvbnMpIHtcbiAgICBleHRlbmRPcHRpb25zID0gZXh0ZW5kT3B0aW9ucyB8fCB7fTtc
biAgICB2YXIgU3VwZXIgPSB0aGlzO1xuICAgIHZhciBTdXBlcklkID0gU3VwZXIuY2lkO1xuICAg
IHZhciBjYWNoZWRDdG9ycyA9IGV4dGVuZE9wdGlvbnMuX0N0b3IgfHwgKGV4dGVuZE9wdGlvbnMu
X0N0b3IgPSB7fSk7XG4gICAgaWYgKGNhY2hlZEN0b3JzW1N1cGVySWRdKSB7XG4gICAgICByZXR1
cm4gY2FjaGVkQ3RvcnNbU3VwZXJJZF1cbiAgICB9XG5cbiAgICB2YXIgbmFtZSA9IGV4dGVuZE9w
dGlvbnMubmFtZSB8fCBTdXBlci5vcHRpb25zLm5hbWU7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5P
REVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICghL15bYS16QS1aXVtcXHctXSok
Ly50ZXN0KG5hbWUpKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ0ludmFsaWQgY29tcG9u
ZW50IG5hbWU6IFwiJyArIG5hbWUgKyAnXCIuIENvbXBvbmVudCBuYW1lcyAnICtcbiAgICAgICAg
ICAnY2FuIG9ubHkgY29udGFpbiBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgdGhlIGh5cGhl
biwgJyArXG4gICAgICAgICAgJ2FuZCBtdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIuJ1xuICAgICAg
ICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBTdWIgPSBmdW5jdGlvbiBWdWVDb21wb25l
bnQgKG9wdGlvbnMpIHtcbiAgICAgIHRoaXMuX2luaXQob3B0aW9ucyk7XG4gICAgfTtcbiAgICBT
dWIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTdXBlci5wcm90b3R5cGUpO1xuICAgIFN1Yi5w
cm90b3R5cGUuY29uc3RydWN0b3IgPSBTdWI7XG4gICAgU3ViLmNpZCA9IGNpZCsrO1xuICAgIFN1
Yi5vcHRpb25zID0gbWVyZ2VPcHRpb25zKFxuICAgICAgU3VwZXIub3B0aW9ucyxcbiAgICAgIGV4
dGVuZE9wdGlvbnNcbiAgICApO1xuICAgIFN1Ylsnc3VwZXInXSA9IFN1cGVyO1xuXG4gICAgLy8g
Rm9yIHByb3BzIGFuZCBjb21wdXRlZCBwcm9wZXJ0aWVzLCB3ZSBkZWZpbmUgdGhlIHByb3h5IGdl
dHRlcnMgb25cbiAgICAvLyB0aGUgVnVlIGluc3RhbmNlcyBhdCBleHRlbnNpb24gdGltZSwgb24g
dGhlIGV4dGVuZGVkIHByb3RvdHlwZS4gVGhpc1xuICAgIC8vIGF2b2lkcyBPYmplY3QuZGVmaW5l
UHJvcGVydHkgY2FsbHMgZm9yIGVhY2ggaW5zdGFuY2UgY3JlYXRlZC5cbiAgICBpZiAoU3ViLm9w
dGlvbnMucHJvcHMpIHtcbiAgICAgIGluaXRQcm9wcyQxKFN1Yik7XG4gICAgfVxuICAgIGlmIChT
dWIub3B0aW9ucy5jb21wdXRlZCkge1xuICAgICAgaW5pdENvbXB1dGVkJDEoU3ViKTtcbiAgICB9
XG5cbiAgICAvLyBhbGxvdyBmdXJ0aGVyIGV4dGVuc2lvbi9taXhpbi9wbHVnaW4gdXNhZ2VcbiAg
ICBTdWIuZXh0ZW5kID0gU3VwZXIuZXh0ZW5kO1xuICAgIFN1Yi5taXhpbiA9IFN1cGVyLm1peGlu
O1xuICAgIFN1Yi51c2UgPSBTdXBlci51c2U7XG5cbiAgICAvLyBjcmVhdGUgYXNzZXQgcmVnaXN0
ZXJzLCBzbyBleHRlbmRlZCBjbGFzc2VzXG4gICAgLy8gY2FuIGhhdmUgdGhlaXIgcHJpdmF0ZSBh
c3NldHMgdG9vLlxuICAgIEFTU0VUX1RZUEVTLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAg
ICAgIFN1Ylt0eXBlXSA9IFN1cGVyW3R5cGVdO1xuICAgIH0pO1xuICAgIC8vIGVuYWJsZSByZWN1
cnNpdmUgc2VsZi1sb29rdXBcbiAgICBpZiAobmFtZSkge1xuICAgICAgU3ViLm9wdGlvbnMuY29t
cG9uZW50c1tuYW1lXSA9IFN1YjtcbiAgICB9XG5cbiAgICAvLyBrZWVwIGEgcmVmZXJlbmNlIHRv
IHRoZSBzdXBlciBvcHRpb25zIGF0IGV4dGVuc2lvbiB0aW1lLlxuICAgIC8vIGxhdGVyIGF0IGlu
c3RhbnRpYXRpb24gd2UgY2FuIGNoZWNrIGlmIFN1cGVyJ3Mgb3B0aW9ucyBoYXZlXG4gICAgLy8g
YmVlbiB1cGRhdGVkLlxuICAgIFN1Yi5zdXBlck9wdGlvbnMgPSBTdXBlci5vcHRpb25zO1xuICAg
IFN1Yi5leHRlbmRPcHRpb25zID0gZXh0ZW5kT3B0aW9ucztcbiAgICBTdWIuc2VhbGVkT3B0aW9u
cyA9IGV4dGVuZCh7fSwgU3ViLm9wdGlvbnMpO1xuXG4gICAgLy8gY2FjaGUgY29uc3RydWN0b3Jc
biAgICBjYWNoZWRDdG9yc1tTdXBlcklkXSA9IFN1YjtcbiAgICByZXR1cm4gU3ViXG4gIH07XG59
XG5cbmZ1bmN0aW9uIGluaXRQcm9wcyQxIChDb21wKSB7XG4gIHZhciBwcm9wcyA9IENvbXAub3B0
aW9ucy5wcm9wcztcbiAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgcHJveHkoQ29tcC5w
cm90b3R5cGUsIFwiX3Byb3BzXCIsIGtleSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdENvbXB1
dGVkJDEgKENvbXApIHtcbiAgdmFyIGNvbXB1dGVkID0gQ29tcC5vcHRpb25zLmNvbXB1dGVkO1xu
ICBmb3IgKHZhciBrZXkgaW4gY29tcHV0ZWQpIHtcbiAgICBkZWZpbmVDb21wdXRlZChDb21wLnBy
b3RvdHlwZSwga2V5LCBjb21wdXRlZFtrZXldKTtcbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rp
b24gaW5pdEFzc2V0UmVnaXN0ZXJzIChWdWUpIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhc3NldCBy
ZWdpc3RyYXRpb24gbWV0aG9kcy5cbiAgICovXG4gIEFTU0VUX1RZUEVTLmZvckVhY2goZnVuY3Rp
b24gKHR5cGUpIHtcbiAgICBWdWVbdHlwZV0gPSBmdW5jdGlvbiAoXG4gICAgICBpZCxcbiAgICAg
IGRlZmluaXRpb25cbiAgICApIHtcbiAgICAgIGlmICghZGVmaW5pdGlvbikge1xuICAgICAgICBy
ZXR1cm4gdGhpcy5vcHRpb25zW3R5cGUgKyAncyddW2lkXVxuICAgICAgfSBlbHNlIHtcbiAgICAg
ICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RF
X0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgaWYgKHR5cGUgPT09ICdjb21wb25l
bnQnICYmIGNvbmZpZy5pc1Jlc2VydmVkVGFnKGlkKSkge1xuICAgICAgICAgICAgd2FybihcbiAg
ICAgICAgICAgICAgJ0RvIG5vdCB1c2UgYnVpbHQtaW4gb3IgcmVzZXJ2ZWQgSFRNTCBlbGVtZW50
cyBhcyBjb21wb25lbnQgJyArXG4gICAgICAgICAgICAgICdpZDogJyArIGlkXG4gICAgICAgICAg
ICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZSA9PT0gJ2NvbXBv
bmVudCcgJiYgaXNQbGFpbk9iamVjdChkZWZpbml0aW9uKSkge1xuICAgICAgICAgIGRlZmluaXRp
b24ubmFtZSA9IGRlZmluaXRpb24ubmFtZSB8fCBpZDtcbiAgICAgICAgICBkZWZpbml0aW9uID0g
dGhpcy5vcHRpb25zLl9iYXNlLmV4dGVuZChkZWZpbml0aW9uKTtcbiAgICAgICAgfVxuICAgICAg
ICBpZiAodHlwZSA9PT0gJ2RpcmVjdGl2ZScgJiYgdHlwZW9mIGRlZmluaXRpb24gPT09ICdmdW5j
dGlvbicpIHtcbiAgICAgICAgICBkZWZpbml0aW9uID0geyBiaW5kOiBkZWZpbml0aW9uLCB1cGRh
dGU6IGRlZmluaXRpb24gfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9wdGlvbnNbdHlwZSAr
ICdzJ11baWRdID0gZGVmaW5pdGlvbjtcbiAgICAgICAgcmV0dXJuIGRlZmluaXRpb25cbiAgICAg
IH1cbiAgICB9O1xuICB9KTtcbn1cblxuLyogICovXG5cbnZhciBwYXR0ZXJuVHlwZXMgPSBbU3Ry
aW5nLCBSZWdFeHAsIEFycmF5XTtcblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZSAob3B0cykg
e1xuICByZXR1cm4gb3B0cyAmJiAob3B0cy5DdG9yLm9wdGlvbnMubmFtZSB8fCBvcHRzLnRhZylc
bn1cblxuZnVuY3Rpb24gbWF0Y2hlcyAocGF0dGVybiwgbmFtZSkge1xuICBpZiAoQXJyYXkuaXNB
cnJheShwYXR0ZXJuKSkge1xuICAgIHJldHVybiBwYXR0ZXJuLmluZGV4T2YobmFtZSkgPiAtMVxu
ICB9IGVsc2UgaWYgKHR5cGVvZiBwYXR0ZXJuID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBw
YXR0ZXJuLnNwbGl0KCcsJykuaW5kZXhPZihuYW1lKSA+IC0xXG4gIH0gZWxzZSBpZiAoaXNSZWdF
eHAocGF0dGVybikpIHtcbiAgICByZXR1cm4gcGF0dGVybi50ZXN0KG5hbWUpXG4gIH1cbiAgLyog
aXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIHBy
dW5lQ2FjaGUgKGNhY2hlLCBjdXJyZW50LCBmaWx0ZXIpIHtcbiAgZm9yICh2YXIga2V5IGluIGNh
Y2hlKSB7XG4gICAgdmFyIGNhY2hlZE5vZGUgPSBjYWNoZVtrZXldO1xuICAgIGlmIChjYWNoZWRO
b2RlKSB7XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoY2FjaGVkTm9kZS5jb21w
b25lbnRPcHRpb25zKTtcbiAgICAgIGlmIChuYW1lICYmICFmaWx0ZXIobmFtZSkpIHtcbiAgICAg
ICAgaWYgKGNhY2hlZE5vZGUgIT09IGN1cnJlbnQpIHtcbiAgICAgICAgICBwcnVuZUNhY2hlRW50
cnkoY2FjaGVkTm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FjaGVba2V5XSA9IG51bGw7XG4g
ICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHBydW5lQ2FjaGVFbnRyeSAodm5vZGUp
IHtcbiAgaWYgKHZub2RlKSB7XG4gICAgdm5vZGUuY29tcG9uZW50SW5zdGFuY2UuJGRlc3Ryb3ko
KTtcbiAgfVxufVxuXG52YXIgS2VlcEFsaXZlID0ge1xuICBuYW1lOiAna2VlcC1hbGl2ZScsXG4g
IGFic3RyYWN0OiB0cnVlLFxuXG4gIHByb3BzOiB7XG4gICAgaW5jbHVkZTogcGF0dGVyblR5cGVz
LFxuICAgIGV4Y2x1ZGU6IHBhdHRlcm5UeXBlc1xuICB9LFxuXG4gIGNyZWF0ZWQ6IGZ1bmN0aW9u
IGNyZWF0ZWQgKCkge1xuICAgIHRoaXMuY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9
LFxuXG4gIGRlc3Ryb3llZDogZnVuY3Rpb24gZGVzdHJveWVkICgpIHtcbiAgICB2YXIgdGhpcyQx
ID0gdGhpcztcblxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzJDEuY2FjaGUpIHtcbiAgICAgIHBy
dW5lQ2FjaGVFbnRyeSh0aGlzJDEuY2FjaGVba2V5XSk7XG4gICAgfVxuICB9LFxuXG4gIHdhdGNo
OiB7XG4gICAgaW5jbHVkZTogZnVuY3Rpb24gaW5jbHVkZSAodmFsKSB7XG4gICAgICBwcnVuZUNh
Y2hlKHRoaXMuY2FjaGUsIHRoaXMuX3Zub2RlLCBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gbWF0
Y2hlcyh2YWwsIG5hbWUpOyB9KTtcbiAgICB9LFxuICAgIGV4Y2x1ZGU6IGZ1bmN0aW9uIGV4Y2x1
ZGUgKHZhbCkge1xuICAgICAgcHJ1bmVDYWNoZSh0aGlzLmNhY2hlLCB0aGlzLl92bm9kZSwgZnVu
Y3Rpb24gKG5hbWUpIHsgcmV0dXJuICFtYXRjaGVzKHZhbCwgbmFtZSk7IH0pO1xuICAgIH1cbiAg
fSxcblxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlciAoKSB7XG4gICAgdmFyIHZub2RlID0gZ2V0
Rmlyc3RDb21wb25lbnRDaGlsZCh0aGlzLiRzbG90cy5kZWZhdWx0KTtcbiAgICB2YXIgY29tcG9u
ZW50T3B0aW9ucyA9IHZub2RlICYmIHZub2RlLmNvbXBvbmVudE9wdGlvbnM7XG4gICAgaWYgKGNv
bXBvbmVudE9wdGlvbnMpIHtcbiAgICAgIC8vIGNoZWNrIHBhdHRlcm5cbiAgICAgIHZhciBuYW1l
ID0gZ2V0Q29tcG9uZW50TmFtZShjb21wb25lbnRPcHRpb25zKTtcbiAgICAgIGlmIChuYW1lICYm
IChcbiAgICAgICAgKHRoaXMuaW5jbHVkZSAmJiAhbWF0Y2hlcyh0aGlzLmluY2x1ZGUsIG5hbWUp
KSB8fFxuICAgICAgICAodGhpcy5leGNsdWRlICYmIG1hdGNoZXModGhpcy5leGNsdWRlLCBuYW1l
KSlcbiAgICAgICkpIHtcbiAgICAgICAgcmV0dXJuIHZub2RlXG4gICAgICB9XG4gICAgICB2YXIg
a2V5ID0gdm5vZGUua2V5ID09IG51bGxcbiAgICAgICAgLy8gc2FtZSBjb25zdHJ1Y3RvciBtYXkg
Z2V0IHJlZ2lzdGVyZWQgYXMgZGlmZmVyZW50IGxvY2FsIGNvbXBvbmVudHNcbiAgICAgICAgLy8g
c28gY2lkIGFsb25lIGlzIG5vdCBlbm91Z2ggKCMzMjY5KVxuICAgICAgICA/IGNvbXBvbmVudE9w
dGlvbnMuQ3Rvci5jaWQgKyAoY29tcG9uZW50T3B0aW9ucy50YWcgPyAoXCI6OlwiICsgKGNvbXBv
bmVudE9wdGlvbnMudGFnKSkgOiAnJylcbiAgICAgICAgOiB2bm9kZS5rZXk7XG4gICAgICBpZiAo
dGhpcy5jYWNoZVtrZXldKSB7XG4gICAgICAgIHZub2RlLmNvbXBvbmVudEluc3RhbmNlID0gdGhp
cy5jYWNoZVtrZXldLmNvbXBvbmVudEluc3RhbmNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAg
dGhpcy5jYWNoZVtrZXldID0gdm5vZGU7XG4gICAgICB9XG4gICAgICB2bm9kZS5kYXRhLmtlZXBB
bGl2ZSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB2bm9kZVxuICB9XG59O1xuXG52YXIgYnVp
bHRJbkNvbXBvbmVudHMgPSB7XG4gIEtlZXBBbGl2ZTogS2VlcEFsaXZlXG59O1xuXG4vKiAgKi9c
blxuZnVuY3Rpb24gaW5pdEdsb2JhbEFQSSAoVnVlKSB7XG4gIC8vIGNvbmZpZ1xuICB2YXIgY29u
ZmlnRGVmID0ge307XG4gIGNvbmZpZ0RlZi5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBjb25m
aWc7IH07XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4g
ICAgY29uZmlnRGVmLnNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgICdE
byBub3QgcmVwbGFjZSB0aGUgVnVlLmNvbmZpZyBvYmplY3QsIHNldCBpbmRpdmlkdWFsIGZpZWxk
cyBpbnN0ZWFkLidcbiAgICAgICk7XG4gICAgfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoVnVlLCAnY29uZmlnJywgY29uZmlnRGVmKTtcblxuICAvLyBleHBvc2VkIHV0aWwgbWV0aG9k
cy5cbiAgLy8gTk9URTogdGhlc2UgYXJlIG5vdCBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIHB1Ymxp
YyBBUEkgLSBhdm9pZCByZWx5aW5nIG9uXG4gIC8vIHRoZW0gdW5sZXNzIHlvdSBhcmUgYXdhcmUg
b2YgdGhlIHJpc2suXG4gIFZ1ZS51dGlsID0ge1xuICAgIHdhcm46IHdhcm4sXG4gICAgZXh0ZW5k
OiBleHRlbmQsXG4gICAgbWVyZ2VPcHRpb25zOiBtZXJnZU9wdGlvbnMsXG4gICAgZGVmaW5lUmVh
Y3RpdmU6IGRlZmluZVJlYWN0aXZlJCQxXG4gIH07XG5cbiAgVnVlLnNldCA9IHNldDtcbiAgVnVl
LmRlbGV0ZSA9IGRlbDtcbiAgVnVlLm5leHRUaWNrID0gbmV4dFRpY2s7XG5cbiAgVnVlLm9wdGlv
bnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBBU1NFVF9UWVBFUy5mb3JFYWNoKGZ1bmN0aW9u
ICh0eXBlKSB7XG4gICAgVnVlLm9wdGlvbnNbdHlwZSArICdzJ10gPSBPYmplY3QuY3JlYXRlKG51
bGwpO1xuICB9KTtcblxuICAvLyB0aGlzIGlzIHVzZWQgdG8gaWRlbnRpZnkgdGhlIFwiYmFzZVwi
IGNvbnN0cnVjdG9yIHRvIGV4dGVuZCBhbGwgcGxhaW4tb2JqZWN0XG4gIC8vIGNvbXBvbmVudHMg
d2l0aCBpbiBXZWV4J3MgbXVsdGktaW5zdGFuY2Ugc2NlbmFyaW9zLlxuICBWdWUub3B0aW9ucy5f
YmFzZSA9IFZ1ZTtcblxuICBleHRlbmQoVnVlLm9wdGlvbnMuY29tcG9uZW50cywgYnVpbHRJbkNv
bXBvbmVudHMpO1xuXG4gIGluaXRVc2UoVnVlKTtcbiAgaW5pdE1peGluJDEoVnVlKTtcbiAgaW5p
dEV4dGVuZChWdWUpO1xuICBpbml0QXNzZXRSZWdpc3RlcnMoVnVlKTtcbn1cblxuaW5pdEdsb2Jh
bEFQSShWdWUkMyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUkMy5wcm90b3R5cGUsICck
aXNTZXJ2ZXInLCB7XG4gIGdldDogaXNTZXJ2ZXJSZW5kZXJpbmdcbn0pO1xuXG5PYmplY3QuZGVm
aW5lUHJvcGVydHkoVnVlJDMucHJvdG90eXBlLCAnJHNzckNvbnRleHQnLCB7XG4gIGdldDogZnVu
Y3Rpb24gZ2V0ICgpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVy
biB0aGlzLiR2bm9kZSAmJiB0aGlzLiR2bm9kZS5zc3JDb250ZXh0XG4gIH1cbn0pO1xuXG5WdWUk
My52ZXJzaW9uID0gJzIuNC4yJztcblxuLyogICovXG5cbi8vIHRoZXNlIGFyZSByZXNlcnZlZCBm
b3Igd2ViIGJlY2F1c2UgdGhleSBhcmUgZGlyZWN0bHkgY29tcGlsZWQgYXdheVxuLy8gZHVyaW5n
IHRlbXBsYXRlIGNvbXBpbGF0aW9uXG52YXIgaXNSZXNlcnZlZEF0dHIgPSBtYWtlTWFwKCdzdHls
ZSxjbGFzcycpO1xuXG4vLyBhdHRyaWJ1dGVzIHRoYXQgc2hvdWxkIGJlIHVzaW5nIHByb3BzIGZv
ciBiaW5kaW5nXG52YXIgYWNjZXB0VmFsdWUgPSBtYWtlTWFwKCdpbnB1dCx0ZXh0YXJlYSxvcHRp
b24sc2VsZWN0Jyk7XG52YXIgbXVzdFVzZVByb3AgPSBmdW5jdGlvbiAodGFnLCB0eXBlLCBhdHRy
KSB7XG4gIHJldHVybiAoXG4gICAgKGF0dHIgPT09ICd2YWx1ZScgJiYgYWNjZXB0VmFsdWUodGFn
KSkgJiYgdHlwZSAhPT0gJ2J1dHRvbicgfHxcbiAgICAoYXR0ciA9PT0gJ3NlbGVjdGVkJyAmJiB0
YWcgPT09ICdvcHRpb24nKSB8fFxuICAgIChhdHRyID09PSAnY2hlY2tlZCcgJiYgdGFnID09PSAn
aW5wdXQnKSB8fFxuICAgIChhdHRyID09PSAnbXV0ZWQnICYmIHRhZyA9PT0gJ3ZpZGVvJylcbiAg
KVxufTtcblxudmFyIGlzRW51bWVyYXRlZEF0dHIgPSBtYWtlTWFwKCdjb250ZW50ZWRpdGFibGUs
ZHJhZ2dhYmxlLHNwZWxsY2hlY2snKTtcblxudmFyIGlzQm9vbGVhbkF0dHIgPSBtYWtlTWFwKFxu
ICAnYWxsb3dmdWxsc2NyZWVuLGFzeW5jLGF1dG9mb2N1cyxhdXRvcGxheSxjaGVja2VkLGNvbXBh
Y3QsY29udHJvbHMsZGVjbGFyZSwnICtcbiAgJ2RlZmF1bHQsZGVmYXVsdGNoZWNrZWQsZGVmYXVs
dG11dGVkLGRlZmF1bHRzZWxlY3RlZCxkZWZlcixkaXNhYmxlZCwnICtcbiAgJ2VuYWJsZWQsZm9y
bW5vdmFsaWRhdGUsaGlkZGVuLGluZGV0ZXJtaW5hdGUsaW5lcnQsaXNtYXAsaXRlbXNjb3BlLGxv
b3AsbXVsdGlwbGUsJyArXG4gICdtdXRlZCxub2hyZWYsbm9yZXNpemUsbm9zaGFkZSxub3ZhbGlk
YXRlLG5vd3JhcCxvcGVuLHBhdXNlb25leGl0LHJlYWRvbmx5LCcgK1xuICAncmVxdWlyZWQscmV2
ZXJzZWQsc2NvcGVkLHNlYW1sZXNzLHNlbGVjdGVkLHNvcnRhYmxlLHRyYW5zbGF0ZSwnICtcbiAg
J3RydWVzcGVlZCx0eXBlbXVzdG1hdGNoLHZpc2libGUnXG4pO1xuXG52YXIgeGxpbmtOUyA9ICdo
dHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJztcblxudmFyIGlzWGxpbmsgPSBmdW5jdGlvbiAo
bmFtZSkge1xuICByZXR1cm4gbmFtZS5jaGFyQXQoNSkgPT09ICc6JyAmJiBuYW1lLnNsaWNlKDAs
IDUpID09PSAneGxpbmsnXG59O1xuXG52YXIgZ2V0WGxpbmtQcm9wID0gZnVuY3Rpb24gKG5hbWUp
IHtcbiAgcmV0dXJuIGlzWGxpbmsobmFtZSkgPyBuYW1lLnNsaWNlKDYsIG5hbWUubGVuZ3RoKSA6
ICcnXG59O1xuXG52YXIgaXNGYWxzeUF0dHJWYWx1ZSA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgcmV0
dXJuIHZhbCA9PSBudWxsIHx8IHZhbCA9PT0gZmFsc2Vcbn07XG5cbi8qICAqL1xuXG5mdW5jdGlv
biBnZW5DbGFzc0ZvclZub2RlICh2bm9kZSkge1xuICB2YXIgZGF0YSA9IHZub2RlLmRhdGE7XG4g
IHZhciBwYXJlbnROb2RlID0gdm5vZGU7XG4gIHZhciBjaGlsZE5vZGUgPSB2bm9kZTtcbiAgd2hp
bGUgKGlzRGVmKGNoaWxkTm9kZS5jb21wb25lbnRJbnN0YW5jZSkpIHtcbiAgICBjaGlsZE5vZGUg
PSBjaGlsZE5vZGUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlO1xuICAgIGlmIChjaGlsZE5vZGUu
ZGF0YSkge1xuICAgICAgZGF0YSA9IG1lcmdlQ2xhc3NEYXRhKGNoaWxkTm9kZS5kYXRhLCBkYXRh
KTtcbiAgICB9XG4gIH1cbiAgd2hpbGUgKGlzRGVmKHBhcmVudE5vZGUgPSBwYXJlbnROb2RlLnBh
cmVudCkpIHtcbiAgICBpZiAocGFyZW50Tm9kZS5kYXRhKSB7XG4gICAgICBkYXRhID0gbWVyZ2VD
bGFzc0RhdGEoZGF0YSwgcGFyZW50Tm9kZS5kYXRhKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJl
bmRlckNsYXNzKGRhdGEuc3RhdGljQ2xhc3MsIGRhdGEuY2xhc3MpXG59XG5cbmZ1bmN0aW9uIG1l
cmdlQ2xhc3NEYXRhIChjaGlsZCwgcGFyZW50KSB7XG4gIHJldHVybiB7XG4gICAgc3RhdGljQ2xh
c3M6IGNvbmNhdChjaGlsZC5zdGF0aWNDbGFzcywgcGFyZW50LnN0YXRpY0NsYXNzKSxcbiAgICBj
bGFzczogaXNEZWYoY2hpbGQuY2xhc3MpXG4gICAgICA/IFtjaGlsZC5jbGFzcywgcGFyZW50LmNs
YXNzXVxuICAgICAgOiBwYXJlbnQuY2xhc3NcbiAgfVxufVxuXG5mdW5jdGlvbiByZW5kZXJDbGFz
cyAoXG4gIHN0YXRpY0NsYXNzLFxuICBkeW5hbWljQ2xhc3Ncbikge1xuICBpZiAoaXNEZWYoc3Rh
dGljQ2xhc3MpIHx8IGlzRGVmKGR5bmFtaWNDbGFzcykpIHtcbiAgICByZXR1cm4gY29uY2F0KHN0
YXRpY0NsYXNzLCBzdHJpbmdpZnlDbGFzcyhkeW5hbWljQ2xhc3MpKVxuICB9XG4gIC8qIGlzdGFu
YnVsIGlnbm9yZSBuZXh0ICovXG4gIHJldHVybiAnJ1xufVxuXG5mdW5jdGlvbiBjb25jYXQgKGEs
IGIpIHtcbiAgcmV0dXJuIGEgPyBiID8gKGEgKyAnICcgKyBiKSA6IGEgOiAoYiB8fCAnJylcbn1c
blxuZnVuY3Rpb24gc3RyaW5naWZ5Q2xhc3MgKHZhbHVlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5
KHZhbHVlKSkge1xuICAgIHJldHVybiBzdHJpbmdpZnlBcnJheSh2YWx1ZSlcbiAgfVxuICBpZiAo
aXNPYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIHN0cmluZ2lmeU9iamVjdCh2YWx1ZSlcbiAg
fVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZVxu
ICB9XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIHJldHVybiAnJ1xufVxuXG5mdW5j
dGlvbiBzdHJpbmdpZnlBcnJheSAodmFsdWUpIHtcbiAgdmFyIHJlcyA9ICcnO1xuICB2YXIgc3Ry
aW5naWZpZWQ7XG4gIGZvciAodmFyIGkgPSAwLCBsID0gdmFsdWUubGVuZ3RoOyBpIDwgbDsgaSsr
KSB7XG4gICAgaWYgKGlzRGVmKHN0cmluZ2lmaWVkID0gc3RyaW5naWZ5Q2xhc3ModmFsdWVbaV0p
KSAmJiBzdHJpbmdpZmllZCAhPT0gJycpIHtcbiAgICAgIGlmIChyZXMpIHsgcmVzICs9ICcgJzsg
fVxuICAgICAgcmVzICs9IHN0cmluZ2lmaWVkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59
XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeU9iamVjdCAodmFsdWUpIHtcbiAgdmFyIHJlcyA9ICcnO1xu
ICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAodmFsdWVba2V5XSkge1xuICAgICAg
aWYgKHJlcykgeyByZXMgKz0gJyAnOyB9XG4gICAgICByZXMgKz0ga2V5O1xuICAgIH1cbiAgfVxu
ICByZXR1cm4gcmVzXG59XG5cbi8qICAqL1xuXG52YXIgbmFtZXNwYWNlTWFwID0ge1xuICBzdmc6
ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsXG4gIG1hdGg6ICdodHRwOi8vd3d3LnczLm9y
Zy8xOTk4L01hdGgvTWF0aE1MJ1xufTtcblxudmFyIGlzSFRNTFRhZyA9IG1ha2VNYXAoXG4gICdo
dG1sLGJvZHksYmFzZSxoZWFkLGxpbmssbWV0YSxzdHlsZSx0aXRsZSwnICtcbiAgJ2FkZHJlc3Ms
YXJ0aWNsZSxhc2lkZSxmb290ZXIsaGVhZGVyLGgxLGgyLGgzLGg0LGg1LGg2LGhncm91cCxuYXYs
c2VjdGlvbiwnICtcbiAgJ2RpdixkZCxkbCxkdCxmaWdjYXB0aW9uLGZpZ3VyZSxwaWN0dXJlLGhy
LGltZyxsaSxtYWluLG9sLHAscHJlLHVsLCcgK1xuICAnYSxiLGFiYnIsYmRpLGJkbyxicixjaXRl
LGNvZGUsZGF0YSxkZm4sZW0saSxrYmQsbWFyayxxLHJwLHJ0LHJ0YyxydWJ5LCcgK1xuICAncyxz
YW1wLHNtYWxsLHNwYW4sc3Ryb25nLHN1YixzdXAsdGltZSx1LHZhcix3YnIsYXJlYSxhdWRpbyxt
YXAsdHJhY2ssdmlkZW8sJyArXG4gICdlbWJlZCxvYmplY3QscGFyYW0sc291cmNlLGNhbnZhcyxz
Y3JpcHQsbm9zY3JpcHQsZGVsLGlucywnICtcbiAgJ2NhcHRpb24sY29sLGNvbGdyb3VwLHRhYmxl
LHRoZWFkLHRib2R5LHRkLHRoLHRyLCcgK1xuICAnYnV0dG9uLGRhdGFsaXN0LGZpZWxkc2V0LGZv
cm0saW5wdXQsbGFiZWwsbGVnZW5kLG1ldGVyLG9wdGdyb3VwLG9wdGlvbiwnICtcbiAgJ291dHB1
dCxwcm9ncmVzcyxzZWxlY3QsdGV4dGFyZWEsJyArXG4gICdkZXRhaWxzLGRpYWxvZyxtZW51LG1l
bnVpdGVtLHN1bW1hcnksJyArXG4gICdjb250ZW50LGVsZW1lbnQsc2hhZG93LHRlbXBsYXRlLGJs
b2NrcXVvdGUsaWZyYW1lLHRmb290J1xuKTtcblxuLy8gdGhpcyBtYXAgaXMgaW50ZW50aW9uYWxs
eSBzZWxlY3RpdmUsIG9ubHkgY292ZXJpbmcgU1ZHIGVsZW1lbnRzIHRoYXQgbWF5XG4vLyBjb250
YWluIGNoaWxkIGVsZW1lbnRzLlxudmFyIGlzU1ZHID0gbWFrZU1hcChcbiAgJ3N2ZyxhbmltYXRl
LGNpcmNsZSxjbGlwcGF0aCxjdXJzb3IsZGVmcyxkZXNjLGVsbGlwc2UsZmlsdGVyLGZvbnQtZmFj
ZSwnICtcbiAgJ2ZvcmVpZ25PYmplY3QsZyxnbHlwaCxpbWFnZSxsaW5lLG1hcmtlcixtYXNrLG1p
c3NpbmctZ2x5cGgscGF0aCxwYXR0ZXJuLCcgK1xuICAncG9seWdvbixwb2x5bGluZSxyZWN0LHN3
aXRjaCxzeW1ib2wsdGV4dCx0ZXh0cGF0aCx0c3Bhbix1c2UsdmlldycsXG4gIHRydWVcbik7XG5c
bnZhciBpc1ByZVRhZyA9IGZ1bmN0aW9uICh0YWcpIHsgcmV0dXJuIHRhZyA9PT0gJ3ByZSc7IH07
XG5cbnZhciBpc1Jlc2VydmVkVGFnID0gZnVuY3Rpb24gKHRhZykge1xuICByZXR1cm4gaXNIVE1M
VGFnKHRhZykgfHwgaXNTVkcodGFnKVxufTtcblxuZnVuY3Rpb24gZ2V0VGFnTmFtZXNwYWNlICh0
YWcpIHtcbiAgaWYgKGlzU1ZHKHRhZykpIHtcbiAgICByZXR1cm4gJ3N2ZydcbiAgfVxuICAvLyBi
YXNpYyBzdXBwb3J0IGZvciBNYXRoTUxcbiAgLy8gbm90ZSBpdCBkb2Vzbid0IHN1cHBvcnQgb3Ro
ZXIgTWF0aE1MIGVsZW1lbnRzIGJlaW5nIGNvbXBvbmVudCByb290c1xuICBpZiAodGFnID09PSAn
bWF0aCcpIHtcbiAgICByZXR1cm4gJ21hdGgnXG4gIH1cbn1cblxudmFyIHVua25vd25FbGVtZW50
Q2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuZnVuY3Rpb24gaXNVbmtub3duRWxlbWVudCAo
dGFnKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoIWluQnJvd3Nlcikge1xu
ICAgIHJldHVybiB0cnVlXG4gIH1cbiAgaWYgKGlzUmVzZXJ2ZWRUYWcodGFnKSkge1xuICAgIHJl
dHVybiBmYWxzZVxuICB9XG4gIHRhZyA9IHRhZy50b0xvd2VyQ2FzZSgpO1xuICAvKiBpc3RhbmJ1
bCBpZ25vcmUgaWYgKi9cbiAgaWYgKHVua25vd25FbGVtZW50Q2FjaGVbdGFnXSAhPSBudWxsKSB7
XG4gICAgcmV0dXJuIHVua25vd25FbGVtZW50Q2FjaGVbdGFnXVxuICB9XG4gIHZhciBlbCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTtcbiAgaWYgKHRhZy5pbmRleE9mKCctJykgPiAtMSkg
e1xuICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI4MjEwMzY0LzEwNzAyNDRcbiAg
ICByZXR1cm4gKHVua25vd25FbGVtZW50Q2FjaGVbdGFnXSA9IChcbiAgICAgIGVsLmNvbnN0cnVj
dG9yID09PSB3aW5kb3cuSFRNTFVua25vd25FbGVtZW50IHx8XG4gICAgICBlbC5jb25zdHJ1Y3Rv
ciA9PT0gd2luZG93LkhUTUxFbGVtZW50XG4gICAgKSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4g
KHVua25vd25FbGVtZW50Q2FjaGVbdGFnXSA9IC9IVE1MVW5rbm93bkVsZW1lbnQvLnRlc3QoZWwu
dG9TdHJpbmcoKSkpXG4gIH1cbn1cblxuLyogICovXG5cbi8qKlxuICogUXVlcnkgYW4gZWxlbWVu
dCBzZWxlY3RvciBpZiBpdCdzIG5vdCBhbiBlbGVtZW50IGFscmVhZHkuXG4gKi9cbmZ1bmN0aW9u
IHF1ZXJ5IChlbCkge1xuICBpZiAodHlwZW9mIGVsID09PSAnc3RyaW5nJykge1xuICAgIHZhciBz
ZWxlY3RlZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWwpO1xuICAgIGlmICghc2VsZWN0ZWQp
IHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2Fybihc
biAgICAgICAgJ0Nhbm5vdCBmaW5kIGVsZW1lbnQ6ICcgKyBlbFxuICAgICAgKTtcbiAgICAgIHJl
dHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIH1cbiAgICByZXR1cm4gc2Vs
ZWN0ZWRcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZWxcbiAgfVxufVxuXG4vKiAgKi9cblxuZnVu
Y3Rpb24gY3JlYXRlRWxlbWVudCQxICh0YWdOYW1lLCB2bm9kZSkge1xuICB2YXIgZWxtID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRhZ05hbWUgIT09ICdzZWxlY3Qn
KSB7XG4gICAgcmV0dXJuIGVsbVxuICB9XG4gIC8vIGZhbHNlIG9yIG51bGwgd2lsbCByZW1vdmUg
dGhlIGF0dHJpYnV0ZSBidXQgdW5kZWZpbmVkIHdpbGwgbm90XG4gIGlmICh2bm9kZS5kYXRhICYm
IHZub2RlLmRhdGEuYXR0cnMgJiYgdm5vZGUuZGF0YS5hdHRycy5tdWx0aXBsZSAhPT0gdW5kZWZp
bmVkKSB7XG4gICAgZWxtLnNldEF0dHJpYnV0ZSgnbXVsdGlwbGUnLCAnbXVsdGlwbGUnKTtcbiAg
fVxuICByZXR1cm4gZWxtXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnROUyAobmFtZXNwYWNl
LCB0YWdOYW1lKSB7XG4gIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobmFtZXNwYWNl
TWFwW25hbWVzcGFjZV0sIHRhZ05hbWUpXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVRleHROb2RlICh0
ZXh0KSB7XG4gIHJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KVxufVxuXG5mdW5j
dGlvbiBjcmVhdGVDb21tZW50ICh0ZXh0KSB7XG4gIHJldHVybiBkb2N1bWVudC5jcmVhdGVDb21t
ZW50KHRleHQpXG59XG5cbmZ1bmN0aW9uIGluc2VydEJlZm9yZSAocGFyZW50Tm9kZSwgbmV3Tm9k
ZSwgcmVmZXJlbmNlTm9kZSkge1xuICBwYXJlbnROb2RlLmluc2VydEJlZm9yZShuZXdOb2RlLCBy
ZWZlcmVuY2VOb2RlKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ2hpbGQgKG5vZGUsIGNoaWxkKSB7
XG4gIG5vZGUucmVtb3ZlQ2hpbGQoY2hpbGQpO1xufVxuXG5mdW5jdGlvbiBhcHBlbmRDaGlsZCAo
bm9kZSwgY2hpbGQpIHtcbiAgbm9kZS5hcHBlbmRDaGlsZChjaGlsZCk7XG59XG5cbmZ1bmN0aW9u
IHBhcmVudE5vZGUgKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUucGFyZW50Tm9kZVxufVxuXG5mdW5j
dGlvbiBuZXh0U2libGluZyAobm9kZSkge1xuICByZXR1cm4gbm9kZS5uZXh0U2libGluZ1xufVxu
XG5mdW5jdGlvbiB0YWdOYW1lIChub2RlKSB7XG4gIHJldHVybiBub2RlLnRhZ05hbWVcbn1cblxu
ZnVuY3Rpb24gc2V0VGV4dENvbnRlbnQgKG5vZGUsIHRleHQpIHtcbiAgbm9kZS50ZXh0Q29udGVu
dCA9IHRleHQ7XG59XG5cbmZ1bmN0aW9uIHNldEF0dHJpYnV0ZSAobm9kZSwga2V5LCB2YWwpIHtc
biAgbm9kZS5zZXRBdHRyaWJ1dGUoa2V5LCB2YWwpO1xufVxuXG5cbnZhciBub2RlT3BzID0gT2Jq
ZWN0LmZyZWV6ZSh7XG5cdGNyZWF0ZUVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnQkMSxcblx0Y3JlYXRl
RWxlbWVudE5TOiBjcmVhdGVFbGVtZW50TlMsXG5cdGNyZWF0ZVRleHROb2RlOiBjcmVhdGVUZXh0
Tm9kZSxcblx0Y3JlYXRlQ29tbWVudDogY3JlYXRlQ29tbWVudCxcblx0aW5zZXJ0QmVmb3JlOiBp
bnNlcnRCZWZvcmUsXG5cdHJlbW92ZUNoaWxkOiByZW1vdmVDaGlsZCxcblx0YXBwZW5kQ2hpbGQ6
IGFwcGVuZENoaWxkLFxuXHRwYXJlbnROb2RlOiBwYXJlbnROb2RlLFxuXHRuZXh0U2libGluZzog
bmV4dFNpYmxpbmcsXG5cdHRhZ05hbWU6IHRhZ05hbWUsXG5cdHNldFRleHRDb250ZW50OiBzZXRU
ZXh0Q29udGVudCxcblx0c2V0QXR0cmlidXRlOiBzZXRBdHRyaWJ1dGVcbn0pO1xuXG4vKiAgKi9c
blxudmFyIHJlZiA9IHtcbiAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUgKF8sIHZub2RlKSB7XG4g
ICAgcmVnaXN0ZXJSZWYodm5vZGUpO1xuICB9LFxuICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZSAo
b2xkVm5vZGUsIHZub2RlKSB7XG4gICAgaWYgKG9sZFZub2RlLmRhdGEucmVmICE9PSB2bm9kZS5k
YXRhLnJlZikge1xuICAgICAgcmVnaXN0ZXJSZWYob2xkVm5vZGUsIHRydWUpO1xuICAgICAgcmVn
aXN0ZXJSZWYodm5vZGUpO1xuICAgIH1cbiAgfSxcbiAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJv
eSAodm5vZGUpIHtcbiAgICByZWdpc3RlclJlZih2bm9kZSwgdHJ1ZSk7XG4gIH1cbn07XG5cbmZ1
bmN0aW9uIHJlZ2lzdGVyUmVmICh2bm9kZSwgaXNSZW1vdmFsKSB7XG4gIHZhciBrZXkgPSB2bm9k
ZS5kYXRhLnJlZjtcbiAgaWYgKCFrZXkpIHsgcmV0dXJuIH1cblxuICB2YXIgdm0gPSB2bm9kZS5j
b250ZXh0O1xuICB2YXIgcmVmID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgfHwgdm5vZGUuZWxt
O1xuICB2YXIgcmVmcyA9IHZtLiRyZWZzO1xuICBpZiAoaXNSZW1vdmFsKSB7XG4gICAgaWYgKEFy
cmF5LmlzQXJyYXkocmVmc1trZXldKSkge1xuICAgICAgcmVtb3ZlKHJlZnNba2V5XSwgcmVmKTtc
biAgICB9IGVsc2UgaWYgKHJlZnNba2V5XSA9PT0gcmVmKSB7XG4gICAgICByZWZzW2tleV0gPSB1
bmRlZmluZWQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICh2bm9kZS5kYXRhLnJlZkluRm9y
KSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVmc1trZXldKSkge1xuICAgICAgICByZWZz
W2tleV0gPSBbcmVmXTtcbiAgICAgIH0gZWxzZSBpZiAocmVmc1trZXldLmluZGV4T2YocmVmKSA8
IDApIHtcbiAgICAgICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgICAgIHJlZnNba2V5XS5w
dXNoKHJlZik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlZnNba2V5XSA9IHJlZjtc
biAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBWaXJ0dWFsIERPTSBwYXRjaGluZyBhbGdvcml0aG0g
YmFzZWQgb24gU25hYmJkb20gYnlcbiAqIFNpbW9uIEZyaWlzIFZpbmR1bSAoQHBhbGRlcGluZClc
biAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZVxuICogaHR0cHM6Ly9naXRodWIuY29t
L3BhbGRlcGluZC9zbmFiYmRvbS9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKlxuICogbW9kaWZpZWQg
YnkgRXZhbiBZb3UgKEB5eXg5OTA4MDMpXG4gKlxuXG4vKlxuICogTm90IHR5cGUtY2hlY2tpbmcg
dGhpcyBiZWNhdXNlIHRoaXMgZmlsZSBpcyBwZXJmLWNyaXRpY2FsIGFuZCB0aGUgY29zdFxuICog
b2YgbWFraW5nIGZsb3cgdW5kZXJzdGFuZCBpdCBpcyBub3Qgd29ydGggaXQuXG4gKi9cblxudmFy
IGVtcHR5Tm9kZSA9IG5ldyBWTm9kZSgnJywge30sIFtdKTtcblxudmFyIGhvb2tzID0gWydjcmVh
dGUnLCAnYWN0aXZhdGUnLCAndXBkYXRlJywgJ3JlbW92ZScsICdkZXN0cm95J107XG5cbmZ1bmN0
aW9uIHNhbWVWbm9kZSAoYSwgYikge1xuICByZXR1cm4gKFxuICAgIGEua2V5ID09PSBiLmtleSAm
JiAoXG4gICAgICAoXG4gICAgICAgIGEudGFnID09PSBiLnRhZyAmJlxuICAgICAgICBhLmlzQ29t
bWVudCA9PT0gYi5pc0NvbW1lbnQgJiZcbiAgICAgICAgaXNEZWYoYS5kYXRhKSA9PT0gaXNEZWYo
Yi5kYXRhKSAmJlxuICAgICAgICBzYW1lSW5wdXRUeXBlKGEsIGIpXG4gICAgICApIHx8IChcbiAg
ICAgICAgaXNUcnVlKGEuaXNBc3luY1BsYWNlaG9sZGVyKSAmJlxuICAgICAgICBhLmFzeW5jRmFj
dG9yeSA9PT0gYi5hc3luY0ZhY3RvcnkgJiZcbiAgICAgICAgaXNVbmRlZihiLmFzeW5jRmFjdG9y
eS5lcnJvcilcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuLy8gU29tZSBicm93c2VycyBkbyBu
b3Qgc3VwcG9ydCBkeW5hbWljYWxseSBjaGFuZ2luZyB0eXBlIGZvciA8aW5wdXQ+XG4vLyBzbyB0
aGV5IG5lZWQgdG8gYmUgdHJlYXRlZCBhcyBkaWZmZXJlbnQgbm9kZXNcbmZ1bmN0aW9uIHNhbWVJ
bnB1dFR5cGUgKGEsIGIpIHtcbiAgaWYgKGEudGFnICE9PSAnaW5wdXQnKSB7IHJldHVybiB0cnVl
IH1cbiAgdmFyIGk7XG4gIHZhciB0eXBlQSA9IGlzRGVmKGkgPSBhLmRhdGEpICYmIGlzRGVmKGkg
PSBpLmF0dHJzKSAmJiBpLnR5cGU7XG4gIHZhciB0eXBlQiA9IGlzRGVmKGkgPSBiLmRhdGEpICYm
IGlzRGVmKGkgPSBpLmF0dHJzKSAmJiBpLnR5cGU7XG4gIHJldHVybiB0eXBlQSA9PT0gdHlwZUJc
bn1cblxuZnVuY3Rpb24gY3JlYXRlS2V5VG9PbGRJZHggKGNoaWxkcmVuLCBiZWdpbklkeCwgZW5k
SWR4KSB7XG4gIHZhciBpLCBrZXk7XG4gIHZhciBtYXAgPSB7fTtcbiAgZm9yIChpID0gYmVnaW5J
ZHg7IGkgPD0gZW5kSWR4OyArK2kpIHtcbiAgICBrZXkgPSBjaGlsZHJlbltpXS5rZXk7XG4gICAg
aWYgKGlzRGVmKGtleSkpIHsgbWFwW2tleV0gPSBpOyB9XG4gIH1cbiAgcmV0dXJuIG1hcFxufVxu
XG5mdW5jdGlvbiBjcmVhdGVQYXRjaEZ1bmN0aW9uIChiYWNrZW5kKSB7XG4gIHZhciBpLCBqO1xu
ICB2YXIgY2JzID0ge307XG5cbiAgdmFyIG1vZHVsZXMgPSBiYWNrZW5kLm1vZHVsZXM7XG4gIHZh
ciBub2RlT3BzID0gYmFja2VuZC5ub2RlT3BzO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBob29rcy5s
ZW5ndGg7ICsraSkge1xuICAgIGNic1tob29rc1tpXV0gPSBbXTtcbiAgICBmb3IgKGogPSAwOyBq
IDwgbW9kdWxlcy5sZW5ndGg7ICsraikge1xuICAgICAgaWYgKGlzRGVmKG1vZHVsZXNbal1baG9v
a3NbaV1dKSkge1xuICAgICAgICBjYnNbaG9va3NbaV1dLnB1c2gobW9kdWxlc1tqXVtob29rc1tp
XV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGVtcHR5Tm9kZUF0IChlbG0p
IHtcbiAgICByZXR1cm4gbmV3IFZOb2RlKG5vZGVPcHMudGFnTmFtZShlbG0pLnRvTG93ZXJDYXNl
KCksIHt9LCBbXSwgdW5kZWZpbmVkLCBlbG0pXG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVSbUNi
IChjaGlsZEVsbSwgbGlzdGVuZXJzKSB7XG4gICAgZnVuY3Rpb24gcmVtb3ZlJCQxICgpIHtcbiAg
ICAgIGlmICgtLXJlbW92ZSQkMS5saXN0ZW5lcnMgPT09IDApIHtcbiAgICAgICAgcmVtb3ZlTm9k
ZShjaGlsZEVsbSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlbW92ZSQkMS5saXN0ZW5lcnMgPSBs
aXN0ZW5lcnM7XG4gICAgcmV0dXJuIHJlbW92ZSQkMVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3Zl
Tm9kZSAoZWwpIHtcbiAgICB2YXIgcGFyZW50ID0gbm9kZU9wcy5wYXJlbnROb2RlKGVsKTtcbiAg
ICAvLyBlbGVtZW50IG1heSBoYXZlIGFscmVhZHkgYmVlbiByZW1vdmVkIGR1ZSB0byB2LWh0bWwg
LyB2LXRleHRcbiAgICBpZiAoaXNEZWYocGFyZW50KSkge1xuICAgICAgbm9kZU9wcy5yZW1vdmVD
aGlsZChwYXJlbnQsIGVsKTtcbiAgICB9XG4gIH1cblxuICB2YXIgaW5QcmUgPSAwO1xuICBmdW5j
dGlvbiBjcmVhdGVFbG0gKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgcmVm
RWxtLCBuZXN0ZWQpIHtcbiAgICB2bm9kZS5pc1Jvb3RJbnNlcnQgPSAhbmVzdGVkOyAvLyBmb3Ig
dHJhbnNpdGlvbiBlbnRlciBjaGVja1xuICAgIGlmIChjcmVhdGVDb21wb25lbnQodm5vZGUsIGlu
c2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0pKSB7XG4gICAgICByZXR1cm5cbiAg
ICB9XG5cbiAgICB2YXIgZGF0YSA9IHZub2RlLmRhdGE7XG4gICAgdmFyIGNoaWxkcmVuID0gdm5v
ZGUuY2hpbGRyZW47XG4gICAgdmFyIHRhZyA9IHZub2RlLnRhZztcbiAgICBpZiAoaXNEZWYodGFn
KSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtc
biAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5wcmUpIHtcbiAgICAgICAgICBpblByZSsrO1xuICAg
ICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhaW5QcmUgJiZcbiAgICAgICAgICAhdm5v
ZGUubnMgJiZcbiAgICAgICAgICAhKGNvbmZpZy5pZ25vcmVkRWxlbWVudHMubGVuZ3RoICYmIGNv
bmZpZy5pZ25vcmVkRWxlbWVudHMuaW5kZXhPZih0YWcpID4gLTEpICYmXG4gICAgICAgICAgY29u
ZmlnLmlzVW5rbm93bkVsZW1lbnQodGFnKVxuICAgICAgICApIHtcbiAgICAgICAgICB3YXJuKFxu
ICAgICAgICAgICAgJ1Vua25vd24gY3VzdG9tIGVsZW1lbnQ6IDwnICsgdGFnICsgJz4gLSBkaWQg
eW91ICcgK1xuICAgICAgICAgICAgJ3JlZ2lzdGVyIHRoZSBjb21wb25lbnQgY29ycmVjdGx5PyBG
b3IgcmVjdXJzaXZlIGNvbXBvbmVudHMsICcgK1xuICAgICAgICAgICAgJ21ha2Ugc3VyZSB0byBw
cm92aWRlIHRoZSBcIm5hbWVcIiBvcHRpb24uJyxcbiAgICAgICAgICAgIHZub2RlLmNvbnRleHRc
biAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2bm9kZS5lbG0gPSB2bm9k
ZS5uc1xuICAgICAgICA/IG5vZGVPcHMuY3JlYXRlRWxlbWVudE5TKHZub2RlLm5zLCB0YWcpXG4g
ICAgICAgIDogbm9kZU9wcy5jcmVhdGVFbGVtZW50KHRhZywgdm5vZGUpO1xuICAgICAgc2V0U2Nv
cGUodm5vZGUpO1xuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIHtcbiAg
ICAgICAgY3JlYXRlQ2hpbGRyZW4odm5vZGUsIGNoaWxkcmVuLCBpbnNlcnRlZFZub2RlUXVldWUp
O1xuICAgICAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgICAgICBpbnZva2VDcmVhdGVIb29r
cyh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgfVxuICAgICAgICBpbnNlcnQo
cGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9j
ZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGRhdGEgJiYgZGF0YS5wcmUpIHtc
biAgICAgICAgaW5QcmUtLTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzVHJ1ZSh2bm9kZS5p
c0NvbW1lbnQpKSB7XG4gICAgICB2bm9kZS5lbG0gPSBub2RlT3BzLmNyZWF0ZUNvbW1lbnQodm5v
ZGUudGV4dCk7XG4gICAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4g
ICAgfSBlbHNlIHtcbiAgICAgIHZub2RlLmVsbSA9IG5vZGVPcHMuY3JlYXRlVGV4dE5vZGUodm5v
ZGUudGV4dCk7XG4gICAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4g
ICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQ29tcG9uZW50ICh2bm9kZSwgaW5zZXJ0ZWRW
bm9kZVF1ZXVlLCBwYXJlbnRFbG0sIHJlZkVsbSkge1xuICAgIHZhciBpID0gdm5vZGUuZGF0YTtc
biAgICBpZiAoaXNEZWYoaSkpIHtcbiAgICAgIHZhciBpc1JlYWN0aXZhdGVkID0gaXNEZWYodm5v
ZGUuY29tcG9uZW50SW5zdGFuY2UpICYmIGkua2VlcEFsaXZlO1xuICAgICAgaWYgKGlzRGVmKGkg
PSBpLmhvb2spICYmIGlzRGVmKGkgPSBpLmluaXQpKSB7XG4gICAgICAgIGkodm5vZGUsIGZhbHNl
IC8qIGh5ZHJhdGluZyAqLywgcGFyZW50RWxtLCByZWZFbG0pO1xuICAgICAgfVxuICAgICAgLy8g
YWZ0ZXIgY2FsbGluZyB0aGUgaW5pdCBob29rLCBpZiB0aGUgdm5vZGUgaXMgYSBjaGlsZCBjb21w
b25lbnRcbiAgICAgIC8vIGl0IHNob3VsZCd2ZSBjcmVhdGVkIGEgY2hpbGQgaW5zdGFuY2UgYW5k
IG1vdW50ZWQgaXQuIHRoZSBjaGlsZFxuICAgICAgLy8gY29tcG9uZW50IGFsc28gaGFzIHNldCB0
aGUgcGxhY2Vob2xkZXIgdm5vZGUncyBlbG0uXG4gICAgICAvLyBpbiB0aGF0IGNhc2Ugd2UgY2Fu
IGp1c3QgcmV0dXJuIHRoZSBlbGVtZW50IGFuZCBiZSBkb25lLlxuICAgICAgaWYgKGlzRGVmKHZu
b2RlLmNvbXBvbmVudEluc3RhbmNlKSkge1xuICAgICAgICBpbml0Q29tcG9uZW50KHZub2RlLCBp
bnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICBpZiAoaXNUcnVlKGlzUmVhY3RpdmF0ZWQpKSB7
XG4gICAgICAgICAgcmVhY3RpdmF0ZUNvbXBvbmVudCh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVl
LCBwYXJlbnRFbG0sIHJlZkVsbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAg
ICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbml0Q29tcG9uZW50ICh2bm9kZSwgaW5z
ZXJ0ZWRWbm9kZVF1ZXVlKSB7XG4gICAgaWYgKGlzRGVmKHZub2RlLmRhdGEucGVuZGluZ0luc2Vy
dCkpIHtcbiAgICAgIGluc2VydGVkVm5vZGVRdWV1ZS5wdXNoLmFwcGx5KGluc2VydGVkVm5vZGVR
dWV1ZSwgdm5vZGUuZGF0YS5wZW5kaW5nSW5zZXJ0KTtcbiAgICAgIHZub2RlLmRhdGEucGVuZGlu
Z0luc2VydCA9IG51bGw7XG4gICAgfVxuICAgIHZub2RlLmVsbSA9IHZub2RlLmNvbXBvbmVudElu
c3RhbmNlLiRlbDtcbiAgICBpZiAoaXNQYXRjaGFibGUodm5vZGUpKSB7XG4gICAgICBpbnZva2VD
cmVhdGVIb29rcyh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgIHNldFNjb3BlKHZu
b2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZW1wdHkgY29tcG9uZW50IHJvb3QuXG4gICAg
ICAvLyBza2lwIGFsbCBlbGVtZW50LXJlbGF0ZWQgbW9kdWxlcyBleGNlcHQgZm9yIHJlZiAoIzM0
NTUpXG4gICAgICByZWdpc3RlclJlZih2bm9kZSk7XG4gICAgICAvLyBtYWtlIHN1cmUgdG8gaW52
b2tlIHRoZSBpbnNlcnQgaG9va1xuICAgICAgaW5zZXJ0ZWRWbm9kZVF1ZXVlLnB1c2godm5vZGUp
O1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWN0aXZhdGVDb21wb25lbnQgKHZub2RlLCBp
bnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgcmVmRWxtKSB7XG4gICAgdmFyIGk7XG4gICAg
Ly8gaGFjayBmb3IgIzQzMzk6IGEgcmVhY3RpdmF0ZWQgY29tcG9uZW50IHdpdGggaW5uZXIgdHJh
bnNpdGlvblxuICAgIC8vIGRvZXMgbm90IHRyaWdnZXIgYmVjYXVzZSB0aGUgaW5uZXIgbm9kZSdz
IGNyZWF0ZWQgaG9va3MgYXJlIG5vdCBjYWxsZWRcbiAgICAvLyBhZ2Fpbi4gSXQncyBub3QgaWRl
YWwgdG8gaW52b2x2ZSBtb2R1bGUtc3BlY2lmaWMgbG9naWMgaW4gaGVyZSBidXRcbiAgICAvLyB0
aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYSBiZXR0ZXIgd2F5IHRvIGRvIGl0LlxuICAgIHZhciBp
bm5lck5vZGUgPSB2bm9kZTtcbiAgICB3aGlsZSAoaW5uZXJOb2RlLmNvbXBvbmVudEluc3RhbmNl
KSB7XG4gICAgICBpbm5lck5vZGUgPSBpbm5lck5vZGUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2Rl
O1xuICAgICAgaWYgKGlzRGVmKGkgPSBpbm5lck5vZGUuZGF0YSkgJiYgaXNEZWYoaSA9IGkudHJh
bnNpdGlvbikpIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNicy5hY3RpdmF0ZS5sZW5ndGg7
ICsraSkge1xuICAgICAgICAgIGNicy5hY3RpdmF0ZVtpXShlbXB0eU5vZGUsIGlubmVyTm9kZSk7
XG4gICAgICAgIH1cbiAgICAgICAgaW5zZXJ0ZWRWbm9kZVF1ZXVlLnB1c2goaW5uZXJOb2RlKTtc
biAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdW5saWtlIGEgbmV3bHkgY3Jl
YXRlZCBjb21wb25lbnQsXG4gICAgLy8gYSByZWFjdGl2YXRlZCBrZWVwLWFsaXZlIGNvbXBvbmVu
dCBkb2Vzbid0IGluc2VydCBpdHNlbGZcbiAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0s
IHJlZkVsbSk7XG4gIH1cblxuICBmdW5jdGlvbiBpbnNlcnQgKHBhcmVudCwgZWxtLCByZWYkJDEp
IHtcbiAgICBpZiAoaXNEZWYocGFyZW50KSkge1xuICAgICAgaWYgKGlzRGVmKHJlZiQkMSkpIHtc
biAgICAgICAgaWYgKHJlZiQkMS5wYXJlbnROb2RlID09PSBwYXJlbnQpIHtcbiAgICAgICAgICBu
b2RlT3BzLmluc2VydEJlZm9yZShwYXJlbnQsIGVsbSwgcmVmJCQxKTtcbiAgICAgICAgfVxuICAg
ICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZU9wcy5hcHBlbmRDaGlsZChwYXJlbnQsIGVsbSk7XG4g
ICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQ2hpbGRyZW4gKHZub2RlLCBj
aGlsZHJlbiwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY2hp
bGRyZW4pKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgKytp
KSB7XG4gICAgICAgIGNyZWF0ZUVsbShjaGlsZHJlbltpXSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCB2
bm9kZS5lbG0sIG51bGwsIHRydWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNQcmltaXRp
dmUodm5vZGUudGV4dCkpIHtcbiAgICAgIG5vZGVPcHMuYXBwZW5kQ2hpbGQodm5vZGUuZWxtLCBu
b2RlT3BzLmNyZWF0ZVRleHROb2RlKHZub2RlLnRleHQpKTtcbiAgICB9XG4gIH1cblxuICBmdW5j
dGlvbiBpc1BhdGNoYWJsZSAodm5vZGUpIHtcbiAgICB3aGlsZSAodm5vZGUuY29tcG9uZW50SW5z
dGFuY2UpIHtcbiAgICAgIHZub2RlID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlO1xu
ICAgIH1cbiAgICByZXR1cm4gaXNEZWYodm5vZGUudGFnKVxuICB9XG5cbiAgZnVuY3Rpb24gaW52
b2tlQ3JlYXRlSG9va3MgKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICBmb3IgKHZh
ciBpJDEgPSAwOyBpJDEgPCBjYnMuY3JlYXRlLmxlbmd0aDsgKytpJDEpIHtcbiAgICAgIGNicy5j
cmVhdGVbaSQxXShlbXB0eU5vZGUsIHZub2RlKTtcbiAgICB9XG4gICAgaSA9IHZub2RlLmRhdGEu
aG9vazsgLy8gUmV1c2UgdmFyaWFibGVcbiAgICBpZiAoaXNEZWYoaSkpIHtcbiAgICAgIGlmIChp
c0RlZihpLmNyZWF0ZSkpIHsgaS5jcmVhdGUoZW1wdHlOb2RlLCB2bm9kZSk7IH1cbiAgICAgIGlm
IChpc0RlZihpLmluc2VydCkpIHsgaW5zZXJ0ZWRWbm9kZVF1ZXVlLnB1c2godm5vZGUpOyB9XG4g
ICAgfVxuICB9XG5cbiAgLy8gc2V0IHNjb3BlIGlkIGF0dHJpYnV0ZSBmb3Igc2NvcGVkIENTUy5c
biAgLy8gdGhpcyBpcyBpbXBsZW1lbnRlZCBhcyBhIHNwZWNpYWwgY2FzZSB0byBhdm9pZCB0aGUg
b3ZlcmhlYWRcbiAgLy8gb2YgZ29pbmcgdGhyb3VnaCB0aGUgbm9ybWFsIGF0dHJpYnV0ZSBwYXRj
aGluZyBwcm9jZXNzLlxuICBmdW5jdGlvbiBzZXRTY29wZSAodm5vZGUpIHtcbiAgICB2YXIgaTtc
biAgICB2YXIgYW5jZXN0b3IgPSB2bm9kZTtcbiAgICB3aGlsZSAoYW5jZXN0b3IpIHtcbiAgICAg
IGlmIChpc0RlZihpID0gYW5jZXN0b3IuY29udGV4dCkgJiYgaXNEZWYoaSA9IGkuJG9wdGlvbnMu
X3Njb3BlSWQpKSB7XG4gICAgICAgIG5vZGVPcHMuc2V0QXR0cmlidXRlKHZub2RlLmVsbSwgaSwg
JycpO1xuICAgICAgfVxuICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci5wYXJlbnQ7XG4gICAgfVxu
ICAgIC8vIGZvciBzbG90IGNvbnRlbnQgdGhleSBzaG91bGQgYWxzbyBnZXQgdGhlIHNjb3BlSWQg
ZnJvbSB0aGUgaG9zdCBpbnN0YW5jZS5cbiAgICBpZiAoaXNEZWYoaSA9IGFjdGl2ZUluc3RhbmNl
KSAmJlxuICAgICAgaSAhPT0gdm5vZGUuY29udGV4dCAmJlxuICAgICAgaXNEZWYoaSA9IGkuJG9w
dGlvbnMuX3Njb3BlSWQpXG4gICAgKSB7XG4gICAgICBub2RlT3BzLnNldEF0dHJpYnV0ZSh2bm9k
ZS5lbG0sIGksICcnKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBhZGRWbm9kZXMgKHBhcmVu
dEVsbSwgcmVmRWxtLCB2bm9kZXMsIHN0YXJ0SWR4LCBlbmRJZHgsIGluc2VydGVkVm5vZGVRdWV1
ZSkge1xuICAgIGZvciAoOyBzdGFydElkeCA8PSBlbmRJZHg7ICsrc3RhcnRJZHgpIHtcbiAgICAg
IGNyZWF0ZUVsbSh2bm9kZXNbc3RhcnRJZHhdLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVs
bSwgcmVmRWxtKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbnZva2VEZXN0cm95SG9vayAo
dm5vZGUpIHtcbiAgICB2YXIgaSwgajtcbiAgICB2YXIgZGF0YSA9IHZub2RlLmRhdGE7XG4gICAg
aWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICBpZiAoaXNEZWYoaSA9IGRhdGEuaG9vaykgJiYgaXNE
ZWYoaSA9IGkuZGVzdHJveSkpIHsgaSh2bm9kZSk7IH1cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBj
YnMuZGVzdHJveS5sZW5ndGg7ICsraSkgeyBjYnMuZGVzdHJveVtpXSh2bm9kZSk7IH1cbiAgICB9
XG4gICAgaWYgKGlzRGVmKGkgPSB2bm9kZS5jaGlsZHJlbikpIHtcbiAgICAgIGZvciAoaiA9IDA7
IGogPCB2bm9kZS5jaGlsZHJlbi5sZW5ndGg7ICsraikge1xuICAgICAgICBpbnZva2VEZXN0cm95
SG9vayh2bm9kZS5jaGlsZHJlbltqXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rp
b24gcmVtb3ZlVm5vZGVzIChwYXJlbnRFbG0sIHZub2Rlcywgc3RhcnRJZHgsIGVuZElkeCkge1xu
ICAgIGZvciAoOyBzdGFydElkeCA8PSBlbmRJZHg7ICsrc3RhcnRJZHgpIHtcbiAgICAgIHZhciBj
aCA9IHZub2Rlc1tzdGFydElkeF07XG4gICAgICBpZiAoaXNEZWYoY2gpKSB7XG4gICAgICAgIGlm
IChpc0RlZihjaC50YWcpKSB7XG4gICAgICAgICAgcmVtb3ZlQW5kSW52b2tlUmVtb3ZlSG9vayhj
aCk7XG4gICAgICAgICAgaW52b2tlRGVzdHJveUhvb2soY2gpO1xuICAgICAgICB9IGVsc2UgeyAv
LyBUZXh0IG5vZGVcbiAgICAgICAgICByZW1vdmVOb2RlKGNoLmVsbSk7XG4gICAgICAgIH1cbiAg
ICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVBbmRJbnZva2VSZW1vdmVIb29r
ICh2bm9kZSwgcm0pIHtcbiAgICBpZiAoaXNEZWYocm0pIHx8IGlzRGVmKHZub2RlLmRhdGEpKSB7
XG4gICAgICB2YXIgaTtcbiAgICAgIHZhciBsaXN0ZW5lcnMgPSBjYnMucmVtb3ZlLmxlbmd0aCAr
IDE7XG4gICAgICBpZiAoaXNEZWYocm0pKSB7XG4gICAgICAgIC8vIHdlIGhhdmUgYSByZWN1cnNp
dmVseSBwYXNzZWQgZG93biBybSBjYWxsYmFja1xuICAgICAgICAvLyBpbmNyZWFzZSB0aGUgbGlz
dGVuZXJzIGNvdW50XG4gICAgICAgIHJtLmxpc3RlbmVycyArPSBsaXN0ZW5lcnM7XG4gICAgICB9
IGVsc2Uge1xuICAgICAgICAvLyBkaXJlY3RseSByZW1vdmluZ1xuICAgICAgICBybSA9IGNyZWF0
ZVJtQ2Iodm5vZGUuZWxtLCBsaXN0ZW5lcnMpO1xuICAgICAgfVxuICAgICAgLy8gcmVjdXJzaXZl
bHkgaW52b2tlIGhvb2tzIG9uIGNoaWxkIGNvbXBvbmVudCByb290IG5vZGVcbiAgICAgIGlmIChp
c0RlZihpID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UpICYmIGlzRGVmKGkgPSBpLl92bm9kZSkg
JiYgaXNEZWYoaS5kYXRhKSkge1xuICAgICAgICByZW1vdmVBbmRJbnZva2VSZW1vdmVIb29rKGks
IHJtKTtcbiAgICAgIH1cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjYnMucmVtb3ZlLmxlbmd0aDsg
KytpKSB7XG4gICAgICAgIGNicy5yZW1vdmVbaV0odm5vZGUsIHJtKTtcbiAgICAgIH1cbiAgICAg
IGlmIChpc0RlZihpID0gdm5vZGUuZGF0YS5ob29rKSAmJiBpc0RlZihpID0gaS5yZW1vdmUpKSB7
XG4gICAgICAgIGkodm5vZGUsIHJtKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJtKCk7XG4g
ICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbW92ZU5vZGUodm5vZGUuZWxtKTtcbiAgICB9
XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVDaGlsZHJlbiAocGFyZW50RWxtLCBvbGRDaCwgbmV3
Q2gsIGluc2VydGVkVm5vZGVRdWV1ZSwgcmVtb3ZlT25seSkge1xuICAgIHZhciBvbGRTdGFydElk
eCA9IDA7XG4gICAgdmFyIG5ld1N0YXJ0SWR4ID0gMDtcbiAgICB2YXIgb2xkRW5kSWR4ID0gb2xk
Q2gubGVuZ3RoIC0gMTtcbiAgICB2YXIgb2xkU3RhcnRWbm9kZSA9IG9sZENoWzBdO1xuICAgIHZh
ciBvbGRFbmRWbm9kZSA9IG9sZENoW29sZEVuZElkeF07XG4gICAgdmFyIG5ld0VuZElkeCA9IG5l
d0NoLmxlbmd0aCAtIDE7XG4gICAgdmFyIG5ld1N0YXJ0Vm5vZGUgPSBuZXdDaFswXTtcbiAgICB2
YXIgbmV3RW5kVm5vZGUgPSBuZXdDaFtuZXdFbmRJZHhdO1xuICAgIHZhciBvbGRLZXlUb0lkeCwg
aWR4SW5PbGQsIGVsbVRvTW92ZSwgcmVmRWxtO1xuXG4gICAgLy8gcmVtb3ZlT25seSBpcyBhIHNw
ZWNpYWwgZmxhZyB1c2VkIG9ubHkgYnkgPHRyYW5zaXRpb24tZ3JvdXA+XG4gICAgLy8gdG8gZW5z
dXJlIHJlbW92ZWQgZWxlbWVudHMgc3RheSBpbiBjb3JyZWN0IHJlbGF0aXZlIHBvc2l0aW9uc1xu
ICAgIC8vIGR1cmluZyBsZWF2aW5nIHRyYW5zaXRpb25zXG4gICAgdmFyIGNhbk1vdmUgPSAhcmVt
b3ZlT25seTtcblxuICAgIHdoaWxlIChvbGRTdGFydElkeCA8PSBvbGRFbmRJZHggJiYgbmV3U3Rh
cnRJZHggPD0gbmV3RW5kSWR4KSB7XG4gICAgICBpZiAoaXNVbmRlZihvbGRTdGFydFZub2RlKSkg
e1xuICAgICAgICBvbGRTdGFydFZub2RlID0gb2xkQ2hbKytvbGRTdGFydElkeF07IC8vIFZub2Rl
IGhhcyBiZWVuIG1vdmVkIGxlZnRcbiAgICAgIH0gZWxzZSBpZiAoaXNVbmRlZihvbGRFbmRWbm9k
ZSkpIHtcbiAgICAgICAgb2xkRW5kVm5vZGUgPSBvbGRDaFstLW9sZEVuZElkeF07XG4gICAgICB9
IGVsc2UgaWYgKHNhbWVWbm9kZShvbGRTdGFydFZub2RlLCBuZXdTdGFydFZub2RlKSkge1xuICAg
ICAgICBwYXRjaFZub2RlKG9sZFN0YXJ0Vm5vZGUsIG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5v
ZGVRdWV1ZSk7XG4gICAgICAgIG9sZFN0YXJ0Vm5vZGUgPSBvbGRDaFsrK29sZFN0YXJ0SWR4XTtc
biAgICAgICAgbmV3U3RhcnRWbm9kZSA9IG5ld0NoWysrbmV3U3RhcnRJZHhdO1xuICAgICAgfSBl
bHNlIGlmIChzYW1lVm5vZGUob2xkRW5kVm5vZGUsIG5ld0VuZFZub2RlKSkge1xuICAgICAgICBw
YXRjaFZub2RlKG9sZEVuZFZub2RlLCBuZXdFbmRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtc
biAgICAgICAgb2xkRW5kVm5vZGUgPSBvbGRDaFstLW9sZEVuZElkeF07XG4gICAgICAgIG5ld0Vu
ZFZub2RlID0gbmV3Q2hbLS1uZXdFbmRJZHhdO1xuICAgICAgfSBlbHNlIGlmIChzYW1lVm5vZGUo
b2xkU3RhcnRWbm9kZSwgbmV3RW5kVm5vZGUpKSB7IC8vIFZub2RlIG1vdmVkIHJpZ2h0XG4gICAg
ICAgIHBhdGNoVm5vZGUob2xkU3RhcnRWbm9kZSwgbmV3RW5kVm5vZGUsIGluc2VydGVkVm5vZGVR
dWV1ZSk7XG4gICAgICAgIGNhbk1vdmUgJiYgbm9kZU9wcy5pbnNlcnRCZWZvcmUocGFyZW50RWxt
LCBvbGRTdGFydFZub2RlLmVsbSwgbm9kZU9wcy5uZXh0U2libGluZyhvbGRFbmRWbm9kZS5lbG0p
KTtcbiAgICAgICAgb2xkU3RhcnRWbm9kZSA9IG9sZENoWysrb2xkU3RhcnRJZHhdO1xuICAgICAg
ICBuZXdFbmRWbm9kZSA9IG5ld0NoWy0tbmV3RW5kSWR4XTtcbiAgICAgIH0gZWxzZSBpZiAoc2Ft
ZVZub2RlKG9sZEVuZFZub2RlLCBuZXdTdGFydFZub2RlKSkgeyAvLyBWbm9kZSBtb3ZlZCBsZWZ0
XG4gICAgICAgIHBhdGNoVm5vZGUob2xkRW5kVm5vZGUsIG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVk
Vm5vZGVRdWV1ZSk7XG4gICAgICAgIGNhbk1vdmUgJiYgbm9kZU9wcy5pbnNlcnRCZWZvcmUocGFy
ZW50RWxtLCBvbGRFbmRWbm9kZS5lbG0sIG9sZFN0YXJ0Vm5vZGUuZWxtKTtcbiAgICAgICAgb2xk
RW5kVm5vZGUgPSBvbGRDaFstLW9sZEVuZElkeF07XG4gICAgICAgIG5ld1N0YXJ0Vm5vZGUgPSBu
ZXdDaFsrK25ld1N0YXJ0SWR4XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc1VuZGVm
KG9sZEtleVRvSWR4KSkgeyBvbGRLZXlUb0lkeCA9IGNyZWF0ZUtleVRvT2xkSWR4KG9sZENoLCBv
bGRTdGFydElkeCwgb2xkRW5kSWR4KTsgfVxuICAgICAgICBpZHhJbk9sZCA9IGlzRGVmKG5ld1N0
YXJ0Vm5vZGUua2V5KSA/IG9sZEtleVRvSWR4W25ld1N0YXJ0Vm5vZGUua2V5XSA6IG51bGw7XG4g
ICAgICAgIGlmIChpc1VuZGVmKGlkeEluT2xkKSkgeyAvLyBOZXcgZWxlbWVudFxuICAgICAgICAg
IGNyZWF0ZUVsbShuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwg
b2xkU3RhcnRWbm9kZS5lbG0pO1xuICAgICAgICAgIG5ld1N0YXJ0Vm5vZGUgPSBuZXdDaFsrK25l
d1N0YXJ0SWR4XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbG1Ub01vdmUgPSBvbGRD
aFtpZHhJbk9sZF07XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAg
ICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWVsbVRvTW92
ZSkge1xuICAgICAgICAgICAgd2FybihcbiAgICAgICAgICAgICAgJ0l0IHNlZW1zIHRoZXJlIGFy
ZSBkdXBsaWNhdGUga2V5cyB0aGF0IGlzIGNhdXNpbmcgYW4gdXBkYXRlIGVycm9yLiAnICtcbiAg
ICAgICAgICAgICAgJ01ha2Ugc3VyZSBlYWNoIHYtZm9yIGl0ZW0gaGFzIGEgdW5pcXVlIGtleS4n
XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc2FtZVZub2RlKGVs
bVRvTW92ZSwgbmV3U3RhcnRWbm9kZSkpIHtcbiAgICAgICAgICAgIHBhdGNoVm5vZGUoZWxtVG9N
b3ZlLCBuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICAgICAgb2xk
Q2hbaWR4SW5PbGRdID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgY2FuTW92ZSAmJiBub2RlT3Bz
Lmluc2VydEJlZm9yZShwYXJlbnRFbG0sIGVsbVRvTW92ZS5lbG0sIG9sZFN0YXJ0Vm5vZGUuZWxt
KTtcbiAgICAgICAgICAgIG5ld1N0YXJ0Vm5vZGUgPSBuZXdDaFsrK25ld1N0YXJ0SWR4XTtcbiAg
ICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gc2FtZSBrZXkgYnV0IGRpZmZlcmVudCBl
bGVtZW50LiB0cmVhdCBhcyBuZXcgZWxlbWVudFxuICAgICAgICAgICAgY3JlYXRlRWxtKG5ld1N0
YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCBvbGRTdGFydFZub2RlLmVs
bSk7XG4gICAgICAgICAgICBuZXdTdGFydFZub2RlID0gbmV3Q2hbKytuZXdTdGFydElkeF07XG4g
ICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvbGRTdGFydElk
eCA+IG9sZEVuZElkeCkge1xuICAgICAgcmVmRWxtID0gaXNVbmRlZihuZXdDaFtuZXdFbmRJZHgg
KyAxXSkgPyBudWxsIDogbmV3Q2hbbmV3RW5kSWR4ICsgMV0uZWxtO1xuICAgICAgYWRkVm5vZGVz
KHBhcmVudEVsbSwgcmVmRWxtLCBuZXdDaCwgbmV3U3RhcnRJZHgsIG5ld0VuZElkeCwgaW5zZXJ0
ZWRWbm9kZVF1ZXVlKTtcbiAgICB9IGVsc2UgaWYgKG5ld1N0YXJ0SWR4ID4gbmV3RW5kSWR4KSB7
XG4gICAgICByZW1vdmVWbm9kZXMocGFyZW50RWxtLCBvbGRDaCwgb2xkU3RhcnRJZHgsIG9sZEVu
ZElkeCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGF0Y2hWbm9kZSAob2xkVm5vZGUsIHZu
b2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHJlbW92ZU9ubHkpIHtcbiAgICBpZiAob2xkVm5vZGUg
PT09IHZub2RlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB2YXIgZWxtID0gdm5vZGUu
ZWxtID0gb2xkVm5vZGUuZWxtO1xuXG4gICAgaWYgKGlzVHJ1ZShvbGRWbm9kZS5pc0FzeW5jUGxh
Y2Vob2xkZXIpKSB7XG4gICAgICBpZiAoaXNEZWYodm5vZGUuYXN5bmNGYWN0b3J5LnJlc29sdmVk
KSkge1xuICAgICAgICBoeWRyYXRlKG9sZFZub2RlLmVsbSwgdm5vZGUsIGluc2VydGVkVm5vZGVR
dWV1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2bm9kZS5pc0FzeW5jUGxhY2Vob2xkZXIg
PSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gcmV1c2UgZWxl
bWVudCBmb3Igc3RhdGljIHRyZWVzLlxuICAgIC8vIG5vdGUgd2Ugb25seSBkbyB0aGlzIGlmIHRo
ZSB2bm9kZSBpcyBjbG9uZWQgLVxuICAgIC8vIGlmIHRoZSBuZXcgbm9kZSBpcyBub3QgY2xvbmVk
IGl0IG1lYW5zIHRoZSByZW5kZXIgZnVuY3Rpb25zIGhhdmUgYmVlblxuICAgIC8vIHJlc2V0IGJ5
IHRoZSBob3QtcmVsb2FkLWFwaSBhbmQgd2UgbmVlZCB0byBkbyBhIHByb3BlciByZS1yZW5kZXIu
XG4gICAgaWYgKGlzVHJ1ZSh2bm9kZS5pc1N0YXRpYykgJiZcbiAgICAgIGlzVHJ1ZShvbGRWbm9k
ZS5pc1N0YXRpYykgJiZcbiAgICAgIHZub2RlLmtleSA9PT0gb2xkVm5vZGUua2V5ICYmXG4gICAg
ICAoaXNUcnVlKHZub2RlLmlzQ2xvbmVkKSB8fCBpc1RydWUodm5vZGUuaXNPbmNlKSlcbiAgICAp
IHtcbiAgICAgIHZub2RlLmNvbXBvbmVudEluc3RhbmNlID0gb2xkVm5vZGUuY29tcG9uZW50SW5z
dGFuY2U7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB2YXIgaTtcbiAgICB2YXIgZGF0YSA9
IHZub2RlLmRhdGE7XG4gICAgaWYgKGlzRGVmKGRhdGEpICYmIGlzRGVmKGkgPSBkYXRhLmhvb2sp
ICYmIGlzRGVmKGkgPSBpLnByZXBhdGNoKSkge1xuICAgICAgaShvbGRWbm9kZSwgdm5vZGUpO1xu
ICAgIH1cblxuICAgIHZhciBvbGRDaCA9IG9sZFZub2RlLmNoaWxkcmVuO1xuICAgIHZhciBjaCA9
IHZub2RlLmNoaWxkcmVuO1xuICAgIGlmIChpc0RlZihkYXRhKSAmJiBpc1BhdGNoYWJsZSh2bm9k
ZSkpIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjYnMudXBkYXRlLmxlbmd0aDsgKytpKSB7IGNi
cy51cGRhdGVbaV0ob2xkVm5vZGUsIHZub2RlKTsgfVxuICAgICAgaWYgKGlzRGVmKGkgPSBkYXRh
Lmhvb2spICYmIGlzRGVmKGkgPSBpLnVwZGF0ZSkpIHsgaShvbGRWbm9kZSwgdm5vZGUpOyB9XG4g
ICAgfVxuICAgIGlmIChpc1VuZGVmKHZub2RlLnRleHQpKSB7XG4gICAgICBpZiAoaXNEZWYob2xk
Q2gpICYmIGlzRGVmKGNoKSkge1xuICAgICAgICBpZiAob2xkQ2ggIT09IGNoKSB7IHVwZGF0ZUNo
aWxkcmVuKGVsbSwgb2xkQ2gsIGNoLCBpbnNlcnRlZFZub2RlUXVldWUsIHJlbW92ZU9ubHkpOyB9
XG4gICAgICB9IGVsc2UgaWYgKGlzRGVmKGNoKSkge1xuICAgICAgICBpZiAoaXNEZWYob2xkVm5v
ZGUudGV4dCkpIHsgbm9kZU9wcy5zZXRUZXh0Q29udGVudChlbG0sICcnKTsgfVxuICAgICAgICBh
ZGRWbm9kZXMoZWxtLCBudWxsLCBjaCwgMCwgY2gubGVuZ3RoIC0gMSwgaW5zZXJ0ZWRWbm9kZVF1
ZXVlKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNEZWYob2xkQ2gpKSB7XG4gICAgICAgIHJlbW92ZVZu
b2RlcyhlbG0sIG9sZENoLCAwLCBvbGRDaC5sZW5ndGggLSAxKTtcbiAgICAgIH0gZWxzZSBpZiAo
aXNEZWYob2xkVm5vZGUudGV4dCkpIHtcbiAgICAgICAgbm9kZU9wcy5zZXRUZXh0Q29udGVudChl
bG0sICcnKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9sZFZub2RlLnRleHQgIT09IHZub2Rl
LnRleHQpIHtcbiAgICAgIG5vZGVPcHMuc2V0VGV4dENvbnRlbnQoZWxtLCB2bm9kZS50ZXh0KTtc
biAgICB9XG4gICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICBpZiAoaXNEZWYoaSA9IGRhdGEu
aG9vaykgJiYgaXNEZWYoaSA9IGkucG9zdHBhdGNoKSkgeyBpKG9sZFZub2RlLCB2bm9kZSk7IH1c
biAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbnZva2VJbnNlcnRIb29rICh2bm9kZSwgcXVldWUs
IGluaXRpYWwpIHtcbiAgICAvLyBkZWxheSBpbnNlcnQgaG9va3MgZm9yIGNvbXBvbmVudCByb290
IG5vZGVzLCBpbnZva2UgdGhlbSBhZnRlciB0aGVcbiAgICAvLyBlbGVtZW50IGlzIHJlYWxseSBp
bnNlcnRlZFxuICAgIGlmIChpc1RydWUoaW5pdGlhbCkgJiYgaXNEZWYodm5vZGUucGFyZW50KSkg
e1xuICAgICAgdm5vZGUucGFyZW50LmRhdGEucGVuZGluZ0luc2VydCA9IHF1ZXVlO1xuICAgIH0g
ZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgKytpKSB7XG4g
ICAgICAgIHF1ZXVlW2ldLmRhdGEuaG9vay5pbnNlcnQocXVldWVbaV0pO1xuICAgICAgfVxuICAg
IH1cbiAgfVxuXG4gIHZhciBiYWlsZWQgPSBmYWxzZTtcbiAgLy8gbGlzdCBvZiBtb2R1bGVzIHRo
YXQgY2FuIHNraXAgY3JlYXRlIGhvb2sgZHVyaW5nIGh5ZHJhdGlvbiBiZWNhdXNlIHRoZXlcbiAg
Ly8gYXJlIGFscmVhZHkgcmVuZGVyZWQgb24gdGhlIGNsaWVudCBvciBoYXMgbm8gbmVlZCBmb3Ig
aW5pdGlhbGl6YXRpb25cbiAgdmFyIGlzUmVuZGVyZWRNb2R1bGUgPSBtYWtlTWFwKCdhdHRycyxz
dHlsZSxjbGFzcyxzdGF0aWNDbGFzcyxzdGF0aWNTdHlsZSxrZXknKTtcblxuICAvLyBOb3RlOiB0
aGlzIGlzIGEgYnJvd3Nlci1vbmx5IGZ1bmN0aW9uIHNvIHdlIGNhbiBhc3N1bWUgZWxtcyBhcmUg
RE9NIG5vZGVzLlxuICBmdW5jdGlvbiBoeWRyYXRlIChlbG0sIHZub2RlLCBpbnNlcnRlZFZub2Rl
UXVldWUpIHtcbiAgICBpZiAoaXNUcnVlKHZub2RlLmlzQ29tbWVudCkgJiYgaXNEZWYodm5vZGUu
YXN5bmNGYWN0b3J5KSkge1xuICAgICAgdm5vZGUuZWxtID0gZWxtO1xuICAgICAgdm5vZGUuaXNB
c3luY1BsYWNlaG9sZGVyID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIGlm
IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoIWFz
c2VydE5vZGVNYXRjaChlbG0sIHZub2RlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAg
IH1cbiAgICB9XG4gICAgdm5vZGUuZWxtID0gZWxtO1xuICAgIHZhciB0YWcgPSB2bm9kZS50YWc7
XG4gICAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICAgIHZhciBjaGlsZHJlbiA9IHZub2RlLmNo
aWxkcmVuO1xuICAgIGlmIChpc0RlZihkYXRhKSkge1xuICAgICAgaWYgKGlzRGVmKGkgPSBkYXRh
Lmhvb2spICYmIGlzRGVmKGkgPSBpLmluaXQpKSB7IGkodm5vZGUsIHRydWUgLyogaHlkcmF0aW5n
ICovKTsgfVxuICAgICAgaWYgKGlzRGVmKGkgPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSkpIHtc
biAgICAgICAgLy8gY2hpbGQgY29tcG9uZW50LiBpdCBzaG91bGQgaGF2ZSBoeWRyYXRlZCBpdHMg
b3duIHRyZWUuXG4gICAgICAgIGluaXRDb21wb25lbnQodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1
ZSk7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpc0RlZih0
YWcpKSB7XG4gICAgICBpZiAoaXNEZWYoY2hpbGRyZW4pKSB7XG4gICAgICAgIC8vIGVtcHR5IGVs
ZW1lbnQsIGFsbG93IGNsaWVudCB0byBwaWNrIHVwIGFuZCBwb3B1bGF0ZSBjaGlsZHJlblxuICAg
ICAgICBpZiAoIWVsbS5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgICAgICBjcmVhdGVDaGlsZHJl
bih2bm9kZSwgY2hpbGRyZW4sIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgIH0gZWxzZSB7
XG4gICAgICAgICAgdmFyIGNoaWxkcmVuTWF0Y2ggPSB0cnVlO1xuICAgICAgICAgIHZhciBjaGls
ZE5vZGUgPSBlbG0uZmlyc3RDaGlsZDtcbiAgICAgICAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEg
PCBjaGlsZHJlbi5sZW5ndGg7IGkkMSsrKSB7XG4gICAgICAgICAgICBpZiAoIWNoaWxkTm9kZSB8
fCAhaHlkcmF0ZShjaGlsZE5vZGUsIGNoaWxkcmVuW2kkMV0sIGluc2VydGVkVm5vZGVRdWV1ZSkp
IHtcbiAgICAgICAgICAgICAgY2hpbGRyZW5NYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICBi
cmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2hpbGROb2RlID0gY2hpbGROb2RlLm5l
eHRTaWJsaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBpZiBjaGlsZE5vZGUgaXMgbm90
IG51bGwsIGl0IG1lYW5zIHRoZSBhY3R1YWwgY2hpbGROb2RlcyBsaXN0IGlzXG4gICAgICAgICAg
Ly8gbG9uZ2VyIHRoYW4gdGhlIHZpcnR1YWwgY2hpbGRyZW4gbGlzdC5cbiAgICAgICAgICBpZiAo
IWNoaWxkcmVuTWF0Y2ggfHwgY2hpbGROb2RlKSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5l
bnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgICAgICB0eXBlb2YgY29u
c29sZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgICAgIWJhaWxlZFxuICAgICAgICAg
ICAgKSB7XG4gICAgICAgICAgICAgIGJhaWxlZCA9IHRydWU7XG4gICAgICAgICAgICAgIGNvbnNv
bGUud2FybignUGFyZW50OiAnLCBlbG0pO1xuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ01p
c21hdGNoaW5nIGNoaWxkTm9kZXMgdnMuIFZOb2RlczogJywgZWxtLmNoaWxkTm9kZXMsIGNoaWxk
cmVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAg
IH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICAg
IGZvciAodmFyIGtleSBpbiBkYXRhKSB7XG4gICAgICAgICAgaWYgKCFpc1JlbmRlcmVkTW9kdWxl
KGtleSkpIHtcbiAgICAgICAgICAgIGludm9rZUNyZWF0ZUhvb2tzKHZub2RlLCBpbnNlcnRlZFZu
b2RlUXVldWUpO1xuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAg
ICAgIH1cbiAgICB9IGVsc2UgaWYgKGVsbS5kYXRhICE9PSB2bm9kZS50ZXh0KSB7XG4gICAgICBl
bG0uZGF0YSA9IHZub2RlLnRleHQ7XG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBm
dW5jdGlvbiBhc3NlcnROb2RlTWF0Y2ggKG5vZGUsIHZub2RlKSB7XG4gICAgaWYgKGlzRGVmKHZu
b2RlLnRhZykpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHZub2RlLnRhZy5pbmRleE9mKCd2
dWUtY29tcG9uZW50JykgPT09IDAgfHxcbiAgICAgICAgdm5vZGUudGFnLnRvTG93ZXJDYXNlKCkg
PT09IChub2RlLnRhZ05hbWUgJiYgbm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkpXG4gICAgICAp
XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBub2RlLm5vZGVUeXBlID09PSAodm5vZGUuaXND
b21tZW50ID8gOCA6IDMpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHBhdGNoIChv
bGRWbm9kZSwgdm5vZGUsIGh5ZHJhdGluZywgcmVtb3ZlT25seSwgcGFyZW50RWxtLCByZWZFbG0p
IHtcbiAgICBpZiAoaXNVbmRlZih2bm9kZSkpIHtcbiAgICAgIGlmIChpc0RlZihvbGRWbm9kZSkp
IHsgaW52b2tlRGVzdHJveUhvb2sob2xkVm5vZGUpOyB9XG4gICAgICByZXR1cm5cbiAgICB9XG5c
biAgICB2YXIgaXNJbml0aWFsUGF0Y2ggPSBmYWxzZTtcbiAgICB2YXIgaW5zZXJ0ZWRWbm9kZVF1
ZXVlID0gW107XG5cbiAgICBpZiAoaXNVbmRlZihvbGRWbm9kZSkpIHtcbiAgICAgIC8vIGVtcHR5
IG1vdW50IChsaWtlbHkgYXMgY29tcG9uZW50KSwgY3JlYXRlIG5ldyByb290IGVsZW1lbnRcbiAg
ICAgIGlzSW5pdGlhbFBhdGNoID0gdHJ1ZTtcbiAgICAgIGNyZWF0ZUVsbSh2bm9kZSwgaW5zZXJ0
ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIHJlZkVsbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZh
ciBpc1JlYWxFbGVtZW50ID0gaXNEZWYob2xkVm5vZGUubm9kZVR5cGUpO1xuICAgICAgaWYgKCFp
c1JlYWxFbGVtZW50ICYmIHNhbWVWbm9kZShvbGRWbm9kZSwgdm5vZGUpKSB7XG4gICAgICAgIC8v
IHBhdGNoIGV4aXN0aW5nIHJvb3Qgbm9kZVxuICAgICAgICBwYXRjaFZub2RlKG9sZFZub2RlLCB2
bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCByZW1vdmVPbmx5KTtcbiAgICAgIH0gZWxzZSB7XG4g
ICAgICAgIGlmIChpc1JlYWxFbGVtZW50KSB7XG4gICAgICAgICAgLy8gbW91bnRpbmcgdG8gYSBy
ZWFsIGVsZW1lbnRcbiAgICAgICAgICAvLyBjaGVjayBpZiB0aGlzIGlzIHNlcnZlci1yZW5kZXJl
ZCBjb250ZW50IGFuZCBpZiB3ZSBjYW4gcGVyZm9ybVxuICAgICAgICAgIC8vIGEgc3VjY2Vzc2Z1
bCBoeWRyYXRpb24uXG4gICAgICAgICAgaWYgKG9sZFZub2RlLm5vZGVUeXBlID09PSAxICYmIG9s
ZFZub2RlLmhhc0F0dHJpYnV0ZShTU1JfQVRUUikpIHtcbiAgICAgICAgICAgIG9sZFZub2RlLnJl
bW92ZUF0dHJpYnV0ZShTU1JfQVRUUik7XG4gICAgICAgICAgICBoeWRyYXRpbmcgPSB0cnVlO1xu
ICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNUcnVlKGh5ZHJhdGluZykpIHtcbiAgICAgICAg
ICAgIGlmIChoeWRyYXRlKG9sZFZub2RlLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKSkge1xu
ICAgICAgICAgICAgICBpbnZva2VJbnNlcnRIb29rKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUs
IHRydWUpO1xuICAgICAgICAgICAgICByZXR1cm4gb2xkVm5vZGVcbiAgICAgICAgICAgIH0gZWxz
ZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAg
ICAgICB3YXJuKFxuICAgICAgICAgICAgICAgICdUaGUgY2xpZW50LXNpZGUgcmVuZGVyZWQgdmly
dHVhbCBET00gdHJlZSBpcyBub3QgbWF0Y2hpbmcgJyArXG4gICAgICAgICAgICAgICAgJ3NlcnZl
ci1yZW5kZXJlZCBjb250ZW50LiBUaGlzIGlzIGxpa2VseSBjYXVzZWQgYnkgaW5jb3JyZWN0ICcg
K1xuICAgICAgICAgICAgICAgICdIVE1MIG1hcmt1cCwgZm9yIGV4YW1wbGUgbmVzdGluZyBibG9j
ay1sZXZlbCBlbGVtZW50cyBpbnNpZGUgJyArXG4gICAgICAgICAgICAgICAgJzxwPiwgb3IgbWlz
c2luZyA8dGJvZHk+LiBCYWlsaW5nIGh5ZHJhdGlvbiBhbmQgcGVyZm9ybWluZyAnICtcbiAgICAg
ICAgICAgICAgICAnZnVsbCBjbGllbnQtc2lkZSByZW5kZXIuJ1xuICAgICAgICAgICAgICApO1xu
ICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBlaXRoZXIgbm90IHNlcnZl
ci1yZW5kZXJlZCwgb3IgaHlkcmF0aW9uIGZhaWxlZC5cbiAgICAgICAgICAvLyBjcmVhdGUgYW4g
ZW1wdHkgbm9kZSBhbmQgcmVwbGFjZSBpdFxuICAgICAgICAgIG9sZFZub2RlID0gZW1wdHlOb2Rl
QXQob2xkVm5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlcGxhY2luZyBleGlzdGluZyBl
bGVtZW50XG4gICAgICAgIHZhciBvbGRFbG0gPSBvbGRWbm9kZS5lbG07XG4gICAgICAgIHZhciBw
YXJlbnRFbG0kMSA9IG5vZGVPcHMucGFyZW50Tm9kZShvbGRFbG0pO1xuICAgICAgICBjcmVhdGVF
bG0oXG4gICAgICAgICAgdm5vZGUsXG4gICAgICAgICAgaW5zZXJ0ZWRWbm9kZVF1ZXVlLFxuICAg
ICAgICAgIC8vIGV4dHJlbWVseSByYXJlIGVkZ2UgY2FzZTogZG8gbm90IGluc2VydCBpZiBvbGQg
ZWxlbWVudCBpcyBpbiBhXG4gICAgICAgICAgLy8gbGVhdmluZyB0cmFuc2l0aW9uLiBPbmx5IGhh
cHBlbnMgd2hlbiBjb21iaW5pbmcgdHJhbnNpdGlvbiArXG4gICAgICAgICAgLy8ga2VlcC1hbGl2
ZSArIEhPQ3MuICgjNDU5MClcbiAgICAgICAgICBvbGRFbG0uX2xlYXZlQ2IgPyBudWxsIDogcGFy
ZW50RWxtJDEsXG4gICAgICAgICAgbm9kZU9wcy5uZXh0U2libGluZyhvbGRFbG0pXG4gICAgICAg
ICk7XG5cbiAgICAgICAgaWYgKGlzRGVmKHZub2RlLnBhcmVudCkpIHtcbiAgICAgICAgICAvLyBj
b21wb25lbnQgcm9vdCBlbGVtZW50IHJlcGxhY2VkLlxuICAgICAgICAgIC8vIHVwZGF0ZSBwYXJl
bnQgcGxhY2Vob2xkZXIgbm9kZSBlbGVtZW50LCByZWN1cnNpdmVseVxuICAgICAgICAgIHZhciBh
bmNlc3RvciA9IHZub2RlLnBhcmVudDtcbiAgICAgICAgICB3aGlsZSAoYW5jZXN0b3IpIHtcbiAg
ICAgICAgICAgIGFuY2VzdG9yLmVsbSA9IHZub2RlLmVsbTtcbiAgICAgICAgICAgIGFuY2VzdG9y
ID0gYW5jZXN0b3IucGFyZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNQYXRjaGFi
bGUodm5vZGUpKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNicy5jcmVhdGUu
bGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgY2JzLmNyZWF0ZVtpXShlbXB0eU5vZGUsIHZu
b2RlLnBhcmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAg
ICAgICAgaWYgKGlzRGVmKHBhcmVudEVsbSQxKSkge1xuICAgICAgICAgIHJlbW92ZVZub2Rlcyhw
YXJlbnRFbG0kMSwgW29sZFZub2RlXSwgMCwgMCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEZWYo
b2xkVm5vZGUudGFnKSkge1xuICAgICAgICAgIGludm9rZURlc3Ryb3lIb29rKG9sZFZub2RlKTtc
biAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGludm9rZUluc2VydEhvb2sodm5vZGUs
IGluc2VydGVkVm5vZGVRdWV1ZSwgaXNJbml0aWFsUGF0Y2gpO1xuICAgIHJldHVybiB2bm9kZS5l
bG1cbiAgfVxufVxuXG4vKiAgKi9cblxudmFyIGRpcmVjdGl2ZXMgPSB7XG4gIGNyZWF0ZTogdXBk
YXRlRGlyZWN0aXZlcyxcbiAgdXBkYXRlOiB1cGRhdGVEaXJlY3RpdmVzLFxuICBkZXN0cm95OiBm
dW5jdGlvbiB1bmJpbmREaXJlY3RpdmVzICh2bm9kZSkge1xuICAgIHVwZGF0ZURpcmVjdGl2ZXMo
dm5vZGUsIGVtcHR5Tm9kZSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHVwZGF0ZURpcmVjdGl2ZXMg
KG9sZFZub2RlLCB2bm9kZSkge1xuICBpZiAob2xkVm5vZGUuZGF0YS5kaXJlY3RpdmVzIHx8IHZu
b2RlLmRhdGEuZGlyZWN0aXZlcykge1xuICAgIF91cGRhdGUob2xkVm5vZGUsIHZub2RlKTtcbiAg
fVxufVxuXG5mdW5jdGlvbiBfdXBkYXRlIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgdmFyIGlzQ3Jl
YXRlID0gb2xkVm5vZGUgPT09IGVtcHR5Tm9kZTtcbiAgdmFyIGlzRGVzdHJveSA9IHZub2RlID09
PSBlbXB0eU5vZGU7XG4gIHZhciBvbGREaXJzID0gbm9ybWFsaXplRGlyZWN0aXZlcyQxKG9sZFZu
b2RlLmRhdGEuZGlyZWN0aXZlcywgb2xkVm5vZGUuY29udGV4dCk7XG4gIHZhciBuZXdEaXJzID0g
bm9ybWFsaXplRGlyZWN0aXZlcyQxKHZub2RlLmRhdGEuZGlyZWN0aXZlcywgdm5vZGUuY29udGV4
dCk7XG5cbiAgdmFyIGRpcnNXaXRoSW5zZXJ0ID0gW107XG4gIHZhciBkaXJzV2l0aFBvc3RwYXRj
aCA9IFtdO1xuXG4gIHZhciBrZXksIG9sZERpciwgZGlyO1xuICBmb3IgKGtleSBpbiBuZXdEaXJz
KSB7XG4gICAgb2xkRGlyID0gb2xkRGlyc1trZXldO1xuICAgIGRpciA9IG5ld0RpcnNba2V5XTtc
biAgICBpZiAoIW9sZERpcikge1xuICAgICAgLy8gbmV3IGRpcmVjdGl2ZSwgYmluZFxuICAgICAg
Y2FsbEhvb2skMShkaXIsICdiaW5kJywgdm5vZGUsIG9sZFZub2RlKTtcbiAgICAgIGlmIChkaXIu
ZGVmICYmIGRpci5kZWYuaW5zZXJ0ZWQpIHtcbiAgICAgICAgZGlyc1dpdGhJbnNlcnQucHVzaChk
aXIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBleGlzdGluZyBkaXJlY3RpdmUs
IHVwZGF0ZVxuICAgICAgZGlyLm9sZFZhbHVlID0gb2xkRGlyLnZhbHVlO1xuICAgICAgY2FsbEhv
b2skMShkaXIsICd1cGRhdGUnLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgICAgaWYgKGRpci5kZWYg
JiYgZGlyLmRlZi5jb21wb25lbnRVcGRhdGVkKSB7XG4gICAgICAgIGRpcnNXaXRoUG9zdHBhdGNo
LnB1c2goZGlyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZGlyc1dpdGhJbnNlcnQu
bGVuZ3RoKSB7XG4gICAgdmFyIGNhbGxJbnNlcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGRpcnNXaXRoSW5zZXJ0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNh
bGxIb29rJDEoZGlyc1dpdGhJbnNlcnRbaV0sICdpbnNlcnRlZCcsIHZub2RlLCBvbGRWbm9kZSk7
XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAoaXNDcmVhdGUpIHtcbiAgICAgIG1lcmdlVk5vZGVI
b29rKHZub2RlLmRhdGEuaG9vayB8fCAodm5vZGUuZGF0YS5ob29rID0ge30pLCAnaW5zZXJ0Jywg
Y2FsbEluc2VydCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxJbnNlcnQoKTtcbiAgICB9XG4g
IH1cblxuICBpZiAoZGlyc1dpdGhQb3N0cGF0Y2gubGVuZ3RoKSB7XG4gICAgbWVyZ2VWTm9kZUhv
b2sodm5vZGUuZGF0YS5ob29rIHx8ICh2bm9kZS5kYXRhLmhvb2sgPSB7fSksICdwb3N0cGF0Y2gn
LCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpcnNXaXRoUG9zdHBh
dGNoLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNhbGxIb29rJDEoZGlyc1dpdGhQb3N0cGF0Y2hb
aV0sICdjb21wb25lbnRVcGRhdGVkJywgdm5vZGUsIG9sZFZub2RlKTtcbiAgICAgIH1cbiAgICB9
KTtcbiAgfVxuXG4gIGlmICghaXNDcmVhdGUpIHtcbiAgICBmb3IgKGtleSBpbiBvbGREaXJzKSB7
XG4gICAgICBpZiAoIW5ld0RpcnNba2V5XSkge1xuICAgICAgICAvLyBubyBsb25nZXIgcHJlc2Vu
dCwgdW5iaW5kXG4gICAgICAgIGNhbGxIb29rJDEob2xkRGlyc1trZXldLCAndW5iaW5kJywgb2xk
Vm5vZGUsIG9sZFZub2RlLCBpc0Rlc3Ryb3kpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52
YXIgZW1wdHlNb2RpZmllcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG5mdW5jdGlvbiBub3Jt
YWxpemVEaXJlY3RpdmVzJDEgKFxuICBkaXJzLFxuICB2bVxuKSB7XG4gIHZhciByZXMgPSBPYmpl
Y3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIWRpcnMpIHtcbiAgICByZXR1cm4gcmVzXG4gIH1cbiAg
dmFyIGksIGRpcjtcbiAgZm9yIChpID0gMDsgaSA8IGRpcnMubGVuZ3RoOyBpKyspIHtcbiAgICBk
aXIgPSBkaXJzW2ldO1xuICAgIGlmICghZGlyLm1vZGlmaWVycykge1xuICAgICAgZGlyLm1vZGlm
aWVycyA9IGVtcHR5TW9kaWZpZXJzO1xuICAgIH1cbiAgICByZXNbZ2V0UmF3RGlyTmFtZShkaXIp
XSA9IGRpcjtcbiAgICBkaXIuZGVmID0gcmVzb2x2ZUFzc2V0KHZtLiRvcHRpb25zLCAnZGlyZWN0
aXZlcycsIGRpci5uYW1lLCB0cnVlKTtcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9u
IGdldFJhd0Rpck5hbWUgKGRpcikge1xuICByZXR1cm4gZGlyLnJhd05hbWUgfHwgKChkaXIubmFt
ZSkgKyBcIi5cIiArIChPYmplY3Qua2V5cyhkaXIubW9kaWZpZXJzIHx8IHt9KS5qb2luKCcuJykp
KVxufVxuXG5mdW5jdGlvbiBjYWxsSG9vayQxIChkaXIsIGhvb2ssIHZub2RlLCBvbGRWbm9kZSwg
aXNEZXN0cm95KSB7XG4gIHZhciBmbiA9IGRpci5kZWYgJiYgZGlyLmRlZltob29rXTtcbiAgaWYg
KGZuKSB7XG4gICAgdHJ5IHtcbiAgICAgIGZuKHZub2RlLmVsbSwgZGlyLCB2bm9kZSwgb2xkVm5v
ZGUsIGlzRGVzdHJveSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaGFuZGxlRXJyb3IoZSwg
dm5vZGUuY29udGV4dCwgKFwiZGlyZWN0aXZlIFwiICsgKGRpci5uYW1lKSArIFwiIFwiICsgaG9v
ayArIFwiIGhvb2tcIikpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgYmFzZU1vZHVsZXMgPSBbXG4g
IHJlZixcbiAgZGlyZWN0aXZlc1xuXTtcblxuLyogICovXG5cbmZ1bmN0aW9uIHVwZGF0ZUF0dHJz
IChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgdmFyIG9wdHMgPSB2bm9kZS5jb21wb25lbnRPcHRpb25z
O1xuICBpZiAoaXNEZWYob3B0cykgJiYgb3B0cy5DdG9yLm9wdGlvbnMuaW5oZXJpdEF0dHJzID09
PSBmYWxzZSkge1xuICAgIHJldHVyblxuICB9XG4gIGlmIChpc1VuZGVmKG9sZFZub2RlLmRhdGEu
YXR0cnMpICYmIGlzVW5kZWYodm5vZGUuZGF0YS5hdHRycykpIHtcbiAgICByZXR1cm5cbiAgfVxu
ICB2YXIga2V5LCBjdXIsIG9sZDtcbiAgdmFyIGVsbSA9IHZub2RlLmVsbTtcbiAgdmFyIG9sZEF0
dHJzID0gb2xkVm5vZGUuZGF0YS5hdHRycyB8fCB7fTtcbiAgdmFyIGF0dHJzID0gdm5vZGUuZGF0
YS5hdHRycyB8fCB7fTtcbiAgLy8gY2xvbmUgb2JzZXJ2ZWQgb2JqZWN0cywgYXMgdGhlIHVzZXIg
cHJvYmFibHkgd2FudHMgdG8gbXV0YXRlIGl0XG4gIGlmIChpc0RlZihhdHRycy5fX29iX18pKSB7
XG4gICAgYXR0cnMgPSB2bm9kZS5kYXRhLmF0dHJzID0gZXh0ZW5kKHt9LCBhdHRycyk7XG4gIH1c
blxuICBmb3IgKGtleSBpbiBhdHRycykge1xuICAgIGN1ciA9IGF0dHJzW2tleV07XG4gICAgb2xk
ID0gb2xkQXR0cnNba2V5XTtcbiAgICBpZiAob2xkICE9PSBjdXIpIHtcbiAgICAgIHNldEF0dHIo
ZWxtLCBrZXksIGN1cik7XG4gICAgfVxuICB9XG4gIC8vICM0MzkxOiBpbiBJRTksIHNldHRpbmcg
dHlwZSBjYW4gcmVzZXQgdmFsdWUgZm9yIGlucHV0W3R5cGU9cmFkaW9dXG4gIC8qIGlzdGFuYnVs
IGlnbm9yZSBpZiAqL1xuICBpZiAoaXNJRTkgJiYgYXR0cnMudmFsdWUgIT09IG9sZEF0dHJzLnZh
bHVlKSB7XG4gICAgc2V0QXR0cihlbG0sICd2YWx1ZScsIGF0dHJzLnZhbHVlKTtcbiAgfVxuICBm
b3IgKGtleSBpbiBvbGRBdHRycykge1xuICAgIGlmIChpc1VuZGVmKGF0dHJzW2tleV0pKSB7XG4g
ICAgICBpZiAoaXNYbGluayhrZXkpKSB7XG4gICAgICAgIGVsbS5yZW1vdmVBdHRyaWJ1dGVOUyh4
bGlua05TLCBnZXRYbGlua1Byb3Aoa2V5KSk7XG4gICAgICB9IGVsc2UgaWYgKCFpc0VudW1lcmF0
ZWRBdHRyKGtleSkpIHtcbiAgICAgICAgZWxtLnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgICAg
fVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRBdHRyIChlbCwga2V5LCB2YWx1ZSkge1xu
ICBpZiAoaXNCb29sZWFuQXR0cihrZXkpKSB7XG4gICAgLy8gc2V0IGF0dHJpYnV0ZSBmb3IgYmxh
bmsgdmFsdWVcbiAgICAvLyBlLmcuIDxvcHRpb24gZGlzYWJsZWQ+U2VsZWN0IG9uZTwvb3B0aW9u
PlxuICAgIGlmIChpc0ZhbHN5QXR0clZhbHVlKHZhbHVlKSkge1xuICAgICAgZWwucmVtb3ZlQXR0
cmlidXRlKGtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZShrZXksIGtl
eSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzRW51bWVyYXRlZEF0dHIoa2V5KSkge1xuICAgIGVs
LnNldEF0dHJpYnV0ZShrZXksIGlzRmFsc3lBdHRyVmFsdWUodmFsdWUpIHx8IHZhbHVlID09PSAn
ZmFsc2UnID8gJ2ZhbHNlJyA6ICd0cnVlJyk7XG4gIH0gZWxzZSBpZiAoaXNYbGluayhrZXkpKSB7
XG4gICAgaWYgKGlzRmFsc3lBdHRyVmFsdWUodmFsdWUpKSB7XG4gICAgICBlbC5yZW1vdmVBdHRy
aWJ1dGVOUyh4bGlua05TLCBnZXRYbGlua1Byb3Aoa2V5KSk7XG4gICAgfSBlbHNlIHtcbiAgICAg
IGVsLnNldEF0dHJpYnV0ZU5TKHhsaW5rTlMsIGtleSwgdmFsdWUpO1xuICAgIH1cbiAgfSBlbHNl
IHtcbiAgICBpZiAoaXNGYWxzeUF0dHJWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgIGVsLnJlbW92ZUF0
dHJpYnV0ZShrZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoa2V5LCB2
YWx1ZSk7XG4gICAgfVxuICB9XG59XG5cbnZhciBhdHRycyA9IHtcbiAgY3JlYXRlOiB1cGRhdGVB
dHRycyxcbiAgdXBkYXRlOiB1cGRhdGVBdHRyc1xufTtcblxuLyogICovXG5cbmZ1bmN0aW9uIHVw
ZGF0ZUNsYXNzIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgdmFyIGVsID0gdm5vZGUuZWxtO1xuICB2
YXIgZGF0YSA9IHZub2RlLmRhdGE7XG4gIHZhciBvbGREYXRhID0gb2xkVm5vZGUuZGF0YTtcbiAg
aWYgKFxuICAgIGlzVW5kZWYoZGF0YS5zdGF0aWNDbGFzcykgJiZcbiAgICBpc1VuZGVmKGRhdGEu
Y2xhc3MpICYmIChcbiAgICAgIGlzVW5kZWYob2xkRGF0YSkgfHwgKFxuICAgICAgICBpc1VuZGVm
KG9sZERhdGEuc3RhdGljQ2xhc3MpICYmXG4gICAgICAgIGlzVW5kZWYob2xkRGF0YS5jbGFzcylc
biAgICAgIClcbiAgICApXG4gICkge1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIGNscyA9IGdl
bkNsYXNzRm9yVm5vZGUodm5vZGUpO1xuXG4gIC8vIGhhbmRsZSB0cmFuc2l0aW9uIGNsYXNzZXNc
biAgdmFyIHRyYW5zaXRpb25DbGFzcyA9IGVsLl90cmFuc2l0aW9uQ2xhc3NlcztcbiAgaWYgKGlz
RGVmKHRyYW5zaXRpb25DbGFzcykpIHtcbiAgICBjbHMgPSBjb25jYXQoY2xzLCBzdHJpbmdpZnlD
bGFzcyh0cmFuc2l0aW9uQ2xhc3MpKTtcbiAgfVxuXG4gIC8vIHNldCB0aGUgY2xhc3NcbiAgaWYg
KGNscyAhPT0gZWwuX3ByZXZDbGFzcykge1xuICAgIGVsLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCBj
bHMpO1xuICAgIGVsLl9wcmV2Q2xhc3MgPSBjbHM7XG4gIH1cbn1cblxudmFyIGtsYXNzID0ge1xu
ICBjcmVhdGU6IHVwZGF0ZUNsYXNzLFxuICB1cGRhdGU6IHVwZGF0ZUNsYXNzXG59O1xuXG4vKiAg
Ki9cblxudmFyIHZhbGlkRGl2aXNpb25DaGFyUkUgPSAvW1xcdykuK1xcLV8kXFxdXS87XG5cbmZ1
bmN0aW9uIHBhcnNlRmlsdGVycyAoZXhwKSB7XG4gIHZhciBpblNpbmdsZSA9IGZhbHNlO1xuICB2
YXIgaW5Eb3VibGUgPSBmYWxzZTtcbiAgdmFyIGluVGVtcGxhdGVTdHJpbmcgPSBmYWxzZTtcbiAg
dmFyIGluUmVnZXggPSBmYWxzZTtcbiAgdmFyIGN1cmx5ID0gMDtcbiAgdmFyIHNxdWFyZSA9IDA7
XG4gIHZhciBwYXJlbiA9IDA7XG4gIHZhciBsYXN0RmlsdGVySW5kZXggPSAwO1xuICB2YXIgYywg
cHJldiwgaSwgZXhwcmVzc2lvbiwgZmlsdGVycztcblxuICBmb3IgKGkgPSAwOyBpIDwgZXhwLmxl
bmd0aDsgaSsrKSB7XG4gICAgcHJldiA9IGM7XG4gICAgYyA9IGV4cC5jaGFyQ29kZUF0KGkpO1xu
ICAgIGlmIChpblNpbmdsZSkge1xuICAgICAgaWYgKGMgPT09IDB4MjcgJiYgcHJldiAhPT0gMHg1
QykgeyBpblNpbmdsZSA9IGZhbHNlOyB9XG4gICAgfSBlbHNlIGlmIChpbkRvdWJsZSkge1xuICAg
ICAgaWYgKGMgPT09IDB4MjIgJiYgcHJldiAhPT0gMHg1QykgeyBpbkRvdWJsZSA9IGZhbHNlOyB9
XG4gICAgfSBlbHNlIGlmIChpblRlbXBsYXRlU3RyaW5nKSB7XG4gICAgICBpZiAoYyA9PT0gMHg2
MCAmJiBwcmV2ICE9PSAweDVDKSB7IGluVGVtcGxhdGVTdHJpbmcgPSBmYWxzZTsgfVxuICAgIH0g
ZWxzZSBpZiAoaW5SZWdleCkge1xuICAgICAgaWYgKGMgPT09IDB4MmYgJiYgcHJldiAhPT0gMHg1
QykgeyBpblJlZ2V4ID0gZmFsc2U7IH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgYyA9PT0gMHg3
QyAmJiAvLyBwaXBlXG4gICAgICBleHAuY2hhckNvZGVBdChpICsgMSkgIT09IDB4N0MgJiZcbiAg
ICAgIGV4cC5jaGFyQ29kZUF0KGkgLSAxKSAhPT0gMHg3QyAmJlxuICAgICAgIWN1cmx5ICYmICFz
cXVhcmUgJiYgIXBhcmVuXG4gICAgKSB7XG4gICAgICBpZiAoZXhwcmVzc2lvbiA9PT0gdW5kZWZp
bmVkKSB7XG4gICAgICAgIC8vIGZpcnN0IGZpbHRlciwgZW5kIG9mIGV4cHJlc3Npb25cbiAgICAg
ICAgbGFzdEZpbHRlckluZGV4ID0gaSArIDE7XG4gICAgICAgIGV4cHJlc3Npb24gPSBleHAuc2xp
Y2UoMCwgaSkudHJpbSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHVzaEZpbHRlcigpO1xu
ICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzd2l0Y2ggKGMpIHtcbiAgICAgICAgY2FzZSAw
eDIyOiBpbkRvdWJsZSA9IHRydWU7IGJyZWFrICAgICAgICAgLy8gXCJcbiAgICAgICAgY2FzZSAw
eDI3OiBpblNpbmdsZSA9IHRydWU7IGJyZWFrICAgICAgICAgLy8gJ1xuICAgICAgICBjYXNlIDB4
NjA6IGluVGVtcGxhdGVTdHJpbmcgPSB0cnVlOyBicmVhayAvLyBgXG4gICAgICAgIGNhc2UgMHgy
ODogcGFyZW4rKzsgYnJlYWsgICAgICAgICAgICAgICAgIC8vIChcbiAgICAgICAgY2FzZSAweDI5
OiBwYXJlbi0tOyBicmVhayAgICAgICAgICAgICAgICAgLy8gKVxuICAgICAgICBjYXNlIDB4NUI6
IHNxdWFyZSsrOyBicmVhayAgICAgICAgICAgICAgICAvLyBbXG4gICAgICAgIGNhc2UgMHg1RDog
c3F1YXJlLS07IGJyZWFrICAgICAgICAgICAgICAgIC8vIF1cbiAgICAgICAgY2FzZSAweDdCOiBj
dXJseSsrOyBicmVhayAgICAgICAgICAgICAgICAgLy8ge1xuICAgICAgICBjYXNlIDB4N0Q6IGN1
cmx5LS07IGJyZWFrICAgICAgICAgICAgICAgICAvLyB9XG4gICAgICB9XG4gICAgICBpZiAoYyA9
PT0gMHgyZikgeyAvLyAvXG4gICAgICAgIHZhciBqID0gaSAtIDE7XG4gICAgICAgIHZhciBwID0g
KHZvaWQgMCk7XG4gICAgICAgIC8vIGZpbmQgZmlyc3Qgbm9uLXdoaXRlc3BhY2UgcHJldiBjaGFy
XG4gICAgICAgIGZvciAoOyBqID49IDA7IGotLSkge1xuICAgICAgICAgIHAgPSBleHAuY2hhckF0
KGopO1xuICAgICAgICAgIGlmIChwICE9PSAnICcpIHsgYnJlYWsgfVxuICAgICAgICB9XG4gICAg
ICAgIGlmICghcCB8fCAhdmFsaWREaXZpc2lvbkNoYXJSRS50ZXN0KHApKSB7XG4gICAgICAgICAg
aW5SZWdleCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAo
ZXhwcmVzc2lvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZXhwcmVzc2lvbiA9IGV4cC5zbGljZSgw
LCBpKS50cmltKCk7XG4gIH0gZWxzZSBpZiAobGFzdEZpbHRlckluZGV4ICE9PSAwKSB7XG4gICAg
cHVzaEZpbHRlcigpO1xuICB9XG5cbiAgZnVuY3Rpb24gcHVzaEZpbHRlciAoKSB7XG4gICAgKGZp
bHRlcnMgfHwgKGZpbHRlcnMgPSBbXSkpLnB1c2goZXhwLnNsaWNlKGxhc3RGaWx0ZXJJbmRleCwg
aSkudHJpbSgpKTtcbiAgICBsYXN0RmlsdGVySW5kZXggPSBpICsgMTtcbiAgfVxuXG4gIGlmIChm
aWx0ZXJzKSB7XG4gICAgZm9yIChpID0gMDsgaSA8IGZpbHRlcnMubGVuZ3RoOyBpKyspIHtcbiAg
ICAgIGV4cHJlc3Npb24gPSB3cmFwRmlsdGVyKGV4cHJlc3Npb24sIGZpbHRlcnNbaV0pO1xuICAg
IH1cbiAgfVxuXG4gIHJldHVybiBleHByZXNzaW9uXG59XG5cbmZ1bmN0aW9uIHdyYXBGaWx0ZXIg
KGV4cCwgZmlsdGVyKSB7XG4gIHZhciBpID0gZmlsdGVyLmluZGV4T2YoJygnKTtcbiAgaWYgKGkg
PCAwKSB7XG4gICAgLy8gX2Y6IHJlc29sdmVGaWx0ZXJcbiAgICByZXR1cm4gKFwiX2YoXFxcIlwi
ICsgZmlsdGVyICsgXCJcXFwiKShcIiArIGV4cCArIFwiKVwiKVxuICB9IGVsc2Uge1xuICAgIHZh
ciBuYW1lID0gZmlsdGVyLnNsaWNlKDAsIGkpO1xuICAgIHZhciBhcmdzID0gZmlsdGVyLnNsaWNl
KGkgKyAxKTtcbiAgICByZXR1cm4gKFwiX2YoXFxcIlwiICsgbmFtZSArIFwiXFxcIikoXCIgKyBl
eHAgKyBcIixcIiArIGFyZ3MpXG4gIH1cbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGJhc2VXYXJu
IChtc2cpIHtcbiAgY29uc29sZS5lcnJvcigoXCJbVnVlIGNvbXBpbGVyXTogXCIgKyBtc2cpKTtc
bn1cblxuZnVuY3Rpb24gcGx1Y2tNb2R1bGVGdW5jdGlvbiAoXG4gIG1vZHVsZXMsXG4gIGtleVxu
KSB7XG4gIHJldHVybiBtb2R1bGVzXG4gICAgPyBtb2R1bGVzLm1hcChmdW5jdGlvbiAobSkgeyBy
ZXR1cm4gbVtrZXldOyB9KS5maWx0ZXIoZnVuY3Rpb24gKF8pIHsgcmV0dXJuIF87IH0pXG4gICAg
OiBbXVxufVxuXG5mdW5jdGlvbiBhZGRQcm9wIChlbCwgbmFtZSwgdmFsdWUpIHtcbiAgKGVsLnBy
b3BzIHx8IChlbC5wcm9wcyA9IFtdKSkucHVzaCh7IG5hbWU6IG5hbWUsIHZhbHVlOiB2YWx1ZSB9
KTtcbn1cblxuZnVuY3Rpb24gYWRkQXR0ciAoZWwsIG5hbWUsIHZhbHVlKSB7XG4gIChlbC5hdHRy
cyB8fCAoZWwuYXR0cnMgPSBbXSkpLnB1c2goeyBuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWUgfSk7
XG59XG5cbmZ1bmN0aW9uIGFkZERpcmVjdGl2ZSAoXG4gIGVsLFxuICBuYW1lLFxuICByYXdOYW1l
LFxuICB2YWx1ZSxcbiAgYXJnLFxuICBtb2RpZmllcnNcbikge1xuICAoZWwuZGlyZWN0aXZlcyB8
fCAoZWwuZGlyZWN0aXZlcyA9IFtdKSkucHVzaCh7IG5hbWU6IG5hbWUsIHJhd05hbWU6IHJhd05h
bWUsIHZhbHVlOiB2YWx1ZSwgYXJnOiBhcmcsIG1vZGlmaWVyczogbW9kaWZpZXJzIH0pO1xufVxu
XG5mdW5jdGlvbiBhZGRIYW5kbGVyIChcbiAgZWwsXG4gIG5hbWUsXG4gIHZhbHVlLFxuICBtb2Rp
ZmllcnMsXG4gIGltcG9ydGFudCxcbiAgd2FyblxuKSB7XG4gIC8vIHdhcm4gcHJldmVudCBhbmQg
cGFzc2l2ZSBtb2RpZmllclxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKFxuICAg
IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybiAmJlxuICAgIG1v
ZGlmaWVycyAmJiBtb2RpZmllcnMucHJldmVudCAmJiBtb2RpZmllcnMucGFzc2l2ZVxuICApIHtc
biAgICB3YXJuKFxuICAgICAgJ3Bhc3NpdmUgYW5kIHByZXZlbnQgY2FuXFwndCBiZSB1c2VkIHRv
Z2V0aGVyLiAnICtcbiAgICAgICdQYXNzaXZlIGhhbmRsZXIgY2FuXFwndCBwcmV2ZW50IGRlZmF1
bHQgZXZlbnQuJ1xuICAgICk7XG4gIH1cbiAgLy8gY2hlY2sgY2FwdHVyZSBtb2RpZmllclxuICBp
ZiAobW9kaWZpZXJzICYmIG1vZGlmaWVycy5jYXB0dXJlKSB7XG4gICAgZGVsZXRlIG1vZGlmaWVy
cy5jYXB0dXJlO1xuICAgIG5hbWUgPSAnIScgKyBuYW1lOyAvLyBtYXJrIHRoZSBldmVudCBhcyBj
YXB0dXJlZFxuICB9XG4gIGlmIChtb2RpZmllcnMgJiYgbW9kaWZpZXJzLm9uY2UpIHtcbiAgICBk
ZWxldGUgbW9kaWZpZXJzLm9uY2U7XG4gICAgbmFtZSA9ICd+JyArIG5hbWU7IC8vIG1hcmsgdGhl
IGV2ZW50IGFzIG9uY2VcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKG1v
ZGlmaWVycyAmJiBtb2RpZmllcnMucGFzc2l2ZSkge1xuICAgIGRlbGV0ZSBtb2RpZmllcnMucGFz
c2l2ZTtcbiAgICBuYW1lID0gJyYnICsgbmFtZTsgLy8gbWFyayB0aGUgZXZlbnQgYXMgcGFzc2l2
ZVxuICB9XG4gIHZhciBldmVudHM7XG4gIGlmIChtb2RpZmllcnMgJiYgbW9kaWZpZXJzLm5hdGl2
ZSkge1xuICAgIGRlbGV0ZSBtb2RpZmllcnMubmF0aXZlO1xuICAgIGV2ZW50cyA9IGVsLm5hdGl2
ZUV2ZW50cyB8fCAoZWwubmF0aXZlRXZlbnRzID0ge30pO1xuICB9IGVsc2Uge1xuICAgIGV2ZW50
cyA9IGVsLmV2ZW50cyB8fCAoZWwuZXZlbnRzID0ge30pO1xuICB9XG4gIHZhciBuZXdIYW5kbGVy
ID0geyB2YWx1ZTogdmFsdWUsIG1vZGlmaWVyczogbW9kaWZpZXJzIH07XG4gIHZhciBoYW5kbGVy
cyA9IGV2ZW50c1tuYW1lXTtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChBcnJh
eS5pc0FycmF5KGhhbmRsZXJzKSkge1xuICAgIGltcG9ydGFudCA/IGhhbmRsZXJzLnVuc2hpZnQo
bmV3SGFuZGxlcikgOiBoYW5kbGVycy5wdXNoKG5ld0hhbmRsZXIpO1xuICB9IGVsc2UgaWYgKGhh
bmRsZXJzKSB7XG4gICAgZXZlbnRzW25hbWVdID0gaW1wb3J0YW50ID8gW25ld0hhbmRsZXIsIGhh
bmRsZXJzXSA6IFtoYW5kbGVycywgbmV3SGFuZGxlcl07XG4gIH0gZWxzZSB7XG4gICAgZXZlbnRz
W25hbWVdID0gbmV3SGFuZGxlcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRCaW5kaW5nQXR0ciAo
XG4gIGVsLFxuICBuYW1lLFxuICBnZXRTdGF0aWNcbikge1xuICB2YXIgZHluYW1pY1ZhbHVlID1c
biAgICBnZXRBbmRSZW1vdmVBdHRyKGVsLCAnOicgKyBuYW1lKSB8fFxuICAgIGdldEFuZFJlbW92
ZUF0dHIoZWwsICd2LWJpbmQ6JyArIG5hbWUpO1xuICBpZiAoZHluYW1pY1ZhbHVlICE9IG51bGwp
IHtcbiAgICByZXR1cm4gcGFyc2VGaWx0ZXJzKGR5bmFtaWNWYWx1ZSlcbiAgfSBlbHNlIGlmIChn
ZXRTdGF0aWMgIT09IGZhbHNlKSB7XG4gICAgdmFyIHN0YXRpY1ZhbHVlID0gZ2V0QW5kUmVtb3Zl
QXR0cihlbCwgbmFtZSk7XG4gICAgaWYgKHN0YXRpY1ZhbHVlICE9IG51bGwpIHtcbiAgICAgIHJl
dHVybiBKU09OLnN0cmluZ2lmeShzdGF0aWNWYWx1ZSlcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rp
b24gZ2V0QW5kUmVtb3ZlQXR0ciAoZWwsIG5hbWUpIHtcbiAgdmFyIHZhbDtcbiAgaWYgKCh2YWwg
PSBlbC5hdHRyc01hcFtuYW1lXSkgIT0gbnVsbCkge1xuICAgIHZhciBsaXN0ID0gZWwuYXR0cnNM
aXN0O1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gbGlzdC5sZW5ndGg7IGkgPCBsOyBpKyspIHtc
biAgICAgIGlmIChsaXN0W2ldLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgbGlzdC5zcGxpY2Uo
aSwgMSk7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWxc
bn1cblxuLyogICovXG5cbi8qKlxuICogQ3Jvc3MtcGxhdGZvcm0gY29kZSBnZW5lcmF0aW9uIGZv
ciBjb21wb25lbnQgdi1tb2RlbFxuICovXG5mdW5jdGlvbiBnZW5Db21wb25lbnRNb2RlbCAoXG4g
IGVsLFxuICB2YWx1ZSxcbiAgbW9kaWZpZXJzXG4pIHtcbiAgdmFyIHJlZiA9IG1vZGlmaWVycyB8
fCB7fTtcbiAgdmFyIG51bWJlciA9IHJlZi5udW1iZXI7XG4gIHZhciB0cmltID0gcmVmLnRyaW07
XG5cbiAgdmFyIGJhc2VWYWx1ZUV4cHJlc3Npb24gPSAnJCR2JztcbiAgdmFyIHZhbHVlRXhwcmVz
c2lvbiA9IGJhc2VWYWx1ZUV4cHJlc3Npb247XG4gIGlmICh0cmltKSB7XG4gICAgdmFsdWVFeHBy
ZXNzaW9uID1cbiAgICAgIFwiKHR5cGVvZiBcIiArIGJhc2VWYWx1ZUV4cHJlc3Npb24gKyBcIiA9
PT0gJ3N0cmluZydcIiArXG4gICAgICAgIFwiPyBcIiArIGJhc2VWYWx1ZUV4cHJlc3Npb24gKyBc
Ii50cmltKClcIiArXG4gICAgICAgIFwiOiBcIiArIGJhc2VWYWx1ZUV4cHJlc3Npb24gKyBcIilc
IjtcbiAgfVxuICBpZiAobnVtYmVyKSB7XG4gICAgdmFsdWVFeHByZXNzaW9uID0gXCJfbihcIiAr
IHZhbHVlRXhwcmVzc2lvbiArIFwiKVwiO1xuICB9XG4gIHZhciBhc3NpZ25tZW50ID0gZ2VuQXNz
aWdubWVudENvZGUodmFsdWUsIHZhbHVlRXhwcmVzc2lvbik7XG5cbiAgZWwubW9kZWwgPSB7XG4g
ICAgdmFsdWU6IChcIihcIiArIHZhbHVlICsgXCIpXCIpLFxuICAgIGV4cHJlc3Npb246IChcIlxc
XCJcIiArIHZhbHVlICsgXCJcXFwiXCIpLFxuICAgIGNhbGxiYWNrOiAoXCJmdW5jdGlvbiAoXCIg
KyBiYXNlVmFsdWVFeHByZXNzaW9uICsgXCIpIHtcIiArIGFzc2lnbm1lbnQgKyBcIn1cIilcbiAg
fTtcbn1cblxuLyoqXG4gKiBDcm9zcy1wbGF0Zm9ybSBjb2RlZ2VuIGhlbHBlciBmb3IgZ2VuZXJh
dGluZyB2LW1vZGVsIHZhbHVlIGFzc2lnbm1lbnQgY29kZS5cbiAqL1xuZnVuY3Rpb24gZ2VuQXNz
aWdubWVudENvZGUgKFxuICB2YWx1ZSxcbiAgYXNzaWdubWVudFxuKSB7XG4gIHZhciBtb2RlbFJz
ID0gcGFyc2VNb2RlbCh2YWx1ZSk7XG4gIGlmIChtb2RlbFJzLmlkeCA9PT0gbnVsbCkge1xuICAg
IHJldHVybiAodmFsdWUgKyBcIj1cIiArIGFzc2lnbm1lbnQpXG4gIH0gZWxzZSB7XG4gICAgcmV0
dXJuIChcIiRzZXQoXCIgKyAobW9kZWxScy5leHApICsgXCIsIFwiICsgKG1vZGVsUnMuaWR4KSAr
IFwiLCBcIiArIGFzc2lnbm1lbnQgKyBcIilcIilcbiAgfVxufVxuXG4vKipcbiAqIHBhcnNlIGRp
cmVjdGl2ZSBtb2RlbCB0byBkbyB0aGUgYXJyYXkgdXBkYXRlIHRyYW5zZm9ybS4gYVtpZHhdID0g
dmFsID0+ICQkYS5zcGxpY2UoJCRpZHgsIDEsIHZhbClcbiAqXG4gKiBmb3IgbG9vcCBwb3NzaWJs
ZSBjYXNlczpcbiAqXG4gKiAtIHRlc3RcbiAqIC0gdGVzdFtpZHhdXG4gKiAtIHRlc3RbdGVzdDFb
aWR4XV1cbiAqIC0gdGVzdFtcImFcIl1baWR4XVxuICogLSB4eHgudGVzdFthW2FdLnRlc3QxW2lk
eF1dXG4gKiAtIHRlc3QueHh4LmFbXCJhc2FcIl1bdGVzdDFbaWR4XV1cbiAqXG4gKi9cblxudmFy
IGxlbjtcbnZhciBzdHI7XG52YXIgY2hyO1xudmFyIGluZGV4JDE7XG52YXIgZXhwcmVzc2lvblBv
cztcbnZhciBleHByZXNzaW9uRW5kUG9zO1xuXG5mdW5jdGlvbiBwYXJzZU1vZGVsICh2YWwpIHtc
biAgc3RyID0gdmFsO1xuICBsZW4gPSBzdHIubGVuZ3RoO1xuICBpbmRleCQxID0gZXhwcmVzc2lv
blBvcyA9IGV4cHJlc3Npb25FbmRQb3MgPSAwO1xuXG4gIGlmICh2YWwuaW5kZXhPZignWycpIDwg
MCB8fCB2YWwubGFzdEluZGV4T2YoJ10nKSA8IGxlbiAtIDEpIHtcbiAgICByZXR1cm4ge1xuICAg
ICAgZXhwOiB2YWwsXG4gICAgICBpZHg6IG51bGxcbiAgICB9XG4gIH1cblxuICB3aGlsZSAoIWVv
ZigpKSB7XG4gICAgY2hyID0gbmV4dCgpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xu
ICAgIGlmIChpc1N0cmluZ1N0YXJ0KGNocikpIHtcbiAgICAgIHBhcnNlU3RyaW5nKGNocik7XG4g
ICAgfSBlbHNlIGlmIChjaHIgPT09IDB4NUIpIHtcbiAgICAgIHBhcnNlQnJhY2tldChjaHIpO1xu
ICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZXhwOiB2YWwuc3Vic3RyaW5nKDAsIGV4cHJl
c3Npb25Qb3MpLFxuICAgIGlkeDogdmFsLnN1YnN0cmluZyhleHByZXNzaW9uUG9zICsgMSwgZXhw
cmVzc2lvbkVuZFBvcylcbiAgfVxufVxuXG5mdW5jdGlvbiBuZXh0ICgpIHtcbiAgcmV0dXJuIHN0
ci5jaGFyQ29kZUF0KCsraW5kZXgkMSlcbn1cblxuZnVuY3Rpb24gZW9mICgpIHtcbiAgcmV0dXJu
IGluZGV4JDEgPj0gbGVuXG59XG5cbmZ1bmN0aW9uIGlzU3RyaW5nU3RhcnQgKGNocikge1xuICBy
ZXR1cm4gY2hyID09PSAweDIyIHx8IGNociA9PT0gMHgyN1xufVxuXG5mdW5jdGlvbiBwYXJzZUJy
YWNrZXQgKGNocikge1xuICB2YXIgaW5CcmFja2V0ID0gMTtcbiAgZXhwcmVzc2lvblBvcyA9IGlu
ZGV4JDE7XG4gIHdoaWxlICghZW9mKCkpIHtcbiAgICBjaHIgPSBuZXh0KCk7XG4gICAgaWYgKGlz
U3RyaW5nU3RhcnQoY2hyKSkge1xuICAgICAgcGFyc2VTdHJpbmcoY2hyKTtcbiAgICAgIGNvbnRp
bnVlXG4gICAgfVxuICAgIGlmIChjaHIgPT09IDB4NUIpIHsgaW5CcmFja2V0Kys7IH1cbiAgICBp
ZiAoY2hyID09PSAweDVEKSB7IGluQnJhY2tldC0tOyB9XG4gICAgaWYgKGluQnJhY2tldCA9PT0g
MCkge1xuICAgICAgZXhwcmVzc2lvbkVuZFBvcyA9IGluZGV4JDE7XG4gICAgICBicmVha1xuICAg
IH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVN0cmluZyAoY2hyKSB7XG4gIHZhciBzdHJpbmdR
dW90ZSA9IGNocjtcbiAgd2hpbGUgKCFlb2YoKSkge1xuICAgIGNociA9IG5leHQoKTtcbiAgICBp
ZiAoY2hyID09PSBzdHJpbmdRdW90ZSkge1xuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cbn1cblxu
LyogICovXG5cbnZhciB3YXJuJDE7XG5cbi8vIGluIHNvbWUgY2FzZXMsIHRoZSBldmVudCB1c2Vk
IGhhcyB0byBiZSBkZXRlcm1pbmVkIGF0IHJ1bnRpbWVcbi8vIHNvIHdlIHVzZWQgc29tZSByZXNl
cnZlZCB0b2tlbnMgZHVyaW5nIGNvbXBpbGUuXG52YXIgUkFOR0VfVE9LRU4gPSAnX19yJztcbnZh
ciBDSEVDS0JPWF9SQURJT19UT0tFTiA9ICdfX2MnO1xuXG5mdW5jdGlvbiBtb2RlbCAoXG4gIGVs
LFxuICBkaXIsXG4gIF93YXJuXG4pIHtcbiAgd2FybiQxID0gX3dhcm47XG4gIHZhciB2YWx1ZSA9
IGRpci52YWx1ZTtcbiAgdmFyIG1vZGlmaWVycyA9IGRpci5tb2RpZmllcnM7XG4gIHZhciB0YWcg
PSBlbC50YWc7XG4gIHZhciB0eXBlID0gZWwuYXR0cnNNYXAudHlwZTtcblxuICBpZiAocHJvY2Vz
cy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHZhciBkeW5hbWljVHlwZSA9
IGVsLmF0dHJzTWFwWyd2LWJpbmQ6dHlwZSddIHx8IGVsLmF0dHJzTWFwWyc6dHlwZSddO1xuICAg
IGlmICh0YWcgPT09ICdpbnB1dCcgJiYgZHluYW1pY1R5cGUpIHtcbiAgICAgIHdhcm4kMShcbiAg
ICAgICAgXCI8aW5wdXQgOnR5cGU9XFxcIlwiICsgZHluYW1pY1R5cGUgKyBcIlxcXCIgdi1tb2Rl
bD1cXFwiXCIgKyB2YWx1ZSArIFwiXFxcIj46XFxuXCIgK1xuICAgICAgICBcInYtbW9kZWwgZG9l
cyBub3Qgc3VwcG9ydCBkeW5hbWljIGlucHV0IHR5cGVzLiBVc2Ugdi1pZiBicmFuY2hlcyBpbnN0
ZWFkLlwiXG4gICAgICApO1xuICAgIH1cbiAgICAvLyBpbnB1dHMgd2l0aCB0eXBlPVwiZmlsZVwi
IGFyZSByZWFkIG9ubHkgYW5kIHNldHRpbmcgdGhlIGlucHV0J3NcbiAgICAvLyB2YWx1ZSB3aWxs
IHRocm93IGFuIGVycm9yLlxuICAgIGlmICh0YWcgPT09ICdpbnB1dCcgJiYgdHlwZSA9PT0gJ2Zp
bGUnKSB7XG4gICAgICB3YXJuJDEoXG4gICAgICAgIFwiPFwiICsgKGVsLnRhZykgKyBcIiB2LW1v
ZGVsPVxcXCJcIiArIHZhbHVlICsgXCJcXFwiIHR5cGU9XFxcImZpbGVcXFwiPjpcXG5cIiArXG4g
ICAgICAgIFwiRmlsZSBpbnB1dHMgYXJlIHJlYWQgb25seS4gVXNlIGEgdi1vbjpjaGFuZ2UgbGlz
dGVuZXIgaW5zdGVhZC5cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZWwuY29tcG9u
ZW50KSB7XG4gICAgZ2VuQ29tcG9uZW50TW9kZWwoZWwsIHZhbHVlLCBtb2RpZmllcnMpO1xuICAg
IC8vIGNvbXBvbmVudCB2LW1vZGVsIGRvZXNuJ3QgbmVlZCBleHRyYSBydW50aW1lXG4gICAgcmV0
dXJuIGZhbHNlXG4gIH0gZWxzZSBpZiAodGFnID09PSAnc2VsZWN0Jykge1xuICAgIGdlblNlbGVj
dChlbCwgdmFsdWUsIG1vZGlmaWVycyk7XG4gIH0gZWxzZSBpZiAodGFnID09PSAnaW5wdXQnICYm
IHR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICBnZW5DaGVja2JveE1vZGVsKGVsLCB2YWx1ZSwg
bW9kaWZpZXJzKTtcbiAgfSBlbHNlIGlmICh0YWcgPT09ICdpbnB1dCcgJiYgdHlwZSA9PT0gJ3Jh
ZGlvJykge1xuICAgIGdlblJhZGlvTW9kZWwoZWwsIHZhbHVlLCBtb2RpZmllcnMpO1xuICB9IGVs
c2UgaWYgKHRhZyA9PT0gJ2lucHV0JyB8fCB0YWcgPT09ICd0ZXh0YXJlYScpIHtcbiAgICBnZW5E
ZWZhdWx0TW9kZWwoZWwsIHZhbHVlLCBtb2RpZmllcnMpO1xuICB9IGVsc2UgaWYgKCFjb25maWcu
aXNSZXNlcnZlZFRhZyh0YWcpKSB7XG4gICAgZ2VuQ29tcG9uZW50TW9kZWwoZWwsIHZhbHVlLCBt
b2RpZmllcnMpO1xuICAgIC8vIGNvbXBvbmVudCB2LW1vZGVsIGRvZXNuJ3QgbmVlZCBleHRyYSBy
dW50aW1lXG4gICAgcmV0dXJuIGZhbHNlXG4gIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9F
TlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHdhcm4kMShcbiAgICAgIFwiPFwiICsgKGVsLnRh
ZykgKyBcIiB2LW1vZGVsPVxcXCJcIiArIHZhbHVlICsgXCJcXFwiPjogXCIgK1xuICAgICAgXCJ2
LW1vZGVsIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBlbGVtZW50IHR5cGUuIFwiICtcbiAgICAg
ICdJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBjb250ZW50ZWRpdGFibGUsIGl0XFwncyByZWNvbW1l
bmRlZCB0byAnICtcbiAgICAgICd3cmFwIGEgbGlicmFyeSBkZWRpY2F0ZWQgZm9yIHRoYXQgcHVy
cG9zZSBpbnNpZGUgYSBjdXN0b20gY29tcG9uZW50LidcbiAgICApO1xuICB9XG5cbiAgLy8gZW5z
dXJlIHJ1bnRpbWUgZGlyZWN0aXZlIG1ldGFkYXRhXG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0
aW9uIGdlbkNoZWNrYm94TW9kZWwgKFxuICBlbCxcbiAgdmFsdWUsXG4gIG1vZGlmaWVyc1xuKSB7
XG4gIHZhciBudW1iZXIgPSBtb2RpZmllcnMgJiYgbW9kaWZpZXJzLm51bWJlcjtcbiAgdmFyIHZh
bHVlQmluZGluZyA9IGdldEJpbmRpbmdBdHRyKGVsLCAndmFsdWUnKSB8fCAnbnVsbCc7XG4gIHZh
ciB0cnVlVmFsdWVCaW5kaW5nID0gZ2V0QmluZGluZ0F0dHIoZWwsICd0cnVlLXZhbHVlJykgfHwg
J3RydWUnO1xuICB2YXIgZmFsc2VWYWx1ZUJpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ2Zh
bHNlLXZhbHVlJykgfHwgJ2ZhbHNlJztcbiAgYWRkUHJvcChlbCwgJ2NoZWNrZWQnLFxuICAgIFwi
QXJyYXkuaXNBcnJheShcIiArIHZhbHVlICsgXCIpXCIgK1xuICAgICAgXCI/X2koXCIgKyB2YWx1
ZSArIFwiLFwiICsgdmFsdWVCaW5kaW5nICsgXCIpPi0xXCIgKyAoXG4gICAgICAgIHRydWVWYWx1
ZUJpbmRpbmcgPT09ICd0cnVlJ1xuICAgICAgICAgID8gKFwiOihcIiArIHZhbHVlICsgXCIpXCIp
XG4gICAgICAgICAgOiAoXCI6X3EoXCIgKyB2YWx1ZSArIFwiLFwiICsgdHJ1ZVZhbHVlQmluZGlu
ZyArIFwiKVwiKVxuICAgICAgKVxuICApO1xuICBhZGRIYW5kbGVyKGVsLCBDSEVDS0JPWF9SQURJ
T19UT0tFTixcbiAgICBcInZhciAkJGE9XCIgKyB2YWx1ZSArIFwiLFwiICtcbiAgICAgICAgJyQk
ZWw9JGV2ZW50LnRhcmdldCwnICtcbiAgICAgICAgXCIkJGM9JCRlbC5jaGVja2VkPyhcIiArIHRy
dWVWYWx1ZUJpbmRpbmcgKyBcIik6KFwiICsgZmFsc2VWYWx1ZUJpbmRpbmcgKyBcIik7XCIgK1xu
ICAgICdpZihBcnJheS5pc0FycmF5KCQkYSkpeycgK1xuICAgICAgXCJ2YXIgJCR2PVwiICsgKG51
bWJlciA/ICdfbignICsgdmFsdWVCaW5kaW5nICsgJyknIDogdmFsdWVCaW5kaW5nKSArIFwiLFwi
ICtcbiAgICAgICAgICAnJCRpPV9pKCQkYSwkJHYpOycgK1xuICAgICAgXCJpZigkJGVsLmNoZWNr
ZWQpeyQkaTwwJiYoXCIgKyB2YWx1ZSArIFwiPSQkYS5jb25jYXQoJCR2KSl9XCIgK1xuICAgICAg
XCJlbHNleyQkaT4tMSYmKFwiICsgdmFsdWUgKyBcIj0kJGEuc2xpY2UoMCwkJGkpLmNvbmNhdCgk
JGEuc2xpY2UoJCRpKzEpKSl9XCIgK1xuICAgIFwifWVsc2V7XCIgKyAoZ2VuQXNzaWdubWVudENv
ZGUodmFsdWUsICckJGMnKSkgKyBcIn1cIixcbiAgICBudWxsLCB0cnVlXG4gICk7XG59XG5cbmZ1
bmN0aW9uIGdlblJhZGlvTW9kZWwgKFxuICAgIGVsLFxuICAgIHZhbHVlLFxuICAgIG1vZGlmaWVy
c1xuKSB7XG4gIHZhciBudW1iZXIgPSBtb2RpZmllcnMgJiYgbW9kaWZpZXJzLm51bWJlcjtcbiAg
dmFyIHZhbHVlQmluZGluZyA9IGdldEJpbmRpbmdBdHRyKGVsLCAndmFsdWUnKSB8fCAnbnVsbCc7
XG4gIHZhbHVlQmluZGluZyA9IG51bWJlciA/IChcIl9uKFwiICsgdmFsdWVCaW5kaW5nICsgXCIp
XCIpIDogdmFsdWVCaW5kaW5nO1xuICBhZGRQcm9wKGVsLCAnY2hlY2tlZCcsIChcIl9xKFwiICsg
dmFsdWUgKyBcIixcIiArIHZhbHVlQmluZGluZyArIFwiKVwiKSk7XG4gIGFkZEhhbmRsZXIoZWws
IENIRUNLQk9YX1JBRElPX1RPS0VOLCBnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgdmFsdWVCaW5k
aW5nKSwgbnVsbCwgdHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIGdlblNlbGVjdCAoXG4gICAgZWwsXG4g
ICAgdmFsdWUsXG4gICAgbW9kaWZpZXJzXG4pIHtcbiAgdmFyIG51bWJlciA9IG1vZGlmaWVycyAm
JiBtb2RpZmllcnMubnVtYmVyO1xuICB2YXIgc2VsZWN0ZWRWYWwgPSBcIkFycmF5LnByb3RvdHlw
ZS5maWx0ZXJcIiArXG4gICAgXCIuY2FsbCgkZXZlbnQudGFyZ2V0Lm9wdGlvbnMsZnVuY3Rpb24o
byl7cmV0dXJuIG8uc2VsZWN0ZWR9KVwiICtcbiAgICBcIi5tYXAoZnVuY3Rpb24obyl7dmFyIHZh
bCA9IFxcXCJfdmFsdWVcXFwiIGluIG8gPyBvLl92YWx1ZSA6IG8udmFsdWU7XCIgK1xuICAgIFwi
cmV0dXJuIFwiICsgKG51bWJlciA/ICdfbih2YWwpJyA6ICd2YWwnKSArIFwifSlcIjtcblxuICB2
YXIgYXNzaWdubWVudCA9ICckZXZlbnQudGFyZ2V0Lm11bHRpcGxlID8gJCRzZWxlY3RlZFZhbCA6
ICQkc2VsZWN0ZWRWYWxbMF0nO1xuICB2YXIgY29kZSA9IFwidmFyICQkc2VsZWN0ZWRWYWwgPSBc
IiArIHNlbGVjdGVkVmFsICsgXCI7XCI7XG4gIGNvZGUgPSBjb2RlICsgXCIgXCIgKyAoZ2VuQXNz
aWdubWVudENvZGUodmFsdWUsIGFzc2lnbm1lbnQpKTtcbiAgYWRkSGFuZGxlcihlbCwgJ2NoYW5n
ZScsIGNvZGUsIG51bGwsIHRydWUpO1xufVxuXG5mdW5jdGlvbiBnZW5EZWZhdWx0TW9kZWwgKFxu
ICBlbCxcbiAgdmFsdWUsXG4gIG1vZGlmaWVyc1xuKSB7XG4gIHZhciB0eXBlID0gZWwuYXR0cnNN
YXAudHlwZTtcbiAgdmFyIHJlZiA9IG1vZGlmaWVycyB8fCB7fTtcbiAgdmFyIGxhenkgPSByZWYu
bGF6eTtcbiAgdmFyIG51bWJlciA9IHJlZi5udW1iZXI7XG4gIHZhciB0cmltID0gcmVmLnRyaW07
XG4gIHZhciBuZWVkQ29tcG9zaXRpb25HdWFyZCA9ICFsYXp5ICYmIHR5cGUgIT09ICdyYW5nZSc7
XG4gIHZhciBldmVudCA9IGxhenlcbiAgICA/ICdjaGFuZ2UnXG4gICAgOiB0eXBlID09PSAncmFu
Z2UnXG4gICAgICA/IFJBTkdFX1RPS0VOXG4gICAgICA6ICdpbnB1dCc7XG5cbiAgdmFyIHZhbHVl
RXhwcmVzc2lvbiA9ICckZXZlbnQudGFyZ2V0LnZhbHVlJztcbiAgaWYgKHRyaW0pIHtcbiAgICB2
YWx1ZUV4cHJlc3Npb24gPSBcIiRldmVudC50YXJnZXQudmFsdWUudHJpbSgpXCI7XG4gIH1cbiAg
aWYgKG51bWJlcikge1xuICAgIHZhbHVlRXhwcmVzc2lvbiA9IFwiX24oXCIgKyB2YWx1ZUV4cHJl
c3Npb24gKyBcIilcIjtcbiAgfVxuXG4gIHZhciBjb2RlID0gZ2VuQXNzaWdubWVudENvZGUodmFs
dWUsIHZhbHVlRXhwcmVzc2lvbik7XG4gIGlmIChuZWVkQ29tcG9zaXRpb25HdWFyZCkge1xuICAg
IGNvZGUgPSBcImlmKCRldmVudC50YXJnZXQuY29tcG9zaW5nKXJldHVybjtcIiArIGNvZGU7XG4g
IH1cblxuICBhZGRQcm9wKGVsLCAndmFsdWUnLCAoXCIoXCIgKyB2YWx1ZSArIFwiKVwiKSk7XG4g
IGFkZEhhbmRsZXIoZWwsIGV2ZW50LCBjb2RlLCBudWxsLCB0cnVlKTtcbiAgaWYgKHRyaW0gfHwg
bnVtYmVyKSB7XG4gICAgYWRkSGFuZGxlcihlbCwgJ2JsdXInLCAnJGZvcmNlVXBkYXRlKCknKTtc
biAgfVxufVxuXG4vKiAgKi9cblxuLy8gbm9ybWFsaXplIHYtbW9kZWwgZXZlbnQgdG9rZW5zIHRo
YXQgY2FuIG9ubHkgYmUgZGV0ZXJtaW5lZCBhdCBydW50aW1lLlxuLy8gaXQncyBpbXBvcnRhbnQg
dG8gcGxhY2UgdGhlIGV2ZW50IGFzIHRoZSBmaXJzdCBpbiB0aGUgYXJyYXkgYmVjYXVzZVxuLy8g
dGhlIHdob2xlIHBvaW50IGlzIGVuc3VyaW5nIHRoZSB2LW1vZGVsIGNhbGxiYWNrIGdldHMgY2Fs
bGVkIGJlZm9yZVxuLy8gdXNlci1hdHRhY2hlZCBoYW5kbGVycy5cbmZ1bmN0aW9uIG5vcm1hbGl6
ZUV2ZW50cyAob24pIHtcbiAgdmFyIGV2ZW50O1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9c
biAgaWYgKGlzRGVmKG9uW1JBTkdFX1RPS0VOXSkpIHtcbiAgICAvLyBJRSBpbnB1dFt0eXBlPXJh
bmdlXSBvbmx5IHN1cHBvcnRzIGBjaGFuZ2VgIGV2ZW50XG4gICAgZXZlbnQgPSBpc0lFID8gJ2No
YW5nZScgOiAnaW5wdXQnO1xuICAgIG9uW2V2ZW50XSA9IFtdLmNvbmNhdChvbltSQU5HRV9UT0tF
Tl0sIG9uW2V2ZW50XSB8fCBbXSk7XG4gICAgZGVsZXRlIG9uW1JBTkdFX1RPS0VOXTtcbiAgfVxu
ICBpZiAoaXNEZWYob25bQ0hFQ0tCT1hfUkFESU9fVE9LRU5dKSkge1xuICAgIC8vIENocm9tZSBm
aXJlcyBtaWNyb3Rhc2tzIGluIGJldHdlZW4gY2xpY2svY2hhbmdlLCBsZWFkcyB0byAjNDUyMVxu
ICAgIGV2ZW50ID0gaXNDaHJvbWUgPyAnY2xpY2snIDogJ2NoYW5nZSc7XG4gICAgb25bZXZlbnRd
ID0gW10uY29uY2F0KG9uW0NIRUNLQk9YX1JBRElPX1RPS0VOXSwgb25bZXZlbnRdIHx8IFtdKTtc
biAgICBkZWxldGUgb25bQ0hFQ0tCT1hfUkFESU9fVE9LRU5dO1xuICB9XG59XG5cbnZhciB0YXJn
ZXQkMTtcblxuZnVuY3Rpb24gYWRkJDEgKFxuICBldmVudCxcbiAgaGFuZGxlcixcbiAgb25jZSQk
MSxcbiAgY2FwdHVyZSxcbiAgcGFzc2l2ZVxuKSB7XG4gIGlmIChvbmNlJCQxKSB7XG4gICAgdmFy
IG9sZEhhbmRsZXIgPSBoYW5kbGVyO1xuICAgIHZhciBfdGFyZ2V0ID0gdGFyZ2V0JDE7IC8vIHNh
dmUgY3VycmVudCB0YXJnZXQgZWxlbWVudCBpbiBjbG9zdXJlXG4gICAgaGFuZGxlciA9IGZ1bmN0
aW9uIChldikge1xuICAgICAgdmFyIHJlcyA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDFcbiAgICAg
ICAgPyBvbGRIYW5kbGVyKGV2KVxuICAgICAgICA6IG9sZEhhbmRsZXIuYXBwbHkobnVsbCwgYXJn
dW1lbnRzKTtcbiAgICAgIGlmIChyZXMgIT09IG51bGwpIHtcbiAgICAgICAgcmVtb3ZlJDIoZXZl
bnQsIGhhbmRsZXIsIGNhcHR1cmUsIF90YXJnZXQpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAg
dGFyZ2V0JDEuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICBldmVudCxcbiAgICBoYW5kbGVyLFxuICAg
IHN1cHBvcnRzUGFzc2l2ZVxuICAgICAgPyB7IGNhcHR1cmU6IGNhcHR1cmUsIHBhc3NpdmU6IHBh
c3NpdmUgfVxuICAgICAgOiBjYXB0dXJlXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZSQyIChc
biAgZXZlbnQsXG4gIGhhbmRsZXIsXG4gIGNhcHR1cmUsXG4gIF90YXJnZXRcbikge1xuICAoX3Rh
cmdldCB8fCB0YXJnZXQkMSkucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlciwgY2Fw
dHVyZSk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZURPTUxpc3RlbmVycyAob2xkVm5vZGUsIHZub2Rl
KSB7XG4gIGlmIChpc1VuZGVmKG9sZFZub2RlLmRhdGEub24pICYmIGlzVW5kZWYodm5vZGUuZGF0
YS5vbikpIHtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgb24gPSB2bm9kZS5kYXRhLm9uIHx8IHt9
O1xuICB2YXIgb2xkT24gPSBvbGRWbm9kZS5kYXRhLm9uIHx8IHt9O1xuICB0YXJnZXQkMSA9IHZu
b2RlLmVsbTtcbiAgbm9ybWFsaXplRXZlbnRzKG9uKTtcbiAgdXBkYXRlTGlzdGVuZXJzKG9uLCBv
bGRPbiwgYWRkJDEsIHJlbW92ZSQyLCB2bm9kZS5jb250ZXh0KTtcbn1cblxudmFyIGV2ZW50cyA9
IHtcbiAgY3JlYXRlOiB1cGRhdGVET01MaXN0ZW5lcnMsXG4gIHVwZGF0ZTogdXBkYXRlRE9NTGlz
dGVuZXJzXG59O1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gdXBkYXRlRE9NUHJvcHMgKG9sZFZub2Rl
LCB2bm9kZSkge1xuICBpZiAoaXNVbmRlZihvbGRWbm9kZS5kYXRhLmRvbVByb3BzKSAmJiBpc1Vu
ZGVmKHZub2RlLmRhdGEuZG9tUHJvcHMpKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIGtleSwg
Y3VyO1xuICB2YXIgZWxtID0gdm5vZGUuZWxtO1xuICB2YXIgb2xkUHJvcHMgPSBvbGRWbm9kZS5k
YXRhLmRvbVByb3BzIHx8IHt9O1xuICB2YXIgcHJvcHMgPSB2bm9kZS5kYXRhLmRvbVByb3BzIHx8
IHt9O1xuICAvLyBjbG9uZSBvYnNlcnZlZCBvYmplY3RzLCBhcyB0aGUgdXNlciBwcm9iYWJseSB3
YW50cyB0byBtdXRhdGUgaXRcbiAgaWYgKGlzRGVmKHByb3BzLl9fb2JfXykpIHtcbiAgICBwcm9w
cyA9IHZub2RlLmRhdGEuZG9tUHJvcHMgPSBleHRlbmQoe30sIHByb3BzKTtcbiAgfVxuXG4gIGZv
ciAoa2V5IGluIG9sZFByb3BzKSB7XG4gICAgaWYgKGlzVW5kZWYocHJvcHNba2V5XSkpIHtcbiAg
ICAgIGVsbVtrZXldID0gJyc7XG4gICAgfVxuICB9XG4gIGZvciAoa2V5IGluIHByb3BzKSB7XG4g
ICAgY3VyID0gcHJvcHNba2V5XTtcbiAgICAvLyBpZ25vcmUgY2hpbGRyZW4gaWYgdGhlIG5vZGUg
aGFzIHRleHRDb250ZW50IG9yIGlubmVySFRNTCxcbiAgICAvLyBhcyB0aGVzZSB3aWxsIHRocm93
IGF3YXkgZXhpc3RpbmcgRE9NIG5vZGVzIGFuZCBjYXVzZSByZW1vdmFsIGVycm9yc1xuICAgIC8v
IG9uIHN1YnNlcXVlbnQgcGF0Y2hlcyAoIzMzNjApXG4gICAgaWYgKGtleSA9PT0gJ3RleHRDb250
ZW50JyB8fCBrZXkgPT09ICdpbm5lckhUTUwnKSB7XG4gICAgICBpZiAodm5vZGUuY2hpbGRyZW4p
IHsgdm5vZGUuY2hpbGRyZW4ubGVuZ3RoID0gMDsgfVxuICAgICAgaWYgKGN1ciA9PT0gb2xkUHJv
cHNba2V5XSkgeyBjb250aW51ZSB9XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ3ZhbHVlJykg
e1xuICAgICAgLy8gc3RvcmUgdmFsdWUgYXMgX3ZhbHVlIGFzIHdlbGwgc2luY2VcbiAgICAgIC8v
IG5vbi1zdHJpbmcgdmFsdWVzIHdpbGwgYmUgc3RyaW5naWZpZWRcbiAgICAgIGVsbS5fdmFsdWUg
PSBjdXI7XG4gICAgICAvLyBhdm9pZCByZXNldHRpbmcgY3Vyc29yIHBvc2l0aW9uIHdoZW4gdmFs
dWUgaXMgdGhlIHNhbWVcbiAgICAgIHZhciBzdHJDdXIgPSBpc1VuZGVmKGN1cikgPyAnJyA6IFN0
cmluZyhjdXIpO1xuICAgICAgaWYgKHNob3VsZFVwZGF0ZVZhbHVlKGVsbSwgdm5vZGUsIHN0ckN1
cikpIHtcbiAgICAgICAgZWxtLnZhbHVlID0gc3RyQ3VyO1xuICAgICAgfVxuICAgIH0gZWxzZSB7
XG4gICAgICBlbG1ba2V5XSA9IGN1cjtcbiAgICB9XG4gIH1cbn1cblxuLy8gY2hlY2sgcGxhdGZv
cm1zL3dlYi91dGlsL2F0dHJzLmpzIGFjY2VwdFZhbHVlXG5cblxuZnVuY3Rpb24gc2hvdWxkVXBk
YXRlVmFsdWUgKFxuICBlbG0sXG4gIHZub2RlLFxuICBjaGVja1ZhbFxuKSB7XG4gIHJldHVybiAo
IWVsbS5jb21wb3NpbmcgJiYgKFxuICAgIHZub2RlLnRhZyA9PT0gJ29wdGlvbicgfHxcbiAgICBp
c0RpcnR5KGVsbSwgY2hlY2tWYWwpIHx8XG4gICAgaXNJbnB1dENoYW5nZWQoZWxtLCBjaGVja1Zh
bClcbiAgKSlcbn1cblxuZnVuY3Rpb24gaXNEaXJ0eSAoZWxtLCBjaGVja1ZhbCkge1xuICAvLyBy
ZXR1cm4gdHJ1ZSB3aGVuIHRleHRib3ggKC5udW1iZXIgYW5kIC50cmltKSBsb3NlcyBmb2N1cyBh
bmQgaXRzIHZhbHVlIGlzXG4gIC8vIG5vdCBlcXVhbCB0byB0aGUgdXBkYXRlZCB2YWx1ZVxuICB2
YXIgbm90SW5Gb2N1cyA9IHRydWU7XG4gIC8vICM2MTU3XG4gIC8vIHdvcmsgYXJvdW5kIElFIGJ1
ZyB3aGVuIGFjY2Vzc2luZyBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGluIGFuIGlmcmFtZVxuICB0
cnkgeyBub3RJbkZvY3VzID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gZWxtOyB9IGNhdGNo
IChlKSB7fVxuICByZXR1cm4gbm90SW5Gb2N1cyAmJiBlbG0udmFsdWUgIT09IGNoZWNrVmFsXG59
XG5cbmZ1bmN0aW9uIGlzSW5wdXRDaGFuZ2VkIChlbG0sIG5ld1ZhbCkge1xuICB2YXIgdmFsdWUg
PSBlbG0udmFsdWU7XG4gIHZhciBtb2RpZmllcnMgPSBlbG0uX3ZNb2RpZmllcnM7IC8vIGluamVj
dGVkIGJ5IHYtbW9kZWwgcnVudGltZVxuICBpZiAoaXNEZWYobW9kaWZpZXJzKSAmJiBtb2RpZmll
cnMubnVtYmVyKSB7XG4gICAgcmV0dXJuIHRvTnVtYmVyKHZhbHVlKSAhPT0gdG9OdW1iZXIobmV3
VmFsKVxuICB9XG4gIGlmIChpc0RlZihtb2RpZmllcnMpICYmIG1vZGlmaWVycy50cmltKSB7XG4g
ICAgcmV0dXJuIHZhbHVlLnRyaW0oKSAhPT0gbmV3VmFsLnRyaW0oKVxuICB9XG4gIHJldHVybiB2
YWx1ZSAhPT0gbmV3VmFsXG59XG5cbnZhciBkb21Qcm9wcyA9IHtcbiAgY3JlYXRlOiB1cGRhdGVE
T01Qcm9wcyxcbiAgdXBkYXRlOiB1cGRhdGVET01Qcm9wc1xufTtcblxuLyogICovXG5cbnZhciBw
YXJzZVN0eWxlVGV4dCA9IGNhY2hlZChmdW5jdGlvbiAoY3NzVGV4dCkge1xuICB2YXIgcmVzID0g
e307XG4gIHZhciBsaXN0RGVsaW1pdGVyID0gLzsoPyFbXihdKlxcKSkvZztcbiAgdmFyIHByb3Bl
cnR5RGVsaW1pdGVyID0gLzooLispLztcbiAgY3NzVGV4dC5zcGxpdChsaXN0RGVsaW1pdGVyKS5m
b3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIHZhciB0bXAg
PSBpdGVtLnNwbGl0KHByb3BlcnR5RGVsaW1pdGVyKTtcbiAgICAgIHRtcC5sZW5ndGggPiAxICYm
IChyZXNbdG1wWzBdLnRyaW0oKV0gPSB0bXBbMV0udHJpbSgpKTtcbiAgICB9XG4gIH0pO1xuICBy
ZXR1cm4gcmVzXG59KTtcblxuLy8gbWVyZ2Ugc3RhdGljIGFuZCBkeW5hbWljIHN0eWxlIGRhdGEg
b24gdGhlIHNhbWUgdm5vZGVcbmZ1bmN0aW9uIG5vcm1hbGl6ZVN0eWxlRGF0YSAoZGF0YSkge1xu
ICB2YXIgc3R5bGUgPSBub3JtYWxpemVTdHlsZUJpbmRpbmcoZGF0YS5zdHlsZSk7XG4gIC8vIHN0
YXRpYyBzdHlsZSBpcyBwcmUtcHJvY2Vzc2VkIGludG8gYW4gb2JqZWN0IGR1cmluZyBjb21waWxh
dGlvblxuICAvLyBhbmQgaXMgYWx3YXlzIGEgZnJlc2ggb2JqZWN0LCBzbyBpdCdzIHNhZmUgdG8g
bWVyZ2UgaW50byBpdFxuICByZXR1cm4gZGF0YS5zdGF0aWNTdHlsZVxuICAgID8gZXh0ZW5kKGRh
dGEuc3RhdGljU3R5bGUsIHN0eWxlKVxuICAgIDogc3R5bGVcbn1cblxuLy8gbm9ybWFsaXplIHBv
c3NpYmxlIGFycmF5IC8gc3RyaW5nIHZhbHVlcyBpbnRvIE9iamVjdFxuZnVuY3Rpb24gbm9ybWFs
aXplU3R5bGVCaW5kaW5nIChiaW5kaW5nU3R5bGUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYmlu
ZGluZ1N0eWxlKSkge1xuICAgIHJldHVybiB0b09iamVjdChiaW5kaW5nU3R5bGUpXG4gIH1cbiAg
aWYgKHR5cGVvZiBiaW5kaW5nU3R5bGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHBhcnNl
U3R5bGVUZXh0KGJpbmRpbmdTdHlsZSlcbiAgfVxuICByZXR1cm4gYmluZGluZ1N0eWxlXG59XG5c
bi8qKlxuICogcGFyZW50IGNvbXBvbmVudCBzdHlsZSBzaG91bGQgYmUgYWZ0ZXIgY2hpbGQnc1xu
ICogc28gdGhhdCBwYXJlbnQgY29tcG9uZW50J3Mgc3R5bGUgY291bGQgb3ZlcnJpZGUgaXRcbiAq
L1xuZnVuY3Rpb24gZ2V0U3R5bGUgKHZub2RlLCBjaGVja0NoaWxkKSB7XG4gIHZhciByZXMgPSB7
fTtcbiAgdmFyIHN0eWxlRGF0YTtcblxuICBpZiAoY2hlY2tDaGlsZCkge1xuICAgIHZhciBjaGls
ZE5vZGUgPSB2bm9kZTtcbiAgICB3aGlsZSAoY2hpbGROb2RlLmNvbXBvbmVudEluc3RhbmNlKSB7
XG4gICAgICBjaGlsZE5vZGUgPSBjaGlsZE5vZGUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlO1xu
ICAgICAgaWYgKGNoaWxkTm9kZS5kYXRhICYmIChzdHlsZURhdGEgPSBub3JtYWxpemVTdHlsZURh
dGEoY2hpbGROb2RlLmRhdGEpKSkge1xuICAgICAgICBleHRlbmQocmVzLCBzdHlsZURhdGEpO1xu
ICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICgoc3R5bGVEYXRhID0gbm9ybWFsaXplU3R5bGVE
YXRhKHZub2RlLmRhdGEpKSkge1xuICAgIGV4dGVuZChyZXMsIHN0eWxlRGF0YSk7XG4gIH1cblxu
ICB2YXIgcGFyZW50Tm9kZSA9IHZub2RlO1xuICB3aGlsZSAoKHBhcmVudE5vZGUgPSBwYXJlbnRO
b2RlLnBhcmVudCkpIHtcbiAgICBpZiAocGFyZW50Tm9kZS5kYXRhICYmIChzdHlsZURhdGEgPSBu
b3JtYWxpemVTdHlsZURhdGEocGFyZW50Tm9kZS5kYXRhKSkpIHtcbiAgICAgIGV4dGVuZChyZXMs
IHN0eWxlRGF0YSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuLyogICovXG5cbnZh
ciBjc3NWYXJSRSA9IC9eLS0vO1xudmFyIGltcG9ydGFudFJFID0gL1xccyohaW1wb3J0YW50JC87
XG52YXIgc2V0UHJvcCA9IGZ1bmN0aW9uIChlbCwgbmFtZSwgdmFsKSB7XG4gIC8qIGlzdGFuYnVs
IGlnbm9yZSBpZiAqL1xuICBpZiAoY3NzVmFyUkUudGVzdChuYW1lKSkge1xuICAgIGVsLnN0eWxl
LnNldFByb3BlcnR5KG5hbWUsIHZhbCk7XG4gIH0gZWxzZSBpZiAoaW1wb3J0YW50UkUudGVzdCh2
YWwpKSB7XG4gICAgZWwuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgdmFsLnJlcGxhY2UoaW1wb3J0
YW50UkUsICcnKSwgJ2ltcG9ydGFudCcpO1xuICB9IGVsc2Uge1xuICAgIHZhciBub3JtYWxpemVk
TmFtZSA9IG5vcm1hbGl6ZShuYW1lKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4g
ICAgICAvLyBTdXBwb3J0IHZhbHVlcyBhcnJheSBjcmVhdGVkIGJ5IGF1dG9wcmVmaXhlciwgZS5n
LlxuICAgICAgLy8ge2Rpc3BsYXk6IFtcIi13ZWJraXQtYm94XCIsIFwiLW1zLWZsZXhib3hcIiwg
XCJmbGV4XCJdfVxuICAgICAgLy8gU2V0IHRoZW0gb25lIGJ5IG9uZSwgYW5kIHRoZSBicm93c2Vy
IHdpbGwgb25seSBzZXQgdGhvc2UgaXQgY2FuIHJlY29nbml6ZVxuICAgICAgZm9yICh2YXIgaSA9
IDAsIGxlbiA9IHZhbC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBlbC5zdHlsZVtu
b3JtYWxpemVkTmFtZV0gPSB2YWxbaV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGVs
LnN0eWxlW25vcm1hbGl6ZWROYW1lXSA9IHZhbDtcbiAgICB9XG4gIH1cbn07XG5cbnZhciB2ZW5k
b3JOYW1lcyA9IFsnV2Via2l0JywgJ01veicsICdtcyddO1xuXG52YXIgZW1wdHlTdHlsZTtcbnZh
ciBub3JtYWxpemUgPSBjYWNoZWQoZnVuY3Rpb24gKHByb3ApIHtcbiAgZW1wdHlTdHlsZSA9IGVt
cHR5U3R5bGUgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jykuc3R5bGU7XG4gIHByb3Ag
PSBjYW1lbGl6ZShwcm9wKTtcbiAgaWYgKHByb3AgIT09ICdmaWx0ZXInICYmIChwcm9wIGluIGVt
cHR5U3R5bGUpKSB7XG4gICAgcmV0dXJuIHByb3BcbiAgfVxuICB2YXIgY2FwTmFtZSA9IHByb3Au
Y2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBwcm9wLnNsaWNlKDEpO1xuICBmb3IgKHZhciBpID0g
MDsgaSA8IHZlbmRvck5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG5hbWUgPSB2ZW5kb3JO
YW1lc1tpXSArIGNhcE5hbWU7XG4gICAgaWYgKG5hbWUgaW4gZW1wdHlTdHlsZSkge1xuICAgICAg
cmV0dXJuIG5hbWVcbiAgICB9XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiB1cGRhdGVTdHlsZSAob2xk
Vm5vZGUsIHZub2RlKSB7XG4gIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgdmFyIG9sZERhdGEg
PSBvbGRWbm9kZS5kYXRhO1xuXG4gIGlmIChpc1VuZGVmKGRhdGEuc3RhdGljU3R5bGUpICYmIGlz
VW5kZWYoZGF0YS5zdHlsZSkgJiZcbiAgICBpc1VuZGVmKG9sZERhdGEuc3RhdGljU3R5bGUpICYm
IGlzVW5kZWYob2xkRGF0YS5zdHlsZSlcbiAgKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIg
Y3VyLCBuYW1lO1xuICB2YXIgZWwgPSB2bm9kZS5lbG07XG4gIHZhciBvbGRTdGF0aWNTdHlsZSA9
IG9sZERhdGEuc3RhdGljU3R5bGU7XG4gIHZhciBvbGRTdHlsZUJpbmRpbmcgPSBvbGREYXRhLm5v
cm1hbGl6ZWRTdHlsZSB8fCBvbGREYXRhLnN0eWxlIHx8IHt9O1xuXG4gIC8vIGlmIHN0YXRpYyBz
dHlsZSBleGlzdHMsIHN0eWxlYmluZGluZyBhbHJlYWR5IG1lcmdlZCBpbnRvIGl0IHdoZW4gZG9p
bmcgbm9ybWFsaXplU3R5bGVEYXRhXG4gIHZhciBvbGRTdHlsZSA9IG9sZFN0YXRpY1N0eWxlIHx8
IG9sZFN0eWxlQmluZGluZztcblxuICB2YXIgc3R5bGUgPSBub3JtYWxpemVTdHlsZUJpbmRpbmco
dm5vZGUuZGF0YS5zdHlsZSkgfHwge307XG5cbiAgLy8gc3RvcmUgbm9ybWFsaXplZCBzdHlsZSB1
bmRlciBhIGRpZmZlcmVudCBrZXkgZm9yIG5leHQgZGlmZlxuICAvLyBtYWtlIHN1cmUgdG8gY2xv
bmUgaXQgaWYgaXQncyByZWFjdGl2ZSwgc2luY2UgdGhlIHVzZXIgbGlrbGV5IHdhbnRzXG4gIC8v
IHRvIG11dGF0ZSBpdC5cbiAgdm5vZGUuZGF0YS5ub3JtYWxpemVkU3R5bGUgPSBpc0RlZihzdHls
ZS5fX29iX18pXG4gICAgPyBleHRlbmQoe30sIHN0eWxlKVxuICAgIDogc3R5bGU7XG5cbiAgdmFy
IG5ld1N0eWxlID0gZ2V0U3R5bGUodm5vZGUsIHRydWUpO1xuXG4gIGZvciAobmFtZSBpbiBvbGRT
dHlsZSkge1xuICAgIGlmIChpc1VuZGVmKG5ld1N0eWxlW25hbWVdKSkge1xuICAgICAgc2V0UHJv
cChlbCwgbmFtZSwgJycpO1xuICAgIH1cbiAgfVxuICBmb3IgKG5hbWUgaW4gbmV3U3R5bGUpIHtc
biAgICBjdXIgPSBuZXdTdHlsZVtuYW1lXTtcbiAgICBpZiAoY3VyICE9PSBvbGRTdHlsZVtuYW1l
XSkge1xuICAgICAgLy8gaWU5IHNldHRpbmcgdG8gbnVsbCBoYXMgbm8gZWZmZWN0LCBtdXN0IHVz
ZSBlbXB0eSBzdHJpbmdcbiAgICAgIHNldFByb3AoZWwsIG5hbWUsIGN1ciA9PSBudWxsID8gJycg
OiBjdXIpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgc3R5bGUgPSB7XG4gIGNyZWF0ZTogdXBkYXRl
U3R5bGUsXG4gIHVwZGF0ZTogdXBkYXRlU3R5bGVcbn07XG5cbi8qICAqL1xuXG4vKipcbiAqIEFk
ZCBjbGFzcyB3aXRoIGNvbXBhdGliaWxpdHkgZm9yIFNWRyBzaW5jZSBjbGFzc0xpc3QgaXMgbm90
IHN1cHBvcnRlZCBvblxuICogU1ZHIGVsZW1lbnRzIGluIElFXG4gKi9cbmZ1bmN0aW9uIGFkZENs
YXNzIChlbCwgY2xzKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoIWNscyB8
fCAhKGNscyA9IGNscy50cmltKCkpKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvKiBpc3RhbmJ1
bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoZWwuY2xhc3NMaXN0KSB7XG4gICAgaWYgKGNscy5pbmRl
eE9mKCcgJykgPiAtMSkge1xuICAgICAgY2xzLnNwbGl0KC9cXHMrLykuZm9yRWFjaChmdW5jdGlv
biAoYykgeyByZXR1cm4gZWwuY2xhc3NMaXN0LmFkZChjKTsgfSk7XG4gICAgfSBlbHNlIHtcbiAg
ICAgIGVsLmNsYXNzTGlzdC5hZGQoY2xzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGN1
ciA9IFwiIFwiICsgKGVsLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSB8fCAnJykgKyBcIiBcIjtcbiAg
ICBpZiAoY3VyLmluZGV4T2YoJyAnICsgY2xzICsgJyAnKSA8IDApIHtcbiAgICAgIGVsLnNldEF0
dHJpYnV0ZSgnY2xhc3MnLCAoY3VyICsgY2xzKS50cmltKCkpO1xuICAgIH1cbiAgfVxufVxuXG4v
KipcbiAqIFJlbW92ZSBjbGFzcyB3aXRoIGNvbXBhdGliaWxpdHkgZm9yIFNWRyBzaW5jZSBjbGFz
c0xpc3QgaXMgbm90IHN1cHBvcnRlZCBvblxuICogU1ZHIGVsZW1lbnRzIGluIElFXG4gKi9cbmZ1
bmN0aW9uIHJlbW92ZUNsYXNzIChlbCwgY2xzKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAq
L1xuICBpZiAoIWNscyB8fCAhKGNscyA9IGNscy50cmltKCkpKSB7XG4gICAgcmV0dXJuXG4gIH1c
blxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoZWwuY2xhc3NMaXN0KSB7XG4g
ICAgaWYgKGNscy5pbmRleE9mKCcgJykgPiAtMSkge1xuICAgICAgY2xzLnNwbGl0KC9cXHMrLyku
Zm9yRWFjaChmdW5jdGlvbiAoYykgeyByZXR1cm4gZWwuY2xhc3NMaXN0LnJlbW92ZShjKTsgfSk7
XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsLmNsYXNzTGlzdC5yZW1vdmUoY2xzKTtcbiAgICB9XG4g
ICAgaWYgKCFlbC5jbGFzc0xpc3QubGVuZ3RoKSB7XG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUo
J2NsYXNzJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBjdXIgPSBcIiBcIiArIChlbC5n
ZXRBdHRyaWJ1dGUoJ2NsYXNzJykgfHwgJycpICsgXCIgXCI7XG4gICAgdmFyIHRhciA9ICcgJyAr
IGNscyArICcgJztcbiAgICB3aGlsZSAoY3VyLmluZGV4T2YodGFyKSA+PSAwKSB7XG4gICAgICBj
dXIgPSBjdXIucmVwbGFjZSh0YXIsICcgJyk7XG4gICAgfVxuICAgIGN1ciA9IGN1ci50cmltKCk7
XG4gICAgaWYgKGN1cikge1xuICAgICAgZWwuc2V0QXR0cmlidXRlKCdjbGFzcycsIGN1cik7XG4g
ICAgfSBlbHNlIHtcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgnY2xhc3MnKTtcbiAgICB9XG4g
IH1cbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIHJlc29sdmVUcmFuc2l0aW9uIChkZWYkJDEpIHtc
biAgaWYgKCFkZWYkJDEpIHtcbiAgICByZXR1cm5cbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUg
ZWxzZSAqL1xuICBpZiAodHlwZW9mIGRlZiQkMSA9PT0gJ29iamVjdCcpIHtcbiAgICB2YXIgcmVz
ID0ge307XG4gICAgaWYgKGRlZiQkMS5jc3MgIT09IGZhbHNlKSB7XG4gICAgICBleHRlbmQocmVz
LCBhdXRvQ3NzVHJhbnNpdGlvbihkZWYkJDEubmFtZSB8fCAndicpKTtcbiAgICB9XG4gICAgZXh0
ZW5kKHJlcywgZGVmJCQxKTtcbiAgICByZXR1cm4gcmVzXG4gIH0gZWxzZSBpZiAodHlwZW9mIGRl
ZiQkMSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gYXV0b0Nzc1RyYW5zaXRpb24oZGVmJCQx
KVxuICB9XG59XG5cbnZhciBhdXRvQ3NzVHJhbnNpdGlvbiA9IGNhY2hlZChmdW5jdGlvbiAobmFt
ZSkge1xuICByZXR1cm4ge1xuICAgIGVudGVyQ2xhc3M6IChuYW1lICsgXCItZW50ZXJcIiksXG4g
ICAgZW50ZXJUb0NsYXNzOiAobmFtZSArIFwiLWVudGVyLXRvXCIpLFxuICAgIGVudGVyQWN0aXZl
Q2xhc3M6IChuYW1lICsgXCItZW50ZXItYWN0aXZlXCIpLFxuICAgIGxlYXZlQ2xhc3M6IChuYW1l
ICsgXCItbGVhdmVcIiksXG4gICAgbGVhdmVUb0NsYXNzOiAobmFtZSArIFwiLWxlYXZlLXRvXCIp
LFxuICAgIGxlYXZlQWN0aXZlQ2xhc3M6IChuYW1lICsgXCItbGVhdmUtYWN0aXZlXCIpXG4gIH1c
bn0pO1xuXG52YXIgaGFzVHJhbnNpdGlvbiA9IGluQnJvd3NlciAmJiAhaXNJRTk7XG52YXIgVFJB
TlNJVElPTiA9ICd0cmFuc2l0aW9uJztcbnZhciBBTklNQVRJT04gPSAnYW5pbWF0aW9uJztcblxu
Ly8gVHJhbnNpdGlvbiBwcm9wZXJ0eS9ldmVudCBzbmlmZmluZ1xudmFyIHRyYW5zaXRpb25Qcm9w
ID0gJ3RyYW5zaXRpb24nO1xudmFyIHRyYW5zaXRpb25FbmRFdmVudCA9ICd0cmFuc2l0aW9uZW5k
JztcbnZhciBhbmltYXRpb25Qcm9wID0gJ2FuaW1hdGlvbic7XG52YXIgYW5pbWF0aW9uRW5kRXZl
bnQgPSAnYW5pbWF0aW9uZW5kJztcbmlmIChoYXNUcmFuc2l0aW9uKSB7XG4gIC8qIGlzdGFuYnVs
IGlnbm9yZSBpZiAqL1xuICBpZiAod2luZG93Lm9udHJhbnNpdGlvbmVuZCA9PT0gdW5kZWZpbmVk
ICYmXG4gICAgd2luZG93Lm9ud2Via2l0dHJhbnNpdGlvbmVuZCAhPT0gdW5kZWZpbmVkXG4gICkg
e1xuICAgIHRyYW5zaXRpb25Qcm9wID0gJ1dlYmtpdFRyYW5zaXRpb24nO1xuICAgIHRyYW5zaXRp
b25FbmRFdmVudCA9ICd3ZWJraXRUcmFuc2l0aW9uRW5kJztcbiAgfVxuICBpZiAod2luZG93Lm9u
YW5pbWF0aW9uZW5kID09PSB1bmRlZmluZWQgJiZcbiAgICB3aW5kb3cub253ZWJraXRhbmltYXRp
b25lbmQgIT09IHVuZGVmaW5lZFxuICApIHtcbiAgICBhbmltYXRpb25Qcm9wID0gJ1dlYmtpdEFu
aW1hdGlvbic7XG4gICAgYW5pbWF0aW9uRW5kRXZlbnQgPSAnd2Via2l0QW5pbWF0aW9uRW5kJztc
biAgfVxufVxuXG4vLyBiaW5kaW5nIHRvIHdpbmRvdyBpcyBuZWNlc3NhcnkgdG8gbWFrZSBob3Qg
cmVsb2FkIHdvcmsgaW4gSUUgaW4gc3RyaWN0IG1vZGVcbnZhciByYWYgPSBpbkJyb3dzZXIgJiYg
d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZVxuICA/IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9u
RnJhbWUuYmluZCh3aW5kb3cpXG4gIDogc2V0VGltZW91dDtcblxuZnVuY3Rpb24gbmV4dEZyYW1l
IChmbikge1xuICByYWYoZnVuY3Rpb24gKCkge1xuICAgIHJhZihmbik7XG4gIH0pO1xufVxuXG5m
dW5jdGlvbiBhZGRUcmFuc2l0aW9uQ2xhc3MgKGVsLCBjbHMpIHtcbiAgdmFyIHRyYW5zaXRpb25D
bGFzc2VzID0gZWwuX3RyYW5zaXRpb25DbGFzc2VzIHx8IChlbC5fdHJhbnNpdGlvbkNsYXNzZXMg
PSBbXSk7XG4gIGlmICh0cmFuc2l0aW9uQ2xhc3Nlcy5pbmRleE9mKGNscykgPCAwKSB7XG4gICAg
dHJhbnNpdGlvbkNsYXNzZXMucHVzaChjbHMpO1xuICAgIGFkZENsYXNzKGVsLCBjbHMpO1xuICB9
XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVRyYW5zaXRpb25DbGFzcyAoZWwsIGNscykge1xuICBpZiAo
ZWwuX3RyYW5zaXRpb25DbGFzc2VzKSB7XG4gICAgcmVtb3ZlKGVsLl90cmFuc2l0aW9uQ2xhc3Nl
cywgY2xzKTtcbiAgfVxuICByZW1vdmVDbGFzcyhlbCwgY2xzKTtcbn1cblxuZnVuY3Rpb24gd2hl
blRyYW5zaXRpb25FbmRzIChcbiAgZWwsXG4gIGV4cGVjdGVkVHlwZSxcbiAgY2Jcbikge1xuICB2
YXIgcmVmID0gZ2V0VHJhbnNpdGlvbkluZm8oZWwsIGV4cGVjdGVkVHlwZSk7XG4gIHZhciB0eXBl
ID0gcmVmLnR5cGU7XG4gIHZhciB0aW1lb3V0ID0gcmVmLnRpbWVvdXQ7XG4gIHZhciBwcm9wQ291
bnQgPSByZWYucHJvcENvdW50O1xuICBpZiAoIXR5cGUpIHsgcmV0dXJuIGNiKCkgfVxuICB2YXIg
ZXZlbnQgPSB0eXBlID09PSBUUkFOU0lUSU9OID8gdHJhbnNpdGlvbkVuZEV2ZW50IDogYW5pbWF0
aW9uRW5kRXZlbnQ7XG4gIHZhciBlbmRlZCA9IDA7XG4gIHZhciBlbmQgPSBmdW5jdGlvbiAoKSB7
XG4gICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgb25FbmQpO1xuICAgIGNiKCk7XG4g
IH07XG4gIHZhciBvbkVuZCA9IGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKGUudGFyZ2V0ID09PSBl
bCkge1xuICAgICAgaWYgKCsrZW5kZWQgPj0gcHJvcENvdW50KSB7XG4gICAgICAgIGVuZCgpO1xu
ICAgICAgfVxuICAgIH1cbiAgfTtcbiAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgaWYg
KGVuZGVkIDwgcHJvcENvdW50KSB7XG4gICAgICBlbmQoKTtcbiAgICB9XG4gIH0sIHRpbWVvdXQg
KyAxKTtcbiAgZWwuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgb25FbmQpO1xufVxuXG52YXIgdHJh
bnNmb3JtUkUgPSAvXFxiKHRyYW5zZm9ybXxhbGwpKCx8JCkvO1xuXG5mdW5jdGlvbiBnZXRUcmFu
c2l0aW9uSW5mbyAoZWwsIGV4cGVjdGVkVHlwZSkge1xuICB2YXIgc3R5bGVzID0gd2luZG93Lmdl
dENvbXB1dGVkU3R5bGUoZWwpO1xuICB2YXIgdHJhbnNpdGlvbkRlbGF5cyA9IHN0eWxlc1t0cmFu
c2l0aW9uUHJvcCArICdEZWxheSddLnNwbGl0KCcsICcpO1xuICB2YXIgdHJhbnNpdGlvbkR1cmF0
aW9ucyA9IHN0eWxlc1t0cmFuc2l0aW9uUHJvcCArICdEdXJhdGlvbiddLnNwbGl0KCcsICcpO1xu
ICB2YXIgdHJhbnNpdGlvblRpbWVvdXQgPSBnZXRUaW1lb3V0KHRyYW5zaXRpb25EZWxheXMsIHRy
YW5zaXRpb25EdXJhdGlvbnMpO1xuICB2YXIgYW5pbWF0aW9uRGVsYXlzID0gc3R5bGVzW2FuaW1h
dGlvblByb3AgKyAnRGVsYXknXS5zcGxpdCgnLCAnKTtcbiAgdmFyIGFuaW1hdGlvbkR1cmF0aW9u
cyA9IHN0eWxlc1thbmltYXRpb25Qcm9wICsgJ0R1cmF0aW9uJ10uc3BsaXQoJywgJyk7XG4gIHZh
ciBhbmltYXRpb25UaW1lb3V0ID0gZ2V0VGltZW91dChhbmltYXRpb25EZWxheXMsIGFuaW1hdGlv
bkR1cmF0aW9ucyk7XG5cbiAgdmFyIHR5cGU7XG4gIHZhciB0aW1lb3V0ID0gMDtcbiAgdmFyIHBy
b3BDb3VudCA9IDA7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoZXhwZWN0ZWRU
eXBlID09PSBUUkFOU0lUSU9OKSB7XG4gICAgaWYgKHRyYW5zaXRpb25UaW1lb3V0ID4gMCkge1xu
ICAgICAgdHlwZSA9IFRSQU5TSVRJT047XG4gICAgICB0aW1lb3V0ID0gdHJhbnNpdGlvblRpbWVv
dXQ7XG4gICAgICBwcm9wQ291bnQgPSB0cmFuc2l0aW9uRHVyYXRpb25zLmxlbmd0aDtcbiAgICB9
XG4gIH0gZWxzZSBpZiAoZXhwZWN0ZWRUeXBlID09PSBBTklNQVRJT04pIHtcbiAgICBpZiAoYW5p
bWF0aW9uVGltZW91dCA+IDApIHtcbiAgICAgIHR5cGUgPSBBTklNQVRJT047XG4gICAgICB0aW1l
b3V0ID0gYW5pbWF0aW9uVGltZW91dDtcbiAgICAgIHByb3BDb3VudCA9IGFuaW1hdGlvbkR1cmF0
aW9ucy5sZW5ndGg7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRpbWVvdXQgPSBNYXRoLm1heCh0
cmFuc2l0aW9uVGltZW91dCwgYW5pbWF0aW9uVGltZW91dCk7XG4gICAgdHlwZSA9IHRpbWVvdXQg
PiAwXG4gICAgICA/IHRyYW5zaXRpb25UaW1lb3V0ID4gYW5pbWF0aW9uVGltZW91dFxuICAgICAg
ICA/IFRSQU5TSVRJT05cbiAgICAgICAgOiBBTklNQVRJT05cbiAgICAgIDogbnVsbDtcbiAgICBw
cm9wQ291bnQgPSB0eXBlXG4gICAgICA/IHR5cGUgPT09IFRSQU5TSVRJT05cbiAgICAgICAgPyB0
cmFuc2l0aW9uRHVyYXRpb25zLmxlbmd0aFxuICAgICAgICA6IGFuaW1hdGlvbkR1cmF0aW9ucy5s
ZW5ndGhcbiAgICAgIDogMDtcbiAgfVxuICB2YXIgaGFzVHJhbnNmb3JtID1cbiAgICB0eXBlID09
PSBUUkFOU0lUSU9OICYmXG4gICAgdHJhbnNmb3JtUkUudGVzdChzdHlsZXNbdHJhbnNpdGlvblBy
b3AgKyAnUHJvcGVydHknXSk7XG4gIHJldHVybiB7XG4gICAgdHlwZTogdHlwZSxcbiAgICB0aW1l
b3V0OiB0aW1lb3V0LFxuICAgIHByb3BDb3VudDogcHJvcENvdW50LFxuICAgIGhhc1RyYW5zZm9y
bTogaGFzVHJhbnNmb3JtXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0VGltZW91dCAoZGVsYXlzLCBk
dXJhdGlvbnMpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgd2hpbGUgKGRlbGF5
cy5sZW5ndGggPCBkdXJhdGlvbnMubGVuZ3RoKSB7XG4gICAgZGVsYXlzID0gZGVsYXlzLmNvbmNh
dChkZWxheXMpO1xuICB9XG5cbiAgcmV0dXJuIE1hdGgubWF4LmFwcGx5KG51bGwsIGR1cmF0aW9u
cy5tYXAoZnVuY3Rpb24gKGQsIGkpIHtcbiAgICByZXR1cm4gdG9NcyhkKSArIHRvTXMoZGVsYXlz
W2ldKVxuICB9KSlcbn1cblxuZnVuY3Rpb24gdG9NcyAocykge1xuICByZXR1cm4gTnVtYmVyKHMu
c2xpY2UoMCwgLTEpKSAqIDEwMDBcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGVudGVyICh2bm9k
ZSwgdG9nZ2xlRGlzcGxheSkge1xuICB2YXIgZWwgPSB2bm9kZS5lbG07XG5cbiAgLy8gY2FsbCBs
ZWF2ZSBjYWxsYmFjayBub3dcbiAgaWYgKGlzRGVmKGVsLl9sZWF2ZUNiKSkge1xuICAgIGVsLl9s
ZWF2ZUNiLmNhbmNlbGxlZCA9IHRydWU7XG4gICAgZWwuX2xlYXZlQ2IoKTtcbiAgfVxuXG4gIHZh
ciBkYXRhID0gcmVzb2x2ZVRyYW5zaXRpb24odm5vZGUuZGF0YS50cmFuc2l0aW9uKTtcbiAgaWYg
KGlzVW5kZWYoZGF0YSkpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9y
ZSBpZiAqL1xuICBpZiAoaXNEZWYoZWwuX2VudGVyQ2IpIHx8IGVsLm5vZGVUeXBlICE9PSAxKSB7
XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgY3NzID0gZGF0YS5jc3M7XG4gIHZhciB0eXBlID0g
ZGF0YS50eXBlO1xuICB2YXIgZW50ZXJDbGFzcyA9IGRhdGEuZW50ZXJDbGFzcztcbiAgdmFyIGVu
dGVyVG9DbGFzcyA9IGRhdGEuZW50ZXJUb0NsYXNzO1xuICB2YXIgZW50ZXJBY3RpdmVDbGFzcyA9
IGRhdGEuZW50ZXJBY3RpdmVDbGFzcztcbiAgdmFyIGFwcGVhckNsYXNzID0gZGF0YS5hcHBlYXJD
bGFzcztcbiAgdmFyIGFwcGVhclRvQ2xhc3MgPSBkYXRhLmFwcGVhclRvQ2xhc3M7XG4gIHZhciBh
cHBlYXJBY3RpdmVDbGFzcyA9IGRhdGEuYXBwZWFyQWN0aXZlQ2xhc3M7XG4gIHZhciBiZWZvcmVF
bnRlciA9IGRhdGEuYmVmb3JlRW50ZXI7XG4gIHZhciBlbnRlciA9IGRhdGEuZW50ZXI7XG4gIHZh
ciBhZnRlckVudGVyID0gZGF0YS5hZnRlckVudGVyO1xuICB2YXIgZW50ZXJDYW5jZWxsZWQgPSBk
YXRhLmVudGVyQ2FuY2VsbGVkO1xuICB2YXIgYmVmb3JlQXBwZWFyID0gZGF0YS5iZWZvcmVBcHBl
YXI7XG4gIHZhciBhcHBlYXIgPSBkYXRhLmFwcGVhcjtcbiAgdmFyIGFmdGVyQXBwZWFyID0gZGF0
YS5hZnRlckFwcGVhcjtcbiAgdmFyIGFwcGVhckNhbmNlbGxlZCA9IGRhdGEuYXBwZWFyQ2FuY2Vs
bGVkO1xuICB2YXIgZHVyYXRpb24gPSBkYXRhLmR1cmF0aW9uO1xuXG4gIC8vIGFjdGl2ZUluc3Rh
bmNlIHdpbGwgYWx3YXlzIGJlIHRoZSA8dHJhbnNpdGlvbj4gY29tcG9uZW50IG1hbmFnaW5nIHRo
aXNcbiAgLy8gdHJhbnNpdGlvbi4gT25lIGVkZ2UgY2FzZSB0byBjaGVjayBpcyB3aGVuIHRoZSA8
dHJhbnNpdGlvbj4gaXMgcGxhY2VkXG4gIC8vIGFzIHRoZSByb290IG5vZGUgb2YgYSBjaGlsZCBj
b21wb25lbnQuIEluIHRoYXQgY2FzZSB3ZSBuZWVkIHRvIGNoZWNrXG4gIC8vIDx0cmFuc2l0aW9u
PidzIHBhcmVudCBmb3IgYXBwZWFyIGNoZWNrLlxuICB2YXIgY29udGV4dCA9IGFjdGl2ZUluc3Rh
bmNlO1xuICB2YXIgdHJhbnNpdGlvbk5vZGUgPSBhY3RpdmVJbnN0YW5jZS4kdm5vZGU7XG4gIHdo
aWxlICh0cmFuc2l0aW9uTm9kZSAmJiB0cmFuc2l0aW9uTm9kZS5wYXJlbnQpIHtcbiAgICB0cmFu
c2l0aW9uTm9kZSA9IHRyYW5zaXRpb25Ob2RlLnBhcmVudDtcbiAgICBjb250ZXh0ID0gdHJhbnNp
dGlvbk5vZGUuY29udGV4dDtcbiAgfVxuXG4gIHZhciBpc0FwcGVhciA9ICFjb250ZXh0Ll9pc01v
dW50ZWQgfHwgIXZub2RlLmlzUm9vdEluc2VydDtcblxuICBpZiAoaXNBcHBlYXIgJiYgIWFwcGVh
ciAmJiBhcHBlYXIgIT09ICcnKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgc3RhcnRDbGFz
cyA9IGlzQXBwZWFyICYmIGFwcGVhckNsYXNzXG4gICAgPyBhcHBlYXJDbGFzc1xuICAgIDogZW50
ZXJDbGFzcztcbiAgdmFyIGFjdGl2ZUNsYXNzID0gaXNBcHBlYXIgJiYgYXBwZWFyQWN0aXZlQ2xh
c3NcbiAgICA/IGFwcGVhckFjdGl2ZUNsYXNzXG4gICAgOiBlbnRlckFjdGl2ZUNsYXNzO1xuICB2
YXIgdG9DbGFzcyA9IGlzQXBwZWFyICYmIGFwcGVhclRvQ2xhc3NcbiAgICA/IGFwcGVhclRvQ2xh
c3NcbiAgICA6IGVudGVyVG9DbGFzcztcblxuICB2YXIgYmVmb3JlRW50ZXJIb29rID0gaXNBcHBl
YXJcbiAgICA/IChiZWZvcmVBcHBlYXIgfHwgYmVmb3JlRW50ZXIpXG4gICAgOiBiZWZvcmVFbnRl
cjtcbiAgdmFyIGVudGVySG9vayA9IGlzQXBwZWFyXG4gICAgPyAodHlwZW9mIGFwcGVhciA9PT0g
J2Z1bmN0aW9uJyA/IGFwcGVhciA6IGVudGVyKVxuICAgIDogZW50ZXI7XG4gIHZhciBhZnRlckVu
dGVySG9vayA9IGlzQXBwZWFyXG4gICAgPyAoYWZ0ZXJBcHBlYXIgfHwgYWZ0ZXJFbnRlcilcbiAg
ICA6IGFmdGVyRW50ZXI7XG4gIHZhciBlbnRlckNhbmNlbGxlZEhvb2sgPSBpc0FwcGVhclxuICAg
ID8gKGFwcGVhckNhbmNlbGxlZCB8fCBlbnRlckNhbmNlbGxlZClcbiAgICA6IGVudGVyQ2FuY2Vs
bGVkO1xuXG4gIHZhciBleHBsaWNpdEVudGVyRHVyYXRpb24gPSB0b051bWJlcihcbiAgICBpc09i
amVjdChkdXJhdGlvbilcbiAgICAgID8gZHVyYXRpb24uZW50ZXJcbiAgICAgIDogZHVyYXRpb25c
biAgKTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBl
eHBsaWNpdEVudGVyRHVyYXRpb24gIT0gbnVsbCkge1xuICAgIGNoZWNrRHVyYXRpb24oZXhwbGlj
aXRFbnRlckR1cmF0aW9uLCAnZW50ZXInLCB2bm9kZSk7XG4gIH1cblxuICB2YXIgZXhwZWN0c0NT
UyA9IGNzcyAhPT0gZmFsc2UgJiYgIWlzSUU5O1xuICB2YXIgdXNlcldhbnRzQ29udHJvbCA9IGdl
dEhvb2tBcmd1bWVudHNMZW5ndGgoZW50ZXJIb29rKTtcblxuICB2YXIgY2IgPSBlbC5fZW50ZXJD
YiA9IG9uY2UoZnVuY3Rpb24gKCkge1xuICAgIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgICByZW1v
dmVUcmFuc2l0aW9uQ2xhc3MoZWwsIHRvQ2xhc3MpO1xuICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNs
YXNzKGVsLCBhY3RpdmVDbGFzcyk7XG4gICAgfVxuICAgIGlmIChjYi5jYW5jZWxsZWQpIHtcbiAg
ICAgIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwg
c3RhcnRDbGFzcyk7XG4gICAgICB9XG4gICAgICBlbnRlckNhbmNlbGxlZEhvb2sgJiYgZW50ZXJD
YW5jZWxsZWRIb29rKGVsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWZ0ZXJFbnRlckhvb2sgJiYg
YWZ0ZXJFbnRlckhvb2soZWwpO1xuICAgIH1cbiAgICBlbC5fZW50ZXJDYiA9IG51bGw7XG4gIH0p
O1xuXG4gIGlmICghdm5vZGUuZGF0YS5zaG93KSB7XG4gICAgLy8gcmVtb3ZlIHBlbmRpbmcgbGVh
dmUgZWxlbWVudCBvbiBlbnRlciBieSBpbmplY3RpbmcgYW4gaW5zZXJ0IGhvb2tcbiAgICBtZXJn
ZVZOb2RlSG9vayh2bm9kZS5kYXRhLmhvb2sgfHwgKHZub2RlLmRhdGEuaG9vayA9IHt9KSwgJ2lu
c2VydCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBwYXJlbnQgPSBlbC5wYXJlbnROb2RlO1xu
ICAgICAgdmFyIHBlbmRpbmdOb2RlID0gcGFyZW50ICYmIHBhcmVudC5fcGVuZGluZyAmJiBwYXJl
bnQuX3BlbmRpbmdbdm5vZGUua2V5XTtcbiAgICAgIGlmIChwZW5kaW5nTm9kZSAmJlxuICAgICAg
ICBwZW5kaW5nTm9kZS50YWcgPT09IHZub2RlLnRhZyAmJlxuICAgICAgICBwZW5kaW5nTm9kZS5l
bG0uX2xlYXZlQ2JcbiAgICAgICkge1xuICAgICAgICBwZW5kaW5nTm9kZS5lbG0uX2xlYXZlQ2Io
KTtcbiAgICAgIH1cbiAgICAgIGVudGVySG9vayAmJiBlbnRlckhvb2soZWwsIGNiKTtcbiAgICB9
KTtcbiAgfVxuXG4gIC8vIHN0YXJ0IGVudGVyIHRyYW5zaXRpb25cbiAgYmVmb3JlRW50ZXJIb29r
ICYmIGJlZm9yZUVudGVySG9vayhlbCk7XG4gIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgYWRkVHJh
bnNpdGlvbkNsYXNzKGVsLCBzdGFydENsYXNzKTtcbiAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWws
IGFjdGl2ZUNsYXNzKTtcbiAgICBuZXh0RnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgYWRkVHJh
bnNpdGlvbkNsYXNzKGVsLCB0b0NsYXNzKTtcbiAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhl
bCwgc3RhcnRDbGFzcyk7XG4gICAgICBpZiAoIWNiLmNhbmNlbGxlZCAmJiAhdXNlcldhbnRzQ29u
dHJvbCkge1xuICAgICAgICBpZiAoaXNWYWxpZER1cmF0aW9uKGV4cGxpY2l0RW50ZXJEdXJhdGlv
bikpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KGNiLCBleHBsaWNpdEVudGVyRHVyYXRpb24pO1xu
ICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdoZW5UcmFuc2l0aW9uRW5kcyhlbCwgdHlwZSwg
Y2IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAodm5vZGUuZGF0
YS5zaG93KSB7XG4gICAgdG9nZ2xlRGlzcGxheSAmJiB0b2dnbGVEaXNwbGF5KCk7XG4gICAgZW50
ZXJIb29rICYmIGVudGVySG9vayhlbCwgY2IpO1xuICB9XG5cbiAgaWYgKCFleHBlY3RzQ1NTICYm
ICF1c2VyV2FudHNDb250cm9sKSB7XG4gICAgY2IoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBsZWF2
ZSAodm5vZGUsIHJtKSB7XG4gIHZhciBlbCA9IHZub2RlLmVsbTtcblxuICAvLyBjYWxsIGVudGVy
IGNhbGxiYWNrIG5vd1xuICBpZiAoaXNEZWYoZWwuX2VudGVyQ2IpKSB7XG4gICAgZWwuX2VudGVy
Q2IuY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICBlbC5fZW50ZXJDYigpO1xuICB9XG5cbiAgdmFyIGRh
dGEgPSByZXNvbHZlVHJhbnNpdGlvbih2bm9kZS5kYXRhLnRyYW5zaXRpb24pO1xuICBpZiAoaXNV
bmRlZihkYXRhKSkge1xuICAgIHJldHVybiBybSgpXG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25v
cmUgaWYgKi9cbiAgaWYgKGlzRGVmKGVsLl9sZWF2ZUNiKSB8fCBlbC5ub2RlVHlwZSAhPT0gMSkg
e1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIGNzcyA9IGRhdGEuY3NzO1xuICB2YXIgdHlwZSA9
IGRhdGEudHlwZTtcbiAgdmFyIGxlYXZlQ2xhc3MgPSBkYXRhLmxlYXZlQ2xhc3M7XG4gIHZhciBs
ZWF2ZVRvQ2xhc3MgPSBkYXRhLmxlYXZlVG9DbGFzcztcbiAgdmFyIGxlYXZlQWN0aXZlQ2xhc3Mg
PSBkYXRhLmxlYXZlQWN0aXZlQ2xhc3M7XG4gIHZhciBiZWZvcmVMZWF2ZSA9IGRhdGEuYmVmb3Jl
TGVhdmU7XG4gIHZhciBsZWF2ZSA9IGRhdGEubGVhdmU7XG4gIHZhciBhZnRlckxlYXZlID0gZGF0
YS5hZnRlckxlYXZlO1xuICB2YXIgbGVhdmVDYW5jZWxsZWQgPSBkYXRhLmxlYXZlQ2FuY2VsbGVk
O1xuICB2YXIgZGVsYXlMZWF2ZSA9IGRhdGEuZGVsYXlMZWF2ZTtcbiAgdmFyIGR1cmF0aW9uID0g
ZGF0YS5kdXJhdGlvbjtcblxuICB2YXIgZXhwZWN0c0NTUyA9IGNzcyAhPT0gZmFsc2UgJiYgIWlz
SUU5O1xuICB2YXIgdXNlcldhbnRzQ29udHJvbCA9IGdldEhvb2tBcmd1bWVudHNMZW5ndGgobGVh
dmUpO1xuXG4gIHZhciBleHBsaWNpdExlYXZlRHVyYXRpb24gPSB0b051bWJlcihcbiAgICBpc09i
amVjdChkdXJhdGlvbilcbiAgICAgID8gZHVyYXRpb24ubGVhdmVcbiAgICAgIDogZHVyYXRpb25c
biAgKTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBp
c0RlZihleHBsaWNpdExlYXZlRHVyYXRpb24pKSB7XG4gICAgY2hlY2tEdXJhdGlvbihleHBsaWNp
dExlYXZlRHVyYXRpb24sICdsZWF2ZScsIHZub2RlKTtcbiAgfVxuXG4gIHZhciBjYiA9IGVsLl9s
ZWF2ZUNiID0gb25jZShmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGVsLnBhcmVudE5vZGUgJiYgZWwu
cGFyZW50Tm9kZS5fcGVuZGluZykge1xuICAgICAgZWwucGFyZW50Tm9kZS5fcGVuZGluZ1t2bm9k
ZS5rZXldID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKGV4cGVjdHNDU1MpIHtcbiAgICAgIHJlbW92
ZVRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVUb0NsYXNzKTtcbiAgICAgIHJlbW92ZVRyYW5zaXRp
b25DbGFzcyhlbCwgbGVhdmVBY3RpdmVDbGFzcyk7XG4gICAgfVxuICAgIGlmIChjYi5jYW5jZWxs
ZWQpIHtcbiAgICAgIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgICAgIHJlbW92ZVRyYW5zaXRpb25D
bGFzcyhlbCwgbGVhdmVDbGFzcyk7XG4gICAgICB9XG4gICAgICBsZWF2ZUNhbmNlbGxlZCAmJiBs
ZWF2ZUNhbmNlbGxlZChlbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJtKCk7XG4gICAgICBhZnRl
ckxlYXZlICYmIGFmdGVyTGVhdmUoZWwpO1xuICAgIH1cbiAgICBlbC5fbGVhdmVDYiA9IG51bGw7
XG4gIH0pO1xuXG4gIGlmIChkZWxheUxlYXZlKSB7XG4gICAgZGVsYXlMZWF2ZShwZXJmb3JtTGVh
dmUpO1xuICB9IGVsc2Uge1xuICAgIHBlcmZvcm1MZWF2ZSgpO1xuICB9XG5cbiAgZnVuY3Rpb24g
cGVyZm9ybUxlYXZlICgpIHtcbiAgICAvLyB0aGUgZGVsYXllZCBsZWF2ZSBtYXkgaGF2ZSBhbHJl
YWR5IGJlZW4gY2FuY2VsbGVkXG4gICAgaWYgKGNiLmNhbmNlbGxlZCkge1xuICAgICAgcmV0dXJu
XG4gICAgfVxuICAgIC8vIHJlY29yZCBsZWF2aW5nIGVsZW1lbnRcbiAgICBpZiAoIXZub2RlLmRh
dGEuc2hvdykge1xuICAgICAgKGVsLnBhcmVudE5vZGUuX3BlbmRpbmcgfHwgKGVsLnBhcmVudE5v
ZGUuX3BlbmRpbmcgPSB7fSkpWyh2bm9kZS5rZXkpXSA9IHZub2RlO1xuICAgIH1cbiAgICBiZWZv
cmVMZWF2ZSAmJiBiZWZvcmVMZWF2ZShlbCk7XG4gICAgaWYgKGV4cGVjdHNDU1MpIHtcbiAgICAg
IGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVDbGFzcyk7XG4gICAgICBhZGRUcmFuc2l0aW9u
Q2xhc3MoZWwsIGxlYXZlQWN0aXZlQ2xhc3MpO1xuICAgICAgbmV4dEZyYW1lKGZ1bmN0aW9uICgp
IHtcbiAgICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZVRvQ2xhc3MpO1xuICAgICAg
ICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQ2xhc3MpO1xuICAgICAgICBpZiAoIWNi
LmNhbmNlbGxlZCAmJiAhdXNlcldhbnRzQ29udHJvbCkge1xuICAgICAgICAgIGlmIChpc1ZhbGlk
RHVyYXRpb24oZXhwbGljaXRMZWF2ZUR1cmF0aW9uKSkge1xuICAgICAgICAgICAgc2V0VGltZW91
dChjYiwgZXhwbGljaXRMZWF2ZUR1cmF0aW9uKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAg
ICAgICAgd2hlblRyYW5zaXRpb25FbmRzKGVsLCB0eXBlLCBjYik7XG4gICAgICAgICAgfVxuICAg
ICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgbGVhdmUgJiYgbGVhdmUoZWwsIGNiKTtcbiAg
ICBpZiAoIWV4cGVjdHNDU1MgJiYgIXVzZXJXYW50c0NvbnRyb2wpIHtcbiAgICAgIGNiKCk7XG4g
ICAgfVxuICB9XG59XG5cbi8vIG9ubHkgdXNlZCBpbiBkZXYgbW9kZVxuZnVuY3Rpb24gY2hlY2tE
dXJhdGlvbiAodmFsLCBuYW1lLCB2bm9kZSkge1xuICBpZiAodHlwZW9mIHZhbCAhPT0gJ251bWJl
cicpIHtcbiAgICB3YXJuKFxuICAgICAgXCI8dHJhbnNpdGlvbj4gZXhwbGljaXQgXCIgKyBuYW1l
ICsgXCIgZHVyYXRpb24gaXMgbm90IGEgdmFsaWQgbnVtYmVyIC0gXCIgK1xuICAgICAgXCJnb3Qg
XCIgKyAoSlNPTi5zdHJpbmdpZnkodmFsKSkgKyBcIi5cIixcbiAgICAgIHZub2RlLmNvbnRleHRc
biAgICApO1xuICB9IGVsc2UgaWYgKGlzTmFOKHZhbCkpIHtcbiAgICB3YXJuKFxuICAgICAgXCI8
dHJhbnNpdGlvbj4gZXhwbGljaXQgXCIgKyBuYW1lICsgXCIgZHVyYXRpb24gaXMgTmFOIC0gXCIg
K1xuICAgICAgJ3RoZSBkdXJhdGlvbiBleHByZXNzaW9uIG1pZ2h0IGJlIGluY29ycmVjdC4nLFxu
ICAgICAgdm5vZGUuY29udGV4dFxuICAgICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNWYWxpZER1
cmF0aW9uICh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdudW1iZXInICYmICFpc05h
Tih2YWwpXG59XG5cbi8qKlxuICogTm9ybWFsaXplIGEgdHJhbnNpdGlvbiBob29rJ3MgYXJndW1l
bnQgbGVuZ3RoLiBUaGUgaG9vayBtYXkgYmU6XG4gKiAtIGEgbWVyZ2VkIGhvb2sgKGludm9rZXIp
IHdpdGggdGhlIG9yaWdpbmFsIGluIC5mbnNcbiAqIC0gYSB3cmFwcGVkIGNvbXBvbmVudCBtZXRo
b2QgKGNoZWNrIC5fbGVuZ3RoKVxuICogLSBhIHBsYWluIGZ1bmN0aW9uICgubGVuZ3RoKVxuICov
XG5mdW5jdGlvbiBnZXRIb29rQXJndW1lbnRzTGVuZ3RoIChmbikge1xuICBpZiAoaXNVbmRlZihm
bikpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICB2YXIgaW52b2tlckZucyA9IGZuLmZucztc
biAgaWYgKGlzRGVmKGludm9rZXJGbnMpKSB7XG4gICAgLy8gaW52b2tlclxuICAgIHJldHVybiBn
ZXRIb29rQXJndW1lbnRzTGVuZ3RoKFxuICAgICAgQXJyYXkuaXNBcnJheShpbnZva2VyRm5zKVxu
ICAgICAgICA/IGludm9rZXJGbnNbMF1cbiAgICAgICAgOiBpbnZva2VyRm5zXG4gICAgKVxuICB9
IGVsc2Uge1xuICAgIHJldHVybiAoZm4uX2xlbmd0aCB8fCBmbi5sZW5ndGgpID4gMVxuICB9XG59
XG5cbmZ1bmN0aW9uIF9lbnRlciAoXywgdm5vZGUpIHtcbiAgaWYgKHZub2RlLmRhdGEuc2hvdyAh
PT0gdHJ1ZSkge1xuICAgIGVudGVyKHZub2RlKTtcbiAgfVxufVxuXG52YXIgdHJhbnNpdGlvbiA9
IGluQnJvd3NlciA/IHtcbiAgY3JlYXRlOiBfZW50ZXIsXG4gIGFjdGl2YXRlOiBfZW50ZXIsXG4g
IHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlJCQxICh2bm9kZSwgcm0pIHtcbiAgICAvKiBpc3RhbmJ1
bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh2bm9kZS5kYXRhLnNob3cgIT09IHRydWUpIHtcbiAg
ICAgIGxlYXZlKHZub2RlLCBybSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJtKCk7XG4gICAgfVxu
ICB9XG59IDoge307XG5cbnZhciBwbGF0Zm9ybU1vZHVsZXMgPSBbXG4gIGF0dHJzLFxuICBrbGFz
cyxcbiAgZXZlbnRzLFxuICBkb21Qcm9wcyxcbiAgc3R5bGUsXG4gIHRyYW5zaXRpb25cbl07XG5c
bi8qICAqL1xuXG4vLyB0aGUgZGlyZWN0aXZlIG1vZHVsZSBzaG91bGQgYmUgYXBwbGllZCBsYXN0
LCBhZnRlciBhbGxcbi8vIGJ1aWx0LWluIG1vZHVsZXMgaGF2ZSBiZWVuIGFwcGxpZWQuXG52YXIg
bW9kdWxlcyA9IHBsYXRmb3JtTW9kdWxlcy5jb25jYXQoYmFzZU1vZHVsZXMpO1xuXG52YXIgcGF0
Y2ggPSBjcmVhdGVQYXRjaEZ1bmN0aW9uKHsgbm9kZU9wczogbm9kZU9wcywgbW9kdWxlczogbW9k
dWxlcyB9KTtcblxuLyoqXG4gKiBOb3QgdHlwZSBjaGVja2luZyB0aGlzIGZpbGUgYmVjYXVzZSBm
bG93IGRvZXNuJ3QgbGlrZSBhdHRhY2hpbmdcbiAqIHByb3BlcnRpZXMgdG8gRWxlbWVudHMuXG4g
Ki9cblxudmFyIGlzVGV4dElucHV0VHlwZSA9IG1ha2VNYXAoJ3RleHQsbnVtYmVyLHBhc3N3b3Jk
LHNlYXJjaCxlbWFpbCx0ZWwsdXJsJyk7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuaWYg
KGlzSUU5KSB7XG4gIC8vIGh0dHA6Ly93d3cubWF0dHM0MTEuY29tL3Bvc3QvaW50ZXJuZXQtZXhw
bG9yZXItOS1vbmlucHV0L1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdzZWxlY3Rpb25j
aGFuZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGVsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVu
dDtcbiAgICBpZiAoZWwgJiYgZWwudm1vZGVsKSB7XG4gICAgICB0cmlnZ2VyKGVsLCAnaW5wdXQn
KTtcbiAgICB9XG4gIH0pO1xufVxuXG52YXIgbW9kZWwkMSA9IHtcbiAgaW5zZXJ0ZWQ6IGZ1bmN0
aW9uIGluc2VydGVkIChlbCwgYmluZGluZywgdm5vZGUpIHtcbiAgICBpZiAodm5vZGUudGFnID09
PSAnc2VsZWN0Jykge1xuICAgICAgdmFyIGNiID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBzZXRT
ZWxlY3RlZChlbCwgYmluZGluZywgdm5vZGUuY29udGV4dCk7XG4gICAgICB9O1xuICAgICAgY2Io
KTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKGlzSUUgfHwgaXNF
ZGdlKSB7XG4gICAgICAgIHNldFRpbWVvdXQoY2IsIDApO1xuICAgICAgfVxuICAgICAgZWwuX3ZP
cHRpb25zID0gW10ubWFwLmNhbGwoZWwub3B0aW9ucywgZ2V0VmFsdWUpO1xuICAgIH0gZWxzZSBp
ZiAodm5vZGUudGFnID09PSAndGV4dGFyZWEnIHx8IGlzVGV4dElucHV0VHlwZShlbC50eXBlKSkg
e1xuICAgICAgZWwuX3ZNb2RpZmllcnMgPSBiaW5kaW5nLm1vZGlmaWVycztcbiAgICAgIGlmICgh
YmluZGluZy5tb2RpZmllcnMubGF6eSkge1xuICAgICAgICAvLyBTYWZhcmkgPCAxMC4yICYgVUlX
ZWJWaWV3IGRvZXNuJ3QgZmlyZSBjb21wb3NpdGlvbmVuZCB3aGVuXG4gICAgICAgIC8vIHN3aXRj
aGluZyBmb2N1cyBiZWZvcmUgY29uZmlybWluZyBjb21wb3NpdGlvbiBjaG9pY2VcbiAgICAgICAg
Ly8gdGhpcyBhbHNvIGZpeGVzIHRoZSBpc3N1ZSB3aGVyZSBzb21lIGJyb3dzZXJzIGUuZy4gaU9T
IENocm9tZVxuICAgICAgICAvLyBmaXJlcyBcImNoYW5nZVwiIGluc3RlYWQgb2YgXCJpbnB1dFwi
IG9uIGF1dG9jb21wbGV0ZS5cbiAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywg
b25Db21wb3NpdGlvbkVuZCk7XG4gICAgICAgIGlmICghaXNBbmRyb2lkKSB7XG4gICAgICAgICAg
ZWwuYWRkRXZlbnRMaXN0ZW5lcignY29tcG9zaXRpb25zdGFydCcsIG9uQ29tcG9zaXRpb25TdGFy
dCk7XG4gICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignY29tcG9zaXRpb25lbmQnLCBvbkNv
bXBvc2l0aW9uRW5kKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYg
Ki9cbiAgICAgICAgaWYgKGlzSUU5KSB7XG4gICAgICAgICAgZWwudm1vZGVsID0gdHJ1ZTtcbiAg
ICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgY29tcG9uZW50VXBkYXRlZDogZnVuY3Rp
b24gY29tcG9uZW50VXBkYXRlZCAoZWwsIGJpbmRpbmcsIHZub2RlKSB7XG4gICAgaWYgKHZub2Rl
LnRhZyA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgIHNldFNlbGVjdGVkKGVsLCBiaW5kaW5nLCB2bm9k
ZS5jb250ZXh0KTtcbiAgICAgIC8vIGluIGNhc2UgdGhlIG9wdGlvbnMgcmVuZGVyZWQgYnkgdi1m
b3IgaGF2ZSBjaGFuZ2VkLFxuICAgICAgLy8gaXQncyBwb3NzaWJsZSB0aGF0IHRoZSB2YWx1ZSBp
cyBvdXQtb2Ytc3luYyB3aXRoIHRoZSByZW5kZXJlZCBvcHRpb25zLlxuICAgICAgLy8gZGV0ZWN0
IHN1Y2ggY2FzZXMgYW5kIGZpbHRlciBvdXQgdmFsdWVzIHRoYXQgbm8gbG9uZ2VyIGhhcyBhIG1h
dGNoaW5nXG4gICAgICAvLyBvcHRpb24gaW4gdGhlIERPTS5cbiAgICAgIHZhciBwcmV2T3B0aW9u
cyA9IGVsLl92T3B0aW9ucztcbiAgICAgIHZhciBjdXJPcHRpb25zID0gZWwuX3ZPcHRpb25zID0g
W10ubWFwLmNhbGwoZWwub3B0aW9ucywgZ2V0VmFsdWUpO1xuICAgICAgaWYgKGN1ck9wdGlvbnMu
c29tZShmdW5jdGlvbiAobywgaSkgeyByZXR1cm4gIWxvb3NlRXF1YWwobywgcHJldk9wdGlvbnNb
aV0pOyB9KSkge1xuICAgICAgICB0cmlnZ2VyKGVsLCAnY2hhbmdlJyk7XG4gICAgICB9XG4gICAg
fVxuICB9XG59O1xuXG5mdW5jdGlvbiBzZXRTZWxlY3RlZCAoZWwsIGJpbmRpbmcsIHZtKSB7XG4g
IHZhciB2YWx1ZSA9IGJpbmRpbmcudmFsdWU7XG4gIHZhciBpc011bHRpcGxlID0gZWwubXVsdGlw
bGU7XG4gIGlmIChpc011bHRpcGxlICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHBy
b2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgIFwiPHNl
bGVjdCBtdWx0aXBsZSB2LW1vZGVsPVxcXCJcIiArIChiaW5kaW5nLmV4cHJlc3Npb24pICsgXCJc
XFwiPiBcIiArXG4gICAgICBcImV4cGVjdHMgYW4gQXJyYXkgdmFsdWUgZm9yIGl0cyBiaW5kaW5n
LCBidXQgZ290IFwiICsgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkuc2xp
Y2UoOCwgLTEpKSxcbiAgICAgIHZtXG4gICAgKTtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgc2Vs
ZWN0ZWQsIG9wdGlvbjtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBlbC5vcHRpb25zLmxlbmd0aDsg
aSA8IGw7IGkrKykge1xuICAgIG9wdGlvbiA9IGVsLm9wdGlvbnNbaV07XG4gICAgaWYgKGlzTXVs
dGlwbGUpIHtcbiAgICAgIHNlbGVjdGVkID0gbG9vc2VJbmRleE9mKHZhbHVlLCBnZXRWYWx1ZShv
cHRpb24pKSA+IC0xO1xuICAgICAgaWYgKG9wdGlvbi5zZWxlY3RlZCAhPT0gc2VsZWN0ZWQpIHtc
biAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgICB9XG4gICAgfSBlbHNl
IHtcbiAgICAgIGlmIChsb29zZUVxdWFsKGdldFZhbHVlKG9wdGlvbiksIHZhbHVlKSkge1xuICAg
ICAgICBpZiAoZWwuc2VsZWN0ZWRJbmRleCAhPT0gaSkge1xuICAgICAgICAgIGVsLnNlbGVjdGVk
SW5kZXggPSBpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAg
fVxuICBpZiAoIWlzTXVsdGlwbGUpIHtcbiAgICBlbC5zZWxlY3RlZEluZGV4ID0gLTE7XG4gIH1c
bn1cblxuZnVuY3Rpb24gZ2V0VmFsdWUgKG9wdGlvbikge1xuICByZXR1cm4gJ192YWx1ZScgaW4g
b3B0aW9uXG4gICAgPyBvcHRpb24uX3ZhbHVlXG4gICAgOiBvcHRpb24udmFsdWVcbn1cblxuZnVu
Y3Rpb24gb25Db21wb3NpdGlvblN0YXJ0IChlKSB7XG4gIGUudGFyZ2V0LmNvbXBvc2luZyA9IHRy
dWU7XG59XG5cbmZ1bmN0aW9uIG9uQ29tcG9zaXRpb25FbmQgKGUpIHtcbiAgLy8gcHJldmVudCB0
cmlnZ2VyaW5nIGFuIGlucHV0IGV2ZW50IGZvciBubyByZWFzb25cbiAgaWYgKCFlLnRhcmdldC5j
b21wb3NpbmcpIHsgcmV0dXJuIH1cbiAgZS50YXJnZXQuY29tcG9zaW5nID0gZmFsc2U7XG4gIHRy
aWdnZXIoZS50YXJnZXQsICdpbnB1dCcpO1xufVxuXG5mdW5jdGlvbiB0cmlnZ2VyIChlbCwgdHlw
ZSkge1xuICB2YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdIVE1MRXZlbnRzJyk7XG4gIGUu
aW5pdEV2ZW50KHR5cGUsIHRydWUsIHRydWUpO1xuICBlbC5kaXNwYXRjaEV2ZW50KGUpO1xufVxu
XG4vKiAgKi9cblxuLy8gcmVjdXJzaXZlbHkgc2VhcmNoIGZvciBwb3NzaWJsZSB0cmFuc2l0aW9u
IGRlZmluZWQgaW5zaWRlIHRoZSBjb21wb25lbnQgcm9vdFxuZnVuY3Rpb24gbG9jYXRlTm9kZSAo
dm5vZGUpIHtcbiAgcmV0dXJuIHZub2RlLmNvbXBvbmVudEluc3RhbmNlICYmICghdm5vZGUuZGF0
YSB8fCAhdm5vZGUuZGF0YS50cmFuc2l0aW9uKVxuICAgID8gbG9jYXRlTm9kZSh2bm9kZS5jb21w
b25lbnRJbnN0YW5jZS5fdm5vZGUpXG4gICAgOiB2bm9kZVxufVxuXG52YXIgc2hvdyA9IHtcbiAg
YmluZDogZnVuY3Rpb24gYmluZCAoZWwsIHJlZiwgdm5vZGUpIHtcbiAgICB2YXIgdmFsdWUgPSBy
ZWYudmFsdWU7XG5cbiAgICB2bm9kZSA9IGxvY2F0ZU5vZGUodm5vZGUpO1xuICAgIHZhciB0cmFu
c2l0aW9uJCQxID0gdm5vZGUuZGF0YSAmJiB2bm9kZS5kYXRhLnRyYW5zaXRpb247XG4gICAgdmFy
IG9yaWdpbmFsRGlzcGxheSA9IGVsLl9fdk9yaWdpbmFsRGlzcGxheSA9XG4gICAgICBlbC5zdHls
ZS5kaXNwbGF5ID09PSAnbm9uZScgPyAnJyA6IGVsLnN0eWxlLmRpc3BsYXk7XG4gICAgaWYgKHZh
bHVlICYmIHRyYW5zaXRpb24kJDEpIHtcbiAgICAgIHZub2RlLmRhdGEuc2hvdyA9IHRydWU7XG4g
ICAgICBlbnRlcih2bm9kZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBlbC5zdHlsZS5kaXNwbGF5
ID0gb3JpZ2luYWxEaXNwbGF5O1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsLnN0
eWxlLmRpc3BsYXkgPSB2YWx1ZSA/IG9yaWdpbmFsRGlzcGxheSA6ICdub25lJztcbiAgICB9XG4g
IH0sXG5cbiAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUgKGVsLCByZWYsIHZub2RlKSB7XG4gICAg
dmFyIHZhbHVlID0gcmVmLnZhbHVlO1xuICAgIHZhciBvbGRWYWx1ZSA9IHJlZi5vbGRWYWx1ZTtc
blxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICh2YWx1ZSA9PT0gb2xkVmFs
dWUpIHsgcmV0dXJuIH1cbiAgICB2bm9kZSA9IGxvY2F0ZU5vZGUodm5vZGUpO1xuICAgIHZhciB0
cmFuc2l0aW9uJCQxID0gdm5vZGUuZGF0YSAmJiB2bm9kZS5kYXRhLnRyYW5zaXRpb247XG4gICAg
aWYgKHRyYW5zaXRpb24kJDEpIHtcbiAgICAgIHZub2RlLmRhdGEuc2hvdyA9IHRydWU7XG4gICAg
ICBpZiAodmFsdWUpIHtcbiAgICAgICAgZW50ZXIodm5vZGUsIGZ1bmN0aW9uICgpIHtcbiAgICAg
ICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gZWwuX192T3JpZ2luYWxEaXNwbGF5O1xuICAgICAgICB9
KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxlYXZlKHZub2RlLCBmdW5jdGlvbiAoKSB7XG4g
ICAgICAgICAgZWwuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgfSk7XG4gICAgICB9
XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSB2YWx1ZSA/IGVsLl9fdk9y
aWdpbmFsRGlzcGxheSA6ICdub25lJztcbiAgICB9XG4gIH0sXG5cbiAgdW5iaW5kOiBmdW5jdGlv
biB1bmJpbmQgKFxuICAgIGVsLFxuICAgIGJpbmRpbmcsXG4gICAgdm5vZGUsXG4gICAgb2xkVm5v
ZGUsXG4gICAgaXNEZXN0cm95XG4gICkge1xuICAgIGlmICghaXNEZXN0cm95KSB7XG4gICAgICBl
bC5zdHlsZS5kaXNwbGF5ID0gZWwuX192T3JpZ2luYWxEaXNwbGF5O1xuICAgIH1cbiAgfVxufTtc
blxudmFyIHBsYXRmb3JtRGlyZWN0aXZlcyA9IHtcbiAgbW9kZWw6IG1vZGVsJDEsXG4gIHNob3c6
IHNob3dcbn07XG5cbi8qICAqL1xuXG4vLyBQcm92aWRlcyB0cmFuc2l0aW9uIHN1cHBvcnQgZm9y
IGEgc2luZ2xlIGVsZW1lbnQvY29tcG9uZW50LlxuLy8gc3VwcG9ydHMgdHJhbnNpdGlvbiBtb2Rl
IChvdXQtaW4gLyBpbi1vdXQpXG5cbnZhciB0cmFuc2l0aW9uUHJvcHMgPSB7XG4gIG5hbWU6IFN0
cmluZyxcbiAgYXBwZWFyOiBCb29sZWFuLFxuICBjc3M6IEJvb2xlYW4sXG4gIG1vZGU6IFN0cmlu
ZyxcbiAgdHlwZTogU3RyaW5nLFxuICBlbnRlckNsYXNzOiBTdHJpbmcsXG4gIGxlYXZlQ2xhc3M6
IFN0cmluZyxcbiAgZW50ZXJUb0NsYXNzOiBTdHJpbmcsXG4gIGxlYXZlVG9DbGFzczogU3RyaW5n
LFxuICBlbnRlckFjdGl2ZUNsYXNzOiBTdHJpbmcsXG4gIGxlYXZlQWN0aXZlQ2xhc3M6IFN0cmlu
ZyxcbiAgYXBwZWFyQ2xhc3M6IFN0cmluZyxcbiAgYXBwZWFyQWN0aXZlQ2xhc3M6IFN0cmluZyxc
biAgYXBwZWFyVG9DbGFzczogU3RyaW5nLFxuICBkdXJhdGlvbjogW051bWJlciwgU3RyaW5nLCBP
YmplY3RdXG59O1xuXG4vLyBpbiBjYXNlIHRoZSBjaGlsZCBpcyBhbHNvIGFuIGFic3RyYWN0IGNv
bXBvbmVudCwgZS5nLiA8a2VlcC1hbGl2ZT5cbi8vIHdlIHdhbnQgdG8gcmVjdXJzaXZlbHkgcmV0
cmlldmUgdGhlIHJlYWwgY29tcG9uZW50IHRvIGJlIHJlbmRlcmVkXG5mdW5jdGlvbiBnZXRSZWFs
Q2hpbGQgKHZub2RlKSB7XG4gIHZhciBjb21wT3B0aW9ucyA9IHZub2RlICYmIHZub2RlLmNvbXBv
bmVudE9wdGlvbnM7XG4gIGlmIChjb21wT3B0aW9ucyAmJiBjb21wT3B0aW9ucy5DdG9yLm9wdGlv
bnMuYWJzdHJhY3QpIHtcbiAgICByZXR1cm4gZ2V0UmVhbENoaWxkKGdldEZpcnN0Q29tcG9uZW50
Q2hpbGQoY29tcE9wdGlvbnMuY2hpbGRyZW4pKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB2bm9k
ZVxuICB9XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RUcmFuc2l0aW9uRGF0YSAoY29tcCkge1xuICB2
YXIgZGF0YSA9IHt9O1xuICB2YXIgb3B0aW9ucyA9IGNvbXAuJG9wdGlvbnM7XG4gIC8vIHByb3Bz
XG4gIGZvciAodmFyIGtleSBpbiBvcHRpb25zLnByb3BzRGF0YSkge1xuICAgIGRhdGFba2V5XSA9
IGNvbXBba2V5XTtcbiAgfVxuICAvLyBldmVudHMuXG4gIC8vIGV4dHJhY3QgbGlzdGVuZXJzIGFu
ZCBwYXNzIHRoZW0gZGlyZWN0bHkgdG8gdGhlIHRyYW5zaXRpb24gbWV0aG9kc1xuICB2YXIgbGlz
dGVuZXJzID0gb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzO1xuICBmb3IgKHZhciBrZXkkMSBpbiBs
aXN0ZW5lcnMpIHtcbiAgICBkYXRhW2NhbWVsaXplKGtleSQxKV0gPSBsaXN0ZW5lcnNba2V5JDFd
O1xuICB9XG4gIHJldHVybiBkYXRhXG59XG5cbmZ1bmN0aW9uIHBsYWNlaG9sZGVyIChoLCByYXdD
aGlsZCkge1xuICBpZiAoL1xcZC1rZWVwLWFsaXZlJC8udGVzdChyYXdDaGlsZC50YWcpKSB7XG4g
ICAgcmV0dXJuIGgoJ2tlZXAtYWxpdmUnLCB7XG4gICAgICBwcm9wczogcmF3Q2hpbGQuY29tcG9u
ZW50T3B0aW9ucy5wcm9wc0RhdGFcbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIGhhc1BhcmVu
dFRyYW5zaXRpb24gKHZub2RlKSB7XG4gIHdoaWxlICgodm5vZGUgPSB2bm9kZS5wYXJlbnQpKSB7
XG4gICAgaWYgKHZub2RlLmRhdGEudHJhbnNpdGlvbikge1xuICAgICAgcmV0dXJuIHRydWVcbiAg
ICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNTYW1lQ2hpbGQgKGNoaWxkLCBvbGRDaGlsZCkge1xu
ICByZXR1cm4gb2xkQ2hpbGQua2V5ID09PSBjaGlsZC5rZXkgJiYgb2xkQ2hpbGQudGFnID09PSBj
aGlsZC50YWdcbn1cblxuZnVuY3Rpb24gaXNBc3luY1BsYWNlaG9sZGVyIChub2RlKSB7XG4gIHJl
dHVybiBub2RlLmlzQ29tbWVudCAmJiBub2RlLmFzeW5jRmFjdG9yeVxufVxuXG52YXIgVHJhbnNp
dGlvbiA9IHtcbiAgbmFtZTogJ3RyYW5zaXRpb24nLFxuICBwcm9wczogdHJhbnNpdGlvblByb3Bz
LFxuICBhYnN0cmFjdDogdHJ1ZSxcblxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlciAoaCkge1xu
ICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIGNoaWxkcmVuID0gdGhpcy4kb3B0aW9u
cy5fcmVuZGVyQ2hpbGRyZW47XG4gICAgaWYgKCFjaGlsZHJlbikge1xuICAgICAgcmV0dXJuXG4g
ICAgfVxuXG4gICAgLy8gZmlsdGVyIG91dCB0ZXh0IG5vZGVzIChwb3NzaWJsZSB3aGl0ZXNwYWNl
cylcbiAgICBjaGlsZHJlbiA9IGNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbiAoYykgeyByZXR1cm4g
Yy50YWcgfHwgaXNBc3luY1BsYWNlaG9sZGVyKGMpOyB9KTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25v
cmUgaWYgKi9cbiAgICBpZiAoIWNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgcmV0dXJuXG4gICAg
fVxuXG4gICAgLy8gd2FybiBtdWx0aXBsZSBlbGVtZW50c1xuICAgIGlmIChwcm9jZXNzLmVudi5O
T0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGNoaWxkcmVuLmxlbmd0aCA+IDEpIHtcbiAgICAg
IHdhcm4oXG4gICAgICAgICc8dHJhbnNpdGlvbj4gY2FuIG9ubHkgYmUgdXNlZCBvbiBhIHNpbmds
ZSBlbGVtZW50LiBVc2UgJyArXG4gICAgICAgICc8dHJhbnNpdGlvbi1ncm91cD4gZm9yIGxpc3Rz
LicsXG4gICAgICAgIHRoaXMuJHBhcmVudFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB2YXIgbW9k
ZSA9IHRoaXMubW9kZTtcblxuICAgIC8vIHdhcm4gaW52YWxpZCBtb2RlXG4gICAgaWYgKHByb2Nl
c3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgIG1vZGUgJiYgbW9kZSAh
PT0gJ2luLW91dCcgJiYgbW9kZSAhPT0gJ291dC1pbidcbiAgICApIHtcbiAgICAgIHdhcm4oXG4g
ICAgICAgICdpbnZhbGlkIDx0cmFuc2l0aW9uPiBtb2RlOiAnICsgbW9kZSxcbiAgICAgICAgdGhp
cy4kcGFyZW50XG4gICAgICApO1xuICAgIH1cblxuICAgIHZhciByYXdDaGlsZCA9IGNoaWxkcmVu
WzBdO1xuXG4gICAgLy8gaWYgdGhpcyBpcyBhIGNvbXBvbmVudCByb290IG5vZGUgYW5kIHRoZSBj
b21wb25lbnQnc1xuICAgIC8vIHBhcmVudCBjb250YWluZXIgbm9kZSBhbHNvIGhhcyB0cmFuc2l0
aW9uLCBza2lwLlxuICAgIGlmIChoYXNQYXJlbnRUcmFuc2l0aW9uKHRoaXMuJHZub2RlKSkge1xu
ICAgICAgcmV0dXJuIHJhd0NoaWxkXG4gICAgfVxuXG4gICAgLy8gYXBwbHkgdHJhbnNpdGlvbiBk
YXRhIHRvIGNoaWxkXG4gICAgLy8gdXNlIGdldFJlYWxDaGlsZCgpIHRvIGlnbm9yZSBhYnN0cmFj
dCBjb21wb25lbnRzIGUuZy4ga2VlcC1hbGl2ZVxuICAgIHZhciBjaGlsZCA9IGdldFJlYWxDaGls
ZChyYXdDaGlsZCk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFjaGls
ZCkge1xuICAgICAgcmV0dXJuIHJhd0NoaWxkXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2xlYXZp
bmcpIHtcbiAgICAgIHJldHVybiBwbGFjZWhvbGRlcihoLCByYXdDaGlsZClcbiAgICB9XG5cbiAg
ICAvLyBlbnN1cmUgYSBrZXkgdGhhdCBpcyB1bmlxdWUgdG8gdGhlIHZub2RlIHR5cGUgYW5kIHRv
IHRoaXMgdHJhbnNpdGlvblxuICAgIC8vIGNvbXBvbmVudCBpbnN0YW5jZS4gVGhpcyBrZXkgd2ls
bCBiZSB1c2VkIHRvIHJlbW92ZSBwZW5kaW5nIGxlYXZpbmcgbm9kZXNcbiAgICAvLyBkdXJpbmcg
ZW50ZXJpbmcuXG4gICAgdmFyIGlkID0gXCJfX3RyYW5zaXRpb24tXCIgKyAodGhpcy5fdWlkKSAr
IFwiLVwiO1xuICAgIGNoaWxkLmtleSA9IGNoaWxkLmtleSA9PSBudWxsXG4gICAgICA/IGNoaWxk
LmlzQ29tbWVudFxuICAgICAgICA/IGlkICsgJ2NvbW1lbnQnXG4gICAgICAgIDogaWQgKyBjaGls
ZC50YWdcbiAgICAgIDogaXNQcmltaXRpdmUoY2hpbGQua2V5KVxuICAgICAgICA/IChTdHJpbmco
Y2hpbGQua2V5KS5pbmRleE9mKGlkKSA9PT0gMCA/IGNoaWxkLmtleSA6IGlkICsgY2hpbGQua2V5
KVxuICAgICAgICA6IGNoaWxkLmtleTtcblxuICAgIHZhciBkYXRhID0gKGNoaWxkLmRhdGEgfHwg
KGNoaWxkLmRhdGEgPSB7fSkpLnRyYW5zaXRpb24gPSBleHRyYWN0VHJhbnNpdGlvbkRhdGEodGhp
cyk7XG4gICAgdmFyIG9sZFJhd0NoaWxkID0gdGhpcy5fdm5vZGU7XG4gICAgdmFyIG9sZENoaWxk
ID0gZ2V0UmVhbENoaWxkKG9sZFJhd0NoaWxkKTtcblxuICAgIC8vIG1hcmsgdi1zaG93XG4gICAg
Ly8gc28gdGhhdCB0aGUgdHJhbnNpdGlvbiBtb2R1bGUgY2FuIGhhbmQgb3ZlciB0aGUgY29udHJv
bCB0byB0aGUgZGlyZWN0aXZlXG4gICAgaWYgKGNoaWxkLmRhdGEuZGlyZWN0aXZlcyAmJiBjaGls
ZC5kYXRhLmRpcmVjdGl2ZXMuc29tZShmdW5jdGlvbiAoZCkgeyByZXR1cm4gZC5uYW1lID09PSAn
c2hvdyc7IH0pKSB7XG4gICAgICBjaGlsZC5kYXRhLnNob3cgPSB0cnVlO1xuICAgIH1cblxuICAg
IGlmIChcbiAgICAgIG9sZENoaWxkICYmXG4gICAgICBvbGRDaGlsZC5kYXRhICYmXG4gICAgICAh
aXNTYW1lQ2hpbGQoY2hpbGQsIG9sZENoaWxkKSAmJlxuICAgICAgIWlzQXN5bmNQbGFjZWhvbGRl
cihvbGRDaGlsZClcbiAgICApIHtcbiAgICAgIC8vIHJlcGxhY2Ugb2xkIGNoaWxkIHRyYW5zaXRp
b24gZGF0YSB3aXRoIGZyZXNoIG9uZVxuICAgICAgLy8gaW1wb3J0YW50IGZvciBkeW5hbWljIHRy
YW5zaXRpb25zIVxuICAgICAgdmFyIG9sZERhdGEgPSBvbGRDaGlsZCAmJiAob2xkQ2hpbGQuZGF0
YS50cmFuc2l0aW9uID0gZXh0ZW5kKHt9LCBkYXRhKSk7XG4gICAgICAvLyBoYW5kbGUgdHJhbnNp
dGlvbiBtb2RlXG4gICAgICBpZiAobW9kZSA9PT0gJ291dC1pbicpIHtcbiAgICAgICAgLy8gcmV0
dXJuIHBsYWNlaG9sZGVyIG5vZGUgYW5kIHF1ZXVlIHVwZGF0ZSB3aGVuIGxlYXZlIGZpbmlzaGVz
XG4gICAgICAgIHRoaXMuX2xlYXZpbmcgPSB0cnVlO1xuICAgICAgICBtZXJnZVZOb2RlSG9vayhv
bGREYXRhLCAnYWZ0ZXJMZWF2ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aGlzJDEuX2xl
YXZpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzJDEuJGZvcmNlVXBkYXRlKCk7XG4gICAgICAg
IH0pO1xuICAgICAgICByZXR1cm4gcGxhY2Vob2xkZXIoaCwgcmF3Q2hpbGQpXG4gICAgICB9IGVs
c2UgaWYgKG1vZGUgPT09ICdpbi1vdXQnKSB7XG4gICAgICAgIGlmIChpc0FzeW5jUGxhY2Vob2xk
ZXIoY2hpbGQpKSB7XG4gICAgICAgICAgcmV0dXJuIG9sZFJhd0NoaWxkXG4gICAgICAgIH1cbiAg
ICAgICAgdmFyIGRlbGF5ZWRMZWF2ZTtcbiAgICAgICAgdmFyIHBlcmZvcm1MZWF2ZSA9IGZ1bmN0
aW9uICgpIHsgZGVsYXllZExlYXZlKCk7IH07XG4gICAgICAgIG1lcmdlVk5vZGVIb29rKGRhdGEs
ICdhZnRlckVudGVyJywgcGVyZm9ybUxlYXZlKTtcbiAgICAgICAgbWVyZ2VWTm9kZUhvb2soZGF0
YSwgJ2VudGVyQ2FuY2VsbGVkJywgcGVyZm9ybUxlYXZlKTtcbiAgICAgICAgbWVyZ2VWTm9kZUhv
b2sob2xkRGF0YSwgJ2RlbGF5TGVhdmUnLCBmdW5jdGlvbiAobGVhdmUpIHsgZGVsYXllZExlYXZl
ID0gbGVhdmU7IH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByYXdDaGlsZFxuICB9
XG59O1xuXG4vKiAgKi9cblxuLy8gUHJvdmlkZXMgdHJhbnNpdGlvbiBzdXBwb3J0IGZvciBsaXN0
IGl0ZW1zLlxuLy8gc3VwcG9ydHMgbW92ZSB0cmFuc2l0aW9ucyB1c2luZyB0aGUgRkxJUCB0ZWNo
bmlxdWUuXG5cbi8vIEJlY2F1c2UgdGhlIHZkb20ncyBjaGlsZHJlbiB1cGRhdGUgYWxnb3JpdGht
IGlzIFwidW5zdGFibGVcIiAtIGkuZS5cbi8vIGl0IGRvZXNuJ3QgZ3VhcmFudGVlIHRoZSByZWxh
dGl2ZSBwb3NpdGlvbmluZyBvZiByZW1vdmVkIGVsZW1lbnRzLFxuLy8gd2UgZm9yY2UgdHJhbnNp
dGlvbi1ncm91cCB0byB1cGRhdGUgaXRzIGNoaWxkcmVuIGludG8gdHdvIHBhc3Nlczpcbi8vIGlu
IHRoZSBmaXJzdCBwYXNzLCB3ZSByZW1vdmUgYWxsIG5vZGVzIHRoYXQgbmVlZCB0byBiZSByZW1v
dmVkLFxuLy8gdHJpZ2dlcmluZyB0aGVpciBsZWF2aW5nIHRyYW5zaXRpb247IGluIHRoZSBzZWNv
bmQgcGFzcywgd2UgaW5zZXJ0L21vdmVcbi8vIGludG8gdGhlIGZpbmFsIGRlc2lyZWQgc3RhdGUu
IFRoaXMgd2F5IGluIHRoZSBzZWNvbmQgcGFzcyByZW1vdmVkXG4vLyBub2RlcyB3aWxsIHJlbWFp
biB3aGVyZSB0aGV5IHNob3VsZCBiZS5cblxudmFyIHByb3BzID0gZXh0ZW5kKHtcbiAgdGFnOiBT
dHJpbmcsXG4gIG1vdmVDbGFzczogU3RyaW5nXG59LCB0cmFuc2l0aW9uUHJvcHMpO1xuXG5kZWxl
dGUgcHJvcHMubW9kZTtcblxudmFyIFRyYW5zaXRpb25Hcm91cCA9IHtcbiAgcHJvcHM6IHByb3Bz
LFxuXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyIChoKSB7XG4gICAgdmFyIHRhZyA9IHRoaXMu
dGFnIHx8IHRoaXMuJHZub2RlLmRhdGEudGFnIHx8ICdzcGFuJztcbiAgICB2YXIgbWFwID0gT2Jq
ZWN0LmNyZWF0ZShudWxsKTtcbiAgICB2YXIgcHJldkNoaWxkcmVuID0gdGhpcy5wcmV2Q2hpbGRy
ZW4gPSB0aGlzLmNoaWxkcmVuO1xuICAgIHZhciByYXdDaGlsZHJlbiA9IHRoaXMuJHNsb3RzLmRl
ZmF1bHQgfHwgW107XG4gICAgdmFyIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbiA9IFtdO1xuICAg
IHZhciB0cmFuc2l0aW9uRGF0YSA9IGV4dHJhY3RUcmFuc2l0aW9uRGF0YSh0aGlzKTtcblxuICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgcmF3Q2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZh
ciBjID0gcmF3Q2hpbGRyZW5baV07XG4gICAgICBpZiAoYy50YWcpIHtcbiAgICAgICAgaWYgKGMu
a2V5ICE9IG51bGwgJiYgU3RyaW5nKGMua2V5KS5pbmRleE9mKCdfX3ZsaXN0JykgIT09IDApIHtc
biAgICAgICAgICBjaGlsZHJlbi5wdXNoKGMpO1xuICAgICAgICAgIG1hcFtjLmtleV0gPSBjXG4g
ICAgICAgICAgOyhjLmRhdGEgfHwgKGMuZGF0YSA9IHt9KSkudHJhbnNpdGlvbiA9IHRyYW5zaXRp
b25EYXRhO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJv
ZHVjdGlvbicpIHtcbiAgICAgICAgICB2YXIgb3B0cyA9IGMuY29tcG9uZW50T3B0aW9ucztcbiAg
ICAgICAgICB2YXIgbmFtZSA9IG9wdHMgPyAob3B0cy5DdG9yLm9wdGlvbnMubmFtZSB8fCBvcHRz
LnRhZyB8fCAnJykgOiBjLnRhZztcbiAgICAgICAgICB3YXJuKChcIjx0cmFuc2l0aW9uLWdyb3Vw
PiBjaGlsZHJlbiBtdXN0IGJlIGtleWVkOiA8XCIgKyBuYW1lICsgXCI+XCIpKTtcbiAgICAgICAg
fVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcmV2Q2hpbGRyZW4pIHtcbiAgICAgIHZhciBr
ZXB0ID0gW107XG4gICAgICB2YXIgcmVtb3ZlZCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSQxID0g
MDsgaSQxIDwgcHJldkNoaWxkcmVuLmxlbmd0aDsgaSQxKyspIHtcbiAgICAgICAgdmFyIGMkMSA9
IHByZXZDaGlsZHJlbltpJDFdO1xuICAgICAgICBjJDEuZGF0YS50cmFuc2l0aW9uID0gdHJhbnNp
dGlvbkRhdGE7XG4gICAgICAgIGMkMS5kYXRhLnBvcyA9IGMkMS5lbG0uZ2V0Qm91bmRpbmdDbGll
bnRSZWN0KCk7XG4gICAgICAgIGlmIChtYXBbYyQxLmtleV0pIHtcbiAgICAgICAgICBrZXB0LnB1
c2goYyQxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZW1vdmVkLnB1c2goYyQxKTtc
biAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5rZXB0ID0gaCh0YWcsIG51bGwsIGtlcHQp
O1xuICAgICAgdGhpcy5yZW1vdmVkID0gcmVtb3ZlZDtcbiAgICB9XG5cbiAgICByZXR1cm4gaCh0
YWcsIG51bGwsIGNoaWxkcmVuKVxuICB9LFxuXG4gIGJlZm9yZVVwZGF0ZTogZnVuY3Rpb24gYmVm
b3JlVXBkYXRlICgpIHtcbiAgICAvLyBmb3JjZSByZW1vdmluZyBwYXNzXG4gICAgdGhpcy5fX3Bh
dGNoX18oXG4gICAgICB0aGlzLl92bm9kZSxcbiAgICAgIHRoaXMua2VwdCxcbiAgICAgIGZhbHNl
LCAvLyBoeWRyYXRpbmdcbiAgICAgIHRydWUgLy8gcmVtb3ZlT25seSAoIWltcG9ydGFudCwgYXZv
aWRzIHVubmVjZXNzYXJ5IG1vdmVzKVxuICAgICk7XG4gICAgdGhpcy5fdm5vZGUgPSB0aGlzLmtl
cHQ7XG4gIH0sXG5cbiAgdXBkYXRlZDogZnVuY3Rpb24gdXBkYXRlZCAoKSB7XG4gICAgdmFyIGNo
aWxkcmVuID0gdGhpcy5wcmV2Q2hpbGRyZW47XG4gICAgdmFyIG1vdmVDbGFzcyA9IHRoaXMubW92
ZUNsYXNzIHx8ICgodGhpcy5uYW1lIHx8ICd2JykgKyAnLW1vdmUnKTtcbiAgICBpZiAoIWNoaWxk
cmVuLmxlbmd0aCB8fCAhdGhpcy5oYXNNb3ZlKGNoaWxkcmVuWzBdLmVsbSwgbW92ZUNsYXNzKSkg
e1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gd2UgZGl2aWRlIHRoZSB3b3JrIGludG8g
dGhyZWUgbG9vcHMgdG8gYXZvaWQgbWl4aW5nIERPTSByZWFkcyBhbmQgd3JpdGVzXG4gICAgLy8g
aW4gZWFjaCBpdGVyYXRpb24gLSB3aGljaCBoZWxwcyBwcmV2ZW50IGxheW91dCB0aHJhc2hpbmcu
XG4gICAgY2hpbGRyZW4uZm9yRWFjaChjYWxsUGVuZGluZ0Nicyk7XG4gICAgY2hpbGRyZW4uZm9y
RWFjaChyZWNvcmRQb3NpdGlvbik7XG4gICAgY2hpbGRyZW4uZm9yRWFjaChhcHBseVRyYW5zbGF0
aW9uKTtcblxuICAgIC8vIGZvcmNlIHJlZmxvdyB0byBwdXQgZXZlcnl0aGluZyBpbiBwb3NpdGlv
blxuICAgIHZhciBib2R5ID0gZG9jdW1lbnQuYm9keTtcbiAgICB2YXIgZiA9IGJvZHkub2Zmc2V0
SGVpZ2h0OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBjaGlsZHJlbi5mb3JFYWNoKGZ1
bmN0aW9uIChjKSB7XG4gICAgICBpZiAoYy5kYXRhLm1vdmVkKSB7XG4gICAgICAgIHZhciBlbCA9
IGMuZWxtO1xuICAgICAgICB2YXIgcyA9IGVsLnN0eWxlO1xuICAgICAgICBhZGRUcmFuc2l0aW9u
Q2xhc3MoZWwsIG1vdmVDbGFzcyk7XG4gICAgICAgIHMudHJhbnNmb3JtID0gcy5XZWJraXRUcmFu
c2Zvcm0gPSBzLnRyYW5zaXRpb25EdXJhdGlvbiA9ICcnO1xuICAgICAgICBlbC5hZGRFdmVudExp
c3RlbmVyKHRyYW5zaXRpb25FbmRFdmVudCwgZWwuX21vdmVDYiA9IGZ1bmN0aW9uIGNiIChlKSB7
XG4gICAgICAgICAgaWYgKCFlIHx8IC90cmFuc2Zvcm0kLy50ZXN0KGUucHJvcGVydHlOYW1lKSkg
e1xuICAgICAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcih0cmFuc2l0aW9uRW5kRXZlbnQs
IGNiKTtcbiAgICAgICAgICAgIGVsLl9tb3ZlQ2IgPSBudWxsO1xuICAgICAgICAgICAgcmVtb3Zl
VHJhbnNpdGlvbkNsYXNzKGVsLCBtb3ZlQ2xhc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7
XG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhc01vdmU6IGZ1
bmN0aW9uIGhhc01vdmUgKGVsLCBtb3ZlQ2xhc3MpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9y
ZSBpZiAqL1xuICAgICAgaWYgKCFoYXNUcmFuc2l0aW9uKSB7XG4gICAgICAgIHJldHVybiBmYWxz
ZVxuICAgICAgfVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAodGhp
cy5faGFzTW92ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzTW92ZVxuICAgICAgfVxuICAg
ICAgLy8gRGV0ZWN0IHdoZXRoZXIgYW4gZWxlbWVudCB3aXRoIHRoZSBtb3ZlIGNsYXNzIGFwcGxp
ZWQgaGFzXG4gICAgICAvLyBDU1MgdHJhbnNpdGlvbnMuIFNpbmNlIHRoZSBlbGVtZW50IG1heSBi
ZSBpbnNpZGUgYW4gZW50ZXJpbmdcbiAgICAgIC8vIHRyYW5zaXRpb24gYXQgdGhpcyB2ZXJ5IG1v
bWVudCwgd2UgbWFrZSBhIGNsb25lIG9mIGl0IGFuZCByZW1vdmVcbiAgICAgIC8vIGFsbCBvdGhl
ciB0cmFuc2l0aW9uIGNsYXNzZXMgYXBwbGllZCB0byBlbnN1cmUgb25seSB0aGUgbW92ZSBjbGFz
c1xuICAgICAgLy8gaXMgYXBwbGllZC5cbiAgICAgIHZhciBjbG9uZSA9IGVsLmNsb25lTm9kZSgp
O1xuICAgICAgaWYgKGVsLl90cmFuc2l0aW9uQ2xhc3Nlcykge1xuICAgICAgICBlbC5fdHJhbnNp
dGlvbkNsYXNzZXMuZm9yRWFjaChmdW5jdGlvbiAoY2xzKSB7IHJlbW92ZUNsYXNzKGNsb25lLCBj
bHMpOyB9KTtcbiAgICAgIH1cbiAgICAgIGFkZENsYXNzKGNsb25lLCBtb3ZlQ2xhc3MpO1xuICAg
ICAgY2xvbmUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIHRoaXMuJGVsLmFwcGVuZENo
aWxkKGNsb25lKTtcbiAgICAgIHZhciBpbmZvID0gZ2V0VHJhbnNpdGlvbkluZm8oY2xvbmUpO1xu
ICAgICAgdGhpcy4kZWwucmVtb3ZlQ2hpbGQoY2xvbmUpO1xuICAgICAgcmV0dXJuICh0aGlzLl9o
YXNNb3ZlID0gaW5mby5oYXNUcmFuc2Zvcm0pXG4gICAgfVxuICB9XG59O1xuXG5mdW5jdGlvbiBj
YWxsUGVuZGluZ0NicyAoYykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGMu
ZWxtLl9tb3ZlQ2IpIHtcbiAgICBjLmVsbS5fbW92ZUNiKCk7XG4gIH1cbiAgLyogaXN0YW5idWwg
aWdub3JlIGlmICovXG4gIGlmIChjLmVsbS5fZW50ZXJDYikge1xuICAgIGMuZWxtLl9lbnRlckNi
KCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVjb3JkUG9zaXRpb24gKGMpIHtcbiAgYy5kYXRhLm5l
d1BvcyA9IGMuZWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xufVxuXG5mdW5jdGlvbiBhcHBs
eVRyYW5zbGF0aW9uIChjKSB7XG4gIHZhciBvbGRQb3MgPSBjLmRhdGEucG9zO1xuICB2YXIgbmV3
UG9zID0gYy5kYXRhLm5ld1BvcztcbiAgdmFyIGR4ID0gb2xkUG9zLmxlZnQgLSBuZXdQb3MubGVm
dDtcbiAgdmFyIGR5ID0gb2xkUG9zLnRvcCAtIG5ld1Bvcy50b3A7XG4gIGlmIChkeCB8fCBkeSkg
e1xuICAgIGMuZGF0YS5tb3ZlZCA9IHRydWU7XG4gICAgdmFyIHMgPSBjLmVsbS5zdHlsZTtcbiAg
ICBzLnRyYW5zZm9ybSA9IHMuV2Via2l0VHJhbnNmb3JtID0gXCJ0cmFuc2xhdGUoXCIgKyBkeCAr
IFwicHgsXCIgKyBkeSArIFwicHgpXCI7XG4gICAgcy50cmFuc2l0aW9uRHVyYXRpb24gPSAnMHMn
O1xuICB9XG59XG5cbnZhciBwbGF0Zm9ybUNvbXBvbmVudHMgPSB7XG4gIFRyYW5zaXRpb246IFRy
YW5zaXRpb24sXG4gIFRyYW5zaXRpb25Hcm91cDogVHJhbnNpdGlvbkdyb3VwXG59O1xuXG4vKiAg
Ki9cblxuLy8gaW5zdGFsbCBwbGF0Zm9ybSBzcGVjaWZpYyB1dGlsc1xuVnVlJDMuY29uZmlnLm11
c3RVc2VQcm9wID0gbXVzdFVzZVByb3A7XG5WdWUkMy5jb25maWcuaXNSZXNlcnZlZFRhZyA9IGlz
UmVzZXJ2ZWRUYWc7XG5WdWUkMy5jb25maWcuaXNSZXNlcnZlZEF0dHIgPSBpc1Jlc2VydmVkQXR0
cjtcblZ1ZSQzLmNvbmZpZy5nZXRUYWdOYW1lc3BhY2UgPSBnZXRUYWdOYW1lc3BhY2U7XG5WdWUk
My5jb25maWcuaXNVbmtub3duRWxlbWVudCA9IGlzVW5rbm93bkVsZW1lbnQ7XG5cbi8vIGluc3Rh
bGwgcGxhdGZvcm0gcnVudGltZSBkaXJlY3RpdmVzICYgY29tcG9uZW50c1xuZXh0ZW5kKFZ1ZSQz
Lm9wdGlvbnMuZGlyZWN0aXZlcywgcGxhdGZvcm1EaXJlY3RpdmVzKTtcbmV4dGVuZChWdWUkMy5v
cHRpb25zLmNvbXBvbmVudHMsIHBsYXRmb3JtQ29tcG9uZW50cyk7XG5cbi8vIGluc3RhbGwgcGxh
dGZvcm0gcGF0Y2ggZnVuY3Rpb25cblZ1ZSQzLnByb3RvdHlwZS5fX3BhdGNoX18gPSBpbkJyb3dz
ZXIgPyBwYXRjaCA6IG5vb3A7XG5cbi8vIHB1YmxpYyBtb3VudCBtZXRob2RcblZ1ZSQzLnByb3Rv
dHlwZS4kbW91bnQgPSBmdW5jdGlvbiAoXG4gIGVsLFxuICBoeWRyYXRpbmdcbikge1xuICBlbCA9
IGVsICYmIGluQnJvd3NlciA/IHF1ZXJ5KGVsKSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIG1vdW50
Q29tcG9uZW50KHRoaXMsIGVsLCBoeWRyYXRpbmcpXG59O1xuXG4vLyBkZXZ0b29scyBnbG9iYWwg
aG9va1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnNldFRpbWVvdXQoZnVuY3Rpb24gKCkg
e1xuICBpZiAoY29uZmlnLmRldnRvb2xzKSB7XG4gICAgaWYgKGRldnRvb2xzKSB7XG4gICAgICBk
ZXZ0b29scy5lbWl0KCdpbml0JywgVnVlJDMpO1xuICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYu
Tk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpc0Nocm9tZSkge1xuICAgICAgY29uc29sZVtj
b25zb2xlLmluZm8gPyAnaW5mbycgOiAnbG9nJ10oXG4gICAgICAgICdEb3dubG9hZCB0aGUgVnVl
IERldnRvb2xzIGV4dGVuc2lvbiBmb3IgYSBiZXR0ZXIgZGV2ZWxvcG1lbnQgZXhwZXJpZW5jZTpc
XG4nICtcbiAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtZGV2dG9vbHMnXG4g
ICAgICApO1xuICAgIH1cbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9k
dWN0aW9uJyAmJlxuICAgIGNvbmZpZy5wcm9kdWN0aW9uVGlwICE9PSBmYWxzZSAmJlxuICAgIGlu
QnJvd3NlciAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCdcbiAgKSB7XG4gICAgY29u
c29sZVtjb25zb2xlLmluZm8gPyAnaW5mbycgOiAnbG9nJ10oXG4gICAgICBcIllvdSBhcmUgcnVu
bmluZyBWdWUgaW4gZGV2ZWxvcG1lbnQgbW9kZS5cXG5cIiArXG4gICAgICBcIk1ha2Ugc3VyZSB0
byB0dXJuIG9uIHByb2R1Y3Rpb24gbW9kZSB3aGVuIGRlcGxveWluZyBmb3IgcHJvZHVjdGlvbi5c
XG5cIiArXG4gICAgICBcIlNlZSBtb3JlIHRpcHMgYXQgaHR0cHM6Ly92dWVqcy5vcmcvZ3VpZGUv
ZGVwbG95bWVudC5odG1sXCJcbiAgICApO1xuICB9XG59LCAwKTtcblxuLyogICovXG5cbi8vIGNo
ZWNrIHdoZXRoZXIgY3VycmVudCBicm93c2VyIGVuY29kZXMgYSBjaGFyIGluc2lkZSBhdHRyaWJ1
dGUgdmFsdWVzXG5mdW5jdGlvbiBzaG91bGREZWNvZGUgKGNvbnRlbnQsIGVuY29kZWQpIHtcbiAg
dmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBkaXYuaW5uZXJIVE1M
ID0gXCI8ZGl2IGE9XFxcIlwiICsgY29udGVudCArIFwiXFxcIi8+XCI7XG4gIHJldHVybiBkaXYu
aW5uZXJIVE1MLmluZGV4T2YoZW5jb2RlZCkgPiAwXG59XG5cbi8vICMzNjYzXG4vLyBJRSBlbmNv
ZGVzIG5ld2xpbmVzIGluc2lkZSBhdHRyaWJ1dGUgdmFsdWVzIHdoaWxlIG90aGVyIGJyb3dzZXJz
IGRvbid0XG52YXIgc2hvdWxkRGVjb2RlTmV3bGluZXMgPSBpbkJyb3dzZXIgPyBzaG91bGREZWNv
ZGUoJ1xcbicsICcmIzEwOycpIDogZmFsc2U7XG5cbi8qICAqL1xuXG52YXIgZGVmYXVsdFRhZ1JF
ID0gL1xce1xceygoPzoufFxcbikrPylcXH1cXH0vZztcbnZhciByZWdleEVzY2FwZVJFID0gL1st
LiorP14ke30oKXxbXFxdXFwvXFxcXF0vZztcblxudmFyIGJ1aWxkUmVnZXggPSBjYWNoZWQoZnVu
Y3Rpb24gKGRlbGltaXRlcnMpIHtcbiAgdmFyIG9wZW4gPSBkZWxpbWl0ZXJzWzBdLnJlcGxhY2Uo
cmVnZXhFc2NhcGVSRSwgJ1xcXFwkJicpO1xuICB2YXIgY2xvc2UgPSBkZWxpbWl0ZXJzWzFdLnJl
cGxhY2UocmVnZXhFc2NhcGVSRSwgJ1xcXFwkJicpO1xuICByZXR1cm4gbmV3IFJlZ0V4cChvcGVu
ICsgJygoPzoufFxcXFxuKSs/KScgKyBjbG9zZSwgJ2cnKVxufSk7XG5cbmZ1bmN0aW9uIHBhcnNl
VGV4dCAoXG4gIHRleHQsXG4gIGRlbGltaXRlcnNcbikge1xuICB2YXIgdGFnUkUgPSBkZWxpbWl0
ZXJzID8gYnVpbGRSZWdleChkZWxpbWl0ZXJzKSA6IGRlZmF1bHRUYWdSRTtcbiAgaWYgKCF0YWdS
RS50ZXN0KHRleHQpKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIHRva2VucyA9IFtdO1xuICB2
YXIgbGFzdEluZGV4ID0gdGFnUkUubGFzdEluZGV4ID0gMDtcbiAgdmFyIG1hdGNoLCBpbmRleDtc
biAgd2hpbGUgKChtYXRjaCA9IHRhZ1JFLmV4ZWModGV4dCkpKSB7XG4gICAgaW5kZXggPSBtYXRj
aC5pbmRleDtcbiAgICAvLyBwdXNoIHRleHQgdG9rZW5cbiAgICBpZiAoaW5kZXggPiBsYXN0SW5k
ZXgpIHtcbiAgICAgIHRva2Vucy5wdXNoKEpTT04uc3RyaW5naWZ5KHRleHQuc2xpY2UobGFzdElu
ZGV4LCBpbmRleCkpKTtcbiAgICB9XG4gICAgLy8gdGFnIHRva2VuXG4gICAgdmFyIGV4cCA9IHBh
cnNlRmlsdGVycyhtYXRjaFsxXS50cmltKCkpO1xuICAgIHRva2Vucy5wdXNoKChcIl9zKFwiICsg
ZXhwICsgXCIpXCIpKTtcbiAgICBsYXN0SW5kZXggPSBpbmRleCArIG1hdGNoWzBdLmxlbmd0aDtc
biAgfVxuICBpZiAobGFzdEluZGV4IDwgdGV4dC5sZW5ndGgpIHtcbiAgICB0b2tlbnMucHVzaChK
U09OLnN0cmluZ2lmeSh0ZXh0LnNsaWNlKGxhc3RJbmRleCkpKTtcbiAgfVxuICByZXR1cm4gdG9r
ZW5zLmpvaW4oJysnKVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gdHJhbnNmb3JtTm9kZSAoZWws
IG9wdGlvbnMpIHtcbiAgdmFyIHdhcm4gPSBvcHRpb25zLndhcm4gfHwgYmFzZVdhcm47XG4gIHZh
ciBzdGF0aWNDbGFzcyA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICdjbGFzcycpO1xuICBpZiAocHJv
Y2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzdGF0aWNDbGFzcykge1xuICAg
IHZhciBleHByZXNzaW9uID0gcGFyc2VUZXh0KHN0YXRpY0NsYXNzLCBvcHRpb25zLmRlbGltaXRl
cnMpO1xuICAgIGlmIChleHByZXNzaW9uKSB7XG4gICAgICB3YXJuKFxuICAgICAgICBcImNsYXNz
PVxcXCJcIiArIHN0YXRpY0NsYXNzICsgXCJcXFwiOiBcIiArXG4gICAgICAgICdJbnRlcnBvbGF0
aW9uIGluc2lkZSBhdHRyaWJ1dGVzIGhhcyBiZWVuIHJlbW92ZWQuICcgK1xuICAgICAgICAnVXNl
IHYtYmluZCBvciB0aGUgY29sb24gc2hvcnRoYW5kIGluc3RlYWQuIEZvciBleGFtcGxlLCAnICtc
biAgICAgICAgJ2luc3RlYWQgb2YgPGRpdiBjbGFzcz1cInt7IHZhbCB9fVwiPiwgdXNlIDxkaXYg
OmNsYXNzPVwidmFsXCI+LidcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGlmIChzdGF0aWNDbGFz
cykge1xuICAgIGVsLnN0YXRpY0NsYXNzID0gSlNPTi5zdHJpbmdpZnkoc3RhdGljQ2xhc3MpO1xu
ICB9XG4gIHZhciBjbGFzc0JpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ2NsYXNzJywgZmFs
c2UgLyogZ2V0U3RhdGljICovKTtcbiAgaWYgKGNsYXNzQmluZGluZykge1xuICAgIGVsLmNsYXNz
QmluZGluZyA9IGNsYXNzQmluZGluZztcbiAgfVxufVxuXG5mdW5jdGlvbiBnZW5EYXRhIChlbCkg
e1xuICB2YXIgZGF0YSA9ICcnO1xuICBpZiAoZWwuc3RhdGljQ2xhc3MpIHtcbiAgICBkYXRhICs9
IFwic3RhdGljQ2xhc3M6XCIgKyAoZWwuc3RhdGljQ2xhc3MpICsgXCIsXCI7XG4gIH1cbiAgaWYg
KGVsLmNsYXNzQmluZGluZykge1xuICAgIGRhdGEgKz0gXCJjbGFzczpcIiArIChlbC5jbGFzc0Jp
bmRpbmcpICsgXCIsXCI7XG4gIH1cbiAgcmV0dXJuIGRhdGFcbn1cblxudmFyIGtsYXNzJDEgPSB7
XG4gIHN0YXRpY0tleXM6IFsnc3RhdGljQ2xhc3MnXSxcbiAgdHJhbnNmb3JtTm9kZTogdHJhbnNm
b3JtTm9kZSxcbiAgZ2VuRGF0YTogZ2VuRGF0YVxufTtcblxuLyogICovXG5cbmZ1bmN0aW9uIHRy
YW5zZm9ybU5vZGUkMSAoZWwsIG9wdGlvbnMpIHtcbiAgdmFyIHdhcm4gPSBvcHRpb25zLndhcm4g
fHwgYmFzZVdhcm47XG4gIHZhciBzdGF0aWNTdHlsZSA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICdz
dHlsZScpO1xuICBpZiAoc3RhdGljU3R5bGUpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYg
Ki9cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAg
ICAgdmFyIGV4cHJlc3Npb24gPSBwYXJzZVRleHQoc3RhdGljU3R5bGUsIG9wdGlvbnMuZGVsaW1p
dGVycyk7XG4gICAgICBpZiAoZXhwcmVzc2lvbikge1xuICAgICAgICB3YXJuKFxuICAgICAgICAg
IFwic3R5bGU9XFxcIlwiICsgc3RhdGljU3R5bGUgKyBcIlxcXCI6IFwiICtcbiAgICAgICAgICAn
SW50ZXJwb2xhdGlvbiBpbnNpZGUgYXR0cmlidXRlcyBoYXMgYmVlbiByZW1vdmVkLiAnICtcbiAg
ICAgICAgICAnVXNlIHYtYmluZCBvciB0aGUgY29sb24gc2hvcnRoYW5kIGluc3RlYWQuIEZvciBl
eGFtcGxlLCAnICtcbiAgICAgICAgICAnaW5zdGVhZCBvZiA8ZGl2IHN0eWxlPVwie3sgdmFsIH19
XCI+LCB1c2UgPGRpdiA6c3R5bGU9XCJ2YWxcIj4uJ1xuICAgICAgICApO1xuICAgICAgfVxuICAg
IH1cbiAgICBlbC5zdGF0aWNTdHlsZSA9IEpTT04uc3RyaW5naWZ5KHBhcnNlU3R5bGVUZXh0KHN0
YXRpY1N0eWxlKSk7XG4gIH1cblxuICB2YXIgc3R5bGVCaW5kaW5nID0gZ2V0QmluZGluZ0F0dHIo
ZWwsICdzdHlsZScsIGZhbHNlIC8qIGdldFN0YXRpYyAqLyk7XG4gIGlmIChzdHlsZUJpbmRpbmcp
IHtcbiAgICBlbC5zdHlsZUJpbmRpbmcgPSBzdHlsZUJpbmRpbmc7XG4gIH1cbn1cblxuZnVuY3Rp
b24gZ2VuRGF0YSQxIChlbCkge1xuICB2YXIgZGF0YSA9ICcnO1xuICBpZiAoZWwuc3RhdGljU3R5
bGUpIHtcbiAgICBkYXRhICs9IFwic3RhdGljU3R5bGU6XCIgKyAoZWwuc3RhdGljU3R5bGUpICsg
XCIsXCI7XG4gIH1cbiAgaWYgKGVsLnN0eWxlQmluZGluZykge1xuICAgIGRhdGEgKz0gXCJzdHls
ZTooXCIgKyAoZWwuc3R5bGVCaW5kaW5nKSArIFwiKSxcIjtcbiAgfVxuICByZXR1cm4gZGF0YVxu
fVxuXG52YXIgc3R5bGUkMSA9IHtcbiAgc3RhdGljS2V5czogWydzdGF0aWNTdHlsZSddLFxuICB0
cmFuc2Zvcm1Ob2RlOiB0cmFuc2Zvcm1Ob2RlJDEsXG4gIGdlbkRhdGE6IGdlbkRhdGEkMVxufTtc
blxudmFyIG1vZHVsZXMkMSA9IFtcbiAga2xhc3MkMSxcbiAgc3R5bGUkMVxuXTtcblxuLyogICov
XG5cbmZ1bmN0aW9uIHRleHQgKGVsLCBkaXIpIHtcbiAgaWYgKGRpci52YWx1ZSkge1xuICAgIGFk
ZFByb3AoZWwsICd0ZXh0Q29udGVudCcsIChcIl9zKFwiICsgKGRpci52YWx1ZSkgKyBcIilcIikp
O1xuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBodG1sIChlbCwgZGlyKSB7XG4gIGlmIChk
aXIudmFsdWUpIHtcbiAgICBhZGRQcm9wKGVsLCAnaW5uZXJIVE1MJywgKFwiX3MoXCIgKyAoZGly
LnZhbHVlKSArIFwiKVwiKSk7XG4gIH1cbn1cblxudmFyIGRpcmVjdGl2ZXMkMSA9IHtcbiAgbW9k
ZWw6IG1vZGVsLFxuICB0ZXh0OiB0ZXh0LFxuICBodG1sOiBodG1sXG59O1xuXG4vKiAgKi9cblxu
dmFyIGlzVW5hcnlUYWcgPSBtYWtlTWFwKFxuICAnYXJlYSxiYXNlLGJyLGNvbCxlbWJlZCxmcmFt
ZSxocixpbWcsaW5wdXQsaXNpbmRleCxrZXlnZW4sJyArXG4gICdsaW5rLG1ldGEscGFyYW0sc291
cmNlLHRyYWNrLHdicidcbik7XG5cbi8vIEVsZW1lbnRzIHRoYXQgeW91IGNhbiwgaW50ZW50aW9u
YWxseSwgbGVhdmUgb3BlblxuLy8gKGFuZCB3aGljaCBjbG9zZSB0aGVtc2VsdmVzKVxudmFyIGNh
bkJlTGVmdE9wZW5UYWcgPSBtYWtlTWFwKFxuICAnY29sZ3JvdXAsZGQsZHQsbGksb3B0aW9ucyxw
LHRkLHRmb290LHRoLHRoZWFkLHRyLHNvdXJjZSdcbik7XG5cbi8vIEhUTUw1IHRhZ3MgaHR0cHM6
Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvaW5kaWNlcy5odG1sI2VsZW1lbnRzLTNc
bi8vIFBocmFzaW5nIENvbnRlbnQgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBh
Z2UvZG9tLmh0bWwjcGhyYXNpbmctY29udGVudFxudmFyIGlzTm9uUGhyYXNpbmdUYWcgPSBtYWtl
TWFwKFxuICAnYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGJhc2UsYmxvY2txdW90ZSxib2R5LGNhcHRp
b24sY29sLGNvbGdyb3VwLGRkLCcgK1xuICAnZGV0YWlscyxkaWFsb2csZGl2LGRsLGR0LGZpZWxk
c2V0LGZpZ2NhcHRpb24sZmlndXJlLGZvb3Rlcixmb3JtLCcgK1xuICAnaDEsaDIsaDMsaDQsaDUs
aDYsaGVhZCxoZWFkZXIsaGdyb3VwLGhyLGh0bWwsbGVnZW5kLGxpLG1lbnVpdGVtLG1ldGEsJyAr
XG4gICdvcHRncm91cCxvcHRpb24scGFyYW0scnAscnQsc291cmNlLHN0eWxlLHN1bW1hcnksdGJv
ZHksdGQsdGZvb3QsdGgsdGhlYWQsJyArXG4gICd0aXRsZSx0cix0cmFjaydcbik7XG5cbi8qICAq
L1xuXG52YXIgYmFzZU9wdGlvbnMgPSB7XG4gIGV4cGVjdEhUTUw6IHRydWUsXG4gIG1vZHVsZXM6
IG1vZHVsZXMkMSxcbiAgZGlyZWN0aXZlczogZGlyZWN0aXZlcyQxLFxuICBpc1ByZVRhZzogaXNQ
cmVUYWcsXG4gIGlzVW5hcnlUYWc6IGlzVW5hcnlUYWcsXG4gIG11c3RVc2VQcm9wOiBtdXN0VXNl
UHJvcCxcbiAgY2FuQmVMZWZ0T3BlblRhZzogY2FuQmVMZWZ0T3BlblRhZyxcbiAgaXNSZXNlcnZl
ZFRhZzogaXNSZXNlcnZlZFRhZyxcbiAgZ2V0VGFnTmFtZXNwYWNlOiBnZXRUYWdOYW1lc3BhY2Us
XG4gIHN0YXRpY0tleXM6IGdlblN0YXRpY0tleXMobW9kdWxlcyQxKVxufTtcblxuLyogICovXG5c
bnZhciBkZWNvZGVyO1xuXG52YXIgaGUgPSB7XG4gIGRlY29kZTogZnVuY3Rpb24gZGVjb2RlICho
dG1sKSB7XG4gICAgZGVjb2RlciA9IGRlY29kZXIgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
ZGl2Jyk7XG4gICAgZGVjb2Rlci5pbm5lckhUTUwgPSBodG1sO1xuICAgIHJldHVybiBkZWNvZGVy
LnRleHRDb250ZW50XG4gIH1cbn07XG5cbi8qKlxuICogTm90IHR5cGUtY2hlY2tpbmcgdGhpcyBm
aWxlIGJlY2F1c2UgaXQncyBtb3N0bHkgdmVuZG9yIGNvZGUuXG4gKi9cblxuLyohXG4gKiBIVE1M
IFBhcnNlciBCeSBKb2huIFJlc2lnIChlam9obi5vcmcpXG4gKiBNb2RpZmllZCBieSBKdXJpeSBc
ImthbmdheFwiIFpheXRzZXZcbiAqIE9yaWdpbmFsIGNvZGUgYnkgRXJpayBBcnZpZHNzb24sIE1v
emlsbGEgUHVibGljIExpY2Vuc2VcbiAqIGh0dHA6Ly9lcmlrLmVhZS5uZXQvc2ltcGxlaHRtbHBh
cnNlci9zaW1wbGVodG1scGFyc2VyLmpzXG4gKi9cblxuLy8gUmVndWxhciBFeHByZXNzaW9ucyBm
b3IgcGFyc2luZyB0YWdzIGFuZCBhdHRyaWJ1dGVzXG52YXIgc2luZ2xlQXR0cklkZW50aWZpZXIg
PSAvKFteXFxzXCInPD4vPV0rKS87XG52YXIgc2luZ2xlQXR0ckFzc2lnbiA9IC8oPzo9KS87XG52
YXIgc2luZ2xlQXR0clZhbHVlcyA9IFtcbiAgLy8gYXR0ciB2YWx1ZSBkb3VibGUgcXVvdGVzXG4g
IC9cIihbXlwiXSopXCIrLy5zb3VyY2UsXG4gIC8vIGF0dHIgdmFsdWUsIHNpbmdsZSBxdW90ZXNc
biAgLycoW14nXSopJysvLnNvdXJjZSxcbiAgLy8gYXR0ciB2YWx1ZSwgbm8gcXVvdGVzXG4gIC8o
W15cXHNcIic9PD5gXSspLy5zb3VyY2Vcbl07XG52YXIgYXR0cmlidXRlID0gbmV3IFJlZ0V4cChc
biAgJ15cXFxccyonICsgc2luZ2xlQXR0cklkZW50aWZpZXIuc291cmNlICtcbiAgJyg/OlxcXFxz
KignICsgc2luZ2xlQXR0ckFzc2lnbi5zb3VyY2UgKyAnKScgK1xuICAnXFxcXHMqKD86JyArIHNp
bmdsZUF0dHJWYWx1ZXMuam9pbignfCcpICsgJykpPydcbik7XG5cbi8vIGNvdWxkIHVzZSBodHRw
czovL3d3dy53My5vcmcvVFIvMTk5OS9SRUMteG1sLW5hbWVzLTE5OTkwMTE0LyNOVC1RTmFtZVxu
Ly8gYnV0IGZvciBWdWUgdGVtcGxhdGVzIHdlIGNhbiBlbmZvcmNlIGEgc2ltcGxlIGNoYXJzZXRc
bnZhciBuY25hbWUgPSAnW2EtekEtWl9dW1xcXFx3XFxcXC1cXFxcLl0qJztcbnZhciBxbmFtZUNh
cHR1cmUgPSAnKCg/OicgKyBuY25hbWUgKyAnXFxcXDopPycgKyBuY25hbWUgKyAnKSc7XG52YXIg
c3RhcnRUYWdPcGVuID0gbmV3IFJlZ0V4cCgnXjwnICsgcW5hbWVDYXB0dXJlKTtcbnZhciBzdGFy
dFRhZ0Nsb3NlID0gL15cXHMqKFxcLz8pPi87XG52YXIgZW5kVGFnID0gbmV3IFJlZ0V4cCgnXjxc
XFxcLycgKyBxbmFtZUNhcHR1cmUgKyAnW14+XSo+Jyk7XG52YXIgZG9jdHlwZSA9IC9ePCFET0NU
WVBFIFtePl0rPi9pO1xudmFyIGNvbW1lbnQgPSAvXjwhLS0vO1xudmFyIGNvbmRpdGlvbmFsQ29t
bWVudCA9IC9ePCFcXFsvO1xuXG52YXIgSVNfUkVHRVhfQ0FQVFVSSU5HX0JST0tFTiA9IGZhbHNl
O1xuJ3gnLnJlcGxhY2UoL3goLik/L2csIGZ1bmN0aW9uIChtLCBnKSB7XG4gIElTX1JFR0VYX0NB
UFRVUklOR19CUk9LRU4gPSBnID09PSAnJztcbn0pO1xuXG4vLyBTcGVjaWFsIEVsZW1lbnRzIChj
YW4gY29udGFpbiBhbnl0aGluZylcbnZhciBpc1BsYWluVGV4dEVsZW1lbnQgPSBtYWtlTWFwKCdz
Y3JpcHQsc3R5bGUsdGV4dGFyZWEnLCB0cnVlKTtcbnZhciByZUNhY2hlID0ge307XG5cbnZhciBk
ZWNvZGluZ01hcCA9IHtcbiAgJyZsdDsnOiAnPCcsXG4gICcmZ3Q7JzogJz4nLFxuICAnJnF1b3Q7
JzogJ1wiJyxcbiAgJyZhbXA7JzogJyYnLFxuICAnJiMxMDsnOiAnXFxuJ1xufTtcbnZhciBlbmNv
ZGVkQXR0ciA9IC8mKD86bHR8Z3R8cXVvdHxhbXApOy9nO1xudmFyIGVuY29kZWRBdHRyV2l0aE5l
d0xpbmVzID0gLyYoPzpsdHxndHxxdW90fGFtcHwjMTApOy9nO1xuXG4vLyAjNTk5MlxudmFyIGlz
SWdub3JlTmV3bGluZVRhZyA9IG1ha2VNYXAoJ3ByZSx0ZXh0YXJlYScsIHRydWUpO1xudmFyIHNo
b3VsZElnbm9yZUZpcnN0TmV3bGluZSA9IGZ1bmN0aW9uICh0YWcsIGh0bWwpIHsgcmV0dXJuIHRh
ZyAmJiBpc0lnbm9yZU5ld2xpbmVUYWcodGFnKSAmJiBodG1sWzBdID09PSAnXFxuJzsgfTtcblxu
ZnVuY3Rpb24gZGVjb2RlQXR0ciAodmFsdWUsIHNob3VsZERlY29kZU5ld2xpbmVzKSB7XG4gIHZh
ciByZSA9IHNob3VsZERlY29kZU5ld2xpbmVzID8gZW5jb2RlZEF0dHJXaXRoTmV3TGluZXMgOiBl
bmNvZGVkQXR0cjtcbiAgcmV0dXJuIHZhbHVlLnJlcGxhY2UocmUsIGZ1bmN0aW9uIChtYXRjaCkg
eyByZXR1cm4gZGVjb2RpbmdNYXBbbWF0Y2hdOyB9KVxufVxuXG5mdW5jdGlvbiBwYXJzZUhUTUwg
KGh0bWwsIG9wdGlvbnMpIHtcbiAgdmFyIHN0YWNrID0gW107XG4gIHZhciBleHBlY3RIVE1MID0g
b3B0aW9ucy5leHBlY3RIVE1MO1xuICB2YXIgaXNVbmFyeVRhZyQkMSA9IG9wdGlvbnMuaXNVbmFy
eVRhZyB8fCBubztcbiAgdmFyIGNhbkJlTGVmdE9wZW5UYWckJDEgPSBvcHRpb25zLmNhbkJlTGVm
dE9wZW5UYWcgfHwgbm87XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsYXN0LCBsYXN0VGFnO1xu
ICB3aGlsZSAoaHRtbCkge1xuICAgIGxhc3QgPSBodG1sO1xuICAgIC8vIE1ha2Ugc3VyZSB3ZSdy
ZSBub3QgaW4gYSBwbGFpbnRleHQgY29udGVudCBlbGVtZW50IGxpa2Ugc2NyaXB0L3N0eWxlXG4g
ICAgaWYgKCFsYXN0VGFnIHx8ICFpc1BsYWluVGV4dEVsZW1lbnQobGFzdFRhZykpIHtcbiAgICAg
IHZhciB0ZXh0RW5kID0gaHRtbC5pbmRleE9mKCc8Jyk7XG4gICAgICBpZiAodGV4dEVuZCA9PT0g
MCkge1xuICAgICAgICAvLyBDb21tZW50OlxuICAgICAgICBpZiAoY29tbWVudC50ZXN0KGh0bWwp
KSB7XG4gICAgICAgICAgdmFyIGNvbW1lbnRFbmQgPSBodG1sLmluZGV4T2YoJy0tPicpO1xuXG4g
ICAgICAgICAgaWYgKGNvbW1lbnRFbmQgPj0gMCkge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMu
c2hvdWxkS2VlcENvbW1lbnQpIHtcbiAgICAgICAgICAgICAgb3B0aW9ucy5jb21tZW50KGh0bWwu
c3Vic3RyaW5nKDQsIGNvbW1lbnRFbmQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFk
dmFuY2UoY29tbWVudEVuZCArIDMpO1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9
XG4gICAgICAgIH1cblxuICAgICAgICAvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Nv
bmRpdGlvbmFsX2NvbW1lbnQjRG93bmxldmVsLXJldmVhbGVkX2NvbmRpdGlvbmFsX2NvbW1lbnRc
biAgICAgICAgaWYgKGNvbmRpdGlvbmFsQ29tbWVudC50ZXN0KGh0bWwpKSB7XG4gICAgICAgICAg
dmFyIGNvbmRpdGlvbmFsRW5kID0gaHRtbC5pbmRleE9mKCddPicpO1xuXG4gICAgICAgICAgaWYg
KGNvbmRpdGlvbmFsRW5kID49IDApIHtcbiAgICAgICAgICAgIGFkdmFuY2UoY29uZGl0aW9uYWxF
bmQgKyAyKTtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG5c
biAgICAgICAgLy8gRG9jdHlwZTpcbiAgICAgICAgdmFyIGRvY3R5cGVNYXRjaCA9IGh0bWwubWF0
Y2goZG9jdHlwZSk7XG4gICAgICAgIGlmIChkb2N0eXBlTWF0Y2gpIHtcbiAgICAgICAgICBhZHZh
bmNlKGRvY3R5cGVNYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAg
IH1cblxuICAgICAgICAvLyBFbmQgdGFnOlxuICAgICAgICB2YXIgZW5kVGFnTWF0Y2ggPSBodG1s
Lm1hdGNoKGVuZFRhZyk7XG4gICAgICAgIGlmIChlbmRUYWdNYXRjaCkge1xuICAgICAgICAgIHZh
ciBjdXJJbmRleCA9IGluZGV4O1xuICAgICAgICAgIGFkdmFuY2UoZW5kVGFnTWF0Y2hbMF0ubGVu
Z3RoKTtcbiAgICAgICAgICBwYXJzZUVuZFRhZyhlbmRUYWdNYXRjaFsxXSwgY3VySW5kZXgsIGlu
ZGV4KTtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RhcnQg
dGFnOlxuICAgICAgICB2YXIgc3RhcnRUYWdNYXRjaCA9IHBhcnNlU3RhcnRUYWcoKTtcbiAgICAg
ICAgaWYgKHN0YXJ0VGFnTWF0Y2gpIHtcbiAgICAgICAgICBoYW5kbGVTdGFydFRhZyhzdGFydFRh
Z01hdGNoKTtcbiAgICAgICAgICBpZiAoc2hvdWxkSWdub3JlRmlyc3ROZXdsaW5lKGxhc3RUYWcs
IGh0bWwpKSB7XG4gICAgICAgICAgICBhZHZhbmNlKDEpO1xuICAgICAgICAgIH1cbiAgICAgICAg
ICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciB0ZXh0ID0gKHZvaWQg
MCksIHJlc3QgPSAodm9pZCAwKSwgbmV4dCA9ICh2b2lkIDApO1xuICAgICAgaWYgKHRleHRFbmQg
Pj0gMCkge1xuICAgICAgICByZXN0ID0gaHRtbC5zbGljZSh0ZXh0RW5kKTtcbiAgICAgICAgd2hp
bGUgKFxuICAgICAgICAgICFlbmRUYWcudGVzdChyZXN0KSAmJlxuICAgICAgICAgICFzdGFydFRh
Z09wZW4udGVzdChyZXN0KSAmJlxuICAgICAgICAgICFjb21tZW50LnRlc3QocmVzdCkgJiZcbiAg
ICAgICAgICAhY29uZGl0aW9uYWxDb21tZW50LnRlc3QocmVzdClcbiAgICAgICAgKSB7XG4gICAg
ICAgICAgLy8gPCBpbiBwbGFpbiB0ZXh0LCBiZSBmb3JnaXZpbmcgYW5kIHRyZWF0IGl0IGFzIHRl
eHRcbiAgICAgICAgICBuZXh0ID0gcmVzdC5pbmRleE9mKCc8JywgMSk7XG4gICAgICAgICAgaWYg
KG5leHQgPCAwKSB7IGJyZWFrIH1cbiAgICAgICAgICB0ZXh0RW5kICs9IG5leHQ7XG4gICAgICAg
ICAgcmVzdCA9IGh0bWwuc2xpY2UodGV4dEVuZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGV4dCA9
IGh0bWwuc3Vic3RyaW5nKDAsIHRleHRFbmQpO1xuICAgICAgICBhZHZhbmNlKHRleHRFbmQpO1xu
ICAgICAgfVxuXG4gICAgICBpZiAodGV4dEVuZCA8IDApIHtcbiAgICAgICAgdGV4dCA9IGh0bWw7
XG4gICAgICAgIGh0bWwgPSAnJztcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY2hhcnMg
JiYgdGV4dCkge1xuICAgICAgICBvcHRpb25zLmNoYXJzKHRleHQpO1xuICAgICAgfVxuICAgIH0g
ZWxzZSB7XG4gICAgICB2YXIgZW5kVGFnTGVuZ3RoID0gMDtcbiAgICAgIHZhciBzdGFja2VkVGFn
ID0gbGFzdFRhZy50b0xvd2VyQ2FzZSgpO1xuICAgICAgdmFyIHJlU3RhY2tlZFRhZyA9IHJlQ2Fj
aGVbc3RhY2tlZFRhZ10gfHwgKHJlQ2FjaGVbc3RhY2tlZFRhZ10gPSBuZXcgUmVnRXhwKCcoW1xc
XFxzXFxcXFNdKj8pKDwvJyArIHN0YWNrZWRUYWcgKyAnW14+XSo+KScsICdpJykpO1xuICAgICAg
dmFyIHJlc3QkMSA9IGh0bWwucmVwbGFjZShyZVN0YWNrZWRUYWcsIGZ1bmN0aW9uIChhbGwsIHRl
eHQsIGVuZFRhZykge1xuICAgICAgICBlbmRUYWdMZW5ndGggPSBlbmRUYWcubGVuZ3RoO1xuICAg
ICAgICBpZiAoIWlzUGxhaW5UZXh0RWxlbWVudChzdGFja2VkVGFnKSAmJiBzdGFja2VkVGFnICE9
PSAnbm9zY3JpcHQnKSB7XG4gICAgICAgICAgdGV4dCA9IHRleHRcbiAgICAgICAgICAgIC5yZXBs
YWNlKC88IS0tKFtcXHNcXFNdKj8pLS0+L2csICckMScpXG4gICAgICAgICAgICAucmVwbGFjZSgv
PCFcXFtDREFUQVxcWyhbXFxzXFxTXSo/KV1dPi9nLCAnJDEnKTtcbiAgICAgICAgfVxuICAgICAg
ICBpZiAoc2hvdWxkSWdub3JlRmlyc3ROZXdsaW5lKHN0YWNrZWRUYWcsIHRleHQpKSB7XG4gICAg
ICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlv
bnMuY2hhcnMpIHtcbiAgICAgICAgICBvcHRpb25zLmNoYXJzKHRleHQpO1xuICAgICAgICB9XG4g
ICAgICAgIHJldHVybiAnJ1xuICAgICAgfSk7XG4gICAgICBpbmRleCArPSBodG1sLmxlbmd0aCAt
IHJlc3QkMS5sZW5ndGg7XG4gICAgICBodG1sID0gcmVzdCQxO1xuICAgICAgcGFyc2VFbmRUYWco
c3RhY2tlZFRhZywgaW5kZXggLSBlbmRUYWdMZW5ndGgsIGluZGV4KTtcbiAgICB9XG5cbiAgICBp
ZiAoaHRtbCA9PT0gbGFzdCkge1xuICAgICAgb3B0aW9ucy5jaGFycyAmJiBvcHRpb25zLmNoYXJz
KGh0bWwpO1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicg
JiYgIXN0YWNrLmxlbmd0aCAmJiBvcHRpb25zLndhcm4pIHtcbiAgICAgICAgb3B0aW9ucy53YXJu
KChcIk1hbC1mb3JtYXR0ZWQgdGFnIGF0IGVuZCBvZiB0ZW1wbGF0ZTogXFxcIlwiICsgaHRtbCAr
IFwiXFxcIlwiKSk7XG4gICAgICB9XG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIC8vIENs
ZWFuIHVwIGFueSByZW1haW5pbmcgdGFnc1xuICBwYXJzZUVuZFRhZygpO1xuXG4gIGZ1bmN0aW9u
IGFkdmFuY2UgKG4pIHtcbiAgICBpbmRleCArPSBuO1xuICAgIGh0bWwgPSBodG1sLnN1YnN0cmlu
ZyhuKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlU3RhcnRUYWcgKCkge1xuICAgIHZhciBzdGFy
dCA9IGh0bWwubWF0Y2goc3RhcnRUYWdPcGVuKTtcbiAgICBpZiAoc3RhcnQpIHtcbiAgICAgIHZh
ciBtYXRjaCA9IHtcbiAgICAgICAgdGFnTmFtZTogc3RhcnRbMV0sXG4gICAgICAgIGF0dHJzOiBb
XSxcbiAgICAgICAgc3RhcnQ6IGluZGV4XG4gICAgICB9O1xuICAgICAgYWR2YW5jZShzdGFydFsw
XS5sZW5ndGgpO1xuICAgICAgdmFyIGVuZCwgYXR0cjtcbiAgICAgIHdoaWxlICghKGVuZCA9IGh0
bWwubWF0Y2goc3RhcnRUYWdDbG9zZSkpICYmIChhdHRyID0gaHRtbC5tYXRjaChhdHRyaWJ1dGUp
KSkge1xuICAgICAgICBhZHZhbmNlKGF0dHJbMF0ubGVuZ3RoKTtcbiAgICAgICAgbWF0Y2guYXR0
cnMucHVzaChhdHRyKTtcbiAgICAgIH1cbiAgICAgIGlmIChlbmQpIHtcbiAgICAgICAgbWF0Y2gu
dW5hcnlTbGFzaCA9IGVuZFsxXTtcbiAgICAgICAgYWR2YW5jZShlbmRbMF0ubGVuZ3RoKTtcbiAg
ICAgICAgbWF0Y2guZW5kID0gaW5kZXg7XG4gICAgICAgIHJldHVybiBtYXRjaFxuICAgICAgfVxu
ICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVN0YXJ0VGFnIChtYXRjaCkge1xuICAgIHZh
ciB0YWdOYW1lID0gbWF0Y2gudGFnTmFtZTtcbiAgICB2YXIgdW5hcnlTbGFzaCA9IG1hdGNoLnVu
YXJ5U2xhc2g7XG5cbiAgICBpZiAoZXhwZWN0SFRNTCkge1xuICAgICAgaWYgKGxhc3RUYWcgPT09
ICdwJyAmJiBpc05vblBocmFzaW5nVGFnKHRhZ05hbWUpKSB7XG4gICAgICAgIHBhcnNlRW5kVGFn
KGxhc3RUYWcpO1xuICAgICAgfVxuICAgICAgaWYgKGNhbkJlTGVmdE9wZW5UYWckJDEodGFnTmFt
ZSkgJiYgbGFzdFRhZyA9PT0gdGFnTmFtZSkge1xuICAgICAgICBwYXJzZUVuZFRhZyh0YWdOYW1l
KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgdW5hcnkgPSBpc1VuYXJ5VGFnJCQxKHRhZ05h
bWUpIHx8ICEhdW5hcnlTbGFzaDtcblxuICAgIHZhciBsID0gbWF0Y2guYXR0cnMubGVuZ3RoO1xu
ICAgIHZhciBhdHRycyA9IG5ldyBBcnJheShsKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7
IGkrKykge1xuICAgICAgdmFyIGFyZ3MgPSBtYXRjaC5hdHRyc1tpXTtcbiAgICAgIC8vIGhhY2tp
c2ggd29yayBhcm91bmQgRkYgYnVnIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19i
dWcuY2dpP2lkPTM2OTc3OFxuICAgICAgaWYgKElTX1JFR0VYX0NBUFRVUklOR19CUk9LRU4gJiYg
YXJnc1swXS5pbmRleE9mKCdcIlwiJykgPT09IC0xKSB7XG4gICAgICAgIGlmIChhcmdzWzNdID09
PSAnJykgeyBkZWxldGUgYXJnc1szXTsgfVxuICAgICAgICBpZiAoYXJnc1s0XSA9PT0gJycpIHsg
ZGVsZXRlIGFyZ3NbNF07IH1cbiAgICAgICAgaWYgKGFyZ3NbNV0gPT09ICcnKSB7IGRlbGV0ZSBh
cmdzWzVdOyB9XG4gICAgICB9XG4gICAgICB2YXIgdmFsdWUgPSBhcmdzWzNdIHx8IGFyZ3NbNF0g
fHwgYXJnc1s1XSB8fCAnJztcbiAgICAgIGF0dHJzW2ldID0ge1xuICAgICAgICBuYW1lOiBhcmdz
WzFdLFxuICAgICAgICB2YWx1ZTogZGVjb2RlQXR0cihcbiAgICAgICAgICB2YWx1ZSxcbiAgICAg
ICAgICBvcHRpb25zLnNob3VsZERlY29kZU5ld2xpbmVzXG4gICAgICAgIClcbiAgICAgIH07XG4g
ICAgfVxuXG4gICAgaWYgKCF1bmFyeSkge1xuICAgICAgc3RhY2sucHVzaCh7IHRhZzogdGFnTmFt
ZSwgbG93ZXJDYXNlZFRhZzogdGFnTmFtZS50b0xvd2VyQ2FzZSgpLCBhdHRyczogYXR0cnMgfSk7
XG4gICAgICBsYXN0VGFnID0gdGFnTmFtZTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zdGFy
dCkge1xuICAgICAgb3B0aW9ucy5zdGFydCh0YWdOYW1lLCBhdHRycywgdW5hcnksIG1hdGNoLnN0
YXJ0LCBtYXRjaC5lbmQpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlRW5kVGFnICh0
YWdOYW1lLCBzdGFydCwgZW5kKSB7XG4gICAgdmFyIHBvcywgbG93ZXJDYXNlZFRhZ05hbWU7XG4g
ICAgaWYgKHN0YXJ0ID09IG51bGwpIHsgc3RhcnQgPSBpbmRleDsgfVxuICAgIGlmIChlbmQgPT0g
bnVsbCkgeyBlbmQgPSBpbmRleDsgfVxuXG4gICAgaWYgKHRhZ05hbWUpIHtcbiAgICAgIGxvd2Vy
Q2FzZWRUYWdOYW1lID0gdGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIC8vIEZp
bmQgdGhlIGNsb3Nlc3Qgb3BlbmVkIHRhZyBvZiB0aGUgc2FtZSB0eXBlXG4gICAgaWYgKHRhZ05h
bWUpIHtcbiAgICAgIGZvciAocG9zID0gc3RhY2subGVuZ3RoIC0gMTsgcG9zID49IDA7IHBvcy0t
KSB7XG4gICAgICAgIGlmIChzdGFja1twb3NdLmxvd2VyQ2FzZWRUYWcgPT09IGxvd2VyQ2FzZWRU
YWdOYW1lKSB7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxz
ZSB7XG4gICAgICAvLyBJZiBubyB0YWcgbmFtZSBpcyBwcm92aWRlZCwgY2xlYW4gc2hvcFxuICAg
ICAgcG9zID0gMDtcbiAgICB9XG5cbiAgICBpZiAocG9zID49IDApIHtcbiAgICAgIC8vIENsb3Nl
IGFsbCB0aGUgb3BlbiBlbGVtZW50cywgdXAgdGhlIHN0YWNrXG4gICAgICBmb3IgKHZhciBpID0g
c3RhY2subGVuZ3RoIC0gMTsgaSA+PSBwb3M7IGktLSkge1xuICAgICAgICBpZiAocHJvY2Vzcy5l
bnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgIChpID4gcG9zIHx8ICF0
YWdOYW1lKSAmJlxuICAgICAgICAgIG9wdGlvbnMud2FyblxuICAgICAgICApIHtcbiAgICAgICAg
ICBvcHRpb25zLndhcm4oXG4gICAgICAgICAgICAoXCJ0YWcgPFwiICsgKHN0YWNrW2ldLnRhZykg
KyBcIj4gaGFzIG5vIG1hdGNoaW5nIGVuZCB0YWcuXCIpXG4gICAgICAgICAgKTtcbiAgICAgICAg
fVxuICAgICAgICBpZiAob3B0aW9ucy5lbmQpIHtcbiAgICAgICAgICBvcHRpb25zLmVuZChzdGFj
a1tpXS50YWcsIHN0YXJ0LCBlbmQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFJl
bW92ZSB0aGUgb3BlbiBlbGVtZW50cyBmcm9tIHRoZSBzdGFja1xuICAgICAgc3RhY2subGVuZ3Ro
ID0gcG9zO1xuICAgICAgbGFzdFRhZyA9IHBvcyAmJiBzdGFja1twb3MgLSAxXS50YWc7XG4gICAg
fSBlbHNlIGlmIChsb3dlckNhc2VkVGFnTmFtZSA9PT0gJ2JyJykge1xuICAgICAgaWYgKG9wdGlv
bnMuc3RhcnQpIHtcbiAgICAgICAgb3B0aW9ucy5zdGFydCh0YWdOYW1lLCBbXSwgdHJ1ZSwgc3Rh
cnQsIGVuZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChsb3dlckNhc2VkVGFnTmFtZSA9PT0g
J3AnKSB7XG4gICAgICBpZiAob3B0aW9ucy5zdGFydCkge1xuICAgICAgICBvcHRpb25zLnN0YXJ0
KHRhZ05hbWUsIFtdLCBmYWxzZSwgc3RhcnQsIGVuZCk7XG4gICAgICB9XG4gICAgICBpZiAob3B0
aW9ucy5lbmQpIHtcbiAgICAgICAgb3B0aW9ucy5lbmQodGFnTmFtZSwgc3RhcnQsIGVuZCk7XG4g
ICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qICAqL1xuXG52YXIgb25SRSA9IC9eQHxedi1vbjov
O1xudmFyIGRpclJFID0gL152LXxeQHxeOi87XG52YXIgZm9yQWxpYXNSRSA9IC8oLio/KVxccyso
PzppbnxvZilcXHMrKC4qKS87XG52YXIgZm9ySXRlcmF0b3JSRSA9IC9cXCgoXFx7W159XSpcXH18
W14sXSopLChbXixdKikoPzosKFteLF0qKSk/XFwpLztcblxudmFyIGFyZ1JFID0gLzooLiopJC87
XG52YXIgYmluZFJFID0gL146fF52LWJpbmQ6LztcbnZhciBtb2RpZmllclJFID0gL1xcLlteLl0r
L2c7XG5cbnZhciBkZWNvZGVIVE1MQ2FjaGVkID0gY2FjaGVkKGhlLmRlY29kZSk7XG5cbi8vIGNv
bmZpZ3VyYWJsZSBzdGF0ZVxudmFyIHdhcm4kMjtcbnZhciBkZWxpbWl0ZXJzO1xudmFyIHRyYW5z
Zm9ybXM7XG52YXIgcHJlVHJhbnNmb3JtcztcbnZhciBwb3N0VHJhbnNmb3JtcztcbnZhciBwbGF0
Zm9ybUlzUHJlVGFnO1xudmFyIHBsYXRmb3JtTXVzdFVzZVByb3A7XG52YXIgcGxhdGZvcm1HZXRU
YWdOYW1lc3BhY2U7XG5cbi8qKlxuICogQ29udmVydCBIVE1MIHN0cmluZyB0byBBU1QuXG4gKi9c
bmZ1bmN0aW9uIHBhcnNlIChcbiAgdGVtcGxhdGUsXG4gIG9wdGlvbnNcbikge1xuICB3YXJuJDIg
PSBvcHRpb25zLndhcm4gfHwgYmFzZVdhcm47XG5cbiAgcGxhdGZvcm1Jc1ByZVRhZyA9IG9wdGlv
bnMuaXNQcmVUYWcgfHwgbm87XG4gIHBsYXRmb3JtTXVzdFVzZVByb3AgPSBvcHRpb25zLm11c3RV
c2VQcm9wIHx8IG5vO1xuICBwbGF0Zm9ybUdldFRhZ05hbWVzcGFjZSA9IG9wdGlvbnMuZ2V0VGFn
TmFtZXNwYWNlIHx8IG5vO1xuXG4gIHRyYW5zZm9ybXMgPSBwbHVja01vZHVsZUZ1bmN0aW9uKG9w
dGlvbnMubW9kdWxlcywgJ3RyYW5zZm9ybU5vZGUnKTtcbiAgcHJlVHJhbnNmb3JtcyA9IHBsdWNr
TW9kdWxlRnVuY3Rpb24ob3B0aW9ucy5tb2R1bGVzLCAncHJlVHJhbnNmb3JtTm9kZScpO1xuICBw
b3N0VHJhbnNmb3JtcyA9IHBsdWNrTW9kdWxlRnVuY3Rpb24ob3B0aW9ucy5tb2R1bGVzLCAncG9z
dFRyYW5zZm9ybU5vZGUnKTtcblxuICBkZWxpbWl0ZXJzID0gb3B0aW9ucy5kZWxpbWl0ZXJzO1xu
XG4gIHZhciBzdGFjayA9IFtdO1xuICB2YXIgcHJlc2VydmVXaGl0ZXNwYWNlID0gb3B0aW9ucy5w
cmVzZXJ2ZVdoaXRlc3BhY2UgIT09IGZhbHNlO1xuICB2YXIgcm9vdDtcbiAgdmFyIGN1cnJlbnRQ
YXJlbnQ7XG4gIHZhciBpblZQcmUgPSBmYWxzZTtcbiAgdmFyIGluUHJlID0gZmFsc2U7XG4gIHZh
ciB3YXJuZWQgPSBmYWxzZTtcblxuICBmdW5jdGlvbiB3YXJuT25jZSAobXNnKSB7XG4gICAgaWYg
KCF3YXJuZWQpIHtcbiAgICAgIHdhcm5lZCA9IHRydWU7XG4gICAgICB3YXJuJDIobXNnKTtcbiAg
ICB9XG4gIH1cblxuICBmdW5jdGlvbiBlbmRQcmUgKGVsZW1lbnQpIHtcbiAgICAvLyBjaGVjayBw
cmUgc3RhdGVcbiAgICBpZiAoZWxlbWVudC5wcmUpIHtcbiAgICAgIGluVlByZSA9IGZhbHNlO1xu
ICAgIH1cbiAgICBpZiAocGxhdGZvcm1Jc1ByZVRhZyhlbGVtZW50LnRhZykpIHtcbiAgICAgIGlu
UHJlID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcGFyc2VIVE1MKHRlbXBsYXRlLCB7XG4gICAg
d2Fybjogd2FybiQyLFxuICAgIGV4cGVjdEhUTUw6IG9wdGlvbnMuZXhwZWN0SFRNTCxcbiAgICBp
c1VuYXJ5VGFnOiBvcHRpb25zLmlzVW5hcnlUYWcsXG4gICAgY2FuQmVMZWZ0T3BlblRhZzogb3B0
aW9ucy5jYW5CZUxlZnRPcGVuVGFnLFxuICAgIHNob3VsZERlY29kZU5ld2xpbmVzOiBvcHRpb25z
LnNob3VsZERlY29kZU5ld2xpbmVzLFxuICAgIHNob3VsZEtlZXBDb21tZW50OiBvcHRpb25zLmNv
bW1lbnRzLFxuICAgIHN0YXJ0OiBmdW5jdGlvbiBzdGFydCAodGFnLCBhdHRycywgdW5hcnkpIHtc
biAgICAgIC8vIGNoZWNrIG5hbWVzcGFjZS5cbiAgICAgIC8vIGluaGVyaXQgcGFyZW50IG5zIGlm
IHRoZXJlIGlzIG9uZVxuICAgICAgdmFyIG5zID0gKGN1cnJlbnRQYXJlbnQgJiYgY3VycmVudFBh
cmVudC5ucykgfHwgcGxhdGZvcm1HZXRUYWdOYW1lc3BhY2UodGFnKTtcblxuICAgICAgLy8gaGFu
ZGxlIElFIHN2ZyBidWdcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYg
KGlzSUUgJiYgbnMgPT09ICdzdmcnKSB7XG4gICAgICAgIGF0dHJzID0gZ3VhcmRJRVNWR0J1Zyhh
dHRycyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBlbGVtZW50ID0ge1xuICAgICAgICB0eXBlOiAx
LFxuICAgICAgICB0YWc6IHRhZyxcbiAgICAgICAgYXR0cnNMaXN0OiBhdHRycyxcbiAgICAgICAg
YXR0cnNNYXA6IG1ha2VBdHRyc01hcChhdHRycyksXG4gICAgICAgIHBhcmVudDogY3VycmVudFBh
cmVudCxcbiAgICAgICAgY2hpbGRyZW46IFtdXG4gICAgICB9O1xuICAgICAgaWYgKG5zKSB7XG4g
ICAgICAgIGVsZW1lbnQubnMgPSBucztcbiAgICAgIH1cblxuICAgICAgaWYgKGlzRm9yYmlkZGVu
VGFnKGVsZW1lbnQpICYmICFpc1NlcnZlclJlbmRlcmluZygpKSB7XG4gICAgICAgIGVsZW1lbnQu
Zm9yYmlkZGVuID0gdHJ1ZTtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9k
dWN0aW9uJyAmJiB3YXJuJDIoXG4gICAgICAgICAgJ1RlbXBsYXRlcyBzaG91bGQgb25seSBiZSBy
ZXNwb25zaWJsZSBmb3IgbWFwcGluZyB0aGUgc3RhdGUgdG8gdGhlICcgK1xuICAgICAgICAgICdV
SS4gQXZvaWQgcGxhY2luZyB0YWdzIHdpdGggc2lkZS1lZmZlY3RzIGluIHlvdXIgdGVtcGxhdGVz
LCBzdWNoIGFzICcgK1xuICAgICAgICAgIFwiPFwiICsgdGFnICsgXCI+XCIgKyAnLCBhcyB0aGV5
IHdpbGwgbm90IGJlIHBhcnNlZC4nXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIGFw
cGx5IHByZS10cmFuc2Zvcm1zXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByZVRyYW5zZm9y
bXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcHJlVHJhbnNmb3Jtc1tpXShlbGVtZW50LCBvcHRp
b25zKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpblZQcmUpIHtcbiAgICAgICAgcHJvY2Vzc1By
ZShlbGVtZW50KTtcbiAgICAgICAgaWYgKGVsZW1lbnQucHJlKSB7XG4gICAgICAgICAgaW5WUHJl
ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHBsYXRmb3JtSXNQcmVUYWco
ZWxlbWVudC50YWcpKSB7XG4gICAgICAgIGluUHJlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlm
IChpblZQcmUpIHtcbiAgICAgICAgcHJvY2Vzc1Jhd0F0dHJzKGVsZW1lbnQpO1xuICAgICAgfSBl
bHNlIHtcbiAgICAgICAgcHJvY2Vzc0ZvcihlbGVtZW50KTtcbiAgICAgICAgcHJvY2Vzc0lmKGVs
ZW1lbnQpO1xuICAgICAgICBwcm9jZXNzT25jZShlbGVtZW50KTtcbiAgICAgICAgcHJvY2Vzc0tl
eShlbGVtZW50KTtcblxuICAgICAgICAvLyBkZXRlcm1pbmUgd2hldGhlciB0aGlzIGlzIGEgcGxh
aW4gZWxlbWVudCBhZnRlclxuICAgICAgICAvLyByZW1vdmluZyBzdHJ1Y3R1cmFsIGF0dHJpYnV0
ZXNcbiAgICAgICAgZWxlbWVudC5wbGFpbiA9ICFlbGVtZW50LmtleSAmJiAhYXR0cnMubGVuZ3Ro
O1xuXG4gICAgICAgIHByb2Nlc3NSZWYoZWxlbWVudCk7XG4gICAgICAgIHByb2Nlc3NTbG90KGVs
ZW1lbnQpO1xuICAgICAgICBwcm9jZXNzQ29tcG9uZW50KGVsZW1lbnQpO1xuICAgICAgICBmb3Ig
KHZhciBpJDEgPSAwOyBpJDEgPCB0cmFuc2Zvcm1zLmxlbmd0aDsgaSQxKyspIHtcbiAgICAgICAg
ICB0cmFuc2Zvcm1zW2kkMV0oZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAg
cHJvY2Vzc0F0dHJzKGVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBjaGVja1Jv
b3RDb25zdHJhaW50cyAoZWwpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9
PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBpZiAoZWwudGFnID09PSAnc2xvdCcgfHwgZWwu
dGFnID09PSAndGVtcGxhdGUnKSB7XG4gICAgICAgICAgICB3YXJuT25jZShcbiAgICAgICAgICAg
ICAgXCJDYW5ub3QgdXNlIDxcIiArIChlbC50YWcpICsgXCI+IGFzIGNvbXBvbmVudCByb290IGVs
ZW1lbnQgYmVjYXVzZSBpdCBtYXkgXCIgK1xuICAgICAgICAgICAgICAnY29udGFpbiBtdWx0aXBs
ZSBub2Rlcy4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZWwu
YXR0cnNNYXAuaGFzT3duUHJvcGVydHkoJ3YtZm9yJykpIHtcbiAgICAgICAgICAgIHdhcm5PbmNl
KFxuICAgICAgICAgICAgICAnQ2Fubm90IHVzZSB2LWZvciBvbiBzdGF0ZWZ1bCBjb21wb25lbnQg
cm9vdCBlbGVtZW50IGJlY2F1c2UgJyArXG4gICAgICAgICAgICAgICdpdCByZW5kZXJzIG11bHRp
cGxlIGVsZW1lbnRzLidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4g
ICAgICB9XG5cbiAgICAgIC8vIHRyZWUgbWFuYWdlbWVudFxuICAgICAgaWYgKCFyb290KSB7XG4g
ICAgICAgIHJvb3QgPSBlbGVtZW50O1xuICAgICAgICBjaGVja1Jvb3RDb25zdHJhaW50cyhyb290
KTtcbiAgICAgIH0gZWxzZSBpZiAoIXN0YWNrLmxlbmd0aCkge1xuICAgICAgICAvLyBhbGxvdyBy
b290IGVsZW1lbnRzIHdpdGggdi1pZiwgdi1lbHNlLWlmIGFuZCB2LWVsc2VcbiAgICAgICAgaWYg
KHJvb3QuaWYgJiYgKGVsZW1lbnQuZWxzZWlmIHx8IGVsZW1lbnQuZWxzZSkpIHtcbiAgICAgICAg
ICBjaGVja1Jvb3RDb25zdHJhaW50cyhlbGVtZW50KTtcbiAgICAgICAgICBhZGRJZkNvbmRpdGlv
bihyb290LCB7XG4gICAgICAgICAgICBleHA6IGVsZW1lbnQuZWxzZWlmLFxuICAgICAgICAgICAg
YmxvY2s6IGVsZW1lbnRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9jZXNz
LmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgd2Fybk9uY2UoXG4g
ICAgICAgICAgICBcIkNvbXBvbmVudCB0ZW1wbGF0ZSBzaG91bGQgY29udGFpbiBleGFjdGx5IG9u
ZSByb290IGVsZW1lbnQuIFwiICtcbiAgICAgICAgICAgIFwiSWYgeW91IGFyZSB1c2luZyB2LWlm
IG9uIG11bHRpcGxlIGVsZW1lbnRzLCBcIiArXG4gICAgICAgICAgICBcInVzZSB2LWVsc2UtaWYg
dG8gY2hhaW4gdGhlbSBpbnN0ZWFkLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAg
fVxuICAgICAgaWYgKGN1cnJlbnRQYXJlbnQgJiYgIWVsZW1lbnQuZm9yYmlkZGVuKSB7XG4gICAg
ICAgIGlmIChlbGVtZW50LmVsc2VpZiB8fCBlbGVtZW50LmVsc2UpIHtcbiAgICAgICAgICBwcm9j
ZXNzSWZDb25kaXRpb25zKGVsZW1lbnQsIGN1cnJlbnRQYXJlbnQpO1xuICAgICAgICB9IGVsc2Ug
aWYgKGVsZW1lbnQuc2xvdFNjb3BlKSB7IC8vIHNjb3BlZCBzbG90XG4gICAgICAgICAgY3VycmVu
dFBhcmVudC5wbGFpbiA9IGZhbHNlO1xuICAgICAgICAgIHZhciBuYW1lID0gZWxlbWVudC5zbG90
VGFyZ2V0IHx8ICdcImRlZmF1bHRcIic7KGN1cnJlbnRQYXJlbnQuc2NvcGVkU2xvdHMgfHwgKGN1
cnJlbnRQYXJlbnQuc2NvcGVkU2xvdHMgPSB7fSkpW25hbWVdID0gZWxlbWVudDtcbiAgICAgICAg
fSBlbHNlIHtcbiAgICAgICAgICBjdXJyZW50UGFyZW50LmNoaWxkcmVuLnB1c2goZWxlbWVudCk7
XG4gICAgICAgICAgZWxlbWVudC5wYXJlbnQgPSBjdXJyZW50UGFyZW50O1xuICAgICAgICB9XG4g
ICAgICB9XG4gICAgICBpZiAoIXVuYXJ5KSB7XG4gICAgICAgIGN1cnJlbnRQYXJlbnQgPSBlbGVt
ZW50O1xuICAgICAgICBzdGFjay5wdXNoKGVsZW1lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAg
ICAgZW5kUHJlKGVsZW1lbnQpO1xuICAgICAgfVxuICAgICAgLy8gYXBwbHkgcG9zdC10cmFuc2Zv
cm1zXG4gICAgICBmb3IgKHZhciBpJDIgPSAwOyBpJDIgPCBwb3N0VHJhbnNmb3Jtcy5sZW5ndGg7
IGkkMisrKSB7XG4gICAgICAgIHBvc3RUcmFuc2Zvcm1zW2kkMl0oZWxlbWVudCwgb3B0aW9ucyk7
XG4gICAgICB9XG4gICAgfSxcblxuICAgIGVuZDogZnVuY3Rpb24gZW5kICgpIHtcbiAgICAgIC8v
IHJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlXG4gICAgICB2YXIgZWxlbWVudCA9IHN0YWNrW3N0
YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgdmFyIGxhc3ROb2RlID0gZWxlbWVudC5jaGlsZHJlbltl
bGVtZW50LmNoaWxkcmVuLmxlbmd0aCAtIDFdO1xuICAgICAgaWYgKGxhc3ROb2RlICYmIGxhc3RO
b2RlLnR5cGUgPT09IDMgJiYgbGFzdE5vZGUudGV4dCA9PT0gJyAnICYmICFpblByZSkge1xuICAg
ICAgICBlbGVtZW50LmNoaWxkcmVuLnBvcCgpO1xuICAgICAgfVxuICAgICAgLy8gcG9wIHN0YWNr
XG4gICAgICBzdGFjay5sZW5ndGggLT0gMTtcbiAgICAgIGN1cnJlbnRQYXJlbnQgPSBzdGFja1tz
dGFjay5sZW5ndGggLSAxXTtcbiAgICAgIGVuZFByZShlbGVtZW50KTtcbiAgICB9LFxuXG4gICAg
Y2hhcnM6IGZ1bmN0aW9uIGNoYXJzICh0ZXh0KSB7XG4gICAgICBpZiAoIWN1cnJlbnRQYXJlbnQp
IHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtc
biAgICAgICAgICBpZiAodGV4dCA9PT0gdGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHdhcm5PbmNl
KFxuICAgICAgICAgICAgICAnQ29tcG9uZW50IHRlbXBsYXRlIHJlcXVpcmVzIGEgcm9vdCBlbGVt
ZW50LCByYXRoZXIgdGhhbiBqdXN0IHRleHQuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9
IGVsc2UgaWYgKCh0ZXh0ID0gdGV4dC50cmltKCkpKSB7XG4gICAgICAgICAgICB3YXJuT25jZShc
biAgICAgICAgICAgICAgKFwidGV4dCBcXFwiXCIgKyB0ZXh0ICsgXCJcXFwiIG91dHNpZGUgcm9v
dCBlbGVtZW50IHdpbGwgYmUgaWdub3JlZC5cIilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAg
fVxuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgLy8gSUUgdGV4dGFy
ZWEgcGxhY2Vob2xkZXIgYnVnXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAg
IGlmIChpc0lFICYmXG4gICAgICAgIGN1cnJlbnRQYXJlbnQudGFnID09PSAndGV4dGFyZWEnICYm
XG4gICAgICAgIGN1cnJlbnRQYXJlbnQuYXR0cnNNYXAucGxhY2Vob2xkZXIgPT09IHRleHRcbiAg
ICAgICkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHZhciBjaGlsZHJlbiA9IGN1
cnJlbnRQYXJlbnQuY2hpbGRyZW47XG4gICAgICB0ZXh0ID0gaW5QcmUgfHwgdGV4dC50cmltKClc
biAgICAgICAgPyBpc1RleHRUYWcoY3VycmVudFBhcmVudCkgPyB0ZXh0IDogZGVjb2RlSFRNTENh
Y2hlZCh0ZXh0KVxuICAgICAgICAvLyBvbmx5IHByZXNlcnZlIHdoaXRlc3BhY2UgaWYgaXRzIG5v
dCByaWdodCBhZnRlciBhIHN0YXJ0aW5nIHRhZ1xuICAgICAgICA6IHByZXNlcnZlV2hpdGVzcGFj
ZSAmJiBjaGlsZHJlbi5sZW5ndGggPyAnICcgOiAnJztcbiAgICAgIGlmICh0ZXh0KSB7XG4gICAg
ICAgIHZhciBleHByZXNzaW9uO1xuICAgICAgICBpZiAoIWluVlByZSAmJiB0ZXh0ICE9PSAnICcg
JiYgKGV4cHJlc3Npb24gPSBwYXJzZVRleHQodGV4dCwgZGVsaW1pdGVycykpKSB7XG4gICAgICAg
ICAgY2hpbGRyZW4ucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiAyLFxuICAgICAgICAgICAgZXhw
cmVzc2lvbjogZXhwcmVzc2lvbixcbiAgICAgICAgICAgIHRleHQ6IHRleHRcbiAgICAgICAgICB9
KTtcbiAgICAgICAgfSBlbHNlIGlmICh0ZXh0ICE9PSAnICcgfHwgIWNoaWxkcmVuLmxlbmd0aCB8
fCBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXS50ZXh0ICE9PSAnICcpIHtcbiAgICAgICAg
ICBjaGlsZHJlbi5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6IDMsXG4gICAgICAgICAgICB0ZXh0
OiB0ZXh0XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGNv
bW1lbnQ6IGZ1bmN0aW9uIGNvbW1lbnQgKHRleHQpIHtcbiAgICAgIGN1cnJlbnRQYXJlbnQuY2hp
bGRyZW4ucHVzaCh7XG4gICAgICAgIHR5cGU6IDMsXG4gICAgICAgIHRleHQ6IHRleHQsXG4gICAg
ICAgIGlzQ29tbWVudDogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJv
b3Rcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1ByZSAoZWwpIHtcbiAgaWYgKGdldEFuZFJlbW92ZUF0
dHIoZWwsICd2LXByZScpICE9IG51bGwpIHtcbiAgICBlbC5wcmUgPSB0cnVlO1xuICB9XG59XG5c
bmZ1bmN0aW9uIHByb2Nlc3NSYXdBdHRycyAoZWwpIHtcbiAgdmFyIGwgPSBlbC5hdHRyc0xpc3Qu
bGVuZ3RoO1xuICBpZiAobCkge1xuICAgIHZhciBhdHRycyA9IGVsLmF0dHJzID0gbmV3IEFycmF5
KGwpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICBhdHRyc1tpXSA9
IHtcbiAgICAgICAgbmFtZTogZWwuYXR0cnNMaXN0W2ldLm5hbWUsXG4gICAgICAgIHZhbHVlOiBK
U09OLnN0cmluZ2lmeShlbC5hdHRyc0xpc3RbaV0udmFsdWUpXG4gICAgICB9O1xuICAgIH1cbiAg
fSBlbHNlIGlmICghZWwucHJlKSB7XG4gICAgLy8gbm9uIHJvb3Qgbm9kZSBpbiBwcmUgYmxvY2tz
IHdpdGggbm8gYXR0cmlidXRlc1xuICAgIGVsLnBsYWluID0gdHJ1ZTtcbiAgfVxufVxuXG5mdW5j
dGlvbiBwcm9jZXNzS2V5IChlbCkge1xuICB2YXIgZXhwID0gZ2V0QmluZGluZ0F0dHIoZWwsICdr
ZXknKTtcbiAgaWYgKGV4cCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3By
b2R1Y3Rpb24nICYmIGVsLnRhZyA9PT0gJ3RlbXBsYXRlJykge1xuICAgICAgd2FybiQyKFwiPHRl
bXBsYXRlPiBjYW5ub3QgYmUga2V5ZWQuIFBsYWNlIHRoZSBrZXkgb24gcmVhbCBlbGVtZW50cyBp
bnN0ZWFkLlwiKTtcbiAgICB9XG4gICAgZWwua2V5ID0gZXhwO1xuICB9XG59XG5cbmZ1bmN0aW9u
IHByb2Nlc3NSZWYgKGVsKSB7XG4gIHZhciByZWYgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ3JlZicp
O1xuICBpZiAocmVmKSB7XG4gICAgZWwucmVmID0gcmVmO1xuICAgIGVsLnJlZkluRm9yID0gY2hl
Y2tJbkZvcihlbCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0ZvciAoZWwpIHtcbiAgdmFy
IGV4cDtcbiAgaWYgKChleHAgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1mb3InKSkpIHtcbiAg
ICB2YXIgaW5NYXRjaCA9IGV4cC5tYXRjaChmb3JBbGlhc1JFKTtcbiAgICBpZiAoIWluTWF0Y2gp
IHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybiQy
KFxuICAgICAgICAoXCJJbnZhbGlkIHYtZm9yIGV4cHJlc3Npb246IFwiICsgZXhwKVxuICAgICAg
KTtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBlbC5mb3IgPSBpbk1hdGNoWzJdLnRyaW0oKTtc
biAgICB2YXIgYWxpYXMgPSBpbk1hdGNoWzFdLnRyaW0oKTtcbiAgICB2YXIgaXRlcmF0b3JNYXRj
aCA9IGFsaWFzLm1hdGNoKGZvckl0ZXJhdG9yUkUpO1xuICAgIGlmIChpdGVyYXRvck1hdGNoKSB7
XG4gICAgICBlbC5hbGlhcyA9IGl0ZXJhdG9yTWF0Y2hbMV0udHJpbSgpO1xuICAgICAgZWwuaXRl
cmF0b3IxID0gaXRlcmF0b3JNYXRjaFsyXS50cmltKCk7XG4gICAgICBpZiAoaXRlcmF0b3JNYXRj
aFszXSkge1xuICAgICAgICBlbC5pdGVyYXRvcjIgPSBpdGVyYXRvck1hdGNoWzNdLnRyaW0oKTtc
biAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZWwuYWxpYXMgPSBhbGlhcztcbiAgICB9XG4g
IH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0lmIChlbCkge1xuICB2YXIgZXhwID0gZ2V0QW5kUmVt
b3ZlQXR0cihlbCwgJ3YtaWYnKTtcbiAgaWYgKGV4cCkge1xuICAgIGVsLmlmID0gZXhwO1xuICAg
IGFkZElmQ29uZGl0aW9uKGVsLCB7XG4gICAgICBleHA6IGV4cCxcbiAgICAgIGJsb2NrOiBlbFxu
ICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGlmIChnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1lbHNl
JykgIT0gbnVsbCkge1xuICAgICAgZWwuZWxzZSA9IHRydWU7XG4gICAgfVxuICAgIHZhciBlbHNl
aWYgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1lbHNlLWlmJyk7XG4gICAgaWYgKGVsc2VpZikg
e1xuICAgICAgZWwuZWxzZWlmID0gZWxzZWlmO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBw
cm9jZXNzSWZDb25kaXRpb25zIChlbCwgcGFyZW50KSB7XG4gIHZhciBwcmV2ID0gZmluZFByZXZF
bGVtZW50KHBhcmVudC5jaGlsZHJlbik7XG4gIGlmIChwcmV2ICYmIHByZXYuaWYpIHtcbiAgICBh
ZGRJZkNvbmRpdGlvbihwcmV2LCB7XG4gICAgICBleHA6IGVsLmVsc2VpZixcbiAgICAgIGJsb2Nr
OiBlbFxuICAgIH0pO1xuICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJv
ZHVjdGlvbicpIHtcbiAgICB3YXJuJDIoXG4gICAgICBcInYtXCIgKyAoZWwuZWxzZWlmID8gKCdl
bHNlLWlmPVwiJyArIGVsLmVsc2VpZiArICdcIicpIDogJ2Vsc2UnKSArIFwiIFwiICtcbiAgICAg
IFwidXNlZCBvbiBlbGVtZW50IDxcIiArIChlbC50YWcpICsgXCI+IHdpdGhvdXQgY29ycmVzcG9u
ZGluZyB2LWlmLlwiXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kUHJldkVsZW1lbnQg
KGNoaWxkcmVuKSB7XG4gIHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoO1xuICB3aGlsZSAoaS0tKSB7
XG4gICAgaWYgKGNoaWxkcmVuW2ldLnR5cGUgPT09IDEpIHtcbiAgICAgIHJldHVybiBjaGlsZHJl
bltpXVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdw
cm9kdWN0aW9uJyAmJiBjaGlsZHJlbltpXS50ZXh0ICE9PSAnICcpIHtcbiAgICAgICAgd2FybiQy
KFxuICAgICAgICAgIFwidGV4dCBcXFwiXCIgKyAoY2hpbGRyZW5baV0udGV4dC50cmltKCkpICsg
XCJcXFwiIGJldHdlZW4gdi1pZiBhbmQgdi1lbHNlKC1pZikgXCIgK1xuICAgICAgICAgIFwid2ls
bCBiZSBpZ25vcmVkLlwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjaGlsZHJlbi5wb3Ao
KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkSWZDb25kaXRpb24gKGVsLCBjb25kaXRp
b24pIHtcbiAgaWYgKCFlbC5pZkNvbmRpdGlvbnMpIHtcbiAgICBlbC5pZkNvbmRpdGlvbnMgPSBb
XTtcbiAgfVxuICBlbC5pZkNvbmRpdGlvbnMucHVzaChjb25kaXRpb24pO1xufVxuXG5mdW5jdGlv
biBwcm9jZXNzT25jZSAoZWwpIHtcbiAgdmFyIG9uY2UkJDEgPSBnZXRBbmRSZW1vdmVBdHRyKGVs
LCAndi1vbmNlJyk7XG4gIGlmIChvbmNlJCQxICE9IG51bGwpIHtcbiAgICBlbC5vbmNlID0gdHJ1
ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzU2xvdCAoZWwpIHtcbiAgaWYgKGVsLnRhZyA9
PT0gJ3Nsb3QnKSB7XG4gICAgZWwuc2xvdE5hbWUgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ25hbWUn
KTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBlbC5r
ZXkpIHtcbiAgICAgIHdhcm4kMihcbiAgICAgICAgXCJga2V5YCBkb2VzIG5vdCB3b3JrIG9uIDxz
bG90PiBiZWNhdXNlIHNsb3RzIGFyZSBhYnN0cmFjdCBvdXRsZXRzIFwiICtcbiAgICAgICAgXCJh
bmQgY2FuIHBvc3NpYmx5IGV4cGFuZCBpbnRvIG11bHRpcGxlIGVsZW1lbnRzLiBcIiArXG4gICAg
ICAgIFwiVXNlIHRoZSBrZXkgb24gYSB3cmFwcGluZyBlbGVtZW50IGluc3RlYWQuXCJcbiAgICAg
ICk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBzbG90VGFyZ2V0ID0gZ2V0QmluZGluZ0F0
dHIoZWwsICdzbG90Jyk7XG4gICAgaWYgKHNsb3RUYXJnZXQpIHtcbiAgICAgIGVsLnNsb3RUYXJn
ZXQgPSBzbG90VGFyZ2V0ID09PSAnXCJcIicgPyAnXCJkZWZhdWx0XCInIDogc2xvdFRhcmdldDtc
biAgICB9XG4gICAgaWYgKGVsLnRhZyA9PT0gJ3RlbXBsYXRlJykge1xuICAgICAgZWwuc2xvdFNj
b3BlID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3Njb3BlJyk7XG4gICAgfVxuICB9XG59XG5cbmZ1
bmN0aW9uIHByb2Nlc3NDb21wb25lbnQgKGVsKSB7XG4gIHZhciBiaW5kaW5nO1xuICBpZiAoKGJp
bmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ2lzJykpKSB7XG4gICAgZWwuY29tcG9uZW50ID0g
YmluZGluZztcbiAgfVxuICBpZiAoZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ2lubGluZS10ZW1wbGF0
ZScpICE9IG51bGwpIHtcbiAgICBlbC5pbmxpbmVUZW1wbGF0ZSA9IHRydWU7XG4gIH1cbn1cblxu
ZnVuY3Rpb24gcHJvY2Vzc0F0dHJzIChlbCkge1xuICB2YXIgbGlzdCA9IGVsLmF0dHJzTGlzdDtc
biAgdmFyIGksIGwsIG5hbWUsIHJhd05hbWUsIHZhbHVlLCBtb2RpZmllcnMsIGlzUHJvcDtcbiAg
Zm9yIChpID0gMCwgbCA9IGxpc3QubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgbmFtZSA9IHJh
d05hbWUgPSBsaXN0W2ldLm5hbWU7XG4gICAgdmFsdWUgPSBsaXN0W2ldLnZhbHVlO1xuICAgIGlm
IChkaXJSRS50ZXN0KG5hbWUpKSB7XG4gICAgICAvLyBtYXJrIGVsZW1lbnQgYXMgZHluYW1pY1xu
ICAgICAgZWwuaGFzQmluZGluZ3MgPSB0cnVlO1xuICAgICAgLy8gbW9kaWZpZXJzXG4gICAgICBt
b2RpZmllcnMgPSBwYXJzZU1vZGlmaWVycyhuYW1lKTtcbiAgICAgIGlmIChtb2RpZmllcnMpIHtc
biAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZShtb2RpZmllclJFLCAnJyk7XG4gICAgICB9XG4g
ICAgICBpZiAoYmluZFJFLnRlc3QobmFtZSkpIHsgLy8gdi1iaW5kXG4gICAgICAgIG5hbWUgPSBu
YW1lLnJlcGxhY2UoYmluZFJFLCAnJyk7XG4gICAgICAgIHZhbHVlID0gcGFyc2VGaWx0ZXJzKHZh
bHVlKTtcbiAgICAgICAgaXNQcm9wID0gZmFsc2U7XG4gICAgICAgIGlmIChtb2RpZmllcnMpIHtc
biAgICAgICAgICBpZiAobW9kaWZpZXJzLnByb3ApIHtcbiAgICAgICAgICAgIGlzUHJvcCA9IHRy
dWU7XG4gICAgICAgICAgICBuYW1lID0gY2FtZWxpemUobmFtZSk7XG4gICAgICAgICAgICBpZiAo
bmFtZSA9PT0gJ2lubmVySHRtbCcpIHsgbmFtZSA9ICdpbm5lckhUTUwnOyB9XG4gICAgICAgICAg
fVxuICAgICAgICAgIGlmIChtb2RpZmllcnMuY2FtZWwpIHtcbiAgICAgICAgICAgIG5hbWUgPSBj
YW1lbGl6ZShuYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG1vZGlmaWVycy5zeW5j
KSB7XG4gICAgICAgICAgICBhZGRIYW5kbGVyKFxuICAgICAgICAgICAgICBlbCxcbiAgICAgICAg
ICAgICAgKFwidXBkYXRlOlwiICsgKGNhbWVsaXplKG5hbWUpKSksXG4gICAgICAgICAgICAgIGdl
bkFzc2lnbm1lbnRDb2RlKHZhbHVlLCBcIiRldmVudFwiKVxuICAgICAgICAgICAgKTtcbiAgICAg
ICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJvcCB8fCAoXG4gICAgICAgICAgIWVs
LmNvbXBvbmVudCAmJiBwbGF0Zm9ybU11c3RVc2VQcm9wKGVsLnRhZywgZWwuYXR0cnNNYXAudHlw
ZSwgbmFtZSlcbiAgICAgICAgKSkge1xuICAgICAgICAgIGFkZFByb3AoZWwsIG5hbWUsIHZhbHVl
KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZGRBdHRyKGVsLCBuYW1lLCB2YWx1ZSk7
XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAob25SRS50ZXN0KG5hbWUpKSB7IC8vIHYtb25c
biAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZShvblJFLCAnJyk7XG4gICAgICAgIGFkZEhhbmRs
ZXIoZWwsIG5hbWUsIHZhbHVlLCBtb2RpZmllcnMsIGZhbHNlLCB3YXJuJDIpO1xuICAgICAgfSBl
bHNlIHsgLy8gbm9ybWFsIGRpcmVjdGl2ZXNcbiAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZShk
aXJSRSwgJycpO1xuICAgICAgICAvLyBwYXJzZSBhcmdcbiAgICAgICAgdmFyIGFyZ01hdGNoID0g
bmFtZS5tYXRjaChhcmdSRSk7XG4gICAgICAgIHZhciBhcmcgPSBhcmdNYXRjaCAmJiBhcmdNYXRj
aFsxXTtcbiAgICAgICAgaWYgKGFyZykge1xuICAgICAgICAgIG5hbWUgPSBuYW1lLnNsaWNlKDAs
IC0oYXJnLmxlbmd0aCArIDEpKTtcbiAgICAgICAgfVxuICAgICAgICBhZGREaXJlY3RpdmUoZWws
IG5hbWUsIHJhd05hbWUsIHZhbHVlLCBhcmcsIG1vZGlmaWVycyk7XG4gICAgICAgIGlmIChwcm9j
ZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIG5hbWUgPT09ICdtb2RlbCcpIHtc
biAgICAgICAgICBjaGVja0ZvckFsaWFzTW9kZWwoZWwsIHZhbHVlKTtcbiAgICAgICAgfVxuICAg
ICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBsaXRlcmFsIGF0dHJpYnV0ZVxuICAgICAgaWYg
KHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgdmFyIGV4
cHJlc3Npb24gPSBwYXJzZVRleHQodmFsdWUsIGRlbGltaXRlcnMpO1xuICAgICAgICBpZiAoZXhw
cmVzc2lvbikge1xuICAgICAgICAgIHdhcm4kMihcbiAgICAgICAgICAgIG5hbWUgKyBcIj1cXFwi
XCIgKyB2YWx1ZSArIFwiXFxcIjogXCIgK1xuICAgICAgICAgICAgJ0ludGVycG9sYXRpb24gaW5z
aWRlIGF0dHJpYnV0ZXMgaGFzIGJlZW4gcmVtb3ZlZC4gJyArXG4gICAgICAgICAgICAnVXNlIHYt
YmluZCBvciB0aGUgY29sb24gc2hvcnRoYW5kIGluc3RlYWQuIEZvciBleGFtcGxlLCAnICtcbiAg
ICAgICAgICAgICdpbnN0ZWFkIG9mIDxkaXYgaWQ9XCJ7eyB2YWwgfX1cIj4sIHVzZSA8ZGl2IDpp
ZD1cInZhbFwiPi4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYWRk
QXR0cihlbCwgbmFtZSwgSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcbiAgICB9XG4gIH1cbn1cblxu
ZnVuY3Rpb24gY2hlY2tJbkZvciAoZWwpIHtcbiAgdmFyIHBhcmVudCA9IGVsO1xuICB3aGlsZSAo
cGFyZW50KSB7XG4gICAgaWYgKHBhcmVudC5mb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0
dXJuIHRydWVcbiAgICB9XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgfVxuICByZXR1
cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gcGFyc2VNb2RpZmllcnMgKG5hbWUpIHtcbiAgdmFyIG1h
dGNoID0gbmFtZS5tYXRjaChtb2RpZmllclJFKTtcbiAgaWYgKG1hdGNoKSB7XG4gICAgdmFyIHJl
dCA9IHt9O1xuICAgIG1hdGNoLmZvckVhY2goZnVuY3Rpb24gKG0pIHsgcmV0W20uc2xpY2UoMSld
ID0gdHJ1ZTsgfSk7XG4gICAgcmV0dXJuIHJldFxuICB9XG59XG5cbmZ1bmN0aW9uIG1ha2VBdHRy
c01hcCAoYXR0cnMpIHtcbiAgdmFyIG1hcCA9IHt9O1xuICBmb3IgKHZhciBpID0gMCwgbCA9IGF0
dHJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGlmIChcbiAgICAgIHByb2Nlc3MuZW52Lk5P
REVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgIG1hcFthdHRyc1tpXS5uYW1lXSAmJiAh
aXNJRSAmJiAhaXNFZGdlXG4gICAgKSB7XG4gICAgICB3YXJuJDIoJ2R1cGxpY2F0ZSBhdHRyaWJ1
dGU6ICcgKyBhdHRyc1tpXS5uYW1lKTtcbiAgICB9XG4gICAgbWFwW2F0dHJzW2ldLm5hbWVdID0g
YXR0cnNbaV0udmFsdWU7XG4gIH1cbiAgcmV0dXJuIG1hcFxufVxuXG4vLyBmb3Igc2NyaXB0IChl
LmcuIHR5cGU9XCJ4L3RlbXBsYXRlXCIpIG9yIHN0eWxlLCBkbyBub3QgZGVjb2RlIGNvbnRlbnRc
bmZ1bmN0aW9uIGlzVGV4dFRhZyAoZWwpIHtcbiAgcmV0dXJuIGVsLnRhZyA9PT0gJ3NjcmlwdCcg
fHwgZWwudGFnID09PSAnc3R5bGUnXG59XG5cbmZ1bmN0aW9uIGlzRm9yYmlkZGVuVGFnIChlbCkg
e1xuICByZXR1cm4gKFxuICAgIGVsLnRhZyA9PT0gJ3N0eWxlJyB8fFxuICAgIChlbC50YWcgPT09
ICdzY3JpcHQnICYmIChcbiAgICAgICFlbC5hdHRyc01hcC50eXBlIHx8XG4gICAgICBlbC5hdHRy
c01hcC50eXBlID09PSAndGV4dC9qYXZhc2NyaXB0J1xuICAgICkpXG4gIClcbn1cblxudmFyIGll
TlNCdWcgPSAvXnhtbG5zOk5TXFxkKy87XG52YXIgaWVOU1ByZWZpeCA9IC9eTlNcXGQrOi87XG5c
bi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBndWFyZElFU1ZHQnVnIChhdHRy
cykge1xuICB2YXIgcmVzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cnMubGVuZ3Ro
OyBpKyspIHtcbiAgICB2YXIgYXR0ciA9IGF0dHJzW2ldO1xuICAgIGlmICghaWVOU0J1Zy50ZXN0
KGF0dHIubmFtZSkpIHtcbiAgICAgIGF0dHIubmFtZSA9IGF0dHIubmFtZS5yZXBsYWNlKGllTlNQ
cmVmaXgsICcnKTtcbiAgICAgIHJlcy5wdXNoKGF0dHIpO1xuICAgIH1cbiAgfVxuICByZXR1cm4g
cmVzXG59XG5cbmZ1bmN0aW9uIGNoZWNrRm9yQWxpYXNNb2RlbCAoZWwsIHZhbHVlKSB7XG4gIHZh
ciBfZWwgPSBlbDtcbiAgd2hpbGUgKF9lbCkge1xuICAgIGlmIChfZWwuZm9yICYmIF9lbC5hbGlh
cyA9PT0gdmFsdWUpIHtcbiAgICAgIHdhcm4kMihcbiAgICAgICAgXCI8XCIgKyAoZWwudGFnKSAr
IFwiIHYtbW9kZWw9XFxcIlwiICsgdmFsdWUgKyBcIlxcXCI+OiBcIiArXG4gICAgICAgIFwiWW91
IGFyZSBiaW5kaW5nIHYtbW9kZWwgZGlyZWN0bHkgdG8gYSB2LWZvciBpdGVyYXRpb24gYWxpYXMu
IFwiICtcbiAgICAgICAgXCJUaGlzIHdpbGwgbm90IGJlIGFibGUgdG8gbW9kaWZ5IHRoZSB2LWZv
ciBzb3VyY2UgYXJyYXkgYmVjYXVzZSBcIiArXG4gICAgICAgIFwid3JpdGluZyB0byB0aGUgYWxp
YXMgaXMgbGlrZSBtb2RpZnlpbmcgYSBmdW5jdGlvbiBsb2NhbCB2YXJpYWJsZS4gXCIgK1xuICAg
ICAgICBcIkNvbnNpZGVyIHVzaW5nIGFuIGFycmF5IG9mIG9iamVjdHMgYW5kIHVzZSB2LW1vZGVs
IG9uIGFuIG9iamVjdCBwcm9wZXJ0eSBpbnN0ZWFkLlwiXG4gICAgICApO1xuICAgIH1cbiAgICBf
ZWwgPSBfZWwucGFyZW50O1xuICB9XG59XG5cbi8qICAqL1xuXG52YXIgaXNTdGF0aWNLZXk7XG52
YXIgaXNQbGF0Zm9ybVJlc2VydmVkVGFnO1xuXG52YXIgZ2VuU3RhdGljS2V5c0NhY2hlZCA9IGNh
Y2hlZChnZW5TdGF0aWNLZXlzJDEpO1xuXG4vKipcbiAqIEdvYWwgb2YgdGhlIG9wdGltaXplcjog
d2FsayB0aGUgZ2VuZXJhdGVkIHRlbXBsYXRlIEFTVCB0cmVlXG4gKiBhbmQgZGV0ZWN0IHN1Yi10
cmVlcyB0aGF0IGFyZSBwdXJlbHkgc3RhdGljLCBpLmUuIHBhcnRzIG9mXG4gKiB0aGUgRE9NIHRo
YXQgbmV2ZXIgbmVlZHMgdG8gY2hhbmdlLlxuICpcbiAqIE9uY2Ugd2UgZGV0ZWN0IHRoZXNlIHN1
Yi10cmVlcywgd2UgY2FuOlxuICpcbiAqIDEuIEhvaXN0IHRoZW0gaW50byBjb25zdGFudHMsIHNv
IHRoYXQgd2Ugbm8gbG9uZ2VyIG5lZWQgdG9cbiAqICAgIGNyZWF0ZSBmcmVzaCBub2RlcyBmb3Ig
dGhlbSBvbiBlYWNoIHJlLXJlbmRlcjtcbiAqIDIuIENvbXBsZXRlbHkgc2tpcCB0aGVtIGluIHRo
ZSBwYXRjaGluZyBwcm9jZXNzLlxuICovXG5mdW5jdGlvbiBvcHRpbWl6ZSAocm9vdCwgb3B0aW9u
cykge1xuICBpZiAoIXJvb3QpIHsgcmV0dXJuIH1cbiAgaXNTdGF0aWNLZXkgPSBnZW5TdGF0aWNL
ZXlzQ2FjaGVkKG9wdGlvbnMuc3RhdGljS2V5cyB8fCAnJyk7XG4gIGlzUGxhdGZvcm1SZXNlcnZl
ZFRhZyA9IG9wdGlvbnMuaXNSZXNlcnZlZFRhZyB8fCBubztcbiAgLy8gZmlyc3QgcGFzczogbWFy
ayBhbGwgbm9uLXN0YXRpYyBub2Rlcy5cbiAgbWFya1N0YXRpYyQxKHJvb3QpO1xuICAvLyBzZWNv
bmQgcGFzczogbWFyayBzdGF0aWMgcm9vdHMuXG4gIG1hcmtTdGF0aWNSb290cyhyb290LCBmYWxz
ZSk7XG59XG5cbmZ1bmN0aW9uIGdlblN0YXRpY0tleXMkMSAoa2V5cykge1xuICByZXR1cm4gbWFr
ZU1hcChcbiAgICAndHlwZSx0YWcsYXR0cnNMaXN0LGF0dHJzTWFwLHBsYWluLHBhcmVudCxjaGls
ZHJlbixhdHRycycgK1xuICAgIChrZXlzID8gJywnICsga2V5cyA6ICcnKVxuICApXG59XG5cbmZ1
bmN0aW9uIG1hcmtTdGF0aWMkMSAobm9kZSkge1xuICBub2RlLnN0YXRpYyA9IGlzU3RhdGljKG5v
ZGUpO1xuICBpZiAobm9kZS50eXBlID09PSAxKSB7XG4gICAgLy8gZG8gbm90IG1ha2UgY29tcG9u
ZW50IHNsb3QgY29udGVudCBzdGF0aWMuIHRoaXMgYXZvaWRzXG4gICAgLy8gMS4gY29tcG9uZW50
cyBub3QgYWJsZSB0byBtdXRhdGUgc2xvdCBub2Rlc1xuICAgIC8vIDIuIHN0YXRpYyBzbG90IGNv
bnRlbnQgZmFpbHMgZm9yIGhvdC1yZWxvYWRpbmdcbiAgICBpZiAoXG4gICAgICAhaXNQbGF0Zm9y
bVJlc2VydmVkVGFnKG5vZGUudGFnKSAmJlxuICAgICAgbm9kZS50YWcgIT09ICdzbG90JyAmJlxu
ICAgICAgbm9kZS5hdHRyc01hcFsnaW5saW5lLXRlbXBsYXRlJ10gPT0gbnVsbFxuICAgICkge1xu
ICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gbm9kZS5jaGlsZHJl
bi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBjaGlsZCA9IG5vZGUuY2hpbGRyZW5b
aV07XG4gICAgICBtYXJrU3RhdGljJDEoY2hpbGQpO1xuICAgICAgaWYgKCFjaGlsZC5zdGF0aWMp
IHtcbiAgICAgICAgbm9kZS5zdGF0aWMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYg
KG5vZGUuaWZDb25kaXRpb25zKSB7XG4gICAgICBmb3IgKHZhciBpJDEgPSAxLCBsJDEgPSBub2Rl
LmlmQ29uZGl0aW9ucy5sZW5ndGg7IGkkMSA8IGwkMTsgaSQxKyspIHtcbiAgICAgICAgdmFyIGJs
b2NrID0gbm9kZS5pZkNvbmRpdGlvbnNbaSQxXS5ibG9jaztcbiAgICAgICAgbWFya1N0YXRpYyQx
KGJsb2NrKTtcbiAgICAgICAgaWYgKCFibG9jay5zdGF0aWMpIHtcbiAgICAgICAgICBub2RlLnN0
YXRpYyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0
aW9uIG1hcmtTdGF0aWNSb290cyAobm9kZSwgaXNJbkZvcikge1xuICBpZiAobm9kZS50eXBlID09
PSAxKSB7XG4gICAgaWYgKG5vZGUuc3RhdGljIHx8IG5vZGUub25jZSkge1xuICAgICAgbm9kZS5z
dGF0aWNJbkZvciA9IGlzSW5Gb3I7XG4gICAgfVxuICAgIC8vIEZvciBhIG5vZGUgdG8gcXVhbGlm
eSBhcyBhIHN0YXRpYyByb290LCBpdCBzaG91bGQgaGF2ZSBjaGlsZHJlbiB0aGF0XG4gICAgLy8g
YXJlIG5vdCBqdXN0IHN0YXRpYyB0ZXh0LiBPdGhlcndpc2UgdGhlIGNvc3Qgb2YgaG9pc3Rpbmcg
b3V0IHdpbGxcbiAgICAvLyBvdXR3ZWlnaCB0aGUgYmVuZWZpdHMgYW5kIGl0J3MgYmV0dGVyIG9m
ZiB0byBqdXN0IGFsd2F5cyByZW5kZXIgaXQgZnJlc2guXG4gICAgaWYgKG5vZGUuc3RhdGljICYm
IG5vZGUuY2hpbGRyZW4ubGVuZ3RoICYmICEoXG4gICAgICBub2RlLmNoaWxkcmVuLmxlbmd0aCA9
PT0gMSAmJlxuICAgICAgbm9kZS5jaGlsZHJlblswXS50eXBlID09PSAzXG4gICAgKSkge1xuICAg
ICAgbm9kZS5zdGF0aWNSb290ID0gdHJ1ZTtcbiAgICAgIHJldHVyblxuICAgIH0gZWxzZSB7XG4g
ICAgICBub2RlLnN0YXRpY1Jvb3QgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKG5vZGUuY2hpbGRy
ZW4pIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gbm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkg
PCBsOyBpKyspIHtcbiAgICAgICAgbWFya1N0YXRpY1Jvb3RzKG5vZGUuY2hpbGRyZW5baV0sIGlz
SW5Gb3IgfHwgISFub2RlLmZvcik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChub2RlLmlmQ29u
ZGl0aW9ucykge1xuICAgICAgZm9yICh2YXIgaSQxID0gMSwgbCQxID0gbm9kZS5pZkNvbmRpdGlv
bnMubGVuZ3RoOyBpJDEgPCBsJDE7IGkkMSsrKSB7XG4gICAgICAgIG1hcmtTdGF0aWNSb290cyhu
b2RlLmlmQ29uZGl0aW9uc1tpJDFdLmJsb2NrLCBpc0luRm9yKTtcbiAgICAgIH1cbiAgICB9XG4g
IH1cbn1cblxuZnVuY3Rpb24gaXNTdGF0aWMgKG5vZGUpIHtcbiAgaWYgKG5vZGUudHlwZSA9PT0g
MikgeyAvLyBleHByZXNzaW9uXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgaWYgKG5vZGUudHlw
ZSA9PT0gMykgeyAvLyB0ZXh0XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gISEobm9k
ZS5wcmUgfHwgKFxuICAgICFub2RlLmhhc0JpbmRpbmdzICYmIC8vIG5vIGR5bmFtaWMgYmluZGlu
Z3NcbiAgICAhbm9kZS5pZiAmJiAhbm9kZS5mb3IgJiYgLy8gbm90IHYtaWYgb3Igdi1mb3Igb3Ig
di1lbHNlXG4gICAgIWlzQnVpbHRJblRhZyhub2RlLnRhZykgJiYgLy8gbm90IGEgYnVpbHQtaW5c
biAgICBpc1BsYXRmb3JtUmVzZXJ2ZWRUYWcobm9kZS50YWcpICYmIC8vIG5vdCBhIGNvbXBvbmVu
dFxuICAgICFpc0RpcmVjdENoaWxkT2ZUZW1wbGF0ZUZvcihub2RlKSAmJlxuICAgIE9iamVjdC5r
ZXlzKG5vZGUpLmV2ZXJ5KGlzU3RhdGljS2V5KVxuICApKVxufVxuXG5mdW5jdGlvbiBpc0RpcmVj
dENoaWxkT2ZUZW1wbGF0ZUZvciAobm9kZSkge1xuICB3aGlsZSAobm9kZS5wYXJlbnQpIHtcbiAg
ICBub2RlID0gbm9kZS5wYXJlbnQ7XG4gICAgaWYgKG5vZGUudGFnICE9PSAndGVtcGxhdGUnKSB7
XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgaWYgKG5vZGUuZm9yKSB7XG4gICAgICBy
ZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyogICovXG5cbnZh
ciBmbkV4cFJFID0gL15cXHMqKFtcXHckX10rfFxcKFteKV0qP1xcKSlcXHMqPT58XmZ1bmN0aW9u
XFxzKlxcKC87XG52YXIgc2ltcGxlUGF0aFJFID0gL15cXHMqW0EtWmEtel8kXVtcXHckXSooPzpc
XC5bQS1aYS16XyRdW1xcdyRdKnxcXFsnLio/J118XFxbXCIuKj9cIl18XFxbXFxkK118XFxbW0Et
WmEtel8kXVtcXHckXSpdKSpcXHMqJC87XG5cbi8vIGtleUNvZGUgYWxpYXNlc1xudmFyIGtleUNv
ZGVzID0ge1xuICBlc2M6IDI3LFxuICB0YWI6IDksXG4gIGVudGVyOiAxMyxcbiAgc3BhY2U6IDMy
LFxuICB1cDogMzgsXG4gIGxlZnQ6IDM3LFxuICByaWdodDogMzksXG4gIGRvd246IDQwLFxuICAn
ZGVsZXRlJzogWzgsIDQ2XVxufTtcblxuLy8gIzQ4Njg6IG1vZGlmaWVycyB0aGF0IHByZXZlbnQg
dGhlIGV4ZWN1dGlvbiBvZiB0aGUgbGlzdGVuZXJcbi8vIG5lZWQgdG8gZXhwbGljaXRseSByZXR1
cm4gbnVsbCBzbyB0aGF0IHdlIGNhbiBkZXRlcm1pbmUgd2hldGhlciB0byByZW1vdmVcbi8vIHRo
ZSBsaXN0ZW5lciBmb3IgLm9uY2VcbnZhciBnZW5HdWFyZCA9IGZ1bmN0aW9uIChjb25kaXRpb24p
IHsgcmV0dXJuIChcImlmKFwiICsgY29uZGl0aW9uICsgXCIpcmV0dXJuIG51bGw7XCIpOyB9O1xu
XG52YXIgbW9kaWZpZXJDb2RlID0ge1xuICBzdG9wOiAnJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigp
OycsXG4gIHByZXZlbnQ6ICckZXZlbnQucHJldmVudERlZmF1bHQoKTsnLFxuICBzZWxmOiBnZW5H
dWFyZChcIiRldmVudC50YXJnZXQgIT09ICRldmVudC5jdXJyZW50VGFyZ2V0XCIpLFxuICBjdHJs
OiBnZW5HdWFyZChcIiEkZXZlbnQuY3RybEtleVwiKSxcbiAgc2hpZnQ6IGdlbkd1YXJkKFwiISRl
dmVudC5zaGlmdEtleVwiKSxcbiAgYWx0OiBnZW5HdWFyZChcIiEkZXZlbnQuYWx0S2V5XCIpLFxu
ICBtZXRhOiBnZW5HdWFyZChcIiEkZXZlbnQubWV0YUtleVwiKSxcbiAgbGVmdDogZ2VuR3VhcmQo
XCInYnV0dG9uJyBpbiAkZXZlbnQgJiYgJGV2ZW50LmJ1dHRvbiAhPT0gMFwiKSxcbiAgbWlkZGxl
OiBnZW5HdWFyZChcIididXR0b24nIGluICRldmVudCAmJiAkZXZlbnQuYnV0dG9uICE9PSAxXCIp
LFxuICByaWdodDogZ2VuR3VhcmQoXCInYnV0dG9uJyBpbiAkZXZlbnQgJiYgJGV2ZW50LmJ1dHRv
biAhPT0gMlwiKVxufTtcblxuZnVuY3Rpb24gZ2VuSGFuZGxlcnMgKFxuICBldmVudHMsXG4gIGlz
TmF0aXZlLFxuICB3YXJuXG4pIHtcbiAgdmFyIHJlcyA9IGlzTmF0aXZlID8gJ25hdGl2ZU9uOnsn
IDogJ29uOnsnO1xuICBmb3IgKHZhciBuYW1lIGluIGV2ZW50cykge1xuICAgIHZhciBoYW5kbGVy
ID0gZXZlbnRzW25hbWVdO1xuICAgIC8vICM1MzMwOiB3YXJuIGNsaWNrLnJpZ2h0LCBzaW5jZSBy
aWdodCBjbGlja3MgZG8gbm90IGFjdHVhbGx5IGZpcmUgY2xpY2sgZXZlbnRzLlxuICAgIGlmIChw
cm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICBuYW1lID09PSAn
Y2xpY2snICYmXG4gICAgICBoYW5kbGVyICYmIGhhbmRsZXIubW9kaWZpZXJzICYmIGhhbmRsZXIu
bW9kaWZpZXJzLnJpZ2h0XG4gICAgKSB7XG4gICAgICB3YXJuKFxuICAgICAgICBcIlVzZSBcXFwi
Y29udGV4dG1lbnVcXFwiIGluc3RlYWQgb2YgXFxcImNsaWNrLnJpZ2h0XFxcIiBzaW5jZSByaWdo
dCBjbGlja3MgXCIgK1xuICAgICAgICBcImRvIG5vdCBhY3R1YWxseSBmaXJlIFxcXCJjbGlja1xc
XCIgZXZlbnRzLlwiXG4gICAgICApO1xuICAgIH1cbiAgICByZXMgKz0gXCJcXFwiXCIgKyBuYW1l
ICsgXCJcXFwiOlwiICsgKGdlbkhhbmRsZXIobmFtZSwgaGFuZGxlcikpICsgXCIsXCI7XG4gIH1c
biAgcmV0dXJuIHJlcy5zbGljZSgwLCAtMSkgKyAnfSdcbn1cblxuZnVuY3Rpb24gZ2VuSGFuZGxl
ciAoXG4gIG5hbWUsXG4gIGhhbmRsZXJcbikge1xuICBpZiAoIWhhbmRsZXIpIHtcbiAgICByZXR1
cm4gJ2Z1bmN0aW9uKCl7fSdcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KGhhbmRsZXIpKSB7
XG4gICAgcmV0dXJuIChcIltcIiArIChoYW5kbGVyLm1hcChmdW5jdGlvbiAoaGFuZGxlcikgeyBy
ZXR1cm4gZ2VuSGFuZGxlcihuYW1lLCBoYW5kbGVyKTsgfSkuam9pbignLCcpKSArIFwiXVwiKVxu
ICB9XG5cbiAgdmFyIGlzTWV0aG9kUGF0aCA9IHNpbXBsZVBhdGhSRS50ZXN0KGhhbmRsZXIudmFs
dWUpO1xuICB2YXIgaXNGdW5jdGlvbkV4cHJlc3Npb24gPSBmbkV4cFJFLnRlc3QoaGFuZGxlci52
YWx1ZSk7XG5cbiAgaWYgKCFoYW5kbGVyLm1vZGlmaWVycykge1xuICAgIHJldHVybiBpc01ldGhv
ZFBhdGggfHwgaXNGdW5jdGlvbkV4cHJlc3Npb25cbiAgICAgID8gaGFuZGxlci52YWx1ZVxuICAg
ICAgOiAoXCJmdW5jdGlvbigkZXZlbnQpe1wiICsgKGhhbmRsZXIudmFsdWUpICsgXCJ9XCIpIC8v
IGlubGluZSBzdGF0ZW1lbnRcbiAgfSBlbHNlIHtcbiAgICB2YXIgY29kZSA9ICcnO1xuICAgIHZh
ciBnZW5Nb2RpZmllckNvZGUgPSAnJztcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFy
IGtleSBpbiBoYW5kbGVyLm1vZGlmaWVycykge1xuICAgICAgaWYgKG1vZGlmaWVyQ29kZVtrZXld
KSB7XG4gICAgICAgIGdlbk1vZGlmaWVyQ29kZSArPSBtb2RpZmllckNvZGVba2V5XTtcbiAgICAg
ICAgLy8gbGVmdC9yaWdodFxuICAgICAgICBpZiAoa2V5Q29kZXNba2V5XSkge1xuICAgICAgICAg
IGtleXMucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBrZXlz
LnB1c2goa2V5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGtleXMubGVuZ3RoKSB7XG4gICAg
ICBjb2RlICs9IGdlbktleUZpbHRlcihrZXlzKTtcbiAgICB9XG4gICAgLy8gTWFrZSBzdXJlIG1v
ZGlmaWVycyBsaWtlIHByZXZlbnQgYW5kIHN0b3AgZ2V0IGV4ZWN1dGVkIGFmdGVyIGtleSBmaWx0
ZXJpbmdcbiAgICBpZiAoZ2VuTW9kaWZpZXJDb2RlKSB7XG4gICAgICBjb2RlICs9IGdlbk1vZGlm
aWVyQ29kZTtcbiAgICB9XG4gICAgdmFyIGhhbmRsZXJDb2RlID0gaXNNZXRob2RQYXRoXG4gICAg
ICA/IGhhbmRsZXIudmFsdWUgKyAnKCRldmVudCknXG4gICAgICA6IGlzRnVuY3Rpb25FeHByZXNz
aW9uXG4gICAgICAgID8gKFwiKFwiICsgKGhhbmRsZXIudmFsdWUpICsgXCIpKCRldmVudClcIilc
biAgICAgICAgOiBoYW5kbGVyLnZhbHVlO1xuICAgIHJldHVybiAoXCJmdW5jdGlvbigkZXZlbnQp
e1wiICsgY29kZSArIGhhbmRsZXJDb2RlICsgXCJ9XCIpXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2Vu
S2V5RmlsdGVyIChrZXlzKSB7XG4gIHJldHVybiAoXCJpZighKCdidXR0b24nIGluICRldmVudCkm
JlwiICsgKGtleXMubWFwKGdlbkZpbHRlckNvZGUpLmpvaW4oJyYmJykpICsgXCIpcmV0dXJuIG51
bGw7XCIpXG59XG5cbmZ1bmN0aW9uIGdlbkZpbHRlckNvZGUgKGtleSkge1xuICB2YXIga2V5VmFs
ID0gcGFyc2VJbnQoa2V5LCAxMCk7XG4gIGlmIChrZXlWYWwpIHtcbiAgICByZXR1cm4gKFwiJGV2
ZW50LmtleUNvZGUhPT1cIiArIGtleVZhbClcbiAgfVxuICB2YXIgYWxpYXMgPSBrZXlDb2Rlc1tr
ZXldO1xuICByZXR1cm4gKFwiX2soJGV2ZW50LmtleUNvZGUsXCIgKyAoSlNPTi5zdHJpbmdpZnko
a2V5KSkgKyAoYWxpYXMgPyAnLCcgKyBKU09OLnN0cmluZ2lmeShhbGlhcykgOiAnJykgKyBcIilc
Iilcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIG9uIChlbCwgZGlyKSB7XG4gIGlmIChwcm9jZXNz
LmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGRpci5tb2RpZmllcnMpIHtcbiAgICB3
YXJuKFwidi1vbiB3aXRob3V0IGFyZ3VtZW50IGRvZXMgbm90IHN1cHBvcnQgbW9kaWZpZXJzLlwi
KTtcbiAgfVxuICBlbC53cmFwTGlzdGVuZXJzID0gZnVuY3Rpb24gKGNvZGUpIHsgcmV0dXJuIChc
Il9nKFwiICsgY29kZSArIFwiLFwiICsgKGRpci52YWx1ZSkgKyBcIilcIik7IH07XG59XG5cbi8q
ICAqL1xuXG5mdW5jdGlvbiBiaW5kJDEgKGVsLCBkaXIpIHtcbiAgZWwud3JhcERhdGEgPSBmdW5j
dGlvbiAoY29kZSkge1xuICAgIHJldHVybiAoXCJfYihcIiArIGNvZGUgKyBcIiwnXCIgKyAoZWwu
dGFnKSArIFwiJyxcIiArIChkaXIudmFsdWUpICsgXCIsXCIgKyAoZGlyLm1vZGlmaWVycyAmJiBk
aXIubW9kaWZpZXJzLnByb3AgPyAndHJ1ZScgOiAnZmFsc2UnKSArIChkaXIubW9kaWZpZXJzICYm
IGRpci5tb2RpZmllcnMuc3luYyA/ICcsdHJ1ZScgOiAnJykgKyBcIilcIilcbiAgfTtcbn1cblxu
LyogICovXG5cbnZhciBiYXNlRGlyZWN0aXZlcyA9IHtcbiAgb246IG9uLFxuICBiaW5kOiBiaW5k
JDEsXG4gIGNsb2FrOiBub29wXG59O1xuXG4vKiAgKi9cblxudmFyIENvZGVnZW5TdGF0ZSA9IGZ1
bmN0aW9uIENvZGVnZW5TdGF0ZSAob3B0aW9ucykge1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25z
O1xuICB0aGlzLndhcm4gPSBvcHRpb25zLndhcm4gfHwgYmFzZVdhcm47XG4gIHRoaXMudHJhbnNm
b3JtcyA9IHBsdWNrTW9kdWxlRnVuY3Rpb24ob3B0aW9ucy5tb2R1bGVzLCAndHJhbnNmb3JtQ29k
ZScpO1xuICB0aGlzLmRhdGFHZW5GbnMgPSBwbHVja01vZHVsZUZ1bmN0aW9uKG9wdGlvbnMubW9k
dWxlcywgJ2dlbkRhdGEnKTtcbiAgdGhpcy5kaXJlY3RpdmVzID0gZXh0ZW5kKGV4dGVuZCh7fSwg
YmFzZURpcmVjdGl2ZXMpLCBvcHRpb25zLmRpcmVjdGl2ZXMpO1xuICB2YXIgaXNSZXNlcnZlZFRh
ZyA9IG9wdGlvbnMuaXNSZXNlcnZlZFRhZyB8fCBubztcbiAgdGhpcy5tYXliZUNvbXBvbmVudCA9
IGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gIWlzUmVzZXJ2ZWRUYWcoZWwudGFnKTsgfTtcbiAgdGhp
cy5vbmNlSWQgPSAwO1xuICB0aGlzLnN0YXRpY1JlbmRlckZucyA9IFtdO1xufTtcblxuXG5cbmZ1
bmN0aW9uIGdlbmVyYXRlIChcbiAgYXN0LFxuICBvcHRpb25zXG4pIHtcbiAgdmFyIHN0YXRlID0g
bmV3IENvZGVnZW5TdGF0ZShvcHRpb25zKTtcbiAgdmFyIGNvZGUgPSBhc3QgPyBnZW5FbGVtZW50
KGFzdCwgc3RhdGUpIDogJ19jKFwiZGl2XCIpJztcbiAgcmV0dXJuIHtcbiAgICByZW5kZXI6IChc
IndpdGgodGhpcyl7cmV0dXJuIFwiICsgY29kZSArIFwifVwiKSxcbiAgICBzdGF0aWNSZW5kZXJG
bnM6IHN0YXRlLnN0YXRpY1JlbmRlckZuc1xuICB9XG59XG5cbmZ1bmN0aW9uIGdlbkVsZW1lbnQg
KGVsLCBzdGF0ZSkge1xuICBpZiAoZWwuc3RhdGljUm9vdCAmJiAhZWwuc3RhdGljUHJvY2Vzc2Vk
KSB7XG4gICAgcmV0dXJuIGdlblN0YXRpYyhlbCwgc3RhdGUpXG4gIH0gZWxzZSBpZiAoZWwub25j
ZSAmJiAhZWwub25jZVByb2Nlc3NlZCkge1xuICAgIHJldHVybiBnZW5PbmNlKGVsLCBzdGF0ZSlc
biAgfSBlbHNlIGlmIChlbC5mb3IgJiYgIWVsLmZvclByb2Nlc3NlZCkge1xuICAgIHJldHVybiBn
ZW5Gb3IoZWwsIHN0YXRlKVxuICB9IGVsc2UgaWYgKGVsLmlmICYmICFlbC5pZlByb2Nlc3NlZCkg
e1xuICAgIHJldHVybiBnZW5JZihlbCwgc3RhdGUpXG4gIH0gZWxzZSBpZiAoZWwudGFnID09PSAn
dGVtcGxhdGUnICYmICFlbC5zbG90VGFyZ2V0KSB7XG4gICAgcmV0dXJuIGdlbkNoaWxkcmVuKGVs
LCBzdGF0ZSkgfHwgJ3ZvaWQgMCdcbiAgfSBlbHNlIGlmIChlbC50YWcgPT09ICdzbG90Jykge1xu
ICAgIHJldHVybiBnZW5TbG90KGVsLCBzdGF0ZSlcbiAgfSBlbHNlIHtcbiAgICAvLyBjb21wb25l
bnQgb3IgZWxlbWVudFxuICAgIHZhciBjb2RlO1xuICAgIGlmIChlbC5jb21wb25lbnQpIHtcbiAg
ICAgIGNvZGUgPSBnZW5Db21wb25lbnQoZWwuY29tcG9uZW50LCBlbCwgc3RhdGUpO1xuICAgIH0g
ZWxzZSB7XG4gICAgICB2YXIgZGF0YSA9IGVsLnBsYWluID8gdW5kZWZpbmVkIDogZ2VuRGF0YSQy
KGVsLCBzdGF0ZSk7XG5cbiAgICAgIHZhciBjaGlsZHJlbiA9IGVsLmlubGluZVRlbXBsYXRlID8g
bnVsbCA6IGdlbkNoaWxkcmVuKGVsLCBzdGF0ZSwgdHJ1ZSk7XG4gICAgICBjb2RlID0gXCJfYygn
XCIgKyAoZWwudGFnKSArIFwiJ1wiICsgKGRhdGEgPyAoXCIsXCIgKyBkYXRhKSA6ICcnKSArIChj
aGlsZHJlbiA/IChcIixcIiArIGNoaWxkcmVuKSA6ICcnKSArIFwiKVwiO1xuICAgIH1cbiAgICAv
LyBtb2R1bGUgdHJhbnNmb3Jtc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdGUudHJhbnNm
b3Jtcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29kZSA9IHN0YXRlLnRyYW5zZm9ybXNbaV0oZWws
IGNvZGUpO1xuICAgIH1cbiAgICByZXR1cm4gY29kZVxuICB9XG59XG5cbi8vIGhvaXN0IHN0YXRp
YyBzdWItdHJlZXMgb3V0XG5mdW5jdGlvbiBnZW5TdGF0aWMgKGVsLCBzdGF0ZSkge1xuICBlbC5z
dGF0aWNQcm9jZXNzZWQgPSB0cnVlO1xuICBzdGF0ZS5zdGF0aWNSZW5kZXJGbnMucHVzaCgoXCJ3
aXRoKHRoaXMpe3JldHVybiBcIiArIChnZW5FbGVtZW50KGVsLCBzdGF0ZSkpICsgXCJ9XCIpKTtc
biAgcmV0dXJuIChcIl9tKFwiICsgKHN0YXRlLnN0YXRpY1JlbmRlckZucy5sZW5ndGggLSAxKSAr
IChlbC5zdGF0aWNJbkZvciA/ICcsdHJ1ZScgOiAnJykgKyBcIilcIilcbn1cblxuLy8gdi1vbmNl
XG5mdW5jdGlvbiBnZW5PbmNlIChlbCwgc3RhdGUpIHtcbiAgZWwub25jZVByb2Nlc3NlZCA9IHRy
dWU7XG4gIGlmIChlbC5pZiAmJiAhZWwuaWZQcm9jZXNzZWQpIHtcbiAgICByZXR1cm4gZ2VuSWYo
ZWwsIHN0YXRlKVxuICB9IGVsc2UgaWYgKGVsLnN0YXRpY0luRm9yKSB7XG4gICAgdmFyIGtleSA9
ICcnO1xuICAgIHZhciBwYXJlbnQgPSBlbC5wYXJlbnQ7XG4gICAgd2hpbGUgKHBhcmVudCkge1xu
ICAgICAgaWYgKHBhcmVudC5mb3IpIHtcbiAgICAgICAga2V5ID0gcGFyZW50LmtleTtcbiAgICAg
ICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gICAgfVxu
ICAgIGlmICgha2V5KSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rp
b24nICYmIHN0YXRlLndhcm4oXG4gICAgICAgIFwidi1vbmNlIGNhbiBvbmx5IGJlIHVzZWQgaW5z
aWRlIHYtZm9yIHRoYXQgaXMga2V5ZWQuIFwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIGdlbkVs
ZW1lbnQoZWwsIHN0YXRlKVxuICAgIH1cbiAgICByZXR1cm4gKFwiX28oXCIgKyAoZ2VuRWxlbWVu
dChlbCwgc3RhdGUpKSArIFwiLFwiICsgKHN0YXRlLm9uY2VJZCsrKSArIChrZXkgPyAoXCIsXCIg
KyBrZXkpIDogXCJcIikgKyBcIilcIilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZ2VuU3RhdGlj
KGVsLCBzdGF0ZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBnZW5JZiAoXG4gIGVsLFxuICBzdGF0ZSxc
biAgYWx0R2VuLFxuICBhbHRFbXB0eVxuKSB7XG4gIGVsLmlmUHJvY2Vzc2VkID0gdHJ1ZTsgLy8g
YXZvaWQgcmVjdXJzaW9uXG4gIHJldHVybiBnZW5JZkNvbmRpdGlvbnMoZWwuaWZDb25kaXRpb25z
LnNsaWNlKCksIHN0YXRlLCBhbHRHZW4sIGFsdEVtcHR5KVxufVxuXG5mdW5jdGlvbiBnZW5JZkNv
bmRpdGlvbnMgKFxuICBjb25kaXRpb25zLFxuICBzdGF0ZSxcbiAgYWx0R2VuLFxuICBhbHRFbXB0
eVxuKSB7XG4gIGlmICghY29uZGl0aW9ucy5sZW5ndGgpIHtcbiAgICByZXR1cm4gYWx0RW1wdHkg
fHwgJ19lKCknXG4gIH1cblxuICB2YXIgY29uZGl0aW9uID0gY29uZGl0aW9ucy5zaGlmdCgpO1xu
ICBpZiAoY29uZGl0aW9uLmV4cCkge1xuICAgIHJldHVybiAoXCIoXCIgKyAoY29uZGl0aW9uLmV4
cCkgKyBcIik/XCIgKyAoZ2VuVGVybmFyeUV4cChjb25kaXRpb24uYmxvY2spKSArIFwiOlwiICsg
KGdlbklmQ29uZGl0aW9ucyhjb25kaXRpb25zLCBzdGF0ZSwgYWx0R2VuLCBhbHRFbXB0eSkpKVxu
ICB9IGVsc2Uge1xuICAgIHJldHVybiAoXCJcIiArIChnZW5UZXJuYXJ5RXhwKGNvbmRpdGlvbi5i
bG9jaykpKVxuICB9XG5cbiAgLy8gdi1pZiB3aXRoIHYtb25jZSBzaG91bGQgZ2VuZXJhdGUgY29k
ZSBsaWtlIChhKT9fbSgwKTpfbSgxKVxuICBmdW5jdGlvbiBnZW5UZXJuYXJ5RXhwIChlbCkge1xu
ICAgIHJldHVybiBhbHRHZW5cbiAgICAgID8gYWx0R2VuKGVsLCBzdGF0ZSlcbiAgICAgIDogZWwu
b25jZVxuICAgICAgICA/IGdlbk9uY2UoZWwsIHN0YXRlKVxuICAgICAgICA6IGdlbkVsZW1lbnQo
ZWwsIHN0YXRlKVxuICB9XG59XG5cbmZ1bmN0aW9uIGdlbkZvciAoXG4gIGVsLFxuICBzdGF0ZSxc
biAgYWx0R2VuLFxuICBhbHRIZWxwZXJcbikge1xuICB2YXIgZXhwID0gZWwuZm9yO1xuICB2YXIg
YWxpYXMgPSBlbC5hbGlhcztcbiAgdmFyIGl0ZXJhdG9yMSA9IGVsLml0ZXJhdG9yMSA/IChcIixc
IiArIChlbC5pdGVyYXRvcjEpKSA6ICcnO1xuICB2YXIgaXRlcmF0b3IyID0gZWwuaXRlcmF0b3Iy
ID8gKFwiLFwiICsgKGVsLml0ZXJhdG9yMikpIDogJyc7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5P
REVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICBzdGF0ZS5tYXliZUNvbXBvbmVudChlbCkg
JiZcbiAgICBlbC50YWcgIT09ICdzbG90JyAmJlxuICAgIGVsLnRhZyAhPT0gJ3RlbXBsYXRlJyAm
JlxuICAgICFlbC5rZXlcbiAgKSB7XG4gICAgc3RhdGUud2FybihcbiAgICAgIFwiPFwiICsgKGVs
LnRhZykgKyBcIiB2LWZvcj1cXFwiXCIgKyBhbGlhcyArIFwiIGluIFwiICsgZXhwICsgXCJcXFwi
PjogY29tcG9uZW50IGxpc3RzIHJlbmRlcmVkIHdpdGggXCIgK1xuICAgICAgXCJ2LWZvciBzaG91
bGQgaGF2ZSBleHBsaWNpdCBrZXlzLiBcIiArXG4gICAgICBcIlNlZSBodHRwczovL3Z1ZWpzLm9y
Zy9ndWlkZS9saXN0Lmh0bWwja2V5IGZvciBtb3JlIGluZm8uXCIsXG4gICAgICB0cnVlIC8qIHRp
cCAqL1xuICAgICk7XG4gIH1cblxuICBlbC5mb3JQcm9jZXNzZWQgPSB0cnVlOyAvLyBhdm9pZCBy
ZWN1cnNpb25cbiAgcmV0dXJuIChhbHRIZWxwZXIgfHwgJ19sJykgKyBcIigoXCIgKyBleHAgKyBc
IiksXCIgK1xuICAgIFwiZnVuY3Rpb24oXCIgKyBhbGlhcyArIGl0ZXJhdG9yMSArIGl0ZXJhdG9y
MiArIFwiKXtcIiArXG4gICAgICBcInJldHVybiBcIiArICgoYWx0R2VuIHx8IGdlbkVsZW1lbnQp
KGVsLCBzdGF0ZSkpICtcbiAgICAnfSknXG59XG5cbmZ1bmN0aW9uIGdlbkRhdGEkMiAoZWwsIHN0
YXRlKSB7XG4gIHZhciBkYXRhID0gJ3snO1xuXG4gIC8vIGRpcmVjdGl2ZXMgZmlyc3QuXG4gIC8v
IGRpcmVjdGl2ZXMgbWF5IG11dGF0ZSB0aGUgZWwncyBvdGhlciBwcm9wZXJ0aWVzIGJlZm9yZSB0
aGV5IGFyZSBnZW5lcmF0ZWQuXG4gIHZhciBkaXJzID0gZ2VuRGlyZWN0aXZlcyhlbCwgc3RhdGUp
O1xuICBpZiAoZGlycykgeyBkYXRhICs9IGRpcnMgKyAnLCc7IH1cblxuICAvLyBrZXlcbiAgaWYg
KGVsLmtleSkge1xuICAgIGRhdGEgKz0gXCJrZXk6XCIgKyAoZWwua2V5KSArIFwiLFwiO1xuICB9
XG4gIC8vIHJlZlxuICBpZiAoZWwucmVmKSB7XG4gICAgZGF0YSArPSBcInJlZjpcIiArIChlbC5y
ZWYpICsgXCIsXCI7XG4gIH1cbiAgaWYgKGVsLnJlZkluRm9yKSB7XG4gICAgZGF0YSArPSBcInJl
ZkluRm9yOnRydWUsXCI7XG4gIH1cbiAgLy8gcHJlXG4gIGlmIChlbC5wcmUpIHtcbiAgICBkYXRh
ICs9IFwicHJlOnRydWUsXCI7XG4gIH1cbiAgLy8gcmVjb3JkIG9yaWdpbmFsIHRhZyBuYW1lIGZv
ciBjb21wb25lbnRzIHVzaW5nIFwiaXNcIiBhdHRyaWJ1dGVcbiAgaWYgKGVsLmNvbXBvbmVudCkg
e1xuICAgIGRhdGEgKz0gXCJ0YWc6XFxcIlwiICsgKGVsLnRhZykgKyBcIlxcXCIsXCI7XG4gIH1c
biAgLy8gbW9kdWxlIGRhdGEgZ2VuZXJhdGlvbiBmdW5jdGlvbnNcbiAgZm9yICh2YXIgaSA9IDA7
IGkgPCBzdGF0ZS5kYXRhR2VuRm5zLmxlbmd0aDsgaSsrKSB7XG4gICAgZGF0YSArPSBzdGF0ZS5k
YXRhR2VuRm5zW2ldKGVsKTtcbiAgfVxuICAvLyBhdHRyaWJ1dGVzXG4gIGlmIChlbC5hdHRycykg
e1xuICAgIGRhdGEgKz0gXCJhdHRyczp7XCIgKyAoZ2VuUHJvcHMoZWwuYXR0cnMpKSArIFwifSxc
IjtcbiAgfVxuICAvLyBET00gcHJvcHNcbiAgaWYgKGVsLnByb3BzKSB7XG4gICAgZGF0YSArPSBc
ImRvbVByb3BzOntcIiArIChnZW5Qcm9wcyhlbC5wcm9wcykpICsgXCJ9LFwiO1xuICB9XG4gIC8v
IGV2ZW50IGhhbmRsZXJzXG4gIGlmIChlbC5ldmVudHMpIHtcbiAgICBkYXRhICs9IChnZW5IYW5k
bGVycyhlbC5ldmVudHMsIGZhbHNlLCBzdGF0ZS53YXJuKSkgKyBcIixcIjtcbiAgfVxuICBpZiAo
ZWwubmF0aXZlRXZlbnRzKSB7XG4gICAgZGF0YSArPSAoZ2VuSGFuZGxlcnMoZWwubmF0aXZlRXZl
bnRzLCB0cnVlLCBzdGF0ZS53YXJuKSkgKyBcIixcIjtcbiAgfVxuICAvLyBzbG90IHRhcmdldFxu
ICBpZiAoZWwuc2xvdFRhcmdldCkge1xuICAgIGRhdGEgKz0gXCJzbG90OlwiICsgKGVsLnNsb3RU
YXJnZXQpICsgXCIsXCI7XG4gIH1cbiAgLy8gc2NvcGVkIHNsb3RzXG4gIGlmIChlbC5zY29wZWRT
bG90cykge1xuICAgIGRhdGEgKz0gKGdlblNjb3BlZFNsb3RzKGVsLnNjb3BlZFNsb3RzLCBzdGF0
ZSkpICsgXCIsXCI7XG4gIH1cbiAgLy8gY29tcG9uZW50IHYtbW9kZWxcbiAgaWYgKGVsLm1vZGVs
KSB7XG4gICAgZGF0YSArPSBcIm1vZGVsOnt2YWx1ZTpcIiArIChlbC5tb2RlbC52YWx1ZSkgKyBc
IixjYWxsYmFjazpcIiArIChlbC5tb2RlbC5jYWxsYmFjaykgKyBcIixleHByZXNzaW9uOlwiICsg
KGVsLm1vZGVsLmV4cHJlc3Npb24pICsgXCJ9LFwiO1xuICB9XG4gIC8vIGlubGluZS10ZW1wbGF0
ZVxuICBpZiAoZWwuaW5saW5lVGVtcGxhdGUpIHtcbiAgICB2YXIgaW5saW5lVGVtcGxhdGUgPSBn
ZW5JbmxpbmVUZW1wbGF0ZShlbCwgc3RhdGUpO1xuICAgIGlmIChpbmxpbmVUZW1wbGF0ZSkge1xu
ICAgICAgZGF0YSArPSBpbmxpbmVUZW1wbGF0ZSArIFwiLFwiO1xuICAgIH1cbiAgfVxuICBkYXRh
ID0gZGF0YS5yZXBsYWNlKC8sJC8sICcnKSArICd9JztcbiAgLy8gdi1iaW5kIGRhdGEgd3JhcFxu
ICBpZiAoZWwud3JhcERhdGEpIHtcbiAgICBkYXRhID0gZWwud3JhcERhdGEoZGF0YSk7XG4gIH1c
biAgLy8gdi1vbiBkYXRhIHdyYXBcbiAgaWYgKGVsLndyYXBMaXN0ZW5lcnMpIHtcbiAgICBkYXRh
ID0gZWwud3JhcExpc3RlbmVycyhkYXRhKTtcbiAgfVxuICByZXR1cm4gZGF0YVxufVxuXG5mdW5j
dGlvbiBnZW5EaXJlY3RpdmVzIChlbCwgc3RhdGUpIHtcbiAgdmFyIGRpcnMgPSBlbC5kaXJlY3Rp
dmVzO1xuICBpZiAoIWRpcnMpIHsgcmV0dXJuIH1cbiAgdmFyIHJlcyA9ICdkaXJlY3RpdmVzOlsn
O1xuICB2YXIgaGFzUnVudGltZSA9IGZhbHNlO1xuICB2YXIgaSwgbCwgZGlyLCBuZWVkUnVudGlt
ZTtcbiAgZm9yIChpID0gMCwgbCA9IGRpcnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgZGly
ID0gZGlyc1tpXTtcbiAgICBuZWVkUnVudGltZSA9IHRydWU7XG4gICAgdmFyIGdlbiA9IHN0YXRl
LmRpcmVjdGl2ZXNbZGlyLm5hbWVdO1xuICAgIGlmIChnZW4pIHtcbiAgICAgIC8vIGNvbXBpbGUt
dGltZSBkaXJlY3RpdmUgdGhhdCBtYW5pcHVsYXRlcyBBU1QuXG4gICAgICAvLyByZXR1cm5zIHRy
dWUgaWYgaXQgYWxzbyBuZWVkcyBhIHJ1bnRpbWUgY291bnRlcnBhcnQuXG4gICAgICBuZWVkUnVu
dGltZSA9ICEhZ2VuKGVsLCBkaXIsIHN0YXRlLndhcm4pO1xuICAgIH1cbiAgICBpZiAobmVlZFJ1
bnRpbWUpIHtcbiAgICAgIGhhc1J1bnRpbWUgPSB0cnVlO1xuICAgICAgcmVzICs9IFwie25hbWU6
XFxcIlwiICsgKGRpci5uYW1lKSArIFwiXFxcIixyYXdOYW1lOlxcXCJcIiArIChkaXIucmF3TmFt
ZSkgKyBcIlxcXCJcIiArIChkaXIudmFsdWUgPyAoXCIsdmFsdWU6KFwiICsgKGRpci52YWx1ZSkg
KyBcIiksZXhwcmVzc2lvbjpcIiArIChKU09OLnN0cmluZ2lmeShkaXIudmFsdWUpKSkgOiAnJykg
KyAoZGlyLmFyZyA/IChcIixhcmc6XFxcIlwiICsgKGRpci5hcmcpICsgXCJcXFwiXCIpIDogJycp
ICsgKGRpci5tb2RpZmllcnMgPyAoXCIsbW9kaWZpZXJzOlwiICsgKEpTT04uc3RyaW5naWZ5KGRp
ci5tb2RpZmllcnMpKSkgOiAnJykgKyBcIn0sXCI7XG4gICAgfVxuICB9XG4gIGlmIChoYXNSdW50
aW1lKSB7XG4gICAgcmV0dXJuIHJlcy5zbGljZSgwLCAtMSkgKyAnXSdcbiAgfVxufVxuXG5mdW5j
dGlvbiBnZW5JbmxpbmVUZW1wbGF0ZSAoZWwsIHN0YXRlKSB7XG4gIHZhciBhc3QgPSBlbC5jaGls
ZHJlblswXTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYg
KFxuICAgIGVsLmNoaWxkcmVuLmxlbmd0aCA+IDEgfHwgYXN0LnR5cGUgIT09IDFcbiAgKSkge1xu
ICAgIHN0YXRlLndhcm4oJ0lubGluZS10ZW1wbGF0ZSBjb21wb25lbnRzIG11c3QgaGF2ZSBleGFj
dGx5IG9uZSBjaGlsZCBlbGVtZW50LicpO1xuICB9XG4gIGlmIChhc3QudHlwZSA9PT0gMSkge1xu
ICAgIHZhciBpbmxpbmVSZW5kZXJGbnMgPSBnZW5lcmF0ZShhc3QsIHN0YXRlLm9wdGlvbnMpO1xu
ICAgIHJldHVybiAoXCJpbmxpbmVUZW1wbGF0ZTp7cmVuZGVyOmZ1bmN0aW9uKCl7XCIgKyAoaW5s
aW5lUmVuZGVyRm5zLnJlbmRlcikgKyBcIn0sc3RhdGljUmVuZGVyRm5zOltcIiArIChpbmxpbmVS
ZW5kZXJGbnMuc3RhdGljUmVuZGVyRm5zLm1hcChmdW5jdGlvbiAoY29kZSkgeyByZXR1cm4gKFwi
ZnVuY3Rpb24oKXtcIiArIGNvZGUgKyBcIn1cIik7IH0pLmpvaW4oJywnKSkgKyBcIl19XCIpXG4g
IH1cbn1cblxuZnVuY3Rpb24gZ2VuU2NvcGVkU2xvdHMgKFxuICBzbG90cyxcbiAgc3RhdGVcbikg
e1xuICByZXR1cm4gKFwic2NvcGVkU2xvdHM6X3UoW1wiICsgKE9iamVjdC5rZXlzKHNsb3RzKS5t
YXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuIGdlblNjb3BlZFNsb3Qoa2V5LCBzbG90
c1trZXldLCBzdGF0ZSlcbiAgICB9KS5qb2luKCcsJykpICsgXCJdKVwiKVxufVxuXG5mdW5jdGlv
biBnZW5TY29wZWRTbG90IChcbiAga2V5LFxuICBlbCxcbiAgc3RhdGVcbikge1xuICBpZiAoZWwu
Zm9yICYmICFlbC5mb3JQcm9jZXNzZWQpIHtcbiAgICByZXR1cm4gZ2VuRm9yU2NvcGVkU2xvdChr
ZXksIGVsLCBzdGF0ZSlcbiAgfVxuICByZXR1cm4gXCJ7a2V5OlwiICsga2V5ICsgXCIsZm46ZnVu
Y3Rpb24oXCIgKyAoU3RyaW5nKGVsLmF0dHJzTWFwLnNjb3BlKSkgKyBcIil7XCIgK1xuICAgIFwi
cmV0dXJuIFwiICsgKGVsLnRhZyA9PT0gJ3RlbXBsYXRlJ1xuICAgICAgPyBnZW5DaGlsZHJlbihl
bCwgc3RhdGUpIHx8ICd2b2lkIDAnXG4gICAgICA6IGdlbkVsZW1lbnQoZWwsIHN0YXRlKSkgKyBc
In19XCJcbn1cblxuZnVuY3Rpb24gZ2VuRm9yU2NvcGVkU2xvdCAoXG4gIGtleSxcbiAgZWwsXG4g
IHN0YXRlXG4pIHtcbiAgdmFyIGV4cCA9IGVsLmZvcjtcbiAgdmFyIGFsaWFzID0gZWwuYWxpYXM7
XG4gIHZhciBpdGVyYXRvcjEgPSBlbC5pdGVyYXRvcjEgPyAoXCIsXCIgKyAoZWwuaXRlcmF0b3Ix
KSkgOiAnJztcbiAgdmFyIGl0ZXJhdG9yMiA9IGVsLml0ZXJhdG9yMiA/IChcIixcIiArIChlbC5p
dGVyYXRvcjIpKSA6ICcnO1xuICBlbC5mb3JQcm9jZXNzZWQgPSB0cnVlOyAvLyBhdm9pZCByZWN1
cnNpb25cbiAgcmV0dXJuIFwiX2woKFwiICsgZXhwICsgXCIpLFwiICtcbiAgICBcImZ1bmN0aW9u
KFwiICsgYWxpYXMgKyBpdGVyYXRvcjEgKyBpdGVyYXRvcjIgKyBcIil7XCIgK1xuICAgICAgXCJy
ZXR1cm4gXCIgKyAoZ2VuU2NvcGVkU2xvdChrZXksIGVsLCBzdGF0ZSkpICtcbiAgICAnfSknXG59
XG5cbmZ1bmN0aW9uIGdlbkNoaWxkcmVuIChcbiAgZWwsXG4gIHN0YXRlLFxuICBjaGVja1NraXAs
XG4gIGFsdEdlbkVsZW1lbnQsXG4gIGFsdEdlbk5vZGVcbikge1xuICB2YXIgY2hpbGRyZW4gPSBl
bC5jaGlsZHJlbjtcbiAgaWYgKGNoaWxkcmVuLmxlbmd0aCkge1xuICAgIHZhciBlbCQxID0gY2hp
bGRyZW5bMF07XG4gICAgLy8gb3B0aW1pemUgc2luZ2xlIHYtZm9yXG4gICAgaWYgKGNoaWxkcmVu
Lmxlbmd0aCA9PT0gMSAmJlxuICAgICAgZWwkMS5mb3IgJiZcbiAgICAgIGVsJDEudGFnICE9PSAn
dGVtcGxhdGUnICYmXG4gICAgICBlbCQxLnRhZyAhPT0gJ3Nsb3QnXG4gICAgKSB7XG4gICAgICBy
ZXR1cm4gKGFsdEdlbkVsZW1lbnQgfHwgZ2VuRWxlbWVudCkoZWwkMSwgc3RhdGUpXG4gICAgfVxu
ICAgIHZhciBub3JtYWxpemF0aW9uVHlwZSA9IGNoZWNrU2tpcFxuICAgICAgPyBnZXROb3JtYWxp
emF0aW9uVHlwZShjaGlsZHJlbiwgc3RhdGUubWF5YmVDb21wb25lbnQpXG4gICAgICA6IDA7XG4g
ICAgdmFyIGdlbiA9IGFsdEdlbk5vZGUgfHwgZ2VuTm9kZTtcbiAgICByZXR1cm4gKFwiW1wiICsg
KGNoaWxkcmVuLm1hcChmdW5jdGlvbiAoYykgeyByZXR1cm4gZ2VuKGMsIHN0YXRlKTsgfSkuam9p
bignLCcpKSArIFwiXVwiICsgKG5vcm1hbGl6YXRpb25UeXBlID8gKFwiLFwiICsgbm9ybWFsaXph
dGlvblR5cGUpIDogJycpKVxuICB9XG59XG5cbi8vIGRldGVybWluZSB0aGUgbm9ybWFsaXphdGlv
biBuZWVkZWQgZm9yIHRoZSBjaGlsZHJlbiBhcnJheS5cbi8vIDA6IG5vIG5vcm1hbGl6YXRpb24g
bmVlZGVkXG4vLyAxOiBzaW1wbGUgbm9ybWFsaXphdGlvbiBuZWVkZWQgKHBvc3NpYmxlIDEtbGV2
ZWwgZGVlcCBuZXN0ZWQgYXJyYXkpXG4vLyAyOiBmdWxsIG5vcm1hbGl6YXRpb24gbmVlZGVkXG5m
dW5jdGlvbiBnZXROb3JtYWxpemF0aW9uVHlwZSAoXG4gIGNoaWxkcmVuLFxuICBtYXliZUNvbXBv
bmVudFxuKSB7XG4gIHZhciByZXMgPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVu
Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGVsID0gY2hpbGRyZW5baV07XG4gICAgaWYgKGVsLnR5
cGUgIT09IDEpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChuZWVkc05vcm1hbGl6
YXRpb24oZWwpIHx8XG4gICAgICAgIChlbC5pZkNvbmRpdGlvbnMgJiYgZWwuaWZDb25kaXRpb25z
LnNvbWUoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIG5lZWRzTm9ybWFsaXphdGlvbihjLmJsb2NrKTsg
fSkpKSB7XG4gICAgICByZXMgPSAyO1xuICAgICAgYnJlYWtcbiAgICB9XG4gICAgaWYgKG1heWJl
Q29tcG9uZW50KGVsKSB8fFxuICAgICAgICAoZWwuaWZDb25kaXRpb25zICYmIGVsLmlmQ29uZGl0
aW9ucy5zb21lKGZ1bmN0aW9uIChjKSB7IHJldHVybiBtYXliZUNvbXBvbmVudChjLmJsb2NrKTsg
fSkpKSB7XG4gICAgICByZXMgPSAxO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1
bmN0aW9uIG5lZWRzTm9ybWFsaXphdGlvbiAoZWwpIHtcbiAgcmV0dXJuIGVsLmZvciAhPT0gdW5k
ZWZpbmVkIHx8IGVsLnRhZyA9PT0gJ3RlbXBsYXRlJyB8fCBlbC50YWcgPT09ICdzbG90J1xufVxu
XG5mdW5jdGlvbiBnZW5Ob2RlIChub2RlLCBzdGF0ZSkge1xuICBpZiAobm9kZS50eXBlID09PSAx
KSB7XG4gICAgcmV0dXJuIGdlbkVsZW1lbnQobm9kZSwgc3RhdGUpXG4gIH0gaWYgKG5vZGUudHlw
ZSA9PT0gMyAmJiBub2RlLmlzQ29tbWVudCkge1xuICAgIHJldHVybiBnZW5Db21tZW50KG5vZGUp
XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGdlblRleHQobm9kZSlcbiAgfVxufVxuXG5mdW5jdGlv
biBnZW5UZXh0ICh0ZXh0KSB7XG4gIHJldHVybiAoXCJfdihcIiArICh0ZXh0LnR5cGUgPT09IDJc
biAgICA/IHRleHQuZXhwcmVzc2lvbiAvLyBubyBuZWVkIGZvciAoKSBiZWNhdXNlIGFscmVhZHkg
d3JhcHBlZCBpbiBfcygpXG4gICAgOiB0cmFuc2Zvcm1TcGVjaWFsTmV3bGluZXMoSlNPTi5zdHJp
bmdpZnkodGV4dC50ZXh0KSkpICsgXCIpXCIpXG59XG5cbmZ1bmN0aW9uIGdlbkNvbW1lbnQgKGNv
bW1lbnQpIHtcbiAgcmV0dXJuIChcIl9lKFwiICsgKEpTT04uc3RyaW5naWZ5KGNvbW1lbnQudGV4
dCkpICsgXCIpXCIpXG59XG5cbmZ1bmN0aW9uIGdlblNsb3QgKGVsLCBzdGF0ZSkge1xuICB2YXIg
c2xvdE5hbWUgPSBlbC5zbG90TmFtZSB8fCAnXCJkZWZhdWx0XCInO1xuICB2YXIgY2hpbGRyZW4g
PSBnZW5DaGlsZHJlbihlbCwgc3RhdGUpO1xuICB2YXIgcmVzID0gXCJfdChcIiArIHNsb3ROYW1l
ICsgKGNoaWxkcmVuID8gKFwiLFwiICsgY2hpbGRyZW4pIDogJycpO1xuICB2YXIgYXR0cnMgPSBl
bC5hdHRycyAmJiAoXCJ7XCIgKyAoZWwuYXR0cnMubWFwKGZ1bmN0aW9uIChhKSB7IHJldHVybiAo
KGNhbWVsaXplKGEubmFtZSkpICsgXCI6XCIgKyAoYS52YWx1ZSkpOyB9KS5qb2luKCcsJykpICsg
XCJ9XCIpO1xuICB2YXIgYmluZCQkMSA9IGVsLmF0dHJzTWFwWyd2LWJpbmQnXTtcbiAgaWYgKChh
dHRycyB8fCBiaW5kJCQxKSAmJiAhY2hpbGRyZW4pIHtcbiAgICByZXMgKz0gXCIsbnVsbFwiO1xu
ICB9XG4gIGlmIChhdHRycykge1xuICAgIHJlcyArPSBcIixcIiArIGF0dHJzO1xuICB9XG4gIGlm
IChiaW5kJCQxKSB7XG4gICAgcmVzICs9IChhdHRycyA/ICcnIDogJyxudWxsJykgKyBcIixcIiAr
IGJpbmQkJDE7XG4gIH1cbiAgcmV0dXJuIHJlcyArICcpJ1xufVxuXG4vLyBjb21wb25lbnROYW1l
IGlzIGVsLmNvbXBvbmVudCwgdGFrZSBpdCBhcyBhcmd1bWVudCB0byBzaHVuIGZsb3cncyBwZXNz
aW1pc3RpYyByZWZpbmVtZW50XG5mdW5jdGlvbiBnZW5Db21wb25lbnQgKFxuICBjb21wb25lbnRO
YW1lLFxuICBlbCxcbiAgc3RhdGVcbikge1xuICB2YXIgY2hpbGRyZW4gPSBlbC5pbmxpbmVUZW1w
bGF0ZSA/IG51bGwgOiBnZW5DaGlsZHJlbihlbCwgc3RhdGUsIHRydWUpO1xuICByZXR1cm4gKFwi
X2MoXCIgKyBjb21wb25lbnROYW1lICsgXCIsXCIgKyAoZ2VuRGF0YSQyKGVsLCBzdGF0ZSkpICsg
KGNoaWxkcmVuID8gKFwiLFwiICsgY2hpbGRyZW4pIDogJycpICsgXCIpXCIpXG59XG5cbmZ1bmN0
aW9uIGdlblByb3BzIChwcm9wcykge1xuICB2YXIgcmVzID0gJyc7XG4gIGZvciAodmFyIGkgPSAw
OyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcHJvcCA9IHByb3BzW2ldO1xuICAg
IHJlcyArPSBcIlxcXCJcIiArIChwcm9wLm5hbWUpICsgXCJcXFwiOlwiICsgKHRyYW5zZm9ybVNw
ZWNpYWxOZXdsaW5lcyhwcm9wLnZhbHVlKSkgKyBcIixcIjtcbiAgfVxuICByZXR1cm4gcmVzLnNs
aWNlKDAsIC0xKVxufVxuXG4vLyAjMzg5NSwgIzQyNjhcbmZ1bmN0aW9uIHRyYW5zZm9ybVNwZWNp
YWxOZXdsaW5lcyAodGV4dCkge1xuICByZXR1cm4gdGV4dFxuICAgIC5yZXBsYWNlKC9cXHUyMDI4
L2csICdcXFxcdTIwMjgnKVxuICAgIC5yZXBsYWNlKC9cXHUyMDI5L2csICdcXFxcdTIwMjknKVxu
fVxuXG4vKiAgKi9cblxuLy8gdGhlc2Uga2V5d29yZHMgc2hvdWxkIG5vdCBhcHBlYXIgaW5zaWRl
IGV4cHJlc3Npb25zLCBidXQgb3BlcmF0b3JzIGxpa2Vcbi8vIHR5cGVvZiwgaW5zdGFuY2VvZiBh
bmQgaW4gYXJlIGFsbG93ZWRcbnZhciBwcm9oaWJpdGVkS2V5d29yZFJFID0gbmV3IFJlZ0V4cCgn
XFxcXGInICsgKFxuICAnZG8saWYsZm9yLGxldCxuZXcsdHJ5LHZhcixjYXNlLGVsc2Usd2l0aCxh
d2FpdCxicmVhayxjYXRjaCxjbGFzcyxjb25zdCwnICtcbiAgJ3N1cGVyLHRocm93LHdoaWxlLHlp
ZWxkLGRlbGV0ZSxleHBvcnQsaW1wb3J0LHJldHVybixzd2l0Y2gsZGVmYXVsdCwnICtcbiAgJ2V4
dGVuZHMsZmluYWxseSxjb250aW51ZSxkZWJ1Z2dlcixmdW5jdGlvbixhcmd1bWVudHMnXG4pLnNw
bGl0KCcsJykuam9pbignXFxcXGJ8XFxcXGInKSArICdcXFxcYicpO1xuXG4vLyB0aGVzZSB1bmFy
eSBvcGVyYXRvcnMgc2hvdWxkIG5vdCBiZSB1c2VkIGFzIHByb3BlcnR5L21ldGhvZCBuYW1lc1xu
dmFyIHVuYXJ5T3BlcmF0b3JzUkUgPSBuZXcgUmVnRXhwKCdcXFxcYicgKyAoXG4gICdkZWxldGUs
dHlwZW9mLHZvaWQnXG4pLnNwbGl0KCcsJykuam9pbignXFxcXHMqXFxcXChbXlxcXFwpXSpcXFxc
KXxcXFxcYicpICsgJ1xcXFxzKlxcXFwoW15cXFxcKV0qXFxcXCknKTtcblxuLy8gY2hlY2sgdmFs
aWQgaWRlbnRpZmllciBmb3Igdi1mb3JcbnZhciBpZGVudFJFID0gL1tBLVphLXpfJF1bXFx3JF0q
LztcblxuLy8gc3RyaXAgc3RyaW5ncyBpbiBleHByZXNzaW9uc1xudmFyIHN0cmlwU3RyaW5nUkUg
PSAvJyg/OlteJ1xcXFxdfFxcXFwuKSonfFwiKD86W15cIlxcXFxdfFxcXFwuKSpcInxgKD86W15g
XFxcXF18XFxcXC4pKlxcJFxce3xcXH0oPzpbXmBcXFxcXXxcXFxcLikqYHxgKD86W15gXFxcXF18
XFxcXC4pKmAvZztcblxuLy8gZGV0ZWN0IHByb2JsZW1hdGljIGV4cHJlc3Npb25zIGluIGEgdGVt
cGxhdGVcbmZ1bmN0aW9uIGRldGVjdEVycm9ycyAoYXN0KSB7XG4gIHZhciBlcnJvcnMgPSBbXTtc
biAgaWYgKGFzdCkge1xuICAgIGNoZWNrTm9kZShhc3QsIGVycm9ycyk7XG4gIH1cbiAgcmV0dXJu
IGVycm9yc1xufVxuXG5mdW5jdGlvbiBjaGVja05vZGUgKG5vZGUsIGVycm9ycykge1xuICBpZiAo
bm9kZS50eXBlID09PSAxKSB7XG4gICAgZm9yICh2YXIgbmFtZSBpbiBub2RlLmF0dHJzTWFwKSB7
XG4gICAgICBpZiAoZGlyUkUudGVzdChuYW1lKSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBub2Rl
LmF0dHJzTWFwW25hbWVdO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAobmFt
ZSA9PT0gJ3YtZm9yJykge1xuICAgICAgICAgICAgY2hlY2tGb3Iobm9kZSwgKFwidi1mb3I9XFxc
IlwiICsgdmFsdWUgKyBcIlxcXCJcIiksIGVycm9ycyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChv
blJFLnRlc3QobmFtZSkpIHtcbiAgICAgICAgICAgIGNoZWNrRXZlbnQodmFsdWUsIChuYW1lICsg
XCI9XFxcIlwiICsgdmFsdWUgKyBcIlxcXCJcIiksIGVycm9ycyk7XG4gICAgICAgICAgfSBlbHNl
IHtcbiAgICAgICAgICAgIGNoZWNrRXhwcmVzc2lvbih2YWx1ZSwgKG5hbWUgKyBcIj1cXFwiXCIg
KyB2YWx1ZSArIFwiXFxcIlwiKSwgZXJyb3JzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAg
ICAgIH1cbiAgICB9XG4gICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBjaGVja05vZGUo
bm9kZS5jaGlsZHJlbltpXSwgZXJyb3JzKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAo
bm9kZS50eXBlID09PSAyKSB7XG4gICAgY2hlY2tFeHByZXNzaW9uKG5vZGUuZXhwcmVzc2lvbiwg
bm9kZS50ZXh0LCBlcnJvcnMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrRXZlbnQgKGV4cCwg
dGV4dCwgZXJyb3JzKSB7XG4gIHZhciBzdGlwcGVkID0gZXhwLnJlcGxhY2Uoc3RyaXBTdHJpbmdS
RSwgJycpO1xuICB2YXIga2V5d29yZE1hdGNoID0gc3RpcHBlZC5tYXRjaCh1bmFyeU9wZXJhdG9y
c1JFKTtcbiAgaWYgKGtleXdvcmRNYXRjaCAmJiBzdGlwcGVkLmNoYXJBdChrZXl3b3JkTWF0Y2gu
aW5kZXggLSAxKSAhPT0gJyQnKSB7XG4gICAgZXJyb3JzLnB1c2goXG4gICAgICBcImF2b2lkIHVz
aW5nIEphdmFTY3JpcHQgdW5hcnkgb3BlcmF0b3IgYXMgcHJvcGVydHkgbmFtZTogXCIgK1xuICAg
ICAgXCJcXFwiXCIgKyAoa2V5d29yZE1hdGNoWzBdKSArIFwiXFxcIiBpbiBleHByZXNzaW9uIFwi
ICsgKHRleHQudHJpbSgpKVxuICAgICk7XG4gIH1cbiAgY2hlY2tFeHByZXNzaW9uKGV4cCwgdGV4
dCwgZXJyb3JzKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tGb3IgKG5vZGUsIHRleHQsIGVycm9ycykg
e1xuICBjaGVja0V4cHJlc3Npb24obm9kZS5mb3IgfHwgJycsIHRleHQsIGVycm9ycyk7XG4gIGNo
ZWNrSWRlbnRpZmllcihub2RlLmFsaWFzLCAndi1mb3IgYWxpYXMnLCB0ZXh0LCBlcnJvcnMpO1xu
ICBjaGVja0lkZW50aWZpZXIobm9kZS5pdGVyYXRvcjEsICd2LWZvciBpdGVyYXRvcicsIHRleHQs
IGVycm9ycyk7XG4gIGNoZWNrSWRlbnRpZmllcihub2RlLml0ZXJhdG9yMiwgJ3YtZm9yIGl0ZXJh
dG9yJywgdGV4dCwgZXJyb3JzKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tJZGVudGlmaWVyIChpZGVu
dCwgdHlwZSwgdGV4dCwgZXJyb3JzKSB7XG4gIGlmICh0eXBlb2YgaWRlbnQgPT09ICdzdHJpbmcn
ICYmICFpZGVudFJFLnRlc3QoaWRlbnQpKSB7XG4gICAgZXJyb3JzLnB1c2goKFwiaW52YWxpZCBc
IiArIHR5cGUgKyBcIiBcXFwiXCIgKyBpZGVudCArIFwiXFxcIiBpbiBleHByZXNzaW9uOiBcIiAr
ICh0ZXh0LnRyaW0oKSkpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0V4cHJlc3Npb24gKGV4
cCwgdGV4dCwgZXJyb3JzKSB7XG4gIHRyeSB7XG4gICAgbmV3IEZ1bmN0aW9uKChcInJldHVybiBc
IiArIGV4cCkpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdmFyIGtleXdvcmRNYXRjaCA9IGV4cC5y
ZXBsYWNlKHN0cmlwU3RyaW5nUkUsICcnKS5tYXRjaChwcm9oaWJpdGVkS2V5d29yZFJFKTtcbiAg
ICBpZiAoa2V5d29yZE1hdGNoKSB7XG4gICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgXCJhdm9p
ZCB1c2luZyBKYXZhU2NyaXB0IGtleXdvcmQgYXMgcHJvcGVydHkgbmFtZTogXCIgK1xuICAgICAg
ICBcIlxcXCJcIiArIChrZXl3b3JkTWF0Y2hbMF0pICsgXCJcXFwiIGluIGV4cHJlc3Npb24gXCIg
KyAodGV4dC50cmltKCkpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBlcnJvcnMucHVz
aCgoXCJpbnZhbGlkIGV4cHJlc3Npb246IFwiICsgKHRleHQudHJpbSgpKSkpO1xuICAgIH1cbiAg
fVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gY3JlYXRlRnVuY3Rpb24gKGNvZGUsIGVycm9ycykg
e1xuICB0cnkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb24oY29kZSlcbiAgfSBjYXRjaCAoZXJy
KSB7XG4gICAgZXJyb3JzLnB1c2goeyBlcnI6IGVyciwgY29kZTogY29kZSB9KTtcbiAgICByZXR1
cm4gbm9vcFxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbXBpbGVUb0Z1bmN0aW9uRm4gKGNv
bXBpbGUpIHtcbiAgdmFyIGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICByZXR1cm4g
ZnVuY3Rpb24gY29tcGlsZVRvRnVuY3Rpb25zIChcbiAgICB0ZW1wbGF0ZSxcbiAgICBvcHRpb25z
LFxuICAgIHZtXG4gICkge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLyog
aXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAn
cHJvZHVjdGlvbicpIHtcbiAgICAgIC8vIGRldGVjdCBwb3NzaWJsZSBDU1AgcmVzdHJpY3Rpb25c
biAgICAgIHRyeSB7XG4gICAgICAgIG5ldyBGdW5jdGlvbigncmV0dXJuIDEnKTtcbiAgICAgIH0g
Y2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGUudG9TdHJpbmcoKS5tYXRjaCgvdW5zYWZlLWV2YWx8
Q1NQLykpIHtcbiAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgJ0l0IHNlZW1zIHlvdSBhcmUg
dXNpbmcgdGhlIHN0YW5kYWxvbmUgYnVpbGQgb2YgVnVlLmpzIGluIGFuICcgK1xuICAgICAgICAg
ICAgJ2Vudmlyb25tZW50IHdpdGggQ29udGVudCBTZWN1cml0eSBQb2xpY3kgdGhhdCBwcm9oaWJp
dHMgdW5zYWZlLWV2YWwuICcgK1xuICAgICAgICAgICAgJ1RoZSB0ZW1wbGF0ZSBjb21waWxlciBj
YW5ub3Qgd29yayBpbiB0aGlzIGVudmlyb25tZW50LiBDb25zaWRlciAnICtcbiAgICAgICAgICAg
ICdyZWxheGluZyB0aGUgcG9saWN5IHRvIGFsbG93IHVuc2FmZS1ldmFsIG9yIHByZS1jb21waWxp
bmcgeW91ciAnICtcbiAgICAgICAgICAgICd0ZW1wbGF0ZXMgaW50byByZW5kZXIgZnVuY3Rpb25z
LidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY2hl
Y2sgY2FjaGVcbiAgICB2YXIga2V5ID0gb3B0aW9ucy5kZWxpbWl0ZXJzXG4gICAgICA/IFN0cmlu
ZyhvcHRpb25zLmRlbGltaXRlcnMpICsgdGVtcGxhdGVcbiAgICAgIDogdGVtcGxhdGU7XG4gICAg
aWYgKGNhY2hlW2tleV0pIHtcbiAgICAgIHJldHVybiBjYWNoZVtrZXldXG4gICAgfVxuXG4gICAg
Ly8gY29tcGlsZVxuICAgIHZhciBjb21waWxlZCA9IGNvbXBpbGUodGVtcGxhdGUsIG9wdGlvbnMp
O1xuXG4gICAgLy8gY2hlY2sgY29tcGlsYXRpb24gZXJyb3JzL3RpcHNcbiAgICBpZiAocHJvY2Vz
cy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKGNvbXBpbGVkLmVy
cm9ycyAmJiBjb21waWxlZC5lcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAg
ICAgXCJFcnJvciBjb21waWxpbmcgdGVtcGxhdGU6XFxuXFxuXCIgKyB0ZW1wbGF0ZSArIFwiXFxu
XFxuXCIgK1xuICAgICAgICAgIGNvbXBpbGVkLmVycm9ycy5tYXAoZnVuY3Rpb24gKGUpIHsgcmV0
dXJuIChcIi0gXCIgKyBlKTsgfSkuam9pbignXFxuJykgKyAnXFxuJyxcbiAgICAgICAgICB2bVxu
ICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGNvbXBpbGVkLnRpcHMgJiYgY29tcGlsZWQu
dGlwcy5sZW5ndGgpIHtcbiAgICAgICAgY29tcGlsZWQudGlwcy5mb3JFYWNoKGZ1bmN0aW9uICht
c2cpIHsgcmV0dXJuIHRpcChtc2csIHZtKTsgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8g
dHVybiBjb2RlIGludG8gZnVuY3Rpb25zXG4gICAgdmFyIHJlcyA9IHt9O1xuICAgIHZhciBmbkdl
bkVycm9ycyA9IFtdO1xuICAgIHJlcy5yZW5kZXIgPSBjcmVhdGVGdW5jdGlvbihjb21waWxlZC5y
ZW5kZXIsIGZuR2VuRXJyb3JzKTtcbiAgICByZXMuc3RhdGljUmVuZGVyRm5zID0gY29tcGlsZWQu
c3RhdGljUmVuZGVyRm5zLm1hcChmdW5jdGlvbiAoY29kZSkge1xuICAgICAgcmV0dXJuIGNyZWF0
ZUZ1bmN0aW9uKGNvZGUsIGZuR2VuRXJyb3JzKVxuICAgIH0pO1xuXG4gICAgLy8gY2hlY2sgZnVu
Y3Rpb24gZ2VuZXJhdGlvbiBlcnJvcnMuXG4gICAgLy8gdGhpcyBzaG91bGQgb25seSBoYXBwZW4g
aWYgdGhlcmUgaXMgYSBidWcgaW4gdGhlIGNvbXBpbGVyIGl0c2VsZi5cbiAgICAvLyBtb3N0bHkg
Zm9yIGNvZGVnZW4gZGV2ZWxvcG1lbnQgdXNlXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICov
XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAg
IGlmICgoIWNvbXBpbGVkLmVycm9ycyB8fCAhY29tcGlsZWQuZXJyb3JzLmxlbmd0aCkgJiYgZm5H
ZW5FcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgXCJGYWlsZWQgdG8g
Z2VuZXJhdGUgcmVuZGVyIGZ1bmN0aW9uOlxcblxcblwiICtcbiAgICAgICAgICBmbkdlbkVycm9y
cy5tYXAoZnVuY3Rpb24gKHJlZikge1xuICAgICAgICAgICAgdmFyIGVyciA9IHJlZi5lcnI7XG4g
ICAgICAgICAgICB2YXIgY29kZSA9IHJlZi5jb2RlO1xuXG4gICAgICAgICAgICByZXR1cm4gKChl
cnIudG9TdHJpbmcoKSkgKyBcIiBpblxcblxcblwiICsgY29kZSArIFwiXFxuXCIpO1xuICAgICAg
ICB9KS5qb2luKCdcXG4nKSxcbiAgICAgICAgICB2bVxuICAgICAgICApO1xuICAgICAgfVxuICAg
IH1cblxuICAgIHJldHVybiAoY2FjaGVba2V5XSA9IHJlcylcbiAgfVxufVxuXG4vKiAgKi9cblxu
ZnVuY3Rpb24gY3JlYXRlQ29tcGlsZXJDcmVhdG9yIChiYXNlQ29tcGlsZSkge1xuICByZXR1cm4g
ZnVuY3Rpb24gY3JlYXRlQ29tcGlsZXIgKGJhc2VPcHRpb25zKSB7XG4gICAgZnVuY3Rpb24gY29t
cGlsZSAoXG4gICAgICB0ZW1wbGF0ZSxcbiAgICAgIG9wdGlvbnNcbiAgICApIHtcbiAgICAgIHZh
ciBmaW5hbE9wdGlvbnMgPSBPYmplY3QuY3JlYXRlKGJhc2VPcHRpb25zKTtcbiAgICAgIHZhciBl
cnJvcnMgPSBbXTtcbiAgICAgIHZhciB0aXBzID0gW107XG4gICAgICBmaW5hbE9wdGlvbnMud2Fy
biA9IGZ1bmN0aW9uIChtc2csIHRpcCkge1xuICAgICAgICAodGlwID8gdGlwcyA6IGVycm9ycyku
cHVzaChtc2cpO1xuICAgICAgfTtcblxuICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgLy8g
bWVyZ2UgY3VzdG9tIG1vZHVsZXNcbiAgICAgICAgaWYgKG9wdGlvbnMubW9kdWxlcykge1xuICAg
ICAgICAgIGZpbmFsT3B0aW9ucy5tb2R1bGVzID1cbiAgICAgICAgICAgIChiYXNlT3B0aW9ucy5t
b2R1bGVzIHx8IFtdKS5jb25jYXQob3B0aW9ucy5tb2R1bGVzKTtcbiAgICAgICAgfVxuICAgICAg
ICAvLyBtZXJnZSBjdXN0b20gZGlyZWN0aXZlc1xuICAgICAgICBpZiAob3B0aW9ucy5kaXJlY3Rp
dmVzKSB7XG4gICAgICAgICAgZmluYWxPcHRpb25zLmRpcmVjdGl2ZXMgPSBleHRlbmQoXG4gICAg
ICAgICAgICBPYmplY3QuY3JlYXRlKGJhc2VPcHRpb25zLmRpcmVjdGl2ZXMpLFxuICAgICAgICAg
ICAgb3B0aW9ucy5kaXJlY3RpdmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICAv
LyBjb3B5IG90aGVyIG9wdGlvbnNcbiAgICAgICAgZm9yICh2YXIga2V5IGluIG9wdGlvbnMpIHtc
biAgICAgICAgICBpZiAoa2V5ICE9PSAnbW9kdWxlcycgJiYga2V5ICE9PSAnZGlyZWN0aXZlcycp
IHtcbiAgICAgICAgICAgIGZpbmFsT3B0aW9uc1trZXldID0gb3B0aW9uc1trZXldO1xuICAgICAg
ICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgY29tcGlsZWQgPSBiYXNlQ29t
cGlsZSh0ZW1wbGF0ZSwgZmluYWxPcHRpb25zKTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RF
X0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGVycm9ycy5wdXNoLmFwcGx5KGVycm9y
cywgZGV0ZWN0RXJyb3JzKGNvbXBpbGVkLmFzdCkpO1xuICAgICAgfVxuICAgICAgY29tcGlsZWQu
ZXJyb3JzID0gZXJyb3JzO1xuICAgICAgY29tcGlsZWQudGlwcyA9IHRpcHM7XG4gICAgICByZXR1
cm4gY29tcGlsZWRcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29tcGlsZTogY29tcGls
ZSxcbiAgICAgIGNvbXBpbGVUb0Z1bmN0aW9uczogY3JlYXRlQ29tcGlsZVRvRnVuY3Rpb25Gbihj
b21waWxlKVxuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxuLy8gYGNyZWF0ZUNvbXBpbGVyQ3Jl
YXRvcmAgYWxsb3dzIGNyZWF0aW5nIGNvbXBpbGVycyB0aGF0IHVzZSBhbHRlcm5hdGl2ZVxuLy8g
cGFyc2VyL29wdGltaXplci9jb2RlZ2VuLCBlLmcgdGhlIFNTUiBvcHRpbWl6aW5nIGNvbXBpbGVy
LlxuLy8gSGVyZSB3ZSBqdXN0IGV4cG9ydCBhIGRlZmF1bHQgY29tcGlsZXIgdXNpbmcgdGhlIGRl
ZmF1bHQgcGFydHMuXG52YXIgY3JlYXRlQ29tcGlsZXIgPSBjcmVhdGVDb21waWxlckNyZWF0b3Io
ZnVuY3Rpb24gYmFzZUNvbXBpbGUgKFxuICB0ZW1wbGF0ZSxcbiAgb3B0aW9uc1xuKSB7XG4gIHZh
ciBhc3QgPSBwYXJzZSh0ZW1wbGF0ZS50cmltKCksIG9wdGlvbnMpO1xuICBvcHRpbWl6ZShhc3Qs
IG9wdGlvbnMpO1xuICB2YXIgY29kZSA9IGdlbmVyYXRlKGFzdCwgb3B0aW9ucyk7XG4gIHJldHVy
biB7XG4gICAgYXN0OiBhc3QsXG4gICAgcmVuZGVyOiBjb2RlLnJlbmRlcixcbiAgICBzdGF0aWNS
ZW5kZXJGbnM6IGNvZGUuc3RhdGljUmVuZGVyRm5zXG4gIH1cbn0pO1xuXG4vKiAgKi9cblxudmFy
IHJlZiQxID0gY3JlYXRlQ29tcGlsZXIoYmFzZU9wdGlvbnMpO1xudmFyIGNvbXBpbGVUb0Z1bmN0
aW9ucyA9IHJlZiQxLmNvbXBpbGVUb0Z1bmN0aW9ucztcblxuLyogICovXG5cbnZhciBpZFRvVGVt
cGxhdGUgPSBjYWNoZWQoZnVuY3Rpb24gKGlkKSB7XG4gIHZhciBlbCA9IHF1ZXJ5KGlkKTtcbiAg
cmV0dXJuIGVsICYmIGVsLmlubmVySFRNTFxufSk7XG5cbnZhciBtb3VudCA9IFZ1ZSQzLnByb3Rv
dHlwZS4kbW91bnQ7XG5WdWUkMy5wcm90b3R5cGUuJG1vdW50ID0gZnVuY3Rpb24gKFxuICBlbCxc
biAgaHlkcmF0aW5nXG4pIHtcbiAgZWwgPSBlbCAmJiBxdWVyeShlbCk7XG5cbiAgLyogaXN0YW5i
dWwgaWdub3JlIGlmICovXG4gIGlmIChlbCA9PT0gZG9jdW1lbnQuYm9keSB8fCBlbCA9PT0gZG9j
dW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdw
cm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgXCJEbyBub3QgbW91bnQgVnVlIHRvIDxodG1sPiBv
ciA8Ym9keT4gLSBtb3VudCB0byBub3JtYWwgZWxlbWVudHMgaW5zdGVhZC5cIlxuICAgICk7XG4g
ICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHZhciBvcHRpb25zID0gdGhpcy4kb3B0aW9ucztcbiAg
Ly8gcmVzb2x2ZSB0ZW1wbGF0ZS9lbCBhbmQgY29udmVydCB0byByZW5kZXIgZnVuY3Rpb25cbiAg
aWYgKCFvcHRpb25zLnJlbmRlcikge1xuICAgIHZhciB0ZW1wbGF0ZSA9IG9wdGlvbnMudGVtcGxh
dGU7XG4gICAgaWYgKHRlbXBsYXRlKSB7XG4gICAgICBpZiAodHlwZW9mIHRlbXBsYXRlID09PSAn
c3RyaW5nJykge1xuICAgICAgICBpZiAodGVtcGxhdGUuY2hhckF0KDApID09PSAnIycpIHtcbiAg
ICAgICAgICB0ZW1wbGF0ZSA9IGlkVG9UZW1wbGF0ZSh0ZW1wbGF0ZSk7XG4gICAgICAgICAgLyog
aXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5W
ICE9PSAncHJvZHVjdGlvbicgJiYgIXRlbXBsYXRlKSB7XG4gICAgICAgICAgICB3YXJuKFxuICAg
ICAgICAgICAgICAoXCJUZW1wbGF0ZSBlbGVtZW50IG5vdCBmb3VuZCBvciBpcyBlbXB0eTogXCIg
KyAob3B0aW9ucy50ZW1wbGF0ZSkpLFxuICAgICAgICAgICAgICB0aGlzXG4gICAgICAgICAgICAp
O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0ZW1wbGF0ZS5ub2Rl
VHlwZSkge1xuICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLmlubmVySFRNTDtcbiAgICAgIH0g
ZWxzZSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24n
KSB7XG4gICAgICAgICAgd2FybignaW52YWxpZCB0ZW1wbGF0ZSBvcHRpb246JyArIHRlbXBsYXRl
LCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpc1xuICAgICAgfVxuICAgIH0g
ZWxzZSBpZiAoZWwpIHtcbiAgICAgIHRlbXBsYXRlID0gZ2V0T3V0ZXJIVE1MKGVsKTtcbiAgICB9
XG4gICAgaWYgKHRlbXBsYXRlKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAg
ICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGNvbmZpZy5w
ZXJmb3JtYW5jZSAmJiBtYXJrKSB7XG4gICAgICAgIG1hcmsoJ2NvbXBpbGUnKTtcbiAgICAgIH1c
blxuICAgICAgdmFyIHJlZiA9IGNvbXBpbGVUb0Z1bmN0aW9ucyh0ZW1wbGF0ZSwge1xuICAgICAg
ICBzaG91bGREZWNvZGVOZXdsaW5lczogc2hvdWxkRGVjb2RlTmV3bGluZXMsXG4gICAgICAgIGRl
bGltaXRlcnM6IG9wdGlvbnMuZGVsaW1pdGVycyxcbiAgICAgICAgY29tbWVudHM6IG9wdGlvbnMu
Y29tbWVudHNcbiAgICAgIH0sIHRoaXMpO1xuICAgICAgdmFyIHJlbmRlciA9IHJlZi5yZW5kZXI7
XG4gICAgICB2YXIgc3RhdGljUmVuZGVyRm5zID0gcmVmLnN0YXRpY1JlbmRlckZucztcbiAgICAg
IG9wdGlvbnMucmVuZGVyID0gcmVuZGVyO1xuICAgICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMg
PSBzdGF0aWNSZW5kZXJGbnM7XG5cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAg
ICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY29uZmlnLnBl
cmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICAgICAgbWFyaygnY29tcGlsZSBlbmQnKTtcbiAgICAg
ICAgbWVhc3VyZSgoKHRoaXMuX25hbWUpICsgXCIgY29tcGlsZVwiKSwgJ2NvbXBpbGUnLCAnY29t
cGlsZSBlbmQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1vdW50LmNhbGwodGhp
cywgZWwsIGh5ZHJhdGluZylcbn07XG5cbi8qKlxuICogR2V0IG91dGVySFRNTCBvZiBlbGVtZW50
cywgdGFraW5nIGNhcmVcbiAqIG9mIFNWRyBlbGVtZW50cyBpbiBJRSBhcyB3ZWxsLlxuICovXG5m
dW5jdGlvbiBnZXRPdXRlckhUTUwgKGVsKSB7XG4gIGlmIChlbC5vdXRlckhUTUwpIHtcbiAgICBy
ZXR1cm4gZWwub3V0ZXJIVE1MXG4gIH0gZWxzZSB7XG4gICAgdmFyIGNvbnRhaW5lciA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChlbC5j
bG9uZU5vZGUodHJ1ZSkpO1xuICAgIHJldHVybiBjb250YWluZXIuaW5uZXJIVE1MXG4gIH1cbn1c
blxuVnVlJDMuY29tcGlsZSA9IGNvbXBpbGVUb0Z1bmN0aW9ucztcblxuZXhwb3J0IGRlZmF1bHQg
VnVlJDM7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAu
L34vdnVlL2Rpc3QvdnVlLmVzbS5qc1xuLy8gbW9kdWxlIGlkID0gNyt1V1xuLy8gbW9kdWxlIGNo
dW5rcyA9IDEiLCJ2YXIgZztcclxuXHJcbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2Rl
XHJcbmcgPSAoZnVuY3Rpb24oKSB7XHJcblx0cmV0dXJuIHRoaXM7XHJcbn0pKCk7XHJcblxyXG50
cnkge1xyXG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxyXG5c
dGcgPSBnIHx8IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSB8fCAoMSxldmFsKShcInRoaXNc
Iik7XHJcbn0gY2F0Y2goZSkge1xyXG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZl
cmVuY2UgaXMgYXZhaWxhYmxlXHJcblx0aWYodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIilc
clxuXHRcdGcgPSB3aW5kb3c7XHJcbn1cclxuXHJcbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5l
ZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cclxuLy8gV2UgcmV0dXJuIHVuZGVmaW5l
ZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3NcclxuLy8gZWFzaWVyIHRvIGhhbmRs
ZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBn
O1xyXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAod2Vi
cGFjaykvYnVpbGRpbi9nbG9iYWwuanNcbi8vIG1vZHVsZSBpZCA9IER1UjJcbi8vIG1vZHVsZSBj
aHVua3MgPSAxIiwiLypcblx0TUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9s
aWNlbnNlcy9taXQtbGljZW5zZS5waHBcblx0QXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxu
Ki9cbi8vIGNzcyBiYXNlIGNvZGUsIGluamVjdGVkIGJ5IHRoZSBjc3MtbG9hZGVyXG5tb2R1bGUu
ZXhwb3J0cyA9IGZ1bmN0aW9uKHVzZVNvdXJjZU1hcCkge1xuXHR2YXIgbGlzdCA9IFtdO1xuXG5c
dC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcblx0bGlzdC50b1N0
cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuXHRcdHJldHVybiB0aGlzLm1hcChmdW5jdGlv
biAoaXRlbSkge1xuXHRcdFx0dmFyIGNvbnRlbnQgPSBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0
ZW0sIHVzZVNvdXJjZU1hcCk7XG5cdFx0XHRpZihpdGVtWzJdKSB7XG5cdFx0XHRcdHJldHVybiBc
IkBtZWRpYSBcIiArIGl0ZW1bMl0gKyBcIntcIiArIGNvbnRlbnQgKyBcIn1cIjtcblx0XHRcdH0g
ZWxzZSB7XG5cdFx0XHRcdHJldHVybiBjb250ZW50O1xuXHRcdFx0fVxuXHRcdH0pLmpvaW4oXCJc
Iik7XG5cdH07XG5cblx0Ly8gaW1wb3J0IGEgbGlzdCBvZiBtb2R1bGVzIGludG8gdGhlIGxpc3Rc
blx0bGlzdC5pID0gZnVuY3Rpb24obW9kdWxlcywgbWVkaWFRdWVyeSkge1xuXHRcdGlmKHR5cGVv
ZiBtb2R1bGVzID09PSBcInN0cmluZ1wiKVxuXHRcdFx0bW9kdWxlcyA9IFtbbnVsbCwgbW9kdWxl
cywgXCJcIl1dO1xuXHRcdHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XG5cdFx0Zm9y
KHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBpZCA9IHRoaXNb
aV1bMF07XG5cdFx0XHRpZih0eXBlb2YgaWQgPT09IFwibnVtYmVyXCIpXG5cdFx0XHRcdGFscmVh
ZHlJbXBvcnRlZE1vZHVsZXNbaWRdID0gdHJ1ZTtcblx0XHR9XG5cdFx0Zm9yKGkgPSAwOyBpIDwg
bW9kdWxlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGl0ZW0gPSBtb2R1bGVzW2ldO1xuXHRc
dFx0Ly8gc2tpcCBhbHJlYWR5IGltcG9ydGVkIG1vZHVsZVxuXHRcdFx0Ly8gdGhpcyBpbXBsZW1l
bnRhdGlvbiBpcyBub3QgMTAwJSBwZXJmZWN0IGZvciB3ZWlyZCBtZWRpYSBxdWVyeSBjb21iaW5h
dGlvbnNcblx0XHRcdC8vICB3aGVuIGEgbW9kdWxlIGlzIGltcG9ydGVkIG11bHRpcGxlIHRpbWVz
IHdpdGggZGlmZmVyZW50IG1lZGlhIHF1ZXJpZXMuXG5cdFx0XHQvLyAgSSBob3BlIHRoaXMgd2ls
bCBuZXZlciBvY2N1ciAoSGV5IHRoaXMgd2F5IHdlIGhhdmUgc21hbGxlciBidW5kbGVzKVxuXHRc
dFx0aWYodHlwZW9mIGl0ZW1bMF0gIT09IFwibnVtYmVyXCIgfHwgIWFscmVhZHlJbXBvcnRlZE1v
ZHVsZXNbaXRlbVswXV0pIHtcblx0XHRcdFx0aWYobWVkaWFRdWVyeSAmJiAhaXRlbVsyXSkge1xu
XHRcdFx0XHRcdGl0ZW1bMl0gPSBtZWRpYVF1ZXJ5O1xuXHRcdFx0XHR9IGVsc2UgaWYobWVkaWFR
dWVyeSkge1xuXHRcdFx0XHRcdGl0ZW1bMl0gPSBcIihcIiArIGl0ZW1bMl0gKyBcIikgYW5kIChc
IiArIG1lZGlhUXVlcnkgKyBcIilcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRsaXN0LnB1c2goaXRl
bSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRyZXR1cm4gbGlzdDtcbn07XG5cbmZ1bmN0aW9u
IGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSwgdXNlU291cmNlTWFwKSB7XG5cdHZhciBjb250
ZW50ID0gaXRlbVsxXSB8fCAnJztcblx0dmFyIGNzc01hcHBpbmcgPSBpdGVtWzNdO1xuXHRpZiAo
IWNzc01hcHBpbmcpIHtcblx0XHRyZXR1cm4gY29udGVudDtcblx0fVxuXG5cdGlmICh1c2VTb3Vy
Y2VNYXAgJiYgdHlwZW9mIGJ0b2EgPT09ICdmdW5jdGlvbicpIHtcblx0XHR2YXIgc291cmNlTWFw
cGluZyA9IHRvQ29tbWVudChjc3NNYXBwaW5nKTtcblx0XHR2YXIgc291cmNlVVJMcyA9IGNzc01h
cHBpbmcuc291cmNlcy5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuXHRcdFx0cmV0dXJuICcvKiMg
c291cmNlVVJMPScgKyBjc3NNYXBwaW5nLnNvdXJjZVJvb3QgKyBzb3VyY2UgKyAnICovJ1xuXHRc
dH0pO1xuXG5cdFx0cmV0dXJuIFtjb250ZW50XS5jb25jYXQoc291cmNlVVJMcykuY29uY2F0KFtz
b3VyY2VNYXBwaW5nXSkuam9pbignXFxuJyk7XG5cdH1cblxuXHRyZXR1cm4gW2NvbnRlbnRdLmpv
aW4oJ1xcbicpO1xufVxuXG4vLyBBZGFwdGVkIGZyb20gY29udmVydC1zb3VyY2UtbWFwIChNSVQp
XG5mdW5jdGlvbiB0b0NvbW1lbnQoc291cmNlTWFwKSB7XG5cdC8vIGVzbGludC1kaXNhYmxlLW5l
eHQtbGluZSBuby11bmRlZlxuXHR2YXIgYmFzZTY0ID0gYnRvYSh1bmVzY2FwZShlbmNvZGVVUklD
b21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKTtcblx0dmFyIGRhdGEgPSAnc291
cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQs
JyArIGJhc2U2NDtcblxuXHRyZXR1cm4gJy8qIyAnICsgZGF0YSArICcgKi8nO1xufVxuXG5cblxu
Ly8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2Nzcy1sb2FkZXIv
bGliL2Nzcy1iYXNlLmpzXG4vLyBtb2R1bGUgaWQgPSBGWitmXG4vLyBtb2R1bGUgY2h1bmtzID0g
MSIsIi8qIGdsb2JhbHMgX19WVUVfU1NSX0NPTlRFWFRfXyAqL1xuXG4vLyB0aGlzIG1vZHVsZSBp
cyBhIHJ1bnRpbWUgdXRpbGl0eSBmb3IgY2xlYW5lciBjb21wb25lbnQgbW9kdWxlIG91dHB1dCBh
bmQgd2lsbFxuLy8gYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHdlYnBhY2sgdXNlciBidW5kbGVc
blxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBub3JtYWxpemVDb21wb25lbnQgKFxuICByYXdT
Y3JpcHRFeHBvcnRzLFxuICBjb21waWxlZFRlbXBsYXRlLFxuICBpbmplY3RTdHlsZXMsXG4gIHNj
b3BlSWQsXG4gIG1vZHVsZUlkZW50aWZpZXIgLyogc2VydmVyIG9ubHkgKi9cbikge1xuICB2YXIg
ZXNNb2R1bGVcbiAgdmFyIHNjcmlwdEV4cG9ydHMgPSByYXdTY3JpcHRFeHBvcnRzID0gcmF3U2Ny
aXB0RXhwb3J0cyB8fCB7fVxuXG4gIC8vIEVTNiBtb2R1bGVzIGludGVyb3BcbiAgdmFyIHR5cGUg
PSB0eXBlb2YgcmF3U2NyaXB0RXhwb3J0cy5kZWZhdWx0XG4gIGlmICh0eXBlID09PSAnb2JqZWN0
JyB8fCB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZXNNb2R1bGUgPSByYXdTY3JpcHRFeHBv
cnRzXG4gICAgc2NyaXB0RXhwb3J0cyA9IHJhd1NjcmlwdEV4cG9ydHMuZGVmYXVsdFxuICB9XG5c
biAgLy8gVnVlLmV4dGVuZCBjb25zdHJ1Y3RvciBleHBvcnQgaW50ZXJvcFxuICB2YXIgb3B0aW9u
cyA9IHR5cGVvZiBzY3JpcHRFeHBvcnRzID09PSAnZnVuY3Rpb24nXG4gICAgPyBzY3JpcHRFeHBv
cnRzLm9wdGlvbnNcbiAgICA6IHNjcmlwdEV4cG9ydHNcblxuICAvLyByZW5kZXIgZnVuY3Rpb25z
XG4gIGlmIChjb21waWxlZFRlbXBsYXRlKSB7XG4gICAgb3B0aW9ucy5yZW5kZXIgPSBjb21waWxl
ZFRlbXBsYXRlLnJlbmRlclxuICAgIG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gY29tcGlsZWRU
ZW1wbGF0ZS5zdGF0aWNSZW5kZXJGbnNcbiAgfVxuXG4gIC8vIHNjb3BlZElkXG4gIGlmIChzY29w
ZUlkKSB7XG4gICAgb3B0aW9ucy5fc2NvcGVJZCA9IHNjb3BlSWRcbiAgfVxuXG4gIHZhciBob29r
XG4gIGlmIChtb2R1bGVJZGVudGlmaWVyKSB7IC8vIHNlcnZlciBidWlsZFxuICAgIGhvb2sgPSBm
dW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgLy8gMi4zIGluamVjdGlvblxuICAgICAgY29udGV4
dCA9XG4gICAgICAgIGNvbnRleHQgfHwgLy8gY2FjaGVkIGNhbGxcbiAgICAgICAgKHRoaXMuJHZu
b2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHQpIHx8IC8vIHN0YXRlZnVsXG4gICAgICAgICh0
aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC4kdm5vZGUgJiYgdGhpcy5wYXJlbnQuJHZub2RlLnNz
ckNvbnRleHQpIC8vIGZ1bmN0aW9uYWxcbiAgICAgIC8vIDIuMiB3aXRoIHJ1bkluTmV3Q29udGV4
dDogdHJ1ZVxuICAgICAgaWYgKCFjb250ZXh0ICYmIHR5cGVvZiBfX1ZVRV9TU1JfQ09OVEVYVF9f
ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb250ZXh0ID0gX19WVUVfU1NSX0NPTlRFWFRf
X1xuICAgICAgfVxuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCBzdHlsZXNcbiAgICAgIGlmIChp
bmplY3RTdHlsZXMpIHtcbiAgICAgICAgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgY29udGV4dClc
biAgICAgIH1cbiAgICAgIC8vIHJlZ2lzdGVyIGNvbXBvbmVudCBtb2R1bGUgaWRlbnRpZmllciBm
b3IgYXN5bmMgY2h1bmsgaW5mZXJyZW5jZVxuICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5f
cmVnaXN0ZXJlZENvbXBvbmVudHMpIHtcbiAgICAgICAgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBv
bmVudHMuYWRkKG1vZHVsZUlkZW50aWZpZXIpXG4gICAgICB9XG4gICAgfVxuICAgIC8vIHVzZWQg
Ynkgc3NyIGluIGNhc2UgY29tcG9uZW50IGlzIGNhY2hlZCBhbmQgYmVmb3JlQ3JlYXRlXG4gICAg
Ly8gbmV2ZXIgZ2V0cyBjYWxsZWRcbiAgICBvcHRpb25zLl9zc3JSZWdpc3RlciA9IGhvb2tcbiAg
fSBlbHNlIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICBob29rID0gaW5qZWN0U3R5bGVzXG4gIH1c
blxuICBpZiAoaG9vaykge1xuICAgIHZhciBmdW5jdGlvbmFsID0gb3B0aW9ucy5mdW5jdGlvbmFs
XG4gICAgdmFyIGV4aXN0aW5nID0gZnVuY3Rpb25hbFxuICAgICAgPyBvcHRpb25zLnJlbmRlclxu
ICAgICAgOiBvcHRpb25zLmJlZm9yZUNyZWF0ZVxuICAgIGlmICghZnVuY3Rpb25hbCkge1xuICAg
ICAgLy8gaW5qZWN0IGNvbXBvbmVudCByZWdpc3RyYXRpb24gYXMgYmVmb3JlQ3JlYXRlIGhvb2tc
biAgICAgIG9wdGlvbnMuYmVmb3JlQ3JlYXRlID0gZXhpc3RpbmdcbiAgICAgICAgPyBbXS5jb25j
YXQoZXhpc3RpbmcsIGhvb2spXG4gICAgICAgIDogW2hvb2tdXG4gICAgfSBlbHNlIHtcbiAgICAg
IC8vIHJlZ2lzdGVyIGZvciBmdW5jdGlvYWwgY29tcG9uZW50IGluIHZ1ZSBmaWxlXG4gICAgICBv
cHRpb25zLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcldpdGhTdHlsZUluamVjdGlvbiAoaCwgY29u
dGV4dCkge1xuICAgICAgICBob29rLmNhbGwoY29udGV4dClcbiAgICAgICAgcmV0dXJuIGV4aXN0
aW5nKGgsIGNvbnRleHQpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBl
c01vZHVsZTogZXNNb2R1bGUsXG4gICAgZXhwb3J0czogc2NyaXB0RXhwb3J0cyxcbiAgICBvcHRp
b25zOiBvcHRpb25zXG4gIH1cbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFD
SyBGT09URVJcbi8vIC4vfi92dWUtbG9hZGVyL2xpYi9jb21wb25lbnQtbm9ybWFsaXplci5qc1xu
Ly8gbW9kdWxlIGlkID0gVlUvOFxuLy8gbW9kdWxlIGNodW5rcyA9IDEiLCIvKlxuICBNSVQgTGlj
ZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxu
ICBBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4gIE1vZGlmaWVkIGJ5IEV2YW4gWW91IEB5
eXg5OTA4MDNcbiovXG5cbnZhciBoYXNEb2N1bWVudCA9IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3Vu
ZGVmaW5lZCdcblxuaWYgKHR5cGVvZiBERUJVRyAhPT0gJ3VuZGVmaW5lZCcgJiYgREVCVUcpIHtc
biAgaWYgKCFoYXNEb2N1bWVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAndnVlLXN0
eWxlLWxvYWRlciBjYW5ub3QgYmUgdXNlZCBpbiBhIG5vbi1icm93c2VyIGVudmlyb25tZW50LiAn
ICtcbiAgICBcIlVzZSB7IHRhcmdldDogJ25vZGUnIH0gaW4geW91ciBXZWJwYWNrIGNvbmZpZyB0
byBpbmRpY2F0ZSBhIHNlcnZlci1yZW5kZXJpbmcgZW52aXJvbm1lbnQuXCJcbiAgKSB9XG59XG5c
bnZhciBsaXN0VG9TdHlsZXMgPSByZXF1aXJlKCcuL2xpc3RUb1N0eWxlcycpXG5cbi8qXG50eXBl
IFN0eWxlT2JqZWN0ID0ge1xuICBpZDogbnVtYmVyO1xuICBwYXJ0czogQXJyYXk8U3R5bGVPYmpl
Y3RQYXJ0PlxufVxuXG50eXBlIFN0eWxlT2JqZWN0UGFydCA9IHtcbiAgY3NzOiBzdHJpbmc7XG4g
IG1lZGlhOiBzdHJpbmc7XG4gIHNvdXJjZU1hcDogP3N0cmluZ1xufVxuKi9cblxudmFyIHN0eWxl
c0luRG9tID0gey8qXG4gIFtpZDogbnVtYmVyXToge1xuICAgIGlkOiBudW1iZXIsXG4gICAgcmVm
czogbnVtYmVyLFxuICAgIHBhcnRzOiBBcnJheTwob2JqPzogU3R5bGVPYmplY3RQYXJ0KSA9PiB2
b2lkPlxuICB9XG4qL31cblxudmFyIGhlYWQgPSBoYXNEb2N1bWVudCAmJiAoZG9jdW1lbnQuaGVh
ZCB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdKVxudmFyIHNpbmds
ZXRvbkVsZW1lbnQgPSBudWxsXG52YXIgc2luZ2xldG9uQ291bnRlciA9IDBcbnZhciBpc1Byb2R1
Y3Rpb24gPSBmYWxzZVxudmFyIG5vb3AgPSBmdW5jdGlvbiAoKSB7fVxuXG4vLyBGb3JjZSBzaW5n
bGUtdGFnIHNvbHV0aW9uIG9uIElFNi05LCB3aGljaCBoYXMgYSBoYXJkIGxpbWl0IG9uIHRoZSAj
IG9mIDxzdHlsZT5cbi8vIHRhZ3MgaXQgd2lsbCBhbGxvdyBvbiBhIHBhZ2VcbnZhciBpc09sZElF
ID0gdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgL21zaWUgWzYtOV1cXGIvLnRl
c3QobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpKVxuXG5tb2R1bGUuZXhwb3J0cyA9
IGZ1bmN0aW9uIChwYXJlbnRJZCwgbGlzdCwgX2lzUHJvZHVjdGlvbikge1xuICBpc1Byb2R1Y3Rp
b24gPSBfaXNQcm9kdWN0aW9uXG5cbiAgdmFyIHN0eWxlcyA9IGxpc3RUb1N0eWxlcyhwYXJlbnRJ
ZCwgbGlzdClcbiAgYWRkU3R5bGVzVG9Eb20oc3R5bGVzKVxuXG4gIHJldHVybiBmdW5jdGlvbiB1
cGRhdGUgKG5ld0xpc3QpIHtcbiAgICB2YXIgbWF5UmVtb3ZlID0gW11cbiAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSBzdHlsZXNb
aV1cbiAgICAgIHZhciBkb21TdHlsZSA9IHN0eWxlc0luRG9tW2l0ZW0uaWRdXG4gICAgICBkb21T
dHlsZS5yZWZzLS1cbiAgICAgIG1heVJlbW92ZS5wdXNoKGRvbVN0eWxlKVxuICAgIH1cbiAgICBp
ZiAobmV3TGlzdCkge1xuICAgICAgc3R5bGVzID0gbGlzdFRvU3R5bGVzKHBhcmVudElkLCBuZXdM
aXN0KVxuICAgICAgYWRkU3R5bGVzVG9Eb20oc3R5bGVzKVxuICAgIH0gZWxzZSB7XG4gICAgICBz
dHlsZXMgPSBbXVxuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heVJlbW92ZS5sZW5n
dGg7IGkrKykge1xuICAgICAgdmFyIGRvbVN0eWxlID0gbWF5UmVtb3ZlW2ldXG4gICAgICBpZiAo
ZG9tU3R5bGUucmVmcyA9PT0gMCkge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGRvbVN0
eWxlLnBhcnRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgZG9tU3R5bGUucGFydHNbal0oKVxu
ICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSBzdHlsZXNJbkRvbVtkb21TdHlsZS5pZF1cbiAgICAg
IH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkU3R5bGVzVG9Eb20gKHN0eWxlcyAvKiBB
cnJheTxTdHlsZU9iamVjdD4gKi8pIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZXMubGVu
Z3RoOyBpKyspIHtcbiAgICB2YXIgaXRlbSA9IHN0eWxlc1tpXVxuICAgIHZhciBkb21TdHlsZSA9
IHN0eWxlc0luRG9tW2l0ZW0uaWRdXG4gICAgaWYgKGRvbVN0eWxlKSB7XG4gICAgICBkb21TdHls
ZS5yZWZzKytcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZG9tU3R5bGUucGFydHMubGVuZ3Ro
OyBqKyspIHtcbiAgICAgICAgZG9tU3R5bGUucGFydHNbal0oaXRlbS5wYXJ0c1tqXSlcbiAgICAg
IH1cbiAgICAgIGZvciAoOyBqIDwgaXRlbS5wYXJ0cy5sZW5ndGg7IGorKykge1xuICAgICAgICBk
b21TdHlsZS5wYXJ0cy5wdXNoKGFkZFN0eWxlKGl0ZW0ucGFydHNbal0pKVxuICAgICAgfVxuICAg
ICAgaWYgKGRvbVN0eWxlLnBhcnRzLmxlbmd0aCA+IGl0ZW0ucGFydHMubGVuZ3RoKSB7XG4gICAg
ICAgIGRvbVN0eWxlLnBhcnRzLmxlbmd0aCA9IGl0ZW0ucGFydHMubGVuZ3RoXG4gICAgICB9XG4g
ICAgfSBlbHNlIHtcbiAgICAgIHZhciBwYXJ0cyA9IFtdXG4gICAgICBmb3IgKHZhciBqID0gMDsg
aiA8IGl0ZW0ucGFydHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgcGFydHMucHVzaChhZGRTdHls
ZShpdGVtLnBhcnRzW2pdKSlcbiAgICAgIH1cbiAgICAgIHN0eWxlc0luRG9tW2l0ZW0uaWRdID0g
eyBpZDogaXRlbS5pZCwgcmVmczogMSwgcGFydHM6IHBhcnRzIH1cbiAgICB9XG4gIH1cbn1cblxu
ZnVuY3Rpb24gY3JlYXRlU3R5bGVFbGVtZW50ICgpIHtcbiAgdmFyIHN0eWxlRWxlbWVudCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJylcbiAgc3R5bGVFbGVtZW50LnR5cGUgPSAndGV4
dC9jc3MnXG4gIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KVxuICByZXR1cm4gc3R5bGVF
bGVtZW50XG59XG5cbmZ1bmN0aW9uIGFkZFN0eWxlIChvYmogLyogU3R5bGVPYmplY3RQYXJ0ICov
KSB7XG4gIHZhciB1cGRhdGUsIHJlbW92ZVxuICB2YXIgc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQu
cXVlcnlTZWxlY3Rvcignc3R5bGVbZGF0YS12dWUtc3NyLWlkfj1cIicgKyBvYmouaWQgKyAnXCJd
JylcblxuICBpZiAoc3R5bGVFbGVtZW50KSB7XG4gICAgaWYgKGlzUHJvZHVjdGlvbikge1xuICAg
ICAgLy8gaGFzIFNTUiBzdHlsZXMgYW5kIGluIHByb2R1Y3Rpb24gbW9kZS5cbiAgICAgIC8vIHNp
bXBseSBkbyBub3RoaW5nLlxuICAgICAgcmV0dXJuIG5vb3BcbiAgICB9IGVsc2Uge1xuICAgICAg
Ly8gaGFzIFNTUiBzdHlsZXMgYnV0IGluIGRldiBtb2RlLlxuICAgICAgLy8gZm9yIHNvbWUgcmVh
c29uIENocm9tZSBjYW4ndCBoYW5kbGUgc291cmNlIG1hcCBpbiBzZXJ2ZXItcmVuZGVyZWRcbiAg
ICAgIC8vIHN0eWxlIHRhZ3MgLSBzb3VyY2UgbWFwcyBpbiA8c3R5bGU+IG9ubHkgd29ya3MgaWYg
dGhlIHN0eWxlIHRhZyBpc1xuICAgICAgLy8gY3JlYXRlZCBhbmQgaW5zZXJ0ZWQgZHluYW1pY2Fs
bHkuIFNvIHdlIHJlbW92ZSB0aGUgc2VydmVyIHJlbmRlcmVkXG4gICAgICAvLyBzdHlsZXMgYW5k
IGluamVjdCBuZXcgb25lcy5cbiAgICAgIHN0eWxlRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNo
aWxkKHN0eWxlRWxlbWVudClcbiAgICB9XG4gIH1cblxuICBpZiAoaXNPbGRJRSkge1xuICAgIC8v
IHVzZSBzaW5nbGV0b24gbW9kZSBmb3IgSUU5LlxuICAgIHZhciBzdHlsZUluZGV4ID0gc2luZ2xl
dG9uQ291bnRlcisrXG4gICAgc3R5bGVFbGVtZW50ID0gc2luZ2xldG9uRWxlbWVudCB8fCAoc2lu
Z2xldG9uRWxlbWVudCA9IGNyZWF0ZVN0eWxlRWxlbWVudCgpKVxuICAgIHVwZGF0ZSA9IGFwcGx5
VG9TaW5nbGV0b25UYWcuYmluZChudWxsLCBzdHlsZUVsZW1lbnQsIHN0eWxlSW5kZXgsIGZhbHNl
KVxuICAgIHJlbW92ZSA9IGFwcGx5VG9TaW5nbGV0b25UYWcuYmluZChudWxsLCBzdHlsZUVsZW1l
bnQsIHN0eWxlSW5kZXgsIHRydWUpXG4gIH0gZWxzZSB7XG4gICAgLy8gdXNlIG11bHRpLXN0eWxl
LXRhZyBtb2RlIGluIGFsbCBvdGhlciBjYXNlc1xuICAgIHN0eWxlRWxlbWVudCA9IGNyZWF0ZVN0
eWxlRWxlbWVudCgpXG4gICAgdXBkYXRlID0gYXBwbHlUb1RhZy5iaW5kKG51bGwsIHN0eWxlRWxl
bWVudClcbiAgICByZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzdHlsZUVsZW1lbnQucGFy
ZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQpXG4gICAgfVxuICB9XG5cbiAgdXBkYXRl
KG9iailcblxuICByZXR1cm4gZnVuY3Rpb24gdXBkYXRlU3R5bGUgKG5ld09iaiAvKiBTdHlsZU9i
amVjdFBhcnQgKi8pIHtcbiAgICBpZiAobmV3T2JqKSB7XG4gICAgICBpZiAobmV3T2JqLmNzcyA9
PT0gb2JqLmNzcyAmJlxuICAgICAgICAgIG5ld09iai5tZWRpYSA9PT0gb2JqLm1lZGlhICYmXG4g
ICAgICAgICAgbmV3T2JqLnNvdXJjZU1hcCA9PT0gb2JqLnNvdXJjZU1hcCkge1xuICAgICAgICBy
ZXR1cm5cbiAgICAgIH1cbiAgICAgIHVwZGF0ZShvYmogPSBuZXdPYmopXG4gICAgfSBlbHNlIHtc
biAgICAgIHJlbW92ZSgpXG4gICAgfVxuICB9XG59XG5cbnZhciByZXBsYWNlVGV4dCA9IChmdW5j
dGlvbiAoKSB7XG4gIHZhciB0ZXh0U3RvcmUgPSBbXVxuXG4gIHJldHVybiBmdW5jdGlvbiAoaW5k
ZXgsIHJlcGxhY2VtZW50KSB7XG4gICAgdGV4dFN0b3JlW2luZGV4XSA9IHJlcGxhY2VtZW50XG4g
ICAgcmV0dXJuIHRleHRTdG9yZS5maWx0ZXIoQm9vbGVhbikuam9pbignXFxuJylcbiAgfVxufSko
KVxuXG5mdW5jdGlvbiBhcHBseVRvU2luZ2xldG9uVGFnIChzdHlsZUVsZW1lbnQsIGluZGV4LCBy
ZW1vdmUsIG9iaikge1xuICB2YXIgY3NzID0gcmVtb3ZlID8gJycgOiBvYmouY3NzXG5cbiAgaWYg
KHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQu
Y3NzVGV4dCA9IHJlcGxhY2VUZXh0KGluZGV4LCBjc3MpXG4gIH0gZWxzZSB7XG4gICAgdmFyIGNz
c05vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpXG4gICAgdmFyIGNoaWxkTm9kZXMg
PSBzdHlsZUVsZW1lbnQuY2hpbGROb2Rlc1xuICAgIGlmIChjaGlsZE5vZGVzW2luZGV4XSkgc3R5
bGVFbGVtZW50LnJlbW92ZUNoaWxkKGNoaWxkTm9kZXNbaW5kZXhdKVxuICAgIGlmIChjaGlsZE5v
ZGVzLmxlbmd0aCkge1xuICAgICAgc3R5bGVFbGVtZW50Lmluc2VydEJlZm9yZShjc3NOb2RlLCBj
aGlsZE5vZGVzW2luZGV4XSlcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGVFbGVtZW50LmFwcGVu
ZENoaWxkKGNzc05vZGUpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFwcGx5VG9UYWcgKHN0
eWxlRWxlbWVudCwgb2JqKSB7XG4gIHZhciBjc3MgPSBvYmouY3NzXG4gIHZhciBtZWRpYSA9IG9i
ai5tZWRpYVxuICB2YXIgc291cmNlTWFwID0gb2JqLnNvdXJjZU1hcFxuXG4gIGlmIChtZWRpYSkg
e1xuICAgIHN0eWxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ21lZGlhJywgbWVkaWEpXG4gIH1cblxu
ICBpZiAoc291cmNlTWFwKSB7XG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuY2hyb21lLmNvbS9k
ZXZ0b29scy9kb2NzL2phdmFzY3JpcHQtZGVidWdnaW5nXG4gICAgLy8gdGhpcyBtYWtlcyBzb3Vy
Y2UgbWFwcyBpbnNpZGUgc3R5bGUgdGFncyB3b3JrIHByb3Blcmx5IGluIENocm9tZVxuICAgIGNz
cyArPSAnXFxuLyojIHNvdXJjZVVSTD0nICsgc291cmNlTWFwLnNvdXJjZXNbMF0gKyAnICovJ1xu
ICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI2NjAzODc1XG4gICAgY3NzICs9ICdc
XG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LCcgKyBi
dG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXAp
KSkpICsgJyAqLydcbiAgfVxuXG4gIGlmIChzdHlsZUVsZW1lbnQuc3R5bGVTaGVldCkge1xuICAg
IHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3NcbiAgfSBlbHNlIHtcbiAgICB3
aGlsZSAoc3R5bGVFbGVtZW50LmZpcnN0Q2hpbGQpIHtcbiAgICAgIHN0eWxlRWxlbWVudC5yZW1v
dmVDaGlsZChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZClcbiAgICB9XG4gICAgc3R5bGVFbGVtZW50
LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpXG4gIH1cbn1cblxuXG5c
bi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi92dWUtc3R5bGUt
bG9hZGVyL2xpYi9hZGRTdHlsZXNDbGllbnQuanNcbi8vIG1vZHVsZSBpZCA9IHJqajBcbi8vIG1v
ZHVsZSBjaHVua3MgPSAxIiwiXG5cbi8vXG4vLyBHZW5lcmF0ZWQgb24gVHVlIERlYyAxNiAyMDE0
IDEyOjEzOjQ3IEdNVCswMTAwIChDRVQpIGJ5IENoYXJsaWUgUm9iYmlucywgUGFvbG8gRnJhZ29t
ZW5pICYgdGhlIENvbnRyaWJ1dG9ycyAoVXNpbmcgQ29kZXN1cmdlb24pLlxuLy8gVmVyc2lvbiAx
LjIuNlxuLy9cblxuKGZ1bmN0aW9uIChleHBvcnRzKSB7XG5cbi8qXG4gKiBicm93c2VyLmpzOiBC
cm93c2VyIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkgZm9yIGRpcmVjdG9yLlxuICpcbiAqIChDKSAy
MDExLCBDaGFybGllIFJvYmJpbnMsIFBhb2xvIEZyYWdvbWVuaSwgJiB0aGUgQ29udHJpYnV0b3Jz
LlxuICogTUlUIExJQ0VOU0VcbiAqXG4gKi9cblxudmFyIGRsb2MgPSBkb2N1bWVudC5sb2NhdGlv
bjtcblxuZnVuY3Rpb24gZGxvY0hhc2hFbXB0eSgpIHtcbiAgLy8gTm9uLUlFIGJyb3dzZXJzIHJl
dHVybiAnJyB3aGVuIHRoZSBhZGRyZXNzIGJhciBzaG93cyAnIyc7IERpcmVjdG9yJ3MgbG9naWNc
biAgLy8gYXNzdW1lcyBib3RoIG1lYW4gZW1wdHkuXG4gIHJldHVybiBkbG9jLmhhc2ggPT09ICcn
IHx8IGRsb2MuaGFzaCA9PT0gJyMnO1xufVxuXG52YXIgbGlzdGVuZXIgPSB7XG4gIG1vZGU6ICdt
b2Rlcm4nLFxuICBoYXNoOiBkbG9jLmhhc2gsXG4gIGhpc3Rvcnk6IGZhbHNlLFxuXG4gIGNoZWNr
OiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGggPSBkbG9jLmhhc2g7XG4gICAgaWYgKGggIT0gdGhp
cy5oYXNoKSB7XG4gICAgICB0aGlzLmhhc2ggPSBoO1xuICAgICAgdGhpcy5vbkhhc2hDaGFuZ2Vk
KCk7XG4gICAgfVxuICB9LFxuXG4gIGZpcmU6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5t
b2RlID09PSAnbW9kZXJuJykge1xuICAgICAgdGhpcy5oaXN0b3J5ID09PSB0cnVlID8gd2luZG93
Lm9ucG9wc3RhdGUoKSA6IHdpbmRvdy5vbmhhc2hjaGFuZ2UoKTtcbiAgICB9XG4gICAgZWxzZSB7
XG4gICAgICB0aGlzLm9uSGFzaENoYW5nZWQoKTtcbiAgICB9XG4gIH0sXG5cbiAgaW5pdDogZnVu
Y3Rpb24gKGZuLCBoaXN0b3J5KSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMuaGlz
dG9yeSA9IGhpc3Rvcnk7XG5cbiAgICBpZiAoIVJvdXRlci5saXN0ZW5lcnMpIHtcbiAgICAgIFJv
dXRlci5saXN0ZW5lcnMgPSBbXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvbmNoYW5nZShvbkNo
YW5nZUV2ZW50KSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IFJvdXRlci5saXN0ZW5lcnMu
bGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIFJvdXRlci5saXN0ZW5lcnNbaV0ob25DaGFu
Z2VFdmVudCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy9ub3RlIElFOCBpcyBiZWluZyBjb3Vu
dGVkIGFzICdtb2Rlcm4nIGJlY2F1c2UgaXQgaGFzIHRoZSBoYXNoY2hhbmdlIGV2ZW50XG4gICAg
aWYgKCdvbmhhc2hjaGFuZ2UnIGluIHdpbmRvdyAmJiAoZG9jdW1lbnQuZG9jdW1lbnRNb2RlID09
PSB1bmRlZmluZWRcbiAgICAgIHx8IGRvY3VtZW50LmRvY3VtZW50TW9kZSA+IDcpKSB7XG4gICAg
ICAvLyBBdCBsZWFzdCBmb3Igbm93IEhUTUw1IGhpc3RvcnkgaXMgYXZhaWxhYmxlIGZvciAnbW9k
ZXJuJyBicm93c2VycyBvbmx5XG4gICAgICBpZiAodGhpcy5oaXN0b3J5ID09PSB0cnVlKSB7XG4g
ICAgICAgIC8vIFRoZXJlIGlzIGFuIG9sZCBidWcgaW4gQ2hyb21lIHRoYXQgY2F1c2VzIG9ucG9w
c3RhdGUgdG8gZmlyZSBldmVuXG4gICAgICAgIC8vIHVwb24gaW5pdGlhbCBwYWdlIGxvYWQuIFNp
bmNlIHRoZSBoYW5kbGVyIGlzIHJ1biBtYW51YWxseSBpbiBpbml0KCksXG4gICAgICAgIC8vIHRo
aXMgd291bGQgY2F1c2UgQ2hyb21lIHRvIHJ1biBpdCB0d2lzZS4gQ3VycmVudGx5IHRoZSBvbmx5
XG4gICAgICAgIC8vIHdvcmthcm91bmQgc2VlbXMgdG8gYmUgdG8gc2V0IHRoZSBoYW5kbGVyIGFm
dGVyIHRoZSBpbml0aWFsIHBhZ2UgbG9hZFxuICAgICAgICAvLyBodHRwOi8vY29kZS5nb29nbGUu
Y29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD02MzA0MFxuICAgICAgICBzZXRUaW1lb3V0
KGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHdpbmRvdy5vbnBvcHN0YXRlID0gb25jaGFuZ2U7XG4g
ICAgICAgIH0sIDUwMCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgd2luZG93Lm9u
aGFzaGNoYW5nZSA9IG9uY2hhbmdlO1xuICAgICAgfVxuICAgICAgdGhpcy5tb2RlID0gJ21vZGVy
bic7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgLy9cbiAgICAgIC8vIElFIHN1cHBvcnQsIGJh
c2VkIG9uIGEgY29uY2VwdCBieSBFcmlrIEFydmlkc29uIC4uLlxuICAgICAgLy9cbiAgICAgIHZh
ciBmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICAgICAgZnJhbWUu
aWQgPSAnc3RhdGUtZnJhbWUnO1xuICAgICAgZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztc
biAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZnJhbWUpO1xuICAgICAgdGhpcy53cml0
ZUZyYW1lKCcnKTtcblxuICAgICAgaWYgKCdvbnByb3BlcnR5Y2hhbmdlJyBpbiBkb2N1bWVudCAm
JiAnYXR0YWNoRXZlbnQnIGluIGRvY3VtZW50KSB7XG4gICAgICAgIGRvY3VtZW50LmF0dGFjaEV2
ZW50KCdvbnByb3BlcnR5Y2hhbmdlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChldmVu
dC5wcm9wZXJ0eU5hbWUgPT09ICdsb2NhdGlvbicpIHtcbiAgICAgICAgICAgIHNlbGYuY2hlY2so
KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB3aW5kb3cuc2V0
SW50ZXJ2YWwoZnVuY3Rpb24gKCkgeyBzZWxmLmNoZWNrKCk7IH0sIDUwKTtcblxuICAgICAgdGhp
cy5vbkhhc2hDaGFuZ2VkID0gb25jaGFuZ2U7XG4gICAgICB0aGlzLm1vZGUgPSAnbGVnYWN5Jztc
biAgICB9XG5cbiAgICBSb3V0ZXIubGlzdGVuZXJzLnB1c2goZm4pO1xuXG4gICAgcmV0dXJuIHRo
aXMubW9kZTtcbiAgfSxcblxuICBkZXN0cm95OiBmdW5jdGlvbiAoZm4pIHtcbiAgICBpZiAoIVJv
dXRlciB8fCAhUm91dGVyLmxpc3RlbmVycykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAg
IHZhciBsaXN0ZW5lcnMgPSBSb3V0ZXIubGlzdGVuZXJzO1xuXG4gICAgZm9yICh2YXIgaSA9IGxp
c3RlbmVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgaWYgKGxpc3RlbmVyc1tp
XSA9PT0gZm4pIHtcbiAgICAgICAgbGlzdGVuZXJzLnNwbGljZShpLCAxKTtcbiAgICAgIH1cbiAg
ICB9XG4gIH0sXG5cbiAgc2V0SGFzaDogZnVuY3Rpb24gKHMpIHtcbiAgICAvLyBNb3ppbGxhIGFs
d2F5cyBhZGRzIGFuIGVudHJ5IHRvIHRoZSBoaXN0b3J5XG4gICAgaWYgKHRoaXMubW9kZSA9PT0g
J2xlZ2FjeScpIHtcbiAgICAgIHRoaXMud3JpdGVGcmFtZShzKTtcbiAgICB9XG5cbiAgICBpZiAo
dGhpcy5oaXN0b3J5ID09PSB0cnVlKSB7XG4gICAgICB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUo
e30sIGRvY3VtZW50LnRpdGxlLCBzKTtcbiAgICAgIC8vIEZpcmUgYW4gb25wb3BzdGF0ZSBldmVu
dCBtYW51YWxseSBzaW5jZSBwdXNoaW5nIGRvZXMgbm90IG9idmlvdXNseVxuICAgICAgLy8gdHJp
Z2dlciB0aGUgcG9wIGV2ZW50LlxuICAgICAgdGhpcy5maXJlKCk7XG4gICAgfSBlbHNlIHtcbiAg
ICAgIGRsb2MuaGFzaCA9IChzWzBdID09PSAnLycpID8gcyA6ICcvJyArIHM7XG4gICAgfVxuICAg
IHJldHVybiB0aGlzO1xuICB9LFxuXG4gIHdyaXRlRnJhbWU6IGZ1bmN0aW9uIChzKSB7XG4gICAg
Ly8gSUUgc3VwcG9ydC4uLlxuICAgIHZhciBmID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0
YXRlLWZyYW1lJyk7XG4gICAgdmFyIGQgPSBmLmNvbnRlbnREb2N1bWVudCB8fCBmLmNvbnRlbnRX
aW5kb3cuZG9jdW1lbnQ7XG4gICAgZC5vcGVuKCk7XG4gICAgZC53cml0ZShcIjxzY3JpcHQ+X2hh
c2ggPSAnXCIgKyBzICsgXCInOyBvbmxvYWQgPSBwYXJlbnQubGlzdGVuZXIuc3luY0hhc2g7PHNj
cmlwdD5cIik7XG4gICAgZC5jbG9zZSgpO1xuICB9LFxuXG4gIHN5bmNIYXNoOiBmdW5jdGlvbiAo
KSB7XG4gICAgLy8gSUUgc3VwcG9ydC4uLlxuICAgIHZhciBzID0gdGhpcy5faGFzaDtcbiAgICBp
ZiAocyAhPSBkbG9jLmhhc2gpIHtcbiAgICAgIGRsb2MuaGFzaCA9IHM7XG4gICAgfVxuICAgIHJl
dHVybiB0aGlzO1xuICB9LFxuXG4gIG9uSGFzaENoYW5nZWQ6IGZ1bmN0aW9uICgpIHt9XG59O1xu
XG52YXIgUm91dGVyID0gZXhwb3J0cy5Sb3V0ZXIgPSBmdW5jdGlvbiAocm91dGVzKSB7XG4gIGlm
ICghKHRoaXMgaW5zdGFuY2VvZiBSb3V0ZXIpKSByZXR1cm4gbmV3IFJvdXRlcihyb3V0ZXMpO1xu
XG4gIHRoaXMucGFyYW1zICAgPSB7fTtcbiAgdGhpcy5yb3V0ZXMgICA9IHt9O1xuICB0aGlzLm1l
dGhvZHMgID0gWydvbicsICdvbmNlJywgJ2FmdGVyJywgJ2JlZm9yZSddO1xuICB0aGlzLnNjb3Bl
ICAgID0gW107XG4gIHRoaXMuX21ldGhvZHMgPSB7fTtcblxuICB0aGlzLl9pbnNlcnQgPSB0aGlz
Lmluc2VydDtcbiAgdGhpcy5pbnNlcnQgPSB0aGlzLmluc2VydEV4O1xuXG4gIHRoaXMuaGlzdG9y
eVN1cHBvcnQgPSAod2luZG93Lmhpc3RvcnkgIT0gbnVsbCA/IHdpbmRvdy5oaXN0b3J5LnB1c2hT
dGF0ZSA6IG51bGwpICE9IG51bGxcblxuICB0aGlzLmNvbmZpZ3VyZSgpO1xuICB0aGlzLm1vdW50
KHJvdXRlcyB8fCB7fSk7XG59O1xuXG5Sb3V0ZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAo
cikge1xuICB2YXIgc2VsZiA9IHRoaXNcbiAgICAsIHJvdXRlVG87XG4gIHRoaXMuaGFuZGxlciA9
IGZ1bmN0aW9uKG9uQ2hhbmdlRXZlbnQpIHtcbiAgICB2YXIgbmV3VVJMID0gb25DaGFuZ2VFdmVu
dCAmJiBvbkNoYW5nZUV2ZW50Lm5ld1VSTCB8fCB3aW5kb3cubG9jYXRpb24uaGFzaDtcbiAgICB2
YXIgdXJsID0gc2VsZi5oaXN0b3J5ID09PSB0cnVlID8gc2VsZi5nZXRQYXRoKCkgOiBuZXdVUkwu
cmVwbGFjZSgvLiojLywgJycpO1xuICAgIHNlbGYuZGlzcGF0Y2goJ29uJywgdXJsLmNoYXJBdCgw
KSA9PT0gJy8nID8gdXJsIDogJy8nICsgdXJsKTtcbiAgfTtcblxuICBsaXN0ZW5lci5pbml0KHRo
aXMuaGFuZGxlciwgdGhpcy5oaXN0b3J5KTtcblxuICBpZiAodGhpcy5oaXN0b3J5ID09PSBmYWxz
ZSkge1xuICAgIGlmIChkbG9jSGFzaEVtcHR5KCkgJiYgcikge1xuICAgICAgZGxvYy5oYXNoID0g
cjtcbiAgICB9IGVsc2UgaWYgKCFkbG9jSGFzaEVtcHR5KCkpIHtcbiAgICAgIHNlbGYuZGlzcGF0
Y2goJ29uJywgJy8nICsgZGxvYy5oYXNoLnJlcGxhY2UoL14oI1xcL3wjfFxcLykvLCAnJykpO1xu
ICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICBpZiAodGhpcy5jb252ZXJ0X2hhc2hfaW5faW5pdCkg
e1xuICAgICAgLy8gVXNlIGhhc2ggYXMgcm91dGVcbiAgICAgIHJvdXRlVG8gPSBkbG9jSGFzaEVt
cHR5KCkgJiYgciA/IHIgOiAhZGxvY0hhc2hFbXB0eSgpID8gZGxvYy5oYXNoLnJlcGxhY2UoL14j
LywgJycpIDogbnVsbDtcbiAgICAgIGlmIChyb3V0ZVRvKSB7XG4gICAgICAgIHdpbmRvdy5oaXN0
b3J5LnJlcGxhY2VTdGF0ZSh7fSwgZG9jdW1lbnQudGl0bGUsIHJvdXRlVG8pO1xuICAgICAgfVxu
ICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIC8vIFVzZSBjYW5vbmljYWwgdXJsXG4gICAgICByb3V0
ZVRvID0gdGhpcy5nZXRQYXRoKCk7XG4gICAgfVxuXG4gICAgLy8gUm91dGVyIGhhcyBiZWVuIGlu
aXRpYWxpemVkLCBidXQgZHVlIHRvIHRoZSBjaHJvbWUgYnVnIGl0IHdpbGwgbm90XG4gICAgLy8g
eWV0IGFjdHVhbGx5IHJvdXRlIEhUTUw1IGhpc3Rvcnkgc3RhdGUgY2hhbmdlcy4gVGh1cywgZGVj
aWRlIGlmIHNob3VsZCByb3V0ZS5cbiAgICBpZiAocm91dGVUbyB8fCB0aGlzLnJ1bl9pbl9pbml0
ID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmhhbmRsZXIoKTtcbiAgICB9XG4gIH1cblxuICByZXR1
cm4gdGhpcztcbn07XG5cblJvdXRlci5wcm90b3R5cGUuZXhwbG9kZSA9IGZ1bmN0aW9uICgpIHtc
biAgdmFyIHYgPSB0aGlzLmhpc3RvcnkgPT09IHRydWUgPyB0aGlzLmdldFBhdGgoKSA6IGRsb2Mu
aGFzaDtcbiAgaWYgKHYuY2hhckF0KDEpID09PSAnLycpIHsgdj12LnNsaWNlKDEpIH1cbiAgcmV0
dXJuIHYuc2xpY2UoMSwgdi5sZW5ndGgpLnNwbGl0KFwiL1wiKTtcbn07XG5cblJvdXRlci5wcm90
b3R5cGUuc2V0Um91dGUgPSBmdW5jdGlvbiAoaSwgdiwgdmFsKSB7XG4gIHZhciB1cmwgPSB0aGlz
LmV4cGxvZGUoKTtcblxuICBpZiAodHlwZW9mIGkgPT09ICdudW1iZXInICYmIHR5cGVvZiB2ID09
PSAnc3RyaW5nJykge1xuICAgIHVybFtpXSA9IHY7XG4gIH1cbiAgZWxzZSBpZiAodHlwZW9mIHZh
bCA9PT0gJ3N0cmluZycpIHtcbiAgICB1cmwuc3BsaWNlKGksIHYsIHMpO1xuICB9XG4gIGVsc2Ug
e1xuICAgIHVybCA9IFtpXTtcbiAgfVxuXG4gIGxpc3RlbmVyLnNldEhhc2godXJsLmpvaW4oJy8n
KSk7XG4gIHJldHVybiB1cmw7XG59O1xuXG4vL1xuLy8gIyMjIGZ1bmN0aW9uIGluc2VydEV4KG1l
dGhvZCwgcGF0aCwgcm91dGUsIHBhcmVudClcbi8vICMjIyMgQG1ldGhvZCB7c3RyaW5nfSBNZXRo
b2QgdG8gaW5zZXJ0IHRoZSBzcGVjaWZpYyBgcm91dGVgLlxuLy8gIyMjIyBAcGF0aCB7QXJyYXl9
IFBhcnNlZCBwYXRoIHRvIGluc2VydCB0aGUgYHJvdXRlYCBhdC5cbi8vICMjIyMgQHJvdXRlIHtB
cnJheXxmdW5jdGlvbn0gUm91dGUgaGFuZGxlcnMgdG8gaW5zZXJ0LlxuLy8gIyMjIyBAcGFyZW50
IHtPYmplY3R9ICoqT3B0aW9uYWwqKiBQYXJlbnQgXCJyb3V0ZXNcIiB0byBpbnNlcnQgaW50by5c
bi8vIGluc2VydCBhIGNhbGxiYWNrIHRoYXQgd2lsbCBvbmx5IG9jY3VyIG9uY2UgcGVyIHRoZSBt
YXRjaGVkIHJvdXRlLlxuLy9cblJvdXRlci5wcm90b3R5cGUuaW5zZXJ0RXggPSBmdW5jdGlvbiht
ZXRob2QsIHBhdGgsIHJvdXRlLCBwYXJlbnQpIHtcbiAgaWYgKG1ldGhvZCA9PT0gXCJvbmNlXCIp
IHtcbiAgICBtZXRob2QgPSBcIm9uXCI7XG4gICAgcm91dGUgPSBmdW5jdGlvbihyb3V0ZSkge1xu
ICAgICAgdmFyIG9uY2UgPSBmYWxzZTtcbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAg
ICAgaWYgKG9uY2UpIHJldHVybjtcbiAgICAgICAgb25jZSA9IHRydWU7XG4gICAgICAgIHJldHVy
biByb3V0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICB9KHJvdXRlKTtc
biAgfVxuICByZXR1cm4gdGhpcy5faW5zZXJ0KG1ldGhvZCwgcGF0aCwgcm91dGUsIHBhcmVudCk7
XG59O1xuXG5Sb3V0ZXIucHJvdG90eXBlLmdldFJvdXRlID0gZnVuY3Rpb24gKHYpIHtcbiAgdmFy
IHJldCA9IHY7XG5cbiAgaWYgKHR5cGVvZiB2ID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0ID0g
dGhpcy5leHBsb2RlKClbdl07XG4gIH1cbiAgZWxzZSBpZiAodHlwZW9mIHYgPT09IFwic3RyaW5n
XCIpe1xuICAgIHZhciBoID0gdGhpcy5leHBsb2RlKCk7XG4gICAgcmV0ID0gaC5pbmRleE9mKHYp
O1xuICB9XG4gIGVsc2Uge1xuICAgIHJldCA9IHRoaXMuZXhwbG9kZSgpO1xuICB9XG5cbiAgcmV0
dXJuIHJldDtcbn07XG5cblJvdXRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtc
biAgbGlzdGVuZXIuZGVzdHJveSh0aGlzLmhhbmRsZXIpO1xuICByZXR1cm4gdGhpcztcbn07XG5c
blJvdXRlci5wcm90b3R5cGUuZ2V0UGF0aCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHBhdGggPSB3
aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7XG4gIGlmIChwYXRoLnN1YnN0cigwLCAxKSAhPT0gJy8n
KSB7XG4gICAgcGF0aCA9ICcvJyArIHBhdGg7XG4gIH1cbiAgcmV0dXJuIHBhdGg7XG59O1xuZnVu
Y3Rpb24gX2V2ZXJ5KGFyciwgaXRlcmF0b3IpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIu
bGVuZ3RoOyBpICs9IDEpIHtcbiAgICBpZiAoaXRlcmF0b3IoYXJyW2ldLCBpLCBhcnIpID09PSBm
YWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBfZmxhdHRl
bihhcnIpIHtcbiAgdmFyIGZsYXQgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDAsIG4gPSBhcnIubGVu
Z3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgZmxhdCA9IGZsYXQuY29uY2F0KGFycltpXSk7XG4gIH1c
biAgcmV0dXJuIGZsYXQ7XG59XG5cbmZ1bmN0aW9uIF9hc3luY0V2ZXJ5U2VyaWVzKGFyciwgaXRl
cmF0b3IsIGNhbGxiYWNrKSB7XG4gIGlmICghYXJyLmxlbmd0aCkge1xuICAgIHJldHVybiBjYWxs
YmFjaygpO1xuICB9XG4gIHZhciBjb21wbGV0ZWQgPSAwO1xuICAoZnVuY3Rpb24gaXRlcmF0ZSgp
IHtcbiAgICBpdGVyYXRvcihhcnJbY29tcGxldGVkXSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICBp
ZiAoZXJyIHx8IGVyciA9PT0gZmFsc2UpIHtcbiAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAg
ICAgY2FsbGJhY2sgPSBmdW5jdGlvbigpIHt9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29t
cGxldGVkICs9IDE7XG4gICAgICAgIGlmIChjb21wbGV0ZWQgPT09IGFyci5sZW5ndGgpIHtcbiAg
ICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZXJhdGUo
KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9KSgpO1xufVxuXG5mdW5jdGlvbiBw
YXJhbWlmeVN0cmluZyhzdHIsIHBhcmFtcywgbW9kKSB7XG4gIG1vZCA9IHN0cjtcbiAgZm9yICh2
YXIgcGFyYW0gaW4gcGFyYW1zKSB7XG4gICAgaWYgKHBhcmFtcy5oYXNPd25Qcm9wZXJ0eShwYXJh
bSkpIHtcbiAgICAgIG1vZCA9IHBhcmFtc1twYXJhbV0oc3RyKTtcbiAgICAgIGlmIChtb2QgIT09
IHN0cikge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1v
ZCA9PT0gc3RyID8gXCIoWy5fYS16QS1aMC05LSUoKV0rKVwiIDogbW9kO1xufVxuXG5mdW5jdGlv
biByZWdpZnlTdHJpbmcoc3RyLCBwYXJhbXMpIHtcbiAgdmFyIG1hdGNoZXMsIGxhc3QgPSAwLCBv
dXQgPSBcIlwiO1xuICB3aGlsZSAobWF0Y2hlcyA9IHN0ci5zdWJzdHIobGFzdCkubWF0Y2goL1te
XFx3XFxkXFwtICVAJl0qXFwqW15cXHdcXGRcXC0gJUAmXSovKSkge1xuICAgIGxhc3QgPSBtYXRj
aGVzLmluZGV4ICsgbWF0Y2hlc1swXS5sZW5ndGg7XG4gICAgbWF0Y2hlc1swXSA9IG1hdGNoZXNb
MF0ucmVwbGFjZSgvXlxcKi8sIFwiKFtfLigpIVxcXFwgJUAmYS16QS1aMC05LV0rKVwiKTtcbiAg
ICBvdXQgKz0gc3RyLnN1YnN0cigwLCBtYXRjaGVzLmluZGV4KSArIG1hdGNoZXNbMF07XG4gIH1c
biAgc3RyID0gb3V0ICs9IHN0ci5zdWJzdHIobGFzdCk7XG4gIHZhciBjYXB0dXJlcyA9IHN0ci5t
YXRjaCgvOihbXlxcL10rKS9pZyksIGNhcHR1cmUsIGxlbmd0aDtcbiAgaWYgKGNhcHR1cmVzKSB7
XG4gICAgbGVuZ3RoID0gY2FwdHVyZXMubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspIHtcbiAgICAgIGNhcHR1cmUgPSBjYXB0dXJlc1tpXTtcbiAgICAgIGlmIChj
YXB0dXJlLnNsaWNlKDAsIDIpID09PSBcIjo6XCIpIHtcbiAgICAgICAgc3RyID0gY2FwdHVyZS5z
bGljZSgxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKGNhcHR1
cmUsIHBhcmFtaWZ5U3RyaW5nKGNhcHR1cmUsIHBhcmFtcykpO1xuICAgICAgfVxuICAgIH1cbiAg
fVxuICByZXR1cm4gc3RyO1xufVxuXG5mdW5jdGlvbiB0ZXJtaW5hdG9yKHJvdXRlcywgZGVsaW1p
dGVyLCBzdGFydCwgc3RvcCkge1xuICB2YXIgbGFzdCA9IDAsIGxlZnQgPSAwLCByaWdodCA9IDAs
IHN0YXJ0ID0gKHN0YXJ0IHx8IFwiKFwiKS50b1N0cmluZygpLCBzdG9wID0gKHN0b3AgfHwgXCIp
XCIpLnRvU3RyaW5nKCksIGk7XG4gIGZvciAoaSA9IDA7IGkgPCByb3V0ZXMubGVuZ3RoOyBpKysp
IHtcbiAgICB2YXIgY2h1bmsgPSByb3V0ZXNbaV07XG4gICAgaWYgKGNodW5rLmluZGV4T2Yoc3Rh
cnQsIGxhc3QpID4gY2h1bmsuaW5kZXhPZihzdG9wLCBsYXN0KSB8fCB+Y2h1bmsuaW5kZXhPZihz
dGFydCwgbGFzdCkgJiYgIX5jaHVuay5pbmRleE9mKHN0b3AsIGxhc3QpIHx8ICF+Y2h1bmsuaW5k
ZXhPZihzdGFydCwgbGFzdCkgJiYgfmNodW5rLmluZGV4T2Yoc3RvcCwgbGFzdCkpIHtcbiAgICAg
IGxlZnQgPSBjaHVuay5pbmRleE9mKHN0YXJ0LCBsYXN0KTtcbiAgICAgIHJpZ2h0ID0gY2h1bmsu
aW5kZXhPZihzdG9wLCBsYXN0KTtcbiAgICAgIGlmICh+bGVmdCAmJiAhfnJpZ2h0IHx8ICF+bGVm
dCAmJiB+cmlnaHQpIHtcbiAgICAgICAgdmFyIHRtcCA9IHJvdXRlcy5zbGljZSgwLCAoaSB8fCAx
KSArIDEpLmpvaW4oZGVsaW1pdGVyKTtcbiAgICAgICAgcm91dGVzID0gWyB0bXAgXS5jb25jYXQo
cm91dGVzLnNsaWNlKChpIHx8IDEpICsgMSkpO1xuICAgICAgfVxuICAgICAgbGFzdCA9IChyaWdo
dCA+IGxlZnQgPyByaWdodCA6IGxlZnQpICsgMTtcbiAgICAgIGkgPSAwO1xuICAgIH0gZWxzZSB7
XG4gICAgICBsYXN0ID0gMDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJvdXRlcztcbn1cblxudmFy
IFFVRVJZX1NFUEFSQVRPUiA9IC9cXD8uKi87XG5cblJvdXRlci5wcm90b3R5cGUuY29uZmlndXJl
ID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgZm9y
ICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1ldGhvZHMubGVuZ3RoOyBpKyspIHtcbiAgICB0aGlzLl9t
ZXRob2RzW3RoaXMubWV0aG9kc1tpXV0gPSB0cnVlO1xuICB9XG4gIHRoaXMucmVjdXJzZSA9IG9w
dGlvbnMucmVjdXJzZSB8fCB0aGlzLnJlY3Vyc2UgfHwgZmFsc2U7XG4gIHRoaXMuYXN5bmMgPSBv
cHRpb25zLmFzeW5jIHx8IGZhbHNlO1xuICB0aGlzLmRlbGltaXRlciA9IG9wdGlvbnMuZGVsaW1p
dGVyIHx8IFwiL1wiO1xuICB0aGlzLnN0cmljdCA9IHR5cGVvZiBvcHRpb25zLnN0cmljdCA9PT0g
XCJ1bmRlZmluZWRcIiA/IHRydWUgOiBvcHRpb25zLnN0cmljdDtcbiAgdGhpcy5ub3Rmb3VuZCA9
IG9wdGlvbnMubm90Zm91bmQ7XG4gIHRoaXMucmVzb3VyY2UgPSBvcHRpb25zLnJlc291cmNlO1xu
ICB0aGlzLmhpc3RvcnkgPSBvcHRpb25zLmh0bWw1aGlzdG9yeSAmJiB0aGlzLmhpc3RvcnlTdXBw
b3J0IHx8IGZhbHNlO1xuICB0aGlzLnJ1bl9pbl9pbml0ID0gdGhpcy5oaXN0b3J5ID09PSB0cnVl
ICYmIG9wdGlvbnMucnVuX2hhbmRsZXJfaW5faW5pdCAhPT0gZmFsc2U7XG4gIHRoaXMuY29udmVy
dF9oYXNoX2luX2luaXQgPSB0aGlzLmhpc3RvcnkgPT09IHRydWUgJiYgb3B0aW9ucy5jb252ZXJ0
X2hhc2hfaW5faW5pdCAhPT0gZmFsc2U7XG4gIHRoaXMuZXZlcnkgPSB7XG4gICAgYWZ0ZXI6IG9w
dGlvbnMuYWZ0ZXIgfHwgbnVsbCxcbiAgICBiZWZvcmU6IG9wdGlvbnMuYmVmb3JlIHx8IG51bGws
XG4gICAgb246IG9wdGlvbnMub24gfHwgbnVsbFxuICB9O1xuICByZXR1cm4gdGhpcztcbn07XG5c
blJvdXRlci5wcm90b3R5cGUucGFyYW0gPSBmdW5jdGlvbih0b2tlbiwgbWF0Y2hlcikge1xuICBp
ZiAodG9rZW5bMF0gIT09IFwiOlwiKSB7XG4gICAgdG9rZW4gPSBcIjpcIiArIHRva2VuO1xuICB9
XG4gIHZhciBjb21waWxlZCA9IG5ldyBSZWdFeHAodG9rZW4sIFwiZ1wiKTtcbiAgdGhpcy5wYXJh
bXNbdG9rZW5dID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKGNvbXBp
bGVkLCBtYXRjaGVyLnNvdXJjZSB8fCBtYXRjaGVyKTtcbiAgfTtcbiAgcmV0dXJuIHRoaXM7XG59
O1xuXG5Sb3V0ZXIucHJvdG90eXBlLm9uID0gUm91dGVyLnByb3RvdHlwZS5yb3V0ZSA9IGZ1bmN0
aW9uKG1ldGhvZCwgcGF0aCwgcm91dGUpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBpZiAoIXJv
dXRlICYmIHR5cGVvZiBwYXRoID09IFwiZnVuY3Rpb25cIikge1xuICAgIHJvdXRlID0gcGF0aDtc
biAgICBwYXRoID0gbWV0aG9kO1xuICAgIG1ldGhvZCA9IFwib25cIjtcbiAgfVxuICBpZiAoQXJy
YXkuaXNBcnJheShwYXRoKSkge1xuICAgIHJldHVybiBwYXRoLmZvckVhY2goZnVuY3Rpb24ocCkg
e1xuICAgICAgc2VsZi5vbihtZXRob2QsIHAsIHJvdXRlKTtcbiAgICB9KTtcbiAgfVxuICBpZiAo
cGF0aC5zb3VyY2UpIHtcbiAgICBwYXRoID0gcGF0aC5zb3VyY2UucmVwbGFjZSgvXFxcXFxcLy9p
ZywgXCIvXCIpO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KG1ldGhvZCkpIHtcbiAgICByZXR1
cm4gbWV0aG9kLmZvckVhY2goZnVuY3Rpb24obSkge1xuICAgICAgc2VsZi5vbihtLnRvTG93ZXJD
YXNlKCksIHBhdGgsIHJvdXRlKTtcbiAgICB9KTtcbiAgfVxuICBwYXRoID0gcGF0aC5zcGxpdChu
ZXcgUmVnRXhwKHRoaXMuZGVsaW1pdGVyKSk7XG4gIHBhdGggPSB0ZXJtaW5hdG9yKHBhdGgsIHRo
aXMuZGVsaW1pdGVyKTtcbiAgdGhpcy5pbnNlcnQobWV0aG9kLCB0aGlzLnNjb3BlLmNvbmNhdChw
YXRoKSwgcm91dGUpO1xufTtcblxuUm91dGVyLnByb3RvdHlwZS5wYXRoID0gZnVuY3Rpb24ocGF0
aCwgcm91dGVzRm4pIHtcbiAgdmFyIHNlbGYgPSB0aGlzLCBsZW5ndGggPSB0aGlzLnNjb3BlLmxl
bmd0aDtcbiAgaWYgKHBhdGguc291cmNlKSB7XG4gICAgcGF0aCA9IHBhdGguc291cmNlLnJlcGxh
Y2UoL1xcXFxcXC8vaWcsIFwiL1wiKTtcbiAgfVxuICBwYXRoID0gcGF0aC5zcGxpdChuZXcgUmVn
RXhwKHRoaXMuZGVsaW1pdGVyKSk7XG4gIHBhdGggPSB0ZXJtaW5hdG9yKHBhdGgsIHRoaXMuZGVs
aW1pdGVyKTtcbiAgdGhpcy5zY29wZSA9IHRoaXMuc2NvcGUuY29uY2F0KHBhdGgpO1xuICByb3V0
ZXNGbi5jYWxsKHRoaXMsIHRoaXMpO1xuICB0aGlzLnNjb3BlLnNwbGljZShsZW5ndGgsIHBhdGgu
bGVuZ3RoKTtcbn07XG5cblJvdXRlci5wcm90b3R5cGUuZGlzcGF0Y2ggPSBmdW5jdGlvbihtZXRo
b2QsIHBhdGgsIGNhbGxiYWNrKSB7XG4gIHZhciBzZWxmID0gdGhpcywgZm5zID0gdGhpcy50cmF2
ZXJzZShtZXRob2QsIHBhdGgucmVwbGFjZShRVUVSWV9TRVBBUkFUT1IsIFwiXCIpLCB0aGlzLnJv
dXRlcywgXCJcIiksIGludm9rZWQgPSB0aGlzLl9pbnZva2VkLCBhZnRlcjtcbiAgdGhpcy5faW52
b2tlZCA9IHRydWU7XG4gIGlmICghZm5zIHx8IGZucy5sZW5ndGggPT09IDApIHtcbiAgICB0aGlz
Lmxhc3QgPSBbXTtcbiAgICBpZiAodHlwZW9mIHRoaXMubm90Zm91bmQgPT09IFwiZnVuY3Rpb25c
Iikge1xuICAgICAgdGhpcy5pbnZva2UoWyB0aGlzLm5vdGZvdW5kIF0sIHtcbiAgICAgICAgbWV0
aG9kOiBtZXRob2QsXG4gICAgICAgIHBhdGg6IHBhdGhcbiAgICAgIH0sIGNhbGxiYWNrKTtcbiAg
ICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh0aGlzLnJlY3Vyc2UgPT09IFwiZm9y
d2FyZFwiKSB7XG4gICAgZm5zID0gZm5zLnJldmVyc2UoKTtcbiAgfVxuICBmdW5jdGlvbiB1cGRh
dGVBbmRJbnZva2UoKSB7XG4gICAgc2VsZi5sYXN0ID0gZm5zLmFmdGVyO1xuICAgIHNlbGYuaW52
b2tlKHNlbGYucnVubGlzdChmbnMpLCBzZWxmLCBjYWxsYmFjayk7XG4gIH1cbiAgYWZ0ZXIgPSB0
aGlzLmV2ZXJ5ICYmIHRoaXMuZXZlcnkuYWZ0ZXIgPyBbIHRoaXMuZXZlcnkuYWZ0ZXIgXS5jb25j
YXQodGhpcy5sYXN0KSA6IFsgdGhpcy5sYXN0IF07XG4gIGlmIChhZnRlciAmJiBhZnRlci5sZW5n
dGggPiAwICYmIGludm9rZWQpIHtcbiAgICBpZiAodGhpcy5hc3luYykge1xuICAgICAgdGhpcy5p
bnZva2UoYWZ0ZXIsIHRoaXMsIHVwZGF0ZUFuZEludm9rZSk7XG4gICAgfSBlbHNlIHtcbiAgICAg
IHRoaXMuaW52b2tlKGFmdGVyLCB0aGlzKTtcbiAgICAgIHVwZGF0ZUFuZEludm9rZSgpO1xuICAg
IH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB1cGRhdGVBbmRJbnZva2UoKTtcbiAgcmV0dXJu
IHRydWU7XG59O1xuXG5Sb3V0ZXIucHJvdG90eXBlLmludm9rZSA9IGZ1bmN0aW9uKGZucywgdGhp
c0FyZywgY2FsbGJhY2spIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgYXBwbHk7XG4gIGlm
ICh0aGlzLmFzeW5jKSB7XG4gICAgYXBwbHkgPSBmdW5jdGlvbihmbiwgbmV4dCkge1xuICAgICAg
aWYgKEFycmF5LmlzQXJyYXkoZm4pKSB7XG4gICAgICAgIHJldHVybiBfYXN5bmNFdmVyeVNlcmll
cyhmbiwgYXBwbHksIG5leHQpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZm4gPT0gXCJmdW5j
dGlvblwiKSB7XG4gICAgICAgIGZuLmFwcGx5KHRoaXNBcmcsIChmbnMuY2FwdHVyZXMgfHwgW10p
LmNvbmNhdChuZXh0KSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBfYXN5bmNFdmVyeVNlcmllcyhm
bnMsIGFwcGx5LCBmdW5jdGlvbigpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBj
YWxsYmFjay5hcHBseSh0aGlzQXJnLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9
IGVsc2Uge1xuICAgIGFwcGx5ID0gZnVuY3Rpb24oZm4pIHtcbiAgICAgIGlmIChBcnJheS5pc0Fy
cmF5KGZuKSkge1xuICAgICAgICByZXR1cm4gX2V2ZXJ5KGZuLCBhcHBseSk7XG4gICAgICB9IGVs
c2UgaWYgKHR5cGVvZiBmbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBmbi5h
cHBseSh0aGlzQXJnLCBmbnMuY2FwdHVyZXMgfHwgW10pO1xuICAgICAgfSBlbHNlIGlmICh0eXBl
b2YgZm4gPT09IFwic3RyaW5nXCIgJiYgc2VsZi5yZXNvdXJjZSkge1xuICAgICAgICBzZWxmLnJl
c291cmNlW2ZuXS5hcHBseSh0aGlzQXJnLCBmbnMuY2FwdHVyZXMgfHwgW10pO1xuICAgICAgfVxu
ICAgIH07XG4gICAgX2V2ZXJ5KGZucywgYXBwbHkpO1xuICB9XG59O1xuXG5Sb3V0ZXIucHJvdG90
eXBlLnRyYXZlcnNlID0gZnVuY3Rpb24obWV0aG9kLCBwYXRoLCByb3V0ZXMsIHJlZ2V4cCwgZmls
dGVyKSB7XG4gIHZhciBmbnMgPSBbXSwgY3VycmVudCwgZXhhY3QsIG1hdGNoLCBuZXh0LCB0aGF0
O1xuICBmdW5jdGlvbiBmaWx0ZXJSb3V0ZXMocm91dGVzKSB7XG4gICAgaWYgKCFmaWx0ZXIpIHtc
biAgICAgIHJldHVybiByb3V0ZXM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlZXBDb3B5KHNvdXJj
ZSkge1xuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBz
b3VyY2UubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzdWx0W2ldID0gQXJyYXkuaXNBcnJheShz
b3VyY2VbaV0pID8gZGVlcENvcHkoc291cmNlW2ldKSA6IHNvdXJjZVtpXTtcbiAgICAgIH1cbiAg
ICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFwcGx5RmlsdGVyKGZucykg
e1xuICAgICAgZm9yICh2YXIgaSA9IGZucy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAg
ICAgICBpZiAoQXJyYXkuaXNBcnJheShmbnNbaV0pKSB7XG4gICAgICAgICAgYXBwbHlGaWx0ZXIo
Zm5zW2ldKTtcbiAgICAgICAgICBpZiAoZm5zW2ldLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAg
ICAgZm5zLnNwbGljZShpLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAg
ICAgICAgaWYgKCFmaWx0ZXIoZm5zW2ldKSkge1xuICAgICAgICAgICAgZm5zLnNwbGljZShpLCAx
KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIG5ld1Jv
dXRlcyA9IGRlZXBDb3B5KHJvdXRlcyk7XG4gICAgbmV3Um91dGVzLm1hdGNoZWQgPSByb3V0ZXMu
bWF0Y2hlZDtcbiAgICBuZXdSb3V0ZXMuY2FwdHVyZXMgPSByb3V0ZXMuY2FwdHVyZXM7XG4gICAg
bmV3Um91dGVzLmFmdGVyID0gcm91dGVzLmFmdGVyLmZpbHRlcihmaWx0ZXIpO1xuICAgIGFwcGx5
RmlsdGVyKG5ld1JvdXRlcyk7XG4gICAgcmV0dXJuIG5ld1JvdXRlcztcbiAgfVxuICBpZiAocGF0
aCA9PT0gdGhpcy5kZWxpbWl0ZXIgJiYgcm91dGVzW21ldGhvZF0pIHtcbiAgICBuZXh0ID0gWyBb
IHJvdXRlcy5iZWZvcmUsIHJvdXRlc1ttZXRob2RdIF0uZmlsdGVyKEJvb2xlYW4pIF07XG4gICAg
bmV4dC5hZnRlciA9IFsgcm91dGVzLmFmdGVyIF0uZmlsdGVyKEJvb2xlYW4pO1xuICAgIG5leHQu
bWF0Y2hlZCA9IHRydWU7XG4gICAgbmV4dC5jYXB0dXJlcyA9IFtdO1xuICAgIHJldHVybiBmaWx0
ZXJSb3V0ZXMobmV4dCk7XG4gIH1cbiAgZm9yICh2YXIgciBpbiByb3V0ZXMpIHtcbiAgICBpZiAo
cm91dGVzLmhhc093blByb3BlcnR5KHIpICYmICghdGhpcy5fbWV0aG9kc1tyXSB8fCB0aGlzLl9t
ZXRob2RzW3JdICYmIHR5cGVvZiByb3V0ZXNbcl0gPT09IFwib2JqZWN0XCIgJiYgIUFycmF5Lmlz
QXJyYXkocm91dGVzW3JdKSkpIHtcbiAgICAgIGN1cnJlbnQgPSBleGFjdCA9IHJlZ2V4cCArIHRo
aXMuZGVsaW1pdGVyICsgcjtcbiAgICAgIGlmICghdGhpcy5zdHJpY3QpIHtcbiAgICAgICAgZXhh
Y3QgKz0gXCJbXCIgKyB0aGlzLmRlbGltaXRlciArIFwiXT9cIjtcbiAgICAgIH1cbiAgICAgIG1h
dGNoID0gcGF0aC5tYXRjaChuZXcgUmVnRXhwKFwiXlwiICsgZXhhY3QpKTtcbiAgICAgIGlmICgh
bWF0Y2gpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAobWF0Y2hbMF0g
JiYgbWF0Y2hbMF0gPT0gcGF0aCAmJiByb3V0ZXNbcl1bbWV0aG9kXSkge1xuICAgICAgICBuZXh0
ID0gWyBbIHJvdXRlc1tyXS5iZWZvcmUsIHJvdXRlc1tyXVttZXRob2RdIF0uZmlsdGVyKEJvb2xl
YW4pIF07XG4gICAgICAgIG5leHQuYWZ0ZXIgPSBbIHJvdXRlc1tyXS5hZnRlciBdLmZpbHRlcihC
b29sZWFuKTtcbiAgICAgICAgbmV4dC5tYXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgbmV4dC5jYXB0
dXJlcyA9IG1hdGNoLnNsaWNlKDEpO1xuICAgICAgICBpZiAodGhpcy5yZWN1cnNlICYmIHJvdXRl
cyA9PT0gdGhpcy5yb3V0ZXMpIHtcbiAgICAgICAgICBuZXh0LnB1c2goWyByb3V0ZXMuYmVmb3Jl
LCByb3V0ZXMub24gXS5maWx0ZXIoQm9vbGVhbikpO1xuICAgICAgICAgIG5leHQuYWZ0ZXIgPSBu
ZXh0LmFmdGVyLmNvbmNhdChbIHJvdXRlcy5hZnRlciBdLmZpbHRlcihCb29sZWFuKSk7XG4gICAg
ICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbHRlclJvdXRlcyhuZXh0KTtcbiAgICAgIH1cbiAgICAg
IG5leHQgPSB0aGlzLnRyYXZlcnNlKG1ldGhvZCwgcGF0aCwgcm91dGVzW3JdLCBjdXJyZW50KTtc
biAgICAgIGlmIChuZXh0Lm1hdGNoZWQpIHtcbiAgICAgICAgaWYgKG5leHQubGVuZ3RoID4gMCkg
e1xuICAgICAgICAgIGZucyA9IGZucy5jb25jYXQobmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAg
aWYgKHRoaXMucmVjdXJzZSkge1xuICAgICAgICAgIGZucy5wdXNoKFsgcm91dGVzW3JdLmJlZm9y
ZSwgcm91dGVzW3JdLm9uIF0uZmlsdGVyKEJvb2xlYW4pKTtcbiAgICAgICAgICBuZXh0LmFmdGVy
ID0gbmV4dC5hZnRlci5jb25jYXQoWyByb3V0ZXNbcl0uYWZ0ZXIgXS5maWx0ZXIoQm9vbGVhbikp
O1xuICAgICAgICAgIGlmIChyb3V0ZXMgPT09IHRoaXMucm91dGVzKSB7XG4gICAgICAgICAgICBm
bnMucHVzaChbIHJvdXRlc1tcImJlZm9yZVwiXSwgcm91dGVzW1wib25cIl0gXS5maWx0ZXIoQm9v
bGVhbikpO1xuICAgICAgICAgICAgbmV4dC5hZnRlciA9IG5leHQuYWZ0ZXIuY29uY2F0KFsgcm91
dGVzW1wiYWZ0ZXJcIl0gXS5maWx0ZXIoQm9vbGVhbikpO1xuICAgICAgICAgIH1cbiAgICAgICAg
fVxuICAgICAgICBmbnMubWF0Y2hlZCA9IHRydWU7XG4gICAgICAgIGZucy5jYXB0dXJlcyA9IG5l
eHQuY2FwdHVyZXM7XG4gICAgICAgIGZucy5hZnRlciA9IG5leHQuYWZ0ZXI7XG4gICAgICAgIHJl
dHVybiBmaWx0ZXJSb3V0ZXMoZm5zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZh
bHNlO1xufTtcblxuUm91dGVyLnByb3RvdHlwZS5pbnNlcnQgPSBmdW5jdGlvbihtZXRob2QsIHBh
dGgsIHJvdXRlLCBwYXJlbnQpIHtcbiAgdmFyIG1ldGhvZFR5cGUsIHBhcmVudFR5cGUsIGlzQXJy
YXksIG5lc3RlZCwgcGFydDtcbiAgcGF0aCA9IHBhdGguZmlsdGVyKGZ1bmN0aW9uKHApIHtcbiAg
ICByZXR1cm4gcCAmJiBwLmxlbmd0aCA+IDA7XG4gIH0pO1xuICBwYXJlbnQgPSBwYXJlbnQgfHwg
dGhpcy5yb3V0ZXM7XG4gIHBhcnQgPSBwYXRoLnNoaWZ0KCk7XG4gIGlmICgvXFw6fFxcKi8udGVz
dChwYXJ0KSAmJiAhL1xcXFxkfFxcXFx3Ly50ZXN0KHBhcnQpKSB7XG4gICAgcGFydCA9IHJlZ2lm
eVN0cmluZyhwYXJ0LCB0aGlzLnBhcmFtcyk7XG4gIH1cbiAgaWYgKHBhdGgubGVuZ3RoID4gMCkg
e1xuICAgIHBhcmVudFtwYXJ0XSA9IHBhcmVudFtwYXJ0XSB8fCB7fTtcbiAgICByZXR1cm4gdGhp
cy5pbnNlcnQobWV0aG9kLCBwYXRoLCByb3V0ZSwgcGFyZW50W3BhcnRdKTtcbiAgfVxuICBpZiAo
IXBhcnQgJiYgIXBhdGgubGVuZ3RoICYmIHBhcmVudCA9PT0gdGhpcy5yb3V0ZXMpIHtcbiAgICBt
ZXRob2RUeXBlID0gdHlwZW9mIHBhcmVudFttZXRob2RdO1xuICAgIHN3aXRjaCAobWV0aG9kVHlw
ZSkge1xuICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgIHBhcmVudFttZXRob2RdID0gWyBw
YXJlbnRbbWV0aG9kXSwgcm91dGUgXTtcbiAgICAgIHJldHVybjtcbiAgICAgY2FzZSBcIm9iamVj
dFwiOlxuICAgICAgcGFyZW50W21ldGhvZF0ucHVzaChyb3V0ZSk7XG4gICAgICByZXR1cm47XG4g
ICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgIHBhcmVudFttZXRob2RdID0gcm91dGU7XG4g
ICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuICBwYXJlbnRUeXBlID0gdHlw
ZW9mIHBhcmVudFtwYXJ0XTtcbiAgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkocGFyZW50W3BhcnRd
KTtcbiAgaWYgKHBhcmVudFtwYXJ0XSAmJiAhaXNBcnJheSAmJiBwYXJlbnRUeXBlID09IFwib2Jq
ZWN0XCIpIHtcbiAgICBtZXRob2RUeXBlID0gdHlwZW9mIHBhcmVudFtwYXJ0XVttZXRob2RdO1xu
ICAgIHN3aXRjaCAobWV0aG9kVHlwZSkge1xuICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAg
IHBhcmVudFtwYXJ0XVttZXRob2RdID0gWyBwYXJlbnRbcGFydF1bbWV0aG9kXSwgcm91dGUgXTtc
biAgICAgIHJldHVybjtcbiAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgcGFyZW50W3BhcnRd
W21ldGhvZF0ucHVzaChyb3V0ZSk7XG4gICAgICByZXR1cm47XG4gICAgIGNhc2UgXCJ1bmRlZmlu
ZWRcIjpcbiAgICAgIHBhcmVudFtwYXJ0XVttZXRob2RdID0gcm91dGU7XG4gICAgICByZXR1cm47
XG4gICAgfVxuICB9IGVsc2UgaWYgKHBhcmVudFR5cGUgPT0gXCJ1bmRlZmluZWRcIikge1xuICAg
IG5lc3RlZCA9IHt9O1xuICAgIG5lc3RlZFttZXRob2RdID0gcm91dGU7XG4gICAgcGFyZW50W3Bh
cnRdID0gbmVzdGVkO1xuICAgIHJldHVybjtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZh
bGlkIHJvdXRlIGNvbnRleHQ6IFwiICsgcGFyZW50VHlwZSk7XG59O1xuXG5cblxuUm91dGVyLnBy
b3RvdHlwZS5leHRlbmQgPSBmdW5jdGlvbihtZXRob2RzKSB7XG4gIHZhciBzZWxmID0gdGhpcywg
bGVuID0gbWV0aG9kcy5sZW5ndGgsIGk7XG4gIGZ1bmN0aW9uIGV4dGVuZChtZXRob2QpIHtcbiAg
ICBzZWxmLl9tZXRob2RzW21ldGhvZF0gPSB0cnVlO1xuICAgIHNlbGZbbWV0aG9kXSA9IGZ1bmN0
aW9uKCkge1xuICAgICAgdmFyIGV4dHJhID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IFsgbWV0
aG9kLCBcIlwiIF0gOiBbIG1ldGhvZCBdO1xuICAgICAgc2VsZi5vbi5hcHBseShzZWxmLCBleHRy
YS5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSkpO1xuICAgIH07
XG4gIH1cbiAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgZXh0ZW5kKG1ldGhvZHNb
aV0pO1xuICB9XG59O1xuXG5Sb3V0ZXIucHJvdG90eXBlLnJ1bmxpc3QgPSBmdW5jdGlvbihmbnMp
IHtcbiAgdmFyIHJ1bmxpc3QgPSB0aGlzLmV2ZXJ5ICYmIHRoaXMuZXZlcnkuYmVmb3JlID8gWyB0
aGlzLmV2ZXJ5LmJlZm9yZSBdLmNvbmNhdChfZmxhdHRlbihmbnMpKSA6IF9mbGF0dGVuKGZucyk7
XG4gIGlmICh0aGlzLmV2ZXJ5ICYmIHRoaXMuZXZlcnkub24pIHtcbiAgICBydW5saXN0LnB1c2go
dGhpcy5ldmVyeS5vbik7XG4gIH1cbiAgcnVubGlzdC5jYXB0dXJlcyA9IGZucy5jYXB0dXJlcztc
biAgcnVubGlzdC5zb3VyY2UgPSBmbnMuc291cmNlO1xuICByZXR1cm4gcnVubGlzdDtcbn07XG5c
blJvdXRlci5wcm90b3R5cGUubW91bnQgPSBmdW5jdGlvbihyb3V0ZXMsIHBhdGgpIHtcbiAgaWYg
KCFyb3V0ZXMgfHwgdHlwZW9mIHJvdXRlcyAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5
KHJvdXRlcykpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBwYXRo
ID0gcGF0aCB8fCBbXTtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHBhdGgpKSB7XG4gICAgcGF0aCA9
IHBhdGguc3BsaXQoc2VsZi5kZWxpbWl0ZXIpO1xuICB9XG4gIGZ1bmN0aW9uIGluc2VydE9yTW91
bnQocm91dGUsIGxvY2FsKSB7XG4gICAgdmFyIHJlbmFtZSA9IHJvdXRlLCBwYXJ0cyA9IHJvdXRl
LnNwbGl0KHNlbGYuZGVsaW1pdGVyKSwgcm91dGVUeXBlID0gdHlwZW9mIHJvdXRlc1tyb3V0ZV0s
IGlzUm91dGUgPSBwYXJ0c1swXSA9PT0gXCJcIiB8fCAhc2VsZi5fbWV0aG9kc1twYXJ0c1swXV0s
IGV2ZW50ID0gaXNSb3V0ZSA/IFwib25cIiA6IHJlbmFtZTtcbiAgICBpZiAoaXNSb3V0ZSkge1xu
ICAgICAgcmVuYW1lID0gcmVuYW1lLnNsaWNlKChyZW5hbWUubWF0Y2gobmV3IFJlZ0V4cChcIl5c
IiArIHNlbGYuZGVsaW1pdGVyKSkgfHwgWyBcIlwiIF0pWzBdLmxlbmd0aCk7XG4gICAgICBwYXJ0
cy5zaGlmdCgpO1xuICAgIH1cbiAgICBpZiAoaXNSb3V0ZSAmJiByb3V0ZVR5cGUgPT09IFwib2Jq
ZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkocm91dGVzW3JvdXRlXSkpIHtcbiAgICAgIGxvY2FsID0g
bG9jYWwuY29uY2F0KHBhcnRzKTtcbiAgICAgIHNlbGYubW91bnQocm91dGVzW3JvdXRlXSwgbG9j
YWwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNSb3V0ZSkge1xuICAgICAgbG9j
YWwgPSBsb2NhbC5jb25jYXQocmVuYW1lLnNwbGl0KHNlbGYuZGVsaW1pdGVyKSk7XG4gICAgICBs
b2NhbCA9IHRlcm1pbmF0b3IobG9jYWwsIHNlbGYuZGVsaW1pdGVyKTtcbiAgICB9XG4gICAgc2Vs
Zi5pbnNlcnQoZXZlbnQsIGxvY2FsLCByb3V0ZXNbcm91dGVdKTtcbiAgfVxuICBmb3IgKHZhciBy
b3V0ZSBpbiByb3V0ZXMpIHtcbiAgICBpZiAocm91dGVzLmhhc093blByb3BlcnR5KHJvdXRlKSkg
e1xuICAgICAgaW5zZXJ0T3JNb3VudChyb3V0ZSwgcGF0aC5zbGljZSgwKSk7XG4gICAgfVxuICB9
XG59O1xuXG5cblxufSh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIiA/IGV4cG9ydHMgOiB3
aW5kb3cpKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAu
L34vZGlyZWN0b3IvYnVpbGQvZGlyZWN0b3IuanNcbi8vIG1vZHVsZSBpZCA9IHJtbmhcbi8vIG1v
ZHVsZSBjaHVua3MgPSAxIiwiLyoqXG4gKiBUcmFuc2xhdGVzIHRoZSBsaXN0IGZvcm1hdCBwcm9k
dWNlZCBieSBjc3MtbG9hZGVyIGludG8gc29tZXRoaW5nXG4gKiBlYXNpZXIgdG8gbWFuaXB1bGF0
ZS5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBsaXN0VG9TdHlsZXMgKHBhcmVudElk
LCBsaXN0KSB7XG4gIHZhciBzdHlsZXMgPSBbXVxuICB2YXIgbmV3U3R5bGVzID0ge31cbiAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGl0ZW0gPSBsaXN0
W2ldXG4gICAgdmFyIGlkID0gaXRlbVswXVxuICAgIHZhciBjc3MgPSBpdGVtWzFdXG4gICAgdmFy
IG1lZGlhID0gaXRlbVsyXVxuICAgIHZhciBzb3VyY2VNYXAgPSBpdGVtWzNdXG4gICAgdmFyIHBh
cnQgPSB7XG4gICAgICBpZDogcGFyZW50SWQgKyAnOicgKyBpLFxuICAgICAgY3NzOiBjc3MsXG4g
ICAgICBtZWRpYTogbWVkaWEsXG4gICAgICBzb3VyY2VNYXA6IHNvdXJjZU1hcFxuICAgIH1cbiAg
ICBpZiAoIW5ld1N0eWxlc1tpZF0pIHtcbiAgICAgIHN0eWxlcy5wdXNoKG5ld1N0eWxlc1tpZF0g
PSB7IGlkOiBpZCwgcGFydHM6IFtwYXJ0XSB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdTdHls
ZXNbaWRdLnBhcnRzLnB1c2gocGFydClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN0eWxlc1xufVxu
XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3Z1ZS1z
dHlsZS1sb2FkZXIvbGliL2xpc3RUb1N0eWxlcy5qc1xuLy8gbW9kdWxlIGlkID0gdFRWa1xuLy8g
bW9kdWxlIGNodW5rcyA9IDEiXSwic291cmNlUm9vdCI6IiJ9ClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRl
cjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvdnVlanMtY2xpL2lu
ZGV4Lmh0bWwgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy92dWVqcy1jbGkvaW5kZXguaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi40NzliYTQ4ZjBmZWY1MDQxYTRhYzBlYWI1YzM5MGJkZWM3OWFiODAwCi0tLSAv
ZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9y
ZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvdnVlanMtY2xpL2luZGV4Lmh0
bWwKQEAgLTAsMCArMSwxMSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKyAgPGhlYWQ+Cisg
ICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICAgIDx0aXRsZT52dWUtY2xpLXRvZG9tdmM8L3Rp
dGxlPgorICA8L2hlYWQ+CisgIDxib2R5PgorICAgIDxkaXYgaWQ9ImFwcCI+PC9kaXY+CisgICAg
PCEtLSBidWlsdCBmaWxlcyB3aWxsIGJlIGF1dG8gaW5qZWN0ZWQgLS0+CisgIDwvYm9keT4KKzwv
aHRtbD4KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIy
LjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3Z1ZWpzLWNsaS9zcmMv
QXBwLnZ1ZSBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3Z1ZWpzLWNsaS9zcmMvQXBwLnZ1ZQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4xZWFlZGVhNTAwYjQyYTNlMmYwZjhiNDQwY2Y1ZWU5ZmI3NjhiYjM3Ci0tLSAv
ZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9y
ZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvdnVlanMtY2xpL3NyYy9BcHAu
dnVlCkBAIC0wLDAgKzEsMTYgQEAKKzx0ZW1wbGF0ZT4KKyAgPGRpdiBpZD0iYXBwIj4KKyAgICA8
VG9kb3M+PC9Ub2Rvcz4KKyAgPC9kaXY+Cis8L3RlbXBsYXRlPgorCis8c2NyaXB0PgoraW1wb3J0
IFRvZG9zIGZyb20gJy4vY29tcG9uZW50cy9Ub2RvcycKKworZXhwb3J0IGRlZmF1bHQgeworICAg
IG5hbWU6ICdhcHAnLAorICAgIGNvbXBvbmVudHM6IHsKKyAgICAgICAgVG9kb3MKKyAgICB9Cit9
Cis8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRv
bWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3Z1ZWpzLWNs
aS9zcmMvY29tcG9uZW50cy9Ub2Rvcy52dWUgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1Nw
ZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy92dWVq
cy1jbGkvc3JjL2NvbXBvbmVudHMvVG9kb3MudnVlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRjMjBiNGIzYWU0NTFm
ZjRkMzA0M2ZiMjM2MmEyNzgyMTA0MGQxMmEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9i
cm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy92dWVqcy1jbGkvc3JjL2NvbXBvbmVudHMvVG9kb3MudnVlCkBAIC0wLDAg
KzEsMTEyIEBACis8dGVtcGxhdGU+CisgICAgPHNlY3Rpb24gY2xhc3M9InRvZG9hcHAiPgorICAg
ICAgICA8aGVhZGVyIGNsYXNzPSJoZWFkZXIiPgorICAgICAgICAgICAgPGgxPlRvZG9zPC9oMT4K
KyAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0ibmV3LXRvZG8iIGF1dG9mb2N1
cyBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IldoYXQgbmVlZHMgdG8gYmUgZG9uZT8i
IHYtbW9kZWw9Im5ld1RvZG8iIEBrZXl1cC5lbnRlcj0iYWRkVG9kbyIgLz4KKyAgICAgICAgPC9o
ZWFkZXI+CisgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJtYWluIiB2LXNob3c9InRvZG9zLmxlbmd0
aCIgdi1jbG9haz4KKyAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgY2xhc3M9InRv
Z2dsZS1hbGwiIHYtbW9kZWw9ImFsbERvbmUiPgorICAgICAgICAgICAgPHVsIGNsYXNzPSJ0b2Rv
LWxpc3QiPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0idG9kbyIgdi1mb3I9InRvZG8gaW4g
ZmlsdGVyZWRUb2RvcyIgOmNsYXNzPSJ7Y29tcGxldGVkIDogdG9kby5jb21wbGV0ZWQsIGVkaXRp
bmcgOiB0b2RvID09PSBlZGl0aW5nIH0iPgorICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNz
PSJ2aWV3Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIg
di1tb2RlbD0idG9kby5jb21wbGV0ZWQiIGNsYXNzPSJ0b2dnbGUiPgorICAgICAgICAgICAgICAg
ICAgICAgICAgPGxhYmVsIEBkYmxjbGljaz0iZWRpdFRvZG8odG9kbykiPnt7IHRvZG8udGl0bGUg
fX08L2xhYmVsPgorICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZGVzdHJv
eSIgQGNsaWNrLnByZXZlbnQ9ImRlbGV0ZVRvZG8odG9kbykiPjwvYnV0dG9uPgorICAgICAgICAg
ICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQi
IGNsYXNzPSJlZGl0IiB2LW1vZGVsPSJ0b2RvLnRpdGxlIiBAa2V5dXAuZW50ZXI9ImRvbmVFZGl0
IiBAYmx1cj0iZG9uZUVkaXQiIHYtdG9kb0ZvY3VzPSJ0b2RvID09PSBlZGl0aW5nIj48L2lucHV0
PgorICAgICAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICA8L3VsPgorICAgICAgICA8L3Nl
Y3Rpb24+CisgICAgICAgIDxmb290ZXIgY2xhc3M9ImZvb3RlciIgdi1zaG93PSJ0b2Rvcy5sZW5n
dGggPiAwIj4KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0b2RvLWNvdW50Ij4KKyAgICAgICAg
ICAgIDxzdHJvbmc+e3sgcmVtYWluaW5nIH19PC9zdHJvbmc+IHt7IHJlbWFpbmluZyB8IHBsdXJh
bGl6ZSB9fSBsZWZ0CisgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICA8dWwgY2xhc3M9
ImZpbHRlcnMiPgorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjL2FsbCIgOmNsYXNzPSJ7
c2VsZWN0ZWQ6IGZpbHRlciA9PSAnYWxsJ30iIEBjbGljaz0iZmlsdGVyID0gJ2FsbCciPkFsbDwv
YT48L2xpPgorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjL2FjdGl2ZSIgOmNsYXNzPSJ7
c2VsZWN0ZWQ6IGZpbHRlciA9PSAnYWN0aXZlJ30iIEBjbGljaz0iZmlsdGVyID0gJ2FjdGl2ZSci
PkFjdGl2ZTwvYT48L2xpPgorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjL2NvbXBsZXRl
ZCIgOmNsYXNzPSJ7c2VsZWN0ZWQ6IGZpbHRlciA9PSAnY29tcGxldGVkJ30iIEBjbGljaz0iZmls
dGVyID0gJ2NvbXBsZXRlZCciPkNvbXBsZXRlZDwvYT48L2xpPgorICAgICAgICAgICAgPC91bD4K
KyAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImNsZWFyLWNvbXBsZXRlZCIgdi1zaG93PSJjb21w
bGV0ZWQiIEBjbGljay5wcmV2ZW50PSJkZWxldGVDb21wbGV0ZWQiPkNsZWFyIENvbXBsZXRlZDwv
YnV0dG9uPgorICAgICAgICA8L2Zvb3Rlcj4KKyAgICA8L3NlY3Rpb24+Cis8L3RlbXBsYXRlPgor
Cis8c2NyaXB0PgoraW1wb3J0IFZ1ZSBmcm9tICd2dWUnCisKK2V4cG9ydCBkZWZhdWx0IHsKKyAg
ICBkYXRhICgpIHsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHRvZG9zOiBbXSwKKyAg
ICAgICAgICAgIG5ld1RvZG86ICcnLAorICAgICAgICAgICAgZmlsdGVyOiAnYWxsJywKKyAgICAg
ICAgICAgIGFsbERvbmU6IGZhbHNlLAorICAgICAgICAgICAgZWRpdGluZzogbnVsbAorICAgICAg
ICB9CisgICAgfSwKKyAgICBmaWx0ZXJzOiB7CisgICAgICAgIHBsdXJhbGl6ZTogZnVuY3Rpb24g
KG4pIHsKKyAgICAgICAgcmV0dXJuIG4gPT09IDEgPyAnaXRlbScgOiAnaXRlbXMnCisgICAgICAg
IH0KKyAgICB9LAorICAgIGRpcmVjdGl2ZXM6IHsKKyAgICAgICAgdG9kb0ZvY3VzIChlbCwgdmFs
dWUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgICAgIFZ1ZS5uZXh0
VGljayhfID0+IHsKKyAgICAgICAgICAgICAgICAgICAgZWwuZm9jdXMoKQorICAgICAgICAgICAg
ICAgIH0pCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9LAorICAgIG1ldGhvZHM6IHsK
KyAgICAgICAgYWRkVG9kbyAoKSB7CisgICAgICAgICAgICB0aGlzLnRvZG9zLnB1c2goeworICAg
ICAgICAgICAgICAgIGNvbXBsZXRlZDogZmFsc2UsCisgICAgICAgICAgICAgICAgdGl0bGU6IHRo
aXMubmV3VG9kbworICAgICAgICAgICAgfSkKKyAgICAgICAgICAgIHRoaXMubmV3VG9kbyA9ICcn
CisgICAgICAgIH0sCisgICAgICAgIGRlbGV0ZVRvZG8gKHRvZG8pIHsKKyAgICAgICAgICAgIHRo
aXMudG9kb3MgPSB0aGlzLnRvZG9zLmZpbHRlcih0ID0+IHQgIT09IHRvZG8pCisgICAgICAgIH0s
CisgICAgICAgIGRlbGV0ZUNvbXBsZXRlZCAoKSB7CisgICAgICAgICAgICB0aGlzLnRvZG9zID0g
dGhpcy50b2Rvcy5maWx0ZXIodG9kbyA9PiAhdG9kby5jb21wbGV0ZWQpCisgICAgICAgIH0sCisg
ICAgICAgIGVkaXRUb2RvICh0b2RvKSB7CisgICAgICAgICAgICB0aGlzLmVkaXRpbmcgPSB0b2Rv
CisgICAgICAgIH0sCisgICAgICAgIGRvbmVFZGl0ICgpIHsKKyAgICAgICAgICAgIHRoaXMuZWRp
dGluZyA9IG51bGwKKyAgICAgICAgfQorICAgIH0sCisgICAgY29tcHV0ZWQ6IHsKKyAgICAgICAg
cmVtYWluaW5nICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLnRvZG9zLmZpbHRlcih0b2Rv
ID0+ICF0b2RvLmNvbXBsZXRlZCkubGVuZ3RoCisgICAgICAgIH0sCisgICAgICAgIGNvbXBsZXRl
ZCAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy50b2Rvcy5maWx0ZXIodG9kbyA9PiB0b2Rv
LmNvbXBsZXRlZCkubGVuZ3RoCisgICAgICAgIH0sCisgICAgICAgIGZpbHRlcmVkVG9kb3MgKCkg
eworICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVyID09PSAnYWN0aXZlJykgeworICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzLnRvZG9zLmZpbHRlcih0b2RvID0+ICF0b2RvLmNvbXBsZXRlZCkK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5maWx0ZXIgPT09ICdjb21wbGV0ZWQnKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9kb3MuZmlsdGVyKHRvZG8gPT4gdG9kby5jb21w
bGV0ZWQpCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiB0aGlzLnRvZG9zCisg
ICAgICAgIH0sCisgICAgICAgIGFsbERvbmU6IHsKKyAgICAgICAgICAgIGdldCAoKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVtYWluaW5nID09PSAwCisgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgc2V0ICh2YWx1ZSkgeworICAgICAgICAgICAgICAgIHRoaXMudG9kb3MuZm9y
RWFjaCh0b2RvID0+IHsKKyAgICAgICAgICAgICAgICAgICAgdG9kby5jb21wbGV0ZWQgPSB2YWx1
ZQorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9
Cis8L3NjcmlwdD4KKworPHN0eWxlIHNyYz0iLi90b2RvLmNzcyI+PC9zdHlsZT4KZGlmZiAtLWdp
dCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3Z1ZWpzLWNsaS9zcmMvY29tcG9uZW50cy90b2Rv
LmNzcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2Vz
L3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3Z1ZWpzLWNsaS9zcmMvY29tcG9uZW50cy90
b2RvLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5lMDRmYmRiZGI0ZWQ0YWZlMDlkNTU0M2RiNTIwZGM2YTlkZGQ0
MWIyCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9t
ZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvdnVlanMtY2xp
L3NyYy9jb21wb25lbnRzL3RvZG8uY3NzCkBAIC0wLDAgKzEsMzc2IEBACitodG1sLAorYm9keSB7
CisgICAgbWFyZ2luOiAwOworICAgIHBhZGRpbmc6IDA7Cit9CisKK2J1dHRvbiB7CisgICAgbWFy
Z2luOiAwOworICAgIHBhZGRpbmc6IDA7CisgICAgYm9yZGVyOiAwOworICAgIGJhY2tncm91bmQ6
IG5vbmU7CisgICAgZm9udC1zaXplOiAxMDAlOworICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGlu
ZTsKKyAgICBmb250LWZhbWlseTogaW5oZXJpdDsKKyAgICBmb250LXdlaWdodDogaW5oZXJpdDsK
KyAgICBjb2xvcjogaW5oZXJpdDsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CisgICAg
YXBwZWFyYW5jZTogbm9uZTsKKyAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNl
ZDsKKyAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOworfQorCitib2R5IHsK
KyAgICBmb250OiAxNHB4ICdIZWx2ZXRpY2EgTmV1ZScsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMt
c2VyaWY7CisgICAgbGluZS1oZWlnaHQ6IDEuNGVtOworICAgIGJhY2tncm91bmQ6ICNmNWY1ZjU7
CisgICAgY29sb3I6ICM0ZDRkNGQ7CisgICAgbWluLXdpZHRoOiAyMzBweDsKKyAgICBtYXgtd2lk
dGg6IDU1MHB4OworICAgIG1hcmdpbjogMCBhdXRvOworICAgIC13ZWJraXQtZm9udC1zbW9vdGhp
bmc6IGFudGlhbGlhc2VkOworICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7
CisgICAgZm9udC13ZWlnaHQ6IDMwMDsKK30KKworOmZvY3VzIHsKKyAgICBvdXRsaW5lOiAwOwor
fQorCisuaGlkZGVuIHsKKyAgICBkaXNwbGF5OiBub25lOworfQorCisudG9kb2FwcCB7CisgICAg
YmFja2dyb3VuZDogI2ZmZjsKKyAgICBtYXJnaW46IDEzMHB4IDAgNDBweCAwOworICAgIHBvc2l0
aW9uOiByZWxhdGl2ZTsKKyAgICBib3gtc2hhZG93OiAwIDJweCA0cHggMCByZ2JhKDAsIDAsIDAs
IDAuMiksCisgICAgICAgICAgICAgICAgMCAyNXB4IDUwcHggMCByZ2JhKDAsIDAsIDAsIDAuMSk7
Cit9CisKKy50b2RvYXBwIGlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHsKKyAgICBm
b250LXN0eWxlOiBpdGFsaWM7CisgICAgZm9udC13ZWlnaHQ6IDMwMDsKKyAgICBjb2xvcjogI2U2
ZTZlNjsKK30KKworLnRvZG9hcHAgaW5wdXQ6Oi1tb3otcGxhY2Vob2xkZXIgeworICAgIGZvbnQt
c3R5bGU6IGl0YWxpYzsKKyAgICBmb250LXdlaWdodDogMzAwOworICAgIGNvbG9yOiAjZTZlNmU2
OworfQorCisudG9kb2FwcCBpbnB1dDo6aW5wdXQtcGxhY2Vob2xkZXIgeworICAgIGZvbnQtc3R5
bGU6IGl0YWxpYzsKKyAgICBmb250LXdlaWdodDogMzAwOworICAgIGNvbG9yOiAjZTZlNmU2Owor
fQorCisudG9kb2FwcCBoMSB7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHRvcDogLTE1
NXB4OworICAgIHdpZHRoOiAxMDAlOworICAgIGZvbnQtc2l6ZTogMTAwcHg7CisgICAgZm9udC13
ZWlnaHQ6IDEwMDsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgY29sb3I6IHJnYmEoMTc1
LCA0NywgNDcsIDAuMTUpOworICAgIC13ZWJraXQtdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVn
aWJpbGl0eTsKKyAgICAtbW96LXRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7Cisg
ICAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKK30KKworLm5ldy10b2RvLAor
LmVkaXQgeworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBtYXJnaW46IDA7CisgICAgd2lk
dGg6IDEwMCU7CisgICAgZm9udC1zaXplOiAyNHB4OworICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0
OworICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0OworICAgIGxpbmUtaGVpZ2h0OiAxLjRlbTsKKyAg
ICBib3JkZXI6IDA7CisgICAgY29sb3I6IGluaGVyaXQ7CisgICAgcGFkZGluZzogNnB4OworICAg
IGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CisgICAgYm94LXNoYWRvdzogaW5zZXQgMCAtMXB4IDVw
eCAwIHJnYmEoMCwgMCwgMCwgMC4yKTsKKyAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OworICAg
IC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOworICAgIC1tb3otb3N4LWZvbnQt
c21vb3RoaW5nOiBncmF5c2NhbGU7Cit9CisKKy5uZXctdG9kbyB7CisgICAgcGFkZGluZzogMTZw
eCAxNnB4IDE2cHggNjBweDsKKyAgICBib3JkZXI6IG5vbmU7CisgICAgYmFja2dyb3VuZDogcmdi
YSgwLCAwLCAwLCAwLjAwMyk7CisgICAgYm94LXNoYWRvdzogaW5zZXQgMCAtMnB4IDFweCByZ2Jh
KDAsMCwwLDAuMDMpOworfQorCisubWFpbiB7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAg
IHotaW5kZXg6IDI7CisgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlNmU2ZTY7Cit9CisKKy50
b2dnbGUtYWxsIHsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgYm9yZGVyOiBub25lOyAv
KiBNb2JpbGUgU2FmYXJpICovCisgICAgb3BhY2l0eTogMDsKKyAgICBwb3NpdGlvbjogYWJzb2x1
dGU7Cit9CisKKy50b2dnbGUtYWxsICsgbGFiZWwgeworICAgIHdpZHRoOiA2MHB4OworICAgIGhl
aWdodDogMzRweDsKKyAgICBmb250LXNpemU6IDA7CisgICAgcG9zaXRpb246IGFic29sdXRlOwor
ICAgIHRvcDogLTUycHg7CisgICAgbGVmdDogLTEzcHg7CisgICAgLXdlYmtpdC10cmFuc2Zvcm06
IHJvdGF0ZSg5MGRlZyk7CisgICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOworfQorCisudG9n
Z2xlLWFsbCArIGxhYmVsOmJlZm9yZSB7CisgICAgY29udGVudDogJ+Kdryc7CisgICAgZm9udC1z
aXplOiAyMnB4OworICAgIGNvbG9yOiAjZTZlNmU2OworICAgIHBhZGRpbmc6IDEwcHggMjdweCAx
MHB4IDI3cHg7Cit9CisKKy50b2dnbGUtYWxsOmNoZWNrZWQgKyBsYWJlbDpiZWZvcmUgeworICAg
IGNvbG9yOiAjNzM3MzczOworfQorCisudG9kby1saXN0IHsKKyAgICBtYXJnaW46IDA7CisgICAg
cGFkZGluZzogMDsKKyAgICBsaXN0LXN0eWxlOiBub25lOworfQorCisudG9kby1saXN0IGxpIHsK
KyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgZm9udC1zaXplOiAyNHB4OworICAgIGJvcmRl
ci1ib3R0b206IDFweCBzb2xpZCAjZWRlZGVkOworfQorCisudG9kby1saXN0IGxpOmxhc3QtY2hp
bGQgeworICAgIGJvcmRlci1ib3R0b206IG5vbmU7Cit9CisKKy50b2RvLWxpc3QgbGkuZWRpdGlu
ZyB7CisgICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKKyAgICBwYWRkaW5nOiAwOworfQorCisudG9k
by1saXN0IGxpLmVkaXRpbmcgLmVkaXQgeworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIHdpZHRo
OiA1MDZweDsKKyAgICBwYWRkaW5nOiAxMnB4IDE2cHg7CisgICAgbWFyZ2luOiAwIDAgMCA0M3B4
OworfQorCisudG9kby1saXN0IGxpLmVkaXRpbmcgLnZpZXcgeworICAgIGRpc3BsYXk6IG5vbmU7
Cit9CisKKy50b2RvLWxpc3QgbGkgLnRvZ2dsZSB7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOwor
ICAgIHdpZHRoOiA0MHB4OworICAgIC8qIGF1dG8sIHNpbmNlIG5vbi1XZWJLaXQgYnJvd3NlcnMg
ZG9lc24ndCBzdXBwb3J0IGlucHV0IHN0eWxpbmcgKi8KKyAgICBoZWlnaHQ6IGF1dG87CisgICAg
cG9zaXRpb246IGFic29sdXRlOworICAgIHRvcDogMDsKKyAgICBib3R0b206IDA7CisgICAgbWFy
Z2luOiBhdXRvIDA7CisgICAgYm9yZGVyOiBub25lOyAvKiBNb2JpbGUgU2FmYXJpICovCisgICAg
LXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOworICAgIGFwcGVhcmFuY2U6IG5vbmU7Cit9CisKKy50
b2RvLWxpc3QgbGkgLnRvZ2dsZSB7CisgICAgb3BhY2l0eTogMDsKK30KKworLnRvZG8tbGlzdCBs
aSAudG9nZ2xlICsgbGFiZWwgeworICAgIC8qCisgICAgICAgIEZpcmVmb3ggcmVxdWlyZXMgYCNg
IHRvIGJlIGVzY2FwZWQgLSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNn
aT9pZD05MjI0MzMKKyAgICAgICAgSUUgYW5kIEVkZ2UgcmVxdWlyZXMgKmV2ZXJ5dGhpbmcqIHRv
IGJlIGVzY2FwZWQgdG8gcmVuZGVyLCBzbyB3ZSBkbyB0aGF0IGluc3RlYWQgb2YganVzdCB0aGUg
YCNgIC0gaHR0cHM6Ly9kZXZlbG9wZXIubWljcm9zb2Z0LmNvbS9lbi11cy9taWNyb3NvZnQtZWRn
ZS9wbGF0Zm9ybS9pc3N1ZXMvNzE1NzQ1OS8KKyAgICAqLworICAgIGJhY2tncm91bmQtaW1hZ2U6
IHVybCgnZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsJTNDc3ZnJTIweG1sbnMlM0QlMjJodHRwJTNB
Ly93d3cudzMub3JnLzIwMDAvc3ZnJTIyJTIwd2lkdGglM0QlMjI0MCUyMiUyMGhlaWdodCUzRCUy
MjQwJTIyJTIwdmlld0JveCUzRCUyMi0xMCUyMC0xOCUyMDEwMCUyMDEzNSUyMiUzRSUzQ2NpcmNs
ZSUyMGN4JTNEJTIyNTAlMjIlMjBjeSUzRCUyMjUwJTIyJTIwciUzRCUyMjUwJTIyJTIwZmlsbCUz
RCUyMm5vbmUlMjIlMjBzdHJva2UlM0QlMjIlMjNlZGVkZWQlMjIlMjBzdHJva2Utd2lkdGglM0Ql
MjIzJTIyLyUzRSUzQy9zdmclM0UnKTsKKyAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0
OworICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBsZWZ0OworfQorCisudG9kby1saXN0
IGxpIC50b2dnbGU6Y2hlY2tlZCArIGxhYmVsIHsKKyAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwo
J2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LCUzQ3N2ZyUyMHhtbG5zJTNEJTIyaHR0cCUzQS8vd3d3
LnczLm9yZy8yMDAwL3N2ZyUyMiUyMHdpZHRoJTNEJTIyNDAlMjIlMjBoZWlnaHQlM0QlMjI0MCUy
MiUyMHZpZXdCb3glM0QlMjItMTAlMjAtMTglMjAxMDAlMjAxMzUlMjIlM0UlM0NjaXJjbGUlMjBj
eCUzRCUyMjUwJTIyJTIwY3klM0QlMjI1MCUyMiUyMHIlM0QlMjI1MCUyMiUyMGZpbGwlM0QlMjJu
b25lJTIyJTIwc3Ryb2tlJTNEJTIyJTIzYmRkYWQ1JTIyJTIwc3Ryb2tlLXdpZHRoJTNEJTIyMyUy
Mi8lM0UlM0NwYXRoJTIwZmlsbCUzRCUyMiUyMzVkYzJhZiUyMiUyMGQlM0QlMjJNNzIlMjAyNUw0
MiUyMDcxJTIwMjclMjA1NmwtNCUyMDQlMjAyMCUyMDIwJTIwMzQtNTJ6JTIyLyUzRSUzQy9zdmcl
M0UnKTsKK30KKworLnRvZG8tbGlzdCBsaSBsYWJlbCB7CisgICAgd29yZC1icmVhazogYnJlYWst
YWxsOworICAgIHBhZGRpbmc6IDE1cHggMTVweCAxNXB4IDYwcHg7CisgICAgZGlzcGxheTogYmxv
Y2s7CisgICAgbGluZS1oZWlnaHQ6IDEuMjsKKyAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjRzOwor
fQorCisudG9kby1saXN0IGxpLmNvbXBsZXRlZCBsYWJlbCB7CisgICAgY29sb3I6ICNkOWQ5ZDk7
CisgICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Cit9CisKKy50b2RvLWxpc3QgbGkg
LmRlc3Ryb3kgeworICAgIGRpc3BsYXk6IG5vbmU7CisgICAgcG9zaXRpb246IGFic29sdXRlOwor
ICAgIHRvcDogMDsKKyAgICByaWdodDogMTBweDsKKyAgICBib3R0b206IDA7CisgICAgd2lkdGg6
IDQwcHg7CisgICAgaGVpZ2h0OiA0MHB4OworICAgIG1hcmdpbjogYXV0byAwOworICAgIGZvbnQt
c2l6ZTogMzBweDsKKyAgICBjb2xvcjogI2NjOWE5YTsKKyAgICBtYXJnaW4tYm90dG9tOiAxMXB4
OworICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMnMgZWFzZS1vdXQ7Cit9CisKKy50b2RvLWxpc3Qg
bGkgLmRlc3Ryb3k6aG92ZXIgeworICAgIGNvbG9yOiAjYWY1YjVlOworfQorCisudG9kby1saXN0
IGxpIC5kZXN0cm95OmFmdGVyIHsKKyAgICBjb250ZW50OiAnw5cnOworfQorCisudG9kby1saXN0
IGxpOmhvdmVyIC5kZXN0cm95IHsKKyAgICBkaXNwbGF5OiBibG9jazsKK30KKworLnRvZG8tbGlz
dCBsaSAuZWRpdCB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworLnRvZG8tbGlzdCBsaS5lZGl0
aW5nOmxhc3QtY2hpbGQgeworICAgIG1hcmdpbi1ib3R0b206IC0xcHg7Cit9CisKKy5mb290ZXIg
eworICAgIGNvbG9yOiAjNzc3OworICAgIHBhZGRpbmc6IDEwcHggMTVweDsKKyAgICBoZWlnaHQ6
IDIwcHg7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgIGJvcmRlci10b3A6IDFweCBzb2xp
ZCAjZTZlNmU2OworfQorCisuZm9vdGVyOmJlZm9yZSB7CisgICAgY29udGVudDogJyc7CisgICAg
cG9zaXRpb246IGFic29sdXRlOworICAgIHJpZ2h0OiAwOworICAgIGJvdHRvbTogMDsKKyAgICBs
ZWZ0OiAwOworICAgIGhlaWdodDogNTBweDsKKyAgICBvdmVyZmxvdzogaGlkZGVuOworICAgIGJv
eC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMiksCisgICAgICAgICAgICAgICAg
MCA4cHggMCAtM3B4ICNmNmY2ZjYsCisgICAgICAgICAgICAgICAgMCA5cHggMXB4IC0zcHggcmdi
YSgwLCAwLCAwLCAwLjIpLAorICAgICAgICAgICAgICAgIDAgMTZweCAwIC02cHggI2Y2ZjZmNiwK
KyAgICAgICAgICAgICAgICAwIDE3cHggMnB4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpOworfQor
CisudG9kby1jb3VudCB7CisgICAgZmxvYXQ6IGxlZnQ7CisgICAgdGV4dC1hbGlnbjogbGVmdDsK
K30KKworLnRvZG8tY291bnQgc3Ryb25nIHsKKyAgICBmb250LXdlaWdodDogMzAwOworfQorCisu
ZmlsdGVycyB7CisgICAgbWFyZ2luOiAwOworICAgIHBhZGRpbmc6IDA7CisgICAgbGlzdC1zdHls
ZTogbm9uZTsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgcmlnaHQ6IDA7CisgICAgbGVm
dDogMDsKK30KKworLmZpbHRlcnMgbGkgeworICAgIGRpc3BsYXk6IGlubGluZTsKK30KKworLmZp
bHRlcnMgbGkgYSB7CisgICAgY29sb3I6IGluaGVyaXQ7CisgICAgbWFyZ2luOiAzcHg7CisgICAg
cGFkZGluZzogM3B4IDdweDsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgICAgYm9yZGVy
OiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CisgICAgYm9yZGVyLXJhZGl1czogM3B4OworfQorCisu
ZmlsdGVycyBsaSBhOmhvdmVyIHsKKyAgICBib3JkZXItY29sb3I6IHJnYmEoMTc1LCA0NywgNDcs
IDAuMSk7Cit9CisKKy5maWx0ZXJzIGxpIGEuc2VsZWN0ZWQgeworICAgIGJvcmRlci1jb2xvcjog
cmdiYSgxNzUsIDQ3LCA0NywgMC4yKTsKK30KKworLmNsZWFyLWNvbXBsZXRlZCwKK2h0bWwgLmNs
ZWFyLWNvbXBsZXRlZDphY3RpdmUgeworICAgIGZsb2F0OiByaWdodDsKKyAgICBwb3NpdGlvbjog
cmVsYXRpdmU7CisgICAgbGluZS1oZWlnaHQ6IDIwcHg7CisgICAgdGV4dC1kZWNvcmF0aW9uOiBu
b25lOworICAgIGN1cnNvcjogcG9pbnRlcjsKK30KKworLmNsZWFyLWNvbXBsZXRlZDpob3ZlciB7
CisgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cit9CisKKy5pbmZvIHsKKyAgICBtYXJn
aW46IDY1cHggYXV0byAwOworICAgIGNvbG9yOiAjYmZiZmJmOworICAgIGZvbnQtc2l6ZTogMTBw
eDsKKyAgICB0ZXh0LXNoYWRvdzogMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7Cisg
ICAgdGV4dC1hbGlnbjogY2VudGVyOworfQorCisuaW5mbyBwIHsKKyAgICBsaW5lLWhlaWdodDog
MTsKK30KKworLmluZm8gYSB7CisgICAgY29sb3I6IGluaGVyaXQ7CisgICAgdGV4dC1kZWNvcmF0
aW9uOiBub25lOworICAgIGZvbnQtd2VpZ2h0OiA0MDA7Cit9CisKKy5pbmZvIGE6aG92ZXIgewor
ICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCisvKgorICAgIEhhY2sgdG8gcmVt
b3ZlIGJhY2tncm91bmQgZnJvbSBNb2JpbGUgU2FmYXJpLgorICAgIENhbid0IHVzZSBpdCBnbG9i
YWxseSBzaW5jZSBpdCBkZXN0cm95cyBjaGVja2JveGVzIGluIEZpcmVmb3gKKyovCitAbWVkaWEg
c2NyZWVuIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOjApIHsKKyAgICAudG9n
Z2xlLWFsbCwKKyAgICAudG9kby1saXN0IGxpIC50b2dnbGUgeworICAgICAgICBiYWNrZ3JvdW5k
OiBub25lOworICAgIH0KKworICAgIC50b2RvLWxpc3QgbGkgLnRvZ2dsZSB7CisgICAgICAgIGhl
aWdodDogNDBweDsKKyAgICB9Cit9CisKK0BtZWRpYSAobWF4LXdpZHRoOiA0MzBweCkgeworICAg
IC5mb290ZXIgeworICAgICAgICBoZWlnaHQ6IDUwcHg7CisgICAgfQorCisgICAgLmZpbHRlcnMg
eworICAgICAgICBib3R0b206IDEwcHg7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMv
YnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvdnVlanMtY2xpL3NyYy9tYWluLmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJl
bmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvdnVlanMtY2xpL3NyYy9tYWluLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM5NjM0MjU3MzA5NjZmYmVh
ZTJhMGU3ODlkNmNkZmZjMGJjMDZjZGQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93
c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVy
ZS1leGFtcGxlcy92dWVqcy1jbGkvc3JjL21haW4uanMKQEAgLTAsMCArMSwyOCBAQAorLy8gVGhl
IFZ1ZSBidWlsZCB2ZXJzaW9uIHRvIGxvYWQgd2l0aCB0aGUgYGltcG9ydGAgY29tbWFuZAorLy8g
KHJ1bnRpbWUtb25seSBvciBzdGFuZGFsb25lKSBoYXMgYmVlbiBzZXQgaW4gd2VicGFjay5iYXNl
LmNvbmYgd2l0aCBhbiBhbGlhcy4KK2ltcG9ydCBWdWUgZnJvbSAndnVlJworaW1wb3J0IEFwcCBm
cm9tICcuL0FwcCcKK2ltcG9ydCBEaXJlY3RvciBmcm9tICdkaXJlY3Rvci9idWlsZC9kaXJlY3Rv
cicKKworLyogZXNsaW50LWRpc2FibGUgbm8tbmV3ICovCit3aW5kb3cuVnVlQXBwID0gbmV3IFZ1
ZSh7CisgICAgZWw6ICcjYXBwJywKKyAgICByZW5kZXI6IGggPT4gaChBcHApCit9KQorCitjb25z
dCByb3V0ZXIgPSBuZXcgRGlyZWN0b3IuUm91dGVyKCk7CisKK1snYWxsJywgJ2FjdGl2ZScsICdj
b21wbGV0ZWQnXS5mb3JFYWNoKHZpc2liaWxpdHkgPT4geworICByb3V0ZXIub24odmlzaWJpbGl0
eSwgKCkgPT4geworICAgIHdpbmRvdy5WdWVBcHAuZmlsdGVyID0gdmlzaWJpbGl0eTsKKyAgfSk7
Cit9KTsKKworcm91dGVyLmNvbmZpZ3VyZSh7CisgIG5vdGZvdW5kOiBmdW5jdGlvbiAoKSB7Cisg
ICAgd2luZG93LmxvY2F0aW9uLmhhc2ggPSAnJzsKKyAgICB3aW5kb3cuVnVlQXBwLmZpbHRlciA9
ICdhbGwnOworICB9Cit9KTsKKworcm91dGVyLmluaXQoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBmaWxlCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVy
Mi4xL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy92dWVqcy1jbGkveWFy
bi5sb2NrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvdnVlanMtY2xpL3lhcm4ubG9jawpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi41NDZjYWUwN2Q5YTE0ZGQwYWFjMzNmNGRjZGRlN2FiOWFjMmRhZDdiCi0tLSAvZGV2
L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvdnVlanMtY2xpL3lhcm4ubG9jawpA
QCAtMCwwICsxLDQxMDMgQEAKKyMgVEhJUyBJUyBBTiBBVVRPR0VORVJBVEVEIEZJTEUuIERPIE5P
VCBFRElUIFRISVMgRklMRSBESVJFQ1RMWS4KKyMgeWFybiBsb2NrZmlsZSB2MQorYWJicmV2QDE6
CisgIHZlcnNpb24gIjEuMC45IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtn
LmNvbS9hYmJyZXYvLS9hYmJyZXYtMS4wLjkudGd6IzkxYjQ3OTI1ODhhNzczOGMyNWYzNWRkNmY2
Mzc1MmEyZjg3NzYxMzUiCisKK2FjY2VwdHNAfjEuMy4zOgorICB2ZXJzaW9uICIxLjMuMyIKKyAg
cmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vYWNjZXB0cy8tL2FjY2VwdHMt
MS4zLjMudGd6I2MzY2E3NDM0OTM4NjQ4YzNlMGQ5YzFlMzI4ZGQ2OGI2MjJjMjg0Y2EiCisgIGRl
cGVuZGVuY2llczoKKyAgICBtaW1lLXR5cGVzICJ+Mi4xLjExIgorICAgIG5lZ290aWF0b3IgIjAu
Ni4xIgorCithY29ybi1qc3hAXjMuMC4wOgorICB2ZXJzaW9uICIzLjAuMSIKKyAgcmVzb2x2ZWQg
Imh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vYWNvcm4tanN4Ly0vYWNvcm4tanN4LTMuMC4x
LnRneiNhZmRmOTQ4OGZiMWVjZWZjODM0OGY2ZmIyMmY0NjRlMzJhNThiMzZiIgorICBkZXBlbmRl
bmNpZXM6CisgICAgYWNvcm4gIl4zLjAuNCIKKworYWNvcm5AXjMuMC4wLCBhY29ybkBeMy4wLjQ6
CisgIHZlcnNpb24gIjMuMy4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtn
LmNvbS9hY29ybi8tL2Fjb3JuLTMuMy4wLnRneiM0NWUzN2ZiMzllOGRhM2YyNWJhZWUzZmY1MzY5
ZTJiYjVmMjIwMTdhIgorCithY29ybkBeNC4wLjE6CisgIHZlcnNpb24gIjQuMC4zIgorICByZXNv
bHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9hY29ybi8tL2Fjb3JuLTQuMC4zLnRn
eiMxYTNlODUwYjQyOGU3M2JhNmIwOWQxY2M1MjdmNWFhYWQ0ZDAzZWYxIgorCithanYta2V5d29y
ZHNAXjEuMC4wOgorICB2ZXJzaW9uICIxLjIuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0
cnkueWFybnBrZy5jb20vYWp2LWtleXdvcmRzLy0vYWp2LWtleXdvcmRzLTEuMi4wLnRneiM2NzZj
NGYwODdiZmUxZThiMTJkY2E2ZmRhMmYzYzc0ZjQxN2IwOTljIgorCithanZAXjQuNy4wOgorICB2
ZXJzaW9uICI0LjkuMiIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20v
YWp2Ly0vYWp2LTQuOS4yLnRneiMzZjdkY2RhOTViMGMzNGJjZWIyZDY5OTQ1MTE3ZDE0NjIxOWYx
YTJjIgorICBkZXBlbmRlbmNpZXM6CisgICAgY28gIl40LjYuMCIKKyAgICBqc29uLXN0YWJsZS1z
dHJpbmdpZnkgIl4xLjAuMSIKKworYWxpZ24tdGV4dEBeMC4xLjEsIGFsaWduLXRleHRAXjAuMS4z
OgorICB2ZXJzaW9uICIwLjEuNCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBr
Zy5jb20vYWxpZ24tdGV4dC8tL2FsaWduLXRleHQtMC4xLjQudGd6IzBjZDkwYTU2MTA5M2YzNWQw
YTk5MjU2YzIyYjcwNjk0MzNmYWQxMTciCisgIGRlcGVuZGVuY2llczoKKyAgICBraW5kLW9mICJe
My4wLjIiCisgICAgbG9uZ2VzdCAiXjEuMC4xIgorICAgIHJlcGVhdC1zdHJpbmcgIl4xLjUuMiIK
KworYWxwaGFudW0tc29ydEBeMS4wLjEsIGFscGhhbnVtLXNvcnRAXjEuMC4yOgorICB2ZXJzaW9u
ICIxLjAuMiIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vYWxwaGFu
dW0tc29ydC8tL2FscGhhbnVtLXNvcnQtMS4wLjIudGd6Izk3YTExMTk2NDliMjExYWQzMzY5MWQ5
ZjlmNDg2YThlYzlmYmUwYTMiCisKK2FtZGVmaW5lQD49MC4wLjQ6CisgIHZlcnNpb24gIjEuMC4x
IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9hbWRlZmluZS8tL2Ft
ZGVmaW5lLTEuMC4xLnRneiM0YTUyODJhYzE2NDcyOWU5MzYxOWJjZmQzYWQxNTFmODE3Y2U5MWY1
IgorCithbnNpLWVzY2FwZXNAXjEuMS4wOgorICB2ZXJzaW9uICIxLjQuMCIKKyAgcmVzb2x2ZWQg
Imh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vYW5zaS1lc2NhcGVzLy0vYW5zaS1lc2NhcGVz
LTEuNC4wLnRneiNkM2E4YTgzYjMxOWFhNjc3OTM2NjJiMTNlNzYxYzc5MTE0MjIzMDZlIgorCith
bnNpLWh0bWxAMC4wLjY6CisgIHZlcnNpb24gIjAuMC42IgorICByZXNvbHZlZCAiaHR0cHM6Ly9y
ZWdpc3RyeS55YXJucGtnLmNvbS9hbnNpLWh0bWwvLS9hbnNpLWh0bWwtMC4wLjYudGd6I2JkYThl
MzNkZDJlZTFjMjBmNTRjMDhlYjQwNTcxM2NiZmMwZWQ4MGUiCisKK2Fuc2ktcmVnZXhAXjIuMC4w
OgorICB2ZXJzaW9uICIyLjAuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBr
Zy5jb20vYW5zaS1yZWdleC8tL2Fuc2ktcmVnZXgtMi4wLjAudGd6I2M1MDYxYjZlMGVmOGE4MTc3
NWU1MGY1ZDY2MTUxYmY2YmYzNzExMDciCisKK2Fuc2ktc3R5bGVzQF4yLjIuMToKKyAgdmVyc2lv
biAiMi4yLjEiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2Fuc2kt
c3R5bGVzLy0vYW5zaS1zdHlsZXMtMi4yLjEudGd6I2I0MzJkZDMzNThiNjM0Y2Y3NWUxZTQ2NjQz
NjgyNDA1MzNjMWRkYmUiCisKK2FueW1hdGNoQF4xLjMuMDoKKyAgdmVyc2lvbiAiMS4zLjAiCisg
IHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2FueW1hdGNoLy0vYW55bWF0
Y2gtMS4zLjAudGd6I2EzZTUyZmEzOTE2OGM4MjVmZjU3YjAyNDgxMjZjZTVhOGZmOTU1MDciCisg
IGRlcGVuZGVuY2llczoKKyAgICBhcnJpZnkgIl4xLjAuMCIKKyAgICBtaWNyb21hdGNoICJeMi4x
LjUiCisKK2Fwcm9iYUBeMS4wLjM6CisgIHZlcnNpb24gIjEuMC40IgorICByZXNvbHZlZCAiaHR0
cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9hcHJvYmEvLS9hcHJvYmEtMS4wLjQudGd6IzI3MTM2
ODA3NzVlNzYxNGM4YmExODZjMDY1ZDRlMmU1MmQxMDcyYzAiCisKK2FyZS13ZS10aGVyZS15ZXRA
fjEuMS4yOgorICB2ZXJzaW9uICIxLjEuMiIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnku
eWFybnBrZy5jb20vYXJlLXdlLXRoZXJlLXlldC8tL2FyZS13ZS10aGVyZS15ZXQtMS4xLjIudGd6
IzgwZTQ3MGU5NWEwODQ3OTRmZTE4OTkyNjJjNTY2N2M2ZTg4ZGUxYjMiCisgIGRlcGVuZGVuY2ll
czoKKyAgICBkZWxlZ2F0ZXMgIl4xLjAuMCIKKyAgICByZWFkYWJsZS1zdHJlYW0gIl4yLjAuMCB8
fCBeMS4xLjEzIgorCithcmdwYXJzZUBeMS4wLjc6CisgIHZlcnNpb24gIjEuMC45IgorICByZXNv
bHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9hcmdwYXJzZS8tL2FyZ3BhcnNlLTEu
MC45LnRneiM3M2Q4M2JjMjYzZjg2ZTk3ZjhjYzRmNmJhZTFiMGU5MGE3ZDIyYzg2IgorICBkZXBl
bmRlbmNpZXM6CisgICAgc3ByaW50Zi1qcyAifjEuMC4yIgorCithcnItZGlmZkBeMi4wLjA6Cisg
IHZlcnNpb24gIjIuMC4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNv
bS9hcnItZGlmZi8tL2Fyci1kaWZmLTIuMC4wLnRneiM4ZjNiODI3Zjk1NWE4YmQ2Njk2OTdlNGE0
MjU2YWMzY2VhZTM1NmNmIgorICBkZXBlbmRlbmNpZXM6CisgICAgYXJyLWZsYXR0ZW4gIl4xLjAu
MSIKKworYXJyLWZsYXR0ZW5AXjEuMC4xOgorICB2ZXJzaW9uICIxLjAuMSIKKyAgcmVzb2x2ZWQg
Imh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vYXJyLWZsYXR0ZW4vLS9hcnItZmxhdHRlbi0x
LjAuMS50Z3ojZTVmZmU1NGQ0NWUxOWYzMmYyMTZlOTFlYjk5YzhjZTg5MmJiNjA0YiIKKworYXJy
YXktZmxhdHRlbkAxLjEuMToKKyAgdmVyc2lvbiAiMS4xLjEiCisgIHJlc29sdmVkICJodHRwczov
L3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2FycmF5LWZsYXR0ZW4vLS9hcnJheS1mbGF0dGVuLTEuMS4x
LnRneiM5YTVmNjk5MDUxYjFlNzA3MzMyOGYyYTAwODk2OGI2NGVhMjk1NWQyIgorCithcnJheS11
bmlvbkBeMS4wLjE6CisgIHZlcnNpb24gIjEuMC4yIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdp
c3RyeS55YXJucGtnLmNvbS9hcnJheS11bmlvbi8tL2FycmF5LXVuaW9uLTEuMC4yLnRneiM5YTM0
NDEwZTRmNGUzZGEyM2RlYTM3NWJlNWJlNzBmMjQ3NzhlYzM5IgorICBkZXBlbmRlbmNpZXM6Cisg
ICAgYXJyYXktdW5pcSAiXjEuMC4xIgorCithcnJheS11bmlxQF4xLjAuMToKKyAgdmVyc2lvbiAi
MS4wLjMiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2FycmF5LXVu
aXEvLS9hcnJheS11bmlxLTEuMC4zLnRneiNhZjZhYzg3N2EyNWNjN2Y3NGUwNTg4OTQ3NTM4NThk
ZmRiMjRmZGI2IgorCithcnJheS11bmlxdWVAXjAuMi4xOgorICB2ZXJzaW9uICIwLjIuMSIKKyAg
cmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vYXJyYXktdW5pcXVlLy0vYXJy
YXktdW5pcXVlLTAuMi4xLnRneiNhMWQ5N2NjYWZjYmMyNjI1Y2M3MGZhZGNlYjM2YTUwYzU4YjAx
YTUzIgorCithcnJpZnlAXjEuMC4wOgorICB2ZXJzaW9uICIxLjAuMSIKKyAgcmVzb2x2ZWQgImh0
dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vYXJyaWZ5Ly0vYXJyaWZ5LTEuMC4xLnRneiM4OTg1
MDhkYTIyMjZmMzgwZGY5MDQ3Mjg0NTY4NDljMTUwMWE0YjBkIgorCithc24xQH4wLjIuMzoKKyAg
dmVyc2lvbiAiMC4yLjMiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29t
L2FzbjEvLS9hc24xLTAuMi4zLnRneiNkYWM4Nzg3NzEzYzk5NjY4NDlmYzgxODA3NzdlYmU5YzFk
ZGYzYjg2IgorCithc3NlcnQtcGx1c0BeMC4yLjA6CisgIHZlcnNpb24gIjAuMi4wIgorICByZXNv
bHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9hc3NlcnQtcGx1cy8tL2Fzc2VydC1w
bHVzLTAuMi4wLnRneiNkNzRlMWI4N2U3YWZmYzBkYjhhYWRiNzAyMWYzZmU0ODEwMWFiMjM0Igor
Cithc3NlcnQtcGx1c0BeMS4wLjA6CisgIHZlcnNpb24gIjEuMC4wIgorICByZXNvbHZlZCAiaHR0
cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9hc3NlcnQtcGx1cy8tL2Fzc2VydC1wbHVzLTEuMC4w
LnRneiNmMTJlMGYzYzVkNzdiMGIxY2RkOTE0Njk0MmU0ZTk2YzFlNGRkNTI1IgorCithc3NlcnRA
XjEuMS4xOgorICB2ZXJzaW9uICIxLjQuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnku
eWFybnBrZy5jb20vYXNzZXJ0Ly0vYXNzZXJ0LTEuNC4xLnRneiM5OTkxMmQ1OTE4MzZiNWE2ZjVi
MzQ1YzBmMDdlZWZjMDhmYzY1ZDkxIgorICBkZXBlbmRlbmNpZXM6CisgICAgdXRpbCAiMC4xMC4z
IgorCithc3luYy1lYWNoQF4xLjAuMDoKKyAgdmVyc2lvbiAiMS4wLjEiCisgIHJlc29sdmVkICJo
dHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2FzeW5jLWVhY2gvLS9hc3luYy1lYWNoLTEuMC4x
LnRneiMxOWQzODZhMWQ5ZWRjNmU3YzFjODVkMzg4YWVkYmNjNTZkMzM2MDJkIgorCithc3luY0Be
MC45LjA6CisgIHZlcnNpb24gIjAuOS4yIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55
YXJucGtnLmNvbS9hc3luYy8tL2FzeW5jLTAuOS4yLnRneiNhZWE3NGQ1ZTYxYzFmODk5NjEzYmY2
NGJkYTY2ZDRjNzhmMmZkMTdkIgorCithc3luY0BeMS4zLjAsIGFzeW5jQF4xLjUuMDoKKyAgdmVy
c2lvbiAiMS41LjIiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2Fz
eW5jLy0vYXN5bmMtMS41LjIudGd6I2VjNmE2MWFlNTY0ODBjMGMzY2IyNDFjOTU2MThlMjA4OTJm
OTY3MmEiCisKK2FzeW5jQH4wLjIuNjoKKyAgdmVyc2lvbiAiMC4yLjEwIgorICByZXNvbHZlZCAi
aHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9hc3luYy8tL2FzeW5jLTAuMi4xMC50Z3ojYjZi
YmUwYjA2NzRiOWQ3MTk3MDhjYTM4ZGU4YzIzN2NiNTI2YzNkMSIKKworYXN5bmNraXRAXjAuNC4w
OgorICB2ZXJzaW9uICIwLjQuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBr
Zy5jb20vYXN5bmNraXQvLS9hc3luY2tpdC0wLjQuMC50Z3ojYzc5ZWQ5N2Y3ZjM0Y2I4ZjJiYTFi
Yzk3OTBiY2MzNjY0NzRiNGI3OSIKKworYXV0b3ByZWZpeGVyQF42LjMuMSwgYXV0b3ByZWZpeGVy
QF42LjQuMDoKKyAgdmVyc2lvbiAiNi41LjMiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5
Lnlhcm5wa2cuY29tL2F1dG9wcmVmaXhlci8tL2F1dG9wcmVmaXhlci02LjUuMy50Z3ojMmQ4NTNh
ZjY2ZDA0NDQ5ZmNmNTBkYjMwNjYyNzlhYjU0YzNlNGIwMSIKKyAgZGVwZW5kZW5jaWVzOgorICAg
IGJyb3dzZXJzbGlzdCAifjEuNC4wIgorICAgIGNhbml1c2UtZGIgIl4xLjAuMzAwMDA1NzgiCisg
ICAgbm9ybWFsaXplLXJhbmdlICJeMC4xLjIiCisgICAgbnVtMmZyYWN0aW9uICJeMS4yLjIiCisg
ICAgcG9zdGNzcyAiXjUuMi41IgorICAgIHBvc3Rjc3MtdmFsdWUtcGFyc2VyICJeMy4yLjMiCisK
K2F3cy1zaWduMkB+MC42LjA6CisgIHZlcnNpb24gIjAuNi4wIgorICByZXNvbHZlZCAiaHR0cHM6
Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9hd3Mtc2lnbjIvLS9hd3Mtc2lnbjItMC42LjAudGd6IzE0
MzQyZGQzOGRiY2M5NGQwZTViODdkNzYzY2Q2MzYxMmMwZTc5NGYiCisKK2F3czRAXjEuMi4xOgor
ICB2ZXJzaW9uICIxLjUuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5j
b20vYXdzNC8tL2F3czQtMS41LjAudGd6IzBhMjlmZmI3OWMzMWM5ZTcxMmVlYjA4N2U4ZTdhNjRi
NGE1NmQ3NTUiCisKK2JhYmVsLWNvZGUtZnJhbWVAXjYuMTEuMCwgYmFiZWwtY29kZS1mcmFtZUBe
Ni4xNi4wOgorICB2ZXJzaW9uICI2LjE2LjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5
Lnlhcm5wa2cuY29tL2JhYmVsLWNvZGUtZnJhbWUvLS9iYWJlbC1jb2RlLWZyYW1lLTYuMTYuMC50
Z3ojZjkwZTYwZGEwODYyOTA5ZDNjZTA5ODczM2I1ZDM5ODdjOTdjYjhkZSIKKyAgZGVwZW5kZW5j
aWVzOgorICAgIGNoYWxrICJeMS4xLjAiCisgICAgZXN1dGlscyAiXjIuMC4yIgorICAgIGpzLXRv
a2VucyAiXjIuMC4wIgorCitiYWJlbC1jb3JlQF42LjAuMCwgYmFiZWwtY29yZUBeNi4xOC4wOgor
ICB2ZXJzaW9uICI2LjE4LjIiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cu
Y29tL2JhYmVsLWNvcmUvLS9iYWJlbC1jb3JlLTYuMTguMi50Z3ojZDhiYjE0ZGQ2OTg2ZmE0ZjM1
NjZhMjZjZWRhMzk2NGZhMGUwNGU1YiIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGJhYmVsLWNvZGUt
ZnJhbWUgIl42LjE2LjAiCisgICAgYmFiZWwtZ2VuZXJhdG9yICJeNi4xOC4wIgorICAgIGJhYmVs
LWhlbHBlcnMgIl42LjE2LjAiCisgICAgYmFiZWwtbWVzc2FnZXMgIl42LjguMCIKKyAgICBiYWJl
bC1yZWdpc3RlciAiXjYuMTguMCIKKyAgICBiYWJlbC1ydW50aW1lICJeNi45LjEiCisgICAgYmFi
ZWwtdGVtcGxhdGUgIl42LjE2LjAiCisgICAgYmFiZWwtdHJhdmVyc2UgIl42LjE4LjAiCisgICAg
YmFiZWwtdHlwZXMgIl42LjE4LjAiCisgICAgYmFieWxvbiAiXjYuMTEuMCIKKyAgICBjb252ZXJ0
LXNvdXJjZS1tYXAgIl4xLjEuMCIKKyAgICBkZWJ1ZyAiXjIuMS4xIgorICAgIGpzb241ICJeMC41
LjAiCisgICAgbG9kYXNoICJeNC4yLjAiCisgICAgbWluaW1hdGNoICJeMy4wLjIiCisgICAgcGF0
aC1pcy1hYnNvbHV0ZSAiXjEuMC4wIgorICAgIHByaXZhdGUgIl4wLjEuNiIKKyAgICBzbGFzaCAi
XjEuMC4wIgorICAgIHNvdXJjZS1tYXAgIl4wLjUuMCIKKworYmFiZWwtZXNsaW50QF43LjAuMDoK
KyAgdmVyc2lvbiAiNy4xLjEiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cu
Y29tL2JhYmVsLWVzbGludC8tL2JhYmVsLWVzbGludC03LjEuMS50Z3ojOGE2YTg4NGYwODVhYTcw
NjBhZjY5Y2ZjNzczNDFjMmY5OTM3MGZiMiIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGJhYmVsLWNv
ZGUtZnJhbWUgIl42LjE2LjAiCisgICAgYmFiZWwtdHJhdmVyc2UgIl42LjE1LjAiCisgICAgYmFi
ZWwtdHlwZXMgIl42LjE1LjAiCisgICAgYmFieWxvbiAiXjYuMTMuMCIKKyAgICBsb2Rhc2gucGlj
a2J5ICJeNC42LjAiCisKK2JhYmVsLWdlbmVyYXRvckBeNi4xOC4wOgorICB2ZXJzaW9uICI2LjE5
LjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2JhYmVsLWdlbmVy
YXRvci8tL2JhYmVsLWdlbmVyYXRvci02LjE5LjAudGd6IzliMmYyNDQyMDQ3NzdhM2Q2ODEwZWMx
MjdjNjczYzg3YjM0OWZhYzUiCisgIGRlcGVuZGVuY2llczoKKyAgICBiYWJlbC1tZXNzYWdlcyAi
XjYuOC4wIgorICAgIGJhYmVsLXJ1bnRpbWUgIl42LjkuMCIKKyAgICBiYWJlbC10eXBlcyAiXjYu
MTkuMCIKKyAgICBkZXRlY3QtaW5kZW50ICJeNC4wLjAiCisgICAganNlc2MgIl4xLjMuMCIKKyAg
ICBsb2Rhc2ggIl40LjIuMCIKKyAgICBzb3VyY2UtbWFwICJeMC41LjAiCisKK2JhYmVsLWhlbHBl
ci1iaW5kaWZ5LWRlY29yYXRvcnNAXjYuMTguMDoKKyAgdmVyc2lvbiAiNi4xOC4wIgorICByZXNv
bHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9iYWJlbC1oZWxwZXItYmluZGlmeS1k
ZWNvcmF0b3JzLy0vYmFiZWwtaGVscGVyLWJpbmRpZnktZGVjb3JhdG9ycy02LjE4LjAudGd6I2Zj
MDBjNTczNjc2YTZlNzAyZmZmYTAwMDE5NTgwODkyZWM4NzgwYTUiCisgIGRlcGVuZGVuY2llczoK
KyAgICBiYWJlbC1ydW50aW1lICJeNi4wLjAiCisgICAgYmFiZWwtdHJhdmVyc2UgIl42LjE4LjAi
CisgICAgYmFiZWwtdHlwZXMgIl42LjE4LjAiCisKK2JhYmVsLWhlbHBlci1idWlsZGVyLWJpbmFy
eS1hc3NpZ25tZW50LW9wZXJhdG9yLXZpc2l0b3JAXjYuOC4wOgorICB2ZXJzaW9uICI2LjE4LjAi
CisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2JhYmVsLWhlbHBlci1i
dWlsZGVyLWJpbmFyeS1hc3NpZ25tZW50LW9wZXJhdG9yLXZpc2l0b3IvLS9iYWJlbC1oZWxwZXIt
YnVpbGRlci1iaW5hcnktYXNzaWdubWVudC1vcGVyYXRvci12aXNpdG9yLTYuMTguMC50Z3ojOGFl
ODE0OTg5ZjdhNTM2ODIxNTJlMzQwMWEwNGZhYmQwYmIzMzNhNiIKKyAgZGVwZW5kZW5jaWVzOgor
ICAgIGJhYmVsLWhlbHBlci1leHBsb2RlLWFzc2lnbmFibGUtZXhwcmVzc2lvbiAiXjYuMTguMCIK
KyAgICBiYWJlbC1ydW50aW1lICJeNi4wLjAiCisgICAgYmFiZWwtdHlwZXMgIl42LjE4LjAiCisK
K2JhYmVsLWhlbHBlci1jYWxsLWRlbGVnYXRlQF42LjE4LjA6CisgIHZlcnNpb24gIjYuMTguMCIK
KyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vYmFiZWwtaGVscGVyLWNh
bGwtZGVsZWdhdGUvLS9iYWJlbC1oZWxwZXItY2FsbC1kZWxlZ2F0ZS02LjE4LjAudGd6IzA1YjE0
YWFmYTQzMDg4NGIwMzQwOTdlZjI5ZTlmMDY3ZWE0MTMzYmQiCisgIGRlcGVuZGVuY2llczoKKyAg
ICBiYWJlbC1oZWxwZXItaG9pc3QtdmFyaWFibGVzICJeNi4xOC4wIgorICAgIGJhYmVsLXJ1bnRp
bWUgIl42LjAuMCIKKyAgICBiYWJlbC10cmF2ZXJzZSAiXjYuMTguMCIKKyAgICBiYWJlbC10eXBl
cyAiXjYuMTguMCIKKworYmFiZWwtaGVscGVyLWRlZmluZS1tYXBAXjYuMTguMCwgYmFiZWwtaGVs
cGVyLWRlZmluZS1tYXBAXjYuOC4wOgorICB2ZXJzaW9uICI2LjE4LjAiCisgIHJlc29sdmVkICJo
dHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2JhYmVsLWhlbHBlci1kZWZpbmUtbWFwLy0vYmFi
ZWwtaGVscGVyLWRlZmluZS1tYXAtNi4xOC4wLnRneiM4ZDZjODVkYzdmYmI0YzE5YmUzZGU0MDQ3
NGQxOGU5N2MzNjc2ZWMyIgorICBkZXBlbmRlbmNpZXM6CisgICAgYmFiZWwtaGVscGVyLWZ1bmN0
aW9uLW5hbWUgIl42LjE4LjAiCisgICAgYmFiZWwtcnVudGltZSAiXjYuOS4wIgorICAgIGJhYmVs
LXR5cGVzICJeNi4xOC4wIgorICAgIGxvZGFzaCAiXjQuMi4wIgorCitiYWJlbC1oZWxwZXItZXhw
bG9kZS1hc3NpZ25hYmxlLWV4cHJlc3Npb25AXjYuMTguMDoKKyAgdmVyc2lvbiAiNi4xOC4wIgor
ICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9iYWJlbC1oZWxwZXItZXhw
bG9kZS1hc3NpZ25hYmxlLWV4cHJlc3Npb24vLS9iYWJlbC1oZWxwZXItZXhwbG9kZS1hc3NpZ25h
YmxlLWV4cHJlc3Npb24tNi4xOC4wLnRneiMxNGI4ZThjMmQwM2FkNzM1ZDRiMjBmMTg0MGIyNGNk
MWY2NTIzOWZlIgorICBkZXBlbmRlbmNpZXM6CisgICAgYmFiZWwtcnVudGltZSAiXjYuMC4wIgor
ICAgIGJhYmVsLXRyYXZlcnNlICJeNi4xOC4wIgorICAgIGJhYmVsLXR5cGVzICJeNi4xOC4wIgor
CitiYWJlbC1oZWxwZXItZXhwbG9kZS1jbGFzc0BeNi44LjA6CisgIHZlcnNpb24gIjYuMTguMCIK
KyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vYmFiZWwtaGVscGVyLWV4
cGxvZGUtY2xhc3MvLS9iYWJlbC1oZWxwZXItZXhwbG9kZS1jbGFzcy02LjE4LjAudGd6I2M0NGY3
NmY0ZmEyM2I5YzVkNjA3Y2JhYzVkNDExNWU3YTc2ZjYyY2IiCisgIGRlcGVuZGVuY2llczoKKyAg
ICBiYWJlbC1oZWxwZXItYmluZGlmeS1kZWNvcmF0b3JzICJeNi4xOC4wIgorICAgIGJhYmVsLXJ1
bnRpbWUgIl42LjAuMCIKKyAgICBiYWJlbC10cmF2ZXJzZSAiXjYuMTguMCIKKyAgICBiYWJlbC10
eXBlcyAiXjYuMTguMCIKKworYmFiZWwtaGVscGVyLWZ1bmN0aW9uLW5hbWVAXjYuMTguMCwgYmFi
ZWwtaGVscGVyLWZ1bmN0aW9uLW5hbWVAXjYuOC4wOgorICB2ZXJzaW9uICI2LjE4LjAiCisgIHJl
c29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2JhYmVsLWhlbHBlci1mdW5jdGlv
bi1uYW1lLy0vYmFiZWwtaGVscGVyLWZ1bmN0aW9uLW5hbWUtNi4xOC4wLnRneiM2OGVjNzFhZWJh
MWYzZTI4YjJhNmYwNzMwMTkwYjc1NGE5YmYzMGU2IgorICBkZXBlbmRlbmNpZXM6CisgICAgYmFi
ZWwtaGVscGVyLWdldC1mdW5jdGlvbi1hcml0eSAiXjYuMTguMCIKKyAgICBiYWJlbC1ydW50aW1l
ICJeNi4wLjAiCisgICAgYmFiZWwtdGVtcGxhdGUgIl42LjguMCIKKyAgICBiYWJlbC10cmF2ZXJz
ZSAiXjYuMTguMCIKKyAgICBiYWJlbC10eXBlcyAiXjYuMTguMCIKKworYmFiZWwtaGVscGVyLWdl
dC1mdW5jdGlvbi1hcml0eUBeNi4xOC4wOgorICB2ZXJzaW9uICI2LjE4LjAiCisgIHJlc29sdmVk
ICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2JhYmVsLWhlbHBlci1nZXQtZnVuY3Rpb24t
YXJpdHkvLS9iYWJlbC1oZWxwZXItZ2V0LWZ1bmN0aW9uLWFyaXR5LTYuMTguMC50Z3ojYTViMTk2
OTVmZDNmOWNkZmMzMjgzOThiNDdkYWZjZDcwOTRmOWYyNCIKKyAgZGVwZW5kZW5jaWVzOgorICAg
IGJhYmVsLXJ1bnRpbWUgIl42LjAuMCIKKyAgICBiYWJlbC10eXBlcyAiXjYuMTguMCIKKworYmFi
ZWwtaGVscGVyLWhvaXN0LXZhcmlhYmxlc0BeNi4xOC4wOgorICB2ZXJzaW9uICI2LjE4LjAiCisg
IHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2JhYmVsLWhlbHBlci1ob2lz
dC12YXJpYWJsZXMvLS9iYWJlbC1oZWxwZXItaG9pc3QtdmFyaWFibGVzLTYuMTguMC50Z3ojYTgz
NWI1YWI4YjQ2ZDZkZTliYWJlZmFlNGQ5OGVhNDFlODY2YjgyYSIKKyAgZGVwZW5kZW5jaWVzOgor
ICAgIGJhYmVsLXJ1bnRpbWUgIl42LjAuMCIKKyAgICBiYWJlbC10eXBlcyAiXjYuMTguMCIKKwor
YmFiZWwtaGVscGVyLW9wdGltaXNlLWNhbGwtZXhwcmVzc2lvbkBeNi4xOC4wOgorICB2ZXJzaW9u
ICI2LjE4LjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2JhYmVs
LWhlbHBlci1vcHRpbWlzZS1jYWxsLWV4cHJlc3Npb24vLS9iYWJlbC1oZWxwZXItb3B0aW1pc2Ut
Y2FsbC1leHByZXNzaW9uLTYuMTguMC50Z3ojOTI2MWQwMjk5ZWUxYTRmMDhhNmRkMjhiN2I3Yzc3
NzM0OGZkOGYwZiIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGJhYmVsLXJ1bnRpbWUgIl42LjAuMCIK
KyAgICBiYWJlbC10eXBlcyAiXjYuMTguMCIKKworYmFiZWwtaGVscGVyLXJlZ2V4QF42LjguMDoK
KyAgdmVyc2lvbiAiNi4xOC4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtn
LmNvbS9iYWJlbC1oZWxwZXItcmVnZXgvLS9iYWJlbC1oZWxwZXItcmVnZXgtNi4xOC4wLnRneiNh
ZTBlYmZkNzdkZTg2Y2IyZjFhZjI1OGUyY2MyMGI1ZmU4OTNlY2M2IgorICBkZXBlbmRlbmNpZXM6
CisgICAgYmFiZWwtcnVudGltZSAiXjYuOS4wIgorICAgIGJhYmVsLXR5cGVzICJeNi4xOC4wIgor
ICAgIGxvZGFzaCAiXjQuMi4wIgorCitiYWJlbC1oZWxwZXItcmVtYXAtYXN5bmMtdG8tZ2VuZXJh
dG9yQF42LjE2LjAsIGJhYmVsLWhlbHBlci1yZW1hcC1hc3luYy10by1nZW5lcmF0b3JAXjYuMTYu
MjoKKyAgdmVyc2lvbiAiNi4xOC4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJu
cGtnLmNvbS9iYWJlbC1oZWxwZXItcmVtYXAtYXN5bmMtdG8tZ2VuZXJhdG9yLy0vYmFiZWwtaGVs
cGVyLXJlbWFwLWFzeW5jLXRvLWdlbmVyYXRvci02LjE4LjAudGd6IzMzNmNkZjNjYWI2NTBiYjE5
MWIwMmZjMTZhMzcwOGU3YmU3ZjljZTUiCisgIGRlcGVuZGVuY2llczoKKyAgICBiYWJlbC1oZWxw
ZXItZnVuY3Rpb24tbmFtZSAiXjYuMTguMCIKKyAgICBiYWJlbC1ydW50aW1lICJeNi4wLjAiCisg
ICAgYmFiZWwtdGVtcGxhdGUgIl42LjE2LjAiCisgICAgYmFiZWwtdHJhdmVyc2UgIl42LjE4LjAi
CisgICAgYmFiZWwtdHlwZXMgIl42LjE4LjAiCisKK2JhYmVsLWhlbHBlci1yZXBsYWNlLXN1cGVy
c0BeNi4xOC4wLCBiYWJlbC1oZWxwZXItcmVwbGFjZS1zdXBlcnNAXjYuOC4wOgorICB2ZXJzaW9u
ICI2LjE4LjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2JhYmVs
LWhlbHBlci1yZXBsYWNlLXN1cGVycy8tL2JhYmVsLWhlbHBlci1yZXBsYWNlLXN1cGVycy02LjE4
LjAudGd6IzI4ZWM2OTg3N2JlNDE0NGRiZDY0ZjRjYzNhMzM3ZTg5ZjI5YTkyNGUiCisgIGRlcGVu
ZGVuY2llczoKKyAgICBiYWJlbC1oZWxwZXItb3B0aW1pc2UtY2FsbC1leHByZXNzaW9uICJeNi4x
OC4wIgorICAgIGJhYmVsLW1lc3NhZ2VzICJeNi44LjAiCisgICAgYmFiZWwtcnVudGltZSAiXjYu
MC4wIgorICAgIGJhYmVsLXRlbXBsYXRlICJeNi4xNi4wIgorICAgIGJhYmVsLXRyYXZlcnNlICJe
Ni4xOC4wIgorICAgIGJhYmVsLXR5cGVzICJeNi4xOC4wIgorCitiYWJlbC1oZWxwZXJzQF42LjE2
LjA6CisgIHZlcnNpb24gIjYuMTYuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFy
bnBrZy5jb20vYmFiZWwtaGVscGVycy8tL2JhYmVsLWhlbHBlcnMtNi4xNi4wLnRneiMxMDk1ZWMx
MGQ5OTI3OTQ2MDU1M2U2N2ViM2VlZTk5NzNkMzg2N2UzIgorICBkZXBlbmRlbmNpZXM6CisgICAg
YmFiZWwtcnVudGltZSAiXjYuMC4wIgorICAgIGJhYmVsLXRlbXBsYXRlICJeNi4xNi4wIgorCiti
YWJlbC1sb2FkZXJAXjYuMC4wOgorICB2ZXJzaW9uICI2LjIuOSIKKyAgcmVzb2x2ZWQgImh0dHBz
Oi8vcmVnaXN0cnkueWFybnBrZy5jb20vYmFiZWwtbG9hZGVyLy0vYmFiZWwtbG9hZGVyLTYuMi45
LnRneiMyYmNlNmExYzI5YjQ3YWZhOTBiOTM3YmExZmIxZjg3MDg0ZDYxYzYxIgorICBkZXBlbmRl
bmNpZXM6CisgICAgZmluZC1jYWNoZS1kaXIgIl4wLjEuMSIKKyAgICBsb2FkZXItdXRpbHMgIl4w
LjIuMTEiCisgICAgbWtkaXJwICJeMC41LjEiCisgICAgb2JqZWN0LWFzc2lnbiAiXjQuMC4xIgor
CitiYWJlbC1tZXNzYWdlc0BeNi44LjA6CisgIHZlcnNpb24gIjYuOC4wIgorICByZXNvbHZlZCAi
aHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9iYWJlbC1tZXNzYWdlcy8tL2JhYmVsLW1lc3Nh
Z2VzLTYuOC4wLnRneiNiZjUwNDczNmNhOTY3ZTZkNjVlZjBhZGI1YTJhNWY5NDdjOGUwZWI5Igor
ICBkZXBlbmRlbmNpZXM6CisgICAgYmFiZWwtcnVudGltZSAiXjYuMC4wIgorCitiYWJlbC1wbHVn
aW4tY2hlY2stZXMyMDE1LWNvbnN0YW50c0BeNi4zLjEzOgorICB2ZXJzaW9uICI2LjguMCIKKyAg
cmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vYmFiZWwtcGx1Z2luLWNoZWNr
LWVzMjAxNS1jb25zdGFudHMvLS9iYWJlbC1wbHVnaW4tY2hlY2stZXMyMDE1LWNvbnN0YW50cy02
LjguMC50Z3ojZGJmMDI0YzMyZWQzN2JmZGE4ZGVlMWU3NmRhMDIzODZhOGQyNmZlNyIKKyAgZGVw
ZW5kZW5jaWVzOgorICAgIGJhYmVsLXJ1bnRpbWUgIl42LjAuMCIKKworYmFiZWwtcGx1Z2luLXN5
bnRheC1hc3luYy1mdW5jdGlvbnNAXjYuOC4wOgorICB2ZXJzaW9uICI2LjEzLjAiCisgIHJlc29s
dmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2JhYmVsLXBsdWdpbi1zeW50YXgtYXN5
bmMtZnVuY3Rpb25zLy0vYmFiZWwtcGx1Z2luLXN5bnRheC1hc3luYy1mdW5jdGlvbnMtNi4xMy4w
LnRneiNjYWQ5Y2FkMTE5MWI1YWQ2MzRiZjMwYWUwODcyMzkxZTA2NDdiZTk1IgorCitiYWJlbC1w
bHVnaW4tc3ludGF4LWFzeW5jLWdlbmVyYXRvcnNAXjYuNS4wOgorICB2ZXJzaW9uICI2LjEzLjAi
CisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2JhYmVsLXBsdWdpbi1z
eW50YXgtYXN5bmMtZ2VuZXJhdG9ycy8tL2JhYmVsLXBsdWdpbi1zeW50YXgtYXN5bmMtZ2VuZXJh
dG9ycy02LjEzLjAudGd6IzZiYzk2M2ViYjE2ZWNjYmFlNmI5MmI1OTZlYjdmMzVjMzQyYThiOWEi
CisKK2JhYmVsLXBsdWdpbi1zeW50YXgtY2xhc3MtcHJvcGVydGllc0BeNi44LjA6CisgIHZlcnNp
b24gIjYuMTMuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vYmFi
ZWwtcGx1Z2luLXN5bnRheC1jbGFzcy1wcm9wZXJ0aWVzLy0vYmFiZWwtcGx1Z2luLXN5bnRheC1j
bGFzcy1wcm9wZXJ0aWVzLTYuMTMuMC50Z3ojZDdlYjIzYjc5YTMxN2Y4NTQzOTYyYzUwNWI4Mjdj
N2Q2Y2FjMjdkZSIKKworYmFiZWwtcGx1Z2luLXN5bnRheC1kZWNvcmF0b3JzQF42LjEzLjA6Cisg
IHZlcnNpb24gIjYuMTMuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5j
b20vYmFiZWwtcGx1Z2luLXN5bnRheC1kZWNvcmF0b3JzLy0vYmFiZWwtcGx1Z2luLXN5bnRheC1k
ZWNvcmF0b3JzLTYuMTMuMC50Z3ojMzEyNTYzYjRkYmRlM2NjODA2Y2VlM2U0MTZjY2VlYWRkZDEx
YWMwYiIKKworYmFiZWwtcGx1Z2luLXN5bnRheC1keW5hbWljLWltcG9ydEBeNi4xOC4wOgorICB2
ZXJzaW9uICI2LjE4LjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29t
L2JhYmVsLXBsdWdpbi1zeW50YXgtZHluYW1pYy1pbXBvcnQvLS9iYWJlbC1wbHVnaW4tc3ludGF4
LWR5bmFtaWMtaW1wb3J0LTYuMTguMC50Z3ojOGQ2YTI2MjI5YzgzNzQ1YTk5ODJhNDQxMDUxNTcy
Y2FhMTc5YjFkYSIKKworYmFiZWwtcGx1Z2luLXN5bnRheC1leHBvbmVudGlhdGlvbi1vcGVyYXRv
ckBeNi44LjA6CisgIHZlcnNpb24gIjYuMTMuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0
cnkueWFybnBrZy5jb20vYmFiZWwtcGx1Z2luLXN5bnRheC1leHBvbmVudGlhdGlvbi1vcGVyYXRv
ci8tL2JhYmVsLXBsdWdpbi1zeW50YXgtZXhwb25lbnRpYXRpb24tb3BlcmF0b3ItNi4xMy4wLnRn
eiM5ZWU3ZTgzMzcyOTBkYTk1Mjg4MjAxYTZhNTdmNDE3MDMxNzgzMGRlIgorCitiYWJlbC1wbHVn
aW4tc3ludGF4LW9iamVjdC1yZXN0LXNwcmVhZEBeNi44LjA6CisgIHZlcnNpb24gIjYuMTMuMCIK
KyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vYmFiZWwtcGx1Z2luLXN5
bnRheC1vYmplY3QtcmVzdC1zcHJlYWQvLS9iYWJlbC1wbHVnaW4tc3ludGF4LW9iamVjdC1yZXN0
LXNwcmVhZC02LjEzLjAudGd6I2ZkNjUzNmYyYmNlMTM4MzZmZmEzYTU0NThjNDkwM2E1OTdiYjNi
ZjUiCisKK2JhYmVsLXBsdWdpbi1zeW50YXgtdHJhaWxpbmctZnVuY3Rpb24tY29tbWFzQF42LjMu
MTM6CisgIHZlcnNpb24gIjYuMTMuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFy
bnBrZy5jb20vYmFiZWwtcGx1Z2luLXN5bnRheC10cmFpbGluZy1mdW5jdGlvbi1jb21tYXMvLS9i
YWJlbC1wbHVnaW4tc3ludGF4LXRyYWlsaW5nLWZ1bmN0aW9uLWNvbW1hcy02LjEzLjAudGd6IzJi
ODRiN2Q1M2RkNzQ0Zjk0ZmYxZmFkNzY2OTQwNjI3NGIyM2Y1NDEiCisKK2JhYmVsLXBsdWdpbi10
cmFuc2Zvcm0tYXN5bmMtZ2VuZXJhdG9yLWZ1bmN0aW9uc0BeNi4xNy4wOgorICB2ZXJzaW9uICI2
LjE3LjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2JhYmVsLXBs
dWdpbi10cmFuc2Zvcm0tYXN5bmMtZ2VuZXJhdG9yLWZ1bmN0aW9ucy8tL2JhYmVsLXBsdWdpbi10
cmFuc2Zvcm0tYXN5bmMtZ2VuZXJhdG9yLWZ1bmN0aW9ucy02LjE3LjAudGd6I2QwYjVhMmIyZjA5
NDBmMmIyNDVmYTIwYTAwNTE5ZWQ3YmM2Y2FlNTQiCisgIGRlcGVuZGVuY2llczoKKyAgICBiYWJl
bC1oZWxwZXItcmVtYXAtYXN5bmMtdG8tZ2VuZXJhdG9yICJeNi4xNi4yIgorICAgIGJhYmVsLXBs
dWdpbi1zeW50YXgtYXN5bmMtZ2VuZXJhdG9ycyAiXjYuNS4wIgorICAgIGJhYmVsLXJ1bnRpbWUg
Il42LjAuMCIKKworYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1hc3luYy10by1nZW5lcmF0b3JAXjYu
MTYuMDoKKyAgdmVyc2lvbiAiNi4xNi4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55
YXJucGtnLmNvbS9iYWJlbC1wbHVnaW4tdHJhbnNmb3JtLWFzeW5jLXRvLWdlbmVyYXRvci8tL2Jh
YmVsLXBsdWdpbi10cmFuc2Zvcm0tYXN5bmMtdG8tZ2VuZXJhdG9yLTYuMTYuMC50Z3ojMTllYzM2
Y2IxNDg2YjU5ZjlmNDY4YWRmYTQyY2UxMzkwOGNhMjk5OSIKKyAgZGVwZW5kZW5jaWVzOgorICAg
IGJhYmVsLWhlbHBlci1yZW1hcC1hc3luYy10by1nZW5lcmF0b3IgIl42LjE2LjAiCisgICAgYmFi
ZWwtcGx1Z2luLXN5bnRheC1hc3luYy1mdW5jdGlvbnMgIl42LjguMCIKKyAgICBiYWJlbC1ydW50
aW1lICJeNi4wLjAiCisKK2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tY2xhc3MtcHJvcGVydGllc0Be
Ni4xOC4wOgorICB2ZXJzaW9uICI2LjE5LjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5
Lnlhcm5wa2cuY29tL2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tY2xhc3MtcHJvcGVydGllcy8tL2Jh
YmVsLXBsdWdpbi10cmFuc2Zvcm0tY2xhc3MtcHJvcGVydGllcy02LjE5LjAudGd6IzEyNzRiMzQ5
YWJhYWRjODM1MTY0ZTIwMDRmNGEyNDQ0YTI3ODhkNWYiCisgIGRlcGVuZGVuY2llczoKKyAgICBi
YWJlbC1oZWxwZXItZnVuY3Rpb24tbmFtZSAiXjYuMTguMCIKKyAgICBiYWJlbC1wbHVnaW4tc3lu
dGF4LWNsYXNzLXByb3BlcnRpZXMgIl42LjguMCIKKyAgICBiYWJlbC1ydW50aW1lICJeNi45LjEi
CisgICAgYmFiZWwtdGVtcGxhdGUgIl42LjE1LjAiCisKK2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0t
ZGVjb3JhdG9yc0BeNi4xMy4wOgorICB2ZXJzaW9uICI2LjEzLjAiCisgIHJlc29sdmVkICJodHRw
czovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tZGVjb3JhdG9y
cy8tL2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tZGVjb3JhdG9ycy02LjEzLjAudGd6IzgyZDY1YzE0
NzBhZTgzZTJkMTNlZWJlY2IwYTFjMjQ3NmQ2MmRhOWQiCisgIGRlcGVuZGVuY2llczoKKyAgICBi
YWJlbC1oZWxwZXItZGVmaW5lLW1hcCAiXjYuOC4wIgorICAgIGJhYmVsLWhlbHBlci1leHBsb2Rl
LWNsYXNzICJeNi44LjAiCisgICAgYmFiZWwtcGx1Z2luLXN5bnRheC1kZWNvcmF0b3JzICJeNi4x
My4wIgorICAgIGJhYmVsLXJ1bnRpbWUgIl42LjAuMCIKKyAgICBiYWJlbC10ZW1wbGF0ZSAiXjYu
OC4wIgorICAgIGJhYmVsLXR5cGVzICJeNi4xMy4wIgorCitiYWJlbC1wbHVnaW4tdHJhbnNmb3Jt
LWVzMjAxNS1hcnJvdy1mdW5jdGlvbnNAXjYuMy4xMzoKKyAgdmVyc2lvbiAiNi44LjAiCisgIHJl
c29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2JhYmVsLXBsdWdpbi10cmFuc2Zv
cm0tZXMyMDE1LWFycm93LWZ1bmN0aW9ucy8tL2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tZXMyMDE1
LWFycm93LWZ1bmN0aW9ucy02LjguMC50Z3ojNWI2M2FmYzMxODFiZGM5YThjNGQ0ODFiNWE0ZjNm
N2Q3ZmVmM2Q5ZCIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGJhYmVsLXJ1bnRpbWUgIl42LjAuMCIK
KworYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1lczIwMTUtYmxvY2stc2NvcGVkLWZ1bmN0aW9uc0Be
Ni4zLjEzOgorICB2ZXJzaW9uICI2LjguMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnku
eWFybnBrZy5jb20vYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1lczIwMTUtYmxvY2stc2NvcGVkLWZ1
bmN0aW9ucy8tL2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tZXMyMDE1LWJsb2NrLXNjb3BlZC1mdW5j
dGlvbnMtNi44LjAudGd6I2VkOTVkNjI5YzRiNWE3MWFlMjk2ODJiOTk4ZjcwZDk4MzNlYjM2NmQi
CisgIGRlcGVuZGVuY2llczoKKyAgICBiYWJlbC1ydW50aW1lICJeNi4wLjAiCisKK2JhYmVsLXBs
dWdpbi10cmFuc2Zvcm0tZXMyMDE1LWJsb2NrLXNjb3BpbmdAXjYuMTguMDoKKyAgdmVyc2lvbiAi
Ni4xOC4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9iYWJlbC1w
bHVnaW4tdHJhbnNmb3JtLWVzMjAxNS1ibG9jay1zY29waW5nLy0vYmFiZWwtcGx1Z2luLXRyYW5z
Zm9ybS1lczIwMTUtYmxvY2stc2NvcGluZy02LjE4LjAudGd6IzNiZmRjZmVjMzE4ZDQ2ZGYyMjUy
NWNkZWE4OGYxOTc4ODEzNjUzYWYiCisgIGRlcGVuZGVuY2llczoKKyAgICBiYWJlbC1ydW50aW1l
ICJeNi45LjAiCisgICAgYmFiZWwtdGVtcGxhdGUgIl42LjE1LjAiCisgICAgYmFiZWwtdHJhdmVy
c2UgIl42LjE4LjAiCisgICAgYmFiZWwtdHlwZXMgIl42LjE4LjAiCisgICAgbG9kYXNoICJeNC4y
LjAiCisKK2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tZXMyMDE1LWNsYXNzZXNAXjYuMTguMDoKKyAg
dmVyc2lvbiAiNi4xOC4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNv
bS9iYWJlbC1wbHVnaW4tdHJhbnNmb3JtLWVzMjAxNS1jbGFzc2VzLy0vYmFiZWwtcGx1Z2luLXRy
YW5zZm9ybS1lczIwMTUtY2xhc3Nlcy02LjE4LjAudGd6I2ZmZTdhMTczMjFiZjgzZTQ5NGRjZGEw
YWUzZmM3MmRmNDhmZmQxZDkiCisgIGRlcGVuZGVuY2llczoKKyAgICBiYWJlbC1oZWxwZXItZGVm
aW5lLW1hcCAiXjYuMTguMCIKKyAgICBiYWJlbC1oZWxwZXItZnVuY3Rpb24tbmFtZSAiXjYuMTgu
MCIKKyAgICBiYWJlbC1oZWxwZXItb3B0aW1pc2UtY2FsbC1leHByZXNzaW9uICJeNi4xOC4wIgor
ICAgIGJhYmVsLWhlbHBlci1yZXBsYWNlLXN1cGVycyAiXjYuMTguMCIKKyAgICBiYWJlbC1tZXNz
YWdlcyAiXjYuOC4wIgorICAgIGJhYmVsLXJ1bnRpbWUgIl42LjkuMCIKKyAgICBiYWJlbC10ZW1w
bGF0ZSAiXjYuMTQuMCIKKyAgICBiYWJlbC10cmF2ZXJzZSAiXjYuMTguMCIKKyAgICBiYWJlbC10
eXBlcyAiXjYuMTguMCIKKworYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1lczIwMTUtY29tcHV0ZWQt
cHJvcGVydGllc0BeNi4zLjEzOgorICB2ZXJzaW9uICI2LjguMCIKKyAgcmVzb2x2ZWQgImh0dHBz
Oi8vcmVnaXN0cnkueWFybnBrZy5jb20vYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1lczIwMTUtY29t
cHV0ZWQtcHJvcGVydGllcy8tL2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tZXMyMDE1LWNvbXB1dGVk
LXByb3BlcnRpZXMtNi44LjAudGd6I2Y1MTAxMGZkNjFiM2JkN2I2YjYwYTVmZGZkMzA3YmI3YTUy
Nzk4NzAiCisgIGRlcGVuZGVuY2llczoKKyAgICBiYWJlbC1oZWxwZXItZGVmaW5lLW1hcCAiXjYu
OC4wIgorICAgIGJhYmVsLXJ1bnRpbWUgIl42LjAuMCIKKyAgICBiYWJlbC10ZW1wbGF0ZSAiXjYu
OC4wIgorCitiYWJlbC1wbHVnaW4tdHJhbnNmb3JtLWVzMjAxNS1kZXN0cnVjdHVyaW5nQF42LjE4
LjA6CisgIHZlcnNpb24gIjYuMTkuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFy
bnBrZy5jb20vYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1lczIwMTUtZGVzdHJ1Y3R1cmluZy8tL2Jh
YmVsLXBsdWdpbi10cmFuc2Zvcm0tZXMyMDE1LWRlc3RydWN0dXJpbmctNi4xOS4wLnRneiNmZjFk
OTExYzRiM2Y0Y2FiNjIxYmQ2NjcwMmE4NjlhY2QxOTAwNTMzIgorICBkZXBlbmRlbmNpZXM6Cisg
ICAgYmFiZWwtcnVudGltZSAiXjYuOS4wIgorCitiYWJlbC1wbHVnaW4tdHJhbnNmb3JtLWVzMjAx
NS1kdXBsaWNhdGUta2V5c0BeNi42LjA6CisgIHZlcnNpb24gIjYuOC4wIgorICByZXNvbHZlZCAi
aHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9iYWJlbC1wbHVnaW4tdHJhbnNmb3JtLWVzMjAx
NS1kdXBsaWNhdGUta2V5cy8tL2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tZXMyMDE1LWR1cGxpY2F0
ZS1rZXlzLTYuOC4wLnRneiNmZDhmN2Y3MTcxZmMxMDhjYzFjNzBjMzE2NGI5ZjE1YTgxYzI1Zjdk
IgorICBkZXBlbmRlbmNpZXM6CisgICAgYmFiZWwtcnVudGltZSAiXjYuMC4wIgorICAgIGJhYmVs
LXR5cGVzICJeNi44LjAiCisKK2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tZXMyMDE1LWZvci1vZkBe
Ni4xOC4wOgorICB2ZXJzaW9uICI2LjE4LjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5
Lnlhcm5wa2cuY29tL2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tZXMyMDE1LWZvci1vZi8tL2JhYmVs
LXBsdWdpbi10cmFuc2Zvcm0tZXMyMDE1LWZvci1vZi02LjE4LjAudGd6IzRjNTE3NTA0ZGI2NGJm
OGNmYzExOWE2YjhmMTc3MjExZjIwMjhhNzAiCisgIGRlcGVuZGVuY2llczoKKyAgICBiYWJlbC1y
dW50aW1lICJeNi4wLjAiCisKK2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tZXMyMDE1LWZ1bmN0aW9u
LW5hbWVAXjYuOS4wOgorICB2ZXJzaW9uICI2LjkuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVn
aXN0cnkueWFybnBrZy5jb20vYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1lczIwMTUtZnVuY3Rpb24t
bmFtZS8tL2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tZXMyMDE1LWZ1bmN0aW9uLW5hbWUtNi45LjAu
dGd6IzhjMTM1YjE3ZGJkMDY0ZTViYmE1NmVjNTExYmFhZWUyZmNhODI3MTkiCisgIGRlcGVuZGVu
Y2llczoKKyAgICBiYWJlbC1oZWxwZXItZnVuY3Rpb24tbmFtZSAiXjYuOC4wIgorICAgIGJhYmVs
LXJ1bnRpbWUgIl42LjkuMCIKKyAgICBiYWJlbC10eXBlcyAiXjYuOS4wIgorCitiYWJlbC1wbHVn
aW4tdHJhbnNmb3JtLWVzMjAxNS1saXRlcmFsc0BeNi4zLjEzOgorICB2ZXJzaW9uICI2LjguMCIK
KyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vYmFiZWwtcGx1Z2luLXRy
YW5zZm9ybS1lczIwMTUtbGl0ZXJhbHMvLS9iYWJlbC1wbHVnaW4tdHJhbnNmb3JtLWVzMjAxNS1s
aXRlcmFscy02LjguMC50Z3ojNTBhYTJlNWM3OTU4ZmMyYWIyNWQ3NGVjMTE3ZTBjYzk4ZjA0NjQ2
OCIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGJhYmVsLXJ1bnRpbWUgIl42LjAuMCIKKworYmFiZWwt
cGx1Z2luLXRyYW5zZm9ybS1lczIwMTUtbW9kdWxlcy1hbWRAXjYuMTguMDoKKyAgdmVyc2lvbiAi
Ni4xOC4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9iYWJlbC1w
bHVnaW4tdHJhbnNmb3JtLWVzMjAxNS1tb2R1bGVzLWFtZC8tL2JhYmVsLXBsdWdpbi10cmFuc2Zv
cm0tZXMyMDE1LW1vZHVsZXMtYW1kLTYuMTguMC50Z3ojNDlhMDU0Y2JiNzYyYmRmOWFlMmQ4YTgw
NzA3NmNmYWRlNjE0MWU0MCIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGJhYmVsLXBsdWdpbi10cmFu
c2Zvcm0tZXMyMDE1LW1vZHVsZXMtY29tbW9uanMgIl42LjE4LjAiCisgICAgYmFiZWwtcnVudGlt
ZSAiXjYuMC4wIgorICAgIGJhYmVsLXRlbXBsYXRlICJeNi44LjAiCisKK2JhYmVsLXBsdWdpbi10
cmFuc2Zvcm0tZXMyMDE1LW1vZHVsZXMtY29tbW9uanNAXjYuMTguMDoKKyAgdmVyc2lvbiAiNi4x
OC4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9iYWJlbC1wbHVn
aW4tdHJhbnNmb3JtLWVzMjAxNS1tb2R1bGVzLWNvbW1vbmpzLy0vYmFiZWwtcGx1Z2luLXRyYW5z
Zm9ybS1lczIwMTUtbW9kdWxlcy1jb21tb25qcy02LjE4LjAudGd6I2MxNWFlNWJiMTFiMzJhMGFi
ZGNjOThhNTgzN2JhYTRlZThkNjdiY2MiCisgIGRlcGVuZGVuY2llczoKKyAgICBiYWJlbC1wbHVn
aW4tdHJhbnNmb3JtLXN0cmljdC1tb2RlICJeNi4xOC4wIgorICAgIGJhYmVsLXJ1bnRpbWUgIl42
LjAuMCIKKyAgICBiYWJlbC10ZW1wbGF0ZSAiXjYuMTYuMCIKKyAgICBiYWJlbC10eXBlcyAiXjYu
MTguMCIKKworYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1lczIwMTUtbW9kdWxlcy1zeXN0ZW1qc0Be
Ni4xOC4wOgorICB2ZXJzaW9uICI2LjE5LjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5
Lnlhcm5wa2cuY29tL2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tZXMyMDE1LW1vZHVsZXMtc3lzdGVt
anMvLS9iYWJlbC1wbHVnaW4tdHJhbnNmb3JtLWVzMjAxNS1tb2R1bGVzLXN5c3RlbWpzLTYuMTku
MC50Z3ojNTA0MzgxMzZlYmE3NDUyN2VmYTAwYTViMGZlZmFmMWRjNDA3MWRhNiIKKyAgZGVwZW5k
ZW5jaWVzOgorICAgIGJhYmVsLWhlbHBlci1ob2lzdC12YXJpYWJsZXMgIl42LjE4LjAiCisgICAg
YmFiZWwtcnVudGltZSAiXjYuMTEuNiIKKyAgICBiYWJlbC10ZW1wbGF0ZSAiXjYuMTQuMCIKKwor
YmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1lczIwMTUtbW9kdWxlcy11bWRAXjYuMTguMDoKKyAgdmVy
c2lvbiAiNi4xOC4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9i
YWJlbC1wbHVnaW4tdHJhbnNmb3JtLWVzMjAxNS1tb2R1bGVzLXVtZC8tL2JhYmVsLXBsdWdpbi10
cmFuc2Zvcm0tZXMyMDE1LW1vZHVsZXMtdW1kLTYuMTguMC50Z3ojMjMzNTE3NzBlY2U1YzFmOGU4
M2VkNjdjYjFkNzk5Mjg4NDQ5MWU1MCIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGJhYmVsLXBsdWdp
bi10cmFuc2Zvcm0tZXMyMDE1LW1vZHVsZXMtYW1kICJeNi4xOC4wIgorICAgIGJhYmVsLXJ1bnRp
bWUgIl42LjAuMCIKKyAgICBiYWJlbC10ZW1wbGF0ZSAiXjYuOC4wIgorCitiYWJlbC1wbHVnaW4t
dHJhbnNmb3JtLWVzMjAxNS1vYmplY3Qtc3VwZXJAXjYuMy4xMzoKKyAgdmVyc2lvbiAiNi44LjAi
CisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2JhYmVsLXBsdWdpbi10
cmFuc2Zvcm0tZXMyMDE1LW9iamVjdC1zdXBlci8tL2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tZXMy
MDE1LW9iamVjdC1zdXBlci02LjguMC50Z3ojMWI4NTg3NDBhNWE0NDAwODg3YzIzZGNmZjZmNGQ1
NmVlYTRhMjRjNSIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGJhYmVsLWhlbHBlci1yZXBsYWNlLXN1
cGVycyAiXjYuOC4wIgorICAgIGJhYmVsLXJ1bnRpbWUgIl42LjAuMCIKKworYmFiZWwtcGx1Z2lu
LXRyYW5zZm9ybS1lczIwMTUtcGFyYW1ldGVyc0BeNi4xOC4wOgorICB2ZXJzaW9uICI2LjE4LjAi
CisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2JhYmVsLXBsdWdpbi10
cmFuc2Zvcm0tZXMyMDE1LXBhcmFtZXRlcnMvLS9iYWJlbC1wbHVnaW4tdHJhbnNmb3JtLWVzMjAx
NS1wYXJhbWV0ZXJzLTYuMTguMC50Z3ojOWIyY2ZlMjM4YzU0OWYxNjM1YmEyN2ZjMWRhYTg1OGJl
NzA2MDhiMSIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGJhYmVsLWhlbHBlci1jYWxsLWRlbGVnYXRl
ICJeNi4xOC4wIgorICAgIGJhYmVsLWhlbHBlci1nZXQtZnVuY3Rpb24tYXJpdHkgIl42LjE4LjAi
CisgICAgYmFiZWwtcnVudGltZSAiXjYuOS4wIgorICAgIGJhYmVsLXRlbXBsYXRlICJeNi4xNi4w
IgorICAgIGJhYmVsLXRyYXZlcnNlICJeNi4xOC4wIgorICAgIGJhYmVsLXR5cGVzICJeNi4xOC4w
IgorCitiYWJlbC1wbHVnaW4tdHJhbnNmb3JtLWVzMjAxNS1zaG9ydGhhbmQtcHJvcGVydGllc0Be
Ni4xOC4wOgorICB2ZXJzaW9uICI2LjE4LjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5
Lnlhcm5wa2cuY29tL2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tZXMyMDE1LXNob3J0aGFuZC1wcm9w
ZXJ0aWVzLy0vYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1lczIwMTUtc2hvcnRoYW5kLXByb3BlcnRp
ZXMtNi4xOC4wLnRneiNlMmVkZTNiN2RmNDdiZjk4MDE1MTkyNjUzNGQxZGQwY2JlYTU4ZjQzIgor
ICBkZXBlbmRlbmNpZXM6CisgICAgYmFiZWwtcnVudGltZSAiXjYuMC4wIgorICAgIGJhYmVsLXR5
cGVzICJeNi4xOC4wIgorCitiYWJlbC1wbHVnaW4tdHJhbnNmb3JtLWVzMjAxNS1zcHJlYWRAXjYu
My4xMzoKKyAgdmVyc2lvbiAiNi44LjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlh
cm5wa2cuY29tL2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tZXMyMDE1LXNwcmVhZC8tL2JhYmVsLXBs
dWdpbi10cmFuc2Zvcm0tZXMyMDE1LXNwcmVhZC02LjguMC50Z3ojMDIxN2Y3MzdlM2I4MjFmYTVh
NjY5ZjE4N2M2ZWQ1OTIwNWYwNWU5YyIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGJhYmVsLXJ1bnRp
bWUgIl42LjAuMCIKKworYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1lczIwMTUtc3RpY2t5LXJlZ2V4
QF42LjMuMTM6CisgIHZlcnNpb24gIjYuOC4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3Ry
eS55YXJucGtnLmNvbS9iYWJlbC1wbHVnaW4tdHJhbnNmb3JtLWVzMjAxNS1zdGlja3ktcmVnZXgv
LS9iYWJlbC1wbHVnaW4tdHJhbnNmb3JtLWVzMjAxNS1zdGlja3ktcmVnZXgtNi44LjAudGd6I2U3
M2QzMDBhNDQwYTM1ZDVjNjRmNWMyYTM0NGRjMjM2ZTNkZjQ3YmUiCisgIGRlcGVuZGVuY2llczoK
KyAgICBiYWJlbC1oZWxwZXItcmVnZXggIl42LjguMCIKKyAgICBiYWJlbC1ydW50aW1lICJeNi4w
LjAiCisgICAgYmFiZWwtdHlwZXMgIl42LjguMCIKKworYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1l
czIwMTUtdGVtcGxhdGUtbGl0ZXJhbHNAXjYuNi4wOgorICB2ZXJzaW9uICI2LjguMCIKKyAgcmVz
b2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vYmFiZWwtcGx1Z2luLXRyYW5zZm9y
bS1lczIwMTUtdGVtcGxhdGUtbGl0ZXJhbHMvLS9iYWJlbC1wbHVnaW4tdHJhbnNmb3JtLWVzMjAx
NS10ZW1wbGF0ZS1saXRlcmFscy02LjguMC50Z3ojODZlYjg3NmQwYTJjNjM1ZGE0ZWMwNDhiNGY3
ZGU5ZGZjODk3ZTY2YiIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGJhYmVsLXJ1bnRpbWUgIl42LjAu
MCIKKworYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1lczIwMTUtdHlwZW9mLXN5bWJvbEBeNi4xOC4w
OgorICB2ZXJzaW9uICI2LjE4LjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5w
a2cuY29tL2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tZXMyMDE1LXR5cGVvZi1zeW1ib2wvLS9iYWJl
bC1wbHVnaW4tdHJhbnNmb3JtLWVzMjAxNS10eXBlb2Ytc3ltYm9sLTYuMTguMC50Z3ojMGIxNGM0
ODYyOWM5MGZmNDdhMDY1MDA3N2Y2YWE2OTliZWUzNTc5OCIKKyAgZGVwZW5kZW5jaWVzOgorICAg
IGJhYmVsLXJ1bnRpbWUgIl42LjAuMCIKKworYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1lczIwMTUt
dW5pY29kZS1yZWdleEBeNi4zLjEzOgorICB2ZXJzaW9uICI2LjExLjAiCisgIHJlc29sdmVkICJo
dHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tZXMyMDE1
LXVuaWNvZGUtcmVnZXgvLS9iYWJlbC1wbHVnaW4tdHJhbnNmb3JtLWVzMjAxNS11bmljb2RlLXJl
Z2V4LTYuMTEuMC50Z3ojNjI5OGNlYWJhYWQ4OGQ1MGEzZjRmMzkyZDhkZTk5NzI2MGY2ZWYyYyIK
KyAgZGVwZW5kZW5jaWVzOgorICAgIGJhYmVsLWhlbHBlci1yZWdleCAiXjYuOC4wIgorICAgIGJh
YmVsLXJ1bnRpbWUgIl42LjAuMCIKKyAgICByZWdleHB1LWNvcmUgIl4yLjAuMCIKKworYmFiZWwt
cGx1Z2luLXRyYW5zZm9ybS1leHBvbmVudGlhdGlvbi1vcGVyYXRvckBeNi4zLjEzOgorICB2ZXJz
aW9uICI2LjguMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vYmFi
ZWwtcGx1Z2luLXRyYW5zZm9ybS1leHBvbmVudGlhdGlvbi1vcGVyYXRvci8tL2JhYmVsLXBsdWdp
bi10cmFuc2Zvcm0tZXhwb25lbnRpYXRpb24tb3BlcmF0b3ItNi44LjAudGd6I2RiMjU3NDJlOTMz
OWVhZGU2NzZjYTlhY2VjNDZmOTU1NTk5YTY4YTQiCisgIGRlcGVuZGVuY2llczoKKyAgICBiYWJl
bC1oZWxwZXItYnVpbGRlci1iaW5hcnktYXNzaWdubWVudC1vcGVyYXRvci12aXNpdG9yICJeNi44
LjAiCisgICAgYmFiZWwtcGx1Z2luLXN5bnRheC1leHBvbmVudGlhdGlvbi1vcGVyYXRvciAiXjYu
OC4wIgorICAgIGJhYmVsLXJ1bnRpbWUgIl42LjAuMCIKKworYmFiZWwtcGx1Z2luLXRyYW5zZm9y
bS1vYmplY3QtcmVzdC1zcHJlYWRAXjYuMTYuMDoKKyAgdmVyc2lvbiAiNi4xOS4wIgorICByZXNv
bHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9iYWJlbC1wbHVnaW4tdHJhbnNmb3Jt
LW9iamVjdC1yZXN0LXNwcmVhZC8tL2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tb2JqZWN0LXJlc3Qt
c3ByZWFkLTYuMTkuMC50Z3ojZjZhYzQyOGVlM2NiNGM2YWEwMDk0M2VkMTQyMmNlODEzNjAzYjM0
YyIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGJhYmVsLXBsdWdpbi1zeW50YXgtb2JqZWN0LXJlc3Qt
c3ByZWFkICJeNi44LjAiCisgICAgYmFiZWwtcnVudGltZSAiXjYuMC4wIgorCitiYWJlbC1wbHVn
aW4tdHJhbnNmb3JtLXJlZ2VuZXJhdG9yQF42LjE2LjA6CisgIHZlcnNpb24gIjYuMTYuMSIKKyAg
cmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vYmFiZWwtcGx1Z2luLXRyYW5z
Zm9ybS1yZWdlbmVyYXRvci8tL2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tcmVnZW5lcmF0b3ItNi4x
Ni4xLnRneiNhNzVkZTZiMDQ4YTE0MTU0YWFlMTRiMDEyMjc1NmM1YmVkMzkyZjU5IgorICBkZXBl
bmRlbmNpZXM6CisgICAgYmFiZWwtcnVudGltZSAiXjYuOS4wIgorICAgIGJhYmVsLXR5cGVzICJe
Ni4xNi4wIgorICAgIHByaXZhdGUgIn4wLjEuNSIKKworYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1y
dW50aW1lQF42LjAuMDoKKyAgdmVyc2lvbiAiNi4xNS4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9y
ZWdpc3RyeS55YXJucGtnLmNvbS9iYWJlbC1wbHVnaW4tdHJhbnNmb3JtLXJ1bnRpbWUvLS9iYWJl
bC1wbHVnaW4tdHJhbnNmb3JtLXJ1bnRpbWUtNi4xNS4wLnRneiMzZDc1YjRkOTQ5YWQ4MWFmMTU3
NTcwMjczODQ2ZmI1OWFlYjBkNTdjIgorICBkZXBlbmRlbmNpZXM6CisgICAgYmFiZWwtcnVudGlt
ZSAiXjYuOS4wIgorCitiYWJlbC1wbHVnaW4tdHJhbnNmb3JtLXN0cmljdC1tb2RlQF42LjE4LjA6
CisgIHZlcnNpb24gIjYuMTguMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBr
Zy5jb20vYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1zdHJpY3QtbW9kZS8tL2JhYmVsLXBsdWdpbi10
cmFuc2Zvcm0tc3RyaWN0LW1vZGUtNi4xOC4wLnRneiNkZjdjZjI5OTFmZTA0NmY0NDE2M2RjZDEx
MGQ1Y2E0M2JjNjUyYjlkIgorICBkZXBlbmRlbmNpZXM6CisgICAgYmFiZWwtcnVudGltZSAiXjYu
MC4wIgorICAgIGJhYmVsLXR5cGVzICJeNi4xOC4wIgorCitiYWJlbC1wcmVzZXQtZXMyMDE1QF42
LjAuMDoKKyAgdmVyc2lvbiAiNi4xOC4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55
YXJucGtnLmNvbS9iYWJlbC1wcmVzZXQtZXMyMDE1Ly0vYmFiZWwtcHJlc2V0LWVzMjAxNS02LjE4
LjAudGd6I2I4YzcwZGY4NGVjOTQ4YzQzZGNmMmJmNzcwZTk4OGViN2RhODgzMTIiCisgIGRlcGVu
ZGVuY2llczoKKyAgICBiYWJlbC1wbHVnaW4tY2hlY2stZXMyMDE1LWNvbnN0YW50cyAiXjYuMy4x
MyIKKyAgICBiYWJlbC1wbHVnaW4tdHJhbnNmb3JtLWVzMjAxNS1hcnJvdy1mdW5jdGlvbnMgIl42
LjMuMTMiCisgICAgYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1lczIwMTUtYmxvY2stc2NvcGVkLWZ1
bmN0aW9ucyAiXjYuMy4xMyIKKyAgICBiYWJlbC1wbHVnaW4tdHJhbnNmb3JtLWVzMjAxNS1ibG9j
ay1zY29waW5nICJeNi4xOC4wIgorICAgIGJhYmVsLXBsdWdpbi10cmFuc2Zvcm0tZXMyMDE1LWNs
YXNzZXMgIl42LjE4LjAiCisgICAgYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1lczIwMTUtY29tcHV0
ZWQtcHJvcGVydGllcyAiXjYuMy4xMyIKKyAgICBiYWJlbC1wbHVnaW4tdHJhbnNmb3JtLWVzMjAx
NS1kZXN0cnVjdHVyaW5nICJeNi4xOC4wIgorICAgIGJhYmVsLXBsdWdpbi10cmFuc2Zvcm0tZXMy
MDE1LWR1cGxpY2F0ZS1rZXlzICJeNi42LjAiCisgICAgYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1l
czIwMTUtZm9yLW9mICJeNi4xOC4wIgorICAgIGJhYmVsLXBsdWdpbi10cmFuc2Zvcm0tZXMyMDE1
LWZ1bmN0aW9uLW5hbWUgIl42LjkuMCIKKyAgICBiYWJlbC1wbHVnaW4tdHJhbnNmb3JtLWVzMjAx
NS1saXRlcmFscyAiXjYuMy4xMyIKKyAgICBiYWJlbC1wbHVnaW4tdHJhbnNmb3JtLWVzMjAxNS1t
b2R1bGVzLWFtZCAiXjYuMTguMCIKKyAgICBiYWJlbC1wbHVnaW4tdHJhbnNmb3JtLWVzMjAxNS1t
b2R1bGVzLWNvbW1vbmpzICJeNi4xOC4wIgorICAgIGJhYmVsLXBsdWdpbi10cmFuc2Zvcm0tZXMy
MDE1LW1vZHVsZXMtc3lzdGVtanMgIl42LjE4LjAiCisgICAgYmFiZWwtcGx1Z2luLXRyYW5zZm9y
bS1lczIwMTUtbW9kdWxlcy11bWQgIl42LjE4LjAiCisgICAgYmFiZWwtcGx1Z2luLXRyYW5zZm9y
bS1lczIwMTUtb2JqZWN0LXN1cGVyICJeNi4zLjEzIgorICAgIGJhYmVsLXBsdWdpbi10cmFuc2Zv
cm0tZXMyMDE1LXBhcmFtZXRlcnMgIl42LjE4LjAiCisgICAgYmFiZWwtcGx1Z2luLXRyYW5zZm9y
bS1lczIwMTUtc2hvcnRoYW5kLXByb3BlcnRpZXMgIl42LjE4LjAiCisgICAgYmFiZWwtcGx1Z2lu
LXRyYW5zZm9ybS1lczIwMTUtc3ByZWFkICJeNi4zLjEzIgorICAgIGJhYmVsLXBsdWdpbi10cmFu
c2Zvcm0tZXMyMDE1LXN0aWNreS1yZWdleCAiXjYuMy4xMyIKKyAgICBiYWJlbC1wbHVnaW4tdHJh
bnNmb3JtLWVzMjAxNS10ZW1wbGF0ZS1saXRlcmFscyAiXjYuNi4wIgorICAgIGJhYmVsLXBsdWdp
bi10cmFuc2Zvcm0tZXMyMDE1LXR5cGVvZi1zeW1ib2wgIl42LjE4LjAiCisgICAgYmFiZWwtcGx1
Z2luLXRyYW5zZm9ybS1lczIwMTUtdW5pY29kZS1yZWdleCAiXjYuMy4xMyIKKyAgICBiYWJlbC1w
bHVnaW4tdHJhbnNmb3JtLXJlZ2VuZXJhdG9yICJeNi4xNi4wIgorCitiYWJlbC1wcmVzZXQtc3Rh
Z2UtMkBeNi4wLjA6CisgIHZlcnNpb24gIjYuMTguMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVn
aXN0cnkueWFybnBrZy5jb20vYmFiZWwtcHJlc2V0LXN0YWdlLTIvLS9iYWJlbC1wcmVzZXQtc3Rh
Z2UtMi02LjE4LjAudGd6IzllYjdiZjlhOGU5MWM2ODI2MGQ1YmE3NTAwNDkzY2FhYWRhNGI1YjUi
CisgIGRlcGVuZGVuY2llczoKKyAgICBiYWJlbC1wbHVnaW4tc3ludGF4LWR5bmFtaWMtaW1wb3J0
ICJeNi4xOC4wIgorICAgIGJhYmVsLXBsdWdpbi10cmFuc2Zvcm0tY2xhc3MtcHJvcGVydGllcyAi
XjYuMTguMCIKKyAgICBiYWJlbC1wbHVnaW4tdHJhbnNmb3JtLWRlY29yYXRvcnMgIl42LjEzLjAi
CisgICAgYmFiZWwtcHJlc2V0LXN0YWdlLTMgIl42LjE3LjAiCisKK2JhYmVsLXByZXNldC1zdGFn
ZS0zQF42LjE3LjA6CisgIHZlcnNpb24gIjYuMTcuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVn
aXN0cnkueWFybnBrZy5jb20vYmFiZWwtcHJlc2V0LXN0YWdlLTMvLS9iYWJlbC1wcmVzZXQtc3Rh
Z2UtMy02LjE3LjAudGd6I2I2NjM4ZTQ2ZGI2ZTkxZTNmODg5MDEzZDhjZTE0MzkxN2M2ODVlMzki
CisgIGRlcGVuZGVuY2llczoKKyAgICBiYWJlbC1wbHVnaW4tc3ludGF4LXRyYWlsaW5nLWZ1bmN0
aW9uLWNvbW1hcyAiXjYuMy4xMyIKKyAgICBiYWJlbC1wbHVnaW4tdHJhbnNmb3JtLWFzeW5jLWdl
bmVyYXRvci1mdW5jdGlvbnMgIl42LjE3LjAiCisgICAgYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1h
c3luYy10by1nZW5lcmF0b3IgIl42LjE2LjAiCisgICAgYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1l
eHBvbmVudGlhdGlvbi1vcGVyYXRvciAiXjYuMy4xMyIKKyAgICBiYWJlbC1wbHVnaW4tdHJhbnNm
b3JtLW9iamVjdC1yZXN0LXNwcmVhZCAiXjYuMTYuMCIKKworYmFiZWwtcmVnaXN0ZXJAXjYuMC4w
LCBiYWJlbC1yZWdpc3RlckBeNi4xOC4wOgorICB2ZXJzaW9uICI2LjE4LjAiCisgIHJlc29sdmVk
ICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2JhYmVsLXJlZ2lzdGVyLy0vYmFiZWwtcmVn
aXN0ZXItNi4xOC4wLnRneiM4OTJlMmUwMzg2NTA3OGRkOTBhZDJjNzE1MTExZWM0NDQ5YjMyYTY4
IgorICBkZXBlbmRlbmNpZXM6CisgICAgYmFiZWwtY29yZSAiXjYuMTguMCIKKyAgICBiYWJlbC1y
dW50aW1lICJeNi4xMS42IgorICAgIGNvcmUtanMgIl4yLjQuMCIKKyAgICBob21lLW9yLXRtcCAi
XjIuMC4wIgorICAgIGxvZGFzaCAiXjQuMi4wIgorICAgIG1rZGlycCAiXjAuNS4xIgorICAgIHNv
dXJjZS1tYXAtc3VwcG9ydCAiXjAuNC4yIgorCitiYWJlbC1ydW50aW1lQF42LjAuMCwgYmFiZWwt
cnVudGltZUBeNi4xMS42LCBiYWJlbC1ydW50aW1lQF42LjkuMCwgYmFiZWwtcnVudGltZUBeNi45
LjE6CisgIHZlcnNpb24gIjYuMTguMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFy
bnBrZy5jb20vYmFiZWwtcnVudGltZS8tL2JhYmVsLXJ1bnRpbWUtNi4xOC4wLnRneiMwZjQxNzdm
ZmQ5ODQ5MmVmMTNiOWY4MjNlOTk5NGEwMjU4NGM5MDc4IgorICBkZXBlbmRlbmNpZXM6CisgICAg
Y29yZS1qcyAiXjIuNC4wIgorICAgIHJlZ2VuZXJhdG9yLXJ1bnRpbWUgIl4wLjkuNSIKKworYmFi
ZWwtdGVtcGxhdGVAXjYuMTQuMCwgYmFiZWwtdGVtcGxhdGVAXjYuMTUuMCwgYmFiZWwtdGVtcGxh
dGVAXjYuMTYuMCwgYmFiZWwtdGVtcGxhdGVAXjYuOC4wOgorICB2ZXJzaW9uICI2LjE2LjAiCisg
IHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2JhYmVsLXRlbXBsYXRlLy0v
YmFiZWwtdGVtcGxhdGUtNi4xNi4wLnRneiNlMTQ5ZGQxYTlmMDNhMzVmODE3ZGRiYzRkMDQ4MTk4
OGU3ZWJjOGNhIgorICBkZXBlbmRlbmNpZXM6CisgICAgYmFiZWwtcnVudGltZSAiXjYuOS4wIgor
ICAgIGJhYmVsLXRyYXZlcnNlICJeNi4xNi4wIgorICAgIGJhYmVsLXR5cGVzICJeNi4xNi4wIgor
ICAgIGJhYnlsb24gIl42LjExLjAiCisgICAgbG9kYXNoICJeNC4yLjAiCisKK2JhYmVsLXRyYXZl
cnNlQF42LjE1LjAsIGJhYmVsLXRyYXZlcnNlQF42LjE2LjAsIGJhYmVsLXRyYXZlcnNlQF42LjE4
LjA6CisgIHZlcnNpb24gIjYuMTkuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFy
bnBrZy5jb20vYmFiZWwtdHJhdmVyc2UvLS9iYWJlbC10cmF2ZXJzZS02LjE5LjAudGd6IzY4MzYz
ZmI4MjFlMjYyNDdkNTJhNTE5YTg0YjJjZWFiOGRmNGY1NWEiCisgIGRlcGVuZGVuY2llczoKKyAg
ICBiYWJlbC1jb2RlLWZyYW1lICJeNi4xNi4wIgorICAgIGJhYmVsLW1lc3NhZ2VzICJeNi44LjAi
CisgICAgYmFiZWwtcnVudGltZSAiXjYuOS4wIgorICAgIGJhYmVsLXR5cGVzICJeNi4xOS4wIgor
ICAgIGJhYnlsb24gIl42LjExLjAiCisgICAgZGVidWcgIl4yLjIuMCIKKyAgICBnbG9iYWxzICJe
OS4wLjAiCisgICAgaW52YXJpYW50ICJeMi4yLjAiCisgICAgbG9kYXNoICJeNC4yLjAiCisKK2Jh
YmVsLXR5cGVzQF42LjEzLjAsIGJhYmVsLXR5cGVzQF42LjE1LjAsIGJhYmVsLXR5cGVzQF42LjE2
LjAsIGJhYmVsLXR5cGVzQF42LjE4LjAsIGJhYmVsLXR5cGVzQF42LjE5LjAsIGJhYmVsLXR5cGVz
QF42LjguMCwgYmFiZWwtdHlwZXNAXjYuOS4wOgorICB2ZXJzaW9uICI2LjE5LjAiCisgIHJlc29s
dmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2JhYmVsLXR5cGVzLy0vYmFiZWwtdHlw
ZXMtNi4xOS4wLnRneiM4ZGIyOTcyZGJlZDAxZjExOTJhOGI2MDJiYTFlMWU0YzUxNjI0MGI5Igor
ICBkZXBlbmRlbmNpZXM6CisgICAgYmFiZWwtcnVudGltZSAiXjYuOS4xIgorICAgIGVzdXRpbHMg
Il4yLjAuMiIKKyAgICBsb2Rhc2ggIl40LjIuMCIKKyAgICB0by1mYXN0LXByb3BlcnRpZXMgIl4x
LjAuMSIKKworYmFieWxvbkBeNi4xMS4wLCBiYWJ5bG9uQF42LjEzLjA6CisgIHZlcnNpb24gIjYu
MTQuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vYmFieWxvbi8t
L2JhYnlsb24tNi4xNC4xLnRneiM5NTYyNzVmYWI3Mjc1M2FkOWIzNDM1ZDdhZmU1OGY4YmYwYTI5
ODE1IgorCitiYWxhbmNlZC1tYXRjaEBeMC40LjEsIGJhbGFuY2VkLW1hdGNoQF4wLjQuMjoKKyAg
dmVyc2lvbiAiMC40LjIiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29t
L2JhbGFuY2VkLW1hdGNoLy0vYmFsYW5jZWQtbWF0Y2gtMC40LjIudGd6I2NiM2YzZTNjNzMyZGMw
ZjAxZWU3MGI0MDNmMzAyZTYxZDc3MDk4MzgiCisKK2Jhc2U2NC1qc0BeMS4wLjI6CisgIHZlcnNp
b24gIjEuMi4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9iYXNl
NjQtanMvLS9iYXNlNjQtanMtMS4yLjAudGd6I2EzOTk5MmQ3MjM1ODQ4MTE5ODJiZTVlMjkwYmI2
YTUzZDg2NzAwZjEiCisKK2JjcnlwdC1wYmtkZkBeMS4wLjA6CisgIHZlcnNpb24gIjEuMC4wIgor
ICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9iY3J5cHQtcGJrZGYvLS9i
Y3J5cHQtcGJrZGYtMS4wLjAudGd6IzNjYTc2Yjg1MjQxYzcxNzBiZjdkOTcwM2U3YjlhYTc0NjMw
MDQwZDQiCisgIGRlcGVuZGVuY2llczoKKyAgICB0d2VldG5hY2wgIl4wLjE0LjMiCisKK2JpZy5q
c0BeMy4xLjM6CisgIHZlcnNpb24gIjMuMS4zIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3Ry
eS55YXJucGtnLmNvbS9iaWcuanMvLS9iaWcuanMtMy4xLjMudGd6IzRjYWRhMjE5MzY1MmViM2Nh
OWVjOGU1NWM5MDE1NjY5Yzk4MDY5NzgiCisKK2JpbmFyeS1leHRlbnNpb25zQF4xLjAuMDoKKyAg
dmVyc2lvbiAiMS44LjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29t
L2JpbmFyeS1leHRlbnNpb25zLy0vYmluYXJ5LWV4dGVuc2lvbnMtMS44LjAudGd6IzQ4ZWM4ZDE2
ZGY0Mzc3ZWFlNWZhNTg4NDY4MjQ4MGFmNGQ5NWM3NzQiCisKK2Jsb2NrLXN0cmVhbUAqOgorICB2
ZXJzaW9uICIwLjAuOSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20v
YmxvY2stc3RyZWFtLy0vYmxvY2stc3RyZWFtLTAuMC45LnRneiMxM2ViZmU3NzhhMDMyMDVjZmUw
Mzc1MTQ4MWViYjRiMzMwMGMxMjZhIgorICBkZXBlbmRlbmNpZXM6CisgICAgaW5oZXJpdHMgIn4y
LjAuMCIKKworYmx1ZWJpcmRAXjMuMC41LCBibHVlYmlyZEBeMy4xLjEsIGJsdWViaXJkQF4zLjQu
NjoKKyAgdmVyc2lvbiAiMy40LjYiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5w
a2cuY29tL2JsdWViaXJkLy0vYmx1ZWJpcmQtMy40LjYudGd6IzAxZGE4ZDgyMWQ4NzgxM2QxNTg5
NjdlNzQzZDVmZTZjNjJjZjhjMGYiCisKK2Jvb2xiYXNlQH4xLjAuMDoKKyAgdmVyc2lvbiAiMS4w
LjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2Jvb2xiYXNlLy0v
Ym9vbGJhc2UtMS4wLjAudGd6IzY4ZGZmNWZiZTYwYzUxZWIzNzcyNWVhOWUzZWQzMTBkY2MxZTc3
NmUiCisKK2Jvb21AMi54Lng6CisgIHZlcnNpb24gIjIuMTAuMSIKKyAgcmVzb2x2ZWQgImh0dHBz
Oi8vcmVnaXN0cnkueWFybnBrZy5jb20vYm9vbS8tL2Jvb20tMi4xMC4xLnRneiMzOWM4OTE4Y2Vm
ZjU3OTlmODNmOTQ5MmE4NDhmNjI1YWRkMGM3NjZmIgorICBkZXBlbmRlbmNpZXM6CisgICAgaG9l
ayAiMi54LngiCisKK2JyYWNlLWV4cGFuc2lvbkBeMS4wLjA6CisgIHZlcnNpb24gIjEuMS42Igor
ICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9icmFjZS1leHBhbnNpb24v
LS9icmFjZS1leHBhbnNpb24tMS4xLjYudGd6IzcxOTdkN2VhYTliODdlNjQ4MzkwZWE2MWZjNjZj
ODQ0Mjc0MjBkZjkiCisgIGRlcGVuZGVuY2llczoKKyAgICBiYWxhbmNlZC1tYXRjaCAiXjAuNC4x
IgorICAgIGNvbmNhdC1tYXAgIjAuMC4xIgorCiticmFjZXNAXjEuOC4yOgorICB2ZXJzaW9uICIx
LjguNSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vYnJhY2VzLy0v
YnJhY2VzLTEuOC41LnRneiNiYTc3OTYyZTEyZGZmOTY5ZDZiNzY3MTFlOTE0YjczNzg1N2JmNmE3
IgorICBkZXBlbmRlbmNpZXM6CisgICAgZXhwYW5kLXJhbmdlICJeMS44LjEiCisgICAgcHJlc2Vy
dmUgIl4wLjIuMCIKKyAgICByZXBlYXQtZWxlbWVudCAiXjEuMS4yIgorCiticm93c2VyaWZ5LWFl
c0AwLjQuMDoKKyAgdmVyc2lvbiAiMC40LjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5
Lnlhcm5wa2cuY29tL2Jyb3dzZXJpZnktYWVzLy0vYnJvd3NlcmlmeS1hZXMtMC40LjAudGd6IzA2
NzE0OWI2NjhkZjMxYzRiNTg1MzNlMDJkMDFlODA2ZDg2MDhlMmMiCisgIGRlcGVuZGVuY2llczoK
KyAgICBpbmhlcml0cyAiXjIuMC4xIgorCiticm93c2VyaWZ5LXpsaWJAXjAuMS40OgorICB2ZXJz
aW9uICIwLjEuNCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vYnJv
d3NlcmlmeS16bGliLy0vYnJvd3NlcmlmeS16bGliLTAuMS40LnRneiNiYjM1ZjhhNTE5ZjYwMGUw
ZmE2Yjg0ODUyNDFjOTc5ZDAxNDFmYjJkIgorICBkZXBlbmRlbmNpZXM6CisgICAgcGFrbyAifjAu
Mi4wIgorCiticm93c2Vyc2xpc3RAfjEuNC4wOgorICB2ZXJzaW9uICIxLjQuMCIKKyAgcmVzb2x2
ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vYnJvd3NlcnNsaXN0Ly0vYnJvd3NlcnNs
aXN0LTEuNC4wLnRneiM5Y2ZkY2Y1Mzg0ZDkxNThmNWI3MGRhMmFhMDBiMzBlOGZmMDE5MDQ5Igor
ICBkZXBlbmRlbmNpZXM6CisgICAgY2FuaXVzZS1kYiAiXjEuMC4zMDAwMDUzOSIKKworYnVmZmVy
LXNoaW1zQF4xLjAuMDoKKyAgdmVyc2lvbiAiMS4wLjAiCisgIHJlc29sdmVkICJodHRwczovL3Jl
Z2lzdHJ5Lnlhcm5wa2cuY29tL2J1ZmZlci1zaGltcy8tL2J1ZmZlci1zaGltcy0xLjAuMC50Z3oj
OTk3OGNlMzE3Mzg4YzY0OWFkODc5MzAyOGMzNDc3ZWYwNDRhOGI1MSIKKworYnVmZmVyQF40Ljku
MDoKKyAgdmVyc2lvbiAiNC45LjEiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5w
a2cuY29tL2J1ZmZlci8tL2J1ZmZlci00LjkuMS50Z3ojNmQxYmI2MDFiMDdhNGVmY2VkOTcwOTQx
MzIwOTMwMjdjOTViYzI5OCIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGJhc2U2NC1qcyAiXjEuMC4y
IgorICAgIGllZWU3NTQgIl4xLjEuNCIKKyAgICBpc2FycmF5ICJeMS4wLjAiCisKK2J1aWx0aW4t
c3RhdHVzLWNvZGVzQF4yLjAuMDoKKyAgdmVyc2lvbiAiMi4wLjAiCisgIHJlc29sdmVkICJodHRw
czovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2J1aWx0aW4tc3RhdHVzLWNvZGVzLy0vYnVpbHRpbi1z
dGF0dXMtY29kZXMtMi4wLjAudGd6IzZmMjIwMDNiYWFjZjAwM2NjZDI4N2FmZTY4NzIxNTFmZGRj
NTg1NzkiCisKK2NhbGxlci1wYXRoQF4wLjEuMDoKKyAgdmVyc2lvbiAiMC4xLjAiCisgIHJlc29s
dmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2NhbGxlci1wYXRoLy0vY2FsbGVyLXBh
dGgtMC4xLjAudGd6Izk0MDg1ZWY2MzU4MWVjZDNkYWE5MjQ0NGE4ZmU5NGU4MjU3Nzc1MWYiCisg
IGRlcGVuZGVuY2llczoKKyAgICBjYWxsc2l0ZXMgIl4wLjIuMCIKKworY2FsbHNpdGVzQF4wLjIu
MDoKKyAgdmVyc2lvbiAiMC4yLjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5w
a2cuY29tL2NhbGxzaXRlcy8tL2NhbGxzaXRlcy0wLjIuMC50Z3ojYWZhYjk2MjYyOTEwYTdmMzNj
MTlhNTc3NTgyNWM2OWYzNGUzNTBjYSIKKworY2FtZWwtY2FzZUAzLjAueDoKKyAgdmVyc2lvbiAi
My4wLjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2NhbWVsLWNh
c2UvLS9jYW1lbC1jYXNlLTMuMC4wLnRneiNjYTNjMzY4OGE0ZTljZjNhNGNkYTc3N2RjNGRjYmM3
MTMyNDljZjczIgorICBkZXBlbmRlbmNpZXM6CisgICAgbm8tY2FzZSAiXjIuMi4wIgorICAgIHVw
cGVyLWNhc2UgIl4xLjEuMSIKKworY2FtZWxjYXNlQF4xLjAuMjoKKyAgdmVyc2lvbiAiMS4yLjEi
CisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2NhbWVsY2FzZS8tL2Nh
bWVsY2FzZS0xLjIuMS50Z3ojOWJiNTMwNGQyZTBiNTY2OThiMmM3NThiMDhhM2VhYTlkYWE1OGEz
OSIKKworY2FuaXVzZS1kYkBeMS4wLjMwMDAwNTM5LCBjYW5pdXNlLWRiQF4xLjAuMzAwMDA1Nzg6
CisgIHZlcnNpb24gIjEuMC4zMDAwMDU5MiIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnku
eWFybnBrZy5jb20vY2FuaXVzZS1kYi8tL2Nhbml1c2UtZGItMS4wLjMwMDAwNTkyLnRneiM3Yjkx
NjAyMzk0MWRmNDA2M2Q5ZDk0NmExZjlhZDBkNWVkYWYyYmNkIgorCitjYXNlbGVzc0B+MC4xMS4w
OgorICB2ZXJzaW9uICIwLjExLjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5w
a2cuY29tL2Nhc2VsZXNzLy0vY2FzZWxlc3MtMC4xMS4wLnRneiM3MTViOTZlYTk4NDE1OTNjYzMz
MDY3OTIzZjVlYzYwZWJkYTRmN2Q3IgorCitjZW50ZXItYWxpZ25AXjAuMS4xOgorICB2ZXJzaW9u
ICIwLjEuMyIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vY2VudGVy
LWFsaWduLy0vY2VudGVyLWFsaWduLTAuMS4zLnRneiNhYTBkMzI2MjliNmVlOTcyMjAwNDExY2Jk
NDQ2MWM5MDdiYzJiN2FkIgorICBkZXBlbmRlbmNpZXM6CisgICAgYWxpZ24tdGV4dCAiXjAuMS4z
IgorICAgIGxhenktY2FjaGUgIl4xLjAuMyIKKworY2hhbGtAXjEuMC4wLCBjaGFsa0BeMS4xLjAs
IGNoYWxrQF4xLjEuMSwgY2hhbGtAXjEuMS4zOgorICB2ZXJzaW9uICIxLjEuMyIKKyAgcmVzb2x2
ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vY2hhbGsvLS9jaGFsay0xLjEuMy50Z3oj
YTgxMTVjNTVlNGE3MDJmZTRkMTUwYWJkMzg3MjgyMmE3ZTA5ZmM5OCIKKyAgZGVwZW5kZW5jaWVz
OgorICAgIGFuc2ktc3R5bGVzICJeMi4yLjEiCisgICAgZXNjYXBlLXN0cmluZy1yZWdleHAgIl4x
LjAuMiIKKyAgICBoYXMtYW5zaSAiXjIuMC4wIgorICAgIHN0cmlwLWFuc2kgIl4zLjAuMCIKKyAg
ICBzdXBwb3J0cy1jb2xvciAiXjIuMC4wIgorCitjaG9raWRhckBeMS4wLjA6CisgIHZlcnNpb24g
IjEuNi4xIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9jaG9raWRh
ci8tL2Nob2tpZGFyLTEuNi4xLnRneiMyZjQ0NDdhYjVlOTZlNTBmYjNkNzg5ZmQ5MGQ0YzcyZTBl
NGM3MGMyIgorICBkZXBlbmRlbmNpZXM6CisgICAgYW55bWF0Y2ggIl4xLjMuMCIKKyAgICBhc3lu
Yy1lYWNoICJeMS4wLjAiCisgICAgZ2xvYi1wYXJlbnQgIl4yLjAuMCIKKyAgICBpbmhlcml0cyAi
XjIuMC4xIgorICAgIGlzLWJpbmFyeS1wYXRoICJeMS4wLjAiCisgICAgaXMtZ2xvYiAiXjIuMC4w
IgorICAgIHBhdGgtaXMtYWJzb2x1dGUgIl4xLjAuMCIKKyAgICByZWFkZGlycCAiXjIuMC4wIgor
ICBvcHRpb25hbERlcGVuZGVuY2llczoKKyAgICBmc2V2ZW50cyAiXjEuMC4wIgorCitjaXJjdWxh
ci1qc29uQF4wLjMuMDoKKyAgdmVyc2lvbiAiMC4zLjEiCisgIHJlc29sdmVkICJodHRwczovL3Jl
Z2lzdHJ5Lnlhcm5wa2cuY29tL2NpcmN1bGFyLWpzb24vLS9jaXJjdWxhci1qc29uLTAuMy4xLnRn
eiNiZThiMzZhZWZjY2RlOGIzY2E3YWEyZDZhZmMwN2EzNzI0MmMwZDJkIgorCitjbGFwQF4xLjAu
OToKKyAgdmVyc2lvbiAiMS4xLjIiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5w
a2cuY29tL2NsYXAvLS9jbGFwLTEuMS4yLnRneiMzMTY1NDViZjIyMjI5MjI1YTJjZWNhYTY4MjRj
ZDJmNTZhOTcwOWVkIgorICBkZXBlbmRlbmNpZXM6CisgICAgY2hhbGsgIl4xLjEuMyIKKworY2xl
YW4tY3NzQDMuNC54OgorICB2ZXJzaW9uICIzLjQuMjEiCisgIHJlc29sdmVkICJodHRwczovL3Jl
Z2lzdHJ5Lnlhcm5wa2cuY29tL2NsZWFuLWNzcy8tL2NsZWFuLWNzcy0zLjQuMjEudGd6IzIxMDFk
NWRiZDE5ZDYzZGJjMTZhNzVlYmQ1NzBlN2MzMzk0OGY2NWIiCisgIGRlcGVuZGVuY2llczoKKyAg
ICBjb21tYW5kZXIgIjIuOC54IgorICAgIHNvdXJjZS1tYXAgIjAuNC54IgorCitjbGktY3Vyc29y
QF4xLjAuMSwgY2xpLWN1cnNvckBeMS4wLjI6CisgIHZlcnNpb24gIjEuMC4yIgorICByZXNvbHZl
ZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9jbGktY3Vyc29yLy0vY2xpLWN1cnNvci0x
LjAuMi50Z3ojNjRkYTNmN2Q1NmE1NDQxMmU1OTc5NGJkNjJkYzM1Mjk1ZThmMjk4NyIKKyAgZGVw
ZW5kZW5jaWVzOgorICAgIHJlc3RvcmUtY3Vyc29yICJeMS4wLjEiCisKK2NsaS1zcGlubmVyc0Be
MC4yLjA6CisgIHZlcnNpb24gIjAuMi4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55
YXJucGtnLmNvbS9jbGktc3Bpbm5lcnMvLS9jbGktc3Bpbm5lcnMtMC4yLjAudGd6Izg1MDc4NzM3
OTEzYjg4MGY2ZWM5ZmZlN2I2NWU4M2VjNzc3NjI4NGYiCisKK2NsaS13aWR0aEBeMi4wLjA6Cisg
IHZlcnNpb24gIjIuMS4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNv
bS9jbGktd2lkdGgvLS9jbGktd2lkdGgtMi4xLjAudGd6I2IyMzRjYTIwOWIyOWVmNjZmYzUxOGQ5
Yjk4ZDU4NDdiMDBlZGYwMGEiCisKK2NsaXVpQF4yLjEuMDoKKyAgdmVyc2lvbiAiMi4xLjAiCisg
IHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2NsaXVpLy0vY2xpdWktMi4x
LjAudGd6IzRiNDc1NzYwZmY4MDI2NGM3NjJjM2ExNzE5MDMyZTkxYzdmZWEwZDEiCisgIGRlcGVu
ZGVuY2llczoKKyAgICBjZW50ZXItYWxpZ24gIl4wLjEuMSIKKyAgICByaWdodC1hbGlnbiAiXjAu
MS4xIgorICAgIHdvcmR3cmFwICIwLjAuMiIKKworY2xvbmVAXjEuMC4yOgorICB2ZXJzaW9uICIx
LjAuMiIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vY2xvbmUvLS9j
bG9uZS0xLjAuMi50Z3ojMjYwYjdhOTllYmIxZWRmZTI0NzUzODE3NWY3ODMyNDNjYjE5ZDE0OSIK
KworY29AXjQuNi4wOgorICB2ZXJzaW9uICI0LjYuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVn
aXN0cnkueWFybnBrZy5jb20vY28vLS9jby00LjYuMC50Z3ojNmVhNmJkZjNkODUzYWU1NGNjYjhl
NDdiZmEwYmYzZjkwMzFmYjE4NCIKKworY29hQH4xLjAuMToKKyAgdmVyc2lvbiAiMS4wLjEiCisg
IHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2NvYS8tL2NvYS0xLjAuMS50
Z3ojN2Y5NTkzNDZjZmM4NzE5ZTNmNzIzM2NkNjg1Mjg1NGE3YzY3ZDhhMyIKKyAgZGVwZW5kZW5j
aWVzOgorICAgIHEgIl4xLjEuMiIKKworY29kZS1wb2ludC1hdEBeMS4wLjA6CisgIHZlcnNpb24g
IjEuMS4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9jb2RlLXBv
aW50LWF0Ly0vY29kZS1wb2ludC1hdC0xLjEuMC50Z3ojMGQwNzBiNGQwNDNhNWJlYTMzYTJmMWE0
MGUyZWRiM2Q5YTRjY2Y3NyIKKworY29sb3ItY29udmVydEBeMS4zLjA6CisgIHZlcnNpb24gIjEu
OC4yIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9jb2xvci1jb252
ZXJ0Ly0vY29sb3ItY29udmVydC0xLjguMi50Z3ojYmU4NjgxODRkN2M4NjMxNzY2ZDU0ZTcwNzhl
MjY3MmQ3YzdlMzMzOSIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGNvbG9yLW5hbWUgIl4xLjEuMSIK
KworY29sb3ItbmFtZUBeMS4wLjAsIGNvbG9yLW5hbWVAXjEuMS4xOgorICB2ZXJzaW9uICIxLjEu
MSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vY29sb3ItbmFtZS8t
L2NvbG9yLW5hbWUtMS4xLjEudGd6IzRiMTQxNTMwNGNmNTAwMjhlYTgxNjQzNjQzYmQ4MmVhMDU4
MDM2ODkiCisKK2NvbG9yLXN0cmluZ0BeMC4zLjA6CisgIHZlcnNpb24gIjAuMy4wIgorICByZXNv
bHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9jb2xvci1zdHJpbmcvLS9jb2xvci1z
dHJpbmctMC4zLjAudGd6IzI3ZDQ2ZmI2NzAyNWM1YzJmYTI1OTkzYmZiZjU3OWU0Nzg0MWI5OTEi
CisgIGRlcGVuZGVuY2llczoKKyAgICBjb2xvci1uYW1lICJeMS4wLjAiCisKK2NvbG9yQF4wLjEx
LjA6CisgIHZlcnNpb24gIjAuMTEuNCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFy
bnBrZy5jb20vY29sb3IvLS9jb2xvci0wLjExLjQudGd6IzZkN2I1Yzc0ZmI2NWU4NDFjZDQ4Nzky
YWQxZWQ1ZTA3YjkwNGQ3NjQiCisgIGRlcGVuZGVuY2llczoKKyAgICBjbG9uZSAiXjEuMC4yIgor
ICAgIGNvbG9yLWNvbnZlcnQgIl4xLjMuMCIKKyAgICBjb2xvci1zdHJpbmcgIl4wLjMuMCIKKwor
Y29sb3JtaW5AXjEuMC41OgorICB2ZXJzaW9uICIxLjEuMiIKKyAgcmVzb2x2ZWQgImh0dHBzOi8v
cmVnaXN0cnkueWFybnBrZy5jb20vY29sb3JtaW4vLS9jb2xvcm1pbi0xLjEuMi50Z3ojZWEyZjc0
MjBhNzJiOTY4ODFhMzhhYWU1OWVjMTI0YTZmNzI5ODEzMyIKKyAgZGVwZW5kZW5jaWVzOgorICAg
IGNvbG9yICJeMC4xMS4wIgorICAgIGNzcy1jb2xvci1uYW1lcyAiMC4wLjQiCisgICAgaGFzICJe
MS4wLjEiCisKK2NvbG9yc0B+MS4xLjI6CisgIHZlcnNpb24gIjEuMS4yIgorICByZXNvbHZlZCAi
aHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9jb2xvcnMvLS9jb2xvcnMtMS4xLjIudGd6IzE2
OGE0NzAxNzU2YjZhN2Y1MWExMmNlMGM5N2JmYTI4YzA4NGVkNjMiCisKK2NvbWJpbmVkLXN0cmVh
bUBeMS4wLjUsIGNvbWJpbmVkLXN0cmVhbUB+MS4wLjU6CisgIHZlcnNpb24gIjEuMC41IgorICBy
ZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9jb21iaW5lZC1zdHJlYW0vLS9j
b21iaW5lZC1zdHJlYW0tMS4wLjUudGd6IzkzODM3MGE1N2I0YTUxZGVhMmM3N2MxNWQ1YzVmZGY4
OTUxNjQwMDkiCisgIGRlcGVuZGVuY2llczoKKyAgICBkZWxheWVkLXN0cmVhbSAifjEuMC4wIgor
Citjb21tYW5kZXJAXjIuOS4wLCBjb21tYW5kZXJAMi45Lng6CisgIHZlcnNpb24gIjIuOS4wIgor
ICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9jb21tYW5kZXIvLS9jb21t
YW5kZXItMi45LjAudGd6IzljOTkwOTQxNzZlMTIyNDBjYjIyZDZjNTE0NjA5ODQwMGZlMGY3ZDQi
CisgIGRlcGVuZGVuY2llczoKKyAgICBncmFjZWZ1bC1yZWFkbGluayAiPj0gMS4wLjAiCisKK2Nv
bW1hbmRlckAyLjgueDoKKyAgdmVyc2lvbiAiMi44LjEiCisgIHJlc29sdmVkICJodHRwczovL3Jl
Z2lzdHJ5Lnlhcm5wa2cuY29tL2NvbW1hbmRlci8tL2NvbW1hbmRlci0yLjguMS50Z3ojMDZiZTM2
N2ZlYmZkYTBjMzMwYWExZTJhMDcyZDNkYzk3NjI0MjVkNCIKKyAgZGVwZW5kZW5jaWVzOgorICAg
IGdyYWNlZnVsLXJlYWRsaW5rICI+PSAxLjAuMCIKKworY29tbW9uZGlyQF4xLjAuMToKKyAgdmVy
c2lvbiAiMS4wLjEiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2Nv
bW1vbmRpci8tL2NvbW1vbmRpci0xLjAuMS50Z3ojZGRkODAwZGEwYzY2MTI3MzkzY2NhNTk1MGVh
OTY4YTNhYWYxMjUzYiIKKworY29uY2F0LW1hcEAwLjAuMToKKyAgdmVyc2lvbiAiMC4wLjEiCisg
IHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2NvbmNhdC1tYXAvLS9jb25j
YXQtbWFwLTAuMC4xLnRneiNkOGE5NmJkNzdmZDY4ZGY3NzkzYTczMDM2YTNiYTBkNTQwNWQ0Nzdi
IgorCitjb25jYXQtc3RyZWFtQF4xLjQuNjoKKyAgdmVyc2lvbiAiMS41LjIiCisgIHJlc29sdmVk
ICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2NvbmNhdC1zdHJlYW0vLS9jb25jYXQtc3Ry
ZWFtLTEuNS4yLnRneiM3MDg5Nzg2MjRkODU2YWY0MWE1YTc0MWRlZmRkMjYxZGE3NTJjMjY2Igor
ICBkZXBlbmRlbmNpZXM6CisgICAgaW5oZXJpdHMgIn4yLjAuMSIKKyAgICByZWFkYWJsZS1zdHJl
YW0gIn4yLjAuMCIKKyAgICB0eXBlZGFycmF5ICJ+MC4wLjUiCisKK2NvbmZpZy1jaGFpbkB+MS4x
LjU6CisgIHZlcnNpb24gIjEuMS4xMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFy
bnBrZy5jb20vY29uZmlnLWNoYWluLy0vY29uZmlnLWNoYWluLTEuMS4xMS50Z3ojYWJhMDk3NDdk
ZmJlNGMzZTcwZTc2NmE2ZTQxNTg2ZTE4NTlmYzZmMiIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGlu
aSAiXjEuMy40IgorICAgIHByb3RvLWxpc3QgIn4xLjIuMSIKKworY29ubmVjdC1oaXN0b3J5LWFw
aS1mYWxsYmFja0BeMS4xLjA6CisgIHZlcnNpb24gIjEuMy4wIgorICByZXNvbHZlZCAiaHR0cHM6
Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9jb25uZWN0LWhpc3RvcnktYXBpLWZhbGxiYWNrLy0vY29u
bmVjdC1oaXN0b3J5LWFwaS1mYWxsYmFjay0xLjMuMC50Z3ojZTUxZDE3ZjhmMGVmMGRiOTBhNjRm
ZGI0N2RlMzA1MTU1NmU5ZjE2OSIKKworY29uc29sZS1icm93c2VyaWZ5QF4xLjEuMDoKKyAgdmVy
c2lvbiAiMS4xLjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2Nv
bnNvbGUtYnJvd3NlcmlmeS8tL2NvbnNvbGUtYnJvd3NlcmlmeS0xLjEuMC50Z3ojZjAyNDFjNDU3
MzBhOWZjNjMyM2IyMDZkYmYzOGVkYzc0MWQwYmIxMCIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGRh
dGUtbm93ICJeMC4xLjQiCisKK2NvbnNvbGUtY29udHJvbC1zdHJpbmdzQF4xLjAuMCwgY29uc29s
ZS1jb250cm9sLXN0cmluZ3NAfjEuMS4wOgorICB2ZXJzaW9uICIxLjEuMCIKKyAgcmVzb2x2ZWQg
Imh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vY29uc29sZS1jb250cm9sLXN0cmluZ3MvLS9j
b25zb2xlLWNvbnRyb2wtc3RyaW5ncy0xLjEuMC50Z3ojM2Q3Y2Y0NDY0ZGI2NDQ2ZWE2NDRiZjRi
Mzk1MDdmOTg1MTAwOGU4ZSIKKworY29uc29saWRhdGVAXjAuMTQuMDoKKyAgdmVyc2lvbiAiMC4x
NC41IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9jb25zb2xpZGF0
ZS8tL2NvbnNvbGlkYXRlLTAuMTQuNS50Z3ojNWEyNTA0N2JjNzZmNzMwNzI2NjdjOGNiNTJjOTg5
ODg4ZjQ5NGM2MyIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGJsdWViaXJkICJeMy4xLjEiCisKK2Nv
bnN0YW50cy1icm93c2VyaWZ5QF4xLjAuMDoKKyAgdmVyc2lvbiAiMS4wLjAiCisgIHJlc29sdmVk
ICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2NvbnN0YW50cy1icm93c2VyaWZ5Ly0vY29u
c3RhbnRzLWJyb3dzZXJpZnktMS4wLjAudGd6I2MyMGI5NmQ4YzYxNzc0OGFhZjFjMTYwMjE3NjBj
ZDI3ZmNiOGNiNzUiCisKK2NvbnRlbnQtZGlzcG9zaXRpb25AMC41LjE6CisgIHZlcnNpb24gIjAu
NS4xIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9jb250ZW50LWRp
c3Bvc2l0aW9uLy0vY29udGVudC1kaXNwb3NpdGlvbi0wLjUuMS50Z3ojODc0NzZjNmE2N2M4ZGFh
ODdlMzJlODc2MTZkZjg4M2JhN2ZiMDcxYiIKKworY29udGVudC10eXBlQH4xLjAuMjoKKyAgdmVy
c2lvbiAiMS4wLjIiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2Nv
bnRlbnQtdHlwZS8tL2NvbnRlbnQtdHlwZS0xLjAuMi50Z3ojYjdkMTEzYWVlN2E4ZGQyN2JkMjEx
MzNjNGRjMjUyOWRmMTcyMWVlZCIKKworY29udmVydC1zb3VyY2UtbWFwQF4xLjEuMDoKKyAgdmVy
c2lvbiAiMS4zLjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2Nv
bnZlcnQtc291cmNlLW1hcC8tL2NvbnZlcnQtc291cmNlLW1hcC0xLjMuMC50Z3ojZTlmM2U5YzZl
MjcyOGVmYzI2NzY2OTZhNzBlYjM4MmY3MzEwNmE2NyIKKworY29va2llLXNpZ25hdHVyZUAxLjAu
NjoKKyAgdmVyc2lvbiAiMS4wLjYiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5w
a2cuY29tL2Nvb2tpZS1zaWduYXR1cmUvLS9jb29raWUtc2lnbmF0dXJlLTEuMC42LnRneiNlMzAz
YTg4MmIzNDJjYzNlZThjYTUxM2E3OTk5OTczNGRhYjNhZTJjIgorCitjb29raWVAMC4zLjE6Cisg
IHZlcnNpb24gIjAuMy4xIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNv
bS9jb29raWUvLS9jb29raWUtMC4zLjEudGd6I2U3ZTBhMWY5ZWY0M2I0YzhiYTkyNWM1YzVhOTZl
ODA2ZDE2ODczYmIiCisKK2NvcmUtanNAXjIuNC4wOgorICB2ZXJzaW9uICIyLjQuMSIKKyAgcmVz
b2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vY29yZS1qcy8tL2NvcmUtanMtMi40
LjEudGd6IzRkZTkxMWU2NjdiMGVhZTkxMjRlMzQyNTRiNTNhZWE2ZmM2MThkM2UiCisKK2NvcmUt
dXRpbC1pc0B+MS4wLjA6CisgIHZlcnNpb24gIjEuMC4yIgorICByZXNvbHZlZCAiaHR0cHM6Ly9y
ZWdpc3RyeS55YXJucGtnLmNvbS9jb3JlLXV0aWwtaXMvLS9jb3JlLXV0aWwtaXMtMS4wLjIudGd6
I2I1ZmQ1NDIyMGFhMmJjNWFiNTdhYWI3MTQwYzk0MDc1NDUwM2MxYTciCisKK2NyeXB0aWxlc0Ay
LngueDoKKyAgdmVyc2lvbiAiMi4wLjUiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlh
cm5wa2cuY29tL2NyeXB0aWxlcy8tL2NyeXB0aWxlcy0yLjAuNS50Z3ojM2JkZmVjZGM2MDgxNDdj
MWM2NzIwMmZhMjkxZTdkY2E1OWVhYTNiOCIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGJvb20gIjIu
eC54IgorCitjcnlwdG8tYnJvd3NlcmlmeUAzLjMuMDoKKyAgdmVyc2lvbiAiMy4zLjAiCisgIHJl
c29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2NyeXB0by1icm93c2VyaWZ5Ly0v
Y3J5cHRvLWJyb3dzZXJpZnktMy4zLjAudGd6I2I5ZmM3NWJiNGEwZWQ2MWRjZjFjZDVkYWU5NmVi
MzBjOWMzZTUwNmMiCisgIGRlcGVuZGVuY2llczoKKyAgICBicm93c2VyaWZ5LWFlcyAiMC40LjAi
CisgICAgcGJrZGYyLWNvbXBhdCAiMi4wLjEiCisgICAgcmlwZW1kMTYwICIwLjIuMCIKKyAgICBz
aGEuanMgIjIuMi42IgorCitjc3MtY29sb3ItbmFtZXNAMC4wLjQ6CisgIHZlcnNpb24gIjAuMC40
IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9jc3MtY29sb3ItbmFt
ZXMvLS9jc3MtY29sb3ItbmFtZXMtMC4wLjQudGd6IzgwOGFkYzJlNzljZjg0NzM4MDY5YjY0NmNi
MjBlYzI3YmViNjI5ZTAiCisKK2Nzcy1sb2FkZXJAXjAuMjUuMDoKKyAgdmVyc2lvbiAiMC4yNS4w
IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9jc3MtbG9hZGVyLy0v
Y3NzLWxvYWRlci0wLjI1LjAudGd6I2MzZmViYzhjZTI4ZjRjODM1NzZiNmIxMzcwN2Y0N2Y5MGMz
OTAyMjMiCisgIGRlcGVuZGVuY2llczoKKyAgICBiYWJlbC1jb2RlLWZyYW1lICJeNi4xMS4wIgor
ICAgIGNzcy1zZWxlY3Rvci10b2tlbml6ZXIgIl4wLjYuMCIKKyAgICBjc3NuYW5vICI+PTIuNi4x
IDw0IgorICAgIGxvYWRlci11dGlscyAifjAuMi4yIgorICAgIGxvZGFzaC5jYW1lbGNhc2UgIl4z
LjAuMSIKKyAgICBvYmplY3QtYXNzaWduICJeNC4wLjEiCisgICAgcG9zdGNzcyAiXjUuMC42Igor
ICAgIHBvc3Rjc3MtbW9kdWxlcy1leHRyYWN0LWltcG9ydHMgIl4xLjAuMCIKKyAgICBwb3N0Y3Nz
LW1vZHVsZXMtbG9jYWwtYnktZGVmYXVsdCAiXjEuMC4xIgorICAgIHBvc3Rjc3MtbW9kdWxlcy1z
Y29wZSAiXjEuMC4wIgorICAgIHBvc3Rjc3MtbW9kdWxlcy12YWx1ZXMgIl4xLjEuMCIKKyAgICBz
b3VyY2UtbGlzdC1tYXAgIl4wLjEuNCIKKworY3NzLXNlbGVjdEBeMS4xLjA6CisgIHZlcnNpb24g
IjEuMi4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9jc3Mtc2Vs
ZWN0Ly0vY3NzLXNlbGVjdC0xLjIuMC50Z3ojMmIzYTExMDUzOWM1MzU1ZjFjZDhkMzE0NjIzZTg3
MGIxMjFlYzg1OCIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGJvb2xiYXNlICJ+MS4wLjAiCisgICAg
Y3NzLXdoYXQgIjIuMSIKKyAgICBkb211dGlscyAiMS41LjEiCisgICAgbnRoLWNoZWNrICJ+MS4w
LjEiCisKK2Nzcy1zZWxlY3Rvci10b2tlbml6ZXJAXjAuNi4wOgorICB2ZXJzaW9uICIwLjYuMCIK
KyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vY3NzLXNlbGVjdG9yLXRv
a2VuaXplci8tL2Nzcy1zZWxlY3Rvci10b2tlbml6ZXItMC42LjAudGd6IzY0NDVmNTgyYzc5MzBk
MjQxZGNjNTAwN2E0M2Q2ZmNiOGYwNzMxNTIiCisgIGRlcGVuZGVuY2llczoKKyAgICBjc3Nlc2Mg
Il4wLjEuMCIKKyAgICBmYXN0cGFyc2UgIl4xLjEuMSIKKyAgICByZWdleHB1LWNvcmUgIl4xLjAu
MCIKKworY3NzLXdoYXRAMi4xOgorICB2ZXJzaW9uICIyLjEuMCIKKyAgcmVzb2x2ZWQgImh0dHBz
Oi8vcmVnaXN0cnkueWFybnBrZy5jb20vY3NzLXdoYXQvLS9jc3Mtd2hhdC0yLjEuMC50Z3ojOTQ2
N2QwMzJjMzhjZmFlZmI5ZjJkNzk1MDEyNTMwNjJmODdmYTFiZCIKKworY3NzZXNjQF4wLjEuMDoK
KyAgdmVyc2lvbiAiMC4xLjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cu
Y29tL2Nzc2VzYy8tL2Nzc2VzYy0wLjEuMC50Z3ojYzgxNDkwM2U0NTYyMzM3MWEwNDc3YjQwMTA5
YWFhZmJlZWFkZGJiNCIKKworImNzc25hbm9APj0yLjYuMSA8NCI6CisgIHZlcnNpb24gIjMuOC4x
IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9jc3NuYW5vLy0vY3Nz
bmFuby0zLjguMS50Z3ojMDA4YTQ4MjE0OGVlOTQ4Y2YwYWYyZWU2ZTQ0YmQ5N2M1M2Y4ODZlYyIK
KyAgZGVwZW5kZW5jaWVzOgorICAgIGF1dG9wcmVmaXhlciAiXjYuMy4xIgorICAgIGRlY2FtZWxp
emUgIl4xLjEuMiIKKyAgICBkZWZpbmVkICJeMS4wLjAiCisgICAgaGFzICJeMS4wLjEiCisgICAg
b2JqZWN0LWFzc2lnbiAiXjQuMC4xIgorICAgIHBvc3Rjc3MgIl41LjAuMTQiCisgICAgcG9zdGNz
cy1jYWxjICJeNS4yLjAiCisgICAgcG9zdGNzcy1jb2xvcm1pbiAiXjIuMS44IgorICAgIHBvc3Rj
c3MtY29udmVydC12YWx1ZXMgIl4yLjMuNCIKKyAgICBwb3N0Y3NzLWRpc2NhcmQtY29tbWVudHMg
Il4yLjAuNCIKKyAgICBwb3N0Y3NzLWRpc2NhcmQtZHVwbGljYXRlcyAiXjIuMC4xIgorICAgIHBv
c3Rjc3MtZGlzY2FyZC1lbXB0eSAiXjIuMC4xIgorICAgIHBvc3Rjc3MtZGlzY2FyZC1vdmVycmlk
ZGVuICJeMC4xLjEiCisgICAgcG9zdGNzcy1kaXNjYXJkLXVudXNlZCAiXjIuMi4xIgorICAgIHBv
c3Rjc3MtZmlsdGVyLXBsdWdpbnMgIl4yLjAuMCIKKyAgICBwb3N0Y3NzLW1lcmdlLWlkZW50cyAi
XjIuMS41IgorICAgIHBvc3Rjc3MtbWVyZ2UtbG9uZ2hhbmQgIl4yLjAuMSIKKyAgICBwb3N0Y3Nz
LW1lcmdlLXJ1bGVzICJeMi4wLjMiCisgICAgcG9zdGNzcy1taW5pZnktZm9udC12YWx1ZXMgIl4x
LjAuMiIKKyAgICBwb3N0Y3NzLW1pbmlmeS1ncmFkaWVudHMgIl4xLjAuMSIKKyAgICBwb3N0Y3Nz
LW1pbmlmeS1wYXJhbXMgIl4xLjAuNCIKKyAgICBwb3N0Y3NzLW1pbmlmeS1zZWxlY3RvcnMgIl4y
LjAuNCIKKyAgICBwb3N0Y3NzLW5vcm1hbGl6ZS1jaGFyc2V0ICJeMS4xLjAiCisgICAgcG9zdGNz
cy1ub3JtYWxpemUtdXJsICJeMy4wLjciCisgICAgcG9zdGNzcy1vcmRlcmVkLXZhbHVlcyAiXjIu
MS4wIgorICAgIHBvc3Rjc3MtcmVkdWNlLWlkZW50cyAiXjIuMi4yIgorICAgIHBvc3Rjc3MtcmVk
dWNlLWluaXRpYWwgIl4xLjAuMCIKKyAgICBwb3N0Y3NzLXJlZHVjZS10cmFuc2Zvcm1zICJeMS4w
LjMiCisgICAgcG9zdGNzcy1zdmdvICJeMi4xLjEiCisgICAgcG9zdGNzcy11bmlxdWUtc2VsZWN0
b3JzICJeMi4wLjIiCisgICAgcG9zdGNzcy12YWx1ZS1wYXJzZXIgIl4zLjIuMyIKKyAgICBwb3N0
Y3NzLXppbmRleCAiXjIuMC4xIgorCitjc3NvQH4yLjIuMToKKyAgdmVyc2lvbiAiMi4yLjEiCisg
IHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2Nzc28vLS9jc3NvLTIuMi4x
LnRneiM1MWZiYjUzNDdlNTBlODFlNmVkNTE2NjhhNDg0OTBhZTZmZTJhZmUyIgorICBkZXBlbmRl
bmNpZXM6CisgICAgY2xhcCAiXjEuMC45IgorICAgIHNvdXJjZS1tYXAgIl4wLjUuMyIKKworZEBe
MC4xLjEsIGRAfjAuMS4xOgorICB2ZXJzaW9uICIwLjEuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8v
cmVnaXN0cnkueWFybnBrZy5jb20vZC8tL2QtMC4xLjEudGd6I2RhMTg0YzUzNWQxOGQ4ZWU3YmEy
YWEyMjliOTE0MDA5ZmFlMTEzMDkiCisgIGRlcGVuZGVuY2llczoKKyAgICBlczUtZXh0ICJ+MC4x
MC4yIgorCitkYXNoZGFzaEBeMS4xMi4wOgorICB2ZXJzaW9uICIxLjE0LjEiCisgIHJlc29sdmVk
ICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2Rhc2hkYXNoLy0vZGFzaGRhc2gtMS4xNC4x
LnRneiM4NTNjZmEwZjdjYmUyZmVkNWRlMjAzMjZiOGRkNTgxMDM1ZjZlMmYwIgorICBkZXBlbmRl
bmNpZXM6CisgICAgYXNzZXJ0LXBsdXMgIl4xLjAuMCIKKworZGF0ZS1ub3dAXjAuMS40OgorICB2
ZXJzaW9uICIwLjEuNCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20v
ZGF0ZS1ub3cvLS9kYXRlLW5vdy0wLjEuNC50Z3ojZWFmNDM5ZmQ0ZDQ4NDhhZDc0ZTVjYzdkYmVm
MjAwNjcyYjllMzQ1YiIKKworZGUtaW5kZW50QF4xLjAuMjoKKyAgdmVyc2lvbiAiMS4wLjIiCisg
IHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2RlLWluZGVudC8tL2RlLWlu
ZGVudC0xLjAuMi50Z3ojYjIwMzhlODQ2ZGMzM2JhYTU3OTYxMjhkMDgwNGI0NTViOGMxZTIxZCIK
KworZGVidWdAXjIuMS4xLCBkZWJ1Z0BeMi4yLjA6CisgIHZlcnNpb24gIjIuMy4zIgorICByZXNv
bHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9kZWJ1Zy8tL2RlYnVnLTIuMy4zLnRn
eiM0MGM0NTNlNjdlNmUxM2M5MDFkZGVjMzE3YWY4OTg2Y2RhOWVmZjhjIgorICBkZXBlbmRlbmNp
ZXM6CisgICAgbXMgIjAuNy4yIgorCitkZWJ1Z0B+Mi4yLjA6CisgIHZlcnNpb24gIjIuMi4wIgor
ICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9kZWJ1Zy8tL2RlYnVnLTIu
Mi4wLnRneiNmODcwNTdlOTk1YjFhMWY2YWU2YTQ5NjA2NjQxMzdiYzU2ZjAzOWRhIgorICBkZXBl
bmRlbmNpZXM6CisgICAgbXMgIjAuNy4xIgorCitkZWNhbWVsaXplQF4xLjAuMCwgZGVjYW1lbGl6
ZUBeMS4xLjI6CisgIHZlcnNpb24gIjEuMi4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3Ry
eS55YXJucGtnLmNvbS9kZWNhbWVsaXplLy0vZGVjYW1lbGl6ZS0xLjIuMC50Z3ojZjY1MzRkMTUx
NDgyNjliMjAzNTJlN2JlZTI2ZjUwMWY5YTE5MTI5MCIKKworZGVlcC1leHRlbmRAfjAuNC4wOgor
ICB2ZXJzaW9uICIwLjQuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5j
b20vZGVlcC1leHRlbmQvLS9kZWVwLWV4dGVuZC0wLjQuMS50Z3ojZWZlNDExM2QwODA4NWY0ZTZm
OTY4Nzc1OTgxMGY4MDc0NjllMjI1MyIKKworZGVlcC1pc0B+MC4xLjM6CisgIHZlcnNpb24gIjAu
MS4zIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9kZWVwLWlzLy0v
ZGVlcC1pcy0wLjEuMy50Z3ojYjM2OWQ2ZmI1ZGJjMTNlZWNmNTI0ZjkxYjA3MGZlZWRjMzU3Y2Yz
NCIKKworZGVmaW5lZEBeMS4wLjA6CisgIHZlcnNpb24gIjEuMC4wIgorICByZXNvbHZlZCAiaHR0
cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9kZWZpbmVkLy0vZGVmaW5lZC0xLjAuMC50Z3ojYzk4
ZDliY2VmNzU2NzQxODhlMTEwOTY5MTUxMTk5ZTM5YjFmYTY5MyIKKworZGVsQF4yLjAuMjoKKyAg
dmVyc2lvbiAiMi4yLjIiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29t
L2RlbC8tL2RlbC0yLjIuMi50Z3ojYzEyYzk4MWQwNjc4NDZjODRiY2FmODYyY2ZmOTMwZDkwN2Zm
ZDFhOCIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGdsb2JieSAiXjUuMC4wIgorICAgIGlzLXBhdGgt
Y3dkICJeMS4wLjAiCisgICAgaXMtcGF0aC1pbi1jd2QgIl4xLjAuMCIKKyAgICBvYmplY3QtYXNz
aWduICJeNC4wLjEiCisgICAgcGlmeSAiXjIuMC4wIgorICAgIHBpbmtpZS1wcm9taXNlICJeMi4w
LjAiCisgICAgcmltcmFmICJeMi4yLjgiCisKK2RlbGF5ZWQtc3RyZWFtQH4xLjAuMDoKKyAgdmVy
c2lvbiAiMS4wLjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2Rl
bGF5ZWQtc3RyZWFtLy0vZGVsYXllZC1zdHJlYW0tMS4wLjAudGd6I2RmM2FlMTk5YWNhZGZiN2Q0
NDBhYWFlMGIyOWUyMjcyYjI0ZWM2MTkiCisKK2RlbGVnYXRlc0BeMS4wLjA6CisgIHZlcnNpb24g
IjEuMC4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9kZWxlZ2F0
ZXMvLS9kZWxlZ2F0ZXMtMS4wLjAudGd6Izg0YzZlMTU5YjgxOTA0ZmRjYTU5YTBlZjQ0Y2Q4NzBk
MzEyNTBmOWEiCisKK2RlcGRAfjEuMS4wOgorICB2ZXJzaW9uICIxLjEuMCIKKyAgcmVzb2x2ZWQg
Imh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vZGVwZC8tL2RlcGQtMS4xLjAudGd6I2UxYmQ4
MmM2YWFiNmNlZDk2NWI5N2I4OGIxN2VkM2U1MjhjYTE4YzMiCisKK2Rlc3Ryb3lAfjEuMC40Ogor
ICB2ZXJzaW9uICIxLjAuNCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5j
b20vZGVzdHJveS8tL2Rlc3Ryb3ktMS4wLjQudGd6Izk3ODg1NzQ0MmM0NDc0OWU0MjA2NjEzZTM3
OTQ2MjA1ODI2YWJkODAiCisKK2RldGVjdC1pbmRlbnRAXjQuMC4wOgorICB2ZXJzaW9uICI0LjAu
MCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vZGV0ZWN0LWluZGVu
dC8tL2RldGVjdC1pbmRlbnQtNC4wLjAudGd6I2Y3NmQwNjQzNTJjZGY0M2ExY2I2Y2U2MTljNGVl
M2E5NDc1ZGUyMDgiCisgIGRlcGVuZGVuY2llczoKKyAgICByZXBlYXRpbmcgIl4yLjAuMCIKKwor
ZGlyZWN0b3JAXjEuMi44OgorICB2ZXJzaW9uICIxLjIuOCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8v
cmVnaXN0cnkueWFybnBrZy5jb20vZGlyZWN0b3IvLS9kaXJlY3Rvci0xLjIuOC50Z3ojYzZkOWI0
ZGQ4OTBlOWFmZjUzNjUxODNmZTljYzhlNzM5OTRjZjJkNSIKKworZG9jdHJpbmVAXjEuMi4yOgor
ICB2ZXJzaW9uICIxLjUuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5j
b20vZG9jdHJpbmUvLS9kb2N0cmluZS0xLjUuMC50Z3ojMzc5ZGNlNzMwZjYxNjZmNzZjZWZhNGU2
NzA3YTE1OWIwMmM1YTZmYSIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGVzdXRpbHMgIl4yLjAuMiIK
KyAgICBpc2FycmF5ICJeMS4wLjAiCisKK2RvbS1jb252ZXJ0ZXJAfjAuMToKKyAgdmVyc2lvbiAi
MC4xLjQiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2RvbS1jb252
ZXJ0ZXIvLS9kb20tY29udmVydGVyLTAuMS40LnRneiNhNDVlZjU3MjdiODkwYzliZmZlNmQ3Yzg3
NmU3YjE5Y2IwZTE3ZjNiIgorICBkZXBlbmRlbmNpZXM6CisgICAgdXRpbGEgIn4wLjMiCisKK2Rv
bS1zZXJpYWxpemVyQDA6CisgIHZlcnNpb24gIjAuMS4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9y
ZWdpc3RyeS55YXJucGtnLmNvbS9kb20tc2VyaWFsaXplci8tL2RvbS1zZXJpYWxpemVyLTAuMS4w
LnRneiMwNzNjNjk3NTQ2Y2UwNzgwY2UyM2JlNGEyOGUyOTNlNDBiYzMwYzgyIgorICBkZXBlbmRl
bmNpZXM6CisgICAgZG9tZWxlbWVudHR5cGUgIn4xLjEuMSIKKyAgICBlbnRpdGllcyAifjEuMS4x
IgorCitkb21haW4tYnJvd3NlckBeMS4xLjE6CisgIHZlcnNpb24gIjEuMS43IgorICByZXNvbHZl
ZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9kb21haW4tYnJvd3Nlci8tL2RvbWFpbi1i
cm93c2VyLTEuMS43LnRneiM4NjdhYTRiMDkzZmFhMDVmMWRlMDhjMDZmNGQ3YjIxZmRmODY5OGJj
IgorCitkb21lbGVtZW50dHlwZUBeMS4zLjAsIGRvbWVsZW1lbnR0eXBlQDE6CisgIHZlcnNpb24g
IjEuMy4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9kb21lbGVt
ZW50dHlwZS8tL2RvbWVsZW1lbnR0eXBlLTEuMy4wLnRneiNiMTdhZWQ4MmU4YWI1OWU1MmRkOWMx
OWIxNzU2ZTBmYzE4NzIwNGMyIgorCitkb21lbGVtZW50dHlwZUB+MS4xLjE6CisgIHZlcnNpb24g
IjEuMS4zIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9kb21lbGVt
ZW50dHlwZS8tL2RvbWVsZW1lbnR0eXBlLTEuMS4zLnRneiNiZDI4NzczZTI2NDI4ODFhZWM1MTU0
NDkyNDI5OWM1Y2Q4MjIxODViIgorCitkb21oYW5kbGVyQF4yLjMuMDoKKyAgdmVyc2lvbiAiMi4z
LjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2RvbWhhbmRsZXIv
LS9kb21oYW5kbGVyLTIuMy4wLnRneiMyZGU1OWEwODIyZDUwMjdmYWJmZjZmMDMyYzJiMjVhMmE4
YWJlNzM4IgorICBkZXBlbmRlbmNpZXM6CisgICAgZG9tZWxlbWVudHR5cGUgIjEiCisKK2RvbWhh
bmRsZXJAMi4xOgorICB2ZXJzaW9uICIyLjEuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0
cnkueWFybnBrZy5jb20vZG9taGFuZGxlci8tL2RvbWhhbmRsZXItMi4xLjAudGd6I2QyNjQ2ZjVl
NTdmNmMzYmFiMTFjZjZjYjA1ZDNjMGFjZjc0MTI1OTQiCisgIGRlcGVuZGVuY2llczoKKyAgICBk
b21lbGVtZW50dHlwZSAiMSIKKworZG9tdXRpbHNAXjEuNS4xLCBkb211dGlsc0AxLjUuMToKKyAg
dmVyc2lvbiAiMS41LjEiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29t
L2RvbXV0aWxzLy0vZG9tdXRpbHMtMS41LjEudGd6I2RjZDg0ODhhMjZmNTYzZDYxMDc5ZTQ4Yzlm
N2I3ZTMyMzczNjgyY2YiCisgIGRlcGVuZGVuY2llczoKKyAgICBkb20tc2VyaWFsaXplciAiMCIK
KyAgICBkb21lbGVtZW50dHlwZSAiMSIKKworZG9tdXRpbHNAMS4xOgorICB2ZXJzaW9uICIxLjEu
NiIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vZG9tdXRpbHMvLS9k
b211dGlscy0xLjEuNi50Z3ojYmRkYzNkZTA5OWI5YTJlZmFjYzUxYzYyM2YyOGY0MTZlY2M1NzQ4
NSIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGRvbWVsZW1lbnR0eXBlICIxIgorCitlY2MtanNibkB+
MC4xLjE6CisgIHZlcnNpb24gIjAuMS4xIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55
YXJucGtnLmNvbS9lY2MtanNibi8tL2VjYy1qc2JuLTAuMS4xLnRneiMwZmM3M2E5ZWQ1ZjBkNTNj
MzgxOTMzOTg1MjNlZjdlNTQzNzc3NTA1IgorICBkZXBlbmRlbmNpZXM6CisgICAganNibiAifjAu
MS4wIgorCitlZGl0b3Jjb25maWdAXjAuMTMuMjoKKyAgdmVyc2lvbiAiMC4xMy4yIgorICByZXNv
bHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9lZGl0b3Jjb25maWcvLS9lZGl0b3Jj
b25maWctMC4xMy4yLnRneiM4ZTU3OTI2ZDllZTY5YWI2Y2I5OTlmMDI3YzIxNzE0NjdhY2NlYjM1
IgorICBkZXBlbmRlbmNpZXM6CisgICAgYmx1ZWJpcmQgIl4zLjAuNSIKKyAgICBjb21tYW5kZXIg
Il4yLjkuMCIKKyAgICBscnUtY2FjaGUgIl4zLjIuMCIKKyAgICBzaWdtdW5kICJeMS4wLjEiCisK
K2VlLWZpcnN0QDEuMS4xOgorICB2ZXJzaW9uICIxLjEuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8v
cmVnaXN0cnkueWFybnBrZy5jb20vZWUtZmlyc3QvLS9lZS1maXJzdC0xLjEuMS50Z3ojNTkwYzYx
MTU2YjBhZTJmNGYwMjU1NzMyYTE1OGIyNjZiYzU2YjIxZCIKKworZW1vamlzLWxpc3RAXjIuMC4w
OgorICB2ZXJzaW9uICIyLjEuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBr
Zy5jb20vZW1vamlzLWxpc3QvLS9lbW9qaXMtbGlzdC0yLjEuMC50Z3ojNGRhYTRkOWRiMDBmOTgx
OTg4MGM3OWZhNDU3YWU1YjA5YTFmZDM4OSIKKworZW5jb2RldXJsQH4xLjAuMToKKyAgdmVyc2lv
biAiMS4wLjEiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2VuY29k
ZXVybC8tL2VuY29kZXVybC0xLjAuMS50Z3ojNzllM2Q1ODY1NTM0NjkwOWZlNmYwZjQ1YTVkZTY4
MTAzYjI5NGQyMCIKKworZW5oYW5jZWQtcmVzb2x2ZUB+MC45LjA6CisgIHZlcnNpb24gIjAuOS4x
IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9lbmhhbmNlZC1yZXNv
bHZlLy0vZW5oYW5jZWQtcmVzb2x2ZS0wLjkuMS50Z3ojNGQ2ZTY4OWIzNzI1Zjg2MDkwOTI3Y2Nj
ODZjZDlmMTYzNWI4OWUyZSIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGdyYWNlZnVsLWZzICJeNC4x
LjIiCisgICAgbWVtb3J5LWZzICJeMC4yLjAiCisgICAgdGFwYWJsZSAiXjAuMS44IgorCitlbnRp
dGllc0BeMS4xLjEsIGVudGl0aWVzQH4xLjEuMToKKyAgdmVyc2lvbiAiMS4xLjEiCisgIHJlc29s
dmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2VudGl0aWVzLy0vZW50aXRpZXMtMS4x
LjEudGd6IzZlNWMyZDBhNTYyMWI1ZGFkYWVjZWY4MGI5MGVkZmI1Y2Q3NzcyZjAiCisKK2Vycm5v
QF4wLjEuMzoKKyAgdmVyc2lvbiAiMC4xLjQiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5
Lnlhcm5wa2cuY29tL2Vycm5vLy0vZXJybm8tMC4xLjQudGd6I2I4OTZlMjNhOWU1ZThiYTMzODcx
ZmM5OTZhYmQzNjM1ZmM5YTFjN2QiCisgIGRlcGVuZGVuY2llczoKKyAgICBwcnIgIn4wLjAuMCIK
KworZXM1LWV4dEBeMC4xMC43LCBlczUtZXh0QF4wLjEwLjgsIGVzNS1leHRAfjAuMTAuMTEsIGVz
NS1leHRAfjAuMTAuMiwgZXM1LWV4dEB+MC4xMC43OgorICB2ZXJzaW9uICIwLjEwLjEyIgorICBy
ZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9lczUtZXh0Ly0vZXM1LWV4dC0w
LjEwLjEyLnRneiNhYTg0NjQxZDRkYjc2YjYyYWJiYTVlNDVmZDgwNWVjYmFiMTQwMDQ3IgorICBk
ZXBlbmRlbmNpZXM6CisgICAgZXM2LWl0ZXJhdG9yICIyIgorICAgIGVzNi1zeW1ib2wgIn4zLjEi
CisKK2VzNi1pdGVyYXRvckAyOgorICB2ZXJzaW9uICIyLjAuMCIKKyAgcmVzb2x2ZWQgImh0dHBz
Oi8vcmVnaXN0cnkueWFybnBrZy5jb20vZXM2LWl0ZXJhdG9yLy0vZXM2LWl0ZXJhdG9yLTIuMC4w
LnRneiNiZDk2ODU2N2Q2MTYzNWUzM2MwYjgwNzI3NjEzYzljYjRiMDk2YmFjIgorICBkZXBlbmRl
bmNpZXM6CisgICAgZCAiXjAuMS4xIgorICAgIGVzNS1leHQgIl4wLjEwLjciCisgICAgZXM2LXN5
bWJvbCAiMyIKKworZXM2LW1hcEBeMC4xLjM6CisgIHZlcnNpb24gIjAuMS40IgorICByZXNvbHZl
ZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9lczYtbWFwLy0vZXM2LW1hcC0wLjEuNC50
Z3ojYTM0YjE0N2JlMjI0NzczYTRkN2RhODA3Mjc5NGNlZmEzNjMyYjg5NyIKKyAgZGVwZW5kZW5j
aWVzOgorICAgIGQgIn4wLjEuMSIKKyAgICBlczUtZXh0ICJ+MC4xMC4xMSIKKyAgICBlczYtaXRl
cmF0b3IgIjIiCisgICAgZXM2LXNldCAifjAuMS4zIgorICAgIGVzNi1zeW1ib2wgIn4zLjEuMCIK
KyAgICBldmVudC1lbWl0dGVyICJ+MC4zLjQiCisKK2VzNi1zZXRAfjAuMS4zOgorICB2ZXJzaW9u
ICIwLjEuNCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vZXM2LXNl
dC8tL2VzNi1zZXQtMC4xLjQudGd6Izk1MTZiNjc2MWMyOTY0YjkyZmY0Nzk0NTYyMzNhMjQ3ZGM3
MDdjZTgiCisgIGRlcGVuZGVuY2llczoKKyAgICBkICJ+MC4xLjEiCisgICAgZXM1LWV4dCAifjAu
MTAuMTEiCisgICAgZXM2LWl0ZXJhdG9yICIyIgorICAgIGVzNi1zeW1ib2wgIjMiCisgICAgZXZl
bnQtZW1pdHRlciAifjAuMy40IgorCitlczYtc3ltYm9sQH4zLjEsIGVzNi1zeW1ib2xAfjMuMS4w
LCBlczYtc3ltYm9sQDM6CisgIHZlcnNpb24gIjMuMS4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9y
ZWdpc3RyeS55YXJucGtnLmNvbS9lczYtc3ltYm9sLy0vZXM2LXN5bWJvbC0zLjEuMC50Z3ojOTQ0
ODFjNjU1ZTdhN2NhZDgyZWJhODMyZDk3ZDU0MzM0OTZkN2ZmYSIKKyAgZGVwZW5kZW5jaWVzOgor
ICAgIGQgIn4wLjEuMSIKKyAgICBlczUtZXh0ICJ+MC4xMC4xMSIKKworZXM2LXdlYWstbWFwQF4y
LjAuMToKKyAgdmVyc2lvbiAiMi4wLjEiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlh
cm5wa2cuY29tL2VzNi13ZWFrLW1hcC8tL2VzNi13ZWFrLW1hcC0yLjAuMS50Z3ojMGQyYmJkODgy
N2ViNWZiNGJhOGY5N2ZiZmVhNTBkNDNkYjIxZWE4MSIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGQg
Il4wLjEuMSIKKyAgICBlczUtZXh0ICJeMC4xMC44IgorICAgIGVzNi1pdGVyYXRvciAiMiIKKyAg
ICBlczYtc3ltYm9sICIzIgorCitlc2NhcGUtaHRtbEB+MS4wLjM6CisgIHZlcnNpb24gIjEuMC4z
IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9lc2NhcGUtaHRtbC8t
L2VzY2FwZS1odG1sLTEuMC4zLnRneiMwMjU4ZWFlNGQzZDBjMDk3NGRlMWMxNjkxODhlZjAwNTFk
MWQxOTg4IgorCitlc2NhcGUtc3RyaW5nLXJlZ2V4cEBeMS4wLjIsIGVzY2FwZS1zdHJpbmctcmVn
ZXhwQF4xLjAuNToKKyAgdmVyc2lvbiAiMS4wLjUiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lz
dHJ5Lnlhcm5wa2cuY29tL2VzY2FwZS1zdHJpbmctcmVnZXhwLy0vZXNjYXBlLXN0cmluZy1yZWdl
eHAtMS4wLjUudGd6IzFiNjFjMDU2MjE5MGE4ZGZmNmFlM2JiMmNmMDIwMGNhMTMwYjg2ZDQiCisK
K2VzY29wZUBeMy42LjA6CisgIHZlcnNpb24gIjMuNi4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9y
ZWdpc3RyeS55YXJucGtnLmNvbS9lc2NvcGUvLS9lc2NvcGUtMy42LjAudGd6I2UwMTk3NWU4MTI3
ODFhMTYzYTZkYWRmZGQ4MDM5OGRjNjRjODg5YzMiCisgIGRlcGVuZGVuY2llczoKKyAgICBlczYt
bWFwICJeMC4xLjMiCisgICAgZXM2LXdlYWstbWFwICJeMi4wLjEiCisgICAgZXNyZWN1cnNlICJe
NC4xLjAiCisgICAgZXN0cmF2ZXJzZSAiXjQuMS4xIgorCitlc2xpbnQtZnJpZW5kbHktZm9ybWF0
dGVyQF4yLjAuNToKKyAgdmVyc2lvbiAiMi4wLjYiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lz
dHJ5Lnlhcm5wa2cuY29tL2VzbGludC1mcmllbmRseS1mb3JtYXR0ZXIvLS9lc2xpbnQtZnJpZW5k
bHktZm9ybWF0dGVyLTIuMC42LnRneiNlZGRkMThkZDAwMTc5OGI4Zjc2OWUxNjk5MzZhMzc0OWMz
NmMyZDVhIgorICBkZXBlbmRlbmNpZXM6CisgICAgY2hhbGsgIl4xLjAuMCIKKyAgICBleHRlbmQg
Il4zLjAuMCIKKyAgICBtaW5pbWlzdCAiXjEuMi4wIgorICAgIHRleHQtdGFibGUgIl4wLjIuMCIK
KworZXNsaW50LWxvYWRlckBeMS41LjA6CisgIHZlcnNpb24gIjEuNi4xIgorICByZXNvbHZlZCAi
aHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9lc2xpbnQtbG9hZGVyLy0vZXNsaW50LWxvYWRl
ci0xLjYuMS50Z3ojOTZjNDdjODEyNzcyZWViMDc3ZTNhODE2ODE4MThlNjcxYTJjYWJmNSIKKyAg
ZGVwZW5kZW5jaWVzOgorICAgIGZpbmQtY2FjaGUtZGlyICJeMC4xLjEiCisgICAgbG9hZGVyLXV0
aWxzICJeMC4yLjciCisgICAgb2JqZWN0LWFzc2lnbiAiXjQuMC4xIgorICAgIG9iamVjdC1oYXNo
ICJeMS4xLjQiCisKK2VzbGludC1wbHVnaW4taHRtbEBeMS4zLjA6CisgIHZlcnNpb24gIjEuNy4w
IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9lc2xpbnQtcGx1Z2lu
LWh0bWwvLS9lc2xpbnQtcGx1Z2luLWh0bWwtMS43LjAudGd6IzJhNWIwMzg4NGQ4ZDU2YWRmOWFk
OTg2NGU5YzAzNjQ4MGZiNjI5YzkiCisgIGRlcGVuZGVuY2llczoKKyAgICBodG1scGFyc2VyMiAi
XjMuOC4yIgorCitlc2xpbnRAXjMuNy4xOgorICB2ZXJzaW9uICIzLjExLjEiCisgIHJlc29sdmVk
ICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2VzbGludC8tL2VzbGludC0zLjExLjEudGd6
IzQwOGJlNTgxMDQxMzg1Y2JhOTQ3Y2Q4ZDFjZDIyMjc3ODJiNTVkYmYiCisgIGRlcGVuZGVuY2ll
czoKKyAgICBiYWJlbC1jb2RlLWZyYW1lICJeNi4xNi4wIgorICAgIGNoYWxrICJeMS4xLjMiCisg
ICAgY29uY2F0LXN0cmVhbSAiXjEuNC42IgorICAgIGRlYnVnICJeMi4xLjEiCisgICAgZG9jdHJp
bmUgIl4xLjIuMiIKKyAgICBlc2NvcGUgIl4zLjYuMCIKKyAgICBlc3ByZWUgIl4zLjMuMSIKKyAg
ICBlc3RyYXZlcnNlICJeNC4yLjAiCisgICAgZXN1dGlscyAiXjIuMC4yIgorICAgIGZpbGUtZW50
cnktY2FjaGUgIl4yLjAuMCIKKyAgICBnbG9iICJeNy4wLjMiCisgICAgZ2xvYmFscyAiXjkuMi4w
IgorICAgIGlnbm9yZSAiXjMuMi4wIgorICAgIGltdXJtdXJoYXNoICJeMC4xLjQiCisgICAgaW5x
dWlyZXIgIl4wLjEyLjAiCisgICAgaXMtbXktanNvbi12YWxpZCAiXjIuMTAuMCIKKyAgICBpcy1y
ZXNvbHZhYmxlICJeMS4wLjAiCisgICAganMteWFtbCAiXjMuNS4xIgorICAgIGpzb24tc3RhYmxl
LXN0cmluZ2lmeSAiXjEuMC4wIgorICAgIGxldm4gIl4wLjMuMCIKKyAgICBsb2Rhc2ggIl40LjAu
MCIKKyAgICBta2RpcnAgIl4wLjUuMCIKKyAgICBuYXR1cmFsLWNvbXBhcmUgIl4xLjQuMCIKKyAg
ICBvcHRpb25hdG9yICJeMC44LjIiCisgICAgcGF0aC1pcy1pbnNpZGUgIl4xLjAuMSIKKyAgICBw
bHVyYWxpemUgIl4xLjIuMSIKKyAgICBwcm9ncmVzcyAiXjEuMS44IgorICAgIHJlcXVpcmUtdW5j
YWNoZWQgIl4xLjAuMiIKKyAgICBzaGVsbGpzICJeMC43LjUiCisgICAgc3RyaXAtYm9tICJeMy4w
LjAiCisgICAgc3RyaXAtanNvbi1jb21tZW50cyAifjEuMC4xIgorICAgIHRhYmxlICJeMy43Ljgi
CisgICAgdGV4dC10YWJsZSAifjAuMi4wIgorICAgIHVzZXItaG9tZSAiXjIuMC4wIgorCitlc3By
ZWVAXjMuMy4xOgorICB2ZXJzaW9uICIzLjMuMiIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0
cnkueWFybnBrZy5jb20vZXNwcmVlLy0vZXNwcmVlLTMuMy4yLnRneiNkYmYzZmFkZWI0ZWNiNGQ0
Nzc4MzAzZTUwMTAzYjNkMzZjODhiODljIgorICBkZXBlbmRlbmNpZXM6CisgICAgYWNvcm4gIl40
LjAuMSIKKyAgICBhY29ybi1qc3ggIl4zLjAuMCIKKworZXNwcmltYUBeMi42LjA6CisgIHZlcnNp
b24gIjIuNy4zIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9lc3By
aW1hLy0vZXNwcmltYS0yLjcuMy50Z3ojOTZlM2I3MGQ1Nzc5ZjZhZDQ5Y2QwMzI2NzNkMWMzMTI3
NjdiYTU4MSIKKworZXNyZWN1cnNlQF40LjEuMDoKKyAgdmVyc2lvbiAiNC4xLjAiCisgIHJlc29s
dmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2VzcmVjdXJzZS8tL2VzcmVjdXJzZS00
LjEuMC50Z3ojNDcxM2I2NTM2YWRmN2YyYWM0ZjMyN2Q1NTllNzc1NmJmZjY0ODIyMCIKKyAgZGVw
ZW5kZW5jaWVzOgorICAgIGVzdHJhdmVyc2UgIn40LjEuMCIKKyAgICBvYmplY3QtYXNzaWduICJe
NC4wLjEiCisKK2VzdHJhdmVyc2VAXjQuMS4xLCBlc3RyYXZlcnNlQF40LjIuMDoKKyAgdmVyc2lv
biAiNC4yLjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2VzdHJh
dmVyc2UvLS9lc3RyYXZlcnNlLTQuMi4wLnRneiMwZGVlM2ZlZDMxZmNkNDY5NjE4Y2U3MzQyMDk5
ZmMxYWZhMGJkYjEzIgorCitlc3RyYXZlcnNlQH40LjEuMDoKKyAgdmVyc2lvbiAiNC4xLjEiCisg
IHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2VzdHJhdmVyc2UvLS9lc3Ry
YXZlcnNlLTQuMS4xLnRneiNmNmNhY2E3Mjg5MzNhODUwZWY5MDY2MWQwZTE3OTgyYmE0NzExMWEy
IgorCitlc3V0aWxzQF4yLjAuMjoKKyAgdmVyc2lvbiAiMi4wLjIiCisgIHJlc29sdmVkICJodHRw
czovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2VzdXRpbHMvLS9lc3V0aWxzLTIuMC4yLnRneiMwYWJm
NGYxY2FhNWJjYjFmN2E5ZDhhY2M2ZGVhNGZhYWEwNGJhYzliIgorCitldGFnQH4xLjcuMDoKKyAg
dmVyc2lvbiAiMS43LjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29t
L2V0YWcvLS9ldGFnLTEuNy4wLnRneiMwM2QzMGI1ZjY3ZGQ2ZTYzMmQyOTQ1ZDMwZDY2NTI3MzFh
MzRkNWQ4IgorCitldmVudC1lbWl0dGVyQH4wLjMuNDoKKyAgdmVyc2lvbiAiMC4zLjQiCisgIHJl
c29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2V2ZW50LWVtaXR0ZXIvLS9ldmVu
dC1lbWl0dGVyLTAuMy40LnRneiM4ZDYzZGRmYjRjZmUxZmFlM2IzMmNhMjY1YzRjNzIwMjIyMDgw
YmI1IgorICBkZXBlbmRlbmNpZXM6CisgICAgZCAifjAuMS4xIgorICAgIGVzNS1leHQgIn4wLjEw
LjciCisKK2V2ZW50ZW1pdHRlcjNAMS54Lng6CisgIHZlcnNpb24gIjEuMi4wIgorICByZXNvbHZl
ZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9ldmVudGVtaXR0ZXIzLy0vZXZlbnRlbWl0
dGVyMy0xLjIuMC50Z3ojMWM4Njk5MWQ4MTZhZDFlNTA0NzUwZTczODc0MjI0ZWNmM2JlYzUwOCIK
KworZXZlbnRzQF4xLjAuMDoKKyAgdmVyc2lvbiAiMS4xLjEiCisgIHJlc29sdmVkICJodHRwczov
L3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2V2ZW50cy8tL2V2ZW50cy0xLjEuMS50Z3ojOWViZGI3NjM1
YWQwOTljNzBkY2M0YzJhMWY1MDA0Mjg4ZThiZDkyNCIKKworZXZlbnRzb3VyY2UtcG9seWZpbGxA
XjAuOS42OgorICB2ZXJzaW9uICIwLjkuNiIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnku
eWFybnBrZy5jb20vZXZlbnRzb3VyY2UtcG9seWZpbGwvLS9ldmVudHNvdXJjZS1wb2x5ZmlsbC0w
LjkuNi50Z3ojMTBlMGQxODdmMTExYjE2N2YyOGZkYWI5MTg4NDNjZTdkODE4ZjEzYyIKKworZXhp
dC1ob29rQF4xLjAuMDoKKyAgdmVyc2lvbiAiMS4xLjEiCisgIHJlc29sdmVkICJodHRwczovL3Jl
Z2lzdHJ5Lnlhcm5wa2cuY29tL2V4aXQtaG9vay8tL2V4aXQtaG9vay0xLjEuMS50Z3ojZjA1Y2Ey
MzNiNDhjMDVkNTRmZmYwNzc2NWRmODUwN2U5NWMwMmZmOCIKKworZXhwYW5kLWJyYWNrZXRzQF4w
LjEuNDoKKyAgdmVyc2lvbiAiMC4xLjUiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlh
cm5wa2cuY29tL2V4cGFuZC1icmFja2V0cy8tL2V4cGFuZC1icmFja2V0cy0wLjEuNS50Z3ojZGYw
NzI4NGUzNDJhODA3Y2Q3MzNhYzVhZjcyNDExZTU4MWQxMTc3YiIKKyAgZGVwZW5kZW5jaWVzOgor
ICAgIGlzLXBvc2l4LWJyYWNrZXQgIl4wLjEuMCIKKworZXhwYW5kLXJhbmdlQF4xLjguMToKKyAg
dmVyc2lvbiAiMS44LjIiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29t
L2V4cGFuZC1yYW5nZS8tL2V4cGFuZC1yYW5nZS0xLjguMi50Z3ojYTI5OWVmZmQzMzVmZTI3MjFl
YmFlOGUyNTdlYzc5NjQ0ZmM4NTMzNyIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGZpbGwtcmFuZ2Ug
Il4yLjEuMCIKKworZXhwcmVzc0BeNC4xMy4zOgorICB2ZXJzaW9uICI0LjE0LjAiCisgIHJlc29s
dmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2V4cHJlc3MvLS9leHByZXNzLTQuMTQu
MC50Z3ojYzFlZTNmNDJjZGM4OTFmYjNkYzY1MGE4OTIyZDUxZWM4NDdkMGQ2NiIKKyAgZGVwZW5k
ZW5jaWVzOgorICAgIGFjY2VwdHMgIn4xLjMuMyIKKyAgICBhcnJheS1mbGF0dGVuICIxLjEuMSIK
KyAgICBjb250ZW50LWRpc3Bvc2l0aW9uICIwLjUuMSIKKyAgICBjb250ZW50LXR5cGUgIn4xLjAu
MiIKKyAgICBjb29raWUgIjAuMy4xIgorICAgIGNvb2tpZS1zaWduYXR1cmUgIjEuMC42IgorICAg
IGRlYnVnICJ+Mi4yLjAiCisgICAgZGVwZCAifjEuMS4wIgorICAgIGVuY29kZXVybCAifjEuMC4x
IgorICAgIGVzY2FwZS1odG1sICJ+MS4wLjMiCisgICAgZXRhZyAifjEuNy4wIgorICAgIGZpbmFs
aGFuZGxlciAiMC41LjAiCisgICAgZnJlc2ggIjAuMy4wIgorICAgIG1lcmdlLWRlc2NyaXB0b3Jz
ICIxLjAuMSIKKyAgICBtZXRob2RzICJ+MS4xLjIiCisgICAgb24tZmluaXNoZWQgIn4yLjMuMCIK
KyAgICBwYXJzZXVybCAifjEuMy4xIgorICAgIHBhdGgtdG8tcmVnZXhwICIwLjEuNyIKKyAgICBw
cm94eS1hZGRyICJ+MS4xLjIiCisgICAgcXMgIjYuMi4wIgorICAgIHJhbmdlLXBhcnNlciAifjEu
Mi4wIgorICAgIHNlbmQgIjAuMTQuMSIKKyAgICBzZXJ2ZS1zdGF0aWMgIn4xLjExLjEiCisgICAg
dHlwZS1pcyAifjEuNi4xMyIKKyAgICB1dGlscy1tZXJnZSAiMS4wLjAiCisgICAgdmFyeSAifjEu
MS4wIgorCitleHRlbmRAXjMuMC4wLCBleHRlbmRAfjMuMC4wOgorICB2ZXJzaW9uICIzLjAuMCIK
KyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vZXh0ZW5kLy0vZXh0ZW5k
LTMuMC4wLnRneiM1YTQ3NDM1M2I5ZjMzNTNkZGQ4MTc2ZGZkMzdiOTFjODNhNDZmMWQ0IgorCitl
eHRnbG9iQF4wLjMuMToKKyAgdmVyc2lvbiAiMC4zLjIiCisgIHJlc29sdmVkICJodHRwczovL3Jl
Z2lzdHJ5Lnlhcm5wa2cuY29tL2V4dGdsb2IvLS9leHRnbG9iLTAuMy4yLnRneiMyZTE4ZmYzZDJm
NDlhYjI3NjVjZWM5MDIzZjAxMWRhYThkODM0OWExIgorICBkZXBlbmRlbmNpZXM6CisgICAgaXMt
ZXh0Z2xvYiAiXjEuMC4wIgorCitleHRyYWN0LXRleHQtd2VicGFjay1wbHVnaW5AXjEuMC4xOgor
ICB2ZXJzaW9uICIxLjAuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5j
b20vZXh0cmFjdC10ZXh0LXdlYnBhY2stcGx1Z2luLy0vZXh0cmFjdC10ZXh0LXdlYnBhY2stcGx1
Z2luLTEuMC4xLnRneiNjOTViZjNjYmFhYzQ5ZGM5NmYxZGM2ZTA3MjU0OWZiYjY1NGNjZDJjIgor
ICBkZXBlbmRlbmNpZXM6CisgICAgYXN5bmMgIl4xLjUuMCIKKyAgICBsb2FkZXItdXRpbHMgIl4w
LjIuMyIKKyAgICB3ZWJwYWNrLXNvdXJjZXMgIl4wLjEuMCIKKworZXh0c3ByaW50ZkAxLjAuMjoK
KyAgdmVyc2lvbiAiMS4wLjIiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cu
Y29tL2V4dHNwcmludGYvLS9leHRzcHJpbnRmLTEuMC4yLnRneiNlMTA4MGUwNjU4ZTMwMGIwNjI5
NDk5MGNjNzBlMTUwMjIzNWZkNTUwIgorCitmYXN0LWxldmVuc2h0ZWluQH4yLjAuNDoKKyAgdmVy
c2lvbiAiMi4wLjUiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2Zh
c3QtbGV2ZW5zaHRlaW4vLS9mYXN0LWxldmVuc2h0ZWluLTIuMC41LnRneiNiZDMzMTQ1NzQ0NTE5
YWIxYzM2YzNlZTlmMzFmMDhlOTA3OWI2N2YyIgorCitmYXN0cGFyc2VAXjEuMS4xOgorICB2ZXJz
aW9uICIxLjEuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vZmFz
dHBhcnNlLy0vZmFzdHBhcnNlLTEuMS4xLnRneiNkMWUyNjQzYjM4YTk0ZDc1ODNiNDc5MDYwZTZj
NGFmZmM5NDA3MWY4IgorCitmaWd1cmVzQF4xLjMuNToKKyAgdmVyc2lvbiAiMS43LjAiCisgIHJl
c29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2ZpZ3VyZXMvLS9maWd1cmVzLTEu
Ny4wLnRneiNjYmUxZTNhZmZjZjFjZDQ0YjgwY2FkZmVkMjhkYzc5M2E5NzAxZDJlIgorICBkZXBl
bmRlbmNpZXM6CisgICAgZXNjYXBlLXN0cmluZy1yZWdleHAgIl4xLjAuNSIKKyAgICBvYmplY3Qt
YXNzaWduICJeNC4xLjAiCisKK2ZpbGUtZW50cnktY2FjaGVAXjIuMC4wOgorICB2ZXJzaW9uICIy
LjAuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vZmlsZS1lbnRy
eS1jYWNoZS8tL2ZpbGUtZW50cnktY2FjaGUtMi4wLjAudGd6I2MzOTI5OTBjM2U2ODQ3ODNkODM4
YjhjODRhNDVkOGEwNDg0NTgzNjEiCisgIGRlcGVuZGVuY2llczoKKyAgICBmbGF0LWNhY2hlICJe
MS4yLjEiCisgICAgb2JqZWN0LWFzc2lnbiAiXjQuMC4xIgorCitmaWxlLWxvYWRlckBeMC45LjA6
CisgIHZlcnNpb24gIjAuOS4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtn
LmNvbS9maWxlLWxvYWRlci8tL2ZpbGUtbG9hZGVyLTAuOS4wLnRneiMxZDJkYWRkZDQyNGNlNmQx
YjA3Y2ZlM2Y3OTczMWJlZDM2MTdhYjQyIgorICBkZXBlbmRlbmNpZXM6CisgICAgbG9hZGVyLXV0
aWxzICJ+MC4yLjUiCisKK2ZpbGVuYW1lLXJlZ2V4QF4yLjAuMDoKKyAgdmVyc2lvbiAiMi4wLjAi
CisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2ZpbGVuYW1lLXJlZ2V4
Ly0vZmlsZW5hbWUtcmVnZXgtMi4wLjAudGd6Izk5NmUzZTgwNDc5Yjk4Yjk4OTdmMTVhOGE1OGIz
ZDA4NGU5MjY3NzUiCisKK2ZpbGwtcmFuZ2VAXjIuMS4wOgorICB2ZXJzaW9uICIyLjIuMyIKKyAg
cmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vZmlsbC1yYW5nZS8tL2ZpbGwt
cmFuZ2UtMi4yLjMudGd6IzUwYjc3ZGZkN2U0NjliYzc0OTI0NzA5NjM2OTlmZTdhODQ4NWE3MjMi
CisgIGRlcGVuZGVuY2llczoKKyAgICBpcy1udW1iZXIgIl4yLjEuMCIKKyAgICBpc29iamVjdCAi
XjIuMC4wIgorICAgIHJhbmRvbWF0aWMgIl4xLjEuMyIKKyAgICByZXBlYXQtZWxlbWVudCAiXjEu
MS4yIgorICAgIHJlcGVhdC1zdHJpbmcgIl4xLjUuMiIKKworZmluYWxoYW5kbGVyQDAuNS4wOgor
ICB2ZXJzaW9uICIwLjUuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5j
b20vZmluYWxoYW5kbGVyLy0vZmluYWxoYW5kbGVyLTAuNS4wLnRneiNlOTUwOGFiZWNlOWI2ZGJh
ODcxYTY5NDJhMWQ3OTExYjkxOTExYWM3IgorICBkZXBlbmRlbmNpZXM6CisgICAgZGVidWcgIn4y
LjIuMCIKKyAgICBlc2NhcGUtaHRtbCAifjEuMC4zIgorICAgIG9uLWZpbmlzaGVkICJ+Mi4zLjAi
CisgICAgc3RhdHVzZXMgIn4xLjMuMCIKKyAgICB1bnBpcGUgIn4xLjAuMCIKKworZmluZC1jYWNo
ZS1kaXJAXjAuMS4xOgorICB2ZXJzaW9uICIwLjEuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVn
aXN0cnkueWFybnBrZy5jb20vZmluZC1jYWNoZS1kaXIvLS9maW5kLWNhY2hlLWRpci0wLjEuMS50
Z3ojYzhkZWZhZTU3YzhhNTJhOGE3ODRmOWUzMWM1N2M3NDJlOTkzYTBiOSIKKyAgZGVwZW5kZW5j
aWVzOgorICAgIGNvbW1vbmRpciAiXjEuMC4xIgorICAgIG1rZGlycCAiXjAuNS4xIgorICAgIHBr
Zy1kaXIgIl4xLjAuMCIKKworZmluZC11cEBeMS4wLjA6CisgIHZlcnNpb24gIjEuMS4yIgorICBy
ZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9maW5kLXVwLy0vZmluZC11cC0x
LjEuMi50Z3ojNmIyZTk4MjJiMWEyY2UwYTYwYWI2NGQ2MTBlY2NhZDUzY2IyNGQwZiIKKyAgZGVw
ZW5kZW5jaWVzOgorICAgIHBhdGgtZXhpc3RzICJeMi4wLjAiCisgICAgcGlua2llLXByb21pc2Ug
Il4yLjAuMCIKKworZmxhdC1jYWNoZUBeMS4yLjE6CisgIHZlcnNpb24gIjEuMi4xIgorICByZXNv
bHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9mbGF0LWNhY2hlLy0vZmxhdC1jYWNo
ZS0xLjIuMS50Z3ojNmM4MzdkNjIyNWE3ZGU1NjU5MzIzNzQwYjM2ZDUzNjFmNzE2OTFmZiIKKyAg
ZGVwZW5kZW5jaWVzOgorICAgIGNpcmN1bGFyLWpzb24gIl4wLjMuMCIKKyAgICBkZWwgIl4yLjAu
MiIKKyAgICBncmFjZWZ1bC1mcyAiXjQuMS4yIgorICAgIHdyaXRlICJeMC4yLjEiCisKK2ZsYXR0
ZW5AXjEuMC4yOgorICB2ZXJzaW9uICIxLjAuMiIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0
cnkueWFybnBrZy5jb20vZmxhdHRlbi8tL2ZsYXR0ZW4tMS4wLjIudGd6I2RhZTQ2YTlkNzhmYmUy
NTI5MjI1OGNjMWU3ODBhNDFkOTVjMDM3ODIiCisKK2Zvci1pbkBeMC4xLjU6CisgIHZlcnNpb24g
IjAuMS42IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9mb3ItaW4v
LS9mb3ItaW4tMC4xLjYudGd6I2M5Zjk2ZTg5YmZhZDE4YTU0NWFmNWVjM2VkMzUyYTFkOWU1YjRk
YzgiCisKK2Zvci1vd25AXjAuMS40OgorICB2ZXJzaW9uICIwLjEuNCIKKyAgcmVzb2x2ZWQgImh0
dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vZm9yLW93bi8tL2Zvci1vd24tMC4xLjQudGd6IzAx
NDliNDFhMzkwODhjNzUxNWY1MWViZTFjMTM4NmQ0NWY5MzUwNzIiCisgIGRlcGVuZGVuY2llczoK
KyAgICBmb3ItaW4gIl4wLjEuNSIKKworZm9yZXZlci1hZ2VudEB+MC42LjE6CisgIHZlcnNpb24g
IjAuNi4xIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9mb3JldmVy
LWFnZW50Ly0vZm9yZXZlci1hZ2VudC0wLjYuMS50Z3ojZmJjNzFmMGM0MWFkZWIzN2Y5NmM1Nzdh
ZDFlZDQyZDhmZGFjY2E5MSIKKworZm9ybS1kYXRhQH4yLjEuMToKKyAgdmVyc2lvbiAiMi4xLjIi
CisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2Zvcm0tZGF0YS8tL2Zv
cm0tZGF0YS0yLjEuMi50Z3ojODljMzUzNDAwOGI5N2VhZGE0Y2JiMTU3ZDU4ZjZmNWRmMDI1ZWFl
NCIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGFzeW5ja2l0ICJeMC40LjAiCisgICAgY29tYmluZWQt
c3RyZWFtICJeMS4wLjUiCisgICAgbWltZS10eXBlcyAiXjIuMS4xMiIKKworZm9yd2FyZGVkQH4w
LjEuMDoKKyAgdmVyc2lvbiAiMC4xLjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlh
cm5wa2cuY29tL2ZvcndhcmRlZC8tL2ZvcndhcmRlZC0wLjEuMC50Z3ojMTllZjk4NzRjNGFlMWMy
OTdiY2YwNzhmZGU2M2EwOWI2NmE4NDM2MyIKKworZnJlc2hAMC4zLjA6CisgIHZlcnNpb24gIjAu
My4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9mcmVzaC8tL2Zy
ZXNoLTAuMy4wLnRneiM2NTFmODM4ZTIyNDI0ZTc1NjZkZTE2MWQ4MzU4Y2FhMTk5ZjgzZDRmIgor
Citmcy5yZWFscGF0aEBeMS4wLjA6CisgIHZlcnNpb24gIjEuMC4wIgorICByZXNvbHZlZCAiaHR0
cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9mcy5yZWFscGF0aC8tL2ZzLnJlYWxwYXRoLTEuMC4w
LnRneiMxNTA0YWQyNTIzMTU4Y2FhNDBkYjRhMjc4N2NiMDE0MTE5OTRlYTRmIgorCitmc2V2ZW50
c0BeMS4wLjA6CisgIHZlcnNpb24gIjEuMC4xNSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0
cnkueWFybnBrZy5jb20vZnNldmVudHMvLS9mc2V2ZW50cy0xLjAuMTUudGd6I2ZhNjNmNTkwZjNj
MmFkOTEyNzVlNDk3MmE2Y2VhNTQ1ZmIwYWFlNDQiCisgIGRlcGVuZGVuY2llczoKKyAgICBuYW4g
Il4yLjMuMCIKKyAgICBub2RlLXByZS1neXAgIl4wLjYuMjkiCisKK2ZzdHJlYW0taWdub3JlQH4x
LjAuNToKKyAgdmVyc2lvbiAiMS4wLjUiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlh
cm5wa2cuY29tL2ZzdHJlYW0taWdub3JlLy0vZnN0cmVhbS1pZ25vcmUtMS4wLjUudGd6IzljMzFk
YWUzNDc2NzAxOGZlMWQyNDliMjRkYWRhNjdkMDkyZGExMDUiCisgIGRlcGVuZGVuY2llczoKKyAg
ICBmc3RyZWFtICJeMS4wLjAiCisgICAgaW5oZXJpdHMgIjIiCisgICAgbWluaW1hdGNoICJeMy4w
LjAiCisKK2ZzdHJlYW1AXjEuMC4wLCBmc3RyZWFtQF4xLjAuMiwgZnN0cmVhbUB+MS4wLjEwOgor
ICB2ZXJzaW9uICIxLjAuMTAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cu
Y29tL2ZzdHJlYW0vLS9mc3RyZWFtLTEuMC4xMC50Z3ojNjA0ZThhOTJmZTI2ZmZkOWY2ZmFlMzAz
OTlkNDk4NGUxYWIyMjgyMiIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGdyYWNlZnVsLWZzICJeNC4x
LjIiCisgICAgaW5oZXJpdHMgIn4yLjAuMCIKKyAgICBta2RpcnAgIj49MC41IDAiCisgICAgcmlt
cmFmICIyIgorCitmdW5jdGlvbi1iaW5kQF4xLjAuMjoKKyAgdmVyc2lvbiAiMS4xLjAiCisgIHJl
c29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2Z1bmN0aW9uLWJpbmQvLS9mdW5j
dGlvbi1iaW5kLTEuMS4wLnRneiMxNjE3NjcxNGM4MDE3OThlNGU4ZjJjZjdmNzUyOTQ2N2JiNGE1
NzcxIgorCitnYXVnZUB+Mi43LjE6CisgIHZlcnNpb24gIjIuNy4yIgorICByZXNvbHZlZCAiaHR0
cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9nYXVnZS8tL2dhdWdlLTIuNy4yLnRneiMxNWNlY2Mz
MWIwMmQwNTM0NWE1ZDZiMGUxNzFjZGIzYWQyMzA3Nzc0IgorICBkZXBlbmRlbmNpZXM6CisgICAg
YXByb2JhICJeMS4wLjMiCisgICAgY29uc29sZS1jb250cm9sLXN0cmluZ3MgIl4xLjAuMCIKKyAg
ICBoYXMtdW5pY29kZSAiXjIuMC4wIgorICAgIG9iamVjdC1hc3NpZ24gIl40LjEuMCIKKyAgICBz
aWduYWwtZXhpdCAiXjMuMC4wIgorICAgIHN0cmluZy13aWR0aCAiXjEuMC4xIgorICAgIHN0cmlw
LWFuc2kgIl4zLjAuMSIKKyAgICBzdXBwb3J0cy1jb2xvciAiXjAuMi4wIgorICAgIHdpZGUtYWxp
Z24gIl4xLjEuMCIKKworZ2VuZXJhdGUtZnVuY3Rpb25AXjIuMC4wOgorICB2ZXJzaW9uICIyLjAu
MCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vZ2VuZXJhdGUtZnVu
Y3Rpb24vLS9nZW5lcmF0ZS1mdW5jdGlvbi0yLjAuMC50Z3ojNjg1OGZlN2MwOTY5YjdkNGU5MDkz
MzM3NjQ3YWM3OWY2MGRmYmU3NCIKKworZ2VuZXJhdGUtb2JqZWN0LXByb3BlcnR5QF4xLjEuMDoK
KyAgdmVyc2lvbiAiMS4yLjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cu
Y29tL2dlbmVyYXRlLW9iamVjdC1wcm9wZXJ0eS8tL2dlbmVyYXRlLW9iamVjdC1wcm9wZXJ0eS0x
LjIuMC50Z3ojOWMwZTFjNDAzMDhjZTgwNGY0NzgzNjE4YjkzN2ZhODhmOTlkNTBkMCIKKyAgZGVw
ZW5kZW5jaWVzOgorICAgIGlzLXByb3BlcnR5ICJeMS4wLjAiCisKK2dldHBhc3NAXjAuMS4xOgor
ICB2ZXJzaW9uICIwLjEuNiIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5j
b20vZ2V0cGFzcy8tL2dldHBhc3MtMC4xLjYudGd6IzI4M2ZmZDlmYzEyNTY4NDA4NzUzMTFjMWI2
MGU4YzQwMTg3MTEwZTYiCisgIGRlcGVuZGVuY2llczoKKyAgICBhc3NlcnQtcGx1cyAiXjEuMC4w
IgorCitnbG9iLWJhc2VAXjAuMy4wOgorICB2ZXJzaW9uICIwLjMuMCIKKyAgcmVzb2x2ZWQgImh0
dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vZ2xvYi1iYXNlLy0vZ2xvYi1iYXNlLTAuMy4wLnRn
eiNkYmIxNjRmNjIyMWIxYzBiMWNjZjgyYWVhMzI4YjQ5N2RmMGVhM2M0IgorICBkZXBlbmRlbmNp
ZXM6CisgICAgZ2xvYi1wYXJlbnQgIl4yLjAuMCIKKyAgICBpcy1nbG9iICJeMi4wLjAiCisKK2ds
b2ItcGFyZW50QF4yLjAuMDoKKyAgdmVyc2lvbiAiMi4wLjAiCisgIHJlc29sdmVkICJodHRwczov
L3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2dsb2ItcGFyZW50Ly0vZ2xvYi1wYXJlbnQtMi4wLjAudGd6
IzgxMzgzZDcyZGIwNTRmY2NjZjUzMzZkYWE5MDJmMTgyZjZlZGJiMjgiCisgIGRlcGVuZGVuY2ll
czoKKyAgICBpcy1nbG9iICJeMi4wLjAiCisKK2dsb2JAXjcuMC4wLCBnbG9iQF43LjAuMywgZ2xv
YkBeNy4wLjU6CisgIHZlcnNpb24gIjcuMS4xIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3Ry
eS55YXJucGtnLmNvbS9nbG9iLy0vZ2xvYi03LjEuMS50Z3ojODA1MjExZGYwNGZhYWYxYzYzYTM2
MDAzMDZjZGY1YWRlNTBiMmVjOCIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGZzLnJlYWxwYXRoICJe
MS4wLjAiCisgICAgaW5mbGlnaHQgIl4xLjAuNCIKKyAgICBpbmhlcml0cyAiMiIKKyAgICBtaW5p
bWF0Y2ggIl4zLjAuMiIKKyAgICBvbmNlICJeMS4zLjAiCisgICAgcGF0aC1pcy1hYnNvbHV0ZSAi
XjEuMC4wIgorCitnbG9iYWxzQF45LjAuMCwgZ2xvYmFsc0BeOS4yLjA6CisgIHZlcnNpb24gIjku
MTQuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vZ2xvYmFscy8t
L2dsb2JhbHMtOS4xNC4wLnRneiM4ODU5OTM2YWYwMDM4NzQxMjYzMDUzYjM5ZDBlNzZjYTI0MWU0
MDM0IgorCitnbG9iYnlAXjUuMC4wOgorICB2ZXJzaW9uICI1LjAuMCIKKyAgcmVzb2x2ZWQgImh0
dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vZ2xvYmJ5Ly0vZ2xvYmJ5LTUuMC4wLnRneiNlYmQ4
NDY2N2NhMGRiYjMzMGI5OWJjZmM2OGVhYzJiYzU0MzcwZTBkIgorICBkZXBlbmRlbmNpZXM6Cisg
ICAgYXJyYXktdW5pb24gIl4xLjAuMSIKKyAgICBhcnJpZnkgIl4xLjAuMCIKKyAgICBnbG9iICJe
Ny4wLjMiCisgICAgb2JqZWN0LWFzc2lnbiAiXjQuMC4xIgorICAgIHBpZnkgIl4yLjAuMCIKKyAg
ICBwaW5raWUtcHJvbWlzZSAiXjIuMC4wIgorCitncmFjZWZ1bC1mc0BeNC4xLjI6CisgIHZlcnNp
b24gIjQuMS4xMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vZ3Jh
Y2VmdWwtZnMvLS9ncmFjZWZ1bC1mcy00LjEuMTEudGd6IzBlOGJkZmU0ZDFkZGI4ODU0ZDY0ZTA0
ZWE3YzAwZTJhMDI2ZTU2NTgiCisKKyJncmFjZWZ1bC1yZWFkbGlua0A+PSAxLjAuMCI6CisgIHZl
cnNpb24gIjEuMC4xIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9n
cmFjZWZ1bC1yZWFkbGluay8tL2dyYWNlZnVsLXJlYWRsaW5rLTEuMC4xLnRneiM0Y2FmYWQ3NmJj
NjJmMDJmYTAzOWIyZjk0ZTlhM2RkM2EzOTFhNzI1IgorCitoYXItdmFsaWRhdG9yQH4yLjAuNjoK
KyAgdmVyc2lvbiAiMi4wLjYiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cu
Y29tL2hhci12YWxpZGF0b3IvLS9oYXItdmFsaWRhdG9yLTIuMC42LnRneiNjZGNiYzA4MTg4MjY1
YWQxMTliNmE1YTdjOGFiNzBlZWNmYjVkMjdkIgorICBkZXBlbmRlbmNpZXM6CisgICAgY2hhbGsg
Il4xLjEuMSIKKyAgICBjb21tYW5kZXIgIl4yLjkuMCIKKyAgICBpcy1teS1qc29uLXZhbGlkICJe
Mi4xMi40IgorICAgIHBpbmtpZS1wcm9taXNlICJeMi4wLjAiCisKK2hhcy1hbnNpQF4yLjAuMDoK
KyAgdmVyc2lvbiAiMi4wLjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cu
Y29tL2hhcy1hbnNpLy0vaGFzLWFuc2ktMi4wLjAudGd6IzM0ZjUwNDljZTFlY2RmMmIwNjQ5YWYz
ZWYyNGU0NWVkMzU0MTZkOTEiCisgIGRlcGVuZGVuY2llczoKKyAgICBhbnNpLXJlZ2V4ICJeMi4w
LjAiCisKK2hhcy1mbGFnQF4xLjAuMDoKKyAgdmVyc2lvbiAiMS4wLjAiCisgIHJlc29sdmVkICJo
dHRwOi8vcmVnaXN0cnkubnBtanMub3JnL2hhcy1mbGFnLy0vaGFzLWZsYWctMS4wLjAudGd6Izlk
OWU3OTMxNjVjZTAxN2EwMGYwMDQxOGM0M2Y5NDJhN2IxZDExZmEiCisKK2hhcy11bmljb2RlQF4y
LjAuMDoKKyAgdmVyc2lvbiAiMi4wLjEiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlh
cm5wa2cuY29tL2hhcy11bmljb2RlLy0vaGFzLXVuaWNvZGUtMi4wLjEudGd6I2UwZTZmZTZhMjhj
ZjUxMTM4ODU1ZTA4NmQxNjkxZTc3MWRlMmE4YjkiCisKK2hhc0BeMS4wLjE6CisgIHZlcnNpb24g
IjEuMC4xIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9oYXMvLS9o
YXMtMS4wLjEudGd6Izg0NjE3MzNmNTM4YjA4MzdjOTM2MWUzOWE5YWI5ZTk3MDRkYzJmMjgiCisg
IGRlcGVuZGVuY2llczoKKyAgICBmdW5jdGlvbi1iaW5kICJeMS4wLjIiCisKK2hhc2gtc3VtQF4x
LjAuMjoKKyAgdmVyc2lvbiAiMS4wLjIiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlh
cm5wa2cuY29tL2hhc2gtc3VtLy0vaGFzaC1zdW0tMS4wLjIudGd6IzMzYjQwNzc3NzU0YzY0MzI1
NzNjMTIwY2MzODA4YmJkMTBkNDdmMDQiCisKK2hhd2tAfjMuMS4zOgorICB2ZXJzaW9uICIzLjEu
MyIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vaGF3ay8tL2hhd2st
My4xLjMudGd6IzA3ODQ0NGJkN2MxNjQwYjBmZTU0MGQyYzliNzNkNTk2NzhlOGUxYzQiCisgIGRl
cGVuZGVuY2llczoKKyAgICBib29tICIyLngueCIKKyAgICBjcnlwdGlsZXMgIjIueC54IgorICAg
IGhvZWsgIjIueC54IgorICAgIHNudHAgIjEueC54IgorCitoZUBeMS4xLjAsIGhlQDEuMS54Ogor
ICB2ZXJzaW9uICIxLjEuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5j
b20vaGUvLS9oZS0xLjEuMC50Z3ojMjkzMTlkNDliZWVjMTNhOWIxZjNjNGY5YjJhNmRkZTQ4NTli
YjJhNyIKKworaG9la0AyLngueDoKKyAgdmVyc2lvbiAiMi4xNi4zIgorICByZXNvbHZlZCAiaHR0
cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9ob2VrLy0vaG9lay0yLjE2LjMudGd6IzIwYmI3NDAz
ZDNjZWEzOThlOTFkYzQ3MTBhOGZmMWI4Mjc0YTI1ZWQiCisKK2hvbWUtb3ItdG1wQF4yLjAuMDoK
KyAgdmVyc2lvbiAiMi4wLjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cu
Y29tL2hvbWUtb3ItdG1wLy0vaG9tZS1vci10bXAtMi4wLjAudGd6I2UzNmMzZjJkMmNhZTdkNzQ2
YTg1N2UzOGQxOGQ1ZjMyYTc4ODJkYjgiCisgIGRlcGVuZGVuY2llczoKKyAgICBvcy1ob21lZGly
ICJeMS4wLjAiCisgICAgb3MtdG1wZGlyICJeMS4wLjEiCisKK2h0bWwtY29tbWVudC1yZWdleEBe
MS4xLjA6CisgIHZlcnNpb24gIjEuMS4xIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55
YXJucGtnLmNvbS9odG1sLWNvbW1lbnQtcmVnZXgvLS9odG1sLWNvbW1lbnQtcmVnZXgtMS4xLjEu
dGd6IzY2OGI5Mzc3NmVhYWU1NWViZGU4ZjNhZDQ2NGIzMDdhNDk2MzYyNWUiCisKK2h0bWwtZW50
aXRpZXNAXjEuMi4wOgorICB2ZXJzaW9uICIxLjIuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVn
aXN0cnkueWFybnBrZy5jb20vaHRtbC1lbnRpdGllcy8tL2h0bWwtZW50aXRpZXMtMS4yLjAudGd6
IzQxOTQ4Y2FmODVjZTgyZmVkMzZlNGU2YTBlZDM3MWE2NjY0Mzc5ZTIiCisKK2h0bWwtbWluaWZp
ZXJAXjMuMS4wOgorICB2ZXJzaW9uICIzLjIuMyIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0
cnkueWFybnBrZy5jb20vaHRtbC1taW5pZmllci8tL2h0bWwtbWluaWZpZXItMy4yLjMudGd6I2Qy
ZmY1MzZlMjRkOTU3MjZjMzMyNDkzZDhmNzdkODRkYmVkODUzNzIiCisgIGRlcGVuZGVuY2llczoK
KyAgICBjYW1lbC1jYXNlICIzLjAueCIKKyAgICBjbGVhbi1jc3MgIjMuNC54IgorICAgIGNvbW1h
bmRlciAiMi45LngiCisgICAgaGUgIjEuMS54IgorICAgIG5jbmFtZSAiMS4wLngiCisgICAgcGFy
YW0tY2FzZSAiMi4xLngiCisgICAgcmVsYXRldXJsICIwLjIueCIKKyAgICB1Z2xpZnktanMgIjIu
Ny54IgorCitodG1sLXdlYnBhY2stcGx1Z2luQF4yLjguMToKKyAgdmVyc2lvbiAiMi4yNC4xIgor
ICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9odG1sLXdlYnBhY2stcGx1
Z2luLy0vaHRtbC13ZWJwYWNrLXBsdWdpbi0yLjI0LjEudGd6IzdmNDVmYzY3OGY2NmVhYzJkNDMz
ZjIyMzM2YjQzOTlkYTAyM2I1N2UiCisgIGRlcGVuZGVuY2llczoKKyAgICBibHVlYmlyZCAiXjMu
NC42IgorICAgIGh0bWwtbWluaWZpZXIgIl4zLjEuMCIKKyAgICBsb2FkZXItdXRpbHMgIl4wLjIu
MTYiCisgICAgbG9kYXNoICJeNC4xNi40IgorICAgIHByZXR0eS1lcnJvciAiXjIuMC4yIgorICAg
IHRvcG9zb3J0ICJeMS4wLjAiCisKK2h0bWxwYXJzZXIyQF4zLjguMjoKKyAgdmVyc2lvbiAiMy45
LjIiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2h0bWxwYXJzZXIy
Ly0vaHRtbHBhcnNlcjItMy45LjIudGd6IzFiZGY4N2FjY2EwZjNmOWU1M2ZhNGZjY2ViMGY0YjRj
YmIwMGIzMzgiCisgIGRlcGVuZGVuY2llczoKKyAgICBkb21lbGVtZW50dHlwZSAiXjEuMy4wIgor
ICAgIGRvbWhhbmRsZXIgIl4yLjMuMCIKKyAgICBkb211dGlscyAiXjEuNS4xIgorICAgIGVudGl0
aWVzICJeMS4xLjEiCisgICAgaW5oZXJpdHMgIl4yLjAuMSIKKyAgICByZWFkYWJsZS1zdHJlYW0g
Il4yLjAuMiIKKworaHRtbHBhcnNlcjJAfjMuMy4wOgorICB2ZXJzaW9uICIzLjMuMCIKKyAgcmVz
b2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vaHRtbHBhcnNlcjIvLS9odG1scGFy
c2VyMi0zLjMuMC50Z3ojY2M3MGQwNWE1OWY2NTQyZTQzZjBlNjg1Yzk4MmUxNGM5MjRhOWVmZSIK
KyAgZGVwZW5kZW5jaWVzOgorICAgIGRvbWVsZW1lbnR0eXBlICIxIgorICAgIGRvbWhhbmRsZXIg
IjIuMSIKKyAgICBkb211dGlscyAiMS4xIgorICAgIHJlYWRhYmxlLXN0cmVhbSAiMS4wIgorCito
dHRwLWVycm9yc0B+MS41LjA6CisgIHZlcnNpb24gIjEuNS4xIgorICByZXNvbHZlZCAiaHR0cHM6
Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9odHRwLWVycm9ycy8tL2h0dHAtZXJyb3JzLTEuNS4xLnRn
eiM3ODhjMGQyYzFkZTJjODFiOWU2ZThjMDE4NDNiNmI5N2ViOTIwNzUwIgorICBkZXBlbmRlbmNp
ZXM6CisgICAgaW5oZXJpdHMgIjIuMC4zIgorICAgIHNldHByb3RvdHlwZW9mICIxLjAuMiIKKyAg
ICBzdGF0dXNlcyAiPj0gMS4zLjEgPCAyIgorCitodHRwLXByb3h5LW1pZGRsZXdhcmVAXjAuMTcu
MjoKKyAgdmVyc2lvbiAiMC4xNy4zIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJu
cGtnLmNvbS9odHRwLXByb3h5LW1pZGRsZXdhcmUvLS9odHRwLXByb3h5LW1pZGRsZXdhcmUtMC4x
Ny4zLnRneiM5NDAzODIxNDcxNDliODU2MDg0ZjU1MzQ3NTJkNWI1YTgxNjhjZDFkIgorICBkZXBl
bmRlbmNpZXM6CisgICAgaHR0cC1wcm94eSAiXjEuMTYuMiIKKyAgICBpcy1nbG9iICJeMy4xLjAi
CisgICAgbG9kYXNoICJeNC4xNy4yIgorICAgIG1pY3JvbWF0Y2ggIl4yLjMuMTEiCisKK2h0dHAt
cHJveHlAXjEuMTYuMjoKKyAgdmVyc2lvbiAiMS4xNi4yIgorICByZXNvbHZlZCAiaHR0cHM6Ly9y
ZWdpc3RyeS55YXJucGtnLmNvbS9odHRwLXByb3h5Ly0vaHR0cC1wcm94eS0xLjE2LjIudGd6IzA2
ZGZmMjkyOTUyYmY2NGRiZTg0NzFmYTlkZjczMDY2ZDRmMzc3NDIiCisgIGRlcGVuZGVuY2llczoK
KyAgICBldmVudGVtaXR0ZXIzICIxLngueCIKKyAgICByZXF1aXJlcy1wb3J0ICIxLngueCIKKwor
aHR0cC1zaWduYXR1cmVAfjEuMS4wOgorICB2ZXJzaW9uICIxLjEuMSIKKyAgcmVzb2x2ZWQgImh0
dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vaHR0cC1zaWduYXR1cmUvLS9odHRwLXNpZ25hdHVy
ZS0xLjEuMS50Z3ojZGY3MmUyNjcwNjZjZDBhYzY3ZmI3NmFkZjhlMTM0YThmYmNmOTFiZiIKKyAg
ZGVwZW5kZW5jaWVzOgorICAgIGFzc2VydC1wbHVzICJeMC4yLjAiCisgICAganNwcmltICJeMS4y
LjIiCisgICAgc3NocGsgIl4xLjcuMCIKKworaHR0cHMtYnJvd3NlcmlmeUAwLjAuMToKKyAgdmVy
c2lvbiAiMC4wLjEiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2h0
dHBzLWJyb3dzZXJpZnkvLS9odHRwcy1icm93c2VyaWZ5LTAuMC4xLnRneiMzZjkxMzY1Y2FiZTYw
Yjc3ZWQwZWJiYTI0YjQ1NGUzZTA5ZDk1YTgyIgorCitpY3NzLXJlcGxhY2Utc3ltYm9sc0BeMS4w
LjI6CisgIHZlcnNpb24gIjEuMC4yIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJu
cGtnLmNvbS9pY3NzLXJlcGxhY2Utc3ltYm9scy8tL2ljc3MtcmVwbGFjZS1zeW1ib2xzLTEuMC4y
LnRneiNjYjBiNjA1NGViM2FmNmVkYzlhYjFkNjJkMDE5MzNlMmQ0YzhiZmE1IgorCitpZWVlNzU0
QF4xLjEuNDoKKyAgdmVyc2lvbiAiMS4xLjgiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5
Lnlhcm5wa2cuY29tL2llZWU3NTQvLS9pZWVlNzU0LTEuMS44LnRneiNiZTMzZDQwYWMxMGVmMTky
NjcwMWY2ZjA4YTJkODZmYmZkMWFkM2U0IgorCitpZ25vcmVAXjMuMi4wOgorICB2ZXJzaW9uICIz
LjIuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vaWdub3JlLy0v
aWdub3JlLTMuMi4wLnRneiM4ZDg4ZjAzYzMwMDJhMGFjNTIxMTRkYjI1ZDJjNjczYjBiZjFlNDM1
IgorCitpbXVybXVyaGFzaEBeMC4xLjQ6CisgIHZlcnNpb24gIjAuMS40IgorICByZXNvbHZlZCAi
aHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9pbXVybXVyaGFzaC8tL2ltdXJtdXJoYXNoLTAu
MS40LnRneiM5MjE4YjliMmI5MjhhMjM4YjEzZGM0ZmI2YjZkNTc2ZjIzMTQ1M2VhIgorCitpbmRl
eGVzLW9mQF4xLjAuMToKKyAgdmVyc2lvbiAiMS4wLjEiCisgIHJlc29sdmVkICJodHRwczovL3Jl
Z2lzdHJ5Lnlhcm5wa2cuY29tL2luZGV4ZXMtb2YvLS9pbmRleGVzLW9mLTEuMC4xLnRneiNmMzBm
NzE2YzhlMmJkMzQ2YzdiNjdkM2RmMzkxNTU2NmE3YzA1NjA3IgorCitpbmRleG9mQDAuMC4xOgor
ICB2ZXJzaW9uICIwLjAuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5j
b20vaW5kZXhvZi8tL2luZGV4b2YtMC4wLjEudGd6IzgyZGMzMzZkMjMyYjkwNjIxNzlkMDVhYjMy
OTNhNjYwNTlmZDQzNWQiCisKK2luZmxpZ2h0QF4xLjAuNDoKKyAgdmVyc2lvbiAiMS4wLjYiCisg
IHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2luZmxpZ2h0Ly0vaW5mbGln
aHQtMS4wLjYudGd6IzQ5YmQ2MzMxZDdkMDJkMGMwOWJjOTEwYTEwNzViYTgxNjViNTZkZjkiCisg
IGRlcGVuZGVuY2llczoKKyAgICBvbmNlICJeMS4zLjAiCisgICAgd3JhcHB5ICIxIgorCitpbmhl
cml0c0BeMi4wLjEsIGluaGVyaXRzQH4yLjAuMCwgaW5oZXJpdHNAfjIuMC4xLCBpbmhlcml0c0Ay
LCBpbmhlcml0c0AyLjAuMzoKKyAgdmVyc2lvbiAiMi4wLjMiCisgIHJlc29sdmVkICJodHRwczov
L3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2luaGVyaXRzLy0vaW5oZXJpdHMtMi4wLjMudGd6IzYzM2My
YzgzZTNkYTQyYTUwMmY1MjQ2NjAyMjQ4MGY0MjA4MjYxZGUiCisKK2luaGVyaXRzQDIuMC4xOgor
ICB2ZXJzaW9uICIyLjAuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5j
b20vaW5oZXJpdHMvLS9pbmhlcml0cy0yLjAuMS50Z3ojYjE3ZDA4ZDMyNmI0NDIzZTU2OGVmZjcx
OWY5MWIwYjFjYmRmNjlmMSIKKworaW5pQF4xLjMuNCwgaW5pQH4xLjMuMDoKKyAgdmVyc2lvbiAi
MS4zLjQiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2luaS8tL2lu
aS0xLjMuNC50Z3ojMDUzN2NiNzlkYWY1OWI1OWExYTUxN2RmZjcwNmM4NmVjMDM5MTYyZSIKKwor
aW5xdWlyZXJAXjAuMTIuMDoKKyAgdmVyc2lvbiAiMC4xMi4wIgorICByZXNvbHZlZCAiaHR0cHM6
Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9pbnF1aXJlci8tL2lucXVpcmVyLTAuMTIuMC50Z3ojMWVm
MmJmZDYzNTA0ZGYwYmM3NTc4NWZmZjhjMmM0MWRmMTJmMDc3ZSIKKyAgZGVwZW5kZW5jaWVzOgor
ICAgIGFuc2ktZXNjYXBlcyAiXjEuMS4wIgorICAgIGFuc2ktcmVnZXggIl4yLjAuMCIKKyAgICBj
aGFsayAiXjEuMC4wIgorICAgIGNsaS1jdXJzb3IgIl4xLjAuMSIKKyAgICBjbGktd2lkdGggIl4y
LjAuMCIKKyAgICBmaWd1cmVzICJeMS4zLjUiCisgICAgbG9kYXNoICJeNC4zLjAiCisgICAgcmVh
ZGxpbmUyICJeMS4wLjEiCisgICAgcnVuLWFzeW5jICJeMC4xLjAiCisgICAgcngtbGl0ZSAiXjMu
MS4yIgorICAgIHN0cmluZy13aWR0aCAiXjEuMC4xIgorICAgIHN0cmlwLWFuc2kgIl4zLjAuMCIK
KyAgICB0aHJvdWdoICJeMi4zLjYiCisKK2ludGVycHJldEBeMC42LjQ6CisgIHZlcnNpb24gIjAu
Ni42IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9pbnRlcnByZXQv
LS9pbnRlcnByZXQtMC42LjYudGd6I2ZlY2Q3YTE4ZTdjZTVjYTZhYmZiOTUzZTFmODYyMTNhNDlm
MTYyNWIiCisKK2ludGVycHJldEBeMS4wLjA6CisgIHZlcnNpb24gIjEuMC4xIgorICByZXNvbHZl
ZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9pbnRlcnByZXQvLS9pbnRlcnByZXQtMS4w
LjEudGd6I2Q1NzlmYjdmNjkzYjg1ODAwNDk0N2FmMzlmYTBkYjQ5Zjc5NTYwMmMiCisKK2ludmFy
aWFudEBeMi4yLjA6CisgIHZlcnNpb24gIjIuMi4yIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdp
c3RyeS55YXJucGtnLmNvbS9pbnZhcmlhbnQvLS9pbnZhcmlhbnQtMi4yLjIudGd6IzllMWY1NmFj
MGFjZGI2YmYzMDMzMDZmMzM4YmUzYjIwNGFlNjAzNjAiCisgIGRlcGVuZGVuY2llczoKKyAgICBs
b29zZS1lbnZpZnkgIl4xLjAuMCIKKworaXBhZGRyLmpzQDEuMS4xOgorICB2ZXJzaW9uICIxLjEu
MSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vaXBhZGRyLmpzLy0v
aXBhZGRyLmpzLTEuMS4xLnRneiNjNzkxZDk1ZjUyYjI5YzEyNDdkNWRmODBhZGEzOWI4YTczNjQ3
MjMwIgorCitpcy1hYnNvbHV0ZS11cmxAXjIuMC4wOgorICB2ZXJzaW9uICIyLjAuMCIKKyAgcmVz
b2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vaXMtYWJzb2x1dGUtdXJsLy0vaXMt
YWJzb2x1dGUtdXJsLTIuMC4wLnRneiM5YzRiMjBiMGU1YzBjYmVmOWE0NzlhMzY3ZWRlNmY5OTE2
NzlmMzU5IgorCitpcy1iaW5hcnktcGF0aEBeMS4wLjA6CisgIHZlcnNpb24gIjEuMC4xIgorICBy
ZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9pcy1iaW5hcnktcGF0aC8tL2lz
LWJpbmFyeS1wYXRoLTEuMC4xLnRneiM3NWYxNjY0MmI0ODBmMTg3YTcxMWM4MTQxNjFmZDNhNGE3
NjU1ODk4IgorICBkZXBlbmRlbmNpZXM6CisgICAgYmluYXJ5LWV4dGVuc2lvbnMgIl4xLjAuMCIK
KworaXMtYnVmZmVyQF4xLjAuMjoKKyAgdmVyc2lvbiAiMS4xLjQiCisgIHJlc29sdmVkICJodHRw
czovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2lzLWJ1ZmZlci8tL2lzLWJ1ZmZlci0xLjEuNC50Z3oj
Y2ZjODZjY2Q1ZGM1YTUyZmE4MDQ4OTExMWM2OTIwYzQ1N2UyZDk4YiIKKworaXMtZG90ZmlsZUBe
MS4wLjA6CisgIHZlcnNpb24gIjEuMC4yIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55
YXJucGtnLmNvbS9pcy1kb3RmaWxlLy0vaXMtZG90ZmlsZS0xLjAuMi50Z3ojMmMxMzIzODNmMzkx
OTlmOGVkYzI2OGNhMDFiOWIwMDdkMjA1Y2M0ZCIKKworaXMtZXF1YWwtc2hhbGxvd0BeMC4xLjM6
CisgIHZlcnNpb24gIjAuMS4zIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtn
LmNvbS9pcy1lcXVhbC1zaGFsbG93Ly0vaXMtZXF1YWwtc2hhbGxvdy0wLjEuMy50Z3ojMjIzODA5
OGZjMjIxZGUwYmNmYTVkOWVhYzRjNDVkNjM4YWExYzUzNCIKKyAgZGVwZW5kZW5jaWVzOgorICAg
IGlzLXByaW1pdGl2ZSAiXjIuMC4wIgorCitpcy1leHRlbmRhYmxlQF4wLjEuMToKKyAgdmVyc2lv
biAiMC4xLjEiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2lzLWV4
dGVuZGFibGUvLS9pcy1leHRlbmRhYmxlLTAuMS4xLnRneiM2MmIxMTBlMjg5YTQ3MTQxOGUzZWMz
NmE2MTdkNDcyZTMwMWRmYzg5IgorCitpcy1leHRnbG9iQF4xLjAuMDoKKyAgdmVyc2lvbiAiMS4w
LjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2lzLWV4dGdsb2Iv
LS9pcy1leHRnbG9iLTEuMC4wLnRneiNhYzQ2ODE3N2M0OTQzNDA1YTA5MmZjOGYyOTc2MGM2ZmZj
NjIwNmMwIgorCitpcy1leHRnbG9iQF4yLjEuMDoKKyAgdmVyc2lvbiAiMi4xLjAiCisgIHJlc29s
dmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2lzLWV4dGdsb2IvLS9pcy1leHRnbG9i
LTIuMS4wLnRneiMzMzQxMWE0ODJiMDQ2YmY5NWU2YjBjYjI3ZWUyNzExYWY0Y2YxNWFkIgorCitp
cy1maW5pdGVAXjEuMC4wOgorICB2ZXJzaW9uICIxLjAuMiIKKyAgcmVzb2x2ZWQgImh0dHBzOi8v
cmVnaXN0cnkueWFybnBrZy5jb20vaXMtZmluaXRlLy0vaXMtZmluaXRlLTEuMC4yLnRneiNjYzY2
Nzc2OTU2MDJiZTU1MGVmMTFlOGI0YWE2MzA1MzQyYjZkMGFhIgorICBkZXBlbmRlbmNpZXM6Cisg
ICAgbnVtYmVyLWlzLW5hbiAiXjEuMC4wIgorCitpcy1mdWxsd2lkdGgtY29kZS1wb2ludEBeMS4w
LjA6CisgIHZlcnNpb24gIjEuMC4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJu
cGtnLmNvbS9pcy1mdWxsd2lkdGgtY29kZS1wb2ludC8tL2lzLWZ1bGx3aWR0aC1jb2RlLXBvaW50
LTEuMC4wLnRneiNlZjllMzEzODZmMDMxYTdmMGQ2NDNhZjgyZmRlNTBjNDU3ZWYwMGNiIgorICBk
ZXBlbmRlbmNpZXM6CisgICAgbnVtYmVyLWlzLW5hbiAiXjEuMC4wIgorCitpcy1mdWxsd2lkdGgt
Y29kZS1wb2ludEBeMi4wLjA6CisgIHZlcnNpb24gIjIuMC4wIgorICByZXNvbHZlZCAiaHR0cHM6
Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9pcy1mdWxsd2lkdGgtY29kZS1wb2ludC8tL2lzLWZ1bGx3
aWR0aC1jb2RlLXBvaW50LTIuMC4wLnRneiNhM2IzMGE1YzRmMTk5MTgzMTY3YWFhYjkzYmVlZmFl
M2RkZmI2NTRmIgorCitpcy1nbG9iQF4yLjAuMCwgaXMtZ2xvYkBeMi4wLjE6CisgIHZlcnNpb24g
IjIuMC4xIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9pcy1nbG9i
Ly0vaXMtZ2xvYi0yLjAuMS50Z3ojZDA5NmY5MjZhM2RlZDU2MDBmM2ZkZmQ5MTE5OGNiMDg4OGMy
ZDg2MyIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGlzLWV4dGdsb2IgIl4xLjAuMCIKKworaXMtZ2xv
YkBeMy4xLjA6CisgIHZlcnNpb24gIjMuMS4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3Ry
eS55YXJucGtnLmNvbS9pcy1nbG9iLy0vaXMtZ2xvYi0zLjEuMC50Z3ojN2JhNWFlMjQyMTc4MDRh
YzcwNzA3Yjk2OTIyNTY3NDg2Y2MzZTg0YSIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGlzLWV4dGds
b2IgIl4yLjEuMCIKKworaXMtbXktanNvbi12YWxpZEBeMi4xMC4wLCBpcy1teS1qc29uLXZhbGlk
QF4yLjEyLjQ6CisgIHZlcnNpb24gIjIuMTUuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0
cnkueWFybnBrZy5jb20vaXMtbXktanNvbi12YWxpZC8tL2lzLW15LWpzb24tdmFsaWQtMi4xNS4w
LnRneiM5MzZlZGRhM2NhM2MyMTFmZDk4ZjNiMmQzZTA4ZGE0M2Y3YjI5MTViIgorICBkZXBlbmRl
bmNpZXM6CisgICAgZ2VuZXJhdGUtZnVuY3Rpb24gIl4yLjAuMCIKKyAgICBnZW5lcmF0ZS1vYmpl
Y3QtcHJvcGVydHkgIl4xLjEuMCIKKyAgICBqc29ucG9pbnRlciAiXjQuMC4wIgorICAgIHh0ZW5k
ICJeNC4wLjAiCisKK2lzLW51bWJlckBeMi4wLjIsIGlzLW51bWJlckBeMi4xLjA6CisgIHZlcnNp
b24gIjIuMS4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9pcy1u
dW1iZXIvLS9pcy1udW1iZXItMi4xLjAudGd6IzAxZmNiYmIzOTM0NjNhNTQ4ZjJmNDY2Y2NlMTZk
ZWNlNDlkYjkwOGYiCisgIGRlcGVuZGVuY2llczoKKyAgICBraW5kLW9mICJeMy4wLjIiCisKK2lz
LXBhdGgtY3dkQF4xLjAuMDoKKyAgdmVyc2lvbiAiMS4wLjAiCisgIHJlc29sdmVkICJodHRwczov
L3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2lzLXBhdGgtY3dkLy0vaXMtcGF0aC1jd2QtMS4wLjAudGd6
I2QyMjVlYzIzMTMyZTg5ZWRkMzhmZGE3Njc0NzJlNjJlNjVmMTEwNmQiCisKK2lzLXBhdGgtaW4t
Y3dkQF4xLjAuMDoKKyAgdmVyc2lvbiAiMS4wLjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lz
dHJ5Lnlhcm5wa2cuY29tL2lzLXBhdGgtaW4tY3dkLy0vaXMtcGF0aC1pbi1jd2QtMS4wLjAudGd6
IzY0Nzc1ODJiODIxNGQ2MDIzNDYwOTQ1NjcwMDNiZThhOWVhYzA0ZGMiCisgIGRlcGVuZGVuY2ll
czoKKyAgICBpcy1wYXRoLWluc2lkZSAiXjEuMC4wIgorCitpcy1wYXRoLWluc2lkZUBeMS4wLjA6
CisgIHZlcnNpb24gIjEuMC4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtn
LmNvbS9pcy1wYXRoLWluc2lkZS8tL2lzLXBhdGgtaW5zaWRlLTEuMC4wLnRneiNmYzA2ZTVhMTY4
M2ZiZGExM2RlNjY3YWZmNzE3YmJjMTBhNDhmMzdmIgorICBkZXBlbmRlbmNpZXM6CisgICAgcGF0
aC1pcy1pbnNpZGUgIl4xLjAuMSIKKworaXMtcGxhaW4tb2JqQF4xLjAuMDoKKyAgdmVyc2lvbiAi
MS4xLjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2lzLXBsYWlu
LW9iai8tL2lzLXBsYWluLW9iai0xLjEuMC50Z3ojNzFhNTBjODQyOWRmY2E3NzNjOTJhMzkwYTRh
MDNiMzlmY2Q1MWQzZSIKKworaXMtcG9zaXgtYnJhY2tldEBeMC4xLjA6CisgIHZlcnNpb24gIjAu
MS4xIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9pcy1wb3NpeC1i
cmFja2V0Ly0vaXMtcG9zaXgtYnJhY2tldC0wLjEuMS50Z3ojMzMzNGRjNzk3NzQzNjhlOTJmMDE2
ZTZmYmMwYTg4ZjVjZDZlNmJjNCIKKworaXMtcHJpbWl0aXZlQF4yLjAuMDoKKyAgdmVyc2lvbiAi
Mi4wLjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2lzLXByaW1p
dGl2ZS8tL2lzLXByaW1pdGl2ZS0yLjAuMC50Z3ojMjA3YmFiOTE2Mzg0OTljMDdiMmFkZjI0MGE0
MWE4NzIxMDAzNDU3NSIKKworaXMtcHJvcGVydHlAXjEuMC4wOgorICB2ZXJzaW9uICIxLjAuMiIK
KyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vaXMtcHJvcGVydHkvLS9p
cy1wcm9wZXJ0eS0xLjAuMi50Z3ojNTdmZTFjNGU0ODQ3NGVkZDY1YjA5OTExZjI2YjFjZDQwOTVk
ZGE4NCIKKworaXMtcmVzb2x2YWJsZUBeMS4wLjA6CisgIHZlcnNpb24gIjEuMC4wIgorICByZXNv
bHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9pcy1yZXNvbHZhYmxlLy0vaXMtcmVz
b2x2YWJsZS0xLjAuMC50Z3ojOGRmNTdjNjFlYTJlM2M1MDE0MDhkMTAwZmIwMTNjZjhkNmUwY2M2
MiIKKyAgZGVwZW5kZW5jaWVzOgorICAgIHRyeWl0ICJeMS4wLjEiCisKK2lzLXN2Z0BeMi4wLjA6
CisgIHZlcnNpb24gIjIuMS4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtn
LmNvbS9pcy1zdmcvLS9pcy1zdmctMi4xLjAudGd6I2NmNjEwOTBkYTBkOWVmYmNhYjg3MjJkZWJh
NmYwMzIyMDhkYmIwZTkiCisgIGRlcGVuZGVuY2llczoKKyAgICBodG1sLWNvbW1lbnQtcmVnZXgg
Il4xLjEuMCIKKworaXMtdHlwZWRhcnJheUB+MS4wLjA6CisgIHZlcnNpb24gIjEuMC4wIgorICBy
ZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9pcy10eXBlZGFycmF5Ly0vaXMt
dHlwZWRhcnJheS0xLjAuMC50Z3ojZTQ3OWM4MDg1OGRmMGMxYjExZGRkYTY5NDBmOTYwMTFmY2Rh
NGE5YSIKKworaXNhcnJheUBeMS4wLjAsIGlzYXJyYXlAfjEuMC4wLCBpc2FycmF5QDEuMC4wOgor
ICB2ZXJzaW9uICIxLjAuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5j
b20vaXNhcnJheS8tL2lzYXJyYXktMS4wLjAudGd6I2JiOTM1ZDQ4NTgyY2JhMTY4YzA2ODM0OTU3
YTU0YTNlMDcxMjRmMTEiCisKK2lzYXJyYXlAMC4wLjE6CisgIHZlcnNpb24gIjAuMC4xIgorICBy
ZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9pc2FycmF5Ly0vaXNhcnJheS0w
LjAuMS50Z3ojOGExOGFjZmNhOWE4ZjQxNzdlMDlhYmZjNjAzODkzOWIwNWQxZWVkZiIKKworaXNv
YmplY3RAXjIuMC4wOgorICB2ZXJzaW9uICIyLjEuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVn
aXN0cnkueWFybnBrZy5jb20vaXNvYmplY3QvLS9pc29iamVjdC0yLjEuMC50Z3ojZjA2NTU2MTA5
NmEzZjFkYTJlZjQ2MjcyZjgxNWM4NDBkODdlMGM4OSIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGlz
YXJyYXkgIjEuMC4wIgorCitpc3N0cmVhbUB+MC4xLjI6CisgIHZlcnNpb24gIjAuMS4yIgorICBy
ZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9pc3N0cmVhbS8tL2lzc3RyZWFt
LTAuMS4yLnRneiM0N2U2M2Y3YWY1NWFmYTZmOTJlMTUwMGU2OTBlYjhiODUyOWMwOTlhIgorCitq
b2RpZDI1NTE5QF4xLjAuMDoKKyAgdmVyc2lvbiAiMS4wLjIiCisgIHJlc29sdmVkICJodHRwczov
L3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2pvZGlkMjU1MTkvLS9qb2RpZDI1NTE5LTEuMC4yLnRneiMw
NmQ0OTEyMjU1MDkzNDE5NDc3ZDQyNTYzMzYwNmUwZTkwNzgyOTY3IgorICBkZXBlbmRlbmNpZXM6
CisgICAganNibiAifjAuMS4wIgorCitqcy1iYXNlNjRAXjIuMS45OgorICB2ZXJzaW9uICIyLjEu
OSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vanMtYmFzZTY0Ly0v
anMtYmFzZTY0LTIuMS45LnRneiNmMGU4MGFlMDM5YTRiZDY1NGI1ZjI4MWZjOTNmMDRhOTE0YTdm
Y2NlIgorCitqcy1iZWF1dGlmeUBeMS42LjM6CisgIHZlcnNpb24gIjEuNi40IgorICByZXNvbHZl
ZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9qcy1iZWF1dGlmeS8tL2pzLWJlYXV0aWZ5
LTEuNi40LnRneiNhOWFmNzk2OTk3NDJhYzlhMWI2ZmRkYzFmZGJjNzhiYzRkNTE1ZmMzIgorICBk
ZXBlbmRlbmNpZXM6CisgICAgY29uZmlnLWNoYWluICJ+MS4xLjUiCisgICAgZWRpdG9yY29uZmln
ICJeMC4xMy4yIgorICAgIG1rZGlycCAifjAuNS4wIgorICAgIG5vcHQgIn4zLjAuMSIKKworanMt
dG9rZW5zQF4yLjAuMDoKKyAgdmVyc2lvbiAiMi4wLjAiCisgIHJlc29sdmVkICJodHRwczovL3Jl
Z2lzdHJ5Lnlhcm5wa2cuY29tL2pzLXRva2Vucy8tL2pzLXRva2Vucy0yLjAuMC50Z3ojNzk5MDNm
NTU2M2VlNzc4Y2MxMTYyZTZkY2YxYTAwMjdjOTdmOWNiNSIKKworanMteWFtbEBeMy41LjE6Cisg
IHZlcnNpb24gIjMuNy4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNv
bS9qcy15YW1sLy0vanMteWFtbC0zLjcuMC50Z3ojNWM5NjdkZGQ4MzdhOWJmZGNhNWYyZGU4NDI1
M2FiZThhMWMwM2I4MCIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGFyZ3BhcnNlICJeMS4wLjciCisg
ICAgZXNwcmltYSAiXjIuNi4wIgorCitqcy15YW1sQH4zLjYuMToKKyAgdmVyc2lvbiAiMy42LjEi
CisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2pzLXlhbWwvLS9qcy15
YW1sLTMuNi4xLnRneiM2ZTVmZTY3ZDhiMjA1Y2U0ZDIyZmFkMDViNzc4MWU4ZGFkY2M0YjMwIgor
ICBkZXBlbmRlbmNpZXM6CisgICAgYXJncGFyc2UgIl4xLjAuNyIKKyAgICBlc3ByaW1hICJeMi42
LjAiCisKK2pzYm5AfjAuMS4wOgorICB2ZXJzaW9uICIwLjEuMCIKKyAgcmVzb2x2ZWQgImh0dHBz
Oi8vcmVnaXN0cnkueWFybnBrZy5jb20vanNibi8tL2pzYm4tMC4xLjAudGd6IzY1MDk4N2RhMGRk
NzRmNGViZjVhMTEzNzdhMmFhMmQyNzNlOTdkZmQiCisKK2pzZXNjQF4xLjMuMDoKKyAgdmVyc2lv
biAiMS4zLjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2pzZXNj
Ly0vanNlc2MtMS4zLjAudGd6IzQ2YzNmZWM4YzE4OTJiMTJiMDgzM2RiOWJjNzYyMjE3NmRiYWIz
NGIiCisKK2pzZXNjQH4wLjUuMDoKKyAgdmVyc2lvbiAiMC41LjAiCisgIHJlc29sdmVkICJodHRw
czovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2pzZXNjLy0vanNlc2MtMC41LjAudGd6I2U3ZGVlNjZl
MzVkNmZjMTZmNzEwZmU5MWQ1Y2Y2OWY3MGYwODkxMWQiCisKK2pzb24tbG9hZGVyQF4wLjUuNDoK
KyAgdmVyc2lvbiAiMC41LjQiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cu
Y29tL2pzb24tbG9hZGVyLy0vanNvbi1sb2FkZXItMC41LjQudGd6IzhiYWExMzY1YTYzMmY1OGEz
YzQ2ZDIwMTc1ZmM2MDAyYzk2ZTM3ZGUiCisKK2pzb24tc2NoZW1hQDAuMi4zOgorICB2ZXJzaW9u
ICIwLjIuMyIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vanNvbi1z
Y2hlbWEvLS9qc29uLXNjaGVtYS0wLjIuMy50Z3ojYjQ4MGM4OTJlNTlhMmYwNTk1NGNlNzI3YmQz
ZjJhNGU4ODJmOWUxMyIKKworanNvbi1zdGFibGUtc3RyaW5naWZ5QF4xLjAuMCwganNvbi1zdGFi
bGUtc3RyaW5naWZ5QF4xLjAuMToKKyAgdmVyc2lvbiAiMS4wLjEiCisgIHJlc29sdmVkICJodHRw
czovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2pzb24tc3RhYmxlLXN0cmluZ2lmeS8tL2pzb24tc3Rh
YmxlLXN0cmluZ2lmeS0xLjAuMS50Z3ojOWE3NTlkMzljNWYyZmY1MDNmZDUzMDA2NDZlZDQ0NWY4
OGM0ZjlhZiIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGpzb25pZnkgIn4wLjAuMCIKKworanNvbi1z
dHJpbmdpZnktc2FmZUB+NS4wLjE6CisgIHZlcnNpb24gIjUuMC4xIgorICByZXNvbHZlZCAiaHR0
cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9qc29uLXN0cmluZ2lmeS1zYWZlLy0vanNvbi1zdHJp
bmdpZnktc2FmZS01LjAuMS50Z3ojMTI5NmEyZDU4ZmQ0NWYxOWEwZjZjZTAxZDY1NzAxZTJjNzM1
YjZlYiIKKworanNvbjVAXjAuNS4wOgorICB2ZXJzaW9uICIwLjUuMSIKKyAgcmVzb2x2ZWQgImh0
dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vanNvbjUvLS9qc29uNS0wLjUuMS50Z3ojMWVhZGU3
YWNjMDEyMDM0YWQ4NGUyMzk2NzY3ZWFkOWZhNTQ5NTgyMSIKKworanNvbmlmeUB+MC4wLjA6Cisg
IHZlcnNpb24gIjAuMC4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNv
bS9qc29uaWZ5Ly0vanNvbmlmeS0wLjAuMC50Z3ojMmM3NGI2ZWU0MWQ5M2NhNTFiN2I1YWFlZThm
NTAzNjMxZDI1MmE3MyIKKworanNvbnBvaW50ZXJAXjQuMC4wOgorICB2ZXJzaW9uICI0LjAuMCIK
KyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vanNvbnBvaW50ZXIvLS9q
c29ucG9pbnRlci00LjAuMC50Z3ojNjY2MWUxNjFkMmZjNDQ1ZjE5Zjk4NDMwMjMxMzQzNzIyZTFm
Y2JkNSIKKworanNwcmltQF4xLjIuMjoKKyAgdmVyc2lvbiAiMS4zLjEiCisgIHJlc29sdmVkICJo
dHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2pzcHJpbS8tL2pzcHJpbS0xLjMuMS50Z3ojMmE3
MjU2ZjcwNDEyYTI5ZWUzNjcwYWFjYTYyNTk5NGM0ZGNmZjI1MiIKKyAgZGVwZW5kZW5jaWVzOgor
ICAgIGV4dHNwcmludGYgIjEuMC4yIgorICAgIGpzb24tc2NoZW1hICIwLjIuMyIKKyAgICB2ZXJy
b3IgIjEuMy42IgorCitraW5kLW9mQF4zLjAuMjoKKyAgdmVyc2lvbiAiMy4xLjAiCisgIHJlc29s
dmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2tpbmQtb2YvLS9raW5kLW9mLTMuMS4w
LnRneiM0NzVkNjk4YTVlNDlmZjVlNTNkMTRlM2U3MzI0MjlkYzhiZjRjZjQ3IgorICBkZXBlbmRl
bmNpZXM6CisgICAgaXMtYnVmZmVyICJeMS4wLjIiCisKK2xhenktY2FjaGVAXjEuMC4zOgorICB2
ZXJzaW9uICIxLjAuNCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20v
bGF6eS1jYWNoZS8tL2xhenktY2FjaGUtMS4wLjQudGd6I2ExZDc4ZmMzYTUwNDc0Y2I4MDg0NWQz
YjNiNmUxZGE0OWE0NDZlOGUiCisKK2xldm5AXjAuMy4wLCBsZXZuQH4wLjMuMDoKKyAgdmVyc2lv
biAiMC4zLjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2xldm4v
LS9sZXZuLTAuMy4wLnRneiMzYjA5OTI0ZWRmOWYwODNjMDQ5MGZkZDRjMGJjNDQyMWUwNDc2NGVl
IgorICBkZXBlbmRlbmNpZXM6CisgICAgcHJlbHVkZS1scyAifjEuMS4yIgorICAgIHR5cGUtY2hl
Y2sgIn4wLjMuMiIKKworbG9hZGVyLXV0aWxzQF4wLjIuMTAsIGxvYWRlci11dGlsc0BeMC4yLjEx
LCBsb2FkZXItdXRpbHNAXjAuMi4xNiwgbG9hZGVyLXV0aWxzQF4wLjIuMywgbG9hZGVyLXV0aWxz
QF4wLjIuNywgbG9hZGVyLXV0aWxzQH4wLjIuMiwgbG9hZGVyLXV0aWxzQH4wLjIuNSwgbG9hZGVy
LXV0aWxzQDAuMi54OgorICB2ZXJzaW9uICIwLjIuMTYiCisgIHJlc29sdmVkICJodHRwczovL3Jl
Z2lzdHJ5Lnlhcm5wa2cuY29tL2xvYWRlci11dGlscy8tL2xvYWRlci11dGlscy0wLjIuMTYudGd6
I2YwODYzMjA2NmVkODI4MjgzNWRmZjg4ZGZiNTI3MDQ3NjVhZGVlNmQiCisgIGRlcGVuZGVuY2ll
czoKKyAgICBiaWcuanMgIl4zLjEuMyIKKyAgICBlbW9qaXMtbGlzdCAiXjIuMC4wIgorICAgIGpz
b241ICJeMC41LjAiCisgICAgb2JqZWN0LWFzc2lnbiAiXjQuMC4xIgorCitsb2Rhc2guX2FycmF5
Y29weUBeMy4wLjA6CisgIHZlcnNpb24gIjMuMC4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdp
c3RyeS55YXJucGtnLmNvbS9sb2Rhc2guX2FycmF5Y29weS8tL2xvZGFzaC5fYXJyYXljb3B5LTMu
MC4wLnRneiM3NmU3YjdjMWYxZmI5MjU0NzM3NDg3OGE1NjJlZDA2YTNlNTBmNmUxIgorCitsb2Rh
c2guX2FycmF5ZWFjaEBeMy4wLjA6CisgIHZlcnNpb24gIjMuMC4wIgorICByZXNvbHZlZCAiaHR0
cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9sb2Rhc2guX2FycmF5ZWFjaC8tL2xvZGFzaC5fYXJy
YXllYWNoLTMuMC4wLnRneiNiYWIxNTZiMmE5MGQzZjFiYmQ1YzY1MzQwMzM0OWU1ZTU5MzNlZjll
IgorCitsb2Rhc2guX2Jhc2VjYWxsYmFja0BeMy4wLjA6CisgIHZlcnNpb24gIjMuMy4xIgorICBy
ZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9sb2Rhc2guX2Jhc2VjYWxsYmFj
ay8tL2xvZGFzaC5fYmFzZWNhbGxiYWNrLTMuMy4xLnRneiNiN2IyYmI0M2RjMjE2MDQyNGEyMWNj
ZjI2YzU3ZTQ0Mzc3MmE4ZTI3IgorICBkZXBlbmRlbmNpZXM6CisgICAgbG9kYXNoLl9iYXNlaXNl
cXVhbCAiXjMuMC4wIgorICAgIGxvZGFzaC5fYmluZGNhbGxiYWNrICJeMy4wLjAiCisgICAgbG9k
YXNoLmlzYXJyYXkgIl4zLjAuMCIKKyAgICBsb2Rhc2gucGFpcnMgIl4zLjAuMCIKKworbG9kYXNo
Ll9iYXNlY29weUBeMy4wLjA6CisgIHZlcnNpb24gIjMuMC4xIgorICByZXNvbHZlZCAiaHR0cHM6
Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9sb2Rhc2guX2Jhc2Vjb3B5Ly0vbG9kYXNoLl9iYXNlY29w
eS0zLjAuMS50Z3ojOGRhMGU2YTg3NmNmMzQ0YzBhZDhhNTQ4ODIxMTFkZDNjNWM3Y2EzNiIKKwor
bG9kYXNoLl9iYXNlZWFjaEBeMy4wLjA6CisgIHZlcnNpb24gIjMuMC40IgorICByZXNvbHZlZCAi
aHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9sb2Rhc2guX2Jhc2VlYWNoLy0vbG9kYXNoLl9i
YXNlZWFjaC0zLjAuNC50Z3ojY2Y4NzA2NTcyY2ExNDRlOGQ5ZDc1MjI3Yzk5MGRhOTgyZjkzMmFm
MyIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGxvZGFzaC5rZXlzICJeMy4wLjAiCisKK2xvZGFzaC5f
YmFzZWZpbmRAXjMuMC4wOgorICB2ZXJzaW9uICIzLjAuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8v
cmVnaXN0cnkueWFybnBrZy5jb20vbG9kYXNoLl9iYXNlZmluZC8tL2xvZGFzaC5fYmFzZWZpbmQt
My4wLjAudGd6I2IyYmJhMDVjYzY0NWY5NzJkZTJjZjkyNWZhMmJmNjNhMGY2MGM4YWUiCisKK2xv
ZGFzaC5fYmFzZWZpbmRpbmRleEBeMy4wLjA6CisgIHZlcnNpb24gIjMuNi4wIgorICByZXNvbHZl
ZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9sb2Rhc2guX2Jhc2VmaW5kaW5kZXgvLS9s
b2Rhc2guX2Jhc2VmaW5kaW5kZXgtMy42LjAudGd6I2YwODMzNjBhMWIwMjI0MThlZDgxYmM4OTli
ZWIzMTJlMjFlNzRhNGYiCisKK2xvZGFzaC5fYmFzZWZvckBeMy4wLjA6CisgIHZlcnNpb24gIjMu
MC4zIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9sb2Rhc2guX2Jh
c2Vmb3IvLS9sb2Rhc2guX2Jhc2Vmb3ItMy4wLjMudGd6Izc1NTBiNGU5MjE4ZWYwOWZhZDI0MzQz
YjYxMjAyMWM3OWI0YzIwYzIiCisKK2xvZGFzaC5fYmFzZWlzZXF1YWxAXjMuMC4wOgorICB2ZXJz
aW9uICIzLjAuNyIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vbG9k
YXNoLl9iYXNlaXNlcXVhbC8tL2xvZGFzaC5fYmFzZWlzZXF1YWwtMy4wLjcudGd6I2Q4MDI1Zjc2
MzM5ZDI5MzQyNzY3ZGNjODg3Y2U1Y2I5NWE1YjUxZjEiCisgIGRlcGVuZGVuY2llczoKKyAgICBs
b2Rhc2guaXNhcnJheSAiXjMuMC4wIgorICAgIGxvZGFzaC5pc3R5cGVkYXJyYXkgIl4zLjAuMCIK
KyAgICBsb2Rhc2gua2V5cyAiXjMuMC4wIgorCitsb2Rhc2guX2JpbmRjYWxsYmFja0BeMy4wLjA6
CisgIHZlcnNpb24gIjMuMC4xIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtn
LmNvbS9sb2Rhc2guX2JpbmRjYWxsYmFjay8tL2xvZGFzaC5fYmluZGNhbGxiYWNrLTMuMC4xLnRn
eiNlNTMxYzI3NjQ0Y2Y4YjU3YTk5ZTE3ZWQ5NWIzNWM3NDg3ODkzOTJlIgorCitsb2Rhc2guX2Ny
ZWF0ZWFzc2lnbmVyQF4zLjAuMDoKKyAgdmVyc2lvbiAiMy4xLjEiCisgIHJlc29sdmVkICJodHRw
czovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2xvZGFzaC5fY3JlYXRlYXNzaWduZXIvLS9sb2Rhc2gu
X2NyZWF0ZWFzc2lnbmVyLTMuMS4xLnRneiM4MzhhNWJhZTJmZGFjYTYzYWMyMmRlZThlMTlmYTRl
NmQ2OTcwYjExIgorICBkZXBlbmRlbmNpZXM6CisgICAgbG9kYXNoLl9iaW5kY2FsbGJhY2sgIl4z
LjAuMCIKKyAgICBsb2Rhc2guX2lzaXRlcmF0ZWVjYWxsICJeMy4wLjAiCisgICAgbG9kYXNoLnJl
c3RwYXJhbSAiXjMuMC4wIgorCitsb2Rhc2guX2NyZWF0ZWNvbXBvdW5kZXJAXjMuMC4wOgorICB2
ZXJzaW9uICIzLjAuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20v
bG9kYXNoLl9jcmVhdGVjb21wb3VuZGVyLy0vbG9kYXNoLl9jcmVhdGVjb21wb3VuZGVyLTMuMC4w
LnRneiM1ZGQyY2I1NTM3MmQ2ZTcwZTBlMjM5MmZiMjMwNGQ2NjMxMDkxMDc1IgorICBkZXBlbmRl
bmNpZXM6CisgICAgbG9kYXNoLmRlYnVyciAiXjMuMC4wIgorICAgIGxvZGFzaC53b3JkcyAiXjMu
MC4wIgorCitsb2Rhc2guX2dldG5hdGl2ZUBeMy4wLjA6CisgIHZlcnNpb24gIjMuOS4xIgorICBy
ZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9sb2Rhc2guX2dldG5hdGl2ZS8t
L2xvZGFzaC5fZ2V0bmF0aXZlLTMuOS4xLnRneiM1NzBiYzdkZWRlNDZkNjFjZGNkZTY4N2Q2NWQz
ZWVjYmFhM2FhZmY1IgorCitsb2Rhc2guX2lzaXRlcmF0ZWVjYWxsQF4zLjAuMDoKKyAgdmVyc2lv
biAiMy4wLjkiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2xvZGFz
aC5faXNpdGVyYXRlZWNhbGwvLS9sb2Rhc2guX2lzaXRlcmF0ZWVjYWxsLTMuMC45LnRneiM1MjAz
YWQ3YmE0MjVmYWU4NDI0NjBlNjk2ZGI5Y2YzZTZhYWMwNTdjIgorCitsb2Rhc2guX3Jvb3RAXjMu
MC4wOgorICB2ZXJzaW9uICIzLjAuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFy
bnBrZy5jb20vbG9kYXNoLl9yb290Ly0vbG9kYXNoLl9yb290LTMuMC4xLnRneiNmYmExYzQ1MjRj
MTllZTlhNWY4MTM2YjQ2MDlmMDE3Y2Y0ZGVkNjkyIgorCitsb2Rhc2guY2FtZWxjYXNlQF4zLjAu
MToKKyAgdmVyc2lvbiAiMy4wLjEiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5w
a2cuY29tL2xvZGFzaC5jYW1lbGNhc2UvLS9sb2Rhc2guY2FtZWxjYXNlLTMuMC4xLnRneiM5MzJj
OGI4N2Y4YTQzNzc4OTdjNjcxOTc1MzMyODJmOTdhZWFjMjk4IgorICBkZXBlbmRlbmNpZXM6Cisg
ICAgbG9kYXNoLl9jcmVhdGVjb21wb3VuZGVyICJeMy4wLjAiCisKK2xvZGFzaC5kZWJ1cnJAXjMu
MC4wOgorICB2ZXJzaW9uICIzLjIuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFy
bnBrZy5jb20vbG9kYXNoLmRlYnVyci8tL2xvZGFzaC5kZWJ1cnItMy4yLjAudGd6IzZkYThmNTQz
MzRhMzY2YTdjZjRjNGM3NmVmOGQ4MGFhMWIzNjVlZDUiCisgIGRlcGVuZGVuY2llczoKKyAgICBs
b2Rhc2guX3Jvb3QgIl4zLjAuMCIKKworbG9kYXNoLmZpbmRAXjMuMi4xOgorICB2ZXJzaW9uICIz
LjIuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vbG9kYXNoLmZp
bmQvLS9sb2Rhc2guZmluZC0zLjIuMS50Z3ojMDQ2ZTMxOWYzYWNlOTEyYWM2YzkyNDZjN2Y2ODNj
NWVjMDdiMzZhZCIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGxvZGFzaC5fYmFzZWNhbGxiYWNrICJe
My4wLjAiCisgICAgbG9kYXNoLl9iYXNlZWFjaCAiXjMuMC4wIgorICAgIGxvZGFzaC5fYmFzZWZp
bmQgIl4zLjAuMCIKKyAgICBsb2Rhc2guX2Jhc2VmaW5kaW5kZXggIl4zLjAuMCIKKyAgICBsb2Rh
c2guaXNhcnJheSAiXjMuMC4wIgorICAgIGxvZGFzaC5rZXlzICJeMy4wLjAiCisKK2xvZGFzaC5p
bmRleG9mQF40LjAuNToKKyAgdmVyc2lvbiAiNC4wLjUiCisgIHJlc29sdmVkICJodHRwczovL3Jl
Z2lzdHJ5Lnlhcm5wa2cuY29tL2xvZGFzaC5pbmRleG9mLy0vbG9kYXNoLmluZGV4b2YtNC4wLjUu
dGd6IzUzNzE0YWRjMmNkZGQ2ZWQ4NzYzOGY4OTNhYTliNmMyNGUzMWVmM2MiCisKK2xvZGFzaC5p
c2FyZ3VtZW50c0BeMy4wLjA6CisgIHZlcnNpb24gIjMuMS4wIgorICByZXNvbHZlZCAiaHR0cHM6
Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9sb2Rhc2guaXNhcmd1bWVudHMvLS9sb2Rhc2guaXNhcmd1
bWVudHMtMy4xLjAudGd6IzJmNTczZDg1YzZhMjQyODlmZjAwNjYzYjQ5MWMxZDMzOGZmMzQ1OGEi
CisKK2xvZGFzaC5pc2FycmF5QF4zLjAuMDoKKyAgdmVyc2lvbiAiMy4wLjQiCisgIHJlc29sdmVk
ICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2xvZGFzaC5pc2FycmF5Ly0vbG9kYXNoLmlz
YXJyYXktMy4wLjQudGd6Izc5ZTRlYjg4YzM2YTgxMjJhZjg2Zjg0NGFhOWJjZDg1MWI1ZmJiNTUi
CisKK2xvZGFzaC5pc2VxdWFsQF40LjIuMDoKKyAgdmVyc2lvbiAiNC40LjAiCisgIHJlc29sdmVk
ICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2xvZGFzaC5pc2VxdWFsLy0vbG9kYXNoLmlz
ZXF1YWwtNC40LjAudGd6IzYyOTU3NjhlOThlMTRkYzE1Y2U4ZDM2MmVmNjM0MGRiODI4NTIwMzEi
CisKK2xvZGFzaC5pc3BsYWlub2JqZWN0QF4zLjAuMCwgbG9kYXNoLmlzcGxhaW5vYmplY3RAXjMu
Mi4wOgorICB2ZXJzaW9uICIzLjIuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFy
bnBrZy5jb20vbG9kYXNoLmlzcGxhaW5vYmplY3QvLS9sb2Rhc2guaXNwbGFpbm9iamVjdC0zLjIu
MC50Z3ojOWE4MjM4YWUxNmIyMDA0MzI5NjBjZDczNDY1MTJkMDEyM2ZiZjRjNSIKKyAgZGVwZW5k
ZW5jaWVzOgorICAgIGxvZGFzaC5fYmFzZWZvciAiXjMuMC4wIgorICAgIGxvZGFzaC5pc2FyZ3Vt
ZW50cyAiXjMuMC4wIgorICAgIGxvZGFzaC5rZXlzaW4gIl4zLjAuMCIKKworbG9kYXNoLmlzdHlw
ZWRhcnJheUBeMy4wLjA6CisgIHZlcnNpb24gIjMuMC42IgorICByZXNvbHZlZCAiaHR0cHM6Ly9y
ZWdpc3RyeS55YXJucGtnLmNvbS9sb2Rhc2guaXN0eXBlZGFycmF5Ly0vbG9kYXNoLmlzdHlwZWRh
cnJheS0zLjAuNi50Z3ojYzlhNDc3NDk4NjA3NTAxZDhlODQ5NGQyODNiODdjMzkyODFjZWY2MiIK
KworbG9kYXNoLmtleXNAXjMuMC4wOgorICB2ZXJzaW9uICIzLjEuMiIKKyAgcmVzb2x2ZWQgImh0
dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vbG9kYXNoLmtleXMvLS9sb2Rhc2gua2V5cy0zLjEu
Mi50Z3ojNGRiYzA0NzJiMTU2YmU1MGEwYjI4Njg1NWQxYmQwYjBjNjU2MDk4YSIKKyAgZGVwZW5k
ZW5jaWVzOgorICAgIGxvZGFzaC5fZ2V0bmF0aXZlICJeMy4wLjAiCisgICAgbG9kYXNoLmlzYXJn
dW1lbnRzICJeMy4wLjAiCisgICAgbG9kYXNoLmlzYXJyYXkgIl4zLjAuMCIKKworbG9kYXNoLmtl
eXNpbkBeMy4wLjA6CisgIHZlcnNpb24gIjMuMC44IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdp
c3RyeS55YXJucGtnLmNvbS9sb2Rhc2gua2V5c2luLy0vbG9kYXNoLmtleXNpbi0zLjAuOC50Z3oj
MjJjNDQ5M2ViYmVkYjE0Mjc5NjJhNTRiNDQ1YjJjOGE3NjdmYjQ3ZiIKKyAgZGVwZW5kZW5jaWVz
OgorICAgIGxvZGFzaC5pc2FyZ3VtZW50cyAiXjMuMC4wIgorICAgIGxvZGFzaC5pc2FycmF5ICJe
My4wLjAiCisKK2xvZGFzaC5tZXJnZUBeMy4zLjI6CisgIHZlcnNpb24gIjMuMy4yIgorICByZXNv
bHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9sb2Rhc2gubWVyZ2UvLS9sb2Rhc2gu
bWVyZ2UtMy4zLjIudGd6IzBkOTBkOTNlZDYzN2IxODc4NDM3YmIzZTIxNjAxMjYwZDdhZmU5OTQi
CisgIGRlcGVuZGVuY2llczoKKyAgICBsb2Rhc2guX2FycmF5Y29weSAiXjMuMC4wIgorICAgIGxv
ZGFzaC5fYXJyYXllYWNoICJeMy4wLjAiCisgICAgbG9kYXNoLl9jcmVhdGVhc3NpZ25lciAiXjMu
MC4wIgorICAgIGxvZGFzaC5fZ2V0bmF0aXZlICJeMy4wLjAiCisgICAgbG9kYXNoLmlzYXJndW1l
bnRzICJeMy4wLjAiCisgICAgbG9kYXNoLmlzYXJyYXkgIl4zLjAuMCIKKyAgICBsb2Rhc2guaXNw
bGFpbm9iamVjdCAiXjMuMC4wIgorICAgIGxvZGFzaC5pc3R5cGVkYXJyYXkgIl4zLjAuMCIKKyAg
ICBsb2Rhc2gua2V5cyAiXjMuMC4wIgorICAgIGxvZGFzaC5rZXlzaW4gIl4zLjAuMCIKKyAgICBs
b2Rhc2gudG9wbGFpbm9iamVjdCAiXjMuMC4wIgorCitsb2Rhc2gucGFpcnNAXjMuMC4wOgorICB2
ZXJzaW9uICIzLjAuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20v
bG9kYXNoLnBhaXJzLy0vbG9kYXNoLnBhaXJzLTMuMC4xLnRneiNiYmUwOGQ1Nzg2ZWVlYWEwOWEx
NWM5MWViZjBkY2I3ZDJiZTMyNmE5IgorICBkZXBlbmRlbmNpZXM6CisgICAgbG9kYXNoLmtleXMg
Il4zLjAuMCIKKworbG9kYXNoLnBpY2tieUBeNC42LjA6CisgIHZlcnNpb24gIjQuNi4wIgorICBy
ZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9sb2Rhc2gucGlja2J5Ly0vbG9k
YXNoLnBpY2tieS00LjYuMC50Z3ojN2RlYTIxZDhjMThkNzcwM2EyN2M3MDRjMTVkM2I4NGE2N2Uz
M2FmZiIKKworbG9kYXNoLnJlc3RwYXJhbUBeMy4wLjA6CisgIHZlcnNpb24gIjMuNi4xIgorICBy
ZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9sb2Rhc2gucmVzdHBhcmFtLy0v
bG9kYXNoLnJlc3RwYXJhbS0zLjYuMS50Z3ojOTM2YTRlMzA5ZWYzMzBhNzY0NWVkNDE0NTk4NmM4
NWFlNWIyMDgwNSIKKworbG9kYXNoLnRvcGxhaW5vYmplY3RAXjMuMC4wOgorICB2ZXJzaW9uICIz
LjAuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vbG9kYXNoLnRv
cGxhaW5vYmplY3QvLS9sb2Rhc2gudG9wbGFpbm9iamVjdC0zLjAuMC50Z3ojMjg3OTBhZDk0MmQy
OTNkNzhhYTY2M2EwN2VjZjdmNTJjYTA0MTk4ZCIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGxvZGFz
aC5fYmFzZWNvcHkgIl4zLjAuMCIKKyAgICBsb2Rhc2gua2V5c2luICJeMy4wLjAiCisKK2xvZGFz
aC53b3Jkc0BeMy4wLjA6CisgIHZlcnNpb24gIjMuMi4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9y
ZWdpc3RyeS55YXJucGtnLmNvbS9sb2Rhc2gud29yZHMvLS9sb2Rhc2gud29yZHMtMy4yLjAudGd6
IzRlMmE4NjQ5YmMwODc0NWIxN2M2OTViMWEzY2U4ZmVlNTk2NjIzYjMiCisgIGRlcGVuZGVuY2ll
czoKKyAgICBsb2Rhc2guX3Jvb3QgIl4zLjAuMCIKKworbG9kYXNoQF40LjAuMCwgbG9kYXNoQF40
LjE2LjQsIGxvZGFzaEBeNC4xNy4yLCBsb2Rhc2hAXjQuMi4wLCBsb2Rhc2hAXjQuMy4wOgorICB2
ZXJzaW9uICI0LjE3LjIiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29t
L2xvZGFzaC8tL2xvZGFzaC00LjE3LjIudGd6IzM0YTMwNTViYWJlMDRjZTQyNDY3YjYwN2Q3MDAw
NzJjN2ZmNmJmNDIiCisKK2xvZy1zeW1ib2xzQF4xLjAuMjoKKyAgdmVyc2lvbiAiMS4wLjIiCisg
IHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2xvZy1zeW1ib2xzLy0vbG9n
LXN5bWJvbHMtMS4wLjIudGd6IzM3NmZmN2I1OGVhMzA4NmEwZjA5ZmFjYzc0NjE3ZWNhNTAxZTFh
MTgiCisgIGRlcGVuZGVuY2llczoKKyAgICBjaGFsayAiXjEuMC4wIgorCitsb25nZXN0QF4xLjAu
MToKKyAgdmVyc2lvbiAiMS4wLjEiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5w
a2cuY29tL2xvbmdlc3QvLS9sb25nZXN0LTEuMC4xLnRneiMzMGEwYjJkYTM4ZjczNzcwZTgyOTRh
MGQyMmU2NjI1ZWQ3N2QwMDk3IgorCitsb29zZS1lbnZpZnlAXjEuMC4wOgorICB2ZXJzaW9uICIx
LjMuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vbG9vc2UtZW52
aWZ5Ly0vbG9vc2UtZW52aWZ5LTEuMy4wLnRneiM2YjI2MjQ4YzQyZjZkNGZhNGIwZDg1NDJmNzhl
ZGZjZGUzNTY0MmE4IgorICBkZXBlbmRlbmNpZXM6CisgICAganMtdG9rZW5zICJeMi4wLjAiCisK
K2xvd2VyLWNhc2VAXjEuMS4xOgorICB2ZXJzaW9uICIxLjEuMyIKKyAgcmVzb2x2ZWQgImh0dHBz
Oi8vcmVnaXN0cnkueWFybnBrZy5jb20vbG93ZXItY2FzZS8tL2xvd2VyLWNhc2UtMS4xLjMudGd6
I2M5MjM5M2Q5NzY3OTNlZWU1YmE0ZWRiNTgzY2Y4ZWFlMzViZDliZmIiCisKK2xydS1jYWNoZUBe
My4yLjA6CisgIHZlcnNpb24gIjMuMi4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55
YXJucGtnLmNvbS9scnUtY2FjaGUvLS9scnUtY2FjaGUtMy4yLjAudGd6IzcxNzg5YjNiN2Y1Mzk5
YmVjODU2NWRkYTM4YWEzMGQyYTA5N2VmZWUiCisgIGRlcGVuZGVuY2llczoKKyAgICBwc2V1ZG9t
YXAgIl4xLjAuMSIKKworbHJ1LWNhY2hlQF40LjAuMToKKyAgdmVyc2lvbiAiNC4wLjIiCisgIHJl
c29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2xydS1jYWNoZS8tL2xydS1jYWNo
ZS00LjAuMi50Z3ojMWQxNzY3OWMwNjljZGE1ZDA0MDk5MWEwOWRiYzJjMGRiMzc3ZTU1ZSIKKyAg
ZGVwZW5kZW5jaWVzOgorICAgIHBzZXVkb21hcCAiXjEuMC4xIgorICAgIHlhbGxpc3QgIl4yLjAu
MCIKKworbWFjYWRkcmVzc0BeMC4yLjg6CisgIHZlcnNpb24gIjAuMi44IgorICByZXNvbHZlZCAi
aHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9tYWNhZGRyZXNzLy0vbWFjYWRkcmVzcy0wLjIu
OC50Z3ojNTkwNGRjNTM3YzM5ZWM2ZGJlZmVhZTkwMjMyNzEzNWZhODUxMWYxMiIKKworbWF0aC1l
eHByZXNzaW9uLWV2YWx1YXRvckBeMS4yLjE0OgorICB2ZXJzaW9uICIxLjIuMTQiCisgIHJlc29s
dmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL21hdGgtZXhwcmVzc2lvbi1ldmFsdWF0
b3IvLS9tYXRoLWV4cHJlc3Npb24tZXZhbHVhdG9yLTEuMi4xNC50Z3ojMzk1MTE3NzFlZDk2MDI0
MDVmYmE5YWZmZmYxN2ViNGQyYTM4NDNhYiIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGxvZGFzaC5p
bmRleG9mICJeNC4wLjUiCisKK21lZGlhLXR5cGVyQDAuMy4wOgorICB2ZXJzaW9uICIwLjMuMCIK
KyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vbWVkaWEtdHlwZXIvLS9t
ZWRpYS10eXBlci0wLjMuMC50Z3ojODcxMGQ3YWYwYWE2MjZmOGZmZmExY2UwMDE2ODU0NTI2MzI1
NTc0OCIKKworbWVtb3J5LWZzQF4wLjIuMDoKKyAgdmVyc2lvbiAiMC4yLjAiCisgIHJlc29sdmVk
ICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL21lbW9yeS1mcy8tL21lbW9yeS1mcy0wLjIu
MC50Z3ojZjJiYjI1MzY4YmMxMjFlMzkxYzI1MjBkZTkyOTY5Y2FlZTBhMDI5MCIKKworbWVtb3J5
LWZzQH4wLjMuMDoKKyAgdmVyc2lvbiAiMC4zLjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lz
dHJ5Lnlhcm5wa2cuY29tL21lbW9yeS1mcy8tL21lbW9yeS1mcy0wLjMuMC50Z3ojN2JjYzZiNjI5
ZTNhNDNlODcxZDdlMjlhY2E2YWU4YTdmMTVjYmIyMCIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGVy
cm5vICJeMC4xLjMiCisgICAgcmVhZGFibGUtc3RyZWFtICJeMi4wLjEiCisKK21lcmdlLWRlc2Ny
aXB0b3JzQDEuMC4xOgorICB2ZXJzaW9uICIxLjAuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVn
aXN0cnkueWFybnBrZy5jb20vbWVyZ2UtZGVzY3JpcHRvcnMvLS9tZXJnZS1kZXNjcmlwdG9ycy0x
LjAuMS50Z3ojYjAwYWFhNTU2ZGQ4YjQ0NTY4MTUwZWM5ZDFiOTUzZjNmOTBjYmI2MSIKKworbWV0
aG9kc0B+MS4xLjI6CisgIHZlcnNpb24gIjEuMS4yIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdp
c3RyeS55YXJucGtnLmNvbS9tZXRob2RzLy0vbWV0aG9kcy0xLjEuMi50Z3ojNTUyOWE0ZDY3NjU0
MTM0ZWRjYzUyNjY2NTY4MzViMGY4NTFhZmNlZSIKKworbWljcm9tYXRjaEBeMi4xLjUsIG1pY3Jv
bWF0Y2hAXjIuMy4xMToKKyAgdmVyc2lvbiAiMi4zLjExIgorICByZXNvbHZlZCAiaHR0cHM6Ly9y
ZWdpc3RyeS55YXJucGtnLmNvbS9taWNyb21hdGNoLy0vbWljcm9tYXRjaC0yLjMuMTEudGd6Izg2
Njc3Yzk3ZDE3MjBiMzYzNDMxZDA0ZDBkMTUyOTNiZDM4YzE1NjUiCisgIGRlcGVuZGVuY2llczoK
KyAgICBhcnItZGlmZiAiXjIuMC4wIgorICAgIGFycmF5LXVuaXF1ZSAiXjAuMi4xIgorICAgIGJy
YWNlcyAiXjEuOC4yIgorICAgIGV4cGFuZC1icmFja2V0cyAiXjAuMS40IgorICAgIGV4dGdsb2Ig
Il4wLjMuMSIKKyAgICBmaWxlbmFtZS1yZWdleCAiXjIuMC4wIgorICAgIGlzLWV4dGdsb2IgIl4x
LjAuMCIKKyAgICBpcy1nbG9iICJeMi4wLjEiCisgICAga2luZC1vZiAiXjMuMC4yIgorICAgIG5v
cm1hbGl6ZS1wYXRoICJeMi4wLjEiCisgICAgb2JqZWN0Lm9taXQgIl4yLjAuMCIKKyAgICBwYXJz
ZS1nbG9iICJeMy4wLjQiCisgICAgcmVnZXgtY2FjaGUgIl4wLjQuMiIKKworbWltZS1kYkB+MS4y
NS4wOgorICB2ZXJzaW9uICIxLjI1LjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlh
cm5wa2cuY29tL21pbWUtZGIvLS9taW1lLWRiLTEuMjUuMC50Z3ojYzE4ZGJkN2M3M2E1ZGJmNmY0
NGEwMjRkYzBkMTY1YTFlN2IxYzM5MiIKKworbWltZS10eXBlc0BeMi4xLjEyLCBtaW1lLXR5cGVz
QH4yLjEuMTEsIG1pbWUtdHlwZXNAfjIuMS4xMywgbWltZS10eXBlc0B+Mi4xLjc6CisgIHZlcnNp
b24gIjIuMS4xMyIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vbWlt
ZS10eXBlcy8tL21pbWUtdHlwZXMtMi4xLjEzLnRneiNlMDdhYWE5YzZjNmI5YTdjYTMwMTJjNjkw
MDNhZDI1YTM5ZTkyYTg4IgorICBkZXBlbmRlbmNpZXM6CisgICAgbWltZS1kYiAifjEuMjUuMCIK
KworbWltZUBeMS4zLjQsIG1pbWVAMS4zLjQ6CisgIHZlcnNpb24gIjEuMy40IgorICByZXNvbHZl
ZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9taW1lLy0vbWltZS0xLjMuNC50Z3ojMTE1
ZjllM2I2YjNkYWYyOTU5OTgzY2IzOGYxNDlhMmQ0MGViNWQ1MyIKKworbWltZUAxLjIueDoKKyAg
dmVyc2lvbiAiMS4yLjExIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNv
bS9taW1lLy0vbWltZS0xLjIuMTEudGd6IzU4MjAzZWVkODZlM2E1ZWYxN2FlZDJiN2Q5ZWJkNDdm
MGE2MGRkMTAiCisKK21pbmltYXRjaEBeMy4wLjAsIG1pbmltYXRjaEBeMy4wLjI6CisgIHZlcnNp
b24gIjMuMC4zIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9taW5p
bWF0Y2gvLS9taW5pbWF0Y2gtMy4wLjMudGd6IzJhNGU0MDkwYjk2YjJkYjA2YTlkN2RmMDEwNTVh
NjJhNzdjOWI3NzQiCisgIGRlcGVuZGVuY2llczoKKyAgICBicmFjZS1leHBhbnNpb24gIl4xLjAu
MCIKKworbWluaW1pc3RAXjEuMi4wOgorICB2ZXJzaW9uICIxLjIuMCIKKyAgcmVzb2x2ZWQgImh0
dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vbWluaW1pc3QvLS9taW5pbWlzdC0xLjIuMC50Z3oj
YTM1MDA4YjIwZjQxMzgzZWVjMWZiOTE0ZjRjZDVkZjc5YTI2NDI4NCIKKworbWluaW1pc3RAfjAu
MC4xOgorICB2ZXJzaW9uICIwLjAuMTAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlh
cm5wa2cuY29tL21pbmltaXN0Ly0vbWluaW1pc3QtMC4wLjEwLnRneiNkZTNmOTg1NDNkYmY5NjA4
MmJlNDhhZDFhMGM3Y2RhODM2MzAxZGNmIgorCittaW5pbWlzdEAwLjAuODoKKyAgdmVyc2lvbiAi
MC4wLjgiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL21pbmltaXN0
Ly0vbWluaW1pc3QtMC4wLjgudGd6Izg1N2ZjYWJmYzMzOTdkMjYyNWI4MjI4MjYyZTg2YWE3YTAx
MWIwNWQiCisKK21rZGlycEBeMC41LjAsIG1rZGlycEBeMC41LjEsICJta2RpcnBAPj0wLjUgMCIs
IG1rZGlycEB+MC41LjAsIG1rZGlycEB+MC41LjE6CisgIHZlcnNpb24gIjAuNS4xIgorICByZXNv
bHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9ta2RpcnAvLS9ta2RpcnAtMC41LjEu
dGd6IzMwMDU3NDM4ZWFjNmNmN2Y4YzQ3NjdmMzg2NDhkNjY5N2Q3NWM5MDMiCisgIGRlcGVuZGVu
Y2llczoKKyAgICBtaW5pbWlzdCAiMC4wLjgiCisKK21zQDAuNy4xOgorICB2ZXJzaW9uICIwLjcu
MSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vbXMvLS9tcy0wLjcu
MS50Z3ojOWNkMTNjMDNhZGJmZjI1YjY1ZWZmZGU3Y2U4NjRlZTk1MjAxNzA5OCIKKworbXNAMC43
LjI6CisgIHZlcnNpb24gIjAuNy4yIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJu
cGtnLmNvbS9tcy8tL21zLTAuNy4yLnRneiNhZTI1Y2YyNTEyYjM4ODVhMWQ5NWQ3ZjAzNzg2OGQ4
NDMxMTI0NzY1IgorCittdXRlLXN0cmVhbUAwLjAuNToKKyAgdmVyc2lvbiAiMC4wLjUiCisgIHJl
c29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL211dGUtc3RyZWFtLy0vbXV0ZS1z
dHJlYW0tMC4wLjUudGd6IzhmYmZhYmIwYTk4YTI1M2QzMTg0MzMxZjllOGRlYjczNzJmYWM2YzAi
CisKK25hbkBeMi4zLjA6CisgIHZlcnNpb24gIjIuNC4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9y
ZWdpc3RyeS55YXJucGtnLmNvbS9uYW4vLS9uYW4tMi40LjAudGd6I2ZiM2M1OWQ0NWZlNGVmZmUy
MTVmMGI4OTBmOGFkZjZlYjMyZDIyMzIiCisKK25hdHVyYWwtY29tcGFyZUBeMS40LjA6CisgIHZl
cnNpb24gIjEuNC4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9u
YXR1cmFsLWNvbXBhcmUvLS9uYXR1cmFsLWNvbXBhcmUtMS40LjAudGd6IzRhYmViZmVlZDc1NDFm
MmMyN2FjZmIyOWJkYmJkMTVjOGQ1YmE0ZjciCisKK25jbmFtZUAxLjAueDoKKyAgdmVyc2lvbiAi
MS4wLjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL25jbmFtZS8t
L25jbmFtZS0xLjAuMC50Z3ojNWI1N2FkMThiMWNhMDkyODY0ZWY2MmIwYjFlZDgxOTRmMzgzYjcx
YyIKKyAgZGVwZW5kZW5jaWVzOgorICAgIHhtbC1jaGFyLWNsYXNzZXMgIl4xLjAuMCIKKworbmVn
b3RpYXRvckAwLjYuMToKKyAgdmVyc2lvbiAiMC42LjEiCisgIHJlc29sdmVkICJodHRwczovL3Jl
Z2lzdHJ5Lnlhcm5wa2cuY29tL25lZ290aWF0b3IvLS9uZWdvdGlhdG9yLTAuNi4xLnRneiMyYjMy
NzE4NGU4OTkyMTAxMTc3YjI4NTYzZmI1ZTcxMDJhY2QwY2E5IgorCituby1jYXNlQF4yLjIuMDoK
KyAgdmVyc2lvbiAiMi4zLjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cu
Y29tL25vLWNhc2UvLS9uby1jYXNlLTIuMy4wLnRneiNjYTI4MjVjY2I3NmIxOGU2Zjc5ZDU3M2Rj
ZmJmMWVhY2UzM2RkMTY0IgorICBkZXBlbmRlbmNpZXM6CisgICAgbG93ZXItY2FzZSAiXjEuMS4x
IgorCitub2RlLWxpYnMtYnJvd3NlckBeMC43LjA6CisgIHZlcnNpb24gIjAuNy4wIgorICByZXNv
bHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9ub2RlLWxpYnMtYnJvd3Nlci8tL25v
ZGUtbGlicy1icm93c2VyLTAuNy4wLnRneiMzZTI3MmMwODE5ZTMwODkzNWUyNjY3NDQwOGQ3YWYw
ZTE0OTFiODNiIgorICBkZXBlbmRlbmNpZXM6CisgICAgYXNzZXJ0ICJeMS4xLjEiCisgICAgYnJv
d3NlcmlmeS16bGliICJeMC4xLjQiCisgICAgYnVmZmVyICJeNC45LjAiCisgICAgY29uc29sZS1i
cm93c2VyaWZ5ICJeMS4xLjAiCisgICAgY29uc3RhbnRzLWJyb3dzZXJpZnkgIl4xLjAuMCIKKyAg
ICBjcnlwdG8tYnJvd3NlcmlmeSAiMy4zLjAiCisgICAgZG9tYWluLWJyb3dzZXIgIl4xLjEuMSIK
KyAgICBldmVudHMgIl4xLjAuMCIKKyAgICBodHRwcy1icm93c2VyaWZ5ICIwLjAuMSIKKyAgICBv
cy1icm93c2VyaWZ5ICJeMC4yLjAiCisgICAgcGF0aC1icm93c2VyaWZ5ICIwLjAuMCIKKyAgICBw
cm9jZXNzICJeMC4xMS4wIgorICAgIHB1bnljb2RlICJeMS4yLjQiCisgICAgcXVlcnlzdHJpbmct
ZXMzICJeMC4yLjAiCisgICAgcmVhZGFibGUtc3RyZWFtICJeMi4wLjUiCisgICAgc3RyZWFtLWJy
b3dzZXJpZnkgIl4yLjAuMSIKKyAgICBzdHJlYW0taHR0cCAiXjIuMy4xIgorICAgIHN0cmluZ19k
ZWNvZGVyICJeMC4xMC4yNSIKKyAgICB0aW1lcnMtYnJvd3NlcmlmeSAiXjIuMC4yIgorICAgIHR0
eS1icm93c2VyaWZ5ICIwLjAuMCIKKyAgICB1cmwgIl4wLjExLjAiCisgICAgdXRpbCAiXjAuMTAu
MyIKKyAgICB2bS1icm93c2VyaWZ5ICIwLjAuNCIKKworbm9kZS1wcmUtZ3lwQF4wLjYuMjk6Cisg
IHZlcnNpb24gIjAuNi4zMiIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5j
b20vbm9kZS1wcmUtZ3lwLy0vbm9kZS1wcmUtZ3lwLTAuNi4zMi50Z3ojZmM0NTJiMzc2ZTczMTli
M2QyNTVmNWYzNDg1M2VmNmZkOGZlMWZkNSIKKyAgZGVwZW5kZW5jaWVzOgorICAgIG1rZGlycCAi
fjAuNS4xIgorICAgIG5vcHQgIn4zLjAuNiIKKyAgICBucG1sb2cgIl40LjAuMSIKKyAgICByYyAi
fjEuMS42IgorICAgIHJlcXVlc3QgIl4yLjc5LjAiCisgICAgcmltcmFmICJ+Mi41LjQiCisgICAg
c2VtdmVyICJ+NS4zLjAiCisgICAgdGFyICJ+Mi4yLjEiCisgICAgdGFyLXBhY2sgIn4zLjMuMCIK
Kworbm9wdEB+My4wLjEsIG5vcHRAfjMuMC42OgorICB2ZXJzaW9uICIzLjAuNiIKKyAgcmVzb2x2
ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vbm9wdC8tL25vcHQtMy4wLjYudGd6I2M2
NDY1ZGJmMDhhYmNkNGRiMzU5MzE3Zjc5YWM2OGE2NDZiMjhmZjkiCisgIGRlcGVuZGVuY2llczoK
KyAgICBhYmJyZXYgIjEiCisKK25vcm1hbGl6ZS1wYXRoQF4yLjAuMToKKyAgdmVyc2lvbiAiMi4w
LjEiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL25vcm1hbGl6ZS1w
YXRoLy0vbm9ybWFsaXplLXBhdGgtMi4wLjEudGd6IzQ3ODg2YWMxNjYyNzYwZDQyNjFiN2Q5Nzlk
MjQxNzA5ZDNjZTNmN2EiCisKK25vcm1hbGl6ZS1yYW5nZUBeMC4xLjI6CisgIHZlcnNpb24gIjAu
MS4yIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9ub3JtYWxpemUt
cmFuZ2UvLS9ub3JtYWxpemUtcmFuZ2UtMC4xLjIudGd6IzJkMTBjMDZiZGZkMzEyZWE5Nzc3Njk1
YTRkMjg0Mzk0NTZiNzU5NDIiCisKK25vcm1hbGl6ZS11cmxAXjEuNC4wOgorICB2ZXJzaW9uICIx
LjguMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vbm9ybWFsaXpl
LXVybC8tL25vcm1hbGl6ZS11cmwtMS44LjAudGd6I2E5NTUwYjA3OWFhMzUyM2M4NWQ3OGRmMjRl
ZWYxOTU5ZmNlMzU5YWIiCisgIGRlcGVuZGVuY2llczoKKyAgICBvYmplY3QtYXNzaWduICJeNC4w
LjEiCisgICAgcHJlcGVuZC1odHRwICJeMS4wLjAiCisgICAgcXVlcnktc3RyaW5nICJeNC4xLjAi
CisgICAgc29ydC1rZXlzICJeMS4wLjAiCisKK25wbWxvZ0BeNC4wLjE6CisgIHZlcnNpb24gIjQu
MC4xIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9ucG1sb2cvLS9u
cG1sb2ctNC4wLjEudGd6I2QxNGY1MDNiNGNkNzk3MTAzNzU1NTMwMDRiYTk2ZTY2NjJmYmMwYjgi
CisgIGRlcGVuZGVuY2llczoKKyAgICBhcmUtd2UtdGhlcmUteWV0ICJ+MS4xLjIiCisgICAgY29u
c29sZS1jb250cm9sLXN0cmluZ3MgIn4xLjEuMCIKKyAgICBnYXVnZSAifjIuNy4xIgorICAgIHNl
dC1ibG9ja2luZyAifjIuMC4wIgorCitudGgtY2hlY2tAfjEuMC4xOgorICB2ZXJzaW9uICIxLjAu
MSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vbnRoLWNoZWNrLy0v
bnRoLWNoZWNrLTEuMC4xLnRneiM5OTI5YWNkZjYyOGZjMmM0MTA5OGRlYWI4MmFjNTgwY2YxNDlh
YWU0IgorICBkZXBlbmRlbmNpZXM6CisgICAgYm9vbGJhc2UgIn4xLjAuMCIKKworbnVtMmZyYWN0
aW9uQF4xLjIuMjoKKyAgdmVyc2lvbiAiMS4yLjIiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lz
dHJ5Lnlhcm5wa2cuY29tL251bTJmcmFjdGlvbi8tL251bTJmcmFjdGlvbi0xLjIuMi50Z3ojNmY2
ODJiNmEwMjdhNGU5ZGRmYTQ1NjRjZDI1ODlkMWQ0ZTY2OWVkZSIKKworbnVtYmVyLWlzLW5hbkBe
MS4wLjA6CisgIHZlcnNpb24gIjEuMC4xIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55
YXJucGtnLmNvbS9udW1iZXItaXMtbmFuLy0vbnVtYmVyLWlzLW5hbi0xLjAuMS50Z3ojMDk3YjYw
MmI1MzQyMmE1MjJjMWFmYjg3OTAzMTgzMzY5NDFhMDExZCIKKworb2F1dGgtc2lnbkB+MC44LjE6
CisgIHZlcnNpb24gIjAuOC4yIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtn
LmNvbS9vYXV0aC1zaWduLy0vb2F1dGgtc2lnbi0wLjguMi50Z3ojNDZhNmFiN2YwYWVhZDhkZWFl
OWVjMDU2NTc4MGI3ZDRlZmViOWQ0MyIKKworb2JqZWN0LWFzc2lnbkBeNC4wLjAsIG9iamVjdC1h
c3NpZ25AXjQuMC4xLCBvYmplY3QtYXNzaWduQF40LjEuMDoKKyAgdmVyc2lvbiAiNC4xLjAiCisg
IHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL29iamVjdC1hc3NpZ24vLS9v
YmplY3QtYXNzaWduLTQuMS4wLnRneiM3YTNiM2QwZTk4MDYzZDQzZjRjMDNmMmU4YWU2Y2Q1MWE4
Njg4M2EwIgorCitvYmplY3QtaGFzaEBeMS4xLjQ6CisgIHZlcnNpb24gIjEuMS41IgorICByZXNv
bHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9vYmplY3QtaGFzaC8tL29iamVjdC1o
YXNoLTEuMS41LnRneiNiZGQ4NDRlMDMwZDA4NjFiNjkyY2ExNzVjNmNhYjY4NjhlYzIzM2Q3Igor
CitvYmplY3Qub21pdEBeMi4wLjA6CisgIHZlcnNpb24gIjIuMC4xIgorICByZXNvbHZlZCAiaHR0
cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9vYmplY3Qub21pdC8tL29iamVjdC5vbWl0LTIuMC4x
LnRneiMxYTljNzQ0ODI5ZjM5ZGJiODU4Yzc2Y2EzNTc5YWUyYTU0ZWJkMWZhIgorICBkZXBlbmRl
bmNpZXM6CisgICAgZm9yLW93biAiXjAuMS40IgorICAgIGlzLWV4dGVuZGFibGUgIl4wLjEuMSIK
Kworb24tZmluaXNoZWRAfjIuMy4wOgorICB2ZXJzaW9uICIyLjMuMCIKKyAgcmVzb2x2ZWQgImh0
dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vb24tZmluaXNoZWQvLS9vbi1maW5pc2hlZC0yLjMu
MC50Z3ojMjBmMTMzNjQ4MWIwODNjZDc1MzM3OTkyYTE2OTcxYWEyZDkwNjk0NyIKKyAgZGVwZW5k
ZW5jaWVzOgorICAgIGVlLWZpcnN0ICIxLjEuMSIKKworb25jZUBeMS4zLjA6CisgIHZlcnNpb24g
IjEuNC4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9vbmNlLy0v
b25jZS0xLjQuMC50Z3ojNTgzYjFhYTc3NTk2MWQ0YjExM2FjMTdkOWM1MGJhZWY5ZGQ3NmJkMSIK
KyAgZGVwZW5kZW5jaWVzOgorICAgIHdyYXBweSAiMSIKKworb25jZUB+MS4zLjM6CisgIHZlcnNp
b24gIjEuMy4zIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9vbmNl
Ly0vb25jZS0xLjMuMy50Z3ojYjJlMjYxNTU3Y2U0YzMxNGVjODMwNGYzZmE4MjY2M2U0Mjk3Y2Ey
MCIKKyAgZGVwZW5kZW5jaWVzOgorICAgIHdyYXBweSAiMSIKKworb25ldGltZUBeMS4wLjA6Cisg
IHZlcnNpb24gIjEuMS4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNv
bS9vbmV0aW1lLy0vb25ldGltZS0xLjEuMC50Z3ojYTFmNzgzOGY4MzE0YzUxNmYwNWVjZWZjYmM0
Y2NmZTA0YjRlZDc4OSIKKworb3BuQF40LjAuMjoKKyAgdmVyc2lvbiAiNC4wLjIiCisgIHJlc29s
dmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL29wbi8tL29wbi00LjAuMi50Z3ojN2Fi
YzIyZTY0NGRmZjYzYjBhOTZkNWFiN2YyNzkwYzBmMDFhYmM5NSIKKyAgZGVwZW5kZW5jaWVzOgor
ICAgIG9iamVjdC1hc3NpZ24gIl40LjAuMSIKKyAgICBwaW5raWUtcHJvbWlzZSAiXjIuMC4wIgor
CitvcHRpbWlzdEB+MC42LjA6CisgIHZlcnNpb24gIjAuNi4xIgorICByZXNvbHZlZCAiaHR0cHM6
Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9vcHRpbWlzdC8tL29wdGltaXN0LTAuNi4xLnRneiNkYTNl
YTc0Njg2ZmEyMWExOWExMTFjMzI2ZTkwZWIxNWEwMTk2Njg2IgorICBkZXBlbmRlbmNpZXM6Cisg
ICAgbWluaW1pc3QgIn4wLjAuMSIKKyAgICB3b3Jkd3JhcCAifjAuMC4yIgorCitvcHRpb25hdG9y
QF4wLjguMjoKKyAgdmVyc2lvbiAiMC44LjIiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5
Lnlhcm5wa2cuY29tL29wdGlvbmF0b3IvLS9vcHRpb25hdG9yLTAuOC4yLnRneiMzNjRjNWU0MDlk
M2Y0ZDYzMDFkNmMwYjRjMDViYmE1MDE4MGFlYjY0IgorICBkZXBlbmRlbmNpZXM6CisgICAgZGVl
cC1pcyAifjAuMS4zIgorICAgIGZhc3QtbGV2ZW5zaHRlaW4gIn4yLjAuNCIKKyAgICBsZXZuICJ+
MC4zLjAiCisgICAgcHJlbHVkZS1scyAifjEuMS4yIgorICAgIHR5cGUtY2hlY2sgIn4wLjMuMiIK
KyAgICB3b3Jkd3JhcCAifjEuMC4wIgorCitvcmFAXjAuMy4wOgorICB2ZXJzaW9uICIwLjMuMCIK
KyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vb3JhLy0vb3JhLTAuMy4w
LnRneiMzNjdhMDc4YWQyNWNmYjA5NmRhNTAxMTE1ZWI1YjQwMWUwN2Q3NDk1IgorICBkZXBlbmRl
bmNpZXM6CisgICAgY2hhbGsgIl4xLjEuMSIKKyAgICBjbGktY3Vyc29yICJeMS4wLjIiCisgICAg
Y2xpLXNwaW5uZXJzICJeMC4yLjAiCisgICAgbG9nLXN5bWJvbHMgIl4xLjAuMiIKKworb3MtYnJv
d3NlcmlmeUBeMC4yLjA6CisgIHZlcnNpb24gIjAuMi4xIgorICByZXNvbHZlZCAiaHR0cHM6Ly9y
ZWdpc3RyeS55YXJucGtnLmNvbS9vcy1icm93c2VyaWZ5Ly0vb3MtYnJvd3NlcmlmeS0wLjIuMS50
Z3ojNjNmYzRjY2VlNWQyZDc3NjNkMjZiYmY4NjAxMDc4ZTZjMmUwMDQ0ZiIKKworb3MtaG9tZWRp
ckBeMS4wLjA6CisgIHZlcnNpb24gIjEuMC4yIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3Ry
eS55YXJucGtnLmNvbS9vcy1ob21lZGlyLy0vb3MtaG9tZWRpci0xLjAuMi50Z3ojZmZiYzQ5ODgz
MzZlMGU4MzNkZTBjMTY4YzdlZjE1MjEyMWFhN2ZiMyIKKworb3MtdG1wZGlyQF4xLjAuMToKKyAg
dmVyc2lvbiAiMS4wLjIiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29t
L29zLXRtcGRpci8tL29zLXRtcGRpci0xLjAuMi50Z3ojYmJlNjc0MDZjNzlhYTg1YzVjZmVjNzY2
ZmU1NzM0NTU1ZGZhMTI3NCIKKworcGFrb0B+MC4yLjA6CisgIHZlcnNpb24gIjAuMi45IgorICBy
ZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9wYWtvLy0vcGFrby0wLjIuOS50
Z3ojZjNmNzUyMmY0ZWY3ODIzNDhkYTgxNjFiYWQ5ZWNmZDUxYmY4M2E3NSIKKworcGFyYW0tY2Fz
ZUAyLjEueDoKKyAgdmVyc2lvbiAiMi4xLjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5
Lnlhcm5wa2cuY29tL3BhcmFtLWNhc2UvLS9wYXJhbS1jYXNlLTIuMS4wLnRneiMyNjE5ZjkwZmQ2
YzgyOWVkMGI5NThmMWM4NGVkMDNhNzQ1YTZkNzBhIgorICBkZXBlbmRlbmNpZXM6CisgICAgbm8t
Y2FzZSAiXjIuMi4wIgorCitwYXJzZS1nbG9iQF4zLjAuNDoKKyAgdmVyc2lvbiAiMy4wLjQiCisg
IHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3BhcnNlLWdsb2IvLS9wYXJz
ZS1nbG9iLTMuMC40LnRneiNiMmMzNzZjZmIxMWYzNTUxM2JhZGQxNzNlZjBiYjZlM2EzODgzOTFj
IgorICBkZXBlbmRlbmNpZXM6CisgICAgZ2xvYi1iYXNlICJeMC4zLjAiCisgICAgaXMtZG90Zmls
ZSAiXjEuMC4wIgorICAgIGlzLWV4dGdsb2IgIl4xLjAuMCIKKyAgICBpcy1nbG9iICJeMi4wLjAi
CisKK3BhcnNldXJsQH4xLjMuMToKKyAgdmVyc2lvbiAiMS4zLjEiCisgIHJlc29sdmVkICJodHRw
czovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3BhcnNldXJsLy0vcGFyc2V1cmwtMS4zLjEudGd6I2M4
YWI4YzkyMjNiYTM0ODg4YWE2NGEyOTdiMjg4NTNiZWMxOGRhNTYiCisKK3BhdGgtYnJvd3Nlcmlm
eUAwLjAuMDoKKyAgdmVyc2lvbiAiMC4wLjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5
Lnlhcm5wa2cuY29tL3BhdGgtYnJvd3NlcmlmeS8tL3BhdGgtYnJvd3NlcmlmeS0wLjAuMC50Z3oj
YTBiODcwNzI5YWFlMjE0MDA1YjdkNTAzMmVjMmNiYmIwZmI0NDUxYSIKKworcGF0aC1leGlzdHNA
XjIuMC4wOgorICB2ZXJzaW9uICIyLjEuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnku
eWFybnBrZy5jb20vcGF0aC1leGlzdHMvLS9wYXRoLWV4aXN0cy0yLjEuMC50Z3ojMGZlYjZjNjRm
MGZjNTE4ZDlhNzU0ZGQ1ZWZiNjJjNzAyMjc2MWY0YiIKKyAgZGVwZW5kZW5jaWVzOgorICAgIHBp
bmtpZS1wcm9taXNlICJeMi4wLjAiCisKK3BhdGgtaXMtYWJzb2x1dGVAXjEuMC4wOgorICB2ZXJz
aW9uICIxLjAuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vcGF0
aC1pcy1hYnNvbHV0ZS8tL3BhdGgtaXMtYWJzb2x1dGUtMS4wLjEudGd6IzE3NGI5MjY4NzM1NTM0
ZmZiYzdhY2U2YmY1M2E1YTllMWI1YzVmNWYiCisKK3BhdGgtaXMtaW5zaWRlQF4xLjAuMToKKyAg
dmVyc2lvbiAiMS4wLjIiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29t
L3BhdGgtaXMtaW5zaWRlLy0vcGF0aC1pcy1pbnNpZGUtMS4wLjIudGd6IzM2NTQxN2RlZGU0NDQz
MGQxYzExYWY2MTAyN2ZhY2YwNzRiZGZjNTMiCisKK3BhdGgtdG8tcmVnZXhwQDAuMS43OgorICB2
ZXJzaW9uICIwLjEuNyIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20v
cGF0aC10by1yZWdleHAvLS9wYXRoLXRvLXJlZ2V4cC0wLjEuNy50Z3ojZGY2MDQxNzgwMDVmNTIy
ZjE1ZWI0NDkwZTcyNDdhMWJmYWE2N2Y4YyIKKworcGJrZGYyLWNvbXBhdEAyLjAuMToKKyAgdmVy
c2lvbiAiMi4wLjEiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3Bi
a2RmMi1jb21wYXQvLS9wYmtkZjItY29tcGF0LTIuMC4xLnRneiNiNmUwYzhmYTk5NDk0ZDk0ZTA1
MTE1NzU4MDJhNTlhNWMxNDJmMjg4IgorCitwaWZ5QF4yLjAuMDoKKyAgdmVyc2lvbiAiMi4zLjAi
CisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3BpZnkvLS9waWZ5LTIu
My4wLnRneiNlZDE0MWE2YWMwNDNhODQ5ZWE1ODg0OThlN2RjYThiMTUzMzBlOTBjIgorCitwaW5r
aWUtcHJvbWlzZUBeMi4wLjA6CisgIHZlcnNpb24gIjIuMC4xIgorICByZXNvbHZlZCAiaHR0cHM6
Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9waW5raWUtcHJvbWlzZS8tL3BpbmtpZS1wcm9taXNlLTIu
MC4xLnRneiMyMTM1ZDZkZmE3YTM1OGMwNjlhYzliMTc4Nzc2Mjg4MjI4NDUwZmZhIgorICBkZXBl
bmRlbmNpZXM6CisgICAgcGlua2llICJeMi4wLjAiCisKK3BpbmtpZUBeMi4wLjA6CisgIHZlcnNp
b24gIjIuMC40IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9waW5r
aWUvLS9waW5raWUtMi4wLjQudGd6IzcyNTU2YjgwY2ZhMGQ0OGE5NzRlODBlNzcyNDhlODBlZDRm
N2Y4NzAiCisKK3BrZy1kaXJAXjEuMC4wOgorICB2ZXJzaW9uICIxLjAuMCIKKyAgcmVzb2x2ZWQg
Imh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vcGtnLWRpci8tL3BrZy1kaXItMS4wLjAudGd6
IzdhNGI1MDhhOGQ1YmIyZDYyOWQ0NDcwNTZmZjRlOWM5MzE0Y2YzZDQiCisgIGRlcGVuZGVuY2ll
czoKKyAgICBmaW5kLXVwICJeMS4wLjAiCisKK3BsdXJhbGl6ZUBeMS4yLjE6CisgIHZlcnNpb24g
IjEuMi4xIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9wbHVyYWxp
emUvLS9wbHVyYWxpemUtMS4yLjEudGd6I2QxYTIxNDgzZmQyMmJiNDFlNThhMTJmYTM0MjE4MjMx
NDA4OTdjNDUiCisKK3Bvc3Rjc3MtY2FsY0BeNS4yLjA6CisgIHZlcnNpb24gIjUuMy4xIgorICBy
ZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9wb3N0Y3NzLWNhbGMvLS9wb3N0
Y3NzLWNhbGMtNS4zLjEudGd6Izc3YmFlN2NhOTI4YWQ4NTcxNmUyZmRhNDJmMjYxYmY3YzFkNjVi
NWUiCisgIGRlcGVuZGVuY2llczoKKyAgICBwb3N0Y3NzICJeNS4wLjIiCisgICAgcG9zdGNzcy1t
ZXNzYWdlLWhlbHBlcnMgIl4yLjAuMCIKKyAgICByZWR1Y2UtY3NzLWNhbGMgIl4xLjIuNiIKKwor
cG9zdGNzcy1jb2xvcm1pbkBeMi4xLjg6CisgIHZlcnNpb24gIjIuMi4xIgorICByZXNvbHZlZCAi
aHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9wb3N0Y3NzLWNvbG9ybWluLy0vcG9zdGNzcy1j
b2xvcm1pbi0yLjIuMS50Z3ojZGM1NDIxYjZhZTZmNzc5ZWY2YmZkNDczNTJiOTRhYmU1OWQwMzE2
YiIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGNvbG9ybWluICJeMS4wLjUiCisgICAgcG9zdGNzcyAi
XjUuMC4xMyIKKyAgICBwb3N0Y3NzLXZhbHVlLXBhcnNlciAiXjMuMi4zIgorCitwb3N0Y3NzLWNv
bnZlcnQtdmFsdWVzQF4yLjMuNDoKKyAgdmVyc2lvbiAiMi41LjAiCisgIHJlc29sdmVkICJodHRw
czovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3Bvc3Rjc3MtY29udmVydC12YWx1ZXMvLS9wb3N0Y3Nz
LWNvbnZlcnQtdmFsdWVzLTIuNS4wLnRneiM1NzBhY2ViMDRiMzA2MWZiMjVmNmY0NmJkMDMyOWU3
YWI2MjYzYzBiIgorICBkZXBlbmRlbmNpZXM6CisgICAgcG9zdGNzcyAiXjUuMC4xMSIKKyAgICBw
b3N0Y3NzLXZhbHVlLXBhcnNlciAiXjMuMS4yIgorCitwb3N0Y3NzLWRpc2NhcmQtY29tbWVudHNA
XjIuMC40OgorICB2ZXJzaW9uICIyLjAuNCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnku
eWFybnBrZy5jb20vcG9zdGNzcy1kaXNjYXJkLWNvbW1lbnRzLy0vcG9zdGNzcy1kaXNjYXJkLWNv
bW1lbnRzLTIuMC40LnRneiNiZWZlODlmYWZkNWIzZGFjZTVjY2NlNTFiNzZiODE1MTRiZTAwZTNk
IgorICBkZXBlbmRlbmNpZXM6CisgICAgcG9zdGNzcyAiXjUuMC4xNCIKKworcG9zdGNzcy1kaXNj
YXJkLWR1cGxpY2F0ZXNAXjIuMC4xOgorICB2ZXJzaW9uICIyLjAuMiIKKyAgcmVzb2x2ZWQgImh0
dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vcG9zdGNzcy1kaXNjYXJkLWR1cGxpY2F0ZXMvLS9w
b3N0Y3NzLWRpc2NhcmQtZHVwbGljYXRlcy0yLjAuMi50Z3ojMDJiZTUyMGU5MTU3MWZmYjEwNzM4
NzY2YTk4MWQ1NzcwOTg5YmIzMiIKKyAgZGVwZW5kZW5jaWVzOgorICAgIHBvc3Rjc3MgIl41LjAu
NCIKKworcG9zdGNzcy1kaXNjYXJkLWVtcHR5QF4yLjAuMToKKyAgdmVyc2lvbiAiMi4xLjAiCisg
IHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3Bvc3Rjc3MtZGlzY2FyZC1l
bXB0eS8tL3Bvc3Rjc3MtZGlzY2FyZC1lbXB0eS0yLjEuMC50Z3ojZDJiNGJkOWQ1Y2VkNWViZDhk
Y2FkZTc2NDBjN2Q3Y2Q3ZjRmOTJiNSIKKyAgZGVwZW5kZW5jaWVzOgorICAgIHBvc3Rjc3MgIl41
LjAuMTQiCisKK3Bvc3Rjc3MtZGlzY2FyZC1vdmVycmlkZGVuQF4wLjEuMToKKyAgdmVyc2lvbiAi
MC4xLjEiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3Bvc3Rjc3Mt
ZGlzY2FyZC1vdmVycmlkZGVuLy0vcG9zdGNzcy1kaXNjYXJkLW92ZXJyaWRkZW4tMC4xLjEudGd6
IzhiMWVhZjU1NGY2ODZmYjI4OGNkODc0YzU1NjY3YjBhYTM2NjhkNTgiCisgIGRlcGVuZGVuY2ll
czoKKyAgICBwb3N0Y3NzICJeNS4wLjE2IgorCitwb3N0Y3NzLWRpc2NhcmQtdW51c2VkQF4yLjIu
MToKKyAgdmVyc2lvbiAiMi4yLjMiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5w
a2cuY29tL3Bvc3Rjc3MtZGlzY2FyZC11bnVzZWQvLS9wb3N0Y3NzLWRpc2NhcmQtdW51c2VkLTIu
Mi4zLnRneiNiY2UzMGIyY2M1OTFmZmM2MzQzMjJiNWZiMzQ2NGI2ZDkzNGY0NDMzIgorICBkZXBl
bmRlbmNpZXM6CisgICAgcG9zdGNzcyAiXjUuMC4xNCIKKyAgICB1bmlxcyAiXjIuMC4wIgorCitw
b3N0Y3NzLWZpbHRlci1wbHVnaW5zQF4yLjAuMDoKKyAgdmVyc2lvbiAiMi4wLjIiCisgIHJlc29s
dmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3Bvc3Rjc3MtZmlsdGVyLXBsdWdpbnMv
LS9wb3N0Y3NzLWZpbHRlci1wbHVnaW5zLTIuMC4yLnRneiM2ZDg1ODYyNTM0ZDczNWFjNDIwZTRh
ODU4MDZlMWY1ZDQyODZkODRjIgorICBkZXBlbmRlbmNpZXM6CisgICAgcG9zdGNzcyAiXjUuMC40
IgorICAgIHVuaXFpZCAiXjQuMC4wIgorCitwb3N0Y3NzLW1lcmdlLWlkZW50c0BeMi4xLjU6Cisg
IHZlcnNpb24gIjIuMS43IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNv
bS9wb3N0Y3NzLW1lcmdlLWlkZW50cy8tL3Bvc3Rjc3MtbWVyZ2UtaWRlbnRzLTIuMS43LnRneiM0
YzU1MzAzMTNjMDhlMWQ1YjNiYmYzZDJiYmM3NDdlMjc4ZWVhMjcwIgorICBkZXBlbmRlbmNpZXM6
CisgICAgaGFzICJeMS4wLjEiCisgICAgcG9zdGNzcyAiXjUuMC4xMCIKKyAgICBwb3N0Y3NzLXZh
bHVlLXBhcnNlciAiXjMuMS4xIgorCitwb3N0Y3NzLW1lcmdlLWxvbmdoYW5kQF4yLjAuMToKKyAg
dmVyc2lvbiAiMi4wLjEiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29t
L3Bvc3Rjc3MtbWVyZ2UtbG9uZ2hhbmQvLS9wb3N0Y3NzLW1lcmdlLWxvbmdoYW5kLTIuMC4xLnRn
eiNmZjU5YjVkZWM2ZDU4NmNlMmNlYTE4MzEzOGY1NWM1ODc2ZmE5Y2RjIgorICBkZXBlbmRlbmNp
ZXM6CisgICAgcG9zdGNzcyAiXjUuMC40IgorCitwb3N0Y3NzLW1lcmdlLXJ1bGVzQF4yLjAuMzoK
KyAgdmVyc2lvbiAiMi4wLjEwIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtn
LmNvbS9wb3N0Y3NzLW1lcmdlLXJ1bGVzLy0vcG9zdGNzcy1tZXJnZS1ydWxlcy0yLjAuMTAudGd6
IzU0YjM2MGJlODA0ZTdlNjlhNWM3MjIyNjM1MjQ3YjkyYTM1NjllOWIiCisgIGRlcGVuZGVuY2ll
czoKKyAgICBwb3N0Y3NzICJeNS4wLjQiCisgICAgdmVuZG9ycyAiXjEuMC4wIgorCitwb3N0Y3Nz
LW1lc3NhZ2UtaGVscGVyc0BeMi4wLjA6CisgIHZlcnNpb24gIjIuMC4wIgorICByZXNvbHZlZCAi
aHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9wb3N0Y3NzLW1lc3NhZ2UtaGVscGVycy8tL3Bv
c3Rjc3MtbWVzc2FnZS1oZWxwZXJzLTIuMC4wLnRneiNhNGYyZjRmYWI2ZTRmZTAwMmYwYWVkMDAw
NDc4Y2RmNTJmOWJhNjBlIgorCitwb3N0Y3NzLW1pbmlmeS1mb250LXZhbHVlc0BeMS4wLjI6Cisg
IHZlcnNpb24gIjEuMC41IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNv
bS9wb3N0Y3NzLW1pbmlmeS1mb250LXZhbHVlcy8tL3Bvc3Rjc3MtbWluaWZ5LWZvbnQtdmFsdWVz
LTEuMC41LnRneiM0YjU4ZWRiNTY2NDFlYmE3Yzg0NzRhYjM1MjZjYWZkN2JiZGVjYjY5IgorICBk
ZXBlbmRlbmNpZXM6CisgICAgb2JqZWN0LWFzc2lnbiAiXjQuMC4xIgorICAgIHBvc3Rjc3MgIl41
LjAuNCIKKyAgICBwb3N0Y3NzLXZhbHVlLXBhcnNlciAiXjMuMC4yIgorCitwb3N0Y3NzLW1pbmlm
eS1ncmFkaWVudHNAXjEuMC4xOgorICB2ZXJzaW9uICIxLjAuNSIKKyAgcmVzb2x2ZWQgImh0dHBz
Oi8vcmVnaXN0cnkueWFybnBrZy5jb20vcG9zdGNzcy1taW5pZnktZ3JhZGllbnRzLy0vcG9zdGNz
cy1taW5pZnktZ3JhZGllbnRzLTEuMC41LnRneiM1ZGJkYTExMzczNzAzZjgzY2ZiNGEzZWEzODgx
ZDhkNzVmZjVlNmUxIgorICBkZXBlbmRlbmNpZXM6CisgICAgcG9zdGNzcyAiXjUuMC4xMiIKKyAg
ICBwb3N0Y3NzLXZhbHVlLXBhcnNlciAiXjMuMy4wIgorCitwb3N0Y3NzLW1pbmlmeS1wYXJhbXNA
XjEuMC40OgorICB2ZXJzaW9uICIxLjAuNSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnku
eWFybnBrZy5jb20vcG9zdGNzcy1taW5pZnktcGFyYW1zLy0vcG9zdGNzcy1taW5pZnktcGFyYW1z
LTEuMC41LnRneiM4MmQ2MDI2NDNiODYxNmE2MWZiMzYzNGQ3ZWRlMDI4OTgzNmQ2N2Y5IgorICBk
ZXBlbmRlbmNpZXM6CisgICAgYWxwaGFudW0tc29ydCAiXjEuMC4xIgorICAgIHBvc3Rjc3MgIl41
LjAuMiIKKyAgICBwb3N0Y3NzLXZhbHVlLXBhcnNlciAiXjMuMC4yIgorICAgIHVuaXFzICJeMi4w
LjAiCisKK3Bvc3Rjc3MtbWluaWZ5LXNlbGVjdG9yc0BeMi4wLjQ6CisgIHZlcnNpb24gIjIuMC43
IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9wb3N0Y3NzLW1pbmlm
eS1zZWxlY3RvcnMvLS9wb3N0Y3NzLW1pbmlmeS1zZWxlY3RvcnMtMi4wLjcudGd6I2JmYjkyNDhm
ZTE0ZGIzMzc3MGYwMzY1NzJkZTZiNDg5N2M0OGQ4MWMiCisgIGRlcGVuZGVuY2llczoKKyAgICBh
bHBoYW51bS1zb3J0ICJeMS4wLjIiCisgICAgaGFzICJeMS4wLjEiCisgICAgcG9zdGNzcyAiXjUu
MC4xNCIKKyAgICBwb3N0Y3NzLXNlbGVjdG9yLXBhcnNlciAiXjIuMC4wIgorCitwb3N0Y3NzLW1v
ZHVsZXMtZXh0cmFjdC1pbXBvcnRzQF4xLjAuMDoKKyAgdmVyc2lvbiAiMS4wLjEiCisgIHJlc29s
dmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3Bvc3Rjc3MtbW9kdWxlcy1leHRyYWN0
LWltcG9ydHMvLS9wb3N0Y3NzLW1vZHVsZXMtZXh0cmFjdC1pbXBvcnRzLTEuMC4xLnRneiM4ZmIz
ZmVmOWE2ZGQwNDIwZDNmNmQ0MzUzY2YxZmY3M2YyYjJhMzQxIgorICBkZXBlbmRlbmNpZXM6Cisg
ICAgcG9zdGNzcyAiXjUuMC40IgorCitwb3N0Y3NzLW1vZHVsZXMtbG9jYWwtYnktZGVmYXVsdEBe
MS4wLjE6CisgIHZlcnNpb24gIjEuMS4xIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55
YXJucGtnLmNvbS9wb3N0Y3NzLW1vZHVsZXMtbG9jYWwtYnktZGVmYXVsdC8tL3Bvc3Rjc3MtbW9k
dWxlcy1sb2NhbC1ieS1kZWZhdWx0LTEuMS4xLnRneiMyOWExMDY3M2ZhMzdkMTkyNTEyNjVjYTJi
YTMxNTBkOTA0MGViNGNlIgorICBkZXBlbmRlbmNpZXM6CisgICAgY3NzLXNlbGVjdG9yLXRva2Vu
aXplciAiXjAuNi4wIgorICAgIHBvc3Rjc3MgIl41LjAuNCIKKworcG9zdGNzcy1tb2R1bGVzLXNj
b3BlQF4xLjAuMDoKKyAgdmVyc2lvbiAiMS4wLjIiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lz
dHJ5Lnlhcm5wa2cuY29tL3Bvc3Rjc3MtbW9kdWxlcy1zY29wZS8tL3Bvc3Rjc3MtbW9kdWxlcy1z
Y29wZS0xLjAuMi50Z3ojZmY5NzczOTVlNWUwNjIwMmQ3MzYyMjkwYjg4YjFlOGNkMDQ5ZGUyOSIK
KyAgZGVwZW5kZW5jaWVzOgorICAgIGNzcy1zZWxlY3Rvci10b2tlbml6ZXIgIl4wLjYuMCIKKyAg
ICBwb3N0Y3NzICJeNS4wLjQiCisKK3Bvc3Rjc3MtbW9kdWxlcy12YWx1ZXNAXjEuMS4wOgorICB2
ZXJzaW9uICIxLjIuMiIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20v
cG9zdGNzcy1tb2R1bGVzLXZhbHVlcy8tL3Bvc3Rjc3MtbW9kdWxlcy12YWx1ZXMtMS4yLjIudGd6
I2YwZTdkNDc2ZmUxZWQ4OGM1ZTRjN2Y5NzUzM2EzZTc3MmFkOTRjYTEiCisgIGRlcGVuZGVuY2ll
czoKKyAgICBpY3NzLXJlcGxhY2Utc3ltYm9scyAiXjEuMC4yIgorICAgIHBvc3Rjc3MgIl41LjAu
MTQiCisKK3Bvc3Rjc3Mtbm9ybWFsaXplLWNoYXJzZXRAXjEuMS4wOgorICB2ZXJzaW9uICIxLjEu
MSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vcG9zdGNzcy1ub3Jt
YWxpemUtY2hhcnNldC8tL3Bvc3Rjc3Mtbm9ybWFsaXplLWNoYXJzZXQtMS4xLjEudGd6I2VmOWVl
NzEyMTJkN2ZlNzU5Yzc4ZWQxNjJmNjFlZDYyYjVjYjkzZjEiCisgIGRlcGVuZGVuY2llczoKKyAg
ICBwb3N0Y3NzICJeNS4wLjUiCisKK3Bvc3Rjc3Mtbm9ybWFsaXplLXVybEBeMy4wLjc6CisgIHZl
cnNpb24gIjMuMC43IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9w
b3N0Y3NzLW5vcm1hbGl6ZS11cmwvLS9wb3N0Y3NzLW5vcm1hbGl6ZS11cmwtMy4wLjcudGd6IzZi
ZDkwZDBhNGJjNWExZGYyMmMyNmVhNjVjNTMyNTdkYzM4MjlmNGUiCisgIGRlcGVuZGVuY2llczoK
KyAgICBpcy1hYnNvbHV0ZS11cmwgIl4yLjAuMCIKKyAgICBub3JtYWxpemUtdXJsICJeMS40LjAi
CisgICAgcG9zdGNzcyAiXjUuMC4xNCIKKyAgICBwb3N0Y3NzLXZhbHVlLXBhcnNlciAiXjMuMi4z
IgorCitwb3N0Y3NzLW9yZGVyZWQtdmFsdWVzQF4yLjEuMDoKKyAgdmVyc2lvbiAiMi4yLjIiCisg
IHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3Bvc3Rjc3Mtb3JkZXJlZC12
YWx1ZXMvLS9wb3N0Y3NzLW9yZGVyZWQtdmFsdWVzLTIuMi4yLnRneiNiZThiNTExNzQxZmFiMmRh
YzhlNjE0YTIzMDJlOWQxMDI2N2IwNzcxIgorICBkZXBlbmRlbmNpZXM6CisgICAgcG9zdGNzcyAi
XjUuMC40IgorICAgIHBvc3Rjc3MtdmFsdWUtcGFyc2VyICJeMy4wLjEiCisKK3Bvc3Rjc3MtcmVk
dWNlLWlkZW50c0BeMi4yLjI6CisgIHZlcnNpb24gIjIuMy4xIgorICByZXNvbHZlZCAiaHR0cHM6
Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9wb3N0Y3NzLXJlZHVjZS1pZGVudHMvLS9wb3N0Y3NzLXJl
ZHVjZS1pZGVudHMtMi4zLjEudGd6IzAyNGU4ZTIxOWY1Mjc3MzMxMzQwODU3M2RiOTY0NWJhNjJk
MmQyZmUiCisgIGRlcGVuZGVuY2llczoKKyAgICBwb3N0Y3NzICJeNS4wLjQiCisgICAgcG9zdGNz
cy12YWx1ZS1wYXJzZXIgIl4zLjAuMiIKKworcG9zdGNzcy1yZWR1Y2UtaW5pdGlhbEBeMS4wLjA6
CisgIHZlcnNpb24gIjEuMC4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtn
LmNvbS9wb3N0Y3NzLXJlZHVjZS1pbml0aWFsLy0vcG9zdGNzcy1yZWR1Y2UtaW5pdGlhbC0xLjAu
MC50Z3ojOGY3MzliOTM4Mjg5ZWYyZTQ4OTM2ZDcxMDE3ODNlNDc0MWNhOWJiYiIKKyAgZGVwZW5k
ZW5jaWVzOgorICAgIHBvc3Rjc3MgIl41LjAuNCIKKworcG9zdGNzcy1yZWR1Y2UtdHJhbnNmb3Jt
c0BeMS4wLjM6CisgIHZlcnNpb24gIjEuMC40IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3Ry
eS55YXJucGtnLmNvbS9wb3N0Y3NzLXJlZHVjZS10cmFuc2Zvcm1zLy0vcG9zdGNzcy1yZWR1Y2Ut
dHJhbnNmb3Jtcy0xLjAuNC50Z3ojZmY3NmY0ZDgyMTI0MzdiMzFjMjk4YTQyZDJlMTQ0NDAyNTc3
MWFlMSIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGhhcyAiXjEuMC4xIgorICAgIHBvc3Rjc3MgIl41
LjAuOCIKKyAgICBwb3N0Y3NzLXZhbHVlLXBhcnNlciAiXjMuMC4xIgorCitwb3N0Y3NzLXNlbGVj
dG9yLXBhcnNlckBeMi4wLjA6CisgIHZlcnNpb24gIjIuMi4yIgorICByZXNvbHZlZCAiaHR0cHM6
Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9wb3N0Y3NzLXNlbGVjdG9yLXBhcnNlci8tL3Bvc3Rjc3Mt
c2VsZWN0b3ItcGFyc2VyLTIuMi4yLnRneiMzZDcwZjVhZGRhMTMwZGE1MWM3YzBjMmZjMDIzZjU2
YjEzNzRmZTA4IgorICBkZXBlbmRlbmNpZXM6CisgICAgZmxhdHRlbiAiXjEuMC4yIgorICAgIGlu
ZGV4ZXMtb2YgIl4xLjAuMSIKKyAgICB1bmlxICJeMS4wLjEiCisKK3Bvc3Rjc3Mtc3Znb0BeMi4x
LjE6CisgIHZlcnNpb24gIjIuMS41IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJu
cGtnLmNvbS9wb3N0Y3NzLXN2Z28vLS9wb3N0Y3NzLXN2Z28tMi4xLjUudGd6IzQ2ZmMwMzYzZjAx
YmFiNmEzNmE5YWJiMDFjMjI5ZmNjNDUzNjMwOTQiCisgIGRlcGVuZGVuY2llczoKKyAgICBpcy1z
dmcgIl4yLjAuMCIKKyAgICBwb3N0Y3NzICJeNS4wLjE0IgorICAgIHBvc3Rjc3MtdmFsdWUtcGFy
c2VyICJeMy4yLjMiCisgICAgc3ZnbyAiXjAuNy4wIgorCitwb3N0Y3NzLXVuaXF1ZS1zZWxlY3Rv
cnNAXjIuMC4yOgorICB2ZXJzaW9uICIyLjAuMiIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0
cnkueWFybnBrZy5jb20vcG9zdGNzcy11bmlxdWUtc2VsZWN0b3JzLy0vcG9zdGNzcy11bmlxdWUt
c2VsZWN0b3JzLTIuMC4yLnRneiM5ODFkNTdkMjlkZGNiMzNlN2IxZGZlMWZkNDNiODY0OWY5MzNj
YTFkIgorICBkZXBlbmRlbmNpZXM6CisgICAgYWxwaGFudW0tc29ydCAiXjEuMC4xIgorICAgIHBv
c3Rjc3MgIl41LjAuNCIKKyAgICB1bmlxcyAiXjIuMC4wIgorCitwb3N0Y3NzLXZhbHVlLXBhcnNl
ckBeMy4wLjEsIHBvc3Rjc3MtdmFsdWUtcGFyc2VyQF4zLjAuMiwgcG9zdGNzcy12YWx1ZS1wYXJz
ZXJAXjMuMS4xLCBwb3N0Y3NzLXZhbHVlLXBhcnNlckBeMy4xLjIsIHBvc3Rjc3MtdmFsdWUtcGFy
c2VyQF4zLjIuMywgcG9zdGNzcy12YWx1ZS1wYXJzZXJAXjMuMy4wOgorICB2ZXJzaW9uICIzLjMu
MCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vcG9zdGNzcy12YWx1
ZS1wYXJzZXIvLS9wb3N0Y3NzLXZhbHVlLXBhcnNlci0zLjMuMC50Z3ojODdmMzhmOWYxOGY3NzRh
NGFiNGM4YTIzMmY1YzVjZTg4NzJhOWQxNSIKKworcG9zdGNzcy16aW5kZXhAXjIuMC4xOgorICB2
ZXJzaW9uICIyLjIuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20v
cG9zdGNzcy16aW5kZXgvLS9wb3N0Y3NzLXppbmRleC0yLjIuMC50Z3ojZDIxMDlkZGMwNTViOTFh
ZjY3ZmM0Y2IzYjAyNTk0NjYzOWQyYWYyMiIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGhhcyAiXjEu
MC4xIgorICAgIHBvc3Rjc3MgIl41LjAuNCIKKyAgICB1bmlxcyAiXjIuMC4wIgorCitwb3N0Y3Nz
QF41LjAuMTAsIHBvc3Rjc3NAXjUuMC4xMSwgcG9zdGNzc0BeNS4wLjEyLCBwb3N0Y3NzQF41LjAu
MTMsIHBvc3Rjc3NAXjUuMC4xNCwgcG9zdGNzc0BeNS4wLjE2LCBwb3N0Y3NzQF41LjAuMiwgcG9z
dGNzc0BeNS4wLjQsIHBvc3Rjc3NAXjUuMC41LCBwb3N0Y3NzQF41LjAuNiwgcG9zdGNzc0BeNS4w
LjgsIHBvc3Rjc3NAXjUuMi41OgorICB2ZXJzaW9uICI1LjIuNiIKKyAgcmVzb2x2ZWQgImh0dHBz
Oi8vcmVnaXN0cnkueWFybnBrZy5jb20vcG9zdGNzcy8tL3Bvc3Rjc3MtNS4yLjYudGd6I2EyNTJj
ZDY3Y2Q1MjU4NTAzNWYxN2U5YWQxMmIzNTEzN2E3YmRkOWUiCisgIGRlcGVuZGVuY2llczoKKyAg
ICBjaGFsayAiXjEuMS4zIgorICAgIGpzLWJhc2U2NCAiXjIuMS45IgorICAgIHNvdXJjZS1tYXAg
Il4wLjUuNiIKKyAgICBzdXBwb3J0cy1jb2xvciAiXjMuMS4yIgorCitwcmVsdWRlLWxzQH4xLjEu
MjoKKyAgdmVyc2lvbiAiMS4xLjIiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5w
a2cuY29tL3ByZWx1ZGUtbHMvLS9wcmVsdWRlLWxzLTEuMS4yLnRneiMyMTkzMmE1NDlmNWU1MmZm
ZDlhODI3ZjU3MGUwNGJlNjJhOTdkYTU0IgorCitwcmVwZW5kLWh0dHBAXjEuMC4wOgorICB2ZXJz
aW9uICIxLjAuNCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vcHJl
cGVuZC1odHRwLy0vcHJlcGVuZC1odHRwLTEuMC40LnRneiNkNGY0NTYyYjBjZTM2OTZlNDFhYzUy
ZDBlMDAyZTU3YTYzNWRjNmRjIgorCitwcmVzZXJ2ZUBeMC4yLjA6CisgIHZlcnNpb24gIjAuMi4w
IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9wcmVzZXJ2ZS8tL3By
ZXNlcnZlLTAuMi4wLnRneiM4MTVlZDFmNmViYzY1OTI2Zjg2NWIzMTBjMDcxM2JjYjMzMTVjZTRi
IgorCitwcmV0dHktZXJyb3JAXjIuMC4yOgorICB2ZXJzaW9uICIyLjAuMiIKKyAgcmVzb2x2ZWQg
Imh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vcHJldHR5LWVycm9yLy0vcHJldHR5LWVycm9y
LTIuMC4yLnRneiNhN2RiMTljYmI1MjljYTlmMGFmM2QzYTJmNzdkNWNhZjhlNWRlYzIzIgorICBk
ZXBlbmRlbmNpZXM6CisgICAgcmVuZGVya2lkICJ+Mi4wLjAiCisgICAgdXRpbGEgIn4wLjQiCisK
K3ByaXZhdGVAXjAuMS42LCBwcml2YXRlQH4wLjEuNToKKyAgdmVyc2lvbiAiMC4xLjYiCisgIHJl
c29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3ByaXZhdGUvLS9wcml2YXRlLTAu
MS42LnRneiM1NWM2YTk3NmQwZjliYWZiOTkyNDg1MTM1MGZlNDdiOWI1ZmJiN2MxIgorCitwcm9j
ZXNzLW5leHRpY2stYXJnc0B+MS4wLjY6CisgIHZlcnNpb24gIjEuMC43IgorICByZXNvbHZlZCAi
aHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9wcm9jZXNzLW5leHRpY2stYXJncy8tL3Byb2Nl
c3MtbmV4dGljay1hcmdzLTEuMC43LnRneiMxNTBlMjBiNzU2NTkwYWQzZjkxMDkzZjI1YTRmMmFk
OGJmZjMwYmEzIgorCitwcm9jZXNzQF4wLjExLjA6CisgIHZlcnNpb24gIjAuMTEuOSIKKyAgcmVz
b2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vcHJvY2Vzcy8tL3Byb2Nlc3MtMC4x
MS45LnRneiM3YmQ1YWQyMWFhNjI1M2U3ZGE4NjgyMjY0ZjFlMTFkMTFjMDMxOGMxIgorCitwcm9n
cmVzc0BeMS4xLjg6CisgIHZlcnNpb24gIjEuMS44IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdp
c3RyeS55YXJucGtnLmNvbS9wcm9ncmVzcy8tL3Byb2dyZXNzLTEuMS44LnRneiNlMjYwYzc4ZjYx
NjFjZGQ5YjBlNTZjYzNlMGE4NWRlMTdjN2E1N2JlIgorCitwcm90by1saXN0QH4xLjIuMToKKyAg
dmVyc2lvbiAiMS4yLjQiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29t
L3Byb3RvLWxpc3QvLS9wcm90by1saXN0LTEuMi40LnRneiMyMTJkNWJmZTEzMTgzMDZhNDIwZjY0
MDJiOGUyNmZmMzk2NDdhODQ5IgorCitwcm94eS1hZGRyQH4xLjEuMjoKKyAgdmVyc2lvbiAiMS4x
LjIiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3Byb3h5LWFkZHIv
LS9wcm94eS1hZGRyLTEuMS4yLnRneiNiNGNjNWYyMjYxMGQ5NTM1ODI0YzEyM2FlZjlkM2NmNzNj
NDBiYTM3IgorICBkZXBlbmRlbmNpZXM6CisgICAgZm9yd2FyZGVkICJ+MC4xLjAiCisgICAgaXBh
ZGRyLmpzICIxLjEuMSIKKworcHJyQH4wLjAuMDoKKyAgdmVyc2lvbiAiMC4wLjAiCisgIHJlc29s
dmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3Byci8tL3Byci0wLjAuMC50Z3ojMWE4
NGI4NTkwODMyNTUwMTQxMTg1M2QwMDgxZWUzZmE4NmUyOTI2YSIKKworcHNldWRvbWFwQF4xLjAu
MToKKyAgdmVyc2lvbiAiMS4wLjIiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5w
a2cuY29tL3BzZXVkb21hcC8tL3BzZXVkb21hcC0xLjAuMi50Z3ojZjA1MmEyOGRhNzBlNjE4OTE3
ZWYwYThhYzM0YzFhZTVhNjgyODZiMyIKKworcHVueWNvZGVAXjEuMi40LCBwdW55Y29kZUBeMS40
LjE6CisgIHZlcnNpb24gIjEuNC4xIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJu
cGtnLmNvbS9wdW55Y29kZS8tL3B1bnljb2RlLTEuNC4xLnRneiNjMGQ1YTYzYjI3MTg4MDBhZDhl
MWViMGZhNTI2OWM4NGRkNDE4NDVlIgorCitwdW55Y29kZUAxLjMuMjoKKyAgdmVyc2lvbiAiMS4z
LjIiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3B1bnljb2RlLy0v
cHVueWNvZGUtMS4zLjIudGd6Izk2NTNhMDM2ZmI3YzFlZTQyMzQyZjIzMjVjY2VlZmVhMzkyNmM0
OGQiCisKK3FAXjEuMS4yOgorICB2ZXJzaW9uICIxLjQuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8v
cmVnaXN0cnkueWFybnBrZy5jb20vcS8tL3EtMS40LjEudGd6IzU1NzA1YmNkOTNjNWYzNjczNTMw
YzJjMmNiYzBjMmIzYWRkYzI4NmUiCisKK3FzQH42LjMuMDoKKyAgdmVyc2lvbiAiNi4zLjAiCisg
IHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3FzLy0vcXMtNi4zLjAudGd6
I2Y0MDNiMjY0ZjIzYmMwMTIyOGM3NDEzMWI0MDdmMThkNWVhNWQ0NDIiCisKK3FzQDYuMi4wOgor
ICB2ZXJzaW9uICI2LjIuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5j
b20vcXMvLS9xcy02LjIuMC50Z3ojM2I3ODQ4YzAzYzJkZWNlNjlhOTUyMmIwZmFlOGM0MTI2ZDc0
NWYzYiIKKworcXVlcnktc3RyaW5nQF40LjEuMDoKKyAgdmVyc2lvbiAiNC4yLjMiCisgIHJlc29s
dmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3F1ZXJ5LXN0cmluZy8tL3F1ZXJ5LXN0
cmluZy00LjIuMy50Z3ojOWYyNzI3M2QyMDdhMjVhOGVlNGM3YjhjNzRkY2Q0NWQ1NTZkYjgyMiIK
KyAgZGVwZW5kZW5jaWVzOgorICAgIG9iamVjdC1hc3NpZ24gIl40LjEuMCIKKyAgICBzdHJpY3Qt
dXJpLWVuY29kZSAiXjEuMC4wIgorCitxdWVyeXN0cmluZy1lczNAXjAuMi4wOgorICB2ZXJzaW9u
ICIwLjIuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vcXVlcnlz
dHJpbmctZXMzLy0vcXVlcnlzdHJpbmctZXMzLTAuMi4xLnRneiM5ZWM2MWY3OTA0OTg3NTcwN2Q2
OTQxNDU5NmZkOTA3YTRkNzExZTczIgorCitxdWVyeXN0cmluZ0BeMC4yLjAsIHF1ZXJ5c3RyaW5n
QDAuMi4wOgorICB2ZXJzaW9uICIwLjIuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnku
eWFybnBrZy5jb20vcXVlcnlzdHJpbmcvLS9xdWVyeXN0cmluZy0wLjIuMC50Z3ojYjIwOTg0OTIw
M2JiMjVkZjgyMGRhNzU2ZTc0NzAwNTg3ODUyMTYyMCIKKworcmFuZG9tYXRpY0BeMS4xLjM6Cisg
IHZlcnNpb24gIjEuMS42IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNv
bS9yYW5kb21hdGljLy0vcmFuZG9tYXRpYy0xLjEuNi50Z3ojMTEwZGNhYmZmMzk3ZTlkY2ZmN2Mw
Nzg5Y2NjMGE0OWFkZjFlYzViYiIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGlzLW51bWJlciAiXjIu
MC4yIgorICAgIGtpbmQtb2YgIl4zLjAuMiIKKworcmFuZ2UtcGFyc2VyQF4xLjAuMywgcmFuZ2Ut
cGFyc2VyQH4xLjIuMDoKKyAgdmVyc2lvbiAiMS4yLjAiCisgIHJlc29sdmVkICJodHRwczovL3Jl
Z2lzdHJ5Lnlhcm5wa2cuY29tL3JhbmdlLXBhcnNlci8tL3JhbmdlLXBhcnNlci0xLjIuMC50Z3oj
ZjQ5YmU2YjQ4Nzg5NGRkYzQwZGNjOTRhMzIyZjYxMTA5MmUwMGQ1ZSIKKworcmNAfjEuMS42Ogor
ICB2ZXJzaW9uICIxLjEuNiIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5j
b20vcmMvLS9yYy0xLjEuNi50Z3ojNDM2NTFiNzZiNmFlNTNiNWM4MDJmMTE1MWZhM2ZjM2IwNTk5
NjljOSIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGRlZXAtZXh0ZW5kICJ+MC40LjAiCisgICAgaW5p
ICJ+MS4zLjAiCisgICAgbWluaW1pc3QgIl4xLjIuMCIKKyAgICBzdHJpcC1qc29uLWNvbW1lbnRz
ICJ+MS4wLjQiCisKKyJyZWFkYWJsZS1zdHJlYW1AXjIuMC4wIHx8IF4xLjEuMTMiLCByZWFkYWJs
ZS1zdHJlYW1AXjIuMC4xLCByZWFkYWJsZS1zdHJlYW1AXjIuMC4yLCByZWFkYWJsZS1zdHJlYW1A
XjIuMC41LCByZWFkYWJsZS1zdHJlYW1AXjIuMS4wOgorICB2ZXJzaW9uICIyLjIuMiIKKyAgcmVz
b2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vcmVhZGFibGUtc3RyZWFtLy0vcmVh
ZGFibGUtc3RyZWFtLTIuMi4yLnRneiNhOWU2ZmVjM2M3ZGRhODVmOGJiMWIzYmE3MDI4NjA0NTU2
ZmM4MjVlIgorICBkZXBlbmRlbmNpZXM6CisgICAgYnVmZmVyLXNoaW1zICJeMS4wLjAiCisgICAg
Y29yZS11dGlsLWlzICJ+MS4wLjAiCisgICAgaW5oZXJpdHMgIn4yLjAuMSIKKyAgICBpc2FycmF5
ICJ+MS4wLjAiCisgICAgcHJvY2Vzcy1uZXh0aWNrLWFyZ3MgIn4xLjAuNiIKKyAgICBzdHJpbmdf
ZGVjb2RlciAifjAuMTAueCIKKyAgICB1dGlsLWRlcHJlY2F0ZSAifjEuMC4xIgorCityZWFkYWJs
ZS1zdHJlYW1AfjIuMC4wOgorICB2ZXJzaW9uICIyLjAuNiIKKyAgcmVzb2x2ZWQgImh0dHBzOi8v
cmVnaXN0cnkueWFybnBrZy5jb20vcmVhZGFibGUtc3RyZWFtLy0vcmVhZGFibGUtc3RyZWFtLTIu
MC42LnRneiM4ZjkwMzQxZTY4YTUzY2NjOTI4Nzg4ZGFjZmNkMTFiMzZlYjliNzhlIgorICBkZXBl
bmRlbmNpZXM6CisgICAgY29yZS11dGlsLWlzICJ+MS4wLjAiCisgICAgaW5oZXJpdHMgIn4yLjAu
MSIKKyAgICBpc2FycmF5ICJ+MS4wLjAiCisgICAgcHJvY2Vzcy1uZXh0aWNrLWFyZ3MgIn4xLjAu
NiIKKyAgICBzdHJpbmdfZGVjb2RlciAifjAuMTAueCIKKyAgICB1dGlsLWRlcHJlY2F0ZSAifjEu
MC4xIgorCityZWFkYWJsZS1zdHJlYW1AfjIuMS40OgorICB2ZXJzaW9uICIyLjEuNSIKKyAgcmVz
b2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vcmVhZGFibGUtc3RyZWFtLy0vcmVh
ZGFibGUtc3RyZWFtLTIuMS41LnRneiM2NmZhOGI3MjBlMTQzOGIzNjQ2ODFmMmFkMWE2M2M2MTg0
NDhjOWQwIgorICBkZXBlbmRlbmNpZXM6CisgICAgYnVmZmVyLXNoaW1zICJeMS4wLjAiCisgICAg
Y29yZS11dGlsLWlzICJ+MS4wLjAiCisgICAgaW5oZXJpdHMgIn4yLjAuMSIKKyAgICBpc2FycmF5
ICJ+MS4wLjAiCisgICAgcHJvY2Vzcy1uZXh0aWNrLWFyZ3MgIn4xLjAuNiIKKyAgICBzdHJpbmdf
ZGVjb2RlciAifjAuMTAueCIKKyAgICB1dGlsLWRlcHJlY2F0ZSAifjEuMC4xIgorCityZWFkYWJs
ZS1zdHJlYW1AMS4wOgorICB2ZXJzaW9uICIxLjAuMzQiCisgIHJlc29sdmVkICJodHRwczovL3Jl
Z2lzdHJ5Lnlhcm5wa2cuY29tL3JlYWRhYmxlLXN0cmVhbS8tL3JlYWRhYmxlLXN0cmVhbS0xLjAu
MzQudGd6IzEyNTgyMGUzNGJjODQyZDJmMmFhYWZhZmU0YzI5MTZlZTMyYzE1N2MiCisgIGRlcGVu
ZGVuY2llczoKKyAgICBjb3JlLXV0aWwtaXMgIn4xLjAuMCIKKyAgICBpbmhlcml0cyAifjIuMC4x
IgorICAgIGlzYXJyYXkgIjAuMC4xIgorICAgIHN0cmluZ19kZWNvZGVyICJ+MC4xMC54IgorCity
ZWFkZGlycEBeMi4wLjA6CisgIHZlcnNpb24gIjIuMS4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9y
ZWdpc3RyeS55YXJucGtnLmNvbS9yZWFkZGlycC8tL3JlYWRkaXJwLTIuMS4wLnRneiM0ZWQwYWQw
NjBkZjMwNzMzMDBjNDg0NDAzNzNmNzJkMWNjNjQyZDc4IgorICBkZXBlbmRlbmNpZXM6CisgICAg
Z3JhY2VmdWwtZnMgIl40LjEuMiIKKyAgICBtaW5pbWF0Y2ggIl4zLjAuMiIKKyAgICByZWFkYWJs
ZS1zdHJlYW0gIl4yLjAuMiIKKyAgICBzZXQtaW1tZWRpYXRlLXNoaW0gIl4xLjAuMSIKKworcmVh
ZGxpbmUyQF4xLjAuMToKKyAgdmVyc2lvbiAiMS4wLjEiCisgIHJlc29sdmVkICJodHRwczovL3Jl
Z2lzdHJ5Lnlhcm5wa2cuY29tL3JlYWRsaW5lMi8tL3JlYWRsaW5lMi0xLjAuMS50Z3ojNDEwNTk2
MDhmZmMxNTQ3NTdiNzE1ZDk5ODlkMTk5ZmZiZjM3MmUzNSIKKyAgZGVwZW5kZW5jaWVzOgorICAg
IGNvZGUtcG9pbnQtYXQgIl4xLjAuMCIKKyAgICBpcy1mdWxsd2lkdGgtY29kZS1wb2ludCAiXjEu
MC4wIgorICAgIG11dGUtc3RyZWFtICIwLjAuNSIKKworcmVjaG9pckBeMC42LjI6CisgIHZlcnNp
b24gIjAuNi4yIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9yZWNo
b2lyLy0vcmVjaG9pci0wLjYuMi50Z3ojODUyMDRiNTRkYmE4MmQ1NzQyZTI4Yzk2NzU2ZWY0M2Fm
NTBlMzM4NCIKKyAgZGVwZW5kZW5jaWVzOgorICAgIHJlc29sdmUgIl4xLjEuNiIKKworcmVkdWNl
LWNzcy1jYWxjQF4xLjIuNjoKKyAgdmVyc2lvbiAiMS4zLjAiCisgIHJlc29sdmVkICJodHRwczov
L3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3JlZHVjZS1jc3MtY2FsYy8tL3JlZHVjZS1jc3MtY2FsYy0x
LjMuMC50Z3ojNzQ3YzkxNGUwNDk2MTRhNGM5Y2ZiYmE2Mjk4NzFhZDFkMjkyNzcxNiIKKyAgZGVw
ZW5kZW5jaWVzOgorICAgIGJhbGFuY2VkLW1hdGNoICJeMC40LjIiCisgICAgbWF0aC1leHByZXNz
aW9uLWV2YWx1YXRvciAiXjEuMi4xNCIKKyAgICByZWR1Y2UtZnVuY3Rpb24tY2FsbCAiXjEuMC4x
IgorCityZWR1Y2UtZnVuY3Rpb24tY2FsbEBeMS4wLjE6CisgIHZlcnNpb24gIjEuMC4yIgorICBy
ZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9yZWR1Y2UtZnVuY3Rpb24tY2Fs
bC8tL3JlZHVjZS1mdW5jdGlvbi1jYWxsLTEuMC4yLnRneiM1YTIwMGJmOTJlMGUzNzc1MTc1MmZl
NDViMGFiMzMwZmQ0YjZiZTk5IgorICBkZXBlbmRlbmNpZXM6CisgICAgYmFsYW5jZWQtbWF0Y2gg
Il4wLjQuMiIKKworcmVnZW5lcmF0ZUBeMS4yLjE6CisgIHZlcnNpb24gIjEuMy4yIgorICByZXNv
bHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9yZWdlbmVyYXRlLy0vcmVnZW5lcmF0
ZS0xLjMuMi50Z3ojZDE5NDFjNjdiYWQ0MzdlMWJlNzY0MzNhZGQ1YjM4NWY5NWIxOTI2MCIKKwor
cmVnZW5lcmF0b3ItcnVudGltZUBeMC45LjU6CisgIHZlcnNpb24gIjAuOS42IgorICByZXNvbHZl
ZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9yZWdlbmVyYXRvci1ydW50aW1lLy0vcmVn
ZW5lcmF0b3ItcnVudGltZS0wLjkuNi50Z3ojZDMzZWI5NWQwZDIwMDFhNGJlMzk2NTk3MDdjNTFi
MGNiNzFjZTAyOSIKKworcmVnZXgtY2FjaGVAXjAuNC4yOgorICB2ZXJzaW9uICIwLjQuMyIKKyAg
cmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vcmVnZXgtY2FjaGUvLS9yZWdl
eC1jYWNoZS0wLjQuMy50Z3ojOWIxYTZjMzVkNGQwZGZjZWY1NzExYWU2NTFlOGU5ZDNkNzExNDE0
NSIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGlzLWVxdWFsLXNoYWxsb3cgIl4wLjEuMyIKKyAgICBp
cy1wcmltaXRpdmUgIl4yLjAuMCIKKworcmVnZXhwdS1jb3JlQF4xLjAuMDoKKyAgdmVyc2lvbiAi
MS4wLjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3JlZ2V4cHUt
Y29yZS8tL3JlZ2V4cHUtY29yZS0xLjAuMC50Z3ojODZhNzYzZjU4ZWU0ZDdjMmY2YjEwMmU0NzY0
MDUwZGU3ZWQ5MGM2YiIKKyAgZGVwZW5kZW5jaWVzOgorICAgIHJlZ2VuZXJhdGUgIl4xLjIuMSIK
KyAgICByZWdqc2dlbiAiXjAuMi4wIgorICAgIHJlZ2pzcGFyc2VyICJeMC4xLjQiCisKK3JlZ2V4
cHUtY29yZUBeMi4wLjA6CisgIHZlcnNpb24gIjIuMC4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9y
ZWdpc3RyeS55YXJucGtnLmNvbS9yZWdleHB1LWNvcmUvLS9yZWdleHB1LWNvcmUtMi4wLjAudGd6
IzQ5ZDAzODgzN2I4ZGNmOGJmYTViOWE0MjEzOTkzOGU2ZWEyYWUyNDAiCisgIGRlcGVuZGVuY2ll
czoKKyAgICByZWdlbmVyYXRlICJeMS4yLjEiCisgICAgcmVnanNnZW4gIl4wLjIuMCIKKyAgICBy
ZWdqc3BhcnNlciAiXjAuMS40IgorCityZWdqc2dlbkBeMC4yLjA6CisgIHZlcnNpb24gIjAuMi4w
IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9yZWdqc2dlbi8tL3Jl
Z2pzZ2VuLTAuMi4wLnRneiM2YzAxNmFkZWFjNTU0Zjc1ODIzZmUzN2FjMDViOTJkNWE0ZWRiMWY3
IgorCityZWdqc3BhcnNlckBeMC4xLjQ6CisgIHZlcnNpb24gIjAuMS41IgorICByZXNvbHZlZCAi
aHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9yZWdqc3BhcnNlci8tL3JlZ2pzcGFyc2VyLTAu
MS41LnRneiM3ZWU4Zjg0ZGM2ZmE3OTJkM2ZkMGFlMjI4ZDI0YmQ5NDllYWQyMDVjIgorICBkZXBl
bmRlbmNpZXM6CisgICAganNlc2MgIn4wLjUuMCIKKworcmVsYXRldXJsQDAuMi54OgorICB2ZXJz
aW9uICIwLjIuNyIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vcmVs
YXRldXJsLy0vcmVsYXRldXJsLTAuMi43LnRneiM1NGRiZjM3N2U1MTQ0MGFjYTkwYTRjZDI3NDYw
MGQzZmYyZDg4OGE5IgorCityZW5kZXJraWRAfjIuMC4wOgorICB2ZXJzaW9uICIyLjAuMCIKKyAg
cmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vcmVuZGVya2lkLy0vcmVuZGVy
a2lkLTIuMC4wLnRneiMxODU5NzUzZTdhNWFkYmYzNTQ0M2FiYTBkNGU0NTc5ZTc4YWJlZTg1Igor
ICBkZXBlbmRlbmNpZXM6CisgICAgY3NzLXNlbGVjdCAiXjEuMS4wIgorICAgIGRvbS1jb252ZXJ0
ZXIgIn4wLjEiCisgICAgaHRtbHBhcnNlcjIgIn4zLjMuMCIKKyAgICBzdHJpcC1hbnNpICJeMy4w
LjAiCisgICAgdXRpbGEgIn4wLjMiCisKK3JlcGVhdC1lbGVtZW50QF4xLjEuMjoKKyAgdmVyc2lv
biAiMS4xLjIiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3JlcGVh
dC1lbGVtZW50Ly0vcmVwZWF0LWVsZW1lbnQtMS4xLjIudGd6I2VmMDg5YTE3OGQxNDgzYmFhZTRk
OTNlYjk4YjRmOWU0ZTExZDk5MGEiCisKK3JlcGVhdC1zdHJpbmdAXjEuNS4yOgorICB2ZXJzaW9u
ICIxLjYuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vcmVwZWF0
LXN0cmluZy8tL3JlcGVhdC1zdHJpbmctMS42LjEudGd6IzhkY2FlNDcwZTFjODhhYmMyZDYwMGZm
ZjRhNzc2Mjg2ZGE3NWU2MzciCisKK3JlcGVhdGluZ0BeMi4wLjA6CisgIHZlcnNpb24gIjIuMC4x
IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9yZXBlYXRpbmcvLS9y
ZXBlYXRpbmctMi4wLjEudGd6IzUyMTRjNTNhOTI2ZDM1NTI3MDc1MjdmYmFiNDE1ZGJjMDhkMDZk
ZGEiCisgIGRlcGVuZGVuY2llczoKKyAgICBpcy1maW5pdGUgIl4xLjAuMCIKKworcmVxdWVzdEBe
Mi43OS4wOgorICB2ZXJzaW9uICIyLjc5LjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5
Lnlhcm5wa2cuY29tL3JlcXVlc3QvLS9yZXF1ZXN0LTIuNzkuMC50Z3ojNGRmZTViZjZiZThiOGNk
YzM3ZmNmOTNlMDRiNjU1Nzc3MjI3MTBkZSIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGF3cy1zaWdu
MiAifjAuNi4wIgorICAgIGF3czQgIl4xLjIuMSIKKyAgICBjYXNlbGVzcyAifjAuMTEuMCIKKyAg
ICBjb21iaW5lZC1zdHJlYW0gIn4xLjAuNSIKKyAgICBleHRlbmQgIn4zLjAuMCIKKyAgICBmb3Jl
dmVyLWFnZW50ICJ+MC42LjEiCisgICAgZm9ybS1kYXRhICJ+Mi4xLjEiCisgICAgaGFyLXZhbGlk
YXRvciAifjIuMC42IgorICAgIGhhd2sgIn4zLjEuMyIKKyAgICBodHRwLXNpZ25hdHVyZSAifjEu
MS4wIgorICAgIGlzLXR5cGVkYXJyYXkgIn4xLjAuMCIKKyAgICBpc3N0cmVhbSAifjAuMS4yIgor
ICAgIGpzb24tc3RyaW5naWZ5LXNhZmUgIn41LjAuMSIKKyAgICBtaW1lLXR5cGVzICJ+Mi4xLjci
CisgICAgb2F1dGgtc2lnbiAifjAuOC4xIgorICAgIHFzICJ+Ni4zLjAiCisgICAgc3RyaW5nc3Ry
ZWFtICJ+MC4wLjQiCisgICAgdG91Z2gtY29va2llICJ+Mi4zLjAiCisgICAgdHVubmVsLWFnZW50
ICJ+MC40LjEiCisgICAgdXVpZCAiXjMuMC4wIgorCityZXF1aXJlLXVuY2FjaGVkQF4xLjAuMjoK
KyAgdmVyc2lvbiAiMS4wLjMiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cu
Y29tL3JlcXVpcmUtdW5jYWNoZWQvLS9yZXF1aXJlLXVuY2FjaGVkLTEuMC4zLnRneiM0ZTBkNTZk
NmM5NjYyZmQzMWU0MzAxMWM0Yjk1YWE0OTk1NTQyMWQzIgorICBkZXBlbmRlbmNpZXM6CisgICAg
Y2FsbGVyLXBhdGggIl4wLjEuMCIKKyAgICByZXNvbHZlLWZyb20gIl4xLjAuMCIKKworcmVxdWly
ZXMtcG9ydEAxLngueDoKKyAgdmVyc2lvbiAiMS4wLjAiCisgIHJlc29sdmVkICJodHRwczovL3Jl
Z2lzdHJ5Lnlhcm5wa2cuY29tL3JlcXVpcmVzLXBvcnQvLS9yZXF1aXJlcy1wb3J0LTEuMC4wLnRn
eiM5MjVkMjYwMWQzOWFjNDg1ZTA5MWNmMGRhNWM2ZTY5NGRjM2RjYWZmIgorCityZXNvbHZlLWZy
b21AXjEuMC4wOgorICB2ZXJzaW9uICIxLjAuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0
cnkueWFybnBrZy5jb20vcmVzb2x2ZS1mcm9tLy0vcmVzb2x2ZS1mcm9tLTEuMC4xLnRneiMyNmNi
ZmU5MzVkMWFlZWVhYmIyOWJjM2ZlNWFlYjAxZTkzZDQ0MjI2IgorCityZXNvbHZlQF4xLjEuNjoK
KyAgdmVyc2lvbiAiMS4xLjciCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cu
Y29tL3Jlc29sdmUvLS9yZXNvbHZlLTEuMS43LnRneiMyMDMxMTRkODJhZDJjNWVkOWU4ZTA0MTFi
MzkzMjg3NWU4ODllOTdiIgorCityZXN0b3JlLWN1cnNvckBeMS4wLjE6CisgIHZlcnNpb24gIjEu
MC4xIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9yZXN0b3JlLWN1
cnNvci8tL3Jlc3RvcmUtY3Vyc29yLTEuMC4xLnRneiMzNDY2MWY0Njg4NjMyN2ZlZDI5OTE0Nzkx
NTIyNTJkZjkyZGFhNTQxIgorICBkZXBlbmRlbmNpZXM6CisgICAgZXhpdC1ob29rICJeMS4wLjAi
CisgICAgb25ldGltZSAiXjEuMC4wIgorCityaWdodC1hbGlnbkBeMC4xLjE6CisgIHZlcnNpb24g
IjAuMS4zIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9yaWdodC1h
bGlnbi8tL3JpZ2h0LWFsaWduLTAuMS4zLnRneiM2MTMzOWI3MjJmZTZhMzUxNTY4OTIxMGQyNGUx
NGM5NjE0ODYxM2VmIgorICBkZXBlbmRlbmNpZXM6CisgICAgYWxpZ24tdGV4dCAiXjAuMS4xIgor
CityaW1yYWZAXjIuMi44LCByaW1yYWZAfjIuNS4xLCByaW1yYWZAfjIuNS40LCByaW1yYWZAMjoK
KyAgdmVyc2lvbiAiMi41LjQiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cu
Y29tL3JpbXJhZi8tL3JpbXJhZi0yLjUuNC50Z3ojOTY4MDAwOTNjYmYxYTBjODZiZDk1YjQ2MjU0
Njc1MzVjMjlkZmEwNCIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGdsb2IgIl43LjAuNSIKKworcmlw
ZW1kMTYwQDAuMi4wOgorICB2ZXJzaW9uICIwLjIuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVn
aXN0cnkueWFybnBrZy5jb20vcmlwZW1kMTYwLy0vcmlwZW1kMTYwLTAuMi4wLnRneiMyYmYxOThi
ZGUxNjdjYWNmYTUxYzBhOTI4ZTg0YjY4YmJlMTcxZmNlIgorCitydW4tYXN5bmNAXjAuMS4wOgor
ICB2ZXJzaW9uICIwLjEuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5j
b20vcnVuLWFzeW5jLy0vcnVuLWFzeW5jLTAuMS4wLnRneiNjOGFkNGE1ZTExMDY2MWU0MDJhN2Qy
MWI1MzBlMDA5ZjI1ZjhlMzg5IgorICBkZXBlbmRlbmNpZXM6CisgICAgb25jZSAiXjEuMy4wIgor
CityeC1saXRlQF4zLjEuMjoKKyAgdmVyc2lvbiAiMy4xLjIiCisgIHJlc29sdmVkICJodHRwczov
L3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3J4LWxpdGUvLS9yeC1saXRlLTMuMS4yLnRneiMxOWNlNTAy
Y2E1NzI2NjVmM2I2NDdiMTA5MzlmOTdmZDE2MTVmMTAyIgorCitzYXhAfjEuMi4xOgorICB2ZXJz
aW9uICIxLjIuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vc2F4
Ly0vc2F4LTEuMi4xLnRneiM3YjhlNjU2MTkwYjIyOGU4MWE2NmFlYTc0ODQ4MGQ4MjhjZDJkMzdh
IgorCitzZW12ZXJAXjUuMy4wLCBzZW12ZXJAfjUuMy4wOgorICB2ZXJzaW9uICI1LjMuMCIKKyAg
cmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vc2VtdmVyLy0vc2VtdmVyLTUu
My4wLnRneiM5YjJjZTVkM2RlMDJkMTdjNjAxMmFkMzI2YWE2YjRkMGNmNTRmOTRmIgorCitzZW5k
QDAuMTQuMToKKyAgdmVyc2lvbiAiMC4xNC4xIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3Ry
eS55YXJucGtnLmNvbS9zZW5kLy0vc2VuZC0wLjE0LjEudGd6I2E5NTQ5ODQzMjUzOTJmNTE1MzJh
Nzc2MDc2MGU0NTk1OThjODlmN2EiCisgIGRlcGVuZGVuY2llczoKKyAgICBkZWJ1ZyAifjIuMi4w
IgorICAgIGRlcGQgIn4xLjEuMCIKKyAgICBkZXN0cm95ICJ+MS4wLjQiCisgICAgZW5jb2RldXJs
ICJ+MS4wLjEiCisgICAgZXNjYXBlLWh0bWwgIn4xLjAuMyIKKyAgICBldGFnICJ+MS43LjAiCisg
ICAgZnJlc2ggIjAuMy4wIgorICAgIGh0dHAtZXJyb3JzICJ+MS41LjAiCisgICAgbWltZSAiMS4z
LjQiCisgICAgbXMgIjAuNy4xIgorICAgIG9uLWZpbmlzaGVkICJ+Mi4zLjAiCisgICAgcmFuZ2Ut
cGFyc2VyICJ+MS4yLjAiCisgICAgc3RhdHVzZXMgIn4xLjMuMCIKKworc2VydmUtc3RhdGljQH4x
LjExLjE6CisgIHZlcnNpb24gIjEuMTEuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnku
eWFybnBrZy5jb20vc2VydmUtc3RhdGljLy0vc2VydmUtc3RhdGljLTEuMTEuMS50Z3ojZDZjY2U3
NjkzNTA1ZjczM2M3NTlkZTU3YmVmYzFhZjc2YzBmMDgwNSIKKyAgZGVwZW5kZW5jaWVzOgorICAg
IGVuY29kZXVybCAifjEuMC4xIgorICAgIGVzY2FwZS1odG1sICJ+MS4wLjMiCisgICAgcGFyc2V1
cmwgIn4xLjMuMSIKKyAgICBzZW5kICIwLjE0LjEiCisKK3NldC1ibG9ja2luZ0B+Mi4wLjA6Cisg
IHZlcnNpb24gIjIuMC4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNv
bS9zZXQtYmxvY2tpbmcvLS9zZXQtYmxvY2tpbmctMi4wLjAudGd6IzA0NWY5NzgyZDAxMWFlOWE2
ODAzZGRkMzgyYjI0MzkyYjNkODkwZjciCisKK3NldC1pbW1lZGlhdGUtc2hpbUBeMS4wLjE6Cisg
IHZlcnNpb24gIjEuMC4xIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNv
bS9zZXQtaW1tZWRpYXRlLXNoaW0vLS9zZXQtaW1tZWRpYXRlLXNoaW0tMS4wLjEudGd6IzRiMmIx
YjI3ZWI4MDhhOWY4ZGNjNDgxYTU4ZTVlNTZmNTk5ZjNmNjEiCisKK3NldGltbWVkaWF0ZUBeMS4w
LjQ6CisgIHZlcnNpb24gIjEuMC41IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJu
cGtnLmNvbS9zZXRpbW1lZGlhdGUvLS9zZXRpbW1lZGlhdGUtMS4wLjUudGd6IzI5MGNiYjIzMmUz
MDY5NDJkN2Q3ZWE5YjgzNzMyYWI3ODU2ZjgyODUiCisKK3NldHByb3RvdHlwZW9mQDEuMC4yOgor
ICB2ZXJzaW9uICIxLjAuMiIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5j
b20vc2V0cHJvdG90eXBlb2YvLS9zZXRwcm90b3R5cGVvZi0xLjAuMi50Z3ojODFhNTUyMTQxZWMx
MDRiODhlODljZTM4MzEwM2FkNWM2NjU2NGQwOCIKKworc2hhLmpzQDIuMi42OgorICB2ZXJzaW9u
ICIyLjIuNiIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vc2hhLmpz
Ly0vc2hhLmpzLTIuMi42LnRneiMxN2RkZWRkYzVmNzIyZmI2NjUwMTY1ODg5NTQ2MTk3Nzg2NzMx
NWJhIgorCitzaGVsbGpzQF4wLjcuNCwgc2hlbGxqc0BeMC43LjU6CisgIHZlcnNpb24gIjAuNy41
IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9zaGVsbGpzLy0vc2hl
bGxqcy0wLjcuNS50Z3ojMmVlZjdhNTBhMjFlMWNjZjM3ZGEwMGRmNzY3ZWM2OWUzMGFkMDY3NSIK
KyAgZGVwZW5kZW5jaWVzOgorICAgIGdsb2IgIl43LjAuMCIKKyAgICBpbnRlcnByZXQgIl4xLjAu
MCIKKyAgICByZWNob2lyICJeMC42LjIiCisKK3NpZ211bmRAXjEuMC4xOgorICB2ZXJzaW9uICIx
LjAuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vc2lnbXVuZC8t
L3NpZ211bmQtMS4wLjEudGd6IzNmZjIxZjE5OGNhZDIxNzVmOWYzYjc4MTg1M2ZkOTRkMGQxOWI1
OTAiCisKK3NpZ25hbC1leGl0QF4zLjAuMDoKKyAgdmVyc2lvbiAiMy4wLjIiCisgIHJlc29sdmVk
ICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3NpZ25hbC1leGl0Ly0vc2lnbmFsLWV4aXQt
My4wLjIudGd6I2I1ZmRjMDhmMTI4N2VhMTE3ODYyOGU0MTVlMjUxMzJiNzM2NDZjNmQiCisKK3Ns
YXNoQF4xLjAuMDoKKyAgdmVyc2lvbiAiMS4wLjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lz
dHJ5Lnlhcm5wa2cuY29tL3NsYXNoLy0vc2xhc2gtMS4wLjAudGd6I2M0MWYyZjZjMzlmYzE2ZDFj
ZDE3YWQ0YjVkODk2MTE0YWU0NzBkNTUiCisKK3NsaWNlLWFuc2lAMC4wLjQ6CisgIHZlcnNpb24g
IjAuMC40IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9zbGljZS1h
bnNpLy0vc2xpY2UtYW5zaS0wLjAuNC50Z3ojZWRiZjg5MDNmNjZmN2NlMmY4ZWFmZDZjZWVkNjVl
MjY0YzgzMWIzNSIKKworc250cEAxLngueDoKKyAgdmVyc2lvbiAiMS4wLjkiCisgIHJlc29sdmVk
ICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3NudHAvLS9zbnRwLTEuMC45LnRneiM2NTQx
MTg0Y2M5MGFlZWE2YzZlN2IzNWUyNjU5MDgyNDQzYzY2MTk4IgorICBkZXBlbmRlbmNpZXM6Cisg
ICAgaG9layAiMi54LngiCisKK3NvcnQta2V5c0BeMS4wLjA6CisgIHZlcnNpb24gIjEuMS4yIgor
ICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9zb3J0LWtleXMvLS9zb3J0
LWtleXMtMS4xLjIudGd6IzQ0MWI2ZDRkMzQ2Nzk4ZjFiNGU0OWU4OTIwYWRmYmEwZTU0M2Y5YWQi
CisgIGRlcGVuZGVuY2llczoKKyAgICBpcy1wbGFpbi1vYmogIl4xLjAuMCIKKworc291cmNlLWxp
c3QtbWFwQF4wLjEuNCwgc291cmNlLWxpc3QtbWFwQH4wLjEuMCwgc291cmNlLWxpc3QtbWFwQH4w
LjEuNzoKKyAgdmVyc2lvbiAiMC4xLjciCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlh
cm5wa2cuY29tL3NvdXJjZS1saXN0LW1hcC8tL3NvdXJjZS1saXN0LW1hcC0wLjEuNy50Z3ojZDRi
NWNlMmE0NjUzNWM3MmM3ZTg1MjdjNzFhNzdkMjUwNjE4MTcyZSIKKworc291cmNlLW1hcC1zdXBw
b3J0QF4wLjQuMjoKKyAgdmVyc2lvbiAiMC40LjYiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lz
dHJ5Lnlhcm5wa2cuY29tL3NvdXJjZS1tYXAtc3VwcG9ydC8tL3NvdXJjZS1tYXAtc3VwcG9ydC0w
LjQuNi50Z3ojMzI1NTJhYTY0YjQ1ODM5MmE4NWVhYjNiMGI1ZWU2MTUyNzE2N2FlYiIKKyAgZGVw
ZW5kZW5jaWVzOgorICAgIHNvdXJjZS1tYXAgIl4wLjUuMyIKKworc291cmNlLW1hcEBeMC41LjAs
IHNvdXJjZS1tYXBAXjAuNS4zLCBzb3VyY2UtbWFwQF4wLjUuNiwgc291cmNlLW1hcEB+MC41LjEs
IHNvdXJjZS1tYXBAfjAuNS4zOgorICB2ZXJzaW9uICIwLjUuNiIKKyAgcmVzb2x2ZWQgImh0dHBz
Oi8vcmVnaXN0cnkueWFybnBrZy5jb20vc291cmNlLW1hcC8tL3NvdXJjZS1tYXAtMC41LjYudGd6
Izc1Y2UzOGY1MmJmMDczM2M1YTdmMGMxMThkODEzMzRhMmJiNWY0MTIiCisKK3NvdXJjZS1tYXBA
fjAuNC4xLCBzb3VyY2UtbWFwQDAuNC54OgorICB2ZXJzaW9uICIwLjQuNCIKKyAgcmVzb2x2ZWQg
Imh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vc291cmNlLW1hcC8tL3NvdXJjZS1tYXAtMC40
LjQudGd6I2ViYTRmNWRhOWMwZGM5OTlkZTY4MDMyZDhiNGY3NjE3MzY1MjAzNmIiCisgIGRlcGVu
ZGVuY2llczoKKyAgICBhbWRlZmluZSAiPj0wLjAuNCIKKworc3ByaW50Zi1qc0B+MS4wLjI6Cisg
IHZlcnNpb24gIjEuMC4zIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNv
bS9zcHJpbnRmLWpzLy0vc3ByaW50Zi1qcy0xLjAuMy50Z3ojMDRlNjkyNmY2NjI4OTUzNTRmM2Rk
MDE1MjAzNjMzYjg1NzI5N2UyYyIKKworc3NocGtAXjEuNy4wOgorICB2ZXJzaW9uICIxLjEwLjEi
CisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3NzaHBrLy0vc3NocGst
MS4xMC4xLnRneiMzMGUxYTVkMzI5MjQ0OTc0YTFhZjYxNTExMzM5ZDU5NWFmNjYzOGIwIgorICBk
ZXBlbmRlbmNpZXM6CisgICAgYXNuMSAifjAuMi4zIgorICAgIGFzc2VydC1wbHVzICJeMS4wLjAi
CisgICAgZGFzaGRhc2ggIl4xLjEyLjAiCisgICAgZ2V0cGFzcyAiXjAuMS4xIgorICBvcHRpb25h
bERlcGVuZGVuY2llczoKKyAgICBiY3J5cHQtcGJrZGYgIl4xLjAuMCIKKyAgICBlY2MtanNibiAi
fjAuMS4xIgorICAgIGpvZGlkMjU1MTkgIl4xLjAuMCIKKyAgICBqc2JuICJ+MC4xLjAiCisgICAg
dHdlZXRuYWNsICJ+MC4xNC4wIgorCisic3RhdHVzZXNAPj0gMS4zLjEgPCAyIiwgc3RhdHVzZXNA
fjEuMy4wOgorICB2ZXJzaW9uICIxLjMuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnku
eWFybnBrZy5jb20vc3RhdHVzZXMvLS9zdGF0dXNlcy0xLjMuMS50Z3ojZmFmNTFiOWViNzRhYWVm
M2IzYWNmNGFkNWY2MWFiZjI0Y2I3YjkzZSIKKworc3RyZWFtLWJyb3dzZXJpZnlAXjIuMC4xOgor
ICB2ZXJzaW9uICIyLjAuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5j
b20vc3RyZWFtLWJyb3dzZXJpZnkvLS9zdHJlYW0tYnJvd3NlcmlmeS0yLjAuMS50Z3ojNjYyNjZl
ZTVmOWJkYjk5NDBhNGU0NTE0Y2FmYjQzYmI3MWU1YzlkYiIKKyAgZGVwZW5kZW5jaWVzOgorICAg
IGluaGVyaXRzICJ+Mi4wLjEiCisgICAgcmVhZGFibGUtc3RyZWFtICJeMi4wLjIiCisKK3N0cmVh
bS1odHRwQF4yLjMuMToKKyAgdmVyc2lvbiAiMi41LjAiCisgIHJlc29sdmVkICJodHRwczovL3Jl
Z2lzdHJ5Lnlhcm5wa2cuY29tL3N0cmVhbS1odHRwLy0vc3RyZWFtLWh0dHAtMi41LjAudGd6IzU4
NWVlZTUxMzIxN2VkOThmZTE5OTgxN2U3MzEzYjZmNzcyYTY4MDIiCisgIGRlcGVuZGVuY2llczoK
KyAgICBidWlsdGluLXN0YXR1cy1jb2RlcyAiXjIuMC4wIgorICAgIGluaGVyaXRzICJeMi4wLjEi
CisgICAgcmVhZGFibGUtc3RyZWFtICJeMi4xLjAiCisgICAgdG8tYXJyYXlidWZmZXIgIl4xLjAu
MCIKKyAgICB4dGVuZCAiXjQuMC4wIgorCitzdHJpY3QtdXJpLWVuY29kZUBeMS4wLjA6CisgIHZl
cnNpb24gIjEuMS4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9z
dHJpY3QtdXJpLWVuY29kZS8tL3N0cmljdC11cmktZW5jb2RlLTEuMS4wLnRneiMyNzliMjI1ZGYx
ZDU4MmIxZjU0ZTY1YWRkZDQzNTJlMThmYWEwNzEzIgorCitzdHJpbmdfZGVjb2RlckBeMC4xMC4y
NSwgc3RyaW5nX2RlY29kZXJAfjAuMTAueDoKKyAgdmVyc2lvbiAiMC4xMC4zMSIKKyAgcmVzb2x2
ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vc3RyaW5nX2RlY29kZXIvLS9zdHJpbmdf
ZGVjb2Rlci0wLjEwLjMxLnRneiM2MmUyMDNiYzQxNzY2YzZjMjhjOWZjODQzMDFkYWIxYzUzMTBm
YTk0IgorCitzdHJpbmctd2lkdGhAXjEuMC4xOgorICB2ZXJzaW9uICIxLjAuMiIKKyAgcmVzb2x2
ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vc3RyaW5nLXdpZHRoLy0vc3RyaW5nLXdp
ZHRoLTEuMC4yLnRneiMxMThiZGY1YjhjZGM1MWEyYTdlNzBkMjExZTA3ZTJiMGI5YjEwN2QzIgor
ICBkZXBlbmRlbmNpZXM6CisgICAgY29kZS1wb2ludC1hdCAiXjEuMC4wIgorICAgIGlzLWZ1bGx3
aWR0aC1jb2RlLXBvaW50ICJeMS4wLjAiCisgICAgc3RyaXAtYW5zaSAiXjMuMC4wIgorCitzdHJp
bmctd2lkdGhAXjIuMC4wOgorICB2ZXJzaW9uICIyLjAuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8v
cmVnaXN0cnkueWFybnBrZy5jb20vc3RyaW5nLXdpZHRoLy0vc3RyaW5nLXdpZHRoLTIuMC4wLnRn
eiM2MzVjNTQzNmNjNzJhNmUwYzM4N2NlY2EyNzhkNGUyZWVjNTI2ODdlIgorICBkZXBlbmRlbmNp
ZXM6CisgICAgaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnQgIl4yLjAuMCIKKyAgICBzdHJpcC1hbnNp
ICJeMy4wLjAiCisKK3N0cmluZ3N0cmVhbUB+MC4wLjQ6CisgIHZlcnNpb24gIjAuMC41IgorICBy
ZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9zdHJpbmdzdHJlYW0vLS9zdHJp
bmdzdHJlYW0tMC4wLjUudGd6IzRlNDg0Y2Q0ZGU1YTBiYmJlZTE4ZTQ2MzA3NzEwYThhODE2MjE4
NzgiCisKK3N0cmlwLWFuc2lAXjMuMC4wLCBzdHJpcC1hbnNpQF4zLjAuMToKKyAgdmVyc2lvbiAi
My4wLjEiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3N0cmlwLWFu
c2kvLS9zdHJpcC1hbnNpLTMuMC4xLnRneiM2YTM4NWZiODg1M2Q5NTJkNWZmMDVkMGU4YWFmOTQy
NzhkYzYzZGNmIgorICBkZXBlbmRlbmNpZXM6CisgICAgYW5zaS1yZWdleCAiXjIuMC4wIgorCitz
dHJpcC1ib21AXjMuMC4wOgorICB2ZXJzaW9uICIzLjAuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8v
cmVnaXN0cnkueWFybnBrZy5jb20vc3RyaXAtYm9tLy0vc3RyaXAtYm9tLTMuMC4wLnRneiMyMzM0
YzE4ZTljNzU5ZjdiZGQ1NmZkZWY3ZTlhZTNkNTg4ZTY4ZWQzIgorCitzdHJpcC1qc29uLWNvbW1l
bnRzQH4xLjAuMSwgc3RyaXAtanNvbi1jb21tZW50c0B+MS4wLjQ6CisgIHZlcnNpb24gIjEuMC40
IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9zdHJpcC1qc29uLWNv
bW1lbnRzLy0vc3RyaXAtanNvbi1jb21tZW50cy0xLjAuNC50Z3ojMWUxNWZiY2FjOTdkM2VlOTli
ZjJkNzNiNGM2NTZiMDgyYmJhZmI5MSIKKworc3VwcG9ydHMtY29sb3JAXjAuMi4wOgorICB2ZXJz
aW9uICIwLjIuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vc3Vw
cG9ydHMtY29sb3IvLS9zdXBwb3J0cy1jb2xvci0wLjIuMC50Z3ojZDkyZGUyNjk0ZWIzZjY3MzIz
OTczZDdhZTNkOGI1NWI0YzIyMTkwYSIKKworc3VwcG9ydHMtY29sb3JAXjIuMC4wOgorICB2ZXJz
aW9uICIyLjAuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vc3Vw
cG9ydHMtY29sb3IvLS9zdXBwb3J0cy1jb2xvci0yLjAuMC50Z3ojNTM1ZDA0NWNlNmI2MzYzZmE0
MDExNzA4NDYyOTk5NWU5ZGYzMjRjNyIKKworc3VwcG9ydHMtY29sb3JAXjMuMS4wLCBzdXBwb3J0
cy1jb2xvckBeMy4xLjI6CisgIHZlcnNpb24gIjMuMS4yIgorICByZXNvbHZlZCAiaHR0cHM6Ly9y
ZWdpc3RyeS55YXJucGtnLmNvbS9zdXBwb3J0cy1jb2xvci8tL3N1cHBvcnRzLWNvbG9yLTMuMS4y
LnRneiM3MmEyNjI4OTRkOWQ0MDhiOTU2Y2EwNWZmMzdiMmVkOGE2ZTJhMmQ1IgorICBkZXBlbmRl
bmNpZXM6CisgICAgaGFzLWZsYWcgIl4xLjAuMCIKKworc3Znb0BeMC43LjA6CisgIHZlcnNpb24g
IjAuNy4xIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9zdmdvLy0v
c3Znby0wLjcuMS50Z3ojMjg3MzIwZmVkOTcyY2IwOTdlNzJjMmJiMTY4NWY5NmZlMDhmODAzNCIK
KyAgZGVwZW5kZW5jaWVzOgorICAgIGNvYSAifjEuMC4xIgorICAgIGNvbG9ycyAifjEuMS4yIgor
ICAgIGNzc28gIn4yLjIuMSIKKyAgICBqcy15YW1sICJ+My42LjEiCisgICAgbWtkaXJwICJ+MC41
LjEiCisgICAgc2F4ICJ+MS4yLjEiCisgICAgd2hldC5leHRlbmQgIn4wLjkuOSIKKwordGFibGVA
XjMuNy44OgorICB2ZXJzaW9uICIzLjguMyIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnku
eWFybnBrZy5jb20vdGFibGUvLS90YWJsZS0zLjguMy50Z3ojMmJiYzU0MmYwZmRhOTg2MWE3NTVk
Mzk0N2ZlZmQ4YjNmNTEzODU1ZiIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGFqdiAiXjQuNy4wIgor
ICAgIGFqdi1rZXl3b3JkcyAiXjEuMC4wIgorICAgIGNoYWxrICJeMS4xLjEiCisgICAgbG9kYXNo
ICJeNC4wLjAiCisgICAgc2xpY2UtYW5zaSAiMC4wLjQiCisgICAgc3RyaW5nLXdpZHRoICJeMi4w
LjAiCisKK3RhcGFibGVAXjAuMS44LCB0YXBhYmxlQH4wLjEuODoKKyAgdmVyc2lvbiAiMC4xLjEw
IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS90YXBhYmxlLy0vdGFw
YWJsZS0wLjEuMTAudGd6IzI5YzM1NzA3YzJiNzBlNTBkMDc0ODJiNWQyMDJlOGVkNDQ2ZGFmZDQi
CisKK3Rhci1wYWNrQH4zLjMuMDoKKyAgdmVyc2lvbiAiMy4zLjAiCisgIHJlc29sdmVkICJodHRw
czovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3Rhci1wYWNrLy0vdGFyLXBhY2stMy4zLjAudGd6IzMw
OTMxODE2NDE4ZjU1YWZjNGQyMTc3NWFmZGQ2NzIwY2VlNDVkYWUiCisgIGRlcGVuZGVuY2llczoK
KyAgICBkZWJ1ZyAifjIuMi4wIgorICAgIGZzdHJlYW0gIn4xLjAuMTAiCisgICAgZnN0cmVhbS1p
Z25vcmUgIn4xLjAuNSIKKyAgICBvbmNlICJ+MS4zLjMiCisgICAgcmVhZGFibGUtc3RyZWFtICJ+
Mi4xLjQiCisgICAgcmltcmFmICJ+Mi41LjEiCisgICAgdGFyICJ+Mi4yLjEiCisgICAgdWlkLW51
bWJlciAifjAuMC42IgorCit0YXJAfjIuMi4xOgorICB2ZXJzaW9uICIyLjIuMSIKKyAgcmVzb2x2
ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vdGFyLy0vdGFyLTIuMi4xLnRneiM4ZTRk
MmEyNTZjMGUyMTg1YzZiMThhZDY5NGFlYzk2OGI4M2NiMWQxIgorICBkZXBlbmRlbmNpZXM6Cisg
ICAgYmxvY2stc3RyZWFtICIqIgorICAgIGZzdHJlYW0gIl4xLjAuMiIKKyAgICBpbmhlcml0cyAi
MiIKKwordGV4dC10YWJsZUBeMC4yLjAsIHRleHQtdGFibGVAfjAuMi4wOgorICB2ZXJzaW9uICIw
LjIuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vdGV4dC10YWJs
ZS8tL3RleHQtdGFibGUtMC4yLjAudGd6IzdmNWVlODIzYWU4MDUyMDdjMDBhZjJkZjRhODRlYzNm
Y2ZhNTcwYjQiCisKK3Rocm91Z2hAXjIuMy42OgorICB2ZXJzaW9uICIyLjMuOCIKKyAgcmVzb2x2
ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vdGhyb3VnaC8tL3Rocm91Z2gtMi4zLjgu
dGd6IzBkZDRjOWZmYWFiYzM1Nzk2MGIxYjcyNDExNWQ3ZTBlODZhMmUxZjUiCisKK3RpbWVycy1i
cm93c2VyaWZ5QF4yLjAuMjoKKyAgdmVyc2lvbiAiMi4wLjIiCisgIHJlc29sdmVkICJodHRwczov
L3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3RpbWVycy1icm93c2VyaWZ5Ly0vdGltZXJzLWJyb3dzZXJp
ZnktMi4wLjIudGd6I2FiNDg4M2NmNTk3ZGNkNTBhZjIxMTM0OWEwMGZiY2E1NmFjODZiODYiCisg
IGRlcGVuZGVuY2llczoKKyAgICBzZXRpbW1lZGlhdGUgIl4xLjAuNCIKKwordG8tYXJyYXlidWZm
ZXJAXjEuMC4wOgorICB2ZXJzaW9uICIxLjAuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0
cnkueWFybnBrZy5jb20vdG8tYXJyYXlidWZmZXIvLS90by1hcnJheWJ1ZmZlci0xLjAuMS50Z3oj
N2QyMjliMWZjYzYzN2U0NjZjYTA4MTE4MDgzNmE3YWFiZmY4M2Y0MyIKKwordG8tZmFzdC1wcm9w
ZXJ0aWVzQF4xLjAuMToKKyAgdmVyc2lvbiAiMS4wLjIiCisgIHJlc29sdmVkICJodHRwczovL3Jl
Z2lzdHJ5Lnlhcm5wa2cuY29tL3RvLWZhc3QtcHJvcGVydGllcy8tL3RvLWZhc3QtcHJvcGVydGll
cy0xLjAuMi50Z3ojZjNmNWMwYzNiYTcyOTlhN2VmOTk0MjdlNDQ2MzMyNTdhZGU0MzMyMCIKKwor
dG9wb3NvcnRAXjEuMC4wOgorICB2ZXJzaW9uICIxLjAuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8v
cmVnaXN0cnkueWFybnBrZy5jb20vdG9wb3NvcnQvLS90b3Bvc29ydC0xLjAuMC50Z3ojYjY2Y2Yz
ODVhMWE4YThlNjhlNDViODI1OWU3ZjU1ODc1ZThiMDZlZiIKKwordG91Z2gtY29va2llQH4yLjMu
MDoKKyAgdmVyc2lvbiAiMi4zLjIiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5w
a2cuY29tL3RvdWdoLWNvb2tpZS8tL3RvdWdoLWNvb2tpZS0yLjMuMi50Z3ojZjA4MWY3NmU0Yzg1
NzIwZTZjMzdhNWZhY2VkNzM3MTUwZDg0MDcyYSIKKyAgZGVwZW5kZW5jaWVzOgorICAgIHB1bnlj
b2RlICJeMS40LjEiCisKK3RyeWl0QF4xLjAuMToKKyAgdmVyc2lvbiAiMS4wLjMiCisgIHJlc29s
dmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3RyeWl0Ly0vdHJ5aXQtMS4wLjMudGd6
IzM5M2JlNzMwYTk0NDZmZDFlYWQ2ZGE1OWEwMTQzMDhmMzZjMjg5Y2IiCisKK3R0eS1icm93c2Vy
aWZ5QDAuMC4wOgorICB2ZXJzaW9uICIwLjAuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0
cnkueWFybnBrZy5jb20vdHR5LWJyb3dzZXJpZnkvLS90dHktYnJvd3NlcmlmeS0wLjAuMC50Z3oj
YTE1N2JhNDAyZGEyNGU5YmY5NTdmOWFhNjlkNTI0ZWVkNDI5MDFhNiIKKwordHVubmVsLWFnZW50
QH4wLjQuMToKKyAgdmVyc2lvbiAiMC40LjMiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5
Lnlhcm5wa2cuY29tL3R1bm5lbC1hZ2VudC8tL3R1bm5lbC1hZ2VudC0wLjQuMy50Z3ojNjM3M2Ri
NzY5MDlmZTU3MGUwOGQ3MzU4MzM2NWVkODI4YTc0ZWVlYiIKKwordHdlZXRuYWNsQF4wLjE0LjMs
IHR3ZWV0bmFjbEB+MC4xNC4wOgorICB2ZXJzaW9uICIwLjE0LjQiCisgIHJlc29sdmVkICJodHRw
czovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3R3ZWV0bmFjbC8tL3R3ZWV0bmFjbC0wLjE0LjQudGd6
IzhjOWRiZmI1Mjc5NTY4NmYxNjZjZDIwMjM3OTRiY2YxMDNkMTNjMmIiCisKK3R5cGUtY2hlY2tA
fjAuMy4yOgorICB2ZXJzaW9uICIwLjMuMiIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnku
eWFybnBrZy5jb20vdHlwZS1jaGVjay8tL3R5cGUtY2hlY2stMC4zLjIudGd6IzU4ODRjYWI1MTJj
ZjFkMzU1ZTNmYjc4NGYzMDgwNGIyYjUyMGRiNzIiCisgIGRlcGVuZGVuY2llczoKKyAgICBwcmVs
dWRlLWxzICJ+MS4xLjIiCisKK3R5cGUtaXNAfjEuNi4xMzoKKyAgdmVyc2lvbiAiMS42LjE0Igor
ICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS90eXBlLWlzLy0vdHlwZS1p
cy0xLjYuMTQudGd6I2UyMTk2MzljMTdkZWQxY2EwNzg5MDkyZGQ1NGEwMzgyNmI4MTdjYjIiCisg
IGRlcGVuZGVuY2llczoKKyAgICBtZWRpYS10eXBlciAiMC4zLjAiCisgICAgbWltZS10eXBlcyAi
fjIuMS4xMyIKKwordHlwZWRhcnJheUB+MC4wLjU6CisgIHZlcnNpb24gIjAuMC42IgorICByZXNv
bHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS90eXBlZGFycmF5Ly0vdHlwZWRhcnJh
eS0wLjAuNi50Z3ojODY3YWM3NGUzODY0MTg3YjFkM2Q0N2Q5OTZhNzhlYzVjODgzMDc3NyIKKwor
dWdsaWZ5LWpzQH4yLjcuMywgdWdsaWZ5LWpzQDIuNy54OgorICB2ZXJzaW9uICIyLjcuNSIKKyAg
cmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vdWdsaWZ5LWpzLy0vdWdsaWZ5
LWpzLTIuNy41LnRneiM0NjEyYzBjN2JhYWVlMmJhN2M0ODdkZTQ5MDRhZTEyMjA3OWYyY2E4Igor
ICBkZXBlbmRlbmNpZXM6CisgICAgYXN5bmMgIn4wLjIuNiIKKyAgICBzb3VyY2UtbWFwICJ+MC41
LjEiCisgICAgdWdsaWZ5LXRvLWJyb3dzZXJpZnkgIn4xLjAuMCIKKyAgICB5YXJncyAifjMuMTAu
MCIKKwordWdsaWZ5LXRvLWJyb3dzZXJpZnlAfjEuMC4wOgorICB2ZXJzaW9uICIxLjAuMiIKKyAg
cmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vdWdsaWZ5LXRvLWJyb3dzZXJp
ZnkvLS91Z2xpZnktdG8tYnJvd3NlcmlmeS0xLjAuMi50Z3ojNmUwOTI0ZDZiZGE2YjVhZmUzNDll
MzlhNmQ2MzI4NTBhMGY4ODJiNyIKKwordWlkLW51bWJlckB+MC4wLjY6CisgIHZlcnNpb24gIjAu
MC42IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS91aWQtbnVtYmVy
Ly0vdWlkLW51bWJlci0wLjAuNi50Z3ojMGVhMTBlODAzNWU4ZWI1YjhlNDQ0OWYwNmRhMWM3MzA2
NjNiYWE4MSIKKwordW5pcUBeMS4wLjE6CisgIHZlcnNpb24gIjEuMC4xIgorICByZXNvbHZlZCAi
aHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS91bmlxLy0vdW5pcS0xLjAuMS50Z3ojYjMxYzVh
ZTgyNTQ4NDRhM2E4MjgxNTQxY2UyYjA0Yjg2NWE3MzRmZiIKKwordW5pcWlkQF40LjAuMDoKKyAg
dmVyc2lvbiAiNC4xLjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29t
L3VuaXFpZC8tL3VuaXFpZC00LjEuMC50Z3ojMzNkOTY3OWY2NTAyMmY0ODk4OGEwM2ZkMjRlN2Rj
YWY4ZjEwOWVjYSIKKyAgZGVwZW5kZW5jaWVzOgorICAgIG1hY2FkZHJlc3MgIl4wLjIuOCIKKwor
dW5pcXNAXjIuMC4wOgorICB2ZXJzaW9uICIyLjAuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVn
aXN0cnkueWFybnBrZy5jb20vdW5pcXMvLS91bmlxcy0yLjAuMC50Z3ojZmZlZGU0YjM2YjI1Mjkw
Njk2ZTZlMTY1ZDRhNTllZGI5OThlNmIwMiIKKwordW5waXBlQH4xLjAuMDoKKyAgdmVyc2lvbiAi
MS4wLjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3VucGlwZS8t
L3VucGlwZS0xLjAuMC50Z3ojYjJiZjRlZTg1MTRhYWU2MTY1YjQ4MTc4MjlkMjFiMmVmNDk5MDRl
YyIKKwordXBwZXItY2FzZUBeMS4xLjE6CisgIHZlcnNpb24gIjEuMS4zIgorICByZXNvbHZlZCAi
aHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS91cHBlci1jYXNlLy0vdXBwZXItY2FzZS0xLjEu
My50Z3ojZjZiNDUwMWMyZWM0Y2RkMjZiYTc4YmU3MjIyOTYxZGU3NzYyMTU5OCIKKwordXJsLWxv
YWRlckBeMC41Ljc6CisgIHZlcnNpb24gIjAuNS43IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdp
c3RyeS55YXJucGtnLmNvbS91cmwtbG9hZGVyLy0vdXJsLWxvYWRlci0wLjUuNy50Z3ojNjdlODc3
OTc1OWY4MDAwZGE3NDk5NDkwNjY4MGM5NDNhOWIwOTI1ZCIKKyAgZGVwZW5kZW5jaWVzOgorICAg
IGxvYWRlci11dGlscyAiMC4yLngiCisgICAgbWltZSAiMS4yLngiCisKK3VybEBeMC4xMS4wOgor
ICB2ZXJzaW9uICIwLjExLjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cu
Y29tL3VybC8tL3VybC0wLjExLjAudGd6IzM4MzhlOTdjZmM2MDUyMWViNzNjNTI1YThlNTViZmRk
OWUyZTI4ZjEiCisgIGRlcGVuZGVuY2llczoKKyAgICBwdW55Y29kZSAiMS4zLjIiCisgICAgcXVl
cnlzdHJpbmcgIjAuMi4wIgorCit1c2VyLWhvbWVAXjIuMC4wOgorICB2ZXJzaW9uICIyLjAuMCIK
KyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vdXNlci1ob21lLy0vdXNl
ci1ob21lLTIuMC4wLnRneiM5YzcwYmZkODE2OWJjMWRjYmY0ODYwNGUwZjA0YjhiNDljZGU5ZTlm
IgorICBkZXBlbmRlbmNpZXM6CisgICAgb3MtaG9tZWRpciAiXjEuMC4wIgorCit1dGlsLWRlcHJl
Y2F0ZUB+MS4wLjE6CisgIHZlcnNpb24gIjEuMC4yIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdp
c3RyeS55YXJucGtnLmNvbS91dGlsLWRlcHJlY2F0ZS8tL3V0aWwtZGVwcmVjYXRlLTEuMC4yLnRn
eiM0NTBkNGRjOWZhNzBkZTczMjc2MmZiZDJkNGEyODk4MTQxOWEwY2NmIgorCit1dGlsQF4wLjEw
LjMsIHV0aWxAMC4xMC4zOgorICB2ZXJzaW9uICIwLjEwLjMiCisgIHJlc29sdmVkICJodHRwczov
L3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3V0aWwvLS91dGlsLTAuMTAuMy50Z3ojN2FmYjFhZmU1MDgw
NTI0NjQ4OWUzZGI3ZmUwZWQzNzkzMzZhYzBmOSIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGluaGVy
aXRzICIyLjAuMSIKKwordXRpbGFAfjAuMzoKKyAgdmVyc2lvbiAiMC4zLjMiCisgIHJlc29sdmVk
ICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3V0aWxhLy0vdXRpbGEtMC4zLjMudGd6I2Q3
ZThlN2Q3ZTMwOTEwNzA5MmIwNWY4ZDk2ODg4MjRkNjMzYTQyMjYiCisKK3V0aWxhQH4wLjQ6Cisg
IHZlcnNpb24gIjAuNC4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNv
bS91dGlsYS8tL3V0aWxhLTAuNC4wLnRneiM4YTE2YTA1ZDQ0NTY1N2EzYWVhNWVlY2M1YjEyYTRm
YTUzNzk3NzJjIgorCit1dGlscy1tZXJnZUAxLjAuMDoKKyAgdmVyc2lvbiAiMS4wLjAiCisgIHJl
c29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3V0aWxzLW1lcmdlLy0vdXRpbHMt
bWVyZ2UtMS4wLjAudGd6IzAyOTRmYjkyMmJiOTM3NTE1MzU0MWM0ZjcwOTYyMzFmMjg3YzhhZjgi
CisKK3V1aWRAXjMuMC4wOgorICB2ZXJzaW9uICIzLjAuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8v
cmVnaXN0cnkueWFybnBrZy5jb20vdXVpZC8tL3V1aWQtMy4wLjEudGd6IzY1NDRiYmEyZGZkYThj
MWNmMTdlNjI5YTNhMzA1ZTJiYjFmZWU2YzEiCisKK3ZhcnlAfjEuMS4wOgorICB2ZXJzaW9uICIx
LjEuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vdmFyeS8tL3Zh
cnktMS4xLjAudGd6I2UxZTVhZmZiYmQxNmFlNzY4ZGQyNjc0Mzk0YjlhZDMwMjI2NTMxNDAiCisK
K3ZlbmRvcnNAXjEuMC4wOgorICB2ZXJzaW9uICIxLjAuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8v
cmVnaXN0cnkueWFybnBrZy5jb20vdmVuZG9ycy8tL3ZlbmRvcnMtMS4wLjEudGd6IzM3YWQ3M2M4
ZWU0MTdmYjNkNTgwZTc4NTMxMjMwN2QyNzQ4NDdmMjIiCisKK3ZlcnJvckAxLjMuNjoKKyAgdmVy
c2lvbiAiMS4zLjYiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3Zl
cnJvci8tL3ZlcnJvci0xLjMuNi50Z3ojY2ZmNWRmMTI5NDZkMjk3ZDJiYWFlZmFhMjY4OWUyNWJl
MDFjMDA1YyIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGV4dHNwcmludGYgIjEuMC4yIgorCit2bS1i
cm93c2VyaWZ5QDAuMC40OgorICB2ZXJzaW9uICIwLjAuNCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8v
cmVnaXN0cnkueWFybnBrZy5jb20vdm0tYnJvd3NlcmlmeS8tL3ZtLWJyb3dzZXJpZnktMC4wLjQu
dGd6IzVkN2VhNDViYmVmOWU0YTZmZjY1Zjk1NDM4ZTBhODdjMzU3ZDVhNzMiCisgIGRlcGVuZGVu
Y2llczoKKyAgICBpbmRleG9mICIwLjAuMSIKKwordnVlLWhvdC1yZWxvYWQtYXBpQF4yLjAuMToK
KyAgdmVyc2lvbiAiMi4wLjYiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cu
Y29tL3Z1ZS1ob3QtcmVsb2FkLWFwaS8tL3Z1ZS1ob3QtcmVsb2FkLWFwaS0yLjAuNi50Z3ojODE3
ZDRiZmIzMGY1NTQyOGFhMTAxMmQwMjk0OTllMDdmMzE0N2QyMSIKKwordnVlLWxvYWRlckBeMTAu
MC4wOgorICB2ZXJzaW9uICIxMC4wLjIiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlh
cm5wa2cuY29tL3Z1ZS1sb2FkZXIvLS92dWUtbG9hZGVyLTEwLjAuMi50Z3ojNmZlN2JjZWZiMzJj
NTQzOWJkMDMzODQ2NGFhMjI2NzNhZDYyMjk5YyIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGNvbnNv
bGlkYXRlICJeMC4xNC4wIgorICAgIGhhc2gtc3VtICJeMS4wLjIiCisgICAganMtYmVhdXRpZnkg
Il4xLjYuMyIKKyAgICBsb2FkZXItdXRpbHMgIl4wLjIuMTAiCisgICAgbHJ1LWNhY2hlICJeNC4w
LjEiCisgICAgb2JqZWN0LWFzc2lnbiAiXjQuMC4wIgorICAgIHBvc3Rjc3MgIl41LjAuMTAiCisg
ICAgcG9zdGNzcy1zZWxlY3Rvci1wYXJzZXIgIl4yLjAuMCIKKyAgICBzb3VyY2UtbWFwICJeMC41
LjYiCisgICAgdnVlLWhvdC1yZWxvYWQtYXBpICJeMi4wLjEiCisgICAgdnVlLXN0eWxlLWxvYWRl
ciAiXjEuMC4wIgorICAgIHZ1ZS10ZW1wbGF0ZS1lczIwMTUtY29tcGlsZXIgIl4xLjIuMiIKKwor
dnVlLXN0eWxlLWxvYWRlckBeMS4wLjA6CisgIHZlcnNpb24gIjEuMC4wIgorICByZXNvbHZlZCAi
aHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS92dWUtc3R5bGUtbG9hZGVyLy0vdnVlLXN0eWxl
LWxvYWRlci0xLjAuMC50Z3ojYWJlYjdiZDBmNDYzMTMwODM3NDEyNDRkMzA3OWQ0ZjE0NDQ5ZTA0
OSIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGxvYWRlci11dGlscyAiXjAuMi43IgorCit2dWUtdGVt
cGxhdGUtY29tcGlsZXJAXjIuMS4wOgorICB2ZXJzaW9uICIyLjEuNCIKKyAgcmVzb2x2ZWQgImh0
dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vdnVlLXRlbXBsYXRlLWNvbXBpbGVyLy0vdnVlLXRl
bXBsYXRlLWNvbXBpbGVyLTIuMS40LnRneiNjZTk5Y2I5YzJmNTg0MjA2MmQzYjc0NGM3MTYyMjRi
NjEzZjE5OGQ0IgorICBkZXBlbmRlbmNpZXM6CisgICAgZGUtaW5kZW50ICJeMS4wLjIiCisgICAg
aGUgIl4xLjEuMCIKKwordnVlLXRlbXBsYXRlLWVzMjAxNS1jb21waWxlckBeMS4yLjI6CisgIHZl
cnNpb24gIjEuMy4yIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS92
dWUtdGVtcGxhdGUtZXMyMDE1LWNvbXBpbGVyLy0vdnVlLXRlbXBsYXRlLWVzMjAxNS1jb21waWxl
ci0xLjMuMi50Z3ojYzA0MDgwMjI3NTE0OTI5YmE1NDBkZTdhN2E5M2FjNDMwNDY3YmRjMCIKKwor
dnVlQF4yLjEuMDoKKyAgdmVyc2lvbiAiMi4xLjQiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lz
dHJ5Lnlhcm5wa2cuY29tL3Z1ZS8tL3Z1ZS0yLjEuNC50Z3ojZDQ5MGY4ZmNmNjk2ODQ3ZDhjZjdm
OGViOTE2OGU5YTVkZDgwNmJmYyIKKword2F0Y2hwYWNrQF4wLjIuMToKKyAgdmVyc2lvbiAiMC4y
LjkiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3dhdGNocGFjay8t
L3dhdGNocGFjay0wLjIuOS50Z3ojNjJlYWE0YWI1ZTViYTM1ZmRmYzAxODI3NTYyNmUzYzBmNWUz
ZmIwYiIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGFzeW5jICJeMC45LjAiCisgICAgY2hva2lkYXIg
Il4xLjAuMCIKKyAgICBncmFjZWZ1bC1mcyAiXjQuMS4yIgorCit3ZWJwYWNrLWNvcmVAfjAuNi45
OgorICB2ZXJzaW9uICIwLjYuOSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBr
Zy5jb20vd2VicGFjay1jb3JlLy0vd2VicGFjay1jb3JlLTAuNi45LnRneiNmYzU3MTU4OGM4NTU4
ZGE3N2JlOWVmYjZkZWJkYzVhM2IxNzJiZGMyIgorICBkZXBlbmRlbmNpZXM6CisgICAgc291cmNl
LWxpc3QtbWFwICJ+MC4xLjciCisgICAgc291cmNlLW1hcCAifjAuNC4xIgorCit3ZWJwYWNrLWRl
di1taWRkbGV3YXJlQF4xLjguMzoKKyAgdmVyc2lvbiAiMS44LjQiCisgIHJlc29sdmVkICJodHRw
czovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3dlYnBhY2stZGV2LW1pZGRsZXdhcmUvLS93ZWJwYWNr
LWRldi1taWRkbGV3YXJlLTEuOC40LnRneiNlODc2NWM5MTIyODg3Y2U5ZTNhYmQ0Y2M5YzNlYjMx
YjYxZTA5NDhkIgorICBkZXBlbmRlbmNpZXM6CisgICAgbWVtb3J5LWZzICJ+MC4zLjAiCisgICAg
bWltZSAiXjEuMy40IgorICAgIHBhdGgtaXMtYWJzb2x1dGUgIl4xLjAuMCIKKyAgICByYW5nZS1w
YXJzZXIgIl4xLjAuMyIKKword2VicGFjay1ob3QtbWlkZGxld2FyZUBeMi4xMi4yOgorICB2ZXJz
aW9uICIyLjEzLjIiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3dl
YnBhY2staG90LW1pZGRsZXdhcmUvLS93ZWJwYWNrLWhvdC1taWRkbGV3YXJlLTIuMTMuMi50Z3oj
NjUwMGIxNWU2ZDRmMWE5NTkwZjhkZjcwODE4M2Y0ZDJhYzJjM2U5ZSIKKyAgZGVwZW5kZW5jaWVz
OgorICAgIGFuc2ktaHRtbCAiMC4wLjYiCisgICAgaHRtbC1lbnRpdGllcyAiXjEuMi4wIgorICAg
IHF1ZXJ5c3RyaW5nICJeMC4yLjAiCisgICAgc3RyaXAtYW5zaSAiXjMuMC4wIgorCit3ZWJwYWNr
LW1lcmdlQF4wLjE0LjE6CisgIHZlcnNpb24gIjAuMTQuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8v
cmVnaXN0cnkueWFybnBrZy5jb20vd2VicGFjay1tZXJnZS8tL3dlYnBhY2stbWVyZ2UtMC4xNC4x
LnRneiNkNmJmZTZkOTM2MGEwMjRlMWU3ZjhlNjM4M2FlNzM1ZjE3MzdjZDIzIgorICBkZXBlbmRl
bmNpZXM6CisgICAgbG9kYXNoLmZpbmQgIl4zLjIuMSIKKyAgICBsb2Rhc2guaXNlcXVhbCAiXjQu
Mi4wIgorICAgIGxvZGFzaC5pc3BsYWlub2JqZWN0ICJeMy4yLjAiCisgICAgbG9kYXNoLm1lcmdl
ICJeMy4zLjIiCisKK3dlYnBhY2stc291cmNlc0BeMC4xLjA6CisgIHZlcnNpb24gIjAuMS4zIgor
ICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS93ZWJwYWNrLXNvdXJjZXMv
LS93ZWJwYWNrLXNvdXJjZXMtMC4xLjMudGd6IzE1Y2UyZmI3OWQwYTFkYTcyNzQ0NGJhN2M3NTdi
ZjE2NDI5NGYzMTAiCisgIGRlcGVuZGVuY2llczoKKyAgICBzb3VyY2UtbGlzdC1tYXAgIn4wLjEu
MCIKKyAgICBzb3VyY2UtbWFwICJ+MC41LjMiCisKK3dlYnBhY2tAXjEuMTMuMjoKKyAgdmVyc2lv
biAiMS4xNC4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS93ZWJw
YWNrLy0vd2VicGFjay0xLjE0LjAudGd6IzU0ZjFmZmI5MjA1MWEzMjhhNWIyMDU3ZDZhZTMzYzI4
OTQ2MmM4MjMiCisgIGRlcGVuZGVuY2llczoKKyAgICBhY29ybiAiXjMuMC4wIgorICAgIGFzeW5j
ICJeMS4zLjAiCisgICAgY2xvbmUgIl4xLjAuMiIKKyAgICBlbmhhbmNlZC1yZXNvbHZlICJ+MC45
LjAiCisgICAgaW50ZXJwcmV0ICJeMC42LjQiCisgICAgbG9hZGVyLXV0aWxzICJeMC4yLjExIgor
ICAgIG1lbW9yeS1mcyAifjAuMy4wIgorICAgIG1rZGlycCAifjAuNS4wIgorICAgIG5vZGUtbGli
cy1icm93c2VyICJeMC43LjAiCisgICAgb3B0aW1pc3QgIn4wLjYuMCIKKyAgICBzdXBwb3J0cy1j
b2xvciAiXjMuMS4wIgorICAgIHRhcGFibGUgIn4wLjEuOCIKKyAgICB1Z2xpZnktanMgIn4yLjcu
MyIKKyAgICB3YXRjaHBhY2sgIl4wLjIuMSIKKyAgICB3ZWJwYWNrLWNvcmUgIn4wLjYuOSIKKwor
d2hldC5leHRlbmRAfjAuOS45OgorICB2ZXJzaW9uICIwLjkuOSIKKyAgcmVzb2x2ZWQgImh0dHBz
Oi8vcmVnaXN0cnkueWFybnBrZy5jb20vd2hldC5leHRlbmQvLS93aGV0LmV4dGVuZC0wLjkuOS50
Z3ojZjg3N2Q1YmY2NDhjOTdlNWFhNTQyZmFkYzE2ZDZhMjU5YjljMTFhMSIKKword2lkZS1hbGln
bkBeMS4xLjA6CisgIHZlcnNpb24gIjEuMS4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3Ry
eS55YXJucGtnLmNvbS93aWRlLWFsaWduLy0vd2lkZS1hbGlnbi0xLjEuMC50Z3ojNDBlZGRlODAy
YTcxZmVhMWYwNzBkYTNlNjJkY2RhMmU3YWRkOTZhZCIKKyAgZGVwZW5kZW5jaWVzOgorICAgIHN0
cmluZy13aWR0aCAiXjEuMC4xIgorCit3aW5kb3ctc2l6ZUAwLjEuMDoKKyAgdmVyc2lvbiAiMC4x
LjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3dpbmRvdy1zaXpl
Ly0vd2luZG93LXNpemUtMC4xLjAudGd6IzU0MzhjZDJlYTkzYjIwMmVmYTNhMTlmZTg4ODdhZWU3
Yzk0ZjljOWQiCisKK3dvcmR3cmFwQH4wLjAuMjoKKyAgdmVyc2lvbiAiMC4wLjMiCisgIHJlc29s
dmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3dvcmR3cmFwLy0vd29yZHdyYXAtMC4w
LjMudGd6I2EzZDVkYTZjZDVjMGJjMDAwOGQzNzIzNGJiYWYxYmVkNjMwNTkxMDciCisKK3dvcmR3
cmFwQH4xLjAuMDoKKyAgdmVyc2lvbiAiMS4wLjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lz
dHJ5Lnlhcm5wa2cuY29tL3dvcmR3cmFwLy0vd29yZHdyYXAtMS4wLjAudGd6IzI3NTg0ODEwODkx
NDU2YTQxNzFjOGQwMjI2NDQxYWRlOTBjYmNhZWIiCisKK3dvcmR3cmFwQDAuMC4yOgorICB2ZXJz
aW9uICIwLjAuMiIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vd29y
ZHdyYXAvLS93b3Jkd3JhcC0wLjAuMi50Z3ojYjc5NjY5YmI0MmVjYjQwOWY4M2Q1ODNjYWQ1MmNh
MTdlYWExNjQzZiIKKword3JhcHB5QDE6CisgIHZlcnNpb24gIjEuMC4yIgorICByZXNvbHZlZCAi
aHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS93cmFwcHkvLS93cmFwcHktMS4wLjIudGd6I2I1
MjQzZDhmM2VjMWFhMzVmMTM2NDYwNWJjMGQxMDM2ZTMwYWI2OWYiCisKK3dyaXRlQF4wLjIuMToK
KyAgdmVyc2lvbiAiMC4yLjEiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cu
Y29tL3dyaXRlLy0vd3JpdGUtMC4yLjEudGd6IzVmYzAzODI4ZTI2NGNlYTNmZTkxNDU1NDc2Zjdh
M2M1NjZjYjA3NTciCisgIGRlcGVuZGVuY2llczoKKyAgICBta2RpcnAgIl4wLjUuMSIKKworeG1s
LWNoYXItY2xhc3Nlc0BeMS4wLjA6CisgIHZlcnNpb24gIjEuMC4wIgorICByZXNvbHZlZCAiaHR0
cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS94bWwtY2hhci1jbGFzc2VzLy0veG1sLWNoYXItY2xh
c3Nlcy0xLjAuMC50Z3ojNjQ2NTc4NDhhMjBmZmM1ZGY1ODNhNDJhZDhhMjc3YjQ1MTJiYmM0ZCIK
KworeHRlbmRAXjQuMC4wOgorICB2ZXJzaW9uICI0LjAuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8v
cmVnaXN0cnkueWFybnBrZy5jb20veHRlbmQvLS94dGVuZC00LjAuMS50Z3ojYTVjNmQ1MzJiZTY1
NmUyM2RiODIwZWZiOTQzYTFmMDQ5OThkNjNhZiIKKworeWFsbGlzdEBeMi4wLjA6CisgIHZlcnNp
b24gIjIuMC4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS95YWxs
aXN0Ly0veWFsbGlzdC0yLjAuMC50Z3ojMzA2YzU0MzgzNWYwOWVlMWE0Y2IyM2I3YmNlOWFiMzQx
YzkxY2RkNCIKKworeWFyZ3NAfjMuMTAuMDoKKyAgdmVyc2lvbiAiMy4xMC4wIgorICByZXNvbHZl
ZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS95YXJncy8tL3lhcmdzLTMuMTAuMC50Z3oj
ZjdlZTdiZDg1N2RkN2MxZDJkMzhjMGU3NGVmYmQ2ODFkMTQzMWZkMSIKKyAgZGVwZW5kZW5jaWVz
OgorICAgIGNhbWVsY2FzZSAiXjEuMC4yIgorICAgIGNsaXVpICJeMi4xLjAiCisgICAgZGVjYW1l
bGl6ZSAiXjEuMC4wIgorICAgIHdpbmRvdy1zaXplICIwLjEuMCIKKwpkaWZmIC0tZ2l0IGEvV2Vi
c2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9k
ZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL2RhdGEvc3RhdHMuanMgYi9X
ZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZj
L2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9hcHAvanMvZGF0YS9zdGF0cy5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5jODkzM2ZkMmQwNzQyMDY1YjZkOWQzZGU2YzQ3ZTc2MjhiNTkwODMwCi0tLSAv
ZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9y
ZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pz
L2RhdGEvc3RhdHMuanMKQEAgLTAsMCArMSwzOSBAQAorLypnbG9iYWwgZGVmaW5lICovCisndXNl
IHN0cmljdCc7CisKK2RlZmluZShbCisgICAgJ2ZsaWdodC9saWIvY29tcG9uZW50JywKKyAgICAn
YXBwL3N0b3JlJworXSwgZnVuY3Rpb24gKGRlZmluZUNvbXBvbmVudCwgZGF0YVN0b3JlKSB7Cisg
ICAgZnVuY3Rpb24gc3RhdHMoKSB7CisgICAgICAgIHRoaXMuYXR0cmlidXRlcyh7CisgICAgICAg
ICAgICBkYXRhU3RvcmU6IGRhdGFTdG9yZQorICAgICAgICB9KTsKKworICAgICAgICB0aGlzLnJl
Y291bnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgdG9kb3MgPSB0aGlzLmF0dHIu
ZGF0YVN0b3JlLmFsbCgpOworICAgICAgICAgICAgdmFyIGFsbCA9IHRvZG9zLmxlbmd0aDsKKyAg
ICAgICAgICAgIHZhciByZW1haW5pbmcgPSB0b2Rvcy5yZWR1Y2UoZnVuY3Rpb24gKG1lbW8sIGVh
Y2gpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWVtbyArPSBlYWNoLmNvbXBsZXRlZCA/IDAg
OiAxOworICAgICAgICAgICAgfSwgMCk7CisKKyAgICAgICAgICAgIHRoaXMudHJpZ2dlcignZGF0
YVN0YXRzQ291bnRlZCcsIHsKKyAgICAgICAgICAgICAgICBhbGw6IGFsbCwKKyAgICAgICAgICAg
ICAgICByZW1haW5pbmc6IHJlbWFpbmluZywKKyAgICAgICAgICAgICAgICBjb21wbGV0ZWQ6IGFs
bCAtIHJlbWFpbmluZywKKyAgICAgICAgICAgICAgICBmaWx0ZXI6ICcnCisgICAgICAgICAgICB9
KTsKKyAgICAgICAgfTsKKworICAgICAgICB0aGlzLmFmdGVyKCdpbml0aWFsaXplJywgZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ2RhdGFUb2Rvc0xvYWRlZCcs
IHRoaXMucmVjb3VudCk7CisgICAgICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAnZGF0YVRvZG9B
ZGRlZCcsIHRoaXMucmVjb3VudCk7CisgICAgICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAnZGF0
YVRvZG9SZW1vdmVkJywgdGhpcy5yZWNvdW50KTsKKyAgICAgICAgICAgIHRoaXMub24oZG9jdW1l
bnQsICdkYXRhVG9kb1RvZ2dsZWQnLCB0aGlzLnJlY291bnQpOworICAgICAgICAgICAgdGhpcy5v
bihkb2N1bWVudCwgJ2RhdGFDbGVhcmVkQ29tcGxldGVkJywgdGhpcy5yZWNvdW50KTsKKyAgICAg
ICAgICAgIHRoaXMub24oZG9jdW1lbnQsICdkYXRhVG9kb1RvZ2dsZWRBbGwnLCB0aGlzLnJlY291
bnQpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICByZXR1cm4gZGVmaW5lQ29tcG9uZW50KHN0
YXRzKTsKK30pOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9t
ZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGln
aHQvYXBwL2pzL2RhdGEvdG9kb3MuanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVk
b21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Zs
aWdodC9hcHAvanMvZGF0YS90b2Rvcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNTlmMWMzNWIwY2IyOGE0ZjE0
MmRhMDE1Yjk5MTY4NDg2NGFhZmYwCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3Nl
cmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4
YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL2RhdGEvdG9kb3MuanMKQEAgLTAsMCArMSwxMDMg
QEAKKy8qZ2xvYmFsIGRlZmluZSAqLworJ3VzZSBzdHJpY3QnOworCitkZWZpbmUoWworICAgICdm
bGlnaHQvbGliL2NvbXBvbmVudCcsCisgICAgJ2FwcC9zdG9yZScKK10sIGZ1bmN0aW9uIChkZWZp
bmVDb21wb25lbnQsIGRhdGFTdG9yZSkgeworICAgIGZ1bmN0aW9uIHRvZG9zKCkgeworICAgICAg
ICB2YXIgZmlsdGVyOworICAgICAgICB0aGlzLmF0dHJpYnV0ZXMoeworICAgICAgICAgICAgZGF0
YVN0b3JlOiBkYXRhU3RvcmUKKyAgICAgICAgfSk7CisKKyAgICAgICAgdGhpcy5hZGQgPSBmdW5j
dGlvbiAoZSwgZGF0YSkgeworICAgICAgICAgICAgdmFyIHRvZG8gPSB0aGlzLmF0dHIuZGF0YVN0
b3JlLnNhdmUoeworICAgICAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLAorICAgICAgICAg
ICAgICAgIGNvbXBsZXRlZDogZmFsc2UKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICB0
aGlzLnRyaWdnZXIoJ2RhdGFUb2RvQWRkZWQnLCB7IHRvZG86IHRvZG8sIGZpbHRlcjogZmlsdGVy
IH0pOworICAgICAgICB9OworCisgICAgICAgIHRoaXMucmVtb3ZlID0gZnVuY3Rpb24gKGUsIGRh
dGEpIHsKKyAgICAgICAgICAgIHZhciB0b2RvID0gdGhpcy5hdHRyLmRhdGFTdG9yZS5kZXN0cm95
KGRhdGEuaWQpOworCisgICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2RhdGFUb2RvUmVtb3ZlZCcs
IHRvZG8pOworICAgICAgICB9OworCisgICAgICAgIHRoaXMubG9hZCA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHZhciB0b2RvczsKKworICAgICAgICAgICAgLy8gZmlsdGVyID0gbG9jYWxT
dG9yYWdlLmdldEl0ZW0oJ2ZpbHRlcicpOworICAgICAgICAgICAgZmlsdGVyID0gJyc7CisgICAg
ICAgICAgICB0b2RvcyA9IHRoaXMuZmluZCgpOworICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdk
YXRhVG9kb3NMb2FkZWQnLCB7IHRvZG9zOiB0b2RvcyB9KTsKKyAgICAgICAgfTsKKworICAgICAg
ICB0aGlzLnVwZGF0ZSA9IGZ1bmN0aW9uIChlLCBkYXRhKSB7CisgICAgICAgICAgICB0aGlzLmF0
dHIuZGF0YVN0b3JlLnNhdmUoZGF0YSk7CisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy50b2dn
bGVDb21wbGV0ZWQgPSBmdW5jdGlvbiAoZSwgZGF0YSkgeworICAgICAgICAgICAgdmFyIGV2ZW50
VHlwZTsKKyAgICAgICAgICAgIHZhciB0b2RvID0gdGhpcy5hdHRyLmRhdGFTdG9yZS5nZXQoZGF0
YS5pZCk7CisKKyAgICAgICAgICAgIHRvZG8uY29tcGxldGVkID0gIXRvZG8uY29tcGxldGVkOwor
ICAgICAgICAgICAgdGhpcy5hdHRyLmRhdGFTdG9yZS5zYXZlKHRvZG8pOworCisgICAgICAgICAg
ICBldmVudFR5cGUgPSBmaWx0ZXIgPyAnZGF0YVRvZG9SZW1vdmVkJyA6ICdkYXRhVG9kb1RvZ2ds
ZWQnOworCisgICAgICAgICAgICB0aGlzLnRyaWdnZXIoZXZlbnRUeXBlLCB0b2RvKTsKKyAgICAg
ICAgfTsKKworICAgICAgICB0aGlzLnRvZ2dsZUFsbENvbXBsZXRlZCA9IGZ1bmN0aW9uIChlLCBk
YXRhKSB7CisgICAgICAgICAgICB0aGlzLmF0dHIuZGF0YVN0b3JlLnVwZGF0ZUFsbCh7IGNvbXBs
ZXRlZDogZGF0YS5jb21wbGV0ZWQgfSk7CisgICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2RhdGFU
b2RvVG9nZ2xlZEFsbCcsIHsgdG9kb3M6IHRoaXMuZmluZChmaWx0ZXIpIH0pOworICAgICAgICB9
OworCisgICAgICAgIHRoaXMuZmlsdGVyID0gZnVuY3Rpb24gKGUsIGRhdGEpIHsKKyAgICAgICAg
ICAgIHZhciB0b2RvczsKKworICAgICAgICAgICAgLy8gbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2Zp
bHRlcicsIGRhdGEuZmlsdGVyKTsKKyAgICAgICAgICAgIGZpbHRlciA9IGRhdGEuZmlsdGVyOwor
ICAgICAgICAgICAgdG9kb3MgPSB0aGlzLmZpbmQoKTsKKworICAgICAgICAgICAgdGhpcy50cmln
Z2VyKCdkYXRhVG9kb3NGaWx0ZXJlZCcsIHsgdG9kb3M6IHRvZG9zIH0pOworICAgICAgICB9Owor
CisgICAgICAgIHRoaXMuZmluZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciB0b2Rv
czsKKworICAgICAgICAgICAgaWYgKGZpbHRlcikgeworICAgICAgICAgICAgICAgIHRvZG9zID0g
dGhpcy5hdHRyLmRhdGFTdG9yZS5maW5kKGZ1bmN0aW9uIChlYWNoKSB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAodHlwZW9mIGVhY2hbZmlsdGVyXSAhPT0gJ3VuZGVmaW5lZCcpID8gZWFj
aC5jb21wbGV0ZWQgOiAhZWFjaC5jb21wbGV0ZWQ7CisgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRvZG9zID0gdGhpcy5hdHRyLmRhdGFT
dG9yZS5hbGwoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHRvZG9zOwor
ICAgICAgICB9OworCisgICAgICAgIHRoaXMuY2xlYXJDb21wbGV0ZWQgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICB0aGlzLmF0dHIuZGF0YVN0b3JlLmRlc3Ryb3lBbGwoeyBjb21wbGV0ZWQ6
IHRydWUgfSk7CisKKyAgICAgICAgICAgIHRoaXMudHJpZ2dlcigndWlGaWx0ZXJSZXF1ZXN0ZWQn
LCB7IGZpbHRlcjogZmlsdGVyIH0pOworICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdkYXRhQ2xl
YXJlZENvbXBsZXRlZCcpOworICAgICAgICB9OworCisgICAgICAgIHRoaXMuYWZ0ZXIoJ2luaXRp
YWxpemUnLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAndWlB
ZGRSZXF1ZXN0ZWQnLCB0aGlzLmFkZCk7CisgICAgICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAn
dWlVcGRhdGVSZXF1ZXN0ZWQnLCB0aGlzLnVwZGF0ZSk7CisgICAgICAgICAgICB0aGlzLm9uKGRv
Y3VtZW50LCAndWlSZW1vdmVSZXF1ZXN0ZWQnLCB0aGlzLnJlbW92ZSk7CisgICAgICAgICAgICB0
aGlzLm9uKGRvY3VtZW50LCAndWlMb2FkUmVxdWVzdGVkJywgdGhpcy5sb2FkKTsKKyAgICAgICAg
ICAgIHRoaXMub24oZG9jdW1lbnQsICd1aVRvZ2dsZVJlcXVlc3RlZCcsIHRoaXMudG9nZ2xlQ29t
cGxldGVkKTsKKyAgICAgICAgICAgIHRoaXMub24oZG9jdW1lbnQsICd1aVRvZ2dsZUFsbFJlcXVl
c3RlZCcsIHRoaXMudG9nZ2xlQWxsQ29tcGxldGVkKTsKKyAgICAgICAgICAgIHRoaXMub24oZG9j
dW1lbnQsICd1aUNsZWFyUmVxdWVzdGVkJywgdGhpcy5jbGVhckNvbXBsZXRlZCk7CisgICAgICAg
ICAgICB0aGlzLm9uKGRvY3VtZW50LCAndWlGaWx0ZXJSZXF1ZXN0ZWQnLCB0aGlzLmZpbHRlcik7
CisgICAgICAgIH0pOworICAgIH0KKworICAgIHJldHVybiBkZWZpbmVDb21wb25lbnQodG9kb3Mp
OworfSk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVy
Mi4xL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9h
cHAvanMvbWFpbi5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEv
cmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC9q
cy9tYWluLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc5ZGQ3NWM1YmNkNDhlODg2OTQyZjBiNmIyNWJmZjVhMmIy
NjUyNWYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVk
b21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Zs
aWdodC9hcHAvanMvbWFpbi5qcwpAQCAtMCwwICsxLDQyIEBACisvKmdsb2JhbCBERUJVRyAqLwor
J3VzZSBzdHJpY3QnOworCityZXF1aXJlLmNvbmZpZyh7CisgICAgYmFzZVVybDogJy4vJywKKyAg
ICBwYXRoczogeworICAgICAgICBqcXVlcnk6ICdub2RlX21vZHVsZXMvanF1ZXJ5L2Rpc3QvanF1
ZXJ5JywKKyAgICAgICAgZXM1c2hpbTogJ25vZGVfbW9kdWxlcy9lczUtc2hpbS9lczUtc2hpbScs
CisgICAgICAgIGVzNXNoYW06ICdub2RlX21vZHVsZXMvZXM1LXNoaW0vZXM1LXNoYW0nLAorICAg
ICAgICB0ZXh0OiAnbm9kZV9tb2R1bGVzL3JlcXVpcmVqcy10ZXh0L3RleHQnLAorICAgICAgICBm
bGlnaHQ6ICdub2RlX21vZHVsZXMvZmxpZ2h0JywKKyAgICAgICAgZGVwb3Q6ICdub2RlX21vZHVs
ZXMvZGVwb3QvZGVwb3QnLAorICAgICAgICBtZW1vcnlzdG9yYWdlOiAnbm9kZV9tb2R1bGVzL21l
bW9yeXN0b3JhZ2UvbWVtb3J5c3RvcmFnZScsCisgICAgICAgIGFwcDogJ2FwcC9qcycsCisgICAg
ICAgIHRlbXBsYXRlczogJ2FwcC90ZW1wbGF0ZXMnLAorICAgICAgICB1aTogJ2FwcC9qcy91aScs
CisgICAgICAgIGRhdGE6ICdhcHAvanMvZGF0YScsCisgICAgfSwKKyAgICBzaGltOiB7CisgICAg
ICAgICdhcHAvcGFnZS9hcHAnOiB7CisgICAgICAgICAgICBkZXBzOiBbJ2pxdWVyeScsICdlczVz
aGltJywgJ2VzNXNoYW0nXQorICAgICAgICB9CisgICAgfQorfSk7CisKK2Z1bmN0aW9uIGNoZWNr
UmVhZHkoY291bnQpIHsKKyAgICBpZiAod2luZG93LmNoZWNrTG9hZGVkVGltZW91dElkKQorICAg
ICAgICByZXR1cm4gc2V0VGltZW91dChjaGVja1JlYWR5LmJpbmQodGhpcywgMCksIDUwKTsKKyAg
ICBpZiAoY291bnQgPCA1KQorICAgICAgICByZXR1cm4gc2V0VGltZW91dChjaGVja1JlYWR5LmJp
bmQodGhpcywgY291bnQgKyAxKSwgMTApOworCisgICAgdmFyIGR1bW15Tm9kZVRvTm90aWZ5QXBw
SXNSZWFkeSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgIGR1bW15Tm9kZVRv
Tm90aWZ5QXBwSXNSZWFkeS5pZCA9ICdhcHBJc1JlYWR5JzsKKyAgICBkb2N1bWVudC5ib2R5LmFw
cGVuZENoaWxkKGR1bW15Tm9kZVRvTm90aWZ5QXBwSXNSZWFkeSk7Cit9CisKK3JlcXVpcmUoW10s
IGZ1bmN0aW9uICgpIHsKKyAgICByZXF1aXJlKFsnYXBwL3BhZ2UvYXBwJ10sZnVuY3Rpb24oQXBw
KXsKKyAgICAgICAgQXBwLmluaXRpYWxpemUoKTsKKyAgICAgICAgY2hlY2tSZWFkeSgwKTsKKyAg
ICB9KTsKK30pOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9t
ZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGln
aHQvYXBwL2pzL3BhZ2UvYXBwLmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9t
ZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGln
aHQvYXBwL2pzL3BhZ2UvYXBwLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYxNzMzYTNkODMwMDdjN2YwNmQ2MWMy
MDcwOTUzNzhlZDdhMTQwNTgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVu
Y2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBs
ZXMvZmxpZ2h0L2ZsaWdodC9hcHAvanMvcGFnZS9hcHAuanMKQEAgLTAsMCArMSwyNiBAQAorLypn
bG9iYWwgZGVmaW5lICovCisndXNlIHN0cmljdCc7CisKK2RlZmluZShbCisgICAgJ2RhdGEvdG9k
b3MnLAorICAgICdkYXRhL3N0YXRzJywKKyAgICAndWkvbmV3X2l0ZW0nLAorICAgICd1aS90b2Rv
X2xpc3QnLAorICAgICd1aS9zdGF0cycsCisgICAgJ3VpL21haW5fc2VsZWN0b3InLAorICAgICd1
aS90b2dnbGVfYWxsJworXSwgZnVuY3Rpb24gKFRvZG9zRGF0YSwgU3RhdHNEYXRhLCBOZXdJdGVt
VUksIFRvZG9MaXN0VUksIFN0YXRzVUksIE1haW5TZWxlY3RvclVJLCBUb2dnbGVBbGxVSSkgewor
ICAgIHZhciBpbml0aWFsaXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICBTdGF0c0RhdGEuYXR0
YWNoVG8oZG9jdW1lbnQpOworICAgICAgICBUb2Rvc0RhdGEuYXR0YWNoVG8oZG9jdW1lbnQpOwor
ICAgICAgICBOZXdJdGVtVUkuYXR0YWNoVG8oJyNuZXctdG9kbycpOworICAgICAgICBNYWluU2Vs
ZWN0b3JVSS5hdHRhY2hUbygnI21haW4nKTsKKyAgICAgICAgU3RhdHNVSS5hdHRhY2hUbygnI2Zv
b3RlcicpOworICAgICAgICBUb2dnbGVBbGxVSS5hdHRhY2hUbygnI3RvZ2dsZS1hbGwnKTsKKyAg
ICAgICAgVG9kb0xpc3RVSS5hdHRhY2hUbygnI3RvZG8tbGlzdCcpOworICAgIH07CisKKyAgICBy
ZXR1cm4geworICAgICAgICBpbml0aWFsaXplOiBpbml0aWFsaXplCisgICAgfTsKK30pOwpkaWZm
IC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJj
ZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL3N0b3Jl
LmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMv
dG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL3N0b3JlLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjI1YTdmOTBhY2E5NDExYjU5N2UxODkxODlkMzJlNzVkNmI5N2Q0YTcKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4x
L3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9hcHAv
anMvc3RvcmUuanMKQEAgLTAsMCArMSwxMSBAQAorLypnbG9iYWwgZGVmaW5lICovCisKKyd1c2Ug
c3RyaWN0JzsKKworZGVmaW5lKFsKKyAgICAnZGVwb3QnLAorICAgICdtZW1vcnlzdG9yYWdlJwor
XSwgZnVuY3Rpb24gKGRlcG90LCBNZW1vcnlTdG9yYWdlKSB7CisgICAgdmFyIG1lbVN0b3JlID0g
bmV3IE1lbW9yeVN0b3JhZ2UoJ3RvZG9zJyk7CisgICAgcmV0dXJuIGRlcG90KCd0b2RvcycsIHsg
aWRBdHRyaWJ1dGU6ICdpZCcsIHN0b3JhZ2VBZGFwdG9yOiBtZW1TdG9yZSB9KTsKK30pOwpkaWZm
IC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJj
ZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL3VpL21h
aW5fc2VsZWN0b3IuanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4x
L3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9hcHAv
anMvdWkvbWFpbl9zZWxlY3Rvci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ODhjMmQ0Y2UwYTkyZGUyZTRlMTIy
ODdmYjZlMTg4OWFmN2U3ZDMzCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJl
bmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1w
bGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL3VpL21haW5fc2VsZWN0b3IuanMKQEAgLTAsMCArMSwy
MCBAQAorLypnbG9iYWwgZGVmaW5lICovCisndXNlIHN0cmljdCc7CisKK2RlZmluZShbCisgICAg
J2ZsaWdodC9saWIvY29tcG9uZW50JworXSwgZnVuY3Rpb24gKGRlZmluZUNvbXBvbmVudCkgewor
ICAgIGZ1bmN0aW9uIG1haW5TZWxlY3RvcigpIHsKKyAgICAgICAgdGhpcy50b2dnbGUgPSBmdW5j
dGlvbiAoZSwgZGF0YSkgeworICAgICAgICAgICAgdmFyIHRvZ2dsZSA9IGRhdGEuYWxsID4gMDsK
KyAgICAgICAgICAgIHRoaXMuJG5vZGUudG9nZ2xlKHRvZ2dsZSk7CisgICAgICAgIH07CisKKyAg
ICAgICAgdGhpcy5hZnRlcignaW5pdGlhbGl6ZScsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHRoaXMuJG5vZGUuaGlkZSgpOworICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ2RhdGFT
dGF0c0NvdW50ZWQnLCB0aGlzLnRvZ2dsZSk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIHJl
dHVybiBkZWZpbmVDb21wb25lbnQobWFpblNlbGVjdG9yKTsKK30pOwpkaWZmIC0tZ2l0IGEvV2Vi
c2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9k
ZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL3VpL25ld19pdGVtLmpzIGIv
V2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212
Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL3VpL25ld19pdGVtLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjIxZDZkODdlMzQzYjU1ODFhOGE1N2E4ZmEzMzk0YjZkM2JhNDI1MGIKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4x
L3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9hcHAv
anMvdWkvbmV3X2l0ZW0uanMKQEAgLTAsMCArMSwyOSBAQAorLypnbG9iYWwgZGVmaW5lICovCisn
dXNlIHN0cmljdCc7CisKK2RlZmluZShbCisgICAgJ2ZsaWdodC9saWIvY29tcG9uZW50JworXSwg
ZnVuY3Rpb24gKGRlZmluZUNvbXBvbmVudCkgeworICAgIGZ1bmN0aW9uIG5ld0l0ZW0oKSB7Cisg
ICAgICAgIHZhciBFTlRFUl9LRVkgPSAxMzsKKworICAgICAgICB0aGlzLmNyZWF0ZU9uRW50ZXIg
PSBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAgaWYgKGUud2hpY2ggIT09IEVOVEVSX0tFWSB8
fAorICAgICAgICAgICAgICAgICF0aGlzLiRub2RlLnZhbCgpLnRyaW0oKSkgeworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGhpcy50cmlnZ2Vy
KCd1aUFkZFJlcXVlc3RlZCcsIHsKKyAgICAgICAgICAgICAgICB0aXRsZTogdGhpcy4kbm9kZS52
YWwoKS50cmltKCkKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICB0aGlzLiRub2RlLnZh
bCgnJyk7CisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy5hZnRlcignaW5pdGlhbGl6ZScsIGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHRoaXMub24oJ2tleWRvd24nLCB0aGlzLmNyZWF0ZU9u
RW50ZXIpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICByZXR1cm4gZGVmaW5lQ29tcG9uZW50
KG5ld0l0ZW0pOworfSk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1Nw
ZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0
L2ZsaWdodC9hcHAvanMvdWkvc3RhdHMuanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1Nw
ZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0
L2ZsaWdodC9hcHAvanMvdWkvc3RhdHMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWRhN2FjNjZhNzQ3ZGNhNjRi
NzA2MDM5YmI2MDg1NTBkMzYyMGRkZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dz
ZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1l
eGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC9qcy91aS9zdGF0cy5qcwpAQCAtMCwwICsxLDM3IEBA
CisvKmdsb2JhbCBkZWZpbmUgKi8KKyd1c2Ugc3RyaWN0JzsKKworZGVmaW5lKFsKKyAgICAnZmxp
Z2h0L2xpYi9jb21wb25lbnQnLAorICAgICcuL3dpdGhfZmlsdGVycycsCisgICAgJ3RleHQhdGVt
cGxhdGVzL3N0YXRzLmh0bWwnLAorICAgICdhcHAvdXRpbHMnCitdLCBmdW5jdGlvbiAoZGVmaW5l
Q29tcG9uZW50LCB3aXRoRmlsdGVycywgc3RhdHNUbXBsLCB1dGlscykgeworICAgIGZ1bmN0aW9u
IHN0YXRzKCkgeworICAgICAgICB2YXIgdGVtcGxhdGUgPSB1dGlscy50bXBsKHN0YXRzVG1wbCk7
CisKKyAgICAgICAgdGhpcy5hdHRyaWJ1dGVzKHsKKyAgICAgICAgICAgIGNsZWFyQ29tcGxldGVk
U2VsZWN0b3I6ICcjY2xlYXItY29tcGxldGVkJworICAgICAgICB9KTsKKworICAgICAgICB0aGlz
LnJlbmRlciA9IGZ1bmN0aW9uIChlLCBkYXRhKSB7CisgICAgICAgICAgICB2YXIgdG9nZ2xlID0g
ZGF0YS5hbGwgPiAwOworCisgICAgICAgICAgICB0aGlzLiRub2RlLmh0bWwodGVtcGxhdGUoZGF0
YSkpOworICAgICAgICAgICAgdGhpcy4kbm9kZS50b2dnbGUodG9nZ2xlKTsKKyAgICAgICAgICAg
IHRoaXMubWFya1NlbGVjdGVkKGRhdGEuZmlsdGVyKTsKKyAgICAgICAgfTsKKworICAgICAgICB0
aGlzLmNsZWFyQ29tcGxldGVkID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdGhpcy50cmln
Z2VyKCd1aUNsZWFyUmVxdWVzdGVkJyk7CisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy5hZnRl
cignaW5pdGlhbGl6ZScsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHRoaXMuJG5vZGUuaGlk
ZSgpOworICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ2RhdGFTdGF0c0NvdW50ZWQnLCB0
aGlzLnJlbmRlcik7CisgICAgICAgICAgICB0aGlzLm9uKCdjbGljaycsIHsgJ2NsZWFyQ29tcGxl
dGVkU2VsZWN0b3InOiB0aGlzLmNsZWFyQ29tcGxldGVkIH0pOworICAgICAgICB9KTsKKyAgICB9
CisKKyAgICByZXR1cm4gZGVmaW5lQ29tcG9uZW50KHN0YXRzLCB3aXRoRmlsdGVycyk7Cit9KTsK
ZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVz
b3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC9qcy91
aS90b2RvX2xpc3QuanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4x
L3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9hcHAv
anMvdWkvdG9kb19saXN0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ5NGQ4M2Q3NTU0ODBiZjc5M2M4ODNkZTAz
MWVjMjRiMDFhYjdhN2UKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gu
b3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMv
ZmxpZ2h0L2ZsaWdodC9hcHAvanMvdWkvdG9kb19saXN0LmpzCkBAIC0wLDAgKzEsMTA4IEBACisv
Kmdsb2JhbCBkZWZpbmUsICQgKi8KKyd1c2Ugc3RyaWN0JzsKKworZGVmaW5lKFsKKyAgICAnZmxp
Z2h0L2xpYi9jb21wb25lbnQnLAorICAgICd0ZXh0IXRlbXBsYXRlcy90b2RvLmh0bWwnLAorICAg
ICdhcHAvdXRpbHMnCitdLCBmdW5jdGlvbiAoZGVmaW5lQ29tcG9uZW50LCB0b2RvVG1wbCwgdXRp
bHMpIHsKKyAgICBmdW5jdGlvbiB0b2RvTGlzdCgpIHsKKyAgICAgICAgdmFyIEVOVEVSX0tFWSA9
IDEzOworICAgICAgICB2YXIgdGVtcGxhdGUgPSB1dGlscy50bXBsKHRvZG9UbXBsKTsKKworICAg
ICAgICB0aGlzLmF0dHJpYnV0ZXMoeworICAgICAgICAgICAgZGVzdHJveVNlbGVjdG9yOiAnYnV0
dG9uLmRlc3Ryb3knLAorICAgICAgICAgICAgdG9nZ2xlU2VsZWN0b3I6ICdpbnB1dC50b2dnbGUn
LAorICAgICAgICAgICAgbGFiZWxTZWxlY3RvcjogJ2xhYmVsJywKKyAgICAgICAgICAgIGVkaXRT
ZWxlY3RvcjogJy5lZGl0JworICAgICAgICB9KTsKKworICAgICAgICB0aGlzLnJlbmRlckFsbCA9
IGZ1bmN0aW9uIChlLCBkYXRhKSB7CisgICAgICAgICAgICB0aGlzLiRub2RlLmh0bWwoJycpOwor
ICAgICAgICAgICAgZGF0YS50b2Rvcy5mb3JFYWNoKGZ1bmN0aW9uIChlYWNoKSB7CisgICAgICAg
ICAgICAgICAgdGhpcy5yZW5kZXIoZSwgeyB0b2RvOiBlYWNoIH0pOworICAgICAgICAgICAgfSwg
dGhpcyk7CisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy5yZW5kZXIgPSBmdW5jdGlvbiAoZSwg
ZGF0YSkgeworICAgICAgICAgICAgaWYgKGUudHlwZSA9PT0gJ2RhdGFUb2RvQWRkZWQnICYmIGRh
dGEuZmlsdGVyID09PSAnY29tcGxldGVkJykgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgdGhpcy4kbm9kZS5hcHBlbmQodGVtcGxhdGUoZGF0
YS50b2RvKSk7CisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy5lZGl0ID0gZnVuY3Rpb24gKGUs
IGRhdGEpIHsKKyAgICAgICAgICAgIHZhciAkdG9kb0VsID0gJChkYXRhLmVsKS5wYXJlbnRzKCds
aScpOworCisgICAgICAgICAgICAkdG9kb0VsLmFkZENsYXNzKCdlZGl0aW5nJyk7CisgICAgICAg
ICAgICB0aGlzLnNlbGVjdCgnZWRpdFNlbGVjdG9yJykuZm9jdXMoKTsKKyAgICAgICAgfTsKKwor
ICAgICAgICB0aGlzLnJlcXVlc3RVcGRhdGUgPSBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAg
dmFyICRpbnB1dEVsID0gJChlLmN1cnJlbnRUYXJnZXQpOworICAgICAgICAgICAgdmFyICR0b2Rv
RWwgPSAkaW5wdXRFbC5wYXJlbnRzKCdsaScpOworICAgICAgICAgICAgdmFyIHZhbHVlID0gJGlu
cHV0RWwudmFsKCkudHJpbSgpOworICAgICAgICAgICAgdmFyIGlkID0gJHRvZG9FbC5hdHRyKCdp
ZCcpOworCisgICAgICAgICAgICBpZiAoISR0b2RvRWwuaGFzQ2xhc3MoJ2VkaXRpbmcnKSkgewor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgJHRv
ZG9FbC5yZW1vdmVDbGFzcygnZWRpdGluZycpOworCisgICAgICAgICAgICBpZiAodmFsdWUpIHsK
KyAgICAgICAgICAgICAgICAkdG9kb0VsLmZpbmQoJ2xhYmVsJykuaHRtbCh2YWx1ZSk7CisgICAg
ICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCd1aVVwZGF0ZVJlcXVlc3RlZCcsICB7IGlkOiBpZCwg
dGl0bGU6IHZhbHVlIH0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0
aGlzLnRyaWdnZXIoJ3VpUmVtb3ZlUmVxdWVzdGVkJywgeyBpZDogaWQgfSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlT25FbnRlciA9IGZ1
bmN0aW9uIChlLCBkYXRhKSB7CisgICAgICAgICAgICBpZiAoZS53aGljaCA9PT0gRU5URVJfS0VZ
KSB7CisgICAgICAgICAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKGUsIGRhdGEpOworICAgICAg
ICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHRoaXMucmVxdWVzdFJlbW92ZSA9IGZ1bmN0
aW9uIChlLCBkYXRhKSB7CisgICAgICAgICAgICB2YXIgaWQgPSAkKGRhdGEuZWwpLmF0dHIoJ2lk
Jykuc3BsaXQoJ18nKVsxXTsKKyAgICAgICAgICAgIHRoaXMudHJpZ2dlcigndWlSZW1vdmVSZXF1
ZXN0ZWQnLCB7IGlkOiBpZCB9KTsKKyAgICAgICAgfTsKKworICAgICAgICB0aGlzLnJlbW92ZSA9
IGZ1bmN0aW9uIChlLCBkYXRhKSB7CisgICAgICAgICAgICB2YXIgJHRvZG9FbCA9IHRoaXMuJG5v
ZGUuZmluZCgnIycgKyBkYXRhLmlkKTsKKyAgICAgICAgICAgICR0b2RvRWwucmVtb3ZlKCk7Cisg
ICAgICAgIH07CisKKyAgICAgICAgdGhpcy50b2dnbGUgPSBmdW5jdGlvbiAoZSwgZGF0YSkgewor
ICAgICAgICAgICAgdmFyICR0b2RvRWwgPSAkKGRhdGEuZWwpLnBhcmVudHMoJ2xpJyk7CisKKyAg
ICAgICAgICAgICR0b2RvRWwudG9nZ2xlQ2xhc3MoJ2NvbXBsZXRlZCcpOworICAgICAgICAgICAg
dGhpcy50cmlnZ2VyKCd1aVRvZ2dsZVJlcXVlc3RlZCcsIHsgaWQ6ICR0b2RvRWwuYXR0cignaWQn
KSB9KTsKKyAgICAgICAgfTsKKworICAgICAgICB0aGlzLmFmdGVyKCdpbml0aWFsaXplJywgZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ2RhdGFUb2RvQWRkZWQn
LCB0aGlzLnJlbmRlcik7CisgICAgICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAnZGF0YVRvZG9z
TG9hZGVkJywgdGhpcy5yZW5kZXJBbGwpOworICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwg
J2RhdGFUb2Rvc0ZpbHRlcmVkJywgdGhpcy5yZW5kZXJBbGwpOworICAgICAgICAgICAgdGhpcy5v
bihkb2N1bWVudCwgJ2RhdGFUb2RvVG9nZ2xlZEFsbCcsIHRoaXMucmVuZGVyQWxsKTsKKyAgICAg
ICAgICAgIHRoaXMub24oZG9jdW1lbnQsICdkYXRhVG9kb1JlbW92ZWQnLCB0aGlzLnJlbW92ZSk7
CisKKyAgICAgICAgICAgIHRoaXMub24oJ2NsaWNrJywgeyAnZGVzdHJveVNlbGVjdG9yJzogdGhp
cy5yZXF1ZXN0UmVtb3ZlIH0pOworICAgICAgICAgICAgdGhpcy5vbignY2xpY2snLCB7ICd0b2dn
bGVTZWxlY3Rvcic6IHRoaXMudG9nZ2xlIH0pOworICAgICAgICAgICAgdGhpcy5vbignZGJsY2xp
Y2snLCB7ICdsYWJlbFNlbGVjdG9yJzogdGhpcy5lZGl0IH0pOworCisgICAgICAgICAgICB0aGlz
LiRub2RlLm9uKCdibHVyJywgJy5lZGl0JywgdGhpcy5yZXF1ZXN0VXBkYXRlLmJpbmQodGhpcykp
OworICAgICAgICAgICAgdGhpcy4kbm9kZS5vbigna2V5ZG93bicsICcuZWRpdCcsIHRoaXMucmVx
dWVzdFVwZGF0ZU9uRW50ZXIuYmluZCh0aGlzKSk7CisKKyAgICAgICAgICAgIC8vIHRoZXNlIGRv
bid0IHdvcmsKKyAgICAgICAgICAgIC8vIHRoaXMub24odGhpcy5hdHRyLmVkaXRTZWxlY3Rvciwg
J2JsdXInLCB0aGlzLnJlcXVlc3RVcGRhdGUpOworICAgICAgICAgICAgLy8gdGhpcy5vbignYmx1
cicsIHsgJ2VkaXRTZWxlY3Rvcic6IHRoaXMucmVxdWVzdFVwZGF0ZSB9KTsKKworICAgICAgICAg
ICAgdGhpcy50cmlnZ2VyKCd1aUxvYWRSZXF1ZXN0ZWQnKTsKKyAgICAgICAgfSk7CisgICAgfQor
CisgICAgcmV0dXJuIGRlZmluZUNvbXBvbmVudCh0b2RvTGlzdCk7Cit9KTsKZGlmZiAtLWdpdCBh
L1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9t
dmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC9qcy91aS90b2dnbGVfYWxs
LmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMv
dG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL3VpL3RvZ2ds
ZV9hbGwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNGRjNjk4M2MzMWFiNmZjMWIxNzE4MDU4NTcwZDQyMzdkZjc0
NzQ4YQotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRv
bWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxp
Z2h0L2FwcC9qcy91aS90b2dnbGVfYWxsLmpzCkBAIC0wLDAgKzEsMjUgQEAKKy8qZ2xvYmFsIGRl
ZmluZSAqLworJ3VzZSBzdHJpY3QnOworCitkZWZpbmUoWworICAgICdmbGlnaHQvbGliL2NvbXBv
bmVudCcKK10sIGZ1bmN0aW9uIChkZWZpbmVDb21wb25lbnQpIHsKKyAgICBmdW5jdGlvbiB0b2dn
bGVBbGwoKSB7CisgICAgICAgIHRoaXMudG9nZ2xlQWxsQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ3VpVG9nZ2xlQWxsUmVxdWVzdGVkJywgeworICAg
ICAgICAgICAgICAgIGNvbXBsZXRlZDogdGhpcy4kbm9kZS5pcygnOmNoZWNrZWQnKQorICAgICAg
ICAgICAgfSk7CisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy50b2dnbGVDaGVja2JveCA9IGZ1
bmN0aW9uIChlLCBkYXRhKSB7CisgICAgICAgICAgICB0aGlzLm5vZGUuY2hlY2tlZCA9ICFkYXRh
LnJlbWFpbmluZzsKKyAgICAgICAgfTsKKworICAgICAgICB0aGlzLmFmdGVyKCdpbml0aWFsaXpl
JywgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdGhpcy5vbignY2xpY2snLCB0aGlzLnRvZ2ds
ZUFsbENvbXBsZXRlKTsKKyAgICAgICAgICAgIHRoaXMub24oZG9jdW1lbnQsICdkYXRhU3RhdHND
b3VudGVkJywgdGhpcy50b2dnbGVDaGVja2JveCk7CisgICAgICAgIH0pOworICAgIH0KKworICAg
IHJldHVybiBkZWZpbmVDb21wb25lbnQodG9nZ2xlQWxsKTsKK30pOwpkaWZmIC0tZ2l0IGEvV2Vi
c2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9k
ZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL3VpL3dpdGhfZmlsdGVycy5q
cyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3Rv
ZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC9qcy91aS93aXRoX2Zp
bHRlcnMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYjE3Mjc5OGUxZTk3MDQ5N2E5MGY2M2MyZjQwMjNjN2NmOTBj
MzcxMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRv
bWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxp
Z2h0L2FwcC9qcy91aS93aXRoX2ZpbHRlcnMuanMKQEAgLTAsMCArMSwyNiBAQAorLypnbG9iYWwg
ZGVmaW5lLCAkICovCisndXNlIHN0cmljdCc7CisKK2RlZmluZShmdW5jdGlvbiAoKSB7CisgICAg
cmV0dXJuIGZ1bmN0aW9uIHdpdGhGaWx0ZXJzKCkgeworICAgICAgICB0aGlzLmF0dHJpYnV0ZXMo
eworICAgICAgICAgICAgZmlsdGVyU2VsZWN0b3I6ICcjZmlsdGVycyBhJworICAgICAgICB9KTsK
KworICAgICAgICB0aGlzLmNob29zZUZpbHRlciA9IGZ1bmN0aW9uIChlLCBkYXRhKSB7CisgICAg
ICAgICAgICB2YXIgZmlsdGVyID0gZGF0YS5lbC5oYXNoLnNsaWNlKDIpOworCisgICAgICAgICAg
ICB0aGlzLnNlbGVjdCgnZmlsdGVyU2VsZWN0b3InKS5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTsK
KyAgICAgICAgICAgICQoZGF0YS5lbCkuYWRkQ2xhc3MoJ3NlbGVjdGVkJyk7CisgICAgICAgICAg
ICB0aGlzLnRyaWdnZXIoJ3VpRmlsdGVyUmVxdWVzdGVkJywgeyBmaWx0ZXI6IGZpbHRlciB9KTsK
KyAgICAgICAgfTsKKworICAgICAgICB0aGlzLm1hcmtTZWxlY3RlZCA9IGZ1bmN0aW9uIChmaWx0
ZXIpIHsKKyAgICAgICAgICAgIHRoaXMuJG5vZGUuZmluZCgnW2hyZWY9IiMvJyArIGZpbHRlciAr
ICciXScpLmFkZENsYXNzKCdzZWxlY3RlZCcpOworICAgICAgICB9OworCisgICAgICAgIHRoaXMu
YWZ0ZXIoJ2luaXRpYWxpemUnLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB0aGlzLm9uKCdj
bGljaycsIHsgZmlsdGVyU2VsZWN0b3I6IHRoaXMuY2hvb3NlRmlsdGVyIH0pOworICAgICAgICB9
KTsKKyAgICB9OworfSk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1Nw
ZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0
L2ZsaWdodC9hcHAvanMvdXRpbHMuanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVk
b21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Zs
aWdodC9hcHAvanMvdXRpbHMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWE4NTczMzkxYzA1NGM0MTE4ZjQ1ODRm
MDk5MGJiM2M2ZDg4M2E0MAotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5j
aC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxl
cy9mbGlnaHQvZmxpZ2h0L2FwcC9qcy91dGlscy5qcwpAQCAtMCwwICsxLDEzNCBAQAorLypnbG9i
YWwgZGVmaW5lICovCisndXNlIHN0cmljdCc7CisKKy8vIHRtcGwgZnVuY3Rpb24gc2Nvb3BlZCBm
cm9tIHVuZGVyc2NvcmUuCisvLyBodHRwOi8vZG9jdW1lbnRjbG91ZC5naXRodWIuY29tL3VuZGVy
c2NvcmUvI3RlbXBsYXRlCitkZWZpbmUoZnVuY3Rpb24gKCkgeworICAgIHZhciBfID0ge307CisK
KyAgICAvLyBMaXN0IG9mIEhUTUwgZW50aXRpZXMgZm9yIGVzY2FwaW5nLgorICAgIHZhciBlbnRp
dHlNYXAgPSB7CisgICAgICAgIGVzY2FwZTogeworICAgICAgICAgICAgJyYnOiAnJmFtcDsnLAor
ICAgICAgICAgICAgJzwnOiAnJmx0OycsCisgICAgICAgICAgICAnPic6ICcmZ3Q7JywKKyAgICAg
ICAgICAgICciJzogJyZxdW90OycsCisgICAgICAgICAgICAvKmpzaGludCBxdW90bWFyazpmYWxz
ZSAqLworICAgICAgICAgICAgIiciOiAnJiN4Mjc7JywKKyAgICAgICAgICAgICcvJzogJyYjeDJG
OycKKyAgICAgICAgfQorICAgIH07CisKKyAgICB2YXIgZXNjYXBlS2V5cyA9ICcmPD4iXCcvJzsK
KyAgICB2YXIgdW5lc2NhcGVLZXlzID0gJyZhbXA7fCZsdDt8Jmd0O3wmcXVvdDt8JiN4Mjc7fCYj
eDJGOyc7CisKKyAgICAvLyBSZWdleGVzIGNvbnRhaW5pbmcgdGhlIGtleXMgYW5kIHZhbHVlcyBs
aXN0ZWQgaW1tZWRpYXRlbHkgYWJvdmUuCisgICAgdmFyIGVudGl0eVJlZ2V4ZXMgPSB7CisgICAg
ICAgIGVzY2FwZTogICBuZXcgUmVnRXhwKCdbJyArIGVzY2FwZUtleXMgKyAnXScsICdnJyksCisg
ICAgICAgIHVuZXNjYXBlOiBuZXcgUmVnRXhwKCcoJyArIHVuZXNjYXBlS2V5cyArICcpJywgJ2cn
KQorICAgIH07CisKKyAgICAvLyBGdW5jdGlvbnMgZm9yIGVzY2FwaW5nIGFuZCB1bmVzY2FwaW5n
IHN0cmluZ3MgdG8vZnJvbSBIVE1MIGludGVycG9sYXRpb24uCisgICAgWydlc2NhcGUnLCAndW5l
c2NhcGUnXS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHsKKyAgICAgICAgX1ttZXRob2RdID0g
ZnVuY3Rpb24gKHN0cmluZykgeworICAgICAgICAgICAgaWYgKHN0cmluZyA9PT0gbnVsbCB8fCBz
dHJpbmcgPT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgICAgIHJldHVybiAnJzsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuICgnJyArIHN0cmluZykucmVwbGFjZShlbnRp
dHlSZWdleGVzW21ldGhvZF0sIGZ1bmN0aW9uIChtYXRjaCkgeworICAgICAgICAgICAgICAgIHJl
dHVybiBlbnRpdHlNYXBbbWV0aG9kXVttYXRjaF07CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
fTsKKyAgICB9KTsKKworICAgIHZhciBzZXR0aW5ncyA9IHsKKyAgICAgICAgZXZhbHVhdGU6IC88
JShbXHNcU10rPyklPi9nLAorICAgICAgICBpbnRlcnBvbGF0ZTogLzwlPShbXHNcU10rPyklPi9n
LAorICAgICAgICBlc2NhcGU6IC88JS0oW1xzXFNdKz8pJT4vZworICAgIH07CisKKyAgICB2YXIg
bm9NYXRjaCA9IC8oLileLzsKKyAgICB2YXIgZXNjYXBlcyA9IHsKKyAgICAgICAgLypqc2hpbnQg
cXVvdG1hcms6ZmFsc2UgKi8KKyAgICAgICAgIiciOiAiJyIsCisgICAgICAgICdcXCc6ICdcXCcs
CisgICAgICAgICdccic6ICdyJywKKyAgICAgICAgJ1xuJzogJ24nLAorICAgICAgICAnXHQnOiAn
dCcsCisgICAgICAgICdcdTIwMjgnOiAndTIwMjgnLAorICAgICAgICAnXHUyMDI5JzogJ3UyMDI5
JworICAgIH07CisKKyAgICB2YXIgZXNjYXBlciA9IC9cXHwnfFxyfFxufFx0fFx1MjAyOHxcdTIw
MjkvZzsKKworICAgIC8vIEphdmFTY3JpcHQgbWljcm8tdGVtcGxhdGluZywgc2ltaWxhciB0byBK
b2huIFJlc2lnJ3MgaW1wbGVtZW50YXRpb24uCisgICAgLy8gVW5kZXJzY29yZSB0ZW1wbGF0aW5n
IGhhbmRsZXMgYXJiaXRyYXJ5IGRlbGltaXRlcnMsIHByZXNlcnZlcyB3aGl0ZXNwYWNlLAorICAg
IC8vIGFuZCBjb3JyZWN0bHkgZXNjYXBlcyBxdW90ZXMgd2l0aGluIGludGVycG9sYXRlZCBjb2Rl
LgorICAgIHZhciB0ZW1wbGF0ZSA9IGZ1bmN0aW9uICh0ZXh0LCBkYXRhKSB7CisgICAgICAgIHZh
ciByZW5kZXI7CisKKyAgICAgICAgLy8gQ29tYmluZSBkZWxpbWl0ZXJzIGludG8gb25lIHJlZ3Vs
YXIgZXhwcmVzc2lvbiB2aWEgYWx0ZXJuYXRpb24uCisgICAgICAgIHZhciBtYXRjaGVyID0gbmV3
IFJlZ0V4cChbCisgICAgICAgICAgICAoc2V0dGluZ3MuZXNjYXBlIHx8IG5vTWF0Y2gpLnNvdXJj
ZSwKKyAgICAgICAgICAgIChzZXR0aW5ncy5pbnRlcnBvbGF0ZSB8fCBub01hdGNoKS5zb3VyY2Us
CisgICAgICAgICAgICAoc2V0dGluZ3MuZXZhbHVhdGUgfHwgbm9NYXRjaCkuc291cmNlCisgICAg
ICAgIF0uam9pbignfCcpICsgJ3wkJywgJ2cnKTsKKworICAgICAgICAvLyBDb21waWxlIHRoZSB0
ZW1wbGF0ZSBzb3VyY2UsIGVzY2FwaW5nIHN0cmluZyBsaXRlcmFscyBhcHByb3ByaWF0ZWx5Lgor
ICAgICAgICB2YXIgaW5kZXggPSAwOworICAgICAgICB2YXIgc291cmNlID0gIl9fcCs9JyI7Cisg
ICAgICAgIHRleHQucmVwbGFjZShtYXRjaGVyLCBmdW5jdGlvbiAobWF0Y2gsIGVzY2FwZSwgaW50
ZXJwb2xhdGUsIGV2YWx1YXRlLCBvZmZzZXQpIHsKKyAgICAgICAgICAgIHNvdXJjZSArPSB0ZXh0
LnNsaWNlKGluZGV4LCBvZmZzZXQpCisgICAgICAgICAgICAucmVwbGFjZShlc2NhcGVyLCBmdW5j
dGlvbiAobWF0Y2gpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1xcJyArIGVzY2FwZXNbbWF0
Y2hdOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGlmIChlc2NhcGUpIHsKKyAgICAg
ICAgICAgICAgICBzb3VyY2UgKz0gIicrXG4oKF9fdD0oIiArIGVzY2FwZSArICIpKT09bnVsbD8n
JzpfLmVzY2FwZShfX3QpKStcbiciOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlu
dGVycG9sYXRlKSB7CisgICAgICAgICAgICAgICAgc291cmNlICs9ICInK1xuKChfX3Q9KCIgKyBp
bnRlcnBvbGF0ZSArICIpKT09bnVsbD8nJzpfX3QpK1xuJyI7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoZXZhbHVhdGUpIHsKKyAgICAgICAgICAgICAgICBzb3VyY2UgKz0gIic7XG4i
ICsgZXZhbHVhdGUgKyAiXG5fX3ArPSciOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5k
ZXggPSBvZmZzZXQgKyBtYXRjaC5sZW5ndGg7CisgICAgICAgICAgICByZXR1cm4gbWF0Y2g7Cisg
ICAgICAgIH0pOworICAgICAgICBzb3VyY2UgKz0gIic7XG4iOworCisgICAgICAgIC8vIElmIGEg
dmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCwgcGxhY2UgZGF0YSB2YWx1ZXMgaW4gbG9jYWwgc2Nv
cGUuCisgICAgICAgIGlmICghc2V0dGluZ3MudmFyaWFibGUpIHsKKyAgICAgICAgICAgIHNvdXJj
ZSA9ICd3aXRoKG9ianx8e30pe1xuJyArIHNvdXJjZSArICd9XG4nOworICAgICAgICB9CisKKyAg
ICAgICAgc291cmNlID0gInZhciBfX3QsX19wPScnLF9faj1BcnJheS5wcm90b3R5cGUuam9pbiwi
ICsKKyAgICAgICAgICAgICJwcmludD1mdW5jdGlvbigpe19fcCs9X19qLmNhbGwoYXJndW1lbnRz
LCcnKTt9O1xuIiArCisgICAgICAgICAgICBzb3VyY2UgKyAicmV0dXJuIF9fcDtcbiI7CisKKyAg
ICAgICAgdHJ5IHsKKyAgICAgICAgICAgIC8qanNoaW50IGV2aWw6dHJ1ZSAqLworICAgICAgICAg
ICAgcmVuZGVyID0gbmV3IEZ1bmN0aW9uKHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonLCAnXycs
IHNvdXJjZSk7CisgICAgICAgIH0gY2F0Y2ggKGVycikgeworICAgICAgICAgICAgZXJyLnNvdXJj
ZSA9IHNvdXJjZTsKKyAgICAgICAgICAgIHRocm93IGVycjsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChkYXRhKSB7CisgICAgICAgICAgICByZXR1cm4gcmVuZGVyKGRhdGEsIF8pOworICAgICAg
ICB9CisKKyAgICAgICAgdmFyIHRlbXBsYXRlID0gZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAg
ICAgIHJldHVybiByZW5kZXIuY2FsbCh0aGlzLCBkYXRhLCBfKTsKKyAgICAgICAgfTsKKworICAg
ICAgICAvLyBQcm92aWRlIHRoZSBjb21waWxlZCBmdW5jdGlvbiBzb3VyY2UgYXMgYSBjb252ZW5p
ZW5jZSBmb3IgcHJlY29tcGlsYXRpb24uCisgICAgICAgIHRlbXBsYXRlLnNvdXJjZSA9ICdmdW5j
dGlvbignICsgKHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonKSArICcpe1xuJyArIHNvdXJjZSAr
ICd9JzsKKworICAgICAgICByZXR1cm4gdGVtcGxhdGU7CisgICAgfTsKKworICAgIHJldHVybiB7
CisgICAgICAgIHRtcGw6IHRlbXBsYXRlCisgICAgfTsKK30pOwpkaWZmIC0tZ2l0IGEvV2Vic2l0
ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9kZXBl
bmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL3RlbXBsYXRlcy9zdGF0cy5odG1sIGIv
V2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212
Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL3RlbXBsYXRlcy9zdGF0cy5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmExZGRmMWZjMTBmZWFhNzJmOWQyMmEzMjZkODZhODE1ZGYxNWY1MjEK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVy
Mi4xL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9h
cHAvdGVtcGxhdGVzL3N0YXRzLmh0bWwKQEAgLTAsMCArMSwxNyBAQAorPHNwYW4gaWQ9InRvZG8t
Y291bnQiIGNsYXNzPSJ0b2RvLWNvdW50Ij4KKyAgICA8c3Ryb25nPjwlPSByZW1haW5pbmcgJT48
L3N0cm9uZz4gPCU9IHJlbWFpbmluZyA9PSAxID8gJ2l0ZW0nIDogJ2l0ZW1zJyAlPiBsZWZ0Cis8
L3NwYW4+Cis8dWwgaWQ9ImZpbHRlcnMiIGNsYXNzPSJmaWx0ZXJzIj4KKyAgICA8bGk+CisgICAg
ICAgIDxhIGhyZWY9IiMvIj5BbGw8L2E+CisgICAgPC9saT4KKyAgICA8bGk+CisgICAgICAgIDxh
IGhyZWY9IiMvYWN0aXZlIj5BY3RpdmU8L2E+CisgICAgPC9saT4KKyAgICA8bGk+CisgICAgICAg
IDxhIGhyZWY9IiMvY29tcGxldGVkIj5Db21wbGV0ZWQ8L2E+CisgICAgPC9saT4KKzwvdWw+Cis8
JSBpZiAoY29tcGxldGVkKSB7ICU+Cis8YnV0dG9uIGlkPSJjbGVhci1jb21wbGV0ZWQiIGNsYXNz
PSJjbGVhci1jb21wbGV0ZWQiPkNsZWFyIGNvbXBsZXRlZDwvYnV0dG9uPgorPCUgfSAlPgpkaWZm
IC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJj
ZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL3RlbXBsYXRl
cy90b2RvLmh0bWwgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jl
c291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9hcHAvdGVt
cGxhdGVzL3RvZG8uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMWZmNzUzODlkZjU3MDEyNjJlMWY1MjYxZWM5
NDUzMzI0YzNlYjZkCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9y
Zy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2Zs
aWdodC9mbGlnaHQvYXBwL3RlbXBsYXRlcy90b2RvLmh0bWwKQEAgLTAsMCArMSw4IEBACis8bGkg
aWQ9IjwlPSBpZCAlPiIgY2xhc3M9IjwlPSBjb21wbGV0ZWQgPyAnY29tcGxldGVkJyA6ICcnICU+
Ij4KKyAgICA8ZGl2IGNsYXNzPSJ2aWV3Ij4KKyAgICAgICAgPGlucHV0IGNsYXNzPSJ0b2dnbGUi
IHR5cGU9ImNoZWNrYm94IiA8JT0gY29tcGxldGVkID8gJ2NoZWNrZWQnIDogJycgJT4+CisgICAg
ICAgIDxsYWJlbD48JS0gdGl0bGUgJT48L2xhYmVsPgorICAgICAgICA8YnV0dG9uIGlkPSJkZXN0
cm95XzwlPSBpZCAlPiIgY2xhc3M9ImRlc3Ryb3kiPjwvYnV0dG9uPgorICAgIDwvZGl2PgorICAg
IDxpbnB1dCBjbGFzcz0iZWRpdCIgdmFsdWU9IjwlLSB0aXRsZSAlPiI+Cis8L2xpPgpkaWZmIC0t
Z2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMv
dG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvaW5kZXguaHRtbCBiL1dl
YnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMv
ZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NGI0ODBiNzQyMzRkODBmYzExYWU3NjBmN2YzZmU2NGY2YzA5ZTYwMAotLS0gL2Rldi9udWxsCisr
KyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3Rv
ZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2luZGV4Lmh0bWwKQEAgLTAs
MCArMSwzMCBAQAorPCFkb2N0eXBlIGh0bWw+Cis8aHRtbCBsYW5nPSJlbiIgZGF0YS1mcmFtZXdv
cms9ImZsaWdodCI+CisgICAgPGhlYWQ+CisgICAgICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4K
KyAgICAgICAgPHRpdGxlPkZsaWdodCDigKIgVG9kbzwvdGl0bGU+CisgICAgICAgIDxsaW5rIHJl
bD0ic3R5bGVzaGVldCIgaHJlZj0ibm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuY3Nz
Ij4KKyAgICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJub2RlX21vZHVsZXMvdG9k
b212Yy1hcHAtY3NzL2luZGV4LmNzcyI+CisgICAgPC9oZWFkPgorICAgIDxib2R5PgorICAgICAg
ICA8c2VjdGlvbiBpZD0idG9kb2FwcCIgY2xhc3M9InRvZG9hcHAiPgorICAgICAgICAgICAgPGhl
YWRlciBpZD0iaGVhZGVyIiBjbGFzcz0iaGVhZGVyIj4KKyAgICAgICAgICAgICAgICA8aDE+dG9k
b3M8L2gxPgorICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0ibmV3LXRvZG8iIGNsYXNzPSJuZXct
dG9kbyIgcGxhY2Vob2xkZXI9IldoYXQgbmVlZHMgdG8gYmUgZG9uZT8iIGF1dG9mb2N1cz4KKyAg
ICAgICAgICAgIDwvaGVhZGVyPgorICAgICAgICAgICAgPHNlY3Rpb24gaWQ9Im1haW4iIGNsYXNz
PSJtYWluIj4KKyAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9InRvZ2dsZS1hbGwiIGNsYXNzPSJ0
b2dnbGUtYWxsIiB0eXBlPSJjaGVja2JveCI+CisgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0i
dG9nZ2xlLWFsbCI+TWFyayBhbGwgYXMgY29tcGxldGU8L2xhYmVsPgorICAgICAgICAgICAgICAg
IDx1bCBpZD0idG9kby1saXN0IiBjbGFzcz0idG9kby1saXN0Ij48L3VsPgorICAgICAgICAgICAg
PC9zZWN0aW9uPgorICAgICAgICAgICAgPGZvb3RlciBpZD0iZm9vdGVyIiBjbGFzcz0iZm9vdGVy
Ij48L2Zvb3Rlcj4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICA8Zm9vdGVyIGlkPSJpbmZv
IiBjbGFzcz0iaW5mbyI+CisgICAgICAgICAgICA8cD5Eb3VibGUtY2xpY2sgdG8gZWRpdCBhIHRv
ZG88L3A+CisgICAgICAgICAgICA8cD5TcGVlZG9tZXRlciB2ZXJzaW9uIGJ5IEFkZHkgT3NtYW5p
PC9wPgorICAgICAgICAgICAgPHA+Q3JlYXRlZCBieSA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5j
b20vbWt1a2xpcyI+TWljaGFsIEt1a2xpczwvYT48L3A+CisgICAgICAgICAgICA8cD5QYXJ0IG9m
IDxhIGhyZWY9Imh0dHA6Ly90b2RvbXZjLmNvbSI+VG9kb01WQzwvYT48L3A+CisgICAgICAgIDwv
Zm9vdGVyPgorICAgICAgICA8c2NyaXB0IGRhdGEtbWFpbj0iYXBwL2pzL21haW4iIHNyYz0ibm9k
ZV9tb2R1bGVzL3JlcXVpcmVqcy9yZXF1aXJlLmpzIj48L3NjcmlwdD4KKyAgICA8L2JvZHk+Cis8
L2h0bWw+CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVy
Mi4xL3Jlc291cmNlcy90b2RvbXZjL2Z1bmN0aW9uYWwtcHJvZy1leGFtcGxlcy9lbG0vVG9kby5l
bG0gYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90
b2RvbXZjL2Z1bmN0aW9uYWwtcHJvZy1leGFtcGxlcy9lbG0vVG9kby5lbG0KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YmYxZDM5ZGIzMTcxOWY5NTJkMzIxOWVkNmVkMDcwMTkxNGI1YWE2ZgotLS0gL2Rldi9udWxsCisr
KyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3Rv
ZG9tdmMvZnVuY3Rpb25hbC1wcm9nLWV4YW1wbGVzL2VsbS9Ub2RvLmVsbQpAQCAtMCwwICsxLDM5
MCBAQAorcG9ydCBtb2R1bGUgVG9kbyBleHBvc2luZyAoLi4pCisKK3stfCBUb2RvTVZDIGltcGxl
bWVudGVkIGluIEVsbSwgdXNpbmcgcGxhaW4gSFRNTCBhbmQgQ1NTIGZvciByZW5kZXJpbmcuCisK
K1RoaXMgYXBwbGljYXRpb24gaXMgYnJva2VuIHVwIGludG8gZm91ciBkaXN0aW5jdCBwYXJ0czoK
KworICAxLiBNb2RlbCAgLSBhIGZ1bGwgZGVzY3JpcHRpb24gb2YgdGhlIGFwcGxpY2F0aW9uIGFz
IGRhdGEKKyAgMi4gVXBkYXRlIC0gYSB3YXkgdG8gdXBkYXRlIHRoZSBtb2RlbCBiYXNlZCBvbiB1
c2VyIGFjdGlvbnMKKyAgMy4gVmlldyAgIC0gYSB3YXkgdG8gdmlzdWFsaXplIG91ciBtb2RlbCB3
aXRoIEhUTUwKKworVGhpcyBwcm9ncmFtIGlzIG5vdCBwYXJ0aWN1bGFybHkgbGFyZ2UsIHNvIGRl
ZmluaXRlbHkgc2VlIHRoZSBmb2xsb3dpbmcKK2RvY3VtZW50IGZvciBub3RlcyBvbiBzdHJ1Y3R1
cmluZyBtb3JlIGNvbXBsZXggR1VJcyB3aXRoIEVsbToKK2h0dHA6Ly9ndWlkZS5lbG0tbGFuZy5v
cmcvYXJjaGl0ZWN0dXJlLworLX0KKworaW1wb3J0IERvbQoraW1wb3J0IFRhc2sKK2ltcG9ydCBI
dG1sIGV4cG9zaW5nICguLikKK2ltcG9ydCBIdG1sLkF0dHJpYnV0ZXMgZXhwb3NpbmcgKC4uKQor
aW1wb3J0IEh0bWwuRXZlbnRzIGV4cG9zaW5nICguLikKK2ltcG9ydCBIdG1sLkxhenkgZXhwb3Np
bmcgKGxhenksIGxhenkyKQoraW1wb3J0IEh0bWwuQXBwCitpbXBvcnQgTmF2aWdhdGlvbiBleHBv
c2luZyAoUGFyc2VyKQoraW1wb3J0IFN0cmluZworaW1wb3J0IFN0cmluZy5FeHRyYQoraW1wb3J0
IFRvZG8uVGFzaworCisKKy0tIE1PREVMCistLSBUaGUgZnVsbCBhcHBsaWNhdGlvbiBzdGF0ZSBv
ZiBvdXIgdG9kbyBhcHAuCisKKwordHlwZSBhbGlhcyBNb2RlbCA9CisgICAgeyB0YXNrcyA6IExp
c3QgVG9kby5UYXNrLk1vZGVsCisgICAgLCBmaWVsZCA6IFN0cmluZworICAgICwgdWlkIDogSW50
CisgICAgLCB2aXNpYmlsaXR5IDogU3RyaW5nCisgICAgfQorCisKK3R5cGUgYWxpYXMgRmxhZ3Mg
PQorICAgIE1heWJlIE1vZGVsCisKKworZW1wdHlNb2RlbCA6IE1vZGVsCitlbXB0eU1vZGVsID0K
KyAgICB7IHRhc2tzID0gW10KKyAgICAsIHZpc2liaWxpdHkgPSAiQWxsIgorICAgICwgZmllbGQg
PSAiIgorICAgICwgdWlkID0gMAorICAgIH0KKworCisKKy0tIFVQREFURQorLS0gQSBkZXNjcmlw
dGlvbiBvZiB0aGUga2luZHMgb2YgYWN0aW9ucyB0aGF0IGNhbiBiZSBwZXJmb3JtZWQgb24gdGhl
IG1vZGVsIG9mCistLSBvdXIgYXBwbGljYXRpb24uIFNlZSB0aGUgZm9sbG93aW5nIHBvc3QgZm9y
IG1vcmUgaW5mbyBvbiB0aGlzIHBhdHRlcm4gYW5kCistLSBzb21lIGFsdGVybmF0aXZlczogaHR0
cDovL2d1aWRlLmVsbS1sYW5nLm9yZy9hcmNoaXRlY3R1cmUvCisKKwordHlwZSBNc2cKKyAgICA9
IE5vT3AKKyAgICB8IFVwZGF0ZUZpZWxkIFN0cmluZworICAgIHwgQWRkCisgICAgfCBVcGRhdGVU
YXNrICggSW50LCBUb2RvLlRhc2suTXNnICkKKyAgICB8IERlbGV0ZUNvbXBsZXRlCisgICAgfCBD
aGVja0FsbCBCb29sCisgICAgfCBDaGFuZ2VWaXNpYmlsaXR5IFN0cmluZworCisKKworLS0gSG93
IHdlIHVwZGF0ZSBvdXIgTW9kZWwgb24gYW55IGdpdmVuIE1lc3NhZ2UKKworCit1cGRhdGUgOiBN
c2cgLT4gTW9kZWwgLT4gKCBNb2RlbCwgQ21kIE1zZyApCit1cGRhdGUgbXNnIG1vZGVsID0KKyAg
ICBjYXNlIERlYnVnLmxvZyAiTUVTU0FHRTogIiBtc2cgb2YKKyAgICAgICAgTm9PcCAtPgorICAg
ICAgICAgICAgKCBtb2RlbCwgQ21kLm5vbmUgKQorCisgICAgICAgIFVwZGF0ZUZpZWxkIHN0ciAt
PgorICAgICAgICAgICAgbGV0CisgICAgICAgICAgICAgICAgbmV3TW9kZWwgPQorICAgICAgICAg
ICAgICAgICAgICB7IG1vZGVsIHwgZmllbGQgPSBzdHIgfQorICAgICAgICAgICAgaW4KKyAgICAg
ICAgICAgICAgICAoIG5ld01vZGVsLCBzYXZlIG1vZGVsICkKKworICAgICAgICBBZGQgLT4KKyAg
ICAgICAgICAgIGxldAorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0KKyAgICAgICAgICAg
ICAgICAgICAgU3RyaW5nLnRyaW0gbW9kZWwuZmllbGQKKworICAgICAgICAgICAgICAgIG5ld01v
ZGVsID0KKyAgICAgICAgICAgICAgICAgICAgaWYgU3RyaW5nLmlzRW1wdHkgZGVzY3JpcHRpb24g
dGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWwKKyAgICAgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeyBtb2RlbAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgdWlkID0gbW9kZWwudWlkICsgMQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICwgZmllbGQgPSAiIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgdGFza3MgPSBt
b2RlbC50YXNrcyArKyBbIFRvZG8uVGFzay5pbml0IGRlc2NyaXB0aW9uIG1vZGVsLnVpZCBdCisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpbgorICAgICAgICAgICAgICAg
ICggbmV3TW9kZWwsIHNhdmUgbmV3TW9kZWwgKQorCisgICAgICAgIFVwZGF0ZVRhc2sgKCBpZCwg
dGFza01zZyApIC0+CisgICAgICAgICAgICBsZXQKKyAgICAgICAgICAgICAgICB1cGRhdGVUYXNr
IHQgPQorICAgICAgICAgICAgICAgICAgICBpZiB0LmlkID09IGlkIHRoZW4KKyAgICAgICAgICAg
ICAgICAgICAgICAgIFRvZG8uVGFzay51cGRhdGUgdGFza01zZyB0CisgICAgICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIEp1c3QgdAorCisgICAgICAgICAgICAg
ICAgbmV3TW9kZWwgPQorICAgICAgICAgICAgICAgICAgICB7IG1vZGVsIHwgdGFza3MgPSBMaXN0
LmZpbHRlck1hcCB1cGRhdGVUYXNrIG1vZGVsLnRhc2tzIH0KKyAgICAgICAgICAgIGluCisgICAg
ICAgICAgICAgICAgY2FzZSB0YXNrTXNnIG9mCisgICAgICAgICAgICAgICAgICAgIFRvZG8uVGFz
ay5Gb2N1cyBlbGVtZW50SWQgLT4KKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld01vZGVsICEg
WyBzYXZlIG5ld01vZGVsLCBmb2N1c1Rhc2sgZWxlbWVudElkIF0KKworICAgICAgICAgICAgICAg
ICAgICBfIC0+CisgICAgICAgICAgICAgICAgICAgICAgICAoIG5ld01vZGVsLCBzYXZlIG5ld01v
ZGVsICkKKworICAgICAgICBEZWxldGVDb21wbGV0ZSAtPgorICAgICAgICAgICAgbGV0CisgICAg
ICAgICAgICAgICAgbmV3TW9kZWwgPQorICAgICAgICAgICAgICAgICAgICB7IG1vZGVsCisgICAg
ICAgICAgICAgICAgICAgICAgICB8IHRhc2tzID0gTGlzdC5maWx0ZXIgKG5vdCA8PCAuY29tcGxl
dGVkKSBtb2RlbC50YXNrcworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpbgor
ICAgICAgICAgICAgICAgICggbmV3TW9kZWwsIHNhdmUgbmV3TW9kZWwgKQorCisgICAgICAgIENo
ZWNrQWxsIGJvb2wgLT4KKyAgICAgICAgICAgIGxldAorICAgICAgICAgICAgICAgIHVwZGF0ZVRh
c2sgdCA9CisgICAgICAgICAgICAgICAgICAgIHsgdCB8IGNvbXBsZXRlZCA9IGJvb2wgfQorCisg
ICAgICAgICAgICAgICAgbmV3TW9kZWwgPQorICAgICAgICAgICAgICAgICAgICB7IG1vZGVsIHwg
dGFza3MgPSBMaXN0Lm1hcCB1cGRhdGVUYXNrIG1vZGVsLnRhc2tzIH0KKyAgICAgICAgICAgIGlu
CisgICAgICAgICAgICAgICAgKCBuZXdNb2RlbCwgc2F2ZSBuZXdNb2RlbCApCisKKyAgICAgICAg
Q2hhbmdlVmlzaWJpbGl0eSB2aXNpYmlsaXR5IC0+CisgICAgICAgICAgICBsZXQKKyAgICAgICAg
ICAgICAgICBuZXdNb2RlbCA9CisgICAgICAgICAgICAgICAgICAgIHsgbW9kZWwgfCB2aXNpYmls
aXR5ID0gdmlzaWJpbGl0eSB9CisgICAgICAgICAgICBpbgorICAgICAgICAgICAgICAgICggbmV3
TW9kZWwsIHNhdmUgbW9kZWwgKQorCisKK2ZvY3VzVGFzayA6IFN0cmluZyAtPiBDbWQgTXNnCitm
b2N1c1Rhc2sgZWxlbWVudElkID0KKyAgICBUYXNrLnBlcmZvcm0gKFxfIC0+IE5vT3ApIChcXyAt
PiBOb09wKSAoRG9tLmZvY3VzIGVsZW1lbnRJZCkKKworCisKKy0tIFZJRVcKKworCit2aWV3IDog
TW9kZWwgLT4gSHRtbCBNc2cKK3ZpZXcgbW9kZWwgPQorICAgIGRpdgorICAgICAgICBbIGNsYXNz
ICJ0b2RvbXZjLXdyYXBwZXIiCisgICAgICAgICwgc3R5bGUgWyAoICJ2aXNpYmlsaXR5IiwgImhp
ZGRlbiIgKSBdCisgICAgICAgIF0KKyAgICAgICAgWyBzZWN0aW9uCisgICAgICAgICAgICBbIGNs
YXNzICJ0b2RvYXBwIiBdCisgICAgICAgICAgICBbIGxhenkgdGFza0VudHJ5IG1vZGVsLmZpZWxk
CisgICAgICAgICAgICAsIGxhenkyIHRhc2tMaXN0IG1vZGVsLnZpc2liaWxpdHkgbW9kZWwudGFz
a3MKKyAgICAgICAgICAgICwgbGF6eTIgY29udHJvbHMgbW9kZWwudmlzaWJpbGl0eSBtb2RlbC50
YXNrcworICAgICAgICAgICAgXQorICAgICAgICAsIGluZm9Gb290ZXIKKyAgICAgICAgXQorCisK
K3Rhc2tFbnRyeSA6IFN0cmluZyAtPiBIdG1sIE1zZwordGFza0VudHJ5IHRhc2sgPQorICAgIGhl
YWRlcgorICAgICAgICBbIGNsYXNzICJoZWFkZXIiIF0KKyAgICAgICAgWyBoMSBbXSBbIHRleHQg
InRvZG9zIiBdCisgICAgICAgICwgaW5wdXQKKyAgICAgICAgICAgIFsgY2xhc3MgIm5ldy10b2Rv
IgorICAgICAgICAgICAgLCBwbGFjZWhvbGRlciAiV2hhdCBuZWVkcyB0byBiZSBkb25lPyIKKyAg
ICAgICAgICAgICwgYXV0b2ZvY3VzIFRydWUKKyAgICAgICAgICAgICwgdmFsdWUgdGFzaworICAg
ICAgICAgICAgLCBuYW1lICJuZXdUb2RvIgorICAgICAgICAgICAgLCBvbklucHV0IFVwZGF0ZUZp
ZWxkCisgICAgICAgICAgICAsIFRvZG8uVGFzay5vbkZpbmlzaCBBZGQgTm9PcAorICAgICAgICAg
ICAgXQorICAgICAgICAgICAgW10KKyAgICAgICAgXQorCisKK3Rhc2tMaXN0IDogU3RyaW5nIC0+
IExpc3QgVG9kby5UYXNrLk1vZGVsIC0+IEh0bWwgTXNnCit0YXNrTGlzdCB2aXNpYmlsaXR5IHRh
c2tzID0KKyAgICBsZXQKKyAgICAgICAgaXNWaXNpYmxlIHRvZG8gPQorICAgICAgICAgICAgY2Fz
ZSB2aXNpYmlsaXR5IG9mCisgICAgICAgICAgICAgICAgIkNvbXBsZXRlZCIgLT4KKyAgICAgICAg
ICAgICAgICAgICAgdG9kby5jb21wbGV0ZWQKKworICAgICAgICAgICAgICAgICJBY3RpdmUiIC0+
CisgICAgICAgICAgICAgICAgICAgIG5vdCB0b2RvLmNvbXBsZXRlZAorCisgICAgICAgICAgICAg
ICAgLS0gIkFsbCIKKyAgICAgICAgICAgICAgICBfIC0+CisgICAgICAgICAgICAgICAgICAgIFRy
dWUKKworICAgICAgICBhbGxDb21wbGV0ZWQgPQorICAgICAgICAgICAgTGlzdC5hbGwgLmNvbXBs
ZXRlZCB0YXNrcworCisgICAgICAgIGNzc1Zpc2liaWxpdHkgPQorICAgICAgICAgICAgaWYgTGlz
dC5pc0VtcHR5IHRhc2tzIHRoZW4KKyAgICAgICAgICAgICAgICAiaGlkZGVuIgorICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICJ2aXNpYmxlIgorICAgIGluCisgICAgICAgIHNlY3Rp
b24KKyAgICAgICAgICAgIFsgY2xhc3MgIm1haW4iCisgICAgICAgICAgICAsIHN0eWxlIFsgKCAi
dmlzaWJpbGl0eSIsIGNzc1Zpc2liaWxpdHkgKSBdCisgICAgICAgICAgICBdCisgICAgICAgICAg
ICBbIGlucHV0CisgICAgICAgICAgICAgICAgWyBjbGFzcyAidG9nZ2xlLWFsbCIKKyAgICAgICAg
ICAgICAgICAsIHR5cGUnICJjaGVja2JveCIKKyAgICAgICAgICAgICAgICAsIG5hbWUgInRvZ2ds
ZSIKKyAgICAgICAgICAgICAgICAsIGNoZWNrZWQgYWxsQ29tcGxldGVkCisgICAgICAgICAgICAg
ICAgLCBvbkNsaWNrIChDaGVja0FsbCAobm90IGFsbENvbXBsZXRlZCkpCisgICAgICAgICAgICAg
ICAgXQorICAgICAgICAgICAgICAgIFtdCisgICAgICAgICAgICAsIGxhYmVsCisgICAgICAgICAg
ICAgICAgWyBmb3IgInRvZ2dsZS1hbGwiIF0KKyAgICAgICAgICAgICAgICBbIHRleHQgIk1hcmsg
YWxsIGFzIGNvbXBsZXRlIiBdCisgICAgICAgICAgICAsIHVsCisgICAgICAgICAgICAgICAgWyBj
bGFzcyAidG9kby1saXN0IiBdCisgICAgICAgICAgICAgICAgKExpc3QubWFwCisgICAgICAgICAg
ICAgICAgICAgIChcdGFzayAtPgorICAgICAgICAgICAgICAgICAgICAgICAgbGV0CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWQgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0YXNrLmlkCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrVmlldyA9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvZG8uVGFzay52aWV3IHRhc2sKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSHRtbC5BcHAu
bWFwIChcbXNnIC0+IFVwZGF0ZVRhc2sgKCBpZCwgbXNnICkpIHRhc2tWaWV3CisgICAgICAgICAg
ICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgKExpc3QuZmlsdGVyIGlzVmlzaWJsZSB0
YXNrcykKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBdCisKKworY29udHJvbHMgOiBT
dHJpbmcgLT4gTGlzdCBUb2RvLlRhc2suTW9kZWwgLT4gSHRtbCBNc2cKK2NvbnRyb2xzIHZpc2li
aWxpdHkgdGFza3MgPQorICAgIGxldAorICAgICAgICB0YXNrc0NvbXBsZXRlZCA9CisgICAgICAg
ICAgICBMaXN0Lmxlbmd0aCAoTGlzdC5maWx0ZXIgLmNvbXBsZXRlZCB0YXNrcykKKworICAgICAg
ICB0YXNrc0xlZnQgPQorICAgICAgICAgICAgTGlzdC5sZW5ndGggdGFza3MgLSB0YXNrc0NvbXBs
ZXRlZAorCisgICAgICAgIGl0ZW1fID0KKyAgICAgICAgICAgIGlmIHRhc2tzTGVmdCA9PSAxIHRo
ZW4KKyAgICAgICAgICAgICAgICAiIGl0ZW0iCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgIiBpdGVtcyIKKyAgICBpbgorICAgICAgICBmb290ZXIKKyAgICAgICAgICAgIFsgY2xh
c3MgImZvb3RlciIKKyAgICAgICAgICAgICwgaGlkZGVuIChMaXN0LmlzRW1wdHkgdGFza3MpCisg
ICAgICAgICAgICBdCisgICAgICAgICAgICBbIHNwYW4KKyAgICAgICAgICAgICAgICBbIGNsYXNz
ICJ0b2RvLWNvdW50IiBdCisgICAgICAgICAgICAgICAgWyBzdHJvbmcgW10gWyB0ZXh0ICh0b1N0
cmluZyB0YXNrc0xlZnQpIF0KKyAgICAgICAgICAgICAgICAsIHRleHQgKGl0ZW1fICsrICIgbGVm
dCIpCisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgLCB1bAorICAgICAgICAgICAgICAg
IFsgY2xhc3MgImZpbHRlcnMiIF0KKyAgICAgICAgICAgICAgICBbIHZpc2liaWxpdHlTd2FwICIj
LyIgIkFsbCIgdmlzaWJpbGl0eQorICAgICAgICAgICAgICAgICwgdGV4dCAiICIKKyAgICAgICAg
ICAgICAgICAsIHZpc2liaWxpdHlTd2FwICIjL2FjdGl2ZSIgIkFjdGl2ZSIgdmlzaWJpbGl0eQor
ICAgICAgICAgICAgICAgICwgdGV4dCAiICIKKyAgICAgICAgICAgICAgICAsIHZpc2liaWxpdHlT
d2FwICIjL2NvbXBsZXRlZCIgIkNvbXBsZXRlZCIgdmlzaWJpbGl0eQorICAgICAgICAgICAgICAg
IF0KKyAgICAgICAgICAgICwgYnV0dG9uCisgICAgICAgICAgICAgICAgWyBjbGFzcyAiY2xlYXIt
Y29tcGxldGVkIgorICAgICAgICAgICAgICAgICwgaGlkZGVuICh0YXNrc0NvbXBsZXRlZCA9PSAw
KQorICAgICAgICAgICAgICAgICwgb25DbGljayBEZWxldGVDb21wbGV0ZQorICAgICAgICAgICAg
ICAgIF0KKyAgICAgICAgICAgICAgICBbIHRleHQgKCJDbGVhciBjb21wbGV0ZWQgKCIgKysgdG9T
dHJpbmcgdGFza3NDb21wbGV0ZWQgKysgIikiKSBdCisgICAgICAgICAgICBdCisKKwordmlzaWJp
bGl0eVN3YXAgOiBTdHJpbmcgLT4gU3RyaW5nIC0+IFN0cmluZyAtPiBIdG1sIE1zZwordmlzaWJp
bGl0eVN3YXAgdXJpIHZpc2liaWxpdHkgYWN0dWFsVmlzaWJpbGl0eSA9CisgICAgbGV0CisgICAg
ICAgIGNsYXNzTmFtZSA9CisgICAgICAgICAgICBpZiB2aXNpYmlsaXR5ID09IGFjdHVhbFZpc2li
aWxpdHkgdGhlbgorICAgICAgICAgICAgICAgICJzZWxlY3RlZCIKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAiIgorICAgIGluCisgICAgICAgIGxpCisgICAgICAgICAgICBbIG9u
Q2xpY2sgKENoYW5nZVZpc2liaWxpdHkgdmlzaWJpbGl0eSkgXQorICAgICAgICAgICAgWyBhIFsg
Y2xhc3MgY2xhc3NOYW1lLCBocmVmIHVyaSBdIFsgdGV4dCB2aXNpYmlsaXR5IF0gXQorCisKK2lu
Zm9Gb290ZXIgOiBIdG1sIG1zZworaW5mb0Zvb3RlciA9CisgICAgZm9vdGVyCisgICAgICAgIFsg
Y2xhc3MgImluZm8iIF0KKyAgICAgICAgWyBwIFtdIFsgdGV4dCAiRG91YmxlLWNsaWNrIHRvIGVk
aXQgYSB0b2RvIiBdCisgICAgICAgICwgcCBbXQorICAgICAgICAgICAgWyB0ZXh0ICJXcml0dGVu
IGJ5ICIKKyAgICAgICAgICAgICwgYSBbIGhyZWYgImh0dHBzOi8vZ2l0aHViLmNvbS9ldmFuY3oi
IF0gWyB0ZXh0ICJFdmFuIEN6YXBsaWNraSIgXQorICAgICAgICAgICAgXQorICAgICAgICAsIHAg
W10KKyAgICAgICAgICAgIFsgdGV4dCAiUGFydCBvZiAiCisgICAgICAgICAgICAsIGEgWyBocmVm
ICJodHRwOi8vdG9kb212Yy5jb20iIF0gWyB0ZXh0ICJUb2RvTVZDIiBdCisgICAgICAgICAgICBd
CisgICAgICAgIF0KKworCisKKy0tIHdpcmUgdGhlIGVudGlyZSBhcHBsaWNhdGlvbiB0b2dldGhl
cgorCisKK21haW4gOiBQcm9ncmFtIEZsYWdzCittYWluID0KKyAgICBOYXZpZ2F0aW9uLnByb2dy
YW1XaXRoRmxhZ3MgdXJsUGFyc2VyCisgICAgICAgIHsgdXJsVXBkYXRlID0gdXJsVXBkYXRlCisg
ICAgICAgICwgdmlldyA9IHZpZXcKKyAgICAgICAgLCBpbml0ID0gaW5pdAorICAgICAgICAsIHVw
ZGF0ZSA9IHVwZGF0ZQorICAgICAgICAsIHN1YnNjcmlwdGlvbnMgPSBzdWJzY3JpcHRpb25zCisg
ICAgICAgIH0KKworCisKKy0tIFVSTCBQQVJTRVJTIC0gY2hlY2sgb3V0IGV2YW5jei91cmwtcGFy
c2VyIGZvciBmYW5jaWVyIFVSTCBwYXJzaW5nCisKKwordG9VcmwgOiBTdHJpbmcgLT4gU3RyaW5n
Cit0b1VybCB2aXNpYmlsaXR5ID0KKyAgICAiIy8iICsrIFN0cmluZy50b0xvd2VyIHZpc2liaWxp
dHkKKworCitmcm9tVXJsIDogU3RyaW5nIC0+IE1heWJlIFN0cmluZworZnJvbVVybCBoYXNoID0K
KyAgICBsZXQKKyAgICAgICAgY2xlYW5IYXNoID0KKyAgICAgICAgICAgIFN0cmluZy5kcm9wTGVm
dCAyIGhhc2gKKyAgICBpbgorICAgICAgICBpZiAoTGlzdC5tZW1iZXIgY2xlYW5IYXNoIFsgImFs
bCIsICJhY3RpdmUiLCAiY29tcGxldGVkIiBdKSA9PSBUcnVlIHRoZW4KKyAgICAgICAgICAgIEp1
c3QgY2xlYW5IYXNoCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIE5vdGhpbmcKKworCit1cmxQ
YXJzZXIgOiBQYXJzZXIgKE1heWJlIFN0cmluZykKK3VybFBhcnNlciA9CisgICAgTmF2aWdhdGlv
bi5tYWtlUGFyc2VyIChmcm9tVXJsIDw8IC5oYXNoKQorCisKK3stfCBUaGUgVVJMIGlzIHR1cm5l
ZCBpbnRvIGEgTWF5YmUgdmFsdWUuIElmIHRoZSBVUkwgaXMgdmFsaWQsIHdlIGp1c3QgdXBkYXRl
CitvdXIgbW9kZWwgd2l0aCB0aGUgbmV3IHZpc2liaWxpdHkgc2V0dGluZ3MuIElmIGl0IGlzIG5v
dCBhIHZhbGlkIFVSTCwKK3dlIHNldCB0aGUgdmlzaWJpbGl0eSBmaWx0ZXIgdG8gc2hvdyBhbGwg
dGFza3MuCistfQordXJsVXBkYXRlIDogTWF5YmUgU3RyaW5nIC0+IE1vZGVsIC0+ICggTW9kZWws
IENtZCBNc2cgKQordXJsVXBkYXRlIHJlc3VsdCBtb2RlbCA9CisgICAgY2FzZSByZXN1bHQgb2YK
KyAgICAgICAgSnVzdCB2aXNpYmlsaXR5IC0+CisgICAgICAgICAgICB1cGRhdGUgKENoYW5nZVZp
c2liaWxpdHkgKFN0cmluZy5FeHRyYS50b1NlbnRlbmNlQ2FzZSB2aXNpYmlsaXR5KSkgbW9kZWwK
KworICAgICAgICBOb3RoaW5nIC0+CisgICAgICAgICAgICB1cGRhdGUgKENoYW5nZVZpc2liaWxp
dHkgIkFsbCIpIG1vZGVsCisKKworaW5pdCA6IEZsYWdzIC0+IE1heWJlIFN0cmluZyAtPiAoIE1v
ZGVsLCBDbWQgTXNnICkKK2luaXQgZmxhZ3MgdXJsID0KKyAgICB1cmxVcGRhdGUgdXJsIChNYXli
ZS53aXRoRGVmYXVsdCBlbXB0eU1vZGVsIGZsYWdzKQorCisKKworLS0gaW50ZXJhY3Rpb25zIHdp
dGggbG9jYWxTdG9yYWdlCisKKworcG9ydCBzYXZlIDogTW9kZWwgLT4gQ21kIG1zZworCisKK3N1
YnNjcmlwdGlvbnMgOiBNb2RlbCAtPiBTdWIgTXNnCitzdWJzY3JpcHRpb25zIG1vZGVsID0KKyAg
ICBTdWIubm9uZQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9t
ZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9mdW5jdGlvbmFsLXByb2ctZXhhbXBsZXMvZWxtL1Rv
ZG8vVGFzay5lbG0gYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jl
c291cmNlcy90b2RvbXZjL2Z1bmN0aW9uYWwtcHJvZy1leGFtcGxlcy9lbG0vVG9kby9UYXNrLmVs
bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5iMzVmNjE2M2RjY2QxZmMwZTBlODlhOGYzOWI5MGZlOGUxZWI0ODRhCi0t
LSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIu
MS9yZXNvdXJjZXMvdG9kb212Yy9mdW5jdGlvbmFsLXByb2ctZXhhbXBsZXMvZWxtL1RvZG8vVGFz
ay5lbG0KQEAgLTAsMCArMSwxNTIgQEAKK21vZHVsZSBUb2RvLlRhc2sgZXhwb3NpbmcgKC4uKQor
CitpbXBvcnQgSHRtbCBleHBvc2luZyAoLi4pCitpbXBvcnQgSHRtbC5BdHRyaWJ1dGVzIGV4cG9z
aW5nICguLikKK2ltcG9ydCBIdG1sLkV2ZW50cyBleHBvc2luZyAoLi4pCitpbXBvcnQgSnNvbi5E
ZWNvZGUKK2ltcG9ydCBTdHJpbmcKKworCistLSBNT0RFTAorCisKK3R5cGUgYWxpYXMgTW9kZWwg
PQorICAgIHsgZGVzY3JpcHRpb24gOiBTdHJpbmcKKyAgICAsIGNvbXBsZXRlZCA6IEJvb2wKKyAg
ICAsIGVkaXRzIDogTWF5YmUgU3RyaW5nCisgICAgLCBpZCA6IEludAorICAgIH0KKworCitpbml0
IDogU3RyaW5nIC0+IEludCAtPiBNb2RlbAoraW5pdCBkZXNjIGlkID0KKyAgICB7IGRlc2NyaXB0
aW9uID0gZGVzYworICAgICwgY29tcGxldGVkID0gRmFsc2UKKyAgICAsIGVkaXRzID0gTm90aGlu
ZworICAgICwgaWQgPSBpZAorICAgIH0KKworCisKKy0tIFVQREFURQorCisKK3R5cGUgTXNnCisg
ICAgPSBGb2N1cyBTdHJpbmcKKyAgICB8IEVkaXQgU3RyaW5nCisgICAgfCBDYW5jZWwKKyAgICB8
IENvbW1pdAorICAgIHwgQ29tcGxldGVkIEJvb2wKKyAgICB8IERlbGV0ZQorCisKK3VwZGF0ZSA6
IE1zZyAtPiBNb2RlbCAtPiBNYXliZSBNb2RlbAordXBkYXRlIG1zZyBtb2RlbCA9CisgICAgY2Fz
ZSBtc2cgb2YKKyAgICAgICAgRm9jdXMgZWxlbWVudElkIC0+CisgICAgICAgICAgICBKdXN0IHsg
bW9kZWwgfCBlZGl0cyA9IEp1c3QgbW9kZWwuZGVzY3JpcHRpb24gfQorCisgICAgICAgIEVkaXQg
ZGVzY3JpcHRpb24gLT4KKyAgICAgICAgICAgIEp1c3QgeyBtb2RlbCB8IGVkaXRzID0gSnVzdCBk
ZXNjcmlwdGlvbiB9CisKKyAgICAgICAgQ2FuY2VsIC0+CisgICAgICAgICAgICBKdXN0IHsgbW9k
ZWwgfCBlZGl0cyA9IE5vdGhpbmcgfQorCisgICAgICAgIENvbW1pdCAtPgorICAgICAgICAgICAg
Y2FzZSBtb2RlbC5lZGl0cyBvZgorICAgICAgICAgICAgICAgIE5vdGhpbmcgLT4KKyAgICAgICAg
ICAgICAgICAgICAgSnVzdCBtb2RlbAorCisgICAgICAgICAgICAgICAgSnVzdCByYXdEZXNjcmlw
dGlvbiAtPgorICAgICAgICAgICAgICAgICAgICBsZXQKKyAgICAgICAgICAgICAgICAgICAgICAg
IGRlc2NyaXB0aW9uID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcudHJpbSBy
YXdEZXNjcmlwdGlvbgorICAgICAgICAgICAgICAgICAgICBpbgorICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgU3RyaW5nLmlzRW1wdHkgZGVzY3JpcHRpb24gdGhlbgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE5vdGhpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBKdXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHsgbW9kZWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWRpdHMg
PSBOb3RoaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGRlc2NyaXB0
aW9uID0gZGVzY3JpcHRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgIENvbXBsZXRlZCBib29sIC0+CisgICAgICAgICAgICBKdXN0IHsgbW9kZWwgfCBjb21w
bGV0ZWQgPSBib29sIH0KKworICAgICAgICBEZWxldGUgLT4KKyAgICAgICAgICAgIE5vdGhpbmcK
KworCisKKy0tIFZJRVcKKworCit2aWV3IDogTW9kZWwgLT4gSHRtbCBNc2cKK3ZpZXcgbW9kZWwg
PQorICAgIGxldAorICAgICAgICBjbGFzc05hbWUgPQorICAgICAgICAgICAgKGlmIG1vZGVsLmNv
bXBsZXRlZCB0aGVuCisgICAgICAgICAgICAgICAgImNvbXBsZXRlZCAiCisgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICIiCisgICAgICAgICAgICApCisgICAgICAgICAgICAgICAg
KysgY2FzZSBtb2RlbC5lZGl0cyBvZgorICAgICAgICAgICAgICAgICAgICBKdXN0IF8gLT4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICJlZGl0aW5nIgorCisgICAgICAgICAgICAgICAgICAgIE5v
dGhpbmcgLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICIiCisKKyAgICAgICAgZGVzY3JpcHRp
b24gPQorICAgICAgICAgICAgTWF5YmUud2l0aERlZmF1bHQgbW9kZWwuZGVzY3JpcHRpb24gbW9k
ZWwuZWRpdHMKKworICAgICAgICBlbGVtZW50SWQgPQorICAgICAgICAgICAgInRvZG8tIiArKyB0
b1N0cmluZyBtb2RlbC5pZAorICAgIGluCisgICAgICAgIGxpCisgICAgICAgICAgICBbIGNsYXNz
IGNsYXNzTmFtZSBdCisgICAgICAgICAgICBbIGRpdgorICAgICAgICAgICAgICAgIFsgY2xhc3Mg
InZpZXciIF0KKyAgICAgICAgICAgICAgICBbIGlucHV0CisgICAgICAgICAgICAgICAgICAgIFsg
Y2xhc3MgInRvZ2dsZSIKKyAgICAgICAgICAgICAgICAgICAgLCB0eXBlJyAiY2hlY2tib3giCisg
ICAgICAgICAgICAgICAgICAgICwgY2hlY2tlZCBtb2RlbC5jb21wbGV0ZWQKKyAgICAgICAgICAg
ICAgICAgICAgLCBvbkNsaWNrIChDb21wbGV0ZWQgKG5vdCBtb2RlbC5jb21wbGV0ZWQpKQorICAg
ICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgIFtdCisgICAgICAgICAgICAg
ICAgLCBsYWJlbAorICAgICAgICAgICAgICAgICAgICBbIG9uRG91YmxlQ2xpY2sgKEZvY3VzIGVs
ZW1lbnRJZCkgXQorICAgICAgICAgICAgICAgICAgICBbIHRleHQgZGVzY3JpcHRpb24gXQorICAg
ICAgICAgICAgICAgICwgYnV0dG9uCisgICAgICAgICAgICAgICAgICAgIFsgY2xhc3MgImRlc3Ry
b3kiCisgICAgICAgICAgICAgICAgICAgICwgb25DbGljayBEZWxldGUKKyAgICAgICAgICAgICAg
ICAgICAgXQorICAgICAgICAgICAgICAgICAgICBbXQorICAgICAgICAgICAgICAgIF0KKyAgICAg
ICAgICAgICwgaW5wdXQKKyAgICAgICAgICAgICAgICBbIGNsYXNzICJlZGl0IgorICAgICAgICAg
ICAgICAgICwgdmFsdWUgZGVzY3JpcHRpb24KKyAgICAgICAgICAgICAgICAsIG5hbWUgInRpdGxl
IgorICAgICAgICAgICAgICAgICwgaWQgKGVsZW1lbnRJZCkKKyAgICAgICAgICAgICAgICAsIG9u
SW5wdXQgRWRpdAorICAgICAgICAgICAgICAgICwgb25CbHVyIENvbW1pdAorICAgICAgICAgICAg
ICAgICwgb25GaW5pc2ggQ29tbWl0IENhbmNlbAorICAgICAgICAgICAgICAgIF0KKyAgICAgICAg
ICAgICAgICBbXQorICAgICAgICAgICAgXQorCisKK29uRmluaXNoIDogbXNnIC0+IG1zZyAtPiBB
dHRyaWJ1dGUgbXNnCitvbkZpbmlzaCBlbnRlck1lc3NhZ2UgZXNjYXBlTWVzc2FnZSA9CisgICAg
bGV0CisgICAgICAgIHNlbGVjdCBrZXkgPQorICAgICAgICAgICAgY2FzZSBrZXkgb2YKKyAgICAg
ICAgICAgICAgICAxMyAtPgorICAgICAgICAgICAgICAgICAgICBlbnRlck1lc3NhZ2UKKworICAg
ICAgICAgICAgICAgIF8gLT4KKyAgICAgICAgICAgICAgICAgICAgLS0gTm90IGEgJ2ZpbmlzaCcg
a2V5LCBzdWNoIGFzIEVOVEVSIG9yIEVTQ0FQRQorICAgICAgICAgICAgICAgICAgICBlc2NhcGVN
ZXNzYWdlCisgICAgaW4KKyAgICAgICAgb24gImtleWRvd24iIChKc29uLkRlY29kZS5tYXAgc2Vs
ZWN0IGtleUNvZGUpCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVk
b21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2Z1bmN0aW9uYWwtcHJvZy1leGFtcGxlcy9lbG0v
ZGlzdC9lbG0uanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jl
c291cmNlcy90b2RvbXZjL2Z1bmN0aW9uYWwtcHJvZy1leGFtcGxlcy9lbG0vZGlzdC9lbG0uanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYTU1ZWE5ZGJhYzBiMzZhOTdmZjgxZmU3OTc3ZTI4N2JkMTkwY2Y5MAotLS0g
L2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEv
cmVzb3VyY2VzL3RvZG9tdmMvZnVuY3Rpb25hbC1wcm9nLWV4YW1wbGVzL2VsbS9kaXN0L2VsbS5q
cwpAQCAtMCwwICsxLDEwMzcxIEBACisKKyhmdW5jdGlvbigpIHsKKyd1c2Ugc3RyaWN0JzsKKwor
ZnVuY3Rpb24gRjIoZnVuKQoreworICBmdW5jdGlvbiB3cmFwcGVyKGEpIHsgcmV0dXJuIGZ1bmN0
aW9uKGIpIHsgcmV0dXJuIGZ1bihhLGIpOyB9OyB9CisgIHdyYXBwZXIuYXJpdHkgPSAyOworICB3
cmFwcGVyLmZ1bmMgPSBmdW47CisgIHJldHVybiB3cmFwcGVyOworfQorCitmdW5jdGlvbiBGMyhm
dW4pCit7CisgIGZ1bmN0aW9uIHdyYXBwZXIoYSkgeworICAgIHJldHVybiBmdW5jdGlvbihiKSB7
IHJldHVybiBmdW5jdGlvbihjKSB7IHJldHVybiBmdW4oYSwgYiwgYyk7IH07IH07CisgIH0KKyAg
d3JhcHBlci5hcml0eSA9IDM7CisgIHdyYXBwZXIuZnVuYyA9IGZ1bjsKKyAgcmV0dXJuIHdyYXBw
ZXI7Cit9CisKK2Z1bmN0aW9uIEY0KGZ1bikKK3sKKyAgZnVuY3Rpb24gd3JhcHBlcihhKSB7IHJl
dHVybiBmdW5jdGlvbihiKSB7IHJldHVybiBmdW5jdGlvbihjKSB7CisgICAgcmV0dXJuIGZ1bmN0
aW9uKGQpIHsgcmV0dXJuIGZ1bihhLCBiLCBjLCBkKTsgfTsgfTsgfTsKKyAgfQorICB3cmFwcGVy
LmFyaXR5ID0gNDsKKyAgd3JhcHBlci5mdW5jID0gZnVuOworICByZXR1cm4gd3JhcHBlcjsKK30K
KworZnVuY3Rpb24gRjUoZnVuKQoreworICBmdW5jdGlvbiB3cmFwcGVyKGEpIHsgcmV0dXJuIGZ1
bmN0aW9uKGIpIHsgcmV0dXJuIGZ1bmN0aW9uKGMpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24oZCkg
eyByZXR1cm4gZnVuY3Rpb24oZSkgeyByZXR1cm4gZnVuKGEsIGIsIGMsIGQsIGUpOyB9OyB9OyB9
OyB9OworICB9CisgIHdyYXBwZXIuYXJpdHkgPSA1OworICB3cmFwcGVyLmZ1bmMgPSBmdW47Cisg
IHJldHVybiB3cmFwcGVyOworfQorCitmdW5jdGlvbiBGNihmdW4pCit7CisgIGZ1bmN0aW9uIHdy
YXBwZXIoYSkgeyByZXR1cm4gZnVuY3Rpb24oYikgeyByZXR1cm4gZnVuY3Rpb24oYykgeworICAg
IHJldHVybiBmdW5jdGlvbihkKSB7IHJldHVybiBmdW5jdGlvbihlKSB7IHJldHVybiBmdW5jdGlv
bihmKSB7CisgICAgcmV0dXJuIGZ1bihhLCBiLCBjLCBkLCBlLCBmKTsgfTsgfTsgfTsgfTsgfTsK
KyAgfQorICB3cmFwcGVyLmFyaXR5ID0gNjsKKyAgd3JhcHBlci5mdW5jID0gZnVuOworICByZXR1
cm4gd3JhcHBlcjsKK30KKworZnVuY3Rpb24gRjcoZnVuKQoreworICBmdW5jdGlvbiB3cmFwcGVy
KGEpIHsgcmV0dXJuIGZ1bmN0aW9uKGIpIHsgcmV0dXJuIGZ1bmN0aW9uKGMpIHsKKyAgICByZXR1
cm4gZnVuY3Rpb24oZCkgeyByZXR1cm4gZnVuY3Rpb24oZSkgeyByZXR1cm4gZnVuY3Rpb24oZikg
eworICAgIHJldHVybiBmdW5jdGlvbihnKSB7IHJldHVybiBmdW4oYSwgYiwgYywgZCwgZSwgZiwg
Zyk7IH07IH07IH07IH07IH07IH07CisgIH0KKyAgd3JhcHBlci5hcml0eSA9IDc7CisgIHdyYXBw
ZXIuZnVuYyA9IGZ1bjsKKyAgcmV0dXJuIHdyYXBwZXI7Cit9CisKK2Z1bmN0aW9uIEY4KGZ1bikK
K3sKKyAgZnVuY3Rpb24gd3JhcHBlcihhKSB7IHJldHVybiBmdW5jdGlvbihiKSB7IHJldHVybiBm
dW5jdGlvbihjKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGZ1bmN0aW9uKGUp
IHsgcmV0dXJuIGZ1bmN0aW9uKGYpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24oZykgeyByZXR1cm4g
ZnVuY3Rpb24oaCkgeworICAgIHJldHVybiBmdW4oYSwgYiwgYywgZCwgZSwgZiwgZywgaCk7IH07
IH07IH07IH07IH07IH07IH07CisgIH0KKyAgd3JhcHBlci5hcml0eSA9IDg7CisgIHdyYXBwZXIu
ZnVuYyA9IGZ1bjsKKyAgcmV0dXJuIHdyYXBwZXI7Cit9CisKK2Z1bmN0aW9uIEY5KGZ1bikKK3sK
KyAgZnVuY3Rpb24gd3JhcHBlcihhKSB7IHJldHVybiBmdW5jdGlvbihiKSB7IHJldHVybiBmdW5j
dGlvbihjKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGZ1bmN0aW9uKGUpIHsg
cmV0dXJuIGZ1bmN0aW9uKGYpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24oZykgeyByZXR1cm4gZnVu
Y3Rpb24oaCkgeyByZXR1cm4gZnVuY3Rpb24oaSkgeworICAgIHJldHVybiBmdW4oYSwgYiwgYywg
ZCwgZSwgZiwgZywgaCwgaSk7IH07IH07IH07IH07IH07IH07IH07IH07CisgIH0KKyAgd3JhcHBl
ci5hcml0eSA9IDk7CisgIHdyYXBwZXIuZnVuYyA9IGZ1bjsKKyAgcmV0dXJuIHdyYXBwZXI7Cit9
CisKK2Z1bmN0aW9uIEEyKGZ1biwgYSwgYikKK3sKKyAgcmV0dXJuIGZ1bi5hcml0eSA9PT0gMgor
ICAgID8gZnVuLmZ1bmMoYSwgYikKKyAgICA6IGZ1bihhKShiKTsKK30KK2Z1bmN0aW9uIEEzKGZ1
biwgYSwgYiwgYykKK3sKKyAgcmV0dXJuIGZ1bi5hcml0eSA9PT0gMworICAgID8gZnVuLmZ1bmMo
YSwgYiwgYykKKyAgICA6IGZ1bihhKShiKShjKTsKK30KK2Z1bmN0aW9uIEE0KGZ1biwgYSwgYiwg
YywgZCkKK3sKKyAgcmV0dXJuIGZ1bi5hcml0eSA9PT0gNAorICAgID8gZnVuLmZ1bmMoYSwgYiwg
YywgZCkKKyAgICA6IGZ1bihhKShiKShjKShkKTsKK30KK2Z1bmN0aW9uIEE1KGZ1biwgYSwgYiwg
YywgZCwgZSkKK3sKKyAgcmV0dXJuIGZ1bi5hcml0eSA9PT0gNQorICAgID8gZnVuLmZ1bmMoYSwg
YiwgYywgZCwgZSkKKyAgICA6IGZ1bihhKShiKShjKShkKShlKTsKK30KK2Z1bmN0aW9uIEE2KGZ1
biwgYSwgYiwgYywgZCwgZSwgZikKK3sKKyAgcmV0dXJuIGZ1bi5hcml0eSA9PT0gNgorICAgID8g
ZnVuLmZ1bmMoYSwgYiwgYywgZCwgZSwgZikKKyAgICA6IGZ1bihhKShiKShjKShkKShlKShmKTsK
K30KK2Z1bmN0aW9uIEE3KGZ1biwgYSwgYiwgYywgZCwgZSwgZiwgZykKK3sKKyAgcmV0dXJuIGZ1
bi5hcml0eSA9PT0gNworICAgID8gZnVuLmZ1bmMoYSwgYiwgYywgZCwgZSwgZiwgZykKKyAgICA6
IGZ1bihhKShiKShjKShkKShlKShmKShnKTsKK30KK2Z1bmN0aW9uIEE4KGZ1biwgYSwgYiwgYywg
ZCwgZSwgZiwgZywgaCkKK3sKKyAgcmV0dXJuIGZ1bi5hcml0eSA9PT0gOAorICAgID8gZnVuLmZ1
bmMoYSwgYiwgYywgZCwgZSwgZiwgZywgaCkKKyAgICA6IGZ1bihhKShiKShjKShkKShlKShmKShn
KShoKTsKK30KK2Z1bmN0aW9uIEE5KGZ1biwgYSwgYiwgYywgZCwgZSwgZiwgZywgaCwgaSkKK3sK
KyAgcmV0dXJuIGZ1bi5hcml0eSA9PT0gOQorICAgID8gZnVuLmZ1bmMoYSwgYiwgYywgZCwgZSwg
ZiwgZywgaCwgaSkKKyAgICA6IGZ1bihhKShiKShjKShkKShlKShmKShnKShoKShpKTsKK30KKwor
Ly9pbXBvcnQgTmF0aXZlLlV0aWxzIC8vCisKK3ZhciBfZWxtX2xhbmckY29yZSROYXRpdmVfQmFz
aWNzID0gZnVuY3Rpb24oKSB7CisKK2Z1bmN0aW9uIGRpdihhLCBiKQoreworICAgIHJldHVybiAo
YSAvIGIpIHwgMDsKK30KK2Z1bmN0aW9uIHJlbShhLCBiKQoreworICAgIHJldHVybiBhICUgYjsK
K30KK2Z1bmN0aW9uIG1vZChhLCBiKQoreworICAgIGlmIChiID09PSAwKQorICAgIHsKKyAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcGVyZm9ybSBtb2QgMC4gRGl2aXNpb24gYnkgemVy
byBlcnJvci4nKTsKKyAgICB9CisgICAgdmFyIHIgPSBhICUgYjsKKyAgICB2YXIgbSA9IGEgPT09
IDAgPyAwIDogKGIgPiAwID8gKGEgPj0gMCA/IHIgOiByICsgYikgOiAtbW9kKC1hLCAtYikpOwor
CisgICAgcmV0dXJuIG0gPT09IGIgPyAwIDogbTsKK30KK2Z1bmN0aW9uIGxvZ0Jhc2UoYmFzZSwg
bikKK3sKKyAgICByZXR1cm4gTWF0aC5sb2cobikgLyBNYXRoLmxvZyhiYXNlKTsKK30KK2Z1bmN0
aW9uIG5lZ2F0ZShuKQoreworICAgIHJldHVybiAtbjsKK30KK2Z1bmN0aW9uIGFicyhuKQorewor
ICAgIHJldHVybiBuIDwgMCA/IC1uIDogbjsKK30KKworZnVuY3Rpb24gbWluKGEsIGIpCit7Cisg
ICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5jbXAoYSwgYikgPCAwID8gYSA6
IGI7Cit9CitmdW5jdGlvbiBtYXgoYSwgYikKK3sKKyAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUk
TmF0aXZlX1V0aWxzLmNtcChhLCBiKSA+IDAgPyBhIDogYjsKK30KK2Z1bmN0aW9uIGNsYW1wKGxv
LCBoaSwgbikKK3sKKyAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNtcChu
LCBsbykgPCAwCisgICAgICAgID8gbG8KKyAgICAgICAgOiBfZWxtX2xhbmckY29yZSROYXRpdmVf
VXRpbHMuY21wKG4sIGhpKSA+IDAKKyAgICAgICAgICAgID8gaGkKKyAgICAgICAgICAgIDogbjsK
K30KKwordmFyIG9yZCA9IFsnTFQnLCAnRVEnLCAnR1QnXTsKKworZnVuY3Rpb24gY29tcGFyZSh4
LCB5KQoreworICAgIHJldHVybiB7IGN0b3I6IG9yZFtfZWxtX2xhbmckY29yZSROYXRpdmVfVXRp
bHMuY21wKHgsIHkpICsgMV0gfTsKK30KKworZnVuY3Rpb24geG9yKGEsIGIpCit7CisgICAgcmV0
dXJuIGEgIT09IGI7Cit9CitmdW5jdGlvbiBub3QoYikKK3sKKyAgICByZXR1cm4gIWI7Cit9Citm
dW5jdGlvbiBpc0luZmluaXRlKG4pCit7CisgICAgcmV0dXJuIG4gPT09IEluZmluaXR5IHx8IG4g
PT09IC1JbmZpbml0eTsKK30KKworZnVuY3Rpb24gdHJ1bmNhdGUobikKK3sKKyAgICByZXR1cm4g
biB8IDA7Cit9CisKK2Z1bmN0aW9uIGRlZ3JlZXMoZCkKK3sKKyAgICByZXR1cm4gZCAqIE1hdGgu
UEkgLyAxODA7Cit9CitmdW5jdGlvbiB0dXJucyh0KQoreworICAgIHJldHVybiAyICogTWF0aC5Q
SSAqIHQ7Cit9CitmdW5jdGlvbiBmcm9tUG9sYXIocG9pbnQpCit7CisgICAgdmFyIHIgPSBwb2lu
dC5fMDsKKyAgICB2YXIgdCA9IHBvaW50Ll8xOworICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRO
YXRpdmVfVXRpbHMuVHVwbGUyKHIgKiBNYXRoLmNvcyh0KSwgciAqIE1hdGguc2luKHQpKTsKK30K
K2Z1bmN0aW9uIHRvUG9sYXIocG9pbnQpCit7CisgICAgdmFyIHggPSBwb2ludC5fMDsKKyAgICB2
YXIgeSA9IHBvaW50Ll8xOworICAgIHJldHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMu
VHVwbGUyKE1hdGguc3FydCh4ICogeCArIHkgKiB5KSwgTWF0aC5hdGFuMih5LCB4KSk7Cit9CisK
K3JldHVybiB7CisgICAgZGl2OiBGMihkaXYpLAorICAgIHJlbTogRjIocmVtKSwKKyAgICBtb2Q6
IEYyKG1vZCksCisKKyAgICBwaTogTWF0aC5QSSwKKyAgICBlOiBNYXRoLkUsCisgICAgY29zOiBN
YXRoLmNvcywKKyAgICBzaW46IE1hdGguc2luLAorICAgIHRhbjogTWF0aC50YW4sCisgICAgYWNv
czogTWF0aC5hY29zLAorICAgIGFzaW46IE1hdGguYXNpbiwKKyAgICBhdGFuOiBNYXRoLmF0YW4s
CisgICAgYXRhbjI6IEYyKE1hdGguYXRhbjIpLAorCisgICAgZGVncmVlczogZGVncmVlcywKKyAg
ICB0dXJuczogdHVybnMsCisgICAgZnJvbVBvbGFyOiBmcm9tUG9sYXIsCisgICAgdG9Qb2xhcjog
dG9Qb2xhciwKKworICAgIHNxcnQ6IE1hdGguc3FydCwKKyAgICBsb2dCYXNlOiBGMihsb2dCYXNl
KSwKKyAgICBuZWdhdGU6IG5lZ2F0ZSwKKyAgICBhYnM6IGFicywKKyAgICBtaW46IEYyKG1pbiks
CisgICAgbWF4OiBGMihtYXgpLAorICAgIGNsYW1wOiBGMyhjbGFtcCksCisgICAgY29tcGFyZTog
RjIoY29tcGFyZSksCisKKyAgICB4b3I6IEYyKHhvciksCisgICAgbm90OiBub3QsCisKKyAgICB0
cnVuY2F0ZTogdHJ1bmNhdGUsCisgICAgY2VpbGluZzogTWF0aC5jZWlsLAorICAgIGZsb29yOiBN
YXRoLmZsb29yLAorICAgIHJvdW5kOiBNYXRoLnJvdW5kLAorICAgIHRvRmxvYXQ6IGZ1bmN0aW9u
KHgpIHsgcmV0dXJuIHg7IH0sCisgICAgaXNOYU46IGlzTmFOLAorICAgIGlzSW5maW5pdGU6IGlz
SW5maW5pdGUKK307CisKK30oKTsKKy8vaW1wb3J0IC8vCisKK3ZhciBfZWxtX2xhbmckY29yZSRO
YXRpdmVfVXRpbHMgPSBmdW5jdGlvbigpIHsKKworLy8gQ09NUEFSSVNPTlMKKworZnVuY3Rpb24g
ZXEoeCwgeSkKK3sKKyAgICB2YXIgc3RhY2sgPSBbXTsKKyAgICB2YXIgaXNFcXVhbCA9IGVxSGVs
cCh4LCB5LCAwLCBzdGFjayk7CisgICAgdmFyIHBhaXI7CisgICAgd2hpbGUgKGlzRXF1YWwgJiYg
KHBhaXIgPSBzdGFjay5wb3AoKSkpCisgICAgeworICAgICAgICBpc0VxdWFsID0gZXFIZWxwKHBh
aXIueCwgcGFpci55LCAwLCBzdGFjayk7CisgICAgfQorICAgIHJldHVybiBpc0VxdWFsOworfQor
CisKK2Z1bmN0aW9uIGVxSGVscCh4LCB5LCBkZXB0aCwgc3RhY2spCit7CisgICAgaWYgKGRlcHRo
ID4gMTAwKQorICAgIHsKKyAgICAgICAgc3RhY2sucHVzaCh7IHg6IHgsIHk6IHkgfSk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICh4ID09PSB5KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKHR5cGVvZiB4ICE9PSAnb2JqZWN0JykK
KyAgICB7CisgICAgICAgIGlmICh0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJykKKyAgICAgICAgewor
ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKAorICAgICAgICAgICAgICAgICdUcnlpbmcgdG8g
dXNlIGAoPT0pYCBvbiBmdW5jdGlvbnMuIFRoZXJlIGlzIG5vIHdheSB0byBrbm93IGlmIGZ1bmN0
aW9ucyBhcmUgInRoZSBzYW1lIiBpbiB0aGUgRWxtIHNlbnNlLicKKyAgICAgICAgICAgICAgICAr
ICcgUmVhZCBtb3JlIGFib3V0IHRoaXMgYXQgaHR0cDovL3BhY2thZ2UuZWxtLWxhbmcub3JnL3Bh
Y2thZ2VzL2VsbS1sYW5nL2NvcmUvbGF0ZXN0L0Jhc2ljcyM9PScKKyAgICAgICAgICAgICAgICAr
ICcgd2hpY2ggZGVzY3JpYmVzIHdoeSBpdCBpcyB0aGlzIHdheSBhbmQgd2hhdCB0aGUgYmV0dGVy
IHZlcnNpb24gd2lsbCBsb29rIGxpa2UuJworICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHggPT09IG51bGwgfHwgeSA9PT0g
bnVsbCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZQorICAgIH0KKworICAgIGlmICh4IGlu
c3RhbmNlb2YgRGF0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB4LmdldFRpbWUoKSA9PT0geS5n
ZXRUaW1lKCk7CisgICAgfQorCisgICAgaWYgKCEoJ2N0b3InIGluIHgpKQorICAgIHsKKyAgICAg
ICAgZm9yICh2YXIga2V5IGluIHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghZXFIZWxw
KHhba2V5XSwgeVtrZXldLCBkZXB0aCArIDEsIHN0YWNrKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gY29udmVydCBEaWN0cyBhbmQgU2V0cyB0
byBsaXN0cworICAgIGlmICh4LmN0b3IgPT09ICdSQk5vZGVfZWxtX2J1aWx0aW4nIHx8IHguY3Rv
ciA9PT0gJ1JCRW1wdHlfZWxtX2J1aWx0aW4nKQorICAgIHsKKyAgICAgICAgeCA9IF9lbG1fbGFu
ZyRjb3JlJERpY3QkdG9MaXN0KHgpOworICAgICAgICB5ID0gX2VsbV9sYW5nJGNvcmUkRGljdCR0
b0xpc3QoeSk7CisgICAgfQorICAgIGlmICh4LmN0b3IgPT09ICdTZXRfZWxtX2J1aWx0aW4nKQor
ICAgIHsKKyAgICAgICAgeCA9IF9lbG1fbGFuZyRjb3JlJFNldCR0b0xpc3QoeCk7CisgICAgICAg
IHkgPSBfZWxtX2xhbmckY29yZSRTZXQkdG9MaXN0KHkpOworICAgIH0KKworICAgIC8vIGNoZWNr
IGlmIGxpc3RzIGFyZSBlcXVhbCB3aXRob3V0IHJlY3Vyc2lvbgorICAgIGlmICh4LmN0b3IgPT09
ICc6OicpCisgICAgeworICAgICAgICB2YXIgYSA9IHg7CisgICAgICAgIHZhciBiID0geTsKKyAg
ICAgICAgd2hpbGUgKGEuY3RvciA9PT0gJzo6JyAmJiBiLmN0b3IgPT09ICc6OicpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmICghZXFIZWxwKGEuXzAsIGIuXzAsIGRlcHRoICsgMSwgc3RhY2sp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGEgPSBhLl8xOworICAgICAgICAgICAgYiA9IGIuXzE7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGEuY3RvciA9PT0gYi5jdG9yOworICAgIH0KKworICAgIC8v
IGNoZWNrIGlmIEFycmF5cyBhcmUgZXF1YWwKKyAgICBpZiAoeC5jdG9yID09PSAnX0FycmF5JykK
KyAgICB7CisgICAgICAgIHZhciB4cyA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9BcnJheS50b0pT
QXJyYXkoeCk7CisgICAgICAgIHZhciB5cyA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9BcnJheS50
b0pTQXJyYXkoeSk7CisgICAgICAgIGlmICh4cy5sZW5ndGggIT09IHlzLmxlbmd0aCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
ICghZXFIZWxwKHhzW2ldLCB5c1tpXSwgZGVwdGggKyAxLCBzdGFjaykpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICghZXFIZWxwKHguY3Rvciwg
eS5jdG9yLCBkZXB0aCArIDEsIHN0YWNrKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBmb3IgKHZhciBrZXkgaW4geCkKKyAgICB7CisgICAgICAgIGlmICghZXFI
ZWxwKHhba2V5XSwgeVtrZXldLCBkZXB0aCArIDEsIHN0YWNrKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOwor
fQorCisvLyBDb2RlIGluIEdlbmVyYXRlL0phdmFTY3JpcHQuaHMsIEJhc2ljcy5qcywgYW5kIExp
c3QuanMgZGVwZW5kcyBvbgorLy8gdGhlIHBhcnRpY3VsYXIgaW50ZWdlciB2YWx1ZXMgYXNzaWdu
ZWQgdG8gTFQsIEVRLCBhbmQgR1QuCisKK3ZhciBMVCA9IC0xLCBFUSA9IDAsIEdUID0gMTsKKwor
ZnVuY3Rpb24gY21wKHgsIHkpCit7CisgICAgaWYgKHR5cGVvZiB4ICE9PSAnb2JqZWN0JykKKyAg
ICB7CisgICAgICAgIHJldHVybiB4ID09PSB5ID8gRVEgOiB4IDwgeSA/IExUIDogR1Q7CisgICAg
fQorCisgICAgaWYgKHggaW5zdGFuY2VvZiBTdHJpbmcpCisgICAgeworICAgICAgICB2YXIgYSA9
IHgudmFsdWVPZigpOworICAgICAgICB2YXIgYiA9IHkudmFsdWVPZigpOworICAgICAgICByZXR1
cm4gYSA9PT0gYiA/IEVRIDogYSA8IGIgPyBMVCA6IEdUOworICAgIH0KKworICAgIGlmICh4LmN0
b3IgPT09ICc6OicgfHwgeC5jdG9yID09PSAnW10nKQorICAgIHsKKyAgICAgICAgd2hpbGUgKHgu
Y3RvciA9PT0gJzo6JyAmJiB5LmN0b3IgPT09ICc6OicpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHZhciBvcmQgPSBjbXAoeC5fMCwgeS5fMCk7CisgICAgICAgICAgICBpZiAob3JkICE9PSBFUSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gb3JkOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgeCA9IHguXzE7CisgICAgICAgICAgICB5ID0geS5fMTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4geC5jdG9yID09PSB5LmN0b3IgPyBFUSA6IHguY3RvciA9PT0gJ1td
JyA/IExUIDogR1Q7CisgICAgfQorCisgICAgaWYgKHguY3Rvci5zbGljZSgwLCA2KSA9PT0gJ19U
dXBsZScpCisgICAgeworICAgICAgICB2YXIgb3JkOworICAgICAgICB2YXIgbiA9IHguY3Rvci5z
bGljZSg2KSAtIDA7CisgICAgICAgIHZhciBlcnIgPSAnY2Fubm90IGNvbXBhcmUgdHVwbGVzIHdp
dGggbW9yZSB0aGFuIDYgZWxlbWVudHMuJzsKKyAgICAgICAgaWYgKG4gPT09IDApIHJldHVybiBF
UTsKKyAgICAgICAgaWYgKG4gPj0gMSkgeyBvcmQgPSBjbXAoeC5fMCwgeS5fMCk7IGlmIChvcmQg
IT09IEVRKSByZXR1cm4gb3JkOworICAgICAgICBpZiAobiA+PSAyKSB7IG9yZCA9IGNtcCh4Ll8x
LCB5Ll8xKTsgaWYgKG9yZCAhPT0gRVEpIHJldHVybiBvcmQ7CisgICAgICAgIGlmIChuID49IDMp
IHsgb3JkID0gY21wKHguXzIsIHkuXzIpOyBpZiAob3JkICE9PSBFUSkgcmV0dXJuIG9yZDsKKyAg
ICAgICAgaWYgKG4gPj0gNCkgeyBvcmQgPSBjbXAoeC5fMywgeS5fMyk7IGlmIChvcmQgIT09IEVR
KSByZXR1cm4gb3JkOworICAgICAgICBpZiAobiA+PSA1KSB7IG9yZCA9IGNtcCh4Ll80LCB5Ll80
KTsgaWYgKG9yZCAhPT0gRVEpIHJldHVybiBvcmQ7CisgICAgICAgIGlmIChuID49IDYpIHsgb3Jk
ID0gY21wKHguXzUsIHkuXzUpOyBpZiAob3JkICE9PSBFUSkgcmV0dXJuIG9yZDsKKyAgICAgICAg
aWYgKG4gPj0gNykgdGhyb3cgbmV3IEVycm9yKCdDb21wYXJpc29uIGVycm9yOiAnICsgZXJyKTsg
fSB9IH0gfSB9IH0KKyAgICAgICAgcmV0dXJuIEVROworICAgIH0KKworICAgIHRocm93IG5ldyBF
cnJvcigKKyAgICAgICAgJ0NvbXBhcmlzb24gZXJyb3I6IGNvbXBhcmlzb24gaXMgb25seSBkZWZp
bmVkIG9uIGludHMsICcKKyAgICAgICAgKyAnZmxvYXRzLCB0aW1lcywgY2hhcnMsIHN0cmluZ3Ms
IGxpc3RzIG9mIGNvbXBhcmFibGUgdmFsdWVzLCAnCisgICAgICAgICsgJ2FuZCB0dXBsZXMgb2Yg
Y29tcGFyYWJsZSB2YWx1ZXMuJworICAgICk7Cit9CisKKworLy8gQ09NTU9OIFZBTFVFUworCit2
YXIgVHVwbGUwID0geworICAgIGN0b3I6ICdfVHVwbGUwJworfTsKKworZnVuY3Rpb24gVHVwbGUy
KHgsIHkpCit7CisgICAgcmV0dXJuIHsKKyAgICAgICAgY3RvcjogJ19UdXBsZTInLAorICAgICAg
ICBfMDogeCwKKyAgICAgICAgXzE6IHkKKyAgICB9OworfQorCitmdW5jdGlvbiBjaHIoYykKK3sK
KyAgICByZXR1cm4gbmV3IFN0cmluZyhjKTsKK30KKworCisvLyBHVUlECisKK3ZhciBjb3VudCA9
IDA7CitmdW5jdGlvbiBndWlkKF8pCit7CisgICAgcmV0dXJuIGNvdW50Kys7Cit9CisKKworLy8g
UkVDT1JEUworCitmdW5jdGlvbiB1cGRhdGUob2xkUmVjb3JkLCB1cGRhdGVkRmllbGRzKQorewor
ICAgIHZhciBuZXdSZWNvcmQgPSB7fTsKKyAgICBmb3IgKHZhciBrZXkgaW4gb2xkUmVjb3JkKQor
ICAgIHsKKyAgICAgICAgdmFyIHZhbHVlID0gKGtleSBpbiB1cGRhdGVkRmllbGRzKSA/IHVwZGF0
ZWRGaWVsZHNba2V5XSA6IG9sZFJlY29yZFtrZXldOworICAgICAgICBuZXdSZWNvcmRba2V5XSA9
IHZhbHVlOworICAgIH0KKyAgICByZXR1cm4gbmV3UmVjb3JkOworfQorCisKKy8vLy8gTElTVCBT
VFVGRiAvLy8vCisKK3ZhciBOaWwgPSB7IGN0b3I6ICdbXScgfTsKKworZnVuY3Rpb24gQ29ucyho
ZCwgdGwpCit7CisgICAgcmV0dXJuIHsKKyAgICAgICAgY3RvcjogJzo6JywKKyAgICAgICAgXzA6
IGhkLAorICAgICAgICBfMTogdGwKKyAgICB9OworfQorCitmdW5jdGlvbiBhcHBlbmQoeHMsIHlz
KQoreworICAgIC8vIGFwcGVuZCBTdHJpbmdzCisgICAgaWYgKHR5cGVvZiB4cyA9PT0gJ3N0cmlu
ZycpCisgICAgeworICAgICAgICByZXR1cm4geHMgKyB5czsKKyAgICB9CisKKyAgICAvLyBhcHBl
bmQgTGlzdHMKKyAgICBpZiAoeHMuY3RvciA9PT0gJ1tdJykKKyAgICB7CisgICAgICAgIHJldHVy
biB5czsKKyAgICB9CisgICAgdmFyIHJvb3QgPSBDb25zKHhzLl8wLCBOaWwpOworICAgIHZhciBj
dXJyID0gcm9vdDsKKyAgICB4cyA9IHhzLl8xOworICAgIHdoaWxlICh4cy5jdG9yICE9PSAnW10n
KQorICAgIHsKKyAgICAgICAgY3Vyci5fMSA9IENvbnMoeHMuXzAsIE5pbCk7CisgICAgICAgIHhz
ID0geHMuXzE7CisgICAgICAgIGN1cnIgPSBjdXJyLl8xOworICAgIH0KKyAgICBjdXJyLl8xID0g
eXM7CisgICAgcmV0dXJuIHJvb3Q7Cit9CisKKworLy8gQ1JBU0hFUworCitmdW5jdGlvbiBjcmFz
aChtb2R1bGVOYW1lLCByZWdpb24pCit7CisgICAgcmV0dXJuIGZ1bmN0aW9uKG1lc3NhZ2UpIHsK
KyAgICAgICAgdGhyb3cgbmV3IEVycm9yKAorICAgICAgICAgICAgJ1JhbiBpbnRvIGEgYERlYnVn
LmNyYXNoYCBpbiBtb2R1bGUgYCcgKyBtb2R1bGVOYW1lICsgJ2AgJyArIHJlZ2lvblRvU3RyaW5n
KHJlZ2lvbikgKyAnXG4nCisgICAgICAgICAgICArICdUaGUgbWVzc2FnZSBwcm92aWRlZCBieSB0
aGUgY29kZSBhdXRob3IgaXM6XG5cbiAgICAnCisgICAgICAgICAgICArIG1lc3NhZ2UKKyAgICAg
ICAgKTsKKyAgICB9OworfQorCitmdW5jdGlvbiBjcmFzaENhc2UobW9kdWxlTmFtZSwgcmVnaW9u
LCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gZnVuY3Rpb24obWVzc2FnZSkgeworICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoCisgICAgICAgICAgICAnUmFuIGludG8gYSBgRGVidWcuY3Jhc2hgIGluIG1v
ZHVsZSBgJyArIG1vZHVsZU5hbWUgKyAnYFxuXG4nCisgICAgICAgICAgICArICdUaGlzIHdhcyBj
YXVzZWQgYnkgdGhlIGBjYXNlYCBleHByZXNzaW9uICcgKyByZWdpb25Ub1N0cmluZyhyZWdpb24p
ICsgJy5cbicKKyAgICAgICAgICAgICsgJ09uZSBvZiB0aGUgYnJhbmNoZXMgZW5kZWQgd2l0aCBh
IGNyYXNoIGFuZCB0aGUgZm9sbG93aW5nIHZhbHVlIGdvdCB0aHJvdWdoOlxuXG4gICAgJyArIHRv
U3RyaW5nKHZhbHVlKSArICdcblxuJworICAgICAgICAgICAgKyAnVGhlIG1lc3NhZ2UgcHJvdmlk
ZWQgYnkgdGhlIGNvZGUgYXV0aG9yIGlzOlxuXG4gICAgJworICAgICAgICAgICAgKyBtZXNzYWdl
CisgICAgICAgICk7CisgICAgfTsKK30KKworZnVuY3Rpb24gcmVnaW9uVG9TdHJpbmcocmVnaW9u
KQoreworICAgIGlmIChyZWdpb24uc3RhcnQubGluZSA9PSByZWdpb24uZW5kLmxpbmUpCisgICAg
eworICAgICAgICByZXR1cm4gJ29uIGxpbmUgJyArIHJlZ2lvbi5zdGFydC5saW5lOworICAgIH0K
KyAgICByZXR1cm4gJ2JldHdlZW4gbGluZXMgJyArIHJlZ2lvbi5zdGFydC5saW5lICsgJyBhbmQg
JyArIHJlZ2lvbi5lbmQubGluZTsKK30KKworCisvLyBUTyBTVFJJTkcKKworZnVuY3Rpb24gdG9T
dHJpbmcodikKK3sKKyAgICB2YXIgdHlwZSA9IHR5cGVvZiB2OworICAgIGlmICh0eXBlID09PSAn
ZnVuY3Rpb24nKQorICAgIHsKKyAgICAgICAgdmFyIG5hbWUgPSB2LmZ1bmMgPyB2LmZ1bmMubmFt
ZSA6IHYubmFtZTsKKyAgICAgICAgcmV0dXJuICc8ZnVuY3Rpb24nICsgKG5hbWUgPT09ICcnID8g
JycgOiAnOicpICsgbmFtZSArICc+JzsKKyAgICB9CisKKyAgICBpZiAodHlwZSA9PT0gJ2Jvb2xl
YW4nKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHYgPyAnVHJ1ZScgOiAnRmFsc2UnOworICAgIH0K
KworICAgIGlmICh0eXBlID09PSAnbnVtYmVyJykKKyAgICB7CisgICAgICAgIHJldHVybiB2ICsg
Jyc7CisgICAgfQorCisgICAgaWYgKHYgaW5zdGFuY2VvZiBTdHJpbmcpCisgICAgeworICAgICAg
ICByZXR1cm4gJ1wnJyArIGFkZFNsYXNoZXModiwgdHJ1ZSkgKyAnXCcnOworICAgIH0KKworICAg
IGlmICh0eXBlID09PSAnc3RyaW5nJykKKyAgICB7CisgICAgICAgIHJldHVybiAnIicgKyBhZGRT
bGFzaGVzKHYsIGZhbHNlKSArICciJzsKKyAgICB9CisKKyAgICBpZiAodiA9PT0gbnVsbCkKKyAg
ICB7CisgICAgICAgIHJldHVybiAnbnVsbCc7CisgICAgfQorCisgICAgaWYgKHR5cGUgPT09ICdv
YmplY3QnICYmICdjdG9yJyBpbiB2KQorICAgIHsKKyAgICAgICAgdmFyIGN0b3JTdGFydGVyID0g
di5jdG9yLnN1YnN0cmluZygwLCA1KTsKKworICAgICAgICBpZiAoY3RvclN0YXJ0ZXIgPT09ICdf
VHVwbCcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBvdXRwdXQgPSBbXTsKKyAgICAgICAg
ICAgIGZvciAodmFyIGsgaW4gdikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAo
ayA9PT0gJ2N0b3InKSBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBvdXRwdXQucHVzaCh0b1N0
cmluZyh2W2tdKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gJygnICsgb3V0
cHV0LmpvaW4oJywnKSArICcpJzsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjdG9yU3RhcnRl
ciA9PT0gJ19UYXNrJykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICc8dGFzaz4nCisg
ICAgICAgIH0KKworICAgICAgICBpZiAodi5jdG9yID09PSAnX0FycmF5JykKKyAgICAgICAgewor
ICAgICAgICAgICAgdmFyIGxpc3QgPSBfZWxtX2xhbmckY29yZSRBcnJheSR0b0xpc3Qodik7Cisg
ICAgICAgICAgICByZXR1cm4gJ0FycmF5LmZyb21MaXN0ICcgKyB0b1N0cmluZyhsaXN0KTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICh2LmN0b3IgPT09ICc8ZGVjb2Rlcj4nKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gJzxkZWNvZGVyPic7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAodi5jdG9yID09PSAnX1Byb2Nlc3MnKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
Jzxwcm9jZXNzOicgKyB2LmlkICsgJz4nOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHYuY3Rv
ciA9PT0gJzo6JykKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIG91dHB1dCA9ICdbJyArIHRv
U3RyaW5nKHYuXzApOworICAgICAgICAgICAgdiA9IHYuXzE7CisgICAgICAgICAgICB3aGlsZSAo
di5jdG9yID09PSAnOjonKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dHB1dCAr
PSAnLCcgKyB0b1N0cmluZyh2Ll8wKTsKKyAgICAgICAgICAgICAgICB2ID0gdi5fMTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBvdXRwdXQgKyAnXSc7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAodi5jdG9yID09PSAnW10nKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gJ1tdJzsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh2LmN0b3IgPT09ICdTZXRfZWxtX2J1
aWx0aW4nKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gJ1NldC5mcm9tTGlzdCAnICsg
dG9TdHJpbmcoX2VsbV9sYW5nJGNvcmUkU2V0JHRvTGlzdCh2KSk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAodi5jdG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGluJyB8fCB2LmN0b3IgPT09ICdS
QkVtcHR5X2VsbV9idWlsdGluJykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICdEaWN0
LmZyb21MaXN0ICcgKyB0b1N0cmluZyhfZWxtX2xhbmckY29yZSREaWN0JHRvTGlzdCh2KSk7Cisg
ICAgICAgIH0KKworICAgICAgICB2YXIgb3V0cHV0ID0gJyc7CisgICAgICAgIGZvciAodmFyIGkg
aW4gdikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGkgPT09ICdjdG9yJykgY29udGludWU7
CisgICAgICAgICAgICB2YXIgc3RyID0gdG9TdHJpbmcodltpXSk7CisgICAgICAgICAgICB2YXIg
YzAgPSBzdHJbMF07CisgICAgICAgICAgICB2YXIgcGFyZW5sZXNzID0gYzAgPT09ICd7JyB8fCBj
MCA9PT0gJygnIHx8IGMwID09PSAnPCcgfHwgYzAgPT09ICciJyB8fCBzdHIuaW5kZXhPZignICcp
IDwgMDsKKyAgICAgICAgICAgIG91dHB1dCArPSAnICcgKyAocGFyZW5sZXNzID8gc3RyIDogJygn
ICsgc3RyICsgJyknKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdi5jdG9yICsgb3V0cHV0
OworICAgIH0KKworICAgIGlmICh0eXBlID09PSAnb2JqZWN0JykKKyAgICB7CisgICAgICAgIGlm
ICh2IGluc3RhbmNlb2YgRGF0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICc8JyAr
IHYudG9TdHJpbmcoKSArICc+JzsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh2LmVsbV93ZWJf
c29ja2V0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gJzx3ZWJzb2NrZXQ+JzsKKyAg
ICAgICAgfQorCisgICAgICAgIHZhciBvdXRwdXQgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgayBp
biB2KQorICAgICAgICB7CisgICAgICAgICAgICBvdXRwdXQucHVzaChrICsgJyA9ICcgKyB0b1N0
cmluZyh2W2tdKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG91dHB1dC5sZW5ndGggPT09IDAp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAne30nOworICAgICAgICB9CisgICAgICAg
IHJldHVybiAneyAnICsgb3V0cHV0LmpvaW4oJywgJykgKyAnIH0nOworICAgIH0KKworICAgIHJl
dHVybiAnPGludGVybmFsIHN0cnVjdHVyZT4nOworfQorCitmdW5jdGlvbiBhZGRTbGFzaGVzKHN0
ciwgaXNDaGFyKQoreworICAgIHZhciBzID0gc3RyLnJlcGxhY2UoL1xcL2csICdcXFxcJykKKyAg
ICAgICAgICAgICAgLnJlcGxhY2UoL1xuL2csICdcXG4nKQorICAgICAgICAgICAgICAucmVwbGFj
ZSgvXHQvZywgJ1xcdCcpCisgICAgICAgICAgICAgIC5yZXBsYWNlKC9cci9nLCAnXFxyJykKKyAg
ICAgICAgICAgICAgLnJlcGxhY2UoL1x2L2csICdcXHYnKQorICAgICAgICAgICAgICAucmVwbGFj
ZSgvXDAvZywgJ1xcMCcpOworICAgIGlmIChpc0NoYXIpCisgICAgeworICAgICAgICByZXR1cm4g
cy5yZXBsYWNlKC9cJy9nLCAnXFxcJycpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICByZXR1cm4gcy5yZXBsYWNlKC9cIi9nLCAnXFwiJyk7CisgICAgfQorfQorCisKK3JldHVybiB7
CisgICAgZXE6IGVxLAorICAgIGNtcDogY21wLAorICAgIFR1cGxlMDogVHVwbGUwLAorICAgIFR1
cGxlMjogVHVwbGUyLAorICAgIGNocjogY2hyLAorICAgIHVwZGF0ZTogdXBkYXRlLAorICAgIGd1
aWQ6IGd1aWQsCisKKyAgICBhcHBlbmQ6IEYyKGFwcGVuZCksCisKKyAgICBjcmFzaDogY3Jhc2gs
CisgICAgY3Jhc2hDYXNlOiBjcmFzaENhc2UsCisKKyAgICB0b1N0cmluZzogdG9TdHJpbmcKK307
CisKK30oKTsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3MkdW5jdXJyeSA9IEYyKAorICAgIGZ1
bmN0aW9uIChmLCBfcDApIHsKKyAgICAgICAgdmFyIF9wMSA9IF9wMDsKKyAgICAgICAgcmV0dXJu
IEEyKGYsIF9wMS5fMCwgX3AxLl8xKTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNp
Y3MkY3VycnkgPSBGMygKKyAgICBmdW5jdGlvbiAoZiwgYSwgYikgeworICAgICAgICByZXR1cm4g
ZigKKyAgICAgICAgICAgIHtjdG9yOiAnX1R1cGxlMicsIF8wOiBhLCBfMTogYn0pOworICAgIH0p
OwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRmbGlwID0gRjMoCisgICAgZnVuY3Rpb24gKGYs
IGIsIGEpIHsKKyAgICAgICAgcmV0dXJuIEEyKGYsIGEsIGIpOworICAgIH0pOwordmFyIF9lbG1f
bGFuZyRjb3JlJEJhc2ljcyRzbmQgPSBmdW5jdGlvbiAoX3AyKSB7CisgICAgdmFyIF9wMyA9IF9w
MjsKKyAgICByZXR1cm4gX3AzLl8xOworfTsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3MkZnN0
ID0gZnVuY3Rpb24gKF9wNCkgeworICAgIHZhciBfcDUgPSBfcDQ7CisgICAgcmV0dXJuIF9wNS5f
MDsKK307Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJGFsd2F5cyA9IEYyKAorICAgIGZ1bmN0
aW9uIChhLCBfcDYpIHsKKyAgICAgICAgcmV0dXJuIGE7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5n
JGNvcmUkQmFzaWNzJGlkZW50aXR5ID0gZnVuY3Rpb24gKHgpIHsKKyAgICByZXR1cm4geDsKK307
Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wcyA9IF9lbG1fbGFuZyRjb3JlJEJhc2ljc19v
cHMgfHwge307CitfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWyc8fCddID0gRjIoCisgICAgZnVu
Y3Rpb24gKGYsIHgpIHsKKyAgICAgICAgcmV0dXJuIGYoeCk7CisgICAgfSk7Cit2YXIgX2VsbV9s
YW5nJGNvcmUkQmFzaWNzX29wcyA9IF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHMgfHwge307Citf
ZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWyd8PiddID0gRjIoCisgICAgZnVuY3Rpb24gKHgsIGYp
IHsKKyAgICAgICAgcmV0dXJuIGYoeCk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFz
aWNzX29wcyA9IF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHMgfHwge307CitfZWxtX2xhbmckY29y
ZSRCYXNpY3Nfb3BzWyc+PiddID0gRjMoCisgICAgZnVuY3Rpb24gKGYsIGcsIHgpIHsKKyAgICAg
ICAgcmV0dXJuIGcoCisgICAgICAgICAgICBmKHgpKTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmck
Y29yZSRCYXNpY3Nfb3BzID0gX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wcyB8fCB7fTsKK19lbG1f
bGFuZyRjb3JlJEJhc2ljc19vcHNbJzw8J10gPSBGMygKKyAgICBmdW5jdGlvbiAoZywgZiwgeCkg
eworICAgICAgICByZXR1cm4gZygKKyAgICAgICAgICAgIGYoeCkpOworICAgIH0pOwordmFyIF9l
bG1fbGFuZyRjb3JlJEJhc2ljc19vcHMgPSBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzIHx8IHt9
OworX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1snKysnXSA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2
ZV9VdGlscy5hcHBlbmQ7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJHRvU3RyaW5nID0gX2Vs
bV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLnRvU3RyaW5nOwordmFyIF9lbG1fbGFuZyRjb3JlJEJh
c2ljcyRpc0luZmluaXRlID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy5pc0luZmluaXRl
OwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRpc05hTiA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2
ZV9CYXNpY3MuaXNOYU47Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJHRvRmxvYXQgPSBfZWxt
X2xhbmckY29yZSROYXRpdmVfQmFzaWNzLnRvRmxvYXQ7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFz
aWNzJGNlaWxpbmcgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQmFzaWNzLmNlaWxpbmc7Cit2YXIg
X2VsbV9sYW5nJGNvcmUkQmFzaWNzJGZsb29yID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2lj
cy5mbG9vcjsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3MkdHJ1bmNhdGUgPSBfZWxtX2xhbmck
Y29yZSROYXRpdmVfQmFzaWNzLnRydW5jYXRlOwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRy
b3VuZCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9CYXNpY3Mucm91bmQ7Cit2YXIgX2VsbV9sYW5n
JGNvcmUkQmFzaWNzJG5vdCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9CYXNpY3Mubm90OwordmFy
IF9lbG1fbGFuZyRjb3JlJEJhc2ljcyR4b3IgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQmFzaWNz
LnhvcjsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzID0gX2VsbV9sYW5nJGNvcmUkQmFz
aWNzX29wcyB8fCB7fTsKK19lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHNbJ3x8J10gPSBfZWxtX2xh
bmckY29yZSROYXRpdmVfQmFzaWNzLm9yOwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHMg
PSBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzIHx8IHt9OworX2VsbV9sYW5nJGNvcmUkQmFzaWNz
X29wc1snJiYnXSA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9CYXNpY3MuYW5kOwordmFyIF9lbG1f
bGFuZyRjb3JlJEJhc2ljcyRtYXggPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQmFzaWNzLm1heDsK
K3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3MkbWluID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jh
c2ljcy5taW47Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJGNvbXBhcmUgPSBfZWxtX2xhbmck
Y29yZSROYXRpdmVfQmFzaWNzLmNvbXBhcmU7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29w
cyA9IF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHMgfHwge307CitfZWxtX2xhbmckY29yZSRCYXNp
Y3Nfb3BzWyc+PSddID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy5nZTsKK3ZhciBfZWxt
X2xhbmckY29yZSRCYXNpY3Nfb3BzID0gX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wcyB8fCB7fTsK
K19lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHNbJzw9J10gPSBfZWxtX2xhbmckY29yZSROYXRpdmVf
QmFzaWNzLmxlOwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHMgPSBfZWxtX2xhbmckY29y
ZSRCYXNpY3Nfb3BzIHx8IHt9OworX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1snPiddID0gX2Vs
bV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy5ndDsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3Nf
b3BzID0gX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wcyB8fCB7fTsKK19lbG1fbGFuZyRjb3JlJEJh
c2ljc19vcHNbJzwnXSA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9CYXNpY3MubHQ7Cit2YXIgX2Vs
bV9sYW5nJGNvcmUkQmFzaWNzX29wcyA9IF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHMgfHwge307
CitfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWycvPSddID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZl
X0Jhc2ljcy5uZXE7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wcyA9IF9lbG1fbGFuZyRj
b3JlJEJhc2ljc19vcHMgfHwge307CitfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWyc9PSddID0g
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy5lcTsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNp
Y3MkZSA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9CYXNpY3MuZTsKK3ZhciBfZWxtX2xhbmckY29y
ZSRCYXNpY3MkcGkgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQmFzaWNzLnBpOwordmFyIF9lbG1f
bGFuZyRjb3JlJEJhc2ljcyRjbGFtcCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9CYXNpY3MuY2xh
bXA7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJGxvZ0Jhc2UgPSBfZWxtX2xhbmckY29yZSRO
YXRpdmVfQmFzaWNzLmxvZ0Jhc2U7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJGFicyA9IF9l
bG1fbGFuZyRjb3JlJE5hdGl2ZV9CYXNpY3MuYWJzOwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2lj
cyRuZWdhdGUgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQmFzaWNzLm5lZ2F0ZTsKK3ZhciBfZWxt
X2xhbmckY29yZSRCYXNpY3Mkc3FydCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9CYXNpY3Muc3Fy
dDsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3MkYXRhbjIgPSBfZWxtX2xhbmckY29yZSROYXRp
dmVfQmFzaWNzLmF0YW4yOwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRhdGFuID0gX2VsbV9s
YW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy5hdGFuOwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRh
c2luID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy5hc2luOwordmFyIF9lbG1fbGFuZyRj
b3JlJEJhc2ljcyRhY29zID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy5hY29zOwordmFy
IF9lbG1fbGFuZyRjb3JlJEJhc2ljcyR0YW4gPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQmFzaWNz
LnRhbjsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3Mkc2luID0gX2VsbV9sYW5nJGNvcmUkTmF0
aXZlX0Jhc2ljcy5zaW47Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJGNvcyA9IF9lbG1fbGFu
ZyRjb3JlJE5hdGl2ZV9CYXNpY3MuY29zOwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHMg
PSBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzIHx8IHt9OworX2VsbV9sYW5nJGNvcmUkQmFzaWNz
X29wc1snXiddID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy5leHA7Cit2YXIgX2VsbV9s
YW5nJGNvcmUkQmFzaWNzX29wcyA9IF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHMgfHwge307Citf
ZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWyclJ10gPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQmFz
aWNzLm1vZDsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3MkcmVtID0gX2VsbV9sYW5nJGNvcmUk
TmF0aXZlX0Jhc2ljcy5yZW07Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wcyA9IF9lbG1f
bGFuZyRjb3JlJEJhc2ljc19vcHMgfHwge307CitfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWycv
LyddID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy5kaXY7Cit2YXIgX2VsbV9sYW5nJGNv
cmUkQmFzaWNzX29wcyA9IF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHMgfHwge307CitfZWxtX2xh
bmckY29yZSRCYXNpY3Nfb3BzWycvJ10gPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQmFzaWNzLmZs
b2F0RGl2OwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHMgPSBfZWxtX2xhbmckY29yZSRC
YXNpY3Nfb3BzIHx8IHt9OworX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1snKiddID0gX2VsbV9s
YW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy5tdWw7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29w
cyA9IF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHMgfHwge307CitfZWxtX2xhbmckY29yZSRCYXNp
Y3Nfb3BzWyctJ10gPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQmFzaWNzLnN1YjsKK3ZhciBfZWxt
X2xhbmckY29yZSRCYXNpY3Nfb3BzID0gX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wcyB8fCB7fTsK
K19lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHNbJysnXSA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9C
YXNpY3MuYWRkOwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyR0b1BvbGFyID0gX2VsbV9sYW5n
JGNvcmUkTmF0aXZlX0Jhc2ljcy50b1BvbGFyOwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRm
cm9tUG9sYXIgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQmFzaWNzLmZyb21Qb2xhcjsKK3ZhciBf
ZWxtX2xhbmckY29yZSRCYXNpY3MkdHVybnMgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQmFzaWNz
LnR1cm5zOwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRkZWdyZWVzID0gX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX0Jhc2ljcy5kZWdyZWVzOwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRyYWRp
YW5zID0gZnVuY3Rpb24gKHQpIHsKKyAgICByZXR1cm4gdDsKK307Cit2YXIgX2VsbV9sYW5nJGNv
cmUkQmFzaWNzJEdUID0ge2N0b3I6ICdHVCd9OwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRF
USA9IHtjdG9yOiAnRVEnfTsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3MkTFQgPSB7Y3Rvcjog
J0xUJ307Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJE5ldmVyID0gZnVuY3Rpb24gKGEpIHsK
KyAgICByZXR1cm4ge2N0b3I6ICdOZXZlcicsIF8wOiBhfTsKK307CisKKy8vaW1wb3J0IE5hdGl2
ZS5VdGlscyAvLworCit2YXIgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0RlYnVnID0gZnVuY3Rpb24o
KSB7CisKK2Z1bmN0aW9uIGxvZyh0YWcsIHZhbHVlKQoreworICAgIHZhciBtc2cgPSB0YWcgKyAn
OiAnICsgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLnRvU3RyaW5nKHZhbHVlKTsKKyAgICB2
YXIgcHJvY2VzcyA9IHByb2Nlc3MgfHwge307CisgICAgaWYgKHByb2Nlc3Muc3Rkb3V0KQorICAg
IHsKKyAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUobXNnKTsKKyAgICB9CisgICAgZWxzZQor
ICAgIHsKKyAgICAgICAgLy8gY29uc29sZS5sb2cobXNnKTsKKyAgICB9CisgICAgcmV0dXJuIHZh
bHVlOworfQorCitmdW5jdGlvbiBjcmFzaChtZXNzYWdlKQoreworICAgIHRocm93IG5ldyBFcnJv
cihtZXNzYWdlKTsKK30KKworcmV0dXJuIHsKKyAgICBjcmFzaDogY3Jhc2gsCisgICAgbG9nOiBG
Mihsb2cpCit9OworCit9KCk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGVidWckY3Jhc2ggPSBfZWxt
X2xhbmckY29yZSROYXRpdmVfRGVidWcuY3Jhc2g7Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGVidWck
bG9nID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0RlYnVnLmxvZzsKKwordmFyIF9lbG1fbGFuZyRj
b3JlJE1heWJlJHdpdGhEZWZhdWx0ID0gRjIoCisgICAgZnVuY3Rpb24gKCRkZWZhdWx0LCBtYXli
ZSkgeworICAgICAgICB2YXIgX3AwID0gbWF5YmU7CisgICAgICAgIGlmIChfcDAuY3RvciA9PT0g
J0p1c3QnKSB7CisgICAgICAgICAgICByZXR1cm4gX3AwLl8wOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgcmV0dXJuICRkZWZhdWx0OworICAgICAgICB9CisgICAgfSk7Cit2YXIgX2Vs
bV9sYW5nJGNvcmUkTWF5YmUkTm90aGluZyA9IHtjdG9yOiAnTm90aGluZyd9OwordmFyIF9lbG1f
bGFuZyRjb3JlJE1heWJlJG9uZU9mID0gZnVuY3Rpb24gKG1heWJlcykgeworICAgIG9uZU9mOgor
ICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIHZhciBfcDEgPSBtYXliZXM7CisgICAgICAgIGlm
IChfcDEuY3RvciA9PT0gJ1tdJykgeworICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3Jl
JE1heWJlJE5vdGhpbmc7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgX3AzID0g
X3AxLl8wOworICAgICAgICAgICAgdmFyIF9wMiA9IF9wMzsKKyAgICAgICAgICAgIGlmIChfcDIu
Y3RvciA9PT0gJ05vdGhpbmcnKSB7CisgICAgICAgICAgICAgICAgdmFyIF92MyA9IF9wMS5fMTsK
KyAgICAgICAgICAgICAgICBtYXliZXMgPSBfdjM7CisgICAgICAgICAgICAgICAgY29udGludWUg
b25lT2Y7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBfcDM7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9OwordmFyIF9lbG1fbGFuZyRjb3Jl
JE1heWJlJGFuZFRoZW4gPSBGMigKKyAgICBmdW5jdGlvbiAobWF5YmVWYWx1ZSwgY2FsbGJhY2sp
IHsKKyAgICAgICAgdmFyIF9wNCA9IG1heWJlVmFsdWU7CisgICAgICAgIGlmIChfcDQuY3RvciA9
PT0gJ0p1c3QnKSB7CisgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soX3A0Ll8wKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRNYXliZSROb3Ro
aW5nOworICAgICAgICB9CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkTWF5YmUkSnVzdCA9
IGZ1bmN0aW9uIChhKSB7CisgICAgcmV0dXJuIHtjdG9yOiAnSnVzdCcsIF8wOiBhfTsKK307Cit2
YXIgX2VsbV9sYW5nJGNvcmUkTWF5YmUkbWFwID0gRjIoCisgICAgZnVuY3Rpb24gKGYsIG1heWJl
KSB7CisgICAgICAgIHZhciBfcDUgPSBtYXliZTsKKyAgICAgICAgaWYgKF9wNS5jdG9yID09PSAn
SnVzdCcpIHsKKyAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRNYXliZSRKdXN0KAor
ICAgICAgICAgICAgICAgIGYoX3A1Ll8wKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTWF5YmUkTm90aGluZzsKKyAgICAgICAgfQorICAgIH0p
OwordmFyIF9lbG1fbGFuZyRjb3JlJE1heWJlJG1hcDIgPSBGMygKKyAgICBmdW5jdGlvbiAoZnVu
YywgbWEsIG1iKSB7CisgICAgICAgIHZhciBfcDYgPSB7Y3RvcjogJ19UdXBsZTInLCBfMDogbWEs
IF8xOiBtYn07CisgICAgICAgIGlmICgoKF9wNi5jdG9yID09PSAnX1R1cGxlMicpICYmIChfcDYu
XzAuY3RvciA9PT0gJ0p1c3QnKSkgJiYgKF9wNi5fMS5jdG9yID09PSAnSnVzdCcpKSB7CisgICAg
ICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTWF5YmUkSnVzdCgKKyAgICAgICAgICAgICAg
ICBBMihmdW5jLCBfcDYuXzAuXzAsIF9wNi5fMS5fMCkpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE1heWJlJE5vdGhpbmc7CisgICAgICAgIH0K
KyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRNYXliZSRtYXAzID0gRjQoCisgICAgZnVuY3Rp
b24gKGZ1bmMsIG1hLCBtYiwgbWMpIHsKKyAgICAgICAgdmFyIF9wNyA9IHtjdG9yOiAnX1R1cGxl
MycsIF8wOiBtYSwgXzE6IG1iLCBfMjogbWN9OworICAgICAgICBpZiAoKCgoX3A3LmN0b3IgPT09
ICdfVHVwbGUzJykgJiYgKF9wNy5fMC5jdG9yID09PSAnSnVzdCcpKSAmJiAoX3A3Ll8xLmN0b3Ig
PT09ICdKdXN0JykpICYmIChfcDcuXzIuY3RvciA9PT0gJ0p1c3QnKSkgeworICAgICAgICAgICAg
cmV0dXJuIF9lbG1fbGFuZyRjb3JlJE1heWJlJEp1c3QoCisgICAgICAgICAgICAgICAgQTMoZnVu
YywgX3A3Ll8wLl8wLCBfcDcuXzEuXzAsIF9wNy5fMi5fMCkpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE1heWJlJE5vdGhpbmc7CisgICAgICAg
IH0KKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRNYXliZSRtYXA0ID0gRjUoCisgICAgZnVu
Y3Rpb24gKGZ1bmMsIG1hLCBtYiwgbWMsIG1kKSB7CisgICAgICAgIHZhciBfcDggPSB7Y3Rvcjog
J19UdXBsZTQnLCBfMDogbWEsIF8xOiBtYiwgXzI6IG1jLCBfMzogbWR9OworICAgICAgICBpZiAo
KCgoKF9wOC5jdG9yID09PSAnX1R1cGxlNCcpICYmIChfcDguXzAuY3RvciA9PT0gJ0p1c3QnKSkg
JiYgKF9wOC5fMS5jdG9yID09PSAnSnVzdCcpKSAmJiAoX3A4Ll8yLmN0b3IgPT09ICdKdXN0Jykp
ICYmIChfcDguXzMuY3RvciA9PT0gJ0p1c3QnKSkgeworICAgICAgICAgICAgcmV0dXJuIF9lbG1f
bGFuZyRjb3JlJE1heWJlJEp1c3QoCisgICAgICAgICAgICAgICAgQTQoZnVuYywgX3A4Ll8wLl8w
LCBfcDguXzEuXzAsIF9wOC5fMi5fMCwgX3A4Ll8zLl8wKSk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTWF5YmUkTm90aGluZzsKKyAgICAgICAg
fQorICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJE1heWJlJG1hcDUgPSBGNigKKyAgICBmdW5j
dGlvbiAoZnVuYywgbWEsIG1iLCBtYywgbWQsIG1lKSB7CisgICAgICAgIHZhciBfcDkgPSB7Y3Rv
cjogJ19UdXBsZTUnLCBfMDogbWEsIF8xOiBtYiwgXzI6IG1jLCBfMzogbWQsIF80OiBtZX07Cisg
ICAgICAgIGlmICgoKCgoKF9wOS5jdG9yID09PSAnX1R1cGxlNScpICYmIChfcDkuXzAuY3RvciA9
PT0gJ0p1c3QnKSkgJiYgKF9wOS5fMS5jdG9yID09PSAnSnVzdCcpKSAmJiAoX3A5Ll8yLmN0b3Ig
PT09ICdKdXN0JykpICYmIChfcDkuXzMuY3RvciA9PT0gJ0p1c3QnKSkgJiYgKF9wOS5fNC5jdG9y
ID09PSAnSnVzdCcpKSB7CisgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTWF5YmUk
SnVzdCgKKyAgICAgICAgICAgICAgICBBNShmdW5jLCBfcDkuXzAuXzAsIF9wOS5fMS5fMCwgX3A5
Ll8yLl8wLCBfcDkuXzMuXzAsIF9wOS5fNC5fMCkpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE1heWJlJE5vdGhpbmc7CisgICAgICAgIH0KKyAg
ICB9KTsKKworLy9pbXBvcnQgTmF0aXZlLlV0aWxzIC8vCisKK3ZhciBfZWxtX2xhbmckY29yZSRO
YXRpdmVfTGlzdCA9IGZ1bmN0aW9uKCkgeworCit2YXIgTmlsID0geyBjdG9yOiAnW10nIH07CisK
K2Z1bmN0aW9uIENvbnMoaGQsIHRsKQoreworICAgIHJldHVybiB7IGN0b3I6ICc6OicsIF8wOiBo
ZCwgXzE6IHRsIH07Cit9CisKK2Z1bmN0aW9uIGZyb21BcnJheShhcnIpCit7CisgICAgdmFyIG91
dCA9IE5pbDsKKyAgICBmb3IgKHZhciBpID0gYXJyLmxlbmd0aDsgaS0tOyApCisgICAgeworICAg
ICAgICBvdXQgPSBDb25zKGFycltpXSwgb3V0KTsKKyAgICB9CisgICAgcmV0dXJuIG91dDsKK30K
KworZnVuY3Rpb24gdG9BcnJheSh4cykKK3sKKyAgICB2YXIgb3V0ID0gW107CisgICAgd2hpbGUg
KHhzLmN0b3IgIT09ICdbXScpCisgICAgeworICAgICAgICBvdXQucHVzaCh4cy5fMCk7CisgICAg
ICAgIHhzID0geHMuXzE7CisgICAgfQorICAgIHJldHVybiBvdXQ7Cit9CisKKworZnVuY3Rpb24g
cmFuZ2UobG8sIGhpKQoreworICAgIHZhciBsaXN0ID0gTmlsOworICAgIGlmIChsbyA8PSBoaSkK
KyAgICB7CisgICAgICAgIGRvCisgICAgICAgIHsKKyAgICAgICAgICAgIGxpc3QgPSBDb25zKGhp
LCBsaXN0KTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoaGktLSA+IGxvKTsKKyAgICB9Cisg
ICAgcmV0dXJuIGxpc3Q7Cit9CisKK2Z1bmN0aW9uIGZvbGRyKGYsIGIsIHhzKQoreworICAgIHZh
ciBhcnIgPSB0b0FycmF5KHhzKTsKKyAgICB2YXIgYWNjID0gYjsKKyAgICBmb3IgKHZhciBpID0g
YXJyLmxlbmd0aDsgaS0tOyApCisgICAgeworICAgICAgICBhY2MgPSBBMihmLCBhcnJbaV0sIGFj
Yyk7CisgICAgfQorICAgIHJldHVybiBhY2M7Cit9CisKK2Z1bmN0aW9uIG1hcDIoZiwgeHMsIHlz
KQoreworICAgIHZhciBhcnIgPSBbXTsKKyAgICB3aGlsZSAoeHMuY3RvciAhPT0gJ1tdJyAmJiB5
cy5jdG9yICE9PSAnW10nKQorICAgIHsKKyAgICAgICAgYXJyLnB1c2goQTIoZiwgeHMuXzAsIHlz
Ll8wKSk7CisgICAgICAgIHhzID0geHMuXzE7CisgICAgICAgIHlzID0geXMuXzE7CisgICAgfQor
ICAgIHJldHVybiBmcm9tQXJyYXkoYXJyKTsKK30KKworZnVuY3Rpb24gbWFwMyhmLCB4cywgeXMs
IHpzKQoreworICAgIHZhciBhcnIgPSBbXTsKKyAgICB3aGlsZSAoeHMuY3RvciAhPT0gJ1tdJyAm
JiB5cy5jdG9yICE9PSAnW10nICYmIHpzLmN0b3IgIT09ICdbXScpCisgICAgeworICAgICAgICBh
cnIucHVzaChBMyhmLCB4cy5fMCwgeXMuXzAsIHpzLl8wKSk7CisgICAgICAgIHhzID0geHMuXzE7
CisgICAgICAgIHlzID0geXMuXzE7CisgICAgICAgIHpzID0genMuXzE7CisgICAgfQorICAgIHJl
dHVybiBmcm9tQXJyYXkoYXJyKTsKK30KKworZnVuY3Rpb24gbWFwNChmLCB3cywgeHMsIHlzLCB6
cykKK3sKKyAgICB2YXIgYXJyID0gW107CisgICAgd2hpbGUgKCAgIHdzLmN0b3IgIT09ICdbXScK
KyAgICAgICAgICAgJiYgeHMuY3RvciAhPT0gJ1tdJworICAgICAgICAgICAmJiB5cy5jdG9yICE9
PSAnW10nCisgICAgICAgICAgICYmIHpzLmN0b3IgIT09ICdbXScpCisgICAgeworICAgICAgICBh
cnIucHVzaChBNChmLCB3cy5fMCwgeHMuXzAsIHlzLl8wLCB6cy5fMCkpOworICAgICAgICB3cyA9
IHdzLl8xOworICAgICAgICB4cyA9IHhzLl8xOworICAgICAgICB5cyA9IHlzLl8xOworICAgICAg
ICB6cyA9IHpzLl8xOworICAgIH0KKyAgICByZXR1cm4gZnJvbUFycmF5KGFycik7Cit9CisKK2Z1
bmN0aW9uIG1hcDUoZiwgdnMsIHdzLCB4cywgeXMsIHpzKQoreworICAgIHZhciBhcnIgPSBbXTsK
KyAgICB3aGlsZSAoICAgdnMuY3RvciAhPT0gJ1tdJworICAgICAgICAgICAmJiB3cy5jdG9yICE9
PSAnW10nCisgICAgICAgICAgICYmIHhzLmN0b3IgIT09ICdbXScKKyAgICAgICAgICAgJiYgeXMu
Y3RvciAhPT0gJ1tdJworICAgICAgICAgICAmJiB6cy5jdG9yICE9PSAnW10nKQorICAgIHsKKyAg
ICAgICAgYXJyLnB1c2goQTUoZiwgdnMuXzAsIHdzLl8wLCB4cy5fMCwgeXMuXzAsIHpzLl8wKSk7
CisgICAgICAgIHZzID0gdnMuXzE7CisgICAgICAgIHdzID0gd3MuXzE7CisgICAgICAgIHhzID0g
eHMuXzE7CisgICAgICAgIHlzID0geXMuXzE7CisgICAgICAgIHpzID0genMuXzE7CisgICAgfQor
ICAgIHJldHVybiBmcm9tQXJyYXkoYXJyKTsKK30KKworZnVuY3Rpb24gc29ydEJ5KGYsIHhzKQor
eworICAgIHJldHVybiBmcm9tQXJyYXkodG9BcnJheSh4cykuc29ydChmdW5jdGlvbihhLCBiKSB7
CisgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuY21wKGYoYSksIGYo
YikpOworICAgIH0pKTsKK30KKworZnVuY3Rpb24gc29ydFdpdGgoZiwgeHMpCit7CisgICAgcmV0
dXJuIGZyb21BcnJheSh0b0FycmF5KHhzKS5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsKKyAgICAgICAg
dmFyIG9yZCA9IGYoYSkoYikuY3RvcjsKKyAgICAgICAgcmV0dXJuIG9yZCA9PT0gJ0VRJyA/IDAg
OiBvcmQgPT09ICdMVCcgPyAtMSA6IDE7CisgICAgfSkpOworfQorCityZXR1cm4geworICAgIE5p
bDogTmlsLAorICAgIENvbnM6IENvbnMsCisgICAgY29uczogRjIoQ29ucyksCisgICAgdG9BcnJh
eTogdG9BcnJheSwKKyAgICBmcm9tQXJyYXk6IGZyb21BcnJheSwKKyAgICByYW5nZTogcmFuZ2Us
CisKKyAgICBmb2xkcjogRjMoZm9sZHIpLAorCisgICAgbWFwMjogRjMobWFwMiksCisgICAgbWFw
MzogRjQobWFwMyksCisgICAgbWFwNDogRjUobWFwNCksCisgICAgbWFwNTogRjYobWFwNSksCisg
ICAgc29ydEJ5OiBGMihzb3J0QnkpLAorICAgIHNvcnRXaXRoOiBGMihzb3J0V2l0aCkKK307CisK
K30oKTsKK3ZhciBfZWxtX2xhbmckY29yZSRMaXN0JHNvcnRXaXRoID0gX2VsbV9sYW5nJGNvcmUk
TmF0aXZlX0xpc3Quc29ydFdpdGg7Cit2YXIgX2VsbV9sYW5nJGNvcmUkTGlzdCRzb3J0QnkgPSBf
ZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5zb3J0Qnk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkTGlz
dCRzb3J0ID0gZnVuY3Rpb24gKHhzKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRjb3JlJExp
c3Qkc29ydEJ5LCBfZWxtX2xhbmckY29yZSRCYXNpY3MkaWRlbnRpdHksIHhzKTsKK307Cit2YXIg
X2VsbV9sYW5nJGNvcmUkTGlzdCRkcm9wID0gRjIoCisgICAgZnVuY3Rpb24gKG4sIGxpc3QpIHsK
KyAgICAgICAgZHJvcDoKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIGlmIChf
ZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuY21wKG4sIDApIDwgMSkgeworICAgICAgICAgICAg
ICAgIHJldHVybiBsaXN0OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2
YXIgX3AwID0gbGlzdDsKKyAgICAgICAgICAgICAgICBpZiAoX3AwLmN0b3IgPT09ICdbXScpIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxpc3Q7CisgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIF92MSA9IG4gLSAxLAorICAgICAgICAgICAgICAg
ICAgICAgICAgX3YyID0gX3AwLl8xOworICAgICAgICAgICAgICAgICAgICBuID0gX3YxOworICAg
ICAgICAgICAgICAgICAgICBsaXN0ID0gX3YyOworICAgICAgICAgICAgICAgICAgICBjb250aW51
ZSBkcm9wOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJExpc3QkbWFwNSA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2
ZV9MaXN0Lm1hcDU7Cit2YXIgX2VsbV9sYW5nJGNvcmUkTGlzdCRtYXA0ID0gX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX0xpc3QubWFwNDsKK3ZhciBfZWxtX2xhbmckY29yZSRMaXN0JG1hcDMgPSBfZWxt
X2xhbmckY29yZSROYXRpdmVfTGlzdC5tYXAzOwordmFyIF9lbG1fbGFuZyRjb3JlJExpc3QkbWFw
MiA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0Lm1hcDI7Cit2YXIgX2VsbV9sYW5nJGNvcmUk
TGlzdCRhbnkgPSBGMigKKyAgICBmdW5jdGlvbiAoaXNPa2F5LCBsaXN0KSB7CisgICAgICAgIGFu
eToKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIHZhciBfcDEgPSBsaXN0Owor
ICAgICAgICAgICAgaWYgKF9wMS5jdG9yID09PSAnW10nKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNP
a2F5KF9wMS5fMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIF92NCA9IGlzT2theSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIF92NSA9IF9wMS5fMTsKKyAgICAgICAgICAgICAgICAg
ICAgaXNPa2F5ID0gX3Y0OworICAgICAgICAgICAgICAgICAgICBsaXN0ID0gX3Y1OworICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZSBhbnk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkTGlzdCRhbGwgPSBG
MigKKyAgICBmdW5jdGlvbiAoaXNPa2F5LCBsaXN0KSB7CisgICAgICAgIHJldHVybiBfZWxtX2xh
bmckY29yZSRCYXNpY3Mkbm90KAorICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAgX2Vs
bV9sYW5nJGNvcmUkTGlzdCRhbnksCisgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9wMikgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkQmFzaWNzJG5vdCgKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlzT2theShfcDIpKTsKKyAgICAgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgICAgIGxpc3QpKTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRMaXN0
JGZvbGRyID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZm9sZHI7Cit2YXIgX2VsbV9sYW5n
JGNvcmUkTGlzdCRmb2xkbCA9IEYzKAorICAgIGZ1bmN0aW9uIChmdW5jLCBhY2MsIGxpc3QpIHsK
KyAgICAgICAgZm9sZGw6CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICB2YXIg
X3AzID0gbGlzdDsKKyAgICAgICAgICAgIGlmIChfcDMuY3RvciA9PT0gJ1tdJykgeworICAgICAg
ICAgICAgICAgIHJldHVybiBhY2M7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIHZhciBfdjcgPSBmdW5jLAorICAgICAgICAgICAgICAgICAgICBfdjggPSBBMihmdW5jLCBf
cDMuXzAsIGFjYyksCisgICAgICAgICAgICAgICAgICAgIF92OSA9IF9wMy5fMTsKKyAgICAgICAg
ICAgICAgICBmdW5jID0gX3Y3OworICAgICAgICAgICAgICAgIGFjYyA9IF92ODsKKyAgICAgICAg
ICAgICAgICBsaXN0ID0gX3Y5OworICAgICAgICAgICAgICAgIGNvbnRpbnVlIGZvbGRsOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkTGlzdCRs
ZW5ndGggPSBmdW5jdGlvbiAoeHMpIHsKKyAgICByZXR1cm4gQTMoCisgICAgICAgIF9lbG1fbGFu
ZyRjb3JlJExpc3QkZm9sZGwsCisgICAgICAgIEYyKAorICAgICAgICAgICAgZnVuY3Rpb24gKF9w
NCwgaSkgeworICAgICAgICAgICAgICAgIHJldHVybiBpICsgMTsKKyAgICAgICAgICAgIH0pLAor
ICAgICAgICAwLAorICAgICAgICB4cyk7Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJExpc3Qkc3Vt
ID0gZnVuY3Rpb24gKG51bWJlcnMpIHsKKyAgICByZXR1cm4gQTMoCisgICAgICAgIF9lbG1fbGFu
ZyRjb3JlJExpc3QkZm9sZGwsCisgICAgICAgIEYyKAorICAgICAgICAgICAgZnVuY3Rpb24gKHgs
IHkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4geCArIHk7CisgICAgICAgICAgICB9KSwKKyAg
ICAgICAgMCwKKyAgICAgICAgbnVtYmVycyk7Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJExpc3Qk
cHJvZHVjdCA9IGZ1bmN0aW9uIChudW1iZXJzKSB7CisgICAgcmV0dXJuIEEzKAorICAgICAgICBf
ZWxtX2xhbmckY29yZSRMaXN0JGZvbGRsLAorICAgICAgICBGMigKKyAgICAgICAgICAgIGZ1bmN0
aW9uICh4LCB5KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHggKiB5OworICAgICAgICAgICAg
fSksCisgICAgICAgIDEsCisgICAgICAgIG51bWJlcnMpOworfTsKK3ZhciBfZWxtX2xhbmckY29y
ZSRMaXN0JG1heGltdW0gPSBmdW5jdGlvbiAobGlzdCkgeworICAgIHZhciBfcDUgPSBsaXN0Owor
ICAgIGlmIChfcDUuY3RvciA9PT0gJzo6JykgeworICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNv
cmUkTWF5YmUkSnVzdCgKKyAgICAgICAgICAgIEEzKF9lbG1fbGFuZyRjb3JlJExpc3QkZm9sZGws
IF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRtYXgsIF9wNS5fMCwgX3A1Ll8xKSk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE1heWJlJE5vdGhpbmc7CisgICAgfQor
fTsKK3ZhciBfZWxtX2xhbmckY29yZSRMaXN0JG1pbmltdW0gPSBmdW5jdGlvbiAobGlzdCkgewor
ICAgIHZhciBfcDYgPSBsaXN0OworICAgIGlmIChfcDYuY3RvciA9PT0gJzo6JykgeworICAgICAg
ICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTWF5YmUkSnVzdCgKKyAgICAgICAgICAgIEEzKF9lbG1f
bGFuZyRjb3JlJExpc3QkZm9sZGwsIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRtaW4sIF9wNi5fMCwg
X3A2Ll8xKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE1h
eWJlJE5vdGhpbmc7CisgICAgfQorfTsKK3ZhciBfZWxtX2xhbmckY29yZSRMaXN0JGluZGV4ZWRN
YXAgPSBGMigKKyAgICBmdW5jdGlvbiAoZiwgeHMpIHsKKyAgICAgICAgcmV0dXJuIEEzKAorICAg
ICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdCRtYXAyLAorICAgICAgICAgICAgZiwKKyAgICAg
ICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LnJhbmdlKAorICAgICAgICAgICAgICAg
IDAsCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdCRsZW5ndGgoeHMpIC0gMSks
CisgICAgICAgICAgICB4cyk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkTGlzdCRtZW1i
ZXIgPSBGMigKKyAgICBmdW5jdGlvbiAoeCwgeHMpIHsKKyAgICAgICAgcmV0dXJuIEEyKAorICAg
ICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdCRhbnksCisgICAgICAgICAgICBmdW5jdGlvbiAo
YSkgeworICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMu
ZXEoYSwgeCk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeHMpOworICAgIH0pOwordmFy
IF9lbG1fbGFuZyRjb3JlJExpc3QkaXNFbXB0eSA9IGZ1bmN0aW9uICh4cykgeworICAgIHZhciBf
cDcgPSB4czsKKyAgICBpZiAoX3A3LmN0b3IgPT09ICdbXScpIHsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK307Cit2YXIg
X2VsbV9sYW5nJGNvcmUkTGlzdCR0YWlsID0gZnVuY3Rpb24gKGxpc3QpIHsKKyAgICB2YXIgX3A4
ID0gbGlzdDsKKyAgICBpZiAoX3A4LmN0b3IgPT09ICc6OicpIHsKKyAgICAgICAgcmV0dXJuIF9l
bG1fbGFuZyRjb3JlJE1heWJlJEp1c3QoX3A4Ll8xKTsKKyAgICB9IGVsc2UgeworICAgICAgICBy
ZXR1cm4gX2VsbV9sYW5nJGNvcmUkTWF5YmUkTm90aGluZzsKKyAgICB9Cit9OwordmFyIF9lbG1f
bGFuZyRjb3JlJExpc3QkaGVhZCA9IGZ1bmN0aW9uIChsaXN0KSB7CisgICAgdmFyIF9wOSA9IGxp
c3Q7CisgICAgaWYgKF9wOS5jdG9yID09PSAnOjonKSB7CisgICAgICAgIHJldHVybiBfZWxtX2xh
bmckY29yZSRNYXliZSRKdXN0KF9wOS5fMCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJu
IF9lbG1fbGFuZyRjb3JlJE1heWJlJE5vdGhpbmc7CisgICAgfQorfTsKK3ZhciBfZWxtX2xhbmck
Y29yZSRMaXN0X29wcyA9IF9lbG1fbGFuZyRjb3JlJExpc3Rfb3BzIHx8IHt9OworX2VsbV9sYW5n
JGNvcmUkTGlzdF9vcHNbJzo6J10gPSBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5jb25zOwor
dmFyIF9lbG1fbGFuZyRjb3JlJExpc3QkbWFwID0gRjIoCisgICAgZnVuY3Rpb24gKGYsIHhzKSB7
CisgICAgICAgIHJldHVybiBBMygKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3QkZm9s
ZHIsCisgICAgICAgICAgICBGMigKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiAoeCwgYWNjKSB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgICAgICAgICAgICAg
IF9lbG1fbGFuZyRjb3JlJExpc3Rfb3BzWyc6OiddLAorICAgICAgICAgICAgICAgICAgICAgICAg
Zih4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjYyk7CisgICAgICAgICAgICAgICAgfSks
CisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAg
ICAgICAgICAgICAgW10pLAorICAgICAgICAgICAgeHMpOworICAgIH0pOwordmFyIF9lbG1fbGFu
ZyRjb3JlJExpc3QkZmlsdGVyID0gRjIoCisgICAgZnVuY3Rpb24gKHByZWQsIHhzKSB7CisgICAg
ICAgIHZhciBjb25kaXRpb25hbENvbnMgPSBGMigKKyAgICAgICAgICAgIGZ1bmN0aW9uICh4LCB4
cyQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcHJlZCh4KSA/IEEyKF9lbG1fbGFuZyRjb3Jl
JExpc3Rfb3BzWyc6OiddLCB4LCB4cyQpIDogeHMkOworICAgICAgICAgICAgfSk7CisgICAgICAg
IHJldHVybiBBMygKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3QkZm9sZHIsCisgICAg
ICAgICAgICBjb25kaXRpb25hbENvbnMsCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRp
dmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgW10pLAorICAgICAgICAgICAgeHMp
OworICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJExpc3QkbWF5YmVDb25zID0gRjMoCisgICAg
ZnVuY3Rpb24gKGYsIG14LCB4cykgeworICAgICAgICB2YXIgX3AxMCA9IGYobXgpOworICAgICAg
ICBpZiAoX3AxMC5jdG9yID09PSAnSnVzdCcpIHsKKyAgICAgICAgICAgIHJldHVybiBBMihfZWxt
X2xhbmckY29yZSRMaXN0X29wc1snOjonXSwgX3AxMC5fMCwgeHMpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgcmV0dXJuIHhzOworICAgICAgICB9CisgICAgfSk7Cit2YXIgX2VsbV9s
YW5nJGNvcmUkTGlzdCRmaWx0ZXJNYXAgPSBGMigKKyAgICBmdW5jdGlvbiAoZiwgeHMpIHsKKyAg
ICAgICAgcmV0dXJuIEEzKAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdCRmb2xkciwK
KyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3QkbWF5YmVDb25zKGYpLAorICAgICAgICAg
ICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAg
IFtdKSwKKyAgICAgICAgICAgIHhzKTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRMaXN0
JHJldmVyc2UgPSBmdW5jdGlvbiAobGlzdCkgeworICAgIHJldHVybiBBMygKKyAgICAgICAgX2Vs
bV9sYW5nJGNvcmUkTGlzdCRmb2xkbCwKKyAgICAgICAgRjIoCisgICAgICAgICAgICBmdW5jdGlv
biAoeCwgeSkgeworICAgICAgICAgICAgICAgIHJldHVybiBBMihfZWxtX2xhbmckY29yZSRMaXN0
X29wc1snOjonXSwgeCwgeSk7CisgICAgICAgICAgICB9KSwKKyAgICAgICAgX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgW10pLAorICAgICAgICBsaXN0
KTsKK307Cit2YXIgX2VsbV9sYW5nJGNvcmUkTGlzdCRzY2FubCA9IEYzKAorICAgIGZ1bmN0aW9u
IChmLCBiLCB4cykgeworICAgICAgICB2YXIgc2NhbjEgPSBGMigKKyAgICAgICAgICAgIGZ1bmN0
aW9uICh4LCBhY2NBY2MpIHsKKyAgICAgICAgICAgICAgICB2YXIgX3AxMSA9IGFjY0FjYzsKKyAg
ICAgICAgICAgICAgICBpZiAoX3AxMS5jdG9yID09PSAnOjonKSB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExp
c3Rfb3BzWyc6OiddLAorICAgICAgICAgICAgICAgICAgICAgICAgQTIoZiwgeCwgX3AxMS5fMCks
CisgICAgICAgICAgICAgICAgICAgICAgICBhY2NBY2MpOworICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlz
dC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgICAgICAgICBbXSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRMaXN0
JHJldmVyc2UoCisgICAgICAgICAgICBBMygKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29y
ZSRMaXN0JGZvbGRsLAorICAgICAgICAgICAgICAgIHNjYW4xLAorICAgICAgICAgICAgICAgIF9l
bG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICAgICAg
W2JdKSwKKyAgICAgICAgICAgICAgICB4cykpOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3Jl
JExpc3QkYXBwZW5kID0gRjIoCisgICAgZnVuY3Rpb24gKHhzLCB5cykgeworICAgICAgICB2YXIg
X3AxMiA9IHlzOworICAgICAgICBpZiAoX3AxMi5jdG9yID09PSAnW10nKSB7CisgICAgICAgICAg
ICByZXR1cm4geHM7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gQTMoCisg
ICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdCRmb2xkciwKKyAgICAgICAgICAgICAg
ICBGMigKKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKHgsIHkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBBMihfZWxtX2xhbmckY29yZSRMaXN0X29wc1snOjonXSwgeCwg
eSk7CisgICAgICAgICAgICAgICAgICAgIH0pLAorICAgICAgICAgICAgICAgIHlzLAorICAgICAg
ICAgICAgICAgIHhzKTsKKyAgICAgICAgfQorICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJExp
c3QkY29uY2F0ID0gZnVuY3Rpb24gKGxpc3RzKSB7CisgICAgcmV0dXJuIEEzKAorICAgICAgICBf
ZWxtX2xhbmckY29yZSRMaXN0JGZvbGRyLAorICAgICAgICBfZWxtX2xhbmckY29yZSRMaXN0JGFw
cGVuZCwKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAg
ICAgICAgICAgW10pLAorICAgICAgICBsaXN0cyk7Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJExp
c3QkY29uY2F0TWFwID0gRjIoCisgICAgZnVuY3Rpb24gKGYsIGxpc3QpIHsKKyAgICAgICAgcmV0
dXJuIF9lbG1fbGFuZyRjb3JlJExpc3QkY29uY2F0KAorICAgICAgICAgICAgQTIoX2VsbV9sYW5n
JGNvcmUkTGlzdCRtYXAsIGYsIGxpc3QpKTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRM
aXN0JHBhcnRpdGlvbiA9IEYyKAorICAgIGZ1bmN0aW9uIChwcmVkLCBsaXN0KSB7CisgICAgICAg
IHZhciBzdGVwID0gRjIoCisgICAgICAgICAgICBmdW5jdGlvbiAoeCwgX3AxMykgeworICAgICAg
ICAgICAgICAgIHZhciBfcDE0ID0gX3AxMzsKKyAgICAgICAgICAgICAgICB2YXIgX3AxNiA9IF9w
MTQuXzA7CisgICAgICAgICAgICAgICAgdmFyIF9wMTUgPSBfcDE0Ll8xOworICAgICAgICAgICAg
ICAgIHJldHVybiBwcmVkKHgpID8geworICAgICAgICAgICAgICAgICAgICBjdG9yOiAnX1R1cGxl
MicsCisgICAgICAgICAgICAgICAgICAgIF8wOiBBMihfZWxtX2xhbmckY29yZSRMaXN0X29wc1sn
OjonXSwgeCwgX3AxNiksCisgICAgICAgICAgICAgICAgICAgIF8xOiBfcDE1CisgICAgICAgICAg
ICAgICAgfSA6IHsKKyAgICAgICAgICAgICAgICAgICAgY3RvcjogJ19UdXBsZTInLAorICAgICAg
ICAgICAgICAgICAgICBfMDogX3AxNiwKKyAgICAgICAgICAgICAgICAgICAgXzE6IEEyKF9lbG1f
bGFuZyRjb3JlJExpc3Rfb3BzWyc6OiddLCB4LCBfcDE1KQorICAgICAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIEEzKAorICAgICAgICAgICAgX2VsbV9sYW5n
JGNvcmUkTGlzdCRmb2xkciwKKyAgICAgICAgICAgIHN0ZXAsCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgY3RvcjogJ19UdXBsZTInLAorICAgICAgICAgICAgICAgIF8wOiBfZWxtX2xh
bmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgICAgIFtdKSwK
KyAgICAgICAgICAgICAgICBfMTogX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5
KAorICAgICAgICAgICAgICAgICAgICBbXSkKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBs
aXN0KTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRMaXN0JHVuemlwID0gZnVuY3Rpb24g
KHBhaXJzKSB7CisgICAgdmFyIHN0ZXAgPSBGMigKKyAgICAgICAgZnVuY3Rpb24gKF9wMTgsIF9w
MTcpIHsKKyAgICAgICAgICAgIHZhciBfcDE5ID0gX3AxODsKKyAgICAgICAgICAgIHZhciBfcDIw
ID0gX3AxNzsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgY3RvcjogJ19U
dXBsZTInLAorICAgICAgICAgICAgICAgIF8wOiBBMihfZWxtX2xhbmckY29yZSRMaXN0X29wc1sn
OjonXSwgX3AxOS5fMCwgX3AyMC5fMCksCisgICAgICAgICAgICAgICAgXzE6IEEyKF9lbG1fbGFu
ZyRjb3JlJExpc3Rfb3BzWyc6OiddLCBfcDE5Ll8xLCBfcDIwLl8xKQorICAgICAgICAgICAgfTsK
KyAgICAgICAgfSk7CisgICAgcmV0dXJuIEEzKAorICAgICAgICBfZWxtX2xhbmckY29yZSRMaXN0
JGZvbGRyLAorICAgICAgICBzdGVwLAorICAgICAgICB7CisgICAgICAgICAgICBjdG9yOiAnX1R1
cGxlMicsCisgICAgICAgICAgICBfMDogX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFy
cmF5KAorICAgICAgICAgICAgICAgIFtdKSwKKyAgICAgICAgICAgIF8xOiBfZWxtX2xhbmckY29y
ZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgW10pCisgICAgICAgIH0s
CisgICAgICAgIHBhaXJzKTsKK307Cit2YXIgX2VsbV9sYW5nJGNvcmUkTGlzdCRpbnRlcnNwZXJz
ZSA9IEYyKAorICAgIGZ1bmN0aW9uIChzZXAsIHhzKSB7CisgICAgICAgIHZhciBfcDIxID0geHM7
CisgICAgICAgIGlmIChfcDIxLmN0b3IgPT09ICdbXScpIHsKKyAgICAgICAgICAgIHJldHVybiBf
ZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgW10p
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIHN0ZXAgPSBGMigKKyAgICAgICAg
ICAgICAgICBmdW5jdGlvbiAoeCwgcmVzdCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
QTIoCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRMaXN0X29wc1snOjon
XSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlcCwKKyAgICAgICAgICAgICAgICAgICAgICAg
IEEyKF9lbG1fbGFuZyRjb3JlJExpc3Rfb3BzWyc6OiddLCB4LCByZXN0KSk7CisgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICB2YXIgc3BlcnNlZCA9IEEzKAorICAgICAgICAgICAgICAg
IF9lbG1fbGFuZyRjb3JlJExpc3QkZm9sZHIsCisgICAgICAgICAgICAgICAgc3RlcCwKKyAgICAg
ICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAg
ICAgICAgICAgICAgIFtdKSwKKyAgICAgICAgICAgICAgICBfcDIxLl8xKTsKKyAgICAgICAgICAg
IHJldHVybiBBMihfZWxtX2xhbmckY29yZSRMaXN0X29wc1snOjonXSwgX3AyMS5fMCwgc3BlcnNl
ZCk7CisgICAgICAgIH0KKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRMaXN0JHRha2VSZXZl
cnNlID0gRjMoCisgICAgZnVuY3Rpb24gKG4sIGxpc3QsIHRha2VuKSB7CisgICAgICAgIHRha2VS
ZXZlcnNlOgorICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgaWYgKF9lbG1fbGFu
ZyRjb3JlJE5hdGl2ZV9VdGlscy5jbXAobiwgMCkgPCAxKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHRha2VuOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgX3Ay
MiA9IGxpc3Q7CisgICAgICAgICAgICAgICAgaWYgKF9wMjIuY3RvciA9PT0gJ1tdJykgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdGFrZW47CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIF92MjMgPSBuIC0gMSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIF92MjQgPSBfcDIyLl8xLAorICAgICAgICAgICAgICAgICAgICAgICAgX3YyNSA9IEEy
KF9lbG1fbGFuZyRjb3JlJExpc3Rfb3BzWyc6OiddLCBfcDIyLl8wLCB0YWtlbik7CisgICAgICAg
ICAgICAgICAgICAgIG4gPSBfdjIzOworICAgICAgICAgICAgICAgICAgICBsaXN0ID0gX3YyNDsK
KyAgICAgICAgICAgICAgICAgICAgdGFrZW4gPSBfdjI1OworICAgICAgICAgICAgICAgICAgICBj
b250aW51ZSB0YWtlUmV2ZXJzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRMaXN0JHRha2VUYWlsUmVjID0g
RjIoCisgICAgZnVuY3Rpb24gKG4sIGxpc3QpIHsKKyAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRj
b3JlJExpc3QkcmV2ZXJzZSgKKyAgICAgICAgICAgIEEzKAorICAgICAgICAgICAgICAgIF9lbG1f
bGFuZyRjb3JlJExpc3QkdGFrZVJldmVyc2UsCisgICAgICAgICAgICAgICAgbiwKKyAgICAgICAg
ICAgICAgICBsaXN0LAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0
LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICAgICAgW10pKSk7CisgICAgfSk7Cit2YXIgX2Vs
bV9sYW5nJGNvcmUkTGlzdCR0YWtlRmFzdCA9IEYzKAorICAgIGZ1bmN0aW9uIChjdHIsIG4sIGxp
c3QpIHsKKyAgICAgICAgaWYgKF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5jbXAobiwgMCkg
PCAxKSB7CisgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJv
bUFycmF5KAorICAgICAgICAgICAgICAgIFtdKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHZhciBfcDIzID0ge2N0b3I6ICdfVHVwbGUyJywgXzA6IG4sIF8xOiBsaXN0fTsKKyAgICAg
ICAgICAgIF92MjZfNToKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBfdjI2XzE6
CisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICBpZiAoX3AyMy5jdG9y
ID09PSAnX1R1cGxlMicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfcDIzLl8xLmN0
b3IgPT09ICdbXScpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGlzdDsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKF9wMjMuXzEuXzEuY3RvciA9PT0gJzo6JykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKF9wMjMuXzApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhayBfdjI2XzE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIDI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9l
bG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgW19wMjMuXzEuXzAsIF9wMjMuXzEuXzEuXzBdKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3AyMy5fMS5fMS5fMS5jdG9yID09PSAnOjon
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBf
ZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbX3AyMy5fMS5fMCwgX3AyMy5fMS5fMS5fMCwg
X3AyMy5fMS5fMS5fMS5fMF0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrIF92MjZfNTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoX3AyMy5fMS5fMS5fMS5jdG9yID09
PSAnOjonKSAmJiAoX3AyMy5fMS5fMS5fMS5fMS5jdG9yID09PSAnOjonKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3AyOCA9IF9wMjMuXzEuXzEu
XzEuXzA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBf
cDI3ID0gX3AyMy5fMS5fMS5fMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIF9wMjYgPSBfcDIzLl8xLl8wOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgX3AyNSA9IF9wMjMuXzEuXzEuXzEuXzEuXzA7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcDI0ID0gX3AyMy5f
MS5fMS5fMS5fMS5fMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIChfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuY21wKGN0ciwgMTAwMCkgPiAw
KSA/IEEyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X2VsbV9sYW5nJGNvcmUkTGlzdF9vcHNbJzo6J10sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfcDI2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdF9vcHNbJzo6J10sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3AyNywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBMigKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Vs
bV9sYW5nJGNvcmUkTGlzdF9vcHNbJzo6J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9wMjgsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUk
TGlzdF9vcHNbJzo6J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfcDI1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQTIoX2VsbV9sYW5nJGNvcmUkTGlzdCR0YWtl
VGFpbFJlYywgbiAtIDQsIF9wMjQpKSkpKSA6IEEyKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdF9vcHNbJzo6J10sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcDI2LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQTIoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNv
cmUkTGlzdF9vcHNbJzo6J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX3AyNywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdF9vcHNbJzo6J10sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9wMjgs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEEyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdF9vcHNbJzo6J10sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcDI1LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQTMo
X2VsbV9sYW5nJGNvcmUkTGlzdCR0YWtlRmFzdCwgY3RyICsgMSwgbiAtIDQsIF9wMjQpKSkpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBfdjI2XzU7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9wMjMuXzAgPT09IDEpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIF92MjZfMTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrIF92MjZfNTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrIF92MjZfNTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0g
d2hpbGUoZmFsc2UpOworICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSROYXRp
dmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgICAgIFtfcDIzLl8xLl8wXSk7Cisg
ICAgICAgICAgICB9IHdoaWxlKGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybiBsaXN0OworICAg
ICAgICB9CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkTGlzdCR0YWtlID0gRjIoCisgICAg
ZnVuY3Rpb24gKG4sIGxpc3QpIHsKKyAgICAgICAgcmV0dXJuIEEzKF9lbG1fbGFuZyRjb3JlJExp
c3QkdGFrZUZhc3QsIDAsIG4sIGxpc3QpOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJExp
c3QkcmVwZWF0SGVscCA9IEYzKAorICAgIGZ1bmN0aW9uIChyZXN1bHQsIG4sIHZhbHVlKSB7Cisg
ICAgICAgIHJlcGVhdEhlbHA6CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBp
ZiAoX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNtcChuLCAwKSA8IDEpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICB2YXIgX3YyNyA9IEEyKF9lbG1fbGFuZyRjb3JlJExpc3Rfb3BzWyc6OiddLCB2YWx1ZSwg
cmVzdWx0KSwKKyAgICAgICAgICAgICAgICAgICAgX3YyOCA9IG4gLSAxLAorICAgICAgICAgICAg
ICAgICAgICBfdjI5ID0gdmFsdWU7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gX3YyNzsKKyAg
ICAgICAgICAgICAgICBuID0gX3YyODsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IF92Mjk7Cisg
ICAgICAgICAgICAgICAgY29udGludWUgcmVwZWF0SGVscDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJExpc3QkcmVwZWF0ID0gRjIoCisgICAg
ZnVuY3Rpb24gKG4sIHZhbHVlKSB7CisgICAgICAgIHJldHVybiBBMygKKyAgICAgICAgICAgIF9l
bG1fbGFuZyRjb3JlJExpc3QkcmVwZWF0SGVscCwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3Jl
JE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICBbXSksCisgICAgICAgICAg
ICBuLAorICAgICAgICAgICAgdmFsdWUpOworICAgIH0pOworCit2YXIgX2VsbV9sYW5nJGNvcmUk
UmVzdWx0JHRvTWF5YmUgPSBmdW5jdGlvbiAocmVzdWx0KSB7CisgICAgdmFyIF9wMCA9IHJlc3Vs
dDsKKyAgICBpZiAoX3AwLmN0b3IgPT09ICdPaycpIHsKKyAgICAgICAgcmV0dXJuIF9lbG1fbGFu
ZyRjb3JlJE1heWJlJEp1c3QoX3AwLl8wKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4g
X2VsbV9sYW5nJGNvcmUkTWF5YmUkTm90aGluZzsKKyAgICB9Cit9OwordmFyIF9lbG1fbGFuZyRj
b3JlJFJlc3VsdCR3aXRoRGVmYXVsdCA9IEYyKAorICAgIGZ1bmN0aW9uIChkZWYsIHJlc3VsdCkg
eworICAgICAgICB2YXIgX3AxID0gcmVzdWx0OworICAgICAgICBpZiAoX3AxLmN0b3IgPT09ICdP
aycpIHsKKyAgICAgICAgICAgIHJldHVybiBfcDEuXzA7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICByZXR1cm4gZGVmOworICAgICAgICB9CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNv
cmUkUmVzdWx0JEVyciA9IGZ1bmN0aW9uIChhKSB7CisgICAgcmV0dXJuIHtjdG9yOiAnRXJyJywg
XzA6IGF9OworfTsKK3ZhciBfZWxtX2xhbmckY29yZSRSZXN1bHQkYW5kVGhlbiA9IEYyKAorICAg
IGZ1bmN0aW9uIChyZXN1bHQsIGNhbGxiYWNrKSB7CisgICAgICAgIHZhciBfcDIgPSByZXN1bHQ7
CisgICAgICAgIGlmIChfcDIuY3RvciA9PT0gJ09rJykgeworICAgICAgICAgICAgcmV0dXJuIGNh
bGxiYWNrKF9wMi5fMCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gX2Vs
bV9sYW5nJGNvcmUkUmVzdWx0JEVycihfcDIuXzApOworICAgICAgICB9CisgICAgfSk7Cit2YXIg
X2VsbV9sYW5nJGNvcmUkUmVzdWx0JE9rID0gZnVuY3Rpb24gKGEpIHsKKyAgICByZXR1cm4ge2N0
b3I6ICdPaycsIF8wOiBhfTsKK307Cit2YXIgX2VsbV9sYW5nJGNvcmUkUmVzdWx0JG1hcCA9IEYy
KAorICAgIGZ1bmN0aW9uIChmdW5jLCByYSkgeworICAgICAgICB2YXIgX3AzID0gcmE7CisgICAg
ICAgIGlmIChfcDMuY3RvciA9PT0gJ09rJykgeworICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFu
ZyRjb3JlJFJlc3VsdCRPaygKKyAgICAgICAgICAgICAgICBmdW5jKF9wMy5fMCkpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRFcnIo
X3AzLl8wKTsKKyAgICAgICAgfQorICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRt
YXAyID0gRjMoCisgICAgZnVuY3Rpb24gKGZ1bmMsIHJhLCByYikgeworICAgICAgICB2YXIgX3A0
ID0ge2N0b3I6ICdfVHVwbGUyJywgXzA6IHJhLCBfMTogcmJ9OworICAgICAgICBpZiAoX3A0Ll8w
LmN0b3IgPT09ICdPaycpIHsKKyAgICAgICAgICAgIGlmIChfcDQuXzEuY3RvciA9PT0gJ09rJykg
eworICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRSZXN1bHQkT2soCisgICAg
ICAgICAgICAgICAgICAgIEEyKGZ1bmMsIF9wNC5fMC5fMCwgX3A0Ll8xLl8wKSk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRSZXN1
bHQkRXJyKF9wNC5fMS5fMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkUmVzdWx0JEVycihfcDQuXzAuXzApOworICAg
ICAgICB9CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkUmVzdWx0JG1hcDMgPSBGNCgKKyAg
ICBmdW5jdGlvbiAoZnVuYywgcmEsIHJiLCByYykgeworICAgICAgICB2YXIgX3A1ID0ge2N0b3I6
ICdfVHVwbGUzJywgXzA6IHJhLCBfMTogcmIsIF8yOiByY307CisgICAgICAgIGlmIChfcDUuXzAu
Y3RvciA9PT0gJ09rJykgeworICAgICAgICAgICAgaWYgKF9wNS5fMS5jdG9yID09PSAnT2snKSB7
CisgICAgICAgICAgICAgICAgaWYgKF9wNS5fMi5jdG9yID09PSAnT2snKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRSZXN1bHQkT2soCisgICAgICAgICAgICAg
ICAgICAgICAgICBBMyhmdW5jLCBfcDUuXzAuXzAsIF9wNS5fMS5fMCwgX3A1Ll8yLl8wKSk7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1f
bGFuZyRjb3JlJFJlc3VsdCRFcnIoX3A1Ll8yLl8wKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRS
ZXN1bHQkRXJyKF9wNS5fMS5fMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkUmVzdWx0JEVycihfcDUuXzAuXzApOwor
ICAgICAgICB9CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkUmVzdWx0JG1hcDQgPSBGNSgK
KyAgICBmdW5jdGlvbiAoZnVuYywgcmEsIHJiLCByYywgcmQpIHsKKyAgICAgICAgdmFyIF9wNiA9
IHtjdG9yOiAnX1R1cGxlNCcsIF8wOiByYSwgXzE6IHJiLCBfMjogcmMsIF8zOiByZH07CisgICAg
ICAgIGlmIChfcDYuXzAuY3RvciA9PT0gJ09rJykgeworICAgICAgICAgICAgaWYgKF9wNi5fMS5j
dG9yID09PSAnT2snKSB7CisgICAgICAgICAgICAgICAgaWYgKF9wNi5fMi5jdG9yID09PSAnT2sn
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChfcDYuXzMuY3RvciA9PT0gJ09rJykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRPaygKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBNChmdW5jLCBfcDYuXzAuXzAsIF9wNi5fMS5fMCwg
X3A2Ll8yLl8wLCBfcDYuXzMuXzApKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRSZXN1bHQkRXJyKF9w
Ni5fMy5fMCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkUmVzdWx0JEVycihf
cDYuXzIuXzApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRFcnIoX3A2Ll8xLl8wKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBfZWxt
X2xhbmckY29yZSRSZXN1bHQkRXJyKF9wNi5fMC5fMCk7CisgICAgICAgIH0KKyAgICB9KTsKK3Zh
ciBfZWxtX2xhbmckY29yZSRSZXN1bHQkbWFwNSA9IEY2KAorICAgIGZ1bmN0aW9uIChmdW5jLCBy
YSwgcmIsIHJjLCByZCwgcmUpIHsKKyAgICAgICAgdmFyIF9wNyA9IHtjdG9yOiAnX1R1cGxlNScs
IF8wOiByYSwgXzE6IHJiLCBfMjogcmMsIF8zOiByZCwgXzQ6IHJlfTsKKyAgICAgICAgaWYgKF9w
Ny5fMC5jdG9yID09PSAnT2snKSB7CisgICAgICAgICAgICBpZiAoX3A3Ll8xLmN0b3IgPT09ICdP
aycpIHsKKyAgICAgICAgICAgICAgICBpZiAoX3A3Ll8yLmN0b3IgPT09ICdPaycpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKF9wNy5fMy5jdG9yID09PSAnT2snKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoX3A3Ll80LmN0b3IgPT09ICdPaycpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkUmVzdWx0JE9rKAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBNShmdW5jLCBfcDcuXzAuXzAsIF9wNy5fMS5fMCwgX3A3Ll8y
Ll8wLCBfcDcuXzMuXzAsIF9wNy5fNC5fMCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUk
UmVzdWx0JEVycihfcDcuXzQuXzApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9l
bG1fbGFuZyRjb3JlJFJlc3VsdCRFcnIoX3A3Ll8zLl8wKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBf
ZWxtX2xhbmckY29yZSRSZXN1bHQkRXJyKF9wNy5fMi5fMCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNv
cmUkUmVzdWx0JEVycihfcDcuXzEuXzApOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRFcnIoX3A3Ll8wLl8w
KTsKKyAgICAgICAgfQorICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRmb3JtYXRF
cnJvciA9IEYyKAorICAgIGZ1bmN0aW9uIChmLCByZXN1bHQpIHsKKyAgICAgICAgdmFyIF9wOCA9
IHJlc3VsdDsKKyAgICAgICAgaWYgKF9wOC5jdG9yID09PSAnT2snKSB7CisgICAgICAgICAgICBy
ZXR1cm4gX2VsbV9sYW5nJGNvcmUkUmVzdWx0JE9rKF9wOC5fMCk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkUmVzdWx0JEVycigKKyAgICAgICAg
ICAgICAgICBmKF9wOC5fMCkpOworICAgICAgICB9CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNv
cmUkUmVzdWx0JGZyb21NYXliZSA9IEYyKAorICAgIGZ1bmN0aW9uIChlcnIsIG1heWJlKSB7Cisg
ICAgICAgIHZhciBfcDkgPSBtYXliZTsKKyAgICAgICAgaWYgKF9wOS5jdG9yID09PSAnSnVzdCcp
IHsKKyAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRSZXN1bHQkT2soX3A5Ll8wKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRSZXN1
bHQkRXJyKGVycik7CisgICAgICAgIH0KKyAgICB9KTsKKworLy9pbXBvcnQgLy8KKwordmFyIF9l
bG1fbGFuZyRjb3JlJE5hdGl2ZV9QbGF0Zm9ybSA9IGZ1bmN0aW9uKCkgeworCisKKy8vIFBST0dS
QU1TCisKK2Z1bmN0aW9uIGFkZFB1YmxpY01vZHVsZShvYmplY3QsIG5hbWUsIG1haW4pCit7Cisg
ICAgdmFyIGluaXQgPSBtYWluID8gbWFrZUVtYmVkKG5hbWUsIG1haW4pIDogbWFpbklzVW5kZWZp
bmVkKG5hbWUpOworCisgICAgb2JqZWN0Wyd3b3JrZXInXSA9IGZ1bmN0aW9uIHdvcmtlcihmbGFn
cykKKyAgICB7CisgICAgICAgIHJldHVybiBpbml0KHVuZGVmaW5lZCwgZmxhZ3MsIGZhbHNlKTsK
KyAgICB9CisKKyAgICBvYmplY3RbJ2VtYmVkJ10gPSBmdW5jdGlvbiBlbWJlZChkb21Ob2RlLCBm
bGFncykKKyAgICB7CisgICAgICAgIHJldHVybiBpbml0KGRvbU5vZGUsIGZsYWdzLCB0cnVlKTsK
KyAgICB9CisKKyAgICBvYmplY3RbJ2Z1bGxzY3JlZW4nXSA9IGZ1bmN0aW9uIGZ1bGxzY3JlZW4o
ZmxhZ3MpCisgICAgeworICAgICAgICByZXR1cm4gaW5pdChkb2N1bWVudC5ib2R5LCBmbGFncywg
dHJ1ZSk7CisgICAgfTsKK30KKworCisvLyBQUk9HUkFNIEZBSUwKKworZnVuY3Rpb24gbWFpbklz
VW5kZWZpbmVkKG5hbWUpCit7CisgICAgcmV0dXJuIGZ1bmN0aW9uKGRvbU5vZGUpCisgICAgewor
ICAgICAgICB2YXIgbWVzc2FnZSA9ICdDYW5ub3QgaW5pdGlhbGl6ZSBtb2R1bGUgYCcgKyBuYW1l
ICsKKyAgICAgICAgICAgICdgIGJlY2F1c2UgaXQgaGFzIG5vIGBtYWluYCB2YWx1ZSFcbldoYXQg
c2hvdWxkIEkgc2hvdyBvbiBzY3JlZW4/JzsKKyAgICAgICAgZG9tTm9kZS5pbm5lckhUTUwgPSBl
cnJvckh0bWwobWVzc2FnZSk7CisgICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTsKKyAg
ICB9OworfQorCitmdW5jdGlvbiBlcnJvckh0bWwobWVzc2FnZSkKK3sKKyAgICByZXR1cm4gJzxk
aXYgc3R5bGU9InBhZGRpbmctbGVmdDoxZW07Ij4nCisgICAgICAgICsgJzxoMiBzdHlsZT0iZm9u
dC13ZWlnaHQ6bm9ybWFsOyI+PGI+T29wcyE8L2I+IFNvbWV0aGluZyB3ZW50IHdyb25nIHdoZW4g
c3RhcnRpbmcgeW91ciBFbG0gcHJvZ3JhbS48L2gyPicKKyAgICAgICAgKyAnPHByZSBzdHlsZT0i
cGFkZGluZy1sZWZ0OjFlbTsiPicgKyBtZXNzYWdlICsgJzwvcHJlPicKKyAgICAgICAgKyAnPC9k
aXY+JzsKK30KKworCisvLyBQUk9HUkFNIFNVQ0NFU1MKKworZnVuY3Rpb24gbWFrZUVtYmVkKG1v
ZHVsZU5hbWUsIG1haW4pCit7CisgICAgcmV0dXJuIGZ1bmN0aW9uIGVtYmVkKHJvb3REb21Ob2Rl
LCBmbGFncywgd2l0aFJlbmRlcmVyKQorICAgIHsKKyAgICAgICAgdHJ5CisgICAgICAgIHsKKyAg
ICAgICAgICAgIHZhciBwcm9ncmFtID0gbWFpblRvUHJvZ3JhbShtb2R1bGVOYW1lLCBtYWluKTsK
KyAgICAgICAgICAgIGlmICghd2l0aFJlbmRlcmVyKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHByb2dyYW0ucmVuZGVyZXIgPSBkdW1teVJlbmRlcmVyOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIG1ha2VFbWJlZEhlbHAobW9kdWxlTmFtZSwgcHJvZ3JhbSwgcm9v
dERvbU5vZGUsIGZsYWdzKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoZSkKKyAgICAgICAg
eworICAgICAgICAgICAgcm9vdERvbU5vZGUuaW5uZXJIVE1MID0gZXJyb3JIdG1sKGUubWVzc2Fn
ZSk7CisgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICB9CisgICAgfTsKK30KKworZnVuY3Rp
b24gZHVtbXlSZW5kZXJlcigpCit7CisgICAgcmV0dXJuIHsgdXBkYXRlOiBmdW5jdGlvbigpIHt9
IH07Cit9CisKKworLy8gTUFJTiBUTyBQUk9HUkFNCisKK2Z1bmN0aW9uIG1haW5Ub1Byb2dyYW0o
bW9kdWxlTmFtZSwgd3JhcHBlZE1haW4pCit7CisgICAgdmFyIG1haW4gPSB3cmFwcGVkTWFpbi5t
YWluOworCisgICAgaWYgKHR5cGVvZiBtYWluLmluaXQgPT09ICd1bmRlZmluZWQnKQorICAgIHsK
KyAgICAgICAgdmFyIGVtcHR5QmFnID0gYmF0Y2goX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3Qu
TmlsKTsKKyAgICAgICAgdmFyIG5vQ2hhbmdlID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxz
LlR1cGxlMigKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5UdXBsZTAs
CisgICAgICAgICAgICBlbXB0eUJhZworICAgICAgICApOworCisgICAgICAgIHJldHVybiBfZWxt
X2xhbmckdmlydHVhbF9kb20kVmlydHVhbERvbSRwcm9ncmFtV2l0aEZsYWdzKHsKKyAgICAgICAg
ICAgIGluaXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbm9DaGFuZ2U7IH0sCisgICAgICAgICAgICB2
aWV3OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1haW47IH0sCisgICAgICAgICAgICB1cGRhdGU6IEYy
KGZ1bmN0aW9uKCkgeyByZXR1cm4gbm9DaGFuZ2U7IH0pLAorICAgICAgICAgICAgc3Vic2NyaXB0
aW9uczogZnVuY3Rpb24gKCkgeyByZXR1cm4gZW1wdHlCYWc7IH0KKyAgICAgICAgfSk7CisgICAg
fQorCisgICAgdmFyIGZsYWdzID0gd3JhcHBlZE1haW4uZmxhZ3M7CisgICAgdmFyIGluaXQgPSBm
bGFncworICAgICAgICA/IGluaXRXaXRoRmxhZ3MobW9kdWxlTmFtZSwgbWFpbi5pbml0LCBmbGFn
cykKKyAgICAgICAgOiBpbml0V2l0aG91dEZsYWdzKG1vZHVsZU5hbWUsIG1haW4uaW5pdCk7CisK
KyAgICByZXR1cm4gX2VsbV9sYW5nJHZpcnR1YWxfZG9tJFZpcnR1YWxEb20kcHJvZ3JhbVdpdGhG
bGFncyh7CisgICAgICAgIGluaXQ6IGluaXQsCisgICAgICAgIHZpZXc6IG1haW4udmlldywKKyAg
ICAgICAgdXBkYXRlOiBtYWluLnVwZGF0ZSwKKyAgICAgICAgc3Vic2NyaXB0aW9uczogbWFpbi5z
dWJzY3JpcHRpb25zLAorICAgIH0pOworfQorCitmdW5jdGlvbiBpbml0V2l0aG91dEZsYWdzKG1v
ZHVsZU5hbWUsIHJlYWxJbml0KQoreworICAgIHJldHVybiBmdW5jdGlvbiBpbml0KGZsYWdzKQor
ICAgIHsKKyAgICAgICAgaWYgKHR5cGVvZiBmbGFncyAhPT0gJ3VuZGVmaW5lZCcpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigKKyAgICAgICAgICAgICAgICAnWW91IGFy
ZSBnaXZpbmcgbW9kdWxlIGAnICsgbW9kdWxlTmFtZSArICdgIGFuIGFyZ3VtZW50IGluIEphdmFT
Y3JpcHQuXG4nCisgICAgICAgICAgICAgICAgKyAnVGhpcyBtb2R1bGUgZG9lcyBub3QgdGFrZSBh
cmd1bWVudHMgdGhvdWdoISBZb3UgcHJvYmFibHkgbmVlZCB0byBjaGFuZ2UgdGhlXG4nCisgICAg
ICAgICAgICAgICAgKyAnaW5pdGlhbGl6YXRpb24gY29kZSB0byBzb21ldGhpbmcgbGlrZSBgRWxt
LicgKyBtb2R1bGVOYW1lICsgJy5mdWxsc2NyZWVuKClgJworICAgICAgICAgICAgKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gcmVhbEluaXQoKTsKKyAgICB9OworfQorCitmdW5jdGlvbiBp
bml0V2l0aEZsYWdzKG1vZHVsZU5hbWUsIHJlYWxJbml0LCBmbGFnRGVjb2RlcikKK3sKKyAgICBy
ZXR1cm4gZnVuY3Rpb24gaW5pdChmbGFncykKKyAgICB7CisgICAgICAgIHZhciByZXN1bHQgPSBB
MihfZWxtX2xhbmckY29yZSROYXRpdmVfSnNvbi5ydW4sIGZsYWdEZWNvZGVyLCBmbGFncyk7Cisg
ICAgICAgIGlmIChyZXN1bHQuY3RvciA9PT0gJ0VycicpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHRocm93IG5ldyBFcnJvcigKKyAgICAgICAgICAgICAgICAnWW91IGFyZSB0cnlpbmcgdG8gaW5p
dGlhbGl6ZSBtb2R1bGUgYCcgKyBtb2R1bGVOYW1lICsgJ2Agd2l0aCBhbiB1bmV4cGVjdGVkIGFy
Z3VtZW50LlxuJworICAgICAgICAgICAgICAgICsgJ1doZW4gdHJ5aW5nIHRvIGNvbnZlcnQgaXQg
dG8gYSB1c2FibGUgRWxtIHZhbHVlLCBJIHJ1biBpbnRvIHRoaXMgcHJvYmxlbTpcblxuJworICAg
ICAgICAgICAgICAgICsgcmVzdWx0Ll8wCisgICAgICAgICAgICApOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiByZWFsSW5pdChyZXN1bHQuXzApOworICAgIH07Cit9CisKKworLy8gU0VUVVAg
UlVOVElNRSBTWVNURU0KKworZnVuY3Rpb24gbWFrZUVtYmVkSGVscChtb2R1bGVOYW1lLCBwcm9n
cmFtLCByb290RG9tTm9kZSwgZmxhZ3MpCit7CisgICAgdmFyIGluaXQgPSBwcm9ncmFtLmluaXQ7
CisgICAgdmFyIHVwZGF0ZSA9IHByb2dyYW0udXBkYXRlOworICAgIHZhciBzdWJzY3JpcHRpb25z
ID0gcHJvZ3JhbS5zdWJzY3JpcHRpb25zOworICAgIHZhciB2aWV3ID0gcHJvZ3JhbS52aWV3Owor
ICAgIHZhciBtYWtlUmVuZGVyZXIgPSBwcm9ncmFtLnJlbmRlcmVyOworCisgICAgLy8gYW1iaWVu
dCBzdGF0ZQorICAgIHZhciBtYW5hZ2VycyA9IHt9OworICAgIHZhciByZW5kZXJlcjsKKworICAg
IC8vIGluaXQgYW5kIHVwZGF0ZSBzdGF0ZSBpbiBtYWluIHByb2Nlc3MKKyAgICB2YXIgaW5pdEFw
cCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TY2hlZHVsZXIubmF0aXZlQmluZGluZyhmdW5jdGlv
bihjYWxsYmFjaykgeworICAgICAgICB2YXIgcmVzdWx0cyA9IGluaXQoZmxhZ3MpOworICAgICAg
ICB2YXIgbW9kZWwgPSByZXN1bHRzLl8wOworICAgICAgICByZW5kZXJlciA9IG1ha2VSZW5kZXJl
cihyb290RG9tTm9kZSwgZW5xdWV1ZSwgdmlldyhtb2RlbCkpOworICAgICAgICB2YXIgY21kcyA9
IHJlc3VsdHMuXzE7CisgICAgICAgIHZhciBzdWJzID0gc3Vic2NyaXB0aW9ucyhtb2RlbCk7Cisg
ICAgICAgIGRpc3BhdGNoRWZmZWN0cyhtYW5hZ2VycywgY21kcywgc3Vicyk7CisgICAgICAgIGNh
bGxiYWNrKF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TY2hlZHVsZXIuc3VjY2VlZChtb2RlbCkpOwor
ICAgIH0pOworCisgICAgZnVuY3Rpb24gb25NZXNzYWdlKG1zZywgbW9kZWwpCisgICAgeworICAg
ICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVkdWxlci5uYXRpdmVCaW5kaW5n
KGZ1bmN0aW9uKGNhbGxiYWNrKSB7CisgICAgICAgICAgICB2YXIgcmVzdWx0cyA9IEEyKHVwZGF0
ZSwgbXNnLCBtb2RlbCk7CisgICAgICAgICAgICBtb2RlbCA9IHJlc3VsdHMuXzA7CisgICAgICAg
ICAgICByZW5kZXJlci51cGRhdGUodmlldyhtb2RlbCkpOworICAgICAgICAgICAgdmFyIGNtZHMg
PSByZXN1bHRzLl8xOworICAgICAgICAgICAgdmFyIHN1YnMgPSBzdWJzY3JpcHRpb25zKG1vZGVs
KTsKKyAgICAgICAgICAgIGRpc3BhdGNoRWZmZWN0cyhtYW5hZ2VycywgY21kcywgc3Vicyk7Cisg
ICAgICAgICAgICBjYWxsYmFjayhfZWxtX2xhbmckY29yZSROYXRpdmVfU2NoZWR1bGVyLnN1Y2Nl
ZWQobW9kZWwpKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgdmFyIG1haW5Qcm9jZXNzID0g
c3Bhd25Mb29wKGluaXRBcHAsIG9uTWVzc2FnZSk7CisKKyAgICBmdW5jdGlvbiBlbnF1ZXVlKG1z
ZykKKyAgICB7CisgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TY2hlZHVsZXIucmF3U2Vu
ZChtYWluUHJvY2VzcywgbXNnKTsKKyAgICB9CisKKyAgICB2YXIgcG9ydHMgPSBzZXR1cEVmZmVj
dHMobWFuYWdlcnMsIGVucXVldWUpOworCisgICAgcmV0dXJuIHBvcnRzID8geyBwb3J0czogcG9y
dHMgfSA6IHt9OworfQorCisKKy8vIEVGRkVDVCBNQU5BR0VSUworCit2YXIgZWZmZWN0TWFuYWdl
cnMgPSB7fTsKKworZnVuY3Rpb24gc2V0dXBFZmZlY3RzKG1hbmFnZXJzLCBjYWxsYmFjaykKK3sK
KyAgICB2YXIgcG9ydHM7CisKKyAgICAvLyBzZXR1cCBhbGwgbmVjZXNzYXJ5IGVmZmVjdCBtYW5h
Z2VycworICAgIGZvciAodmFyIGtleSBpbiBlZmZlY3RNYW5hZ2VycykKKyAgICB7CisgICAgICAg
IHZhciBtYW5hZ2VyID0gZWZmZWN0TWFuYWdlcnNba2V5XTsKKworICAgICAgICBpZiAobWFuYWdl
ci5pc0ZvcmVpZ24pCisgICAgICAgIHsKKyAgICAgICAgICAgIHBvcnRzID0gcG9ydHMgfHwge307
CisgICAgICAgICAgICBwb3J0c1trZXldID0gbWFuYWdlci50YWcgPT09ICdjbWQnCisgICAgICAg
ICAgICAgICAgPyBzZXR1cE91dGdvaW5nUG9ydChrZXkpCisgICAgICAgICAgICAgICAgOiBzZXR1
cEluY29taW5nUG9ydChrZXksIGNhbGxiYWNrKTsKKyAgICAgICAgfQorCisgICAgICAgIG1hbmFn
ZXJzW2tleV0gPSBtYWtlTWFuYWdlcihtYW5hZ2VyLCBjYWxsYmFjayk7CisgICAgfQorCisgICAg
cmV0dXJuIHBvcnRzOworfQorCitmdW5jdGlvbiBtYWtlTWFuYWdlcihpbmZvLCBjYWxsYmFjaykK
K3sKKyAgICB2YXIgcm91dGVyID0geworICAgICAgICBtYWluOiBjYWxsYmFjaywKKyAgICAgICAg
c2VsZjogdW5kZWZpbmVkCisgICAgfTsKKworICAgIHZhciB0YWcgPSBpbmZvLnRhZzsKKyAgICB2
YXIgb25FZmZlY3RzID0gaW5mby5vbkVmZmVjdHM7CisgICAgdmFyIG9uU2VsZk1zZyA9IGluZm8u
b25TZWxmTXNnOworCisgICAgZnVuY3Rpb24gb25NZXNzYWdlKG1zZywgc3RhdGUpCisgICAgewor
ICAgICAgICBpZiAobXNnLmN0b3IgPT09ICdzZWxmJykKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIEEzKG9uU2VsZk1zZywgcm91dGVyLCBtc2cuXzAsIHN0YXRlKTsKKyAgICAgICAgfQor
CisgICAgICAgIHZhciBmeCA9IG1zZy5fMDsKKyAgICAgICAgc3dpdGNoICh0YWcpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGNhc2UgJ2NtZCc6CisgICAgICAgICAgICAgICAgcmV0dXJuIEEzKG9u
RWZmZWN0cywgcm91dGVyLCBmeC5jbWRzLCBzdGF0ZSk7CisKKyAgICAgICAgICAgIGNhc2UgJ3N1
Yic6CisgICAgICAgICAgICAgICAgcmV0dXJuIEEzKG9uRWZmZWN0cywgcm91dGVyLCBmeC5zdWJz
LCBzdGF0ZSk7CisKKyAgICAgICAgICAgIGNhc2UgJ2Z4JzoKKyAgICAgICAgICAgICAgICByZXR1
cm4gQTQob25FZmZlY3RzLCByb3V0ZXIsIGZ4LmNtZHMsIGZ4LnN1YnMsIHN0YXRlKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHZhciBwcm9jZXNzID0gc3Bhd25Mb29wKGluZm8uaW5pdCwgb25N
ZXNzYWdlKTsKKyAgICByb3V0ZXIuc2VsZiA9IHByb2Nlc3M7CisgICAgcmV0dXJuIHByb2Nlc3M7
Cit9CisKK2Z1bmN0aW9uIHNlbmRUb0FwcChyb3V0ZXIsIG1zZykKK3sKKyAgICByZXR1cm4gX2Vs
bV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVkdWxlci5uYXRpdmVCaW5kaW5nKGZ1bmN0aW9uKGNhbGxi
YWNrKQorICAgIHsKKyAgICAgICAgcm91dGVyLm1haW4obXNnKTsKKyAgICAgICAgY2FsbGJhY2so
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVkdWxlci5zdWNjZWVkKF9lbG1fbGFuZyRjb3JlJE5h
dGl2ZV9VdGlscy5UdXBsZTApKTsKKyAgICB9KTsKK30KKworZnVuY3Rpb24gc2VuZFRvU2VsZihy
b3V0ZXIsIG1zZykKK3sKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVk
dWxlci5zZW5kLCByb3V0ZXIuc2VsZiwgeworICAgICAgICBjdG9yOiAnc2VsZicsCisgICAgICAg
IF8wOiBtc2cKKyAgICB9KTsKK30KKworCisvLyBIRUxQRVIgZm9yIFNUQVRFRlVMIExPT1BTCisK
K2Z1bmN0aW9uIHNwYXduTG9vcChpbml0LCBvbk1lc3NhZ2UpCit7CisgICAgdmFyIGFuZFRoZW4g
PSBfZWxtX2xhbmckY29yZSROYXRpdmVfU2NoZWR1bGVyLmFuZFRoZW47CisKKyAgICBmdW5jdGlv
biBsb29wKHN0YXRlKQorICAgIHsKKyAgICAgICAgdmFyIGhhbmRsZU1zZyA9IF9lbG1fbGFuZyRj
b3JlJE5hdGl2ZV9TY2hlZHVsZXIucmVjZWl2ZShmdW5jdGlvbihtc2cpIHsKKyAgICAgICAgICAg
IHJldHVybiBvbk1lc3NhZ2UobXNnLCBzdGF0ZSk7CisgICAgICAgIH0pOworICAgICAgICByZXR1
cm4gQTIoYW5kVGhlbiwgaGFuZGxlTXNnLCBsb29wKTsKKyAgICB9CisKKyAgICB2YXIgdGFzayA9
IEEyKGFuZFRoZW4sIGluaXQsIGxvb3ApOworCisgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5h
dGl2ZV9TY2hlZHVsZXIucmF3U3Bhd24odGFzayk7Cit9CisKKworLy8gQkFHUworCitmdW5jdGlv
biBsZWFmKGhvbWUpCit7CisgICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHR5cGU6ICdsZWFmJywKKyAgICAgICAgICAgIGhvbWU6
IGhvbWUsCisgICAgICAgICAgICB2YWx1ZTogdmFsdWUKKyAgICAgICAgfTsKKyAgICB9OworfQor
CitmdW5jdGlvbiBiYXRjaChsaXN0KQoreworICAgIHJldHVybiB7CisgICAgICAgIHR5cGU6ICdu
b2RlJywKKyAgICAgICAgYnJhbmNoZXM6IGxpc3QKKyAgICB9OworfQorCitmdW5jdGlvbiBtYXAo
dGFnZ2VyLCBiYWcpCit7CisgICAgcmV0dXJuIHsKKyAgICAgICAgdHlwZTogJ21hcCcsCisgICAg
ICAgIHRhZ2dlcjogdGFnZ2VyLAorICAgICAgICB0cmVlOiBiYWcKKyAgICB9Cit9CisKKworLy8g
UElQRSBCQUdTIElOVE8gRUZGRUNUIE1BTkFHRVJTCisKK2Z1bmN0aW9uIGRpc3BhdGNoRWZmZWN0
cyhtYW5hZ2VycywgY21kQmFnLCBzdWJCYWcpCit7CisgICAgdmFyIGVmZmVjdHNEaWN0ID0ge307
CisgICAgZ2F0aGVyRWZmZWN0cyh0cnVlLCBjbWRCYWcsIGVmZmVjdHNEaWN0LCBudWxsKTsKKyAg
ICBnYXRoZXJFZmZlY3RzKGZhbHNlLCBzdWJCYWcsIGVmZmVjdHNEaWN0LCBudWxsKTsKKworICAg
IGZvciAodmFyIGhvbWUgaW4gbWFuYWdlcnMpCisgICAgeworICAgICAgICB2YXIgZnggPSBob21l
IGluIGVmZmVjdHNEaWN0CisgICAgICAgICAgICA/IGVmZmVjdHNEaWN0W2hvbWVdCisgICAgICAg
ICAgICA6IHsKKyAgICAgICAgICAgICAgICBjbWRzOiBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlz
dC5OaWwsCisgICAgICAgICAgICAgICAgc3ViczogX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3Qu
TmlsCisgICAgICAgICAgICB9OworCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TY2hl
ZHVsZXIucmF3U2VuZChtYW5hZ2Vyc1tob21lXSwgeyBjdG9yOiAnZngnLCBfMDogZnggfSk7Cisg
ICAgfQorfQorCitmdW5jdGlvbiBnYXRoZXJFZmZlY3RzKGlzQ21kLCBiYWcsIGVmZmVjdHNEaWN0
LCB0YWdnZXJzKQoreworICAgIHN3aXRjaCAoYmFnLnR5cGUpCisgICAgeworICAgICAgICBjYXNl
ICdsZWFmJzoKKyAgICAgICAgICAgIHZhciBob21lID0gYmFnLmhvbWU7CisgICAgICAgICAgICB2
YXIgZWZmZWN0ID0gdG9FZmZlY3QoaXNDbWQsIGhvbWUsIHRhZ2dlcnMsIGJhZy52YWx1ZSk7Cisg
ICAgICAgICAgICBlZmZlY3RzRGljdFtob21lXSA9IGluc2VydChpc0NtZCwgZWZmZWN0LCBlZmZl
Y3RzRGljdFtob21lXSk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSAnbm9k
ZSc6CisgICAgICAgICAgICB2YXIgbGlzdCA9IGJhZy5icmFuY2hlczsKKyAgICAgICAgICAgIHdo
aWxlIChsaXN0LmN0b3IgIT09ICdbXScpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Z2F0aGVyRWZmZWN0cyhpc0NtZCwgbGlzdC5fMCwgZWZmZWN0c0RpY3QsIHRhZ2dlcnMpOworICAg
ICAgICAgICAgICAgIGxpc3QgPSBsaXN0Ll8xOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGNhc2UgJ21hcCc6CisgICAgICAgICAgICBnYXRoZXJFZmZlY3Rz
KGlzQ21kLCBiYWcudHJlZSwgZWZmZWN0c0RpY3QsIHsKKyAgICAgICAgICAgICAgICB0YWdnZXI6
IGJhZy50YWdnZXIsCisgICAgICAgICAgICAgICAgcmVzdDogdGFnZ2VycworICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgfQorfQorCitmdW5jdGlvbiB0b0VmZmVjdChp
c0NtZCwgaG9tZSwgdGFnZ2VycywgdmFsdWUpCit7CisgICAgZnVuY3Rpb24gYXBwbHlUYWdnZXJz
KHgpCisgICAgeworICAgICAgICB2YXIgdGVtcCA9IHRhZ2dlcnM7CisgICAgICAgIHdoaWxlICh0
ZW1wKQorICAgICAgICB7CisgICAgICAgICAgICB4ID0gdGVtcC50YWdnZXIoeCk7CisgICAgICAg
ICAgICB0ZW1wID0gdGVtcC5yZXN0OworICAgICAgICB9CisgICAgICAgIHJldHVybiB4OworICAg
IH0KKworICAgIHZhciBtYXAgPSBpc0NtZAorICAgICAgICA/IGVmZmVjdE1hbmFnZXJzW2hvbWVd
LmNtZE1hcAorICAgICAgICA6IGVmZmVjdE1hbmFnZXJzW2hvbWVdLnN1Yk1hcDsKKworICAgIHJl
dHVybiBBMihtYXAsIGFwcGx5VGFnZ2VycywgdmFsdWUpCit9CisKK2Z1bmN0aW9uIGluc2VydChp
c0NtZCwgbmV3RWZmZWN0LCBlZmZlY3RzKQoreworICAgIGVmZmVjdHMgPSBlZmZlY3RzIHx8IHsK
KyAgICAgICAgY21kczogX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuTmlsLAorICAgICAgICBz
dWJzOiBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5OaWwKKyAgICB9OworICAgIGlmIChpc0Nt
ZCkKKyAgICB7CisgICAgICAgIGVmZmVjdHMuY21kcyA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9M
aXN0LkNvbnMobmV3RWZmZWN0LCBlZmZlY3RzLmNtZHMpOworICAgICAgICByZXR1cm4gZWZmZWN0
czsKKyAgICB9CisgICAgZWZmZWN0cy5zdWJzID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3Qu
Q29ucyhuZXdFZmZlY3QsIGVmZmVjdHMuc3Vicyk7CisgICAgcmV0dXJuIGVmZmVjdHM7Cit9CisK
KworLy8gUE9SVFMKKworZnVuY3Rpb24gY2hlY2tQb3J0TmFtZShuYW1lKQoreworICAgIGlmIChu
YW1lIGluIGVmZmVjdE1hbmFnZXJzKQorICAgIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdU
aGVyZSBjYW4gb25seSBiZSBvbmUgcG9ydCBuYW1lZCBgJyArIG5hbWUgKyAnYCwgYnV0IHlvdXIg
cHJvZ3JhbSBoYXMgbXVsdGlwbGUuJyk7CisgICAgfQorfQorCisKKy8vIE9VVEdPSU5HIFBPUlRT
CisKK2Z1bmN0aW9uIG91dGdvaW5nUG9ydChuYW1lLCBjb252ZXJ0ZXIpCit7CisgICAgY2hlY2tQ
b3J0TmFtZShuYW1lKTsKKyAgICBlZmZlY3RNYW5hZ2Vyc1tuYW1lXSA9IHsKKyAgICAgICAgdGFn
OiAnY21kJywKKyAgICAgICAgY21kTWFwOiBvdXRnb2luZ1BvcnRNYXAsCisgICAgICAgIGNvbnZl
cnRlcjogY29udmVydGVyLAorICAgICAgICBpc0ZvcmVpZ246IHRydWUKKyAgICB9OworICAgIHJl
dHVybiBsZWFmKG5hbWUpOworfQorCit2YXIgb3V0Z29pbmdQb3J0TWFwID0gRjIoZnVuY3Rpb24g
Y21kTWFwKHRhZ2dlciwgdmFsdWUpIHsKKyAgICByZXR1cm4gdmFsdWU7Cit9KTsKKworZnVuY3Rp
b24gc2V0dXBPdXRnb2luZ1BvcnQobmFtZSkKK3sKKyAgICB2YXIgc3VicyA9IFtdOworICAgIHZh
ciBjb252ZXJ0ZXIgPSBlZmZlY3RNYW5hZ2Vyc1tuYW1lXS5jb252ZXJ0ZXI7CisKKyAgICAvLyBD
UkVBVEUgTUFOQUdFUgorCisgICAgdmFyIGluaXQgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfU2No
ZWR1bGVyLnN1Y2NlZWQobnVsbCk7CisKKyAgICBmdW5jdGlvbiBvbkVmZmVjdHMocm91dGVyLCBj
bWRMaXN0LCBzdGF0ZSkKKyAgICB7CisgICAgICAgIHdoaWxlIChjbWRMaXN0LmN0b3IgIT09ICdb
XScpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciB2YWx1ZSA9IGNvbnZlcnRlcihjbWRMaXN0
Ll8wKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3Vicy5sZW5ndGg7IGkrKykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdWJzW2ldKHZhbHVlKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGNtZExpc3QgPSBjbWRMaXN0Ll8xOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBpbml0OworICAgIH0KKworICAgIGVmZmVjdE1hbmFnZXJzW25hbWVdLmluaXQg
PSBpbml0OworICAgIGVmZmVjdE1hbmFnZXJzW25hbWVdLm9uRWZmZWN0cyA9IEYzKG9uRWZmZWN0
cyk7CisKKyAgICAvLyBQVUJMSUMgQVBJCisKKyAgICBmdW5jdGlvbiBzdWJzY3JpYmUoY2FsbGJh
Y2spCisgICAgeworICAgICAgICBzdWJzLnB1c2goY2FsbGJhY2spOworICAgIH0KKworICAgIGZ1
bmN0aW9uIHVuc3Vic2NyaWJlKGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgdmFyIGluZGV4ID0g
c3Vicy5pbmRleE9mKGNhbGxiYWNrKTsKKyAgICAgICAgaWYgKGluZGV4ID49IDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIHN1YnMuc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiB7CisgICAgICAgIHN1YnNjcmliZTogc3Vic2NyaWJlLAorICAgICAgICB1
bnN1YnNjcmliZTogdW5zdWJzY3JpYmUKKyAgICB9OworfQorCisKKy8vIElOQ09NSU5HIFBPUlRT
CisKK2Z1bmN0aW9uIGluY29taW5nUG9ydChuYW1lLCBjb252ZXJ0ZXIpCit7CisgICAgY2hlY2tQ
b3J0TmFtZShuYW1lKTsKKyAgICBlZmZlY3RNYW5hZ2Vyc1tuYW1lXSA9IHsKKyAgICAgICAgdGFn
OiAnc3ViJywKKyAgICAgICAgc3ViTWFwOiBpbmNvbWluZ1BvcnRNYXAsCisgICAgICAgIGNvbnZl
cnRlcjogY29udmVydGVyLAorICAgICAgICBpc0ZvcmVpZ246IHRydWUKKyAgICB9OworICAgIHJl
dHVybiBsZWFmKG5hbWUpOworfQorCit2YXIgaW5jb21pbmdQb3J0TWFwID0gRjIoZnVuY3Rpb24g
c3ViTWFwKHRhZ2dlciwgZmluYWxUYWdnZXIpCit7CisgICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRhZ2dlcihmaW5hbFRhZ2dlcih2YWx1ZSkpOworICAg
IH07Cit9KTsKKworZnVuY3Rpb24gc2V0dXBJbmNvbWluZ1BvcnQobmFtZSwgY2FsbGJhY2spCit7
CisgICAgdmFyIHNlbnRCZWZvcmVJbml0ID0gW107CisgICAgdmFyIHN1YnMgPSBfZWxtX2xhbmck
Y29yZSROYXRpdmVfTGlzdC5OaWw7CisgICAgdmFyIGNvbnZlcnRlciA9IGVmZmVjdE1hbmFnZXJz
W25hbWVdLmNvbnZlcnRlcjsKKyAgICB2YXIgY3VycmVudE9uRWZmZWN0cyA9IHByZUluaXRPbkVm
ZmVjdHM7CisgICAgdmFyIGN1cnJlbnRTZW5kID0gcHJlSW5pdFNlbmQ7CisKKyAgICAvLyBDUkVB
VEUgTUFOQUdFUgorCisgICAgdmFyIGluaXQgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfU2NoZWR1
bGVyLnN1Y2NlZWQobnVsbCk7CisKKyAgICBmdW5jdGlvbiBwcmVJbml0T25FZmZlY3RzKHJvdXRl
ciwgc3ViTGlzdCwgc3RhdGUpCisgICAgeworICAgICAgICB2YXIgcG9zdEluaXRSZXN1bHQgPSBw
b3N0SW5pdE9uRWZmZWN0cyhyb3V0ZXIsIHN1Ykxpc3QsIHN0YXRlKTsKKworICAgICAgICBmb3Io
dmFyIGkgPSAwOyBpIDwgc2VudEJlZm9yZUluaXQubGVuZ3RoOyBpKyspCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHBvc3RJbml0U2VuZChzZW50QmVmb3JlSW5pdFtpXSk7CisgICAgICAgIH0KKwor
ICAgICAgICBzZW50QmVmb3JlSW5pdCA9IG51bGw7IC8vIHRvIHJlbGVhc2Ugb2JqZWN0cyBoZWxk
IGluIHF1ZXVlCisgICAgICAgIGN1cnJlbnRTZW5kID0gcG9zdEluaXRTZW5kOworICAgICAgICBj
dXJyZW50T25FZmZlY3RzID0gcG9zdEluaXRPbkVmZmVjdHM7CisgICAgICAgIHJldHVybiBwb3N0
SW5pdFJlc3VsdDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwb3N0SW5pdE9uRWZmZWN0cyhyb3V0
ZXIsIHN1Ykxpc3QsIHN0YXRlKQorICAgIHsKKyAgICAgICAgc3VicyA9IHN1Ykxpc3Q7CisgICAg
ICAgIHJldHVybiBpbml0OworICAgIH0KKworICAgIGZ1bmN0aW9uIG9uRWZmZWN0cyhyb3V0ZXIs
IHN1Ykxpc3QsIHN0YXRlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGN1cnJlbnRPbkVmZmVjdHMo
cm91dGVyLCBzdWJMaXN0LCBzdGF0ZSk7CisgICAgfQorCisgICAgZWZmZWN0TWFuYWdlcnNbbmFt
ZV0uaW5pdCA9IGluaXQ7CisgICAgZWZmZWN0TWFuYWdlcnNbbmFtZV0ub25FZmZlY3RzID0gRjMo
b25FZmZlY3RzKTsKKworICAgIC8vIFBVQkxJQyBBUEkKKworICAgIGZ1bmN0aW9uIHByZUluaXRT
ZW5kKHZhbHVlKQorICAgIHsKKyAgICAgICAgc2VudEJlZm9yZUluaXQucHVzaCh2YWx1ZSk7Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gcG9zdEluaXRTZW5kKGluY29taW5nVmFsdWUpCisgICAgewor
ICAgICAgICB2YXIgcmVzdWx0ID0gQTIoX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkZGVjb2Rl
VmFsdWUsIGNvbnZlcnRlciwgaW5jb21pbmdWYWx1ZSk7CisgICAgICAgIGlmIChyZXN1bHQuY3Rv
ciA9PT0gJ0VycicpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVHJ5
aW5nIHRvIHNlbmQgYW4gdW5leHBlY3RlZCB0eXBlIG9mIHZhbHVlIHRocm91Z2ggcG9ydCBgJyAr
IG5hbWUgKyAnYDpcbicgKyByZXN1bHQuXzApOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHZh
bHVlID0gcmVzdWx0Ll8wOworICAgICAgICB2YXIgdGVtcCA9IHN1YnM7CisgICAgICAgIHdoaWxl
ICh0ZW1wLmN0b3IgIT09ICdbXScpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhbGxiYWNrKHRl
bXAuXzAodmFsdWUpKTsKKyAgICAgICAgICAgIHRlbXAgPSB0ZW1wLl8xOworICAgICAgICB9Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gc2VuZChpbmNvbWluZ1ZhbHVlKQorICAgIHsKKyAgICAgICAg
Y3VycmVudFNlbmQoaW5jb21pbmdWYWx1ZSk7CisgICAgfQorCisgICAgcmV0dXJuIHsgc2VuZDog
c2VuZCB9OworfQorCityZXR1cm4geworICAgIC8vIHJvdXRlcnMKKyAgICBzZW5kVG9BcHA6IEYy
KHNlbmRUb0FwcCksCisgICAgc2VuZFRvU2VsZjogRjIoc2VuZFRvU2VsZiksCisKKyAgICAvLyBn
bG9iYWwgc2V0dXAKKyAgICBtYWluVG9Qcm9ncmFtOiBtYWluVG9Qcm9ncmFtLAorICAgIGVmZmVj
dE1hbmFnZXJzOiBlZmZlY3RNYW5hZ2VycywKKyAgICBvdXRnb2luZ1BvcnQ6IG91dGdvaW5nUG9y
dCwKKyAgICBpbmNvbWluZ1BvcnQ6IGluY29taW5nUG9ydCwKKyAgICBhZGRQdWJsaWNNb2R1bGU6
IGFkZFB1YmxpY01vZHVsZSwKKworICAgIC8vIGVmZmVjdCBiYWdzCisgICAgbGVhZjogbGVhZiwK
KyAgICBiYXRjaDogYmF0Y2gsCisgICAgbWFwOiBGMihtYXApCit9OworCit9KCk7CisKKy8vaW1w
b3J0IE5hdGl2ZS5VdGlscyAvLworCit2YXIgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVkdWxl
ciA9IGZ1bmN0aW9uKCkgeworCit2YXIgTUFYX1NURVBTID0gMTAwMDA7CisKKworLy8gVEFTS1MK
KworZnVuY3Rpb24gc3VjY2VlZCh2YWx1ZSkKK3sKKyAgICByZXR1cm4geworICAgICAgICBjdG9y
OiAnX1Rhc2tfc3VjY2VlZCcsCisgICAgICAgIHZhbHVlOiB2YWx1ZQorICAgIH07Cit9CisKK2Z1
bmN0aW9uIGZhaWwoZXJyb3IpCit7CisgICAgcmV0dXJuIHsKKyAgICAgICAgY3RvcjogJ19UYXNr
X2ZhaWwnLAorICAgICAgICB2YWx1ZTogZXJyb3IKKyAgICB9OworfQorCitmdW5jdGlvbiBuYXRp
dmVCaW5kaW5nKGNhbGxiYWNrKQoreworICAgIHJldHVybiB7CisgICAgICAgIGN0b3I6ICdfVGFz
a19uYXRpdmVCaW5kaW5nJywKKyAgICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrLAorICAgICAgICBj
YW5jZWw6IG51bGwKKyAgICB9OworfQorCitmdW5jdGlvbiBhbmRUaGVuKHRhc2ssIGNhbGxiYWNr
KQoreworICAgIHJldHVybiB7CisgICAgICAgIGN0b3I6ICdfVGFza19hbmRUaGVuJywKKyAgICAg
ICAgdGFzazogdGFzaywKKyAgICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrCisgICAgfTsKK30KKwor
ZnVuY3Rpb24gb25FcnJvcih0YXNrLCBjYWxsYmFjaykKK3sKKyAgICByZXR1cm4geworICAgICAg
ICBjdG9yOiAnX1Rhc2tfb25FcnJvcicsCisgICAgICAgIHRhc2s6IHRhc2ssCisgICAgICAgIGNh
bGxiYWNrOiBjYWxsYmFjaworICAgIH07Cit9CisKK2Z1bmN0aW9uIHJlY2VpdmUoY2FsbGJhY2sp
Cit7CisgICAgcmV0dXJuIHsKKyAgICAgICAgY3RvcjogJ19UYXNrX3JlY2VpdmUnLAorICAgICAg
ICBjYWxsYmFjazogY2FsbGJhY2sKKyAgICB9OworfQorCisKKy8vIFBST0NFU1NFUworCitmdW5j
dGlvbiByYXdTcGF3bih0YXNrKQoreworICAgIHZhciBwcm9jZXNzID0geworICAgICAgICBjdG9y
OiAnX1Byb2Nlc3MnLAorICAgICAgICBpZDogX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmd1
aWQoKSwKKyAgICAgICAgcm9vdDogdGFzaywKKyAgICAgICAgc3RhY2s6IG51bGwsCisgICAgICAg
IG1haWxib3g6IFtdCisgICAgfTsKKworICAgIGVucXVldWUocHJvY2Vzcyk7CisKKyAgICByZXR1
cm4gcHJvY2VzczsKK30KKworZnVuY3Rpb24gc3Bhd24odGFzaykKK3sKKyAgICByZXR1cm4gbmF0
aXZlQmluZGluZyhmdW5jdGlvbihjYWxsYmFjaykgeworICAgICAgICB2YXIgcHJvY2VzcyA9IHJh
d1NwYXduKHRhc2spOworICAgICAgICBjYWxsYmFjayhzdWNjZWVkKHByb2Nlc3MpKTsKKyAgICB9
KTsKK30KKworZnVuY3Rpb24gcmF3U2VuZChwcm9jZXNzLCBtc2cpCit7CisgICAgcHJvY2Vzcy5t
YWlsYm94LnB1c2gobXNnKTsKKyAgICBlbnF1ZXVlKHByb2Nlc3MpOworfQorCitmdW5jdGlvbiBz
ZW5kKHByb2Nlc3MsIG1zZykKK3sKKyAgICByZXR1cm4gbmF0aXZlQmluZGluZyhmdW5jdGlvbihj
YWxsYmFjaykgeworICAgICAgICByYXdTZW5kKHByb2Nlc3MsIG1zZyk7CisgICAgICAgIGNhbGxi
YWNrKHN1Y2NlZWQoX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLlR1cGxlMCkpOworICAgIH0p
OworfQorCitmdW5jdGlvbiBraWxsKHByb2Nlc3MpCit7CisgICAgcmV0dXJuIG5hdGl2ZUJpbmRp
bmcoZnVuY3Rpb24oY2FsbGJhY2spIHsKKyAgICAgICAgdmFyIHJvb3QgPSBwcm9jZXNzLnJvb3Q7
CisgICAgICAgIGlmIChyb290LmN0b3IgPT09ICdfVGFza19uYXRpdmVCaW5kaW5nJyAmJiByb290
LmNhbmNlbCkKKyAgICAgICAgeworICAgICAgICAgICAgcm9vdC5jYW5jZWwoKTsKKyAgICAgICAg
fQorCisgICAgICAgIHByb2Nlc3Mucm9vdCA9IG51bGw7CisKKyAgICAgICAgY2FsbGJhY2soc3Vj
Y2VlZChfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuVHVwbGUwKSk7CisgICAgfSk7Cit9CisK
K2Z1bmN0aW9uIHNsZWVwKHRpbWUpCit7CisgICAgcmV0dXJuIG5hdGl2ZUJpbmRpbmcoZnVuY3Rp
b24oY2FsbGJhY2spIHsKKyAgICAgICAgdmFyIGlkID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgIGNhbGxiYWNrKHN1Y2NlZWQoX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxz
LlR1cGxlMCkpOworICAgICAgICB9LCB0aW1lKTsKKworICAgICAgICByZXR1cm4gZnVuY3Rpb24o
KSB7IGNsZWFyVGltZW91dChpZCk7IH07CisgICAgfSk7Cit9CisKKworLy8gU1RFUCBQUk9DRVNT
RVMKKworZnVuY3Rpb24gc3RlcChudW1TdGVwcywgcHJvY2VzcykKK3sKKyAgICB3aGlsZSAobnVt
U3RlcHMgPCBNQVhfU1RFUFMpCisgICAgeworICAgICAgICB2YXIgY3RvciA9IHByb2Nlc3Mucm9v
dC5jdG9yOworCisgICAgICAgIGlmIChjdG9yID09PSAnX1Rhc2tfc3VjY2VlZCcpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHdoaWxlIChwcm9jZXNzLnN0YWNrICYmIHByb2Nlc3Muc3RhY2suY3Rv
ciA9PT0gJ19UYXNrX29uRXJyb3InKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBy
b2Nlc3Muc3RhY2sgPSBwcm9jZXNzLnN0YWNrLnJlc3Q7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAocHJvY2Vzcy5zdGFjayA9PT0gbnVsbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHByb2Nlc3Mucm9vdCA9
IHByb2Nlc3Muc3RhY2suY2FsbGJhY2socHJvY2Vzcy5yb290LnZhbHVlKTsKKyAgICAgICAgICAg
IHByb2Nlc3Muc3RhY2sgPSBwcm9jZXNzLnN0YWNrLnJlc3Q7CisgICAgICAgICAgICArK251bVN0
ZXBzOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY3Rv
ciA9PT0gJ19UYXNrX2ZhaWwnKQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAocHJvY2Vz
cy5zdGFjayAmJiBwcm9jZXNzLnN0YWNrLmN0b3IgPT09ICdfVGFza19hbmRUaGVuJykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcm9jZXNzLnN0YWNrID0gcHJvY2Vzcy5zdGFjay5y
ZXN0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHByb2Nlc3Muc3RhY2sgPT09IG51
bGwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBwcm9jZXNzLnJvb3QgPSBwcm9jZXNzLnN0YWNrLmNhbGxiYWNrKHByb2Nl
c3Mucm9vdC52YWx1ZSk7CisgICAgICAgICAgICBwcm9jZXNzLnN0YWNrID0gcHJvY2Vzcy5zdGFj
ay5yZXN0OworICAgICAgICAgICAgKytudW1TdGVwczsKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGN0b3IgPT09ICdfVGFza19hbmRUaGVuJykKKyAgICAg
ICAgeworICAgICAgICAgICAgcHJvY2Vzcy5zdGFjayA9IHsKKyAgICAgICAgICAgICAgICBjdG9y
OiAnX1Rhc2tfYW5kVGhlbicsCisgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHByb2Nlc3Mucm9v
dC5jYWxsYmFjaywKKyAgICAgICAgICAgICAgICByZXN0OiBwcm9jZXNzLnN0YWNrCisgICAgICAg
ICAgICB9OworICAgICAgICAgICAgcHJvY2Vzcy5yb290ID0gcHJvY2Vzcy5yb290LnRhc2s7Cisg
ICAgICAgICAgICArK251bVN0ZXBzOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoY3RvciA9PT0gJ19UYXNrX29uRXJyb3InKQorICAgICAgICB7CisgICAg
ICAgICAgICBwcm9jZXNzLnN0YWNrID0geworICAgICAgICAgICAgICAgIGN0b3I6ICdfVGFza19v
bkVycm9yJywKKyAgICAgICAgICAgICAgICBjYWxsYmFjazogcHJvY2Vzcy5yb290LmNhbGxiYWNr
LAorICAgICAgICAgICAgICAgIHJlc3Q6IHByb2Nlc3Muc3RhY2sKKyAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICBwcm9jZXNzLnJvb3QgPSBwcm9jZXNzLnJvb3QudGFzazsKKyAgICAgICAgICAg
ICsrbnVtU3RlcHM7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChjdG9yID09PSAnX1Rhc2tfbmF0aXZlQmluZGluZycpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHByb2Nlc3Mucm9vdC5jYW5jZWwgPSBwcm9jZXNzLnJvb3QuY2FsbGJhY2soZnVuY3Rpb24o
bmV3Um9vdCkgeworICAgICAgICAgICAgICAgIHByb2Nlc3Mucm9vdCA9IG5ld1Jvb3Q7CisgICAg
ICAgICAgICAgICAgZW5xdWV1ZShwcm9jZXNzKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjdG9yID09PSAnX1Rhc2tfcmVj
ZWl2ZScpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBtYWlsYm94ID0gcHJvY2Vzcy5tYWls
Ym94OworICAgICAgICAgICAgaWYgKG1haWxib3gubGVuZ3RoID09PSAwKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBw
cm9jZXNzLnJvb3QgPSBwcm9jZXNzLnJvb3QuY2FsbGJhY2sobWFpbGJveC5zaGlmdCgpKTsKKyAg
ICAgICAgICAgICsrbnVtU3RlcHM7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
CisgICAgICAgIHRocm93IG5ldyBFcnJvcihjdG9yKTsKKyAgICB9CisKKyAgICBpZiAobnVtU3Rl
cHMgPCBNQVhfU1RFUFMpCisgICAgeworICAgICAgICByZXR1cm4gbnVtU3RlcHMgKyAxOworICAg
IH0KKyAgICBlbnF1ZXVlKHByb2Nlc3MpOworCisgICAgcmV0dXJuIG51bVN0ZXBzOworfQorCisK
Ky8vIFdPUksgUVVFVUUKKwordmFyIHdvcmtpbmcgPSBmYWxzZTsKK3ZhciB3b3JrUXVldWUgPSBb
XTsKKworZnVuY3Rpb24gZW5xdWV1ZShwcm9jZXNzKQoreworICAgIHdvcmtRdWV1ZS5wdXNoKHBy
b2Nlc3MpOworCisgICAgaWYgKCF3b3JraW5nKQorICAgIHsKKyAgICAgICAgc2V0VGltZW91dCh3
b3JrLCAwKTsKKyAgICAgICAgd29ya2luZyA9IHRydWU7CisgICAgfQorfQorCitmdW5jdGlvbiB3
b3JrKCkKK3sKKyAgICB2YXIgbnVtU3RlcHMgPSAwOworICAgIHZhciBwcm9jZXNzOworICAgIHdo
aWxlIChudW1TdGVwcyA8IE1BWF9TVEVQUyAmJiAocHJvY2VzcyA9IHdvcmtRdWV1ZS5zaGlmdCgp
KSkKKyAgICB7CisgICAgICAgIGlmIChwcm9jZXNzLnJvb3QpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG51bVN0ZXBzID0gc3RlcChudW1TdGVwcywgcHJvY2Vzcyk7CisgICAgICAgIH0KKyAgICB9
CisgICAgaWYgKCFwcm9jZXNzKQorICAgIHsKKyAgICAgICAgd29ya2luZyA9IGZhbHNlOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIHNldFRpbWVvdXQod29yaywgMCk7Cit9Cit3aW5kb3cu
ZWxtV29yayA9IHdvcms7CisKK3JldHVybiB7CisgICAgc3VjY2VlZDogc3VjY2VlZCwKKyAgICBm
YWlsOiBmYWlsLAorICAgIG5hdGl2ZUJpbmRpbmc6IG5hdGl2ZUJpbmRpbmcsCisgICAgYW5kVGhl
bjogRjIoYW5kVGhlbiksCisgICAgb25FcnJvcjogRjIob25FcnJvciksCisgICAgcmVjZWl2ZTog
cmVjZWl2ZSwKKworICAgIHNwYXduOiBzcGF3biwKKyAgICBraWxsOiBraWxsLAorICAgIHNsZWVw
OiBzbGVlcCwKKyAgICBzZW5kOiBGMihzZW5kKSwKKworICAgIHJhd1NwYXduOiByYXdTcGF3biwK
KyAgICByYXdTZW5kOiByYXdTZW5kCit9OworCit9KCk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkUGxh
dGZvcm0kaGFjayA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TY2hlZHVsZXIuc3VjY2VlZDsKK3Zh
ciBfZWxtX2xhbmckY29yZSRQbGF0Zm9ybSRzZW5kVG9TZWxmID0gX2VsbV9sYW5nJGNvcmUkTmF0
aXZlX1BsYXRmb3JtLnNlbmRUb1NlbGY7Cit2YXIgX2VsbV9sYW5nJGNvcmUkUGxhdGZvcm0kc2Vu
ZFRvQXBwID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1BsYXRmb3JtLnNlbmRUb0FwcDsKK3ZhciBf
ZWxtX2xhbmckY29yZSRQbGF0Zm9ybSRQcm9ncmFtID0ge2N0b3I6ICdQcm9ncmFtJ307Cit2YXIg
X2VsbV9sYW5nJGNvcmUkUGxhdGZvcm0kVGFzayA9IHtjdG9yOiAnVGFzayd9OwordmFyIF9lbG1f
bGFuZyRjb3JlJFBsYXRmb3JtJFByb2Nlc3NJZCA9IHtjdG9yOiAnUHJvY2Vzc0lkJ307Cit2YXIg
X2VsbV9sYW5nJGNvcmUkUGxhdGZvcm0kUm91dGVyID0ge2N0b3I6ICdSb3V0ZXInfTsKKwordmFy
IF9lbG1fbGFuZyRjb3JlJFBsYXRmb3JtX0NtZCRiYXRjaCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2
ZV9QbGF0Zm9ybS5iYXRjaDsKK3ZhciBfZWxtX2xhbmckY29yZSRQbGF0Zm9ybV9DbWQkbm9uZSA9
IF9lbG1fbGFuZyRjb3JlJFBsYXRmb3JtX0NtZCRiYXRjaCgKKyAgICBfZWxtX2xhbmckY29yZSRO
YXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgIFtdKSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUk
UGxhdGZvcm1fQ21kX29wcyA9IF9lbG1fbGFuZyRjb3JlJFBsYXRmb3JtX0NtZF9vcHMgfHwge307
CitfZWxtX2xhbmckY29yZSRQbGF0Zm9ybV9DbWRfb3BzWychJ10gPSBGMigKKyAgICBmdW5jdGlv
biAobW9kZWwsIGNvbW1hbmRzKSB7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBjdG9y
OiAnX1R1cGxlMicsCisgICAgICAgICAgICBfMDogbW9kZWwsCisgICAgICAgICAgICBfMTogX2Vs
bV9sYW5nJGNvcmUkUGxhdGZvcm1fQ21kJGJhdGNoKGNvbW1hbmRzKQorICAgICAgICB9OworICAg
IH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJFBsYXRmb3JtX0NtZCRtYXAgPSBfZWxtX2xhbmckY29y
ZSROYXRpdmVfUGxhdGZvcm0ubWFwOwordmFyIF9lbG1fbGFuZyRjb3JlJFBsYXRmb3JtX0NtZCRD
bWQgPSB7Y3RvcjogJ0NtZCd9OworCit2YXIgX2VsbV9sYW5nJGNvcmUkUGxhdGZvcm1fU3ViJGJh
dGNoID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1BsYXRmb3JtLmJhdGNoOwordmFyIF9lbG1fbGFu
ZyRjb3JlJFBsYXRmb3JtX1N1YiRub25lID0gX2VsbV9sYW5nJGNvcmUkUGxhdGZvcm1fU3ViJGJh
dGNoKAorICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAg
W10pKTsKK3ZhciBfZWxtX2xhbmckY29yZSRQbGF0Zm9ybV9TdWIkbWFwID0gX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX1BsYXRmb3JtLm1hcDsKK3ZhciBfZWxtX2xhbmckY29yZSRQbGF0Zm9ybV9TdWIk
U3ViID0ge2N0b3I6ICdTdWInfTsKKworLy9pbXBvcnQgTWF5YmUsIE5hdGl2ZS5MaXN0LCBOYXRp
dmUuVXRpbHMsIFJlc3VsdCAvLworCit2YXIgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0cmluZyA9
IGZ1bmN0aW9uKCkgeworCitmdW5jdGlvbiBpc0VtcHR5KHN0cikKK3sKKyAgICByZXR1cm4gc3Ry
Lmxlbmd0aCA9PT0gMDsKK30KK2Z1bmN0aW9uIGNvbnMoY2hyLCBzdHIpCit7CisgICAgcmV0dXJu
IGNociArIHN0cjsKK30KK2Z1bmN0aW9uIHVuY29ucyhzdHIpCit7CisgICAgdmFyIGhkID0gc3Ry
WzBdOworICAgIGlmIChoZCkKKyAgICB7CisgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRN
YXliZSRKdXN0KF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5UdXBsZTIoX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX1V0aWxzLmNocihoZCksIHN0ci5zbGljZSgxKSkpOworICAgIH0KKyAgICByZXR1
cm4gX2VsbV9sYW5nJGNvcmUkTWF5YmUkTm90aGluZzsKK30KK2Z1bmN0aW9uIGFwcGVuZChhLCBi
KQoreworICAgIHJldHVybiBhICsgYjsKK30KK2Z1bmN0aW9uIGNvbmNhdChzdHJzKQoreworICAg
IHJldHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC50b0FycmF5KHN0cnMpLmpvaW4oJycp
OworfQorZnVuY3Rpb24gbGVuZ3RoKHN0cikKK3sKKyAgICByZXR1cm4gc3RyLmxlbmd0aDsKK30K
K2Z1bmN0aW9uIG1hcChmLCBzdHIpCit7CisgICAgdmFyIG91dCA9IHN0ci5zcGxpdCgnJyk7Cisg
ICAgZm9yICh2YXIgaSA9IG91dC5sZW5ndGg7IGktLTsgKQorICAgIHsKKyAgICAgICAgb3V0W2ld
ID0gZihfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuY2hyKG91dFtpXSkpOworICAgIH0KKyAg
ICByZXR1cm4gb3V0LmpvaW4oJycpOworfQorZnVuY3Rpb24gZmlsdGVyKHByZWQsIHN0cikKK3sK
KyAgICByZXR1cm4gc3RyLnNwbGl0KCcnKS5tYXAoX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxz
LmNocikuZmlsdGVyKHByZWQpLmpvaW4oJycpOworfQorZnVuY3Rpb24gcmV2ZXJzZShzdHIpCit7
CisgICAgcmV0dXJuIHN0ci5zcGxpdCgnJykucmV2ZXJzZSgpLmpvaW4oJycpOworfQorZnVuY3Rp
b24gZm9sZGwoZiwgYiwgc3RyKQoreworICAgIHZhciBsZW4gPSBzdHIubGVuZ3RoOworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpCisgICAgeworICAgICAgICBiID0gQTIoZiwgX2Vs
bV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNocihzdHJbaV0pLCBiKTsKKyAgICB9CisgICAgcmV0
dXJuIGI7Cit9CitmdW5jdGlvbiBmb2xkcihmLCBiLCBzdHIpCit7CisgICAgZm9yICh2YXIgaSA9
IHN0ci5sZW5ndGg7IGktLTsgKQorICAgIHsKKyAgICAgICAgYiA9IEEyKGYsIF9lbG1fbGFuZyRj
b3JlJE5hdGl2ZV9VdGlscy5jaHIoc3RyW2ldKSwgYik7CisgICAgfQorICAgIHJldHVybiBiOwor
fQorZnVuY3Rpb24gc3BsaXQoc2VwLCBzdHIpCit7CisgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3Jl
JE5hdGl2ZV9MaXN0LmZyb21BcnJheShzdHIuc3BsaXQoc2VwKSk7Cit9CitmdW5jdGlvbiBqb2lu
KHNlcCwgc3RycykKK3sKKyAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QudG9B
cnJheShzdHJzKS5qb2luKHNlcCk7Cit9CitmdW5jdGlvbiByZXBlYXQobiwgc3RyKQoreworICAg
IHZhciByZXN1bHQgPSAnJzsKKyAgICB3aGlsZSAobiA+IDApCisgICAgeworICAgICAgICBpZiAo
biAmIDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlc3VsdCArPSBzdHI7CisgICAgICAgIH0K
KyAgICAgICAgbiA+Pj0gMSwgc3RyICs9IHN0cjsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KK2Z1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQsIHN0cikKK3sKKyAgICByZXR1cm4gc3RyLnNs
aWNlKHN0YXJ0LCBlbmQpOworfQorZnVuY3Rpb24gbGVmdChuLCBzdHIpCit7CisgICAgcmV0dXJu
IG4gPCAxID8gJycgOiBzdHIuc2xpY2UoMCwgbik7Cit9CitmdW5jdGlvbiByaWdodChuLCBzdHIp
Cit7CisgICAgcmV0dXJuIG4gPCAxID8gJycgOiBzdHIuc2xpY2UoLW4pOworfQorZnVuY3Rpb24g
ZHJvcExlZnQobiwgc3RyKQoreworICAgIHJldHVybiBuIDwgMSA/IHN0ciA6IHN0ci5zbGljZShu
KTsKK30KK2Z1bmN0aW9uIGRyb3BSaWdodChuLCBzdHIpCit7CisgICAgcmV0dXJuIG4gPCAxID8g
c3RyIDogc3RyLnNsaWNlKDAsIC1uKTsKK30KK2Z1bmN0aW9uIHBhZChuLCBjaHIsIHN0cikKK3sK
KyAgICB2YXIgaGFsZiA9IChuIC0gc3RyLmxlbmd0aCkgLyAyOworICAgIHJldHVybiByZXBlYXQo
TWF0aC5jZWlsKGhhbGYpLCBjaHIpICsgc3RyICsgcmVwZWF0KGhhbGYgfCAwLCBjaHIpOworfQor
ZnVuY3Rpb24gcGFkUmlnaHQobiwgY2hyLCBzdHIpCit7CisgICAgcmV0dXJuIHN0ciArIHJlcGVh
dChuIC0gc3RyLmxlbmd0aCwgY2hyKTsKK30KK2Z1bmN0aW9uIHBhZExlZnQobiwgY2hyLCBzdHIp
Cit7CisgICAgcmV0dXJuIHJlcGVhdChuIC0gc3RyLmxlbmd0aCwgY2hyKSArIHN0cjsKK30KKwor
ZnVuY3Rpb24gdHJpbShzdHIpCit7CisgICAgcmV0dXJuIHN0ci50cmltKCk7Cit9CitmdW5jdGlv
biB0cmltTGVmdChzdHIpCit7CisgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9eXHMrLywgJycpOwor
fQorZnVuY3Rpb24gdHJpbVJpZ2h0KHN0cikKK3sKKyAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1xz
KyQvLCAnJyk7Cit9CisKK2Z1bmN0aW9uIHdvcmRzKHN0cikKK3sKKyAgICByZXR1cm4gX2VsbV9s
YW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KHN0ci50cmltKCkuc3BsaXQoL1xzKy9nKSk7
Cit9CitmdW5jdGlvbiBsaW5lcyhzdHIpCit7CisgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5h
dGl2ZV9MaXN0LmZyb21BcnJheShzdHIuc3BsaXQoL1xyXG58XHJ8XG4vZykpOworfQorCitmdW5j
dGlvbiB0b1VwcGVyKHN0cikKK3sKKyAgICByZXR1cm4gc3RyLnRvVXBwZXJDYXNlKCk7Cit9Citm
dW5jdGlvbiB0b0xvd2VyKHN0cikKK3sKKyAgICByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCk7Cit9
CisKK2Z1bmN0aW9uIGFueShwcmVkLCBzdHIpCit7CisgICAgZm9yICh2YXIgaSA9IHN0ci5sZW5n
dGg7IGktLTsgKQorICAgIHsKKyAgICAgICAgaWYgKHByZWQoX2VsbV9sYW5nJGNvcmUkTmF0aXZl
X1V0aWxzLmNocihzdHJbaV0pKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorZnVuY3Rpb24gYWxsKHBy
ZWQsIHN0cikKK3sKKyAgICBmb3IgKHZhciBpID0gc3RyLmxlbmd0aDsgaS0tOyApCisgICAgewor
ICAgICAgICBpZiAoIXByZWQoX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNocihzdHJbaV0p
KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQorCitmdW5jdGlvbiBjb250YWlucyhzdWIsIHN0cikKK3sK
KyAgICByZXR1cm4gc3RyLmluZGV4T2Yoc3ViKSA+IC0xOworfQorZnVuY3Rpb24gc3RhcnRzV2l0
aChzdWIsIHN0cikKK3sKKyAgICByZXR1cm4gc3RyLmluZGV4T2Yoc3ViKSA9PT0gMDsKK30KK2Z1
bmN0aW9uIGVuZHNXaXRoKHN1Yiwgc3RyKQoreworICAgIHJldHVybiBzdHIubGVuZ3RoID49IHN1
Yi5sZW5ndGggJiYKKyAgICAgICAgc3RyLmxhc3RJbmRleE9mKHN1YikgPT09IHN0ci5sZW5ndGgg
LSBzdWIubGVuZ3RoOworfQorZnVuY3Rpb24gaW5kZXhlcyhzdWIsIHN0cikKK3sKKyAgICB2YXIg
c3ViTGVuID0gc3ViLmxlbmd0aDsKKyAgICAKKyAgICBpZiAoc3ViTGVuIDwgMSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5OaWw7CisgICAgfQorCisg
ICAgdmFyIGkgPSAwOworICAgIHZhciBpcyA9IFtdOworCisgICAgd2hpbGUgKChpID0gc3RyLmlu
ZGV4T2Yoc3ViLCBpKSkgPiAtMSkKKyAgICB7CisgICAgICAgIGlzLnB1c2goaSk7CisgICAgICAg
IGkgPSBpICsgc3ViTGVuOworICAgIH0gICAKKyAgICAKKyAgICByZXR1cm4gX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KGlzKTsKK30KKworZnVuY3Rpb24gdG9JbnQocykKK3sK
KyAgICB2YXIgbGVuID0gcy5sZW5ndGg7CisgICAgaWYgKGxlbiA9PT0gMCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRSZXN1bHQkRXJyKCJjb3VsZCBub3QgY29udmVydCBz
dHJpbmcgJyIgKyBzICsgIicgdG8gYW4gSW50IiApOworICAgIH0KKyAgICB2YXIgc3RhcnQgPSAw
OworICAgIGlmIChzWzBdID09PSAnLScpCisgICAgeworICAgICAgICBpZiAobGVuID09PSAxKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkUmVzdWx0JEVycigi
Y291bGQgbm90IGNvbnZlcnQgc3RyaW5nICciICsgcyArICInIHRvIGFuIEludCIgKTsKKyAgICAg
ICAgfQorICAgICAgICBzdGFydCA9IDE7CisgICAgfQorICAgIGZvciAodmFyIGkgPSBzdGFydDsg
aSA8IGxlbjsgKytpKQorICAgIHsKKyAgICAgICAgdmFyIGMgPSBzW2ldOworICAgICAgICBpZiAo
YyA8ICcwJyB8fCAnOScgPCBjKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gX2VsbV9s
YW5nJGNvcmUkUmVzdWx0JEVycigiY291bGQgbm90IGNvbnZlcnQgc3RyaW5nICciICsgcyArICIn
IHRvIGFuIEludCIgKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gX2VsbV9sYW5nJGNv
cmUkUmVzdWx0JE9rKHBhcnNlSW50KHMsIDEwKSk7Cit9CisKK2Z1bmN0aW9uIHRvRmxvYXQocykK
K3sKKyAgICB2YXIgbGVuID0gcy5sZW5ndGg7CisgICAgaWYgKGxlbiA9PT0gMCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRSZXN1bHQkRXJyKCJjb3VsZCBub3QgY29udmVy
dCBzdHJpbmcgJyIgKyBzICsgIicgdG8gYSBGbG9hdCIgKTsKKyAgICB9CisgICAgdmFyIHN0YXJ0
ID0gMDsKKyAgICBpZiAoc1swXSA9PT0gJy0nKQorICAgIHsKKyAgICAgICAgaWYgKGxlbiA9PT0g
MSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRF
cnIoImNvdWxkIG5vdCBjb252ZXJ0IHN0cmluZyAnIiArIHMgKyAiJyB0byBhIEZsb2F0IiApOwor
ICAgICAgICB9CisgICAgICAgIHN0YXJ0ID0gMTsKKyAgICB9CisgICAgdmFyIGRvdENvdW50ID0g
MDsKKyAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBsZW47ICsraSkKKyAgICB7CisgICAgICAg
IHZhciBjID0gc1tpXTsKKyAgICAgICAgaWYgKCcwJyA8PSBjICYmIGMgPD0gJzknKQorICAgICAg
ICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYyA9PT0g
Jy4nKQorICAgICAgICB7CisgICAgICAgICAgICBkb3RDb3VudCArPSAxOworICAgICAgICAgICAg
aWYgKGRvdENvdW50IDw9IDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRj
b3JlJFJlc3VsdCRFcnIoImNvdWxkIG5vdCBjb252ZXJ0IHN0cmluZyAnIiArIHMgKyAiJyB0byBh
IEZsb2F0IiApOworICAgIH0KKyAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkUmVzdWx0JE9rKHBh
cnNlRmxvYXQocykpOworfQorCitmdW5jdGlvbiB0b0xpc3Qoc3RyKQoreworICAgIHJldHVybiBf
ZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoc3RyLnNwbGl0KCcnKS5tYXAoX2Vs
bV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNocikpOworfQorZnVuY3Rpb24gZnJvbUxpc3QoY2hh
cnMpCit7CisgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LnRvQXJyYXkoY2hh
cnMpLmpvaW4oJycpOworfQorCityZXR1cm4geworICAgIGlzRW1wdHk6IGlzRW1wdHksCisgICAg
Y29uczogRjIoY29ucyksCisgICAgdW5jb25zOiB1bmNvbnMsCisgICAgYXBwZW5kOiBGMihhcHBl
bmQpLAorICAgIGNvbmNhdDogY29uY2F0LAorICAgIGxlbmd0aDogbGVuZ3RoLAorICAgIG1hcDog
RjIobWFwKSwKKyAgICBmaWx0ZXI6IEYyKGZpbHRlciksCisgICAgcmV2ZXJzZTogcmV2ZXJzZSwK
KyAgICBmb2xkbDogRjMoZm9sZGwpLAorICAgIGZvbGRyOiBGMyhmb2xkciksCisKKyAgICBzcGxp
dDogRjIoc3BsaXQpLAorICAgIGpvaW46IEYyKGpvaW4pLAorICAgIHJlcGVhdDogRjIocmVwZWF0
KSwKKworICAgIHNsaWNlOiBGMyhzbGljZSksCisgICAgbGVmdDogRjIobGVmdCksCisgICAgcmln
aHQ6IEYyKHJpZ2h0KSwKKyAgICBkcm9wTGVmdDogRjIoZHJvcExlZnQpLAorICAgIGRyb3BSaWdo
dDogRjIoZHJvcFJpZ2h0KSwKKworICAgIHBhZDogRjMocGFkKSwKKyAgICBwYWRMZWZ0OiBGMyhw
YWRMZWZ0KSwKKyAgICBwYWRSaWdodDogRjMocGFkUmlnaHQpLAorCisgICAgdHJpbTogdHJpbSwK
KyAgICB0cmltTGVmdDogdHJpbUxlZnQsCisgICAgdHJpbVJpZ2h0OiB0cmltUmlnaHQsCisKKyAg
ICB3b3Jkczogd29yZHMsCisgICAgbGluZXM6IGxpbmVzLAorCisgICAgdG9VcHBlcjogdG9VcHBl
ciwKKyAgICB0b0xvd2VyOiB0b0xvd2VyLAorCisgICAgYW55OiBGMihhbnkpLAorICAgIGFsbDog
RjIoYWxsKSwKKworICAgIGNvbnRhaW5zOiBGMihjb250YWlucyksCisgICAgc3RhcnRzV2l0aDog
RjIoc3RhcnRzV2l0aCksCisgICAgZW5kc1dpdGg6IEYyKGVuZHNXaXRoKSwKKyAgICBpbmRleGVz
OiBGMihpbmRleGVzKSwKKworICAgIHRvSW50OiB0b0ludCwKKyAgICB0b0Zsb2F0OiB0b0Zsb2F0
LAorICAgIHRvTGlzdDogdG9MaXN0LAorICAgIGZyb21MaXN0OiBmcm9tTGlzdAorfTsKKworfSgp
OworCisvL2ltcG9ydCBOYXRpdmUuVXRpbHMgLy8KKwordmFyIF9lbG1fbGFuZyRjb3JlJE5hdGl2
ZV9DaGFyID0gZnVuY3Rpb24oKSB7CisKK3JldHVybiB7CisgICAgZnJvbUNvZGU6IGZ1bmN0aW9u
KGMpIHsgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5jaHIoU3RyaW5nLmZyb21D
aGFyQ29kZShjKSk7IH0sCisgICAgdG9Db2RlOiBmdW5jdGlvbihjKSB7IHJldHVybiBjLmNoYXJD
b2RlQXQoMCk7IH0sCisgICAgdG9VcHBlcjogZnVuY3Rpb24oYykgeyByZXR1cm4gX2VsbV9sYW5n
JGNvcmUkTmF0aXZlX1V0aWxzLmNocihjLnRvVXBwZXJDYXNlKCkpOyB9LAorICAgIHRvTG93ZXI6
IGZ1bmN0aW9uKGMpIHsgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5jaHIoYy50
b0xvd2VyQ2FzZSgpKTsgfSwKKyAgICB0b0xvY2FsZVVwcGVyOiBmdW5jdGlvbihjKSB7IHJldHVy
biBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuY2hyKGMudG9Mb2NhbGVVcHBlckNhc2UoKSk7
IH0sCisgICAgdG9Mb2NhbGVMb3dlcjogZnVuY3Rpb24oYykgeyByZXR1cm4gX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX1V0aWxzLmNocihjLnRvTG9jYWxlTG93ZXJDYXNlKCkpOyB9Cit9OworCit9KCk7
Cit2YXIgX2VsbV9sYW5nJGNvcmUkQ2hhciRmcm9tQ29kZSA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2
ZV9DaGFyLmZyb21Db2RlOwordmFyIF9lbG1fbGFuZyRjb3JlJENoYXIkdG9Db2RlID0gX2VsbV9s
YW5nJGNvcmUkTmF0aXZlX0NoYXIudG9Db2RlOwordmFyIF9lbG1fbGFuZyRjb3JlJENoYXIkdG9M
b2NhbGVMb3dlciA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9DaGFyLnRvTG9jYWxlTG93ZXI7Cit2
YXIgX2VsbV9sYW5nJGNvcmUkQ2hhciR0b0xvY2FsZVVwcGVyID0gX2VsbV9sYW5nJGNvcmUkTmF0
aXZlX0NoYXIudG9Mb2NhbGVVcHBlcjsKK3ZhciBfZWxtX2xhbmckY29yZSRDaGFyJHRvTG93ZXIg
PSBfZWxtX2xhbmckY29yZSROYXRpdmVfQ2hhci50b0xvd2VyOwordmFyIF9lbG1fbGFuZyRjb3Jl
JENoYXIkdG9VcHBlciA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9DaGFyLnRvVXBwZXI7Cit2YXIg
X2VsbV9sYW5nJGNvcmUkQ2hhciRpc0JldHdlZW4gPSBGMygKKyAgICBmdW5jdGlvbiAobG93LCBo
aWdoLCAkY2hhcikgeworICAgICAgICB2YXIgY29kZSA9IF9lbG1fbGFuZyRjb3JlJENoYXIkdG9D
b2RlKCRjaGFyKTsKKyAgICAgICAgcmV0dXJuIChfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMu
Y21wKAorICAgICAgICAgICAgY29kZSwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJENoYXIk
dG9Db2RlKGxvdykpID4gLTEpICYmIChfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuY21wKAor
ICAgICAgICAgICAgY29kZSwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJENoYXIkdG9Db2Rl
KGhpZ2gpKSA8IDEpOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJENoYXIkaXNVcHBlciA9
IEEyKAorICAgIF9lbG1fbGFuZyRjb3JlJENoYXIkaXNCZXR3ZWVuLAorICAgIF9lbG1fbGFuZyRj
b3JlJE5hdGl2ZV9VdGlscy5jaHIoJ0EnKSwKKyAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRp
bHMuY2hyKCdaJykpOwordmFyIF9lbG1fbGFuZyRjb3JlJENoYXIkaXNMb3dlciA9IEEyKAorICAg
IF9lbG1fbGFuZyRjb3JlJENoYXIkaXNCZXR3ZWVuLAorICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2
ZV9VdGlscy5jaHIoJ2EnKSwKKyAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuY2hyKCd6
JykpOwordmFyIF9lbG1fbGFuZyRjb3JlJENoYXIkaXNEaWdpdCA9IEEyKAorICAgIF9lbG1fbGFu
ZyRjb3JlJENoYXIkaXNCZXR3ZWVuLAorICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5j
aHIoJzAnKSwKKyAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuY2hyKCc5JykpOwordmFy
IF9lbG1fbGFuZyRjb3JlJENoYXIkaXNPY3REaWdpdCA9IEEyKAorICAgIF9lbG1fbGFuZyRjb3Jl
JENoYXIkaXNCZXR3ZWVuLAorICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5jaHIoJzAn
KSwKKyAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuY2hyKCc3JykpOwordmFyIF9lbG1f
bGFuZyRjb3JlJENoYXIkaXNIZXhEaWdpdCA9IGZ1bmN0aW9uICgkY2hhcikgeworICAgIHJldHVy
biBfZWxtX2xhbmckY29yZSRDaGFyJGlzRGlnaXQoJGNoYXIpIHx8IChBMygKKyAgICAgICAgX2Vs
bV9sYW5nJGNvcmUkQ2hhciRpc0JldHdlZW4sCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2
ZV9VdGlscy5jaHIoJ2EnKSwKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNo
cignZicpLAorICAgICAgICAkY2hhcikgfHwgQTMoCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJENo
YXIkaXNCZXR3ZWVuLAorICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuY2hyKCdB
JyksCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5jaHIoJ0YnKSwKKyAgICAg
ICAgJGNoYXIpKTsKK307CisKK3ZhciBfZWxtX2xhbmckY29yZSRTdHJpbmckZnJvbUxpc3QgPSBf
ZWxtX2xhbmckY29yZSROYXRpdmVfU3RyaW5nLmZyb21MaXN0OwordmFyIF9lbG1fbGFuZyRjb3Jl
JFN0cmluZyR0b0xpc3QgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfU3RyaW5nLnRvTGlzdDsKK3Zh
ciBfZWxtX2xhbmckY29yZSRTdHJpbmckdG9GbG9hdCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9T
dHJpbmcudG9GbG9hdDsKK3ZhciBfZWxtX2xhbmckY29yZSRTdHJpbmckdG9JbnQgPSBfZWxtX2xh
bmckY29yZSROYXRpdmVfU3RyaW5nLnRvSW50OwordmFyIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRp
bmRpY2VzID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0cmluZy5pbmRleGVzOwordmFyIF9lbG1f
bGFuZyRjb3JlJFN0cmluZyRpbmRleGVzID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0cmluZy5p
bmRleGVzOwordmFyIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRlbmRzV2l0aCA9IF9lbG1fbGFuZyRj
b3JlJE5hdGl2ZV9TdHJpbmcuZW5kc1dpdGg7Cit2YXIgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJHN0
YXJ0c1dpdGggPSBfZWxtX2xhbmckY29yZSROYXRpdmVfU3RyaW5nLnN0YXJ0c1dpdGg7Cit2YXIg
X2VsbV9sYW5nJGNvcmUkU3RyaW5nJGNvbnRhaW5zID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0
cmluZy5jb250YWluczsKK3ZhciBfZWxtX2xhbmckY29yZSRTdHJpbmckYWxsID0gX2VsbV9sYW5n
JGNvcmUkTmF0aXZlX1N0cmluZy5hbGw7Cit2YXIgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGFueSA9
IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TdHJpbmcuYW55OwordmFyIF9lbG1fbGFuZyRjb3JlJFN0
cmluZyR0b0xvd2VyID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0cmluZy50b0xvd2VyOwordmFy
IF9lbG1fbGFuZyRjb3JlJFN0cmluZyR0b1VwcGVyID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0
cmluZy50b1VwcGVyOwordmFyIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRsaW5lcyA9IF9lbG1fbGFu
ZyRjb3JlJE5hdGl2ZV9TdHJpbmcubGluZXM7Cit2YXIgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJHdv
cmRzID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0cmluZy53b3JkczsKK3ZhciBfZWxtX2xhbmck
Y29yZSRTdHJpbmckdHJpbVJpZ2h0ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0cmluZy50cmlt
UmlnaHQ7Cit2YXIgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJHRyaW1MZWZ0ID0gX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX1N0cmluZy50cmltTGVmdDsKK3ZhciBfZWxtX2xhbmckY29yZSRTdHJpbmckdHJp
bSA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TdHJpbmcudHJpbTsKK3ZhciBfZWxtX2xhbmckY29y
ZSRTdHJpbmckcGFkUmlnaHQgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfU3RyaW5nLnBhZFJpZ2h0
OwordmFyIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRwYWRMZWZ0ID0gX2VsbV9sYW5nJGNvcmUkTmF0
aXZlX1N0cmluZy5wYWRMZWZ0OwordmFyIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRwYWQgPSBfZWxt
X2xhbmckY29yZSROYXRpdmVfU3RyaW5nLnBhZDsKK3ZhciBfZWxtX2xhbmckY29yZSRTdHJpbmck
ZHJvcFJpZ2h0ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0cmluZy5kcm9wUmlnaHQ7Cit2YXIg
X2VsbV9sYW5nJGNvcmUkU3RyaW5nJGRyb3BMZWZ0ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0
cmluZy5kcm9wTGVmdDsKK3ZhciBfZWxtX2xhbmckY29yZSRTdHJpbmckcmlnaHQgPSBfZWxtX2xh
bmckY29yZSROYXRpdmVfU3RyaW5nLnJpZ2h0OwordmFyIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRs
ZWZ0ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0cmluZy5sZWZ0OwordmFyIF9lbG1fbGFuZyRj
b3JlJFN0cmluZyRzbGljZSA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TdHJpbmcuc2xpY2U7Cit2
YXIgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJHJlcGVhdCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9T
dHJpbmcucmVwZWF0OwordmFyIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRqb2luID0gX2VsbV9sYW5n
JGNvcmUkTmF0aXZlX1N0cmluZy5qb2luOwordmFyIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRzcGxp
dCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TdHJpbmcuc3BsaXQ7Cit2YXIgX2VsbV9sYW5nJGNv
cmUkU3RyaW5nJGZvbGRyID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0cmluZy5mb2xkcjsKK3Zh
ciBfZWxtX2xhbmckY29yZSRTdHJpbmckZm9sZGwgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfU3Ry
aW5nLmZvbGRsOwordmFyIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRyZXZlcnNlID0gX2VsbV9sYW5n
JGNvcmUkTmF0aXZlX1N0cmluZy5yZXZlcnNlOwordmFyIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRm
aWx0ZXIgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfU3RyaW5nLmZpbHRlcjsKK3ZhciBfZWxtX2xh
bmckY29yZSRTdHJpbmckbWFwID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0cmluZy5tYXA7Cit2
YXIgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGxlbmd0aCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9T
dHJpbmcubGVuZ3RoOwordmFyIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRjb25jYXQgPSBfZWxtX2xh
bmckY29yZSROYXRpdmVfU3RyaW5nLmNvbmNhdDsKK3ZhciBfZWxtX2xhbmckY29yZSRTdHJpbmck
YXBwZW5kID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0cmluZy5hcHBlbmQ7Cit2YXIgX2VsbV9s
YW5nJGNvcmUkU3RyaW5nJHVuY29ucyA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TdHJpbmcudW5j
b25zOwordmFyIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRjb25zID0gX2VsbV9sYW5nJGNvcmUkTmF0
aXZlX1N0cmluZy5jb25zOwordmFyIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRmcm9tQ2hhciA9IGZ1
bmN0aW9uICgkY2hhcikgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckY29yZSRTdHJpbmckY29u
cywgJGNoYXIsICcnKTsKK307Cit2YXIgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGlzRW1wdHkgPSBf
ZWxtX2xhbmckY29yZSROYXRpdmVfU3RyaW5nLmlzRW1wdHk7CisKKy8vaW1wb3J0IE1heWJlLCBO
YXRpdmUuTGlzdCAvLworCit2YXIgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1JlZ2V4ID0gZnVuY3Rp
b24oKSB7CisKK2Z1bmN0aW9uIGVzY2FwZShzdHIpCit7CisgICAgcmV0dXJuIHN0ci5yZXBsYWNl
KC9bLVwvXFxeJCorPy4oKXxbXF17fV0vZywgJ1xcJCYnKTsKK30KK2Z1bmN0aW9uIGNhc2VJbnNl
bnNpdGl2ZShyZSkKK3sKKyAgICByZXR1cm4gbmV3IFJlZ0V4cChyZS5zb3VyY2UsICdnaScpOwor
fQorZnVuY3Rpb24gcmVnZXgocmF3KQoreworICAgIHJldHVybiBuZXcgUmVnRXhwKHJhdywgJ2cn
KTsKK30KKworZnVuY3Rpb24gY29udGFpbnMocmUsIHN0cmluZykKK3sKKyAgICByZXR1cm4gc3Ry
aW5nLm1hdGNoKHJlKSAhPT0gbnVsbDsKK30KKworZnVuY3Rpb24gZmluZChuLCByZSwgc3RyKQor
eworICAgIG4gPSBuLmN0b3IgPT09ICdBbGwnID8gSW5maW5pdHkgOiBuLl8wOworICAgIHZhciBv
dXQgPSBbXTsKKyAgICB2YXIgbnVtYmVyID0gMDsKKyAgICB2YXIgc3RyaW5nID0gc3RyOworICAg
IHZhciBsYXN0SW5kZXggPSByZS5sYXN0SW5kZXg7CisgICAgdmFyIHByZXZMYXN0SW5kZXggPSAt
MTsKKyAgICB2YXIgcmVzdWx0OworICAgIHdoaWxlIChudW1iZXIrKyA8IG4gJiYgKHJlc3VsdCA9
IHJlLmV4ZWMoc3RyaW5nKSkpCisgICAgeworICAgICAgICBpZiAocHJldkxhc3RJbmRleCA9PT0g
cmUubGFzdEluZGV4KSBicmVhazsKKyAgICAgICAgdmFyIGkgPSByZXN1bHQubGVuZ3RoIC0gMTsK
KyAgICAgICAgdmFyIHN1YnMgPSBuZXcgQXJyYXkoaSk7CisgICAgICAgIHdoaWxlIChpID4gMCkK
KyAgICAgICAgeworICAgICAgICAgICAgdmFyIHN1Ym1hdGNoID0gcmVzdWx0W2ldOworICAgICAg
ICAgICAgc3Vic1stLWldID0gc3VibWF0Y2ggPT09IHVuZGVmaW5lZAorICAgICAgICAgICAgICAg
ID8gX2VsbV9sYW5nJGNvcmUkTWF5YmUkTm90aGluZworICAgICAgICAgICAgICAgIDogX2VsbV9s
YW5nJGNvcmUkTWF5YmUkSnVzdChzdWJtYXRjaCk7CisgICAgICAgIH0KKyAgICAgICAgb3V0LnB1
c2goeworICAgICAgICAgICAgbWF0Y2g6IHJlc3VsdFswXSwKKyAgICAgICAgICAgIHN1Ym1hdGNo
ZXM6IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheShzdWJzKSwKKyAgICAgICAg
ICAgIGluZGV4OiByZXN1bHQuaW5kZXgsCisgICAgICAgICAgICBudW1iZXI6IG51bWJlcgorICAg
ICAgICB9KTsKKyAgICAgICAgcHJldkxhc3RJbmRleCA9IHJlLmxhc3RJbmRleDsKKyAgICB9Cisg
ICAgcmUubGFzdEluZGV4ID0gbGFzdEluZGV4OworICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRO
YXRpdmVfTGlzdC5mcm9tQXJyYXkob3V0KTsKK30KKworZnVuY3Rpb24gcmVwbGFjZShuLCByZSwg
cmVwbGFjZXIsIHN0cmluZykKK3sKKyAgICBuID0gbi5jdG9yID09PSAnQWxsJyA/IEluZmluaXR5
IDogbi5fMDsKKyAgICB2YXIgY291bnQgPSAwOworICAgIGZ1bmN0aW9uIGpzUmVwbGFjZXIobWF0
Y2gpCisgICAgeworICAgICAgICBpZiAoY291bnQrKyA+PSBuKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbWF0Y2g7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGkgPSBhcmd1bWVudHMu
bGVuZ3RoIC0gMzsKKyAgICAgICAgdmFyIHN1Ym1hdGNoZXMgPSBuZXcgQXJyYXkoaSk7CisgICAg
ICAgIHdoaWxlIChpID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIHN1Ym1hdGNoID0g
YXJndW1lbnRzW2ldOworICAgICAgICAgICAgc3VibWF0Y2hlc1stLWldID0gc3VibWF0Y2ggPT09
IHVuZGVmaW5lZAorICAgICAgICAgICAgICAgID8gX2VsbV9sYW5nJGNvcmUkTWF5YmUkTm90aGlu
ZworICAgICAgICAgICAgICAgIDogX2VsbV9sYW5nJGNvcmUkTWF5YmUkSnVzdChzdWJtYXRjaCk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlcGxhY2VyKHsKKyAgICAgICAgICAgIG1hdGNo
OiBtYXRjaCwKKyAgICAgICAgICAgIHN1Ym1hdGNoZXM6IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9M
aXN0LmZyb21BcnJheShzdWJtYXRjaGVzKSwKKyAgICAgICAgICAgIGluZGV4OiBhcmd1bWVudHNb
aSAtIDFdLAorICAgICAgICAgICAgbnVtYmVyOiBjb3VudAorICAgICAgICB9KTsKKyAgICB9Cisg
ICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKHJlLCBqc1JlcGxhY2VyKTsKK30KKworZnVuY3Rpb24g
c3BsaXQobiwgcmUsIHN0cikKK3sKKyAgICBuID0gbi5jdG9yID09PSAnQWxsJyA/IEluZmluaXR5
IDogbi5fMDsKKyAgICBpZiAobiA9PT0gSW5maW5pdHkpCisgICAgeworICAgICAgICByZXR1cm4g
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KHN0ci5zcGxpdChyZSkpOworICAg
IH0KKyAgICB2YXIgc3RyaW5nID0gc3RyOworICAgIHZhciByZXN1bHQ7CisgICAgdmFyIG91dCA9
IFtdOworICAgIHZhciBzdGFydCA9IHJlLmxhc3RJbmRleDsKKyAgICB3aGlsZSAobi0tKQorICAg
IHsKKyAgICAgICAgaWYgKCEocmVzdWx0ID0gcmUuZXhlYyhzdHJpbmcpKSkgYnJlYWs7CisgICAg
ICAgIG91dC5wdXNoKHN0cmluZy5zbGljZShzdGFydCwgcmVzdWx0LmluZGV4KSk7CisgICAgICAg
IHN0YXJ0ID0gcmUubGFzdEluZGV4OworICAgIH0KKyAgICBvdXQucHVzaChzdHJpbmcuc2xpY2Uo
c3RhcnQpKTsKKyAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5
KG91dCk7Cit9CisKK3JldHVybiB7CisgICAgcmVnZXg6IHJlZ2V4LAorICAgIGNhc2VJbnNlbnNp
dGl2ZTogY2FzZUluc2Vuc2l0aXZlLAorICAgIGVzY2FwZTogZXNjYXBlLAorCisgICAgY29udGFp
bnM6IEYyKGNvbnRhaW5zKSwKKyAgICBmaW5kOiBGMyhmaW5kKSwKKyAgICByZXBsYWNlOiBGNChy
ZXBsYWNlKSwKKyAgICBzcGxpdDogRjMoc3BsaXQpCit9OworCit9KCk7CisKK3ZhciBfZWxtX2xh
bmckY29yZSRSZWdleCRzcGxpdCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9SZWdleC5zcGxpdDsK
K3ZhciBfZWxtX2xhbmckY29yZSRSZWdleCRyZXBsYWNlID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZl
X1JlZ2V4LnJlcGxhY2U7Cit2YXIgX2VsbV9sYW5nJGNvcmUkUmVnZXgkZmluZCA9IF9lbG1fbGFu
ZyRjb3JlJE5hdGl2ZV9SZWdleC5maW5kOwordmFyIF9lbG1fbGFuZyRjb3JlJFJlZ2V4JGNvbnRh
aW5zID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1JlZ2V4LmNvbnRhaW5zOwordmFyIF9lbG1fbGFu
ZyRjb3JlJFJlZ2V4JGNhc2VJbnNlbnNpdGl2ZSA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9SZWdl
eC5jYXNlSW5zZW5zaXRpdmU7Cit2YXIgX2VsbV9sYW5nJGNvcmUkUmVnZXgkcmVnZXggPSBfZWxt
X2xhbmckY29yZSROYXRpdmVfUmVnZXgucmVnZXg7Cit2YXIgX2VsbV9sYW5nJGNvcmUkUmVnZXgk
ZXNjYXBlID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1JlZ2V4LmVzY2FwZTsKK3ZhciBfZWxtX2xh
bmckY29yZSRSZWdleCRNYXRjaCA9IEY0KAorICAgIGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7Cisg
ICAgICAgIHJldHVybiB7bWF0Y2g6IGEsIHN1Ym1hdGNoZXM6IGIsIGluZGV4OiBjLCBudW1iZXI6
IGR9OworICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJFJlZ2V4JFJlZ2V4ID0ge2N0b3I6ICdS
ZWdleCd9OwordmFyIF9lbG1fbGFuZyRjb3JlJFJlZ2V4JEF0TW9zdCA9IGZ1bmN0aW9uIChhKSB7
CisgICAgcmV0dXJuIHtjdG9yOiAnQXRNb3N0JywgXzA6IGF9OworfTsKK3ZhciBfZWxtX2xhbmck
Y29yZSRSZWdleCRBbGwgPSB7Y3RvcjogJ0FsbCd9OworCit2YXIgX2VsbV9jb21tdW5pdHkkc3Ry
aW5nX2V4dHJhJFN0cmluZ19FeHRyYSRsZWZ0T2ZCYWNrID0gRjIoCisgICAgZnVuY3Rpb24gKHBh
dHRlcm4sIHN0cmluZykgeworICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICBfZWxtX2xh
bmckY29yZSRNYXliZSR3aXRoRGVmYXVsdCwKKyAgICAgICAgICAgICcnLAorICAgICAgICAgICAg
QTIoCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTWF5YmUkbWFwLAorICAgICAgICAg
ICAgICAgIEEyKF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRmbGlwLCBfZWxtX2xhbmckY29yZSRTdHJp
bmckbGVmdCwgc3RyaW5nKSwKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRMaXN0JGhl
YWQoCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3QkcmV2ZXJzZSgKKyAg
ICAgICAgICAgICAgICAgICAgICAgIEEyKF9lbG1fbGFuZyRjb3JlJFN0cmluZyRpbmRleGVzLCBw
YXR0ZXJuLCBzdHJpbmcpKSkpKTsKKyAgICB9KTsKK3ZhciBfZWxtX2NvbW11bml0eSRzdHJpbmdf
ZXh0cmEkU3RyaW5nX0V4dHJhJHJpZ2h0T2ZCYWNrID0gRjIoCisgICAgZnVuY3Rpb24gKHBhdHRl
cm4sIHN0cmluZykgeworICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICBfZWxtX2xhbmck
Y29yZSRNYXliZSR3aXRoRGVmYXVsdCwKKyAgICAgICAgICAgICcnLAorICAgICAgICAgICAgQTIo
CisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTWF5YmUkbWFwLAorICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uIChfcDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEEzKAorICAg
ICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJGZsaXAsCisgICAgICAg
ICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRTdHJpbmckZHJvcExlZnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICBzdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICBBMigKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBGMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZnVuY3Rpb24gKHgsIHkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB4ICsgeTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGxlbmd0aChw
YXR0ZXJuKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcDApKTsKKyAgICAgICAgICAg
ICAgICB9LAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3QkaGVhZCgKKyAgICAg
ICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdCRyZXZlcnNlKAorICAgICAgICAgICAg
ICAgICAgICAgICAgQTIoX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGluZGV4ZXMsIHBhdHRlcm4sIHN0
cmluZykpKSkpOworICAgIH0pOwordmFyIF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJp
bmdfRXh0cmEkbGVmdE9mID0gRjIoCisgICAgZnVuY3Rpb24gKHBhdHRlcm4sIHN0cmluZykgewor
ICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRTdHJpbmckam9p
biwKKyAgICAgICAgICAgICcnLAorICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAgX2Vs
bV9sYW5nJGNvcmUkTGlzdCRtYXAsCisgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9wMSkgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICAgICAgICAgICAgICBf
ZWxtX2xhbmckY29yZSRNYXliZSR3aXRoRGVmYXVsdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTWF5YmUkb25lT2Yo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF8pIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF8uc3VibWF0Y2hlczsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9KF9wMSkpKTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAg
ICAgIEEzKAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRmaW5kLAor
ICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRBdE1vc3QoMSksCisgICAg
ICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFJlZ2V4JHJlZ2V4KAorICAgICAgICAgICAg
ICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNv
cmUkQmFzaWNzX29wc1snKysnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXiguKj8p
JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRlc2Nh
cGUocGF0dGVybikpKSwKKyAgICAgICAgICAgICAgICAgICAgc3RyaW5nKSkpOworICAgIH0pOwor
dmFyIF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkcmlnaHRPZiA9IEYy
KAorICAgIGZ1bmN0aW9uIChwYXR0ZXJuLCBzdHJpbmcpIHsKKyAgICAgICAgcmV0dXJuIEEyKAor
ICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGpvaW4sCisgICAgICAgICAgICAnJywK
KyAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3QkbWFw
LAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfcDIpIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEEyKAorICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTWF5YmUk
d2l0aERlZmF1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAnJywKKyAgICAgICAgICAgICAg
ICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE1heWJlJG9uZU9mKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZ1bmN0aW9uIChfKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBfLnN1Ym1hdGNoZXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfShfcDIp
KSk7CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBBMygKKyAgICAgICAgICAg
ICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkZmluZCwKKyAgICAgICAgICAgICAgICAgICAg
X2VsbV9sYW5nJGNvcmUkUmVnZXgkQXRNb3N0KDEpLAorICAgICAgICAgICAgICAgICAgICBfZWxt
X2xhbmckY29yZSRSZWdleCRyZWdleCgKKyAgICAgICAgICAgICAgICAgICAgICAgIEEyKAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHNbJysrJ10s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkZXNjYXBl
KHBhdHRlcm4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICcoLiopJCcpKSwKKyAgICAg
ICAgICAgICAgICAgICAgc3RyaW5nKSkpOworICAgIH0pOwordmFyIF9lbG1fY29tbXVuaXR5JHN0
cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkc3RyaXBUYWdzID0gZnVuY3Rpb24gKHN0cmluZykgewor
ICAgIHJldHVybiBBNCgKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkcmVwbGFjZSwKKyAg
ICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkQWxsLAorICAgICAgICBfZWxtX2xhbmckY29yZSRS
ZWdleCRyZWdleCgnPFxcLz9bXj5dKz4nKSwKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNz
JGFsd2F5cygnJyksCisgICAgICAgIHN0cmluZyk7Cit9OwordmFyIF9lbG1fY29tbXVuaXR5JHN0
cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkdG9TZW50ZW5jZUhlbHBlciA9IEYzKAorICAgIGZ1bmN0
aW9uIChsYXN0UGFydCwgc2VudGVuY2UsIGxpc3QpIHsKKyAgICAgICAgdG9TZW50ZW5jZUhlbHBl
cjoKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIHZhciBfcDMgPSBsaXN0Owor
ICAgICAgICAgICAgaWYgKF9wMy5jdG9yID09PSAnW10nKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHNlbnRlbmNlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAo
X3AzLl8xLmN0b3IgPT09ICdbXScpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEEyKAor
ICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1snKysnXSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIHNlbnRlbmNlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgQTIoX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1snKysnXSwgbGFzdFBhcnQsIF9wMy5fMCkp
OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBfdjEg
PSBsYXN0UGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgIF92MiA9IEEyKAorICAgICAgICAg
ICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1snKysnXSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHNlbnRlbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgQTIoX2Vs
bV9sYW5nJGNvcmUkQmFzaWNzX29wc1snKysnXSwgJywgJywgX3AzLl8wKSksCisgICAgICAgICAg
ICAgICAgICAgICAgICBfdjMgPSBfcDMuXzE7CisgICAgICAgICAgICAgICAgICAgIGxhc3RQYXJ0
ID0gX3YxOworICAgICAgICAgICAgICAgICAgICBzZW50ZW5jZSA9IF92MjsKKyAgICAgICAgICAg
ICAgICAgICAgbGlzdCA9IF92MzsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUgdG9TZW50
ZW5jZUhlbHBlcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9KTsKK3ZhciBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJHRv
U2VudGVuY2VCYXNlQ2FzZSA9IGZ1bmN0aW9uIChsaXN0KSB7CisgICAgdmFyIF9wNCA9IGxpc3Q7
CisgICAgX3Y0XzI6CisgICAgZG8geworICAgICAgICBpZiAoX3A0LmN0b3IgPT09ICc6OicpIHsK
KyAgICAgICAgICAgIGlmIChfcDQuXzEuY3RvciA9PT0gJ1tdJykgeworICAgICAgICAgICAgICAg
IHJldHVybiBfcDQuXzA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlm
IChfcDQuXzEuXzEuY3RvciA9PT0gJ1tdJykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
QTIoCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWycr
KyddLAorICAgICAgICAgICAgICAgICAgICAgICAgX3A0Ll8wLAorICAgICAgICAgICAgICAgICAg
ICAgICAgQTIoX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1snKysnXSwgJyBhbmQgJywgX3A0Ll8x
Ll8wKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWsgX3Y0XzI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgYnJlYWsgX3Y0XzI7CisgICAgICAgIH0KKyAgICB9IHdoaWxlKGZh
bHNlKTsKKyAgICByZXR1cm4gJyc7Cit9OwordmFyIF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRy
YSRTdHJpbmdfRXh0cmEkdG9TZW50ZW5jZU94Zm9yZCA9IGZ1bmN0aW9uIChsaXN0KSB7CisgICAg
dmFyIF9wNSA9IGxpc3Q7CisgICAgaWYgKCgoX3A1LmN0b3IgPT09ICc6OicpICYmIChfcDUuXzEu
Y3RvciA9PT0gJzo6JykpICYmIChfcDUuXzEuXzEuY3RvciA9PT0gJzo6JykpIHsKKyAgICAgICAg
cmV0dXJuIEEzKAorICAgICAgICAgICAgX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmlu
Z19FeHRyYSR0b1NlbnRlbmNlSGVscGVyLAorICAgICAgICAgICAgJywgYW5kICcsCisgICAgICAg
ICAgICBBMigKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWycrKydd
LAorICAgICAgICAgICAgICAgIF9wNS5fMCwKKyAgICAgICAgICAgICAgICBBMihfZWxtX2xhbmck
Y29yZSRCYXNpY3Nfb3BzWycrKyddLCAnLCAnLCBfcDUuXzEuXzApKSwKKyAgICAgICAgICAgIEEy
KF9lbG1fbGFuZyRjb3JlJExpc3Rfb3BzWyc6OiddLCBfcDUuXzEuXzEuXzAsIF9wNS5fMS5fMS5f
MSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBfZWxtX2NvbW11bml0eSRzdHJpbmdf
ZXh0cmEkU3RyaW5nX0V4dHJhJHRvU2VudGVuY2VCYXNlQ2FzZShsaXN0KTsKKyAgICB9Cit9Owor
dmFyIF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkdG9TZW50ZW5jZSA9
IGZ1bmN0aW9uIChsaXN0KSB7CisgICAgdmFyIF9wNiA9IGxpc3Q7CisgICAgaWYgKCgoX3A2LmN0
b3IgPT09ICc6OicpICYmIChfcDYuXzEuY3RvciA9PT0gJzo6JykpICYmIChfcDYuXzEuXzEuY3Rv
ciA9PT0gJzo6JykpIHsKKyAgICAgICAgcmV0dXJuIEEzKAorICAgICAgICAgICAgX2VsbV9jb21t
dW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSR0b1NlbnRlbmNlSGVscGVyLAorICAgICAg
ICAgICAgJyBhbmQgJywKKyAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgIF9lbG1fbGFu
ZyRjb3JlJEJhc2ljc19vcHNbJysrJ10sCisgICAgICAgICAgICAgICAgX3A2Ll8wLAorICAgICAg
ICAgICAgICAgIEEyKF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHNbJysrJ10sICcsICcsIF9wNi5f
MS5fMCkpLAorICAgICAgICAgICAgQTIoX2VsbV9sYW5nJGNvcmUkTGlzdF9vcHNbJzo6J10sIF9w
Ni5fMS5fMS5fMCwgX3A2Ll8xLl8xLl8xKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJu
IF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkdG9TZW50ZW5jZUJhc2VD
YXNlKGxpc3QpOworICAgIH0KK307Cit2YXIgX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0
cmluZ19FeHRyYSRlbGxpcHNpc1dpdGggPSBGMygKKyAgICBmdW5jdGlvbiAoaG93TG9uZywgYXBw
ZW5kLCBzdHJpbmcpIHsKKyAgICAgICAgcmV0dXJuIChfZWxtX2xhbmckY29yZSROYXRpdmVfVXRp
bHMuY21wKAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGxlbmd0aChzdHJpbmcp
LAorICAgICAgICAgICAgaG93TG9uZykgPCAxKSA/IHN0cmluZyA6IEEyKAorICAgICAgICAgICAg
X2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1snKysnXSwKKyAgICAgICAgICAgIEEyKAorICAgICAg
ICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRsZWZ0LAorICAgICAgICAgICAgICAgIGhv
d0xvbmcgLSBfZWxtX2xhbmckY29yZSRTdHJpbmckbGVuZ3RoKGFwcGVuZCksCisgICAgICAgICAg
ICAgICAgc3RyaW5nKSwKKyAgICAgICAgICAgIGFwcGVuZCk7CisgICAgfSk7Cit2YXIgX2VsbV9j
b21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSRlbGxpcHNpcyA9IEYyKAorICAgIGZ1
bmN0aW9uIChob3dMb25nLCBzdHJpbmcpIHsKKyAgICAgICAgcmV0dXJuIEEzKF9lbG1fY29tbXVu
aXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkZWxsaXBzaXNXaXRoLCBob3dMb25nLCAnLi4u
Jywgc3RyaW5nKTsKKyAgICB9KTsKK3ZhciBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3Ry
aW5nX0V4dHJhJGNvdW50T2NjdXJyZW5jZXMgPSBGMigKKyAgICBmdW5jdGlvbiAobmVlZGxlLCBo
YXlzdGFjaykgeworICAgICAgICByZXR1cm4gKF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5l
cSgKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRsZW5ndGgobmVlZGxlKSwKKyAg
ICAgICAgICAgIDApIHx8IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5lcSgKKyAgICAgICAg
ICAgIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRsZW5ndGgoaGF5c3RhY2spLAorICAgICAgICAgICAg
MCkpID8gMCA6IF9lbG1fbGFuZyRjb3JlJExpc3QkbGVuZ3RoKAorICAgICAgICAgICAgQTIoX2Vs
bV9sYW5nJGNvcmUkU3RyaW5nJGluZGV4ZXMsIG5lZWRsZSwgaGF5c3RhY2spKTsKKyAgICB9KTsK
K3ZhciBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJHVuaW5kZW50ID0g
ZnVuY3Rpb24gKG11bHRpbGluZVN0aW5nKSB7CisgICAgdmFyIGlzTm90V2hpdGVzcGFjZSA9IGZ1
bmN0aW9uICgkY2hhcikgeworICAgICAgICByZXR1cm4gKCFfZWxtX2xhbmckY29yZSROYXRpdmVf
VXRpbHMuZXEoCisgICAgICAgICAgICAkY2hhciwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3Jl
JE5hdGl2ZV9VdGlscy5jaHIoJyAnKSkpICYmICghX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxz
LmVxKAorICAgICAgICAgICAgJGNoYXIsCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRp
dmVfVXRpbHMuY2hyKCdcdCcpKSk7CisgICAgfTsKKyAgICB2YXIgY291bnRMZWFkaW5nV2hpdGVz
cGFjZSA9IEYyKAorICAgICAgICBmdW5jdGlvbiAoY291bnQsIGxpbmUpIHsKKyAgICAgICAgICAg
IGNvdW50TGVhZGluZ1doaXRlc3BhY2U6CisgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAg
ICAgICAgICAgICAgIHZhciBfcDcgPSBfZWxtX2xhbmckY29yZSRTdHJpbmckdW5jb25zKGxpbmUp
OworICAgICAgICAgICAgICAgIGlmIChfcDcuY3RvciA9PT0gJ05vdGhpbmcnKSB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBjb3VudDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICB2YXIgX3A5ID0gX3A3Ll8wLl8xOworICAgICAgICAgICAgICAgICAg
ICB2YXIgX3A4ID0gX3A3Ll8wLl8wOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9wOC52
YWx1ZU9mKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJyAnOgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBfdjkgPSBjb3VudCArIDEsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF92MTAgPSBfcDk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y291bnQgPSBfdjk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IF92MTA7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgY291bnRMZWFkaW5nV2hpdGVzcGFj
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1x0JzoKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgX3YxMSA9IGNvdW50ICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX3YxMiA9IF9wOTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCA9
IF92MTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IF92MTI7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWUgY291bnRMZWFkaW5nV2hpdGVzcGFjZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGNvdW50OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB2YXIgbGluZXMgPSBfZWxtX2xhbmck
Y29yZSRTdHJpbmckbGluZXMobXVsdGlsaW5lU3RpbmcpOworICAgIHZhciBtaW5MZWFkID0gQTIo
CisgICAgICAgIF9lbG1fbGFuZyRjb3JlJE1heWJlJHdpdGhEZWZhdWx0LAorICAgICAgICAwLAor
ICAgICAgICBfZWxtX2xhbmckY29yZSRMaXN0JG1pbmltdW0oCisgICAgICAgICAgICBBMigKKyAg
ICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRMaXN0JG1hcCwKKyAgICAgICAgICAgICAgICBj
b3VudExlYWRpbmdXaGl0ZXNwYWNlKDApLAorICAgICAgICAgICAgICAgIEEyKAorICAgICAgICAg
ICAgICAgICAgICBfZWxtX2xhbmckY29yZSRMaXN0JGZpbHRlciwKKyAgICAgICAgICAgICAgICAg
ICAgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGFueShpc05vdFdoaXRlc3BhY2UpLAorICAgICAgICAg
ICAgICAgICAgICBsaW5lcykpKSk7CisgICAgcmV0dXJuIEEyKAorICAgICAgICBfZWxtX2xhbmck
Y29yZSRTdHJpbmckam9pbiwKKyAgICAgICAgJ1xuJywKKyAgICAgICAgQTIoCisgICAgICAgICAg
ICBfZWxtX2xhbmckY29yZSRMaXN0JG1hcCwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFN0
cmluZyRkcm9wTGVmdChtaW5MZWFkKSwKKyAgICAgICAgICAgIGxpbmVzKSk7Cit9OwordmFyIF9l
bG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkZGFzaGVyaXplID0gZnVuY3Rp
b24gKHN0cmluZykgeworICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRTdHJpbmckdG9Mb3dlcigK
KyAgICAgICAgQTQoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRyZXBsYWNlLAor
ICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkQWxsLAorICAgICAgICAgICAgX2VsbV9s
YW5nJGNvcmUkUmVnZXgkcmVnZXgoJ1tfLVxcc10rJyksCisgICAgICAgICAgICBfZWxtX2xhbmck
Y29yZSRCYXNpY3MkYWx3YXlzKCctJyksCisgICAgICAgICAgICBBNCgKKyAgICAgICAgICAgICAg
ICBfZWxtX2xhbmckY29yZSRSZWdleCRyZXBsYWNlLAorICAgICAgICAgICAgICAgIF9lbG1fbGFu
ZyRjb3JlJFJlZ2V4JEFsbCwKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRy
ZWdleCgnKFtBLVpdKScpLAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfcDEwKSB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1f
bGFuZyRjb3JlJFN0cmluZyRhcHBlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAnLScsCisg
ICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoXykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBfLm1hdGNoOworICAgICAgICAgICAgICAgICAgICAgICAgfShfcDEw
KSk7CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRT
dHJpbmckdHJpbShzdHJpbmcpKSkpOworfTsKK3ZhciBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0
cmEkU3RyaW5nX0V4dHJhJHVuZGVyc2NvcmVkID0gZnVuY3Rpb24gKHN0cmluZykgeworICAgIHJl
dHVybiBfZWxtX2xhbmckY29yZSRTdHJpbmckdG9Mb3dlcigKKyAgICAgICAgQTQoCisgICAgICAg
ICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRyZXBsYWNlLAorICAgICAgICAgICAgX2VsbV9sYW5n
JGNvcmUkUmVnZXgkQWxsLAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkcmVnZXgo
J1tfLVxcc10rJyksCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRCYXNpY3MkYWx3YXlzKCdf
JyksCisgICAgICAgICAgICBBNCgKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdl
eCRyZXBsYWNlLAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFJlZ2V4JEFsbCwKKyAg
ICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRyZWdleCgnKFthLXpcXGRdKShbQS1a
XSspJyksCisgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9wMTEpIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUk
U3RyaW5nJGpvaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAnXycsCisgICAgICAgICAgICAg
ICAgICAgICAgICBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29y
ZSRMaXN0JGZpbHRlck1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmck
Y29yZSRCYXNpY3MkaWRlbnRpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rp
b24gKF8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF8uc3VibWF0
Y2hlczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KF9wMTEpKSk7CisgICAgICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRTdHJpbmckdHJpbShzdHJp
bmcpKSkpOworfTsKK3ZhciBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJh
JHVuc3Vycm91bmQgPSBGMigKKyAgICBmdW5jdGlvbiAod3JhcCwgc3RyaW5nKSB7CisgICAgICAg
IGlmIChBMihfZWxtX2xhbmckY29yZSRTdHJpbmckc3RhcnRzV2l0aCwgd3JhcCwgc3RyaW5nKSAm
JiBBMihfZWxtX2xhbmckY29yZSRTdHJpbmckZW5kc1dpdGgsIHdyYXAsIHN0cmluZykpIHsKKyAg
ICAgICAgICAgIHZhciBsZW5ndGggPSBfZWxtX2xhbmckY29yZSRTdHJpbmckbGVuZ3RoKHdyYXAp
OworICAgICAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3Jl
JFN0cmluZyRkcm9wUmlnaHQsCisgICAgICAgICAgICAgICAgbGVuZ3RoLAorICAgICAgICAgICAg
ICAgIEEyKF9lbG1fbGFuZyRjb3JlJFN0cmluZyRkcm9wTGVmdCwgbGVuZ3RoLCBzdHJpbmcpKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBzdHJpbmc7CisgICAgICAgIH0K
KyAgICB9KTsKK3ZhciBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJHVu
cXVvdGUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fY29tbXVuaXR5
JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkdW5zdXJyb3VuZCwgJ1wiJywgc3RyaW5nKTsKK307
Cit2YXIgX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSRzdXJyb3VuZCA9
IEYyKAorICAgIGZ1bmN0aW9uICh3cmFwLCBzdHJpbmcpIHsKKyAgICAgICAgcmV0dXJuIEEyKAor
ICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1snKysnXSwKKyAgICAgICAgICAg
IHdyYXAsCisgICAgICAgICAgICBBMihfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWycrKyddLCBz
dHJpbmcsIHdyYXApKTsKKyAgICB9KTsKK3ZhciBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEk
U3RyaW5nX0V4dHJhJHF1b3RlID0gZnVuY3Rpb24gKHN0cmluZykgeworICAgIHJldHVybiBBMihf
ZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJHN1cnJvdW5kLCAnXCInLCBz
dHJpbmcpOworfTsKK3ZhciBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJh
JGNhbWVsaXplID0gZnVuY3Rpb24gKHN0cmluZykgeworICAgIHJldHVybiBBNCgKKyAgICAgICAg
X2VsbV9sYW5nJGNvcmUkUmVnZXgkcmVwbGFjZSwKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVn
ZXgkQWxsLAorICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRyZWdleCgnWy1fXFxzXSsoLik/
JyksCisgICAgICAgIGZ1bmN0aW9uIChfcDEyKSB7CisgICAgICAgICAgICB2YXIgX3AxMyA9IF9w
MTI7CisgICAgICAgICAgICB2YXIgX3AxNCA9IF9wMTMuc3VibWF0Y2hlczsKKyAgICAgICAgICAg
IGlmICgoX3AxNC5jdG9yID09PSAnOjonKSAmJiAoX3AxNC5fMC5jdG9yID09PSAnSnVzdCcpKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFN0cmluZyR0b1VwcGVyKF9w
MTQuXzAuXzApOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Jyc7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJFN0
cmluZyR0cmltKHN0cmluZykpOworfTsKK3ZhciBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEk
U3RyaW5nX0V4dHJhJGlzQmxhbmsgPSBmdW5jdGlvbiAoc3RyaW5nKSB7CisgICAgcmV0dXJuIEEy
KAorICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRjb250YWlucywKKyAgICAgICAgX2VsbV9s
YW5nJGNvcmUkUmVnZXgkcmVnZXgoJ15cXHMqJCcpLAorICAgICAgICBzdHJpbmcpOworfTsKK3Zh
ciBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJGNsZWFuID0gZnVuY3Rp
b24gKHN0cmluZykgeworICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRTdHJpbmckdHJpbSgKKyAg
ICAgICAgQTQoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRyZXBsYWNlLAorICAg
ICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkQWxsLAorICAgICAgICAgICAgX2VsbV9sYW5n
JGNvcmUkUmVnZXgkcmVnZXgoJ1xcc1xccysnKSwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3Jl
JEJhc2ljcyRhbHdheXMoJyAnKSwKKyAgICAgICAgICAgIHN0cmluZykpOworfTsKK3ZhciBfZWxt
X2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJHNvZnRCcmVha1JlZ2V4cCA9IGZ1
bmN0aW9uICh3aWR0aCkgeworICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRSZWdleCRyZWdleCgK
KyAgICAgICAgQTIoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWycrKydd
LAorICAgICAgICAgICAgJy57MSwnLAorICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAg
X2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1snKysnXSwKKyAgICAgICAgICAgICAgICBfZWxtX2xh
bmckY29yZSRCYXNpY3MkdG9TdHJpbmcod2lkdGgpLAorICAgICAgICAgICAgICAgICd9KFxcc3wk
KXxcXFMrPyhcXHN8JCknKSkpOworfTsKK3ZhciBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEk
U3RyaW5nX0V4dHJhJHNvZnRFbGxpcHNpcyA9IEYyKAorICAgIGZ1bmN0aW9uIChob3dMb25nLCBz
dHJpbmcpIHsKKyAgICAgICAgcmV0dXJuIChfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuY21w
KAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGxlbmd0aChzdHJpbmcpLAorICAg
ICAgICAgICAgaG93TG9uZykgPCAxKSA/IHN0cmluZyA6IEEzKAorICAgICAgICAgICAgX2VsbV9s
YW5nJGNvcmUkQmFzaWNzJGZsaXAsCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRTdHJpbmck
YXBwZW5kLAorICAgICAgICAgICAgJy4uLicsCisgICAgICAgICAgICBBNCgKKyAgICAgICAgICAg
ICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRyZXBsYWNlLAorICAgICAgICAgICAgICAgIF9lbG1f
bGFuZyRjb3JlJFJlZ2V4JEFsbCwKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdl
eCRyZWdleCgnKFtcXC4sOzpcXHNdKSskJyksCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNv
cmUkQmFzaWNzJGFsd2F5cygnJyksCisgICAgICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAg
ICAgICAgIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRqb2luLAorICAgICAgICAgICAgICAgICAgICAn
JywKKyAgICAgICAgICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxt
X2xhbmckY29yZSRMaXN0JG1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChf
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF8ubWF0Y2g7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgQTMoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkZmluZCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRBdE1vc3QoMSksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmlu
Z19FeHRyYSRzb2Z0QnJlYWtSZWdleHAoaG93TG9uZyksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RyaW5nKSkpKSk7CisgICAgfSk7Cit2YXIgX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4
dHJhJFN0cmluZ19FeHRyYSRzb2Z0QnJlYWsgPSBGMigKKyAgICBmdW5jdGlvbiAod2lkdGgsIHN0
cmluZykgeworICAgICAgICByZXR1cm4gKF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5jbXAo
d2lkdGgsIDApIDwgMSkgPyBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisg
ICAgICAgICAgICBbXSkgOiBBMigKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3QkbWFw
LAorICAgICAgICAgICAgZnVuY3Rpb24gKF8pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gXy5t
YXRjaDsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBBMygKKyAgICAgICAgICAgICAgICBf
ZWxtX2xhbmckY29yZSRSZWdleCRmaW5kLAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3Jl
JFJlZ2V4JEFsbCwKKyAgICAgICAgICAgICAgICBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEk
U3RyaW5nX0V4dHJhJHNvZnRCcmVha1JlZ2V4cCh3aWR0aCksCisgICAgICAgICAgICAgICAgc3Ry
aW5nKSk7CisgICAgfSk7Cit2YXIgX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19F
eHRyYSRzb2Z0V3JhcFdpdGggPSBGMygKKyAgICBmdW5jdGlvbiAod2lkdGgsIHNlcGFyYXRvciwg
c3RyaW5nKSB7CisgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3Jl
JFN0cmluZyRqb2luLAorICAgICAgICAgICAgc2VwYXJhdG9yLAorICAgICAgICAgICAgQTIoX2Vs
bV9jb21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSRzb2Z0QnJlYWssIHdpZHRoLCBz
dHJpbmcpKTsKKyAgICB9KTsKK3ZhciBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5n
X0V4dHJhJHNvZnRXcmFwID0gRjIoCisgICAgZnVuY3Rpb24gKHdpZHRoLCBzdHJpbmcpIHsKKyAg
ICAgICAgcmV0dXJuIEEzKF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0cmEk
c29mdFdyYXBXaXRoLCB3aWR0aCwgJ1xuJywgc3RyaW5nKTsKKyAgICB9KTsKK3ZhciBfZWxtX2Nv
bW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJGJyZWFrZXIgPSBGMygKKyAgICBmdW5j
dGlvbiAod2lkdGgsIHN0cmluZywgYWNjKSB7CisgICAgICAgIGJyZWFrZXI6CisgICAgICAgIHdo
aWxlICh0cnVlKSB7CisgICAgICAgICAgICB2YXIgX3AxNSA9IHN0cmluZzsKKyAgICAgICAgICAg
IGlmIChfcDE1ID09PSAnJykgeworICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29y
ZSRMaXN0JHJldmVyc2UoYWNjKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgdmFyIF92MTYgPSB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgX3YxNyA9IEEyKF9lbG1f
bGFuZyRjb3JlJFN0cmluZyRkcm9wTGVmdCwgd2lkdGgsIHN0cmluZyksCisgICAgICAgICAgICAg
ICAgICAgIF92MTggPSBBMigKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlz
dF9vcHNbJzo6J10sCisgICAgICAgICAgICAgICAgICAgIEEzKF9lbG1fbGFuZyRjb3JlJFN0cmlu
ZyRzbGljZSwgMCwgd2lkdGgsIHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgIGFjYyk7Cisg
ICAgICAgICAgICAgICAgd2lkdGggPSBfdjE2OworICAgICAgICAgICAgICAgIHN0cmluZyA9IF92
MTc7CisgICAgICAgICAgICAgICAgYWNjID0gX3YxODsKKyAgICAgICAgICAgICAgICBjb250aW51
ZSBicmVha2VyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7Cit2YXIgX2VsbV9j
b21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSRicmVhayA9IEYyKAorICAgIGZ1bmN0
aW9uICh3aWR0aCwgc3RyaW5nKSB7CisgICAgICAgIHJldHVybiAoX2VsbV9sYW5nJGNvcmUkTmF0
aXZlX1V0aWxzLmVxKHdpZHRoLCAwKSB8fCBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuZXEo
c3RyaW5nLCAnJykpID8gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAg
ICAgICAgICAgW3N0cmluZ10pIDogQTMoCisgICAgICAgICAgICBfZWxtX2NvbW11bml0eSRzdHJp
bmdfZXh0cmEkU3RyaW5nX0V4dHJhJGJyZWFrZXIsCisgICAgICAgICAgICB3aWR0aCwKKyAgICAg
ICAgICAgIHN0cmluZywKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZy
b21BcnJheSgKKyAgICAgICAgICAgICAgICBbXSkpOworICAgIH0pOwordmFyIF9lbG1fY29tbXVu
aXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkd3JhcFdpdGggPSBGMygKKyAgICBmdW5jdGlv
biAod2lkdGgsIHNlcGFyYXRvciwgc3RyaW5nKSB7CisgICAgICAgIHJldHVybiBBMigKKyAgICAg
ICAgICAgIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRqb2luLAorICAgICAgICAgICAgc2VwYXJhdG9y
LAorICAgICAgICAgICAgQTIoX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRy
YSRicmVhaywgd2lkdGgsIHN0cmluZykpOworICAgIH0pOwordmFyIF9lbG1fY29tbXVuaXR5JHN0
cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkd3JhcCA9IEYyKAorICAgIGZ1bmN0aW9uICh3aWR0aCwg
c3RyaW5nKSB7CisgICAgICAgIHJldHVybiBBMyhfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEk
U3RyaW5nX0V4dHJhJHdyYXBXaXRoLCB3aWR0aCwgJ1xuJywgc3RyaW5nKTsKKyAgICB9KTsKK3Zh
ciBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJHJlcGxhY2VTbGljZSA9
IEY0KAorICAgIGZ1bmN0aW9uIChzdWJzdGl0dXRpb24sIHN0YXJ0LCBlbmQsIHN0cmluZykgewor
ICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3Bz
WycrKyddLAorICAgICAgICAgICAgQTMoX2VsbV9sYW5nJGNvcmUkU3RyaW5nJHNsaWNlLCAwLCBz
dGFydCwgc3RyaW5nKSwKKyAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgIF9lbG1fbGFu
ZyRjb3JlJEJhc2ljc19vcHNbJysrJ10sCisgICAgICAgICAgICAgICAgc3Vic3RpdHV0aW9uLAor
ICAgICAgICAgICAgICAgIEEzKAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRT
dHJpbmckc2xpY2UsCisgICAgICAgICAgICAgICAgICAgIGVuZCwKKyAgICAgICAgICAgICAgICAg
ICAgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGxlbmd0aChzdHJpbmcpLAorICAgICAgICAgICAgICAg
ICAgICBzdHJpbmcpKSk7CisgICAgfSk7Cit2YXIgX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJh
JFN0cmluZ19FeHRyYSRpbnNlcnRBdCA9IEYzKAorICAgIGZ1bmN0aW9uIChpbnNlcnQsIHBvcywg
c3RyaW5nKSB7CisgICAgICAgIHJldHVybiBBNChfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEk
U3RyaW5nX0V4dHJhJHJlcGxhY2VTbGljZSwgaW5zZXJ0LCBwb3MsIHBvcywgc3RyaW5nKTsKKyAg
ICB9KTsKK3ZhciBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJHJlcGxh
Y2UgPSBGMygKKyAgICBmdW5jdGlvbiAoc2VhcmNoLCBzdWJzdGl0dXRpb24sIHN0cmluZykgewor
ICAgICAgICByZXR1cm4gQTQoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRyZXBs
YWNlLAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkQWxsLAorICAgICAgICAgICAg
X2VsbV9sYW5nJGNvcmUkUmVnZXgkcmVnZXgoCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNv
cmUkUmVnZXgkZXNjYXBlKHNlYXJjaCkpLAorICAgICAgICAgICAgZnVuY3Rpb24gKF9wMTYpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gc3Vic3RpdHV0aW9uOworICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgIHN0cmluZyk7CisgICAgfSk7Cit2YXIgX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4
dHJhJFN0cmluZ19FeHRyYSRjaGFuZ2VDYXNlID0gRjIoCisgICAgZnVuY3Rpb24gKG11dGF0b3Is
IHdvcmQpIHsKKyAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUk
TWF5YmUkd2l0aERlZmF1bHQsCisgICAgICAgICAgICAnJywKKyAgICAgICAgICAgIEEyKAorICAg
ICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE1heWJlJG1hcCwKKyAgICAgICAgICAgICAgICBm
dW5jdGlvbiAoX3AxNykgeworICAgICAgICAgICAgICAgICAgICB2YXIgX3AxOCA9IF9wMTc7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgIF9l
bG1fbGFuZyRjb3JlJFN0cmluZyRjb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRv
cihfcDE4Ll8wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9wMTguXzEpOworICAgICAgICAg
ICAgICAgIH0sCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJHVuY29ucyh3
b3JkKSkpOworICAgIH0pOwordmFyIF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdf
RXh0cmEkdG9TZW50ZW5jZUNhc2UgPSBmdW5jdGlvbiAod29yZCkgeworICAgIHJldHVybiBBMihf
ZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJGNoYW5nZUNhc2UsIF9lbG1f
bGFuZyRjb3JlJENoYXIkdG9VcHBlciwgd29yZCk7Cit9OwordmFyIF9lbG1fY29tbXVuaXR5JHN0
cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkdG9UaXRsZUNhc2UgPSBmdW5jdGlvbiAod3MpIHsKKyAg
ICB2YXIgdXBwZXJjYXNlTWF0Y2ggPSBBMygKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgk
cmVwbGFjZSwKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkQWxsLAorICAgICAgICBfZWxt
X2xhbmckY29yZSRSZWdleCRyZWdleCgnXFx3KycpLAorICAgICAgICBmdW5jdGlvbiAoX3AxOSkg
eworICAgICAgICAgICAgcmV0dXJuIF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdf
RXh0cmEkdG9TZW50ZW5jZUNhc2UoCisgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF8pIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIF8ubWF0Y2g7CisgICAgICAgICAgICAgICAgfShfcDE5
KSk7CisgICAgICAgIH0pOworICAgIHJldHVybiBBNCgKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUk
UmVnZXgkcmVwbGFjZSwKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkQWxsLAorICAgICAg
ICBfZWxtX2xhbmckY29yZSRSZWdleCRyZWdleCgnXihbYS16XSl8XFxzKyhbYS16XSknKSwKKyAg
ICAgICAgZnVuY3Rpb24gKF9wMjApIHsKKyAgICAgICAgICAgIHJldHVybiB1cHBlcmNhc2VNYXRj
aCgKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiAoXykgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gXy5tYXRjaDsKKyAgICAgICAgICAgICAgICB9KF9wMjApKTsKKyAgICAgICAgfSwKKyAg
ICAgICAgd3MpOworfTsKK3ZhciBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4
dHJhJGNsYXNzaWZ5ID0gZnVuY3Rpb24gKHN0cmluZykgeworICAgIHJldHVybiBfZWxtX2NvbW11
bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJHRvU2VudGVuY2VDYXNlKAorICAgICAgICBB
MygKKyAgICAgICAgICAgIF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0cmEk
cmVwbGFjZSwKKyAgICAgICAgICAgICcgJywKKyAgICAgICAgICAgICcnLAorICAgICAgICAgICAg
X2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSRjYW1lbGl6ZSgKKyAgICAg
ICAgICAgICAgICBBNCgKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgk
cmVwbGFjZSwKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkQWxsLAor
ICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRyZWdleCgnW1xcV19dJyks
CisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRhbHdheXMoJyAnKSwK
KyAgICAgICAgICAgICAgICAgICAgc3RyaW5nKSkpKTsKK307Cit2YXIgX2VsbV9jb21tdW5pdHkk
c3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSRodW1hbml6ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHsK
KyAgICByZXR1cm4gX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSR0b1Nl
bnRlbmNlQ2FzZSgKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJHRvTG93ZXIoCisgICAg
ICAgICAgICBfZWxtX2xhbmckY29yZSRTdHJpbmckdHJpbSgKKyAgICAgICAgICAgICAgICBBNCgK
KyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkcmVwbGFjZSwKKyAgICAg
ICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkQWxsLAorICAgICAgICAgICAgICAg
ICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRyZWdleCgnX2lkJHxbLV9cXHNdKycpLAorICAgICAg
ICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRCYXNpY3MkYWx3YXlzKCcgJyksCisgICAgICAg
ICAgICAgICAgICAgIEE0KAorICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUk
UmVnZXgkcmVwbGFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFJl
Z2V4JEFsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFJlZ2V4JHJl
Z2V4KCdbQS1aXScpLAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9wMjEpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRhcHBlbmQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICctJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZnVuY3Rpb24gKF8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBfLm1hdGNoOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KF9wMjEpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJp
bmcpKSkpKTsKK307Cit2YXIgX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRy
YSRkZWNhcGl0YWxpemUgPSBmdW5jdGlvbiAod29yZCkgeworICAgIHJldHVybiBBMihfZWxtX2Nv
bW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJGNoYW5nZUNhc2UsIF9lbG1fbGFuZyRj
b3JlJENoYXIkdG9Mb3dlciwgd29yZCk7Cit9OworCisvL2ltcG9ydCBOYXRpdmUuTGlzdCAvLwor
Cit2YXIgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0FycmF5ID0gZnVuY3Rpb24oKSB7CisKKy8vIEEg
UlJCLVRyZWUgaGFzIHR3byBkaXN0aW5jdCBkYXRhIHR5cGVzLgorLy8gTGVhZiAtPiAiaGVpZ2h0
IiAgaXMgYWx3YXlzIDAKKy8vICAgICAgICAgInRhYmxlIiAgIGlzIGFuIGFycmF5IG9mIGVsZW1l
bnRzCisvLyBOb2RlIC0+ICJoZWlnaHQiICBpcyBhbHdheXMgZ3JlYXRlciB0aGFuIDAKKy8vICAg
ICAgICAgInRhYmxlIiAgIGlzIGFuIGFycmF5IG9mIGNoaWxkIG5vZGVzCisvLyAgICAgICAgICJs
ZW5ndGhzIiBpcyBhbiBhcnJheSBvZiBhY2N1bXVsYXRlZCBsZW5ndGhzIG9mIHRoZSBjaGlsZCBu
b2RlcworCisvLyBNIGlzIHRoZSBtYXhpbWFsIHRhYmxlIHNpemUuIDMyIHNlZW1zIGZhc3QuIEUg
aXMgdGhlIGFsbG93ZWQgaW5jcmVhc2UKKy8vIG9mIHNlYXJjaCBzdGVwcyB3aGVuIGNvbmNhdHRp
bmcgdG8gZmluZCBhbiBpbmRleC4gTG93ZXIgdmFsdWVzIHdpbGwKKy8vIGRlY3JlYXNlIGJhbGFu
Y2luZywgYnV0IHdpbGwgaW5jcmVhc2Ugc2VhcmNoIHN0ZXBzLgordmFyIE0gPSAzMjsKK3ZhciBF
ID0gMjsKKworLy8gQW4gZW1wdHkgYXJyYXkuCit2YXIgZW1wdHkgPSB7CisgICAgY3RvcjogJ19B
cnJheScsCisgICAgaGVpZ2h0OiAwLAorICAgIHRhYmxlOiBbXQorfTsKKworCitmdW5jdGlvbiBn
ZXQoaSwgYXJyYXkpCit7CisgICAgaWYgKGkgPCAwIHx8IGkgPj0gbGVuZ3RoKGFycmF5KSkKKyAg
ICB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigKKyAgICAgICAgICAgICdJbmRleCAnICsgaSAr
ICcgaXMgb3V0IG9mIHJhbmdlLiBDaGVjayB0aGUgbGVuZ3RoIG9mICcgKworICAgICAgICAgICAg
J3lvdXIgYXJyYXkgZmlyc3Qgb3IgdXNlIGdldE1heWJlIG9yIGdldFdpdGhEZWZhdWx0LicpOwor
ICAgIH0KKyAgICByZXR1cm4gdW5zYWZlR2V0KGksIGFycmF5KTsKK30KKworCitmdW5jdGlvbiB1
bnNhZmVHZXQoaSwgYXJyYXkpCit7CisgICAgZm9yICh2YXIgeCA9IGFycmF5LmhlaWdodDsgeCA+
IDA7IHgtLSkKKyAgICB7CisgICAgICAgIHZhciBzbG90ID0gaSA+PiAoeCAqIDUpOworICAgICAg
ICB3aGlsZSAoYXJyYXkubGVuZ3Roc1tzbG90XSA8PSBpKQorICAgICAgICB7CisgICAgICAgICAg
ICBzbG90Kys7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNsb3QgPiAwKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpIC09IGFycmF5Lmxlbmd0aHNbc2xvdCAtIDFdOworICAgICAgICB9CisgICAg
ICAgIGFycmF5ID0gYXJyYXkudGFibGVbc2xvdF07CisgICAgfQorICAgIHJldHVybiBhcnJheS50
YWJsZVtpXTsKK30KKworCisvLyBTZXRzIHRoZSB2YWx1ZSBhdCB0aGUgaW5kZXggaS4gT25seSB0
aGUgbm9kZXMgbGVhZGluZyB0byBpIHdpbGwgZ2V0CisvLyBjb3BpZWQgYW5kIHVwZGF0ZWQuCitm
dW5jdGlvbiBzZXQoaSwgaXRlbSwgYXJyYXkpCit7CisgICAgaWYgKGkgPCAwIHx8IGxlbmd0aChh
cnJheSkgPD0gaSkKKyAgICB7CisgICAgICAgIHJldHVybiBhcnJheTsKKyAgICB9CisgICAgcmV0
dXJuIHVuc2FmZVNldChpLCBpdGVtLCBhcnJheSk7Cit9CisKKworZnVuY3Rpb24gdW5zYWZlU2V0
KGksIGl0ZW0sIGFycmF5KQoreworICAgIGFycmF5ID0gbm9kZUNvcHkoYXJyYXkpOworCisgICAg
aWYgKGFycmF5LmhlaWdodCA9PT0gMCkKKyAgICB7CisgICAgICAgIGFycmF5LnRhYmxlW2ldID0g
aXRlbTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdmFyIHNsb3QgPSBnZXRTbG90
KGksIGFycmF5KTsKKyAgICAgICAgaWYgKHNsb3QgPiAwKQorICAgICAgICB7CisgICAgICAgICAg
ICBpIC09IGFycmF5Lmxlbmd0aHNbc2xvdCAtIDFdOworICAgICAgICB9CisgICAgICAgIGFycmF5
LnRhYmxlW3Nsb3RdID0gdW5zYWZlU2V0KGksIGl0ZW0sIGFycmF5LnRhYmxlW3Nsb3RdKTsKKyAg
ICB9CisgICAgcmV0dXJuIGFycmF5OworfQorCisKK2Z1bmN0aW9uIGluaXRpYWxpemUobGVuLCBm
KQoreworICAgIGlmIChsZW4gPD0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBlbXB0eTsKKyAg
ICB9CisgICAgdmFyIGggPSBNYXRoLmZsb29yKCBNYXRoLmxvZyhsZW4pIC8gTWF0aC5sb2coTSkg
KTsKKyAgICByZXR1cm4gaW5pdGlhbGl6ZV8oZiwgaCwgMCwgbGVuKTsKK30KKworZnVuY3Rpb24g
aW5pdGlhbGl6ZV8oZiwgaCwgZnJvbSwgdG8pCit7CisgICAgaWYgKGggPT09IDApCisgICAgewor
ICAgICAgICB2YXIgdGFibGUgPSBuZXcgQXJyYXkoKHRvIC0gZnJvbSkgJSAoTSArIDEpKTsKKyAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWJsZS5sZW5ndGg7IGkrKykKKyAgICAgICAgewor
ICAgICAgICAgIHRhYmxlW2ldID0gZihmcm9tICsgaSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHsKKyAgICAgICAgICAgIGN0b3I6ICdfQXJyYXknLAorICAgICAgICAgICAgaGVpZ2h0OiAw
LAorICAgICAgICAgICAgdGFibGU6IHRhYmxlCisgICAgICAgIH07CisgICAgfQorCisgICAgdmFy
IHN0ZXAgPSBNYXRoLnBvdyhNLCBoKTsKKyAgICB2YXIgdGFibGUgPSBuZXcgQXJyYXkoTWF0aC5j
ZWlsKCh0byAtIGZyb20pIC8gc3RlcCkpOworICAgIHZhciBsZW5ndGhzID0gbmV3IEFycmF5KHRh
YmxlLmxlbmd0aCk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWJsZS5sZW5ndGg7IGkrKykK
KyAgICB7CisgICAgICAgIHRhYmxlW2ldID0gaW5pdGlhbGl6ZV8oZiwgaCAtIDEsIGZyb20gKyAo
aSAqIHN0ZXApLCBNYXRoLm1pbihmcm9tICsgKChpICsgMSkgKiBzdGVwKSwgdG8pKTsKKyAgICAg
ICAgbGVuZ3Roc1tpXSA9IGxlbmd0aCh0YWJsZVtpXSkgKyAoaSA+IDAgPyBsZW5ndGhzW2ktMV0g
OiAwKTsKKyAgICB9CisgICAgcmV0dXJuIHsKKyAgICAgICAgY3RvcjogJ19BcnJheScsCisgICAg
ICAgIGhlaWdodDogaCwKKyAgICAgICAgdGFibGU6IHRhYmxlLAorICAgICAgICBsZW5ndGhzOiBs
ZW5ndGhzCisgICAgfTsKK30KKworZnVuY3Rpb24gZnJvbUxpc3QobGlzdCkKK3sKKyAgICBpZiAo
bGlzdC5jdG9yID09PSAnW10nKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVtcHR5OworICAgIH0K
KworICAgIC8vIEFsbG9jYXRlIE0gc2l6ZWQgYmxvY2tzICh0YWJsZSkgYW5kIHdyaXRlIGxpc3Qg
ZWxlbWVudHMgdG8gaXQuCisgICAgdmFyIHRhYmxlID0gbmV3IEFycmF5KE0pOworICAgIHZhciBu
b2RlcyA9IFtdOworICAgIHZhciBpID0gMDsKKworICAgIHdoaWxlIChsaXN0LmN0b3IgIT09ICdb
XScpCisgICAgeworICAgICAgICB0YWJsZVtpXSA9IGxpc3QuXzA7CisgICAgICAgIGxpc3QgPSBs
aXN0Ll8xOworICAgICAgICBpKys7CisKKyAgICAgICAgLy8gdGFibGUgaXMgZnVsbCwgc28gd2Ug
Y2FuIHB1c2ggYSBsZWFmIGNvbnRhaW5pbmcgaXQgaW50byB0aGUKKyAgICAgICAgLy8gbmV4dCBu
b2RlLgorICAgICAgICBpZiAoaSA9PT0gTSkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGxl
YWYgPSB7CisgICAgICAgICAgICAgICAgY3RvcjogJ19BcnJheScsCisgICAgICAgICAgICAgICAg
aGVpZ2h0OiAwLAorICAgICAgICAgICAgICAgIHRhYmxlOiB0YWJsZQorICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgIGZyb21MaXN0UHVzaChsZWFmLCBub2Rlcyk7CisgICAgICAgICAgICB0YWJs
ZSA9IG5ldyBBcnJheShNKTsKKyAgICAgICAgICAgIGkgPSAwOworICAgICAgICB9CisgICAgfQor
CisgICAgLy8gTWF5YmUgdGhlcmUgaXMgc29tZXRoaW5nIGxlZnQgb24gdGhlIHRhYmxlLgorICAg
IGlmIChpID4gMCkKKyAgICB7CisgICAgICAgIHZhciBsZWFmID0geworICAgICAgICAgICAgY3Rv
cjogJ19BcnJheScsCisgICAgICAgICAgICBoZWlnaHQ6IDAsCisgICAgICAgICAgICB0YWJsZTog
dGFibGUuc3BsaWNlKDAsIGkpCisgICAgICAgIH07CisgICAgICAgIGZyb21MaXN0UHVzaChsZWFm
LCBub2Rlcyk7CisgICAgfQorCisgICAgLy8gR28gdGhyb3VnaCBhbGwgb2YgdGhlIG5vZGVzIGFu
ZCBldmVudHVhbGx5IHB1c2ggdGhlbSBpbnRvIGhpZ2hlciBub2Rlcy4KKyAgICBmb3IgKHZhciBo
ID0gMDsgaCA8IG5vZGVzLmxlbmd0aCAtIDE7IGgrKykKKyAgICB7CisgICAgICAgIGlmIChub2Rl
c1toXS50YWJsZS5sZW5ndGggPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBmcm9tTGlzdFB1
c2gobm9kZXNbaF0sIG5vZGVzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZhciBoZWFkID0g
bm9kZXNbbm9kZXMubGVuZ3RoIC0gMV07CisgICAgaWYgKGhlYWQuaGVpZ2h0ID4gMCAmJiBoZWFk
LnRhYmxlLmxlbmd0aCA9PT0gMSkKKyAgICB7CisgICAgICAgIHJldHVybiBoZWFkLnRhYmxlWzBd
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gaGVhZDsKKyAgICB9Cit9
CisKKy8vIFB1c2ggYSBub2RlIGludG8gYSBoaWdoZXIgbm9kZSBhcyBhIGNoaWxkLgorZnVuY3Rp
b24gZnJvbUxpc3RQdXNoKHRvUHVzaCwgbm9kZXMpCit7CisgICAgdmFyIGggPSB0b1B1c2guaGVp
Z2h0OworCisgICAgLy8gTWF5YmUgdGhlIG5vZGUgb24gdGhpcyBoZWlnaHQgZG9lcyBub3QgZXhp
c3QuCisgICAgaWYgKG5vZGVzLmxlbmd0aCA9PT0gaCkKKyAgICB7CisgICAgICAgIHZhciBub2Rl
ID0geworICAgICAgICAgICAgY3RvcjogJ19BcnJheScsCisgICAgICAgICAgICBoZWlnaHQ6IGgg
KyAxLAorICAgICAgICAgICAgdGFibGU6IFtdLAorICAgICAgICAgICAgbGVuZ3RoczogW10KKyAg
ICAgICAgfTsKKyAgICAgICAgbm9kZXMucHVzaChub2RlKTsKKyAgICB9CisKKyAgICBub2Rlc1to
XS50YWJsZS5wdXNoKHRvUHVzaCk7CisgICAgdmFyIGxlbiA9IGxlbmd0aCh0b1B1c2gpOworICAg
IGlmIChub2Rlc1toXS5sZW5ndGhzLmxlbmd0aCA+IDApCisgICAgeworICAgICAgICBsZW4gKz0g
bm9kZXNbaF0ubGVuZ3Roc1tub2Rlc1toXS5sZW5ndGhzLmxlbmd0aCAtIDFdOworICAgIH0KKyAg
ICBub2Rlc1toXS5sZW5ndGhzLnB1c2gobGVuKTsKKworICAgIGlmIChub2Rlc1toXS50YWJsZS5s
ZW5ndGggPT09IE0pCisgICAgeworICAgICAgICBmcm9tTGlzdFB1c2gobm9kZXNbaF0sIG5vZGVz
KTsKKyAgICAgICAgbm9kZXNbaF0gPSB7CisgICAgICAgICAgICBjdG9yOiAnX0FycmF5JywKKyAg
ICAgICAgICAgIGhlaWdodDogaCArIDEsCisgICAgICAgICAgICB0YWJsZTogW10sCisgICAgICAg
ICAgICBsZW5ndGhzOiBbXQorICAgICAgICB9OworICAgIH0KK30KKworLy8gUHVzaGVzIGFuIGl0
ZW0gdmlhIHB1c2hfIHRvIHRoZSBib3R0b20gcmlnaHQgb2YgYSB0cmVlLgorZnVuY3Rpb24gcHVz
aChpdGVtLCBhKQoreworICAgIHZhciBwdXNoZWQgPSBwdXNoXyhpdGVtLCBhKTsKKyAgICBpZiAo
cHVzaGVkICE9PSBudWxsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHB1c2hlZDsKKyAgICB9CisK
KyAgICB2YXIgbmV3VHJlZSA9IGNyZWF0ZShpdGVtLCBhLmhlaWdodCk7CisgICAgcmV0dXJuIHNp
Ymxpc2UoYSwgbmV3VHJlZSk7Cit9CisKKy8vIFJlY3Vyc2l2ZWx5IHRyaWVzIHRvIHB1c2ggYW4g
aXRlbSB0byB0aGUgYm90dG9tLXJpZ2h0IG1vc3QKKy8vIHRyZWUgcG9zc2libGUuIElmIHRoZXJl
IGlzIG5vIHNwYWNlIGxlZnQgZm9yIHRoZSBpdGVtLAorLy8gbnVsbCB3aWxsIGJlIHJldHVybmVk
LgorZnVuY3Rpb24gcHVzaF8oaXRlbSwgYSkKK3sKKyAgICAvLyBIYW5kbGUgcmVzdXJzaW9uIHN0
b3AgYXQgbGVhZiBsZXZlbC4KKyAgICBpZiAoYS5oZWlnaHQgPT09IDApCisgICAgeworICAgICAg
ICBpZiAoYS50YWJsZS5sZW5ndGggPCBNKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgbmV3
QSA9IHsKKyAgICAgICAgICAgICAgICBjdG9yOiAnX0FycmF5JywKKyAgICAgICAgICAgICAgICBo
ZWlnaHQ6IDAsCisgICAgICAgICAgICAgICAgdGFibGU6IGEudGFibGUuc2xpY2UoKQorICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgIG5ld0EudGFibGUucHVzaChpdGVtKTsKKyAgICAgICAgICAg
IHJldHVybiBuZXdBOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAg
ICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gUmVjdXJzaXZlbHkg
cHVzaAorICAgIHZhciBwdXNoZWQgPSBwdXNoXyhpdGVtLCBib3RSaWdodChhKSk7CisKKyAgICAv
LyBUaGVyZSB3YXMgc3BhY2UgaW4gdGhlIGJvdHRvbSByaWdodCB0cmVlLCBzbyB0aGUgc2xvdCB3
aWxsCisgICAgLy8gYmUgdXBkYXRlZC4KKyAgICBpZiAocHVzaGVkICE9PSBudWxsKQorICAgIHsK
KyAgICAgICAgdmFyIG5ld0EgPSBub2RlQ29weShhKTsKKyAgICAgICAgbmV3QS50YWJsZVtuZXdB
LnRhYmxlLmxlbmd0aCAtIDFdID0gcHVzaGVkOworICAgICAgICBuZXdBLmxlbmd0aHNbbmV3QS5s
ZW5ndGhzLmxlbmd0aCAtIDFdKys7CisgICAgICAgIHJldHVybiBuZXdBOworICAgIH0KKworICAg
IC8vIFdoZW4gdGhlcmUgd2FzIG5vIHNwYWNlIGxlZnQsIGNoZWNrIGlmIHRoZXJlIGlzIHNwYWNl
IGxlZnQKKyAgICAvLyBmb3IgYSBuZXcgc2xvdCB3aXRoIGEgdHJlZSB3aGljaCBjb250YWlucyBv
bmx5IHRoZSBpdGVtCisgICAgLy8gYXQgdGhlIGJvdHRvbS4KKyAgICBpZiAoYS50YWJsZS5sZW5n
dGggPCBNKQorICAgIHsKKyAgICAgICAgdmFyIG5ld1Nsb3QgPSBjcmVhdGUoaXRlbSwgYS5oZWln
aHQgLSAxKTsKKyAgICAgICAgdmFyIG5ld0EgPSBub2RlQ29weShhKTsKKyAgICAgICAgbmV3QS50
YWJsZS5wdXNoKG5ld1Nsb3QpOworICAgICAgICBuZXdBLmxlbmd0aHMucHVzaChuZXdBLmxlbmd0
aHNbbmV3QS5sZW5ndGhzLmxlbmd0aCAtIDFdICsgbGVuZ3RoKG5ld1Nsb3QpKTsKKyAgICAgICAg
cmV0dXJuIG5ld0E7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBudWxs
OworICAgIH0KK30KKworLy8gQ29udmVydHMgYW4gYXJyYXkgaW50byBhIGxpc3Qgb2YgZWxlbWVu
dHMuCitmdW5jdGlvbiB0b0xpc3QoYSkKK3sKKyAgICByZXR1cm4gdG9MaXN0XyhfZWxtX2xhbmck
Y29yZSROYXRpdmVfTGlzdC5OaWwsIGEpOworfQorCitmdW5jdGlvbiB0b0xpc3RfKGxpc3QsIGEp
Cit7CisgICAgZm9yICh2YXIgaSA9IGEudGFibGUubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pCisg
ICAgeworICAgICAgICBsaXN0ID0KKyAgICAgICAgICAgIGEuaGVpZ2h0ID09PSAwCisgICAgICAg
ICAgICAgICAgPyBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5Db25zKGEudGFibGVbaV0sIGxp
c3QpCisgICAgICAgICAgICAgICAgOiB0b0xpc3RfKGxpc3QsIGEudGFibGVbaV0pOworICAgIH0K
KyAgICByZXR1cm4gbGlzdDsKK30KKworLy8gTWFwcyBhIGZ1bmN0aW9uIG92ZXIgdGhlIGVsZW1l
bnRzIG9mIGFuIGFycmF5LgorZnVuY3Rpb24gbWFwKGYsIGEpCit7CisgICAgdmFyIG5ld0EgPSB7
CisgICAgICAgIGN0b3I6ICdfQXJyYXknLAorICAgICAgICBoZWlnaHQ6IGEuaGVpZ2h0LAorICAg
ICAgICB0YWJsZTogbmV3IEFycmF5KGEudGFibGUubGVuZ3RoKQorICAgIH07CisgICAgaWYgKGEu
aGVpZ2h0ID4gMCkKKyAgICB7CisgICAgICAgIG5ld0EubGVuZ3RocyA9IGEubGVuZ3RoczsKKyAg
ICB9CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLnRhYmxlLmxlbmd0aDsgaSsrKQorICAgIHsK
KyAgICAgICAgbmV3QS50YWJsZVtpXSA9CisgICAgICAgICAgICBhLmhlaWdodCA9PT0gMAorICAg
ICAgICAgICAgICAgID8gZihhLnRhYmxlW2ldKQorICAgICAgICAgICAgICAgIDogbWFwKGYsIGEu
dGFibGVbaV0pOworICAgIH0KKyAgICByZXR1cm4gbmV3QTsKK30KKworLy8gTWFwcyBhIGZ1bmN0
aW9uIG92ZXIgdGhlIGVsZW1lbnRzIHdpdGggdGhlaXIgaW5kZXggYXMgZmlyc3QgYXJndW1lbnQu
CitmdW5jdGlvbiBpbmRleGVkTWFwKGYsIGEpCit7CisgICAgcmV0dXJuIGluZGV4ZWRNYXBfKGYs
IGEsIDApOworfQorCitmdW5jdGlvbiBpbmRleGVkTWFwXyhmLCBhLCBmcm9tKQoreworICAgIHZh
ciBuZXdBID0geworICAgICAgICBjdG9yOiAnX0FycmF5JywKKyAgICAgICAgaGVpZ2h0OiBhLmhl
aWdodCwKKyAgICAgICAgdGFibGU6IG5ldyBBcnJheShhLnRhYmxlLmxlbmd0aCkKKyAgICB9Owor
ICAgIGlmIChhLmhlaWdodCA+IDApCisgICAgeworICAgICAgICBuZXdBLmxlbmd0aHMgPSBhLmxl
bmd0aHM7CisgICAgfQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS50YWJsZS5sZW5ndGg7IGkr
KykKKyAgICB7CisgICAgICAgIG5ld0EudGFibGVbaV0gPQorICAgICAgICAgICAgYS5oZWlnaHQg
PT09IDAKKyAgICAgICAgICAgICAgICA/IEEyKGYsIGZyb20gKyBpLCBhLnRhYmxlW2ldKQorICAg
ICAgICAgICAgICAgIDogaW5kZXhlZE1hcF8oZiwgYS50YWJsZVtpXSwgaSA9PSAwID8gZnJvbSA6
IGZyb20gKyBhLmxlbmd0aHNbaSAtIDFdKTsKKyAgICB9CisgICAgcmV0dXJuIG5ld0E7Cit9CisK
K2Z1bmN0aW9uIGZvbGRsKGYsIGIsIGEpCit7CisgICAgaWYgKGEuaGVpZ2h0ID09PSAwKQorICAg
IHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLnRhYmxlLmxlbmd0aDsgaSsrKQorICAg
ICAgICB7CisgICAgICAgICAgICBiID0gQTIoZiwgYS50YWJsZVtpXSwgYik7CisgICAgICAgIH0K
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLnRh
YmxlLmxlbmd0aDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBiID0gZm9sZGwoZiwgYiwg
YS50YWJsZVtpXSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGI7Cit9CisKK2Z1bmN0
aW9uIGZvbGRyKGYsIGIsIGEpCit7CisgICAgaWYgKGEuaGVpZ2h0ID09PSAwKQorICAgIHsKKyAg
ICAgICAgZm9yICh2YXIgaSA9IGEudGFibGUubGVuZ3RoOyBpLS07ICkKKyAgICAgICAgeworICAg
ICAgICAgICAgYiA9IEEyKGYsIGEudGFibGVbaV0sIGIpOworICAgICAgICB9CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIGZvciAodmFyIGkgPSBhLnRhYmxlLmxlbmd0aDsgaS0tOyAp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGIgPSBmb2xkcihmLCBiLCBhLnRhYmxlW2ldKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gYjsKK30KKworLy8gVE9ETzogY3VycmVudGx5LCBp
dCBzbGljZXMgdGhlIHJpZ2h0LCB0aGVuIHRoZSBsZWZ0LiBUaGlzIGNhbiBiZQorLy8gb3B0aW1p
emVkLgorZnVuY3Rpb24gc2xpY2UoZnJvbSwgdG8sIGEpCit7CisgICAgaWYgKGZyb20gPCAwKQor
ICAgIHsKKyAgICAgICAgZnJvbSArPSBsZW5ndGgoYSk7CisgICAgfQorICAgIGlmICh0byA8IDAp
CisgICAgeworICAgICAgICB0byArPSBsZW5ndGgoYSk7CisgICAgfQorICAgIHJldHVybiBzbGlj
ZUxlZnQoZnJvbSwgc2xpY2VSaWdodCh0bywgYSkpOworfQorCitmdW5jdGlvbiBzbGljZVJpZ2h0
KHRvLCBhKQoreworICAgIGlmICh0byA9PT0gbGVuZ3RoKGEpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGE7CisgICAgfQorCisgICAgLy8gSGFuZGxlIGxlYWYgbGV2ZWwuCisgICAgaWYgKGEuaGVp
Z2h0ID09PSAwKQorICAgIHsKKyAgICAgICAgdmFyIG5ld0EgPSB7IGN0b3I6J19BcnJheScsIGhl
aWdodDowIH07CisgICAgICAgIG5ld0EudGFibGUgPSBhLnRhYmxlLnNsaWNlKDAsIHRvKTsKKyAg
ICAgICAgcmV0dXJuIG5ld0E7CisgICAgfQorCisgICAgLy8gU2xpY2UgdGhlIHJpZ2h0IHJlY3Vy
c2l2ZWx5LgorICAgIHZhciByaWdodCA9IGdldFNsb3QodG8sIGEpOworICAgIHZhciBzbGljZWQg
PSBzbGljZVJpZ2h0KHRvIC0gKHJpZ2h0ID4gMCA/IGEubGVuZ3Roc1tyaWdodCAtIDFdIDogMCks
IGEudGFibGVbcmlnaHRdKTsKKworICAgIC8vIE1heWJlIHRoZSBhIG5vZGUgaXMgbm90IGV2ZW4g
bmVlZGVkLCBhcyBzbGljZWQgY29udGFpbnMgdGhlIHdob2xlIHNsaWNlLgorICAgIGlmIChyaWdo
dCA9PT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBzbGljZWQ7CisgICAgfQorCisgICAgLy8g
Q3JlYXRlIG5ldyBub2RlLgorICAgIHZhciBuZXdBID0geworICAgICAgICBjdG9yOiAnX0FycmF5
JywKKyAgICAgICAgaGVpZ2h0OiBhLmhlaWdodCwKKyAgICAgICAgdGFibGU6IGEudGFibGUuc2xp
Y2UoMCwgcmlnaHQpLAorICAgICAgICBsZW5ndGhzOiBhLmxlbmd0aHMuc2xpY2UoMCwgcmlnaHQp
CisgICAgfTsKKyAgICBpZiAoc2xpY2VkLnRhYmxlLmxlbmd0aCA+IDApCisgICAgeworICAgICAg
ICBuZXdBLnRhYmxlW3JpZ2h0XSA9IHNsaWNlZDsKKyAgICAgICAgbmV3QS5sZW5ndGhzW3JpZ2h0
XSA9IGxlbmd0aChzbGljZWQpICsgKHJpZ2h0ID4gMCA/IG5ld0EubGVuZ3Roc1tyaWdodCAtIDFd
IDogMCk7CisgICAgfQorICAgIHJldHVybiBuZXdBOworfQorCitmdW5jdGlvbiBzbGljZUxlZnQo
ZnJvbSwgYSkKK3sKKyAgICBpZiAoZnJvbSA9PT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBh
OworICAgIH0KKworICAgIC8vIEhhbmRsZSBsZWFmIGxldmVsLgorICAgIGlmIChhLmhlaWdodCA9
PT0gMCkKKyAgICB7CisgICAgICAgIHZhciBuZXdBID0geyBjdG9yOidfQXJyYXknLCBoZWlnaHQ6
MCB9OworICAgICAgICBuZXdBLnRhYmxlID0gYS50YWJsZS5zbGljZShmcm9tLCBhLnRhYmxlLmxl
bmd0aCArIDEpOworICAgICAgICByZXR1cm4gbmV3QTsKKyAgICB9CisKKyAgICAvLyBTbGljZSB0
aGUgbGVmdCByZWN1cnNpdmVseS4KKyAgICB2YXIgbGVmdCA9IGdldFNsb3QoZnJvbSwgYSk7Cisg
ICAgdmFyIHNsaWNlZCA9IHNsaWNlTGVmdChmcm9tIC0gKGxlZnQgPiAwID8gYS5sZW5ndGhzW2xl
ZnQgLSAxXSA6IDApLCBhLnRhYmxlW2xlZnRdKTsKKworICAgIC8vIE1heWJlIHRoZSBhIG5vZGUg
aXMgbm90IGV2ZW4gbmVlZGVkLCBhcyBzbGljZWQgY29udGFpbnMgdGhlIHdob2xlIHNsaWNlLgor
ICAgIGlmIChsZWZ0ID09PSBhLnRhYmxlLmxlbmd0aCAtIDEpCisgICAgeworICAgICAgICByZXR1
cm4gc2xpY2VkOworICAgIH0KKworICAgIC8vIENyZWF0ZSBuZXcgbm9kZS4KKyAgICB2YXIgbmV3
QSA9IHsKKyAgICAgICAgY3RvcjogJ19BcnJheScsCisgICAgICAgIGhlaWdodDogYS5oZWlnaHQs
CisgICAgICAgIHRhYmxlOiBhLnRhYmxlLnNsaWNlKGxlZnQsIGEudGFibGUubGVuZ3RoICsgMSks
CisgICAgICAgIGxlbmd0aHM6IG5ldyBBcnJheShhLnRhYmxlLmxlbmd0aCAtIGxlZnQpCisgICAg
fTsKKyAgICBuZXdBLnRhYmxlWzBdID0gc2xpY2VkOworICAgIHZhciBsZW4gPSAwOworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgbmV3QS50YWJsZS5sZW5ndGg7IGkrKykKKyAgICB7CisgICAgICAg
IGxlbiArPSBsZW5ndGgobmV3QS50YWJsZVtpXSk7CisgICAgICAgIG5ld0EubGVuZ3Roc1tpXSA9
IGxlbjsKKyAgICB9CisKKyAgICByZXR1cm4gbmV3QTsKK30KKworLy8gQXBwZW5kcyB0d28gdHJl
ZXMuCitmdW5jdGlvbiBhcHBlbmQoYSxiKQoreworICAgIGlmIChhLnRhYmxlLmxlbmd0aCA9PT0g
MCkKKyAgICB7CisgICAgICAgIHJldHVybiBiOworICAgIH0KKyAgICBpZiAoYi50YWJsZS5sZW5n
dGggPT09IDApCisgICAgeworICAgICAgICByZXR1cm4gYTsKKyAgICB9CisKKyAgICB2YXIgYyA9
IGFwcGVuZF8oYSwgYik7CisKKyAgICAvLyBDaGVjayBpZiBib3RoIG5vZGVzIGNhbiBiZSBjcnVu
c2hlZCB0b2dldGhlci4KKyAgICBpZiAoY1swXS50YWJsZS5sZW5ndGggKyBjWzFdLnRhYmxlLmxl
bmd0aCA8PSBNKQorICAgIHsKKyAgICAgICAgaWYgKGNbMF0udGFibGUubGVuZ3RoID09PSAwKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gY1sxXTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoY1sxXS50YWJsZS5sZW5ndGggPT09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBjWzBdOworICAgICAgICB9CisKKyAgICAgICAgLy8gQWRqdXN0IC50YWJsZSBhbmQgLmxlbmd0
aHMKKyAgICAgICAgY1swXS50YWJsZSA9IGNbMF0udGFibGUuY29uY2F0KGNbMV0udGFibGUpOwor
ICAgICAgICBpZiAoY1swXS5oZWlnaHQgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIg
bGVuID0gbGVuZ3RoKGNbMF0pOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjWzFd
Lmxlbmd0aHMubGVuZ3RoOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY1sx
XS5sZW5ndGhzW2ldICs9IGxlbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNbMF0ubGVu
Z3RocyA9IGNbMF0ubGVuZ3Rocy5jb25jYXQoY1sxXS5sZW5ndGhzKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBjWzBdOworICAgIH0KKworICAgIGlmIChjWzBdLmhlaWdodCA+IDApCisg
ICAgeworICAgICAgICB2YXIgdG9SZW1vdmUgPSBjYWxjVG9SZW1vdmUoYSwgYik7CisgICAgICAg
IGlmICh0b1JlbW92ZSA+IEUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGMgPSBzaHVmZmxlKGNb
MF0sIGNbMV0sIHRvUmVtb3ZlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzaWJs
aXNlKGNbMF0sIGNbMV0pOworfQorCisvLyBSZXR1cm5zIGFuIGFycmF5IG9mIHR3byBub2Rlczsg
cmlnaHQgYW5kIGxlZnQuIE9uZSBub2RlIF9tYXlfIGJlIGVtcHR5LgorZnVuY3Rpb24gYXBwZW5k
XyhhLCBiKQoreworICAgIGlmIChhLmhlaWdodCA9PT0gMCAmJiBiLmhlaWdodCA9PT0gMCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBbYSwgYl07CisgICAgfQorCisgICAgaWYgKGEuaGVpZ2h0ICE9
PSAxIHx8IGIuaGVpZ2h0ICE9PSAxKQorICAgIHsKKyAgICAgICAgaWYgKGEuaGVpZ2h0ID09PSBi
LmhlaWdodCkKKyAgICAgICAgeworICAgICAgICAgICAgYSA9IG5vZGVDb3B5KGEpOworICAgICAg
ICAgICAgYiA9IG5vZGVDb3B5KGIpOworICAgICAgICAgICAgdmFyIGFwcGVuZGVkID0gYXBwZW5k
Xyhib3RSaWdodChhKSwgYm90TGVmdChiKSk7CisKKyAgICAgICAgICAgIGluc2VydFJpZ2h0KGEs
IGFwcGVuZGVkWzFdKTsKKyAgICAgICAgICAgIGluc2VydExlZnQoYiwgYXBwZW5kZWRbMF0pOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGEuaGVpZ2h0ID4gYi5oZWlnaHQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGEgPSBub2RlQ29weShhKTsKKyAgICAgICAgICAgIHZhciBhcHBlbmRl
ZCA9IGFwcGVuZF8oYm90UmlnaHQoYSksIGIpOworCisgICAgICAgICAgICBpbnNlcnRSaWdodChh
LCBhcHBlbmRlZFswXSk7CisgICAgICAgICAgICBiID0gcGFyZW50aXNlKGFwcGVuZGVkWzFdLCBh
cHBlbmRlZFsxXS5oZWlnaHQgKyAxKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAg
IHsKKyAgICAgICAgICAgIGIgPSBub2RlQ29weShiKTsKKyAgICAgICAgICAgIHZhciBhcHBlbmRl
ZCA9IGFwcGVuZF8oYSwgYm90TGVmdChiKSk7CisKKyAgICAgICAgICAgIHZhciBsZWZ0ID0gYXBw
ZW5kZWRbMF0udGFibGUubGVuZ3RoID09PSAwID8gMCA6IDE7CisgICAgICAgICAgICB2YXIgcmln
aHQgPSBsZWZ0ID09PSAwID8gMSA6IDA7CisgICAgICAgICAgICBpbnNlcnRMZWZ0KGIsIGFwcGVu
ZGVkW2xlZnRdKTsKKyAgICAgICAgICAgIGEgPSBwYXJlbnRpc2UoYXBwZW5kZWRbcmlnaHRdLCBh
cHBlbmRlZFtyaWdodF0uaGVpZ2h0ICsgMSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBD
aGVjayBpZiBiYWxhbmNpbmcgaXMgbmVlZGVkIGFuZCByZXR1cm4gYmFzZWQgb24gdGhhdC4KKyAg
ICBpZiAoYS50YWJsZS5sZW5ndGggPT09IDAgfHwgYi50YWJsZS5sZW5ndGggPT09IDApCisgICAg
eworICAgICAgICByZXR1cm4gW2EsIGJdOworICAgIH0KKworICAgIHZhciB0b1JlbW92ZSA9IGNh
bGNUb1JlbW92ZShhLCBiKTsKKyAgICBpZiAodG9SZW1vdmUgPD0gRSkKKyAgICB7CisgICAgICAg
IHJldHVybiBbYSwgYl07CisgICAgfQorICAgIHJldHVybiBzaHVmZmxlKGEsIGIsIHRvUmVtb3Zl
KTsKK30KKworLy8gSGVscGVyZnVuY3Rpb25zIGZvciBhcHBlbmRfLiBSZXBsYWNlcyBhIGNoaWxk
IG5vZGUgYXQgdGhlIHNpZGUgb2YgdGhlIHBhcmVudC4KK2Z1bmN0aW9uIGluc2VydFJpZ2h0KHBh
cmVudCwgbm9kZSkKK3sKKyAgICB2YXIgaW5kZXggPSBwYXJlbnQudGFibGUubGVuZ3RoIC0gMTsK
KyAgICBwYXJlbnQudGFibGVbaW5kZXhdID0gbm9kZTsKKyAgICBwYXJlbnQubGVuZ3Roc1tpbmRl
eF0gPSBsZW5ndGgobm9kZSk7CisgICAgcGFyZW50Lmxlbmd0aHNbaW5kZXhdICs9IGluZGV4ID4g
MCA/IHBhcmVudC5sZW5ndGhzW2luZGV4IC0gMV0gOiAwOworfQorCitmdW5jdGlvbiBpbnNlcnRM
ZWZ0KHBhcmVudCwgbm9kZSkKK3sKKyAgICBpZiAobm9kZS50YWJsZS5sZW5ndGggPiAwKQorICAg
IHsKKyAgICAgICAgcGFyZW50LnRhYmxlWzBdID0gbm9kZTsKKyAgICAgICAgcGFyZW50Lmxlbmd0
aHNbMF0gPSBsZW5ndGgobm9kZSk7CisKKyAgICAgICAgdmFyIGxlbiA9IGxlbmd0aChwYXJlbnQu
dGFibGVbMF0pOworICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IHBhcmVudC5sZW5ndGhzLmxl
bmd0aDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBsZW4gKz0gbGVuZ3RoKHBhcmVudC50
YWJsZVtpXSk7CisgICAgICAgICAgICBwYXJlbnQubGVuZ3Roc1tpXSA9IGxlbjsKKyAgICAgICAg
fQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBwYXJlbnQudGFibGUuc2hpZnQoKTsK
KyAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBwYXJlbnQubGVuZ3Rocy5sZW5ndGg7IGkrKykK
KyAgICAgICAgeworICAgICAgICAgICAgcGFyZW50Lmxlbmd0aHNbaV0gPSBwYXJlbnQubGVuZ3Ro
c1tpXSAtIHBhcmVudC5sZW5ndGhzWzBdOworICAgICAgICB9CisgICAgICAgIHBhcmVudC5sZW5n
dGhzLnNoaWZ0KCk7CisgICAgfQorfQorCisvLyBSZXR1cm5zIHRoZSBleHRyYSBzZWFyY2ggc3Rl
cHMgZm9yIEUuIFJlZmVyIHRvIHRoZSBwYXBlci4KK2Z1bmN0aW9uIGNhbGNUb1JlbW92ZShhLCBi
KQoreworICAgIHZhciBzdWJMZW5ndGhzID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEu
dGFibGUubGVuZ3RoOyBpKyspCisgICAgeworICAgICAgICBzdWJMZW5ndGhzICs9IGEudGFibGVb
aV0udGFibGUubGVuZ3RoOworICAgIH0KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGIudGFibGUu
bGVuZ3RoOyBpKyspCisgICAgeworICAgICAgICBzdWJMZW5ndGhzICs9IGIudGFibGVbaV0udGFi
bGUubGVuZ3RoOworICAgIH0KKworICAgIHZhciB0b1JlbW92ZSA9IGEudGFibGUubGVuZ3RoICsg
Yi50YWJsZS5sZW5ndGg7CisgICAgcmV0dXJuIHRvUmVtb3ZlIC0gKE1hdGguZmxvb3IoKHN1Ykxl
bmd0aHMgLSAxKSAvIE0pICsgMSk7Cit9CisKKy8vIGdldDIsIHNldDIgYW5kIHNhdmVTbG90IGFy
ZSBoZWxwZXJzIGZvciBhY2Nlc3NpbmcgZWxlbWVudHMgb3ZlciB0d28gYXJyYXlzLgorZnVuY3Rp
b24gZ2V0MihhLCBiLCBpbmRleCkKK3sKKyAgICByZXR1cm4gaW5kZXggPCBhLmxlbmd0aAorICAg
ICAgICA/IGFbaW5kZXhdCisgICAgICAgIDogYltpbmRleCAtIGEubGVuZ3RoXTsKK30KKworZnVu
Y3Rpb24gc2V0MihhLCBiLCBpbmRleCwgdmFsdWUpCit7CisgICAgaWYgKGluZGV4IDwgYS5sZW5n
dGgpCisgICAgeworICAgICAgICBhW2luZGV4XSA9IHZhbHVlOworICAgIH0KKyAgICBlbHNlCisg
ICAgeworICAgICAgICBiW2luZGV4IC0gYS5sZW5ndGhdID0gdmFsdWU7CisgICAgfQorfQorCitm
dW5jdGlvbiBzYXZlU2xvdChhLCBiLCBpbmRleCwgc2xvdCkKK3sKKyAgICBzZXQyKGEudGFibGUs
IGIudGFibGUsIGluZGV4LCBzbG90KTsKKworICAgIHZhciBsID0gKGluZGV4ID09PSAwIHx8IGlu
ZGV4ID09PSBhLmxlbmd0aHMubGVuZ3RoKQorICAgICAgICA/IDAKKyAgICAgICAgOiBnZXQyKGEu
bGVuZ3RocywgYS5sZW5ndGhzLCBpbmRleCAtIDEpOworCisgICAgc2V0MihhLmxlbmd0aHMsIGIu
bGVuZ3RocywgaW5kZXgsIGwgKyBsZW5ndGgoc2xvdCkpOworfQorCisvLyBDcmVhdGVzIGEgbm9k
ZSBvciBsZWFmIHdpdGggYSBnaXZlbiBsZW5ndGggYXQgdGhlaXIgYXJyYXlzIGZvciBwZXJmb21h
bmNlLgorLy8gSXMgb25seSB1c2VkIGJ5IHNodWZmbGUuCitmdW5jdGlvbiBjcmVhdGVOb2RlKGgs
IGxlbmd0aCkKK3sKKyAgICBpZiAobGVuZ3RoIDwgMCkKKyAgICB7CisgICAgICAgIGxlbmd0aCA9
IDA7CisgICAgfQorICAgIHZhciBhID0geworICAgICAgICBjdG9yOiAnX0FycmF5JywKKyAgICAg
ICAgaGVpZ2h0OiBoLAorICAgICAgICB0YWJsZTogbmV3IEFycmF5KGxlbmd0aCkKKyAgICB9Owor
ICAgIGlmIChoID4gMCkKKyAgICB7CisgICAgICAgIGEubGVuZ3RocyA9IG5ldyBBcnJheShsZW5n
dGgpOworICAgIH0KKyAgICByZXR1cm4gYTsKK30KKworLy8gUmV0dXJucyBhbiBhcnJheSBvZiB0
d28gYmFsYW5jZWQgbm9kZXMuCitmdW5jdGlvbiBzaHVmZmxlKGEsIGIsIHRvUmVtb3ZlKQorewor
ICAgIHZhciBuZXdBID0gY3JlYXRlTm9kZShhLmhlaWdodCwgTWF0aC5taW4oTSwgYS50YWJsZS5s
ZW5ndGggKyBiLnRhYmxlLmxlbmd0aCAtIHRvUmVtb3ZlKSk7CisgICAgdmFyIG5ld0IgPSBjcmVh
dGVOb2RlKGEuaGVpZ2h0LCBuZXdBLnRhYmxlLmxlbmd0aCAtIChhLnRhYmxlLmxlbmd0aCArIGIu
dGFibGUubGVuZ3RoIC0gdG9SZW1vdmUpKTsKKworICAgIC8vIFNraXAgdGhlIHNsb3RzIHdpdGgg
c2l6ZSBNLiBNb3JlIHByZWNpc2U6IGNvcHkgdGhlIHNsb3QgcmVmZXJlbmNlcworICAgIC8vIHRv
IHRoZSBuZXcgbm9kZQorICAgIHZhciByZWFkID0gMDsKKyAgICB3aGlsZSAoZ2V0MihhLnRhYmxl
LCBiLnRhYmxlLCByZWFkKS50YWJsZS5sZW5ndGggJSBNID09PSAwKQorICAgIHsKKyAgICAgICAg
c2V0MihuZXdBLnRhYmxlLCBuZXdCLnRhYmxlLCByZWFkLCBnZXQyKGEudGFibGUsIGIudGFibGUs
IHJlYWQpKTsKKyAgICAgICAgc2V0MihuZXdBLmxlbmd0aHMsIG5ld0IubGVuZ3RocywgcmVhZCwg
Z2V0MihhLmxlbmd0aHMsIGIubGVuZ3RocywgcmVhZCkpOworICAgICAgICByZWFkKys7CisgICAg
fQorCisgICAgLy8gUHVsbGluZyBpdGVtcyBmcm9tIGxlZnQgdG8gcmlnaHQsIGNhY2hpbmcgaW4g
YSBzbG90IGJlZm9yZSB3cml0aW5nCisgICAgLy8gaXQgaW50byB0aGUgbmV3IG5vZGVzLgorICAg
IHZhciB3cml0ZSA9IHJlYWQ7CisgICAgdmFyIHNsb3QgPSBuZXcgY3JlYXRlTm9kZShhLmhlaWdo
dCAtIDEsIDApOworICAgIHZhciBmcm9tID0gMDsKKworICAgIC8vIElmIHRoZSBjdXJyZW50IHNs
b3QgaXMgc3RpbGwgY29udGFpbmluZyBkYXRhLCB0aGVuIHRoZXJlIHdpbGwgYmUgYXQKKyAgICAv
LyBsZWFzdCBvbmUgbW9yZSB3cml0ZSwgc28gd2UgZG8gbm90IGJyZWFrIHRoaXMgbG9vcCB5ZXQu
CisgICAgd2hpbGUgKHJlYWQgLSB3cml0ZSAtIChzbG90LnRhYmxlLmxlbmd0aCA+IDAgPyAxIDog
MCkgPCB0b1JlbW92ZSkKKyAgICB7CisgICAgICAgIC8vIEZpbmQgb3V0IHRoZSBtYXggcG9zc2li
bGUgaXRlbXMgZm9yIGNvcHlpbmcuCisgICAgICAgIHZhciBzb3VyY2UgPSBnZXQyKGEudGFibGUs
IGIudGFibGUsIHJlYWQpOworICAgICAgICB2YXIgdG8gPSBNYXRoLm1pbihNIC0gc2xvdC50YWJs
ZS5sZW5ndGgsIHNvdXJjZS50YWJsZS5sZW5ndGgpOworCisgICAgICAgIC8vIENvcHkgYW5kIGFk
anVzdCBzaXplIHRhYmxlLgorICAgICAgICBzbG90LnRhYmxlID0gc2xvdC50YWJsZS5jb25jYXQo
c291cmNlLnRhYmxlLnNsaWNlKGZyb20sIHRvKSk7CisgICAgICAgIGlmIChzbG90LmhlaWdodCA+
IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBsZW4gPSBzbG90Lmxlbmd0aHMubGVuZ3Ro
OworICAgICAgICAgICAgZm9yICh2YXIgaSA9IGxlbjsgaSA8IGxlbiArIHRvIC0gZnJvbTsgaSsr
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNsb3QubGVuZ3Roc1tpXSA9IGxlbmd0
aChzbG90LnRhYmxlW2ldKTsKKyAgICAgICAgICAgICAgICBzbG90Lmxlbmd0aHNbaV0gKz0gKGkg
PiAwID8gc2xvdC5sZW5ndGhzW2kgLSAxXSA6IDApOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgZnJvbSArPSB0bzsKKworICAgICAgICAvLyBPbmx5IHByb2NlZWQgdG8gbmV4
dCBzbG90c1tpXSBpZiB0aGUgY3VycmVudCBvbmUgd2FzCisgICAgICAgIC8vIGZ1bGx5IGNvcGll
ZC4KKyAgICAgICAgaWYgKHNvdXJjZS50YWJsZS5sZW5ndGggPD0gdG8pCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJlYWQrKzsgZnJvbSA9IDA7CisgICAgICAgIH0KKworICAgICAgICAvLyBPbmx5
IGNyZWF0ZSBhIG5ldyBzbG90IGlmIHRoZSBjdXJyZW50IG9uZSBpcyBmaWxsZWQgdXAuCisgICAg
ICAgIGlmIChzbG90LnRhYmxlLmxlbmd0aCA9PT0gTSkKKyAgICAgICAgeworICAgICAgICAgICAg
c2F2ZVNsb3QobmV3QSwgbmV3Qiwgd3JpdGUsIHNsb3QpOworICAgICAgICAgICAgc2xvdCA9IGNy
ZWF0ZU5vZGUoYS5oZWlnaHQgLSAxLCAwKTsKKyAgICAgICAgICAgIHdyaXRlKys7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBDbGVhbnVwIGFmdGVyIHRoZSBsb29wLiBDb3B5IHRoZSBsYXN0
IHNsb3QgaW50byB0aGUgbmV3IG5vZGVzLgorICAgIGlmIChzbG90LnRhYmxlLmxlbmd0aCA+IDAp
CisgICAgeworICAgICAgICBzYXZlU2xvdChuZXdBLCBuZXdCLCB3cml0ZSwgc2xvdCk7CisgICAg
ICAgIHdyaXRlKys7CisgICAgfQorCisgICAgLy8gU2hpZnQgdGhlIHVudG91Y2hlZCBzbG90cyB0
byB0aGUgbGVmdAorICAgIHdoaWxlIChyZWFkIDwgYS50YWJsZS5sZW5ndGggKyBiLnRhYmxlLmxl
bmd0aCApCisgICAgeworICAgICAgICBzYXZlU2xvdChuZXdBLCBuZXdCLCB3cml0ZSwgZ2V0Mihh
LnRhYmxlLCBiLnRhYmxlLCByZWFkKSk7CisgICAgICAgIHJlYWQrKzsKKyAgICAgICAgd3JpdGUr
KzsKKyAgICB9CisKKyAgICByZXR1cm4gW25ld0EsIG5ld0JdOworfQorCisvLyBOYXZpZ2F0aW9u
IGZ1bmN0aW9ucworZnVuY3Rpb24gYm90UmlnaHQoYSkKK3sKKyAgICByZXR1cm4gYS50YWJsZVth
LnRhYmxlLmxlbmd0aCAtIDFdOworfQorZnVuY3Rpb24gYm90TGVmdChhKQoreworICAgIHJldHVy
biBhLnRhYmxlWzBdOworfQorCisvLyBDb3BpZXMgYSBub2RlIGZvciB1cGRhdGluZy4gTm90ZSB0
aGF0IHlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGlmCisvLyBvbmx5IHVwZGF0aW5nIG9ubHkgb25l
IG9mICJ0YWJsZSIgb3IgImxlbmd0aHMiIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLgorZnVuY3Rp
b24gbm9kZUNvcHkoYSkKK3sKKyAgICB2YXIgbmV3QSA9IHsKKyAgICAgICAgY3RvcjogJ19BcnJh
eScsCisgICAgICAgIGhlaWdodDogYS5oZWlnaHQsCisgICAgICAgIHRhYmxlOiBhLnRhYmxlLnNs
aWNlKCkKKyAgICB9OworICAgIGlmIChhLmhlaWdodCA+IDApCisgICAgeworICAgICAgICBuZXdB
Lmxlbmd0aHMgPSBhLmxlbmd0aHMuc2xpY2UoKTsKKyAgICB9CisgICAgcmV0dXJuIG5ld0E7Cit9
CisKKy8vIFJldHVybnMgaG93IG1hbnkgaXRlbXMgYXJlIGluIHRoZSB0cmVlLgorZnVuY3Rpb24g
bGVuZ3RoKGFycmF5KQoreworICAgIGlmIChhcnJheS5oZWlnaHQgPT09IDApCisgICAgeworICAg
ICAgICByZXR1cm4gYXJyYXkudGFibGUubGVuZ3RoOworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICByZXR1cm4gYXJyYXkubGVuZ3Roc1thcnJheS5sZW5ndGhzLmxlbmd0aCAtIDFdOwor
ICAgIH0KK30KKworLy8gQ2FsY3VsYXRlcyBpbiB3aGljaCBzbG90IG9mICJ0YWJsZSIgdGhlIGl0
ZW0gcHJvYmFibHkgaXMsIHRoZW4KKy8vIGZpbmQgdGhlIGV4YWN0IHNsb3QgdmlhIGZvcndhcmQg
c2VhcmNoaW5nIGluICAibGVuZ3RocyIuIFJldHVybnMgdGhlIGluZGV4LgorZnVuY3Rpb24gZ2V0
U2xvdChpLCBhKQoreworICAgIHZhciBzbG90ID0gaSA+PiAoNSAqIGEuaGVpZ2h0KTsKKyAgICB3
aGlsZSAoYS5sZW5ndGhzW3Nsb3RdIDw9IGkpCisgICAgeworICAgICAgICBzbG90Kys7CisgICAg
fQorICAgIHJldHVybiBzbG90OworfQorCisvLyBSZWN1cnNpdmVseSBjcmVhdGVzIGEgdHJlZSB3
aXRoIGEgZ2l2ZW4gaGVpZ2h0IGNvbnRhaW5pbmcKKy8vIG9ubHkgdGhlIGdpdmVuIGl0ZW0uCitm
dW5jdGlvbiBjcmVhdGUoaXRlbSwgaCkKK3sKKyAgICBpZiAoaCA9PT0gMCkKKyAgICB7CisgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICBjdG9yOiAnX0FycmF5JywKKyAgICAgICAgICAgIGhl
aWdodDogMCwKKyAgICAgICAgICAgIHRhYmxlOiBbaXRlbV0KKyAgICAgICAgfTsKKyAgICB9Cisg
ICAgcmV0dXJuIHsKKyAgICAgICAgY3RvcjogJ19BcnJheScsCisgICAgICAgIGhlaWdodDogaCwK
KyAgICAgICAgdGFibGU6IFtjcmVhdGUoaXRlbSwgaCAtIDEpXSwKKyAgICAgICAgbGVuZ3Roczog
WzFdCisgICAgfTsKK30KKworLy8gUmVjdXJzaXZlbHkgY3JlYXRlcyBhIHRyZWUgdGhhdCBjb250
YWlucyB0aGUgZ2l2ZW4gdHJlZS4KK2Z1bmN0aW9uIHBhcmVudGlzZSh0cmVlLCBoKQoreworICAg
IGlmIChoID09PSB0cmVlLmhlaWdodCkKKyAgICB7CisgICAgICAgIHJldHVybiB0cmVlOworICAg
IH0KKworICAgIHJldHVybiB7CisgICAgICAgIGN0b3I6ICdfQXJyYXknLAorICAgICAgICBoZWln
aHQ6IGgsCisgICAgICAgIHRhYmxlOiBbcGFyZW50aXNlKHRyZWUsIGggLSAxKV0sCisgICAgICAg
IGxlbmd0aHM6IFtsZW5ndGgodHJlZSldCisgICAgfTsKK30KKworLy8gRW1waGFzaXplcyBibG9v
ZCBicm90aGVyaG9vZCBiZW5lYXRoIHR3byB0cmVlcy4KK2Z1bmN0aW9uIHNpYmxpc2UoYSwgYikK
K3sKKyAgICByZXR1cm4geworICAgICAgICBjdG9yOiAnX0FycmF5JywKKyAgICAgICAgaGVpZ2h0
OiBhLmhlaWdodCArIDEsCisgICAgICAgIHRhYmxlOiBbYSwgYl0sCisgICAgICAgIGxlbmd0aHM6
IFtsZW5ndGgoYSksIGxlbmd0aChhKSArIGxlbmd0aChiKV0KKyAgICB9OworfQorCitmdW5jdGlv
biB0b0pTQXJyYXkoYSkKK3sKKyAgICB2YXIganNBcnJheSA9IG5ldyBBcnJheShsZW5ndGgoYSkp
OworICAgIHRvSlNBcnJheV8oanNBcnJheSwgMCwgYSk7CisgICAgcmV0dXJuIGpzQXJyYXk7Cit9
CisKK2Z1bmN0aW9uIHRvSlNBcnJheV8oanNBcnJheSwgaSwgYSkKK3sKKyAgICBmb3IgKHZhciB0
ID0gMDsgdCA8IGEudGFibGUubGVuZ3RoOyB0KyspCisgICAgeworICAgICAgICBpZiAoYS5oZWln
aHQgPT09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGpzQXJyYXlbaSArIHRdID0gYS50YWJs
ZVt0XTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHZh
ciBpbmMgPSB0ID09PSAwID8gMCA6IGEubGVuZ3Roc1t0IC0gMV07CisgICAgICAgICAgICB0b0pT
QXJyYXlfKGpzQXJyYXksIGkgKyBpbmMsIGEudGFibGVbdF0pOworICAgICAgICB9CisgICAgfQor
fQorCitmdW5jdGlvbiBmcm9tSlNBcnJheShqc0FycmF5KQoreworICAgIGlmIChqc0FycmF5Lmxl
bmd0aCA9PT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBlbXB0eTsKKyAgICB9CisgICAgdmFy
IGggPSBNYXRoLmZsb29yKE1hdGgubG9nKGpzQXJyYXkubGVuZ3RoKSAvIE1hdGgubG9nKE0pKTsK
KyAgICByZXR1cm4gZnJvbUpTQXJyYXlfKGpzQXJyYXksIGgsIDAsIGpzQXJyYXkubGVuZ3RoKTsK
K30KKworZnVuY3Rpb24gZnJvbUpTQXJyYXlfKGpzQXJyYXksIGgsIGZyb20sIHRvKQoreworICAg
IGlmIChoID09PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIGN0b3I6
ICdfQXJyYXknLAorICAgICAgICAgICAgaGVpZ2h0OiAwLAorICAgICAgICAgICAgdGFibGU6IGpz
QXJyYXkuc2xpY2UoZnJvbSwgdG8pCisgICAgICAgIH07CisgICAgfQorCisgICAgdmFyIHN0ZXAg
PSBNYXRoLnBvdyhNLCBoKTsKKyAgICB2YXIgdGFibGUgPSBuZXcgQXJyYXkoTWF0aC5jZWlsKCh0
byAtIGZyb20pIC8gc3RlcCkpOworICAgIHZhciBsZW5ndGhzID0gbmV3IEFycmF5KHRhYmxlLmxl
bmd0aCk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWJsZS5sZW5ndGg7IGkrKykKKyAgICB7
CisgICAgICAgIHRhYmxlW2ldID0gZnJvbUpTQXJyYXlfKGpzQXJyYXksIGggLSAxLCBmcm9tICsg
KGkgKiBzdGVwKSwgTWF0aC5taW4oZnJvbSArICgoaSArIDEpICogc3RlcCksIHRvKSk7CisgICAg
ICAgIGxlbmd0aHNbaV0gPSBsZW5ndGgodGFibGVbaV0pICsgKGkgPiAwID8gbGVuZ3Roc1tpIC0g
MV0gOiAwKTsKKyAgICB9CisgICAgcmV0dXJuIHsKKyAgICAgICAgY3RvcjogJ19BcnJheScsCisg
ICAgICAgIGhlaWdodDogaCwKKyAgICAgICAgdGFibGU6IHRhYmxlLAorICAgICAgICBsZW5ndGhz
OiBsZW5ndGhzCisgICAgfTsKK30KKworcmV0dXJuIHsKKyAgICBlbXB0eTogZW1wdHksCisgICAg
ZnJvbUxpc3Q6IGZyb21MaXN0LAorICAgIHRvTGlzdDogdG9MaXN0LAorICAgIGluaXRpYWxpemU6
IEYyKGluaXRpYWxpemUpLAorICAgIGFwcGVuZDogRjIoYXBwZW5kKSwKKyAgICBwdXNoOiBGMihw
dXNoKSwKKyAgICBzbGljZTogRjMoc2xpY2UpLAorICAgIGdldDogRjIoZ2V0KSwKKyAgICBzZXQ6
IEYzKHNldCksCisgICAgbWFwOiBGMihtYXApLAorICAgIGluZGV4ZWRNYXA6IEYyKGluZGV4ZWRN
YXApLAorICAgIGZvbGRsOiBGMyhmb2xkbCksCisgICAgZm9sZHI6IEYzKGZvbGRyKSwKKyAgICBs
ZW5ndGg6IGxlbmd0aCwKKworICAgIHRvSlNBcnJheTogdG9KU0FycmF5LAorICAgIGZyb21KU0Fy
cmF5OiBmcm9tSlNBcnJheQorfTsKKworfSgpOwordmFyIF9lbG1fbGFuZyRjb3JlJEFycmF5JGFw
cGVuZCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9BcnJheS5hcHBlbmQ7Cit2YXIgX2VsbV9sYW5n
JGNvcmUkQXJyYXkkbGVuZ3RoID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0FycmF5Lmxlbmd0aDsK
K3ZhciBfZWxtX2xhbmckY29yZSRBcnJheSRpc0VtcHR5ID0gZnVuY3Rpb24gKGFycmF5KSB7Cisg
ICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5lcSgKKyAgICAgICAgX2VsbV9s
YW5nJGNvcmUkQXJyYXkkbGVuZ3RoKGFycmF5KSwKKyAgICAgICAgMCk7Cit9OwordmFyIF9lbG1f
bGFuZyRjb3JlJEFycmF5JHNsaWNlID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0FycmF5LnNsaWNl
OwordmFyIF9lbG1fbGFuZyRjb3JlJEFycmF5JHNldCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9B
cnJheS5zZXQ7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQXJyYXkkZ2V0ID0gRjIoCisgICAgZnVuY3Rp
b24gKGksIGFycmF5KSB7CisgICAgICAgIHJldHVybiAoKF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9V
dGlscy5jbXAoMCwgaSkgPCAxKSAmJiAoX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNtcCgK
KyAgICAgICAgICAgIGksCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfQXJyYXku
bGVuZ3RoKGFycmF5KSkgPCAwKSkgPyBfZWxtX2xhbmckY29yZSRNYXliZSRKdXN0KAorICAgICAg
ICAgICAgQTIoX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0FycmF5LmdldCwgaSwgYXJyYXkpKSA6IF9l
bG1fbGFuZyRjb3JlJE1heWJlJE5vdGhpbmc7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUk
QXJyYXkkcHVzaCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9BcnJheS5wdXNoOwordmFyIF9lbG1f
bGFuZyRjb3JlJEFycmF5JGVtcHR5ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0FycmF5LmVtcHR5
OwordmFyIF9lbG1fbGFuZyRjb3JlJEFycmF5JGZpbHRlciA9IEYyKAorICAgIGZ1bmN0aW9uIChp
c09rYXksIGFycikgeworICAgICAgICB2YXIgdXBkYXRlID0gRjIoCisgICAgICAgICAgICBmdW5j
dGlvbiAoeCwgeHMpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaXNPa2F5KHgpID8gQTIoX2Vs
bV9sYW5nJGNvcmUkTmF0aXZlX0FycmF5LnB1c2gsIHgsIHhzKSA6IHhzOworICAgICAgICAgICAg
fSk7CisgICAgICAgIHJldHVybiBBMyhfZWxtX2xhbmckY29yZSROYXRpdmVfQXJyYXkuZm9sZGws
IHVwZGF0ZSwgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0FycmF5LmVtcHR5LCBhcnIpOworICAgIH0p
OwordmFyIF9lbG1fbGFuZyRjb3JlJEFycmF5JGZvbGRyID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZl
X0FycmF5LmZvbGRyOwordmFyIF9lbG1fbGFuZyRjb3JlJEFycmF5JGZvbGRsID0gX2VsbV9sYW5n
JGNvcmUkTmF0aXZlX0FycmF5LmZvbGRsOwordmFyIF9lbG1fbGFuZyRjb3JlJEFycmF5JGluZGV4
ZWRNYXAgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQXJyYXkuaW5kZXhlZE1hcDsKK3ZhciBfZWxt
X2xhbmckY29yZSRBcnJheSRtYXAgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQXJyYXkubWFwOwor
dmFyIF9lbG1fbGFuZyRjb3JlJEFycmF5JHRvSW5kZXhlZExpc3QgPSBmdW5jdGlvbiAoYXJyYXkp
IHsKKyAgICByZXR1cm4gQTMoCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3QkbWFwMiwKKyAg
ICAgICAgRjIoCisgICAgICAgICAgICBmdW5jdGlvbiAodjAsIHYxKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHtjdG9yOiAnX1R1cGxlMicsIF8wOiB2MCwgXzE6IHYxfTsKKyAgICAgICAgICAg
IH0pLAorICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5yYW5nZSgKKyAgICAgICAg
ICAgIDAsCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfQXJyYXkubGVuZ3RoKGFy
cmF5KSAtIDEpLAorICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfQXJyYXkudG9MaXN0KGFy
cmF5KSk7Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJEFycmF5JHRvTGlzdCA9IF9lbG1fbGFuZyRj
b3JlJE5hdGl2ZV9BcnJheS50b0xpc3Q7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQXJyYXkkZnJvbUxp
c3QgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQXJyYXkuZnJvbUxpc3Q7Cit2YXIgX2VsbV9sYW5n
JGNvcmUkQXJyYXkkaW5pdGlhbGl6ZSA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9BcnJheS5pbml0
aWFsaXplOwordmFyIF9lbG1fbGFuZyRjb3JlJEFycmF5JHJlcGVhdCA9IEYyKAorICAgIGZ1bmN0
aW9uIChuLCBlKSB7CisgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgIF9lbG1fbGFuZyRj
b3JlJEFycmF5JGluaXRpYWxpemUsCisgICAgICAgICAgICBuLAorICAgICAgICAgICAgX2VsbV9s
YW5nJGNvcmUkQmFzaWNzJGFsd2F5cyhlKSk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUk
QXJyYXkkQXJyYXkgPSB7Y3RvcjogJ0FycmF5J307CisKK3ZhciBfZWxtX2xhbmckY29yZSRUYXNr
JG9uRXJyb3IgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfU2NoZWR1bGVyLm9uRXJyb3I7Cit2YXIg
X2VsbV9sYW5nJGNvcmUkVGFzayRhbmRUaGVuID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVk
dWxlci5hbmRUaGVuOwordmFyIF9lbG1fbGFuZyRjb3JlJFRhc2skc3Bhd25DbWQgPSBGMigKKyAg
ICBmdW5jdGlvbiAocm91dGVyLCBfcDApIHsKKyAgICAgICAgdmFyIF9wMSA9IF9wMDsKKyAgICAg
ICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TY2hlZHVsZXIuc3Bhd24oCisgICAgICAg
ICAgICBBMigKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRUYXNrJGFuZFRoZW4sCisg
ICAgICAgICAgICAgICAgX3AxLl8wLAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFBs
YXRmb3JtJHNlbmRUb0FwcChyb3V0ZXIpKSk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUk
VGFzayRmYWlsID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVkdWxlci5mYWlsOwordmFyIF9l
bG1fbGFuZyRjb3JlJFRhc2skbWFwRXJyb3IgPSBGMigKKyAgICBmdW5jdGlvbiAoZiwgdGFzaykg
eworICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRUYXNrJG9u
RXJyb3IsCisgICAgICAgICAgICB0YXNrLAorICAgICAgICAgICAgZnVuY3Rpb24gKGVycikgewor
ICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRUYXNrJGZhaWwoCisgICAgICAg
ICAgICAgICAgICAgIGYoZXJyKSk7CisgICAgICAgICAgICB9KTsKKyAgICB9KTsKK3ZhciBfZWxt
X2xhbmckY29yZSRUYXNrJHN1Y2NlZWQgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfU2NoZWR1bGVy
LnN1Y2NlZWQ7Cit2YXIgX2VsbV9sYW5nJGNvcmUkVGFzayRtYXAgPSBGMigKKyAgICBmdW5jdGlv
biAoZnVuYywgdGFza0EpIHsKKyAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgX2VsbV9s
YW5nJGNvcmUkVGFzayRhbmRUaGVuLAorICAgICAgICAgICAgdGFza0EsCisgICAgICAgICAgICBm
dW5jdGlvbiAoYSkgeworICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRUYXNr
JHN1Y2NlZWQoCisgICAgICAgICAgICAgICAgICAgIGZ1bmMoYSkpOworICAgICAgICAgICAgfSk7
CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkVGFzayRtYXAyID0gRjMoCisgICAgZnVuY3Rp
b24gKGZ1bmMsIHRhc2tBLCB0YXNrQikgeworICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAg
ICBfZWxtX2xhbmckY29yZSRUYXNrJGFuZFRoZW4sCisgICAgICAgICAgICB0YXNrQSwKKyAgICAg
ICAgICAgIGZ1bmN0aW9uIChhKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEEyKAorICAgICAg
ICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRUYXNrJGFuZFRoZW4sCisgICAgICAgICAgICAg
ICAgICAgIHRhc2tCLAorICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoYikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFRhc2skc3VjY2VlZCgKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBMihmdW5jLCBhLCBiKSk7CisgICAgICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUk
VGFzayRtYXAzID0gRjQoCisgICAgZnVuY3Rpb24gKGZ1bmMsIHRhc2tBLCB0YXNrQiwgdGFza0Mp
IHsKKyAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRh
bmRUaGVuLAorICAgICAgICAgICAgdGFza0EsCisgICAgICAgICAgICBmdW5jdGlvbiAoYSkgewor
ICAgICAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5n
JGNvcmUkVGFzayRhbmRUaGVuLAorICAgICAgICAgICAgICAgICAgICB0YXNrQiwKKyAgICAgICAg
ICAgICAgICAgICAgZnVuY3Rpb24gKGIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRUYXNrJGFu
ZFRoZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFza0MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZnVuY3Rpb24gKGMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFRhc2skc3VjY2VlZCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEEzKGZ1bmMsIGEsIGIsIGMpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9
KTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRUYXNrJG1hcDQgPSBGNSgKKyAgICBmdW5j
dGlvbiAoZnVuYywgdGFza0EsIHRhc2tCLCB0YXNrQywgdGFza0QpIHsKKyAgICAgICAgcmV0dXJu
IEEyKAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRhbmRUaGVuLAorICAgICAgICAg
ICAgdGFza0EsCisgICAgICAgICAgICBmdW5jdGlvbiAoYSkgeworICAgICAgICAgICAgICAgIHJl
dHVybiBBMigKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRhbmRUaGVu
LAorICAgICAgICAgICAgICAgICAgICB0YXNrQiwKKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rp
b24gKGIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRUYXNrJGFuZFRoZW4sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGFza0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVu
Y3Rpb24gKGMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEEyKAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRh
bmRUaGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFza0QsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoZCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRUYXNr
JHN1Y2NlZWQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEE0
KGZ1bmMsIGEsIGIsIGMsIGQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgIH0pOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJFRhc2sk
bWFwNSA9IEY2KAorICAgIGZ1bmN0aW9uIChmdW5jLCB0YXNrQSwgdGFza0IsIHRhc2tDLCB0YXNr
RCwgdGFza0UpIHsKKyAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgX2VsbV9sYW5nJGNv
cmUkVGFzayRhbmRUaGVuLAorICAgICAgICAgICAgdGFza0EsCisgICAgICAgICAgICBmdW5jdGlv
biAoYSkgeworICAgICAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgICAgICAgICAg
X2VsbV9sYW5nJGNvcmUkVGFzayRhbmRUaGVuLAorICAgICAgICAgICAgICAgICAgICB0YXNrQiwK
KyAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGIpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29y
ZSRUYXNrJGFuZFRoZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFza0MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGMpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRhbmRUaGVuLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGFza0QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmdW5jdGlvbiAoZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X2VsbV9sYW5nJGNvcmUkVGFzayRhbmRUaGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0YXNrRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRUYXNrJHN1Y2NlZWQoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQTUoZnVu
YywgYSwgYiwgYywgZCwgZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIH0pOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJFRhc2skYW5kTWFwID0g
RjIoCisgICAgZnVuY3Rpb24gKHRhc2tGdW5jLCB0YXNrVmFsdWUpIHsKKyAgICAgICAgcmV0dXJu
IEEyKAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRhbmRUaGVuLAorICAgICAgICAg
ICAgdGFza0Z1bmMsCisgICAgICAgICAgICBmdW5jdGlvbiAoZnVuYykgeworICAgICAgICAgICAg
ICAgIHJldHVybiBBMigKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRh
bmRUaGVuLAorICAgICAgICAgICAgICAgICAgICB0YXNrVmFsdWUsCisgICAgICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9l
bG1fbGFuZyRjb3JlJFRhc2skc3VjY2VlZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
dW5jKHZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7Cisg
ICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkVGFzayRzZXF1ZW5jZSA9IGZ1bmN0aW9uICh0YXNr
cykgeworICAgIHZhciBfcDIgPSB0YXNrczsKKyAgICBpZiAoX3AyLmN0b3IgPT09ICdbXScpIHsK
KyAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFRhc2skc3VjY2VlZCgKKyAgICAgICAgICAg
IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICBb
XSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBBMygKKyAgICAgICAgICAgIF9lbG1f
bGFuZyRjb3JlJFRhc2skbWFwMiwKKyAgICAgICAgICAgIEYyKAorICAgICAgICAgICAgICAgIGZ1
bmN0aW9uICh4LCB5KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBBMihfZWxtX2xhbmck
Y29yZSRMaXN0X29wc1snOjonXSwgeCwgeSk7CisgICAgICAgICAgICAgICAgfSksCisgICAgICAg
ICAgICBfcDIuXzAsCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRUYXNrJHNlcXVlbmNlKF9w
Mi5fMSkpOworICAgIH0KK307Cit2YXIgX2VsbV9sYW5nJGNvcmUkVGFzayRvbkVmZmVjdHMgPSBG
MygKKyAgICBmdW5jdGlvbiAocm91dGVyLCBjb21tYW5kcywgc3RhdGUpIHsKKyAgICAgICAgcmV0
dXJuIEEyKAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRtYXAsCisgICAgICAgICAg
ICBmdW5jdGlvbiAoX3AzKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHtjdG9yOiAnX1R1cGxl
MCd9OworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFRhc2skc2Vx
dWVuY2UoCisgICAgICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFu
ZyRjb3JlJExpc3QkbWFwLAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRUYXNr
JHNwYXduQ21kKHJvdXRlciksCisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzKSkpOworICAg
IH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJFRhc2skdG9NYXliZSA9IGZ1bmN0aW9uICh0YXNrKSB7
CisgICAgcmV0dXJuIEEyKAorICAgICAgICBfZWxtX2xhbmckY29yZSRUYXNrJG9uRXJyb3IsCisg
ICAgICAgIEEyKF9lbG1fbGFuZyRjb3JlJFRhc2skbWFwLCBfZWxtX2xhbmckY29yZSRNYXliZSRK
dXN0LCB0YXNrKSwKKyAgICAgICAgZnVuY3Rpb24gKF9wNCkgeworICAgICAgICAgICAgcmV0dXJu
IF9lbG1fbGFuZyRjb3JlJFRhc2skc3VjY2VlZChfZWxtX2xhbmckY29yZSRNYXliZSROb3RoaW5n
KTsKKyAgICAgICAgfSk7Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJFRhc2skZnJvbU1heWJlID0g
RjIoCisgICAgZnVuY3Rpb24gKCRkZWZhdWx0LCBtYXliZSkgeworICAgICAgICB2YXIgX3A1ID0g
bWF5YmU7CisgICAgICAgIGlmIChfcDUuY3RvciA9PT0gJ0p1c3QnKSB7CisgICAgICAgICAgICBy
ZXR1cm4gX2VsbV9sYW5nJGNvcmUkVGFzayRzdWNjZWVkKF9wNS5fMCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkVGFzayRmYWlsKCRkZWZhdWx0
KTsKKyAgICAgICAgfQorICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJFRhc2skdG9SZXN1bHQg
PSBmdW5jdGlvbiAodGFzaykgeworICAgIHJldHVybiBBMigKKyAgICAgICAgX2VsbV9sYW5nJGNv
cmUkVGFzayRvbkVycm9yLAorICAgICAgICBBMihfZWxtX2xhbmckY29yZSRUYXNrJG1hcCwgX2Vs
bV9sYW5nJGNvcmUkUmVzdWx0JE9rLCB0YXNrKSwKKyAgICAgICAgZnVuY3Rpb24gKG1zZykgewor
ICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFRhc2skc3VjY2VlZCgKKyAgICAgICAg
ICAgICAgICBfZWxtX2xhbmckY29yZSRSZXN1bHQkRXJyKG1zZykpOworICAgICAgICB9KTsKK307
Cit2YXIgX2VsbV9sYW5nJGNvcmUkVGFzayRmcm9tUmVzdWx0ID0gZnVuY3Rpb24gKHJlc3VsdCkg
eworICAgIHZhciBfcDYgPSByZXN1bHQ7CisgICAgaWYgKF9wNi5jdG9yID09PSAnT2snKSB7Cisg
ICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRUYXNrJHN1Y2NlZWQoX3A2Ll8wKTsKKyAgICB9
IGVsc2UgeworICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkVGFzayRmYWlsKF9wNi5fMCk7
CisgICAgfQorfTsKK3ZhciBfZWxtX2xhbmckY29yZSRUYXNrJGluaXQgPSBfZWxtX2xhbmckY29y
ZSRUYXNrJHN1Y2NlZWQoCisgICAge2N0b3I6ICdfVHVwbGUwJ30pOwordmFyIF9lbG1fbGFuZyRj
b3JlJFRhc2skb25TZWxmTXNnID0gRjMoCisgICAgZnVuY3Rpb24gKF9wOSwgX3A4LCBfcDcpIHsK
KyAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFRhc2skc3VjY2VlZCgKKyAgICAgICAgICAg
IHtjdG9yOiAnX1R1cGxlMCd9KTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRUYXNrJGNv
bW1hbmQgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfUGxhdGZvcm0ubGVhZignVGFzaycpOwordmFy
IF9lbG1fbGFuZyRjb3JlJFRhc2skVCA9IGZ1bmN0aW9uIChhKSB7CisgICAgcmV0dXJuIHtjdG9y
OiAnVCcsIF8wOiBhfTsKK307Cit2YXIgX2VsbV9sYW5nJGNvcmUkVGFzayRwZXJmb3JtID0gRjMo
CisgICAgZnVuY3Rpb24gKG9uRmFpbCwgb25TdWNjZXNzLCB0YXNrKSB7CisgICAgICAgIHJldHVy
biBfZWxtX2xhbmckY29yZSRUYXNrJGNvbW1hbmQoCisgICAgICAgICAgICBfZWxtX2xhbmckY29y
ZSRUYXNrJFQoCisgICAgICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAgICAgIF9lbG1f
bGFuZyRjb3JlJFRhc2skb25FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgQTIoX2VsbV9sYW5n
JGNvcmUkVGFzayRtYXAsIG9uU3VjY2VzcywgdGFzayksCisgICAgICAgICAgICAgICAgICAgIGZ1
bmN0aW9uICh4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNv
cmUkVGFzayRzdWNjZWVkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uRmFpbCh4KSk7
CisgICAgICAgICAgICAgICAgICAgIH0pKSk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUk
VGFzayRjbWRNYXAgPSBGMigKKyAgICBmdW5jdGlvbiAodGFnZ2VyLCBfcDEwKSB7CisgICAgICAg
IHZhciBfcDExID0gX3AxMDsKKyAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFRhc2skVCgK
KyAgICAgICAgICAgIEEyKF9lbG1fbGFuZyRjb3JlJFRhc2skbWFwLCB0YWdnZXIsIF9wMTEuXzAp
KTsKKyAgICB9KTsKK19lbG1fbGFuZyRjb3JlJE5hdGl2ZV9QbGF0Zm9ybS5lZmZlY3RNYW5hZ2Vy
c1snVGFzayddID0ge3BrZzogJ2VsbS1sYW5nL2NvcmUnLCBpbml0OiBfZWxtX2xhbmckY29yZSRU
YXNrJGluaXQsIG9uRWZmZWN0czogX2VsbV9sYW5nJGNvcmUkVGFzayRvbkVmZmVjdHMsIG9uU2Vs
Zk1zZzogX2VsbV9sYW5nJGNvcmUkVGFzayRvblNlbGZNc2csIHRhZzogJ2NtZCcsIGNtZE1hcDog
X2VsbV9sYW5nJGNvcmUkVGFzayRjbWRNYXB9OworCit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRm
b2xkciA9IEYzKAorICAgIGZ1bmN0aW9uIChmLCBhY2MsIHQpIHsKKyAgICAgICAgZm9sZHI6Cisg
ICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICB2YXIgX3AwID0gdDsKKyAgICAgICAg
ICAgIGlmIChfcDAuY3RvciA9PT0gJ1JCRW1wdHlfZWxtX2J1aWx0aW4nKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGFjYzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
dmFyIF92MSA9IGYsCisgICAgICAgICAgICAgICAgICAgIF92MiA9IEEzKAorICAgICAgICAgICAg
ICAgICAgICBmLAorICAgICAgICAgICAgICAgICAgICBfcDAuXzEsCisgICAgICAgICAgICAgICAg
ICAgIF9wMC5fMiwKKyAgICAgICAgICAgICAgICAgICAgQTMoX2VsbV9sYW5nJGNvcmUkRGljdCRm
b2xkciwgZiwgYWNjLCBfcDAuXzQpKSwKKyAgICAgICAgICAgICAgICAgICAgX3YzID0gX3AwLl8z
OworICAgICAgICAgICAgICAgIGYgPSBfdjE7CisgICAgICAgICAgICAgICAgYWNjID0gX3YyOwor
ICAgICAgICAgICAgICAgIHQgPSBfdjM7CisgICAgICAgICAgICAgICAgY29udGludWUgZm9sZHI7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRE
aWN0JGtleXMgPSBmdW5jdGlvbiAoZGljdCkgeworICAgIHJldHVybiBBMygKKyAgICAgICAgX2Vs
bV9sYW5nJGNvcmUkRGljdCRmb2xkciwKKyAgICAgICAgRjMoCisgICAgICAgICAgICBmdW5jdGlv
biAoa2V5LCB2YWx1ZSwga2V5TGlzdCkgeworICAgICAgICAgICAgICAgIHJldHVybiBBMihfZWxt
X2xhbmckY29yZSRMaXN0X29wc1snOjonXSwga2V5LCBrZXlMaXN0KTsKKyAgICAgICAgICAgIH0p
LAorICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAg
ICAgICBbXSksCisgICAgICAgIGRpY3QpOworfTsKK3ZhciBfZWxtX2xhbmckY29yZSREaWN0JHZh
bHVlcyA9IGZ1bmN0aW9uIChkaWN0KSB7CisgICAgcmV0dXJuIEEzKAorICAgICAgICBfZWxtX2xh
bmckY29yZSREaWN0JGZvbGRyLAorICAgICAgICBGMygKKyAgICAgICAgICAgIGZ1bmN0aW9uIChr
ZXksIHZhbHVlLCB2YWx1ZUxpc3QpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQTIoX2VsbV9s
YW5nJGNvcmUkTGlzdF9vcHNbJzo6J10sIHZhbHVlLCB2YWx1ZUxpc3QpOworICAgICAgICAgICAg
fSksCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAg
ICAgICAgIFtdKSwKKyAgICAgICAgZGljdCk7Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJERpY3Qk
dG9MaXN0ID0gZnVuY3Rpb24gKGRpY3QpIHsKKyAgICByZXR1cm4gQTMoCisgICAgICAgIF9lbG1f
bGFuZyRjb3JlJERpY3QkZm9sZHIsCisgICAgICAgIEYzKAorICAgICAgICAgICAgZnVuY3Rpb24g
KGtleSwgdmFsdWUsIGxpc3QpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQTIoCisgICAgICAg
ICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3Rfb3BzWyc6OiddLAorICAgICAgICAgICAg
ICAgICAgICB7Y3RvcjogJ19UdXBsZTInLCBfMDoga2V5LCBfMTogdmFsdWV9LAorICAgICAgICAg
ICAgICAgICAgICBsaXN0KTsKKyAgICAgICAgICAgIH0pLAorICAgICAgICBfZWxtX2xhbmckY29y
ZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICBbXSksCisgICAgICAgIGRpY3Qp
OworfTsKK3ZhciBfZWxtX2xhbmckY29yZSREaWN0JGZvbGRsID0gRjMoCisgICAgZnVuY3Rpb24g
KGYsIGFjYywgZGljdCkgeworICAgICAgICBmb2xkbDoKKyAgICAgICAgd2hpbGUgKHRydWUpIHsK
KyAgICAgICAgICAgIHZhciBfcDEgPSBkaWN0OworICAgICAgICAgICAgaWYgKF9wMS5jdG9yID09
PSAnUkJFbXB0eV9lbG1fYnVpbHRpbicpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYWNjOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgX3Y1ID0gZiwKKyAgICAg
ICAgICAgICAgICAgICAgX3Y2ID0gQTMoCisgICAgICAgICAgICAgICAgICAgIGYsCisgICAgICAg
ICAgICAgICAgICAgIF9wMS5fMSwKKyAgICAgICAgICAgICAgICAgICAgX3AxLl8yLAorICAgICAg
ICAgICAgICAgICAgICBBMyhfZWxtX2xhbmckY29yZSREaWN0JGZvbGRsLCBmLCBhY2MsIF9wMS5f
MykpLAorICAgICAgICAgICAgICAgICAgICBfdjcgPSBfcDEuXzQ7CisgICAgICAgICAgICAgICAg
ZiA9IF92NTsKKyAgICAgICAgICAgICAgICBhY2MgPSBfdjY7CisgICAgICAgICAgICAgICAgZGlj
dCA9IF92NzsKKyAgICAgICAgICAgICAgICBjb250aW51ZSBmb2xkbDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJERpY3QkbWVyZ2UgPSBGNigK
KyAgICBmdW5jdGlvbiAobGVmdFN0ZXAsIGJvdGhTdGVwLCByaWdodFN0ZXAsIGxlZnREaWN0LCBy
aWdodERpY3QsIGluaXRpYWxSZXN1bHQpIHsKKyAgICAgICAgdmFyIHN0ZXBTdGF0ZSA9IEYzKAor
ICAgICAgICAgICAgZnVuY3Rpb24gKHJLZXksIHJWYWx1ZSwgX3AyKSB7CisgICAgICAgICAgICAg
ICAgc3RlcFN0YXRlOgorICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAg
ICAgICAgICAgIHZhciBfcDMgPSBfcDI7CisgICAgICAgICAgICAgICAgICAgIHZhciBfcDkgPSBf
cDMuXzE7CisgICAgICAgICAgICAgICAgICAgIHZhciBfcDggPSBfcDMuXzA7CisgICAgICAgICAg
ICAgICAgICAgIHZhciBfcDQgPSBfcDg7CisgICAgICAgICAgICAgICAgICAgIGlmIChfcDQuY3Rv
ciA9PT0gJ1tdJykgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjdG9yOiAnX1R1cGxlMicsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXzA6IF9wOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfMTogQTMocmln
aHRTdGVwLCByS2V5LCByVmFsdWUsIF9wOSkKKyAgICAgICAgICAgICAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
X3A3ID0gX3A0Ll8xOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9wNiA9IF9wNC5fMC5f
MTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcDUgPSBfcDQuXzAuXzA7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNtcChfcDUs
IHJLZXkpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdjEwID0gcktl
eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3YxMSA9IHJWYWx1ZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX3YxMiA9IHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY3RvcjogJ19UdXBsZTInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfMDogX3A3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfMTogQTMobGVm
dFN0ZXAsIF9wNSwgX3A2LCBfcDkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByS2V5ID0gX3YxMDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByVmFsdWUgPSBfdjExOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9w
MiA9IF92MTI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgc3RlcFN0YXRl
OworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNtcChfcDUsIHJLZXkpID4g
MCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RvcjogJ19UdXBsZTInLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXzA6IF9wOCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF8xOiBBMyhyaWdodFN0ZXAsIHJLZXksIHJWYWx1ZSwgX3A5KQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdG9yOiAnX1R1cGxlMicsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfMDogX3A3LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXzE6IEE0KGJvdGhTdGVwLCBfcDUsIF9wNiwgclZhbHVlLCBfcDkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIHZhciBfcDEw
ID0gQTMoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSREaWN0JGZvbGRsLAorICAgICAgICAg
ICAgc3RlcFN0YXRlLAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGN0b3I6ICdfVHVw
bGUyJywKKyAgICAgICAgICAgICAgICBfMDogX2VsbV9sYW5nJGNvcmUkRGljdCR0b0xpc3QobGVm
dERpY3QpLAorICAgICAgICAgICAgICAgIF8xOiBpbml0aWFsUmVzdWx0CisgICAgICAgICAgICB9
LAorICAgICAgICAgICAgcmlnaHREaWN0KTsKKyAgICAgICAgdmFyIGxlZnRvdmVycyA9IF9wMTAu
XzA7CisgICAgICAgIHZhciBpbnRlcm1lZGlhdGVSZXN1bHQgPSBfcDEwLl8xOworICAgICAgICBy
ZXR1cm4gQTMoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRMaXN0JGZvbGRsLAorICAgICAg
ICAgICAgRjIoCisgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9wMTEsIHJlc3VsdCkgeworICAg
ICAgICAgICAgICAgICAgICB2YXIgX3AxMiA9IF9wMTE7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBBMyhsZWZ0U3RlcCwgX3AxMi5fMCwgX3AxMi5fMSwgcmVzdWx0KTsKKyAgICAgICAgICAg
ICAgICB9KSwKKyAgICAgICAgICAgIGludGVybWVkaWF0ZVJlc3VsdCwKKyAgICAgICAgICAgIGxl
ZnRvdmVycyk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRyZXBvcnRSZW1CdWcg
PSBGNCgKKyAgICBmdW5jdGlvbiAobXNnLCBjLCBsZ290LCByZ290KSB7CisgICAgICAgIHJldHVy
biBfZWxtX2xhbmckY29yZSROYXRpdmVfRGVidWcuY3Jhc2goCisgICAgICAgICAgICBfZWxtX2xh
bmckY29yZSRTdHJpbmckY29uY2F0KAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5h
dGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICAgICAgWworICAgICAgICAgICAg
ICAgICAgICAgICAgJ0ludGVybmFsIHJlZC1ibGFjayB0cmVlIGludmFyaWFudCB2aW9sYXRlZCwg
ZXhwZWN0ZWQgJywKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICcgYW5kIGdvdCAnLAorICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5n
JGNvcmUkQmFzaWNzJHRvU3RyaW5nKGMpLAorICAgICAgICAgICAgICAgICAgICAgICAgJy8nLAor
ICAgICAgICAgICAgICAgICAgICAgICAgbGdvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICcv
JywKKyAgICAgICAgICAgICAgICAgICAgICAgIHJnb3QsCisgICAgICAgICAgICAgICAgICAgICAg
ICAnXG5QbGVhc2UgcmVwb3J0IHRoaXMgYnVnIHRvIDxodHRwczovL2dpdGh1Yi5jb20vZWxtLWxh
bmcvY29yZS9pc3N1ZXM+JworICAgICAgICAgICAgICAgICAgICBdKSkpOworICAgIH0pOwordmFy
IF9lbG1fbGFuZyRjb3JlJERpY3QkaXNCQmxhY2sgPSBmdW5jdGlvbiAoZGljdCkgeworICAgIHZh
ciBfcDEzID0gZGljdDsKKyAgICBfdjE0XzI6CisgICAgZG8geworICAgICAgICBpZiAoX3AxMy5j
dG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGluJykgeworICAgICAgICAgICAgaWYgKF9wMTMuXzAu
Y3RvciA9PT0gJ0JCbGFjaycpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYnJlYWsgX3YxNF8yOworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKF9wMTMuXzAuY3RvciA9PT0g
J0xCQmxhY2snKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIGJyZWFrIF92MTRfMjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0gd2hpbGUoZmFsc2UpOworICAgIHJldHVybiBmYWxzZTsKK307Cit2YXIg
X2VsbV9sYW5nJGNvcmUkRGljdCRzaXplSGVscCA9IEYyKAorICAgIGZ1bmN0aW9uIChuLCBkaWN0
KSB7CisgICAgICAgIHNpemVIZWxwOgorICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAg
ICAgdmFyIF9wMTQgPSBkaWN0OworICAgICAgICAgICAgaWYgKF9wMTQuY3RvciA9PT0gJ1JCRW1w
dHlfZWxtX2J1aWx0aW4nKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG47CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBfdjE2ID0gQTIoX2VsbV9sYW5nJGNvcmUk
RGljdCRzaXplSGVscCwgbiArIDEsIF9wMTQuXzQpLAorICAgICAgICAgICAgICAgICAgICBfdjE3
ID0gX3AxNC5fMzsKKyAgICAgICAgICAgICAgICBuID0gX3YxNjsKKyAgICAgICAgICAgICAgICBk
aWN0ID0gX3YxNzsKKyAgICAgICAgICAgICAgICBjb250aW51ZSBzaXplSGVscDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJERpY3Qkc2l6ZSA9
IGZ1bmN0aW9uIChkaWN0KSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRjb3JlJERpY3Qkc2l6
ZUhlbHAsIDAsIGRpY3QpOworfTsKK3ZhciBfZWxtX2xhbmckY29yZSREaWN0JGdldCA9IEYyKAor
ICAgIGZ1bmN0aW9uICh0YXJnZXRLZXksIGRpY3QpIHsKKyAgICAgICAgZ2V0OgorICAgICAgICB3
aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgdmFyIF9wMTUgPSBkaWN0OworICAgICAgICAgICAg
aWYgKF9wMTUuY3RvciA9PT0gJ1JCRW1wdHlfZWxtX2J1aWx0aW4nKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE1heWJlJE5vdGhpbmc7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIHZhciBfcDE2ID0gQTIoX2VsbV9sYW5nJGNvcmUkQmFzaWNz
JGNvbXBhcmUsIHRhcmdldEtleSwgX3AxNS5fMSk7CisgICAgICAgICAgICAgICAgc3dpdGNoIChf
cDE2LmN0b3IpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAnTFQnOgorICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIF92MjAgPSB0YXJnZXRLZXksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX3YyMSA9IF9wMTUuXzM7CisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRLZXkg
PSBfdjIwOworICAgICAgICAgICAgICAgICAgICAgICAgZGljdCA9IF92MjE7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZSBnZXQ7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0VR
JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRNYXliZSRK
dXN0KF9wMTUuXzIpOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIF92MjIgPSB0YXJnZXRLZXksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX3YyMyA9IF9wMTUuXzQ7CisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRLZXkg
PSBfdjIyOworICAgICAgICAgICAgICAgICAgICAgICAgZGljdCA9IF92MjM7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZSBnZXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRtZW1iZXIg
PSBGMigKKyAgICBmdW5jdGlvbiAoa2V5LCBkaWN0KSB7CisgICAgICAgIHZhciBfcDE3ID0gQTIo
X2VsbV9sYW5nJGNvcmUkRGljdCRnZXQsIGtleSwgZGljdCk7CisgICAgICAgIGlmIChfcDE3LmN0
b3IgPT09ICdKdXN0JykgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9KTsKK3ZhciBf
ZWxtX2xhbmckY29yZSREaWN0JG1heFdpdGhEZWZhdWx0ID0gRjMoCisgICAgZnVuY3Rpb24gKGss
IHYsIHIpIHsKKyAgICAgICAgbWF4V2l0aERlZmF1bHQ6CisgICAgICAgIHdoaWxlICh0cnVlKSB7
CisgICAgICAgICAgICB2YXIgX3AxOCA9IHI7CisgICAgICAgICAgICBpZiAoX3AxOC5jdG9yID09
PSAnUkJFbXB0eV9lbG1fYnVpbHRpbicpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4ge2N0b3I6
ICdfVHVwbGUyJywgXzA6IGssIF8xOiB2fTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgdmFyIF92MjYgPSBfcDE4Ll8xLAorICAgICAgICAgICAgICAgICAgICBfdjI3ID0g
X3AxOC5fMiwKKyAgICAgICAgICAgICAgICAgICAgX3YyOCA9IF9wMTguXzQ7CisgICAgICAgICAg
ICAgICAgayA9IF92MjY7CisgICAgICAgICAgICAgICAgdiA9IF92Mjc7CisgICAgICAgICAgICAg
ICAgciA9IF92Mjg7CisgICAgICAgICAgICAgICAgY29udGludWUgbWF4V2l0aERlZmF1bHQ7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSREaWN0
JE5CbGFjayA9IHtjdG9yOiAnTkJsYWNrJ307Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRCQmxh
Y2sgPSB7Y3RvcjogJ0JCbGFjayd9OwordmFyIF9lbG1fbGFuZyRjb3JlJERpY3QkQmxhY2sgPSB7
Y3RvcjogJ0JsYWNrJ307Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRibGFja2lzaCA9IGZ1bmN0
aW9uICh0KSB7CisgICAgdmFyIF9wMTkgPSB0OworICAgIGlmIChfcDE5LmN0b3IgPT09ICdSQk5v
ZGVfZWxtX2J1aWx0aW4nKSB7CisgICAgICAgIHZhciBfcDIwID0gX3AxOS5fMDsKKyAgICAgICAg
cmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5lcShfcDIwLCBfZWxtX2xhbmckY29y
ZSREaWN0JEJsYWNrKSB8fCBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuZXEoX3AyMCwgX2Vs
bV9sYW5nJGNvcmUkRGljdCRCQmxhY2spOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KK307Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRSZWQgPSB7Y3RvcjogJ1Jl
ZCd9OwordmFyIF9lbG1fbGFuZyRjb3JlJERpY3QkbW9yZUJsYWNrID0gZnVuY3Rpb24gKGNvbG9y
KSB7CisgICAgdmFyIF9wMjEgPSBjb2xvcjsKKyAgICBzd2l0Y2ggKF9wMjEuY3RvcikgeworICAg
ICAgICBjYXNlICdCbGFjayc6CisgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkRGlj
dCRCQmxhY2s7CisgICAgICAgIGNhc2UgJ1JlZCc6CisgICAgICAgICAgICByZXR1cm4gX2VsbV9s
YW5nJGNvcmUkRGljdCRCbGFjazsKKyAgICAgICAgY2FzZSAnTkJsYWNrJzoKKyAgICAgICAgICAg
IHJldHVybiBfZWxtX2xhbmckY29yZSREaWN0JFJlZDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVfRGVidWcuY3Jhc2goJ0NhblwndCBt
YWtlIGEgZG91YmxlIGJsYWNrIG5vZGUgbW9yZSBibGFjayEnKTsKKyAgICB9Cit9OwordmFyIF9l
bG1fbGFuZyRjb3JlJERpY3QkbGVzc0JsYWNrID0gZnVuY3Rpb24gKGNvbG9yKSB7CisgICAgdmFy
IF9wMjIgPSBjb2xvcjsKKyAgICBzd2l0Y2ggKF9wMjIuY3RvcikgeworICAgICAgICBjYXNlICdC
QmxhY2snOgorICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJERpY3QkQmxhY2s7Cisg
ICAgICAgIGNhc2UgJ0JsYWNrJzoKKyAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRE
aWN0JFJlZDsKKyAgICAgICAgY2FzZSAnUmVkJzoKKyAgICAgICAgICAgIHJldHVybiBfZWxtX2xh
bmckY29yZSREaWN0JE5CbGFjazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
biBfZWxtX2xhbmckY29yZSROYXRpdmVfRGVidWcuY3Jhc2goJ0NhblwndCBtYWtlIGEgbmVnYXRp
dmUgYmxhY2sgbm9kZSBsZXNzIGJsYWNrIScpOworICAgIH0KK307Cit2YXIgX2VsbV9sYW5nJGNv
cmUkRGljdCRMQkJsYWNrID0ge2N0b3I6ICdMQkJsYWNrJ307Cit2YXIgX2VsbV9sYW5nJGNvcmUk
RGljdCRMQmxhY2sgPSB7Y3RvcjogJ0xCbGFjayd9OwordmFyIF9lbG1fbGFuZyRjb3JlJERpY3Qk
UkJFbXB0eV9lbG1fYnVpbHRpbiA9IGZ1bmN0aW9uIChhKSB7CisgICAgcmV0dXJuIHtjdG9yOiAn
UkJFbXB0eV9lbG1fYnVpbHRpbicsIF8wOiBhfTsKK307Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGlj
dCRlbXB0eSA9IF9lbG1fbGFuZyRjb3JlJERpY3QkUkJFbXB0eV9lbG1fYnVpbHRpbihfZWxtX2xh
bmckY29yZSREaWN0JExCbGFjayk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRpc0VtcHR5ID0g
ZnVuY3Rpb24gKGRpY3QpIHsKKyAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxz
LmVxKGRpY3QsIF9lbG1fbGFuZyRjb3JlJERpY3QkZW1wdHkpOworfTsKK3ZhciBfZWxtX2xhbmck
Y29yZSREaWN0JFJCTm9kZV9lbG1fYnVpbHRpbiA9IEY1KAorICAgIGZ1bmN0aW9uIChhLCBiLCBj
LCBkLCBlKSB7CisgICAgICAgIHJldHVybiB7Y3RvcjogJ1JCTm9kZV9lbG1fYnVpbHRpbicsIF8w
OiBhLCBfMTogYiwgXzI6IGMsIF8zOiBkLCBfNDogZX07CisgICAgfSk7Cit2YXIgX2VsbV9sYW5n
JGNvcmUkRGljdCRlbnN1cmVCbGFja1Jvb3QgPSBmdW5jdGlvbiAoZGljdCkgeworICAgIHZhciBf
cDIzID0gZGljdDsKKyAgICBpZiAoKF9wMjMuY3RvciA9PT0gJ1JCTm9kZV9lbG1fYnVpbHRpbicp
ICYmIChfcDIzLl8wLmN0b3IgPT09ICdSZWQnKSkgeworICAgICAgICByZXR1cm4gQTUoX2VsbV9s
YW5nJGNvcmUkRGljdCRSQk5vZGVfZWxtX2J1aWx0aW4sIF9lbG1fbGFuZyRjb3JlJERpY3QkQmxh
Y2ssIF9wMjMuXzEsIF9wMjMuXzIsIF9wMjMuXzMsIF9wMjMuXzQpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHJldHVybiBkaWN0OworICAgIH0KK307Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRs
ZXNzQmxhY2tUcmVlID0gZnVuY3Rpb24gKGRpY3QpIHsKKyAgICB2YXIgX3AyNCA9IGRpY3Q7Cisg
ICAgaWYgKF9wMjQuY3RvciA9PT0gJ1JCTm9kZV9lbG1fYnVpbHRpbicpIHsKKyAgICAgICAgcmV0
dXJuIEE1KAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkRGljdCRSQk5vZGVfZWxtX2J1aWx0
aW4sCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSREaWN0JGxlc3NCbGFjayhfcDI0Ll8wKSwK
KyAgICAgICAgICAgIF9wMjQuXzEsCisgICAgICAgICAgICBfcDI0Ll8yLAorICAgICAgICAgICAg
X3AyNC5fMywKKyAgICAgICAgICAgIF9wMjQuXzQpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJl
dHVybiBfZWxtX2xhbmckY29yZSREaWN0JFJCRW1wdHlfZWxtX2J1aWx0aW4oX2VsbV9sYW5nJGNv
cmUkRGljdCRMQmxhY2spOworICAgIH0KK307Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRiYWxh
bmNlZFRyZWUgPSBmdW5jdGlvbiAoY29sKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uICh4aykgewor
ICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHh2KSB7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rp
b24gKHlrKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh5dikgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHprKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZnVuY3Rpb24gKHp2KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZ1bmN0aW9uIChhKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmdW5jdGlvbiAoYikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZ1bmN0aW9uIChjKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZ1bmN0aW9uIChkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBBNSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJERpY3QkUkJOb2RlX2VsbV9idWlsdGlu
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9s
YW5nJGNvcmUkRGljdCRsZXNzQmxhY2soY29sKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHlrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBNShfZWxtX2xhbmckY29yZSREaWN0JFJCTm9kZV9lbG1fYnVpbHRpbiwg
X2VsbV9sYW5nJGNvcmUkRGljdCRCbGFjaywgeGssIHh2LCBhLCBiKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEE1KF9lbG1fbGFuZyRjb3JlJERpY3Qk
UkJOb2RlX2VsbV9idWlsdGluLCBfZWxtX2xhbmckY29yZSREaWN0JEJsYWNrLCB6aywgenYsIGMs
IGQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAg
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9
OworICAgICAgICAgICAgfTsKKyAgICAgICAgfTsKKyAgICB9OworfTsKK3ZhciBfZWxtX2xhbmck
Y29yZSREaWN0JGJsYWNrZW4gPSBmdW5jdGlvbiAodCkgeworICAgIHZhciBfcDI1ID0gdDsKKyAg
ICBpZiAoX3AyNS5jdG9yID09PSAnUkJFbXB0eV9lbG1fYnVpbHRpbicpIHsKKyAgICAgICAgcmV0
dXJuIF9lbG1fbGFuZyRjb3JlJERpY3QkUkJFbXB0eV9lbG1fYnVpbHRpbihfZWxtX2xhbmckY29y
ZSREaWN0JExCbGFjayk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIEE1KF9lbG1fbGFu
ZyRjb3JlJERpY3QkUkJOb2RlX2VsbV9idWlsdGluLCBfZWxtX2xhbmckY29yZSREaWN0JEJsYWNr
LCBfcDI1Ll8xLCBfcDI1Ll8yLCBfcDI1Ll8zLCBfcDI1Ll80KTsKKyAgICB9Cit9OwordmFyIF9l
bG1fbGFuZyRjb3JlJERpY3QkcmVkZGVuID0gZnVuY3Rpb24gKHQpIHsKKyAgICB2YXIgX3AyNiA9
IHQ7CisgICAgaWYgKF9wMjYuY3RvciA9PT0gJ1JCRW1wdHlfZWxtX2J1aWx0aW4nKSB7CisgICAg
ICAgIHJldHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVfRGVidWcuY3Jhc2goJ2NhblwndCBtYWtl
IGEgTGVhZiByZWQnKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gQTUoX2VsbV9sYW5n
JGNvcmUkRGljdCRSQk5vZGVfZWxtX2J1aWx0aW4sIF9lbG1fbGFuZyRjb3JlJERpY3QkUmVkLCBf
cDI2Ll8xLCBfcDI2Ll8yLCBfcDI2Ll8zLCBfcDI2Ll80KTsKKyAgICB9Cit9OwordmFyIF9lbG1f
bGFuZyRjb3JlJERpY3QkYmFsYW5jZUhlbHAgPSBmdW5jdGlvbiAodHJlZSkgeworICAgIHZhciBf
cDI3ID0gdHJlZTsKKyAgICBfdjM2XzY6CisgICAgZG8geworICAgICAgICBfdjM2XzU6CisgICAg
ICAgIGRvIHsKKyAgICAgICAgICAgIF92MzZfNDoKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAg
ICAgICAgICBfdjM2XzM6CisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAg
ICBfdjM2XzI6CisgICAgICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIF92MzZfMToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfdjM2XzA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3AyNy5jdG9yID09PSAnUkJOb2Rl
X2VsbV9idWlsdGluJykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KF9wMjcuXzMuY3RvciA9PT0gJ1JCTm9kZV9lbG1fYnVpbHRpbicpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3AyNy5fNC5jdG9yID09PSAnUkJOb2RlX2Vs
bV9idWlsdGluJykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKF9wMjcuXzMuXzAuY3RvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSAnUmVkJzoKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9wMjcuXzQuXzAuY3Rvcikgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlICdSZWQnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKChfcDI3Ll8zLl8zLmN0b3IgPT09ICdSQk5vZGVfZWxtX2J1aWx0
aW4nKSAmJiAoX3AyNy5fMy5fMy5fMC5jdG9yID09PSAnUmVkJykpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBf
djM2XzA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoX3AyNy5fMy5fNC5jdG9yID09PSAnUkJO
b2RlX2VsbV9idWlsdGluJykgJiYgKF9wMjcuXzMuXzQuXzAuY3RvciA9PT0gJ1JlZCcpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrIF92MzZfMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
KF9wMjcuXzQuXzMuY3RvciA9PT0gJ1JCTm9kZV9lbG1fYnVpbHRpbicpICYmIChfcDI3Ll80Ll8z
Ll8wLmN0b3IgPT09ICdSZWQnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgX3YzNl8yOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChfcDI3Ll80Ll80LmN0b3IgPT09
ICdSQk5vZGVfZWxtX2J1aWx0aW4nKSAmJiAoX3AyNy5fNC5fNC5fMC5jdG9yID09PSAnUmVkJykp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhayBfdjM2XzM7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIF92MzZfNjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnTkJsYWNrJzoKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoX3Ay
Ny5fMy5fMy5jdG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGluJykgJiYgKF9wMjcuXzMuXzMuXzAu
Y3RvciA9PT0gJ1JlZCcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgX3YzNl8wOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoKF9wMjcuXzMuXzQuY3RvciA9PT0gJ1JCTm9kZV9lbG1fYnVpbHRpbicpICYmIChf
cDI3Ll8zLl80Ll8wLmN0b3IgPT09ICdSZWQnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBfdjM2XzE7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoKChfcDI3Ll8wLmN0b3IgPT09ICdC
QmxhY2snKSAmJiAoX3AyNy5fNC5fMy5jdG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGluJykpICYm
IChfcDI3Ll80Ll8zLl8wLmN0b3IgPT09ICdCbGFjaycpKSAmJiAoX3AyNy5fNC5fNC5jdG9yID09
PSAnUkJOb2RlX2VsbV9idWlsdGluJykpICYmIChfcDI3Ll80Ll80Ll8wLmN0b3IgPT09ICdCbGFj
aycpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhayBfdjM2XzQ7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhayBfdjM2XzY7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoKF9wMjcuXzMuXzMuY3RvciA9PT0gJ1JCTm9kZV9lbG1fYnVp
bHRpbicpICYmIChfcDI3Ll8zLl8zLl8wLmN0b3IgPT09ICdSZWQnKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
IF92MzZfMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChfcDI3Ll8zLl80LmN0b3IgPT09ICdS
Qk5vZGVfZWxtX2J1aWx0aW4nKSAmJiAoX3AyNy5fMy5fNC5fMC5jdG9yID09PSAnUmVkJykpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWsgX3YzNl8xOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrIF92MzZfNjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSAnTkJsYWNrJzoKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9wMjcuXzQuXzAuY3Rvcikgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlICdSZWQnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKChfcDI3Ll80Ll8zLmN0b3IgPT09ICdSQk5vZGVfZWxtX2J1aWx0
aW4nKSAmJiAoX3AyNy5fNC5fMy5fMC5jdG9yID09PSAnUmVkJykpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBf
djM2XzI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoX3AyNy5fNC5fNC5jdG9yID09PSAnUkJO
b2RlX2VsbV9idWlsdGluJykgJiYgKF9wMjcuXzQuXzQuXzAuY3RvciA9PT0gJ1JlZCcpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrIF92MzZfMzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
KCgoKF9wMjcuXzAuY3RvciA9PT0gJ0JCbGFjaycpICYmIChfcDI3Ll8zLl8zLmN0b3IgPT09ICdS
Qk5vZGVfZWxtX2J1aWx0aW4nKSkgJiYgKF9wMjcuXzMuXzMuXzAuY3RvciA9PT0gJ0JsYWNrJykp
ICYmIChfcDI3Ll8zLl80LmN0b3IgPT09ICdSQk5vZGVfZWxtX2J1aWx0aW4nKSkgJiYgKF9wMjcu
XzMuXzQuXzAuY3RvciA9PT0gJ0JsYWNrJykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIF92MzZf
NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIF92MzZfNjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnTkJsYWNrJzoKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfcDI3Ll8w
LmN0b3IgPT09ICdCQmxhY2snKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoKF9wMjcuXzQuXzMuY3RvciA9PT0g
J1JCTm9kZV9lbG1fYnVpbHRpbicpICYmIChfcDI3Ll80Ll8zLl8wLmN0b3IgPT09ICdCbGFjaycp
KSAmJiAoX3AyNy5fNC5fNC5jdG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGluJykpICYmIChfcDI3
Ll80Ll80Ll8wLmN0b3IgPT09ICdCbGFjaycpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIF92MzZfNDsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCgoX3AyNy5fMy5fMy5jdG9yID09PSAn
UkJOb2RlX2VsbV9idWlsdGluJykgJiYgKF9wMjcuXzMuXzMuXzAuY3RvciA9PT0gJ0JsYWNrJykp
ICYmIChfcDI3Ll8zLl80LmN0b3IgPT09ICdSQk5vZGVfZWxtX2J1aWx0aW4nKSkgJiYgKF9wMjcu
XzMuXzQuXzAuY3RvciA9PT0gJ0JsYWNrJykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIF92MzZf
NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIF92MzZfNjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgX3YzNl82Owor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCgoKChfcDI3Ll8wLmN0b3IgPT09ICdCQmxhY2snKSAmJiAo
X3AyNy5fMy5fMy5jdG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGluJykpICYmIChfcDI3Ll8zLl8z
Ll8wLmN0b3IgPT09ICdCbGFjaycpKSAmJiAoX3AyNy5fMy5fNC5jdG9yID09PSAnUkJOb2RlX2Vs
bV9idWlsdGluJykpICYmIChfcDI3Ll8zLl80Ll8wLmN0b3IgPT09ICdCbGFjaycpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWsgX3YzNl81OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBfdjM2XzY7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0
Y2ggKF9wMjcuXzQuXzAuY3RvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdSZWQnOgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChfcDI3Ll80Ll8zLmN0
b3IgPT09ICdSQk5vZGVfZWxtX2J1aWx0aW4nKSAmJiAoX3AyNy5fNC5fMy5fMC5jdG9yID09PSAn
UmVkJykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhayBfdjM2XzI7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgo
X3AyNy5fNC5fNC5jdG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGluJykgJiYgKF9wMjcuXzQuXzQu
XzAuY3RvciA9PT0gJ1JlZCcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIF92MzZfMzsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhayBfdjM2XzY7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdO
QmxhY2snOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCgoKChfcDI3Ll8wLmN0b3IgPT09ICdCQmxhY2snKSAmJiAoX3AyNy5f
NC5fMy5jdG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGluJykpICYmIChfcDI3Ll80Ll8zLl8wLmN0
b3IgPT09ICdCbGFjaycpKSAmJiAoX3AyNy5fNC5fNC5jdG9yID09PSAnUkJOb2RlX2VsbV9idWls
dGluJykpICYmIChfcDI3Ll80Ll80Ll8wLmN0b3IgPT09ICdCbGFjaycpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWsgX3YzNl80OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBfdjM2XzY7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhayBfdjM2XzY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChf
cDI3Ll8zLl8wLmN0b3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgJ1JlZCc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKChfcDI3Ll8zLl8zLmN0b3IgPT09ICdSQk5vZGVfZWxtX2J1
aWx0aW4nKSAmJiAoX3AyNy5fMy5fMy5fMC5jdG9yID09PSAnUmVkJykpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgX3YzNl8w
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICgoX3AyNy5fMy5fNC5jdG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGluJykgJiYg
KF9wMjcuXzMuXzQuXzAuY3RvciA9PT0gJ1JlZCcpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBfdjM2XzE7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhayBfdjM2XzY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlICdOQmxhY2snOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKCgoX3AyNy5fMC5jdG9yID09PSAnQkJsYWNr
JykgJiYgKF9wMjcuXzMuXzMuY3RvciA9PT0gJ1JCTm9kZV9lbG1fYnVpbHRpbicpKSAmJiAoX3Ay
Ny5fMy5fMy5fMC5jdG9yID09PSAnQmxhY2snKSkgJiYgKF9wMjcuXzMuXzQuY3RvciA9PT0gJ1JC
Tm9kZV9lbG1fYnVpbHRpbicpKSAmJiAoX3AyNy5fMy5fNC5fMC5jdG9yID09PSAnQmxhY2snKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhayBfdjM2XzU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWsgX3YzNl82OworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgX3YzNl82OworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3Ay
Ny5fNC5jdG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGluJykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9wMjcuXzQuXzAuY3RvcikgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnUmVkJzoK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
KF9wMjcuXzQuXzMuY3RvciA9PT0gJ1JCTm9kZV9lbG1fYnVpbHRpbicpICYmIChfcDI3Ll80Ll8z
Ll8wLmN0b3IgPT09ICdSZWQnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhayBfdjM2XzI7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChfcDI3Ll80Ll80
LmN0b3IgPT09ICdSQk5vZGVfZWxtX2J1aWx0aW4nKSAmJiAoX3AyNy5fNC5fNC5fMC5jdG9yID09
PSAnUmVkJykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrIF92MzZfMzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIF92MzZfNjsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ05C
bGFjayc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCgoKChfcDI3Ll8wLmN0b3IgPT09ICdCQmxhY2snKSAmJiAoX3AyNy5fNC5fMy5jdG9y
ID09PSAnUkJOb2RlX2VsbV9idWlsdGluJykpICYmIChfcDI3Ll80Ll8zLl8wLmN0b3IgPT09ICdC
bGFjaycpKSAmJiAoX3AyNy5fNC5fNC5jdG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGluJykpICYm
IChfcDI3Ll80Ll80Ll8wLmN0b3IgPT09ICdCbGFjaycpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIF92MzZfNDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhayBfdjM2XzY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhayBfdjM2XzY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBf
djM2XzY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWsgX3YzNl82OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSB3aGlsZShmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJERpY3QkYmFsYW5jZWRUcmVlKF9wMjcuXzApKF9w
MjcuXzMuXzMuXzEpKF9wMjcuXzMuXzMuXzIpKF9wMjcuXzMuXzEpKF9wMjcuXzMuXzIpKF9wMjcu
XzEpKF9wMjcuXzIpKF9wMjcuXzMuXzMuXzMpKF9wMjcuXzMuXzMuXzQpKF9wMjcuXzMuXzQpKF9w
MjcuXzQpOworICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZShmYWxzZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkRGljdCRiYWxhbmNlZFRyZWUo
X3AyNy5fMCkoX3AyNy5fMy5fMSkoX3AyNy5fMy5fMikoX3AyNy5fMy5fNC5fMSkoX3AyNy5fMy5f
NC5fMikoX3AyNy5fMSkoX3AyNy5fMikoX3AyNy5fMy5fMykoX3AyNy5fMy5fNC5fMykoX3AyNy5f
My5fNC5fNCkoX3AyNy5fNCk7CisgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoZmFsc2UpOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkRGljdCRiYWxhbmNlZFRy
ZWUoX3AyNy5fMCkoX3AyNy5fMSkoX3AyNy5fMikoX3AyNy5fNC5fMy5fMSkoX3AyNy5fNC5fMy5f
MikoX3AyNy5fNC5fMSkoX3AyNy5fNC5fMikoX3AyNy5fMykoX3AyNy5fNC5fMy5fMykoX3AyNy5f
NC5fMy5fNCkoX3AyNy5fNC5fNCk7CisgICAgICAgICAgICAgICAgfSB3aGlsZShmYWxzZSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJERpY3QkYmFsYW5jZWRUcmVlKF9w
MjcuXzApKF9wMjcuXzEpKF9wMjcuXzIpKF9wMjcuXzQuXzEpKF9wMjcuXzQuXzIpKF9wMjcuXzQu
XzQuXzEpKF9wMjcuXzQuXzQuXzIpKF9wMjcuXzMpKF9wMjcuXzQuXzMpKF9wMjcuXzQuXzQuXzMp
KF9wMjcuXzQuXzQuXzQpOworICAgICAgICAgICAgfSB3aGlsZShmYWxzZSk7CisgICAgICAgICAg
ICByZXR1cm4gQTUoCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkRGljdCRSQk5vZGVf
ZWxtX2J1aWx0aW4sCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkRGljdCRCbGFjaywK
KyAgICAgICAgICAgICAgICBfcDI3Ll80Ll8zLl8xLAorICAgICAgICAgICAgICAgIF9wMjcuXzQu
XzMuXzIsCisgICAgICAgICAgICAgICAgQTUoX2VsbV9sYW5nJGNvcmUkRGljdCRSQk5vZGVfZWxt
X2J1aWx0aW4sIF9lbG1fbGFuZyRjb3JlJERpY3QkQmxhY2ssIF9wMjcuXzEsIF9wMjcuXzIsIF9w
MjcuXzMsIF9wMjcuXzQuXzMuXzMpLAorICAgICAgICAgICAgICAgIEE1KAorICAgICAgICAgICAg
ICAgICAgICBfZWxtX2xhbmckY29yZSREaWN0JGJhbGFuY2UsCisgICAgICAgICAgICAgICAgICAg
IF9lbG1fbGFuZyRjb3JlJERpY3QkQmxhY2ssCisgICAgICAgICAgICAgICAgICAgIF9wMjcuXzQu
XzEsCisgICAgICAgICAgICAgICAgICAgIF9wMjcuXzQuXzIsCisgICAgICAgICAgICAgICAgICAg
IF9wMjcuXzQuXzMuXzQsCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJERpY3Qk
cmVkZGVuKF9wMjcuXzQuXzQpKSk7CisgICAgICAgIH0gd2hpbGUoZmFsc2UpOworICAgICAgICBy
ZXR1cm4gQTUoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSREaWN0JFJCTm9kZV9lbG1fYnVp
bHRpbiwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJERpY3QkQmxhY2ssCisgICAgICAgICAg
ICBfcDI3Ll8zLl80Ll8xLAorICAgICAgICAgICAgX3AyNy5fMy5fNC5fMiwKKyAgICAgICAgICAg
IEE1KAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJERpY3QkYmFsYW5jZSwKKyAgICAg
ICAgICAgICAgICBfZWxtX2xhbmckY29yZSREaWN0JEJsYWNrLAorICAgICAgICAgICAgICAgIF9w
MjcuXzMuXzEsCisgICAgICAgICAgICAgICAgX3AyNy5fMy5fMiwKKyAgICAgICAgICAgICAgICBf
ZWxtX2xhbmckY29yZSREaWN0JHJlZGRlbihfcDI3Ll8zLl8zKSwKKyAgICAgICAgICAgICAgICBf
cDI3Ll8zLl80Ll8zKSwKKyAgICAgICAgICAgIEE1KF9lbG1fbGFuZyRjb3JlJERpY3QkUkJOb2Rl
X2VsbV9idWlsdGluLCBfZWxtX2xhbmckY29yZSREaWN0JEJsYWNrLCBfcDI3Ll8xLCBfcDI3Ll8y
LCBfcDI3Ll8zLl80Ll80LCBfcDI3Ll80KSk7CisgICAgfSB3aGlsZShmYWxzZSk7CisgICAgcmV0
dXJuIHRyZWU7Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJERpY3QkYmFsYW5jZSA9IEY1KAorICAg
IGZ1bmN0aW9uIChjLCBrLCB2LCBsLCByKSB7CisgICAgICAgIHZhciB0cmVlID0gQTUoX2VsbV9s
YW5nJGNvcmUkRGljdCRSQk5vZGVfZWxtX2J1aWx0aW4sIGMsIGssIHYsIGwsIHIpOworICAgICAg
ICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkRGljdCRibGFja2lzaCh0cmVlKSA/IF9lbG1fbGFuZyRj
b3JlJERpY3QkYmFsYW5jZUhlbHAodHJlZSkgOiB0cmVlOworICAgIH0pOwordmFyIF9lbG1fbGFu
ZyRjb3JlJERpY3QkYnViYmxlID0gRjUoCisgICAgZnVuY3Rpb24gKGMsIGssIHYsIGwsIHIpIHsK
KyAgICAgICAgcmV0dXJuIChfZWxtX2xhbmckY29yZSREaWN0JGlzQkJsYWNrKGwpIHx8IF9lbG1f
bGFuZyRjb3JlJERpY3QkaXNCQmxhY2socikpID8gQTUoCisgICAgICAgICAgICBfZWxtX2xhbmck
Y29yZSREaWN0JGJhbGFuY2UsCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSREaWN0JG1vcmVC
bGFjayhjKSwKKyAgICAgICAgICAgIGssCisgICAgICAgICAgICB2LAorICAgICAgICAgICAgX2Vs
bV9sYW5nJGNvcmUkRGljdCRsZXNzQmxhY2tUcmVlKGwpLAorICAgICAgICAgICAgX2VsbV9sYW5n
JGNvcmUkRGljdCRsZXNzQmxhY2tUcmVlKHIpKSA6IEE1KF9lbG1fbGFuZyRjb3JlJERpY3QkUkJO
b2RlX2VsbV9idWlsdGluLCBjLCBrLCB2LCBsLCByKTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmck
Y29yZSREaWN0JHJlbW92ZU1heCA9IEY1KAorICAgIGZ1bmN0aW9uIChjLCBrLCB2LCBsLCByKSB7
CisgICAgICAgIHZhciBfcDI4ID0gcjsKKyAgICAgICAgaWYgKF9wMjguY3RvciA9PT0gJ1JCRW1w
dHlfZWxtX2J1aWx0aW4nKSB7CisgICAgICAgICAgICByZXR1cm4gQTMoX2VsbV9sYW5nJGNvcmUk
RGljdCRyZW0sIGMsIGwsIHIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJu
IEE1KAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJERpY3QkYnViYmxlLAorICAgICAg
ICAgICAgICAgIGMsCisgICAgICAgICAgICAgICAgaywKKyAgICAgICAgICAgICAgICB2LAorICAg
ICAgICAgICAgICAgIGwsCisgICAgICAgICAgICAgICAgQTUoX2VsbV9sYW5nJGNvcmUkRGljdCRy
ZW1vdmVNYXgsIF9wMjguXzAsIF9wMjguXzEsIF9wMjguXzIsIF9wMjguXzMsIF9wMjguXzQpKTsK
KyAgICAgICAgfQorICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJERpY3QkcmVtID0gRjMoCisg
ICAgZnVuY3Rpb24gKGMsIGwsIHIpIHsKKyAgICAgICAgdmFyIF9wMjkgPSB7Y3RvcjogJ19UdXBs
ZTInLCBfMDogbCwgXzE6IHJ9OworICAgICAgICBpZiAoX3AyOS5fMC5jdG9yID09PSAnUkJFbXB0
eV9lbG1fYnVpbHRpbicpIHsKKyAgICAgICAgICAgIGlmIChfcDI5Ll8xLmN0b3IgPT09ICdSQkVt
cHR5X2VsbV9idWlsdGluJykgeworICAgICAgICAgICAgICAgIHZhciBfcDMwID0gYzsKKyAgICAg
ICAgICAgICAgICBzd2l0Y2ggKF9wMzAuY3RvcikgeworICAgICAgICAgICAgICAgICAgICBjYXNl
ICdSZWQnOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJERp
Y3QkUkJFbXB0eV9lbG1fYnVpbHRpbihfZWxtX2xhbmckY29yZSREaWN0JExCbGFjayk7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgJ0JsYWNrJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBfZWxtX2xhbmckY29yZSREaWN0JFJCRW1wdHlfZWxtX2J1aWx0aW4oX2VsbV9sYW5nJGNv
cmUkRGljdCRMQkJsYWNrKTsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVfRGVidWcuY3Jhc2go
J2Nhbm5vdCBoYXZlIGJibGFjayBvciBuYmxhY2sgbm9kZXMgYXQgdGhpcyBwb2ludCcpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFy
IF9wMzMgPSBfcDI5Ll8xLl8wOworICAgICAgICAgICAgICAgIHZhciBfcDMyID0gX3AyOS5fMC5f
MDsKKyAgICAgICAgICAgICAgICB2YXIgX3AzMSA9IHtjdG9yOiAnX1R1cGxlMycsIF8wOiBjLCBf
MTogX3AzMiwgXzI6IF9wMzN9OworICAgICAgICAgICAgICAgIGlmICgoKChfcDMxLmN0b3IgPT09
ICdfVHVwbGUzJykgJiYgKF9wMzEuXzAuY3RvciA9PT0gJ0JsYWNrJykpICYmIChfcDMxLl8xLmN0
b3IgPT09ICdMQmxhY2snKSkgJiYgKF9wMzEuXzIuY3RvciA9PT0gJ1JlZCcpKSB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBBNShfZWxtX2xhbmckY29yZSREaWN0JFJCTm9kZV9lbG1fYnVp
bHRpbiwgX2VsbV9sYW5nJGNvcmUkRGljdCRCbGFjaywgX3AyOS5fMS5fMSwgX3AyOS5fMS5fMiwg
X3AyOS5fMS5fMywgX3AyOS5fMS5fNCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEE0KAorICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9s
YW5nJGNvcmUkRGljdCRyZXBvcnRSZW1CdWcsCisgICAgICAgICAgICAgICAgICAgICAgICAnQmxh
Y2svTEJsYWNrL1JlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICBjLAorICAgICAgICAgICAg
ICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJHRvU3RyaW5nKF9wMzIpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJHRvU3RyaW5nKF9wMzMpKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBpZiAoX3AyOS5fMS5jdG9yID09PSAnUkJFbXB0eV9lbG1fYnVpbHRpbicpIHsKKyAg
ICAgICAgICAgICAgICB2YXIgX3AzNiA9IF9wMjkuXzEuXzA7CisgICAgICAgICAgICAgICAgdmFy
IF9wMzUgPSBfcDI5Ll8wLl8wOworICAgICAgICAgICAgICAgIHZhciBfcDM0ID0ge2N0b3I6ICdf
VHVwbGUzJywgXzA6IGMsIF8xOiBfcDM1LCBfMjogX3AzNn07CisgICAgICAgICAgICAgICAgaWYg
KCgoKF9wMzQuY3RvciA9PT0gJ19UdXBsZTMnKSAmJiAoX3AzNC5fMC5jdG9yID09PSAnQmxhY2sn
KSkgJiYgKF9wMzQuXzEuY3RvciA9PT0gJ1JlZCcpKSAmJiAoX3AzNC5fMi5jdG9yID09PSAnTEJs
YWNrJykpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEE1KF9lbG1fbGFuZyRjb3JlJERp
Y3QkUkJOb2RlX2VsbV9idWlsdGluLCBfZWxtX2xhbmckY29yZSREaWN0JEJsYWNrLCBfcDI5Ll8w
Ll8xLCBfcDI5Ll8wLl8yLCBfcDI5Ll8wLl8zLCBfcDI5Ll8wLl80KTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQTQoCisgICAgICAgICAgICAg
ICAgICAgICAgICBfZWxtX2xhbmckY29yZSREaWN0JHJlcG9ydFJlbUJ1ZywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICdCbGFjay9SZWQvTEJsYWNrJywKKyAgICAgICAgICAgICAgICAgICAgICAg
IGMsCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRCYXNpY3MkdG9TdHJp
bmcoX3AzNSksCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRCYXNpY3Mk
dG9TdHJpbmcoX3AzNikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgdmFyIF9wNDAgPSBfcDI5Ll8wLl8yOworICAgICAgICAgICAgICAg
IHZhciBfcDM5ID0gX3AyOS5fMC5fNDsKKyAgICAgICAgICAgICAgICB2YXIgX3AzOCA9IF9wMjku
XzAuXzE7CisgICAgICAgICAgICAgICAgdmFyIGwkID0gQTUoX2VsbV9sYW5nJGNvcmUkRGljdCRy
ZW1vdmVNYXgsIF9wMjkuXzAuXzAsIF9wMzgsIF9wNDAsIF9wMjkuXzAuXzMsIF9wMzkpOworICAg
ICAgICAgICAgICAgIHZhciBfcDM3ID0gQTMoX2VsbV9sYW5nJGNvcmUkRGljdCRtYXhXaXRoRGVm
YXVsdCwgX3AzOCwgX3A0MCwgX3AzOSk7CisgICAgICAgICAgICAgICAgdmFyIGsgPSBfcDM3Ll8w
OworICAgICAgICAgICAgICAgIHZhciB2ID0gX3AzNy5fMTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gQTUoX2VsbV9sYW5nJGNvcmUkRGljdCRidWJibGUsIGMsIGssIHYsIGwkLCByKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJERpY3QkbWFw
ID0gRjIoCisgICAgZnVuY3Rpb24gKGYsIGRpY3QpIHsKKyAgICAgICAgdmFyIF9wNDEgPSBkaWN0
OworICAgICAgICBpZiAoX3A0MS5jdG9yID09PSAnUkJFbXB0eV9lbG1fYnVpbHRpbicpIHsKKyAg
ICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSREaWN0JFJCRW1wdHlfZWxtX2J1aWx0aW4o
X2VsbV9sYW5nJGNvcmUkRGljdCRMQmxhY2spOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgdmFyIF9wNDIgPSBfcDQxLl8xOworICAgICAgICAgICAgcmV0dXJuIEE1KAorICAgICAgICAg
ICAgICAgIF9lbG1fbGFuZyRjb3JlJERpY3QkUkJOb2RlX2VsbV9idWlsdGluLAorICAgICAgICAg
ICAgICAgIF9wNDEuXzAsCisgICAgICAgICAgICAgICAgX3A0MiwKKyAgICAgICAgICAgICAgICBB
MihmLCBfcDQyLCBfcDQxLl8yKSwKKyAgICAgICAgICAgICAgICBBMihfZWxtX2xhbmckY29yZSRE
aWN0JG1hcCwgZiwgX3A0MS5fMyksCisgICAgICAgICAgICAgICAgQTIoX2VsbV9sYW5nJGNvcmUk
RGljdCRtYXAsIGYsIF9wNDEuXzQpKTsKKyAgICAgICAgfQorICAgIH0pOwordmFyIF9lbG1fbGFu
ZyRjb3JlJERpY3QkU2FtZSA9IHtjdG9yOiAnU2FtZSd9OwordmFyIF9lbG1fbGFuZyRjb3JlJERp
Y3QkUmVtb3ZlID0ge2N0b3I6ICdSZW1vdmUnfTsKK3ZhciBfZWxtX2xhbmckY29yZSREaWN0JElu
c2VydCA9IHtjdG9yOiAnSW5zZXJ0J307Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCR1cGRhdGUg
PSBGMygKKyAgICBmdW5jdGlvbiAoaywgYWx0ZXIsIGRpY3QpIHsKKyAgICAgICAgdmFyIHVwID0g
ZnVuY3Rpb24gKGRpY3QpIHsKKyAgICAgICAgICAgIHZhciBfcDQzID0gZGljdDsKKyAgICAgICAg
ICAgIGlmIChfcDQzLmN0b3IgPT09ICdSQkVtcHR5X2VsbV9idWlsdGluJykgeworICAgICAgICAg
ICAgICAgIHZhciBfcDQ0ID0gYWx0ZXIoX2VsbV9sYW5nJGNvcmUkTWF5YmUkTm90aGluZyk7Cisg
ICAgICAgICAgICAgICAgaWYgKF9wNDQuY3RvciA9PT0gJ05vdGhpbmcnKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB7Y3RvcjogJ19UdXBsZTInLCBfMDogX2VsbV9sYW5nJGNvcmUkRGlj
dCRTYW1lLCBfMTogX2VsbV9sYW5nJGNvcmUkRGljdCRlbXB0eX07CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGN0b3I6ICdfVHVwbGUyJywKKyAgICAgICAgICAgICAgICAgICAgICAgIF8wOiBfZWxt
X2xhbmckY29yZSREaWN0JEluc2VydCwKKyAgICAgICAgICAgICAgICAgICAgICAgIF8xOiBBNShf
ZWxtX2xhbmckY29yZSREaWN0JFJCTm9kZV9lbG1fYnVpbHRpbiwgX2VsbV9sYW5nJGNvcmUkRGlj
dCRSZWQsIGssIF9wNDQuXzAsIF9lbG1fbGFuZyRjb3JlJERpY3QkZW1wdHksIF9lbG1fbGFuZyRj
b3JlJERpY3QkZW1wdHkpCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgX3A1NSA9IF9wNDMu
XzI7CisgICAgICAgICAgICAgICAgdmFyIF9wNTQgPSBfcDQzLl80OworICAgICAgICAgICAgICAg
IHZhciBfcDUzID0gX3A0My5fMzsKKyAgICAgICAgICAgICAgICB2YXIgX3A1MiA9IF9wNDMuXzE7
CisgICAgICAgICAgICAgICAgdmFyIF9wNTEgPSBfcDQzLl8wOworICAgICAgICAgICAgICAgIHZh
ciBfcDQ1ID0gQTIoX2VsbV9sYW5nJGNvcmUkQmFzaWNzJGNvbXBhcmUsIGssIF9wNTIpOworICAg
ICAgICAgICAgICAgIHN3aXRjaCAoX3A0NS5jdG9yKSB7CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgJ0VRJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcDQ2ID0gYWx0ZXIoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTWF5YmUkSnVzdChfcDU1KSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3A0Ni5jdG9yID09PSAnTm90aGluZycpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjdG9yOiAnX1R1cGxlMicsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF8wOiBfZWxtX2xhbmckY29yZSREaWN0JFJlbW92ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXzE6IEEzKF9lbG1fbGFuZyRjb3JlJERpY3QkcmVtLCBfcDUxLCBfcDUz
LCBfcDU0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0b3I6ICdfVHVwbGUyJywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXzA6IF9lbG1fbGFuZyRjb3JlJERpY3QkU2FtZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXzE6IEE1KF9lbG1fbGFuZyRjb3JlJERpY3Qk
UkJOb2RlX2VsbV9idWlsdGluLCBfcDUxLCBfcDUyLCBfcDQ2Ll8wLCBfcDUzLCBfcDU0KQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgJ0xUJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBfcDQ3ID0gdXAoX3A1Myk7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmxhZyA9IF9w
NDcuXzA7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV3TGVmdCA9IF9wNDcuXzE7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3A0OCA9IGZsYWc7CisgICAgICAgICAgICAgICAg
ICAgICAgICBzd2l0Y2ggKF9wNDguY3RvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgJ1NhbWUnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RvcjogJ19UdXBsZTInLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXzA6IF9lbG1fbGFuZyRjb3JlJERpY3Qk
U2FtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8xOiBBNShfZWxtX2xh
bmckY29yZSREaWN0JFJCTm9kZV9lbG1fYnVpbHRpbiwgX3A1MSwgX3A1MiwgX3A1NSwgbmV3TGVm
dCwgX3A1NCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlICdJbnNlcnQnOgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Rv
cjogJ19UdXBsZTInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXzA6IF9l
bG1fbGFuZyRjb3JlJERpY3QkSW5zZXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXzE6IEE1KF9lbG1fbGFuZyRjb3JlJERpY3QkYmFsYW5jZSwgX3A1MSwgX3A1MiwgX3A1
NSwgbmV3TGVmdCwgX3A1NCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y3RvcjogJ19UdXBsZTInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXzA6
IF9lbG1fbGFuZyRjb3JlJERpY3QkUmVtb3ZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXzE6IEE1KF9lbG1fbGFuZyRjb3JlJERpY3QkYnViYmxlLCBfcDUxLCBfcDUyLCBf
cDU1LCBuZXdMZWZ0LCBfcDU0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Owor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9wNDkgPSB1cChfcDU0KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBmbGFnID0gX3A0OS5fMDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBuZXdSaWdodCA9IF9wNDkuXzE7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3A1
MCA9IGZsYWc7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9wNTAuY3Rvcikgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1NhbWUnOgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY3RvcjogJ19UdXBsZTInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXzA6IF9lbG1fbGFuZyRjb3JlJERpY3QkU2FtZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF8xOiBBNShfZWxtX2xhbmckY29yZSREaWN0JFJCTm9kZV9lbG1fYnVpbHRp
biwgX3A1MSwgX3A1MiwgX3A1NSwgX3A1MywgbmV3UmlnaHQpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnSW5zZXJ0
JzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGN0b3I6ICdfVHVwbGUyJywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF8wOiBfZWxtX2xhbmckY29yZSREaWN0JEluc2VydCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8xOiBBNShfZWxtX2xhbmckY29yZSRE
aWN0JGJhbGFuY2UsIF9wNTEsIF9wNTIsIF9wNTUsIF9wNTMsIG5ld1JpZ2h0KQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdG9yOiAnX1R1cGxlMicsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfMDogX2VsbV9sYW5nJGNvcmUkRGljdCRSZW1vdmUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfMTogQTUoX2VsbV9sYW5nJGNv
cmUkRGljdCRidWJibGUsIF9wNTEsIF9wNTIsIF9wNTUsIF9wNTMsIG5ld1JpZ2h0KQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgdmFy
IF9wNTYgPSB1cChkaWN0KTsKKyAgICAgICAgdmFyIGZsYWcgPSBfcDU2Ll8wOworICAgICAgICB2
YXIgdXBkYXRlZERpY3QgPSBfcDU2Ll8xOworICAgICAgICB2YXIgX3A1NyA9IGZsYWc7CisgICAg
ICAgIHN3aXRjaCAoX3A1Ny5jdG9yKSB7CisgICAgICAgICAgICBjYXNlICdTYW1lJzoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdXBkYXRlZERpY3Q7CisgICAgICAgICAgICBjYXNlICdJbnNlcnQn
OgorICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSREaWN0JGVuc3VyZUJsYWNr
Um9vdCh1cGRhdGVkRGljdCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IHJldHVybiBfZWxtX2xhbmckY29yZSREaWN0JGJsYWNrZW4odXBkYXRlZERpY3QpOworICAgICAg
ICB9CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRpbnNlcnQgPSBGMygKKyAgICBm
dW5jdGlvbiAoa2V5LCB2YWx1ZSwgZGljdCkgeworICAgICAgICByZXR1cm4gQTMoCisgICAgICAg
ICAgICBfZWxtX2xhbmckY29yZSREaWN0JHVwZGF0ZSwKKyAgICAgICAgICAgIGtleSwKKyAgICAg
ICAgICAgIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRhbHdheXMoCisgICAgICAgICAgICAgICAgX2Vs
bV9sYW5nJGNvcmUkTWF5YmUkSnVzdCh2YWx1ZSkpLAorICAgICAgICAgICAgZGljdCk7CisgICAg
fSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRzaW5nbGV0b24gPSBGMigKKyAgICBmdW5jdGlv
biAoa2V5LCB2YWx1ZSkgeworICAgICAgICByZXR1cm4gQTMoX2VsbV9sYW5nJGNvcmUkRGljdCRp
bnNlcnQsIGtleSwgdmFsdWUsIF9lbG1fbGFuZyRjb3JlJERpY3QkZW1wdHkpOworICAgIH0pOwor
dmFyIF9lbG1fbGFuZyRjb3JlJERpY3QkdW5pb24gPSBGMigKKyAgICBmdW5jdGlvbiAodDEsIHQy
KSB7CisgICAgICAgIHJldHVybiBBMyhfZWxtX2xhbmckY29yZSREaWN0JGZvbGRsLCBfZWxtX2xh
bmckY29yZSREaWN0JGluc2VydCwgdDIsIHQxKTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29y
ZSREaWN0JGZpbHRlciA9IEYyKAorICAgIGZ1bmN0aW9uIChwcmVkaWNhdGUsIGRpY3Rpb25hcnkp
IHsKKyAgICAgICAgdmFyIGFkZCA9IEYzKAorICAgICAgICAgICAgZnVuY3Rpb24gKGtleSwgdmFs
dWUsIGRpY3QpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQTIocHJlZGljYXRlLCBrZXksIHZh
bHVlKSA/IEEzKF9lbG1fbGFuZyRjb3JlJERpY3QkaW5zZXJ0LCBrZXksIHZhbHVlLCBkaWN0KSA6
IGRpY3Q7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIEEzKF9lbG1fbGFuZyRjb3Jl
JERpY3QkZm9sZGwsIGFkZCwgX2VsbV9sYW5nJGNvcmUkRGljdCRlbXB0eSwgZGljdGlvbmFyeSk7
CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRpbnRlcnNlY3QgPSBGMigKKyAgICBm
dW5jdGlvbiAodDEsIHQyKSB7CisgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgIF9lbG1f
bGFuZyRjb3JlJERpY3QkZmlsdGVyLAorICAgICAgICAgICAgRjIoCisgICAgICAgICAgICAgICAg
ZnVuY3Rpb24gKGssIF9wNTgpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEEyKF9lbG1f
bGFuZyRjb3JlJERpY3QkbWVtYmVyLCBrLCB0Mik7CisgICAgICAgICAgICAgICAgfSksCisgICAg
ICAgICAgICB0MSk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRwYXJ0aXRpb24g
PSBGMigKKyAgICBmdW5jdGlvbiAocHJlZGljYXRlLCBkaWN0KSB7CisgICAgICAgIHZhciBhZGQg
PSBGMygKKyAgICAgICAgICAgIGZ1bmN0aW9uIChrZXksIHZhbHVlLCBfcDU5KSB7CisgICAgICAg
ICAgICAgICAgdmFyIF9wNjAgPSBfcDU5OworICAgICAgICAgICAgICAgIHZhciBfcDYyID0gX3A2
MC5fMTsKKyAgICAgICAgICAgICAgICB2YXIgX3A2MSA9IF9wNjAuXzA7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIEEyKHByZWRpY2F0ZSwga2V5LCB2YWx1ZSkgPyB7CisgICAgICAgICAgICAgICAg
ICAgIGN0b3I6ICdfVHVwbGUyJywKKyAgICAgICAgICAgICAgICAgICAgXzA6IEEzKF9lbG1fbGFu
ZyRjb3JlJERpY3QkaW5zZXJ0LCBrZXksIHZhbHVlLCBfcDYxKSwKKyAgICAgICAgICAgICAgICAg
ICAgXzE6IF9wNjIKKyAgICAgICAgICAgICAgICB9IDogeworICAgICAgICAgICAgICAgICAgICBj
dG9yOiAnX1R1cGxlMicsCisgICAgICAgICAgICAgICAgICAgIF8wOiBfcDYxLAorICAgICAgICAg
ICAgICAgICAgICBfMTogQTMoX2VsbV9sYW5nJGNvcmUkRGljdCRpbnNlcnQsIGtleSwgdmFsdWUs
IF9wNjIpCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0pOworICAgICAgICByZXR1
cm4gQTMoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSREaWN0JGZvbGRsLAorICAgICAgICAg
ICAgYWRkLAorICAgICAgICAgICAge2N0b3I6ICdfVHVwbGUyJywgXzA6IF9lbG1fbGFuZyRjb3Jl
JERpY3QkZW1wdHksIF8xOiBfZWxtX2xhbmckY29yZSREaWN0JGVtcHR5fSwKKyAgICAgICAgICAg
IGRpY3QpOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJERpY3QkZnJvbUxpc3QgPSBmdW5j
dGlvbiAoYXNzb2NzKSB7CisgICAgcmV0dXJuIEEzKAorICAgICAgICBfZWxtX2xhbmckY29yZSRM
aXN0JGZvbGRsLAorICAgICAgICBGMigKKyAgICAgICAgICAgIGZ1bmN0aW9uIChfcDYzLCBkaWN0
KSB7CisgICAgICAgICAgICAgICAgdmFyIF9wNjQgPSBfcDYzOworICAgICAgICAgICAgICAgIHJl
dHVybiBBMyhfZWxtX2xhbmckY29yZSREaWN0JGluc2VydCwgX3A2NC5fMCwgX3A2NC5fMSwgZGlj
dCk7CisgICAgICAgICAgICB9KSwKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkRGljdCRlbXB0eSwK
KyAgICAgICAgYXNzb2NzKTsKK307Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRyZW1vdmUgPSBG
MigKKyAgICBmdW5jdGlvbiAoa2V5LCBkaWN0KSB7CisgICAgICAgIHJldHVybiBBMygKKyAgICAg
ICAgICAgIF9lbG1fbGFuZyRjb3JlJERpY3QkdXBkYXRlLAorICAgICAgICAgICAga2V5LAorICAg
ICAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJGFsd2F5cyhfZWxtX2xhbmckY29yZSRNYXli
ZSROb3RoaW5nKSwKKyAgICAgICAgICAgIGRpY3QpOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRj
b3JlJERpY3QkZGlmZiA9IEYyKAorICAgIGZ1bmN0aW9uICh0MSwgdDIpIHsKKyAgICAgICAgcmV0
dXJuIEEzKAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkRGljdCRmb2xkbCwKKyAgICAgICAg
ICAgIEYzKAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChrLCB2LCB0KSB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBBMihfZWxtX2xhbmckY29yZSREaWN0JHJlbW92ZSwgaywgdCk7Cisg
ICAgICAgICAgICAgICAgfSksCisgICAgICAgICAgICB0MSwKKyAgICAgICAgICAgIHQyKTsKKyAg
ICB9KTsKKworLy9pbXBvcnQgTmF0aXZlLlNjaGVkdWxlciAvLworCit2YXIgX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX1RpbWUgPSBmdW5jdGlvbigpIHsKKwordmFyIG5vdyA9IF9lbG1fbGFuZyRjb3Jl
JE5hdGl2ZV9TY2hlZHVsZXIubmF0aXZlQmluZGluZyhmdW5jdGlvbihjYWxsYmFjaykKK3sKKyAg
ICBjYWxsYmFjayhfZWxtX2xhbmckY29yZSROYXRpdmVfU2NoZWR1bGVyLnN1Y2NlZWQoRGF0ZS5u
b3coKSkpOworfSk7CisKK2Z1bmN0aW9uIHNldEludGVydmFsXyhpbnRlcnZhbCwgdGFzaykKK3sK
KyAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVkdWxlci5uYXRpdmVCaW5kaW5n
KGZ1bmN0aW9uKGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgdmFyIGlkID0gc2V0SW50ZXJ2YWwo
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfU2NoZWR1bGVy
LnJhd1NwYXduKHRhc2spOworICAgICAgICB9LCBpbnRlcnZhbCk7CisKKyAgICAgICAgcmV0dXJu
IGZ1bmN0aW9uKCkgeyBjbGVhckludGVydmFsKGlkKTsgfTsKKyAgICB9KTsKK30KKworcmV0dXJu
IHsKKyAgICBub3c6IG5vdywKKyAgICBzZXRJbnRlcnZhbF86IEYyKHNldEludGVydmFsXykKK307
CisKK30oKTsKK3ZhciBfZWxtX2xhbmckY29yZSRUaW1lJHNldEludGVydmFsID0gX2VsbV9sYW5n
JGNvcmUkTmF0aXZlX1RpbWUuc2V0SW50ZXJ2YWxfOwordmFyIF9lbG1fbGFuZyRjb3JlJFRpbWUk
c3Bhd25IZWxwID0gRjMoCisgICAgZnVuY3Rpb24gKHJvdXRlciwgaW50ZXJ2YWxzLCBwcm9jZXNz
ZXMpIHsKKyAgICAgICAgdmFyIF9wMCA9IGludGVydmFsczsKKyAgICAgICAgaWYgKF9wMC5jdG9y
ID09PSAnW10nKSB7CisgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkVGFzayRzdWNj
ZWVkKHByb2Nlc3Nlcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgX3AxID0g
X3AwLl8wOworICAgICAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgICAgIF9lbG1fbGFu
ZyRjb3JlJFRhc2skYW5kVGhlbiwKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRp
dmVfU2NoZWR1bGVyLnNwYXduKAorICAgICAgICAgICAgICAgICAgICBBMigKKyAgICAgICAgICAg
ICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFRpbWUkc2V0SW50ZXJ2YWwsCisgICAgICAgICAg
ICAgICAgICAgICAgICBfcDEsCisgICAgICAgICAgICAgICAgICAgICAgICBBMihfZWxtX2xhbmck
Y29yZSRQbGF0Zm9ybSRzZW5kVG9TZWxmLCByb3V0ZXIsIF9wMSkpKSwKKyAgICAgICAgICAgICAg
ICBmdW5jdGlvbiAoaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEEzKAorICAgICAg
ICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGltZSRzcGF3bkhlbHAsCisgICAgICAg
ICAgICAgICAgICAgICAgICByb3V0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBfcDAuXzEs
CisgICAgICAgICAgICAgICAgICAgICAgICBBMyhfZWxtX2xhbmckY29yZSREaWN0JGluc2VydCwg
X3AxLCBpZCwgcHJvY2Vzc2VzKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAg
ICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRUaW1lJGFkZE15U3ViID0gRjIoCisgICAgZnVuY3Rp
b24gKF9wMiwgc3RhdGUpIHsKKyAgICAgICAgdmFyIF9wMyA9IF9wMjsKKyAgICAgICAgdmFyIF9w
NiA9IF9wMy5fMTsKKyAgICAgICAgdmFyIF9wNSA9IF9wMy5fMDsKKyAgICAgICAgdmFyIF9wNCA9
IEEyKF9lbG1fbGFuZyRjb3JlJERpY3QkZ2V0LCBfcDUsIHN0YXRlKTsKKyAgICAgICAgaWYgKF9w
NC5jdG9yID09PSAnTm90aGluZycpIHsKKyAgICAgICAgICAgIHJldHVybiBBMygKKyAgICAgICAg
ICAgICAgICBfZWxtX2xhbmckY29yZSREaWN0JGluc2VydCwKKyAgICAgICAgICAgICAgICBfcDUs
CisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAor
ICAgICAgICAgICAgICAgICAgICBbX3A2XSksCisgICAgICAgICAgICAgICAgc3RhdGUpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIEEzKAorICAgICAgICAgICAgICAgIF9l
bG1fbGFuZyRjb3JlJERpY3QkaW5zZXJ0LAorICAgICAgICAgICAgICAgIF9wNSwKKyAgICAgICAg
ICAgICAgICBBMihfZWxtX2xhbmckY29yZSRMaXN0X29wc1snOjonXSwgX3A2LCBfcDQuXzApLAor
ICAgICAgICAgICAgICAgIHN0YXRlKTsKKyAgICAgICAgfQorICAgIH0pOwordmFyIF9lbG1fbGFu
ZyRjb3JlJFRpbWUkaW5NaWxsaXNlY29uZHMgPSBmdW5jdGlvbiAodCkgeworICAgIHJldHVybiB0
OworfTsKK3ZhciBfZWxtX2xhbmckY29yZSRUaW1lJG1pbGxpc2Vjb25kID0gMTsKK3ZhciBfZWxt
X2xhbmckY29yZSRUaW1lJHNlY29uZCA9IDEwMDAgKiBfZWxtX2xhbmckY29yZSRUaW1lJG1pbGxp
c2Vjb25kOwordmFyIF9lbG1fbGFuZyRjb3JlJFRpbWUkbWludXRlID0gNjAgKiBfZWxtX2xhbmck
Y29yZSRUaW1lJHNlY29uZDsKK3ZhciBfZWxtX2xhbmckY29yZSRUaW1lJGhvdXIgPSA2MCAqIF9l
bG1fbGFuZyRjb3JlJFRpbWUkbWludXRlOwordmFyIF9lbG1fbGFuZyRjb3JlJFRpbWUkaW5Ib3Vy
cyA9IGZ1bmN0aW9uICh0KSB7CisgICAgcmV0dXJuIHQgLyBfZWxtX2xhbmckY29yZSRUaW1lJGhv
dXI7Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJFRpbWUkaW5NaW51dGVzID0gZnVuY3Rpb24gKHQp
IHsKKyAgICByZXR1cm4gdCAvIF9lbG1fbGFuZyRjb3JlJFRpbWUkbWludXRlOworfTsKK3ZhciBf
ZWxtX2xhbmckY29yZSRUaW1lJGluU2Vjb25kcyA9IGZ1bmN0aW9uICh0KSB7CisgICAgcmV0dXJu
IHQgLyBfZWxtX2xhbmckY29yZSRUaW1lJHNlY29uZDsKK307Cit2YXIgX2VsbV9sYW5nJGNvcmUk
VGltZSRub3cgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfVGltZS5ub3c7Cit2YXIgX2VsbV9sYW5n
JGNvcmUkVGltZSRvblNlbGZNc2cgPSBGMygKKyAgICBmdW5jdGlvbiAocm91dGVyLCBpbnRlcnZh
bCwgc3RhdGUpIHsKKyAgICAgICAgdmFyIF9wNyA9IEEyKF9lbG1fbGFuZyRjb3JlJERpY3QkZ2V0
LCBpbnRlcnZhbCwgc3RhdGUudGFnZ2Vycyk7CisgICAgICAgIGlmIChfcDcuY3RvciA9PT0gJ05v
dGhpbmcnKSB7CisgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkVGFzayRzdWNjZWVk
KHN0YXRlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAg
ICAgICAgICAgICBfZWxtX2xhbmckY29yZSRUYXNrJGFuZFRoZW4sCisgICAgICAgICAgICAgICAg
X2VsbV9sYW5nJGNvcmUkVGltZSRub3csCisgICAgICAgICAgICAgICAgZnVuY3Rpb24gKHRpbWUp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgICAgICAgICAg
ICAgX2VsbV9sYW5nJGNvcmUkVGFzayRhbmRUaGVuLAorICAgICAgICAgICAgICAgICAgICAgICAg
X2VsbV9sYW5nJGNvcmUkVGFzayRzZXF1ZW5jZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlz
dCRtYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICh0YWdnZXIp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRQbGF0Zm9y
bSRzZW5kVG9BcHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91
dGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ2dlcih0aW1l
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9wNy5fMCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rp
b24gKF9wOCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmck
Y29yZSRUYXNrJHN1Y2NlZWQoc3RhdGUpOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29y
ZSRUaW1lJHN1YnNjcmlwdGlvbiA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9QbGF0Zm9ybS5sZWFm
KCdUaW1lJyk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkVGltZSRTdGF0ZSA9IEYyKAorICAgIGZ1bmN0
aW9uIChhLCBiKSB7CisgICAgICAgIHJldHVybiB7dGFnZ2VyczogYSwgcHJvY2Vzc2VzOiBifTsK
KyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRUaW1lJGluaXQgPSBfZWxtX2xhbmckY29yZSRU
YXNrJHN1Y2NlZWQoCisgICAgQTIoX2VsbV9sYW5nJGNvcmUkVGltZSRTdGF0ZSwgX2VsbV9sYW5n
JGNvcmUkRGljdCRlbXB0eSwgX2VsbV9sYW5nJGNvcmUkRGljdCRlbXB0eSkpOwordmFyIF9lbG1f
bGFuZyRjb3JlJFRpbWUkb25FZmZlY3RzID0gRjMoCisgICAgZnVuY3Rpb24gKHJvdXRlciwgc3Vi
cywgX3A5KSB7CisgICAgICAgIHZhciBfcDEwID0gX3A5OworICAgICAgICB2YXIgcmlnaHRTdGVw
ID0gRjMoCisgICAgICAgICAgICBmdW5jdGlvbiAoX3AxMiwgaWQsIF9wMTEpIHsKKyAgICAgICAg
ICAgICAgICB2YXIgX3AxMyA9IF9wMTE7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAg
ICAgICAgICAgICAgICAgY3RvcjogJ19UdXBsZTMnLAorICAgICAgICAgICAgICAgICAgICBfMDog
X3AxMy5fMCwKKyAgICAgICAgICAgICAgICAgICAgXzE6IF9wMTMuXzEsCisgICAgICAgICAgICAg
ICAgICAgIF8yOiBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFRh
c2skYW5kVGhlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2
ZV9TY2hlZHVsZXIua2lsbChpZCksCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAo
X3AxNCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcDEzLl8yOworICAg
ICAgICAgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAg
fSk7CisgICAgICAgIHZhciBib3RoU3RlcCA9IEY0KAorICAgICAgICAgICAgZnVuY3Rpb24gKGlu
dGVydmFsLCB0YWdnZXJzLCBpZCwgX3AxNSkgeworICAgICAgICAgICAgICAgIHZhciBfcDE2ID0g
X3AxNTsKKyAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICBjdG9y
OiAnX1R1cGxlMycsCisgICAgICAgICAgICAgICAgICAgIF8wOiBfcDE2Ll8wLAorICAgICAgICAg
ICAgICAgICAgICBfMTogQTMoX2VsbV9sYW5nJGNvcmUkRGljdCRpbnNlcnQsIGludGVydmFsLCBp
ZCwgX3AxNi5fMSksCisgICAgICAgICAgICAgICAgICAgIF8yOiBfcDE2Ll8yCisgICAgICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB2YXIgbGVmdFN0ZXAgPSBGMygKKyAg
ICAgICAgICAgIGZ1bmN0aW9uIChpbnRlcnZhbCwgdGFnZ2VycywgX3AxNykgeworICAgICAgICAg
ICAgICAgIHZhciBfcDE4ID0gX3AxNzsKKyAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgICAgICAgICBjdG9yOiAnX1R1cGxlMycsCisgICAgICAgICAgICAgICAgICAgIF8wOiBB
MihfZWxtX2xhbmckY29yZSRMaXN0X29wc1snOjonXSwgaW50ZXJ2YWwsIF9wMTguXzApLAorICAg
ICAgICAgICAgICAgICAgICBfMTogX3AxOC5fMSwKKyAgICAgICAgICAgICAgICAgICAgXzI6IF9w
MTguXzIKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfSk7CisgICAgICAgIHZhciBu
ZXdUYWdnZXJzID0gQTMoX2VsbV9sYW5nJGNvcmUkTGlzdCRmb2xkbCwgX2VsbV9sYW5nJGNvcmUk
VGltZSRhZGRNeVN1YiwgX2VsbV9sYW5nJGNvcmUkRGljdCRlbXB0eSwgc3Vicyk7CisgICAgICAg
IHZhciBfcDE5ID0gQTYoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSREaWN0JG1lcmdlLAor
ICAgICAgICAgICAgbGVmdFN0ZXAsCisgICAgICAgICAgICBib3RoU3RlcCwKKyAgICAgICAgICAg
IHJpZ2h0U3RlcCwKKyAgICAgICAgICAgIG5ld1RhZ2dlcnMsCisgICAgICAgICAgICBfcDEwLnBy
b2Nlc3NlcywKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjdG9yOiAnX1R1cGxlMycs
CisgICAgICAgICAgICAgICAgXzA6IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJh
eSgKKyAgICAgICAgICAgICAgICAgICAgW10pLAorICAgICAgICAgICAgICAgIF8xOiBfZWxtX2xh
bmckY29yZSREaWN0JGVtcHR5LAorICAgICAgICAgICAgICAgIF8yOiBfZWxtX2xhbmckY29yZSRU
YXNrJHN1Y2NlZWQoCisgICAgICAgICAgICAgICAgICAgIHtjdG9yOiAnX1R1cGxlMCd9KQorICAg
ICAgICAgICAgfSk7CisgICAgICAgIHZhciBzcGF3bkxpc3QgPSBfcDE5Ll8wOworICAgICAgICB2
YXIgZXhpc3RpbmdEaWN0ID0gX3AxOS5fMTsKKyAgICAgICAgdmFyIGtpbGxUYXNrID0gX3AxOS5f
MjsKKyAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRh
bmRUaGVuLAorICAgICAgICAgICAga2lsbFRhc2ssCisgICAgICAgICAgICBmdW5jdGlvbiAoX3Ay
MCkgeworICAgICAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgICAgICAgICAgX2Vs
bV9sYW5nJGNvcmUkVGFzayRhbmRUaGVuLAorICAgICAgICAgICAgICAgICAgICBBMyhfZWxtX2xh
bmckY29yZSRUaW1lJHNwYXduSGVscCwgcm91dGVyLCBzcGF3bkxpc3QsIGV4aXN0aW5nRGljdCks
CisgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChuZXdQcm9jZXNzZXMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRUYXNrJHN1Y2NlZWQoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQTIoX2VsbV9sYW5nJGNvcmUkVGltZSRTdGF0ZSwgbmV3
VGFnZ2VycywgbmV3UHJvY2Vzc2VzKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgfSk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkVGltZSRFdmVyeSA9IEYyKAor
ICAgIGZ1bmN0aW9uIChhLCBiKSB7CisgICAgICAgIHJldHVybiB7Y3RvcjogJ0V2ZXJ5JywgXzA6
IGEsIF8xOiBifTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRUaW1lJGV2ZXJ5ID0gRjIo
CisgICAgZnVuY3Rpb24gKGludGVydmFsLCB0YWdnZXIpIHsKKyAgICAgICAgcmV0dXJuIF9lbG1f
bGFuZyRjb3JlJFRpbWUkc3Vic2NyaXB0aW9uKAorICAgICAgICAgICAgQTIoX2VsbV9sYW5nJGNv
cmUkVGltZSRFdmVyeSwgaW50ZXJ2YWwsIHRhZ2dlcikpOworICAgIH0pOwordmFyIF9lbG1fbGFu
ZyRjb3JlJFRpbWUkc3ViTWFwID0gRjIoCisgICAgZnVuY3Rpb24gKGYsIF9wMjEpIHsKKyAgICAg
ICAgdmFyIF9wMjIgPSBfcDIxOworICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICBfZWxt
X2xhbmckY29yZSRUaW1lJEV2ZXJ5LAorICAgICAgICAgICAgX3AyMi5fMCwKKyAgICAgICAgICAg
IGZ1bmN0aW9uIChfcDIzKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGYoCisgICAgICAgICAg
ICAgICAgICAgIF9wMjIuXzEoX3AyMykpOworICAgICAgICAgICAgfSk7CisgICAgfSk7CitfZWxt
X2xhbmckY29yZSROYXRpdmVfUGxhdGZvcm0uZWZmZWN0TWFuYWdlcnNbJ1RpbWUnXSA9IHtwa2c6
ICdlbG0tbGFuZy9jb3JlJywgaW5pdDogX2VsbV9sYW5nJGNvcmUkVGltZSRpbml0LCBvbkVmZmVj
dHM6IF9lbG1fbGFuZyRjb3JlJFRpbWUkb25FZmZlY3RzLCBvblNlbGZNc2c6IF9lbG1fbGFuZyRj
b3JlJFRpbWUkb25TZWxmTXNnLCB0YWc6ICdzdWInLCBzdWJNYXA6IF9lbG1fbGFuZyRjb3JlJFRp
bWUkc3ViTWFwfTsKKworLy9pbXBvcnQgTWF5YmUsIE5hdGl2ZS5BcnJheSwgTmF0aXZlLkxpc3Qs
IE5hdGl2ZS5VdGlscywgUmVzdWx0IC8vCisKK3ZhciBfZWxtX2xhbmckY29yZSROYXRpdmVfSnNv
biA9IGZ1bmN0aW9uKCkgeworCisKKy8vIENPUkUgREVDT0RFUlMKKworZnVuY3Rpb24gc3VjY2Vl
ZChtc2cpCit7CisgICAgcmV0dXJuIHsKKyAgICAgICAgY3RvcjogJzxkZWNvZGVyPicsCisgICAg
ICAgIHRhZzogJ3N1Y2NlZWQnLAorICAgICAgICBtc2c6IG1zZworICAgIH07Cit9CisKK2Z1bmN0
aW9uIGZhaWwobXNnKQoreworICAgIHJldHVybiB7CisgICAgICAgIGN0b3I6ICc8ZGVjb2Rlcj4n
LAorICAgICAgICB0YWc6ICdmYWlsJywKKyAgICAgICAgbXNnOiBtc2cKKyAgICB9OworfQorCitm
dW5jdGlvbiBkZWNvZGVQcmltaXRpdmUodGFnKQoreworICAgIHJldHVybiB7CisgICAgICAgIGN0
b3I6ICc8ZGVjb2Rlcj4nLAorICAgICAgICB0YWc6IHRhZworICAgIH07Cit9CisKK2Z1bmN0aW9u
IGRlY29kZUNvbnRhaW5lcih0YWcsIGRlY29kZXIpCit7CisgICAgcmV0dXJuIHsKKyAgICAgICAg
Y3RvcjogJzxkZWNvZGVyPicsCisgICAgICAgIHRhZzogdGFnLAorICAgICAgICBkZWNvZGVyOiBk
ZWNvZGVyCisgICAgfTsKK30KKworZnVuY3Rpb24gZGVjb2RlTnVsbCh2YWx1ZSkKK3sKKyAgICBy
ZXR1cm4geworICAgICAgICBjdG9yOiAnPGRlY29kZXI+JywKKyAgICAgICAgdGFnOiAnbnVsbCcs
CisgICAgICAgIHZhbHVlOiB2YWx1ZQorICAgIH07Cit9CisKK2Z1bmN0aW9uIGRlY29kZUZpZWxk
KGZpZWxkLCBkZWNvZGVyKQoreworICAgIHJldHVybiB7CisgICAgICAgIGN0b3I6ICc8ZGVjb2Rl
cj4nLAorICAgICAgICB0YWc6ICdmaWVsZCcsCisgICAgICAgIGZpZWxkOiBmaWVsZCwKKyAgICAg
ICAgZGVjb2RlcjogZGVjb2RlcgorICAgIH07Cit9CisKK2Z1bmN0aW9uIGRlY29kZUtleVZhbHVl
UGFpcnMoZGVjb2RlcikKK3sKKyAgICByZXR1cm4geworICAgICAgICBjdG9yOiAnPGRlY29kZXI+
JywKKyAgICAgICAgdGFnOiAna2V5LXZhbHVlJywKKyAgICAgICAgZGVjb2RlcjogZGVjb2Rlcgor
ICAgIH07Cit9CisKK2Z1bmN0aW9uIGRlY29kZU9iamVjdChmLCBkZWNvZGVycykKK3sKKyAgICBy
ZXR1cm4geworICAgICAgICBjdG9yOiAnPGRlY29kZXI+JywKKyAgICAgICAgdGFnOiAnbWFwLW1h
bnknLAorICAgICAgICBmdW5jOiBmLAorICAgICAgICBkZWNvZGVyczogZGVjb2RlcnMKKyAgICB9
OworfQorCitmdW5jdGlvbiBkZWNvZGVUdXBsZShmLCBkZWNvZGVycykKK3sKKyAgICByZXR1cm4g
eworICAgICAgICBjdG9yOiAnPGRlY29kZXI+JywKKyAgICAgICAgdGFnOiAndHVwbGUnLAorICAg
ICAgICBmdW5jOiBmLAorICAgICAgICBkZWNvZGVyczogZGVjb2RlcnMKKyAgICB9OworfQorCitm
dW5jdGlvbiBhbmRUaGVuKGRlY29kZXIsIGNhbGxiYWNrKQoreworICAgIHJldHVybiB7CisgICAg
ICAgIGN0b3I6ICc8ZGVjb2Rlcj4nLAorICAgICAgICB0YWc6ICdhbmRUaGVuJywKKyAgICAgICAg
ZGVjb2RlcjogZGVjb2RlciwKKyAgICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrCisgICAgfTsKK30K
KworZnVuY3Rpb24gY3VzdG9tQW5kVGhlbihkZWNvZGVyLCBjYWxsYmFjaykKK3sKKyAgICByZXR1
cm4geworICAgICAgICBjdG9yOiAnPGRlY29kZXI+JywKKyAgICAgICAgdGFnOiAnY3VzdG9tQW5k
VGhlbicsCisgICAgICAgIGRlY29kZXI6IGRlY29kZXIsCisgICAgICAgIGNhbGxiYWNrOiBjYWxs
YmFjaworICAgIH07Cit9CisKK2Z1bmN0aW9uIG9uZU9mKGRlY29kZXJzKQoreworICAgIHJldHVy
biB7CisgICAgICAgIGN0b3I6ICc8ZGVjb2Rlcj4nLAorICAgICAgICB0YWc6ICdvbmVPZicsCisg
ICAgICAgIGRlY29kZXJzOiBkZWNvZGVycworICAgIH07Cit9CisKKworLy8gREVDT0RJTkcgT0JK
RUNUUworCitmdW5jdGlvbiBkZWNvZGVPYmplY3QxKGYsIGQxKQoreworICAgIHJldHVybiBkZWNv
ZGVPYmplY3QoZiwgW2QxXSk7Cit9CisKK2Z1bmN0aW9uIGRlY29kZU9iamVjdDIoZiwgZDEsIGQy
KQoreworICAgIHJldHVybiBkZWNvZGVPYmplY3QoZiwgW2QxLCBkMl0pOworfQorCitmdW5jdGlv
biBkZWNvZGVPYmplY3QzKGYsIGQxLCBkMiwgZDMpCit7CisgICAgcmV0dXJuIGRlY29kZU9iamVj
dChmLCBbZDEsIGQyLCBkM10pOworfQorCitmdW5jdGlvbiBkZWNvZGVPYmplY3Q0KGYsIGQxLCBk
MiwgZDMsIGQ0KQoreworICAgIHJldHVybiBkZWNvZGVPYmplY3QoZiwgW2QxLCBkMiwgZDMsIGQ0
XSk7Cit9CisKK2Z1bmN0aW9uIGRlY29kZU9iamVjdDUoZiwgZDEsIGQyLCBkMywgZDQsIGQ1KQor
eworICAgIHJldHVybiBkZWNvZGVPYmplY3QoZiwgW2QxLCBkMiwgZDMsIGQ0LCBkNV0pOworfQor
CitmdW5jdGlvbiBkZWNvZGVPYmplY3Q2KGYsIGQxLCBkMiwgZDMsIGQ0LCBkNSwgZDYpCit7Cisg
ICAgcmV0dXJuIGRlY29kZU9iamVjdChmLCBbZDEsIGQyLCBkMywgZDQsIGQ1LCBkNl0pOworfQor
CitmdW5jdGlvbiBkZWNvZGVPYmplY3Q3KGYsIGQxLCBkMiwgZDMsIGQ0LCBkNSwgZDYsIGQ3KQor
eworICAgIHJldHVybiBkZWNvZGVPYmplY3QoZiwgW2QxLCBkMiwgZDMsIGQ0LCBkNSwgZDYsIGQ3
XSk7Cit9CisKK2Z1bmN0aW9uIGRlY29kZU9iamVjdDgoZiwgZDEsIGQyLCBkMywgZDQsIGQ1LCBk
NiwgZDcsIGQ4KQoreworICAgIHJldHVybiBkZWNvZGVPYmplY3QoZiwgW2QxLCBkMiwgZDMsIGQ0
LCBkNSwgZDYsIGQ3LCBkOF0pOworfQorCisKKy8vIERFQ09ESU5HIFRVUExFUworCitmdW5jdGlv
biBkZWNvZGVUdXBsZTEoZiwgZDEpCit7CisgICAgcmV0dXJuIGRlY29kZVR1cGxlKGYsIFtkMV0p
OworfQorCitmdW5jdGlvbiBkZWNvZGVUdXBsZTIoZiwgZDEsIGQyKQoreworICAgIHJldHVybiBk
ZWNvZGVUdXBsZShmLCBbZDEsIGQyXSk7Cit9CisKK2Z1bmN0aW9uIGRlY29kZVR1cGxlMyhmLCBk
MSwgZDIsIGQzKQoreworICAgIHJldHVybiBkZWNvZGVUdXBsZShmLCBbZDEsIGQyLCBkM10pOwor
fQorCitmdW5jdGlvbiBkZWNvZGVUdXBsZTQoZiwgZDEsIGQyLCBkMywgZDQpCit7CisgICAgcmV0
dXJuIGRlY29kZVR1cGxlKGYsIFtkMSwgZDIsIGQzLCBkNF0pOworfQorCitmdW5jdGlvbiBkZWNv
ZGVUdXBsZTUoZiwgZDEsIGQyLCBkMywgZDQsIGQ1KQoreworICAgIHJldHVybiBkZWNvZGVUdXBs
ZShmLCBbZDEsIGQyLCBkMywgZDQsIGQ1XSk7Cit9CisKK2Z1bmN0aW9uIGRlY29kZVR1cGxlNihm
LCBkMSwgZDIsIGQzLCBkNCwgZDUsIGQ2KQoreworICAgIHJldHVybiBkZWNvZGVUdXBsZShmLCBb
ZDEsIGQyLCBkMywgZDQsIGQ1LCBkNl0pOworfQorCitmdW5jdGlvbiBkZWNvZGVUdXBsZTcoZiwg
ZDEsIGQyLCBkMywgZDQsIGQ1LCBkNiwgZDcpCit7CisgICAgcmV0dXJuIGRlY29kZVR1cGxlKGYs
IFtkMSwgZDIsIGQzLCBkNCwgZDUsIGQ2LCBkN10pOworfQorCitmdW5jdGlvbiBkZWNvZGVUdXBs
ZTgoZiwgZDEsIGQyLCBkMywgZDQsIGQ1LCBkNiwgZDcsIGQ4KQoreworICAgIHJldHVybiBkZWNv
ZGVUdXBsZShmLCBbZDEsIGQyLCBkMywgZDQsIGQ1LCBkNiwgZDcsIGQ4XSk7Cit9CisKKworLy8g
REVDT0RFIEhFTFBFUlMKKworZnVuY3Rpb24gb2sodmFsdWUpCit7CisgICAgcmV0dXJuIHsgdGFn
OiAnb2snLCB2YWx1ZTogdmFsdWUgfTsKK30KKworZnVuY3Rpb24gYmFkUHJpbWl0aXZlKHR5cGUs
IHZhbHVlKQoreworICAgIHJldHVybiB7IHRhZzogJ3ByaW1pdGl2ZScsIHR5cGU6IHR5cGUsIHZh
bHVlOiB2YWx1ZSB9OworfQorCitmdW5jdGlvbiBiYWRJbmRleChpbmRleCwgbmVzdGVkUHJvYmxl
bXMpCit7CisgICAgcmV0dXJuIHsgdGFnOiAnaW5kZXgnLCBpbmRleDogaW5kZXgsIHJlc3Q6IG5l
c3RlZFByb2JsZW1zIH07Cit9CisKK2Z1bmN0aW9uIGJhZEZpZWxkKGZpZWxkLCBuZXN0ZWRQcm9i
bGVtcykKK3sKKyAgICByZXR1cm4geyB0YWc6ICdmaWVsZCcsIGZpZWxkOiBmaWVsZCwgcmVzdDog
bmVzdGVkUHJvYmxlbXMgfTsKK30KKworZnVuY3Rpb24gYmFkT25lT2YocHJvYmxlbXMpCit7Cisg
ICAgcmV0dXJuIHsgdGFnOiAnb25lT2YnLCBwcm9ibGVtczogcHJvYmxlbXMgfTsKK30KKworZnVu
Y3Rpb24gYmFkQ3VzdG9tKG1zZykKK3sKKyAgICByZXR1cm4geyB0YWc6ICdjdXN0b20nLCBtc2c6
IG1zZyB9OworfQorCitmdW5jdGlvbiBiYWQobXNnKQoreworICAgIHJldHVybiB7IHRhZzogJ2Zh
aWwnLCBtc2c6IG1zZyB9OworfQorCitmdW5jdGlvbiBiYWRUb1N0cmluZyhwcm9ibGVtKQorewor
ICAgIHZhciBjb250ZXh0ID0gJ18nOworICAgIHdoaWxlIChwcm9ibGVtKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChwcm9ibGVtLnRhZykKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSAncHJp
bWl0aXZlJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ0V4cGVjdGluZyAnICsgcHJvYmxlbS50
eXBlCisgICAgICAgICAgICAgICAgICAgICsgKGNvbnRleHQgPT09ICdfJyA/ICcnIDogJyBhdCAn
ICsgY29udGV4dCkKKyAgICAgICAgICAgICAgICAgICAgKyAnIGJ1dCBpbnN0ZWFkIGdvdDogJyAr
IGpzVG9TdHJpbmcocHJvYmxlbS52YWx1ZSk7CisKKyAgICAgICAgICAgIGNhc2UgJ2luZGV4JzoK
KyAgICAgICAgICAgICAgICBjb250ZXh0ICs9ICdbJyArIHByb2JsZW0uaW5kZXggKyAnXSc7Cisg
ICAgICAgICAgICAgICAgcHJvYmxlbSA9IHByb2JsZW0ucmVzdDsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgY2FzZSAnZmllbGQnOgorICAgICAgICAgICAgICAgIGNvbnRl
eHQgKz0gJy4nICsgcHJvYmxlbS5maWVsZDsKKyAgICAgICAgICAgICAgICBwcm9ibGVtID0gcHJv
YmxlbS5yZXN0OworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdv
bmVPZic6CisgICAgICAgICAgICAgICAgdmFyIHByb2JsZW1zID0gcHJvYmxlbS5wcm9ibGVtczsK
KyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb2JsZW1zLmxlbmd0aDsgaSsr
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcHJvYmxlbXNbaV0gPSBi
YWRUb1N0cmluZyhwcm9ibGVtc1tpXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIHJldHVybiAnSSByYW4gaW50byB0aGUgZm9sbG93aW5nIHByb2JsZW1zJworICAgICAgICAg
ICAgICAgICAgICArIChjb250ZXh0ID09PSAnXycgPyAnJyA6ICcgYXQgJyArIGNvbnRleHQpCisg
ICAgICAgICAgICAgICAgICAgICsgJzpcblxuJyArIHByb2JsZW1zLmpvaW4oJ1xuJyk7CisKKyAg
ICAgICAgICAgIGNhc2UgJ2N1c3RvbSc6CisgICAgICAgICAgICAgICAgcmV0dXJuICdBIGBjdXN0
b21EZWNvZGVyYCBmYWlsZWQnCisgICAgICAgICAgICAgICAgICAgICsgKGNvbnRleHQgPT09ICdf
JyA/ICcnIDogJyBhdCAnICsgY29udGV4dCkKKyAgICAgICAgICAgICAgICAgICAgKyAnIHdpdGgg
dGhlIG1lc3NhZ2U6ICcgKyBwcm9ibGVtLm1zZzsKKworICAgICAgICAgICAgY2FzZSAnZmFpbCc6
CisgICAgICAgICAgICAgICAgcmV0dXJuICdJIHJhbiBpbnRvIGEgYGZhaWxgIGRlY29kZXInCisg
ICAgICAgICAgICAgICAgICAgICsgKGNvbnRleHQgPT09ICdfJyA/ICcnIDogJyBhdCAnICsgY29u
dGV4dCkKKyAgICAgICAgICAgICAgICAgICAgKyAnOiAnICsgcHJvYmxlbS5tc2c7CisgICAgICAg
IH0KKyAgICB9Cit9CisKK2Z1bmN0aW9uIGpzVG9TdHJpbmcodmFsdWUpCit7CisgICAgcmV0dXJu
IHZhbHVlID09PSB1bmRlZmluZWQKKyAgICAgICAgPyAndW5kZWZpbmVkJworICAgICAgICA6IEpT
T04uc3RyaW5naWZ5KHZhbHVlKTsKK30KKworCisvLyBERUNPREUKKworZnVuY3Rpb24gcnVuT25T
dHJpbmcoZGVjb2Rlciwgc3RyaW5nKQoreworICAgIHZhciBqc29uOworICAgIHRyeQorICAgIHsK
KyAgICAgICAganNvbiA9IEpTT04ucGFyc2Uoc3RyaW5nKTsKKyAgICB9CisgICAgY2F0Y2ggKGUp
CisgICAgeworICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkUmVzdWx0JEVycignR2l2ZW4g
YW4gaW52YWxpZCBKU09OOiAnICsgZS5tZXNzYWdlKTsKKyAgICB9CisgICAgcmV0dXJuIHJ1bihk
ZWNvZGVyLCBqc29uKTsKK30KKworZnVuY3Rpb24gcnVuKGRlY29kZXIsIHZhbHVlKQoreworICAg
IHZhciByZXN1bHQgPSBydW5IZWxwKGRlY29kZXIsIHZhbHVlKTsKKyAgICByZXR1cm4gKHJlc3Vs
dC50YWcgPT09ICdvaycpCisgICAgICAgID8gX2VsbV9sYW5nJGNvcmUkUmVzdWx0JE9rKHJlc3Vs
dC52YWx1ZSkKKyAgICAgICAgOiBfZWxtX2xhbmckY29yZSRSZXN1bHQkRXJyKGJhZFRvU3RyaW5n
KHJlc3VsdCkpOworfQorCitmdW5jdGlvbiBydW5IZWxwKGRlY29kZXIsIHZhbHVlKQoreworICAg
IHN3aXRjaCAoZGVjb2Rlci50YWcpCisgICAgeworICAgICAgICBjYXNlICdib29sJzoKKyAgICAg
ICAgICAgIHJldHVybiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpCisgICAgICAgICAgICAg
ICAgPyBvayh2YWx1ZSkKKyAgICAgICAgICAgICAgICA6IGJhZFByaW1pdGl2ZSgnYSBCb29sJywg
dmFsdWUpOworCisgICAgICAgIGNhc2UgJ2ludCc6CisgICAgICAgICAgICBpZiAodHlwZW9mIHZh
bHVlICE9PSAnbnVtYmVyJykgeworICAgICAgICAgICAgICAgIHJldHVybiBiYWRQcmltaXRpdmUo
J2FuIEludCcsIHZhbHVlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKC0yMTQ3
NDgzNjQ3IDwgdmFsdWUgJiYgdmFsdWUgPCAyMTQ3NDgzNjQ3ICYmICh2YWx1ZSB8IDApID09PSB2
YWx1ZSkgeworICAgICAgICAgICAgICAgIHJldHVybiBvayh2YWx1ZSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChpc0Zpbml0ZSh2YWx1ZSkgJiYgISh2YWx1ZSAlIDEpKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG9rKHZhbHVlKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgcmV0dXJuIGJhZFByaW1pdGl2ZSgnYW4gSW50JywgdmFsdWUpOworCisgICAgICAgIGNh
c2UgJ2Zsb2F0JzoKKyAgICAgICAgICAgIHJldHVybiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVy
JykKKyAgICAgICAgICAgICAgICA/IG9rKHZhbHVlKQorICAgICAgICAgICAgICAgIDogYmFkUHJp
bWl0aXZlKCdhIEZsb2F0JywgdmFsdWUpOworCisgICAgICAgIGNhc2UgJ3N0cmluZyc6CisgICAg
ICAgICAgICByZXR1cm4gKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpCisgICAgICAgICAgICAg
ICAgPyBvayh2YWx1ZSkKKyAgICAgICAgICAgICAgICA6ICh2YWx1ZSBpbnN0YW5jZW9mIFN0cmlu
ZykKKyAgICAgICAgICAgICAgICAgICAgPyBvayh2YWx1ZSArICcnKQorICAgICAgICAgICAgICAg
ICAgICA6IGJhZFByaW1pdGl2ZSgnYSBTdHJpbmcnLCB2YWx1ZSk7CisKKyAgICAgICAgY2FzZSAn
bnVsbCc6CisgICAgICAgICAgICByZXR1cm4gKHZhbHVlID09PSBudWxsKQorICAgICAgICAgICAg
ICAgID8gb2soZGVjb2Rlci52YWx1ZSkKKyAgICAgICAgICAgICAgICA6IGJhZFByaW1pdGl2ZSgn
bnVsbCcsIHZhbHVlKTsKKworICAgICAgICBjYXNlICd2YWx1ZSc6CisgICAgICAgICAgICByZXR1
cm4gb2sodmFsdWUpOworCisgICAgICAgIGNhc2UgJ2xpc3QnOgorICAgICAgICAgICAgaWYgKCEo
dmFsdWUgaW5zdGFuY2VvZiBBcnJheSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGJhZFByaW1pdGl2ZSgnYSBMaXN0JywgdmFsdWUpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICB2YXIgbGlzdCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0Lk5pbDsKKyAg
ICAgICAgICAgIGZvciAodmFyIGkgPSB2YWx1ZS5sZW5ndGg7IGktLTsgKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBydW5IZWxwKGRlY29kZXIuZGVjb2Rlciwg
dmFsdWVbaV0pOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQudGFnICE9PSAnb2snKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJhZEluZGV4KGksIHJl
c3VsdCkKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGlzdCA9IF9lbG1fbGFu
ZyRjb3JlJE5hdGl2ZV9MaXN0LkNvbnMocmVzdWx0LnZhbHVlLCBsaXN0KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiBvayhsaXN0KTsKKworICAgICAgICBjYXNlICdhcnJheSc6
CisgICAgICAgICAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5KSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYmFkUHJpbWl0aXZlKCdhbiBBcnJheScsIHZhbHVl
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIGxlbiA9IHZhbHVlLmxlbmd0aDsK
KyAgICAgICAgICAgIHZhciBhcnJheSA9IG5ldyBBcnJheShsZW4pOworICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IGxlbjsgaS0tOyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdmFy
IHJlc3VsdCA9IHJ1bkhlbHAoZGVjb2Rlci5kZWNvZGVyLCB2YWx1ZVtpXSk7CisgICAgICAgICAg
ICAgICAgaWYgKHJlc3VsdC50YWcgIT09ICdvaycpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gYmFkSW5kZXgoaSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgYXJyYXlbaV0gPSByZXN1bHQudmFsdWU7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gb2soX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0FycmF5LmZy
b21KU0FycmF5KGFycmF5KSk7CisKKyAgICAgICAgY2FzZSAnbWF5YmUnOgorICAgICAgICAgICAg
dmFyIHJlc3VsdCA9IHJ1bkhlbHAoZGVjb2Rlci5kZWNvZGVyLCB2YWx1ZSk7CisgICAgICAgICAg
ICByZXR1cm4gKHJlc3VsdC50YWcgPT09ICdvaycpCisgICAgICAgICAgICAgICAgPyBvayhfZWxt
X2xhbmckY29yZSRNYXliZSRKdXN0KHJlc3VsdC52YWx1ZSkpCisgICAgICAgICAgICAgICAgOiBv
ayhfZWxtX2xhbmckY29yZSRNYXliZSROb3RoaW5nKTsKKworICAgICAgICBjYXNlICdmaWVsZCc6
CisgICAgICAgICAgICB2YXIgZmllbGQgPSBkZWNvZGVyLmZpZWxkOworICAgICAgICAgICAgaWYg
KHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT09IG51bGwgfHwgIShmaWVsZCBp
biB2YWx1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJhZFByaW1p
dGl2ZSgnYW4gb2JqZWN0IHdpdGggYSBmaWVsZCBuYW1lZCBgJyArIGZpZWxkICsgJ2AnLCB2YWx1
ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciByZXN1bHQgPSBydW5IZWxwKGRl
Y29kZXIuZGVjb2RlciwgdmFsdWVbZmllbGRdKTsKKyAgICAgICAgICAgIHJldHVybiAocmVzdWx0
LnRhZyA9PT0gJ29rJykKKyAgICAgICAgICAgICAgICA/IHJlc3VsdAorICAgICAgICAgICAgICAg
IDogYmFkRmllbGQoZmllbGQsIHJlc3VsdCk7CisKKyAgICAgICAgY2FzZSAna2V5LXZhbHVlJzoK
KyAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBu
dWxsIHx8IHZhbHVlIGluc3RhbmNlb2YgQXJyYXkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGJhZFByaW1pdGl2ZSgnYW4gb2JqZWN0JywgdmFsdWUpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICB2YXIga2V5VmFsdWVQYWlycyA9IF9lbG1fbGFuZyRjb3JlJE5h
dGl2ZV9MaXN0Lk5pbDsKKyAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gcnVuSGVscChkZWNvZGVyLmRl
Y29kZXIsIHZhbHVlW2tleV0pOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQudGFnICE9PSAn
b2snKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJhZEZp
ZWxkKGtleSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFy
IHBhaXIgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuVHVwbGUyKGtleSwgcmVzdWx0LnZh
bHVlKTsKKyAgICAgICAgICAgICAgICBrZXlWYWx1ZVBhaXJzID0gX2VsbV9sYW5nJGNvcmUkTmF0
aXZlX0xpc3QuQ29ucyhwYWlyLCBrZXlWYWx1ZVBhaXJzKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiBvayhrZXlWYWx1ZVBhaXJzKTsKKworICAgICAgICBjYXNlICdtYXAtbWFu
eSc6CisgICAgICAgICAgICB2YXIgYW5zd2VyID0gZGVjb2Rlci5mdW5jOworICAgICAgICAgICAg
dmFyIGRlY29kZXJzID0gZGVjb2Rlci5kZWNvZGVyczsKKyAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgZGVjb2RlcnMubGVuZ3RoOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgdmFyIHJlc3VsdCA9IHJ1bkhlbHAoZGVjb2RlcnNbaV0sIHZhbHVlKTsKKyAgICAgICAg
ICAgICAgICBpZiAocmVzdWx0LnRhZyAhPT0gJ29rJykKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGFuc3dlciA9IGFuc3dlcihyZXN1bHQudmFsdWUpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIG9rKGFuc3dlcik7CisKKyAgICAgICAgY2FzZSAndHVwbGUnOgor
ICAgICAgICAgICAgdmFyIGRlY29kZXJzID0gZGVjb2Rlci5kZWNvZGVyczsKKyAgICAgICAgICAg
IHZhciBsZW4gPSBkZWNvZGVycy5sZW5ndGg7CisKKyAgICAgICAgICAgIGlmICggISh2YWx1ZSBp
bnN0YW5jZW9mIEFycmF5KSB8fCB2YWx1ZS5sZW5ndGggIT09IGxlbiApCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGJhZFByaW1pdGl2ZSgnYSBUdXBsZSB3aXRoICcgKyBs
ZW4gKyAnIGVudHJpZXMnLCB2YWx1ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZh
ciBhbnN3ZXIgPSBkZWNvZGVyLmZ1bmM7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGxlbjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBy
dW5IZWxwKGRlY29kZXJzW2ldLCB2YWx1ZVtpXSk7CisgICAgICAgICAgICAgICAgaWYgKHJlc3Vs
dC50YWcgIT09ICdvaycpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gYmFkSW5kZXgoaSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYW5zd2VyID0gYW5zd2VyKHJlc3VsdC52YWx1ZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gb2soYW5zd2VyKTsKKworICAgICAgICBjYXNlICdjdXN0b21BbmRUaGVu
JzoKKyAgICAgICAgICAgIHZhciByZXN1bHQgPSBydW5IZWxwKGRlY29kZXIuZGVjb2RlciwgdmFs
dWUpOworICAgICAgICAgICAgaWYgKHJlc3VsdC50YWcgIT09ICdvaycpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHZhciByZWFsUmVzdWx0ID0gZGVjb2Rlci5jYWxsYmFjayhyZXN1bHQudmFsdWUpOworICAg
ICAgICAgICAgaWYgKHJlYWxSZXN1bHQuY3RvciA9PT0gJ0VycicpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGJhZEN1c3RvbShyZWFsUmVzdWx0Ll8wKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiBvayhyZWFsUmVzdWx0Ll8wKTsKKworICAgICAgICBj
YXNlICdhbmRUaGVuJzoKKyAgICAgICAgICAgIHZhciByZXN1bHQgPSBydW5IZWxwKGRlY29kZXIu
ZGVjb2RlciwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIChyZXN1bHQudGFnICE9PSAnb2sn
KQorICAgICAgICAgICAgICAgID8gcmVzdWx0CisgICAgICAgICAgICAgICAgOiBydW5IZWxwKGRl
Y29kZXIuY2FsbGJhY2socmVzdWx0LnZhbHVlKSwgdmFsdWUpOworCisgICAgICAgIGNhc2UgJ29u
ZU9mJzoKKyAgICAgICAgICAgIHZhciBlcnJvcnMgPSBbXTsKKyAgICAgICAgICAgIHZhciB0ZW1w
ID0gZGVjb2Rlci5kZWNvZGVyczsKKyAgICAgICAgICAgIHdoaWxlICh0ZW1wLmN0b3IgIT09ICdb
XScpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHJ1bkhlbHAo
dGVtcC5fMCwgdmFsdWUpOworCisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC50YWcgPT09ICdv
aycpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKHJlc3Vs
dCk7CisKKyAgICAgICAgICAgICAgICB0ZW1wID0gdGVtcC5fMTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiBiYWRPbmVPZihlcnJvcnMpOworCisgICAgICAgIGNhc2UgJ2ZhaWwn
OgorICAgICAgICAgICAgcmV0dXJuIGJhZChkZWNvZGVyLm1zZyk7CisKKyAgICAgICAgY2FzZSAn
c3VjY2VlZCc6CisgICAgICAgICAgICByZXR1cm4gb2soZGVjb2Rlci5tc2cpOworICAgIH0KK30K
KworCisvLyBFUVVBTElUWQorCitmdW5jdGlvbiBlcXVhbGl0eShhLCBiKQoreworICAgIGlmIChh
ID09PSBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKGEu
dGFnICE9PSBiLnRhZykKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBzd2l0Y2ggKGEudGFnKQorICAgIHsKKyAgICAgICAgY2FzZSAnc3VjY2VlZCc6CisgICAgICAg
IGNhc2UgJ2ZhaWwnOgorICAgICAgICAgICAgcmV0dXJuIGEubXNnID09PSBiLm1zZzsKKworICAg
ICAgICBjYXNlICdib29sJzoKKyAgICAgICAgY2FzZSAnaW50JzoKKyAgICAgICAgY2FzZSAnZmxv
YXQnOgorICAgICAgICBjYXNlICdzdHJpbmcnOgorICAgICAgICBjYXNlICd2YWx1ZSc6CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBjYXNlICdudWxsJzoKKyAgICAgICAgICAg
IHJldHVybiBhLnZhbHVlID09PSBiLnZhbHVlOworCisgICAgICAgIGNhc2UgJ2xpc3QnOgorICAg
ICAgICBjYXNlICdhcnJheSc6CisgICAgICAgIGNhc2UgJ21heWJlJzoKKyAgICAgICAgY2FzZSAn
a2V5LXZhbHVlJzoKKyAgICAgICAgICAgIHJldHVybiBlcXVhbGl0eShhLmRlY29kZXIsIGIuZGVj
b2Rlcik7CisKKyAgICAgICAgY2FzZSAnZmllbGQnOgorICAgICAgICAgICAgcmV0dXJuIGEuZmll
bGQgPT09IGIuZmllbGQgJiYgZXF1YWxpdHkoYS5kZWNvZGVyLCBiLmRlY29kZXIpOworCisgICAg
ICAgIGNhc2UgJ21hcC1tYW55JzoKKyAgICAgICAgY2FzZSAndHVwbGUnOgorICAgICAgICAgICAg
aWYgKGEuZnVuYyAhPT0gYi5mdW5jKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBsaXN0RXF1YWxp
dHkoYS5kZWNvZGVycywgYi5kZWNvZGVycyk7CisKKyAgICAgICAgY2FzZSAnYW5kVGhlbic6Cisg
ICAgICAgIGNhc2UgJ2N1c3RvbUFuZFRoZW4nOgorICAgICAgICAgICAgcmV0dXJuIGEuY2FsbGJh
Y2sgPT09IGIuY2FsbGJhY2sgJiYgZXF1YWxpdHkoYS5kZWNvZGVyLCBiLmRlY29kZXIpOworCisg
ICAgICAgIGNhc2UgJ29uZU9mJzoKKyAgICAgICAgICAgIHJldHVybiBsaXN0RXF1YWxpdHkoYS5k
ZWNvZGVycywgYi5kZWNvZGVycyk7CisgICAgfQorfQorCitmdW5jdGlvbiBsaXN0RXF1YWxpdHko
YURlY29kZXJzLCBiRGVjb2RlcnMpCit7CisgICAgdmFyIGxlbiA9IGFEZWNvZGVycy5sZW5ndGg7
CisgICAgaWYgKGxlbiAhPT0gYkRlY29kZXJzLmxlbmd0aCkKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykKKyAgICB7
CisgICAgICAgIGlmICghZXF1YWxpdHkoYURlY29kZXJzW2ldLCBiRGVjb2RlcnNbaV0pKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisKKworLy8gRU5DT0RFCisKK2Z1bmN0aW9uIGVuY29kZShpbmRlbnRM
ZXZlbCwgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCBp
bmRlbnRMZXZlbCk7Cit9CisKK2Z1bmN0aW9uIGlkZW50aXR5KHZhbHVlKQoreworICAgIHJldHVy
biB2YWx1ZTsKK30KKworZnVuY3Rpb24gZW5jb2RlT2JqZWN0KGtleVZhbHVlUGFpcnMpCit7Cisg
ICAgdmFyIG9iaiA9IHt9OworICAgIHdoaWxlIChrZXlWYWx1ZVBhaXJzLmN0b3IgIT09ICdbXScp
CisgICAgeworICAgICAgICB2YXIgcGFpciA9IGtleVZhbHVlUGFpcnMuXzA7CisgICAgICAgIG9i
altwYWlyLl8wXSA9IHBhaXIuXzE7CisgICAgICAgIGtleVZhbHVlUGFpcnMgPSBrZXlWYWx1ZVBh
aXJzLl8xOworICAgIH0KKyAgICByZXR1cm4gb2JqOworfQorCityZXR1cm4geworICAgIGVuY29k
ZTogRjIoZW5jb2RlKSwKKyAgICBydW5PblN0cmluZzogRjIocnVuT25TdHJpbmcpLAorICAgIHJ1
bjogRjIocnVuKSwKKworICAgIGRlY29kZU51bGw6IGRlY29kZU51bGwsCisgICAgZGVjb2RlUHJp
bWl0aXZlOiBkZWNvZGVQcmltaXRpdmUsCisgICAgZGVjb2RlQ29udGFpbmVyOiBGMihkZWNvZGVD
b250YWluZXIpLAorCisgICAgZGVjb2RlRmllbGQ6IEYyKGRlY29kZUZpZWxkKSwKKworICAgIGRl
Y29kZU9iamVjdDE6IEYyKGRlY29kZU9iamVjdDEpLAorICAgIGRlY29kZU9iamVjdDI6IEYzKGRl
Y29kZU9iamVjdDIpLAorICAgIGRlY29kZU9iamVjdDM6IEY0KGRlY29kZU9iamVjdDMpLAorICAg
IGRlY29kZU9iamVjdDQ6IEY1KGRlY29kZU9iamVjdDQpLAorICAgIGRlY29kZU9iamVjdDU6IEY2
KGRlY29kZU9iamVjdDUpLAorICAgIGRlY29kZU9iamVjdDY6IEY3KGRlY29kZU9iamVjdDYpLAor
ICAgIGRlY29kZU9iamVjdDc6IEY4KGRlY29kZU9iamVjdDcpLAorICAgIGRlY29kZU9iamVjdDg6
IEY5KGRlY29kZU9iamVjdDgpLAorICAgIGRlY29kZUtleVZhbHVlUGFpcnM6IGRlY29kZUtleVZh
bHVlUGFpcnMsCisKKyAgICBkZWNvZGVUdXBsZTE6IEYyKGRlY29kZVR1cGxlMSksCisgICAgZGVj
b2RlVHVwbGUyOiBGMyhkZWNvZGVUdXBsZTIpLAorICAgIGRlY29kZVR1cGxlMzogRjQoZGVjb2Rl
VHVwbGUzKSwKKyAgICBkZWNvZGVUdXBsZTQ6IEY1KGRlY29kZVR1cGxlNCksCisgICAgZGVjb2Rl
VHVwbGU1OiBGNihkZWNvZGVUdXBsZTUpLAorICAgIGRlY29kZVR1cGxlNjogRjcoZGVjb2RlVHVw
bGU2KSwKKyAgICBkZWNvZGVUdXBsZTc6IEY4KGRlY29kZVR1cGxlNyksCisgICAgZGVjb2RlVHVw
bGU4OiBGOShkZWNvZGVUdXBsZTgpLAorCisgICAgYW5kVGhlbjogRjIoYW5kVGhlbiksCisgICAg
Y3VzdG9tQW5kVGhlbjogRjIoY3VzdG9tQW5kVGhlbiksCisgICAgZmFpbDogZmFpbCwKKyAgICBz
dWNjZWVkOiBzdWNjZWVkLAorICAgIG9uZU9mOiBvbmVPZiwKKworICAgIGlkZW50aXR5OiBpZGVu
dGl0eSwKKyAgICBlbmNvZGVOdWxsOiBudWxsLAorICAgIGVuY29kZUFycmF5OiBfZWxtX2xhbmck
Y29yZSROYXRpdmVfQXJyYXkudG9KU0FycmF5LAorICAgIGVuY29kZUxpc3Q6IF9lbG1fbGFuZyRj
b3JlJE5hdGl2ZV9MaXN0LnRvQXJyYXksCisgICAgZW5jb2RlT2JqZWN0OiBlbmNvZGVPYmplY3Qs
CisKKyAgICBlcXVhbGl0eTogZXF1YWxpdHkKK307CisKK30oKTsKKwordmFyIF9lbG1fbGFuZyRj
b3JlJEpzb25fRW5jb2RlJGxpc3QgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfSnNvbi5lbmNvZGVM
aXN0OwordmFyIF9lbG1fbGFuZyRjb3JlJEpzb25fRW5jb2RlJGFycmF5ID0gX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX0pzb24uZW5jb2RlQXJyYXk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkSnNvbl9FbmNv
ZGUkb2JqZWN0ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pzb24uZW5jb2RlT2JqZWN0OwordmFy
IF9lbG1fbGFuZyRjb3JlJEpzb25fRW5jb2RlJG51bGwgPSBfZWxtX2xhbmckY29yZSROYXRpdmVf
SnNvbi5lbmNvZGVOdWxsOwordmFyIF9lbG1fbGFuZyRjb3JlJEpzb25fRW5jb2RlJGJvb2wgPSBf
ZWxtX2xhbmckY29yZSROYXRpdmVfSnNvbi5pZGVudGl0eTsKK3ZhciBfZWxtX2xhbmckY29yZSRK
c29uX0VuY29kZSRmbG9hdCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9Kc29uLmlkZW50aXR5Owor
dmFyIF9lbG1fbGFuZyRjb3JlJEpzb25fRW5jb2RlJGludCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2
ZV9Kc29uLmlkZW50aXR5OwordmFyIF9lbG1fbGFuZyRjb3JlJEpzb25fRW5jb2RlJHN0cmluZyA9
IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9Kc29uLmlkZW50aXR5OwordmFyIF9lbG1fbGFuZyRjb3Jl
JEpzb25fRW5jb2RlJGVuY29kZSA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9Kc29uLmVuY29kZTsK
K3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0VuY29kZSRWYWx1ZSA9IHtjdG9yOiAnVmFsdWUnfTsK
KwordmFyIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJHR1cGxlOCA9IF9lbG1fbGFuZyRjb3Jl
JE5hdGl2ZV9Kc29uLmRlY29kZVR1cGxlODsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0RlY29k
ZSR0dXBsZTcgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfSnNvbi5kZWNvZGVUdXBsZTc7Cit2YXIg
X2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkdHVwbGU2ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZl
X0pzb24uZGVjb2RlVHVwbGU2OwordmFyIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJHR1cGxl
NSA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9Kc29uLmRlY29kZVR1cGxlNTsKK3ZhciBfZWxtX2xh
bmckY29yZSRKc29uX0RlY29kZSR0dXBsZTQgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfSnNvbi5k
ZWNvZGVUdXBsZTQ7Cit2YXIgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkdHVwbGUzID0gX2Vs
bV9sYW5nJGNvcmUkTmF0aXZlX0pzb24uZGVjb2RlVHVwbGUzOwordmFyIF9lbG1fbGFuZyRjb3Jl
JEpzb25fRGVjb2RlJHR1cGxlMiA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9Kc29uLmRlY29kZVR1
cGxlMjsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSR0dXBsZTEgPSBfZWxtX2xhbmck
Y29yZSROYXRpdmVfSnNvbi5kZWNvZGVUdXBsZTE7Cit2YXIgX2VsbV9sYW5nJGNvcmUkSnNvbl9E
ZWNvZGUkc3VjY2VlZCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9Kc29uLnN1Y2NlZWQ7Cit2YXIg
X2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkZmFpbCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9K
c29uLmZhaWw7Cit2YXIgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkYW5kVGhlbiA9IF9lbG1f
bGFuZyRjb3JlJE5hdGl2ZV9Kc29uLmFuZFRoZW47Cit2YXIgX2VsbV9sYW5nJGNvcmUkSnNvbl9E
ZWNvZGUkY3VzdG9tRGVjb2RlciA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9Kc29uLmN1c3RvbUFu
ZFRoZW47Cit2YXIgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkZGVjb2RlVmFsdWUgPSBfZWxt
X2xhbmckY29yZSROYXRpdmVfSnNvbi5ydW47Cit2YXIgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNv
ZGUkdmFsdWUgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfSnNvbi5kZWNvZGVQcmltaXRpdmUoJ3Zh
bHVlJyk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkbWF5YmUgPSBmdW5jdGlvbiAo
ZGVjb2RlcikgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckY29yZSROYXRpdmVfSnNvbi5kZWNv
ZGVDb250YWluZXIsICdtYXliZScsIGRlY29kZXIpOworfTsKK3ZhciBfZWxtX2xhbmckY29yZSRK
c29uX0RlY29kZSRudWxsID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pzb24uZGVjb2RlTnVsbDsK
K3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRhcnJheSA9IGZ1bmN0aW9uIChkZWNvZGVy
KSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9Kc29uLmRlY29kZUNvbnRh
aW5lciwgJ2FycmF5JywgZGVjb2Rlcik7Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVj
b2RlJGxpc3QgPSBmdW5jdGlvbiAoZGVjb2RlcikgeworICAgIHJldHVybiBBMihfZWxtX2xhbmck
Y29yZSROYXRpdmVfSnNvbi5kZWNvZGVDb250YWluZXIsICdsaXN0JywgZGVjb2Rlcik7Cit9Owor
dmFyIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJGJvb2wgPSBfZWxtX2xhbmckY29yZSROYXRp
dmVfSnNvbi5kZWNvZGVQcmltaXRpdmUoJ2Jvb2wnKTsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29u
X0RlY29kZSRpbnQgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfSnNvbi5kZWNvZGVQcmltaXRpdmUo
J2ludCcpOwordmFyIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJGZsb2F0ID0gX2VsbV9sYW5n
JGNvcmUkTmF0aXZlX0pzb24uZGVjb2RlUHJpbWl0aXZlKCdmbG9hdCcpOwordmFyIF9lbG1fbGFu
ZyRjb3JlJEpzb25fRGVjb2RlJHN0cmluZyA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9Kc29uLmRl
Y29kZVByaW1pdGl2ZSgnc3RyaW5nJyk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUk
b25lT2YgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfSnNvbi5vbmVPZjsKK3ZhciBfZWxtX2xhbmck
Y29yZSRKc29uX0RlY29kZSRrZXlWYWx1ZVBhaXJzID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pz
b24uZGVjb2RlS2V5VmFsdWVQYWlyczsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRv
YmplY3Q4ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pzb24uZGVjb2RlT2JqZWN0ODsKK3ZhciBf
ZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRvYmplY3Q3ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZl
X0pzb24uZGVjb2RlT2JqZWN0NzsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRvYmpl
Y3Q2ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pzb24uZGVjb2RlT2JqZWN0NjsKK3ZhciBfZWxt
X2xhbmckY29yZSRKc29uX0RlY29kZSRvYmplY3Q1ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pz
b24uZGVjb2RlT2JqZWN0NTsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRvYmplY3Q0
ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pzb24uZGVjb2RlT2JqZWN0NDsKK3ZhciBfZWxtX2xh
bmckY29yZSRKc29uX0RlY29kZSRvYmplY3QzID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pzb24u
ZGVjb2RlT2JqZWN0MzsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRvYmplY3QyID0g
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pzb24uZGVjb2RlT2JqZWN0MjsKK3ZhciBfZWxtX2xhbmck
Y29yZSRKc29uX0RlY29kZSRvYmplY3QxID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pzb24uZGVj
b2RlT2JqZWN0MTsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZV9vcHMgPSBfZWxtX2xh
bmckY29yZSRKc29uX0RlY29kZV9vcHMgfHwge307CitfZWxtX2xhbmckY29yZSRKc29uX0RlY29k
ZV9vcHNbJzo9J10gPSBfZWxtX2xhbmckY29yZSROYXRpdmVfSnNvbi5kZWNvZGVGaWVsZDsKK3Zh
ciBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRhdCA9IEYyKAorICAgIGZ1bmN0aW9uIChmaWVs
ZHMsIGRlY29kZXIpIHsKKyAgICAgICAgcmV0dXJuIEEzKAorICAgICAgICAgICAgX2VsbV9sYW5n
JGNvcmUkTGlzdCRmb2xkciwKKyAgICAgICAgICAgIEYyKAorICAgICAgICAgICAgICAgIGZ1bmN0
aW9uICh4LCB5KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBBMihfZWxtX2xhbmckY29y
ZSRKc29uX0RlY29kZV9vcHNbJzo9J10sIHgsIHkpOworICAgICAgICAgICAgICAgIH0pLAorICAg
ICAgICAgICAgZGVjb2RlciwKKyAgICAgICAgICAgIGZpZWxkcyk7CisgICAgfSk7Cit2YXIgX2Vs
bV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkZGVjb2RlU3RyaW5nID0gX2VsbV9sYW5nJGNvcmUkTmF0
aXZlX0pzb24ucnVuT25TdHJpbmc7Cit2YXIgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkbWFw
ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pzb24uZGVjb2RlT2JqZWN0MTsKK3ZhciBfZWxtX2xh
bmckY29yZSRKc29uX0RlY29kZSRkaWN0ID0gZnVuY3Rpb24gKGRlY29kZXIpIHsKKyAgICByZXR1
cm4gQTIoCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJG1hcCwKKyAgICAgICAg
X2VsbV9sYW5nJGNvcmUkRGljdCRmcm9tTGlzdCwKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkSnNv
bl9EZWNvZGUka2V5VmFsdWVQYWlycyhkZWNvZGVyKSk7Cit9OwordmFyIF9lbG1fbGFuZyRjb3Jl
JEpzb25fRGVjb2RlJERlY29kZXIgPSB7Y3RvcjogJ0RlY29kZXInfTsKKwordmFyIF9lbG1fbGFu
ZyRjb3JlJFByb2Nlc3Mka2lsbCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TY2hlZHVsZXIua2ls
bDsKK3ZhciBfZWxtX2xhbmckY29yZSRQcm9jZXNzJHNsZWVwID0gX2VsbV9sYW5nJGNvcmUkTmF0
aXZlX1NjaGVkdWxlci5zbGVlcDsKK3ZhciBfZWxtX2xhbmckY29yZSRQcm9jZXNzJHNwYXduID0g
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVkdWxlci5zcGF3bjsKKwordmFyIF9lbG1fbGFuZyRk
b20kTmF0aXZlX0RvbSA9IGZ1bmN0aW9uKCkgeworCitmdW5jdGlvbiBvbihub2RlKQoreworICAg
IHJldHVybiBmdW5jdGlvbihldmVudE5hbWUsIGRlY29kZXIsIHRvVGFzaykKKyAgICB7CisgICAg
ICAgIHJldHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVfU2NoZWR1bGVyLm5hdGl2ZUJpbmRpbmco
ZnVuY3Rpb24oY2FsbGJhY2spIHsKKworICAgICAgICAgICAgZnVuY3Rpb24gcGVyZm9ybVRhc2so
ZXZlbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IEEyKF9l
bG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJGRlY29kZVZhbHVlLCBkZWNvZGVyLCBldmVudCk7Cisg
ICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5jdG9yID09PSAnT2snKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVkdWxlci5y
YXdTcGF3bih0b1Rhc2socmVzdWx0Ll8wKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBwZXJm
b3JtVGFzayk7CisKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgcGVy
Zm9ybVRhc2spOworICAgICAgICAgICAgfTsKKyAgICAgICAgfSk7CisgICAgfTsKK30KKwordmFy
IHJBRiA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7IGNhbGxiYWNrKCk7IH07CisKK2Z1bmN0aW9uIHdp
dGhOb2RlKGlkLCBkb1N0dWZmKQoreworICAgIHJldHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVf
U2NoZWR1bGVyLm5hdGl2ZUJpbmRpbmcoZnVuY3Rpb24oY2FsbGJhY2spCisgICAgeworICAgICAg
ICByQUYoZnVuY3Rpb24oKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgbm9kZSA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKKyAgICAgICAgICAgIGlmIChub2RlID09PSBudWxsKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhbGxiYWNrKF9lbG1fbGFuZyRjb3JlJE5h
dGl2ZV9TY2hlZHVsZXIuZmFpbCh7IGN0b3I6ICdOb3RGb3VuZCcsIF8wOiBpZCB9KSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FsbGJhY2so
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVkdWxlci5zdWNjZWVkKGRvU3R1ZmYobm9kZSkpKTsK
KyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKKworLy8gRk9DVVMKKworZnVuY3Rpb24gZm9jdXMo
aWQpCit7CisgICAgcmV0dXJuIHdpdGhOb2RlKGlkLCBmdW5jdGlvbihub2RlKSB7CisgICAgICAg
IG5vZGUuZm9jdXMoKTsKKyAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGls
cy5UdXBsZTA7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIGJsdXIoaWQpCit7CisgICAgcmV0dXJu
IHdpdGhOb2RlKGlkLCBmdW5jdGlvbihub2RlKSB7CisgICAgICAgIG5vZGUuYmx1cigpOworICAg
ICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLlR1cGxlMDsKKyAgICB9KTsK
K30KKworCisvLyBTQ1JPTExJTkcKKworZnVuY3Rpb24gZ2V0U2Nyb2xsVG9wKGlkKQoreworICAg
IHJldHVybiB3aXRoTm9kZShpZCwgZnVuY3Rpb24obm9kZSkgeworICAgICAgICByZXR1cm4gbm9k
ZS5zY3JvbGxUb3A7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIHNldFNjcm9sbFRvcChpZCwgZGVz
aXJlZFNjcm9sbFRvcCkKK3sKKyAgICByZXR1cm4gd2l0aE5vZGUoaWQsIGZ1bmN0aW9uKG5vZGUp
IHsKKyAgICAgICAgbm9kZS5zY3JvbGxUb3AgPSBkZXNpcmVkU2Nyb2xsVG9wOworICAgICAgICBy
ZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLlR1cGxlMDsKKyAgICB9KTsKK30KKwor
ZnVuY3Rpb24gdG9Cb3R0b20oaWQpCit7CisgICAgcmV0dXJuIHdpdGhOb2RlKGlkLCBmdW5jdGlv
bihub2RlKSB7CisgICAgICAgIG5vZGUuc2Nyb2xsVG9wID0gbm9kZS5zY3JvbGxIZWlnaHQ7Cisg
ICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuVHVwbGUwOworICAgIH0p
OworfQorCitmdW5jdGlvbiBnZXRTY3JvbGxMZWZ0KGlkKQoreworICAgIHJldHVybiB3aXRoTm9k
ZShpZCwgZnVuY3Rpb24obm9kZSkgeworICAgICAgICByZXR1cm4gbm9kZS5zY3JvbGxMZWZ0Owor
ICAgIH0pOworfQorCitmdW5jdGlvbiBzZXRTY3JvbGxMZWZ0KGlkLCBkZXNpcmVkU2Nyb2xsTGVm
dCkKK3sKKyAgICByZXR1cm4gd2l0aE5vZGUoaWQsIGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAg
bm9kZS5zY3JvbGxMZWZ0ID0gZGVzaXJlZFNjcm9sbExlZnQ7CisgICAgICAgIHJldHVybiBfZWxt
X2xhbmckY29yZSROYXRpdmVfVXRpbHMuVHVwbGUwOworICAgIH0pOworfQorCitmdW5jdGlvbiB0
b1JpZ2h0KGlkKQoreworICAgIHJldHVybiB3aXRoTm9kZShpZCwgZnVuY3Rpb24obm9kZSkgewor
ICAgICAgICBub2RlLnNjcm9sbExlZnQgPSBub2RlLnNjcm9sbFdpZHRoOworICAgICAgICByZXR1
cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLlR1cGxlMDsKKyAgICB9KTsKK30KKworCisv
LyBTSVpFCisKK2Z1bmN0aW9uIHdpZHRoKG9wdGlvbnMsIGlkKQoreworICAgIHJldHVybiB3aXRo
Tm9kZShpZCwgZnVuY3Rpb24obm9kZSkgeworICAgICAgICBzd2l0Y2ggKG9wdGlvbnMuY3RvcikK
KyAgICAgICAgeworICAgICAgICAgICAgY2FzZSAnQ29udGVudCc6CisgICAgICAgICAgICAgICAg
cmV0dXJuIG5vZGUuc2Nyb2xsV2lkdGg7CisgICAgICAgICAgICBjYXNlICdWaXNpYmxlQ29udGVu
dCc6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2xpZW50V2lkdGg7CisgICAgICAgICAg
ICBjYXNlICdWaXNpYmxlQ29udGVudFdpdGhCb3JkZXJzJzoKKyAgICAgICAgICAgICAgICByZXR1
cm4gbm9kZS5vZmZzZXRXaWR0aDsKKyAgICAgICAgICAgIGNhc2UgJ1Zpc2libGVDb250ZW50V2l0
aEJvcmRlcnNBbmRNYXJnaW5zJzoKKyAgICAgICAgICAgICAgICB2YXIgcmVjdCA9IG5vZGUuZ2V0
Qm91bmRpbmdDbGllbnRSZWN0KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlY3QucmlnaHQg
LSByZWN0LmxlZnQ7CisgICAgICAgIH0KKyAgICB9KTsKK30KKworZnVuY3Rpb24gaGVpZ2h0KG9w
dGlvbnMsIGlkKQoreworICAgIHJldHVybiB3aXRoTm9kZShpZCwgZnVuY3Rpb24obm9kZSkgewor
ICAgICAgICBzd2l0Y2ggKG9wdGlvbnMuY3RvcikKKyAgICAgICAgeworICAgICAgICAgICAgY2Fz
ZSAnQ29udGVudCc6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuc2Nyb2xsSGVpZ2h0Owor
ICAgICAgICAgICAgY2FzZSAnVmlzaWJsZUNvbnRlbnQnOgorICAgICAgICAgICAgICAgIHJldHVy
biBub2RlLmNsaWVudEhlaWdodDsKKyAgICAgICAgICAgIGNhc2UgJ1Zpc2libGVDb250ZW50V2l0
aEJvcmRlcnMnOgorICAgICAgICAgICAgICAgIHJldHVybiBub2RlLm9mZnNldEhlaWdodDsKKyAg
ICAgICAgICAgIGNhc2UgJ1Zpc2libGVDb250ZW50V2l0aEJvcmRlcnNBbmRNYXJnaW5zJzoKKyAg
ICAgICAgICAgICAgICB2YXIgcmVjdCA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlY3QuYm90dG9tIC0gcmVjdC50b3A7CisgICAgICAgIH0K
KyAgICB9KTsKK30KKworcmV0dXJuIHsKKyAgICBvbkRvY3VtZW50OiBGMyhvbihkb2N1bWVudCkp
LAorICAgIG9uV2luZG93OiBGMyhvbih3aW5kb3cpKSwKKworICAgIGZvY3VzOiBmb2N1cywKKyAg
ICBibHVyOiBibHVyLAorCisgICAgZ2V0U2Nyb2xsVG9wOiBnZXRTY3JvbGxUb3AsCisgICAgc2V0
U2Nyb2xsVG9wOiBGMihzZXRTY3JvbGxUb3ApLAorICAgIGdldFNjcm9sbExlZnQ6IGdldFNjcm9s
bExlZnQsCisgICAgc2V0U2Nyb2xsTGVmdDogRjIoc2V0U2Nyb2xsTGVmdCksCisgICAgdG9Cb3R0
b206IHRvQm90dG9tLAorICAgIHRvUmlnaHQ6IHRvUmlnaHQsCisKKyAgICBoZWlnaHQ6IEYyKGhl
aWdodCksCisgICAgd2lkdGg6IEYyKHdpZHRoKQorfTsKKworfSgpOworCit2YXIgX2VsbV9sYW5n
JGRvbSREb20kYmx1ciA9IF9lbG1fbGFuZyRkb20kTmF0aXZlX0RvbS5ibHVyOwordmFyIF9lbG1f
bGFuZyRkb20kRG9tJGZvY3VzID0gX2VsbV9sYW5nJGRvbSROYXRpdmVfRG9tLmZvY3VzOwordmFy
IF9lbG1fbGFuZyRkb20kRG9tJE5vdEZvdW5kID0gZnVuY3Rpb24gKGEpIHsKKyAgICByZXR1cm4g
e2N0b3I6ICdOb3RGb3VuZCcsIF8wOiBhfTsKK307CisKK3ZhciBfZWxtX2xhbmckZG9tJERvbV9M
b3dMZXZlbCRvbldpbmRvdyA9IF9lbG1fbGFuZyRkb20kTmF0aXZlX0RvbS5vbldpbmRvdzsKK3Zh
ciBfZWxtX2xhbmckZG9tJERvbV9Mb3dMZXZlbCRvbkRvY3VtZW50ID0gX2VsbV9sYW5nJGRvbSRO
YXRpdmVfRG9tLm9uRG9jdW1lbnQ7CisKKy8vaW1wb3J0IE5hdGl2ZS5Kc29uIC8vCisKK3ZhciBf
ZWxtX2xhbmckdmlydHVhbF9kb20kTmF0aXZlX1ZpcnR1YWxEb20gPSBmdW5jdGlvbigpIHsKKwor
dmFyIFNUWUxFX0tFWSA9ICdTVFlMRSc7Cit2YXIgRVZFTlRfS0VZID0gJ0VWRU5UJzsKK3ZhciBB
VFRSX0tFWSA9ICdBVFRSJzsKK3ZhciBBVFRSX05TX0tFWSA9ICdBVFRSX05TJzsKKworCisKKy8v
Ly8vLy8vLy8vLyAgVklSVFVBTCBET00gTk9ERVMgIC8vLy8vLy8vLy8vLworCisKK2Z1bmN0aW9u
IHRleHQoc3RyaW5nKQoreworICAgIHJldHVybiB7CisgICAgICAgIHR5cGU6ICd0ZXh0JywKKyAg
ICAgICAgdGV4dDogc3RyaW5nCisgICAgfTsKK30KKworCitmdW5jdGlvbiBub2RlKHRhZykKK3sK
KyAgICByZXR1cm4gRjIoZnVuY3Rpb24oZmFjdExpc3QsIGtpZExpc3QpIHsKKyAgICAgICAgcmV0
dXJuIG5vZGVIZWxwKHRhZywgZmFjdExpc3QsIGtpZExpc3QpOworICAgIH0pOworfQorCisKK2Z1
bmN0aW9uIG5vZGVIZWxwKHRhZywgZmFjdExpc3QsIGtpZExpc3QpCit7CisgICAgdmFyIG9yZ2Fu
aXplZCA9IG9yZ2FuaXplRmFjdHMoZmFjdExpc3QpOworICAgIHZhciBuYW1lc3BhY2UgPSBvcmdh
bml6ZWQubmFtZXNwYWNlOworICAgIHZhciBmYWN0cyA9IG9yZ2FuaXplZC5mYWN0czsKKworICAg
IHZhciBjaGlsZHJlbiA9IFtdOworICAgIHZhciBkZXNjZW5kYW50c0NvdW50ID0gMDsKKyAgICB3
aGlsZSAoa2lkTGlzdC5jdG9yICE9PSAnW10nKQorICAgIHsKKyAgICAgICAgdmFyIGtpZCA9IGtp
ZExpc3QuXzA7CisgICAgICAgIGRlc2NlbmRhbnRzQ291bnQgKz0gKGtpZC5kZXNjZW5kYW50c0Nv
dW50IHx8IDApOworICAgICAgICBjaGlsZHJlbi5wdXNoKGtpZCk7CisgICAgICAgIGtpZExpc3Qg
PSBraWRMaXN0Ll8xOworICAgIH0KKyAgICBkZXNjZW5kYW50c0NvdW50ICs9IGNoaWxkcmVuLmxl
bmd0aDsKKworICAgIHJldHVybiB7CisgICAgICAgIHR5cGU6ICdub2RlJywKKyAgICAgICAgdGFn
OiB0YWcsCisgICAgICAgIGZhY3RzOiBmYWN0cywKKyAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVu
LAorICAgICAgICBuYW1lc3BhY2U6IG5hbWVzcGFjZSwKKyAgICAgICAgZGVzY2VuZGFudHNDb3Vu
dDogZGVzY2VuZGFudHNDb3VudAorICAgIH07Cit9CisKKworZnVuY3Rpb24ga2V5ZWROb2RlKHRh
ZywgZmFjdExpc3QsIGtpZExpc3QpCit7CisgICAgdmFyIG9yZ2FuaXplZCA9IG9yZ2FuaXplRmFj
dHMoZmFjdExpc3QpOworICAgIHZhciBuYW1lc3BhY2UgPSBvcmdhbml6ZWQubmFtZXNwYWNlOwor
ICAgIHZhciBmYWN0cyA9IG9yZ2FuaXplZC5mYWN0czsKKworICAgIHZhciBjaGlsZHJlbiA9IFtd
OworICAgIHZhciBkZXNjZW5kYW50c0NvdW50ID0gMDsKKyAgICB3aGlsZSAoa2lkTGlzdC5jdG9y
ICE9PSAnW10nKQorICAgIHsKKyAgICAgICAgdmFyIGtpZCA9IGtpZExpc3QuXzA7CisgICAgICAg
IGRlc2NlbmRhbnRzQ291bnQgKz0gKGtpZC5fMS5kZXNjZW5kYW50c0NvdW50IHx8IDApOworICAg
ICAgICBjaGlsZHJlbi5wdXNoKGtpZCk7CisgICAgICAgIGtpZExpc3QgPSBraWRMaXN0Ll8xOwor
ICAgIH0KKyAgICBkZXNjZW5kYW50c0NvdW50ICs9IGNoaWxkcmVuLmxlbmd0aDsKKworICAgIHJl
dHVybiB7CisgICAgICAgIHR5cGU6ICdrZXllZC1ub2RlJywKKyAgICAgICAgdGFnOiB0YWcsCisg
ICAgICAgIGZhY3RzOiBmYWN0cywKKyAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuLAorICAgICAg
ICBuYW1lc3BhY2U6IG5hbWVzcGFjZSwKKyAgICAgICAgZGVzY2VuZGFudHNDb3VudDogZGVzY2Vu
ZGFudHNDb3VudAorICAgIH07Cit9CisKKworZnVuY3Rpb24gY3VzdG9tKGZhY3RMaXN0LCBtb2Rl
bCwgaW1wbCkKK3sKKyAgICB2YXIgZmFjdHMgPSBvcmdhbml6ZUZhY3RzKGZhY3RMaXN0KS5mYWN0
czsKKworICAgIHJldHVybiB7CisgICAgICAgIHR5cGU6ICdjdXN0b20nLAorICAgICAgICBmYWN0
czogZmFjdHMsCisgICAgICAgIG1vZGVsOiBtb2RlbCwKKyAgICAgICAgaW1wbDogaW1wbAorICAg
IH07Cit9CisKKworZnVuY3Rpb24gbWFwKHRhZ2dlciwgbm9kZSkKK3sKKyAgICByZXR1cm4gewor
ICAgICAgICB0eXBlOiAndGFnZ2VyJywKKyAgICAgICAgdGFnZ2VyOiB0YWdnZXIsCisgICAgICAg
IG5vZGU6IG5vZGUsCisgICAgICAgIGRlc2NlbmRhbnRzQ291bnQ6IDEgKyAobm9kZS5kZXNjZW5k
YW50c0NvdW50IHx8IDApCisgICAgfTsKK30KKworCitmdW5jdGlvbiB0aHVuayhmdW5jLCBhcmdz
LCB0aHVuaykKK3sKKyAgICByZXR1cm4geworICAgICAgICB0eXBlOiAndGh1bmsnLAorICAgICAg
ICBmdW5jOiBmdW5jLAorICAgICAgICBhcmdzOiBhcmdzLAorICAgICAgICB0aHVuazogdGh1bmss
CisgICAgICAgIG5vZGU6IHVuZGVmaW5lZAorICAgIH07Cit9CisKK2Z1bmN0aW9uIGxhenkoZm4s
IGEpCit7CisgICAgcmV0dXJuIHRodW5rKGZuLCBbYV0sIGZ1bmN0aW9uKCkgeworICAgICAgICBy
ZXR1cm4gZm4oYSk7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIGxhenkyKGZuLCBhLCBiKQorewor
ICAgIHJldHVybiB0aHVuayhmbiwgW2EsYl0sIGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4g
QTIoZm4sIGEsIGIpOworICAgIH0pOworfQorCitmdW5jdGlvbiBsYXp5MyhmbiwgYSwgYiwgYykK
K3sKKyAgICByZXR1cm4gdGh1bmsoZm4sIFthLGIsY10sIGZ1bmN0aW9uKCkgeworICAgICAgICBy
ZXR1cm4gQTMoZm4sIGEsIGIsIGMpOworICAgIH0pOworfQorCisKKworLy8gRkFDVFMKKworCitm
dW5jdGlvbiBvcmdhbml6ZUZhY3RzKGZhY3RMaXN0KQoreworICAgIHZhciBuYW1lc3BhY2UsIGZh
Y3RzID0ge307CisKKyAgICB3aGlsZSAoZmFjdExpc3QuY3RvciAhPT0gJ1tdJykKKyAgICB7Cisg
ICAgICAgIHZhciBlbnRyeSA9IGZhY3RMaXN0Ll8wOworICAgICAgICB2YXIga2V5ID0gZW50cnku
a2V5OworCisgICAgICAgIGlmIChrZXkgPT09IEFUVFJfS0VZIHx8IGtleSA9PT0gQVRUUl9OU19L
RVkgfHwga2V5ID09PSBFVkVOVF9LRVkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBzdWJG
YWN0cyA9IGZhY3RzW2tleV0gfHwge307CisgICAgICAgICAgICBzdWJGYWN0c1tlbnRyeS5yZWFs
S2V5XSA9IGVudHJ5LnZhbHVlOworICAgICAgICAgICAgZmFjdHNba2V5XSA9IHN1YkZhY3RzOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gU1RZTEVfS0VZKQorICAgICAgICB7
CisgICAgICAgICAgICB2YXIgc3R5bGVzID0gZmFjdHNba2V5XSB8fCB7fTsKKyAgICAgICAgICAg
IHZhciBzdHlsZUxpc3QgPSBlbnRyeS52YWx1ZTsKKyAgICAgICAgICAgIHdoaWxlIChzdHlsZUxp
c3QuY3RvciAhPT0gJ1tdJykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YXIgc3R5
bGUgPSBzdHlsZUxpc3QuXzA7CisgICAgICAgICAgICAgICAgc3R5bGVzW3N0eWxlLl8wXSA9IHN0
eWxlLl8xOworICAgICAgICAgICAgICAgIHN0eWxlTGlzdCA9IHN0eWxlTGlzdC5fMTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGZhY3RzW2tleV0gPSBzdHlsZXM7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSBpZiAoa2V5ID09PSAnbmFtZXNwYWNlJykKKyAgICAgICAgeworICAgICAgICAg
ICAgbmFtZXNwYWNlID0gZW50cnkudmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICBmYWN0c1trZXldID0gZW50cnkudmFsdWU7CisgICAgICAgIH0K
KyAgICAgICAgZmFjdExpc3QgPSBmYWN0TGlzdC5fMTsKKyAgICB9CisKKyAgICByZXR1cm4gewor
ICAgICAgICBmYWN0czogZmFjdHMsCisgICAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlCisgICAg
fTsKK30KKworCisKKy8vLy8vLy8vLy8vLyAgUFJPUEVSVElFUyBBTkQgQVRUUklCVVRFUyAgLy8v
Ly8vLy8vLy8vCisKKworZnVuY3Rpb24gc3R5bGUodmFsdWUpCit7CisgICAgcmV0dXJuIHsKKyAg
ICAgICAga2V5OiBTVFlMRV9LRVksCisgICAgICAgIHZhbHVlOiB2YWx1ZQorICAgIH07Cit9CisK
KworZnVuY3Rpb24gcHJvcGVydHkoa2V5LCB2YWx1ZSkKK3sKKyAgICByZXR1cm4geworICAgICAg
ICBrZXk6IGtleSwKKyAgICAgICAgdmFsdWU6IHZhbHVlCisgICAgfTsKK30KKworCitmdW5jdGlv
biBhdHRyaWJ1dGUoa2V5LCB2YWx1ZSkKK3sKKyAgICByZXR1cm4geworICAgICAgICBrZXk6IEFU
VFJfS0VZLAorICAgICAgICByZWFsS2V5OiBrZXksCisgICAgICAgIHZhbHVlOiB2YWx1ZQorICAg
IH07Cit9CisKKworZnVuY3Rpb24gYXR0cmlidXRlTlMobmFtZXNwYWNlLCBrZXksIHZhbHVlKQor
eworICAgIHJldHVybiB7CisgICAgICAgIGtleTogQVRUUl9OU19LRVksCisgICAgICAgIHJlYWxL
ZXk6IGtleSwKKyAgICAgICAgdmFsdWU6IHsKKyAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKKyAg
ICAgICAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlCisgICAgICAgIH0KKyAgICB9OworfQorCisK
K2Z1bmN0aW9uIG9uKG5hbWUsIG9wdGlvbnMsIGRlY29kZXIpCit7CisgICAgcmV0dXJuIHsKKyAg
ICAgICAga2V5OiBFVkVOVF9LRVksCisgICAgICAgIHJlYWxLZXk6IG5hbWUsCisgICAgICAgIHZh
bHVlOiB7CisgICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zLAorICAgICAgICAgICAgZGVjb2Rl
cjogZGVjb2RlcgorICAgICAgICB9CisgICAgfTsKK30KKworCitmdW5jdGlvbiBlcXVhbEV2ZW50
cyhhLCBiKQoreworICAgIGlmICghYS5vcHRpb25zID09PSBiLm9wdGlvbnMpCisgICAgeworICAg
ICAgICBpZiAoYS5zdG9wUHJvcGFnYXRpb24gIT09IGIuc3RvcFByb3BhZ2F0aW9uIHx8IGEucHJl
dmVudERlZmF1bHQgIT09IGIucHJldmVudERlZmF1bHQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX0pzb24uZXF1YWxpdHkoYS5kZWNvZGVyLCBiLmRlY29kZXIpOworfQorCisKKwor
Ly8vLy8vLy8vLy8vICBSRU5ERVJFUiAgLy8vLy8vLy8vLy8vCisKKworZnVuY3Rpb24gcmVuZGVy
ZXIocGFyZW50LCB0YWdnZXIsIGluaXRpYWxWaXJ0dWFsTm9kZSkKK3sKKyAgICB2YXIgZXZlbnRO
b2RlID0geyB0YWdnZXI6IHRhZ2dlciwgcGFyZW50OiB1bmRlZmluZWQgfTsKKworICAgIHZhciBk
b21Ob2RlID0gcmVuZGVyKGluaXRpYWxWaXJ0dWFsTm9kZSwgZXZlbnROb2RlKTsKKyAgICBwYXJl
bnQuYXBwZW5kQ2hpbGQoZG9tTm9kZSk7CisKKyAgICB2YXIgc3RhdGUgPSAnTk9fUkVRVUVTVCc7
CisgICAgdmFyIGN1cnJlbnRWaXJ0dWFsTm9kZSA9IGluaXRpYWxWaXJ0dWFsTm9kZTsKKyAgICB2
YXIgbmV4dFZpcnR1YWxOb2RlID0gaW5pdGlhbFZpcnR1YWxOb2RlOworCisgICAgZnVuY3Rpb24g
cmVnaXN0ZXJWaXJ0dWFsTm9kZSh2Tm9kZSkKKyAgICB7CisgICAgICAgIGlmIChzdGF0ZSA9PT0g
J05PX1JFUVVFU1QnKQorICAgICAgICB7CisgICAgICAgICAgICByQUYodXBkYXRlSWZOZWVkZWQp
OworICAgICAgICB9CisgICAgICAgIHN0YXRlID0gJ1BFTkRJTkdfUkVRVUVTVCc7CisgICAgICAg
IG5leHRWaXJ0dWFsTm9kZSA9IHZOb2RlOworICAgIH0KKworICAgIGZ1bmN0aW9uIHVwZGF0ZUlm
TmVlZGVkKCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc3RhdGUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGNhc2UgJ05PX1JFUVVFU1QnOgorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJv
cigKKyAgICAgICAgICAgICAgICAgICAgJ1VuZXhwZWN0ZWQgZHJhdyBjYWxsYmFjay5cbicgKwor
ICAgICAgICAgICAgICAgICAgICAnUGxlYXNlIHJlcG9ydCB0aGlzIHRvIDxodHRwczovL2dpdGh1
Yi5jb20vZWxtLWxhbmcvY29yZS9pc3N1ZXM+LicKKyAgICAgICAgICAgICAgICApOworCisgICAg
ICAgICAgICBjYXNlICdQRU5ESU5HX1JFUVVFU1QnOgorICAgICAgICAgICAgICAgIHJBRih1cGRh
dGVJZk5lZWRlZCk7CisgICAgICAgICAgICAgICAgc3RhdGUgPSAnRVhUUkFfUkVRVUVTVCc7CisK
KyAgICAgICAgICAgICAgICB2YXIgcGF0Y2hlcyA9IGRpZmYoY3VycmVudFZpcnR1YWxOb2RlLCBu
ZXh0VmlydHVhbE5vZGUpOworICAgICAgICAgICAgICAgIGRvbU5vZGUgPSBhcHBseVBhdGNoZXMo
ZG9tTm9kZSwgY3VycmVudFZpcnR1YWxOb2RlLCBwYXRjaGVzLCBldmVudE5vZGUpOworICAgICAg
ICAgICAgICAgIGN1cnJlbnRWaXJ0dWFsTm9kZSA9IG5leHRWaXJ0dWFsTm9kZTsKKworICAgICAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgY2FzZSAnRVhUUkFfUkVRVUVTVCc6Cisg
ICAgICAgICAgICAgICAgc3RhdGUgPSAnTk9fUkVRVUVTVCc7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHsgdXBkYXRlOiByZWdpc3RlclZp
cnR1YWxOb2RlIH07Cit9CisKKword2luZG93LnJBRkNhbGxiYWNrTGlzdCA9IFtdOwordmFyIHJB
RiA9IGZ1bmN0aW9uIChjYWxsYmFjaykgeworICAgIHdpbmRvdy5yQUZDYWxsYmFja0xpc3QucHVz
aChjYWxsYmFjayk7Cit9CisKKworCisvLy8vLy8vLy8vLy8gIFJFTkRFUiAgLy8vLy8vLy8vLy8v
CisKKworZnVuY3Rpb24gcmVuZGVyKHZOb2RlLCBldmVudE5vZGUpCit7CisgICAgc3dpdGNoICh2
Tm9kZS50eXBlKQorICAgIHsKKyAgICAgICAgY2FzZSAndGh1bmsnOgorICAgICAgICAgICAgaWYg
KCF2Tm9kZS5ub2RlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZOb2RlLm5vZGUg
PSB2Tm9kZS50aHVuaygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlbmRl
cih2Tm9kZS5ub2RlLCBldmVudE5vZGUpOworCisgICAgICAgIGNhc2UgJ3RhZ2dlcic6CisgICAg
ICAgICAgICB2YXIgc3ViTm9kZSA9IHZOb2RlLm5vZGU7CisgICAgICAgICAgICB2YXIgdGFnZ2Vy
ID0gdk5vZGUudGFnZ2VyOworCisgICAgICAgICAgICB3aGlsZSAoc3ViTm9kZS50eXBlID09PSAn
dGFnZ2VyJykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0eXBlb2YgdGFnZ2VyICE9
PSAnb2JqZWN0JworICAgICAgICAgICAgICAgICAgICA/IHRhZ2dlciA9IFt0YWdnZXIsIHN1Yk5v
ZGUudGFnZ2VyXQorICAgICAgICAgICAgICAgICAgICA6IHRhZ2dlci5wdXNoKHN1Yk5vZGUudGFn
Z2VyKTsKKworICAgICAgICAgICAgICAgIHN1Yk5vZGUgPSBzdWJOb2RlLm5vZGU7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHZhciBzdWJFdmVudFJvb3QgPSB7CisgICAgICAgICAgICAg
ICAgdGFnZ2VyOiB0YWdnZXIsCisgICAgICAgICAgICAgICAgcGFyZW50OiBldmVudE5vZGUKKyAg
ICAgICAgICAgIH07CisKKyAgICAgICAgICAgIHZhciBkb21Ob2RlID0gcmVuZGVyKHN1Yk5vZGUs
IHN1YkV2ZW50Um9vdCk7CisgICAgICAgICAgICBkb21Ob2RlLmVsbV9ldmVudF9ub2RlX3JlZiA9
IHN1YkV2ZW50Um9vdDsKKyAgICAgICAgICAgIHJldHVybiBkb21Ob2RlOworCisgICAgICAgIGNh
c2UgJ3RleHQnOgorICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHZO
b2RlLnRleHQpOworCisgICAgICAgIGNhc2UgJ25vZGUnOgorICAgICAgICAgICAgdmFyIGRvbU5v
ZGUgPSB2Tm9kZS5uYW1lc3BhY2UKKyAgICAgICAgICAgICAgICA/IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnROUyh2Tm9kZS5uYW1lc3BhY2UsIHZOb2RlLnRhZykKKyAgICAgICAgICAgICAgICA6IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQodk5vZGUudGFnKTsKKworICAgICAgICAgICAgYXBwbHlGYWN0
cyhkb21Ob2RlLCBldmVudE5vZGUsIHZOb2RlLmZhY3RzKTsKKworICAgICAgICAgICAgdmFyIGNo
aWxkcmVuID0gdk5vZGUuY2hpbGRyZW47CisKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ZG9tTm9kZS5hcHBlbmRDaGlsZChyZW5kZXIoY2hpbGRyZW5baV0sIGV2ZW50Tm9kZSkpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gZG9tTm9kZTsKKworICAgICAgICBjYXNl
ICdrZXllZC1ub2RlJzoKKyAgICAgICAgICAgIHZhciBkb21Ob2RlID0gdk5vZGUubmFtZXNwYWNl
CisgICAgICAgICAgICAgICAgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlModk5vZGUubmFtZXNw
YWNlLCB2Tm9kZS50YWcpCisgICAgICAgICAgICAgICAgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KHZOb2RlLnRhZyk7CisKKyAgICAgICAgICAgIGFwcGx5RmFjdHMoZG9tTm9kZSwgZXZlbnROb2Rl
LCB2Tm9kZS5mYWN0cyk7CisKKyAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IHZOb2RlLmNoaWxk
cmVuOworCisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsg
aSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRvbU5vZGUuYXBwZW5kQ2hpbGQo
cmVuZGVyKGNoaWxkcmVuW2ldLl8xLCBldmVudE5vZGUpKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgcmV0dXJuIGRvbU5vZGU7CisKKyAgICAgICAgY2FzZSAnY3VzdG9tJzoKKyAgICAg
ICAgICAgIHZhciBkb21Ob2RlID0gdk5vZGUuaW1wbC5yZW5kZXIodk5vZGUubW9kZWwpOworICAg
ICAgICAgICAgYXBwbHlGYWN0cyhkb21Ob2RlLCBldmVudE5vZGUsIHZOb2RlLmZhY3RzKTsKKyAg
ICAgICAgICAgIHJldHVybiBkb21Ob2RlOworICAgIH0KK30KKworCisKKy8vLy8vLy8vLy8vLyAg
QVBQTFkgRkFDVFMgIC8vLy8vLy8vLy8vLworCisKK2Z1bmN0aW9uIGFwcGx5RmFjdHMoZG9tTm9k
ZSwgZXZlbnROb2RlLCBmYWN0cykKK3sKKyAgICBmb3IgKHZhciBrZXkgaW4gZmFjdHMpCisgICAg
eworICAgICAgICB2YXIgdmFsdWUgPSBmYWN0c1trZXldOworCisgICAgICAgIHN3aXRjaCAoa2V5
KQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFNUWUxFX0tFWToKKyAgICAgICAgICAgICAg
ICBhcHBseVN0eWxlcyhkb21Ob2RlLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgIGNhc2UgRVZFTlRfS0VZOgorICAgICAgICAgICAgICAgIGFwcGx5RXZlbnRz
KGRvbU5vZGUsIGV2ZW50Tm9kZSwgdmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICBjYXNlIEFUVFJfS0VZOgorICAgICAgICAgICAgICAgIGFwcGx5QXR0cnMoZG9t
Tm9kZSwgdmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNl
IEFUVFJfTlNfS0VZOgorICAgICAgICAgICAgICAgIGFwcGx5QXR0cnNOUyhkb21Ob2RlLCB2YWx1
ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ3ZhbHVlJzoK
KyAgICAgICAgICAgICAgICBpZiAoZG9tTm9kZVtrZXldICE9PSB2YWx1ZSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRvbU5vZGVba2V5XSA9IHZhbHVlOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICBkb21Ob2RlW2tleV0gPSB2YWx1ZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKworZnVuY3Rpb24gYXBwbHlTdHlsZXMoZG9t
Tm9kZSwgc3R5bGVzKQoreworICAgIHZhciBkb21Ob2RlU3R5bGUgPSBkb21Ob2RlLnN0eWxlOwor
CisgICAgZm9yICh2YXIga2V5IGluIHN0eWxlcykKKyAgICB7CisgICAgICAgIGRvbU5vZGVTdHls
ZVtrZXldID0gc3R5bGVzW2tleV07CisgICAgfQorfQorCitmdW5jdGlvbiBhcHBseUV2ZW50cyhk
b21Ob2RlLCBldmVudE5vZGUsIGV2ZW50cykKK3sKKyAgICB2YXIgYWxsSGFuZGxlcnMgPSBkb21O
b2RlLmVsbV9oYW5kbGVycyB8fCB7fTsKKworICAgIGZvciAodmFyIGtleSBpbiBldmVudHMpCisg
ICAgeworICAgICAgICB2YXIgaGFuZGxlciA9IGFsbEhhbmRsZXJzW2tleV07CisgICAgICAgIHZh
ciB2YWx1ZSA9IGV2ZW50c1trZXldOworCisgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICd1
bmRlZmluZWQnKQorICAgICAgICB7CisgICAgICAgICAgICBkb21Ob2RlLnJlbW92ZUV2ZW50TGlz
dGVuZXIoa2V5LCBoYW5kbGVyKTsKKyAgICAgICAgICAgIGFsbEhhbmRsZXJzW2tleV0gPSB1bmRl
ZmluZWQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodHlwZW9mIGhhbmRsZXIgPT09ICd1
bmRlZmluZWQnKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgaGFuZGxlciA9IG1ha2VFdmVu
dEhhbmRsZXIoZXZlbnROb2RlLCB2YWx1ZSk7CisgICAgICAgICAgICBkb21Ob2RlLmFkZEV2ZW50
TGlzdGVuZXIoa2V5LCBoYW5kbGVyKTsKKyAgICAgICAgICAgIGFsbEhhbmRsZXJzW2tleV0gPSBo
YW5kbGVyOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAg
aGFuZGxlci5pbmZvID0gdmFsdWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBkb21Ob2RlLmVs
bV9oYW5kbGVycyA9IGFsbEhhbmRsZXJzOworfQorCitmdW5jdGlvbiBtYWtlRXZlbnRIYW5kbGVy
KGV2ZW50Tm9kZSwgaW5mbykKK3sKKyAgICBmdW5jdGlvbiBldmVudEhhbmRsZXIoZXZlbnQpCisg
ICAgeworICAgICAgICB2YXIgaW5mbyA9IGV2ZW50SGFuZGxlci5pbmZvOworCisgICAgICAgIHZh
ciB2YWx1ZSA9IEEyKF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9Kc29uLnJ1biwgaW5mby5kZWNvZGVy
LCBldmVudCk7CisKKyAgICAgICAgaWYgKHZhbHVlLmN0b3IgPT09ICdPaycpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHZhciBvcHRpb25zID0gaW5mby5vcHRpb25zOworICAgICAgICAgICAgaWYg
KG9wdGlvbnMuc3RvcFByb3BhZ2F0aW9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KG9wdGlvbnMucHJldmVudERlZmF1bHQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFy
IG1lc3NhZ2UgPSB2YWx1ZS5fMDsKKworICAgICAgICAgICAgdmFyIGN1cnJlbnRFdmVudE5vZGUg
PSBldmVudE5vZGU7CisgICAgICAgICAgICB3aGlsZSAoY3VycmVudEV2ZW50Tm9kZSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YXIgdGFnZ2VyID0gY3VycmVudEV2ZW50Tm9kZS50
YWdnZXI7CisgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0YWdnZXIgPT09ICdmdW5jdGlvbicp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gdGFnZ2Vy
KG1lc3NhZ2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gdGFnZ2VyLmxl
bmd0aDsgaS0tOyApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1lc3NhZ2UgPSB0YWdnZXJbaV0obWVzc2FnZSk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY3VycmVudEV2ZW50Tm9kZSA9IGN1
cnJlbnRFdmVudE5vZGUucGFyZW50OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsK
KworICAgIGV2ZW50SGFuZGxlci5pbmZvID0gaW5mbzsKKworICAgIHJldHVybiBldmVudEhhbmRs
ZXI7Cit9CisKK2Z1bmN0aW9uIGFwcGx5QXR0cnMoZG9tTm9kZSwgYXR0cnMpCit7CisgICAgZm9y
ICh2YXIga2V5IGluIGF0dHJzKQorICAgIHsKKyAgICAgICAgdmFyIHZhbHVlID0gYXR0cnNba2V5
XTsKKyAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGRvbU5vZGUucmVtb3ZlQXR0cmlidXRlKGtleSk7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBkb21Ob2RlLnNldEF0dHJpYnV0ZShr
ZXksIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KK30KKworZnVuY3Rpb24gYXBwbHlBdHRyc05T
KGRvbU5vZGUsIG5zQXR0cnMpCit7CisgICAgZm9yICh2YXIga2V5IGluIG5zQXR0cnMpCisgICAg
eworICAgICAgICB2YXIgcGFpciA9IG5zQXR0cnNba2V5XTsKKyAgICAgICAgdmFyIG5hbWVzcGFj
ZSA9IHBhaXIubmFtZXNwYWNlOworICAgICAgICB2YXIgdmFsdWUgPSBwYWlyLnZhbHVlOworCisg
ICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKQorICAgICAgICB7CisgICAg
ICAgICAgICBkb21Ob2RlLnJlbW92ZUF0dHJpYnV0ZU5TKG5hbWVzcGFjZSwga2V5KTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvbU5vZGUuc2V0QXR0
cmlidXRlTlMobmFtZXNwYWNlLCBrZXksIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KK30KKwor
CisKKy8vLy8vLy8vLy8vLyAgRElGRiAgLy8vLy8vLy8vLy8vCisKKworZnVuY3Rpb24gZGlmZihh
LCBiKQoreworICAgIHZhciBwYXRjaGVzID0gW107CisgICAgZGlmZkhlbHAoYSwgYiwgcGF0Y2hl
cywgMCk7CisgICAgcmV0dXJuIHBhdGNoZXM7Cit9CisKKworZnVuY3Rpb24gbWFrZVBhdGNoKHR5
cGUsIGluZGV4LCBkYXRhKQoreworICAgIHJldHVybiB7CisgICAgICAgIGluZGV4OiBpbmRleCwK
KyAgICAgICAgdHlwZTogdHlwZSwKKyAgICAgICAgZGF0YTogZGF0YSwKKyAgICAgICAgZG9tTm9k
ZTogdW5kZWZpbmVkLAorICAgICAgICBldmVudE5vZGU6IHVuZGVmaW5lZAorICAgIH07Cit9CisK
KworZnVuY3Rpb24gZGlmZkhlbHAoYSwgYiwgcGF0Y2hlcywgaW5kZXgpCit7CisgICAgaWYgKGEg
PT09IGIpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdmFyIGFUeXBlID0g
YS50eXBlOworICAgIHZhciBiVHlwZSA9IGIudHlwZTsKKworICAgIC8vIEJhaWwgaWYgeW91IHJ1
biBpbnRvIGRpZmZlcmVudCB0eXBlcyBvZiBub2Rlcy4gSW1wbGllcyB0aGF0IHRoZQorICAgIC8v
IHN0cnVjdHVyZSBoYXMgY2hhbmdlZCBzaWduaWZpY2FudGx5IGFuZCBpdCdzIG5vdCB3b3J0aCBh
IGRpZmYuCisgICAgaWYgKGFUeXBlICE9PSBiVHlwZSkKKyAgICB7CisgICAgICAgIHBhdGNoZXMu
cHVzaChtYWtlUGF0Y2goJ3AtcmVkcmF3JywgaW5kZXgsIGIpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIE5vdyB3ZSBrbm93IHRoYXQgYm90aCBub2RlcyBhcmUgdGhlIHNhbWUg
dHlwZS4KKyAgICBzd2l0Y2ggKGJUeXBlKQorICAgIHsKKyAgICAgICAgY2FzZSAndGh1bmsnOgor
ICAgICAgICAgICAgdmFyIGFBcmdzID0gYS5hcmdzOworICAgICAgICAgICAgdmFyIGJBcmdzID0g
Yi5hcmdzOworICAgICAgICAgICAgdmFyIGkgPSBhQXJncy5sZW5ndGg7CisgICAgICAgICAgICB2
YXIgc2FtZSA9IGEuZnVuYyA9PT0gYi5mdW5jICYmIGkgPT09IGJBcmdzLmxlbmd0aDsKKyAgICAg
ICAgICAgIHdoaWxlIChzYW1lICYmIGktLSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBzYW1lID0gYUFyZ3NbaV0gPT09IGJBcmdzW2ldOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKHNhbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYi5ub2RlID0gYS5u
b2RlOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGIubm9kZSA9IGIudGh1bmsoKTsKKyAgICAgICAgICAgIHZhciBzdWJQYXRjaGVzID0gW107Cisg
ICAgICAgICAgICBkaWZmSGVscChhLm5vZGUsIGIubm9kZSwgc3ViUGF0Y2hlcywgMCk7CisgICAg
ICAgICAgICBpZiAoc3ViUGF0Y2hlcy5sZW5ndGggPiAwKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHBhdGNoZXMucHVzaChtYWtlUGF0Y2goJ3AtdGh1bmsnLCBpbmRleCwgc3ViUGF0
Y2hlcykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNh
c2UgJ3RhZ2dlcic6CisgICAgICAgICAgICAvLyBnYXRoZXIgbmVzdGVkIHRhZ2dlcnMKKyAgICAg
ICAgICAgIHZhciBhVGFnZ2VycyA9IGEudGFnZ2VyOworICAgICAgICAgICAgdmFyIGJUYWdnZXJz
ID0gYi50YWdnZXI7CisgICAgICAgICAgICB2YXIgbmVzdGluZyA9IGZhbHNlOworCisgICAgICAg
ICAgICB2YXIgYVN1Yk5vZGUgPSBhLm5vZGU7CisgICAgICAgICAgICB3aGlsZSAoYVN1Yk5vZGUu
dHlwZSA9PT0gJ3RhZ2dlcicpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbmVzdGlu
ZyA9IHRydWU7CisKKyAgICAgICAgICAgICAgICB0eXBlb2YgYVRhZ2dlcnMgIT09ICdvYmplY3Qn
CisgICAgICAgICAgICAgICAgICAgID8gYVRhZ2dlcnMgPSBbYVRhZ2dlcnMsIGFTdWJOb2RlLnRh
Z2dlcl0KKyAgICAgICAgICAgICAgICAgICAgOiBhVGFnZ2Vycy5wdXNoKGFTdWJOb2RlLnRhZ2dl
cik7CisKKyAgICAgICAgICAgICAgICBhU3ViTm9kZSA9IGFTdWJOb2RlLm5vZGU7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHZhciBiU3ViTm9kZSA9IGIubm9kZTsKKyAgICAgICAgICAg
IHdoaWxlIChiU3ViTm9kZS50eXBlID09PSAndGFnZ2VyJykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBuZXN0aW5nID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgIHR5cGVvZiBiVGFn
Z2VycyAhPT0gJ29iamVjdCcKKyAgICAgICAgICAgICAgICAgICAgPyBiVGFnZ2VycyA9IFtiVGFn
Z2VycywgYlN1Yk5vZGUudGFnZ2VyXQorICAgICAgICAgICAgICAgICAgICA6IGJUYWdnZXJzLnB1
c2goYlN1Yk5vZGUudGFnZ2VyKTsKKworICAgICAgICAgICAgICAgIGJTdWJOb2RlID0gYlN1Yk5v
ZGUubm9kZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSnVzdCBiYWlsIGlmIGRp
ZmZlcmVudCBudW1iZXJzIG9mIHRhZ2dlcnMuIFRoaXMgaW1wbGllcyB0aGUKKyAgICAgICAgICAg
IC8vIHN0cnVjdHVyZSBvZiB0aGUgdmlydHVhbCBET00gaGFzIGNoYW5nZWQuCisgICAgICAgICAg
ICBpZiAobmVzdGluZyAmJiBhVGFnZ2Vycy5sZW5ndGggIT09IGJUYWdnZXJzLmxlbmd0aCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwYXRjaGVzLnB1c2gobWFrZVBhdGNoKCdwLXJl
ZHJhdycsIGluZGV4LCBiKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAvLyBjaGVjayBpZiB0YWdnZXJzIGFyZSAidGhlIHNhbWUiCisgICAg
ICAgICAgICBpZiAobmVzdGluZyA/ICFwYWlyd2lzZVJlZkVxdWFsKGFUYWdnZXJzLCBiVGFnZ2Vy
cykgOiBhVGFnZ2VycyAhPT0gYlRhZ2dlcnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcGF0Y2hlcy5wdXNoKG1ha2VQYXRjaCgncC10YWdnZXInLCBpbmRleCwgYlRhZ2dlcnMpKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gZGlmZiBldmVyeXRoaW5nIGJlbG93IHRo
ZSB0YWdnZXJzCisgICAgICAgICAgICBkaWZmSGVscChhU3ViTm9kZSwgYlN1Yk5vZGUsIHBhdGNo
ZXMsIGluZGV4ICsgMSk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSAndGV4
dCc6CisgICAgICAgICAgICBpZiAoYS50ZXh0ICE9PSBiLnRleHQpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcGF0Y2hlcy5wdXNoKG1ha2VQYXRjaCgncC10ZXh0JywgaW5kZXgsIGIu
dGV4dCkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgJ25vZGUnOgorICAgICAgICAgICAgLy8gQmFp
bCBpZiBvYnZpb3VzIGluZGljYXRvcnMgaGF2ZSBjaGFuZ2VkLiBJbXBsaWVzIG1vcmUgc2VyaW91
cworICAgICAgICAgICAgLy8gc3RydWN0dXJhbCBjaGFuZ2VzIHN1Y2ggdGhhdCBpdCdzIG5vdCB3
b3J0aCBpdCB0byBkaWZmLgorICAgICAgICAgICAgaWYgKGEudGFnICE9PSBiLnRhZyB8fCBhLm5h
bWVzcGFjZSAhPT0gYi5uYW1lc3BhY2UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cGF0Y2hlcy5wdXNoKG1ha2VQYXRjaCgncC1yZWRyYXcnLCBpbmRleCwgYikpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIGZhY3RzRGlm
ZiA9IGRpZmZGYWN0cyhhLmZhY3RzLCBiLmZhY3RzKTsKKworICAgICAgICAgICAgaWYgKHR5cGVv
ZiBmYWN0c0RpZmYgIT09ICd1bmRlZmluZWQnKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHBhdGNoZXMucHVzaChtYWtlUGF0Y2goJ3AtZmFjdHMnLCBpbmRleCwgZmFjdHNEaWZmKSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRpZmZDaGlsZHJlbihhLCBiLCBwYXRjaGVz
LCBpbmRleCk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSAna2V5ZWQtbm9k
ZSc6CisgICAgICAgICAgICAvLyBCYWlsIGlmIG9idmlvdXMgaW5kaWNhdG9ycyBoYXZlIGNoYW5n
ZWQuIEltcGxpZXMgbW9yZSBzZXJpb3VzCisgICAgICAgICAgICAvLyBzdHJ1Y3R1cmFsIGNoYW5n
ZXMgc3VjaCB0aGF0IGl0J3Mgbm90IHdvcnRoIGl0IHRvIGRpZmYuCisgICAgICAgICAgICBpZiAo
YS50YWcgIT09IGIudGFnIHx8IGEubmFtZXNwYWNlICE9PSBiLm5hbWVzcGFjZSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBwYXRjaGVzLnB1c2gobWFrZVBhdGNoKCdwLXJlZHJhdycs
IGluZGV4LCBiKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICB2YXIgZmFjdHNEaWZmID0gZGlmZkZhY3RzKGEuZmFjdHMsIGIuZmFjdHMpOwor
CisgICAgICAgICAgICBpZiAodHlwZW9mIGZhY3RzRGlmZiAhPT0gJ3VuZGVmaW5lZCcpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcGF0Y2hlcy5wdXNoKG1ha2VQYXRjaCgncC1mYWN0
cycsIGluZGV4LCBmYWN0c0RpZmYpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGlm
ZktleWVkQ2hpbGRyZW4oYSwgYiwgcGF0Y2hlcywgaW5kZXgpOworICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIGNhc2UgJ2N1c3RvbSc6CisgICAgICAgICAgICBpZiAoYS5pbXBsICE9PSBi
LmltcGwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcGF0Y2hlcy5wdXNoKG1ha2VQ
YXRjaCgncC1yZWRyYXcnLCBpbmRleCwgYikpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIGZhY3RzRGlmZiA9IGRpZmZGYWN0cyhhLmZh
Y3RzLCBiLmZhY3RzKTsKKyAgICAgICAgICAgIGlmICh0eXBlb2YgZmFjdHNEaWZmICE9PSAndW5k
ZWZpbmVkJykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwYXRjaGVzLnB1c2gobWFr
ZVBhdGNoKCdwLWZhY3RzJywgaW5kZXgsIGZhY3RzRGlmZikpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICB2YXIgcGF0Y2ggPSBiLmltcGwuZGlmZihhLGIpOworICAgICAgICAgICAgaWYg
KHBhdGNoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBhdGNoZXMucHVzaChtYWtl
UGF0Y2goJ3AtY3VzdG9tJywgaW5kZXgsIHBhdGNoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorfQorCisKKy8v
IGFzc3VtZXMgdGhlIGluY29taW5nIGFycmF5cyBhcmUgdGhlIHNhbWUgbGVuZ3RoCitmdW5jdGlv
biBwYWlyd2lzZVJlZkVxdWFsKGFzLCBicykKK3sKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFz
Lmxlbmd0aDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKGFzW2ldICE9PSBic1tpXSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIHRydWU7Cit9CisKKworLy8gVE9ETyBJbnN0ZWFkIG9mIGNyZWF0aW5nIGEgbmV3IGRp
ZmYgb2JqZWN0LCBpdCdzIHBvc3NpYmxlIHRvIGp1c3QgdGVzdCBpZgorLy8gdGhlcmUgKmlzKiBh
IGRpZmYuIER1cmluZyB0aGUgYWN0dWFsIHBhdGNoLCBkbyB0aGUgZGlmZiBhZ2FpbiBhbmQgbWFr
ZSB0aGUKKy8vIG1vZGlmaWNhdGlvbnMgZGlyZWN0bHkuIFRoaXMgd2F5LCB0aGVyZSdzIG5vIG5l
dyBhbGxvY2F0aW9ucy4gV29ydGggaXQ/CitmdW5jdGlvbiBkaWZmRmFjdHMoYSwgYiwgY2F0ZWdv
cnkpCit7CisgICAgdmFyIGRpZmY7CisKKyAgICAvLyBsb29rIGZvciBjaGFuZ2VzIGFuZCByZW1v
dmFscworICAgIGZvciAodmFyIGFLZXkgaW4gYSkKKyAgICB7CisgICAgICAgIGlmIChhS2V5ID09
PSBTVFlMRV9LRVkgfHwgYUtleSA9PT0gRVZFTlRfS0VZIHx8IGFLZXkgPT09IEFUVFJfS0VZIHx8
IGFLZXkgPT09IEFUVFJfTlNfS0VZKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgc3ViRGlm
ZiA9IGRpZmZGYWN0cyhhW2FLZXldLCBiW2FLZXldIHx8IHt9LCBhS2V5KTsKKyAgICAgICAgICAg
IGlmIChzdWJEaWZmKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRpZmYgPSBkaWZm
IHx8IHt9OworICAgICAgICAgICAgICAgIGRpZmZbYUtleV0gPSBzdWJEaWZmOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyByZW1v
dmUgaWYgbm90IGluIHRoZSBuZXcgZmFjdHMKKyAgICAgICAgaWYgKCEoYUtleSBpbiBiKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgZGlmZiA9IGRpZmYgfHwge307CisgICAgICAgICAgICBkaWZm
W2FLZXldID0KKyAgICAgICAgICAgICAgICAodHlwZW9mIGNhdGVnb3J5ID09PSAndW5kZWZpbmVk
JykKKyAgICAgICAgICAgICAgICAgICAgPyAodHlwZW9mIGFbYUtleV0gPT09ICdzdHJpbmcnID8g
JycgOiBudWxsKQorICAgICAgICAgICAgICAgICAgICA6CisgICAgICAgICAgICAgICAgKGNhdGVn
b3J5ID09PSBTVFlMRV9LRVkpCisgICAgICAgICAgICAgICAgICAgID8gJycKKyAgICAgICAgICAg
ICAgICAgICAgOgorICAgICAgICAgICAgICAgIChjYXRlZ29yeSA9PT0gRVZFTlRfS0VZIHx8IGNh
dGVnb3J5ID09PSBBVFRSX0tFWSkKKyAgICAgICAgICAgICAgICAgICAgPyB1bmRlZmluZWQKKyAg
ICAgICAgICAgICAgICAgICAgOgorICAgICAgICAgICAgICAgIHsgbmFtZXNwYWNlOiBhW2FLZXld
Lm5hbWVzcGFjZSwgdmFsdWU6IHVuZGVmaW5lZCB9OworCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorCisgICAgICAgIHZhciBhVmFsdWUgPSBhW2FLZXldOworICAgICAgICB2YXIg
YlZhbHVlID0gYlthS2V5XTsKKworICAgICAgICAvLyByZWZlcmVuY2UgZXF1YWwsIHNvIGRvbid0
IHdvcnJ5IGFib3V0IGl0CisgICAgICAgIGlmIChhVmFsdWUgPT09IGJWYWx1ZSAmJiBhS2V5ICE9
PSAndmFsdWUnCisgICAgICAgICAgICB8fCBjYXRlZ29yeSA9PT0gRVZFTlRfS0VZICYmIGVxdWFs
RXZlbnRzKGFWYWx1ZSwgYlZhbHVlKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KKworICAgICAgICBkaWZmID0gZGlmZiB8fCB7fTsKKyAgICAgICAgZGlmZlth
S2V5XSA9IGJWYWx1ZTsKKyAgICB9CisKKyAgICAvLyBhZGQgbmV3IHN0dWZmCisgICAgZm9yICh2
YXIgYktleSBpbiBiKQorICAgIHsKKyAgICAgICAgaWYgKCEoYktleSBpbiBhKSkKKyAgICAgICAg
eworICAgICAgICAgICAgZGlmZiA9IGRpZmYgfHwge307CisgICAgICAgICAgICBkaWZmW2JLZXld
ID0gYltiS2V5XTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBkaWZmOworfQorCisK
K2Z1bmN0aW9uIGRpZmZDaGlsZHJlbihhUGFyZW50LCBiUGFyZW50LCBwYXRjaGVzLCByb290SW5k
ZXgpCit7CisgICAgdmFyIGFDaGlsZHJlbiA9IGFQYXJlbnQuY2hpbGRyZW47CisgICAgdmFyIGJD
aGlsZHJlbiA9IGJQYXJlbnQuY2hpbGRyZW47CisKKyAgICB2YXIgYUxlbiA9IGFDaGlsZHJlbi5s
ZW5ndGg7CisgICAgdmFyIGJMZW4gPSBiQ2hpbGRyZW4ubGVuZ3RoOworCisgICAgLy8gRklHVVJF
IE9VVCBJRiBUSEVSRSBBUkUgSU5TRVJUUyBPUiBSRU1PVkFMUworCisgICAgaWYgKGFMZW4gPiBi
TGVuKQorICAgIHsKKyAgICAgICAgcGF0Y2hlcy5wdXNoKG1ha2VQYXRjaCgncC1yZW1vdmUtbGFz
dCcsIHJvb3RJbmRleCwgYUxlbiAtIGJMZW4pKTsKKyAgICB9CisgICAgZWxzZSBpZiAoYUxlbiA8
IGJMZW4pCisgICAgeworICAgICAgICBwYXRjaGVzLnB1c2gobWFrZVBhdGNoKCdwLWFwcGVuZCcs
IHJvb3RJbmRleCwgYkNoaWxkcmVuLnNsaWNlKGFMZW4pKSk7CisgICAgfQorCisgICAgLy8gUEFJ
UldJU0UgRElGRiBFVkVSWVRISU5HIEVMU0UKKworICAgIHZhciBpbmRleCA9IHJvb3RJbmRleDsK
KyAgICB2YXIgbWluTGVuID0gYUxlbiA8IGJMZW4gPyBhTGVuIDogYkxlbjsKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IG1pbkxlbjsgaSsrKQorICAgIHsKKyAgICAgICAgaW5kZXgrKzsKKyAgICAg
ICAgdmFyIGFDaGlsZCA9IGFDaGlsZHJlbltpXTsKKyAgICAgICAgZGlmZkhlbHAoYUNoaWxkLCBi
Q2hpbGRyZW5baV0sIHBhdGNoZXMsIGluZGV4KTsKKyAgICAgICAgaW5kZXggKz0gYUNoaWxkLmRl
c2NlbmRhbnRzQ291bnQgfHwgMDsKKyAgICB9Cit9CisKKworCisvLy8vLy8vLy8vLy8gIEtFWUVE
IERJRkYgIC8vLy8vLy8vLy8vLworCisKK2Z1bmN0aW9uIGRpZmZLZXllZENoaWxkcmVuKGFQYXJl
bnQsIGJQYXJlbnQsIHBhdGNoZXMsIHJvb3RJbmRleCkKK3sKKyAgICB2YXIgbG9jYWxQYXRjaGVz
ID0gW107CisKKyAgICB2YXIgY2hhbmdlcyA9IHt9OyAvLyBEaWN0IFN0cmluZyBFbnRyeQorICAg
IHZhciBpbnNlcnRzID0gW107IC8vIEFycmF5IHsgaW5kZXggOiBJbnQsIGVudHJ5IDogRW50cnkg
fQorICAgIC8vIHR5cGUgRW50cnkgPSB7IHRhZyA6IFN0cmluZywgdm5vZGUgOiBWTm9kZSwgaW5k
ZXggOiBJbnQsIGRhdGEgOiBfIH0KKworICAgIHZhciBhQ2hpbGRyZW4gPSBhUGFyZW50LmNoaWxk
cmVuOworICAgIHZhciBiQ2hpbGRyZW4gPSBiUGFyZW50LmNoaWxkcmVuOworICAgIHZhciBhTGVu
ID0gYUNoaWxkcmVuLmxlbmd0aDsKKyAgICB2YXIgYkxlbiA9IGJDaGlsZHJlbi5sZW5ndGg7Cisg
ICAgdmFyIGFJbmRleCA9IDA7CisgICAgdmFyIGJJbmRleCA9IDA7CisKKyAgICB2YXIgaW5kZXgg
PSByb290SW5kZXg7CisKKyAgICB3aGlsZSAoYUluZGV4IDwgYUxlbiAmJiBiSW5kZXggPCBiTGVu
KQorICAgIHsKKyAgICAgICAgdmFyIGEgPSBhQ2hpbGRyZW5bYUluZGV4XTsKKyAgICAgICAgdmFy
IGIgPSBiQ2hpbGRyZW5bYkluZGV4XTsKKworICAgICAgICB2YXIgYUtleSA9IGEuXzA7CisgICAg
ICAgIHZhciBiS2V5ID0gYi5fMDsKKyAgICAgICAgdmFyIGFOb2RlID0gYS5fMTsKKyAgICAgICAg
dmFyIGJOb2RlID0gYi5fMTsKKworICAgICAgICAvLyBjaGVjayBpZiBrZXlzIG1hdGNoCisKKyAg
ICAgICAgaWYgKGFLZXkgPT09IGJLZXkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZGV4Kys7
CisgICAgICAgICAgICBkaWZmSGVscChhTm9kZSwgYk5vZGUsIGxvY2FsUGF0Y2hlcywgaW5kZXgp
OworICAgICAgICAgICAgaW5kZXggKz0gYU5vZGUuZGVzY2VuZGFudHNDb3VudCB8fCAwOworCisg
ICAgICAgICAgICBhSW5kZXgrKzsKKyAgICAgICAgICAgIGJJbmRleCsrOworICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBsb29rIGFoZWFkIDEgdG8gZGV0ZWN0
IGluc2VydGlvbnMgYW5kIHJlbW92YWxzLgorCisgICAgICAgIHZhciBhTG9va0FoZWFkID0gYUlu
ZGV4ICsgMSA8IGFMZW47CisgICAgICAgIHZhciBiTG9va0FoZWFkID0gYkluZGV4ICsgMSA8IGJM
ZW47CisKKyAgICAgICAgaWYgKGFMb29rQWhlYWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZh
ciBhTmV4dCA9IGFDaGlsZHJlblthSW5kZXggKyAxXTsKKyAgICAgICAgICAgIHZhciBhTmV4dEtl
eSA9IGFOZXh0Ll8wOworICAgICAgICAgICAgdmFyIGFOZXh0Tm9kZSA9IGFOZXh0Ll8xOworICAg
ICAgICAgICAgdmFyIG9sZE1hdGNoID0gYktleSA9PT0gYU5leHRLZXk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoYkxvb2tBaGVhZCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGJOZXh0
ID0gYkNoaWxkcmVuW2JJbmRleCArIDFdOworICAgICAgICAgICAgdmFyIGJOZXh0S2V5ID0gYk5l
eHQuXzA7CisgICAgICAgICAgICB2YXIgYk5leHROb2RlID0gYk5leHQuXzE7CisgICAgICAgICAg
ICB2YXIgbmV3TWF0Y2ggPSBhS2V5ID09PSBiTmV4dEtleTsKKyAgICAgICAgfQorCisKKyAgICAg
ICAgLy8gc3dhcCBhIGFuZCBiCisgICAgICAgIGlmIChhTG9va0FoZWFkICYmIGJMb29rQWhlYWQg
JiYgbmV3TWF0Y2ggJiYgb2xkTWF0Y2gpCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZGV4Kys7
CisgICAgICAgICAgICBkaWZmSGVscChhTm9kZSwgYk5leHROb2RlLCBsb2NhbFBhdGNoZXMsIGlu
ZGV4KTsKKyAgICAgICAgICAgIGluc2VydE5vZGUoY2hhbmdlcywgbG9jYWxQYXRjaGVzLCBhS2V5
LCBiTm9kZSwgYkluZGV4LCBpbnNlcnRzKTsKKyAgICAgICAgICAgIGluZGV4ICs9IGFOb2RlLmRl
c2NlbmRhbnRzQ291bnQgfHwgMDsKKworICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgICAg
IHJlbW92ZU5vZGUoY2hhbmdlcywgbG9jYWxQYXRjaGVzLCBhS2V5LCBhTmV4dE5vZGUsIGluZGV4
KTsKKyAgICAgICAgICAgIGluZGV4ICs9IGFOZXh0Tm9kZS5kZXNjZW5kYW50c0NvdW50IHx8IDA7
CisKKyAgICAgICAgICAgIGFJbmRleCArPSAyOworICAgICAgICAgICAgYkluZGV4ICs9IDI7Cisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGluc2VydCBiCisg
ICAgICAgIGlmIChiTG9va0FoZWFkICYmIG5ld01hdGNoKQorICAgICAgICB7CisgICAgICAgICAg
ICBpbmRleCsrOworICAgICAgICAgICAgaW5zZXJ0Tm9kZShjaGFuZ2VzLCBsb2NhbFBhdGNoZXMs
IGJLZXksIGJOb2RlLCBiSW5kZXgsIGluc2VydHMpOworICAgICAgICAgICAgZGlmZkhlbHAoYU5v
ZGUsIGJOZXh0Tm9kZSwgbG9jYWxQYXRjaGVzLCBpbmRleCk7CisgICAgICAgICAgICBpbmRleCAr
PSBhTm9kZS5kZXNjZW5kYW50c0NvdW50IHx8IDA7CisKKyAgICAgICAgICAgIGFJbmRleCArPSAx
OworICAgICAgICAgICAgYkluZGV4ICs9IDI7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIHJlbW92ZSBhCisgICAgICAgIGlmIChhTG9va0FoZWFkICYmIG9s
ZE1hdGNoKQorICAgICAgICB7CisgICAgICAgICAgICBpbmRleCsrOworICAgICAgICAgICAgcmVt
b3ZlTm9kZShjaGFuZ2VzLCBsb2NhbFBhdGNoZXMsIGFLZXksIGFOb2RlLCBpbmRleCk7CisgICAg
ICAgICAgICBpbmRleCArPSBhTm9kZS5kZXNjZW5kYW50c0NvdW50IHx8IDA7CisKKyAgICAgICAg
ICAgIGluZGV4Kys7CisgICAgICAgICAgICBkaWZmSGVscChhTmV4dE5vZGUsIGJOb2RlLCBsb2Nh
bFBhdGNoZXMsIGluZGV4KTsKKyAgICAgICAgICAgIGluZGV4ICs9IGFOZXh0Tm9kZS5kZXNjZW5k
YW50c0NvdW50IHx8IDA7CisKKyAgICAgICAgICAgIGFJbmRleCArPSAyOworICAgICAgICAgICAg
YkluZGV4ICs9IDE7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIHJlbW92ZSBhLCBpbnNlcnQgYgorICAgICAgICBpZiAoYUxvb2tBaGVhZCAmJiBiTG9va0Fo
ZWFkICYmIGFOZXh0S2V5ID09PSBiTmV4dEtleSkKKyAgICAgICAgeworICAgICAgICAgICAgaW5k
ZXgrKzsKKyAgICAgICAgICAgIHJlbW92ZU5vZGUoY2hhbmdlcywgbG9jYWxQYXRjaGVzLCBhS2V5
LCBhTm9kZSwgaW5kZXgpOworICAgICAgICAgICAgaW5zZXJ0Tm9kZShjaGFuZ2VzLCBsb2NhbFBh
dGNoZXMsIGJLZXksIGJOb2RlLCBiSW5kZXgsIGluc2VydHMpOworICAgICAgICAgICAgaW5kZXgg
Kz0gYU5vZGUuZGVzY2VuZGFudHNDb3VudCB8fCAwOworCisgICAgICAgICAgICBpbmRleCsrOwor
ICAgICAgICAgICAgZGlmZkhlbHAoYU5leHROb2RlLCBiTmV4dE5vZGUsIGxvY2FsUGF0Y2hlcywg
aW5kZXgpOworICAgICAgICAgICAgaW5kZXggKz0gYU5leHROb2RlLmRlc2NlbmRhbnRzQ291bnQg
fHwgMDsKKworICAgICAgICAgICAgYUluZGV4ICs9IDI7CisgICAgICAgICAgICBiSW5kZXggKz0g
MjsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgLy8gZWF0IHVwIGFueSByZW1haW5pbmcgbm9kZXMgd2l0aCByZW1vdmVOb2Rl
IGFuZCBpbnNlcnROb2RlCisKKyAgICB3aGlsZSAoYUluZGV4IDwgYUxlbikKKyAgICB7CisgICAg
ICAgIGluZGV4Kys7CisgICAgICAgIHZhciBhID0gYUNoaWxkcmVuW2FJbmRleF07CisgICAgICAg
IHZhciBhTm9kZSA9IGEuXzE7CisgICAgICAgIHJlbW92ZU5vZGUoY2hhbmdlcywgbG9jYWxQYXRj
aGVzLCBhLl8wLCBhTm9kZSwgaW5kZXgpOworICAgICAgICBpbmRleCArPSBhTm9kZS5kZXNjZW5k
YW50c0NvdW50IHx8IDA7CisgICAgICAgIGFJbmRleCsrOworICAgIH0KKworICAgIHZhciBlbmRJ
bnNlcnRzOworICAgIHdoaWxlIChiSW5kZXggPCBiTGVuKQorICAgIHsKKyAgICAgICAgZW5kSW5z
ZXJ0cyA9IGVuZEluc2VydHMgfHwgW107CisgICAgICAgIHZhciBiID0gYkNoaWxkcmVuW2JJbmRl
eF07CisgICAgICAgIGluc2VydE5vZGUoY2hhbmdlcywgbG9jYWxQYXRjaGVzLCBiLl8wLCBiLl8x
LCB1bmRlZmluZWQsIGVuZEluc2VydHMpOworICAgICAgICBiSW5kZXgrKzsKKyAgICB9CisKKyAg
ICBpZiAobG9jYWxQYXRjaGVzLmxlbmd0aCA+IDAgfHwgaW5zZXJ0cy5sZW5ndGggPiAwIHx8IHR5
cGVvZiBlbmRJbnNlcnRzICE9PSAndW5kZWZpbmVkJykKKyAgICB7CisgICAgICAgIHBhdGNoZXMu
cHVzaChtYWtlUGF0Y2goJ3AtcmVvcmRlcicsIHJvb3RJbmRleCwgeworICAgICAgICAgICAgcGF0
Y2hlczogbG9jYWxQYXRjaGVzLAorICAgICAgICAgICAgaW5zZXJ0czogaW5zZXJ0cywKKyAgICAg
ICAgICAgIGVuZEluc2VydHM6IGVuZEluc2VydHMKKyAgICAgICAgfSkpOworICAgIH0KK30KKwor
CisKKy8vLy8vLy8vLy8vLyAgQ0hBTkdFUyBGUk9NIEtFWUVEIERJRkYgIC8vLy8vLy8vLy8vLwor
CisKK3ZhciBQT1NURklYID0gJ19lbG1XNkJMJzsKKworCitmdW5jdGlvbiBpbnNlcnROb2RlKGNo
YW5nZXMsIGxvY2FsUGF0Y2hlcywga2V5LCB2bm9kZSwgYkluZGV4LCBpbnNlcnRzKQoreworICAg
IHZhciBlbnRyeSA9IGNoYW5nZXNba2V5XTsKKworICAgIC8vIG5ldmVyIHNlZW4gdGhpcyBrZXkg
YmVmb3JlCisgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3VuZGVmaW5lZCcpCisgICAgeworICAg
ICAgICBlbnRyeSA9IHsKKyAgICAgICAgICAgIHRhZzogJ2luc2VydCcsCisgICAgICAgICAgICB2
bm9kZTogdm5vZGUsCisgICAgICAgICAgICBpbmRleDogYkluZGV4LAorICAgICAgICAgICAgZGF0
YTogdW5kZWZpbmVkCisgICAgICAgIH07CisKKyAgICAgICAgaW5zZXJ0cy5wdXNoKHsgaW5kZXg6
IGJJbmRleCwgZW50cnk6IGVudHJ5IH0pOworICAgICAgICBjaGFuZ2VzW2tleV0gPSBlbnRyeTsK
KworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gdGhpcyBrZXkgd2FzIHJlbW92ZWQg
ZWFybGllciwgYSBtYXRjaCEKKyAgICBpZiAoZW50cnkudGFnID09PSAncmVtb3ZlJykKKyAgICB7
CisgICAgICAgIGluc2VydHMucHVzaCh7IGluZGV4OiBiSW5kZXgsIGVudHJ5OiBlbnRyeSB9KTsK
KworICAgICAgICBlbnRyeS50YWcgPSAnbW92ZSc7CisgICAgICAgIHZhciBzdWJQYXRjaGVzID0g
W107CisgICAgICAgIGRpZmZIZWxwKGVudHJ5LnZub2RlLCB2bm9kZSwgc3ViUGF0Y2hlcywgZW50
cnkuaW5kZXgpOworICAgICAgICBlbnRyeS5pbmRleCA9IGJJbmRleDsKKyAgICAgICAgZW50cnku
ZGF0YS5kYXRhID0geworICAgICAgICAgICAgcGF0Y2hlczogc3ViUGF0Y2hlcywKKyAgICAgICAg
ICAgIGVudHJ5OiBlbnRyeQorICAgICAgICB9OworCisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAvLyB0aGlzIGtleSBoYXMgYWxyZWFkeSBiZWVuIGluc2VydGVkIG9yIG1vdmVkLCBhIGR1
cGxpY2F0ZSEKKyAgICBpbnNlcnROb2RlKGNoYW5nZXMsIGxvY2FsUGF0Y2hlcywga2V5ICsgUE9T
VEZJWCwgdm5vZGUsIGJJbmRleCwgaW5zZXJ0cyk7Cit9CisKKworZnVuY3Rpb24gcmVtb3ZlTm9k
ZShjaGFuZ2VzLCBsb2NhbFBhdGNoZXMsIGtleSwgdm5vZGUsIGluZGV4KQoreworICAgIHZhciBl
bnRyeSA9IGNoYW5nZXNba2V5XTsKKworICAgIC8vIG5ldmVyIHNlZW4gdGhpcyBrZXkgYmVmb3Jl
CisgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3VuZGVmaW5lZCcpCisgICAgeworICAgICAgICB2
YXIgcGF0Y2ggPSBtYWtlUGF0Y2goJ3AtcmVtb3ZlJywgaW5kZXgsIHVuZGVmaW5lZCk7CisgICAg
ICAgIGxvY2FsUGF0Y2hlcy5wdXNoKHBhdGNoKTsKKworICAgICAgICBjaGFuZ2VzW2tleV0gPSB7
CisgICAgICAgICAgICB0YWc6ICdyZW1vdmUnLAorICAgICAgICAgICAgdm5vZGU6IHZub2RlLAor
ICAgICAgICAgICAgaW5kZXg6IGluZGV4LAorICAgICAgICAgICAgZGF0YTogcGF0Y2gKKyAgICAg
ICAgfTsKKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gdGhpcyBrZXkgd2FzIGlu
c2VydGVkIGVhcmxpZXIsIGEgbWF0Y2ghCisgICAgaWYgKGVudHJ5LnRhZyA9PT0gJ2luc2VydCcp
CisgICAgeworICAgICAgICBlbnRyeS50YWcgPSAnbW92ZSc7CisgICAgICAgIHZhciBzdWJQYXRj
aGVzID0gW107CisgICAgICAgIGRpZmZIZWxwKHZub2RlLCBlbnRyeS52bm9kZSwgc3ViUGF0Y2hl
cywgaW5kZXgpOworCisgICAgICAgIHZhciBwYXRjaCA9IG1ha2VQYXRjaCgncC1yZW1vdmUnLCBp
bmRleCwgeworICAgICAgICAgICAgcGF0Y2hlczogc3ViUGF0Y2hlcywKKyAgICAgICAgICAgIGVu
dHJ5OiBlbnRyeQorICAgICAgICB9KTsKKyAgICAgICAgbG9jYWxQYXRjaGVzLnB1c2gocGF0Y2gp
OworCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyB0aGlzIGtleSBoYXMgYWxyZWFk
eSBiZWVuIHJlbW92ZWQgb3IgbW92ZWQsIGEgZHVwbGljYXRlIQorICAgIHJlbW92ZU5vZGUoY2hh
bmdlcywgbG9jYWxQYXRjaGVzLCBrZXkgKyBQT1NURklYLCB2bm9kZSwgaW5kZXgpOworfQorCisK
KworLy8vLy8vLy8vLy8vICBBREQgRE9NIE5PREVTICAvLy8vLy8vLy8vLy8KKy8vCisvLyBFYWNo
IERPTSBub2RlIGhhcyBhbiAiaW5kZXgiIGFzc2lnbmVkIGluIG9yZGVyIG9mIHRyYXZlcnNhbC4g
SXQgaXMgaW1wb3J0YW50CisvLyB0byBtaW5pbWl6ZSBvdXIgY3Jhd2wgb3ZlciB0aGUgYWN0dWFs
IERPTSwgc28gdGhlc2UgaW5kZXhlcyAoYWxvbmcgd2l0aCB0aGUKKy8vIGRlc2NlbmRhbnRzQ291
bnQgb2YgdmlydHVhbCBub2RlcykgbGV0IHVzIHNraXAgdG91Y2hpbmcgZW50aXJlIHN1YnRyZWVz
IG9mCisvLyB0aGUgRE9NIGlmIHdlIGtub3cgdGhlcmUgYXJlIG5vIHBhdGNoZXMgdGhlcmUuCisK
KworZnVuY3Rpb24gYWRkRG9tTm9kZXMoZG9tTm9kZSwgdk5vZGUsIHBhdGNoZXMsIGV2ZW50Tm9k
ZSkKK3sKKyAgICBhZGREb21Ob2Rlc0hlbHAoZG9tTm9kZSwgdk5vZGUsIHBhdGNoZXMsIDAsIDAs
IHZOb2RlLmRlc2NlbmRhbnRzQ291bnQsIGV2ZW50Tm9kZSk7Cit9CisKKworLy8gYXNzdW1lcyBg
cGF0Y2hlc2AgaXMgbm9uLWVtcHR5IGFuZCBpbmRleGVzIGluY3JlYXNlIG1vbm90b25pY2FsbHku
CitmdW5jdGlvbiBhZGREb21Ob2Rlc0hlbHAoZG9tTm9kZSwgdk5vZGUsIHBhdGNoZXMsIGksIGxv
dywgaGlnaCwgZXZlbnROb2RlKQoreworICAgIHZhciBwYXRjaCA9IHBhdGNoZXNbaV07CisgICAg
dmFyIGluZGV4ID0gcGF0Y2guaW5kZXg7CisKKyAgICB3aGlsZSAoaW5kZXggPT09IGxvdykKKyAg
ICB7CisgICAgICAgIHZhciBwYXRjaFR5cGUgPSBwYXRjaC50eXBlOworCisgICAgICAgIGlmIChw
YXRjaFR5cGUgPT09ICdwLXRodW5rJykKKyAgICAgICAgeworICAgICAgICAgICAgYWRkRG9tTm9k
ZXMoZG9tTm9kZSwgdk5vZGUubm9kZSwgcGF0Y2guZGF0YSwgZXZlbnROb2RlKTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIGlmIChwYXRjaFR5cGUgPT09ICdwLXJlb3JkZXInKQorICAgICAgICB7
CisgICAgICAgICAgICBwYXRjaC5kb21Ob2RlID0gZG9tTm9kZTsKKyAgICAgICAgICAgIHBhdGNo
LmV2ZW50Tm9kZSA9IGV2ZW50Tm9kZTsKKworICAgICAgICAgICAgdmFyIHN1YlBhdGNoZXMgPSBw
YXRjaC5kYXRhLnBhdGNoZXM7CisgICAgICAgICAgICBpZiAoc3ViUGF0Y2hlcy5sZW5ndGggPiAw
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFkZERvbU5vZGVzSGVscChkb21Ob2Rl
LCB2Tm9kZSwgc3ViUGF0Y2hlcywgMCwgbG93LCBoaWdoLCBldmVudE5vZGUpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHBhdGNoVHlwZSA9PT0gJ3AtcmVtb3Zl
JykKKyAgICAgICAgeworICAgICAgICAgICAgcGF0Y2guZG9tTm9kZSA9IGRvbU5vZGU7CisgICAg
ICAgICAgICBwYXRjaC5ldmVudE5vZGUgPSBldmVudE5vZGU7CisKKyAgICAgICAgICAgIHZhciBk
YXRhID0gcGF0Y2guZGF0YTsKKyAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YSAhPT0gJ3VuZGVm
aW5lZCcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGF0YS5lbnRyeS5kYXRhID0g
ZG9tTm9kZTsKKyAgICAgICAgICAgICAgICB2YXIgc3ViUGF0Y2hlcyA9IGRhdGEucGF0Y2hlczsK
KyAgICAgICAgICAgICAgICBpZiAoc3ViUGF0Y2hlcy5sZW5ndGggPiAwKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYWRkRG9tTm9kZXNIZWxwKGRvbU5vZGUsIHZOb2Rl
LCBzdWJQYXRjaGVzLCAwLCBsb3csIGhpZ2gsIGV2ZW50Tm9kZSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAg
ICAgICAgICAgcGF0Y2guZG9tTm9kZSA9IGRvbU5vZGU7CisgICAgICAgICAgICBwYXRjaC5ldmVu
dE5vZGUgPSBldmVudE5vZGU7CisgICAgICAgIH0KKworICAgICAgICBpKys7CisKKyAgICAgICAg
aWYgKCEocGF0Y2ggPSBwYXRjaGVzW2ldKSB8fCAoaW5kZXggPSBwYXRjaC5pbmRleCkgPiBoaWdo
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHN3aXRjaCAodk5vZGUudHlwZSkKKyAgICB7CisgICAgICAgIGNhc2UgJ3RhZ2dlcic6Cisg
ICAgICAgICAgICB2YXIgc3ViTm9kZSA9IHZOb2RlLm5vZGU7CisKKyAgICAgICAgICAgIHdoaWxl
IChzdWJOb2RlLnR5cGUgPT09ICJ0YWdnZXIiKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHN1Yk5vZGUgPSBzdWJOb2RlLm5vZGU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHJldHVybiBhZGREb21Ob2Rlc0hlbHAoZG9tTm9kZSwgc3ViTm9kZSwgcGF0Y2hlcywgaSwgbG93
ICsgMSwgaGlnaCwgZG9tTm9kZS5lbG1fZXZlbnRfbm9kZV9yZWYpOworCisgICAgICAgIGNhc2Ug
J25vZGUnOgorICAgICAgICAgICAgdmFyIHZDaGlsZHJlbiA9IHZOb2RlLmNoaWxkcmVuOworICAg
ICAgICAgICAgdmFyIGNoaWxkTm9kZXMgPSBkb21Ob2RlLmNoaWxkTm9kZXM7CisgICAgICAgICAg
ICBmb3IgKHZhciBqID0gMDsgaiA8IHZDaGlsZHJlbi5sZW5ndGg7IGorKykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBsb3crKzsKKyAgICAgICAgICAgICAgICB2YXIgdkNoaWxkID0g
dkNoaWxkcmVuW2pdOworICAgICAgICAgICAgICAgIHZhciBuZXh0TG93ID0gbG93ICsgKHZDaGls
ZC5kZXNjZW5kYW50c0NvdW50IHx8IDApOworICAgICAgICAgICAgICAgIGlmIChsb3cgPD0gaW5k
ZXggJiYgaW5kZXggPD0gbmV4dExvdykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIGkgPSBhZGREb21Ob2Rlc0hlbHAoY2hpbGROb2Rlc1tqXSwgdkNoaWxkLCBwYXRjaGVz
LCBpLCBsb3csIG5leHRMb3csIGV2ZW50Tm9kZSk7CisgICAgICAgICAgICAgICAgICAgIGlmICgh
KHBhdGNoID0gcGF0Y2hlc1tpXSkgfHwgKGluZGV4ID0gcGF0Y2guaW5kZXgpID4gaGlnaCkKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
bG93ID0gbmV4dExvdzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBpOworCisg
ICAgICAgIGNhc2UgJ2tleWVkLW5vZGUnOgorICAgICAgICAgICAgdmFyIHZDaGlsZHJlbiA9IHZO
b2RlLmNoaWxkcmVuOworICAgICAgICAgICAgdmFyIGNoaWxkTm9kZXMgPSBkb21Ob2RlLmNoaWxk
Tm9kZXM7CisgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZDaGlsZHJlbi5sZW5ndGg7
IGorKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsb3crKzsKKyAgICAgICAgICAg
ICAgICB2YXIgdkNoaWxkID0gdkNoaWxkcmVuW2pdLl8xOworICAgICAgICAgICAgICAgIHZhciBu
ZXh0TG93ID0gbG93ICsgKHZDaGlsZC5kZXNjZW5kYW50c0NvdW50IHx8IDApOworICAgICAgICAg
ICAgICAgIGlmIChsb3cgPD0gaW5kZXggJiYgaW5kZXggPD0gbmV4dExvdykKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIGkgPSBhZGREb21Ob2Rlc0hlbHAoY2hpbGROb2Rl
c1tqXSwgdkNoaWxkLCBwYXRjaGVzLCBpLCBsb3csIG5leHRMb3csIGV2ZW50Tm9kZSk7CisgICAg
ICAgICAgICAgICAgICAgIGlmICghKHBhdGNoID0gcGF0Y2hlc1tpXSkgfHwgKGluZGV4ID0gcGF0
Y2guaW5kZXgpID4gaGlnaCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgbG93ID0gbmV4dExvdzsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiBpOworCisgICAgICAgIGNhc2UgJ3RleHQnOgorICAgICAgICBjYXNlICd0
aHVuayc6CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Nob3VsZCBuZXZlciB0cmF2ZXJz
ZSBgdGV4dGAgb3IgYHRodW5rYCBub2RlcyBsaWtlIHRoaXMnKTsKKyAgICB9Cit9CisKKworCisv
Ly8vLy8vLy8vLy8gIEFQUExZIFBBVENIRVMgIC8vLy8vLy8vLy8vLworCisKK2Z1bmN0aW9uIGFw
cGx5UGF0Y2hlcyhyb290RG9tTm9kZSwgb2xkVmlydHVhbE5vZGUsIHBhdGNoZXMsIGV2ZW50Tm9k
ZSkKK3sKKyAgICBpZiAocGF0Y2hlcy5sZW5ndGggPT09IDApCisgICAgeworICAgICAgICByZXR1
cm4gcm9vdERvbU5vZGU7CisgICAgfQorCisgICAgYWRkRG9tTm9kZXMocm9vdERvbU5vZGUsIG9s
ZFZpcnR1YWxOb2RlLCBwYXRjaGVzLCBldmVudE5vZGUpOworICAgIHJldHVybiBhcHBseVBhdGNo
ZXNIZWxwKHJvb3REb21Ob2RlLCBwYXRjaGVzKTsKK30KKworZnVuY3Rpb24gYXBwbHlQYXRjaGVz
SGVscChyb290RG9tTm9kZSwgcGF0Y2hlcykKK3sKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBh
dGNoZXMubGVuZ3RoOyBpKyspCisgICAgeworICAgICAgICB2YXIgcGF0Y2ggPSBwYXRjaGVzW2ld
OworICAgICAgICB2YXIgbG9jYWxEb21Ob2RlID0gcGF0Y2guZG9tTm9kZQorICAgICAgICB2YXIg
bmV3Tm9kZSA9IGFwcGx5UGF0Y2gobG9jYWxEb21Ob2RlLCBwYXRjaCk7CisgICAgICAgIGlmIChs
b2NhbERvbU5vZGUgPT09IHJvb3REb21Ob2RlKQorICAgICAgICB7CisgICAgICAgICAgICByb290
RG9tTm9kZSA9IG5ld05vZGU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJvb3REb21O
b2RlOworfQorCitmdW5jdGlvbiBhcHBseVBhdGNoKGRvbU5vZGUsIHBhdGNoKQoreworICAgIHN3
aXRjaCAocGF0Y2gudHlwZSkKKyAgICB7CisgICAgICAgIGNhc2UgJ3AtcmVkcmF3JzoKKyAgICAg
ICAgICAgIHJldHVybiBhcHBseVBhdGNoUmVkcmF3KGRvbU5vZGUsIHBhdGNoLmRhdGEsIHBhdGNo
LmV2ZW50Tm9kZSk7CisKKyAgICAgICAgY2FzZSAncC1mYWN0cyc6CisgICAgICAgICAgICBhcHBs
eUZhY3RzKGRvbU5vZGUsIHBhdGNoLmV2ZW50Tm9kZSwgcGF0Y2guZGF0YSk7CisgICAgICAgICAg
ICByZXR1cm4gZG9tTm9kZTsKKworICAgICAgICBjYXNlICdwLXRleHQnOgorICAgICAgICAgICAg
ZG9tTm9kZS5yZXBsYWNlRGF0YSgwLCBkb21Ob2RlLmxlbmd0aCwgcGF0Y2guZGF0YSk7CisgICAg
ICAgICAgICByZXR1cm4gZG9tTm9kZTsKKworICAgICAgICBjYXNlICdwLXRodW5rJzoKKyAgICAg
ICAgICAgIHJldHVybiBhcHBseVBhdGNoZXNIZWxwKGRvbU5vZGUsIHBhdGNoLmRhdGEpOworCisg
ICAgICAgIGNhc2UgJ3AtdGFnZ2VyJzoKKyAgICAgICAgICAgIGRvbU5vZGUuZWxtX2V2ZW50X25v
ZGVfcmVmLnRhZ2dlciA9IHBhdGNoLmRhdGE7CisgICAgICAgICAgICByZXR1cm4gZG9tTm9kZTsK
KworICAgICAgICBjYXNlICdwLXJlbW92ZS1sYXN0JzoKKyAgICAgICAgICAgIHZhciBpID0gcGF0
Y2guZGF0YTsKKyAgICAgICAgICAgIHdoaWxlIChpLS0pCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgZG9tTm9kZS5yZW1vdmVDaGlsZChkb21Ob2RlLmxhc3RDaGlsZCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4gZG9tTm9kZTsKKworICAgICAgICBjYXNlICdwLWFw
cGVuZCc6CisgICAgICAgICAgICB2YXIgbmV3Tm9kZXMgPSBwYXRjaC5kYXRhOworICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdOb2Rlcy5sZW5ndGg7IGkrKykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBkb21Ob2RlLmFwcGVuZENoaWxkKHJlbmRlcihuZXdOb2Rlc1tp
XSwgcGF0Y2guZXZlbnROb2RlKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
ZG9tTm9kZTsKKworICAgICAgICBjYXNlICdwLXJlbW92ZSc6CisgICAgICAgICAgICB2YXIgZGF0
YSA9IHBhdGNoLmRhdGE7CisgICAgICAgICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICd1bmRlZmlu
ZWQnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRvbU5vZGUucGFyZW50Tm9kZS5y
ZW1vdmVDaGlsZChkb21Ob2RlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZG9tTm9kZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBlbnRyeSA9IGRhdGEuZW50cnk7CisgICAgICAg
ICAgICBpZiAodHlwZW9mIGVudHJ5LmluZGV4ICE9PSAndW5kZWZpbmVkJykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBkb21Ob2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZG9tTm9k
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbnRyeS5kYXRhID0gYXBwbHlQYXRjaGVz
SGVscChkb21Ob2RlLCBkYXRhLnBhdGNoZXMpOworICAgICAgICAgICAgcmV0dXJuIGRvbU5vZGU7
CisKKyAgICAgICAgY2FzZSAncC1yZW9yZGVyJzoKKyAgICAgICAgICAgIHJldHVybiBhcHBseVBh
dGNoUmVvcmRlcihkb21Ob2RlLCBwYXRjaCk7CisKKyAgICAgICAgY2FzZSAncC1jdXN0b20nOgor
ICAgICAgICAgICAgdmFyIGltcGwgPSBwYXRjaC5kYXRhOworICAgICAgICAgICAgcmV0dXJuIGlt
cGwuYXBwbHlQYXRjaChkb21Ob2RlLCBpbXBsLmRhdGEpOworCisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JhbiBpbnRvIGFuIHVua25vd24gcGF0Y2ghJyk7
CisgICAgfQorfQorCisKK2Z1bmN0aW9uIGFwcGx5UGF0Y2hSZWRyYXcoZG9tTm9kZSwgdk5vZGUs
IGV2ZW50Tm9kZSkKK3sKKyAgICB2YXIgcGFyZW50Tm9kZSA9IGRvbU5vZGUucGFyZW50Tm9kZTsK
KyAgICB2YXIgbmV3Tm9kZSA9IHJlbmRlcih2Tm9kZSwgZXZlbnROb2RlKTsKKworICAgIGlmICh0
eXBlb2YgbmV3Tm9kZS5lbG1fZXZlbnRfbm9kZV9yZWYgPT09ICd1bmRlZmluZWQnKQorICAgIHsK
KyAgICAgICAgbmV3Tm9kZS5lbG1fZXZlbnRfbm9kZV9yZWYgPSBkb21Ob2RlLmVsbV9ldmVudF9u
b2RlX3JlZjsKKyAgICB9CisKKyAgICBpZiAocGFyZW50Tm9kZSAmJiBuZXdOb2RlICE9PSBkb21O
b2RlKQorICAgIHsKKyAgICAgICAgcGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobmV3Tm9kZSwgZG9t
Tm9kZSk7CisgICAgfQorICAgIHJldHVybiBuZXdOb2RlOworfQorCisKK2Z1bmN0aW9uIGFwcGx5
UGF0Y2hSZW9yZGVyKGRvbU5vZGUsIHBhdGNoKQoreworICAgIHZhciBkYXRhID0gcGF0Y2guZGF0
YTsKKworICAgIC8vIHJlbW92ZSBlbmQgaW5zZXJ0cworICAgIHZhciBmcmFnID0gYXBwbHlQYXRj
aFJlb3JkZXJFbmRJbnNlcnRzSGVscChkYXRhLmVuZEluc2VydHMsIHBhdGNoKTsKKworICAgIC8v
IHJlbW92YWxzCisgICAgZG9tTm9kZSA9IGFwcGx5UGF0Y2hlc0hlbHAoZG9tTm9kZSwgZGF0YS5w
YXRjaGVzKTsKKworICAgIC8vIGluc2VydHMKKyAgICB2YXIgaW5zZXJ0cyA9IGRhdGEuaW5zZXJ0
czsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluc2VydHMubGVuZ3RoOyBpKyspCisgICAgewor
ICAgICAgICB2YXIgaW5zZXJ0ID0gaW5zZXJ0c1tpXTsKKyAgICAgICAgdmFyIGVudHJ5ID0gaW5z
ZXJ0LmVudHJ5OworICAgICAgICB2YXIgbm9kZSA9IGVudHJ5LnRhZyA9PT0gJ21vdmUnCisgICAg
ICAgICAgICA/IGVudHJ5LmRhdGEKKyAgICAgICAgICAgIDogcmVuZGVyKGVudHJ5LnZub2RlLCBw
YXRjaC5ldmVudE5vZGUpOworICAgICAgICBkb21Ob2RlLmluc2VydEJlZm9yZShub2RlLCBkb21O
b2RlLmNoaWxkTm9kZXNbaW5zZXJ0LmluZGV4XSk7CisgICAgfQorCisgICAgLy8gYWRkIGVuZCBp
bnNlcnRzCisgICAgaWYgKHR5cGVvZiBmcmFnICE9PSAndW5kZWZpbmVkJykKKyAgICB7CisgICAg
ICAgIGRvbU5vZGUuYXBwZW5kQ2hpbGQoZnJhZyk7CisgICAgfQorCisgICAgcmV0dXJuIGRvbU5v
ZGU7Cit9CisKKworZnVuY3Rpb24gYXBwbHlQYXRjaFJlb3JkZXJFbmRJbnNlcnRzSGVscChlbmRJ
bnNlcnRzLCBwYXRjaCkKK3sKKyAgICBpZiAodHlwZW9mIGVuZEluc2VydHMgPT09ICd1bmRlZmlu
ZWQnKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZhciBmcmFnID0gZG9j
dW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
ZW5kSW5zZXJ0cy5sZW5ndGg7IGkrKykKKyAgICB7CisgICAgICAgIHZhciBpbnNlcnQgPSBlbmRJ
bnNlcnRzW2ldOworICAgICAgICB2YXIgZW50cnkgPSBpbnNlcnQuZW50cnk7CisgICAgICAgIGZy
YWcuYXBwZW5kQ2hpbGQoZW50cnkudGFnID09PSAnbW92ZScKKyAgICAgICAgICAgID8gZW50cnku
ZGF0YQorICAgICAgICAgICAgOiByZW5kZXIoZW50cnkudm5vZGUsIHBhdGNoLmV2ZW50Tm9kZSkK
KyAgICAgICAgKTsKKyAgICB9CisgICAgcmV0dXJuIGZyYWc7Cit9CisKKworCisvLy8vLy8vLy8v
Ly8gIFBST0dSQU1TICAvLy8vLy8vLy8vLy8KKworCitmdW5jdGlvbiBwcm9ncmFtV2l0aEZsYWdz
KGRldGFpbHMpCit7CisgICAgcmV0dXJuIHsKKyAgICAgICAgaW5pdDogZGV0YWlscy5pbml0LAor
ICAgICAgICB1cGRhdGU6IGRldGFpbHMudXBkYXRlLAorICAgICAgICBzdWJzY3JpcHRpb25zOiBk
ZXRhaWxzLnN1YnNjcmlwdGlvbnMsCisgICAgICAgIHZpZXc6IGRldGFpbHMudmlldywKKyAgICAg
ICAgcmVuZGVyZXI6IHJlbmRlcmVyCisgICAgfTsKK30KKworCityZXR1cm4geworICAgIG5vZGU6
IG5vZGUsCisgICAgdGV4dDogdGV4dCwKKworICAgIGN1c3RvbTogY3VzdG9tLAorCisgICAgbWFw
OiBGMihtYXApLAorCisgICAgb246IEYzKG9uKSwKKyAgICBzdHlsZTogc3R5bGUsCisgICAgcHJv
cGVydHk6IEYyKHByb3BlcnR5KSwKKyAgICBhdHRyaWJ1dGU6IEYyKGF0dHJpYnV0ZSksCisgICAg
YXR0cmlidXRlTlM6IEYzKGF0dHJpYnV0ZU5TKSwKKworICAgIGxhenk6IEYyKGxhenkpLAorICAg
IGxhenkyOiBGMyhsYXp5MiksCisgICAgbGF6eTM6IEY0KGxhenkzKSwKKyAgICBrZXllZE5vZGU6
IEYzKGtleWVkTm9kZSksCisKKyAgICBwcm9ncmFtV2l0aEZsYWdzOiBwcm9ncmFtV2l0aEZsYWdz
Cit9OworCit9KCk7Cit2YXIgX2VsbV9sYW5nJHZpcnR1YWxfZG9tJFZpcnR1YWxEb20kcHJvZ3Jh
bVdpdGhGbGFncyA9IF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSROYXRpdmVfVmlydHVhbERvbS5wcm9n
cmFtV2l0aEZsYWdzOwordmFyIF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSRWaXJ0dWFsRG9tJGtleWVk
Tm9kZSA9IF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSROYXRpdmVfVmlydHVhbERvbS5rZXllZE5vZGU7
Cit2YXIgX2VsbV9sYW5nJHZpcnR1YWxfZG9tJFZpcnR1YWxEb20kbGF6eTMgPSBfZWxtX2xhbmck
dmlydHVhbF9kb20kTmF0aXZlX1ZpcnR1YWxEb20ubGF6eTM7Cit2YXIgX2VsbV9sYW5nJHZpcnR1
YWxfZG9tJFZpcnR1YWxEb20kbGF6eTIgPSBfZWxtX2xhbmckdmlydHVhbF9kb20kTmF0aXZlX1Zp
cnR1YWxEb20ubGF6eTI7Cit2YXIgX2VsbV9sYW5nJHZpcnR1YWxfZG9tJFZpcnR1YWxEb20kbGF6
eSA9IF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSROYXRpdmVfVmlydHVhbERvbS5sYXp5OwordmFyIF9l
bG1fbGFuZyR2aXJ0dWFsX2RvbSRWaXJ0dWFsRG9tJGRlZmF1bHRPcHRpb25zID0ge3N0b3BQcm9w
YWdhdGlvbjogZmFsc2UsIHByZXZlbnREZWZhdWx0OiBmYWxzZX07Cit2YXIgX2VsbV9sYW5nJHZp
cnR1YWxfZG9tJFZpcnR1YWxEb20kb25XaXRoT3B0aW9ucyA9IF9lbG1fbGFuZyR2aXJ0dWFsX2Rv
bSROYXRpdmVfVmlydHVhbERvbS5vbjsKK3ZhciBfZWxtX2xhbmckdmlydHVhbF9kb20kVmlydHVh
bERvbSRvbiA9IEYyKAorICAgIGZ1bmN0aW9uIChldmVudE5hbWUsIGRlY29kZXIpIHsKKyAgICAg
ICAgcmV0dXJuIEEzKF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSRWaXJ0dWFsRG9tJG9uV2l0aE9wdGlv
bnMsIGV2ZW50TmFtZSwgX2VsbV9sYW5nJHZpcnR1YWxfZG9tJFZpcnR1YWxEb20kZGVmYXVsdE9w
dGlvbnMsIGRlY29kZXIpOworICAgIH0pOwordmFyIF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSRWaXJ0
dWFsRG9tJHN0eWxlID0gX2VsbV9sYW5nJHZpcnR1YWxfZG9tJE5hdGl2ZV9WaXJ0dWFsRG9tLnN0
eWxlOwordmFyIF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSRWaXJ0dWFsRG9tJGF0dHJpYnV0ZU5TID0g
X2VsbV9sYW5nJHZpcnR1YWxfZG9tJE5hdGl2ZV9WaXJ0dWFsRG9tLmF0dHJpYnV0ZU5TOwordmFy
IF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSRWaXJ0dWFsRG9tJGF0dHJpYnV0ZSA9IF9lbG1fbGFuZyR2
aXJ0dWFsX2RvbSROYXRpdmVfVmlydHVhbERvbS5hdHRyaWJ1dGU7Cit2YXIgX2VsbV9sYW5nJHZp
cnR1YWxfZG9tJFZpcnR1YWxEb20kcHJvcGVydHkgPSBfZWxtX2xhbmckdmlydHVhbF9kb20kTmF0
aXZlX1ZpcnR1YWxEb20ucHJvcGVydHk7Cit2YXIgX2VsbV9sYW5nJHZpcnR1YWxfZG9tJFZpcnR1
YWxEb20kbWFwID0gX2VsbV9sYW5nJHZpcnR1YWxfZG9tJE5hdGl2ZV9WaXJ0dWFsRG9tLm1hcDsK
K3ZhciBfZWxtX2xhbmckdmlydHVhbF9kb20kVmlydHVhbERvbSR0ZXh0ID0gX2VsbV9sYW5nJHZp
cnR1YWxfZG9tJE5hdGl2ZV9WaXJ0dWFsRG9tLnRleHQ7Cit2YXIgX2VsbV9sYW5nJHZpcnR1YWxf
ZG9tJFZpcnR1YWxEb20kbm9kZSA9IF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSROYXRpdmVfVmlydHVh
bERvbS5ub2RlOwordmFyIF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSRWaXJ0dWFsRG9tJE9wdGlvbnMg
PSBGMigKKyAgICBmdW5jdGlvbiAoYSwgYikgeworICAgICAgICByZXR1cm4ge3N0b3BQcm9wYWdh
dGlvbjogYSwgcHJldmVudERlZmF1bHQ6IGJ9OworICAgIH0pOwordmFyIF9lbG1fbGFuZyR2aXJ0
dWFsX2RvbSRWaXJ0dWFsRG9tJE5vZGUgPSB7Y3RvcjogJ05vZGUnfTsKK3ZhciBfZWxtX2xhbmck
dmlydHVhbF9kb20kVmlydHVhbERvbSRQcm9wZXJ0eSA9IHtjdG9yOiAnUHJvcGVydHknfTsKKwor
dmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkdGV4dCA9IF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSRWaXJ0
dWFsRG9tJHRleHQ7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlID0gX2VsbV9sYW5nJHZp
cnR1YWxfZG9tJFZpcnR1YWxEb20kbm9kZTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGJvZHkg
PSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2JvZHknKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRI
dG1sJHNlY3Rpb24gPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ3NlY3Rpb24nKTsKK3ZhciBf
ZWxtX2xhbmckaHRtbCRIdG1sJG5hdiA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnbmF2Jyk7
Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRhcnRpY2xlID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRu
b2RlKCdhcnRpY2xlJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRhc2lkZSA9IF9lbG1fbGFu
ZyRodG1sJEh0bWwkbm9kZSgnYXNpZGUnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGgxID0g
X2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdoMScpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwk
aDIgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2gyJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwk
SHRtbCRoMyA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnaDMnKTsKK3ZhciBfZWxtX2xhbmck
aHRtbCRIdG1sJGg0ID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdoNCcpOwordmFyIF9lbG1f
bGFuZyRodG1sJEh0bWwkaDUgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2g1Jyk7Cit2YXIg
X2VsbV9sYW5nJGh0bWwkSHRtbCRoNiA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnaDYnKTsK
K3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGhlYWRlciA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9k
ZSgnaGVhZGVyJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRmb290ZXIgPSBfZWxtX2xhbmck
aHRtbCRIdG1sJG5vZGUoJ2Zvb3RlcicpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkYWRkcmVz
cyA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnYWRkcmVzcycpOwordmFyIF9lbG1fbGFuZyRo
dG1sJEh0bWwkbWFpbiQgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ21haW4nKTsKK3ZhciBf
ZWxtX2xhbmckaHRtbCRIdG1sJHAgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ3AnKTsKK3Zh
ciBfZWxtX2xhbmckaHRtbCRIdG1sJGhyID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdocicp
OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkcHJlID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2Rl
KCdwcmUnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGJsb2NrcXVvdGUgPSBfZWxtX2xhbmck
aHRtbCRIdG1sJG5vZGUoJ2Jsb2NrcXVvdGUnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJG9s
ID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdvbCcpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0
bWwkdWwgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ3VsJyk7Cit2YXIgX2VsbV9sYW5nJGh0
bWwkSHRtbCRsaSA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnbGknKTsKK3ZhciBfZWxtX2xh
bmckaHRtbCRIdG1sJGRsID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdkbCcpOwordmFyIF9l
bG1fbGFuZyRodG1sJEh0bWwkZHQgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2R0Jyk7Cit2
YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRkZCA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnZGQn
KTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGZpZ3VyZSA9IF9lbG1fbGFuZyRodG1sJEh0bWwk
bm9kZSgnZmlndXJlJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRmaWdjYXB0aW9uID0gX2Vs
bV9sYW5nJGh0bWwkSHRtbCRub2RlKCdmaWdjYXB0aW9uJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwk
SHRtbCRkaXYgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2RpdicpOwordmFyIF9lbG1fbGFu
ZyRodG1sJEh0bWwkYSA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnYScpOwordmFyIF9lbG1f
bGFuZyRodG1sJEh0bWwkZW0gPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2VtJyk7Cit2YXIg
X2VsbV9sYW5nJGh0bWwkSHRtbCRzdHJvbmcgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ3N0
cm9uZycpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkc21hbGwgPSBfZWxtX2xhbmckaHRtbCRI
dG1sJG5vZGUoJ3NtYWxsJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRzID0gX2VsbV9sYW5n
JGh0bWwkSHRtbCRub2RlKCdzJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRjaXRlID0gX2Vs
bV9sYW5nJGh0bWwkSHRtbCRub2RlKCdjaXRlJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRx
ID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdxJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRt
bCRkZm4gPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2RmbicpOwordmFyIF9lbG1fbGFuZyRo
dG1sJEh0bWwkYWJiciA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnYWJicicpOwordmFyIF9l
bG1fbGFuZyRodG1sJEh0bWwkdGltZSA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgndGltZScp
OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkY29kZSA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9k
ZSgnY29kZScpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkdmFyID0gX2VsbV9sYW5nJGh0bWwk
SHRtbCRub2RlKCd2YXInKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJHNhbXAgPSBfZWxtX2xh
bmckaHRtbCRIdG1sJG5vZGUoJ3NhbXAnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGtiZCA9
IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgna2JkJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRt
bCRzdWIgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ3N1YicpOwordmFyIF9lbG1fbGFuZyRo
dG1sJEh0bWwkc3VwID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdzdXAnKTsKK3ZhciBfZWxt
X2xhbmckaHRtbCRIdG1sJGkgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2knKTsKK3ZhciBf
ZWxtX2xhbmckaHRtbCRIdG1sJGIgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2InKTsKK3Zh
ciBfZWxtX2xhbmckaHRtbCRIdG1sJHUgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ3UnKTsK
K3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJG1hcmsgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUo
J21hcmsnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJHJ1YnkgPSBfZWxtX2xhbmckaHRtbCRI
dG1sJG5vZGUoJ3J1YnknKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJHJ0ID0gX2VsbV9sYW5n
JGh0bWwkSHRtbCRub2RlKCdydCcpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkcnAgPSBfZWxt
X2xhbmckaHRtbCRIdG1sJG5vZGUoJ3JwJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRiZGkg
PSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2JkaScpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0
bWwkYmRvID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdiZG8nKTsKK3ZhciBfZWxtX2xhbmck
aHRtbCRIdG1sJHNwYW4gPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ3NwYW4nKTsKK3ZhciBf
ZWxtX2xhbmckaHRtbCRIdG1sJGJyID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdicicpOwor
dmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkd2JyID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCd3
YnInKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGlucyA9IF9lbG1fbGFuZyRodG1sJEh0bWwk
bm9kZSgnaW5zJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRkZWwgPSBfZWxtX2xhbmckaHRt
bCRIdG1sJG5vZGUoJ2RlbCcpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkaW1nID0gX2VsbV9s
YW5nJGh0bWwkSHRtbCRub2RlKCdpbWcnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGlmcmFt
ZSA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnaWZyYW1lJyk7Cit2YXIgX2VsbV9sYW5nJGh0
bWwkSHRtbCRlbWJlZCA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnZW1iZWQnKTsKK3ZhciBf
ZWxtX2xhbmckaHRtbCRIdG1sJG9iamVjdCA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnb2Jq
ZWN0Jyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRwYXJhbSA9IF9lbG1fbGFuZyRodG1sJEh0
bWwkbm9kZSgncGFyYW0nKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJHZpZGVvID0gX2VsbV9s
YW5nJGh0bWwkSHRtbCRub2RlKCd2aWRlbycpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkYXVk
aW8gPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2F1ZGlvJyk7Cit2YXIgX2VsbV9sYW5nJGh0
bWwkSHRtbCRzb3VyY2UgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ3NvdXJjZScpOwordmFy
IF9lbG1fbGFuZyRodG1sJEh0bWwkdHJhY2sgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ3Ry
YWNrJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRjYW52YXMgPSBfZWxtX2xhbmckaHRtbCRI
dG1sJG5vZGUoJ2NhbnZhcycpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkc3ZnID0gX2VsbV9s
YW5nJGh0bWwkSHRtbCRub2RlKCdzdmcnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJG1hdGgg
PSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ21hdGgnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRI
dG1sJHRhYmxlID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCd0YWJsZScpOwordmFyIF9lbG1f
bGFuZyRodG1sJEh0bWwkY2FwdGlvbiA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnY2FwdGlv
bicpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkY29sZ3JvdXAgPSBfZWxtX2xhbmckaHRtbCRI
dG1sJG5vZGUoJ2NvbGdyb3VwJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRjb2wgPSBfZWxt
X2xhbmckaHRtbCRIdG1sJG5vZGUoJ2NvbCcpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkdGJv
ZHkgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ3Rib2R5Jyk7Cit2YXIgX2VsbV9sYW5nJGh0
bWwkSHRtbCR0aGVhZCA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgndGhlYWQnKTsKK3ZhciBf
ZWxtX2xhbmckaHRtbCRIdG1sJHRmb290ID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCd0Zm9v
dCcpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkdHIgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5v
ZGUoJ3RyJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCR0ZCA9IF9lbG1fbGFuZyRodG1sJEh0
bWwkbm9kZSgndGQnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJHRoID0gX2VsbV9sYW5nJGh0
bWwkSHRtbCRub2RlKCd0aCcpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkZm9ybSA9IF9lbG1f
bGFuZyRodG1sJEh0bWwkbm9kZSgnZm9ybScpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkZmll
bGRzZXQgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2ZpZWxkc2V0Jyk7Cit2YXIgX2VsbV9s
YW5nJGh0bWwkSHRtbCRsZWdlbmQgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2xlZ2VuZCcp
OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkbGFiZWwgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5v
ZGUoJ2xhYmVsJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRpbnB1dCA9IF9lbG1fbGFuZyRo
dG1sJEh0bWwkbm9kZSgnaW5wdXQnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGJ1dHRvbiA9
IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnYnV0dG9uJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwk
SHRtbCRzZWxlY3QgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ3NlbGVjdCcpOwordmFyIF9l
bG1fbGFuZyRodG1sJEh0bWwkZGF0YWxpc3QgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2Rh
dGFsaXN0Jyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRvcHRncm91cCA9IF9lbG1fbGFuZyRo
dG1sJEh0bWwkbm9kZSgnb3B0Z3JvdXAnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJG9wdGlv
biA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnb3B0aW9uJyk7Cit2YXIgX2VsbV9sYW5nJGh0
bWwkSHRtbCR0ZXh0YXJlYSA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgndGV4dGFyZWEnKTsK
K3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGtleWdlbiA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9k
ZSgna2V5Z2VuJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRvdXRwdXQgPSBfZWxtX2xhbmck
aHRtbCRIdG1sJG5vZGUoJ291dHB1dCcpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkcHJvZ3Jl
c3MgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ3Byb2dyZXNzJyk7Cit2YXIgX2VsbV9sYW5n
JGh0bWwkSHRtbCRtZXRlciA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnbWV0ZXInKTsKK3Zh
ciBfZWxtX2xhbmckaHRtbCRIdG1sJGRldGFpbHMgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUo
J2RldGFpbHMnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJHN1bW1hcnkgPSBfZWxtX2xhbmck
aHRtbCRIdG1sJG5vZGUoJ3N1bW1hcnknKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJG1lbnVp
dGVtID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdtZW51aXRlbScpOwordmFyIF9lbG1fbGFu
ZyRodG1sJEh0bWwkbWVudSA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnbWVudScpOworCit2
YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BcHAkcHJvZ3JhbVdpdGhGbGFncyA9IF9lbG1fbGFuZyR2
aXJ0dWFsX2RvbSRWaXJ0dWFsRG9tJHByb2dyYW1XaXRoRmxhZ3M7Cit2YXIgX2VsbV9sYW5nJGh0
bWwkSHRtbF9BcHAkcHJvZ3JhbSA9IGZ1bmN0aW9uIChhcHApIHsKKyAgICByZXR1cm4gX2VsbV9s
YW5nJGh0bWwkSHRtbF9BcHAkcHJvZ3JhbVdpdGhGbGFncygKKyAgICAgICAgX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX1V0aWxzLnVwZGF0ZSgKKyAgICAgICAgICAgIGFwcCwKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBpbml0OiBmdW5jdGlvbiAoX3AwKSB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBhcHAuaW5pdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KSk7
Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXBwJGJlZ2lubmVyUHJvZ3JhbSA9IGZ1bmN0
aW9uIChfcDEpIHsKKyAgICB2YXIgX3AyID0gX3AxOworICAgIHJldHVybiBfZWxtX2xhbmckaHRt
bCRIdG1sX0FwcCRwcm9ncmFtV2l0aEZsYWdzKAorICAgICAgICB7CisgICAgICAgICAgICBpbml0
OiBmdW5jdGlvbiAoX3AzKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAg
ICAgICAgICAgICBfZWxtX2xhbmckY29yZSRQbGF0Zm9ybV9DbWRfb3BzWychJ10sCisgICAgICAg
ICAgICAgICAgICAgIF9wMi5tb2RlbCwKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICAgICAgW10pKTsK
KyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB1cGRhdGU6IEYyKAorICAgICAgICAgICAgICAg
IGZ1bmN0aW9uIChtc2csIG1vZGVsKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBBMigK
KyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFBsYXRmb3JtX0NtZF9vcHNb
JyEnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEEyKF9wMi51cGRhdGUsIG1zZywgbW9kZWwp
LAorICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJv
bUFycmF5KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdKSk7CisgICAgICAgICAgICAg
ICAgfSksCisgICAgICAgICAgICB2aWV3OiBfcDIudmlldywKKyAgICAgICAgICAgIHN1YnNjcmlw
dGlvbnM6IGZ1bmN0aW9uIChfcDQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5n
JGNvcmUkUGxhdGZvcm1fU3ViJG5vbmU7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworfTsK
K3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0FwcCRtYXAgPSBfZWxtX2xhbmckdmlydHVhbF9kb20k
VmlydHVhbERvbSRtYXA7CisKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkYXR0
cmlidXRlID0gX2VsbV9sYW5nJHZpcnR1YWxfZG9tJFZpcnR1YWxEb20kYXR0cmlidXRlOwordmFy
IF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRjb250ZXh0bWVudSA9IGZ1bmN0aW9uICh2
YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkYXR0
cmlidXRlLCAnY29udGV4dG1lbnUnLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0
bWxfQXR0cmlidXRlcyRkcmFnZ2FibGUgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4g
QTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGF0dHJpYnV0ZSwgJ2RyYWdnYWJsZScs
IHZhbHVlKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGxpc3QgPSBm
dW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRy
aWJ1dGVzJGF0dHJpYnV0ZSwgJ2xpc3QnLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1s
JEh0bWxfQXR0cmlidXRlcyRtYXhsZW5ndGggPSBmdW5jdGlvbiAobikgeworICAgIHJldHVybiBB
MigKKyAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGF0dHJpYnV0ZSwKKyAg
ICAgICAgJ21heGxlbmd0aCcsCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyR0b1N0cmlu
ZyhuKSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRkYXRldGltZSA9
IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0
dHJpYnV0ZXMkYXR0cmlidXRlLCAnZGF0ZXRpbWUnLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFu
ZyRodG1sJEh0bWxfQXR0cmlidXRlcyRwdWJkYXRlID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAg
cmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRhdHRyaWJ1dGUsICdwdWJk
YXRlJywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkY29s
c3BhbiA9IGZ1bmN0aW9uIChuKSB7CisgICAgcmV0dXJuIEEyKAorICAgICAgICBfZWxtX2xhbmck
aHRtbCRIdG1sX0F0dHJpYnV0ZXMkYXR0cmlidXRlLAorICAgICAgICAnY29sc3BhbicsCisgICAg
ICAgIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyR0b1N0cmluZyhuKSk7Cit9OwordmFyIF9lbG1fbGFu
ZyRodG1sJEh0bWxfQXR0cmlidXRlcyRyb3dzcGFuID0gZnVuY3Rpb24gKG4pIHsKKyAgICByZXR1
cm4gQTIoCisgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRhdHRyaWJ1dGUs
CisgICAgICAgICdyb3dzcGFuJywKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJHRvU3Ry
aW5nKG4pKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHByb3BlcnR5
ID0gX2VsbV9sYW5nJHZpcnR1YWxfZG9tJFZpcnR1YWxEb20kcHJvcGVydHk7Cit2YXIgX2VsbV9s
YW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5ID0gRjIoCisgICAgZnVuY3Rp
b24gKG5hbWUsIHN0cmluZykgeworICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICBfZWxt
X2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkcHJvcGVydHksCisgICAgICAgICAgICBuYW1lLAor
ICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkSnNvbl9FbmNvZGUkc3RyaW5nKHN0cmluZykpOwor
ICAgIH0pOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRjbGFzcyA9IGZ1bmN0
aW9uIChuYW1lKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRl
cyRzdHJpbmdQcm9wZXJ0eSwgJ2NsYXNzTmFtZScsIG5hbWUpOworfTsKK3ZhciBfZWxtX2xhbmck
aHRtbCRIdG1sX0F0dHJpYnV0ZXMkaWQgPSBmdW5jdGlvbiAobmFtZSkgeworICAgIHJldHVybiBB
MihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdpZCcsIG5h
bWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkdGl0bGUgPSBmdW5j
dGlvbiAobmFtZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0
ZXMkc3RyaW5nUHJvcGVydHksICd0aXRsZScsIG5hbWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRt
bCRIdG1sX0F0dHJpYnV0ZXMkYWNjZXNza2V5ID0gZnVuY3Rpb24gKCRjaGFyKSB7CisgICAgcmV0
dXJuIEEyKAorICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJv
cGVydHksCisgICAgICAgICdhY2Nlc3NLZXknLAorICAgICAgICBfZWxtX2xhbmckY29yZSRTdHJp
bmckZnJvbUNoYXIoJGNoYXIpKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1
dGVzJGRpciA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRt
bCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdkaXInLCB2YWx1ZSk7Cit9OwordmFy
IF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRkcm9wem9uZSA9IGZ1bmN0aW9uICh2YWx1
ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5n
UHJvcGVydHksICdkcm9wem9uZScsIHZhbHVlKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRt
bF9BdHRyaWJ1dGVzJGl0ZW1wcm9wID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgcmV0dXJuIEEy
KF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwgJ2l0ZW1wcm9w
JywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkbGFuZyA9
IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0
dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdsYW5nJywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xh
bmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkdGFiaW5kZXggPSBmdW5jdGlvbiAobikgeworICAgIHJl
dHVybiBBMigKKyAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1By
b3BlcnR5LAorICAgICAgICAndGFiSW5kZXgnLAorICAgICAgICBfZWxtX2xhbmckY29yZSRCYXNp
Y3MkdG9TdHJpbmcobikpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMk
Y2hhcnNldCA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRt
bCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdjaGFyc2V0JywgdmFsdWUpOworfTsK
K3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkY29udGVudCA9IGZ1bmN0aW9uICh2
YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3Ry
aW5nUHJvcGVydHksICdjb250ZW50JywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRI
dG1sX0F0dHJpYnV0ZXMkaHR0cEVxdWl2ID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgcmV0dXJu
IEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwgJ2h0dHBF
cXVpdicsIHZhbHVlKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGxh
bmd1YWdlID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1s
JEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwgJ2xhbmd1YWdlJywgdmFsdWUpOworfTsK
K3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3JjID0gZnVuY3Rpb24gKHZhbHVl
KSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQ
cm9wZXJ0eSwgJ3NyYycsIHZhbHVlKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRy
aWJ1dGVzJGhlaWdodCA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMigKKyAgICAg
ICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LAorICAgICAg
ICAnaGVpZ2h0JywKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJHRvU3RyaW5nKHZhbHVl
KSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyR3aWR0aCA9IGZ1bmN0
aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMigKKyAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRt
bF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LAorICAgICAgICAnd2lkdGgnLAorICAgICAgICBf
ZWxtX2xhbmckY29yZSRCYXNpY3MkdG9TdHJpbmcodmFsdWUpKTsKK307Cit2YXIgX2VsbV9sYW5n
JGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGFsdCA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVy
biBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdhbHQn
LCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRwcmVsb2Fk
ID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxf
QXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwgJ3ByZWxvYWQnLCB2YWx1ZSk7Cit9OwordmFyIF9l
bG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRwb3N0ZXIgPSBmdW5jdGlvbiAodmFsdWUpIHsK
KyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3Bl
cnR5LCAncG9zdGVyJywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJp
YnV0ZXMka2luZCA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmck
aHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdraW5kJywgdmFsdWUpOworfTsK
K3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3JjbGFuZyA9IGZ1bmN0aW9uICh2
YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3Ry
aW5nUHJvcGVydHksICdzcmNsYW5nJywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRI
dG1sX0F0dHJpYnV0ZXMkc2FuZGJveCA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBB
MihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdzYW5kYm94
JywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3JjZG9j
ID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxf
QXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwgJ3NyY2RvYycsIHZhbHVlKTsKK307Cit2YXIgX2Vs
bV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHR5cGUkID0gZnVuY3Rpb24gKHZhbHVlKSB7Cisg
ICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0
eSwgJ3R5cGUnLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRl
cyR2YWx1ZSA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRt
bCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICd2YWx1ZScsIHZhbHVlKTsKK307Cit2
YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGRlZmF1bHRWYWx1ZSA9IGZ1bmN0aW9u
ICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMk
c3RyaW5nUHJvcGVydHksICdkZWZhdWx0VmFsdWUnLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFu
ZyRodG1sJEh0bWxfQXR0cmlidXRlcyRwbGFjZWhvbGRlciA9IGZ1bmN0aW9uICh2YWx1ZSkgewor
ICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVy
dHksICdwbGFjZWhvbGRlcicsIHZhbHVlKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9B
dHRyaWJ1dGVzJGFjY2VwdCA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxt
X2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdhY2NlcHQnLCB2YWx1
ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRhY2NlcHRDaGFyc2V0
ID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxf
QXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwgJ2FjY2VwdENoYXJzZXQnLCB2YWx1ZSk7Cit9Owor
dmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRhY3Rpb24gPSBmdW5jdGlvbiAodmFs
dWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmlu
Z1Byb3BlcnR5LCAnYWN0aW9uJywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1s
X0F0dHJpYnV0ZXMkYXV0b2NvbXBsZXRlID0gZnVuY3Rpb24gKGJvb2wpIHsKKyAgICByZXR1cm4g
QTIoCisgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0
eSwKKyAgICAgICAgJ2F1dG9jb21wbGV0ZScsCisgICAgICAgIGJvb2wgPyAnb24nIDogJ29mZicp
OworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkYXV0b3NhdmUgPSBmdW5j
dGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1
dGVzJHN0cmluZ1Byb3BlcnR5LCAnYXV0b3NhdmUnLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFu
ZyRodG1sJEh0bWxfQXR0cmlidXRlcyRlbmN0eXBlID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAg
cmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwg
J2VuY3R5cGUnLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRl
cyRmb3JtYWN0aW9uID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFu
ZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwgJ2Zvcm1BY3Rpb24nLCB2YWx1
ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRtaW5sZW5ndGggPSBm
dW5jdGlvbiAobikgeworICAgIHJldHVybiBBMigKKyAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRt
bF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LAorICAgICAgICAnbWluTGVuZ3RoJywKKyAgICAg
ICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJHRvU3RyaW5nKG4pKTsKK307Cit2YXIgX2VsbV9sYW5n
JGh0bWwkSHRtbF9BdHRyaWJ1dGVzJG1ldGhvZCA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJl
dHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdt
ZXRob2QnLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRu
YW1lID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0
bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwgJ25hbWUnLCB2YWx1ZSk7Cit9OwordmFyIF9l
bG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRwYXR0ZXJuID0gZnVuY3Rpb24gKHZhbHVlKSB7
CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9w
ZXJ0eSwgJ3BhdHRlcm4nLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0
cmlidXRlcyRzaXplID0gZnVuY3Rpb24gKG4pIHsKKyAgICByZXR1cm4gQTIoCisgICAgICAgIF9l
bG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwKKyAgICAgICAgJ3Np
emUnLAorICAgICAgICBfZWxtX2xhbmckY29yZSRCYXNpY3MkdG9TdHJpbmcobikpOworfTsKK3Zh
ciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkZm9yID0gZnVuY3Rpb24gKHZhbHVlKSB7
CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9w
ZXJ0eSwgJ2h0bWxGb3InLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0
cmlidXRlcyRmb3JtID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFu
ZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwgJ2Zvcm0nLCB2YWx1ZSk7Cit9
OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRtYXggPSBmdW5jdGlvbiAodmFs
dWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmlu
Z1Byb3BlcnR5LCAnbWF4JywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0
dHJpYnV0ZXMkbWluID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFu
ZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwgJ21pbicsIHZhbHVlKTsKK307
Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0ZXAgPSBmdW5jdGlvbiAobikg
eworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJv
cGVydHksICdzdGVwJywgbik7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRl
cyRjb2xzID0gZnVuY3Rpb24gKG4pIHsKKyAgICByZXR1cm4gQTIoCisgICAgICAgIF9lbG1fbGFu
ZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwKKyAgICAgICAgJ2NvbHMnLAor
ICAgICAgICBfZWxtX2xhbmckY29yZSRCYXNpY3MkdG9TdHJpbmcobikpOworfTsKK3ZhciBfZWxt
X2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkcm93cyA9IGZ1bmN0aW9uIChuKSB7CisgICAgcmV0
dXJuIEEyKAorICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJv
cGVydHksCisgICAgICAgICdyb3dzJywKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJHRv
U3RyaW5nKG4pKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHdyYXAg
PSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9B
dHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAnd3JhcCcsIHZhbHVlKTsKK307Cit2YXIgX2VsbV9s
YW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHVzZW1hcCA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAg
IHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHks
ICd1c2VNYXAnLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRl
cyRzaGFwZSA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRt
bCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdzaGFwZScsIHZhbHVlKTsKK307Cit2
YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGNvb3JkcyA9IGZ1bmN0aW9uICh2YWx1
ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5n
UHJvcGVydHksICdjb29yZHMnLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxf
QXR0cmlidXRlcyRjaGFsbGVuZ2UgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIo
X2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAnY2hhbGxlbmdl
JywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMka2V5dHlw
ZSA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1s
X0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdrZXl0eXBlJywgdmFsdWUpOworfTsKK3ZhciBf
ZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkYWxpZ24gPSBmdW5jdGlvbiAodmFsdWUpIHsK
KyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3Bl
cnR5LCAnYWxpZ24nLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmli
dXRlcyRjaXRlID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRo
dG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwgJ2NpdGUnLCB2YWx1ZSk7Cit9Owor
dmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRocmVmID0gZnVuY3Rpb24gKHZhbHVl
KSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQ
cm9wZXJ0eSwgJ2hyZWYnLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0
cmlidXRlcyR0YXJnZXQgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9s
YW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAndGFyZ2V0JywgdmFsdWUp
OworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkZG93bmxvYWRBcyA9IGZ1
bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJp
YnV0ZXMkc3RyaW5nUHJvcGVydHksICdkb3dubG9hZCcsIHZhbHVlKTsKK307Cit2YXIgX2VsbV9s
YW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGhyZWZsYW5nID0gZnVuY3Rpb24gKHZhbHVlKSB7Cisg
ICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0
eSwgJ2hyZWZsYW5nJywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJp
YnV0ZXMkbWVkaWEgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5n
JGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAnbWVkaWEnLCB2YWx1ZSk7Cit9
OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRwaW5nID0gZnVuY3Rpb24gKHZh
bHVlKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJp
bmdQcm9wZXJ0eSwgJ3BpbmcnLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxf
QXR0cmlidXRlcyRyZWwgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9s
YW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAncmVsJywgdmFsdWUpOwor
fTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RhcnQgPSBmdW5jdGlvbiAo
bikgeworICAgIHJldHVybiBBMigKKyAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1
dGVzJHN0cmluZ1Byb3BlcnR5LAorICAgICAgICAnc3RhcnQnLAorICAgICAgICBfZWxtX2xhbmck
Y29yZSRCYXNpY3MkdG9TdHJpbmcobikpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0
dHJpYnV0ZXMkaGVhZGVycyA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxt
X2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdoZWFkZXJzJywgdmFs
dWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc2NvcGUgPSBmdW5j
dGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1
dGVzJHN0cmluZ1Byb3BlcnR5LCAnc2NvcGUnLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRo
dG1sJEh0bWxfQXR0cmlidXRlcyRtYW5pZmVzdCA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJl
dHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdt
YW5pZmVzdCcsIHZhbHVlKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVz
JGJvb2xQcm9wZXJ0eSA9IEYyKAorICAgIGZ1bmN0aW9uIChuYW1lLCBib29sKSB7CisgICAgICAg
IHJldHVybiBBMigKKyAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRw
cm9wZXJ0eSwKKyAgICAgICAgICAgIG5hbWUsCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRK
c29uX0VuY29kZSRib29sKGJvb2wpKTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1s
X0F0dHJpYnV0ZXMkaGlkZGVuID0gZnVuY3Rpb24gKGJvb2wpIHsKKyAgICByZXR1cm4gQTIoX2Vs
bV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGJvb2xQcm9wZXJ0eSwgJ2hpZGRlbicsIGJvb2wp
OworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkY29udGVudGVkaXRhYmxl
ID0gZnVuY3Rpb24gKGJvb2wpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9B
dHRyaWJ1dGVzJGJvb2xQcm9wZXJ0eSwgJ2NvbnRlbnRFZGl0YWJsZScsIGJvb2wpOworfTsKK3Zh
ciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3BlbGxjaGVjayA9IGZ1bmN0aW9uIChi
b29sKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRib29s
UHJvcGVydHksICdzcGVsbGNoZWNrJywgYm9vbCk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0
bWxfQXR0cmlidXRlcyRhc3luYyA9IGZ1bmN0aW9uIChib29sKSB7CisgICAgcmV0dXJuIEEyKF9l
bG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRib29sUHJvcGVydHksICdhc3luYycsIGJvb2wp
OworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkZGVmZXIgPSBmdW5jdGlv
biAoYm9vbCkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMk
Ym9vbFByb3BlcnR5LCAnZGVmZXInLCBib29sKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRt
bF9BdHRyaWJ1dGVzJHNjb3BlZCA9IGZ1bmN0aW9uIChib29sKSB7CisgICAgcmV0dXJuIEEyKF9l
bG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRib29sUHJvcGVydHksICdzY29wZWQnLCBib29s
KTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGF1dG9wbGF5ID0gZnVu
Y3Rpb24gKGJvb2wpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1
dGVzJGJvb2xQcm9wZXJ0eSwgJ2F1dG9wbGF5JywgYm9vbCk7Cit9OwordmFyIF9lbG1fbGFuZyRo
dG1sJEh0bWxfQXR0cmlidXRlcyRjb250cm9scyA9IGZ1bmN0aW9uIChib29sKSB7CisgICAgcmV0
dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRib29sUHJvcGVydHksICdjb250
cm9scycsIGJvb2wpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkbG9v
cCA9IGZ1bmN0aW9uIChib29sKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxf
QXR0cmlidXRlcyRib29sUHJvcGVydHksICdsb29wJywgYm9vbCk7Cit9OwordmFyIF9lbG1fbGFu
ZyRodG1sJEh0bWxfQXR0cmlidXRlcyRkZWZhdWx0ID0gZnVuY3Rpb24gKGJvb2wpIHsKKyAgICBy
ZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGJvb2xQcm9wZXJ0eSwgJ2Rl
ZmF1bHQnLCBib29sKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHNl
YW1sZXNzID0gZnVuY3Rpb24gKGJvb2wpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwk
SHRtbF9BdHRyaWJ1dGVzJGJvb2xQcm9wZXJ0eSwgJ3NlYW1sZXNzJywgYm9vbCk7Cit9OwordmFy
IF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRjaGVja2VkID0gZnVuY3Rpb24gKGJvb2wp
IHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGJvb2xQcm9w
ZXJ0eSwgJ2NoZWNrZWQnLCBib29sKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRy
aWJ1dGVzJHNlbGVjdGVkID0gZnVuY3Rpb24gKGJvb2wpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9s
YW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGJvb2xQcm9wZXJ0eSwgJ3NlbGVjdGVkJywgYm9vbCk7
Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRhdXRvZm9jdXMgPSBmdW5j
dGlvbiAoYm9vbCkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0
ZXMkYm9vbFByb3BlcnR5LCAnYXV0b2ZvY3VzJywgYm9vbCk7Cit9OwordmFyIF9lbG1fbGFuZyRo
dG1sJEh0bWxfQXR0cmlidXRlcyRkaXNhYmxlZCA9IGZ1bmN0aW9uIChib29sKSB7CisgICAgcmV0
dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRib29sUHJvcGVydHksICdkaXNh
YmxlZCcsIGJvb2wpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkbXVs
dGlwbGUgPSBmdW5jdGlvbiAoYm9vbCkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRI
dG1sX0F0dHJpYnV0ZXMkYm9vbFByb3BlcnR5LCAnbXVsdGlwbGUnLCBib29sKTsKK307Cit2YXIg
X2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJG5vdmFsaWRhdGUgPSBmdW5jdGlvbiAoYm9v
bCkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkYm9vbFBy
b3BlcnR5LCAnbm9WYWxpZGF0ZScsIGJvb2wpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1s
X0F0dHJpYnV0ZXMkcmVhZG9ubHkgPSBmdW5jdGlvbiAoYm9vbCkgeworICAgIHJldHVybiBBMihf
ZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkYm9vbFByb3BlcnR5LCAncmVhZE9ubHknLCBi
b29sKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHJlcXVpcmVkID0g
ZnVuY3Rpb24gKGJvb2wpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRy
aWJ1dGVzJGJvb2xQcm9wZXJ0eSwgJ3JlcXVpcmVkJywgYm9vbCk7Cit9OwordmFyIF9lbG1fbGFu
ZyRodG1sJEh0bWxfQXR0cmlidXRlcyRpc21hcCA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJl
dHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkYm9vbFByb3BlcnR5LCAnaXNN
YXAnLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRkb3du
bG9hZCA9IGZ1bmN0aW9uIChib29sKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0
bWxfQXR0cmlidXRlcyRib29sUHJvcGVydHksICdkb3dubG9hZCcsIGJvb2wpOworfTsKK3ZhciBf
ZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkcmV2ZXJzZWQgPSBmdW5jdGlvbiAoYm9vbCkg
eworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkYm9vbFByb3Bl
cnR5LCAncmV2ZXJzZWQnLCBib29sKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRy
aWJ1dGVzJGNsYXNzTGlzdCA9IGZ1bmN0aW9uIChsaXN0KSB7CisgICAgcmV0dXJuIF9lbG1fbGFu
ZyRodG1sJEh0bWxfQXR0cmlidXRlcyRjbGFzcygKKyAgICAgICAgQTIoCisgICAgICAgICAgICBf
ZWxtX2xhbmckY29yZSRTdHJpbmckam9pbiwKKyAgICAgICAgICAgICcgJywKKyAgICAgICAgICAg
IEEyKAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3QkbWFwLAorICAgICAgICAg
ICAgICAgIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRmc3QsCisgICAgICAgICAgICAgICAgQTIoX2Vs
bV9sYW5nJGNvcmUkTGlzdCRmaWx0ZXIsIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRzbmQsIGxpc3Qp
KSkpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3R5bGUgPSBfZWxt
X2xhbmckdmlydHVhbF9kb20kVmlydHVhbERvbSRzdHlsZTsKKwordmFyIF9lbG1fbGFuZyRodG1s
JEh0bWxfRXZlbnRzJGtleUNvZGUgPSBBMihfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZV9vcHNb
Jzo9J10sICdrZXlDb2RlJywgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkaW50KTsKK3ZhciBf
ZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyR0YXJnZXRDaGVja2VkID0gQTIoCisgICAgX2VsbV9s
YW5nJGNvcmUkSnNvbl9EZWNvZGUkYXQsCisgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3Qu
ZnJvbUFycmF5KAorICAgICAgICBbJ3RhcmdldCcsICdjaGVja2VkJ10pLAorICAgIF9lbG1fbGFu
ZyRjb3JlJEpzb25fRGVjb2RlJGJvb2wpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfRXZlbnRz
JHRhcmdldFZhbHVlID0gQTIoCisgICAgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkYXQsCisg
ICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICBbJ3Rhcmdl
dCcsICd2YWx1ZSddKSwKKyAgICBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRzdHJpbmcpOwor
dmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfRXZlbnRzJGRlZmF1bHRPcHRpb25zID0gX2VsbV9sYW5n
JHZpcnR1YWxfZG9tJFZpcnR1YWxEb20kZGVmYXVsdE9wdGlvbnM7Cit2YXIgX2VsbV9sYW5nJGh0
bWwkSHRtbF9FdmVudHMkb25XaXRoT3B0aW9ucyA9IF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSRWaXJ0
dWFsRG9tJG9uV2l0aE9wdGlvbnM7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMkb24g
PSBfZWxtX2xhbmckdmlydHVhbF9kb20kVmlydHVhbERvbSRvbjsKK3ZhciBfZWxtX2xhbmckaHRt
bCRIdG1sX0V2ZW50cyRvbkZvY3VzID0gZnVuY3Rpb24gKG1zZykgeworICAgIHJldHVybiBBMigK
KyAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMkb24sCisgICAgICAgICdmb2N1cycs
CisgICAgICAgIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJHN1Y2NlZWQobXNnKSk7Cit9Owor
dmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfRXZlbnRzJG9uQmx1ciA9IGZ1bmN0aW9uIChtc2cpIHsK
KyAgICByZXR1cm4gQTIoCisgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfRXZlbnRzJG9uLAor
ICAgICAgICAnYmx1cicsCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJHN1Y2Nl
ZWQobXNnKSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfRXZlbnRzJG9uU3VibWl0T3B0
aW9ucyA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy51cGRhdGUoCisgICAgX2VsbV9sYW5n
JGh0bWwkSHRtbF9FdmVudHMkZGVmYXVsdE9wdGlvbnMsCisgICAge3ByZXZlbnREZWZhdWx0OiB0
cnVlfSk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMkb25TdWJtaXQgPSBmdW5jdGlv
biAobXNnKSB7CisgICAgcmV0dXJuIEEzKAorICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0V2
ZW50cyRvbldpdGhPcHRpb25zLAorICAgICAgICAnc3VibWl0JywKKyAgICAgICAgX2VsbV9sYW5n
JGh0bWwkSHRtbF9FdmVudHMkb25TdWJtaXRPcHRpb25zLAorICAgICAgICBfZWxtX2xhbmckY29y
ZSRKc29uX0RlY29kZSRzdWNjZWVkKG1zZykpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1s
X0V2ZW50cyRvbkNoZWNrID0gZnVuY3Rpb24gKHRhZ2dlcikgeworICAgIHJldHVybiBBMigKKyAg
ICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMkb24sCisgICAgICAgICdjaGFuZ2UnLAor
ICAgICAgICBBMihfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRtYXAsIHRhZ2dlciwgX2VsbV9s
YW5nJGh0bWwkSHRtbF9FdmVudHMkdGFyZ2V0Q2hlY2tlZCkpOworfTsKK3ZhciBfZWxtX2xhbmck
aHRtbCRIdG1sX0V2ZW50cyRvbklucHV0ID0gZnVuY3Rpb24gKHRhZ2dlcikgeworICAgIHJldHVy
biBBMigKKyAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMkb24sCisgICAgICAgICdp
bnB1dCcsCisgICAgICAgIEEyKF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJG1hcCwgdGFnZ2Vy
LCBfZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyR0YXJnZXRWYWx1ZSkpOworfTsKK3ZhciBfZWxt
X2xhbmckaHRtbCRIdG1sX0V2ZW50cyRvbk1vdXNlT3V0ID0gZnVuY3Rpb24gKG1zZykgeworICAg
IHJldHVybiBBMigKKyAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMkb24sCisgICAg
ICAgICdtb3VzZW91dCcsCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJHN1Y2Nl
ZWQobXNnKSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfRXZlbnRzJG9uTW91c2VPdmVy
ID0gZnVuY3Rpb24gKG1zZykgeworICAgIHJldHVybiBBMigKKyAgICAgICAgX2VsbV9sYW5nJGh0
bWwkSHRtbF9FdmVudHMkb24sCisgICAgICAgICdtb3VzZW92ZXInLAorICAgICAgICBfZWxtX2xh
bmckY29yZSRKc29uX0RlY29kZSRzdWNjZWVkKG1zZykpOworfTsKK3ZhciBfZWxtX2xhbmckaHRt
bCRIdG1sX0V2ZW50cyRvbk1vdXNlTGVhdmUgPSBmdW5jdGlvbiAobXNnKSB7CisgICAgcmV0dXJu
IEEyKAorICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyRvbiwKKyAgICAgICAgJ21v
dXNlbGVhdmUnLAorICAgICAgICBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRzdWNjZWVkKG1z
ZykpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyRvbk1vdXNlRW50ZXIgPSBm
dW5jdGlvbiAobXNnKSB7CisgICAgcmV0dXJuIEEyKAorICAgICAgICBfZWxtX2xhbmckaHRtbCRI
dG1sX0V2ZW50cyRvbiwKKyAgICAgICAgJ21vdXNlZW50ZXInLAorICAgICAgICBfZWxtX2xhbmck
Y29yZSRKc29uX0RlY29kZSRzdWNjZWVkKG1zZykpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRI
dG1sX0V2ZW50cyRvbk1vdXNlVXAgPSBmdW5jdGlvbiAobXNnKSB7CisgICAgcmV0dXJuIEEyKAor
ICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyRvbiwKKyAgICAgICAgJ21vdXNldXAn
LAorICAgICAgICBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRzdWNjZWVkKG1zZykpOworfTsK
K3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyRvbk1vdXNlRG93biA9IGZ1bmN0aW9uICht
c2cpIHsKKyAgICByZXR1cm4gQTIoCisgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfRXZlbnRz
JG9uLAorICAgICAgICAnbW91c2Vkb3duJywKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkSnNvbl9E
ZWNvZGUkc3VjY2VlZChtc2cpKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMk
b25Eb3VibGVDbGljayA9IGZ1bmN0aW9uIChtc2cpIHsKKyAgICByZXR1cm4gQTIoCisgICAgICAg
IF9lbG1fbGFuZyRodG1sJEh0bWxfRXZlbnRzJG9uLAorICAgICAgICAnZGJsY2xpY2snLAorICAg
ICAgICBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRzdWNjZWVkKG1zZykpOworfTsKK3ZhciBf
ZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyRvbkNsaWNrID0gZnVuY3Rpb24gKG1zZykgeworICAg
IHJldHVybiBBMigKKyAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMkb24sCisgICAg
ICAgICdjbGljaycsCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJHN1Y2NlZWQo
bXNnKSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfRXZlbnRzJE9wdGlvbnMgPSBGMigK
KyAgICBmdW5jdGlvbiAoYSwgYikgeworICAgICAgICByZXR1cm4ge3N0b3BQcm9wYWdhdGlvbjog
YSwgcHJldmVudERlZmF1bHQ6IGJ9OworICAgIH0pOworCit2YXIgX2VsbV9sYW5nJGh0bWwkSHRt
bF9MYXp5JGxhenkzID0gX2VsbV9sYW5nJHZpcnR1YWxfZG9tJFZpcnR1YWxEb20kbGF6eTM7Cit2
YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9MYXp5JGxhenkyID0gX2VsbV9sYW5nJHZpcnR1YWxfZG9t
JFZpcnR1YWxEb20kbGF6eTI7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9MYXp5JGxhenkgPSBf
ZWxtX2xhbmckdmlydHVhbF9kb20kVmlydHVhbERvbSRsYXp5OworCit2YXIgX2VsbV9sYW5nJG5h
dmlnYXRpb24kTmF0aXZlX05hdmlnYXRpb24gPSBmdW5jdGlvbigpIHsKKworZnVuY3Rpb24gZ28o
bikKK3sKKyAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVkdWxlci5uYXRpdmVC
aW5kaW5nKGZ1bmN0aW9uKGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgaWYgKG4gIT09IDApCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGhpc3RvcnkuZ28obik7CisgICAgICAgIH0KKyAgICAgICAg
Y2FsbGJhY2soX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVkdWxlci5zdWNjZWVkKF9lbG1fbGFu
ZyRjb3JlJE5hdGl2ZV9VdGlscy5UdXBsZTApKTsKKyAgICB9KTsKK30KKworZnVuY3Rpb24gcHVz
aFN0YXRlKHVybCkKK3sKKyAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVkdWxl
ci5uYXRpdmVCaW5kaW5nKGZ1bmN0aW9uKGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgaGlzdG9y
eS5wdXNoU3RhdGUoe30sICcnLCB1cmwpOworICAgICAgICBjYWxsYmFjayhfZWxtX2xhbmckY29y
ZSROYXRpdmVfU2NoZWR1bGVyLnN1Y2NlZWQoZ2V0TG9jYXRpb24oKSkpOworICAgIH0pOworfQor
CitmdW5jdGlvbiByZXBsYWNlU3RhdGUodXJsKQoreworICAgIHJldHVybiBfZWxtX2xhbmckY29y
ZSROYXRpdmVfU2NoZWR1bGVyLm5hdGl2ZUJpbmRpbmcoZnVuY3Rpb24oY2FsbGJhY2spCisgICAg
eworICAgICAgICBoaXN0b3J5LnJlcGxhY2VTdGF0ZSh7fSwgJycsIHVybCk7CisgICAgICAgIGNh
bGxiYWNrKF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TY2hlZHVsZXIuc3VjY2VlZChnZXRMb2NhdGlv
bigpKSk7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIGdldExvY2F0aW9uKCkKK3sKKyAgICB2YXIg
bG9jYXRpb24gPSBkb2N1bWVudC5sb2NhdGlvbjsKKworICAgIHJldHVybiB7CisgICAgICAgIGhy
ZWY6IGxvY2F0aW9uLmhyZWYsCisgICAgICAgIGhvc3Q6IGxvY2F0aW9uLmhvc3QsCisgICAgICAg
IGhvc3RuYW1lOiBsb2NhdGlvbi5ob3N0bmFtZSwKKyAgICAgICAgcHJvdG9jb2w6IGxvY2F0aW9u
LnByb3RvY29sLAorICAgICAgICBvcmlnaW46IGxvY2F0aW9uLm9yaWdpbiwKKyAgICAgICAgcG9y
dF86IGxvY2F0aW9uLnBvcnQsCisgICAgICAgIHBhdGhuYW1lOiBsb2NhdGlvbi5wYXRobmFtZSwK
KyAgICAgICAgc2VhcmNoOiBsb2NhdGlvbi5zZWFyY2gsCisgICAgICAgIGhhc2g6IGxvY2F0aW9u
Lmhhc2gsCisgICAgICAgIHVzZXJuYW1lOiBsb2NhdGlvbi51c2VybmFtZSwKKyAgICAgICAgcGFz
c3dvcmQ6IGxvY2F0aW9uLnBhc3N3b3JkCisgICAgfTsKK30KKworCityZXR1cm4geworICAgIGdv
OiBnbywKKyAgICBwdXNoU3RhdGU6IHB1c2hTdGF0ZSwKKyAgICByZXBsYWNlU3RhdGU6IHJlcGxh
Y2VTdGF0ZSwKKyAgICBnZXRMb2NhdGlvbjogZ2V0TG9jYXRpb24KK307CisKK30oKTsKKwordmFy
IF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kcmVwbGFjZVN0YXRlID0gX2VsbV9sYW5n
JG5hdmlnYXRpb24kTmF0aXZlX05hdmlnYXRpb24ucmVwbGFjZVN0YXRlOwordmFyIF9lbG1fbGFu
ZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kcHVzaFN0YXRlID0gX2VsbV9sYW5nJG5hdmlnYXRpb24k
TmF0aXZlX05hdmlnYXRpb24ucHVzaFN0YXRlOwordmFyIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5h
dmlnYXRpb24kZ28gPSBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXRpdmVfTmF2aWdhdGlvbi5nbzsK
K3ZhciBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJHNwYXduUG9wU3RhdGUgPSBmdW5j
dGlvbiAocm91dGVyKSB7CisgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFByb2Nlc3Mkc3Bhd24o
CisgICAgICAgIEEzKAorICAgICAgICAgICAgX2VsbV9sYW5nJGRvbSREb21fTG93TGV2ZWwkb25X
aW5kb3csCisgICAgICAgICAgICAncG9wc3RhdGUnLAorICAgICAgICAgICAgX2VsbV9sYW5nJGNv
cmUkSnNvbl9EZWNvZGUkdmFsdWUsCisgICAgICAgICAgICBmdW5jdGlvbiAoX3AwKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29y
ZSRQbGF0Zm9ybSRzZW5kVG9TZWxmLAorICAgICAgICAgICAgICAgICAgICByb3V0ZXIsCisgICAg
ICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdGl2ZV9OYXZpZ2F0aW9uLmdl
dExvY2F0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAge2N0b3I6ICdfVHVwbGUwJ30pKTsK
KyAgICAgICAgICAgIH0pKTsKK307Cit2YXIgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlv
bl9vcHMgPSBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uX29wcyB8fCB7fTsKK19lbG1f
bGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb25fb3BzWycmPiddID0gRjIoCisgICAgZnVuY3Rpb24g
KHRhc2sxLCB0YXNrMikgeworICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICBfZWxtX2xh
bmckY29yZSRUYXNrJGFuZFRoZW4sCisgICAgICAgICAgICB0YXNrMSwKKyAgICAgICAgICAgIGZ1
bmN0aW9uIChfcDEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGFzazI7CisgICAgICAgICAg
ICB9KTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJG5vdGlm
eSA9IEYzKAorICAgIGZ1bmN0aW9uIChyb3V0ZXIsIHN1YnMsIGxvY2F0aW9uKSB7CisgICAgICAg
IHZhciBzZW5kID0gZnVuY3Rpb24gKF9wMikgeworICAgICAgICAgICAgdmFyIF9wMyA9IF9wMjsK
KyAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRQ
bGF0Zm9ybSRzZW5kVG9BcHAsCisgICAgICAgICAgICAgICAgcm91dGVyLAorICAgICAgICAgICAg
ICAgIF9wMy5fMChsb2NhdGlvbikpOworICAgICAgICB9OworICAgICAgICByZXR1cm4gQTIoCisg
ICAgICAgICAgICBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uX29wc1snJj4nXSwKKyAg
ICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFRhc2skc2VxdWVuY2UoCisgICAgICAgICAgICAgICAg
QTIoX2VsbV9sYW5nJGNvcmUkTGlzdCRtYXAsIHNlbmQsIHN1YnMpKSwKKyAgICAgICAgICAgIF9l
bG1fbGFuZyRjb3JlJFRhc2skc3VjY2VlZCgKKyAgICAgICAgICAgICAgICB7Y3RvcjogJ19UdXBs
ZTAnfSkpOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kb25T
ZWxmTXNnID0gRjMoCisgICAgZnVuY3Rpb24gKHJvdXRlciwgbG9jYXRpb24sIHN0YXRlKSB7Cisg
ICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmln
YXRpb25fb3BzWycmPiddLAorICAgICAgICAgICAgQTMoX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2
aWdhdGlvbiRub3RpZnksIHJvdXRlciwgc3RhdGUuc3VicywgbG9jYXRpb24pLAorICAgICAgICAg
ICAgX2VsbV9sYW5nJGNvcmUkVGFzayRzdWNjZWVkKHN0YXRlKSk7CisgICAgfSk7Cit2YXIgX2Vs
bV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRjbWRIZWxwID0gRjMoCisgICAgZnVuY3Rpb24g
KHJvdXRlciwgc3VicywgY21kKSB7CisgICAgICAgIHZhciBfcDQgPSBjbWQ7CisgICAgICAgIHN3
aXRjaCAoX3A0LmN0b3IpIHsKKyAgICAgICAgICAgIGNhc2UgJ0p1bXAnOgorICAgICAgICAgICAg
ICAgIHJldHVybiBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJGdvKF9wNC5fMCk7Cisg
ICAgICAgICAgICBjYXNlICdOZXcnOgorICAgICAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAg
ICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRhbmRUaGVuLAorICAgICAgICAgICAg
ICAgICAgICBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJHB1c2hTdGF0ZShfcDQuXzAp
LAorICAgICAgICAgICAgICAgICAgICBBMihfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9u
JG5vdGlmeSwgcm91dGVyLCBzdWJzKSk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFz
ayRhbmRUaGVuLAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZp
Z2F0aW9uJHJlcGxhY2VTdGF0ZShfcDQuXzApLAorICAgICAgICAgICAgICAgICAgICBBMihfZWxt
X2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJG5vdGlmeSwgcm91dGVyLCBzdWJzKSk7CisgICAg
ICAgIH0KKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJHVwZGF0
ZUhlbHAgPSBGMigKKyAgICBmdW5jdGlvbiAoZnVuYywgX3A1KSB7CisgICAgICAgIHZhciBfcDYg
PSBfcDU7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBjdG9yOiAnX1R1cGxlMicsCisg
ICAgICAgICAgICBfMDogX3A2Ll8wLAorICAgICAgICAgICAgXzE6IEEyKF9lbG1fbGFuZyRjb3Jl
JFBsYXRmb3JtX0NtZCRtYXAsIGZ1bmMsIF9wNi5fMSkKKyAgICAgICAgfTsKKyAgICB9KTsKK3Zh
ciBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJHN1YnNjcmlwdGlvbiA9IF9lbG1fbGFu
ZyRjb3JlJE5hdGl2ZV9QbGF0Zm9ybS5sZWFmKCdOYXZpZ2F0aW9uJyk7Cit2YXIgX2VsbV9sYW5n
JG5hdmlnYXRpb24kTmF2aWdhdGlvbiRjb21tYW5kID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1Bs
YXRmb3JtLmxlYWYoJ05hdmlnYXRpb24nKTsKK3ZhciBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZp
Z2F0aW9uJExvY2F0aW9uID0gZnVuY3Rpb24gKGEpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24gKGIp
IHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjKSB7CisgICAgICAgICAgICByZXR1cm4gZnVu
Y3Rpb24gKGQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZnVuY3Rpb24gKGcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZnVuY3Rpb24gKGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZ1bmN0aW9uIChpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZnVuY3Rpb24gKGopIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZnVuY3Rpb24gKGspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHtocmVmOiBhLCBob3N0OiBiLCBob3N0bmFtZTogYywgcHJv
dG9jb2w6IGQsIG9yaWdpbjogZSwgcG9ydF86IGYsIHBhdGhuYW1lOiBnLCBzZWFyY2g6IGgsIGhh
c2g6IGksIHVzZXJuYW1lOiBqLCBwYXNzd29yZDoga307CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAg
ICAgICAgIH07CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH07CisgICAgICAgIH07
CisgICAgfTsKK307Cit2YXIgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRTdGF0ZSA9
IEYyKAorICAgIGZ1bmN0aW9uIChhLCBiKSB7CisgICAgICAgIHJldHVybiB7c3ViczogYSwgcHJv
Y2VzczogYn07CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRp
bml0ID0gX2VsbV9sYW5nJGNvcmUkVGFzayRzdWNjZWVkKAorICAgIEEyKAorICAgICAgICBfZWxt
X2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJFN0YXRlLAorICAgICAgICBfZWxtX2xhbmckY29y
ZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICBbXSksCisgICAgICAgIF9lbG1f
bGFuZyRjb3JlJE1heWJlJE5vdGhpbmcpKTsKK3ZhciBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZp
Z2F0aW9uJG9uRWZmZWN0cyA9IEY0KAorICAgIGZ1bmN0aW9uIChyb3V0ZXIsIGNtZHMsIHN1YnMs
IF9wNykgeworICAgICAgICB2YXIgX3A4ID0gX3A3OworICAgICAgICB2YXIgX3AxMCA9IF9wOC5w
cm9jZXNzOworICAgICAgICB2YXIgc3RlcFN0YXRlID0gZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgdmFyIF9wOSA9IHtjdG9yOiAnX1R1cGxlMicsIF8wOiBzdWJzLCBfMTogX3AxMH07CisgICAg
ICAgICAgICBfdjRfMjoKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBpZiAoX3A5
Ll8wLmN0b3IgPT09ICdbXScpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKF9wOS5fMS5jdG9y
ID09PSAnSnVzdCcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uX29w
c1snJj4nXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRQcm9j
ZXNzJGtpbGwoX3A5Ll8xLl8wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xh
bmckY29yZSRUYXNrJHN1Y2NlZWQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEy
KF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kU3RhdGUsIHN1YnMsIF9lbG1fbGFuZyRj
b3JlJE1heWJlJE5vdGhpbmcpKSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhayBfdjRfMjsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChfcDkuXzEu
Y3RvciA9PT0gJ05vdGhpbmcnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQTIo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRhbmRUaGVu
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmln
YXRpb24kc3Bhd25Qb3BTdGF0ZShyb3V0ZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZ1bmN0aW9uIChwaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IF9lbG1fbGFuZyRjb3JlJFRhc2skc3VjY2VlZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9l
bG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kU3RhdGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3VicywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfZWxtX2xhbmckY29yZSRNYXliZSRKdXN0KHBpZCkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrIF92NF8yOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSB3aGlsZShmYWxzZSk7CisgICAgICAgICAg
ICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkVGFzayRzdWNjZWVkKAorICAgICAgICAgICAgICAgIEEy
KF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kU3RhdGUsIHN1YnMsIF9wMTApKTsKKyAg
ICAgICAgfSgpOworICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICBfZWxtX2xhbmckbmF2
aWdhdGlvbiROYXZpZ2F0aW9uX29wc1snJj4nXSwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3Jl
JFRhc2skc2VxdWVuY2UoCisgICAgICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAgICAg
IF9lbG1fbGFuZyRjb3JlJExpc3QkbWFwLAorICAgICAgICAgICAgICAgICAgICBBMihfZWxtX2xh
bmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJGNtZEhlbHAsIHJvdXRlciwgc3VicyksCisgICAgICAg
ICAgICAgICAgICAgIGNtZHMpKSwKKyAgICAgICAgICAgIHN0ZXBTdGF0ZSk7CisgICAgfSk7Cit2
YXIgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRVc2VyTXNnID0gZnVuY3Rpb24gKGEp
IHsKKyAgICByZXR1cm4ge2N0b3I6ICdVc2VyTXNnJywgXzA6IGF9OworfTsKK3ZhciBfZWxtX2xh
bmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJENoYW5nZSA9IGZ1bmN0aW9uIChhKSB7CisgICAgcmV0
dXJuIHtjdG9yOiAnQ2hhbmdlJywgXzA6IGF9OworfTsKK3ZhciBfZWxtX2xhbmckbmF2aWdhdGlv
biROYXZpZ2F0aW9uJFBhcnNlciA9IGZ1bmN0aW9uIChhKSB7CisgICAgcmV0dXJuIHtjdG9yOiAn
UGFyc2VyJywgXzA6IGF9OworfTsKK3ZhciBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9u
JG1ha2VQYXJzZXIgPSBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJFBhcnNlcjsKK3Zh
ciBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJE1vZGlmeSA9IGZ1bmN0aW9uIChhKSB7
CisgICAgcmV0dXJuIHtjdG9yOiAnTW9kaWZ5JywgXzA6IGF9OworfTsKK3ZhciBfZWxtX2xhbmck
bmF2aWdhdGlvbiROYXZpZ2F0aW9uJG1vZGlmeVVybCA9IGZ1bmN0aW9uICh1cmwpIHsKKyAgICBy
ZXR1cm4gX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRjb21tYW5kKAorICAgICAgICBf
ZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJE1vZGlmeSh1cmwpKTsKK307Cit2YXIgX2Vs
bV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiROZXcgPSBmdW5jdGlvbiAoYSkgeworICAgIHJl
dHVybiB7Y3RvcjogJ05ldycsIF8wOiBhfTsKK307Cit2YXIgX2VsbV9sYW5nJG5hdmlnYXRpb24k
TmF2aWdhdGlvbiRuZXdVcmwgPSBmdW5jdGlvbiAodXJsKSB7CisgICAgcmV0dXJuIF9lbG1fbGFu
ZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kY29tbWFuZCgKKyAgICAgICAgX2VsbV9sYW5nJG5hdmln
YXRpb24kTmF2aWdhdGlvbiROZXcodXJsKSk7Cit9OwordmFyIF9lbG1fbGFuZyRuYXZpZ2F0aW9u
JE5hdmlnYXRpb24kSnVtcCA9IGZ1bmN0aW9uIChhKSB7CisgICAgcmV0dXJuIHtjdG9yOiAnSnVt
cCcsIF8wOiBhfTsKK307Cit2YXIgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRiYWNr
ID0gZnVuY3Rpb24gKG4pIHsKKyAgICByZXR1cm4gX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdh
dGlvbiRjb21tYW5kKAorICAgICAgICBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJEp1
bXAoMCAtIG4pKTsKK307Cit2YXIgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRmb3J3
YXJkID0gZnVuY3Rpb24gKG4pIHsKKyAgICByZXR1cm4gX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2
aWdhdGlvbiRjb21tYW5kKAorICAgICAgICBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9u
JEp1bXAobikpOworfTsKK3ZhciBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJGNtZE1h
cCA9IEYyKAorICAgIGZ1bmN0aW9uIChfcDExLCBteUNtZCkgeworICAgICAgICB2YXIgX3AxMiA9
IG15Q21kOworICAgICAgICBzd2l0Y2ggKF9wMTIuY3RvcikgeworICAgICAgICAgICAgY2FzZSAn
SnVtcCc6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmln
YXRpb24kSnVtcChfcDEyLl8wKTsKKyAgICAgICAgICAgIGNhc2UgJ05ldyc6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kTmV3KF9wMTIuXzAp
OworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5n
JG5hdmlnYXRpb24kTmF2aWdhdGlvbiRNb2RpZnkoX3AxMi5fMCk7CisgICAgICAgIH0KKyAgICB9
KTsKK3ZhciBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJE1vbml0b3IgPSBmdW5jdGlv
biAoYSkgeworICAgIHJldHVybiB7Y3RvcjogJ01vbml0b3InLCBfMDogYX07Cit9OwordmFyIF9l
bG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kcHJvZ3JhbVdpdGhGbGFncyA9IEYyKAorICAg
IGZ1bmN0aW9uIChfcDEzLCBzdHVmZikgeworICAgICAgICB2YXIgX3AxNCA9IF9wMTM7CisgICAg
ICAgIHZhciBfcDE2ID0gX3AxNC5fMDsKKyAgICAgICAgdmFyIGxvY2F0aW9uID0gX2VsbV9sYW5n
JG5hdmlnYXRpb24kTmF0aXZlX05hdmlnYXRpb24uZ2V0TG9jYXRpb24oCisgICAgICAgICAgICB7
Y3RvcjogJ19UdXBsZTAnfSk7CisgICAgICAgIHZhciBpbml0ID0gZnVuY3Rpb24gKGZsYWdzKSB7
CisgICAgICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJG5hdmln
YXRpb24kTmF2aWdhdGlvbiR1cGRhdGVIZWxwLAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRu
YXZpZ2F0aW9uJE5hdmlnYXRpb24kVXNlck1zZywKKyAgICAgICAgICAgICAgICBBMigKKyAgICAg
ICAgICAgICAgICAgICAgc3R1ZmYuaW5pdCwKKyAgICAgICAgICAgICAgICAgICAgZmxhZ3MsCisg
ICAgICAgICAgICAgICAgICAgIF9wMTYobG9jYXRpb24pKSk7CisgICAgICAgIH07CisgICAgICAg
IHZhciB2aWV3ID0gZnVuY3Rpb24gKG1vZGVsKSB7CisgICAgICAgICAgICByZXR1cm4gQTIoCisg
ICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9BcHAkbWFwLAorICAgICAgICAgICAg
ICAgIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kVXNlck1zZywKKyAgICAgICAgICAg
ICAgICBzdHVmZi52aWV3KG1vZGVsKSk7CisgICAgICAgIH07CisgICAgICAgIHZhciBzdWJzID0g
ZnVuY3Rpb24gKG1vZGVsKSB7CisgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkUGxh
dGZvcm1fU3ViJGJhdGNoKAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9M
aXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAg
ICAgICAgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRzdWJzY3JpcHRpb24oCisgICAg
ICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJE1vbml0
b3IoX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRDaGFuZ2UpKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUk
UGxhdGZvcm1fU3ViJG1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRuYXZp
Z2F0aW9uJE5hdmlnYXRpb24kVXNlck1zZywKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0dWZm
LnN1YnNjcmlwdGlvbnMobW9kZWwpKQorICAgICAgICAgICAgICAgICAgICBdKSk7CisgICAgICAg
IH07CisgICAgICAgIHZhciB1cGRhdGUgPSBGMigKKyAgICAgICAgICAgIGZ1bmN0aW9uIChtc2cs
IG1vZGVsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgICAgICAg
ICBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJHVwZGF0ZUhlbHAsCisgICAgICAgICAg
ICAgICAgICAgIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kVXNlck1zZywKKyAgICAg
ICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IF9wMTUgPSBtc2c7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3AxNS5jdG9yID09PSAn
Q2hhbmdlJykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1ZmYudXJsVXBkYXRlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfcDE2KF9wMTUuXzApLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtb2RlbCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBMihzdHVmZi51cGRhdGUsIF9wMTUuXzAs
IG1vZGVsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fSgpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGh0bWwkSHRt
bF9BcHAkcHJvZ3JhbVdpdGhGbGFncygKKyAgICAgICAgICAgIHtpbml0OiBpbml0LCB2aWV3OiB2
aWV3LCB1cGRhdGU6IHVwZGF0ZSwgc3Vic2NyaXB0aW9uczogc3Vic30pOworICAgIH0pOwordmFy
IF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kcHJvZ3JhbSA9IEYyKAorICAgIGZ1bmN0
aW9uIChwYXJzZXIsIHN0dWZmKSB7CisgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgIF9l
bG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kcHJvZ3JhbVdpdGhGbGFncywKKyAgICAgICAg
ICAgIHBhcnNlciwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy51cGRh
dGUoCisgICAgICAgICAgICAgICAgc3R1ZmYsCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBpbml0OiBmdW5jdGlvbiAoX3AxNykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHN0dWZmLmluaXQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9KSk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRz
dWJNYXAgPSBGMigKKyAgICBmdW5jdGlvbiAoZnVuYywgX3AxOCkgeworICAgICAgICB2YXIgX3Ax
OSA9IF9wMTg7CisgICAgICAgIHJldHVybiBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9u
JE1vbml0b3IoCisgICAgICAgICAgICBmdW5jdGlvbiAoX3AyMCkgeworICAgICAgICAgICAgICAg
IHJldHVybiBmdW5jKAorICAgICAgICAgICAgICAgICAgICBfcDE5Ll8wKF9wMjApKTsKKyAgICAg
ICAgICAgIH0pOworICAgIH0pOworX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1BsYXRmb3JtLmVmZmVj
dE1hbmFnZXJzWydOYXZpZ2F0aW9uJ10gPSB7cGtnOiAnZWxtLWxhbmcvbmF2aWdhdGlvbicsIGlu
aXQ6IF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kaW5pdCwgb25FZmZlY3RzOiBfZWxt
X2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJG9uRWZmZWN0cywgb25TZWxmTXNnOiBfZWxtX2xh
bmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJG9uU2VsZk1zZywgdGFnOiAnZngnLCBjbWRNYXA6IF9l
bG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kY21kTWFwLCBzdWJNYXA6IF9lbG1fbGFuZyRu
YXZpZ2F0aW9uJE5hdmlnYXRpb24kc3ViTWFwfTsKKwordmFyIF9ldmFuY3okZWxtX3RvZG9tdmMk
VG9kb19UYXNrJG9uRmluaXNoID0gRjIoCisgICAgZnVuY3Rpb24gKGVudGVyTWVzc2FnZSwgZXNj
YXBlTWVzc2FnZSkgeworICAgICAgICB2YXIgc2VsZWN0ID0gZnVuY3Rpb24gKGtleSkgeworICAg
ICAgICAgICAgdmFyIF9wMCA9IGtleTsKKyAgICAgICAgICAgIGlmIChfcDAgPT09IDEzKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGVudGVyTWVzc2FnZTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGVzY2FwZU1lc3NhZ2U7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH07CisgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgIF9lbG1fbGFuZyRodG1s
JEh0bWxfRXZlbnRzJG9uLAorICAgICAgICAgICAgJ2tleWRvd24nLAorICAgICAgICAgICAgQTIo
X2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkbWFwLCBzZWxlY3QsIF9lbG1fbGFuZyRodG1sJEh0
bWxfRXZlbnRzJGtleUNvZGUpKTsKKyAgICB9KTsKK3ZhciBfZXZhbmN6JGVsbV90b2RvbXZjJFRv
ZG9fVGFzayR1cGRhdGUgPSBGMigKKyAgICBmdW5jdGlvbiAobXNnLCBtb2RlbCkgeworICAgICAg
ICB2YXIgX3AxID0gbXNnOworICAgICAgICBzd2l0Y2ggKF9wMS5jdG9yKSB7CisgICAgICAgICAg
ICBjYXNlICdGb2N1cyc6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE1h
eWJlJEp1c3QoCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGls
cy51cGRhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0czogX2VsbV9sYW5n
JGNvcmUkTWF5YmUkSnVzdChtb2RlbC5kZXNjcmlwdGlvbikKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0pKTsKKyAgICAgICAgICAgIGNhc2UgJ0VkaXQnOgorICAgICAgICAgICAgICAgIHJldHVy
biBfZWxtX2xhbmckY29yZSRNYXliZSRKdXN0KAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xh
bmckY29yZSROYXRpdmVfVXRpbHMudXBkYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgbW9k
ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWRpdHM6IF9lbG1fbGFuZyRjb3JlJE1heWJlJEp1c3QoX3AxLl8wKQorICAgICAgICAgICAg
ICAgICAgICAgICAgfSkpOworICAgICAgICAgICAgY2FzZSAnQ2FuY2VsJzoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTWF5YmUkSnVzdCgKKyAgICAgICAgICAgICAgICAg
ICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLnVwZGF0ZSgKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1vZGVsLAorICAgICAgICAgICAgICAgICAgICAgICAge2VkaXRzOiBfZWxtX2xhbmck
Y29yZSRNYXliZSROb3RoaW5nfSkpOworICAgICAgICAgICAgY2FzZSAnQ29tbWl0JzoKKyAgICAg
ICAgICAgICAgICB2YXIgX3AyID0gbW9kZWwuZWRpdHM7CisgICAgICAgICAgICAgICAgaWYgKF9w
Mi5jdG9yID09PSAnTm90aGluZycpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1f
bGFuZyRjb3JlJE1heWJlJEp1c3QobW9kZWwpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIHZhciBkZXNjcmlwdGlvbiA9IF9lbG1fbGFuZyRjb3JlJFN0cmlu
ZyR0cmltKF9wMi5fMCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29y
ZSRTdHJpbmckaXNFbXB0eShkZXNjcmlwdGlvbikgPyBfZWxtX2xhbmckY29yZSRNYXliZSROb3Ro
aW5nIDogX2VsbV9sYW5nJGNvcmUkTWF5YmUkSnVzdCgKKyAgICAgICAgICAgICAgICAgICAgICAg
IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy51cGRhdGUoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbW9kZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAge2VkaXRzOiBfZWxt
X2xhbmckY29yZSRNYXliZSROb3RoaW5nLCBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb259KSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSAnQ29tcGxldGVkJzoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTWF5YmUkSnVzdCgKKyAgICAgICAgICAgICAg
ICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLnVwZGF0ZSgKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1vZGVsLAorICAgICAgICAgICAgICAgICAgICAgICAge2NvbXBsZXRlZDogX3Ax
Ll8wfSkpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gX2Vs
bV9sYW5nJGNvcmUkTWF5YmUkTm90aGluZzsKKyAgICAgICAgfQorICAgIH0pOwordmFyIF9ldmFu
Y3okZWxtX3RvZG9tdmMkVG9kb19UYXNrJGluaXQgPSBGMigKKyAgICBmdW5jdGlvbiAoZGVzYywg
aWQpIHsKKyAgICAgICAgcmV0dXJuIHtkZXNjcmlwdGlvbjogZGVzYywgY29tcGxldGVkOiBmYWxz
ZSwgZWRpdHM6IF9lbG1fbGFuZyRjb3JlJE1heWJlJE5vdGhpbmcsIGlkOiBpZH07CisgICAgfSk7
Cit2YXIgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvX1Rhc2skTW9kZWwgPSBGNCgKKyAgICBmdW5j
dGlvbiAoYSwgYiwgYywgZCkgeworICAgICAgICByZXR1cm4ge2Rlc2NyaXB0aW9uOiBhLCBjb21w
bGV0ZWQ6IGIsIGVkaXRzOiBjLCBpZDogZH07CisgICAgfSk7Cit2YXIgX2V2YW5jeiRlbG1fdG9k
b212YyRUb2RvX1Rhc2skRGVsZXRlID0ge2N0b3I6ICdEZWxldGUnfTsKK3ZhciBfZXZhbmN6JGVs
bV90b2RvbXZjJFRvZG9fVGFzayRDb21wbGV0ZWQgPSBmdW5jdGlvbiAoYSkgeworICAgIHJldHVy
biB7Y3RvcjogJ0NvbXBsZXRlZCcsIF8wOiBhfTsKK307Cit2YXIgX2V2YW5jeiRlbG1fdG9kb212
YyRUb2RvX1Rhc2skQ29tbWl0ID0ge2N0b3I6ICdDb21taXQnfTsKK3ZhciBfZXZhbmN6JGVsbV90
b2RvbXZjJFRvZG9fVGFzayRDYW5jZWwgPSB7Y3RvcjogJ0NhbmNlbCd9OwordmFyIF9ldmFuY3ok
ZWxtX3RvZG9tdmMkVG9kb19UYXNrJEVkaXQgPSBmdW5jdGlvbiAoYSkgeworICAgIHJldHVybiB7
Y3RvcjogJ0VkaXQnLCBfMDogYX07Cit9OwordmFyIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kb19U
YXNrJEZvY3VzID0gZnVuY3Rpb24gKGEpIHsKKyAgICByZXR1cm4ge2N0b3I6ICdGb2N1cycsIF8w
OiBhfTsKK307Cit2YXIgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvX1Rhc2skdmlldyA9IGZ1bmN0
aW9uIChtb2RlbCkgeworICAgIHZhciBlbGVtZW50SWQgPSBBMigKKyAgICAgICAgX2VsbV9sYW5n
JGNvcmUkQmFzaWNzX29wc1snKysnXSwKKyAgICAgICAgJ3RvZG8tJywKKyAgICAgICAgX2VsbV9s
YW5nJGNvcmUkQmFzaWNzJHRvU3RyaW5nKG1vZGVsLmlkKSk7CisgICAgdmFyIGRlc2NyaXB0aW9u
ID0gQTIoX2VsbV9sYW5nJGNvcmUkTWF5YmUkd2l0aERlZmF1bHQsIG1vZGVsLmRlc2NyaXB0aW9u
LCBtb2RlbC5lZGl0cyk7CisgICAgdmFyIGNsYXNzTmFtZSA9IEEyKAorICAgICAgICBfZWxtX2xh
bmckY29yZSRCYXNpY3Nfb3BzWycrKyddLAorICAgICAgICBtb2RlbC5jb21wbGV0ZWQgPyAnY29t
cGxldGVkICcgOiAnJywKKyAgICAgICAgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIF9w
MyA9IG1vZGVsLmVkaXRzOworICAgICAgICAgICAgaWYgKF9wMy5jdG9yID09PSAnSnVzdCcpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gJ2VkaXRpbmcnOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gJyc7CisgICAgICAgICAgICB9CisgICAgICAgIH0oKSk7
CisgICAgcmV0dXJuIEEyKAorICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sJGxpLAorICAgICAg
ICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICBbCisg
ICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGNsYXNzKGNsYXNz
TmFtZSkKKyAgICAgICAgICAgIF0pLAorICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlz
dC5mcm9tQXJyYXkoCisgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgQTIoCisgICAgICAg
ICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbCRkaXYsCisgICAgICAgICAgICAgICAgX2VsbV9s
YW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICBbCisg
ICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkY2xh
c3MoJ3ZpZXcnKQorICAgICAgICAgICAgICAgICAgICBdKSwKKyAgICAgICAgICAgICAgICBfZWxt
X2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgICAgIFsK
KyAgICAgICAgICAgICAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgICAgICAgICAgX2Vs
bV9sYW5nJGh0bWwkSHRtbCRpbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFu
ZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxf
QXR0cmlidXRlcyRjbGFzcygndG9nZ2xlJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyR0eXBlJCgnY2hlY2tib3gnKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1
dGVzJGNoZWNrZWQobW9kZWwuY29tcGxldGVkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMkb25DbGljaygKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvX1Rhc2skQ29tcGxldGVk
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFz
aWNzJG5vdChtb2RlbC5jb21wbGV0ZWQpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBd
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZy
b21BcnJheSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSkpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRI
dG1sJGxhYmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZl
X0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMkb25Eb3Vi
bGVDbGljaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2V2YW5jeiRlbG1fdG9k
b212YyRUb2RvX1Rhc2skRm9jdXMoZWxlbWVudElkKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9M
aXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWwkdGV4dChkZXNjcmlwdGlv
bikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSksCisgICAgICAgICAgICAgICAgICAg
ICAgICBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWwkYnV0
dG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3Qu
ZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGNsYXNzKCdk
ZXN0cm95JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1s
JEh0bWxfRXZlbnRzJG9uQ2xpY2soX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvX1Rhc2skRGVsZXRl
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAorICAgICAgICAgICAgICAgICAgICAg
ICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFtdKSkKKyAgICAgICAgICAgICAgICAgICAgXSkpLAorICAgICAgICAgICAg
ICAgIEEyKAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWwkaW5wdXQsCisgICAg
ICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAg
ICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRI
dG1sX0F0dHJpYnV0ZXMkY2xhc3MoJ2VkaXQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9l
bG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyR2YWx1ZShkZXNjcmlwdGlvbiksCisgICAgICAg
ICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkbmFtZSgndGl0
bGUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmli
dXRlcyRpZChlbGVtZW50SWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0
bWwkSHRtbF9FdmVudHMkb25JbnB1dChfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG9fVGFzayRFZGl0
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfRXZlbnRzJG9u
Qmx1cihfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG9fVGFzayRDb21taXQpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgQTIoX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvX1Rhc2skb25GaW5pc2gsIF9l
dmFuY3okZWxtX3RvZG9tdmMkVG9kb19UYXNrJENvbW1pdCwgX2V2YW5jeiRlbG1fdG9kb212YyRU
b2RvX1Rhc2skQ2FuY2VsKQorICAgICAgICAgICAgICAgICAgICBdKSwKKyAgICAgICAgICAgICAg
ICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAg
ICAgIFtdKSkKKyAgICAgICAgICAgIF0pKTsKK307CisKK3ZhciBfZXZhbmN6JGVsbV90b2RvbXZj
JFRvZG8kc3Vic2NyaXB0aW9ucyA9IGZ1bmN0aW9uIChtb2RlbCkgeworICAgIHJldHVybiBfZWxt
X2xhbmckY29yZSRQbGF0Zm9ybV9TdWIkbm9uZTsKK307Cit2YXIgX2V2YW5jeiRlbG1fdG9kb212
YyRUb2RvJGZyb21VcmwgPSBmdW5jdGlvbiAoaGFzaCkgeworICAgIHZhciBjbGVhbkhhc2ggPSBB
MihfZWxtX2xhbmckY29yZSRTdHJpbmckZHJvcExlZnQsIDIsIGhhc2gpOworICAgIHJldHVybiBf
ZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuZXEoCisgICAgICAgIEEyKAorICAgICAgICAgICAg
X2VsbV9sYW5nJGNvcmUkTGlzdCRtZW1iZXIsCisgICAgICAgICAgICBjbGVhbkhhc2gsCisgICAg
ICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAg
ICAgICAgWydhbGwnLCAnYWN0aXZlJywgJ2NvbXBsZXRlZCddKSksCisgICAgICAgIHRydWUpID8g
X2VsbV9sYW5nJGNvcmUkTWF5YmUkSnVzdChjbGVhbkhhc2gpIDogX2VsbV9sYW5nJGNvcmUkTWF5
YmUkTm90aGluZzsKK307Cit2YXIgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJHVybFBhcnNlciA9
IF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kbWFrZVBhcnNlcigKKyAgICBmdW5jdGlv
biAoX3AwKSB7CisgICAgICAgIHJldHVybiBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8kZnJvbVVy
bCgKKyAgICAgICAgICAgIGZ1bmN0aW9uIChfKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIF8u
aGFzaDsKKyAgICAgICAgICAgIH0oX3AwKSk7CisgICAgfSk7Cit2YXIgX2V2YW5jeiRlbG1fdG9k
b212YyRUb2RvJHRvVXJsID0gZnVuY3Rpb24gKHZpc2liaWxpdHkpIHsKKyAgICByZXR1cm4gQTIo
CisgICAgICAgIF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHNbJysrJ10sCisgICAgICAgICcjLycs
CisgICAgICAgIF9lbG1fbGFuZyRjb3JlJFN0cmluZyR0b0xvd2VyKHZpc2liaWxpdHkpKTsKK307
Cit2YXIgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJGluZm9Gb290ZXIgPSBBMigKKyAgICBfZWxt
X2xhbmckaHRtbCRIdG1sJGZvb3RlciwKKyAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5m
cm9tQXJyYXkoCisgICAgICAgIFsKKyAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0
cmlidXRlcyRjbGFzcygnaW5mbycpCisgICAgICAgIF0pLAorICAgIF9lbG1fbGFuZyRjb3JlJE5h
dGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgWworICAgICAgICAgICAgQTIoCisgICAgICAg
ICAgICBfZWxtX2xhbmckaHRtbCRIdG1sJHAsCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRO
YXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgW10pLAorICAgICAgICAgICAg
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgIFsK
KyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbCR0ZXh0KCdEb3VibGUtY2xp
Y2sgdG8gZWRpdCBhIHRvZG8nKQorICAgICAgICAgICAgICAgIF0pKSwKKyAgICAgICAgICAgIEEy
KAorICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbCRwLAorICAgICAgICAgICAgX2VsbV9s
YW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgIFtdKSwKKyAg
ICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAg
ICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWwkdGV4dCgn
V3JpdHRlbiBieSAnKSwKKyAgICAgICAgICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAg
ICAgIF9lbG1fbGFuZyRodG1sJEh0bWwkYSwKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5n
JGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICAgICAgWwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRl
cyRocmVmKCdodHRwczovL2dpdGh1Yi5jb20vZXZhbmN6JykKKyAgICAgICAgICAgICAgICAgICAg
ICAgIF0pLAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5m
cm9tQXJyYXkoCisgICAgICAgICAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbCR0ZXh0KCdFdmFuIEN6YXBsaWNraScpCisgICAg
ICAgICAgICAgICAgICAgICAgICBdKSkKKyAgICAgICAgICAgICAgICBdKSksCisgICAgICAgICAg
ICBBMigKKyAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWwkcCwKKyAgICAgICAgICAgIF9l
bG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICBbXSks
CisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAg
ICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sJHRl
eHQoJ1BhcnQgb2YgJyksCisgICAgICAgICAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAg
ICAgICBfZWxtX2xhbmckaHRtbCRIdG1sJGEsCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFu
ZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICAgICAgICAgIFsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0
ZXMkaHJlZignaHR0cDovL3RvZG9tdmMuY29tJykKKyAgICAgICAgICAgICAgICAgICAgICAgIF0p
LAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJy
YXkoCisgICAgICAgICAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX2VsbV9sYW5nJGh0bWwkSHRtbCR0ZXh0KCdUb2RvTVZDJykKKyAgICAgICAgICAgICAgICAg
ICAgICAgIF0pKQorICAgICAgICAgICAgICAgIF0pKQorICAgICAgICBdKSk7Cit2YXIgX2V2YW5j
eiRlbG1fdG9kb212YyRUb2RvJGVtcHR5TW9kZWwgPSB7CisgICAgdGFza3M6IF9lbG1fbGFuZyRj
b3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgW10pLAorICAgIHZpc2liaWxpdHk6
ICdBbGwnLAorICAgIGZpZWxkOiAnJywKKyAgICB1aWQ6IDAKK307Cit2YXIgX2V2YW5jeiRlbG1f
dG9kb212YyRUb2RvJHNhdmUgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfUGxhdGZvcm0ub3V0Z29p
bmdQb3J0KAorICAgICdzYXZlJywKKyAgICBmdW5jdGlvbiAodikgeworICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgdGFza3M6IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LnRvQXJyYXko
di50YXNrcykubWFwKAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uICh2KSB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjog
di5kZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZDogdi5jb21w
bGV0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICBlZGl0czogKHYuZWRpdHMuY3RvciA9PT0g
J05vdGhpbmcnKSA/IG51bGwgOiB2LmVkaXRzLl8wLAorICAgICAgICAgICAgICAgICAgICAgICAg
aWQ6IHYuaWQKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9KSwKKyAg
ICAgICAgICAgIGZpZWxkOiB2LmZpZWxkLAorICAgICAgICAgICAgdWlkOiB2LnVpZCwKKyAgICAg
ICAgICAgIHZpc2liaWxpdHk6IHYudmlzaWJpbGl0eQorICAgICAgICB9OworICAgIH0pOwordmFy
IF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyRNb2RlbCA9IEY0KAorICAgIGZ1bmN0aW9uIChhLCBi
LCBjLCBkKSB7CisgICAgICAgIHJldHVybiB7dGFza3M6IGEsIGZpZWxkOiBiLCB1aWQ6IGMsIHZp
c2liaWxpdHk6IGR9OworICAgIH0pOwordmFyIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyRDaGFu
Z2VWaXNpYmlsaXR5ID0gZnVuY3Rpb24gKGEpIHsKKyAgICByZXR1cm4ge2N0b3I6ICdDaGFuZ2VW
aXNpYmlsaXR5JywgXzA6IGF9OworfTsKK3ZhciBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8kdmlz
aWJpbGl0eVN3YXAgPSBGMygKKyAgICBmdW5jdGlvbiAodXJpLCB2aXNpYmlsaXR5LCBhY3R1YWxW
aXNpYmlsaXR5KSB7CisgICAgICAgIHZhciBjbGFzc05hbWUgPSBfZWxtX2xhbmckY29yZSROYXRp
dmVfVXRpbHMuZXEodmlzaWJpbGl0eSwgYWN0dWFsVmlzaWJpbGl0eSkgPyAnc2VsZWN0ZWQnIDog
Jyc7CisgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWwk
bGksCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisg
ICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1s
X0V2ZW50cyRvbkNsaWNrKAorICAgICAgICAgICAgICAgICAgICBfZXZhbmN6JGVsbV90b2RvbXZj
JFRvZG8kQ2hhbmdlVmlzaWJpbGl0eSh2aXNpYmlsaXR5KSkKKyAgICAgICAgICAgICAgICBdKSwK
KyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAg
ICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgICAg
ICBfZWxtX2xhbmckaHRtbCRIdG1sJGEsCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRj
b3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICAgICAgICAgIFsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMk
Y2xhc3MoY2xhc3NOYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmck
aHRtbCRIdG1sX0F0dHJpYnV0ZXMkaHJlZih1cmkpCisgICAgICAgICAgICAgICAgICAgICAgICBd
KSwKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFy
cmF5KAorICAgICAgICAgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9lbG1fbGFuZyRodG1sJEh0bWwkdGV4dCh2aXNpYmlsaXR5KQorICAgICAgICAgICAgICAg
ICAgICAgICAgXSkpCisgICAgICAgICAgICAgICAgXSkpOworICAgIH0pOwordmFyIF9ldmFuY3ok
ZWxtX3RvZG9tdmMkVG9kbyRDaGVja0FsbCA9IGZ1bmN0aW9uIChhKSB7CisgICAgcmV0dXJuIHtj
dG9yOiAnQ2hlY2tBbGwnLCBfMDogYX07Cit9OwordmFyIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9k
byREZWxldGVDb21wbGV0ZSA9IHtjdG9yOiAnRGVsZXRlQ29tcGxldGUnfTsKK3ZhciBfZXZhbmN6
JGVsbV90b2RvbXZjJFRvZG8kY29udHJvbHMgPSBGMigKKyAgICBmdW5jdGlvbiAodmlzaWJpbGl0
eSwgdGFza3MpIHsKKyAgICAgICAgdmFyIHRhc2tzQ29tcGxldGVkID0gX2VsbV9sYW5nJGNvcmUk
TGlzdCRsZW5ndGgoCisgICAgICAgICAgICBBMigKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmck
Y29yZSRMaXN0JGZpbHRlciwKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiAoXykgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gXy5jb21wbGV0ZWQ7CisgICAgICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgICAgICB0YXNrcykpOworICAgICAgICB2YXIgdGFza3NMZWZ0ID0gX2VsbV9sYW5n
JGNvcmUkTGlzdCRsZW5ndGgodGFza3MpIC0gdGFza3NDb21wbGV0ZWQ7CisgICAgICAgIHZhciBp
dGVtXyA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5lcSh0YXNrc0xlZnQsIDEpID8gJyBp
dGVtJyA6ICcgaXRlbXMnOworICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICBfZWxtX2xh
bmckaHRtbCRIdG1sJGZvb3RlciwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9M
aXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgIF9l
bG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRjbGFzcygnZm9vdGVyJyksCisgICAgICAgICAg
ICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRoaWRkZW4oCisgICAgICAg
ICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3QkaXNFbXB0eSh0YXNrcykpCisgICAgICAg
ICAgICAgICAgXSksCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9t
QXJyYXkoCisgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICBBMigKKyAgICAg
ICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbCRzcGFuLAorICAgICAgICAgICAgICAg
ICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAg
ICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwk
SHRtbF9BdHRyaWJ1dGVzJGNsYXNzKCd0b2RvLWNvdW50JykKKyAgICAgICAgICAgICAgICAgICAg
ICAgIF0pLAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5m
cm9tQXJyYXkoCisgICAgICAgICAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwk
SHRtbCRzdHJvbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUk
TmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBb
XSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xp
c3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sJHRleHQoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRCYXNpY3Mk
dG9TdHJpbmcodGFza3NMZWZ0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWwkdGV4dCgK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBMihfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3Bz
WycrKyddLCBpdGVtXywgJyBsZWZ0JykpCisgICAgICAgICAgICAgICAgICAgICAgICBdKSksCisg
ICAgICAgICAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRt
bCRIdG1sJHVsLAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlz
dC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGNsYXNzKCdmaWx0ZXJz
JykKKyAgICAgICAgICAgICAgICAgICAgICAgIF0pLAorICAgICAgICAgICAgICAgICAgICBfZWxt
X2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgICAgICAg
ICBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQTMoX2V2YW5jeiRlbG1fdG9kb212YyRU
b2RvJHZpc2liaWxpdHlTd2FwLCAnIy8nLCAnQWxsJywgdmlzaWJpbGl0eSksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbCR0ZXh0KCcgJyksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQTMoX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJHZpc2liaWxp
dHlTd2FwLCAnIy9hY3RpdmUnLCAnQWN0aXZlJywgdmlzaWJpbGl0eSksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbCR0ZXh0KCcgJyksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQTMoX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJHZpc2liaWxpdHlT
d2FwLCAnIy9jb21wbGV0ZWQnLCAnQ29tcGxldGVkJywgdmlzaWJpbGl0eSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIF0pKSwKKyAgICAgICAgICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAg
ICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWwkYnV0dG9uLAorICAgICAgICAgICAgICAgICAgICBf
ZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgICAg
ICAgICBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9B
dHRyaWJ1dGVzJGNsYXNzKCdjbGVhci1jb21wbGV0ZWQnKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkaGlkZGVuKAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5lcSh0YXNrc0Nv
bXBsZXRlZCwgMCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1s
JEh0bWxfRXZlbnRzJG9uQ2xpY2soX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJERlbGV0ZUNvbXBs
ZXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgXSksCisgICAgICAgICAgICAgICAgICAgIF9l
bG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sJHRl
eHQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHNbJysrJ10sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdDbGVhciBjb21wbGV0ZWQgKCcsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1snKysnXSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyR0b1N0cmluZyh0YXNrc0NvbXBs
ZXRlZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKScpKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIF0pKQorICAgICAgICAgICAgICAgIF0pKTsKKyAgICB9KTsKK3Zh
ciBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8kVXBkYXRlVGFzayA9IGZ1bmN0aW9uIChhKSB7Cisg
ICAgcmV0dXJuIHtjdG9yOiAnVXBkYXRlVGFzaycsIF8wOiBhfTsKK307Cit2YXIgX2V2YW5jeiRl
bG1fdG9kb212YyRUb2RvJHRhc2tMaXN0ID0gRjIoCisgICAgZnVuY3Rpb24gKHZpc2liaWxpdHks
IHRhc2tzKSB7CisgICAgICAgIHZhciBjc3NWaXNpYmlsaXR5ID0gX2VsbV9sYW5nJGNvcmUkTGlz
dCRpc0VtcHR5KHRhc2tzKSA/ICdoaWRkZW4nIDogJ3Zpc2libGUnOworICAgICAgICB2YXIgYWxs
Q29tcGxldGVkID0gQTIoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRMaXN0JGFsbCwKKyAg
ICAgICAgICAgIGZ1bmN0aW9uIChfKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIF8uY29tcGxl
dGVkOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHRhc2tzKTsKKyAgICAgICAgdmFyIGlz
VmlzaWJsZSA9IGZ1bmN0aW9uICh0b2RvKSB7CisgICAgICAgICAgICB2YXIgX3AxID0gdmlzaWJp
bGl0eTsKKyAgICAgICAgICAgIHN3aXRjaCAoX3AxKSB7CisgICAgICAgICAgICAgICAgY2FzZSAn
Q29tcGxldGVkJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvZG8uY29tcGxldGVkOwor
ICAgICAgICAgICAgICAgIGNhc2UgJ0FjdGl2ZSc6CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBfZWxtX2xhbmckY29yZSRCYXNpY3Mkbm90KHRvZG8uY29tcGxldGVkKTsKKyAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgX2VsbV9s
YW5nJGh0bWwkSHRtbCRzZWN0aW9uLAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZl
X0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAg
X2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGNsYXNzKCdtYWluJyksCisgICAgICAgICAg
ICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHlsZSgKKyAgICAgICAg
ICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAg
ICAgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjdG9yOiAn
X1R1cGxlMicsIF8wOiAndmlzaWJpbGl0eScsIF8xOiBjc3NWaXNpYmlsaXR5fQorICAgICAgICAg
ICAgICAgICAgICAgICAgXSkpCisgICAgICAgICAgICAgICAgXSksCisgICAgICAgICAgICBfZWxt
X2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgWworICAg
ICAgICAgICAgICAgICAgICBBMigKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwk
SHRtbCRpbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xp
c3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRjbGFzcygndG9nZ2xl
LWFsbCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxf
QXR0cmlidXRlcyR0eXBlJCgnY2hlY2tib3gnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkbmFtZSgndG9nZ2xlJyksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGNoZWNr
ZWQoYWxsQ29tcGxldGVkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmck
aHRtbCRIdG1sX0V2ZW50cyRvbkNsaWNrKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9l
dmFuY3okZWxtX3RvZG9tdmMkVG9kbyRDaGVja0FsbCgKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJG5vdChhbGxDb21wbGV0ZWQpKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIF0pLAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29y
ZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgICAgICAgICBbXSkpLAor
ICAgICAgICAgICAgICAgICAgICBBMigKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0
bWwkSHRtbCRsYWJlbCwKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZl
X0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICAgICAgWworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRmb3IoJ3RvZ2ds
ZS1hbGwnKQorICAgICAgICAgICAgICAgICAgICAgICAgXSksCisgICAgICAgICAgICAgICAgICAg
IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1s
JHRleHQoJ01hcmsgYWxsIGFzIGNvbXBsZXRlJykKKyAgICAgICAgICAgICAgICAgICAgICAgIF0p
KSwKKyAgICAgICAgICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFu
ZyRodG1sJEh0bWwkdWwsCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2
ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkY2xhc3MoJ3Rv
ZG8tbGlzdCcpCisgICAgICAgICAgICAgICAgICAgICAgICBdKSwKKyAgICAgICAgICAgICAgICAg
ICAgQTIoCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRMaXN0JG1hcCwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICh0YXNrKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIHRhc2tWaWV3ID0gX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvX1Rh
c2skdmlldyh0YXNrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaWQgPSB0YXNr
LmlkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9BcHAkbWFwLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAobXNnKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJFVw
ZGF0ZVRhc2soCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2N0b3I6
ICdfVHVwbGUyJywgXzA6IGlkLCBfMTogbXNnfSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tWaWV3KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICBBMihfZWxt
X2xhbmckY29yZSRMaXN0JGZpbHRlciwgaXNWaXNpYmxlLCB0YXNrcykpKQorICAgICAgICAgICAg
ICAgIF0pKTsKKyAgICB9KTsKK3ZhciBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8kQWRkID0ge2N0
b3I6ICdBZGQnfTsKK3ZhciBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8kVXBkYXRlRmllbGQgPSBm
dW5jdGlvbiAoYSkgeworICAgIHJldHVybiB7Y3RvcjogJ1VwZGF0ZUZpZWxkJywgXzA6IGF9Owor
fTsKK3ZhciBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8kTm9PcCA9IHtjdG9yOiAnTm9PcCd9Owor
dmFyIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyRmb2N1c1Rhc2sgPSBmdW5jdGlvbiAoZWxlbWVu
dElkKSB7CisgICAgcmV0dXJuIEEzKAorICAgICAgICBfZWxtX2xhbmckY29yZSRUYXNrJHBlcmZv
cm0sCisgICAgICAgIGZ1bmN0aW9uIChfcDIpIHsKKyAgICAgICAgICAgIHJldHVybiBfZXZhbmN6
JGVsbV90b2RvbXZjJFRvZG8kTm9PcDsKKyAgICAgICAgfSwKKyAgICAgICAgZnVuY3Rpb24gKF9w
MykgeworICAgICAgICAgICAgcmV0dXJuIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyROb09wOwor
ICAgICAgICB9LAorICAgICAgICBfZWxtX2xhbmckZG9tJERvbSRmb2N1cyhlbGVtZW50SWQpKTsK
K307Cit2YXIgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJHVwZGF0ZSA9IEYyKAorICAgIGZ1bmN0
aW9uIChtc2csIG1vZGVsKSB7CisgICAgICAgIHZhciBfcDQgPSBBMihfZWxtX2xhbmckY29yZSRE
ZWJ1ZyRsb2csICdNRVNTQUdFOiAnLCBtc2cpOworICAgICAgICBzd2l0Y2ggKF9wNC5jdG9yKSB7
CisgICAgICAgICAgICBjYXNlICdOb09wJzoKKyAgICAgICAgICAgICAgICByZXR1cm4ge2N0b3I6
ICdfVHVwbGUyJywgXzA6IG1vZGVsLCBfMTogX2VsbV9sYW5nJGNvcmUkUGxhdGZvcm1fQ21kJG5v
bmV9OworICAgICAgICAgICAgY2FzZSAnVXBkYXRlRmllbGQnOgorICAgICAgICAgICAgICAgIHZh
ciBuZXdNb2RlbCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy51cGRhdGUoCisgICAgICAg
ICAgICAgICAgICAgIG1vZGVsLAorICAgICAgICAgICAgICAgICAgICB7ZmllbGQ6IF9wNC5fMH0p
OworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIGN0b3I6ICdf
VHVwbGUyJywKKyAgICAgICAgICAgICAgICAgICAgXzA6IG5ld01vZGVsLAorICAgICAgICAgICAg
ICAgICAgICBfMTogX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJHNhdmUobW9kZWwpCisgICAgICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgIGNhc2UgJ0FkZCc6CisgICAgICAgICAgICAgICAgdmFy
IGRlc2NyaXB0aW9uID0gX2VsbV9sYW5nJGNvcmUkU3RyaW5nJHRyaW0obW9kZWwuZmllbGQpOwor
ICAgICAgICAgICAgICAgIHZhciBuZXdNb2RlbCA9IF9lbG1fbGFuZyRjb3JlJFN0cmluZyRpc0Vt
cHR5KGRlc2NyaXB0aW9uKSA/IG1vZGVsIDogX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLnVw
ZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgbW9kZWwsCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHVpZDogbW9kZWwudWlkICsgMSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZpZWxkOiAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tzOiBB
MigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3Bz
WycrKyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsLnRhc2tzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJh
eSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQTIoX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvX1Rhc2skaW5pdCwg
ZGVzY3JpcHRpb24sIG1vZGVsLnVpZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XSkpCisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICAgICAgICAgIGN0b3I6ICdfVHVwbGUyJywKKyAgICAgICAgICAgICAgICAgICAg
XzA6IG5ld01vZGVsLAorICAgICAgICAgICAgICAgICAgICBfMTogX2V2YW5jeiRlbG1fdG9kb212
YyRUb2RvJHNhdmUobmV3TW9kZWwpCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGNh
c2UgJ1VwZGF0ZVRhc2snOgorICAgICAgICAgICAgICAgIHZhciBfcDYgPSBfcDQuXzAuXzE7Cisg
ICAgICAgICAgICAgICAgdmFyIHVwZGF0ZVRhc2sgPSBmdW5jdGlvbiAodCkgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmVxKHQuaWQsIF9w
NC5fMC5fMCkgPyBBMihfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG9fVGFzayR1cGRhdGUsIF9wNiwg
dCkgOiBfZWxtX2xhbmckY29yZSRNYXliZSRKdXN0KHQpOworICAgICAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICAgICAgdmFyIG5ld01vZGVsID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxz
LnVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgbW9kZWwsCisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tzOiBBMihfZWxtX2xhbmckY29yZSRMaXN0
JGZpbHRlck1hcCwgdXBkYXRlVGFzaywgbW9kZWwudGFza3MpCisgICAgICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgICAgIHZhciBfcDUgPSBfcDY7CisgICAgICAgICAgICAgICAgaWYg
KF9wNS5jdG9yID09PSAnRm9jdXMnKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBBMigK
KyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFBsYXRmb3JtX0NtZF9vcHNb
JyEnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld01vZGVsLAorICAgICAgICAgICAgICAg
ICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2V2
YW5jeiRlbG1fdG9kb212YyRUb2RvJHNhdmUobmV3TW9kZWwpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8kZm9jdXNUYXNrKF9wNS5fMCkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSk7CisgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGN0b3I6ICdfVHVwbGUyJywKKyAgICAgICAgICAgICAgICAgICAgICAgIF8wOiBuZXdNb2RlbCwK
KyAgICAgICAgICAgICAgICAgICAgICAgIF8xOiBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8kc2F2
ZShuZXdNb2RlbCkKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBjYXNlICdEZWxldGVDb21wbGV0ZSc6CisgICAgICAgICAgICAgICAgdmFyIG5l
d01vZGVsID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLnVwZGF0ZSgKKyAgICAgICAgICAg
ICAgICAgICAgbW9kZWwsCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRhc2tzOiBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmck
Y29yZSRMaXN0JGZpbHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAo
X3A3KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmck
Y29yZSRCYXNpY3Mkbm90KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVu
Y3Rpb24gKF8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gXy5jb21wbGV0ZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KF9w
NykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbW9kZWwudGFza3MpCisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIGN0b3I6ICdfVHVwbGUyJywKKyAg
ICAgICAgICAgICAgICAgICAgXzA6IG5ld01vZGVsLAorICAgICAgICAgICAgICAgICAgICBfMTog
X2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJHNhdmUobmV3TW9kZWwpCisgICAgICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgIGNhc2UgJ0NoZWNrQWxsJzoKKyAgICAgICAgICAgICAgICB2YXIgdXBk
YXRlVGFzayA9IGZ1bmN0aW9uICh0KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZWxt
X2xhbmckY29yZSROYXRpdmVfVXRpbHMudXBkYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAg
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHtjb21wbGV0ZWQ6IF9wNC5fMH0pOworICAgICAg
ICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgdmFyIG5ld01vZGVsID0gX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX1V0aWxzLnVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgbW9kZWwsCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tzOiBBMihfZWxt
X2xhbmckY29yZSRMaXN0JG1hcCwgdXBkYXRlVGFzaywgbW9kZWwudGFza3MpCisgICAgICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAg
ICAgIGN0b3I6ICdfVHVwbGUyJywKKyAgICAgICAgICAgICAgICAgICAgXzA6IG5ld01vZGVsLAor
ICAgICAgICAgICAgICAgICAgICBfMTogX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJHNhdmUobmV3
TW9kZWwpCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgdmFyIG5ld01vZGVsID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLnVwZGF0
ZSgKKyAgICAgICAgICAgICAgICAgICAgbW9kZWwsCisgICAgICAgICAgICAgICAgICAgIHt2aXNp
YmlsaXR5OiBfcDQuXzB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAg
ICAgICAgICBjdG9yOiAnX1R1cGxlMicsCisgICAgICAgICAgICAgICAgICAgIF8wOiBuZXdNb2Rl
bCwKKyAgICAgICAgICAgICAgICAgICAgXzE6IF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyRzYXZl
KG1vZGVsKQorICAgICAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICB9KTsKK3ZhciBfZXZh
bmN6JGVsbV90b2RvbXZjJFRvZG8kdXJsVXBkYXRlID0gRjIoCisgICAgZnVuY3Rpb24gKHJlc3Vs
dCwgbW9kZWwpIHsKKyAgICAgICAgdmFyIF9wOCA9IHJlc3VsdDsKKyAgICAgICAgaWYgKF9wOC5j
dG9yID09PSAnSnVzdCcpIHsKKyAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgICAg
ICBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8kdXBkYXRlLAorICAgICAgICAgICAgICAgIF9ldmFu
Y3okZWxtX3RvZG9tdmMkVG9kbyRDaGFuZ2VWaXNpYmlsaXR5KAorICAgICAgICAgICAgICAgICAg
ICBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJHRvU2VudGVuY2VDYXNl
KF9wOC5fMCkpLAorICAgICAgICAgICAgICAgIG1vZGVsKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgICAgICBfZXZhbmN6JGVsbV90b2RvbXZj
JFRvZG8kdXBkYXRlLAorICAgICAgICAgICAgICAgIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyRD
aGFuZ2VWaXNpYmlsaXR5KCdBbGwnKSwKKyAgICAgICAgICAgICAgICBtb2RlbCk7CisgICAgICAg
IH0KKyAgICB9KTsKK3ZhciBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8kaW5pdCA9IEYyKAorICAg
IGZ1bmN0aW9uIChmbGFncywgdXJsKSB7CisgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAg
IF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyR1cmxVcGRhdGUsCisgICAgICAgICAgICB1cmwsCisg
ICAgICAgICAgICBBMihfZWxtX2xhbmckY29yZSRNYXliZSR3aXRoRGVmYXVsdCwgX2V2YW5jeiRl
bG1fdG9kb212YyRUb2RvJGVtcHR5TW9kZWwsIGZsYWdzKSk7CisgICAgfSk7Cit2YXIgX2V2YW5j
eiRlbG1fdG9kb212YyRUb2RvJHRhc2tFbnRyeSA9IGZ1bmN0aW9uICh0YXNrKSB7CisgICAgcmV0
dXJuIEEyKAorICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sJGhlYWRlciwKKyAgICAgICAgX2Vs
bV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgWworICAgICAg
ICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRjbGFzcygnaGVhZGVyJykK
KyAgICAgICAgICAgIF0pLAorICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9t
QXJyYXkoCisgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAg
ICAgX2VsbV9sYW5nJGh0bWwkSHRtbCRoMSwKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29y
ZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgICAgIFtdKSwKKyAgICAg
ICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAg
ICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0
bWwkdGV4dCgndG9kb3MnKQorICAgICAgICAgICAgICAgICAgICBdKSksCisgICAgICAgICAgICAg
ICAgQTIoCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbCRpbnB1dCwKKyAgICAg
ICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAg
ICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0
bWxfQXR0cmlidXRlcyRjbGFzcygnbmV3LXRvZG8nKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRwbGFjZWhvbGRlcignV2hhdCBuZWVkcyB0
byBiZSBkb25lPycpLAorICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRt
bF9BdHRyaWJ1dGVzJGF1dG9mb2N1cyh0cnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9l
bG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyR2YWx1ZSh0YXNrKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRuYW1lKCduZXdUb2RvJyks
CisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyRvbklu
cHV0KF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyRVcGRhdGVGaWVsZCksCisgICAgICAgICAgICAg
ICAgICAgICAgICBBMihfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG9fVGFzayRvbkZpbmlzaCwgX2V2
YW5jeiRlbG1fdG9kb212YyRUb2RvJEFkZCwgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJE5vT3Ap
CisgICAgICAgICAgICAgICAgICAgIF0pLAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3Jl
JE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICAgICAgW10pKQorICAgICAg
ICAgICAgXSkpOworfTsKK3ZhciBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8kdmlldyA9IGZ1bmN0
aW9uIChtb2RlbCkgeworICAgIHJldHVybiBBMigKKyAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRt
bCRkaXYsCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAg
ICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0
ZXMkY2xhc3MoJ3RvZG9tdmMtd3JhcHBlcicpLAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRo
dG1sJEh0bWxfQXR0cmlidXRlcyRzdHlsZSgKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29y
ZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgICAgIFsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHtjdG9yOiAnX1R1cGxlMicsIF8wOiAndmlzaWJpbGl0eScsIF8xOiAn
aGlkZGVuJ30KKyAgICAgICAgICAgICAgICAgICAgXSkpCisgICAgICAgICAgICBdKSwKKyAgICAg
ICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgWwor
ICAgICAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWwk
c2VjdGlvbiwKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9t
QXJyYXkoCisgICAgICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9l
bG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRjbGFzcygndG9kb2FwcCcpCisgICAgICAgICAg
ICAgICAgICAgIF0pLAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0
LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICAg
ICAgQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9MYXp5JGxhenksIF9ldmFuY3okZWxtX3RvZG9tdmMk
VG9kbyR0YXNrRW50cnksIG1vZGVsLmZpZWxkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEEz
KF9lbG1fbGFuZyRodG1sJEh0bWxfTGF6eSRsYXp5MiwgX2V2YW5jeiRlbG1fdG9kb212YyRUb2Rv
JHRhc2tMaXN0LCBtb2RlbC52aXNpYmlsaXR5LCBtb2RlbC50YXNrcyksCisgICAgICAgICAgICAg
ICAgICAgICAgICBBMyhfZWxtX2xhbmckaHRtbCRIdG1sX0xhenkkbGF6eTIsIF9ldmFuY3okZWxt
X3RvZG9tdmMkVG9kbyRjb250cm9scywgbW9kZWwudmlzaWJpbGl0eSwgbW9kZWwudGFza3MpCisg
ICAgICAgICAgICAgICAgICAgIF0pKSwKKyAgICAgICAgICAgICAgICBfZXZhbmN6JGVsbV90b2Rv
bXZjJFRvZG8kaW5mb0Zvb3RlcgorICAgICAgICAgICAgXSkpOworfTsKK3ZhciBfZXZhbmN6JGVs
bV90b2RvbXZjJFRvZG8kbWFpbiA9IHsKKyAgICBtYWluOiBBMigKKyAgICAgICAgX2VsbV9sYW5n
JG5hdmlnYXRpb24kTmF2aWdhdGlvbiRwcm9ncmFtV2l0aEZsYWdzLAorICAgICAgICBfZXZhbmN6
JGVsbV90b2RvbXZjJFRvZG8kdXJsUGFyc2VyLAorICAgICAgICB7dXJsVXBkYXRlOiBfZXZhbmN6
JGVsbV90b2RvbXZjJFRvZG8kdXJsVXBkYXRlLCB2aWV3OiBfZXZhbmN6JGVsbV90b2RvbXZjJFRv
ZG8kdmlldywgaW5pdDogX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJGluaXQsIHVwZGF0ZTogX2V2
YW5jeiRlbG1fdG9kb212YyRUb2RvJHVwZGF0ZSwgc3Vic2NyaXB0aW9uczogX2V2YW5jeiRlbG1f
dG9kb212YyRUb2RvJHN1YnNjcmlwdGlvbnN9KSwKKyAgICBmbGFnczogX2VsbV9sYW5nJGNvcmUk
SnNvbl9EZWNvZGUkb25lT2YoCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZy
b21BcnJheSgKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRK
c29uX0RlY29kZSRudWxsKF9lbG1fbGFuZyRjb3JlJE1heWJlJE5vdGhpbmcpLAorICAgICAgICAg
ICAgICAgIEEyKAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJG1h
cCwKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRNYXliZSRKdXN0LAorICAgICAgICAg
ICAgICAgIEEyKAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRKc29uX0RlY29k
ZSRhbmRUaGVuLAorICAgICAgICAgICAgICAgICAgICBBMihfZWxtX2xhbmckY29yZSRKc29uX0Rl
Y29kZV9vcHNbJzo9J10sICdmaWVsZCcsIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJHN0cmlu
ZyksCisgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChmaWVsZCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1f
bGFuZyRjb3JlJEpzb25fRGVjb2RlJGFuZFRoZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQTIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJEpz
b25fRGVjb2RlX29wc1snOj0nXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rh
c2tzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkSnNv
bl9EZWNvZGUkbGlzdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEyKAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJEpz
b25fRGVjb2RlJGFuZFRoZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQTIoX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGVfb3BzWyc6PSddLCAnY29tcGxldGVkJywg
X2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkYm9vbCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGNvbXBsZXRlZCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRKc29uX0RlY29k
ZSRhbmRUaGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQTIoX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGVfb3BzWyc6PSddLCAnZGVzY3JpcHRpb24n
LCBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRzdHJpbmcpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGRlc2NyaXB0aW9uKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEEyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRhbmRUaGVuLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBMigKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFu
ZyRjb3JlJEpzb25fRGVjb2RlX29wc1snOj0nXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlZGl0cycsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmck
Y29yZSRKc29uX0RlY29kZSRvbmVPZigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlz
dC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3Jl
JEpzb25fRGVjb2RlJG51bGwoX2VsbV9sYW5nJGNvcmUkTWF5YmUkTm90aGluZyksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBMihfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRtYXAsIF9lbG1fbGFuZyRjb3Jl
JE1heWJlJEp1c3QsIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJHN0cmluZykKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXSkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZnVuY3Rpb24gKGVkaXRzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9s
YW5nJGNvcmUkSnNvbl9EZWNvZGUkYW5kVGhlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBMihfZWxtX2xhbmckY29yZSRK
c29uX0RlY29kZV9vcHNbJzo9J10sICdpZCcsIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJGlu
dCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZnVuY3Rpb24gKGlkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmck
Y29yZSRKc29uX0RlY29kZSRzdWNjZWVkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NvbXBsZXRlZDogY29t
cGxldGVkLCBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sIGVkaXRzOiBlZGl0cywgaWQ6IGlkfSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkp
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAodGFza3MpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkYW5kVGhlbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEyKF9lbG1fbGFuZyRjb3JlJEpzb25f
RGVjb2RlX29wc1snOj0nXSwgJ3VpZCcsIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJGludCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAodWlkKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEEyKAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRKc29u
X0RlY29kZSRhbmRUaGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBBMihfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZV9vcHNbJzo9J10sICd2aXNpYmlsaXR5
JywgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKHZpc2liaWxpdHkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xh
bmckY29yZSRKc29uX0RlY29kZSRzdWNjZWVkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHtmaWVsZDogZmllbGQsIHRhc2tzOiB0YXNrcywgdWlk
OiB1aWQsIHZpc2liaWxpdHk6IHZpc2liaWxpdHl9KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAg
ICAgICAgfSkpCisgICAgICAgICAgICBdKSkKK307CisKK3ZhciBFbG0gPSB7fTsKK0VsbVsnVG9k
byddID0gRWxtWydUb2RvJ10gfHwge307CitfZWxtX2xhbmckY29yZSROYXRpdmVfUGxhdGZvcm0u
YWRkUHVibGljTW9kdWxlKEVsbVsnVG9kbyddLCAnVG9kbycsIHR5cGVvZiBfZXZhbmN6JGVsbV90
b2RvbXZjJFRvZG8kbWFpbiA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogX2V2YW5jeiRlbG1fdG9k
b212YyRUb2RvJG1haW4pOworCitpZiAodHlwZW9mIGRlZmluZSA9PT0gImZ1bmN0aW9uIiAmJiBk
ZWZpbmVbJ2FtZCddKQoreworICBkZWZpbmUoW10sIGZ1bmN0aW9uKCkgeyByZXR1cm4gRWxtOyB9
KTsKKyAgcmV0dXJuOworfQorCitpZiAodHlwZW9mIG1vZHVsZSA9PT0gIm9iamVjdCIpCit7Cisg
IG1vZHVsZVsnZXhwb3J0cyddID0gRWxtOworICByZXR1cm47Cit9CisKK3ZhciBnbG9iYWxFbG0g
PSB0aGlzWydFbG0nXTsKK2lmICh0eXBlb2YgZ2xvYmFsRWxtID09PSAidW5kZWZpbmVkIikKK3sK
KyAgdGhpc1snRWxtJ10gPSBFbG07CisgIHJldHVybjsKK30KKworZm9yICh2YXIgcHVibGljTW9k
dWxlIGluIEVsbSkKK3sKKyAgaWYgKHB1YmxpY01vZHVsZSBpbiBnbG9iYWxFbG0pCisgIHsKKyAg
ICB0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGFyZSB0d28gRWxtIG1vZHVsZXMgY2FsbGVkIGAnICsg
cHVibGljTW9kdWxlICsgJ2Agb24gdGhpcyBwYWdlISBSZW5hbWUgb25lIG9mIHRoZW0uJyk7Cisg
IH0KKyAgZ2xvYmFsRWxtW3B1YmxpY01vZHVsZV0gPSBFbG1bcHVibGljTW9kdWxlXTsKK30KKwor
fSkuY2FsbCh0aGlzKTsKKwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9T
cGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9mdW5jdGlvbmFsLXByb2ctZXhhbXBsZXMv
ZWxtL2luZGV4Lmh0bWwgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4x
L3Jlc291cmNlcy90b2RvbXZjL2Z1bmN0aW9uYWwtcHJvZy1leGFtcGxlcy9lbG0vaW5kZXguaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45OTEzNGEyNWZjNTM5YzhlOGQ1M2U0MTFjZjY4ZGI4N2UzYmVkY2ZmCi0t
LSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIu
MS9yZXNvdXJjZXMvdG9kb212Yy9mdW5jdGlvbmFsLXByb2ctZXhhbXBsZXMvZWxtL2luZGV4Lmh0
bWwKQEAgLTAsMCArMSwzMiBAQAorPCFkb2N0eXBlIGh0bWw+Cis8aHRtbCBsYW5nPSJlbiIgZGF0
YS1mcmFtZXdvcms9ImVsbSI+Cis8aGVhZD4KKyAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cisg
ICAgPHRpdGxlPkVsbSDigKIgVG9kb01WQzwvdGl0bGU+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNo
ZWV0IiBocmVmPSJub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFzZS5jc3MiPgorICAgIDxs
aW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ibm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9p
bmRleC5jc3MiPgorICAgIDxzdHlsZT4KKyAgICAgICAgYm9keSB7CisgICAgICAgICAgICB3aWR0
aDogYXV0bzsKKyAgICAgICAgfQorICAgICAgICAudG9kb212Yy13cmFwcGVyIHsKKyAgICAgICAg
ICAgIHZpc2liaWxpdHk6IHZpc2libGUgIWltcG9ydGFudDsKKyAgICAgICAgfQorICAgIDwvc3R5
bGU+Cis8L2hlYWQ+CisKKzxib2R5PgorPHNjcmlwdCBzcmM9ImRpc3QvZWxtLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQ+CisgICAgKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLy8gdmFyIHJlc3VsdCA9
IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdlbG0tdG9kby1tb2RlbCcpOworICAgICAgICAvLyB2YXIg
c2F2ZWRNb2RlbCA9IHJlc3VsdCA/IEpTT04ucGFyc2UocmVzdWx0KSA6IG51bGw7CisgICAgICAg
IHZhciBzYXZlZE1vZGVsID0gbnVsbDsKKyAgICAgICAgdmFyIHRvZG9tdmMgPSBFbG0uVG9kby5m
dWxsc2NyZWVuKHNhdmVkTW9kZWwpOworICAgICAgICAvLyB0b2RvbXZjLnBvcnRzLnNhdmUuc3Vi
c2NyaWJlKGZ1bmN0aW9uIChtb2RlbCkgeworICAgICAgICAvLyAgbG9jYWxTdG9yYWdlLnNldEl0
ZW0oJ2VsbS10b2RvLW1vZGVsJywgSlNPTi5zdHJpbmdpZnkobW9kZWwpKTsKKyAgICAgICAgLy8g
fSk7CisgICAgfSgpKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
V2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212
Yy9mdW5jdGlvbmFsLXByb2ctZXhhbXBsZXMvZWxtL3JlYWRtZS5tZCBiL1dlYnNpdGVzL2Jyb3dz
ZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvZnVuY3Rpb25hbC1w
cm9nLWV4YW1wbGVzL2VsbS9yZWFkbWUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTE2Nzk5OWNhMmQzYWE5YjY3
NjZlOWE4Y2MxODQ0NjQ2ZDU0MjVmNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dz
ZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvZnVuY3Rpb25hbC1w
cm9nLWV4YW1wbGVzL2VsbS9yZWFkbWUubWQKQEAgLTAsMCArMSw1NiBAQAorIyBFbG0gVG9kb01W
QyBFeGFtcGxlCisKKz4gQSBmdW5jdGlvbmFsIGxhbmd1YWdlIGZvciBpbnRlcmFjdGl2ZSBhcHBs
aWNhdGlvbnMKKworPiBfW0VsbV0oaHR0cDovL2VsbS1sYW5nLm9yZy8pXworCisKKyMjIExlYXJu
aW5nIEVsbQorCitUaGUgW0VsbSB3ZWJzaXRlXShodHRwOi8vZWxtLWxhbmcub3JnLykgaXMgYSBn
cmVhdCByZXNvdXJjZSBmb3IgZ2V0dGluZworc3RhcnRlZC4KKworSGVyZSBhcmUgc29tZSBsaW5r
cyB5b3UgbWF5IGZpbmQgaGVscGZ1bDoKKworKiBbVHJ5IEVsbV0oaHR0cDovL2VsbS1sYW5nLm9y
Zy90cnkpCisqIFtMZWFybiBFbG1dKGh0dHA6Ly9lbG0tbGFuZy5vcmcvTGVhcm4uZWxtKQorKiBb
QW4gSW50cm9kdWN0aW9uIHRvIEVsbV0oaHR0cDovL2d1aWRlLmVsbS1sYW5nLm9yZy8pCisKK0dl
dCBoZWxwIGZyb20gb3RoZXIgRWxtIHVzZXJzOgorCisqIFtlbG0tZGlzY3VzcyBtYWlsaW5nIGxp
c3RdKGh0dHBzOi8vZ3JvdXBzLmdvb2dsZS5jb20vZm9ydW0vP2Zyb21ncm91cHMjIWZvcnVtL2Vs
bS1kaXNjdXNzKQorKiBbQGVsbWxhbmcgb24gVHdpdHRlcl0oaHR0cHM6Ly90d2l0dGVyLmNvbS9l
bG1sYW5nKQorKiBbQGN6YXBsaWMgb24gVHdpdHRlcl0oaHR0cHM6Ly90d2l0dGVyLmNvbS9jemFw
bGljKQorCitfSWYgeW91IGhhdmUgb3RoZXIgaGVscGZ1bCBsaW5rcyB0byBzaGFyZSwgb3IgZmlu
ZCBhbnkgb2YgdGhlIGxpbmtzIGFib3ZlIG5vIGxvbmdlciB3b3JrLCBwbGVhc2UgW2xldCB1cyBr
bm93XShodHRwczovL2dpdGh1Yi5jb20vdGFzdGVqcy90b2RvbXZjL2lzc3VlcykuXworCisKKwor
IyMgUHJvamVjdCBTdHJ1Y3R1cmUKKworQWxsIG9mIHRoZSBFbG0gY29kZSBsaXZlcyBpbiBgVG9k
by5lbG1gIGFuZCBgVG9kby9UYXNrLmVsbWAgYW5kIHJlbGllcworb24gdGhlIFtlbG0taHRtbF1b
XSBhbmQgW2VsbS1uYXZpZ2F0aW9uXVtdIHBhY2thZ2VzLgorCitbZWxtLWh0bWxdOiBodHRwOi8v
cGFja2FnZS5lbG0tbGFuZy5vcmcvcGFja2FnZXMvZWxtLWxhbmcvaHRtbC9sYXRlc3QvCitbZWxt
LW5hdmlnYXRpb25dOiBodHRwOi8vcGFja2FnZS5lbG0tbGFuZy5vcmcvcGFja2FnZXMvZWxtLWxh
bmcvbmF2aWdhdGlvbi9sYXRlc3QvCisKK1RoZXJlIGFsc28gaXMgYSBwb3J0IGhhbmRsZXIgc2V0
IHVwIGluIGBpbmRleC5odG1sYCB0byBzZXQgdGhlIGZvY3VzIG9uCitwYXJ0aWN1bGFyIHRleHQg
ZmllbGRzIHdoZW4gbmVjZXNzYXJ5LgorCisjIyBCdWlsZCBJbnN0cnVjdGlvbnMKKworWW91IG5l
ZWQgdG8gaW5zdGFsbCBbZWxtXShodHRwOi8vZWxtLWxhbmcub3JnL2luc3RhbGwpCitvbiB5b3Vy
IG1hY2hpbmUgZmlyc3QuCisKK1J1biB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIGZyb20gdGhlIHJv
b3Qgb2YgdGhpcyBwcm9qZWN0OgorCitgYGBiYXNoCitlbG0tcGFja2FnZSBpbnN0YWxsIC15Citl
bG0tbWFrZSBUb2RvLmVsbSAtLW91dHB1dCBidWlsZC9lbG0uanMKK2BgYAorCitUaGVuIG9wZW4g
YGluZGV4Lmh0bWxgIGluIHlvdXIgYnJvd3NlciEKKworIyMgQ3JlZGl0CisKK1RoaXMgVG9kb01W
QyBhcHBsaWNhdGlvbiB3YXMgY3JlYXRlZCBieSBbQGV2YW5jel0oaHR0cHM6Ly9naXRodWIuY29t
L2V2YW5jeiksIGFuZCBpbXBvcnRlZCBpbnRvIFRhc3RlSlMgYnkgW0BwYXNzeV0oaHR0cHM6Ly90
d2l0dGVyLmNvbS9wYXNzeSkuIFRoZSBTcGVlZG9tZXRlciB2ZXJzaW9uIGlzIGJ5IEFkZHkgT3Nt
YW5pLgpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIu
MS9yZXNvdXJjZXMvdG9kb212Yy9sYWJzL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ib3dl
cl9jb21wb25lbnRzL2RpcmVjdG9yL0xJQ0VOU0UgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3Jn
L1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2xhYnMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL3JlYWN0L2Jvd2VyX2NvbXBvbmVudHMvZGlyZWN0b3IvTElDRU5TRQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4x
ZjAxZTJiMzZjNjk3ZDI1MTU5N2JmYjc4MjMwMjVlOWI4NjNjNjIxCi0tLSAvZGV2L251bGwKKysr
IGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9k
b212Yy9sYWJzL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ib3dlcl9jb21wb25lbnRzL2Rp
cmVjdG9yL0xJQ0VOU0UKQEAgLTAsMCArMSwxOSBAQAorQ29weXJpZ2h0IChjKSAyMDExIE5vZGVq
aXRzdSBJbmMuCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdl
LCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFz
c29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitp
biB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGlt
aXRhdGlvbiB0aGUgcmlnaHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gs
IGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3
YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5p
c2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1Ro
ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxs
IGJlIGluY2x1ZGVkIGluCithbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRo
ZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQg
V0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQg
Tk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1Ig
QU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNU
SU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9G
IE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBE
RUFMSU5HUyBJTgorVEhFIFNPRlRXQVJFLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlm
ZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3Vy
Y2VzL3RvZG9tdmMvbGFicy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvYm93ZXJfY29tcG9u
ZW50cy9kaXJlY3Rvci9SRUFETUUubWQgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVk
b21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2xhYnMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3Jl
YWN0L2Jvd2VyX2NvbXBvbmVudHMvZGlyZWN0b3IvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUyMmQx
NDZjNDcyZWI4MzBjNmY2YzE3ODZjMmYzNjdjZmJmYjNlMzQKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZj
L2xhYnMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2Jvd2VyX2NvbXBvbmVudHMvZGlyZWN0
b3IvUkVBRE1FLm1kCkBAIC0wLDAgKzEsODIyIEBACis8aW1nIHNyYz0iaHR0cHM6Ly9naXRodWIu
Y29tL2ZsYXRpcm9uL2RpcmVjdG9yL3Jhdy9tYXN0ZXIvaW1nL2RpcmVjdG9yLnBuZyIgLz4KKwor
IyBTeW5vcHNpcworRGlyZWN0b3IgaXMgYSByb3V0ZXIuIFJvdXRpbmcgaXMgdGhlIHByb2Nlc3Mg
b2YgZGV0ZXJtaW5pbmcgd2hhdCBjb2RlIHRvIHJ1biB3aGVuIGEgVVJMIGlzIHJlcXVlc3RlZC4K
KworIyBNb3RpdmF0aW9uCitBIHJvdXRpbmcgbGlicmFyeSB0aGF0IHdvcmtzIGluIGJvdGggdGhl
IGJyb3dzZXIgYW5kIG5vZGUuanMgZW52aXJvbm1lbnRzIHdpdGggYXMgZmV3IGRpZmZlcmVuY2Vz
IGFzIHBvc3NpYmxlLiBTaW1wbGlmaWVzIHRoZSBkZXZlbG9wbWVudCBvZiBTaW5nbGUgUGFnZSBB
cHBzIGFuZCBOb2RlLmpzIGFwcGxpY2F0aW9ucy4gRGVwZW5kZW5jeSBmcmVlIChkb2Vzbid0IHJl
cXVpcmUgalF1ZXJ5IG9yIEV4cHJlc3MsIGV0YykuCisKKyMgU3RhdHVzCitbIVtCdWlsZCBTdGF0
dXNdKGh0dHBzOi8vc2VjdXJlLnRyYXZpcy1jaS5vcmcvZmxhdGlyb24vZGlyZWN0b3IucG5nP2Jy
YW5jaD1tYXN0ZXIpXShodHRwOi8vdHJhdmlzLWNpLm9yZy9mbGF0aXJvbi9kaXJlY3RvcikKKwor
IyBGZWF0dXJlcworKiBbQ2xpZW50LVNpZGUgUm91dGluZ10oI2NsaWVudC1zaWRlKQorKiBbU2Vy
dmVyLVNpZGUgSFRUUCBSb3V0aW5nXSgjaHR0cC1yb3V0aW5nKQorKiBbU2VydmVyLVNpZGUgQ0xJ
IFJvdXRpbmddKCNjbGktcm91dGluZykKKworCisjIFVzYWdlCisqIFtBUEkgRG9jdW1lbnRhdGlv
bl0oI2FwaS1kb2N1bWVudGF0aW9uKQorKiBbRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnNdKCNm
YXEpCisKKzxhIG5hbWU9ImNsaWVudC1zaWRlIj48L2E+CisjIyBDbGllbnQtc2lkZSBSb3V0aW5n
CitJdCBzaW1wbHkgd2F0Y2hlcyB0aGUgaGFzaCBvZiB0aGUgVVJMIHRvIGRldGVybWluZSB3aGF0
IHRvIGRvLCBmb3IgZXhhbXBsZToKKworYGBgCitodHRwOi8vZm9vLmNvbS8jL2JhcgorYGBgCisK
K0NsaWVudC1zaWRlIHJvdXRpbmcgKGFrYSBoYXNoLXJvdXRpbmcpIGFsbG93cyB5b3UgdG8gc3Bl
Y2lmeSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdGF0ZSBvZiB0aGUgYXBwbGljYXRpb24g
dXNpbmcgdGhlIFVSTC4gU28gdGhhdCB3aGVuIHRoZSB1c2VyIHZpc2l0cyBhIHNwZWNpZmljIFVS
TCwgdGhlIGFwcGxpY2F0aW9uIGNhbiBiZSB0cmFuc2Zvcm1lZCBhY2NvcmRpbmdseS4KKworPGlt
ZyBzcmM9Imh0dHBzOi8vZ2l0aHViLmNvbS9mbGF0aXJvbi9kaXJlY3Rvci9yYXcvbWFzdGVyL2lt
Zy9oYXNoUm91dGUucG5nIiAvPgorCitIZXJlIGlzIGEgc2ltcGxlIGV4YW1wbGU6CisKK2BgYGh0
bWwKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+CisgIDxoZWFkPgorICAgIDxtZXRhIGNoYXJzZXQ9
InV0Zi04Ij4KKyAgICA8dGl0bGU+QSBHZW50bGUgSW50cm9kdWN0aW9uPC90aXRsZT4KKyAgICA8
c2NyaXB0IHNyYz0iaHR0cHM6Ly9yYXcuZ2l0aHViLmNvbS9mbGF0aXJvbi9kaXJlY3Rvci9tYXN0
ZXIvYnVpbGQvZGlyZWN0b3IubWluLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0PgorCisgICAg
ICB2YXIgYXV0aG9yID0gZnVuY3Rpb24gKCkgeyBjb25zb2xlLmxvZygiYXV0aG9yIik7IH0sCisg
ICAgICAgICAgYm9va3MgPSBmdW5jdGlvbiAoKSB7IGNvbnNvbGUubG9nKCJib29rcyIpOyB9LAor
ICAgICAgICAgIHZpZXdCb29rID0gZnVuY3Rpb24oYm9va0lkKSB7IGNvbnNvbGUubG9nKCJ2aWV3
Qm9vazogYm9va0lkIGlzIHBvcHVsYXRlZDogIiArIGJvb2tJZCk7IH07CisKKyAgICAgIHZhciBy
b3V0ZXMgPSB7CisgICAgICAgICcvYXV0aG9yJzogYXV0aG9yLAorICAgICAgICAnL2Jvb2tzJzog
W2Jvb2tzLCBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coIkFuIGlubGluZSByb3V0ZSBoYW5kbGVy
LiIpOyB9XSwKKyAgICAgICAgJy9ib29rcy92aWV3Lzpib29rSWQnOiB2aWV3Qm9vaworICAgICAg
fTsKKworICAgICAgdmFyIHJvdXRlciA9IFJvdXRlcihyb3V0ZXMpOworICAgICAgcm91dGVyLmlu
aXQoKTsKKworICAgIDwvc2NyaXB0PgorICA8L2hlYWQ+CisgIDxib2R5PgorICAgIDx1bD4KKyAg
ICAgIDxsaT48YSBocmVmPSIjL2F1dGhvciI+Iy9hdXRob3I8L2E+PC9saT4KKyAgICAgIDxsaT48
YSBocmVmPSIjL2Jvb2tzIj4jL2Jvb2tzPC9hPjwvbGk+CisgICAgICA8bGk+PGEgaHJlZj0iIy9i
b29rcy92aWV3LzEiPiMvYm9va3Mvdmlldy8xPC9hPjwvbGk+CisgICAgPC91bD4KKyAgPC9ib2R5
PgorPC9odG1sPgorYGBgCisKK0RpcmVjdG9yIHdvcmtzIGdyZWF0IHdpdGggeW91ciBmYXZvcml0
ZSBET00gbGlicmFyeSwgc3VjaCBhcyBqUXVlcnkuCisKK2BgYGh0bWwKKzwhRE9DVFlQRSBodG1s
PgorPGh0bWw+CisgIDxoZWFkPgorICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICA8dGl0
bGU+QSBHZW50bGUgSW50cm9kdWN0aW9uIDI8L3RpdGxlPgorICAgIDxzY3JpcHQgc3JjPSJodHRw
czovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjcuMS9qcXVlcnkubWlu
LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9yYXcuZ2l0aHViLmNvbS9m
bGF0aXJvbi9kaXJlY3Rvci9tYXN0ZXIvYnVpbGQvZGlyZWN0b3IubWluLmpzIj48L3NjcmlwdD4K
KyAgICA8c2NyaXB0PgorICAgICQoJ2RvY3VtZW50JykucmVhZHkoZnVuY3Rpb24oKXsKKyAgICAg
IC8vCisgICAgICAvLyBjcmVhdGUgc29tZSBmdW5jdGlvbnMgdG8gYmUgZXhlY3V0ZWQgd2hlbgor
ICAgICAgLy8gdGhlIGNvcnJlY3Qgcm91dGUgaXMgaXNzdWVkIGJ5IHRoZSB1c2VyLgorICAgICAg
Ly8KKyAgICAgIHZhciBzaG93QXV0aG9ySW5mbyA9IGZ1bmN0aW9uICgpIHsgY29uc29sZS5sb2co
InNob3dBdXRob3JJbmZvIik7IH0sCisgICAgICAgICAgbGlzdEJvb2tzID0gZnVuY3Rpb24gKCkg
eyBjb25zb2xlLmxvZygibGlzdEJvb2tzIik7IH0sCisgICAgICAgICAgYWxscm91dGVzID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgcm91dGUgPSB3aW5kb3cubG9jYXRpb24uaGFzaC5z
bGljZSgyKSwKKyAgICAgICAgICAgICAgICBzZWN0aW9ucyA9ICQoJ3NlY3Rpb24nKSwKKyAgICAg
ICAgICAgICAgICBzZWN0aW9uOworICAgICAgICAgICAgaWYgKChzZWN0aW9uID0gc2VjdGlvbnMu
ZmlsdGVyKCdbZGF0YS1yb3V0ZT0nICsgcm91dGUgKyAnXScpKS5sZW5ndGgpIHsKKyAgICAgICAg
ICAgICAgc2VjdGlvbnMuaGlkZSgyNTApOworICAgICAgICAgICAgICBzZWN0aW9uLnNob3coMjUw
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9OworCisgICAgICAvLworICAgICAgLy8gZGVm
aW5lIHRoZSByb3V0aW5nIHRhYmxlLgorICAgICAgLy8KKyAgICAgIHZhciByb3V0ZXMgPSB7Cisg
ICAgICAgICcvYXV0aG9yJzogc2hvd0F1dGhvckluZm8sCisgICAgICAgICcvYm9va3MnOiBsaXN0
Qm9va3MKKyAgICAgIH07CisKKyAgICAgIC8vCisgICAgICAvLyBpbnN0YW50aWF0ZSB0aGUgcm91
dGVyLgorICAgICAgLy8KKyAgICAgIHZhciByb3V0ZXIgPSBSb3V0ZXIocm91dGVzKTsKKworICAg
ICAgLy8KKyAgICAgIC8vIGEgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gc2V0dGluZy4KKyAgICAgIC8v
CisgICAgICByb3V0ZXIuY29uZmlndXJlKHsKKyAgICAgICAgb246IGFsbHJvdXRlcworICAgICAg
fSk7CisgICAgICByb3V0ZXIuaW5pdCgpOworICAgIH0pOworICAgIDwvc2NyaXB0PgorICA8L2hl
YWQ+CisgIDxib2R5PgorICAgIDxzZWN0aW9uIGRhdGEtcm91dGU9ImF1dGhvciI+QXV0aG9yIE5h
bWU8L3NlY3Rpb24+CisgICAgPHNlY3Rpb24gZGF0YS1yb3V0ZT0iYm9va3MiPkJvb2sxLCBCb29r
MiwgQm9vazM8L3NlY3Rpb24+CisgICAgPHVsPgorICAgICAgPGxpPjxhIGhyZWY9IiMvYXV0aG9y
Ij4jL2F1dGhvcjwvYT48L2xpPgorICAgICAgPGxpPjxhIGhyZWY9IiMvYm9va3MiPiMvYm9va3M8
L2E+PC9saT4KKyAgICA8L3VsPgorICA8L2JvZHk+Cis8L2h0bWw+CitgYGAKKworWW91IGNhbiBm
aW5kIGEgYnJvd3Nlci1zcGVjaWZpYyBidWlsZCBvZiBgZGlyZWN0b3JgIFtoZXJlXVsxXSB3aGlj
aCBoYXMgYWxsIG9mIHRoZSBzZXJ2ZXIgY29kZSBzdHJpcHBlZCBhd2F5LgorCis8YSBuYW1lPSJo
dHRwLXJvdXRpbmciPjwvYT4KKyMjIFNlcnZlci1TaWRlIEhUVFAgUm91dGluZworCitEaXJlY3Rv
ciBoYW5kbGVzIHJvdXRpbmcgZm9yIEhUVFAgcmVxdWVzdHMgc2ltaWxhciB0byBgam91cm5leWAg
b3IgYGV4cHJlc3NgOgorCitgYGBqcworICAvLworICAvLyByZXF1aXJlIHRoZSBuYXRpdmUgaHR0
cCBtb2R1bGUsIGFzIHdlbGwgYXMgZGlyZWN0b3IuCisgIC8vCisgIHZhciBodHRwID0gcmVxdWly
ZSgnaHR0cCcpLAorICAgICAgZGlyZWN0b3IgPSByZXF1aXJlKCdkaXJlY3RvcicpOworCisgIC8v
CisgIC8vIGNyZWF0ZSBzb21lIGxvZ2ljIHRvIGJlIHJvdXRlZCB0by4KKyAgLy8KKyAgZnVuY3Rp
b24gaGVsbG9Xb3JsZCgpIHsKKyAgICB0aGlzLnJlcy53cml0ZUhlYWQoMjAwLCB7ICdDb250ZW50
LVR5cGUnOiAndGV4dC9wbGFpbicgfSkKKyAgICB0aGlzLnJlcy5lbmQoJ2hlbGxvIHdvcmxkJyk7
CisgIH0KKworICAvLworICAvLyBkZWZpbmUgYSByb3V0aW5nIHRhYmxlLgorICAvLworICB2YXIg
cm91dGVyID0gbmV3IGRpcmVjdG9yLmh0dHAuUm91dGVyKHsKKyAgICAnL2hlbGxvJzogeworICAg
ICAgZ2V0OiBoZWxsb1dvcmxkCisgICAgfQorICB9KTsKKworICAvLworICAvLyBzZXR1cCBhIHNl
cnZlciBhbmQgd2hlbiB0aGVyZSBpcyBhIHJlcXVlc3QsIGRpc3BhdGNoIHRoZQorICAvLyByb3V0
ZSB0aGF0IHdhcyByZXF1ZXN0ZWQgaW4gdGhlIHJlcXVlc3Qgb2JqZWN0LgorICAvLworICB2YXIg
c2VydmVyID0gaHR0cC5jcmVhdGVTZXJ2ZXIoZnVuY3Rpb24gKHJlcSwgcmVzKSB7CisgICAgcm91
dGVyLmRpc3BhdGNoKHJlcSwgcmVzLCBmdW5jdGlvbiAoZXJyKSB7CisgICAgICBpZiAoZXJyKSB7
CisgICAgICAgIHJlcy53cml0ZUhlYWQoNDA0KTsKKyAgICAgICAgcmVzLmVuZCgpOworICAgICAg
fQorICAgIH0pOworICB9KTsKKworICAvLworICAvLyBZb3UgY2FuIGFsc28gZG8gYWQtaG9jIHJv
dXRpbmcsIHNpbWlsYXIgdG8gYGpvdXJuZXlgIG9yIGBleHByZXNzYC4KKyAgLy8gVGhpcyBjYW4g
YmUgZG9uZSB3aXRoIGEgc3RyaW5nIG9yIGEgcmVnZXhwLgorICAvLworICByb3V0ZXIuZ2V0KCcv
Ym9uam91cicsIGhlbGxvV29ybGQpOworICByb3V0ZXIuZ2V0KC9ob2xhLywgaGVsbG9Xb3JsZCk7
CisKKyAgLy8KKyAgLy8gc2V0IHRoZSBzZXJ2ZXIgdG8gbGlzdGVuIG9uIHBvcnQgYDgwODBgLgor
ICAvLworICBzZXJ2ZXIubGlzdGVuKDgwODApOworYGBgCisKKyMjIyBTZWUgQWxzbzoKKworIC0g
QXV0by1nZW5lcmF0ZWQgTm9kZS5qcyBBUEkgQ2xpZW50cyBmb3Igcm91dGVycyB1c2luZyBbRGly
ZWN0b3ItUmVmbGVjdG9yXShodHRwOi8vZ2l0aHViLmNvbS9mbGF0aXJvbi9kaXJlY3Rvci1yZWZs
ZWN0b3IpCisgLSBSRVNUZnVsIFJlc291cmNlIHJvdXRpbmcgdXNpbmcgW3Jlc3RmdWxdKGh0dHA6
Ly9naXRodWIuY29tL2ZsYXRpcm9uL3Jlc3RmdWwpCisgLSBIVE1MIC8gUGxhaW4gVGV4dCB2aWV3
cyBvZiByb3V0ZXJzIHVzaW5nIFtEaXJlY3Rvci1FeHBsb3Jlcl0oaHR0cDovL2dpdGh1Yi5jb20v
ZmxhdGlyb24vZGlyZWN0b3ItZXhwbG9yZXIpCisKKzxhIG5hbWU9ImNsaS1yb3V0aW5nIj48L2E+
CisjIyBDTEkgUm91dGluZworCitEaXJlY3RvciBzdXBwb3J0cyBDb21tYW5kIExpbmUgSW50ZXJm
YWNlIHJvdXRpbmcuIFJvdXRlcyBmb3IgY2xpIG9wdGlvbnMgYXJlIGJhc2VkIG9uIGNvbW1hbmQg
bGluZSBpbnB1dCAoaS5lLiBgcHJvY2Vzcy5hcmd2YCkgaW5zdGVhZCBvZiBhIFVSTC4KKworYGBg
IGpzCisgIHZhciBkaXJlY3RvciA9IHJlcXVpcmUoJ2RpcmVjdG9yJyk7CisKKyAgdmFyIHJvdXRl
ciA9IG5ldyBkaXJlY3Rvci5jbGkuUm91dGVyKCk7CisKKyAgcm91dGVyLm9uKCdjcmVhdGUnLCBm
dW5jdGlvbiAoKSB7CisgICAgY29uc29sZS5sb2coJ2NyZWF0ZSBzb21ldGhpbmcnKTsKKyAgfSk7
CisKKyAgcm91dGVyLm9uKC9kZXN0cm95LywgZnVuY3Rpb24gKCkgeworICAgIGNvbnNvbGUubG9n
KCdkZXN0cm95IHNvbWV0aGluZycpOworICB9KTsKKworICAvLyBZb3Ugd2lsbCBuZWVkIHRvIGRp
c3BhdGNoIHRoZSBjbGkgYXJndW1lbnRzIHlvdXJzZWxmCisgIHJvdXRlci5kaXNwYXRjaCgnb24n
LCBwcm9jZXNzLmFyZ3Yuc2xpY2UoMikuam9pbignICcpKTsKK2BgYAorCitVc2luZyB0aGUgY2xp
IHJvdXRlciwgeW91IGNhbiBkaXNwYXRjaCBjb21tYW5kcyBieSBwYXNzaW5nIHRoZW0gYXMgYSBz
dHJpbmcuIEZvciBleGFtcGxlLCBpZiB0aGlzIGV4YW1wbGUgaXMgaW4gYSBmaWxlIGNhbGxlZCBg
Zm9vLmpzYDoKKworYGBgIGJhc2gKKyQgbm9kZSBmb28uanMgY3JlYXRlCitjcmVhdGUgc29tZXRo
aW5nCiskIG5vZGUgZm9vLmpzIGRlc3Ryb3kKK2Rlc3Ryb3kgc29tZXRoaW5nCitgYGAKKworPGEg
bmFtZT0iYXBpLWRvY3VtZW50YXRpb24iPjwvYT4KKyMgQVBJIERvY3VtZW50YXRpb24KKworKiBb
Q29uc3RydWN0b3JdKCNjb25zdHJ1Y3RvcikKKyogW1JvdXRpbmcgVGFibGVdKCNyb3V0aW5nLXRh
YmxlKQorKiBbQWRob2MgUm91dGluZ10oI2FkaG9jLXJvdXRpbmcpCisqIFtTY29wZWQgUm91dGlu
Z10oI3Njb3BlZC1yb3V0aW5nKQorKiBbUm91dGluZyBFdmVudHNdKCNyb3V0aW5nLWV2ZW50cykK
KyogW0NvbmZpZ3VyYXRpb25dKCNjb25maWd1cmF0aW9uKQorKiBbVVJMIE1hdGNoaW5nXSgjdXJs
LW1hdGNoaW5nKQorKiBbVVJMIFBhcmFtc10oI3VybC1wYXJhbXMpCisqIFtSb3V0ZSBSZWN1cnNp
b25dKCNyb3V0ZS1yZWN1cnNpb24pCisqIFtBc3luYyBSb3V0aW5nXSgjYXN5bmMtcm91dGluZykK
KyogW1Jlc291cmNlc10oI3Jlc291cmNlcykKKyogW0hpc3RvcnkgQVBJXSgjaGlzdG9yeS1hcGkp
CisqIFtJbnN0YW5jZSBNZXRob2RzXSgjaW5zdGFuY2UtbWV0aG9kcykKKyogW0F0dGFjaCBQcm9w
ZXJ0aWVzIHRvIGB0aGlzYF0oI2F0dGFjaC10by10aGlzKQorKiBbSFRUUCBTdHJlYW1pbmcgYW5k
IEJvZHkgUGFyc2luZ10oI2h0dHAtc3RyZWFtaW5nLWJvZHktcGFyc2luZykKKworPGEgbmFtZT0i
Y29uc3RydWN0b3IiPjwvYT4KKyMjIENvbnN0cnVjdG9yCisKK2BgYCBqcworICB2YXIgcm91dGVy
ID0gUm91dGVyKHJvdXRlcyk7CitgYGAKKworPGEgbmFtZT0icm91dGluZy10YWJsZSI+PC9hPgor
IyMgUm91dGluZyBUYWJsZQorCitBbiBvYmplY3QgbGl0ZXJhbCB0aGF0IGNvbnRhaW5zIG5lc3Rl
ZCByb3V0ZSBkZWZpbml0aW9ucy4gQSBwb3RlbnRpYWxseSBuZXN0ZWQgc2V0IG9mIGtleS92YWx1
ZSBwYWlycy4gVGhlIGtleXMgaW4gdGhlIG9iamVjdCBsaXRlcmFsIHJlcHJlc2VudCBlYWNoIHBv
dGVudGlhbCBwYXJ0IG9mIHRoZSBVUkwuIFRoZSB2YWx1ZXMgaW4gdGhlIG9iamVjdCBsaXRlcmFs
IGNvbnRhaW4gcmVmZXJlbmNlcyB0byB0aGUgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGFzc29j
aWF0ZWQgd2l0aCB0aGVtLiAqYmFyayogYW5kICptZW93KiBhcmUgdHdvIGZ1bmN0aW9ucyB0aGF0
IHlvdSBoYXZlIGRlZmluZWQgaW4geW91ciBjb2RlLgorCitgYGAganMKKyAgLy8KKyAgLy8gQXNz
aWduIHJvdXRlcyB0byBhbiBvYmplY3QgbGl0ZXJhbC4KKyAgLy8KKyAgdmFyIHJvdXRlcyA9IHsK
KyAgICAvLworICAgIC8vIGEgcm91dGUgd2hpY2ggYXNzaWducyB0aGUgZnVuY3Rpb24gYGJhcmtg
LgorICAgIC8vCisgICAgJy9kb2cnOiBiYXJrLAorICAgIC8vCisgICAgLy8gYSByb3V0ZSB3aGlj
aCBhc3NpZ25zIHRoZSBmdW5jdGlvbnMgYG1lb3dgIGFuZCBgc2NyYXRjaGAuCisgICAgLy8KKyAg
ICAnL2NhdCc6IFttZW93LCBzY3JhdGNoXQorICB9OworCisgIC8vCisgIC8vIEluc3RhbnRpYXRl
IHRoZSByb3V0ZXIuCisgIC8vCisgIHZhciByb3V0ZXIgPSBSb3V0ZXIocm91dGVzKTsKK2BgYAor
Cis8YSBuYW1lPSJhZGhvYy1yb3V0aW5nIj48L2E+CisjIyBBZGhvYyBSb3V0aW5nCisKK1doZW4g
ZGV2ZWxvcGluZyBsYXJnZSBjbGllbnQtc2lkZSBvciBzZXJ2ZXItc2lkZSBhcHBsaWNhdGlvbnMg
aXQgaXMgbm90IGFsd2F5cyBwb3NzaWJsZSB0byBkZWZpbmUgcm91dGVzIGluIG9uZSBsb2NhdGlv
bi4gVXN1YWxseSBpbmRpdmlkdWFsIGRlY291cGxlZCBjb21wb25lbnRzIHJlZ2lzdGVyIHRoZWly
IG93biByb3V0ZXMgd2l0aCB0aGUgYXBwbGljYXRpb24gcm91dGVyLiBXZSByZWZlciB0byB0aGlz
IGFzIF9BZGhvYyBSb3V0aW5nLl8gTGV0cyB0YWtlIGEgbG9vayBhdCB0aGUgQVBJIGBkaXJlY3Rv
cmAgZXhwb3NlcyBmb3IgYWRob2Mgcm91dGluZzoKKworKipDbGllbnQtc2lkZSBSb3V0aW5nKioK
KworYGBgIGpzCisgIHZhciByb3V0ZXIgPSBuZXcgUm91dGVyKCkuaW5pdCgpOworCisgIHJvdXRl
ci5vbignL3NvbWUvcmVzb3VyY2UnLCBmdW5jdGlvbiAoKSB7CisgICAgLy8KKyAgICAvLyBEbyBz
b21ldGhpbmcgb24gYC8jL3NvbWUvcmVzb3VyY2VgCisgICAgLy8KKyAgfSk7CitgYGAKKworKipI
VFRQIFJvdXRpbmcqKgorCitgYGAganMKKyAgdmFyIHJvdXRlciA9IG5ldyBkaXJlY3Rvci5odHRw
LlJvdXRlcigpOworCisgIHJvdXRlci5nZXQoL1wvc29tZVwvcmVzb3VyY2UvLCBmdW5jdGlvbiAo
KSB7CisgICAgLy8KKyAgICAvLyBEbyBzb21ldGhpbmcgb24gYW4gR0VUIHRvIGAvc29tZS9yZXNv
dXJjZWAKKyAgICAvLworICB9KTsKK2BgYAorCis8YSBuYW1lPSJzY29wZWQtcm91dGluZyI+PC9h
PgorIyMgU2NvcGVkIFJvdXRpbmcKKworSW4gbGFyZ2Ugd2ViIGFwcGxpYXRpb25zLCBib3RoIFtD
bGllbnQtc2lkZV0oI2NsaWVudC1zaWRlKSBhbmQgW1NlcnZlci1zaWRlXSgjaHR0cC1yb3V0aW5n
KSwgcm91dGVzIGFyZSBvZnRlbiBzY29wZWQgd2l0aGluIGEgZmV3IGluZGl2aWR1YWwgcmVzb3Vy
Y2VzLiBEaXJlY3RvciBleHBvc2VzIGEgc2ltcGxlIHdheSB0byBkbyB0aGlzIGZvciBbQWRob2Mg
Um91dGluZ10oI2FkaG9jLXJvdXRpbmcpIHNjZW5hcmlvczoKKworYGBgIGpzCisgIHZhciByb3V0
ZXIgPSBuZXcgZGlyZWN0b3IuaHR0cC5Sb3V0ZXIoKTsKKworICAvLworICAvLyBDcmVhdGUgcm91
dGVzIGluc2lkZSB0aGUgYC91c2Vyc2Agc2NvcGUuCisgIC8vCisgIHJvdXRlci5wYXRoKC9cL3Vz
ZXJzXC8oXHcrKS8sIGZ1bmN0aW9uICgpIHsKKyAgICAvLworICAgIC8vIFRoZSBgdGhpc2AgY29u
dGV4dCBvZiB0aGUgZnVuY3Rpb24gcGFzc2VkIHRvIGAucGF0aCgpYAorICAgIC8vIGlzIHRoZSBS
b3V0ZXIgaXRzZWxmLgorICAgIC8vCisKKyAgICB0aGlzLnBvc3QoZnVuY3Rpb24gKGlkKSB7Cisg
ICAgICAvLworICAgICAgLy8gQ3JlYXRlIHRoZSB1c2VyIHdpdGggdGhlIHNwZWNpZmllZCBgaWRg
LgorICAgICAgLy8KKyAgICB9KTsKKworICAgIHRoaXMuZ2V0KGZ1bmN0aW9uIChpZCkgeworICAg
ICAgLy8KKyAgICAgIC8vIFJldHJlaXZlIHRoZSB1c2VyIHdpdGggdGhlIHNwZWNpZmllZCBgaWRg
LgorICAgICAgLy8KKyAgICB9KTsKKworICAgIHRoaXMuZ2V0KC9cL2ZyaWVuZHMvLCBmdW5jdGlv
biAoaWQpIHsKKyAgICAgIC8vCisgICAgICAvLyBHZXQgdGhlIGZyaWVuZHMgZm9yIHRoZSB1c2Vy
IHdpdGggdGhlIHNwZWNpZmllZCBgaWRgLgorICAgICAgLy8KKyAgICB9KTsKKyAgfSk7CitgYGAK
KworPGEgbmFtZT0icm91dGluZy1ldmVudHMiPjwvYT4KKyMjIFJvdXRpbmcgRXZlbnRzCisKK0lu
IGBkaXJlY3RvcmAsIGEgInJvdXRpbmcgZXZlbnQiIGlzIGEgbmFtZWQgcHJvcGVydHkgaW4gdGhl
IFtSb3V0aW5nIFRhYmxlXSgjcm91dGluZy10YWJsZSkgd2hpY2ggY2FuIGJlIGFzc2lnbmVkIHRv
IGEgZnVuY3Rpb24gb3IgYW4gQXJyYXkgb2YgZnVuY3Rpb25zIHRvIGJlIGNhbGxlZCB3aGVuIGEg
cm91dGUgaXMgbWF0Y2hlZCBpbiBhIGNhbGwgdG8gYHJvdXRlci5kaXNwYXRjaCgpYC4KKworKiAq
Km9uOioqIEEgZnVuY3Rpb24gb3IgQXJyYXkgb2YgZnVuY3Rpb25zIHRvIGV4ZWN1dGUgd2hlbiB0
aGUgcm91dGUgaXMgbWF0Y2hlZC4KKyogKipiZWZvcmU6KiogQSBmdW5jdGlvbiBvciBBcnJheSBv
ZiBmdW5jdGlvbnMgdG8gZXhlY3V0ZSBiZWZvcmUgY2FsbGluZyB0aGUgYG9uYCBtZXRob2Qocyku
CisKKyoqQ2xpZW50LXNpZGUgb25seSoqCisKKyogKiphZnRlcjoqKiBBIGZ1bmN0aW9uIG9yIEFy
cmF5IG9mIGZ1bmN0aW9ucyB0byBleGVjdXRlIHdoZW4gbGVhdmluZyBhIHBhcnRpY3VsYXIgcm91
dGUuCisqICoqb25jZToqKiBBIGZ1bmN0aW9uIG9yIEFycmF5IG9mIGZ1bmN0aW9ucyB0byBleGVj
dXRlIG9ubHkgb25jZSBmb3IgYSBwYXJ0aWN1bGFyIHJvdXRlLgorCis8YSBuYW1lPSJjb25maWd1
cmF0aW9uIj48L2E+CisjIyBDb25maWd1cmF0aW9uCisKK0dpdmVuIHRoZSBmbGV4aWJsZSBuYXR1
cmUgb2YgYGRpcmVjdG9yYCB0aGVyZSBhcmUgc2V2ZXJhbCBvcHRpb25zIGF2YWlsYWJsZSBmb3Ig
Ym90aCB0aGUgW0NsaWVudC1zaWRlXSgjY2xpZW50LXNpZGUpIGFuZCBbU2VydmVyLXNpZGVdKCNo
dHRwLXJvdXRpbmcpLiBUaGVzZSBvcHRpb25zIGNhbiBiZSBzZXQgdXNpbmcgdGhlIGAuY29uZmln
dXJlKClgIG1ldGhvZDoKKworYGBgIGpzCisgIHZhciByb3V0ZXIgPSBuZXcgZGlyZWN0b3IuUm91
dGVyKHJvdXRlcykuY29uZmlndXJlKG9wdGlvbnMpOworYGBgCisKK1RoZSBgb3B0aW9uc2AgYXJl
OgorCisqICoqcmVjdXJzZToqKiBDb250cm9scyBbcm91dGUgcmVjdXJzaW9uXSgjcm91dGUtcmVj
dXJzaW9uKS4gVXNlIGBmb3J3YXJkYCwgYGJhY2t3YXJkYCwgb3IgYGZhbHNlYC4gRGVmYXVsdCBp
cyBgZmFsc2VgIENsaWVudC1zaWRlLCBhbmQgYGJhY2t3YXJkYCBTZXJ2ZXItc2lkZS4KKyogKipz
dHJpY3Q6KiogSWYgc2V0IHRvIGBmYWxzZWAsIHRoZW4gdHJhaWxpbmcgc2xhc2hlcyAob3Igb3Ro
ZXIgZGVsaW1pdGVycykgYXJlIGFsbG93ZWQgaW4gcm91dGVzLiBEZWZhdWx0IGlzIGB0cnVlYC4K
KyogKiphc3luYzoqKiBDb250cm9scyBbYXN5bmMgcm91dGluZ10oI2FzeW5jLXJvdXRpbmcpLiBV
c2UgYHRydWVgIG9yIGBmYWxzZWAuIERlZmF1bHQgaXMgYGZhbHNlYC4KKyogKipkZWxpbWl0ZXI6
KiogQ2hhcmFjdGVyIHNlcGFyYXRvciBiZXR3ZWVuIHJvdXRlIGZyYWdtZW50cy4gRGVmYXVsdCBp
cyBgL2AuCisqICoqbm90Zm91bmQ6KiogQSBmdW5jdGlvbiB0byBjYWxsIGlmIG5vIHJvdXRlIGlz
IGZvdW5kIG9uIGEgY2FsbCB0byBgcm91dGVyLmRpc3BhdGNoKClgLgorKiAqKm9uOioqIEEgZnVu
Y3Rpb24gKG9yIGxpc3Qgb2YgZnVuY3Rpb25zKSB0byBjYWxsIG9uIGV2ZXJ5IGNhbGwgdG8gYHJv
dXRlci5kaXNwYXRjaCgpYCB3aGVuIGEgcm91dGUgaXMgZm91bmQuCisqICoqYmVmb3JlOioqIEEg
ZnVuY3Rpb24gKG9yIGxpc3Qgb2YgZnVuY3Rpb25zKSB0byBjYWxsIGJlZm9yZSBldmVyeSBjYWxs
IHRvIGByb3V0ZXIuZGlzcGF0Y2goKWAgd2hlbiBhIHJvdXRlIGlzIGZvdW5kLgorCisqKkNsaWVu
dC1zaWRlIG9ubHkqKgorCisqICoqcmVzb3VyY2U6KiogQW4gb2JqZWN0IHRvIHdoaWNoIHN0cmlu
Zy1iYXNlZCByb3V0ZXMgd2lsbCBiZSBib3VuZC4gVGhpcyBjYW4gYmUgZXNwZWNpYWxseSB1c2Vm
dWwgZm9yIGxhdGUtYmluZGluZyB0byByb3V0ZSBmdW5jdGlvbnMgKHN1Y2ggYXMgYXN5bmMgY2xp
ZW50LXNpZGUgcmVxdWlyZXMpLgorKiAqKmFmdGVyOioqIEEgZnVuY3Rpb24gKG9yIGxpc3Qgb2Yg
ZnVuY3Rpb25zKSB0byBjYWxsIHdoZW4gYSBnaXZlbiByb3V0ZSBpcyBubyBsb25nZXIgdGhlIGFj
dGl2ZSByb3V0ZS4KKyogKipodG1sNWhpc3Rvcnk6KiogSWYgc2V0IHRvIGB0cnVlYCBhbmQgY2xp
ZW50IHN1cHBvcnRzIGBwdXNoU3RhdGUoKWAsIHRoZW4gdXNlcyBIVE1MNSBIaXN0b3J5IEFQSSBp
bnN0ZWFkIG9mIGhhc2ggZnJhZ21lbnRzLiBTZWUgW0hpc3RvcnkgQVBJXSgjaGlzdG9yeS1hcGkp
IGZvciBtb3JlIGluZm9ybWF0aW9uLgorKiAqKnJ1bl9oYW5kbGVyX2luX2luaXQ6KiogSWYgYGh0
bWw1aGlzdG9yeWAgaXMgZW5hYmxlZCwgdGhlIHJvdXRlIGhhbmRsZXIgYnkgZGVmYXVsdCBpcyBl
eGVjdXRlZCB1cG9uIGBSb3V0ZXIuaW5pdCgpYCBzaW5jZSB3aXRoIHJlYWwgVVJJcyB0aGUgcm91
dGVyIGNhbiBub3Qga25vdyBpZiBpdCBzaG91bGQgY2FsbCBhIHJvdXRlIGhhbmRsZXIgb3Igbm90
LiBTZXR0aW5nIHRoaXMgdG8gYGZhbHNlYCBkaXNhYmxlcyB0aGUgcm91dGUgaGFuZGxlciBpbml0
aWFsIGV4ZWN1dGlvbi4KKworPGEgbmFtZT0idXJsLW1hdGNoaW5nIj48L2E+CisjIyBVUkwgTWF0
Y2hpbmcKKworYGBgIGpzCisgIHZhciByb3V0ZXIgPSBSb3V0ZXIoeworICAgIC8vCisgICAgLy8g
Z2l2ZW4gdGhlIHJvdXRlICcvZG9nL3llbGxhJy4KKyAgICAvLworICAgICcvZG9nJzogeworICAg
ICAgJy86Y29sb3InOiB7CisgICAgICAgIC8vCisgICAgICAgIC8vIHRoaXMgZnVuY3Rpb24gd2ls
bCByZXR1cm4gdGhlIHZhbHVlICd5ZWxsYScuCisgICAgICAgIC8vCisgICAgICAgIG9uOiBmdW5j
dGlvbiAoY29sb3IpIHsgY29uc29sZS5sb2coY29sb3IpIH0KKyAgICAgIH0KKyAgICB9CisgIH0p
OworYGBgCisKK1JvdXRlcyBjYW4gc29tZXRpbWVzIGJlY29tZSB2ZXJ5IGNvbXBsZXgsIGBzaW1w
bGUvOnRva2Vuc2AgZG9uJ3QgYWx3YXlzIHN1ZmZpY2UuIERpcmVjdG9yIHN1cHBvcnRzIHJlZ3Vs
YXIgZXhwcmVzc2lvbnMgaW5zaWRlIHRoZSByb3V0ZSBuYW1lcy4gVGhlIHZhbHVlcyBjYXB0dXJl
ZCBmcm9tIHRoZSByZWd1bGFyIGV4cHJlc3Npb25zIGFyZSBwYXNzZWQgdG8geW91ciBsaXN0ZW5l
ciBmdW5jdGlvbi4KKworYGBgIGpzCisgIHZhciByb3V0ZXIgPSBSb3V0ZXIoeworICAgIC8vCisg
ICAgLy8gZ2l2ZW4gdGhlIHJvdXRlICcvaGVsbG8vd29ybGQnLgorICAgIC8vCisgICAgJy9oZWxs
byc6IHsKKyAgICAgICcvKFxcdyspJzogeworICAgICAgICAvLworICAgICAgICAvLyB0aGlzIGZ1
bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSB2YWx1ZSAnd29ybGQnLgorICAgICAgICAvLworICAgICAg
ICBvbjogZnVuY3Rpb24gKHdobykgeyBjb25zb2xlLmxvZyh3aG8pIH0KKyAgICAgIH0KKyAgICB9
CisgIH0pOworYGBgCisKK2BgYCBqcworICB2YXIgcm91dGVyID0gUm91dGVyKHsKKyAgICAvLwor
ICAgIC8vIGdpdmVuIHRoZSByb3V0ZSAnL2hlbGxvL3dvcmxkL2pvaG55L2FwcGxlc2VlZCcuCisg
ICAgLy8KKyAgICAnL2hlbGxvJzogeworICAgICAgJy93b3JsZC8/KFteXC9dKilcLyhbXlwvXSop
Lz8nOiBmdW5jdGlvbiAoYSwgYikgeworICAgICAgICBjb25zb2xlLmxvZyhhLCBiKTsKKyAgICAg
IH0KKyAgICB9CisgIH0pOworYGBgCisKKzxhIG5hbWU9InVybC1wYXJhbXMiPjwvYT4KKyMjIFVS
TCBQYXJhbWV0ZXJzCisKK1doZW4geW91IGFyZSB1c2luZyB0aGUgc2FtZSByb3V0ZSBmcmFnbWVu
dHMgaXQgaXMgbW9yZSBkZXNjcmlwdGl2ZSB0byBkZWZpbmUgdGhlc2UgZnJhZ21lbnRzIGJ5IG5h
bWUgYW5kIHRoZW4gdXNlIHRoZW0gaW4geW91ciBbUm91dGluZyBUYWJsZV0oI3JvdXRpbmctdGFi
bGUpIG9yIFtBZGhvYyBSb3V0ZXNdKCNhZGhvYy1yb3V0aW5nKS4gQ29uc2lkZXIgYSBzaW1wbGUg
ZXhhbXBsZSB3aGVyZSBhIGB1c2VySWRgIGlzIHVzZWQgcmVwZWF0ZWRseS4KKworYGBgIGpzCisg
IC8vCisgIC8vIENyZWF0ZSBhIHJvdXRlci4gVGhpcyBjb3VsZCBhbHNvIGJlIGRpcmVjdG9yLmNs
aS5Sb3V0ZXIoKSBvcgorICAvLyBkaXJlY3Rvci5odHRwLlJvdXRlcigpLgorICAvLworICB2YXIg
cm91dGVyID0gbmV3IGRpcmVjdG9yLlJvdXRlcigpOworCisgIC8vCisgIC8vIEEgcm91dGUgY291
bGQgYmUgZGVmaW5lZCB1c2luZyB0aGUgYHVzZXJJZGAgZXhwbGljaXRseS4KKyAgLy8KKyAgcm91
dGVyLm9uKC8oW1x3LV9dKykvLCBmdW5jdGlvbiAodXNlcklkKSB7IH0pOworCisgIC8vCisgIC8v
IERlZmluZSBhIHNob3J0aGFuZCBmb3IgdGhpcyBmcmFnbWVudCBjYWxsZWQgYHVzZXJJZGAuCisg
IC8vCisgIHJvdXRlci5wYXJhbSgndXNlcklkJywgLyhbXFx3XFwtXSspLyk7CisKKyAgLy8KKyAg
Ly8gTm93IG11bHRpcGxlIHJvdXRlcyBjYW4gYmUgZGVmaW5lZCB3aXRoIHRoZSBzYW1lCisgIC8v
IHJlZ3VsYXIgZXhwcmVzc2lvbi4KKyAgLy8KKyAgcm91dGVyLm9uKCcvYW55dGhpbmcvOnVzZXJJ
ZCcsIGZ1bmN0aW9uICh1c2VySWQpIHsgfSk7CisgIHJvdXRlci5vbignL3NvbWV0aGluZy1lbHNl
Lzp1c2VySWQnLCBmdW5jdGlvbiAodXNlcklkKSB7IH0pOworYGBgCisKKzxhIG5hbWU9InJvdXRl
LXJlY3Vyc2lvbiI+PC9hPgorIyMgUm91dGUgUmVjdXJzaW9uCisKK0NhbiBiZSBhc3NpZ25lZCB0
aGUgdmFsdWUgb2YgYGZvcndhcmRgIG9yIGBiYWNrd2FyZGAuIFRoZSByZWN1cnNlIG9wdGlvbiB3
aWxsIGRldGVybWluZSB0aGUgb3JkZXIgaW4gd2hpY2ggdG8gZmlyZSB0aGUgbGlzdGVuZXJzIHRo
YXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB5b3VyIHJvdXRlcy4gSWYgdGhpcyBvcHRpb24gaXMgTk9U
IHNwZWNpZmllZCBvciBzZXQgdG8gbnVsbCwgdGhlbiBvbmx5IHRoZSBsaXN0ZW5lcnMgYXNzb2Np
YXRlZCB3aXRoIGFuIGV4YWN0IG1hdGNoIHdpbGwgYmUgZmlyZWQuCisKKyMjIyBObyByZWN1cnNp
b24sIHdpdGggdGhlIFVSTCAvZG9nL2FuZ3J5CisKK2BgYCBqcworICB2YXIgcm91dGVzID0gewor
ICAgICcvZG9nJzogeworICAgICAgJy9hbmdyeSc6IHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8g
T25seSB0aGlzIG1ldGhvZCB3aWxsIGJlIGZpcmVkLgorICAgICAgICAvLworICAgICAgICBvbjog
Z3Jvd2wKKyAgICAgIH0sCisgICAgICBvbjogYmFyaworICAgIH0KKyAgfTsKKworICB2YXIgcm91
dGVyID0gUm91dGVyKHJvdXRlcyk7CitgYGAKKworIyMjIFJlY3Vyc2lvbiBzZXQgdG8gYGJhY2t3
YXJkYCwgd2l0aCB0aGUgVVJMIC9kb2cvYW5ncnkKKworYGBgIGpzCisgIHZhciByb3V0ZXMgPSB7
CisgICAgJy9kb2cnOiB7CisgICAgICAnL2FuZ3J5JzogeworICAgICAgICAvLworICAgICAgICAv
LyBUaGlzIG1ldGhvZCB3aWxsIGJlIGZpcmVkIGZpcnN0LgorICAgICAgICAvLworICAgICAgICBv
bjogZ3Jvd2wKKyAgICAgIH0sCisgICAgICAvLworICAgICAgLy8gVGhpcyBtZXRob2Qgd2lsbCBi
ZSBmaXJlZCBzZWNvbmQuCisgICAgICAvLworICAgICAgb246IGJhcmsKKyAgICB9CisgIH07CisK
KyAgdmFyIHJvdXRlciA9IFJvdXRlcihyb3V0ZXMpLmNvbmZpZ3VyZSh7IHJlY3Vyc2U6ICdiYWNr
d2FyZCcgfSk7CitgYGAKKworIyMjIFJlY3Vyc2lvbiBzZXQgdG8gYGZvcndhcmRgLCB3aXRoIHRo
ZSBVUkwgL2RvZy9hbmdyeQorCitgYGAganMKKyAgdmFyIHJvdXRlcyA9IHsKKyAgICAnL2RvZyc6
IHsKKyAgICAgICcvYW5ncnknOiB7CisgICAgICAgIC8vCisgICAgICAgIC8vIFRoaXMgbWV0aG9k
IHdpbGwgYmUgZmlyZWQgc2Vjb25kLgorICAgICAgICAvLworICAgICAgICBvbjogZ3Jvd2wKKyAg
ICAgIH0sCisgICAgICAvLworICAgICAgLy8gVGhpcyBtZXRob2Qgd2lsbCBiZSBmaXJlZCBmaXJz
dC4KKyAgICAgIC8vCisgICAgICBvbjogYmFyaworICAgIH0KKyAgfTsKKworICB2YXIgcm91dGVy
ID0gUm91dGVyKHJvdXRlcykuY29uZmlndXJlKHsgcmVjdXJzZTogJ2ZvcndhcmQnIH0pOworYGBg
CisKKyMjIyBCcmVha2luZyBvdXQgb2YgcmVjdXJzaW9uLCB3aXRoIHRoZSBVUkwgL2RvZy9hbmdy
eQorCitgYGAganMKKyAgdmFyIHJvdXRlcyA9IHsKKyAgICAnL2RvZyc6IHsKKyAgICAgICcvYW5n
cnknOiB7CisgICAgICAgIC8vCisgICAgICAgIC8vIFRoaXMgbWV0aG9kIHdpbGwgYmUgZmlyZWQg
Zmlyc3QuCisgICAgICAgIC8vCisgICAgICAgIG9uOiBmdW5jdGlvbigpIHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgICB9LAorICAgICAgLy8KKyAgICAgIC8vIFRoaXMgbWV0aG9kIHdpbGwgbm90IGJl
IGZpcmVkLgorICAgICAgLy8KKyAgICAgIG9uOiBiYXJrCisgICAgfQorICB9OworCisgIC8vCisg
IC8vIFRoaXMgZmVhdHVyZSB3b3JrcyBpbiByZXZlcnNlIHdpdGggcmVjdXJzaW9uIHNldCB0byB0
cnVlLgorICAvLworICB2YXIgcm91dGVyID0gUm91dGVyKHJvdXRlcykuY29uZmlndXJlKHsgcmVj
dXJzZTogJ2JhY2t3YXJkJyB9KTsKK2BgYAorCis8YSBuYW1lPSJhc3luYy1yb3V0aW5nIj48L2E+
CisjIyBBc3luYyBSb3V0aW5nCisKK0JlZm9yZSBkaXZpbmcgaW50byBob3cgRGlyZWN0b3IgZXhw
b3NlcyBhc3luYyByb3V0aW5nLCB5b3Ugc2hvdWxkIHVuZGVyc3RhbmQgW1JvdXRlIFJlY3Vyc2lv
bl0oI3JvdXRlLXJlY3Vyc2lvbikuIEF0IGl0J3MgY29yZSByb3V0ZSByZWN1cnNpb24gaXMgYWJv
dXQgZXZhbHVhdGluZyBhIHNlcmllcyBvZiBmdW5jdGlvbnMgZ2F0aGVyZWQgd2hlbiB0cmF2ZXJz
aW5nIHRoZSBbUm91dGluZyBUYWJsZV0oI3JvdXRpbmctdGFibGUpLgorCitOb3JtYWxseSB0aGlz
IHNlcmllcyBvZiBmdW5jdGlvbnMgaXMgZXZhbHVhdGVkIHN5bmNocm9ub3VzbHkuIEluIGFzeW5j
IHJvdXRpbmcsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXZhbHVhdGVkIGFzeW5jaHJvbm91c2x5LiBB
c3luYyByb3V0aW5nIGNhbiBiZSBleHRyZW1lbHkgdXNlZnVsIGJvdGggb24gdGhlIGNsaWVudC1z
aWRlIGFuZCB0aGUgc2VydmVyLXNpZGU6CisKKyogKipDbGllbnQtc2lkZToqKiBUbyBlbnN1cmUg
YW4gYW5pbWF0aW9uIG9yIG90aGVyIGFzeW5jIG9wZXJhdGlvbnMgKHN1Y2ggYXMgSFRUUCByZXF1
ZXN0cyBmb3IgYXV0aGVudGljYXRpb24pIGhhdmUgY29tcGxldGVkIGJlZm9yZSBjb250aW51aW5n
IGV2YWx1YXRpb24gb2YgYSByb3V0ZS4KKyogKipTZXJ2ZXItc2lkZToqKiBUbyBlbnN1cmUgYXJi
aXRyYXJ5IGFzeW5jIG9wZXJhdGlvbnMgKHN1Y2ggYXMgcGVyZm9ybWluZyBhdXRoZW50aWNhdGlv
bikgaGF2ZSBjb21wbGV0ZWQgYmVmb3JlIGNvbnRpbnVpbmcgdGhlIGV2YWx1YXRpb24gb2YgYSBy
b3V0ZS4KKworVGhlIG1ldGhvZCBzaWduYXR1cmVzIGZvciByb3V0ZSBmdW5jdGlvbnMgaW4gc3lu
Y2hyb25vdXMgYW5kIGFzeW5jaHJvbm91cyBldmFsdWF0aW9uIGFyZSBkaWZmZXJlbnQ6IGFzeW5j
IHJvdXRlIGZ1bmN0aW9ucyB0YWtlIGFuIGFkZGl0aW9uYWwgYG5leHQoKWAgY2FsbGJhY2suCisK
KyMjIyBTeW5jaHJvbm91cyByb3V0ZSBmdW5jdGlvbnMKKworYGBgIGpzCisgIHZhciByb3V0ZXIg
PSBuZXcgZGlyZWN0b3IuUm91dGVyKCk7CisKKyAgcm91dGVyLm9uKCcvOmZvby86YmFyLzpiYXp6
JywgZnVuY3Rpb24gKGZvbywgYmFyLCBiYXp6KSB7CisgICAgLy8KKyAgICAvLyBEbyBzb21ldGhp
bmcgYXN5bmNocm9ub3VzIHdpdGggYGZvb2AsIGBiYXJgLCBhbmQgYGJhenpgLgorICAgIC8vCisg
IH0pOworYGBgCisKKyMjIyBBc3luY2hyb25vdXMgcm91dGUgZnVuY3Rpb25zCisKK2BgYCBqcwor
ICB2YXIgcm91dGVyID0gbmV3IGRpcmVjdG9yLmh0dHAuUm91dGVyKCkuY29uZmlndXJlKHsgYXN5
bmM6IHRydWUgfSk7CisKKyAgcm91dGVyLm9uKCcvOmZvby86YmFyLzpiYXp6JywgZnVuY3Rpb24g
KGZvbywgYmFyLCBiYXp6LCBuZXh0KSB7CisgICAgLy8KKyAgICAvLyBHbyBkbyBzb21ldGhpbmcg
YXN5bmMsIGFuZCBkZXRlcm1pbmUgdGhhdCByb3V0aW5nIHNob3VsZCBzdG9wCisgICAgLy8KKyAg
ICBuZXh0KGZhbHNlKTsKKyAgfSk7CitgYGAKKworPGEgbmFtZT0icmVzb3VyY2VzIj48L2E+Cisj
IyBSZXNvdXJjZXMKKworKipBdmFpbGFibGUgb24gdGhlIENsaWVudC1zaWRlIG9ubHkuKiogQW4g
b2JqZWN0IGxpdGVyYWwgY29udGFpbmluZyBmdW5jdGlvbnMuIElmIGEgaG9zdCBvYmplY3QgaXMg
c3BlY2lmaWVkLCB5b3VyIHJvdXRlIGRlZmluaXRpb25zIGNhbiBwcm92aWRlIHN0cmluZyBsaXRl
cmFscyB0aGF0IHJlcHJlc2VudCB0aGUgZnVuY3Rpb24gbmFtZXMgaW5zaWRlIHRoZSBob3N0IG9i
amVjdC4gQSBob3N0IG9iamVjdCBjYW4gcHJvdmlkZSB0aGUgbWVhbnMgZm9yIGJldHRlciBlbmNh
cHN1bGF0aW9uIGFuZCBkZXNpZ24uCisKK2BgYCBqcworCisgIHZhciByb3V0ZXIgPSBSb3V0ZXIo
eworCisgICAgJy9oZWxsbyc6IHsKKyAgICAgICcvdXNhJzogJ2FtZXJpY2FzJywKKyAgICAgICcv
Y2hpbmEnOiAnYXNpYScKKyAgICB9CisKKyAgfSkuY29uZmlndXJlKHsgcmVzb3VyY2U6IGNvbnRh
aW5lciB9KS5pbml0KCk7CisKKyAgdmFyIGNvbnRhaW5lciA9IHsKKyAgICBhbWVyaWNhczogZnVu
Y3Rpb24oKSB7IHJldHVybiB0cnVlOyB9LAorICAgIGNoaW5hOiBmdW5jdGlvbigpIHsgcmV0dXJu
IHRydWU7IH0KKyAgfTsKKworYGBgCisKKzxhIG5hbWU9Imhpc3RvcnktYXBpIj48L2E+CisjIyBI
aXN0b3J5IEFQSQorCisqKkF2YWlsYWJsZSBvbiB0aGUgQ2xpZW50LXNpZGUgb25seS4qKiBEaXJl
Y3RvciBzdXBwb3J0cyB1c2luZyBIVE1MNSBIaXN0b3J5IEFQSSBpbnN0ZWFkIG9mIGhhc2ggZnJh
Z21lbnRzIGZvciBuYXZpZ2F0aW9uLiBUbyB1c2UgdGhlIEFQSSwgcGFzcyBge2h0bWw1aGlzdG9y
eTogdHJ1ZX1gIHRvIGBjb25maWd1cmUoKWAuIFVzZSBvZiB0aGUgQVBJIGlzIGVuYWJsZWQgb25s
eSBpZiB0aGUgY2xpZW50IHN1cHBvcnRzIGBwdXNoU3RhdGUoKWAuCisKK1VzaW5nIHRoZSBBUEkg
Z2l2ZXMgeW91IGNsZWFuZXIgVVJJcyBidXQgdGhleSBjb21lIHdpdGggYSBjb3N0LiBVbmxpa2Ug
d2l0aCBoYXNoIGZyYWdtZW50cyB5b3VyIHJvdXRlIFVSSXMgbXVzdCBleGlzdC4gV2hlbiB0aGUg
Y2xpZW50IGVudGVycyBhIHBhZ2UsIHNheSBodHRwOi8vZm9vLmNvbS9iYXIvYmF6LCB0aGUgd2Vi
IHNlcnZlciBtdXN0IHJlc3BvbmQgd2l0aCBzb21ldGhpbmcgbWVhbmluZ2Z1bC4gVXN1YWxseSB0
aGlzIG1lYW5zIHRoYXQgeW91ciB3ZWIgc2VydmVyIGNoZWNrcyB0aGUgVVJJIHBvaW50cyB0byBz
b21ldGhpbmcgdGhhdCwgaW4gYSBzZW5zZSwgZXhpc3RzLCBhbmQgdGhlbiBzZXJ2ZXMgdGhlIGNs
aWVudCB0aGUgSmF2YVNjcmlwdCBhcHBsaWNhdGlvbi4KKworSWYgeW91J3JlIGFmdGVyIGEgc2lu
Z2xlLXBhZ2UgYXBwbGljYXRpb24geW91IGNhbiBub3QgdXNlIHBsYWluIG9sZCBgPGEgaHJlZj0i
L2Jhci9iYXoiPmAgdGFncyBmb3IgbmF2aWdhdGlvbiBhbnltb3JlLiBXaGVuIHN1Y2ggbGluayBp
cyBjbGlja2VkLCB3ZWIgYnJvd3NlcnMgdHJ5IHRvIGFzayBmb3IgdGhlIHJlc291cmNlIGZyb20g
c2VydmVyIHdoaWNoIGlzIG5vdCBvZiBjb3Vyc2UgZGVzaXJlZCBmb3IgYSBzaW5nbGUtcGFnZSBh
cHBsaWNhdGlvbi4gSW5zdGVhZCB5b3UgbmVlZCB0byB1c2UgZS5nLiBjbGljayBoYW5kbGVycyBh
bmQgY2FsbCB0aGUgYHNldFJvdXRlKClgIG1ldGhvZCB5b3Vyc2VsZi4KKworPGEgbmFtZT0iYXR0
YWNoLXRvLXRoaXMiPjwvYT4KKyMjIEF0dGFjaCBQcm9wZXJ0aWVzIFRvIGB0aGlzYAorCitHZW5l
cmFsbHksIHRoZSBgdGhpc2Agb2JqZWN0IGJvdW5kIHRvIHJvdXRlIGhhbmRsZXJzLCB3aWxsIGNv
bnRhaW4gdGhlIHJlcXVlc3QgaW4gYHRoaXMucmVxYCBhbmQgdGhlIHJlc3BvbnNlIGluIGB0aGlz
LnJlc2AuIE9uZSBtYXkgYXR0YWNoIGFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBgdGhpc2Agd2l0
aCB0aGUgYHJvdXRlci5hdHRhY2hgIG1ldGhvZDoKKworYGBganMKKyAgdmFyIGRpcmVjdG9yID0g
cmVxdWlyZSgnZGlyZWN0b3InKTsKKworICB2YXIgcm91dGVyID0gbmV3IGRpcmVjdG9yLmh0dHAu
Um91dGVyKCkuY29uZmlndXJlKG9wdGlvbnMpOworCisgIC8vCisgIC8vIEF0dGFjaCBwcm9wZXJ0
aWVzIHRvIGB0aGlzYAorICAvLworICByb3V0ZXIuYXR0YWNoKGZ1bmN0aW9uICgpIHsKKyAgICB0
aGlzLmRhdGEgPSBbMSwyLDNdOworICB9KTsKKworICAvLworICAvLyBBY2Nlc3MgcHJvcGVydGll
cyBhdHRhY2hlZCB0byBgdGhpc2AgaW4geW91ciByb3V0ZXMhCisgIC8vCisgIHJvdXRlci5nZXQo
Jy9oZWxsbycsIGZ1bmN0aW9uICgpIHsKKyAgICB0aGlzLnJlcy53cml0ZUhlYWQoMjAwLCB7ICdj
b250ZW50LXR5cGUnOiAndGV4dC9wbGFpbicgfSk7CisKKyAgICAvLworICAgIC8vIFJlc3BvbnNl
IHdpbGwgYmUgYFsxLDIsM11gIQorICAgIC8vCisgICAgdGhpcy5yZXMuZW5kKHRoaXMuZGF0YSk7
CisgIH0pOworYGBgCisKK1RoaXMgQVBJIG1heSBiZSB1c2VkIHRvIGF0dGFjaCBjb252ZW5pZW5j
ZSBtZXRob2RzIHRvIHRoZSBgdGhpc2AgY29udGV4dCBvZiByb3V0ZSBoYW5kbGVycy4KKworPGEg
bmFtZT0iaHR0cC1zdHJlYW1pbmctYm9keS1wYXJzaW5nIj4KKyMjIEhUVFAgU3RyZWFtaW5nIGFu
ZCBCb2R5IFBhcnNpbmcKKworV2hlbiB5b3UgYXJlIHBlcmZvcm1pbmcgSFRUUCByb3V0aW5nIHRo
ZXJlIGFyZSB0d28gY29tbW9uIHNjZW5hcmlvczoKKworKiBCdWZmZXIgdGhlIHJlcXVlc3QgYm9k
eSBhbmQgcGFyc2UgaXQgYWNjb3JkaW5nIHRvIHRoZSBgQ29udGVudC1UeXBlYCBoZWFkZXIgKHVz
dWFsbHkgYGFwcGxpY2F0aW9uL2pzb25gIG9yIGBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVu
Y29kZWRgKS4KKyogU3RyZWFtIHRoZSByZXF1ZXN0IGJvZHkgYnkgbWFudWFsbHkgY2FsbGluZyBg
LnBpcGVgIG9yIGxpc3RlbmluZyB0byB0aGUgYGRhdGFgIGFuZCBgZW5kYCBldmVudHMuCisKK0J5
IGRlZmF1bHQgYGRpcmVjdG9yLmh0dHAuUm91dGVyKClgIHdpbGwgYXR0ZW1wdCB0byBwYXJzZSBl
aXRoZXIgdGhlIGAuY2h1bmtzYCBvciBgLmJvZHlgIHByb3BlcnRpZXMgc2V0IG9uIHRoZSByZXF1
ZXN0IHBhcmFtZXRlciBwYXNzZWQgdG8gYHJvdXRlci5kaXNwYXRjaChyZXF1ZXN0LCByZXNwb25z
ZSwgY2FsbGJhY2spYC4gVGhlIHJvdXRlciBpbnN0YW5jZSB3aWxsIGFsc28gd2FpdCBmb3IgdGhl
IGBlbmRgIGV2ZW50IGJlZm9yZSBmaXJpbmcgYW55IHJvdXRlcy4KKworKipEZWZhdWx0IEJlaGF2
aW9yKioKKworYGBgIGpzCisgIHZhciBkaXJlY3RvciA9IHJlcXVpcmUoJ2RpcmVjdG9yJyk7CisK
KyAgdmFyIHJvdXRlciA9IG5ldyBkaXJlY3Rvci5odHRwLlJvdXRlcigpOworCisgIHJvdXRlci5n
ZXQoJy8nLCBmdW5jdGlvbiAoKSB7CisgICAgLy8KKyAgICAvLyBUaGlzIHdpbGwgbm90IHdvcmss
IGJlY2F1c2UgYWxsIG9mIHRoZSBkYXRhCisgICAgLy8gZXZlbnRzIGFuZCB0aGUgZW5kIGV2ZW50
IGhhdmUgYWxyZWFkeSBmaXJlZC4KKyAgICAvLworICAgIHRoaXMucmVxLm9uKCdkYXRhJywgZnVu
Y3Rpb24gKGNodW5rKSB7CisgICAgICBjb25zb2xlLmxvZyhjaHVuaykKKyAgICB9KTsKKyAgfSk7
CitgYGAKKworSW4gW2ZsYXRpcm9uXVsyXSwgYGRpcmVjdG9yYCBpcyB1c2VkIGluIGNvbmp1bmN0
aW9uIHdpdGggW3VuaW9uXVszXSB3aGljaCB1c2VzIGEgYEJ1ZmZlcmVkU3RyZWFtYCBwcm94eSB0
byB0aGUgcmF3IGBodHRwLlJlcXVlc3RgIGluc3RhbmNlLiBbdW5pb25dWzNdIHdpbGwgc2V0IHRo
ZSBgcmVxLmNodW5rc2AgcHJvcGVydHkgZm9yIHlvdSBhbmQgZGlyZWN0b3Igd2lsbCBhdXRvbWF0
aWNhbGx5IHBhcnNlIHRoZSBib2R5LiBJZiB5b3Ugd2lzaCB0byBwZXJmb3JtIHRoaXMgYnVmZmVy
aW5nIHlvdXJzZWxmIGRpcmVjdGx5IHdpdGggYGRpcmVjdG9yYCB5b3UgY2FuIHVzZSBhIHNpbXBs
ZSByZXF1ZXN0IGhhbmRsZXIgaW4geW91ciBodHRwIHNlcnZlcjoKKworYGBgIGpzCisgIHZhciBo
dHRwID0gcmVxdWlyZSgnaHR0cCcpLAorICAgICAgZGlyZWN0b3IgPSByZXF1aXJlKCdkaXJlY3Rv
cicpOworCisgIHZhciByb3V0ZXIgPSBuZXcgZGlyZWN0b3IuaHR0cC5Sb3V0ZXIoKTsKKworICB2
YXIgc2VydmVyID0gaHR0cC5jcmVhdGVTZXJ2ZXIoZnVuY3Rpb24gKHJlcSwgcmVzKSB7CisgICAg
cmVxLmNodW5rcyA9IFtdOworICAgIHJlcS5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgewor
ICAgICAgcmVxLmNodW5rcy5wdXNoKGNodW5rLnRvU3RyaW5nKCkpOworICAgIH0pOworCisgICAg
cm91dGVyLmRpc3BhdGNoKHJlcSwgcmVzLCBmdW5jdGlvbiAoZXJyKSB7CisgICAgICBpZiAoZXJy
KSB7CisgICAgICAgIHJlcy53cml0ZUhlYWQoNDA0KTsKKyAgICAgICAgcmVzLmVuZCgpOworICAg
ICAgfQorCisgICAgICBjb25zb2xlLmxvZygnU2VydmVkICcgKyByZXEudXJsKTsKKyAgICB9KTsK
KyAgfSk7CisKKyAgcm91dGVyLnBvc3QoJy8nLCBmdW5jdGlvbiAoKSB7CisgICAgdGhpcy5yZXMu
d3JpdGVIZWFkKDIwMCwgeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0pCisg
ICAgdGhpcy5yZXMuZW5kKEpTT04uc3RyaW5naWZ5KHRoaXMucmVxLmJvZHkpKTsKKyAgfSk7Citg
YGAKKworKipTdHJlYW1pbmcgU3VwcG9ydCoqCisKK0lmIHlvdSB3aXNoIHRvIGdldCBhY2Nlc3Mg
dG8gdGhlIHJlcXVlc3Qgc3RyZWFtIGJlZm9yZSB0aGUgYGVuZGAgZXZlbnQgaXMgZmlyZWQsIHlv
dSBjYW4gcGFzcyB0aGUgYHsgc3RyZWFtOiB0cnVlIH1gIG9wdGlvbnMgdG8gdGhlIHJvdXRlLgor
CitgYGAganMKKyAgdmFyIGRpcmVjdG9yID0gcmVxdWlyZSgnZGlyZWN0b3InKTsKKworICB2YXIg
cm91dGVyID0gbmV3IGRpcmVjdG9yLmh0dHAuUm91dGVyKCk7CisKKyAgcm91dGVyLmdldCgnLycs
IHsgc3RyZWFtOiB0cnVlIH0sIGZ1bmN0aW9uICgpIHsKKyAgICAvLworICAgIC8vIFRoaXMgd2ls
bCB3b3JrIGJlY2F1c2UgdGhlIHJvdXRlIGhhbmRsZXIgaXMgaW52b2tlZAorICAgIC8vIGltbWVk
aWF0ZWx5IHdpdGhvdXQgd2FpdGluZyBmb3IgdGhlIGBlbmRgIGV2ZW50LgorICAgIC8vCisgICAg
dGhpcy5yZXEub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsKKyAgICAgIGNvbnNvbGUubG9n
KGNodW5rKTsKKyAgICB9KTsKKyAgfSk7CitgYGAKKworPGEgbmFtZT0iaW5zdGFuY2UtbWV0aG9k
cyI+PC9hPgorIyMgSW5zdGFuY2UgbWV0aG9kcworCisjIyMgY29uZmlndXJlKG9wdGlvbnMpCisq
IGBvcHRpb25zYCB7T2JqZWN0fTogT3B0aW9ucyB0byBjb25maWd1cmUgdGhpcyBpbnN0YW5jZSB3
aXRoLgorCitDb25maWd1cmVzIHRoZSBSb3V0ZXIgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVk
IGBvcHRpb25zYC4gU2VlIFtDb25maWd1cmF0aW9uXSgjY29uZmlndXJhdGlvbikgZm9yIG1vcmUg
ZG9jdW1lbnRhdGlvbi4KKworIyMjIHBhcmFtKHRva2VuLCBtYXRjaGVyKQorKiB0b2tlbiB7c3Ry
aW5nfTogTmFtZWQgcGFyYW1ldGVyIHRva2VuIHRvIHNldCB0byB0aGUgc3BlY2lmaWVkIGBtYXRj
aGVyYAorKiBtYXRjaGVyIHtzdHJpbmd8UmVnZXhwfTogTWF0Y2hlciBmb3IgdGhlIHNwZWNpZmll
ZCBgdG9rZW5gLgorCitBZGRzIGEgcm91dGUgZnJhZ21lbnQgZm9yIHRoZSBnaXZlbiBzdHJpbmcg
YHRva2VuYCB0byB0aGUgc3BlY2lmaWVkIHJlZ2V4IGBtYXRjaGVyYCB0byB0aGlzIFJvdXRlciBp
bnN0YW5jZS4gU2VlIFtVUkwgUGFyYW1ldGVyc10oI3VybC1wYXJhbXMpIGZvciBtb3JlIGRvY3Vt
ZW50YXRpb24uCisKKyMjIyBvbihtZXRob2QsIHBhdGgsIHJvdXRlKQorKiBgbWV0aG9kYCB7c3Ry
aW5nfTogTWV0aG9kIHRvIGluc2VydCB3aXRoaW4gdGhlIFJvdXRpbmcgVGFibGUgKGUuZy4gYG9u
YCwgYGdldGAsIGV0Yy4pLgorKiBgcGF0aGAge3N0cmluZ306IFBhdGggd2l0aGluIHRoZSBSb3V0
aW5nIFRhYmxlIHRvIHNldCB0aGUgYHJvdXRlYCB0by4KKyogYHJvdXRlYCB7ZnVuY3Rpb258QXJy
YXl9OiBSb3V0ZSBoYW5kbGVyIHRvIGludm9rZSBmb3IgdGhlIGBtZXRob2RgIGFuZCBgcGF0aGAu
CisKK0FkZHMgdGhlIGByb3V0ZWAgaGFuZGxlciBmb3IgdGhlIHNwZWNpZmllZCBgbWV0aG9kYCBh
bmQgYHBhdGhgIHdpdGhpbiB0aGUgW1JvdXRpbmcgVGFibGVdKCNyb3V0aW5nLXRhYmxlKS4KKwor
IyMjIHBhdGgocGF0aCwgcm91dGVzRm4pCisqIGBwYXRoYCB7c3RyaW5nfFJlZ2V4cH06IFNjb3Bl
IHdpdGhpbiB0aGUgUm91dGluZyBUYWJsZSB0byBpbnZva2UgdGhlIGByb3V0ZXNGbmAgd2l0aGlu
LgorKiBgcm91dGVzRm5gIHtmdW5jdGlvbn06IEFkaG9jIFJvdXRpbmcgZnVuY3Rpb24gd2l0aCBj
YWxscyB0byBgdGhpcy5vbigpYCwgYHRoaXMuZ2V0KClgIGV0Yy4KKworSW52b2tlcyB0aGUgYHJv
dXRlc0ZuYCB3aXRoaW4gdGhlIHNjb3BlIG9mIHRoZSBzcGVjaWZpZWQgYHBhdGhgIGZvciB0aGlz
IFJvdXRlciBpbnN0YW5jZS4KKworIyMjIGRpc3BhdGNoKG1ldGhvZCwgcGF0aFssIGNhbGxiYWNr
XSkKKyogbWV0aG9kIHtzdHJpbmd9OiBNZXRob2QgdG8gaW52b2tlIGhhbmRsZXJzIGZvciB3aXRo
aW4gdGhlIFJvdXRpbmcgVGFibGUKKyogcGF0aCB7c3RyaW5nfTogUGF0aCB3aXRoaW4gdGhlIFJv
dXRpbmcgVGFibGUgdG8gbWF0Y2gKKyogY2FsbGJhY2sge2Z1bmN0aW9ufTogSW52b2tlZCBvbmNl
IGFsbCByb3V0ZSBoYW5kbGVycyBoYXZlIGJlZW4gY2FsbGVkLgorCitEaXNwYXRjaGVzIHRoZSBy
b3V0ZSBoYW5kbGVycyBtYXRjaGVkIHdpdGhpbiB0aGUgW1JvdXRpbmcgVGFibGVdKCNyb3V0aW5n
LXRhYmxlKSBmb3IgdGhpcyBpbnN0YW5jZSBmb3IgdGhlIHNwZWNpZmllZCBgbWV0aG9kYCBhbmQg
YHBhdGhgLgorCisjIyMgbW91bnQocm91dGVzLCBwYXRoKQorKiByb3V0ZXMge29iamVjdH06IFBh
cnRpYWwgcm91dGluZyB0YWJsZSB0byBpbnNlcnQgaW50byB0aGlzIGluc3RhbmNlLgorKiBwYXRo
IHtzdHJpbmd8UmVnZXhwfTogUGF0aCB3aXRoaW4gdGhlIFJvdXRpbmcgVGFibGUgdG8gaW5zZXJ0
IHRoZSBgcm91dGVzYCBpbnRvLgorCitJbnNlcnRzIHRoZSBwYXJ0aWFsIFtSb3V0aW5nIFRhYmxl
XSgjcm91dGluZy10YWJsZSksIGByb3V0ZXNgLCBpbnRvIHRoZSBSb3V0aW5nIFRhYmxlIGZvciB0
aGlzIFJvdXRlciBpbnN0YW5jZSBhdCB0aGUgc3BlY2lmaWVkIGBwYXRoYC4KKworIyMgSW5zdGFu
Y2UgbWV0aG9kcyAoQ2xpZW50LXNpZGUgb25seSkKKworIyMjIGluaXQoW3JlZGlyZWN0XSkKKyog
YHJlZGlyZWN0YCB7U3RyaW5nfTogVGhpcyB2YWx1ZSB3aWxsIGJlIHVzZWQgaWYgJy8jLycgaXMg
bm90IGZvdW5kIGluIHRoZSBVUkwuIChlLmcuLCBpbml0KCcvJykgd2lsbCByZXNvbHZlIHRvICcv
Iy8nLCBpbml0KCdmb28nKSB3aWxsIHJlc29sdmUgdG8gJy8jZm9vJykuCisKK0luaXRpYWxpemUg
dGhlIHJvdXRlciwgc3RhcnQgbGlzdGVuaW5nIGZvciBjaGFuZ2VzIHRvIHRoZSBVUkwuCisKKyMj
IyBnZXRSb3V0ZShbaW5kZXhdKQorKiBgaW5kZXhgIHtOdW1iZXJ9OiBUaGUgaGFzaCB2YWx1ZSBp
cyBkaXZpZGVkIGJ5IGZvcndhcmQgc2xhc2hlcywgZWFjaCBzZWN0aW9uIHRoZW4gaGFzIGFuIGlu
ZGV4LCBpZiB0aGlzIGlzIHByb3ZpZGVkLCBvbmx5IHRoYXQgc2VjdGlvbiBvZiB0aGUgcm91dGUg
d2lsbCBiZSByZXR1cm5lZC4KKworUmV0dXJucyB0aGUgZW50aXJlIHJvdXRlIG9yIGp1c3QgYSBz
ZWN0aW9uIG9mIGl0LgorCisjIyMgc2V0Um91dGUocm91dGUpCisqIGByb3V0ZWAge1N0cmluZ306
IFN1cHBseSBhIHJvdXRlIHZhbHVlLCBzdWNoIGFzIGBob21lL3N0YXRzYC4KKworU2V0IHRoZSBj
dXJyZW50IHJvdXRlLgorCisjIyMgc2V0Um91dGUoc3RhcnQsIGxlbmd0aCkKKyogYHN0YXJ0YCB7
TnVtYmVyfSAtIFRoZSBwb3NpdGlvbiBhdCB3aGljaCB0byBzdGFydCByZW1vdmluZyBpdGVtcy4K
KyogYGxlbmd0aGAge051bWJlcn0gLSBUaGUgbnVtYmVyIG9mIGl0ZW1zIHRvIHJlbW92ZSBmcm9t
IHRoZSByb3V0ZS4KKworUmVtb3ZlIGEgc2VnbWVudCBmcm9tIHRoZSBjdXJyZW50IHJvdXRlLgor
CisjIyMgc2V0Um91dGUoaW5kZXgsIHZhbHVlKQorKiBgaW5kZXhgIHtOdW1iZXJ9IC0gVGhlIGhh
c2ggdmFsdWUgaXMgZGl2aWRlZCBieSBmb3J3YXJkIHNsYXNoZXMsIGVhY2ggc2VjdGlvbiB0aGVu
IGhhcyBhbiBpbmRleC4KKyogYHZhbHVlYCB7U3RyaW5nfSAtIFRoZSBuZXcgdmFsdWUgdG8gYXNz
aWduIHRoZSB0aGUgcG9zaXRpb24gaW5kaWNhdGVkIGJ5IHRoZSBmaXJzdCBwYXJhbWV0ZXIuCisK
K1NldCBhIHNlZ21lbnQgb2YgdGhlIGN1cnJlbnQgcm91dGUuCisKKzxhIG5hbWU9ImZhcSI+PC9h
PgorIyBGcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9ucworCisjIyBXaGF0IEFib3V0IFNFTz8KKwor
SXMgdXNpbmcgYSBDbGllbnQtc2lkZSByb3V0ZXIgYSBwcm9ibGVtIGZvciBTRU8/IFllcy4gSWYg
YWR2ZXJ0aXNpbmcgaXMgYSByZXF1aXJlbWVudCwgeW91IGFyZSBwcm9iYWJseSBidWlsZGluZyBh
ICJXZWIgUGFnZSIgYW5kIG5vdCBhICJXZWIgQXBwbGljYXRpb24iLiBEaXJlY3RvciBvbiB0aGUg
Y2xpZW50IGlzIG1lYW50IGZvciBzY3JpcHQtaGVhdnkgV2ViIEFwcGxpY2F0aW9ucy4KKworIyBM
aWNlbmNlCisKKyhUaGUgTUlUIExpY2Vuc2UpCisKK0NvcHlyaWdodCAoYykgMjAxMCBOb2Rlaml0
c3UgSW5jLiA8aHR0cDovL3d3dy50d2l0dGVyLmNvbS9ub2Rlaml0c3U+CisKK1Blcm1pc3Npb24g
aXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmlu
ZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZp
bGVzICh0aGUgJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVz
dHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2Us
IGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFu
ZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0
byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQg
dGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9y
IHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElT
IFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Mg
T1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBO
T05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdI
VCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNF
LCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJF
IE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorCitbMF06IGh0
dHA6Ly9naXRodWIuY29tL2ZsYXRpcm9uL2RpcmVjdG9yCitbMV06IGh0dHBzOi8vZ2l0aHViLmNv
bS9mbGF0aXJvbi9kaXJlY3Rvci9ibG9iL21hc3Rlci9idWlsZC9kaXJlY3Rvci5taW4uanMKK1sy
XTogaHR0cDovL2dpdGh1Yi5jb20vZmxhdGlyb24vZmxhdGlyb24KK1szXTogaHR0cDovL2dpdGh1
Yi5jb20vZmxhdGlyb24vdW5pb24KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5v
cmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvbGFicy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvcmVhY3QvYm93ZXJfY29tcG9uZW50cy9kaXJlY3Rvci9idWlsZC9kaXJlY3Rvci5qcyBi
L1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9t
dmMvbGFicy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvYm93ZXJfY29tcG9uZW50cy9kaXJl
Y3Rvci9idWlsZC9kaXJlY3Rvci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYmVmYmUwNzUxOGM2YWRlY2UzMTg0
NjBhNGUwMjg4YzA1NmFjMDM0Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJl
bmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9sYWJzL2FyY2hpdGVjdHVy
ZS1leGFtcGxlcy9yZWFjdC9ib3dlcl9jb21wb25lbnRzL2RpcmVjdG9yL2J1aWxkL2RpcmVjdG9y
LmpzCkBAIC0wLDAgKzEsNzEyIEBACisKKworLy8KKy8vIEdlbmVyYXRlZCBvbiBTdW4gRGVjIDE2
IDIwMTIgMjI6NDc6MDUgR01ULTA1MDAgKEVTVCkgYnkgTm9kZWppdHN1LCBJbmMgKFVzaW5nIENv
ZGVzdXJnZW9uKS4KKy8vIFZlcnNpb24gMS4xLjkKKy8vCisKKyhmdW5jdGlvbiAoZXhwb3J0cykg
eworCisKKy8qCisgKiBicm93c2VyLmpzOiBCcm93c2VyIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkg
Zm9yIGRpcmVjdG9yLgorICoKKyAqIChDKSAyMDExLCBOb2Rlaml0c3UgSW5jLgorICogTUlUIExJ
Q0VOU0UKKyAqCisgKi8KKworaWYgKCFBcnJheS5wcm90b3R5cGUuZmlsdGVyKSB7CisgIEFycmF5
LnByb3RvdHlwZS5maWx0ZXIgPSBmdW5jdGlvbihmaWx0ZXIsIHRoYXQpIHsKKyAgICB2YXIgb3Ro
ZXIgPSBbXSwgdjsKKyAgICBmb3IgKHZhciBpID0gMCwgbiA9IHRoaXMubGVuZ3RoOyBpIDwgbjsg
aSsrKSB7CisgICAgICBpZiAoaSBpbiB0aGlzICYmIGZpbHRlci5jYWxsKHRoYXQsIHYgPSB0aGlz
W2ldLCBpLCB0aGlzKSkgeworICAgICAgICBvdGhlci5wdXNoKHYpOworICAgICAgfQorICAgIH0K
KyAgICByZXR1cm4gb3RoZXI7CisgIH07Cit9CisKK2lmICghQXJyYXkuaXNBcnJheSl7CisgIEFy
cmF5LmlzQXJyYXkgPSBmdW5jdGlvbihvYmopIHsKKyAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlw
ZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7CisgIH07Cit9CisKK3Zh
ciBkbG9jID0gZG9jdW1lbnQubG9jYXRpb247CisKK2Z1bmN0aW9uIGRsb2NIYXNoRW1wdHkoKSB7
CisgIC8vIE5vbi1JRSBicm93c2VycyByZXR1cm4gJycgd2hlbiB0aGUgYWRkcmVzcyBiYXIgc2hv
d3MgJyMnOyBEaXJlY3RvcidzIGxvZ2ljCisgIC8vIGFzc3VtZXMgYm90aCBtZWFuIGVtcHR5Lgor
ICByZXR1cm4gZGxvYy5oYXNoID09PSAnJyB8fCBkbG9jLmhhc2ggPT09ICcjJzsKK30KKwordmFy
IGxpc3RlbmVyID0geworICBtb2RlOiAnbW9kZXJuJywKKyAgaGFzaDogZGxvYy5oYXNoLAorICBo
aXN0b3J5OiBmYWxzZSwKKworICBjaGVjazogZnVuY3Rpb24gKCkgeworICAgIHZhciBoID0gZGxv
Yy5oYXNoOworICAgIGlmIChoICE9IHRoaXMuaGFzaCkgeworICAgICAgdGhpcy5oYXNoID0gaDsK
KyAgICAgIHRoaXMub25IYXNoQ2hhbmdlZCgpOworICAgIH0KKyAgfSwKKworICBmaXJlOiBmdW5j
dGlvbiAoKSB7CisgICAgaWYgKHRoaXMubW9kZSA9PT0gJ21vZGVybicpIHsKKyAgICAgIHRoaXMu
aGlzdG9yeSA9PT0gdHJ1ZSA/IHdpbmRvdy5vbnBvcHN0YXRlKCkgOiB3aW5kb3cub25oYXNoY2hh
bmdlKCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgdGhpcy5vbkhhc2hDaGFuZ2VkKCk7Cisg
ICAgfQorICB9LAorCisgIGluaXQ6IGZ1bmN0aW9uIChmbiwgaGlzdG9yeSkgeworICAgIHZhciBz
ZWxmID0gdGhpczsKKyAgICB0aGlzLmhpc3RvcnkgPSBoaXN0b3J5OworCisgICAgaWYgKCFSb3V0
ZXIubGlzdGVuZXJzKSB7CisgICAgICBSb3V0ZXIubGlzdGVuZXJzID0gW107CisgICAgfQorCisg
ICAgZnVuY3Rpb24gb25jaGFuZ2Uob25DaGFuZ2VFdmVudCkgeworICAgICAgZm9yICh2YXIgaSA9
IDAsIGwgPSBSb3V0ZXIubGlzdGVuZXJzLmxlbmd0aDsgaSA8IGw7IGkrKykgeworICAgICAgICBS
b3V0ZXIubGlzdGVuZXJzW2ldKG9uQ2hhbmdlRXZlbnQpOworICAgICAgfQorICAgIH0KKworICAg
IC8vbm90ZSBJRTggaXMgYmVpbmcgY291bnRlZCBhcyAnbW9kZXJuJyBiZWNhdXNlIGl0IGhhcyB0
aGUgaGFzaGNoYW5nZSBldmVudAorICAgIGlmICgnb25oYXNoY2hhbmdlJyBpbiB3aW5kb3cgJiYg
KGRvY3VtZW50LmRvY3VtZW50TW9kZSA9PT0gdW5kZWZpbmVkCisgICAgICB8fCBkb2N1bWVudC5k
b2N1bWVudE1vZGUgPiA3KSkgeworICAgICAgLy8gQXQgbGVhc3QgZm9yIG5vdyBIVE1MNSBoaXN0
b3J5IGlzIGF2YWlsYWJsZSBmb3IgJ21vZGVybicgYnJvd3NlcnMgb25seQorICAgICAgaWYgKHRo
aXMuaGlzdG9yeSA9PT0gdHJ1ZSkgeworICAgICAgICAvLyBUaGVyZSBpcyBhbiBvbGQgYnVnIGlu
IENocm9tZSB0aGF0IGNhdXNlcyBvbnBvcHN0YXRlIHRvIGZpcmUgZXZlbgorICAgICAgICAvLyB1
cG9uIGluaXRpYWwgcGFnZSBsb2FkLiBTaW5jZSB0aGUgaGFuZGxlciBpcyBydW4gbWFudWFsbHkg
aW4gaW5pdCgpLAorICAgICAgICAvLyB0aGlzIHdvdWxkIGNhdXNlIENocm9tZSB0byBydW4gaXQg
dHdpc2UuIEN1cnJlbnRseSB0aGUgb25seQorICAgICAgICAvLyB3b3JrYXJvdW5kIHNlZW1zIHRv
IGJlIHRvIHNldCB0aGUgaGFuZGxlciBhZnRlciB0aGUgaW5pdGlhbCBwYWdlIGxvYWQKKyAgICAg
ICAgLy8gaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9
NjMwNDAKKyAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICB3aW5kb3cu
b25wb3BzdGF0ZSA9IG9uY2hhbmdlOworICAgICAgICB9LCA1MDApOworICAgICAgfQorICAgICAg
ZWxzZSB7CisgICAgICAgIHdpbmRvdy5vbmhhc2hjaGFuZ2UgPSBvbmNoYW5nZTsKKyAgICAgIH0K
KyAgICAgIHRoaXMubW9kZSA9ICdtb2Rlcm4nOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8v
CisgICAgICAvLyBJRSBzdXBwb3J0LCBiYXNlZCBvbiBhIGNvbmNlcHQgYnkgRXJpayBBcnZpZHNv
biAuLi4KKyAgICAgIC8vCisgICAgICB2YXIgZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCdpZnJhbWUnKTsKKyAgICAgIGZyYW1lLmlkID0gJ3N0YXRlLWZyYW1lJzsKKyAgICAgIGZyYW1l
LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxk
KGZyYW1lKTsKKyAgICAgIHRoaXMud3JpdGVGcmFtZSgnJyk7CisKKyAgICAgIGlmICgnb25wcm9w
ZXJ0eWNoYW5nZScgaW4gZG9jdW1lbnQgJiYgJ2F0dGFjaEV2ZW50JyBpbiBkb2N1bWVudCkgewor
ICAgICAgICBkb2N1bWVudC5hdHRhY2hFdmVudCgnb25wcm9wZXJ0eWNoYW5nZScsIGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICBpZiAoZXZlbnQucHJvcGVydHlOYW1lID09PSAnbG9jYXRpb24nKSB7
CisgICAgICAgICAgICBzZWxmLmNoZWNrKCk7CisgICAgICAgICAgfQorICAgICAgICB9KTsKKyAg
ICAgIH0KKworICAgICAgd2luZG93LnNldEludGVydmFsKGZ1bmN0aW9uICgpIHsgc2VsZi5jaGVj
aygpOyB9LCA1MCk7CisKKyAgICAgIHRoaXMub25IYXNoQ2hhbmdlZCA9IG9uY2hhbmdlOworICAg
ICAgdGhpcy5tb2RlID0gJ2xlZ2FjeSc7CisgICAgfQorCisgICAgUm91dGVyLmxpc3RlbmVycy5w
dXNoKGZuKTsKKworICAgIHJldHVybiB0aGlzLm1vZGU7CisgIH0sCisKKyAgZGVzdHJveTogZnVu
Y3Rpb24gKGZuKSB7CisgICAgaWYgKCFSb3V0ZXIgfHwgIVJvdXRlci5saXN0ZW5lcnMpIHsKKyAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2YXIgbGlzdGVuZXJzID0gUm91dGVyLmxpc3RlbmVy
czsKKworICAgIGZvciAodmFyIGkgPSBsaXN0ZW5lcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0p
IHsKKyAgICAgIGlmIChsaXN0ZW5lcnNbaV0gPT09IGZuKSB7CisgICAgICAgIGxpc3RlbmVycy5z
cGxpY2UoaSwgMSk7CisgICAgICB9CisgICAgfQorICB9LAorCisgIHNldEhhc2g6IGZ1bmN0aW9u
IChzKSB7CisgICAgLy8gTW96aWxsYSBhbHdheXMgYWRkcyBhbiBlbnRyeSB0byB0aGUgaGlzdG9y
eQorICAgIGlmICh0aGlzLm1vZGUgPT09ICdsZWdhY3knKSB7CisgICAgICB0aGlzLndyaXRlRnJh
bWUocyk7CisgICAgfQorCisgICAgaWYgKHRoaXMuaGlzdG9yeSA9PT0gdHJ1ZSkgeworICAgICAg
d2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKHt9LCBkb2N1bWVudC50aXRsZSwgcyk7CisgICAgICAv
LyBGaXJlIGFuIG9ucG9wc3RhdGUgZXZlbnQgbWFudWFsbHkgc2luY2UgcHVzaGluZyBkb2VzIG5v
dCBvYnZpb3VzbHkKKyAgICAgIC8vIHRyaWdnZXIgdGhlIHBvcCBldmVudC4KKyAgICAgIHRoaXMu
ZmlyZSgpOworICAgIH0gZWxzZSB7CisgICAgICBkbG9jLmhhc2ggPSAoc1swXSA9PT0gJy8nKSA/
IHMgOiAnLycgKyBzOworICAgIH0KKyAgICByZXR1cm4gdGhpczsKKyAgfSwKKworICB3cml0ZUZy
YW1lOiBmdW5jdGlvbiAocykgeworICAgIC8vIElFIHN1cHBvcnQuLi4KKyAgICB2YXIgZiA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdGF0ZS1mcmFtZScpOworICAgIHZhciBkID0gZi5jb250
ZW50RG9jdW1lbnQgfHwgZi5jb250ZW50V2luZG93LmRvY3VtZW50OworICAgIGQub3BlbigpOwor
ICAgIGQud3JpdGUoIjxzY3JpcHQ+X2hhc2ggPSAnIiArIHMgKyAiJzsgb25sb2FkID0gcGFyZW50
Lmxpc3RlbmVyLnN5bmNIYXNoOzxzY3JpcHQ+Iik7CisgICAgZC5jbG9zZSgpOworICB9LAorCisg
IHN5bmNIYXNoOiBmdW5jdGlvbiAoKSB7CisgICAgLy8gSUUgc3VwcG9ydC4uLgorICAgIHZhciBz
ID0gdGhpcy5faGFzaDsKKyAgICBpZiAocyAhPSBkbG9jLmhhc2gpIHsKKyAgICAgIGRsb2MuaGFz
aCA9IHM7CisgICAgfQorICAgIHJldHVybiB0aGlzOworICB9LAorCisgIG9uSGFzaENoYW5nZWQ6
IGZ1bmN0aW9uICgpIHt9Cit9OworCit2YXIgUm91dGVyID0gZXhwb3J0cy5Sb3V0ZXIgPSBmdW5j
dGlvbiAocm91dGVzKSB7CisgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSb3V0ZXIpKSByZXR1cm4g
bmV3IFJvdXRlcihyb3V0ZXMpOworCisgIHRoaXMucGFyYW1zICAgPSB7fTsKKyAgdGhpcy5yb3V0
ZXMgICA9IHt9OworICB0aGlzLm1ldGhvZHMgID0gWydvbicsICdvbmNlJywgJ2FmdGVyJywgJ2Jl
Zm9yZSddOworICB0aGlzLnNjb3BlICAgID0gW107CisgIHRoaXMuX21ldGhvZHMgPSB7fTsKKwor
ICB0aGlzLl9pbnNlcnQgPSB0aGlzLmluc2VydDsKKyAgdGhpcy5pbnNlcnQgPSB0aGlzLmluc2Vy
dEV4OworCisgIHRoaXMuaGlzdG9yeVN1cHBvcnQgPSAod2luZG93Lmhpc3RvcnkgIT0gbnVsbCA/
IHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSA6IG51bGwpICE9IG51bGwKKworICB0aGlzLmNvbmZp
Z3VyZSgpOworICB0aGlzLm1vdW50KHJvdXRlcyB8fCB7fSk7Cit9OworCitSb3V0ZXIucHJvdG90
eXBlLmluaXQgPSBmdW5jdGlvbiAocikgeworICB2YXIgc2VsZiA9IHRoaXM7CisgIHRoaXMuaGFu
ZGxlciA9IGZ1bmN0aW9uKG9uQ2hhbmdlRXZlbnQpIHsKKyAgICB2YXIgbmV3VVJMID0gb25DaGFu
Z2VFdmVudCAmJiBvbkNoYW5nZUV2ZW50Lm5ld1VSTCB8fCB3aW5kb3cubG9jYXRpb24uaGFzaDsK
KyAgICB2YXIgdXJsID0gc2VsZi5oaXN0b3J5ID09PSB0cnVlID8gc2VsZi5nZXRQYXRoKCkgOiBu
ZXdVUkwucmVwbGFjZSgvLiojLywgJycpOworICAgIHNlbGYuZGlzcGF0Y2goJ29uJywgdXJsKTsK
KyAgfTsKKworICBsaXN0ZW5lci5pbml0KHRoaXMuaGFuZGxlciwgdGhpcy5oaXN0b3J5KTsKKwor
ICBpZiAodGhpcy5oaXN0b3J5ID09PSBmYWxzZSkgeworICAgIGlmIChkbG9jSGFzaEVtcHR5KCkg
JiYgcikgeworICAgICAgZGxvYy5oYXNoID0gcjsKKyAgICB9IGVsc2UgaWYgKCFkbG9jSGFzaEVt
cHR5KCkpIHsKKyAgICAgIHNlbGYuZGlzcGF0Y2goJ29uJywgZGxvYy5oYXNoLnJlcGxhY2UoL14j
LywgJycpKTsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgdmFyIHJvdXRlVG8gPSBkbG9jSGFz
aEVtcHR5KCkgJiYgciA/IHIgOiAhZGxvY0hhc2hFbXB0eSgpID8gZGxvYy5oYXNoLnJlcGxhY2Uo
L14jLywgJycpIDogbnVsbDsKKyAgICBpZiAocm91dGVUbykgeworICAgICAgd2luZG93Lmhpc3Rv
cnkucmVwbGFjZVN0YXRlKHt9LCBkb2N1bWVudC50aXRsZSwgcm91dGVUbyk7CisgICAgfQorCisg
ICAgLy8gUm91dGVyIGhhcyBiZWVuIGluaXRpYWxpemVkLCBidXQgZHVlIHRvIHRoZSBjaHJvbWUg
YnVnIGl0IHdpbGwgbm90CisgICAgLy8geWV0IGFjdHVhbGx5IHJvdXRlIEhUTUw1IGhpc3Rvcnkg
c3RhdGUgY2hhbmdlcy4gVGh1cywgZGVjaWRlIGlmIHNob3VsZCByb3V0ZS4KKyAgICBpZiAocm91
dGVUbyB8fCB0aGlzLnJ1bl9pbl9pbml0ID09PSB0cnVlKSB7CisgICAgICB0aGlzLmhhbmRsZXIo
KTsKKyAgICB9CisgIH0KKworICByZXR1cm4gdGhpczsKK307CisKK1JvdXRlci5wcm90b3R5cGUu
ZXhwbG9kZSA9IGZ1bmN0aW9uICgpIHsKKyAgdmFyIHYgPSB0aGlzLmhpc3RvcnkgPT09IHRydWUg
PyB0aGlzLmdldFBhdGgoKSA6IGRsb2MuaGFzaDsKKyAgaWYgKHYuY2hhckF0KDEpID09PSAnLycp
IHsgdj12LnNsaWNlKDEpIH0KKyAgcmV0dXJuIHYuc2xpY2UoMSwgdi5sZW5ndGgpLnNwbGl0KCIv
Iik7Cit9OworCitSb3V0ZXIucHJvdG90eXBlLnNldFJvdXRlID0gZnVuY3Rpb24gKGksIHYsIHZh
bCkgeworICB2YXIgdXJsID0gdGhpcy5leHBsb2RlKCk7CisKKyAgaWYgKHR5cGVvZiBpID09PSAn
bnVtYmVyJyAmJiB0eXBlb2YgdiA9PT0gJ3N0cmluZycpIHsKKyAgICB1cmxbaV0gPSB2OworICB9
CisgIGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7CisgICAgdXJsLnNwbGljZShp
LCB2LCBzKTsKKyAgfQorICBlbHNlIHsKKyAgICB1cmwgPSBbaV07CisgIH0KKworICBsaXN0ZW5l
ci5zZXRIYXNoKHVybC5qb2luKCcvJykpOworICByZXR1cm4gdXJsOworfTsKKworLy8KKy8vICMj
IyBmdW5jdGlvbiBpbnNlcnRFeChtZXRob2QsIHBhdGgsIHJvdXRlLCBwYXJlbnQpCisvLyAjIyMj
IEBtZXRob2Qge3N0cmluZ30gTWV0aG9kIHRvIGluc2VydCB0aGUgc3BlY2lmaWMgYHJvdXRlYC4K
Ky8vICMjIyMgQHBhdGgge0FycmF5fSBQYXJzZWQgcGF0aCB0byBpbnNlcnQgdGhlIGByb3V0ZWAg
YXQuCisvLyAjIyMjIEByb3V0ZSB7QXJyYXl8ZnVuY3Rpb259IFJvdXRlIGhhbmRsZXJzIHRvIGlu
c2VydC4KKy8vICMjIyMgQHBhcmVudCB7T2JqZWN0fSAqKk9wdGlvbmFsKiogUGFyZW50ICJyb3V0
ZXMiIHRvIGluc2VydCBpbnRvLgorLy8gaW5zZXJ0IGEgY2FsbGJhY2sgdGhhdCB3aWxsIG9ubHkg
b2NjdXIgb25jZSBwZXIgdGhlIG1hdGNoZWQgcm91dGUuCisvLworUm91dGVyLnByb3RvdHlwZS5p
bnNlcnRFeCA9IGZ1bmN0aW9uKG1ldGhvZCwgcGF0aCwgcm91dGUsIHBhcmVudCkgeworICBpZiAo
bWV0aG9kID09PSAib25jZSIpIHsKKyAgICBtZXRob2QgPSAib24iOworICAgIHJvdXRlID0gZnVu
Y3Rpb24ocm91dGUpIHsKKyAgICAgIHZhciBvbmNlID0gZmFsc2U7CisgICAgICByZXR1cm4gZnVu
Y3Rpb24oKSB7CisgICAgICAgIGlmIChvbmNlKSByZXR1cm47CisgICAgICAgIG9uY2UgPSB0cnVl
OworICAgICAgICByZXR1cm4gcm91dGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICAgIH07
CisgICAgfShyb3V0ZSk7CisgIH0KKyAgcmV0dXJuIHRoaXMuX2luc2VydChtZXRob2QsIHBhdGgs
IHJvdXRlLCBwYXJlbnQpOworfTsKKworUm91dGVyLnByb3RvdHlwZS5nZXRSb3V0ZSA9IGZ1bmN0
aW9uICh2KSB7CisgIHZhciByZXQgPSB2OworCisgIGlmICh0eXBlb2YgdiA9PT0gIm51bWJlciIp
IHsKKyAgICByZXQgPSB0aGlzLmV4cGxvZGUoKVt2XTsKKyAgfQorICBlbHNlIGlmICh0eXBlb2Yg
diA9PT0gInN0cmluZyIpeworICAgIHZhciBoID0gdGhpcy5leHBsb2RlKCk7CisgICAgcmV0ID0g
aC5pbmRleE9mKHYpOworICB9CisgIGVsc2UgeworICAgIHJldCA9IHRoaXMuZXhwbG9kZSgpOwor
ICB9CisKKyAgcmV0dXJuIHJldDsKK307CisKK1JvdXRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1
bmN0aW9uICgpIHsKKyAgbGlzdGVuZXIuZGVzdHJveSh0aGlzLmhhbmRsZXIpOworICByZXR1cm4g
dGhpczsKK307CisKK1JvdXRlci5wcm90b3R5cGUuZ2V0UGF0aCA9IGZ1bmN0aW9uICgpIHsKKyAg
dmFyIHBhdGggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7CisgIGlmIChwYXRoLnN1YnN0cigw
LCAxKSAhPT0gJy8nKSB7CisgICAgcGF0aCA9ICcvJyArIHBhdGg7CisgIH0KKyAgcmV0dXJuIHBh
dGg7Cit9OworZnVuY3Rpb24gX2V2ZXJ5KGFyciwgaXRlcmF0b3IpIHsKKyAgZm9yICh2YXIgaSA9
IDA7IGkgPCBhcnIubGVuZ3RoOyBpICs9IDEpIHsKKyAgICBpZiAoaXRlcmF0b3IoYXJyW2ldLCBp
LCBhcnIpID09PSBmYWxzZSkgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgfQorfQorCitmdW5j
dGlvbiBfZmxhdHRlbihhcnIpIHsKKyAgdmFyIGZsYXQgPSBbXTsKKyAgZm9yICh2YXIgaSA9IDAs
IG4gPSBhcnIubGVuZ3RoOyBpIDwgbjsgaSsrKSB7CisgICAgZmxhdCA9IGZsYXQuY29uY2F0KGFy
cltpXSk7CisgIH0KKyAgcmV0dXJuIGZsYXQ7Cit9CisKK2Z1bmN0aW9uIF9hc3luY0V2ZXJ5U2Vy
aWVzKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7CisgIGlmICghYXJyLmxlbmd0aCkgeworICAg
IHJldHVybiBjYWxsYmFjaygpOworICB9CisgIHZhciBjb21wbGV0ZWQgPSAwOworICAoZnVuY3Rp
b24gaXRlcmF0ZSgpIHsKKyAgICBpdGVyYXRvcihhcnJbY29tcGxldGVkXSwgZnVuY3Rpb24oZXJy
KSB7CisgICAgICBpZiAoZXJyIHx8IGVyciA9PT0gZmFsc2UpIHsKKyAgICAgICAgY2FsbGJhY2so
ZXJyKTsKKyAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbigpIHt9OworICAgICAgfSBlbHNlIHsK
KyAgICAgICAgY29tcGxldGVkICs9IDE7CisgICAgICAgIGlmIChjb21wbGV0ZWQgPT09IGFyci5s
ZW5ndGgpIHsKKyAgICAgICAgICBjYWxsYmFjaygpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgIGl0ZXJhdGUoKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0pOworICB9KSgpOworfQor
CitmdW5jdGlvbiBwYXJhbWlmeVN0cmluZyhzdHIsIHBhcmFtcywgbW9kKSB7CisgIG1vZCA9IHN0
cjsKKyAgZm9yICh2YXIgcGFyYW0gaW4gcGFyYW1zKSB7CisgICAgaWYgKHBhcmFtcy5oYXNPd25Q
cm9wZXJ0eShwYXJhbSkpIHsKKyAgICAgIG1vZCA9IHBhcmFtc1twYXJhbV0oc3RyKTsKKyAgICAg
IGlmIChtb2QgIT09IHN0cikgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgIH0K
KyAgcmV0dXJuIG1vZCA9PT0gc3RyID8gIihbLl9hLXpBLVowLTktXSspIiA6IG1vZDsKK30KKwor
ZnVuY3Rpb24gcmVnaWZ5U3RyaW5nKHN0ciwgcGFyYW1zKSB7CisgIHZhciBtYXRjaGVzLCBsYXN0
ID0gMCwgb3V0ID0gIiI7CisgIHdoaWxlIChtYXRjaGVzID0gc3RyLnN1YnN0cihsYXN0KS5tYXRj
aCgvW15cd1xkXC0gJUAmXSpcKlteXHdcZFwtICVAJl0qLykpIHsKKyAgICBsYXN0ID0gbWF0Y2hl
cy5pbmRleCArIG1hdGNoZXNbMF0ubGVuZ3RoOworICAgIG1hdGNoZXNbMF0gPSBtYXRjaGVzWzBd
LnJlcGxhY2UoL15cKi8sICIoW18uKCkhXFwgJUAmYS16QS1aMC05LV0rKSIpOworICAgIG91dCAr
PSBzdHIuc3Vic3RyKDAsIG1hdGNoZXMuaW5kZXgpICsgbWF0Y2hlc1swXTsKKyAgfQorICBzdHIg
PSBvdXQgKz0gc3RyLnN1YnN0cihsYXN0KTsKKyAgdmFyIGNhcHR1cmVzID0gc3RyLm1hdGNoKC86
KFteXC9dKykvaWcpLCBsZW5ndGg7CisgIGlmIChjYXB0dXJlcykgeworICAgIGxlbmd0aCA9IGNh
cHR1cmVzLmxlbmd0aDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Cisg
ICAgICBzdHIgPSBzdHIucmVwbGFjZShjYXB0dXJlc1tpXSwgcGFyYW1pZnlTdHJpbmcoY2FwdHVy
ZXNbaV0sIHBhcmFtcykpOworICAgIH0KKyAgfQorICByZXR1cm4gc3RyOworfQorCitmdW5jdGlv
biB0ZXJtaW5hdG9yKHJvdXRlcywgZGVsaW1pdGVyLCBzdGFydCwgc3RvcCkgeworICB2YXIgbGFz
dCA9IDAsIGxlZnQgPSAwLCByaWdodCA9IDAsIHN0YXJ0ID0gKHN0YXJ0IHx8ICIoIikudG9TdHJp
bmcoKSwgc3RvcCA9IChzdG9wIHx8ICIpIikudG9TdHJpbmcoKSwgaTsKKyAgZm9yIChpID0gMDsg
aSA8IHJvdXRlcy5sZW5ndGg7IGkrKykgeworICAgIHZhciBjaHVuayA9IHJvdXRlc1tpXTsKKyAg
ICBpZiAoY2h1bmsuaW5kZXhPZihzdGFydCwgbGFzdCkgPiBjaHVuay5pbmRleE9mKHN0b3AsIGxh
c3QpIHx8IH5jaHVuay5pbmRleE9mKHN0YXJ0LCBsYXN0KSAmJiAhfmNodW5rLmluZGV4T2Yoc3Rv
cCwgbGFzdCkgfHwgIX5jaHVuay5pbmRleE9mKHN0YXJ0LCBsYXN0KSAmJiB+Y2h1bmsuaW5kZXhP
ZihzdG9wLCBsYXN0KSkgeworICAgICAgbGVmdCA9IGNodW5rLmluZGV4T2Yoc3RhcnQsIGxhc3Qp
OworICAgICAgcmlnaHQgPSBjaHVuay5pbmRleE9mKHN0b3AsIGxhc3QpOworICAgICAgaWYgKH5s
ZWZ0ICYmICF+cmlnaHQgfHwgIX5sZWZ0ICYmIH5yaWdodCkgeworICAgICAgICB2YXIgdG1wID0g
cm91dGVzLnNsaWNlKDAsIChpIHx8IDEpICsgMSkuam9pbihkZWxpbWl0ZXIpOworICAgICAgICBy
b3V0ZXMgPSBbIHRtcCBdLmNvbmNhdChyb3V0ZXMuc2xpY2UoKGkgfHwgMSkgKyAxKSk7CisgICAg
ICB9CisgICAgICBsYXN0ID0gKHJpZ2h0ID4gbGVmdCA/IHJpZ2h0IDogbGVmdCkgKyAxOworICAg
ICAgaSA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgIGxhc3QgPSAwOworICAgIH0KKyAgfQorICBy
ZXR1cm4gcm91dGVzOworfQorCitSb3V0ZXIucHJvdG90eXBlLmNvbmZpZ3VyZSA9IGZ1bmN0aW9u
KG9wdGlvbnMpIHsKKyAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CisgIGZvciAodmFyIGkgPSAw
OyBpIDwgdGhpcy5tZXRob2RzLmxlbmd0aDsgaSsrKSB7CisgICAgdGhpcy5fbWV0aG9kc1t0aGlz
Lm1ldGhvZHNbaV1dID0gdHJ1ZTsKKyAgfQorICB0aGlzLnJlY3Vyc2UgPSBvcHRpb25zLnJlY3Vy
c2UgfHwgdGhpcy5yZWN1cnNlIHx8IGZhbHNlOworICB0aGlzLmFzeW5jID0gb3B0aW9ucy5hc3lu
YyB8fCBmYWxzZTsKKyAgdGhpcy5kZWxpbWl0ZXIgPSBvcHRpb25zLmRlbGltaXRlciB8fCAiLyI7
CisgIHRoaXMuc3RyaWN0ID0gdHlwZW9mIG9wdGlvbnMuc3RyaWN0ID09PSAidW5kZWZpbmVkIiA/
IHRydWUgOiBvcHRpb25zLnN0cmljdDsKKyAgdGhpcy5ub3Rmb3VuZCA9IG9wdGlvbnMubm90Zm91
bmQ7CisgIHRoaXMucmVzb3VyY2UgPSBvcHRpb25zLnJlc291cmNlOworICB0aGlzLmhpc3Rvcnkg
PSBvcHRpb25zLmh0bWw1aGlzdG9yeSAmJiB0aGlzLmhpc3RvcnlTdXBwb3J0IHx8IGZhbHNlOwor
ICB0aGlzLnJ1bl9pbl9pbml0ID0gdGhpcy5oaXN0b3J5ID09PSB0cnVlICYmIG9wdGlvbnMucnVu
X2hhbmRsZXJfaW5faW5pdCAhPT0gZmFsc2U7CisgIHRoaXMuZXZlcnkgPSB7CisgICAgYWZ0ZXI6
IG9wdGlvbnMuYWZ0ZXIgfHwgbnVsbCwKKyAgICBiZWZvcmU6IG9wdGlvbnMuYmVmb3JlIHx8IG51
bGwsCisgICAgb246IG9wdGlvbnMub24gfHwgbnVsbAorICB9OworICByZXR1cm4gdGhpczsKK307
CisKK1JvdXRlci5wcm90b3R5cGUucGFyYW0gPSBmdW5jdGlvbih0b2tlbiwgbWF0Y2hlcikgewor
ICBpZiAodG9rZW5bMF0gIT09ICI6IikgeworICAgIHRva2VuID0gIjoiICsgdG9rZW47CisgIH0K
KyAgdmFyIGNvbXBpbGVkID0gbmV3IFJlZ0V4cCh0b2tlbiwgImciKTsKKyAgdGhpcy5wYXJhbXNb
dG9rZW5dID0gZnVuY3Rpb24oc3RyKSB7CisgICAgcmV0dXJuIHN0ci5yZXBsYWNlKGNvbXBpbGVk
LCBtYXRjaGVyLnNvdXJjZSB8fCBtYXRjaGVyKTsKKyAgfTsKK307CisKK1JvdXRlci5wcm90b3R5
cGUub24gPSBSb3V0ZXIucHJvdG90eXBlLnJvdXRlID0gZnVuY3Rpb24obWV0aG9kLCBwYXRoLCBy
b3V0ZSkgeworICB2YXIgc2VsZiA9IHRoaXM7CisgIGlmICghcm91dGUgJiYgdHlwZW9mIHBhdGgg
PT0gImZ1bmN0aW9uIikgeworICAgIHJvdXRlID0gcGF0aDsKKyAgICBwYXRoID0gbWV0aG9kOwor
ICAgIG1ldGhvZCA9ICJvbiI7CisgIH0KKyAgaWYgKEFycmF5LmlzQXJyYXkocGF0aCkpIHsKKyAg
ICByZXR1cm4gcGF0aC5mb3JFYWNoKGZ1bmN0aW9uKHApIHsKKyAgICAgIHNlbGYub24obWV0aG9k
LCBwLCByb3V0ZSk7CisgICAgfSk7CisgIH0KKyAgaWYgKHBhdGguc291cmNlKSB7CisgICAgcGF0
aCA9IHBhdGguc291cmNlLnJlcGxhY2UoL1xcXC8vaWcsICIvIik7CisgIH0KKyAgaWYgKEFycmF5
LmlzQXJyYXkobWV0aG9kKSkgeworICAgIHJldHVybiBtZXRob2QuZm9yRWFjaChmdW5jdGlvbiht
KSB7CisgICAgICBzZWxmLm9uKG0udG9Mb3dlckNhc2UoKSwgcGF0aCwgcm91dGUpOworICAgIH0p
OworICB9CisgIHBhdGggPSBwYXRoLnNwbGl0KG5ldyBSZWdFeHAodGhpcy5kZWxpbWl0ZXIpKTsK
KyAgcGF0aCA9IHRlcm1pbmF0b3IocGF0aCwgdGhpcy5kZWxpbWl0ZXIpOworICB0aGlzLmluc2Vy
dChtZXRob2QsIHRoaXMuc2NvcGUuY29uY2F0KHBhdGgpLCByb3V0ZSk7Cit9OworCitSb3V0ZXIu
cHJvdG90eXBlLmRpc3BhdGNoID0gZnVuY3Rpb24obWV0aG9kLCBwYXRoLCBjYWxsYmFjaykgewor
ICB2YXIgc2VsZiA9IHRoaXMsIGZucyA9IHRoaXMudHJhdmVyc2UobWV0aG9kLCBwYXRoLCB0aGlz
LnJvdXRlcywgIiIpLCBpbnZva2VkID0gdGhpcy5faW52b2tlZCwgYWZ0ZXI7CisgIHRoaXMuX2lu
dm9rZWQgPSB0cnVlOworICBpZiAoIWZucyB8fCBmbnMubGVuZ3RoID09PSAwKSB7CisgICAgdGhp
cy5sYXN0ID0gW107CisgICAgaWYgKHR5cGVvZiB0aGlzLm5vdGZvdW5kID09PSAiZnVuY3Rpb24i
KSB7CisgICAgICB0aGlzLmludm9rZShbIHRoaXMubm90Zm91bmQgXSwgeworICAgICAgICBtZXRo
b2Q6IG1ldGhvZCwKKyAgICAgICAgcGF0aDogcGF0aAorICAgICAgfSwgY2FsbGJhY2spOworICAg
IH0KKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKyAgaWYgKHRoaXMucmVjdXJzZSA9PT0gImZvcndh
cmQiKSB7CisgICAgZm5zID0gZm5zLnJldmVyc2UoKTsKKyAgfQorICBmdW5jdGlvbiB1cGRhdGVB
bmRJbnZva2UoKSB7CisgICAgc2VsZi5sYXN0ID0gZm5zLmFmdGVyOworICAgIHNlbGYuaW52b2tl
KHNlbGYucnVubGlzdChmbnMpLCBzZWxmLCBjYWxsYmFjayk7CisgIH0KKyAgYWZ0ZXIgPSB0aGlz
LmV2ZXJ5ICYmIHRoaXMuZXZlcnkuYWZ0ZXIgPyBbIHRoaXMuZXZlcnkuYWZ0ZXIgXS5jb25jYXQo
dGhpcy5sYXN0KSA6IFsgdGhpcy5sYXN0IF07CisgIGlmIChhZnRlciAmJiBhZnRlci5sZW5ndGgg
PiAwICYmIGludm9rZWQpIHsKKyAgICBpZiAodGhpcy5hc3luYykgeworICAgICAgdGhpcy5pbnZv
a2UoYWZ0ZXIsIHRoaXMsIHVwZGF0ZUFuZEludm9rZSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHRo
aXMuaW52b2tlKGFmdGVyLCB0aGlzKTsKKyAgICAgIHVwZGF0ZUFuZEludm9rZSgpOworICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorICB1cGRhdGVBbmRJbnZva2UoKTsKKyAgcmV0dXJuIHRy
dWU7Cit9OworCitSb3V0ZXIucHJvdG90eXBlLmludm9rZSA9IGZ1bmN0aW9uKGZucywgdGhpc0Fy
ZywgY2FsbGJhY2spIHsKKyAgdmFyIHNlbGYgPSB0aGlzOworICBpZiAodGhpcy5hc3luYykgewor
ICAgIF9hc3luY0V2ZXJ5U2VyaWVzKGZucywgZnVuY3Rpb24gYXBwbHkoZm4sIG5leHQpIHsKKyAg
ICAgIGlmIChBcnJheS5pc0FycmF5KGZuKSkgeworICAgICAgICByZXR1cm4gX2FzeW5jRXZlcnlT
ZXJpZXMoZm4sIGFwcGx5LCBuZXh0KTsKKyAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGZuID09ICJm
dW5jdGlvbiIpIHsKKyAgICAgICAgZm4uYXBwbHkodGhpc0FyZywgZm5zLmNhcHR1cmVzLmNvbmNh
dChuZXh0KSk7CisgICAgICB9CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICBpZiAoY2FsbGJh
Y2spIHsKKyAgICAgICAgY2FsbGJhY2suYXBwbHkodGhpc0FyZywgYXJndW1lbnRzKTsKKyAgICAg
IH0KKyAgICB9KTsKKyAgfSBlbHNlIHsKKyAgICBfZXZlcnkoZm5zLCBmdW5jdGlvbiBhcHBseShm
bikgeworICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZm4pKSB7CisgICAgICAgIHJldHVybiBfZXZl
cnkoZm4sIGFwcGx5KTsKKyAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGZuID09PSAiZnVuY3Rpb24i
KSB7CisgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzQXJnLCBmbnMuY2FwdHVyZXMgfHwgW10p
OworICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZm4gPT09ICJzdHJpbmciICYmIHNlbGYucmVzb3Vy
Y2UpIHsKKyAgICAgICAgc2VsZi5yZXNvdXJjZVtmbl0uYXBwbHkodGhpc0FyZywgZm5zLmNhcHR1
cmVzIHx8IFtdKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorfTsKKworUm91dGVyLnByb3RvdHlw
ZS50cmF2ZXJzZSA9IGZ1bmN0aW9uKG1ldGhvZCwgcGF0aCwgcm91dGVzLCByZWdleHAsIGZpbHRl
cikgeworICB2YXIgZm5zID0gW10sIGN1cnJlbnQsIGV4YWN0LCBtYXRjaCwgbmV4dCwgdGhhdDsK
KyAgZnVuY3Rpb24gZmlsdGVyUm91dGVzKHJvdXRlcykgeworICAgIGlmICghZmlsdGVyKSB7Cisg
ICAgICByZXR1cm4gcm91dGVzOworICAgIH0KKyAgICBmdW5jdGlvbiBkZWVwQ29weShzb3VyY2Up
IHsKKyAgICAgIHZhciByZXN1bHQgPSBbXTsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc291
cmNlLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIHJlc3VsdFtpXSA9IEFycmF5LmlzQXJyYXkoc291
cmNlW2ldKSA/IGRlZXBDb3B5KHNvdXJjZVtpXSkgOiBzb3VyY2VbaV07CisgICAgICB9CisgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBmdW5jdGlvbiBhcHBseUZpbHRlcihmbnMpIHsK
KyAgICAgIGZvciAodmFyIGkgPSBmbnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAg
ICAgaWYgKEFycmF5LmlzQXJyYXkoZm5zW2ldKSkgeworICAgICAgICAgIGFwcGx5RmlsdGVyKGZu
c1tpXSk7CisgICAgICAgICAgaWYgKGZuc1tpXS5sZW5ndGggPT09IDApIHsKKyAgICAgICAgICAg
IGZucy5zcGxpY2UoaSwgMSk7CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgIGlmICghZmlsdGVyKGZuc1tpXSkpIHsKKyAgICAgICAgICAgIGZucy5zcGxpY2UoaSwgMSk7
CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIHZhciBuZXdSb3V0
ZXMgPSBkZWVwQ29weShyb3V0ZXMpOworICAgIG5ld1JvdXRlcy5tYXRjaGVkID0gcm91dGVzLm1h
dGNoZWQ7CisgICAgbmV3Um91dGVzLmNhcHR1cmVzID0gcm91dGVzLmNhcHR1cmVzOworICAgIG5l
d1JvdXRlcy5hZnRlciA9IHJvdXRlcy5hZnRlci5maWx0ZXIoZmlsdGVyKTsKKyAgICBhcHBseUZp
bHRlcihuZXdSb3V0ZXMpOworICAgIHJldHVybiBuZXdSb3V0ZXM7CisgIH0KKyAgaWYgKHBhdGgg
PT09IHRoaXMuZGVsaW1pdGVyICYmIHJvdXRlc1ttZXRob2RdKSB7CisgICAgbmV4dCA9IFsgWyBy
b3V0ZXMuYmVmb3JlLCByb3V0ZXNbbWV0aG9kXSBdLmZpbHRlcihCb29sZWFuKSBdOworICAgIG5l
eHQuYWZ0ZXIgPSBbIHJvdXRlcy5hZnRlciBdLmZpbHRlcihCb29sZWFuKTsKKyAgICBuZXh0Lm1h
dGNoZWQgPSB0cnVlOworICAgIG5leHQuY2FwdHVyZXMgPSBbXTsKKyAgICByZXR1cm4gZmlsdGVy
Um91dGVzKG5leHQpOworICB9CisgIGZvciAodmFyIHIgaW4gcm91dGVzKSB7CisgICAgaWYgKHJv
dXRlcy5oYXNPd25Qcm9wZXJ0eShyKSAmJiAoIXRoaXMuX21ldGhvZHNbcl0gfHwgdGhpcy5fbWV0
aG9kc1tyXSAmJiB0eXBlb2Ygcm91dGVzW3JdID09PSAib2JqZWN0IiAmJiAhQXJyYXkuaXNBcnJh
eShyb3V0ZXNbcl0pKSkgeworICAgICAgY3VycmVudCA9IGV4YWN0ID0gcmVnZXhwICsgdGhpcy5k
ZWxpbWl0ZXIgKyByOworICAgICAgaWYgKCF0aGlzLnN0cmljdCkgeworICAgICAgICBleGFjdCAr
PSAiWyIgKyB0aGlzLmRlbGltaXRlciArICJdPyI7CisgICAgICB9CisgICAgICBtYXRjaCA9IHBh
dGgubWF0Y2gobmV3IFJlZ0V4cCgiXiIgKyBleGFjdCkpOworICAgICAgaWYgKCFtYXRjaCkgewor
ICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICAgIGlmIChtYXRjaFswXSAmJiBtYXRjaFsw
XSA9PSBwYXRoICYmIHJvdXRlc1tyXVttZXRob2RdKSB7CisgICAgICAgIG5leHQgPSBbIFsgcm91
dGVzW3JdLmJlZm9yZSwgcm91dGVzW3JdW21ldGhvZF0gXS5maWx0ZXIoQm9vbGVhbikgXTsKKyAg
ICAgICAgbmV4dC5hZnRlciA9IFsgcm91dGVzW3JdLmFmdGVyIF0uZmlsdGVyKEJvb2xlYW4pOwor
ICAgICAgICBuZXh0Lm1hdGNoZWQgPSB0cnVlOworICAgICAgICBuZXh0LmNhcHR1cmVzID0gbWF0
Y2guc2xpY2UoMSk7CisgICAgICAgIGlmICh0aGlzLnJlY3Vyc2UgJiYgcm91dGVzID09PSB0aGlz
LnJvdXRlcykgeworICAgICAgICAgIG5leHQucHVzaChbIHJvdXRlcy5iZWZvcmUsIHJvdXRlcy5v
biBdLmZpbHRlcihCb29sZWFuKSk7CisgICAgICAgICAgbmV4dC5hZnRlciA9IG5leHQuYWZ0ZXIu
Y29uY2F0KFsgcm91dGVzLmFmdGVyIF0uZmlsdGVyKEJvb2xlYW4pKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gZmlsdGVyUm91dGVzKG5leHQpOworICAgICAgfQorICAgICAgbmV4dCA9IHRo
aXMudHJhdmVyc2UobWV0aG9kLCBwYXRoLCByb3V0ZXNbcl0sIGN1cnJlbnQpOworICAgICAgaWYg
KG5leHQubWF0Y2hlZCkgeworICAgICAgICBpZiAobmV4dC5sZW5ndGggPiAwKSB7CisgICAgICAg
ICAgZm5zID0gZm5zLmNvbmNhdChuZXh0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5y
ZWN1cnNlKSB7CisgICAgICAgICAgZm5zLnB1c2goWyByb3V0ZXNbcl0uYmVmb3JlLCByb3V0ZXNb
cl0ub24gXS5maWx0ZXIoQm9vbGVhbikpOworICAgICAgICAgIG5leHQuYWZ0ZXIgPSBuZXh0LmFm
dGVyLmNvbmNhdChbIHJvdXRlc1tyXS5hZnRlciBdLmZpbHRlcihCb29sZWFuKSk7CisgICAgICAg
ICAgaWYgKHJvdXRlcyA9PT0gdGhpcy5yb3V0ZXMpIHsKKyAgICAgICAgICAgIGZucy5wdXNoKFsg
cm91dGVzWyJiZWZvcmUiXSwgcm91dGVzWyJvbiJdIF0uZmlsdGVyKEJvb2xlYW4pKTsKKyAgICAg
ICAgICAgIG5leHQuYWZ0ZXIgPSBuZXh0LmFmdGVyLmNvbmNhdChbIHJvdXRlc1siYWZ0ZXIiXSBd
LmZpbHRlcihCb29sZWFuKSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZucy5t
YXRjaGVkID0gdHJ1ZTsKKyAgICAgICAgZm5zLmNhcHR1cmVzID0gbmV4dC5jYXB0dXJlczsKKyAg
ICAgICAgZm5zLmFmdGVyID0gbmV4dC5hZnRlcjsKKyAgICAgICAgcmV0dXJuIGZpbHRlclJvdXRl
cyhmbnMpOworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gZmFsc2U7Cit9OworCitSb3V0
ZXIucHJvdG90eXBlLmluc2VydCA9IGZ1bmN0aW9uKG1ldGhvZCwgcGF0aCwgcm91dGUsIHBhcmVu
dCkgeworICB2YXIgbWV0aG9kVHlwZSwgcGFyZW50VHlwZSwgaXNBcnJheSwgbmVzdGVkLCBwYXJ0
OworICBwYXRoID0gcGF0aC5maWx0ZXIoZnVuY3Rpb24ocCkgeworICAgIHJldHVybiBwICYmIHAu
bGVuZ3RoID4gMDsKKyAgfSk7CisgIHBhcmVudCA9IHBhcmVudCB8fCB0aGlzLnJvdXRlczsKKyAg
cGFydCA9IHBhdGguc2hpZnQoKTsKKyAgaWYgKC9cOnxcKi8udGVzdChwYXJ0KSAmJiAhL1xcZHxc
XHcvLnRlc3QocGFydCkpIHsKKyAgICBwYXJ0ID0gcmVnaWZ5U3RyaW5nKHBhcnQsIHRoaXMucGFy
YW1zKTsKKyAgfQorICBpZiAocGF0aC5sZW5ndGggPiAwKSB7CisgICAgcGFyZW50W3BhcnRdID0g
cGFyZW50W3BhcnRdIHx8IHt9OworICAgIHJldHVybiB0aGlzLmluc2VydChtZXRob2QsIHBhdGgs
IHJvdXRlLCBwYXJlbnRbcGFydF0pOworICB9CisgIGlmICghcGFydCAmJiAhcGF0aC5sZW5ndGgg
JiYgcGFyZW50ID09PSB0aGlzLnJvdXRlcykgeworICAgIG1ldGhvZFR5cGUgPSB0eXBlb2YgcGFy
ZW50W21ldGhvZF07CisgICAgc3dpdGNoIChtZXRob2RUeXBlKSB7CisgICAgIGNhc2UgImZ1bmN0
aW9uIjoKKyAgICAgIHBhcmVudFttZXRob2RdID0gWyBwYXJlbnRbbWV0aG9kXSwgcm91dGUgXTsK
KyAgICAgIHJldHVybjsKKyAgICAgY2FzZSAib2JqZWN0IjoKKyAgICAgIHBhcmVudFttZXRob2Rd
LnB1c2gocm91dGUpOworICAgICAgcmV0dXJuOworICAgICBjYXNlICJ1bmRlZmluZWQiOgorICAg
ICAgcGFyZW50W21ldGhvZF0gPSByb3V0ZTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgcmV0
dXJuOworICB9CisgIHBhcmVudFR5cGUgPSB0eXBlb2YgcGFyZW50W3BhcnRdOworICBpc0FycmF5
ID0gQXJyYXkuaXNBcnJheShwYXJlbnRbcGFydF0pOworICBpZiAocGFyZW50W3BhcnRdICYmICFp
c0FycmF5ICYmIHBhcmVudFR5cGUgPT0gIm9iamVjdCIpIHsKKyAgICBtZXRob2RUeXBlID0gdHlw
ZW9mIHBhcmVudFtwYXJ0XVttZXRob2RdOworICAgIHN3aXRjaCAobWV0aG9kVHlwZSkgeworICAg
ICBjYXNlICJmdW5jdGlvbiI6CisgICAgICBwYXJlbnRbcGFydF1bbWV0aG9kXSA9IFsgcGFyZW50
W3BhcnRdW21ldGhvZF0sIHJvdXRlIF07CisgICAgICByZXR1cm47CisgICAgIGNhc2UgIm9iamVj
dCI6CisgICAgICBwYXJlbnRbcGFydF1bbWV0aG9kXS5wdXNoKHJvdXRlKTsKKyAgICAgIHJldHVy
bjsKKyAgICAgY2FzZSAidW5kZWZpbmVkIjoKKyAgICAgIHBhcmVudFtwYXJ0XVttZXRob2RdID0g
cm91dGU7CisgICAgICByZXR1cm47CisgICAgfQorICB9IGVsc2UgaWYgKHBhcmVudFR5cGUgPT0g
InVuZGVmaW5lZCIpIHsKKyAgICBuZXN0ZWQgPSB7fTsKKyAgICBuZXN0ZWRbbWV0aG9kXSA9IHJv
dXRlOworICAgIHBhcmVudFtwYXJ0XSA9IG5lc3RlZDsKKyAgICByZXR1cm47CisgIH0KKyAgdGhy
b3cgbmV3IEVycm9yKCJJbnZhbGlkIHJvdXRlIGNvbnRleHQ6ICIgKyBwYXJlbnRUeXBlKTsKK307
CisKKworCitSb3V0ZXIucHJvdG90eXBlLmV4dGVuZCA9IGZ1bmN0aW9uKG1ldGhvZHMpIHsKKyAg
dmFyIHNlbGYgPSB0aGlzLCBsZW4gPSBtZXRob2RzLmxlbmd0aCwgaTsKKyAgZnVuY3Rpb24gZXh0
ZW5kKG1ldGhvZCkgeworICAgIHNlbGYuX21ldGhvZHNbbWV0aG9kXSA9IHRydWU7CisgICAgc2Vs
ZlttZXRob2RdID0gZnVuY3Rpb24oKSB7CisgICAgICB2YXIgZXh0cmEgPSBhcmd1bWVudHMubGVu
Z3RoID09PSAxID8gWyBtZXRob2QsICIiIF0gOiBbIG1ldGhvZCBdOworICAgICAgc2VsZi5vbi5h
cHBseShzZWxmLCBleHRyYS5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1l
bnRzKSkpOworICAgIH07CisgIH0KKyAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAg
ZXh0ZW5kKG1ldGhvZHNbaV0pOworICB9Cit9OworCitSb3V0ZXIucHJvdG90eXBlLnJ1bmxpc3Qg
PSBmdW5jdGlvbihmbnMpIHsKKyAgdmFyIHJ1bmxpc3QgPSB0aGlzLmV2ZXJ5ICYmIHRoaXMuZXZl
cnkuYmVmb3JlID8gWyB0aGlzLmV2ZXJ5LmJlZm9yZSBdLmNvbmNhdChfZmxhdHRlbihmbnMpKSA6
IF9mbGF0dGVuKGZucyk7CisgIGlmICh0aGlzLmV2ZXJ5ICYmIHRoaXMuZXZlcnkub24pIHsKKyAg
ICBydW5saXN0LnB1c2godGhpcy5ldmVyeS5vbik7CisgIH0KKyAgcnVubGlzdC5jYXB0dXJlcyA9
IGZucy5jYXB0dXJlczsKKyAgcnVubGlzdC5zb3VyY2UgPSBmbnMuc291cmNlOworICByZXR1cm4g
cnVubGlzdDsKK307CisKK1JvdXRlci5wcm90b3R5cGUubW91bnQgPSBmdW5jdGlvbihyb3V0ZXMs
IHBhdGgpIHsKKyAgaWYgKCFyb3V0ZXMgfHwgdHlwZW9mIHJvdXRlcyAhPT0gIm9iamVjdCIgfHwg
QXJyYXkuaXNBcnJheShyb3V0ZXMpKSB7CisgICAgcmV0dXJuOworICB9CisgIHZhciBzZWxmID0g
dGhpczsKKyAgcGF0aCA9IHBhdGggfHwgW107CisgIGlmICghQXJyYXkuaXNBcnJheShwYXRoKSkg
eworICAgIHBhdGggPSBwYXRoLnNwbGl0KHNlbGYuZGVsaW1pdGVyKTsKKyAgfQorICBmdW5jdGlv
biBpbnNlcnRPck1vdW50KHJvdXRlLCBsb2NhbCkgeworICAgIHZhciByZW5hbWUgPSByb3V0ZSwg
cGFydHMgPSByb3V0ZS5zcGxpdChzZWxmLmRlbGltaXRlciksIHJvdXRlVHlwZSA9IHR5cGVvZiBy
b3V0ZXNbcm91dGVdLCBpc1JvdXRlID0gcGFydHNbMF0gPT09ICIiIHx8ICFzZWxmLl9tZXRob2Rz
W3BhcnRzWzBdXSwgZXZlbnQgPSBpc1JvdXRlID8gIm9uIiA6IHJlbmFtZTsKKyAgICBpZiAoaXNS
b3V0ZSkgeworICAgICAgcmVuYW1lID0gcmVuYW1lLnNsaWNlKChyZW5hbWUubWF0Y2gobmV3IFJl
Z0V4cChzZWxmLmRlbGltaXRlcikpIHx8IFsgIiIgXSlbMF0ubGVuZ3RoKTsKKyAgICAgIHBhcnRz
LnNoaWZ0KCk7CisgICAgfQorICAgIGlmIChpc1JvdXRlICYmIHJvdXRlVHlwZSA9PT0gIm9iamVj
dCIgJiYgIUFycmF5LmlzQXJyYXkocm91dGVzW3JvdXRlXSkpIHsKKyAgICAgIGxvY2FsID0gbG9j
YWwuY29uY2F0KHBhcnRzKTsKKyAgICAgIHNlbGYubW91bnQocm91dGVzW3JvdXRlXSwgbG9jYWwp
OworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoaXNSb3V0ZSkgeworICAgICAgbG9jYWwg
PSBsb2NhbC5jb25jYXQocmVuYW1lLnNwbGl0KHNlbGYuZGVsaW1pdGVyKSk7CisgICAgICBsb2Nh
bCA9IHRlcm1pbmF0b3IobG9jYWwsIHNlbGYuZGVsaW1pdGVyKTsKKyAgICB9CisgICAgc2VsZi5p
bnNlcnQoZXZlbnQsIGxvY2FsLCByb3V0ZXNbcm91dGVdKTsKKyAgfQorICBmb3IgKHZhciByb3V0
ZSBpbiByb3V0ZXMpIHsKKyAgICBpZiAocm91dGVzLmhhc093blByb3BlcnR5KHJvdXRlKSkgewor
ICAgICAgaW5zZXJ0T3JNb3VudChyb3V0ZSwgcGF0aC5zbGljZSgwKSk7CisgICAgfQorICB9Cit9
OworCisKKworfSh0eXBlb2YgZXhwb3J0cyA9PT0gIm9iamVjdCIgPyBleHBvcnRzIDogd2luZG93
KSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJv
d3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9sYWJzL2FyY2hp
dGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ib3dlcl9jb21wb25lbnRzL2RpcmVjdG9yL2J1aWxkL2Rp
cmVjdG9yLm1pbi5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEv
cmVzb3VyY2VzL3RvZG9tdmMvbGFicy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvYm93ZXJf
Y29tcG9uZW50cy9kaXJlY3Rvci9idWlsZC9kaXJlY3Rvci5taW4uanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjNl
YzI4OGZjMTE5YzcyNjhhY2Y4MzZjZWQ3OTI3YTIyNTVlYjRmMgotLS0gL2Rldi9udWxsCisrKyBi
L1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9t
dmMvbGFicy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvYm93ZXJfY29tcG9uZW50cy9kaXJl
Y3Rvci9idWlsZC9kaXJlY3Rvci5taW4uanMKQEAgLTAsMCArMSw3IEBACisKKworLy8KKy8vIEdl
bmVyYXRlZCBvbiBTdW4gRGVjIDE2IDIwMTIgMjI6NDc6MDUgR01ULTA1MDAgKEVTVCkgYnkgTm9k
ZWppdHN1LCBJbmMgKFVzaW5nIENvZGVzdXJnZW9uKS4KKy8vIFZlcnNpb24gMS4xLjkKKy8vCiso
ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gayhhLGIsYyxkKXt2YXIgZT0wLGY9MCxnPTAsYz0oY3x8Iigi
KS50b1N0cmluZygpLGQ9KGR8fCIpIikudG9TdHJpbmcoKSxoO2ZvcihoPTA7aDxhLmxlbmd0aDto
Kyspe3ZhciBpPWFbaF07aWYoaS5pbmRleE9mKGMsZSk+aS5pbmRleE9mKGQsZSl8fH5pLmluZGV4
T2YoYyxlKSYmIX5pLmluZGV4T2YoZCxlKXx8IX5pLmluZGV4T2YoYyxlKSYmfmkuaW5kZXhPZihk
LGUpKXtmPWkuaW5kZXhPZihjLGUpLGc9aS5pbmRleE9mKGQsZSk7aWYofmYmJiF+Z3x8IX5mJiZ+
Zyl7dmFyIGo9YS5zbGljZSgwLChofHwxKSsxKS5qb2luKGIpO2E9W2pdLmNvbmNhdChhLnNsaWNl
KChofHwxKSsxKSl9ZT0oZz5mP2c6ZikrMSxoPTB9ZWxzZSBlPTB9cmV0dXJuIGF9ZnVuY3Rpb24g
aihhLGIpe3ZhciBjLGQ9MCxlPSIiO3doaWxlKGM9YS5zdWJzdHIoZCkubWF0Y2goL1teXHdcZFwt
ICVAJl0qXCpbXlx3XGRcLSAlQCZdKi8pKWQ9Yy5pbmRleCtjWzBdLmxlbmd0aCxjWzBdPWNbMF0u
cmVwbGFjZSgvXlwqLywiKFtfLigpIVxcICVAJmEtekEtWjAtOS1dKykiKSxlKz1hLnN1YnN0cigw
LGMuaW5kZXgpK2NbMF07YT1lKz1hLnN1YnN0cihkKTt2YXIgZj1hLm1hdGNoKC86KFteXC9dKykv
aWcpLGc7aWYoZil7Zz1mLmxlbmd0aDtmb3IodmFyIGg9MDtoPGc7aCsrKWE9YS5yZXBsYWNlKGZb
aF0saShmW2hdLGIpKX1yZXR1cm4gYX1mdW5jdGlvbiBpKGEsYixjKXtjPWE7Zm9yKHZhciBkIGlu
IGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShkKSl7Yz1iW2RdKGEpO2lmKGMhPT1hKWJyZWFrfXJldHVy
biBjPT09YT8iKFsuX2EtekEtWjAtOS1dKykiOmN9ZnVuY3Rpb24gaChhLGIsYyl7aWYoIWEubGVu
Z3RoKXJldHVybiBjKCk7dmFyIGQ9MDsoZnVuY3Rpb24gZSgpe2IoYVtkXSxmdW5jdGlvbihiKXti
fHxiPT09ITE/KGMoYiksYz1mdW5jdGlvbigpe30pOihkKz0xLGQ9PT1hLmxlbmd0aD9jKCk6ZSgp
KX0pfSkoKX1mdW5jdGlvbiBnKGEpe3ZhciBiPVtdO2Zvcih2YXIgYz0wLGQ9YS5sZW5ndGg7Yzxk
O2MrKyliPWIuY29uY2F0KGFbY10pO3JldHVybiBifWZ1bmN0aW9uIGYoYSxiKXtmb3IodmFyIGM9
MDtjPGEubGVuZ3RoO2MrPTEpaWYoYihhW2NdLGMsYSk9PT0hMSlyZXR1cm59ZnVuY3Rpb24gYygp
e3JldHVybiBiLmhhc2g9PT0iInx8Yi5oYXNoPT09IiMifUFycmF5LnByb3RvdHlwZS5maWx0ZXJ8
fChBcnJheS5wcm90b3R5cGUuZmlsdGVyPWZ1bmN0aW9uKGEsYil7dmFyIGM9W10sZDtmb3IodmFy
IGU9MCxmPXRoaXMubGVuZ3RoO2U8ZjtlKyspZSBpbiB0aGlzJiZhLmNhbGwoYixkPXRoaXNbZV0s
ZSx0aGlzKSYmYy5wdXNoKGQpO3JldHVybiBjfSksQXJyYXkuaXNBcnJheXx8KEFycmF5LmlzQXJy
YXk9ZnVuY3Rpb24oYSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKT09
PSJbb2JqZWN0IEFycmF5XSJ9KTt2YXIgYj1kb2N1bWVudC5sb2NhdGlvbixkPXttb2RlOiJtb2Rl
cm4iLGhhc2g6Yi5oYXNoLGhpc3Rvcnk6ITEsY2hlY2s6ZnVuY3Rpb24oKXt2YXIgYT1iLmhhc2g7
YSE9dGhpcy5oYXNoJiYodGhpcy5oYXNoPWEsdGhpcy5vbkhhc2hDaGFuZ2VkKCkpfSxmaXJlOmZ1
bmN0aW9uKCl7dGhpcy5tb2RlPT09Im1vZGVybiI/dGhpcy5oaXN0b3J5PT09ITA/d2luZG93Lm9u
cG9wc3RhdGUoKTp3aW5kb3cub25oYXNoY2hhbmdlKCk6dGhpcy5vbkhhc2hDaGFuZ2VkKCl9LGlu
aXQ6ZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBkKGEpe2Zvcih2YXIgYj0wLGM9ZS5saXN0ZW5lcnMu
bGVuZ3RoO2I8YztiKyspZS5saXN0ZW5lcnNbYl0oYSl9dmFyIGM9dGhpczt0aGlzLmhpc3Rvcnk9
YixlLmxpc3RlbmVyc3x8KGUubGlzdGVuZXJzPVtdKTtpZigib25oYXNoY2hhbmdlImluIHdpbmRv
dyYmKGRvY3VtZW50LmRvY3VtZW50TW9kZT09PXVuZGVmaW5lZHx8ZG9jdW1lbnQuZG9jdW1lbnRN
b2RlPjcpKXRoaXMuaGlzdG9yeT09PSEwP3NldFRpbWVvdXQoZnVuY3Rpb24oKXt3aW5kb3cub25w
b3BzdGF0ZT1kfSw1MDApOndpbmRvdy5vbmhhc2hjaGFuZ2U9ZCx0aGlzLm1vZGU9Im1vZGVybiI7
ZWxzZXt2YXIgZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTtmLmlkPSJzdGF0ZS1m
cmFtZSIsZi5zdHlsZS5kaXNwbGF5PSJub25lIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGYp
LHRoaXMud3JpdGVGcmFtZSgiIiksIm9ucHJvcGVydHljaGFuZ2UiaW4gZG9jdW1lbnQmJiJhdHRh
Y2hFdmVudCJpbiBkb2N1bWVudCYmZG9jdW1lbnQuYXR0YWNoRXZlbnQoIm9ucHJvcGVydHljaGFu
Z2UiLGZ1bmN0aW9uKCl7ZXZlbnQucHJvcGVydHlOYW1lPT09ImxvY2F0aW9uIiYmYy5jaGVjaygp
fSksd2luZG93LnNldEludGVydmFsKGZ1bmN0aW9uKCl7Yy5jaGVjaygpfSw1MCksdGhpcy5vbkhh
c2hDaGFuZ2VkPWQsdGhpcy5tb2RlPSJsZWdhY3kifWUubGlzdGVuZXJzLnB1c2goYSk7cmV0dXJu
IHRoaXMubW9kZX0sZGVzdHJveTpmdW5jdGlvbihhKXtpZighIWUmJiEhZS5saXN0ZW5lcnMpe3Zh
ciBiPWUubGlzdGVuZXJzO2Zvcih2YXIgYz1iLmxlbmd0aC0xO2M+PTA7Yy0tKWJbY109PT1hJiZi
LnNwbGljZShjLDEpfX0sc2V0SGFzaDpmdW5jdGlvbihhKXt0aGlzLm1vZGU9PT0ibGVnYWN5IiYm
dGhpcy53cml0ZUZyYW1lKGEpLHRoaXMuaGlzdG9yeT09PSEwPyh3aW5kb3cuaGlzdG9yeS5wdXNo
U3RhdGUoe30sZG9jdW1lbnQudGl0bGUsYSksdGhpcy5maXJlKCkpOmIuaGFzaD1hWzBdPT09Ii8i
P2E6Ii8iK2E7cmV0dXJuIHRoaXN9LHdyaXRlRnJhbWU6ZnVuY3Rpb24oYSl7dmFyIGI9ZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoInN0YXRlLWZyYW1lIiksYz1iLmNvbnRlbnREb2N1bWVudHx8Yi5j
b250ZW50V2luZG93LmRvY3VtZW50O2Mub3BlbigpLGMud3JpdGUoIjxzY3JpcHQ+X2hhc2ggPSAn
IithKyInOyBvbmxvYWQgPSBwYXJlbnQubGlzdGVuZXIuc3luY0hhc2g7PHNjcmlwdD4iKSxjLmNs
b3NlKCl9LHN5bmNIYXNoOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5faGFzaDthIT1iLmhhc2gmJihi
Lmhhc2g9YSk7cmV0dXJuIHRoaXN9LG9uSGFzaENoYW5nZWQ6ZnVuY3Rpb24oKXt9fSxlPWEuUm91
dGVyPWZ1bmN0aW9uKGEpe2lmKHRoaXMgaW5zdGFuY2VvZiBlKXRoaXMucGFyYW1zPXt9LHRoaXMu
cm91dGVzPXt9LHRoaXMubWV0aG9kcz1bIm9uIiwib25jZSIsImFmdGVyIiwiYmVmb3JlIl0sdGhp
cy5zY29wZT1bXSx0aGlzLl9tZXRob2RzPXt9LHRoaXMuX2luc2VydD10aGlzLmluc2VydCx0aGlz
Lmluc2VydD10aGlzLmluc2VydEV4LHRoaXMuaGlzdG9yeVN1cHBvcnQ9KHdpbmRvdy5oaXN0b3J5
IT1udWxsP3dpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZTpudWxsKSE9bnVsbCx0aGlzLmNvbmZpZ3Vy
ZSgpLHRoaXMubW91bnQoYXx8e30pO2Vsc2UgcmV0dXJuIG5ldyBlKGEpfTtlLnByb3RvdHlwZS5p
bml0PWZ1bmN0aW9uKGEpe3ZhciBlPXRoaXM7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKGEpe3ZhciBi
PWEmJmEubmV3VVJMfHx3aW5kb3cubG9jYXRpb24uaGFzaCxjPWUuaGlzdG9yeT09PSEwP2UuZ2V0
UGF0aCgpOmIucmVwbGFjZSgvLiojLywiIik7ZS5kaXNwYXRjaCgib24iLGMpfSxkLmluaXQodGhp
cy5oYW5kbGVyLHRoaXMuaGlzdG9yeSk7aWYodGhpcy5oaXN0b3J5PT09ITEpYygpJiZhP2IuaGFz
aD1hOmMoKXx8ZS5kaXNwYXRjaCgib24iLGIuaGFzaC5yZXBsYWNlKC9eIy8sIiIpKTtlbHNle3Zh
ciBmPWMoKSYmYT9hOmMoKT9udWxsOmIuaGFzaC5yZXBsYWNlKC9eIy8sIiIpO2YmJndpbmRvdy5o
aXN0b3J5LnJlcGxhY2VTdGF0ZSh7fSxkb2N1bWVudC50aXRsZSxmKSwoZnx8dGhpcy5ydW5faW5f
aW5pdD09PSEwKSYmdGhpcy5oYW5kbGVyKCl9cmV0dXJuIHRoaXN9LGUucHJvdG90eXBlLmV4cGxv
ZGU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmhpc3Rvcnk9PT0hMD90aGlzLmdldFBhdGgoKTpiLmhh
c2g7YS5jaGFyQXQoMSk9PT0iLyImJihhPWEuc2xpY2UoMSkpO3JldHVybiBhLnNsaWNlKDEsYS5s
ZW5ndGgpLnNwbGl0KCIvIil9LGUucHJvdG90eXBlLnNldFJvdXRlPWZ1bmN0aW9uKGEsYixjKXt2
YXIgZT10aGlzLmV4cGxvZGUoKTt0eXBlb2YgYT09Im51bWJlciImJnR5cGVvZiBiPT0ic3RyaW5n
Ij9lW2FdPWI6dHlwZW9mIGM9PSJzdHJpbmciP2Uuc3BsaWNlKGEsYixzKTplPVthXSxkLnNldEhh
c2goZS5qb2luKCIvIikpO3JldHVybiBlfSxlLnByb3RvdHlwZS5pbnNlcnRFeD1mdW5jdGlvbihh
LGIsYyxkKXthPT09Im9uY2UiJiYoYT0ib24iLGM9ZnVuY3Rpb24oYSl7dmFyIGI9ITE7cmV0dXJu
IGZ1bmN0aW9uKCl7aWYoIWIpe2I9ITA7cmV0dXJuIGEuYXBwbHkodGhpcyxhcmd1bWVudHMpfX19
KGMpKTtyZXR1cm4gdGhpcy5faW5zZXJ0KGEsYixjLGQpfSxlLnByb3RvdHlwZS5nZXRSb3V0ZT1m
dW5jdGlvbihhKXt2YXIgYj1hO2lmKHR5cGVvZiBhPT0ibnVtYmVyIiliPXRoaXMuZXhwbG9kZSgp
W2FdO2Vsc2UgaWYodHlwZW9mIGE9PSJzdHJpbmciKXt2YXIgYz10aGlzLmV4cGxvZGUoKTtiPWMu
aW5kZXhPZihhKX1lbHNlIGI9dGhpcy5leHBsb2RlKCk7cmV0dXJuIGJ9LGUucHJvdG90eXBlLmRl
c3Ryb3k9ZnVuY3Rpb24oKXtkLmRlc3Ryb3kodGhpcy5oYW5kbGVyKTtyZXR1cm4gdGhpc30sZS5w
cm90b3R5cGUuZ2V0UGF0aD1mdW5jdGlvbigpe3ZhciBhPXdpbmRvdy5sb2NhdGlvbi5wYXRobmFt
ZTthLnN1YnN0cigwLDEpIT09Ii8iJiYoYT0iLyIrYSk7cmV0dXJuIGF9LGUucHJvdG90eXBlLmNv
bmZpZ3VyZT1mdW5jdGlvbihhKXthPWF8fHt9O2Zvcih2YXIgYj0wO2I8dGhpcy5tZXRob2RzLmxl
bmd0aDtiKyspdGhpcy5fbWV0aG9kc1t0aGlzLm1ldGhvZHNbYl1dPSEwO3RoaXMucmVjdXJzZT1h
LnJlY3Vyc2V8fHRoaXMucmVjdXJzZXx8ITEsdGhpcy5hc3luYz1hLmFzeW5jfHwhMSx0aGlzLmRl
bGltaXRlcj1hLmRlbGltaXRlcnx8Ii8iLHRoaXMuc3RyaWN0PXR5cGVvZiBhLnN0cmljdD09InVu
ZGVmaW5lZCI/ITA6YS5zdHJpY3QsdGhpcy5ub3Rmb3VuZD1hLm5vdGZvdW5kLHRoaXMucmVzb3Vy
Y2U9YS5yZXNvdXJjZSx0aGlzLmhpc3Rvcnk9YS5odG1sNWhpc3RvcnkmJnRoaXMuaGlzdG9yeVN1
cHBvcnR8fCExLHRoaXMucnVuX2luX2luaXQ9dGhpcy5oaXN0b3J5PT09ITAmJmEucnVuX2hhbmRs
ZXJfaW5faW5pdCE9PSExLHRoaXMuZXZlcnk9e2FmdGVyOmEuYWZ0ZXJ8fG51bGwsYmVmb3JlOmEu
YmVmb3JlfHxudWxsLG9uOmEub258fG51bGx9O3JldHVybiB0aGlzfSxlLnByb3RvdHlwZS5wYXJh
bT1mdW5jdGlvbihhLGIpe2FbMF0hPT0iOiImJihhPSI6IithKTt2YXIgYz1uZXcgUmVnRXhwKGEs
ImciKTt0aGlzLnBhcmFtc1thXT1mdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKGMsYi5zb3Vy
Y2V8fGIpfX0sZS5wcm90b3R5cGUub249ZS5wcm90b3R5cGUucm91dGU9ZnVuY3Rpb24oYSxiLGMp
e3ZhciBkPXRoaXM7IWMmJnR5cGVvZiBiPT0iZnVuY3Rpb24iJiYoYz1iLGI9YSxhPSJvbiIpO2lm
KEFycmF5LmlzQXJyYXkoYikpcmV0dXJuIGIuZm9yRWFjaChmdW5jdGlvbihiKXtkLm9uKGEsYixj
KX0pO2Iuc291cmNlJiYoYj1iLnNvdXJjZS5yZXBsYWNlKC9cXFwvL2lnLCIvIikpO2lmKEFycmF5
LmlzQXJyYXkoYSkpcmV0dXJuIGEuZm9yRWFjaChmdW5jdGlvbihhKXtkLm9uKGEudG9Mb3dlckNh
c2UoKSxiLGMpfSk7Yj1iLnNwbGl0KG5ldyBSZWdFeHAodGhpcy5kZWxpbWl0ZXIpKSxiPWsoYix0
aGlzLmRlbGltaXRlciksdGhpcy5pbnNlcnQoYSx0aGlzLnNjb3BlLmNvbmNhdChiKSxjKX0sZS5w
cm90b3R5cGUuZGlzcGF0Y2g9ZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGgoKXtkLmxhc3Q9ZS5h
ZnRlcixkLmludm9rZShkLnJ1bmxpc3QoZSksZCxjKX12YXIgZD10aGlzLGU9dGhpcy50cmF2ZXJz
ZShhLGIsdGhpcy5yb3V0ZXMsIiIpLGY9dGhpcy5faW52b2tlZCxnO3RoaXMuX2ludm9rZWQ9ITA7
aWYoIWV8fGUubGVuZ3RoPT09MCl7dGhpcy5sYXN0PVtdLHR5cGVvZiB0aGlzLm5vdGZvdW5kPT0i
ZnVuY3Rpb24iJiZ0aGlzLmludm9rZShbdGhpcy5ub3Rmb3VuZF0se21ldGhvZDphLHBhdGg6Yn0s
Yyk7cmV0dXJuITF9dGhpcy5yZWN1cnNlPT09ImZvcndhcmQiJiYoZT1lLnJldmVyc2UoKSksZz10
aGlzLmV2ZXJ5JiZ0aGlzLmV2ZXJ5LmFmdGVyP1t0aGlzLmV2ZXJ5LmFmdGVyXS5jb25jYXQodGhp
cy5sYXN0KTpbdGhpcy5sYXN0XTtpZihnJiZnLmxlbmd0aD4wJiZmKXt0aGlzLmFzeW5jP3RoaXMu
aW52b2tlKGcsdGhpcyxoKToodGhpcy5pbnZva2UoZyx0aGlzKSxoKCkpO3JldHVybiEwfWgoKTty
ZXR1cm4hMH0sZS5wcm90b3R5cGUuaW52b2tlPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzO3Ro
aXMuYXN5bmM/aChhLGZ1bmN0aW9uIGUoYyxkKXtpZihBcnJheS5pc0FycmF5KGMpKXJldHVybiBo
KGMsZSxkKTt0eXBlb2YgYz09ImZ1bmN0aW9uIiYmYy5hcHBseShiLGEuY2FwdHVyZXMuY29uY2F0
KGQpKX0sZnVuY3Rpb24oKXtjJiZjLmFwcGx5KGIsYXJndW1lbnRzKX0pOmYoYSxmdW5jdGlvbiBn
KGMpe2lmKEFycmF5LmlzQXJyYXkoYykpcmV0dXJuIGYoYyxnKTtpZih0eXBlb2YgYz09ImZ1bmN0
aW9uIilyZXR1cm4gYy5hcHBseShiLGEuY2FwdHVyZXN8fFtdKTt0eXBlb2YgYz09InN0cmluZyIm
JmQucmVzb3VyY2UmJmQucmVzb3VyY2VbY10uYXBwbHkoYixhLmNhcHR1cmVzfHxbXSl9KX0sZS5w
cm90b3R5cGUudHJhdmVyc2U9ZnVuY3Rpb24oYSxiLGMsZCxlKXtmdW5jdGlvbiBsKGEpe2Z1bmN0
aW9uIGMoYSl7Zm9yKHZhciBiPWEubGVuZ3RoLTE7Yj49MDtiLS0pQXJyYXkuaXNBcnJheShhW2Jd
KT8oYyhhW2JdKSxhW2JdLmxlbmd0aD09PTAmJmEuc3BsaWNlKGIsMSkpOmUoYVtiXSl8fGEuc3Bs
aWNlKGIsMSl9ZnVuY3Rpb24gYihhKXt2YXIgYz1bXTtmb3IodmFyIGQ9MDtkPGEubGVuZ3RoO2Qr
KyljW2RdPUFycmF5LmlzQXJyYXkoYVtkXSk/YihhW2RdKTphW2RdO3JldHVybiBjfWlmKCFlKXJl
dHVybiBhO3ZhciBkPWIoYSk7ZC5tYXRjaGVkPWEubWF0Y2hlZCxkLmNhcHR1cmVzPWEuY2FwdHVy
ZXMsZC5hZnRlcj1hLmFmdGVyLmZpbHRlcihlKSxjKGQpO3JldHVybiBkfXZhciBmPVtdLGcsaCxp
LGosaztpZihiPT09dGhpcy5kZWxpbWl0ZXImJmNbYV0pe2o9W1tjLmJlZm9yZSxjW2FdXS5maWx0
ZXIoQm9vbGVhbildLGouYWZ0ZXI9W2MuYWZ0ZXJdLmZpbHRlcihCb29sZWFuKSxqLm1hdGNoZWQ9
ITAsai5jYXB0dXJlcz1bXTtyZXR1cm4gbChqKX1mb3IodmFyIG0gaW4gYylpZihjLmhhc093blBy
b3BlcnR5KG0pJiYoIXRoaXMuX21ldGhvZHNbbV18fHRoaXMuX21ldGhvZHNbbV0mJnR5cGVvZiBj
W21dPT0ib2JqZWN0IiYmIUFycmF5LmlzQXJyYXkoY1ttXSkpKXtnPWg9ZCt0aGlzLmRlbGltaXRl
cittLHRoaXMuc3RyaWN0fHwoaCs9IlsiK3RoaXMuZGVsaW1pdGVyKyJdPyIpLGk9Yi5tYXRjaChu
ZXcgUmVnRXhwKCJeIitoKSk7aWYoIWkpY29udGludWU7aWYoaVswXSYmaVswXT09YiYmY1ttXVth
XSl7aj1bW2NbbV0uYmVmb3JlLGNbbV1bYV1dLmZpbHRlcihCb29sZWFuKV0sai5hZnRlcj1bY1tt
XS5hZnRlcl0uZmlsdGVyKEJvb2xlYW4pLGoubWF0Y2hlZD0hMCxqLmNhcHR1cmVzPWkuc2xpY2Uo
MSksdGhpcy5yZWN1cnNlJiZjPT09dGhpcy5yb3V0ZXMmJihqLnB1c2goW2MuYmVmb3JlLGMub25d
LmZpbHRlcihCb29sZWFuKSksai5hZnRlcj1qLmFmdGVyLmNvbmNhdChbYy5hZnRlcl0uZmlsdGVy
KEJvb2xlYW4pKSk7cmV0dXJuIGwoail9aj10aGlzLnRyYXZlcnNlKGEsYixjW21dLGcpO2lmKGou
bWF0Y2hlZCl7ai5sZW5ndGg+MCYmKGY9Zi5jb25jYXQoaikpLHRoaXMucmVjdXJzZSYmKGYucHVz
aChbY1ttXS5iZWZvcmUsY1ttXS5vbl0uZmlsdGVyKEJvb2xlYW4pKSxqLmFmdGVyPWouYWZ0ZXIu
Y29uY2F0KFtjW21dLmFmdGVyXS5maWx0ZXIoQm9vbGVhbikpLGM9PT10aGlzLnJvdXRlcyYmKGYu
cHVzaChbYy5iZWZvcmUsYy5vbl0uZmlsdGVyKEJvb2xlYW4pKSxqLmFmdGVyPWouYWZ0ZXIuY29u
Y2F0KFtjLmFmdGVyXS5maWx0ZXIoQm9vbGVhbikpKSksZi5tYXRjaGVkPSEwLGYuY2FwdHVyZXM9
ai5jYXB0dXJlcyxmLmFmdGVyPWouYWZ0ZXI7cmV0dXJuIGwoZil9fXJldHVybiExfSxlLnByb3Rv
dHlwZS5pbnNlcnQ9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGUsZixnLGgsaTtiPWIuZmlsdGVyKGZ1
bmN0aW9uKGEpe3JldHVybiBhJiZhLmxlbmd0aD4wfSksZD1kfHx0aGlzLnJvdXRlcyxpPWIuc2hp
ZnQoKSwvXDp8XCovLnRlc3QoaSkmJiEvXFxkfFxcdy8udGVzdChpKSYmKGk9aihpLHRoaXMucGFy
YW1zKSk7aWYoYi5sZW5ndGg+MCl7ZFtpXT1kW2ldfHx7fTtyZXR1cm4gdGhpcy5pbnNlcnQoYSxi
LGMsZFtpXSl9e2lmKCEhaXx8ISFiLmxlbmd0aHx8ZCE9PXRoaXMucm91dGVzKXtmPXR5cGVvZiBk
W2ldLGc9QXJyYXkuaXNBcnJheShkW2ldKTtpZihkW2ldJiYhZyYmZj09Im9iamVjdCIpe2U9dHlw
ZW9mIGRbaV1bYV07c3dpdGNoKGUpe2Nhc2UiZnVuY3Rpb24iOmRbaV1bYV09W2RbaV1bYV0sY107
cmV0dXJuO2Nhc2Uib2JqZWN0IjpkW2ldW2FdLnB1c2goYyk7cmV0dXJuO2Nhc2UidW5kZWZpbmVk
IjpkW2ldW2FdPWM7cmV0dXJufX1lbHNlIGlmKGY9PSJ1bmRlZmluZWQiKXtoPXt9LGhbYV09Yyxk
W2ldPWg7cmV0dXJufXRocm93IG5ldyBFcnJvcigiSW52YWxpZCByb3V0ZSBjb250ZXh0OiAiK2Yp
fWU9dHlwZW9mIGRbYV07c3dpdGNoKGUpe2Nhc2UiZnVuY3Rpb24iOmRbYV09W2RbYV0sY107cmV0
dXJuO2Nhc2Uib2JqZWN0IjpkW2FdLnB1c2goYyk7cmV0dXJuO2Nhc2UidW5kZWZpbmVkIjpkW2Fd
PWM7cmV0dXJufX19LGUucHJvdG90eXBlLmV4dGVuZD1mdW5jdGlvbihhKXtmdW5jdGlvbiBlKGEp
e2IuX21ldGhvZHNbYV09ITAsYlthXT1mdW5jdGlvbigpe3ZhciBjPWFyZ3VtZW50cy5sZW5ndGg9
PT0xP1thLCIiXTpbYV07Yi5vbi5hcHBseShiLGMuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGlj
ZS5jYWxsKGFyZ3VtZW50cykpKX19dmFyIGI9dGhpcyxjPWEubGVuZ3RoLGQ7Zm9yKGQ9MDtkPGM7
ZCsrKWUoYVtkXSl9LGUucHJvdG90eXBlLnJ1bmxpc3Q9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5l
dmVyeSYmdGhpcy5ldmVyeS5iZWZvcmU/W3RoaXMuZXZlcnkuYmVmb3JlXS5jb25jYXQoZyhhKSk6
ZyhhKTt0aGlzLmV2ZXJ5JiZ0aGlzLmV2ZXJ5Lm9uJiZiLnB1c2godGhpcy5ldmVyeS5vbiksYi5j
YXB0dXJlcz1hLmNhcHR1cmVzLGIuc291cmNlPWEuc291cmNlO3JldHVybiBifSxlLnByb3RvdHlw
ZS5tb3VudD1mdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGQoYixkKXt2YXIgZT1iLGY9Yi5zcGxpdChj
LmRlbGltaXRlciksZz10eXBlb2YgYVtiXSxoPWZbMF09PT0iInx8IWMuX21ldGhvZHNbZlswXV0s
aT1oPyJvbiI6ZTtoJiYoZT1lLnNsaWNlKChlLm1hdGNoKG5ldyBSZWdFeHAoYy5kZWxpbWl0ZXIp
KXx8WyIiXSlbMF0ubGVuZ3RoKSxmLnNoaWZ0KCkpO2gmJmc9PT0ib2JqZWN0IiYmIUFycmF5Lmlz
QXJyYXkoYVtiXSk/KGQ9ZC5jb25jYXQoZiksYy5tb3VudChhW2JdLGQpKTooaCYmKGQ9ZC5jb25j
YXQoZS5zcGxpdChjLmRlbGltaXRlcikpLGQ9ayhkLGMuZGVsaW1pdGVyKSksYy5pbnNlcnQoaSxk
LGFbYl0pKX1pZighIWEmJnR5cGVvZiBhPT0ib2JqZWN0IiYmIUFycmF5LmlzQXJyYXkoYSkpe3Zh
ciBjPXRoaXM7Yj1ifHxbXSxBcnJheS5pc0FycmF5KGIpfHwoYj1iLnNwbGl0KGMuZGVsaW1pdGVy
KSk7Zm9yKHZhciBlIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShlKSYmZChlLGIuc2xpY2UoMCkpfX19
KSh0eXBlb2YgZXhwb3J0cz09Im9iamVjdCI/ZXhwb3J0czp3aW5kb3cpClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVl
ZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9sYWJzL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9y
ZWFjdC9ib3dlcl9jb21wb25lbnRzL2RpcmVjdG9yL2J1aWxkL2VuZGVyLmpzIGIvV2Vic2l0ZXMv
YnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9sYWJzL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ib3dlcl9jb21wb25lbnRzL2RpcmVjdG9yL2J1aWxk
L2VuZGVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZlM2ViYzQxYjBiZGUwNjRiZmQzMzYzZmQ1ZGQwYjM0MDZl
ZmI5ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVk
b21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2xhYnMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3Jl
YWN0L2Jvd2VyX2NvbXBvbmVudHMvZGlyZWN0b3IvYnVpbGQvZW5kZXIuanMKQEAgLTAsMCArMSwz
IEBACiskLmVuZGVyKHsKKyAgcm91dGVyOiBSb3V0ZXIKK30pOwpkaWZmIC0tZ2l0IGEvV2Vic2l0
ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy9sYWJz
L2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ib3dlcl9jb21wb25lbnRzL3JlYWN0L0pTWFRy
YW5zZm9ybWVyLmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9y
ZXNvdXJjZXMvdG9kb212Yy9sYWJzL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ib3dlcl9j
b21wb25lbnRzL3JlYWN0L0pTWFRyYW5zZm9ybWVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJlNGQ3YjUyNjU5
NjgzZWE4NGFmNTgxNmJkZjg4Njc2MGQ1ZDdmZGMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRl
cy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2xhYnMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2Jvd2VyX2NvbXBvbmVudHMvcmVhY3QvSlNYVHJh
bnNmb3JtZXIuanMKQEAgLTAsMCArMSwxMDE5NiBAQAorLyoqCisgKiBKU1hUcmFuc2Zvcm1lciB2
MC40LjAKKyAqLworKGZ1bmN0aW9uKGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBib290c3RyYXAp
Ym9vdHN0cmFwKCJqc3h0cmFuc2Zvcm1lciIsZSk7ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIGV4
cG9ydHMpbW9kdWxlLmV4cG9ydHM9ZSgpO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIGRlZmlu
ZSYmZGVmaW5lLmFtZClkZWZpbmUoZSk7ZWxzZSBpZigidW5kZWZpbmVkIiE9dHlwZW9mIHNlcyl7
aWYoIXNlcy5vaygpKXJldHVybjtzZXMubWFrZUpTWFRyYW5zZm9ybWVyPWV9ZWxzZSJ1bmRlZmlu
ZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdy5KU1hUcmFuc2Zvcm1lcj1lKCk6Z2xvYmFsLkpTWFRy
YW5zZm9ybWVyPWUoKX0pKGZ1bmN0aW9uKCl7dmFyIGRlZmluZSxzZXMsYm9vdHN0cmFwLG1vZHVs
ZSxleHBvcnRzOworcmV0dXJuIChmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gaShuLHMpe2lmKCF0
W25dKXtpZighZVtuXSl7dmFyIG89dHlwZW9mIHJlcXVpcmU9PSJmdW5jdGlvbiImJnJlcXVpcmU7
aWYoIXMmJm8pcmV0dXJuIG8obiwhMCk7aWYocilyZXR1cm4gcihuLCEwKTt0aHJvdyBuZXcgRXJy
b3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIituKyInIil9dmFyIHU9dFtuXT17ZXhwb3J0czp7fX07
ZVtuXVswXS5jYWxsKHUuZXhwb3J0cyxmdW5jdGlvbih0KXt2YXIgcj1lW25dWzFdW3RdO3JldHVy
biBpKHI/cjp0KX0sdSx1LmV4cG9ydHMpfXJldHVybiB0W25dLmV4cG9ydHN9dmFyIHI9dHlwZW9m
IHJlcXVpcmU9PSJmdW5jdGlvbiImJnJlcXVpcmU7Zm9yKHZhciBzPTA7czxuLmxlbmd0aDtzKysp
aShuW3NdKTtyZXR1cm4gaX0pKHsxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsK
K3ZhciBCYXNlNjIgPSAoZnVuY3Rpb24gKG15KSB7CisgIG15LmNoYXJzID0gWyIwIiwgIjEiLCAi
MiIsICIzIiwgIjQiLCAiNSIsICI2IiwgIjciLCAiOCIsICI5IiwgImEiLCAiYiIsICJjIiwgImQi
LCAiZSIsICJmIiwgImciLCAiaCIsICJpIiwgImoiLCAiayIsICJsIiwgIm0iLCAibiIsICJvIiwg
InAiLCAicSIsICJyIiwgInMiLCAidCIsICJ1IiwgInYiLCAidyIsICJ4IiwgInkiLCAieiIsICJB
IiwgIkIiLCAiQyIsICJEIiwgIkUiLCAiRiIsICJHIiwgIkgiLCAiSSIsICJKIiwgIksiLCAiTCIs
ICJNIiwgIk4iLCAiTyIsICJQIiwgIlEiLCAiUiIsICJTIiwgIlQiLCAiVSIsICJWIiwgIlciLCAi
WCIsICJZIiwgIloiXQorCisgIG15LmVuY29kZSA9IGZ1bmN0aW9uKGkpeworICAgIGlmIChpID09
PSAwKSB7cmV0dXJuICcwJ30KKyAgICB2YXIgcyA9ICcnCisgICAgd2hpbGUgKGkgPiAwKSB7Cisg
ICAgICBzID0gdGhpcy5jaGFyc1tpICUgNjJdICsgcworICAgICAgaSA9IE1hdGguZmxvb3IoaS82
MikKKyAgICB9CisgICAgcmV0dXJuIHMKKyAgfTsKKyAgbXkuZGVjb2RlID0gZnVuY3Rpb24oYSxi
LGMsZCl7CisgICAgZm9yICgKKyAgICAgIGIgPSBjID0gKAorICAgICAgICBhID09PSAoL1xXfF98
XiQvLnRlc3QoYSArPSAiIikgfHwgYSkKKyAgICAgICkgLSAxOworICAgICAgZCA9IGEuY2hhckNv
ZGVBdChjKyspOworICAgICkKKyAgICBiID0gYiAqIDYyICsgZCAtIFssIDQ4LCAyOSwgODddW2Qg
Pj4gNV07CisgICAgcmV0dXJuIGIKKyAgfTsKKworICByZXR1cm4gbXk7Cit9KHt9KSk7CisKK21v
ZHVsZS5leHBvcnRzID0gQmFzZTYyCit9LHt9XSwyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxl
eHBvcnRzKXsKKyhmdW5jdGlvbihwcm9jZXNzKXtmdW5jdGlvbiBmaWx0ZXIgKHhzLCBmbikgewor
ICAgIHZhciByZXMgPSBbXTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHhzLmxlbmd0aDsgaSsr
KSB7CisgICAgICAgIGlmIChmbih4c1tpXSwgaSwgeHMpKSByZXMucHVzaCh4c1tpXSk7CisgICAg
fQorICAgIHJldHVybiByZXM7Cit9CisKKy8vIHJlc29sdmVzIC4gYW5kIC4uIGVsZW1lbnRzIGlu
IGEgcGF0aCBhcnJheSB3aXRoIGRpcmVjdG9yeSBuYW1lcyB0aGVyZQorLy8gbXVzdCBiZSBubyBz
bGFzaGVzLCBlbXB0eSBlbGVtZW50cywgb3IgZGV2aWNlIG5hbWVzIChjOlwpIGluIHRoZSBhcnJh
eQorLy8gKHNvIGFsc28gbm8gbGVhZGluZyBhbmQgdHJhaWxpbmcgc2xhc2hlcyAtIGl0IGRvZXMg
bm90IGRpc3Rpbmd1aXNoCisvLyByZWxhdGl2ZSBhbmQgYWJzb2x1dGUgcGF0aHMpCitmdW5jdGlv
biBub3JtYWxpemVBcnJheShwYXJ0cywgYWxsb3dBYm92ZVJvb3QpIHsKKyAgLy8gaWYgdGhlIHBh
dGggdHJpZXMgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIGB1cGAgZW5kcyB1cCA+IDAKKyAgdmFyIHVw
ID0gMDsKKyAgZm9yICh2YXIgaSA9IHBhcnRzLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHsKKyAgICB2
YXIgbGFzdCA9IHBhcnRzW2ldOworICAgIGlmIChsYXN0ID09ICcuJykgeworICAgICAgcGFydHMu
c3BsaWNlKGksIDEpOworICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykgeworICAgICAgcGFy
dHMuc3BsaWNlKGksIDEpOworICAgICAgdXArKzsKKyAgICB9IGVsc2UgaWYgKHVwKSB7CisgICAg
ICBwYXJ0cy5zcGxpY2UoaSwgMSk7CisgICAgICB1cC0tOworICAgIH0KKyAgfQorCisgIC8vIGlm
IHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGlu
ZyAuLnMKKyAgaWYgKGFsbG93QWJvdmVSb290KSB7CisgICAgZm9yICg7IHVwLS07IHVwKSB7Cisg
ICAgICBwYXJ0cy51bnNoaWZ0KCcuLicpOworICAgIH0KKyAgfQorCisgIHJldHVybiBwYXJ0czsK
K30KKworLy8gUmVnZXggdG8gc3BsaXQgYSBmaWxlbmFtZSBpbnRvIFsqLCBkaXIsIGJhc2VuYW1l
LCBleHRdCisvLyBwb3NpeCB2ZXJzaW9uCit2YXIgc3BsaXRQYXRoUmUgPSAvXiguK1wvKD8hJCl8
XC8pPygoPzouKz8pPyhcLlteLl0qKT8pJC87CisKKy8vIHBhdGgucmVzb2x2ZShbZnJvbSAuLi5d
LCB0bykKKy8vIHBvc2l4IHZlcnNpb24KK2V4cG9ydHMucmVzb2x2ZSA9IGZ1bmN0aW9uKCkgewor
dmFyIHJlc29sdmVkUGF0aCA9ICcnLAorICAgIHJlc29sdmVkQWJzb2x1dGUgPSBmYWxzZTsKKwor
Zm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPj0gLTEgJiYgIXJlc29sdmVkQWJzb2x1
dGU7IGktLSkgeworICB2YXIgcGF0aCA9IChpID49IDApCisgICAgICA/IGFyZ3VtZW50c1tpXQor
ICAgICAgOiBwcm9jZXNzLmN3ZCgpOworCisgIC8vIFNraXAgZW1wdHkgYW5kIGludmFsaWQgZW50
cmllcworICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnIHx8ICFwYXRoKSB7CisgICAgY29u
dGludWU7CisgIH0KKworICByZXNvbHZlZFBhdGggPSBwYXRoICsgJy8nICsgcmVzb2x2ZWRQYXRo
OworICByZXNvbHZlZEFic29sdXRlID0gcGF0aC5jaGFyQXQoMCkgPT09ICcvJzsKK30KKworLy8g
QXQgdGhpcyBwb2ludCB0aGUgcGF0aCBzaG91bGQgYmUgcmVzb2x2ZWQgdG8gYSBmdWxsIGFic29s
dXRlIHBhdGgsIGJ1dAorLy8gaGFuZGxlIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHNhZmUgKG1pZ2h0
IGhhcHBlbiB3aGVuIHByb2Nlc3MuY3dkKCkgZmFpbHMpCisKKy8vIE5vcm1hbGl6ZSB0aGUgcGF0
aAorcmVzb2x2ZWRQYXRoID0gbm9ybWFsaXplQXJyYXkoZmlsdGVyKHJlc29sdmVkUGF0aC5zcGxp
dCgnLycpLCBmdW5jdGlvbihwKSB7CisgICAgcmV0dXJuICEhcDsKKyAgfSksICFyZXNvbHZlZEFi
c29sdXRlKS5qb2luKCcvJyk7CisKKyAgcmV0dXJuICgocmVzb2x2ZWRBYnNvbHV0ZSA/ICcvJyA6
ICcnKSArIHJlc29sdmVkUGF0aCkgfHwgJy4nOworfTsKKworLy8gcGF0aC5ub3JtYWxpemUocGF0
aCkKKy8vIHBvc2l4IHZlcnNpb24KK2V4cG9ydHMubm9ybWFsaXplID0gZnVuY3Rpb24ocGF0aCkg
ewordmFyIGlzQWJzb2x1dGUgPSBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nLAorICAgIHRyYWlsaW5n
U2xhc2ggPSBwYXRoLnNsaWNlKC0xKSA9PT0gJy8nOworCisvLyBOb3JtYWxpemUgdGhlIHBhdGgK
K3BhdGggPSBub3JtYWxpemVBcnJheShmaWx0ZXIocGF0aC5zcGxpdCgnLycpLCBmdW5jdGlvbihw
KSB7CisgICAgcmV0dXJuICEhcDsKKyAgfSksICFpc0Fic29sdXRlKS5qb2luKCcvJyk7CisKKyAg
aWYgKCFwYXRoICYmICFpc0Fic29sdXRlKSB7CisgICAgcGF0aCA9ICcuJzsKKyAgfQorICBpZiAo
cGF0aCAmJiB0cmFpbGluZ1NsYXNoKSB7CisgICAgcGF0aCArPSAnLyc7CisgIH0KKyAgCisgIHJl
dHVybiAoaXNBYnNvbHV0ZSA/ICcvJyA6ICcnKSArIHBhdGg7Cit9OworCisKKy8vIHBvc2l4IHZl
cnNpb24KK2V4cG9ydHMuam9pbiA9IGZ1bmN0aW9uKCkgeworICB2YXIgcGF0aHMgPSBBcnJheS5w
cm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApOworICByZXR1cm4gZXhwb3J0cy5ub3Jt
YWxpemUoZmlsdGVyKHBhdGhzLCBmdW5jdGlvbihwLCBpbmRleCkgeworICAgIHJldHVybiBwICYm
IHR5cGVvZiBwID09PSAnc3RyaW5nJzsKKyAgfSkuam9pbignLycpKTsKK307CisKKworZXhwb3J0
cy5kaXJuYW1lID0gZnVuY3Rpb24ocGF0aCkgeworICB2YXIgZGlyID0gc3BsaXRQYXRoUmUuZXhl
YyhwYXRoKVsxXSB8fCAnJzsKKyAgdmFyIGlzV2luZG93cyA9IGZhbHNlOworICBpZiAoIWRpcikg
eworICAgIC8vIE5vIGRpcm5hbWUKKyAgICByZXR1cm4gJy4nOworICB9IGVsc2UgaWYgKGRpci5s
ZW5ndGggPT09IDEgfHwKKyAgICAgIChpc1dpbmRvd3MgJiYgZGlyLmxlbmd0aCA8PSAzICYmIGRp
ci5jaGFyQXQoMSkgPT09ICc6JykpIHsKKyAgICAvLyBJdCBpcyBqdXN0IGEgc2xhc2ggb3IgYSBk
cml2ZSBsZXR0ZXIgd2l0aCBhIHNsYXNoCisgICAgcmV0dXJuIGRpcjsKKyAgfSBlbHNlIHsKKyAg
ICAvLyBJdCBpcyBhIGZ1bGwgZGlybmFtZSwgc3RyaXAgdHJhaWxpbmcgc2xhc2gKKyAgICByZXR1
cm4gZGlyLnN1YnN0cmluZygwLCBkaXIubGVuZ3RoIC0gMSk7CisgIH0KK307CisKKworZXhwb3J0
cy5iYXNlbmFtZSA9IGZ1bmN0aW9uKHBhdGgsIGV4dCkgeworICB2YXIgZiA9IHNwbGl0UGF0aFJl
LmV4ZWMocGF0aClbMl0gfHwgJyc7CisgIC8vIFRPRE86IG1ha2UgdGhpcyBjb21wYXJpc29uIGNh
c2UtaW5zZW5zaXRpdmUgb24gd2luZG93cz8KKyAgaWYgKGV4dCAmJiBmLnN1YnN0cigtMSAqIGV4
dC5sZW5ndGgpID09PSBleHQpIHsKKyAgICBmID0gZi5zdWJzdHIoMCwgZi5sZW5ndGggLSBleHQu
bGVuZ3RoKTsKKyAgfQorICByZXR1cm4gZjsKK307CisKKworZXhwb3J0cy5leHRuYW1lID0gZnVu
Y3Rpb24ocGF0aCkgeworICByZXR1cm4gc3BsaXRQYXRoUmUuZXhlYyhwYXRoKVszXSB8fCAnJzsK
K307CisKK2V4cG9ydHMucmVsYXRpdmUgPSBmdW5jdGlvbihmcm9tLCB0bykgeworICBmcm9tID0g
ZXhwb3J0cy5yZXNvbHZlKGZyb20pLnN1YnN0cigxKTsKKyAgdG8gPSBleHBvcnRzLnJlc29sdmUo
dG8pLnN1YnN0cigxKTsKKworICBmdW5jdGlvbiB0cmltKGFycikgeworICAgIHZhciBzdGFydCA9
IDA7CisgICAgZm9yICg7IHN0YXJ0IDwgYXJyLmxlbmd0aDsgc3RhcnQrKykgeworICAgICAgaWYg
KGFycltzdGFydF0gIT09ICcnKSBicmVhazsKKyAgICB9CisKKyAgICB2YXIgZW5kID0gYXJyLmxl
bmd0aCAtIDE7CisgICAgZm9yICg7IGVuZCA+PSAwOyBlbmQtLSkgeworICAgICAgaWYgKGFycltl
bmRdICE9PSAnJykgYnJlYWs7CisgICAgfQorCisgICAgaWYgKHN0YXJ0ID4gZW5kKSByZXR1cm4g
W107CisgICAgcmV0dXJuIGFyci5zbGljZShzdGFydCwgZW5kIC0gc3RhcnQgKyAxKTsKKyAgfQor
CisgIHZhciBmcm9tUGFydHMgPSB0cmltKGZyb20uc3BsaXQoJy8nKSk7CisgIHZhciB0b1BhcnRz
ID0gdHJpbSh0by5zcGxpdCgnLycpKTsKKworICB2YXIgbGVuZ3RoID0gTWF0aC5taW4oZnJvbVBh
cnRzLmxlbmd0aCwgdG9QYXJ0cy5sZW5ndGgpOworICB2YXIgc2FtZVBhcnRzTGVuZ3RoID0gbGVu
Z3RoOworICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgaWYgKGZyb21Q
YXJ0c1tpXSAhPT0gdG9QYXJ0c1tpXSkgeworICAgICAgc2FtZVBhcnRzTGVuZ3RoID0gaTsKKyAg
ICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIHZhciBvdXRwdXRQYXJ0cyA9IFtdOworICBmb3Ig
KHZhciBpID0gc2FtZVBhcnRzTGVuZ3RoOyBpIDwgZnJvbVBhcnRzLmxlbmd0aDsgaSsrKSB7Cisg
ICAgb3V0cHV0UGFydHMucHVzaCgnLi4nKTsKKyAgfQorCisgIG91dHB1dFBhcnRzID0gb3V0cHV0
UGFydHMuY29uY2F0KHRvUGFydHMuc2xpY2Uoc2FtZVBhcnRzTGVuZ3RoKSk7CisKKyAgcmV0dXJu
IG91dHB1dFBhcnRzLmpvaW4oJy8nKTsKK307CisKK30pKHJlcXVpcmUoIl9fYnJvd3NlcmlmeV9w
cm9jZXNzIikpCit9LHsiX19icm93c2VyaWZ5X3Byb2Nlc3MiOjN9XSwzOltmdW5jdGlvbihyZXF1
aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3Nl
cgorCit2YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307CisKK3Byb2Nlc3MubmV4dFRp
Y2sgPSAoZnVuY3Rpb24gKCkgeworICAgIHZhciBjYW5TZXRJbW1lZGlhdGUgPSB0eXBlb2Ygd2lu
ZG93ICE9PSAndW5kZWZpbmVkJworICAgICYmIHdpbmRvdy5zZXRJbW1lZGlhdGU7CisgICAgdmFy
IGNhblBvc3QgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJworICAgICYmIHdpbmRvdy5w
b3N0TWVzc2FnZSAmJiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcgorICAgIDsKKworICAgIGlmIChj
YW5TZXRJbW1lZGlhdGUpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmKSB7IHJldHVybiB3
aW5kb3cuc2V0SW1tZWRpYXRlKGYpIH07CisgICAgfQorCisgICAgaWYgKGNhblBvc3QpIHsKKyAg
ICAgICAgdmFyIHF1ZXVlID0gW107CisgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdt
ZXNzYWdlJywgZnVuY3Rpb24gKGV2KSB7CisgICAgICAgICAgICBpZiAoZXYuc291cmNlID09PSB3
aW5kb3cgJiYgZXYuZGF0YSA9PT0gJ3Byb2Nlc3MtdGljaycpIHsKKyAgICAgICAgICAgICAgICBl
di5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAgICAgICAgICAgICBpZiAocXVldWUubGVuZ3RoID4g
MCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgZm4gPSBxdWV1ZS5zaGlmdCgpOworICAgICAg
ICAgICAgICAgICAgICBmbigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSwgdHJ1ZSk7CisKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5leHRUaWNrKGZuKSB7
CisgICAgICAgICAgICBxdWV1ZS5wdXNoKGZuKTsKKyAgICAgICAgICAgIHdpbmRvdy5wb3N0TWVz
c2FnZSgncHJvY2Vzcy10aWNrJywgJyonKTsKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICByZXR1
cm4gZnVuY3Rpb24gbmV4dFRpY2soZm4pIHsKKyAgICAgICAgc2V0VGltZW91dChmbiwgMCk7Cisg
ICAgfTsKK30pKCk7CisKK3Byb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7Citwcm9jZXNzLmJyb3dz
ZXIgPSB0cnVlOworcHJvY2Vzcy5lbnYgPSB7fTsKK3Byb2Nlc3MuYXJndiA9IFtdOworCitwcm9j
ZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkgeworICAgIHRocm93IG5ldyBFcnJvcigncHJv
Y2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTsKK30KKworLy8gVE9ETyhzaHR5bG1hbikK
K3Byb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07Citwcm9jZXNzLmNoZGly
ID0gZnVuY3Rpb24gKGRpcikgeworICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBp
cyBub3Qgc3VwcG9ydGVkJyk7Cit9OworCit9LHt9XSw0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVs
ZSxleHBvcnRzKXsKKyhmdW5jdGlvbigpey8qCisgIENvcHlyaWdodCAoQykgMjAxMyBUaGFkZGVl
IFR5bCA8dGhhZGRlZS50eWxAZ21haWwuY29tPgorICBDb3B5cmlnaHQgKEMpIDIwMTIgQXJpeWEg
SGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+CisgIENvcHlyaWdodCAoQykgMjAxMiBN
YXRoaWFzIEJ5bmVucyA8bWF0aGlhc0BxaXdpLmJlPgorICBDb3B5cmlnaHQgKEMpIDIwMTIgSm9v
c3QtV2ltIEJvZWtlc3RlaWpuIDxqb29zdC13aW1AYm9la2VzdGVpam4ubmw+CisgIENvcHlyaWdo
dCAoQykgMjAxMiBLcmlzIEtvd2FsIDxrcmlzLmtvd2FsQGNpeGFyLmNvbT4KKyAgQ29weXJpZ2h0
IChDKSAyMDEyIFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKyAgQ29weXJp
Z2h0IChDKSAyMDEyIEFycGFkIEJvcnNvcyA8YXJwYWQuYm9yc29zQGdvb2dsZW1haWwuY29tPgor
ICBDb3B5cmlnaHQgKEMpIDIwMTEgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5j
b20+CisKKyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisKKyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UKKyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZ
UklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWQorICBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKy8qanNsaW50IGJpdHdp
c2U6dHJ1ZSBwbHVzcGx1czp0cnVlICovCisvKmdsb2JhbCBlc3ByaW1hOnRydWUsIGRlZmluZTp0
cnVlLCBleHBvcnRzOnRydWUsIHdpbmRvdzogdHJ1ZSwKK3Rocm93RXJyb3I6IHRydWUsIGdlbmVy
YXRlU3RhdGVtZW50OiB0cnVlLCBwZWVrOiB0cnVlLAorcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lv
bjogdHJ1ZSwgcGFyc2VCbG9jazogdHJ1ZSwKK3BhcnNlQ2xhc3NFeHByZXNzaW9uOiB0cnVlLCBw
YXJzZUNsYXNzRGVjbGFyYXRpb246IHRydWUsIHBhcnNlRXhwcmVzc2lvbjogdHJ1ZSwKK3BhcnNl
Rm9yU3RhdGVtZW50OiB0cnVlLAorcGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uOiB0cnVlLCBwYXJz
ZUZ1bmN0aW9uRXhwcmVzc2lvbjogdHJ1ZSwKK3BhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50czog
dHJ1ZSwgcGFyc2VWYXJpYWJsZUlkZW50aWZpZXI6IHRydWUsCitwYXJzZUltcG9ydFNwZWNpZmll
cjogdHJ1ZSwKK3BhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbjogdHJ1ZSwgcGFyc2VQYXJhbXM6
IHRydWUsIHZhbGlkYXRlUGFyYW06IHRydWUsCitwYXJzZVNwcmVhZE9yQXNzaWdubWVudEV4cHJl
c3Npb246IHRydWUsCitwYXJzZVN0YXRlbWVudDogdHJ1ZSwgcGFyc2VTb3VyY2VFbGVtZW50OiB0
cnVlLCBwYXJzZU1vZHVsZUJsb2NrOiB0cnVlLCBwYXJzZUNvbmNpc2VCb2R5OiB0cnVlLAorYWR2
YW5jZVhKU0NoaWxkOiB0cnVlLCBpc1hKU0lkZW50aWZpZXJTdGFydDogdHJ1ZSwgaXNYSlNJZGVu
dGlmaWVyUGFydDogdHJ1ZSwKK3NjYW5YSlNTdHJpbmdMaXRlcmFsOiB0cnVlLCBzY2FuWEpTSWRl
bnRpZmllcjogdHJ1ZSwKK3BhcnNlWEpTQXR0cmlidXRlVmFsdWU6IHRydWUsIHBhcnNlWEpTQ2hp
bGQ6IHRydWUsIHBhcnNlWEpTRWxlbWVudDogdHJ1ZSwgcGFyc2VYSlNFeHByZXNzaW9uQ29udGFp
bmVyOiB0cnVlLCBwYXJzZVhKU0VtcHR5RXhwcmVzc2lvbjogdHJ1ZSwKK3BhcnNlWWllbGRFeHBy
ZXNzaW9uOiB0cnVlCisqLworCisoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHsKKyAgICAndXNl
IHN0cmljdCc7CisKKyAgICAvLyBVbml2ZXJzYWwgTW9kdWxlIERlZmluaXRpb24gKFVNRCkgdG8g
c3VwcG9ydCBBTUQsIENvbW1vbkpTL05vZGUuanMsCisgICAgLy8gUmhpbm8sIGFuZCBwbGFpbiBi
cm93c2VyIGxvYWRpbmcuCisgICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYg
ZGVmaW5lLmFtZCkgeworICAgICAgICBkZWZpbmUoWydleHBvcnRzJ10sIGZhY3RvcnkpOworICAg
IH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGZh
Y3RvcnkoZXhwb3J0cyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZmFjdG9yeSgocm9vdC5lc3By
aW1hID0ge30pKTsKKyAgICB9Cit9KHRoaXMsIGZ1bmN0aW9uIChleHBvcnRzKSB7CisgICAgJ3Vz
ZSBzdHJpY3QnOworCisgICAgdmFyIFRva2VuLAorICAgICAgICBUb2tlbk5hbWUsCisgICAgICAg
IEZuRXhwclRva2VucywKKyAgICAgICAgU3ludGF4LAorICAgICAgICBQcm9wZXJ0eUtpbmQsCisg
ICAgICAgIE1lc3NhZ2VzLAorICAgICAgICBSZWdleCwKKyAgICAgICAgU3ludGF4VHJlZURlbGVn
YXRlLAorICAgICAgICBYSFRNTEVudGl0aWVzLAorICAgICAgICBDbGFzc1Byb3BlcnR5VHlwZSwK
KyAgICAgICAgc291cmNlLAorICAgICAgICBzdHJpY3QsCisgICAgICAgIGluZGV4LAorICAgICAg
ICBsaW5lTnVtYmVyLAorICAgICAgICBsaW5lU3RhcnQsCisgICAgICAgIGxlbmd0aCwKKyAgICAg
ICAgZGVsZWdhdGUsCisgICAgICAgIGxvb2thaGVhZCwKKyAgICAgICAgc3RhdGUsCisgICAgICAg
IGV4dHJhOworCisgICAgVG9rZW4gPSB7CisgICAgICAgIEJvb2xlYW5MaXRlcmFsOiAxLAorICAg
ICAgICBFT0Y6IDIsCisgICAgICAgIElkZW50aWZpZXI6IDMsCisgICAgICAgIEtleXdvcmQ6IDQs
CisgICAgICAgIE51bGxMaXRlcmFsOiA1LAorICAgICAgICBOdW1lcmljTGl0ZXJhbDogNiwKKyAg
ICAgICAgUHVuY3R1YXRvcjogNywKKyAgICAgICAgU3RyaW5nTGl0ZXJhbDogOCwKKyAgICAgICAg
UmVndWxhckV4cHJlc3Npb246IDksCisgICAgICAgIFRlbXBsYXRlOiAxMCwKKyAgICAgICAgWEpT
SWRlbnRpZmllcjogMTEsCisgICAgICAgIFhKU1RleHQ6IDEyCisgICAgfTsKKworICAgIFRva2Vu
TmFtZSA9IHt9OworICAgIFRva2VuTmFtZVtUb2tlbi5Cb29sZWFuTGl0ZXJhbF0gPSAnQm9vbGVh
bic7CisgICAgVG9rZW5OYW1lW1Rva2VuLkVPRl0gPSAnPGVuZD4nOworICAgIFRva2VuTmFtZVtU
b2tlbi5JZGVudGlmaWVyXSA9ICdJZGVudGlmaWVyJzsKKyAgICBUb2tlbk5hbWVbVG9rZW4uS2V5
d29yZF0gPSAnS2V5d29yZCc7CisgICAgVG9rZW5OYW1lW1Rva2VuLk51bGxMaXRlcmFsXSA9ICdO
dWxsJzsKKyAgICBUb2tlbk5hbWVbVG9rZW4uTnVtZXJpY0xpdGVyYWxdID0gJ051bWVyaWMnOwor
ICAgIFRva2VuTmFtZVtUb2tlbi5QdW5jdHVhdG9yXSA9ICdQdW5jdHVhdG9yJzsKKyAgICBUb2tl
bk5hbWVbVG9rZW4uU3RyaW5nTGl0ZXJhbF0gPSAnU3RyaW5nJzsKKyAgICBUb2tlbk5hbWVbVG9r
ZW4uWEpTSWRlbnRpZmllcl0gPSAnWEpTSWRlbnRpZmllcic7CisgICAgVG9rZW5OYW1lW1Rva2Vu
LlhKU1RleHRdID0gJ1hKU1RleHQnOworICAgIFRva2VuTmFtZVtUb2tlbi5SZWd1bGFyRXhwcmVz
c2lvbl0gPSAnUmVndWxhckV4cHJlc3Npb24nOworCisgICAgLy8gQSBmdW5jdGlvbiBmb2xsb3dp
bmcgb25lIG9mIHRob3NlIHRva2VucyBpcyBhbiBleHByZXNzaW9uLgorICAgIEZuRXhwclRva2Vu
cyA9IFsiKCIsICJ7IiwgIlsiLCAiaW4iLCAidHlwZW9mIiwgImluc3RhbmNlb2YiLCAibmV3IiwK
KyAgICAgICAgICAgICAgICAgICAgInJldHVybiIsICJjYXNlIiwgImRlbGV0ZSIsICJ0aHJvdyIs
ICJ2b2lkIiwKKyAgICAgICAgICAgICAgICAgICAgLy8gYXNzaWdubWVudCBvcGVyYXRvcnMKKyAg
ICAgICAgICAgICAgICAgICAgIj0iLCAiKz0iLCAiLT0iLCAiKj0iLCAiLz0iLCAiJT0iLCAiPDw9
IiwgIj4+PSIsICI+Pj49IiwKKyAgICAgICAgICAgICAgICAgICAgIiY9IiwgInw9IiwgIl49Iiwg
IiwiLAorICAgICAgICAgICAgICAgICAgICAvLyBiaW5hcnkvdW5hcnkgb3BlcmF0b3JzCisgICAg
ICAgICAgICAgICAgICAgICIrIiwgIi0iLCAiKiIsICIvIiwgIiUiLCAiKysiLCAiLS0iLCAiPDwi
LCAiPj4iLCAiPj4+IiwgIiYiLAorICAgICAgICAgICAgICAgICAgICAifCIsICJeIiwgIiEiLCAi
fiIsICImJiIsICJ8fCIsICI/IiwgIjoiLCAiPT09IiwgIj09IiwgIj49IiwKKyAgICAgICAgICAg
ICAgICAgICAgIjw9IiwgIjwiLCAiPiIsICIhPSIsICIhPT0iXTsKKworICAgIFN5bnRheCA9IHsK
KyAgICAgICAgQXJyYXlFeHByZXNzaW9uOiAnQXJyYXlFeHByZXNzaW9uJywKKyAgICAgICAgQXJy
YXlQYXR0ZXJuOiAnQXJyYXlQYXR0ZXJuJywKKyAgICAgICAgQXJyb3dGdW5jdGlvbkV4cHJlc3Np
b246ICdBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbicsCisgICAgICAgIEFzc2lnbm1lbnRFeHByZXNz
aW9uOiAnQXNzaWdubWVudEV4cHJlc3Npb24nLAorICAgICAgICBCaW5hcnlFeHByZXNzaW9uOiAn
QmluYXJ5RXhwcmVzc2lvbicsCisgICAgICAgIEJsb2NrU3RhdGVtZW50OiAnQmxvY2tTdGF0ZW1l
bnQnLAorICAgICAgICBCcmVha1N0YXRlbWVudDogJ0JyZWFrU3RhdGVtZW50JywKKyAgICAgICAg
Q2FsbEV4cHJlc3Npb246ICdDYWxsRXhwcmVzc2lvbicsCisgICAgICAgIENhdGNoQ2xhdXNlOiAn
Q2F0Y2hDbGF1c2UnLAorICAgICAgICBDbGFzc0JvZHk6ICdDbGFzc0JvZHknLAorICAgICAgICBD
bGFzc0RlY2xhcmF0aW9uOiAnQ2xhc3NEZWNsYXJhdGlvbicsCisgICAgICAgIENsYXNzRXhwcmVz
c2lvbjogJ0NsYXNzRXhwcmVzc2lvbicsCisgICAgICAgIENsYXNzSGVyaXRhZ2U6ICdDbGFzc0hl
cml0YWdlJywKKyAgICAgICAgQ29tcHJlaGVuc2lvbkJsb2NrOiAnQ29tcHJlaGVuc2lvbkJsb2Nr
JywKKyAgICAgICAgQ29tcHJlaGVuc2lvbkV4cHJlc3Npb246ICdDb21wcmVoZW5zaW9uRXhwcmVz
c2lvbicsCisgICAgICAgIENvbmRpdGlvbmFsRXhwcmVzc2lvbjogJ0NvbmRpdGlvbmFsRXhwcmVz
c2lvbicsCisgICAgICAgIENvbnRpbnVlU3RhdGVtZW50OiAnQ29udGludWVTdGF0ZW1lbnQnLAor
ICAgICAgICBEZWJ1Z2dlclN0YXRlbWVudDogJ0RlYnVnZ2VyU3RhdGVtZW50JywKKyAgICAgICAg
RG9XaGlsZVN0YXRlbWVudDogJ0RvV2hpbGVTdGF0ZW1lbnQnLAorICAgICAgICBFbXB0eVN0YXRl
bWVudDogJ0VtcHR5U3RhdGVtZW50JywKKyAgICAgICAgRXhwb3J0RGVjbGFyYXRpb246ICdFeHBv
cnREZWNsYXJhdGlvbicsCisgICAgICAgIEV4cG9ydFNwZWNpZmllcjogJ0V4cG9ydFNwZWNpZmll
cicsCisgICAgICAgIEV4cG9ydFNwZWNpZmllclNldDogJ0V4cG9ydFNwZWNpZmllclNldCcsCisg
ICAgICAgIEV4cHJlc3Npb25TdGF0ZW1lbnQ6ICdFeHByZXNzaW9uU3RhdGVtZW50JywKKyAgICAg
ICAgRm9ySW5TdGF0ZW1lbnQ6ICdGb3JJblN0YXRlbWVudCcsCisgICAgICAgIEZvck9mU3RhdGVt
ZW50OiAnRm9yT2ZTdGF0ZW1lbnQnLAorICAgICAgICBGb3JTdGF0ZW1lbnQ6ICdGb3JTdGF0ZW1l
bnQnLAorICAgICAgICBGdW5jdGlvbkRlY2xhcmF0aW9uOiAnRnVuY3Rpb25EZWNsYXJhdGlvbics
CisgICAgICAgIEZ1bmN0aW9uRXhwcmVzc2lvbjogJ0Z1bmN0aW9uRXhwcmVzc2lvbicsCisgICAg
ICAgIEdsb2I6ICdHbG9iJywKKyAgICAgICAgSWRlbnRpZmllcjogJ0lkZW50aWZpZXInLAorICAg
ICAgICBJZlN0YXRlbWVudDogJ0lmU3RhdGVtZW50JywKKyAgICAgICAgSW1wb3J0RGVjbGFyYXRp
b246ICdJbXBvcnREZWNsYXJhdGlvbicsCisgICAgICAgIEltcG9ydFNwZWNpZmllcjogJ0ltcG9y
dFNwZWNpZmllcicsCisgICAgICAgIExhYmVsZWRTdGF0ZW1lbnQ6ICdMYWJlbGVkU3RhdGVtZW50
JywKKyAgICAgICAgTGl0ZXJhbDogJ0xpdGVyYWwnLAorICAgICAgICBMb2dpY2FsRXhwcmVzc2lv
bjogJ0xvZ2ljYWxFeHByZXNzaW9uJywKKyAgICAgICAgTWVtYmVyRXhwcmVzc2lvbjogJ01lbWJl
ckV4cHJlc3Npb24nLAorICAgICAgICBNZXRob2REZWZpbml0aW9uOiAnTWV0aG9kRGVmaW5pdGlv
bicsCisgICAgICAgIE1vZHVsZURlY2xhcmF0aW9uOiAnTW9kdWxlRGVjbGFyYXRpb24nLAorICAg
ICAgICBOZXdFeHByZXNzaW9uOiAnTmV3RXhwcmVzc2lvbicsCisgICAgICAgIE9iamVjdEV4cHJl
c3Npb246ICdPYmplY3RFeHByZXNzaW9uJywKKyAgICAgICAgT2JqZWN0UGF0dGVybjogJ09iamVj
dFBhdHRlcm4nLAorICAgICAgICBQYXRoOiAgJ1BhdGgnLAorICAgICAgICBQcm9ncmFtOiAnUHJv
Z3JhbScsCisgICAgICAgIFByb3BlcnR5OiAnUHJvcGVydHknLAorICAgICAgICBSZXR1cm5TdGF0
ZW1lbnQ6ICdSZXR1cm5TdGF0ZW1lbnQnLAorICAgICAgICBTZXF1ZW5jZUV4cHJlc3Npb246ICdT
ZXF1ZW5jZUV4cHJlc3Npb24nLAorICAgICAgICBTcHJlYWRFbGVtZW50OiAnU3ByZWFkRWxlbWVu
dCcsCisgICAgICAgIFN3aXRjaENhc2U6ICdTd2l0Y2hDYXNlJywKKyAgICAgICAgU3dpdGNoU3Rh
dGVtZW50OiAnU3dpdGNoU3RhdGVtZW50JywKKyAgICAgICAgVGFnZ2VkVGVtcGxhdGVFeHByZXNz
aW9uOiAnVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uJywKKyAgICAgICAgVGVtcGxhdGVFbGVtZW50
OiAnVGVtcGxhdGVFbGVtZW50JywKKyAgICAgICAgVGVtcGxhdGVMaXRlcmFsOiAnVGVtcGxhdGVM
aXRlcmFsJywKKyAgICAgICAgVGhpc0V4cHJlc3Npb246ICdUaGlzRXhwcmVzc2lvbicsCisgICAg
ICAgIFRocm93U3RhdGVtZW50OiAnVGhyb3dTdGF0ZW1lbnQnLAorICAgICAgICBUcnlTdGF0ZW1l
bnQ6ICdUcnlTdGF0ZW1lbnQnLAorICAgICAgICBVbmFyeUV4cHJlc3Npb246ICdVbmFyeUV4cHJl
c3Npb24nLAorICAgICAgICBVcGRhdGVFeHByZXNzaW9uOiAnVXBkYXRlRXhwcmVzc2lvbicsCisg
ICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb246ICdWYXJpYWJsZURlY2xhcmF0aW9uJywKKyAgICAg
ICAgVmFyaWFibGVEZWNsYXJhdG9yOiAnVmFyaWFibGVEZWNsYXJhdG9yJywKKyAgICAgICAgV2hp
bGVTdGF0ZW1lbnQ6ICdXaGlsZVN0YXRlbWVudCcsCisgICAgICAgIFdpdGhTdGF0ZW1lbnQ6ICdX
aXRoU3RhdGVtZW50JywKKyAgICAgICAgWEpTSWRlbnRpZmllcjogJ1hKU0lkZW50aWZpZXInLAor
ICAgICAgICBYSlNFbXB0eUV4cHJlc3Npb246ICdYSlNFbXB0eUV4cHJlc3Npb24nLAorICAgICAg
ICBYSlNFeHByZXNzaW9uQ29udGFpbmVyOiAnWEpTRXhwcmVzc2lvbkNvbnRhaW5lcicsCisgICAg
ICAgIFhKU0VsZW1lbnQ6ICdYSlNFbGVtZW50JywKKyAgICAgICAgWEpTQ2xvc2luZ0VsZW1lbnQ6
ICdYSlNDbG9zaW5nRWxlbWVudCcsCisgICAgICAgIFhKU09wZW5pbmdFbGVtZW50OiAnWEpTT3Bl
bmluZ0VsZW1lbnQnLAorICAgICAgICBYSlNBdHRyaWJ1dGU6ICdYSlNBdHRyaWJ1dGUnLAorICAg
ICAgICBYSlNUZXh0OiAnWEpTVGV4dCcsCisgICAgICAgIFlpZWxkRXhwcmVzc2lvbjogJ1lpZWxk
RXhwcmVzc2lvbicKKyAgICB9OworCisgICAgUHJvcGVydHlLaW5kID0geworICAgICAgICBEYXRh
OiAxLAorICAgICAgICBHZXQ6IDIsCisgICAgICAgIFNldDogNAorICAgIH07CisKKyAgICBDbGFz
c1Byb3BlcnR5VHlwZSA9IHsKKyAgICAgICAgc3RhdGljOiAnc3RhdGljJywKKyAgICAgICAgcHJv
dG90eXBlOiAncHJvdG90eXBlJworICAgIH07CisKKyAgICAvLyBFcnJvciBtZXNzYWdlcyBzaG91
bGQgYmUgaWRlbnRpY2FsIHRvIFY4LgorICAgIE1lc3NhZ2VzID0geworICAgICAgICBVbmV4cGVj
dGVkVG9rZW46ICAnVW5leHBlY3RlZCB0b2tlbiAlMCcsCisgICAgICAgIFVuZXhwZWN0ZWROdW1i
ZXI6ICAnVW5leHBlY3RlZCBudW1iZXInLAorICAgICAgICBVbmV4cGVjdGVkU3RyaW5nOiAgJ1Vu
ZXhwZWN0ZWQgc3RyaW5nJywKKyAgICAgICAgVW5leHBlY3RlZElkZW50aWZpZXI6ICAnVW5leHBl
Y3RlZCBpZGVudGlmaWVyJywKKyAgICAgICAgVW5leHBlY3RlZFJlc2VydmVkOiAgJ1VuZXhwZWN0
ZWQgcmVzZXJ2ZWQgd29yZCcsCisgICAgICAgIFVuZXhwZWN0ZWRUZW1wbGF0ZTogICdVbmV4cGVj
dGVkIHF1YXNpICUwJywKKyAgICAgICAgVW5leHBlY3RlZEVPUzogICdVbmV4cGVjdGVkIGVuZCBv
ZiBpbnB1dCcsCisgICAgICAgIE5ld2xpbmVBZnRlclRocm93OiAgJ0lsbGVnYWwgbmV3bGluZSBh
ZnRlciB0aHJvdycsCisgICAgICAgIEludmFsaWRSZWdFeHA6ICdJbnZhbGlkIHJlZ3VsYXIgZXhw
cmVzc2lvbicsCisgICAgICAgIFVudGVybWluYXRlZFJlZ0V4cDogICdJbnZhbGlkIHJlZ3VsYXIg
ZXhwcmVzc2lvbjogbWlzc2luZyAvJywKKyAgICAgICAgSW52YWxpZExIU0luQXNzaWdubWVudDog
ICdJbnZhbGlkIGxlZnQtaGFuZCBzaWRlIGluIGFzc2lnbm1lbnQnLAorICAgICAgICBJbnZhbGlk
TEhTSW5Gb3JtYWxzTGlzdDogICdJbnZhbGlkIGxlZnQtaGFuZCBzaWRlIGluIGZvcm1hbHMgbGlz
dCcsCisgICAgICAgIEludmFsaWRMSFNJbkZvckluOiAgJ0ludmFsaWQgbGVmdC1oYW5kIHNpZGUg
aW4gZm9yLWluJywKKyAgICAgICAgTXVsdGlwbGVEZWZhdWx0c0luU3dpdGNoOiAnTW9yZSB0aGFu
IG9uZSBkZWZhdWx0IGNsYXVzZSBpbiBzd2l0Y2ggc3RhdGVtZW50JywKKyAgICAgICAgTm9DYXRj
aE9yRmluYWxseTogICdNaXNzaW5nIGNhdGNoIG9yIGZpbmFsbHkgYWZ0ZXIgdHJ5JywKKyAgICAg
ICAgVW5rbm93bkxhYmVsOiAnVW5kZWZpbmVkIGxhYmVsIFwnJTBcJycsCisgICAgICAgIFJlZGVj
bGFyYXRpb246ICclMCBcJyUxXCcgaGFzIGFscmVhZHkgYmVlbiBkZWNsYXJlZCcsCisgICAgICAg
IElsbGVnYWxDb250aW51ZTogJ0lsbGVnYWwgY29udGludWUgc3RhdGVtZW50JywKKyAgICAgICAg
SWxsZWdhbEJyZWFrOiAnSWxsZWdhbCBicmVhayBzdGF0ZW1lbnQnLAorICAgICAgICBJbGxlZ2Fs
RHVwbGljYXRlQ2xhc3NQcm9wZXJ0eTogJ0lsbGVnYWwgZHVwbGljYXRlIHByb3BlcnR5IGluIGNs
YXNzIGRlZmluaXRpb24nLAorICAgICAgICBJbGxlZ2FsUmV0dXJuOiAnSWxsZWdhbCByZXR1cm4g
c3RhdGVtZW50JywKKyAgICAgICAgSWxsZWdhbFlpZWxkOiAnSWxsZWdhbCB5aWVsZCBleHByZXNz
aW9uJywKKyAgICAgICAgSWxsZWdhbFNwcmVhZDogJ0lsbGVnYWwgc3ByZWFkIGVsZW1lbnQnLAor
ICAgICAgICBTdHJpY3RNb2RlV2l0aDogICdTdHJpY3QgbW9kZSBjb2RlIG1heSBub3QgaW5jbHVk
ZSBhIHdpdGggc3RhdGVtZW50JywKKyAgICAgICAgU3RyaWN0Q2F0Y2hWYXJpYWJsZTogICdDYXRj
aCB2YXJpYWJsZSBtYXkgbm90IGJlIGV2YWwgb3IgYXJndW1lbnRzIGluIHN0cmljdCBtb2RlJywK
KyAgICAgICAgU3RyaWN0VmFyTmFtZTogICdWYXJpYWJsZSBuYW1lIG1heSBub3QgYmUgZXZhbCBv
ciBhcmd1bWVudHMgaW4gc3RyaWN0IG1vZGUnLAorICAgICAgICBTdHJpY3RQYXJhbU5hbWU6ICAn
UGFyYW1ldGVyIG5hbWUgZXZhbCBvciBhcmd1bWVudHMgaXMgbm90IGFsbG93ZWQgaW4gc3RyaWN0
IG1vZGUnLAorICAgICAgICBTdHJpY3RQYXJhbUR1cGU6ICdTdHJpY3QgbW9kZSBmdW5jdGlvbiBt
YXkgbm90IGhhdmUgZHVwbGljYXRlIHBhcmFtZXRlciBuYW1lcycsCisgICAgICAgIFBhcmFtZXRl
ckFmdGVyUmVzdFBhcmFtZXRlcjogJ1Jlc3QgcGFyYW1ldGVyIG11c3QgYmUgZmluYWwgcGFyYW1l
dGVyIG9mIGFuIGFyZ3VtZW50IGxpc3QnLAorICAgICAgICBFbGVtZW50QWZ0ZXJTcHJlYWRFbGVt
ZW50OiAnU3ByZWFkIG11c3QgYmUgdGhlIGZpbmFsIGVsZW1lbnQgb2YgYW4gZWxlbWVudCBsaXN0
JywKKyAgICAgICAgT2JqZWN0UGF0dGVybkFzUmVzdFBhcmFtZXRlcjogJ0ludmFsaWQgcmVzdCBw
YXJhbWV0ZXInLAorICAgICAgICBPYmplY3RQYXR0ZXJuQXNTcHJlYWQ6ICdJbnZhbGlkIHNwcmVh
ZCBhcmd1bWVudCcsCisgICAgICAgIFN0cmljdEZ1bmN0aW9uTmFtZTogICdGdW5jdGlvbiBuYW1l
IG1heSBub3QgYmUgZXZhbCBvciBhcmd1bWVudHMgaW4gc3RyaWN0IG1vZGUnLAorICAgICAgICBT
dHJpY3RPY3RhbExpdGVyYWw6ICAnT2N0YWwgbGl0ZXJhbHMgYXJlIG5vdCBhbGxvd2VkIGluIHN0
cmljdCBtb2RlLicsCisgICAgICAgIFN0cmljdERlbGV0ZTogICdEZWxldGUgb2YgYW4gdW5xdWFs
aWZpZWQgaWRlbnRpZmllciBpbiBzdHJpY3QgbW9kZS4nLAorICAgICAgICBTdHJpY3REdXBsaWNh
dGVQcm9wZXJ0eTogICdEdXBsaWNhdGUgZGF0YSBwcm9wZXJ0eSBpbiBvYmplY3QgbGl0ZXJhbCBu
b3QgYWxsb3dlZCBpbiBzdHJpY3QgbW9kZScsCisgICAgICAgIEFjY2Vzc29yRGF0YVByb3BlcnR5
OiAgJ09iamVjdCBsaXRlcmFsIG1heSBub3QgaGF2ZSBkYXRhIGFuZCBhY2Nlc3NvciBwcm9wZXJ0
eSB3aXRoIHRoZSBzYW1lIG5hbWUnLAorICAgICAgICBBY2Nlc3NvckdldFNldDogICdPYmplY3Qg
bGl0ZXJhbCBtYXkgbm90IGhhdmUgbXVsdGlwbGUgZ2V0L3NldCBhY2Nlc3NvcnMgd2l0aCB0aGUg
c2FtZSBuYW1lJywKKyAgICAgICAgU3RyaWN0TEhTQXNzaWdubWVudDogICdBc3NpZ25tZW50IHRv
IGV2YWwgb3IgYXJndW1lbnRzIGlzIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlJywKKyAgICAg
ICAgU3RyaWN0TEhTUG9zdGZpeDogICdQb3N0Zml4IGluY3JlbWVudC9kZWNyZW1lbnQgbWF5IG5v
dCBoYXZlIGV2YWwgb3IgYXJndW1lbnRzIG9wZXJhbmQgaW4gc3RyaWN0IG1vZGUnLAorICAgICAg
ICBTdHJpY3RMSFNQcmVmaXg6ICAnUHJlZml4IGluY3JlbWVudC9kZWNyZW1lbnQgbWF5IG5vdCBo
YXZlIGV2YWwgb3IgYXJndW1lbnRzIG9wZXJhbmQgaW4gc3RyaWN0IG1vZGUnLAorICAgICAgICBT
dHJpY3RSZXNlcnZlZFdvcmQ6ICAnVXNlIG9mIGZ1dHVyZSByZXNlcnZlZCB3b3JkIGluIHN0cmlj
dCBtb2RlJywKKyAgICAgICAgTm9Gcm9tQWZ0ZXJJbXBvcnQ6ICdNaXNzaW5nIGZyb20gYWZ0ZXIg
aW1wb3J0JywKKyAgICAgICAgTm9ZaWVsZEluR2VuZXJhdG9yOiAnTWlzc2luZyB5aWVsZCBpbiBn
ZW5lcmF0b3InLAorICAgICAgICBOb1VuaW50aWFsaXplZENvbnN0OiAnQ29uc3QgbXVzdCBiZSBp
bml0aWFsaXplZCcsCisgICAgICAgIENvbXByZWhlbnNpb25SZXF1aXJlc0Jsb2NrOiAnQ29tcHJl
aGVuc2lvbiBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGJsb2NrJywKKyAgICAgICAgQ29tcHJlaGVu
c2lvbkVycm9yOiAgJ0NvbXByZWhlbnNpb24gRXJyb3InLAorICAgICAgICBFYWNoTm90QWxsb3dl
ZDogICdFYWNoIGlzIG5vdCBzdXBwb3J0ZWQnLAorICAgICAgICBJbnZhbGlkWEpTVGFnTmFtZTog
J1hKUyB0YWcgbmFtZSBjYW4gbm90IGJlIGVtcHR5JywKKyAgICAgICAgSW52YWxpZFhKU0F0dHJp
YnV0ZVZhbHVlOiAnWEpTIHZhbHVlIHNob3VsZCBiZSBlaXRoZXIgYW4gZXhwcmVzc2lvbiBvciBh
IHF1b3RlZCBYSlMgdGV4dCcsCisgICAgICAgIEV4cGVjdGVkWEpTQ2xvc2luZ1RhZzogJ0V4cGVj
dGVkIGNvcnJlc3BvbmRpbmcgWEpTIGNsb3NpbmcgdGFnIGZvciAlMCcKKyAgICB9OworCisgICAg
Ly8gU2VlIGFsc28gdG9vbHMvZ2VuZXJhdGUtdW5pY29kZS1yZWdleC5weS4KKyAgICBSZWdleCA9
IHsKKyAgICAgICAgTm9uQXNjaWlJZGVudGlmaWVyU3RhcnQ6IG5ldyBSZWdFeHAoJ1tceGFhXHhi
NVx4YmFceGMwLVx4ZDZceGQ4LVx4ZjZceGY4LVx1MDJjMVx1MDJjNi1cdTAyZDFcdTAyZTAtXHUw
MmU0XHUwMmVjXHUwMmVlXHUwMzcwLVx1MDM3NFx1MDM3Nlx1MDM3N1x1MDM3YS1cdTAzN2RcdTAz
ODZcdTAzODgtXHUwMzhhXHUwMzhjXHUwMzhlLVx1MDNhMVx1MDNhMy1cdTAzZjVcdTAzZjctXHUw
NDgxXHUwNDhhLVx1MDUyN1x1MDUzMS1cdTA1NTZcdTA1NTlcdTA1NjEtXHUwNTg3XHUwNWQwLVx1
MDVlYVx1MDVmMC1cdTA1ZjJcdTA2MjAtXHUwNjRhXHUwNjZlXHUwNjZmXHUwNjcxLVx1MDZkM1x1
MDZkNVx1MDZlNVx1MDZlNlx1MDZlZVx1MDZlZlx1MDZmYS1cdTA2ZmNcdTA2ZmZcdTA3MTBcdTA3
MTItXHUwNzJmXHUwNzRkLVx1MDdhNVx1MDdiMVx1MDdjYS1cdTA3ZWFcdTA3ZjRcdTA3ZjVcdTA3
ZmFcdTA4MDAtXHUwODE1XHUwODFhXHUwODI0XHUwODI4XHUwODQwLVx1MDg1OFx1MDhhMFx1MDhh
Mi1cdTA4YWNcdTA5MDQtXHUwOTM5XHUwOTNkXHUwOTUwXHUwOTU4LVx1MDk2MVx1MDk3MS1cdTA5
NzdcdTA5NzktXHUwOTdmXHUwOTg1LVx1MDk4Y1x1MDk4Zlx1MDk5MFx1MDk5My1cdTA5YThcdTA5
YWEtXHUwOWIwXHUwOWIyXHUwOWI2LVx1MDliOVx1MDliZFx1MDljZVx1MDlkY1x1MDlkZFx1MDlk
Zi1cdTA5ZTFcdTA5ZjBcdTA5ZjFcdTBhMDUtXHUwYTBhXHUwYTBmXHUwYTEwXHUwYTEzLVx1MGEy
OFx1MGEyYS1cdTBhMzBcdTBhMzJcdTBhMzNcdTBhMzVcdTBhMzZcdTBhMzhcdTBhMzlcdTBhNTkt
XHUwYTVjXHUwYTVlXHUwYTcyLVx1MGE3NFx1MGE4NS1cdTBhOGRcdTBhOGYtXHUwYTkxXHUwYTkz
LVx1MGFhOFx1MGFhYS1cdTBhYjBcdTBhYjJcdTBhYjNcdTBhYjUtXHUwYWI5XHUwYWJkXHUwYWQw
XHUwYWUwXHUwYWUxXHUwYjA1LVx1MGIwY1x1MGIwZlx1MGIxMFx1MGIxMy1cdTBiMjhcdTBiMmEt
XHUwYjMwXHUwYjMyXHUwYjMzXHUwYjM1LVx1MGIzOVx1MGIzZFx1MGI1Y1x1MGI1ZFx1MGI1Zi1c
dTBiNjFcdTBiNzFcdTBiODNcdTBiODUtXHUwYjhhXHUwYjhlLVx1MGI5MFx1MGI5Mi1cdTBiOTVc
dTBiOTlcdTBiOWFcdTBiOWNcdTBiOWVcdTBiOWZcdTBiYTNcdTBiYTRcdTBiYTgtXHUwYmFhXHUw
YmFlLVx1MGJiOVx1MGJkMFx1MGMwNS1cdTBjMGNcdTBjMGUtXHUwYzEwXHUwYzEyLVx1MGMyOFx1
MGMyYS1cdTBjMzNcdTBjMzUtXHUwYzM5XHUwYzNkXHUwYzU4XHUwYzU5XHUwYzYwXHUwYzYxXHUw
Yzg1LVx1MGM4Y1x1MGM4ZS1cdTBjOTBcdTBjOTItXHUwY2E4XHUwY2FhLVx1MGNiM1x1MGNiNS1c
dTBjYjlcdTBjYmRcdTBjZGVcdTBjZTBcdTBjZTFcdTBjZjFcdTBjZjJcdTBkMDUtXHUwZDBjXHUw
ZDBlLVx1MGQxMFx1MGQxMi1cdTBkM2FcdTBkM2RcdTBkNGVcdTBkNjBcdTBkNjFcdTBkN2EtXHUw
ZDdmXHUwZDg1LVx1MGQ5Nlx1MGQ5YS1cdTBkYjFcdTBkYjMtXHUwZGJiXHUwZGJkXHUwZGMwLVx1
MGRjNlx1MGUwMS1cdTBlMzBcdTBlMzJcdTBlMzNcdTBlNDAtXHUwZTQ2XHUwZTgxXHUwZTgyXHUw
ZTg0XHUwZTg3XHUwZTg4XHUwZThhXHUwZThkXHUwZTk0LVx1MGU5N1x1MGU5OS1cdTBlOWZcdTBl
YTEtXHUwZWEzXHUwZWE1XHUwZWE3XHUwZWFhXHUwZWFiXHUwZWFkLVx1MGViMFx1MGViMlx1MGVi
M1x1MGViZFx1MGVjMC1cdTBlYzRcdTBlYzZcdTBlZGMtXHUwZWRmXHUwZjAwXHUwZjQwLVx1MGY0
N1x1MGY0OS1cdTBmNmNcdTBmODgtXHUwZjhjXHUxMDAwLVx1MTAyYVx1MTAzZlx1MTA1MC1cdTEw
NTVcdTEwNWEtXHUxMDVkXHUxMDYxXHUxMDY1XHUxMDY2XHUxMDZlLVx1MTA3MFx1MTA3NS1cdTEw
ODFcdTEwOGVcdTEwYTAtXHUxMGM1XHUxMGM3XHUxMGNkXHUxMGQwLVx1MTBmYVx1MTBmYy1cdTEy
NDhcdTEyNGEtXHUxMjRkXHUxMjUwLVx1MTI1Nlx1MTI1OFx1MTI1YS1cdTEyNWRcdTEyNjAtXHUx
Mjg4XHUxMjhhLVx1MTI4ZFx1MTI5MC1cdTEyYjBcdTEyYjItXHUxMmI1XHUxMmI4LVx1MTJiZVx1
MTJjMFx1MTJjMi1cdTEyYzVcdTEyYzgtXHUxMmQ2XHUxMmQ4LVx1MTMxMFx1MTMxMi1cdTEzMTVc
dTEzMTgtXHUxMzVhXHUxMzgwLVx1MTM4Zlx1MTNhMC1cdTEzZjRcdTE0MDEtXHUxNjZjXHUxNjZm
LVx1MTY3Zlx1MTY4MS1cdTE2OWFcdTE2YTAtXHUxNmVhXHUxNmVlLVx1MTZmMFx1MTcwMC1cdTE3
MGNcdTE3MGUtXHUxNzExXHUxNzIwLVx1MTczMVx1MTc0MC1cdTE3NTFcdTE3NjAtXHUxNzZjXHUx
NzZlLVx1MTc3MFx1MTc4MC1cdTE3YjNcdTE3ZDdcdTE3ZGNcdTE4MjAtXHUxODc3XHUxODgwLVx1
MThhOFx1MThhYVx1MThiMC1cdTE4ZjVcdTE5MDAtXHUxOTFjXHUxOTUwLVx1MTk2ZFx1MTk3MC1c
dTE5NzRcdTE5ODAtXHUxOWFiXHUxOWMxLVx1MTljN1x1MWEwMC1cdTFhMTZcdTFhMjAtXHUxYTU0
XHUxYWE3XHUxYjA1LVx1MWIzM1x1MWI0NS1cdTFiNGJcdTFiODMtXHUxYmEwXHUxYmFlXHUxYmFm
XHUxYmJhLVx1MWJlNVx1MWMwMC1cdTFjMjNcdTFjNGQtXHUxYzRmXHUxYzVhLVx1MWM3ZFx1MWNl
OS1cdTFjZWNcdTFjZWUtXHUxY2YxXHUxY2Y1XHUxY2Y2XHUxZDAwLVx1MWRiZlx1MWUwMC1cdTFm
MTVcdTFmMTgtXHUxZjFkXHUxZjIwLVx1MWY0NVx1MWY0OC1cdTFmNGRcdTFmNTAtXHUxZjU3XHUx
ZjU5XHUxZjViXHUxZjVkXHUxZjVmLVx1MWY3ZFx1MWY4MC1cdTFmYjRcdTFmYjYtXHUxZmJjXHUx
ZmJlXHUxZmMyLVx1MWZjNFx1MWZjNi1cdTFmY2NcdTFmZDAtXHUxZmQzXHUxZmQ2LVx1MWZkYlx1
MWZlMC1cdTFmZWNcdTFmZjItXHUxZmY0XHUxZmY2LVx1MWZmY1x1MjA3MVx1MjA3Zlx1MjA5MC1c
dTIwOWNcdTIxMDJcdTIxMDdcdTIxMGEtXHUyMTEzXHUyMTE1XHUyMTE5LVx1MjExZFx1MjEyNFx1
MjEyNlx1MjEyOFx1MjEyYS1cdTIxMmRcdTIxMmYtXHUyMTM5XHUyMTNjLVx1MjEzZlx1MjE0NS1c
dTIxNDlcdTIxNGVcdTIxNjAtXHUyMTg4XHUyYzAwLVx1MmMyZVx1MmMzMC1cdTJjNWVcdTJjNjAt
XHUyY2U0XHUyY2ViLVx1MmNlZVx1MmNmMlx1MmNmM1x1MmQwMC1cdTJkMjVcdTJkMjdcdTJkMmRc
dTJkMzAtXHUyZDY3XHUyZDZmXHUyZDgwLVx1MmQ5Nlx1MmRhMC1cdTJkYTZcdTJkYTgtXHUyZGFl
XHUyZGIwLVx1MmRiNlx1MmRiOC1cdTJkYmVcdTJkYzAtXHUyZGM2XHUyZGM4LVx1MmRjZVx1MmRk
MC1cdTJkZDZcdTJkZDgtXHUyZGRlXHUyZTJmXHUzMDA1LVx1MzAwN1x1MzAyMS1cdTMwMjlcdTMw
MzEtXHUzMDM1XHUzMDM4LVx1MzAzY1x1MzA0MS1cdTMwOTZcdTMwOWQtXHUzMDlmXHUzMGExLVx1
MzBmYVx1MzBmYy1cdTMwZmZcdTMxMDUtXHUzMTJkXHUzMTMxLVx1MzE4ZVx1MzFhMC1cdTMxYmFc
dTMxZjAtXHUzMWZmXHUzNDAwLVx1NGRiNVx1NGUwMC1cdTlmY2NcdWEwMDAtXHVhNDhjXHVhNGQw
LVx1YTRmZFx1YTUwMC1cdWE2MGNcdWE2MTAtXHVhNjFmXHVhNjJhXHVhNjJiXHVhNjQwLVx1YTY2
ZVx1YTY3Zi1cdWE2OTdcdWE2YTAtXHVhNmVmXHVhNzE3LVx1YTcxZlx1YTcyMi1cdWE3ODhcdWE3
OGItXHVhNzhlXHVhNzkwLVx1YTc5M1x1YTdhMC1cdWE3YWFcdWE3ZjgtXHVhODAxXHVhODAzLVx1
YTgwNVx1YTgwNy1cdWE4MGFcdWE4MGMtXHVhODIyXHVhODQwLVx1YTg3M1x1YTg4Mi1cdWE4YjNc
dWE4ZjItXHVhOGY3XHVhOGZiXHVhOTBhLVx1YTkyNVx1YTkzMC1cdWE5NDZcdWE5NjAtXHVhOTdj
XHVhOTg0LVx1YTliMlx1YTljZlx1YWEwMC1cdWFhMjhcdWFhNDAtXHVhYTQyXHVhYTQ0LVx1YWE0
Ylx1YWE2MC1cdWFhNzZcdWFhN2FcdWFhODAtXHVhYWFmXHVhYWIxXHVhYWI1XHVhYWI2XHVhYWI5
LVx1YWFiZFx1YWFjMFx1YWFjMlx1YWFkYi1cdWFhZGRcdWFhZTAtXHVhYWVhXHVhYWYyLVx1YWFm
NFx1YWIwMS1cdWFiMDZcdWFiMDktXHVhYjBlXHVhYjExLVx1YWIxNlx1YWIyMC1cdWFiMjZcdWFi
MjgtXHVhYjJlXHVhYmMwLVx1YWJlMlx1YWMwMC1cdWQ3YTNcdWQ3YjAtXHVkN2M2XHVkN2NiLVx1
ZDdmYlx1ZjkwMC1cdWZhNmRcdWZhNzAtXHVmYWQ5XHVmYjAwLVx1ZmIwNlx1ZmIxMy1cdWZiMTdc
dWZiMWRcdWZiMWYtXHVmYjI4XHVmYjJhLVx1ZmIzNlx1ZmIzOC1cdWZiM2NcdWZiM2VcdWZiNDBc
dWZiNDFcdWZiNDNcdWZiNDRcdWZiNDYtXHVmYmIxXHVmYmQzLVx1ZmQzZFx1ZmQ1MC1cdWZkOGZc
dWZkOTItXHVmZGM3XHVmZGYwLVx1ZmRmYlx1ZmU3MC1cdWZlNzRcdWZlNzYtXHVmZWZjXHVmZjIx
LVx1ZmYzYVx1ZmY0MS1cdWZmNWFcdWZmNjYtXHVmZmJlXHVmZmMyLVx1ZmZjN1x1ZmZjYS1cdWZm
Y2ZcdWZmZDItXHVmZmQ3XHVmZmRhLVx1ZmZkY10nKSwKKyAgICAgICAgTm9uQXNjaWlJZGVudGlm
aWVyUGFydDogbmV3IFJlZ0V4cCgnW1x4YWFceGI1XHhiYVx4YzAtXHhkNlx4ZDgtXHhmNlx4Zjgt
XHUwMmMxXHUwMmM2LVx1MDJkMVx1MDJlMC1cdTAyZTRcdTAyZWNcdTAyZWVcdTAzMDAtXHUwMzc0
XHUwMzc2XHUwMzc3XHUwMzdhLVx1MDM3ZFx1MDM4Nlx1MDM4OC1cdTAzOGFcdTAzOGNcdTAzOGUt
XHUwM2ExXHUwM2EzLVx1MDNmNVx1MDNmNy1cdTA0ODFcdTA0ODMtXHUwNDg3XHUwNDhhLVx1MDUy
N1x1MDUzMS1cdTA1NTZcdTA1NTlcdTA1NjEtXHUwNTg3XHUwNTkxLVx1MDViZFx1MDViZlx1MDVj
MVx1MDVjMlx1MDVjNFx1MDVjNVx1MDVjN1x1MDVkMC1cdTA1ZWFcdTA1ZjAtXHUwNWYyXHUwNjEw
LVx1MDYxYVx1MDYyMC1cdTA2NjlcdTA2NmUtXHUwNmQzXHUwNmQ1LVx1MDZkY1x1MDZkZi1cdTA2
ZThcdTA2ZWEtXHUwNmZjXHUwNmZmXHUwNzEwLVx1MDc0YVx1MDc0ZC1cdTA3YjFcdTA3YzAtXHUw
N2Y1XHUwN2ZhXHUwODAwLVx1MDgyZFx1MDg0MC1cdTA4NWJcdTA4YTBcdTA4YTItXHUwOGFjXHUw
OGU0LVx1MDhmZVx1MDkwMC1cdTA5NjNcdTA5NjYtXHUwOTZmXHUwOTcxLVx1MDk3N1x1MDk3OS1c
dTA5N2ZcdTA5ODEtXHUwOTgzXHUwOTg1LVx1MDk4Y1x1MDk4Zlx1MDk5MFx1MDk5My1cdTA5YThc
dTA5YWEtXHUwOWIwXHUwOWIyXHUwOWI2LVx1MDliOVx1MDliYy1cdTA5YzRcdTA5YzdcdTA5Yzhc
dTA5Y2ItXHUwOWNlXHUwOWQ3XHUwOWRjXHUwOWRkXHUwOWRmLVx1MDllM1x1MDllNi1cdTA5ZjFc
dTBhMDEtXHUwYTAzXHUwYTA1LVx1MGEwYVx1MGEwZlx1MGExMFx1MGExMy1cdTBhMjhcdTBhMmEt
XHUwYTMwXHUwYTMyXHUwYTMzXHUwYTM1XHUwYTM2XHUwYTM4XHUwYTM5XHUwYTNjXHUwYTNlLVx1
MGE0Mlx1MGE0N1x1MGE0OFx1MGE0Yi1cdTBhNGRcdTBhNTFcdTBhNTktXHUwYTVjXHUwYTVlXHUw
YTY2LVx1MGE3NVx1MGE4MS1cdTBhODNcdTBhODUtXHUwYThkXHUwYThmLVx1MGE5MVx1MGE5My1c
dTBhYThcdTBhYWEtXHUwYWIwXHUwYWIyXHUwYWIzXHUwYWI1LVx1MGFiOVx1MGFiYy1cdTBhYzVc
dTBhYzctXHUwYWM5XHUwYWNiLVx1MGFjZFx1MGFkMFx1MGFlMC1cdTBhZTNcdTBhZTYtXHUwYWVm
XHUwYjAxLVx1MGIwM1x1MGIwNS1cdTBiMGNcdTBiMGZcdTBiMTBcdTBiMTMtXHUwYjI4XHUwYjJh
LVx1MGIzMFx1MGIzMlx1MGIzM1x1MGIzNS1cdTBiMzlcdTBiM2MtXHUwYjQ0XHUwYjQ3XHUwYjQ4
XHUwYjRiLVx1MGI0ZFx1MGI1Nlx1MGI1N1x1MGI1Y1x1MGI1ZFx1MGI1Zi1cdTBiNjNcdTBiNjYt
XHUwYjZmXHUwYjcxXHUwYjgyXHUwYjgzXHUwYjg1LVx1MGI4YVx1MGI4ZS1cdTBiOTBcdTBiOTIt
XHUwYjk1XHUwYjk5XHUwYjlhXHUwYjljXHUwYjllXHUwYjlmXHUwYmEzXHUwYmE0XHUwYmE4LVx1
MGJhYVx1MGJhZS1cdTBiYjlcdTBiYmUtXHUwYmMyXHUwYmM2LVx1MGJjOFx1MGJjYS1cdTBiY2Rc
dTBiZDBcdTBiZDdcdTBiZTYtXHUwYmVmXHUwYzAxLVx1MGMwM1x1MGMwNS1cdTBjMGNcdTBjMGUt
XHUwYzEwXHUwYzEyLVx1MGMyOFx1MGMyYS1cdTBjMzNcdTBjMzUtXHUwYzM5XHUwYzNkLVx1MGM0
NFx1MGM0Ni1cdTBjNDhcdTBjNGEtXHUwYzRkXHUwYzU1XHUwYzU2XHUwYzU4XHUwYzU5XHUwYzYw
LVx1MGM2M1x1MGM2Ni1cdTBjNmZcdTBjODJcdTBjODNcdTBjODUtXHUwYzhjXHUwYzhlLVx1MGM5
MFx1MGM5Mi1cdTBjYThcdTBjYWEtXHUwY2IzXHUwY2I1LVx1MGNiOVx1MGNiYy1cdTBjYzRcdTBj
YzYtXHUwY2M4XHUwY2NhLVx1MGNjZFx1MGNkNVx1MGNkNlx1MGNkZVx1MGNlMC1cdTBjZTNcdTBj
ZTYtXHUwY2VmXHUwY2YxXHUwY2YyXHUwZDAyXHUwZDAzXHUwZDA1LVx1MGQwY1x1MGQwZS1cdTBk
MTBcdTBkMTItXHUwZDNhXHUwZDNkLVx1MGQ0NFx1MGQ0Ni1cdTBkNDhcdTBkNGEtXHUwZDRlXHUw
ZDU3XHUwZDYwLVx1MGQ2M1x1MGQ2Ni1cdTBkNmZcdTBkN2EtXHUwZDdmXHUwZDgyXHUwZDgzXHUw
ZDg1LVx1MGQ5Nlx1MGQ5YS1cdTBkYjFcdTBkYjMtXHUwZGJiXHUwZGJkXHUwZGMwLVx1MGRjNlx1
MGRjYVx1MGRjZi1cdTBkZDRcdTBkZDZcdTBkZDgtXHUwZGRmXHUwZGYyXHUwZGYzXHUwZTAxLVx1
MGUzYVx1MGU0MC1cdTBlNGVcdTBlNTAtXHUwZTU5XHUwZTgxXHUwZTgyXHUwZTg0XHUwZTg3XHUw
ZTg4XHUwZThhXHUwZThkXHUwZTk0LVx1MGU5N1x1MGU5OS1cdTBlOWZcdTBlYTEtXHUwZWEzXHUw
ZWE1XHUwZWE3XHUwZWFhXHUwZWFiXHUwZWFkLVx1MGViOVx1MGViYi1cdTBlYmRcdTBlYzAtXHUw
ZWM0XHUwZWM2XHUwZWM4LVx1MGVjZFx1MGVkMC1cdTBlZDlcdTBlZGMtXHUwZWRmXHUwZjAwXHUw
ZjE4XHUwZjE5XHUwZjIwLVx1MGYyOVx1MGYzNVx1MGYzN1x1MGYzOVx1MGYzZS1cdTBmNDdcdTBm
NDktXHUwZjZjXHUwZjcxLVx1MGY4NFx1MGY4Ni1cdTBmOTdcdTBmOTktXHUwZmJjXHUwZmM2XHUx
MDAwLVx1MTA0OVx1MTA1MC1cdTEwOWRcdTEwYTAtXHUxMGM1XHUxMGM3XHUxMGNkXHUxMGQwLVx1
MTBmYVx1MTBmYy1cdTEyNDhcdTEyNGEtXHUxMjRkXHUxMjUwLVx1MTI1Nlx1MTI1OFx1MTI1YS1c
dTEyNWRcdTEyNjAtXHUxMjg4XHUxMjhhLVx1MTI4ZFx1MTI5MC1cdTEyYjBcdTEyYjItXHUxMmI1
XHUxMmI4LVx1MTJiZVx1MTJjMFx1MTJjMi1cdTEyYzVcdTEyYzgtXHUxMmQ2XHUxMmQ4LVx1MTMx
MFx1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVhXHUxMzVkLVx1MTM1Zlx1MTM4MC1cdTEzOGZcdTEz
YTAtXHUxM2Y0XHUxNDAxLVx1MTY2Y1x1MTY2Zi1cdTE2N2ZcdTE2ODEtXHUxNjlhXHUxNmEwLVx1
MTZlYVx1MTZlZS1cdTE2ZjBcdTE3MDAtXHUxNzBjXHUxNzBlLVx1MTcxNFx1MTcyMC1cdTE3MzRc
dTE3NDAtXHUxNzUzXHUxNzYwLVx1MTc2Y1x1MTc2ZS1cdTE3NzBcdTE3NzJcdTE3NzNcdTE3ODAt
XHUxN2QzXHUxN2Q3XHUxN2RjXHUxN2RkXHUxN2UwLVx1MTdlOVx1MTgwYi1cdTE4MGRcdTE4MTAt
XHUxODE5XHUxODIwLVx1MTg3N1x1MTg4MC1cdTE4YWFcdTE4YjAtXHUxOGY1XHUxOTAwLVx1MTkx
Y1x1MTkyMC1cdTE5MmJcdTE5MzAtXHUxOTNiXHUxOTQ2LVx1MTk2ZFx1MTk3MC1cdTE5NzRcdTE5
ODAtXHUxOWFiXHUxOWIwLVx1MTljOVx1MTlkMC1cdTE5ZDlcdTFhMDAtXHUxYTFiXHUxYTIwLVx1
MWE1ZVx1MWE2MC1cdTFhN2NcdTFhN2YtXHUxYTg5XHUxYTkwLVx1MWE5OVx1MWFhN1x1MWIwMC1c
dTFiNGJcdTFiNTAtXHUxYjU5XHUxYjZiLVx1MWI3M1x1MWI4MC1cdTFiZjNcdTFjMDAtXHUxYzM3
XHUxYzQwLVx1MWM0OVx1MWM0ZC1cdTFjN2RcdTFjZDAtXHUxY2QyXHUxY2Q0LVx1MWNmNlx1MWQw
MC1cdTFkZTZcdTFkZmMtXHUxZjE1XHUxZjE4LVx1MWYxZFx1MWYyMC1cdTFmNDVcdTFmNDgtXHUx
ZjRkXHUxZjUwLVx1MWY1N1x1MWY1OVx1MWY1Ylx1MWY1ZFx1MWY1Zi1cdTFmN2RcdTFmODAtXHUx
ZmI0XHUxZmI2LVx1MWZiY1x1MWZiZVx1MWZjMi1cdTFmYzRcdTFmYzYtXHUxZmNjXHUxZmQwLVx1
MWZkM1x1MWZkNi1cdTFmZGJcdTFmZTAtXHUxZmVjXHUxZmYyLVx1MWZmNFx1MWZmNi1cdTFmZmNc
dTIwMGNcdTIwMGRcdTIwM2ZcdTIwNDBcdTIwNTRcdTIwNzFcdTIwN2ZcdTIwOTAtXHUyMDljXHUy
MGQwLVx1MjBkY1x1MjBlMVx1MjBlNS1cdTIwZjBcdTIxMDJcdTIxMDdcdTIxMGEtXHUyMTEzXHUy
MTE1XHUyMTE5LVx1MjExZFx1MjEyNFx1MjEyNlx1MjEyOFx1MjEyYS1cdTIxMmRcdTIxMmYtXHUy
MTM5XHUyMTNjLVx1MjEzZlx1MjE0NS1cdTIxNDlcdTIxNGVcdTIxNjAtXHUyMTg4XHUyYzAwLVx1
MmMyZVx1MmMzMC1cdTJjNWVcdTJjNjAtXHUyY2U0XHUyY2ViLVx1MmNmM1x1MmQwMC1cdTJkMjVc
dTJkMjdcdTJkMmRcdTJkMzAtXHUyZDY3XHUyZDZmXHUyZDdmLVx1MmQ5Nlx1MmRhMC1cdTJkYTZc
dTJkYTgtXHUyZGFlXHUyZGIwLVx1MmRiNlx1MmRiOC1cdTJkYmVcdTJkYzAtXHUyZGM2XHUyZGM4
LVx1MmRjZVx1MmRkMC1cdTJkZDZcdTJkZDgtXHUyZGRlXHUyZGUwLVx1MmRmZlx1MmUyZlx1MzAw
NS1cdTMwMDdcdTMwMjEtXHUzMDJmXHUzMDMxLVx1MzAzNVx1MzAzOC1cdTMwM2NcdTMwNDEtXHUz
MDk2XHUzMDk5XHUzMDlhXHUzMDlkLVx1MzA5Zlx1MzBhMS1cdTMwZmFcdTMwZmMtXHUzMGZmXHUz
MTA1LVx1MzEyZFx1MzEzMS1cdTMxOGVcdTMxYTAtXHUzMWJhXHUzMWYwLVx1MzFmZlx1MzQwMC1c
dTRkYjVcdTRlMDAtXHU5ZmNjXHVhMDAwLVx1YTQ4Y1x1YTRkMC1cdWE0ZmRcdWE1MDAtXHVhNjBj
XHVhNjEwLVx1YTYyYlx1YTY0MC1cdWE2NmZcdWE2NzQtXHVhNjdkXHVhNjdmLVx1YTY5N1x1YTY5
Zi1cdWE2ZjFcdWE3MTctXHVhNzFmXHVhNzIyLVx1YTc4OFx1YTc4Yi1cdWE3OGVcdWE3OTAtXHVh
NzkzXHVhN2EwLVx1YTdhYVx1YTdmOC1cdWE4MjdcdWE4NDAtXHVhODczXHVhODgwLVx1YThjNFx1
YThkMC1cdWE4ZDlcdWE4ZTAtXHVhOGY3XHVhOGZiXHVhOTAwLVx1YTkyZFx1YTkzMC1cdWE5NTNc
dWE5NjAtXHVhOTdjXHVhOTgwLVx1YTljMFx1YTljZi1cdWE5ZDlcdWFhMDAtXHVhYTM2XHVhYTQw
LVx1YWE0ZFx1YWE1MC1cdWFhNTlcdWFhNjAtXHVhYTc2XHVhYTdhXHVhYTdiXHVhYTgwLVx1YWFj
Mlx1YWFkYi1cdWFhZGRcdWFhZTAtXHVhYWVmXHVhYWYyLVx1YWFmNlx1YWIwMS1cdWFiMDZcdWFi
MDktXHVhYjBlXHVhYjExLVx1YWIxNlx1YWIyMC1cdWFiMjZcdWFiMjgtXHVhYjJlXHVhYmMwLVx1
YWJlYVx1YWJlY1x1YWJlZFx1YWJmMC1cdWFiZjlcdWFjMDAtXHVkN2EzXHVkN2IwLVx1ZDdjNlx1
ZDdjYi1cdWQ3ZmJcdWY5MDAtXHVmYTZkXHVmYTcwLVx1ZmFkOVx1ZmIwMC1cdWZiMDZcdWZiMTMt
XHVmYjE3XHVmYjFkLVx1ZmIyOFx1ZmIyYS1cdWZiMzZcdWZiMzgtXHVmYjNjXHVmYjNlXHVmYjQw
XHVmYjQxXHVmYjQzXHVmYjQ0XHVmYjQ2LVx1ZmJiMVx1ZmJkMy1cdWZkM2RcdWZkNTAtXHVmZDhm
XHVmZDkyLVx1ZmRjN1x1ZmRmMC1cdWZkZmJcdWZlMDAtXHVmZTBmXHVmZTIwLVx1ZmUyNlx1ZmUz
M1x1ZmUzNFx1ZmU0ZC1cdWZlNGZcdWZlNzAtXHVmZTc0XHVmZTc2LVx1ZmVmY1x1ZmYxMC1cdWZm
MTlcdWZmMjEtXHVmZjNhXHVmZjNmXHVmZjQxLVx1ZmY1YVx1ZmY2Ni1cdWZmYmVcdWZmYzItXHVm
ZmM3XHVmZmNhLVx1ZmZjZlx1ZmZkMi1cdWZmZDdcdWZmZGEtXHVmZmRjXScpCisgICAgfTsKKwor
ICAgIC8vIEVuc3VyZSB0aGUgY29uZGl0aW9uIGlzIHRydWUsIG90aGVyd2lzZSB0aHJvdyBhbiBl
cnJvci4KKyAgICAvLyBUaGlzIGlzIG9ubHkgdG8gaGF2ZSBhIGJldHRlciBjb250cmFjdCBzZW1h
bnRpYywgaS5lLiBhbm90aGVyIHNhZmV0eSBuZXQKKyAgICAvLyB0byBjYXRjaCBhIGxvZ2ljIGVy
cm9yLiBUaGUgY29uZGl0aW9uIHNoYWxsIGJlIGZ1bGZpbGxlZCBpbiBub3JtYWwgY2FzZS4KKyAg
ICAvLyBEbyBOT1QgdXNlIHRoaXMgdG8gZW5mb3JjZSBhIGNlcnRhaW4gY29uZGl0aW9uIG9uIGFu
eSB1c2VyIGlucHV0LgorCisgICAgZnVuY3Rpb24gYXNzZXJ0KGNvbmRpdGlvbiwgbWVzc2FnZSkg
eworICAgICAgICBpZiAoIWNvbmRpdGlvbikgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCdBU1NFUlQ6ICcgKyBtZXNzYWdlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9u
IGlzRGVjaW1hbERpZ2l0KGNoKSB7CisgICAgICAgIHJldHVybiAoY2ggPj0gNDggJiYgY2ggPD0g
NTcpOyAgIC8vIDAuLjkKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc0hleERpZ2l0KGNoKSB7Cisg
ICAgICAgIHJldHVybiAnMDEyMzQ1Njc4OWFiY2RlZkFCQ0RFRicuaW5kZXhPZihjaCkgPj0gMDsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBpc09jdGFsRGlnaXQoY2gpIHsKKyAgICAgICAgcmV0dXJu
ICcwMTIzNDU2NycuaW5kZXhPZihjaCkgPj0gMDsKKyAgICB9CisKKworICAgIC8vIDcuMiBXaGl0
ZSBTcGFjZQorCisgICAgZnVuY3Rpb24gaXNXaGl0ZVNwYWNlKGNoKSB7CisgICAgICAgIHJldHVy
biAoY2ggPT09IDMyKSB8fCAgLy8gc3BhY2UKKyAgICAgICAgICAgIChjaCA9PT0gOSkgfHwgICAg
ICAvLyB0YWIKKyAgICAgICAgICAgIChjaCA9PT0gMHhCKSB8fAorICAgICAgICAgICAgKGNoID09
PSAweEMpIHx8CisgICAgICAgICAgICAoY2ggPT09IDB4QTApIHx8CisgICAgICAgICAgICAoY2gg
Pj0gMHgxNjgwICYmICdcdTE2ODBcdTE4MEVcdTIwMDBcdTIwMDFcdTIwMDJcdTIwMDNcdTIwMDRc
dTIwMDVcdTIwMDZcdTIwMDdcdTIwMDhcdTIwMDlcdTIwMEFcdTIwMkZcdTIwNUZcdTMwMDBcdUZF
RkYnLmluZGV4T2YoU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpID4gMCk7CisgICAgfQorCisgICAg
Ly8gNy4zIExpbmUgVGVybWluYXRvcnMKKworICAgIGZ1bmN0aW9uIGlzTGluZVRlcm1pbmF0b3Io
Y2gpIHsKKyAgICAgICAgcmV0dXJuIChjaCA9PT0gMTApIHx8IChjaCA9PT0gMTMpIHx8IChjaCA9
PT0gMHgyMDI4KSB8fCAoY2ggPT09IDB4MjAyOSk7CisgICAgfQorCisgICAgLy8gNy42IElkZW50
aWZpZXIgTmFtZXMgYW5kIElkZW50aWZpZXJzCisKKyAgICBmdW5jdGlvbiBpc0lkZW50aWZpZXJT
dGFydChjaCkgeworICAgICAgICByZXR1cm4gKGNoID09PSAzNikgfHwgKGNoID09PSA5NSkgfHwg
IC8vICQgKGRvbGxhcikgYW5kIF8gKHVuZGVyc2NvcmUpCisgICAgICAgICAgICAoY2ggPj0gNjUg
JiYgY2ggPD0gOTApIHx8ICAgICAgICAgLy8gQS4uWgorICAgICAgICAgICAgKGNoID49IDk3ICYm
IGNoIDw9IDEyMikgfHwgICAgICAgIC8vIGEuLnoKKyAgICAgICAgICAgIChjaCA9PT0gOTIpIHx8
ICAgICAgICAgICAgICAgICAgICAvLyBcIChiYWNrc2xhc2gpCisgICAgICAgICAgICAoKGNoID49
IDB4ODApICYmIFJlZ2V4Lk5vbkFzY2lpSWRlbnRpZmllclN0YXJ0LnRlc3QoU3RyaW5nLmZyb21D
aGFyQ29kZShjaCkpKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc0lkZW50aWZpZXJQYXJ0KGNo
KSB7CisgICAgICAgIHJldHVybiAoY2ggPT09IDM2KSB8fCAoY2ggPT09IDk1KSB8fCAgLy8gJCAo
ZG9sbGFyKSBhbmQgXyAodW5kZXJzY29yZSkKKyAgICAgICAgICAgIChjaCA+PSA2NSAmJiBjaCA8
PSA5MCkgfHwgICAgICAgICAvLyBBLi5aCisgICAgICAgICAgICAoY2ggPj0gOTcgJiYgY2ggPD0g
MTIyKSB8fCAgICAgICAgLy8gYS4uegorICAgICAgICAgICAgKGNoID49IDQ4ICYmIGNoIDw9IDU3
KSB8fCAgICAgICAgIC8vIDAuLjkKKyAgICAgICAgICAgIChjaCA9PT0gOTIpIHx8ICAgICAgICAg
ICAgICAgICAgICAvLyBcIChiYWNrc2xhc2gpCisgICAgICAgICAgICAoKGNoID49IDB4ODApICYm
IFJlZ2V4Lk5vbkFzY2lpSWRlbnRpZmllclBhcnQudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGNo
KSkpOworICAgIH0KKworICAgIC8vIDcuNi4xLjIgRnV0dXJlIFJlc2VydmVkIFdvcmRzCisKKyAg
ICBmdW5jdGlvbiBpc0Z1dHVyZVJlc2VydmVkV29yZChpZCkgeworICAgICAgICBzd2l0Y2ggKGlk
KSB7CisgICAgICAgIGNhc2UgJ2NsYXNzJzoKKyAgICAgICAgY2FzZSAnZW51bSc6CisgICAgICAg
IGNhc2UgJ2V4cG9ydCc6CisgICAgICAgIGNhc2UgJ2V4dGVuZHMnOgorICAgICAgICBjYXNlICdp
bXBvcnQnOgorICAgICAgICBjYXNlICdzdXBlcic6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGZ1bmN0aW9uIGlzU3RyaWN0TW9kZVJlc2VydmVkV29yZChpZCkgeworICAg
ICAgICBzd2l0Y2ggKGlkKSB7CisgICAgICAgIGNhc2UgJ2ltcGxlbWVudHMnOgorICAgICAgICBj
YXNlICdpbnRlcmZhY2UnOgorICAgICAgICBjYXNlICdwYWNrYWdlJzoKKyAgICAgICAgY2FzZSAn
cHJpdmF0ZSc6CisgICAgICAgIGNhc2UgJ3Byb3RlY3RlZCc6CisgICAgICAgIGNhc2UgJ3B1Ymxp
Yyc6CisgICAgICAgIGNhc2UgJ3N0YXRpYyc6CisgICAgICAgIGNhc2UgJ3lpZWxkJzoKKyAgICAg
ICAgY2FzZSAnbGV0JzoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgZnVu
Y3Rpb24gaXNSZXN0cmljdGVkV29yZChpZCkgeworICAgICAgICByZXR1cm4gaWQgPT09ICdldmFs
JyB8fCBpZCA9PT0gJ2FyZ3VtZW50cyc7CisgICAgfQorCisgICAgLy8gNy42LjEuMSBLZXl3b3Jk
cworCisgICAgZnVuY3Rpb24gaXNLZXl3b3JkKGlkKSB7CisgICAgICAgIGlmIChzdHJpY3QgJiYg
aXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKGlkKSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0KKworICAgICAgICAvLyAnY29uc3QnIGlzIHNwZWNpYWxpemVkIGFzIEtleXdv
cmQgaW4gVjguCisgICAgICAgIC8vICd5aWVsZCcgYW5kICdsZXQnIGFyZSBmb3IgY29tcGF0aWJs
aXR5IHdpdGggU3BpZGVyTW9ua2V5IGFuZCBFUy5uZXh0LgorICAgICAgICAvLyBTb21lIG90aGVy
cyBhcmUgZnJvbSBmdXR1cmUgcmVzZXJ2ZWQgd29yZHMuCisKKyAgICAgICAgc3dpdGNoIChpZC5s
ZW5ndGgpIHsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ2lm
JykgfHwgKGlkID09PSAnaW4nKSB8fCAoaWQgPT09ICdkbycpOworICAgICAgICBjYXNlIDM6Cisg
ICAgICAgICAgICByZXR1cm4gKGlkID09PSAndmFyJykgfHwgKGlkID09PSAnZm9yJykgfHwgKGlk
ID09PSAnbmV3JykgfHwKKyAgICAgICAgICAgICAgICAoaWQgPT09ICd0cnknKSB8fCAoaWQgPT09
ICdsZXQnKTsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ3Ro
aXMnKSB8fCAoaWQgPT09ICdlbHNlJykgfHwgKGlkID09PSAnY2FzZScpIHx8CisgICAgICAgICAg
ICAgICAgKGlkID09PSAndm9pZCcpIHx8IChpZCA9PT0gJ3dpdGgnKSB8fCAoaWQgPT09ICdlbnVt
Jyk7CisgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICd3aGlsZScp
IHx8IChpZCA9PT0gJ2JyZWFrJykgfHwgKGlkID09PSAnY2F0Y2gnKSB8fAorICAgICAgICAgICAg
ICAgIChpZCA9PT0gJ3Rocm93JykgfHwgKGlkID09PSAnY29uc3QnKSB8fCAoaWQgPT09ICd5aWVs
ZCcpIHx8CisgICAgICAgICAgICAgICAgKGlkID09PSAnY2xhc3MnKSB8fCAoaWQgPT09ICdzdXBl
cicpOworICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICByZXR1cm4gKGlkID09PSAncmV0dXJu
JykgfHwgKGlkID09PSAndHlwZW9mJykgfHwgKGlkID09PSAnZGVsZXRlJykgfHwKKyAgICAgICAg
ICAgICAgICAoaWQgPT09ICdzd2l0Y2gnKSB8fCAoaWQgPT09ICdleHBvcnQnKSB8fCAoaWQgPT09
ICdpbXBvcnQnKTsKKyAgICAgICAgY2FzZSA3OgorICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0g
J2RlZmF1bHQnKSB8fCAoaWQgPT09ICdmaW5hbGx5JykgfHwgKGlkID09PSAnZXh0ZW5kcycpOwor
ICAgICAgICBjYXNlIDg6CisgICAgICAgICAgICByZXR1cm4gKGlkID09PSAnZnVuY3Rpb24nKSB8
fCAoaWQgPT09ICdjb250aW51ZScpIHx8IChpZCA9PT0gJ2RlYnVnZ2VyJyk7CisgICAgICAgIGNh
c2UgMTA6CisgICAgICAgICAgICByZXR1cm4gKGlkID09PSAnaW5zdGFuY2VvZicpOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQor
CisgICAgLy8gNy40IENvbW1lbnRzCisKKyAgICBmdW5jdGlvbiBza2lwQ29tbWVudCgpIHsKKyAg
ICAgICAgdmFyIGNoLCBibG9ja0NvbW1lbnQsIGxpbmVDb21tZW50OworCisgICAgICAgIGJsb2Nr
Q29tbWVudCA9IGZhbHNlOworICAgICAgICBsaW5lQ29tbWVudCA9IGZhbHNlOworCisgICAgICAg
IHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNv
ZGVBdChpbmRleCk7CisKKyAgICAgICAgICAgIGlmIChsaW5lQ29tbWVudCkgeworICAgICAgICAg
ICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2gp
KSB7CisgICAgICAgICAgICAgICAgICAgIGxpbmVDb21tZW50ID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChjaCA9PT0gMTMgJiYgc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAx
MCkgeworICAgICAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICArK2xpbmVOdW1iZXI7CisgICAgICAgICAgICAgICAg
ICAgIGxpbmVTdGFydCA9IGluZGV4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoYmxvY2tDb21tZW50KSB7CisgICAgICAgICAgICAgICAgaWYgKGlzTGluZVRlcm1p
bmF0b3IoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMTMgJiYgc291cmNl
LmNoYXJDb2RlQXQoaW5kZXggKyAxKSA9PT0gMTApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICsraW5kZXg7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgKyts
aW5lTnVtYmVyOworICAgICAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAg
ICAgICBsaW5lU3RhcnQgPSBpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49
IGxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2Fn
ZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2Uu
Y2hhckNvZGVBdChpbmRleCsrKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IGxl
bmd0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMu
VW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIC8vIEJsb2NrIGNvbW1lbnQgZW5kcyB3aXRoICcqLycgKGNoYXIgIzQy
LCBjaGFyICM0NykuCisgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gNDIpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSA0NykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tDb21tZW50
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSA0Nykg
eworICAgICAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKTsKKyAg
ICAgICAgICAgICAgICAvLyBMaW5lIGNvbW1lbnQgc3RhcnRzIHdpdGggJy8vJyAoY2hhciAjNDcs
IGNoYXIgIzQ3KS4KKyAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDQ3KSB7CisgICAgICAgICAg
ICAgICAgICAgIGluZGV4ICs9IDI7CisgICAgICAgICAgICAgICAgICAgIGxpbmVDb21tZW50ID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSA0MikgeworICAgICAgICAg
ICAgICAgICAgICAvLyBCbG9jayBjb21tZW50IHN0YXJ0cyB3aXRoICcvKicgKGNoYXIgIzQ3LCBj
aGFyICM0MikuCisgICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IDI7CisgICAgICAgICAgICAg
ICAgICAgIGJsb2NrQ29tbWVudCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmRl
eCA+PSBsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1l
c3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNXaGl0ZVNwYWNlKGNo
KSkgeworICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlz
TGluZVRlcm1pbmF0b3IoY2gpKSB7CisgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAg
ICAgICAgICBpZiAoY2ggPT09IDEzICYmIHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMTAp
IHsKKyAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgKytsaW5lTnVtYmVyOworICAgICAgICAgICAgICAgIGxpbmVTdGFydCA9IGlu
ZGV4OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIHNjYW5IZXhFc2NhcGUo
cHJlZml4KSB7CisgICAgICAgIHZhciBpLCBsZW4sIGNoLCBjb2RlID0gMDsKKworICAgICAgICBs
ZW4gPSAocHJlZml4ID09PSAndScpID8gNCA6IDI7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBs
ZW47ICsraSkgeworICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoICYmIGlzSGV4RGlnaXQo
c291cmNlW2luZGV4XSkpIHsKKyAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTsK
KyAgICAgICAgICAgICAgICBjb2RlID0gY29kZSAqIDE2ICsgJzAxMjM0NTY3ODlhYmNkZWYnLmlu
ZGV4T2YoY2gudG9Mb3dlckNhc2UoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIHJldHVybiAnJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzY2Fu
VW5pY29kZUNvZGVQb2ludEVzY2FwZSgpIHsKKyAgICAgICAgdmFyIGNoLCBjb2RlLCBjdTEsIGN1
MjsKKworICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAgICAgIGNvZGUgPSAwOworCisg
ICAgICAgIC8vIEF0IGxlYXN0LCBvbmUgaGV4IGRpZ2l0IGlzIHJlcXVpcmVkLgorICAgICAgICBp
ZiAoY2ggPT09ICd9JykgeworICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5l
eHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKGlu
ZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTsKKyAgICAg
ICAgICAgIGlmICghaXNIZXhEaWdpdChjaCkpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvZGUgPSBjb2RlICogMTYgKyAnMDEyMzQ1Njc4OWFi
Y2RlZicuaW5kZXhPZihjaC50b0xvd2VyQ2FzZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChjb2RlID4gMHgxMEZGRkYgfHwgY2ggIT09ICd9JykgeworICAgICAgICAgICAgdGhyb3dFcnJv
cih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICB9CisK
KyAgICAgICAgLy8gVVRGLTE2IEVuY29kaW5nCisgICAgICAgIGlmIChjb2RlIDw9IDB4RkZGRikg
eworICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7CisgICAgICAg
IH0KKyAgICAgICAgY3UxID0gKChjb2RlIC0gMHgxMDAwMCkgPj4gMTApICsgMHhEODAwOworICAg
ICAgICBjdTIgPSAoKGNvZGUgLSAweDEwMDAwKSAmIDEwMjMpICsgMHhEQzAwOworICAgICAgICBy
ZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjdTEsIGN1Mik7CisgICAgfQorCisgICAgZnVuY3Rp
b24gZ2V0RXNjYXBlZElkZW50aWZpZXIoKSB7CisgICAgICAgIHZhciBjaCwgaWQ7CisKKyAgICAg
ICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCsrKTsKKyAgICAgICAgaWQgPSBTdHJpbmcu
ZnJvbUNoYXJDb2RlKGNoKTsKKworICAgICAgICAvLyAnXHUnIChjaGFyICM5MiwgY2hhciAjMTE3
KSBkZW5vdGVzIGFuIGVzY2FwZWQgY2hhcmFjdGVyLgorICAgICAgICBpZiAoY2ggPT09IDkyKSB7
CisgICAgICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpICE9PSAxMTcpIHsKKyAg
ICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJ
TExFR0FMJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICArK2luZGV4OworICAgICAgICAg
ICAgY2ggPSBzY2FuSGV4RXNjYXBlKCd1Jyk7CisgICAgICAgICAgICBpZiAoIWNoIHx8IGNoID09
PSAnXFwnIHx8ICFpc0lkZW50aWZpZXJTdGFydChjaC5jaGFyQ29kZUF0KDApKSkgeworICAgICAg
ICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVH
QUwnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlkID0gY2g7CisgICAgICAgIH0KKwor
ICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGNoID0gc291cmNl
LmNoYXJDb2RlQXQoaW5kZXgpOworICAgICAgICAgICAgaWYgKCFpc0lkZW50aWZpZXJQYXJ0KGNo
KSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
KytpbmRleDsKKyAgICAgICAgICAgIGlkICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpOworCisg
ICAgICAgICAgICAvLyAnXHUnIChjaGFyICM5MiwgY2hhciAjMTE3KSBkZW5vdGVzIGFuIGVzY2Fw
ZWQgY2hhcmFjdGVyLgorICAgICAgICAgICAgaWYgKGNoID09PSA5MikgeworICAgICAgICAgICAg
ICAgIGlkID0gaWQuc3Vic3RyKDAsIGlkLmxlbmd0aCAtIDEpOworICAgICAgICAgICAgICAgIGlm
IChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgIT09IDExNykgeworICAgICAgICAgICAgICAgICAg
ICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAg
ICAgY2ggPSBzY2FuSGV4RXNjYXBlKCd1Jyk7CisgICAgICAgICAgICAgICAgaWYgKCFjaCB8fCBj
aCA9PT0gJ1xcJyB8fCAhaXNJZGVudGlmaWVyUGFydChjaC5jaGFyQ29kZUF0KDApKSkgeworICAg
ICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4s
ICdJTExFR0FMJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlkICs9IGNo
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGlkOworICAgIH0K
KworICAgIGZ1bmN0aW9uIGdldElkZW50aWZpZXIoKSB7CisgICAgICAgIHZhciBzdGFydCwgY2g7
CisKKyAgICAgICAgc3RhcnQgPSBpbmRleCsrOworICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5n
dGgpIHsKKyAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpOworICAgICAg
ICAgICAgaWYgKGNoID09PSA5MikgeworICAgICAgICAgICAgICAgIC8vIEJsYWNrc2xhc2ggKGNo
YXIgIzkyKSBtYXJrcyBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZS4KKyAgICAgICAgICAgICAgICBp
bmRleCA9IHN0YXJ0OworICAgICAgICAgICAgICAgIHJldHVybiBnZXRFc2NhcGVkSWRlbnRpZmll
cigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlzSWRlbnRpZmllclBhcnQoY2gp
KSB7CisgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gc291cmNlLnNsaWNlKHN0YXJ0LCBpbmRleCk7CisgICAgfQorCisgICAgZnVuY3Rpb24g
c2NhbklkZW50aWZpZXIoKSB7CisgICAgICAgIHZhciBzdGFydCwgaWQsIHR5cGU7CisKKyAgICAg
ICAgc3RhcnQgPSBpbmRleDsKKworICAgICAgICAvLyBCYWNrc2xhc2ggKGNoYXIgIzkyKSBzdGFy
dHMgYW4gZXNjYXBlZCBjaGFyYWN0ZXIuCisgICAgICAgIGlkID0gKHNvdXJjZS5jaGFyQ29kZUF0
KGluZGV4KSA9PT0gOTIpID8gZ2V0RXNjYXBlZElkZW50aWZpZXIoKSA6IGdldElkZW50aWZpZXIo
KTsKKworICAgICAgICAvLyBUaGVyZSBpcyBubyBrZXl3b3JkIG9yIGxpdGVyYWwgd2l0aCBvbmx5
IG9uZSBjaGFyYWN0ZXIuCisgICAgICAgIC8vIFRodXMsIGl0IG11c3QgYmUgYW4gaWRlbnRpZmll
ci4KKyAgICAgICAgaWYgKGlkLmxlbmd0aCA9PT0gMSkgeworICAgICAgICAgICAgdHlwZSA9IFRv
a2VuLklkZW50aWZpZXI7CisgICAgICAgIH0gZWxzZSBpZiAoaXNLZXl3b3JkKGlkKSkgeworICAg
ICAgICAgICAgdHlwZSA9IFRva2VuLktleXdvcmQ7CisgICAgICAgIH0gZWxzZSBpZiAoaWQgPT09
ICdudWxsJykgeworICAgICAgICAgICAgdHlwZSA9IFRva2VuLk51bGxMaXRlcmFsOworICAgICAg
ICB9IGVsc2UgaWYgKGlkID09PSAndHJ1ZScgfHwgaWQgPT09ICdmYWxzZScpIHsKKyAgICAgICAg
ICAgIHR5cGUgPSBUb2tlbi5Cb29sZWFuTGl0ZXJhbDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIHR5cGUgPSBUb2tlbi5JZGVudGlmaWVyOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIHsKKyAgICAgICAgICAgIHR5cGU6IHR5cGUsCisgICAgICAgICAgICB2YWx1ZTogaWQsCisg
ICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgbGluZVN0YXJ0
OiBsaW5lU3RhcnQsCisgICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF0KKyAgICAgICAg
fTsKKyAgICB9CisKKworICAgIC8vIDcuNyBQdW5jdHVhdG9ycworCisgICAgZnVuY3Rpb24gc2Nh
blB1bmN0dWF0b3IoKSB7CisgICAgICAgIHZhciBzdGFydCA9IGluZGV4LAorICAgICAgICAgICAg
Y29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSwKKyAgICAgICAgICAgIGNvZGUyLAorICAg
ICAgICAgICAgY2gxID0gc291cmNlW2luZGV4XSwKKyAgICAgICAgICAgIGNoMiwKKyAgICAgICAg
ICAgIGNoMywKKyAgICAgICAgICAgIGNoNDsKKworICAgICAgICBzd2l0Y2ggKGNvZGUpIHsKKyAg
ICAgICAgLy8gQ2hlY2sgZm9yIG1vc3QgY29tbW9uIHNpbmdsZS1jaGFyYWN0ZXIgcHVuY3R1YXRv
cnMuCisgICAgICAgIGNhc2UgNDA6ICAgLy8gKCBvcGVuIGJyYWNrZXQKKyAgICAgICAgY2FzZSA0
MTogICAvLyApIGNsb3NlIGJyYWNrZXQKKyAgICAgICAgY2FzZSA1OTogICAvLyA7IHNlbWljb2xv
bgorICAgICAgICBjYXNlIDQ0OiAgIC8vICwgY29tbWEKKyAgICAgICAgY2FzZSAxMjM6ICAvLyB7
IG9wZW4gY3VybHkgYnJhY2UKKyAgICAgICAgY2FzZSAxMjU6ICAvLyB9IGNsb3NlIGN1cmx5IGJy
YWNlCisgICAgICAgIGNhc2UgOTE6ICAgLy8gWworICAgICAgICBjYXNlIDkzOiAgIC8vIF0KKyAg
ICAgICAgY2FzZSA1ODogICAvLyA6CisgICAgICAgIGNhc2UgNjM6ICAgLy8gPworICAgICAgICBj
YXNlIDEyNjogIC8vIH4KKyAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICBpZiAoZXh0
cmEudG9rZW5pemUpIHsKKyAgICAgICAgICAgICAgICBpZiAoY29kZSA9PT0gNDApIHsKKyAgICAg
ICAgICAgICAgICAgICAgZXh0cmEub3BlblBhcmVuVG9rZW4gPSBleHRyYS50b2tlbnMubGVuZ3Ro
OworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gMTIzKSB7CisgICAgICAgICAg
ICAgICAgICAgIGV4dHJhLm9wZW5DdXJseVRva2VuID0gZXh0cmEudG9rZW5zLmxlbmd0aDsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4geworICAg
ICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsCisgICAgICAgICAgICAgICAgdmFs
dWU6IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSksCisgICAgICAgICAgICAgICAgbGluZU51bWJl
cjogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKKyAg
ICAgICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF0KKyAgICAgICAgICAgIH07CisKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGNvZGUyID0gc291cmNlLmNoYXJDb2RlQXQoaW5k
ZXggKyAxKTsKKworICAgICAgICAgICAgLy8gJz0nIChjaGFyICM2MSkgbWFya3MgYW4gYXNzaWdu
bWVudCBvciBjb21wYXJpc29uIG9wZXJhdG9yLgorICAgICAgICAgICAgaWYgKGNvZGUyID09PSA2
MSkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoY29kZSkgeworICAgICAgICAgICAgICAgIGNh
c2UgMzc6ICAvLyAlCisgICAgICAgICAgICAgICAgY2FzZSAzODogIC8vICYKKyAgICAgICAgICAg
ICAgICBjYXNlIDQyOiAgLy8gKjoKKyAgICAgICAgICAgICAgICBjYXNlIDQzOiAgLy8gKworICAg
ICAgICAgICAgICAgIGNhc2UgNDU6ICAvLyAtCisgICAgICAgICAgICAgICAgY2FzZSA0NzogIC8v
IC8KKyAgICAgICAgICAgICAgICBjYXNlIDYwOiAgLy8gPAorICAgICAgICAgICAgICAgIGNhc2Ug
NjI6ICAvLyA+CisgICAgICAgICAgICAgICAgY2FzZSA5NDogIC8vIF4KKyAgICAgICAgICAgICAg
ICBjYXNlIDEyNDogLy8gfAorICAgICAgICAgICAgICAgICAgICBpbmRleCArPSAyOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogVG9r
ZW4uUHVuY3R1YXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBTdHJpbmcuZnJv
bUNoYXJDb2RlKGNvZGUpICsgU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlMiksCisgICAgICAgICAg
ICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICByYW5n
ZTogW3N0YXJ0LCBpbmRleF0KKyAgICAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAg
ICAgIGNhc2UgMzM6IC8vICEKKyAgICAgICAgICAgICAgICBjYXNlIDYxOiAvLyA9CisgICAgICAg
ICAgICAgICAgICAgIGluZGV4ICs9IDI7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gIT09IGFu
ZCA9PT0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9
PT0gNjEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICB2
YWx1ZTogc291cmNlLnNsaWNlKHN0YXJ0LCBpbmRleCksCisgICAgICAgICAgICAgICAgICAgICAg
ICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgbGluZVN0
YXJ0OiBsaW5lU3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBp
bmRleF0KKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFBlZWsgbW9y
ZSBjaGFyYWN0ZXJzLgorCisgICAgICAgIGNoMiA9IHNvdXJjZVtpbmRleCArIDFdOworICAgICAg
ICBjaDMgPSBzb3VyY2VbaW5kZXggKyAyXTsKKyAgICAgICAgY2g0ID0gc291cmNlW2luZGV4ICsg
M107CisKKyAgICAgICAgLy8gNC1jaGFyYWN0ZXIgcHVuY3R1YXRvcjogPj4+PQorCisgICAgICAg
IGlmIChjaDEgPT09ICc+JyAmJiBjaDIgPT09ICc+JyAmJiBjaDMgPT09ICc+JykgeworICAgICAg
ICAgICAgaWYgKGNoNCA9PT0gJz0nKSB7CisgICAgICAgICAgICAgICAgaW5kZXggKz0gNDsKKyAg
ICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5Q
dW5jdHVhdG9yLAorICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJz4+Pj0nLAorICAgICAgICAg
ICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICBs
aW5lU3RhcnQ6IGxpbmVTdGFydCwKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwg
aW5kZXhdCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIC8vIDMtY2hhcmFjdGVyIHB1bmN0dWF0b3JzOiA9PT0gIT09ID4+PiA8PD0gPj49CisK
KyAgICAgICAgaWYgKGNoMSA9PT0gJz4nICYmIGNoMiA9PT0gJz4nICYmIGNoMyA9PT0gJz4nKSB7
CisgICAgICAgICAgICBpbmRleCArPSAzOworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLAorICAgICAgICAgICAgICAgIHZhbHVlOiAn
Pj4+JywKKyAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAorICAgICAgICAg
ICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAgICAgICAgICAgICAgIHJhbmdlOiBbc3Rh
cnQsIGluZGV4XQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjaDEg
PT09ICc8JyAmJiBjaDIgPT09ICc8JyAmJiBjaDMgPT09ICc9JykgeworICAgICAgICAgICAgaW5k
ZXggKz0gMzsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogVG9r
ZW4uUHVuY3R1YXRvciwKKyAgICAgICAgICAgICAgICB2YWx1ZTogJzw8PScsCisgICAgICAgICAg
ICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6
IGxpbmVTdGFydCwKKyAgICAgICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF0KKyAgICAg
ICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2gxID09PSAnPicgJiYgY2gyID09
PSAnPicgJiYgY2gzID09PSAnPScpIHsKKyAgICAgICAgICAgIGluZGV4ICs9IDM7CisgICAgICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsCisg
ICAgICAgICAgICAgICAgdmFsdWU6ICc+Pj0nLAorICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6
IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAg
ICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdCisgICAgICAgICAgICB9OworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGNoMSA9PT0gJy4nICYmIGNoMiA9PT0gJy4nICYmIGNoMyA9PT0g
Jy4nKSB7CisgICAgICAgICAgICBpbmRleCArPSAzOworICAgICAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLAorICAgICAgICAgICAgICAgIHZh
bHVlOiAnLi4uJywKKyAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAorICAg
ICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAgICAgICAgICAgICAgIHJhbmdl
OiBbc3RhcnQsIGluZGV4XQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IE90aGVyIDItY2hhcmFjdGVyIHB1bmN0dWF0b3JzOiArKyAtLSA8PCA+PiAmJiB8fAorCisgICAg
ICAgIGlmIChjaDEgPT09IGNoMiAmJiAoJystPD4mfCcuaW5kZXhPZihjaDEpID49IDApKSB7Cisg
ICAgICAgICAgICBpbmRleCArPSAyOworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
ICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLAorICAgICAgICAgICAgICAgIHZhbHVlOiBjaDEg
KyBjaDIsCisgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwKKyAgICAgICAg
ICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKKyAgICAgICAgICAgICAgICByYW5nZTogW3N0
YXJ0LCBpbmRleF0KKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2gx
ID09PSAnPScgJiYgY2gyID09PSAnPicpIHsKKyAgICAgICAgICAgIGluZGV4ICs9IDI7CisgICAg
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3Is
CisgICAgICAgICAgICAgICAgdmFsdWU6ICc9PicsCisgICAgICAgICAgICAgICAgbGluZU51bWJl
cjogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKKyAg
ICAgICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF0KKyAgICAgICAgICAgIH07CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoJzw+PSErLSolJnxeLycuaW5kZXhPZihjaDEpID49IDApIHsK
KyAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAg
ICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsCisgICAgICAgICAgICAgICAgdmFsdWU6IGNoMSwK
KyAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAg
IGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAgICAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGlu
ZGV4XQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjaDEgPT09ICcu
JykgeworICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAg
ICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvciwKKyAgICAgICAgICAgICAgICB2YWx1ZTog
Y2gxLAorICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCisgICAgICAgICAg
ICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAgICAgICAgICAgcmFuZ2U6IFtzdGFy
dCwgaW5kZXhdCisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgdGhyb3dFcnJv
cih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgIH0KKworICAg
IC8vIDcuOC4zIE51bWVyaWMgTGl0ZXJhbHMKKworICAgIGZ1bmN0aW9uIHNjYW5IZXhMaXRlcmFs
KHN0YXJ0KSB7CisgICAgICAgIHZhciBudW1iZXIgPSAnJzsKKworICAgICAgICB3aGlsZSAoaW5k
ZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGlmICghaXNIZXhEaWdpdChzb3VyY2VbaW5kZXhd
KSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
bnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChudW1i
ZXIubGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5V
bmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNJ
ZGVudGlmaWVyU3RhcnQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkgeworICAgICAgICAgICAg
dGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHR5cGU6IFRva2VuLk51bWVy
aWNMaXRlcmFsLAorICAgICAgICAgICAgdmFsdWU6IHBhcnNlSW50KCcweCcgKyBudW1iZXIsIDE2
KSwKKyAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICBsaW5l
U3RhcnQ6IGxpbmVTdGFydCwKKyAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XQorICAg
ICAgICB9OworICAgIH0KKworICAgIGZ1bmN0aW9uIHNjYW5PY3RhbExpdGVyYWwocHJlZml4LCBz
dGFydCkgeworICAgICAgICB2YXIgbnVtYmVyLCBvY3RhbDsKKworICAgICAgICBpZiAoaXNPY3Rh
bERpZ2l0KHByZWZpeCkpIHsKKyAgICAgICAgICAgIG9jdGFsID0gdHJ1ZTsKKyAgICAgICAgICAg
IG51bWJlciA9ICcwJyArIHNvdXJjZVtpbmRleCsrXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIG9jdGFsID0gZmFsc2U7CisgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAg
bnVtYmVyID0gJyc7CisgICAgICAgIH0KKworICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgp
IHsKKyAgICAgICAgICAgIGlmICghaXNPY3RhbERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBudW1iZXIgKz0g
c291cmNlW2luZGV4KytdOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFvY3RhbCAmJiBudW1i
ZXIubGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgICAvLyBvbmx5IDBvIG9yIDBPCisgICAgICAg
ICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoc291cmNlLmNoYXJD
b2RlQXQoaW5kZXgpKSB8fCBpc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkp
KSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4s
ICdJTExFR0FMJyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4geworICAgICAgICAgICAg
dHlwZTogVG9rZW4uTnVtZXJpY0xpdGVyYWwsCisgICAgICAgICAgICB2YWx1ZTogcGFyc2VJbnQo
bnVtYmVyLCA4KSwKKyAgICAgICAgICAgIG9jdGFsOiBvY3RhbCwKKyAgICAgICAgICAgIGxpbmVO
dW1iZXI6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKKyAg
ICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XQorICAgICAgICB9OworICAgIH0KKworICAg
IGZ1bmN0aW9uIHNjYW5OdW1lcmljTGl0ZXJhbCgpIHsKKyAgICAgICAgdmFyIG51bWJlciwgc3Rh
cnQsIGNoLCBvY3RhbDsKKworICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAgICAgIGFz
c2VydChpc0RlY2ltYWxEaWdpdChjaC5jaGFyQ29kZUF0KDApKSB8fCAoY2ggPT09ICcuJyksCisg
ICAgICAgICAgICAnTnVtZXJpYyBsaXRlcmFsIG11c3Qgc3RhcnQgd2l0aCBhIGRlY2ltYWwgZGln
aXQgb3IgYSBkZWNpbWFsIHBvaW50Jyk7CisKKyAgICAgICAgc3RhcnQgPSBpbmRleDsKKyAgICAg
ICAgbnVtYmVyID0gJyc7CisgICAgICAgIGlmIChjaCAhPT0gJy4nKSB7CisgICAgICAgICAgICBu
dW1iZXIgPSBzb3VyY2VbaW5kZXgrK107CisgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07
CisKKyAgICAgICAgICAgIC8vIEhleCBudW1iZXIgc3RhcnRzIHdpdGggJzB4Jy4KKyAgICAgICAg
ICAgIC8vIE9jdGFsIG51bWJlciBzdGFydHMgd2l0aCAnMCcuCisgICAgICAgICAgICAvLyBPY3Rh
bCBudW1iZXIgaW4gRVM2IHN0YXJ0cyB3aXRoICcwbycuCisgICAgICAgICAgICAvLyBCaW5hcnkg
bnVtYmVyIGluIEVTNiBzdGFydHMgd2l0aCAnMGInLgorICAgICAgICAgICAgaWYgKG51bWJlciA9
PT0gJzAnKSB7CisgICAgICAgICAgICAgICAgaWYgKGNoID09PSAneCcgfHwgY2ggPT09ICdYJykg
eworICAgICAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gc2NhbkhleExpdGVyYWwoc3RhcnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBpZiAoY2ggPT09ICdiJyB8fCBjaCA9PT0gJ0InKSB7CisgICAgICAgICAgICAgICAgICAg
ICsraW5kZXg7CisgICAgICAgICAgICAgICAgICAgIG51bWJlciA9ICcnOworCisgICAgICAgICAg
ICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoICE9
PSAnMCcgJiYgY2ggIT09ICcxJykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbnVt
YmVyICs9IHNvdXJjZVtpbmRleCsrXTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgIGlmIChudW1iZXIubGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBvbmx5IDBiIG9yIDBCCisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vy
cm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGgpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KGNoKSB8fCBpc0Rl
Y2ltYWxEaWdpdChjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9y
KHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLk51bWVyaWNMaXRl
cmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHBhcnNlSW50KG51bWJlciwgMiks
CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAgICAgICAgICAg
ICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF0KKyAgICAgICAgICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGNoID09PSAnbycgfHwgY2ggPT09
ICdPJyB8fCBpc09jdGFsRGlnaXQoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBz
Y2FuT2N0YWxMaXRlcmFsKGNoLCBzdGFydCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIC8vIGRlY2ltYWwgbnVtYmVyIHN0YXJ0cyB3aXRoICcwJyBzdWNoIGFzICcwOScgaXMg
aWxsZWdhbC4KKyAgICAgICAgICAgICAgICBpZiAoY2ggJiYgaXNEZWNpbWFsRGlnaXQoY2guY2hh
ckNvZGVBdCgwKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2Fn
ZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgd2hpbGUgKGlzRGVjaW1hbERpZ2l0KHNvdXJjZS5jaGFy
Q29kZUF0KGluZGV4KSkpIHsKKyAgICAgICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4
KytdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGNoID09PSAnLicpIHsKKyAgICAgICAgICAgIG51bWJlciAr
PSBzb3VyY2VbaW5kZXgrK107CisgICAgICAgICAgICB3aGlsZSAoaXNEZWNpbWFsRGlnaXQoc291
cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkgeworICAgICAgICAgICAgICAgIG51bWJlciArPSBzb3Vy
Y2VbaW5kZXgrK107CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRl
eF07CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2ggPT09ICdlJyB8fCBjaCA9PT0gJ0UnKSB7
CisgICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdOworCisgICAgICAgICAgICBj
aCA9IHNvdXJjZVtpbmRleF07CisgICAgICAgICAgICBpZiAoY2ggPT09ICcrJyB8fCBjaCA9PT0g
Jy0nKSB7CisgICAgICAgICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVB
dChpbmRleCkpKSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKGlzRGVjaW1hbERpZ2l0KHNvdXJj
ZS5jaGFyQ29kZUF0KGluZGV4KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbnVtYmVyICs9IHNv
dXJjZVtpbmRleCsrXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwg
J0lMTEVHQUwnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0lk
ZW50aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7CisgICAgICAgICAgICB0
aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgdHlwZTogVG9rZW4uTnVtZXJp
Y0xpdGVyYWwsCisgICAgICAgICAgICB2YWx1ZTogcGFyc2VGbG9hdChudW1iZXIpLAorICAgICAg
ICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwKKyAgICAgICAgICAgIGxpbmVTdGFydDogbGlu
ZVN0YXJ0LAorICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdCisgICAgICAgIH07Cisg
ICAgfQorCisgICAgLy8gNy44LjQgU3RyaW5nIExpdGVyYWxzCisKKyAgICBmdW5jdGlvbiBzY2Fu
U3RyaW5nTGl0ZXJhbCgpIHsKKyAgICAgICAgdmFyIHN0ciA9ICcnLCBxdW90ZSwgc3RhcnQsIGNo
LCBjb2RlLCB1bmVzY2FwZWQsIHJlc3RvcmUsIG9jdGFsID0gZmFsc2U7CisKKyAgICAgICAgcXVv
dGUgPSBzb3VyY2VbaW5kZXhdOworICAgICAgICBhc3NlcnQoKHF1b3RlID09PSAnXCcnIHx8IHF1
b3RlID09PSAnIicpLAorICAgICAgICAgICAgJ1N0cmluZyBsaXRlcmFsIG11c3Qgc3RhcnRzIHdp
dGggYSBxdW90ZScpOworCisgICAgICAgIHN0YXJ0ID0gaW5kZXg7CisgICAgICAgICsraW5kZXg7
CisKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBjaCA9IHNv
dXJjZVtpbmRleCsrXTsKKworICAgICAgICAgICAgaWYgKGNoID09PSBxdW90ZSkgeworICAgICAg
ICAgICAgICAgIHF1b3RlID0gJyc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKGNoID09PSAnXFwnKSB7CisgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2Vb
aW5kZXgrK107CisgICAgICAgICAgICAgICAgaWYgKCFjaCB8fCAhaXNMaW5lVGVybWluYXRvcihj
aC5jaGFyQ29kZUF0KDApKSkgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNoKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgJ24nOgorICAgICAgICAgICAgICAgICAgICAgICAgc3Ry
ICs9ICdcbic7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSAncic6CisgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xyJzsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlICd0
JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXHQnOworICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3UnOgorICAgICAgICAg
ICAgICAgICAgICBjYXNlICd4JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2Vb
aW5kZXhdID09PSAneycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArK2luZGV4Owor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBzY2FuVW5pY29kZUNvZGVQb2ludEVz
Y2FwZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXN0b3JlID0gaW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5lc2NhcGVkID0gc2NhbkhleEVzY2FwZShjaCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHVuZXNjYXBlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHIgKz0gdW5lc2NhcGVkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gcmVzdG9yZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IGNoOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlICdiJzoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ciArPSAnXGInOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgJ2YnOgorICAgICAgICAgICAgICAgICAgICAgICAgc3Ry
ICs9ICdcZic7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSAndic6CisgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1x4MEInOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc09jdGFsRGlnaXQoY2gpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9ICcwMTIzNDU2NycuaW5kZXhPZihjaCk7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBcMCBpcyBub3Qgb2N0YWwgZXNjYXBl
IHNlcXVlbmNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGUgIT09IDApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2N0YWwgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChp
bmRleCA8IGxlbmd0aCAmJiBpc09jdGFsRGlnaXQoc291cmNlW2luZGV4XSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb2N0YWwgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb2RlID0gY29kZSAqIDggKyAnMDEyMzQ1NjcnLmluZGV4T2Yoc291cmNl
W2luZGV4KytdKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAzIGRpZ2l0
cyBhcmUgb25seSBhbGxvd2VkIHdoZW4gc3RyaW5nIHN0YXJ0cworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyB3aXRoIDAsIDEsIDIsIDMKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCcwMTIzJy5pbmRleE9mKGNoKSA+PSAwICYmCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPCBsZW5ndGggJiYKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpc09jdGFsRGlnaXQoc291cmNlW2luZGV4XSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBjb2RlICogOCArICcw
MTIzNDU2NycuaW5kZXhPZihzb3VyY2VbaW5kZXgrK10pOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHIgKz0gY2g7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICsrbGluZU51bWJlcjsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGNoID09PSAgJ1xyJyAmJiBzb3VyY2VbaW5kZXhdID09PSAnXG4nKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoLmNo
YXJDb2RlQXQoMCkpKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIHN0ciArPSBjaDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGlmIChxdW90ZSAhPT0gJycpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Io
e30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICB0eXBlOiBUb2tlbi5TdHJpbmdMaXRlcmFsLAor
ICAgICAgICAgICAgdmFsdWU6IHN0ciwKKyAgICAgICAgICAgIG9jdGFsOiBvY3RhbCwKKyAgICAg
ICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICBsaW5lU3RhcnQ6IGxp
bmVTdGFydCwKKyAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XQorICAgICAgICB9Owor
ICAgIH0KKworICAgIGZ1bmN0aW9uIHNjYW5UZW1wbGF0ZSgpIHsKKyAgICAgICAgdmFyIGNvb2tl
ZCA9ICcnLCBjaCwgc3RhcnQsIHRlcm1pbmF0ZWQsIHRhaWwsIHJlc3RvcmUsIHVuZXNjYXBlZCwg
Y29kZSwgb2N0YWw7CisKKyAgICAgICAgdGVybWluYXRlZCA9IGZhbHNlOworICAgICAgICB0YWls
ID0gZmFsc2U7CisgICAgICAgIHN0YXJ0ID0gaW5kZXg7CisKKyAgICAgICAgKytpbmRleDsKKwor
ICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGNoID0gc291cmNl
W2luZGV4KytdOworICAgICAgICAgICAgaWYgKGNoID09PSAnYCcpIHsKKyAgICAgICAgICAgICAg
ICB0YWlsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09ICckJykgewor
ICAgICAgICAgICAgICAgIGlmIChzb3VyY2VbaW5kZXhdID09PSAneycpIHsKKyAgICAgICAgICAg
ICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgdGVybWluYXRlZCA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBjb29rZWQgKz0gY2g7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAnXFwn
KSB7CisgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107CisgICAgICAgICAgICAg
ICAgaWYgKCFpc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7CisgICAgICAgICAg
ICAgICAgICAgIHN3aXRjaCAoY2gpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAnbic6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjb29rZWQgKz0gJ1xuJzsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlICdyJzoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvb2tlZCArPSAnXHInOworICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3QnOgorICAgICAgICAgICAgICAgICAgICAg
ICAgY29va2VkICs9ICdcdCc7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSAndSc6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3gnOgor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZVtpbmRleF0gPT09ICd7JykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29va2VkICs9IHNjYW5Vbmljb2RlQ29kZVBvaW50RXNjYXBlKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Rv
cmUgPSBpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmVzY2FwZWQgPSBzY2Fu
SGV4RXNjYXBlKGNoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5lc2NhcGVk
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCArPSB1bmVzY2FwZWQ7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW5kZXggPSByZXN0b3JlOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb29rZWQgKz0gY2g7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgJ2InOgorICAgICAgICAgICAgICAgICAgICAgICAgY29v
a2VkICs9ICdcYic7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSAnZic6CisgICAgICAgICAgICAgICAgICAgICAgICBjb29rZWQgKz0gJ1xm
JzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBj
YXNlICd2JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCArPSAnXHYnOworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc09jdGFsRGlnaXQoY2gpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29kZSA9ICcwMTIzNDU2NycuaW5kZXhPZihjaCk7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBcMCBpcyBub3Qgb2N0YWwgZXNjYXBlIHNlcXVl
bmNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGUgIT09IDApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb2N0YWwgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA8
IGxlbmd0aCAmJiBpc09jdGFsRGlnaXQoc291cmNlW2luZGV4XSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb2N0YWwgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb2RlID0gY29kZSAqIDggKyAnMDEyMzQ1NjcnLmluZGV4T2Yoc291cmNlW2luZGV4
KytdKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAzIGRpZ2l0cyBhcmUg
b25seSBhbGxvd2VkIHdoZW4gc3RyaW5nIHN0YXJ0cworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyB3aXRoIDAsIDEsIDIsIDMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCcwMTIzJy5pbmRleE9mKGNoKSA+PSAwICYmCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW5kZXggPCBsZW5ndGggJiYKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpc09jdGFsRGlnaXQoc291cmNlW2luZGV4XSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBjb2RlICogOCArICcwMTIzNDU2
NycuaW5kZXhPZihzb3VyY2VbaW5kZXgrK10pOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvb2tlZCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29r
ZWQgKz0gY2g7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICsrbGluZU51bWJlcjsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGNoID09PSAgJ1xyJyAmJiBzb3VyY2VbaW5kZXhdID09PSAnXG4nKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoLmNo
YXJDb2RlQXQoMCkpKSB7CisgICAgICAgICAgICAgICAgKytsaW5lTnVtYmVyOworICAgICAgICAg
ICAgICAgIGlmIChjaCA9PT0gICdccicgJiYgc291cmNlW2luZGV4XSA9PT0gJ1xuJykgeworICAg
ICAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY29va2VkICs9IGNoOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKCF0ZXJtaW5hdGVkKSB7CisgICAgICAgICAgICB0aHJv
d0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgICAg
IH0KKworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgdHlwZTogVG9rZW4uVGVtcGxhdGUs
CisgICAgICAgICAgICB2YWx1ZTogeworICAgICAgICAgICAgICAgIGNvb2tlZDogY29va2VkLAor
ICAgICAgICAgICAgICAgIHJhdzogc291cmNlLnNsaWNlKHN0YXJ0ICsgMSwgaW5kZXggLSAoKHRh
aWwpID8gMSA6IDIpKQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHRhaWw6IHRhaWwsCisg
ICAgICAgICAgICBvY3RhbDogb2N0YWwsCisgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVt
YmVyLAorICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAgICAgICByYW5n
ZTogW3N0YXJ0LCBpbmRleF0KKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzY2Fu
VGVtcGxhdGVFbGVtZW50KG9wdGlvbikgeworICAgICAgICB2YXIgc3RhcnRzV2l0aCwgdGVtcGxh
dGU7CisKKyAgICAgICAgbG9va2FoZWFkID0gbnVsbDsKKyAgICAgICAgc2tpcENvbW1lbnQoKTsK
KworICAgICAgICBzdGFydHNXaXRoID0gKG9wdGlvbi5oZWFkKSA/ICdgJyA6ICd9JzsKKworICAg
ICAgICBpZiAoc291cmNlW2luZGV4XSAhPT0gc3RhcnRzV2l0aCkgeworICAgICAgICAgICAgdGhy
b3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAg
ICB9CisKKyAgICAgICAgdGVtcGxhdGUgPSBzY2FuVGVtcGxhdGUoKTsKKworICAgICAgICBwZWVr
KCk7CisKKyAgICAgICAgcmV0dXJuIHRlbXBsYXRlOworICAgIH0KKworICAgIGZ1bmN0aW9uIHNj
YW5SZWdFeHAoKSB7CisgICAgICAgIHZhciBzdHIsIGNoLCBzdGFydCwgcGF0dGVybiwgZmxhZ3Ms
IHZhbHVlLCBjbGFzc01hcmtlciA9IGZhbHNlLCByZXN0b3JlLCB0ZXJtaW5hdGVkID0gZmFsc2U7
CisKKyAgICAgICAgbG9va2FoZWFkID0gbnVsbDsKKyAgICAgICAgc2tpcENvbW1lbnQoKTsKKwor
ICAgICAgICBzdGFydCA9IGluZGV4OworICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAg
ICAgIGFzc2VydChjaCA9PT0gJy8nLCAnUmVndWxhciBleHByZXNzaW9uIGxpdGVyYWwgbXVzdCBz
dGFydCB3aXRoIGEgc2xhc2gnKTsKKyAgICAgICAgc3RyID0gc291cmNlW2luZGV4KytdOworCisg
ICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgY2ggPSBzb3VyY2Vb
aW5kZXgrK107CisgICAgICAgICAgICBzdHIgKz0gY2g7CisgICAgICAgICAgICBpZiAoY2xhc3NN
YXJrZXIpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICddJykgeworICAgICAgICAgICAg
ICAgICAgICBjbGFzc01hcmtlciA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGNoID09PSAnXFwnKSB7CisgICAgICAg
ICAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4KytdOworICAgICAgICAgICAgICAgICAgICAv
LyBFQ01BLTI2MiA3LjguNQorICAgICAgICAgICAgICAgICAgICBpZiAoaXNMaW5lVGVybWluYXRv
cihjaC5jaGFyQ29kZUF0KDApKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJv
cih7fSwgTWVzc2FnZXMuVW50ZXJtaW5hdGVkUmVnRXhwKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBzdHIgKz0gY2g7CisgICAgICAgICAgICAgICAgfSBlbHNl
IGlmIChjaCA9PT0gJy8nKSB7CisgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZWQgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KGNoID09PSAnWycpIHsKKyAgICAgICAgICAgICAgICAgICAgY2xhc3NNYXJrZXIgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0
KDApKSkgeworICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbnRl
cm1pbmF0ZWRSZWdFeHApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIGlmICghdGVybWluYXRlZCkgeworICAgICAgICAgICAgdGhyb3dFcnJv
cih7fSwgTWVzc2FnZXMuVW50ZXJtaW5hdGVkUmVnRXhwKTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIEV4Y2x1ZGUgbGVhZGluZyBhbmQgdHJhaWxpbmcgc2xhc2guCisgICAgICAgIHBhdHRlcm4g
PSBzdHIuc3Vic3RyKDEsIHN0ci5sZW5ndGggLSAyKTsKKworICAgICAgICBmbGFncyA9ICcnOwor
ICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGNoID0gc291cmNl
W2luZGV4XTsKKyAgICAgICAgICAgIGlmICghaXNJZGVudGlmaWVyUGFydChjaC5jaGFyQ29kZUF0
KDApKSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICArK2luZGV4OworICAgICAgICAgICAgaWYgKGNoID09PSAnXFwnICYmIGluZGV4IDwgbGVu
Z3RoKSB7CisgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICAgICAg
ICAgIGlmIChjaCA9PT0gJ3UnKSB7CisgICAgICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAg
ICAgICAgICAgICAgICAgIHJlc3RvcmUgPSBpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgY2gg
PSBzY2FuSGV4RXNjYXBlKCd1Jyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjaCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgKz0gY2g7CisgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKHN0ciArPSAnXFx1JzsgcmVzdG9yZSA8IGluZGV4OyArK3Jlc3RvcmUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gc291cmNlW3Jlc3RvcmVdOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaW5kZXggPSByZXN0b3JlOworICAgICAgICAgICAgICAgICAgICAgICAg
ZmxhZ3MgKz0gJ3UnOworICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcXHUnOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgc3RyICs9ICdcXCc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBmbGFncyArPSBjaDsKKyAgICAgICAgICAgICAgICBzdHIg
Kz0gY2g7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB0cnkgeworICAgICAg
ICAgICAgdmFsdWUgPSBuZXcgUmVnRXhwKHBhdHRlcm4sIGZsYWdzKTsKKyAgICAgICAgfSBjYXRj
aCAoZSkgeworICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSW52YWxpZFJlZ0V4
cCk7CisgICAgICAgIH0KKworICAgICAgICBwZWVrKCk7CisKKworICAgICAgICBpZiAoZXh0cmEu
dG9rZW5pemUpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTog
VG9rZW4uUmVndWxhckV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLAor
ICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAg
bGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5k
ZXhdCisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgICAgIHJldHVybiB7CisgICAgICAg
ICAgICBsaXRlcmFsOiBzdHIsCisgICAgICAgICAgICB2YWx1ZTogdmFsdWUsCisgICAgICAgICAg
ICByYW5nZTogW3N0YXJ0LCBpbmRleF0KKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlv
biBpc0lkZW50aWZpZXJOYW1lKHRva2VuKSB7CisgICAgICAgIHJldHVybiB0b2tlbi50eXBlID09
PSBUb2tlbi5JZGVudGlmaWVyIHx8CisgICAgICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbi5L
ZXl3b3JkIHx8CisgICAgICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbi5Cb29sZWFuTGl0ZXJh
bCB8fAorICAgICAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW4uTnVsbExpdGVyYWw7CisgICAg
fQorCisgICAgZnVuY3Rpb24gYWR2YW5jZVNsYXNoKCkgeworICAgICAgICB2YXIgcHJldlRva2Vu
LAorICAgICAgICAgICAgY2hlY2tUb2tlbjsKKyAgICAgICAgLy8gVXNpbmcgdGhlIGZvbGxvd2lu
ZyBhbGdvcml0aG06CisgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3N3ZWV0
LmpzL3dpa2kvZGVzaWduCisgICAgICAgIHByZXZUb2tlbiA9IGV4dHJhLnRva2Vuc1tleHRyYS50
b2tlbnMubGVuZ3RoIC0gMV07CisgICAgICAgIGlmICghcHJldlRva2VuKSB7CisgICAgICAgICAg
ICAvLyBOb3RoaW5nIGJlZm9yZSB0aGF0OiBpdCBjYW5ub3QgYmUgYSBkaXZpc2lvbi4KKyAgICAg
ICAgICAgIHJldHVybiBzY2FuUmVnRXhwKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHByZXZU
b2tlbi50eXBlID09PSAiUHVuY3R1YXRvciIpIHsKKyAgICAgICAgICAgIGlmIChwcmV2VG9rZW4u
dmFsdWUgPT09ICIpIikgeworICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4gPSBleHRyYS50b2tl
bnNbZXh0cmEub3BlblBhcmVuVG9rZW4gLSAxXTsKKyAgICAgICAgICAgICAgICBpZiAoY2hlY2tU
b2tlbiAmJgorICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tUb2tlbi50eXBlID09PSAiS2V5
d29yZCIgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIChjaGVja1Rva2VuLnZhbHVlID09PSAi
aWYiIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tUb2tlbi52YWx1ZSA9PT0gIndo
aWxlIiB8fAorICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4udmFsdWUgPT09ICJm
b3IiIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tUb2tlbi52YWx1ZSA9PT0gIndp
dGgiKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NhblJlZ0V4cCgpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwcmV2VG9rZW4udmFsdWUgPT09ICJ9Iikgewor
ICAgICAgICAgICAgICAgIC8vIERpdmlkaW5nIGEgZnVuY3Rpb24gYnkgYW55dGhpbmcgbWFrZXMg
bGl0dGxlIHNlbnNlLAorICAgICAgICAgICAgICAgIC8vIGJ1dCB3ZSBoYXZlIHRvIGNoZWNrIGZv
ciB0aGF0LgorICAgICAgICAgICAgICAgIGlmIChleHRyYS50b2tlbnNbZXh0cmEub3BlbkN1cmx5
VG9rZW4gLSAzXSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEudG9rZW5zW2V4dHJh
Lm9wZW5DdXJseVRva2VuIC0gM10udHlwZSA9PT0gIktleXdvcmQiKSB7CisgICAgICAgICAgICAg
ICAgICAgIC8vIEFub255bW91cyBmdW5jdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgY2hlY2tU
b2tlbiA9IGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlUb2tlbiAtIDRdOworICAgICAgICAg
ICAgICAgICAgICBpZiAoIWNoZWNrVG9rZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBzY2FuUHVuY3R1YXRvcigpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmIChleHRyYS50b2tlbnNbZXh0cmEub3BlbkN1cmx5VG9rZW4gLSA0XSAm
JgorICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5DdXJseVRv
a2VuIC0gNF0udHlwZSA9PT0gIktleXdvcmQiKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIE5h
bWVkIGZ1bmN0aW9uLgorICAgICAgICAgICAgICAgICAgICBjaGVja1Rva2VuID0gZXh0cmEudG9r
ZW5zW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gNV07CisgICAgICAgICAgICAgICAgICAgIGlmICgh
Y2hlY2tUb2tlbikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5SZWdFeHAo
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAvLyBjaGVja1Rva2VuIGRldGVybWluZXMgd2hldGhlciB0aGUg
ZnVuY3Rpb24gaXMKKyAgICAgICAgICAgICAgICAvLyBhIGRlY2xhcmF0aW9uIG9yIGFuIGV4cHJl
c3Npb24uCisgICAgICAgICAgICAgICAgaWYgKEZuRXhwclRva2Vucy5pbmRleE9mKGNoZWNrVG9r
ZW4udmFsdWUpID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSXQgaXMgYW4gZXhwcmVz
c2lvbi4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIEl0IGlzIGEgZGVjbGFyYXRpb24uCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5SZWdFeHAoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiBzY2FuUmVnRXhwKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHByZXZU
b2tlbi50eXBlID09PSAiS2V5d29yZCIpIHsKKyAgICAgICAgICAgIHJldHVybiBzY2FuUmVnRXhw
KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7CisgICAgfQor
CisgICAgZnVuY3Rpb24gYWR2YW5jZSgpIHsKKyAgICAgICAgdmFyIGNoOworCisgICAgICAgIGlm
IChzdGF0ZS5pblhKU0NoaWxkKSB7CisgICAgICAgICAgICByZXR1cm4gYWR2YW5jZVhKU0NoaWxk
KCk7CisgICAgICAgIH0KKworICAgICAgICBza2lwQ29tbWVudCgpOworCisgICAgICAgIGlmIChp
bmRleCA+PSBsZW5ndGgpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAg
dHlwZTogVG9rZW4uRU9GLAorICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIs
CisgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAgICAgICAgICAg
cmFuZ2U6IFtpbmRleCwgaW5kZXhdCisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAg
ICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7CisKKyAgICAgICAgLy8gVmVyeSBjb21t
b246ICggYW5kICkgYW5kIDsKKyAgICAgICAgaWYgKGNoID09PSA0MCB8fCBjaCA9PT0gNDEgfHwg
Y2ggPT09IDU4KSB7CisgICAgICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIFN0cmluZyBsaXRlcmFsIHN0YXJ0cyB3aXRoIHNpbmdsZSBxdW90
ZSAoIzM5KSBvciBkb3VibGUgcXVvdGUgKCMzNCkuCisgICAgICAgIGlmIChjaCA9PT0gMzkgfHwg
Y2ggPT09IDM0KSB7CisgICAgICAgICAgICBpZiAoc3RhdGUuaW5YSlNUYWcpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gc2NhblhKU1N0cmluZ0xpdGVyYWwoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiBzY2FuU3RyaW5nTGl0ZXJhbCgpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKHN0YXRlLmluWEpTVGFnICYmIGlzWEpTSWRlbnRpZmllclN0YXJ0KGNoKSkgeworICAg
ICAgICAgICAgcmV0dXJuIHNjYW5YSlNJZGVudGlmaWVyKCk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoY2ggPT09IDk2KSB7CisgICAgICAgICAgICByZXR1cm4gc2NhblRlbXBsYXRlKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KGNoKSkgeworICAgICAgICAg
ICAgcmV0dXJuIHNjYW5JZGVudGlmaWVyKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBEb3Qg
KC4pIGNoYXIgIzQ2IGNhbiBhbHNvIHN0YXJ0IGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyLCBoZW5j
ZSB0aGUgbmVlZAorICAgICAgICAvLyB0byBjaGVjayB0aGUgbmV4dCBjaGFyYWN0ZXIuCisgICAg
ICAgIGlmIChjaCA9PT0gNDYpIHsKKyAgICAgICAgICAgIGlmIChpc0RlY2ltYWxEaWdpdChzb3Vy
Y2UuY2hhckNvZGVBdChpbmRleCArIDEpKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBzY2Fu
TnVtZXJpY0xpdGVyYWwoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBzY2Fu
UHVuY3R1YXRvcigpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzRGVjaW1hbERpZ2l0KGNo
KSkgeworICAgICAgICAgICAgcmV0dXJuIHNjYW5OdW1lcmljTGl0ZXJhbCgpOworICAgICAgICB9
CisKKyAgICAgICAgLy8gU2xhc2ggKC8pIGNoYXIgIzQ3IGNhbiBhbHNvIHN0YXJ0IGEgcmVnZXgu
CisgICAgICAgIGlmIChleHRyYS50b2tlbml6ZSAmJiBjaCA9PT0gNDcpIHsKKyAgICAgICAgICAg
IHJldHVybiBhZHZhbmNlU2xhc2goKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzY2Fu
UHVuY3R1YXRvcigpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGxleCgpIHsKKyAgICAgICAgdmFy
IHRva2VuOworCisgICAgICAgIHRva2VuID0gbG9va2FoZWFkOworICAgICAgICBpbmRleCA9IHRv
a2VuLnJhbmdlWzFdOworICAgICAgICBsaW5lTnVtYmVyID0gdG9rZW4ubGluZU51bWJlcjsKKyAg
ICAgICAgbGluZVN0YXJ0ID0gdG9rZW4ubGluZVN0YXJ0OworCisgICAgICAgIGxvb2thaGVhZCA9
IGFkdmFuY2UoKTsKKworICAgICAgICBpbmRleCA9IHRva2VuLnJhbmdlWzFdOworICAgICAgICBs
aW5lTnVtYmVyID0gdG9rZW4ubGluZU51bWJlcjsKKyAgICAgICAgbGluZVN0YXJ0ID0gdG9rZW4u
bGluZVN0YXJ0OworCisgICAgICAgIHJldHVybiB0b2tlbjsKKyAgICB9CisKKyAgICBmdW5jdGlv
biBwZWVrKCkgeworICAgICAgICB2YXIgcG9zLCBsaW5lLCBzdGFydDsKKworICAgICAgICBwb3Mg
PSBpbmRleDsKKyAgICAgICAgbGluZSA9IGxpbmVOdW1iZXI7CisgICAgICAgIHN0YXJ0ID0gbGlu
ZVN0YXJ0OworICAgICAgICBsb29rYWhlYWQgPSBhZHZhbmNlKCk7CisgICAgICAgIGluZGV4ID0g
cG9zOworICAgICAgICBsaW5lTnVtYmVyID0gbGluZTsKKyAgICAgICAgbGluZVN0YXJ0ID0gc3Rh
cnQ7CisgICAgfQorCisgICAgZnVuY3Rpb24gbG9va2FoZWFkMigpIHsKKyAgICAgICAgdmFyIGFk
diwgcG9zLCBsaW5lLCBzdGFydCwgcmVzdWx0OworCisgICAgICAgIC8vIElmIHdlIGFyZSBjb2xs
ZWN0aW5nIHRoZSB0b2tlbnMsIGRvbid0IGdyYWIgdGhlIG5leHQgb25lIHlldC4KKyAgICAgICAg
YWR2ID0gKHR5cGVvZiBleHRyYS5hZHZhbmNlID09PSAnZnVuY3Rpb24nKSA/IGV4dHJhLmFkdmFu
Y2UgOiBhZHZhbmNlOworCisgICAgICAgIHBvcyA9IGluZGV4OworICAgICAgICBsaW5lID0gbGlu
ZU51bWJlcjsKKyAgICAgICAgc3RhcnQgPSBsaW5lU3RhcnQ7CisKKyAgICAgICAgLy8gU2NhbiBm
b3IgdGhlIG5leHQgaW1tZWRpYXRlIHRva2VuLgorICAgICAgICBpZiAobG9va2FoZWFkID09PSBu
dWxsKSB7CisgICAgICAgICAgICBsb29rYWhlYWQgPSBhZHYoKTsKKyAgICAgICAgfQorICAgICAg
ICBpbmRleCA9IGxvb2thaGVhZC5yYW5nZVsxXTsKKyAgICAgICAgbGluZU51bWJlciA9IGxvb2th
aGVhZC5saW5lTnVtYmVyOworICAgICAgICBsaW5lU3RhcnQgPSBsb29rYWhlYWQubGluZVN0YXJ0
OworCisgICAgICAgIC8vIEdyYWIgdGhlIHRva2VuIHJpZ2h0IGFmdGVyLgorICAgICAgICByZXN1
bHQgPSBhZHYoKTsKKyAgICAgICAgaW5kZXggPSBwb3M7CisgICAgICAgIGxpbmVOdW1iZXIgPSBs
aW5lOworICAgICAgICBsaW5lU3RhcnQgPSBzdGFydDsKKworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKworICAgIFN5bnRheFRyZWVEZWxlZ2F0ZSA9IHsKKworICAgICAgICBuYW1lOiAn
U3ludGF4VHJlZScsCisKKyAgICAgICAgcG9zdFByb2Nlc3M6IGZ1bmN0aW9uIChub2RlKSB7Cisg
ICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVBcnJh
eUV4cHJlc3Npb246IGZ1bmN0aW9uIChlbGVtZW50cykgeworICAgICAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguQXJyYXlFeHByZXNzaW9uLAorICAgICAgICAg
ICAgICAgIGVsZW1lbnRzOiBlbGVtZW50cworICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKwor
ICAgICAgICBjcmVhdGVBc3NpZ25tZW50RXhwcmVzc2lvbjogZnVuY3Rpb24gKG9wZXJhdG9yLCBs
ZWZ0LCByaWdodCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBl
OiBTeW50YXguQXNzaWdubWVudEV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgb3BlcmF0b3I6
IG9wZXJhdG9yLAorICAgICAgICAgICAgICAgIGxlZnQ6IGxlZnQsCisgICAgICAgICAgICAgICAg
cmlnaHQ6IHJpZ2h0CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0
ZUJpbmFyeUV4cHJlc3Npb246IGZ1bmN0aW9uIChvcGVyYXRvciwgbGVmdCwgcmlnaHQpIHsKKyAg
ICAgICAgICAgIHZhciB0eXBlID0gKG9wZXJhdG9yID09PSAnfHwnIHx8IG9wZXJhdG9yID09PSAn
JiYnKSA/IFN5bnRheC5Mb2dpY2FsRXhwcmVzc2lvbiA6CisgICAgICAgICAgICAgICAgICAgICAg
ICBTeW50YXguQmluYXJ5RXhwcmVzc2lvbjsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAg
ICAgICAgICAgdHlwZTogdHlwZSwKKyAgICAgICAgICAgICAgICBvcGVyYXRvcjogb3BlcmF0b3Is
CisgICAgICAgICAgICAgICAgbGVmdDogbGVmdCwKKyAgICAgICAgICAgICAgICByaWdodDogcmln
aHQKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlQmxvY2tTdGF0
ZW1lbnQ6IGZ1bmN0aW9uIChib2R5KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAg
ICAgICAgIHR5cGU6IFN5bnRheC5CbG9ja1N0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBib2R5
OiBib2R5CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZUJyZWFr
U3RhdGVtZW50OiBmdW5jdGlvbiAobGFiZWwpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAg
ICAgICAgICAgICAgdHlwZTogU3ludGF4LkJyZWFrU3RhdGVtZW50LAorICAgICAgICAgICAgICAg
IGxhYmVsOiBsYWJlbAorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVh
dGVDYWxsRXhwcmVzc2lvbjogZnVuY3Rpb24gKGNhbGxlZSwgYXJncykgeworICAgICAgICAgICAg
cmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguQ2FsbEV4cHJlc3Npb24sCisg
ICAgICAgICAgICAgICAgY2FsbGVlOiBjYWxsZWUsCisgICAgICAgICAgICAgICAgJ2FyZ3VtZW50
cyc6IGFyZ3MKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlQ2F0
Y2hDbGF1c2U6IGZ1bmN0aW9uIChwYXJhbSwgYm9keSkgeworICAgICAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguQ2F0Y2hDbGF1c2UsCisgICAgICAgICAgICAg
ICAgcGFyYW06IHBhcmFtLAorICAgICAgICAgICAgICAgIGJvZHk6IGJvZHkKKyAgICAgICAgICAg
IH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlQ29uZGl0aW9uYWxFeHByZXNzaW9uOiBm
dW5jdGlvbiAodGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKSB7CisgICAgICAgICAgICByZXR1
cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Db25kaXRpb25hbEV4cHJlc3Npb24s
CisgICAgICAgICAgICAgICAgdGVzdDogdGVzdCwKKyAgICAgICAgICAgICAgICBjb25zZXF1ZW50
OiBjb25zZXF1ZW50LAorICAgICAgICAgICAgICAgIGFsdGVybmF0ZTogYWx0ZXJuYXRlCisgICAg
ICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50
OiBmdW5jdGlvbiAobGFiZWwpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAg
ICAgdHlwZTogU3ludGF4LkNvbnRpbnVlU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGxhYmVs
OiBsYWJlbAorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVEZWJ1
Z2dlclN0YXRlbWVudDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAg
ICAgICAgICAgICB0eXBlOiBTeW50YXguRGVidWdnZXJTdGF0ZW1lbnQKKyAgICAgICAgICAgIH07
CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlRG9XaGlsZVN0YXRlbWVudDogZnVuY3Rpb24g
KGJvZHksIHRlc3QpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlw
ZTogU3ludGF4LkRvV2hpbGVTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgYm9keTogYm9keSwK
KyAgICAgICAgICAgICAgICB0ZXN0OiB0ZXN0CisgICAgICAgICAgICB9OworICAgICAgICB9LAor
CisgICAgICAgIGNyZWF0ZUVtcHR5U3RhdGVtZW50OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5FbXB0eVN0YXRlbWVudAor
ICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVFeHByZXNzaW9uU3Rh
dGVtZW50OiBmdW5jdGlvbiAoZXhwcmVzc2lvbikgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgICAgICB0eXBlOiBTeW50YXguRXhwcmVzc2lvblN0YXRlbWVudCwKKyAgICAgICAg
ICAgICAgICBleHByZXNzaW9uOiBleHByZXNzaW9uCisgICAgICAgICAgICB9OworICAgICAgICB9
LAorCisgICAgICAgIGNyZWF0ZUZvclN0YXRlbWVudDogZnVuY3Rpb24gKGluaXQsIHRlc3QsIHVw
ZGF0ZSwgYm9keSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBl
OiBTeW50YXguRm9yU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGluaXQ6IGluaXQsCisgICAg
ICAgICAgICAgICAgdGVzdDogdGVzdCwKKyAgICAgICAgICAgICAgICB1cGRhdGU6IHVwZGF0ZSwK
KyAgICAgICAgICAgICAgICBib2R5OiBib2R5CisgICAgICAgICAgICB9OworICAgICAgICB9LAor
CisgICAgICAgIGNyZWF0ZUZvckluU3RhdGVtZW50OiBmdW5jdGlvbiAobGVmdCwgcmlnaHQsIGJv
ZHkpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4
LkZvckluU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGxlZnQ6IGxlZnQsCisgICAgICAgICAg
ICAgICAgcmlnaHQ6IHJpZ2h0LAorICAgICAgICAgICAgICAgIGJvZHk6IGJvZHksCisgICAgICAg
ICAgICAgICAgZWFjaDogZmFsc2UKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAg
ICAgY3JlYXRlRm9yT2ZTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChsZWZ0LCByaWdodCwgYm9keSkgewor
ICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguRm9yT2ZT
dGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgbGVmdDogbGVmdCwKKyAgICAgICAgICAgICAgICBy
aWdodDogcmlnaHQsCisgICAgICAgICAgICAgICAgYm9keTogYm9keSwKKyAgICAgICAgICAgIH07
CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlRnVuY3Rpb25EZWNsYXJhdGlvbjogZnVuY3Rp
b24gKGlkLCBwYXJhbXMsIGRlZmF1bHRzLCBib2R5LCByZXN0LCBnZW5lcmF0b3IsIGV4cHJlc3Np
b24pIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4
LkZ1bmN0aW9uRGVjbGFyYXRpb24sCisgICAgICAgICAgICAgICAgaWQ6IGlkLAorICAgICAgICAg
ICAgICAgIHBhcmFtczogcGFyYW1zLAorICAgICAgICAgICAgICAgIGRlZmF1bHRzOiBkZWZhdWx0
cywKKyAgICAgICAgICAgICAgICBib2R5OiBib2R5LAorICAgICAgICAgICAgICAgIHJlc3Q6IHJl
c3QsCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yOiBnZW5lcmF0b3IsCisgICAgICAgICAgICAg
ICAgZXhwcmVzc2lvbjogZXhwcmVzc2lvbgorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKwor
ICAgICAgICBjcmVhdGVGdW5jdGlvbkV4cHJlc3Npb246IGZ1bmN0aW9uIChpZCwgcGFyYW1zLCBk
ZWZhdWx0cywgYm9keSwgcmVzdCwgZ2VuZXJhdG9yLCBleHByZXNzaW9uKSB7CisgICAgICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5GdW5jdGlvbkV4cHJlc3Np
b24sCisgICAgICAgICAgICAgICAgaWQ6IGlkLAorICAgICAgICAgICAgICAgIHBhcmFtczogcGFy
YW1zLAorICAgICAgICAgICAgICAgIGRlZmF1bHRzOiBkZWZhdWx0cywKKyAgICAgICAgICAgICAg
ICBib2R5OiBib2R5LAorICAgICAgICAgICAgICAgIHJlc3Q6IHJlc3QsCisgICAgICAgICAgICAg
ICAgZ2VuZXJhdG9yOiBnZW5lcmF0b3IsCisgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhw
cmVzc2lvbgorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVJZGVu
dGlmaWVyOiBmdW5jdGlvbiAobmFtZSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgICAgICB0eXBlOiBTeW50YXguSWRlbnRpZmllciwKKyAgICAgICAgICAgICAgICBuYW1lOiBu
YW1lCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZVhKU0F0dHJp
YnV0ZTogZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7CisgICAgICAgICAgICByZXR1cm4geworICAg
ICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5YSlNBdHRyaWJ1dGUsCisgICAgICAgICAgICAgICAg
bmFtZTogbmFtZSwKKyAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUKKyAgICAgICAgICAgIH07
CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlWEpTSWRlbnRpZmllcjogZnVuY3Rpb24gKG5h
bWUsIG5hbWVzcGFjZSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0
eXBlOiBTeW50YXguWEpTSWRlbnRpZmllciwKKyAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLAor
ICAgICAgICAgICAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlCisgICAgICAgICAgICB9OworICAg
ICAgICB9LAorCisgICAgICAgIGNyZWF0ZVhKU0VsZW1lbnQ6IGZ1bmN0aW9uIChvcGVuaW5nRWxl
bWVudCwgY2xvc2luZ0VsZW1lbnQsIGNoaWxkcmVuKSB7CisgICAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5YSlNFbGVtZW50LAorICAgICAgICAgICAgICAg
IG5hbWU6IG9wZW5pbmdFbGVtZW50Lm5hbWUsCisgICAgICAgICAgICAgICAgc2VsZkNsb3Npbmc6
IG9wZW5pbmdFbGVtZW50LnNlbGZDbG9zaW5nLAorICAgICAgICAgICAgICAgIG9wZW5pbmdFbGVt
ZW50OiBvcGVuaW5nRWxlbWVudCwKKyAgICAgICAgICAgICAgICBjbG9zaW5nRWxlbWVudDogY2xv
c2luZ0VsZW1lbnQsCisgICAgICAgICAgICAgICAgYXR0cmlidXRlczogb3BlbmluZ0VsZW1lbnQu
YXR0cmlidXRlcywKKyAgICAgICAgICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW4KKyAgICAgICAg
ICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlWEpTRW1wdHlFeHByZXNzaW9uOiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6
IFN5bnRheC5YSlNFbXB0eUV4cHJlc3Npb24KKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisK
KyAgICAgICAgY3JlYXRlWEpTRXhwcmVzc2lvbkNvbnRhaW5lcjogZnVuY3Rpb24gKGV4cHJlc3Np
b24pIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4
LlhKU0V4cHJlc3Npb25Db250YWluZXIsCisgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhw
cmVzc2lvbgorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVYSlNP
cGVuaW5nRWxlbWVudDogZnVuY3Rpb24gKG5hbWUsIGF0dHJpYnV0ZXMsIHNlbGZDbG9zaW5nKSB7
CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5YSlNP
cGVuaW5nRWxlbWVudCwKKyAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLAorICAgICAgICAgICAg
ICAgIHNlbGZDbG9zaW5nOiBzZWxmQ2xvc2luZywKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGVz
OiBhdHRyaWJ1dGVzCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0
ZVhKU0Nsb3NpbmdFbGVtZW50OiBmdW5jdGlvbiAobmFtZSkgeworICAgICAgICAgICAgcmV0dXJu
IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguWEpTQ2xvc2luZ0VsZW1lbnQsCisgICAg
ICAgICAgICAgICAgbmFtZTogbmFtZQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAg
ICAgICBjcmVhdGVJZlN0YXRlbWVudDogZnVuY3Rpb24gKHRlc3QsIGNvbnNlcXVlbnQsIGFsdGVy
bmF0ZSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50
YXguSWZTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgdGVzdDogdGVzdCwKKyAgICAgICAgICAg
ICAgICBjb25zZXF1ZW50OiBjb25zZXF1ZW50LAorICAgICAgICAgICAgICAgIGFsdGVybmF0ZTog
YWx0ZXJuYXRlCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZUxh
YmVsZWRTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChsYWJlbCwgYm9keSkgeworICAgICAgICAgICAgcmV0
dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguTGFiZWxlZFN0YXRlbWVudCwKKyAg
ICAgICAgICAgICAgICBsYWJlbDogbGFiZWwsCisgICAgICAgICAgICAgICAgYm9keTogYm9keQor
ICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVMaXRlcmFsOiBmdW5j
dGlvbiAodG9rZW4pIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlw
ZTogU3ludGF4LkxpdGVyYWwsCisgICAgICAgICAgICAgICAgdmFsdWU6IHRva2VuLnZhbHVlLAor
ICAgICAgICAgICAgICAgIHJhdzogc291cmNlLnNsaWNlKHRva2VuLnJhbmdlWzBdLCB0b2tlbi5y
YW5nZVsxXSkKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlTWVt
YmVyRXhwcmVzc2lvbjogZnVuY3Rpb24gKGFjY2Vzc29yLCBvYmplY3QsIHByb3BlcnR5KSB7Cisg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5NZW1iZXJF
eHByZXNzaW9uLAorICAgICAgICAgICAgICAgIGNvbXB1dGVkOiBhY2Nlc3NvciA9PT0gJ1snLAor
ICAgICAgICAgICAgICAgIG9iamVjdDogb2JqZWN0LAorICAgICAgICAgICAgICAgIHByb3BlcnR5
OiBwcm9wZXJ0eQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVO
ZXdFeHByZXNzaW9uOiBmdW5jdGlvbiAoY2FsbGVlLCBhcmdzKSB7CisgICAgICAgICAgICByZXR1
cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5OZXdFeHByZXNzaW9uLAorICAgICAg
ICAgICAgICAgIGNhbGxlZTogY2FsbGVlLAorICAgICAgICAgICAgICAgICdhcmd1bWVudHMnOiBh
cmdzCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZU9iamVjdEV4
cHJlc3Npb246IGZ1bmN0aW9uIChwcm9wZXJ0aWVzKSB7CisgICAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5PYmplY3RFeHByZXNzaW9uLAorICAgICAgICAg
ICAgICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXMKKyAgICAgICAgICAgIH07CisgICAgICAgIH0s
CisKKyAgICAgICAgY3JlYXRlUG9zdGZpeEV4cHJlc3Npb246IGZ1bmN0aW9uIChvcGVyYXRvciwg
YXJndW1lbnQpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTog
U3ludGF4LlVwZGF0ZUV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgb3BlcmF0b3I6IG9wZXJh
dG9yLAorICAgICAgICAgICAgICAgIGFyZ3VtZW50OiBhcmd1bWVudCwKKyAgICAgICAgICAgICAg
ICBwcmVmaXg6IGZhbHNlCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNy
ZWF0ZVByb2dyYW06IGZ1bmN0aW9uIChib2R5KSB7CisgICAgICAgICAgICByZXR1cm4geworICAg
ICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Qcm9ncmFtLAorICAgICAgICAgICAgICAgIGJvZHk6
IGJvZHkKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlUHJvcGVy
dHk6IGZ1bmN0aW9uIChraW5kLCBrZXksIHZhbHVlLCBtZXRob2QsIHNob3J0aGFuZCkgeworICAg
ICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguUHJvcGVydHks
CisgICAgICAgICAgICAgICAga2V5OiBrZXksCisgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVl
LAorICAgICAgICAgICAgICAgIGtpbmQ6IGtpbmQsCisgICAgICAgICAgICAgICAgbWV0aG9kOiBt
ZXRob2QsCisgICAgICAgICAgICAgICAgc2hvcnRoYW5kOiBzaG9ydGhhbmQKKyAgICAgICAgICAg
IH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlUmV0dXJuU3RhdGVtZW50OiBmdW5jdGlv
biAoYXJndW1lbnQpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlw
ZTogU3ludGF4LlJldHVyblN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBhcmd1bWVudDogYXJn
dW1lbnQKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlU2VxdWVu
Y2VFeHByZXNzaW9uOiBmdW5jdGlvbiAoZXhwcmVzc2lvbnMpIHsKKyAgICAgICAgICAgIHJldHVy
biB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlNlcXVlbmNlRXhwcmVzc2lvbiwKKyAg
ICAgICAgICAgICAgICBleHByZXNzaW9uczogZXhwcmVzc2lvbnMKKyAgICAgICAgICAgIH07Cisg
ICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlU3dpdGNoQ2FzZTogZnVuY3Rpb24gKHRlc3QsIGNv
bnNlcXVlbnQpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTog
U3ludGF4LlN3aXRjaENhc2UsCisgICAgICAgICAgICAgICAgdGVzdDogdGVzdCwKKyAgICAgICAg
ICAgICAgICBjb25zZXF1ZW50OiBjb25zZXF1ZW50CisgICAgICAgICAgICB9OworICAgICAgICB9
LAorCisgICAgICAgIGNyZWF0ZVN3aXRjaFN0YXRlbWVudDogZnVuY3Rpb24gKGRpc2NyaW1pbmFu
dCwgY2FzZXMpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTog
U3ludGF4LlN3aXRjaFN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBkaXNjcmltaW5hbnQ6IGRp
c2NyaW1pbmFudCwKKyAgICAgICAgICAgICAgICBjYXNlczogY2FzZXMKKyAgICAgICAgICAgIH07
CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlVGhpc0V4cHJlc3Npb246IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlRo
aXNFeHByZXNzaW9uCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0
ZVRocm93U3RhdGVtZW50OiBmdW5jdGlvbiAoYXJndW1lbnQpIHsKKyAgICAgICAgICAgIHJldHVy
biB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlRocm93U3RhdGVtZW50LAorICAgICAg
ICAgICAgICAgIGFyZ3VtZW50OiBhcmd1bWVudAorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwK
KworICAgICAgICBjcmVhdGVUcnlTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChibG9jaywgZ3VhcmRlZEhh
bmRsZXJzLCBoYW5kbGVycywgZmluYWxpemVyKSB7CisgICAgICAgICAgICByZXR1cm4geworICAg
ICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5UcnlTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAg
YmxvY2s6IGJsb2NrLAorICAgICAgICAgICAgICAgIGd1YXJkZWRIYW5kbGVyczogZ3VhcmRlZEhh
bmRsZXJzLAorICAgICAgICAgICAgICAgIGhhbmRsZXJzOiBoYW5kbGVycywKKyAgICAgICAgICAg
ICAgICBmaW5hbGl6ZXI6IGZpbmFsaXplcgorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKwor
ICAgICAgICBjcmVhdGVVbmFyeUV4cHJlc3Npb246IGZ1bmN0aW9uIChvcGVyYXRvciwgYXJndW1l
bnQpIHsKKyAgICAgICAgICAgIGlmIChvcGVyYXRvciA9PT0gJysrJyB8fCBvcGVyYXRvciA9PT0g
Jy0tJykgeworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHR5
cGU6IFN5bnRheC5VcGRhdGVFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICBvcGVyYXRv
cjogb3BlcmF0b3IsCisgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50OiBhcmd1bWVudCwKKyAg
ICAgICAgICAgICAgICAgICAgcHJlZml4OiB0cnVlCisgICAgICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3lu
dGF4LlVuYXJ5RXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBvcGVyYXRvcjogb3BlcmF0b3Is
CisgICAgICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50CisgICAgICAgICAgICB9OworICAg
ICAgICB9LAorCisgICAgICAgIGNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb246IGZ1bmN0aW9uIChk
ZWNsYXJhdGlvbnMsIGtpbmQpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAg
ICAgdHlwZTogU3ludGF4LlZhcmlhYmxlRGVjbGFyYXRpb24sCisgICAgICAgICAgICAgICAgZGVj
bGFyYXRpb25zOiBkZWNsYXJhdGlvbnMsCisgICAgICAgICAgICAgICAga2luZDoga2luZAorICAg
ICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVWYXJpYWJsZURlY2xhcmF0
b3I6IGZ1bmN0aW9uIChpZCwgaW5pdCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgICAgICB0eXBlOiBTeW50YXguVmFyaWFibGVEZWNsYXJhdG9yLAorICAgICAgICAgICAgICAg
IGlkOiBpZCwKKyAgICAgICAgICAgICAgICBpbml0OiBpbml0CisgICAgICAgICAgICB9OworICAg
ICAgICB9LAorCisgICAgICAgIGNyZWF0ZVdoaWxlU3RhdGVtZW50OiBmdW5jdGlvbiAodGVzdCwg
Ym9keSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50
YXguV2hpbGVTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgdGVzdDogdGVzdCwKKyAgICAgICAg
ICAgICAgICBib2R5OiBib2R5CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAg
IGNyZWF0ZVdpdGhTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChvYmplY3QsIGJvZHkpIHsKKyAgICAgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LldpdGhTdGF0ZW1lbnQs
CisgICAgICAgICAgICAgICAgb2JqZWN0OiBvYmplY3QsCisgICAgICAgICAgICAgICAgYm9keTog
Ym9keQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVUZW1wbGF0
ZUVsZW1lbnQ6IGZ1bmN0aW9uICh2YWx1ZSwgdGFpbCkgeworICAgICAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguVGVtcGxhdGVFbGVtZW50LAorICAgICAgICAg
ICAgICAgIHZhbHVlOiB2YWx1ZSwKKyAgICAgICAgICAgICAgICB0YWlsOiB0YWlsCisgICAgICAg
ICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZVRlbXBsYXRlTGl0ZXJhbDogZnVu
Y3Rpb24gKHF1YXNpcywgZXhwcmVzc2lvbnMpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAg
ICAgICAgICAgICAgdHlwZTogU3ludGF4LlRlbXBsYXRlTGl0ZXJhbCwKKyAgICAgICAgICAgICAg
ICBxdWFzaXM6IHF1YXNpcywKKyAgICAgICAgICAgICAgICBleHByZXNzaW9uczogZXhwcmVzc2lv
bnMKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlU3ByZWFkRWxl
bWVudDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgICAgIHR5cGU6IFN5bnRheC5TcHJlYWRFbGVtZW50LAorICAgICAgICAgICAgICAgIGFy
Z3VtZW50OiBhcmd1bWVudAorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBj
cmVhdGVUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb246IGZ1bmN0aW9uICh0YWcsIHF1YXNpKSB7Cisg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5UYWdnZWRU
ZW1wbGF0ZUV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgdGFnOiB0YWcsCisgICAgICAgICAg
ICAgICAgcXVhc2k6IHF1YXNpCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAg
IGNyZWF0ZUFycm93RnVuY3Rpb25FeHByZXNzaW9uOiBmdW5jdGlvbiAocGFyYW1zLCBkZWZhdWx0
cywgYm9keSwgcmVzdCwgZXhwcmVzc2lvbikgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAg
ICAgICAgICAgICB0eXBlOiBTeW50YXguQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24sCisgICAgICAg
ICAgICAgICAgaWQ6IG51bGwsCisgICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMsCisgICAg
ICAgICAgICAgICAgZGVmYXVsdHM6IGRlZmF1bHRzLAorICAgICAgICAgICAgICAgIGJvZHk6IGJv
ZHksCisgICAgICAgICAgICAgICAgcmVzdDogcmVzdCwKKyAgICAgICAgICAgICAgICBnZW5lcmF0
b3I6IGZhbHNlLAorICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHJlc3Npb24KKyAgICAg
ICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlTWV0aG9kRGVmaW5pdGlvbjog
ZnVuY3Rpb24gKHByb3BlcnR5VHlwZSwga2luZCwga2V5LCB2YWx1ZSkgeworICAgICAgICAgICAg
cmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguTWV0aG9kRGVmaW5pdGlvbiwK
KyAgICAgICAgICAgICAgICBrZXk6IGtleSwKKyAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUs
CisgICAgICAgICAgICAgICAga2luZDoga2luZCwKKyAgICAgICAgICAgICAgICAnc3RhdGljJzog
cHJvcGVydHlUeXBlID09PSBDbGFzc1Byb3BlcnR5VHlwZS5zdGF0aWMKKyAgICAgICAgICAgIH07
CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlQ2xhc3NCb2R5OiBmdW5jdGlvbiAoYm9keSkg
eworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguQ2xh
c3NCb2R5LAorICAgICAgICAgICAgICAgIGJvZHk6IGJvZHkKKyAgICAgICAgICAgIH07CisgICAg
ICAgIH0sCisKKyAgICAgICAgY3JlYXRlQ2xhc3NFeHByZXNzaW9uOiBmdW5jdGlvbiAoaWQsIHN1
cGVyQ2xhc3MsIGJvZHkpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAg
dHlwZTogU3ludGF4LkNsYXNzRXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBpZDogaWQsCisg
ICAgICAgICAgICAgICAgc3VwZXJDbGFzczogc3VwZXJDbGFzcywKKyAgICAgICAgICAgICAgICBi
b2R5OiBib2R5CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZUNs
YXNzRGVjbGFyYXRpb246IGZ1bmN0aW9uIChpZCwgc3VwZXJDbGFzcywgYm9keSkgeworICAgICAg
ICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguQ2xhc3NEZWNsYXJh
dGlvbiwKKyAgICAgICAgICAgICAgICBpZDogaWQsCisgICAgICAgICAgICAgICAgc3VwZXJDbGFz
czogc3VwZXJDbGFzcywKKyAgICAgICAgICAgICAgICBib2R5OiBib2R5CisgICAgICAgICAgICB9
OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZVBhdGg6IGZ1bmN0aW9uIChib2R5KSB7Cisg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5QYXRoLAor
ICAgICAgICAgICAgICAgIGJvZHk6IGJvZHkKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisK
KyAgICAgICAgY3JlYXRlR2xvYjogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguR2xvYgorICAgICAgICAgICAgfTsKKyAgICAg
ICAgfSwKKworICAgICAgICBjcmVhdGVFeHBvcnRTcGVjaWZpZXI6IGZ1bmN0aW9uIChpZCwgZnJv
bSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXgu
RXhwb3J0U3BlY2lmaWVyLAorICAgICAgICAgICAgICAgIGlkOiBpZCwKKyAgICAgICAgICAgICAg
ICBmcm9tOiBmcm9tCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0
ZUV4cG9ydFNwZWNpZmllclNldDogZnVuY3Rpb24gKHNwZWNpZmllcnMpIHsKKyAgICAgICAgICAg
IHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkV4cG9ydFNwZWNpZmllclNl
dCwKKyAgICAgICAgICAgICAgICBzcGVjaWZpZXJzOiBzcGVjaWZpZXJzCisgICAgICAgICAgICB9
OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZUV4cG9ydERlY2xhcmF0aW9uOiBmdW5jdGlv
biAoZGVjbGFyYXRpb24sIHNwZWNpZmllcnMpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAg
ICAgICAgICAgICAgdHlwZTogU3ludGF4LkV4cG9ydERlY2xhcmF0aW9uLAorICAgICAgICAgICAg
ICAgIGRlY2xhcmF0aW9uOiBkZWNsYXJhdGlvbiwKKyAgICAgICAgICAgICAgICBzcGVjaWZpZXJz
OiBzcGVjaWZpZXJzCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0
ZUltcG9ydFNwZWNpZmllcjogZnVuY3Rpb24gKGlkLCBmcm9tKSB7CisgICAgICAgICAgICByZXR1
cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5JbXBvcnRTcGVjaWZpZXIsCisgICAg
ICAgICAgICAgICAgaWQ6IGlkLAorICAgICAgICAgICAgICAgIGZyb206IGZyb20KKyAgICAgICAg
ICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlSW1wb3J0RGVjbGFyYXRpb246IGZ1
bmN0aW9uIChzcGVjaWZpZXJzLCBmcm9tKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgICAgIHR5cGU6IFN5bnRheC5JbXBvcnREZWNsYXJhdGlvbiwKKyAgICAgICAgICAgICAg
ICBzcGVjaWZpZXJzOiBzcGVjaWZpZXJzLAorICAgICAgICAgICAgICAgIGZyb206IGZyb20KKyAg
ICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlWWllbGRFeHByZXNzaW9u
OiBmdW5jdGlvbiAoYXJndW1lbnQsIGRlbGVnYXRlKSB7CisgICAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5ZaWVsZEV4cHJlc3Npb24sCisgICAgICAgICAg
ICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50LAorICAgICAgICAgICAgICAgIGRlbGVnYXRlOiBkZWxl
Z2F0ZQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVNb2R1bGVE
ZWNsYXJhdGlvbjogZnVuY3Rpb24gKGlkLCBmcm9tLCBib2R5KSB7CisgICAgICAgICAgICByZXR1
cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Nb2R1bGVEZWNsYXJhdGlvbiwKKyAg
ICAgICAgICAgICAgICBpZDogaWQsCisgICAgICAgICAgICAgICAgZnJvbTogZnJvbSwKKyAgICAg
ICAgICAgICAgICBib2R5OiBib2R5CisgICAgICAgICAgICB9OworICAgICAgICB9CisKKworICAg
IH07CisKKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBhIGxpbmUgdGVybWluYXRvciBi
ZWZvcmUgdGhlIG5leHQgdG9rZW4uCisKKyAgICBmdW5jdGlvbiBwZWVrTGluZVRlcm1pbmF0b3Io
KSB7CisgICAgICAgIHZhciBwb3MsIGxpbmUsIHN0YXJ0LCBmb3VuZDsKKworICAgICAgICBwb3Mg
PSBpbmRleDsKKyAgICAgICAgbGluZSA9IGxpbmVOdW1iZXI7CisgICAgICAgIHN0YXJ0ID0gbGlu
ZVN0YXJ0OworICAgICAgICBza2lwQ29tbWVudCgpOworICAgICAgICBmb3VuZCA9IGxpbmVOdW1i
ZXIgIT09IGxpbmU7CisgICAgICAgIGluZGV4ID0gcG9zOworICAgICAgICBsaW5lTnVtYmVyID0g
bGluZTsKKyAgICAgICAgbGluZVN0YXJ0ID0gc3RhcnQ7CisKKyAgICAgICAgcmV0dXJuIGZvdW5k
OworICAgIH0KKworICAgIC8vIFRocm93IGFuIGV4Y2VwdGlvbgorCisgICAgZnVuY3Rpb24gdGhy
b3dFcnJvcih0b2tlbiwgbWVzc2FnZUZvcm1hdCkgeworICAgICAgICB2YXIgZXJyb3IsCisgICAg
ICAgICAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKSwK
KyAgICAgICAgICAgIG1zZyA9IG1lc3NhZ2VGb3JtYXQucmVwbGFjZSgKKyAgICAgICAgICAgICAg
ICAvJShcZCkvZywKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiAod2hvbGUsIGluZGV4KSB7Cisg
ICAgICAgICAgICAgICAgICAgIGFzc2VydChpbmRleCA8IGFyZ3MubGVuZ3RoLCAnTWVzc2FnZSBy
ZWZlcmVuY2UgbXVzdCBiZSBpbiByYW5nZScpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
YXJnc1tpbmRleF07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgKTsKKworICAgICAg
ICBpZiAodHlwZW9mIHRva2VuLmxpbmVOdW1iZXIgPT09ICdudW1iZXInKSB7CisgICAgICAgICAg
ICBlcnJvciA9IG5ldyBFcnJvcignTGluZSAnICsgdG9rZW4ubGluZU51bWJlciArICc6ICcgKyBt
c2cpOworICAgICAgICAgICAgZXJyb3IuaW5kZXggPSB0b2tlbi5yYW5nZVswXTsKKyAgICAgICAg
ICAgIGVycm9yLmxpbmVOdW1iZXIgPSB0b2tlbi5saW5lTnVtYmVyOworICAgICAgICAgICAgZXJy
b3IuY29sdW1uID0gdG9rZW4ucmFuZ2VbMF0gLSBsaW5lU3RhcnQgKyAxOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoJ0xpbmUgJyArIGxpbmVOdW1iZXIg
KyAnOiAnICsgbXNnKTsKKyAgICAgICAgICAgIGVycm9yLmluZGV4ID0gaW5kZXg7CisgICAgICAg
ICAgICBlcnJvci5saW5lTnVtYmVyID0gbGluZU51bWJlcjsKKyAgICAgICAgICAgIGVycm9yLmNv
bHVtbiA9IGluZGV4IC0gbGluZVN0YXJ0ICsgMTsKKyAgICAgICAgfQorCisgICAgICAgIGVycm9y
LmRlc2NyaXB0aW9uID0gbXNnOworICAgICAgICB0aHJvdyBlcnJvcjsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiB0aHJvd0Vycm9yVG9sZXJhbnQoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAg
ICB0aHJvd0Vycm9yLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CisgICAgICAgIH0gY2F0Y2ggKGUp
IHsKKyAgICAgICAgICAgIGlmIChleHRyYS5lcnJvcnMpIHsKKyAgICAgICAgICAgICAgICBleHRy
YS5lcnJvcnMucHVzaChlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
dGhyb3cgZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworCisgICAgLy8gVGhy
b3cgYW4gZXhjZXB0aW9uIGJlY2F1c2Ugb2YgdGhlIHRva2VuLgorCisgICAgZnVuY3Rpb24gdGhy
b3dVbmV4cGVjdGVkKHRva2VuKSB7CisgICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5F
T0YpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRF
T1MpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLk51bWVy
aWNMaXRlcmFsKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNzYWdlcy5VbmV4
cGVjdGVkTnVtYmVyKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0b2tlbi50eXBlID09PSBU
b2tlbi5TdHJpbmdMaXRlcmFsKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNz
YWdlcy5VbmV4cGVjdGVkU3RyaW5nKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0b2tlbi50
eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKHRva2Vu
LCBNZXNzYWdlcy5VbmV4cGVjdGVkSWRlbnRpZmllcik7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uS2V5d29yZCkgeworICAgICAgICAgICAgaWYgKGlzRnV0
dXJlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworICAgICAgICAgICAgICAgIHRocm93RXJy
b3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRSZXNlcnZlZCk7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKHN0cmljdCAmJiBpc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7
CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHRva2VuLCBNZXNzYWdlcy5TdHJp
Y3RSZXNlcnZlZFdvcmQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwg
dG9rZW4udmFsdWUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRv
a2VuLlRlbXBsYXRlKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNzYWdlcy5V
bmV4cGVjdGVkVGVtcGxhdGUsIHRva2VuLnZhbHVlLnJhdyk7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBCb29sZWFuTGl0ZXJhbCwgTnVsbExpdGVyYWwsIG9yIFB1bmN0dWF0b3IuCisgICAgICAg
IHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgdG9rZW4udmFsdWUp
OworICAgIH0KKworICAgIC8vIEV4cGVjdCB0aGUgbmV4dCB0b2tlbiB0byBtYXRjaCB0aGUgc3Bl
Y2lmaWVkIHB1bmN0dWF0b3IuCisgICAgLy8gSWYgbm90LCBhbiBleGNlcHRpb24gd2lsbCBiZSB0
aHJvd24uCisKKyAgICBmdW5jdGlvbiBleHBlY3QodmFsdWUpIHsKKyAgICAgICAgdmFyIHRva2Vu
ID0gbGV4KCk7CisgICAgICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5QdW5jdHVhdG9yIHx8
IHRva2VuLnZhbHVlICE9PSB2YWx1ZSkgeworICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKHRv
a2VuKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEV4cGVjdCB0aGUgbmV4dCB0b2tlbiB0
byBtYXRjaCB0aGUgc3BlY2lmaWVkIGtleXdvcmQuCisgICAgLy8gSWYgbm90LCBhbiBleGNlcHRp
b24gd2lsbCBiZSB0aHJvd24uCisKKyAgICBmdW5jdGlvbiBleHBlY3RLZXl3b3JkKGtleXdvcmQp
IHsKKyAgICAgICAgdmFyIHRva2VuID0gbGV4KCk7CisgICAgICAgIGlmICh0b2tlbi50eXBlICE9
PSBUb2tlbi5LZXl3b3JkIHx8IHRva2VuLnZhbHVlICE9PSBrZXl3b3JkKSB7CisgICAgICAgICAg
ICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gUmV0
dXJuIHRydWUgaWYgdGhlIG5leHQgdG9rZW4gbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIHB1bmN0dWF0
b3IuCisKKyAgICBmdW5jdGlvbiBtYXRjaCh2YWx1ZSkgeworICAgICAgICByZXR1cm4gbG9va2Fo
ZWFkLnR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IgJiYgbG9va2FoZWFkLnZhbHVlID09PSB2YWx1
ZTsKKyAgICB9CisKKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgbmV4dCB0b2tlbiBtYXRjaGVz
IHRoZSBzcGVjaWZpZWQga2V5d29yZAorCisgICAgZnVuY3Rpb24gbWF0Y2hLZXl3b3JkKGtleXdv
cmQpIHsKKyAgICAgICAgcmV0dXJuIGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5LZXl3b3JkICYm
IGxvb2thaGVhZC52YWx1ZSA9PT0ga2V5d29yZDsKKyAgICB9CisKKworICAgIC8vIFJldHVybiB0
cnVlIGlmIHRoZSBuZXh0IHRva2VuIG1hdGNoZXMgdGhlIHNwZWNpZmllZCBjb250ZXh0dWFsIGtl
eXdvcmQKKworICAgIGZ1bmN0aW9uIG1hdGNoQ29udGV4dHVhbEtleXdvcmQoa2V5d29yZCkgewor
ICAgICAgICByZXR1cm4gbG9va2FoZWFkLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIgJiYgbG9v
a2FoZWFkLnZhbHVlID09PSBrZXl3b3JkOworICAgIH0KKworICAgIC8vIFJldHVybiB0cnVlIGlm
IHRoZSBuZXh0IHRva2VuIGlzIGFuIGFzc2lnbm1lbnQgb3BlcmF0b3IKKworICAgIGZ1bmN0aW9u
IG1hdGNoQXNzaWduKCkgeworICAgICAgICB2YXIgb3A7CisKKyAgICAgICAgaWYgKGxvb2thaGVh
ZC50eXBlICE9PSBUb2tlbi5QdW5jdHVhdG9yKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgb3AgPSBsb29rYWhlYWQudmFsdWU7CisgICAgICAgIHJldHVy
biBvcCA9PT0gJz0nIHx8CisgICAgICAgICAgICBvcCA9PT0gJyo9JyB8fAorICAgICAgICAgICAg
b3AgPT09ICcvPScgfHwKKyAgICAgICAgICAgIG9wID09PSAnJT0nIHx8CisgICAgICAgICAgICBv
cCA9PT0gJys9JyB8fAorICAgICAgICAgICAgb3AgPT09ICctPScgfHwKKyAgICAgICAgICAgIG9w
ID09PSAnPDw9JyB8fAorICAgICAgICAgICAgb3AgPT09ICc+Pj0nIHx8CisgICAgICAgICAgICBv
cCA9PT0gJz4+Pj0nIHx8CisgICAgICAgICAgICBvcCA9PT0gJyY9JyB8fAorICAgICAgICAgICAg
b3AgPT09ICdePScgfHwKKyAgICAgICAgICAgIG9wID09PSAnfD0nOworICAgIH0KKworICAgIGZ1
bmN0aW9uIGNvbnN1bWVTZW1pY29sb24oKSB7CisgICAgICAgIHZhciBsaW5lOworCisgICAgICAg
IC8vIENhdGNoIHRoZSB2ZXJ5IGNvbW1vbiBjYXNlIGZpcnN0OiBpbW1lZGlhdGVseSBhIHNlbWlj
b2xvbiAoY2hhciAjNTkpLgorICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09
PSA1OSkgeworICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBsaW5lID0gbGluZU51bWJlcjsKKyAgICAgICAgc2tpcENvbW1lbnQoKTsK
KyAgICAgICAgaWYgKGxpbmVOdW1iZXIgIT09IGxpbmUpIHsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChtYXRjaCgnOycpKSB7CisgICAgICAgICAgICBsZXgo
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb29rYWhl
YWQudHlwZSAhPT0gVG9rZW4uRU9GICYmICFtYXRjaCgnfScpKSB7CisgICAgICAgICAgICB0aHJv
d1VuZXhwZWN0ZWQobG9va2FoZWFkKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFJldHVy
biB0cnVlIGlmIHByb3ZpZGVkIGV4cHJlc3Npb24gaXMgTGVmdEhhbmRTaWRlRXhwcmVzc2lvbgor
CisgICAgZnVuY3Rpb24gaXNMZWZ0SGFuZFNpZGUoZXhwcikgeworICAgICAgICByZXR1cm4gZXhw
ci50eXBlID09PSBTeW50YXguSWRlbnRpZmllciB8fCBleHByLnR5cGUgPT09IFN5bnRheC5NZW1i
ZXJFeHByZXNzaW9uOworICAgIH0KKworICAgIGZ1bmN0aW9uIGlzQXNzaWduYWJsZUxlZnRIYW5k
U2lkZShleHByKSB7CisgICAgICAgIHJldHVybiBpc0xlZnRIYW5kU2lkZShleHByKSB8fCBleHBy
LnR5cGUgPT09IFN5bnRheC5PYmplY3RQYXR0ZXJuIHx8IGV4cHIudHlwZSA9PT0gU3ludGF4LkFy
cmF5UGF0dGVybjsKKyAgICB9CisKKyAgICAvLyAxMS4xLjQgQXJyYXkgSW5pdGlhbGlzZXIKKwor
ICAgIGZ1bmN0aW9uIHBhcnNlQXJyYXlJbml0aWFsaXNlcigpIHsKKyAgICAgICAgdmFyIGVsZW1l
bnRzID0gW10sIGJsb2NrcyA9IFtdLCBmaWx0ZXIgPSBudWxsLCB0bXAsIHBvc3NpYmxlY29tcHJl
aGVuc2lvbiA9IHRydWUsIGJvZHk7CisKKyAgICAgICAgZXhwZWN0KCdbJyk7CisgICAgICAgIHdo
aWxlICghbWF0Y2goJ10nKSkgeworICAgICAgICAgICAgaWYgKGxvb2thaGVhZC52YWx1ZSA9PT0g
J2ZvcicgJiYKKyAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkLnR5cGUgPT09IFRva2VuLktl
eXdvcmQpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXBvc3NpYmxlY29tcHJlaGVuc2lvbikgewor
ICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5Db21wcmVoZW5zaW9u
RXJyb3IpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtYXRjaEtleXdvcmQo
J2ZvcicpOworICAgICAgICAgICAgICAgIHRtcCA9IHBhcnNlRm9yU3RhdGVtZW50KHtpZ25vcmVf
Ym9keTogdHJ1ZX0pOworICAgICAgICAgICAgICAgIHRtcC5vZiA9IHRtcC50eXBlID09PSBTeW50
YXguRm9yT2ZTdGF0ZW1lbnQ7CisgICAgICAgICAgICAgICAgdG1wLnR5cGUgPSBTeW50YXguQ29t
cHJlaGVuc2lvbkJsb2NrOworICAgICAgICAgICAgICAgIGlmICh0bXAubGVmdC5raW5kKSB7IC8v
IGNhbid0IGJlIGxldCBvciBjb25zdAorICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9
LCBNZXNzYWdlcy5Db21wcmVoZW5zaW9uRXJyb3IpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBibG9ja3MucHVzaCh0bXApOworICAgICAgICAgICAgfSBlbHNlIGlmIChsb29r
YWhlYWQudmFsdWUgPT09ICdpZicgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2th
aGVhZC50eXBlID09PSBUb2tlbi5LZXl3b3JkKSB7CisgICAgICAgICAgICAgICAgaWYgKCFwb3Nz
aWJsZWNvbXByZWhlbnNpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwg
TWVzc2FnZXMuQ29tcHJlaGVuc2lvbkVycm9yKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgZXhwZWN0S2V5d29yZCgnaWYnKTsKKyAgICAgICAgICAgICAgICBleHBlY3QoJygn
KTsKKyAgICAgICAgICAgICAgICBmaWx0ZXIgPSBwYXJzZUV4cHJlc3Npb24oKTsKKyAgICAgICAg
ICAgICAgICBleHBlY3QoJyknKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobG9va2FoZWFkLnZh
bHVlID09PSAnLCcgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZC50eXBl
ID09PSBUb2tlbi5QdW5jdHVhdG9yKSB7CisgICAgICAgICAgICAgICAgcG9zc2libGVjb21wcmVo
ZW5zaW9uID0gZmFsc2U7IC8vIG5vIGxvbmdlciBhbGxvd2VkLgorICAgICAgICAgICAgICAgIGxl
eCgpOworICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gobnVsbCk7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIHRtcCA9IHBhcnNlU3ByZWFkT3JBc3NpZ25tZW50RXhw
cmVzc2lvbigpOworICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2godG1wKTsKKyAgICAgICAg
ICAgICAgICBpZiAodG1wICYmIHRtcC50eXBlID09PSBTeW50YXguU3ByZWFkRWxlbWVudCkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdGNoKCddJykpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLkVsZW1lbnRBZnRlclNwcmVhZEVsZW1lbnQp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghKG1h
dGNoKCddJykgfHwgbWF0Y2hLZXl3b3JkKCdmb3InKSB8fCBtYXRjaEtleXdvcmQoJ2lmJykpKSB7
CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdCgnLCcpOyAvLyB0aGlzIGxleGVzLgorICAgICAg
ICAgICAgICAgICAgICBwb3NzaWJsZWNvbXByZWhlbnNpb24gPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBleHBlY3QoJ10nKTsK
KworICAgICAgICBpZiAoZmlsdGVyICYmICFibG9ja3MubGVuZ3RoKSB7CisgICAgICAgICAgICB0
aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5Db21wcmVoZW5zaW9uUmVxdWlyZXNCbG9jayk7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoYmxvY2tzLmxlbmd0aCkgeworICAgICAgICAgICAgaWYgKGVs
ZW1lbnRzLmxlbmd0aCAhPT0gMSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1l
c3NhZ2VzLkNvbXByZWhlbnNpb25FcnJvcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6ICBTeW50YXguQ29tcHJlaGVuc2lvbkV4cHJl
c3Npb24sCisgICAgICAgICAgICAgICAgZmlsdGVyOiBmaWx0ZXIsCisgICAgICAgICAgICAgICAg
YmxvY2tzOiBibG9ja3MsCisgICAgICAgICAgICAgICAgYm9keTogZWxlbWVudHNbMF0KKyAgICAg
ICAgICAgIH07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUFycmF5
RXhwcmVzc2lvbihlbGVtZW50cyk7CisgICAgfQorCisgICAgLy8gMTEuMS41IE9iamVjdCBJbml0
aWFsaXNlcgorCisgICAgZnVuY3Rpb24gcGFyc2VQcm9wZXJ0eUZ1bmN0aW9uKG9wdGlvbnMpIHsK
KyAgICAgICAgdmFyIHByZXZpb3VzU3RyaWN0LCBwcmV2aW91c1lpZWxkQWxsb3dlZCwgcGFyYW1z
LCBib2R5OworCisgICAgICAgIHByZXZpb3VzU3RyaWN0ID0gc3RyaWN0OworICAgICAgICBwcmV2
aW91c1lpZWxkQWxsb3dlZCA9IHN0YXRlLnlpZWxkQWxsb3dlZDsKKyAgICAgICAgc3RhdGUueWll
bGRBbGxvd2VkID0gb3B0aW9ucy5nZW5lcmF0b3I7CisgICAgICAgIHBhcmFtcyA9IG9wdGlvbnMu
cGFyYW1zIHx8IFtdOworCisgICAgICAgIGJvZHkgPSBwYXJzZUNvbmNpc2VCb2R5KCk7CisgICAg
ICAgIGlmIChvcHRpb25zLm5hbWUgJiYgc3RyaWN0ICYmIGlzUmVzdHJpY3RlZFdvcmQocGFyYW1z
WzBdLm5hbWUpKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQob3B0aW9ucy5uYW1l
LCBNZXNzYWdlcy5TdHJpY3RQYXJhbU5hbWUpOworICAgICAgICB9CisgICAgICAgIGlmIChzdGF0
ZS55aWVsZEFsbG93ZWQgJiYgIXN0YXRlLnlpZWxkRm91bmQpIHsKKyAgICAgICAgICAgIHRocm93
RXJyb3Ioe30sIE1lc3NhZ2VzLk5vWWllbGRJbkdlbmVyYXRvcik7CisgICAgICAgIH0KKyAgICAg
ICAgc3RyaWN0ID0gcHJldmlvdXNTdHJpY3Q7CisgICAgICAgIHN0YXRlLnlpZWxkQWxsb3dlZCA9
IHByZXZpb3VzWWllbGRBbGxvd2VkOworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVG
dW5jdGlvbkV4cHJlc3Npb24obnVsbCwgcGFyYW1zLCBbXSwgYm9keSwgb3B0aW9ucy5yZXN0IHx8
IG51bGwsIG9wdGlvbnMuZ2VuZXJhdG9yLCBib2R5LnR5cGUgIT09IFN5bnRheC5CbG9ja1N0YXRl
bWVudCk7CisgICAgfQorCisKKyAgICBmdW5jdGlvbiBwYXJzZVByb3BlcnR5TWV0aG9kRnVuY3Rp
b24ob3B0aW9ucykgeworICAgICAgICB2YXIgcHJldmlvdXNTdHJpY3QsIHRtcCwgbWV0aG9kOwor
CisgICAgICAgIHByZXZpb3VzU3RyaWN0ID0gc3RyaWN0OworICAgICAgICBzdHJpY3QgPSB0cnVl
OworCisgICAgICAgIHRtcCA9IHBhcnNlUGFyYW1zKCk7CisKKyAgICAgICAgaWYgKHRtcC5zdHJp
Y3RlZCkgeworICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHRtcC5zdHJpY3RlZCwgdG1w
Lm1lc3NhZ2UpOworICAgICAgICB9CisKKworICAgICAgICBtZXRob2QgPSBwYXJzZVByb3BlcnR5
RnVuY3Rpb24oeworICAgICAgICAgICAgcGFyYW1zOiB0bXAucGFyYW1zLAorICAgICAgICAgICAg
cmVzdDogdG1wLnJlc3QsCisgICAgICAgICAgICBnZW5lcmF0b3I6IG9wdGlvbnMuZ2VuZXJhdG9y
CisgICAgICAgIH0pOworCisgICAgICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0OworCisgICAg
ICAgIHJldHVybiBtZXRob2Q7CisgICAgfQorCisKKyAgICBmdW5jdGlvbiBwYXJzZU9iamVjdFBy
b3BlcnR5S2V5KCkgeworICAgICAgICB2YXIgdG9rZW4gPSBsZXgoKTsKKworICAgICAgICAvLyBO
b3RlOiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IGZyb20gcGFyc2VPYmplY3RQcm9wZXJ0
eSgpLCB3aGVyZQorICAgICAgICAvLyBFT0YgYW5kIFB1bmN0dWF0b3IgdG9rZW5zIGFyZSBhbHJl
YWR5IGZpbHRlcmVkIG91dC4KKworICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uU3Ry
aW5nTGl0ZXJhbCB8fCB0b2tlbi50eXBlID09PSBUb2tlbi5OdW1lcmljTGl0ZXJhbCkgeworICAg
ICAgICAgICAgaWYgKHN0cmljdCAmJiB0b2tlbi5vY3RhbCkgeworICAgICAgICAgICAgICAgIHRo
cm93RXJyb3JUb2xlcmFudCh0b2tlbiwgTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVMaXRlcmFsKHRv
a2VuKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVJZGVudGlm
aWVyKHRva2VuLnZhbHVlKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZU9iamVjdFByb3Bl
cnR5KCkgeworICAgICAgICB2YXIgdG9rZW4sIGtleSwgaWQsIHZhbHVlLCBwYXJhbTsKKworICAg
ICAgICB0b2tlbiA9IGxvb2thaGVhZDsKKworICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9r
ZW4uSWRlbnRpZmllcikgeworCisgICAgICAgICAgICBpZCA9IHBhcnNlT2JqZWN0UHJvcGVydHlL
ZXkoKTsKKworICAgICAgICAgICAgLy8gUHJvcGVydHkgQXNzaWdubWVudDogR2V0dGVyIGFuZCBT
ZXR0ZXIuCisKKyAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PT0gJ2dldCcgJiYgIShtYXRj
aCgnOicpIHx8IG1hdGNoKCcoJykpKSB7CisgICAgICAgICAgICAgICAga2V5ID0gcGFyc2VPYmpl
Y3RQcm9wZXJ0eUtleSgpOworICAgICAgICAgICAgICAgIGV4cGVjdCgnKCcpOworICAgICAgICAg
ICAgICAgIGV4cGVjdCgnKScpOworICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVh
dGVQcm9wZXJ0eSgnZ2V0Jywga2V5LCBwYXJzZVByb3BlcnR5RnVuY3Rpb24oeyBnZW5lcmF0b3I6
IGZhbHNlIH0pLCBmYWxzZSwgZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KHRva2VuLnZhbHVlID09PSAnc2V0JyAmJiAhKG1hdGNoKCc6JykgfHwgbWF0Y2goJygnKSkpIHsK
KyAgICAgICAgICAgICAgICBrZXkgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7CisgICAgICAg
ICAgICAgICAgZXhwZWN0KCcoJyk7CisgICAgICAgICAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7
CisgICAgICAgICAgICAgICAgcGFyYW0gPSBbIHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCkgXTsK
KyAgICAgICAgICAgICAgICBleHBlY3QoJyknKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVs
ZWdhdGUuY3JlYXRlUHJvcGVydHkoJ3NldCcsIGtleSwgcGFyc2VQcm9wZXJ0eUZ1bmN0aW9uKHsg
cGFyYW1zOiBwYXJhbSwgZ2VuZXJhdG9yOiBmYWxzZSwgbmFtZTogdG9rZW4gfSksIGZhbHNlLCBm
YWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobWF0Y2goJzonKSkgeworICAg
ICAgICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVh
dGVQcm9wZXJ0eSgnaW5pdCcsIGlkLCBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCksIGZhbHNl
LCBmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobWF0Y2goJygnKSkgewor
ICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVQcm9wZXJ0eSgnaW5pdCcsIGlk
LCBwYXJzZVByb3BlcnR5TWV0aG9kRnVuY3Rpb24oeyBnZW5lcmF0b3I6IGZhbHNlIH0pLCB0cnVl
LCBmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3Jl
YXRlUHJvcGVydHkoJ2luaXQnLCBpZCwgaWQsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uRU9GIHx8IHRva2VuLnR5cGUgPT09IFRva2Vu
LlB1bmN0dWF0b3IpIHsKKyAgICAgICAgICAgIGlmICghbWF0Y2goJyonKSkgeworICAgICAgICAg
ICAgICAgIHRocm93VW5leHBlY3RlZCh0b2tlbik7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBsZXgoKTsKKworICAgICAgICAgICAgaWQgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7CisK
KyAgICAgICAgICAgIGlmICghbWF0Y2goJygnKSkgeworICAgICAgICAgICAgICAgIHRocm93VW5l
eHBlY3RlZChsZXgoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBkZWxl
Z2F0ZS5jcmVhdGVQcm9wZXJ0eSgnaW5pdCcsIGlkLCBwYXJzZVByb3BlcnR5TWV0aG9kRnVuY3Rp
b24oeyBnZW5lcmF0b3I6IHRydWUgfSksIHRydWUsIGZhbHNlKTsKKyAgICAgICAgfQorICAgICAg
ICBrZXkgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7CisgICAgICAgIGlmIChtYXRjaCgnOicp
KSB7CisgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVh
dGVQcm9wZXJ0eSgnaW5pdCcsIGtleSwgcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpLCBmYWxz
ZSwgZmFsc2UpOworICAgICAgICB9CisgICAgICAgIGlmIChtYXRjaCgnKCcpKSB7CisgICAgICAg
ICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlUHJvcGVydHkoJ2luaXQnLCBrZXksIHBhcnNlUHJv
cGVydHlNZXRob2RGdW5jdGlvbih7IGdlbmVyYXRvcjogZmFsc2UgfSksIHRydWUsIGZhbHNlKTsK
KyAgICAgICAgfQorICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobGV4KCkpOworICAgIH0KKworICAg
IGZ1bmN0aW9uIHBhcnNlT2JqZWN0SW5pdGlhbGlzZXIoKSB7CisgICAgICAgIHZhciBwcm9wZXJ0
aWVzID0gW10sIHByb3BlcnR5LCBuYW1lLCBrZXksIGtpbmQsIG1hcCA9IHt9LCB0b1N0cmluZyA9
IFN0cmluZzsKKworICAgICAgICBleHBlY3QoJ3snKTsKKworICAgICAgICB3aGlsZSAoIW1hdGNo
KCd9JykpIHsKKyAgICAgICAgICAgIHByb3BlcnR5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eSgpOwor
CisgICAgICAgICAgICBpZiAocHJvcGVydHkua2V5LnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVy
KSB7CisgICAgICAgICAgICAgICAgbmFtZSA9IHByb3BlcnR5LmtleS5uYW1lOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBuYW1lID0gdG9TdHJpbmcocHJvcGVydHkua2V5
LnZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGtpbmQgPSAocHJvcGVydHkua2lu
ZCA9PT0gJ2luaXQnKSA/IFByb3BlcnR5S2luZC5EYXRhIDogKHByb3BlcnR5LmtpbmQgPT09ICdn
ZXQnKSA/IFByb3BlcnR5S2luZC5HZXQgOiBQcm9wZXJ0eUtpbmQuU2V0OworCisgICAgICAgICAg
ICBrZXkgPSAnJCcgKyBuYW1lOworICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFz
T3duUHJvcGVydHkuY2FsbChtYXAsIGtleSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobWFwW2tl
eV0gPT09IFByb3BlcnR5S2luZC5EYXRhKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdHJp
Y3QgJiYga2luZCA9PT0gUHJvcGVydHlLaW5kLkRhdGEpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuU3RyaWN0RHVwbGljYXRlUHJvcGVy
dHkpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtpbmQgIT09IFByb3BlcnR5S2lu
ZC5EYXRhKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30s
IE1lc3NhZ2VzLkFjY2Vzc29yRGF0YVByb3BlcnR5KTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChraW5kID09
PSBQcm9wZXJ0eUtpbmQuRGF0YSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJv
clRvbGVyYW50KHt9LCBNZXNzYWdlcy5BY2Nlc3NvckRhdGFQcm9wZXJ0eSk7CisgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAobWFwW2tleV0gJiBraW5kKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkFjY2Vzc29yR2V0U2V0KTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBtYXBba2V5XSB8PSBraW5kOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBtYXBba2V5XSA9IGtpbmQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByb3BlcnRp
ZXMucHVzaChwcm9wZXJ0eSk7CisKKyAgICAgICAgICAgIGlmICghbWF0Y2goJ30nKSkgeworICAg
ICAgICAgICAgICAgIGV4cGVjdCgnLCcpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgZXhwZWN0KCd9Jyk7CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZU9iamVj
dEV4cHJlc3Npb24ocHJvcGVydGllcyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VUZW1w
bGF0ZUVsZW1lbnQob3B0aW9uKSB7CisgICAgICAgIHZhciB0b2tlbiA9IHNjYW5UZW1wbGF0ZUVs
ZW1lbnQob3B0aW9uKTsKKyAgICAgICAgaWYgKHN0cmljdCAmJiB0b2tlbi5vY3RhbCkgeworICAg
ICAgICAgICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlVGVtcGxhdGVFbGVtZW50
KHsgcmF3OiB0b2tlbi52YWx1ZS5yYXcsIGNvb2tlZDogdG9rZW4udmFsdWUuY29va2VkIH0sIHRv
a2VuLnRhaWwpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlVGVtcGxhdGVMaXRlcmFsKCkg
eworICAgICAgICB2YXIgcXVhc2ksIHF1YXNpcywgZXhwcmVzc2lvbnM7CisKKyAgICAgICAgcXVh
c2kgPSBwYXJzZVRlbXBsYXRlRWxlbWVudCh7IGhlYWQ6IHRydWUgfSk7CisgICAgICAgIHF1YXNp
cyA9IFsgcXVhc2kgXTsKKyAgICAgICAgZXhwcmVzc2lvbnMgPSBbXTsKKworICAgICAgICB3aGls
ZSAoIXF1YXNpLnRhaWwpIHsKKyAgICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2gocGFyc2VFeHBy
ZXNzaW9uKCkpOworICAgICAgICAgICAgcXVhc2kgPSBwYXJzZVRlbXBsYXRlRWxlbWVudCh7IGhl
YWQ6IGZhbHNlIH0pOworICAgICAgICAgICAgcXVhc2lzLnB1c2gocXVhc2kpOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVRlbXBsYXRlTGl0ZXJhbChxdWFzaXMs
IGV4cHJlc3Npb25zKTsKKyAgICB9CisKKyAgICAvLyAxMS4xLjYgVGhlIEdyb3VwaW5nIE9wZXJh
dG9yCisKKyAgICBmdW5jdGlvbiBwYXJzZUdyb3VwRXhwcmVzc2lvbigpIHsKKyAgICAgICAgdmFy
IGV4cHI7CisKKyAgICAgICAgZXhwZWN0KCcoJyk7CisKKyAgICAgICAgKytzdGF0ZS5wYXJlbnRo
ZXNpemVkQ291bnQ7CisKKyAgICAgICAgc3RhdGUuYWxsb3dBcnJvd0Z1bmN0aW9uID0gIXN0YXRl
LmFsbG93QXJyb3dGdW5jdGlvbjsKKyAgICAgICAgZXhwciA9IHBhcnNlRXhwcmVzc2lvbigpOwor
ICAgICAgICBzdGF0ZS5hbGxvd0Fycm93RnVuY3Rpb24gPSBmYWxzZTsKKworICAgICAgICBpZiAo
ZXhwci50eXBlICE9PSBTeW50YXguQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24pIHsKKyAgICAgICAg
ICAgIGV4cGVjdCgnKScpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGV4cHI7CisgICAg
fQorCisKKyAgICAvLyAxMS4xIFByaW1hcnkgRXhwcmVzc2lvbnMKKworICAgIGZ1bmN0aW9uIHBh
cnNlUHJpbWFyeUV4cHJlc3Npb24oKSB7CisgICAgICAgIHZhciB0eXBlLCB0b2tlbjsKKworICAg
ICAgICB0b2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgdHlwZSA9IGxvb2thaGVhZC50eXBlOwor
CisgICAgICAgIGlmICh0eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7CisgICAgICAgICAgICBs
ZXgoKTsKKyAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVJZGVudGlmaWVyKHRva2Vu
LnZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0eXBlID09PSBUb2tlbi5TdHJpbmdM
aXRlcmFsIHx8IHR5cGUgPT09IFRva2VuLk51bWVyaWNMaXRlcmFsKSB7CisgICAgICAgICAgICBp
ZiAoc3RyaWN0ICYmIGxvb2thaGVhZC5vY3RhbCkgeworICAgICAgICAgICAgICAgIHRocm93RXJy
b3JUb2xlcmFudChsb29rYWhlYWQsIE1lc3NhZ2VzLlN0cmljdE9jdGFsTGl0ZXJhbCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlTGl0ZXJhbChsZXgo
KSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodHlwZSA9PT0gVG9rZW4uS2V5d29yZCkgewor
ICAgICAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgndGhpcycpKSB7CisgICAgICAgICAgICAgICAg
bGV4KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVRoaXNFeHByZXNz
aW9uKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2Z1
bmN0aW9uJykpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlvbkV4cHJlc3Np
b24oKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnY2xh
c3MnKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUNsYXNzRXhwcmVzc2lvbigpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdzdXBlcicpKSB7
CisgICAgICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRl
LmNyZWF0ZUlkZW50aWZpZXIoJ3N1cGVyJyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAodHlwZSA9PT0gVG9rZW4uQm9vbGVhbkxpdGVyYWwpIHsKKyAgICAgICAgICAg
IHRva2VuID0gbGV4KCk7CisgICAgICAgICAgICB0b2tlbi52YWx1ZSA9ICh0b2tlbi52YWx1ZSA9
PT0gJ3RydWUnKTsKKyAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVMaXRlcmFsKHRv
a2VuKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0eXBlID09PSBUb2tlbi5OdWxsTGl0ZXJh
bCkgeworICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTsKKyAgICAgICAgICAgIHRva2VuLnZhbHVl
ID0gbnVsbDsKKyAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVMaXRlcmFsKHRva2Vu
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtYXRjaCgnWycpKSB7CisgICAgICAgICAgICBy
ZXR1cm4gcGFyc2VBcnJheUluaXRpYWxpc2VyKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
bWF0Y2goJ3snKSkgeworICAgICAgICAgICAgcmV0dXJuIHBhcnNlT2JqZWN0SW5pdGlhbGlzZXIo
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtYXRjaCgnKCcpKSB7CisgICAgICAgICAgICBy
ZXR1cm4gcGFyc2VHcm91cEV4cHJlc3Npb24oKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICht
YXRjaCgnLycpIHx8IG1hdGNoKCcvPScpKSB7CisgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUu
Y3JlYXRlTGl0ZXJhbChzY2FuUmVnRXhwKCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHR5
cGUgPT09IFRva2VuLlRlbXBsYXRlKSB7CisgICAgICAgICAgICByZXR1cm4gcGFyc2VUZW1wbGF0
ZUxpdGVyYWwoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtYXRjaCgnPCcpKSB7CisgICAg
ICAgICAgICByZXR1cm4gcGFyc2VYSlNFbGVtZW50KCk7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gdGhyb3dVbmV4cGVjdGVkKGxleCgpKTsKKyAgICB9CisKKyAgICAvLyAxMS4yIExlZnQt
SGFuZC1TaWRlIEV4cHJlc3Npb25zCisKKyAgICBmdW5jdGlvbiBwYXJzZUFyZ3VtZW50cygpIHsK
KyAgICAgICAgdmFyIGFyZ3MgPSBbXSwgYXJnOworCisgICAgICAgIGV4cGVjdCgnKCcpOworCisg
ICAgICAgIGlmICghbWF0Y2goJyknKSkgeworICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVu
Z3RoKSB7CisgICAgICAgICAgICAgICAgYXJnID0gcGFyc2VTcHJlYWRPckFzc2lnbm1lbnRFeHBy
ZXNzaW9uKCk7CisgICAgICAgICAgICAgICAgYXJncy5wdXNoKGFyZyk7CisKKyAgICAgICAgICAg
ICAgICBpZiAobWF0Y2goJyknKSkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKGFyZy50eXBlID09PSBTeW50YXguU3ByZWFkRWxlbWVudCkg
eworICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5FbGVtZW50QWZ0
ZXJTcHJlYWRFbGVtZW50KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBl
eHBlY3QoJywnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGV4cGVjdCgn
KScpOworCisgICAgICAgIHJldHVybiBhcmdzOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNl
U3ByZWFkT3JBc3NpZ25tZW50RXhwcmVzc2lvbigpIHsKKyAgICAgICAgaWYgKG1hdGNoKCcuLi4n
KSkgeworICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3Jl
YXRlU3ByZWFkRWxlbWVudChwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCkpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gcGFyc2VOb25Db21wdXRlZFByb3BlcnR5KCkgeworICAgICAgICB2YXIgdG9r
ZW4gPSBsZXgoKTsKKworICAgICAgICBpZiAoIWlzSWRlbnRpZmllck5hbWUodG9rZW4pKSB7Cisg
ICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUlkZW50aWZpZXIodG9rZW4udmFsdWUpOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIHBhcnNlTm9uQ29tcHV0ZWRNZW1iZXIoKSB7CisgICAgICAgIGV4cGVjdCgn
LicpOworCisgICAgICAgIHJldHVybiBwYXJzZU5vbkNvbXB1dGVkUHJvcGVydHkoKTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBwYXJzZUNvbXB1dGVkTWVtYmVyKCkgeworICAgICAgICB2YXIgZXhw
cjsKKworICAgICAgICBleHBlY3QoJ1snKTsKKworICAgICAgICBleHByID0gcGFyc2VFeHByZXNz
aW9uKCk7CisKKyAgICAgICAgZXhwZWN0KCddJyk7CisKKyAgICAgICAgcmV0dXJuIGV4cHI7Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VOZXdFeHByZXNzaW9uKCkgeworICAgICAgICB2YXIg
Y2FsbGVlLCBhcmdzOworCisgICAgICAgIGV4cGVjdEtleXdvcmQoJ25ldycpOworICAgICAgICBj
YWxsZWUgPSBwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb24oKTsKKyAgICAgICAgYXJncyA9IG1h
dGNoKCcoJykgPyBwYXJzZUFyZ3VtZW50cygpIDogW107CisKKyAgICAgICAgcmV0dXJuIGRlbGVn
YXRlLmNyZWF0ZU5ld0V4cHJlc3Npb24oY2FsbGVlLCBhcmdzKTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxvd0NhbGwoKSB7CisgICAgICAgIHZh
ciBleHByLCBhcmdzLCBwcm9wZXJ0eTsKKworICAgICAgICBleHByID0gbWF0Y2hLZXl3b3JkKCdu
ZXcnKSA/IHBhcnNlTmV3RXhwcmVzc2lvbigpIDogcGFyc2VQcmltYXJ5RXhwcmVzc2lvbigpOwor
CisgICAgICAgIHdoaWxlIChtYXRjaCgnLicpIHx8IG1hdGNoKCdbJykgfHwgbWF0Y2goJygnKSB8
fCBsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uVGVtcGxhdGUpIHsKKyAgICAgICAgICAgIGlmICht
YXRjaCgnKCcpKSB7CisgICAgICAgICAgICAgICAgYXJncyA9IHBhcnNlQXJndW1lbnRzKCk7Cisg
ICAgICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZUNhbGxFeHByZXNzaW9uKGV4cHIs
IGFyZ3MpOworICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaCgnWycpKSB7CisgICAgICAgICAg
ICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZU1lbWJlckV4cHJlc3Npb24oJ1snLCBleHByLCBw
YXJzZUNvbXB1dGVkTWVtYmVyKCkpOworICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaCgnLicp
KSB7CisgICAgICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZU1lbWJlckV4cHJlc3Np
b24oJy4nLCBleHByLCBwYXJzZU5vbkNvbXB1dGVkTWVtYmVyKCkpOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlVGFnZ2VkVGVtcGxh
dGVFeHByZXNzaW9uKGV4cHIsIHBhcnNlVGVtcGxhdGVMaXRlcmFsKCkpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGV4cHI7CisgICAgfQorCisKKyAgICBmdW5j
dGlvbiBwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb24oKSB7CisgICAgICAgIHZhciBleHByLCBw
cm9wZXJ0eTsKKworICAgICAgICBleHByID0gbWF0Y2hLZXl3b3JkKCduZXcnKSA/IHBhcnNlTmV3
RXhwcmVzc2lvbigpIDogcGFyc2VQcmltYXJ5RXhwcmVzc2lvbigpOworCisgICAgICAgIHdoaWxl
IChtYXRjaCgnLicpIHx8IG1hdGNoKCdbJykgfHwgbG9va2FoZWFkLnR5cGUgPT09IFRva2VuLlRl
bXBsYXRlKSB7CisgICAgICAgICAgICBpZiAobWF0Y2goJ1snKSkgeworICAgICAgICAgICAgICAg
IGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVNZW1iZXJFeHByZXNzaW9uKCdbJywgZXhwciwgcGFyc2VD
b21wdXRlZE1lbWJlcigpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJy4nKSkgewor
ICAgICAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVNZW1iZXJFeHByZXNzaW9uKCcu
JywgZXhwciwgcGFyc2VOb25Db21wdXRlZE1lbWJlcigpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZVRhZ2dlZFRlbXBsYXRlRXhw
cmVzc2lvbihleHByLCBwYXJzZVRlbXBsYXRlTGl0ZXJhbCgpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBleHByOworICAgIH0KKworICAgIC8vIDExLjMgUG9z
dGZpeCBFeHByZXNzaW9ucworCisgICAgZnVuY3Rpb24gcGFyc2VQb3N0Zml4RXhwcmVzc2lvbigp
IHsKKyAgICAgICAgdmFyIGV4cHIgPSBwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxvd0Nh
bGwoKSwKKyAgICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkOworCisgICAgICAgIGlmIChsb29r
YWhlYWQudHlwZSAhPT0gVG9rZW4uUHVuY3R1YXRvcikgeworICAgICAgICAgICAgcmV0dXJuIGV4
cHI7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKG1hdGNoKCcrKycpIHx8IG1hdGNoKCctLScp
KSAmJiAhcGVla0xpbmVUZXJtaW5hdG9yKCkpIHsKKyAgICAgICAgICAgIC8vIDExLjMuMSwgMTEu
My4yCisgICAgICAgICAgICBpZiAoc3RyaWN0ICYmIGV4cHIudHlwZSA9PT0gU3ludGF4LklkZW50
aWZpZXIgJiYgaXNSZXN0cmljdGVkV29yZChleHByLm5hbWUpKSB7CisgICAgICAgICAgICAgICAg
dGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJpY3RMSFNQb3N0Zml4KTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFpc0xlZnRIYW5kU2lkZShleHByKSkgeworICAg
ICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLkludmFsaWRMSFNJbkFzc2lnbm1l
bnQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0b2tlbiA9IGxleCgpOworICAgICAg
ICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZVBvc3RmaXhFeHByZXNzaW9uKHRva2VuLnZhbHVl
LCBleHByKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBleHByOworICAgIH0KKworICAg
IC8vIDExLjQgVW5hcnkgT3BlcmF0b3JzCisKKyAgICBmdW5jdGlvbiBwYXJzZVVuYXJ5RXhwcmVz
c2lvbigpIHsKKyAgICAgICAgdmFyIHRva2VuLCBleHByOworCisgICAgICAgIGlmIChsb29rYWhl
YWQudHlwZSAhPT0gVG9rZW4uUHVuY3R1YXRvciAmJiBsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4u
S2V5d29yZCkgeworICAgICAgICAgICAgcmV0dXJuIHBhcnNlUG9zdGZpeEV4cHJlc3Npb24oKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChtYXRjaCgnKysnKSB8fCBtYXRjaCgnLS0nKSkgewor
ICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTsKKyAgICAgICAgICAgIGV4cHIgPSBwYXJzZVVuYXJ5
RXhwcmVzc2lvbigpOworICAgICAgICAgICAgLy8gMTEuNC40LCAxMS40LjUKKyAgICAgICAgICAg
IGlmIChzdHJpY3QgJiYgZXhwci50eXBlID09PSBTeW50YXguSWRlbnRpZmllciAmJiBpc1Jlc3Ry
aWN0ZWRXb3JkKGV4cHIubmFtZSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJh
bnQoe30sIE1lc3NhZ2VzLlN0cmljdExIU1ByZWZpeCk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmICghaXNMZWZ0SGFuZFNpZGUoZXhwcikpIHsKKyAgICAgICAgICAgICAgICB0aHJv
d0Vycm9yKHt9LCBNZXNzYWdlcy5JbnZhbGlkTEhTSW5Bc3NpZ25tZW50KTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVVuYXJ5RXhwcmVzc2lvbih0
b2tlbi52YWx1ZSwgZXhwcik7CisgICAgICAgIH0KKworICAgICAgICBpZiAobWF0Y2goJysnKSB8
fCBtYXRjaCgnLScpIHx8IG1hdGNoKCd+JykgfHwgbWF0Y2goJyEnKSkgeworICAgICAgICAgICAg
dG9rZW4gPSBsZXgoKTsKKyAgICAgICAgICAgIGV4cHIgPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigp
OworICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVVuYXJ5RXhwcmVzc2lvbih0b2tl
bi52YWx1ZSwgZXhwcik7CisgICAgICAgIH0KKworICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdk
ZWxldGUnKSB8fCBtYXRjaEtleXdvcmQoJ3ZvaWQnKSB8fCBtYXRjaEtleXdvcmQoJ3R5cGVvZicp
KSB7CisgICAgICAgICAgICB0b2tlbiA9IGxleCgpOworICAgICAgICAgICAgZXhwciA9IHBhcnNl
VW5hcnlFeHByZXNzaW9uKCk7CisgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlVW5h
cnlFeHByZXNzaW9uKHRva2VuLnZhbHVlLCBleHByKTsKKyAgICAgICAgICAgIGlmIChzdHJpY3Qg
JiYgZXhwci5vcGVyYXRvciA9PT0gJ2RlbGV0ZScgJiYgZXhwci5hcmd1bWVudC50eXBlID09PSBT
eW50YXguSWRlbnRpZmllcikgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7
fSwgTWVzc2FnZXMuU3RyaWN0RGVsZXRlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiBleHByOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHBhcnNlUG9zdGZpeEV4cHJl
c3Npb24oKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBiaW5hcnlQcmVjZWRlbmNlKHRva2VuLCBh
bGxvd0luKSB7CisgICAgICAgIHZhciBwcmVjID0gMDsKKworICAgICAgICBpZiAodG9rZW4udHlw
ZSAhPT0gVG9rZW4uUHVuY3R1YXRvciAmJiB0b2tlbi50eXBlICE9PSBUb2tlbi5LZXl3b3JkKSB7
CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAodG9r
ZW4udmFsdWUpIHsKKyAgICAgICAgY2FzZSAnfHwnOgorICAgICAgICAgICAgcHJlYyA9IDE7Cisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlICcmJic6CisgICAgICAgICAgICBwcmVj
ID0gMjsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgJ3wnOgorICAgICAgICAg
ICAgcHJlYyA9IDM7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlICdeJzoKKyAg
ICAgICAgICAgIHByZWMgPSA0OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAn
Jic6CisgICAgICAgICAgICBwcmVjID0gNTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGNhc2UgJz09JzoKKyAgICAgICAgY2FzZSAnIT0nOgorICAgICAgICBjYXNlICc9PT0nOgorICAg
ICAgICBjYXNlICchPT0nOgorICAgICAgICAgICAgcHJlYyA9IDY7CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBjYXNlICc8JzoKKyAgICAgICAgY2FzZSAnPic6CisgICAgICAgIGNhc2Ug
Jzw9JzoKKyAgICAgICAgY2FzZSAnPj0nOgorICAgICAgICBjYXNlICdpbnN0YW5jZW9mJzoKKyAg
ICAgICAgICAgIHByZWMgPSA3OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAn
aW4nOgorICAgICAgICAgICAgcHJlYyA9IGFsbG93SW4gPyA3IDogMDsKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGNhc2UgJzw8JzoKKyAgICAgICAgY2FzZSAnPj4nOgorICAgICAgICBj
YXNlICc+Pj4nOgorICAgICAgICAgICAgcHJlYyA9IDg7CisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBjYXNlICcrJzoKKyAgICAgICAgY2FzZSAnLSc6CisgICAgICAgICAgICBwcmVjID0g
OTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgJyonOgorICAgICAgICBjYXNl
ICcvJzoKKyAgICAgICAgY2FzZSAnJSc6CisgICAgICAgICAgICBwcmVjID0gMTE7CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gcHJlYzsKKyAgICB9CisKKyAgICAvLyAxMS41IE11bHRp
cGxpY2F0aXZlIE9wZXJhdG9ycworICAgIC8vIDExLjYgQWRkaXRpdmUgT3BlcmF0b3JzCisgICAg
Ly8gMTEuNyBCaXR3aXNlIFNoaWZ0IE9wZXJhdG9ycworICAgIC8vIDExLjggUmVsYXRpb25hbCBP
cGVyYXRvcnMKKyAgICAvLyAxMS45IEVxdWFsaXR5IE9wZXJhdG9ycworICAgIC8vIDExLjEwIEJp
bmFyeSBCaXR3aXNlIE9wZXJhdG9ycworICAgIC8vIDExLjExIEJpbmFyeSBMb2dpY2FsIE9wZXJh
dG9ycworCisgICAgZnVuY3Rpb24gcGFyc2VCaW5hcnlFeHByZXNzaW9uKCkgeworICAgICAgICB2
YXIgZXhwciwgdG9rZW4sIHByZWMsIHByZXZpb3VzQWxsb3dJbiwgc3RhY2ssIHJpZ2h0LCBvcGVy
YXRvciwgbGVmdCwgaTsKKworICAgICAgICBwcmV2aW91c0FsbG93SW4gPSBzdGF0ZS5hbGxvd0lu
OworICAgICAgICBzdGF0ZS5hbGxvd0luID0gdHJ1ZTsKKworICAgICAgICBleHByID0gcGFyc2VV
bmFyeUV4cHJlc3Npb24oKTsKKworICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAg
cHJlYyA9IGJpbmFyeVByZWNlZGVuY2UodG9rZW4sIHByZXZpb3VzQWxsb3dJbik7CisgICAgICAg
IGlmIChwcmVjID09PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gZXhwcjsKKyAgICAgICAgfQor
ICAgICAgICB0b2tlbi5wcmVjID0gcHJlYzsKKyAgICAgICAgbGV4KCk7CisKKyAgICAgICAgc3Rh
Y2sgPSBbZXhwciwgdG9rZW4sIHBhcnNlVW5hcnlFeHByZXNzaW9uKCldOworCisgICAgICAgIHdo
aWxlICgocHJlYyA9IGJpbmFyeVByZWNlZGVuY2UobG9va2FoZWFkLCBwcmV2aW91c0FsbG93SW4p
KSA+IDApIHsKKworICAgICAgICAgICAgLy8gUmVkdWNlOiBtYWtlIGEgYmluYXJ5IGV4cHJlc3Np
b24gZnJvbSB0aGUgdGhyZWUgdG9wbW9zdCBlbnRyaWVzLgorICAgICAgICAgICAgd2hpbGUgKChz
dGFjay5sZW5ndGggPiAyKSAmJiAocHJlYyA8PSBzdGFja1tzdGFjay5sZW5ndGggLSAyXS5wcmVj
KSkgeworICAgICAgICAgICAgICAgIHJpZ2h0ID0gc3RhY2sucG9wKCk7CisgICAgICAgICAgICAg
ICAgb3BlcmF0b3IgPSBzdGFjay5wb3AoKS52YWx1ZTsKKyAgICAgICAgICAgICAgICBsZWZ0ID0g
c3RhY2sucG9wKCk7CisgICAgICAgICAgICAgICAgc3RhY2sucHVzaChkZWxlZ2F0ZS5jcmVhdGVC
aW5hcnlFeHByZXNzaW9uKG9wZXJhdG9yLCBsZWZ0LCByaWdodCkpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvLyBTaGlmdC4KKyAgICAgICAgICAgIHRva2VuID0gbGV4KCk7CisgICAg
ICAgICAgICB0b2tlbi5wcmVjID0gcHJlYzsKKyAgICAgICAgICAgIHN0YWNrLnB1c2godG9rZW4p
OworICAgICAgICAgICAgc3RhY2sucHVzaChwYXJzZVVuYXJ5RXhwcmVzc2lvbigpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHN0YXRlLmFsbG93SW4gPSBwcmV2aW91c0FsbG93SW47CisKKyAgICAg
ICAgLy8gRmluYWwgcmVkdWNlIHRvIGNsZWFuLXVwIHRoZSBzdGFjay4KKyAgICAgICAgaSA9IHN0
YWNrLmxlbmd0aCAtIDE7CisgICAgICAgIGV4cHIgPSBzdGFja1tpXTsKKyAgICAgICAgd2hpbGUg
KGkgPiAxKSB7CisgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlQmluYXJ5RXhwcmVz
c2lvbihzdGFja1tpIC0gMV0udmFsdWUsIHN0YWNrW2kgLSAyXSwgZXhwcik7CisgICAgICAgICAg
ICBpIC09IDI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGV4cHI7CisgICAgfQorCisKKyAg
ICAvLyAxMS4xMiBDb25kaXRpb25hbCBPcGVyYXRvcgorCisgICAgZnVuY3Rpb24gcGFyc2VDb25k
aXRpb25hbEV4cHJlc3Npb24oKSB7CisgICAgICAgIHZhciBleHByLCBwcmV2aW91c0FsbG93SW4s
IGNvbnNlcXVlbnQsIGFsdGVybmF0ZTsKKworICAgICAgICBleHByID0gcGFyc2VCaW5hcnlFeHBy
ZXNzaW9uKCk7CisKKyAgICAgICAgaWYgKG1hdGNoKCc/JykpIHsKKyAgICAgICAgICAgIGxleCgp
OworICAgICAgICAgICAgcHJldmlvdXNBbGxvd0luID0gc3RhdGUuYWxsb3dJbjsKKyAgICAgICAg
ICAgIHN0YXRlLmFsbG93SW4gPSB0cnVlOworICAgICAgICAgICAgY29uc2VxdWVudCA9IHBhcnNl
QXNzaWdubWVudEV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIHN0YXRlLmFsbG93SW4gPSBwcmV2
aW91c0FsbG93SW47CisgICAgICAgICAgICBleHBlY3QoJzonKTsKKyAgICAgICAgICAgIGFsdGVy
bmF0ZSA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKKworICAgICAgICAgICAgZXhwciA9
IGRlbGVnYXRlLmNyZWF0ZUNvbmRpdGlvbmFsRXhwcmVzc2lvbihleHByLCBjb25zZXF1ZW50LCBh
bHRlcm5hdGUpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGV4cHI7CisgICAgfQorCisg
ICAgLy8gMTEuMTMgQXNzaWdubWVudCBPcGVyYXRvcnMKKworICAgIGZ1bmN0aW9uIHJlaW50ZXJw
cmV0QXNBc3NpZ25tZW50QmluZGluZ1BhdHRlcm4oZXhwcikgeworICAgICAgICB2YXIgaSwgbGVu
LCBwcm9wZXJ0eSwgZWxlbWVudDsKKworICAgICAgICBpZiAoZXhwci50eXBlID09PSBTeW50YXgu
T2JqZWN0RXhwcmVzc2lvbikgeworICAgICAgICAgICAgZXhwci50eXBlID0gU3ludGF4Lk9iamVj
dFBhdHRlcm47CisgICAgICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBleHByLnByb3BlcnRpZXMu
bGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eSA9IGV4
cHIucHJvcGVydGllc1tpXTsKKyAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkua2luZCAhPT0g
J2luaXQnKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLklu
dmFsaWRMSFNJbkFzc2lnbm1lbnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICByZWludGVycHJldEFzQXNzaWdubWVudEJpbmRpbmdQYXR0ZXJuKHByb3BlcnR5LnZhbHVlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChleHByLnR5cGUgPT09IFN5bnRheC5B
cnJheUV4cHJlc3Npb24pIHsKKyAgICAgICAgICAgIGV4cHIudHlwZSA9IFN5bnRheC5BcnJheVBh
dHRlcm47CisgICAgICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBleHByLmVsZW1lbnRzLmxlbmd0
aDsgaSA8IGxlbjsgaSArPSAxKSB7CisgICAgICAgICAgICAgICAgZWxlbWVudCA9IGV4cHIuZWxl
bWVudHNbaV07CisgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmVpbnRlcnByZXRBc0Fzc2lnbm1lbnRCaW5kaW5nUGF0dGVybihlbGVtZW50KTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoZXhwci50
eXBlID09PSBTeW50YXguSWRlbnRpZmllcikgeworICAgICAgICAgICAgaWYgKGlzUmVzdHJpY3Rl
ZFdvcmQoZXhwci5uYW1lKSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3Nh
Z2VzLkludmFsaWRMSFNJbkFzc2lnbm1lbnQpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgaWYgKGV4cHIudHlwZSA9PT0gU3ludGF4LlNwcmVhZEVsZW1lbnQpIHsKKyAgICAgICAgICAg
IHJlaW50ZXJwcmV0QXNBc3NpZ25tZW50QmluZGluZ1BhdHRlcm4oZXhwci5hcmd1bWVudCk7Cisg
ICAgICAgICAgICBpZiAoZXhwci5hcmd1bWVudC50eXBlID09PSBTeW50YXguT2JqZWN0UGF0dGVy
bikgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLk9iamVjdFBhdHRl
cm5Bc1NwcmVhZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBpZiAoZXhwci50eXBlICE9PSBTeW50YXguTWVtYmVyRXhwcmVzc2lvbiAmJiBleHByLnR5cGUg
IT09IFN5bnRheC5DYWxsRXhwcmVzc2lvbiAmJiBleHByLnR5cGUgIT09IFN5bnRheC5OZXdFeHBy
ZXNzaW9uKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSW52YWxp
ZExIU0luQXNzaWdubWVudCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKwor
ICAgIGZ1bmN0aW9uIHJlaW50ZXJwcmV0QXNEZXN0cnVjdHVyZWRQYXJhbWV0ZXIob3B0aW9ucywg
ZXhwcikgeworICAgICAgICB2YXIgaSwgbGVuLCBwcm9wZXJ0eSwgZWxlbWVudDsKKworICAgICAg
ICBpZiAoZXhwci50eXBlID09PSBTeW50YXguT2JqZWN0RXhwcmVzc2lvbikgeworICAgICAgICAg
ICAgZXhwci50eXBlID0gU3ludGF4Lk9iamVjdFBhdHRlcm47CisgICAgICAgICAgICBmb3IgKGkg
PSAwLCBsZW4gPSBleHByLnByb3BlcnRpZXMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHsKKyAg
ICAgICAgICAgICAgICBwcm9wZXJ0eSA9IGV4cHIucHJvcGVydGllc1tpXTsKKyAgICAgICAgICAg
ICAgICBpZiAocHJvcGVydHkua2luZCAhPT0gJ2luaXQnKSB7CisgICAgICAgICAgICAgICAgICAg
IHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLkludmFsaWRMSFNJbkZvcm1hbHNMaXN0KTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRBc0Rlc3RydWN0dXJlZFBh
cmFtZXRlcihvcHRpb25zLCBwcm9wZXJ0eS52YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZSBpZiAoZXhwci50eXBlID09PSBTeW50YXguQXJyYXlFeHByZXNzaW9uKSB7CisgICAg
ICAgICAgICBleHByLnR5cGUgPSBTeW50YXguQXJyYXlQYXR0ZXJuOworICAgICAgICAgICAgZm9y
IChpID0gMCwgbGVuID0gZXhwci5lbGVtZW50cy5sZW5ndGg7IGkgPCBsZW47IGkgKz0gMSkgewor
ICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBleHByLmVsZW1lbnRzW2ldOworICAgICAgICAgICAg
ICAgIGlmIChlbGVtZW50KSB7CisgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0QXNEZXN0
cnVjdHVyZWRQYXJhbWV0ZXIob3B0aW9ucywgZWxlbWVudCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGV4cHIudHlwZSA9PT0gU3ludGF4Lklk
ZW50aWZpZXIpIHsKKyAgICAgICAgICAgIHZhbGlkYXRlUGFyYW0ob3B0aW9ucywgZXhwciwgZXhw
ci5uYW1lKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChleHByLnR5cGUgIT09
IFN5bnRheC5NZW1iZXJFeHByZXNzaW9uKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7
fSwgTWVzc2FnZXMuSW52YWxpZExIU0luRm9ybWFsc0xpc3QpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gcmVpbnRlcnByZXRBc0NvdmVyRm9ybWFsc0xp
c3QoZXhwcmVzc2lvbnMpIHsKKyAgICAgICAgdmFyIGksIGxlbiwgcGFyYW0sIHBhcmFtcywgb3B0
aW9ucywgcmVzdDsKKworICAgICAgICBwYXJhbXMgPSBbXTsKKyAgICAgICAgcmVzdCA9IG51bGw7
CisgICAgICAgIG9wdGlvbnMgPSB7CisgICAgICAgICAgICBwYXJhbVNldDoge30KKyAgICAgICAg
fTsKKworICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBleHByZXNzaW9ucy5sZW5ndGg7IGkgPCBs
ZW47IGkgKz0gMSkgeworICAgICAgICAgICAgcGFyYW0gPSBleHByZXNzaW9uc1tpXTsKKyAgICAg
ICAgICAgIGlmIChwYXJhbS50eXBlID09PSBTeW50YXguSWRlbnRpZmllcikgeworICAgICAgICAg
ICAgICAgIHBhcmFtcy5wdXNoKHBhcmFtKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZVBhcmFt
KG9wdGlvbnMsIHBhcmFtLCBwYXJhbS5uYW1lKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocGFy
YW0udHlwZSA9PT0gU3ludGF4Lk9iamVjdEV4cHJlc3Npb24gfHwgcGFyYW0udHlwZSA9PT0gU3lu
dGF4LkFycmF5RXhwcmVzc2lvbikgeworICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0QXNEZXN0
cnVjdHVyZWRQYXJhbWV0ZXIob3B0aW9ucywgcGFyYW0pOworICAgICAgICAgICAgICAgIHBhcmFt
cy5wdXNoKHBhcmFtKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0udHlwZSA9PT0gU3lu
dGF4LlNwcmVhZEVsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICBhc3NlcnQoaSA9PT0gbGVuIC0g
MSwgIkl0IGlzIGd1YXJhbnRlZWQgdGhhdCBTcHJlYWRFbGVtZW50IGlzIGxhc3QgZWxlbWVudCBi
eSBwYXJzZUV4cHJlc3Npb24iKTsKKyAgICAgICAgICAgICAgICByZWludGVycHJldEFzRGVzdHJ1
Y3R1cmVkUGFyYW1ldGVyKG9wdGlvbnMsIHBhcmFtLmFyZ3VtZW50KTsKKyAgICAgICAgICAgICAg
ICByZXN0ID0gcGFyYW0uYXJndW1lbnQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
aWYgKG9wdGlvbnMuZmlyc3RSZXN0cmljdGVkKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKG9w
dGlvbnMuZmlyc3RSZXN0cmljdGVkLCBvcHRpb25zLm1lc3NhZ2UpOworICAgICAgICB9CisgICAg
ICAgIGlmIChvcHRpb25zLnN0cmljdGVkKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJh
bnQob3B0aW9ucy5zdHJpY3RlZCwgb3B0aW9ucy5tZXNzYWdlKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiB7IHBhcmFtczogcGFyYW1zLCByZXN0OiByZXN0IH07CisgICAgfQorCisgICAg
ZnVuY3Rpb24gcGFyc2VBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbihvcHRpb25zKSB7CisgICAgICAg
IHZhciBwcmV2aW91c1N0cmljdCwgcHJldmlvdXNZaWVsZEFsbG93ZWQsIGJvZHk7CisKKyAgICAg
ICAgZXhwZWN0KCc9PicpOworCisgICAgICAgIHByZXZpb3VzU3RyaWN0ID0gc3RyaWN0OworICAg
ICAgICBwcmV2aW91c1lpZWxkQWxsb3dlZCA9IHN0YXRlLnlpZWxkQWxsb3dlZDsKKyAgICAgICAg
c3RyaWN0ID0gdHJ1ZTsKKyAgICAgICAgc3RhdGUueWllbGRBbGxvd2VkID0gZmFsc2U7CisgICAg
ICAgIGJvZHkgPSBwYXJzZUNvbmNpc2VCb2R5KCk7CisgICAgICAgIHN0cmljdCA9IHByZXZpb3Vz
U3RyaWN0OworICAgICAgICBzdGF0ZS55aWVsZEFsbG93ZWQgPSBwcmV2aW91c1lpZWxkQWxsb3dl
ZDsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlQXJyb3dGdW5jdGlvbkV4cHJlc3Np
b24ob3B0aW9ucy5wYXJhbXMsIFtdLCBib2R5LCBvcHRpb25zLnJlc3QsIGJvZHkudHlwZSAhPT0g
U3ludGF4LkJsb2NrU3RhdGVtZW50KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZUFzc2ln
bm1lbnRFeHByZXNzaW9uKCkgeworICAgICAgICB2YXIgZXhwciwgdG9rZW4sIHBhcmFtcywgb2xk
UGFyZW50aGVzaXplZENvdW50OworCisgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ3lpZWxkJykp
IHsKKyAgICAgICAgICAgIHJldHVybiBwYXJzZVlpZWxkRXhwcmVzc2lvbigpOworICAgICAgICB9
CisKKyAgICAgICAgb2xkUGFyZW50aGVzaXplZENvdW50ID0gc3RhdGUucGFyZW50aGVzaXplZENv
dW50OworCisgICAgICAgIGlmIChtYXRjaCgnKCcpKSB7CisgICAgICAgICAgICB0b2tlbiA9IGxv
b2thaGVhZDIoKTsKKyAgICAgICAgICAgIGlmICgodG9rZW4udHlwZSA9PT0gVG9rZW4uUHVuY3R1
YXRvciAmJiB0b2tlbi52YWx1ZSA9PT0gJyknKSB8fCB0b2tlbi52YWx1ZSA9PT0gJy4uLicpIHsK
KyAgICAgICAgICAgICAgICBwYXJhbXMgPSBwYXJzZVBhcmFtcygpOworICAgICAgICAgICAgICAg
IGlmICghbWF0Y2goJz0+JykpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVk
KGxleCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNl
QXJyb3dGdW5jdGlvbkV4cHJlc3Npb24ocGFyYW1zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIHRva2VuID0gbG9va2FoZWFkOworICAgICAgICBleHByID0gcGFyc2VDb25k
aXRpb25hbEV4cHJlc3Npb24oKTsKKworICAgICAgICBpZiAobWF0Y2goJz0+JykgJiYgZXhwci50
eXBlID09PSBTeW50YXguSWRlbnRpZmllcikgeworICAgICAgICAgICAgaWYgKHN0YXRlLnBhcmVu
dGhlc2l6ZWRDb3VudCA9PT0gb2xkUGFyZW50aGVzaXplZENvdW50IHx8IHN0YXRlLnBhcmVudGhl
c2l6ZWRDb3VudCA9PT0gKG9sZFBhcmVudGhlc2l6ZWRDb3VudCArIDEpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGlzUmVzdHJpY3RlZFdvcmQoZXhwci5uYW1lKSkgeworICAgICAgICAgICAgICAg
ICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5TdHJpY3RQYXJhbU5hbWUpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VBcnJvd0Z1bmN0aW9uRXhwcmVz
c2lvbih7IHBhcmFtczogWyBleHByIF0sIHJlc3Q6IG51bGwgfSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAobWF0Y2hBc3NpZ24oKSkgeworICAgICAgICAgICAgLy8g
MTEuMTMuMQorICAgICAgICAgICAgaWYgKHN0cmljdCAmJiBleHByLnR5cGUgPT09IFN5bnRheC5J
ZGVudGlmaWVyICYmIGlzUmVzdHJpY3RlZFdvcmQoZXhwci5uYW1lKSkgeworICAgICAgICAgICAg
ICAgIHRocm93RXJyb3JUb2xlcmFudCh0b2tlbiwgTWVzc2FnZXMuU3RyaWN0TEhTQXNzaWdubWVu
dCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEVTLm5leHQgZHJhZiAxMS4xMyBS
dW50aW1lIFNlbWFudGljcyBzdGVwIDEKKyAgICAgICAgICAgIGlmIChtYXRjaCgnPScpICYmIChl
eHByLnR5cGUgPT09IFN5bnRheC5PYmplY3RFeHByZXNzaW9uIHx8IGV4cHIudHlwZSA9PT0gU3lu
dGF4LkFycmF5RXhwcmVzc2lvbikpIHsKKyAgICAgICAgICAgICAgICByZWludGVycHJldEFzQXNz
aWdubWVudEJpbmRpbmdQYXR0ZXJuKGV4cHIpOworICAgICAgICAgICAgfSBlbHNlIGlmICghaXNM
ZWZ0SGFuZFNpZGUoZXhwcikpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNz
YWdlcy5JbnZhbGlkTEhTSW5Bc3NpZ25tZW50KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZUFzc2lnbm1lbnRFeHByZXNzaW9uKGxleCgpLnZhbHVl
LCBleHByLCBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCkpOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIGV4cHI7CisgICAgfQorCisgICAgLy8gMTEuMTQgQ29tbWEgT3BlcmF0b3IKKwor
ICAgIGZ1bmN0aW9uIHBhcnNlRXhwcmVzc2lvbigpIHsKKyAgICAgICAgdmFyIGV4cHIsIGV4cHJl
c3Npb25zLCBzZXF1ZW5jZSwgY292ZXJGb3JtYWxzTGlzdCwgc3ByZWFkRm91bmQsIHRva2VuOwor
CisgICAgICAgIGV4cHIgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisgICAgICAgIGV4
cHJlc3Npb25zID0gWyBleHByIF07CisKKyAgICAgICAgaWYgKG1hdGNoKCcsJykpIHsKKyAgICAg
ICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgICAgIGlmICghbWF0
Y2goJywnKSkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgICAgICBleHByID0gcGFyc2VT
cHJlYWRPckFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisgICAgICAgICAgICAgICAgZXhwcmVzc2lv
bnMucHVzaChleHByKTsKKworICAgICAgICAgICAgICAgIGlmIChleHByLnR5cGUgPT09IFN5bnRh
eC5TcHJlYWRFbGVtZW50KSB7CisgICAgICAgICAgICAgICAgICAgIHNwcmVhZEZvdW5kID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXRjaCgnKScpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5FbGVtZW50QWZ0ZXJTcHJlYWRFbGVt
ZW50KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNlcXVlbmNl
ID0gZGVsZWdhdGUuY3JlYXRlU2VxdWVuY2VFeHByZXNzaW9uKGV4cHJlc3Npb25zKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChzdGF0ZS5hbGxvd0Fycm93RnVuY3Rpb24gJiYgbWF0Y2goJykn
KSkgeworICAgICAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQyKCk7CisgICAgICAgICAgICBpZiAo
dG9rZW4udmFsdWUgPT09ICc9PicpIHsKKyAgICAgICAgICAgICAgICBsZXgoKTsKKworICAgICAg
ICAgICAgICAgIHN0YXRlLmFsbG93QXJyb3dGdW5jdGlvbiA9IGZhbHNlOworICAgICAgICAgICAg
ICAgIGV4cHIgPSBleHByZXNzaW9uczsKKyAgICAgICAgICAgICAgICBjb3ZlckZvcm1hbHNMaXN0
ID0gcmVpbnRlcnByZXRBc0NvdmVyRm9ybWFsc0xpc3QoZXhwcik7CisgICAgICAgICAgICAgICAg
aWYgKGNvdmVyRm9ybWFsc0xpc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNl
QXJyb3dGdW5jdGlvbkV4cHJlc3Npb24oY292ZXJGb3JtYWxzTGlzdCk7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKHRva2VuKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChzcHJlYWRGb3VuZCkgeworICAgICAgICAg
ICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSWxsZWdhbFNwcmVhZCk7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gc2VxdWVuY2UgfHwgZXhwcjsKKyAgICB9CisKKyAgICAvLyAxMi4xIEJs
b2NrCisKKyAgICBmdW5jdGlvbiBwYXJzZVN0YXRlbWVudExpc3QoKSB7CisgICAgICAgIHZhciBs
aXN0ID0gW10sCisgICAgICAgICAgICBzdGF0ZW1lbnQ7CisKKyAgICAgICAgd2hpbGUgKGluZGV4
IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAobWF0Y2goJ30nKSkgeworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhdGVtZW50ID0gcGFyc2VT
b3VyY2VFbGVtZW50KCk7CisgICAgICAgICAgICBpZiAodHlwZW9mIHN0YXRlbWVudCA9PT0gJ3Vu
ZGVmaW5lZCcpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGxpc3QucHVzaChzdGF0ZW1lbnQpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IGxpc3Q7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VCbG9jaygpIHsKKyAgICAgICAgdmFy
IGJsb2NrOworCisgICAgICAgIGV4cGVjdCgneycpOworCisgICAgICAgIGJsb2NrID0gcGFyc2VT
dGF0ZW1lbnRMaXN0KCk7CisKKyAgICAgICAgZXhwZWN0KCd9Jyk7CisKKyAgICAgICAgcmV0dXJu
IGRlbGVnYXRlLmNyZWF0ZUJsb2NrU3RhdGVtZW50KGJsb2NrKTsKKyAgICB9CisKKyAgICAvLyAx
Mi4yIFZhcmlhYmxlIFN0YXRlbWVudAorCisgICAgZnVuY3Rpb24gcGFyc2VWYXJpYWJsZUlkZW50
aWZpZXIoKSB7CisgICAgICAgIHZhciB0b2tlbiA9IGxleCgpOworCisgICAgICAgIGlmICh0b2tl
bi50eXBlICE9PSBUb2tlbi5JZGVudGlmaWVyKSB7CisgICAgICAgICAgICB0aHJvd1VuZXhwZWN0
ZWQodG9rZW4pOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUlk
ZW50aWZpZXIodG9rZW4udmFsdWUpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlVmFyaWFi
bGVEZWNsYXJhdGlvbihraW5kKSB7CisgICAgICAgIHZhciBpZCwKKyAgICAgICAgICAgIGluaXQg
PSBudWxsOworICAgICAgICBpZiAobWF0Y2goJ3snKSkgeworICAgICAgICAgICAgaWQgPSBwYXJz
ZU9iamVjdEluaXRpYWxpc2VyKCk7CisgICAgICAgICAgICByZWludGVycHJldEFzQXNzaWdubWVu
dEJpbmRpbmdQYXR0ZXJuKGlkKTsKKyAgICAgICAgfSBlbHNlIGlmIChtYXRjaCgnWycpKSB7Cisg
ICAgICAgICAgICBpZCA9IHBhcnNlQXJyYXlJbml0aWFsaXNlcigpOworICAgICAgICAgICAgcmVp
bnRlcnByZXRBc0Fzc2lnbm1lbnRCaW5kaW5nUGF0dGVybihpZCk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBpZCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7CisgICAgICAgICAg
ICAvLyAxMi4yLjEKKyAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgaXNSZXN0cmljdGVkV29yZChp
ZC5uYW1lKSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2Fn
ZXMuU3RyaWN0VmFyTmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoa2luZCA9PT0gJ2NvbnN0JykgeworICAgICAgICAgICAgaWYgKCFtYXRjaCgnPScpKSB7Cisg
ICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuTm9VbmludGlhbGl6ZWRDb25z
dCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBleHBlY3QoJz0nKTsKKyAgICAgICAgICAg
IGluaXQgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisgICAgICAgIH0gZWxzZSBpZiAo
bWF0Y2goJz0nKSkgeworICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICBpbml0ID0gcGFy
c2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRl
bGVnYXRlLmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRvcihpZCwgaW5pdCk7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdChraW5kKSB7CisgICAgICAgIHZh
ciBsaXN0ID0gW107CisKKyAgICAgICAgZG8geworICAgICAgICAgICAgbGlzdC5wdXNoKHBhcnNl
VmFyaWFibGVEZWNsYXJhdGlvbihraW5kKSk7CisgICAgICAgICAgICBpZiAoIW1hdGNoKCcsJykp
IHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxl
eCgpOworICAgICAgICB9IHdoaWxlIChpbmRleCA8IGxlbmd0aCk7CisKKyAgICAgICAgcmV0dXJu
IGxpc3Q7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VWYXJpYWJsZVN0YXRlbWVudCgpIHsK
KyAgICAgICAgdmFyIGRlY2xhcmF0aW9uczsKKworICAgICAgICBleHBlY3RLZXl3b3JkKCd2YXIn
KTsKKworICAgICAgICBkZWNsYXJhdGlvbnMgPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0
KCk7CisKKyAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOworCisgICAgICAgIHJldHVybiBkZWxl
Z2F0ZS5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucywgJ3ZhcicpOworICAg
IH0KKworICAgIC8vIGtpbmQgbWF5IGJlIGBjb25zdGAgb3IgYGxldGAKKyAgICAvLyBCb3RoIGFy
ZSBleHBlcmltZW50YWwgYW5kIG5vdCBpbiB0aGUgc3BlY2lmaWNhdGlvbiB5ZXQuCisgICAgLy8g
c2VlIGh0dHA6Ly93aWtpLmVjbWFzY3JpcHQub3JnL2Rva3UucGhwP2lkPWhhcm1vbnk6Y29uc3QK
KyAgICAvLyBhbmQgaHR0cDovL3dpa2kuZWNtYXNjcmlwdC5vcmcvZG9rdS5waHA/aWQ9aGFybW9u
eTpsZXQKKyAgICBmdW5jdGlvbiBwYXJzZUNvbnN0TGV0RGVjbGFyYXRpb24oa2luZCkgeworICAg
ICAgICB2YXIgZGVjbGFyYXRpb25zOworCisgICAgICAgIGV4cGVjdEtleXdvcmQoa2luZCk7CisK
KyAgICAgICAgZGVjbGFyYXRpb25zID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdChraW5k
KTsKKworICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7CisKKyAgICAgICAgcmV0dXJuIGRlbGVn
YXRlLmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbGFyYXRpb25zLCBraW5kKTsKKyAgICB9
CisKKyAgICAvLyBodHRwOi8vd2lraS5lY21hc2NyaXB0Lm9yZy9kb2t1LnBocD9pZD1oYXJtb255
Om1vZHVsZXMKKworICAgIGZ1bmN0aW9uIHBhcnNlUGF0aCgpIHsKKyAgICAgICAgdmFyIGJvZHkg
PSBbXTsKKworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgYm9keS5wdXNoKHBh
cnNlVmFyaWFibGVJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgaWYgKCFtYXRjaCgnLicpKSB7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsZXgo
KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVQYXRoKGJvZHkp
OworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlR2xvYigpIHsKKyAgICAgICAgZXhwZWN0KCcq
Jyk7CisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVHbG9iKCk7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gcGFyc2VNb2R1bGVEZWNsYXJhdGlvbigpIHsKKyAgICAgICAgdmFyIGlkLCB0b2tl
biwgZnJvbSA9IG51bGw7CisKKyAgICAgICAgbGV4KCk7CisKKyAgICAgICAgaWQgPSBwYXJzZVZh
cmlhYmxlSWRlbnRpZmllcigpOworCisgICAgICAgIGlmIChtYXRjaCgneycpKSB7CisgICAgICAg
ICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlTW9kdWxlRGVjbGFyYXRpb24oaWQsIGZyb20sIHBh
cnNlTW9kdWxlQmxvY2soKSk7CisgICAgICAgIH0KKworICAgICAgICBleHBlY3QoJz0nKTsKKwor
ICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRv
a2VuLlN0cmluZ0xpdGVyYWwpIHsKKyAgICAgICAgICAgIGZyb20gPSBwYXJzZVByaW1hcnlFeHBy
ZXNzaW9uKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmcm9tID0gcGFyc2VQYXRo
KCk7CisgICAgICAgIH0KKworICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7CisKKyAgICAgICAg
cmV0dXJuIGRlbGVnYXRlLmNyZWF0ZU1vZHVsZURlY2xhcmF0aW9uKGlkLCBmcm9tLCBudWxsKTsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZUV4cG9ydFNwZWNpZmllclNldFByb3BlcnR5KCkg
eworICAgICAgICB2YXIgaWQsIGZyb20gPSBudWxsOworCisgICAgICAgIGlkID0gcGFyc2VWYXJp
YWJsZUlkZW50aWZpZXIoKTsKKworICAgICAgICBpZiAobWF0Y2goJzonKSkgeworICAgICAgICAg
ICAgbGV4KCk7CisgICAgICAgICAgICBmcm9tID0gcGFyc2VQYXRoKCk7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlRXhwb3J0U3BlY2lmaWVyKGlkLCBmcm9tKTsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZUV4cG9ydFNwZWNpZmllcigpIHsKKyAgICAgICAg
dmFyIHNwZWNpZmllcnMsIGlkLCBmcm9tOworCisgICAgICAgIGlmIChtYXRjaCgneycpKSB7Cisg
ICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgIHNwZWNpZmllcnMgPSBbXTsKKworICAgICAg
ICAgICAgZG8geworICAgICAgICAgICAgICAgIHNwZWNpZmllcnMucHVzaChwYXJzZUV4cG9ydFNw
ZWNpZmllclNldFByb3BlcnR5KCkpOworICAgICAgICAgICAgfSB3aGlsZSAobWF0Y2goJywnKSAm
JiBsZXgoKSk7CisKKyAgICAgICAgICAgIGV4cGVjdCgnfScpOworCisgICAgICAgICAgICByZXR1
cm4gZGVsZWdhdGUuY3JlYXRlRXhwb3J0U3BlY2lmaWVyU2V0KHNwZWNpZmllcnMpOworICAgICAg
ICB9CisKKyAgICAgICAgZnJvbSA9IG51bGw7CisKKyAgICAgICAgaWYgKG1hdGNoKCcqJykpIHsK
KyAgICAgICAgICAgIGlkID0gcGFyc2VHbG9iKCk7CisgICAgICAgICAgICBpZiAobWF0Y2hDb250
ZXh0dWFsS2V5d29yZCgnZnJvbScpKSB7CisgICAgICAgICAgICAgICAgbGV4KCk7CisgICAgICAg
ICAgICAgICAgZnJvbSA9IHBhcnNlUGF0aCgpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgaWQgPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVFeHBvcnRTcGVjaWZpZXIoaWQsIGZy
b20pOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlRXhwb3J0RGVjbGFyYXRpb24oKSB7Cisg
ICAgICAgIHZhciB0b2tlbiwgc3BlY2lmaWVyczsKKworICAgICAgICBleHBlY3RLZXl3b3JkKCdl
eHBvcnQnKTsKKworICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsKKworICAgICAgICBpZiAodG9r
ZW4udHlwZSA9PT0gVG9rZW4uS2V5d29yZCB8fCAodG9rZW4udHlwZSA9PT0gVG9rZW4uSWRlbnRp
ZmllciAmJiB0b2tlbi52YWx1ZSA9PT0gJ21vZHVsZScpKSB7CisgICAgICAgICAgICBzd2l0Y2gg
KHRva2VuLnZhbHVlKSB7CisgICAgICAgICAgICBjYXNlICdmdW5jdGlvbic6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUV4cG9ydERlY2xhcmF0aW9uKHBhcnNlRnVuY3Rp
b25EZWNsYXJhdGlvbigpLCBudWxsKTsKKyAgICAgICAgICAgIGNhc2UgJ21vZHVsZSc6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUV4cG9ydERlY2xhcmF0aW9uKHBhcnNl
TW9kdWxlRGVjbGFyYXRpb24oKSwgbnVsbCk7CisgICAgICAgICAgICBjYXNlICdsZXQnOgorICAg
ICAgICAgICAgY2FzZSAnY29uc3QnOgorICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5j
cmVhdGVFeHBvcnREZWNsYXJhdGlvbihwYXJzZUNvbnN0TGV0RGVjbGFyYXRpb24odG9rZW4udmFs
dWUpLCBudWxsKTsKKyAgICAgICAgICAgIGNhc2UgJ3Zhcic6CisgICAgICAgICAgICAgICAgcmV0
dXJuIGRlbGVnYXRlLmNyZWF0ZUV4cG9ydERlY2xhcmF0aW9uKHBhcnNlU3RhdGVtZW50KCksIG51
bGwpOworICAgICAgICAgICAgY2FzZSAnY2xhc3MnOgorICAgICAgICAgICAgICAgIHJldHVybiBk
ZWxlZ2F0ZS5jcmVhdGVFeHBvcnREZWNsYXJhdGlvbihwYXJzZUNsYXNzRGVjbGFyYXRpb24oKSwg
bnVsbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobGV4KCkp
OworICAgICAgICB9CisKKyAgICAgICAgc3BlY2lmaWVycyA9IFsgcGFyc2VFeHBvcnRTcGVjaWZp
ZXIoKSBdOworICAgICAgICBpZiAobWF0Y2goJywnKSkgeworICAgICAgICAgICAgd2hpbGUgKGlu
ZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtYXRjaCgnLCcpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBsZXgoKTsKKyAgICAgICAgICAgICAgICBzcGVjaWZpZXJzLnB1c2gocGFyc2VFeHBvcnRTcGVj
aWZpZXIoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjb25zdW1lU2Vt
aWNvbG9uKCk7CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUV4cG9ydERlY2xhcmF0
aW9uKG51bGwsIHNwZWNpZmllcnMpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlSW1wb3J0
RGVjbGFyYXRpb24oKSB7CisgICAgICAgIHZhciBzcGVjaWZpZXJzLCBmcm9tOworCisgICAgICAg
IGV4cGVjdEtleXdvcmQoJ2ltcG9ydCcpOworCisgICAgICAgIGlmIChtYXRjaCgnKicpKSB7Cisg
ICAgICAgICAgICBzcGVjaWZpZXJzID0gW3BhcnNlR2xvYigpXTsKKyAgICAgICAgfSBlbHNlIGlm
IChtYXRjaCgneycpKSB7CisgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgIHNwZWNpZmll
cnMgPSBbXTsKKworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIHNwZWNpZmllcnMu
cHVzaChwYXJzZUltcG9ydFNwZWNpZmllcigpKTsKKyAgICAgICAgICAgIH0gd2hpbGUgKG1hdGNo
KCcsJykgJiYgbGV4KCkpOworCisgICAgICAgICAgICBleHBlY3QoJ30nKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIHNwZWNpZmllcnMgPSBbcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIo
KV07CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ2Zy
b20nKSkgeworICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuTm9Gcm9tQWZ0ZXJJ
bXBvcnQpOworICAgICAgICB9CisKKyAgICAgICAgbGV4KCk7CisKKyAgICAgICAgaWYgKGxvb2th
aGVhZC50eXBlID09PSBUb2tlbi5TdHJpbmdMaXRlcmFsKSB7CisgICAgICAgICAgICBmcm9tID0g
cGFyc2VQcmltYXJ5RXhwcmVzc2lvbigpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ZnJvbSA9IHBhcnNlUGF0aCgpOworICAgICAgICB9CisKKyAgICAgICAgY29uc3VtZVNlbWljb2xv
bigpOworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVJbXBvcnREZWNsYXJhdGlvbihz
cGVjaWZpZXJzLCBmcm9tKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZUltcG9ydFNwZWNp
ZmllcigpIHsKKyAgICAgICAgdmFyIGlkLCBmcm9tOworCisgICAgICAgIGlkID0gcGFyc2VWYXJp
YWJsZUlkZW50aWZpZXIoKTsKKyAgICAgICAgZnJvbSA9IG51bGw7CisKKyAgICAgICAgaWYgKG1h
dGNoKCc6JykpIHsKKyAgICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgZnJvbSA9IHBhcnNl
UGF0aCgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUltcG9y
dFNwZWNpZmllcihpZCwgZnJvbSk7CisgICAgfQorCisgICAgLy8gMTIuMyBFbXB0eSBTdGF0ZW1l
bnQKKworICAgIGZ1bmN0aW9uIHBhcnNlRW1wdHlTdGF0ZW1lbnQoKSB7CisgICAgICAgIGV4cGVj
dCgnOycpOworICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlRW1wdHlTdGF0ZW1lbnQoKTsK
KyAgICB9CisKKyAgICAvLyAxMi40IEV4cHJlc3Npb24gU3RhdGVtZW50CisKKyAgICBmdW5jdGlv
biBwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQoKSB7CisgICAgICAgIHZhciBleHByID0gcGFyc2VF
eHByZXNzaW9uKCk7CisgICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTsKKyAgICAgICAgcmV0dXJu
IGRlbGVnYXRlLmNyZWF0ZUV4cHJlc3Npb25TdGF0ZW1lbnQoZXhwcik7CisgICAgfQorCisgICAg
Ly8gMTIuNSBJZiBzdGF0ZW1lbnQKKworICAgIGZ1bmN0aW9uIHBhcnNlSWZTdGF0ZW1lbnQoKSB7
CisgICAgICAgIHZhciB0ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5hdGU7CisKKyAgICAgICAgZXhw
ZWN0S2V5d29yZCgnaWYnKTsKKworICAgICAgICBleHBlY3QoJygnKTsKKworICAgICAgICB0ZXN0
ID0gcGFyc2VFeHByZXNzaW9uKCk7CisKKyAgICAgICAgZXhwZWN0KCcpJyk7CisKKyAgICAgICAg
Y29uc2VxdWVudCA9IHBhcnNlU3RhdGVtZW50KCk7CisKKyAgICAgICAgaWYgKG1hdGNoS2V5d29y
ZCgnZWxzZScpKSB7CisgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgIGFsdGVybmF0ZSA9
IHBhcnNlU3RhdGVtZW50KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhbHRlcm5h
dGUgPSBudWxsOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUlm
U3RhdGVtZW50KHRlc3QsIGNvbnNlcXVlbnQsIGFsdGVybmF0ZSk7CisgICAgfQorCisgICAgLy8g
MTIuNiBJdGVyYXRpb24gU3RhdGVtZW50cworCisgICAgZnVuY3Rpb24gcGFyc2VEb1doaWxlU3Rh
dGVtZW50KCkgeworICAgICAgICB2YXIgYm9keSwgdGVzdCwgb2xkSW5JdGVyYXRpb247CisKKyAg
ICAgICAgZXhwZWN0S2V5d29yZCgnZG8nKTsKKworICAgICAgICBvbGRJbkl0ZXJhdGlvbiA9IHN0
YXRlLmluSXRlcmF0aW9uOworICAgICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IHRydWU7CisKKyAg
ICAgICAgYm9keSA9IHBhcnNlU3RhdGVtZW50KCk7CisKKyAgICAgICAgc3RhdGUuaW5JdGVyYXRp
b24gPSBvbGRJbkl0ZXJhdGlvbjsKKworICAgICAgICBleHBlY3RLZXl3b3JkKCd3aGlsZScpOwor
CisgICAgICAgIGV4cGVjdCgnKCcpOworCisgICAgICAgIHRlc3QgPSBwYXJzZUV4cHJlc3Npb24o
KTsKKworICAgICAgICBleHBlY3QoJyknKTsKKworICAgICAgICBpZiAobWF0Y2goJzsnKSkgewor
ICAgICAgICAgICAgbGV4KCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZGVsZWdhdGUu
Y3JlYXRlRG9XaGlsZVN0YXRlbWVudChib2R5LCB0ZXN0KTsKKyAgICB9CisKKyAgICBmdW5jdGlv
biBwYXJzZVdoaWxlU3RhdGVtZW50KCkgeworICAgICAgICB2YXIgdGVzdCwgYm9keSwgb2xkSW5J
dGVyYXRpb247CisKKyAgICAgICAgZXhwZWN0S2V5d29yZCgnd2hpbGUnKTsKKworICAgICAgICBl
eHBlY3QoJygnKTsKKworICAgICAgICB0ZXN0ID0gcGFyc2VFeHByZXNzaW9uKCk7CisKKyAgICAg
ICAgZXhwZWN0KCcpJyk7CisKKyAgICAgICAgb2xkSW5JdGVyYXRpb24gPSBzdGF0ZS5pbkl0ZXJh
dGlvbjsKKyAgICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSB0cnVlOworCisgICAgICAgIGJvZHkg
PSBwYXJzZVN0YXRlbWVudCgpOworCisgICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0gb2xkSW5J
dGVyYXRpb247CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVdoaWxlU3RhdGVtZW50
KHRlc3QsIGJvZHkpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlRm9yVmFyaWFibGVEZWNs
YXJhdGlvbigpIHsKKyAgICAgICAgdmFyIHRva2VuID0gbGV4KCksCisgICAgICAgICAgICBkZWNs
YXJhdGlvbnMgPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KCk7CisKKyAgICAgICAgcmV0
dXJuIGRlbGVnYXRlLmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbGFyYXRpb25zLCB0b2tl
bi52YWx1ZSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VGb3JTdGF0ZW1lbnQob3B0cykg
eworICAgICAgICB2YXIgaW5pdCwgdGVzdCwgdXBkYXRlLCBsZWZ0LCByaWdodCwgYm9keSwgb3Bl
cmF0b3IsIG9sZEluSXRlcmF0aW9uOworICAgICAgICBpbml0ID0gdGVzdCA9IHVwZGF0ZSA9IG51
bGw7CisgICAgICAgIGV4cGVjdEtleXdvcmQoJ2ZvcicpOworCisgICAgICAgIC8vIGh0dHA6Ly93
aWtpLmVjbWFzY3JpcHQub3JnL2Rva3UucGhwP2lkPXByb3Bvc2FsczppdGVyYXRvcnNfYW5kX2dl
bmVyYXRvcnMmcz1lYWNoCisgICAgICAgIGlmIChtYXRjaENvbnRleHR1YWxLZXl3b3JkKCJlYWNo
IikpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLkVhY2hOb3RBbGxvd2Vk
KTsKKyAgICAgICAgfQorCisgICAgICAgIGV4cGVjdCgnKCcpOworCisgICAgICAgIGlmIChtYXRj
aCgnOycpKSB7CisgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGlmIChtYXRjaEtleXdvcmQoJ3ZhcicpIHx8IG1hdGNoS2V5d29yZCgnbGV0JykgfHwgbWF0
Y2hLZXl3b3JkKCdjb25zdCcpKSB7CisgICAgICAgICAgICAgICAgc3RhdGUuYWxsb3dJbiA9IGZh
bHNlOworICAgICAgICAgICAgICAgIGluaXQgPSBwYXJzZUZvclZhcmlhYmxlRGVjbGFyYXRpb24o
KTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5hbGxvd0luID0gdHJ1ZTsKKworICAgICAgICAgICAg
ICAgIGlmIChpbml0LmRlY2xhcmF0aW9ucy5sZW5ndGggPT09IDEpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKG1hdGNoS2V5d29yZCgnaW4nKSB8fCBtYXRjaENvbnRleHR1YWxLZXl3b3JkKCdv
ZicpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA9IGxvb2thaGVhZDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghKChvcGVyYXRvci52YWx1ZSA9PT0gJ2luJyB8fCBp
bml0LmtpbmQgIT09ICd2YXInKSAmJiBpbml0LmRlY2xhcmF0aW9uc1swXS5pbml0KSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxlZnQgPSBpbml0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gcGFy
c2VFeHByZXNzaW9uKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdCA9IG51bGw7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN0YXRl
LmFsbG93SW4gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpbml0ID0gcGFyc2VFeHByZXNzaW9u
KCk7CisgICAgICAgICAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHRydWU7CisKKyAgICAgICAgICAg
ICAgICBpZiAobWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnb2YnKSkgeworICAgICAgICAgICAgICAg
ICAgICBvcGVyYXRvciA9IGxleCgpOworICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gaW5pdDsK
KyAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBwYXJzZUV4cHJlc3Npb24oKTsKKyAgICAgICAg
ICAgICAgICAgICAgaW5pdCA9IG51bGw7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRj
aEtleXdvcmQoJ2luJykpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gTGVmdEhhbmRTaWRlRXhw
cmVzc2lvbgorICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQXNzaWduYWJsZUxlZnRIYW5kU2lk
ZShpbml0KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2Fn
ZXMuSW52YWxpZExIU0luRm9ySW4pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIG9wZXJhdG9yID0gbGV4KCk7CisgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBp
bml0OworICAgICAgICAgICAgICAgICAgICByaWdodCA9IHBhcnNlRXhwcmVzc2lvbigpOworICAg
ICAgICAgICAgICAgICAgICBpbml0ID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlb2YgbGVmdCA9PT0gJ3VuZGVmaW5lZCcpIHsK
KyAgICAgICAgICAgICAgICBleHBlY3QoJzsnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGlmICh0eXBlb2YgbGVmdCA9PT0gJ3VuZGVmaW5lZCcpIHsKKworICAgICAgICAg
ICAgaWYgKCFtYXRjaCgnOycpKSB7CisgICAgICAgICAgICAgICAgdGVzdCA9IHBhcnNlRXhwcmVz
c2lvbigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZXhwZWN0KCc7Jyk7CisKKyAgICAg
ICAgICAgIGlmICghbWF0Y2goJyknKSkgeworICAgICAgICAgICAgICAgIHVwZGF0ZSA9IHBhcnNl
RXhwcmVzc2lvbigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZXhwZWN0
KCcpJyk7CisKKyAgICAgICAgb2xkSW5JdGVyYXRpb24gPSBzdGF0ZS5pbkl0ZXJhdGlvbjsKKyAg
ICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSB0cnVlOworCisgICAgICAgIGlmICghKG9wdHMgIT09
IHVuZGVmaW5lZCAmJiBvcHRzLmlnbm9yZV9ib2R5KSkgeworICAgICAgICAgICAgYm9keSA9IHBh
cnNlU3RhdGVtZW50KCk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9
IG9sZEluSXRlcmF0aW9uOworCisgICAgICAgIGlmICh0eXBlb2YgbGVmdCA9PT0gJ3VuZGVmaW5l
ZCcpIHsKKyAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVGb3JTdGF0ZW1lbnQoaW5p
dCwgdGVzdCwgdXBkYXRlLCBib2R5KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChvcGVyYXRv
ci52YWx1ZSA9PT0gJ2luJykgeworICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUZv
ckluU3RhdGVtZW50KGxlZnQsIHJpZ2h0LCBib2R5KTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gZGVsZWdhdGUuY3JlYXRlRm9yT2ZTdGF0ZW1lbnQobGVmdCwgcmlnaHQsIGJvZHkpOworICAg
IH0KKworICAgIC8vIDEyLjcgVGhlIGNvbnRpbnVlIHN0YXRlbWVudAorCisgICAgZnVuY3Rpb24g
cGFyc2VDb250aW51ZVN0YXRlbWVudCgpIHsKKyAgICAgICAgdmFyIGxhYmVsID0gbnVsbCwga2V5
OworCisgICAgICAgIGV4cGVjdEtleXdvcmQoJ2NvbnRpbnVlJyk7CisKKyAgICAgICAgLy8gT3B0
aW1pemUgdGhlIG1vc3QgY29tbW9uIGZvcm06ICdjb250aW51ZTsnLgorICAgICAgICBpZiAoc291
cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSA1OSkgeworICAgICAgICAgICAgbGV4KCk7CisKKyAg
ICAgICAgICAgIGlmICghc3RhdGUuaW5JdGVyYXRpb24pIHsKKyAgICAgICAgICAgICAgICB0aHJv
d0Vycm9yKHt9LCBNZXNzYWdlcy5JbGxlZ2FsQ29udGludWUpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlQ29udGludWVTdGF0ZW1lbnQobnVsbCk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAocGVla0xpbmVUZXJtaW5hdG9yKCkpIHsKKyAgICAg
ICAgICAgIGlmICghc3RhdGUuaW5JdGVyYXRpb24pIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vy
cm9yKHt9LCBNZXNzYWdlcy5JbGxlZ2FsQ29udGludWUpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlQ29udGludWVTdGF0ZW1lbnQobnVsbCk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLklkZW50aWZp
ZXIpIHsKKyAgICAgICAgICAgIGxhYmVsID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKKwor
ICAgICAgICAgICAga2V5ID0gJyQnICsgbGFiZWwubmFtZTsKKyAgICAgICAgICAgIGlmICghT2Jq
ZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHN0YXRlLmxhYmVsU2V0LCBrZXkpKSB7
CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5rbm93bkxhYmVsLCBs
YWJlbC5uYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbnN1bWVT
ZW1pY29sb24oKTsKKworICAgICAgICBpZiAobGFiZWwgPT09IG51bGwgJiYgIXN0YXRlLmluSXRl
cmF0aW9uKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbGxlZ2FsQ29u
dGludWUpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUNvbnRp
bnVlU3RhdGVtZW50KGxhYmVsKTsKKyAgICB9CisKKyAgICAvLyAxMi44IFRoZSBicmVhayBzdGF0
ZW1lbnQKKworICAgIGZ1bmN0aW9uIHBhcnNlQnJlYWtTdGF0ZW1lbnQoKSB7CisgICAgICAgIHZh
ciBsYWJlbCA9IG51bGwsIGtleTsKKworICAgICAgICBleHBlY3RLZXl3b3JkKCdicmVhaycpOwor
CisgICAgICAgIC8vIENhdGNoIHRoZSB2ZXJ5IGNvbW1vbiBjYXNlIGZpcnN0OiBpbW1lZGlhdGVs
eSBhIHNlbWljb2xvbiAoY2hhciAjNTkpLgorICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQo
aW5kZXgpID09PSA1OSkgeworICAgICAgICAgICAgbGV4KCk7CisKKyAgICAgICAgICAgIGlmICgh
KHN0YXRlLmluSXRlcmF0aW9uIHx8IHN0YXRlLmluU3dpdGNoKSkgeworICAgICAgICAgICAgICAg
IHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLklsbGVnYWxCcmVhayk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVCcmVha1N0YXRlbWVudChudWxsKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChwZWVrTGluZVRlcm1pbmF0b3IoKSkgeworICAgICAg
ICAgICAgaWYgKCEoc3RhdGUuaW5JdGVyYXRpb24gfHwgc3RhdGUuaW5Td2l0Y2gpKSB7CisgICAg
ICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSWxsZWdhbEJyZWFrKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUJyZWFrU3RhdGVt
ZW50KG51bGwpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxvb2thaGVhZC50eXBlID09PSBU
b2tlbi5JZGVudGlmaWVyKSB7CisgICAgICAgICAgICBsYWJlbCA9IHBhcnNlVmFyaWFibGVJZGVu
dGlmaWVyKCk7CisKKyAgICAgICAgICAgIGtleSA9ICckJyArIGxhYmVsLm5hbWU7CisgICAgICAg
ICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzdGF0ZS5sYWJl
bFNldCwga2V5KSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVu
a25vd25MYWJlbCwgbGFiZWwubmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBjb25zdW1lU2VtaWNvbG9uKCk7CisKKyAgICAgICAgaWYgKGxhYmVsID09PSBudWxsICYm
ICEoc3RhdGUuaW5JdGVyYXRpb24gfHwgc3RhdGUuaW5Td2l0Y2gpKSB7CisgICAgICAgICAgICB0
aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbGxlZ2FsQnJlYWspOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUJyZWFrU3RhdGVtZW50KGxhYmVsKTsKKyAgICB9CisK
KyAgICAvLyAxMi45IFRoZSByZXR1cm4gc3RhdGVtZW50CisKKyAgICBmdW5jdGlvbiBwYXJzZVJl
dHVyblN0YXRlbWVudCgpIHsKKyAgICAgICAgdmFyIGFyZ3VtZW50ID0gbnVsbDsKKworICAgICAg
ICBleHBlY3RLZXl3b3JkKCdyZXR1cm4nKTsKKworICAgICAgICBpZiAoIXN0YXRlLmluRnVuY3Rp
b25Cb2R5KSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkls
bGVnYWxSZXR1cm4pOworICAgICAgICB9CisKKyAgICAgICAgLy8gJ3JldHVybicgZm9sbG93ZWQg
YnkgYSBzcGFjZSBhbmQgYW4gaWRlbnRpZmllciBpcyB2ZXJ5IGNvbW1vbi4KKyAgICAgICAgaWYg
KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMzIpIHsKKyAgICAgICAgICAgIGlmIChpc0lk
ZW50aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpKSkgeworICAgICAgICAg
ICAgICAgIGFyZ3VtZW50ID0gcGFyc2VFeHByZXNzaW9uKCk7CisgICAgICAgICAgICAgICAgY29u
c3VtZVNlbWljb2xvbigpOworICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVS
ZXR1cm5TdGF0ZW1lbnQoYXJndW1lbnQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgaWYgKHBlZWtMaW5lVGVybWluYXRvcigpKSB7CisgICAgICAgICAgICByZXR1cm4gZGVs
ZWdhdGUuY3JlYXRlUmV0dXJuU3RhdGVtZW50KG51bGwpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKCFtYXRjaCgnOycpKSB7CisgICAgICAgICAgICBpZiAoIW1hdGNoKCd9JykgJiYgbG9va2Fo
ZWFkLnR5cGUgIT09IFRva2VuLkVPRikgeworICAgICAgICAgICAgICAgIGFyZ3VtZW50ID0gcGFy
c2VFeHByZXNzaW9uKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjb25z
dW1lU2VtaWNvbG9uKCk7CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVJldHVyblN0
YXRlbWVudChhcmd1bWVudCk7CisgICAgfQorCisgICAgLy8gMTIuMTAgVGhlIHdpdGggc3RhdGVt
ZW50CisKKyAgICBmdW5jdGlvbiBwYXJzZVdpdGhTdGF0ZW1lbnQoKSB7CisgICAgICAgIHZhciBv
YmplY3QsIGJvZHk7CisKKyAgICAgICAgaWYgKHN0cmljdCkgeworICAgICAgICAgICAgdGhyb3dF
cnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJpY3RNb2RlV2l0aCk7CisgICAgICAgIH0KKwor
ICAgICAgICBleHBlY3RLZXl3b3JkKCd3aXRoJyk7CisKKyAgICAgICAgZXhwZWN0KCcoJyk7CisK
KyAgICAgICAgb2JqZWN0ID0gcGFyc2VFeHByZXNzaW9uKCk7CisKKyAgICAgICAgZXhwZWN0KCcp
Jyk7CisKKyAgICAgICAgYm9keSA9IHBhcnNlU3RhdGVtZW50KCk7CisKKyAgICAgICAgcmV0dXJu
IGRlbGVnYXRlLmNyZWF0ZVdpdGhTdGF0ZW1lbnQob2JqZWN0LCBib2R5KTsKKyAgICB9CisKKyAg
ICAvLyAxMi4xMCBUaGUgc3dpdGggc3RhdGVtZW50CisKKyAgICBmdW5jdGlvbiBwYXJzZVN3aXRj
aENhc2UoKSB7CisgICAgICAgIHZhciB0ZXN0LAorICAgICAgICAgICAgY29uc2VxdWVudCA9IFtd
LAorICAgICAgICAgICAgc291cmNlRWxlbWVudDsKKworICAgICAgICBpZiAobWF0Y2hLZXl3b3Jk
KCdkZWZhdWx0JykpIHsKKyAgICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgdGVzdCA9IG51
bGw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBleHBlY3RLZXl3b3JkKCdjYXNlJyk7
CisgICAgICAgICAgICB0ZXN0ID0gcGFyc2VFeHByZXNzaW9uKCk7CisgICAgICAgIH0KKyAgICAg
ICAgZXhwZWN0KCc6Jyk7CisKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAg
ICAgICAgICBpZiAobWF0Y2goJ30nKSB8fCBtYXRjaEtleXdvcmQoJ2RlZmF1bHQnKSB8fCBtYXRj
aEtleXdvcmQoJ2Nhc2UnKSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgc291cmNlRWxlbWVudCA9IHBhcnNlU291cmNlRWxlbWVudCgpOworICAg
ICAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2VFbGVtZW50ID09PSAndW5kZWZpbmVkJykgeworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29uc2VxdWVu
dC5wdXNoKHNvdXJjZUVsZW1lbnQpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRlbGVn
YXRlLmNyZWF0ZVN3aXRjaENhc2UodGVzdCwgY29uc2VxdWVudCk7CisgICAgfQorCisgICAgZnVu
Y3Rpb24gcGFyc2VTd2l0Y2hTdGF0ZW1lbnQoKSB7CisgICAgICAgIHZhciBkaXNjcmltaW5hbnQs
IGNhc2VzLCBjbGF1c2UsIG9sZEluU3dpdGNoLCBkZWZhdWx0Rm91bmQ7CisKKyAgICAgICAgZXhw
ZWN0S2V5d29yZCgnc3dpdGNoJyk7CisKKyAgICAgICAgZXhwZWN0KCcoJyk7CisKKyAgICAgICAg
ZGlzY3JpbWluYW50ID0gcGFyc2VFeHByZXNzaW9uKCk7CisKKyAgICAgICAgZXhwZWN0KCcpJyk7
CisKKyAgICAgICAgZXhwZWN0KCd7Jyk7CisKKyAgICAgICAgaWYgKG1hdGNoKCd9JykpIHsKKyAg
ICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVN3aXRj
aFN0YXRlbWVudChkaXNjcmltaW5hbnQpOworICAgICAgICB9CisKKyAgICAgICAgY2FzZXMgPSBb
XTsKKworICAgICAgICBvbGRJblN3aXRjaCA9IHN0YXRlLmluU3dpdGNoOworICAgICAgICBzdGF0
ZS5pblN3aXRjaCA9IHRydWU7CisgICAgICAgIGRlZmF1bHRGb3VuZCA9IGZhbHNlOworCisgICAg
ICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgaWYgKG1hdGNoKCd9Jykp
IHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNs
YXVzZSA9IHBhcnNlU3dpdGNoQ2FzZSgpOworICAgICAgICAgICAgaWYgKGNsYXVzZS50ZXN0ID09
PSBudWxsKSB7CisgICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRGb3VuZCkgeworICAgICAgICAg
ICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5NdWx0aXBsZURlZmF1bHRzSW5Td2l0
Y2gpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkZWZhdWx0Rm91bmQgPSB0
cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZXMucHVzaChjbGF1c2UpOworICAg
ICAgICB9CisKKyAgICAgICAgc3RhdGUuaW5Td2l0Y2ggPSBvbGRJblN3aXRjaDsKKworICAgICAg
ICBleHBlY3QoJ30nKTsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlU3dpdGNoU3Rh
dGVtZW50KGRpc2NyaW1pbmFudCwgY2FzZXMpOworICAgIH0KKworICAgIC8vIDEyLjEzIFRoZSB0
aHJvdyBzdGF0ZW1lbnQKKworICAgIGZ1bmN0aW9uIHBhcnNlVGhyb3dTdGF0ZW1lbnQoKSB7Cisg
ICAgICAgIHZhciBhcmd1bWVudDsKKworICAgICAgICBleHBlY3RLZXl3b3JkKCd0aHJvdycpOwor
CisgICAgICAgIGlmIChwZWVrTGluZVRlcm1pbmF0b3IoKSkgeworICAgICAgICAgICAgdGhyb3dF
cnJvcih7fSwgTWVzc2FnZXMuTmV3bGluZUFmdGVyVGhyb3cpOworICAgICAgICB9CisKKyAgICAg
ICAgYXJndW1lbnQgPSBwYXJzZUV4cHJlc3Npb24oKTsKKworICAgICAgICBjb25zdW1lU2VtaWNv
bG9uKCk7CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVRocm93U3RhdGVtZW50KGFy
Z3VtZW50KTsKKyAgICB9CisKKyAgICAvLyAxMi4xNCBUaGUgdHJ5IHN0YXRlbWVudAorCisgICAg
ZnVuY3Rpb24gcGFyc2VDYXRjaENsYXVzZSgpIHsKKyAgICAgICAgdmFyIHBhcmFtLCBib2R5Owor
CisgICAgICAgIGV4cGVjdEtleXdvcmQoJ2NhdGNoJyk7CisKKyAgICAgICAgZXhwZWN0KCcoJyk7
CisgICAgICAgIGlmIChtYXRjaCgnKScpKSB7CisgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQo
bG9va2FoZWFkKTsKKyAgICAgICAgfQorCisgICAgICAgIHBhcmFtID0gcGFyc2VFeHByZXNzaW9u
KCk7CisgICAgICAgIC8vIDEyLjE0LjEKKyAgICAgICAgaWYgKHN0cmljdCAmJiBwYXJhbS50eXBl
ID09PSBTeW50YXguSWRlbnRpZmllciAmJiBpc1Jlc3RyaWN0ZWRXb3JkKHBhcmFtLm5hbWUpKSB7
CisgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdENhdGNo
VmFyaWFibGUpOworICAgICAgICB9CisKKyAgICAgICAgZXhwZWN0KCcpJyk7CisgICAgICAgIGJv
ZHkgPSBwYXJzZUJsb2NrKCk7CisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVDYXRjaENs
YXVzZShwYXJhbSwgYm9keSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VUcnlTdGF0ZW1l
bnQoKSB7CisgICAgICAgIHZhciBibG9jaywgaGFuZGxlcnMgPSBbXSwgZmluYWxpemVyID0gbnVs
bDsKKworICAgICAgICBleHBlY3RLZXl3b3JkKCd0cnknKTsKKworICAgICAgICBibG9jayA9IHBh
cnNlQmxvY2soKTsKKworICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdjYXRjaCcpKSB7CisgICAg
ICAgICAgICBoYW5kbGVycy5wdXNoKHBhcnNlQ2F0Y2hDbGF1c2UoKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdmaW5hbGx5JykpIHsKKyAgICAgICAgICAgIGxleCgp
OworICAgICAgICAgICAgZmluYWxpemVyID0gcGFyc2VCbG9jaygpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGhhbmRsZXJzLmxlbmd0aCA9PT0gMCAmJiAhZmluYWxpemVyKSB7CisgICAgICAg
ICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5Ob0NhdGNoT3JGaW5hbGx5KTsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVUcnlTdGF0ZW1lbnQoYmxvY2ssIFtd
LCBoYW5kbGVycywgZmluYWxpemVyKTsKKyAgICB9CisKKyAgICAvLyAxMi4xNSBUaGUgZGVidWdn
ZXIgc3RhdGVtZW50CisKKyAgICBmdW5jdGlvbiBwYXJzZURlYnVnZ2VyU3RhdGVtZW50KCkgewor
ICAgICAgICBleHBlY3RLZXl3b3JkKCdkZWJ1Z2dlcicpOworCisgICAgICAgIGNvbnN1bWVTZW1p
Y29sb24oKTsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlRGVidWdnZXJTdGF0ZW1l
bnQoKTsKKyAgICB9CisKKyAgICAvLyAxMiBTdGF0ZW1lbnRzCisKKyAgICBmdW5jdGlvbiBwYXJz
ZVN0YXRlbWVudCgpIHsKKyAgICAgICAgdmFyIHR5cGUgPSBsb29rYWhlYWQudHlwZSwKKyAgICAg
ICAgICAgIGV4cHIsCisgICAgICAgICAgICBsYWJlbGVkQm9keSwKKyAgICAgICAgICAgIGtleTsK
KworICAgICAgICBpZiAodHlwZSA9PT0gVG9rZW4uRU9GKSB7CisgICAgICAgICAgICB0aHJvd1Vu
ZXhwZWN0ZWQobG9va2FoZWFkKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0eXBlID09PSBU
b2tlbi5QdW5jdHVhdG9yKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGxvb2thaGVhZC52YWx1ZSkg
eworICAgICAgICAgICAgY2FzZSAnOyc6CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRW1w
dHlTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIGNhc2UgJ3snOgorICAgICAgICAgICAgICAgIHJl
dHVybiBwYXJzZUJsb2NrKCk7CisgICAgICAgICAgICBjYXNlICcoJzoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KCk7CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgaWYgKHR5cGUgPT09IFRva2VuLktleXdvcmQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
bG9va2FoZWFkLnZhbHVlKSB7CisgICAgICAgICAgICBjYXNlICdicmVhayc6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHBhcnNlQnJlYWtTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIGNhc2UgJ2Nv
bnRpbnVlJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VDb250aW51ZVN0YXRlbWVudCgp
OworICAgICAgICAgICAgY2FzZSAnZGVidWdnZXInOgorICAgICAgICAgICAgICAgIHJldHVybiBw
YXJzZURlYnVnZ2VyU3RhdGVtZW50KCk7CisgICAgICAgICAgICBjYXNlICdkbyc6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHBhcnNlRG9XaGlsZVN0YXRlbWVudCgpOworICAgICAgICAgICAgY2Fz
ZSAnZm9yJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGb3JTdGF0ZW1lbnQoKTsKKyAg
ICAgICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VG
dW5jdGlvbkRlY2xhcmF0aW9uKCk7CisgICAgICAgICAgICBjYXNlICdjbGFzcyc6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHBhcnNlQ2xhc3NEZWNsYXJhdGlvbigpOworICAgICAgICAgICAgY2Fz
ZSAnaWYnOgorICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUlmU3RhdGVtZW50KCk7CisgICAg
ICAgICAgICBjYXNlICdyZXR1cm4nOgorICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVJldHVy
blN0YXRlbWVudCgpOworICAgICAgICAgICAgY2FzZSAnc3dpdGNoJzoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gcGFyc2VTd2l0Y2hTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIGNhc2UgJ3Rocm93
JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VUaHJvd1N0YXRlbWVudCgpOworICAgICAg
ICAgICAgY2FzZSAndHJ5JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VUcnlTdGF0ZW1l
bnQoKTsKKyAgICAgICAgICAgIGNhc2UgJ3Zhcic6CisgICAgICAgICAgICAgICAgcmV0dXJuIHBh
cnNlVmFyaWFibGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIGNhc2UgJ3doaWxlJzoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gcGFyc2VXaGlsZVN0YXRlbWVudCgpOworICAgICAgICAgICAgY2Fz
ZSAnd2l0aCc6CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlV2l0aFN0YXRlbWVudCgpOwor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIGV4cHIgPSBwYXJzZUV4cHJlc3Npb24oKTsKKworICAg
ICAgICAvLyAxMi4xMiBMYWJlbGxlZCBTdGF0ZW1lbnRzCisgICAgICAgIGlmICgoZXhwci50eXBl
ID09PSBTeW50YXguSWRlbnRpZmllcikgJiYgbWF0Y2goJzonKSkgeworICAgICAgICAgICAgbGV4
KCk7CisKKyAgICAgICAgICAgIGtleSA9ICckJyArIGV4cHIubmFtZTsKKyAgICAgICAgICAgIGlm
IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc3RhdGUubGFiZWxTZXQsIGtl
eSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5SZWRlY2xhcmF0
aW9uLCAnTGFiZWwnLCBleHByLm5hbWUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBz
dGF0ZS5sYWJlbFNldFtrZXldID0gdHJ1ZTsKKyAgICAgICAgICAgIGxhYmVsZWRCb2R5ID0gcGFy
c2VTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIGRlbGV0ZSBzdGF0ZS5sYWJlbFNldFtrZXldOwor
ICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUxhYmVsZWRTdGF0ZW1lbnQoZXhwciwg
bGFiZWxlZEJvZHkpOworICAgICAgICB9CisKKyAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOwor
CisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVFeHByZXNzaW9uU3RhdGVtZW50KGV4cHIp
OworICAgIH0KKworICAgIC8vIDEzIEZ1bmN0aW9uIERlZmluaXRpb24KKworICAgIGZ1bmN0aW9u
IHBhcnNlQ29uY2lzZUJvZHkoKSB7CisgICAgICAgIGlmIChtYXRjaCgneycpKSB7CisgICAgICAg
ICAgICByZXR1cm4gcGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKCk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBwYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMoKSB7CisgICAgICAgIHZhciBzb3Vy
Y2VFbGVtZW50LCBzb3VyY2VFbGVtZW50cyA9IFtdLCB0b2tlbiwgZGlyZWN0aXZlLCBmaXJzdFJl
c3RyaWN0ZWQsCisgICAgICAgICAgICBvbGRMYWJlbFNldCwgb2xkSW5JdGVyYXRpb24sIG9sZElu
U3dpdGNoLCBvbGRJbkZ1bmN0aW9uQm9keSwgb2xkUGFyZW50aGVzaXplZENvdW50OworCisgICAg
ICAgIGV4cGVjdCgneycpOworCisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAg
ICAgICAgICAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5TdHJpbmdMaXRlcmFsKSB7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0b2tlbiA9
IGxvb2thaGVhZDsKKworICAgICAgICAgICAgc291cmNlRWxlbWVudCA9IHBhcnNlU291cmNlRWxl
bWVudCgpOworICAgICAgICAgICAgc291cmNlRWxlbWVudHMucHVzaChzb3VyY2VFbGVtZW50KTsK
KyAgICAgICAgICAgIGlmIChzb3VyY2VFbGVtZW50LmV4cHJlc3Npb24udHlwZSAhPT0gU3ludGF4
LkxpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIG5vdCBkaXJlY3RpdmUKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRpcmVjdGl2
ZSA9IHNvdXJjZS5zbGljZSh0b2tlbi5yYW5nZVswXSArIDEsIHRva2VuLnJhbmdlWzFdIC0gMSk7
CisgICAgICAgICAgICBpZiAoZGlyZWN0aXZlID09PSAndXNlIHN0cmljdCcpIHsKKyAgICAgICAg
ICAgICAgICBzdHJpY3QgPSB0cnVlOworICAgICAgICAgICAgICAgIGlmIChmaXJzdFJlc3RyaWN0
ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KGZpcnN0UmVzdHJp
Y3RlZCwgTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICghZmlyc3RSZXN0cmljdGVk
ICYmIHRva2VuLm9jdGFsKSB7CisgICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9
IHRva2VuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIG9sZExhYmVsU2V0ID0gc3RhdGUubGFiZWxTZXQ7CisgICAgICAgIG9sZEluSXRlcmF0
aW9uID0gc3RhdGUuaW5JdGVyYXRpb247CisgICAgICAgIG9sZEluU3dpdGNoID0gc3RhdGUuaW5T
d2l0Y2g7CisgICAgICAgIG9sZEluRnVuY3Rpb25Cb2R5ID0gc3RhdGUuaW5GdW5jdGlvbkJvZHk7
CisgICAgICAgIG9sZFBhcmVudGhlc2l6ZWRDb3VudCA9IHN0YXRlLnBhcmVudGhlc2l6ZWRDb3Vu
dDsKKworICAgICAgICBzdGF0ZS5sYWJlbFNldCA9IHt9OworICAgICAgICBzdGF0ZS5pbkl0ZXJh
dGlvbiA9IGZhbHNlOworICAgICAgICBzdGF0ZS5pblN3aXRjaCA9IGZhbHNlOworICAgICAgICBz
dGF0ZS5pbkZ1bmN0aW9uQm9keSA9IHRydWU7CisgICAgICAgIHN0YXRlLnBhcmVudGhlc2l6ZWRD
b3VudCA9IDA7CisKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAg
ICBpZiAobWF0Y2goJ30nKSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgc291cmNlRWxlbWVudCA9IHBhcnNlU291cmNlRWxlbWVudCgpOworICAg
ICAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2VFbGVtZW50ID09PSAndW5kZWZpbmVkJykgeworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc291cmNlRWxl
bWVudHMucHVzaChzb3VyY2VFbGVtZW50KTsKKyAgICAgICAgfQorCisgICAgICAgIGV4cGVjdCgn
fScpOworCisgICAgICAgIHN0YXRlLmxhYmVsU2V0ID0gb2xkTGFiZWxTZXQ7CisgICAgICAgIHN0
YXRlLmluSXRlcmF0aW9uID0gb2xkSW5JdGVyYXRpb247CisgICAgICAgIHN0YXRlLmluU3dpdGNo
ID0gb2xkSW5Td2l0Y2g7CisgICAgICAgIHN0YXRlLmluRnVuY3Rpb25Cb2R5ID0gb2xkSW5GdW5j
dGlvbkJvZHk7CisgICAgICAgIHN0YXRlLnBhcmVudGhlc2l6ZWRDb3VudCA9IG9sZFBhcmVudGhl
c2l6ZWRDb3VudDsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlQmxvY2tTdGF0ZW1l
bnQoc291cmNlRWxlbWVudHMpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHZhbGlkYXRlUGFyYW0o
b3B0aW9ucywgcGFyYW0sIG5hbWUpIHsKKyAgICAgICAgdmFyIGtleSA9ICckJyArIG5hbWU7Cisg
ICAgICAgIGlmIChzdHJpY3QpIHsKKyAgICAgICAgICAgIGlmIChpc1Jlc3RyaWN0ZWRXb3JkKG5h
bWUpKSB7CisgICAgICAgICAgICAgICAgb3B0aW9ucy5zdHJpY3RlZCA9IHBhcmFtOworICAgICAg
ICAgICAgICAgIG9wdGlvbnMubWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdFBhcmFtTmFtZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3Bl
cnR5LmNhbGwob3B0aW9ucy5wYXJhbVNldCwga2V5KSkgeworICAgICAgICAgICAgICAgIG9wdGlv
bnMuc3RyaWN0ZWQgPSBwYXJhbTsKKyAgICAgICAgICAgICAgICBvcHRpb25zLm1lc3NhZ2UgPSBN
ZXNzYWdlcy5TdHJpY3RQYXJhbUR1cGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBp
ZiAoIW9wdGlvbnMuZmlyc3RSZXN0cmljdGVkKSB7CisgICAgICAgICAgICBpZiAoaXNSZXN0cmlj
dGVkV29yZChuYW1lKSkgeworICAgICAgICAgICAgICAgIG9wdGlvbnMuZmlyc3RSZXN0cmljdGVk
ID0gcGFyYW07CisgICAgICAgICAgICAgICAgb3B0aW9ucy5tZXNzYWdlID0gTWVzc2FnZXMuU3Ry
aWN0UGFyYW1OYW1lOworICAgICAgICAgICAgfSBlbHNlIGlmIChpc1N0cmljdE1vZGVSZXNlcnZl
ZFdvcmQobmFtZSkpIHsKKyAgICAgICAgICAgICAgICBvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCA9
IHBhcmFtOworICAgICAgICAgICAgICAgIG9wdGlvbnMubWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmlj
dFJlc2VydmVkV29yZDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoT2JqZWN0LnByb3RvdHlwZS5o
YXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMucGFyYW1TZXQsIGtleSkpIHsKKyAgICAgICAgICAg
ICAgICBvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCA9IHBhcmFtOworICAgICAgICAgICAgICAgIG9w
dGlvbnMubWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdFBhcmFtRHVwZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBvcHRpb25zLnBhcmFtU2V0W2tleV0gPSB0cnVlOworICAgIH0K
KworICAgIGZ1bmN0aW9uIHBhcnNlUGFyYW0ob3B0aW9ucykgeworICAgICAgICB2YXIgdG9rZW4s
IHJlc3QsIHBhcmFtOworCisgICAgICAgIHRva2VuID0gbG9va2FoZWFkOworICAgICAgICBpZiAo
dG9rZW4udmFsdWUgPT09ICcuLi4nKSB7CisgICAgICAgICAgICB0b2tlbiA9IGxleCgpOworICAg
ICAgICAgICAgcmVzdCA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAobWF0Y2goJ1sn
KSkgeworICAgICAgICAgICAgcGFyYW0gPSBwYXJzZUFycmF5SW5pdGlhbGlzZXIoKTsKKyAgICAg
ICAgICAgIHJlaW50ZXJwcmV0QXNEZXN0cnVjdHVyZWRQYXJhbWV0ZXIob3B0aW9ucywgcGFyYW0p
OworICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKCd7JykpIHsKKyAgICAgICAgICAgIGlmIChyZXN0
KSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuT2JqZWN0UGF0dGVy
bkFzUmVzdFBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwYXJhbSA9IHBh
cnNlT2JqZWN0SW5pdGlhbGlzZXIoKTsKKyAgICAgICAgICAgIHJlaW50ZXJwcmV0QXNEZXN0cnVj
dHVyZWRQYXJhbWV0ZXIob3B0aW9ucywgcGFyYW0pOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgcGFyYW0gPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOworICAgICAgICAgICAgdmFs
aWRhdGVQYXJhbShvcHRpb25zLCB0b2tlbiwgdG9rZW4udmFsdWUpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKHJlc3QpIHsKKyAgICAgICAgICAgIGlmICghbWF0Y2goJyknKSkgeworICAgICAg
ICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlBhcmFtZXRlckFmdGVyUmVzdFBhcmFt
ZXRlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvcHRpb25zLnJlc3QgPSBwYXJhbTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIG9wdGlvbnMu
cGFyYW1zLnB1c2gocGFyYW0pOworICAgICAgICByZXR1cm4gIW1hdGNoKCcpJyk7CisgICAgfQor
CisgICAgZnVuY3Rpb24gcGFyc2VQYXJhbXMoZmlyc3RSZXN0cmljdGVkKSB7CisgICAgICAgIHZh
ciBvcHRpb25zOworCisgICAgICAgIG9wdGlvbnMgPSB7CisgICAgICAgICAgICBwYXJhbXM6IFtd
LAorICAgICAgICAgICAgcmVzdDogbnVsbCwKKyAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZDog
Zmlyc3RSZXN0cmljdGVkCisgICAgICAgIH07CisKKyAgICAgICAgZXhwZWN0KCcoJyk7CisKKyAg
ICAgICAgaWYgKCFtYXRjaCgnKScpKSB7CisgICAgICAgICAgICBvcHRpb25zLnBhcmFtU2V0ID0g
e307CisgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIXBhcnNlUGFyYW0ob3B0aW9ucykpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGV4cGVjdCgnLCcpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZXhwZWN0KCcpJyk7CisKKyAgICAgICAgcmV0
dXJuIG9wdGlvbnM7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VGdW5jdGlvbkRlY2xhcmF0
aW9uKCkgeworICAgICAgICB2YXIgaWQsIGJvZHksIHRva2VuLCB0bXAsIGZpcnN0UmVzdHJpY3Rl
ZCwgbWVzc2FnZSwgcHJldmlvdXNTdHJpY3QsIHByZXZpb3VzWWllbGRBbGxvd2VkLCBnZW5lcmF0
b3IsIGV4cHJlc3Npb247CisKKyAgICAgICAgZXhwZWN0S2V5d29yZCgnZnVuY3Rpb24nKTsKKwor
ICAgICAgICBnZW5lcmF0b3IgPSBmYWxzZTsKKyAgICAgICAgaWYgKG1hdGNoKCcqJykpIHsKKyAg
ICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgZ2VuZXJhdG9yID0gdHJ1ZTsKKyAgICAgICAg
fQorCisgICAgICAgIHRva2VuID0gbG9va2FoZWFkOworCisgICAgICAgIGlkID0gcGFyc2VWYXJp
YWJsZUlkZW50aWZpZXIoKTsKKyAgICAgICAgaWYgKHN0cmljdCkgeworICAgICAgICAgICAgaWYg
KGlzUmVzdHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dF
cnJvclRvbGVyYW50KHRva2VuLCBNZXNzYWdlcy5TdHJpY3RGdW5jdGlvbk5hbWUpOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGlzUmVzdHJpY3RlZFdv
cmQodG9rZW4udmFsdWUpKSB7CisgICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9r
ZW47CisgICAgICAgICAgICAgICAgbWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdEZ1bmN0aW9uTmFt
ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHRva2Vu
LnZhbHVlKSkgeworICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOworICAg
ICAgICAgICAgICAgIG1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQ7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB0bXAgPSBwYXJzZVBhcmFtcyhmaXJzdFJl
c3RyaWN0ZWQpOworICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0bXAuZmlyc3RSZXN0cmljdGVk
OworICAgICAgICBpZiAodG1wLm1lc3NhZ2UpIHsKKyAgICAgICAgICAgIG1lc3NhZ2UgPSB0bXAu
bWVzc2FnZTsKKyAgICAgICAgfQorCisgICAgICAgIHByZXZpb3VzU3RyaWN0ID0gc3RyaWN0Owor
ICAgICAgICBwcmV2aW91c1lpZWxkQWxsb3dlZCA9IHN0YXRlLnlpZWxkQWxsb3dlZDsKKyAgICAg
ICAgc3RhdGUueWllbGRBbGxvd2VkID0gZ2VuZXJhdG9yOworCisgICAgICAgIC8vIGhlcmUgd2Ug
cmVkbyBzb21lIHdvcmsgaW4gb3JkZXIgdG8gc2V0ICdleHByZXNzaW9uJworICAgICAgICBleHBy
ZXNzaW9uID0gIW1hdGNoKCd7Jyk7CisgICAgICAgIGJvZHkgPSBwYXJzZUNvbmNpc2VCb2R5KCk7
CisKKyAgICAgICAgaWYgKHN0cmljdCAmJiBmaXJzdFJlc3RyaWN0ZWQpIHsKKyAgICAgICAgICAg
IHRocm93RXJyb3IoZmlyc3RSZXN0cmljdGVkLCBtZXNzYWdlKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoc3RyaWN0ICYmIHRtcC5zdHJpY3RlZCkgeworICAgICAgICAgICAgdGhyb3dFcnJvclRv
bGVyYW50KHRtcC5zdHJpY3RlZCwgbWVzc2FnZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0
YXRlLnlpZWxkQWxsb3dlZCAmJiAhc3RhdGUueWllbGRGb3VuZCkgeworICAgICAgICAgICAgdGhy
b3dFcnJvcih7fSwgTWVzc2FnZXMuTm9ZaWVsZEluR2VuZXJhdG9yKTsKKyAgICAgICAgfQorICAg
ICAgICBzdHJpY3QgPSBwcmV2aW91c1N0cmljdDsKKyAgICAgICAgc3RhdGUueWllbGRBbGxvd2Vk
ID0gcHJldmlvdXNZaWVsZEFsbG93ZWQ7CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0
ZUZ1bmN0aW9uRGVjbGFyYXRpb24oaWQsIHRtcC5wYXJhbXMsIFtdLCBib2R5LCB0bXAucmVzdCwg
Z2VuZXJhdG9yLCBleHByZXNzaW9uKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZUZ1bmN0
aW9uRXhwcmVzc2lvbigpIHsKKyAgICAgICAgdmFyIHRva2VuLCBpZCA9IG51bGwsIGZpcnN0UmVz
dHJpY3RlZCwgbWVzc2FnZSwgdG1wLCBib2R5LCBwcmV2aW91c1N0cmljdCwgcHJldmlvdXNZaWVs
ZEFsbG93ZWQsIGdlbmVyYXRvciwgZXhwcmVzc2lvbjsKKworICAgICAgICBleHBlY3RLZXl3b3Jk
KCdmdW5jdGlvbicpOworCisgICAgICAgIGdlbmVyYXRvciA9IGZhbHNlOworCisgICAgICAgIGlm
IChtYXRjaCgnKicpKSB7CisgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgIGdlbmVyYXRv
ciA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1hdGNoKCcoJykpIHsKKyAgICAg
ICAgICAgIHRva2VuID0gbG9va2FoZWFkOworICAgICAgICAgICAgaWQgPSBwYXJzZVZhcmlhYmxl
SWRlbnRpZmllcigpOworICAgICAgICAgICAgaWYgKHN0cmljdCkgeworICAgICAgICAgICAgICAg
IGlmIChpc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworICAgICAgICAgICAgICAgICAg
ICB0aHJvd0Vycm9yVG9sZXJhbnQodG9rZW4sIE1lc3NhZ2VzLlN0cmljdEZ1bmN0aW9uTmFtZSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBpZiAoaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47CisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Ug
PSBNZXNzYWdlcy5TdHJpY3RGdW5jdGlvbk5hbWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChpc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOworICAgICAgICAgICAgICAgICAgICBtZXNz
YWdlID0gTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHRtcCA9IHBhcnNlUGFyYW1zKGZpcnN0
UmVzdHJpY3RlZCk7CisgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRtcC5maXJzdFJlc3RyaWN0
ZWQ7CisgICAgICAgIGlmICh0bXAubWVzc2FnZSkgeworICAgICAgICAgICAgbWVzc2FnZSA9IHRt
cC5tZXNzYWdlOworICAgICAgICB9CisKKyAgICAgICAgcHJldmlvdXNTdHJpY3QgPSBzdHJpY3Q7
CisgICAgICAgIHByZXZpb3VzWWllbGRBbGxvd2VkID0gc3RhdGUueWllbGRBbGxvd2VkOworICAg
ICAgICBzdGF0ZS55aWVsZEFsbG93ZWQgPSBnZW5lcmF0b3I7CisKKyAgICAgICAgLy8gaGVyZSB3
ZSByZWRvIHNvbWUgd29yayBpbiBvcmRlciB0byBzZXQgJ2V4cHJlc3Npb24nCisgICAgICAgIGV4
cHJlc3Npb24gPSAhbWF0Y2goJ3snKTsKKyAgICAgICAgYm9keSA9IHBhcnNlQ29uY2lzZUJvZHko
KTsKKworICAgICAgICBpZiAoc3RyaWN0ICYmIGZpcnN0UmVzdHJpY3RlZCkgeworICAgICAgICAg
ICAgdGhyb3dFcnJvcihmaXJzdFJlc3RyaWN0ZWQsIG1lc3NhZ2UpOworICAgICAgICB9CisgICAg
ICAgIGlmIChzdHJpY3QgJiYgdG1wLnN0cmljdGVkKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9y
VG9sZXJhbnQodG1wLnN0cmljdGVkLCBtZXNzYWdlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
c3RhdGUueWllbGRBbGxvd2VkICYmICFzdGF0ZS55aWVsZEZvdW5kKSB7CisgICAgICAgICAgICB0
aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5Ob1lpZWxkSW5HZW5lcmF0b3IpOworICAgICAgICB9Cisg
ICAgICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0OworICAgICAgICBzdGF0ZS55aWVsZEFsbG93
ZWQgPSBwcmV2aW91c1lpZWxkQWxsb3dlZDsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3Jl
YXRlRnVuY3Rpb25FeHByZXNzaW9uKGlkLCB0bXAucGFyYW1zLCBbXSwgYm9keSwgdG1wLnJlc3Qs
IGdlbmVyYXRvciwgZXhwcmVzc2lvbik7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VZaWVs
ZEV4cHJlc3Npb24oKSB7CisgICAgICAgIHZhciBkZWxlZ2F0ZUZsYWcsIGV4cHIsIHByZXZpb3Vz
WWllbGRBbGxvd2VkOworCisgICAgICAgIGV4cGVjdEtleXdvcmQoJ3lpZWxkJyk7CisKKyAgICAg
ICAgaWYgKCFzdGF0ZS55aWVsZEFsbG93ZWQpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3JUb2xl
cmFudCh7fSwgTWVzc2FnZXMuSWxsZWdhbFlpZWxkKTsKKyAgICAgICAgfQorCisgICAgICAgIGRl
bGVnYXRlRmxhZyA9IGZhbHNlOworICAgICAgICBpZiAobWF0Y2goJyonKSkgeworICAgICAgICAg
ICAgbGV4KCk7CisgICAgICAgICAgICBkZWxlZ2F0ZUZsYWcgPSB0cnVlOworICAgICAgICB9CisK
KyAgICAgICAgLy8gSXQgaXMgYSBTeW50YXggRXJyb3IgaWYgYW55IEFzc2lnbm1lbnRFeHByZXNz
aW9uIENvbnRhaW5zIFlpZWxkRXhwcmVzc2lvbi4KKyAgICAgICAgcHJldmlvdXNZaWVsZEFsbG93
ZWQgPSBzdGF0ZS55aWVsZEFsbG93ZWQ7CisgICAgICAgIHN0YXRlLnlpZWxkQWxsb3dlZCA9IGZh
bHNlOworICAgICAgICBleHByID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOworICAgICAg
ICBzdGF0ZS55aWVsZEFsbG93ZWQgPSBwcmV2aW91c1lpZWxkQWxsb3dlZDsKKyAgICAgICAgc3Rh
dGUueWllbGRGb3VuZCA9IHRydWU7CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVlp
ZWxkRXhwcmVzc2lvbihleHByLCBkZWxlZ2F0ZUZsYWcpOworICAgIH0KKworICAgIC8vIDE0IENs
YXNzZXMKKworICAgIGZ1bmN0aW9uIHBhcnNlTWV0aG9kRGVmaW5pdGlvbihleGlzdGluZ1Byb3BO
YW1lcykgeworICAgICAgICB2YXIgdG9rZW4sIGtleSwgcGFyYW0sIHByb3BUeXBlLCBpc1ZhbGlk
RHVwbGljYXRlUHJvcCA9IGZhbHNlOworCisgICAgICAgIGlmIChsb29rYWhlYWQudmFsdWUgPT09
ICdzdGF0aWMnKSB7CisgICAgICAgICAgICBwcm9wVHlwZSA9IENsYXNzUHJvcGVydHlUeXBlLnN0
YXRpYzsKKyAgICAgICAgICAgIGxleCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
cHJvcFR5cGUgPSBDbGFzc1Byb3BlcnR5VHlwZS5wcm90b3R5cGU7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobWF0Y2goJyonKSkgeworICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICBy
ZXR1cm4gZGVsZWdhdGUuY3JlYXRlTWV0aG9kRGVmaW5pdGlvbigKKyAgICAgICAgICAgICAgICBw
cm9wVHlwZSwKKyAgICAgICAgICAgICAgICAnJywKKyAgICAgICAgICAgICAgICBwYXJzZU9iamVj
dFByb3BlcnR5S2V5KCksCisgICAgICAgICAgICAgICAgcGFyc2VQcm9wZXJ0eU1ldGhvZEZ1bmN0
aW9uKHsgZ2VuZXJhdG9yOiB0cnVlIH0pCisgICAgICAgICAgICApOworICAgICAgICB9CisKKyAg
ICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVy
dHlLZXkoKTsKKworICAgICAgICBpZiAodG9rZW4udmFsdWUgPT09ICdnZXQnICYmICFtYXRjaCgn
KCcpKSB7CisgICAgICAgICAgICBrZXkgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7CisKKyAg
ICAgICAgICAgIC8vIEl0IGlzIGEgc3ludGF4IGVycm9yIGlmIGFueSBvdGhlciBwcm9wZXJ0aWVz
IGhhdmUgYSBuYW1lCisgICAgICAgICAgICAvLyBkdXBsaWNhdGluZyB0aGlzIG9uZSB1bmxlc3Mg
dGhleSBhcmUgYSBzZXR0ZXIKKyAgICAgICAgICAgIGlmIChleGlzdGluZ1Byb3BOYW1lc1twcm9w
VHlwZV0uaGFzT3duUHJvcGVydHkoa2V5Lm5hbWUpKSB7CisgICAgICAgICAgICAgICAgaXNWYWxp
ZER1cGxpY2F0ZVByb3AgPQorICAgICAgICAgICAgICAgICAgICAvLyBUaGVyZSBpc24ndCBhbHJl
YWR5IGEgZ2V0dGVyIGZvciB0aGlzIHByb3AKKyAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdQ
cm9wTmFtZXNbcHJvcFR5cGVdW2tleS5uYW1lXS5nZXQgPT09IHVuZGVmaW5lZAorICAgICAgICAg
ICAgICAgICAgICAvLyBUaGVyZSBpc24ndCBhbHJlYWR5IGEgZGF0YSBwcm9wIGJ5IHRoaXMgbmFt
ZQorICAgICAgICAgICAgICAgICAgICAmJiBleGlzdGluZ1Byb3BOYW1lc1twcm9wVHlwZV1ba2V5
Lm5hbWVdLmRhdGEgPT09IHVuZGVmaW5lZAorICAgICAgICAgICAgICAgICAgICAvLyBUaGUgb25s
eSBleGlzdGluZyBwcm9wIGJ5IHRoaXMgbmFtZSBpcyBhIHNldHRlcgorICAgICAgICAgICAgICAg
ICAgICAmJiBleGlzdGluZ1Byb3BOYW1lc1twcm9wVHlwZV1ba2V5Lm5hbWVdLnNldCAhPT0gdW5k
ZWZpbmVkOworICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZER1cGxpY2F0ZVByb3ApIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcihrZXksIE1lc3NhZ2VzLklsbGVnYWxEdXBsaWNh
dGVDbGFzc1Byb3BlcnR5KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIGV4aXN0aW5nUHJvcE5hbWVzW3Byb3BUeXBlXVtrZXkubmFtZV0g
PSB7fTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGV4aXN0aW5nUHJvcE5hbWVzW3Byb3BU
eXBlXVtrZXkubmFtZV0uZ2V0ID0gdHJ1ZTsKKworICAgICAgICAgICAgZXhwZWN0KCcoJyk7Cisg
ICAgICAgICAgICBleHBlY3QoJyknKTsKKyAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVh
dGVNZXRob2REZWZpbml0aW9uKAorICAgICAgICAgICAgICAgIHByb3BUeXBlLAorICAgICAgICAg
ICAgICAgICdnZXQnLAorICAgICAgICAgICAgICAgIGtleSwKKyAgICAgICAgICAgICAgICBwYXJz
ZVByb3BlcnR5RnVuY3Rpb24oeyBnZW5lcmF0b3I6IGZhbHNlIH0pCisgICAgICAgICAgICApOwor
ICAgICAgICB9CisgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PT0gJ3NldCcgJiYgIW1hdGNoKCco
JykpIHsKKyAgICAgICAgICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTsKKworICAg
ICAgICAgICAgLy8gSXQgaXMgYSBzeW50YXggZXJyb3IgaWYgYW55IG90aGVyIHByb3BlcnRpZXMg
aGF2ZSBhIG5hbWUKKyAgICAgICAgICAgIC8vIGR1cGxpY2F0aW5nIHRoaXMgb25lIHVubGVzcyB0
aGV5IGFyZSBhIGdldHRlcgorICAgICAgICAgICAgaWYgKGV4aXN0aW5nUHJvcE5hbWVzW3Byb3BU
eXBlXS5oYXNPd25Qcm9wZXJ0eShrZXkubmFtZSkpIHsKKyAgICAgICAgICAgICAgICBpc1ZhbGlk
RHVwbGljYXRlUHJvcCA9CisgICAgICAgICAgICAgICAgICAgIC8vIFRoZXJlIGlzbid0IGFscmVh
ZHkgYSBzZXR0ZXIgZm9yIHRoaXMgcHJvcAorICAgICAgICAgICAgICAgICAgICBleGlzdGluZ1By
b3BOYW1lc1twcm9wVHlwZV1ba2V5Lm5hbWVdLnNldCA9PT0gdW5kZWZpbmVkCisgICAgICAgICAg
ICAgICAgICAgIC8vIFRoZXJlIGlzbid0IGFscmVhZHkgYSBkYXRhIHByb3AgYnkgdGhpcyBuYW1l
CisgICAgICAgICAgICAgICAgICAgICYmIGV4aXN0aW5nUHJvcE5hbWVzW3Byb3BUeXBlXVtrZXku
bmFtZV0uZGF0YSA9PT0gdW5kZWZpbmVkCisgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBvbmx5
IGV4aXN0aW5nIHByb3AgYnkgdGhpcyBuYW1lIGlzIGEgZ2V0dGVyCisgICAgICAgICAgICAgICAg
ICAgICYmIGV4aXN0aW5nUHJvcE5hbWVzW3Byb3BUeXBlXVtrZXkubmFtZV0uZ2V0ICE9PSB1bmRl
ZmluZWQ7CisgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkRHVwbGljYXRlUHJvcCkgeworICAg
ICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGtleSwgTWVzc2FnZXMuSWxsZWdhbER1cGxpY2F0
ZUNsYXNzUHJvcGVydHkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgZXhpc3RpbmdQcm9wTmFtZXNbcHJvcFR5cGVdW2tleS5uYW1lXSA9
IHt9OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZXhpc3RpbmdQcm9wTmFtZXNbcHJvcFR5
cGVdW2tleS5uYW1lXS5zZXQgPSB0cnVlOworCisgICAgICAgICAgICBleHBlY3QoJygnKTsKKyAg
ICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkOworICAgICAgICAgICAgcGFyYW0gPSBbIHBhcnNl
VmFyaWFibGVJZGVudGlmaWVyKCkgXTsKKyAgICAgICAgICAgIGV4cGVjdCgnKScpOworICAgICAg
ICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZU1ldGhvZERlZmluaXRpb24oCisgICAgICAgICAg
ICAgICAgcHJvcFR5cGUsCisgICAgICAgICAgICAgICAgJ3NldCcsCisgICAgICAgICAgICAgICAg
a2V5LAorICAgICAgICAgICAgICAgIHBhcnNlUHJvcGVydHlGdW5jdGlvbih7IHBhcmFtczogcGFy
YW0sIGdlbmVyYXRvcjogZmFsc2UsIG5hbWU6IHRva2VuIH0pCisgICAgICAgICAgICApOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gSXQgaXMgYSBzeW50YXggZXJyb3IgaWYgYW55IG90aGVyIHBy
b3BlcnRpZXMgaGF2ZSB0aGUgc2FtZSBuYW1lIGFzIGEKKyAgICAgICAgLy8gbm9uLWdldHRlciwg
bm9uLXNldHRlciBtZXRob2QKKyAgICAgICAgaWYgKGV4aXN0aW5nUHJvcE5hbWVzW3Byb3BUeXBl
XS5oYXNPd25Qcm9wZXJ0eShrZXkubmFtZSkpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Ioa2V5
LCBNZXNzYWdlcy5JbGxlZ2FsRHVwbGljYXRlQ2xhc3NQcm9wZXJ0eSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBleGlzdGluZ1Byb3BOYW1lc1twcm9wVHlwZV1ba2V5Lm5hbWVdID0g
e307CisgICAgICAgIH0KKyAgICAgICAgZXhpc3RpbmdQcm9wTmFtZXNbcHJvcFR5cGVdW2tleS5u
YW1lXS5kYXRhID0gdHJ1ZTsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlTWV0aG9k
RGVmaW5pdGlvbigKKyAgICAgICAgICAgIHByb3BUeXBlLAorICAgICAgICAgICAgJycsCisgICAg
ICAgICAgICBrZXksCisgICAgICAgICAgICBwYXJzZVByb3BlcnR5TWV0aG9kRnVuY3Rpb24oeyBn
ZW5lcmF0b3I6IGZhbHNlIH0pCisgICAgICAgICk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFy
c2VDbGFzc0VsZW1lbnQoZXhpc3RpbmdQcm9wcykgeworICAgICAgICBpZiAobWF0Y2goJzsnKSkg
eworICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHBhcnNlTWV0aG9kRGVmaW5pdGlvbihleGlzdGluZ1Byb3BzKTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBwYXJzZUNsYXNzQm9keSgpIHsKKyAgICAgICAgdmFyIGNsYXNzRWxl
bWVudCwgY2xhc3NFbGVtZW50cyA9IFtdLCBleGlzdGluZ1Byb3BzID0ge307CisKKyAgICAgICAg
ZXhpc3RpbmdQcm9wc1tDbGFzc1Byb3BlcnR5VHlwZS5zdGF0aWNdID0ge307CisgICAgICAgIGV4
aXN0aW5nUHJvcHNbQ2xhc3NQcm9wZXJ0eVR5cGUucHJvdG90eXBlXSA9IHt9OworCisgICAgICAg
IGV4cGVjdCgneycpOworCisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAg
ICAgICAgaWYgKG1hdGNoKCd9JykpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGNsYXNzRWxlbWVudCA9IHBhcnNlQ2xhc3NFbGVtZW50KGV4aXN0
aW5nUHJvcHMpOworCisgICAgICAgICAgICBpZiAodHlwZW9mIGNsYXNzRWxlbWVudCAhPT0gJ3Vu
ZGVmaW5lZCcpIHsKKyAgICAgICAgICAgICAgICBjbGFzc0VsZW1lbnRzLnB1c2goY2xhc3NFbGVt
ZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGV4cGVjdCgnfScpOwor
CisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVDbGFzc0JvZHkoY2xhc3NFbGVtZW50cyk7
CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VDbGFzc0V4cHJlc3Npb24oKSB7CisgICAgICAg
IHZhciBpZCwgcHJldmlvdXNZaWVsZEFsbG93ZWQsIHN1cGVyQ2xhc3MgPSBudWxsOworCisgICAg
ICAgIGV4cGVjdEtleXdvcmQoJ2NsYXNzJyk7CisKKyAgICAgICAgaWYgKCFtYXRjaEtleXdvcmQo
J2V4dGVuZHMnKSAmJiAhbWF0Y2goJ3snKSkgeworICAgICAgICAgICAgaWQgPSBwYXJzZVZhcmlh
YmxlSWRlbnRpZmllcigpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgn
ZXh0ZW5kcycpKSB7CisgICAgICAgICAgICBleHBlY3RLZXl3b3JkKCdleHRlbmRzJyk7CisgICAg
ICAgICAgICBwcmV2aW91c1lpZWxkQWxsb3dlZCA9IHN0YXRlLnlpZWxkQWxsb3dlZDsKKyAgICAg
ICAgICAgIHN0YXRlLnlpZWxkQWxsb3dlZCA9IGZhbHNlOworICAgICAgICAgICAgc3VwZXJDbGFz
cyA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIHN0YXRlLnlpZWxk
QWxsb3dlZCA9IHByZXZpb3VzWWllbGRBbGxvd2VkOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIGRlbGVnYXRlLmNyZWF0ZUNsYXNzRXhwcmVzc2lvbihpZCwgc3VwZXJDbGFzcywgcGFyc2VD
bGFzc0JvZHkoKSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VDbGFzc0RlY2xhcmF0aW9u
KCkgeworICAgICAgICB2YXIgdG9rZW4sIGlkLCBwcmV2aW91c1lpZWxkQWxsb3dlZCwgc3VwZXJD
bGFzcyA9IG51bGw7CisKKyAgICAgICAgZXhwZWN0S2V5d29yZCgnY2xhc3MnKTsKKworICAgICAg
ICB0b2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgaWQgPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmll
cigpOworCisgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2V4dGVuZHMnKSkgeworICAgICAgICAg
ICAgZXhwZWN0S2V5d29yZCgnZXh0ZW5kcycpOworICAgICAgICAgICAgcHJldmlvdXNZaWVsZEFs
bG93ZWQgPSBzdGF0ZS55aWVsZEFsbG93ZWQ7CisgICAgICAgICAgICBzdGF0ZS55aWVsZEFsbG93
ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHN1cGVyQ2xhc3MgPSBwYXJzZUFzc2lnbm1lbnRFeHBy
ZXNzaW9uKCk7CisgICAgICAgICAgICBzdGF0ZS55aWVsZEFsbG93ZWQgPSBwcmV2aW91c1lpZWxk
QWxsb3dlZDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVDbGFz
c0RlY2xhcmF0aW9uKGlkLCBzdXBlckNsYXNzLCBwYXJzZUNsYXNzQm9keSgpKTsKKyAgICB9CisK
KyAgICAvLyAxNSBQcm9ncmFtCisKKyAgICBmdW5jdGlvbiBwYXJzZVNvdXJjZUVsZW1lbnQoKSB7
CisgICAgICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uS2V5d29yZCkgeworICAgICAg
ICAgICAgc3dpdGNoIChsb29rYWhlYWQudmFsdWUpIHsKKyAgICAgICAgICAgIGNhc2UgJ2NvbnN0
JzoKKyAgICAgICAgICAgIGNhc2UgJ2xldCc6CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNl
Q29uc3RMZXREZWNsYXJhdGlvbihsb29rYWhlYWQudmFsdWUpOworICAgICAgICAgICAgY2FzZSAn
ZnVuY3Rpb24nOgorICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRp
b24oKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNl
U3RhdGVtZW50KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAobG9v
a2FoZWFkLnR5cGUgIT09IFRva2VuLkVPRikgeworICAgICAgICAgICAgcmV0dXJuIHBhcnNlU3Rh
dGVtZW50KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZVByb2dyYW1F
bGVtZW50KCkgeworICAgICAgICB2YXIgbGluZU51bWJlciwgdG9rZW47CisKKyAgICAgICAgaWYg
KGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5LZXl3b3JkKSB7CisgICAgICAgICAgICBzd2l0Y2gg
KGxvb2thaGVhZC52YWx1ZSkgeworICAgICAgICAgICAgY2FzZSAnZXhwb3J0JzoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gcGFyc2VFeHBvcnREZWNsYXJhdGlvbigpOworICAgICAgICAgICAgY2Fz
ZSAnaW1wb3J0JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbXBvcnREZWNsYXJhdGlv
bigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGxvb2thaGVhZC52
YWx1ZSA9PT0gJ21vZHVsZScgJiYgbG9va2FoZWFkLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIp
IHsKKyAgICAgICAgICAgIGxpbmVOdW1iZXIgPSBsb29rYWhlYWQubGluZU51bWJlcjsKKyAgICAg
ICAgICAgIHRva2VuID0gbG9va2FoZWFkMigpOworICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUg
PT09IFRva2VuLklkZW50aWZpZXIgJiYgdG9rZW4ubGluZU51bWJlciA9PT0gbGluZU51bWJlcikg
eworICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZU1vZHVsZURlY2xhcmF0aW9uKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcGFyc2VTb3VyY2VFbGVtZW50
KCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VQcm9ncmFtRWxlbWVudHMoKSB7CisgICAg
ICAgIHZhciBzb3VyY2VFbGVtZW50LCBzb3VyY2VFbGVtZW50cyA9IFtdLCB0b2tlbiwgZGlyZWN0
aXZlLCBmaXJzdFJlc3RyaWN0ZWQ7CisKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7
CisgICAgICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgICAgIGlmICh0b2tlbi50
eXBlICE9PSBUb2tlbi5TdHJpbmdMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNvdXJjZUVsZW1lbnQgPSBwYXJzZVByb2dyYW1F
bGVtZW50KCk7CisgICAgICAgICAgICBzb3VyY2VFbGVtZW50cy5wdXNoKHNvdXJjZUVsZW1lbnQp
OworICAgICAgICAgICAgaWYgKHNvdXJjZUVsZW1lbnQuZXhwcmVzc2lvbi50eXBlICE9PSBTeW50
YXguTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IGRpcmVjdGl2ZQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGlyZWN0
aXZlID0gc291cmNlLnNsaWNlKHRva2VuLnJhbmdlWzBdICsgMSwgdG9rZW4ucmFuZ2VbMV0gLSAx
KTsKKyAgICAgICAgICAgIGlmIChkaXJlY3RpdmUgPT09ICd1c2Ugc3RyaWN0JykgeworICAgICAg
ICAgICAgICAgIHN0cmljdCA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKGZpcnN0UmVzdHJp
Y3RlZCkgeworICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoZmlyc3RSZXN0
cmljdGVkLCBNZXNzYWdlcy5TdHJpY3RPY3RhbExpdGVyYWwpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKCFmaXJzdFJlc3RyaWN0
ZWQgJiYgdG9rZW4ub2N0YWwpIHsKKyAgICAgICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVk
ID0gdG9rZW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBzb3VyY2VFbGVt
ZW50ID0gcGFyc2VQcm9ncmFtRWxlbWVudCgpOworICAgICAgICAgICAgaWYgKHR5cGVvZiBzb3Vy
Y2VFbGVtZW50ID09PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgc291cmNlRWxlbWVudHMucHVzaChzb3VyY2VFbGVtZW50
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc291cmNlRWxlbWVudHM7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gcGFyc2VNb2R1bGVFbGVtZW50KCkgeworICAgICAgICByZXR1cm4gcGFyc2VQ
cm9ncmFtRWxlbWVudCgpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlTW9kdWxlRWxlbWVu
dHMoKSB7CisgICAgICAgIHZhciBsaXN0ID0gW10sCisgICAgICAgICAgICBzdGF0ZW1lbnQ7CisK
KyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAobWF0Y2go
J30nKSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgc3RhdGVtZW50ID0gcGFyc2VNb2R1bGVFbGVtZW50KCk7CisgICAgICAgICAgICBpZiAodHlw
ZW9mIHN0YXRlbWVudCA9PT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxpc3QucHVzaChzdGF0ZW1lbnQpOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIGxpc3Q7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VN
b2R1bGVCbG9jaygpIHsKKyAgICAgICAgdmFyIGJsb2NrOworCisgICAgICAgIGV4cGVjdCgneycp
OworCisgICAgICAgIGJsb2NrID0gcGFyc2VNb2R1bGVFbGVtZW50cygpOworCisgICAgICAgIGV4
cGVjdCgnfScpOworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVCbG9ja1N0YXRlbWVu
dChibG9jayk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VQcm9ncmFtKCkgeworICAgICAg
ICB2YXIgYm9keTsKKyAgICAgICAgc3RyaWN0ID0gZmFsc2U7CisgICAgICAgIHBlZWsoKTsKKyAg
ICAgICAgYm9keSA9IHBhcnNlUHJvZ3JhbUVsZW1lbnRzKCk7CisgICAgICAgIHJldHVybiBkZWxl
Z2F0ZS5jcmVhdGVQcm9ncmFtKGJvZHkpOworICAgIH0KKworICAgIC8vIFRoZSBmb2xsb3dpbmcg
ZnVuY3Rpb25zIGFyZSBuZWVkZWQgb25seSB3aGVuIHRoZSBvcHRpb24gdG8gcHJlc2VydmUKKyAg
ICAvLyB0aGUgY29tbWVudHMgaXMgYWN0aXZlLgorCisgICAgZnVuY3Rpb24gYWRkQ29tbWVudCh0
eXBlLCB2YWx1ZSwgc3RhcnQsIGVuZCwgbG9jKSB7CisgICAgICAgIGFzc2VydCh0eXBlb2Ygc3Rh
cnQgPT09ICdudW1iZXInLCAnQ29tbWVudCBtdXN0IGhhdmUgdmFsaWQgcG9zaXRpb24nKTsKKwor
ICAgICAgICAvLyBCZWNhdXNlIHRoZSB3YXkgdGhlIGFjdHVhbCB0b2tlbiBpcyBzY2FubmVkLCBv
ZnRlbiB0aGUgY29tbWVudHMKKyAgICAgICAgLy8gKGlmIGFueSkgYXJlIHNraXBwZWQgdHdpY2Ug
ZHVyaW5nIHRoZSBsZXhpY2FsIGFuYWx5c2lzLgorICAgICAgICAvLyBUaHVzLCB3ZSBuZWVkIHRv
IHNraXAgYWRkaW5nIGEgY29tbWVudCBpZiB0aGUgY29tbWVudCBhcnJheSBhbHJlYWR5CisgICAg
ICAgIC8vIGhhbmRsZWQgaXQuCisgICAgICAgIGlmIChleHRyYS5jb21tZW50cy5sZW5ndGggPiAw
KSB7CisgICAgICAgICAgICBpZiAoZXh0cmEuY29tbWVudHNbZXh0cmEuY29tbWVudHMubGVuZ3Ro
IC0gMV0ucmFuZ2VbMV0gPiBzdGFydCkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGV4dHJhLmNvbW1lbnRzLnB1c2goeworICAg
ICAgICAgICAgdHlwZTogdHlwZSwKKyAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKKyAgICAgICAg
ICAgIHJhbmdlOiBbc3RhcnQsIGVuZF0sCisgICAgICAgICAgICBsb2M6IGxvYworICAgICAgICB9
KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzY2FuQ29tbWVudCgpIHsKKyAgICAgICAgdmFyIGNv
bW1lbnQsIGNoLCBsb2MsIHN0YXJ0LCBibG9ja0NvbW1lbnQsIGxpbmVDb21tZW50OworCisgICAg
ICAgIGNvbW1lbnQgPSAnJzsKKyAgICAgICAgYmxvY2tDb21tZW50ID0gZmFsc2U7CisgICAgICAg
IGxpbmVDb21tZW50ID0gZmFsc2U7CisKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7
CisgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisKKyAgICAgICAgICAgIGlmIChsaW5l
Q29tbWVudCkgeworICAgICAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4KytdOworICAgICAg
ICAgICAgICAgIGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGxvYy5lbmQgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5l
OiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxp
bmVTdGFydCAtIDEKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAg
bGluZUNvbW1lbnQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgYWRkQ29tbWVudCgnTGlu
ZScsIGNvbW1lbnQsIHN0YXJ0LCBpbmRleCAtIDEsIGxvYyk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChjaCA9PT0gJ1xyJyAmJiBzb3VyY2VbaW5kZXhdID09PSAnXG4nKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICsrbGluZU51bWJlcjsKKyAgICAgICAgICAgICAgICAgICAgbGluZVN0YXJ0ID0g
aW5kZXg7CisgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSAnJzsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKGluZGV4ID49IGxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICBsaW5l
Q29tbWVudCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBjb21tZW50ICs9IGNoOworICAg
ICAgICAgICAgICAgICAgICBsb2MuZW5kID0geworICAgICAgICAgICAgICAgICAgICAgICAgbGlu
ZTogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogbGVuZ3RoIC0g
bGluZVN0YXJ0CisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgIGFk
ZENvbW1lbnQoJ0xpbmUnLCBjb21tZW50LCBzdGFydCwgbGVuZ3RoLCBsb2MpOworICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgKz0gY2g7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChibG9ja0NvbW1lbnQpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICdccicgJiYgc291cmNlW2luZGV4ICsgMV0g
PT09ICdcbicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjb21tZW50ICs9ICdcclxuJzsKKyAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgKz0gY2g7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgKytsaW5lTnVtYmVyOworICAgICAgICAg
ICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAgICAgICBsaW5lU3RhcnQgPSBpbmRl
eDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IGxlbmd0aCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAn
SUxMRUdBTCcpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107CisgICAgICAgICAg
ICAgICAgICAgIGlmIChpbmRleCA+PSBsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjb21tZW50ICs9IGNoOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICcqJykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNo
ID09PSAnLycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gY29tbWVu
dC5zdWJzdHIoMCwgY29tbWVudC5sZW5ndGggLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBibG9ja0NvbW1lbnQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAr
K2luZGV4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYy5lbmQgPSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnQKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZENvbW1l
bnQoJ0Jsb2NrJywgY29tbWVudCwgc3RhcnQsIGluZGV4LCBsb2MpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbW1lbnQgPSAnJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAoY2ggPT09ICcvJykgeworICAgICAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4ICsg
MV07CisgICAgICAgICAgICAgICAgaWYgKGNoID09PSAnLycpIHsKKyAgICAgICAgICAgICAgICAg
ICAgbG9jID0geworICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBp
bmRleDsKKyAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gMjsKKyAgICAgICAgICAgICAgICAg
ICAgbGluZUNvbW1lbnQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0g
bGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2MuZW5kID0geworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydAorICAgICAgICAgICAgICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVDb21tZW50ID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgICAgICBhZGRDb21tZW50KCdMaW5lJywgY29tbWVudCwgc3RhcnQsIGlu
ZGV4LCBsb2MpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNl
IGlmIChjaCA9PT0gJyonKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gaW5kZXg7Cisg
ICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IDI7CisgICAgICAgICAgICAgICAgICAgIGJsb2Nr
Q29tbWVudCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGxvYyA9IHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXJ0OiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTog
bGluZU51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0g
bGluZVN0YXJ0IC0gMgorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB9OworICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9r
ZW4sICdJTExFR0FMJyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKGlzV2hpdGVTcGFjZShjaC5jaGFyQ29kZUF0KDApKSkgewor
ICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTGluZVRl
cm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHsKKyAgICAgICAgICAgICAgICArK2luZGV4Owor
ICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gICdccicgJiYgc291cmNlW2luZGV4XSA9PT0gJ1xu
JykgeworICAgICAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICArK2xpbmVOdW1iZXI7CisgICAgICAgICAgICAgICAgbGluZVN0YXJ0ID0g
aW5kZXg7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gZmlsdGVyQ29tbWVu
dExvY2F0aW9uKCkgeworICAgICAgICB2YXIgaSwgZW50cnksIGNvbW1lbnQsIGNvbW1lbnRzID0g
W107CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGV4dHJhLmNvbW1lbnRzLmxlbmd0aDsgKytp
KSB7CisgICAgICAgICAgICBlbnRyeSA9IGV4dHJhLmNvbW1lbnRzW2ldOworICAgICAgICAgICAg
Y29tbWVudCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBlbnRyeS50eXBlLAorICAgICAgICAg
ICAgICAgIHZhbHVlOiBlbnRyeS52YWx1ZQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGlm
IChleHRyYS5yYW5nZSkgeworICAgICAgICAgICAgICAgIGNvbW1lbnQucmFuZ2UgPSBlbnRyeS5y
YW5nZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChleHRyYS5sb2MpIHsKKyAgICAg
ICAgICAgICAgICBjb21tZW50LmxvYyA9IGVudHJ5LmxvYzsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGNvbW1lbnRzLnB1c2goY29tbWVudCk7CisgICAgICAgIH0KKworICAgICAgICBleHRy
YS5jb21tZW50cyA9IGNvbW1lbnRzOworICAgIH0KKworICAgIC8vIDE2IFhKUworCisgICAgWEhU
TUxFbnRpdGllcyA9IHsKKyAgICAgICAgcXVvdDogJ1x1MDAyMicsCisgICAgICAgIGFtcDogJyYn
LAorICAgICAgICBhcG9zOiAiXHUwMDI3IiwKKyAgICAgICAgbHQ6ICI8IiwKKyAgICAgICAgZ3Q6
ICI+IiwKKyAgICAgICAgbmJzcDogIlx1MDBBMCIsCisgICAgICAgIGlleGNsOiAiXHUwMEExIiwK
KyAgICAgICAgY2VudDogIlx1MDBBMiIsCisgICAgICAgIHBvdW5kOiAiXHUwMEEzIiwKKyAgICAg
ICAgY3VycmVuOiAiXHUwMEE0IiwKKyAgICAgICAgeWVuOiAiXHUwMEE1IiwKKyAgICAgICAgYnJ2
YmFyOiAiXHUwMEE2IiwKKyAgICAgICAgc2VjdDogIlx1MDBBNyIsCisgICAgICAgIHVtbDogIlx1
MDBBOCIsCisgICAgICAgIGNvcHk6ICJcdTAwQTkiLAorICAgICAgICBvcmRmOiAiXHUwMEFBIiwK
KyAgICAgICAgbGFxdW86ICJcdTAwQUIiLAorICAgICAgICBub3Q6ICJcdTAwQUMiLAorICAgICAg
ICBzaHk6ICJcdTAwQUQiLAorICAgICAgICByZWc6ICJcdTAwQUUiLAorICAgICAgICBtYWNyOiAi
XHUwMEFGIiwKKyAgICAgICAgZGVnOiAiXHUwMEIwIiwKKyAgICAgICAgcGx1c21uOiAiXHUwMEIx
IiwKKyAgICAgICAgc3VwMjogIlx1MDBCMiIsCisgICAgICAgIHN1cDM6ICJcdTAwQjMiLAorICAg
ICAgICBhY3V0ZTogIlx1MDBCNCIsCisgICAgICAgIG1pY3JvOiAiXHUwMEI1IiwKKyAgICAgICAg
cGFyYTogIlx1MDBCNiIsCisgICAgICAgIG1pZGRvdDogIlx1MDBCNyIsCisgICAgICAgIGNlZGls
OiAiXHUwMEI4IiwKKyAgICAgICAgc3VwMTogIlx1MDBCOSIsCisgICAgICAgIG9yZG06ICJcdTAw
QkEiLAorICAgICAgICByYXF1bzogIlx1MDBCQiIsCisgICAgICAgIGZyYWMxNDogIlx1MDBCQyIs
CisgICAgICAgIGZyYWMxMjogIlx1MDBCRCIsCisgICAgICAgIGZyYWMzNDogIlx1MDBCRSIsCisg
ICAgICAgIGlxdWVzdDogIlx1MDBCRiIsCisgICAgICAgIEFncmF2ZTogIlx1MDBDMCIsCisgICAg
ICAgIEFhY3V0ZTogIlx1MDBDMSIsCisgICAgICAgIEFjaXJjOiAiXHUwMEMyIiwKKyAgICAgICAg
QXRpbGRlOiAiXHUwMEMzIiwKKyAgICAgICAgQXVtbDogIlx1MDBDNCIsCisgICAgICAgIEFyaW5n
OiAiXHUwMEM1IiwKKyAgICAgICAgQUVsaWc6ICJcdTAwQzYiLAorICAgICAgICBDY2VkaWw6ICJc
dTAwQzciLAorICAgICAgICBFZ3JhdmU6ICJcdTAwQzgiLAorICAgICAgICBFYWN1dGU6ICJcdTAw
QzkiLAorICAgICAgICBFY2lyYzogIlx1MDBDQSIsCisgICAgICAgIEV1bWw6ICJcdTAwQ0IiLAor
ICAgICAgICBJZ3JhdmU6ICJcdTAwQ0MiLAorICAgICAgICBJYWN1dGU6ICJcdTAwQ0QiLAorICAg
ICAgICBJY2lyYzogIlx1MDBDRSIsCisgICAgICAgIEl1bWw6ICJcdTAwQ0YiLAorICAgICAgICBF
VEg6ICJcdTAwRDAiLAorICAgICAgICBOdGlsZGU6ICJcdTAwRDEiLAorICAgICAgICBPZ3JhdmU6
ICJcdTAwRDIiLAorICAgICAgICBPYWN1dGU6ICJcdTAwRDMiLAorICAgICAgICBPY2lyYzogIlx1
MDBENCIsCisgICAgICAgIE90aWxkZTogIlx1MDBENSIsCisgICAgICAgIE91bWw6ICJcdTAwRDYi
LAorICAgICAgICB0aW1lczogIlx1MDBENyIsCisgICAgICAgIE9zbGFzaDogIlx1MDBEOCIsCisg
ICAgICAgIFVncmF2ZTogIlx1MDBEOSIsCisgICAgICAgIFVhY3V0ZTogIlx1MDBEQSIsCisgICAg
ICAgIFVjaXJjOiAiXHUwMERCIiwKKyAgICAgICAgVXVtbDogIlx1MDBEQyIsCisgICAgICAgIFlh
Y3V0ZTogIlx1MDBERCIsCisgICAgICAgIFRIT1JOOiAiXHUwMERFIiwKKyAgICAgICAgc3psaWc6
ICJcdTAwREYiLAorICAgICAgICBhZ3JhdmU6ICJcdTAwRTAiLAorICAgICAgICBhYWN1dGU6ICJc
dTAwRTEiLAorICAgICAgICBhY2lyYzogIlx1MDBFMiIsCisgICAgICAgIGF0aWxkZTogIlx1MDBF
MyIsCisgICAgICAgIGF1bWw6ICJcdTAwRTQiLAorICAgICAgICBhcmluZzogIlx1MDBFNSIsCisg
ICAgICAgIGFlbGlnOiAiXHUwMEU2IiwKKyAgICAgICAgY2NlZGlsOiAiXHUwMEU3IiwKKyAgICAg
ICAgZWdyYXZlOiAiXHUwMEU4IiwKKyAgICAgICAgZWFjdXRlOiAiXHUwMEU5IiwKKyAgICAgICAg
ZWNpcmM6ICJcdTAwRUEiLAorICAgICAgICBldW1sOiAiXHUwMEVCIiwKKyAgICAgICAgaWdyYXZl
OiAiXHUwMEVDIiwKKyAgICAgICAgaWFjdXRlOiAiXHUwMEVEIiwKKyAgICAgICAgaWNpcmM6ICJc
dTAwRUUiLAorICAgICAgICBpdW1sOiAiXHUwMEVGIiwKKyAgICAgICAgZXRoOiAiXHUwMEYwIiwK
KyAgICAgICAgbnRpbGRlOiAiXHUwMEYxIiwKKyAgICAgICAgb2dyYXZlOiAiXHUwMEYyIiwKKyAg
ICAgICAgb2FjdXRlOiAiXHUwMEYzIiwKKyAgICAgICAgb2NpcmM6ICJcdTAwRjQiLAorICAgICAg
ICBvdGlsZGU6ICJcdTAwRjUiLAorICAgICAgICBvdW1sOiAiXHUwMEY2IiwKKyAgICAgICAgZGl2
aWRlOiAiXHUwMEY3IiwKKyAgICAgICAgb3NsYXNoOiAiXHUwMEY4IiwKKyAgICAgICAgdWdyYXZl
OiAiXHUwMEY5IiwKKyAgICAgICAgdWFjdXRlOiAiXHUwMEZBIiwKKyAgICAgICAgdWNpcmM6ICJc
dTAwRkIiLAorICAgICAgICB1dW1sOiAiXHUwMEZDIiwKKyAgICAgICAgeWFjdXRlOiAiXHUwMEZE
IiwKKyAgICAgICAgdGhvcm46ICJcdTAwRkUiLAorICAgICAgICB5dW1sOiAiXHUwMEZGIiwKKyAg
ICAgICAgT0VsaWc6ICJcdTAxNTIiLAorICAgICAgICBvZWxpZzogIlx1MDE1MyIsCisgICAgICAg
IFNjYXJvbjogIlx1MDE2MCIsCisgICAgICAgIHNjYXJvbjogIlx1MDE2MSIsCisgICAgICAgIFl1
bWw6ICJcdTAxNzgiLAorICAgICAgICBmbm9mOiAiXHUwMTkyIiwKKyAgICAgICAgY2lyYzogIlx1
MDJDNiIsCisgICAgICAgIHRpbGRlOiAiXHUwMkRDIiwKKyAgICAgICAgQWxwaGE6ICJcdTAzOTEi
LAorICAgICAgICBCZXRhOiAiXHUwMzkyIiwKKyAgICAgICAgR2FtbWE6ICJcdTAzOTMiLAorICAg
ICAgICBEZWx0YTogIlx1MDM5NCIsCisgICAgICAgIEVwc2lsb246ICJcdTAzOTUiLAorICAgICAg
ICBaZXRhOiAiXHUwMzk2IiwKKyAgICAgICAgRXRhOiAiXHUwMzk3IiwKKyAgICAgICAgVGhldGE6
ICJcdTAzOTgiLAorICAgICAgICBJb3RhOiAiXHUwMzk5IiwKKyAgICAgICAgS2FwcGE6ICJcdTAz
OUEiLAorICAgICAgICBMYW1iZGE6ICJcdTAzOUIiLAorICAgICAgICBNdTogIlx1MDM5QyIsCisg
ICAgICAgIE51OiAiXHUwMzlEIiwKKyAgICAgICAgWGk6ICJcdTAzOUUiLAorICAgICAgICBPbWlj
cm9uOiAiXHUwMzlGIiwKKyAgICAgICAgUGk6ICJcdTAzQTAiLAorICAgICAgICBSaG86ICJcdTAz
QTEiLAorICAgICAgICBTaWdtYTogIlx1MDNBMyIsCisgICAgICAgIFRhdTogIlx1MDNBNCIsCisg
ICAgICAgIFVwc2lsb246ICJcdTAzQTUiLAorICAgICAgICBQaGk6ICJcdTAzQTYiLAorICAgICAg
ICBDaGk6ICJcdTAzQTciLAorICAgICAgICBQc2k6ICJcdTAzQTgiLAorICAgICAgICBPbWVnYTog
Ilx1MDNBOSIsCisgICAgICAgIGFscGhhOiAiXHUwM0IxIiwKKyAgICAgICAgYmV0YTogIlx1MDNC
MiIsCisgICAgICAgIGdhbW1hOiAiXHUwM0IzIiwKKyAgICAgICAgZGVsdGE6ICJcdTAzQjQiLAor
ICAgICAgICBlcHNpbG9uOiAiXHUwM0I1IiwKKyAgICAgICAgemV0YTogIlx1MDNCNiIsCisgICAg
ICAgIGV0YTogIlx1MDNCNyIsCisgICAgICAgIHRoZXRhOiAiXHUwM0I4IiwKKyAgICAgICAgaW90
YTogIlx1MDNCOSIsCisgICAgICAgIGthcHBhOiAiXHUwM0JBIiwKKyAgICAgICAgbGFtYmRhOiAi
XHUwM0JCIiwKKyAgICAgICAgbXU6ICJcdTAzQkMiLAorICAgICAgICBudTogIlx1MDNCRCIsCisg
ICAgICAgIHhpOiAiXHUwM0JFIiwKKyAgICAgICAgb21pY3JvbjogIlx1MDNCRiIsCisgICAgICAg
IHBpOiAiXHUwM0MwIiwKKyAgICAgICAgcmhvOiAiXHUwM0MxIiwKKyAgICAgICAgc2lnbWFmOiAi
XHUwM0MyIiwKKyAgICAgICAgc2lnbWE6ICJcdTAzQzMiLAorICAgICAgICB0YXU6ICJcdTAzQzQi
LAorICAgICAgICB1cHNpbG9uOiAiXHUwM0M1IiwKKyAgICAgICAgcGhpOiAiXHUwM0M2IiwKKyAg
ICAgICAgY2hpOiAiXHUwM0M3IiwKKyAgICAgICAgcHNpOiAiXHUwM0M4IiwKKyAgICAgICAgb21l
Z2E6ICJcdTAzQzkiLAorICAgICAgICB0aGV0YXN5bTogIlx1MDNEMSIsCisgICAgICAgIHVwc2lo
OiAiXHUwM0QyIiwKKyAgICAgICAgcGl2OiAiXHUwM0Q2IiwKKyAgICAgICAgZW5zcDogIlx1MjAw
MiIsCisgICAgICAgIGVtc3A6ICJcdTIwMDMiLAorICAgICAgICB0aGluc3A6ICJcdTIwMDkiLAor
ICAgICAgICB6d25qOiAiXHUyMDBDIiwKKyAgICAgICAgendqOiAiXHUyMDBEIiwKKyAgICAgICAg
bHJtOiAiXHUyMDBFIiwKKyAgICAgICAgcmxtOiAiXHUyMDBGIiwKKyAgICAgICAgbmRhc2g6ICJc
dTIwMTMiLAorICAgICAgICBtZGFzaDogIlx1MjAxNCIsCisgICAgICAgIGxzcXVvOiAiXHUyMDE4
IiwKKyAgICAgICAgcnNxdW86ICJcdTIwMTkiLAorICAgICAgICBzYnF1bzogIlx1MjAxQSIsCisg
ICAgICAgIGxkcXVvOiAiXHUyMDFDIiwKKyAgICAgICAgcmRxdW86ICJcdTIwMUQiLAorICAgICAg
ICBiZHF1bzogIlx1MjAxRSIsCisgICAgICAgIGRhZ2dlcjogIlx1MjAyMCIsCisgICAgICAgIERh
Z2dlcjogIlx1MjAyMSIsCisgICAgICAgIGJ1bGw6ICJcdTIwMjIiLAorICAgICAgICBoZWxsaXA6
ICJcdTIwMjYiLAorICAgICAgICBwZXJtaWw6ICJcdTIwMzAiLAorICAgICAgICBwcmltZTogIlx1
MjAzMiIsCisgICAgICAgIFByaW1lOiAiXHUyMDMzIiwKKyAgICAgICAgbHNhcXVvOiAiXHUyMDM5
IiwKKyAgICAgICAgcnNhcXVvOiAiXHUyMDNBIiwKKyAgICAgICAgb2xpbmU6ICJcdTIwM0UiLAor
ICAgICAgICBmcmFzbDogIlx1MjA0NCIsCisgICAgICAgIGV1cm86ICJcdTIwQUMiLAorICAgICAg
ICBpbWFnZTogIlx1MjExMSIsCisgICAgICAgIHdlaWVycDogIlx1MjExOCIsCisgICAgICAgIHJl
YWw6ICJcdTIxMUMiLAorICAgICAgICB0cmFkZTogIlx1MjEyMiIsCisgICAgICAgIGFsZWZzeW06
ICJcdTIxMzUiLAorICAgICAgICBsYXJyOiAiXHUyMTkwIiwKKyAgICAgICAgdWFycjogIlx1MjE5
MSIsCisgICAgICAgIHJhcnI6ICJcdTIxOTIiLAorICAgICAgICBkYXJyOiAiXHUyMTkzIiwKKyAg
ICAgICAgaGFycjogIlx1MjE5NCIsCisgICAgICAgIGNyYXJyOiAiXHUyMUI1IiwKKyAgICAgICAg
bEFycjogIlx1MjFEMCIsCisgICAgICAgIHVBcnI6ICJcdTIxRDEiLAorICAgICAgICByQXJyOiAi
XHUyMUQyIiwKKyAgICAgICAgZEFycjogIlx1MjFEMyIsCisgICAgICAgIGhBcnI6ICJcdTIxRDQi
LAorICAgICAgICBmb3JhbGw6ICJcdTIyMDAiLAorICAgICAgICBwYXJ0OiAiXHUyMjAyIiwKKyAg
ICAgICAgZXhpc3Q6ICJcdTIyMDMiLAorICAgICAgICBlbXB0eTogIlx1MjIwNSIsCisgICAgICAg
IG5hYmxhOiAiXHUyMjA3IiwKKyAgICAgICAgaXNpbjogIlx1MjIwOCIsCisgICAgICAgIG5vdGlu
OiAiXHUyMjA5IiwKKyAgICAgICAgbmk6ICJcdTIyMEIiLAorICAgICAgICBwcm9kOiAiXHUyMjBG
IiwKKyAgICAgICAgc3VtOiAiXHUyMjExIiwKKyAgICAgICAgbWludXM6ICJcdTIyMTIiLAorICAg
ICAgICBsb3dhc3Q6ICJcdTIyMTciLAorICAgICAgICByYWRpYzogIlx1MjIxQSIsCisgICAgICAg
IHByb3A6ICJcdTIyMUQiLAorICAgICAgICBpbmZpbjogIlx1MjIxRSIsCisgICAgICAgIGFuZzog
Ilx1MjIyMCIsCisgICAgICAgIGFuZDogIlx1MjIyNyIsCisgICAgICAgIG9yOiAiXHUyMjI4IiwK
KyAgICAgICAgY2FwOiAiXHUyMjI5IiwKKyAgICAgICAgY3VwOiAiXHUyMjJBIiwKKyAgICAgICAg
ImludCI6ICJcdTIyMkIiLAorICAgICAgICB0aGVyZTQ6ICJcdTIyMzQiLAorICAgICAgICBzaW06
ICJcdTIyM0MiLAorICAgICAgICBjb25nOiAiXHUyMjQ1IiwKKyAgICAgICAgYXN5bXA6ICJcdTIy
NDgiLAorICAgICAgICBuZTogIlx1MjI2MCIsCisgICAgICAgIGVxdWl2OiAiXHUyMjYxIiwKKyAg
ICAgICAgbGU6ICJcdTIyNjQiLAorICAgICAgICBnZTogIlx1MjI2NSIsCisgICAgICAgIHN1Yjog
Ilx1MjI4MiIsCisgICAgICAgIHN1cDogIlx1MjI4MyIsCisgICAgICAgIG5zdWI6ICJcdTIyODQi
LAorICAgICAgICBzdWJlOiAiXHUyMjg2IiwKKyAgICAgICAgc3VwZTogIlx1MjI4NyIsCisgICAg
ICAgIG9wbHVzOiAiXHUyMjk1IiwKKyAgICAgICAgb3RpbWVzOiAiXHUyMjk3IiwKKyAgICAgICAg
cGVycDogIlx1MjJBNSIsCisgICAgICAgIHNkb3Q6ICJcdTIyQzUiLAorICAgICAgICBsY2VpbDog
Ilx1MjMwOCIsCisgICAgICAgIHJjZWlsOiAiXHUyMzA5IiwKKyAgICAgICAgbGZsb29yOiAiXHUy
MzBBIiwKKyAgICAgICAgcmZsb29yOiAiXHUyMzBCIiwKKyAgICAgICAgbGFuZzogIlx1MjMyOSIs
CisgICAgICAgIHJhbmc6ICJcdTIzMkEiLAorICAgICAgICBsb3o6ICJcdTI1Q0EiLAorICAgICAg
ICBzcGFkZXM6ICJcdTI2NjAiLAorICAgICAgICBjbHViczogIlx1MjY2MyIsCisgICAgICAgIGhl
YXJ0czogIlx1MjY2NSIsCisgICAgICAgIGRpYW1zOiAiXHUyNjY2IgorICAgIH07CisKKyAgICBm
dW5jdGlvbiBpc1hKU0lkZW50aWZpZXJTdGFydChjaCkgeworICAgICAgICAvLyBleGNsdWRlIGJh
Y2tzbGFzaCAoXCkKKyAgICAgICAgcmV0dXJuIChjaCAhPT0gOTIpICYmIGlzSWRlbnRpZmllclN0
YXJ0KGNoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc1hKU0lkZW50aWZpZXJQYXJ0KGNoKSB7
CisgICAgICAgIC8vIGV4Y2x1ZGUgYmFja3NsYXNoIChcKSBhbmQgYWRkIGh5cGhlbiAoLSkKKyAg
ICAgICAgcmV0dXJuIChjaCAhPT0gOTIpICYmIChjaCA9PT0gNDUgfHwgaXNJZGVudGlmaWVyUGFy
dChjaCkpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHNjYW5YSlNJZGVudGlmaWVyKCkgeworICAg
ICAgICB2YXIgY2gsIHN0YXJ0LCBpZCA9ICcnLCBuYW1lc3BhY2U7CisKKyAgICAgICAgc3RhcnQg
PSBpbmRleDsKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBj
aCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTsKKyAgICAgICAgICAgIGlmICghaXNYSlNJZGVu
dGlmaWVyUGFydChjaCkpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlkICs9IHNvdXJjZVtpbmRleCsrXTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChjaCA9PT0gNTgpIHsgLy8gOgorICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAg
IG5hbWVzcGFjZSA9IGlkOworICAgICAgICAgICAgaWQgPSAnJzsKKworICAgICAgICAgICAgd2hp
bGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNv
ZGVBdChpbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKCFpc1hKU0lkZW50aWZpZXJQYXJ0KGNo
KSkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgaWQgKz0gc291cmNlW2luZGV4KytdOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgaWYgKCFpZCkgeworICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVz
c2FnZXMuSW52YWxpZFhKU1RhZ05hbWUpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgIHR5cGU6IFRva2VuLlhKU0lkZW50aWZpZXIsCisgICAgICAgICAgICB2YWx1
ZTogaWQsCisgICAgICAgICAgICBuYW1lc3BhY2U6IG5hbWVzcGFjZSwKKyAgICAgICAgICAgIGxp
bmVOdW1iZXI6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwK
KyAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XQorICAgICAgICB9OworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIHNjYW5YSlNFbnRpdHkoKSB7CisgICAgICAgIHZhciBjaCwgc3RyID0gJycs
IGNvdW50ID0gMCwgZW50aXR5OworICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAgICAg
IGFzc2VydChjaCA9PT0gJyYnLCAnRW50aXR5IG11c3Qgc3RhcnQgd2l0aCBhbiBhbXBlcnNhbmQn
KTsKKyAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoICYmIGNv
dW50KysgPCAxMCkgeworICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107CisgICAgICAg
ICAgICBpZiAoY2ggPT09ICc7JykgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgc3RyICs9IGNoOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN0
clswXSA9PT0gJyMnICYmIHN0clsxXSA9PT0gJ3gnKSB7CisgICAgICAgICAgICBlbnRpdHkgPSBT
dHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KHN0ci5zdWJzdHIoMiksIDE2KSk7CisgICAgICAg
IH0gZWxzZSBpZiAoc3RyWzBdID09PSAnIycpIHsKKyAgICAgICAgICAgIGVudGl0eSA9IFN0cmlu
Zy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoc3RyLnN1YnN0cigxKSwgMTApKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGVudGl0eSA9IFhIVE1MRW50aXRpZXNbc3RyXTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gZW50aXR5OworICAgIH0KKworICAgIGZ1bmN0aW9uIHNjYW5YSlNU
ZXh0KHN0b3BDaGFycykgeworICAgICAgICB2YXIgY2gsIHN0ciA9ICcnLCBzdGFydDsKKyAgICAg
ICAgc3RhcnQgPSBpbmRleDsKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAg
ICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAgICAgICAgICBpZiAoc3RvcENoYXJzLmlu
ZGV4T2YoY2gpICE9PSAtMSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKGNoID09PSAnJicpIHsKKyAgICAgICAgICAgICAgICBzdHIgKz0g
c2NhblhKU0VudGl0eSgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBj
aCA9IHNvdXJjZVtpbmRleCsrXTsKKyAgICAgICAgICAgICAgICBpZiAoaXNMaW5lVGVybWluYXRv
cihjaC5jaGFyQ29kZUF0KDApKSkgeworICAgICAgICAgICAgICAgICAgICArK2xpbmVOdW1iZXI7
CisgICAgICAgICAgICAgICAgICAgIGxpbmVTdGFydCA9IGluZGV4OworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBzdHIgKz0gY2g7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHR5cGU6IFRva2VuLlhKU1RleHQsCisgICAg
ICAgICAgICB2YWx1ZTogc3RyLAorICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwK
KyAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAgICAgICAgICAgcmFuZ2U6IFtz
dGFydCwgaW5kZXhdCisgICAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gc2NhblhKU1N0
cmluZ0xpdGVyYWwoKSB7CisgICAgICAgIHZhciBpbm5lclRva2VuLCBxdW90ZSwgc3RhcnQ7CisK
KyAgICAgICAgcXVvdGUgPSBzb3VyY2VbaW5kZXhdOworICAgICAgICBhc3NlcnQoKHF1b3RlID09
PSAnXCcnIHx8IHF1b3RlID09PSAnIicpLAorICAgICAgICAgICAgJ1N0cmluZyBsaXRlcmFsIG11
c3Qgc3RhcnRzIHdpdGggYSBxdW90ZScpOworCisgICAgICAgIHN0YXJ0ID0gaW5kZXg7CisgICAg
ICAgICsraW5kZXg7CisKKyAgICAgICAgaW5uZXJUb2tlbiA9IHNjYW5YSlNUZXh0KFtxdW90ZV0p
OworCisgICAgICAgIGlmIChxdW90ZSAhPT0gc291cmNlW2luZGV4XSkgeworICAgICAgICAgICAg
dGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAg
ICAgICB9CisKKyAgICAgICAgKytpbmRleDsKKworICAgICAgICBpbm5lclRva2VuLnJhbmdlID0g
W3N0YXJ0LCBpbmRleF07CisKKyAgICAgICAgcmV0dXJuIGlubmVyVG9rZW47CisgICAgfQorCisg
ICAgLyoqCisgICAgICogQmV0d2VlbiBYSlMgb3BlbmluZyBhbmQgY2xvc2luZyB0YWdzIChlLmcu
IDxmb28+SEVSRTwvZm9vPiksIGFueXRoaW5nIHRoYXQKKyAgICAgKiBpcyBub3QgYW5vdGhlciBY
SlMgdGFnIGFuZCBpcyBub3QgYW4gZXhwcmVzc2lvbiB3cmFwcGVkIGJ5IHt9IGlzIHRleHQuCisg
ICAgICovCisgICAgZnVuY3Rpb24gYWR2YW5jZVhKU0NoaWxkKCkgeworICAgICAgICB2YXIgY2gg
PSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7CisKKyAgICAgICAgLy8geyAoMTIzKSBhbmQgPCAo
NjApCisgICAgICAgIGlmIChjaCAhPT0gMTIzICYmIGNoICE9PSA2MCkgeworICAgICAgICAgICAg
cmV0dXJuIHNjYW5YSlNUZXh0KFsnPCcsICd7J10pOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIHNjYW5QdW5jdHVhdG9yKCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VYSlNJZGVu
dGlmaWVyKCkgeworICAgICAgICB2YXIgdG9rZW47CisKKyAgICAgICAgaWYgKGxvb2thaGVhZC50
eXBlICE9PSBUb2tlbi5YSlNJZGVudGlmaWVyKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKHt9
LCBNZXNzYWdlcy5JbnZhbGlkWEpTVGFnTmFtZSk7CisgICAgICAgIH0KKworICAgICAgICB0b2tl
biA9IGxleCgpOworICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlWEpTSWRlbnRpZmllcih0
b2tlbi52YWx1ZSwgdG9rZW4ubmFtZXNwYWNlKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJz
ZVhKU0F0dHJpYnV0ZVZhbHVlKCkgeworICAgICAgICB2YXIgdmFsdWU7CisgICAgICAgIGlmICht
YXRjaCgneycpKSB7CisgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlWEpTRXhwcmVzc2lvbkNvbnRh
aW5lcigpOworICAgICAgICAgICAgaWYgKHZhbHVlLmV4cHJlc3Npb24udHlwZSA9PT0gU3ludGF4
LlhKU0VtcHR5RXhwcmVzc2lvbikgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3IoCisgICAg
ICAgICAgICAgICAgICAgIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAnWEpTIGF0dHJpYnV0
ZXMgbXVzdCBvbmx5IGJlIGFzc2lnbmVkIGEgbm9uLWVtcHR5ICcgKworICAgICAgICAgICAgICAg
ICAgICAgICAgJ2V4cHJlc3Npb24nCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uWEpTVGV4dCkgewor
ICAgICAgICAgICAgdmFsdWUgPSBkZWxlZ2F0ZS5jcmVhdGVMaXRlcmFsKGxleCgpKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLkludmFsaWRY
SlNBdHRyaWJ1dGVWYWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAg
IH0KKworICAgIGZ1bmN0aW9uIHBhcnNlWEpTRW1wdHlFeHByZXNzaW9uKCkgeworICAgICAgICB3
aGlsZSAoc291cmNlLmNoYXJBdChpbmRleCkgIT09ICd9JykgeworICAgICAgICAgICAgaW5kZXgr
KzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlWEpTRW1wdHlFeHBy
ZXNzaW9uKCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VYSlNFeHByZXNzaW9uQ29udGFp
bmVyKCkgeworICAgICAgICB2YXIgZXhwcmVzc2lvbiwgb3JpZ0luWEpTQ2hpbGQsIG9yaWdJblhK
U1RhZzsKKworICAgICAgICBvcmlnSW5YSlNDaGlsZCA9IHN0YXRlLmluWEpTQ2hpbGQ7CisgICAg
ICAgIG9yaWdJblhKU1RhZyA9IHN0YXRlLmluWEpTVGFnOworICAgICAgICBzdGF0ZS5pblhKU0No
aWxkID0gZmFsc2U7CisgICAgICAgIHN0YXRlLmluWEpTVGFnID0gZmFsc2U7CisKKyAgICAgICAg
ZXhwZWN0KCd7Jyk7CisKKyAgICAgICAgaWYgKG1hdGNoKCd9JykpIHsKKyAgICAgICAgICAgIGV4
cHJlc3Npb24gPSBwYXJzZVhKU0VtcHR5RXhwcmVzc2lvbigpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbigpOworICAgICAgICB9CisK
KyAgICAgICAgc3RhdGUuaW5YSlNDaGlsZCA9IG9yaWdJblhKU0NoaWxkOworICAgICAgICBzdGF0
ZS5pblhKU1RhZyA9IG9yaWdJblhKU1RhZzsKKworICAgICAgICBleHBlY3QoJ30nKTsKKworICAg
ICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlWEpTRXhwcmVzc2lvbkNvbnRhaW5lcihleHByZXNz
aW9uKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZVhKU0F0dHJpYnV0ZSgpIHsKKyAgICAg
ICAgdmFyIHRva2VuLCBuYW1lLCB2YWx1ZTsKKworICAgICAgICBuYW1lID0gcGFyc2VYSlNJZGVu
dGlmaWVyKCk7CisKKyAgICAgICAgLy8gSFRNTCBlbXB0eSBhdHRyaWJ1dGUKKyAgICAgICAgaWYg
KG1hdGNoKCc9JykpIHsKKyAgICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgcmV0dXJuIGRl
bGVnYXRlLmNyZWF0ZVhKU0F0dHJpYnV0ZShuYW1lLCBwYXJzZVhKU0F0dHJpYnV0ZVZhbHVlKCkp
OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVhKU0F0dHJpYnV0
ZShuYW1lKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZVhKU0NoaWxkKCkgeworICAgICAg
ICB2YXIgdG9rZW47CisgICAgICAgIGlmIChtYXRjaCgneycpKSB7CisgICAgICAgICAgICB0b2tl
biA9IHBhcnNlWEpTRXhwcmVzc2lvbkNvbnRhaW5lcigpOworICAgICAgICB9IGVsc2UgaWYgKGxv
b2thaGVhZC50eXBlID09PSBUb2tlbi5YSlNUZXh0KSB7CisgICAgICAgICAgICB0b2tlbiA9IGRl
bGVnYXRlLmNyZWF0ZUxpdGVyYWwobGV4KCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgc3RhdGUuaW5YSlNDaGlsZCA9IGZhbHNlOworICAgICAgICAgICAgdG9rZW4gPSBwYXJzZVhK
U0VsZW1lbnQoKTsKKyAgICAgICAgICAgIHN0YXRlLmluWEpTQ2hpbGQgPSB0cnVlOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0b2tlbjsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZVhK
U0Nsb3NpbmdFbGVtZW50KCkgeworICAgICAgICB2YXIgbmFtZSwgb3JpZ0luWEpTVGFnOworICAg
ICAgICBvcmlnSW5YSlNUYWcgPSBzdGF0ZS5pblhKU1RhZzsKKyAgICAgICAgc3RhdGUuaW5YSlNU
YWcgPSB0cnVlOworICAgICAgICBzdGF0ZS5pblhKU0NoaWxkID0gZmFsc2U7CisgICAgICAgIGV4
cGVjdCgnPCcpOworICAgICAgICBleHBlY3QoJy8nKTsKKyAgICAgICAgbmFtZSA9IHBhcnNlWEpT
SWRlbnRpZmllcigpOworICAgICAgICBzdGF0ZS5pblhKU1RhZyA9IG9yaWdJblhKU1RhZzsKKyAg
ICAgICAgZXhwZWN0KCc+Jyk7CisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVYSlNDbG9z
aW5nRWxlbWVudChuYW1lKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZVhKU09wZW5pbmdF
bGVtZW50KCkgeworICAgICAgICB2YXIgbmFtZSwgYXR0cmlidXRlLCBhdHRyaWJ1dGVzID0gW10s
IHNlbGZDbG9zaW5nID0gZmFsc2UsIG9yaWdJblhKU1RhZzsKKworICAgICAgICBvcmlnSW5YSlNU
YWcgPSBzdGF0ZS5pblhKU1RhZzsKKyAgICAgICAgc3RhdGUuaW5YSlNUYWcgPSB0cnVlOworCisg
ICAgICAgIGV4cGVjdCgnPCcpOworCisgICAgICAgIG5hbWUgPSBwYXJzZVhKU0lkZW50aWZpZXIo
KTsKKworICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGggJiYKKyAgICAgICAgICAgICAgICBs
b29rYWhlYWQudmFsdWUgIT09ICcvJyAmJgorICAgICAgICAgICAgICAgIGxvb2thaGVhZC52YWx1
ZSAhPT0gJz4nKSB7CisgICAgICAgICAgICBhdHRyaWJ1dGVzLnB1c2gocGFyc2VYSlNBdHRyaWJ1
dGUoKSk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0ZS5pblhKU1RhZyA9IG9yaWdJblhKU1Rh
ZzsKKworICAgICAgICBpZiAobG9va2FoZWFkLnZhbHVlID09PSAnLycpIHsKKyAgICAgICAgICAg
IGV4cGVjdCgnLycpOworICAgICAgICAgICAgZXhwZWN0KCc+Jyk7CisgICAgICAgICAgICBzZWxm
Q2xvc2luZyA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdGF0ZS5pblhK
U0NoaWxkID0gdHJ1ZTsKKyAgICAgICAgICAgIGV4cGVjdCgnPicpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVYSlNPcGVuaW5nRWxlbWVudChuYW1lLCBhdHRyaWJ1
dGVzLCBzZWxmQ2xvc2luZyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VYSlNFbGVtZW50
KCkgeworICAgICAgICB2YXIgb3BlbmluZ0VsZW1lbnQsIGNsb3NpbmdFbGVtZW50LCBjaGlsZHJl
biA9IFtdLCBvcmlnSW5YSlNDaGlsZDsKKworICAgICAgICBvcGVuaW5nRWxlbWVudCA9IHBhcnNl
WEpTT3BlbmluZ0VsZW1lbnQoKTsKKworICAgICAgICBpZiAoIW9wZW5pbmdFbGVtZW50LnNlbGZD
bG9zaW5nKSB7CisgICAgICAgICAgICBvcmlnSW5YSlNDaGlsZCA9IHN0YXRlLmluWEpTQ2hpbGQ7
CisgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBz
dGF0ZS5pblhKU0NoaWxkID0gZmFsc2U7IC8vIDwvIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCBp
biB0aGUgY2hpbGQKKyAgICAgICAgICAgICAgICBpZiAobG9va2FoZWFkLnZhbHVlID09PSAnPCcg
JiYgbG9va2FoZWFkMigpLnZhbHVlID09PSAnLycpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN0YXRlLmluWEpTQ2hpbGQg
PSB0cnVlOworICAgICAgICAgICAgICAgIHBlZWsoKTsgLy8gcmVzZXQgbG9va2FoZWFkIHRva2Vu
CisgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChwYXJzZVhKU0NoaWxkKCkpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgc3RhdGUuaW5YSlNDaGlsZCA9IG9yaWdJblhKU0NoaWxkOwor
ICAgICAgICAgICAgY2xvc2luZ0VsZW1lbnQgPSBwYXJzZVhKU0Nsb3NpbmdFbGVtZW50KCk7Cisg
ICAgICAgICAgICBpZiAoY2xvc2luZ0VsZW1lbnQubmFtZS5uYW1lc3BhY2UgIT09IG9wZW5pbmdF
bGVtZW50Lm5hbWUubmFtZXNwYWNlIHx8IGNsb3NpbmdFbGVtZW50Lm5hbWUubmFtZSAhPT0gb3Bl
bmluZ0VsZW1lbnQubmFtZS5uYW1lKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwg
TWVzc2FnZXMuRXhwZWN0ZWRYSlNDbG9zaW5nVGFnLCBvcGVuaW5nRWxlbWVudC5uYW1lLm5hbWVz
cGFjZSA/IG9wZW5pbmdFbGVtZW50Lm5hbWUubmFtZXNwYWNlICsgJzonICsgb3BlbmluZ0VsZW1l
bnQubmFtZS5uYW1lIDogb3BlbmluZ0VsZW1lbnQubmFtZS5uYW1lKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVYSlNFbGVtZW50KG9w
ZW5pbmdFbGVtZW50LCBjbG9zaW5nRWxlbWVudCwgY2hpbGRyZW4pOworICAgIH0KKworICAgIGZ1
bmN0aW9uIGNvbGxlY3RUb2tlbigpIHsKKyAgICAgICAgdmFyIHN0YXJ0LCBsb2MsIHRva2VuLCBy
YW5nZSwgdmFsdWU7CisKKyAgICAgICAgc2tpcENvbW1lbnQoKTsKKyAgICAgICAgc3RhcnQgPSBp
bmRleDsKKyAgICAgICAgbG9jID0geworICAgICAgICAgICAgc3RhcnQ6IHsKKyAgICAgICAgICAg
ICAgICBsaW5lOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBs
aW5lU3RhcnQKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICB0b2tlbiA9IGV4
dHJhLmFkdmFuY2UoKTsKKyAgICAgICAgbG9jLmVuZCA9IHsKKyAgICAgICAgICAgIGxpbmU6IGxp
bmVOdW1iZXIsCisgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0CisgICAgICAg
IH07CisKKyAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLkVPRikgeworICAgICAgICAg
ICAgcmFuZ2UgPSBbdG9rZW4ucmFuZ2VbMF0sIHRva2VuLnJhbmdlWzFdXTsKKyAgICAgICAgICAg
IHZhbHVlID0gc291cmNlLnNsaWNlKHRva2VuLnJhbmdlWzBdLCB0b2tlbi5yYW5nZVsxXSk7Cisg
ICAgICAgICAgICBleHRyYS50b2tlbnMucHVzaCh7CisgICAgICAgICAgICAgICAgdHlwZTogVG9r
ZW5OYW1lW3Rva2VuLnR5cGVdLAorICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKKyAgICAg
ICAgICAgICAgICByYW5nZTogcmFuZ2UsCisgICAgICAgICAgICAgICAgbG9jOiBsb2MKKyAgICAg
ICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRva2VuOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGNvbGxlY3RSZWdleCgpIHsKKyAgICAgICAgdmFyIHBvcywgbG9jLCByZWdl
eCwgdG9rZW47CisKKyAgICAgICAgc2tpcENvbW1lbnQoKTsKKworICAgICAgICBwb3MgPSBpbmRl
eDsKKyAgICAgICAgbG9jID0geworICAgICAgICAgICAgc3RhcnQ6IHsKKyAgICAgICAgICAgICAg
ICBsaW5lOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5l
U3RhcnQKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICByZWdleCA9IGV4dHJh
LnNjYW5SZWdFeHAoKTsKKyAgICAgICAgbG9jLmVuZCA9IHsKKyAgICAgICAgICAgIGxpbmU6IGxp
bmVOdW1iZXIsCisgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0CisgICAgICAg
IH07CisKKyAgICAgICAgaWYgKCFleHRyYS50b2tlbml6ZSkgeworICAgICAgICAgICAgLy8gUG9w
IHRoZSBwcmV2aW91cyB0b2tlbiwgd2hpY2ggaXMgbGlrZWx5ICcvJyBvciAnLz0nCisgICAgICAg
ICAgICBpZiAoZXh0cmEudG9rZW5zLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgICB0b2tl
biA9IGV4dHJhLnRva2Vuc1tleHRyYS50b2tlbnMubGVuZ3RoIC0gMV07CisgICAgICAgICAgICAg
ICAgaWYgKHRva2VuLnJhbmdlWzBdID09PSBwb3MgJiYgdG9rZW4udHlwZSA9PT0gJ1B1bmN0dWF0
b3InKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PT0gJy8nIHx8IHRv
a2VuLnZhbHVlID09PSAnLz0nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBleHRyYS50b2tl
bnMucG9wKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGV4dHJhLnRva2Vucy5wdXNoKHsKKyAgICAgICAgICAg
ICAgICB0eXBlOiAnUmVndWxhckV4cHJlc3Npb24nLAorICAgICAgICAgICAgICAgIHZhbHVlOiBy
ZWdleC5saXRlcmFsLAorICAgICAgICAgICAgICAgIHJhbmdlOiBbcG9zLCBpbmRleF0sCisgICAg
ICAgICAgICAgICAgbG9jOiBsb2MKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIHJlZ2V4OworICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbHRlclRva2VuTG9jYXRp
b24oKSB7CisgICAgICAgIHZhciBpLCBlbnRyeSwgdG9rZW4sIHRva2VucyA9IFtdOworCisgICAg
ICAgIGZvciAoaSA9IDA7IGkgPCBleHRyYS50b2tlbnMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
ICAgIGVudHJ5ID0gZXh0cmEudG9rZW5zW2ldOworICAgICAgICAgICAgdG9rZW4gPSB7CisgICAg
ICAgICAgICAgICAgdHlwZTogZW50cnkudHlwZSwKKyAgICAgICAgICAgICAgICB2YWx1ZTogZW50
cnkudmFsdWUKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBpZiAoZXh0cmEucmFuZ2UpIHsK
KyAgICAgICAgICAgICAgICB0b2tlbi5yYW5nZSA9IGVudHJ5LnJhbmdlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKGV4dHJhLmxvYykgeworICAgICAgICAgICAgICAgIHRva2VuLmxv
YyA9IGVudHJ5LmxvYzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRva2Vucy5wdXNoKHRv
a2VuKTsKKyAgICAgICAgfQorCisgICAgICAgIGV4dHJhLnRva2VucyA9IHRva2VuczsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBjcmVhdGVMb2NhdGlvbk1hcmtlcigpIHsKKyAgICAgICAgdmFyIG1h
cmtlciA9IHt9OworCisgICAgICAgIG1hcmtlci5yYW5nZSA9IFtpbmRleCwgaW5kZXhdOworICAg
ICAgICBtYXJrZXIubG9jID0geworICAgICAgICAgICAgc3RhcnQ6IHsKKyAgICAgICAgICAgICAg
ICBsaW5lOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5l
U3RhcnQKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBlbmQ6IHsKKyAgICAgICAgICAgICAg
ICBsaW5lOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5l
U3RhcnQKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBtYXJrZXIuZW5kID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdGhpcy5yYW5nZVsxXSA9IGluZGV4OworICAgICAg
ICAgICAgdGhpcy5sb2MuZW5kLmxpbmUgPSBsaW5lTnVtYmVyOworICAgICAgICAgICAgdGhpcy5s
b2MuZW5kLmNvbHVtbiA9IGluZGV4IC0gbGluZVN0YXJ0OworICAgICAgICB9OworCisgICAgICAg
IG1hcmtlci5hcHBseUdyb3VwID0gZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChl
eHRyYS5yYW5nZSkgeworICAgICAgICAgICAgICAgIG5vZGUuZ3JvdXBSYW5nZSA9IFt0aGlzLnJh
bmdlWzBdLCB0aGlzLnJhbmdlWzFdXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChl
eHRyYS5sb2MpIHsKKyAgICAgICAgICAgICAgICBub2RlLmdyb3VwTG9jID0geworICAgICAgICAg
ICAgICAgICAgICBzdGFydDogeworICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogdGhpcy5s
b2Muc3RhcnQubGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogdGhpcy5sb2Mu
c3RhcnQuY29sdW1uCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAg
IGVuZDogeworICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogdGhpcy5sb2MuZW5kLmxpbmUs
CisgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMubG9jLmVuZC5jb2x1bW4KKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAg
bm9kZSA9IGRlbGVnYXRlLnBvc3RQcm9jZXNzKG5vZGUpOworICAgICAgICAgICAgfQorICAgICAg
ICB9OworCisgICAgICAgIG1hcmtlci5hcHBseSA9IGZ1bmN0aW9uIChub2RlKSB7CisgICAgICAg
ICAgICB2YXIgbm9kZVR5cGUgPSB0eXBlb2Ygbm9kZTsKKyAgICAgICAgICAgIGFzc2VydChub2Rl
VHlwZSA9PT0gIm9iamVjdCIsCisgICAgICAgICAgICAgICAgIkFwcGx5aW5nIGxvY2F0aW9uIG1h
cmtlciB0byBhbiB1bmV4cGVjdGVkIG5vZGUgdHlwZTogIiArCisgICAgICAgICAgICAgICAgICAg
IG5vZGVUeXBlKTsKKworICAgICAgICAgICAgaWYgKGV4dHJhLnJhbmdlKSB7CisgICAgICAgICAg
ICAgICAgbm9kZS5yYW5nZSA9IFt0aGlzLnJhbmdlWzBdLCB0aGlzLnJhbmdlWzFdXTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChleHRyYS5sb2MpIHsKKyAgICAgICAgICAgICAgICBu
b2RlLmxvYyA9IHsKKyAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGxpbmU6IHRoaXMubG9jLnN0YXJ0LmxpbmUsCisgICAgICAgICAgICAgICAgICAg
ICAgICBjb2x1bW46IHRoaXMubG9jLnN0YXJ0LmNvbHVtbgorICAgICAgICAgICAgICAgICAgICB9
LAorICAgICAgICAgICAgICAgICAgICBlbmQ6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxp
bmU6IHRoaXMubG9jLmVuZC5saW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiB0
aGlzLmxvYy5lbmQuY29sdW1uCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9OworICAgICAgICAgICAgICAgIG5vZGUgPSBkZWxlZ2F0ZS5wb3N0UHJvY2Vzcyhub2RlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICByZXR1cm4gbWFya2VyOworICAg
IH0KKworICAgIGZ1bmN0aW9uIHRyYWNrR3JvdXBFeHByZXNzaW9uKCkgeworICAgICAgICB2YXIg
bWFya2VyLCBleHByOworCisgICAgICAgIHNraXBDb21tZW50KCk7CisgICAgICAgIG1hcmtlciA9
IGNyZWF0ZUxvY2F0aW9uTWFya2VyKCk7CisgICAgICAgIGV4cGVjdCgnKCcpOworCisgICAgICAg
ICsrc3RhdGUucGFyZW50aGVzaXplZENvdW50OworCisgICAgICAgIHN0YXRlLmFsbG93QXJyb3dG
dW5jdGlvbiA9ICFzdGF0ZS5hbGxvd0Fycm93RnVuY3Rpb247CisgICAgICAgIGV4cHIgPSBwYXJz
ZUV4cHJlc3Npb24oKTsKKyAgICAgICAgc3RhdGUuYWxsb3dBcnJvd0Z1bmN0aW9uID0gZmFsc2U7
CisKKyAgICAgICAgaWYgKGV4cHIudHlwZSA9PT0gJ0Fycm93RnVuY3Rpb25FeHByZXNzaW9uJykg
eworICAgICAgICAgICAgbWFya2VyLmVuZCgpOworICAgICAgICAgICAgbWFya2VyLmFwcGx5KGV4
cHIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXhwZWN0KCcpJyk7CisgICAgICAg
ICAgICBtYXJrZXIuZW5kKCk7CisgICAgICAgICAgICBtYXJrZXIuYXBwbHlHcm91cChleHByKTsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBleHByOworICAgIH0KKworICAgIGZ1bmN0aW9u
IHRyYWNrTGVmdEhhbmRTaWRlRXhwcmVzc2lvbigpIHsKKyAgICAgICAgdmFyIG1hcmtlciwgZXhw
cjsKKworICAgICAgICBza2lwQ29tbWVudCgpOworICAgICAgICBtYXJrZXIgPSBjcmVhdGVMb2Nh
dGlvbk1hcmtlcigpOworCisgICAgICAgIGV4cHIgPSBtYXRjaEtleXdvcmQoJ25ldycpID8gcGFy
c2VOZXdFeHByZXNzaW9uKCkgOiBwYXJzZVByaW1hcnlFeHByZXNzaW9uKCk7CisKKyAgICAgICAg
d2hpbGUgKG1hdGNoKCcuJykgfHwgbWF0Y2goJ1snKSB8fCBsb29rYWhlYWQudHlwZSA9PT0gVG9r
ZW4uVGVtcGxhdGUpIHsKKyAgICAgICAgICAgIGlmIChtYXRjaCgnWycpKSB7CisgICAgICAgICAg
ICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZU1lbWJlckV4cHJlc3Npb24oJ1snLCBleHByLCBw
YXJzZUNvbXB1dGVkTWVtYmVyKCkpOworICAgICAgICAgICAgICAgIG1hcmtlci5lbmQoKTsKKyAg
ICAgICAgICAgICAgICBtYXJrZXIuYXBwbHkoZXhwcik7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KG1hdGNoKCcuJykpIHsKKyAgICAgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlTWVt
YmVyRXhwcmVzc2lvbignLicsIGV4cHIsIHBhcnNlTm9uQ29tcHV0ZWRNZW1iZXIoKSk7CisgICAg
ICAgICAgICAgICAgbWFya2VyLmVuZCgpOworICAgICAgICAgICAgICAgIG1hcmtlci5hcHBseShl
eHByKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZXhwciA9IGRlbGVn
YXRlLmNyZWF0ZVRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbihleHByLCBwYXJzZVRlbXBsYXRlTGl0
ZXJhbCgpKTsKKyAgICAgICAgICAgICAgICBtYXJrZXIuZW5kKCk7CisgICAgICAgICAgICAgICAg
bWFya2VyLmFwcGx5KGV4cHIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIGV4cHI7CisgICAgfQorCisgICAgZnVuY3Rpb24gdHJhY2tMZWZ0SGFuZFNpZGVFeHBy
ZXNzaW9uQWxsb3dDYWxsKCkgeworICAgICAgICB2YXIgbWFya2VyLCBleHByLCBhcmdzOworCisg
ICAgICAgIHNraXBDb21tZW50KCk7CisgICAgICAgIG1hcmtlciA9IGNyZWF0ZUxvY2F0aW9uTWFy
a2VyKCk7CisKKyAgICAgICAgZXhwciA9IG1hdGNoS2V5d29yZCgnbmV3JykgPyBwYXJzZU5ld0V4
cHJlc3Npb24oKSA6IHBhcnNlUHJpbWFyeUV4cHJlc3Npb24oKTsKKworICAgICAgICB3aGlsZSAo
bWF0Y2goJy4nKSB8fCBtYXRjaCgnWycpIHx8IG1hdGNoKCcoJykgfHwgbG9va2FoZWFkLnR5cGUg
PT09IFRva2VuLlRlbXBsYXRlKSB7CisgICAgICAgICAgICBpZiAobWF0Y2goJygnKSkgeworICAg
ICAgICAgICAgICAgIGFyZ3MgPSBwYXJzZUFyZ3VtZW50cygpOworICAgICAgICAgICAgICAgIGV4
cHIgPSBkZWxlZ2F0ZS5jcmVhdGVDYWxsRXhwcmVzc2lvbihleHByLCBhcmdzKTsKKyAgICAgICAg
ICAgICAgICBtYXJrZXIuZW5kKCk7CisgICAgICAgICAgICAgICAgbWFya2VyLmFwcGx5KGV4cHIp
OworICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaCgnWycpKSB7CisgICAgICAgICAgICAgICAg
ZXhwciA9IGRlbGVnYXRlLmNyZWF0ZU1lbWJlckV4cHJlc3Npb24oJ1snLCBleHByLCBwYXJzZUNv
bXB1dGVkTWVtYmVyKCkpOworICAgICAgICAgICAgICAgIG1hcmtlci5lbmQoKTsKKyAgICAgICAg
ICAgICAgICBtYXJrZXIuYXBwbHkoZXhwcik7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNo
KCcuJykpIHsKKyAgICAgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlTWVtYmVyRXhw
cmVzc2lvbignLicsIGV4cHIsIHBhcnNlTm9uQ29tcHV0ZWRNZW1iZXIoKSk7CisgICAgICAgICAg
ICAgICAgbWFya2VyLmVuZCgpOworICAgICAgICAgICAgICAgIG1hcmtlci5hcHBseShleHByKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNy
ZWF0ZVRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbihleHByLCBwYXJzZVRlbXBsYXRlTGl0ZXJhbCgp
KTsKKyAgICAgICAgICAgICAgICBtYXJrZXIuZW5kKCk7CisgICAgICAgICAgICAgICAgbWFya2Vy
LmFwcGx5KGV4cHIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IGV4cHI7CisgICAgfQorCisgICAgZnVuY3Rpb24gZmlsdGVyR3JvdXAobm9kZSkgeworICAgICAg
ICB2YXIgbiwgaSwgZW50cnk7CisKKyAgICAgICAgbiA9IChPYmplY3QucHJvdG90eXBlLnRvU3Ry
aW5nLmFwcGx5KG5vZGUpID09PSAnW29iamVjdCBBcnJheV0nKSA/IFtdIDoge307CisgICAgICAg
IGZvciAoaSBpbiBub2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS5oYXNPd25Qcm9wZXJ0eShp
KSAmJiBpICE9PSAnZ3JvdXBSYW5nZScgJiYgaSAhPT0gJ2dyb3VwTG9jJykgeworICAgICAgICAg
ICAgICAgIGVudHJ5ID0gbm9kZVtpXTsKKyAgICAgICAgICAgICAgICBpZiAoZW50cnkgPT09IG51
bGwgfHwgdHlwZW9mIGVudHJ5ICE9PSAnb2JqZWN0JyB8fCBlbnRyeSBpbnN0YW5jZW9mIFJlZ0V4
cCkgeworICAgICAgICAgICAgICAgICAgICBuW2ldID0gZW50cnk7CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbltpXSA9IGZpbHRlckdyb3VwKGVudHJ5KTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIG47CisgICAgfQorCisgICAgZnVuY3Rpb24gd3JhcFRyYWNraW5nRnVuY3Rpb24ocmFuZ2Us
IGxvYywgcHJlc2VydmVXaGl0ZXNwYWNlKSB7CisKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChw
YXJzZUZ1bmN0aW9uKSB7CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIGlzQmluYXJ5KG5vZGUpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS50eXBlID09PSBTeW50YXguTG9naWNhbEV4cHJl
c3Npb24gfHwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS50eXBlID09PSBTeW50YXguQmluYXJ5
RXhwcmVzc2lvbjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZnVuY3Rpb24gdmlzaXQo
bm9kZSkgeworICAgICAgICAgICAgICAgIHZhciBzdGFydCwgZW5kOworCisgICAgICAgICAgICAg
ICAgaWYgKGlzQmluYXJ5KG5vZGUubGVmdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdmlzaXQo
bm9kZS5sZWZ0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGlzQmlu
YXJ5KG5vZGUucmlnaHQpKSB7CisgICAgICAgICAgICAgICAgICAgIHZpc2l0KG5vZGUucmlnaHQp
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChyYW5nZSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAobm9kZS5sZWZ0Lmdyb3VwUmFuZ2UgfHwgbm9kZS5yaWdodC5n
cm91cFJhbmdlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IG5vZGUubGVmdC5n
cm91cFJhbmdlID8gbm9kZS5sZWZ0Lmdyb3VwUmFuZ2VbMF0gOiBub2RlLmxlZnQucmFuZ2VbMF07
CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSBub2RlLnJpZ2h0Lmdyb3VwUmFuZ2UgPyBu
b2RlLnJpZ2h0Lmdyb3VwUmFuZ2VbMV0gOiBub2RlLnJpZ2h0LnJhbmdlWzFdOworICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZS5yYW5nZSA9IFtzdGFydCwgZW5kXTsKKyAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygbm9kZS5yYW5nZSA9PT0gJ3VuZGVmaW5lZCcpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gbm9kZS5sZWZ0LnJhbmdlWzBdOworICAgICAg
ICAgICAgICAgICAgICAgICAgZW5kID0gbm9kZS5yaWdodC5yYW5nZVsxXTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGUucmFuZ2UgPSBbc3RhcnQsIGVuZF07CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGxvYykgeworICAg
ICAgICAgICAgICAgICAgICBpZiAobm9kZS5sZWZ0Lmdyb3VwTG9jIHx8IG5vZGUucmlnaHQuZ3Jv
dXBMb2MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gbm9kZS5sZWZ0Lmdyb3Vw
TG9jID8gbm9kZS5sZWZ0Lmdyb3VwTG9jLnN0YXJ0IDogbm9kZS5sZWZ0LmxvYy5zdGFydDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGVuZCA9IG5vZGUucmlnaHQuZ3JvdXBMb2MgPyBub2RlLnJp
Z2h0Lmdyb3VwTG9jLmVuZCA6IG5vZGUucmlnaHQubG9jLmVuZDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGUubG9jID0geworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBz
dGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IGVuZAorICAgICAgICAgICAg
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBkZWxlZ2F0ZS5w
b3N0UHJvY2Vzcyhub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Yg
bm9kZS5sb2MgPT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
LmxvYyA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogbm9kZS5sZWZ0Lmxv
Yy5zdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IG5vZGUucmlnaHQubG9j
LmVuZAorICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGUgPSBkZWxlZ2F0ZS5wb3N0UHJvY2Vzcyhub2RlKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJu
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICB2YXIgbWFya2VyLCBub2RlOworCisgICAg
ICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZVdoaXRlc3BhY2UpIHsKKyAgICAgICAgICAgICAgICAg
ICAgc2tpcENvbW1lbnQoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBt
YXJrZXIgPSBjcmVhdGVMb2NhdGlvbk1hcmtlcigpOworICAgICAgICAgICAgICAgIG5vZGUgPSBw
YXJzZUZ1bmN0aW9uLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CisgICAgICAgICAgICAgICAgbWFy
a2VyLmVuZCgpOworCisgICAgICAgICAgICAgICAgaWYgKHJhbmdlICYmIHR5cGVvZiBub2RlLnJh
bmdlID09PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAgICAgICAgICBtYXJrZXIuYXBwbHko
bm9kZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGxvYyAmJiB0
eXBlb2Ygbm9kZS5sb2MgPT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgICAgICAgICAgIG1h
cmtlci5hcHBseShub2RlKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBp
ZiAoaXNCaW5hcnkobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdmlzaXQobm9kZSk7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAg
ICAgICB9OworICAgICAgICB9OworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhdGNoKCkgeworCisg
ICAgICAgIHZhciB3cmFwVHJhY2tpbmcsIHdyYXBUcmFja2luZ1ByZXNlcnZlV2hpdGVzcGFjZTsK
KworICAgICAgICBpZiAoZXh0cmEuY29tbWVudHMpIHsKKyAgICAgICAgICAgIGV4dHJhLnNraXBD
b21tZW50ID0gc2tpcENvbW1lbnQ7CisgICAgICAgICAgICBza2lwQ29tbWVudCA9IHNjYW5Db21t
ZW50OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGV4dHJhLnJhbmdlIHx8IGV4dHJhLmxvYykg
eworCisgICAgICAgICAgICBleHRyYS5wYXJzZUdyb3VwRXhwcmVzc2lvbiA9IHBhcnNlR3JvdXBF
eHByZXNzaW9uOworICAgICAgICAgICAgZXh0cmEucGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9u
ID0gcGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uOworICAgICAgICAgICAgZXh0cmEucGFyc2VM
ZWZ0SGFuZFNpZGVFeHByZXNzaW9uQWxsb3dDYWxsID0gcGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNz
aW9uQWxsb3dDYWxsOworICAgICAgICAgICAgcGFyc2VHcm91cEV4cHJlc3Npb24gPSB0cmFja0dy
b3VwRXhwcmVzc2lvbjsKKyAgICAgICAgICAgIHBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbiA9
IHRyYWNrTGVmdEhhbmRTaWRlRXhwcmVzc2lvbjsKKyAgICAgICAgICAgIHBhcnNlTGVmdEhhbmRT
aWRlRXhwcmVzc2lvbkFsbG93Q2FsbCA9IHRyYWNrTGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFsbG93
Q2FsbDsKKworICAgICAgICAgICAgd3JhcFRyYWNraW5nID0gd3JhcFRyYWNraW5nRnVuY3Rpb24o
ZXh0cmEucmFuZ2UsIGV4dHJhLmxvYyk7CisgICAgICAgICAgICB3cmFwVHJhY2tpbmdQcmVzZXJ2
ZVdoaXRlc3BhY2UgPQorICAgICAgICAgICAgICAgIHdyYXBUcmFja2luZ0Z1bmN0aW9uKGV4dHJh
LnJhbmdlLCBleHRyYS5sb2MsIHRydWUpOworCisgICAgICAgICAgICBleHRyYS5wYXJzZUFzc2ln
bm1lbnRFeHByZXNzaW9uID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbjsKKyAgICAgICAgICAg
IGV4dHJhLnBhcnNlQmluYXJ5RXhwcmVzc2lvbiA9IHBhcnNlQmluYXJ5RXhwcmVzc2lvbjsKKyAg
ICAgICAgICAgIGV4dHJhLnBhcnNlQmxvY2sgPSBwYXJzZUJsb2NrOworICAgICAgICAgICAgZXh0
cmEucGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzID0gcGFyc2VGdW5jdGlvblNvdXJjZUVsZW1l
bnRzOworICAgICAgICAgICAgZXh0cmEucGFyc2VDYXRjaENsYXVzZSA9IHBhcnNlQ2F0Y2hDbGF1
c2U7CisgICAgICAgICAgICBleHRyYS5wYXJzZUNvbXB1dGVkTWVtYmVyID0gcGFyc2VDb21wdXRl
ZE1lbWJlcjsKKyAgICAgICAgICAgIGV4dHJhLnBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uID0g
cGFyc2VDb25kaXRpb25hbEV4cHJlc3Npb247CisgICAgICAgICAgICBleHRyYS5wYXJzZUNvbnN0
TGV0RGVjbGFyYXRpb24gPSBwYXJzZUNvbnN0TGV0RGVjbGFyYXRpb247CisgICAgICAgICAgICBl
eHRyYS5wYXJzZUV4cG9ydERlY2xhcmF0aW9uID0gcGFyc2VFeHBvcnREZWNsYXJhdGlvbjsKKyAg
ICAgICAgICAgIGV4dHJhLnBhcnNlRXhwb3J0U3BlY2lmaWVyID0gcGFyc2VFeHBvcnRTcGVjaWZp
ZXI7CisgICAgICAgICAgICBleHRyYS5wYXJzZUV4cG9ydFNwZWNpZmllclNldFByb3BlcnR5ID0g
cGFyc2VFeHBvcnRTcGVjaWZpZXJTZXRQcm9wZXJ0eTsKKyAgICAgICAgICAgIGV4dHJhLnBhcnNl
RXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbjsKKyAgICAgICAgICAgIGV4dHJhLnBhcnNlRm9y
VmFyaWFibGVEZWNsYXJhdGlvbiA9IHBhcnNlRm9yVmFyaWFibGVEZWNsYXJhdGlvbjsKKyAgICAg
ICAgICAgIGV4dHJhLnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbiA9IHBhcnNlRnVuY3Rpb25EZWNs
YXJhdGlvbjsKKyAgICAgICAgICAgIGV4dHJhLnBhcnNlRnVuY3Rpb25FeHByZXNzaW9uID0gcGFy
c2VGdW5jdGlvbkV4cHJlc3Npb247CisgICAgICAgICAgICBleHRyYS5wYXJzZVBhcmFtcyA9IHBh
cnNlUGFyYW1zOworICAgICAgICAgICAgZXh0cmEucGFyc2VHbG9iID0gcGFyc2VHbG9iOworICAg
ICAgICAgICAgZXh0cmEucGFyc2VJbXBvcnREZWNsYXJhdGlvbiA9IHBhcnNlSW1wb3J0RGVjbGFy
YXRpb247CisgICAgICAgICAgICBleHRyYS5wYXJzZUltcG9ydFNwZWNpZmllciA9IHBhcnNlSW1w
b3J0U3BlY2lmaWVyOworICAgICAgICAgICAgZXh0cmEucGFyc2VNb2R1bGVEZWNsYXJhdGlvbiA9
IHBhcnNlTW9kdWxlRGVjbGFyYXRpb247CisgICAgICAgICAgICBleHRyYS5wYXJzZU1vZHVsZUJs
b2NrID0gcGFyc2VNb2R1bGVCbG9jazsKKyAgICAgICAgICAgIGV4dHJhLnBhcnNlTmV3RXhwcmVz
c2lvbiA9IHBhcnNlTmV3RXhwcmVzc2lvbjsKKyAgICAgICAgICAgIGV4dHJhLnBhcnNlTm9uQ29t
cHV0ZWRQcm9wZXJ0eSA9IHBhcnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eTsKKyAgICAgICAgICAgIGV4
dHJhLnBhcnNlT2JqZWN0UHJvcGVydHkgPSBwYXJzZU9iamVjdFByb3BlcnR5OworICAgICAgICAg
ICAgZXh0cmEucGFyc2VPYmplY3RQcm9wZXJ0eUtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXk7
CisgICAgICAgICAgICBleHRyYS5wYXJzZVBhdGggPSBwYXJzZVBhdGg7CisgICAgICAgICAgICBl
eHRyYS5wYXJzZVBvc3RmaXhFeHByZXNzaW9uID0gcGFyc2VQb3N0Zml4RXhwcmVzc2lvbjsKKyAg
ICAgICAgICAgIGV4dHJhLnBhcnNlUHJpbWFyeUV4cHJlc3Npb24gPSBwYXJzZVByaW1hcnlFeHBy
ZXNzaW9uOworICAgICAgICAgICAgZXh0cmEucGFyc2VQcm9ncmFtID0gcGFyc2VQcm9ncmFtOwor
ICAgICAgICAgICAgZXh0cmEucGFyc2VQcm9wZXJ0eUZ1bmN0aW9uID0gcGFyc2VQcm9wZXJ0eUZ1
bmN0aW9uOworICAgICAgICAgICAgZXh0cmEucGFyc2VTcHJlYWRPckFzc2lnbm1lbnRFeHByZXNz
aW9uID0gcGFyc2VTcHJlYWRPckFzc2lnbm1lbnRFeHByZXNzaW9uOworICAgICAgICAgICAgZXh0
cmEucGFyc2VUZW1wbGF0ZUVsZW1lbnQgPSBwYXJzZVRlbXBsYXRlRWxlbWVudDsKKyAgICAgICAg
ICAgIGV4dHJhLnBhcnNlVGVtcGxhdGVMaXRlcmFsID0gcGFyc2VUZW1wbGF0ZUxpdGVyYWw7Cisg
ICAgICAgICAgICBleHRyYS5wYXJzZVN0YXRlbWVudCA9IHBhcnNlU3RhdGVtZW50OworICAgICAg
ICAgICAgZXh0cmEucGFyc2VTd2l0Y2hDYXNlID0gcGFyc2VTd2l0Y2hDYXNlOworICAgICAgICAg
ICAgZXh0cmEucGFyc2VVbmFyeUV4cHJlc3Npb24gPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbjsKKyAg
ICAgICAgICAgIGV4dHJhLnBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbiA9IHBhcnNlVmFyaWFibGVE
ZWNsYXJhdGlvbjsKKyAgICAgICAgICAgIGV4dHJhLnBhcnNlVmFyaWFibGVJZGVudGlmaWVyID0g
cGFyc2VWYXJpYWJsZUlkZW50aWZpZXI7CisgICAgICAgICAgICBleHRyYS5wYXJzZU1ldGhvZERl
ZmluaXRpb24gPSBwYXJzZU1ldGhvZERlZmluaXRpb247CisgICAgICAgICAgICBleHRyYS5wYXJz
ZUNsYXNzRGVjbGFyYXRpb24gPSBwYXJzZUNsYXNzRGVjbGFyYXRpb247CisgICAgICAgICAgICBl
eHRyYS5wYXJzZUNsYXNzRXhwcmVzc2lvbiA9IHBhcnNlQ2xhc3NFeHByZXNzaW9uOworICAgICAg
ICAgICAgZXh0cmEucGFyc2VDbGFzc0JvZHkgPSBwYXJzZUNsYXNzQm9keTsKKyAgICAgICAgICAg
IGV4dHJhLnBhcnNlWEpTSWRlbnRpZmllciA9IHBhcnNlWEpTSWRlbnRpZmllcjsKKyAgICAgICAg
ICAgIGV4dHJhLnBhcnNlWEpTQ2hpbGQgPSBwYXJzZVhKU0NoaWxkOworICAgICAgICAgICAgZXh0
cmEucGFyc2VYSlNBdHRyaWJ1dGUgPSBwYXJzZVhKU0F0dHJpYnV0ZTsKKyAgICAgICAgICAgIGV4
dHJhLnBhcnNlWEpTQXR0cmlidXRlVmFsdWUgPSBwYXJzZVhKU0F0dHJpYnV0ZVZhbHVlOworICAg
ICAgICAgICAgZXh0cmEucGFyc2VYSlNFeHByZXNzaW9uQ29udGFpbmVyID0gcGFyc2VYSlNFeHBy
ZXNzaW9uQ29udGFpbmVyOworICAgICAgICAgICAgZXh0cmEucGFyc2VYSlNFbXB0eUV4cHJlc3Np
b24gPSBwYXJzZVhKU0VtcHR5RXhwcmVzc2lvbjsKKyAgICAgICAgICAgIGV4dHJhLnBhcnNlWEpT
RWxlbWVudCA9IHBhcnNlWEpTRWxlbWVudDsKKyAgICAgICAgICAgIGV4dHJhLnBhcnNlWEpTQ2xv
c2luZ0VsZW1lbnQgPSBwYXJzZVhKU0Nsb3NpbmdFbGVtZW50OworICAgICAgICAgICAgZXh0cmEu
cGFyc2VYSlNPcGVuaW5nRWxlbWVudCA9IHBhcnNlWEpTT3BlbmluZ0VsZW1lbnQ7CisKKyAgICAg
ICAgICAgIHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24gPSB3cmFwVHJhY2tpbmcoZXh0cmEucGFy
c2VBc3NpZ25tZW50RXhwcmVzc2lvbik7CisgICAgICAgICAgICBwYXJzZUJpbmFyeUV4cHJlc3Np
b24gPSB3cmFwVHJhY2tpbmcoZXh0cmEucGFyc2VCaW5hcnlFeHByZXNzaW9uKTsKKyAgICAgICAg
ICAgIHBhcnNlQmxvY2sgPSB3cmFwVHJhY2tpbmcoZXh0cmEucGFyc2VCbG9jayk7CisgICAgICAg
ICAgICBwYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMgPSB3cmFwVHJhY2tpbmcoZXh0cmEucGFy
c2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKTsKKyAgICAgICAgICAgIHBhcnNlQ2F0Y2hDbGF1c2Ug
PSB3cmFwVHJhY2tpbmcoZXh0cmEucGFyc2VDYXRjaENsYXVzZSk7CisgICAgICAgICAgICBwYXJz
ZUNvbXB1dGVkTWVtYmVyID0gd3JhcFRyYWNraW5nKGV4dHJhLnBhcnNlQ29tcHV0ZWRNZW1iZXIp
OworICAgICAgICAgICAgcGFyc2VDb25kaXRpb25hbEV4cHJlc3Npb24gPSB3cmFwVHJhY2tpbmco
ZXh0cmEucGFyc2VDb25kaXRpb25hbEV4cHJlc3Npb24pOworICAgICAgICAgICAgcGFyc2VDb25z
dExldERlY2xhcmF0aW9uID0gd3JhcFRyYWNraW5nKGV4dHJhLnBhcnNlQ29uc3RMZXREZWNsYXJh
dGlvbik7CisgICAgICAgICAgICBwYXJzZUV4cG9ydERlY2xhcmF0aW9uID0gd3JhcFRyYWNraW5n
KHBhcnNlRXhwb3J0RGVjbGFyYXRpb24pOworICAgICAgICAgICAgcGFyc2VFeHBvcnRTcGVjaWZp
ZXIgPSB3cmFwVHJhY2tpbmcocGFyc2VFeHBvcnRTcGVjaWZpZXIpOworICAgICAgICAgICAgcGFy
c2VFeHBvcnRTcGVjaWZpZXJTZXRQcm9wZXJ0eSA9IHdyYXBUcmFja2luZyhwYXJzZUV4cG9ydFNw
ZWNpZmllclNldFByb3BlcnR5KTsKKyAgICAgICAgICAgIHBhcnNlRXhwcmVzc2lvbiA9IHdyYXBU
cmFja2luZyhleHRyYS5wYXJzZUV4cHJlc3Npb24pOworICAgICAgICAgICAgcGFyc2VGb3JWYXJp
YWJsZURlY2xhcmF0aW9uID0gd3JhcFRyYWNraW5nKGV4dHJhLnBhcnNlRm9yVmFyaWFibGVEZWNs
YXJhdGlvbik7CisgICAgICAgICAgICBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24gPSB3cmFwVHJh
Y2tpbmcoZXh0cmEucGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKTsKKyAgICAgICAgICAgIHBhcnNl
RnVuY3Rpb25FeHByZXNzaW9uID0gd3JhcFRyYWNraW5nKGV4dHJhLnBhcnNlRnVuY3Rpb25FeHBy
ZXNzaW9uKTsKKyAgICAgICAgICAgIHBhcnNlUGFyYW1zID0gd3JhcFRyYWNraW5nKGV4dHJhLnBh
cnNlUGFyYW1zKTsKKyAgICAgICAgICAgIHBhcnNlR2xvYiA9IHdyYXBUcmFja2luZyhleHRyYS5w
YXJzZUdsb2IpOworICAgICAgICAgICAgcGFyc2VJbXBvcnREZWNsYXJhdGlvbiA9IHdyYXBUcmFj
a2luZyhleHRyYS5wYXJzZUltcG9ydERlY2xhcmF0aW9uKTsKKyAgICAgICAgICAgIHBhcnNlSW1w
b3J0U3BlY2lmaWVyID0gd3JhcFRyYWNraW5nKGV4dHJhLnBhcnNlSW1wb3J0U3BlY2lmaWVyKTsK
KyAgICAgICAgICAgIHBhcnNlTW9kdWxlRGVjbGFyYXRpb24gPSB3cmFwVHJhY2tpbmcoZXh0cmEu
cGFyc2VNb2R1bGVEZWNsYXJhdGlvbik7CisgICAgICAgICAgICBwYXJzZU1vZHVsZUJsb2NrID0g
d3JhcFRyYWNraW5nKGV4dHJhLnBhcnNlTW9kdWxlQmxvY2spOworICAgICAgICAgICAgcGFyc2VM
ZWZ0SGFuZFNpZGVFeHByZXNzaW9uID0gd3JhcFRyYWNraW5nKHBhcnNlTGVmdEhhbmRTaWRlRXhw
cmVzc2lvbik7CisgICAgICAgICAgICBwYXJzZU5ld0V4cHJlc3Npb24gPSB3cmFwVHJhY2tpbmco
ZXh0cmEucGFyc2VOZXdFeHByZXNzaW9uKTsKKyAgICAgICAgICAgIHBhcnNlTm9uQ29tcHV0ZWRQ
cm9wZXJ0eSA9IHdyYXBUcmFja2luZyhleHRyYS5wYXJzZU5vbkNvbXB1dGVkUHJvcGVydHkpOwor
ICAgICAgICAgICAgcGFyc2VPYmplY3RQcm9wZXJ0eSA9IHdyYXBUcmFja2luZyhleHRyYS5wYXJz
ZU9iamVjdFByb3BlcnR5KTsKKyAgICAgICAgICAgIHBhcnNlT2JqZWN0UHJvcGVydHlLZXkgPSB3
cmFwVHJhY2tpbmcoZXh0cmEucGFyc2VPYmplY3RQcm9wZXJ0eUtleSk7CisgICAgICAgICAgICBw
YXJzZVBhdGggPSB3cmFwVHJhY2tpbmcoZXh0cmEucGFyc2VQYXRoKTsKKyAgICAgICAgICAgIHBh
cnNlUG9zdGZpeEV4cHJlc3Npb24gPSB3cmFwVHJhY2tpbmcoZXh0cmEucGFyc2VQb3N0Zml4RXhw
cmVzc2lvbik7CisgICAgICAgICAgICBwYXJzZVByaW1hcnlFeHByZXNzaW9uID0gd3JhcFRyYWNr
aW5nKGV4dHJhLnBhcnNlUHJpbWFyeUV4cHJlc3Npb24pOworICAgICAgICAgICAgcGFyc2VQcm9n
cmFtID0gd3JhcFRyYWNraW5nKGV4dHJhLnBhcnNlUHJvZ3JhbSk7CisgICAgICAgICAgICBwYXJz
ZVByb3BlcnR5RnVuY3Rpb24gPSB3cmFwVHJhY2tpbmcoZXh0cmEucGFyc2VQcm9wZXJ0eUZ1bmN0
aW9uKTsKKyAgICAgICAgICAgIHBhcnNlVGVtcGxhdGVFbGVtZW50ID0gd3JhcFRyYWNraW5nKGV4
dHJhLnBhcnNlVGVtcGxhdGVFbGVtZW50KTsKKyAgICAgICAgICAgIHBhcnNlVGVtcGxhdGVMaXRl
cmFsID0gd3JhcFRyYWNraW5nKGV4dHJhLnBhcnNlVGVtcGxhdGVMaXRlcmFsKTsKKyAgICAgICAg
ICAgIHBhcnNlU3ByZWFkT3JBc3NpZ25tZW50RXhwcmVzc2lvbiA9IHdyYXBUcmFja2luZyhleHRy
YS5wYXJzZVNwcmVhZE9yQXNzaWdubWVudEV4cHJlc3Npb24pOworICAgICAgICAgICAgcGFyc2VT
dGF0ZW1lbnQgPSB3cmFwVHJhY2tpbmcoZXh0cmEucGFyc2VTdGF0ZW1lbnQpOworICAgICAgICAg
ICAgcGFyc2VTd2l0Y2hDYXNlID0gd3JhcFRyYWNraW5nKGV4dHJhLnBhcnNlU3dpdGNoQ2FzZSk7
CisgICAgICAgICAgICBwYXJzZVVuYXJ5RXhwcmVzc2lvbiA9IHdyYXBUcmFja2luZyhleHRyYS5w
YXJzZVVuYXJ5RXhwcmVzc2lvbik7CisgICAgICAgICAgICBwYXJzZVZhcmlhYmxlRGVjbGFyYXRp
b24gPSB3cmFwVHJhY2tpbmcoZXh0cmEucGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKTsKKyAgICAg
ICAgICAgIHBhcnNlVmFyaWFibGVJZGVudGlmaWVyID0gd3JhcFRyYWNraW5nKGV4dHJhLnBhcnNl
VmFyaWFibGVJZGVudGlmaWVyKTsKKyAgICAgICAgICAgIHBhcnNlTWV0aG9kRGVmaW5pdGlvbiA9
IHdyYXBUcmFja2luZyhleHRyYS5wYXJzZU1ldGhvZERlZmluaXRpb24pOworICAgICAgICAgICAg
cGFyc2VDbGFzc0RlY2xhcmF0aW9uID0gd3JhcFRyYWNraW5nKGV4dHJhLnBhcnNlQ2xhc3NEZWNs
YXJhdGlvbik7CisgICAgICAgICAgICBwYXJzZUNsYXNzRXhwcmVzc2lvbiA9IHdyYXBUcmFja2lu
ZyhleHRyYS5wYXJzZUNsYXNzRXhwcmVzc2lvbik7CisgICAgICAgICAgICBwYXJzZUNsYXNzQm9k
eSA9IHdyYXBUcmFja2luZyhleHRyYS5wYXJzZUNsYXNzQm9keSk7CisgICAgICAgICAgICBwYXJz
ZVhKU0lkZW50aWZpZXIgPSB3cmFwVHJhY2tpbmcoZXh0cmEucGFyc2VYSlNJZGVudGlmaWVyKTsK
KyAgICAgICAgICAgIHBhcnNlWEpTQ2hpbGQgPSB3cmFwVHJhY2tpbmdQcmVzZXJ2ZVdoaXRlc3Bh
Y2UoZXh0cmEucGFyc2VYSlNDaGlsZCk7CisgICAgICAgICAgICBwYXJzZVhKU0F0dHJpYnV0ZSA9
IHdyYXBUcmFja2luZyhleHRyYS5wYXJzZVhKU0F0dHJpYnV0ZSk7CisgICAgICAgICAgICBwYXJz
ZVhKU0F0dHJpYnV0ZVZhbHVlID0gd3JhcFRyYWNraW5nKGV4dHJhLnBhcnNlWEpTQXR0cmlidXRl
VmFsdWUpOworICAgICAgICAgICAgcGFyc2VYSlNFeHByZXNzaW9uQ29udGFpbmVyID0gd3JhcFRy
YWNraW5nKGV4dHJhLnBhcnNlWEpTRXhwcmVzc2lvbkNvbnRhaW5lcik7CisgICAgICAgICAgICBw
YXJzZVhKU0VtcHR5RXhwcmVzc2lvbiA9IHdyYXBUcmFja2luZ1ByZXNlcnZlV2hpdGVzcGFjZShl
eHRyYS5wYXJzZVhKU0VtcHR5RXhwcmVzc2lvbik7CisgICAgICAgICAgICBwYXJzZVhKU0VsZW1l
bnQgPSB3cmFwVHJhY2tpbmcoZXh0cmEucGFyc2VYSlNFbGVtZW50KTsKKyAgICAgICAgICAgIHBh
cnNlWEpTQ2xvc2luZ0VsZW1lbnQgPSB3cmFwVHJhY2tpbmcoZXh0cmEucGFyc2VYSlNDbG9zaW5n
RWxlbWVudCk7CisgICAgICAgICAgICBwYXJzZVhKU09wZW5pbmdFbGVtZW50ID0gd3JhcFRyYWNr
aW5nKGV4dHJhLnBhcnNlWEpTT3BlbmluZ0VsZW1lbnQpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKHR5cGVvZiBleHRyYS50b2tlbnMgIT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgICBl
eHRyYS5hZHZhbmNlID0gYWR2YW5jZTsKKyAgICAgICAgICAgIGV4dHJhLnNjYW5SZWdFeHAgPSBz
Y2FuUmVnRXhwOworCisgICAgICAgICAgICBhZHZhbmNlID0gY29sbGVjdFRva2VuOworICAgICAg
ICAgICAgc2NhblJlZ0V4cCA9IGNvbGxlY3RSZWdleDsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGZ1bmN0aW9uIHVucGF0Y2goKSB7CisgICAgICAgIGlmICh0eXBlb2YgZXh0cmEuc2tpcENvbW1l
bnQgPT09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgICAgIHNraXBDb21tZW50ID0gZXh0cmEuc2tp
cENvbW1lbnQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZXh0cmEucmFuZ2UgfHwgZXh0cmEu
bG9jKSB7CisgICAgICAgICAgICBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uID0gZXh0cmEucGFy
c2VBc3NpZ25tZW50RXhwcmVzc2lvbjsKKyAgICAgICAgICAgIHBhcnNlQmluYXJ5RXhwcmVzc2lv
biA9IGV4dHJhLnBhcnNlQmluYXJ5RXhwcmVzc2lvbjsKKyAgICAgICAgICAgIHBhcnNlQmxvY2sg
PSBleHRyYS5wYXJzZUJsb2NrOworICAgICAgICAgICAgcGFyc2VGdW5jdGlvblNvdXJjZUVsZW1l
bnRzID0gZXh0cmEucGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzOworICAgICAgICAgICAgcGFy
c2VDYXRjaENsYXVzZSA9IGV4dHJhLnBhcnNlQ2F0Y2hDbGF1c2U7CisgICAgICAgICAgICBwYXJz
ZUNvbXB1dGVkTWVtYmVyID0gZXh0cmEucGFyc2VDb21wdXRlZE1lbWJlcjsKKyAgICAgICAgICAg
IHBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uID0gZXh0cmEucGFyc2VDb25kaXRpb25hbEV4cHJl
c3Npb247CisgICAgICAgICAgICBwYXJzZUNvbnN0TGV0RGVjbGFyYXRpb24gPSBleHRyYS5wYXJz
ZUNvbnN0TGV0RGVjbGFyYXRpb247CisgICAgICAgICAgICBwYXJzZUV4cG9ydERlY2xhcmF0aW9u
ID0gZXh0cmEucGFyc2VFeHBvcnREZWNsYXJhdGlvbjsKKyAgICAgICAgICAgIHBhcnNlRXhwb3J0
U3BlY2lmaWVyID0gZXh0cmEucGFyc2VFeHBvcnRTcGVjaWZpZXI7CisgICAgICAgICAgICBwYXJz
ZUV4cG9ydFNwZWNpZmllclNldFByb3BlcnR5ID0gZXh0cmEucGFyc2VFeHBvcnRTcGVjaWZpZXJT
ZXRQcm9wZXJ0eTsKKyAgICAgICAgICAgIHBhcnNlRXhwcmVzc2lvbiA9IGV4dHJhLnBhcnNlRXhw
cmVzc2lvbjsKKyAgICAgICAgICAgIHBhcnNlRm9yVmFyaWFibGVEZWNsYXJhdGlvbiA9IGV4dHJh
LnBhcnNlRm9yVmFyaWFibGVEZWNsYXJhdGlvbjsKKyAgICAgICAgICAgIHBhcnNlRnVuY3Rpb25E
ZWNsYXJhdGlvbiA9IGV4dHJhLnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbjsKKyAgICAgICAgICAg
IHBhcnNlRnVuY3Rpb25FeHByZXNzaW9uID0gZXh0cmEucGFyc2VGdW5jdGlvbkV4cHJlc3Npb247
CisgICAgICAgICAgICBwYXJzZUdsb2IgPSBleHRyYS5wYXJzZUdsb2I7CisgICAgICAgICAgICBw
YXJzZUltcG9ydERlY2xhcmF0aW9uID0gZXh0cmEucGFyc2VJbXBvcnREZWNsYXJhdGlvbjsKKyAg
ICAgICAgICAgIHBhcnNlSW1wb3J0U3BlY2lmaWVyID0gZXh0cmEucGFyc2VJbXBvcnRTcGVjaWZp
ZXI7CisgICAgICAgICAgICBwYXJzZUdyb3VwRXhwcmVzc2lvbiA9IGV4dHJhLnBhcnNlR3JvdXBF
eHByZXNzaW9uOworICAgICAgICAgICAgcGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uID0gZXh0
cmEucGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uOworICAgICAgICAgICAgcGFyc2VMZWZ0SGFu
ZFNpZGVFeHByZXNzaW9uQWxsb3dDYWxsID0gZXh0cmEucGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNz
aW9uQWxsb3dDYWxsOworICAgICAgICAgICAgcGFyc2VNb2R1bGVEZWNsYXJhdGlvbiA9IGV4dHJh
LnBhcnNlTW9kdWxlRGVjbGFyYXRpb247CisgICAgICAgICAgICBwYXJzZU1vZHVsZUJsb2NrID0g
ZXh0cmEucGFyc2VNb2R1bGVCbG9jazsKKyAgICAgICAgICAgIHBhcnNlTmV3RXhwcmVzc2lvbiA9
IGV4dHJhLnBhcnNlTmV3RXhwcmVzc2lvbjsKKyAgICAgICAgICAgIHBhcnNlTm9uQ29tcHV0ZWRQ
cm9wZXJ0eSA9IGV4dHJhLnBhcnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eTsKKyAgICAgICAgICAgIHBh
cnNlT2JqZWN0UHJvcGVydHkgPSBleHRyYS5wYXJzZU9iamVjdFByb3BlcnR5OworICAgICAgICAg
ICAgcGFyc2VPYmplY3RQcm9wZXJ0eUtleSA9IGV4dHJhLnBhcnNlT2JqZWN0UHJvcGVydHlLZXk7
CisgICAgICAgICAgICBwYXJzZVBhdGggPSBleHRyYS5wYXJzZVBhdGg7CisgICAgICAgICAgICBw
YXJzZVBvc3RmaXhFeHByZXNzaW9uID0gZXh0cmEucGFyc2VQb3N0Zml4RXhwcmVzc2lvbjsKKyAg
ICAgICAgICAgIHBhcnNlUHJpbWFyeUV4cHJlc3Npb24gPSBleHRyYS5wYXJzZVByaW1hcnlFeHBy
ZXNzaW9uOworICAgICAgICAgICAgcGFyc2VQcm9ncmFtID0gZXh0cmEucGFyc2VQcm9ncmFtOwor
ICAgICAgICAgICAgcGFyc2VQcm9wZXJ0eUZ1bmN0aW9uID0gZXh0cmEucGFyc2VQcm9wZXJ0eUZ1
bmN0aW9uOworICAgICAgICAgICAgcGFyc2VUZW1wbGF0ZUVsZW1lbnQgPSBleHRyYS5wYXJzZVRl
bXBsYXRlRWxlbWVudDsKKyAgICAgICAgICAgIHBhcnNlVGVtcGxhdGVMaXRlcmFsID0gZXh0cmEu
cGFyc2VUZW1wbGF0ZUxpdGVyYWw7CisgICAgICAgICAgICBwYXJzZVNwcmVhZE9yQXNzaWdubWVu
dEV4cHJlc3Npb24gPSBleHRyYS5wYXJzZVNwcmVhZE9yQXNzaWdubWVudEV4cHJlc3Npb247Cisg
ICAgICAgICAgICBwYXJzZVN0YXRlbWVudCA9IGV4dHJhLnBhcnNlU3RhdGVtZW50OworICAgICAg
ICAgICAgcGFyc2VTd2l0Y2hDYXNlID0gZXh0cmEucGFyc2VTd2l0Y2hDYXNlOworICAgICAgICAg
ICAgcGFyc2VVbmFyeUV4cHJlc3Npb24gPSBleHRyYS5wYXJzZVVuYXJ5RXhwcmVzc2lvbjsKKyAg
ICAgICAgICAgIHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbiA9IGV4dHJhLnBhcnNlVmFyaWFibGVE
ZWNsYXJhdGlvbjsKKyAgICAgICAgICAgIHBhcnNlVmFyaWFibGVJZGVudGlmaWVyID0gZXh0cmEu
cGFyc2VWYXJpYWJsZUlkZW50aWZpZXI7CisgICAgICAgICAgICBwYXJzZU1ldGhvZERlZmluaXRp
b24gPSBleHRyYS5wYXJzZU1ldGhvZERlZmluaXRpb247CisgICAgICAgICAgICBwYXJzZUNsYXNz
RGVjbGFyYXRpb24gPSBleHRyYS5wYXJzZUNsYXNzRGVjbGFyYXRpb247CisgICAgICAgICAgICBw
YXJzZUNsYXNzRXhwcmVzc2lvbiA9IGV4dHJhLnBhcnNlQ2xhc3NFeHByZXNzaW9uOworICAgICAg
ICAgICAgcGFyc2VDbGFzc0JvZHkgPSBleHRyYS5wYXJzZUNsYXNzQm9keTsKKyAgICAgICAgICAg
IHBhcnNlWEpTSWRlbnRpZmllciA9IGV4dHJhLnBhcnNlWEpTSWRlbnRpZmllcjsKKyAgICAgICAg
ICAgIHBhcnNlWEpTQ2hpbGQgPSBleHRyYS5wYXJzZVhKU0NoaWxkOworICAgICAgICAgICAgcGFy
c2VYSlNBdHRyaWJ1dGUgPSBleHRyYS5wYXJzZVhKU0F0dHJpYnV0ZTsKKyAgICAgICAgICAgIHBh
cnNlWEpTQXR0cmlidXRlVmFsdWUgPSBleHRyYS5wYXJzZVhKU0F0dHJpYnV0ZVZhbHVlOworICAg
ICAgICAgICAgcGFyc2VYSlNFeHByZXNzaW9uQ29udGFpbmVyID0gZXh0cmEucGFyc2VYSlNFeHBy
ZXNzaW9uQ29udGFpbmVyOworICAgICAgICAgICAgcGFyc2VYSlNFbXB0eUV4cHJlc3Npb24gPSBl
eHRyYS5wYXJzZVhKU0VtcHR5RXhwcmVzc2lvbjsKKyAgICAgICAgICAgIHBhcnNlWEpTRWxlbWVu
dCA9IGV4dHJhLnBhcnNlWEpTRWxlbWVudDsKKyAgICAgICAgICAgIHBhcnNlWEpTQ2xvc2luZ0Vs
ZW1lbnQgPSBleHRyYS5wYXJzZVhKU0Nsb3NpbmdFbGVtZW50OworICAgICAgICAgICAgcGFyc2VY
SlNPcGVuaW5nRWxlbWVudCA9IGV4dHJhLnBhcnNlWEpTT3BlbmluZ0VsZW1lbnQ7CisgICAgICAg
IH0KKworICAgICAgICBpZiAodHlwZW9mIGV4dHJhLnNjYW5SZWdFeHAgPT09ICdmdW5jdGlvbicp
IHsKKyAgICAgICAgICAgIGFkdmFuY2UgPSBleHRyYS5hZHZhbmNlOworICAgICAgICAgICAgc2Nh
blJlZ0V4cCA9IGV4dHJhLnNjYW5SZWdFeHA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBU
aGlzIGlzIHVzZWQgdG8gbW9kaWZ5IHRoZSBkZWxlZ2F0ZS4KKworICAgIGZ1bmN0aW9uIGV4dGVu
ZChvYmplY3QsIHByb3BlcnRpZXMpIHsKKyAgICAgICAgdmFyIGVudHJ5LCByZXN1bHQgPSB7fTsK
KworICAgICAgICBmb3IgKGVudHJ5IGluIG9iamVjdCkgeworICAgICAgICAgICAgaWYgKG9iamVj
dC5oYXNPd25Qcm9wZXJ0eShlbnRyeSkpIHsKKyAgICAgICAgICAgICAgICByZXN1bHRbZW50cnld
ID0gb2JqZWN0W2VudHJ5XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZv
ciAoZW50cnkgaW4gcHJvcGVydGllcykgeworICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMuaGFz
T3duUHJvcGVydHkoZW50cnkpKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0W2VudHJ5XSA9IHBy
b3BlcnRpZXNbZW50cnldOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0b2tlbml6ZShjb2RlLCBvcHRpb25z
KSB7CisgICAgICAgIHZhciB0b1N0cmluZywKKyAgICAgICAgICAgIHRva2VuLAorICAgICAgICAg
ICAgdG9rZW5zOworCisgICAgICAgIHRvU3RyaW5nID0gU3RyaW5nOworICAgICAgICBpZiAodHlw
ZW9mIGNvZGUgIT09ICdzdHJpbmcnICYmICEoY29kZSBpbnN0YW5jZW9mIFN0cmluZykpIHsKKyAg
ICAgICAgICAgIGNvZGUgPSB0b1N0cmluZyhjb2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIGRl
bGVnYXRlID0gU3ludGF4VHJlZURlbGVnYXRlOworICAgICAgICBzb3VyY2UgPSBjb2RlOworICAg
ICAgICBpbmRleCA9IDA7CisgICAgICAgIGxpbmVOdW1iZXIgPSAoc291cmNlLmxlbmd0aCA+IDAp
ID8gMSA6IDA7CisgICAgICAgIGxpbmVTdGFydCA9IDA7CisgICAgICAgIGxlbmd0aCA9IHNvdXJj
ZS5sZW5ndGg7CisgICAgICAgIGxvb2thaGVhZCA9IG51bGw7CisgICAgICAgIHN0YXRlID0gewor
ICAgICAgICAgICAgYWxsb3dJbjogdHJ1ZSwKKyAgICAgICAgICAgIGxhYmVsU2V0OiB7fSwKKyAg
ICAgICAgICAgIGluRnVuY3Rpb25Cb2R5OiBmYWxzZSwKKyAgICAgICAgICAgIGluSXRlcmF0aW9u
OiBmYWxzZSwKKyAgICAgICAgICAgIGluU3dpdGNoOiBmYWxzZQorICAgICAgICB9OworCisgICAg
ICAgIGV4dHJhID0ge307CisKKyAgICAgICAgLy8gT3B0aW9ucyBtYXRjaGluZy4KKyAgICAgICAg
b3B0aW9ucyA9IG9wdGlvbnMgfHwge307CisKKyAgICAgICAgLy8gT2YgY291cnNlIHdlIGNvbGxl
Y3QgdG9rZW5zIGhlcmUuCisgICAgICAgIG9wdGlvbnMudG9rZW5zID0gdHJ1ZTsKKyAgICAgICAg
ZXh0cmEudG9rZW5zID0gW107CisgICAgICAgIGV4dHJhLnRva2VuaXplID0gdHJ1ZTsKKyAgICAg
ICAgLy8gVGhlIGZvbGxvd2luZyB0d28gZmllbGRzIGFyZSBuZWNlc3NhcnkgdG8gY29tcHV0ZSB0
aGUgUmVnZXggdG9rZW5zLgorICAgICAgICBleHRyYS5vcGVuUGFyZW5Ub2tlbiA9IC0xOworICAg
ICAgICBleHRyYS5vcGVuQ3VybHlUb2tlbiA9IC0xOworCisgICAgICAgIGV4dHJhLnJhbmdlID0g
KHR5cGVvZiBvcHRpb25zLnJhbmdlID09PSAnYm9vbGVhbicpICYmIG9wdGlvbnMucmFuZ2U7Cisg
ICAgICAgIGV4dHJhLmxvYyA9ICh0eXBlb2Ygb3B0aW9ucy5sb2MgPT09ICdib29sZWFuJykgJiYg
b3B0aW9ucy5sb2M7CisKKyAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmNvbW1lbnQgPT09ICdi
b29sZWFuJyAmJiBvcHRpb25zLmNvbW1lbnQpIHsKKyAgICAgICAgICAgIGV4dHJhLmNvbW1lbnRz
ID0gW107CisgICAgICAgIH0KKyAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnRvbGVyYW50ID09
PSAnYm9vbGVhbicgJiYgb3B0aW9ucy50b2xlcmFudCkgeworICAgICAgICAgICAgZXh0cmEuZXJy
b3JzID0gW107CisgICAgICAgIH0KKworICAgICAgICBpZiAobGVuZ3RoID4gMCkgeworICAgICAg
ICAgICAgaWYgKHR5cGVvZiBzb3VyY2VbMF0gPT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAg
ICAgICAgLy8gVHJ5IGZpcnN0IHRvIGNvbnZlcnQgdG8gYSBzdHJpbmcuIFRoaXMgaXMgZ29vZCBh
cyBmYXN0IHBhdGgKKyAgICAgICAgICAgICAgICAvLyBmb3Igb2xkIElFIHdoaWNoIHVuZGVyc3Rh
bmRzIHN0cmluZyBpbmRleGluZyBmb3Igc3RyaW5nCisgICAgICAgICAgICAgICAgLy8gbGl0ZXJh
bHMgb25seSBhbmQgbm90IGZvciBzdHJpbmcgb2JqZWN0LgorICAgICAgICAgICAgICAgIGlmIChj
b2RlIGluc3RhbmNlb2YgU3RyaW5nKSB7CisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSA9IGNv
ZGUudmFsdWVPZigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIHBhdGNoKCk7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHBlZWso
KTsKKyAgICAgICAgICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uRU9GKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGV4dHJhLnRva2VuczsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgdG9rZW4gPSBsZXgoKTsKKyAgICAgICAgICAgIHdoaWxlIChsb29rYWhlYWQudHlwZSAh
PT0gVG9rZW4uRU9GKSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAg
ICAgdG9rZW4gPSBsZXgoKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChsZXhFcnJvcikgewor
ICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGV4dHJhLmVycm9ycykgeworICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEuZXJy
b3JzLnB1c2gobGV4RXJyb3IpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0
byBicmVhayBvbiB0aGUgZmlyc3QgZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRv
IGF2b2lkIGluZmluaXRlIGxvb3BzLgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJv
dyBsZXhFcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZmlsdGVyVG9rZW5Mb2NhdGlvbigpOworICAgICAg
ICAgICAgdG9rZW5zID0gZXh0cmEudG9rZW5zOworICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRy
YS5jb21tZW50cyAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgICAgICBmaWx0ZXJDb21t
ZW50TG9jYXRpb24oKTsKKyAgICAgICAgICAgICAgICB0b2tlbnMuY29tbWVudHMgPSBleHRyYS5j
b21tZW50czsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmEuZXJy
b3JzICE9PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAgICAgIHRva2Vucy5lcnJvcnMgPSBl
eHRyYS5lcnJvcnM7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAg
ICAgICAgIHRocm93IGU7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICB1bnBhdGNo
KCk7CisgICAgICAgICAgICBleHRyYSA9IHt9OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0
b2tlbnM7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2UoY29kZSwgb3B0aW9ucykgeworICAg
ICAgICB2YXIgcHJvZ3JhbSwgdG9TdHJpbmc7CisKKyAgICAgICAgdG9TdHJpbmcgPSBTdHJpbmc7
CisgICAgICAgIGlmICh0eXBlb2YgY29kZSAhPT0gJ3N0cmluZycgJiYgIShjb2RlIGluc3RhbmNl
b2YgU3RyaW5nKSkgeworICAgICAgICAgICAgY29kZSA9IHRvU3RyaW5nKGNvZGUpOworICAgICAg
ICB9CisKKyAgICAgICAgZGVsZWdhdGUgPSBTeW50YXhUcmVlRGVsZWdhdGU7CisgICAgICAgIHNv
dXJjZSA9IGNvZGU7CisgICAgICAgIGluZGV4ID0gMDsKKyAgICAgICAgbGluZU51bWJlciA9IChz
b3VyY2UubGVuZ3RoID4gMCkgPyAxIDogMDsKKyAgICAgICAgbGluZVN0YXJ0ID0gMDsKKyAgICAg
ICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDsKKyAgICAgICAgbG9va2FoZWFkID0gbnVsbDsKKyAg
ICAgICAgc3RhdGUgPSB7CisgICAgICAgICAgICBhbGxvd0luOiB0cnVlLAorICAgICAgICAgICAg
bGFiZWxTZXQ6IHt9LAorICAgICAgICAgICAgcGFyZW50aGVzaXplZENvdW50OiAwLAorICAgICAg
ICAgICAgaW5GdW5jdGlvbkJvZHk6IGZhbHNlLAorICAgICAgICAgICAgaW5JdGVyYXRpb246IGZh
bHNlLAorICAgICAgICAgICAgaW5Td2l0Y2g6IGZhbHNlLAorICAgICAgICAgICAgeWllbGRBbGxv
d2VkOiBmYWxzZSwKKyAgICAgICAgICAgIHlpZWxkRm91bmQ6IGZhbHNlCisgICAgICAgIH07CisK
KyAgICAgICAgZXh0cmEgPSB7fTsKKyAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAndW5k
ZWZpbmVkJykgeworICAgICAgICAgICAgZXh0cmEucmFuZ2UgPSAodHlwZW9mIG9wdGlvbnMucmFu
Z2UgPT09ICdib29sZWFuJykgJiYgb3B0aW9ucy5yYW5nZTsKKyAgICAgICAgICAgIGV4dHJhLmxv
YyA9ICh0eXBlb2Ygb3B0aW9ucy5sb2MgPT09ICdib29sZWFuJykgJiYgb3B0aW9ucy5sb2M7CisK
KyAgICAgICAgICAgIGlmIChleHRyYS5sb2MgJiYgb3B0aW9ucy5zb3VyY2UgIT09IG51bGwgJiYg
b3B0aW9ucy5zb3VyY2UgIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgICAgIGRlbGVnYXRl
ID0gZXh0ZW5kKGRlbGVnYXRlLCB7CisgICAgICAgICAgICAgICAgICAgICdwb3N0UHJvY2Vzcyc6
IGZ1bmN0aW9uIChub2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmxvYy5zb3Vy
Y2UgPSB0b1N0cmluZyhvcHRpb25zLnNvdXJjZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbm9kZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMudG9rZW5zID09
PSAnYm9vbGVhbicgJiYgb3B0aW9ucy50b2tlbnMpIHsKKyAgICAgICAgICAgICAgICBleHRyYS50
b2tlbnMgPSBbXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9u
cy5jb21tZW50ID09PSAnYm9vbGVhbicgJiYgb3B0aW9ucy5jb21tZW50KSB7CisgICAgICAgICAg
ICAgICAgZXh0cmEuY29tbWVudHMgPSBbXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
ICh0eXBlb2Ygb3B0aW9ucy50b2xlcmFudCA9PT0gJ2Jvb2xlYW4nICYmIG9wdGlvbnMudG9sZXJh
bnQpIHsKKyAgICAgICAgICAgICAgICBleHRyYS5lcnJvcnMgPSBbXTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGlmIChsZW5ndGggPiAwKSB7CisgICAgICAgICAgICBpZiAo
dHlwZW9mIHNvdXJjZVswXSA9PT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgICAgICAvLyBU
cnkgZmlyc3QgdG8gY29udmVydCB0byBhIHN0cmluZy4gVGhpcyBpcyBnb29kIGFzIGZhc3QgcGF0
aAorICAgICAgICAgICAgICAgIC8vIGZvciBvbGQgSUUgd2hpY2ggdW5kZXJzdGFuZHMgc3RyaW5n
IGluZGV4aW5nIGZvciBzdHJpbmcKKyAgICAgICAgICAgICAgICAvLyBsaXRlcmFscyBvbmx5IGFu
ZCBub3QgZm9yIHN0cmluZyBvYmplY3QuCisgICAgICAgICAgICAgICAgaWYgKGNvZGUgaW5zdGFu
Y2VvZiBTdHJpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgc291cmNlID0gY29kZS52YWx1ZU9m
KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgcGF0Y2goKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHByb2dyYW0gPSBwYXJzZVBy
b2dyYW0oKTsKKyAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmEuY29tbWVudHMgIT09ICd1bmRl
ZmluZWQnKSB7CisgICAgICAgICAgICAgICAgZmlsdGVyQ29tbWVudExvY2F0aW9uKCk7CisgICAg
ICAgICAgICAgICAgcHJvZ3JhbS5jb21tZW50cyA9IGV4dHJhLmNvbW1lbnRzOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRyYS50b2tlbnMgIT09ICd1bmRlZmluZWQn
KSB7CisgICAgICAgICAgICAgICAgZmlsdGVyVG9rZW5Mb2NhdGlvbigpOworICAgICAgICAgICAg
ICAgIHByb2dyYW0udG9rZW5zID0gZXh0cmEudG9rZW5zOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKHR5cGVvZiBleHRyYS5lcnJvcnMgIT09ICd1bmRlZmluZWQnKSB7CisgICAgICAg
ICAgICAgICAgcHJvZ3JhbS5lcnJvcnMgPSBleHRyYS5lcnJvcnM7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoZXh0cmEucmFuZ2UgfHwgZXh0cmEubG9jKSB7CisgICAgICAgICAgICAg
ICAgcHJvZ3JhbS5ib2R5ID0gZmlsdGVyR3JvdXAocHJvZ3JhbS5ib2R5KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAg
fSBmaW5hbGx5IHsKKyAgICAgICAgICAgIHVucGF0Y2goKTsKKyAgICAgICAgICAgIGV4dHJhID0g
e307CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcHJvZ3JhbTsKKyAgICB9CisKKyAgICAv
LyBTeW5jIHdpdGggcGFja2FnZS5qc29uIGFuZCBjb21wb25lbnQuanNvbi4KKyAgICBleHBvcnRz
LnZlcnNpb24gPSAnMS4xLjAtZGV2LWhhcm1vbnknOworCisgICAgZXhwb3J0cy50b2tlbml6ZSA9
IHRva2VuaXplOworCisgICAgZXhwb3J0cy5wYXJzZSA9IHBhcnNlOworCisgICAgLy8gRGVlcCBj
b3B5LgorICAgIGV4cG9ydHMuU3ludGF4ID0gKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIG5h
bWUsIHR5cGVzID0ge307CisKKyAgICAgICAgaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAn
ZnVuY3Rpb24nKSB7CisgICAgICAgICAgICB0eXBlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7Cisg
ICAgICAgIH0KKworICAgICAgICBmb3IgKG5hbWUgaW4gU3ludGF4KSB7CisgICAgICAgICAgICBp
ZiAoU3ludGF4Lmhhc093blByb3BlcnR5KG5hbWUpKSB7CisgICAgICAgICAgICAgICAgdHlwZXNb
bmFtZV0gPSBTeW50YXhbbmFtZV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBpZiAodHlwZW9mIE9iamVjdC5mcmVlemUgPT09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgICAg
IE9iamVjdC5mcmVlemUodHlwZXMpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHR5cGVz
OworICAgIH0oKSk7CisKK30pKTsKKy8qIHZpbTogc2V0IHN3PTQgdHM9NCBldCB0dz04MCA6ICov
CisKK30pKCkKK30se31dLDU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoK
KyAqIENvcHlyaWdodCAyMDA5LTIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRv
cnMKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFLnR4
dCBvcjoKKyAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2UKKyAq
LworZXhwb3J0cy5Tb3VyY2VNYXBHZW5lcmF0b3IgPSByZXF1aXJlKCcuL3NvdXJjZS1tYXAvc291
cmNlLW1hcC1nZW5lcmF0b3InKS5Tb3VyY2VNYXBHZW5lcmF0b3I7CitleHBvcnRzLlNvdXJjZU1h
cENvbnN1bWVyID0gcmVxdWlyZSgnLi9zb3VyY2UtbWFwL3NvdXJjZS1tYXAtY29uc3VtZXInKS5T
b3VyY2VNYXBDb25zdW1lcjsKK2V4cG9ydHMuU291cmNlTm9kZSA9IHJlcXVpcmUoJy4vc291cmNl
LW1hcC9zb3VyY2Utbm9kZScpLlNvdXJjZU5vZGU7CisKK30seyIuL3NvdXJjZS1tYXAvc291cmNl
LW1hcC1jb25zdW1lciI6MTAsIi4vc291cmNlLW1hcC9zb3VyY2UtbWFwLWdlbmVyYXRvciI6MTEs
Ii4vc291cmNlLW1hcC9zb3VyY2Utbm9kZSI6MTJ9XSw2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVs
ZSxleHBvcnRzKXsKKy8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi8K
Ky8qCisgKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9y
cworICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6
CisgKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlCisgKi8KK2lm
ICh0eXBlb2YgZGVmaW5lICE9PSAnZnVuY3Rpb24nKSB7CisgICAgdmFyIGRlZmluZSA9IHJlcXVp
cmUoJ2FtZGVmaW5lJykobW9kdWxlLCByZXF1aXJlKTsKK30KK2RlZmluZShmdW5jdGlvbiAocmVx
dWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKyAgdmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwn
KTsKKworICAvKioKKyAgICogQSBkYXRhIHN0cnVjdHVyZSB3aGljaCBpcyBhIGNvbWJpbmF0aW9u
IG9mIGFuIGFycmF5IGFuZCBhIHNldC4gQWRkaW5nIGEgbmV3CisgICAqIG1lbWJlciBpcyBPKDEp
LCB0ZXN0aW5nIGZvciBtZW1iZXJzaGlwIGlzIE8oMSksIGFuZCBmaW5kaW5nIHRoZSBpbmRleCBv
ZiBhbgorICAgKiBlbGVtZW50IGlzIE8oMSkuIFJlbW92aW5nIGVsZW1lbnRzIGZyb20gdGhlIHNl
dCBpcyBub3Qgc3VwcG9ydGVkLiBPbmx5CisgICAqIHN0cmluZ3MgYXJlIHN1cHBvcnRlZCBmb3Ig
bWVtYmVyc2hpcC4KKyAgICovCisgIGZ1bmN0aW9uIEFycmF5U2V0KCkgeworICAgIHRoaXMuX2Fy
cmF5ID0gW107CisgICAgdGhpcy5fc2V0ID0ge307CisgIH0KKworICAvKioKKyAgICogU3RhdGlj
IG1ldGhvZCBmb3IgY3JlYXRpbmcgQXJyYXlTZXQgaW5zdGFuY2VzIGZyb20gYW4gZXhpc3Rpbmcg
YXJyYXkuCisgICAqLworICBBcnJheVNldC5mcm9tQXJyYXkgPSBmdW5jdGlvbiBBcnJheVNldF9m
cm9tQXJyYXkoYUFycmF5KSB7CisgICAgdmFyIHNldCA9IG5ldyBBcnJheVNldCgpOworICAgIGZv
ciAodmFyIGkgPSAwLCBsZW4gPSBhQXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKKyAgICAg
IHNldC5hZGQoYUFycmF5W2ldKTsKKyAgICB9CisgICAgcmV0dXJuIHNldDsKKyAgfTsKKworICAv
KioKKyAgICogQWRkIHRoZSBnaXZlbiBzdHJpbmcgdG8gdGhpcyBzZXQuCisgICAqCisgICAqIEBw
YXJhbSBTdHJpbmcgYVN0cgorICAgKi8KKyAgQXJyYXlTZXQucHJvdG90eXBlLmFkZCA9IGZ1bmN0
aW9uIEFycmF5U2V0X2FkZChhU3RyKSB7CisgICAgaWYgKHRoaXMuaGFzKGFTdHIpKSB7CisgICAg
ICAvLyBBbHJlYWR5IGEgbWVtYmVyOyBub3RoaW5nIHRvIGRvLgorICAgICAgcmV0dXJuOworICAg
IH0KKyAgICB2YXIgaWR4ID0gdGhpcy5fYXJyYXkubGVuZ3RoOworICAgIHRoaXMuX2FycmF5LnB1
c2goYVN0cik7CisgICAgdGhpcy5fc2V0W3V0aWwudG9TZXRTdHJpbmcoYVN0cildID0gaWR4Owor
ICB9OworCisgIC8qKgorICAgKiBJcyB0aGUgZ2l2ZW4gc3RyaW5nIGEgbWVtYmVyIG9mIHRoaXMg
c2V0PworICAgKgorICAgKiBAcGFyYW0gU3RyaW5nIGFTdHIKKyAgICovCisgIEFycmF5U2V0LnBy
b3RvdHlwZS5oYXMgPSBmdW5jdGlvbiBBcnJheVNldF9oYXMoYVN0cikgeworICAgIHJldHVybiBP
YmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5fc2V0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC50b1NldFN0cmluZyhh
U3RyKSk7CisgIH07CisKKyAgLyoqCisgICAqIFdoYXQgaXMgdGhlIGluZGV4IG9mIHRoZSBnaXZl
biBzdHJpbmcgaW4gdGhlIGFycmF5PworICAgKgorICAgKiBAcGFyYW0gU3RyaW5nIGFTdHIKKyAg
ICovCisgIEFycmF5U2V0LnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gQXJyYXlTZXRfaW5k
ZXhPZihhU3RyKSB7CisgICAgaWYgKHRoaXMuaGFzKGFTdHIpKSB7CisgICAgICByZXR1cm4gdGhp
cy5fc2V0W3V0aWwudG9TZXRTdHJpbmcoYVN0cildOworICAgIH0KKyAgICB0aHJvdyBuZXcgRXJy
b3IoJyInICsgYVN0ciArICciIGlzIG5vdCBpbiB0aGUgc2V0LicpOworICB9OworCisgIC8qKgor
ICAgKiBXaGF0IGlzIHRoZSBlbGVtZW50IGF0IHRoZSBnaXZlbiBpbmRleD8KKyAgICoKKyAgICog
QHBhcmFtIE51bWJlciBhSWR4CisgICAqLworICBBcnJheVNldC5wcm90b3R5cGUuYXQgPSBmdW5j
dGlvbiBBcnJheVNldF9hdChhSWR4KSB7CisgICAgaWYgKGFJZHggPj0gMCAmJiBhSWR4IDwgdGhp
cy5fYXJyYXkubGVuZ3RoKSB7CisgICAgICByZXR1cm4gdGhpcy5fYXJyYXlbYUlkeF07CisgICAg
fQorICAgIHRocm93IG5ldyBFcnJvcignTm8gZWxlbWVudCBpbmRleGVkIGJ5ICcgKyBhSWR4KTsK
KyAgfTsKKworICAvKioKKyAgICogUmV0dXJucyB0aGUgYXJyYXkgcmVwcmVzZW50YXRpb24gb2Yg
dGhpcyBzZXQgKHdoaWNoIGhhcyB0aGUgcHJvcGVyIGluZGljZXMKKyAgICogaW5kaWNhdGVkIGJ5
IGluZGV4T2YpLiBOb3RlIHRoYXQgdGhpcyBpcyBhIGNvcHkgb2YgdGhlIGludGVybmFsIGFycmF5
IHVzZWQKKyAgICogZm9yIHN0b3JpbmcgdGhlIG1lbWJlcnMgc28gdGhhdCBubyBvbmUgY2FuIG1l
c3Mgd2l0aCBpbnRlcm5hbCBzdGF0ZS4KKyAgICovCisgIEFycmF5U2V0LnByb3RvdHlwZS50b0Fy
cmF5ID0gZnVuY3Rpb24gQXJyYXlTZXRfdG9BcnJheSgpIHsKKyAgICByZXR1cm4gdGhpcy5fYXJy
YXkuc2xpY2UoKTsKKyAgfTsKKworICBleHBvcnRzLkFycmF5U2V0ID0gQXJyYXlTZXQ7CisKK30p
OworCit9LHsiLi91dGlsIjoxMywiYW1kZWZpbmUiOjE0fV0sNzpbZnVuY3Rpb24ocmVxdWlyZSxt
b2R1bGUsZXhwb3J0cyl7CisvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSot
ICovCisvKgorICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmli
dXRvcnMKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNF
IG9yOgorICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZQorICoK
KyAqIEJhc2VkIG9uIHRoZSBCYXNlIDY0IFZMUSBpbXBsZW1lbnRhdGlvbiBpbiBDbG9zdXJlIENv
bXBpbGVyOgorICogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jbG9zdXJlLWNvbXBpbGVyL3Nv
dXJjZS9icm93c2UvdHJ1bmsvc3JjL2NvbS9nb29nbGUvZGVidWdnaW5nL3NvdXJjZW1hcC9CYXNl
NjRWTFEuamF2YQorICoKKyAqIENvcHlyaWdodCAyMDExIFRoZSBDbG9zdXJlIENvbXBpbGVyIEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcK
KyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworaWYgKHR5cGVvZiBkZWZpbmUgIT09ICdmdW5jdGlv
bicpIHsKKyAgICB2YXIgZGVmaW5lID0gcmVxdWlyZSgnYW1kZWZpbmUnKShtb2R1bGUsIHJlcXVp
cmUpOworfQorZGVmaW5lKGZ1bmN0aW9uIChyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKwor
ICB2YXIgYmFzZTY0ID0gcmVxdWlyZSgnLi9iYXNlNjQnKTsKKworICAvLyBBIHNpbmdsZSBiYXNl
IDY0IGRpZ2l0IGNhbiBjb250YWluIDYgYml0cyBvZiBkYXRhLiBGb3IgdGhlIGJhc2UgNjQgdmFy
aWFibGUKKyAgLy8gbGVuZ3RoIHF1YW50aXRpZXMgd2UgdXNlIGluIHRoZSBzb3VyY2UgbWFwIHNw
ZWMsIHRoZSBmaXJzdCBiaXQgaXMgdGhlIHNpZ24sCisgIC8vIHRoZSBuZXh0IGZvdXIgYml0cyBh
cmUgdGhlIGFjdHVhbCB2YWx1ZSwgYW5kIHRoZSA2dGggYml0IGlzIHRoZQorICAvLyBjb250aW51
YXRpb24gYml0LiBUaGUgY29udGludWF0aW9uIGJpdCB0ZWxscyB1cyB3aGV0aGVyIHRoZXJlIGFy
ZSBtb3JlCisgIC8vIGRpZ2l0cyBpbiB0aGlzIHZhbHVlIGZvbGxvd2luZyB0aGlzIGRpZ2l0Lgor
ICAvLworICAvLyAgIENvbnRpbnVhdGlvbgorICAvLyAgIHwgICAgU2lnbgorICAvLyAgIHwgICAg
fAorICAvLyAgIFYgICAgVgorICAvLyAgIDEwMTAxMQorCisgIHZhciBWTFFfQkFTRV9TSElGVCA9
IDU7CisKKyAgLy8gYmluYXJ5OiAxMDAwMDAKKyAgdmFyIFZMUV9CQVNFID0gMSA8PCBWTFFfQkFT
RV9TSElGVDsKKworICAvLyBiaW5hcnk6IDAxMTExMQorICB2YXIgVkxRX0JBU0VfTUFTSyA9IFZM
UV9CQVNFIC0gMTsKKworICAvLyBiaW5hcnk6IDEwMDAwMAorICB2YXIgVkxRX0NPTlRJTlVBVElP
Tl9CSVQgPSBWTFFfQkFTRTsKKworICAvKioKKyAgICogQ29udmVydHMgZnJvbSBhIHR3by1jb21w
bGVtZW50IHZhbHVlIHRvIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzCisgICAqIGlzIHBs
YWNlZCBpbiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0LiAgRm9yIGV4YW1wbGUsIGFzIGRlY2lt
YWxzOgorICAgKiAgIDEgYmVjb21lcyAyICgxMCBiaW5hcnkpLCAtMSBiZWNvbWVzIDMgKDExIGJp
bmFyeSkKKyAgICogICAyIGJlY29tZXMgNCAoMTAwIGJpbmFyeSksIC0yIGJlY29tZXMgNSAoMTAx
IGJpbmFyeSkKKyAgICovCisgIGZ1bmN0aW9uIHRvVkxRU2lnbmVkKGFWYWx1ZSkgeworICAgIHJl
dHVybiBhVmFsdWUgPCAwCisgICAgICA/ICgoLWFWYWx1ZSkgPDwgMSkgKyAxCisgICAgICA6IChh
VmFsdWUgPDwgMSkgKyAwOworICB9CisKKyAgLyoqCisgICAqIENvbnZlcnRzIHRvIGEgdHdvLWNv
bXBsZW1lbnQgdmFsdWUgZnJvbSBhIHZhbHVlIHdoZXJlIHRoZSBzaWduIGJpdCBpcworICAgKiBp
cyBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBk
ZWNpbWFsczoKKyAgICogICAyICgxMCBiaW5hcnkpIGJlY29tZXMgMSwgMyAoMTEgYmluYXJ5KSBi
ZWNvbWVzIC0xCisgICAqICAgNCAoMTAwIGJpbmFyeSkgYmVjb21lcyAyLCA1ICgxMDEgYmluYXJ5
KSBiZWNvbWVzIC0yCisgICAqLworICBmdW5jdGlvbiBmcm9tVkxRU2lnbmVkKGFWYWx1ZSkgewor
ICAgIHZhciBpc05lZ2F0aXZlID0gKGFWYWx1ZSAmIDEpID09PSAxOworICAgIHZhciBzaGlmdGVk
ID0gYVZhbHVlID4+IDE7CisgICAgcmV0dXJuIGlzTmVnYXRpdmUKKyAgICAgID8gLXNoaWZ0ZWQK
KyAgICAgIDogc2hpZnRlZDsKKyAgfQorCisgIC8qKgorICAgKiBSZXR1cm5zIHRoZSBiYXNlIDY0
IFZMUSBlbmNvZGVkIHZhbHVlLgorICAgKi8KKyAgZXhwb3J0cy5lbmNvZGUgPSBmdW5jdGlvbiBi
YXNlNjRWTFFfZW5jb2RlKGFWYWx1ZSkgeworICAgIHZhciBlbmNvZGVkID0gIiI7CisgICAgdmFy
IGRpZ2l0OworCisgICAgdmFyIHZscSA9IHRvVkxRU2lnbmVkKGFWYWx1ZSk7CisKKyAgICBkbyB7
CisgICAgICBkaWdpdCA9IHZscSAmIFZMUV9CQVNFX01BU0s7CisgICAgICB2bHEgPj4+PSBWTFFf
QkFTRV9TSElGVDsKKyAgICAgIGlmICh2bHEgPiAwKSB7CisgICAgICAgIC8vIFRoZXJlIGFyZSBz
dGlsbCBtb3JlIGRpZ2l0cyBpbiB0aGlzIHZhbHVlLCBzbyB3ZSBtdXN0IG1ha2Ugc3VyZSB0aGUK
KyAgICAgICAgLy8gY29udGludWF0aW9uIGJpdCBpcyBtYXJrZWQuCisgICAgICAgIGRpZ2l0IHw9
IFZMUV9DT05USU5VQVRJT05fQklUOworICAgICAgfQorICAgICAgZW5jb2RlZCArPSBiYXNlNjQu
ZW5jb2RlKGRpZ2l0KTsKKyAgICB9IHdoaWxlICh2bHEgPiAwKTsKKworICAgIHJldHVybiBlbmNv
ZGVkOworICB9OworCisgIC8qKgorICAgKiBEZWNvZGVzIHRoZSBuZXh0IGJhc2UgNjQgVkxRIHZh
bHVlIGZyb20gdGhlIGdpdmVuIHN0cmluZyBhbmQgcmV0dXJucyB0aGUKKyAgICogdmFsdWUgYW5k
IHRoZSByZXN0IG9mIHRoZSBzdHJpbmcuCisgICAqLworICBleHBvcnRzLmRlY29kZSA9IGZ1bmN0
aW9uIGJhc2U2NFZMUV9kZWNvZGUoYVN0cikgeworICAgIHZhciBpID0gMDsKKyAgICB2YXIgc3Ry
TGVuID0gYVN0ci5sZW5ndGg7CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgdmFyIHNoaWZ0ID0g
MDsKKyAgICB2YXIgY29udGludWF0aW9uLCBkaWdpdDsKKworICAgIGRvIHsKKyAgICAgIGlmIChp
ID49IHN0ckxlbikgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIG1vcmUgZGln
aXRzIGluIGJhc2UgNjQgVkxRIHZhbHVlLiIpOworICAgICAgfQorICAgICAgZGlnaXQgPSBiYXNl
NjQuZGVjb2RlKGFTdHIuY2hhckF0KGkrKykpOworICAgICAgY29udGludWF0aW9uID0gISEoZGln
aXQgJiBWTFFfQ09OVElOVUFUSU9OX0JJVCk7CisgICAgICBkaWdpdCAmPSBWTFFfQkFTRV9NQVNL
OworICAgICAgcmVzdWx0ID0gcmVzdWx0ICsgKGRpZ2l0IDw8IHNoaWZ0KTsKKyAgICAgIHNoaWZ0
ICs9IFZMUV9CQVNFX1NISUZUOworICAgIH0gd2hpbGUgKGNvbnRpbnVhdGlvbik7CisKKyAgICBy
ZXR1cm4geworICAgICAgdmFsdWU6IGZyb21WTFFTaWduZWQocmVzdWx0KSwKKyAgICAgIHJlc3Q6
IGFTdHIuc2xpY2UoaSkKKyAgICB9OworICB9OworCit9KTsKKworfSx7Ii4vYmFzZTY0Ijo4LCJh
bWRlZmluZSI6MTR9XSw4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qIC0q
LSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi8KKy8qCisgKiBDb3B5cmlnaHQg
MjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9ycworICogTGljZW5zZWQgdW5k
ZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6CisgKiBodHRwOi8vb3BlbnNv
dXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlCisgKi8KK2lmICh0eXBlb2YgZGVmaW5lICE9
PSAnZnVuY3Rpb24nKSB7CisgICAgdmFyIGRlZmluZSA9IHJlcXVpcmUoJ2FtZGVmaW5lJykobW9k
dWxlLCByZXF1aXJlKTsKK30KK2RlZmluZShmdW5jdGlvbiAocmVxdWlyZSwgZXhwb3J0cywgbW9k
dWxlKSB7CisKKyAgdmFyIGNoYXJUb0ludE1hcCA9IHt9OworICB2YXIgaW50VG9DaGFyTWFwID0g
e307CisKKyAgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1
dnd4eXowMTIzNDU2Nzg5Ky8nCisgICAgLnNwbGl0KCcnKQorICAgIC5mb3JFYWNoKGZ1bmN0aW9u
IChjaCwgaW5kZXgpIHsKKyAgICAgIGNoYXJUb0ludE1hcFtjaF0gPSBpbmRleDsKKyAgICAgIGlu
dFRvQ2hhck1hcFtpbmRleF0gPSBjaDsKKyAgICB9KTsKKworICAvKioKKyAgICogRW5jb2RlIGFu
IGludGVnZXIgaW4gdGhlIHJhbmdlIG9mIDAgdG8gNjMgdG8gYSBzaW5nbGUgYmFzZSA2NCBkaWdp
dC4KKyAgICovCisgIGV4cG9ydHMuZW5jb2RlID0gZnVuY3Rpb24gYmFzZTY0X2VuY29kZShhTnVt
YmVyKSB7CisgICAgaWYgKGFOdW1iZXIgaW4gaW50VG9DaGFyTWFwKSB7CisgICAgICByZXR1cm4g
aW50VG9DaGFyTWFwW2FOdW1iZXJdOworICAgIH0KKyAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJN
dXN0IGJlIGJldHdlZW4gMCBhbmQgNjM6ICIgKyBhTnVtYmVyKTsKKyAgfTsKKworICAvKioKKyAg
ICogRGVjb2RlIGEgc2luZ2xlIGJhc2UgNjQgZGlnaXQgdG8gYW4gaW50ZWdlci4KKyAgICovCisg
IGV4cG9ydHMuZGVjb2RlID0gZnVuY3Rpb24gYmFzZTY0X2RlY29kZShhQ2hhcikgeworICAgIGlm
IChhQ2hhciBpbiBjaGFyVG9JbnRNYXApIHsKKyAgICAgIHJldHVybiBjaGFyVG9JbnRNYXBbYUNo
YXJdOworICAgIH0KKyAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJOb3QgYSB2YWxpZCBiYXNlIDY0
IGRpZ2l0OiAiICsgYUNoYXIpOworICB9OworCit9KTsKKworfSx7ImFtZGVmaW5lIjoxNH1dLDk6
W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyogLSotIE1vZGU6IGpzOyBqcy1p
bmRlbnQtbGV2ZWw6IDI7IC0qLSAqLworLyoKKyAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91
bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBs
aWNlbnNlLiBTZWUgTElDRU5TRSBvcjoKKyAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNl
cy9CU0QtMy1DbGF1c2UKKyAqLworaWYgKHR5cGVvZiBkZWZpbmUgIT09ICdmdW5jdGlvbicpIHsK
KyAgICB2YXIgZGVmaW5lID0gcmVxdWlyZSgnYW1kZWZpbmUnKShtb2R1bGUsIHJlcXVpcmUpOwor
fQorZGVmaW5lKGZ1bmN0aW9uIChyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworICAvKioK
KyAgICogUmVjdXJzaXZlIGltcGxlbWVudGF0aW9uIG9mIGJpbmFyeSBzZWFyY2guCisgICAqCisg
ICAqIEBwYXJhbSBhTG93IEluZGljZXMgaGVyZSBhbmQgbG93ZXIgZG8gbm90IGNvbnRhaW4gdGhl
IG5lZWRsZS4KKyAgICogQHBhcmFtIGFIaWdoIEluZGljZXMgaGVyZSBhbmQgaGlnaGVyIGRvIG5v
dCBjb250YWluIHRoZSBuZWVkbGUuCisgICAqIEBwYXJhbSBhTmVlZGxlIFRoZSBlbGVtZW50IGJl
aW5nIHNlYXJjaGVkIGZvci4KKyAgICogQHBhcmFtIGFIYXlzdGFjayBUaGUgbm9uLWVtcHR5IGFy
cmF5IGJlaW5nIHNlYXJjaGVkLgorICAgKiBAcGFyYW0gYUNvbXBhcmUgRnVuY3Rpb24gd2hpY2gg
dGFrZXMgdHdvIGVsZW1lbnRzIGFuZCByZXR1cm5zIC0xLCAwLCBvciAxLgorICAgKi8KKyAgZnVu
Y3Rpb24gcmVjdXJzaXZlU2VhcmNoKGFMb3csIGFIaWdoLCBhTmVlZGxlLCBhSGF5c3RhY2ssIGFD
b21wYXJlKSB7CisgICAgLy8gVGhpcyBmdW5jdGlvbiB0ZXJtaW5hdGVzIHdoZW4gb25lIG9mIHRo
ZSBmb2xsb3dpbmcgaXMgdHJ1ZToKKyAgICAvLworICAgIC8vICAgMS4gV2UgZmluZCB0aGUgZXhh
Y3QgZWxlbWVudCB3ZSBhcmUgbG9va2luZyBmb3IuCisgICAgLy8KKyAgICAvLyAgIDIuIFdlIGRp
ZCBub3QgZmluZCB0aGUgZXhhY3QgZWxlbWVudCwgYnV0IHdlIGNhbiByZXR1cm4gdGhlIG5leHQK
KyAgICAvLyAgICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIGxlc3MgdGhhbiB0aGF0IGVsZW1l
bnQuCisgICAgLy8KKyAgICAvLyAgIDMuIFdlIGRpZCBub3QgZmluZCB0aGUgZXhhY3QgZWxlbWVu
dCwgYW5kIHRoZXJlIGlzIG5vIG5leHQtY2xvc2VzdAorICAgIC8vICAgICAgZWxlbWVudCB3aGlj
aCBpcyBsZXNzIHRoYW4gdGhlIG9uZSB3ZSBhcmUgc2VhcmNoaW5nIGZvciwgc28gd2UKKyAgICAv
LyAgICAgIHJldHVybiBudWxsLgorICAgIHZhciBtaWQgPSBNYXRoLmZsb29yKChhSGlnaCAtIGFM
b3cpIC8gMikgKyBhTG93OworICAgIHZhciBjbXAgPSBhQ29tcGFyZShhTmVlZGxlLCBhSGF5c3Rh
Y2tbbWlkXSk7CisgICAgaWYgKGNtcCA9PT0gMCkgeworICAgICAgLy8gRm91bmQgdGhlIGVsZW1l
bnQgd2UgYXJlIGxvb2tpbmcgZm9yLgorICAgICAgcmV0dXJuIGFIYXlzdGFja1ttaWRdOworICAg
IH0KKyAgICBlbHNlIGlmIChjbXAgPiAwKSB7CisgICAgICAvLyBhSGF5c3RhY2tbbWlkXSBpcyBn
cmVhdGVyIHRoYW4gb3VyIG5lZWRsZS4KKyAgICAgIGlmIChhSGlnaCAtIG1pZCA+IDEpIHsKKyAg
ICAgICAgLy8gVGhlIGVsZW1lbnQgaXMgaW4gdGhlIHVwcGVyIGhhbGYuCisgICAgICAgIHJldHVy
biByZWN1cnNpdmVTZWFyY2gobWlkLCBhSGlnaCwgYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFy
ZSk7CisgICAgICB9CisgICAgICAvLyBXZSBkaWQgbm90IGZpbmQgYW4gZXhhY3QgbWF0Y2gsIHJl
dHVybiB0aGUgbmV4dCBjbG9zZXN0IG9uZQorICAgICAgLy8gKHRlcm1pbmF0aW9uIGNhc2UgMiku
CisgICAgICByZXR1cm4gYUhheXN0YWNrW21pZF07CisgICAgfQorICAgIGVsc2UgeworICAgICAg
Ly8gYUhheXN0YWNrW21pZF0gaXMgbGVzcyB0aGFuIG91ciBuZWVkbGUuCisgICAgICBpZiAobWlk
IC0gYUxvdyA+IDEpIHsKKyAgICAgICAgLy8gVGhlIGVsZW1lbnQgaXMgaW4gdGhlIGxvd2VyIGhh
bGYuCisgICAgICAgIHJldHVybiByZWN1cnNpdmVTZWFyY2goYUxvdywgbWlkLCBhTmVlZGxlLCBh
SGF5c3RhY2ssIGFDb21wYXJlKTsKKyAgICAgIH0KKyAgICAgIC8vIFRoZSBleGFjdCBuZWVkbGUg
ZWxlbWVudCB3YXMgbm90IGZvdW5kIGluIHRoaXMgaGF5c3RhY2suIERldGVybWluZSBpZgorICAg
ICAgLy8gd2UgYXJlIGluIHRlcm1pbmF0aW9uIGNhc2UgKDIpIG9yICgzKSBhbmQgcmV0dXJuIHRo
ZSBhcHByb3ByaWF0ZSB0aGluZy4KKyAgICAgIHJldHVybiBhTG93IDwgMAorICAgICAgICA/IG51
bGwKKyAgICAgICAgOiBhSGF5c3RhY2tbYUxvd107CisgICAgfQorICB9CisKKyAgLyoqCisgICAq
IFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgYmluYXJ5IHNlYXJjaCB3aGljaCB3aWxsIGFs
d2F5cyB0cnkgYW5kIHJldHVybgorICAgKiB0aGUgbmV4dCBsb3dlc3QgdmFsdWUgY2hlY2tlZCBp
ZiB0aGVyZSBpcyBubyBleGFjdCBoaXQuIFRoaXMgaXMgYmVjYXVzZQorICAgKiBtYXBwaW5ncyBi
ZXR3ZWVuIG9yaWdpbmFsIGFuZCBnZW5lcmF0ZWQgbGluZS9jb2wgcGFpcnMgYXJlIHNpbmdsZSBw
b2ludHMsCisgICAqIGFuZCB0aGVyZSBpcyBhbiBpbXBsaWNpdCByZWdpb24gYmV0d2VlbiBlYWNo
IG9mIHRoZW0sIHNvIGEgbWlzcyBqdXN0IG1lYW5zCisgICAqIHRoYXQgeW91IGFyZW4ndCBvbiB0
aGUgdmVyeSBzdGFydCBvZiBhIHJlZ2lvbi4KKyAgICoKKyAgICogQHBhcmFtIGFOZWVkbGUgVGhl
IGVsZW1lbnQgeW91IGFyZSBsb29raW5nIGZvci4KKyAgICogQHBhcmFtIGFIYXlzdGFjayBUaGUg
YXJyYXkgdGhhdCBpcyBiZWluZyBzZWFyY2hlZC4KKyAgICogQHBhcmFtIGFDb21wYXJlIEEgZnVu
Y3Rpb24gd2hpY2ggdGFrZXMgdGhlIG5lZWRsZSBhbmQgYW4gZWxlbWVudCBpbiB0aGUKKyAgICog
ICAgIGFycmF5IGFuZCByZXR1cm5zIC0xLCAwLCBvciAxIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRo
ZSBuZWVkbGUgaXMgbGVzcworICAgKiAgICAgdGhhbiwgZXF1YWwgdG8sIG9yIGdyZWF0ZXIgdGhh
biB0aGUgZWxlbWVudCwgcmVzcGVjdGl2ZWx5LgorICAgKi8KKyAgZXhwb3J0cy5zZWFyY2ggPSBm
dW5jdGlvbiBzZWFyY2goYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSkgeworICAgIHJldHVy
biBhSGF5c3RhY2subGVuZ3RoID4gMAorICAgICAgPyByZWN1cnNpdmVTZWFyY2goLTEsIGFIYXlz
dGFjay5sZW5ndGgsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUpCisgICAgICA6IG51bGw7
CisgIH07CisKK30pOworCit9LHsiYW1kZWZpbmUiOjE0fV0sMTA6W2Z1bmN0aW9uKHJlcXVpcmUs
bW9kdWxlLGV4cG9ydHMpeworLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0q
LSAqLworLyoKKyAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJp
YnV0b3JzCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5T
RSBvcjoKKyAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2UKKyAq
LworaWYgKHR5cGVvZiBkZWZpbmUgIT09ICdmdW5jdGlvbicpIHsKKyAgICB2YXIgZGVmaW5lID0g
cmVxdWlyZSgnYW1kZWZpbmUnKShtb2R1bGUsIHJlcXVpcmUpOworfQorZGVmaW5lKGZ1bmN0aW9u
IChyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworICB2YXIgdXRpbCA9IHJlcXVpcmUoJy4v
dXRpbCcpOworICB2YXIgYmluYXJ5U2VhcmNoID0gcmVxdWlyZSgnLi9iaW5hcnktc2VhcmNoJyk7
CisgIHZhciBBcnJheVNldCA9IHJlcXVpcmUoJy4vYXJyYXktc2V0JykuQXJyYXlTZXQ7CisgIHZh
ciBiYXNlNjRWTFEgPSByZXF1aXJlKCcuL2Jhc2U2NC12bHEnKTsKKworICAvKioKKyAgICogQSBT
b3VyY2VNYXBDb25zdW1lciBpbnN0YW5jZSByZXByZXNlbnRzIGEgcGFyc2VkIHNvdXJjZSBtYXAg
d2hpY2ggd2UgY2FuCisgICAqIHF1ZXJ5IGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3JpZ2lu
YWwgZmlsZSBwb3NpdGlvbnMgYnkgZ2l2aW5nIGl0IGEgZmlsZQorICAgKiBwb3NpdGlvbiBpbiB0
aGUgZ2VuZXJhdGVkIHNvdXJjZS4KKyAgICoKKyAgICogVGhlIG9ubHkgcGFyYW1ldGVyIGlzIHRo
ZSByYXcgc291cmNlIG1hcCAoZWl0aGVyIGFzIGEgSlNPTiBzdHJpbmcsIG9yCisgICAqIGFscmVh
ZHkgcGFyc2VkIHRvIGFuIG9iamVjdCkuIEFjY29yZGluZyB0byB0aGUgc3BlYywgc291cmNlIG1h
cHMgaGF2ZSB0aGUKKyAgICogZm9sbG93aW5nIGF0dHJpYnV0ZXM6CisgICAqCisgICAqICAgLSB2
ZXJzaW9uOiBXaGljaCB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwIHNwZWMgdGhpcyBtYXAgaXMg
Zm9sbG93aW5nLgorICAgKiAgIC0gc291cmNlczogQW4gYXJyYXkgb2YgVVJMcyB0byB0aGUgb3Jp
Z2luYWwgc291cmNlIGZpbGVzLgorICAgKiAgIC0gbmFtZXM6IEFuIGFycmF5IG9mIGlkZW50aWZp
ZXJzIHdoaWNoIGNhbiBiZSByZWZlcnJlbmNlZCBieSBpbmRpdmlkdWFsIG1hcHBpbmdzLgorICAg
KiAgIC0gc291cmNlUm9vdDogT3B0aW9uYWwuIFRoZSBVUkwgcm9vdCBmcm9tIHdoaWNoIGFsbCBz
b3VyY2VzIGFyZSByZWxhdGl2ZS4KKyAgICogICAtIHNvdXJjZXNDb250ZW50OiBPcHRpb25hbC4g
QW4gYXJyYXkgb2YgY29udGVudHMgb2YgdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlcy4KKyAgICog
ICAtIG1hcHBpbmdzOiBBIHN0cmluZyBvZiBiYXNlNjQgVkxRcyB3aGljaCBjb250YWluIHRoZSBh
Y3R1YWwgbWFwcGluZ3MuCisgICAqICAgLSBmaWxlOiBUaGUgZ2VuZXJhdGVkIGZpbGUgdGhpcyBz
b3VyY2UgbWFwIGlzIGFzc29jaWF0ZWQgd2l0aC4KKyAgICoKKyAgICogSGVyZSBpcyBhbiBleGFt
cGxlIHNvdXJjZSBtYXAsIHRha2VuIGZyb20gdGhlIHNvdXJjZSBtYXAgc3BlY1swXToKKyAgICoK
KyAgICogICAgIHsKKyAgICogICAgICAgdmVyc2lvbiA6IDMsCisgICAqICAgICAgIGZpbGU6ICJv
dXQuanMiLAorICAgKiAgICAgICBzb3VyY2VSb290IDogIiIsCisgICAqICAgICAgIHNvdXJjZXM6
IFsiZm9vLmpzIiwgImJhci5qcyJdLAorICAgKiAgICAgICBuYW1lczogWyJzcmMiLCAibWFwcyIs
ICJhcmUiLCAiZnVuIl0sCisgICAqICAgICAgIG1hcHBpbmdzOiAiQUEsQUI7O0FCQ0RFOyIKKyAg
ICogICAgIH0KKyAgICoKKyAgICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVu
dC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQ/cGxp
PTEjCisgICAqLworICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcihhU291cmNlTWFwKSB7Cisg
ICAgdmFyIHNvdXJjZU1hcCA9IGFTb3VyY2VNYXA7CisgICAgaWYgKHR5cGVvZiBhU291cmNlTWFw
ID09PSAnc3RyaW5nJykgeworICAgICAgc291cmNlTWFwID0gSlNPTi5wYXJzZShhU291cmNlTWFw
LnJlcGxhY2UoL15cKVxdXH0nLywgJycpKTsKKyAgICB9CisKKyAgICB2YXIgdmVyc2lvbiA9IHV0
aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTsKKyAgICB2YXIgc291cmNlcyA9IHV0aWwu
Z2V0QXJnKHNvdXJjZU1hcCwgJ3NvdXJjZXMnKTsKKyAgICB2YXIgbmFtZXMgPSB1dGlsLmdldEFy
Zyhzb3VyY2VNYXAsICduYW1lcycpOworICAgIHZhciBzb3VyY2VSb290ID0gdXRpbC5nZXRBcmco
c291cmNlTWFwLCAnc291cmNlUm9vdCcsIG51bGwpOworICAgIHZhciBzb3VyY2VzQ29udGVudCA9
IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3NvdXJjZXNDb250ZW50JywgbnVsbCk7CisgICAgdmFy
IG1hcHBpbmdzID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnbWFwcGluZ3MnKTsKKyAgICB2YXIg
ZmlsZSA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ2ZpbGUnKTsKKworICAgIGlmICh2ZXJzaW9u
ICE9PSB0aGlzLl92ZXJzaW9uKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVk
IHZlcnNpb246ICcgKyB2ZXJzaW9uKTsKKyAgICB9CisKKyAgICB0aGlzLl9uYW1lcyA9IEFycmF5
U2V0LmZyb21BcnJheShuYW1lcyk7CisgICAgdGhpcy5fc291cmNlcyA9IEFycmF5U2V0LmZyb21B
cnJheShzb3VyY2VzKTsKKyAgICB0aGlzLnNvdXJjZVJvb3QgPSBzb3VyY2VSb290OworICAgIHRo
aXMuc291cmNlc0NvbnRlbnQgPSBzb3VyY2VzQ29udGVudDsKKyAgICB0aGlzLmZpbGUgPSBmaWxl
OworCisgICAgLy8gYHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmQgYHRoaXMuX29yaWdpbmFs
TWFwcGluZ3NgIGhvbGQgdGhlIHBhcnNlZAorICAgIC8vIG1hcHBpbmcgY29vcmRpbmF0ZXMgZnJv
bSB0aGUgc291cmNlIG1hcCdzICJtYXBwaW5ncyIgYXR0cmlidXRlLiBFYWNoCisgICAgLy8gb2Jq
ZWN0IGluIHRoZSBhcnJheSBpcyBvZiB0aGUgZm9ybQorICAgIC8vCisgICAgLy8gICAgIHsKKyAg
ICAvLyAgICAgICBnZW5lcmF0ZWRMaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRl
ZCBjb2RlLAorICAgIC8vICAgICAgIGdlbmVyYXRlZENvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIg
aW4gdGhlIGdlbmVyYXRlZCBjb2RlLAorICAgIC8vICAgICAgIHNvdXJjZTogVGhlIHBhdGggdG8g
dGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlIHRoYXQgZ2VuZXJhdGVkIHRoaXMKKyAgICAvLyAgICAg
ICAgICAgICAgIGNodW5rIG9mIGNvZGUsCisgICAgLy8gICAgICAgb3JpZ2luYWxMaW5lOiBUaGUg
bGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSB0aGF0CisgICAgLy8gICAgICAgICAg
ICAgICAgICAgICBjb3JyZXNwb25kcyB0byB0aGlzIGNodW5rIG9mIGdlbmVyYXRlZCBjb2RlLAor
ICAgIC8vICAgICAgIG9yaWdpbmFsQ29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3Jp
Z2luYWwgc291cmNlIHRoYXQKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9u
ZHMgdG8gdGhpcyBjaHVuayBvZiBnZW5lcmF0ZWQgY29kZSwKKyAgICAvLyAgICAgICBuYW1lOiBU
aGUgbmFtZSBvZiB0aGUgb3JpZ2luYWwgc3ltYm9sIHdoaWNoIGdlbmVyYXRlZCB0aGlzIGNodW5r
IG9mCisgICAgLy8gICAgICAgICAgICAgY29kZS4KKyAgICAvLyAgICAgfQorICAgIC8vCisgICAg
Ly8gQWxsIHByb3BlcnRpZXMgZXhjZXB0IGZvciBgZ2VuZXJhdGVkTGluZWAgYW5kIGBnZW5lcmF0
ZWRDb2x1bW5gIGNhbiBiZQorICAgIC8vIGBudWxsYC4KKyAgICAvLworICAgIC8vIGB0aGlzLl9n
ZW5lcmF0ZWRNYXBwaW5nc2AgaXMgb3JkZXJlZCBieSB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucy4K
KyAgICAvLworICAgIC8vIGB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzYCBpcyBvcmRlcmVkIGJ5IHRo
ZSBvcmlnaW5hbCBwb3NpdGlvbnMuCisgICAgdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MgPSBbXTsK
KyAgICB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzID0gW107CisgICAgdGhpcy5fcGFyc2VNYXBwaW5n
cyhtYXBwaW5ncywgc291cmNlUm9vdCk7CisgIH0KKworICAvKioKKyAgICogVGhlIHZlcnNpb24g
b2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLgorICAgKi8K
KyAgU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl92ZXJzaW9uID0gMzsKKworICAvKioKKyAg
ICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy4KKyAgICovCisgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdzb3VyY2VzJywgeworICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZXMudG9BcnJheSgpLm1h
cChmdW5jdGlvbiAocykgeworICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VSb290ID8gdXRpbC5q
b2luKHRoaXMuc291cmNlUm9vdCwgcykgOiBzOworICAgICAgfSwgdGhpcyk7CisgICAgfQorICB9
KTsKKworICAvKioKKyAgICogUGFyc2UgdGhlIG1hcHBpbmdzIGluIGEgc3RyaW5nIGluIHRvIGEg
ZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggd2UgY2FuIGVhc2lseQorICAgKiBxdWVyeSAoYW4gb3JkZXJl
ZCBsaXN0IGluIHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzKS4KKyAgICovCisgIFNvdXJjZU1hcENv
bnN1bWVyLnByb3RvdHlwZS5fcGFyc2VNYXBwaW5ncyA9CisgICAgZnVuY3Rpb24gU291cmNlTWFw
Q29uc3VtZXJfcGFyc2VNYXBwaW5ncyhhU3RyLCBhU291cmNlUm9vdCkgeworICAgICAgdmFyIGdl
bmVyYXRlZExpbmUgPSAxOworICAgICAgdmFyIHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uID0gMDsK
KyAgICAgIHZhciBwcmV2aW91c09yaWdpbmFsTGluZSA9IDA7CisgICAgICB2YXIgcHJldmlvdXNP
cmlnaW5hbENvbHVtbiA9IDA7CisgICAgICB2YXIgcHJldmlvdXNTb3VyY2UgPSAwOworICAgICAg
dmFyIHByZXZpb3VzTmFtZSA9IDA7CisgICAgICB2YXIgbWFwcGluZ1NlcGFyYXRvciA9IC9eWyw7
XS87CisgICAgICB2YXIgc3RyID0gYVN0cjsKKyAgICAgIHZhciBtYXBwaW5nOworICAgICAgdmFy
IHRlbXA7CisKKyAgICAgIHdoaWxlIChzdHIubGVuZ3RoID4gMCkgeworICAgICAgICBpZiAoc3Ry
LmNoYXJBdCgwKSA9PT0gJzsnKSB7CisgICAgICAgICAgZ2VuZXJhdGVkTGluZSsrOworICAgICAg
ICAgIHN0ciA9IHN0ci5zbGljZSgxKTsKKyAgICAgICAgICBwcmV2aW91c0dlbmVyYXRlZENvbHVt
biA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc3RyLmNoYXJBdCgwKSA9PT0gJywn
KSB7CisgICAgICAgICAgc3RyID0gc3RyLnNsaWNlKDEpOworICAgICAgICB9CisgICAgICAgIGVs
c2UgeworICAgICAgICAgIG1hcHBpbmcgPSB7fTsKKyAgICAgICAgICBtYXBwaW5nLmdlbmVyYXRl
ZExpbmUgPSBnZW5lcmF0ZWRMaW5lOworCisgICAgICAgICAgLy8gR2VuZXJhdGVkIGNvbHVtbi4K
KyAgICAgICAgICB0ZW1wID0gYmFzZTY0VkxRLmRlY29kZShzdHIpOworICAgICAgICAgIG1hcHBp
bmcuZ2VuZXJhdGVkQ29sdW1uID0gcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gKyB0ZW1wLnZhbHVl
OworICAgICAgICAgIHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uID0gbWFwcGluZy5nZW5lcmF0ZWRD
b2x1bW47CisgICAgICAgICAgc3RyID0gdGVtcC5yZXN0OworCisgICAgICAgICAgaWYgKHN0ci5s
ZW5ndGggPiAwICYmICFtYXBwaW5nU2VwYXJhdG9yLnRlc3Qoc3RyLmNoYXJBdCgwKSkpIHsKKyAg
ICAgICAgICAgIC8vIE9yaWdpbmFsIHNvdXJjZS4KKyAgICAgICAgICAgIHRlbXAgPSBiYXNlNjRW
TFEuZGVjb2RlKHN0cik7CisgICAgICAgICAgICBtYXBwaW5nLnNvdXJjZSA9IHRoaXMuX3NvdXJj
ZXMuYXQocHJldmlvdXNTb3VyY2UgKyB0ZW1wLnZhbHVlKTsKKyAgICAgICAgICAgIHByZXZpb3Vz
U291cmNlICs9IHRlbXAudmFsdWU7CisgICAgICAgICAgICBzdHIgPSB0ZW1wLnJlc3Q7CisgICAg
ICAgICAgICBpZiAoc3RyLmxlbmd0aCA9PT0gMCB8fCBtYXBwaW5nU2VwYXJhdG9yLnRlc3Qoc3Ry
LmNoYXJBdCgwKSkpIHsKKyAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3VuZCBhIHNv
dXJjZSwgYnV0IG5vIGxpbmUgYW5kIGNvbHVtbicpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBPcmlnaW5hbCBsaW5lLgorICAgICAgICAgICAgdGVtcCA9IGJhc2U2NFZMUS5kZWNv
ZGUoc3RyKTsKKyAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lID0gcHJldmlvdXNPcmln
aW5hbExpbmUgKyB0ZW1wLnZhbHVlOworICAgICAgICAgICAgcHJldmlvdXNPcmlnaW5hbExpbmUg
PSBtYXBwaW5nLm9yaWdpbmFsTGluZTsKKyAgICAgICAgICAgIC8vIExpbmVzIGFyZSBzdG9yZWQg
MC1iYXNlZAorICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgKz0gMTsKKyAgICAgICAg
ICAgIHN0ciA9IHRlbXAucmVzdDsKKyAgICAgICAgICAgIGlmIChzdHIubGVuZ3RoID09PSAwIHx8
IG1hcHBpbmdTZXBhcmF0b3IudGVzdChzdHIuY2hhckF0KDApKSkgeworICAgICAgICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlIGFuZCBsaW5lLCBidXQgbm8gY29sdW1uJyk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE9yaWdpbmFsIGNvbHVtbi4KKyAgICAg
ICAgICAgIHRlbXAgPSBiYXNlNjRWTFEuZGVjb2RlKHN0cik7CisgICAgICAgICAgICBtYXBwaW5n
Lm9yaWdpbmFsQ29sdW1uID0gcHJldmlvdXNPcmlnaW5hbENvbHVtbiArIHRlbXAudmFsdWU7Cisg
ICAgICAgICAgICBwcmV2aW91c09yaWdpbmFsQ29sdW1uID0gbWFwcGluZy5vcmlnaW5hbENvbHVt
bjsKKyAgICAgICAgICAgIHN0ciA9IHRlbXAucmVzdDsKKworICAgICAgICAgICAgaWYgKHN0ci5s
ZW5ndGggPiAwICYmICFtYXBwaW5nU2VwYXJhdG9yLnRlc3Qoc3RyLmNoYXJBdCgwKSkpIHsKKyAg
ICAgICAgICAgICAgLy8gT3JpZ2luYWwgbmFtZS4KKyAgICAgICAgICAgICAgdGVtcCA9IGJhc2U2
NFZMUS5kZWNvZGUoc3RyKTsKKyAgICAgICAgICAgICAgbWFwcGluZy5uYW1lID0gdGhpcy5fbmFt
ZXMuYXQocHJldmlvdXNOYW1lICsgdGVtcC52YWx1ZSk7CisgICAgICAgICAgICAgIHByZXZpb3Vz
TmFtZSArPSB0ZW1wLnZhbHVlOworICAgICAgICAgICAgICBzdHIgPSB0ZW1wLnJlc3Q7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgdGhpcy5fZ2VuZXJhdGVkTWFwcGlu
Z3MucHVzaChtYXBwaW5nKTsKKyAgICAgICAgICBpZiAodHlwZW9mIG1hcHBpbmcub3JpZ2luYWxM
aW5lID09PSAnbnVtYmVyJykgeworICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxNYXBwaW5ncy5w
dXNoKG1hcHBpbmcpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICB0
aGlzLl9vcmlnaW5hbE1hcHBpbmdzLnNvcnQodGhpcy5fY29tcGFyZU9yaWdpbmFsUG9zaXRpb25z
KTsKKyAgICB9OworCisgIC8qKgorICAgKiBDb21wYXJhdG9yIGJldHdlZW4gdHdvIG1hcHBpbmdz
IHdoZXJlIHRoZSBvcmlnaW5hbCBwb3NpdGlvbnMgYXJlIGNvbXBhcmVkLgorICAgKi8KKyAgU291
cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9jb21wYXJlT3JpZ2luYWxQb3NpdGlvbnMgPQorICAg
IGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NvbXBhcmVPcmlnaW5hbFBvc2l0aW9ucyhtYXBw
aW5nQSwgbWFwcGluZ0IpIHsKKyAgICAgIGlmIChtYXBwaW5nQS5zb3VyY2UgPiBtYXBwaW5nQi5z
b3VyY2UpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisgICAgICBlbHNlIGlmIChtYXBw
aW5nQS5zb3VyY2UgPCBtYXBwaW5nQi5zb3VyY2UpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAg
ICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHZhciBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExp
bmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7CisgICAgICAgIHJldHVybiBjbXAgPT09IDAKKyAg
ICAgICAgICA/IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1
bW4KKyAgICAgICAgICA6IGNtcDsKKyAgICAgIH0KKyAgICB9OworCisgIC8qKgorICAgKiBDb21w
YXJhdG9yIGJldHdlZW4gdHdvIG1hcHBpbmdzIHdoZXJlIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb25z
IGFyZSBjb21wYXJlZC4KKyAgICovCisgIFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fY29t
cGFyZUdlbmVyYXRlZFBvc2l0aW9ucyA9CisgICAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJf
Y29tcGFyZUdlbmVyYXRlZFBvc2l0aW9ucyhtYXBwaW5nQSwgbWFwcGluZ0IpIHsKKyAgICAgIHZh
ciBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lIC0gbWFwcGluZ0IuZ2VuZXJhdGVkTGluZTsK
KyAgICAgIHJldHVybiBjbXAgPT09IDAKKyAgICAgICAgPyBtYXBwaW5nQS5nZW5lcmF0ZWRDb2x1
bW4gLSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW4KKyAgICAgICAgOiBjbXA7CisgICAgfTsKKwor
ICAvKioKKyAgICogRmluZCB0aGUgbWFwcGluZyB0aGF0IGJlc3QgbWF0Y2hlcyB0aGUgaHlwb3Ro
ZXRpY2FsICJuZWVkbGUiIG1hcHBpbmcgdGhhdAorICAgKiB3ZSBhcmUgc2VhcmNoaW5nIGZvciBp
biB0aGUgZ2l2ZW4gImhheXN0YWNrIiBvZiBtYXBwaW5ncy4KKyAgICovCisgIFNvdXJjZU1hcENv
bnN1bWVyLnByb3RvdHlwZS5fZmluZE1hcHBpbmcgPQorICAgIGZ1bmN0aW9uIFNvdXJjZU1hcENv
bnN1bWVyX2ZpbmRNYXBwaW5nKGFOZWVkbGUsIGFNYXBwaW5ncywgYUxpbmVOYW1lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFDb2x1bW5OYW1lLCBhQ29tcGFy
YXRvcikgeworICAgICAgLy8gVG8gcmV0dXJuIHRoZSBwb3NpdGlvbiB3ZSBhcmUgc2VhcmNoaW5n
IGZvciwgd2UgbXVzdCBmaXJzdCBmaW5kIHRoZQorICAgICAgLy8gbWFwcGluZyBmb3IgdGhlIGdp
dmVuIHBvc2l0aW9uIGFuZCB0aGVuIHJldHVybiB0aGUgb3Bwb3NpdGUgcG9zaXRpb24gaXQKKyAg
ICAgIC8vIHBvaW50cyB0by4gQmVjYXVzZSB0aGUgbWFwcGluZ3MgYXJlIHNvcnRlZCwgd2UgY2Fu
IHVzZSBiaW5hcnkgc2VhcmNoIHRvCisgICAgICAvLyBmaW5kIHRoZSBiZXN0IG1hcHBpbmcuCisK
KyAgICAgIGlmIChhTmVlZGxlW2FMaW5lTmFtZV0gPD0gMCkgeworICAgICAgICB0aHJvdyBuZXcg
VHlwZUVycm9yKCdMaW5lIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEsIGdvdCAn
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBhTmVlZGxlW2FMaW5lTmFtZV0pOworICAg
ICAgfQorICAgICAgaWYgKGFOZWVkbGVbYUNvbHVtbk5hbWVdIDwgMCkgeworICAgICAgICB0aHJv
dyBuZXcgVHlwZUVycm9yKCdDb2x1bW4gbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8g
MCwgZ290ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGFOZWVkbGVbYUNvbHVtbk5h
bWVdKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIGJpbmFyeVNlYXJjaC5zZWFyY2goYU5lZWRs
ZSwgYU1hcHBpbmdzLCBhQ29tcGFyYXRvcik7CisgICAgfTsKKworICAvKioKKyAgICogUmV0dXJu
cyB0aGUgb3JpZ2luYWwgc291cmNlLCBsaW5lLCBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0
aGUgZ2VuZXJhdGVkCisgICAqIHNvdXJjZSdzIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJv
dmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdAorICAgKiB3aXRoIHRoZSBmb2xs
b3dpbmcgcHJvcGVydGllczoKKyAgICoKKyAgICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBp
biB0aGUgZ2VuZXJhdGVkIHNvdXJjZS4KKyAgICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1i
ZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuCisgICAqCisgICAqIGFuZCBhbiBvYmplY3QgaXMg
cmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6CisgICAqCisgICAqICAgLSBz
b3VyY2U6IFRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZSwgb3IgbnVsbC4KKyAgICogICAtIGxpbmU6
IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLgorICAgKiAg
IC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBu
dWxsLgorICAgKiAgIC0gbmFtZTogVGhlIG9yaWdpbmFsIGlkZW50aWZpZXIsIG9yIG51bGwuCisg
ICAqLworICBTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUub3JpZ2luYWxQb3NpdGlvbkZvciA9
CisgICAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfb3JpZ2luYWxQb3NpdGlvbkZvcihhQXJn
cykgeworICAgICAgdmFyIG5lZWRsZSA9IHsKKyAgICAgICAgZ2VuZXJhdGVkTGluZTogdXRpbC5n
ZXRBcmcoYUFyZ3MsICdsaW5lJyksCisgICAgICAgIGdlbmVyYXRlZENvbHVtbjogdXRpbC5nZXRB
cmcoYUFyZ3MsICdjb2x1bW4nKQorICAgICAgfTsKKworICAgICAgdmFyIG1hcHBpbmcgPSB0aGlz
Ll9maW5kTWFwcGluZyhuZWVkbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiZ2VuZXJhdGVkTGluZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJnZW5lcmF0ZWRDb2x1bW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLl9jb21wYXJlR2VuZXJhdGVkUG9zaXRpb25zKTsKKworICAgICAgaWYg
KG1hcHBpbmcpIHsKKyAgICAgICAgdmFyIHNvdXJjZSA9IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdz
b3VyY2UnLCBudWxsKTsKKyAgICAgICAgaWYgKHNvdXJjZSAmJiB0aGlzLnNvdXJjZVJvb3QpIHsK
KyAgICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4odGhpcy5zb3VyY2VSb290LCBzb3VyY2UpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgc291cmNlOiBzb3VyY2UsCisg
ICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsTGluZScsIG51bGwp
LAorICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsQ29sdW1u
JywgbnVsbCksCisgICAgICAgICAgbmFtZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ25hbWUnLCBu
dWxsKQorICAgICAgICB9OworICAgICAgfQorCisgICAgICByZXR1cm4geworICAgICAgICBzb3Vy
Y2U6IG51bGwsCisgICAgICAgIGxpbmU6IG51bGwsCisgICAgICAgIGNvbHVtbjogbnVsbCwKKyAg
ICAgICAgbmFtZTogbnVsbAorICAgICAgfTsKKyAgICB9OworCisgIC8qKgorICAgKiBSZXR1cm5z
IHRoZSBvcmlnaW5hbCBzb3VyY2UgY29udGVudC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgdGhlIHVy
bCBvZiB0aGUKKyAgICogb3JpZ2luYWwgc291cmNlIGZpbGUuIFJldHVybnMgbnVsbCBpZiBubyBv
cmlnaW5hbCBzb3VyY2UgY29udGVudCBpcworICAgKiBhdmFpbGlibGUuCisgICAqLworICBTb3Vy
Y2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9CisgICAgZnVuY3Rpb24g
U291cmNlTWFwQ29uc3VtZXJfc291cmNlQ29udGVudEZvcihhU291cmNlKSB7CisgICAgICBpZiAo
IXRoaXMuc291cmNlc0NvbnRlbnQpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICB9CisK
KyAgICAgIGlmICh0aGlzLnNvdXJjZVJvb3QpIHsKKyAgICAgICAgYVNvdXJjZSA9IHV0aWwucmVs
YXRpdmUodGhpcy5zb3VyY2VSb290LCBhU291cmNlKTsKKyAgICAgIH0KKworICAgICAgaWYgKHRo
aXMuX3NvdXJjZXMuaGFzKGFTb3VyY2UpKSB7CisgICAgICAgIHJldHVybiB0aGlzLnNvdXJjZXND
b250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihhU291cmNlKV07CisgICAgICB9CisKKyAgICAg
IHZhciB1cmw7CisgICAgICBpZiAodGhpcy5zb3VyY2VSb290CisgICAgICAgICAgJiYgKHVybCA9
IHV0aWwudXJsUGFyc2UodGhpcy5zb3VyY2VSb290KSkpIHsKKyAgICAgICAgLy8gWFhYOiBmaWxl
Oi8vIFVSSXMgYW5kIGFic29sdXRlIHBhdGhzIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBm
b3IKKyAgICAgICAgLy8gbWFueSB1c2Vycy4gV2UgY2FuIGhlbHAgdGhlbSBvdXQgd2hlbiB0aGV5
IGV4cGVjdCBmaWxlOi8vIFVSSXMgdG8KKyAgICAgICAgLy8gYmVoYXZlIGxpa2UgaXQgd291bGQg
aWYgdGhleSB3ZXJlIHJ1bm5pbmcgYSBsb2NhbCBIVFRQIHNlcnZlci4gU2VlCisgICAgICAgIC8v
IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTg4NTU5Ny4KKyAg
ICAgICAgdmFyIGZpbGVVcmlBYnNQYXRoID0gYVNvdXJjZS5yZXBsYWNlKC9eZmlsZTpcL1wvLywg
IiIpOworICAgICAgICBpZiAodXJsLnNjaGVtZSA9PSAiZmlsZSIKKyAgICAgICAgICAgICYmIHRo
aXMuX3NvdXJjZXMuaGFzKGZpbGVVcmlBYnNQYXRoKSkgeworICAgICAgICAgIHJldHVybiB0aGlz
LnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihmaWxlVXJpQWJzUGF0aCldCisg
ICAgICAgIH0KKworICAgICAgICBpZiAoKCF1cmwucGF0aCB8fCB1cmwucGF0aCA9PSAiLyIpCisg
ICAgICAgICAgICAmJiB0aGlzLl9zb3VyY2VzLmhhcygiLyIgKyBhU291cmNlKSkgeworICAgICAg
ICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZigiLyIg
KyBhU291cmNlKV07CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgdGhyb3cgbmV3IEVycm9y
KCciJyArIGFTb3VyY2UgKyAnIiBpcyBub3QgaW4gdGhlIFNvdXJjZU1hcC4nKTsKKyAgICB9Owor
CisgIC8qKgorICAgKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9y
bWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLAorICAgKiBsaW5lLCBhbmQgY29sdW1uIHBv
c2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0IHdpdGgKKyAg
ICogdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgorICAgKgorICAgKiAgIC0gc291cmNlOiBUaGUg
ZmlsZW5hbWUgb2YgdGhlIG9yaWdpbmFsIHNvdXJjZS4KKyAgICogICAtIGxpbmU6IFRoZSBsaW5l
IG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLgorICAgKiAgIC0gY29sdW1uOiBUaGUgY29s
dW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLgorICAgKgorICAgKiBhbmQgYW4gb2Jq
ZWN0IGlzIHJldHVybmVkIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgorICAgKgorICAg
KiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBu
dWxsLgorICAgKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVk
IHNvdXJjZSwgb3IgbnVsbC4KKyAgICovCisgIFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5n
ZW5lcmF0ZWRQb3NpdGlvbkZvciA9CisgICAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZ2Vu
ZXJhdGVkUG9zaXRpb25Gb3IoYUFyZ3MpIHsKKyAgICAgIHZhciBuZWVkbGUgPSB7CisgICAgICAg
IHNvdXJjZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdzb3VyY2UnKSwKKyAgICAgICAgb3JpZ2luYWxM
aW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSwKKyAgICAgICAgb3JpZ2luYWxDb2x1bW46
IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJykKKyAgICAgIH07CisKKyAgICAgIGlmICh0aGlz
LnNvdXJjZVJvb3QpIHsKKyAgICAgICAgbmVlZGxlLnNvdXJjZSA9IHV0aWwucmVsYXRpdmUodGhp
cy5zb3VyY2VSb290LCBuZWVkbGUuc291cmNlKTsKKyAgICAgIH0KKworICAgICAgdmFyIG1hcHBp
bmcgPSB0aGlzLl9maW5kTWFwcGluZyhuZWVkbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsTWFwcGluZ3MsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJvcmlnaW5hbExpbmUiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAib3JpZ2luYWxDb2x1bW4iLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLl9jb21wYXJlT3JpZ2luYWxQb3NpdGlvbnMpOworCisgICAg
ICBpZiAobWFwcGluZykgeworICAgICAgICByZXR1cm4geworICAgICAgICAgIGxpbmU6IHV0aWwu
Z2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksCisgICAgICAgICAgY29sdW1u
OiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkQ29sdW1uJywgbnVsbCkKKyAgICAgICAg
fTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHsKKyAgICAgICAgbGluZTogbnVsbCwKKyAgICAg
ICAgY29sdW1uOiBudWxsCisgICAgICB9OworICAgIH07CisKKyAgU291cmNlTWFwQ29uc3VtZXIu
R0VORVJBVEVEX09SREVSID0gMTsKKyAgU291cmNlTWFwQ29uc3VtZXIuT1JJR0lOQUxfT1JERVIg
PSAyOworCisgIC8qKgorICAgKiBJdGVyYXRlIG92ZXIgZWFjaCBtYXBwaW5nIGJldHdlZW4gYW4g
b3JpZ2luYWwgc291cmNlL2xpbmUvY29sdW1uIGFuZCBhCisgICAqIGdlbmVyYXRlZCBsaW5lL2Nv
bHVtbiBpbiB0aGlzIHNvdXJjZSBtYXAuCisgICAqCisgICAqIEBwYXJhbSBGdW5jdGlvbiBhQ2Fs
bGJhY2sKKyAgICogICAgICAgIFRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGVhY2gg
bWFwcGluZy4KKyAgICogQHBhcmFtIE9iamVjdCBhQ29udGV4dAorICAgKiAgICAgICAgT3B0aW9u
YWwuIElmIHNwZWNpZmllZCwgdGhpcyBvYmplY3Qgd2lsbCBiZSB0aGUgdmFsdWUgb2YgYHRoaXNg
IGV2ZXJ5CisgICAqICAgICAgICB0aW1lIHRoYXQgYGFDYWxsYmFja2AgaXMgY2FsbGVkLgorICAg
KiBAcGFyYW0gYU9yZGVyCisgICAqICAgICAgICBFaXRoZXIgYFNvdXJjZU1hcENvbnN1bWVyLkdF
TkVSQVRFRF9PUkRFUmAgb3IKKyAgICogICAgICAgIGBTb3VyY2VNYXBDb25zdW1lci5PUklHSU5B
TF9PUkRFUmAuIFNwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IHRvCisgICAqICAgICAgICBpdGVy
YXRlIG92ZXIgdGhlIG1hcHBpbmdzIHNvcnRlZCBieSB0aGUgZ2VuZXJhdGVkIGZpbGUncyBsaW5l
L2NvbHVtbgorICAgKiAgICAgICAgb3JkZXIgb3IgdGhlIG9yaWdpbmFsJ3Mgc291cmNlL2xpbmUv
Y29sdW1uIG9yZGVyLCByZXNwZWN0aXZlbHkuIERlZmF1bHRzIHRvCisgICAqICAgICAgICBgU291
cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYC4KKyAgICovCisgIFNvdXJjZU1hcENvbnN1
bWVyLnByb3RvdHlwZS5lYWNoTWFwcGluZyA9CisgICAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3Vt
ZXJfZWFjaE1hcHBpbmcoYUNhbGxiYWNrLCBhQ29udGV4dCwgYU9yZGVyKSB7CisgICAgICB2YXIg
Y29udGV4dCA9IGFDb250ZXh0IHx8IG51bGw7CisgICAgICB2YXIgb3JkZXIgPSBhT3JkZXIgfHwg
U291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSOworCisgICAgICB2YXIgbWFwcGluZ3M7
CisgICAgICBzd2l0Y2ggKG9yZGVyKSB7CisgICAgICBjYXNlIFNvdXJjZU1hcENvbnN1bWVyLkdF
TkVSQVRFRF9PUkRFUjoKKyAgICAgICAgbWFwcGluZ3MgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5n
czsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNvdXJjZU1hcENvbnN1bWVyLk9SSUdJTkFM
X09SREVSOgorICAgICAgICBtYXBwaW5ncyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3M7CisgICAg
ICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmtu
b3duIG9yZGVyIG9mIGl0ZXJhdGlvbi4iKTsKKyAgICAgIH0KKworICAgICAgdmFyIHNvdXJjZVJv
b3QgPSB0aGlzLnNvdXJjZVJvb3Q7CisgICAgICBtYXBwaW5ncy5tYXAoZnVuY3Rpb24gKG1hcHBp
bmcpIHsKKyAgICAgICAgdmFyIHNvdXJjZSA9IG1hcHBpbmcuc291cmNlOworICAgICAgICBpZiAo
c291cmNlICYmIHNvdXJjZVJvb3QpIHsKKyAgICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4oc291
cmNlUm9vdCwgc291cmNlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4geworICAgICAgICAg
IHNvdXJjZTogc291cmNlLAorICAgICAgICAgIGdlbmVyYXRlZExpbmU6IG1hcHBpbmcuZ2VuZXJh
dGVkTGluZSwKKyAgICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IG1hcHBpbmcuZ2VuZXJhdGVkQ29s
dW1uLAorICAgICAgICAgIG9yaWdpbmFsTGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsCisgICAg
ICAgICAgb3JpZ2luYWxDb2x1bW46IG1hcHBpbmcub3JpZ2luYWxDb2x1bW4sCisgICAgICAgICAg
bmFtZTogbWFwcGluZy5uYW1lCisgICAgICAgIH07CisgICAgICB9KS5mb3JFYWNoKGFDYWxsYmFj
aywgY29udGV4dCk7CisgICAgfTsKKworICBleHBvcnRzLlNvdXJjZU1hcENvbnN1bWVyID0gU291
cmNlTWFwQ29uc3VtZXI7CisKK30pOworCit9LHsiLi9hcnJheS1zZXQiOjYsIi4vYmFzZTY0LXZs
cSI6NywiLi9iaW5hcnktc2VhcmNoIjo5LCIuL3V0aWwiOjEzLCJhbWRlZmluZSI6MTR9XSwxMTpb
ZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKiAtKi0gTW9kZToganM7IGpzLWlu
ZGVudC1sZXZlbDogMjsgLSotICovCisvKgorICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3Vu
ZGF0aW9uIGFuZCBjb250cmlidXRvcnMKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxp
Y2Vuc2UuIFNlZSBMSUNFTlNFIG9yOgorICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2Vz
L0JTRC0zLUNsYXVzZQorICovCitpZiAodHlwZW9mIGRlZmluZSAhPT0gJ2Z1bmN0aW9uJykgewor
ICAgIHZhciBkZWZpbmUgPSByZXF1aXJlKCdhbWRlZmluZScpKG1vZHVsZSwgcmVxdWlyZSk7Cit9
CitkZWZpbmUoZnVuY3Rpb24gKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisgIHZhciBi
YXNlNjRWTFEgPSByZXF1aXJlKCcuL2Jhc2U2NC12bHEnKTsKKyAgdmFyIHV0aWwgPSByZXF1aXJl
KCcuL3V0aWwnKTsKKyAgdmFyIEFycmF5U2V0ID0gcmVxdWlyZSgnLi9hcnJheS1zZXQnKS5BcnJh
eVNldDsKKworICAvKioKKyAgICogQW4gaW5zdGFuY2Ugb2YgdGhlIFNvdXJjZU1hcEdlbmVyYXRv
ciByZXByZXNlbnRzIGEgc291cmNlIG1hcCB3aGljaCBpcworICAgKiBiZWluZyBidWlsdCBpbmNy
ZW1lbnRhbGx5LiBUbyBjcmVhdGUgYSBuZXcgb25lLCB5b3UgbXVzdCBwYXNzIGFuIG9iamVjdAor
ICAgKiB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKKyAgICoKKyAgICogICAtIGZpbGU6
IFRoZSBmaWxlbmFtZSBvZiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS4KKyAgICogICAtIHNvdXJjZVJv
b3Q6IEFuIG9wdGlvbmFsIHJvb3QgZm9yIGFsbCBVUkxzIGluIHRoaXMgc291cmNlIG1hcC4KKyAg
ICovCisgIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcihhQXJncykgeworICAgIHRoaXMuX2Zp
bGUgPSB1dGlsLmdldEFyZyhhQXJncywgJ2ZpbGUnKTsKKyAgICB0aGlzLl9zb3VyY2VSb290ID0g
dXRpbC5nZXRBcmcoYUFyZ3MsICdzb3VyY2VSb290JywgbnVsbCk7CisgICAgdGhpcy5fc291cmNl
cyA9IG5ldyBBcnJheVNldCgpOworICAgIHRoaXMuX25hbWVzID0gbmV3IEFycmF5U2V0KCk7Cisg
ICAgdGhpcy5fbWFwcGluZ3MgPSBbXTsKKyAgICB0aGlzLl9zb3VyY2VzQ29udGVudHMgPSBudWxs
OworICB9CisKKyAgU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7CisK
KyAgLyoqCisgICAqIENyZWF0ZXMgYSBuZXcgU291cmNlTWFwR2VuZXJhdG9yIGJhc2VkIG9uIGEg
U291cmNlTWFwQ29uc3VtZXIKKyAgICoKKyAgICogQHBhcmFtIGFTb3VyY2VNYXBDb25zdW1lciBU
aGUgU291cmNlTWFwLgorICAgKi8KKyAgU291cmNlTWFwR2VuZXJhdG9yLmZyb21Tb3VyY2VNYXAg
PQorICAgIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl9mcm9tU291cmNlTWFwKGFTb3VyY2VN
YXBDb25zdW1lcikgeworICAgICAgdmFyIHNvdXJjZVJvb3QgPSBhU291cmNlTWFwQ29uc3VtZXIu
c291cmNlUm9vdDsKKyAgICAgIHZhciBnZW5lcmF0b3IgPSBuZXcgU291cmNlTWFwR2VuZXJhdG9y
KHsKKyAgICAgICAgZmlsZTogYVNvdXJjZU1hcENvbnN1bWVyLmZpbGUsCisgICAgICAgIHNvdXJj
ZVJvb3Q6IHNvdXJjZVJvb3QKKyAgICAgIH0pOworICAgICAgYVNvdXJjZU1hcENvbnN1bWVyLmVh
Y2hNYXBwaW5nKGZ1bmN0aW9uIChtYXBwaW5nKSB7CisgICAgICAgIHZhciBuZXdNYXBwaW5nID0g
eworICAgICAgICAgIGdlbmVyYXRlZDogeworICAgICAgICAgICAgbGluZTogbWFwcGluZy5nZW5l
cmF0ZWRMaW5lLAorICAgICAgICAgICAgY29sdW1uOiBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbgor
ICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBpZiAobWFwcGluZy5zb3VyY2UpIHsK
KyAgICAgICAgICBuZXdNYXBwaW5nLnNvdXJjZSA9IG1hcHBpbmcuc291cmNlOworICAgICAgICAg
IGlmIChzb3VyY2VSb290KSB7CisgICAgICAgICAgICBuZXdNYXBwaW5nLnNvdXJjZSA9IHV0aWwu
cmVsYXRpdmUoc291cmNlUm9vdCwgbmV3TWFwcGluZy5zb3VyY2UpOworICAgICAgICAgIH0KKwor
ICAgICAgICAgIG5ld01hcHBpbmcub3JpZ2luYWwgPSB7CisgICAgICAgICAgICBsaW5lOiBtYXBw
aW5nLm9yaWdpbmFsTGluZSwKKyAgICAgICAgICAgIGNvbHVtbjogbWFwcGluZy5vcmlnaW5hbENv
bHVtbgorICAgICAgICAgIH07CisKKyAgICAgICAgICBpZiAobWFwcGluZy5uYW1lKSB7CisgICAg
ICAgICAgICBuZXdNYXBwaW5nLm5hbWUgPSBtYXBwaW5nLm5hbWU7CisgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgZ2VuZXJhdG9yLmFkZE1hcHBpbmcobmV3TWFwcGluZyk7CisgICAg
ICB9KTsKKyAgICAgIGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VzLmZvckVhY2goZnVuY3Rpb24g
KHNvdXJjZUZpbGUpIHsKKyAgICAgICAgdmFyIGNvbnRlbnQgPSBhU291cmNlTWFwQ29uc3VtZXIu
c291cmNlQ29udGVudEZvcihzb3VyY2VGaWxlKTsKKyAgICAgICAgaWYgKGNvbnRlbnQpIHsKKyAg
ICAgICAgICBnZW5lcmF0b3Iuc2V0U291cmNlQ29udGVudChzb3VyY2VGaWxlLCBjb250ZW50KTsK
KyAgICAgICAgfQorICAgICAgfSk7CisgICAgICByZXR1cm4gZ2VuZXJhdG9yOworICAgIH07CisK
KyAgLyoqCisgICAqIEFkZCBhIHNpbmdsZSBtYXBwaW5nIGZyb20gb3JpZ2luYWwgc291cmNlIGxp
bmUgYW5kIGNvbHVtbiB0byB0aGUgZ2VuZXJhdGVkCisgICAqIHNvdXJjZSdzIGxpbmUgYW5kIGNv
bHVtbiBmb3IgdGhpcyBzb3VyY2UgbWFwIGJlaW5nIGNyZWF0ZWQuIFRoZSBtYXBwaW5nCisgICAq
IG9iamVjdCBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6CisgICAqCisgICAq
ICAgLSBnZW5lcmF0ZWQ6IEFuIG9iamVjdCB3aXRoIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29s
dW1uIHBvc2l0aW9ucy4KKyAgICogICAtIG9yaWdpbmFsOiBBbiBvYmplY3Qgd2l0aCB0aGUgb3Jp
Z2luYWwgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucy4KKyAgICogICAtIHNvdXJjZTogVGhlIG9y
aWdpbmFsIHNvdXJjZSBmaWxlIChyZWxhdGl2ZSB0byB0aGUgc291cmNlUm9vdCkuCisgICAqICAg
LSBuYW1lOiBBbiBvcHRpb25hbCBvcmlnaW5hbCB0b2tlbiBuYW1lIGZvciB0aGlzIG1hcHBpbmcu
CisgICAqLworICBTb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLmFkZE1hcHBpbmcgPQorICAg
IGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl9hZGRNYXBwaW5nKGFBcmdzKSB7CisgICAgICB2
YXIgZ2VuZXJhdGVkID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdnZW5lcmF0ZWQnKTsKKyAgICAgIHZh
ciBvcmlnaW5hbCA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnb3JpZ2luYWwnLCBudWxsKTsKKyAgICAg
IHZhciBzb3VyY2UgPSB1dGlsLmdldEFyZyhhQXJncywgJ3NvdXJjZScsIG51bGwpOworICAgICAg
dmFyIG5hbWUgPSB1dGlsLmdldEFyZyhhQXJncywgJ25hbWUnLCBudWxsKTsKKworICAgICAgdGhp
cy5fdmFsaWRhdGVNYXBwaW5nKGdlbmVyYXRlZCwgb3JpZ2luYWwsIHNvdXJjZSwgbmFtZSk7CisK
KyAgICAgIGlmIChzb3VyY2UgJiYgIXRoaXMuX3NvdXJjZXMuaGFzKHNvdXJjZSkpIHsKKyAgICAg
ICAgdGhpcy5fc291cmNlcy5hZGQoc291cmNlKTsKKyAgICAgIH0KKworICAgICAgaWYgKG5hbWUg
JiYgIXRoaXMuX25hbWVzLmhhcyhuYW1lKSkgeworICAgICAgICB0aGlzLl9uYW1lcy5hZGQobmFt
ZSk7CisgICAgICB9CisKKyAgICAgIHRoaXMuX21hcHBpbmdzLnB1c2goeworICAgICAgICBnZW5l
cmF0ZWQ6IGdlbmVyYXRlZCwKKyAgICAgICAgb3JpZ2luYWw6IG9yaWdpbmFsLAorICAgICAgICBz
b3VyY2U6IHNvdXJjZSwKKyAgICAgICAgbmFtZTogbmFtZQorICAgICAgfSk7CisgICAgfTsKKwor
ICAvKioKKyAgICogU2V0IHRoZSBzb3VyY2UgY29udGVudCBmb3IgYSBzb3VyY2UgZmlsZS4KKyAg
ICovCisgIFNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuc2V0U291cmNlQ29udGVudCA9Cisg
ICAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX3NldFNvdXJjZUNvbnRlbnQoYVNvdXJjZUZp
bGUsIGFTb3VyY2VDb250ZW50KSB7CisgICAgICB2YXIgc291cmNlID0gYVNvdXJjZUZpbGU7Cisg
ICAgICBpZiAodGhpcy5fc291cmNlUm9vdCkgeworICAgICAgICBzb3VyY2UgPSB1dGlsLnJlbGF0
aXZlKHRoaXMuX3NvdXJjZVJvb3QsIHNvdXJjZSk7CisgICAgICB9CisKKyAgICAgIGlmIChhU291
cmNlQ29udGVudCAhPT0gbnVsbCkgeworICAgICAgICAvLyBBZGQgdGhlIHNvdXJjZSBjb250ZW50
IHRvIHRoZSBfc291cmNlc0NvbnRlbnRzIG1hcC4KKyAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IF9z
b3VyY2VzQ29udGVudHMgbWFwIGlmIHRoZSBwcm9wZXJ0eSBpcyBudWxsLgorICAgICAgICBpZiAo
IXRoaXMuX3NvdXJjZXNDb250ZW50cykgeworICAgICAgICAgIHRoaXMuX3NvdXJjZXNDb250ZW50
cyA9IHt9OworICAgICAgICB9CisgICAgICAgIHRoaXMuX3NvdXJjZXNDb250ZW50c1t1dGlsLnRv
U2V0U3RyaW5nKHNvdXJjZSldID0gYVNvdXJjZUNvbnRlbnQ7CisgICAgICB9IGVsc2UgeworICAg
ICAgICAvLyBSZW1vdmUgdGhlIHNvdXJjZSBmaWxlIGZyb20gdGhlIF9zb3VyY2VzQ29udGVudHMg
bWFwLgorICAgICAgICAvLyBJZiB0aGUgX3NvdXJjZXNDb250ZW50cyBtYXAgaXMgZW1wdHksIHNl
dCB0aGUgcHJvcGVydHkgdG8gbnVsbC4KKyAgICAgICAgZGVsZXRlIHRoaXMuX3NvdXJjZXNDb250
ZW50c1t1dGlsLnRvU2V0U3RyaW5nKHNvdXJjZSldOworICAgICAgICBpZiAoT2JqZWN0LmtleXMo
dGhpcy5fc291cmNlc0NvbnRlbnRzKS5sZW5ndGggPT09IDApIHsKKyAgICAgICAgICB0aGlzLl9z
b3VyY2VzQ29udGVudHMgPSBudWxsOworICAgICAgICB9CisgICAgICB9CisgICAgfTsKKworICAv
KioKKyAgICogQXBwbGllcyB0aGUgbWFwcGluZ3Mgb2YgYSBzdWItc291cmNlLW1hcCBmb3IgYSBz
cGVjaWZpYyBzb3VyY2UgZmlsZSB0byB0aGUKKyAgICogc291cmNlIG1hcCBiZWluZyBnZW5lcmF0
ZWQuIEVhY2ggbWFwcGluZyB0byB0aGUgc3VwcGxpZWQgc291cmNlIGZpbGUgaXMKKyAgICogcmV3
cml0dGVuIHVzaW5nIHRoZSBzdXBwbGllZCBzb3VyY2UgbWFwLiBOb3RlOiBUaGUgcmVzb2x1dGlv
biBmb3IgdGhlCisgICAqIHJlc3VsdGluZyBtYXBwaW5ncyBpcyB0aGUgbWluaW1pdW0gb2YgdGhp
cyBtYXAgYW5kIHRoZSBzdXBwbGllZCBtYXAuCisgICAqCisgICAqIEBwYXJhbSBhU291cmNlTWFw
Q29uc3VtZXIgVGhlIHNvdXJjZSBtYXAgdG8gYmUgYXBwbGllZC4KKyAgICogQHBhcmFtIGFTb3Vy
Y2VGaWxlIE9wdGlvbmFsLiBUaGUgZmlsZW5hbWUgb2YgdGhlIHNvdXJjZSBmaWxlLgorICAgKiAg
ICAgICAgSWYgb21pdHRlZCwgU291cmNlTWFwQ29uc3VtZXIncyBmaWxlIHByb3BlcnR5IHdpbGwg
YmUgdXNlZC4KKyAgICovCisgIFNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuYXBwbHlTb3Vy
Y2VNYXAgPQorICAgIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl9hcHBseVNvdXJjZU1hcChh
U291cmNlTWFwQ29uc3VtZXIsIGFTb3VyY2VGaWxlKSB7CisgICAgICAvLyBJZiBhU291cmNlRmls
ZSBpcyBvbWl0dGVkLCB3ZSB3aWxsIHVzZSB0aGUgZmlsZSBwcm9wZXJ0eSBvZiB0aGUgU291cmNl
TWFwCisgICAgICBpZiAoIWFTb3VyY2VGaWxlKSB7CisgICAgICAgIGFTb3VyY2VGaWxlID0gYVNv
dXJjZU1hcENvbnN1bWVyLmZpbGU7CisgICAgICB9CisgICAgICB2YXIgc291cmNlUm9vdCA9IHRo
aXMuX3NvdXJjZVJvb3Q7CisgICAgICAvLyBNYWtlICJhU291cmNlRmlsZSIgcmVsYXRpdmUgaWYg
YW4gYWJzb2x1dGUgVXJsIGlzIHBhc3NlZC4KKyAgICAgIGlmIChzb3VyY2VSb290KSB7CisgICAg
ICAgIGFTb3VyY2VGaWxlID0gdXRpbC5yZWxhdGl2ZShzb3VyY2VSb290LCBhU291cmNlRmlsZSk7
CisgICAgICB9CisgICAgICAvLyBBcHBseWluZyB0aGUgU291cmNlTWFwIGNhbiBhZGQgYW5kIHJl
bW92ZSBpdGVtcyBmcm9tIHRoZSBzb3VyY2VzIGFuZAorICAgICAgLy8gdGhlIG5hbWVzIGFycmF5
LgorICAgICAgdmFyIG5ld1NvdXJjZXMgPSBuZXcgQXJyYXlTZXQoKTsKKyAgICAgIHZhciBuZXdO
YW1lcyA9IG5ldyBBcnJheVNldCgpOworCisgICAgICAvLyBGaW5kIG1hcHBpbmdzIGZvciB0aGUg
ImFTb3VyY2VGaWxlIgorICAgICAgdGhpcy5fbWFwcGluZ3MuZm9yRWFjaChmdW5jdGlvbiAobWFw
cGluZykgeworICAgICAgICBpZiAobWFwcGluZy5zb3VyY2UgPT09IGFTb3VyY2VGaWxlICYmIG1h
cHBpbmcub3JpZ2luYWwpIHsKKyAgICAgICAgICAvLyBDaGVjayBpZiBpdCBjYW4gYmUgbWFwcGVk
IGJ5IHRoZSBzb3VyY2UgbWFwLCB0aGVuIHVwZGF0ZSB0aGUgbWFwcGluZy4KKyAgICAgICAgICB2
YXIgb3JpZ2luYWwgPSBhU291cmNlTWFwQ29uc3VtZXIub3JpZ2luYWxQb3NpdGlvbkZvcih7Cisg
ICAgICAgICAgICBsaW5lOiBtYXBwaW5nLm9yaWdpbmFsLmxpbmUsCisgICAgICAgICAgICBjb2x1
bW46IG1hcHBpbmcub3JpZ2luYWwuY29sdW1uCisgICAgICAgICAgfSk7CisgICAgICAgICAgaWYg
KG9yaWdpbmFsLnNvdXJjZSAhPT0gbnVsbCkgeworICAgICAgICAgICAgLy8gQ29weSBtYXBwaW5n
CisgICAgICAgICAgICBpZiAoc291cmNlUm9vdCkgeworICAgICAgICAgICAgICBtYXBwaW5nLnNv
dXJjZSA9IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgb3JpZ2luYWwuc291cmNlKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIG1hcHBpbmcuc291cmNlID0gb3JpZ2luYWwu
c291cmNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbC5saW5l
ID0gb3JpZ2luYWwubGluZTsKKyAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWwuY29sdW1uID0g
b3JpZ2luYWwuY29sdW1uOworICAgICAgICAgICAgaWYgKG9yaWdpbmFsLm5hbWUgIT09IG51bGwg
JiYgbWFwcGluZy5uYW1lICE9PSBudWxsKSB7CisgICAgICAgICAgICAgIC8vIE9ubHkgdXNlIHRo
ZSBpZGVudGlmaWVyIG5hbWUgaWYgaXQncyBhbiBpZGVudGlmaWVyCisgICAgICAgICAgICAgIC8v
IGluIGJvdGggU291cmNlTWFwcworICAgICAgICAgICAgICBtYXBwaW5nLm5hbWUgPSBvcmlnaW5h
bC5uYW1lOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IHZhciBzb3VyY2UgPSBtYXBwaW5nLnNvdXJjZTsKKyAgICAgICAgaWYgKHNvdXJjZSAmJiAhbmV3
U291cmNlcy5oYXMoc291cmNlKSkgeworICAgICAgICAgIG5ld1NvdXJjZXMuYWRkKHNvdXJjZSk7
CisgICAgICAgIH0KKworICAgICAgICB2YXIgbmFtZSA9IG1hcHBpbmcubmFtZTsKKyAgICAgICAg
aWYgKG5hbWUgJiYgIW5ld05hbWVzLmhhcyhuYW1lKSkgeworICAgICAgICAgIG5ld05hbWVzLmFk
ZChuYW1lKTsKKyAgICAgICAgfQorCisgICAgICB9LCB0aGlzKTsKKyAgICAgIHRoaXMuX3NvdXJj
ZXMgPSBuZXdTb3VyY2VzOworICAgICAgdGhpcy5fbmFtZXMgPSBuZXdOYW1lczsKKworICAgICAg
Ly8gQ29weSBzb3VyY2VzQ29udGVudHMgb2YgYXBwbGllZCBtYXAuCisgICAgICBhU291cmNlTWFw
Q29uc3VtZXIuc291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2VGaWxlKSB7CisgICAgICAg
IHZhciBjb250ZW50ID0gYVNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZUNvbnRlbnRGb3Ioc291cmNl
RmlsZSk7CisgICAgICAgIGlmIChjb250ZW50KSB7CisgICAgICAgICAgaWYgKHNvdXJjZVJvb3Qp
IHsKKyAgICAgICAgICAgIHNvdXJjZUZpbGUgPSB1dGlsLnJlbGF0aXZlKHNvdXJjZVJvb3QsIHNv
dXJjZUZpbGUpOworICAgICAgICAgIH0KKyAgICAgICAgICB0aGlzLnNldFNvdXJjZUNvbnRlbnQo
c291cmNlRmlsZSwgY29udGVudCk7CisgICAgICAgIH0KKyAgICAgIH0sIHRoaXMpOworICAgIH07
CisKKyAgLyoqCisgICAqIEEgbWFwcGluZyBjYW4gaGF2ZSBvbmUgb2YgdGhlIHRocmVlIGxldmVs
cyBvZiBkYXRhOgorICAgKgorICAgKiAgIDEuIEp1c3QgdGhlIGdlbmVyYXRlZCBwb3NpdGlvbi4K
KyAgICogICAyLiBUaGUgR2VuZXJhdGVkIHBvc2l0aW9uLCBvcmlnaW5hbCBwb3NpdGlvbiwgYW5k
IG9yaWdpbmFsIHNvdXJjZS4KKyAgICogICAzLiBHZW5lcmF0ZWQgYW5kIG9yaWdpbmFsIHBvc2l0
aW9uLCBvcmlnaW5hbCBzb3VyY2UsIGFzIHdlbGwgYXMgYSBuYW1lCisgICAqICAgICAgdG9rZW4u
CisgICAqCisgICAqIFRvIG1haW50YWluIGNvbnNpc3RlbmN5LCB3ZSB2YWxpZGF0ZSB0aGF0IGFu
eSBuZXcgbWFwcGluZyBiZWluZyBhZGRlZCBmYWxscworICAgKiBpbiB0byBvbmUgb2YgdGhlc2Ug
Y2F0ZWdvcmllcy4KKyAgICovCisgIFNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuX3ZhbGlk
YXRlTWFwcGluZyA9CisgICAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX3ZhbGlkYXRlTWFw
cGluZyhhR2VuZXJhdGVkLCBhT3JpZ2luYWwsIGFTb3VyY2UsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhTmFtZSkgeworICAgICAgaWYgKGFHZW5lcmF0
ZWQgJiYgJ2xpbmUnIGluIGFHZW5lcmF0ZWQgJiYgJ2NvbHVtbicgaW4gYUdlbmVyYXRlZAorICAg
ICAgICAgICYmIGFHZW5lcmF0ZWQubGluZSA+IDAgJiYgYUdlbmVyYXRlZC5jb2x1bW4gPj0gMAor
ICAgICAgICAgICYmICFhT3JpZ2luYWwgJiYgIWFTb3VyY2UgJiYgIWFOYW1lKSB7CisgICAgICAg
IC8vIENhc2UgMS4KKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgZWxzZSBpZiAoYUdl
bmVyYXRlZCAmJiAnbGluZScgaW4gYUdlbmVyYXRlZCAmJiAnY29sdW1uJyBpbiBhR2VuZXJhdGVk
CisgICAgICAgICAgICAgICAmJiBhT3JpZ2luYWwgJiYgJ2xpbmUnIGluIGFPcmlnaW5hbCAmJiAn
Y29sdW1uJyBpbiBhT3JpZ2luYWwKKyAgICAgICAgICAgICAgICYmIGFHZW5lcmF0ZWQubGluZSA+
IDAgJiYgYUdlbmVyYXRlZC5jb2x1bW4gPj0gMAorICAgICAgICAgICAgICAgJiYgYU9yaWdpbmFs
LmxpbmUgPiAwICYmIGFPcmlnaW5hbC5jb2x1bW4gPj0gMAorICAgICAgICAgICAgICAgJiYgYVNv
dXJjZSkgeworICAgICAgICAvLyBDYXNlcyAyIGFuZCAzLgorICAgICAgICByZXR1cm47CisgICAg
ICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG1hcHBp
bmcuJyk7CisgICAgICB9CisgICAgfTsKKworICBmdW5jdGlvbiBjbXBMb2NhdGlvbihsb2MxLCBs
b2MyKSB7CisgICAgdmFyIGNtcCA9IChsb2MxICYmIGxvYzEubGluZSkgLSAobG9jMiAmJiBsb2My
LmxpbmUpOworICAgIHJldHVybiBjbXAgPyBjbXAgOiAobG9jMSAmJiBsb2MxLmNvbHVtbikgLSAo
bG9jMiAmJiBsb2MyLmNvbHVtbik7CisgIH0KKworICBmdW5jdGlvbiBzdHJjbXAoc3RyMSwgc3Ry
MikgeworICAgIHN0cjEgPSBzdHIxIHx8ICcnOworICAgIHN0cjIgPSBzdHIyIHx8ICcnOworICAg
IHJldHVybiAoc3RyMSA+IHN0cjIpIC0gKHN0cjEgPCBzdHIyKTsKKyAgfQorCisgIGZ1bmN0aW9u
IGNtcE1hcHBpbmcobWFwcGluZ0EsIG1hcHBpbmdCKSB7CisgICAgcmV0dXJuIGNtcExvY2F0aW9u
KG1hcHBpbmdBLmdlbmVyYXRlZCwgbWFwcGluZ0IuZ2VuZXJhdGVkKSB8fAorICAgICAgY21wTG9j
YXRpb24obWFwcGluZ0Eub3JpZ2luYWwsIG1hcHBpbmdCLm9yaWdpbmFsKSB8fAorICAgICAgc3Ry
Y21wKG1hcHBpbmdBLnNvdXJjZSwgbWFwcGluZ0Iuc291cmNlKSB8fAorICAgICAgc3RyY21wKG1h
cHBpbmdBLm5hbWUsIG1hcHBpbmdCLm5hbWUpOworICB9CisKKyAgLyoqCisgICAqIFNlcmlhbGl6
ZSB0aGUgYWNjdW11bGF0ZWQgbWFwcGluZ3MgaW4gdG8gdGhlIHN0cmVhbSBvZiBiYXNlIDY0IFZM
UXMKKyAgICogc3BlY2lmaWVkIGJ5IHRoZSBzb3VyY2UgbWFwIGZvcm1hdC4KKyAgICovCisgIFNv
dXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuX3NlcmlhbGl6ZU1hcHBpbmdzID0KKyAgICBmdW5j
dGlvbiBTb3VyY2VNYXBHZW5lcmF0b3Jfc2VyaWFsaXplTWFwcGluZ3MoKSB7CisgICAgICB2YXIg
cHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwOworICAgICAgdmFyIHByZXZpb3VzR2VuZXJhdGVk
TGluZSA9IDE7CisgICAgICB2YXIgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IDA7CisgICAgICB2
YXIgcHJldmlvdXNPcmlnaW5hbExpbmUgPSAwOworICAgICAgdmFyIHByZXZpb3VzTmFtZSA9IDA7
CisgICAgICB2YXIgcHJldmlvdXNTb3VyY2UgPSAwOworICAgICAgdmFyIHJlc3VsdCA9ICcnOwor
ICAgICAgdmFyIG1hcHBpbmc7CisKKyAgICAgIC8vIFRoZSBtYXBwaW5ncyBtdXN0IGJlIGd1YXJh
bnRlZWQgdG8gYmUgaW4gc29ydGVkIG9yZGVyIGJlZm9yZSB3ZSBzdGFydAorICAgICAgLy8gc2Vy
aWFsaXppbmcgdGhlbSBvciBlbHNlIHRoZSBnZW5lcmF0ZWQgbGluZSBudW1iZXJzICh3aGljaCBh
cmUgZGVmaW5lZAorICAgICAgLy8gdmlhIHRoZSAnOycgc2VwYXJhdG9ycykgd2lsbCBiZSBhbGwg
bWVzc2VkIHVwLiBOb3RlOiBpdCBtaWdodCBiZSBtb3JlCisgICAgICAvLyBwZXJmb3JtYW50IHRv
IG1haW50YWluIHRoZSBzb3J0aW5nIGFzIHdlIGluc2VydCB0aGVtLCByYXRoZXIgdGhhbiBhcyB3
ZQorICAgICAgLy8gc2VyaWFsaXplIHRoZW0sIGJ1dCB0aGUgYmlnIE8gaXMgdGhlIHNhbWUgZWl0
aGVyIHdheS4KKyAgICAgIHRoaXMuX21hcHBpbmdzLnNvcnQoY21wTWFwcGluZyk7CisKKyAgICAg
IGZvciAodmFyIGkgPSAwLCBsZW4gPSB0aGlzLl9tYXBwaW5ncy5sZW5ndGg7IGkgPCBsZW47IGkr
KykgeworICAgICAgICBtYXBwaW5nID0gdGhpcy5fbWFwcGluZ3NbaV07CisKKyAgICAgICAgaWYg
KG1hcHBpbmcuZ2VuZXJhdGVkLmxpbmUgIT09IHByZXZpb3VzR2VuZXJhdGVkTGluZSkgeworICAg
ICAgICAgIHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uID0gMDsKKyAgICAgICAgICB3aGlsZSAobWFw
cGluZy5nZW5lcmF0ZWQubGluZSAhPT0gcHJldmlvdXNHZW5lcmF0ZWRMaW5lKSB7CisgICAgICAg
ICAgICByZXN1bHQgKz0gJzsnOworICAgICAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRMaW5lKys7
CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIGlmIChp
ID4gMCkgeworICAgICAgICAgICAgaWYgKCFjbXBNYXBwaW5nKG1hcHBpbmcsIHRoaXMuX21hcHBp
bmdzW2kgLSAxXSkpIHsKKyAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXN1bHQgKz0gJywnOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIHJlc3VsdCArPSBiYXNlNjRWTFEuZW5jb2RlKG1hcHBpbmcuZ2VuZXJhdGVkLmNvbHVtbgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHByZXZpb3VzR2VuZXJhdGVkQ29s
dW1uKTsKKyAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSBtYXBwaW5nLmdlbmVyYXRl
ZC5jb2x1bW47CisKKyAgICAgICAgaWYgKG1hcHBpbmcuc291cmNlICYmIG1hcHBpbmcub3JpZ2lu
YWwpIHsKKyAgICAgICAgICByZXN1bHQgKz0gYmFzZTY0VkxRLmVuY29kZSh0aGlzLl9zb3VyY2Vz
LmluZGV4T2YobWFwcGluZy5zb3VyY2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLSBwcmV2aW91c1NvdXJjZSk7CisgICAgICAgICAgcHJldmlvdXNTb3VyY2UgPSB0aGlz
Ll9zb3VyY2VzLmluZGV4T2YobWFwcGluZy5zb3VyY2UpOworCisgICAgICAgICAgLy8gbGluZXMg
YXJlIHN0b3JlZCAwLWJhc2VkIGluIFNvdXJjZU1hcCBzcGVjIHZlcnNpb24gMworICAgICAgICAg
IHJlc3VsdCArPSBiYXNlNjRWTFEuZW5jb2RlKG1hcHBpbmcub3JpZ2luYWwubGluZSAtIDEKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHByZXZpb3VzT3JpZ2luYWxMaW5l
KTsKKyAgICAgICAgICBwcmV2aW91c09yaWdpbmFsTGluZSA9IG1hcHBpbmcub3JpZ2luYWwubGlu
ZSAtIDE7CisKKyAgICAgICAgICByZXN1bHQgKz0gYmFzZTY0VkxRLmVuY29kZShtYXBwaW5nLm9y
aWdpbmFsLmNvbHVtbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gcHJl
dmlvdXNPcmlnaW5hbENvbHVtbik7CisgICAgICAgICAgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9
IG1hcHBpbmcub3JpZ2luYWwuY29sdW1uOworCisgICAgICAgICAgaWYgKG1hcHBpbmcubmFtZSkg
eworICAgICAgICAgICAgcmVzdWx0ICs9IGJhc2U2NFZMUS5lbmNvZGUodGhpcy5fbmFtZXMuaW5k
ZXhPZihtYXBwaW5nLm5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAtIHByZXZpb3VzTmFtZSk7CisgICAgICAgICAgICBwcmV2aW91c05hbWUgPSB0aGlzLl9uYW1l
cy5pbmRleE9mKG1hcHBpbmcubmFtZSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9
CisKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKworICAvKioKKyAgICogRXh0ZXJuYWxp
emUgdGhlIHNvdXJjZSBtYXAuCisgICAqLworICBTb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBl
LnRvSlNPTiA9CisgICAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX3RvSlNPTigpIHsKKyAg
ICAgIHZhciBtYXAgPSB7CisgICAgICAgIHZlcnNpb246IHRoaXMuX3ZlcnNpb24sCisgICAgICAg
IGZpbGU6IHRoaXMuX2ZpbGUsCisgICAgICAgIHNvdXJjZXM6IHRoaXMuX3NvdXJjZXMudG9BcnJh
eSgpLAorICAgICAgICBuYW1lczogdGhpcy5fbmFtZXMudG9BcnJheSgpLAorICAgICAgICBtYXBw
aW5nczogdGhpcy5fc2VyaWFsaXplTWFwcGluZ3MoKQorICAgICAgfTsKKyAgICAgIGlmICh0aGlz
Ll9zb3VyY2VSb290KSB7CisgICAgICAgIG1hcC5zb3VyY2VSb290ID0gdGhpcy5fc291cmNlUm9v
dDsKKyAgICAgIH0KKyAgICAgIGlmICh0aGlzLl9zb3VyY2VzQ29udGVudHMpIHsKKyAgICAgICAg
bWFwLnNvdXJjZXNDb250ZW50ID0gbWFwLnNvdXJjZXMubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHsK
KyAgICAgICAgICBpZiAobWFwLnNvdXJjZVJvb3QpIHsKKyAgICAgICAgICAgIHNvdXJjZSA9IHV0
aWwucmVsYXRpdmUobWFwLnNvdXJjZVJvb3QsIHNvdXJjZSk7CisgICAgICAgICAgfQorICAgICAg
ICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoCisgICAgICAg
ICAgICB0aGlzLl9zb3VyY2VzQ29udGVudHMsIHV0aWwudG9TZXRTdHJpbmcoc291cmNlKSkKKyAg
ICAgICAgICAgID8gdGhpcy5fc291cmNlc0NvbnRlbnRzW3V0aWwudG9TZXRTdHJpbmcoc291cmNl
KV0KKyAgICAgICAgICAgIDogbnVsbDsKKyAgICAgICAgfSwgdGhpcyk7CisgICAgICB9CisgICAg
ICByZXR1cm4gbWFwOworICAgIH07CisKKyAgLyoqCisgICAqIFJlbmRlciB0aGUgc291cmNlIG1h
cCBiZWluZyBnZW5lcmF0ZWQgdG8gYSBzdHJpbmcuCisgICAqLworICBTb3VyY2VNYXBHZW5lcmF0
b3IucHJvdG90eXBlLnRvU3RyaW5nID0KKyAgICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3Jf
dG9TdHJpbmcoKSB7CisgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcyk7CisgICAgfTsK
KworICBleHBvcnRzLlNvdXJjZU1hcEdlbmVyYXRvciA9IFNvdXJjZU1hcEdlbmVyYXRvcjsKKwor
fSk7CisKK30seyIuL2FycmF5LXNldCI6NiwiLi9iYXNlNjQtdmxxIjo3LCIuL3V0aWwiOjEzLCJh
bWRlZmluZSI6MTR9XSwxMjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKiAt
Ki0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovCisvKgorICogQ29weXJpZ2h0
IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnMKKyAqIExpY2Vuc2VkIHVu
ZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOgorICogaHR0cDovL29wZW5z
b3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZQorICovCitpZiAodHlwZW9mIGRlZmluZSAh
PT0gJ2Z1bmN0aW9uJykgeworICAgIHZhciBkZWZpbmUgPSByZXF1aXJlKCdhbWRlZmluZScpKG1v
ZHVsZSwgcmVxdWlyZSk7Cit9CitkZWZpbmUoZnVuY3Rpb24gKHJlcXVpcmUsIGV4cG9ydHMsIG1v
ZHVsZSkgeworCisgIHZhciBTb3VyY2VNYXBHZW5lcmF0b3IgPSByZXF1aXJlKCcuL3NvdXJjZS1t
YXAtZ2VuZXJhdG9yJykuU291cmNlTWFwR2VuZXJhdG9yOworICB2YXIgdXRpbCA9IHJlcXVpcmUo
Jy4vdXRpbCcpOworCisgIC8qKgorICAgKiBTb3VyY2VOb2RlcyBwcm92aWRlIGEgd2F5IHRvIGFi
c3RyYWN0IG92ZXIgaW50ZXJwb2xhdGluZy9jb25jYXRlbmF0aW5nCisgICAqIHNuaXBwZXRzIG9m
IGdlbmVyYXRlZCBKYXZhU2NyaXB0IHNvdXJjZSBjb2RlIHdoaWxlIG1haW50YWluaW5nIHRoZSBs
aW5lIGFuZAorICAgKiBjb2x1bW4gaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmln
aW5hbCBzb3VyY2UgY29kZS4KKyAgICoKKyAgICogQHBhcmFtIGFMaW5lIFRoZSBvcmlnaW5hbCBs
aW5lIG51bWJlci4KKyAgICogQHBhcmFtIGFDb2x1bW4gVGhlIG9yaWdpbmFsIGNvbHVtbiBudW1i
ZXIuCisgICAqIEBwYXJhbSBhU291cmNlIFRoZSBvcmlnaW5hbCBzb3VyY2UncyBmaWxlbmFtZS4K
KyAgICogQHBhcmFtIGFDaHVua3MgT3B0aW9uYWwuIEFuIGFycmF5IG9mIHN0cmluZ3Mgd2hpY2gg
YXJlIHNuaXBwZXRzIG9mCisgICAqICAgICAgICBnZW5lcmF0ZWQgSlMsIG9yIG90aGVyIFNvdXJj
ZU5vZGVzLgorICAgKiBAcGFyYW0gYU5hbWUgVGhlIG9yaWdpbmFsIGlkZW50aWZpZXIuCisgICAq
LworICBmdW5jdGlvbiBTb3VyY2VOb2RlKGFMaW5lLCBhQ29sdW1uLCBhU291cmNlLCBhQ2h1bmtz
LCBhTmFtZSkgeworICAgIHRoaXMuY2hpbGRyZW4gPSBbXTsKKyAgICB0aGlzLnNvdXJjZUNvbnRl
bnRzID0ge307CisgICAgdGhpcy5saW5lID0gYUxpbmUgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBh
TGluZTsKKyAgICB0aGlzLmNvbHVtbiA9IGFDb2x1bW4gPT09IHVuZGVmaW5lZCA/IG51bGwgOiBh
Q29sdW1uOworICAgIHRoaXMuc291cmNlID0gYVNvdXJjZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6
IGFTb3VyY2U7CisgICAgdGhpcy5uYW1lID0gYU5hbWUgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBh
TmFtZTsKKyAgICBpZiAoYUNodW5rcyAhPSBudWxsKSB0aGlzLmFkZChhQ2h1bmtzKTsKKyAgfQor
CisgIC8qKgorICAgKiBDcmVhdGVzIGEgU291cmNlTm9kZSBmcm9tIGdlbmVyYXRlZCBjb2RlIGFu
ZCBhIFNvdXJjZU1hcENvbnN1bWVyLgorICAgKgorICAgKiBAcGFyYW0gYUdlbmVyYXRlZENvZGUg
VGhlIGdlbmVyYXRlZCBjb2RlCisgICAqIEBwYXJhbSBhU291cmNlTWFwQ29uc3VtZXIgVGhlIFNv
dXJjZU1hcCBmb3IgdGhlIGdlbmVyYXRlZCBjb2RlCisgICAqLworICBTb3VyY2VOb2RlLmZyb21T
dHJpbmdXaXRoU291cmNlTWFwID0KKyAgICBmdW5jdGlvbiBTb3VyY2VOb2RlX2Zyb21TdHJpbmdX
aXRoU291cmNlTWFwKGFHZW5lcmF0ZWRDb2RlLCBhU291cmNlTWFwQ29uc3VtZXIpIHsKKyAgICAg
IC8vIFRoZSBTb3VyY2VOb2RlIHdlIHdhbnQgdG8gZmlsbCB3aXRoIHRoZSBnZW5lcmF0ZWQgY29k
ZQorICAgICAgLy8gYW5kIHRoZSBTb3VyY2VNYXAKKyAgICAgIHZhciBub2RlID0gbmV3IFNvdXJj
ZU5vZGUoKTsKKworICAgICAgLy8gVGhlIGdlbmVyYXRlZCBjb2RlCisgICAgICAvLyBQcm9jZXNz
ZWQgZnJhZ21lbnRzIGFyZSByZW1vdmVkIGZyb20gdGhpcyBhcnJheS4KKyAgICAgIHZhciByZW1h
aW5pbmdMaW5lcyA9IGFHZW5lcmF0ZWRDb2RlLnNwbGl0KCdcbicpOworCisgICAgICAvLyBXZSBu
ZWVkIHRvIHJlbWVtYmVyIHRoZSBwb3NpdGlvbiBvZiAicmVtYWluaW5nTGluZXMiCisgICAgICB2
YXIgbGFzdEdlbmVyYXRlZExpbmUgPSAxLCBsYXN0R2VuZXJhdGVkQ29sdW1uID0gMDsKKworICAg
ICAgLy8gVGhlIGdlbmVyYXRlIFNvdXJjZU5vZGVzIHdlIG5lZWQgYSBjb2RlIHJhbmdlLgorICAg
ICAgLy8gVG8gZXh0cmFjdCBpdCBjdXJyZW50IGFuZCBsYXN0IG1hcHBpbmcgaXMgdXNlZC4KKyAg
ICAgIC8vIEhlcmUgd2Ugc3RvcmUgdGhlIGxhc3QgbWFwcGluZy4KKyAgICAgIHZhciBsYXN0TWFw
cGluZyA9IG51bGw7CisKKyAgICAgIGFTb3VyY2VNYXBDb25zdW1lci5lYWNoTWFwcGluZyhmdW5j
dGlvbiAobWFwcGluZykgeworICAgICAgICBpZiAobGFzdE1hcHBpbmcgPT09IG51bGwpIHsKKyAg
ICAgICAgICAvLyBXZSBhZGQgdGhlIGdlbmVyYXRlZCBjb2RlIHVudGlsIHRoZSBmaXJzdCBtYXBw
aW5nCisgICAgICAgICAgLy8gdG8gdGhlIFNvdXJjZU5vZGUgd2l0aG91dCBhbnkgbWFwcGluZy4K
KyAgICAgICAgICAvLyBFYWNoIGxpbmUgaXMgYWRkZWQgYXMgc2VwYXJhdGUgc3RyaW5nLgorICAg
ICAgICAgIHdoaWxlIChsYXN0R2VuZXJhdGVkTGluZSA8IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSkg
eworICAgICAgICAgICAgbm9kZS5hZGQocmVtYWluaW5nTGluZXMuc2hpZnQoKSArICJcbiIpOwor
ICAgICAgICAgICAgbGFzdEdlbmVyYXRlZExpbmUrKzsKKyAgICAgICAgICB9CisgICAgICAgICAg
aWYgKGxhc3RHZW5lcmF0ZWRDb2x1bW4gPCBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbikgeworICAg
ICAgICAgICAgdmFyIG5leHRMaW5lID0gcmVtYWluaW5nTGluZXNbMF07CisgICAgICAgICAgICBu
b2RlLmFkZChuZXh0TGluZS5zdWJzdHIoMCwgbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4pKTsKKyAg
ICAgICAgICAgIHJlbWFpbmluZ0xpbmVzWzBdID0gbmV4dExpbmUuc3Vic3RyKG1hcHBpbmcuZ2Vu
ZXJhdGVkQ29sdW1uKTsKKyAgICAgICAgICAgIGxhc3RHZW5lcmF0ZWRDb2x1bW4gPSBtYXBwaW5n
LmdlbmVyYXRlZENvbHVtbjsKKyAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgLy8gV2UgYWRkIHRoZSBjb2RlIGZyb20gImxhc3RNYXBwaW5nIiB0byAibWFwcGluZyI6Cisg
ICAgICAgICAgLy8gRmlyc3QgY2hlY2sgaWYgdGhlcmUgaXMgYSBuZXcgbGluZSBpbiBiZXR3ZWVu
LgorICAgICAgICAgIGlmIChsYXN0R2VuZXJhdGVkTGluZSA8IG1hcHBpbmcuZ2VuZXJhdGVkTGlu
ZSkgeworICAgICAgICAgICAgdmFyIGNvZGUgPSAiIjsKKyAgICAgICAgICAgIC8vIEFzc29jaWF0
ZSBmdWxsIGxpbmVzIHdpdGggImxhc3RNYXBwaW5nIgorICAgICAgICAgICAgZG8geworICAgICAg
ICAgICAgICBjb2RlICs9IHJlbWFpbmluZ0xpbmVzLnNoaWZ0KCkgKyAiXG4iOworICAgICAgICAg
ICAgICBsYXN0R2VuZXJhdGVkTGluZSsrOworICAgICAgICAgICAgICBsYXN0R2VuZXJhdGVkQ29s
dW1uID0gMDsKKyAgICAgICAgICAgIH0gd2hpbGUgKGxhc3RHZW5lcmF0ZWRMaW5lIDwgbWFwcGlu
Zy5nZW5lcmF0ZWRMaW5lKTsKKyAgICAgICAgICAgIC8vIFdoZW4gd2UgcmVhY2hlZCB0aGUgY29y
cmVjdCBsaW5lLCB3ZSBhZGQgY29kZSB1bnRpbCB3ZQorICAgICAgICAgICAgLy8gcmVhY2ggdGhl
IGNvcnJlY3QgY29sdW1uIHRvby4KKyAgICAgICAgICAgIGlmIChsYXN0R2VuZXJhdGVkQ29sdW1u
IDwgbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4pIHsKKyAgICAgICAgICAgICAgdmFyIG5leHRMaW5l
ID0gcmVtYWluaW5nTGluZXNbMF07CisgICAgICAgICAgICAgIGNvZGUgKz0gbmV4dExpbmUuc3Vi
c3RyKDAsIG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uKTsKKyAgICAgICAgICAgICAgcmVtYWluaW5n
TGluZXNbMF0gPSBuZXh0TGluZS5zdWJzdHIobWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4pOworICAg
ICAgICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uID0gbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIFNvdXJjZU5vZGUuCisg
ICAgICAgICAgICBhZGRNYXBwaW5nV2l0aENvZGUobGFzdE1hcHBpbmcsIGNvZGUpOworICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBUaGVyZSBpcyBubyBuZXcgbGluZSBpbiBiZXR3
ZWVuLgorICAgICAgICAgICAgLy8gQXNzb2NpYXRlIHRoZSBjb2RlIGJldHdlZW4gImxhc3RHZW5l
cmF0ZWRDb2x1bW4iIGFuZAorICAgICAgICAgICAgLy8gIm1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1u
IiB3aXRoICJsYXN0TWFwcGluZyIKKyAgICAgICAgICAgIHZhciBuZXh0TGluZSA9IHJlbWFpbmlu
Z0xpbmVzWzBdOworICAgICAgICAgICAgdmFyIGNvZGUgPSBuZXh0TGluZS5zdWJzdHIoMCwgbWFw
cGluZy5nZW5lcmF0ZWRDb2x1bW4gLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGFzdEdlbmVyYXRlZENvbHVtbik7CisgICAgICAgICAgICByZW1haW5pbmdMaW5l
c1swXSA9IG5leHRMaW5lLnN1YnN0cihtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiAtCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0R2VuZXJhdGVkQ29s
dW1uKTsKKyAgICAgICAgICAgIGxhc3RHZW5lcmF0ZWRDb2x1bW4gPSBtYXBwaW5nLmdlbmVyYXRl
ZENvbHVtbjsKKyAgICAgICAgICAgIGFkZE1hcHBpbmdXaXRoQ29kZShsYXN0TWFwcGluZywgY29k
ZSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGxhc3RNYXBwaW5nID0gbWFwcGlu
ZzsKKyAgICAgIH0sIHRoaXMpOworICAgICAgLy8gV2UgaGF2ZSBwcm9jZXNzZWQgYWxsIG1hcHBp
bmdzLgorICAgICAgLy8gQXNzb2NpYXRlIHRoZSByZW1haW5pbmcgY29kZSBpbiB0aGUgY3VycmVu
dCBsaW5lIHdpdGggImxhc3RNYXBwaW5nIgorICAgICAgLy8gYW5kIGFkZCB0aGUgcmVtYWluaW5n
IGxpbmVzIHdpdGhvdXQgYW55IG1hcHBpbmcKKyAgICAgIGFkZE1hcHBpbmdXaXRoQ29kZShsYXN0
TWFwcGluZywgcmVtYWluaW5nTGluZXMuam9pbigiXG4iKSk7CisKKyAgICAgIC8vIENvcHkgc291
cmNlc0NvbnRlbnQgaW50byBTb3VyY2VOb2RlCisgICAgICBhU291cmNlTWFwQ29uc3VtZXIuc291
cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2VGaWxlKSB7CisgICAgICAgIHZhciBjb250ZW50
ID0gYVNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZUNvbnRlbnRGb3Ioc291cmNlRmlsZSk7CisgICAg
ICAgIGlmIChjb250ZW50KSB7CisgICAgICAgICAgbm9kZS5zZXRTb3VyY2VDb250ZW50KHNvdXJj
ZUZpbGUsIGNvbnRlbnQpOworICAgICAgICB9CisgICAgICB9KTsKKworICAgICAgcmV0dXJuIG5v
ZGU7CisKKyAgICAgIGZ1bmN0aW9uIGFkZE1hcHBpbmdXaXRoQ29kZShtYXBwaW5nLCBjb2RlKSB7
CisgICAgICAgIGlmIChtYXBwaW5nID09PSBudWxsIHx8IG1hcHBpbmcuc291cmNlID09PSB1bmRl
ZmluZWQpIHsKKyAgICAgICAgICBub2RlLmFkZChjb2RlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICBub2RlLmFkZChuZXcgU291cmNlTm9kZShtYXBwaW5nLm9yaWdpbmFsTGluZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcuc291cmNlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWFwcGluZy5uYW1lKSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9Owor
CisgIC8qKgorICAgKiBBZGQgYSBjaHVuayBvZiBnZW5lcmF0ZWQgSlMgdG8gdGhpcyBzb3VyY2Ug
bm9kZS4KKyAgICoKKyAgICogQHBhcmFtIGFDaHVuayBBIHN0cmluZyBzbmlwcGV0IG9mIGdlbmVy
YXRlZCBKUyBjb2RlLCBhbm90aGVyIGluc3RhbmNlIG9mCisgICAqICAgICAgICBTb3VyY2VOb2Rl
LCBvciBhbiBhcnJheSB3aGVyZSBlYWNoIG1lbWJlciBpcyBvbmUgb2YgdGhvc2UgdGhpbmdzLgor
ICAgKi8KKyAgU291cmNlTm9kZS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gU291cmNlTm9kZV9h
ZGQoYUNodW5rKSB7CisgICAgaWYgKEFycmF5LmlzQXJyYXkoYUNodW5rKSkgeworICAgICAgYUNo
dW5rLmZvckVhY2goZnVuY3Rpb24gKGNodW5rKSB7CisgICAgICAgIHRoaXMuYWRkKGNodW5rKTsK
KyAgICAgIH0sIHRoaXMpOworICAgIH0KKyAgICBlbHNlIGlmIChhQ2h1bmsgaW5zdGFuY2VvZiBT
b3VyY2VOb2RlIHx8IHR5cGVvZiBhQ2h1bmsgPT09ICJzdHJpbmciKSB7CisgICAgICBpZiAoYUNo
dW5rKSB7CisgICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChhQ2h1bmspOworICAgICAgfQorICAg
IH0KKyAgICBlbHNlIHsKKyAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoCisgICAgICAgICJFeHBl
Y3RlZCBhIFNvdXJjZU5vZGUsIHN0cmluZywgb3IgYW4gYXJyYXkgb2YgU291cmNlTm9kZXMgYW5k
IHN0cmluZ3MuIEdvdCAiICsgYUNodW5rCisgICAgICApOworICAgIH0KKyAgICByZXR1cm4gdGhp
czsKKyAgfTsKKworICAvKioKKyAgICogQWRkIGEgY2h1bmsgb2YgZ2VuZXJhdGVkIEpTIHRvIHRo
ZSBiZWdpbm5pbmcgb2YgdGhpcyBzb3VyY2Ugbm9kZS4KKyAgICoKKyAgICogQHBhcmFtIGFDaHVu
ayBBIHN0cmluZyBzbmlwcGV0IG9mIGdlbmVyYXRlZCBKUyBjb2RlLCBhbm90aGVyIGluc3RhbmNl
IG9mCisgICAqICAgICAgICBTb3VyY2VOb2RlLCBvciBhbiBhcnJheSB3aGVyZSBlYWNoIG1lbWJl
ciBpcyBvbmUgb2YgdGhvc2UgdGhpbmdzLgorICAgKi8KKyAgU291cmNlTm9kZS5wcm90b3R5cGUu
cHJlcGVuZCA9IGZ1bmN0aW9uIFNvdXJjZU5vZGVfcHJlcGVuZChhQ2h1bmspIHsKKyAgICBpZiAo
QXJyYXkuaXNBcnJheShhQ2h1bmspKSB7CisgICAgICBmb3IgKHZhciBpID0gYUNodW5rLmxlbmd0
aC0xOyBpID49IDA7IGktLSkgeworICAgICAgICB0aGlzLnByZXBlbmQoYUNodW5rW2ldKTsKKyAg
ICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoYUNodW5rIGluc3RhbmNlb2YgU291cmNlTm9kZSB8
fCB0eXBlb2YgYUNodW5rID09PSAic3RyaW5nIikgeworICAgICAgdGhpcy5jaGlsZHJlbi51bnNo
aWZ0KGFDaHVuayk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgdGhyb3cgbmV3IFR5cGVFcnJv
cigKKyAgICAgICAgIkV4cGVjdGVkIGEgU291cmNlTm9kZSwgc3RyaW5nLCBvciBhbiBhcnJheSBv
ZiBTb3VyY2VOb2RlcyBhbmQgc3RyaW5ncy4gR290ICIgKyBhQ2h1bmsKKyAgICAgICk7CisgICAg
fQorICAgIHJldHVybiB0aGlzOworICB9OworCisgIC8qKgorICAgKiBXYWxrIG92ZXIgdGhlIHRy
ZWUgb2YgSlMgc25pcHBldHMgaW4gdGhpcyBub2RlIGFuZCBpdHMgY2hpbGRyZW4uIFRoZQorICAg
KiB3YWxraW5nIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmNlIGZvciBlYWNoIHNuaXBwZXQgb2YgSlMg
YW5kIGlzIHBhc3NlZCB0aGF0CisgICAqIHNuaXBwZXQgYW5kIHRoZSBpdHMgb3JpZ2luYWwgYXNz
b2NpYXRlZCBzb3VyY2UncyBsaW5lL2NvbHVtbiBsb2NhdGlvbi4KKyAgICoKKyAgICogQHBhcmFt
IGFGbiBUaGUgdHJhdmVyc2FsIGZ1bmN0aW9uLgorICAgKi8KKyAgU291cmNlTm9kZS5wcm90b3R5
cGUud2FsayA9IGZ1bmN0aW9uIFNvdXJjZU5vZGVfd2FsayhhRm4pIHsKKyAgICB0aGlzLmNoaWxk
cmVuLmZvckVhY2goZnVuY3Rpb24gKGNodW5rKSB7CisgICAgICBpZiAoY2h1bmsgaW5zdGFuY2Vv
ZiBTb3VyY2VOb2RlKSB7CisgICAgICAgIGNodW5rLndhbGsoYUZuKTsKKyAgICAgIH0KKyAgICAg
IGVsc2UgeworICAgICAgICBpZiAoY2h1bmsgIT09ICcnKSB7CisgICAgICAgICAgYUZuKGNodW5r
LCB7IHNvdXJjZTogdGhpcy5zb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IHRo
aXMubGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiB0aGlzLmNvbHVtbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lIH0pOworICAgICAgICB9CisgICAg
ICB9CisgICAgfSwgdGhpcyk7CisgIH07CisKKyAgLyoqCisgICAqIExpa2UgYFN0cmluZy5wcm90
b3R5cGUuam9pbmAgZXhjZXB0IGZvciBTb3VyY2VOb2Rlcy4gSW5zZXJ0cyBgYVN0cmAgYmV0d2Vl
bgorICAgKiBlYWNoIG9mIGB0aGlzLmNoaWxkcmVuYC4KKyAgICoKKyAgICogQHBhcmFtIGFTZXAg
VGhlIHNlcGFyYXRvci4KKyAgICovCisgIFNvdXJjZU5vZGUucHJvdG90eXBlLmpvaW4gPSBmdW5j
dGlvbiBTb3VyY2VOb2RlX2pvaW4oYVNlcCkgeworICAgIHZhciBuZXdDaGlsZHJlbjsKKyAgICB2
YXIgaTsKKyAgICB2YXIgbGVuID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7CisgICAgaWYgKGxlbiA+
IDApIHsKKyAgICAgIG5ld0NoaWxkcmVuID0gW107CisgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVu
LTE7IGkrKykgeworICAgICAgICBuZXdDaGlsZHJlbi5wdXNoKHRoaXMuY2hpbGRyZW5baV0pOwor
ICAgICAgICBuZXdDaGlsZHJlbi5wdXNoKGFTZXApOworICAgICAgfQorICAgICAgbmV3Q2hpbGRy
ZW4ucHVzaCh0aGlzLmNoaWxkcmVuW2ldKTsKKyAgICAgIHRoaXMuY2hpbGRyZW4gPSBuZXdDaGls
ZHJlbjsKKyAgICB9CisgICAgcmV0dXJuIHRoaXM7CisgIH07CisKKyAgLyoqCisgICAqIENhbGwg
U3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlIG9uIHRoZSB2ZXJ5IHJpZ2h0LW1vc3Qgc291cmNlIHNu
aXBwZXQuIFVzZWZ1bAorICAgKiBmb3IgdHJpbW1pbmcgd2hpdGVzcGFjZSBmcm9tIHRoZSBlbmQg
b2YgYSBzb3VyY2Ugbm9kZSwgZXRjLgorICAgKgorICAgKiBAcGFyYW0gYVBhdHRlcm4gVGhlIHBh
dHRlcm4gdG8gcmVwbGFjZS4KKyAgICogQHBhcmFtIGFSZXBsYWNlbWVudCBUaGUgdGhpbmcgdG8g
cmVwbGFjZSB0aGUgcGF0dGVybiB3aXRoLgorICAgKi8KKyAgU291cmNlTm9kZS5wcm90b3R5cGUu
cmVwbGFjZVJpZ2h0ID0gZnVuY3Rpb24gU291cmNlTm9kZV9yZXBsYWNlUmlnaHQoYVBhdHRlcm4s
IGFSZXBsYWNlbWVudCkgeworICAgIHZhciBsYXN0Q2hpbGQgPSB0aGlzLmNoaWxkcmVuW3RoaXMu
Y2hpbGRyZW4ubGVuZ3RoIC0gMV07CisgICAgaWYgKGxhc3RDaGlsZCBpbnN0YW5jZW9mIFNvdXJj
ZU5vZGUpIHsKKyAgICAgIGxhc3RDaGlsZC5yZXBsYWNlUmlnaHQoYVBhdHRlcm4sIGFSZXBsYWNl
bWVudCk7CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGVvZiBsYXN0Q2hpbGQgPT09ICdzdHJpbmcn
KSB7CisgICAgICB0aGlzLmNoaWxkcmVuW3RoaXMuY2hpbGRyZW4ubGVuZ3RoIC0gMV0gPSBsYXN0
Q2hpbGQucmVwbGFjZShhUGF0dGVybiwgYVJlcGxhY2VtZW50KTsKKyAgICB9CisgICAgZWxzZSB7
CisgICAgICB0aGlzLmNoaWxkcmVuLnB1c2goJycucmVwbGFjZShhUGF0dGVybiwgYVJlcGxhY2Vt
ZW50KSk7CisgICAgfQorICAgIHJldHVybiB0aGlzOworICB9OworCisgIC8qKgorICAgKiBTZXQg
dGhlIHNvdXJjZSBjb250ZW50IGZvciBhIHNvdXJjZSBmaWxlLiBUaGlzIHdpbGwgYmUgYWRkZWQg
dG8gdGhlIFNvdXJjZU1hcEdlbmVyYXRvcgorICAgKiBpbiB0aGUgc291cmNlc0NvbnRlbnQgZmll
bGQuCisgICAqCisgICAqIEBwYXJhbSBhU291cmNlRmlsZSBUaGUgZmlsZW5hbWUgb2YgdGhlIHNv
dXJjZSBmaWxlCisgICAqIEBwYXJhbSBhU291cmNlQ29udGVudCBUaGUgY29udGVudCBvZiB0aGUg
c291cmNlIGZpbGUKKyAgICovCisgIFNvdXJjZU5vZGUucHJvdG90eXBlLnNldFNvdXJjZUNvbnRl
bnQgPQorICAgIGZ1bmN0aW9uIFNvdXJjZU5vZGVfc2V0U291cmNlQ29udGVudChhU291cmNlRmls
ZSwgYVNvdXJjZUNvbnRlbnQpIHsKKyAgICAgIHRoaXMuc291cmNlQ29udGVudHNbdXRpbC50b1Nl
dFN0cmluZyhhU291cmNlRmlsZSldID0gYVNvdXJjZUNvbnRlbnQ7CisgICAgfTsKKworICAvKioK
KyAgICogV2FsayBvdmVyIHRoZSB0cmVlIG9mIFNvdXJjZU5vZGVzLiBUaGUgd2Fsa2luZyBmdW5j
dGlvbiBpcyBjYWxsZWQgZm9yIGVhY2gKKyAgICogc291cmNlIGZpbGUgY29udGVudCBhbmQgaXMg
cGFzc2VkIHRoZSBmaWxlbmFtZSBhbmQgc291cmNlIGNvbnRlbnQuCisgICAqCisgICAqIEBwYXJh
bSBhRm4gVGhlIHRyYXZlcnNhbCBmdW5jdGlvbi4KKyAgICovCisgIFNvdXJjZU5vZGUucHJvdG90
eXBlLndhbGtTb3VyY2VDb250ZW50cyA9CisgICAgZnVuY3Rpb24gU291cmNlTm9kZV93YWxrU291
cmNlQ29udGVudHMoYUZuKSB7CisgICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24g
KGNodW5rKSB7CisgICAgICAgIGlmIChjaHVuayBpbnN0YW5jZW9mIFNvdXJjZU5vZGUpIHsKKyAg
ICAgICAgICBjaHVuay53YWxrU291cmNlQ29udGVudHMoYUZuKTsKKyAgICAgICAgfQorICAgICAg
fSwgdGhpcyk7CisgICAgICBPYmplY3Qua2V5cyh0aGlzLnNvdXJjZUNvbnRlbnRzKS5mb3JFYWNo
KGZ1bmN0aW9uIChzb3VyY2VGaWxlS2V5KSB7CisgICAgICAgIGFGbih1dGlsLmZyb21TZXRTdHJp
bmcoc291cmNlRmlsZUtleSksIHRoaXMuc291cmNlQ29udGVudHNbc291cmNlRmlsZUtleV0pOwor
ICAgICAgfSwgdGhpcyk7CisgICAgfTsKKworICAvKioKKyAgICogUmV0dXJuIHRoZSBzdHJpbmcg
cmVwcmVzZW50YXRpb24gb2YgdGhpcyBzb3VyY2Ugbm9kZS4gV2Fsa3Mgb3ZlciB0aGUgdHJlZQor
ICAgKiBhbmQgY29uY2F0ZW5hdGVzIGFsbCB0aGUgdmFyaW91cyBzbmlwcGV0cyB0b2dldGhlciB0
byBvbmUgc3RyaW5nLgorICAgKi8KKyAgU291cmNlTm9kZS5wcm90b3R5cGUudG9TdHJpbmcgPSBm
dW5jdGlvbiBTb3VyY2VOb2RlX3RvU3RyaW5nKCkgeworICAgIHZhciBzdHIgPSAiIjsKKyAgICB0
aGlzLndhbGsoZnVuY3Rpb24gKGNodW5rKSB7CisgICAgICBzdHIgKz0gY2h1bms7CisgICAgfSk7
CisgICAgcmV0dXJuIHN0cjsKKyAgfTsKKworICAvKioKKyAgICogUmV0dXJucyB0aGUgc3RyaW5n
IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgc291cmNlIG5vZGUgYWxvbmcgd2l0aCBhIHNvdXJjZQor
ICAgKiBtYXAuCisgICAqLworICBTb3VyY2VOb2RlLnByb3RvdHlwZS50b1N0cmluZ1dpdGhTb3Vy
Y2VNYXAgPSBmdW5jdGlvbiBTb3VyY2VOb2RlX3RvU3RyaW5nV2l0aFNvdXJjZU1hcChhQXJncykg
eworICAgIHZhciBnZW5lcmF0ZWQgPSB7CisgICAgICBjb2RlOiAiIiwKKyAgICAgIGxpbmU6IDEs
CisgICAgICBjb2x1bW46IDAKKyAgICB9OworICAgIHZhciBtYXAgPSBuZXcgU291cmNlTWFwR2Vu
ZXJhdG9yKGFBcmdzKTsKKyAgICB2YXIgc291cmNlTWFwcGluZ0FjdGl2ZSA9IGZhbHNlOworICAg
IHRoaXMud2FsayhmdW5jdGlvbiAoY2h1bmssIG9yaWdpbmFsKSB7CisgICAgICBnZW5lcmF0ZWQu
Y29kZSArPSBjaHVuazsKKyAgICAgIGlmIChvcmlnaW5hbC5zb3VyY2UgIT09IG51bGwKKyAgICAg
ICAgICAmJiBvcmlnaW5hbC5saW5lICE9PSBudWxsCisgICAgICAgICAgJiYgb3JpZ2luYWwuY29s
dW1uICE9PSBudWxsKSB7CisgICAgICAgIG1hcC5hZGRNYXBwaW5nKHsKKyAgICAgICAgICBzb3Vy
Y2U6IG9yaWdpbmFsLnNvdXJjZSwKKyAgICAgICAgICBvcmlnaW5hbDogeworICAgICAgICAgICAg
bGluZTogb3JpZ2luYWwubGluZSwKKyAgICAgICAgICAgIGNvbHVtbjogb3JpZ2luYWwuY29sdW1u
CisgICAgICAgICAgfSwKKyAgICAgICAgICBnZW5lcmF0ZWQ6IHsKKyAgICAgICAgICAgIGxpbmU6
IGdlbmVyYXRlZC5saW5lLAorICAgICAgICAgICAgY29sdW1uOiBnZW5lcmF0ZWQuY29sdW1uCisg
ICAgICAgICAgfSwKKyAgICAgICAgICBuYW1lOiBvcmlnaW5hbC5uYW1lCisgICAgICAgIH0pOwor
ICAgICAgICBzb3VyY2VNYXBwaW5nQWN0aXZlID0gdHJ1ZTsKKyAgICAgIH0gZWxzZSBpZiAoc291
cmNlTWFwcGluZ0FjdGl2ZSkgeworICAgICAgICBtYXAuYWRkTWFwcGluZyh7CisgICAgICAgICAg
Z2VuZXJhdGVkOiB7CisgICAgICAgICAgICBsaW5lOiBnZW5lcmF0ZWQubGluZSwKKyAgICAgICAg
ICAgIGNvbHVtbjogZ2VuZXJhdGVkLmNvbHVtbgorICAgICAgICAgIH0KKyAgICAgICAgfSk7Cisg
ICAgICAgIHNvdXJjZU1hcHBpbmdBY3RpdmUgPSBmYWxzZTsKKyAgICAgIH0KKyAgICAgIGNodW5r
LnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChjaCkgeworICAgICAgICBpZiAoY2ggPT09ICdc
bicpIHsKKyAgICAgICAgICBnZW5lcmF0ZWQubGluZSsrOworICAgICAgICAgIGdlbmVyYXRlZC5j
b2x1bW4gPSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGdlbmVyYXRlZC5jb2x1bW4r
KzsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgfSk7CisgICAgdGhpcy53YWxrU291cmNlQ29u
dGVudHMoZnVuY3Rpb24gKHNvdXJjZUZpbGUsIHNvdXJjZUNvbnRlbnQpIHsKKyAgICAgIG1hcC5z
ZXRTb3VyY2VDb250ZW50KHNvdXJjZUZpbGUsIHNvdXJjZUNvbnRlbnQpOworICAgIH0pOworCisg
ICAgcmV0dXJuIHsgY29kZTogZ2VuZXJhdGVkLmNvZGUsIG1hcDogbWFwIH07CisgIH07CisKKyAg
ZXhwb3J0cy5Tb3VyY2VOb2RlID0gU291cmNlTm9kZTsKKworfSk7CisKK30seyIuL3NvdXJjZS1t
YXAtZ2VuZXJhdG9yIjoxMSwiLi91dGlsIjoxMywiYW1kZWZpbmUiOjE0fV0sMTM6W2Z1bmN0aW9u
KHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2
ZWw6IDI7IC0qLSAqLworLyoKKyAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBh
bmQgY29udHJpYnV0b3JzCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBT
ZWUgTElDRU5TRSBvcjoKKyAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1D
bGF1c2UKKyAqLworaWYgKHR5cGVvZiBkZWZpbmUgIT09ICdmdW5jdGlvbicpIHsKKyAgICB2YXIg
ZGVmaW5lID0gcmVxdWlyZSgnYW1kZWZpbmUnKShtb2R1bGUsIHJlcXVpcmUpOworfQorZGVmaW5l
KGZ1bmN0aW9uIChyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworICAvKioKKyAgICogVGhp
cyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgZ2V0dGluZyB2YWx1ZXMgZnJvbSBwYXJhbWV0ZXIv
b3B0aW9ucworICAgKiBvYmplY3RzLgorICAgKgorICAgKiBAcGFyYW0gYXJncyBUaGUgb2JqZWN0
IHdlIGFyZSBleHRyYWN0aW5nIHZhbHVlcyBmcm9tCisgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1l
IG9mIHRoZSBwcm9wZXJ0eSB3ZSBhcmUgZ2V0dGluZy4KKyAgICogQHBhcmFtIGRlZmF1bHRWYWx1
ZSBBbiBvcHRpb25hbCB2YWx1ZSB0byByZXR1cm4gaWYgdGhlIHByb3BlcnR5IGlzIG1pc3NpbmcK
KyAgICogZnJvbSB0aGUgb2JqZWN0LiBJZiB0aGlzIGlzIG5vdCBzcGVjaWZpZWQgYW5kIHRoZSBw
cm9wZXJ0eSBpcyBtaXNzaW5nLCBhbgorICAgKiBlcnJvciB3aWxsIGJlIHRocm93bi4KKyAgICov
CisgIGZ1bmN0aW9uIGdldEFyZyhhQXJncywgYU5hbWUsIGFEZWZhdWx0VmFsdWUpIHsKKyAgICBp
ZiAoYU5hbWUgaW4gYUFyZ3MpIHsKKyAgICAgIHJldHVybiBhQXJnc1thTmFtZV07CisgICAgfSBl
bHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7CisgICAgICByZXR1cm4gYURlZmF1bHRW
YWx1ZTsKKyAgICB9IGVsc2UgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCciJyArIGFOYW1lICsg
JyIgaXMgYSByZXF1aXJlZCBhcmd1bWVudC4nKTsKKyAgICB9CisgIH0KKyAgZXhwb3J0cy5nZXRB
cmcgPSBnZXRBcmc7CisKKyAgdmFyIHVybFJlZ2V4cCA9IC8oW1x3K1wtLl0rKTpcL1wvKChcdys6
XHcrKUApPyhbXHcuXSspPyg6KFxkKykpPyhcUyspPy87CisKKyAgZnVuY3Rpb24gdXJsUGFyc2Uo
YVVybCkgeworICAgIHZhciBtYXRjaCA9IGFVcmwubWF0Y2godXJsUmVnZXhwKTsKKyAgICBpZiAo
IW1hdGNoKSB7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgcmV0dXJuIHsKKyAgICAg
IHNjaGVtZTogbWF0Y2hbMV0sCisgICAgICBhdXRoOiBtYXRjaFszXSwKKyAgICAgIGhvc3Q6IG1h
dGNoWzRdLAorICAgICAgcG9ydDogbWF0Y2hbNl0sCisgICAgICBwYXRoOiBtYXRjaFs3XQorICAg
IH07CisgIH0KKyAgZXhwb3J0cy51cmxQYXJzZSA9IHVybFBhcnNlOworCisgIGZ1bmN0aW9uIHVy
bEdlbmVyYXRlKGFQYXJzZWRVcmwpIHsKKyAgICB2YXIgdXJsID0gYVBhcnNlZFVybC5zY2hlbWUg
KyAiOi8vIjsKKyAgICBpZiAoYVBhcnNlZFVybC5hdXRoKSB7CisgICAgICB1cmwgKz0gYVBhcnNl
ZFVybC5hdXRoICsgIkAiCisgICAgfQorICAgIGlmIChhUGFyc2VkVXJsLmhvc3QpIHsKKyAgICAg
IHVybCArPSBhUGFyc2VkVXJsLmhvc3Q7CisgICAgfQorICAgIGlmIChhUGFyc2VkVXJsLnBvcnQp
IHsKKyAgICAgIHVybCArPSAiOiIgKyBhUGFyc2VkVXJsLnBvcnQKKyAgICB9CisgICAgaWYgKGFQ
YXJzZWRVcmwucGF0aCkgeworICAgICAgdXJsICs9IGFQYXJzZWRVcmwucGF0aDsKKyAgICB9Cisg
ICAgcmV0dXJuIHVybDsKKyAgfQorICBleHBvcnRzLnVybEdlbmVyYXRlID0gdXJsR2VuZXJhdGU7
CisKKyAgZnVuY3Rpb24gam9pbihhUm9vdCwgYVBhdGgpIHsKKyAgICB2YXIgdXJsOworCisgICAg
aWYgKGFQYXRoLm1hdGNoKHVybFJlZ2V4cCkpIHsKKyAgICAgIHJldHVybiBhUGF0aDsKKyAgICB9
CisKKyAgICBpZiAoYVBhdGguY2hhckF0KDApID09PSAnLycgJiYgKHVybCA9IHVybFBhcnNlKGFS
b290KSkpIHsKKyAgICAgIHVybC5wYXRoID0gYVBhdGg7CisgICAgICByZXR1cm4gdXJsR2VuZXJh
dGUodXJsKTsKKyAgICB9CisKKyAgICByZXR1cm4gYVJvb3QucmVwbGFjZSgvXC8kLywgJycpICsg
Jy8nICsgYVBhdGg7CisgIH0KKyAgZXhwb3J0cy5qb2luID0gam9pbjsKKworICAvKioKKyAgICog
QmVjYXVzZSBiZWhhdmlvciBnb2VzIHdhY2t5IHdoZW4geW91IHNldCBgX19wcm90b19fYCBvbiBv
YmplY3RzLCB3ZQorICAgKiBoYXZlIHRvIHByZWZpeCBhbGwgdGhlIHN0cmluZ3MgaW4gb3VyIHNl
dCB3aXRoIGFuIGFyYml0cmFyeSBjaGFyYWN0ZXIuCisgICAqCisgICAqIFNlZSBodHRwczovL2dp
dGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL3B1bGwvMzEgYW5kCisgICAqIGh0dHBzOi8vZ2l0
aHViLmNvbS9tb3ppbGxhL3NvdXJjZS1tYXAvaXNzdWVzLzMwCisgICAqCisgICAqIEBwYXJhbSBT
dHJpbmcgYVN0cgorICAgKi8KKyAgZnVuY3Rpb24gdG9TZXRTdHJpbmcoYVN0cikgeworICAgIHJl
dHVybiAnJCcgKyBhU3RyOworICB9CisgIGV4cG9ydHMudG9TZXRTdHJpbmcgPSB0b1NldFN0cmlu
ZzsKKworICBmdW5jdGlvbiBmcm9tU2V0U3RyaW5nKGFTdHIpIHsKKyAgICByZXR1cm4gYVN0ci5z
dWJzdHIoMSk7CisgIH0KKyAgZXhwb3J0cy5mcm9tU2V0U3RyaW5nID0gZnJvbVNldFN0cmluZzsK
KworICBmdW5jdGlvbiByZWxhdGl2ZShhUm9vdCwgYVBhdGgpIHsKKyAgICBhUm9vdCA9IGFSb290
LnJlcGxhY2UoL1wvJC8sICcnKTsKKworICAgIHZhciB1cmwgPSB1cmxQYXJzZShhUm9vdCk7Cisg
ICAgaWYgKGFQYXRoLmNoYXJBdCgwKSA9PSAiLyIgJiYgdXJsICYmIHVybC5wYXRoID09ICIvIikg
eworICAgICAgcmV0dXJuIGFQYXRoLnNsaWNlKDEpOworICAgIH0KKworICAgIHJldHVybiBhUGF0
aC5pbmRleE9mKGFSb290ICsgJy8nKSA9PT0gMAorICAgICAgPyBhUGF0aC5zdWJzdHIoYVJvb3Qu
bGVuZ3RoICsgMSkKKyAgICAgIDogYVBhdGg7CisgIH0KKyAgZXhwb3J0cy5yZWxhdGl2ZSA9IHJl
bGF0aXZlOworCit9KTsKKworfSx7ImFtZGVmaW5lIjoxNH1dLDE0OltmdW5jdGlvbihyZXF1aXJl
LG1vZHVsZSxleHBvcnRzKXsKKyhmdW5jdGlvbihwcm9jZXNzLF9fZmlsZW5hbWUpey8qKiB2aW06
IGV0OnRzPTQ6c3c9NDpzdHM9NAorICogQGxpY2Vuc2UgYW1kZWZpbmUgMC4wLjUgQ29weXJpZ2h0
IChjKSAyMDExLCBUaGUgRG9qbyBGb3VuZGF0aW9uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBB
dmFpbGFibGUgdmlhIHRoZSBNSVQgb3IgbmV3IEJTRCBsaWNlbnNlLgorICogc2VlOiBodHRwOi8v
Z2l0aHViLmNvbS9qcmJ1cmtlL2FtZGVmaW5lIGZvciBkZXRhaWxzCisgKi8KKworLypqc2xpbnQg
bm9kZTogdHJ1ZSAqLworLypnbG9iYWwgbW9kdWxlLCBwcm9jZXNzICovCisndXNlIHN0cmljdCc7
CisKK3ZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpOworCisvKioKKyAqIENyZWF0ZXMgYSBkZWZp
bmUgZm9yIG5vZGUuCisgKiBAcGFyYW0ge09iamVjdH0gbW9kdWxlIHRoZSAibW9kdWxlIiBvYmpl
Y3QgdGhhdCBpcyBkZWZpbmVkIGJ5IE5vZGUgZm9yIHRoZQorICogY3VycmVudCBtb2R1bGUuCisg
KiBAcGFyYW0ge0Z1bmN0aW9ufSBbcmVxdWlyZV0uIE5vZGUncyByZXF1aXJlIGZ1bmN0aW9uIGZv
ciB0aGUgY3VycmVudCBtb2R1bGUuCisgKiBJdCBvbmx5IG5lZWRzIHRvIGJlIHBhc3NlZCBpbiBO
b2RlIHZlcnNpb25zIGJlZm9yZSAwLjUsIHdoZW4gbW9kdWxlLnJlcXVpcmUKKyAqIGRpZCBub3Qg
ZXhpc3QuCisgKiBAcmV0dXJucyB7RnVuY3Rpb259IGEgZGVmaW5lIGZ1bmN0aW9uIHRoYXQgaXMg
dXNhYmxlIGZvciB0aGUgY3VycmVudCBub2RlCisgKiBtb2R1bGUuCisgKi8KK2Z1bmN0aW9uIGFt
ZGVmaW5lKG1vZHVsZSwgcmVxdWlyZSkgeworICAgIHZhciBkZWZpbmVDYWNoZSA9IHt9LAorICAg
ICAgICBsb2FkZXJDYWNoZSA9IHt9LAorICAgICAgICBhbHJlYWR5Q2FsbGVkID0gZmFsc2UsCisg
ICAgICAgIG1ha2VSZXF1aXJlLCBzdHJpbmdSZXF1aXJlOworCisgICAgLyoqCisgICAgICogVHJp
bXMgdGhlIC4gYW5kIC4uIGZyb20gYW4gYXJyYXkgb2YgcGF0aCBzZWdtZW50cy4KKyAgICAgKiBJ
dCB3aWxsIGtlZXAgYSBsZWFkaW5nIHBhdGggc2VnbWVudCBpZiBhIC4uIHdpbGwgYmVjb21lCisg
ICAgICogdGhlIGZpcnN0IHBhdGggc2VnbWVudCwgdG8gaGVscCB3aXRoIG1vZHVsZSBuYW1lIGxv
b2t1cHMsCisgICAgICogd2hpY2ggYWN0IGxpa2UgcGF0aHMsIGJ1dCBjYW4gYmUgcmVtYXBwZWQu
IEJ1dCB0aGUgZW5kIHJlc3VsdCwKKyAgICAgKiBhbGwgcGF0aHMgdGhhdCB1c2UgdGhpcyBmdW5j
dGlvbiBzaG91bGQgbG9vayBub3JtYWxpemVkLgorICAgICAqIE5PVEU6IHRoaXMgbWV0aG9kIE1P
RElGSUVTIHRoZSBpbnB1dCBhcnJheS4KKyAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnkgdGhlIGFy
cmF5IG9mIHBhdGggc2VnbWVudHMuCisgICAgICovCisgICAgZnVuY3Rpb24gdHJpbURvdHMoYXJ5
KSB7CisgICAgICAgIHZhciBpLCBwYXJ0OworICAgICAgICBmb3IgKGkgPSAwOyBhcnlbaV07IGkr
PSAxKSB7CisgICAgICAgICAgICBwYXJ0ID0gYXJ5W2ldOworICAgICAgICAgICAgaWYgKHBhcnQg
PT09ICcuJykgeworICAgICAgICAgICAgICAgIGFyeS5zcGxpY2UoaSwgMSk7CisgICAgICAgICAg
ICAgICAgaSAtPSAxOworICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJ0ID09PSAnLi4nKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGkgPT09IDEgJiYgKGFyeVsyXSA9PT0gJy4uJyB8fCBhcnlbMF0g
PT09ICcuLicpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vRW5kIG9mIHRoZSBsaW5lLiBLZWVw
IGF0IGxlYXN0IG9uZSBub24tZG90CisgICAgICAgICAgICAgICAgICAgIC8vcGF0aCBzZWdtZW50
IGF0IHRoZSBmcm9udCBzbyBpdCBjYW4gYmUgbWFwcGVkCisgICAgICAgICAgICAgICAgICAgIC8v
Y29ycmVjdGx5IHRvIGRpc2suIE90aGVyd2lzZSwgdGhlcmUgaXMgbGlrZWx5CisgICAgICAgICAg
ICAgICAgICAgIC8vbm8gcGF0aCBtYXBwaW5nIGZvciBhIHBhdGggc3RhcnRpbmcgd2l0aCAnLi4n
LgorICAgICAgICAgICAgICAgICAgICAvL1RoaXMgY2FuIHN0aWxsIGZhaWwsIGJ1dCBjYXRjaGVz
IHRoZSBtb3N0IHJlYXNvbmFibGUKKyAgICAgICAgICAgICAgICAgICAgLy91c2VzIG9mIC4uCisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA+
IDApIHsKKyAgICAgICAgICAgICAgICAgICAgYXJ5LnNwbGljZShpIC0gMSwgMik7CisgICAgICAg
ICAgICAgICAgICAgIGkgLT0gMjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBub3JtYWxpemUobmFtZSwgYmFzZU5hbWUp
IHsKKyAgICAgICAgdmFyIGJhc2VQYXJ0czsKKworICAgICAgICAvL0FkanVzdCBhbnkgcmVsYXRp
dmUgcGF0aHMuCisgICAgICAgIGlmIChuYW1lICYmIG5hbWUuY2hhckF0KDApID09PSAnLicpIHsK
KyAgICAgICAgICAgIC8vSWYgaGF2ZSBhIGJhc2UgbmFtZSwgdHJ5IHRvIG5vcm1hbGl6ZSBhZ2Fp
bnN0IGl0LAorICAgICAgICAgICAgLy9vdGhlcndpc2UsIGFzc3VtZSBpdCBpcyBhIHRvcC1sZXZl
bCByZXF1aXJlIHRoYXQgd2lsbAorICAgICAgICAgICAgLy9iZSByZWxhdGl2ZSB0byBiYXNlVXJs
IGluIHRoZSBlbmQuCisgICAgICAgICAgICBpZiAoYmFzZU5hbWUpIHsKKyAgICAgICAgICAgICAg
ICBiYXNlUGFydHMgPSBiYXNlTmFtZS5zcGxpdCgnLycpOworICAgICAgICAgICAgICAgIGJhc2VQ
YXJ0cyA9IGJhc2VQYXJ0cy5zbGljZSgwLCBiYXNlUGFydHMubGVuZ3RoIC0gMSk7CisgICAgICAg
ICAgICAgICAgYmFzZVBhcnRzID0gYmFzZVBhcnRzLmNvbmNhdChuYW1lLnNwbGl0KCcvJykpOwor
ICAgICAgICAgICAgICAgIHRyaW1Eb3RzKGJhc2VQYXJ0cyk7CisgICAgICAgICAgICAgICAgbmFt
ZSA9IGJhc2VQYXJ0cy5qb2luKCcvJyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gbmFtZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgdGhlIG5v
cm1hbGl6ZSgpIGZ1bmN0aW9uIHBhc3NlZCB0byBhIGxvYWRlciBwbHVnaW4ncworICAgICAqIG5v
cm1hbGl6ZSBtZXRob2QuCisgICAgICovCisgICAgZnVuY3Rpb24gbWFrZU5vcm1hbGl6ZShyZWxO
YW1lKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbiAobmFtZSkgeworICAgICAgICAgICAgcmV0
dXJuIG5vcm1hbGl6ZShuYW1lLCByZWxOYW1lKTsKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBtYWtlTG9hZChpZCkgeworICAgICAgICBmdW5jdGlvbiBsb2FkKHZhbHVlKSB7Cisg
ICAgICAgICAgICBsb2FkZXJDYWNoZVtpZF0gPSB2YWx1ZTsKKyAgICAgICAgfQorCisgICAgICAg
IGxvYWQuZnJvbVRleHQgPSBmdW5jdGlvbiAoaWQsIHRleHQpIHsKKyAgICAgICAgICAgIC8vVGhp
cyBvbmUgaXMgZGlmZmljdWx0IGJlY2F1c2UgdGhlIHRleHQgY2FuL3Byb2JhYmx5IHVzZXMKKyAg
ICAgICAgICAgIC8vZGVmaW5lLCBhbmQgYW55IHJlbGF0aXZlIHBhdGhzIGFuZCByZXF1aXJlcyBz
aG91bGQgYmUgcmVsYXRpdmUKKyAgICAgICAgICAgIC8vdG8gdGhhdCBpZCB3YXMgaXQgd291bGQg
YmUgZm91bmQgb24gZGlzay4gQnV0IHRoaXMgd291bGQgcmVxdWlyZQorICAgICAgICAgICAgLy9i
b290c3RyYXBwaW5nIGEgbW9kdWxlL3JlcXVpcmUgZmFpcmx5IGRlZXBseSBmcm9tIG5vZGUgY29y
ZS4KKyAgICAgICAgICAgIC8vTm90IHN1cmUgaG93IGJlc3QgdG8gZ28gYWJvdXQgdGhhdCB5ZXQu
CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2FtZGVmaW5lIGRvZXMgbm90IGltcGxlbWVu
dCBsb2FkLmZyb21UZXh0Jyk7CisgICAgICAgIH07CisKKyAgICAgICAgcmV0dXJuIGxvYWQ7Cisg
ICAgfQorCisgICAgbWFrZVJlcXVpcmUgPSBmdW5jdGlvbiAoc3lzdGVtUmVxdWlyZSwgZXhwb3J0
cywgbW9kdWxlLCByZWxJZCkgeworICAgICAgICBmdW5jdGlvbiBhbWRSZXF1aXJlKGRlcHMsIGNh
bGxiYWNrKSB7CisgICAgICAgICAgICBpZiAodHlwZW9mIGRlcHMgPT09ICdzdHJpbmcnKSB7Cisg
ICAgICAgICAgICAgICAgLy9TeW5jaHJvbm91cywgc2luZ2xlIG1vZHVsZSByZXF1aXJlKCcnKQor
ICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmdSZXF1aXJlKHN5c3RlbVJlcXVpcmUsIGV4cG9y
dHMsIG1vZHVsZSwgZGVwcywgcmVsSWQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAvL0FycmF5IG9mIGRlcGVuZGVuY2llcyB3aXRoIGEgY2FsbGJhY2suCisKKyAgICAg
ICAgICAgICAgICAvL0NvbnZlcnQgdGhlIGRlcGVuZGVuY2llcyB0byBtb2R1bGVzLgorICAgICAg
ICAgICAgICAgIGRlcHMgPSBkZXBzLm1hcChmdW5jdGlvbiAoZGVwTmFtZSkgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gc3RyaW5nUmVxdWlyZShzeXN0ZW1SZXF1aXJlLCBleHBvcnRzLCBt
b2R1bGUsIGRlcE5hbWUsIHJlbElkKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAg
ICAgICAgIC8vV2FpdCBmb3IgbmV4dCB0aWNrIHRvIGNhbGwgYmFjayB0aGUgcmVxdWlyZSBjYWxs
LgorICAgICAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBkZXBzKTsKKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGFtZFJlcXVpcmUudG9V
cmwgPSBmdW5jdGlvbiAoZmlsZVBhdGgpIHsKKyAgICAgICAgICAgIGlmIChmaWxlUGF0aC5pbmRl
eE9mKCcuJykgPT09IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplKGZpbGVQ
YXRoLCBwYXRoLmRpcm5hbWUobW9kdWxlLmZpbGVuYW1lKSk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIHJldHVybiBmaWxlUGF0aDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfTsKKworICAgICAgICByZXR1cm4gYW1kUmVxdWlyZTsKKyAgICB9OworCisgICAgLy9GYXZv
ciBleHBsaWNpdCB2YWx1ZSwgcGFzc2VkIGluIGlmIHRoZSBtb2R1bGUgd2FudHMgdG8gc3VwcG9y
dCBOb2RlIDAuNC4KKyAgICByZXF1aXJlID0gcmVxdWlyZSB8fCBmdW5jdGlvbiByZXEoKSB7Cisg
ICAgICAgIHJldHVybiBtb2R1bGUucmVxdWlyZS5hcHBseShtb2R1bGUsIGFyZ3VtZW50cyk7Cisg
ICAgfTsKKworICAgIGZ1bmN0aW9uIHJ1bkZhY3RvcnkoaWQsIGRlcHMsIGZhY3RvcnkpIHsKKyAg
ICAgICAgdmFyIHIsIGUsIG0sIHJlc3VsdDsKKworICAgICAgICBpZiAoaWQpIHsKKyAgICAgICAg
ICAgIGUgPSBsb2FkZXJDYWNoZVtpZF0gPSB7fTsKKyAgICAgICAgICAgIG0gPSB7CisgICAgICAg
ICAgICAgICAgaWQ6IGlkLAorICAgICAgICAgICAgICAgIHVyaTogX19maWxlbmFtZSwKKyAgICAg
ICAgICAgICAgICBleHBvcnRzOiBlCisgICAgICAgICAgICB9OworICAgICAgICAgICAgciA9IG1h
a2VSZXF1aXJlKHJlcXVpcmUsIGUsIG0sIGlkKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIC8vT25seSBzdXBwb3J0IG9uZSBkZWZpbmUgY2FsbCBwZXIgZmlsZQorICAgICAgICAgICAg
aWYgKGFscmVhZHlDYWxsZWQpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Ft
ZGVmaW5lIHdpdGggbm8gbW9kdWxlIElEIGNhbm5vdCBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ug
cGVyIGZpbGUuJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0g
dHJ1ZTsKKworICAgICAgICAgICAgLy9Vc2UgdGhlIHJlYWwgdmFyaWFibGVzIGZyb20gbm9kZQor
ICAgICAgICAgICAgLy9Vc2UgbW9kdWxlLmV4cG9ydHMgZm9yIGV4cG9ydHMsIHNpbmNlCisgICAg
ICAgICAgICAvL3RoZSBleHBvcnRzIGluIGhlcmUgaXMgYW1kZWZpbmUgZXhwb3J0cy4KKyAgICAg
ICAgICAgIGUgPSBtb2R1bGUuZXhwb3J0czsKKyAgICAgICAgICAgIG0gPSBtb2R1bGU7CisgICAg
ICAgICAgICByID0gbWFrZVJlcXVpcmUocmVxdWlyZSwgZSwgbSwgbW9kdWxlLmlkKTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vSWYgdGhlcmUgYXJlIGRlcGVuZGVuY2llcywgdGhleSBhcmUgc3Ry
aW5ncywgc28gbmVlZAorICAgICAgICAvL3RvIGNvbnZlcnQgdGhlbSB0byBkZXBlbmRlbmN5IHZh
bHVlcy4KKyAgICAgICAgaWYgKGRlcHMpIHsKKyAgICAgICAgICAgIGRlcHMgPSBkZXBzLm1hcChm
dW5jdGlvbiAoZGVwTmFtZSkgeworICAgICAgICAgICAgICAgIHJldHVybiByKGRlcE5hbWUpOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICAvL0NhbGwgdGhlIGZhY3Rvcnkg
d2l0aCB0aGUgcmlnaHQgZGVwZW5kZW5jaWVzLgorICAgICAgICBpZiAodHlwZW9mIGZhY3Rvcnkg
PT09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGZhY3RvcnkuYXBwbHkobW9k
dWxlLmV4cG9ydHMsIGRlcHMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmVzdWx0
ID0gZmFjdG9yeTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5l
ZCkgeworICAgICAgICAgICAgbS5leHBvcnRzID0gcmVzdWx0OworICAgICAgICAgICAgaWYgKGlk
KSB7CisgICAgICAgICAgICAgICAgbG9hZGVyQ2FjaGVbaWRdID0gbS5leHBvcnRzOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgc3RyaW5nUmVxdWlyZSA9IGZ1bmN0aW9u
IChzeXN0ZW1SZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUsIGlkLCByZWxJZCkgeworICAgICAgICAv
L1NwbGl0IHRoZSBJRCBieSBhICEgc28gdGhhdAorICAgICAgICB2YXIgaW5kZXggPSBpZC5pbmRl
eE9mKCchJyksCisgICAgICAgICAgICBvcmlnaW5hbElkID0gaWQsCisgICAgICAgICAgICBwcmVm
aXgsIHBsdWdpbjsKKworICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7CisgICAgICAgICAgICBp
ZCA9IG5vcm1hbGl6ZShpZCwgcmVsSWQpOworCisgICAgICAgICAgICAvL1N0cmFpZ2h0IG1vZHVs
ZSBsb29rdXAuIElmIGl0IGlzIG9uZSBvZiB0aGUgc3BlY2lhbCBkZXBlbmRlbmNpZXMsCisgICAg
ICAgICAgICAvL2RlYWwgd2l0aCBpdCwgb3RoZXJ3aXNlLCBkZWxlZ2F0ZSB0byBub2RlLgorICAg
ICAgICAgICAgaWYgKGlkID09PSAncmVxdWlyZScpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
bWFrZVJlcXVpcmUoc3lzdGVtUmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlLCByZWxJZCk7CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKGlkID09PSAnZXhwb3J0cycpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZXhwb3J0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaWQgPT09ICdtb2R1bGUnKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
bG9hZGVyQ2FjaGUuaGFzT3duUHJvcGVydHkoaWQpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGxvYWRlckNhY2hlW2lkXTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVmaW5lQ2FjaGVbaWRd
KSB7CisgICAgICAgICAgICAgICAgcnVuRmFjdG9yeS5hcHBseShudWxsLCBkZWZpbmVDYWNoZVtp
ZF0pOworICAgICAgICAgICAgICAgIHJldHVybiBsb2FkZXJDYWNoZVtpZF07CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmKHN5c3RlbVJlcXVpcmUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN5c3RlbVJlcXVpcmUob3JpZ2luYWxJZCk7CisgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBt
b2R1bGUgd2l0aCBJRDogJyArIGlkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvL1RoZXJlIGlzIGEgcGx1Z2luIGluIHBs
YXkuCisgICAgICAgICAgICBwcmVmaXggPSBpZC5zdWJzdHJpbmcoMCwgaW5kZXgpOworICAgICAg
ICAgICAgaWQgPSBpZC5zdWJzdHJpbmcoaW5kZXggKyAxLCBpZC5sZW5ndGgpOworCisgICAgICAg
ICAgICBwbHVnaW4gPSBzdHJpbmdSZXF1aXJlKHN5c3RlbVJlcXVpcmUsIGV4cG9ydHMsIG1vZHVs
ZSwgcHJlZml4LCByZWxJZCk7CisKKyAgICAgICAgICAgIGlmIChwbHVnaW4ubm9ybWFsaXplKSB7
CisgICAgICAgICAgICAgICAgaWQgPSBwbHVnaW4ubm9ybWFsaXplKGlkLCBtYWtlTm9ybWFsaXpl
KHJlbElkKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vTm9ybWFs
aXplIHRoZSBJRCBub3JtYWxseS4KKyAgICAgICAgICAgICAgICBpZCA9IG5vcm1hbGl6ZShpZCwg
cmVsSWQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobG9hZGVyQ2FjaGVbaWRd
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGxvYWRlckNhY2hlW2lkXTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcGx1Z2luLmxvYWQoaWQsIG1ha2VSZXF1aXJlKHN5
c3RlbVJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSwgcmVsSWQpLCBtYWtlTG9hZChpZCksIHt9KTsK
KworICAgICAgICAgICAgICAgIHJldHVybiBsb2FkZXJDYWNoZVtpZF07CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9OworCisgICAgLy9DcmVhdGUgYSBkZWZpbmUgZnVuY3Rpb24gc3Bl
Y2lmaWMgdG8gdGhlIG1vZHVsZSBhc2tpbmcgZm9yIGFtZGVmaW5lLgorICAgIGZ1bmN0aW9uIGRl
ZmluZShpZCwgZGVwcywgZmFjdG9yeSkgeworICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpZCkp
IHsKKyAgICAgICAgICAgIGZhY3RvcnkgPSBkZXBzOworICAgICAgICAgICAgZGVwcyA9IGlkOwor
ICAgICAgICAgICAgaWQgPSB1bmRlZmluZWQ7CisgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGlk
ICE9PSAnc3RyaW5nJykgeworICAgICAgICAgICAgZmFjdG9yeSA9IGlkOworICAgICAgICAgICAg
aWQgPSBkZXBzID0gdW5kZWZpbmVkOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGRlcHMgJiYg
IUFycmF5LmlzQXJyYXkoZGVwcykpIHsKKyAgICAgICAgICAgIGZhY3RvcnkgPSBkZXBzOworICAg
ICAgICAgICAgZGVwcyA9IHVuZGVmaW5lZDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghZGVw
cykgeworICAgICAgICAgICAgZGVwcyA9IFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZSdd
OworICAgICAgICB9CisKKyAgICAgICAgLy9TZXQgdXAgcHJvcGVydGllcyBmb3IgdGhpcyBtb2R1
bGUuIElmIGFuIElELCB0aGVuIHVzZQorICAgICAgICAvL2ludGVybmFsIGNhY2hlLiBJZiBubyBJ
RCwgdGhlbiB1c2UgdGhlIGV4dGVybmFsIHZhcmlhYmxlcworICAgICAgICAvL2ZvciB0aGlzIG5v
ZGUgbW9kdWxlLgorICAgICAgICBpZiAoaWQpIHsKKyAgICAgICAgICAgIC8vUHV0IHRoZSBtb2R1
bGUgaW4gZGVlcCBmcmVlemUgdW50aWwgdGhlcmUgaXMgYQorICAgICAgICAgICAgLy9yZXF1aXJl
IGNhbGwgZm9yIGl0LgorICAgICAgICAgICAgZGVmaW5lQ2FjaGVbaWRdID0gW2lkLCBkZXBzLCBm
YWN0b3J5XTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJ1bkZhY3RvcnkoaWQsIGRl
cHMsIGZhY3RvcnkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy9kZWZpbmUucmVxdWlyZSwg
d2hpY2ggaGFzIGFjY2VzcyB0byBhbGwgdGhlIHZhbHVlcyBpbiB0aGUKKyAgICAvL2NhY2hlLiBV
c2VmdWwgZm9yIEFNRCBtb2R1bGVzIHRoYXQgYWxsIGhhdmUgSURzIGluIHRoZSBmaWxlLAorICAg
IC8vYnV0IG5lZWQgdG8gZmluYWxseSBleHBvcnQgYSB2YWx1ZSB0byBub2RlIGJhc2VkIG9uIG9u
ZSBvZiB0aG9zZQorICAgIC8vSURzLgorICAgIGRlZmluZS5yZXF1aXJlID0gZnVuY3Rpb24gKGlk
KSB7CisgICAgICAgIGlmIChsb2FkZXJDYWNoZVtpZF0pIHsKKyAgICAgICAgICAgIHJldHVybiBs
b2FkZXJDYWNoZVtpZF07CisgICAgICAgIH0KKworICAgICAgICBpZiAoZGVmaW5lQ2FjaGVbaWRd
KSB7CisgICAgICAgICAgICBydW5GYWN0b3J5LmFwcGx5KG51bGwsIGRlZmluZUNhY2hlW2lkXSk7
CisgICAgICAgICAgICByZXR1cm4gbG9hZGVyQ2FjaGVbaWRdOworICAgICAgICB9CisgICAgfTsK
KworICAgIGRlZmluZS5hbWQgPSB7fTsKKworICAgIHJldHVybiBkZWZpbmU7Cit9CisKK21vZHVs
ZS5leHBvcnRzID0gYW1kZWZpbmU7CisKK30pKHJlcXVpcmUoIl9fYnJvd3NlcmlmeV9wcm9jZXNz
IiksIi8uLi9ub2RlX21vZHVsZXMvc291cmNlLW1hcC9ub2RlX21vZHVsZXMvYW1kZWZpbmUvYW1k
ZWZpbmUuanMiKQorfSx7Il9fYnJvd3NlcmlmeV9wcm9jZXNzIjozLCJwYXRoIjoyfV0sMTU6W2Z1
bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMyBG
YWNlYm9vaywgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwg
VmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmls
ZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRh
aW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3Jn
L2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2Fi
bGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQg
dW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAq
IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhw
cmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFu
Z3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhl
IExpY2Vuc2UuCisgKi8KKy8qIGpzaGludCBicm93c2VyOiB0cnVlICovCisvKiBqc2xpbnQgZXZp
bDogdHJ1ZSAqLworCisndXNlIHN0cmljdCc7Cit2YXIgcnVuU2NyaXB0czsKKwordmFyIHRyYW5z
Zm9ybSA9IHJlcXVpcmUoJy4vZmJ0cmFuc2Zvcm0vbGliL3RyYW5zZm9ybScpLnRyYW5zZm9ybTsK
K3ZhciB2aXNpdG9ycyA9IHJlcXVpcmUoJy4vZmJ0cmFuc2Zvcm0vdmlzaXRvcnMnKS50cmFuc2Zv
cm1WaXNpdG9yczsKK3ZhciB0cmFuc2Zvcm0gPSB0cmFuc2Zvcm0uYmluZChudWxsLCB2aXNpdG9y
cy5yZWFjdCk7Cit2YXIgZG9jYmxvY2sgPSByZXF1aXJlKCcuL2ZidHJhbnNmb3JtL2xpYi9kb2Ni
bG9jaycpOworCit2YXIgaGVhZEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hl
YWQnKVswXTsKKworZXhwb3J0cy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07CisKK2V4cG9ydHMuZXhl
YyA9IGZ1bmN0aW9uKGNvZGUpIHsKKyAgcmV0dXJuIGV2YWwodHJhbnNmb3JtKGNvZGUpKTsKK307
CisKK3ZhciBydW4gPSBleHBvcnRzLnJ1biA9IGZ1bmN0aW9uKGNvZGUpIHsKKyAgdmFyIGpzeCA9
IGRvY2Jsb2NrLnBhcnNlQXNPYmplY3QoZG9jYmxvY2suZXh0cmFjdChjb2RlKSkuanN4OworCisg
IHZhciBmdW5jdGlvbkJvZHkgPSBqc3ggPyB0cmFuc2Zvcm0oY29kZSkuY29kZSA6IGNvZGU7Cisg
IHZhciBzY3JpcHRFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOworCisgIHNj
cmlwdEVsLmlubmVySFRNTCA9IGZ1bmN0aW9uQm9keTsKKyAgaGVhZEVsLmFwcGVuZENoaWxkKHNj
cmlwdEVsKTsKK307CisKK2lmICh0eXBlb2Ygd2luZG93ID09PSAidW5kZWZpbmVkIiB8fCB3aW5k
b3cgPT09IG51bGwpIHsKKyAgcmV0dXJuOworfQorCit2YXIgbG9hZCA9IGV4cG9ydHMubG9hZCA9
IGZ1bmN0aW9uKHVybCwgY2FsbGJhY2spIHsKKyAgdmFyIHhocjsKKyAgeGhyID0gd2luZG93LkFj
dGl2ZVhPYmplY3QgPyBuZXcgd2luZG93LkFjdGl2ZVhPYmplY3QoJ01pY3Jvc29mdC5YTUxIVFRQ
JykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBuZXcgWE1MSHR0cFJlcXVlc3QoKTsK
KyAgLy8gRGlzYWJsZSBhc3luYyBzaW5jZSB3ZSBuZWVkIHRvIGV4ZWN1dGUgc2NyaXB0cyBpbiB0
aGUgb3JkZXIgdGhleSBhcmUgaW4gdGhlCisgIC8vIERPTSB0byBtaXJyb3Igbm9ybWFsIHNjcmlw
dCBsb2FkaW5nLgorICB4aHIub3BlbignR0VUJywgdXJsLCBmYWxzZSk7CisgIGlmICgnb3ZlcnJp
ZGVNaW1lVHlwZScgaW4geGhyKSB7CisgICAgeGhyLm92ZXJyaWRlTWltZVR5cGUoJ3RleHQvcGxh
aW4nKTsKKyAgfQorICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7CisgICAg
aWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7CisgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMCB8
fCB4aHIuc3RhdHVzID09PSAyMDApIHsKKyAgICAgICAgcnVuKHhoci5yZXNwb25zZVRleHQpOwor
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgbG9hZCAi
ICsgdXJsKTsKKyAgICAgIH0KKyAgICAgIGlmIChjYWxsYmFjaykgeworICAgICAgICByZXR1cm4g
Y2FsbGJhY2soKTsKKyAgICAgIH0KKyAgICB9CisgIH07CisgIHJldHVybiB4aHIuc2VuZChudWxs
KTsKK307CisKK3J1blNjcmlwdHMgPSBmdW5jdGlvbigpIHsKKyAgdmFyIHNjcmlwdHMgPSBkb2N1
bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0Jyk7CisgIHNjcmlwdHMgPSBBcnJheS5w
cm90b3R5cGUuc2xpY2UuY2FsbChzY3JpcHRzKTsKKyAgdmFyIGpzeFNjcmlwdHMgPSBzY3JpcHRz
LmZpbHRlcihmdW5jdGlvbihzY3JpcHQpIHsKKyAgICByZXR1cm4gc2NyaXB0LnR5cGUgPT09ICd0
ZXh0L2pzeCc7CisgIH0pOworCisgIGpzeFNjcmlwdHMuZm9yRWFjaChmdW5jdGlvbihzY3JpcHQp
IHsKKyAgICBpZiAoc2NyaXB0LnNyYykgeworICAgICAgbG9hZChzY3JpcHQuc3JjKTsKKyAgICB9
IGVsc2UgeworICAgICAgcnVuKHNjcmlwdC5pbm5lckhUTUwpOworICAgIH0KKyAgfSk7Cit9Owor
CitpZiAod2luZG93LmFkZEV2ZW50TGlzdGVuZXIpIHsKKyAgd2luZG93LmFkZEV2ZW50TGlzdGVu
ZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBydW5TY3JpcHRzLCBmYWxzZSk7Cit9IGVsc2UgeworICB3
aW5kb3cuYXR0YWNoRXZlbnQoJ29ubG9hZCcsIHJ1blNjcmlwdHMpOworfQorCit9LHsiLi9mYnRy
YW5zZm9ybS9saWIvZG9jYmxvY2siOjE2LCIuL2ZidHJhbnNmb3JtL2xpYi90cmFuc2Zvcm0iOjE3
LCIuL2ZidHJhbnNmb3JtL3Zpc2l0b3JzIjoyM31dLDE2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVs
ZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisg
KiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxp
Y2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFu
Y2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGlj
ZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIu
MAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8g
aW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlz
IGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMg
T1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAq
IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJt
aXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3Zh
ciBkb2NibG9ja1JlID0gL15ccyooXC9cKlwqKC58XG4pKj9cKlwvKS87Cit2YXIgbHRyaW1SZSA9
IC9eXHMqLzsKKy8qKgorICogQHBhcmFtIHtTdHJpbmd9IGNvbnRlbnRzCisgKiBAcmV0dXJuIHtT
dHJpbmd9CisgKi8KK2Z1bmN0aW9uIGV4dHJhY3QoY29udGVudHMpIHsKKyAgdmFyIG1hdGNoID0g
Y29udGVudHMubWF0Y2goZG9jYmxvY2tSZSk7CisgIGlmIChtYXRjaCkgeworICAgIHJldHVybiBt
YXRjaFswXS5yZXBsYWNlKGx0cmltUmUsICcnKSB8fCAnJzsKKyAgfQorICByZXR1cm4gJyc7Cit9
CisKKwordmFyIGNvbW1lbnRTdGFydFJlID0gL15cL1wqXCo/LzsKK3ZhciBjb21tZW50RW5kUmUg
PSAvXCpcLyQvOwordmFyIHdzUmUgPSAvW1x0IF0rL2c7Cit2YXIgc3RyaW5nU3RhcnRSZSA9IC8o
XG58XikgKlwqL2c7Cit2YXIgbXVsdGlsaW5lUmUgPSAvKD86XnxcbikgKihAW15cbl0qPykgKlxu
ICooW15AXG5cc11bXkBcbl0rPykgKlxuL2c7Cit2YXIgcHJvcGVydHlSZSA9IC8oPzpefFxuKSAq
QChcUyspICooW15cbl0qKS9nOworCisvKioKKyAqIEBwYXJhbSB7U3RyaW5nfSBjb250ZW50cwor
ICogQHJldHVybiB7QXJyYXl9CisgKi8KK2Z1bmN0aW9uIHBhcnNlKGRvY2Jsb2NrKSB7CisgIGRv
Y2Jsb2NrID0gZG9jYmxvY2sKKyAgICAucmVwbGFjZShjb21tZW50U3RhcnRSZSwgJycpCisgICAg
LnJlcGxhY2UoY29tbWVudEVuZFJlLCAnJykKKyAgICAucmVwbGFjZSh3c1JlLCAnICcpCisgICAg
LnJlcGxhY2Uoc3RyaW5nU3RhcnRSZSwgJyQxJyk7CisKKyAgLy8gTm9ybWFsaXplIG11bHRpLWxp
bmUgZGlyZWN0aXZlcworICB2YXIgcHJldiA9ICcnOworICB3aGlsZSAocHJldiAhPSBkb2NibG9j
aykgeworICAgIHByZXYgPSBkb2NibG9jazsKKyAgICBkb2NibG9jayA9IGRvY2Jsb2NrLnJlcGxh
Y2UobXVsdGlsaW5lUmUsICJcbiQxICQyXG4iKTsKKyAgfQorICBkb2NibG9jayA9IGRvY2Jsb2Nr
LnRyaW0oKTsKKworICB2YXIgcmVzdWx0ID0gW107CisgIHZhciBtYXRjaDsKKyAgd2hpbGUgKG1h
dGNoID0gcHJvcGVydHlSZS5leGVjKGRvY2Jsb2NrKSkgeworICAgIHJlc3VsdC5wdXNoKFttYXRj
aFsxXSwgbWF0Y2hbMl1dKTsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICog
U2FtZSBhcyBwYXJzZSBidXQgcmV0dXJucyBhbiBvYmplY3Qgb2YgcHJvcDogdmFsdWUgaW5zdGVh
ZCBvZiBhcnJheSBvZiBwYXJpcworICogSWYgYSBwcm9wZXJ0eSBhcHBlcnMgbW9yZSB0aGFuIG9u
Y2UgdGhlIGxhc3Qgb25lIHdpbGwgYmUgcmV0dXJuZWQKKyAqCisgKiBAcGFyYW0ge1N0cmluZ30g
Y29udGVudHMKKyAqIEByZXR1cm4ge09iamVjdH0KKyAqLworZnVuY3Rpb24gcGFyc2VBc09iamVj
dChkb2NibG9jaykgeworICB2YXIgcGFpcnMgPSBwYXJzZShkb2NibG9jayk7CisgIHZhciByZXN1
bHQgPSB7fTsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYWlycy5sZW5ndGg7IGkrKykgeworICAg
IHJlc3VsdFtwYWlyc1tpXVswXV0gPSBwYWlyc1tpXVsxXTsKKyAgfQorICByZXR1cm4gcmVzdWx0
OworfQorCisKK2V4cG9ydHMuZXh0cmFjdCA9IGV4dHJhY3Q7CitleHBvcnRzLnBhcnNlID0gcGFy
c2U7CitleHBvcnRzLnBhcnNlQXNPYmplY3QgPSBwYXJzZUFzT2JqZWN0OworCit9LHt9XSwxNzpb
ZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisoZnVuY3Rpb24oKXsvKioKKyAqIENv
cHlyaWdodCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFw
YWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5v
dCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisg
KiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8v
d3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWly
ZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisg
KiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMg
SVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJ
TkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRo
ZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0
aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworLypnbG9iYWwgZXhwb3J0czp0cnVlKi8KKy8q
anNsaW50IG5vZGU6IHRydWUqLworInVzZSBzdHJpY3QiOworCisvKioKKyAqIFN5bnRheCB0cmFu
c2ZvbWVyIGZvciBqYXZhc2NyaXB0LiBUYWtlcyB0aGUgc291cmNlIGluLCBzcGl0cyB0aGUgc291
cmNlCisgKiBvdXQuIFRyaWVzIHRvIG1haW50YWluIHJlYWRhYmlsaXR5IGFuZCBwcmVzZXJ2ZSB3
aGl0ZXNwYWNlIGFuZCBsaW5lIG51bWJlcnMKKyAqIHdoZXJlIHBvc3NzaWJsZS4KKyAqCisgKiBT
dXBwb3J0CisgKiAtIEVTNiBjbGFzcyB0cmFuc2Zvcm1hdGlvbiArIHByaXZhdGUgcHJvcGVydHkg
bXVuZ2luZywgc2VlIC4vY2xhc3Nlcy5qcworICogLSBSZWFjdCBYSFAgc3R5bGUgc3ludGF4IHRy
YW5zZm9ybWF0aW9ucywgc2VlIC4vcmVhY3QuanMKKyAqIC0gQm9sdCBYSFAgc3R5bGUgc3ludGF4
IHRyYW5zZm9ybWF0aW9ucywgc2VlIC4vYm9sdC5qcworICoKKyAqIFRoZSBnZW5lcmFsIGZsb3cg
aXMgdGhlIGZvbGxvd2luZzoKKyAqIC0gUGFyc2UgdGhlIHNvdXJjZSB3aXRoIG91ciBjdXN0b21p
emVkIGVzcHJpbWEtcGFyc2VyCisgKiAgIGh0dHBzOi8vZ2l0aHViLmNvbS92b2xva28vZXNwcmlt
YS4gV2UgaGF2ZSB0byBjdXN0b21pemUgdGhlIHBhcnNlciB0bworICogICBzdXBwb3J0IG5vbi1z
dGFuZGFyZCBYSFAtc3R5bGUgc3ludGF4LiBXZSBwYXJzZSB0aGUgc291cmNlIHJhbmdlOiB0cnVl
CisgKiAgIG9wdGlvbiB0aGF0IGZvcmNlcyBlc3ByaW1hIHRvIHJldHVybiBwb3NpdGlvbnMgaW4g
dGhlIHNvdXJjZSB3aXRoaW4KKyAqICAgcmVzdWx0aW5nIHBhcnNlIHRyZWUuCisgKgorICogLSBU
cmF2ZXJzZSByZXN1bHRpbmcgc3ludGF4IHRyZWUsIHRyeWluZyB0byBhcHBseSBhIHNldCBvZiB2
aXNpdG9ycyB0byBlYWNoCisgKiAgIG5vZGUuIEVhY2ggdmlzaXRvciBzaG91bGQgcHJvdmlkZSBh
IC50ZXN0KCkgZnVuY3Rpb24gdGhhdCB0ZXN0cyBpZiB0aGUKKyAqICAgdmlzaXRvciBjYW4gcHJv
Y2VzcyBhIGdpdmVuIG5vZGUuCisgKgorICogLSBWaXNpdG9yIGlzIHJlc3BvbnNpYmxlIGZvciBj
b2RlIGdlbmVyYXRpb24gZm9yIGEgZ2l2ZW4gc3ludGF4IG5vZGUuCisgKiAgIEdlbmVyYXRlZCBj
b2RlIGlzIHN0b3JlZCBpbiBzdGF0ZS5nLmJ1ZmZlciB0aGF0IGlzIHBhc3NlZCB0byBldmVyeQor
ICogICB2aXNpdG9yLiBJdCdzIHVwIHRvIHRoZSB2aXNpdG9yIHRvIHByb2Nlc3MgdGhlIGNvZGUg
dGhlIHdheSBpdCBzZWVzIGZpdC4KKyAqICAgQWxsIG9mIHRoZSBjdXJyZW50IHZpc2l0b3JzIGhv
d2V2ZXIgdXNlIGJvdGggdGhlIG5vZGUgYW5kIHRoZSBvcmlnaW5hbAorICogICBzb3VyY2UgdG8g
Z2VuZXJhdGUgdHJhbnNmb3JtZWQgY29kZS4gVGhleSB1c2Ugbm9kZXMgdG8gZ2VuZXJhdGUgbmV3
CisgKiAgIGNvZGUgYW5kIHRoZXkgY29weSB0aGUgb3JpZ2luYWwgc291cmNlLCBwcmVzZXJ2aW5n
IHdoaXRlc3BhY2UgYW5kIGNvbW1lbnRzLAorICogICBmb3IgdGhlIHBhcnRzIHRoZXkgZG9uJ3Qg
Y2FyZSBhYm91dC4KKyAqLwordmFyIGVzcHJpbWEgPSByZXF1aXJlKCdlc3ByaW1hJyk7CisKK3Zh
ciBjcmVhdGVTdGF0ZSA9IHJlcXVpcmUoJy4vdXRpbHMnKS5jcmVhdGVTdGF0ZTsKK3ZhciBjYXRj
aHVwID0gcmVxdWlyZSgnLi91dGlscycpLmNhdGNodXA7CisKKy8qKgorICogQHBhcmFtIHtvYmpl
Y3R9IG9iamVjdAorICogQHBhcmFtIHtmdW5jdGlvbn0gdmlzaXRvcgorICogQHBhcmFtIHthcnJh
eX0gcGF0aAorICogQHBhcmFtIHtvYmplY3R9IHN0YXRlCisgKi8KK2Z1bmN0aW9uIHRyYXZlcnNl
KG9iamVjdCwgcGF0aCwgc3RhdGUpIHsKKyAgdmFyIGtleSwgY2hpbGQ7CisKKyAgaWYgKHdhbGtl
cih0cmF2ZXJzZSwgb2JqZWN0LCBwYXRoLCBzdGF0ZSkgPT09IGZhbHNlKSB7CisgICAgcmV0dXJu
OworICB9CisgIHBhdGgudW5zaGlmdChvYmplY3QpOworICBmb3IgKGtleSBpbiBvYmplY3QpIHsK
KyAgICAvLyBza2lwIG9idmlvdXNseSB3cm9uZyBhdHRyaWJ1dGVzCisgICAgaWYgKGtleSA9PT0g
J3JhbmdlJyB8fCBrZXkgPT09ICdsb2MnKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAg
aWYgKG9iamVjdC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7CisgICAgICBjaGlsZCA9IG9iamVjdFtr
ZXldOworICAgICAgaWYgKHR5cGVvZiBjaGlsZCA9PT0gJ29iamVjdCcgJiYgY2hpbGQgIT09IG51
bGwpIHsKKyAgICAgICAgY2hpbGQucmFuZ2UgJiYgY2F0Y2h1cChjaGlsZC5yYW5nZVswXSwgc3Rh
dGUpOworICAgICAgICB0cmF2ZXJzZShjaGlsZCwgcGF0aCwgc3RhdGUpOworICAgICAgICBjaGls
ZC5yYW5nZSAmJiBjYXRjaHVwKGNoaWxkLnJhbmdlWzFdLCBzdGF0ZSk7CisgICAgICB9CisgICAg
fQorICB9CisgIHBhdGguc2hpZnQoKTsKK30KKworZnVuY3Rpb24gd2Fsa2VyKHRyYXZlcnNlLCBv
YmplY3QsIHBhdGgsIHN0YXRlKSB7CisgIHZhciB2aXNpdG9ycyA9IHN0YXRlLmcudmlzaXRvcnM7
CisgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlzaXRvcnMubGVuZ3RoOyBpKyspIHsKKyAgICBpZiAo
dmlzaXRvcnNbaV0udGVzdChvYmplY3QsIHBhdGgsIHN0YXRlKSkgeworICAgICAgcmV0dXJuIHZp
c2l0b3JzW2ldKHRyYXZlcnNlLCBvYmplY3QsIHBhdGgsIHN0YXRlKTsKKyAgICB9CisgIH0KK30K
KworZnVuY3Rpb24gcnVuUGFzcyhzb3VyY2UsIHZpc2l0b3JzLCBvcHRpb25zKSB7CisgIHZhciBh
c3Q7CisgIHRyeSB7CisgICAgYXN0ID0gZXNwcmltYS5wYXJzZShzb3VyY2UsIHsgY29tbWVudDog
dHJ1ZSwgbG9jOiB0cnVlLCByYW5nZTogdHJ1ZSB9KTsKKyAgfSBjYXRjaCAoZSkgeworICAgIGUu
bWVzc2FnZSA9ICdQYXJzZSBFcnJvcjogJyArIGUubWVzc2FnZTsKKyAgICB0aHJvdyBlOworICB9
CisgIHZhciBzdGF0ZSA9IGNyZWF0ZVN0YXRlKHNvdXJjZSwgb3B0aW9ucyk7CisgIHN0YXRlLmcu
b3JpZ2luYWxQcm9ncmFtQVNUID0gYXN0OworICBzdGF0ZS5nLnZpc2l0b3JzID0gdmlzaXRvcnM7
CisKKyAgaWYgKG9wdGlvbnMuc291cmNlTWFwKSB7CisgICAgdmFyIFNvdXJjZU1hcEdlbmVyYXRv
ciA9IHJlcXVpcmUoJ3NvdXJjZS1tYXAnKS5Tb3VyY2VNYXBHZW5lcmF0b3I7CisgICAgc3RhdGUu
Zy5zb3VyY2VNYXAgPSBuZXcgU291cmNlTWFwR2VuZXJhdG9yKHsgZmlsZTogJ3RyYW5zZm9ybWVk
LmpzJyB9KTsKKyAgfQorICB0cmF2ZXJzZShhc3QsIFtdLCBzdGF0ZSk7CisgIGNhdGNodXAoc291
cmNlLmxlbmd0aCwgc3RhdGUpOworICByZXR1cm4gc3RhdGU7Cit9CisKKy8qKgorICogQXBwbGll
cyBhbGwgYXZhaWxhYmxlIHRyYW5zZm9ybWF0aW9ucyB0byB0aGUgc291cmNlCisgKiBAcGFyYW0g
e2FycmF5fSB2aXNpdG9ycworICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZQorICogQHBhcmFtIHs/
b2JqZWN0fSBvcHRpb25zCisgKiBAcmV0dXJuIHtvYmplY3R9CisgKi8KK2Z1bmN0aW9uIHRyYW5z
Zm9ybSh2aXNpdG9ycywgc291cmNlLCBvcHRpb25zKSB7CisgIG9wdGlvbnMgPSBvcHRpb25zIHx8
IHt9OworCisgIHZhciBzdGF0ZSA9IHJ1blBhc3Moc291cmNlLCB2aXNpdG9ycywgb3B0aW9ucyk7
CisgIHZhciBzb3VyY2VNYXAgPSBzdGF0ZS5nLnNvdXJjZU1hcDsKKworICBpZiAoc291cmNlTWFw
KSB7CisgICAgcmV0dXJuIHsKKyAgICAgIHNvdXJjZU1hcDogc291cmNlTWFwLAorICAgICAgc291
cmNlTWFwRmlsZW5hbWU6IG9wdGlvbnMuZmlsZW5hbWUgfHwgJ3NvdXJjZS5qcycsCisgICAgICBj
b2RlOiBzdGF0ZS5nLmJ1ZmZlcgorICAgIH07CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIHsKKyAg
ICAgIGNvZGU6IHN0YXRlLmcuYnVmZmVyCisgICAgfTsKKyAgfQorfQorCisKK2V4cG9ydHMudHJh
bnNmb3JtID0gdHJhbnNmb3JtOworCit9KSgpCit9LHsiLi91dGlscyI6MTgsImVzcHJpbWEiOjQs
InNvdXJjZS1tYXAiOjV9XSwxODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ciso
ZnVuY3Rpb24oKXsvKioKKyAqIENvcHlyaWdodCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgorICog
TGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNl
bnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNl
IHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vu
c2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAK
KyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGlu
IHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBk
aXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9S
IENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBT
ZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlz
c2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworLypnbG9i
YWwgZXhwb3J0czp0cnVlKi8KKworLyoqCisgKiBTdGF0ZSByZXByZXNlbnRzIHRoZSBnaXZlbiBw
YXJzZXIgc3RhdGUuIEl0IGhhcyBhIGxvY2FsIGFuZCBnbG9iYWwgcGFydHMuCisgKiBHbG9iYWwg
Y29udGFpbnMgcGFyc2VyIHBvc2l0aW9uLCBzb3VyY2UsIGV0Yy4gTG9jYWwgY29udGFpbnMgc2Nv
cGUgYmFzZWQKKyAqIHByb3BlcnRpZXMsIGxpa2UgY3VycmVudCBjbGFzcyBuYW1lLiBTdGF0ZSBz
aG91bGQgY29udGFpbiBhbGwgdGhlIGluZm8KKyAqIHJlcXVpcmVkIGZvciB0cmFuc2Zvcm1hdGlv
bi4gSXQncyB0aGUgb25seSBtYW5kYXRvcnkgb2JqZWN0IHRoYXQgaXMgYmVpbmcKKyAqIHBhc3Nl
ZCB0byBldmVyeSBmdW5jdGlvbiBpbiB0cmFuc2Zvcm0gY2hhaW4uCisgKgorICogQHBhcmFtICB7
U3RyaW5nfSBzb3VyY2UKKyAqIEBwYXJhbSAge09iamVjdH0gdHJhbnNmb3JtT3B0aW9ucworICog
QHJldHVybiB7T2JqZWN0fQorICovCitmdW5jdGlvbiBjcmVhdGVTdGF0ZShzb3VyY2UsIHRyYW5z
Zm9ybU9wdGlvbnMpIHsKKyAgcmV0dXJuIHsKKyAgICAvKioKKyAgICAgKiBOYW1lIG9mIHRoZSBz
dXBlciBjbGFzcyB2YXJpYWJsZQorICAgICAqIEB0eXBlIHtTdHJpbmd9CisgICAgICovCisgICAg
c3VwZXJWYXI6ICcnLAorICAgIC8qKgorICAgICAqIE5hbWUgb2YgdGhlIGVuY2xvc2luZyBjbGFz
cyBzY29wZQorICAgICAqIEB0eXBlIHtTdHJpbmd9CisgICAgICovCisgICAgc2NvcGVOYW1lOiAn
JywKKyAgICAvKioKKyAgICAgKiBHbG9iYWwgc3RhdGUgKG5vdCBhZmZlY3RlZCBieSB1cGRhdGVT
dGF0ZSkKKyAgICAgKiBAdHlwZSB7T2JqZWN0fQorICAgICAqLworICAgIGc6IHsKKyAgICAgIC8q
KgorICAgICAgICogQSBzZXQgb2YgZ2VuZXJhbCBvcHRpb25zIHRoYXQgdHJhbnNmb3JtYXRpb25z
IGNhbiBjb25zaWRlciB3aGlsZSBkb2luZworICAgICAgICogYSB0cmFuc2Zvcm1hdGlvbjoKKyAg
ICAgICAqCisgICAgICAgKiAtIG1pbmlmeQorICAgICAgICogICBTcGVjaWZpZXMgdGhhdCB0cmFu
c2Zvcm1hdGlvbiBzdGVwcyBzaG91bGQgZG8gdGhlaXIgYmVzdCB0byBtaW5pZnkKKyAgICAgICAq
ICAgdGhlIG91dHB1dCBzb3VyY2Ugd2hlbiBwb3NzaWJsZS4gVGhpcyBpcyB1c2VmdWwgZm9yIHBs
YWNlcyB3aGVyZQorICAgICAgICogICBtaW5pZmljYXRpb24gb3B0aW1pemF0aW9ucyBhcmUgcG9z
c2libGUgd2l0aCBoaWdoZXItbGV2ZWwgY29udGV4dAorICAgICAgICogICBpbmZvIHRoYW4gd2hh
dCBqc3htaW4gY2FuIHByb3ZpZGUuCisgICAgICAgKgorICAgICAgICogICBGb3IgZXhhbXBsZSwg
dGhlIEVTNiBjbGFzcyB0cmFuc2Zvcm0gd2lsbCBtaW5pZnkgbXVuZ2VkIHByaXZhdGUKKyAgICAg
ICAqICAgdmFyaWFibGVzIGlmIHRoaXMgZmxhZyBpcyBzZXQuCisgICAgICAgKi8KKyAgICAgIG9w
dHM6IHRyYW5zZm9ybU9wdGlvbnMsCisgICAgICAvKioKKyAgICAgICAqIEN1cnJlbnQgcG9zaXRp
b24gaW4gdGhlIHNvdXJjZSBjb2RlCisgICAgICAgKiBAdHlwZSB7TnVtYmVyfQorICAgICAgICov
CisgICAgICBwb3NpdGlvbjogMCwKKyAgICAgIC8qKgorICAgICAgICogQnVmZmVyIGNvbnRhaW5p
bmcgdGhlIHJlc3VsdAorICAgICAgICogQHR5cGUge1N0cmluZ30KKyAgICAgICAqLworICAgICAg
YnVmZmVyOiAnJywKKyAgICAgIC8qKgorICAgICAgICogSW5kZW50YXRpb24gb2Zmc2V0IChvbmx5
IG5lZ2F0aXZlIG9mZnNldCBpcyBzdXBwb3J0ZWQgbm93KQorICAgICAgICogQHR5cGUge051bWJl
cn0KKyAgICAgICAqLworICAgICAgaW5kZW50Qnk6IDAsCisgICAgICAvKioKKyAgICAgICAqIFNv
dXJjZSB0aGF0IGlzIGJlaW5nIHRyYW5zZm9ybWVkCisgICAgICAgKiBAdHlwZSB7U3RyaW5nfQor
ICAgICAgICovCisgICAgICBzb3VyY2U6IHNvdXJjZSwKKworICAgICAgLyoqCisgICAgICAgKiBD
YWNoZWQgcGFyc2VkIGRvY2Jsb2NrIChzZWUgZ2V0RG9jYmxvY2spCisgICAgICAgKiBAdHlwZSB7
b2JqZWN0fQorICAgICAgICovCisgICAgICBkb2NibG9jazogbnVsbCwKKworICAgICAgLyoqCisg
ICAgICAgKiBXaGV0aGVyIHRoZSB0aGluZyB3YXMgdXNlZAorICAgICAgICogQHR5cGUge0Jvb2xl
YW59CisgICAgICAgKi8KKyAgICAgIHRhZ05hbWVzcGFjZVVzZWQ6IGZhbHNlLAorCisgICAgICAv
KioKKyAgICAgICAqIElmIHVzaW5nIGJvbHQgeGpzIHRyYW5zZm9ybWF0aW9uCisgICAgICAgKiBA
dHlwZSB7Qm9vbGVhbn0KKyAgICAgICAqLworICAgICAgaXNCb2x0OiB1bmRlZmluZWQsCisKKyAg
ICAgIC8qKgorICAgICAgICogV2hldGhlciB0byByZWNvcmQgc291cmNlIG1hcCAoZXhwZW5zaXZl
KSBvciBub3QKKyAgICAgICAqIEB0eXBlIHtTb3VyY2VNYXBHZW5lcmF0b3J8bnVsbH0KKyAgICAg
ICAqLworICAgICAgc291cmNlTWFwOiBudWxsLAorCisgICAgICAvKioKKyAgICAgICAqIEZpbGVu
YW1lIG9mIHRoZSBmaWxlIGJlaW5nIHByb2Nlc3NlZC4gV2lsbCBiZSByZXR1cm5lZCBhcyBhIHNv
dXJjZQorICAgICAgICogYXR0cmlidXRlIGluIHRoZSBzb3VyY2UgbWFwCisgICAgICAgKi8KKyAg
ICAgIHNvdXJjZU1hcEZpbGVuYW1lOiAnc291cmNlLmpzJywKKworICAgICAgLyoqCisgICAgICAg
KiBPbmx5IHdoZW4gc291cmNlIG1hcCBpcyB1c2VkOiBsYXN0IGxpbmUgaW4gdGhlIHNvdXJjZSBm
b3Igd2hpY2gKKyAgICAgICAqIHNvdXJjZSBtYXAgd2FzIGdlbmVyYXRlZAorICAgICAgICogQHR5
cGUge051bWJlcn0KKyAgICAgICAqLworICAgICAgc291cmNlTGluZTogMSwKKworICAgICAgLyoq
CisgICAgICAgKiBPbmx5IHdoZW4gc291cmNlIG1hcCBpcyB1c2VkOiBsYXN0IGxpbmUgaW4gdGhl
IGJ1ZmZlciBmb3Igd2hpY2gKKyAgICAgICAqIHNvdXJjZSBtYXAgd2FzIGdlbmVyYXRlZAorICAg
ICAgICogQHR5cGUge051bWJlcn0KKyAgICAgICAqLworICAgICAgYnVmZmVyTGluZTogMSwKKwor
ICAgICAgLyoqCisgICAgICAgKiBUaGUgdG9wLWxldmVsIFByb2dyYW0gQVNUIGZvciB0aGUgb3Jp
Z2luYWwgZmlsZS4KKyAgICAgICAqLworICAgICAgb3JpZ2luYWxQcm9ncmFtQVNUOiBudWxsLAor
CisgICAgICBzb3VyY2VDb2x1bW46IDAsCisgICAgICBidWZmZXJDb2x1bW46IDAKKyAgICB9Cisg
IH07Cit9CisKKy8qKgorICogVXBkYXRlcyBhIGNvcHkgb2YgYSBnaXZlbiBzdGF0ZSB3aXRoICJ1
cGRhdGUiIGFuZCByZXR1cm5zIGFuIHVwZGF0ZWQgc3RhdGUuCisgKgorICogQHBhcmFtICB7T2Jq
ZWN0fSBzdGF0ZQorICogQHBhcmFtICB7T2JqZWN0fSB1cGRhdGUKKyAqIEByZXR1cm4ge09iamVj
dH0KKyAqLworZnVuY3Rpb24gdXBkYXRlU3RhdGUoc3RhdGUsIHVwZGF0ZSkgeworICByZXR1cm4g
eworICAgIGc6IHN0YXRlLmcsCisgICAgc3VwZXJWYXI6IHVwZGF0ZS5zdXBlclZhciB8fCBzdGF0
ZS5zdXBlclZhciwKKyAgICBzY29wZU5hbWU6IHVwZGF0ZS5zY29wZU5hbWUgfHwgc3RhdGUuc2Nv
cGVOYW1lCisgIH07Cit9CisKKy8qKgorICogR2l2ZW4gYSBzdGF0ZSBmaWxsIHRoZSByZXN1bHRp
bmcgYnVmZmVyIGZyb20gdGhlIG9yaWdpbmFsIHNvdXJjZSB1cCB0bworICogdGhlIGVuZAorICog
QHBhcmFtICB7TnVtYmVyfSBlbmQKKyAqIEBwYXJhbSAge09iamVjdH0gc3RhdGUKKyAqIEBwYXJh
bSB7RnVuY3Rpb24/fSBjb250ZW50VHJhbnNmb3JtZXIgT3B0aW9uYWwgY2FsbGJhY2sgdG8gdHJh
bnNmb3JtIG5ld2x5CisgKiBhZGRlZCBjb250ZW50LgorICovCitmdW5jdGlvbiBjYXRjaHVwKGVu
ZCwgc3RhdGUsIGNvbnRlbnRUcmFuc2Zvcm1lcikgeworICBpZiAoZW5kIDwgc3RhdGUuZy5wb3Np
dGlvbikgeworICAgIC8vIGNhbm5vdCBtb3ZlIGJhY2t3YXJkcworICAgIHJldHVybjsKKyAgfQor
ICB2YXIgc291cmNlID0gc3RhdGUuZy5zb3VyY2Uuc3Vic3RyaW5nKHN0YXRlLmcucG9zaXRpb24s
IGVuZCk7CisgIHZhciB0cmFuc2Zvcm1lZCA9IHVwZGF0ZUluZGVudChzb3VyY2UsIHN0YXRlKTsK
KyAgaWYgKHN0YXRlLmcuc291cmNlTWFwICYmIHRyYW5zZm9ybWVkKSB7CisgICAgLy8gcmVjb3Jk
IHdoZXJlIHdlIGFyZQorICAgIHN0YXRlLmcuc291cmNlTWFwLmFkZE1hcHBpbmcoeworICAgICAg
Z2VuZXJhdGVkOiB7IGxpbmU6IHN0YXRlLmcuYnVmZmVyTGluZSwgY29sdW1uOiBzdGF0ZS5nLmJ1
ZmZlckNvbHVtbiB9LAorICAgICAgb3JpZ2luYWw6IHsgbGluZTogc3RhdGUuZy5zb3VyY2VMaW5l
LCBjb2x1bW46IHN0YXRlLmcuc291cmNlQ29sdW1uIH0sCisgICAgICBzb3VyY2U6IHN0YXRlLmcu
c291cmNlTWFwRmlsZW5hbWUKKyAgICB9KTsKKworICAgIC8vIHJlY29yZCBsaW5lIGJyZWFrcyBp
biB0cmFuc2Zvcm1lZCBzb3VyY2UKKyAgICB2YXIgc291cmNlTGluZXMgPSBzb3VyY2Uuc3BsaXQo
J1xuJyk7CisgICAgdmFyIHRyYW5zZm9ybWVkTGluZXMgPSB0cmFuc2Zvcm1lZC5zcGxpdCgnXG4n
KTsKKyAgICAvLyBBZGQgbGluZSBicmVhayBtYXBwaW5ncyBiZXR3ZWVuIGxhc3Qga25vd24gbWFw
cGluZyBhbmQgdGhlIGVuZCBvZiB0aGUKKyAgICAvLyBhZGRlZCBwaWVjZS4gU28gZm9yIHRoZSBj
b2RlIHBpZWNlCisgICAgLy8gIChmb28sIGJhcik7CisgICAgLy8gPiB2YXIgeCA9IDI7CisgICAg
Ly8gPiB2YXIgYiA9IDM7CisgICAgLy8gICB2YXIgYyA9CisgICAgLy8gb25seSBhZGQgbGluZXMg
bWFya2VkIHdpdGggIj4iOiAyLCAzLgorICAgIGZvciAodmFyIGkgPSAxOyBpIDwgc291cmNlTGlu
ZXMubGVuZ3RoIC0gMTsgaSsrKSB7CisgICAgICBzdGF0ZS5nLnNvdXJjZU1hcC5hZGRNYXBwaW5n
KHsKKyAgICAgICAgZ2VuZXJhdGVkOiB7IGxpbmU6IHN0YXRlLmcuYnVmZmVyTGluZSwgY29sdW1u
OiAwIH0sCisgICAgICAgIG9yaWdpbmFsOiB7IGxpbmU6IHN0YXRlLmcuc291cmNlTGluZSwgY29s
dW1uOiAwIH0sCisgICAgICAgIHNvdXJjZTogc3RhdGUuZy5zb3VyY2VNYXBGaWxlbmFtZQorICAg
ICAgfSk7CisgICAgICBzdGF0ZS5nLnNvdXJjZUxpbmUrKzsKKyAgICAgIHN0YXRlLmcuYnVmZmVy
TGluZSsrOworICAgIH0KKyAgICAvLyBvZmZzZXQgZm9yIHRoZSBsYXN0IHBpZWNlCisgICAgaWYg
KHNvdXJjZUxpbmVzLmxlbmd0aCA+IDEpIHsKKyAgICAgIHN0YXRlLmcuc291cmNlTGluZSsrOwor
ICAgICAgc3RhdGUuZy5idWZmZXJMaW5lKys7CisgICAgICBzdGF0ZS5nLnNvdXJjZUNvbHVtbiA9
IDA7CisgICAgICBzdGF0ZS5nLmJ1ZmZlckNvbHVtbiA9IDA7CisgICAgfQorICAgIHN0YXRlLmcu
c291cmNlQ29sdW1uICs9IHNvdXJjZUxpbmVzW3NvdXJjZUxpbmVzLmxlbmd0aCAtIDFdLmxlbmd0
aDsKKyAgICBzdGF0ZS5nLmJ1ZmZlckNvbHVtbiArPQorICAgICAgdHJhbnNmb3JtZWRMaW5lc1t0
cmFuc2Zvcm1lZExpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aDsKKyAgfQorICBzdGF0ZS5nLmJ1ZmZl
ciArPQorICAgIGNvbnRlbnRUcmFuc2Zvcm1lciA/IGNvbnRlbnRUcmFuc2Zvcm1lcih0cmFuc2Zv
cm1lZCkgOiB0cmFuc2Zvcm1lZDsKKyAgc3RhdGUuZy5wb3NpdGlvbiA9IGVuZDsKK30KKworLyoq
CisgKiBBcHBsaWVzIGBjYXRjaHVwYCBidXQgcGFzc2luZyBpbiBhIGZ1bmN0aW9uIHRoYXQgcmVt
b3ZlcyBhbnkgbm9uLXdoaXRlc3BhY2UKKyAqIGNoYXJhY3RlcnMuCisgKi8KK3ZhciByZSA9IC8o
XFMpL2c7CitmdW5jdGlvbiBzdHJpcE5vbldoaXRlKHZhbHVlKSB7CisgIHJldHVybiB2YWx1ZS5y
ZXBsYWNlKHJlLCBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gJyc7CisgIH0pOworfQorLyoqCisg
KiBDYXRjaGVzIHVwIGFzIGBjYXRjaHVwYCBidXQgdHVybnMgZWFjaCBub24td2hpdGUgY2hhcmFj
dGVyIGludG8gYSBzcGFjZS4KKyAqLworZnVuY3Rpb24gY2F0Y2h1cFdoaXRlU3BhY2UoZW5kLCBz
dGF0ZSkgeworICBjYXRjaHVwKGVuZCwgc3RhdGUsIHN0cmlwTm9uV2hpdGUpOworfQorCisvKioK
KyAqIFNhbWUgYXMgY2F0Y2h1cCBidXQgZG9lcyBub3QgdG91Y2ggdGhlIGJ1ZmZlcgorICogQHBh
cmFtICB7TnVtYmVyfSBlbmQKKyAqIEBwYXJhbSAge09iamVjdH0gc3RhdGUKKyAqLworZnVuY3Rp
b24gbW92ZShlbmQsIHN0YXRlKSB7CisgIC8vIG1vdmUgdGhlIGludGVybmFsIGN1cnNvcnMKKyAg
aWYgKHN0YXRlLmcuc291cmNlTWFwKSB7CisgICAgaWYgKGVuZCA8IHN0YXRlLmcucG9zaXRpb24p
IHsKKyAgICAgIHN0YXRlLmcucG9zaXRpb24gPSAwOworICAgICAgc3RhdGUuZy5zb3VyY2VMaW5l
ID0gMTsKKyAgICAgIHN0YXRlLmcuc291cmNlQ29sdW1uID0gMDsKKyAgICB9CisKKyAgICB2YXIg
c291cmNlID0gc3RhdGUuZy5zb3VyY2Uuc3Vic3RyaW5nKHN0YXRlLmcucG9zaXRpb24sIGVuZCk7
CisgICAgdmFyIHNvdXJjZUxpbmVzID0gc291cmNlLnNwbGl0KCdcbicpOworICAgIGlmIChzb3Vy
Y2VMaW5lcy5sZW5ndGggPiAxKSB7CisgICAgICBzdGF0ZS5nLnNvdXJjZUxpbmUgKz0gc291cmNl
TGluZXMubGVuZ3RoIC0gMTsKKyAgICAgIHN0YXRlLmcuc291cmNlQ29sdW1uID0gMDsKKyAgICB9
CisgICAgc3RhdGUuZy5zb3VyY2VDb2x1bW4gKz0gc291cmNlTGluZXNbc291cmNlTGluZXMubGVu
Z3RoIC0gMV0ubGVuZ3RoOworICB9CisgIHN0YXRlLmcucG9zaXRpb24gPSBlbmQ7Cit9CisKKy8q
KgorICogQXBwZW5kcyBhIHN0cmluZyBvZiB0ZXh0IHRvIHRoZSBidWZmZXIKKyAqIEBwYXJhbSAg
e1N0cmluZ30gc3RyaW5nCisgKiBAcGFyYW0gIHtPYmplY3R9IHN0YXRlCisgKi8KK2Z1bmN0aW9u
IGFwcGVuZChzdHJpbmcsIHN0YXRlKSB7CisgIGlmIChzdGF0ZS5nLnNvdXJjZU1hcCAmJiBzdHJp
bmcpIHsKKyAgICBzdGF0ZS5nLnNvdXJjZU1hcC5hZGRNYXBwaW5nKHsKKyAgICAgIGdlbmVyYXRl
ZDogeyBsaW5lOiBzdGF0ZS5nLmJ1ZmZlckxpbmUsIGNvbHVtbjogc3RhdGUuZy5idWZmZXJDb2x1
bW4gfSwKKyAgICAgIG9yaWdpbmFsOiB7IGxpbmU6IHN0YXRlLmcuc291cmNlTGluZSwgY29sdW1u
OiBzdGF0ZS5nLnNvdXJjZUNvbHVtbiB9LAorICAgICAgc291cmNlOiBzdGF0ZS5nLnNvdXJjZU1h
cEZpbGVuYW1lCisgICAgfSk7CisgICAgdmFyIHRyYW5zZm9ybWVkTGluZXMgPSBzdHJpbmcuc3Bs
aXQoJ1xuJyk7CisgICAgaWYgKHRyYW5zZm9ybWVkTGluZXMubGVuZ3RoID4gMSkgeworICAgICAg
c3RhdGUuZy5idWZmZXJMaW5lICs9IHRyYW5zZm9ybWVkTGluZXMubGVuZ3RoIC0gMTsKKyAgICAg
IHN0YXRlLmcuYnVmZmVyQ29sdW1uID0gMDsKKyAgICB9CisgICAgc3RhdGUuZy5idWZmZXJDb2x1
bW4gKz0KKyAgICAgIHRyYW5zZm9ybWVkTGluZXNbdHJhbnNmb3JtZWRMaW5lcy5sZW5ndGggLSAx
XS5sZW5ndGg7CisgIH0KKyAgc3RhdGUuZy5idWZmZXIgKz0gc3RyaW5nOworfQorCisvKioKKyAq
IFVwZGF0ZSBpbmRlbnQgdXNpbmcgc3RhdGUuaW5kZW50QnkgcHJvcGVydHkuIEluZGVudCBpcyBt
ZWFzdXJlZCBpbgorICogZG91YmxlIHNwYWNlcy4gVXBkYXRlcyBhIHNpbmdsZSBsaW5lIG9ubHku
CisgKgorICogQHBhcmFtICB7U3RyaW5nfSBzdHIKKyAqIEBwYXJhbSAge09iamVjdH0gc3RhdGUK
KyAqIEByZXR1cm4ge1N0cmluZ30KKyAqLworZnVuY3Rpb24gdXBkYXRlSW5kZW50KHN0ciwgc3Rh
dGUpIHsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCAtc3RhdGUuZy5pbmRlbnRCeTsgaSsrKSB7Cisg
ICAgc3RyID0gc3RyLnJlcGxhY2UoLyhefFxuKSggezJ9fFx0KS9nLCAnJDEnKTsKKyAgfQorICBy
ZXR1cm4gc3RyOworfQorCisvKioKKyAqIENhbGN1bGF0ZXMgaW5kZW50IGZyb20gdGhlIGJlZ2lu
bmluZyBvZiB0aGUgbGluZSB1bnRpbCAic3RhcnQiIG9yIHRoZSBmaXJzdAorICogY2hhcmFjdGVy
IGJlZm9yZSBzdGFydC4KKyAqIEBleGFtcGxlCisgKiAgICIgIGZvby5iYXIoKSIKKyAqICAgICAg
ICAgXgorICogICAgICAgc3RhcnQKKyAqICAgaW5kZW50IHdpbGwgYmUgMgorICoKKyAqIEBwYXJh
bSAge051bWJlcn0gc3RhcnQKKyAqIEBwYXJhbSAge09iamVjdH0gc3RhdGUKKyAqIEByZXR1cm4g
e051bWJlcn0KKyAqLworZnVuY3Rpb24gaW5kZW50QmVmb3JlKHN0YXJ0LCBzdGF0ZSkgeworICB2
YXIgZW5kID0gc3RhcnQ7CisgIHN0YXJ0ID0gc3RhcnQgLSAxOworCisgIHdoaWxlIChzdGFydCA+
IDAgJiYgc3RhdGUuZy5zb3VyY2Vbc3RhcnRdICE9ICdcbicpIHsKKyAgICBpZiAoIXN0YXRlLmcu
c291cmNlW3N0YXJ0XS5tYXRjaCgvWyBcdF0vKSkgeworICAgICAgZW5kID0gc3RhcnQ7CisgICAg
fQorICAgIHN0YXJ0LS07CisgIH0KKyAgcmV0dXJuIHN0YXRlLmcuc291cmNlLnN1YnN0cmluZyhz
dGFydCArIDEsIGVuZCk7Cit9CisKK2Z1bmN0aW9uIGdldERvY2Jsb2NrKHN0YXRlKSB7CisgIGlm
ICghc3RhdGUuZy5kb2NibG9jaykgeworICAgIHZhciBkb2NibG9jayA9IHJlcXVpcmUoJy4vZG9j
YmxvY2snKTsKKyAgICBzdGF0ZS5nLmRvY2Jsb2NrID0KKyAgICAgIGRvY2Jsb2NrLnBhcnNlQXNP
YmplY3QoZG9jYmxvY2suZXh0cmFjdChzdGF0ZS5nLnNvdXJjZSkpOworICB9CisgIHJldHVybiBz
dGF0ZS5nLmRvY2Jsb2NrOworfQorCitleHBvcnRzLmNhdGNodXAgPSBjYXRjaHVwOworZXhwb3J0
cy5jYXRjaHVwV2hpdGVTcGFjZSA9IGNhdGNodXBXaGl0ZVNwYWNlOworZXhwb3J0cy5hcHBlbmQg
PSBhcHBlbmQ7CitleHBvcnRzLm1vdmUgPSBtb3ZlOworZXhwb3J0cy51cGRhdGVJbmRlbnQgPSB1
cGRhdGVJbmRlbnQ7CitleHBvcnRzLmluZGVudEJlZm9yZSA9IGluZGVudEJlZm9yZTsKK2V4cG9y
dHMudXBkYXRlU3RhdGUgPSB1cGRhdGVTdGF0ZTsKK2V4cG9ydHMuY3JlYXRlU3RhdGUgPSBjcmVh
dGVTdGF0ZTsKK2V4cG9ydHMuZ2V0RG9jYmxvY2sgPSBnZXREb2NibG9jazsKKworfSkoKQorfSx7
Ii4vZG9jYmxvY2siOjE2fV0sMTk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewor
KGZ1bmN0aW9uKCl7LyoqCisgKiBDb3B5cmlnaHQgMjAxMyBGYWNlYm9vaywgSW5jLgorICoKKyAq
IExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGlj
ZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5j
ZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNl
bnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4w
CisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBp
biB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMg
ZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBP
UiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICog
U2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1p
c3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKy8qZ2xv
YmFsIGV4cG9ydHM6dHJ1ZSovCisidXNlIHN0cmljdCI7CisKKy8qKgorICogRGVzdWdhcml6ZXIg
Zm9yIEVTNiBtaW5pbWFsIGNsYXNzIHByb3Bvc2FsLiBTZWUKKyAqIGh0dHA6Ly93aWtpLmVjbWFz
Y3JpcHQub3JnL2Rva3UucGhwP2lkPWhhcm1vbnk6cHJvcG9zYWxzCisgKgorICogRG9lcyBub3Qg
cmVxdWlyZSBhbnkgcnVudGltZS4gUHJlc2VydmVzIHdoaXRlc3BhY2UgYW5kIGNvbW1lbnRzLgor
ICogU3VwcG9ydHMgYSBjbGFzcyBkZWNsYXJhdGlvbiB3aXRoIG1ldGhvZHMsIHN1cGVyIGNhbGxz
IGFuZCBpbmhlcml0YW5jZS4KKyAqIEN1cnJlbnRseSBkb2VzIG5vdCBzdXBwb3J0IGZvciBnZXR0
ZXJzIGFuZCBzZXR0ZXJzLCBzaW5jZSB0aGVyZSdzIGEgdmVyeQorICogbG93IHByb2JhYmlsaXR5
IHdlJ3JlIGdvaW5nIHRvIHVzZSB0aGVtIGFueXRpbWUgc29vbi4KKyAqCisgKiBBZGRpdGlvbmFs
IGZlYXR1cmVzOgorICogLSBBbnkgbWVtYmVyIHdpdGggcHJpdmF0ZSBuYW1lICh0aGUgbmFtZSB3
aXRoIHByZWZpeCBfLCBzdWNoIF9uYW1lKSBpbnNpZGUKKyAqICAgdGhlIGNsYXNzJ3Mgc2NvcGUg
d2lsbCBiZSBtdW5nZWQuIFRoaXMgd291bGQgd2lsbCB0byBlbGltaW5hdGUgdGhlIGNhc2UKKyAq
ICAgb2Ygc3ViLWNsYXNzIGFjY2lkZW50YWxseSBvdmVycmlkaW5nIHRoZSBzdXBlci1jbGFzcydz
IHByb3ZhdGUgcHJvcGVydGllcworICogICBhbHNvIGRpc2NvdWFnZSBwZW9wbGUgZnJvbSBhY2Nl
c3NpbmcgcHJpdmF0ZSBtZW1iZXJzIHRoYXQgdGhleSBzaG91bGQgbm90CisgKiAgIGFjY2Vzcy4g
SG93ZXZlciwgcXVvdGVkIHByb3BlcnR5IG5hbWVzIGRvbid0IGdldCBtdW5nZWQuCisgKgorICog
Y2xhc3MgU2tpbm5lZE1lc2ggZXh0ZW5kcyByZXF1aXJlKCdUSFJFRScpLk1lc2ggeworICoKKyAq
ICAgdXBkYXRlKGNhbWVyYSkgeworICogICAgIGNhbWVyYS5jb2RlID0gJ2lwaG9uZScKKyAqICAg
ICBzdXBlci51cGRhdGUoY2FtZXJhKTsKKyAqICAgfQorICoKKyAqICAgLworICogICAgKiBAY29u
c3RydWN0b3IKKyAqICAgIC8KKyAqICAgY29uc3RydWN0b3IoZ2VvbWV0cnksIG1hdGVyaWFscykg
eworICogICAgIHN1cGVyKGdlb21ldHJ5LCBtYXRlcmlhbHMpOworICoKKyAqICAgICBzdXBlci51
cGRhdGUoMSk7CisgKgorICogICAgIHRoaXMuaWRlbnRpdHlNYXRyaXggPSBuZXcgVEhSRUUuTWF0
cml4NCgpOworICogICAgIHRoaXMuYm9uZXMgPSBbXTsKKyAqICAgICB0aGlzLmJvbmVNYXRyaWNl
cyA9IFtdOworICogICAgIHRoaXMuX25hbWUgPSAnZm9vJzsKKyAqICAgfQorICoKKyAqICAgLwor
ICogICAgKiBzb21lIG90aGVyIGNvZGUKKyAqICAgIC8KKyAqICAgcmVhZE1vcmUoKSB7CisgKgor
ICogICB9CisgKgorICogICBfZG9Tb21ldGhpbmcoKSB7CisgKgorICogICB9CisgKiB9CisgKgor
ICogc2hvdWxkIGJlIGNvbnZlcnRlZCB0bworICoKKyAqIHZhciBTa2lubmVkTWVzaCA9IChmdW5j
dGlvbigpIHsKKyAqICAgdmFyIF9fc3VwZXIgPSByZXF1aXJlKCdwYXJlbnQnKS5NZXNoOworICoK
KyAqICAgLworICogICAgKiBAY29uc3RydWN0b3IKKyAqICAgIC8KKyAqICAgZnVuY3Rpb24gU2tp
bm5lZE1lc2goZ2VvbWV0cnksIG1hdGVyaWFscykgeworICogICAgIF9fc3VwZXIuY2FsbCh0aGlz
LCBnZW9tZXRyeSwgbWF0ZXJpYWxzKTsKKyAqCisgKiAgICAgX19zdXBlci5wcm90b3R5cGUudXBk
YXRlLmNhbGwodGhpcywgMSk7CisgKgorICogICAgIHRoaXMuaWRlbnRpdHlNYXRyaXggPSBuZXcg
VEhSRUUuTWF0cml4NCgpOworICogICAgIHRoaXMuYm9uZXMgPSBbXTsKKyAqICAgICB0aGlzLmJv
bmVNYXRyaWNlcyA9IFtdOworICogICAgIHRoaXMuJFNraW5uZWRNZXNoX25hbWUgPSAnZm9vJzsK
KyAqICAgfQorICogICBTa2lubmVkTWVzaC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKF9fc3Vw
ZXIucHJvdG90eXBlKTsKKyAqICAgU2tpbm5lZE1lc2gucHJvdG90eXBlLmNvbnN0cnVjdG9yID0g
U2tpbm5lZE1lc2g7CisgKgorICogICAvCisgKiAgICAqIEBwYXJhbSBjYW1lcmEKKyAqICAgIC8K
KyAqICAgU2tpbm5lZE1lc2gucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uKGNhbWVyYSkgewor
ICogICAgIGNhbWVyYS5jb2RlID0gJ2lwaG9uZScKKyAqICAgICBfX3N1cGVyLnByb3RvdHlwZS51
cGRhdGUuY2FsbCh0aGlzLCBjYW1lcmEpOworICogICB9OworICoKKyAqICAgU2tpbm5lZE1lc2gu
cHJvdG90eXBlLnJlYWRNb3JlID0gZnVuY3Rpb24oKSB7CisgKgorICogICB9OworICoKKyAqICAg
U2tpbm5lZE1lc2gucHJvdG90eXBlLiRTa2lubmVkTWVzaF9kb1NvbWV0aGluZyA9IGZ1bmN0aW9u
KCkgeworICoKKyAqICAgfTsKKyAqCisgKiAgIHJldHVybiBTa2lubmVkTWVzaDsKKyAqIH0pKCk7
CisgKgorICovCit2YXIgU3ludGF4ID0gcmVxdWlyZSgnZXNwcmltYScpLlN5bnRheDsKK3ZhciBi
YXNlNjIgPSByZXF1aXJlKCdiYXNlNjInKTsKKwordmFyIGNhdGNodXAgPSByZXF1aXJlKCcuLi9s
aWIvdXRpbHMnKS5jYXRjaHVwOwordmFyIGFwcGVuZCA9IHJlcXVpcmUoJy4uL2xpYi91dGlscycp
LmFwcGVuZDsKK3ZhciBtb3ZlID0gcmVxdWlyZSgnLi4vbGliL3V0aWxzJykubW92ZTsKK3ZhciBp
bmRlbnRCZWZvcmUgPSByZXF1aXJlKCcuLi9saWIvdXRpbHMnKS5pbmRlbnRCZWZvcmU7Cit2YXIg
dXBkYXRlSW5kZW50ID0gcmVxdWlyZSgnLi4vbGliL3V0aWxzJykudXBkYXRlSW5kZW50OwordmFy
IHVwZGF0ZVN0YXRlID0gcmVxdWlyZSgnLi4vbGliL3V0aWxzJykudXBkYXRlU3RhdGU7CisKK2Z1
bmN0aW9uIGZpbmRDb25zdHJ1Y3RvckluZGV4KG9iamVjdCkgeworICB2YXIgY2xhc3NFbGVtZW50
cyA9IG9iamVjdC5ib2R5ICYmIG9iamVjdC5ib2R5LmJvZHkgfHwgW107CisgIGZvciAodmFyIGkg
PSAwOyBpIDwgY2xhc3NFbGVtZW50cy5sZW5ndGg7IGkrKykgeworICAgIGlmIChjbGFzc0VsZW1l
bnRzW2ldLnR5cGUgPT09IFN5bnRheC5NZXRob2REZWZpbml0aW9uICYmCisgICAgICBjbGFzc0Vs
ZW1lbnRzW2ldLmtleS5uYW1lID09PSAnY29uc3RydWN0b3InKSB7CisgICAgICByZXR1cm4gaTsK
KyAgICB9CisgIH0KKyAgcmV0dXJuIC0xOworfQorCit2YXIgX211bmdlZFN5bWJvbE1hcHMgPSB7
fTsKK2Z1bmN0aW9uIGdldE11bmdlZE5hbWUoc2NvcGVOYW1lLCBuYW1lLCBtaW5pZnkpIHsKKyAg
aWYgKG1pbmlmeSkgeworICAgIGlmICghX211bmdlZFN5bWJvbE1hcHNbc2NvcGVOYW1lXSkgewor
ICAgICAgX211bmdlZFN5bWJvbE1hcHNbc2NvcGVOYW1lXSA9IHsKKyAgICAgICAgc3ltYm9sTWFw
OiB7fSwKKyAgICAgICAgaWRlbnRpZmllclVVSURDb3VudGVyOiAwCisgICAgICB9OworICAgIH0K
KworICAgIHZhciBzeW1ib2xNYXAgPSBfbXVuZ2VkU3ltYm9sTWFwc1tzY29wZU5hbWVdLnN5bWJv
bE1hcDsKKyAgICBpZiAoIXN5bWJvbE1hcFtuYW1lXSkgeworICAgICAgc3ltYm9sTWFwW25hbWVd
ID0KKyAgICAgICAgYmFzZTYyLmVuY29kZShfbXVuZ2VkU3ltYm9sTWFwc1tzY29wZU5hbWVdLmlk
ZW50aWZpZXJVVUlEQ291bnRlcik7CisgICAgICBfbXVuZ2VkU3ltYm9sTWFwc1tzY29wZU5hbWVd
LmlkZW50aWZpZXJVVUlEQ291bnRlcisrOworICAgIH0KKyAgICBuYW1lID0gc3ltYm9sTWFwW25h
bWVdOworICB9CisgIHJldHVybiAnJCcgKyBzY29wZU5hbWUgKyBuYW1lOworfQorCitmdW5jdGlv
biBzaG91bGRNdW5nZU5hbWUoc2NvcGVOYW1lLCBuYW1lLCBzdGF0ZSkgeworICAvLyBvbmx5IHJ1
biB3aGVuIEBwcmV2ZW50TXVuZ2UgaXMgbm90IHByZXNlbnQgaW4gdGhlIGRvY2Jsb2NrCisgIGlm
IChzdGF0ZS5nLnByZXZlbnRNdW5nZSA9PT0gdW5kZWZpbmVkKSB7CisgICAgdmFyIGRvY2Jsb2Nr
ID0gcmVxdWlyZSgnLi4vbGliL2RvY2Jsb2NrJyk7CisgICAgc3RhdGUuZy5wcmV2ZW50TXVuZ2Ug
PSBkb2NibG9jay5wYXJzZUFzT2JqZWN0KAorICAgICAgZG9jYmxvY2suZXh0cmFjdChzdGF0ZS5n
LnNvdXJjZSkpLnByZXZlbnRNdW5nZSAhPT0gdW5kZWZpbmVkOworICB9CisgIC8vIFN0YXJ0cyB3
aXRoIG9ubHkgYSBzaW5nbGUgdW5kZXJzY29yZSAoaS5lLiBkb24ndCBjb3VudCBkb3VibGUtdW5k
ZXJzY29yZXMpCisgIHJldHVybiAhc3RhdGUuZy5wcmV2ZW50TXVuZ2UgJiYgc2NvcGVOYW1lID8g
L15fKD8hXykvLnRlc3QobmFtZSkgOiBmYWxzZTsKK30KKworCitmdW5jdGlvbiBnZXRQcm90b09m
UHJvdG90eXBlVmFyaWFibGVOYW1lKHN1cGVyVmFyKSB7CisgIHJldHVybiBzdXBlclZhciArICdQ
cm90b09mUHJvdG90eXBlJzsKK30KKworZnVuY3Rpb24gZ2V0U3VwZXJLZXlOYW1lKHN1cGVyVmFy
KSB7CisgIHJldHVybiBzdXBlclZhciArICdLZXknOworfQorCitmdW5jdGlvbiBnZXRTdXBlclBy
b3RvT2ZQcm90b3R5cGVWYXJpYWJsZShzdXBlclZhcmlhYmxlTmFtZSwgaW5kZW50KSB7CisgIHZh
ciBzdHJpbmcgPSAoaW5kZW50ICsKKyAgICAndmFyICRwcm90byA9ICRzdXBlck5hbWUgJiYgJHN1
cGVyTmFtZS5wcm90b3R5cGUgPyAnICsKKyAgICAnJHN1cGVyTmFtZS5wcm90b3R5cGUgOiAkc3Vw
ZXJOYW1lO1xuJworICApLnJlcGxhY2UoL1wkcHJvdG8vZywgZ2V0UHJvdG9PZlByb3RvdHlwZVZh
cmlhYmxlTmFtZShzdXBlclZhcmlhYmxlTmFtZSkpCisgICAucmVwbGFjZSgvXCRzdXBlck5hbWUv
Zywgc3VwZXJWYXJpYWJsZU5hbWUpOworICAgcmV0dXJuIHN0cmluZzsKK30KKworCitmdW5jdGlv
biBnZXRJbmhlcml0YW5jZVNldHVwKHN1cGVyQ2xhc3NUb2tlbiwgY2xhc3NOYW1lLCBpbmRlbnQs
IHN1cGVyTmFtZSkgeworICB2YXIgc3RyaW5nID0gJyc7CisgIGlmIChzdXBlckNsYXNzVG9rZW4p
IHsKKyAgICBzdHJpbmcgKz0gZ2V0U3RhdGljTWV0aG9kc09uQ29uc3RydWN0b3JTZXR1cChjbGFz
c05hbWUsIGluZGVudCwgc3VwZXJOYW1lKTsKKyAgICBzdHJpbmcgKz0gZ2V0UHJvdG90eXBlT25D
b25zdHJ1Y3RvclNldHVwKGNsYXNzTmFtZSwgaW5kZW50LCBzdXBlck5hbWUpOworICAgIHN0cmlu
ZyArPSBnZXRDb25zdHJ1Y3RvclByb3BlcnR5U2V0dXAoY2xhc3NOYW1lLCBpbmRlbnQpOworICB9
CisgIHJldHVybiBzdHJpbmc7Cit9CisKK2Z1bmN0aW9uIGdldFN0YXRpY01ldGhvZHNPbkNvbnN0
cnVjdG9yU2V0dXAoY2xhc3NOYW1lLCBpbmRlbnQsIHN1cGVyTmFtZSkgeworICB2YXIgc3RyaW5n
ID0gKCBpbmRlbnQgKworICAgICdmb3IgKHZhciAka2V5TmFtZSBpbiAkc3VwZXJOYW1lKSB7XG4n
ICsgaW5kZW50ICsKKyAgICAnICBpZiAoJHN1cGVyTmFtZS5oYXNPd25Qcm9wZXJ0eSgka2V5TmFt
ZSkpIHtcbicgKyBpbmRlbnQgKworICAgICcgICAgJGNsYXNzTmFtZVska2V5TmFtZV0gPSAkc3Vw
ZXJOYW1lWyRrZXlOYW1lXTtcbicgKyBpbmRlbnQgKworICAgICcgIH1cbicgKyBpbmRlbnQgKwor
ICAgICd9XG4nKQorICAgIC5yZXBsYWNlKC9cJGNsYXNzTmFtZS9nLCBjbGFzc05hbWUpCisgICAg
LnJlcGxhY2UoL1wka2V5TmFtZS9nLCBnZXRTdXBlcktleU5hbWUoc3VwZXJOYW1lKSkKKyAgICAu
cmVwbGFjZSgvXCRzdXBlck5hbWUvZywgc3VwZXJOYW1lKTsKKyAgcmV0dXJuIHN0cmluZzsKK30K
KworZnVuY3Rpb24gZ2V0UHJvdG90eXBlT25Db25zdHJ1Y3RvclNldHVwKGNsYXNzTmFtZSwgaW5k
ZW50LCBzdXBlck5hbWUpIHsKKyAgdmFyIHN0cmluZyA9ICggaW5kZW50ICsKKyAgICAnJGNsYXNz
TmFtZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCRwcm90b1Byb3RvdHlwZSk7XG4nKQorICAg
IC5yZXBsYWNlKC9cJHByb3RvUHJvdG90eXBlL2csIGdldFByb3RvT2ZQcm90b3R5cGVWYXJpYWJs
ZU5hbWUoc3VwZXJOYW1lKSkKKyAgICAucmVwbGFjZSgvXCRjbGFzc05hbWUvZywgY2xhc3NOYW1l
KTsKKyAgcmV0dXJuIHN0cmluZzsKK30KKworZnVuY3Rpb24gZ2V0Q29uc3RydWN0b3JQcm9wZXJ0
eVNldHVwKGNsYXNzTmFtZSwgaW5kZW50KSB7CisgIHZhciBzdHJpbmcgPSAoIGluZGVudCArCisg
ICAgJyRjbGFzc05hbWUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gJGNsYXNzTmFtZTtcbicpCisg
ICAgLnJlcGxhY2UoL1wkY2xhc3NOYW1lL2csIGNsYXNzTmFtZSk7CisKKyAgcmV0dXJuIHN0cmlu
ZzsKK30KKworZnVuY3Rpb24gZ2V0U3VwZXJDb25zdHJ1Y3RvclNldHVwKHN1cGVyQ2xhc3NUb2tl
biwgaW5kZW50LCBzdXBlck5hbWUpIHsKKyAgaWYgKCFzdXBlckNsYXNzVG9rZW4pIHJldHVybiAn
JzsKKyAgdmFyIHN0cmluZyA9ICggJ1xuJyArIGluZGVudCArCisgICAgJyAgaWYgKCRzdXBlck5h
bWUgJiYgJHN1cGVyTmFtZS5wcm90b3R5cGUpIHtcbicgKyBpbmRlbnQgKworICAgICcgICAgJHN1
cGVyTmFtZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuJyArIGluZGVudCArCisgICAgJyAgfVxu
JyArIGluZGVudCkKKyAgICAucmVwbGFjZSgvXCRzdXBlck5hbWUvZywgc3VwZXJOYW1lKTsKKyAg
cmV0dXJuIHN0cmluZzsKK30KKworZnVuY3Rpb24gZ2V0TWVtYmVyRnVuY3Rpb25DYWxsKHN1cGVy
VmFyLCBwcm9wZXJ0eU5hbWUsIHN1cGVyQXJncykgeworICB2YXIgc3RyaW5nID0gKAorICAgICck
c3VwZXJQcm90b3R5cGUuJHByb3BlcnR5TmFtZS5jYWxsKCRzdXBlckFyZ3VtZW50cyknKQorICAu
cmVwbGFjZSgvXCRzdXBlclByb3RvdHlwZS9nLCBnZXRQcm90b09mUHJvdG90eXBlVmFyaWFibGVO
YW1lKHN1cGVyVmFyKSkKKyAgLnJlcGxhY2UoL1wkcHJvcGVydHlOYW1lL2csIHByb3BlcnR5TmFt
ZSkKKyAgLnJlcGxhY2UoL1wkc3VwZXJBcmd1bWVudHMvZywgc3VwZXJBcmdzKTsKKyAgcmV0dXJu
IHN0cmluZzsKK30KKworZnVuY3Rpb24gZ2V0Q2FsbFBhcmFtcyhjbGFzc0VsZW1lbnQsIHN0YXRl
KSB7CisgIHZhciBwYXJhbXMgPSBjbGFzc0VsZW1lbnQudmFsdWUucGFyYW1zOworICBpZiAoIXBh
cmFtcy5sZW5ndGgpIHsKKyAgICByZXR1cm4gJyc7CisgIH0KKyAgcmV0dXJuIHN0YXRlLmcuc291
cmNlLnN1YnN0cmluZygKKyAgICBwYXJhbXNbMF0ucmFuZ2VbMF0sCisgICAgcGFyYW1zW3BhcmFt
cy5sZW5ndGggLSAxXS5yYW5nZVsxXSk7Cit9CisKK2Z1bmN0aW9uIGdldFN1cGVyQXJndW1lbnRz
KGNhbGxFeHByZXNzaW9uLCBzdGF0ZSkgeworICB2YXIgYXJncyA9IGNhbGxFeHByZXNzaW9uLmFy
Z3VtZW50czsKKyAgaWYgKCFhcmdzLmxlbmd0aCkgeworICAgIHJldHVybiAndGhpcyc7CisgIH0K
KyAgcmV0dXJuICd0aGlzLCAnICsgc3RhdGUuZy5zb3VyY2Uuc3Vic3RyaW5nKAorICAgIGFyZ3Nb
MF0ucmFuZ2VbMF0sCisgICAgYXJnc1thcmdzLmxlbmd0aCAtIDFdLnJhbmdlWzFdKTsKK30KKwor
Ly8gVGhlIHNlZWQgaXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgbmFtZSBmb3IgYW4gYW5vbnltb3Vz
IGNsYXNzLAorLy8gYW5kIHRoaXMgc2VlZCBzaG91bGQgYmUgdW5pcXVlIHBlciBicm93c2VyJ3Mg
c2Vzc2lvbi4KKy8vIFRoZSB2YWx1ZSBvZiB0aGUgc2VlZCBsb29rcyBsaWtlIHRoaXM6IDEyMjk1
ODg1MDUuMjk2OTAxMi4KK3ZhciBjbGFzc0lEU2VlZCA9IERhdGUubm93KCkgJSAoNjAgKiA2MCAq
IDEwMDApICsgTWF0aC5yYW5kb20oKTsKKworLyoqCisgKiBHZW5lcmF0ZXMgYSBuYW1lIGZvciBh
biBhbm9ueW1vdXMgY2xhc3MuIFRoZSBnZW5lcmF0ZWQgdmFsdWUgbG9va3MgbGlrZQorICogdGhp
czogIkNsYXNza2M2cGNuX21uaXphMXl2aSIKKyAqIEBwYXJhbSB7U3RyaW5nfSBzY29wZU5hbWUK
KyAqIEByZXR1cm4ge3N0cmluZ30gdGhlIHNjb3BlIG5hbWUgZm9yIEFub255bW91cyBDbGFzcwor
ICovCitmdW5jdGlvbiBnZW5lcmF0ZUFub255bW91c0NsYXNzTmFtZShzY29wZU5hbWUpIHsKKyAg
Y2xhc3NJRFNlZWQrKzsKKyAgcmV0dXJuICdDbGFzcycgKworICAgIChjbGFzc0lEU2VlZCkudG9T
dHJpbmcoMzYpLnJlcGxhY2UoJy4nLCAnXycpICsKKyAgICAoc2NvcGVOYW1lIHx8ICcnKTsKK30K
KworZnVuY3Rpb24gcmVuZGVyTWV0aG9kcyh0cmF2ZXJzZSwgb2JqZWN0LCBuYW1lLCBwYXRoLCBz
dGF0ZSkgeworICB2YXIgY2xhc3NFbGVtZW50cyA9IG9iamVjdC5ib2R5ICYmIG9iamVjdC5ib2R5
LmJvZHkgfHwgW107CisKKyAgbW92ZShvYmplY3QuYm9keS5yYW5nZVswXSArIDEsIHN0YXRlKTsK
KyAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGFzc0VsZW1lbnRzLmxlbmd0aDsgaSsrKSB7CisgICAg
aWYgKGNsYXNzRWxlbWVudHNbaV0ua2V5Lm5hbWUgIT09ICdjb25zdHJ1Y3RvcicpIHsKKyAgICAg
IGNhdGNodXAoY2xhc3NFbGVtZW50c1tpXS5yYW5nZVswXSwgc3RhdGUpOworCisgICAgICB2YXIg
bWVtYmVyTmFtZSA9IGNsYXNzRWxlbWVudHNbaV0ua2V5Lm5hbWU7CisgICAgICBpZiAoc2hvdWxk
TXVuZ2VOYW1lKHN0YXRlLnNjb3BlTmFtZSwgbWVtYmVyTmFtZSwgc3RhdGUpKSB7CisgICAgICAg
IG1lbWJlck5hbWUgPSBnZXRNdW5nZWROYW1lKAorICAgICAgICAgIHN0YXRlLnNjb3BlTmFtZSwK
KyAgICAgICAgICBtZW1iZXJOYW1lLAorICAgICAgICAgIHN0YXRlLmcub3B0cy5taW5pZnkKKyAg
ICAgICAgKTsKKyAgICAgIH0KKworICAgICAgdmFyIHByb3RvdHlwZU9yU3RhdGljOworICAgICAg
aWYgKGNsYXNzRWxlbWVudHNbaV1bJ3N0YXRpYyddKSB7CisgICAgICAgIHByb3RvdHlwZU9yU3Rh
dGljID0gJyc7CisgICAgICB9IGVsc2UgeworICAgICAgICBwcm90b3R5cGVPclN0YXRpYyA9ICdw
cm90b3R5cGUuJzsKKyAgICAgIH0KKworICAgICAgYXBwZW5kKG5hbWUgKyAnLicgKyBwcm90b3R5
cGVPclN0YXRpYyArIG1lbWJlck5hbWUgKyAnID0gJywgc3RhdGUpOworICAgICAgcmVuZGVyTWV0
aG9kKHRyYXZlcnNlLCBjbGFzc0VsZW1lbnRzW2ldLCBudWxsLCBwYXRoLCBzdGF0ZSk7CisgICAg
ICBhcHBlbmQoJzsnLCBzdGF0ZSk7CisgICAgfQorICAgIG1vdmUoY2xhc3NFbGVtZW50c1tpXS5y
YW5nZVsxXSwgc3RhdGUpOworICB9CisgIGlmIChjbGFzc0VsZW1lbnRzLmxlbmd0aCkgeworICAg
IGFwcGVuZCgnXG4nLCBzdGF0ZSk7CisgIH0KKyAgbW92ZShvYmplY3QucmFuZ2VbMV0sIHN0YXRl
KTsKK30KKworZnVuY3Rpb24gcmVuZGVyTWV0aG9kKHRyYXZlcnNlLCBtZXRob2QsIG5hbWUsIHBh
dGgsIHN0YXRlKSB7CisgIGFwcGVuZChuYW1lID8gJ2Z1bmN0aW9uICcgKyBuYW1lICsgJygnIDog
J2Z1bmN0aW9uKCcsIHN0YXRlKTsKKyAgYXBwZW5kKGdldENhbGxQYXJhbXMobWV0aG9kLCBzdGF0
ZSkgKyAnKSB7Jywgc3RhdGUpOworICBtb3ZlKG1ldGhvZC52YWx1ZS5ib2R5LnJhbmdlWzBdICsg
MSwgc3RhdGUpOworICB0cmF2ZXJzZShtZXRob2QudmFsdWUuYm9keSwgcGF0aCwgc3RhdGUpOwor
ICBjYXRjaHVwKG1ldGhvZC52YWx1ZS5ib2R5LnJhbmdlWzFdIC0gMSwgc3RhdGUpOworICBhcHBl
bmQoJ30nLCBzdGF0ZSk7Cit9CisKK2Z1bmN0aW9uIHJlbmRlclN1cGVyQ2xhc3ModHJhdmVyc2Us
IHN1cGVyQ2xhc3MsIHBhdGgsIHN0YXRlKSB7CisgIGFwcGVuZCgndmFyICcgKyBzdGF0ZS5zdXBl
clZhciArICcgPSAnLCBzdGF0ZSk7CisgIG1vdmUoc3VwZXJDbGFzcy5yYW5nZVswXSwgc3RhdGUp
OworICB0cmF2ZXJzZShzdXBlckNsYXNzLCBwYXRoLCBzdGF0ZSk7CisgIGNhdGNodXAoc3VwZXJD
bGFzcy5yYW5nZVsxXSwgc3RhdGUpOworICBhcHBlbmQoJztcbicsIHN0YXRlKTsKK30KKworZnVu
Y3Rpb24gcmVuZGVyQ29uc3RydWN0b3IodHJhdmVyc2UsIG9iamVjdCwgbmFtZSwgaW5kZW50LCBw
YXRoLCBzdGF0ZSkgeworICB2YXIgY2xhc3NFbGVtZW50cyA9IG9iamVjdC5ib2R5ICYmIG9iamVj
dC5ib2R5LmJvZHkgfHwgW107CisgIHZhciBjb25zdHJ1Y3RvckluZGV4ID0gZmluZENvbnN0cnVj
dG9ySW5kZXgob2JqZWN0KTsKKyAgdmFyIGNvbnN0cnVjdG9yID0gY29uc3RydWN0b3JJbmRleCA9
PT0gLTEgPworICAgIG51bGwgOgorICAgIGNsYXNzRWxlbWVudHNbY29uc3RydWN0b3JJbmRleF07
CisgIGlmIChjb25zdHJ1Y3RvcikgeworICAgIG1vdmUoY29uc3RydWN0b3JJbmRleCA9PT0gMCA/
CisgICAgICBvYmplY3QuYm9keS5yYW5nZVswXSArIDEgOgorICAgICAgY2xhc3NFbGVtZW50c1tj
b25zdHJ1Y3RvckluZGV4IC0gMV0ucmFuZ2VbMV0sIHN0YXRlKTsKKyAgICBjYXRjaHVwKGNvbnN0
cnVjdG9yLnJhbmdlWzBdLCBzdGF0ZSk7CisgICAgcmVuZGVyTWV0aG9kKHRyYXZlcnNlLCBjb25z
dHJ1Y3RvciwgbmFtZSwgcGF0aCwgc3RhdGUpOworICAgIGFwcGVuZCgnXG4nLCBzdGF0ZSk7Cisg
IH0gZWxzZSB7CisgICAgaWYgKG9iamVjdC5zdXBlckNsYXNzKSB7CisgICAgICBhcHBlbmQoJ1xu
JyArIGluZGVudCwgc3RhdGUpOworICAgIH0KKyAgICBhcHBlbmQoJ2Z1bmN0aW9uICcsIHN0YXRl
KTsKKyAgICBpZiAob2JqZWN0LmlkKSB7CisgICAgICBtb3ZlKG9iamVjdC5pZC5yYW5nZVswXSwg
c3RhdGUpOworICAgIH0KKyAgICBhcHBlbmQobmFtZSwgc3RhdGUpOworICAgIGlmIChvYmplY3Qu
aWQpIHsKKyAgICAgIG1vdmUob2JqZWN0LmlkLnJhbmdlWzFdLCBzdGF0ZSk7CisgICAgfQorICAg
IGFwcGVuZCgnKCl7ICcsIHN0YXRlKTsKKyAgICBpZiAob2JqZWN0LmJvZHkpIHsKKyAgICAgIG1v
dmUob2JqZWN0LmJvZHkucmFuZ2VbMF0sIHN0YXRlKTsKKyAgICB9CisgICAgYXBwZW5kKGdldFN1
cGVyQ29uc3RydWN0b3JTZXR1cCgKKyAgICAgIG9iamVjdC5zdXBlckNsYXNzLAorICAgICAgaW5k
ZW50LAorICAgICAgc3RhdGUuc3VwZXJWYXIpLCBzdGF0ZSk7CisgICAgYXBwZW5kKCd9XG4nLCBz
dGF0ZSk7CisgIH0KK30KKwordmFyIHN1cGVySWQgPSAwOworZnVuY3Rpb24gcmVuZGVyQ2xhc3NC
b2R5KHRyYXZlcnNlLCBvYmplY3QsIHBhdGgsIHN0YXRlKSB7CisgIHZhciBuYW1lID0gb2JqZWN0
LmlkID8gb2JqZWN0LmlkLm5hbWUgOiAnY29uc3RydWN0b3InOworICB2YXIgc3VwZXJDbGFzcyA9
IG9iamVjdC5zdXBlckNsYXNzOworICB2YXIgaW5kZW50ID0gdXBkYXRlSW5kZW50KAorICAgIGlu
ZGVudEJlZm9yZShvYmplY3QucmFuZ2VbMF0sIHN0YXRlKSArICcgICcsCisgICAgc3RhdGUpOwor
CisgIHN0YXRlID0gdXBkYXRlU3RhdGUoCisgICAgc3RhdGUsCisgICAgeworICAgICAgc2NvcGVO
YW1lOiBvYmplY3QuaWQgPyBvYmplY3QuaWQubmFtZSA6CisgICAgICAgIGdlbmVyYXRlQW5vbnlt
b3VzQ2xhc3NOYW1lKHN0YXRlLnNjb3BlTmFtZSksCisgICAgICBzdXBlclZhcjogc3VwZXJDbGFz
cyA/ICdfX3N1cGVyJyArIHN1cGVySWQrKyA6ICcnCisgICAgfSk7CisKKyAgLy8gc3VwZXIgY2xh
c3MKKyAgaWYgKHN1cGVyQ2xhc3MpIHsKKyAgICBhcHBlbmQoaW5kZW50LCBzdGF0ZSk7CisgICAg
cmVuZGVyU3VwZXJDbGFzcyh0cmF2ZXJzZSwgc3VwZXJDbGFzcywgcGF0aCwgc3RhdGUpOworICAg
IGFwcGVuZChnZXRTdXBlclByb3RvT2ZQcm90b3R5cGVWYXJpYWJsZShzdGF0ZS5zdXBlclZhciwg
aW5kZW50KSwgc3RhdGUpOworICB9CisKKyAgcmVuZGVyQ29uc3RydWN0b3IodHJhdmVyc2UsIG9i
amVjdCwgbmFtZSwgaW5kZW50LCBwYXRoLCBzdGF0ZSk7CisgIGFwcGVuZChnZXRJbmhlcml0YW5j
ZVNldHVwKHN1cGVyQ2xhc3MsIG5hbWUsIGluZGVudCwgc3RhdGUuc3VwZXJWYXIpLCBzdGF0ZSk7
CisgIHJlbmRlck1ldGhvZHModHJhdmVyc2UsIG9iamVjdCwgbmFtZSwgcGF0aCwgc3RhdGUpOwor
fQorCisKKy8qKgorICogQHB1YmxpYworICovCitmdW5jdGlvbiB2aXNpdENsYXNzRXhwcmVzc2lv
bih0cmF2ZXJzZSwgb2JqZWN0LCBwYXRoLCBzdGF0ZSkgeworICB2YXIgaW5kZW50ID0gdXBkYXRl
SW5kZW50KAorICAgIGluZGVudEJlZm9yZShvYmplY3QucmFuZ2VbMF0sIHN0YXRlKSArICcgICcs
CisgICAgc3RhdGUpOworICB2YXIgbmFtZSA9IG9iamVjdC5pZCA/IG9iamVjdC5pZC5uYW1lIDog
J2NvbnN0cnVjdG9yJzsKKworICBhcHBlbmQoJyhmdW5jdGlvbigpIHtcbicsIHN0YXRlKTsKKyAg
cmVuZGVyQ2xhc3NCb2R5KHRyYXZlcnNlLCBvYmplY3QsIHBhdGgsIHN0YXRlKTsKKyAgYXBwZW5k
KGluZGVudCArICdyZXR1cm4gJyArIG5hbWUgKyAnO1xuJywgc3RhdGUpOworICBhcHBlbmQoaW5k
ZW50LnN1YnN0cmluZygwLCBpbmRlbnQubGVuZ3RoIC0gMikgKyAnfSkoKScsIHN0YXRlKTsKKyAg
cmV0dXJuIGZhbHNlCit9CisKK3Zpc2l0Q2xhc3NFeHByZXNzaW9uLnRlc3QgPSBmdW5jdGlvbihv
YmplY3QsIHBhdGgsIHN0YXRlKSB7CisgIHJldHVybiBvYmplY3QudHlwZSA9PT0gU3ludGF4LkNs
YXNzRXhwcmVzc2lvbjsKK307CisKKy8qKgorICogQHB1YmxpYworICovCitmdW5jdGlvbiB2aXNp
dENsYXNzRGVjbGFyYXRpb24odHJhdmVyc2UsIG9iamVjdCwgcGF0aCwgc3RhdGUpIHsKKyAgc3Rh
dGUuZy5pbmRlbnRCeS0tOworICByZW5kZXJDbGFzc0JvZHkodHJhdmVyc2UsIG9iamVjdCwgcGF0
aCwgc3RhdGUpOworICBzdGF0ZS5nLmluZGVudEJ5Kys7CisgIHJldHVybiBmYWxzZTsKK30KKwor
dmlzaXRDbGFzc0RlY2xhcmF0aW9uLnRlc3QgPSBmdW5jdGlvbihvYmplY3QsIHBhdGgsIHN0YXRl
KSB7CisgIHJldHVybiBvYmplY3QudHlwZSA9PT0gU3ludGF4LkNsYXNzRGVjbGFyYXRpb247Cit9
OworCisKKy8qKgorICogQHB1YmxpYworICovCitmdW5jdGlvbiB2aXNpdFN1cGVyQ2FsbCh0cmF2
ZXJzZSwgb2JqZWN0LCBwYXRoLCBzdGF0ZSkgeworICBpZiAocGF0aFswXS50eXBlID09PSBTeW50
YXguQ2FsbEV4cHJlc3Npb24pIHsKKyAgICBhcHBlbmQoc3RhdGUuc3VwZXJWYXIgKworICAgICAg
Jy5jYWxsKCcgKyBnZXRTdXBlckFyZ3VtZW50cyhwYXRoWzBdLCBzdGF0ZSkgKyAnKScsIHN0YXRl
KTsKKyAgICBtb3ZlKHBhdGhbMF0ucmFuZ2VbMV0sIHN0YXRlKTsKKyAgfSBlbHNlIGlmIChwYXRo
WzBdLnR5cGUgPT09IFN5bnRheC5NZW1iZXJFeHByZXNzaW9uKSB7CisgICAgYXBwZW5kKGdldE1l
bWJlckZ1bmN0aW9uQ2FsbCgKKyAgICAgIHN0YXRlLnN1cGVyVmFyLAorICAgICAgcGF0aFswXS5w
cm9wZXJ0eS5uYW1lLAorICAgICAgZ2V0U3VwZXJBcmd1bWVudHMocGF0aFsxXSwgc3RhdGUpKSwg
c3RhdGUpOworICAgIG1vdmUocGF0aFsxXS5yYW5nZVsxXSwgc3RhdGUpOworICB9CisgIHJldHVy
biBmYWxzZTsKK30KKwordmlzaXRTdXBlckNhbGwudGVzdCA9IGZ1bmN0aW9uKG9iamVjdCwgcGF0
aCwgc3RhdGUpIHsKKyAgcmV0dXJuIHN0YXRlLnN1cGVyVmFyICYmIG9iamVjdC50eXBlID09PSBT
eW50YXguSWRlbnRpZmllciAmJgorICAgIG9iamVjdC5uYW1lID09PSAnc3VwZXInOworfTsKKwor
LyoqCisgKiBAcHVibGljCisgKi8KK2Z1bmN0aW9uIHZpc2l0UHJpdmF0ZVByb3BlcnR5KHRyYXZl
cnNlLCBvYmplY3QsIHBhdGgsIHN0YXRlKSB7CisgIHZhciB0eXBlID0gcGF0aFswXSA/IHBhdGhb
MF0udHlwZSA6IG51bGw7CisgIGlmICh0eXBlICE9PSBTeW50YXguUHJvcGVydHkpIHsKKyAgICBp
ZiAodHlwZSA9PT0gU3ludGF4Lk1lbWJlckV4cHJlc3Npb24pIHsKKyAgICAgIHR5cGUgPSBwYXRo
WzBdLm9iamVjdCA/IHBhdGhbMF0ub2JqZWN0LnR5cGUgOiBudWxsOworICAgICAgaWYgKHR5cGUg
PT09IFN5bnRheC5JZGVudGlmaWVyICYmCisgICAgICAgIHBhdGhbMF0ub2JqZWN0LnJhbmdlWzBd
ID09PSBvYmplY3QucmFuZ2VbMF0pIHsKKyAgICAgICAgLy8gSWRlbnRpZmllciBpcyBhIHZhcmlh
YmxlIHRoYXQgYXBwZWFycyAicHJpdmF0ZSIuCisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgLy8gT3RoZXIgc3ludGF4IHRoYXQgYXJlIG5laXRoZXIgUHJvcGVy
dHkgbm9yIE1lbWJlckV4cHJlc3Npb24uCisgICAgICByZXR1cm47CisgICAgfQorICB9CisKKyAg
dmFyIG9sZE5hbWUgPSBvYmplY3QubmFtZTsKKyAgdmFyIG5ld05hbWUgPSBnZXRNdW5nZWROYW1l
KAorICAgIHN0YXRlLnNjb3BlTmFtZSwKKyAgICBvbGROYW1lLAorICAgIHN0YXRlLmcub3B0cy5t
aW5pZnkKKyAgKTsKKyAgYXBwZW5kKG5ld05hbWUsIHN0YXRlKTsKKyAgbW92ZShvYmplY3QucmFu
Z2VbMV0sIHN0YXRlKTsKK30KKwordmlzaXRQcml2YXRlUHJvcGVydHkudGVzdCA9IGZ1bmN0aW9u
KG9iamVjdCwgcGF0aCwgc3RhdGUpIHsKKyAgcmV0dXJuIG9iamVjdC50eXBlID09PSBTeW50YXgu
SWRlbnRpZmllciAmJgorICAgIHNob3VsZE11bmdlTmFtZShzdGF0ZS5zY29wZU5hbWUsIG9iamVj
dC5uYW1lLCBzdGF0ZSk7Cit9OworCisKK2V4cG9ydHMudmlzaXRDbGFzc0RlY2xhcmF0aW9uID0g
dmlzaXRDbGFzc0RlY2xhcmF0aW9uOworZXhwb3J0cy52aXNpdENsYXNzRXhwcmVzc2lvbiA9IHZp
c2l0Q2xhc3NFeHByZXNzaW9uOworZXhwb3J0cy52aXNpdFN1cGVyQ2FsbCA9IHZpc2l0U3VwZXJD
YWxsOworZXhwb3J0cy52aXNpdFByaXZhdGVQcm9wZXJ0eSA9IHZpc2l0UHJpdmF0ZVByb3BlcnR5
OworCit9KSgpCit9LHsiLi4vbGliL2RvY2Jsb2NrIjoxNiwiLi4vbGliL3V0aWxzIjoxOCwiYmFz
ZTYyIjoxLCJlc3ByaW1hIjo0fV0sMjA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMp
eworKGZ1bmN0aW9uKCl7LyoqCisgKiBDb3B5cmlnaHQgMjAxMyBGYWNlYm9vaywgSW5jLgorICoK
KyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAi
TGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxp
YW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBM
aWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0Ut
Mi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0
byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2Ug
aXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElF
UyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgor
ICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBl
cm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKy8q
Z2xvYmFsIGV4cG9ydHM6dHJ1ZSovCisidXNlIHN0cmljdCI7CisKK3ZhciBTeW50YXggPSByZXF1
aXJlKCdlc3ByaW1hJykuU3ludGF4OworCit2YXIgY2F0Y2h1cCA9IHJlcXVpcmUoJy4uL2xpYi91
dGlscycpLmNhdGNodXA7Cit2YXIgYXBwZW5kID0gcmVxdWlyZSgnLi4vbGliL3V0aWxzJykuYXBw
ZW5kOwordmFyIG1vdmUgPSByZXF1aXJlKCcuLi9saWIvdXRpbHMnKS5tb3ZlOwordmFyIGdldERv
Y2Jsb2NrID0gcmVxdWlyZSgnLi4vbGliL3V0aWxzJykuZ2V0RG9jYmxvY2s7CisKK3ZhciBGQUxM
QkFDS19UQUdTID0gcmVxdWlyZSgnLi94anMnKS5rbm93blRhZ3M7Cit2YXIgcmVuZGVyWEpTRXhw
cmVzc2lvbkNvbnRhaW5lciA9CisgIHJlcXVpcmUoJy4veGpzJykucmVuZGVyWEpTRXhwcmVzc2lv
bkNvbnRhaW5lcjsKK3ZhciByZW5kZXJYSlNMaXRlcmFsID0gcmVxdWlyZSgnLi94anMnKS5yZW5k
ZXJYSlNMaXRlcmFsOwordmFyIHF1b3RlQXR0ck5hbWUgPSByZXF1aXJlKCcuL3hqcycpLnF1b3Rl
QXR0ck5hbWU7CisKKy8qKgorICogQ3VzdG9taXplZCBkZXN1Z2FyIHByb2Nlc3Nvci4KKyAqCisg
KiBDdXJyZW50bHk6IChTb21ld2hhdCB0YWlsb3JlZCB0byBSZWFjdCkKKyAqIDxYPiA8L1g+ID0+
IFgobnVsbCwgbnVsbCkKKyAqIDxYIHByb3A9IjEiIC8+ID0+IFgoe3Byb3A6ICcxJ30sIG51bGwp
CisgKiA8WCBwcm9wPSIyIj48WSAvPjwvWD4gPT4gWCh7cHJvcDonMid9LCBZKG51bGwsIG51bGwp
KQorICogPFggcHJvcD0iMiI+PFkgLz48WiAvPjwvWD4gPT4gWCh7cHJvcDonMid9LCBbWShudWxs
LCBudWxsKSwgWihudWxsLCBudWxsKV0pCisgKgorICogRXhjZXB0aW9ucyB0byB0aGUgc2ltcGxl
IHJ1bGVzIGFib3ZlOgorICogaWYgYSBwcm9wZXJ0eSBpcyBuYW1lZCAiY2xhc3MiIGl0IHdpbGwg
YmUgY2hhbmdlZCB0byAiY2xhc3NOYW1lIiBpbiB0aGUKKyAqIGphdmFzY3JpcHQgc2luY2UgImNs
YXNzIiBpcyBub3QgYSB2YWxpZCBvYmplY3Qga2V5IGluIGphdmFzY3JpcHQuCisgKi8KKwordmFy
IEpTWF9BVFRSSUJVVEVfUkVOQU1FUyA9IHsKKyAgJ2NsYXNzJzogJ2NsYXNzTmFtZScsCisgIGN4
TmFtZTogJ2NsYXNzTmFtZScKK307CisKK3ZhciBKU1hfQVRUUklCVVRFX1RSQU5TRk9STVMgPSB7
CisgIGN4TmFtZTogZnVuY3Rpb24oYXR0cikgeworICAgIGlmIChhdHRyLnZhbHVlLnR5cGUgIT09
IFN5bnRheC5MaXRlcmFsKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoImN4IG9ubHkgYWNjZXB0
cyBhIHN0cmluZyBsaXRlcmFsIik7CisgICAgfSBlbHNlIHsKKyAgICAgIHZhciBjbGFzc05hbWVz
ID0gYXR0ci52YWx1ZS52YWx1ZS5zcGxpdCgvXHMrL2cpOworICAgICAgcmV0dXJuICdjeCgnICsg
Y2xhc3NOYW1lcy5tYXAoSlNPTi5zdHJpbmdpZnkpLmpvaW4oJywnKSArICcpJzsKKyAgICB9Cisg
IH0KK307CisKK2Z1bmN0aW9uIHZpc2l0UmVhY3RUYWcodHJhdmVyc2UsIG9iamVjdCwgcGF0aCwg
c3RhdGUpIHsKKyAgdmFyIGpzeE9iaklkZW50ID0gZ2V0RG9jYmxvY2soc3RhdGUpLmpzeDsKKwor
ICBjYXRjaHVwKG9iamVjdC5vcGVuaW5nRWxlbWVudC5yYW5nZVswXSwgc3RhdGUpOworCisgIGlm
IChvYmplY3QubmFtZS5uYW1lc3BhY2UpIHsKKyAgICB0aHJvdyBuZXcgRXJyb3IoCisgICAgICAg
J05hbWVzcGFjZSB0YWdzIGFyZSBub3Qgc3VwcG9ydGVkLiBSZWFjdEpTWCBpcyBub3QgWE1MLicp
OworICB9CisKKyAgdmFyIGlzRmFsbGJhY2tUYWcgPSBGQUxMQkFDS19UQUdTW29iamVjdC5uYW1l
Lm5hbWVdOworICBhcHBlbmQoCisgICAgKGlzRmFsbGJhY2tUYWcgPyBqc3hPYmpJZGVudCArICcu
JyA6ICcnKSArIChvYmplY3QubmFtZS5uYW1lKSArICcoJywKKyAgICBzdGF0ZQorICApOworCisg
IG1vdmUob2JqZWN0Lm5hbWUucmFuZ2VbMV0sIHN0YXRlKTsKKworICB2YXIgY2hpbGRyZW5Ub1Jl
bmRlciA9IG9iamVjdC5jaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24oY2hpbGQpIHsKKyAgICByZXR1
cm4gIShjaGlsZC50eXBlID09PSBTeW50YXguTGl0ZXJhbCAmJiAhY2hpbGQudmFsdWUubWF0Y2go
L1xTLykpOworICB9KTsKKworICAvLyBpZiB3ZSBkb24ndCBoYXZlIGFueSBhdHRyaWJ1dGVzLCBw
YXNzIGluIG51bGwKKyAgaWYgKG9iamVjdC5hdHRyaWJ1dGVzLmxlbmd0aCA9PT0gMCkgeworICAg
IGFwcGVuZCgnbnVsbCcsIHN0YXRlKTsKKyAgfQorCisgIC8vIHdyaXRlIGF0dHJpYnV0ZXMKKyAg
b2JqZWN0LmF0dHJpYnV0ZXMuZm9yRWFjaChmdW5jdGlvbihhdHRyLCBpbmRleCkgeworICAgIGNh
dGNodXAoYXR0ci5yYW5nZVswXSwgc3RhdGUpOworICAgIGlmIChhdHRyLm5hbWUubmFtZXNwYWNl
KSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoCisgICAgICAgICAnTmFtZXNwYWNlIGF0dHJpYnV0
ZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIFJlYWN0SlNYIGlzIG5vdCBYTUwuJyk7CisgICAgfQorICAg
IHZhciBuYW1lID0gSlNYX0FUVFJJQlVURV9SRU5BTUVTW2F0dHIubmFtZS5uYW1lXSB8fCBhdHRy
Lm5hbWUubmFtZTsKKyAgICB2YXIgaXNGaXJzdCA9IGluZGV4ID09PSAwOworICAgIHZhciBpc0xh
c3QgPSBpbmRleCA9PT0gb2JqZWN0LmF0dHJpYnV0ZXMubGVuZ3RoIC0gMTsKKworICAgIGlmIChp
c0ZpcnN0KSB7CisgICAgICBhcHBlbmQoJ3snLCBzdGF0ZSk7CisgICAgfQorCisgICAgYXBwZW5k
KHF1b3RlQXR0ck5hbWUobmFtZSksIHN0YXRlKTsKKyAgICBhcHBlbmQoJzonLCBzdGF0ZSk7CisK
KyAgICBpZiAoIWF0dHIudmFsdWUpIHsKKyAgICAgIHN0YXRlLmcuYnVmZmVyICs9ICd0cnVlJzsK
KyAgICAgIHN0YXRlLmcucG9zaXRpb24gPSBhdHRyLm5hbWUucmFuZ2VbMV07CisgICAgICBpZiAo
IWlzTGFzdCkgeworICAgICAgICBhcHBlbmQoJywnLCBzdGF0ZSk7CisgICAgICB9CisgICAgfSBl
bHNlIGlmIChKU1hfQVRUUklCVVRFX1RSQU5TRk9STVNbYXR0ci5uYW1lLm5hbWVdKSB7CisgICAg
ICBtb3ZlKGF0dHIudmFsdWUucmFuZ2VbMF0sIHN0YXRlKTsKKyAgICAgIGFwcGVuZChKU1hfQVRU
UklCVVRFX1RSQU5TRk9STVNbYXR0ci5uYW1lLm5hbWVdKGF0dHIpLCBzdGF0ZSk7CisgICAgICBt
b3ZlKGF0dHIudmFsdWUucmFuZ2VbMV0sIHN0YXRlKTsKKyAgICAgIGlmICghaXNMYXN0KSB7Cisg
ICAgICAgIGFwcGVuZCgnLCcsIHN0YXRlKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGF0dHIu
dmFsdWUudHlwZSA9PT0gU3ludGF4LkxpdGVyYWwpIHsKKyAgICAgIG1vdmUoYXR0ci52YWx1ZS5y
YW5nZVswXSwgc3RhdGUpOworICAgICAgcmVuZGVyWEpTTGl0ZXJhbChhdHRyLnZhbHVlLCBpc0xh
c3QsIHN0YXRlKTsKKyAgICB9IGVsc2UgeworICAgICAgbW92ZShhdHRyLnZhbHVlLnJhbmdlWzBd
LCBzdGF0ZSk7CisgICAgICByZW5kZXJYSlNFeHByZXNzaW9uQ29udGFpbmVyKHRyYXZlcnNlLCBh
dHRyLnZhbHVlLCBpc0xhc3QsIHBhdGgsIHN0YXRlKTsKKyAgICB9CisKKyAgICBpZiAoaXNMYXN0
KSB7CisgICAgICBhcHBlbmQoJ30nLCBzdGF0ZSk7CisgICAgfQorCisgICAgY2F0Y2h1cChhdHRy
LnJhbmdlWzFdLCBzdGF0ZSk7CisgIH0pOworCisgIGlmICghb2JqZWN0LnNlbGZDbG9zaW5nKSB7
CisgICAgY2F0Y2h1cChvYmplY3Qub3BlbmluZ0VsZW1lbnQucmFuZ2VbMV0gLSAxLCBzdGF0ZSk7
CisgICAgbW92ZShvYmplY3Qub3BlbmluZ0VsZW1lbnQucmFuZ2VbMV0sIHN0YXRlKTsKKyAgfQor
CisgIC8vIGZpbHRlciBvdXQgd2hpdGVzcGFjZQorICBpZiAoY2hpbGRyZW5Ub1JlbmRlci5sZW5n
dGggPiAwKSB7CisgICAgYXBwZW5kKCcsICcsIHN0YXRlKTsKKworICAgIG9iamVjdC5jaGlsZHJl
bi5mb3JFYWNoKGZ1bmN0aW9uKGNoaWxkKSB7CisgICAgICBpZiAoY2hpbGQudHlwZSA9PT0gU3lu
dGF4LkxpdGVyYWwgJiYgIWNoaWxkLnZhbHVlLm1hdGNoKC9cUy8pKSB7CisgICAgICAgIHJldHVy
bjsKKyAgICAgIH0KKyAgICAgIGNhdGNodXAoY2hpbGQucmFuZ2VbMF0sIHN0YXRlKTsKKworICAg
ICAgdmFyIGlzTGFzdCA9IGNoaWxkID09PSBjaGlsZHJlblRvUmVuZGVyW2NoaWxkcmVuVG9SZW5k
ZXIubGVuZ3RoIC0gMV07CisKKyAgICAgIGlmIChjaGlsZC50eXBlID09PSBTeW50YXguTGl0ZXJh
bCkgeworICAgICAgICByZW5kZXJYSlNMaXRlcmFsKGNoaWxkLCBpc0xhc3QsIHN0YXRlKTsKKyAg
ICAgIH0gZWxzZSBpZiAoY2hpbGQudHlwZSA9PT0gU3ludGF4LlhKU0V4cHJlc3Npb25Db250YWlu
ZXIpIHsKKyAgICAgICAgcmVuZGVyWEpTRXhwcmVzc2lvbkNvbnRhaW5lcih0cmF2ZXJzZSwgY2hp
bGQsIGlzTGFzdCwgcGF0aCwgc3RhdGUpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdHJhdmVy
c2UoY2hpbGQsIHBhdGgsIHN0YXRlKTsKKyAgICAgICAgaWYgKCFpc0xhc3QpIHsKKyAgICAgICAg
ICBhcHBlbmQoJywnLCBzdGF0ZSk7CisgICAgICAgICAgc3RhdGUuZy5idWZmZXIgPSBzdGF0ZS5n
LmJ1ZmZlci5yZXBsYWNlKC8oXHMqKSwkLywgJywkMScpOworICAgICAgICB9CisgICAgICB9CisK
KyAgICAgIGNhdGNodXAoY2hpbGQucmFuZ2VbMV0sIHN0YXRlKTsKKyAgICB9KTsKKyAgfQorCisg
IGlmIChvYmplY3Quc2VsZkNsb3NpbmcpIHsKKyAgICAvLyBldmVyeXRoaW5nIHVwIHRvIC8+Cisg
ICAgY2F0Y2h1cChvYmplY3Qub3BlbmluZ0VsZW1lbnQucmFuZ2VbMV0gLSAyLCBzdGF0ZSk7Cisg
ICAgbW92ZShvYmplY3Qub3BlbmluZ0VsZW1lbnQucmFuZ2VbMV0sIHN0YXRlKTsKKyAgfSBlbHNl
IHsKKyAgICAvLyBldmVyeXRoaW5nIHVwIHRvIDwvIHNkZmxrc2pmZD4KKyAgICBjYXRjaHVwKG9i
amVjdC5jbG9zaW5nRWxlbWVudC5yYW5nZVswXSwgc3RhdGUpOworICAgIG1vdmUob2JqZWN0LmNs
b3NpbmdFbGVtZW50LnJhbmdlWzFdLCBzdGF0ZSk7CisgIH0KKworICBhcHBlbmQoJyknLCBzdGF0
ZSk7CisgIHJldHVybiBmYWxzZTsKK30KKwordmlzaXRSZWFjdFRhZy50ZXN0ID0gZnVuY3Rpb24o
b2JqZWN0LCBwYXRoLCBzdGF0ZSkgeworICAvLyBvbmx5IHJ1biByZWFjdCB3aGVuIHJlYWN0IEBq
c3ggbmFtZXNwYWNlIGlzIHNwZWNpZmllZCBpbiBkb2NibG9jaworICB2YXIganN4ID0gZ2V0RG9j
YmxvY2soc3RhdGUpLmpzeDsKKyAgcmV0dXJuIG9iamVjdC50eXBlID09PSBTeW50YXguWEpTRWxl
bWVudCAmJiBqc3ggJiYganN4Lmxlbmd0aDsKK307CisKK2V4cG9ydHMudmlzaXRSZWFjdFRhZyA9
IHZpc2l0UmVhY3RUYWc7CisKK30pKCkKK30seyIuLi9saWIvdXRpbHMiOjE4LCIuL3hqcyI6MjIs
ImVzcHJpbWEiOjR9XSwyMTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisoZnVu
Y3Rpb24oKXsvKioKKyAqIENvcHlyaWdodCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgorICogTGlj
ZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNl
Iik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdp
dGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2Ug
YXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAq
CisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdy
aXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0
cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENP
TkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUg
dGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lv
bnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworLypnbG9iYWwg
ZXhwb3J0czp0cnVlKi8KKyJ1c2Ugc3RyaWN0IjsKKwordmFyIFN5bnRheCA9IHJlcXVpcmUoJ2Vz
cHJpbWEnKS5TeW50YXg7Cit2YXIgY2F0Y2h1cCA9IHJlcXVpcmUoJy4uL2xpYi91dGlscycpLmNh
dGNodXA7Cit2YXIgYXBwZW5kID0gcmVxdWlyZSgnLi4vbGliL3V0aWxzJykuYXBwZW5kOwordmFy
IGdldERvY2Jsb2NrID0gcmVxdWlyZSgnLi4vbGliL3V0aWxzJykuZ2V0RG9jYmxvY2s7CisKKy8q
KgorICogVHJhbnNmb3JtcyB0aGUgZm9sbG93aW5nOgorICoKKyAqIHZhciBNeUNvbXBvbmVudCA9
IFJlYWN0LmNyZWF0ZUNsYXNzKHsKKyAqICAgIHJlbmRlcjogLi4uCisgKiB9KTsKKyAqCisgKiBp
bnRvOgorICoKKyAqIHZhciBNeUNvbXBvbmVudCA9IFJlYWN0LmNyZWF0ZUNsYXNzKHsKKyAqICAg
IGRpc3BsYXlOYW1lOiAnTXlDb21wb25lbnQnLAorICogICAgcmVuZGVyOiAuLi4KKyAqIH0pOwor
ICovCitmdW5jdGlvbiB2aXNpdFJlYWN0RGlzcGxheU5hbWUodHJhdmVyc2UsIG9iamVjdCwgcGF0
aCwgc3RhdGUpIHsKKyAgaWYgKG9iamVjdC5pZC50eXBlID09PSBTeW50YXguSWRlbnRpZmllciAm
JgorICAgICAgb2JqZWN0LmluaXQgJiYKKyAgICAgIG9iamVjdC5pbml0LnR5cGUgPT09IFN5bnRh
eC5DYWxsRXhwcmVzc2lvbiAmJgorICAgICAgb2JqZWN0LmluaXQuY2FsbGVlLnR5cGUgPT09IFN5
bnRheC5NZW1iZXJFeHByZXNzaW9uICYmCisgICAgICBvYmplY3QuaW5pdC5jYWxsZWUub2JqZWN0
LnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyICYmCisgICAgICBvYmplY3QuaW5pdC5jYWxsZWUu
b2JqZWN0Lm5hbWUgPT09ICdSZWFjdCcgJiYKKyAgICAgIG9iamVjdC5pbml0LmNhbGxlZS5wcm9w
ZXJ0eS50eXBlID09PSBTeW50YXguSWRlbnRpZmllciAmJgorICAgICAgb2JqZWN0LmluaXQuY2Fs
bGVlLnByb3BlcnR5Lm5hbWUgPT09ICdjcmVhdGVDbGFzcycgJiYKKyAgICAgIG9iamVjdC5pbml0
Wydhcmd1bWVudHMnXS5sZW5ndGggPT09IDEgJiYKKyAgICAgIG9iamVjdC5pbml0Wydhcmd1bWVu
dHMnXVswXS50eXBlID09PSBTeW50YXguT2JqZWN0RXhwcmVzc2lvbikgeworCisgICAgdmFyIGRp
c3BsYXlOYW1lID0gb2JqZWN0LmlkLm5hbWU7CisgICAgY2F0Y2h1cChvYmplY3QuaW5pdFsnYXJn
dW1lbnRzJ11bMF0ucmFuZ2VbMF0gKyAxLCBzdGF0ZSk7CisgICAgYXBwZW5kKCJkaXNwbGF5TmFt
ZTogJyIgKyBkaXNwbGF5TmFtZSArICInLCIsIHN0YXRlKTsKKyAgfQorfQorCisvKioKKyAqIFdp
bGwgb25seSBydW4gb24gQGpzeCBmaWxlcyBmb3Igbm93LgorICovCit2aXNpdFJlYWN0RGlzcGxh
eU5hbWUudGVzdCA9IGZ1bmN0aW9uKG9iamVjdCwgcGF0aCwgc3RhdGUpIHsKKyAgcmV0dXJuIG9i
amVjdC50eXBlID09PSBTeW50YXguVmFyaWFibGVEZWNsYXJhdG9yICYmICEhZ2V0RG9jYmxvY2so
c3RhdGUpLmpzeDsKK307CisKK2V4cG9ydHMudmlzaXRSZWFjdERpc3BsYXlOYW1lID0gdmlzaXRS
ZWFjdERpc3BsYXlOYW1lOworCit9KSgpCit9LHsiLi4vbGliL3V0aWxzIjoxOCwiZXNwcmltYSI6
NH1dLDIyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKyhmdW5jdGlvbigpey8q
KgorICogQ29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRl
ciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlv
dSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGlj
ZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAq
IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVz
cyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29m
dHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9u
IGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBP
RiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5z
ZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAq
IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisvKmdsb2JhbCBleHBvcnRzOnRy
dWUqLworInVzZSBzdHJpY3QiOwordmFyIGFwcGVuZCA9IHJlcXVpcmUoJy4uL2xpYi91dGlscycp
LmFwcGVuZDsKK3ZhciBjYXRjaHVwID0gcmVxdWlyZSgnLi4vbGliL3V0aWxzJykuY2F0Y2h1cDsK
K3ZhciBtb3ZlID0gcmVxdWlyZSgnLi4vbGliL3V0aWxzJykubW92ZTsKK3ZhciBTeW50YXggPSBy
ZXF1aXJlKCdlc3ByaW1hJykuU3ludGF4OworCit2YXIga25vd25UYWdzID0geworICBhOiB0cnVl
LAorICBhYmJyOiB0cnVlLAorICBhZGRyZXNzOiB0cnVlLAorICBhcHBsZXQ6IHRydWUsCisgIGFy
ZWE6IHRydWUsCisgIGFydGljbGU6IHRydWUsCisgIGFzaWRlOiB0cnVlLAorICBhdWRpbzogdHJ1
ZSwKKyAgYjogdHJ1ZSwKKyAgYmFzZTogdHJ1ZSwKKyAgYmRpOiB0cnVlLAorICBiZG86IHRydWUs
CisgIGJpZzogdHJ1ZSwKKyAgYmxvY2txdW90ZTogdHJ1ZSwKKyAgYm9keTogdHJ1ZSwKKyAgYnI6
IHRydWUsCisgIGJ1dHRvbjogdHJ1ZSwKKyAgY2FudmFzOiB0cnVlLAorICBjYXB0aW9uOiB0cnVl
LAorICBjaXJjbGU6IHRydWUsCisgIGNpdGU6IHRydWUsCisgIGNvZGU6IHRydWUsCisgIGNvbDog
dHJ1ZSwKKyAgY29sZ3JvdXA6IHRydWUsCisgIGNvbW1hbmQ6IHRydWUsCisgIGRhdGE6IHRydWUs
CisgIGRhdGFsaXN0OiB0cnVlLAorICBkZDogdHJ1ZSwKKyAgZGVsOiB0cnVlLAorICBkZXRhaWxz
OiB0cnVlLAorICBkZm46IHRydWUsCisgIGRpYWxvZzogdHJ1ZSwKKyAgZGl2OiB0cnVlLAorICBk
bDogdHJ1ZSwKKyAgZHQ6IHRydWUsCisgIGVsbGlwc2U6IHRydWUsCisgIGVtOiB0cnVlLAorICBl
bWJlZDogdHJ1ZSwKKyAgZmllbGRzZXQ6IHRydWUsCisgIGZpZ2NhcHRpb246IHRydWUsCisgIGZp
Z3VyZTogdHJ1ZSwKKyAgZm9vdGVyOiB0cnVlLAorICBmb3JtOiB0cnVlLAorICBnOiB0cnVlLAor
ICBoMTogdHJ1ZSwKKyAgaDI6IHRydWUsCisgIGgzOiB0cnVlLAorICBoNDogdHJ1ZSwKKyAgaDU6
IHRydWUsCisgIGg2OiB0cnVlLAorICBoZWFkOiB0cnVlLAorICBoZWFkZXI6IHRydWUsCisgIGhn
cm91cDogdHJ1ZSwKKyAgaHI6IHRydWUsCisgIGh0bWw6IHRydWUsCisgIGk6IHRydWUsCisgIGlm
cmFtZTogdHJ1ZSwKKyAgaW1nOiB0cnVlLAorICBpbnB1dDogdHJ1ZSwKKyAgaW5zOiB0cnVlLAor
ICBrYmQ6IHRydWUsCisgIGtleWdlbjogdHJ1ZSwKKyAgbGFiZWw6IHRydWUsCisgIGxlZ2VuZDog
dHJ1ZSwKKyAgbGk6IHRydWUsCisgIGxpbmU6IHRydWUsCisgIGxpbms6IHRydWUsCisgIG1haW46
IHRydWUsCisgIG1hcDogdHJ1ZSwKKyAgbWFyazogdHJ1ZSwKKyAgbWFycXVlZTogdHJ1ZSwKKyAg
bWVudTogdHJ1ZSwKKyAgbWVudWl0ZW06IHRydWUsCisgIG1ldGE6IHRydWUsCisgIG1ldGVyOiB0
cnVlLAorICBuYXY6IHRydWUsCisgIG5vc2NyaXB0OiB0cnVlLAorICBvYmplY3Q6IHRydWUsCisg
IG9sOiB0cnVlLAorICBvcHRncm91cDogdHJ1ZSwKKyAgb3B0aW9uOiB0cnVlLAorICBvdXRwdXQ6
IHRydWUsCisgIHA6IHRydWUsCisgIHBhcmFtOiB0cnVlLAorICBwYXRoOiB0cnVlLAorICBwb2x5
bGluZTogdHJ1ZSwKKyAgcHJlOiB0cnVlLAorICBwcm9ncmVzczogdHJ1ZSwKKyAgcTogdHJ1ZSwK
KyAgcmVjdDogdHJ1ZSwKKyAgcnA6IHRydWUsCisgIHJ0OiB0cnVlLAorICBydWJ5OiB0cnVlLAor
ICBzOiB0cnVlLAorICBzYW1wOiB0cnVlLAorICBzY3JpcHQ6IHRydWUsCisgIHNlY3Rpb246IHRy
dWUsCisgIHNlbGVjdDogdHJ1ZSwKKyAgc21hbGw6IHRydWUsCisgIHNvdXJjZTogdHJ1ZSwKKyAg
c3BhbjogdHJ1ZSwKKyAgc3Ryb25nOiB0cnVlLAorICBzdHlsZTogdHJ1ZSwKKyAgc3ViOiB0cnVl
LAorICBzdW1tYXJ5OiB0cnVlLAorICBzdXA6IHRydWUsCisgIHN2ZzogdHJ1ZSwKKyAgdGFibGU6
IHRydWUsCisgIHRib2R5OiB0cnVlLAorICB0ZDogdHJ1ZSwKKyAgdGV4dDogdHJ1ZSwKKyAgdGV4
dGFyZWE6IHRydWUsCisgIHRmb290OiB0cnVlLAorICB0aDogdHJ1ZSwKKyAgdGhlYWQ6IHRydWUs
CisgIHRpbWU6IHRydWUsCisgIHRpdGxlOiB0cnVlLAorICB0cjogdHJ1ZSwKKyAgdHJhY2s6IHRy
dWUsCisgIHU6IHRydWUsCisgIHVsOiB0cnVlLAorICAndmFyJzogdHJ1ZSwKKyAgdmlkZW86IHRy
dWUsCisgIHdicjogdHJ1ZQorfTsKKworZnVuY3Rpb24gc2FmZVRyaW0oc3RyaW5nKSB7CisgIHJl
dHVybiBzdHJpbmcucmVwbGFjZSgvXlsgXHRdKy8sICcnKS5yZXBsYWNlKC9bIFx0XSskLywgJycp
OworfQorCisvLyBSZXBsYWNlIGFsbCB0cmFpbGluZyB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgd2l0
aCBhIHNpbmdsZSBzcGFjZSBjaGFyYWN0ZXIKK2Z1bmN0aW9uIHRyaW1XaXRoU2luZ2xlU3BhY2Uo
c3RyaW5nKSB7CisgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXlsgXHRceEEwXXsyLH0vLCAnICcp
LgorICAgIHJlcGxhY2UoL1sgXHRceEEwXXsyLH0kLywgJyAnKS5yZXBsYWNlKC9eXHMrJC8sICcn
KTsKK30KKworLyoqCisgKiBTcGVjaWFsIGhhbmRsaW5nIGZvciBtdWx0aWxpbmUgc3RyaW5nIGxp
dGVyYWxzCisgKiBwcmludCBsaW5lczoKKyAqCisgKiAgIGxpbmUKKyAqICAgbGluZQorICoKKyAq
IGFzOgorICoKKyAqICAgImxpbmUgIisKKyAqICAgImxpbmUiCisgKi8KK2Z1bmN0aW9uIHJlbmRl
clhKU0xpdGVyYWwob2JqZWN0LCBpc0xhc3QsIHN0YXRlLCBzdGFydCwgZW5kKSB7CisgIC8qKiBB
ZGRlZCBibGFuayBjaGVjayBmaWx0ZXJpbmcgYW5kIHRyaW1pbmcqLworICB2YXIgdHJpbW1lZENo
aWxkVmFsdWUgPSBzYWZlVHJpbShvYmplY3QudmFsdWUpOworCisgIGlmICh0cmltbWVkQ2hpbGRW
YWx1ZSkgeworICAgIC8vIGhlYWQgd2hpdGVzcGFjZQorICAgIGFwcGVuZChvYmplY3QudmFsdWUu
bWF0Y2goL15bXHQgXSovKVswXSwgc3RhdGUpOworICAgIGlmIChzdGFydCkgeworICAgICAgYXBw
ZW5kKHN0YXJ0LCBzdGF0ZSk7CisgICAgfQorCisgICAgdmFyIHRyaW1tZWRDaGlsZFZhbHVlV2l0
aFNwYWNlID0gdHJpbVdpdGhTaW5nbGVTcGFjZShvYmplY3QudmFsdWUpOworCisgICAgLyoqCisg
ICAgICovCisgICAgdmFyIGluaXRpYWxMaW5lcyA9IHRyaW1tZWRDaGlsZFZhbHVlLnNwbGl0KC9c
clxufFxufFxyLyk7CisKKyAgICB2YXIgbGluZXMgPSBpbml0aWFsTGluZXMuZmlsdGVyKGZ1bmN0
aW9uKGxpbmUpIHsKKyAgICAgIHJldHVybiBzYWZlVHJpbShsaW5lKS5sZW5ndGggPiAwOworICAg
IH0pOworCisgICAgdmFyIGhhc0luaXRpYWxOZXdMaW5lID0gaW5pdGlhbExpbmVzWzBdICE9PSBs
aW5lc1swXTsKKyAgICB2YXIgaGFzRmluYWxOZXdMaW5lID0KKyAgICAgIGluaXRpYWxMaW5lc1tp
bml0aWFsTGluZXMubGVuZ3RoIC0gMV0gIT09IGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdOworCisg
ICAgdmFyIG51bUxpbmVzID0gbGluZXMubGVuZ3RoOworICAgIGxpbmVzLmZvckVhY2goZnVuY3Rp
b24gKGxpbmUsIGlpKSB7CisgICAgICB2YXIgbGFzdExpbmUgPSBpaSA9PT0gbnVtTGluZXMgLSAx
OworICAgICAgdmFyIHRyaW1tZWRMaW5lID0gc2FmZVRyaW0obGluZSk7CisgICAgICBpZiAodHJp
bW1lZExpbmUgPT09ICcnICYmICFsYXN0TGluZSkgeworICAgICAgICBhcHBlbmQobGluZSwgc3Rh
dGUpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIHByZVN0cmluZyA9ICcnOworICAgICAg
ICB2YXIgcG9zdFN0cmluZyA9ICcnOworICAgICAgICB2YXIgbGVhZGluZyA9ICcnOworCisgICAg
ICAgIGlmIChpaSA9PT0gMCkgeworICAgICAgICAgIGlmIChoYXNJbml0aWFsTmV3TGluZSkgewor
ICAgICAgICAgICAgcHJlU3RyaW5nID0gJyAnOworICAgICAgICAgICAgbGVhZGluZyA9ICdcbic7
CisgICAgICAgICAgfQorICAgICAgICAgIGlmICh0cmltbWVkQ2hpbGRWYWx1ZVdpdGhTcGFjZS5z
dWJzdHJpbmcoMCwgMSkgPT09ICcgJykgeworICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUg
Zmlyc3QgbGluZSwgYW5kIHRoZSBvcmlnaW5hbCBjb250ZW50IHN0YXJ0cyB3aXRoCisgICAgICAg
ICAgICAvLyB3aGl0ZXNwYWNlLCBwbGFjZSBhIHNpbmdsZSBzcGFjZSBhdCB0aGUgYmVnaW5uaW5n
LgorICAgICAgICAgICAgcHJlU3RyaW5nID0gJyAnOworICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICBsZWFkaW5nID0gbGluZS5tYXRjaCgvXlsgXHRdKi8pWzBdOworICAg
ICAgICB9CisgICAgICAgIGlmICghbGFzdExpbmUgfHwgdHJpbW1lZENoaWxkVmFsdWVXaXRoU3Bh
Y2Uuc3Vic3RyKAorICAgICAgICAgICAgIHRyaW1tZWRDaGlsZFZhbHVlV2l0aFNwYWNlLmxlbmd0
aCAtIDEsIDEpID09PSAnICcgfHwKKyAgICAgICAgICAgICBoYXNGaW5hbE5ld0xpbmUKKyAgICAg
ICAgICAgICApIHsKKyAgICAgICAgICAvLyBJZiBlaXRoZXIgbm90IG9uIHRoZSBsYXN0IGxpbmUs
IG9yIHRoZSBvcmlnaW5hbCBjb250ZW50IGVuZHMgd2l0aAorICAgICAgICAgIC8vIHdoaXRlc3Bh
Y2UsIHBsYWNlIGEgc2luZ2xlIGNoYXJhY3RlciBhdCB0aGUgZW5kLgorICAgICAgICAgIHBvc3RT
dHJpbmcgPSAnICc7CisgICAgICAgIH0KKworICAgICAgICBhcHBlbmQoCisgICAgICAgICAgbGVh
ZGluZyArCisgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoCisgICAgICAgICAgICBwcmVTdHJpbmcg
KyB0cmltbWVkTGluZSArIHBvc3RTdHJpbmcKKyAgICAgICAgICApICsKKyAgICAgICAgICAobGFz
dExpbmUgPyAnJyA6ICcrJykgKworICAgICAgICAgIGxpbmUubWF0Y2goL1sgXHRdKiQvKVswXSwK
KyAgICAgICAgICBzdGF0ZSk7CisgICAgICB9CisgICAgICBpZiAoIWxhc3RMaW5lKSB7CisgICAg
ICAgIGFwcGVuZCgnXG4nLCBzdGF0ZSk7CisgICAgICB9CisgICAgfSk7CisgIH0gZWxzZSB7Cisg
ICAgaWYgKHN0YXJ0KSB7CisgICAgICBhcHBlbmQoc3RhcnQsIHN0YXRlKTsKKyAgICB9CisgICAg
YXBwZW5kKCciIicsIHN0YXRlKTsKKyAgfQorICBpZiAoZW5kKSB7CisgICAgYXBwZW5kKGVuZCwg
c3RhdGUpOworICB9CisKKyAgLy8gYWRkIGNvbW1hIGJlZm9yZSB0cmFpbGluZyB3aGl0ZXNwYWNl
CisgIGlmICghaXNMYXN0KSB7CisgICAgYXBwZW5kKCcsJywgc3RhdGUpOworICB9CisKKyAgLy8g
dGFpbCB3aGl0ZXNwYWNlCisgIGFwcGVuZChvYmplY3QudmFsdWUubWF0Y2goL1sgXHRdKiQvKVsw
XSwgc3RhdGUpOworICBtb3ZlKG9iamVjdC5yYW5nZVsxXSwgc3RhdGUpOworfQorCitmdW5jdGlv
biByZW5kZXJYSlNFeHByZXNzaW9uQ29udGFpbmVyKHRyYXZlcnNlLCBvYmplY3QsIGlzTGFzdCwg
cGF0aCwgc3RhdGUpIHsKKyAgLy8gUGx1cyAxIHRvIHNraXAgYHtgLgorICBtb3ZlKG9iamVjdC5y
YW5nZVswXSArIDEsIHN0YXRlKTsKKyAgdHJhdmVyc2Uob2JqZWN0LmV4cHJlc3Npb24sIHBhdGgs
IHN0YXRlKTsKKyAgaWYgKCFpc0xhc3QgJiYgb2JqZWN0LmV4cHJlc3Npb24udHlwZSAhPT0gU3lu
dGF4LlhKU0VtcHR5RXhwcmVzc2lvbikgeworICAgIC8vIElmIHdlIG5lZWQgdG8gYXBwZW5kIGEg
Y29tbWEsIG1ha2Ugc3VyZSB0byBkbyBzbyBhZnRlciB0aGUgZXhwcmVzc2lvbi4KKyAgICBjYXRj
aHVwKG9iamVjdC5leHByZXNzaW9uLnJhbmdlWzFdLCBzdGF0ZSk7CisgICAgYXBwZW5kKCcsJywg
c3RhdGUpOworICB9CisKKyAgLy8gTWludXMgMSB0byBza2lwIGB9YC4KKyAgY2F0Y2h1cChvYmpl
Y3QucmFuZ2VbMV0gLSAxLCBzdGF0ZSk7CisgIG1vdmUob2JqZWN0LnJhbmdlWzFdLCBzdGF0ZSk7
CisgIHJldHVybiBmYWxzZTsKK30KKworZnVuY3Rpb24gcXVvdGVBdHRyTmFtZShhdHRyKSB7Cisg
IC8vIFF1b3RlIGludmFsaWQgSlMgaWRlbnRpZmllcnMuCisgIGlmICghL15bYS16XyRdW2Etelxk
XyRdKiQvaS50ZXN0KGF0dHIpKSB7CisgICAgcmV0dXJuICInIiArIGF0dHIgKyAiJyI7CisgIH0K
KyAgcmV0dXJuIGF0dHI7Cit9CisKK2V4cG9ydHMua25vd25UYWdzID0ga25vd25UYWdzOworZXhw
b3J0cy5yZW5kZXJYSlNFeHByZXNzaW9uQ29udGFpbmVyID0gcmVuZGVyWEpTRXhwcmVzc2lvbkNv
bnRhaW5lcjsKK2V4cG9ydHMucmVuZGVyWEpTTGl0ZXJhbCA9IHJlbmRlclhKU0xpdGVyYWw7Citl
eHBvcnRzLnF1b3RlQXR0ck5hbWUgPSBxdW90ZUF0dHJOYW1lOworCit9KSgpCit9LHsiLi4vbGli
L3V0aWxzIjoxOCwiZXNwcmltYSI6NH1dLDIzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBv
cnRzKXsKKyhmdW5jdGlvbigpey8qZ2xvYmFsIGV4cG9ydHM6dHJ1ZSovCit2YXIgY2xhc3NlcyA9
IHJlcXVpcmUoJy4vdHJhbnNmb3Jtcy9jbGFzc2VzJyk7Cit2YXIgcmVhY3QgPSByZXF1aXJlKCcu
L3RyYW5zZm9ybXMvcmVhY3QnKTsKK3ZhciByZWFjdERpc3BsYXlOYW1lID0gcmVxdWlyZSgnLi90
cmFuc2Zvcm1zL3JlYWN0RGlzcGxheU5hbWUnKTsKKworLyoqCisgKiBNYXAgZnJvbSB0cmFuc2Zv
cm1OYW1lID0+IG9yZGVyZWRMaXN0T2ZWaXNpdG9ycy4KKyAqLwordmFyIHRyYW5zZm9ybVZpc2l0
b3JzID0geworICAnZXM2LWNsYXNzZXMnOiBbCisgICAgY2xhc3Nlcy52aXNpdENsYXNzRXhwcmVz
c2lvbiwKKyAgICBjbGFzc2VzLnZpc2l0Q2xhc3NEZWNsYXJhdGlvbiwKKyAgICBjbGFzc2VzLnZp
c2l0U3VwZXJDYWxsLAorICAgIGNsYXNzZXMudmlzaXRQcml2YXRlUHJvcGVydHkKKyAgXQorfTsK
KwordHJhbnNmb3JtVmlzaXRvcnMucmVhY3QgPSB0cmFuc2Zvcm1WaXNpdG9yc1sKKyAgImVzNi1j
bGFzc2VzIgorXS5jb25jYXQoWworICByZWFjdC52aXNpdFJlYWN0VGFnLAorICByZWFjdERpc3Bs
YXlOYW1lLnZpc2l0UmVhY3REaXNwbGF5TmFtZQorXSk7CisKKy8qKgorICogU3BlY2lmaWVzIHRo
ZSBvcmRlciBpbiB3aGljaCBlYWNoIHRyYW5zZm9ybSBzaG91bGQgcnVuLgorICovCit2YXIgdHJh
bnNmb3JtUnVuT3JkZXIgPSBbCisgICdlczYtY2xhc3NlcycsCisgICdyZWFjdCcKK107CisKKy8q
KgorICogR2l2ZW4gYSBsaXN0IG9mIHRyYW5zZm9ybSBuYW1lcywgcmV0dXJuIHRoZSBvcmRlcmVk
IGxpc3Qgb2YgdmlzaXRvcnMgdG8gYmUKKyAqIHBhc3NlZCB0byB0aGUgdHJhbnNmb3JtKCkgZnVu
Y3Rpb24uCisgKgorICogQHBhcmFtIHthcnJheT99IGV4Y2x1ZGVzCisgKiBAcmV0dXJuIHthcnJh
eX0KKyAqLworZnVuY3Rpb24gZ2V0VmlzaXRvcnNMaXN0KGV4Y2x1ZGVzKSB7CisgIHZhciByZXQg
PSBbXTsKKyAgZm9yICh2YXIgaSA9IDAsIGlsID0gdHJhbnNmb3JtUnVuT3JkZXIubGVuZ3RoOyBp
IDwgaWw7IGkrKykgeworICAgIGlmICghZXhjbHVkZXMgfHwgZXhjbHVkZXMuaW5kZXhPZih0cmFu
c2Zvcm1SdW5PcmRlcltpXSkgPT09IC0xKSB7CisgICAgICByZXQgPSByZXQuY29uY2F0KHRyYW5z
Zm9ybVZpc2l0b3JzW3RyYW5zZm9ybVJ1bk9yZGVyW2ldXSk7CisgICAgfQorICB9CisgIHJldHVy
biByZXQ7Cit9CisKK2V4cG9ydHMuZ2V0VmlzaXRvcnNMaXN0ID0gZ2V0VmlzaXRvcnNMaXN0Owor
ZXhwb3J0cy50cmFuc2Zvcm1WaXNpdG9ycyA9IHRyYW5zZm9ybVZpc2l0b3JzOworCit9KSgpCit9
LHsiLi90cmFuc2Zvcm1zL2NsYXNzZXMiOjE5LCIuL3RyYW5zZm9ybXMvcmVhY3QiOjIwLCIuL3Ry
YW5zZm9ybXMvcmVhY3REaXNwbGF5TmFtZSI6MjF9XX0se30sWzE1XSkoMTUpCit9KTsKKzsKXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVu
Y2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2xhYnMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL3JlYWN0L2Jvd2VyX2NvbXBvbmVudHMvcmVhY3QvcmVhY3QuanMgYi9XZWJzaXRl
cy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2xhYnMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2Jvd2VyX2NvbXBvbmVudHMvcmVhY3QvcmVhY3Qu
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYzU4ZWMxMzNmMGVhMzgxNmEzMTE2MmQ4MTk3M2M4MmMzMTc3ZjY4NAot
LS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIy
LjEvcmVzb3VyY2VzL3RvZG9tdmMvbGFicy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvYm93
ZXJfY29tcG9uZW50cy9yZWFjdC9yZWFjdC5qcwpAQCAtMCwwICsxLDExMzI4IEBACisvKioKKyAq
IFJlYWN0IHYwLjQuMAorICovCisoZnVuY3Rpb24oZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGJv
b3RzdHJhcClib290c3RyYXAoInJlYWN0IixlKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgZXhw
b3J0cyltb2R1bGUuZXhwb3J0cz1lKCk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5l
JiZkZWZpbmUuYW1kKWRlZmluZShlKTtlbHNlIGlmKCJ1bmRlZmluZWQiIT10eXBlb2Ygc2VzKXtp
Zighc2VzLm9rKCkpcmV0dXJuO3Nlcy5tYWtlUmVhY3Q9ZX1lbHNlInVuZGVmaW5lZCIhPXR5cGVv
ZiB3aW5kb3c/d2luZG93LlJlYWN0PWUoKTpnbG9iYWwuUmVhY3Q9ZSgpfSkoZnVuY3Rpb24oKXt2
YXIgZGVmaW5lLHNlcyxib290c3RyYXAsbW9kdWxlLGV4cG9ydHM7CityZXR1cm4gKGZ1bmN0aW9u
KGUsdCxuKXtmdW5jdGlvbiBpKG4scyl7aWYoIXRbbl0pe2lmKCFlW25dKXt2YXIgbz10eXBlb2Yg
cmVxdWlyZT09ImZ1bmN0aW9uIiYmcmVxdWlyZTtpZighcyYmbylyZXR1cm4gbyhuLCEwKTtpZihy
KXJldHVybiByKG4sITApO3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK24r
IiciKX12YXIgdT10W25dPXtleHBvcnRzOnt9fTtlW25dWzBdLmNhbGwodS5leHBvcnRzLGZ1bmN0
aW9uKHQpe3ZhciByPWVbbl1bMV1bdF07cmV0dXJuIGkocj9yOnQpfSx1LHUuZXhwb3J0cyl9cmV0
dXJuIHRbbl0uZXhwb3J0c312YXIgcj10eXBlb2YgcmVxdWlyZT09ImZ1bmN0aW9uIiYmcmVxdWly
ZTtmb3IodmFyIHM9MDtzPG4ubGVuZ3RoO3MrKylpKG5bc10pO3JldHVybiBpfSkoezE6W2Z1bmN0
aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMyBGYWNl
Ym9vaywgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVy
c2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBl
eGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4g
YSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xp
Y2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUg
bGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5k
ZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJ
VEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVz
cyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3Vh
Z2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExp
Y2Vuc2UuCisgKgorICogQHByb3ZpZGVzTW9kdWxlICQKKyAqIEB0eXBlY2hlY2tzCisgKi8KKwor
dmFyIGdlID0gcmVxdWlyZSgiLi9nZSIpOwordmFyIGV4ID0gcmVxdWlyZSgiLi9leCIpOworCisv
KioKKyAqIEBwYXJhbSB7c3RyaW5nfERPTURvY3VtZW50fERPTUVsZW1lbnR8RE9NVGV4dE5vZGV9
IGlkCisgKiBAcmV0dXJuIHtET01Eb2N1bWVudHxET01FbGVtZW50fERPTVRleHROb2RlfQorICoK
KyAqIEZpbmQgYSBub2RlIGJ5IElELgorICoKKyAqIElmIHlvdXIgYXBwbGljYXRpb24gY29kZSBk
ZXBlbmRzIG9uIHRoZSBleGlzdGVuY2Ugb2YgdGhlIGVsZW1lbnQsIHVzZSAkLAorICogd2hpY2gg
d2lsbCB0aHJvdyBpZiB0aGUgZWxlbWVudCBkb2Vzbid0IGV4aXN0LgorICoKKyAqIElmIHlvdSdy
ZSBub3Qgc3VyZSB3aGV0aGVyIG9yIG5vdCB0aGUgZWxlbWVudCBleGlzdHMsIHVzZSBnZSBpbnN0
ZWFkLCBhbmQKKyAqIG1hbnVhbGx5IGNoZWNrIGZvciB0aGUgZWxlbWVudCdzIGV4aXN0ZW5jZSBp
biB5b3VyIGFwcGxpY2F0aW9uIGNvZGUuCisgKi8KK2Z1bmN0aW9uICQoaWQpIHsKKyAgdmFyIGVs
ZW1lbnQgPSBnZShpZCk7CisgIGlmICghZWxlbWVudCkgeworICAgIHRocm93IG5ldyBFcnJvcihl
eCgKKyAgICAgICdUcmllZCB0byBnZXQgZWxlbWVudCB3aXRoIGlkIG9mICIlcyIgYnV0IGl0IGlz
IG5vdCBwcmVzZW50IG9uIHRoZSBwYWdlLicsCisgICAgICBpZAorICAgICkpOworICB9CisgIHJl
dHVybiBlbGVtZW50OworfQorCittb2R1bGUuZXhwb3J0cyA9ICQ7CisKK30seyIuL2V4Ijo2Niwi
Li9nZSI6Njl9XSwyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICog
Q29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUg
QXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkg
bm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4K
KyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6
Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1
aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUK
KyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJB
UyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkg
S0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3Ig
dGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0
YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBDU1NQcm9w
ZXJ0eQorICovCisKKyJ1c2Ugc3RyaWN0IjsKKworLyoqCisgKiBDU1MgcHJvcGVydGllcyB3aGlj
aCBhY2NlcHQgbnVtYmVycyBidXQgYXJlIG5vdCBpbiB1bml0cyBvZiAicHgiLgorICovCit2YXIg
aXNVbml0bGVzc051bWJlciA9IHsKKyAgZmlsbE9wYWNpdHk6IHRydWUsCisgIGZvbnRXZWlnaHQ6
IHRydWUsCisgIG9wYWNpdHk6IHRydWUsCisgIG9ycGhhbnM6IHRydWUsCisgIHpJbmRleDogdHJ1
ZSwKKyAgem9vbTogdHJ1ZQorfTsKKworLyoqCisgKiBNb3N0IHN0eWxlIHByb3BlcnRpZXMgY2Fu
IGJlIHVuc2V0IGJ5IGRvaW5nIC5zdHlsZVtwcm9wXSA9ICcnIGJ1dCBJRTgKKyAqIGRvZXNuJ3Qg
bGlrZSBkb2luZyB0aGF0IHdpdGggc2hvcnRoYW5kIHByb3BlcnRpZXMgc28gZm9yIHRoZSBwcm9w
ZXJ0aWVzIHRoYXQKKyAqIElFOCBicmVha3Mgb24sIHdoaWNoIGFyZSBsaXN0ZWQgaGVyZSwgd2Ug
aW5zdGVhZCB1bnNldCBlYWNoIG9mIHRoZQorICogaW5kaXZpZHVhbCBwcm9wZXJ0aWVzLiBTZWUg
aHR0cDovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTIzODUuCisgKiBUaGUgNC12YWx1ZSAnY2xv
Y2snIHByb3BlcnRpZXMgbGlrZSBtYXJnaW4sIHBhZGRpbmcsIGJvcmRlci13aWR0aCBzZWVtIHRv
CisgKiBiZWhhdmUgd2l0aG91dCBhbnkgcHJvYmxlbXMuIEN1cmlvdXNseSwgbGlzdC1zdHlsZSB3
b3JrcyB0b28gd2l0aG91dCBhbnkKKyAqIHNwZWNpYWwgcHJvZGRpbmcuCisgKi8KK3ZhciBzaG9y
dGhhbmRQcm9wZXJ0eUV4cGFuc2lvbnMgPSB7CisgIGJhY2tncm91bmQ6IHsKKyAgICBiYWNrZ3Jv
dW5kSW1hZ2U6IHRydWUsCisgICAgYmFja2dyb3VuZFBvc2l0aW9uOiB0cnVlLAorICAgIGJhY2tn
cm91bmRSZXBlYXQ6IHRydWUsCisgICAgYmFja2dyb3VuZENvbG9yOiB0cnVlCisgIH0sCisgIGJv
cmRlcjogeworICAgIGJvcmRlcldpZHRoOiB0cnVlLAorICAgIGJvcmRlclN0eWxlOiB0cnVlLAor
ICAgIGJvcmRlckNvbG9yOiB0cnVlCisgIH0sCisgIGJvcmRlckJvdHRvbTogeworICAgIGJvcmRl
ckJvdHRvbVdpZHRoOiB0cnVlLAorICAgIGJvcmRlckJvdHRvbVN0eWxlOiB0cnVlLAorICAgIGJv
cmRlckJvdHRvbUNvbG9yOiB0cnVlCisgIH0sCisgIGJvcmRlckxlZnQ6IHsKKyAgICBib3JkZXJM
ZWZ0V2lkdGg6IHRydWUsCisgICAgYm9yZGVyTGVmdFN0eWxlOiB0cnVlLAorICAgIGJvcmRlckxl
ZnRDb2xvcjogdHJ1ZQorICB9LAorICBib3JkZXJSaWdodDogeworICAgIGJvcmRlclJpZ2h0V2lk
dGg6IHRydWUsCisgICAgYm9yZGVyUmlnaHRTdHlsZTogdHJ1ZSwKKyAgICBib3JkZXJSaWdodENv
bG9yOiB0cnVlCisgIH0sCisgIGJvcmRlclRvcDogeworICAgIGJvcmRlclRvcFdpZHRoOiB0cnVl
LAorICAgIGJvcmRlclRvcFN0eWxlOiB0cnVlLAorICAgIGJvcmRlclRvcENvbG9yOiB0cnVlCisg
IH0sCisgIGZvbnQ6IHsKKyAgICBmb250U3R5bGU6IHRydWUsCisgICAgZm9udFZhcmlhbnQ6IHRy
dWUsCisgICAgZm9udFdlaWdodDogdHJ1ZSwKKyAgICBmb250U2l6ZTogdHJ1ZSwKKyAgICBsaW5l
SGVpZ2h0OiB0cnVlLAorICAgIGZvbnRGYW1pbHk6IHRydWUKKyAgfQorfTsKKwordmFyIENTU1By
b3BlcnR5ID0geworICBpc1VuaXRsZXNzTnVtYmVyOiBpc1VuaXRsZXNzTnVtYmVyLAorICBzaG9y
dGhhbmRQcm9wZXJ0eUV4cGFuc2lvbnM6IHNob3J0aGFuZFByb3BlcnR5RXhwYW5zaW9ucworfTsK
KworbW9kdWxlLmV4cG9ydHMgPSBDU1NQcm9wZXJ0eTsKKworfSx7fV0sMzpbZnVuY3Rpb24ocmVx
dWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzIEZhY2Vib29rLCBJ
bmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIu
MCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBp
biBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkg
b2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMv
TElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3Ig
YWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUg
TGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBX
QVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGlt
cGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zl
cm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4K
KyAqCisgKiBAcHJvdmlkZXNNb2R1bGUgQ1NTUHJvcGVydHlPcGVyYXRpb25zCisgKiBAdHlwZWNo
ZWNrcyBzdGF0aWMtb25seQorICovCisKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIENTU1Byb3BlcnR5
ID0gcmVxdWlyZSgiLi9DU1NQcm9wZXJ0eSIpOworCit2YXIgZGFuZ2Vyb3VzU3R5bGVWYWx1ZSA9
IHJlcXVpcmUoIi4vZGFuZ2Vyb3VzU3R5bGVWYWx1ZSIpOwordmFyIGVzY2FwZVRleHRGb3JCcm93
c2VyID0gcmVxdWlyZSgiLi9lc2NhcGVUZXh0Rm9yQnJvd3NlciIpOwordmFyIGh5cGhlbmF0ZSA9
IHJlcXVpcmUoIi4vaHlwaGVuYXRlIik7Cit2YXIgbWVtb2l6ZVN0cmluZ09ubHkgPSByZXF1aXJl
KCIuL21lbW9pemVTdHJpbmdPbmx5Iik7CisKK3ZhciBwcm9jZXNzU3R5bGVOYW1lID0gbWVtb2l6
ZVN0cmluZ09ubHkoZnVuY3Rpb24oc3R5bGVOYW1lKSB7CisgIHJldHVybiBlc2NhcGVUZXh0Rm9y
QnJvd3NlcihoeXBoZW5hdGUoc3R5bGVOYW1lKSk7Cit9KTsKKworLyoqCisgKiBPcGVyYXRpb25z
IGZvciBkZWFsaW5nIHdpdGggQ1NTIHByb3BlcnRpZXMuCisgKi8KK3ZhciBDU1NQcm9wZXJ0eU9w
ZXJhdGlvbnMgPSB7CisKKyAgLyoqCisgICAqIFNlcmlhbGl6ZXMgYSBtYXBwaW5nIG9mIHN0eWxl
IHByb3BlcnRpZXMgZm9yIHVzZSBhcyBpbmxpbmUgc3R5bGVzOgorICAgKgorICAgKiAgID4gY3Jl
YXRlTWFya3VwRm9yU3R5bGVzKHt3aWR0aDogJzIwMHB4JywgaGVpZ2h0OiAwfSkKKyAgICogICAi
d2lkdGg6MjAwcHg7aGVpZ2h0OjA7IgorICAgKgorICAgKiBVbmRlZmluZWQgdmFsdWVzIGFyZSBp
Z25vcmVkIHNvIHRoYXQgZGVjbGFyYXRpdmUgcHJvZ3JhbW1pbmcgaXMgZWFzaWVyLgorICAgKgor
ICAgKiBAcGFyYW0ge29iamVjdH0gc3R5bGVzCisgICAqIEByZXR1cm4gez9zdHJpbmd9CisgICAq
LworICBjcmVhdGVNYXJrdXBGb3JTdHlsZXM6IGZ1bmN0aW9uKHN0eWxlcykgeworICAgIHZhciBz
ZXJpYWxpemVkID0gJyc7CisgICAgZm9yICh2YXIgc3R5bGVOYW1lIGluIHN0eWxlcykgeworICAg
ICAgaWYgKCFzdHlsZXMuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSkgeworICAgICAgICBjb250
aW51ZTsKKyAgICAgIH0KKyAgICAgIHZhciBzdHlsZVZhbHVlID0gc3R5bGVzW3N0eWxlTmFtZV07
CisgICAgICBpZiAoc3R5bGVWYWx1ZSAhPSBudWxsKSB7CisgICAgICAgIHNlcmlhbGl6ZWQgKz0g
cHJvY2Vzc1N0eWxlTmFtZShzdHlsZU5hbWUpICsgJzonOworICAgICAgICBzZXJpYWxpemVkICs9
IGRhbmdlcm91c1N0eWxlVmFsdWUoc3R5bGVOYW1lLCBzdHlsZVZhbHVlKSArICc7JzsKKyAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIHNlcmlhbGl6ZWQgfHwgbnVsbDsKKyAgfSwKKworICAvKioK
KyAgICogU2V0cyB0aGUgdmFsdWUgZm9yIG11bHRpcGxlIHN0eWxlcyBvbiBhIG5vZGUuICBJZiBh
IHZhbHVlIGlzIHNwZWNpZmllZCBhcworICAgKiAnJyAoZW1wdHkgc3RyaW5nKSwgdGhlIGNvcnJl
c3BvbmRpbmcgc3R5bGUgcHJvcGVydHkgd2lsbCBiZSB1bnNldC4KKyAgICoKKyAgICogQHBhcmFt
IHtET01FbGVtZW50fSBub2RlCisgICAqIEBwYXJhbSB7b2JqZWN0fSBzdHlsZXMKKyAgICovCisg
IHNldFZhbHVlRm9yU3R5bGVzOiBmdW5jdGlvbihub2RlLCBzdHlsZXMpIHsKKyAgICB2YXIgc3R5
bGUgPSBub2RlLnN0eWxlOworICAgIGZvciAodmFyIHN0eWxlTmFtZSBpbiBzdHlsZXMpIHsKKyAg
ICAgIGlmICghc3R5bGVzLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpIHsKKyAgICAgICAgY29u
dGludWU7CisgICAgICB9CisgICAgICB2YXIgc3R5bGVWYWx1ZSA9IGRhbmdlcm91c1N0eWxlVmFs
dWUoc3R5bGVOYW1lLCBzdHlsZXNbc3R5bGVOYW1lXSk7CisgICAgICBpZiAoc3R5bGVWYWx1ZSkg
eworICAgICAgICBzdHlsZVtzdHlsZU5hbWVdID0gc3R5bGVWYWx1ZTsKKyAgICAgIH0gZWxzZSB7
CisgICAgICAgIHZhciBleHBhbnNpb24gPSBDU1NQcm9wZXJ0eS5zaG9ydGhhbmRQcm9wZXJ0eUV4
cGFuc2lvbnNbc3R5bGVOYW1lXTsKKyAgICAgICAgaWYgKGV4cGFuc2lvbikgeworICAgICAgICAg
IC8vIFNob3J0aGFuZCBwcm9wZXJ0eSB0aGF0IElFOCB3b24ndCBsaWtlIHVuc2V0dGluZywgc28g
dW5zZXQgZWFjaAorICAgICAgICAgIC8vIGNvbXBvbmVudCB0byBwbGFjYXRlIGl0CisgICAgICAg
ICAgZm9yICh2YXIgaW5kaXZpZHVhbFN0eWxlTmFtZSBpbiBleHBhbnNpb24pIHsKKyAgICAgICAg
ICAgIHN0eWxlW2luZGl2aWR1YWxTdHlsZU5hbWVdID0gJyc7CisgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgIHN0eWxlW3N0eWxlTmFtZV0gPSAnJzsKKyAgICAgICAgfQor
ICAgICAgfQorICAgIH0KKyAgfQorCit9OworCittb2R1bGUuZXhwb3J0cyA9IENTU1Byb3BlcnR5
T3BlcmF0aW9uczsKKworfSx7Ii4vQ1NTUHJvcGVydHkiOjIsIi4vZGFuZ2Vyb3VzU3R5bGVWYWx1
ZSI6NjMsIi4vZXNjYXBlVGV4dEZvckJyb3dzZXIiOjY1LCIuL2h5cGhlbmF0ZSI6NzMsIi4vbWVt
b2l6ZVN0cmluZ09ubHkiOjgwfV0sNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7
CisvKioKKyAqIENvcHlyaWdodCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgorICogTGljZW5zZWQg
dW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Cisg
KiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhl
IExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAq
CisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBV
bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcs
IHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRl
ZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElP
TlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExp
Y2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5k
CisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBAcHJvdmlkZXNNb2R1
bGUgQ2FsbGJhY2tSZWdpc3RyeQorICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHkKKyAqLworCisi
dXNlIHN0cmljdCI7CisKK3ZhciBsaXN0ZW5lckJhbmsgPSB7fTsKKworLyoqCisgKiBTdG9yZXMg
Imxpc3RlbmVycyIgYnkgYHJlZ2lzdHJhdGlvbk5hbWVgL2BpZGAuIFRoZXJlIHNob3VsZCBiZSBh
dCBtb3N0IG9uZQorICogImxpc3RlbmVyIiBwZXIgYHJlZ2lzdHJhdGlvbk5hbWVgL2BpZGAgaW4g
dGhlIGBsaXN0ZW5lckJhbmtgLgorICoKKyAqIEFjY2VzcyBsaXN0ZW5lcnMgdmlhIGBsaXN0ZW5l
ckJhbmtbcmVnaXN0cmF0aW9uTmFtZV1baWRdYC4KKyAqCisgKiBAY2xhc3MgQ2FsbGJhY2tSZWdp
c3RyeQorICogQGludGVybmFsCisgKi8KK3ZhciBDYWxsYmFja1JlZ2lzdHJ5ID0geworCisgIC8q
KgorICAgKiBTdG9yZXMgYGxpc3RlbmVyYCBhdCBgbGlzdGVuZXJCYW5rW3JlZ2lzdHJhdGlvbk5h
bWVdW2lkXWAuIElzIGlkZW1wb3RlbnQuCisgICAqCisgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBJ
RCBvZiB0aGUgRE9NIGVsZW1lbnQuCisgICAqIEBwYXJhbSB7c3RyaW5nfSByZWdpc3RyYXRpb25O
YW1lIE5hbWUgb2YgbGlzdGVuZXIgKGUuZy4gYG9uQ2xpY2tgKS4KKyAgICogQHBhcmFtIHs/ZnVu
Y3Rpb259IGxpc3RlbmVyIFRoZSBjYWxsYmFjayB0byBzdG9yZS4KKyAgICovCisgIHB1dExpc3Rl
bmVyOiBmdW5jdGlvbihpZCwgcmVnaXN0cmF0aW9uTmFtZSwgbGlzdGVuZXIpIHsKKyAgICB2YXIg
YmFua0ZvclJlZ2lzdHJhdGlvbk5hbWUgPQorICAgICAgbGlzdGVuZXJCYW5rW3JlZ2lzdHJhdGlv
bk5hbWVdIHx8IChsaXN0ZW5lckJhbmtbcmVnaXN0cmF0aW9uTmFtZV0gPSB7fSk7CisgICAgYmFu
a0ZvclJlZ2lzdHJhdGlvbk5hbWVbaWRdID0gbGlzdGVuZXI7CisgIH0sCisKKyAgLyoqCisgICAq
IEBwYXJhbSB7c3RyaW5nfSBpZCBJRCBvZiB0aGUgRE9NIGVsZW1lbnQuCisgICAqIEBwYXJhbSB7
c3RyaW5nfSByZWdpc3RyYXRpb25OYW1lIE5hbWUgb2YgbGlzdGVuZXIgKGUuZy4gYG9uQ2xpY2tg
KS4KKyAgICogQHJldHVybiB7P2Z1bmN0aW9ufSBUaGUgc3RvcmVkIGNhbGxiYWNrLgorICAgKi8K
KyAgZ2V0TGlzdGVuZXI6IGZ1bmN0aW9uKGlkLCByZWdpc3RyYXRpb25OYW1lKSB7CisgICAgdmFy
IGJhbmtGb3JSZWdpc3RyYXRpb25OYW1lID0gbGlzdGVuZXJCYW5rW3JlZ2lzdHJhdGlvbk5hbWVd
OworICAgIHJldHVybiBiYW5rRm9yUmVnaXN0cmF0aW9uTmFtZSAmJiBiYW5rRm9yUmVnaXN0cmF0
aW9uTmFtZVtpZF07CisgIH0sCisKKyAgLyoqCisgICAqIERlbGV0ZXMgYSBsaXN0ZW5lciBmcm9t
IHRoZSByZWdpc3RyYXRpb24gYmFuay4KKyAgICoKKyAgICogQHBhcmFtIHtzdHJpbmd9IGlkIElE
IG9mIHRoZSBET00gZWxlbWVudC4KKyAgICogQHBhcmFtIHtzdHJpbmd9IHJlZ2lzdHJhdGlvbk5h
bWUgTmFtZSBvZiBsaXN0ZW5lciAoZS5nLiBgb25DbGlja2ApLgorICAgKi8KKyAgZGVsZXRlTGlz
dGVuZXI6IGZ1bmN0aW9uKGlkLCByZWdpc3RyYXRpb25OYW1lKSB7CisgICAgdmFyIGJhbmtGb3JS
ZWdpc3RyYXRpb25OYW1lID0gbGlzdGVuZXJCYW5rW3JlZ2lzdHJhdGlvbk5hbWVdOworICAgIGlm
IChiYW5rRm9yUmVnaXN0cmF0aW9uTmFtZSkgeworICAgICAgZGVsZXRlIGJhbmtGb3JSZWdpc3Ry
YXRpb25OYW1lW2lkXTsKKyAgICB9CisgIH0sCisKKyAgLyoqCisgICAqIERlbGV0ZXMgYWxsIGxp
c3RlbmVycyBmb3IgdGhlIERPTSBlbGVtZW50IHdpdGggdGhlIHN1cHBsaWVkIElELgorICAgKgor
ICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgSUQgb2YgdGhlIERPTSBlbGVtZW50LgorICAgKi8KKyAg
ZGVsZXRlQWxsTGlzdGVuZXJzOiBmdW5jdGlvbihpZCkgeworICAgIGZvciAodmFyIHJlZ2lzdHJh
dGlvbk5hbWUgaW4gbGlzdGVuZXJCYW5rKSB7CisgICAgICBkZWxldGUgbGlzdGVuZXJCYW5rW3Jl
Z2lzdHJhdGlvbk5hbWVdW2lkXTsKKyAgICB9CisgIH0sCisKKyAgLyoqCisgICAqIFRoaXMgaXMg
bmVlZGVkIGZvciB0ZXN0cyBvbmx5LiBEbyBub3QgdXNlIQorICAgKi8KKyAgX19wdXJnZTogZnVu
Y3Rpb24oKSB7CisgICAgbGlzdGVuZXJCYW5rID0ge307CisgIH0KKworfTsKKworbW9kdWxlLmV4
cG9ydHMgPSBDYWxsYmFja1JlZ2lzdHJ5OworCit9LHt9XSw1OltmdW5jdGlvbihyZXF1aXJlLG1v
ZHVsZSxleHBvcnRzKXsKKyhmdW5jdGlvbigpey8qKgorICogQ29weXJpZ2h0IDIwMTMgRmFjZWJv
b2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNp
b24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhj
ZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEg
Y29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNl
bnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxh
dyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVy
IHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRI
T1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mg
b3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdl
IGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNl
bnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBDaGFuZ2VFdmVudFBsdWdpbgorICovCisKKyJ1
c2Ugc3RyaWN0IjsKKwordmFyIEV2ZW50Q29uc3RhbnRzID0gcmVxdWlyZSgiLi9FdmVudENvbnN0
YW50cyIpOwordmFyIEV2ZW50UGx1Z2luSHViID0gcmVxdWlyZSgiLi9FdmVudFBsdWdpbkh1YiIp
OwordmFyIEV2ZW50UHJvcGFnYXRvcnMgPSByZXF1aXJlKCIuL0V2ZW50UHJvcGFnYXRvcnMiKTsK
K3ZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoIi4vRXhlY3V0aW9uRW52aXJvbm1l
bnQiKTsKK3ZhciBTeW50aGV0aWNFdmVudCA9IHJlcXVpcmUoIi4vU3ludGhldGljRXZlbnQiKTsK
KwordmFyIGlzRXZlbnRTdXBwb3J0ZWQgPSByZXF1aXJlKCIuL2lzRXZlbnRTdXBwb3J0ZWQiKTsK
K3ZhciBrZXlPZiA9IHJlcXVpcmUoIi4va2V5T2YiKTsKKwordmFyIHRvcExldmVsVHlwZXMgPSBF
dmVudENvbnN0YW50cy50b3BMZXZlbFR5cGVzOworCit2YXIgZXZlbnRUeXBlcyA9IHsKKyAgY2hh
bmdlOiB7CisgICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHsKKyAgICAgIGJ1YmJsZWQ6IGtl
eU9mKHtvbkNoYW5nZTogbnVsbH0pLAorICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbkNoYW5nZUNh
cHR1cmU6IG51bGx9KQorICAgIH0KKyAgfQorfTsKKworLyoqCisgKiBGb3IgSUUgc2hpbXMKKyAq
LwordmFyIGFjdGl2ZUVsZW1lbnQgPSBudWxsOwordmFyIGFjdGl2ZUVsZW1lbnRJRCA9IG51bGw7
Cit2YXIgYWN0aXZlRWxlbWVudFZhbHVlID0gbnVsbDsKK3ZhciBhY3RpdmVFbGVtZW50VmFsdWVQ
cm9wID0gbnVsbDsKKworCisvKioKKyAqIFNFQ1RJT046IGhhbmRsZSBgY2hhbmdlYCBldmVudAor
ICovCitmdW5jdGlvbiBzaG91bGRVc2VDaGFuZ2VFdmVudChlbGVtKSB7CisgIHJldHVybiAoCisg
ICAgZWxlbS5ub2RlTmFtZSA9PT0gJ1NFTEVDVCcgfHwKKyAgICAoZWxlbS5ub2RlTmFtZSA9PT0g
J0lOUFVUJyAmJiBlbGVtLnR5cGUgPT09ICdmaWxlJykKKyAgKTsKK30KKwordmFyIGRvZXNDaGFu
Z2VFdmVudEJ1YmJsZSA9IGZhbHNlOworaWYgKEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURP
TSkgeworICAvLyBTZWUgYGhhbmRsZUNoYW5nZWAgY29tbWVudCBiZWxvdworICBkb2VzQ2hhbmdl
RXZlbnRCdWJibGUgPSBpc0V2ZW50U3VwcG9ydGVkKCdjaGFuZ2UnKSAmJiAoCisgICAgISgnZG9j
dW1lbnRNb2RlJyBpbiBkb2N1bWVudCkgfHwgZG9jdW1lbnQuZG9jdW1lbnRNb2RlID4gOAorICAp
OworfQorCitmdW5jdGlvbiBtYW51YWxEaXNwYXRjaENoYW5nZUV2ZW50KG5hdGl2ZUV2ZW50KSB7
CisgIHZhciBldmVudCA9IFN5bnRoZXRpY0V2ZW50LmdldFBvb2xlZCgKKyAgICBldmVudFR5cGVz
LmNoYW5nZSwKKyAgICBhY3RpdmVFbGVtZW50SUQsCisgICAgbmF0aXZlRXZlbnQKKyAgKTsKKyAg
RXZlbnRQcm9wYWdhdG9ycy5hY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzKGV2ZW50KTsKKwor
ICAvLyBJZiBjaGFuZ2UgYnViYmxlZCwgd2UnZCBqdXN0IGJpbmQgdG8gaXQgbGlrZSBhbGwgdGhl
IG90aGVyIGV2ZW50cworICAvLyBhbmQgaGF2ZSBpdCBnbyB0aHJvdWdoIFJlYWN0RXZlbnRUb3BM
ZXZlbENhbGxiYWNrLiBTaW5jZSBpdCBkb2Vzbid0LCB3ZQorICAvLyBtYW51YWxseSBsaXN0ZW4g
Zm9yIHRoZSBjaGFuZ2UgZXZlbnQgYW5kIHNvIHdlIGhhdmUgdG8gZW5xdWV1ZSBhbmQKKyAgLy8g
cHJvY2VzcyB0aGUgYWJzdHJhY3QgZXZlbnQgbWFudWFsbHkuCisgIEV2ZW50UGx1Z2luSHViLmVu
cXVldWVFdmVudHMoZXZlbnQpOworICBFdmVudFBsdWdpbkh1Yi5wcm9jZXNzRXZlbnRRdWV1ZSgp
OworfQorCitmdW5jdGlvbiBzdGFydFdhdGNoaW5nRm9yQ2hhbmdlRXZlbnRJRTgodGFyZ2V0LCB0
YXJnZXRJRCkgeworICBhY3RpdmVFbGVtZW50ID0gdGFyZ2V0OworICBhY3RpdmVFbGVtZW50SUQg
PSB0YXJnZXRJRDsKKyAgYWN0aXZlRWxlbWVudC5hdHRhY2hFdmVudCgnb25jaGFuZ2UnLCBtYW51
YWxEaXNwYXRjaENoYW5nZUV2ZW50KTsKK30KKworZnVuY3Rpb24gc3RvcFdhdGNoaW5nRm9yQ2hh
bmdlRXZlbnRJRTgoKSB7CisgIGlmICghYWN0aXZlRWxlbWVudCkgeworICAgIHJldHVybjsKKyAg
fQorICBhY3RpdmVFbGVtZW50LmRldGFjaEV2ZW50KCdvbmNoYW5nZScsIG1hbnVhbERpc3BhdGNo
Q2hhbmdlRXZlbnQpOworICBhY3RpdmVFbGVtZW50ID0gbnVsbDsKKyAgYWN0aXZlRWxlbWVudElE
ID0gbnVsbDsKK30KKworZnVuY3Rpb24gZ2V0VGFyZ2V0SURGb3JDaGFuZ2VFdmVudCgKKyAgICB0
b3BMZXZlbFR5cGUsCisgICAgdG9wTGV2ZWxUYXJnZXQsCisgICAgdG9wTGV2ZWxUYXJnZXRJRCkg
eworICBpZiAodG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcENoYW5nZSkgeworICAg
IHJldHVybiB0b3BMZXZlbFRhcmdldElEOworICB9Cit9CitmdW5jdGlvbiBoYW5kbGVFdmVudHNG
b3JDaGFuZ2VFdmVudElFOCgKKyAgICB0b3BMZXZlbFR5cGUsCisgICAgdG9wTGV2ZWxUYXJnZXQs
CisgICAgdG9wTGV2ZWxUYXJnZXRJRCkgeworICBpZiAodG9wTGV2ZWxUeXBlID09PSB0b3BMZXZl
bFR5cGVzLnRvcEZvY3VzKSB7CisgICAgLy8gc3RvcFdhdGNoaW5nKCkgc2hvdWxkIGJlIGEgbm9v
cCBoZXJlIGJ1dCB3ZSBjYWxsIGl0IGp1c3QgaW4gY2FzZSB3ZQorICAgIC8vIG1pc3NlZCBhIGJs
dXIgZXZlbnQgc29tZWhvdy4KKyAgICBzdG9wV2F0Y2hpbmdGb3JDaGFuZ2VFdmVudElFOCgpOwor
ICAgIHN0YXJ0V2F0Y2hpbmdGb3JDaGFuZ2VFdmVudElFOCh0b3BMZXZlbFRhcmdldCwgdG9wTGV2
ZWxUYXJnZXRJRCk7CisgIH0gZWxzZSBpZiAodG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVz
LnRvcEJsdXIpIHsKKyAgICBzdG9wV2F0Y2hpbmdGb3JDaGFuZ2VFdmVudElFOCgpOworICB9Cit9
CisKKworLyoqCisgKiBTRUNUSU9OOiBoYW5kbGUgYGlucHV0YCBldmVudAorICovCit2YXIgaXNJ
bnB1dEV2ZW50U3VwcG9ydGVkID0gZmFsc2U7CitpZiAoRXhlY3V0aW9uRW52aXJvbm1lbnQuY2Fu
VXNlRE9NKSB7CisgIC8vIElFOSBjbGFpbXMgdG8gc3VwcG9ydCB0aGUgaW5wdXQgZXZlbnQgYnV0
IGZhaWxzIHRvIHRyaWdnZXIgaXQgd2hlbgorICAvLyBkZWxldGluZyB0ZXh0LCBzbyB3ZSBpZ25v
cmUgaXRzIGlucHV0IGV2ZW50cworICBpc0lucHV0RXZlbnRTdXBwb3J0ZWQgPSBpc0V2ZW50U3Vw
cG9ydGVkKCdpbnB1dCcpICYmICgKKyAgICAhKCdkb2N1bWVudE1vZGUnIGluIGRvY3VtZW50KSB8
fCBkb2N1bWVudC5kb2N1bWVudE1vZGUgPiA5CisgICk7Cit9CisKKworLyoqCisgKiBAc2VlIGh0
dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdl
L3RoZS1pbnB1dC1lbGVtZW50Lmh0bWwjaW5wdXQtdHlwZS1hdHRyLXN1bW1hcnkKKyAqLwordmFy
IHN1cHBvcnRlZElucHV0VHlwZXMgPSB7CisgICdjb2xvcic6IHRydWUsCisgICdkYXRlJzogdHJ1
ZSwKKyAgJ2RhdGV0aW1lJzogdHJ1ZSwKKyAgJ2RhdGV0aW1lLWxvY2FsJzogdHJ1ZSwKKyAgJ2Vt
YWlsJzogdHJ1ZSwKKyAgJ21vbnRoJzogdHJ1ZSwKKyAgJ251bWJlcic6IHRydWUsCisgICdwYXNz
d29yZCc6IHRydWUsCisgICdyYW5nZSc6IHRydWUsCisgICdzZWFyY2gnOiB0cnVlLAorICAndGVs
JzogdHJ1ZSwKKyAgJ3RleHQnOiB0cnVlLAorICAndGltZSc6IHRydWUsCisgICd1cmwnOiB0cnVl
LAorICAnd2Vlayc6IHRydWUKK307CisKK2Z1bmN0aW9uIHNob3VsZFVzZUlucHV0RXZlbnQoZWxl
bSkgeworICByZXR1cm4gKAorICAgIChlbGVtLm5vZGVOYW1lID09PSAnSU5QVVQnICYmIHN1cHBv
cnRlZElucHV0VHlwZXNbZWxlbS50eXBlXSkgfHwKKyAgICBlbGVtLm5vZGVOYW1lID09PSAnVEVY
VEFSRUEnCisgICk7Cit9CisKKy8qKgorICogKEZvciBvbGQgSUUuKSBSZXBsYWNlbWVudCBnZXR0
ZXIvc2V0dGVyIGZvciB0aGUgYHZhbHVlYCBwcm9wZXJ0eSB0aGF0IGdldHMKKyAqIHNldCBvbiB0
aGUgYWN0aXZlIGVsZW1lbnQuCisgKi8KK3ZhciBuZXdWYWx1ZVByb3AgPSAgeworICBnZXQ6IGZ1
bmN0aW9uKCkgeworICAgIHJldHVybiBhY3RpdmVFbGVtZW50VmFsdWVQcm9wLmdldC5jYWxsKHRo
aXMpOworICB9LAorICBzZXQ6IGZ1bmN0aW9uKHZhbCkgeworICAgIC8vIENhc3QgdG8gYSBzdHJp
bmcgc28gd2UgY2FuIGRvIGVxdWFsaXR5IGNoZWNrcy4KKyAgICBhY3RpdmVFbGVtZW50VmFsdWUg
PSAnJyArIHZhbDsKKyAgICBhY3RpdmVFbGVtZW50VmFsdWVQcm9wLnNldC5jYWxsKHRoaXMsIHZh
bCk7CisgIH0KK307CisKKy8qKgorICogKEZvciBvbGQgSUUuKSBTdGFydHMgdHJhY2tpbmcgcHJv
cGVydHljaGFuZ2UgZXZlbnRzIG9uIHRoZSBwYXNzZWQtaW4gZWxlbWVudAorICogYW5kIG92ZXJy
aWRlIHRoZSB2YWx1ZSBwcm9wZXJ0eSBzbyB0aGF0IHdlIGNhbiBkaXN0aW5ndWlzaCB1c2VyIGV2
ZW50cyBmcm9tCisgKiB2YWx1ZSBjaGFuZ2VzIGluIEpTLgorICovCitmdW5jdGlvbiBzdGFydFdh
dGNoaW5nRm9yVmFsdWVDaGFuZ2UodGFyZ2V0LCB0YXJnZXRJRCkgeworICBhY3RpdmVFbGVtZW50
ID0gdGFyZ2V0OworICBhY3RpdmVFbGVtZW50SUQgPSB0YXJnZXRJRDsKKyAgYWN0aXZlRWxlbWVu
dFZhbHVlID0gdGFyZ2V0LnZhbHVlOworICBhY3RpdmVFbGVtZW50VmFsdWVQcm9wID0gT2JqZWN0
LmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKKyAgICB0YXJnZXQuY29uc3RydWN0b3IucHJvdG90
eXBlLAorICAgICd2YWx1ZScKKyAgKTsKKworICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYWN0aXZl
RWxlbWVudCwgJ3ZhbHVlJywgbmV3VmFsdWVQcm9wKTsKKyAgYWN0aXZlRWxlbWVudC5hdHRhY2hF
dmVudCgnb25wcm9wZXJ0eWNoYW5nZScsIGhhbmRsZVByb3BlcnR5Q2hhbmdlKTsKK30KKworLyoq
CisgKiAoRm9yIG9sZCBJRS4pIFJlbW92ZXMgdGhlIGV2ZW50IGxpc3RlbmVycyBmcm9tIHRoZSBj
dXJyZW50bHktdHJhY2tlZCBlbGVtZW50LAorICogaWYgYW55IGV4aXN0cy4KKyAqLworZnVuY3Rp
b24gc3RvcFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UoKSB7CisgIGlmICghYWN0aXZlRWxlbWVudCkg
eworICAgIHJldHVybjsKKyAgfQorCisgIC8vIGRlbGV0ZSByZXN0b3JlcyB0aGUgb3JpZ2luYWwg
cHJvcGVydHkgZGVmaW5pdGlvbgorICBkZWxldGUgYWN0aXZlRWxlbWVudC52YWx1ZTsKKyAgYWN0
aXZlRWxlbWVudC5kZXRhY2hFdmVudCgnb25wcm9wZXJ0eWNoYW5nZScsIGhhbmRsZVByb3BlcnR5
Q2hhbmdlKTsKKworICBhY3RpdmVFbGVtZW50ID0gbnVsbDsKKyAgYWN0aXZlRWxlbWVudElEID0g
bnVsbDsKKyAgYWN0aXZlRWxlbWVudFZhbHVlID0gbnVsbDsKKyAgYWN0aXZlRWxlbWVudFZhbHVl
UHJvcCA9IG51bGw7Cit9CisKKy8qKgorICogKEZvciBvbGQgSUUuKSBIYW5kbGVzIGEgcHJvcGVy
dHljaGFuZ2UgZXZlbnQsIHNlbmRpbmcgYSBgY2hhbmdlYCBldmVudCBpZgorICogdGhlIHZhbHVl
IG9mIHRoZSBhY3RpdmUgZWxlbWVudCBoYXMgY2hhbmdlZC4KKyAqLworZnVuY3Rpb24gaGFuZGxl
UHJvcGVydHlDaGFuZ2UobmF0aXZlRXZlbnQpIHsKKyAgaWYgKG5hdGl2ZUV2ZW50LnByb3BlcnR5
TmFtZSAhPT0gJ3ZhbHVlJykgeworICAgIHJldHVybjsKKyAgfQorICB2YXIgdmFsdWUgPSBuYXRp
dmVFdmVudC5zcmNFbGVtZW50LnZhbHVlOworICBpZiAodmFsdWUgPT09IGFjdGl2ZUVsZW1lbnRW
YWx1ZSkgeworICAgIHJldHVybjsKKyAgfQorICBhY3RpdmVFbGVtZW50VmFsdWUgPSB2YWx1ZTsK
KworICBtYW51YWxEaXNwYXRjaENoYW5nZUV2ZW50KG5hdGl2ZUV2ZW50KTsKK30KKworLyoqCisg
KiBJZiBhIGBjaGFuZ2VgIGV2ZW50IHNob3VsZCBiZSBmaXJlZCwgcmV0dXJucyB0aGUgdGFyZ2V0
J3MgSUQuCisgKi8KK2Z1bmN0aW9uIGdldFRhcmdldElERm9ySW5wdXRFdmVudCgKKyAgICB0b3BM
ZXZlbFR5cGUsCisgICAgdG9wTGV2ZWxUYXJnZXQsCisgICAgdG9wTGV2ZWxUYXJnZXRJRCkgewor
ICBpZiAodG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcElucHV0KSB7CisgICAgLy8g
SW4gbW9kZXJuIGJyb3dzZXJzIChpLmUuLCBub3QgSUU4IG9yIElFOSksIHRoZSBpbnB1dCBldmVu
dCBpcyBleGFjdGx5CisgICAgLy8gd2hhdCB3ZSB3YW50IHNvIGZhbGwgdGhyb3VnaCBoZXJlIGFu
ZCB0cmlnZ2VyIGFuIGFic3RyYWN0IGV2ZW50CisgICAgcmV0dXJuIHRvcExldmVsVGFyZ2V0SUQ7
CisgIH0KK30KKworLy8gRm9yIElFOCBhbmQgSUU5LgorZnVuY3Rpb24gaGFuZGxlRXZlbnRzRm9y
SW5wdXRFdmVudElFKAorICAgIHRvcExldmVsVHlwZSwKKyAgICB0b3BMZXZlbFRhcmdldCwKKyAg
ICB0b3BMZXZlbFRhcmdldElEKSB7CisgIGlmICh0b3BMZXZlbFR5cGUgPT09IHRvcExldmVsVHlw
ZXMudG9wRm9jdXMpIHsKKyAgICAvLyBJbiBJRTgsIHdlIGNhbiBjYXB0dXJlIGFsbW9zdCBhbGwg
LnZhbHVlIGNoYW5nZXMgYnkgYWRkaW5nIGEKKyAgICAvLyBwcm9wZXJ0eWNoYW5nZSBoYW5kbGVy
IGFuZCBsb29raW5nIGZvciBldmVudHMgd2l0aCBwcm9wZXJ0eU5hbWUKKyAgICAvLyBlcXVhbCB0
byAndmFsdWUnCisgICAgLy8gSW4gSUU5LCBwcm9wZXJ0eWNoYW5nZSBmaXJlcyBmb3IgbW9zdCBp
bnB1dCBldmVudHMgYnV0IGlzIGJ1Z2d5IGFuZAorICAgIC8vIGRvZXNuJ3QgZmlyZSB3aGVuIHRl
eHQgaXMgZGVsZXRlZCwgYnV0IGNvbnZlbmllbnRseSwgc2VsZWN0aW9uY2hhbmdlCisgICAgLy8g
YXBwZWFycyB0byBmaXJlIGluIGFsbCBvZiB0aGUgcmVtYWluaW5nIGNhc2VzIHNvIHdlIGNhdGNo
IHRob3NlIGFuZAorICAgIC8vIGZvcndhcmQgdGhlIGV2ZW50IGlmIHRoZSB2YWx1ZSBoYXMgY2hh
bmdlZAorICAgIC8vIEluIGVpdGhlciBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIGNhbGwgdGhlIGV2
ZW50IGhhbmRsZXIgaWYgdGhlIHZhbHVlCisgICAgLy8gaXMgY2hhbmdlZCBmcm9tIEpTIHNvIHdl
IHJlZGVmaW5lIGEgc2V0dGVyIGZvciBgLnZhbHVlYCB0aGF0IHVwZGF0ZXMKKyAgICAvLyBvdXIg
YWN0aXZlRWxlbWVudFZhbHVlIHZhcmlhYmxlLCBhbGxvd2luZyB1cyB0byBpZ25vcmUgdGhvc2Ug
Y2hhbmdlcworICAgIC8vCisgICAgLy8gc3RvcFdhdGNoaW5nKCkgc2hvdWxkIGJlIGEgbm9vcCBo
ZXJlIGJ1dCB3ZSBjYWxsIGl0IGp1c3QgaW4gY2FzZSB3ZQorICAgIC8vIG1pc3NlZCBhIGJsdXIg
ZXZlbnQgc29tZWhvdy4KKyAgICBzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSgpOworICAgIHN0
YXJ0V2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSh0b3BMZXZlbFRhcmdldCwgdG9wTGV2ZWxUYXJnZXRJ
RCk7CisgIH0gZWxzZSBpZiAodG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcEJsdXIp
IHsKKyAgICBzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSgpOworICB9Cit9CisKKy8vIEZvciBJ
RTggYW5kIElFOS4KK2Z1bmN0aW9uIGdldFRhcmdldElERm9ySW5wdXRFdmVudElFKAorICAgIHRv
cExldmVsVHlwZSwKKyAgICB0b3BMZXZlbFRhcmdldCwKKyAgICB0b3BMZXZlbFRhcmdldElEKSB7
CisgIGlmICh0b3BMZXZlbFR5cGUgPT09IHRvcExldmVsVHlwZXMudG9wU2VsZWN0aW9uQ2hhbmdl
IHx8CisgICAgICB0b3BMZXZlbFR5cGUgPT09IHRvcExldmVsVHlwZXMudG9wS2V5VXAgfHwKKyAg
ICAgIHRvcExldmVsVHlwZSA9PT0gdG9wTGV2ZWxUeXBlcy50b3BLZXlEb3duKSB7CisgICAgLy8g
T24gdGhlIHNlbGVjdGlvbmNoYW5nZSBldmVudCwgdGhlIHRhcmdldCBpcyBqdXN0IGRvY3VtZW50
IHdoaWNoIGlzbid0CisgICAgLy8gaGVscGZ1bCBmb3IgdXMgc28ganVzdCBjaGVjayBhY3RpdmVF
bGVtZW50IGluc3RlYWQuCisgICAgLy8KKyAgICAvLyA5OSUgb2YgdGhlIHRpbWUsIGtleWRvd24g
YW5kIGtleXVwIGFyZW4ndCBuZWNlc3NhcnkuIElFOCBmYWlscyB0byBmaXJlCisgICAgLy8gcHJv
cGVydHljaGFuZ2Ugb24gdGhlIGZpcnN0IGlucHV0IGV2ZW50IGFmdGVyIHNldHRpbmcgYHZhbHVl
YCBmcm9tIGEKKyAgICAvLyBzY3JpcHQgYW5kIGZpcmVzIG9ubHkga2V5ZG93biwga2V5cHJlc3Ms
IGtleXVwLiBDYXRjaGluZyBrZXl1cCB1c3VhbGx5CisgICAgLy8gZ2V0cyBpdCBhbmQgY2F0Y2hp
bmcga2V5ZG93biBsZXRzIHVzIGZpcmUgYW4gZXZlbnQgZm9yIHRoZSBmaXJzdAorICAgIC8vIGtl
eXN0cm9rZSBpZiB1c2VyIGRvZXMgYSBrZXkgcmVwZWF0IChpdCdsbCBiZSBhIGxpdHRsZSBkZWxh
eWVkOiByaWdodAorICAgIC8vIGJlZm9yZSB0aGUgc2Vjb25kIGtleXN0cm9rZSkuIE90aGVyIGlu
cHV0IG1ldGhvZHMgKGUuZy4sIHBhc3RlKSBzZWVtIHRvCisgICAgLy8gZmlyZSBzZWxlY3Rpb25j
aGFuZ2Ugbm9ybWFsbHkuCisgICAgaWYgKGFjdGl2ZUVsZW1lbnQgJiYgYWN0aXZlRWxlbWVudC52
YWx1ZSAhPT0gYWN0aXZlRWxlbWVudFZhbHVlKSB7CisgICAgICBhY3RpdmVFbGVtZW50VmFsdWUg
PSBhY3RpdmVFbGVtZW50LnZhbHVlOworICAgICAgcmV0dXJuIGFjdGl2ZUVsZW1lbnRJRDsKKyAg
ICB9CisgIH0KK30KKworCisvKioKKyAqIFNFQ1RJT046IGhhbmRsZSBgY2xpY2tgIGV2ZW50Cisg
Ki8KK2Z1bmN0aW9uIHNob3VsZFVzZUNsaWNrRXZlbnQoZWxlbSkgeworICAvLyBVc2UgdGhlIGBj
bGlja2AgZXZlbnQgdG8gZGV0ZWN0IGNoYW5nZXMgdG8gY2hlY2tib3ggYW5kIHJhZGlvIGlucHV0
cy4KKyAgLy8gVGhpcyBhcHByb2FjaCB3b3JrcyBhY3Jvc3MgYWxsIGJyb3dzZXJzLCB3aGVyZWFz
IGBjaGFuZ2VgIGRvZXMgbm90IGZpcmUKKyAgLy8gdW50aWwgYGJsdXJgIGluIElFOC4KKyAgcmV0
dXJuICgKKyAgICBlbGVtLm5vZGVOYW1lID09PSAnSU5QVVQnICYmCisgICAgKGVsZW0udHlwZSA9
PT0gJ2NoZWNrYm94JyB8fCBlbGVtLnR5cGUgPT09ICdyYWRpbycpCisgICk7Cit9CisKK2Z1bmN0
aW9uIGdldFRhcmdldElERm9yQ2xpY2tFdmVudCgKKyAgICB0b3BMZXZlbFR5cGUsCisgICAgdG9w
TGV2ZWxUYXJnZXQsCisgICAgdG9wTGV2ZWxUYXJnZXRJRCkgeworICBpZiAodG9wTGV2ZWxUeXBl
ID09PSB0b3BMZXZlbFR5cGVzLnRvcENsaWNrKSB7CisgICAgcmV0dXJuIHRvcExldmVsVGFyZ2V0
SUQ7CisgIH0KK30KKworLyoqCisgKiBUaGlzIHBsdWdpbiBjcmVhdGVzIGFuIGBvbkNoYW5nZWAg
ZXZlbnQgdGhhdCBub3JtYWxpemVzIGNoYW5nZSBldmVudHMKKyAqIGFjcm9zcyBmb3JtIGVsZW1l
bnRzLiBUaGlzIGV2ZW50IGZpcmVzIGF0IGEgdGltZSB3aGVuIGl0J3MgcG9zc2libGUgdG8KKyAq
IGNoYW5nZSB0aGUgZWxlbWVudCdzIHZhbHVlIHdpdGhvdXQgc2VlaW5nIGEgZmxpY2tlci4KKyAq
CisgKiBTdXBwb3J0ZWQgZWxlbWVudHMgYXJlOgorICogLSBpbnB1dCAoc2VlIGBzdXBwb3J0ZWRJ
bnB1dFR5cGVzYCkKKyAqIC0gdGV4dGFyZWEKKyAqIC0gc2VsZWN0CisgKi8KK3ZhciBDaGFuZ2VF
dmVudFBsdWdpbiA9IHsKKworICBldmVudFR5cGVzOiBldmVudFR5cGVzLAorCisgIC8qKgorICAg
KiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUeXBlIFJlY29yZCBmcm9tIGBFdmVudENvbnN0YW50
c2AuCisgICAqIEBwYXJhbSB7RE9NRXZlbnRUYXJnZXR9IHRvcExldmVsVGFyZ2V0IFRoZSBsaXN0
ZW5pbmcgY29tcG9uZW50IHJvb3Qgbm9kZS4KKyAgICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVs
VGFyZ2V0SUQgSUQgb2YgYHRvcExldmVsVGFyZ2V0YC4KKyAgICogQHBhcmFtIHtvYmplY3R9IG5h
dGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LgorICAgKiBAcmV0dXJuIHsqfSBBbiBhY2N1
bXVsYXRpb24gb2Ygc3ludGhldGljIGV2ZW50cy4KKyAgICogQHNlZSB7RXZlbnRQbHVnaW5IdWIu
ZXh0cmFjdEV2ZW50c30KKyAgICovCisgIGV4dHJhY3RFdmVudHM6IGZ1bmN0aW9uKAorICAgICAg
dG9wTGV2ZWxUeXBlLAorICAgICAgdG9wTGV2ZWxUYXJnZXQsCisgICAgICB0b3BMZXZlbFRhcmdl
dElELAorICAgICAgbmF0aXZlRXZlbnQpIHsKKworICAgIHZhciBnZXRUYXJnZXRJREZ1bmMsIGhh
bmRsZUV2ZW50RnVuYzsKKyAgICBpZiAoc2hvdWxkVXNlQ2hhbmdlRXZlbnQodG9wTGV2ZWxUYXJn
ZXQpKSB7CisgICAgICBpZiAoZG9lc0NoYW5nZUV2ZW50QnViYmxlKSB7CisgICAgICAgIGdldFRh
cmdldElERnVuYyA9IGdldFRhcmdldElERm9yQ2hhbmdlRXZlbnQ7CisgICAgICB9IGVsc2Ugewor
ICAgICAgICBoYW5kbGVFdmVudEZ1bmMgPSBoYW5kbGVFdmVudHNGb3JDaGFuZ2VFdmVudElFODsK
KyAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHNob3VsZFVzZUlucHV0RXZlbnQodG9wTGV2ZWxUYXJn
ZXQpKSB7CisgICAgICBpZiAoaXNJbnB1dEV2ZW50U3VwcG9ydGVkKSB7CisgICAgICAgIGdldFRh
cmdldElERnVuYyA9IGdldFRhcmdldElERm9ySW5wdXRFdmVudDsKKyAgICAgIH0gZWxzZSB7Cisg
ICAgICAgIGdldFRhcmdldElERnVuYyA9IGdldFRhcmdldElERm9ySW5wdXRFdmVudElFOworICAg
ICAgICBoYW5kbGVFdmVudEZ1bmMgPSBoYW5kbGVFdmVudHNGb3JJbnB1dEV2ZW50SUU7CisgICAg
ICB9CisgICAgfSBlbHNlIGlmIChzaG91bGRVc2VDbGlja0V2ZW50KHRvcExldmVsVGFyZ2V0KSkg
eworICAgICAgZ2V0VGFyZ2V0SURGdW5jID0gZ2V0VGFyZ2V0SURGb3JDbGlja0V2ZW50OworICAg
IH0KKworICAgIGlmIChnZXRUYXJnZXRJREZ1bmMpIHsKKyAgICAgIHZhciB0YXJnZXRJRCA9IGdl
dFRhcmdldElERnVuYygKKyAgICAgICAgdG9wTGV2ZWxUeXBlLAorICAgICAgICB0b3BMZXZlbFRh
cmdldCwKKyAgICAgICAgdG9wTGV2ZWxUYXJnZXRJRAorICAgICAgKTsKKyAgICAgIGlmICh0YXJn
ZXRJRCkgeworICAgICAgICB2YXIgZXZlbnQgPSBTeW50aGV0aWNFdmVudC5nZXRQb29sZWQoCisg
ICAgICAgICAgZXZlbnRUeXBlcy5jaGFuZ2UsCisgICAgICAgICAgdGFyZ2V0SUQsCisgICAgICAg
ICAgbmF0aXZlRXZlbnQKKyAgICAgICAgKTsKKyAgICAgICAgRXZlbnRQcm9wYWdhdG9ycy5hY2N1
bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzKGV2ZW50KTsKKyAgICAgICAgcmV0dXJuIGV2ZW50Owor
ICAgICAgfQorICAgIH0KKworICAgIGlmIChoYW5kbGVFdmVudEZ1bmMpIHsKKyAgICAgIGhhbmRs
ZUV2ZW50RnVuYygKKyAgICAgICAgdG9wTGV2ZWxUeXBlLAorICAgICAgICB0b3BMZXZlbFRhcmdl
dCwKKyAgICAgICAgdG9wTGV2ZWxUYXJnZXRJRAorICAgICAgKTsKKyAgICB9CisgIH0KKworfTsK
KworbW9kdWxlLmV4cG9ydHMgPSBDaGFuZ2VFdmVudFBsdWdpbjsKKworfSkoKQorfSx7Ii4vRXZl
bnRDb25zdGFudHMiOjEzLCIuL0V2ZW50UGx1Z2luSHViIjoxNSwiLi9FdmVudFByb3BhZ2F0b3Jz
IjoxOCwiLi9FeGVjdXRpb25FbnZpcm9ubWVudCI6MTksIi4vU3ludGhldGljRXZlbnQiOjUwLCIu
L2lzRXZlbnRTdXBwb3J0ZWQiOjc2LCIuL2tleU9mIjo3OX1dLDY6W2Z1bmN0aW9uKHJlcXVpcmUs
bW9kdWxlLGV4cG9ydHMpeworKGZ1bmN0aW9uKCl7LyoqCisgKiBDb3B5cmlnaHQgMjAxMyBGYWNl
Ym9vaywgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVy
c2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBl
eGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4g
YSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xp
Y2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUg
bGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5k
ZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJ
VEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVz
cyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3Vh
Z2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExp
Y2Vuc2UuCisgKgorICogQHByb3ZpZGVzTW9kdWxlIERPTUNoaWxkcmVuT3BlcmF0aW9ucworICov
CisKKy8vIEVtcHR5IGJsb2NrcyBpbXByb3ZlIHJlYWRhYmlsaXR5IHNvIGRpc2FibGUgdGhhdCB3
YXJuaW5nCisvLyBqc2hpbnQgLVcwMzUKKworInVzZSBzdHJpY3QiOworCit2YXIgRGFuZ2VyID0g
cmVxdWlyZSgiLi9EYW5nZXIiKTsKKwordmFyIGluc2VydE5vZGVBdCA9IHJlcXVpcmUoIi4vaW5z
ZXJ0Tm9kZUF0Iik7Cit2YXIga2V5T2YgPSByZXF1aXJlKCIuL2tleU9mIik7Cit2YXIgdGhyb3dJ
ZiA9IHJlcXVpcmUoIi4vdGhyb3dJZiIpOworCit2YXIgTk9OX0lOQ1JFQVNJTkdfT1BFUkFUSU9O
UzsKK2lmICh0cnVlKSB7CisgIE5PTl9JTkNSRUFTSU5HX09QRVJBVElPTlMgPQorICAgICdET00g
Y2hpbGQgbWFuYWdlbWVudCBvcGVyYXRpb25zIG11c3QgYmUgcHJvdmlkZWQgaW4gb3JkZXIgJyAr
CisgICAgJ29mIGluY3JlYXNpbmcgZGVzdGluYXRpb24gaW5kZXguIFRoaXMgaXMgbGlrZWx5IGFu
IGlzc3VlIHdpdGggJyArCisgICAgJ3RoZSBjb3JlIGZyYW1ld29yay4nOworfQorCit2YXIgTU9W
RV9OT0RFX0FUX09SSUdfSU5ERVggPSBrZXlPZih7bW92ZUZyb206IG51bGx9KTsKK3ZhciBJTlNF
UlRfTUFSS1VQID0ga2V5T2Yoe2luc2VydE1hcmt1cDogbnVsbH0pOwordmFyIFJFTU9WRV9BVCA9
IGtleU9mKHtyZW1vdmVBdDogbnVsbH0pOworCisvKioKKyAqIEluIG9yZGVyIHRvIGNhcnJ5IG91
dCBtb3ZlbWVudCBvZiBET00gbm9kZXMgd2l0aG91dCBrbm93aW5nIHRoZWlyIElEcywgd2UKKyAq
IGhhdmUgdG8gZmlyc3Qgc3RvcmUga25vd2xlZGdlIGFib3V0IG5vZGVzJyBvcmlnaW5hbCBpbmRp
Y2VzIGJlZm9yZSBiZWdpbm5pbmcKKyAqIHRvIGNhcnJ5IG91dCB0aGUgc2VxdWVuY2Ugb2Ygb3Bl
cmF0aW9ucy4gT25jZSB3ZSBiZWdpbiB0aGUgc2VxdWVuY2UsIHRoZSBET00KKyAqIGluZGljZXMg
aW4gZnV0dXJlIGluc3RydWN0aW9ucyBhcmUgbm8gbG9uZ2VyIHZhbGlkLgorICoKKyAqIEBwYXJh
bSB7RWxlbWVudH0gcGFyZW50IFBhcmVudCBET00gbm9kZS4KKyAqIEBwYXJhbSB7T2JqZWN0fSBj
aGlsZE9wZXJhdGlvbnMgRGVzY3JpcHRpb24gb2YgY2hpbGQgb3BlcmF0aW9ucy4KKyAqIEByZXR1
cm4ge0FycmF5P30gU3BhcnNlIGFycmF5IGNvbnRhaW5pbmcgZWxlbWVudHMgYnkgdGhlaXIgY3Vy
cmVudCBpbmRleCBpbgorICogdGhlIERPTS4KKyAqLwordmFyIF9nZXROb2Rlc0J5T3JpZ2luYWxJ
bmRleCA9IGZ1bmN0aW9uKHBhcmVudCwgY2hpbGRPcGVyYXRpb25zKSB7CisgIHZhciBub2Rlc0J5
T3JpZ2luYWxJbmRleDsgLy8gU3BhcnNlIGFycmF5LgorICB2YXIgY2hpbGRPcGVyYXRpb247Cisg
IHZhciBvcmlnSW5kZXg7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRPcGVyYXRpb25zLmxl
bmd0aDsgaSsrKSB7CisgICAgY2hpbGRPcGVyYXRpb24gPSBjaGlsZE9wZXJhdGlvbnNbaV07Cisg
ICAgaWYgKE1PVkVfTk9ERV9BVF9PUklHX0lOREVYIGluIGNoaWxkT3BlcmF0aW9uKSB7CisgICAg
ICBub2Rlc0J5T3JpZ2luYWxJbmRleCA9IG5vZGVzQnlPcmlnaW5hbEluZGV4IHx8IFtdOworICAg
ICAgb3JpZ0luZGV4ID0gY2hpbGRPcGVyYXRpb24ubW92ZUZyb207CisgICAgICBub2Rlc0J5T3Jp
Z2luYWxJbmRleFtvcmlnSW5kZXhdID0gcGFyZW50LmNoaWxkTm9kZXNbb3JpZ0luZGV4XTsKKyAg
ICB9IGVsc2UgaWYgKFJFTU9WRV9BVCBpbiBjaGlsZE9wZXJhdGlvbikgeworICAgICAgbm9kZXNC
eU9yaWdpbmFsSW5kZXggPSBub2Rlc0J5T3JpZ2luYWxJbmRleCB8fCBbXTsKKyAgICAgIG9yaWdJ
bmRleCA9IGNoaWxkT3BlcmF0aW9uLnJlbW92ZUF0OworICAgICAgbm9kZXNCeU9yaWdpbmFsSW5k
ZXhbb3JpZ0luZGV4XSA9IHBhcmVudC5jaGlsZE5vZGVzW29yaWdJbmRleF07CisgICAgfQorICB9
CisgIHJldHVybiBub2Rlc0J5T3JpZ2luYWxJbmRleDsKK307CisKKy8qKgorICogUmVtb3ZlcyBE
T00gZWxlbWVudHMgZnJvbSB0aGVpciBwYXJlbnQsIG9yIG1vdmVkLgorICogQHBhcmFtIHtFbGVt
ZW50fSBwYXJlbnQgUGFyZW50IERPTSBub2RlLgorICogQHBhcmFtIHtBcnJheX0gbm9kZXNCeU9y
aWdpbmFsSW5kZXggQ2hpbGQgbm9kZXMgYnkgdGhlaXIgb3JpZ2luYWwgaW5kZXgKKyAqIChwb3Rl
bnRpYWxseSBzcGFyc2UuKQorICovCit2YXIgX3JlbW92ZUNoaWxkcmVuQnlPcmlnaW5hbEluZGV4
ID0gZnVuY3Rpb24ocGFyZW50LCBub2Rlc0J5T3JpZ2luYWxJbmRleCkgeworICBmb3IgKHZhciBq
ID0gMDsgaiA8IG5vZGVzQnlPcmlnaW5hbEluZGV4Lmxlbmd0aDsgaisrKSB7CisgICAgdmFyIG5v
ZGVUb1JlbW92ZSA9IG5vZGVzQnlPcmlnaW5hbEluZGV4W2pdOworICAgIGlmIChub2RlVG9SZW1v
dmUpIHsgICAgIC8vIFdlIHVzZWQgYSBzcGFyc2UgYXJyYXkuCisgICAgICBwYXJlbnQucmVtb3Zl
Q2hpbGQobm9kZXNCeU9yaWdpbmFsSW5kZXhbal0pOworICAgIH0KKyAgfQorfTsKKworLyoqCisg
KiBPbmNlIGFsbCBub2RlcyB0aGF0IHdpbGwgYmUgcmVtb3ZlZCBvciBtb3ZlZCAtIGFyZSByZW1v
dmVkIGZyb20gdGhlIHBhcmVudAorICogbm9kZSwgd2UgY2FuIGJlZ2luIHRoZSBwcm9jZXNzIG9m
IHBsYWNpbmcgbm9kZXMgaW50byB0aGVpciBmaW5hbCBsb2NhdGlvbnMuCisgKiBXZSBtdXN0IHBl
cmZvcm0gYWxsIG9wZXJhdGlvbnMgaW4gdGhlIG9yZGVyIG9mIHRoZSBmaW5hbCBET00gaW5kZXgg
LQorICogb3RoZXJ3aXNlLCB3ZSBjb3VsZG4ndCBjb3VudCBvbiB0aGUgZmFjdCB0aGF0IGFuIGlu
c2VydGlvbiBhdCBpbmRleCBYLCB3aWxsCisgKiByZW1haW4gYXQgaW5kZXggWC4gVGhpcyB3aWxs
IGl0ZXJhdGUgdGhyb3VnaCB0aGUgY2hpbGQgb3BlcmF0aW9ucywgYWRkaW5nCisgKiBjb250ZW50
IHdoZXJlIG5lZWRlZCwgc2tpcCBvdmVyIHJlbW92YWxzICh0aGV5J3ZlIGFscmVhZHkgYmVlbiBy
ZW1vdmVkKSBhbmQKKyAqIGluc2VydCAibW92ZWQiIEVsZW1lbnRzIHRoYXQgd2VyZSBwcmV2aW91
c2x5IHJlbW92ZWQuIFRoZSAibW92ZWQiIGVsZW1lbnRzCisgKiBhcmUgb25seSB0ZW1wb3Jhcmls
eSByZW1vdmVkIGZyb20gdGhlIHBhcmVudCwgc28gdGhhdCBpbmRleCBjYWxjdWxhdGlvbnMgY2Fu
CisgKiBiZSBtYW5hZ2VhYmxlIGFuZCBwZXJmb3JtIHdlbGwgaW4gdGhlIGNhc2VzIHRoYXQgbWF0
dGVyLgorICovCit2YXIgX3BsYWNlTm9kZXNBdERlc3RpbmF0aW9uID0KKyAgZnVuY3Rpb24ocGFy
ZW50LCBjaGlsZE9wZXJhdGlvbnMsIG5vZGVzQnlPcmlnaW5hbEluZGV4KSB7CisgICAgdmFyIG9y
aWdOb2RlOworICAgIHZhciBmaW5hbEluZGV4OworICAgIHZhciBsYXN0RmluYWxJbmRleCA9IC0x
OworICAgIHZhciBjaGlsZE9wZXJhdGlvbjsKKyAgICBmb3IgKHZhciBrID0gMDsgayA8IGNoaWxk
T3BlcmF0aW9ucy5sZW5ndGg7IGsrKykgeworICAgICAgY2hpbGRPcGVyYXRpb24gPSBjaGlsZE9w
ZXJhdGlvbnNba107CisgICAgICBpZiAoTU9WRV9OT0RFX0FUX09SSUdfSU5ERVggaW4gY2hpbGRP
cGVyYXRpb24pIHsKKyAgICAgICAgb3JpZ05vZGUgPSBub2Rlc0J5T3JpZ2luYWxJbmRleFtjaGls
ZE9wZXJhdGlvbi5tb3ZlRnJvbV07CisgICAgICAgIGZpbmFsSW5kZXggPSBjaGlsZE9wZXJhdGlv
bi5maW5hbEluZGV4OworICAgICAgICBpbnNlcnROb2RlQXQocGFyZW50LCBvcmlnTm9kZSwgZmlu
YWxJbmRleCk7CisgICAgICAgIGlmICh0cnVlKSB7CisgICAgICAgICAgdGhyb3dJZihmaW5hbElu
ZGV4IDw9IGxhc3RGaW5hbEluZGV4LCBOT05fSU5DUkVBU0lOR19PUEVSQVRJT05TKTsKKyAgICAg
ICAgICBsYXN0RmluYWxJbmRleCA9IGZpbmFsSW5kZXg7CisgICAgICAgIH0KKyAgICAgIH0gZWxz
ZSBpZiAoUkVNT1ZFX0FUIGluIGNoaWxkT3BlcmF0aW9uKSB7CisgICAgICB9IGVsc2UgaWYgKElO
U0VSVF9NQVJLVVAgaW4gY2hpbGRPcGVyYXRpb24pIHsKKyAgICAgICAgZmluYWxJbmRleCA9IGNo
aWxkT3BlcmF0aW9uLmZpbmFsSW5kZXg7CisgICAgICAgIHZhciBtYXJrdXAgPSBjaGlsZE9wZXJh
dGlvbi5pbnNlcnRNYXJrdXA7CisgICAgICAgIERhbmdlci5kYW5nZXJvdXNseUluc2VydE1hcmt1
cEF0KHBhcmVudCwgbWFya3VwLCBmaW5hbEluZGV4KTsKKyAgICAgICAgaWYgKHRydWUpIHsKKyAg
ICAgICAgICB0aHJvd0lmKGZpbmFsSW5kZXggPD0gbGFzdEZpbmFsSW5kZXgsIE5PTl9JTkNSRUFT
SU5HX09QRVJBVElPTlMpOworICAgICAgICAgIGxhc3RGaW5hbEluZGV4ID0gZmluYWxJbmRleDsK
KyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfTsKKwordmFyIG1hbmFnZUNoaWxkcmVuID0g
ZnVuY3Rpb24ocGFyZW50LCBjaGlsZE9wZXJhdGlvbnMpIHsKKyAgdmFyIG5vZGVzQnlPcmlnaW5h
bEluZGV4ID0gX2dldE5vZGVzQnlPcmlnaW5hbEluZGV4KHBhcmVudCwgY2hpbGRPcGVyYXRpb25z
KTsKKyAgaWYgKG5vZGVzQnlPcmlnaW5hbEluZGV4KSB7CisgICAgX3JlbW92ZUNoaWxkcmVuQnlP
cmlnaW5hbEluZGV4KHBhcmVudCwgbm9kZXNCeU9yaWdpbmFsSW5kZXgpOworICB9CisgIF9wbGFj
ZU5vZGVzQXREZXN0aW5hdGlvbihwYXJlbnQsIGNoaWxkT3BlcmF0aW9ucywgbm9kZXNCeU9yaWdp
bmFsSW5kZXgpOworfTsKKworLyoqCisgKiBBbHNvIHJlZXhwb3J0IGFsbCBvZiB0aGUgZGFuZ2Vy
b3VzIGZ1bmN0aW9ucy4gSXQgaGVscHMgdG8gaGF2ZSBhbGwgZGFuZ2Vyb3VzCisgKiBmdW5jdGlv
bnMgbG9jYXRlZCBpbiBhIHNpbmdsZSBtb2R1bGUgYERhbmdlcmAuCisgKi8KK3ZhciBET01DaGls
ZHJlbk9wZXJhdGlvbnMgPSB7CisgIGRhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwOiBE
YW5nZXIuZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXAsCisgIG1hbmFnZUNoaWxkcmVu
OiBtYW5hZ2VDaGlsZHJlbgorfTsKKworbW9kdWxlLmV4cG9ydHMgPSBET01DaGlsZHJlbk9wZXJh
dGlvbnM7CisKK30pKCkKK30seyIuL0RhbmdlciI6OSwiLi9pbnNlcnROb2RlQXQiOjc0LCIuL2tl
eU9mIjo3OSwiLi90aHJvd0lmIjo4Nn1dLDc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9y
dHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMyBGYWNlYm9vaywgSW5jLgorICoKKyAqIExpY2Vu
c2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIp
OworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRo
IHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0
CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgor
ICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0
aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJp
YnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05E
SVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRo
ZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25z
IGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogQHByb3ZpZGVz
TW9kdWxlIERPTVByb3BlcnR5CisgKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seQorICovCisKKy8q
anNsaW50IGJpdHdpc2U6IHRydWUgKi8KKworInVzZSBzdHJpY3QiOworCit2YXIgaW52YXJpYW50
ID0gcmVxdWlyZSgiLi9pbnZhcmlhbnQiKTsKKwordmFyIERPTVByb3BlcnR5SW5qZWN0aW9uID0g
eworICAvKioKKyAgICogTWFwcGluZyBmcm9tIG5vcm1hbGl6ZWQsIGNhbWVsY2FzZWQgcHJvcGVy
dHkgbmFtZXMgdG8gYSBjb25maWd1cmF0aW9uIHRoYXQKKyAgICogc3BlY2lmaWVzIGhvdyB0aGUg
YXNzb2NpYXRlZCBET00gcHJvcGVydHkgc2hvdWxkIGJlIGFjY2Vzc2VkIG9yIHJlbmRlcmVkLgor
ICAgKi8KKyAgTVVTVF9VU0VfQVRUUklCVVRFOiAweDEsCisgIE1VU1RfVVNFX1BST1BFUlRZOiAg
MHgyLAorICBIQVNfQk9PTEVBTl9WQUxVRTogIDB4NCwKKyAgSEFTX1NJREVfRUZGRUNUUzogICAw
eDgsCisKKyAgLyoqCisgICAqIEluamVjdCBzb21lIHNwZWNpYWxpemVkIGtub3dsZWRnZSBhYm91
dCB0aGUgRE9NLiBUaGlzIHRha2VzIGEgY29uZmlnIG9iamVjdAorICAgKiB3aXRoIHRoZSBmb2xs
b3dpbmcgcHJvcGVydGllczoKKyAgICoKKyAgICogaXNDdXN0b21BdHRyaWJ1dGU6IGZ1bmN0aW9u
IHRoYXQgZ2l2ZW4gYW4gYXR0cmlidXRlIG5hbWUgd2lsbCByZXR1cm4gdHJ1ZQorICAgKiBpZiBp
dCBjYW4gYmUgaW5zZXJ0ZWQgaW50byB0aGUgRE9NIHZlcmJhdGltLiBVc2VmdWwgZm9yIGRhdGEt
KiBvciBhcmlhLSoKKyAgICogYXR0cmlidXRlcyB3aGVyZSBpdCdzIGltcG9zc2libGUgdG8gZW51
bWVyYXRlIGFsbCBvZiB0aGUgcG9zc2libGUKKyAgICogYXR0cmlidXRlIG5hbWVzLAorICAgKgor
ICAgKiBQcm9wZXJ0aWVzOiBvYmplY3QgbWFwcGluZyBET00gcHJvcGVydHkgbmFtZSB0byBvbmUg
b2YgdGhlCisgICAqIERPTVByb3BlcnR5SW5qZWN0aW9uIGNvbnN0YW50cyBvciBudWxsLiBJZiB5
b3VyIGF0dHJpYnV0ZSBpc24ndCBpbiBoZXJlLAorICAgKiBpdCB3b24ndCBnZXQgd3JpdHRlbiB0
byB0aGUgRE9NLgorICAgKgorICAgKiBET01BdHRyaWJ1dGVOYW1lczogb2JqZWN0IG1hcHBpbmcg
UmVhY3QgYXR0cmlidXRlIG5hbWUgdG8gdGhlIERPTQorICAgKiBhdHRyaWJ1dGUgbmFtZS4gQXR0
cmlidXRlIG5hbWVzIG5vdCBzcGVjaWZpZWQgdXNlIHRoZSAqKmxvd2VyY2FzZSoqCisgICAqIG5v
cm1hbGl6ZWQgbmFtZS4KKyAgICoKKyAgICogRE9NUHJvcGVydHlOYW1lczogc2ltaWxhciB0byBE
T01BdHRyaWJ1dGVOYW1lcyBidXQgZm9yIERPTSBwcm9wZXJ0aWVzLgorICAgKiBQcm9wZXJ0eSBu
YW1lcyBub3Qgc3BlY2lmaWVkIHVzZSB0aGUgbm9ybWFsaXplZCBuYW1lLgorICAgKgorICAgKiBE
T01NdXRhdGlvbk1ldGhvZHM6IFByb3BlcnRpZXMgdGhhdCByZXF1aXJlIHNwZWNpYWwgbXV0YXRp
b24gbWV0aG9kcy4gSWYKKyAgICogYHZhbHVlYCBpcyB1bmRlZmluZWQsIHRoZSBtdXRhdGlvbiBt
ZXRob2Qgc2hvdWxkIHVuc2V0IHRoZSBwcm9wZXJ0eS4KKyAgICoKKyAgICogQHBhcmFtIHtvYmpl
Y3R9IGRvbVByb3BlcnR5Q29uZmlnIHRoZSBjb25maWcgYXMgZGVzY3JpYmVkIGFib3ZlLgorICAg
Ki8KKyAgaW5qZWN0RE9NUHJvcGVydHlDb25maWc6IGZ1bmN0aW9uKGRvbVByb3BlcnR5Q29uZmln
KSB7CisgICAgdmFyIFByb3BlcnRpZXMgPSBkb21Qcm9wZXJ0eUNvbmZpZy5Qcm9wZXJ0aWVzIHx8
IHt9OworICAgIHZhciBET01BdHRyaWJ1dGVOYW1lcyA9IGRvbVByb3BlcnR5Q29uZmlnLkRPTUF0
dHJpYnV0ZU5hbWVzIHx8IHt9OworICAgIHZhciBET01Qcm9wZXJ0eU5hbWVzID0gZG9tUHJvcGVy
dHlDb25maWcuRE9NUHJvcGVydHlOYW1lcyB8fCB7fTsKKyAgICB2YXIgRE9NTXV0YXRpb25NZXRo
b2RzID0gZG9tUHJvcGVydHlDb25maWcuRE9NTXV0YXRpb25NZXRob2RzIHx8IHt9OworCisgICAg
aWYgKGRvbVByb3BlcnR5Q29uZmlnLmlzQ3VzdG9tQXR0cmlidXRlKSB7CisgICAgICBET01Qcm9w
ZXJ0eS5faXNDdXN0b21BdHRyaWJ1dGVGdW5jdGlvbnMucHVzaCgKKyAgICAgICAgZG9tUHJvcGVy
dHlDb25maWcuaXNDdXN0b21BdHRyaWJ1dGUKKyAgICAgICk7CisgICAgfQorCisgICAgZm9yICh2
YXIgcHJvcE5hbWUgaW4gUHJvcGVydGllcykgeworICAgICAgaW52YXJpYW50KAorICAgICAgICAh
RE9NUHJvcGVydHkuaXNTdGFuZGFyZE5hbWVbcHJvcE5hbWVdLAorICAgICAgICAnaW5qZWN0RE9N
UHJvcGVydHlDb25maWcoLi4uKTogWW91XCdyZSB0cnlpbmcgdG8gaW5qZWN0IERPTSBwcm9wZXJ0
eSAnICsKKyAgICAgICAgJ1wnJXNcJyB3aGljaCBoYXMgYWxyZWFkeSBiZWVuIGluamVjdGVkLiBZ
b3UgbWF5IGJlIGFjY2lkZW50YWxseSAnICsKKyAgICAgICAgJ2luamVjdGluZyB0aGUgc2FtZSBE
T00gcHJvcGVydHkgY29uZmlnIHR3aWNlLCBvciB5b3UgbWF5IGJlICcgKworICAgICAgICAnaW5q
ZWN0aW5nIHR3byBjb25maWdzIHRoYXQgaGF2ZSBjb25mbGljdGluZyBwcm9wZXJ0eSBuYW1lcy4n
LAorICAgICAgICBwcm9wTmFtZQorICAgICAgKTsKKworICAgICAgRE9NUHJvcGVydHkuaXNTdGFu
ZGFyZE5hbWVbcHJvcE5hbWVdID0gdHJ1ZTsKKworICAgICAgRE9NUHJvcGVydHkuZ2V0QXR0cmli
dXRlTmFtZVtwcm9wTmFtZV0gPQorICAgICAgICBET01BdHRyaWJ1dGVOYW1lc1twcm9wTmFtZV0g
fHwgcHJvcE5hbWUudG9Mb3dlckNhc2UoKTsKKworICAgICAgRE9NUHJvcGVydHkuZ2V0UHJvcGVy
dHlOYW1lW3Byb3BOYW1lXSA9CisgICAgICAgIERPTVByb3BlcnR5TmFtZXNbcHJvcE5hbWVdIHx8
IHByb3BOYW1lOworCisgICAgICB2YXIgbXV0YXRpb25NZXRob2QgPSBET01NdXRhdGlvbk1ldGhv
ZHNbcHJvcE5hbWVdOworICAgICAgaWYgKG11dGF0aW9uTWV0aG9kKSB7CisgICAgICAgIERPTVBy
b3BlcnR5LmdldE11dGF0aW9uTWV0aG9kW3Byb3BOYW1lXSA9IG11dGF0aW9uTWV0aG9kOworICAg
ICAgfQorCisgICAgICB2YXIgcHJvcENvbmZpZyA9IFByb3BlcnRpZXNbcHJvcE5hbWVdOworICAg
ICAgRE9NUHJvcGVydHkubXVzdFVzZUF0dHJpYnV0ZVtwcm9wTmFtZV0gPQorICAgICAgICBwcm9w
Q29uZmlnICYgRE9NUHJvcGVydHlJbmplY3Rpb24uTVVTVF9VU0VfQVRUUklCVVRFOworICAgICAg
RE9NUHJvcGVydHkubXVzdFVzZVByb3BlcnR5W3Byb3BOYW1lXSA9CisgICAgICAgIHByb3BDb25m
aWcgJiBET01Qcm9wZXJ0eUluamVjdGlvbi5NVVNUX1VTRV9QUk9QRVJUWTsKKyAgICAgIERPTVBy
b3BlcnR5Lmhhc0Jvb2xlYW5WYWx1ZVtwcm9wTmFtZV0gPQorICAgICAgICBwcm9wQ29uZmlnICYg
RE9NUHJvcGVydHlJbmplY3Rpb24uSEFTX0JPT0xFQU5fVkFMVUU7CisgICAgICBET01Qcm9wZXJ0
eS5oYXNTaWRlRWZmZWN0c1twcm9wTmFtZV0gPQorICAgICAgICBwcm9wQ29uZmlnICYgRE9NUHJv
cGVydHlJbmplY3Rpb24uSEFTX1NJREVfRUZGRUNUUzsKKworICAgICAgaW52YXJpYW50KAorICAg
ICAgICAhRE9NUHJvcGVydHkubXVzdFVzZUF0dHJpYnV0ZVtwcm9wTmFtZV0gfHwKKyAgICAgICAg
ICAhRE9NUHJvcGVydHkubXVzdFVzZVByb3BlcnR5W3Byb3BOYW1lXSwKKyAgICAgICAgJ0RPTVBy
b3BlcnR5OiBDYW5ub3QgdXNlIHJlcXVpcmUgdXNpbmcgYm90aCBhdHRyaWJ1dGUgYW5kIHByb3Bl
cnR5OiAlcycsCisgICAgICAgIHByb3BOYW1lCisgICAgICApOworICAgICAgaW52YXJpYW50KAor
ICAgICAgICBET01Qcm9wZXJ0eS5tdXN0VXNlUHJvcGVydHlbcHJvcE5hbWVdIHx8CisgICAgICAg
ICAgIURPTVByb3BlcnR5Lmhhc1NpZGVFZmZlY3RzW3Byb3BOYW1lXSwKKyAgICAgICAgJ0RPTVBy
b3BlcnR5OiBQcm9wZXJ0aWVzIHRoYXQgaGF2ZSBzaWRlIGVmZmVjdHMgbXVzdCB1c2UgcHJvcGVy
dHk6ICVzJywKKyAgICAgICAgcHJvcE5hbWUKKyAgICAgICk7CisgICAgfQorICB9Cit9OwordmFy
IGRlZmF1bHRWYWx1ZUNhY2hlID0ge307CisKKy8qKgorICogRE9NUHJvcGVydHkgZXhwb3J0cyBs
b29rdXAgb2JqZWN0cyB0aGF0IGNhbiBiZSB1c2VkIGxpa2UgZnVuY3Rpb25zOgorICoKKyAqICAg
PiBET01Qcm9wZXJ0eS5pc1ZhbGlkWydpZCddCisgKiAgIHRydWUKKyAqICAgPiBET01Qcm9wZXJ0
eS5pc1ZhbGlkWydmb29iYXInXQorICogICB1bmRlZmluZWQKKyAqCisgKiBBbHRob3VnaCB0aGlz
IG1heSBiZSBjb25mdXNpbmcsIGl0IHBlcmZvcm1zIGJldHRlciBpbiBnZW5lcmFsLgorICoKKyAq
IEBzZWUgaHR0cDovL2pzcGVyZi5jb20va2V5LWV4aXN0cworICogQHNlZSBodHRwOi8vanNwZXJm
LmNvbS9rZXktbWlzc2luZworICovCit2YXIgRE9NUHJvcGVydHkgPSB7CisKKyAgLyoqCisgICAq
IENoZWNrcyB3aGV0aGVyIGEgcHJvcGVydHkgbmFtZSBpcyBhIHN0YW5kYXJkIHByb3BlcnR5Lgor
ICAgKiBAdHlwZSB7T2JqZWN0fQorICAgKi8KKyAgaXNTdGFuZGFyZE5hbWU6IHt9LAorCisgIC8q
KgorICAgKiBNYXBwaW5nIGZyb20gbm9ybWFsaXplZCBuYW1lcyB0byBhdHRyaWJ1dGUgbmFtZXMg
dGhhdCBkaWZmZXIuIEF0dHJpYnV0ZQorICAgKiBuYW1lcyBhcmUgdXNlZCB3aGVuIHJlbmRlcmlu
ZyBtYXJrdXAgb3Igd2l0aCBgKkF0dHJpYnV0ZSgpYC4KKyAgICogQHR5cGUge09iamVjdH0KKyAg
ICovCisgIGdldEF0dHJpYnV0ZU5hbWU6IHt9LAorCisgIC8qKgorICAgKiBNYXBwaW5nIGZyb20g
bm9ybWFsaXplZCBuYW1lcyB0byBwcm9wZXJ0aWVzIG9uIERPTSBub2RlIGluc3RhbmNlcy4KKyAg
ICogKFRoaXMgaW5jbHVkZXMgcHJvcGVydGllcyB0aGF0IG11dGF0ZSBkdWUgdG8gZXh0ZXJuYWwg
ZmFjdG9ycy4pCisgICAqIEB0eXBlIHtPYmplY3R9CisgICAqLworICBnZXRQcm9wZXJ0eU5hbWU6
IHt9LAorCisgIC8qKgorICAgKiBNYXBwaW5nIGZyb20gbm9ybWFsaXplZCBuYW1lcyB0byBtdXRh
dGlvbiBtZXRob2RzLiBUaGlzIHdpbGwgb25seSBleGlzdCBpZgorICAgKiBtdXRhdGlvbiBjYW5u
b3QgYmUgc2V0IHNpbXBseSBieSB0aGUgcHJvcGVydHkgb3IgYHNldEF0dHJpYnV0ZSgpYC4KKyAg
ICogQHR5cGUge09iamVjdH0KKyAgICovCisgIGdldE11dGF0aW9uTWV0aG9kOiB7fSwKKworICAv
KioKKyAgICogV2hldGhlciB0aGUgcHJvcGVydHkgbXVzdCBiZSBhY2Nlc3NlZCBhbmQgbXV0YXRl
ZCBhcyBhbiBvYmplY3QgcHJvcGVydHkuCisgICAqIEB0eXBlIHtPYmplY3R9CisgICAqLworICBt
dXN0VXNlQXR0cmlidXRlOiB7fSwKKworICAvKioKKyAgICogV2hldGhlciB0aGUgcHJvcGVydHkg
bXVzdCBiZSBhY2Nlc3NlZCBhbmQgbXV0YXRlZCB1c2luZyBgKkF0dHJpYnV0ZSgpYC4KKyAgICog
KFRoaXMgaW5jbHVkZXMgYW55dGhpbmcgdGhhdCBmYWlscyBgPHByb3BOYW1lPiBpbiA8ZWxlbWVu
dD5gLikKKyAgICogQHR5cGUge09iamVjdH0KKyAgICovCisgIG11c3RVc2VQcm9wZXJ0eToge30s
CisKKyAgLyoqCisgICAqIFdoZXRoZXIgdGhlIHByb3BlcnR5IHNob3VsZCBiZSByZW1vdmVkIHdo
ZW4gc2V0IHRvIGEgZmFsc2V5IHZhbHVlLgorICAgKiBAdHlwZSB7T2JqZWN0fQorICAgKi8KKyAg
aGFzQm9vbGVhblZhbHVlOiB7fSwKKworICAvKioKKyAgICogV2hldGhlciBvciBub3Qgc2V0dGlu
ZyBhIHZhbHVlIGNhdXNlcyBzaWRlIGVmZmVjdHMgc3VjaCBhcyB0cmlnZ2VyaW5nCisgICAqIHJl
c291cmNlcyB0byBiZSBsb2FkZWQgb3IgdGV4dCBzZWxlY3Rpb24gY2hhbmdlcy4gV2UgbXVzdCBl
bnN1cmUgdGhhdAorICAgKiB0aGUgdmFsdWUgaXMgb25seSBzZXQgaWYgaXQgaGFzIGNoYW5nZWQu
CisgICAqIEB0eXBlIHtPYmplY3R9CisgICAqLworICBoYXNTaWRlRWZmZWN0czoge30sCisKKyAg
LyoqCisgICAqIEFsbCBvZiB0aGUgaXNDdXN0b21BdHRyaWJ1dGUoKSBmdW5jdGlvbnMgdGhhdCBo
YXZlIGJlZW4gaW5qZWN0ZWQuCisgICAqLworICBfaXNDdXN0b21BdHRyaWJ1dGVGdW5jdGlvbnM6
IFtdLAorCisgIC8qKgorICAgKiBDaGVja3Mgd2hldGhlciBhIHByb3BlcnR5IG5hbWUgaXMgYSBj
dXN0b20gYXR0cmlidXRlLgorICAgKiBAbWV0aG9kCisgICAqLworICBpc0N1c3RvbUF0dHJpYnV0
ZTogZnVuY3Rpb24oYXR0cmlidXRlTmFtZSkgeworICAgIHJldHVybiBET01Qcm9wZXJ0eS5faXND
dXN0b21BdHRyaWJ1dGVGdW5jdGlvbnMuc29tZSgKKyAgICAgIGZ1bmN0aW9uKGlzQ3VzdG9tQXR0
cmlidXRlRm4pIHsKKyAgICAgICAgcmV0dXJuIGlzQ3VzdG9tQXR0cmlidXRlRm4uY2FsbChudWxs
LCBhdHRyaWJ1dGVOYW1lKTsKKyAgICAgIH0KKyAgICApOworICB9LAorCisgIC8qKgorICAgKiBS
ZXR1cm5zIHRoZSBkZWZhdWx0IHByb3BlcnR5IHZhbHVlIGZvciBhIERPTSBwcm9wZXJ0eSAoaS5l
Liwgbm90IGFuCisgICAqIGF0dHJpYnV0ZSkuIE1vc3QgZGVmYXVsdCB2YWx1ZXMgYXJlICcnIG9y
IGZhbHNlLCBidXQgbm90IGFsbC4gV29yc2UgeWV0LAorICAgKiBzb21lIChpbiBwYXJ0aWN1bGFy
LCBgdHlwZWApIHZhcnkgZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIGVsZW1lbnQuCisgICAqCisg
ICAqIFRPRE86IElzIGl0IGJldHRlciB0byBncmFiIGFsbCB0aGUgcG9zc2libGUgcHJvcGVydGll
cyB3aGVuIGNyZWF0aW5nIGFuCisgICAqIGVsZW1lbnQgdG8gYXZvaWQgaGF2aW5nIHRvIGNyZWF0
ZSB0aGUgc2FtZSBlbGVtZW50IHR3aWNlPworICAgKi8KKyAgZ2V0RGVmYXVsdFZhbHVlRm9yUHJv
cGVydHk6IGZ1bmN0aW9uKG5vZGVOYW1lLCBwcm9wKSB7CisgICAgdmFyIG5vZGVEZWZhdWx0cyA9
IGRlZmF1bHRWYWx1ZUNhY2hlW25vZGVOYW1lXTsKKyAgICB2YXIgdGVzdEVsZW1lbnQ7CisgICAg
aWYgKCFub2RlRGVmYXVsdHMpIHsKKyAgICAgIGRlZmF1bHRWYWx1ZUNhY2hlW25vZGVOYW1lXSA9
IG5vZGVEZWZhdWx0cyA9IHt9OworICAgIH0KKyAgICBpZiAoIShwcm9wIGluIG5vZGVEZWZhdWx0
cykpIHsKKyAgICAgIHRlc3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChub2RlTmFt
ZSk7CisgICAgICBub2RlRGVmYXVsdHNbcHJvcF0gPSB0ZXN0RWxlbWVudFtwcm9wXTsKKyAgICB9
CisgICAgcmV0dXJuIG5vZGVEZWZhdWx0c1twcm9wXTsKKyAgfSwKKworICBpbmplY3Rpb246IERP
TVByb3BlcnR5SW5qZWN0aW9uCit9OworCittb2R1bGUuZXhwb3J0cyA9IERPTVByb3BlcnR5Owor
Cit9LHsiLi9pbnZhcmlhbnQiOjc1fV0sODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0
cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgorICogTGljZW5z
ZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7
CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgg
dGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQK
KyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisg
KiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRp
bmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmli
dXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJ
VElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhl
IExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMg
YW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBAcHJvdmlkZXNN
b2R1bGUgRE9NUHJvcGVydHlPcGVyYXRpb25zCisgKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seQor
ICovCisKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIERPTVByb3BlcnR5ID0gcmVxdWlyZSgiLi9ET01Q
cm9wZXJ0eSIpOworCit2YXIgZXNjYXBlVGV4dEZvckJyb3dzZXIgPSByZXF1aXJlKCIuL2VzY2Fw
ZVRleHRGb3JCcm93c2VyIik7Cit2YXIgbWVtb2l6ZVN0cmluZ09ubHkgPSByZXF1aXJlKCIuL21l
bW9pemVTdHJpbmdPbmx5Iik7CisKK3ZhciBwcm9jZXNzQXR0cmlidXRlTmFtZUFuZFByZWZpeCA9
IG1lbW9pemVTdHJpbmdPbmx5KGZ1bmN0aW9uKG5hbWUpIHsKKyAgcmV0dXJuIGVzY2FwZVRleHRG
b3JCcm93c2VyKG5hbWUpICsgJz0iJzsKK30pOworCisvKioKKyAqIE9wZXJhdGlvbnMgZm9yIGRl
YWxpbmcgd2l0aCBET00gcHJvcGVydGllcy4KKyAqLwordmFyIERPTVByb3BlcnR5T3BlcmF0aW9u
cyA9IHsKKworICAvKioKKyAgICogQ3JlYXRlcyBtYXJrdXAgZm9yIGEgcHJvcGVydHkuCisgICAq
CisgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lCisgICAqIEBwYXJhbSB7Kn0gdmFsdWUKKyAgICog
QHJldHVybiB7P3N0cmluZ30gTWFya3VwIHN0cmluZywgb3IgbnVsbCBpZiB0aGUgcHJvcGVydHkg
d2FzIGludmFsaWQuCisgICAqLworICBjcmVhdGVNYXJrdXBGb3JQcm9wZXJ0eTogZnVuY3Rpb24o
bmFtZSwgdmFsdWUpIHsKKyAgICBpZiAoRE9NUHJvcGVydHkuaXNTdGFuZGFyZE5hbWVbbmFtZV0p
IHsKKyAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IERPTVByb3BlcnR5Lmhhc0Jvb2xlYW5WYWx1
ZVtuYW1lXSAmJiAhdmFsdWUpIHsKKyAgICAgICAgcmV0dXJuICcnOworICAgICAgfQorICAgICAg
dmFyIGF0dHJpYnV0ZU5hbWUgPSBET01Qcm9wZXJ0eS5nZXRBdHRyaWJ1dGVOYW1lW25hbWVdOwor
ICAgICAgcmV0dXJuIHByb2Nlc3NBdHRyaWJ1dGVOYW1lQW5kUHJlZml4KGF0dHJpYnV0ZU5hbWUp
ICsKKyAgICAgICAgZXNjYXBlVGV4dEZvckJyb3dzZXIodmFsdWUpICsgJyInOworICAgIH0gZWxz
ZSBpZiAoRE9NUHJvcGVydHkuaXNDdXN0b21BdHRyaWJ1dGUobmFtZSkpIHsKKyAgICAgIGlmICh2
YWx1ZSA9PSBudWxsKSB7CisgICAgICAgIHJldHVybiAnJzsKKyAgICAgIH0KKyAgICAgIHJldHVy
biBwcm9jZXNzQXR0cmlidXRlTmFtZUFuZFByZWZpeChuYW1lKSArCisgICAgICAgIGVzY2FwZVRl
eHRGb3JCcm93c2VyKHZhbHVlKSArICciJzsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIG51
bGw7CisgICAgfQorICB9LAorCisgIC8qKgorICAgKiBTZXRzIHRoZSB2YWx1ZSBmb3IgYSBwcm9w
ZXJ0eSBvbiBhIG5vZGUuCisgICAqCisgICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZQorICAg
KiBAcGFyYW0ge3N0cmluZ30gbmFtZQorICAgKiBAcGFyYW0geyp9IHZhbHVlCisgICAqLworICBz
ZXRWYWx1ZUZvclByb3BlcnR5OiBmdW5jdGlvbihub2RlLCBuYW1lLCB2YWx1ZSkgeworICAgIGlm
IChET01Qcm9wZXJ0eS5pc1N0YW5kYXJkTmFtZVtuYW1lXSkgeworICAgICAgdmFyIG11dGF0aW9u
TWV0aG9kID0gRE9NUHJvcGVydHkuZ2V0TXV0YXRpb25NZXRob2RbbmFtZV07CisgICAgICBpZiAo
bXV0YXRpb25NZXRob2QpIHsKKyAgICAgICAgbXV0YXRpb25NZXRob2Qobm9kZSwgdmFsdWUpOwor
ICAgICAgfSBlbHNlIGlmIChET01Qcm9wZXJ0eS5tdXN0VXNlQXR0cmlidXRlW25hbWVdKSB7Cisg
ICAgICAgIGlmIChET01Qcm9wZXJ0eS5oYXNCb29sZWFuVmFsdWVbbmFtZV0gJiYgIXZhbHVlKSB7
CisgICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoRE9NUHJvcGVydHkuZ2V0QXR0cmlidXRl
TmFtZVtuYW1lXSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1
dGUoRE9NUHJvcGVydHkuZ2V0QXR0cmlidXRlTmFtZVtuYW1lXSwgdmFsdWUpOworICAgICAgICB9
CisgICAgICB9IGVsc2UgeworICAgICAgICB2YXIgcHJvcE5hbWUgPSBET01Qcm9wZXJ0eS5nZXRQ
cm9wZXJ0eU5hbWVbbmFtZV07CisgICAgICAgIGlmICghRE9NUHJvcGVydHkuaGFzU2lkZUVmZmVj
dHNbbmFtZV0gfHwgbm9kZVtwcm9wTmFtZV0gIT09IHZhbHVlKSB7CisgICAgICAgICAgbm9kZVtw
cm9wTmFtZV0gPSB2YWx1ZTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0gZWxzZSBpZiAoRE9N
UHJvcGVydHkuaXNDdXN0b21BdHRyaWJ1dGUobmFtZSkpIHsKKyAgICAgIG5vZGUuc2V0QXR0cmli
dXRlKG5hbWUsIHZhbHVlKTsKKyAgICB9CisgIH0sCisKKyAgLyoqCisgICAqIERlbGV0ZXMgdGhl
IHZhbHVlIGZvciBhIHByb3BlcnR5IG9uIGEgbm9kZS4KKyAgICoKKyAgICogQHBhcmFtIHtET01F
bGVtZW50fSBub2RlCisgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lCisgICAqLworICBkZWxldGVW
YWx1ZUZvclByb3BlcnR5OiBmdW5jdGlvbihub2RlLCBuYW1lKSB7CisgICAgaWYgKERPTVByb3Bl
cnR5LmlzU3RhbmRhcmROYW1lW25hbWVdKSB7CisgICAgICB2YXIgbXV0YXRpb25NZXRob2QgPSBE
T01Qcm9wZXJ0eS5nZXRNdXRhdGlvbk1ldGhvZFtuYW1lXTsKKyAgICAgIGlmIChtdXRhdGlvbk1l
dGhvZCkgeworICAgICAgICBtdXRhdGlvbk1ldGhvZChub2RlLCB1bmRlZmluZWQpOworICAgICAg
fSBlbHNlIGlmIChET01Qcm9wZXJ0eS5tdXN0VXNlQXR0cmlidXRlW25hbWVdKSB7CisgICAgICAg
IG5vZGUucmVtb3ZlQXR0cmlidXRlKERPTVByb3BlcnR5LmdldEF0dHJpYnV0ZU5hbWVbbmFtZV0p
OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIHByb3BOYW1lID0gRE9NUHJvcGVydHkuZ2V0
UHJvcGVydHlOYW1lW25hbWVdOworICAgICAgICBub2RlW3Byb3BOYW1lXSA9IERPTVByb3BlcnR5
LmdldERlZmF1bHRWYWx1ZUZvclByb3BlcnR5KAorICAgICAgICAgIG5vZGUubm9kZU5hbWUsCisg
ICAgICAgICAgbmFtZQorICAgICAgICApOworICAgICAgfQorICAgIH0gZWxzZSBpZiAoRE9NUHJv
cGVydHkuaXNDdXN0b21BdHRyaWJ1dGUobmFtZSkpIHsKKyAgICAgIG5vZGUucmVtb3ZlQXR0cmli
dXRlKG5hbWUpOworICAgIH0KKyAgfQorCit9OworCittb2R1bGUuZXhwb3J0cyA9IERPTVByb3Bl
cnR5T3BlcmF0aW9uczsKKworfSx7Ii4vRE9NUHJvcGVydHkiOjcsIi4vZXNjYXBlVGV4dEZvckJy
b3dzZXIiOjY1LCIuL21lbW9pemVTdHJpbmdPbmx5Ijo4MH1dLDk6W2Z1bmN0aW9uKHJlcXVpcmUs
bW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMyBGYWNlYm9vaywgSW5jLgor
ICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRo
ZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29t
cGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRo
ZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VO
U0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVl
ZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vu
c2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFO
VElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVk
LgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5n
IHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgor
ICogQHByb3ZpZGVzTW9kdWxlIERhbmdlcgorICovCisKKy8qanNsaW50IGV2aWw6IHRydWUsIHN1
YjogdHJ1ZSAqLworCisidXNlIHN0cmljdCI7CisKK3ZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9
IHJlcXVpcmUoIi4vRXhlY3V0aW9uRW52aXJvbm1lbnQiKTsKKwordmFyIHRocm93SWYgPSByZXF1
aXJlKCIuL3Rocm93SWYiKTsKKwordmFyIERPTV9VTlNVUFBPUlRFRDsKK3ZhciBOT19NQVJLVVBf
UEFSRU5UOwordmFyIE5PX01VTFRJX01BUktVUDsKK2lmICh0cnVlKSB7CisgIERPTV9VTlNVUFBP
UlRFRCA9CisgICAgJ1lvdSBtYXkgbm90IGluc2VydCBtYXJrdXAgaW50byB0aGUgZG9jdW1lbnQg
d2hpbGUgeW91IGFyZSBpbiBhIHdvcmtlciAnICsKKyAgICAndGhyZWFkLiBJdFwncyBub3QgeW91
LCBpdFwncyBtZS4gVGhpcyBpcyBsaWtlbHkgdGhlIGZhdWx0IG9mIHRoZSAnICsKKyAgICAnZnJh
bWV3b3JrLiBQbGVhc2UgcmVwb3J0IHRoaXMgaW1tZWRpYXRlbHkuJzsKKyAgTk9fTUFSS1VQX1BB
UkVOVCA9CisgICAgJ1lvdSBoYXZlIGF0dGVtcHRlZCB0byBpbmplY3QgbWFya3VwIHdpdGhvdXQg
YSBzdWl0YWJsZSBwYXJlbnQuIFRoaXMgaXMgJyArCisgICAgJ2xpa2VseSB0aGUgZmF1bHQgb2Yg
dGhlIGZyYW1ld29yayAtIHBsZWFzZSByZXBvcnQgaW1tZWRpYXRlbHkuJzsKKyAgTk9fTVVMVElf
TUFSS1VQID0KKyAgICAnVGhlIGZyYW1ld29yayBoYXMgYXR0ZW1wdGVkIHRvIGVpdGhlciBpbnNl
cnQgemVybyBvciBtdWx0aXBsZSBtYXJrdXAgJyArCisgICAgJ3Jvb3RzIGludG8gYSBzaW5nbGUg
bG9jYXRpb24gd2hlbiBpdCBzaG91bGQgbm90LiBUaGlzIGlzIGEgc2VyaW91cyAnICsKKyAgICAn
ZXJyb3IgLSBhIGZhdWx0IG9mIHRoZSBmcmFtZXdvcmsgLSBwbGVhc2UgcmVwb3J0IGltbWVkaWF0
ZWx5Lic7Cit9CisKK3ZhciB2YWxpZGF0ZU1hcmt1cFBhcmFtczsKK2lmICh0cnVlKSB7CisgIHZh
bGlkYXRlTWFya3VwUGFyYW1zID0gZnVuY3Rpb24ocGFyZW50Tm9kZSwgbWFya3VwKSB7CisgICAg
dGhyb3dJZighRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NLCBET01fVU5TVVBQT1JURUQp
OworICAgIHRocm93SWYoIXBhcmVudE5vZGUgfHwgIXBhcmVudE5vZGUudGFnTmFtZSwgTk9fTUFS
S1VQX1BBUkVOVCk7CisgICAgdGhyb3dJZighbWFya3VwLCBOT19NVUxUSV9NQVJLVVApOworICB9
OworfQorCisvKioKKyAqIER1bW15IGNvbnRhaW5lciB1c2VkIHRvIHJlbmRlciBhbGwgbWFya3Vw
LgorICovCit2YXIgZHVtbXlOb2RlID0gRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NID8K
KyAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykgOgorICBudWxsOworCisvKioKKyAqIFNv
bWUgYnJvd3NlcnMgY2Fubm90IHVzZSBgaW5uZXJIVE1MYCB0byByZW5kZXIgY2VydGFpbiBlbGVt
ZW50cyBzdGFuZGFsb25lLAorICogc28gd2Ugd3JhcCB0aGVtLCByZW5kZXIgdGhlIHdyYXBwZWQg
bm9kZXMsIHRoZW4gZXh0cmFjdCB0aGUgZGVzaXJlZCBub2RlLgorICovCit2YXIgbWFya3VwV3Jh
cCA9IHsKKyAgJ29wdGlvbic6IFsxLCAnPHNlbGVjdCBtdWx0aXBsZT0idHJ1ZSI+JywgJzwvc2Vs
ZWN0PiddLAorICAnbGVnZW5kJzogWzEsICc8ZmllbGRzZXQ+JywgJzwvZmllbGRzZXQ+J10sCisg
ICdhcmVhJzogWzEsICc8bWFwPicsICc8L21hcD4nXSwKKyAgJ3BhcmFtJzogWzEsICc8b2JqZWN0
PicsICc8L29iamVjdD4nXSwKKyAgJ3RoZWFkJzogWzEsICc8dGFibGU+JywgJzwvdGFibGU+J10s
CisgICd0cic6IFsyLCAnPHRhYmxlPjx0Ym9keT4nLCAnPC90Ym9keT48L3RhYmxlPiddLAorICAn
Y29sJzogWzIsICc8dGFibGU+PHRib2R5PjwvdGJvZHk+PGNvbGdyb3VwPicsICc8L2NvbGdyb3Vw
PjwvdGFibGU+J10sCisgICd0ZCc6IFszLCAnPHRhYmxlPjx0Ym9keT48dHI+JywgJzwvdHI+PC90
Ym9keT48L3RhYmxlPiddCit9OworbWFya3VwV3JhcFsnb3B0Z3JvdXAnXSA9IG1hcmt1cFdyYXBb
J29wdGlvbiddOworbWFya3VwV3JhcFsndGJvZHknXSA9IG1hcmt1cFdyYXBbJ3RoZWFkJ107Citt
YXJrdXBXcmFwWyd0Zm9vdCddID0gbWFya3VwV3JhcFsndGhlYWQnXTsKK21hcmt1cFdyYXBbJ2Nv
bGdyb3VwJ10gPSBtYXJrdXBXcmFwWyd0aGVhZCddOworbWFya3VwV3JhcFsnY2FwdGlvbiddID0g
bWFya3VwV3JhcFsndGhlYWQnXTsKK21hcmt1cFdyYXBbJ3RoJ10gPSBtYXJrdXBXcmFwWyd0ZCdd
OworCisvKioKKyAqIEluIElFOCwgY2VydGFpbiBlbGVtZW50cyBjYW5ub3QgcmVuZGVyIGFsb25l
LCBzbyB3cmFwIGFsbCBlbGVtZW50cy4KKyAqLwordmFyIGRlZmF1bHRXcmFwID0gWzEsICc/PGRp
dj4nLCAnPC9kaXY+J107CisKKy8qKgorICogRmVhdHVyZSBkZXRlY3Rpb24sIHJlbW92ZSB3cmFw
cyB0aGF0IGFyZSB1bm5lY2Vzc2FyeSBmb3IgdGhlIGN1cnJlbnQgYnJvd3Nlci4KKyAqLworaWYg
KGR1bW15Tm9kZSkgeworICBmb3IgKHZhciBub2RlTmFtZSBpbiBtYXJrdXBXcmFwKSB7CisgICAg
aWYgKCFtYXJrdXBXcmFwLmhhc093blByb3BlcnR5KG5vZGVOYW1lKSkgeworICAgICAgY29udGlu
dWU7CisgICAgfQorICAgIGR1bW15Tm9kZS5pbm5lckhUTUwgPSAnPCcgKyBub2RlTmFtZSArICc+
PC8nICsgbm9kZU5hbWUgKyAnPic7CisgICAgaWYgKGR1bW15Tm9kZS5maXJzdENoaWxkKSB7Cisg
ICAgICBtYXJrdXBXcmFwW25vZGVOYW1lXSA9IG51bGw7CisgICAgfQorICB9CisgIGR1bW15Tm9k
ZS5pbm5lckhUTUwgPSAnPGxpbmsgLz4nOworICBpZiAoZHVtbXlOb2RlLmZpcnN0Q2hpbGQpIHsK
KyAgICBkZWZhdWx0V3JhcCA9IG51bGw7CisgIH0KK30KKworLyoqCisgKiBSZW5kZXJzIG1hcmt1
cCBpbnRvIG5vZGVzLiBUaGUgcmV0dXJuZWQgSFRNTENvbGxlY3Rpb24gaXMgbGl2ZSBhbmQgc2hv
dWxkIGJlCisgKiB1c2VkIGltbWVkaWF0ZWx5IChvciBhdCBsZWFzdCBiZWZvcmUgdGhlIG5leHQg
aW52b2NhdGlvbiB0byBgcmVuZGVyTWFya3VwYCkuCisgKgorICogTk9URTogRXh0cmFjdGluZyB0
aGUgYG5vZGVOYW1lYCBkb2VzIG5vdCByZXF1aXJlIGEgcmVndWxhciBleHByZXNzaW9uIG1hdGNo
CisgKiBiZWNhdXNlIHdlIG1ha2UgYXNzdW1wdGlvbnMgYWJvdXQgUmVhY3QtZ2VuZXJhdGVkIG1h
cmt1cCAoaS5lLiB0aGVyZSBhcmUgbm8KKyAqIHNwYWNlcyBzdXJyb3VuZGluZyB0aGUgb3Blbmlu
ZyB0YWcgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBhdHRyaWJ1dGUpLgorICogQHNlZSBodHRw
Oi8vanNwZXJmLmNvbS9leHRyYWN0LW5vZGVuYW1lCisgKgorICogQHBhcmFtIHtzdHJpbmd9IG1h
cmt1cAorICogQHJldHVybiB7Kn0gQW4gSFRNTENvbGxlY3Rpb24uCisgKi8KK2Z1bmN0aW9uIHJl
bmRlck1hcmt1cChtYXJrdXApIHsKKyAgdmFyIG5vZGUgPSBkdW1teU5vZGU7CisgIHZhciBub2Rl
TmFtZSA9IG1hcmt1cC5zdWJzdHJpbmcoMSwgbWFya3VwLmluZGV4T2YoJyAnKSk7CisKKyAgdmFy
IHdyYXAgPSBtYXJrdXBXcmFwW25vZGVOYW1lLnRvTG93ZXJDYXNlKCldIHx8IGRlZmF1bHRXcmFw
OworICBpZiAod3JhcCkgeworICAgIG5vZGUuaW5uZXJIVE1MID0gd3JhcFsxXSArIG1hcmt1cCAr
IHdyYXBbMl07CisKKyAgICB2YXIgd3JhcERlcHRoID0gd3JhcFswXTsKKyAgICB3aGlsZSAod3Jh
cERlcHRoLS0pIHsKKyAgICAgIG5vZGUgPSBub2RlLmxhc3RDaGlsZDsKKyAgICB9CisgIH0gZWxz
ZSB7CisgICAgbm9kZS5pbm5lckhUTUwgPSBtYXJrdXA7CisgIH0KKyAgcmV0dXJuIG5vZGUuY2hp
bGROb2RlczsKK30KKworLyoqCisgKiBJbnNlcnRzIG5vZGUgYWZ0ZXIgJ2FmdGVyJy4gSWYgJ2Fm
dGVyJyBpcyBudWxsLCBpbnNlcnRzIGl0IGFmdGVyIG5vdGhpbmcsCisgKiB3aGljaCBpcyBpbnNl
cnRpbmcgaXQgYXQgdGhlIGJlZ2lubmluZy4KKyAqCisgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW0g
UGFyZW50IGVsZW1lbnQuCisgKiBAcGFyYW0ge0VsZW1lbnR9IGluc2VydCBFbGVtZW50IHRvIGlu
c2VydC4KKyAqIEBwYXJhbSB7RWxlbWVudH0gYWZ0ZXIgRWxlbWVudCB0byBpbnNlcnQgYWZ0ZXIu
CisgKiBAcmV0dXJuIHtFbGVtZW50fSBFbGVtZW50IHRoYXQgd2FzIGluc2VydGVkLgorICovCitm
dW5jdGlvbiBpbnNlcnROb2RlQWZ0ZXJOb2RlKGVsZW0sIGluc2VydCwgYWZ0ZXIpIHsKKyAgaWYg
KHRydWUpIHsKKyAgICB0aHJvd0lmKCFFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00sIERP
TV9VTlNVUFBPUlRFRCk7CisgIH0KKyAgaWYgKGFmdGVyKSB7CisgICAgaWYgKGFmdGVyLm5leHRT
aWJsaW5nKSB7CisgICAgICByZXR1cm4gZWxlbS5pbnNlcnRCZWZvcmUoaW5zZXJ0LCBhZnRlci5u
ZXh0U2libGluZyk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBlbGVtLmFwcGVuZENoaWxk
KGluc2VydCk7CisgICAgfQorICB9IGVsc2UgeworICAgIHJldHVybiBlbGVtLmluc2VydEJlZm9y
ZShpbnNlcnQsIGVsZW0uZmlyc3RDaGlsZCk7CisgIH0KK30KKworLyoqCisgKiBTbG93OiBTaG91
bGQgb25seSBiZSB1c2VkIHdoZW4gaXQgaXMga25vd24gdGhlcmUgYXJlIGEgZmV3IChvciBvbmUp
IGVsZW1lbnQKKyAqIGluIHRoZSBub2RlIGxpc3QuCisgKiBAcGFyYW0ge0VsZW1lbnR9IHBhcmVu
dFJvb3REb21Ob2RlIFBhcmVudCBlbGVtZW50LgorICogQHBhcmFtIHtIVE1MQ29sbGVjdGlvbn0g
aHRtbENvbGxlY3Rpb24gSFRNTENvbGxlY3Rpb24gdG8gaW5zZXJ0LgorICogQHBhcmFtIHtFbGVt
ZW50fSBhZnRlciBFbGVtZW50IHRvIGluc2VydCB0aGUgbm9kZSBsaXN0IGFmdGVyLgorICovCitm
dW5jdGlvbiBpbmVmZmljaWVudGx5SW5zZXJ0SFRNTENvbGxlY3Rpb25BZnRlcigKKyAgICBwYXJl
bnRSb290RG9tTm9kZSwKKyAgICBodG1sQ29sbGVjdGlvbiwKKyAgICBhZnRlcikgeworCisgIGlm
ICh0cnVlKSB7CisgICAgdGhyb3dJZighRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NLCBE
T01fVU5TVVBQT1JURUQpOworICB9CisgIHZhciByZXQ7CisgIHZhciBvcmlnaW5hbExlbmd0aCA9
IGh0bWxDb2xsZWN0aW9uLmxlbmd0aDsKKyAgLy8gQWNjZXNzIGh0bWxDb2xsZWN0aW9uWzBdIGJl
Y2F1c2UgaHRtbENvbGxlY3Rpb24gc2hyaW5rcyBhcyB3ZSByZW1vdmUgaXRlbXMuCisgIC8vIGBp
bnNlcnROb2RlQWZ0ZXJOb2RlYCB3aWxsIHJlbW92ZSBpdGVtcyBmcm9tIHRoZSBodG1sQ29sbGVj
dGlvbi4KKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcmlnaW5hbExlbmd0aDsgaSsrKSB7CisgICAg
cmV0ID0KKyAgICAgIGluc2VydE5vZGVBZnRlck5vZGUocGFyZW50Um9vdERvbU5vZGUsIGh0bWxD
b2xsZWN0aW9uWzBdLCByZXQgfHwgYWZ0ZXIpOworICB9Cit9CisKKy8qKgorICogU3VwZXItZGFu
Z2Vyb3VzbHkgaW5zZXJ0cyBtYXJrdXAgaW50byBleGlzdGluZyBET00gc3RydWN0dXJlLiBTZXJp
b3VzbHksIHlvdQorICogZG9uJ3Qgd2FudCB0byB1c2UgdGhpcyBtb2R1bGUgdW5sZXNzIHlvdSBh
cmUgYnVpbGRpbmcgYSBmcmFtZXdvcmsuIFRoaXMKKyAqIHJlcXVpcmVzIHRoYXQgdGhlIG1hcmt1
cCB0aGF0IHlvdSBhcmUgaW5zZXJ0aW5nIHJlcHJlc2VudHMgdGhlIHJvb3Qgb2YgYQorICogdHJl
ZS4gV2UgZG8gbm90IHN1cHBvcnQgdGhlIGNhc2Ugd2hlcmUgdGhlcmUgYG1hcmt1cGAgcmVwcmVz
ZW50cyBzZXZlcmFsCisgKiByb290cy4KKyAqCisgKiBAcGFyYW0ge0VsZW1lbnR9IHBhcmVudE5v
ZGUgUGFyZW50IERPTSBlbGVtZW50LgorICogQHBhcmFtIHtzdHJpbmd9IG1hcmt1cCBNYXJrdXAg
dG8gZGFuZ2Vyb3VzbHkgaW5zZXJ0LgorICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFBvc2l0aW9u
IHRvIGluc2VydCBtYXJrdXAgYXQuCisgKi8KK2Z1bmN0aW9uIGRhbmdlcm91c2x5SW5zZXJ0TWFy
a3VwQXQocGFyZW50Tm9kZSwgbWFya3VwLCBpbmRleCkgeworICBpZiAodHJ1ZSkgeworICAgIHZh
bGlkYXRlTWFya3VwUGFyYW1zKHBhcmVudE5vZGUsIG1hcmt1cCk7CisgIH0KKyAgdmFyIGh0bWxD
b2xsZWN0aW9uID0gcmVuZGVyTWFya3VwKG1hcmt1cCk7CisgIHZhciBhZnRlck5vZGUgPSBpbmRl
eCA/IHBhcmVudE5vZGUuY2hpbGROb2Rlc1tpbmRleCAtIDFdIDogbnVsbDsKKyAgaW5lZmZpY2ll
bnRseUluc2VydEhUTUxDb2xsZWN0aW9uQWZ0ZXIocGFyZW50Tm9kZSwgaHRtbENvbGxlY3Rpb24s
IGFmdGVyTm9kZSk7Cit9CisKKy8qKgorICogUmVwbGFjZXMgYSBub2RlIHdpdGggYSBzdHJpbmcg
b2YgbWFya3VwIGF0IGl0cyBjdXJyZW50IHBvc2l0aW9uIHdpdGhpbiBpdHMKKyAqIHBhcmVudC4g
YGNoaWxkTm9kZWAgbXVzdCBiZSBpbiB0aGUgZG9jdW1lbnQgKG9yIGF0IGxlYXN0IHdpdGhpbiBh
IHBhcmVudAorICogbm9kZSkuIFRoZSBzdHJpbmcgb2YgbWFya3VwIG11c3QgcmVwcmVzZW50IGEg
dHJlZSBvZiBtYXJrdXAgd2l0aCBhIHNpbmdsZQorICogcm9vdC4KKyAqCisgKiBAcGFyYW0ge0Vs
ZW1lbnR9IGNoaWxkTm9kZSBDaGlsZCBub2RlIHRvIHJlcGxhY2UuCisgKiBAcGFyYW0ge3N0cmlu
Z30gbWFya3VwIE1hcmt1cCB0byBkYW5nZXJvdXNseSByZXBsYWNlIGNoaWxkIHdpdGguCisgKi8K
K2Z1bmN0aW9uIGRhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwKGNoaWxkTm9kZSwgbWFy
a3VwKSB7CisgIHZhciBwYXJlbnROb2RlID0gY2hpbGROb2RlLnBhcmVudE5vZGU7CisgIGlmICh0
cnVlKSB7CisgICAgdmFsaWRhdGVNYXJrdXBQYXJhbXMocGFyZW50Tm9kZSwgbWFya3VwKTsKKyAg
fQorICB2YXIgaHRtbENvbGxlY3Rpb24gPSByZW5kZXJNYXJrdXAobWFya3VwKTsKKyAgaWYgKHRy
dWUpIHsKKyAgICB0aHJvd0lmKGh0bWxDb2xsZWN0aW9uLmxlbmd0aCAhPT0gMSwgTk9fTVVMVElf
TUFSS1VQKTsKKyAgfQorICBwYXJlbnROb2RlLnJlcGxhY2VDaGlsZChodG1sQ29sbGVjdGlvblsw
XSwgY2hpbGROb2RlKTsKK30KKwordmFyIERhbmdlciA9IHsKKyAgZGFuZ2Vyb3VzbHlJbnNlcnRN
YXJrdXBBdDogZGFuZ2Vyb3VzbHlJbnNlcnRNYXJrdXBBdCwKKyAgZGFuZ2Vyb3VzbHlSZXBsYWNl
Tm9kZVdpdGhNYXJrdXA6IGRhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwCit9OworCitt
b2R1bGUuZXhwb3J0cyA9IERhbmdlcjsKKworfSx7Ii4vRXhlY3V0aW9uRW52aXJvbm1lbnQiOjE5
LCIuL3Rocm93SWYiOjg2fV0sMTA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewor
LyoqCisgKiBDb3B5cmlnaHQgMjAxMyBGYWNlYm9vaywgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVu
ZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICog
eW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBM
aWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgor
ICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5s
ZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBz
b2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQg
b24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05T
IE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNl
bnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAor
ICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogQHByb3ZpZGVzTW9kdWxl
IERlZmF1bHRET01Qcm9wZXJ0eUNvbmZpZworICovCisKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIERP
TVByb3BlcnR5ID0gcmVxdWlyZSgiLi9ET01Qcm9wZXJ0eSIpOworCit2YXIgTVVTVF9VU0VfQVRU
UklCVVRFID0gRE9NUHJvcGVydHkuaW5qZWN0aW9uLk1VU1RfVVNFX0FUVFJJQlVURTsKK3ZhciBN
VVNUX1VTRV9QUk9QRVJUWSA9IERPTVByb3BlcnR5LmluamVjdGlvbi5NVVNUX1VTRV9QUk9QRVJU
WTsKK3ZhciBIQVNfQk9PTEVBTl9WQUxVRSA9IERPTVByb3BlcnR5LmluamVjdGlvbi5IQVNfQk9P
TEVBTl9WQUxVRTsKK3ZhciBIQVNfU0lERV9FRkZFQ1RTID0gRE9NUHJvcGVydHkuaW5qZWN0aW9u
LkhBU19TSURFX0VGRkVDVFM7CisKK3ZhciBEZWZhdWx0RE9NUHJvcGVydHlDb25maWcgPSB7Cisg
IGlzQ3VzdG9tQXR0cmlidXRlOiBSZWdFeHAucHJvdG90eXBlLnRlc3QuYmluZCgKKyAgICAvXihk
YXRhfGFyaWEpLVthLXpfXVthLXpcZF8uXC1dKiQvCisgICksCisgIFByb3BlcnRpZXM6IHsKKyAg
ICAvKioKKyAgICAgKiBTdGFuZGFyZCBQcm9wZXJ0aWVzCisgICAgICovCisgICAgYWNjZXNzS2V5
OiBudWxsLAorICAgIGFjY2VwdDogbnVsbCwKKyAgICBhY3Rpb246IG51bGwsCisgICAgYWpheGlm
eTogTVVTVF9VU0VfQVRUUklCVVRFLAorICAgIGFsbG93RnVsbFNjcmVlbjogTVVTVF9VU0VfQVRU
UklCVVRFIHwgSEFTX0JPT0xFQU5fVkFMVUUsCisgICAgYWx0OiBudWxsLAorICAgIGF1dG9Db21w
bGV0ZTogbnVsbCwKKyAgICBhdXRvRm9jdXM6IEhBU19CT09MRUFOX1ZBTFVFLAorICAgIGF1dG9Q
bGF5OiBIQVNfQk9PTEVBTl9WQUxVRSwKKyAgICBjZWxsUGFkZGluZzogbnVsbCwKKyAgICBjZWxs
U3BhY2luZzogbnVsbCwKKyAgICBjaGVja2VkOiBNVVNUX1VTRV9QUk9QRVJUWSB8IEhBU19CT09M
RUFOX1ZBTFVFLAorICAgIGNsYXNzTmFtZTogTVVTVF9VU0VfUFJPUEVSVFksCisgICAgY29sU3Bh
bjogbnVsbCwKKyAgICBjb250ZW50RWRpdGFibGU6IG51bGwsCisgICAgY29udGV4dE1lbnU6IE1V
U1RfVVNFX0FUVFJJQlVURSwKKyAgICBjb250cm9sczogTVVTVF9VU0VfUFJPUEVSVFkgfCBIQVNf
Qk9PTEVBTl9WQUxVRSwKKyAgICBkYXRhOiBudWxsLCAvLyBGb3IgYDxvYmplY3QgLz5gIGFjdHMg
YXMgYHNyY2AuCisgICAgZGF0ZVRpbWU6IE1VU1RfVVNFX0FUVFJJQlVURSwKKyAgICBkaXI6IG51
bGwsCisgICAgZGlzYWJsZWQ6IE1VU1RfVVNFX1BST1BFUlRZIHwgSEFTX0JPT0xFQU5fVkFMVUUs
CisgICAgZHJhZ2dhYmxlOiBudWxsLAorICAgIGVuY1R5cGU6IG51bGwsCisgICAgaGVpZ2h0OiBN
VVNUX1VTRV9BVFRSSUJVVEUsCisgICAgaGlkZGVuOiBNVVNUX1VTRV9BVFRSSUJVVEUgfCBIQVNf
Qk9PTEVBTl9WQUxVRSwKKyAgICBocmVmOiBudWxsLAorICAgIGh0bWxGb3I6IG51bGwsCisgICAg
aWNvbjogbnVsbCwKKyAgICBpZDogTVVTVF9VU0VfUFJPUEVSVFksCisgICAgbGFiZWw6IG51bGws
CisgICAgbGFuZzogbnVsbCwKKyAgICBsaXN0OiBudWxsLAorICAgIG1heDogbnVsbCwKKyAgICBt
YXhMZW5ndGg6IE1VU1RfVVNFX0FUVFJJQlVURSwKKyAgICBtZXRob2Q6IG51bGwsCisgICAgbWlu
OiBudWxsLAorICAgIG11bHRpcGxlOiBNVVNUX1VTRV9QUk9QRVJUWSB8IEhBU19CT09MRUFOX1ZB
TFVFLAorICAgIG5hbWU6IG51bGwsCisgICAgcGF0dGVybjogbnVsbCwKKyAgICBwb3N0ZXI6IG51
bGwsCisgICAgcHJlbG9hZDogbnVsbCwKKyAgICBwbGFjZWhvbGRlcjogbnVsbCwKKyAgICByYWRp
b0dyb3VwOiBudWxsLAorICAgIHJlbDogbnVsbCwKKyAgICByZWFkT25seTogTVVTVF9VU0VfUFJP
UEVSVFkgfCBIQVNfQk9PTEVBTl9WQUxVRSwKKyAgICByZXF1aXJlZDogSEFTX0JPT0xFQU5fVkFM
VUUsCisgICAgcm9sZTogTVVTVF9VU0VfQVRUUklCVVRFLAorICAgIHNjcm9sbExlZnQ6IE1VU1Rf
VVNFX1BST1BFUlRZLAorICAgIHNjcm9sbFRvcDogTVVTVF9VU0VfUFJPUEVSVFksCisgICAgc2Vs
ZWN0ZWQ6IE1VU1RfVVNFX1BST1BFUlRZIHwgSEFTX0JPT0xFQU5fVkFMVUUsCisgICAgc2l6ZTog
bnVsbCwKKyAgICBzcGVsbENoZWNrOiBudWxsLAorICAgIHNyYzogbnVsbCwKKyAgICBzdGVwOiBu
dWxsLAorICAgIHN0eWxlOiBudWxsLAorICAgIHRhYkluZGV4OiBudWxsLAorICAgIHRhcmdldDog
bnVsbCwKKyAgICB0aXRsZTogbnVsbCwKKyAgICB0eXBlOiBudWxsLAorICAgIHZhbHVlOiBNVVNU
X1VTRV9QUk9QRVJUWSB8IEhBU19TSURFX0VGRkVDVFMsCisgICAgd2lkdGg6IE1VU1RfVVNFX0FU
VFJJQlVURSwKKyAgICB3bW9kZTogTVVTVF9VU0VfQVRUUklCVVRFLAorICAgIC8qKgorICAgICAq
IFNWRyBQcm9wZXJ0aWVzCisgICAgICovCisgICAgY3g6IE1VU1RfVVNFX1BST1BFUlRZLAorICAg
IGN5OiBNVVNUX1VTRV9QUk9QRVJUWSwKKyAgICBkOiBNVVNUX1VTRV9QUk9QRVJUWSwKKyAgICBm
aWxsOiBNVVNUX1VTRV9QUk9QRVJUWSwKKyAgICBmeDogTVVTVF9VU0VfUFJPUEVSVFksCisgICAg
Znk6IE1VU1RfVVNFX1BST1BFUlRZLAorICAgIHBvaW50czogTVVTVF9VU0VfUFJPUEVSVFksCisg
ICAgcjogTVVTVF9VU0VfUFJPUEVSVFksCisgICAgc3Ryb2tlOiBNVVNUX1VTRV9QUk9QRVJUWSwK
KyAgICBzdHJva2VMaW5lY2FwOiBNVVNUX1VTRV9QUk9QRVJUWSwKKyAgICBzdHJva2VXaWR0aDog
TVVTVF9VU0VfUFJPUEVSVFksCisgICAgdHJhbnNmb3JtOiBNVVNUX1VTRV9QUk9QRVJUWSwKKyAg
ICB4OiBNVVNUX1VTRV9QUk9QRVJUWSwKKyAgICB4MTogTVVTVF9VU0VfUFJPUEVSVFksCisgICAg
eDI6IE1VU1RfVVNFX1BST1BFUlRZLAorICAgIHZlcnNpb246IE1VU1RfVVNFX1BST1BFUlRZLAor
ICAgIHZpZXdCb3g6IE1VU1RfVVNFX1BST1BFUlRZLAorICAgIHk6IE1VU1RfVVNFX1BST1BFUlRZ
LAorICAgIHkxOiBNVVNUX1VTRV9QUk9QRVJUWSwKKyAgICB5MjogTVVTVF9VU0VfUFJPUEVSVFks
CisgICAgc3ByZWFkTWV0aG9kOiBNVVNUX1VTRV9QUk9QRVJUWSwKKyAgICBvZmZzZXQ6IE1VU1Rf
VVNFX1BST1BFUlRZLAorICAgIHN0b3BDb2xvcjogTVVTVF9VU0VfUFJPUEVSVFksCisgICAgc3Rv
cE9wYWNpdHk6IE1VU1RfVVNFX1BST1BFUlRZLAorICAgIGdyYWRpZW50VW5pdHM6IE1VU1RfVVNF
X1BST1BFUlRZLAorICAgIGdyYWRpZW50VHJhbnNmb3JtOiBNVVNUX1VTRV9QUk9QRVJUWQorICB9
LAorICBET01BdHRyaWJ1dGVOYW1lczogeworICAgIGNsYXNzTmFtZTogJ2NsYXNzJywKKyAgICBo
dG1sRm9yOiAnZm9yJywKKyAgICBzdHJva2VMaW5lY2FwOiAnc3Ryb2tlLWxpbmVjYXAnLAorICAg
IHN0cm9rZVdpZHRoOiAnc3Ryb2tlLXdpZHRoJywKKyAgICBzdG9wQ29sb3I6ICdzdG9wLWNvbG9y
JywKKyAgICBzdG9wT3BhY2l0eTogJ3N0b3Atb3BhY2l0eScKKyAgfSwKKyAgRE9NUHJvcGVydHlO
YW1lczogeworICAgIGF1dG9Db21wbGV0ZTogJ2F1dG9jb21wbGV0ZScsCisgICAgYXV0b0ZvY3Vz
OiAnYXV0b2ZvY3VzJywKKyAgICBhdXRvUGxheTogJ2F1dG9wbGF5JywKKyAgICBlbmNUeXBlOiAn
ZW5jdHlwZScsCisgICAgcmFkaW9Hcm91cDogJ3JhZGlvZ3JvdXAnLAorICAgIHNwZWxsQ2hlY2s6
ICdzcGVsbGNoZWNrJworICB9LAorICBET01NdXRhdGlvbk1ldGhvZHM6IHsKKyAgICAvKioKKyAg
ICAgKiBTZXR0aW5nIGBjbGFzc05hbWVgIHRvIG51bGwgbWF5IGNhdXNlIGl0IHRvIGJlIHNldCB0
byB0aGUgc3RyaW5nICJudWxsIi4KKyAgICAgKgorICAgICAqIEBwYXJhbSB7RE9NRWxlbWVudH0g
bm9kZQorICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUKKyAgICAgKi8KKyAgICBjbGFzc05hbWU6IGZ1
bmN0aW9uKG5vZGUsIHZhbHVlKSB7CisgICAgICBub2RlLmNsYXNzTmFtZSA9IHZhbHVlIHx8ICcn
OworICAgIH0KKyAgfQorfTsKKworbW9kdWxlLmV4cG9ydHMgPSBEZWZhdWx0RE9NUHJvcGVydHlD
b25maWc7CisKK30seyIuL0RPTVByb3BlcnR5Ijo3fV0sMTE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9k
dWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMyBGYWNlYm9vaywgSW5jLgorICoK
KyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAi
TGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxp
YW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBM
aWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0Ut
Mi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0
byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2Ug
aXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElF
UyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgor
ICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBl
cm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICog
QHByb3ZpZGVzTW9kdWxlIERlZmF1bHRFdmVudFBsdWdpbk9yZGVyCisgKi8KKworInVzZSBzdHJp
Y3QiOworCisgdmFyIGtleU9mID0gcmVxdWlyZSgiLi9rZXlPZiIpOworCisvKioKKyAqIE1vZHVs
ZSB0aGF0IGlzIGluamVjdGFibGUgaW50byBgRXZlbnRQbHVnaW5IdWJgLCB0aGF0IHNwZWNpZmll
cyBhCisgKiBkZXRlcm1pbmlzdGljIG9yZGVyaW5nIG9mIGBFdmVudFBsdWdpbmBzLiBBIGNvbnZl
bmllbnQgd2F5IHRvIHJlYXNvbiBhYm91dAorICogcGx1Z2lucywgd2l0aG91dCBoYXZpbmcgdG8g
cGFja2FnZSBldmVyeSBvbmUgb2YgdGhlbS4gVGhpcyBpcyBiZXR0ZXIgdGhhbgorICogaGF2aW5n
IHBsdWdpbnMgYmUgb3JkZXJlZCBpbiB0aGUgc2FtZSBvcmRlciB0aGF0IHRoZXkgYXJlIGluamVj
dGVkIGJlY2F1c2UKKyAqIHRoYXQgb3JkZXJpbmcgd291bGQgYmUgaW5mbHVlbmNlZCBieSB0aGUg
cGFja2FnaW5nIG9yZGVyLgorICogYFJlc3BvbmRlckV2ZW50UGx1Z2luYCBtdXN0IG9jY3VyIGJl
Zm9yZSBgU2ltcGxlRXZlbnRQbHVnaW5gIHNvIHRoYXQKKyAqIHByZXZlbnRpbmcgZGVmYXVsdCBv
biBldmVudHMgaXMgY29udmVuaWVudCBpbiBgU2ltcGxlRXZlbnRQbHVnaW5gIGhhbmRsZXJzLgor
ICovCit2YXIgRGVmYXVsdEV2ZW50UGx1Z2luT3JkZXIgPSBbCisgIGtleU9mKHtSZXNwb25kZXJF
dmVudFBsdWdpbjogbnVsbH0pLAorICBrZXlPZih7U2ltcGxlRXZlbnRQbHVnaW46IG51bGx9KSwK
KyAga2V5T2Yoe1RhcEV2ZW50UGx1Z2luOiBudWxsfSksCisgIGtleU9mKHtFbnRlckxlYXZlRXZl
bnRQbHVnaW46IG51bGx9KSwKKyAga2V5T2Yoe0NoYW5nZUV2ZW50UGx1Z2luOiBudWxsfSksCisg
IGtleU9mKHtBbmFseXRpY3NFdmVudFBsdWdpbjogbnVsbH0pCitdOworCittb2R1bGUuZXhwb3J0
cyA9IERlZmF1bHRFdmVudFBsdWdpbk9yZGVyOworCit9LHsiLi9rZXlPZiI6Nzl9XSwxMjpbZnVu
Y3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisoZnVuY3Rpb24oKXsvKioKKyAqIENvcHly
aWdodCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNo
ZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1
c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZ
b3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3
LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQg
YnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBk
aXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMi
IEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQs
IGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBz
cGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9u
cyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBAcHJvdmlkZXNNb2R1bGUgRW50ZXJMZWF2ZUV2
ZW50UGx1Z2luCisgKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seQorICovCisKKyJ1c2Ugc3RyaWN0
IjsKKwordmFyIEV2ZW50Q29uc3RhbnRzID0gcmVxdWlyZSgiLi9FdmVudENvbnN0YW50cyIpOwor
dmFyIEV2ZW50UHJvcGFnYXRvcnMgPSByZXF1aXJlKCIuL0V2ZW50UHJvcGFnYXRvcnMiKTsKK3Zh
ciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoIi4vRXhlY3V0aW9uRW52aXJvbm1lbnQi
KTsKK3ZhciBSZWFjdEluc3RhbmNlSGFuZGxlcyA9IHJlcXVpcmUoIi4vUmVhY3RJbnN0YW5jZUhh
bmRsZXMiKTsKK3ZhciBTeW50aGV0aWNNb3VzZUV2ZW50ID0gcmVxdWlyZSgiLi9TeW50aGV0aWNN
b3VzZUV2ZW50Iik7CisKK3ZhciBSZWFjdElEID0gcmVxdWlyZSgiLi9SZWFjdElEIik7Cit2YXIg
a2V5T2YgPSByZXF1aXJlKCIuL2tleU9mIik7CisKK3ZhciB0b3BMZXZlbFR5cGVzID0gRXZlbnRD
b25zdGFudHMudG9wTGV2ZWxUeXBlczsKK3ZhciBnZXRGaXJzdFJlYWN0RE9NID0gUmVhY3RJbnN0
YW5jZUhhbmRsZXMuZ2V0Rmlyc3RSZWFjdERPTTsKKwordmFyIGV2ZW50VHlwZXMgPSB7CisgIG1v
dXNlRW50ZXI6IHtyZWdpc3RyYXRpb25OYW1lOiBrZXlPZih7b25Nb3VzZUVudGVyOiBudWxsfSl9
LAorICBtb3VzZUxlYXZlOiB7cmVnaXN0cmF0aW9uTmFtZToga2V5T2Yoe29uTW91c2VMZWF2ZTog
bnVsbH0pfQorfTsKKwordmFyIEVudGVyTGVhdmVFdmVudFBsdWdpbiA9IHsKKworICBldmVudFR5
cGVzOiBldmVudFR5cGVzLAorCisgIC8qKgorICAgKiBGb3IgYWxtb3N0IGV2ZXJ5IGludGVyYWN0
aW9uIHdlIGNhcmUgYWJvdXQsIHRoZXJlIHdpbGwgYmUgYm90aCBhIHRvcC1sZXZlbAorICAgKiBg
bW91c2VvdmVyYCBhbmQgYG1vdXNlb3V0YCBldmVudCB0aGF0IG9jY3Vycy4gT25seSB1c2UgYG1v
dXNlb3V0YCBzbyB0aGF0CisgICAqIHdlIGRvIG5vdCBleHRyYWN0IGR1cGxpY2F0ZSBldmVudHMu
IEhvd2V2ZXIsIG1vdmluZyB0aGUgbW91c2UgaW50byB0aGUKKyAgICogYnJvd3NlciBmcm9tIG91
dHNpZGUgd2lsbCBub3QgZmlyZSBhIGBtb3VzZW91dGAgZXZlbnQuIEluIHRoaXMgY2FzZSwgd2Ug
dXNlCisgICAqIHRoZSBgbW91c2VvdmVyYCB0b3AtbGV2ZWwgZXZlbnQuCisgICAqCisgICAqIEBw
YXJhbSB7c3RyaW5nfSB0b3BMZXZlbFR5cGUgUmVjb3JkIGZyb20gYEV2ZW50Q29uc3RhbnRzYC4K
KyAgICogQHBhcmFtIHtET01FdmVudFRhcmdldH0gdG9wTGV2ZWxUYXJnZXQgVGhlIGxpc3Rlbmlu
ZyBjb21wb25lbnQgcm9vdCBub2RlLgorICAgKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUYXJn
ZXRJRCBJRCBvZiBgdG9wTGV2ZWxUYXJnZXRgLgorICAgKiBAcGFyYW0ge29iamVjdH0gbmF0aXZl
RXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuCisgICAqIEByZXR1cm4geyp9IEFuIGFjY3VtdWxh
dGlvbiBvZiBzeW50aGV0aWMgZXZlbnRzLgorICAgKiBAc2VlIHtFdmVudFBsdWdpbkh1Yi5leHRy
YWN0RXZlbnRzfQorICAgKi8KKyAgZXh0cmFjdEV2ZW50czogZnVuY3Rpb24oCisgICAgICB0b3BM
ZXZlbFR5cGUsCisgICAgICB0b3BMZXZlbFRhcmdldCwKKyAgICAgIHRvcExldmVsVGFyZ2V0SUQs
CisgICAgICBuYXRpdmVFdmVudCkgeworICAgIGlmICh0b3BMZXZlbFR5cGUgPT09IHRvcExldmVs
VHlwZXMudG9wTW91c2VPdmVyICYmCisgICAgICAgIChuYXRpdmVFdmVudC5yZWxhdGVkVGFyZ2V0
IHx8IG5hdGl2ZUV2ZW50LmZyb21FbGVtZW50KSkgeworICAgICAgcmV0dXJuIG51bGw7CisgICAg
fQorICAgIGlmICh0b3BMZXZlbFR5cGUgIT09IHRvcExldmVsVHlwZXMudG9wTW91c2VPdXQgJiYK
KyAgICAgICAgdG9wTGV2ZWxUeXBlICE9PSB0b3BMZXZlbFR5cGVzLnRvcE1vdXNlT3Zlcikgewor
ICAgICAgLy8gTXVzdCBub3QgYmUgYSBtb3VzZSBpbiBvciBtb3VzZSBvdXQgLSBpZ25vcmluZy4K
KyAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHZhciBmcm9tLCB0bzsKKyAgICBpZiAo
dG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcE1vdXNlT3V0KSB7CisgICAgICBmcm9t
ID0gdG9wTGV2ZWxUYXJnZXQ7CisgICAgICB0byA9CisgICAgICAgIGdldEZpcnN0UmVhY3RET00o
bmF0aXZlRXZlbnQucmVsYXRlZFRhcmdldCB8fCBuYXRpdmVFdmVudC50b0VsZW1lbnQpIHx8Cisg
ICAgICAgIEV4ZWN1dGlvbkVudmlyb25tZW50Lmdsb2JhbDsKKyAgICB9IGVsc2UgeworICAgICAg
ZnJvbSA9IEV4ZWN1dGlvbkVudmlyb25tZW50Lmdsb2JhbDsKKyAgICAgIHRvID0gdG9wTGV2ZWxU
YXJnZXQ7CisgICAgfQorCisgICAgaWYgKGZyb20gPT09IHRvKSB7CisgICAgICAvLyBOb3RoaW5n
IHBlcnRhaW5zIHRvIG91ciBtYW5hZ2VkIGNvbXBvbmVudHMuCisgICAgICByZXR1cm4gbnVsbDsK
KyAgICB9CisKKyAgICB2YXIgZnJvbUlEID0gZnJvbSA/IFJlYWN0SUQuZ2V0SUQoZnJvbSkgOiAn
JzsKKyAgICB2YXIgdG9JRCA9IHRvID8gUmVhY3RJRC5nZXRJRCh0bykgOiAnJzsKKworICAgIHZh
ciBsZWF2ZSA9IFN5bnRoZXRpY01vdXNlRXZlbnQuZ2V0UG9vbGVkKAorICAgICAgZXZlbnRUeXBl
cy5tb3VzZUxlYXZlLAorICAgICAgZnJvbUlELAorICAgICAgbmF0aXZlRXZlbnQKKyAgICApOwor
ICAgIHZhciBlbnRlciA9IFN5bnRoZXRpY01vdXNlRXZlbnQuZ2V0UG9vbGVkKAorICAgICAgZXZl
bnRUeXBlcy5tb3VzZUVudGVyLAorICAgICAgdG9JRCwKKyAgICAgIG5hdGl2ZUV2ZW50CisgICAg
KTsKKworICAgIEV2ZW50UHJvcGFnYXRvcnMuYWNjdW11bGF0ZUVudGVyTGVhdmVEaXNwYXRjaGVz
KGxlYXZlLCBlbnRlciwgZnJvbUlELCB0b0lEKTsKKyAgICByZXR1cm4gW2xlYXZlLCBlbnRlcl07
CisgIH0KKworfTsKKworbW9kdWxlLmV4cG9ydHMgPSBFbnRlckxlYXZlRXZlbnRQbHVnaW47CisK
K30pKCkKK30seyIuL0V2ZW50Q29uc3RhbnRzIjoxMywiLi9FdmVudFByb3BhZ2F0b3JzIjoxOCwi
Li9FeGVjdXRpb25FbnZpcm9ubWVudCI6MTksIi4vUmVhY3RJRCI6MzUsIi4vUmVhY3RJbnN0YW5j
ZUhhbmRsZXMiOjM3LCIuL1N5bnRoZXRpY01vdXNlRXZlbnQiOjUzLCIuL2tleU9mIjo3OX1dLDEz
OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIw
MTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vu
c2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlz
IGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkg
b2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hl
Lm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBs
aWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1
dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMs
CisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVy
IGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmlj
IGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVy
IHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBFdmVudENvbnN0YW50cworICov
CisKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIGtleU1pcnJvciA9IHJlcXVpcmUoIi4va2V5TWlycm9y
Iik7CisKK3ZhciBQcm9wYWdhdGlvblBoYXNlcyA9IGtleU1pcnJvcih7YnViYmxlZDogbnVsbCwg
Y2FwdHVyZWQ6IG51bGx9KTsKKworLyoqCisgKiBUeXBlcyBvZiByYXcgc2lnbmFscyBmcm9tIHRo
ZSBicm93c2VyIGNhdWdodCBhdCB0aGUgdG9wIGxldmVsLgorICovCit2YXIgdG9wTGV2ZWxUeXBl
cyA9IGtleU1pcnJvcih7CisgIHRvcEJsdXI6IG51bGwsCisgIHRvcENoYW5nZTogbnVsbCwKKyAg
dG9wQ2xpY2s6IG51bGwsCisgIHRvcERPTUNoYXJhY3RlckRhdGFNb2RpZmllZDogbnVsbCwKKyAg
dG9wRG91YmxlQ2xpY2s6IG51bGwsCisgIHRvcERyYWc6IG51bGwsCisgIHRvcERyYWdFbmQ6IG51
bGwsCisgIHRvcERyYWdFbnRlcjogbnVsbCwKKyAgdG9wRHJhZ0V4aXQ6IG51bGwsCisgIHRvcERy
YWdMZWF2ZTogbnVsbCwKKyAgdG9wRHJhZ092ZXI6IG51bGwsCisgIHRvcERyYWdTdGFydDogbnVs
bCwKKyAgdG9wRHJvcDogbnVsbCwKKyAgdG9wRm9jdXM6IG51bGwsCisgIHRvcElucHV0OiBudWxs
LAorICB0b3BLZXlEb3duOiBudWxsLAorICB0b3BLZXlQcmVzczogbnVsbCwKKyAgdG9wS2V5VXA6
IG51bGwsCisgIHRvcE1vdXNlRG93bjogbnVsbCwKKyAgdG9wTW91c2VNb3ZlOiBudWxsLAorICB0
b3BNb3VzZU91dDogbnVsbCwKKyAgdG9wTW91c2VPdmVyOiBudWxsLAorICB0b3BNb3VzZVVwOiBu
dWxsLAorICB0b3BTY3JvbGw6IG51bGwsCisgIHRvcFNlbGVjdGlvbkNoYW5nZTogbnVsbCwKKyAg
dG9wU3VibWl0OiBudWxsLAorICB0b3BUb3VjaENhbmNlbDogbnVsbCwKKyAgdG9wVG91Y2hFbmQ6
IG51bGwsCisgIHRvcFRvdWNoTW92ZTogbnVsbCwKKyAgdG9wVG91Y2hTdGFydDogbnVsbCwKKyAg
dG9wV2hlZWw6IG51bGwKK30pOworCit2YXIgRXZlbnRDb25zdGFudHMgPSB7CisgIHRvcExldmVs
VHlwZXM6IHRvcExldmVsVHlwZXMsCisgIFByb3BhZ2F0aW9uUGhhc2VzOiBQcm9wYWdhdGlvblBo
YXNlcworfTsKKworbW9kdWxlLmV4cG9ydHMgPSBFdmVudENvbnN0YW50czsKKworfSx7Ii4va2V5
TWlycm9yIjo3OH1dLDE0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgor
ICogQ29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0
aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBt
YXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5z
ZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0
dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyBy
ZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdh
cmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFu
ICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBB
TlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBm
b3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxp
bWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBFdmVu
dExpc3RlbmVyCisgKi8KKworLyoqCisgKiBVcHN0cmVhbSB2ZXJzaW9uIG9mIGV2ZW50IGxpc3Rl
bmVyLiBEb2VzIG5vdCB0YWtlIGludG8gYWNjb3VudCBzcGVjaWZpYworICogbmF0dXJlIG9mIHBs
YXRmb3JtLgorICovCit2YXIgRXZlbnRMaXN0ZW5lciA9IHsKKyAgLyoqCisgICAqIExpc3RlbnMg
dG8gYnViYmxlZCBldmVudHMgb24gYSBET00gbm9kZS4KKyAgICoKKyAgICogQHBhcmFtIHtFbGVt
ZW50fSBlbCBET00gZWxlbWVudCB0byByZWdpc3RlciBsaXN0ZW5lciBvbi4KKyAgICogQHBhcmFt
IHtzdHJpbmd9IGhhbmRsZXJCYXNlTmFtZSAnY2xpY2snLydtb3VzZW92ZXInCisgICAqIEBwYXJh
bSB7RnVuY3Rpb24hfSBjYiBDYWxsYmFjayBmdW5jdGlvbgorICAgKi8KKyAgbGlzdGVuOiBmdW5j
dGlvbihlbCwgaGFuZGxlckJhc2VOYW1lLCBjYikgeworICAgIGlmIChlbC5hZGRFdmVudExpc3Rl
bmVyKSB7CisgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKGhhbmRsZXJCYXNlTmFtZSwgY2IsIGZh
bHNlKTsKKyAgICB9IGVsc2UgaWYgKGVsLmF0dGFjaEV2ZW50KSB7CisgICAgICBlbC5hdHRhY2hF
dmVudCgnb24nICsgaGFuZGxlckJhc2VOYW1lLCBjYik7CisgICAgfQorICB9LAorCisgIC8qKgor
ICAgKiBMaXN0ZW5zIHRvIGNhcHR1cmVkIGV2ZW50cyBvbiBhIERPTSBub2RlLgorICAgKgorICAg
KiBAc2VlIGBFdmVudExpc3RlbmVyLmxpc3RlbmAgZm9yIHBhcmFtcy4KKyAgICogQHRocm93cyBF
eGNlcHRpb24gaWYgYWRkRXZlbnRMaXN0ZW5lciBpcyBub3Qgc3VwcG9ydGVkLgorICAgKi8KKyAg
Y2FwdHVyZTogZnVuY3Rpb24oZWwsIGhhbmRsZXJCYXNlTmFtZSwgY2IpIHsKKyAgICBpZiAoIWVs
LmFkZEV2ZW50TGlzdGVuZXIpIHsKKyAgICAgIGlmICh0cnVlKSB7CisgICAgICAgIGNvbnNvbGUu
ZXJyb3IoCisgICAgICAgICAgJ1lvdSBhcmUgYXR0ZW1wdGluZyB0byB1c2UgYWRkRXZlbnRsaXN0
ZW5lciAnICsKKyAgICAgICAgICAnaW4gYSBicm93c2VyIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCBp
dCBzdXBwb3J0IGl0LicgKworICAgICAgICAgICdUaGlzIGxpa2VseSBtZWFucyB0aGF0IHlvdSB3
aWxsIG5vdCByZWNlaXZlIGV2ZW50cyB0aGF0ICcgKworICAgICAgICAgICd5b3VyIGFwcGxpY2F0
aW9uIHJlbGllcyBvbiAoc3VjaCBhcyBzY3JvbGwpLicpOworICAgICAgfQorICAgICAgcmV0dXJu
OworICAgIH0gZWxzZSB7CisgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKGhhbmRsZXJCYXNlTmFt
ZSwgY2IsIHRydWUpOworICAgIH0KKyAgfQorfTsKKworbW9kdWxlLmV4cG9ydHMgPSBFdmVudExp
c3RlbmVyOworCit9LHt9XSwxNTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Cisv
KioKKyAqIENvcHlyaWdodCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5k
ZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5
b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExp
Y2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisg
KiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxl
c3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNv
ZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBv
biBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMg
T0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vu
c2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisg
KiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBAcHJvdmlkZXNNb2R1bGUg
RXZlbnRQbHVnaW5IdWIKKyAqLworCisidXNlIHN0cmljdCI7CisKK3ZhciBDYWxsYmFja1JlZ2lz
dHJ5ID0gcmVxdWlyZSgiLi9DYWxsYmFja1JlZ2lzdHJ5Iik7Cit2YXIgRXZlbnRQbHVnaW5SZWdp
c3RyeSA9IHJlcXVpcmUoIi4vRXZlbnRQbHVnaW5SZWdpc3RyeSIpOwordmFyIEV2ZW50UGx1Z2lu
VXRpbHMgPSByZXF1aXJlKCIuL0V2ZW50UGx1Z2luVXRpbHMiKTsKK3ZhciBFdmVudFByb3BhZ2F0
b3JzID0gcmVxdWlyZSgiLi9FdmVudFByb3BhZ2F0b3JzIik7Cit2YXIgRXhlY3V0aW9uRW52aXJv
bm1lbnQgPSByZXF1aXJlKCIuL0V4ZWN1dGlvbkVudmlyb25tZW50Iik7CisKK3ZhciBhY2N1bXVs
YXRlID0gcmVxdWlyZSgiLi9hY2N1bXVsYXRlIik7Cit2YXIgZm9yRWFjaEFjY3VtdWxhdGVkID0g
cmVxdWlyZSgiLi9mb3JFYWNoQWNjdW11bGF0ZWQiKTsKK3ZhciBpbnZhcmlhbnQgPSByZXF1aXJl
KCIuL2ludmFyaWFudCIpOworCisvKioKKyAqIEludGVybmFsIHF1ZXVlIG9mIGV2ZW50cyB0aGF0
IGhhdmUgYWNjdW11bGF0ZWQgdGhlaXIgZGlzcGF0Y2hlcyBhbmQgYXJlCisgKiB3YWl0aW5nIHRv
IGhhdmUgdGhlaXIgZGlzcGF0Y2hlcyBleGVjdXRlZC4KKyAqLwordmFyIGV2ZW50UXVldWUgPSBu
dWxsOworCisvKioKKyAqIERpc3BhdGNoZXMgYW4gZXZlbnQgYW5kIHJlbGVhc2VzIGl0IGJhY2sg
aW50byB0aGUgcG9vbCwgdW5sZXNzIHBlcnNpc3RlbnQuCisgKgorICogQHBhcmFtIHs/b2JqZWN0
fSBldmVudCBTeW50aGV0aWMgZXZlbnQgdG8gYmUgZGlzcGF0Y2hlZC4KKyAqIEBwcml2YXRlCisg
Ki8KK3ZhciBleGVjdXRlRGlzcGF0Y2hlc0FuZFJlbGVhc2UgPSBmdW5jdGlvbihldmVudCkgewor
ICBpZiAoZXZlbnQpIHsKKyAgICB2YXIgZXhlY3V0ZURpc3BhdGNoID0gRXZlbnRQbHVnaW5VdGls
cy5leGVjdXRlRGlzcGF0Y2g7CisgICAgLy8gUGx1Z2lucyBjYW4gcHJvdmlkZSBjdXN0b20gYmVo
YXZpb3Igd2hlbiBkaXNwYXRjaGluZyBldmVudHMuCisgICAgdmFyIFBsdWdpbk1vZHVsZSA9IEV2
ZW50UGx1Z2luUmVnaXN0cnkuZ2V0UGx1Z2luTW9kdWxlRm9yRXZlbnQoZXZlbnQpOworICAgIGlm
IChQbHVnaW5Nb2R1bGUgJiYgUGx1Z2luTW9kdWxlLmV4ZWN1dGVEaXNwYXRjaCkgeworICAgICAg
ZXhlY3V0ZURpc3BhdGNoID0gUGx1Z2luTW9kdWxlLmV4ZWN1dGVEaXNwYXRjaDsKKyAgICB9Cisg
ICAgRXZlbnRQbHVnaW5VdGlscy5leGVjdXRlRGlzcGF0Y2hlc0luT3JkZXIoZXZlbnQsIGV4ZWN1
dGVEaXNwYXRjaCk7CisKKyAgICBpZiAoIWV2ZW50LmlzUGVyc2lzdGVudCgpKSB7CisgICAgICBl
dmVudC5jb25zdHJ1Y3Rvci5yZWxlYXNlKGV2ZW50KTsKKyAgICB9CisgIH0KK307CisKKy8qKgor
ICogVGhpcyBpcyBhIHVuaWZpZWQgaW50ZXJmYWNlIGZvciBldmVudCBwbHVnaW5zIHRvIGJlIGlu
c3RhbGxlZCBhbmQgY29uZmlndXJlZC4KKyAqCisgKiBFdmVudCBwbHVnaW5zIGNhbiBpbXBsZW1l
bnQgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgorICoKKyAqICAgYGV4dHJhY3RFdmVudHNgIHtm
dW5jdGlvbihzdHJpbmcsIERPTUV2ZW50VGFyZ2V0LCBzdHJpbmcsIG9iamVjdCk6ICp9CisgKiAg
ICAgUmVxdWlyZWQuIFdoZW4gYSB0b3AtbGV2ZWwgZXZlbnQgaXMgZmlyZWQsIHRoaXMgbWV0aG9k
IGlzIGV4cGVjdGVkIHRvCisgKiAgICAgZXh0cmFjdCBzeW50aGV0aWMgZXZlbnRzIHRoYXQgd2ls
bCBpbiB0dXJuIGJlIHF1ZXVlZCBhbmQgZGlzcGF0Y2hlZC4KKyAqCisgKiAgIGBldmVudFR5cGVz
YCB7b2JqZWN0fQorICogICAgIE9wdGlvbmFsLCBwbHVnaW5zIHRoYXQgZmlyZSBldmVudHMgbXVz
dCBwdWJsaXNoIGEgbWFwcGluZyBvZiByZWdpc3RyYXRpb24KKyAqICAgICBuYW1lcyB0aGF0IGFy
ZSB1c2VkIHRvIHJlZ2lzdGVyIGxpc3RlbmVycy4gVmFsdWVzIG9mIHRoaXMgbWFwcGluZyBtdXN0
CisgKiAgICAgYmUgb2JqZWN0cyB0aGF0IGNvbnRhaW4gYHJlZ2lzdHJhdGlvbk5hbWVgIG9yIGBw
aGFzZWRSZWdpc3RyYXRpb25OYW1lc2AuCisgKgorICogICBgZXhlY3V0ZURpc3BhdGNoYCB7ZnVu
Y3Rpb24ob2JqZWN0LCBmdW5jdGlvbiwgc3RyaW5nKX0KKyAqICAgICBPcHRpb25hbCwgYWxsb3dz
IHBsdWdpbnMgdG8gb3ZlcnJpZGUgaG93IGFuIGV2ZW50IGdldHMgZGlzcGF0Y2hlZC4gQnkKKyAq
ICAgICBkZWZhdWx0LCB0aGUgbGlzdGVuZXIgaXMgc2ltcGx5IGludm9rZWQuCisgKgorICogRWFj
aCBwbHVnaW4gdGhhdCBpcyBpbmplY3RlZCBpbnRvIGBFdmVudHNQbHVnaW5IdWJgIGlzIGltbWVk
aWF0ZWx5IG9wZXJhYmxlLgorICoKKyAqIEBwdWJsaWMKKyAqLwordmFyIEV2ZW50UGx1Z2luSHVi
ID0geworCisgIC8qKgorICAgKiBNZXRob2RzIGZvciBpbmplY3RpbmcgZGVwZW5kZW5jaWVzLgor
ICAgKi8KKyAgaW5qZWN0aW9uOiB7CisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge29iamVjdH0g
SW5qZWN0ZWRJbnN0YW5jZUhhbmRsZQorICAgICAqIEBwdWJsaWMKKyAgICAgKi8KKyAgICBpbmpl
Y3RJbnN0YW5jZUhhbmRsZTogRXZlbnRQcm9wYWdhdG9ycy5pbmplY3Rpb24uaW5qZWN0SW5zdGFu
Y2VIYW5kbGUsCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge2FycmF5fSBJbmplY3RlZEV2ZW50
UGx1Z2luT3JkZXIKKyAgICAgKiBAcHVibGljCisgICAgICovCisgICAgaW5qZWN0RXZlbnRQbHVn
aW5PcmRlcjogRXZlbnRQbHVnaW5SZWdpc3RyeS5pbmplY3RFdmVudFBsdWdpbk9yZGVyLAorCisg
ICAgLyoqCisgICAgICogQHBhcmFtIHtvYmplY3R9IGluamVjdGVkTmFtZXNUb1BsdWdpbnMgTWFw
IGZyb20gbmFtZXMgdG8gcGx1Z2luIG1vZHVsZXMuCisgICAgICovCisgICAgaW5qZWN0RXZlbnRQ
bHVnaW5zQnlOYW1lOiBFdmVudFBsdWdpblJlZ2lzdHJ5LmluamVjdEV2ZW50UGx1Z2luc0J5TmFt
ZQorCisgIH0sCisKKyAgcmVnaXN0cmF0aW9uTmFtZXM6IEV2ZW50UGx1Z2luUmVnaXN0cnkucmVn
aXN0cmF0aW9uTmFtZXMsCisKKyAgcHV0TGlzdGVuZXI6IENhbGxiYWNrUmVnaXN0cnkucHV0TGlz
dGVuZXIsCisKKyAgZ2V0TGlzdGVuZXI6IENhbGxiYWNrUmVnaXN0cnkuZ2V0TGlzdGVuZXIsCisK
KyAgZGVsZXRlTGlzdGVuZXI6IENhbGxiYWNrUmVnaXN0cnkuZGVsZXRlTGlzdGVuZXIsCisKKyAg
ZGVsZXRlQWxsTGlzdGVuZXJzOiBDYWxsYmFja1JlZ2lzdHJ5LmRlbGV0ZUFsbExpc3RlbmVycywK
KworICAvKioKKyAgICogQWxsb3dzIHJlZ2lzdGVyZWQgcGx1Z2lucyBhbiBvcHBvcnR1bml0eSB0
byBleHRyYWN0IGV2ZW50cyBmcm9tIHRvcC1sZXZlbAorICAgKiBuYXRpdmUgYnJvd3NlciBldmVu
dHMuCisgICAqCisgICAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFR5cGUgUmVjb3JkIGZyb20g
YEV2ZW50Q29uc3RhbnRzYC4KKyAgICogQHBhcmFtIHtET01FdmVudFRhcmdldH0gdG9wTGV2ZWxU
YXJnZXQgVGhlIGxpc3RlbmluZyBjb21wb25lbnQgcm9vdCBub2RlLgorICAgKiBAcGFyYW0ge3N0
cmluZ30gdG9wTGV2ZWxUYXJnZXRJRCBJRCBvZiBgdG9wTGV2ZWxUYXJnZXRgLgorICAgKiBAcGFy
YW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuCisgICAqIEByZXR1
cm4geyp9IEFuIGFjY3VtdWxhdGlvbiBvZiBzeW50aGV0aWMgZXZlbnRzLgorICAgKiBAaW50ZXJu
YWwKKyAgICovCisgIGV4dHJhY3RFdmVudHM6IGZ1bmN0aW9uKAorICAgICAgdG9wTGV2ZWxUeXBl
LAorICAgICAgdG9wTGV2ZWxUYXJnZXQsCisgICAgICB0b3BMZXZlbFRhcmdldElELAorICAgICAg
bmF0aXZlRXZlbnQpIHsKKyAgICB2YXIgZXZlbnRzOworICAgIHZhciBwbHVnaW5zID0gRXZlbnRQ
bHVnaW5SZWdpc3RyeS5wbHVnaW5zOworICAgIGZvciAodmFyIGkgPSAwLCBsID0gcGx1Z2lucy5s
ZW5ndGg7IGkgPCBsOyBpKyspIHsKKyAgICAgIC8vIE5vdCBldmVyeSBwbHVnaW4gaW4gdGhlIG9y
ZGVyaW5nIG1heSBiZSBsb2FkZWQgYXQgcnVudGltZS4KKyAgICAgIHZhciBwb3NzaWJsZVBsdWdp
biA9IHBsdWdpbnNbaV07CisgICAgICBpZiAocG9zc2libGVQbHVnaW4pIHsKKyAgICAgICAgdmFy
IGV4dHJhY3RlZEV2ZW50cyA9IHBvc3NpYmxlUGx1Z2luLmV4dHJhY3RFdmVudHMoCisgICAgICAg
ICAgdG9wTGV2ZWxUeXBlLAorICAgICAgICAgIHRvcExldmVsVGFyZ2V0LAorICAgICAgICAgIHRv
cExldmVsVGFyZ2V0SUQsCisgICAgICAgICAgbmF0aXZlRXZlbnQKKyAgICAgICAgKTsKKyAgICAg
ICAgaWYgKGV4dHJhY3RlZEV2ZW50cykgeworICAgICAgICAgIGV2ZW50cyA9IGFjY3VtdWxhdGUo
ZXZlbnRzLCBleHRyYWN0ZWRFdmVudHMpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAg
IHJldHVybiBldmVudHM7CisgIH0sCisKKyAgLyoqCisgICAqIEVucXVldWVzIGEgc3ludGhldGlj
IGV2ZW50IHRoYXQgc2hvdWxkIGJlIGRpc3BhdGNoZWQgd2hlbgorICAgKiBgcHJvY2Vzc0V2ZW50
UXVldWVgIGlzIGludm9rZWQuCisgICAqCisgICAqIEBwYXJhbSB7Kn0gZXZlbnRzIEFuIGFjY3Vt
dWxhdGlvbiBvZiBzeW50aGV0aWMgZXZlbnRzLgorICAgKiBAaW50ZXJuYWwKKyAgICovCisgIGVu
cXVldWVFdmVudHM6IGZ1bmN0aW9uKGV2ZW50cykgeworICAgIGlmIChldmVudHMpIHsKKyAgICAg
IGV2ZW50UXVldWUgPSBhY2N1bXVsYXRlKGV2ZW50UXVldWUsIGV2ZW50cyk7CisgICAgfQorICB9
LAorCisgIC8qKgorICAgKiBEaXNwYXRjaGVzIGFsbCBzeW50aGV0aWMgZXZlbnRzIG9uIHRoZSBl
dmVudCBxdWV1ZS4KKyAgICoKKyAgICogQGludGVybmFsCisgICAqLworICBwcm9jZXNzRXZlbnRR
dWV1ZTogZnVuY3Rpb24oKSB7CisgICAgLy8gU2V0IGBldmVudFF1ZXVlYCB0byBudWxsIGJlZm9y
ZSBwcm9jZXNzaW5nIGl0IHNvIHRoYXQgd2UgY2FuIHRlbGwgaWYgbW9yZQorICAgIC8vIGV2ZW50
cyBnZXQgZW5xdWV1ZWQgd2hpbGUgcHJvY2Vzc2luZy4KKyAgICB2YXIgcHJvY2Vzc2luZ0V2ZW50
UXVldWUgPSBldmVudFF1ZXVlOworICAgIGV2ZW50UXVldWUgPSBudWxsOworICAgIGZvckVhY2hB
Y2N1bXVsYXRlZChwcm9jZXNzaW5nRXZlbnRRdWV1ZSwgZXhlY3V0ZURpc3BhdGNoZXNBbmRSZWxl
YXNlKTsKKyAgICBpbnZhcmlhbnQoCisgICAgICAhZXZlbnRRdWV1ZSwKKyAgICAgICdwcm9jZXNz
RXZlbnRRdWV1ZSgpOiBBZGRpdGlvbmFsIGV2ZW50cyB3ZXJlIGVucXVldWVkIHdoaWxlIHByb2Nl
c3NpbmcgJyArCisgICAgICAnYW4gZXZlbnQgcXVldWUuIFN1cHBvcnQgZm9yIHRoaXMgaGFzIG5v
dCB5ZXQgYmVlbiBpbXBsZW1lbnRlZC4nCisgICAgKTsKKyAgfQorCit9OworCitpZiAoRXhlY3V0
aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NKSB7CisgIHdpbmRvdy5FdmVudFBsdWdpbkh1YiA9IEV2
ZW50UGx1Z2luSHViOworfQorCittb2R1bGUuZXhwb3J0cyA9IEV2ZW50UGx1Z2luSHViOworCit9
LHsiLi9DYWxsYmFja1JlZ2lzdHJ5Ijo0LCIuL0V2ZW50UGx1Z2luUmVnaXN0cnkiOjE2LCIuL0V2
ZW50UGx1Z2luVXRpbHMiOjE3LCIuL0V2ZW50UHJvcGFnYXRvcnMiOjE4LCIuL0V4ZWN1dGlvbkVu
dmlyb25tZW50IjoxOSwiLi9hY2N1bXVsYXRlIjo2MCwiLi9mb3JFYWNoQWNjdW11bGF0ZWQiOjY4
LCIuL2ludmFyaWFudCI6NzV9XSwxNjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7
CisvKioKKyAqIENvcHlyaWdodCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgorICogTGljZW5zZWQg
dW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Cisg
KiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhl
IExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAq
CisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBV
bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcs
IHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRl
ZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElP
TlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExp
Y2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5k
CisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBAcHJvdmlkZXNNb2R1
bGUgRXZlbnRQbHVnaW5SZWdpc3RyeQorICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHkKKyAqLwor
CisidXNlIHN0cmljdCI7CisKK3ZhciBpbnZhcmlhbnQgPSByZXF1aXJlKCIuL2ludmFyaWFudCIp
OworCisvKioKKyAqIEluamVjdGFibGUgb3JkZXJpbmcgb2YgZXZlbnQgcGx1Z2lucy4KKyAqLwor
dmFyIEV2ZW50UGx1Z2luT3JkZXIgPSBudWxsOworCisvKioKKyAqIEluamVjdGFibGUgbWFwcGlu
ZyBmcm9tIG5hbWVzIHRvIGV2ZW50IHBsdWdpbiBtb2R1bGVzLgorICovCit2YXIgbmFtZXNUb1Bs
dWdpbnMgPSB7fTsKKworLyoqCisgKiBSZWNvbXB1dGVzIHRoZSBwbHVnaW4gbGlzdCB1c2luZyB0
aGUgaW5qZWN0ZWQgcGx1Z2lucyBhbmQgcGx1Z2luIG9yZGVyaW5nLgorICoKKyAqIEBwcml2YXRl
CisgKi8KK2Z1bmN0aW9uIHJlY29tcHV0ZVBsdWdpbk9yZGVyaW5nKCkgeworICBpZiAoIUV2ZW50
UGx1Z2luT3JkZXIpIHsKKyAgICAvLyBXYWl0IHVudGlsIGFuIGBFdmVudFBsdWdpbk9yZGVyYCBp
cyBpbmplY3RlZC4KKyAgICByZXR1cm47CisgIH0KKyAgZm9yICh2YXIgcGx1Z2luTmFtZSBpbiBu
YW1lc1RvUGx1Z2lucykgeworICAgIHZhciBQbHVnaW5Nb2R1bGUgPSBuYW1lc1RvUGx1Z2luc1tw
bHVnaW5OYW1lXTsKKyAgICB2YXIgcGx1Z2luSW5kZXggPSBFdmVudFBsdWdpbk9yZGVyLmluZGV4
T2YocGx1Z2luTmFtZSk7CisgICAgaW52YXJpYW50KAorICAgICAgcGx1Z2luSW5kZXggPiAtMSwK
KyAgICAgICdFdmVudFBsdWdpblJlZ2lzdHJ5OiBDYW5ub3QgaW5qZWN0IGV2ZW50IHBsdWdpbnMg
dGhhdCBkbyBub3QgZXhpc3QgaW4gJyArCisgICAgICAndGhlIHBsdWdpbiBvcmRlcmluZywgYCVz
YC4nLAorICAgICAgcGx1Z2luTmFtZQorICAgICk7CisgICAgaWYgKEV2ZW50UGx1Z2luUmVnaXN0
cnkucGx1Z2luc1twbHVnaW5JbmRleF0pIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICBp
bnZhcmlhbnQoCisgICAgICBQbHVnaW5Nb2R1bGUuZXh0cmFjdEV2ZW50cywKKyAgICAgICdFdmVu
dFBsdWdpblJlZ2lzdHJ5OiBFdmVudCBwbHVnaW5zIG11c3QgaW1wbGVtZW50IGFuIGBleHRyYWN0
RXZlbnRzYCAnICsKKyAgICAgICdtZXRob2QsIGJ1dCBgJXNgIGRvZXMgbm90LicsCisgICAgICBw
bHVnaW5OYW1lCisgICAgKTsKKyAgICBFdmVudFBsdWdpblJlZ2lzdHJ5LnBsdWdpbnNbcGx1Z2lu
SW5kZXhdID0gUGx1Z2luTW9kdWxlOworICAgIHZhciBwdWJsaXNoZWRFdmVudHMgPSBQbHVnaW5N
b2R1bGUuZXZlbnRUeXBlczsKKyAgICBmb3IgKHZhciBldmVudE5hbWUgaW4gcHVibGlzaGVkRXZl
bnRzKSB7CisgICAgICBpbnZhcmlhbnQoCisgICAgICAgIHB1Ymxpc2hFdmVudEZvclBsdWdpbihw
dWJsaXNoZWRFdmVudHNbZXZlbnROYW1lXSwgUGx1Z2luTW9kdWxlKSwKKyAgICAgICAgJ0V2ZW50
UGx1Z2luUmVnaXN0cnk6IEZhaWxlZCB0byBwdWJsaXNoIGV2ZW50IGAlc2AgZm9yIHBsdWdpbiBg
JXNgLicsCisgICAgICAgIGV2ZW50TmFtZSwKKyAgICAgICAgcGx1Z2luTmFtZQorICAgICAgKTsK
KyAgICB9CisgIH0KK30KKworLyoqCisgKiBQdWJsaXNoZXMgYW4gZXZlbnQgc28gdGhhdCBpdCBj
YW4gYmUgZGlzcGF0Y2hlZCBieSB0aGUgc3VwcGxpZWQgcGx1Z2luLgorICoKKyAqIEBwYXJhbSB7
b2JqZWN0fSBkaXNwYXRjaENvbmZpZyBEaXNwYXRjaCBjb25maWd1cmF0aW9uIGZvciB0aGUgZXZl
bnQuCisgKiBAcGFyYW0ge29iamVjdH0gUGx1Z2luTW9kdWxlIFBsdWdpbiBwdWJsaXNoaW5nIHRo
ZSBldmVudC4KKyAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGV2ZW50IHdhcyBzdWNj
ZXNzZnVsbHkgcHVibGlzaGVkLgorICogQHByaXZhdGUKKyAqLworZnVuY3Rpb24gcHVibGlzaEV2
ZW50Rm9yUGx1Z2luKGRpc3BhdGNoQ29uZmlnLCBQbHVnaW5Nb2R1bGUpIHsKKyAgdmFyIHBoYXNl
ZFJlZ2lzdHJhdGlvbk5hbWVzID0gZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFt
ZXM7CisgIGlmIChwaGFzZWRSZWdpc3RyYXRpb25OYW1lcykgeworICAgIGZvciAodmFyIHBoYXNl
TmFtZSBpbiBwaGFzZWRSZWdpc3RyYXRpb25OYW1lcykgeworICAgICAgaWYgKHBoYXNlZFJlZ2lz
dHJhdGlvbk5hbWVzLmhhc093blByb3BlcnR5KHBoYXNlTmFtZSkpIHsKKyAgICAgICAgdmFyIHBo
YXNlZFJlZ2lzdHJhdGlvbk5hbWUgPSBwaGFzZWRSZWdpc3RyYXRpb25OYW1lc1twaGFzZU5hbWVd
OworICAgICAgICBwdWJsaXNoUmVnaXN0cmF0aW9uTmFtZShwaGFzZWRSZWdpc3RyYXRpb25OYW1l
LCBQbHVnaW5Nb2R1bGUpOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKKyAgfSBl
bHNlIGlmIChkaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lKSB7CisgICAgcHVibGlzaFJl
Z2lzdHJhdGlvbk5hbWUoZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZSwgUGx1Z2luTW9k
dWxlKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorICByZXR1cm4gZmFsc2U7Cit9CisKKy8qKgor
ICogUHVibGlzaGVzIGEgcmVnaXN0cmF0aW9uIG5hbWUgdGhhdCBpcyB1c2VkIHRvIGlkZW50aWZ5
IGRpc3BhdGNoZWQgZXZlbnRzIGFuZAorICogY2FuIGJlIHVzZWQgd2l0aCBgRXZlbnRQbHVnaW5I
dWIucHV0TGlzdGVuZXJgIHRvIHJlZ2lzdGVyIGxpc3RlbmVycy4KKyAqCisgKiBAcGFyYW0ge3N0
cmluZ30gcmVnaXN0cmF0aW9uTmFtZSBSZWdpc3RyYXRpb24gbmFtZSB0byBhZGQuCisgKiBAcGFy
YW0ge29iamVjdH0gUGx1Z2luTW9kdWxlIFBsdWdpbiBwdWJsaXNoaW5nIHRoZSBldmVudC4KKyAq
IEBwcml2YXRlCisgKi8KK2Z1bmN0aW9uIHB1Ymxpc2hSZWdpc3RyYXRpb25OYW1lKHJlZ2lzdHJh
dGlvbk5hbWUsIFBsdWdpbk1vZHVsZSkgeworICBpbnZhcmlhbnQoCisgICAgIUV2ZW50UGx1Z2lu
UmVnaXN0cnkucmVnaXN0cmF0aW9uTmFtZXNbcmVnaXN0cmF0aW9uTmFtZV0sCisgICAgJ0V2ZW50
UGx1Z2luSHViOiBNb3JlIHRoYW4gb25lIHBsdWdpbiBhdHRlbXB0ZWQgdG8gcHVibGlzaCB0aGUg
c2FtZSAnICsKKyAgICAncmVnaXN0cmF0aW9uIG5hbWUsIGAlc2AuJywKKyAgICByZWdpc3RyYXRp
b25OYW1lCisgICk7CisgIEV2ZW50UGx1Z2luUmVnaXN0cnkucmVnaXN0cmF0aW9uTmFtZXNbcmVn
aXN0cmF0aW9uTmFtZV0gPSBQbHVnaW5Nb2R1bGU7CisgIEV2ZW50UGx1Z2luUmVnaXN0cnkucmVn
aXN0cmF0aW9uTmFtZXNLZXlzLnB1c2gocmVnaXN0cmF0aW9uTmFtZSk7Cit9CisKKy8qKgorICog
UmVnaXN0ZXJzIHBsdWdpbnMgc28gdGhhdCB0aGV5IGNhbiBleHRyYWN0IGFuZCBkaXNwYXRjaCBl
dmVudHMuCisgKgorICogQHNlZSB7RXZlbnRQbHVnaW5IdWJ9CisgKi8KK3ZhciBFdmVudFBsdWdp
blJlZ2lzdHJ5ID0geworCisgIC8qKgorICAgKiBPcmRlcmVkIGxpc3Qgb2YgaW5qZWN0ZWQgcGx1
Z2lucy4KKyAgICovCisgIHBsdWdpbnM6IFtdLAorCisgIC8qKgorICAgKiBNYXBwaW5nIGZyb20g
cmVnaXN0cmF0aW9uIG5hbWVzIHRvIHBsdWdpbiBtb2R1bGVzLgorICAgKi8KKyAgcmVnaXN0cmF0
aW9uTmFtZXM6IHt9LAorCisgIC8qKgorICAgKiBUaGUga2V5cyBvZiBgcmVnaXN0cmF0aW9uTmFt
ZXNgLgorICAgKi8KKyAgcmVnaXN0cmF0aW9uTmFtZXNLZXlzOiBbXSwKKworICAvKioKKyAgICog
SW5qZWN0cyBhbiBvcmRlcmluZyBvZiBwbHVnaW5zIChieSBwbHVnaW4gbmFtZSkuIFRoaXMgYWxs
b3dzIHRoZSBvcmRlcmluZworICAgKiB0byBiZSBkZWNvdXBsZWQgZnJvbSBpbmplY3Rpb24gb2Yg
dGhlIGFjdHVhbCBwbHVnaW5zIHNvIHRoYXQgb3JkZXJpbmcgaXMKKyAgICogYWx3YXlzIGRldGVy
bWluaXN0aWMgcmVnYXJkbGVzcyBvZiBwYWNrYWdpbmcsIG9uLXRoZS1mbHkgaW5qZWN0aW9uLCBl
dGMuCisgICAqCisgICAqIEBwYXJhbSB7YXJyYXl9IEluamVjdGVkRXZlbnRQbHVnaW5PcmRlcgor
ICAgKiBAaW50ZXJuYWwKKyAgICogQHNlZSB7RXZlbnRQbHVnaW5IdWIuaW5qZWN0aW9uLmluamVj
dEV2ZW50UGx1Z2luT3JkZXJ9CisgICAqLworICBpbmplY3RFdmVudFBsdWdpbk9yZGVyOiBmdW5j
dGlvbihJbmplY3RlZEV2ZW50UGx1Z2luT3JkZXIpIHsKKyAgICBpbnZhcmlhbnQoCisgICAgICAh
RXZlbnRQbHVnaW5PcmRlciwKKyAgICAgICdFdmVudFBsdWdpblJlZ2lzdHJ5OiBDYW5ub3QgaW5q
ZWN0IGV2ZW50IHBsdWdpbiBvcmRlcmluZyBtb3JlIHRoYW4gb25jZS4nCisgICAgKTsKKyAgICAv
LyBDbG9uZSB0aGUgb3JkZXJpbmcgc28gaXQgY2Fubm90IGJlIGR5bmFtaWNhbGx5IG11dGF0ZWQu
CisgICAgRXZlbnRQbHVnaW5PcmRlciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKEluamVj
dGVkRXZlbnRQbHVnaW5PcmRlcik7CisgICAgcmVjb21wdXRlUGx1Z2luT3JkZXJpbmcoKTsKKyAg
fSwKKworICAvKioKKyAgICogSW5qZWN0cyBwbHVnaW5zIHRvIGJlIHVzZWQgYnkgYEV2ZW50UGx1
Z2luSHViYC4gVGhlIHBsdWdpbiBuYW1lcyBtdXN0IGJlCisgICAqIGluIHRoZSBvcmRlcmluZyBp
bmplY3RlZCBieSBgaW5qZWN0RXZlbnRQbHVnaW5PcmRlcmAuCisgICAqCisgICAqIFBsdWdpbnMg
Y2FuIGJlIGluamVjdGVkIGFzIHBhcnQgb2YgcGFnZSBpbml0aWFsaXphdGlvbiBvciBvbi10aGUt
Zmx5LgorICAgKgorICAgKiBAcGFyYW0ge29iamVjdH0gaW5qZWN0ZWROYW1lc1RvUGx1Z2lucyBN
YXAgZnJvbSBuYW1lcyB0byBwbHVnaW4gbW9kdWxlcy4KKyAgICogQGludGVybmFsCisgICAqIEBz
ZWUge0V2ZW50UGx1Z2luSHViLmluamVjdGlvbi5pbmplY3RFdmVudFBsdWdpbnNCeU5hbWV9Cisg
ICAqLworICBpbmplY3RFdmVudFBsdWdpbnNCeU5hbWU6IGZ1bmN0aW9uKGluamVjdGVkTmFtZXNU
b1BsdWdpbnMpIHsKKyAgICB2YXIgaXNPcmRlcmluZ0RpcnR5ID0gZmFsc2U7CisgICAgZm9yICh2
YXIgcGx1Z2luTmFtZSBpbiBpbmplY3RlZE5hbWVzVG9QbHVnaW5zKSB7CisgICAgICBpZiAoIWlu
amVjdGVkTmFtZXNUb1BsdWdpbnMuaGFzT3duUHJvcGVydHkocGx1Z2luTmFtZSkpIHsKKyAgICAg
ICAgY29udGludWU7CisgICAgICB9CisgICAgICB2YXIgUGx1Z2luTW9kdWxlID0gaW5qZWN0ZWRO
YW1lc1RvUGx1Z2luc1twbHVnaW5OYW1lXTsKKyAgICAgIGlmIChuYW1lc1RvUGx1Z2luc1twbHVn
aW5OYW1lXSAhPT0gUGx1Z2luTW9kdWxlKSB7CisgICAgICAgIGludmFyaWFudCgKKyAgICAgICAg
ICAhbmFtZXNUb1BsdWdpbnNbcGx1Z2luTmFtZV0sCisgICAgICAgICAgJ0V2ZW50UGx1Z2luUmVn
aXN0cnk6IENhbm5vdCBpbmplY3QgdHdvIGRpZmZlcmVudCBldmVudCBwbHVnaW5zICcgKworICAg
ICAgICAgICd1c2luZyB0aGUgc2FtZSBuYW1lLCBgJXNgLicsCisgICAgICAgICAgcGx1Z2luTmFt
ZQorICAgICAgICApOworICAgICAgICBuYW1lc1RvUGx1Z2luc1twbHVnaW5OYW1lXSA9IFBsdWdp
bk1vZHVsZTsKKyAgICAgICAgaXNPcmRlcmluZ0RpcnR5ID0gdHJ1ZTsKKyAgICAgIH0KKyAgICB9
CisgICAgaWYgKGlzT3JkZXJpbmdEaXJ0eSkgeworICAgICAgcmVjb21wdXRlUGx1Z2luT3JkZXJp
bmcoKTsKKyAgICB9CisgIH0sCisKKyAgLyoqCisgICAqIExvb2tzIHVwIHRoZSBwbHVnaW4gZm9y
IHRoZSBzdXBwbGllZCBldmVudC4KKyAgICoKKyAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEEg
c3ludGhldGljIGV2ZW50LgorICAgKiBAcmV0dXJuIHs/b2JqZWN0fSBUaGUgcGx1Z2luIHRoYXQg
Y3JlYXRlZCB0aGUgc3VwcGxpZWQgZXZlbnQuCisgICAqIEBpbnRlcm5hbAorICAgKi8KKyAgZ2V0
UGx1Z2luTW9kdWxlRm9yRXZlbnQ6IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgdmFyIGRpc3BhdGNo
Q29uZmlnID0gZXZlbnQuZGlzcGF0Y2hDb25maWc7CisgICAgaWYgKGRpc3BhdGNoQ29uZmlnLnJl
Z2lzdHJhdGlvbk5hbWUpIHsKKyAgICAgIHJldHVybiBFdmVudFBsdWdpblJlZ2lzdHJ5LnJlZ2lz
dHJhdGlvbk5hbWVzWworICAgICAgICBkaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lCisg
ICAgICBdIHx8IG51bGw7CisgICAgfQorICAgIGZvciAodmFyIHBoYXNlIGluIGRpc3BhdGNoQ29u
ZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzKSB7CisgICAgICBpZiAoIWRpc3BhdGNoQ29uZmln
LnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzLmhhc093blByb3BlcnR5KHBoYXNlKSkgeworICAgICAg
ICBjb250aW51ZTsKKyAgICAgIH0KKyAgICAgIHZhciBQbHVnaW5Nb2R1bGUgPSBFdmVudFBsdWdp
blJlZ2lzdHJ5LnJlZ2lzdHJhdGlvbk5hbWVzWworICAgICAgICBkaXNwYXRjaENvbmZpZy5waGFz
ZWRSZWdpc3RyYXRpb25OYW1lc1twaGFzZV0KKyAgICAgIF07CisgICAgICBpZiAoUGx1Z2luTW9k
dWxlKSB7CisgICAgICAgIHJldHVybiBQbHVnaW5Nb2R1bGU7CisgICAgICB9CisgICAgfQorICAg
IHJldHVybiBudWxsOworICB9LAorCisgIC8qKgorICAgKiBFeHBvc2VkIGZvciB1bml0IHRlc3Rp
bmcuCisgICAqIEBwcml2YXRlCisgICAqLworICBfcmVzZXRFdmVudFBsdWdpbnM6IGZ1bmN0aW9u
KCkgeworICAgIEV2ZW50UGx1Z2luT3JkZXIgPSBudWxsOworICAgIGZvciAodmFyIHBsdWdpbk5h
bWUgaW4gbmFtZXNUb1BsdWdpbnMpIHsKKyAgICAgIGlmIChuYW1lc1RvUGx1Z2lucy5oYXNPd25Q
cm9wZXJ0eShwbHVnaW5OYW1lKSkgeworICAgICAgICBkZWxldGUgbmFtZXNUb1BsdWdpbnNbcGx1
Z2luTmFtZV07CisgICAgICB9CisgICAgfQorICAgIEV2ZW50UGx1Z2luUmVnaXN0cnkucGx1Z2lu
cy5sZW5ndGggPSAwOworICAgIHZhciByZWdpc3RyYXRpb25OYW1lcyA9IEV2ZW50UGx1Z2luUmVn
aXN0cnkucmVnaXN0cmF0aW9uTmFtZXM7CisgICAgZm9yICh2YXIgcmVnaXN0cmF0aW9uTmFtZSBp
biByZWdpc3RyYXRpb25OYW1lcykgeworICAgICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWVzLmhhc093
blByb3BlcnR5KHJlZ2lzdHJhdGlvbk5hbWUpKSB7CisgICAgICAgIGRlbGV0ZSByZWdpc3RyYXRp
b25OYW1lc1tyZWdpc3RyYXRpb25OYW1lXTsKKyAgICAgIH0KKyAgICB9CisgICAgRXZlbnRQbHVn
aW5SZWdpc3RyeS5yZWdpc3RyYXRpb25OYW1lc0tleXMubGVuZ3RoID0gMDsKKyAgfQorCit9Owor
Cittb2R1bGUuZXhwb3J0cyA9IEV2ZW50UGx1Z2luUmVnaXN0cnk7CisKK30seyIuL2ludmFyaWFu
dCI6NzV9XSwxNzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENv
cHlyaWdodCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFw
YWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5v
dCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisg
KiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8v
d3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWly
ZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisg
KiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMg
SVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJ
TkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRo
ZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0
aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBAcHJvdmlkZXNNb2R1bGUgRXZlbnRQbHVn
aW5VdGlscworICovCisKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIEV2ZW50Q29uc3RhbnRzID0gcmVx
dWlyZSgiLi9FdmVudENvbnN0YW50cyIpOworCit2YXIgaW52YXJpYW50ID0gcmVxdWlyZSgiLi9p
bnZhcmlhbnQiKTsKKwordmFyIHRvcExldmVsVHlwZXMgPSBFdmVudENvbnN0YW50cy50b3BMZXZl
bFR5cGVzOworCitmdW5jdGlvbiBpc0VuZGlzaCh0b3BMZXZlbFR5cGUpIHsKKyAgcmV0dXJuIHRv
cExldmVsVHlwZSA9PT0gdG9wTGV2ZWxUeXBlcy50b3BNb3VzZVVwIHx8CisgICAgICAgICB0b3BM
ZXZlbFR5cGUgPT09IHRvcExldmVsVHlwZXMudG9wVG91Y2hFbmQgfHwKKyAgICAgICAgIHRvcExl
dmVsVHlwZSA9PT0gdG9wTGV2ZWxUeXBlcy50b3BUb3VjaENhbmNlbDsKK30KKworZnVuY3Rpb24g
aXNNb3ZlaXNoKHRvcExldmVsVHlwZSkgeworICByZXR1cm4gdG9wTGV2ZWxUeXBlID09PSB0b3BM
ZXZlbFR5cGVzLnRvcE1vdXNlTW92ZSB8fAorICAgICAgICAgdG9wTGV2ZWxUeXBlID09PSB0b3BM
ZXZlbFR5cGVzLnRvcFRvdWNoTW92ZTsKK30KK2Z1bmN0aW9uIGlzU3RhcnRpc2godG9wTGV2ZWxU
eXBlKSB7CisgIHJldHVybiB0b3BMZXZlbFR5cGUgPT09IHRvcExldmVsVHlwZXMudG9wTW91c2VE
b3duIHx8CisgICAgICAgICB0b3BMZXZlbFR5cGUgPT09IHRvcExldmVsVHlwZXMudG9wVG91Y2hT
dGFydDsKK30KKwordmFyIHZhbGlkYXRlRXZlbnREaXNwYXRjaGVzOworaWYgKHRydWUpIHsKKyAg
dmFsaWRhdGVFdmVudERpc3BhdGNoZXMgPSBmdW5jdGlvbihldmVudCkgeworICAgIHZhciBkaXNw
YXRjaExpc3RlbmVycyA9IGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVyczsKKyAgICB2YXIgZGlzcGF0
Y2hJRHMgPSBldmVudC5fZGlzcGF0Y2hJRHM7CisKKyAgICB2YXIgbGlzdGVuZXJzSXNBcnIgPSBB
cnJheS5pc0FycmF5KGRpc3BhdGNoTGlzdGVuZXJzKTsKKyAgICB2YXIgaWRzSXNBcnIgPSBBcnJh
eS5pc0FycmF5KGRpc3BhdGNoSURzKTsKKyAgICB2YXIgSURzTGVuID0gaWRzSXNBcnIgPyBkaXNw
YXRjaElEcy5sZW5ndGggOiBkaXNwYXRjaElEcyA/IDEgOiAwOworICAgIHZhciBsaXN0ZW5lcnNM
ZW4gPSBsaXN0ZW5lcnNJc0FyciA/CisgICAgICBkaXNwYXRjaExpc3RlbmVycy5sZW5ndGggOgor
ICAgICAgZGlzcGF0Y2hMaXN0ZW5lcnMgPyAxIDogMDsKKworICAgIGludmFyaWFudCgKKyAgICAg
IGlkc0lzQXJyID09PSBsaXN0ZW5lcnNJc0FyciAmJiBJRHNMZW4gPT09IGxpc3RlbmVyc0xlbiwK
KyAgICAgICdFdmVudFBsdWdpblV0aWxzOiBJbnZhbGlkIGBldmVudGAuJworICAgICk7CisgIH07
Cit9CisKKy8qKgorICogSW52b2tlcyBgY2IoZXZlbnQsIGxpc3RlbmVyLCBpZClgLiBBdm9pZHMg
dXNpbmcgY2FsbCBpZiBubyBzY29wZSBpcworICogcHJvdmlkZWQuIFRoZSBgKGxpc3RlbmVyLGlk
KWAgcGFpciBlZmZlY3RpdmVseSBmb3JtcyB0aGUgImRpc3BhdGNoIiBidXQgYXJlCisgKiBrZXB0
IHNlcGFyYXRlIHRvIGNvbnNlcnZlIG1lbW9yeS4KKyAqLworZnVuY3Rpb24gZm9yRWFjaEV2ZW50
RGlzcGF0Y2goZXZlbnQsIGNiKSB7CisgIHZhciBkaXNwYXRjaExpc3RlbmVycyA9IGV2ZW50Ll9k
aXNwYXRjaExpc3RlbmVyczsKKyAgdmFyIGRpc3BhdGNoSURzID0gZXZlbnQuX2Rpc3BhdGNoSURz
OworICBpZiAodHJ1ZSkgeworICAgIHZhbGlkYXRlRXZlbnREaXNwYXRjaGVzKGV2ZW50KTsKKyAg
fQorICBpZiAoQXJyYXkuaXNBcnJheShkaXNwYXRjaExpc3RlbmVycykpIHsKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGRpc3BhdGNoTGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7CisgICAgICBpZiAo
ZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkgeworICAgICAgICBicmVhazsKKyAgICAgIH0K
KyAgICAgIC8vIExpc3RlbmVycyBhbmQgSURzIGFyZSB0d28gcGFyYWxsZWwgYXJyYXlzIHRoYXQg
YXJlIGFsd2F5cyBpbiBzeW5jLgorICAgICAgY2IoZXZlbnQsIGRpc3BhdGNoTGlzdGVuZXJzW2ld
LCBkaXNwYXRjaElEc1tpXSk7CisgICAgfQorICB9IGVsc2UgaWYgKGRpc3BhdGNoTGlzdGVuZXJz
KSB7CisgICAgY2IoZXZlbnQsIGRpc3BhdGNoTGlzdGVuZXJzLCBkaXNwYXRjaElEcyk7CisgIH0K
K30KKworLyoqCisgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIFBsdWdpbk1vZHVsZS5leGVj
dXRlRGlzcGF0Y2goKS4KKyAqIEBwYXJhbSB7U3ludGhldGljRXZlbnR9IFN5bnRoZXRpY0V2ZW50
IHRvIGhhbmRsZQorICogQHBhcmFtIHtmdW5jdGlvbn0gQXBwbGljYXRpb24tbGV2ZWwgY2FsbGJh
Y2sKKyAqIEBwYXJhbSB7c3RyaW5nfSBkb21JRCBET00gaWQgdG8gcGFzcyB0byB0aGUgY2FsbGJh
Y2suCisgKi8KK2Z1bmN0aW9uIGV4ZWN1dGVEaXNwYXRjaChldmVudCwgbGlzdGVuZXIsIGRvbUlE
KSB7CisgIGxpc3RlbmVyKGV2ZW50LCBkb21JRCk7Cit9CisKKy8qKgorICogU3RhbmRhcmQvc2lt
cGxlIGl0ZXJhdGlvbiB0aHJvdWdoIGFuIGV2ZW50J3MgY29sbGVjdGVkIGRpc3BhdGNoZXMuCisg
Ki8KK2Z1bmN0aW9uIGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlcihldmVudCwgZXhlY3V0ZURpc3Bh
dGNoKSB7CisgIGZvckVhY2hFdmVudERpc3BhdGNoKGV2ZW50LCBleGVjdXRlRGlzcGF0Y2gpOwor
ICBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnMgPSBudWxsOworICBldmVudC5fZGlzcGF0Y2hJRHMg
PSBudWxsOworfQorCisvKioKKyAqIFN0YW5kYXJkL3NpbXBsZSBpdGVyYXRpb24gdGhyb3VnaCBh
biBldmVudCdzIGNvbGxlY3RlZCBkaXNwYXRjaGVzLCBidXQgc3RvcHMKKyAqIGF0IHRoZSBmaXJz
dCBkaXNwYXRjaCBleGVjdXRpb24gcmV0dXJuaW5nIHRydWUsIGFuZCByZXR1cm5zIHRoYXQgaWQu
CisgKgorICogQHJldHVybiBpZCBvZiB0aGUgZmlyc3QgZGlzcGF0Y2ggZXhlY3V0aW9uIHdobydz
IGxpc3RlbmVyIHJldHVybnMgdHJ1ZSwgb3IKKyAqIG51bGwgaWYgbm8gbGlzdGVuZXIgcmV0dXJu
ZWQgdHJ1ZS4KKyAqLworZnVuY3Rpb24gZXhlY3V0ZURpc3BhdGNoZXNJbk9yZGVyU3RvcEF0VHJ1
ZShldmVudCkgeworICB2YXIgZGlzcGF0Y2hMaXN0ZW5lcnMgPSBldmVudC5fZGlzcGF0Y2hMaXN0
ZW5lcnM7CisgIHZhciBkaXNwYXRjaElEcyA9IGV2ZW50Ll9kaXNwYXRjaElEczsKKyAgaWYgKHRy
dWUpIHsKKyAgICB2YWxpZGF0ZUV2ZW50RGlzcGF0Y2hlcyhldmVudCk7CisgIH0KKyAgaWYgKEFy
cmF5LmlzQXJyYXkoZGlzcGF0Y2hMaXN0ZW5lcnMpKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBkaXNwYXRjaExpc3RlbmVycy5sZW5ndGg7IGkrKykgeworICAgICAgaWYgKGV2ZW50LmlzUHJv
cGFnYXRpb25TdG9wcGVkKCkpIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICAvLyBM
aXN0ZW5lcnMgYW5kIElEcyBhcmUgdHdvIHBhcmFsbGVsIGFycmF5cyB0aGF0IGFyZSBhbHdheXMg
aW4gc3luYy4KKyAgICAgIGlmIChkaXNwYXRjaExpc3RlbmVyc1tpXShldmVudCwgZGlzcGF0Y2hJ
RHNbaV0pKSB7CisgICAgICAgIHJldHVybiBkaXNwYXRjaElEc1tpXTsKKyAgICAgIH0KKyAgICB9
CisgIH0gZWxzZSBpZiAoZGlzcGF0Y2hMaXN0ZW5lcnMpIHsKKyAgICBpZiAoZGlzcGF0Y2hMaXN0
ZW5lcnMoZXZlbnQsIGRpc3BhdGNoSURzKSkgeworICAgICAgcmV0dXJuIGRpc3BhdGNoSURzOwor
ICAgIH0KKyAgfQorICByZXR1cm4gbnVsbDsKK30KKworLyoqCisgKiBFeGVjdXRpb24gb2YgYSAi
ZGlyZWN0IiBkaXNwYXRjaCAtIHRoZXJlIG11c3QgYmUgYXQgbW9zdCBvbmUgZGlzcGF0Y2gKKyAq
IGFjY3VtdWxhdGVkIG9uIHRoZSBldmVudCBvciBpdCBpcyBjb25zaWRlcmVkIGFuIGVycm9yLiBJ
dCBkb2Vzbid0IHJlYWxseSBtYWtlCisgKiBzZW5zZSBmb3IgYW4gZXZlbnQgd2l0aCBtdWx0aXBs
ZSBkaXNwYXRjaGVzIChidWJibGVkKSB0byBrZWVwIHRyYWNrIG9mIHRoZQorICogcmV0dXJuIHZh
bHVlcyBhdCBlYWNoIGRpc3BhdGNoIGV4ZWN1dGlvbiwgYnV0IGl0IGRvZXMgdGVuZCB0byBtYWtl
IHNlbnNlIHdoZW4KKyAqIGRlYWxpbmcgd2l0aCAiZGlyZWN0IiBkaXNwYXRjaGVzLgorICoKKyAq
IEByZXR1cm4gVGhlIHJldHVybiB2YWx1ZSBvZiBleGVjdXRpbmcgdGhlIHNpbmdsZSBkaXNwYXRj
aC4KKyAqLworZnVuY3Rpb24gZXhlY3V0ZURpcmVjdERpc3BhdGNoKGV2ZW50KSB7CisgIGlmICh0
cnVlKSB7CisgICAgdmFsaWRhdGVFdmVudERpc3BhdGNoZXMoZXZlbnQpOworICB9CisgIHZhciBk
aXNwYXRjaExpc3RlbmVyID0gZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzOworICB2YXIgZGlzcGF0
Y2hJRCA9IGV2ZW50Ll9kaXNwYXRjaElEczsKKyAgaW52YXJpYW50KAorICAgICFBcnJheS5pc0Fy
cmF5KGRpc3BhdGNoTGlzdGVuZXIpLAorICAgICdleGVjdXRlRGlyZWN0RGlzcGF0Y2goLi4uKTog
SW52YWxpZCBgZXZlbnRgLicKKyAgKTsKKyAgdmFyIHJlcyA9IGRpc3BhdGNoTGlzdGVuZXIgPwor
ICAgIGRpc3BhdGNoTGlzdGVuZXIoZXZlbnQsIGRpc3BhdGNoSUQpIDoKKyAgICBudWxsOworICBl
dmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnMgPSBudWxsOworICBldmVudC5fZGlzcGF0Y2hJRHMgPSBu
dWxsOworICByZXR1cm4gcmVzOworfQorCisvKioKKyAqIEBwYXJhbSB7U3ludGhldGljRXZlbnR9
IGV2ZW50CisgKiBAcmV0dXJuIHtib29sfSBUcnVlIGlmZiBudW1iZXIgb2YgZGlzcGF0Y2hlcyBh
Y2N1bXVsYXRlZCBpcyBncmVhdGVyIHRoYW4gMC4KKyAqLworZnVuY3Rpb24gaGFzRGlzcGF0Y2hl
cyhldmVudCkgeworICByZXR1cm4gISFldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnM7Cit9CisKKy8q
KgorICogR2VuZXJhbCB1dGlsaXRpZXMgdGhhdCBhcmUgdXNlZnVsIGluIGNyZWF0aW5nIGN1c3Rv
bSBFdmVudCBQbHVnaW5zLgorICovCit2YXIgRXZlbnRQbHVnaW5VdGlscyA9IHsKKyAgaXNFbmRp
c2g6IGlzRW5kaXNoLAorICBpc01vdmVpc2g6IGlzTW92ZWlzaCwKKyAgaXNTdGFydGlzaDogaXNT
dGFydGlzaCwKKyAgZXhlY3V0ZURpc3BhdGNoZXNJbk9yZGVyOiBleGVjdXRlRGlzcGF0Y2hlc0lu
T3JkZXIsCisgIGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlclN0b3BBdFRydWU6IGV4ZWN1dGVEaXNw
YXRjaGVzSW5PcmRlclN0b3BBdFRydWUsCisgIGV4ZWN1dGVEaXJlY3REaXNwYXRjaDogZXhlY3V0
ZURpcmVjdERpc3BhdGNoLAorICBoYXNEaXNwYXRjaGVzOiBoYXNEaXNwYXRjaGVzLAorICBleGVj
dXRlRGlzcGF0Y2g6IGV4ZWN1dGVEaXNwYXRjaAorfTsKKworbW9kdWxlLmV4cG9ydHMgPSBFdmVu
dFBsdWdpblV0aWxzOworCit9LHsiLi9FdmVudENvbnN0YW50cyI6MTMsIi4vaW52YXJpYW50Ijo3
NX1dLDE4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJp
Z2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hl
IExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVz
ZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlv
dSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cu
YXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBi
eSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRp
c3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIg
QkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwg
ZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNw
ZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25z
IHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBFdmVudFByb3BhZ2F0
b3JzCisgKi8KKworInVzZSBzdHJpY3QiOworCit2YXIgQ2FsbGJhY2tSZWdpc3RyeSA9IHJlcXVp
cmUoIi4vQ2FsbGJhY2tSZWdpc3RyeSIpOwordmFyIEV2ZW50Q29uc3RhbnRzID0gcmVxdWlyZSgi
Li9FdmVudENvbnN0YW50cyIpOworCit2YXIgYWNjdW11bGF0ZSA9IHJlcXVpcmUoIi4vYWNjdW11
bGF0ZSIpOwordmFyIGZvckVhY2hBY2N1bXVsYXRlZCA9IHJlcXVpcmUoIi4vZm9yRWFjaEFjY3Vt
dWxhdGVkIik7Cit2YXIgZ2V0TGlzdGVuZXIgPSBDYWxsYmFja1JlZ2lzdHJ5LmdldExpc3RlbmVy
OwordmFyIFByb3BhZ2F0aW9uUGhhc2VzID0gRXZlbnRDb25zdGFudHMuUHJvcGFnYXRpb25QaGFz
ZXM7CisKKy8qKgorICogSW5qZWN0ZWQgZGVwZW5kZW5jaWVzOgorICovCisKKy8qKgorICogLSBg
SW5zdGFuY2VIYW5kbGVgOiBbcmVxdWlyZWRdIE1vZHVsZSB0aGF0IHBlcmZvcm1zIGxvZ2ljYWwg
dHJhdmVyc2FscyBvZiBET00KKyAqICAgaGllcmFyY2h5IGdpdmVuIGlkcyBvZiB0aGUgbG9naWNh
bCBET00gZWxlbWVudHMgaW52b2x2ZWQuCisgKi8KK3ZhciBpbmplY3Rpb24gPSB7CisgIEluc3Rh
bmNlSGFuZGxlOiBudWxsLAorICBpbmplY3RJbnN0YW5jZUhhbmRsZTogZnVuY3Rpb24oSW5qZWN0
ZWRJbnN0YW5jZUhhbmRsZSkgeworICAgIGluamVjdGlvbi5JbnN0YW5jZUhhbmRsZSA9IEluamVj
dGVkSW5zdGFuY2VIYW5kbGU7CisgICAgaWYgKHRydWUpIHsKKyAgICAgIGluamVjdGlvbi52YWxp
ZGF0ZSgpOworICAgIH0KKyAgfSwKKyAgdmFsaWRhdGU6IGZ1bmN0aW9uKCkgeworICAgIHZhciBp
bnZhbGlkID0gIWluamVjdGlvbi5JbnN0YW5jZUhhbmRsZXx8CisgICAgICAhaW5qZWN0aW9uLklu
c3RhbmNlSGFuZGxlLnRyYXZlcnNlVHdvUGhhc2UgfHwKKyAgICAgICFpbmplY3Rpb24uSW5zdGFu
Y2VIYW5kbGUudHJhdmVyc2VFbnRlckxlYXZlOworICAgIGlmIChpbnZhbGlkKSB7CisgICAgICB0
aHJvdyBuZXcgRXJyb3IoJ0luc3RhbmNlSGFuZGxlIG5vdCBpbmplY3RlZCBiZWZvcmUgdXNlIScp
OworICAgIH0KKyAgfQorfTsKKworLyoqCisgKiBTb21lIGV2ZW50IHR5cGVzIGhhdmUgYSBub3Rp
b24gb2YgZGlmZmVyZW50IHJlZ2lzdHJhdGlvbiBuYW1lcyBmb3IgZGlmZmVyZW50CisgKiAicGhh
c2VzIiBvZiBwcm9wYWdhdGlvbi4gVGhpcyBmaW5kcyBsaXN0ZW5lcnMgYnkgYSBnaXZlbiBwaGFz
ZS4KKyAqLworZnVuY3Rpb24gbGlzdGVuZXJBdFBoYXNlKGlkLCBldmVudCwgcHJvcGFnYXRpb25Q
aGFzZSkgeworICB2YXIgcmVnaXN0cmF0aW9uTmFtZSA9CisgICAgZXZlbnQuZGlzcGF0Y2hDb25m
aWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXNbcHJvcGFnYXRpb25QaGFzZV07CisgIHJldHVybiBn
ZXRMaXN0ZW5lcihpZCwgcmVnaXN0cmF0aW9uTmFtZSk7Cit9CisKKy8qKgorICogVGFncyBhIGBT
eW50aGV0aWNFdmVudGAgd2l0aCBkaXNwYXRjaGVkIGxpc3RlbmVycy4gQ3JlYXRpbmcgdGhpcyBm
dW5jdGlvbgorICogaGVyZSwgYWxsb3dzIHVzIHRvIG5vdCBoYXZlIHRvIGJpbmQgb3IgY3JlYXRl
IGZ1bmN0aW9ucyBmb3IgZWFjaCBldmVudC4KKyAqIE11dGF0aW5nIHRoZSBldmVudCdzIG1lbWJl
cnMgYWxsb3dzIHVzIHRvIG5vdCBoYXZlIHRvIGNyZWF0ZSBhIHdyYXBwaW5nCisgKiAiZGlzcGF0
Y2giIG9iamVjdCB0aGF0IHBhaXJzIHRoZSBldmVudCB3aXRoIHRoZSBsaXN0ZW5lci4KKyAqLwor
ZnVuY3Rpb24gYWNjdW11bGF0ZURpcmVjdGlvbmFsRGlzcGF0Y2hlcyhkb21JRCwgdXB3YXJkcywg
ZXZlbnQpIHsKKyAgaWYgKHRydWUpIHsKKyAgICBpZiAoIWRvbUlEKSB7CisgICAgICB0aHJvdyBu
ZXcgRXJyb3IoJ0Rpc3BhdGNoaW5nIGlkIG11c3Qgbm90IGJlIG51bGwnKTsKKyAgICB9CisgICAg
aW5qZWN0aW9uLnZhbGlkYXRlKCk7CisgIH0KKyAgdmFyIHBoYXNlID0gdXB3YXJkcyA/IFByb3Bh
Z2F0aW9uUGhhc2VzLmJ1YmJsZWQgOiBQcm9wYWdhdGlvblBoYXNlcy5jYXB0dXJlZDsKKyAgdmFy
IGxpc3RlbmVyID0gbGlzdGVuZXJBdFBoYXNlKGRvbUlELCBldmVudCwgcGhhc2UpOworICBpZiAo
bGlzdGVuZXIpIHsKKyAgICBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnMgPSBhY2N1bXVsYXRlKGV2
ZW50Ll9kaXNwYXRjaExpc3RlbmVycywgbGlzdGVuZXIpOworICAgIGV2ZW50Ll9kaXNwYXRjaElE
cyA9IGFjY3VtdWxhdGUoZXZlbnQuX2Rpc3BhdGNoSURzLCBkb21JRCk7CisgIH0KK30KKworLyoq
CisgKiBDb2xsZWN0IGRpc3BhdGNoZXMgKG11c3QgYmUgZW50aXJlbHkgY29sbGVjdGVkIGJlZm9y
ZSBkaXNwYXRjaGluZyAtIHNlZSB1bml0CisgKiB0ZXN0cykuIExhemlseSBhbGxvY2F0ZSB0aGUg
YXJyYXkgdG8gY29uc2VydmUgbWVtb3J5LiAgV2UgbXVzdCBsb29wIHRocm91Z2gKKyAqIGVhY2gg
ZXZlbnQgYW5kIHBlcmZvcm0gdGhlIHRyYXZlcnNhbCBmb3IgZWFjaCBvbmUuIFdlIGNhbiBub3Qg
cGVyZm9ybSBhCisgKiBzaW5nbGUgdHJhdmVyc2FsIGZvciB0aGUgZW50aXJlIGNvbGxlY3Rpb24g
b2YgZXZlbnRzIGJlY2F1c2UgZWFjaCBldmVudCBtYXkKKyAqIGhhdmUgYSBkaWZmZXJlbnQgdGFy
Z2V0LgorICovCitmdW5jdGlvbiBhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzU2luZ2xlKGV2
ZW50KSB7CisgIGlmIChldmVudCAmJiBldmVudC5kaXNwYXRjaENvbmZpZy5waGFzZWRSZWdpc3Ry
YXRpb25OYW1lcykgeworICAgIGluamVjdGlvbi5JbnN0YW5jZUhhbmRsZS50cmF2ZXJzZVR3b1Bo
YXNlKAorICAgICAgZXZlbnQuZGlzcGF0Y2hNYXJrZXIsCisgICAgICBhY2N1bXVsYXRlRGlyZWN0
aW9uYWxEaXNwYXRjaGVzLAorICAgICAgZXZlbnQKKyAgICApOworICB9Cit9CisKKworLyoqCisg
KiBBY2N1bXVsYXRlcyB3aXRob3V0IHJlZ2FyZCB0byBkaXJlY3Rpb24sIGRvZXMgbm90IGxvb2sg
Zm9yIHBoYXNlZAorICogcmVnaXN0cmF0aW9uIG5hbWVzLiBTYW1lIGFzIGBhY2N1bXVsYXRlRGly
ZWN0RGlzcGF0Y2hlc1NpbmdsZWAgYnV0IHdpdGhvdXQKKyAqIHJlcXVpcmluZyB0aGF0IHRoZSBg
ZGlzcGF0Y2hNYXJrZXJgIGJlIHRoZSBzYW1lIGFzIHRoZSBkaXNwYXRjaGVkIElELgorICovCitm
dW5jdGlvbiBhY2N1bXVsYXRlRGlzcGF0Y2hlcyhpZCwgaWdub3JlZERpcmVjdGlvbiwgZXZlbnQp
IHsKKyAgaWYgKGV2ZW50ICYmIGV2ZW50LmRpc3BhdGNoQ29uZmlnLnJlZ2lzdHJhdGlvbk5hbWUp
IHsKKyAgICB2YXIgcmVnaXN0cmF0aW9uTmFtZSA9IGV2ZW50LmRpc3BhdGNoQ29uZmlnLnJlZ2lz
dHJhdGlvbk5hbWU7CisgICAgdmFyIGxpc3RlbmVyID0gZ2V0TGlzdGVuZXIoaWQsIHJlZ2lzdHJh
dGlvbk5hbWUpOworICAgIGlmIChsaXN0ZW5lcikgeworICAgICAgZXZlbnQuX2Rpc3BhdGNoTGlz
dGVuZXJzID0gYWNjdW11bGF0ZShldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnMsIGxpc3RlbmVyKTsK
KyAgICAgIGV2ZW50Ll9kaXNwYXRjaElEcyA9IGFjY3VtdWxhdGUoZXZlbnQuX2Rpc3BhdGNoSURz
LCBpZCk7CisgICAgfQorICB9Cit9CisKKy8qKgorICogQWNjdW11bGF0ZXMgZGlzcGF0Y2hlcyBv
biBhbiBgU3ludGhldGljRXZlbnRgLCBidXQgb25seSBmb3IgdGhlCisgKiBgZGlzcGF0Y2hNYXJr
ZXJgLgorICogQHBhcmFtIHtTeW50aGV0aWNFdmVudH0gZXZlbnQKKyAqLworZnVuY3Rpb24gYWNj
dW11bGF0ZURpcmVjdERpc3BhdGNoZXNTaW5nbGUoZXZlbnQpIHsKKyAgaWYgKGV2ZW50ICYmIGV2
ZW50LmRpc3BhdGNoQ29uZmlnLnJlZ2lzdHJhdGlvbk5hbWUpIHsKKyAgICBhY2N1bXVsYXRlRGlz
cGF0Y2hlcyhldmVudC5kaXNwYXRjaE1hcmtlciwgbnVsbCwgZXZlbnQpOworICB9Cit9CisKK2Z1
bmN0aW9uIGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXMoZXZlbnRzKSB7CisgIGlmICh0cnVl
KSB7CisgICAgaW5qZWN0aW9uLnZhbGlkYXRlKCk7CisgIH0KKyAgZm9yRWFjaEFjY3VtdWxhdGVk
KGV2ZW50cywgYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlc1NpbmdsZSk7Cit9CisKK2Z1bmN0
aW9uIGFjY3VtdWxhdGVFbnRlckxlYXZlRGlzcGF0Y2hlcyhsZWF2ZSwgZW50ZXIsIGZyb21JRCwg
dG9JRCkgeworICBpZiAodHJ1ZSkgeworICAgIGluamVjdGlvbi52YWxpZGF0ZSgpOworICB9Cisg
IGluamVjdGlvbi5JbnN0YW5jZUhhbmRsZS50cmF2ZXJzZUVudGVyTGVhdmUoCisgICAgZnJvbUlE
LAorICAgIHRvSUQsCisgICAgYWNjdW11bGF0ZURpc3BhdGNoZXMsCisgICAgbGVhdmUsCisgICAg
ZW50ZXIKKyAgKTsKK30KKworCitmdW5jdGlvbiBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlcyhl
dmVudHMpIHsKKyAgaWYgKHRydWUpIHsKKyAgICBpbmplY3Rpb24udmFsaWRhdGUoKTsKKyAgfQor
ICBmb3JFYWNoQWNjdW11bGF0ZWQoZXZlbnRzLCBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlc1Np
bmdsZSk7Cit9CisKKworCisvKioKKyAqIEEgc21hbGwgc2V0IG9mIHByb3BhZ2F0aW9uIHBhdHRl
cm5zLCBlYWNoIG9mIHdoaWNoIHdpbGwgYWNjZXB0IGEgc21hbGwgYW1vdW50CisgKiBvZiBpbmZv
cm1hdGlvbiwgYW5kIGdlbmVyYXRlIGEgc2V0IG9mICJkaXNwYXRjaCByZWFkeSBldmVudCBvYmpl
Y3RzIiAtIHdoaWNoCisgKiBhcmUgc2V0cyBvZiBldmVudHMgdGhhdCBoYXZlIGFscmVhZHkgYmVl
biBhbm5vdGF0ZWQgd2l0aCBhIHNldCBvZiBkaXNwYXRjaGVkCisgKiBsaXN0ZW5lciBmdW5jdGlv
bnMvaWRzLiBUaGUgQVBJIGlzIGRlc2lnbmVkIHRoaXMgd2F5IHRvIGRpc2NvdXJhZ2UgdGhlc2UK
KyAqIHByb3BhZ2F0aW9uIHN0cmF0ZWdpZXMgZnJvbSBhY3R1YWxseSBleGVjdXRpbmcgdGhlIGRp
c3BhdGNoZXMsIHNpbmNlIHdlCisgKiBhbHdheXMgd2FudCB0byBjb2xsZWN0IHRoZSBlbnRpcmUg
c2V0IG9mIGRpc3BhdGNoZXMgYmVmb3JlIGV4ZWN1dGluZyBldmVudCBhCisgKiBzaW5nbGUgb25l
LgorICoKKyAqIEBjb25zdHJ1Y3RvciBFdmVudFByb3BhZ2F0b3JzCisgKi8KK3ZhciBFdmVudFBy
b3BhZ2F0b3JzID0geworICBhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzOiBhY2N1bXVsYXRl
VHdvUGhhc2VEaXNwYXRjaGVzLAorICBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlczogYWNjdW11
bGF0ZURpcmVjdERpc3BhdGNoZXMsCisgIGFjY3VtdWxhdGVFbnRlckxlYXZlRGlzcGF0Y2hlczog
YWNjdW11bGF0ZUVudGVyTGVhdmVEaXNwYXRjaGVzLAorICBpbmplY3Rpb246IGluamVjdGlvbgor
fTsKKworbW9kdWxlLmV4cG9ydHMgPSBFdmVudFByb3BhZ2F0b3JzOworCit9LHsiLi9DYWxsYmFj
a1JlZ2lzdHJ5Ijo0LCIuL0V2ZW50Q29uc3RhbnRzIjoxMywiLi9hY2N1bXVsYXRlIjo2MCwiLi9m
b3JFYWNoQWNjdW11bGF0ZWQiOjY4fV0sMTk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9y
dHMpeworKGZ1bmN0aW9uKCl7LyoqCisgKiBDb3B5cmlnaHQgMjAxMyBGYWNlYm9vaywgSW5jLgor
ICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRo
ZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29t
cGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRo
ZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VO
U0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVl
ZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vu
c2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFO
VElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVk
LgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5n
IHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgor
ICogQHByb3ZpZGVzTW9kdWxlIEV4ZWN1dGlvbkVudmlyb25tZW50CisgKi8KKworLypqc2xpbnQg
ZXZpbDogdHJ1ZSAqLworCisidXNlIHN0cmljdCI7CisKK3ZhciBjYW5Vc2VET00gPSB0eXBlb2Yg
d2luZG93ICE9PSAndW5kZWZpbmVkJzsKKworLyoqCisgKiBTaW1wbGUsIGxpZ2h0d2VpZ2h0IG1v
ZHVsZSBhc3Npc3Rpbmcgd2l0aCB0aGUgZGV0ZWN0aW9uIGFuZCBjb250ZXh0IG9mCisgKiBXb3Jr
ZXIuIEhlbHBzIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llcyBhbmQgYWxsb3dzIGNvZGUgdG8g
cmVhc29uIGFib3V0CisgKiB3aGV0aGVyIG9yIG5vdCB0aGV5IGFyZSBpbiBhIFdvcmtlciwgZXZl
biBpZiB0aGV5IG5ldmVyIGluY2x1ZGUgdGhlIG1haW4KKyAqIGBSZWFjdFdvcmtlcmAgZGVwZW5k
ZW5jeS4KKyAqLwordmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0geworCisgIGNhblVzZURPTTog
Y2FuVXNlRE9NLAorCisgIGNhblVzZVdvcmtlcnM6IHR5cGVvZiBXb3JrZXIgIT09ICd1bmRlZmlu
ZWQnLAorCisgIGlzSW5Xb3JrZXI6ICFjYW5Vc2VET00sIC8vIEZvciBub3csIHRoaXMgaXMgdHJ1
ZSAtIG1pZ2h0IGNoYW5nZSBpbiB0aGUgZnV0dXJlLgorCisgIGdsb2JhbDogbmV3IEZ1bmN0aW9u
KCdyZXR1cm4gdGhpczsnKSgpCisKK307CisKK21vZHVsZS5leHBvcnRzID0gRXhlY3V0aW9uRW52
aXJvbm1lbnQ7CisKK30pKCkKK30se31dLDIwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBv
cnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNl
bnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2Ui
KTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0
aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBh
dAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoK
KyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3Jp
dGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3Ry
aWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09O
RElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0
aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9u
cyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRl
c01vZHVsZSBQb29sZWRDbGFzcworICovCisKKyJ1c2Ugc3RyaWN0IjsKKworLyoqCisgKiBTdGF0
aWMgcG9vbGVycy4gU2V2ZXJhbCBjdXN0b20gdmVyc2lvbnMgZm9yIGVhY2ggcG90ZW50aWFsIG51
bWJlciBvZgorICogYXJndW1lbnRzLiBBIGNvbXBsZXRlbHkgZ2VuZXJpYyBwb29sZXIgaXMgZWFz
eSB0byBpbXBsZW1lbnQsIGJ1dCB3b3VsZAorICogcmVxdWlyZSBhY2Nlc3NpbmcgdGhlIGBhcmd1
bWVudHNgIG9iamVjdC4gSW4gZWFjaCBvZiB0aGVzZSwgYHRoaXNgIHJlZmVycyB0bworICogdGhl
IENsYXNzIGl0c2VsZiwgbm90IGFuIGluc3RhbmNlLiBJZiBhbnkgb3RoZXJzIGFyZSBuZWVkZWQs
IHNpbXBseSBhZGQgdGhlbQorICogaGVyZSwgb3IgaW4gdGhlaXIgb3duIGZpbGVzLgorICovCit2
YXIgb25lQXJndW1lbnRQb29sZXIgPSBmdW5jdGlvbihjb3B5RmllbGRzRnJvbSkgeworICB2YXIg
S2xhc3MgPSB0aGlzOworICBpZiAoS2xhc3MuaW5zdGFuY2VQb29sLmxlbmd0aCkgeworICAgIHZh
ciBpbnN0YW5jZSA9IEtsYXNzLmluc3RhbmNlUG9vbC5wb3AoKTsKKyAgICBLbGFzcy5jYWxsKGlu
c3RhbmNlLCBjb3B5RmllbGRzRnJvbSk7CisgICAgcmV0dXJuIGluc3RhbmNlOworICB9IGVsc2Ug
eworICAgIHJldHVybiBuZXcgS2xhc3MoY29weUZpZWxkc0Zyb20pOworICB9Cit9OworCit2YXIg
dHdvQXJndW1lbnRQb29sZXIgPSBmdW5jdGlvbihhMSwgYTIpIHsKKyAgdmFyIEtsYXNzID0gdGhp
czsKKyAgaWYgKEtsYXNzLmluc3RhbmNlUG9vbC5sZW5ndGgpIHsKKyAgICB2YXIgaW5zdGFuY2Ug
PSBLbGFzcy5pbnN0YW5jZVBvb2wucG9wKCk7CisgICAgS2xhc3MuY2FsbChpbnN0YW5jZSwgYTEs
IGEyKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIG5ldyBL
bGFzcyhhMSwgYTIpOworICB9Cit9OworCit2YXIgdGhyZWVBcmd1bWVudFBvb2xlciA9IGZ1bmN0
aW9uKGExLCBhMiwgYTMpIHsKKyAgdmFyIEtsYXNzID0gdGhpczsKKyAgaWYgKEtsYXNzLmluc3Rh
bmNlUG9vbC5sZW5ndGgpIHsKKyAgICB2YXIgaW5zdGFuY2UgPSBLbGFzcy5pbnN0YW5jZVBvb2wu
cG9wKCk7CisgICAgS2xhc3MuY2FsbChpbnN0YW5jZSwgYTEsIGEyLCBhMyk7CisgICAgcmV0dXJu
IGluc3RhbmNlOworICB9IGVsc2UgeworICAgIHJldHVybiBuZXcgS2xhc3MoYTEsIGEyLCBhMyk7
CisgIH0KK307CisKK3ZhciBmaXZlQXJndW1lbnRQb29sZXIgPSBmdW5jdGlvbihhMSwgYTIsIGEz
LCBhNCwgYTUpIHsKKyAgdmFyIEtsYXNzID0gdGhpczsKKyAgaWYgKEtsYXNzLmluc3RhbmNlUG9v
bC5sZW5ndGgpIHsKKyAgICB2YXIgaW5zdGFuY2UgPSBLbGFzcy5pbnN0YW5jZVBvb2wucG9wKCk7
CisgICAgS2xhc3MuY2FsbChpbnN0YW5jZSwgYTEsIGEyLCBhMywgYTQsIGE1KTsKKyAgICByZXR1
cm4gaW5zdGFuY2U7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIG5ldyBLbGFzcyhhMSwgYTIsIGEz
LCBhNCwgYTUpOworICB9Cit9OworCit2YXIgc3RhbmRhcmRSZWxlYXNlciA9IGZ1bmN0aW9uKGlu
c3RhbmNlKSB7CisgIHZhciBLbGFzcyA9IHRoaXM7CisgIGlmIChpbnN0YW5jZS5kZXN0cnVjdG9y
KSB7CisgICAgaW5zdGFuY2UuZGVzdHJ1Y3RvcigpOworICB9CisgIGlmIChLbGFzcy5pbnN0YW5j
ZVBvb2wubGVuZ3RoIDwgS2xhc3MucG9vbFNpemUpIHsKKyAgICBLbGFzcy5pbnN0YW5jZVBvb2wu
cHVzaChpbnN0YW5jZSk7CisgIH0KK307CisKK3ZhciBERUZBVUxUX1BPT0xfU0laRSA9IDEwOwor
dmFyIERFRkFVTFRfUE9PTEVSID0gb25lQXJndW1lbnRQb29sZXI7CisKKy8qKgorICogQXVnbWVu
dHMgYENvcHlDb25zdHJ1Y3RvcmAgdG8gYmUgYSBwb29sYWJsZSBjbGFzcywgYXVnbWVudGluZyBv
bmx5IHRoZSBjbGFzcworICogaXRzZWxmIChzdGF0aWNhbGx5KSBub3QgYWRkaW5nIGFueSBwcm90
b3R5cGljYWwgZmllbGRzLiBBbnkgQ29weUNvbnN0cnVjdG9yCisgKiB5b3UgZ2l2ZSB0aGlzIG1h
eSBoYXZlIGEgYHBvb2xTaXplYCBwcm9wZXJ0eSwgYW5kIHdpbGwgbG9vayBmb3IgYQorICogcHJv
dG90eXBpY2FsIGBkZXN0cnVjdG9yYCBvbiBpbnN0YW5jZXMgKG9wdGlvbmFsKS4KKyAqCisgKiBA
cGFyYW0ge0Z1bmN0aW9ufSBDb3B5Q29uc3RydWN0b3IgQ29uc3RydWN0b3IgdGhhdCBjYW4gYmUg
dXNlZCB0byByZXNldC4KKyAqIEBwYXJhbSB7RnVuY3Rpb259IHBvb2xlciBDdXN0b21pemFibGUg
cG9vbGVyLgorICovCit2YXIgYWRkUG9vbGluZ1RvID0gZnVuY3Rpb24oQ29weUNvbnN0cnVjdG9y
LCBwb29sZXIpIHsKKyAgdmFyIE5ld0tsYXNzID0gQ29weUNvbnN0cnVjdG9yOworICBOZXdLbGFz
cy5pbnN0YW5jZVBvb2wgPSBbXTsKKyAgTmV3S2xhc3MuZ2V0UG9vbGVkID0gcG9vbGVyIHx8IERF
RkFVTFRfUE9PTEVSOworICBpZiAoIU5ld0tsYXNzLnBvb2xTaXplKSB7CisgICAgTmV3S2xhc3Mu
cG9vbFNpemUgPSBERUZBVUxUX1BPT0xfU0laRTsKKyAgfQorICBOZXdLbGFzcy5yZWxlYXNlID0g
c3RhbmRhcmRSZWxlYXNlcjsKKyAgcmV0dXJuIE5ld0tsYXNzOworfTsKKwordmFyIFBvb2xlZENs
YXNzID0geworICBhZGRQb29saW5nVG86IGFkZFBvb2xpbmdUbywKKyAgb25lQXJndW1lbnRQb29s
ZXI6IG9uZUFyZ3VtZW50UG9vbGVyLAorICB0d29Bcmd1bWVudFBvb2xlcjogdHdvQXJndW1lbnRQ
b29sZXIsCisgIHRocmVlQXJndW1lbnRQb29sZXI6IHRocmVlQXJndW1lbnRQb29sZXIsCisgIGZp
dmVBcmd1bWVudFBvb2xlcjogZml2ZUFyZ3VtZW50UG9vbGVyCit9OworCittb2R1bGUuZXhwb3J0
cyA9IFBvb2xlZENsYXNzOworCit9LHt9XSwyMTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhw
b3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgorICogTGlj
ZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNl
Iik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdp
dGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2Ug
YXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAq
CisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdy
aXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0
cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENP
TkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUg
dGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lv
bnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBAcHJvdmlk
ZXNNb2R1bGUgUmVhY3QKKyAqLworCisidXNlIHN0cmljdCI7CisKK3ZhciBSZWFjdENvbXBvc2l0
ZUNvbXBvbmVudCA9IHJlcXVpcmUoIi4vUmVhY3RDb21wb3NpdGVDb21wb25lbnQiKTsKK3ZhciBS
ZWFjdENvbXBvbmVudCA9IHJlcXVpcmUoIi4vUmVhY3RDb21wb25lbnQiKTsKK3ZhciBSZWFjdERP
TSA9IHJlcXVpcmUoIi4vUmVhY3RET00iKTsKK3ZhciBSZWFjdE1vdW50ID0gcmVxdWlyZSgiLi9S
ZWFjdE1vdW50Iik7Cit2YXIgUmVhY3RQcm9wVHlwZXMgPSByZXF1aXJlKCIuL1JlYWN0UHJvcFR5
cGVzIik7Cit2YXIgUmVhY3RTZXJ2ZXJSZW5kZXJpbmcgPSByZXF1aXJlKCIuL1JlYWN0U2VydmVy
UmVuZGVyaW5nIik7CisKK3ZhciBSZWFjdERlZmF1bHRJbmplY3Rpb24gPSByZXF1aXJlKCIuL1Jl
YWN0RGVmYXVsdEluamVjdGlvbiIpOworCitSZWFjdERlZmF1bHRJbmplY3Rpb24uaW5qZWN0KCk7
CisKK3ZhciBSZWFjdCA9IHsKKyAgRE9NOiBSZWFjdERPTSwKKyAgUHJvcFR5cGVzOiBSZWFjdFBy
b3BUeXBlcywKKyAgaW5pdGlhbGl6ZVRvdWNoRXZlbnRzOiBmdW5jdGlvbihzaG91bGRVc2VUb3Vj
aCkgeworICAgIFJlYWN0TW91bnQudXNlVG91Y2hFdmVudHMgPSBzaG91bGRVc2VUb3VjaDsKKyAg
fSwKKyAgYXV0b0JpbmQ6IFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50LmF1dG9CaW5kLAorICBjcmVh
dGVDbGFzczogUmVhY3RDb21wb3NpdGVDb21wb25lbnQuY3JlYXRlQ2xhc3MsCisgIGNvbnN0cnVj
dEFuZFJlbmRlckNvbXBvbmVudDogUmVhY3RNb3VudC5jb25zdHJ1Y3RBbmRSZW5kZXJDb21wb25l
bnQsCisgIGNvbnN0cnVjdEFuZFJlbmRlckNvbXBvbmVudEJ5SUQ6IFJlYWN0TW91bnQuY29uc3Ry
dWN0QW5kUmVuZGVyQ29tcG9uZW50QnlJRCwKKyAgcmVuZGVyQ29tcG9uZW50OiBSZWFjdE1vdW50
LnJlbmRlckNvbXBvbmVudCwKKyAgcmVuZGVyQ29tcG9uZW50VG9TdHJpbmc6IFJlYWN0U2VydmVy
UmVuZGVyaW5nLnJlbmRlckNvbXBvbmVudFRvU3RyaW5nLAorICB1bm1vdW50QW5kUmVsZWFzZVJl
YWN0Um9vdE5vZGU6IFJlYWN0TW91bnQudW5tb3VudEFuZFJlbGVhc2VSZWFjdFJvb3ROb2RlLAor
ICBpc1ZhbGlkQ29tcG9uZW50OiBSZWFjdENvbXBvbmVudC5pc1ZhbGlkQ29tcG9uZW50Cit9Owor
Cittb2R1bGUuZXhwb3J0cyA9IFJlYWN0OworCit9LHsiLi9SZWFjdENvbXBvbmVudCI6MjIsIi4v
UmVhY3RDb21wb3NpdGVDb21wb25lbnQiOjIzLCIuL1JlYWN0RE9NIjoyNSwiLi9SZWFjdERlZmF1
bHRJbmplY3Rpb24iOjMyLCIuL1JlYWN0TW91bnQiOjM4LCIuL1JlYWN0UHJvcFR5cGVzIjo0NCwi
Li9SZWFjdFNlcnZlclJlbmRlcmluZyI6NDZ9XSwyMjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUs
ZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgorICog
TGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNl
bnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNl
IHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vu
c2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAK
KyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGlu
IHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBk
aXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9S
IENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBT
ZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlz
c2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBAcHJv
dmlkZXNNb2R1bGUgUmVhY3RDb21wb25lbnQKKyAqLworCisvKmpzbGludCBldmlsOiB0cnVlICov
CisKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIFJlYWN0Q3VycmVudE93bmVyID0gcmVxdWlyZSgiLi9S
ZWFjdEN1cnJlbnRPd25lciIpOwordmFyIFJlYWN0RE9NSURPcGVyYXRpb25zID0gcmVxdWlyZSgi
Li9SZWFjdERPTUlET3BlcmF0aW9ucyIpOwordmFyIFJlYWN0SUQgPSByZXF1aXJlKCIuL1JlYWN0
SUQiKTsKK3ZhciBSZWFjdE1vdW50ID0gcmVxdWlyZSgiLi9SZWFjdE1vdW50Iik7Cit2YXIgUmVh
Y3RPd25lciA9IHJlcXVpcmUoIi4vUmVhY3RPd25lciIpOwordmFyIFJlYWN0UmVjb25jaWxlVHJh
bnNhY3Rpb24gPSByZXF1aXJlKCIuL1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24iKTsKK3ZhciBS
ZWFjdFVwZGF0ZXMgPSByZXF1aXJlKCIuL1JlYWN0VXBkYXRlcyIpOworCit2YXIgaW52YXJpYW50
ID0gcmVxdWlyZSgiLi9pbnZhcmlhbnQiKTsKK3ZhciBrZXlNaXJyb3IgPSByZXF1aXJlKCIuL2tl
eU1pcnJvciIpOwordmFyIG1lcmdlID0gcmVxdWlyZSgiLi9tZXJnZSIpOworCisvKioKKyAqIFBy
b3Aga2V5IHRoYXQgcmVmZXJlbmNlcyBhIGNvbXBvbmVudCdzIG93bmVyLgorICogQHByaXZhdGUK
KyAqLwordmFyIE9XTkVSID0gJ3tvd25lcn0nOworCisvKioKKyAqIFByb3BzIGtleSB0aGF0IGRl
dGVybWluZXMgaWYgYSBjb21wb25lbnQncyBrZXkgd2FzIGFscmVhZHkgdmFsaWRhdGVkLgorICog
QHByaXZhdGUKKyAqLwordmFyIElTX0tFWV9WQUxJREFURUQgPSAne2lzLmtleS52YWxpZGF0ZWR9
JzsKKworLyoqCisgKiBFdmVyeSBSZWFjdCBjb21wb25lbnQgaXMgaW4gb25lIG9mIHRoZXNlIGxp
ZmUgY3ljbGVzLgorICovCit2YXIgQ29tcG9uZW50TGlmZUN5Y2xlID0ga2V5TWlycm9yKHsKKyAg
LyoqCisgICAqIE1vdW50ZWQgY29tcG9uZW50cyBoYXZlIGEgRE9NIG5vZGUgcmVwcmVzZW50YXRp
b24gYW5kIGFyZSBjYXBhYmxlIG9mCisgICAqIHJlY2VpdmluZyBuZXcgcHJvcHMuCisgICAqLwor
ICBNT1VOVEVEOiBudWxsLAorICAvKioKKyAgICogVW5tb3VudGVkIGNvbXBvbmVudHMgYXJlIGlu
YWN0aXZlIGFuZCBjYW5ub3QgcmVjZWl2ZSBuZXcgcHJvcHMuCisgICAqLworICBVTk1PVU5URUQ6
IG51bGwKK30pOworCisvKioKKyAqIFdhcm4gaWYgdGhlcmUncyBubyBrZXkgZXhwbGljaXRseSBz
ZXQgb24gZHluYW1pYyBhcnJheXMgb2YgY2hpbGRyZW4uCisgKiBUaGlzIGFsbG93cyB1cyB0byBr
ZWVwIHRyYWNrIG9mIGNoaWxkcmVuIGJldHdlZW4gdXBkYXRlcy4KKyAqLworCit2YXIgb3duZXJI
YXNXYXJuZWQgPSB7fTsKKworLyoqCisgKiBXYXJuIGlmIHRoZSBjb21wb25lbnQgZG9lc24ndCBo
YXZlIGFuIGV4cGxpY2l0IGtleSBhc3NpZ25lZCB0byBpdC4KKyAqIFRoaXMgY29tcG9uZW50IGlz
IGluIGFuIGFycmF5LiBUaGUgYXJyYXkgY291bGQgZ3JvdyBhbmQgc2hyaW5rIG9yIGJlCisgKiBy
ZW9yZGVyZWQuIEFsbCBjaGlsZHJlbiwgdGhhdCBoYXNuJ3QgYWxyZWFkeSBiZWVuIHZhbGlkYXRl
ZCwgYXJlIHJlcXVpcmVkIHRvCisgKiBoYXZlIGEgImtleSIgcHJvcGVydHkgYXNzaWduZWQgdG8g
aXQuCisgKgorICogQGludGVybmFsCisgKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBjb21wb25l
bnQgQ29tcG9uZW50IHRoYXQgcmVxdWlyZXMgYSBrZXkuCisgKi8KK2Z1bmN0aW9uIHZhbGlkYXRl
RXhwbGljaXRLZXkoY29tcG9uZW50KSB7CisgIGlmIChjb21wb25lbnRbSVNfS0VZX1ZBTElEQVRF
RF0gfHwgY29tcG9uZW50LnByb3BzLmtleSAhPSBudWxsKSB7CisgICAgcmV0dXJuOworICB9Cisg
IGNvbXBvbmVudFtJU19LRVlfVkFMSURBVEVEXSA9IHRydWU7CisKKyAgLy8gV2UgY2FuJ3QgcHJv
dmlkZSBmcmllbmRseSB3YXJuaW5ncyBmb3IgdG9wIGxldmVsIGNvbXBvbmVudHMuCisgIGlmICgh
UmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkgeworICAgIHJldHVybjsKKyAgfQorCisgIC8vIE5h
bWUgb2YgdGhlIGNvbXBvbmVudCB3aG9zZSByZW5kZXIgbWV0aG9kIHRyaWVkIHRvIHBhc3MgY2hp
bGRyZW4uCisgIHZhciBjdXJyZW50TmFtZSA9IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQuY29u
c3RydWN0b3IuZGlzcGxheU5hbWU7CisgIGlmIChvd25lckhhc1dhcm5lZC5oYXNPd25Qcm9wZXJ0
eShjdXJyZW50TmFtZSkpIHsKKyAgICByZXR1cm47CisgIH0KKyAgb3duZXJIYXNXYXJuZWRbY3Vy
cmVudE5hbWVdID0gdHJ1ZTsKKworICB2YXIgbWVzc2FnZSA9ICdFYWNoIGNoaWxkIGluIGFuIGFy
cmF5IHNob3VsZCBoYXZlIGEgdW5pcXVlICJrZXkiIHByb3AuICcgKworICAgICAgICAgICAgICAg
ICdDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiAnICsgY3VycmVudE5hbWUgKyAnLic7CisgIGlm
ICghY29tcG9uZW50LmlzT3duZWRCeShSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSkgeworICAg
IC8vIE5hbWUgb2YgdGhlIGNvbXBvbmVudCB0aGF0IG9yaWdpbmFsbHkgY3JlYXRlZCB0aGlzIGNo
aWxkLgorICAgIHZhciBjaGlsZE93bmVyTmFtZSA9CisgICAgICBjb21wb25lbnQucHJvcHNbT1dO
RVJdICYmIGNvbXBvbmVudC5wcm9wc1tPV05FUl0uY29uc3RydWN0b3IuZGlzcGxheU5hbWU7CisK
KyAgICAvLyBVc3VhbGx5IHRoZSBjdXJyZW50IG93bmVyIGlzIHRoZSBvZmZlbmRlciwgYnV0IGlm
IGl0IGFjY2VwdHMKKyAgICAvLyBjaGlsZHJlbiBhcyBhIHByb3BlcnR5LCBpdCBtYXkgYmUgdGhl
IGNyZWF0b3Igb2YgdGhlIGNoaWxkIHRoYXQncworICAgIC8vIHJlc3BvbnNpYmxlIGZvciBhc3Np
Z25pbmcgaXQgYSBrZXkuCisgICAgbWVzc2FnZSArPSAnIEl0IHdhcyBwYXNzZWQgYSBjaGlsZCBm
cm9tICcgKyBjaGlsZE93bmVyTmFtZSArICcuJzsKKyAgfQorCisgIGNvbnNvbGUud2FybihtZXNz
YWdlKTsKK30KKworLyoqCisgKiBFbnN1cmUgdGhhdCBldmVyeSBjb21wb25lbnQgZWl0aGVyIGlz
IHBhc3NlZCBpbiBhIHN0YXRpYyBsb2NhdGlvbiBvciwgaWYKKyAqIGlmIGl0J3MgcGFzc2VkIGlu
IGFuIGFycmF5LCBoYXMgYW4gZXhwbGljaXQga2V5IHByb3BlcnR5IGRlZmluZWQuCisgKgorICog
QGludGVybmFsCisgKiBAcGFyYW0geyp9IGNvbXBvbmVudCBTdGF0aWNhbGx5IHBhc3NlZCBjaGls
ZCBvZiBhbnkgdHlwZS4KKyAqIEByZXR1cm4ge2Jvb2xlYW59CisgKi8KK2Z1bmN0aW9uIHZhbGlk
YXRlQ2hpbGRLZXlzKGNvbXBvbmVudCkgeworICBpZiAoQXJyYXkuaXNBcnJheShjb21wb25lbnQp
KSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21wb25lbnQubGVuZ3RoOyBpKyspIHsKKyAg
ICAgIHZhciBjaGlsZCA9IGNvbXBvbmVudFtpXTsKKyAgICAgIGlmIChSZWFjdENvbXBvbmVudC5p
c1ZhbGlkQ29tcG9uZW50KGNoaWxkKSkgeworICAgICAgICB2YWxpZGF0ZUV4cGxpY2l0S2V5KGNo
aWxkKTsKKyAgICAgIH0KKyAgICB9CisgIH0gZWxzZSBpZiAoUmVhY3RDb21wb25lbnQuaXNWYWxp
ZENvbXBvbmVudChjb21wb25lbnQpKSB7CisgICAgLy8gVGhpcyBjb21wb25lbnQgd2FzIHBhc3Nl
ZCBpbiBhIHZhbGlkIGxvY2F0aW9uLgorICAgIGNvbXBvbmVudFtJU19LRVlfVkFMSURBVEVEXSA9
IHRydWU7CisgIH0KK30KKworLyoqCisgKiBDb21wb25lbnRzIGFyZSB0aGUgYmFzaWMgdW5pdHMg
b2YgY29tcG9zaXRpb24gaW4gUmVhY3QuCisgKgorICogRXZlcnkgY29tcG9uZW50IGFjY2VwdHMg
YSBzZXQgb2Yga2V5ZWQgaW5wdXQgcGFyYW1ldGVycyBrbm93biBhcyAicHJvcHMiIHRoYXQKKyAq
IGFyZSBpbml0aWFsaXplZCBieSB0aGUgY29uc3RydWN0b3IuIE9uY2UgYSBjb21wb25lbnQgaXMg
bW91bnRlZCwgdGhlIHByb3BzCisgKiBjYW4gYmUgbXV0YXRlZCB1c2luZyBgc2V0UHJvcHNgIG9y
IGByZXBsYWNlUHJvcHNgLgorICoKKyAqIEV2ZXJ5IGNvbXBvbmVudCBpcyBjYXBhYmxlIG9mIHRo
ZSBmb2xsb3dpbmcgb3BlcmF0aW9uczoKKyAqCisgKiAgIGBtb3VudENvbXBvbmVudGAKKyAqICAg
ICBJbml0aWFsaXplcyB0aGUgY29tcG9uZW50LCByZW5kZXJzIG1hcmt1cCwgYW5kIHJlZ2lzdGVy
cyBldmVudCBsaXN0ZW5lcnMuCisgKgorICogICBgcmVjZWl2ZVByb3BzYAorICogICAgIFVwZGF0
ZXMgdGhlIHJlbmRlcmVkIERPTSBub2RlcyBnaXZlbiBhIG5ldyBzZXQgb2YgcHJvcHMuCisgKgor
ICogICBgdW5tb3VudENvbXBvbmVudGAKKyAqICAgICBSZWxlYXNlcyBhbnkgcmVzb3VyY2VzIGFs
bG9jYXRlZCBieSB0aGlzIGNvbXBvbmVudC4KKyAqCisgKiBDb21wb25lbnRzIGNhbiBhbHNvIGJl
ICJvd25lZCIgYnkgb3RoZXIgY29tcG9uZW50cy4gQmVpbmcgb3duZWQgYnkgYW5vdGhlcgorICog
Y29tcG9uZW50IG1lYW5zIGJlaW5nIGNvbnN0cnVjdGVkIGJ5IHRoYXQgY29tcG9uZW50LiBUaGlz
IGlzIGRpZmZlcmVudCBmcm9tCisgKiBiZWluZyB0aGUgY2hpbGQgb2YgYSBjb21wb25lbnQsIHdo
aWNoIG1lYW5zIGhhdmluZyBhIERPTSByZXByZXNlbnRhdGlvbiB0aGF0CisgKiBpcyBhIGNoaWxk
IG9mIHRoZSBET00gcmVwcmVzZW50YXRpb24gb2YgdGhhdCBjb21wb25lbnQuCisgKgorICogQGNs
YXNzIFJlYWN0Q29tcG9uZW50CisgKi8KK3ZhciBSZWFjdENvbXBvbmVudCA9IHsKKworICAvKioK
KyAgICogQHBhcmFtIHs/b2JqZWN0fSBvYmplY3QKKyAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1
ZSBpZiBgb2JqZWN0YCBpcyBhIHZhbGlkIGNvbXBvbmVudC4KKyAgICogQGZpbmFsCisgICAqLwor
ICBpc1ZhbGlkQ29tcG9uZW50OiBmdW5jdGlvbihvYmplY3QpIHsKKyAgICByZXR1cm4gISEoCisg
ICAgICBvYmplY3QgJiYKKyAgICAgIHR5cGVvZiBvYmplY3QubW91bnRDb21wb25lbnRJbnRvTm9k
ZSA9PT0gJ2Z1bmN0aW9uJyAmJgorICAgICAgdHlwZW9mIG9iamVjdC5yZWNlaXZlUHJvcHMgPT09
ICdmdW5jdGlvbicKKyAgICApOworICB9LAorCisgIC8qKgorICAgKiBHZW5lcmF0ZSBhIGtleSBz
dHJpbmcgdGhhdCBpZGVudGlmaWVzIGEgY29tcG9uZW50IHdpdGhpbiBhIHNldC4KKyAgICoKKyAg
ICogQHBhcmFtIHsqfSBjb21wb25lbnQgQSBjb21wb25lbnQgdGhhdCBjb3VsZCBjb250YWluIGEg
bWFudWFsIGtleS4KKyAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IEluZGV4IHRoYXQgaXMgdXNl
ZCBpZiBhIG1hbnVhbCBrZXkgaXMgbm90IHByb3ZpZGVkLgorICAgKiBAcmV0dXJuIHtzdHJpbmd9
CisgICAqIEBpbnRlcm5hbAorICAgKi8KKyAgZ2V0S2V5OiBmdW5jdGlvbihjb21wb25lbnQsIGlu
ZGV4KSB7CisgICAgaWYgKGNvbXBvbmVudCAmJiBjb21wb25lbnQucHJvcHMgJiYgY29tcG9uZW50
LnByb3BzLmtleSAhPSBudWxsKSB7CisgICAgICAvLyBFeHBsaWNpdCBrZXkKKyAgICAgIHJldHVy
biAnJyArIGNvbXBvbmVudC5wcm9wcy5rZXk7CisgICAgfQorICAgIC8vIEltcGxpY2l0IGtleSBk
ZXRlcm1pbmVkIGJ5IHRoZSBpbmRleCBpbiB0aGUgc2V0CisgICAgcmV0dXJuICcnICsgaW5kZXg7
CisgIH0sCisKKyAgLyoqCisgICAqIEBpbnRlcm5hbAorICAgKi8KKyAgTGlmZUN5Y2xlOiBDb21w
b25lbnRMaWZlQ3ljbGUsCisKKyAgLyoqCisgICAqIFJlYWN0IHJlZmVyZW5jZXMgYFJlYWN0RE9N
SURPcGVyYXRpb25zYCB1c2luZyB0aGlzIHByb3BlcnR5IGluIG9yZGVyIHRvCisgICAqIGFsbG93
IGRlcGVuZGVuY3kgaW5qZWN0aW9uLgorICAgKgorICAgKiBAaW50ZXJuYWwKKyAgICovCisgIERP
TUlET3BlcmF0aW9uczogUmVhY3RET01JRE9wZXJhdGlvbnMsCisKKyAgLyoqCisgICAqIFJlYWN0
IHJlZmVyZW5jZXMgYFJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb25gIHVzaW5nIHRoaXMgcHJvcGVy
dHkgaW4gb3JkZXIKKyAgICogdG8gYWxsb3cgZGVwZW5kZW5jeSBpbmplY3Rpb24uCisgICAqCisg
ICAqIEBpbnRlcm5hbAorICAgKi8KKyAgUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbjogUmVhY3RS
ZWNvbmNpbGVUcmFuc2FjdGlvbiwKKworICAvKioKKyAgICogQHBhcmFtIHtvYmplY3R9IERPTUlE
T3BlcmF0aW9ucworICAgKiBAZmluYWwKKyAgICovCisgIHNldERPTU9wZXJhdGlvbnM6IGZ1bmN0
aW9uKERPTUlET3BlcmF0aW9ucykgeworICAgIFJlYWN0Q29tcG9uZW50LkRPTUlET3BlcmF0aW9u
cyA9IERPTUlET3BlcmF0aW9uczsKKyAgfSwKKworICAvKioKKyAgICogQHBhcmFtIHtUcmFuc2Fj
dGlvbn0gUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbgorICAgKiBAZmluYWwKKyAgICovCisgIHNl
dFJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb246IGZ1bmN0aW9uKFJlYWN0UmVjb25jaWxlVHJhbnNh
Y3Rpb24pIHsKKyAgICBSZWFjdENvbXBvbmVudC5SZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uID0g
UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbjsKKyAgfSwKKworICAvKioKKyAgICogQmFzZSBmdW5j
dGlvbmFsaXR5IGZvciBldmVyeSBSZWFjdENvbXBvbmVudCBjb25zdHJ1Y3Rvci4KKyAgICoKKyAg
ICogQGxlbmRzIHtSZWFjdENvbXBvbmVudC5wcm90b3R5cGV9CisgICAqLworICBNaXhpbjogewor
CisgICAgLyoqCisgICAgICogQ2hlY2tzIHdoZXRoZXIgb3Igbm90IHRoaXMgY29tcG9uZW50IGlz
IG1vdW50ZWQuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIG1vdW50
ZWQsIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgKiBAZmluYWwKKyAgICAgKiBAcHJvdGVjdGVkCisg
ICAgICovCisgICAgaXNNb3VudGVkOiBmdW5jdGlvbigpIHsKKyAgICAgIHJldHVybiB0aGlzLl9s
aWZlQ3ljbGVTdGF0ZSA9PT0gQ29tcG9uZW50TGlmZUN5Y2xlLk1PVU5URUQ7CisgICAgfSwKKwor
ICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIERPTSBub2RlIHJlbmRlcmVkIGJ5IHRoaXMgY29t
cG9uZW50LgorICAgICAqCisgICAgICogQHJldHVybiB7RE9NRWxlbWVudH0gVGhlIHJvb3Qgbm9k
ZSBvZiB0aGlzIGNvbXBvbmVudC4KKyAgICAgKiBAZmluYWwKKyAgICAgKiBAcHJvdGVjdGVkCisg
ICAgICovCisgICAgZ2V0RE9NTm9kZTogZnVuY3Rpb24oKSB7CisgICAgICBpbnZhcmlhbnQoCisg
ICAgICAgIHRoaXMuaXNNb3VudGVkKCksCisgICAgICAgICdnZXRET01Ob2RlKCk6IEEgY29tcG9u
ZW50IG11c3QgYmUgbW91bnRlZCB0byBoYXZlIGEgRE9NIG5vZGUuJworICAgICAgKTsKKyAgICAg
IHJldHVybiBSZWFjdElELmdldE5vZGUodGhpcy5fcm9vdE5vZGVJRCk7CisgICAgfSwKKworICAg
IC8qKgorICAgICAqIFNldHMgYSBzdWJzZXQgb2YgdGhlIHByb3BzLgorICAgICAqCisgICAgICog
QHBhcmFtIHtvYmplY3R9IHBhcnRpYWxQcm9wcyBTdWJzZXQgb2YgdGhlIG5leHQgcHJvcHMuCisg
ICAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBwcm9wcyBhcmUg
dXBkYXRlZC4KKyAgICAgKiBAZmluYWwKKyAgICAgKiBAcHVibGljCisgICAgICovCisgICAgc2V0
UHJvcHM6IGZ1bmN0aW9uKHBhcnRpYWxQcm9wcywgY2FsbGJhY2spIHsKKyAgICAgIC8vIE1lcmdl
IHdpdGggYF9wZW5kaW5nUHJvcHNgIGlmIGl0IGV4aXN0cywgb3RoZXJ3aXNlIHdpdGggZXhpc3Rp
bmcgcHJvcHMuCisgICAgICB0aGlzLnJlcGxhY2VQcm9wcygKKyAgICAgICAgbWVyZ2UodGhpcy5f
cGVuZGluZ1Byb3BzIHx8IHRoaXMucHJvcHMsIHBhcnRpYWxQcm9wcyksCisgICAgICAgIGNhbGxi
YWNrCisgICAgICApOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBSZXBsYWNlcyBhbGwgb2Yg
dGhlIHByb3BzLgorICAgICAqCisgICAgICogQHBhcmFtIHtvYmplY3R9IHByb3BzIE5ldyBwcm9w
cy4KKyAgICAgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIHByb3Bz
IGFyZSB1cGRhdGVkLgorICAgICAqIEBmaW5hbAorICAgICAqIEBwdWJsaWMKKyAgICAgKi8KKyAg
ICByZXBsYWNlUHJvcHM6IGZ1bmN0aW9uKHByb3BzLCBjYWxsYmFjaykgeworICAgICAgaW52YXJp
YW50KAorICAgICAgICAhdGhpcy5wcm9wc1tPV05FUl0sCisgICAgICAgICdyZXBsYWNlUHJvcHMo
Li4uKTogWW91IGNhbGxlZCBgc2V0UHJvcHNgIG9yIGByZXBsYWNlUHJvcHNgIG9uIGEgJyArCisg
ICAgICAgICdjb21wb25lbnQgd2l0aCBhbiBvd25lci4gVGhpcyBpcyBhbiBhbnRpLXBhdHRlcm4g
c2luY2UgcHJvcHMgd2lsbCAnICsKKyAgICAgICAgJ2dldCByZWFjdGl2ZWx5IHVwZGF0ZWQgd2hl
biByZW5kZXJlZC4gSW5zdGVhZCwgY2hhbmdlIHRoZSBvd25lclwncyAnICsKKyAgICAgICAgJ2By
ZW5kZXJgIG1ldGhvZCB0byBwYXNzIHRoZSBjb3JyZWN0IHZhbHVlIGFzIHByb3BzIHRvIHRoZSBj
b21wb25lbnQgJyArCisgICAgICAgICd3aGVyZSBpdCBpcyBjcmVhdGVkLicKKyAgICAgICk7Cisg
ICAgICB0aGlzLl9wZW5kaW5nUHJvcHMgPSBwcm9wczsKKyAgICAgIFJlYWN0VXBkYXRlcy5lbnF1
ZXVlVXBkYXRlKHRoaXMsIGNhbGxiYWNrKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQmFz
ZSBjb25zdHJ1Y3RvciBmb3IgYWxsIFJlYWN0IGNvbXBvbmVudC4KKyAgICAgKgorICAgICAqIFN1
YmNsYXNzZXMgdGhhdCBvdmVycmlkZSB0aGlzIG1ldGhvZCBzaG91bGQgbWFrZSBzdXJlIHRvIGlu
dm9rZQorICAgICAqIGBSZWFjdENvbXBvbmVudC5NaXhpbi5jb25zdHJ1Y3QuY2FsbCh0aGlzLCAu
Li4pYC4KKyAgICAgKgorICAgICAqIEBwYXJhbSB7P29iamVjdH0gaW5pdGlhbFByb3BzCisgICAg
ICogQHBhcmFtIHsqfSBjaGlsZHJlbgorICAgICAqIEBpbnRlcm5hbAorICAgICAqLworICAgIGNv
bnN0cnVjdDogZnVuY3Rpb24oaW5pdGlhbFByb3BzLCBjaGlsZHJlbikgeworICAgICAgdGhpcy5w
cm9wcyA9IGluaXRpYWxQcm9wcyB8fCB7fTsKKyAgICAgIC8vIFJlY29yZCB0aGUgY29tcG9uZW50
IHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB0aGlzIGNvbXBvbmVudC4KKyAgICAgIHRoaXMucHJv
cHNbT1dORVJdID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudDsKKyAgICAgIC8vIEFsbCBjb21w
b25lbnRzIHN0YXJ0IHVubW91bnRlZC4KKyAgICAgIHRoaXMuX2xpZmVDeWNsZVN0YXRlID0gQ29t
cG9uZW50TGlmZUN5Y2xlLlVOTU9VTlRFRDsKKworICAgICAgdGhpcy5fcGVuZGluZ1Byb3BzID0g
bnVsbDsKKyAgICAgIHRoaXMuX3BlbmRpbmdDYWxsYmFja3MgPSBudWxsOworCisgICAgICAvLyBD
aGlsZHJlbiBjYW4gYmUgbW9yZSB0aGFuIG9uZSBhcmd1bWVudAorICAgICAgdmFyIGNoaWxkcmVu
TGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7CisgICAgICBpZiAoY2hpbGRyZW5MZW5ndGgg
PT09IDEpIHsKKyAgICAgICAgaWYgKHRydWUpIHsKKyAgICAgICAgICB2YWxpZGF0ZUNoaWxkS2V5
cyhjaGlsZHJlbik7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5wcm9wcy5jaGlsZHJlbiA9IGNo
aWxkcmVuOworICAgICAgfSBlbHNlIGlmIChjaGlsZHJlbkxlbmd0aCA+IDEpIHsKKyAgICAgICAg
dmFyIGNoaWxkQXJyYXkgPSBBcnJheShjaGlsZHJlbkxlbmd0aCk7CisgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgY2hpbGRyZW5MZW5ndGg7IGkrKykgeworICAgICAgICAgIGlmICh0cnVlKSB7
CisgICAgICAgICAgICB2YWxpZGF0ZUNoaWxkS2V5cyhhcmd1bWVudHNbaSArIDFdKTsKKyAgICAg
ICAgICB9CisgICAgICAgICAgY2hpbGRBcnJheVtpXSA9IGFyZ3VtZW50c1tpICsgMV07CisgICAg
ICAgIH0KKyAgICAgICAgdGhpcy5wcm9wcy5jaGlsZHJlbiA9IGNoaWxkQXJyYXk7CisgICAgICB9
CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEluaXRpYWxpemVzIHRoZSBjb21wb25lbnQsIHJl
bmRlcnMgbWFya3VwLCBhbmQgcmVnaXN0ZXJzIGV2ZW50IGxpc3RlbmVycy4KKyAgICAgKgorICAg
ICAqIE5PVEU6IFRoaXMgZG9lcyBub3QgaW5zZXJ0IGFueSBub2RlcyBpbnRvIHRoZSBET00uCisg
ICAgICoKKyAgICAgKiBTdWJjbGFzc2VzIHRoYXQgb3ZlcnJpZGUgdGhpcyBtZXRob2Qgc2hvdWxk
IG1ha2Ugc3VyZSB0byBpbnZva2UKKyAgICAgKiBgUmVhY3RDb21wb25lbnQuTWl4aW4ubW91bnRD
b21wb25lbnQuY2FsbCh0aGlzLCAuLi4pYC4KKyAgICAgKgorICAgICAqIEBwYXJhbSB7c3RyaW5n
fSByb290SUQgRE9NIElEIG9mIHRoZSByb290IG5vZGUuCisgICAgICogQHBhcmFtIHtSZWFjdFJl
Y29uY2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvbgorICAgICAqIEByZXR1cm4gez9zdHJpbmd9
IFJlbmRlcmVkIG1hcmt1cCB0byBiZSBpbnNlcnRlZCBpbnRvIHRoZSBET00uCisgICAgICogQGlu
dGVybmFsCisgICAgICovCisgICAgbW91bnRDb21wb25lbnQ6IGZ1bmN0aW9uKHJvb3RJRCwgdHJh
bnNhY3Rpb24pIHsKKyAgICAgIGludmFyaWFudCgKKyAgICAgICAgIXRoaXMuaXNNb3VudGVkKCks
CisgICAgICAgICdtb3VudENvbXBvbmVudCglcywgLi4uKTogQ2FuIG9ubHkgbW91bnQgYW4gdW5t
b3VudGVkIGNvbXBvbmVudC4nLAorICAgICAgICByb290SUQKKyAgICAgICk7CisgICAgICB2YXIg
cHJvcHMgPSB0aGlzLnByb3BzOworICAgICAgaWYgKHByb3BzLnJlZiAhPSBudWxsKSB7CisgICAg
ICAgIFJlYWN0T3duZXIuYWRkQ29tcG9uZW50QXNSZWZUbyh0aGlzLCBwcm9wcy5yZWYsIHByb3Bz
W09XTkVSXSk7CisgICAgICB9CisgICAgICB0aGlzLl9yb290Tm9kZUlEID0gcm9vdElEOworICAg
ICAgdGhpcy5fbGlmZUN5Y2xlU3RhdGUgPSBDb21wb25lbnRMaWZlQ3ljbGUuTU9VTlRFRDsKKyAg
ICAgIC8vIEVmZmVjdGl2ZWx5OiByZXR1cm4gJyc7CisgICAgfSwKKworICAgIC8qKgorICAgICAq
IFJlbGVhc2VzIGFueSByZXNvdXJjZXMgYWxsb2NhdGVkIGJ5IGBtb3VudENvbXBvbmVudGAuCisg
ICAgICoKKyAgICAgKiBOT1RFOiBUaGlzIGRvZXMgbm90IHJlbW92ZSBhbnkgbm9kZXMgZnJvbSB0
aGUgRE9NLgorICAgICAqCisgICAgICogU3ViY2xhc3NlcyB0aGF0IG92ZXJyaWRlIHRoaXMgbWV0
aG9kIHNob3VsZCBtYWtlIHN1cmUgdG8gaW52b2tlCisgICAgICogYFJlYWN0Q29tcG9uZW50Lk1p
eGluLnVubW91bnRDb21wb25lbnQuY2FsbCh0aGlzKWAuCisgICAgICoKKyAgICAgKiBAaW50ZXJu
YWwKKyAgICAgKi8KKyAgICB1bm1vdW50Q29tcG9uZW50OiBmdW5jdGlvbigpIHsKKyAgICAgIGlu
dmFyaWFudCgKKyAgICAgICAgdGhpcy5pc01vdW50ZWQoKSwKKyAgICAgICAgJ3VubW91bnRDb21w
b25lbnQoKTogQ2FuIG9ubHkgdW5tb3VudCBhIG1vdW50ZWQgY29tcG9uZW50LicKKyAgICAgICk7
CisgICAgICB2YXIgcHJvcHMgPSB0aGlzLnByb3BzOworICAgICAgaWYgKHByb3BzLnJlZiAhPSBu
dWxsKSB7CisgICAgICAgIFJlYWN0T3duZXIucmVtb3ZlQ29tcG9uZW50QXNSZWZGcm9tKHRoaXMs
IHByb3BzLnJlZiwgcHJvcHNbT1dORVJdKTsKKyAgICAgIH0KKyAgICAgIFJlYWN0SUQucHVyZ2VJ
RCh0aGlzLl9yb290Tm9kZUlEKTsKKyAgICAgIHRoaXMuX3Jvb3ROb2RlSUQgPSBudWxsOworICAg
ICAgdGhpcy5fbGlmZUN5Y2xlU3RhdGUgPSBDb21wb25lbnRMaWZlQ3ljbGUuVU5NT1VOVEVEOwor
ICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSByZW5kZXJlZCBET00gbm9kZXMg
Z2l2ZW4gYSBuZXcgc2V0IG9mIHByb3BzLgorICAgICAqCisgICAgICogU3ViY2xhc3NlcyB0aGF0
IG92ZXJyaWRlIHRoaXMgbWV0aG9kIHNob3VsZCBtYWtlIHN1cmUgdG8gaW52b2tlCisgICAgICog
YFJlYWN0Q29tcG9uZW50Lk1peGluLnJlY2VpdmVQcm9wcy5jYWxsKHRoaXMsIC4uLilgLgorICAg
ICAqCisgICAgICogQHBhcmFtIHtvYmplY3R9IG5leHRQcm9wcyBOZXh0IHNldCBvZiBwcm9wZXJ0
aWVzLgorICAgICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rp
b24KKyAgICAgKiBAaW50ZXJuYWwKKyAgICAgKi8KKyAgICByZWNlaXZlUHJvcHM6IGZ1bmN0aW9u
KG5leHRQcm9wcywgdHJhbnNhY3Rpb24pIHsKKyAgICAgIGludmFyaWFudCgKKyAgICAgICAgdGhp
cy5pc01vdW50ZWQoKSwKKyAgICAgICAgJ3JlY2VpdmVQcm9wcyguLi4pOiBDYW4gb25seSB1cGRh
dGUgYSBtb3VudGVkIGNvbXBvbmVudC4nCisgICAgICApOworICAgICAgdGhpcy5fcGVuZGluZ1By
b3BzID0gbmV4dFByb3BzOworICAgICAgdGhpcy5fcGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5KHRy
YW5zYWN0aW9uKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQ2FsbCBgX3BlcmZvcm1VcGRh
dGVJZk5lY2Vzc2FyeWAgd2l0aGluIGEgbmV3IHRyYW5zYWN0aW9uLgorICAgICAqCisgICAgICog
QHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvbgorICAgICAqIEBp
bnRlcm5hbAorICAgICAqLworICAgIHBlcmZvcm1VcGRhdGVJZk5lY2Vzc2FyeTogZnVuY3Rpb24o
KSB7CisgICAgICB2YXIgdHJhbnNhY3Rpb24gPSBSZWFjdENvbXBvbmVudC5SZWFjdFJlY29uY2ls
ZVRyYW5zYWN0aW9uLmdldFBvb2xlZCgpOworICAgICAgdHJhbnNhY3Rpb24ucGVyZm9ybSh0aGlz
Ll9wZXJmb3JtVXBkYXRlSWZOZWNlc3NhcnksIHRoaXMsIHRyYW5zYWN0aW9uKTsKKyAgICAgIFJl
YWN0Q29tcG9uZW50LlJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24ucmVsZWFzZSh0cmFuc2FjdGlv
bik7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIElmIGBfcGVuZGluZ1Byb3BzYCBpcyBzZXQs
IHVwZGF0ZSB0aGUgY29tcG9uZW50LgorICAgICAqCisgICAgICogQHBhcmFtIHtSZWFjdFJlY29u
Y2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvbgorICAgICAqIEBpbnRlcm5hbAorICAgICAqLwor
ICAgIF9wZXJmb3JtVXBkYXRlSWZOZWNlc3Nhcnk6IGZ1bmN0aW9uKHRyYW5zYWN0aW9uKSB7Cisg
ICAgICBpZiAodGhpcy5fcGVuZGluZ1Byb3BzID09IG51bGwpIHsKKyAgICAgICAgcmV0dXJuOwor
ICAgICAgfQorICAgICAgdmFyIHByZXZQcm9wcyA9IHRoaXMucHJvcHM7CisgICAgICB0aGlzLnBy
b3BzID0gdGhpcy5fcGVuZGluZ1Byb3BzOworICAgICAgdGhpcy5fcGVuZGluZ1Byb3BzID0gbnVs
bDsKKyAgICAgIHRoaXMudXBkYXRlQ29tcG9uZW50KHRyYW5zYWN0aW9uLCBwcmV2UHJvcHMpOwor
ICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBjb21wb25lbnQncyBjdXJyZW50
bHkgbW91bnRlZCByZXByZXNlbnRhdGlvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbSB7UmVhY3RS
ZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb24KKyAgICAgKiBAcGFyYW0ge29iamVjdH0g
cHJldlByb3BzCisgICAgICogQGludGVybmFsCisgICAgICovCisgICAgdXBkYXRlQ29tcG9uZW50
OiBmdW5jdGlvbih0cmFuc2FjdGlvbiwgcHJldlByb3BzKSB7CisgICAgICB2YXIgcHJvcHMgPSB0
aGlzLnByb3BzOworICAgICAgLy8gSWYgZWl0aGVyIHRoZSBvd25lciBvciBhIGByZWZgIGhhcyBj
aGFuZ2VkLCBtYWtlIHN1cmUgdGhlIG5ld2VzdCBvd25lcgorICAgICAgLy8gaGFzIHN0b3JlZCBh
IHJlZmVyZW5jZSB0byBgdGhpc2AsIGFuZCB0aGUgcHJldmlvdXMgb3duZXIgKGlmIGRpZmZlcmVu
dCkKKyAgICAgIC8vIGhhcyBmb3Jnb3R0ZW4gdGhlIHJlZmVyZW5jZSB0byBgdGhpc2AuCisgICAg
ICBpZiAocHJvcHNbT1dORVJdICE9PSBwcmV2UHJvcHNbT1dORVJdIHx8IHByb3BzLnJlZiAhPT0g
cHJldlByb3BzLnJlZikgeworICAgICAgICBpZiAocHJldlByb3BzLnJlZiAhPSBudWxsKSB7Cisg
ICAgICAgICAgUmVhY3RPd25lci5yZW1vdmVDb21wb25lbnRBc1JlZkZyb20oCisgICAgICAgICAg
ICB0aGlzLCBwcmV2UHJvcHMucmVmLCBwcmV2UHJvcHNbT1dORVJdCisgICAgICAgICAgKTsKKyAg
ICAgICAgfQorICAgICAgICAvLyBDb3JyZWN0LCBldmVuIGlmIHRoZSBvd25lciBpcyB0aGUgc2Ft
ZSwgYW5kIG9ubHkgdGhlIHJlZiBoYXMgY2hhbmdlZC4KKyAgICAgICAgaWYgKHByb3BzLnJlZiAh
PSBudWxsKSB7CisgICAgICAgICAgUmVhY3RPd25lci5hZGRDb21wb25lbnRBc1JlZlRvKHRoaXMs
IHByb3BzLnJlZiwgcHJvcHNbT1dORVJdKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisK
KyAgICAvKioKKyAgICAgKiBNb3VudHMgdGhpcyBjb21wb25lbnQgYW5kIGluc2VydHMgaXQgaW50
byB0aGUgRE9NLgorICAgICAqCisgICAgICogQHBhcmFtIHtzdHJpbmd9IHJvb3RJRCBET00gSUQg
b2YgdGhlIHJvb3Qgbm9kZS4KKyAgICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGNvbnRhaW5lciBE
T00gZWxlbWVudCB0byBtb3VudCBpbnRvLgorICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvdWxk
UmV1c2VNYXJrdXAgSWYgdHJ1ZSwgZG8gbm90IGluc2VydCBtYXJrdXAKKyAgICAgKiBAZmluYWwK
KyAgICAgKiBAaW50ZXJuYWwKKyAgICAgKiBAc2VlIHtSZWFjdE1vdW50LnJlbmRlckNvbXBvbmVu
dH0KKyAgICAgKi8KKyAgICBtb3VudENvbXBvbmVudEludG9Ob2RlOiBmdW5jdGlvbihyb290SUQs
IGNvbnRhaW5lciwgc2hvdWxkUmV1c2VNYXJrdXApIHsKKyAgICAgIHZhciB0cmFuc2FjdGlvbiA9
IFJlYWN0Q29tcG9uZW50LlJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24uZ2V0UG9vbGVkKCk7Cisg
ICAgICB0cmFuc2FjdGlvbi5wZXJmb3JtKAorICAgICAgICB0aGlzLl9tb3VudENvbXBvbmVudElu
dG9Ob2RlLAorICAgICAgICB0aGlzLAorICAgICAgICByb290SUQsCisgICAgICAgIGNvbnRhaW5l
ciwKKyAgICAgICAgdHJhbnNhY3Rpb24sCisgICAgICAgIHNob3VsZFJldXNlTWFya3VwCisgICAg
ICApOworICAgICAgUmVhY3RDb21wb25lbnQuUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbi5yZWxl
YXNlKHRyYW5zYWN0aW9uKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtzdHJp
bmd9IHJvb3RJRCBET00gSUQgb2YgdGhlIHJvb3Qgbm9kZS4KKyAgICAgKiBAcGFyYW0ge0RPTUVs
ZW1lbnR9IGNvbnRhaW5lciBET00gZWxlbWVudCB0byBtb3VudCBpbnRvLgorICAgICAqIEBwYXJh
bSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb24KKyAgICAgKiBAcGFyYW0g
e2Jvb2xlYW59IHNob3VsZFJldXNlTWFya3VwIElmIHRydWUsIGRvIG5vdCBpbnNlcnQgbWFya3Vw
CisgICAgICogQGZpbmFsCisgICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAgICBfbW91bnRDb21w
b25lbnRJbnRvTm9kZTogZnVuY3Rpb24oCisgICAgICAgIHJvb3RJRCwKKyAgICAgICAgY29udGFp
bmVyLAorICAgICAgICB0cmFuc2FjdGlvbiwKKyAgICAgICAgc2hvdWxkUmV1c2VNYXJrdXApIHsK
KyAgICAgIGludmFyaWFudCgKKyAgICAgICAgY29udGFpbmVyICYmIGNvbnRhaW5lci5ub2RlVHlw
ZSA9PT0gMSwKKyAgICAgICAgJ21vdW50Q29tcG9uZW50SW50b05vZGUoLi4uKTogVGFyZ2V0IGNv
bnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudC4nCisgICAgICApOworICAgICAgdmFyIHJlbmRl
clN0YXJ0ID0gRGF0ZS5ub3coKTsKKyAgICAgIHZhciBtYXJrdXAgPSB0aGlzLm1vdW50Q29tcG9u
ZW50KHJvb3RJRCwgdHJhbnNhY3Rpb24pOworICAgICAgUmVhY3RNb3VudC50b3RhbEluc3RhbnRp
YXRpb25UaW1lICs9IChEYXRlLm5vdygpIC0gcmVuZGVyU3RhcnQpOworCisgICAgICBpZiAoc2hv
dWxkUmV1c2VNYXJrdXApIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorCisgICAgICB2YXIg
aW5qZWN0aW9uU3RhcnQgPSBEYXRlLm5vdygpOworICAgICAgLy8gQXN5bmNocm9ub3VzbHkgaW5q
ZWN0IG1hcmt1cCBieSBlbnN1cmluZyB0aGF0IHRoZSBjb250YWluZXIgaXMgbm90IGluCisgICAg
ICAvLyB0aGUgZG9jdW1lbnQgd2hlbiBzZXR0aW5ncyBpdHMgYGlubmVySFRNTGAuCisgICAgICB2
YXIgcGFyZW50ID0gY29udGFpbmVyLnBhcmVudE5vZGU7CisgICAgICBpZiAocGFyZW50KSB7Cisg
ICAgICAgIHZhciBuZXh0ID0gY29udGFpbmVyLm5leHRTaWJsaW5nOworICAgICAgICBwYXJlbnQu
cmVtb3ZlQ2hpbGQoY29udGFpbmVyKTsKKyAgICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9IG1h
cmt1cDsKKyAgICAgICAgaWYgKG5leHQpIHsKKyAgICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3Jl
KGNvbnRhaW5lciwgbmV4dCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcGFyZW50LmFw
cGVuZENoaWxkKGNvbnRhaW5lcik7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAg
IGNvbnRhaW5lci5pbm5lckhUTUwgPSBtYXJrdXA7CisgICAgICB9CisgICAgICBSZWFjdE1vdW50
LnRvdGFsSW5qZWN0aW9uVGltZSArPSAoRGF0ZS5ub3coKSAtIGluamVjdGlvblN0YXJ0KTsKKyAg
ICB9LAorCisgICAgLyoqCisgICAgICogVW5tb3VudHMgdGhpcyBjb21wb25lbnQgYW5kIHJlbW92
ZXMgaXQgZnJvbSB0aGUgRE9NLgorICAgICAqCisgICAgICogQHBhcmFtIHtET01FbGVtZW50fSBj
b250YWluZXIgRE9NIGVsZW1lbnQgdG8gdW5tb3VudCBmcm9tLgorICAgICAqIEBmaW5hbAorICAg
ICAqIEBpbnRlcm5hbAorICAgICAqIEBzZWUge1JlYWN0TW91bnQudW5tb3VudEFuZFJlbGVhc2VS
ZWFjdFJvb3ROb2RlfQorICAgICAqLworICAgIHVubW91bnRDb21wb25lbnRGcm9tTm9kZTogZnVu
Y3Rpb24oY29udGFpbmVyKSB7CisgICAgICB0aGlzLnVubW91bnRDb21wb25lbnQoKTsKKyAgICAg
IC8vIGh0dHA6Ly9qc3BlcmYuY29tL2VtcHR5aW5nLWEtbm9kZQorICAgICAgd2hpbGUgKGNvbnRh
aW5lci5sYXN0Q2hpbGQpIHsKKyAgICAgICAgY29udGFpbmVyLnJlbW92ZUNoaWxkKGNvbnRhaW5l
ci5sYXN0Q2hpbGQpOworICAgICAgfQorICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBDaGVja3Mg
aWYgdGhpcyBjb21wb25lbnQgaXMgb3duZWQgYnkgdGhlIHN1cHBsaWVkIGBvd25lcmAgY29tcG9u
ZW50LgorICAgICAqCisgICAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gb3duZXIgQ29tcG9u
ZW50IHRvIGNoZWNrLgorICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYG93bmVyc2Ag
b3ducyB0aGlzIGNvbXBvbmVudC4KKyAgICAgKiBAZmluYWwKKyAgICAgKiBAaW50ZXJuYWwKKyAg
ICAgKi8KKyAgICBpc093bmVkQnk6IGZ1bmN0aW9uKG93bmVyKSB7CisgICAgICByZXR1cm4gdGhp
cy5wcm9wc1tPV05FUl0gPT09IG93bmVyOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBHZXRz
IGFub3RoZXIgY29tcG9uZW50LCB0aGF0IHNoYXJlcyB0aGUgc2FtZSBvd25lciBhcyB0aGlzIG9u
ZSwgYnkgcmVmLgorICAgICAqCisgICAgICogQHBhcmFtIHtzdHJpbmd9IHJlZiBvZiBhIHNpYmxp
bmcgQ29tcG9uZW50LgorICAgICAqIEByZXR1cm4gez9SZWFjdENvbXBvbmVudH0gdGhlIGFjdHVh
bCBzaWJsaW5nIENvbXBvbmVudC4KKyAgICAgKiBAZmluYWwKKyAgICAgKiBAaW50ZXJuYWwKKyAg
ICAgKi8KKyAgICBnZXRTaWJsaW5nQnlSZWY6IGZ1bmN0aW9uKHJlZikgeworICAgICAgdmFyIG93
bmVyID0gdGhpcy5wcm9wc1tPV05FUl07CisgICAgICBpZiAoIW93bmVyIHx8ICFvd25lci5yZWZz
KSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgICAgfQorICAgICAgcmV0dXJuIG93bmVyLnJl
ZnNbcmVmXTsKKyAgICB9CisKKyAgfQorCit9OworCittb2R1bGUuZXhwb3J0cyA9IFJlYWN0Q29t
cG9uZW50OworCit9LHsiLi9SZWFjdEN1cnJlbnRPd25lciI6MjQsIi4vUmVhY3RET01JRE9wZXJh
dGlvbnMiOjI3LCIuL1JlYWN0SUQiOjM1LCIuL1JlYWN0TW91bnQiOjM4LCIuL1JlYWN0T3duZXIi
OjQyLCIuL1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24iOjQ1LCIuL1JlYWN0VXBkYXRlcyI6NDgs
Ii4vaW52YXJpYW50Ijo3NSwiLi9rZXlNaXJyb3IiOjc4LCIuL21lcmdlIjo4MX1dLDIzOltmdW5j
dGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKyhmdW5jdGlvbigpey8qKgorICogQ29weXJp
Z2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hl
IExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVz
ZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlv
dSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cu
YXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBi
eSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRp
c3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIg
QkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwg
ZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNw
ZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25z
IHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBSZWFjdENvbXBvc2l0
ZUNvbXBvbmVudAorICovCisKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIFJlYWN0Q29tcG9uZW50ID0g
cmVxdWlyZSgiLi9SZWFjdENvbXBvbmVudCIpOwordmFyIFJlYWN0Q3VycmVudE93bmVyID0gcmVx
dWlyZSgiLi9SZWFjdEN1cnJlbnRPd25lciIpOwordmFyIFJlYWN0T3duZXIgPSByZXF1aXJlKCIu
L1JlYWN0T3duZXIiKTsKK3ZhciBSZWFjdFByb3BUcmFuc2ZlcmVyID0gcmVxdWlyZSgiLi9SZWFj
dFByb3BUcmFuc2ZlcmVyIik7Cit2YXIgUmVhY3RVcGRhdGVzID0gcmVxdWlyZSgiLi9SZWFjdFVw
ZGF0ZXMiKTsKKwordmFyIGludmFyaWFudCA9IHJlcXVpcmUoIi4vaW52YXJpYW50Iik7Cit2YXIg
a2V5TWlycm9yID0gcmVxdWlyZSgiLi9rZXlNaXJyb3IiKTsKK3ZhciBtZXJnZSA9IHJlcXVpcmUo
Ii4vbWVyZ2UiKTsKK3ZhciBtaXhJbnRvID0gcmVxdWlyZSgiLi9taXhJbnRvIik7CisKKy8qKgor
ICogUG9saWNpZXMgdGhhdCBkZXNjcmliZSBtZXRob2RzIGluIGBSZWFjdENvbXBvc2l0ZUNvbXBv
bmVudEludGVyZmFjZWAuCisgKi8KK3ZhciBTcGVjUG9saWN5ID0ga2V5TWlycm9yKHsKKyAgLyoq
CisgICAqIFRoZXNlIG1ldGhvZHMgbWF5IGJlIGRlZmluZWQgb25seSBvbmNlIGJ5IHRoZSBjbGFz
cyBzcGVjaWZpY2F0aW9uIG9yIG1peGluLgorICAgKi8KKyAgREVGSU5FX09OQ0U6IG51bGwsCisg
IC8qKgorICAgKiBUaGVzZSBtZXRob2RzIG1heSBiZSBkZWZpbmVkIGJ5IGJvdGggdGhlIGNsYXNz
IHNwZWNpZmljYXRpb24gYW5kIG1peGlucy4KKyAgICogU3Vic2VxdWVudCBkZWZpbml0aW9ucyB3
aWxsIGJlIGNoYWluZWQuIFRoZXNlIG1ldGhvZHMgbXVzdCByZXR1cm4gdm9pZC4KKyAgICovCisg
IERFRklORV9NQU5ZOiBudWxsLAorICAvKioKKyAgICogVGhlc2UgbWV0aG9kcyBhcmUgb3ZlcnJp
ZGluZyB0aGUgYmFzZSBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCBjbGFzcy4KKyAgICovCisgIE9W
RVJSSURFX0JBU0U6IG51bGwKK30pOworCisvKioKKyAqIENvbXBvc2l0ZSBjb21wb25lbnRzIGFy
ZSBoaWdoZXItbGV2ZWwgY29tcG9uZW50cyB0aGF0IGNvbXBvc2Ugb3RoZXIgY29tcG9zaXRlCisg
KiBvciBuYXRpdmUgY29tcG9uZW50cy4KKyAqCisgKiBUbyBjcmVhdGUgYSBuZXcgdHlwZSBvZiBg
UmVhY3RDb21wb3NpdGVDb21wb25lbnRgLCBwYXNzIGEgc3BlY2lmaWNhdGlvbiBvZgorICogeW91
ciBuZXcgY2xhc3MgdG8gYFJlYWN0LmNyZWF0ZUNsYXNzYC4gVGhlIG9ubHkgcmVxdWlyZW1lbnQg
b2YgeW91ciBjbGFzcworICogc3BlY2lmaWNhdGlvbiBpcyB0aGF0IHlvdSBpbXBsZW1lbnQgYSBg
cmVuZGVyYCBtZXRob2QuCisgKgorICogICB2YXIgTXlDb21wb25lbnQgPSBSZWFjdC5jcmVhdGVD
bGFzcyh7CisgKiAgICAgcmVuZGVyOiBmdW5jdGlvbigpIHsKKyAqICAgICAgIHJldHVybiA8ZGl2
PkhlbGxvIFdvcmxkPC9kaXY+OworICogICAgIH0KKyAqICAgfSk7CisgKgorICogVGhlIGNsYXNz
IHNwZWNpZmljYXRpb24gc3VwcG9ydHMgYSBzcGVjaWZpYyBwcm90b2NvbCBvZiBtZXRob2RzIHRo
YXQgaGF2ZQorICogc3BlY2lhbCBtZWFuaW5nIChlLmcuIGByZW5kZXJgKS4gU2VlIGBSZWFjdENv
bXBvc2l0ZUNvbXBvbmVudEludGVyZmFjZWAgZm9yCisgKiBtb3JlIHRoZSBjb21wcmVoZW5zaXZl
IHByb3RvY29sLiBBbnkgb3RoZXIgcHJvcGVydGllcyBhbmQgbWV0aG9kcyBpbiB0aGUKKyAqIGNs
YXNzIHNwZWNpZmljYXRpb24gd2lsbCBhdmFpbGFibGUgb24gdGhlIHByb3RvdHlwZS4KKyAqCisg
KiBAaW50ZXJmYWNlIFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50SW50ZXJmYWNlCisgKiBAaW50ZXJu
YWwKKyAqLwordmFyIFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50SW50ZXJmYWNlID0geworCisgIC8q
KgorICAgKiBBbiBhcnJheSBvZiBNaXhpbiBvYmplY3RzIHRvIGluY2x1ZGUgd2hlbiBkZWZpbmlu
ZyB5b3VyIGNvbXBvbmVudC4KKyAgICoKKyAgICogQHR5cGUge2FycmF5fQorICAgKiBAb3B0aW9u
YWwKKyAgICovCisgIG1peGluczogU3BlY1BvbGljeS5ERUZJTkVfTUFOWSwKKworICAvKioKKyAg
ICogRGVmaW5pdGlvbiBvZiBwcm9wIHR5cGVzIGZvciB0aGlzIGNvbXBvbmVudC4KKyAgICoKKyAg
ICogQHR5cGUge29iamVjdH0KKyAgICogQG9wdGlvbmFsCisgICAqLworICBwcm9wVHlwZXM6IFNw
ZWNQb2xpY3kuREVGSU5FX09OQ0UsCisKKworCisgIC8vID09PT0gRGVmaW5pdGlvbiBtZXRob2Rz
ID09PT0KKworICAvKioKKyAgICogSW52b2tlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbW91bnRl
ZC4gVmFsdWVzIGluIHRoZSBtYXBwaW5nIHdpbGwgYmUgc2V0IG9uCisgICAqIGB0aGlzLnByb3Bz
YCBpZiB0aGF0IHByb3AgaXMgbm90IHNwZWNpZmllZCAoaS5lLiB1c2luZyBhbiBgaW5gIGNoZWNr
KS4KKyAgICoKKyAgICogVGhpcyBtZXRob2QgaXMgaW52b2tlZCBiZWZvcmUgYGdldEluaXRpYWxT
dGF0ZWAgYW5kIHRoZXJlZm9yZSBjYW5ub3QgcmVseQorICAgKiBvbiBgdGhpcy5zdGF0ZWAgb3Ig
dXNlIGB0aGlzLnNldFN0YXRlYC4KKyAgICoKKyAgICogQHJldHVybiB7b2JqZWN0fQorICAgKiBA
b3B0aW9uYWwKKyAgICovCisgIGdldERlZmF1bHRQcm9wczogU3BlY1BvbGljeS5ERUZJTkVfT05D
RSwKKworICAvKioKKyAgICogSW52b2tlZCBvbmNlIGJlZm9yZSB0aGUgY29tcG9uZW50IGlzIG1v
dW50ZWQuIFRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSB1c2VkCisgICAqIGFzIHRoZSBpbml0aWFs
IHZhbHVlIG9mIGB0aGlzLnN0YXRlYC4KKyAgICoKKyAgICogICBnZXRJbml0aWFsU3RhdGU6IGZ1
bmN0aW9uKCkgeworICAgKiAgICAgcmV0dXJuIHsKKyAgICogICAgICAgaXNPbjogZmFsc2UsCisg
ICAqICAgICAgIGZvb0JhejogbmV3IEJhekZvbygpCisgICAqICAgICB9CisgICAqICAgfQorICAg
KgorICAgKiBAcmV0dXJuIHtvYmplY3R9CisgICAqIEBvcHRpb25hbAorICAgKi8KKyAgZ2V0SW5p
dGlhbFN0YXRlOiBTcGVjUG9saWN5LkRFRklORV9PTkNFLAorCisgIC8qKgorICAgKiBVc2VzIHBy
b3BzIGZyb20gYHRoaXMucHJvcHNgIGFuZCBzdGF0ZSBmcm9tIGB0aGlzLnN0YXRlYCB0byByZW5k
ZXIgdGhlCisgICAqIHN0cnVjdHVyZSBvZiB0aGUgY29tcG9uZW50LgorICAgKgorICAgKiBObyBn
dWFyYW50ZWVzIGFyZSBtYWRlIGFib3V0IHdoZW4gb3IgaG93IG9mdGVuIHRoaXMgbWV0aG9kIGlz
IGludm9rZWQsIHNvCisgICAqIGl0IG11c3Qgbm90IGhhdmUgc2lkZSBlZmZlY3RzLgorICAgKgor
ICAgKiAgIHJlbmRlcjogZnVuY3Rpb24oKSB7CisgICAqICAgICB2YXIgbmFtZSA9IHRoaXMucHJv
cHMubmFtZTsKKyAgICogICAgIHJldHVybiA8ZGl2PkhlbGxvLCB7bmFtZX0hPC9kaXY+OworICAg
KiAgIH0KKyAgICoKKyAgICogQHJldHVybiB7UmVhY3RDb21wb25lbnR9CisgICAqIEBub3NpZGVl
ZmZlY3RzCisgICAqIEByZXF1aXJlZAorICAgKi8KKyAgcmVuZGVyOiBTcGVjUG9saWN5LkRFRklO
RV9PTkNFLAorCisKKworICAvLyA9PT09IERlbGVnYXRlIG1ldGhvZHMgPT09PQorCisgIC8qKgor
ICAgKiBJbnZva2VkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBpbml0aWFsbHkgY3JlYXRlZCBhbmQg
YWJvdXQgdG8gYmUgbW91bnRlZC4KKyAgICogVGhpcyBtYXkgaGF2ZSBzaWRlIGVmZmVjdHMsIGJ1
dCBhbnkgZXh0ZXJuYWwgc3Vic2NyaXB0aW9ucyBvciBkYXRhIGNyZWF0ZWQKKyAgICogYnkgdGhp
cyBtZXRob2QgbXVzdCBiZSBjbGVhbmVkIHVwIGluIGBjb21wb25lbnRXaWxsVW5tb3VudGAuCisg
ICAqCisgICAqIEBvcHRpb25hbAorICAgKi8KKyAgY29tcG9uZW50V2lsbE1vdW50OiBTcGVjUG9s
aWN5LkRFRklORV9NQU5ZLAorCisgIC8qKgorICAgKiBJbnZva2VkIHdoZW4gdGhlIGNvbXBvbmVu
dCBoYXMgYmVlbiBtb3VudGVkIGFuZCBoYXMgYSBET00gcmVwcmVzZW50YXRpb24uCisgICAqIEhv
d2V2ZXIsIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IHRoZSBET00gbm9kZSBpcyBpbiB0aGUg
ZG9jdW1lbnQuCisgICAqCisgICAqIFVzZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5IHRvIG9wZXJh
dGUgb24gdGhlIERPTSB3aGVuIHRoZSBjb21wb25lbnQgaGFzCisgICAqIGJlZW4gbW91bnRlZCAo
aW5pdGlhbGl6ZWQgYW5kIHJlbmRlcmVkKSBmb3IgdGhlIGZpcnN0IHRpbWUuCisgICAqCisgICAq
IEBwYXJhbSB7RE9NRWxlbWVudH0gcm9vdE5vZGUgRE9NIGVsZW1lbnQgcmVwcmVzZW50aW5nIHRo
ZSBjb21wb25lbnQuCisgICAqIEBvcHRpb25hbAorICAgKi8KKyAgY29tcG9uZW50RGlkTW91bnQ6
IFNwZWNQb2xpY3kuREVGSU5FX01BTlksCisKKyAgLyoqCisgICAqIEludm9rZWQgYmVmb3JlIHRo
ZSBjb21wb25lbnQgcmVjZWl2ZXMgbmV3IHByb3BzLgorICAgKgorICAgKiBVc2UgdGhpcyBhcyBh
biBvcHBvcnR1bml0eSB0byByZWFjdCB0byBhIHByb3AgdHJhbnNpdGlvbiBieSB1cGRhdGluZyB0
aGUKKyAgICogc3RhdGUgdXNpbmcgYHRoaXMuc2V0U3RhdGVgLiBDdXJyZW50IHByb3BzIGFyZSBh
Y2Nlc3NlZCB2aWEgYHRoaXMucHJvcHNgLgorICAgKgorICAgKiAgIGNvbXBvbmVudFdpbGxSZWNl
aXZlUHJvcHM6IGZ1bmN0aW9uKG5leHRQcm9wcykgeworICAgKiAgICAgdGhpcy5zZXRTdGF0ZSh7
CisgICAqICAgICAgIGxpa2VzSW5jcmVhc2luZzogbmV4dFByb3BzLmxpa2VDb3VudCA+IHRoaXMu
cHJvcHMubGlrZUNvdW50CisgICAqICAgICB9KTsKKyAgICogICB9CisgICAqCisgICAqIE5PVEU6
IFRoZXJlIGlzIG5vIGVxdWl2YWxlbnQgYGNvbXBvbmVudFdpbGxSZWNlaXZlU3RhdGVgLiBBbiBp
bmNvbWluZyBwcm9wCisgICAqIHRyYW5zaXRpb24gbWF5IGNhdXNlIGEgc3RhdGUgY2hhbmdlLCBi
dXQgdGhlIG9wcG9zaXRlIGlzIG5vdCB0cnVlLiBJZiB5b3UKKyAgICogbmVlZCBpdCwgeW91IGFy
ZSBwcm9iYWJseSBsb29raW5nIGZvciBgY29tcG9uZW50V2lsbFVwZGF0ZWAuCisgICAqCisgICAq
IEBwYXJhbSB7b2JqZWN0fSBuZXh0UHJvcHMKKyAgICogQG9wdGlvbmFsCisgICAqLworICBjb21w
b25lbnRXaWxsUmVjZWl2ZVByb3BzOiBTcGVjUG9saWN5LkRFRklORV9NQU5ZLAorCisgIC8qKgor
ICAgKiBJbnZva2VkIHdoaWxlIGRlY2lkaW5nIGlmIHRoZSBjb21wb25lbnQgc2hvdWxkIGJlIHVw
ZGF0ZWQgYXMgYSByZXN1bHQgb2YKKyAgICogcmVjZWl2aW5nIG5ldyBwcm9wcyBhbmQgc3RhdGUu
CisgICAqCisgICAqIFVzZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5IHRvIGByZXR1cm4gZmFsc2Vg
IHdoZW4geW91J3JlIGNlcnRhaW4gdGhhdCB0aGUKKyAgICogdHJhbnNpdGlvbiB0byB0aGUgbmV3
IHByb3BzIGFuZCBzdGF0ZSB3aWxsIG5vdCByZXF1aXJlIGEgY29tcG9uZW50IHVwZGF0ZS4KKyAg
ICoKKyAgICogICBzaG91bGRDb21wb25lbnRVcGRhdGU6IGZ1bmN0aW9uKG5leHRQcm9wcywgbmV4
dFN0YXRlKSB7CisgICAqICAgICByZXR1cm4gIWVxdWFsKG5leHRQcm9wcywgdGhpcy5wcm9wcykg
fHwgIWVxdWFsKG5leHRTdGF0ZSwgdGhpcy5zdGF0ZSk7CisgICAqICAgfQorICAgKgorICAgKiBA
cGFyYW0ge29iamVjdH0gbmV4dFByb3BzCisgICAqIEBwYXJhbSB7P29iamVjdH0gbmV4dFN0YXRl
CisgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGNvbXBvbmVudCBzaG91bGQgdXBk
YXRlLgorICAgKiBAb3B0aW9uYWwKKyAgICovCisgIHNob3VsZENvbXBvbmVudFVwZGF0ZTogU3Bl
Y1BvbGljeS5ERUZJTkVfT05DRSwKKworICAvKioKKyAgICogSW52b2tlZCB3aGVuIHRoZSBjb21w
b25lbnQgaXMgYWJvdXQgdG8gdXBkYXRlIGR1ZSB0byBhIHRyYW5zaXRpb24gZnJvbQorICAgKiBg
dGhpcy5wcm9wc2AgYW5kIGB0aGlzLnN0YXRlYCB0byBgbmV4dFByb3BzYCBhbmQgYG5leHRTdGF0
ZWAuCisgICAqCisgICAqIFVzZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5IHRvIHBlcmZvcm0gcHJl
cGFyYXRpb24gYmVmb3JlIGFuIHVwZGF0ZSBvY2N1cnMuCisgICAqCisgICAqIE5PVEU6IFlvdSAq
KmNhbm5vdCoqIHVzZSBgdGhpcy5zZXRTdGF0ZSgpYCBpbiB0aGlzIG1ldGhvZC4KKyAgICoKKyAg
ICogQHBhcmFtIHtvYmplY3R9IG5leHRQcm9wcworICAgKiBAcGFyYW0gez9vYmplY3R9IG5leHRT
dGF0ZQorICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9u
CisgICAqIEBvcHRpb25hbAorICAgKi8KKyAgY29tcG9uZW50V2lsbFVwZGF0ZTogU3BlY1BvbGlj
eS5ERUZJTkVfTUFOWSwKKworICAvKioKKyAgICogSW52b2tlZCB3aGVuIHRoZSBjb21wb25lbnQn
cyBET00gcmVwcmVzZW50YXRpb24gaGFzIGJlZW4gdXBkYXRlZC4KKyAgICoKKyAgICogVXNlIHRo
aXMgYXMgYW4gb3Bwb3J0dW5pdHkgdG8gb3BlcmF0ZSBvbiB0aGUgRE9NIHdoZW4gdGhlIGNvbXBv
bmVudCBoYXMKKyAgICogYmVlbiB1cGRhdGVkLgorICAgKgorICAgKiBAcGFyYW0ge29iamVjdH0g
cHJldlByb3BzCisgICAqIEBwYXJhbSB7P29iamVjdH0gcHJldlN0YXRlCisgICAqIEBwYXJhbSB7
RE9NRWxlbWVudH0gcm9vdE5vZGUgRE9NIGVsZW1lbnQgcmVwcmVzZW50aW5nIHRoZSBjb21wb25l
bnQuCisgICAqIEBvcHRpb25hbAorICAgKi8KKyAgY29tcG9uZW50RGlkVXBkYXRlOiBTcGVjUG9s
aWN5LkRFRklORV9NQU5ZLAorCisgIC8qKgorICAgKiBJbnZva2VkIHdoZW4gdGhlIGNvbXBvbmVu
dCBpcyBhYm91dCB0byBiZSByZW1vdmVkIGZyb20gaXRzIHBhcmVudCBhbmQgaGF2ZQorICAgKiBp
dHMgRE9NIHJlcHJlc2VudGF0aW9uIGRlc3Ryb3llZC4KKyAgICoKKyAgICogVXNlIHRoaXMgYXMg
YW4gb3Bwb3J0dW5pdHkgdG8gZGVhbGxvY2F0ZSBhbnkgZXh0ZXJuYWwgcmVzb3VyY2VzLgorICAg
KgorICAgKiBOT1RFOiBUaGVyZSBpcyBubyBgY29tcG9uZW50RGlkVW5tb3VudGAgc2luY2UgeW91
ciBjb21wb25lbnQgd2lsbCBoYXZlIGJlZW4KKyAgICogZGVzdHJveWVkIGJ5IHRoYXQgcG9pbnQu
CisgICAqCisgICAqIEBvcHRpb25hbAorICAgKi8KKyAgY29tcG9uZW50V2lsbFVubW91bnQ6IFNw
ZWNQb2xpY3kuREVGSU5FX01BTlksCisKKworCisgIC8vID09PT0gQWR2YW5jZWQgbWV0aG9kcyA9
PT09CisKKyAgLyoqCisgICAqIFVwZGF0ZXMgdGhlIGNvbXBvbmVudCdzIGN1cnJlbnRseSBtb3Vu
dGVkIERPTSByZXByZXNlbnRhdGlvbi4KKyAgICoKKyAgICogQnkgZGVmYXVsdCwgdGhpcyBpbXBs
ZW1lbnRzIFJlYWN0J3MgcmVuZGVyaW5nIGFuZCByZWNvbmNpbGlhdGlvbiBhbGdvcml0aG0uCisg
ICAqIFNvcGhpc3RpY2F0ZWQgY2xpZW50cyBtYXkgd2lzaCB0byBvdmVycmlkZSB0aGlzLgorICAg
KgorICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uCisg
ICAqIEBpbnRlcm5hbAorICAgKiBAb3ZlcnJpZGFibGUKKyAgICovCisgIHVwZGF0ZUNvbXBvbmVu
dDogU3BlY1BvbGljeS5PVkVSUklERV9CQVNFCisKK307CisKKy8qKgorICogTWFwcGluZyBmcm9t
IGNsYXNzIHNwZWNpZmljYXRpb24ga2V5cyB0byBzcGVjaWFsIHByb2Nlc3NpbmcgZnVuY3Rpb25z
LgorICoKKyAqIEFsdGhvdWdoIHRoZXNlIGFyZSBkZWNsYXJlZCBpbiB0aGUgc3BlY2lmaWNhdGlv
biB3aGVuIGRlZmluaW5nIGNsYXNzZXMKKyAqIHVzaW5nIGBSZWFjdC5jcmVhdGVDbGFzc2AsIHRo
ZXkgd2lsbCBub3QgYmUgb24gdGhlIGNvbXBvbmVudCdzIHByb3RvdHlwZS4KKyAqLwordmFyIFJF
U0VSVkVEX1NQRUNfS0VZUyA9IHsKKyAgZGlzcGxheU5hbWU6IGZ1bmN0aW9uKENvbnN0cnVjdG9y
LCBkaXNwbGF5TmFtZSkgeworICAgIENvbnN0cnVjdG9yLmRpc3BsYXlOYW1lID0gZGlzcGxheU5h
bWU7CisgIH0sCisgIG1peGluczogZnVuY3Rpb24oQ29uc3RydWN0b3IsIG1peGlucykgeworICAg
IGlmIChtaXhpbnMpIHsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWl4aW5zLmxlbmd0aDsg
aSsrKSB7CisgICAgICAgIG1peFNwZWNJbnRvQ29tcG9uZW50KENvbnN0cnVjdG9yLCBtaXhpbnNb
aV0pOworICAgICAgfQorICAgIH0KKyAgfSwKKyAgcHJvcFR5cGVzOiBmdW5jdGlvbihDb25zdHJ1
Y3RvciwgcHJvcFR5cGVzKSB7CisgICAgQ29uc3RydWN0b3IucHJvcFR5cGVzID0gcHJvcFR5cGVz
OworICB9Cit9OworCitmdW5jdGlvbiB2YWxpZGF0ZU1ldGhvZE92ZXJyaWRlKHByb3RvLCBuYW1l
KSB7CisgIHZhciBzcGVjUG9saWN5ID0gUmVhY3RDb21wb3NpdGVDb21wb25lbnRJbnRlcmZhY2Vb
bmFtZV07CisKKyAgLy8gRGlzYWxsb3cgb3ZlcnJpZGluZyBvZiBiYXNlIGNsYXNzIG1ldGhvZHMg
dW5sZXNzIGV4cGxpY2l0bHkgYWxsb3dlZC4KKyAgaWYgKFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50
TWl4aW4uaGFzT3duUHJvcGVydHkobmFtZSkpIHsKKyAgICBpbnZhcmlhbnQoCisgICAgICBzcGVj
UG9saWN5ID09PSBTcGVjUG9saWN5Lk9WRVJSSURFX0JBU0UsCisgICAgICAnUmVhY3RDb21wb3Np
dGVDb21wb25lbnRJbnRlcmZhY2U6IFlvdSBhcmUgYXR0ZW1wdGluZyB0byBvdmVycmlkZSAnICsK
KyAgICAgICdgJXNgIGZyb20geW91ciBjbGFzcyBzcGVjaWZpY2F0aW9uLiBFbnN1cmUgdGhhdCB5
b3VyIG1ldGhvZCBuYW1lcyAnICsKKyAgICAgICdkbyBub3Qgb3ZlcmxhcCB3aXRoIFJlYWN0IG1l
dGhvZHMuJywKKyAgICAgIG5hbWUKKyAgICApOworICB9CisKKyAgLy8gRGlzYWxsb3cgZGVmaW5p
bmcgbWV0aG9kcyBtb3JlIHRoYW4gb25jZSB1bmxlc3MgZXhwbGljaXRseSBhbGxvd2VkLgorICBp
ZiAocHJvdG8uaGFzT3duUHJvcGVydHkobmFtZSkpIHsKKyAgICBpbnZhcmlhbnQoCisgICAgICBz
cGVjUG9saWN5ID09PSBTcGVjUG9saWN5LkRFRklORV9NQU5ZLAorICAgICAgJ1JlYWN0Q29tcG9z
aXRlQ29tcG9uZW50SW50ZXJmYWNlOiBZb3UgYXJlIGF0dGVtcHRpbmcgdG8gZGVmaW5lICcgKwor
ICAgICAgJ2Alc2Agb24geW91ciBjb21wb25lbnQgbW9yZSB0aGFuIG9uY2UuIFRoaXMgY29uZmxp
Y3QgbWF5IGJlIGR1ZSAnICsKKyAgICAgICd0byBhIG1peGluLicsCisgICAgICBuYW1lCisgICAg
KTsKKyAgfQorfQorCisKK2Z1bmN0aW9uIHZhbGlkYXRlTGlmZUN5Y2xlT25SZXBsYWNlU3RhdGUo
aW5zdGFuY2UpIHsKKyAgdmFyIGNvbXBvc2l0ZUxpZmVDeWNsZVN0YXRlID0gaW5zdGFuY2UuX2Nv
bXBvc2l0ZUxpZmVDeWNsZVN0YXRlOworICBpbnZhcmlhbnQoCisgICAgaW5zdGFuY2UuaXNNb3Vu
dGVkKCkgfHwKKyAgICAgIGNvbXBvc2l0ZUxpZmVDeWNsZVN0YXRlID09PSBDb21wb3NpdGVMaWZl
Q3ljbGUuTU9VTlRJTkcsCisgICAgJ3JlcGxhY2VTdGF0ZSguLi4pOiBDYW4gb25seSB1cGRhdGUg
YSBtb3VudGVkIG9yIG1vdW50aW5nIGNvbXBvbmVudC4nCisgICk7CisgIGludmFyaWFudCgKKyAg
ICBjb21wb3NpdGVMaWZlQ3ljbGVTdGF0ZSAhPT0gQ29tcG9zaXRlTGlmZUN5Y2xlLlJFQ0VJVklO
R19TVEFURSAmJgorICAgIGNvbXBvc2l0ZUxpZmVDeWNsZVN0YXRlICE9PSBDb21wb3NpdGVMaWZl
Q3ljbGUuVU5NT1VOVElORywKKyAgICAncmVwbGFjZVN0YXRlKC4uLik6IENhbm5vdCB1cGRhdGUg
d2hpbGUgdW5tb3VudGluZyBjb21wb25lbnQgb3IgZHVyaW5nICcgKworICAgICdhbiBleGlzdGlu
ZyBzdGF0ZSB0cmFuc2l0aW9uIChzdWNoIGFzIHdpdGhpbiBgcmVuZGVyYCkuJworICApOworfQor
CisvKioKKyAqIEN1c3RvbSB2ZXJzaW9uIG9mIGBtaXhJbnRvYCB3aGljaCBoYW5kbGVzIHBvbGlj
eSB2YWxpZGF0aW9uIGFuZCByZXNlcnZlZAorICogc3BlY2lmaWNhdGlvbiBrZXlzIHdoZW4gYnVp
bGRpbmcgYFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50YCBjbGFzc3Nlcy4KKyAqLworZnVuY3Rpb24g
bWl4U3BlY0ludG9Db21wb25lbnQoQ29uc3RydWN0b3IsIHNwZWMpIHsKKyAgdmFyIHByb3RvID0g
Q29uc3RydWN0b3IucHJvdG90eXBlOworICBmb3IgKHZhciBuYW1lIGluIHNwZWMpIHsKKyAgICB2
YXIgcHJvcGVydHkgPSBzcGVjW25hbWVdOworICAgIGlmICghc3BlYy5oYXNPd25Qcm9wZXJ0eShu
YW1lKSB8fCAhcHJvcGVydHkpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICB2YWxpZGF0
ZU1ldGhvZE92ZXJyaWRlKHByb3RvLCBuYW1lKTsKKworICAgIGlmIChSRVNFUlZFRF9TUEVDX0tF
WVMuaGFzT3duUHJvcGVydHkobmFtZSkpIHsKKyAgICAgIFJFU0VSVkVEX1NQRUNfS0VZU1tuYW1l
XShDb25zdHJ1Y3RvciwgcHJvcGVydHkpOworICAgIH0gZWxzZSB7CisgICAgICAvLyBTZXR1cCBt
ZXRob2RzIG9uIHByb3RvdHlwZToKKyAgICAgIC8vIFRoZSBmb2xsb3dpbmcgbWVtYmVyIG1ldGhv
ZHMgc2hvdWxkIG5vdCBiZSBhdXRvbWF0aWNhbGx5IGJvdW5kOgorICAgICAgLy8gMS4gRXhwZWN0
ZWQgUmVhY3RDb21wb3NpdGVDb21wb25lbnQgbWV0aG9kcyAoaW4gdGhlICJpbnRlcmZhY2UiKS4K
KyAgICAgIC8vIDIuIE92ZXJyaWRkZW4gbWV0aG9kcyAodGhhdCB3ZXJlIG1peGVkIGluKS4KKyAg
ICAgIHZhciBpc0NvbXBvc2l0ZUNvbXBvbmVudE1ldGhvZCA9IG5hbWUgaW4gUmVhY3RDb21wb3Np
dGVDb21wb25lbnRJbnRlcmZhY2U7CisgICAgICB2YXIgaXNJbmhlcml0ZWQgPSBuYW1lIGluIHBy
b3RvOworICAgICAgdmFyIG1hcmtlZERvbnRCaW5kID0gcHJvcGVydHkuX19yZWFjdERvbnRCaW5k
OworICAgICAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2YgcHJvcGVydHkgPT09ICdmdW5jdGlvbic7
CisgICAgICB2YXIgc2hvdWxkQXV0b0JpbmQgPQorICAgICAgICBpc0Z1bmN0aW9uICYmCisgICAg
ICAgICFpc0NvbXBvc2l0ZUNvbXBvbmVudE1ldGhvZCAmJgorICAgICAgICAhaXNJbmhlcml0ZWQg
JiYKKyAgICAgICAgIW1hcmtlZERvbnRCaW5kOworCisgICAgICBpZiAoc2hvdWxkQXV0b0JpbmQp
IHsKKyAgICAgICAgaWYgKCFwcm90by5fX3JlYWN0QXV0b0JpbmRNYXApIHsKKyAgICAgICAgICBw
cm90by5fX3JlYWN0QXV0b0JpbmRNYXAgPSB7fTsKKyAgICAgICAgfQorICAgICAgICBwcm90by5f
X3JlYWN0QXV0b0JpbmRNYXBbbmFtZV0gPSBwcm9wZXJ0eTsKKyAgICAgICAgcHJvdG9bbmFtZV0g
PSBwcm9wZXJ0eTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChpc0luaGVyaXRlZCkgewor
ICAgICAgICAgIC8vIEZvciBtZXRob2RzIHdoaWNoIGFyZSBkZWZpbmVkIG1vcmUgdGhhbiBvbmNl
LCBjYWxsIHRoZSBleGlzdGluZworICAgICAgICAgIC8vIG1ldGhvZHMgYmVmb3JlIGNhbGxpbmcg
dGhlIG5ldyBwcm9wZXJ0eS4KKyAgICAgICAgICBwcm90b1tuYW1lXSA9IGNyZWF0ZUNoYWluZWRG
dW5jdGlvbihwcm90b1tuYW1lXSwgcHJvcGVydHkpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgIHByb3RvW25hbWVdID0gcHJvcGVydHk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9Cisg
IH0KK30KKworLyoqCisgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIHR3byBmdW5j
dGlvbnMgYW5kIGlnbm9yZXMgdGhlaXIgcmV0dXJuIHZhbGVzLgorICoKKyAqIEBwYXJhbSB7ZnVu
Y3Rpb259IG9uZSBGdW5jdGlvbiB0byBpbnZva2UgZmlyc3QuCisgKiBAcGFyYW0ge2Z1bmN0aW9u
fSB0d28gRnVuY3Rpb24gdG8gaW52b2tlIHNlY29uZC4KKyAqIEByZXR1cm4ge2Z1bmN0aW9ufSBG
dW5jdGlvbiB0aGF0IGludm9rZXMgdGhlIHR3byBhcmd1bWVudCBmdW5jdGlvbnMuCisgKiBAcHJp
dmF0ZQorICovCitmdW5jdGlvbiBjcmVhdGVDaGFpbmVkRnVuY3Rpb24ob25lLCB0d28pIHsKKyAg
cmV0dXJuIGZ1bmN0aW9uIGNoYWluZWRGdW5jdGlvbigpIHsKKyAgICBvbmUuYXBwbHkodGhpcywg
YXJndW1lbnRzKTsKKyAgICB0d28uYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgfTsKK30KKwor
LyoqCisgKiBgUmVhY3RDb21wb3NpdGVDb21wb25lbnRgIG1haW50YWlucyBhbiBhdXhpbGlhcnkg
bGlmZSBjeWNsZSBzdGF0ZSBpbgorICogYHRoaXMuX2NvbXBvc2l0ZUxpZmVDeWNsZVN0YXRlYCAo
d2hpY2ggY2FuIGJlIG51bGwpLgorICoKKyAqIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIGxp
ZmUgY3ljbGUgc3RhdGUgbWFpbnRhaW5lZCBieSBgUmVhY3RDb21wb25lbnRgIGluCisgKiBgdGhp
cy5fbGlmZUN5Y2xlU3RhdGVgLiBUaGUgZm9sbG93aW5nIGRpYWdyYW0gc2hvd3MgaG93IHRoZSBz
dGF0ZXMgb3ZlcmxhcCBpbgorICogdGltZS4gVGhlcmUgYXJlIHRpbWVzIHdoZW4gdGhlIENvbXBv
c2l0ZUxpZmVDeWNsZSBpcyBudWxsIC0gYXQgdGhvc2UgdGltZXMgaXQKKyAqIGlzIG9ubHkgbWVh
bmluZ2Z1bCB0byBsb29rIGF0IENvbXBvbmVudExpZmVDeWNsZSBhbG9uZS4KKyAqCisgKiBUb3Ag
Um93OiBSZWFjdENvbXBvbmVudC5Db21wb25lbnRMaWZlQ3ljbGUKKyAqIExvdyBSb3c6IFJlYWN0
Q29tcG9uZW50LkNvbXBvc2l0ZUxpZmVDeWNsZQorICoKKyAqICstLS0tLS0tKy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSsKKyAq
IHwgIFVOICAgfCAgICAgICAgICAgICAgICAgICAgTU9VTlRFRCAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgICBVTiAgIHwKKyAqIHxNT1VOVEVEfCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU9VTlRFRHwKKyAqICstLS0tLS0tKy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t
LSsKKyAqIHwgICAgICAgXi0tLS0tLS0tKyAgICstLS0tLS0rICAgKy0tLS0tLSsgICArLS0tLS0t
KyAgICstLS0tLS0tLV4gICAgICAgIHwKKyAqIHwgICAgICAgfCAgICAgICAgfCAgIHwgICAgICB8
ICAgfCAgICAgIHwgICB8ICAgICAgfCAgIHwgICAgICAgIHwgICAgICAgIHwKKyAqIHwgICAgMC0t
fE1PVU5USU5HfC0wLXxSRUNFSVZ8LTAtfFJFQ0VJVnwtMC18UkVDRUlWfC0wLXwgICBVTiAgIHwt
LS0+MCAgIHwKKyAqIHwgICAgICAgfCAgICAgICAgfCAgIHxQUk9QUyB8ICAgfCBQUk9QU3wgICB8
IFNUQVRFfCAgIHxNT1VOVElOR3wgICAgICAgIHwKKyAqIHwgICAgICAgfCAgICAgICAgfCAgIHwg
ICAgICB8ICAgfCAgICAgIHwgICB8ICAgICAgfCAgIHwgICAgICAgIHwgICAgICAgIHwKKyAqIHwg
ICAgICAgfCAgICAgICAgfCAgIHwgICAgICB8ICAgfCAgICAgIHwgICB8ICAgICAgfCAgIHwgICAg
ICAgIHwgICAgICAgIHwKKyAqIHwgICAgICAgKy0tLS0tLS0tKyAgICstLS0tLS0rICAgKy0tLS0t
LSsgICArLS0tLS0tKyAgICstLS0tLS0tLSsgICAgICAgIHwKKyAqIHwgICAgICAgfCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgIHwK
KyAqICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSstLS0tLS0tLSsKKyAqLwordmFyIENvbXBvc2l0ZUxpZmVDeWNsZSA9IGtleU1p
cnJvcih7CisgIC8qKgorICAgKiBDb21wb25lbnRzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIG1v
dW50ZWQgcmVzcG9uZCB0byBzdGF0ZSBjaGFuZ2VzCisgICAqIGRpZmZlcmVudGx5LgorICAgKi8K
KyAgTU9VTlRJTkc6IG51bGwsCisgIC8qKgorICAgKiBDb21wb25lbnRzIGluIHRoZSBwcm9jZXNz
IG9mIGJlaW5nIHVubW91bnRlZCBhcmUgZ3VhcmRlZCBhZ2FpbnN0IHN0YXRlCisgICAqIGNoYW5n
ZXMuCisgICAqLworICBVTk1PVU5USU5HOiBudWxsLAorICAvKioKKyAgICogQ29tcG9uZW50cyB0
aGF0IGFyZSBtb3VudGVkIGFuZCByZWNlaXZpbmcgbmV3IHByb3BzIHJlc3BvbmQgdG8gc3RhdGUK
KyAgICogY2hhbmdlcyBkaWZmZXJlbnRseS4KKyAgICovCisgIFJFQ0VJVklOR19QUk9QUzogbnVs
bCwKKyAgLyoqCisgICAqIENvbXBvbmVudHMgdGhhdCBhcmUgbW91bnRlZCBhbmQgcmVjZWl2aW5n
IG5ldyBzdGF0ZSBhcmUgZ3VhcmRlZCBhZ2FpbnN0CisgICAqIGFkZGl0aW9uYWwgc3RhdGUgY2hh
bmdlcy4KKyAgICovCisgIFJFQ0VJVklOR19TVEFURTogbnVsbAorfSk7CisKKy8qKgorICogQGxl
bmRzIHtSZWFjdENvbXBvc2l0ZUNvbXBvbmVudC5wcm90b3R5cGV9CisgKi8KK3ZhciBSZWFjdENv
bXBvc2l0ZUNvbXBvbmVudE1peGluID0geworCisgIC8qKgorICAgKiBCYXNlIGNvbnN0cnVjdG9y
IGZvciBhbGwgY29tcG9zaXRlIGNvbXBvbmVudC4KKyAgICoKKyAgICogQHBhcmFtIHs/b2JqZWN0
fSBpbml0aWFsUHJvcHMKKyAgICogQHBhcmFtIHsqfSBjaGlsZHJlbgorICAgKiBAZmluYWwKKyAg
ICogQGludGVybmFsCisgICAqLworICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uKGluaXRpYWxQcm9wcywg
Y2hpbGRyZW4pIHsKKyAgICAvLyBDaGlsZHJlbiBjYW4gYmUgZWl0aGVyIGFuIGFycmF5IG9yIG1v
cmUgdGhhbiBvbmUgYXJndW1lbnQKKyAgICBSZWFjdENvbXBvbmVudC5NaXhpbi5jb25zdHJ1Y3Qu
YXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICB0aGlzLnN0YXRlID0gbnVsbDsKKyAgICB0aGlz
Ll9wZW5kaW5nU3RhdGUgPSBudWxsOworICAgIHRoaXMuX2NvbXBvc2l0ZUxpZmVDeWNsZVN0YXRl
ID0gbnVsbDsKKyAgfSwKKworICAvKioKKyAgICogQ2hlY2tzIHdoZXRoZXIgb3Igbm90IHRoaXMg
Y29tcG9zaXRlIGNvbXBvbmVudCBpcyBtb3VudGVkLgorICAgKiBAcmV0dXJuIHtib29sZWFufSBU
cnVlIGlmIG1vdW50ZWQsIGZhbHNlIG90aGVyd2lzZS4KKyAgICogQHByb3RlY3RlZAorICAgKiBA
ZmluYWwKKyAgICovCisgIGlzTW91bnRlZDogZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFJlYWN0
Q29tcG9uZW50Lk1peGluLmlzTW91bnRlZC5jYWxsKHRoaXMpICYmCisgICAgICB0aGlzLl9jb21w
b3NpdGVMaWZlQ3ljbGVTdGF0ZSAhPT0gQ29tcG9zaXRlTGlmZUN5Y2xlLk1PVU5USU5HOworICB9
LAorCisgIC8qKgorICAgKiBJbml0aWFsaXplcyB0aGUgY29tcG9uZW50LCByZW5kZXJzIG1hcmt1
cCwgYW5kIHJlZ2lzdGVycyBldmVudCBsaXN0ZW5lcnMuCisgICAqCisgICAqIEBwYXJhbSB7c3Ry
aW5nfSByb290SUQgRE9NIElEIG9mIHRoZSByb290IG5vZGUuCisgICAqIEBwYXJhbSB7UmVhY3RS
ZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb24KKyAgICogQHJldHVybiB7P3N0cmluZ30g
UmVuZGVyZWQgbWFya3VwIHRvIGJlIGluc2VydGVkIGludG8gdGhlIERPTS4KKyAgICogQGZpbmFs
CisgICAqIEBpbnRlcm5hbAorICAgKi8KKyAgbW91bnRDb21wb25lbnQ6IGZ1bmN0aW9uKHJvb3RJ
RCwgdHJhbnNhY3Rpb24pIHsKKyAgICBSZWFjdENvbXBvbmVudC5NaXhpbi5tb3VudENvbXBvbmVu
dC5jYWxsKHRoaXMsIHJvb3RJRCwgdHJhbnNhY3Rpb24pOworICAgIHRoaXMuX2NvbXBvc2l0ZUxp
ZmVDeWNsZVN0YXRlID0gQ29tcG9zaXRlTGlmZUN5Y2xlLk1PVU5USU5HOworCisgICAgdGhpcy5f
ZGVmYXVsdFByb3BzID0gdGhpcy5nZXREZWZhdWx0UHJvcHMgPyB0aGlzLmdldERlZmF1bHRQcm9w
cygpIDogbnVsbDsKKyAgICB0aGlzLl9wcm9jZXNzUHJvcHModGhpcy5wcm9wcyk7CisKKyAgICBp
ZiAodGhpcy5fX3JlYWN0QXV0b0JpbmRNYXApIHsKKyAgICAgIHRoaXMuX2JpbmRBdXRvQmluZE1l
dGhvZHMoKTsKKyAgICB9CisKKyAgICB0aGlzLnN0YXRlID0gdGhpcy5nZXRJbml0aWFsU3RhdGUg
PyB0aGlzLmdldEluaXRpYWxTdGF0ZSgpIDogbnVsbDsKKyAgICB0aGlzLl9wZW5kaW5nU3RhdGUg
PSBudWxsOworICAgIHRoaXMuX3BlbmRpbmdGb3JjZVVwZGF0ZSA9IGZhbHNlOworCisgICAgaWYg
KHRoaXMuY29tcG9uZW50V2lsbE1vdW50KSB7CisgICAgICB0aGlzLmNvbXBvbmVudFdpbGxNb3Vu
dCgpOworICAgICAgLy8gV2hlbiBtb3VudGluZywgY2FsbHMgdG8gYHNldFN0YXRlYCBieSBgY29t
cG9uZW50V2lsbE1vdW50YCB3aWxsIHNldAorICAgICAgLy8gYHRoaXMuX3BlbmRpbmdTdGF0ZWAg
d2l0aG91dCB0cmlnZ2VyaW5nIGEgcmUtcmVuZGVyLgorICAgICAgaWYgKHRoaXMuX3BlbmRpbmdT
dGF0ZSkgeworICAgICAgICB0aGlzLnN0YXRlID0gdGhpcy5fcGVuZGluZ1N0YXRlOworICAgICAg
ICB0aGlzLl9wZW5kaW5nU3RhdGUgPSBudWxsOworICAgICAgfQorICAgIH0KKworICAgIHRoaXMu
X3JlbmRlcmVkQ29tcG9uZW50ID0gdGhpcy5fcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50KCk7CisK
KyAgICAvLyBEb25lIHdpdGggbW91bnRpbmcsIGBzZXRTdGF0ZWAgd2lsbCBub3cgdHJpZ2dlciBV
SSBjaGFuZ2VzLgorICAgIHRoaXMuX2NvbXBvc2l0ZUxpZmVDeWNsZVN0YXRlID0gbnVsbDsKKyAg
ICB2YXIgbWFya3VwID0gdGhpcy5fcmVuZGVyZWRDb21wb25lbnQubW91bnRDb21wb25lbnQocm9v
dElELCB0cmFuc2FjdGlvbik7CisgICAgaWYgKHRoaXMuY29tcG9uZW50RGlkTW91bnQpIHsKKyAg
ICAgIHRyYW5zYWN0aW9uLmdldFJlYWN0T25ET01SZWFkeSgpLmVucXVldWUodGhpcywgdGhpcy5j
b21wb25lbnREaWRNb3VudCk7CisgICAgfQorICAgIHJldHVybiBtYXJrdXA7CisgIH0sCisKKyAg
LyoqCisgICAqIFJlbGVhc2VzIGFueSByZXNvdXJjZXMgYWxsb2NhdGVkIGJ5IGBtb3VudENvbXBv
bmVudGAuCisgICAqCisgICAqIEBmaW5hbAorICAgKiBAaW50ZXJuYWwKKyAgICovCisgIHVubW91
bnRDb21wb25lbnQ6IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuX2NvbXBvc2l0ZUxpZmVDeWNsZVN0
YXRlID0gQ29tcG9zaXRlTGlmZUN5Y2xlLlVOTU9VTlRJTkc7CisgICAgaWYgKHRoaXMuY29tcG9u
ZW50V2lsbFVubW91bnQpIHsKKyAgICAgIHRoaXMuY29tcG9uZW50V2lsbFVubW91bnQoKTsKKyAg
ICB9CisgICAgdGhpcy5fY29tcG9zaXRlTGlmZUN5Y2xlU3RhdGUgPSBudWxsOworCisgICAgdGhp
cy5fZGVmYXVsdFByb3BzID0gbnVsbDsKKworICAgIFJlYWN0Q29tcG9uZW50Lk1peGluLnVubW91
bnRDb21wb25lbnQuY2FsbCh0aGlzKTsKKyAgICB0aGlzLl9yZW5kZXJlZENvbXBvbmVudC51bm1v
dW50Q29tcG9uZW50KCk7CisgICAgdGhpcy5fcmVuZGVyZWRDb21wb25lbnQgPSBudWxsOworCisg
ICAgaWYgKHRoaXMucmVmcykgeworICAgICAgdGhpcy5yZWZzID0gbnVsbDsKKyAgICB9CisKKyAg
ICAvLyBTb21lIGV4aXN0aW5nIGNvbXBvbmVudHMgcmVseSBvbiB0aGlzLnByb3BzIGV2ZW4gYWZ0
ZXIgdGhleSd2ZSBiZWVuCisgICAgLy8gZGVzdHJveWVkIChpbiBldmVudCBoYW5kbGVycykuCisg
ICAgLy8gVE9ETzogdGhpcy5wcm9wcyA9IG51bGw7CisgICAgLy8gVE9ETzogdGhpcy5zdGF0ZSA9
IG51bGw7CisgIH0sCisKKyAgLyoqCisgICAqIFNldHMgYSBzdWJzZXQgb2YgdGhlIHN0YXRlLiBB
bHdheXMgdXNlIHRoaXMgb3IgYHJlcGxhY2VTdGF0ZWAgdG8gbXV0YXRlCisgICAqIHN0YXRlLiBZ
b3Ugc2hvdWxkIHRyZWF0IGB0aGlzLnN0YXRlYCBhcyBpbW11dGFibGUuCisgICAqCisgICAqIFRo
ZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGB0aGlzLnN0YXRlYCB3aWxsIGJlIGltbWVkaWF0ZWx5
IHVwZGF0ZWQsIHNvCisgICAqIGFjY2Vzc2luZyBgdGhpcy5zdGF0ZWAgYWZ0ZXIgY2FsbGluZyB0
aGlzIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBvbGQgdmFsdWUuCisgICAqCisgICAqIFRoZXJlIGlz
IG5vIGd1YXJhbnRlZSB0aGF0IGNhbGxzIHRvIGBzZXRTdGF0ZWAgd2lsbCBydW4gc3luY2hyb25v
dXNseSwKKyAgICogYXMgdGhleSBtYXkgZXZlbnR1YWxseSBiZSBiYXRjaGVkIHRvZ2V0aGVyLiAg
WW91IGNhbiBwcm92aWRlIGFuIG9wdGlvbmFsCisgICAqIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBl
eGVjdXRlZCB3aGVuIHRoZSBjYWxsIHRvIHNldFN0YXRlIGlzIGFjdHVhbGx5CisgICAqIGNvbXBs
ZXRlZC4KKyAgICoKKyAgICogQHBhcmFtIHtvYmplY3R9IHBhcnRpYWxTdGF0ZSBOZXh0IHBhcnRp
YWwgc3RhdGUgdG8gYmUgbWVyZ2VkIHdpdGggc3RhdGUuCisgICAqIEBwYXJhbSB7P2Z1bmN0aW9u
fSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgc3RhdGUgaXMgdXBkYXRlZC4KKyAgICogQGZpbmFsCisg
ICAqIEBwcm90ZWN0ZWQKKyAgICovCisgIHNldFN0YXRlOiBmdW5jdGlvbihwYXJ0aWFsU3RhdGUs
IGNhbGxiYWNrKSB7CisgICAgLy8gTWVyZ2Ugd2l0aCBgX3BlbmRpbmdTdGF0ZWAgaWYgaXQgZXhp
c3RzLCBvdGhlcndpc2Ugd2l0aCBleGlzdGluZyBzdGF0ZS4KKyAgICB0aGlzLnJlcGxhY2VTdGF0
ZSgKKyAgICAgIG1lcmdlKHRoaXMuX3BlbmRpbmdTdGF0ZSB8fCB0aGlzLnN0YXRlLCBwYXJ0aWFs
U3RhdGUpLAorICAgICAgY2FsbGJhY2sKKyAgICApOworICB9LAorCisgIC8qKgorICAgKiBSZXBs
YWNlcyBhbGwgb2YgdGhlIHN0YXRlLiBBbHdheXMgdXNlIHRoaXMgb3IgYHNldFN0YXRlYCB0byBt
dXRhdGUgc3RhdGUuCisgICAqIFlvdSBzaG91bGQgdHJlYXQgYHRoaXMuc3RhdGVgIGFzIGltbXV0
YWJsZS4KKyAgICoKKyAgICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgYHRoaXMuc3RhdGVg
IHdpbGwgYmUgaW1tZWRpYXRlbHkgdXBkYXRlZCwgc28KKyAgICogYWNjZXNzaW5nIGB0aGlzLnN0
YXRlYCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIG1heSByZXR1cm4gdGhlIG9sZCB2YWx1ZS4K
KyAgICoKKyAgICogQHBhcmFtIHtvYmplY3R9IGNvbXBsZXRlU3RhdGUgTmV4dCBzdGF0ZS4KKyAg
ICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBzdGF0ZSBpcyB1cGRh
dGVkLgorICAgKiBAZmluYWwKKyAgICogQHByb3RlY3RlZAorICAgKi8KKyAgcmVwbGFjZVN0YXRl
OiBmdW5jdGlvbihjb21wbGV0ZVN0YXRlLCBjYWxsYmFjaykgeworICAgIHZhbGlkYXRlTGlmZUN5
Y2xlT25SZXBsYWNlU3RhdGUodGhpcyk7CisgICAgdGhpcy5fcGVuZGluZ1N0YXRlID0gY29tcGxl
dGVTdGF0ZTsKKyAgICBSZWFjdFVwZGF0ZXMuZW5xdWV1ZVVwZGF0ZSh0aGlzLCBjYWxsYmFjayk7
CisgIH0sCisKKyAgLyoqCisgICAqIFByb2Nlc3NlcyBwcm9wcyBieSBzZXR0aW5nIGRlZmF1bHQg
dmFsdWVzIGZvciB1bnNwZWNpZmllZCBwcm9wcyBhbmQKKyAgICogYXNzZXJ0aW5nIHRoYXQgdGhl
IHByb3BzIGFyZSB2YWxpZC4KKyAgICoKKyAgICogQHBhcmFtIHtvYmplY3R9IHByb3BzCisgICAq
IEBwcml2YXRlCisgICAqLworICBfcHJvY2Vzc1Byb3BzOiBmdW5jdGlvbihwcm9wcykgeworICAg
IHZhciBwcm9wTmFtZTsKKyAgICB2YXIgZGVmYXVsdFByb3BzID0gdGhpcy5fZGVmYXVsdFByb3Bz
OworICAgIGZvciAocHJvcE5hbWUgaW4gZGVmYXVsdFByb3BzKSB7CisgICAgICBpZiAoIShwcm9w
TmFtZSBpbiBwcm9wcykpIHsKKyAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gZGVmYXVsdFByb3Bz
W3Byb3BOYW1lXTsKKyAgICAgIH0KKyAgICB9CisgICAgdmFyIHByb3BUeXBlcyA9IHRoaXMuY29u
c3RydWN0b3IucHJvcFR5cGVzOworICAgIGlmIChwcm9wVHlwZXMpIHsKKyAgICAgIHZhciBjb21w
b25lbnROYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZTsKKyAgICAgIGZvciAocHJv
cE5hbWUgaW4gcHJvcFR5cGVzKSB7CisgICAgICAgIHZhciBjaGVja1Byb3AgPSBwcm9wVHlwZXNb
cHJvcE5hbWVdOworICAgICAgICBpZiAoY2hlY2tQcm9wKSB7CisgICAgICAgICAgY2hlY2tQcm9w
KHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAg
ICB9CisgIH0sCisKKyAgcGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5OiBmdW5jdGlvbigpIHsKKyAg
ICB2YXIgY29tcG9zaXRlTGlmZUN5Y2xlU3RhdGUgPSB0aGlzLl9jb21wb3NpdGVMaWZlQ3ljbGVT
dGF0ZTsKKyAgICAvLyBEbyBub3QgdHJpZ2dlciBhIHN0YXRlIHRyYW5zaXRpb24gaWYgd2UgYXJl
IGluIHRoZSBtaWRkbGUgb2YgbW91bnRpbmcgb3IKKyAgICAvLyByZWNlaXZpbmcgcHJvcHMgYmVj
YXVzZSBib3RoIG9mIHRob3NlIHdpbGwgYWxyZWFkeSBiZSBkb2luZyB0aGlzLgorICAgIGlmIChj
b21wb3NpdGVMaWZlQ3ljbGVTdGF0ZSA9PT0gQ29tcG9zaXRlTGlmZUN5Y2xlLk1PVU5USU5HIHx8
CisgICAgICAgIGNvbXBvc2l0ZUxpZmVDeWNsZVN0YXRlID09PSBDb21wb3NpdGVMaWZlQ3ljbGUu
UkVDRUlWSU5HX1BST1BTKSB7CisgICAgICByZXR1cm47CisgICAgfQorICAgIFJlYWN0Q29tcG9u
ZW50Lk1peGluLnBlcmZvcm1VcGRhdGVJZk5lY2Vzc2FyeS5jYWxsKHRoaXMpOworICB9LAorCisg
IC8qKgorICAgKiBJZiBhbnkgb2YgYF9wZW5kaW5nUHJvcHNgLCBgX3BlbmRpbmdTdGF0ZWAsIG9y
IGBfcGVuZGluZ0ZvcmNlVXBkYXRlYCBpcworICAgKiBzZXQsIHVwZGF0ZSB0aGUgY29tcG9uZW50
LgorICAgKgorICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0
aW9uCisgICAqIEBpbnRlcm5hbAorICAgKi8KKyAgX3BlcmZvcm1VcGRhdGVJZk5lY2Vzc2FyeTog
ZnVuY3Rpb24odHJhbnNhY3Rpb24pIHsKKyAgICBpZiAodGhpcy5fcGVuZGluZ1Byb3BzID09IG51
bGwgJiYKKyAgICAgICAgdGhpcy5fcGVuZGluZ1N0YXRlID09IG51bGwgJiYKKyAgICAgICAgIXRo
aXMuX3BlbmRpbmdGb3JjZVVwZGF0ZSkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZh
ciBuZXh0UHJvcHMgPSB0aGlzLnByb3BzOworICAgIGlmICh0aGlzLl9wZW5kaW5nUHJvcHMgIT0g
bnVsbCkgeworICAgICAgbmV4dFByb3BzID0gdGhpcy5fcGVuZGluZ1Byb3BzOworICAgICAgdGhp
cy5fcHJvY2Vzc1Byb3BzKG5leHRQcm9wcyk7CisgICAgICB0aGlzLl9wZW5kaW5nUHJvcHMgPSBu
dWxsOworCisgICAgICB0aGlzLl9jb21wb3NpdGVMaWZlQ3ljbGVTdGF0ZSA9IENvbXBvc2l0ZUxp
ZmVDeWNsZS5SRUNFSVZJTkdfUFJPUFM7CisgICAgICBpZiAodGhpcy5jb21wb25lbnRXaWxsUmVj
ZWl2ZVByb3BzKSB7CisgICAgICAgIHRoaXMuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0
UHJvcHMsIHRyYW5zYWN0aW9uKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICB0aGlzLl9jb21wb3Np
dGVMaWZlQ3ljbGVTdGF0ZSA9IENvbXBvc2l0ZUxpZmVDeWNsZS5SRUNFSVZJTkdfU1RBVEU7CisK
KyAgICB2YXIgbmV4dFN0YXRlID0gdGhpcy5fcGVuZGluZ1N0YXRlIHx8IHRoaXMuc3RhdGU7Cisg
ICAgdGhpcy5fcGVuZGluZ1N0YXRlID0gbnVsbDsKKworICAgIGlmICh0aGlzLl9wZW5kaW5nRm9y
Y2VVcGRhdGUgfHwKKyAgICAgICAgIXRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlIHx8CisgICAg
ICAgIHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlKSkgewor
ICAgICAgdGhpcy5fcGVuZGluZ0ZvcmNlVXBkYXRlID0gZmFsc2U7CisgICAgICAvLyBXaWxsIHNl
dCBgdGhpcy5wcm9wc2AgYW5kIGB0aGlzLnN0YXRlYC4KKyAgICAgIHRoaXMuX3BlcmZvcm1Db21w
b25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUsIHRyYW5zYWN0aW9uKTsKKyAgICB9IGVs
c2UgeworICAgICAgLy8gSWYgaXQncyBkZXRlcm1pbmVkIHRoYXQgYSBjb21wb25lbnQgc2hvdWxk
IG5vdCB1cGRhdGUsIHdlIHN0aWxsIHdhbnQKKyAgICAgIC8vIHRvIHNldCBwcm9wcyBhbmQgc3Rh
dGUuCisgICAgICB0aGlzLnByb3BzID0gbmV4dFByb3BzOworICAgICAgdGhpcy5zdGF0ZSA9IG5l
eHRTdGF0ZTsKKyAgICB9CisKKyAgICB0aGlzLl9jb21wb3NpdGVMaWZlQ3ljbGVTdGF0ZSA9IG51
bGw7CisgIH0sCisKKyAgLyoqCisgICAqIE1lcmdlcyBuZXcgcHJvcHMgYW5kIHN0YXRlLCBub3Rp
ZmllcyBkZWxlZ2F0ZSBtZXRob2RzIG9mIHVwZGF0ZSBhbmQKKyAgICogcGVyZm9ybXMgdXBkYXRl
LgorICAgKgorICAgKiBAcGFyYW0ge29iamVjdH0gbmV4dFByb3BzIE5leHQgb2JqZWN0IHRvIHNl
dCBhcyBwcm9wZXJ0aWVzLgorICAgKiBAcGFyYW0gez9vYmplY3R9IG5leHRTdGF0ZSBOZXh0IG9i
amVjdCB0byBzZXQgYXMgc3RhdGUuCisgICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2Fj
dGlvbn0gdHJhbnNhY3Rpb24KKyAgICogQHByaXZhdGUKKyAgICovCisgIF9wZXJmb3JtQ29tcG9u
ZW50VXBkYXRlOiBmdW5jdGlvbihuZXh0UHJvcHMsIG5leHRTdGF0ZSwgdHJhbnNhY3Rpb24pIHsK
KyAgICB2YXIgcHJldlByb3BzID0gdGhpcy5wcm9wczsKKyAgICB2YXIgcHJldlN0YXRlID0gdGhp
cy5zdGF0ZTsKKworICAgIGlmICh0aGlzLmNvbXBvbmVudFdpbGxVcGRhdGUpIHsKKyAgICAgIHRo
aXMuY29tcG9uZW50V2lsbFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSwgdHJhbnNhY3Rpb24p
OworICAgIH0KKworICAgIHRoaXMucHJvcHMgPSBuZXh0UHJvcHM7CisgICAgdGhpcy5zdGF0ZSA9
IG5leHRTdGF0ZTsKKworICAgIHRoaXMudXBkYXRlQ29tcG9uZW50KHRyYW5zYWN0aW9uLCBwcmV2
UHJvcHMsIHByZXZTdGF0ZSk7CisKKyAgICBpZiAodGhpcy5jb21wb25lbnREaWRVcGRhdGUpIHsK
KyAgICAgIHRyYW5zYWN0aW9uLmdldFJlYWN0T25ET01SZWFkeSgpLmVucXVldWUoCisgICAgICAg
IHRoaXMsCisgICAgICAgIHRoaXMuY29tcG9uZW50RGlkVXBkYXRlLmJpbmQodGhpcywgcHJldlBy
b3BzLCBwcmV2U3RhdGUpCisgICAgICApOworICAgIH0KKyAgfSwKKworICAvKioKKyAgICogVXBk
YXRlcyB0aGUgY29tcG9uZW50J3MgY3VycmVudGx5IG1vdW50ZWQgRE9NIHJlcHJlc2VudGF0aW9u
LgorICAgKgorICAgKiBCeSBkZWZhdWx0LCB0aGlzIGltcGxlbWVudHMgUmVhY3QncyByZW5kZXJp
bmcgYW5kIHJlY29uY2lsaWF0aW9uIGFsZ29yaXRobS4KKyAgICogU29waGlzdGljYXRlZCBjbGll
bnRzIG1heSB3aXNoIHRvIG92ZXJyaWRlIHRoaXMuCisgICAqCisgICAqIEBwYXJhbSB7UmVhY3RS
ZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb24KKyAgICogQHBhcmFtIHtvYmplY3R9IHBy
ZXZQcm9wcworICAgKiBAcGFyYW0gez9vYmplY3R9IHByZXZTdGF0ZQorICAgKiBAaW50ZXJuYWwK
KyAgICogQG92ZXJyaWRhYmxlCisgICAqLworICB1cGRhdGVDb21wb25lbnQ6IGZ1bmN0aW9uKHRy
YW5zYWN0aW9uLCBwcmV2UHJvcHMsIHByZXZTdGF0ZSkgeworICAgIFJlYWN0Q29tcG9uZW50Lk1p
eGluLnVwZGF0ZUNvbXBvbmVudC5jYWxsKHRoaXMsIHRyYW5zYWN0aW9uLCBwcmV2UHJvcHMpOwor
ICAgIHZhciBjdXJyZW50Q29tcG9uZW50ID0gdGhpcy5fcmVuZGVyZWRDb21wb25lbnQ7CisgICAg
dmFyIG5leHRDb21wb25lbnQgPSB0aGlzLl9yZW5kZXJWYWxpZGF0ZWRDb21wb25lbnQoKTsKKyAg
ICBpZiAoY3VycmVudENvbXBvbmVudC5jb25zdHJ1Y3RvciA9PT0gbmV4dENvbXBvbmVudC5jb25z
dHJ1Y3RvcikgeworICAgICAgY3VycmVudENvbXBvbmVudC5yZWNlaXZlUHJvcHMobmV4dENvbXBv
bmVudC5wcm9wcywgdHJhbnNhY3Rpb24pOworICAgIH0gZWxzZSB7CisgICAgICAvLyBUaGVzZSB0
d28gSURzIGFyZSBhY3R1YWxseSB0aGUgc2FtZSEgQnV0IG5vdGhpbmcgc2hvdWxkIHJlbHkgb24g
dGhhdC4KKyAgICAgIHZhciB0aGlzSUQgPSB0aGlzLl9yb290Tm9kZUlEOworICAgICAgdmFyIGN1
cnJlbnRDb21wb25lbnRJRCA9IGN1cnJlbnRDb21wb25lbnQuX3Jvb3ROb2RlSUQ7CisgICAgICBj
dXJyZW50Q29tcG9uZW50LnVubW91bnRDb21wb25lbnQoKTsKKyAgICAgIHZhciBuZXh0TWFya3Vw
ID0gbmV4dENvbXBvbmVudC5tb3VudENvbXBvbmVudCh0aGlzSUQsIHRyYW5zYWN0aW9uKTsKKyAg
ICAgIFJlYWN0Q29tcG9uZW50LkRPTUlET3BlcmF0aW9ucy5kYW5nZXJvdXNseVJlcGxhY2VOb2Rl
V2l0aE1hcmt1cEJ5SUQoCisgICAgICAgIGN1cnJlbnRDb21wb25lbnRJRCwKKyAgICAgICAgbmV4
dE1hcmt1cAorICAgICAgKTsKKyAgICAgIHRoaXMuX3JlbmRlcmVkQ29tcG9uZW50ID0gbmV4dENv
bXBvbmVudDsKKyAgICB9CisgIH0sCisKKyAgLyoqCisgICAqIEZvcmNlcyBhbiB1cGRhdGUuIFRo
aXMgc2hvdWxkIG9ubHkgYmUgaW52b2tlZCB3aGVuIGl0IGlzIGtub3duIHdpdGgKKyAgICogY2Vy
dGFpbnR5IHRoYXQgd2UgYXJlICoqbm90KiogaW4gYSBET00gdHJhbnNhY3Rpb24uCisgICAqCisg
ICAqIFlvdSBtYXkgd2FudCB0byBjYWxsIHRoaXMgd2hlbiB5b3Uga25vdyB0aGF0IHNvbWUgZGVl
cGVyIGFzcGVjdCBvZiB0aGUKKyAgICogY29tcG9uZW50J3Mgc3RhdGUgaGFzIGNoYW5nZWQgYnV0
IGBzZXRTdGF0ZWAgd2FzIG5vdCBjYWxsZWQuCisgICAqCisgICAqIFRoaXMgd2lsbCBub3QgaW52
b2tlIGBzaG91bGRVcGRhdGVDb21wb25lbnRgLCBidXQgaXQgd2lsbCBpbnZva2UKKyAgICogYGNv
bXBvbmVudFdpbGxVcGRhdGVgIGFuZCBgY29tcG9uZW50RGlkVXBkYXRlYC4KKyAgICoKKyAgICog
QHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciB1cGRhdGUgaXMgY29tcGxl
dGUuCisgICAqIEBmaW5hbAorICAgKiBAcHJvdGVjdGVkCisgICAqLworICBmb3JjZVVwZGF0ZTog
ZnVuY3Rpb24oY2FsbGJhY2spIHsKKyAgICB2YXIgY29tcG9zaXRlTGlmZUN5Y2xlU3RhdGUgPSB0
aGlzLl9jb21wb3NpdGVMaWZlQ3ljbGVTdGF0ZTsKKyAgICBpbnZhcmlhbnQoCisgICAgICB0aGlz
LmlzTW91bnRlZCgpIHx8CisgICAgICAgIGNvbXBvc2l0ZUxpZmVDeWNsZVN0YXRlID09PSBDb21w
b3NpdGVMaWZlQ3ljbGUuTU9VTlRJTkcsCisgICAgICAnZm9yY2VVcGRhdGUoLi4uKTogQ2FuIG9u
bHkgZm9yY2UgYW4gdXBkYXRlIG9uIG1vdW50ZWQgb3IgbW91bnRpbmcgJyArCisgICAgICAgICdj
b21wb25lbnRzLicKKyAgICApOworICAgIGludmFyaWFudCgKKyAgICAgIGNvbXBvc2l0ZUxpZmVD
eWNsZVN0YXRlICE9PSBDb21wb3NpdGVMaWZlQ3ljbGUuUkVDRUlWSU5HX1NUQVRFICYmCisgICAg
ICBjb21wb3NpdGVMaWZlQ3ljbGVTdGF0ZSAhPT0gQ29tcG9zaXRlTGlmZUN5Y2xlLlVOTU9VTlRJ
TkcsCisgICAgICAnZm9yY2VVcGRhdGUoLi4uKTogQ2Fubm90IGZvcmNlIGFuIHVwZGF0ZSB3aGls
ZSB1bm1vdW50aW5nIGNvbXBvbmVudCAnICsKKyAgICAgICdvciBkdXJpbmcgYW4gZXhpc3Rpbmcg
c3RhdGUgdHJhbnNpdGlvbiAoc3VjaCBhcyB3aXRoaW4gYHJlbmRlcmApLicKKyAgICApOworICAg
IHRoaXMuX3BlbmRpbmdGb3JjZVVwZGF0ZSA9IHRydWU7CisgICAgUmVhY3RVcGRhdGVzLmVucXVl
dWVVcGRhdGUodGhpcywgY2FsbGJhY2spOworICB9LAorCisgIC8qKgorICAgKiBAcHJpdmF0ZQor
ICAgKi8KKyAgX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudDogZnVuY3Rpb24oKSB7CisgICAgdmFy
IHJlbmRlcmVkQ29tcG9uZW50OworICAgIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgPSB0aGlz
OworICAgIHRyeSB7CisgICAgICByZW5kZXJlZENvbXBvbmVudCA9IHRoaXMucmVuZGVyKCk7Cisg
ICAgfSBjYXRjaCAoZXJyb3IpIHsKKyAgICAgIC8vIElFOCByZXF1aXJlcyBgY2F0Y2hgIGluIG9y
ZGVyIHRvIHVzZSBgZmluYWxseWAuCisgICAgICB0aHJvdyBlcnJvcjsKKyAgICB9IGZpbmFsbHkg
eworICAgICAgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCA9IG51bGw7CisgICAgfQorICAgIGlu
dmFyaWFudCgKKyAgICAgIFJlYWN0Q29tcG9uZW50LmlzVmFsaWRDb21wb25lbnQocmVuZGVyZWRD
b21wb25lbnQpLAorICAgICAgJyVzLnJlbmRlcigpOiBBIHZhbGlkIFJlYWN0Q29tcG9uZW50IG11
c3QgYmUgcmV0dXJuZWQuJywKKyAgICAgIHRoaXMuY29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwg
J1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50JworICAgICk7CisgICAgcmV0dXJuIHJlbmRlcmVkQ29t
cG9uZW50OworICB9LAorCisgIC8qKgorICAgKiBAcHJpdmF0ZQorICAgKi8KKyAgX2JpbmRBdXRv
QmluZE1ldGhvZHM6IGZ1bmN0aW9uKCkgeworICAgIGZvciAodmFyIGF1dG9CaW5kS2V5IGluIHRo
aXMuX19yZWFjdEF1dG9CaW5kTWFwKSB7CisgICAgICBpZiAoIXRoaXMuX19yZWFjdEF1dG9CaW5k
TWFwLmhhc093blByb3BlcnR5KGF1dG9CaW5kS2V5KSkgeworICAgICAgICBjb250aW51ZTsKKyAg
ICAgIH0KKyAgICAgIHZhciBtZXRob2QgPSB0aGlzLl9fcmVhY3RBdXRvQmluZE1hcFthdXRvQmlu
ZEtleV07CisgICAgICB0aGlzW2F1dG9CaW5kS2V5XSA9IHRoaXMuX2JpbmRBdXRvQmluZE1ldGhv
ZChtZXRob2QpOworICAgIH0KKyAgfSwKKworICAvKioKKyAgICogQmluZHMgYSBtZXRob2QgdG8g
dGhlIGNvbXBvbmVudC4KKyAgICoKKyAgICogQHBhcmFtIHtmdW5jdGlvbn0gbWV0aG9kIE1ldGhv
ZCB0byBiZSBib3VuZC4KKyAgICogQHByaXZhdGUKKyAgICovCisgIF9iaW5kQXV0b0JpbmRNZXRo
b2Q6IGZ1bmN0aW9uKG1ldGhvZCkgeworICAgIHZhciBjb21wb25lbnQgPSB0aGlzOworICAgIHZh
ciBib3VuZE1ldGhvZCA9IGZ1bmN0aW9uKCkgeworICAgICAgcmV0dXJuIG1ldGhvZC5hcHBseShj
b21wb25lbnQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBpZiAodHJ1ZSkgeworICAgICAgdmFy
IGNvbXBvbmVudE5hbWUgPSBjb21wb25lbnQuY29uc3RydWN0b3IuZGlzcGxheU5hbWU7CisgICAg
ICB2YXIgX2JpbmQgPSBib3VuZE1ldGhvZC5iaW5kOworICAgICAgYm91bmRNZXRob2QuYmluZCA9
IGZ1bmN0aW9uKG5ld1RoaXMpIHsKKyAgICAgICAgLy8gVXNlciBpcyB0cnlpbmcgdG8gYmluZCgp
IGFuIGF1dG9ib3VuZCBtZXRob2Q7IHdlIGVmZmVjdGl2ZWx5IHdpbGwKKyAgICAgICAgLy8gaWdu
b3JlIHRoZSB2YWx1ZSBvZiAidGhpcyIgdGhhdCB0aGUgdXNlciBpcyB0cnlpbmcgdG8gdXNlLCBz
bworICAgICAgICAvLyBsZXQncyB3YXJuLgorICAgICAgICBpZiAobmV3VGhpcyAhPT0gY29tcG9u
ZW50KSB7CisgICAgICAgICAgY29uc29sZS53YXJuKAorICAgICAgICAgICAgJ2JpbmQoKTogUmVh
Y3QgY29tcG9uZW50IG1ldGhvZHMgbWF5IG9ubHkgYmUgYm91bmQgdG8gdGhlICcgKworICAgICAg
ICAgICAgJ2NvbXBvbmVudCBpbnN0YW5jZS4gU2VlICcgKyBjb21wb25lbnROYW1lCisgICAgICAg
ICAgKTsKKyAgICAgICAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7CisgICAg
ICAgICAgY29uc29sZS53YXJuKAorICAgICAgICAgICAgJ2JpbmQoKTogWW91IGFyZSBiaW5kaW5n
IGEgY29tcG9uZW50IG1ldGhvZCB0byB0aGUgY29tcG9uZW50LiAnICsKKyAgICAgICAgICAgICdS
ZWFjdCBkb2VzIHRoaXMgZm9yIHlvdSBhdXRvbWF0aWNhbGx5IGluIGEgaGlnaC1wZXJmb3JtYW5j
ZSAnICsKKyAgICAgICAgICAgICd3YXksIHNvIHlvdSBjYW4gc2FmZWx5IHJlbW92ZSB0aGlzIGNh
bGwuIFNlZSAnICsgY29tcG9uZW50TmFtZQorICAgICAgICAgICk7CisgICAgICAgICAgcmV0dXJu
IGJvdW5kTWV0aG9kOworICAgICAgICB9CisgICAgICAgIHJldHVybiBfYmluZC5hcHBseShib3Vu
ZE1ldGhvZCwgYXJndW1lbnRzKTsKKyAgICAgIH07CisgICAgfQorICAgIHJldHVybiBib3VuZE1l
dGhvZDsKKyAgfQorfTsKKwordmFyIFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50QmFzZSA9IGZ1bmN0
aW9uKCkge307CittaXhJbnRvKFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50QmFzZSwgUmVhY3RDb21w
b25lbnQuTWl4aW4pOworbWl4SW50byhSZWFjdENvbXBvc2l0ZUNvbXBvbmVudEJhc2UsIFJlYWN0
T3duZXIuTWl4aW4pOworbWl4SW50byhSZWFjdENvbXBvc2l0ZUNvbXBvbmVudEJhc2UsIFJlYWN0
UHJvcFRyYW5zZmVyZXIuTWl4aW4pOworbWl4SW50byhSZWFjdENvbXBvc2l0ZUNvbXBvbmVudEJh
c2UsIFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50TWl4aW4pOworCisvKioKKyAqIE1vZHVsZSBmb3Ig
Y3JlYXRpbmcgY29tcG9zaXRlIGNvbXBvbmVudHMuCisgKgorICogQGNsYXNzIFJlYWN0Q29tcG9z
aXRlQ29tcG9uZW50CisgKiBAZXh0ZW5kcyBSZWFjdENvbXBvbmVudAorICogQGV4dGVuZHMgUmVh
Y3RPd25lcgorICogQGV4dGVuZHMgUmVhY3RQcm9wVHJhbnNmZXJlcgorICovCit2YXIgUmVhY3RD
b21wb3NpdGVDb21wb25lbnQgPSB7CisKKyAgTGlmZUN5Y2xlOiBDb21wb3NpdGVMaWZlQ3ljbGUs
CisKKyAgQmFzZTogUmVhY3RDb21wb3NpdGVDb21wb25lbnRCYXNlLAorCisgIC8qKgorICAgKiBD
cmVhdGVzIGEgY29tcG9zaXRlIGNvbXBvbmVudCBjbGFzcyBnaXZlbiBhIGNsYXNzIHNwZWNpZmlj
YXRpb24uCisgICAqCisgICAqIEBwYXJhbSB7b2JqZWN0fSBzcGVjIENsYXNzIHNwZWNpZmljYXRp
b24gKHdoaWNoIG11c3QgZGVmaW5lIGByZW5kZXJgKS4KKyAgICogQHJldHVybiB7ZnVuY3Rpb259
IENvbXBvbmVudCBjb25zdHJ1Y3RvciBmdW5jdGlvbi4KKyAgICogQHB1YmxpYworICAgKi8KKyAg
Y3JlYXRlQ2xhc3M6IGZ1bmN0aW9uKHNwZWMpIHsKKyAgICB2YXIgQ29uc3RydWN0b3IgPSBmdW5j
dGlvbigpIHt9OworICAgIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IG5ldyBSZWFjdENvbXBvc2l0
ZUNvbXBvbmVudEJhc2UoKTsKKyAgICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3Ig
PSBDb25zdHJ1Y3RvcjsKKyAgICBtaXhTcGVjSW50b0NvbXBvbmVudChDb25zdHJ1Y3Rvciwgc3Bl
Yyk7CisgICAgaW52YXJpYW50KAorICAgICAgQ29uc3RydWN0b3IucHJvdG90eXBlLnJlbmRlciwK
KyAgICAgICdjcmVhdGVDbGFzcyguLi4pOiBDbGFzcyBzcGVjaWZpY2F0aW9uIG11c3QgaW1wbGVt
ZW50IGEgYHJlbmRlcmAgbWV0aG9kLicKKyAgICApOworICAgIC8vIFJlZHVjZSB0aW1lIHNwZW50
IGRvaW5nIGxvb2t1cHMgYnkgc2V0dGluZyB0aGVzZSBvbiB0aGUgcHJvdG90eXBlLgorICAgIGZv
ciAodmFyIG1ldGhvZE5hbWUgaW4gUmVhY3RDb21wb3NpdGVDb21wb25lbnRJbnRlcmZhY2UpIHsK
KyAgICAgIGlmICghQ29uc3RydWN0b3IucHJvdG90eXBlW21ldGhvZE5hbWVdKSB7CisgICAgICAg
IENvbnN0cnVjdG9yLnByb3RvdHlwZVttZXRob2ROYW1lXSA9IG51bGw7CisgICAgICB9CisgICAg
fQorCisgICAgdmFyIENvbnZlbmllbmNlQ29uc3RydWN0b3IgPSBmdW5jdGlvbihwcm9wcywgY2hp
bGRyZW4pIHsKKyAgICAgIHZhciBpbnN0YW5jZSA9IG5ldyBDb25zdHJ1Y3RvcigpOworICAgICAg
aW5zdGFuY2UuY29uc3RydWN0LmFwcGx5KGluc3RhbmNlLCBhcmd1bWVudHMpOworICAgICAgcmV0
dXJuIGluc3RhbmNlOworICAgIH07CisgICAgQ29udmVuaWVuY2VDb25zdHJ1Y3Rvci5jb21wb25l
bnRDb25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yOworICAgIENvbnZlbmllbmNlQ29uc3RydWN0b3Iu
b3JpZ2luYWxTcGVjID0gc3BlYzsKKyAgICByZXR1cm4gQ29udmVuaWVuY2VDb25zdHJ1Y3RvcjsK
KyAgfSwKKworICAvKioKKyAgICogVE9ETzogRGVsZXRlIHRoaXMgd2hlbiBhbGwgY2FsbGVycyBo
YXZlIGJlZW4gdXBkYXRlZCB0byByZWx5IG9uIHRoaXMKKyAgICogYmVoYXZpb3IgYmVpbmcgdGhl
IGRlZmF1bHQuCisgICAqCisgICAqIEJhY2t3YXJkcyBjb21wYXRpYmxlIHN0dWIgZm9yIHdoYXQg
aXMgbm93IHRoZSBkZWZhdWx0IGJlaGF2aW9yLgorICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBtZXRo
b2QgTWV0aG9kIHRvIGJlIGJvdW5kLgorICAgKiBAcHVibGljCisgICAqLworICBhdXRvQmluZDog
ZnVuY3Rpb24obWV0aG9kKSB7CisgICAgaWYgKHRydWUpIHsKKyAgICAgIGNvbnNvbGUud2FybigK
KyAgICAgICAgJ1JlYWN0LmF1dG9CaW5kKCkgaXMgbm93IGRlcHJlY2F0ZWQuIEFsbCBSZWFjdCBj
b21wb25lbnQgbWV0aG9kcyAnICsKKyAgICAgICAgJ2FyZSBhdXRvIGJvdW5kIGJ5IGRlZmF1bHQs
IHNvIFJlYWN0LmF1dG9CaW5kKCkgaXMgYSBuby1vcC4gSXQgJyArCisgICAgICAgICd3aWxsIGJl
IHJlbW92ZWQgaW4gdGhlIG5leHQgdmVyc2lvbiBvZiBSZWFjdCcKKyAgICAgICk7CisgICAgfQor
ICAgIHJldHVybiBtZXRob2Q7CisgIH0KK307CisKK21vZHVsZS5leHBvcnRzID0gUmVhY3RDb21w
b3NpdGVDb21wb25lbnQ7CisKK30pKCkKK30seyIuL1JlYWN0Q29tcG9uZW50IjoyMiwiLi9SZWFj
dEN1cnJlbnRPd25lciI6MjQsIi4vUmVhY3RPd25lciI6NDIsIi4vUmVhY3RQcm9wVHJhbnNmZXJl
ciI6NDMsIi4vUmVhY3RVcGRhdGVzIjo0OCwiLi9pbnZhcmlhbnQiOjc1LCIuL2tleU1pcnJvciI6
NzgsIi4vbWVyZ2UiOjgxLCIuL21peEludG8iOjg0fV0sMjQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9k
dWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMyBGYWNlYm9vaywgSW5jLgorICoK
KyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAi
TGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxp
YW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBM
aWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0Ut
Mi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0
byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2Ug
aXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElF
UyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgor
ICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBl
cm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICog
QHByb3ZpZGVzTW9kdWxlIFJlYWN0Q3VycmVudE93bmVyCisgKi8KKworInVzZSBzdHJpY3QiOwor
CisvKioKKyAqIEtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IG93bmVyLgorICoKKyAqIFRoZSBj
dXJyZW50IG93bmVyIGlzIHRoZSBjb21wb25lbnQgd2hvIHNob3VsZCBvd24gYW55IGNvbXBvbmVu
dHMgdGhhdCBhcmUKKyAqIGN1cnJlbnRseSBiZWluZyBjb25zdHJ1Y3RlZC4KKyAqCisgKiBUaGUg
ZGVwdGggaW5kaWNhdGUgaG93IG1hbnkgY29tcG9zaXRlIGNvbXBvbmVudHMgYXJlIGFib3ZlIHRo
aXMgcmVuZGVyIGxldmVsLgorICovCit2YXIgUmVhY3RDdXJyZW50T3duZXIgPSB7CisKKyAgLyoq
CisgICAqIEBpbnRlcm5hbAorICAgKiBAdHlwZSB7UmVhY3RDb21wb25lbnR9CisgICAqLworICBj
dXJyZW50OiBudWxsCisKK307CisKK21vZHVsZS5leHBvcnRzID0gUmVhY3RDdXJyZW50T3duZXI7
CisKK30se31dLDI1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICog
Q29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUg
QXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkg
bm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4K
KyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6
Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1
aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUK
KyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJB
UyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkg
S0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3Ig
dGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0
YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBSZWFjdERP
TQorICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHkKKyAqLworCisidXNlIHN0cmljdCI7CisKK3Zh
ciBSZWFjdE5hdGl2ZUNvbXBvbmVudCA9IHJlcXVpcmUoIi4vUmVhY3ROYXRpdmVDb21wb25lbnQi
KTsKKwordmFyIG1lcmdlSW50byA9IHJlcXVpcmUoIi4vbWVyZ2VJbnRvIik7Cit2YXIgb2JqTWFw
S2V5VmFsID0gcmVxdWlyZSgiLi9vYmpNYXBLZXlWYWwiKTsKKworLyoqCisgKiBDcmVhdGVzIGEg
bmV3IFJlYWN0IGNsYXNzIHRoYXQgaXMgaWRlbXBvdGVudCBhbmQgY2FwYWJsZSBvZiBjb250YWlu
aW5nIG90aGVyCisgKiBSZWFjdCBjb21wb25lbnRzLiBJdCBhY2NlcHRzIGV2ZW50IGxpc3RlbmVy
cyBhbmQgRE9NIHByb3BlcnRpZXMgdGhhdCBhcmUKKyAqIHZhbGlkIGFjY29yZGluZyB0byBgRE9N
UHJvcGVydHlgLgorICoKKyAqICAtIEV2ZW50IGxpc3RlbmVyczogYG9uQ2xpY2tgLCBgb25Nb3Vz
ZURvd25gLCBldGMuCisgKiAgLSBET00gcHJvcGVydGllczogYGNsYXNzTmFtZWAsIGBuYW1lYCwg
YHRpdGxlYCwgZXRjLgorICoKKyAqIFRoZSBgc3R5bGVgIHByb3BlcnR5IGZ1bmN0aW9ucyBkaWZm
ZXJlbnRseSBmcm9tIHRoZSBET00gQVBJLiBJdCBhY2NlcHRzIGFuCisgKiBvYmplY3QgbWFwcGlu
ZyBvZiBzdHlsZSBwcm9wZXJ0aWVzIHRvIHZhbHVlcy4KKyAqCisgKiBAcGFyYW0ge3N0cmluZ30g
dGFnIFRhZyBuYW1lIChlLmcuIGBkaXZgKS4KKyAqIEBwYXJhbSB7Ym9vbGVhbn0gb21pdENsb3Nl
IFRydWUgaWYgdGhlIGNsb3NlIHRhZyBzaG91bGQgYmUgb21pdHRlZC4KKyAqIEBwcml2YXRlCisg
Ki8KK2Z1bmN0aW9uIGNyZWF0ZURPTUNvbXBvbmVudENsYXNzKHRhZywgb21pdENsb3NlKSB7Cisg
IHZhciBDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uKCkge307CisgIENvbnN0cnVjdG9yLnByb3RvdHlw
ZSA9IG5ldyBSZWFjdE5hdGl2ZUNvbXBvbmVudCh0YWcsIG9taXRDbG9zZSk7CisgIENvbnN0cnVj
dG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yOworCisgIHZhciBDb252ZW5p
ZW5jZUNvbnN0cnVjdG9yID0gZnVuY3Rpb24ocHJvcHMsIGNoaWxkcmVuKSB7CisgICAgdmFyIGlu
c3RhbmNlID0gbmV3IENvbnN0cnVjdG9yKCk7CisgICAgaW5zdGFuY2UuY29uc3RydWN0LmFwcGx5
KGluc3RhbmNlLCBhcmd1bWVudHMpOworICAgIHJldHVybiBpbnN0YW5jZTsKKyAgfTsKKyAgQ29u
dmVuaWVuY2VDb25zdHJ1Y3Rvci5jb21wb25lbnRDb25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yOwor
ICByZXR1cm4gQ29udmVuaWVuY2VDb25zdHJ1Y3RvcjsKK30KKworLyoqCisgKiBDcmVhdGVzIGEg
bWFwcGluZyBmcm9tIHN1cHBvcnRlZCBIVE1MIHRhZ3MgdG8gYFJlYWN0TmF0aXZlQ29tcG9uZW50
YCBjbGFzc2VzLgorICogVGhpcyBpcyBhbHNvIGFjY2Vzc2libGUgdmlhIGBSZWFjdC5ET01gLgor
ICoKKyAqIEBwdWJsaWMKKyAqLwordmFyIFJlYWN0RE9NID0gb2JqTWFwS2V5VmFsKHsKKyAgYTog
ZmFsc2UsCisgIGFiYnI6IGZhbHNlLAorICBhZGRyZXNzOiBmYWxzZSwKKyAgYXJlYTogZmFsc2Us
CisgIGFydGljbGU6IGZhbHNlLAorICBhc2lkZTogZmFsc2UsCisgIGF1ZGlvOiBmYWxzZSwKKyAg
YjogZmFsc2UsCisgIGJhc2U6IGZhbHNlLAorICBiZGk6IGZhbHNlLAorICBiZG86IGZhbHNlLAor
ICBiaWc6IGZhbHNlLAorICBibG9ja3F1b3RlOiBmYWxzZSwKKyAgYm9keTogZmFsc2UsCisgIGJy
OiB0cnVlLAorICBidXR0b246IGZhbHNlLAorICBjYW52YXM6IGZhbHNlLAorICBjYXB0aW9uOiBm
YWxzZSwKKyAgY2l0ZTogZmFsc2UsCisgIGNvZGU6IGZhbHNlLAorICBjb2w6IHRydWUsCisgIGNv
bGdyb3VwOiBmYWxzZSwKKyAgZGF0YTogZmFsc2UsCisgIGRhdGFsaXN0OiBmYWxzZSwKKyAgZGQ6
IGZhbHNlLAorICBkZWw6IGZhbHNlLAorICBkZXRhaWxzOiBmYWxzZSwKKyAgZGZuOiBmYWxzZSwK
KyAgZGl2OiBmYWxzZSwKKyAgZGw6IGZhbHNlLAorICBkdDogZmFsc2UsCisgIGVtOiBmYWxzZSwK
KyAgZW1iZWQ6IHRydWUsCisgIGZpZWxkc2V0OiBmYWxzZSwKKyAgZmlnY2FwdGlvbjogZmFsc2Us
CisgIGZpZ3VyZTogZmFsc2UsCisgIGZvb3RlcjogZmFsc2UsCisgIGZvcm06IGZhbHNlLCAvLyBO
T1RFOiBJbmplY3RlZCwgc2VlIGBSZWFjdERPTUZvcm1gLgorICBoMTogZmFsc2UsCisgIGgyOiBm
YWxzZSwKKyAgaDM6IGZhbHNlLAorICBoNDogZmFsc2UsCisgIGg1OiBmYWxzZSwKKyAgaDY6IGZh
bHNlLAorICBoZWFkOiBmYWxzZSwKKyAgaGVhZGVyOiBmYWxzZSwKKyAgaHI6IHRydWUsCisgIGh0
bWw6IGZhbHNlLAorICBpOiBmYWxzZSwKKyAgaWZyYW1lOiBmYWxzZSwKKyAgaW1nOiB0cnVlLAor
ICBpbnB1dDogdHJ1ZSwKKyAgaW5zOiBmYWxzZSwKKyAga2JkOiBmYWxzZSwKKyAga2V5Z2VuOiB0
cnVlLAorICBsYWJlbDogZmFsc2UsCisgIGxlZ2VuZDogZmFsc2UsCisgIGxpOiBmYWxzZSwKKyAg
bGluazogZmFsc2UsCisgIG1haW46IGZhbHNlLAorICBtYXA6IGZhbHNlLAorICBtYXJrOiBmYWxz
ZSwKKyAgbWVudTogZmFsc2UsCisgIG1lbnVpdGVtOiBmYWxzZSwgLy8gTk9URTogQ2xvc2UgdGFn
IHNob3VsZCBiZSBvbWl0dGVkLCBidXQgY2F1c2VzIHByb2JsZW1zLgorICBtZXRhOiB0cnVlLAor
ICBtZXRlcjogZmFsc2UsCisgIG5hdjogZmFsc2UsCisgIG5vc2NyaXB0OiBmYWxzZSwKKyAgb2Jq
ZWN0OiBmYWxzZSwKKyAgb2w6IGZhbHNlLAorICBvcHRncm91cDogZmFsc2UsCisgIG9wdGlvbjog
ZmFsc2UsCisgIG91dHB1dDogZmFsc2UsCisgIHA6IGZhbHNlLAorICBwYXJhbTogdHJ1ZSwKKyAg
cHJlOiBmYWxzZSwKKyAgcHJvZ3Jlc3M6IGZhbHNlLAorICBxOiBmYWxzZSwKKyAgcnA6IGZhbHNl
LAorICBydDogZmFsc2UsCisgIHJ1Ynk6IGZhbHNlLAorICBzOiBmYWxzZSwKKyAgc2FtcDogZmFs
c2UsCisgIHNjcmlwdDogZmFsc2UsCisgIHNlY3Rpb246IGZhbHNlLAorICBzZWxlY3Q6IGZhbHNl
LAorICBzbWFsbDogZmFsc2UsCisgIHNvdXJjZTogZmFsc2UsCisgIHNwYW46IGZhbHNlLAorICBz
dHJvbmc6IGZhbHNlLAorICBzdHlsZTogZmFsc2UsCisgIHN1YjogZmFsc2UsCisgIHN1bW1hcnk6
IGZhbHNlLAorICBzdXA6IGZhbHNlLAorICB0YWJsZTogZmFsc2UsCisgIHRib2R5OiBmYWxzZSwK
KyAgdGQ6IGZhbHNlLAorICB0ZXh0YXJlYTogZmFsc2UsIC8vIE5PVEU6IEluamVjdGVkLCBzZWUg
YFJlYWN0RE9NVGV4dGFyZWFgLgorICB0Zm9vdDogZmFsc2UsCisgIHRoOiBmYWxzZSwKKyAgdGhl
YWQ6IGZhbHNlLAorICB0aW1lOiBmYWxzZSwKKyAgdGl0bGU6IGZhbHNlLAorICB0cjogZmFsc2Us
CisgIHRyYWNrOiB0cnVlLAorICB1OiBmYWxzZSwKKyAgdWw6IGZhbHNlLAorICAndmFyJzogZmFs
c2UsCisgIHZpZGVvOiBmYWxzZSwKKyAgd2JyOiBmYWxzZSwKKworICAvLyBTVkcKKyAgY2lyY2xl
OiBmYWxzZSwKKyAgZzogZmFsc2UsCisgIGxpbmU6IGZhbHNlLAorICBwYXRoOiBmYWxzZSwKKyAg
cG9seWxpbmU6IGZhbHNlLAorICByZWN0OiBmYWxzZSwKKyAgc3ZnOiBmYWxzZSwKKyAgdGV4dDog
ZmFsc2UKK30sIGNyZWF0ZURPTUNvbXBvbmVudENsYXNzKTsKKwordmFyIGluamVjdGlvbiA9IHsK
KyAgaW5qZWN0Q29tcG9uZW50Q2xhc3NlczogZnVuY3Rpb24oY29tcG9uZW50Q2xhc3Nlcykgewor
ICAgIG1lcmdlSW50byhSZWFjdERPTSwgY29tcG9uZW50Q2xhc3Nlcyk7CisgIH0KK307CisKK1Jl
YWN0RE9NLmluamVjdGlvbiA9IGluamVjdGlvbjsKKworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdERP
TTsKKworfSx7Ii4vUmVhY3ROYXRpdmVDb21wb25lbnQiOjQwLCIuL21lcmdlSW50byI6ODMsIi4v
b2JqTWFwS2V5VmFsIjo4NX1dLDI2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsK
Ky8qKgorICogQ29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1
bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAq
IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUg
TGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoK
KyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVu
bGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywg
c29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVk
IG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9O
UyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGlj
ZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQK
KyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVs
ZSBSZWFjdERPTUZvcm0KKyAqLworCisidXNlIHN0cmljdCI7CisKK3ZhciBSZWFjdENvbXBvc2l0
ZUNvbXBvbmVudCA9IHJlcXVpcmUoIi4vUmVhY3RDb21wb3NpdGVDb21wb25lbnQiKTsKK3ZhciBS
ZWFjdERPTSA9IHJlcXVpcmUoIi4vUmVhY3RET00iKTsKK3ZhciBSZWFjdEV2ZW50RW1pdHRlciA9
IHJlcXVpcmUoIi4vUmVhY3RFdmVudEVtaXR0ZXIiKTsKK3ZhciBFdmVudENvbnN0YW50cyA9IHJl
cXVpcmUoIi4vRXZlbnRDb25zdGFudHMiKTsKKworLy8gU3RvcmUgYSByZWZlcmVuY2UgdG8gdGhl
IDxmb3JtPiBgUmVhY3ROYXRpdmVDb21wb25lbnRgLgordmFyIGZvcm0gPSBSZWFjdERPTS5mb3Jt
OworCisvKioKKyAqIFNpbmNlIG9uU3VibWl0IGRvZXNuJ3QgYnViYmxlIE9SIGNhcHR1cmUgb24g
dGhlIHRvcCBsZXZlbCBpbiBJRTgsIHdlIG5lZWQKKyAqIHRvIGNhcHR1cmUgaXQgb24gdGhlIDxm
b3JtPiBlbGVtZW50IGl0c2VsZi4gVGhlcmUgYXJlIGxvdHMgb2YgaGFja3Mgd2UgY291bGQKKyAq
IGRvIHRvIGFjY29tcGxpc2ggdGhpcywgYnV0IHRoZSBtb3N0IHJlbGlhYmxlIGlzIHRvIG1ha2Ug
PGZvcm0+IGEKKyAqIGNvbXBvc2l0ZSBjb21wb25lbnQgYW5kIHVzZSBgY29tcG9uZW50RGlkTW91
bnRgIHRvIGF0dGFjaCB0aGUgZXZlbnQgaGFuZGxlcnMuCisgKi8KK3ZhciBSZWFjdERPTUZvcm0g
PSBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudC5jcmVhdGVDbGFzcyh7CisgIHJlbmRlcjogZnVuY3Rp
b24oKSB7CisgICAgLy8gVE9ETzogSW5zdGVhZCBvZiB1c2luZyBgUmVhY3RET01gIGRpcmVjdGx5
LCB3ZSBzaG91bGQgdXNlIEpTWC4gSG93ZXZlciwKKyAgICAvLyBganNoaW50YCBmYWlscyB0byBw
YXJzZSBKU1ggc28gaW4gb3JkZXIgZm9yIGxpbnRpbmcgdG8gd29yayBpbiB0aGUgb3BlbgorICAg
IC8vIHNvdXJjZSByZXBvLCB3ZSBuZWVkIHRvIGp1c3QgdXNlIGBSZWFjdERPTS5mb3JtYC4KKyAg
ICByZXR1cm4gdGhpcy50cmFuc2ZlclByb3BzVG8oZm9ybShudWxsLCB0aGlzLnByb3BzLmNoaWxk
cmVuKSk7CisgIH0sCisKKyAgY29tcG9uZW50RGlkTW91bnQ6IGZ1bmN0aW9uKG5vZGUpIHsKKyAg
ICBSZWFjdEV2ZW50RW1pdHRlci50cmFwQnViYmxlZEV2ZW50KAorICAgICAgRXZlbnRDb25zdGFu
dHMudG9wTGV2ZWxUeXBlcy50b3BTdWJtaXQsCisgICAgICAnc3VibWl0JywKKyAgICAgIG5vZGUK
KyAgICApOworICB9Cit9KTsKKworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdERPTUZvcm07CisKK30s
eyIuL0V2ZW50Q29uc3RhbnRzIjoxMywiLi9SZWFjdENvbXBvc2l0ZUNvbXBvbmVudCI6MjMsIi4v
UmVhY3RET00iOjI1LCIuL1JlYWN0RXZlbnRFbWl0dGVyIjozM31dLDI3OltmdW5jdGlvbihyZXF1
aXJlLG1vZHVsZSxleHBvcnRzKXsKKyhmdW5jdGlvbigpey8qKgorICogQ29weXJpZ2h0IDIwMTMg
RmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2Us
IFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZp
bGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0
YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9y
Zy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNh
YmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVk
IHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisg
KiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4
cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxh
bmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRo
ZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBSZWFjdERPTUlET3BlcmF0aW9ucwor
ICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHkKKyAqLworCisvKmpzbGludCBldmlsOiB0cnVlICov
CisKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIENTU1Byb3BlcnR5T3BlcmF0aW9ucyA9IHJlcXVpcmUo
Ii4vQ1NTUHJvcGVydHlPcGVyYXRpb25zIik7Cit2YXIgRE9NQ2hpbGRyZW5PcGVyYXRpb25zID0g
cmVxdWlyZSgiLi9ET01DaGlsZHJlbk9wZXJhdGlvbnMiKTsKK3ZhciBET01Qcm9wZXJ0eU9wZXJh
dGlvbnMgPSByZXF1aXJlKCIuL0RPTVByb3BlcnR5T3BlcmF0aW9ucyIpOwordmFyIFJlYWN0SUQg
PSByZXF1aXJlKCIuL1JlYWN0SUQiKTsKKwordmFyIGdldFRleHRDb250ZW50QWNjZXNzb3IgPSBy
ZXF1aXJlKCIuL2dldFRleHRDb250ZW50QWNjZXNzb3IiKTsKK3ZhciBpbnZhcmlhbnQgPSByZXF1
aXJlKCIuL2ludmFyaWFudCIpOworCisvKioKKyAqIEVycm9ycyBmb3IgcHJvcGVydGllcyB0aGF0
IHNob3VsZCBub3QgYmUgdXBkYXRlZCB3aXRoIGB1cGRhdGVQcm9wZXJ0eUJ5SWQoKWAuCisgKgor
ICogQHR5cGUge29iamVjdH0KKyAqIEBwcml2YXRlCisgKi8KK3ZhciBJTlZBTElEX1BST1BFUlRZ
X0VSUk9SUyA9IHsKKyAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6CisgICAgJ2BkYW5nZXJvdXNs
eVNldElubmVySFRNTGAgbXVzdCBiZSBzZXQgdXNpbmcgYHVwZGF0ZUlubmVySFRNTEJ5SUQoKWAu
JywKKyAgc3R5bGU6ICdgc3R5bGVgIG11c3QgYmUgc2V0IHVzaW5nIGB1cGRhdGVTdHlsZXNCeUlE
KClgLicKK307CisKKy8qKgorICogVGhlIERPTSBwcm9wZXJ0eSB0byB1c2Ugd2hlbiBzZXR0aW5n
IHRleHQgY29udGVudC4KKyAqCisgKiBAdHlwZSB7c3RyaW5nfQorICogQHByaXZhdGUKKyAqLwor
dmFyIHRleHRDb250ZW50QWNjZXNzb3IgPSBnZXRUZXh0Q29udGVudEFjY2Vzc29yKCkgfHwgJ05B
JzsKKworLyoqCisgKiBPcGVyYXRpb25zIHVzZWQgdG8gcHJvY2VzcyB1cGRhdGVzIHRvIERPTSBu
b2Rlcy4gVGhpcyBpcyBtYWRlIGluamVjdGFibGUgdmlhCisgKiBgUmVhY3RDb21wb25lbnQuRE9N
SURPcGVyYXRpb25zYC4KKyAqLwordmFyIFJlYWN0RE9NSURPcGVyYXRpb25zID0geworCisgIC8q
KgorICAgKiBVcGRhdGVzIGEgRE9NIG5vZGUgd2l0aCBuZXcgcHJvcGVydHkgdmFsdWVzLiBUaGlz
IHNob3VsZCBvbmx5IGJlIHVzZWQgdG8KKyAgICogdXBkYXRlIERPTSBwcm9wZXJ0aWVzIGluIGBE
T01Qcm9wZXJ0eWAuCisgICAqCisgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBJRCBvZiB0aGUgbm9k
ZSB0byB1cGRhdGUuCisgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIEEgdmFsaWQgcHJvcGVydHkg
bmFtZSwgc2VlIGBET01Qcm9wZXJ0eWAuCisgICAqIEBwYXJhbSB7Kn0gdmFsdWUgTmV3IHZhbHVl
IG9mIHRoZSBwcm9wZXJ0eS4KKyAgICogQGludGVybmFsCisgICAqLworICB1cGRhdGVQcm9wZXJ0
eUJ5SUQ6IGZ1bmN0aW9uKGlkLCBuYW1lLCB2YWx1ZSkgeworICAgIHZhciBub2RlID0gUmVhY3RJ
RC5nZXROb2RlKGlkKTsKKyAgICBpbnZhcmlhbnQoCisgICAgICAhSU5WQUxJRF9QUk9QRVJUWV9F
UlJPUlMuaGFzT3duUHJvcGVydHkobmFtZSksCisgICAgICAndXBkYXRlUHJvcGVydHlCeUlEKC4u
Lik6ICVzJywKKyAgICAgIElOVkFMSURfUFJPUEVSVFlfRVJST1JTW25hbWVdCisgICAgKTsKKyAg
ICBET01Qcm9wZXJ0eU9wZXJhdGlvbnMuc2V0VmFsdWVGb3JQcm9wZXJ0eShub2RlLCBuYW1lLCB2
YWx1ZSk7CisgIH0sCisKKyAgLyoqCisgICAqIFVwZGF0ZXMgYSBET00gbm9kZSB0byByZW1vdmUg
YSBwcm9wZXJ0eS4gVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIHRvIHJlbW92ZQorICAgKiBET00g
cHJvcGVydGllcyBpbiBgRE9NUHJvcGVydHlgLgorICAgKgorICAgKiBAcGFyYW0ge3N0cmluZ30g
aWQgSUQgb2YgdGhlIG5vZGUgdG8gdXBkYXRlLgorICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBB
IHByb3BlcnR5IG5hbWUgdG8gcmVtb3ZlLCBzZWUgYERPTVByb3BlcnR5YC4KKyAgICogQGludGVy
bmFsCisgICAqLworICBkZWxldGVQcm9wZXJ0eUJ5SUQ6IGZ1bmN0aW9uKGlkLCBuYW1lLCB2YWx1
ZSkgeworICAgIHZhciBub2RlID0gUmVhY3RJRC5nZXROb2RlKGlkKTsKKyAgICBpbnZhcmlhbnQo
CisgICAgICAhSU5WQUxJRF9QUk9QRVJUWV9FUlJPUlMuaGFzT3duUHJvcGVydHkobmFtZSksCisg
ICAgICAndXBkYXRlUHJvcGVydHlCeUlEKC4uLik6ICVzJywKKyAgICAgIElOVkFMSURfUFJPUEVS
VFlfRVJST1JTW25hbWVdCisgICAgKTsKKyAgICBET01Qcm9wZXJ0eU9wZXJhdGlvbnMuZGVsZXRl
VmFsdWVGb3JQcm9wZXJ0eShub2RlLCBuYW1lLCB2YWx1ZSk7CisgIH0sCisKKyAgLyoqCisgICAq
IFRoaXMgc2hvdWxkIGFsbW9zdCBuZXZlciBiZSB1c2VkIGluc3RlYWQgb2YgYHVwZGF0ZVByb3Bl
cnR5QnlJRCgpYCBkdWUgdG8KKyAgICogdGhlIGV4dHJhIG9iamVjdCBhbGxvY2F0aW9uIHJlcXVp
cmVkIGJ5IHRoZSBBUEkuIFRoYXQgc2FpZCwgdGhpcyBpcyB1c2VmdWwKKyAgICogZm9yIGJhdGNo
aW5nIHVwIHNldmVyYWwgb3BlcmF0aW9ucyBhY3Jvc3Mgd29ya2VyIHRocmVhZCBib3VuZGFyaWVz
LgorICAgKgorICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgSUQgb2YgdGhlIG5vZGUgdG8gdXBkYXRl
LgorICAgKiBAcGFyYW0ge29iamVjdH0gcHJvcGVydGllcyBBIG1hcHBpbmcgb2YgdmFsaWQgcHJv
cGVydHkgbmFtZXMuCisgICAqIEBpbnRlcm5hbAorICAgKiBAc2VlIHtSZWFjdERPTUlET3BlcmF0
aW9ucy51cGRhdGVQcm9wZXJ0eUJ5SUR9CisgICAqLworICB1cGRhdGVQcm9wZXJ0aWVzQnlJRDog
ZnVuY3Rpb24oaWQsIHByb3BlcnRpZXMpIHsKKyAgICBmb3IgKHZhciBuYW1lIGluIHByb3BlcnRp
ZXMpIHsKKyAgICAgIGlmICghcHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgeworICAg
ICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICAgIFJlYWN0RE9NSURPcGVyYXRpb25zLnVwZGF0
ZVByb3BlcnRpZXNCeUlEKGlkLCBuYW1lLCBwcm9wZXJ0aWVzW25hbWVdKTsKKyAgICB9CisgIH0s
CisKKyAgLyoqCisgICAqIFVwZGF0ZXMgYSBET00gbm9kZSB3aXRoIG5ldyBzdHlsZSB2YWx1ZXMu
IElmIGEgdmFsdWUgaXMgc3BlY2lmaWVkIGFzICcnLAorICAgKiB0aGUgY29ycmVzcG9uZGluZyBz
dHlsZSBwcm9wZXJ0eSB3aWxsIGJlIHVuc2V0LgorICAgKgorICAgKiBAcGFyYW0ge3N0cmluZ30g
aWQgSUQgb2YgdGhlIG5vZGUgdG8gdXBkYXRlLgorICAgKiBAcGFyYW0ge29iamVjdH0gc3R5bGVz
IE1hcHBpbmcgZnJvbSBzdHlsZXMgdG8gdmFsdWVzLgorICAgKiBAaW50ZXJuYWwKKyAgICovCisg
IHVwZGF0ZVN0eWxlc0J5SUQ6IGZ1bmN0aW9uKGlkLCBzdHlsZXMpIHsKKyAgICB2YXIgbm9kZSA9
IFJlYWN0SUQuZ2V0Tm9kZShpZCk7CisgICAgQ1NTUHJvcGVydHlPcGVyYXRpb25zLnNldFZhbHVl
Rm9yU3R5bGVzKG5vZGUsIHN0eWxlcyk7CisgIH0sCisKKyAgLyoqCisgICAqIFVwZGF0ZXMgYSBE
T00gbm9kZSdzIGlubmVySFRNTCBzZXQgYnkgYHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1M
YC4KKyAgICoKKyAgICogQHBhcmFtIHtzdHJpbmd9IGlkIElEIG9mIHRoZSBub2RlIHRvIHVwZGF0
ZS4KKyAgICogQHBhcmFtIHtvYmplY3R9IGh0bWwgQW4gSFRNTCBvYmplY3Qgd2l0aCB0aGUgYF9f
aHRtbGAgcHJvcGVydHkuCisgICAqIEBpbnRlcm5hbAorICAgKi8KKyAgdXBkYXRlSW5uZXJIVE1M
QnlJRDogZnVuY3Rpb24oaWQsIGh0bWwpIHsKKyAgICB2YXIgbm9kZSA9IFJlYWN0SUQuZ2V0Tm9k
ZShpZCk7CisgICAgLy8gSEFDSzogSUU4LSBub3JtYWxpemUgd2hpdGVzcGFjZSBpbiBpbm5lckhU
TUwsIHJlbW92aW5nIGxlYWRpbmcgc3BhY2VzLgorICAgIC8vIEBzZWUgcXVpcmtzbW9kZS5vcmcv
YnVncmVwb3J0cy9hcmNoaXZlcy8yMDA0LzExL2lubmVyaHRtbF9hbmRfdC5odG1sCisgICAgbm9k
ZS5pbm5lckhUTUwgPSAoaHRtbCAmJiBodG1sLl9faHRtbCB8fCAnJykucmVwbGFjZSgvXiAvZywg
JyZuYnNwOycpOworICB9LAorCisgIC8qKgorICAgKiBVcGRhdGVzIGEgRE9NIG5vZGUncyB0ZXh0
IGNvbnRlbnQgc2V0IGJ5IGBwcm9wcy5jb250ZW50YC4KKyAgICoKKyAgICogQHBhcmFtIHtzdHJp
bmd9IGlkIElEIG9mIHRoZSBub2RlIHRvIHVwZGF0ZS4KKyAgICogQHBhcmFtIHtzdHJpbmd9IGNv
bnRlbnQgVGV4dCBjb250ZW50LgorICAgKiBAaW50ZXJuYWwKKyAgICovCisgIHVwZGF0ZVRleHRD
b250ZW50QnlJRDogZnVuY3Rpb24oaWQsIGNvbnRlbnQpIHsKKyAgICB2YXIgbm9kZSA9IFJlYWN0
SUQuZ2V0Tm9kZShpZCk7CisgICAgbm9kZVt0ZXh0Q29udGVudEFjY2Vzc29yXSA9IGNvbnRlbnQ7
CisgIH0sCisKKyAgLyoqCisgICAqIFJlcGxhY2VzIGEgRE9NIG5vZGUgdGhhdCBleGlzdHMgaW4g
dGhlIGRvY3VtZW50IHdpdGggbWFya3VwLgorICAgKgorICAgKiBAcGFyYW0ge3N0cmluZ30gaWQg
SUQgb2YgY2hpbGQgdG8gYmUgcmVwbGFjZWQuCisgICAqIEBwYXJhbSB7c3RyaW5nfSBtYXJrdXAg
RGFuZ2Vyb3VzIG1hcmt1cCB0byBpbmplY3QgaW4gcGxhY2Ugb2YgY2hpbGQuCisgICAqIEBpbnRl
cm5hbAorICAgKiBAc2VlIHtEYW5nZXIuZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXB9
CisgICAqLworICBkYW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0aE1hcmt1cEJ5SUQ6IGZ1bmN0aW9u
KGlkLCBtYXJrdXApIHsKKyAgICB2YXIgbm9kZSA9IFJlYWN0SUQuZ2V0Tm9kZShpZCk7CisgICAg
RE9NQ2hpbGRyZW5PcGVyYXRpb25zLmRhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwKG5v
ZGUsIG1hcmt1cCk7CisgIH0sCisKKyAgLyoqCisgICAqIFRPRE86IFdlIG9ubHkgYWN0dWFsbHkg
Km5lZWQqIHRvIHB1cmdlIHRoZSBjYWNoZSB3aGVuIHdlIHJlbW92ZSBlbGVtZW50cy4KKyAgICog
ICAgICAgRGV0ZWN0IGlmIGFueSBlbGVtZW50cyB3ZXJlIHJlbW92ZWQgaW5zdGVhZCBvZiBibGlu
ZGx5IHB1cmdpbmcuCisgICAqLworICBtYW5hZ2VDaGlsZHJlbkJ5UGFyZW50SUQ6IGZ1bmN0aW9u
KHBhcmVudElELCBkb21PcGVyYXRpb25zKSB7CisgICAgdmFyIHBhcmVudCA9IFJlYWN0SUQuZ2V0
Tm9kZShwYXJlbnRJRCk7CisgICAgRE9NQ2hpbGRyZW5PcGVyYXRpb25zLm1hbmFnZUNoaWxkcmVu
KHBhcmVudCwgZG9tT3BlcmF0aW9ucyk7CisgIH0KKworfTsKKworbW9kdWxlLmV4cG9ydHMgPSBS
ZWFjdERPTUlET3BlcmF0aW9uczsKKworfSkoKQorfSx7Ii4vQ1NTUHJvcGVydHlPcGVyYXRpb25z
IjozLCIuL0RPTUNoaWxkcmVuT3BlcmF0aW9ucyI6NiwiLi9ET01Qcm9wZXJ0eU9wZXJhdGlvbnMi
OjgsIi4vUmVhY3RJRCI6MzUsIi4vZ2V0VGV4dENvbnRlbnRBY2Nlc3NvciI6NzEsIi4vaW52YXJp
YW50Ijo3NX1dLDI4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICog
Q29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUg
QXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkg
bm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4K
KyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6
Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1
aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUK
KyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJB
UyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkg
S0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3Ig
dGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0
YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBSZWFjdERP
TUlucHV0CisgKi8KKworInVzZSBzdHJpY3QiOworCit2YXIgRE9NUHJvcGVydHlPcGVyYXRpb25z
ID0gcmVxdWlyZSgiLi9ET01Qcm9wZXJ0eU9wZXJhdGlvbnMiKTsKK3ZhciBSZWFjdENvbXBvc2l0
ZUNvbXBvbmVudCA9IHJlcXVpcmUoIi4vUmVhY3RDb21wb3NpdGVDb21wb25lbnQiKTsKK3ZhciBS
ZWFjdERPTSA9IHJlcXVpcmUoIi4vUmVhY3RET00iKTsKKwordmFyIG1lcmdlID0gcmVxdWlyZSgi
Li9tZXJnZSIpOworCisvLyBTdG9yZSBhIHJlZmVyZW5jZSB0byB0aGUgPGlucHV0PiBgUmVhY3RO
YXRpdmVDb21wb25lbnRgLgordmFyIGlucHV0ID0gUmVhY3RET00uaW5wdXQ7CisKKy8qKgorICog
SW1wbGVtZW50cyBhbiA8aW5wdXQ+IG5hdGl2ZSBjb21wb25lbnQgdGhhdCBhbGxvd3Mgc2V0dGlu
ZyB0aGVzZSBvcHRpb25hbAorICogcHJvcHM6IGBjaGVja2VkYCwgYHZhbHVlYCwgYGRlZmF1bHRD
aGVja2VkYCwgYW5kIGBkZWZhdWx0VmFsdWVgLgorICoKKyAqIElmIGBjaGVja2VkYCBvciBgdmFs
dWVgIGFyZSBub3Qgc3VwcGxpZWQgKG9yIG51bGwvdW5kZWZpbmVkKSwgdXNlciBhY3Rpb25zCisg
KiB0aGF0IGFmZmVjdCB0aGUgY2hlY2tlZCBzdGF0ZSBvciB2YWx1ZSB3aWxsIHRyaWdnZXIgdXBk
YXRlcyB0byB0aGUgZWxlbWVudC4KKyAqCisgKiBJZiB0aGV5IGFyZSBzdXBwbGllZCAoYW5kIG5v
dCBudWxsL3VuZGVmaW5lZCksIHRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGwgbm90CisgKiB0cmln
Z2VyIHVwZGF0ZXMgdG8gdGhlIGVsZW1lbnQuIEluc3RlYWQsIHRoZSBwcm9wcyBtdXN0IGNoYW5n
ZSBpbiBvcmRlciBmb3IKKyAqIHRoZSByZW5kZXJlZCBlbGVtZW50IHRvIGJlIHVwZGF0ZWQuCisg
KgorICogVGhlIHJlbmRlcmVkIGVsZW1lbnQgd2lsbCBiZSBpbml0aWFsaXplZCBhcyB1bmNoZWNr
ZWQgKG9yIGBkZWZhdWx0Q2hlY2tlZGApCisgKiB3aXRoIGFuIGVtcHR5IHZhbHVlIChvciBgZGVm
YXVsdFZhbHVlYCkuCisgKgorICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0
bWw1LTIwMTIxMDI1L3RoZS1pbnB1dC1lbGVtZW50Lmh0bWwKKyAqLwordmFyIFJlYWN0RE9NSW5w
dXQgPSBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudC5jcmVhdGVDbGFzcyh7CisKKyAgZ2V0SW5pdGlh
bFN0YXRlOiBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4geworICAgICAgY2hlY2tlZDogdGhpcy5w
cm9wcy5kZWZhdWx0Q2hlY2tlZCB8fCBmYWxzZSwKKyAgICAgIHZhbHVlOiB0aGlzLnByb3BzLmRl
ZmF1bHRWYWx1ZSB8fCAnJworICAgIH07CisgIH0sCisKKyAgc2hvdWxkQ29tcG9uZW50VXBkYXRl
OiBmdW5jdGlvbigpIHsKKyAgICAvLyBEZWZlciBhbnkgdXBkYXRlcyB0byB0aGlzIGNvbXBvbmVu
dCBkdXJpbmcgdGhlIGBvbkNoYW5nZWAgaGFuZGxlci4KKyAgICByZXR1cm4gIXRoaXMuX2lzQ2hh
bmdpbmc7CisgIH0sCisKKyAgZ2V0Q2hlY2tlZDogZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRo
aXMucHJvcHMuY2hlY2tlZCAhPSBudWxsID8gdGhpcy5wcm9wcy5jaGVja2VkIDogdGhpcy5zdGF0
ZS5jaGVja2VkOworICB9LAorCisgIGdldFZhbHVlOiBmdW5jdGlvbigpIHsKKyAgICAvLyBDYXN0
IGB0aGlzLnByb3BzLnZhbHVlYCB0byBhIHN0cmluZyBzbyBlcXVhbGl0eSBjaGVja3MgcGFzcy4K
KyAgICByZXR1cm4gdGhpcy5wcm9wcy52YWx1ZSAhPSBudWxsID8gJycgKyB0aGlzLnByb3BzLnZh
bHVlIDogdGhpcy5zdGF0ZS52YWx1ZTsKKyAgfSwKKworICByZW5kZXI6IGZ1bmN0aW9uKCkgewor
ICAgIC8vIENsb25lIGB0aGlzLnByb3BzYCBzbyB3ZSBkb24ndCBtdXRhdGUgdGhlIGlucHV0Lgor
ICAgIHZhciBwcm9wcyA9IG1lcmdlKHRoaXMucHJvcHMpOworCisgICAgcHJvcHMuY2hlY2tlZCA9
IHRoaXMuZ2V0Q2hlY2tlZCgpOworICAgIHByb3BzLnZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpOwor
ICAgIHByb3BzLm9uQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2U7CisKKyAgICByZXR1cm4gaW5w
dXQocHJvcHMsIHRoaXMucHJvcHMuY2hpbGRyZW4pOworICB9LAorCisgIGNvbXBvbmVudERpZFVw
ZGF0ZTogZnVuY3Rpb24ocHJldlByb3BzLCBwcmV2U3RhdGUsIHJvb3ROb2RlKSB7CisgICAgaWYg
KHRoaXMucHJvcHMuY2hlY2tlZCAhPSBudWxsKSB7CisgICAgICBET01Qcm9wZXJ0eU9wZXJhdGlv
bnMuc2V0VmFsdWVGb3JQcm9wZXJ0eSgKKyAgICAgICAgcm9vdE5vZGUsCisgICAgICAgICdjaGVj
a2VkJywKKyAgICAgICAgdGhpcy5wcm9wcy5jaGVja2VkIHx8IGZhbHNlCisgICAgICApOworICAg
IH0KKyAgICBpZiAodGhpcy5wcm9wcy52YWx1ZSAhPSBudWxsKSB7CisgICAgICAvLyBDYXN0IGB0
aGlzLnByb3BzLnZhbHVlYCB0byBhIHN0cmluZyBzbyBmYWxzZXkgdmFsdWVzIHRoYXQgY2FzdCB0
bworICAgICAgLy8gdHJ1dGh5IHN0cmluZ3MgYXJlIG5vdCBpZ25vcmVkLgorICAgICAgRE9NUHJv
cGVydHlPcGVyYXRpb25zLnNldFZhbHVlRm9yUHJvcGVydHkoCisgICAgICAgIHJvb3ROb2RlLAor
ICAgICAgICAndmFsdWUnLAorICAgICAgICAnJyArIHRoaXMucHJvcHMudmFsdWUgfHwgJycKKyAg
ICAgICk7CisgICAgfQorICB9LAorCisgIGhhbmRsZUNoYW5nZTogZnVuY3Rpb24oZXZlbnQpIHsK
KyAgICB2YXIgcmV0dXJuVmFsdWU7CisgICAgaWYgKHRoaXMucHJvcHMub25DaGFuZ2UpIHsKKyAg
ICAgIHRoaXMuX2lzQ2hhbmdpbmcgPSB0cnVlOworICAgICAgcmV0dXJuVmFsdWUgPSB0aGlzLnBy
b3BzLm9uQ2hhbmdlKGV2ZW50KTsKKyAgICAgIHRoaXMuX2lzQ2hhbmdpbmcgPSBmYWxzZTsKKyAg
ICB9CisgICAgdGhpcy5zZXRTdGF0ZSh7CisgICAgICBjaGVja2VkOiBldmVudC50YXJnZXQuY2hl
Y2tlZCwKKyAgICAgIHZhbHVlOiBldmVudC50YXJnZXQudmFsdWUKKyAgICB9KTsKKyAgICByZXR1
cm4gcmV0dXJuVmFsdWU7CisgIH0KKworfSk7CisKK21vZHVsZS5leHBvcnRzID0gUmVhY3RET01J
bnB1dDsKKworfSx7Ii4vRE9NUHJvcGVydHlPcGVyYXRpb25zIjo4LCIuL1JlYWN0Q29tcG9zaXRl
Q29tcG9uZW50IjoyMywiLi9SZWFjdERPTSI6MjUsIi4vbWVyZ2UiOjgxfV0sMjk6W2Z1bmN0aW9u
KHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMyBGYWNlYm9v
aywgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lv
biAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNl
cHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBj
b3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vu
c2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3
IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIg
dGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhP
VVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBv
ciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2Ug
Z292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vu
c2UuCisgKgorICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0RE9NT3B0aW9uCisgKi8KKworInVzZSBz
dHJpY3QiOworCit2YXIgUmVhY3RDb21wb3NpdGVDb21wb25lbnQgPSByZXF1aXJlKCIuL1JlYWN0
Q29tcG9zaXRlQ29tcG9uZW50Iik7Cit2YXIgUmVhY3RET00gPSByZXF1aXJlKCIuL1JlYWN0RE9N
Iik7CisKKy8vIFN0b3JlIGEgcmVmZXJlbmNlIHRvIHRoZSA8b3B0aW9uPiBgUmVhY3ROYXRpdmVD
b21wb25lbnRgLgordmFyIG9wdGlvbiA9IFJlYWN0RE9NLm9wdGlvbjsKKworLyoqCisgKiBJbXBs
ZW1lbnRzIGFuIDxvcHRpb24+IG5hdGl2ZSBjb21wb25lbnQgdGhhdCB3YXJucyB3aGVuIGBzZWxl
Y3RlZGAgaXMgc2V0LgorICovCit2YXIgUmVhY3RET01PcHRpb24gPSBSZWFjdENvbXBvc2l0ZUNv
bXBvbmVudC5jcmVhdGVDbGFzcyh7CisKKyAgY29tcG9uZW50V2lsbE1vdW50OiBmdW5jdGlvbigp
IHsKKyAgICAvLyBUT0RPICh5dW5nc3RlcnMpOiBSZW1vdmUgc3VwcG9ydCBmb3IgYHNlbGVjdGVk
YCBpbiA8b3B0aW9uPi4KKyAgICBpZiAodGhpcy5wcm9wcy5zZWxlY3RlZCAhPSBudWxsKSB7Cisg
ICAgICBpZiAodHJ1ZSkgeworICAgICAgICBjb25zb2xlLndhcm4oCisgICAgICAgICAgJ1VzZSB0
aGUgYGRlZmF1bHRWYWx1ZWAgb3IgYHZhbHVlYCBwcm9wcyBvbiA8c2VsZWN0PiBpbnN0ZWFkIG9m
ICcgKworICAgICAgICAgICdzZXR0aW5nIGBzZWxlY3RlZGAgb24gPG9wdGlvbj4uJworICAgICAg
ICApOworICAgICAgfQorICAgIH0KKyAgfSwKKworICByZW5kZXI6IGZ1bmN0aW9uKCkgeworICAg
IHJldHVybiBvcHRpb24odGhpcy5wcm9wcywgdGhpcy5wcm9wcy5jaGlsZHJlbik7CisgIH0KKwor
fSk7CisKK21vZHVsZS5leHBvcnRzID0gUmVhY3RET01PcHRpb247CisKK30seyIuL1JlYWN0Q29t
cG9zaXRlQ29tcG9uZW50IjoyMywiLi9SZWFjdERPTSI6MjV9XSwzMDpbZnVuY3Rpb24ocmVxdWly
ZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzIEZhY2Vib29rLCBJbmMu
CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAo
dGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBj
b21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2Yg
dGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElD
RU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdy
ZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGlj
ZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJS
QU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxp
ZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5p
bmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAq
CisgKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RET01TZWxlY3QKKyAqLworCisidXNlIHN0cmljdCI7
CisKK3ZhciBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCA9IHJlcXVpcmUoIi4vUmVhY3RDb21wb3Np
dGVDb21wb25lbnQiKTsKK3ZhciBSZWFjdERPTSA9IHJlcXVpcmUoIi4vUmVhY3RET00iKTsKKwor
dmFyIGludmFyaWFudCA9IHJlcXVpcmUoIi4vaW52YXJpYW50Iik7Cit2YXIgbWVyZ2UgPSByZXF1
aXJlKCIuL21lcmdlIik7CisKKy8vIFN0b3JlIGEgcmVmZXJlbmNlIHRvIHRoZSA8c2VsZWN0PiBg
UmVhY3ROYXRpdmVDb21wb25lbnRgLgordmFyIHNlbGVjdCA9IFJlYWN0RE9NLnNlbGVjdDsKKwor
LyoqCisgKiBWYWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBgdmFsdWVgIGFuZCBgZGVmYXVsdFZhbHVl
YC4KKyAqIEBwcml2YXRlCisgKi8KK2Z1bmN0aW9uIHNlbGVjdFZhbHVlVHlwZShwcm9wcywgcHJv
cE5hbWUsIGNvbXBvbmVudE5hbWUpIHsKKyAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7
CisgICAgcmV0dXJuOworICB9CisgIGlmIChwcm9wcy5tdWx0aXBsZSkgeworICAgIGludmFyaWFu
dCgKKyAgICAgIEFycmF5LmlzQXJyYXkocHJvcHNbcHJvcE5hbWVdKSwKKyAgICAgICdUaGUgYCVz
YCBwcm9wIHN1cHBsaWVkIHRvIDxzZWxlY3Q+IG11c3QgYmUgYW4gYXJyYXkgaWYgYG11bHRpcGxl
YCBpcyAnICsKKyAgICAgICd0cnVlLicsCisgICAgICBwcm9wTmFtZQorICAgICk7CisgIH0gZWxz
ZSB7CisgICAgaW52YXJpYW50KAorICAgICAgIUFycmF5LmlzQXJyYXkocHJvcHNbcHJvcE5hbWVd
KSwKKyAgICAgICdUaGUgYCVzYCBwcm9wIHN1cHBsaWVkIHRvIDxzZWxlY3Q+IG11c3QgYmUgYSBz
Y2FsYXIgdmFsdWUgaWYgJyArCisgICAgICAnYG11bHRpcGxlYCBpcyBmYWxzZS4nLAorICAgICAg
cHJvcE5hbWUKKyAgICApOworICB9Cit9CisKKy8qKgorICogSWYgYHZhbHVlYCBpcyBzdXBwbGll
ZCwgdXBkYXRlcyA8b3B0aW9uPiBlbGVtZW50cyBvbiBtb3VudCBhbmQgdXBkYXRlLgorICogQHBy
aXZhdGUKKyAqLworZnVuY3Rpb24gdXBkYXRlT3B0aW9ucygpIHsKKyAgLypqc2hpbnQgdmFsaWR0
aGlzOnRydWUgKi8KKyAgaWYgKHRoaXMucHJvcHMudmFsdWUgPT0gbnVsbCkgeworICAgIHJldHVy
bjsKKyAgfQorICB2YXIgb3B0aW9ucyA9IHRoaXMuZ2V0RE9NTm9kZSgpLm9wdGlvbnM7CisgIHZh
ciBzZWxlY3RlZFZhbHVlID0gJycgKyB0aGlzLnByb3BzLnZhbHVlOworCisgIGZvciAodmFyIGkg
PSAwLCBsID0gb3B0aW9ucy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKKyAgICB2YXIgc2VsZWN0ZWQg
PSB0aGlzLnByb3BzLm11bHRpcGxlID8KKyAgICAgIHNlbGVjdGVkVmFsdWUuaW5kZXhPZihvcHRp
b25zW2ldLnZhbHVlKSA+PSAwIDoKKyAgICAgIHNlbGVjdGVkID0gb3B0aW9uc1tpXS52YWx1ZSA9
PT0gc2VsZWN0ZWRWYWx1ZTsKKworICAgIGlmIChzZWxlY3RlZCAhPT0gb3B0aW9uc1tpXS5zZWxl
Y3RlZCkgeworICAgICAgb3B0aW9uc1tpXS5zZWxlY3RlZCA9IHNlbGVjdGVkOworICAgIH0KKyAg
fQorfQorCisvKioKKyAqIEltcGxlbWVudHMgYSA8c2VsZWN0PiBuYXRpdmUgY29tcG9uZW50IHRo
YXQgYWxsb3dzIG9wdGlvbmFsbHkgc2V0dGluZyB0aGUKKyAqIHByb3BzIGB2YWx1ZWAgYW5kIGBk
ZWZhdWx0VmFsdWVgLiBJZiBgbXVsdGlwbGVgIGlzIGZhbHNlLCB0aGUgcHJvcCBtdXN0IGJlIGEK
KyAqIHN0cmluZy4gSWYgYG11bHRpcGxlYCBpcyB0cnVlLCB0aGUgcHJvcCBtdXN0IGJlIGFuIGFy
cmF5IG9mIHN0cmluZ3MuCisgKgorICogSWYgYHZhbHVlYCBpcyBub3Qgc3VwcGxpZWQgKG9yIG51
bGwvdW5kZWZpbmVkKSwgdXNlciBhY3Rpb25zIHRoYXQgY2hhbmdlIHRoZQorICogc2VsZWN0ZWQg
b3B0aW9uIHdpbGwgdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSByZW5kZXJlZCBvcHRpb25zLgorICoK
KyAqIElmIGl0IGlzIHN1cHBsaWVkIChhbmQgbm90IG51bGwvdW5kZWZpbmVkKSwgdGhlIHJlbmRl
cmVkIG9wdGlvbnMgd2lsbCBub3QKKyAqIHVwZGF0ZSBpbiByZXNwb25zZSB0byB1c2VyIGFjdGlv
bnMuIEluc3RlYWQsIHRoZSBgdmFsdWVgIHByb3AgbXVzdCBjaGFuZ2UgaW4KKyAqIG9yZGVyIGZv
ciB0aGUgcmVuZGVyZWQgb3B0aW9ucyB0byB1cGRhdGUuCisgKgorICogSWYgYGRlZmF1bHRWYWx1
ZWAgaXMgcHJvdmlkZWQsIGFueSBvcHRpb25zIHdpdGggdGhlIHN1cHBsaWVkIHZhbHVlcyB3aWxs
IGJlCisgKiBzZWxlY3RlZC4KKyAqLwordmFyIFJlYWN0RE9NU2VsZWN0ID0gUmVhY3RDb21wb3Np
dGVDb21wb25lbnQuY3JlYXRlQ2xhc3MoeworCisgIHByb3BUeXBlczogeworICAgIGRlZmF1bHRW
YWx1ZTogc2VsZWN0VmFsdWVUeXBlLAorICAgIHZhbHVlOiBzZWxlY3RWYWx1ZVR5cGUKKyAgfSwK
KworICBnZXRJbml0aWFsU3RhdGU6IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB7dmFsdWU6IHRo
aXMucHJvcHMuZGVmYXVsdFZhbHVlIHx8ICh0aGlzLnByb3BzLm11bHRpcGxlID8gW10gOiAnJyl9
OworICB9LAorCisgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM6IGZ1bmN0aW9uKG5leHRQcm9w
cykgeworICAgIGlmICghdGhpcy5wcm9wcy5tdWx0aXBsZSAmJiBuZXh0UHJvcHMubXVsdGlwbGUp
IHsKKyAgICAgIHRoaXMuc2V0U3RhdGUoe3ZhbHVlOiBbdGhpcy5zdGF0ZS52YWx1ZV19KTsKKyAg
ICB9IGVsc2UgaWYgKHRoaXMucHJvcHMubXVsdGlwbGUgJiYgIW5leHRQcm9wcy5tdWx0aXBsZSkg
eworICAgICAgdGhpcy5zZXRTdGF0ZSh7dmFsdWU6IHRoaXMuc3RhdGUudmFsdWVbMF19KTsKKyAg
ICB9CisgIH0sCisKKyAgc2hvdWxkQ29tcG9uZW50VXBkYXRlOiBmdW5jdGlvbigpIHsKKyAgICAv
LyBEZWZlciBhbnkgdXBkYXRlcyB0byB0aGlzIGNvbXBvbmVudCBkdXJpbmcgdGhlIGBvbkNoYW5n
ZWAgaGFuZGxlci4KKyAgICByZXR1cm4gIXRoaXMuX2lzQ2hhbmdpbmc7CisgIH0sCisKKyAgcmVu
ZGVyOiBmdW5jdGlvbigpIHsKKyAgICAvLyBDbG9uZSBgdGhpcy5wcm9wc2Agc28gd2UgZG9uJ3Qg
bXV0YXRlIHRoZSBpbnB1dC4KKyAgICB2YXIgcHJvcHMgPSBtZXJnZSh0aGlzLnByb3BzKTsKKwor
ICAgIHByb3BzLm9uQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2U7CisgICAgcHJvcHMudmFsdWUg
PSBudWxsOworCisgICAgcmV0dXJuIHNlbGVjdChwcm9wcywgdGhpcy5wcm9wcy5jaGlsZHJlbik7
CisgIH0sCisKKyAgY29tcG9uZW50RGlkTW91bnQ6IHVwZGF0ZU9wdGlvbnMsCisKKyAgY29tcG9u
ZW50RGlkVXBkYXRlOiB1cGRhdGVPcHRpb25zLAorCisgIGhhbmRsZUNoYW5nZTogZnVuY3Rpb24o
ZXZlbnQpIHsKKyAgICB2YXIgcmV0dXJuVmFsdWU7CisgICAgaWYgKHRoaXMucHJvcHMub25DaGFu
Z2UpIHsKKyAgICAgIHRoaXMuX2lzQ2hhbmdpbmcgPSB0cnVlOworICAgICAgcmV0dXJuVmFsdWUg
PSB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2ZW50KTsKKyAgICAgIHRoaXMuX2lzQ2hhbmdpbmcgPSBm
YWxzZTsKKyAgICB9CisKKyAgICB2YXIgc2VsZWN0ZWRWYWx1ZTsKKyAgICBpZiAodGhpcy5wcm9w
cy5tdWx0aXBsZSkgeworICAgICAgc2VsZWN0ZWRWYWx1ZSA9IFtdOworICAgICAgdmFyIG9wdGlv
bnMgPSBldmVudC50YXJnZXQub3B0aW9uczsKKyAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gb3B0
aW9ucy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKKyAgICAgICAgaWYgKG9wdGlvbnNbaV0uc2VsZWN0
ZWQpIHsKKyAgICAgICAgICBzZWxlY3RlZFZhbHVlLnB1c2gob3B0aW9uc1tpXS52YWx1ZSk7Cisg
ICAgICAgIH0KKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgc2VsZWN0ZWRWYWx1ZSA9IGV2
ZW50LnRhcmdldC52YWx1ZTsKKyAgICB9CisKKyAgICB0aGlzLnNldFN0YXRlKHt2YWx1ZTogc2Vs
ZWN0ZWRWYWx1ZX0pOworICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgfQorCit9KTsKKworbW9k
dWxlLmV4cG9ydHMgPSBSZWFjdERPTVNlbGVjdDsKKworfSx7Ii4vUmVhY3RDb21wb3NpdGVDb21w
b25lbnQiOjIzLCIuL1JlYWN0RE9NIjoyNSwiLi9pbnZhcmlhbnQiOjc1LCIuL21lcmdlIjo4MX1d
LDMxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0
IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExp
Y2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0
aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBt
YXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBh
Y2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBh
cHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3Ry
aWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFT
SVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0
aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNp
ZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVu
ZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBSZWFjdERPTVRleHRhcmVh
CisgKi8KKworInVzZSBzdHJpY3QiOworCit2YXIgRE9NUHJvcGVydHlPcGVyYXRpb25zID0gcmVx
dWlyZSgiLi9ET01Qcm9wZXJ0eU9wZXJhdGlvbnMiKTsKK3ZhciBSZWFjdENvbXBvc2l0ZUNvbXBv
bmVudCA9IHJlcXVpcmUoIi4vUmVhY3RDb21wb3NpdGVDb21wb25lbnQiKTsKK3ZhciBSZWFjdERP
TSA9IHJlcXVpcmUoIi4vUmVhY3RET00iKTsKKwordmFyIGludmFyaWFudCA9IHJlcXVpcmUoIi4v
aW52YXJpYW50Iik7Cit2YXIgbWVyZ2UgPSByZXF1aXJlKCIuL21lcmdlIik7CisKKy8vIFN0b3Jl
IGEgcmVmZXJlbmNlIHRvIHRoZSA8dGV4dGFyZWE+IGBSZWFjdE5hdGl2ZUNvbXBvbmVudGAuCit2
YXIgdGV4dGFyZWEgPSBSZWFjdERPTS50ZXh0YXJlYTsKKworLy8gRm9yIHF1aWNrbHkgbWF0Y2hp
bmcgY2hpbGRyZW4gdHlwZSwgdG8gdGVzdCBpZiBjYW4gYmUgdHJlYXRlZCBhcyBjb250ZW50Lgor
dmFyIENPTlRFTlRfVFlQRVMgPSB7J3N0cmluZyc6IHRydWUsICdudW1iZXInOiB0cnVlfTsKKwor
LyoqCisgKiBJbXBsZW1lbnRzIGEgPHRleHRhcmVhPiBuYXRpdmUgY29tcG9uZW50IHRoYXQgYWxs
b3dzIHNldHRpbmcgYHZhbHVlYCwgYW5kCisgKiBgZGVmYXVsdFZhbHVlYC4gVGhpcyBkaWZmZXJz
IGZyb20gdGhlIHRyYWRpdGlvbmFsIERPTSBBUEkgYmVjYXVzZSB2YWx1ZSBpcworICogdXN1YWxs
eSBzZXQgYXMgUENEQVRBIGNoaWxkcmVuLgorICoKKyAqIElmIGB2YWx1ZWAgaXMgbm90IHN1cHBs
aWVkIChvciBudWxsL3VuZGVmaW5lZCksIHVzZXIgYWN0aW9ucyB0aGF0IGFmZmVjdCB0aGUKKyAq
IHZhbHVlIHdpbGwgdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSBlbGVtZW50LgorICoKKyAqIElmIGB2
YWx1ZWAgaXMgc3VwcGxpZWQgKGFuZCBub3QgbnVsbC91bmRlZmluZWQpLCB0aGUgcmVuZGVyZWQg
ZWxlbWVudCB3aWxsCisgKiBub3QgdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSBlbGVtZW50LiBJbnN0
ZWFkLCB0aGUgYHZhbHVlYCBwcm9wIG11c3QgY2hhbmdlIGluCisgKiBvcmRlciBmb3IgdGhlIHJl
bmRlcmVkIGVsZW1lbnQgdG8gYmUgdXBkYXRlZC4KKyAqCisgKiBUaGUgcmVuZGVyZWQgZWxlbWVu
dCB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGggYW4gZW1wdHkgdmFsdWUsIHRoZSBwcm9wCisgKiBg
ZGVmYXVsdFZhbHVlYCBpZiBzcGVjaWZpZWQsIG9yIHRoZSBjaGlsZHJlbiBjb250ZW50IChkZXBy
ZWNhdGVkKS4KKyAqLwordmFyIFJlYWN0RE9NVGV4dGFyZWEgPSBSZWFjdENvbXBvc2l0ZUNvbXBv
bmVudC5jcmVhdGVDbGFzcyh7CisKKyAgZ2V0SW5pdGlhbFN0YXRlOiBmdW5jdGlvbigpIHsKKyAg
ICB2YXIgZGVmYXVsdFZhbHVlID0gdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWU7CisgICAgLy8gVE9E
TyAoeXVuZ3N0ZXJzKTogUmVtb3ZlIHN1cHBvcnQgZm9yIGNoaWxkcmVuIGNvbnRlbnQgaW4gPHRl
eHRhcmVhPi4KKyAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLnByb3BzLmNoaWxkcmVuOworICAgIGlm
IChjaGlsZHJlbiAhPSBudWxsKSB7CisgICAgICBpZiAodHJ1ZSkgeworICAgICAgICBjb25zb2xl
Lndhcm4oCisgICAgICAgICAgJ1VzZSB0aGUgYGRlZmF1bHRWYWx1ZWAgb3IgYHZhbHVlYCBwcm9w
cyBpbnN0ZWFkIG9mIHNldHRpbmcgJyArCisgICAgICAgICAgJ2NoaWxkcmVuIG9uIDx0ZXh0YXJl
YT4uJworICAgICAgICApOworICAgICAgfQorICAgICAgaW52YXJpYW50KAorICAgICAgICBkZWZh
dWx0VmFsdWUgPT0gbnVsbCwKKyAgICAgICAgJ0lmIHlvdSBzdXBwbHkgYGRlZmF1bHRWYWx1ZWAg
b24gYSA8dGV4dGFyZWE+LCBkbyBub3QgcGFzcyBjaGlsZHJlbi4nCisgICAgICApOworICAgICAg
aWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7CisgICAgICAgIGludmFyaWFudCgKKyAgICAg
ICAgICBjaGlsZHJlbi5sZW5ndGggPD0gMSwKKyAgICAgICAgICAnPHRleHRhcmVhPiBjYW4gb25s
eSBoYXZlIGF0IG1vc3Qgb25lIGNoaWxkLicKKyAgICAgICAgKTsKKyAgICAgICAgY2hpbGRyZW4g
PSBjaGlsZHJlblswXTsKKyAgICAgIH0KKyAgICAgIGludmFyaWFudCgKKyAgICAgICAgQ09OVEVO
VF9UWVBFU1t0eXBlb2YgY2hpbGRyZW5dLAorICAgICAgICAnSWYgeW91IHNwZWNpZnkgY2hpbGRy
ZW4gdG8gPHRleHRhcmVhPiwgaXQgbXVzdCBiZSBhIHNpbmdsZSBzdHJpbmcgJyArCisgICAgICAg
ICdvciBudW1iZXIuLCBub3QgYW4gYXJyYXkgb3Igb2JqZWN0LicKKyAgICAgICk7CisgICAgICBk
ZWZhdWx0VmFsdWUgPSAnJyArIGNoaWxkcmVuOworICAgIH0KKyAgICBkZWZhdWx0VmFsdWUgPSBk
ZWZhdWx0VmFsdWUgfHwgJyc7CisgICAgcmV0dXJuIHsKKyAgICAgIC8vIFdlIHNhdmUgdGhlIGlu
aXRpYWwgdmFsdWUgc28gdGhhdCBgUmVhY3ROYXRpdmVDb21wb25lbnRgIGRvZXNuJ3QgdXBkYXRl
CisgICAgICAvLyBgdGV4dENvbnRlbnRgICh1bm5lY2Vzc2FyeSBzaW5jZSB3ZSB1cGRhdGUgdmFs
dWUpLgorICAgICAgaW5pdGlhbFZhbHVlOiB0aGlzLnByb3BzLnZhbHVlICE9IG51bGwgPyB0aGlz
LnByb3BzLnZhbHVlIDogZGVmYXVsdFZhbHVlLAorICAgICAgdmFsdWU6IGRlZmF1bHRWYWx1ZQor
ICAgIH07CisgIH0sCisKKyAgc2hvdWxkQ29tcG9uZW50VXBkYXRlOiBmdW5jdGlvbigpIHsKKyAg
ICAvLyBEZWZlciBhbnkgdXBkYXRlcyB0byB0aGlzIGNvbXBvbmVudCBkdXJpbmcgdGhlIGBvbkNo
YW5nZWAgaGFuZGxlci4KKyAgICByZXR1cm4gIXRoaXMuX2lzQ2hhbmdpbmc7CisgIH0sCisKKyAg
Z2V0VmFsdWU6IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLnByb3BzLnZhbHVlICE9IG51
bGwgPyB0aGlzLnByb3BzLnZhbHVlIDogdGhpcy5zdGF0ZS52YWx1ZTsKKyAgfSwKKworICByZW5k
ZXI6IGZ1bmN0aW9uKCkgeworICAgIC8vIENsb25lIGB0aGlzLnByb3BzYCBzbyB3ZSBkb24ndCBt
dXRhdGUgdGhlIGlucHV0LgorICAgIHZhciBwcm9wcyA9IG1lcmdlKHRoaXMucHJvcHMpOworCisg
ICAgaW52YXJpYW50KAorICAgICAgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPT0gbnVs
bCwKKyAgICAgICdgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgIGRvZXMgbm90IG1ha2Ugc2Vuc2Ug
b24gPHRleHRhcmVhPi4nCisgICAgKTsKKworICAgIHByb3BzLnZhbHVlID0gdGhpcy5nZXRWYWx1
ZSgpOworICAgIHByb3BzLm9uQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2U7CisKKyAgICAvLyBB
bHdheXMgc2V0IGNoaWxkcmVuIHRvIHRoZSBzYW1lIHRoaW5nLiBJbiBJRTksIHRoZSBzZWxlY3Rp
b24gcmFuZ2Ugd2lsbAorICAgIC8vIGdldCByZXNldCBpZiBgdGV4dENvbnRlbnRgIGlzIG11dGF0
ZWQuCisgICAgcmV0dXJuIHRleHRhcmVhKHByb3BzLCB0aGlzLnN0YXRlLmluaXRpYWxWYWx1ZSk7
CisgIH0sCisKKyAgY29tcG9uZW50RGlkVXBkYXRlOiBmdW5jdGlvbihwcmV2UHJvcHMsIHByZXZT
dGF0ZSwgcm9vdE5vZGUpIHsKKyAgICBpZiAodGhpcy5wcm9wcy52YWx1ZSAhPSBudWxsKSB7Cisg
ICAgICBET01Qcm9wZXJ0eU9wZXJhdGlvbnMuc2V0VmFsdWVGb3JQcm9wZXJ0eSgKKyAgICAgICAg
cm9vdE5vZGUsCisgICAgICAgICd2YWx1ZScsCisgICAgICAgIHRoaXMucHJvcHMudmFsdWUgfHwg
JycKKyAgICAgICk7CisgICAgfQorICB9LAorCisgIGhhbmRsZUNoYW5nZTogZnVuY3Rpb24oZXZl
bnQpIHsKKyAgICB2YXIgcmV0dXJuVmFsdWU7CisgICAgaWYgKHRoaXMucHJvcHMub25DaGFuZ2Up
IHsKKyAgICAgIHRoaXMuX2lzQ2hhbmdpbmcgPSB0cnVlOworICAgICAgcmV0dXJuVmFsdWUgPSB0
aGlzLnByb3BzLm9uQ2hhbmdlKGV2ZW50KTsKKyAgICAgIHRoaXMuX2lzQ2hhbmdpbmcgPSBmYWxz
ZTsKKyAgICB9CisgICAgdGhpcy5zZXRTdGF0ZSh7dmFsdWU6IGV2ZW50LnRhcmdldC52YWx1ZX0p
OworICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgfQorCit9KTsKKworbW9kdWxlLmV4cG9ydHMg
PSBSZWFjdERPTVRleHRhcmVhOworCit9LHsiLi9ET01Qcm9wZXJ0eU9wZXJhdGlvbnMiOjgsIi4v
UmVhY3RDb21wb3NpdGVDb21wb25lbnQiOjIzLCIuL1JlYWN0RE9NIjoyNSwiLi9pbnZhcmlhbnQi
Ojc1LCIuL21lcmdlIjo4MX1dLDMyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsK
Ky8qKgorICogQ29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1
bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAq
IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUg
TGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoK
KyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVu
bGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywg
c29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVk
IG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9O
UyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGlj
ZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQK
KyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVs
ZSBSZWFjdERlZmF1bHRJbmplY3Rpb24KKyAqLworCisidXNlIHN0cmljdCI7CisKK3ZhciBSZWFj
dERPTSA9IHJlcXVpcmUoIi4vUmVhY3RET00iKTsKK3ZhciBSZWFjdERPTUZvcm0gPSByZXF1aXJl
KCIuL1JlYWN0RE9NRm9ybSIpOwordmFyIFJlYWN0RE9NSW5wdXQgPSByZXF1aXJlKCIuL1JlYWN0
RE9NSW5wdXQiKTsKK3ZhciBSZWFjdERPTU9wdGlvbiA9IHJlcXVpcmUoIi4vUmVhY3RET01PcHRp
b24iKTsKK3ZhciBSZWFjdERPTVNlbGVjdCA9IHJlcXVpcmUoIi4vUmVhY3RET01TZWxlY3QiKTsK
K3ZhciBSZWFjdERPTVRleHRhcmVhID0gcmVxdWlyZSgiLi9SZWFjdERPTVRleHRhcmVhIik7CisK
K3ZhciBEZWZhdWx0RE9NUHJvcGVydHlDb25maWcgPSByZXF1aXJlKCIuL0RlZmF1bHRET01Qcm9w
ZXJ0eUNvbmZpZyIpOwordmFyIERPTVByb3BlcnR5ID0gcmVxdWlyZSgiLi9ET01Qcm9wZXJ0eSIp
OworCit2YXIgRGVmYXVsdEV2ZW50UGx1Z2luT3JkZXIgPSByZXF1aXJlKCIuL0RlZmF1bHRFdmVu
dFBsdWdpbk9yZGVyIik7Cit2YXIgRW50ZXJMZWF2ZUV2ZW50UGx1Z2luID0gcmVxdWlyZSgiLi9F
bnRlckxlYXZlRXZlbnRQbHVnaW4iKTsKK3ZhciBDaGFuZ2VFdmVudFBsdWdpbiA9IHJlcXVpcmUo
Ii4vQ2hhbmdlRXZlbnRQbHVnaW4iKTsKK3ZhciBFdmVudFBsdWdpbkh1YiA9IHJlcXVpcmUoIi4v
RXZlbnRQbHVnaW5IdWIiKTsKK3ZhciBSZWFjdEluc3RhbmNlSGFuZGxlcyA9IHJlcXVpcmUoIi4v
UmVhY3RJbnN0YW5jZUhhbmRsZXMiKTsKK3ZhciBTaW1wbGVFdmVudFBsdWdpbiA9IHJlcXVpcmUo
Ii4vU2ltcGxlRXZlbnRQbHVnaW4iKTsKKworZnVuY3Rpb24gaW5qZWN0KCkgeworICAvKioKKyAg
ICogSW5qZWN0IG1vZHVsZSBmb3IgcmVzb2x2aW5nIERPTSBoaWVyYXJjaHkgYW5kIHBsdWdpbiBv
cmRlcmluZy4KKyAgICovCisgIEV2ZW50UGx1Z2luSHViLmluamVjdGlvbi5pbmplY3RFdmVudFBs
dWdpbk9yZGVyKERlZmF1bHRFdmVudFBsdWdpbk9yZGVyKTsKKyAgRXZlbnRQbHVnaW5IdWIuaW5q
ZWN0aW9uLmluamVjdEluc3RhbmNlSGFuZGxlKFJlYWN0SW5zdGFuY2VIYW5kbGVzKTsKKworICAv
KioKKyAgICogU29tZSBpbXBvcnRhbnQgZXZlbnQgcGx1Z2lucyBpbmNsdWRlZCBieSBkZWZhdWx0
ICh3aXRob3V0IGhhdmluZyB0byByZXF1aXJlCisgICAqIHRoZW0pLgorICAgKi8KKyAgRXZlbnRQ
bHVnaW5IdWIuaW5qZWN0aW9uLmluamVjdEV2ZW50UGx1Z2luc0J5TmFtZSh7CisgICAgJ1NpbXBs
ZUV2ZW50UGx1Z2luJzogU2ltcGxlRXZlbnRQbHVnaW4sCisgICAgJ0VudGVyTGVhdmVFdmVudFBs
dWdpbic6IEVudGVyTGVhdmVFdmVudFBsdWdpbiwKKyAgICAnQ2hhbmdlRXZlbnRQbHVnaW4nOiBD
aGFuZ2VFdmVudFBsdWdpbgorICB9KTsKKworICBSZWFjdERPTS5pbmplY3Rpb24uaW5qZWN0Q29t
cG9uZW50Q2xhc3Nlcyh7CisgICAgZm9ybTogUmVhY3RET01Gb3JtLAorICAgIGlucHV0OiBSZWFj
dERPTUlucHV0LAorICAgIG9wdGlvbjogUmVhY3RET01PcHRpb24sCisgICAgc2VsZWN0OiBSZWFj
dERPTVNlbGVjdCwKKyAgICB0ZXh0YXJlYTogUmVhY3RET01UZXh0YXJlYQorICB9KTsKKworICBE
T01Qcm9wZXJ0eS5pbmplY3Rpb24uaW5qZWN0RE9NUHJvcGVydHlDb25maWcoRGVmYXVsdERPTVBy
b3BlcnR5Q29uZmlnKTsKK30KKworbW9kdWxlLmV4cG9ydHMgPSB7CisgIGluamVjdDogaW5qZWN0
Cit9OworCit9LHsiLi9DaGFuZ2VFdmVudFBsdWdpbiI6NSwiLi9ET01Qcm9wZXJ0eSI6NywiLi9E
ZWZhdWx0RE9NUHJvcGVydHlDb25maWciOjEwLCIuL0RlZmF1bHRFdmVudFBsdWdpbk9yZGVyIjox
MSwiLi9FbnRlckxlYXZlRXZlbnRQbHVnaW4iOjEyLCIuL0V2ZW50UGx1Z2luSHViIjoxNSwiLi9S
ZWFjdERPTSI6MjUsIi4vUmVhY3RET01Gb3JtIjoyNiwiLi9SZWFjdERPTUlucHV0IjoyOCwiLi9S
ZWFjdERPTU9wdGlvbiI6MjksIi4vUmVhY3RET01TZWxlY3QiOjMwLCIuL1JlYWN0RE9NVGV4dGFy
ZWEiOjMxLCIuL1JlYWN0SW5zdGFuY2VIYW5kbGVzIjozNywiLi9TaW1wbGVFdmVudFBsdWdpbiI6
NDl9XSwzMzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisoZnVuY3Rpb24oKXsv
KioKKyAqIENvcHlyaWdodCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5k
ZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5
b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExp
Y2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisg
KiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxl
c3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNv
ZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBv
biBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMg
T0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vu
c2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisg
KiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBAcHJvdmlkZXNNb2R1bGUg
UmVhY3RFdmVudEVtaXR0ZXIKKyAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5CisgKi8KKworInVz
ZSBzdHJpY3QiOworCit2YXIgRXZlbnRDb25zdGFudHMgPSByZXF1aXJlKCIuL0V2ZW50Q29uc3Rh
bnRzIik7Cit2YXIgRXZlbnRMaXN0ZW5lciA9IHJlcXVpcmUoIi4vRXZlbnRMaXN0ZW5lciIpOwor
dmFyIEV2ZW50UGx1Z2luSHViID0gcmVxdWlyZSgiLi9FdmVudFBsdWdpbkh1YiIpOwordmFyIEV4
ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZSgiLi9FeGVjdXRpb25FbnZpcm9ubWVudCIpOwor
dmFyIFJlYWN0VXBkYXRlcyA9IHJlcXVpcmUoIi4vUmVhY3RVcGRhdGVzIik7Cit2YXIgVmlld3Bv
cnRNZXRyaWNzID0gcmVxdWlyZSgiLi9WaWV3cG9ydE1ldHJpY3MiKTsKKwordmFyIGludmFyaWFu
dCA9IHJlcXVpcmUoIi4vaW52YXJpYW50Iik7Cit2YXIgaXNFdmVudFN1cHBvcnRlZCA9IHJlcXVp
cmUoIi4vaXNFdmVudFN1cHBvcnRlZCIpOworCisvKioKKyAqIFN1bW1hcnkgb2YgYFJlYWN0RXZl
bnRFbWl0dGVyYCBldmVudCBoYW5kbGluZzoKKyAqCisgKiAgLSBUb3AtbGV2ZWwgZGVsZWdhdGlv
biBpcyB1c2VkIHRvIHRyYXAgbmF0aXZlIGJyb3dzZXIgZXZlbnRzLiBXZSBub3JtYWxpemUKKyAq
ICAgIGFuZCBkZS1kdXBsaWNhdGUgZXZlbnRzIHRvIGFjY291bnQgZm9yIGJyb3dzZXIgcXVpcmtz
LgorICoKKyAqICAtIEZvcndhcmQgdGhlc2UgbmF0aXZlIGV2ZW50cyAod2l0aCB0aGUgYXNzb2Np
YXRlZCB0b3AtbGV2ZWwgdHlwZSB1c2VkIHRvCisgKiAgICB0cmFwIGl0KSB0byBgRXZlbnRQbHVn
aW5IdWJgLCB3aGljaCBpbiB0dXJuIHdpbGwgYXNrIHBsdWdpbnMgaWYgdGhleSB3YW50CisgKiAg
ICB0byBleHRyYWN0IGFueSBzeW50aGV0aWMgZXZlbnRzLgorICoKKyAqICAtIFRoZSBgRXZlbnRQ
bHVnaW5IdWJgIHdpbGwgdGhlbiBwcm9jZXNzIGVhY2ggZXZlbnQgYnkgYW5ub3RhdGluZyB0aGVt
IHdpdGgKKyAqICAgICJkaXNwYXRjaGVzIiwgYSBzZXF1ZW5jZSBvZiBsaXN0ZW5lcnMgYW5kIElE
cyB0aGF0IGNhcmUgYWJvdXQgdGhhdCBldmVudC4KKyAqCisgKiAgLSBUaGUgYEV2ZW50UGx1Z2lu
SHViYCB0aGVuIGRpc3BhdGNoZXMgdGhlIGV2ZW50cy4KKyAqCisgKiBPdmVydmlldyBvZiBSZWFj
dCBhbmQgdGhlIGV2ZW50IHN5c3RlbToKKyAqCisgKiAgICAgICAgICAgICAgICAgICAuCisgKiAr
LS0tLS0tLS0tLS0tKyAgICAuCisgKiB8ICAgIERPTSAgICAgfCAgICAuCisgKiArLS0tLS0tLS0t
LS0tKyAgICAuICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsKKyAqICAgICAg
ICsgICAgICAgICAgIC4gICAgICAgICAgICAgICArLS0tLS0tLS0rfFNpbXBsZUV2ZW50fAorICog
ICAgICAgfCAgICAgICAgICAgLiAgICAgICAgICAgICAgIHwgICAgICAgICB8UGx1Z2luICAgICB8
CisgKiArLS0tLS18LS0tLS0tKyAgICAuICAgICAgICAgICAgICAgdiAgICAgICAgICstLS0tLS0t
LS0tLSsKKyAqIHwgICAgIHwgICAgICB8ICAgIC4gICAgKy0tLS0tLS0tLS0tLS0tKyAgICAgICAg
ICAgICAgICAgICAgKy0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICstLS0tLS0tLS0tLS4tLS0+fEV2
ZW50UGx1Z2luSHVifCAgICAgICAgICAgICAgICAgICAgfCAgICBFdmVudCAgIHwKKyAqIHwgICAg
ICAgICAgICB8ICAgIC4gICAgfCAgICAgICAgICAgICAgfCAgICAgKy0tLS0tLS0tLS0tKyAgfCBQ
cm9wYWdhdG9yc3wKKyAqIHwgUmVhY3RFdmVudCB8ICAgIC4gICAgfCAgICAgICAgICAgICAgfCAg
ICAgfFRhcEV2ZW50ICAgfCAgfC0tLS0tLS0tLS0tLXwKKyAqIHwgIEVtaXR0ZXIgICB8ICAgIC4g
ICAgfCAgICAgICAgICAgICAgfDwtLS0rfFBsdWdpbiAgICAgfCAgfG90aGVyIHBsdWdpbnwKKyAq
IHwgICAgICAgICAgICB8ICAgIC4gICAgfCAgICAgICAgICAgICAgfCAgICAgKy0tLS0tLS0tLS0t
KyAgfCAgdXRpbGl0aWVzIHwKKyAqIHwgICAgICstLS0tLS0tLS0tLS4tLS0tLS0tLS0rICAgICAg
ICAgfCAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLSsKKyAqIHwgICAgIHwgICAgICB8
ICAgIC4gICAgKy0tLS18LS0tLS0tLS0tKworICogKy0tLS0tfC0tLS0tLSsgICAgLiAgICAgICAg
IHwgICAgICBeICAgICAgICArLS0tLS0tLS0tLS0rCisgKiAgICAgICB8ICAgICAgICAgICAuICAg
ICAgICAgfCAgICAgIHwgICAgICAgIHxFbnRlci9MZWF2ZXwKKyAqICAgICAgICsgICAgICAgICAg
IC4gICAgICAgICB8ICAgICAgKy0tLS0tLS0rfFBsdWdpbiAgICAgfAorICogKy0tLS0tLS0tLS0t
LS0rICAgLiAgICAgICAgIHYgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rCisgKiB8IGFwcGxp
Y2F0aW9uIHwgICAuICAgICstLS0tLS0tLS0tKworICogfC0tLS0tLS0tLS0tLS18ICAgLiAgICB8
IGNhbGxiYWNrIHwKKyAqIHwgICAgICAgICAgICAgfCAgIC4gICAgfCByZWdpc3RyeSB8CisgKiB8
ICAgICAgICAgICAgIHwgICAuICAgICstLS0tLS0tLS0tKworICogKy0tLS0tLS0tLS0tLS0rICAg
LgorICogICAgICAgICAgICAgICAgICAgLgorICogICAgUmVhY3QgQ29yZSAgICAgLiAgR2VuZXJh
bCBQdXJwb3NlIEV2ZW50IFBsdWdpbiBTeXN0ZW0KKyAqLworCisvKioKKyAqIFdoZXRoZXIgb3Ig
bm90IGBlbnN1cmVMaXN0ZW5pbmdgIGhhcyBiZWVuIGludm9rZWQuCisgKiBAdHlwZSB7Ym9vbGVh
bn0KKyAqIEBwcml2YXRlCisgKi8KK3ZhciBfaXNMaXN0ZW5pbmcgPSBmYWxzZTsKKworLyoqCisg
KiBUcmFwcyB0b3AtbGV2ZWwgZXZlbnRzIGJ5IHVzaW5nIGV2ZW50IGJ1YmJsaW5nLgorICoKKyAq
IEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFR5cGUgUmVjb3JkIGZyb20gYEV2ZW50Q29uc3RhbnRz
YC4KKyAqIEBwYXJhbSB7c3RyaW5nfSBoYW5kbGVyQmFzZU5hbWUgRXZlbnQgbmFtZSAoZS5nLiAi
Y2xpY2siKS4KKyAqIEBwYXJhbSB7RE9NRXZlbnRUYXJnZXR9IGVsZW1lbnQgRWxlbWVudCBvbiB3
aGljaCB0byBhdHRhY2ggbGlzdGVuZXIuCisgKiBAaW50ZXJuYWwKKyAqLworZnVuY3Rpb24gdHJh
cEJ1YmJsZWRFdmVudCh0b3BMZXZlbFR5cGUsIGhhbmRsZXJCYXNlTmFtZSwgZWxlbWVudCkgewor
ICBFdmVudExpc3RlbmVyLmxpc3RlbigKKyAgICBlbGVtZW50LAorICAgIGhhbmRsZXJCYXNlTmFt
ZSwKKyAgICBSZWFjdEV2ZW50RW1pdHRlci5Ub3BMZXZlbENhbGxiYWNrQ3JlYXRvci5jcmVhdGVU
b3BMZXZlbENhbGxiYWNrKAorICAgICAgdG9wTGV2ZWxUeXBlCisgICAgKQorICApOworfQorCisv
KioKKyAqIFRyYXBzIGEgdG9wLWxldmVsIGV2ZW50IGJ5IHVzaW5nIGV2ZW50IGNhcHR1cmluZy4K
KyAqCisgKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUeXBlIFJlY29yZCBmcm9tIGBFdmVudENv
bnN0YW50c2AuCisgKiBAcGFyYW0ge3N0cmluZ30gaGFuZGxlckJhc2VOYW1lIEV2ZW50IG5hbWUg
KGUuZy4gImNsaWNrIikuCisgKiBAcGFyYW0ge0RPTUV2ZW50VGFyZ2V0fSBlbGVtZW50IEVsZW1l
bnQgb24gd2hpY2ggdG8gYXR0YWNoIGxpc3RlbmVyLgorICogQGludGVybmFsCisgKi8KK2Z1bmN0
aW9uIHRyYXBDYXB0dXJlZEV2ZW50KHRvcExldmVsVHlwZSwgaGFuZGxlckJhc2VOYW1lLCBlbGVt
ZW50KSB7CisgIEV2ZW50TGlzdGVuZXIuY2FwdHVyZSgKKyAgICBlbGVtZW50LAorICAgIGhhbmRs
ZXJCYXNlTmFtZSwKKyAgICBSZWFjdEV2ZW50RW1pdHRlci5Ub3BMZXZlbENhbGxiYWNrQ3JlYXRv
ci5jcmVhdGVUb3BMZXZlbENhbGxiYWNrKAorICAgICAgdG9wTGV2ZWxUeXBlCisgICAgKQorICAp
OworfQorCisvKioKKyAqIExpc3RlbnMgdG8gd2luZG93IHNjcm9sbCBhbmQgcmVzaXplIGV2ZW50
cy4gV2UgY2FjaGUgc2Nyb2xsIHZhbHVlcyBzbyB0aGF0CisgKiBhcHBsaWNhdGlvbiBjb2RlIGNh
biBhY2Nlc3MgdGhlbSB3aXRob3V0IHRyaWdnZXJpbmcgcmVmbG93cy4KKyAqCisgKiBOT1RFOiBT
Y3JvbGwgZXZlbnRzIGRvIG5vdCBidWJibGUuCisgKgorICogQHByaXZhdGUKKyAqIEBzZWUgaHR0
cDovL3d3dy5xdWlya3Ntb2RlLm9yZy9kb20vZXZlbnRzL3Njcm9sbC5odG1sCisgKi8KK2Z1bmN0
aW9uIHJlZ2lzdGVyU2Nyb2xsVmFsdWVNb25pdG9yaW5nKCkgeworICB2YXIgcmVmcmVzaCA9IFZp
ZXdwb3J0TWV0cmljcy5yZWZyZXNoU2Nyb2xsVmFsdWVzOworICBFdmVudExpc3RlbmVyLmxpc3Rl
bih3aW5kb3csICdzY3JvbGwnLCByZWZyZXNoKTsKKyAgRXZlbnRMaXN0ZW5lci5saXN0ZW4od2lu
ZG93LCAncmVzaXplJywgcmVmcmVzaCk7Cit9CisKKy8qKgorICogV2UgbGlzdGVuIGZvciBidWJi
bGVkIHRvdWNoIGV2ZW50cyBvbiB0aGUgZG9jdW1lbnQgb2JqZWN0LgorICoKKyAqIEZpcmVmb3gg
djguMDEgKGFuZCBwb3NzaWJseSBvdGhlcnMpIGV4aGliaXRlZCBzdHJhbmdlIGJlaGF2aW9yIHdo
ZW4gbW91bnRpbmcKKyAqIGBvbm1vdXNlbW92ZWAgZXZlbnRzIGF0IHNvbWUgbm9kZSB0aGF0IHdh
cyBub3QgdGhlIGRvY3VtZW50IGVsZW1lbnQuIFRoZQorICogc3ltcHRvbXMgd2VyZSB0aGF0IGlm
IHlvdXIgbW91c2UgaXMgbm90IG1vdmluZyBvdmVyIHNvbWV0aGluZyBjb250YWluZWQKKyAqIHdp
dGhpbiB0aGF0IG1vdW50IHBvaW50IChmb3IgZXhhbXBsZSBvbiB0aGUgYmFja2dyb3VuZCkgdGhl
IHRvcC1sZXZlbAorICogbGlzdGVuZXJzIGZvciBgb25tb3VzZW1vdmVgIHdvbid0IGJlIGNhbGxl
ZC4gSG93ZXZlciwgaWYgeW91IHJlZ2lzdGVyIHRoZQorICogYG1vdXNlbW92ZWAgb24gdGhlIGRv
Y3VtZW50IG9iamVjdCwgdGhlbiBpdCB3aWxsIG9mIGNvdXJzZSBjYXRjaCBhbGwKKyAqIGBtb3Vz
ZW1vdmVgcy4gVGhpcyBhbG9uZyB3aXRoIGlPUyBxdWlya3MsIGp1c3RpZmllcyByZXN0cmljdGlu
ZyB0b3AtbGV2ZWwKKyAqIGxpc3RlbmVycyB0byB0aGUgZG9jdW1lbnQgb2JqZWN0IG9ubHksIGF0
IGxlYXN0IGZvciB0aGVzZSBtb3ZlbWVudCB0eXBlcyBvZgorICogZXZlbnRzIGFuZCBwb3NzaWJs
eSBhbGwgZXZlbnRzLgorICoKKyAqIEBzZWUgaHR0cDovL3d3dy5xdWlya3Ntb2RlLm9yZy9ibG9n
L2FyY2hpdmVzLzIwMTAvMDkvY2xpY2tfZXZlbnRfZGVsLmh0bWwKKyAqCisgKiBBbHNvLCBga2V5
dXBgL2BrZXlwcmVzc2AvYGtleWRvd25gIGRvIG5vdCBidWJibGUgdG8gdGhlIHdpbmRvdyBvbiBJ
RSwgYnV0CisgKiB0aGV5IGJ1YmJsZSB0byBkb2N1bWVudC4KKyAqCisgKiBAcGFyYW0ge2Jvb2xl
YW59IHRvdWNoTm90TW91c2UgTGlzdGVuIHRvIHRvdWNoIGV2ZW50cyBpbnN0ZWFkIG9mIG1vdXNl
LgorICogQHByaXZhdGUKKyAqIEBzZWUgaHR0cDovL3d3dy5xdWlya3Ntb2RlLm9yZy9kb20vZXZl
bnRzL2tleXMuaHRtbC4KKyAqLworZnVuY3Rpb24gbGlzdGVuQXRUb3BMZXZlbCh0b3VjaE5vdE1v
dXNlKSB7CisgIGludmFyaWFudCgKKyAgICAhX2lzTGlzdGVuaW5nLAorICAgICdsaXN0ZW5BdFRv
cExldmVsKC4uLik6IENhbm5vdCBzZXR1cCB0b3AtbGV2ZWwgbGlzdGVuZXIgbW9yZSB0aGFuIG9u
Y2UuJworICApOworICB2YXIgdG9wTGV2ZWxUeXBlcyA9IEV2ZW50Q29uc3RhbnRzLnRvcExldmVs
VHlwZXM7CisgIHZhciBtb3VudEF0ID0gZG9jdW1lbnQ7CisKKyAgcmVnaXN0ZXJTY3JvbGxWYWx1
ZU1vbml0b3JpbmcoKTsKKyAgdHJhcEJ1YmJsZWRFdmVudCh0b3BMZXZlbFR5cGVzLnRvcE1vdXNl
T3ZlciwgJ21vdXNlb3ZlcicsIG1vdW50QXQpOworICB0cmFwQnViYmxlZEV2ZW50KHRvcExldmVs
VHlwZXMudG9wTW91c2VEb3duLCAnbW91c2Vkb3duJywgbW91bnRBdCk7CisgIHRyYXBCdWJibGVk
RXZlbnQodG9wTGV2ZWxUeXBlcy50b3BNb3VzZVVwLCAnbW91c2V1cCcsIG1vdW50QXQpOworICB0
cmFwQnViYmxlZEV2ZW50KHRvcExldmVsVHlwZXMudG9wTW91c2VNb3ZlLCAnbW91c2Vtb3ZlJywg
bW91bnRBdCk7CisgIHRyYXBCdWJibGVkRXZlbnQodG9wTGV2ZWxUeXBlcy50b3BNb3VzZU91dCwg
J21vdXNlb3V0JywgbW91bnRBdCk7CisgIHRyYXBCdWJibGVkRXZlbnQodG9wTGV2ZWxUeXBlcy50
b3BDbGljaywgJ2NsaWNrJywgbW91bnRBdCk7CisgIHRyYXBCdWJibGVkRXZlbnQodG9wTGV2ZWxU
eXBlcy50b3BEb3VibGVDbGljaywgJ2RibGNsaWNrJywgbW91bnRBdCk7CisgIGlmICh0b3VjaE5v
dE1vdXNlKSB7CisgICAgdHJhcEJ1YmJsZWRFdmVudCh0b3BMZXZlbFR5cGVzLnRvcFRvdWNoU3Rh
cnQsICd0b3VjaHN0YXJ0JywgbW91bnRBdCk7CisgICAgdHJhcEJ1YmJsZWRFdmVudCh0b3BMZXZl
bFR5cGVzLnRvcFRvdWNoRW5kLCAndG91Y2hlbmQnLCBtb3VudEF0KTsKKyAgICB0cmFwQnViYmxl
ZEV2ZW50KHRvcExldmVsVHlwZXMudG9wVG91Y2hNb3ZlLCAndG91Y2htb3ZlJywgbW91bnRBdCk7
CisgICAgdHJhcEJ1YmJsZWRFdmVudCh0b3BMZXZlbFR5cGVzLnRvcFRvdWNoQ2FuY2VsLCAndG91
Y2hjYW5jZWwnLCBtb3VudEF0KTsKKyAgfQorICB0cmFwQnViYmxlZEV2ZW50KHRvcExldmVsVHlw
ZXMudG9wS2V5VXAsICdrZXl1cCcsIG1vdW50QXQpOworICB0cmFwQnViYmxlZEV2ZW50KHRvcExl
dmVsVHlwZXMudG9wS2V5UHJlc3MsICdrZXlwcmVzcycsIG1vdW50QXQpOworICB0cmFwQnViYmxl
ZEV2ZW50KHRvcExldmVsVHlwZXMudG9wS2V5RG93biwgJ2tleWRvd24nLCBtb3VudEF0KTsKKyAg
dHJhcEJ1YmJsZWRFdmVudCh0b3BMZXZlbFR5cGVzLnRvcElucHV0LCAnaW5wdXQnLCBtb3VudEF0
KTsKKyAgdHJhcEJ1YmJsZWRFdmVudCh0b3BMZXZlbFR5cGVzLnRvcENoYW5nZSwgJ2NoYW5nZScs
IG1vdW50QXQpOworICB0cmFwQnViYmxlZEV2ZW50KAorICAgIHRvcExldmVsVHlwZXMudG9wU2Vs
ZWN0aW9uQ2hhbmdlLAorICAgICdzZWxlY3Rpb25jaGFuZ2UnLAorICAgIG1vdW50QXQKKyAgKTsK
KyAgdHJhcEJ1YmJsZWRFdmVudCgKKyAgICB0b3BMZXZlbFR5cGVzLnRvcERPTUNoYXJhY3RlckRh
dGFNb2RpZmllZCwKKyAgICAnRE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVkJywKKyAgICBtb3VudEF0
CisgICk7CisKKyAgaWYgKGlzRXZlbnRTdXBwb3J0ZWQoJ2RyYWcnKSkgeworICAgIHRyYXBCdWJi
bGVkRXZlbnQodG9wTGV2ZWxUeXBlcy50b3BEcmFnLCAnZHJhZycsIG1vdW50QXQpOworICAgIHRy
YXBCdWJibGVkRXZlbnQodG9wTGV2ZWxUeXBlcy50b3BEcmFnRW5kLCAnZHJhZ2VuZCcsIG1vdW50
QXQpOworICAgIHRyYXBCdWJibGVkRXZlbnQodG9wTGV2ZWxUeXBlcy50b3BEcmFnRW50ZXIsICdk
cmFnZW50ZXInLCBtb3VudEF0KTsKKyAgICB0cmFwQnViYmxlZEV2ZW50KHRvcExldmVsVHlwZXMu
dG9wRHJhZ0V4aXQsICdkcmFnZXhpdCcsIG1vdW50QXQpOworICAgIHRyYXBCdWJibGVkRXZlbnQo
dG9wTGV2ZWxUeXBlcy50b3BEcmFnTGVhdmUsICdkcmFnbGVhdmUnLCBtb3VudEF0KTsKKyAgICB0
cmFwQnViYmxlZEV2ZW50KHRvcExldmVsVHlwZXMudG9wRHJhZ092ZXIsICdkcmFnb3ZlcicsIG1v
dW50QXQpOworICAgIHRyYXBCdWJibGVkRXZlbnQodG9wTGV2ZWxUeXBlcy50b3BEcmFnU3RhcnQs
ICdkcmFnc3RhcnQnLCBtb3VudEF0KTsKKyAgICB0cmFwQnViYmxlZEV2ZW50KHRvcExldmVsVHlw
ZXMudG9wRHJvcCwgJ2Ryb3AnLCBtb3VudEF0KTsKKyAgfQorCisgIGlmIChpc0V2ZW50U3VwcG9y
dGVkKCd3aGVlbCcpKSB7CisgICAgdHJhcEJ1YmJsZWRFdmVudCh0b3BMZXZlbFR5cGVzLnRvcFdo
ZWVsLCAnd2hlZWwnLCBtb3VudEF0KTsKKyAgfSBlbHNlIGlmIChpc0V2ZW50U3VwcG9ydGVkKCdt
b3VzZXdoZWVsJykpIHsKKyAgICB0cmFwQnViYmxlZEV2ZW50KHRvcExldmVsVHlwZXMudG9wV2hl
ZWwsICdtb3VzZXdoZWVsJywgbW91bnRBdCk7CisgIH0gZWxzZSB7CisgICAgLy8gRmlyZWZveCBu
ZWVkcyB0byBjYXB0dXJlIGEgZGlmZmVyZW50IG1vdXNlIHNjcm9sbCBldmVudC4KKyAgICAvLyBA
c2VlIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvZG9tL2V2ZW50cy90ZXN0cy9zY3JvbGwuaHRt
bAorICAgIHRyYXBCdWJibGVkRXZlbnQodG9wTGV2ZWxUeXBlcy50b3BXaGVlbCwgJ0RPTU1vdXNl
U2Nyb2xsJywgbW91bnRBdCk7CisgIH0KKworICAvLyBJRTw5IGRvZXMgbm90IHN1cHBvcnQgY2Fw
dHVyaW5nIHNvIGp1c3QgdHJhcCB0aGUgYnViYmxlZCBldmVudCB0aGVyZS4KKyAgaWYgKGlzRXZl
bnRTdXBwb3J0ZWQoJ3Njcm9sbCcsIHRydWUpKSB7CisgICAgdHJhcENhcHR1cmVkRXZlbnQodG9w
TGV2ZWxUeXBlcy50b3BTY3JvbGwsICdzY3JvbGwnLCBtb3VudEF0KTsKKyAgfSBlbHNlIHsKKyAg
ICB0cmFwQnViYmxlZEV2ZW50KHRvcExldmVsVHlwZXMudG9wU2Nyb2xsLCAnc2Nyb2xsJywgd2lu
ZG93KTsKKyAgfQorCisgIGlmIChpc0V2ZW50U3VwcG9ydGVkKCdmb2N1cycsIHRydWUpKSB7Cisg
ICAgdHJhcENhcHR1cmVkRXZlbnQodG9wTGV2ZWxUeXBlcy50b3BGb2N1cywgJ2ZvY3VzJywgbW91
bnRBdCk7CisgICAgdHJhcENhcHR1cmVkRXZlbnQodG9wTGV2ZWxUeXBlcy50b3BCbHVyLCAnYmx1
cicsIG1vdW50QXQpOworICB9IGVsc2UgaWYgKGlzRXZlbnRTdXBwb3J0ZWQoJ2ZvY3VzaW4nKSkg
eworICAgIC8vIElFIGhhcyBgZm9jdXNpbmAgYW5kIGBmb2N1c291dGAgZXZlbnRzIHdoaWNoIGJ1
YmJsZS4KKyAgICAvLyBAc2VlIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvYmxvZy9hcmNoaXZl
cy8yMDA4LzA0L2RlbGVnYXRpbmdfdGhlLmh0bWwKKyAgICB0cmFwQnViYmxlZEV2ZW50KHRvcExl
dmVsVHlwZXMudG9wRm9jdXMsICdmb2N1c2luJywgbW91bnRBdCk7CisgICAgdHJhcEJ1YmJsZWRF
dmVudCh0b3BMZXZlbFR5cGVzLnRvcEJsdXIsICdmb2N1c291dCcsIG1vdW50QXQpOworICB9Cit9
CisKKy8qKgorICogYFJlYWN0RXZlbnRFbWl0dGVyYCBpcyB1c2VkIHRvIGF0dGFjaCB0b3AtbGV2
ZWwgZXZlbnQgbGlzdGVuZXJzLiBGb3IgZXhhbXBsZToKKyAqCisgKiAgIFJlYWN0RXZlbnRFbWl0
dGVyLnB1dExpc3RlbmVyKCdteUlEJywgJ29uQ2xpY2snLCBteUZ1bmN0aW9uKTsKKyAqCisgKiBU
aGlzIHdvdWxkIGFsbG9jYXRlIGEgInJlZ2lzdHJhdGlvbiIgb2YgYCgnb25DbGljaycsIG15RnVu
Y3Rpb24pYCBvbiAnbXlJRCcuCisgKgorICogQGludGVybmFsCisgKi8KK3ZhciBSZWFjdEV2ZW50
RW1pdHRlciA9IHsKKworICAvKioKKyAgICogUmVhY3QgcmVmZXJlbmNlcyBgUmVhY3RFdmVudFRv
cExldmVsQ2FsbGJhY2tgIHVzaW5nIHRoaXMgcHJvcGVydHkgaW4gb3JkZXIKKyAgICogdG8gYWxs
b3cgZGVwZW5kZW5jeSBpbmplY3Rpb24gdmlhIGBlbnN1cmVMaXN0ZW5pbmdgLgorICAgKi8KKyAg
VG9wTGV2ZWxDYWxsYmFja0NyZWF0b3I6IG51bGwsCisKKyAgLyoqCisgICAqIEVuc3VyZXMgdGhh
dCB0b3AtbGV2ZWwgZXZlbnQgZGVsZWdhdGlvbiBsaXN0ZW5lcnMgYXJlIGluc3RhbGxlZC4KKyAg
ICoKKyAgICogVGhlcmUgYXJlIGlzc3VlcyB3aXRoIGxpc3RlbmluZyB0byBib3RoIHRvdWNoIGV2
ZW50cyBhbmQgbW91c2UgZXZlbnRzIG9uCisgICAqIHRoZSB0b3AtbGV2ZWwsIHNvIHdlIG1ha2Ug
dGhlIGNhbGxlciBjaG9vc2Ugd2hpY2ggb25lIHRvIGxpc3RlbiB0by4gKElmCisgICAqIHRoZXJl
J3MgYSB0b3VjaCB0b3AtbGV2ZWwgbGlzdGVuZXJzLCBhbmNob3JzIGRvbid0IHJlY2VpdmUgY2xp
Y2tzIGZvciBzb21lCisgICAqIHJlYXNvbiwgYW5kIG9ubHkgaW4gc29tZSBjYXNlcykuCisgICAq
CisgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdG91Y2hOb3RNb3VzZSBMaXN0ZW4gdG8gdG91Y2ggZXZl
bnRzIGluc3RlYWQgb2YgbW91c2UuCisgICAqIEBwYXJhbSB7b2JqZWN0fSBUb3BMZXZlbENhbGxi
YWNrQ3JlYXRvcgorICAgKi8KKyAgZW5zdXJlTGlzdGVuaW5nOiBmdW5jdGlvbih0b3VjaE5vdE1v
dXNlLCBUb3BMZXZlbENhbGxiYWNrQ3JlYXRvcikgeworICAgIGludmFyaWFudCgKKyAgICAgIEV4
ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSwKKyAgICAgICdlbnN1cmVMaXN0ZW5pbmcoLi4u
KTogQ2Fubm90IHRvZ2dsZSBldmVudCBsaXN0ZW5pbmcgaW4gYSBXb3JrZXIgJyArCisgICAgICAn
dGhyZWFkLiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiB0aGUgZnJhbWV3b3JrLiBQbGVhc2UgcmVw
b3J0ICcgKworICAgICAgJ2ltbWVkaWF0ZWx5LicKKyAgICApOworICAgIGlmICghX2lzTGlzdGVu
aW5nKSB7CisgICAgICBSZWFjdEV2ZW50RW1pdHRlci5Ub3BMZXZlbENhbGxiYWNrQ3JlYXRvciA9
IFRvcExldmVsQ2FsbGJhY2tDcmVhdG9yOworICAgICAgbGlzdGVuQXRUb3BMZXZlbCh0b3VjaE5v
dE1vdXNlKTsKKyAgICAgIF9pc0xpc3RlbmluZyA9IHRydWU7CisgICAgfQorICB9LAorCisgIC8q
KgorICAgKiBTZXRzIHdoZXRoZXIgb3Igbm90IGFueSBjcmVhdGVkIGNhbGxiYWNrcyBzaG91bGQg
YmUgZW5hYmxlZC4KKyAgICoKKyAgICogQHBhcmFtIHtib29sZWFufSBlbmFibGVkIFRydWUgaWYg
Y2FsbGJhY2tzIHNob3VsZCBiZSBlbmFibGVkLgorICAgKi8KKyAgc2V0RW5hYmxlZDogZnVuY3Rp
b24oZW5hYmxlZCkgeworICAgIGludmFyaWFudCgKKyAgICAgIEV4ZWN1dGlvbkVudmlyb25tZW50
LmNhblVzZURPTSwKKyAgICAgICdzZXRFbmFibGVkKC4uLik6IENhbm5vdCB0b2dnbGUgZXZlbnQg
bGlzdGVuaW5nIGluIGEgV29ya2VyIHRocmVhZC4gJyArCisgICAgICAnVGhpcyBpcyBsaWtlbHkg
YSBidWcgaW4gdGhlIGZyYW1ld29yay4gUGxlYXNlIHJlcG9ydCBpbW1lZGlhdGVseS4nCisgICAg
KTsKKyAgICBpZiAoUmVhY3RFdmVudEVtaXR0ZXIuVG9wTGV2ZWxDYWxsYmFja0NyZWF0b3IpIHsK
KyAgICAgIFJlYWN0RXZlbnRFbWl0dGVyLlRvcExldmVsQ2FsbGJhY2tDcmVhdG9yLnNldEVuYWJs
ZWQoZW5hYmxlZCk7CisgICAgfQorICB9LAorCisgIC8qKgorICAgKiBAcmV0dXJuIHtib29sZWFu
fSBUcnVlIGlmIGNhbGxiYWNrcyBhcmUgZW5hYmxlZC4KKyAgICovCisgIGlzRW5hYmxlZDogZnVu
Y3Rpb24oKSB7CisgICAgcmV0dXJuICEhKAorICAgICAgUmVhY3RFdmVudEVtaXR0ZXIuVG9wTGV2
ZWxDYWxsYmFja0NyZWF0b3IgJiYKKyAgICAgIFJlYWN0RXZlbnRFbWl0dGVyLlRvcExldmVsQ2Fs
bGJhY2tDcmVhdG9yLmlzRW5hYmxlZCgpCisgICAgKTsKKyAgfSwKKworICAvKioKKyAgICogU3Ry
ZWFtcyBhIGZpcmVkIHRvcC1sZXZlbCBldmVudCB0byBgRXZlbnRQbHVnaW5IdWJgIHdoZXJlIHBs
dWdpbnMgaGF2ZSB0aGUKKyAgICogb3Bwb3J0dW5pdHkgdG8gY3JlYXRlIGBSZWFjdEV2ZW50YHMg
dG8gYmUgZGlzcGF0Y2hlZC4KKyAgICoKKyAgICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVHlw
ZSBSZWNvcmQgZnJvbSBgRXZlbnRDb25zdGFudHNgLgorICAgKiBAcGFyYW0ge0RPTUV2ZW50VGFy
Z2V0fSB0b3BMZXZlbFRhcmdldCBUaGUgbGlzdGVuaW5nIGNvbXBvbmVudCByb290IG5vZGUuCisg
ICAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFRhcmdldElEIElEIG9mIGB0b3BMZXZlbFRhcmdl
dGAuCisgICAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVu
dC4KKyAgICovCisgIGhhbmRsZVRvcExldmVsOiBmdW5jdGlvbigKKyAgICAgIHRvcExldmVsVHlw
ZSwKKyAgICAgIHRvcExldmVsVGFyZ2V0LAorICAgICAgdG9wTGV2ZWxUYXJnZXRJRCwKKyAgICAg
IG5hdGl2ZUV2ZW50KSB7CisgICAgdmFyIGV2ZW50cyA9IEV2ZW50UGx1Z2luSHViLmV4dHJhY3RF
dmVudHMoCisgICAgICB0b3BMZXZlbFR5cGUsCisgICAgICB0b3BMZXZlbFRhcmdldCwKKyAgICAg
IHRvcExldmVsVGFyZ2V0SUQsCisgICAgICBuYXRpdmVFdmVudAorICAgICk7CisKKyAgICAvLyBF
dmVudCBxdWV1ZSBiZWluZyBwcm9jZXNzZWQgaW4gdGhlIHNhbWUgY3ljbGUgYWxsb3dzIGBwcmV2
ZW50RGVmYXVsdGAuCisgICAgUmVhY3RVcGRhdGVzLmJhdGNoZWRVcGRhdGVzKGZ1bmN0aW9uKCkg
eworICAgICAgRXZlbnRQbHVnaW5IdWIuZW5xdWV1ZUV2ZW50cyhldmVudHMpOworICAgICAgRXZl
bnRQbHVnaW5IdWIucHJvY2Vzc0V2ZW50UXVldWUoKTsKKyAgICB9KTsKKyAgfSwKKworICByZWdp
c3RyYXRpb25OYW1lczogRXZlbnRQbHVnaW5IdWIucmVnaXN0cmF0aW9uTmFtZXMsCisKKyAgcHV0
TGlzdGVuZXI6IEV2ZW50UGx1Z2luSHViLnB1dExpc3RlbmVyLAorCisgIGdldExpc3RlbmVyOiBF
dmVudFBsdWdpbkh1Yi5nZXRMaXN0ZW5lciwKKworICBkZWxldGVMaXN0ZW5lcjogRXZlbnRQbHVn
aW5IdWIuZGVsZXRlTGlzdGVuZXIsCisKKyAgZGVsZXRlQWxsTGlzdGVuZXJzOiBFdmVudFBsdWdp
bkh1Yi5kZWxldGVBbGxMaXN0ZW5lcnMsCisKKyAgdHJhcEJ1YmJsZWRFdmVudDogdHJhcEJ1YmJs
ZWRFdmVudCwKKworICB0cmFwQ2FwdHVyZWRFdmVudDogdHJhcENhcHR1cmVkRXZlbnQKKworfTsK
KworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdEV2ZW50RW1pdHRlcjsKKworfSkoKQorfSx7Ii4vRXZl
bnRDb25zdGFudHMiOjEzLCIuL0V2ZW50TGlzdGVuZXIiOjE0LCIuL0V2ZW50UGx1Z2luSHViIjox
NSwiLi9FeGVjdXRpb25FbnZpcm9ubWVudCI6MTksIi4vUmVhY3RVcGRhdGVzIjo0OCwiLi9WaWV3
cG9ydE1ldHJpY3MiOjU5LCIuL2ludmFyaWFudCI6NzUsIi4vaXNFdmVudFN1cHBvcnRlZCI6NzZ9
XSwzNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisoZnVuY3Rpb24oKXsvKioK
KyAqIENvcHlyaWdodCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIg
dGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3Ug
bWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vu
c2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBo
dHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3Mg
cmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3
YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBh
biAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0Yg
QU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2Ug
Zm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBs
aW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBAcHJvdmlkZXNNb2R1bGUgUmVh
Y3RFdmVudFRvcExldmVsQ2FsbGJhY2sKKyAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5CisgKi8K
KworInVzZSBzdHJpY3QiOworCit2YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSByZXF1aXJlKCIu
L0V4ZWN1dGlvbkVudmlyb25tZW50Iik7Cit2YXIgUmVhY3RFdmVudEVtaXR0ZXIgPSByZXF1aXJl
KCIuL1JlYWN0RXZlbnRFbWl0dGVyIik7Cit2YXIgUmVhY3RJRCA9IHJlcXVpcmUoIi4vUmVhY3RJ
RCIpOwordmFyIFJlYWN0SW5zdGFuY2VIYW5kbGVzID0gcmVxdWlyZSgiLi9SZWFjdEluc3RhbmNl
SGFuZGxlcyIpOworCit2YXIgZ2V0RXZlbnRUYXJnZXQgPSByZXF1aXJlKCIuL2dldEV2ZW50VGFy
Z2V0Iik7CisKKy8qKgorICogQHR5cGUge2Jvb2xlYW59CisgKiBAcHJpdmF0ZQorICovCit2YXIg
X3RvcExldmVsTGlzdGVuZXJzRW5hYmxlZCA9IHRydWU7CisKKy8qKgorICogVG9wLWxldmVsIGNh
bGxiYWNrIGNyZWF0b3IgdXNlZCB0byBpbXBsZW1lbnQgZXZlbnQgaGFuZGxpbmcgdXNpbmcgZGVs
ZWdhdGlvbi4KKyAqIFRoaXMgaXMgdXNlZCB2aWEgZGVwZW5kZW5jeSBpbmplY3Rpb24gaW4gYFJl
YWN0RXZlbnRFbWl0dGVyLmVuc3VyZUxpc3RlbmluZ2AuCisgKi8KK3ZhciBSZWFjdEV2ZW50VG9w
TGV2ZWxDYWxsYmFjayA9IHsKKworICAvKioKKyAgICogU2V0cyB3aGV0aGVyIG9yIG5vdCBhbnkg
Y3JlYXRlZCBjYWxsYmFja3Mgc2hvdWxkIGJlIGVuYWJsZWQuCisgICAqCisgICAqIEBwYXJhbSB7
Ym9vbGVhbn0gZW5hYmxlZCBUcnVlIGlmIGNhbGxiYWNrcyBzaG91bGQgYmUgZW5hYmxlZC4KKyAg
ICovCisgIHNldEVuYWJsZWQ6IGZ1bmN0aW9uKGVuYWJsZWQpIHsKKyAgICBfdG9wTGV2ZWxMaXN0
ZW5lcnNFbmFibGVkID0gISFlbmFibGVkOworICB9LAorCisgIC8qKgorICAgKiBAcmV0dXJuIHti
b29sZWFufSBUcnVlIGlmIGNhbGxiYWNrcyBhcmUgZW5hYmxlZC4KKyAgICovCisgIGlzRW5hYmxl
ZDogZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIF90b3BMZXZlbExpc3RlbmVyc0VuYWJsZWQ7Cisg
IH0sCisKKyAgLyoqCisgICAqIENyZWF0ZXMgYSBjYWxsYmFjayBmb3IgdGhlIHN1cHBsaWVkIGB0
b3BMZXZlbFR5cGVgIHRoYXQgY291bGQgYmUgYWRkZWQgYXMKKyAgICogYSBsaXN0ZW5lciB0byB0
aGUgZG9jdW1lbnQuIFRoZSBjYWxsYmFjayBjb21wdXRlcyBhIGB0b3BMZXZlbFRhcmdldGAgd2hp
Y2gKKyAgICogc2hvdWxkIGJlIHRoZSByb290IG5vZGUgb2YgYSBtb3VudGVkIFJlYWN0IGNvbXBv
bmVudCB3aGVyZSB0aGUgbGlzdGVuZXIKKyAgICogaXMgYXR0YWNoZWQuCisgICAqCisgICAqIEBw
YXJhbSB7c3RyaW5nfSB0b3BMZXZlbFR5cGUgUmVjb3JkIGZyb20gYEV2ZW50Q29uc3RhbnRzYC4K
KyAgICogQHJldHVybiB7ZnVuY3Rpb259IENhbGxiYWNrIGZvciBoYW5kbGluZyB0b3AtbGV2ZWwg
ZXZlbnRzLgorICAgKi8KKyAgY3JlYXRlVG9wTGV2ZWxDYWxsYmFjazogZnVuY3Rpb24odG9wTGV2
ZWxUeXBlKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKG5hdGl2ZUV2ZW50KSB7CisgICAgICBpZiAo
IV90b3BMZXZlbExpc3RlbmVyc0VuYWJsZWQpIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQor
ICAgICAgLy8gVE9ETzogUmVtb3ZlIHdoZW4gc3ludGhldGljIGV2ZW50cyBhcmUgcmVhZHksIHRo
aXMgaXMgZm9yIElFPDkuCisgICAgICBpZiAobmF0aXZlRXZlbnQuc3JjRWxlbWVudCAmJgorICAg
ICAgICAgIG5hdGl2ZUV2ZW50LnNyY0VsZW1lbnQgIT09IG5hdGl2ZUV2ZW50LnRhcmdldCkgewor
ICAgICAgICBuYXRpdmVFdmVudC50YXJnZXQgPSBuYXRpdmVFdmVudC5zcmNFbGVtZW50OworICAg
ICAgfQorICAgICAgdmFyIHRvcExldmVsVGFyZ2V0ID0gUmVhY3RJbnN0YW5jZUhhbmRsZXMuZ2V0
Rmlyc3RSZWFjdERPTSgKKyAgICAgICAgZ2V0RXZlbnRUYXJnZXQobmF0aXZlRXZlbnQpCisgICAg
ICApIHx8IEV4ZWN1dGlvbkVudmlyb25tZW50Lmdsb2JhbDsKKyAgICAgIHZhciB0b3BMZXZlbFRh
cmdldElEID0gUmVhY3RJRC5nZXRJRCh0b3BMZXZlbFRhcmdldCkgfHwgJyc7CisgICAgICBSZWFj
dEV2ZW50RW1pdHRlci5oYW5kbGVUb3BMZXZlbCgKKyAgICAgICAgdG9wTGV2ZWxUeXBlLAorICAg
ICAgICB0b3BMZXZlbFRhcmdldCwKKyAgICAgICAgdG9wTGV2ZWxUYXJnZXRJRCwKKyAgICAgICAg
bmF0aXZlRXZlbnQKKyAgICAgICk7CisgICAgfTsKKyAgfQorCit9OworCittb2R1bGUuZXhwb3J0
cyA9IFJlYWN0RXZlbnRUb3BMZXZlbENhbGxiYWNrOworCit9KSgpCit9LHsiLi9FeGVjdXRpb25F
bnZpcm9ubWVudCI6MTksIi4vUmVhY3RFdmVudEVtaXR0ZXIiOjMzLCIuL1JlYWN0SUQiOjM1LCIu
L1JlYWN0SW5zdGFuY2VIYW5kbGVzIjozNywiLi9nZXRFdmVudFRhcmdldCI6NzB9XSwzNTpbZnVu
Y3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzIEZh
Y2Vib29rLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBW
ZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxl
IGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFp
biBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcv
bGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJs
ZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1
bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICog
V0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHBy
ZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5n
dWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUg
TGljZW5zZS4KKyAqCisgKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RJRAorICogQHR5cGVjaGVja3Mg
c3RhdGljLW9ubHkKKyAqLworCisidXNlIHN0cmljdCI7CisKK3ZhciBpbnZhcmlhbnQgPSByZXF1
aXJlKCIuL2ludmFyaWFudCIpOwordmFyIFJlYWN0TW91bnQgPSByZXF1aXJlKCIuL1JlYWN0TW91
bnQiKTsKK3ZhciBBVFRSX05BTUUgPSAnZGF0YS1yZWFjdGlkJzsKK3ZhciBub2RlQ2FjaGUgPSB7
fTsKKworLyoqCisgKiBBY2Nlc3Npbmcgbm9kZVtBVFRSX05BTUVdIG9yIGNhbGxpbmcgZ2V0QXR0
cmlidXRlKEFUVFJfTkFNRSkgb24gYSBmb3JtCisgKiBlbGVtZW50IGNhbiByZXR1cm4gaXRzIGNv
bnRyb2wgd2hvc2UgbmFtZSBvciBJRCBlcXVhbHMgQVRUUl9OQU1FLiBBbGwKKyAqIERPTSBub2Rl
cyBzdXBwb3J0IGBnZXRBdHRyaWJ1dGVOb2RlYCBidXQgdGhpcyBjYW4gYWxzbyBnZXQgY2FsbGVk
IG9uCisgKiBvdGhlciBvYmplY3RzIHNvIGp1c3QgcmV0dXJuICcnIGlmIHdlJ3JlIGdpdmVuIHNv
bWV0aGluZyBvdGhlciB0aGFuIGEKKyAqIERPTSBub2RlIChzdWNoIGFzIHdpbmRvdykuCisgKgor
ICogQHBhcmFtIHs/RE9NRWxlbWVudHxET01XaW5kb3d8RE9NRG9jdW1lbnR8RE9NVGV4dE5vZGV9
IG5vZGUgRE9NIG5vZGUuCisgKiBAcmV0dXJuIHtzdHJpbmd9IElEIG9mIHRoZSBzdXBwbGllZCBg
ZG9tTm9kZWAuCisgKi8KK2Z1bmN0aW9uIGdldElEKG5vZGUpIHsKKyAgdmFyIGlkID0gaW50ZXJu
YWxHZXRJRChub2RlKTsKKyAgaWYgKGlkKSB7CisgICAgaWYgKG5vZGVDYWNoZS5oYXNPd25Qcm9w
ZXJ0eShpZCkpIHsKKyAgICAgIHZhciBjYWNoZWQgPSBub2RlQ2FjaGVbaWRdOworICAgICAgaWYg
KGNhY2hlZCAhPT0gbm9kZSkgeworICAgICAgICBpbnZhcmlhbnQoCisgICAgICAgICAgIWlzVmFs
aWQoY2FjaGVkLCBpZCksCisgICAgICAgICAgJ1JlYWN0SUQ6IFR3byB2YWxpZCBidXQgdW5lcXVh
bCBub2RlcyB3aXRoIHRoZSBzYW1lIGAlc2A6ICVzJywKKyAgICAgICAgICBBVFRSX05BTUUsIGlk
CisgICAgICAgICk7CisKKyAgICAgICAgbm9kZUNhY2hlW2lkXSA9IG5vZGU7CisgICAgICB9Cisg
ICAgfSBlbHNlIHsKKyAgICAgIG5vZGVDYWNoZVtpZF0gPSBub2RlOworICAgIH0KKyAgfQorCisg
IHJldHVybiBpZDsKK30KKworZnVuY3Rpb24gaW50ZXJuYWxHZXRJRChub2RlKSB7CisgIGlmIChu
b2RlICYmIG5vZGUuZ2V0QXR0cmlidXRlTm9kZSkgeworICAgIHZhciBhdHRyaWJ1dGVOb2RlID0g
bm9kZS5nZXRBdHRyaWJ1dGVOb2RlKEFUVFJfTkFNRSk7CisgICAgaWYgKGF0dHJpYnV0ZU5vZGUp
IHsKKyAgICAgIHJldHVybiBhdHRyaWJ1dGVOb2RlLnZhbHVlIHx8ICcnOworICAgIH0KKyAgfQor
ICByZXR1cm4gJyc7Cit9CisKKy8qKgorICogU2V0cyB0aGUgUmVhY3Qtc3BlY2lmaWMgSUQgb2Yg
dGhlIGdpdmVuIG5vZGUuCisgKgorICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlIFRoZSBET00g
bm9kZSB3aG9zZSBJRCB3aWxsIGJlIHNldC4KKyAqIEBwYXJhbSB7c3RyaW5nfSBpZCBUaGUgdmFs
dWUgb2YgdGhlIElEIGF0dHJpYnV0ZS4KKyAqLworZnVuY3Rpb24gc2V0SUQobm9kZSwgaWQpIHsK
KyAgdmFyIG9sZElEID0gaW50ZXJuYWxHZXRJRChub2RlKTsKKyAgaWYgKG9sZElEICE9PSBpZCkg
eworICAgIGRlbGV0ZSBub2RlQ2FjaGVbb2xkSURdOworICB9CisgIG5vZGUuc2V0QXR0cmlidXRl
KEFUVFJfTkFNRSwgaWQpOworICBub2RlQ2FjaGVbaWRdID0gbm9kZTsKK30KKworLyoqCisgKiBG
aW5kcyB0aGUgbm9kZSB3aXRoIHRoZSBzdXBwbGllZCBSZWFjdC1nZW5lcmF0ZWQgRE9NIElELgor
ICoKKyAqIEBwYXJhbSB7c3RyaW5nfSBpZCBBIFJlYWN0LWdlbmVyYXRlZCBET00gSUQuCisgKiBA
cmV0dXJuIHtET01FbGVtZW50fSBET00gbm9kZSB3aXRoIHRoZSBzdXBwbGVkIGBpZGAuCisgKiBA
aW50ZXJuYWwKKyAqLworZnVuY3Rpb24gZ2V0Tm9kZShpZCkgeworICBpZiAoIW5vZGVDYWNoZS5o
YXNPd25Qcm9wZXJ0eShpZCkgfHwgIWlzVmFsaWQobm9kZUNhY2hlW2lkXSwgaWQpKSB7CisgICAg
bm9kZUNhY2hlW2lkXSA9IFJlYWN0TW91bnQuZmluZFJlYWN0Tm9kZUJ5SUQoaWQpOworICB9Cisg
IHJldHVybiBub2RlQ2FjaGVbaWRdOworfQorCisvKioKKyAqIEEgbm9kZSBpcyAidmFsaWQiIGlm
IGl0IGlzIGNvbnRhaW5lZCBieSBhIGN1cnJlbnRseSBtb3VudGVkIGNvbnRhaW5lci4KKyAqCisg
KiBUaGlzIG1lYW5zIHRoYXQgdGhlIG5vZGUgZG9lcyBub3QgaGF2ZSB0byBiZSBjb250YWluZWQg
YnkgYSBkb2N1bWVudCBpbgorICogb3JkZXIgdG8gYmUgY29uc2lkZXJlZCB2YWxpZC4KKyAqCisg
KiBAcGFyYW0gez9ET01FbGVtZW50fSBub2RlIFRoZSBjYW5kaWRhdGUgRE9NIG5vZGUuCisgKiBA
cGFyYW0ge3N0cmluZ30gaWQgVGhlIGV4cGVjdGVkIElEIG9mIHRoZSBub2RlLgorICogQHJldHVy
biB7Ym9vbGVhbn0gV2hldGhlciB0aGUgbm9kZSBpcyBjb250YWluZWQgYnkgYSBtb3VudGVkIGNv
bnRhaW5lci4KKyAqLworZnVuY3Rpb24gaXNWYWxpZChub2RlLCBpZCkgeworICBpZiAobm9kZSkg
eworICAgIGludmFyaWFudCgKKyAgICAgIGludGVybmFsR2V0SUQobm9kZSkgPT09IGlkLAorICAg
ICAgJ1JlYWN0SUQ6IFVuZXhwZWN0ZWQgbW9kaWZpY2F0aW9uIG9mIGAlc2AnLAorICAgICAgQVRU
Ul9OQU1FCisgICAgKTsKKworICAgIHZhciBjb250YWluZXIgPSBSZWFjdE1vdW50LmZpbmRSZWFj
dENvbnRhaW5lckZvcklEKGlkKTsKKyAgICBpZiAoY29udGFpbmVyICYmIGNvbnRhaW5zKGNvbnRh
aW5lciwgbm9kZSkpIHsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgfQorCisgIHJldHVy
biBmYWxzZTsKK30KKworZnVuY3Rpb24gY29udGFpbnMoYW5jZXN0b3IsIGRlc2NlbmRhbnQpIHsK
KyAgaWYgKGFuY2VzdG9yLmNvbnRhaW5zKSB7CisgICAgLy8gU3VwcG9ydGVkIG5hdGl2ZWx5IGlu
IHZpcnR1YWxseSBhbGwgYnJvd3NlcnMsIGJ1dCBub3QgaW4ganNkb20uCisgICAgcmV0dXJuIGFu
Y2VzdG9yLmNvbnRhaW5zKGRlc2NlbmRhbnQpOworICB9CisKKyAgaWYgKGRlc2NlbmRhbnQgPT09
IGFuY2VzdG9yKSB7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBpZiAoZGVzY2VuZGFudC5u
b2RlVHlwZSA9PT0gMykgeworICAgIC8vIElmIGRlc2NlbmRhbnQgaXMgYSB0ZXh0IG5vZGUsIHN0
YXJ0IGZyb20gZGVzY2VuZGFudC5wYXJlbnROb2RlCisgICAgLy8gaW5zdGVhZCwgc28gdGhhdCB3
ZSBjYW4gYXNzdW1lIGFsbCBhbmNlc3RvcnMgd29ydGggY29uc2lkZXJpbmcgYXJlCisgICAgLy8g
ZWxlbWVudCBub2RlcyB3aXRoIG5vZGVUeXBlID09PSAxLgorICAgIGRlc2NlbmRhbnQgPSBkZXNj
ZW5kYW50LnBhcmVudE5vZGU7CisgIH0KKworICB3aGlsZSAoZGVzY2VuZGFudCAmJiBkZXNjZW5k
YW50Lm5vZGVUeXBlID09PSAxKSB7CisgICAgaWYgKGRlc2NlbmRhbnQgPT09IGFuY2VzdG9yKSB7
CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZGVzY2VuZGFudCA9IGRlc2NlbmRhbnQu
cGFyZW50Tm9kZTsKKyAgfQorCisgIHJldHVybiBmYWxzZTsKK30KKworLyoqCisgKiBDYXVzZXMg
dGhlIGNhY2hlIHRvIGZvcmdldCBhYm91dCBvbmUgUmVhY3Qtc3BlY2lmaWMgSUQuCisgKgorICog
QHBhcmFtIHtzdHJpbmd9IGlkIFRoZSBJRCB0byBmb3JnZXQuCisgKi8KK2Z1bmN0aW9uIHB1cmdl
SUQoaWQpIHsKKyAgZGVsZXRlIG5vZGVDYWNoZVtpZF07Cit9CisKK2V4cG9ydHMuQVRUUl9OQU1F
ID0gQVRUUl9OQU1FOworZXhwb3J0cy5nZXRJRCA9IGdldElEOworZXhwb3J0cy5yYXdHZXRJRCA9
IGludGVybmFsR2V0SUQ7CitleHBvcnRzLnNldElEID0gc2V0SUQ7CitleHBvcnRzLmdldE5vZGUg
PSBnZXROb2RlOworZXhwb3J0cy5wdXJnZUlEID0gcHVyZ2VJRDsKKworfSx7Ii4vUmVhY3RNb3Vu
dCI6MzgsIi4vaW52YXJpYW50Ijo3NX1dLDM2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBv
cnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNl
bnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2Ui
KTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0
aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBh
dAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoK
KyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3Jp
dGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3Ry
aWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09O
RElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0
aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9u
cyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRl
c01vZHVsZSBSZWFjdElucHV0U2VsZWN0aW9uCisgKi8KKworInVzZSBzdHJpY3QiOworCisvLyBJ
dCBpcyBub3Qgc2FmZSB0byByZWFkIHRoZSBkb2N1bWVudC5hY3RpdmVFbGVtZW50IHByb3BlcnR5
IGluIElFIGlmIHRoZXJlJ3MKKy8vIG5vdGhpbmcgZm9jdXNlZC4KK2Z1bmN0aW9uIGdldEFjdGl2
ZUVsZW1lbnQoKSB7CisgIHRyeSB7CisgICAgcmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7
CisgIH0gY2F0Y2ggKGUpIHsKKyAgfQorfQorCitmdW5jdGlvbiBpc0luRG9jdW1lbnQobm9kZSkg
eworICByZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zKG5vZGUpOworfQor
CisvKioKKyAqIEBSZWFjdElucHV0U2VsZWN0aW9uOiBSZWFjdCBpbnB1dCBzZWxlY3Rpb24gbW9k
dWxlLiBCYXNlZCBvbiBTZWxlY3Rpb24uanMsCisgKiBidXQgbW9kaWZpZWQgdG8gYmUgc3VpdGFi
bGUgZm9yIHJlYWN0IGFuZCBoYXMgYSBjb3VwbGUgb2YgYnVnIGZpeGVzIChkb2Vzbid0CisgKiBh
c3N1bWUgYnV0dG9ucyBoYXZlIHJhbmdlIHNlbGVjdGlvbnMgYWxsb3dlZCkuCisgKiBJbnB1dCBz
ZWxlY3Rpb24gbW9kdWxlIGZvciBSZWFjdC4KKyAqLwordmFyIFJlYWN0SW5wdXRTZWxlY3Rpb24g
PSB7CisKKyAgaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzOiBmdW5jdGlvbihlbGVtKSB7CisgICAg
cmV0dXJuIGVsZW0gJiYgKAorICAgICAgKGVsZW0ubm9kZU5hbWUgPT09ICdJTlBVVCcgJiYgZWxl
bS50eXBlID09PSAndGV4dCcpIHx8CisgICAgICBlbGVtLm5vZGVOYW1lID09PSAnVEVYVEFSRUEn
IHx8CisgICAgICBlbGVtLmNvbnRlbnRFZGl0YWJsZSA9PT0gJ3RydWUnCisgICAgKTsKKyAgfSwK
KworICBnZXRTZWxlY3Rpb25JbmZvcm1hdGlvbjogZnVuY3Rpb24oKSB7CisgICAgdmFyIGZvY3Vz
ZWRFbGVtID0gZ2V0QWN0aXZlRWxlbWVudCgpOworICAgIHJldHVybiB7CisgICAgICBmb2N1c2Vk
RWxlbTogZm9jdXNlZEVsZW0sCisgICAgICBzZWxlY3Rpb25SYW5nZToKKyAgICAgICAgICBSZWFj
dElucHV0U2VsZWN0aW9uLmhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhmb2N1c2VkRWxlbSkgPwor
ICAgICAgICAgIFJlYWN0SW5wdXRTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uKGZvY3VzZWRFbGVtKSA6
CisgICAgICAgICAgbnVsbAorICAgIH07CisgIH0sCisKKyAgLyoqCisgICAqIEByZXN0b3JlU2Vs
ZWN0aW9uOiBJZiBhbnkgc2VsZWN0aW9uIGluZm9ybWF0aW9uIHdhcyBwb3RlbnRpYWxseSBsb3N0
LAorICAgKiByZXN0b3JlIGl0LiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHBlcmZvcm1pbmcgb3BlcmF0
aW9ucyB0aGF0IGNvdWxkIHJlbW92ZSBkb20KKyAgICogbm9kZXMgYW5kIHBsYWNlIHRoZW0gYmFj
ayBpbiwgcmVzdWx0aW5nIGluIGZvY3VzIGJlaW5nIGxvc3QuCisgICAqLworICByZXN0b3JlU2Vs
ZWN0aW9uOiBmdW5jdGlvbihwcmlvclNlbGVjdGlvbkluZm9ybWF0aW9uKSB7CisgICAgdmFyIGN1
ckZvY3VzZWRFbGVtID0gZ2V0QWN0aXZlRWxlbWVudCgpOworICAgIHZhciBwcmlvckZvY3VzZWRF
bGVtID0gcHJpb3JTZWxlY3Rpb25JbmZvcm1hdGlvbi5mb2N1c2VkRWxlbTsKKyAgICB2YXIgcHJp
b3JTZWxlY3Rpb25SYW5nZSA9IHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24uc2VsZWN0aW9uUmFu
Z2U7CisgICAgaWYgKGN1ckZvY3VzZWRFbGVtICE9PSBwcmlvckZvY3VzZWRFbGVtICYmCisgICAg
ICAgIGlzSW5Eb2N1bWVudChwcmlvckZvY3VzZWRFbGVtKSkgeworICAgICAgaWYgKFJlYWN0SW5w
dXRTZWxlY3Rpb24uaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKHByaW9yRm9jdXNlZEVsZW0pKSB7
CisgICAgICAgIFJlYWN0SW5wdXRTZWxlY3Rpb24uc2V0U2VsZWN0aW9uKAorICAgICAgICAgIHBy
aW9yRm9jdXNlZEVsZW0sCisgICAgICAgICAgcHJpb3JTZWxlY3Rpb25SYW5nZQorICAgICAgICAp
OworICAgICAgfQorICAgICAgcHJpb3JGb2N1c2VkRWxlbS5mb2N1cygpOworICAgIH0KKyAgfSwK
KworICAvKioKKyAgICogQGdldFNlbGVjdGlvbjogR2V0cyB0aGUgc2VsZWN0aW9uIGJvdW5kcyBv
ZiBhIHRleHRhcmVhIG9yIGlucHV0LgorICAgKiAtQGlucHV0OiBMb29rIHVwIHNlbGVjdGlvbiBi
b3VuZHMgb2YgdGhpcyBpbnB1dCBvciB0ZXh0YXJlYQorICAgKiAtQHJldHVybiB7c3RhcnQ6IHNl
bGVjdGlvblN0YXJ0LCBlbmQ6IHNlbGVjdGlvbkVuZH0KKyAgICovCisgIGdldFNlbGVjdGlvbjog
ZnVuY3Rpb24oaW5wdXQpIHsKKyAgICB2YXIgcmFuZ2U7CisgICAgaWYgKGlucHV0LmNvbnRlbnRF
ZGl0YWJsZSA9PT0gJ3RydWUnICYmIHdpbmRvdy5nZXRTZWxlY3Rpb24pIHsKKyAgICAgIHJhbmdl
ID0gd2luZG93LmdldFNlbGVjdGlvbigpLmdldFJhbmdlQXQoMCk7CisgICAgICB2YXIgY29tbW9u
QW5jZXN0b3IgPSByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcjsKKyAgICAgIGlmIChjb21t
b25BbmNlc3RvciAmJiBjb21tb25BbmNlc3Rvci5ub2RlVHlwZSA9PT0gMykgeworICAgICAgICBj
b21tb25BbmNlc3RvciA9IGNvbW1vbkFuY2VzdG9yLnBhcmVudE5vZGU7CisgICAgICB9CisgICAg
ICBpZiAoY29tbW9uQW5jZXN0b3IgIT09IGlucHV0KSB7CisgICAgICAgIHJldHVybiB7c3RhcnQ6
IDAsIGVuZDogMH07CisgICAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4ge3N0YXJ0OiByYW5n
ZS5zdGFydE9mZnNldCwgZW5kOiByYW5nZS5lbmRPZmZzZXR9OworICAgICAgfQorICAgIH0KKwor
ICAgIGlmICghZG9jdW1lbnQuc2VsZWN0aW9uKSB7CisgICAgICAvLyBNb3ppbGxhLCBTYWZhcmks
IGV0Yy4KKyAgICAgIHJldHVybiB7c3RhcnQ6IGlucHV0LnNlbGVjdGlvblN0YXJ0LCBlbmQ6IGlu
cHV0LnNlbGVjdGlvbkVuZH07CisgICAgfQorCisgICAgcmFuZ2UgPSBkb2N1bWVudC5zZWxlY3Rp
b24uY3JlYXRlUmFuZ2UoKTsKKyAgICBpZiAocmFuZ2UucGFyZW50RWxlbWVudCgpICE9PSBpbnB1
dCkgeworICAgICAgLy8gVGhlcmUgY2FuIG9ubHkgYmUgb25lIHNlbGVjdGlvbiBwZXIgZG9jdW1l
bnQgaW4gSUUsIHNvIGlmIHRoZQorICAgICAgLy8gY29udGFpbmluZyBlbGVtZW50IG9mIHRoZSBk
b2N1bWVudCdzIHNlbGVjdGlvbiBpc24ndCBvdXIgdGV4dCBmaWVsZCwKKyAgICAgIC8vIG91ciB0
ZXh0IGZpZWxkIG11c3QgaGF2ZSBubyBzZWxlY3Rpb24uCisgICAgICByZXR1cm4ge3N0YXJ0OiAw
LCBlbmQ6IDB9OworICAgIH0KKworICAgIHZhciBsZW5ndGggPSBpbnB1dC52YWx1ZS5sZW5ndGg7
CisKKyAgICBpZiAoaW5wdXQubm9kZU5hbWUgPT09ICdJTlBVVCcpIHsKKyAgICAgIHJldHVybiB7
CisgICAgICAgIHN0YXJ0OiAtcmFuZ2UubW92ZVN0YXJ0KCdjaGFyYWN0ZXInLCAtbGVuZ3RoKSwK
KyAgICAgICAgZW5kOiAtcmFuZ2UubW92ZUVuZCgnY2hhcmFjdGVyJywgLWxlbmd0aCkKKyAgICAg
IH07CisgICAgfSBlbHNlIHsKKyAgICAgIHZhciByYW5nZTIgPSByYW5nZS5kdXBsaWNhdGUoKTsK
KyAgICAgIHJhbmdlMi5tb3ZlVG9FbGVtZW50VGV4dChpbnB1dCk7CisgICAgICByYW5nZTIuc2V0
RW5kUG9pbnQoJ1N0YXJ0VG9FbmQnLCByYW5nZSk7CisgICAgICB2YXIgZW5kID0gbGVuZ3RoIC0g
cmFuZ2UyLnRleHQubGVuZ3RoOworICAgICAgcmFuZ2UyLnNldEVuZFBvaW50KCdTdGFydFRvU3Rh
cnQnLCByYW5nZSk7CisgICAgICByZXR1cm4geworICAgICAgICBzdGFydDogbGVuZ3RoIC0gcmFu
Z2UyLnRleHQubGVuZ3RoLAorICAgICAgICBlbmQ6ICAgZW5kCisgICAgICB9OworICAgIH0KKyAg
fSwKKworICAvKioKKyAgICogQHNldFNlbGVjdGlvbjogU2V0cyB0aGUgc2VsZWN0aW9uIGJvdW5k
cyBvZiBhIHRleHRhcmVhIG9yIGlucHV0IGFuZCBmb2N1c2VzCisgICAqIHRoZSBpbnB1dC4KKyAg
ICogLUBpbnB1dCAgICAgU2V0IHNlbGVjdGlvbiBib3VuZHMgb2YgdGhpcyBpbnB1dCBvciB0ZXh0
YXJlYQorICAgKiAtQHJhbmdlT2JqIE9iamVjdCBvZiBzYW1lIGZvcm0gdGhhdCBpcyByZXR1cm5l
ZCBmcm9tIGdldCoKKyAgICovCisgIHNldFNlbGVjdGlvbjogZnVuY3Rpb24oaW5wdXQsIHJhbmdl
T2JqKSB7CisgICAgdmFyIHJhbmdlOworICAgIHZhciBzdGFydCA9IHJhbmdlT2JqLnN0YXJ0Owor
ICAgIHZhciBlbmQgPSByYW5nZU9iai5lbmQ7CisgICAgaWYgKHR5cGVvZiBlbmQgPT09ICd1bmRl
ZmluZWQnKSB7CisgICAgICBlbmQgPSBzdGFydDsKKyAgICB9CisgICAgaWYgKGRvY3VtZW50LnNl
bGVjdGlvbikgeworICAgICAgLy8gSUUgaXMgaW5jb25zaXN0ZW50IGFib3V0IGNoYXJhY3RlciBv
ZmZzZXRzIHdoZW4gaXQgY29tZXMgdG8gY2FycmlhZ2UKKyAgICAgIC8vIHJldHVybnMsIHNvIHdl
IG5lZWQgdG8gbWFudWFsbHkgdGFrZSB0aGVtIGludG8gYWNjb3VudAorICAgICAgaWYgKGlucHV0
LnRhZ05hbWUgPT09ICdURVhUQVJFQScpIHsKKyAgICAgICAgdmFyIGNyX2JlZm9yZSA9CisgICAg
ICAgICAgKGlucHV0LnZhbHVlLnNsaWNlKDAsIHN0YXJ0KS5tYXRjaCgvXHIvZykgfHwgW10pLmxl
bmd0aDsKKyAgICAgICAgdmFyIGNyX2luc2lkZSA9CisgICAgICAgICAgKGlucHV0LnZhbHVlLnNs
aWNlKHN0YXJ0LCBlbmQpLm1hdGNoKC9cci9nKSB8fCBbXSkubGVuZ3RoOworICAgICAgICBzdGFy
dCAtPSBjcl9iZWZvcmU7CisgICAgICAgIGVuZCAtPSBjcl9iZWZvcmUgKyBjcl9pbnNpZGU7Cisg
ICAgICB9CisgICAgICByYW5nZSA9IGlucHV0LmNyZWF0ZVRleHRSYW5nZSgpOworICAgICAgcmFu
Z2UuY29sbGFwc2UodHJ1ZSk7CisgICAgICByYW5nZS5tb3ZlU3RhcnQoJ2NoYXJhY3RlcicsIHN0
YXJ0KTsKKyAgICAgIHJhbmdlLm1vdmVFbmQoJ2NoYXJhY3RlcicsIGVuZCAtIHN0YXJ0KTsKKyAg
ICAgIHJhbmdlLnNlbGVjdCgpOworICAgIH0gZWxzZSB7CisgICAgICBpZiAoaW5wdXQuY29udGVu
dEVkaXRhYmxlID09PSAndHJ1ZScpIHsKKyAgICAgICAgaWYgKGlucHV0LmNoaWxkTm9kZXMubGVu
Z3RoID09PSAxKSB7CisgICAgICAgICAgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwor
ICAgICAgICAgIHJhbmdlLnNldFN0YXJ0KGlucHV0LmNoaWxkTm9kZXNbMF0sIHN0YXJ0KTsKKyAg
ICAgICAgICByYW5nZS5zZXRFbmQoaW5wdXQuY2hpbGROb2Rlc1swXSwgZW5kKTsKKyAgICAgICAg
ICB2YXIgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpOworICAgICAgICAgIHNlbC5yZW1vdmVB
bGxSYW5nZXMoKTsKKyAgICAgICAgICBzZWwuYWRkUmFuZ2UocmFuZ2UpOworICAgICAgICB9Cisg
ICAgICB9IGVsc2UgeworICAgICAgICBpbnB1dC5zZWxlY3Rpb25TdGFydCA9IHN0YXJ0OworICAg
ICAgICBpbnB1dC5zZWxlY3Rpb25FbmQgPSBNYXRoLm1pbihlbmQsIGlucHV0LnZhbHVlLmxlbmd0
aCk7CisgICAgICAgIGlucHV0LmZvY3VzKCk7CisgICAgICB9CisgICAgfQorICB9CisKK307CisK
K21vZHVsZS5leHBvcnRzID0gUmVhY3RJbnB1dFNlbGVjdGlvbjsKKworfSx7fV0sMzc6W2Z1bmN0
aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMyBGYWNl
Ym9vaywgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVy
c2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBl
eGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4g
YSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xp
Y2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUg
bGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5k
ZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJ
VEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVz
cyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3Vh
Z2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExp
Y2Vuc2UuCisgKgorICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0SW5zdGFuY2VIYW5kbGVzCisgKiBA
dHlwZWNoZWNrcyBzdGF0aWMtb25seQorICovCisKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIFJlYWN0
SUQgPSByZXF1aXJlKCIuL1JlYWN0SUQiKTsKKwordmFyIGludmFyaWFudCA9IHJlcXVpcmUoIi4v
aW52YXJpYW50Iik7CisKK3ZhciBTRVBBUkFUT1IgPSAnLic7Cit2YXIgU0VQQVJBVE9SX0xFTkdU
SCA9IFNFUEFSQVRPUi5sZW5ndGg7CisKKy8qKgorICogTWF4aW11bSBkZXB0aCBvZiB0cmF2ZXJz
YWxzIGJlZm9yZSB3ZSBjb25zaWRlciB0aGUgcG9zc2liaWxpdHkgb2YgYSBiYWQgSUQuCisgKi8K
K3ZhciBNQVhfVFJFRV9ERVBUSCA9IDEwMDsKKworLyoqCisgKiBTaXplIG9mIHRoZSByZWFjdFJv
b3QgSUQgc3BhY2UuIFdlIGdlbmVyYXRlIHJhbmRvbSBudW1iZXJzIGZvciBSZWFjdCByb290Cisg
KiBJRHMgYW5kIGlmIHRoZXJlJ3MgYSBjb2xsaXNpb24gdGhlIGV2ZW50cyBhbmQgRE9NIHVwZGF0
ZSBzeXN0ZW0gd2lsbAorICogZ2V0IGNvbmZ1c2VkLiBJZiB3ZSBhc3N1bWUgMTAwIFJlYWN0IGNv
bXBvbmVudHMgcGVyIHBhZ2UsIGFuZCBhIHVzZXIKKyAqIGxvYWRzIDEgcGFnZSBwZXIgbWludXRl
IDI0LzcgZm9yIDUwIHllYXJzLCB3aXRoIGEgbW91bnQgcG9pbnQgc3BhY2Ugb2YKKyAqIDksOTk5
LDk5OSB0aGUgbGlrZWxpaG9vZCBvZiBuZXZlciBoYXZpbmcgYSBjb2xsaXNpb24gaXMgOTkuOTk3
JS4KKyAqLwordmFyIEdMT0JBTF9NT1VOVF9QT0lOVF9NQVggPSA5OTk5OTk5OworCisvKioKKyAq
IENyZWF0ZXMgYSBET00gSUQgcHJlZml4IHRvIHVzZSB3aGVuIG1vdW50aW5nIFJlYWN0IGNvbXBv
bmVudHMuCisgKgorICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IEEgdW5pcXVlIGludGVnZXIKKyAq
IEByZXR1cm4ge3N0cmluZ30gUmVhY3Qgcm9vdCBJRC4KKyAqIEBpbnRlcm5hbAorICovCitmdW5j
dGlvbiBnZXRSZWFjdFJvb3RJRFN0cmluZyhpbmRleCkgeworICByZXR1cm4gU0VQQVJBVE9SICsg
J3JbJyArIGluZGV4LnRvU3RyaW5nKDM2KSArICddJzsKK30KKworLyoqCisgKiBDaGVja3MgaWYg
YSBjaGFyYWN0ZXIgaW4gdGhlIHN1cHBsaWVkIElEIGlzIGEgc2VwYXJhdG9yIG9yIHRoZSBlbmQu
CisgKgorICogQHBhcmFtIHtzdHJpbmd9IGlkIEEgUmVhY3QgRE9NIElELgorICogQHBhcmFtIHtu
dW1iZXJ9IGluZGV4IEluZGV4IG9mIHRoZSBjaGFyYWN0ZXIgdG8gY2hlY2suCisgKiBAcmV0dXJu
IHtib29sZWFufSBUcnVlIGlmIHRoZSBjaGFyYWN0ZXIgaXMgYSBzZXBhcmF0b3Igb3IgZW5kIG9m
IHRoZSBJRC4KKyAqIEBwcml2YXRlCisgKi8KK2Z1bmN0aW9uIGlzQm91bmRhcnkoaWQsIGluZGV4
KSB7CisgIHJldHVybiBpZC5jaGFyQXQoaW5kZXgpID09PSBTRVBBUkFUT1IgfHwgaW5kZXggPT09
IGlkLmxlbmd0aDsKK30KKworLyoqCisgKiBDaGVja3MgaWYgdGhlIHN1cHBsaWVkIHN0cmluZyBp
cyBhIHZhbGlkIFJlYWN0IERPTSBJRC4KKyAqCisgKiBAcGFyYW0ge3N0cmluZ30gaWQgQSBSZWFj
dCBET00gSUQsIG1heWJlLgorICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3RyaW5n
IGlzIGEgdmFsaWQgUmVhY3QgRE9NIElELgorICogQHByaXZhdGUKKyAqLworZnVuY3Rpb24gaXNW
YWxpZElEKGlkKSB7CisgIHJldHVybiBpZCA9PT0gJycgfHwgKAorICAgIGlkLmNoYXJBdCgwKSA9
PT0gU0VQQVJBVE9SICYmIGlkLmNoYXJBdChpZC5sZW5ndGggLSAxKSAhPT0gU0VQQVJBVE9SCisg
ICk7Cit9CisKKy8qKgorICogQ2hlY2tzIGlmIHRoZSBmaXJzdCBJRCBpcyBhbiBhbmNlc3RvciBv
ZiBvciBlcXVhbCB0byB0aGUgc2Vjb25kIElELgorICoKKyAqIEBwYXJhbSB7c3RyaW5nfSBhbmNl
c3RvcklECisgKiBAcGFyYW0ge3N0cmluZ30gZGVzY2VuZGFudElECisgKiBAcmV0dXJuIHtib29s
ZWFufSBUcnVlIGlmIGBhbmNlc3RvcklEYCBpcyBhbiBhbmNlc3RvciBvZiBgZGVzY2VuZGFudElE
YC4KKyAqIEBpbnRlcm5hbAorICovCitmdW5jdGlvbiBpc0FuY2VzdG9ySURPZihhbmNlc3RvcklE
LCBkZXNjZW5kYW50SUQpIHsKKyAgcmV0dXJuICgKKyAgICBkZXNjZW5kYW50SUQuaW5kZXhPZihh
bmNlc3RvcklEKSA9PT0gMCAmJgorICAgIGlzQm91bmRhcnkoZGVzY2VuZGFudElELCBhbmNlc3Rv
cklELmxlbmd0aCkKKyAgKTsKK30KKworLyoqCisgKiBHZXRzIHRoZSBwYXJlbnQgSUQgb2YgdGhl
IHN1cHBsaWVkIFJlYWN0IERPTSBJRCwgYGlkYC4KKyAqCisgKiBAcGFyYW0ge3N0cmluZ30gaWQg
SUQgb2YgYSBjb21wb25lbnQuCisgKiBAcmV0dXJuIHtzdHJpbmd9IElEIG9mIHRoZSBwYXJlbnQs
IG9yIGFuIGVtcHR5IHN0cmluZy4KKyAqIEBwcml2YXRlCisgKi8KK2Z1bmN0aW9uIGdldFBhcmVu
dElEKGlkKSB7CisgIHJldHVybiBpZCA/IGlkLnN1YnN0cigwLCBpZC5sYXN0SW5kZXhPZihTRVBB
UkFUT1IpKSA6ICcnOworfQorCisvKioKKyAqIEdldHMgdGhlIG5leHQgRE9NIElEIG9uIHRoZSB0
cmVlIHBhdGggZnJvbSB0aGUgc3VwcGxpZWQgYGFuY2VzdG9ySURgIHRvIHRoZQorICogc3VwcGxp
ZWQgYGRlc3RpbmF0aW9uSURgLiBJZiB0aGV5IGFyZSBlcXVhbCwgdGhlIElEIGlzIHJldHVybmVk
LgorICoKKyAqIEBwYXJhbSB7c3RyaW5nfSBhbmNlc3RvcklEIElEIG9mIGFuIGFuY2VzdG9yIG5v
ZGUgb2YgYGRlc3RpbmF0aW9uSURgLgorICogQHBhcmFtIHtzdHJpbmd9IGRlc3RpbmF0aW9uSUQg
SUQgb2YgdGhlIGRlc3RpbmF0aW9uIG5vZGUuCisgKiBAcmV0dXJuIHtzdHJpbmd9IE5leHQgSUQg
b24gdGhlIHBhdGggZnJvbSBgYW5jZXN0b3JJRGAgdG8gYGRlc3RpbmF0aW9uSURgLgorICogQHBy
aXZhdGUKKyAqLworZnVuY3Rpb24gZ2V0TmV4dERlc2NlbmRhbnRJRChhbmNlc3RvcklELCBkZXN0
aW5hdGlvbklEKSB7CisgIGludmFyaWFudCgKKyAgICBpc1ZhbGlkSUQoYW5jZXN0b3JJRCkgJiYg
aXNWYWxpZElEKGRlc3RpbmF0aW9uSUQpLAorICAgICdnZXROZXh0RGVzY2VuZGFudElEKCVzLCAl
cyk6IFJlY2VpdmVkIGFuIGludmFsaWQgUmVhY3QgRE9NIElELicsCisgICAgYW5jZXN0b3JJRCwK
KyAgICBkZXN0aW5hdGlvbklECisgICk7CisgIGludmFyaWFudCgKKyAgICBpc0FuY2VzdG9ySURP
ZihhbmNlc3RvcklELCBkZXN0aW5hdGlvbklEKSwKKyAgICAnZ2V0TmV4dERlc2NlbmRhbnRJRCgu
Li4pOiBSZWFjdCBoYXMgbWFkZSBhbiBpbnZhbGlkIGFzc3VtcHRpb24gYWJvdXQgJyArCisgICAg
J3RoZSBET00gaGllcmFyY2h5LiBFeHBlY3RlZCBgJXNgIHRvIGJlIGFuIGFuY2VzdG9yIG9mIGAl
c2AuJywKKyAgICBhbmNlc3RvcklELAorICAgIGRlc3RpbmF0aW9uSUQKKyAgKTsKKyAgaWYgKGFu
Y2VzdG9ySUQgPT09IGRlc3RpbmF0aW9uSUQpIHsKKyAgICByZXR1cm4gYW5jZXN0b3JJRDsKKyAg
fQorICAvLyBTa2lwIG92ZXIgdGhlIGFuY2VzdG9yIGFuZCB0aGUgaW1tZWRpYXRlIHNlcGFyYXRv
ci4gVHJhdmVyc2UgdW50aWwgd2UgaGl0CisgIC8vIGFub3RoZXIgc2VwYXJhdG9yIG9yIHdlIHJl
YWNoIHRoZSBlbmQgb2YgYGRlc3RpbmF0aW9uSURgLgorICB2YXIgc3RhcnQgPSBhbmNlc3RvcklE
Lmxlbmd0aCArIFNFUEFSQVRPUl9MRU5HVEg7CisgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGRl
c3RpbmF0aW9uSUQubGVuZ3RoOyBpKyspIHsKKyAgICBpZiAoaXNCb3VuZGFyeShkZXN0aW5hdGlv
bklELCBpKSkgeworICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIHJldHVybiBkZXN0aW5hdGlv
bklELnN1YnN0cigwLCBpKTsKK30KKworLyoqCisgKiBHZXRzIHRoZSBuZWFyZXN0IGNvbW1vbiBh
bmNlc3RvciBJRCBvZiB0d28gSURzLgorICoKKyAqIFVzaW5nIHRoaXMgSUQgc2NoZW1lLCB0aGUg
bmVhcmVzdCBjb21tb24gYW5jZXN0b3IgSUQgaXMgdGhlIGxvbmdlc3QgY29tbW9uCisgKiBwcmVm
aXggb2YgdGhlIHR3byBJRHMgdGhhdCBpbW1lZGlhdGVseSBwcmVjZWRlZCBhICJtYXJrZXIiIGlu
IGJvdGggc3RyaW5ncy4KKyAqCisgKiBAcGFyYW0ge3N0cmluZ30gb25lSUQKKyAqIEBwYXJhbSB7
c3RyaW5nfSB0d29JRAorICogQHJldHVybiB7c3RyaW5nfSBOZWFyZXN0IGNvbW1vbiBhbmNlc3Rv
ciBJRCwgb3IgdGhlIGVtcHR5IHN0cmluZyBpZiBub25lLgorICogQHByaXZhdGUKKyAqLworZnVu
Y3Rpb24gZ2V0Rmlyc3RDb21tb25BbmNlc3RvcklEKG9uZUlELCB0d29JRCkgeworICB2YXIgbWlu
TGVuZ3RoID0gTWF0aC5taW4ob25lSUQubGVuZ3RoLCB0d29JRC5sZW5ndGgpOworICBpZiAobWlu
TGVuZ3RoID09PSAwKSB7CisgICAgcmV0dXJuICcnOworICB9CisgIHZhciBsYXN0Q29tbW9uTWFy
a2VySW5kZXggPSAwOworICAvLyBVc2UgYDw9YCB0byB0cmF2ZXJzZSB1bnRpbCB0aGUgIkVPTCIg
b2YgdGhlIHNob3J0ZXIgc3RyaW5nLgorICBmb3IgKHZhciBpID0gMDsgaSA8PSBtaW5MZW5ndGg7
IGkrKykgeworICAgIGlmIChpc0JvdW5kYXJ5KG9uZUlELCBpKSAmJiBpc0JvdW5kYXJ5KHR3b0lE
LCBpKSkgeworICAgICAgbGFzdENvbW1vbk1hcmtlckluZGV4ID0gaTsKKyAgICB9IGVsc2UgaWYg
KG9uZUlELmNoYXJBdChpKSAhPT0gdHdvSUQuY2hhckF0KGkpKSB7CisgICAgICBicmVhazsKKyAg
ICB9CisgIH0KKyAgdmFyIGxvbmdlc3RDb21tb25JRCA9IG9uZUlELnN1YnN0cigwLCBsYXN0Q29t
bW9uTWFya2VySW5kZXgpOworICBpbnZhcmlhbnQoCisgICAgaXNWYWxpZElEKGxvbmdlc3RDb21t
b25JRCksCisgICAgJ2dldEZpcnN0Q29tbW9uQW5jZXN0b3JJRCglcywgJXMpOiBFeHBlY3RlZCBh
IHZhbGlkIFJlYWN0IERPTSBJRDogJXMnLAorICAgIG9uZUlELAorICAgIHR3b0lELAorICAgIGxv
bmdlc3RDb21tb25JRAorICApOworICByZXR1cm4gbG9uZ2VzdENvbW1vbklEOworfQorCisvKioK
KyAqIFRyYXZlcnNlcyB0aGUgcGFyZW50IHBhdGggYmV0d2VlbiB0d28gSURzIChlaXRoZXIgdXAg
b3IgZG93bikuIFRoZSBJRHMgbXVzdAorICogbm90IGJlIHRoZSBzYW1lLCBhbmQgdGhlcmUgbXVz
dCBleGlzdCBhIHBhcmVudCBwYXRoIGJldHdlZW4gdGhlbS4KKyAqCisgKiBAcGFyYW0gez9zdHJp
bmd9IHN0YXJ0IElEIGF0IHdoaWNoIHRvIHN0YXJ0IHRyYXZlcnNhbC4KKyAqIEBwYXJhbSB7P3N0
cmluZ30gc3RvcCBJRCBhdCB3aGljaCB0byBlbmQgdHJhdmVyc2FsLgorICogQHBhcmFtIHtmdW5j
dGlvbn0gY2IgQ2FsbGJhY2sgdG8gaW52b2tlIGVhY2ggSUQgd2l0aC4KKyAqIEBwYXJhbSB7P2Jv
b2xlYW59IHNraXBGaXJzdCBXaGV0aGVyIG9yIG5vdCB0byBza2lwIHRoZSBmaXJzdCBub2RlLgor
ICogQHBhcmFtIHs/Ym9vbGVhbn0gc2tpcExhc3QgV2hldGhlciBvciBub3QgdG8gc2tpcCB0aGUg
bGFzdCBub2RlLgorICogQHByaXZhdGUKKyAqLworZnVuY3Rpb24gdHJhdmVyc2VQYXJlbnRQYXRo
KHN0YXJ0LCBzdG9wLCBjYiwgYXJnLCBza2lwRmlyc3QsIHNraXBMYXN0KSB7CisgIHN0YXJ0ID0g
c3RhcnQgfHwgJyc7CisgIHN0b3AgPSBzdG9wIHx8ICcnOworICBpbnZhcmlhbnQoCisgICAgc3Rh
cnQgIT09IHN0b3AsCisgICAgJ3RyYXZlcnNlUGFyZW50UGF0aCguLi4pOiBDYW5ub3QgdHJhdmVy
c2UgZnJvbSBhbmQgdG8gdGhlIHNhbWUgSUQsIGAlc2AuJywKKyAgICBzdGFydAorICApOworICB2
YXIgdHJhdmVyc2VVcCA9IGlzQW5jZXN0b3JJRE9mKHN0b3AsIHN0YXJ0KTsKKyAgaW52YXJpYW50
KAorICAgIHRyYXZlcnNlVXAgfHwgaXNBbmNlc3RvcklET2Yoc3RhcnQsIHN0b3ApLAorICAgICd0
cmF2ZXJzZVBhcmVudFBhdGgoJXMsICVzLCAuLi4pOiBDYW5ub3QgdHJhdmVyc2UgZnJvbSB0d28g
SURzIHRoYXQgZG8gJyArCisgICAgJ25vdCBoYXZlIGEgcGFyZW50IHBhdGguJywKKyAgICBzdGFy
dCwKKyAgICBzdG9wCisgICk7CisgIC8vIFRyYXZlcnNlIGZyb20gYHN0YXJ0YCB0byBgc3RvcGAg
b25lIGRlcHRoIGF0IGEgdGltZS4KKyAgdmFyIGRlcHRoID0gMDsKKyAgdmFyIHRyYXZlcnNlID0g
dHJhdmVyc2VVcCA/IGdldFBhcmVudElEIDogZ2V0TmV4dERlc2NlbmRhbnRJRDsKKyAgZm9yICh2
YXIgaWQgPSBzdGFydDsgLyogdW50aWwgYnJlYWsgKi87IGlkID0gdHJhdmVyc2UoaWQsIHN0b3Ap
KSB7CisgICAgaWYgKCghc2tpcEZpcnN0IHx8IGlkICE9PSBzdGFydCkgJiYgKCFza2lwTGFzdCB8
fCBpZCAhPT0gc3RvcCkpIHsKKyAgICAgIGNiKGlkLCB0cmF2ZXJzZVVwLCBhcmcpOworICAgIH0K
KyAgICBpZiAoaWQgPT09IHN0b3ApIHsKKyAgICAgIC8vIE9ubHkgYnJlYWsgLy9hZnRlci8vIHZp
c2l0aW5nIGBzdG9wYC4KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBpbnZhcmlhbnQoCisgICAg
ICBkZXB0aCsrIDwgTUFYX1RSRUVfREVQVEgsCisgICAgICAndHJhdmVyc2VQYXJlbnRQYXRoKCVz
LCAlcywgLi4uKTogRGV0ZWN0ZWQgYW4gaW5maW5pdGUgbG9vcCB3aGlsZSAnICsKKyAgICAgICd0
cmF2ZXJzaW5nIHRoZSBSZWFjdCBET00gSUQgdHJlZS4gVGhpcyBtYXkgYmUgZHVlIHRvIG1hbGZv
cm1lZCBJRHM6ICVzJywKKyAgICAgIHN0YXJ0LCBzdG9wCisgICAgKTsKKyAgfQorfQorCisvKioK
KyAqIE1hbmFnZXMgdGhlIElEcyBhc3NpZ25lZCB0byBET00gcmVwcmVzZW50YXRpb25zIG9mIFJl
YWN0IGNvbXBvbmVudHMuIFRoaXMKKyAqIHVzZXMgYSBzcGVjaWZpYyBzY2hlbWUgaW4gb3JkZXIg
dG8gdHJhdmVyc2UgdGhlIERPTSBlZmZpY2llbnRseSAoZS5nLiBpbgorICogb3JkZXIgdG8gc2lt
dWxhdGUgZXZlbnRzKS4KKyAqCisgKiBAaW50ZXJuYWwKKyAqLwordmFyIFJlYWN0SW5zdGFuY2VI
YW5kbGVzID0geworCisgIHNlcGFyYXRvcjogU0VQQVJBVE9SLAorCisgIGNyZWF0ZVJlYWN0Um9v
dElEOiBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gZ2V0UmVhY3RSb290SURTdHJpbmcoCisgICAg
ICBNYXRoLmNlaWwoTWF0aC5yYW5kb20oKSAqIEdMT0JBTF9NT1VOVF9QT0lOVF9NQVgpCisgICAg
KTsKKyAgfSwKKworICAvKioKKyAgICogVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgYG5vZGVgIGlzIHJl
bmRlcmVkIGJ5IFJlYWN0LgorICAgKgorICAgKiBAcGFyYW0geyp9IG5vZGUgRE9NIEVsZW1lbnQg
dG8gY2hlY2suCisgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIERPTSBFbGVtZW50
IGFwcGVhcnMgdG8gYmUgcmVuZGVyZWQgYnkgUmVhY3QuCisgICAqIEBpbnRlcm5hbAorICAgKi8K
KyAgaXNSZW5kZXJlZEJ5UmVhY3Q6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICBpZiAobm9kZS5ub2Rl
VHlwZSAhPT0gMSkgeworICAgICAgLy8gTm90IGEgRE9NRWxlbWVudCwgdGhlcmVmb3JlIG5vdCBh
IFJlYWN0IGNvbXBvbmVudAorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICB2YXIgaWQg
PSBSZWFjdElELmdldElEKG5vZGUpOworICAgIHJldHVybiBpZCA/IGlkLmNoYXJBdCgwKSA9PT0g
U0VQQVJBVE9SIDogZmFsc2U7CisgIH0sCisKKyAgLyoqCisgICAqIFRyYXZlcnNlcyB1cCB0aGUg
YW5jZXN0b3JzIG9mIHRoZSBzdXBwbGllZCBub2RlIHRvIGZpbmQgYSBub2RlIHRoYXQgaXMgYQor
ICAgKiBET00gcmVwcmVzZW50YXRpb24gb2YgYSBSZWFjdCBjb21wb25lbnQuCisgICAqCisgICAq
IEBwYXJhbSB7Kn0gbm9kZQorICAgKiBAcmV0dXJuIHs/RE9NRXZlbnRUYXJnZXR9CisgICAqIEBp
bnRlcm5hbAorICAgKi8KKyAgZ2V0Rmlyc3RSZWFjdERPTTogZnVuY3Rpb24obm9kZSkgeworICAg
IHZhciBjdXJyZW50ID0gbm9kZTsKKyAgICB3aGlsZSAoY3VycmVudCAmJiBjdXJyZW50LnBhcmVu
dE5vZGUgIT09IGN1cnJlbnQpIHsKKyAgICAgIGlmIChSZWFjdEluc3RhbmNlSGFuZGxlcy5pc1Jl
bmRlcmVkQnlSZWFjdChjdXJyZW50KSkgeworICAgICAgICByZXR1cm4gY3VycmVudDsKKyAgICAg
IH0KKyAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudE5vZGU7CisgICAgfQorICAgIHJldHVy
biBudWxsOworICB9LAorCisgIC8qKgorICAgKiBGaW5kcyBhIG5vZGUgd2l0aCB0aGUgc3VwcGxp
ZWQgYGlkYCBpbnNpZGUgb2YgdGhlIHN1cHBsaWVkIGBhbmNlc3Rvck5vZGVgLgorICAgKiBFeHBs
b2l0cyB0aGUgSUQgbmFtaW5nIHNjaGVtZSB0byBwZXJmb3JtIHRoZSBzZWFyY2ggcXVpY2tseS4K
KyAgICoKKyAgICogQHBhcmFtIHtET01FdmVudFRhcmdldH0gYW5jZXN0b3JOb2RlIFNlYXJjaCBm
cm9tIHRoaXMgcm9vdC4KKyAgICogQHBhcmFybSB7c3RyaW5nfSBpZCBJRCBvZiB0aGUgRE9NIHJl
cHJlc2VudGF0aW9uIG9mIHRoZSBjb21wb25lbnQuCisgICAqIEByZXR1cm4ge0RPTUV2ZW50VGFy
Z2V0fSBET00gbm9kZSB3aXRoIHRoZSBzdXBwbGllZCBgaWRgLgorICAgKiBAaW50ZXJuYWwKKyAg
ICovCisgIGZpbmRDb21wb25lbnRSb290OiBmdW5jdGlvbihhbmNlc3Rvck5vZGUsIGlkKSB7Cisg
ICAgdmFyIGZpcnN0Q2hpbGRyZW4gPSBbYW5jZXN0b3JOb2RlLmZpcnN0Q2hpbGRdOworICAgIHZh
ciBjaGlsZEluZGV4ID0gMDsKKworICAgIHdoaWxlIChjaGlsZEluZGV4IDwgZmlyc3RDaGlsZHJl
bi5sZW5ndGgpIHsKKyAgICAgIHZhciBjaGlsZCA9IGZpcnN0Q2hpbGRyZW5bY2hpbGRJbmRleCsr
XTsKKyAgICAgIHdoaWxlIChjaGlsZCkgeworICAgICAgICB2YXIgY2hpbGRJRCA9IFJlYWN0SUQu
Z2V0SUQoY2hpbGQpOworICAgICAgICBpZiAoY2hpbGRJRCkgeworICAgICAgICAgIGlmIChpZCA9
PT0gY2hpbGRJRCkgeworICAgICAgICAgICAgcmV0dXJuIGNoaWxkOworICAgICAgICAgIH0gZWxz
ZSBpZiAoaXNBbmNlc3RvcklET2YoY2hpbGRJRCwgaWQpKSB7CisgICAgICAgICAgICAvLyBJZiB3
ZSBmaW5kIGEgY2hpbGQgd2hvc2UgSUQgaXMgYW4gYW5jZXN0b3Igb2YgdGhlIGdpdmVuIElELAor
ICAgICAgICAgICAgLy8gdGhlbiB3ZSBjYW4gYmUgc3VyZSB0aGF0IHdlIG9ubHkgd2FudCB0byBz
ZWFyY2ggdGhlIHN1YnRyZWUKKyAgICAgICAgICAgIC8vIHJvb3RlZCBhdCB0aGlzIGNoaWxkLCBz
byB3ZSBjYW4gdGhyb3cgb3V0IHRoZSByZXN0IG9mIHRoZQorICAgICAgICAgICAgLy8gc2VhcmNo
IHN0YXRlLgorICAgICAgICAgICAgZmlyc3RDaGlsZHJlbi5sZW5ndGggPSBjaGlsZEluZGV4ID0g
MDsKKyAgICAgICAgICAgIGZpcnN0Q2hpbGRyZW4ucHVzaChjaGlsZC5maXJzdENoaWxkKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBUT0RP
IFRoaXMgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkgaWYgdGhlIElEIGhpZXJhcmNoeSBpcworICAg
ICAgICAgICAgLy8gY29ycmVjdCwgYnV0IGlzIG9jY2FzaW9uYWxseSBuZWNlc3NhcnkgaWYgdGhl
IERPTSBoYXMgYmVlbgorICAgICAgICAgICAgLy8gbW9kaWZpZWQgaW4gdW5leHBlY3RlZCB3YXlz
LgorICAgICAgICAgICAgZmlyc3RDaGlsZHJlbi5wdXNoKGNoaWxkLmZpcnN0Q2hpbGQpOworICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAvLyBJZiB0aGlzIGNoaWxkIGhh
ZCBubyBJRCwgdGhlbiB0aGVyZSdzIGEgY2hhbmNlIHRoYXQgaXQgd2FzCisgICAgICAgICAgLy8g
aW5qZWN0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgYnJvd3NlciwgYXMgd2hlbiBhIGA8dGFibGU+
YAorICAgICAgICAgIC8vIGVsZW1lbnQgc3Byb3V0cyBhbiBleHRyYSBgPHRib2R5PmAgY2hpbGQg
YXMgYSBzaWRlIGVmZmVjdCBvZgorICAgICAgICAgIC8vIGAuaW5uZXJIVE1MYCBwYXJzaW5nLiBP
cHRpbWlzdGljYWxseSBjb250aW51ZSBkb3duIHRoaXMKKyAgICAgICAgICAvLyBicmFuY2gsIGJ1
dCBub3QgYmVmb3JlIGV4YW1pbmluZyB0aGUgb3RoZXIgc2libGluZ3MuCisgICAgICAgICAgZmly
c3RDaGlsZHJlbi5wdXNoKGNoaWxkLmZpcnN0Q2hpbGQpOworICAgICAgICB9CisgICAgICAgIGNo
aWxkID0gY2hpbGQubmV4dFNpYmxpbmc7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKHRydWUp
IHsKKyAgICAgIGNvbnNvbGUuZXJyb3IoCisgICAgICAgICdFcnJvciB3aGlsZSBpbnZva2luZyBg
ZmluZENvbXBvbmVudFJvb3RgIHdpdGggdGhlIGZvbGxvd2luZyAnICsKKyAgICAgICAgJ2FuY2Vz
dG9yIG5vZGU6JywKKyAgICAgICAgYW5jZXN0b3JOb2RlCisgICAgICApOworICAgIH0KKyAgICBp
bnZhcmlhbnQoCisgICAgICBmYWxzZSwKKyAgICAgICdmaW5kQ29tcG9uZW50Um9vdCguLi4sICVz
KTogVW5hYmxlIHRvIGZpbmQgZWxlbWVudC4gVGhpcyBwcm9iYWJseSAnICsKKyAgICAgICdtZWFu
cyB0aGUgRE9NIHdhcyB1bmV4cGVjdGVkbHkgbXV0YXRlZCAoZS5nLiBieSB0aGUgYnJvd3Nlciku
JywKKyAgICAgIGlkLAorICAgICAgUmVhY3RJRC5nZXRJRChhbmNlc3Rvck5vZGUpCisgICAgKTsK
KyAgfSwKKworICAvKioKKyAgICogR2V0cyB0aGUgRE9NIElEIG9mIHRoZSBSZWFjdCBjb21wb25l
bnQgdGhhdCBpcyB0aGUgcm9vdCBvZiB0aGUgdHJlZSB0aGF0CisgICAqIGNvbnRhaW5zIHRoZSBS
ZWFjdCBjb21wb25lbnQgd2l0aCB0aGUgc3VwcGxpZWQgRE9NIElELgorICAgKgorICAgKiBAcGFy
YW0ge3N0cmluZ30gaWQgRE9NIElEIG9mIGEgUmVhY3QgY29tcG9uZW50LgorICAgKiBAcmV0dXJu
IHs/c3RyaW5nfSBET00gSUQgb2YgdGhlIFJlYWN0IGNvbXBvbmVudCB0aGF0IGlzIHRoZSByb290
LgorICAgKiBAaW50ZXJuYWwKKyAgICovCisgIGdldFJlYWN0Um9vdElERnJvbU5vZGVJRDogZnVu
Y3Rpb24oaWQpIHsKKyAgICB2YXIgcmVnZXhSZXN1bHQgPSAvXC5yXFtbXlxdXStcXS8uZXhlYyhp
ZCk7CisgICAgcmV0dXJuIHJlZ2V4UmVzdWx0ICYmIHJlZ2V4UmVzdWx0WzBdOworICB9LAorCisg
IC8qKgorICAgKiBUcmF2ZXJzZXMgdGhlIElEIGhpZXJhcmNoeSBhbmQgaW52b2tlcyB0aGUgc3Vw
cGxpZWQgYGNiYCBvbiBhbnkgSURzIHRoYXQKKyAgICogc2hvdWxkIHdvdWxkIHJlY2VpdmUgYSBg
bW91c2VFbnRlcmAgb3IgYG1vdXNlTGVhdmVgIGV2ZW50LgorICAgKgorICAgKiBOT1RFOiBEb2Vz
IG5vdCBpbnZva2UgdGhlIGNhbGxiYWNrIG9uIHRoZSBuZWFyZXN0IGNvbW1vbiBhbmNlc3RvciBi
ZWNhdXNlCisgICAqIG5vdGhpbmcgImVudGVyZWQiIG9yICJsZWZ0IiB0aGF0IGVsZW1lbnQuCisg
ICAqCisgICAqIEBwYXJhbSB7c3RyaW5nfSBsZWF2ZUlEIElEIGJlaW5nIGxlZnQuCisgICAqIEBw
YXJhbSB7c3RyaW5nfSBlbnRlcklEIElEIGJlaW5nIGVudGVyZWQuCisgICAqIEBwYXJhbSB7ZnVu
Y3Rpb259IGNiIENhbGxiYWNrIHRvIGludm9rZSBvbiBlYWNoIGVudGVyZWQvbGVmdCBJRC4KKyAg
ICogQHBhcmFtIHsqfSB1cEFyZyBBcmd1bWVudCB0byBpbnZva2UgdGhlIGNhbGxiYWNrIHdpdGgg
b24gbGVmdCBJRHMuCisgICAqIEBwYXJhbSB7Kn0gZG93bkFyZyBBcmd1bWVudCB0byBpbnZva2Ug
dGhlIGNhbGxiYWNrIHdpdGggb24gZW50ZXJlZCBJRHMuCisgICAqIEBpbnRlcm5hbAorICAgKi8K
KyAgdHJhdmVyc2VFbnRlckxlYXZlOiBmdW5jdGlvbihsZWF2ZUlELCBlbnRlcklELCBjYiwgdXBB
cmcsIGRvd25BcmcpIHsKKyAgICB2YXIgYW5jZXN0b3JJRCA9IGdldEZpcnN0Q29tbW9uQW5jZXN0
b3JJRChsZWF2ZUlELCBlbnRlcklEKTsKKyAgICBpZiAoYW5jZXN0b3JJRCAhPT0gbGVhdmVJRCkg
eworICAgICAgdHJhdmVyc2VQYXJlbnRQYXRoKGxlYXZlSUQsIGFuY2VzdG9ySUQsIGNiLCB1cEFy
ZywgZmFsc2UsIHRydWUpOworICAgIH0KKyAgICBpZiAoYW5jZXN0b3JJRCAhPT0gZW50ZXJJRCkg
eworICAgICAgdHJhdmVyc2VQYXJlbnRQYXRoKGFuY2VzdG9ySUQsIGVudGVySUQsIGNiLCBkb3du
QXJnLCB0cnVlLCBmYWxzZSk7CisgICAgfQorICB9LAorCisgIC8qKgorICAgKiBTaW11bGF0ZXMg
dGhlIHRyYXZlcnNhbCBvZiBhIHR3by1waGFzZSwgY2FwdHVyZS9idWJibGUgZXZlbnQgZGlzcGF0
Y2guCisgICAqCisgICAqIE5PVEU6IFRoaXMgdHJhdmVyc2FsIGhhcHBlbnMgb24gSURzIHdpdGhv
dXQgdG91Y2hpbmcgdGhlIERPTS4KKyAgICoKKyAgICogQHBhcmFtIHtzdHJpbmd9IHRhcmdldElE
IElEIG9mIHRoZSB0YXJnZXQgbm9kZS4KKyAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2IgQ2FsbGJh
Y2sgdG8gaW52b2tlLgorICAgKiBAcGFyYW0geyp9IGFyZyBBcmd1bWVudCB0byBpbnZva2UgdGhl
IGNhbGxiYWNrIHdpdGguCisgICAqIEBpbnRlcm5hbAorICAgKi8KKyAgdHJhdmVyc2VUd29QaGFz
ZTogZnVuY3Rpb24odGFyZ2V0SUQsIGNiLCBhcmcpIHsKKyAgICBpZiAodGFyZ2V0SUQpIHsKKyAg
ICAgIHRyYXZlcnNlUGFyZW50UGF0aCgnJywgdGFyZ2V0SUQsIGNiLCBhcmcsIHRydWUsIGZhbHNl
KTsKKyAgICAgIHRyYXZlcnNlUGFyZW50UGF0aCh0YXJnZXRJRCwgJycsIGNiLCBhcmcsIGZhbHNl
LCB0cnVlKTsKKyAgICB9CisgIH0sCisKKyAgLyoqCisgICAqIEV4cG9zZWQgZm9yIHVuaXQgdGVz
dGluZy4KKyAgICogQHByaXZhdGUKKyAgICovCisgIF9nZXRGaXJzdENvbW1vbkFuY2VzdG9ySUQ6
IGdldEZpcnN0Q29tbW9uQW5jZXN0b3JJRCwKKworICAvKioKKyAgICogRXhwb3NlZCBmb3IgdW5p
dCB0ZXN0aW5nLgorICAgKiBAcHJpdmF0ZQorICAgKi8KKyAgX2dldE5leHREZXNjZW5kYW50SUQ6
IGdldE5leHREZXNjZW5kYW50SUQKKworfTsKKworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdEluc3Rh
bmNlSGFuZGxlczsKKworfSx7Ii4vUmVhY3RJRCI6MzUsIi4vaW52YXJpYW50Ijo3NX1dLDM4Oltm
dW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKyhmdW5jdGlvbigpey8qKgorICogQ29w
eXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBh
Y2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90
IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAq
IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93
d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJl
ZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAq
IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJ
UyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lO
RCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhl
IHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRp
b25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBSZWFjdE1vdW50
CisgKi8KKworInVzZSBzdHJpY3QiOworCit2YXIgaW52YXJpYW50ID0gcmVxdWlyZSgiLi9pbnZh
cmlhbnQiKTsKK3ZhciBSZWFjdEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoIi4vUmVhY3RFdmVudEVt
aXR0ZXIiKTsKK3ZhciBSZWFjdEluc3RhbmNlSGFuZGxlcyA9IHJlcXVpcmUoIi4vUmVhY3RJbnN0
YW5jZUhhbmRsZXMiKTsKK3ZhciBSZWFjdEV2ZW50VG9wTGV2ZWxDYWxsYmFjayA9IHJlcXVpcmUo
Ii4vUmVhY3RFdmVudFRvcExldmVsQ2FsbGJhY2siKTsKK3ZhciBSZWFjdElEID0gcmVxdWlyZSgi
Li9SZWFjdElEIik7CisKK3ZhciAkID0gcmVxdWlyZSgiLi8kIik7CisKKy8qKiBNYXBwaW5nIGZy
b20gcmVhY3RSb290SUQgdG8gUmVhY3QgY29tcG9uZW50IGluc3RhbmNlLiAqLwordmFyIGluc3Rh
bmNlQnlSZWFjdFJvb3RJRCA9IHt9OworCisvKiogTWFwcGluZyBmcm9tIHJlYWN0Um9vdElEIHRv
IGBjb250YWluZXJgIG5vZGVzLiAqLwordmFyIGNvbnRhaW5lcnNCeVJlYWN0Um9vdElEID0ge307
CisKK2lmICh0cnVlKSB7CisgIC8qKiBfX0RFVl9fLW9ubHkgbWFwcGluZyBmcm9tIHJlYWN0Um9v
dElEIHRvIHJvb3QgZWxlbWVudHMuICovCisgIHZhciByb290RWxlbWVudHNCeVJlYWN0Um9vdElE
ID0ge307Cit9CisKKy8qKgorICogQHBhcmFtIHtET01FbGVtZW50fSBjb250YWluZXIgRE9NIGVs
ZW1lbnQgdGhhdCBtYXkgY29udGFpbiBhIFJlYWN0IGNvbXBvbmVudAorICogQHJldHVybiB7Pyp9
IERPTSBlbGVtZW50IHRoYXQgbWF5IGhhdmUgdGhlIHJlYWN0Um9vdCBJRCwgb3IgbnVsbC4KKyAq
LworZnVuY3Rpb24gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcikgewor
ICByZXR1cm4gY29udGFpbmVyICYmIGNvbnRhaW5lci5maXJzdENoaWxkOworfQorCisvKioKKyAq
IEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIERPTSBlbGVtZW50IHRoYXQgbWF5IGNvbnRh
aW4gYSBSZWFjdCBjb21wb25lbnQuCisgKiBAcmV0dXJuIHs/c3RyaW5nfSBBICJyZWFjdFJvb3Qi
IElELCBpZiBhIFJlYWN0IGNvbXBvbmVudCBpcyByZW5kZXJlZC4KKyAqLworZnVuY3Rpb24gZ2V0
UmVhY3RSb290SUQoY29udGFpbmVyKSB7CisgIHZhciByb290RWxlbWVudCA9IGdldFJlYWN0Um9v
dEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpOworICByZXR1cm4gcm9vdEVsZW1lbnQgJiYg
UmVhY3RJRC5nZXRJRChyb290RWxlbWVudCk7Cit9CisKKy8qKgorICogTW91bnRpbmcgaXMgdGhl
IHByb2Nlc3Mgb2YgaW5pdGlhbGl6aW5nIGEgUmVhY3QgY29tcG9uZW50IGJ5IGNyZWF0aW5ncyBp
dHMKKyAqIHJlcHJlc2VudGF0aXZlIERPTSBlbGVtZW50cyBhbmQgaW5zZXJ0aW5nIHRoZW0gaW50
byBhIHN1cHBsaWVkIGBjb250YWluZXJgLgorICogQW55IHByaW9yIGNvbnRlbnQgaW5zaWRlIGBj
b250YWluZXJgIGlzIGRlc3Ryb3llZCBpbiB0aGUgcHJvY2Vzcy4KKyAqCisgKiAgIFJlYWN0TW91
bnQucmVuZGVyQ29tcG9uZW50KGNvbXBvbmVudCwgJCgnY29udGFpbmVyJykpOworICoKKyAqICAg
PGRpdiBpZD0iY29udGFpbmVyIj4gICAgICAgICAgICAgICAgICAgPC0tIFN1cHBsaWVkIGBjb250
YWluZXJgLgorICogICAgIDxkaXYgZGF0YS1yZWFjdGlkPSIuclszXSI+ICAgICAgICAgICA8LS0g
UmVuZGVyZWQgcmVhY3RSb290IG9mIFJlYWN0CisgKiAgICAgICAvLyAuLi4gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuCisgKiAgICAgPC9kaXY+CisgKiAgIDwvZGl2
PgorICoKKyAqIEluc2lkZSBvZiBgY29udGFpbmVyYCwgdGhlIGZpcnN0IGVsZW1lbnQgcmVuZGVy
ZWQgaXMgdGhlICJyZWFjdFJvb3QiLgorICovCit2YXIgUmVhY3RNb3VudCA9IHsKKworICAvKiog
VGltZSBzcGVudCBnZW5lcmF0aW5nIG1hcmt1cC4gKi8KKyAgdG90YWxJbnN0YW50aWF0aW9uVGlt
ZTogMCwKKworICAvKiogVGltZSBzcGVudCBpbnNlcnRpbmcgbWFya3VwIGludG8gdGhlIERPTS4g
Ki8KKyAgdG90YWxJbmplY3Rpb25UaW1lOiAwLAorCisgIC8qKiBXaGV0aGVyIHN1cHBvcnQgZm9y
IHRvdWNoIGV2ZW50cyBzaG91bGQgYmUgaW5pdGlhbGl6ZWQuICovCisgIHVzZVRvdWNoRXZlbnRz
OiBmYWxzZSwKKworICAvKioKKyAgICogVGhpcyBpcyBhIGhvb2sgcHJvdmlkZWQgdG8gc3VwcG9y
dCByZW5kZXJpbmcgUmVhY3QgY29tcG9uZW50cyB3aGlsZQorICAgKiBlbnN1cmluZyB0aGF0IHRo
ZSBhcHBhcmVudCBzY3JvbGwgcG9zaXRpb24gb2YgaXRzIGBjb250YWluZXJgIGRvZXMgbm90Cisg
ICAqIGNoYW5nZS4KKyAgICoKKyAgICogQHBhcmFtIHtET01FbGVtZW50fSBjb250YWluZXIgVGhl
IGBjb250YWluZXJgIGJlaW5nIHJlbmRlcmVkIGludG8uCisgICAqIEBwYXJhbSB7ZnVuY3Rpb259
IHJlbmRlckNhbGxiYWNrIFRoaXMgbXVzdCBiZSBjYWxsZWQgb25jZSB0byBkbyB0aGUgcmVuZGVy
LgorICAgKi8KKyAgc2Nyb2xsTW9uaXRvcjogZnVuY3Rpb24oY29udGFpbmVyLCByZW5kZXJDYWxs
YmFjaykgeworICAgIHJlbmRlckNhbGxiYWNrKCk7CisgIH0sCisKKyAgLyoqCisgICAqIEVuc3Vy
ZXMgdGhhdCB0aGUgdG9wLWxldmVsIGV2ZW50IGRlbGVnYXRpb24gbGlzdGVuZXIgaXMgc2V0IHVw
LiBUaGlzIHdpbGwKKyAgICogYmUgaW52b2tlZCBzb21lIHRpbWUgYmVmb3JlIHRoZSBmaXJzdCB0
aW1lIGFueSBSZWFjdCBjb21wb25lbnQgaXMgcmVuZGVyZWQuCisgICAqCisgICAqIEBwYXJhbSB7
b2JqZWN0fSBUb3BMZXZlbENhbGxiYWNrQ3JlYXRvcgorICAgKiBAcHJpdmF0ZQorICAgKi8KKyAg
cHJlcGFyZVRvcExldmVsRXZlbnRzOiBmdW5jdGlvbihUb3BMZXZlbENhbGxiYWNrQ3JlYXRvcikg
eworICAgIFJlYWN0RXZlbnRFbWl0dGVyLmVuc3VyZUxpc3RlbmluZygKKyAgICAgIFJlYWN0TW91
bnQudXNlVG91Y2hFdmVudHMsCisgICAgICBUb3BMZXZlbENhbGxiYWNrQ3JlYXRvcgorICAgICk7
CisgIH0sCisKKyAgLyoqCisgICAqIFRha2UgYSBjb21wb25lbnQgdGhhdCdzIGFscmVhZHkgbW91
bnRlZCBpbnRvIHRoZSBET00gYW5kIHJlcGxhY2UgaXRzIHByb3BzCisgICAqIEBwYXJhbSB7UmVh
Y3RDb21wb25lbnR9IHByZXZDb21wb25lbnQgY29tcG9uZW50IGluc3RhbmNlIGFscmVhZHkgaW4g
dGhlIERPTQorICAgKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBuZXh0Q29tcG9uZW50IGNvbXBv
bmVudCBpbnN0YW5jZSB0byByZW5kZXIKKyAgICogQHBhcmFtIHtET01FbGVtZW50fSBjb250YWlu
ZXIgY29udGFpbmVyIHRvIHJlbmRlciBpbnRvCisgICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxs
YmFjayBmdW5jdGlvbiB0cmlnZ2VyZWQgb24gY29tcGxldGlvbgorICAgKi8KKyAgX3VwZGF0ZVJv
b3RDb21wb25lbnQ6IGZ1bmN0aW9uKAorICAgICAgcHJldkNvbXBvbmVudCwKKyAgICAgIG5leHRD
b21wb25lbnQsCisgICAgICBjb250YWluZXIsCisgICAgICBjYWxsYmFjaykgeworICAgIHZhciBu
ZXh0UHJvcHMgPSBuZXh0Q29tcG9uZW50LnByb3BzOworICAgIFJlYWN0TW91bnQuc2Nyb2xsTW9u
aXRvcihjb250YWluZXIsIGZ1bmN0aW9uKCkgeworICAgICAgcHJldkNvbXBvbmVudC5yZXBsYWNl
UHJvcHMobmV4dFByb3BzLCBjYWxsYmFjayk7CisgICAgfSk7CisKKyAgICBpZiAodHJ1ZSkgewor
ICAgICAgLy8gUmVjb3JkIHRoZSByb290IGVsZW1lbnQgaW4gY2FzZSBpdCBsYXRlciBnZXRzIHRy
YW5zcGxhbnRlZC4KKyAgICAgIHJvb3RFbGVtZW50c0J5UmVhY3RSb290SURbZ2V0UmVhY3RSb290
SUQoY29udGFpbmVyKV0gPQorICAgICAgICBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIo
Y29udGFpbmVyKTsKKyAgICB9CisKKyAgICByZXR1cm4gcHJldkNvbXBvbmVudDsKKyAgfSwKKwor
ICAvKioKKyAgICogUmVnaXN0ZXIgYSBjb21wb25lbnQgaW50byB0aGUgaW5zdGFuY2UgbWFwIGFu
ZCBzdGFydCB0aGUgZXZlbnRzIHN5c3RlbS4KKyAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0g
bmV4dENvbXBvbmVudCBjb21wb25lbnQgaW5zdGFuY2UgdG8gcmVuZGVyCisgICAqIEBwYXJhbSB7
RE9NRWxlbWVudH0gY29udGFpbmVyIGNvbnRhaW5lciB0byByZW5kZXIgaW50bworICAgKiBAcmV0
dXJuIHtzdHJpbmd9IHJlYWN0Um9vdCBJRCBwcmVmaXgKKyAgICovCisgIF9yZWdpc3RlckNvbXBv
bmVudDogZnVuY3Rpb24obmV4dENvbXBvbmVudCwgY29udGFpbmVyKSB7CisgICAgUmVhY3RNb3Vu
dC5wcmVwYXJlVG9wTGV2ZWxFdmVudHMoUmVhY3RFdmVudFRvcExldmVsQ2FsbGJhY2spOworCisg
ICAgdmFyIHJlYWN0Um9vdElEID0gUmVhY3RNb3VudC5yZWdpc3RlckNvbnRhaW5lcihjb250YWlu
ZXIpOworICAgIGluc3RhbmNlQnlSZWFjdFJvb3RJRFtyZWFjdFJvb3RJRF0gPSBuZXh0Q29tcG9u
ZW50OworICAgIHJldHVybiByZWFjdFJvb3RJRDsKKyAgfSwKKworICAvKioKKyAgICogUmVuZGVy
IGEgbmV3IGNvbXBvbmVudCBpbnRvIHRoZSBET00uCisgICAqIEBwYXJhbSB7UmVhY3RDb21wb25l
bnR9IG5leHRDb21wb25lbnQgY29tcG9uZW50IGluc3RhbmNlIHRvIHJlbmRlcgorICAgKiBAcGFy
YW0ge0RPTUVsZW1lbnR9IGNvbnRhaW5lciBjb250YWluZXIgdG8gcmVuZGVyIGludG8KKyAgICog
QHBhcmFtIHtib29sZWFufSBzaG91bGRSZXVzZU1hcmt1cCBpZiB3ZSBzaG91bGQgc2tpcCB0aGUg
bWFya3VwIGluc2VydGlvbgorICAgKiBAcmV0dXJuIHtSZWFjdENvbXBvbmVudH0gbmV4dENvbXBv
bmVudAorICAgKi8KKyAgX3JlbmRlck5ld1Jvb3RDb21wb25lbnQ6IGZ1bmN0aW9uKAorICAgICAg
bmV4dENvbXBvbmVudCwKKyAgICAgIGNvbnRhaW5lciwKKyAgICAgIHNob3VsZFJldXNlTWFya3Vw
KSB7CisgICAgdmFyIHJlYWN0Um9vdElEID0gUmVhY3RNb3VudC5fcmVnaXN0ZXJDb21wb25lbnQo
bmV4dENvbXBvbmVudCwgY29udGFpbmVyKTsKKyAgICBuZXh0Q29tcG9uZW50Lm1vdW50Q29tcG9u
ZW50SW50b05vZGUoCisgICAgICByZWFjdFJvb3RJRCwKKyAgICAgIGNvbnRhaW5lciwKKyAgICAg
IHNob3VsZFJldXNlTWFya3VwCisgICAgKTsKKworICAgIGlmICh0cnVlKSB7CisgICAgICAvLyBS
ZWNvcmQgdGhlIHJvb3QgZWxlbWVudCBpbiBjYXNlIGl0IGxhdGVyIGdldHMgdHJhbnNwbGFudGVk
LgorICAgICAgcm9vdEVsZW1lbnRzQnlSZWFjdFJvb3RJRFtyZWFjdFJvb3RJRF0gPQorICAgICAg
ICBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gbmV4dENvbXBvbmVudDsKKyAgfSwKKworICAvKioKKyAgICogUmVuZGVycyBhIFJl
YWN0IGNvbXBvbmVudCBpbnRvIHRoZSBET00gaW4gdGhlIHN1cHBsaWVkIGBjb250YWluZXJgLgor
ICAgKgorICAgKiBJZiB0aGUgUmVhY3QgY29tcG9uZW50IHdhcyBwcmV2aW91c2x5IHJlbmRlcmVk
IGludG8gYGNvbnRhaW5lcmAsIHRoaXMgd2lsbAorICAgKiBwZXJmb3JtIGFuIHVwZGF0ZSBvbiBp
dCBhbmQgb25seSBtdXRhdGUgdGhlIERPTSBhcyBuZWNlc3NhcnkgdG8gcmVmbGVjdCB0aGUKKyAg
ICogbGF0ZXN0IFJlYWN0IGNvbXBvbmVudC4KKyAgICoKKyAgICogQHBhcmFtIHtSZWFjdENvbXBv
bmVudH0gbmV4dENvbXBvbmVudCBDb21wb25lbnQgaW5zdGFuY2UgdG8gcmVuZGVyLgorICAgKiBA
cGFyYW0ge0RPTUVsZW1lbnR9IGNvbnRhaW5lciBET00gZWxlbWVudCB0byByZW5kZXIgaW50by4K
KyAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIGZ1bmN0aW9uIHRyaWdnZXJlZCBvbiBj
b21wbGV0aW9uCisgICAqIEByZXR1cm4ge1JlYWN0Q29tcG9uZW50fSBDb21wb25lbnQgaW5zdGFu
Y2UgcmVuZGVyZWQgaW4gYGNvbnRhaW5lcmAuCisgICAqLworICByZW5kZXJDb21wb25lbnQ6IGZ1
bmN0aW9uKG5leHRDb21wb25lbnQsIGNvbnRhaW5lciwgY2FsbGJhY2spIHsKKyAgICB2YXIgcmVn
aXN0ZXJlZENvbXBvbmVudCA9IGluc3RhbmNlQnlSZWFjdFJvb3RJRFtnZXRSZWFjdFJvb3RJRChj
b250YWluZXIpXTsKKworICAgIGlmIChyZWdpc3RlcmVkQ29tcG9uZW50KSB7CisgICAgICBpZiAo
cmVnaXN0ZXJlZENvbXBvbmVudC5jb25zdHJ1Y3RvciA9PT0gbmV4dENvbXBvbmVudC5jb25zdHJ1
Y3RvcikgeworICAgICAgICByZXR1cm4gUmVhY3RNb3VudC5fdXBkYXRlUm9vdENvbXBvbmVudCgK
KyAgICAgICAgICByZWdpc3RlcmVkQ29tcG9uZW50LAorICAgICAgICAgIG5leHRDb21wb25lbnQs
CisgICAgICAgICAgY29udGFpbmVyLAorICAgICAgICAgIGNhbGxiYWNrCisgICAgICAgICk7Cisg
ICAgICB9IGVsc2UgeworICAgICAgICBSZWFjdE1vdW50LnVubW91bnRBbmRSZWxlYXNlUmVhY3RS
b290Tm9kZShjb250YWluZXIpOworICAgICAgfQorICAgIH0KKworICAgIHZhciByZWFjdFJvb3RF
bGVtZW50ID0gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7CisgICAg
dmFyIGNvbnRhaW5lckhhc1JlYWN0TWFya3VwID0KKyAgICAgIHJlYWN0Um9vdEVsZW1lbnQgJiYK
KyAgICAgICAgUmVhY3RJbnN0YW5jZUhhbmRsZXMuaXNSZW5kZXJlZEJ5UmVhY3QocmVhY3RSb290
RWxlbWVudCk7CisKKyAgICB2YXIgc2hvdWxkUmV1c2VNYXJrdXAgPSBjb250YWluZXJIYXNSZWFj
dE1hcmt1cCAmJiAhcmVnaXN0ZXJlZENvbXBvbmVudDsKKworICAgIHZhciBjb21wb25lbnQgPSBS
ZWFjdE1vdW50Ll9yZW5kZXJOZXdSb290Q29tcG9uZW50KAorICAgICAgbmV4dENvbXBvbmVudCwK
KyAgICAgIGNvbnRhaW5lciwKKyAgICAgIHNob3VsZFJldXNlTWFya3VwCisgICAgKTsKKyAgICBj
YWxsYmFjayAmJiBjYWxsYmFjaygpOworICAgIHJldHVybiBjb21wb25lbnQ7CisgIH0sCisKKyAg
LyoqCisgICAqIENvbnN0cnVjdHMgYSBjb21wb25lbnQgaW5zdGFuY2Ugb2YgYGNvbnN0cnVjdG9y
YCB3aXRoIGBpbml0aWFsUHJvcHNgIGFuZAorICAgKiByZW5kZXJzIGl0IGludG8gdGhlIHN1cHBs
aWVkIGBjb250YWluZXJgLgorICAgKgorICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb25zdHJ1Y3Rv
ciBSZWFjdCBjb21wb25lbnQgY29uc3RydWN0b3IuCisgICAqIEBwYXJhbSB7P29iamVjdH0gcHJv
cHMgSW5pdGlhbCBwcm9wcyBvZiB0aGUgY29tcG9uZW50IGluc3RhbmNlLgorICAgKiBAcGFyYW0g
e0RPTUVsZW1lbnR9IGNvbnRhaW5lciBET00gZWxlbWVudCB0byByZW5kZXIgaW50by4KKyAgICog
QHJldHVybiB7UmVhY3RDb21wb25lbnR9IENvbXBvbmVudCBpbnN0YW5jZSByZW5kZXJlZCBpbiBg
Y29udGFpbmVyYC4KKyAgICovCisgIGNvbnN0cnVjdEFuZFJlbmRlckNvbXBvbmVudDogZnVuY3Rp
b24oY29uc3RydWN0b3IsIHByb3BzLCBjb250YWluZXIpIHsKKyAgICByZXR1cm4gUmVhY3RNb3Vu
dC5yZW5kZXJDb21wb25lbnQoY29uc3RydWN0b3IocHJvcHMpLCBjb250YWluZXIpOworICB9LAor
CisgIC8qKgorICAgKiBDb25zdHJ1Y3RzIGEgY29tcG9uZW50IGluc3RhbmNlIG9mIGBjb25zdHJ1
Y3RvcmAgd2l0aCBgaW5pdGlhbFByb3BzYCBhbmQKKyAgICogcmVuZGVycyBpdCBpbnRvIGEgY29u
dGFpbmVyIG5vZGUgaWRlbnRpZmllZCBieSBzdXBwbGllZCBgaWRgLgorICAgKgorICAgKiBAcGFy
YW0ge2Z1bmN0aW9ufSBjb21wb25lbnRDb25zdHJ1Y3RvciBSZWFjdCBjb21wb25lbnQgY29uc3Ry
dWN0b3IKKyAgICogQHBhcmFtIHs/b2JqZWN0fSBwcm9wcyBJbml0aWFsIHByb3BzIG9mIHRoZSBj
b21wb25lbnQgaW5zdGFuY2UuCisgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBJRCBvZiB0aGUgRE9N
IGVsZW1lbnQgdG8gcmVuZGVyIGludG8uCisgICAqIEByZXR1cm4ge1JlYWN0Q29tcG9uZW50fSBD
b21wb25lbnQgaW5zdGFuY2UgcmVuZGVyZWQgaW4gdGhlIGNvbnRhaW5lciBub2RlLgorICAgKi8K
KyAgY29uc3RydWN0QW5kUmVuZGVyQ29tcG9uZW50QnlJRDogZnVuY3Rpb24oY29uc3RydWN0b3Is
IHByb3BzLCBpZCkgeworICAgIHJldHVybiBSZWFjdE1vdW50LmNvbnN0cnVjdEFuZFJlbmRlckNv
bXBvbmVudChjb25zdHJ1Y3RvciwgcHJvcHMsICQoaWQpKTsKKyAgfSwKKworICAvKioKKyAgICog
UmVnaXN0ZXJzIGEgY29udGFpbmVyIG5vZGUgaW50byB3aGljaCBSZWFjdCBjb21wb25lbnRzIHdp
bGwgYmUgcmVuZGVyZWQuCisgICAqIFRoaXMgYWxzbyBjcmVhdGVzIHRoZSAicmVhdFJvb3QiIElE
IHRoYXQgd2lsbCBiZSBhc3NpZ25lZCB0byB0aGUgZWxlbWVudAorICAgKiByZW5kZXJlZCB3aXRo
aW4uCisgICAqCisgICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIERPTSBlbGVtZW50
IHRvIHJlZ2lzdGVyIGFzIGEgY29udGFpbmVyLgorICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSAi
cmVhY3RSb290IiBJRCBvZiBlbGVtZW50cyByZW5kZXJlZCB3aXRoaW4uCisgICAqLworICByZWdp
c3RlckNvbnRhaW5lcjogZnVuY3Rpb24oY29udGFpbmVyKSB7CisgICAgdmFyIHJlYWN0Um9vdElE
ID0gZ2V0UmVhY3RSb290SUQoY29udGFpbmVyKTsKKyAgICBpZiAocmVhY3RSb290SUQpIHsKKyAg
ICAgIC8vIElmIG9uZSBleGlzdHMsIG1ha2Ugc3VyZSBpdCBpcyBhIHZhbGlkICJyZWFjdFJvb3Qi
IElELgorICAgICAgcmVhY3RSb290SUQgPSBSZWFjdEluc3RhbmNlSGFuZGxlcy5nZXRSZWFjdFJv
b3RJREZyb21Ob2RlSUQocmVhY3RSb290SUQpOworICAgIH0KKyAgICBpZiAoIXJlYWN0Um9vdElE
KSB7CisgICAgICAvLyBObyB2YWxpZCAicmVhY3RSb290IiBJRCBmb3VuZCwgY3JlYXRlIG9uZS4K
KyAgICAgIHJlYWN0Um9vdElEID0gUmVhY3RJbnN0YW5jZUhhbmRsZXMuY3JlYXRlUmVhY3RSb290
SUQoKTsKKyAgICB9CisgICAgY29udGFpbmVyc0J5UmVhY3RSb290SURbcmVhY3RSb290SURdID0g
Y29udGFpbmVyOworICAgIHJldHVybiByZWFjdFJvb3RJRDsKKyAgfSwKKworICAvKioKKyAgICog
VW5tb3VudHMgYW5kIGRlc3Ryb3lzIHRoZSBSZWFjdCBjb21wb25lbnQgcmVuZGVyZWQgaW4gdGhl
IGBjb250YWluZXJgLgorICAgKgorICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGNvbnRhaW5lciBE
T00gZWxlbWVudCBjb250YWluaW5nIGEgUmVhY3QgY29tcG9uZW50LgorICAgKiBAcmV0dXJuIHti
b29sZWFufSBUcnVlIGlmIGEgY29tcG9uZW50IHdhcyBmb3VuZCBpbiBhbmQgdW5tb3VudGVkIGZy
b20KKyAgICogICAgICAgICAgICAgICAgICAgYGNvbnRhaW5lcmAKKyAgICovCisgIHVubW91bnRB
bmRSZWxlYXNlUmVhY3RSb290Tm9kZTogZnVuY3Rpb24oY29udGFpbmVyKSB7CisgICAgdmFyIHJl
YWN0Um9vdElEID0gZ2V0UmVhY3RSb290SUQoY29udGFpbmVyKTsKKyAgICB2YXIgY29tcG9uZW50
ID0gaW5zdGFuY2VCeVJlYWN0Um9vdElEW3JlYWN0Um9vdElEXTsKKyAgICBpZiAoIWNvbXBvbmVu
dCkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBjb21wb25lbnQudW5tb3VudENv
bXBvbmVudEZyb21Ob2RlKGNvbnRhaW5lcik7CisgICAgZGVsZXRlIGluc3RhbmNlQnlSZWFjdFJv
b3RJRFtyZWFjdFJvb3RJRF07CisgICAgZGVsZXRlIGNvbnRhaW5lcnNCeVJlYWN0Um9vdElEW3Jl
YWN0Um9vdElEXTsKKyAgICBpZiAodHJ1ZSkgeworICAgICAgZGVsZXRlIHJvb3RFbGVtZW50c0J5
UmVhY3RSb290SURbcmVhY3RSb290SURdOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKKyAgfSwK
KworICAvKioKKyAgICogRmluZHMgdGhlIGNvbnRhaW5lciBET00gZWxlbWVudCB0aGF0IGNvbnRh
aW5zIFJlYWN0IGNvbXBvbmVudCB0byB3aGljaCB0aGUKKyAgICogc3VwcGxpZWQgRE9NIGBpZGAg
YmVsb25ncy4KKyAgICoKKyAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFRoZSBJRCBvZiBhbiBlbGVt
ZW50IHJlbmRlcmVkIGJ5IGEgUmVhY3QgY29tcG9uZW50LgorICAgKiBAcmV0dXJuIHs/RE9NRWxl
bWVudH0gRE9NIGVsZW1lbnQgdGhhdCBjb250YWlucyB0aGUgYGlkYC4KKyAgICovCisgIGZpbmRS
ZWFjdENvbnRhaW5lckZvcklEOiBmdW5jdGlvbihpZCkgeworICAgIHZhciByZWFjdFJvb3RJRCA9
IFJlYWN0SW5zdGFuY2VIYW5kbGVzLmdldFJlYWN0Um9vdElERnJvbU5vZGVJRChpZCk7CisgICAg
dmFyIGNvbnRhaW5lciA9IGNvbnRhaW5lcnNCeVJlYWN0Um9vdElEW3JlYWN0Um9vdElEXTsKKwor
ICAgIGlmICh0cnVlKSB7CisgICAgICB2YXIgcm9vdEVsZW1lbnQgPSByb290RWxlbWVudHNCeVJl
YWN0Um9vdElEW3JlYWN0Um9vdElEXTsKKyAgICAgIGlmIChyb290RWxlbWVudCAmJiByb290RWxl
bWVudC5wYXJlbnROb2RlICE9PSBjb250YWluZXIpIHsKKyAgICAgICAgaW52YXJpYW50KAorICAg
ICAgICAgIC8vIENhbGwgcmF3R2V0SUQgaGVyZSBiZWNhdXNlIGdldElEIGNhbGxzIGlzVmFsaWQg
d2hpY2ggY2FsbHMKKyAgICAgICAgICAvLyBmaW5kUmVhY3RDb250YWluZXJGb3JJRCAodGhpcyBm
dW5jdGlvbikuCisgICAgICAgICAgUmVhY3RJRC5yYXdHZXRJRChyb290RWxlbWVudCkgPT09IHJl
YWN0Um9vdElELAorICAgICAgICAgICdSZWFjdE1vdW50OiBSb290IGVsZW1lbnQgSUQgZGlmZmVy
ZWQgZnJvbSByZWFjdFJvb3RJRC4nCisgICAgICAgICk7CisKKyAgICAgICAgdmFyIGNvbnRhaW5l
ckNoaWxkID0gY29udGFpbmVyLmZpcnN0Q2hpbGQ7CisgICAgICAgIGlmIChjb250YWluZXJDaGls
ZCAmJgorICAgICAgICAgICAgcmVhY3RSb290SUQgPT09IFJlYWN0SUQucmF3R2V0SUQoY29udGFp
bmVyQ2hpbGQpKSB7CisgICAgICAgICAgLy8gSWYgdGhlIGNvbnRhaW5lciBoYXMgYSBuZXcgY2hp
bGQgd2l0aCB0aGUgc2FtZSBJRCBhcyB0aGUgb2xkCisgICAgICAgICAgLy8gcm9vdCBlbGVtZW50
LCB0aGVuIHJvb3RFbGVtZW50c0J5UmVhY3RSb290SURbcmVhY3RSb290SURdIGlzCisgICAgICAg
ICAgLy8ganVzdCBzdGFsZSBhbmQgbmVlZHMgdG8gYmUgdXBkYXRlZC4gVGhlIGNhc2UgdGhhdCBk
ZXNlcnZlcyBhCisgICAgICAgICAgLy8gd2FybmluZyBpcyB3aGVuIHRoZSBjb250YWluZXIgaXMg
ZW1wdHkuCisgICAgICAgICAgcm9vdEVsZW1lbnRzQnlSZWFjdFJvb3RJRFtyZWFjdFJvb3RJRF0g
PSBjb250YWluZXJDaGlsZDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBjb25zb2xlLndh
cm4oCisgICAgICAgICAgICAnUmVhY3RNb3VudDogUm9vdCBlbGVtZW50IGhhcyBiZWVuIHJlbW92
ZWQgZnJvbSBpdHMgb3JpZ2luYWwgJyArCisgICAgICAgICAgICAnY29udGFpbmVyLiBOZXcgY29u
dGFpbmVyOicsIHJvb3RFbGVtZW50LnBhcmVudE5vZGUKKyAgICAgICAgICApOworICAgICAgICB9
CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGNvbnRhaW5lcjsKKyAgfSwKKworICAvKioK
KyAgICogRmluZHMgYW4gZWxlbWVudCByZW5kZXJlZCBieSBSZWFjdCB3aXRoIHRoZSBzdXBwbGll
ZCBJRC4KKyAgICoKKyAgICogQHBhcmFtIHtzdHJpbmd9IGlkIElEIG9mIGEgRE9NIG5vZGUgaW4g
dGhlIFJlYWN0IGNvbXBvbmVudC4KKyAgICogQHJldHVybiB7RE9NRWxlbWVudH0gUm9vdCBET00g
bm9kZSBvZiB0aGUgUmVhY3QgY29tcG9uZW50LgorICAgKi8KKyAgZmluZFJlYWN0Tm9kZUJ5SUQ6
IGZ1bmN0aW9uKGlkKSB7CisgICAgdmFyIHJlYWN0Um9vdCA9IFJlYWN0TW91bnQuZmluZFJlYWN0
Q29udGFpbmVyRm9ySUQoaWQpOworICAgIHJldHVybiBSZWFjdEluc3RhbmNlSGFuZGxlcy5maW5k
Q29tcG9uZW50Um9vdChyZWFjdFJvb3QsIGlkKTsKKyAgfQorCit9OworCittb2R1bGUuZXhwb3J0
cyA9IFJlYWN0TW91bnQ7CisKK30pKCkKK30seyIuLyQiOjEsIi4vUmVhY3RFdmVudEVtaXR0ZXIi
OjMzLCIuL1JlYWN0RXZlbnRUb3BMZXZlbENhbGxiYWNrIjozNCwiLi9SZWFjdElEIjozNSwiLi9S
ZWFjdEluc3RhbmNlSGFuZGxlcyI6MzcsIi4vaW52YXJpYW50Ijo3NX1dLDM5OltmdW5jdGlvbihy
ZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKyhmdW5jdGlvbigpey8qKgorICogQ29weXJpZ2h0IDIw
MTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vu
c2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlz
IGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkg
b2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hl
Lm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBs
aWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1
dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMs
CisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVy
IGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmlj
IGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVy
IHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBSZWFjdE11bHRpQ2hpbGQKKyAq
LworCisidXNlIHN0cmljdCI7CisKK3ZhciBSZWFjdENvbXBvbmVudCA9IHJlcXVpcmUoIi4vUmVh
Y3RDb21wb25lbnQiKTsKKworLyoqCisgKiBHaXZlbiBhIGBjdXJDaGlsZGAgYW5kIGBuZXdDaGls
ZGAsIGRldGVybWluZXMgaWYgYGN1ckNoaWxkYCBzaG91bGQgYmUgbWFuYWdlZAorICogYXMgaXQg
ZXhpc3RzLCBhcyBvcHBvc2VkIHRvIGJlaW5nIGRlc3Ryb3llZCBhbmQvb3IgcmVwbGFjZWQuCisg
KiBAcGFyYW0gez9SZWFjdENvbXBvbmVudH0gY3VyQ2hpbGQKKyAqIEBwYXJhbSB7P1JlYWN0Q29t
cG9uZW50fSBuZXdDaGlsZAorICogQHJldHVybiB7IWJvb2xlYW59IFdoZXRoZXIgb3Igbm90IGBj
dXJDaGlsZGAgc2hvdWxkIGJlIHVwZGF0ZWQgd2l0aAorICogYG5ld0NoaWxkYCdzIHByb3BzCisg
Ki8KK2Z1bmN0aW9uIHNob3VsZE1hbmFnZUV4aXN0aW5nKGN1ckNoaWxkLCBuZXdDaGlsZCkgewor
ICByZXR1cm4gY3VyQ2hpbGQgJiYgbmV3Q2hpbGQgJiYgY3VyQ2hpbGQuY29uc3RydWN0b3IgPT09
IG5ld0NoaWxkLmNvbnN0cnVjdG9yOworfQorCisvKioKKyAqIGBSZWFjdE11bHRpQ2hpbGRgIHBy
b3ZpZGVzIGNvbW1vbiBmdW5jdGlvbmFsaXR5IGZvciBjb21wb25lbnRzIHRoYXQgaGF2ZQorICog
bXVsdGlwbGUgY2hpbGRyZW4uIFN0YW5kYXJkIGBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudGBzIGRv
IG5vdCBjdXJyZW50bHkgaGF2ZQorICogbXVsdGlwbGUgY2hpbGRyZW4uIGBSZWFjdE5hdGl2ZUNv
bXBvbmVudGBzIGRvLCBob3dldmVyLiBPdGhlciBzcGVjaWFsbHkKKyAqIHJlY29uY2lsZWQgY29t
cG9uZW50cyB3aWxsIGFsc28gaGF2ZSBtdWx0aXBsZSBjaGlsZHJlbi4gQ29udGFpbnMgdGhyZWUK
KyAqIGludGVybmFsbHkgdXNlZCBwcm9wZXJ0aWVzIHRoYXQgYXJlIHVzZWQgdG8ga2VlcCB0cmFj
ayBvZiBzdGF0ZSB0aHJvdWdob3V0CisgKiB0aGUgYHVwZGF0ZU11bHRpQ2hpbGRgIHByb2Nlc3Mu
CisgKgorICogQGNsYXNzIFJlYWN0TXVsdGlDaGlsZAorICovCisKKy8qKgorICogQGxlbmRzIGBS
ZWFjdE11bHRpQ2hpbGRNaXhpbmAuCisgKi8KK3ZhciBSZWFjdE11bHRpQ2hpbGRNaXhpbiA9IHsK
KworICBlbnF1ZXVlTWFya3VwQXQ6IGZ1bmN0aW9uKG1hcmt1cCwgaW5zZXJ0QXQpIHsKKyAgICB0
aGlzLmRvbU9wZXJhdGlvbnMgPSB0aGlzLmRvbU9wZXJhdGlvbnMgfHwgW107CisgICAgdGhpcy5k
b21PcGVyYXRpb25zLnB1c2goe2luc2VydE1hcmt1cDogbWFya3VwLCBmaW5hbEluZGV4OiBpbnNl
cnRBdH0pOworICB9LAorCisgIGVucXVldWVNb3ZlOiBmdW5jdGlvbihvcmlnaW5hbEluZGV4LCBm
aW5hbEluZGV4KSB7CisgICAgdGhpcy5kb21PcGVyYXRpb25zID0gdGhpcy5kb21PcGVyYXRpb25z
IHx8IFtdOworICAgIHRoaXMuZG9tT3BlcmF0aW9ucy5wdXNoKHttb3ZlRnJvbTogb3JpZ2luYWxJ
bmRleCwgZmluYWxJbmRleDogZmluYWxJbmRleH0pOworICB9LAorCisgIGVucXVldWVVbm1vdW50
Q2hpbGRCeU5hbWU6IGZ1bmN0aW9uKG5hbWUsIHJlbW92ZUNoaWxkKSB7CisgICAgaWYgKFJlYWN0
Q29tcG9uZW50LmlzVmFsaWRDb21wb25lbnQocmVtb3ZlQ2hpbGQpKSB7CisgICAgICB0aGlzLmRv
bU9wZXJhdGlvbnMgPSB0aGlzLmRvbU9wZXJhdGlvbnMgfHwgW107CisgICAgICB0aGlzLmRvbU9w
ZXJhdGlvbnMucHVzaCh7cmVtb3ZlQXQ6IHJlbW92ZUNoaWxkLl9kb21JbmRleH0pOworICAgICAg
cmVtb3ZlQ2hpbGQudW5tb3VudENvbXBvbmVudCAmJiByZW1vdmVDaGlsZC51bm1vdW50Q29tcG9u
ZW50KCk7CisgICAgICBkZWxldGUgdGhpcy5fcmVuZGVyZWRDaGlsZHJlbltuYW1lXTsKKyAgICB9
CisgIH0sCisKKyAgLyoqCisgICAqIFByb2Nlc3MgYW55IHBlbmRpbmcgRE9NIG9wZXJhdGlvbnMg
dGhhdCBoYXZlIGJlZW4gYWNjdW11bGF0ZWQgd2hlbiB1cGRhdGluZworICAgKiB0aGUgVUkuIEJ5
IGRlZmF1bHQsIHdlIGV4ZWN1dGUgdGhlIGluamVjdGVkIGBET01JRE9wZXJhdGlvbnNgIG1vZHVs
ZSdzCisgICAqIGBtYW5hZ2VDaGlsZHJlbkJ5UGFyZW50SURgIHdoaWNoIGRvZXMgZXhlY3V0ZXMg
dGhlIERPTSBvcGVyYXRpb25zIHdpdGhvdXQKKyAgICogYW55IGFuaW1hdGlvbi4gSXQgY2FuIGJl
IHVzZWQgYXMgYSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gZm9yIHNwZWNpYWwKKyAgICogYW5p
bWF0aW9uIGJhc2VkIGltcGxlbWVudGF0aW9ucy4KKyAgICoKKyAgICogQGFic3RyYWN0CisgICAq
LworICBwcm9jZXNzQ2hpbGRET01PcGVyYXRpb25zUXVldWU6IGZ1bmN0aW9uKCkgeworICAgIGlm
ICh0aGlzLmRvbU9wZXJhdGlvbnMpIHsKKyAgICAgIFJlYWN0Q29tcG9uZW50LkRPTUlET3BlcmF0
aW9ucworICAgICAgICAubWFuYWdlQ2hpbGRyZW5CeVBhcmVudElEKHRoaXMuX3Jvb3ROb2RlSUQs
IHRoaXMuZG9tT3BlcmF0aW9ucyk7CisgICAgICB0aGlzLmRvbU9wZXJhdGlvbnMgPSBudWxsOwor
ICAgIH0KKyAgfSwKKworICB1bm1vdW50TXVsdGlDaGlsZDogZnVuY3Rpb24oKSB7CisgICAgdmFy
IHJlbmRlcmVkQ2hpbGRyZW4gPSB0aGlzLl9yZW5kZXJlZENoaWxkcmVuOworICAgIGZvciAodmFy
IG5hbWUgaW4gcmVuZGVyZWRDaGlsZHJlbikgeworICAgICAgaWYgKHJlbmRlcmVkQ2hpbGRyZW4u
aGFzT3duUHJvcGVydHkobmFtZSkgJiYgcmVuZGVyZWRDaGlsZHJlbltuYW1lXSkgeworICAgICAg
ICB2YXIgcmVuZGVyZWRDaGlsZCA9IHJlbmRlcmVkQ2hpbGRyZW5bbmFtZV07CisgICAgICAgIHJl
bmRlcmVkQ2hpbGQudW5tb3VudENvbXBvbmVudCAmJiByZW5kZXJlZENoaWxkLnVubW91bnRDb21w
b25lbnQoKTsKKyAgICAgIH0KKyAgICB9CisgICAgdGhpcy5fcmVuZGVyZWRDaGlsZHJlbiA9IG51
bGw7CisgIH0sCisKKyAgLyoqCisgICAqIEdlbmVyYXRlcyBtYXJrdXAgZm9yIGEgY29tcG9uZW50
IHRoYXQgaG9sZHMgbXVsdGlwbGUgY2hpbGRyZW4uICN0b2RvOiBBbGxvdworICAgKiBhbGwgYFJl
YWN0TXVsdGlDaGlsZE1peGluYHMgdG8gc3VwcG9ydCBoYXZpbmcgYXJyYXlzIG9mIGNoaWxkcmVu
IHdpdGhvdXQgYQorICAgKiBjb250YWluZXIgbm9kZS4gVGhpcyBjdXJyZW50IGltcGxlbWVudGF0
aW9uIG1heSBhc3N1bWUgdGhhdCBjaGlsZHJlbiBleGlzdAorICAgKiBhdCBkb21JbmRpY2VzIFsw
LCBwYXJlbnROb2RlLmxlbmd0aF0uCisgICAqCisgICAqIEhhcyBzaWRlIGVmZmVjdHMgb2YgKGxp
a2VseSkgY2F1c2luZyBldmVudHMgdG8gYmUgcmVnaXN0ZXJlZC4gQWxzbywgZXZlcnkKKyAgICog
Y29tcG9uZW50IGluc3RhbmNlIG1heSBvbmx5IGJlIHJlbmRlcmVkIG9uY2UuCisgICAqCisgICAq
IEBwYXJhbSB7P09iamVjdH0gY2hpbGRyZW4gRmxhdHRlbmVkIGNoaWxkcmVuIG9iamVjdC4KKyAg
ICogQHJldHVybiB7IVN0cmluZ30gVGhlIHJlbmRlcmVkIG1hcmt1cC4KKyAgICovCisgIG1vdW50
TXVsdGlDaGlsZDogZnVuY3Rpb24oY2hpbGRyZW4sIHRyYW5zYWN0aW9uKSB7CisgICAgdmFyIGFj
Y3VtID0gJyc7CisgICAgdmFyIGluZGV4ID0gMDsKKyAgICBmb3IgKHZhciBuYW1lIGluIGNoaWxk
cmVuKSB7CisgICAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltuYW1lXTsKKyAgICAgIGlmIChjaGls
ZHJlbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiBjaGlsZCkgeworICAgICAgICBhY2N1bSArPSBj
aGlsZC5tb3VudENvbXBvbmVudCgKKyAgICAgICAgICB0aGlzLl9yb290Tm9kZUlEICsgJy4nICsg
bmFtZSwKKyAgICAgICAgICB0cmFuc2FjdGlvbgorICAgICAgICApOworICAgICAgICBjaGlsZC5f
ZG9tSW5kZXggPSBpbmRleDsKKyAgICAgICAgaW5kZXgrKzsKKyAgICAgIH0KKyAgICB9CisgICAg
dGhpcy5fcmVuZGVyZWRDaGlsZHJlbiA9IGNoaWxkcmVuOyAvLyBjaGlsZHJlbiBhcmUgaW4ganVz
dCB0aGUgcmlnaHQgZm9ybSEKKyAgICB0aGlzLmRvbU9wZXJhdGlvbnMgPSBudWxsOworICAgIHJl
dHVybiBhY2N1bTsKKyAgfSwKKworICAvKioKKyAgICogUmVjb25jaWxlcyBuZXcgY2hpbGRyZW4g
d2l0aCBvbGQgY2hpbGRyZW4gaW4gdGhyZWUgcGhhc2VzLgorICAgKgorICAgKiAtIEFkZHMgbmV3
IGNvbnRlbnQgd2hpbGUgdXBkYXRpbmcgZXhpc3RpbmcgY2hpbGRyZW4gdGhhdCBzaG91bGQgcmVt
YWluLgorICAgKiAtIFJlbW92ZSBjaGlsZHJlbiB0aGF0IGFyZSBubyBsb25nZXIgcHJlc2VudCBp
biB0aGUgbmV4dCBjaGlsZHJlbi4KKyAgICogLSBBcyBhIHZlcnkgbGFzdCBzdGVwLCBtb3ZlcyBl
eGlzdGluZyBkb20gc3RydWN0dXJlcyBhcm91bmQuCisgICAqIC0gKENvbW1lbnQgMSkgYGN1ckNo
aWxkcmVuRE9NSW5kZXhgIGlzIHRoZSBsYXJnZXN0IGluZGV4IG9mIHRoZSBjdXJyZW50CisgICAq
ICAgcmVuZGVyZWQgY2hpbGRyZW4gdGhhdCBhcHBlYXJzIGluIHRoZSBuZXh0IGNoaWxkcmVuIGFu
ZCBkaWQgbm90IG5lZWQgdG8KKyAgICogICBiZSAibW92ZWQiLgorICAgKiAtIChDb21tZW50IDIp
IFRoaXMgaXMgdGhlIGtleSBpbnNpZ2h0LiBJZiBhbnkgbm9uLXJlbW92ZWQgY2hpbGQncyBwcmV2
aW91cworICAgKiAgIGluZGV4IGlzIGxlc3MgdGhhbiBgY3VyQ2hpbGRyZW5ET01JbmRleGAgaXQg
bXVzdCBiZSBtb3ZlZC4KKyAgICoKKyAgICogQHBhcmFtIHs/T2JqZWN0fSBjaGlsZHJlbiBGbGF0
dGVuZWQgY2hpbGRyZW4gb2JqZWN0LgorICAgKi8KKyAgdXBkYXRlTXVsdGlDaGlsZDogZnVuY3Rp
b24obmV4dENoaWxkcmVuLCB0cmFuc2FjdGlvbikgeworICAgIGlmICghbmV4dENoaWxkcmVuICYm
ICF0aGlzLl9yZW5kZXJlZENoaWxkcmVuKSB7CisgICAgICByZXR1cm47CisgICAgfSBlbHNlIGlm
IChuZXh0Q2hpbGRyZW4gJiYgIXRoaXMuX3JlbmRlcmVkQ2hpbGRyZW4pIHsKKyAgICAgIHRoaXMu
X3JlbmRlcmVkQ2hpbGRyZW4gPSB7fTsgLy8gbGF6aWx5IGFsbG9jYXRlIGJhY2tpbmcgc3RvcmUg
d2l0aCBub3RoaW5nCisgICAgfSBlbHNlIGlmICghbmV4dENoaWxkcmVuICYmIHRoaXMuX3JlbmRl
cmVkQ2hpbGRyZW4pIHsKKyAgICAgIG5leHRDaGlsZHJlbiA9IHt9OworICAgIH0KKyAgICB2YXIg
cm9vdERvbUlkRG90ID0gdGhpcy5fcm9vdE5vZGVJRCArICcuJzsKKyAgICB2YXIgbWFya3VwQnVm
ZmVyID0gbnVsbDsgIC8vIEFjY3VtdWxhdGUgYWRqYWNlbnQgbmV3IGNoaWxkcmVuIG1hcmt1cC4K
KyAgICB2YXIgbnVtUGVuZGluZ0luc2VydCA9IDA7IC8vIEhvdyBtYW55IHJvb3Qgbm9kZXMgYXJl
IHdhaXRpbmcgaW4gbWFya3VwQnVmZmVyCisgICAgdmFyIGxvb3BEb21JbmRleCA9IDA7ICAgICAv
LyBJbmRleCBvZiBsb29wIHRocm91Z2ggbmV3IGNoaWxkcmVuLgorICAgIHZhciBjdXJDaGlsZHJl
bkRPTUluZGV4ID0gMDsgIC8vIFNlZSAoQ29tbWVudCAxKQorICAgIGZvciAodmFyIG5hbWUgaW4g
bmV4dENoaWxkcmVuKSB7CisgICAgICBpZiAoIW5leHRDaGlsZHJlbi5oYXNPd25Qcm9wZXJ0eShu
YW1lKSkge2NvbnRpbnVlO30KKyAgICAgIHZhciBjdXJDaGlsZCA9IHRoaXMuX3JlbmRlcmVkQ2hp
bGRyZW5bbmFtZV07CisgICAgICB2YXIgbmV4dENoaWxkID0gbmV4dENoaWxkcmVuW25hbWVdOwor
ICAgICAgaWYgKHNob3VsZE1hbmFnZUV4aXN0aW5nKGN1ckNoaWxkLCBuZXh0Q2hpbGQpKSB7Cisg
ICAgICAgIGlmIChtYXJrdXBCdWZmZXIpIHsKKyAgICAgICAgICB0aGlzLmVucXVldWVNYXJrdXBB
dChtYXJrdXBCdWZmZXIsIGxvb3BEb21JbmRleCAtIG51bVBlbmRpbmdJbnNlcnQpOworICAgICAg
ICAgIG1hcmt1cEJ1ZmZlciA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgbnVtUGVuZGluZ0lu
c2VydCA9IDA7CisgICAgICAgIGlmIChjdXJDaGlsZC5fZG9tSW5kZXggPCBjdXJDaGlsZHJlbkRP
TUluZGV4KSB7IC8vIChDb21tZW50IDIpCisgICAgICAgICAgdGhpcy5lbnF1ZXVlTW92ZShjdXJD
aGlsZC5fZG9tSW5kZXgsIGxvb3BEb21JbmRleCk7CisgICAgICAgIH0KKyAgICAgICAgY3VyQ2hp
bGRyZW5ET01JbmRleCA9IE1hdGgubWF4KGN1ckNoaWxkLl9kb21JbmRleCwgY3VyQ2hpbGRyZW5E
T01JbmRleCk7CisgICAgICAgIGN1ckNoaWxkLnJlY2VpdmVQcm9wcyhuZXh0Q2hpbGQucHJvcHMs
IHRyYW5zYWN0aW9uKTsKKyAgICAgICAgY3VyQ2hpbGQuX2RvbUluZGV4ID0gbG9vcERvbUluZGV4
OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGN1ckNoaWxkKSB7ICAgICAgICAgICAgICAg
Ly8gIXNob3VsZFVwZGF0ZSAmJiBjdXJDaGlsZCA9PiBkZWxldGUKKyAgICAgICAgICB0aGlzLmVu
cXVldWVVbm1vdW50Q2hpbGRCeU5hbWUobmFtZSwgY3VyQ2hpbGQpOworICAgICAgICAgIGN1ckNo
aWxkcmVuRE9NSW5kZXggPQorICAgICAgICAgICAgTWF0aC5tYXgoY3VyQ2hpbGQuX2RvbUluZGV4
LCBjdXJDaGlsZHJlbkRPTUluZGV4KTsKKyAgICAgICAgfQorICAgICAgICBpZiAobmV4dENoaWxk
KSB7ICAgICAgICAgICAgICAvLyAhc2hvdWxkVXBkYXRlICYmIG5leHRDaGlsZCA9PiBpbnNlcnQK
KyAgICAgICAgICB0aGlzLl9yZW5kZXJlZENoaWxkcmVuW25hbWVdID0gbmV4dENoaWxkOworICAg
ICAgICAgIHZhciBuZXh0TWFya3VwID0KKyAgICAgICAgICAgIG5leHRDaGlsZC5tb3VudENvbXBv
bmVudChyb290RG9tSWREb3QgKyBuYW1lLCB0cmFuc2FjdGlvbik7CisgICAgICAgICAgbWFya3Vw
QnVmZmVyID0gbWFya3VwQnVmZmVyID8gbWFya3VwQnVmZmVyICsgbmV4dE1hcmt1cCA6IG5leHRN
YXJrdXA7CisgICAgICAgICAgbnVtUGVuZGluZ0luc2VydCsrOworICAgICAgICAgIG5leHRDaGls
ZC5fZG9tSW5kZXggPSBsb29wRG9tSW5kZXg7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGxv
b3BEb21JbmRleCA9IG5leHRDaGlsZCA/IGxvb3BEb21JbmRleCArIDEgOiBsb29wRG9tSW5kZXg7
CisgICAgfQorICAgIGlmIChtYXJrdXBCdWZmZXIpIHsKKyAgICAgIHRoaXMuZW5xdWV1ZU1hcmt1
cEF0KG1hcmt1cEJ1ZmZlciwgbG9vcERvbUluZGV4IC0gbnVtUGVuZGluZ0luc2VydCk7CisgICAg
fQorICAgIGZvciAodmFyIGNoaWxkTmFtZSBpbiB0aGlzLl9yZW5kZXJlZENoaWxkcmVuKSB7IC8v
IGZyb20gb3RoZXIgZGlyZWN0aW9uCisgICAgICBpZiAoIXRoaXMuX3JlbmRlcmVkQ2hpbGRyZW4u
aGFzT3duUHJvcGVydHkoY2hpbGROYW1lKSkgeyBjb250aW51ZTsgfQorICAgICAgdmFyIGNoaWxk
ID0gdGhpcy5fcmVuZGVyZWRDaGlsZHJlbltjaGlsZE5hbWVdOworICAgICAgaWYgKGNoaWxkICYm
ICFuZXh0Q2hpbGRyZW5bY2hpbGROYW1lXSkgeworICAgICAgICB0aGlzLmVucXVldWVVbm1vdW50
Q2hpbGRCeU5hbWUoY2hpbGROYW1lLCBjaGlsZCk7CisgICAgICB9CisgICAgfQorICAgIHRoaXMu
cHJvY2Vzc0NoaWxkRE9NT3BlcmF0aW9uc1F1ZXVlKCk7CisgIH0KK307CisKK3ZhciBSZWFjdE11
bHRpQ2hpbGQgPSB7CisgIE1peGluOiBSZWFjdE11bHRpQ2hpbGRNaXhpbgorfTsKKworbW9kdWxl
LmV4cG9ydHMgPSBSZWFjdE11bHRpQ2hpbGQ7CisKK30pKCkKK30seyIuL1JlYWN0Q29tcG9uZW50
IjoyMn1dLDQwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29w
eXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBh
Y2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90
IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAq
IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93
d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJl
ZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAq
IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJ
UyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lO
RCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhl
IHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRp
b25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBSZWFjdE5hdGl2
ZUNvbXBvbmVudAorICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHkKKyAqLworCisidXNlIHN0cmlj
dCI7CisKK3ZhciBDU1NQcm9wZXJ0eU9wZXJhdGlvbnMgPSByZXF1aXJlKCIuL0NTU1Byb3BlcnR5
T3BlcmF0aW9ucyIpOwordmFyIERPTVByb3BlcnR5ID0gcmVxdWlyZSgiLi9ET01Qcm9wZXJ0eSIp
OwordmFyIERPTVByb3BlcnR5T3BlcmF0aW9ucyA9IHJlcXVpcmUoIi4vRE9NUHJvcGVydHlPcGVy
YXRpb25zIik7Cit2YXIgUmVhY3RDb21wb25lbnQgPSByZXF1aXJlKCIuL1JlYWN0Q29tcG9uZW50
Iik7Cit2YXIgUmVhY3RFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIuL1JlYWN0RXZlbnRFbWl0dGVy
Iik7Cit2YXIgUmVhY3RNdWx0aUNoaWxkID0gcmVxdWlyZSgiLi9SZWFjdE11bHRpQ2hpbGQiKTsK
K3ZhciBSZWFjdElEID0gcmVxdWlyZSgiLi9SZWFjdElEIik7CisKK3ZhciBlc2NhcGVUZXh0Rm9y
QnJvd3NlciA9IHJlcXVpcmUoIi4vZXNjYXBlVGV4dEZvckJyb3dzZXIiKTsKK3ZhciBmbGF0dGVu
Q2hpbGRyZW4gPSByZXF1aXJlKCIuL2ZsYXR0ZW5DaGlsZHJlbiIpOwordmFyIGludmFyaWFudCA9
IHJlcXVpcmUoIi4vaW52YXJpYW50Iik7Cit2YXIga2V5T2YgPSByZXF1aXJlKCIuL2tleU9mIik7
Cit2YXIgbWVyZ2UgPSByZXF1aXJlKCIuL21lcmdlIik7Cit2YXIgbWl4SW50byA9IHJlcXVpcmUo
Ii4vbWl4SW50byIpOworCit2YXIgcHV0TGlzdGVuZXIgPSBSZWFjdEV2ZW50RW1pdHRlci5wdXRM
aXN0ZW5lcjsKK3ZhciBkZWxldGVMaXN0ZW5lciA9IFJlYWN0RXZlbnRFbWl0dGVyLmRlbGV0ZUxp
c3RlbmVyOwordmFyIHJlZ2lzdHJhdGlvbk5hbWVzID0gUmVhY3RFdmVudEVtaXR0ZXIucmVnaXN0
cmF0aW9uTmFtZXM7CisKKy8vIEZvciBxdWlja2x5IG1hdGNoaW5nIGNoaWxkcmVuIHR5cGUsIHRv
IHRlc3QgaWYgY2FuIGJlIHRyZWF0ZWQgYXMgY29udGVudC4KK3ZhciBDT05URU5UX1RZUEVTID0g
eydzdHJpbmcnOiB0cnVlLCAnbnVtYmVyJzogdHJ1ZX07CisKK3ZhciBEQU5HRVJPVVNMWV9TRVRf
SU5ORVJfSFRNTCA9IGtleU9mKHtkYW5nZXJvdXNseVNldElubmVySFRNTDogbnVsbH0pOwordmFy
IFNUWUxFID0ga2V5T2Yoe3N0eWxlOiBudWxsfSk7CisKKy8qKgorICogQHBhcmFtIHs/b2JqZWN0
fSBwcm9wcworICovCitmdW5jdGlvbiBhc3NlcnRWYWxpZFByb3BzKHByb3BzKSB7CisgIGlmICgh
cHJvcHMpIHsKKyAgICByZXR1cm47CisgIH0KKyAgLy8gTm90ZSB0aGUgdXNlIG9mIGA9PWAgd2hp
Y2ggY2hlY2tzIGZvciBudWxsIG9yIHVuZGVmaW5lZC4KKyAgaW52YXJpYW50KAorICAgIHByb3Bz
LmNoaWxkcmVuID09IG51bGwgfHwgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPT0gbnVs
bCwKKyAgICAnQ2FuIG9ubHkgc2V0IG9uZSBvZiBgY2hpbGRyZW5gIG9yIGBwcm9wcy5kYW5nZXJv
dXNseVNldElubmVySFRNTGAuJworICApOworICBpbnZhcmlhbnQoCisgICAgcHJvcHMuc3R5bGUg
PT0gbnVsbCB8fCB0eXBlb2YgcHJvcHMuc3R5bGUgPT09ICdvYmplY3QnLAorICAgICdUaGUgYHN0
eWxlYCBwcm9wIGV4cGVjdHMgYSBtYXBwaW5nIGZyb20gc3R5bGUgcHJvcGVydGllcyB0byB2YWx1
ZXMsICcgKworICAgICdub3QgYSBzdHJpbmcuJworICApOworfQorCisvKioKKyAqIEBjb25zdHJ1
Y3RvciBSZWFjdE5hdGl2ZUNvbXBvbmVudAorICogQGV4dGVuZHMgUmVhY3RDb21wb25lbnQKKyAq
IEBleHRlbmRzIFJlYWN0TXVsdGlDaGlsZAorICovCitmdW5jdGlvbiBSZWFjdE5hdGl2ZUNvbXBv
bmVudCh0YWcsIG9taXRDbG9zZSkgeworICB0aGlzLl90YWdPcGVuID0gJzwnICsgdGFnOworICB0
aGlzLl90YWdDbG9zZSA9IG9taXRDbG9zZSA/ICcnIDogJzwvJyArIHRhZyArICc+JzsKKyAgdGhp
cy50YWdOYW1lID0gdGFnLnRvVXBwZXJDYXNlKCk7Cit9CisKK1JlYWN0TmF0aXZlQ29tcG9uZW50
Lk1peGluID0geworCisgIC8qKgorICAgKiBHZW5lcmF0ZXMgcm9vdCB0YWcgbWFya3VwIHRoZW4g
cmVjdXJzZXMuIFRoaXMgbWV0aG9kIGhhcyBzaWRlIGVmZmVjdHMgYW5kCisgICAqIGlzIG5vdCBp
ZGVtcG90ZW50LgorICAgKgorICAgKiBAaW50ZXJuYWwKKyAgICogQHBhcmFtIHtzdHJpbmd9IHJv
b3RJRCBUaGUgcm9vdCBET00gSUQgZm9yIHRoaXMgbm9kZS4KKyAgICogQHBhcmFtIHtSZWFjdFJl
Y29uY2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvbgorICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRo
ZSBjb21wdXRlZCBtYXJrdXAuCisgICAqLworICBtb3VudENvbXBvbmVudDogZnVuY3Rpb24ocm9v
dElELCB0cmFuc2FjdGlvbikgeworICAgIFJlYWN0Q29tcG9uZW50Lk1peGluLm1vdW50Q29tcG9u
ZW50LmNhbGwodGhpcywgcm9vdElELCB0cmFuc2FjdGlvbik7CisgICAgYXNzZXJ0VmFsaWRQcm9w
cyh0aGlzLnByb3BzKTsKKyAgICByZXR1cm4gKAorICAgICAgdGhpcy5fY3JlYXRlT3BlblRhZ01h
cmt1cCgpICsKKyAgICAgIHRoaXMuX2NyZWF0ZUNvbnRlbnRNYXJrdXAodHJhbnNhY3Rpb24pICsK
KyAgICAgIHRoaXMuX3RhZ0Nsb3NlCisgICAgKTsKKyAgfSwKKworICAvKioKKyAgICogQ3JlYXRl
cyBtYXJrdXAgZm9yIHRoZSBvcGVuIHRhZyBhbmQgYWxsIGF0dHJpYnV0ZXMuCisgICAqCisgICAq
IFRoaXMgbWV0aG9kIGhhcyBzaWRlIGVmZmVjdHMgYmVjYXVzZSBldmVudHMgZ2V0IHJlZ2lzdGVy
ZWQuCisgICAqCisgICAqIEl0ZXJhdGluZyBvdmVyIG9iamVjdCBwcm9wZXJ0aWVzIGlzIGZhc3Rl
ciB0aGFuIGl0ZXJhdGluZyBvdmVyIGFycmF5cy4KKyAgICogQHNlZSBodHRwOi8vanNwZXJmLmNv
bS9vYmotdnMtYXJyLWl0ZXJhdGlvbgorICAgKgorICAgKiBAcHJpdmF0ZQorICAgKiBAcmV0dXJu
IHtzdHJpbmd9IE1hcmt1cCBvZiBvcGVuaW5nIHRhZy4KKyAgICovCisgIF9jcmVhdGVPcGVuVGFn
TWFya3VwOiBmdW5jdGlvbigpIHsKKyAgICB2YXIgcHJvcHMgPSB0aGlzLnByb3BzOworICAgIHZh
ciByZXQgPSB0aGlzLl90YWdPcGVuOworCisgICAgZm9yICh2YXIgcHJvcEtleSBpbiBwcm9wcykg
eworICAgICAgaWYgKCFwcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkgeworICAgICAgICBj
b250aW51ZTsKKyAgICAgIH0KKyAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wS2V5XTsK
KyAgICAgIGlmIChwcm9wVmFsdWUgPT0gbnVsbCkgeworICAgICAgICBjb250aW51ZTsKKyAgICAg
IH0KKyAgICAgIGlmIChyZWdpc3RyYXRpb25OYW1lc1twcm9wS2V5XSkgeworICAgICAgICBwdXRM
aXN0ZW5lcih0aGlzLl9yb290Tm9kZUlELCBwcm9wS2V5LCBwcm9wVmFsdWUpOworICAgICAgfSBl
bHNlIHsKKyAgICAgICAgaWYgKHByb3BLZXkgPT09IFNUWUxFKSB7CisgICAgICAgICAgaWYgKHBy
b3BWYWx1ZSkgeworICAgICAgICAgICAgcHJvcFZhbHVlID0gcHJvcHMuc3R5bGUgPSBtZXJnZShw
cm9wcy5zdHlsZSk7CisgICAgICAgICAgfQorICAgICAgICAgIHByb3BWYWx1ZSA9IENTU1Byb3Bl
cnR5T3BlcmF0aW9ucy5jcmVhdGVNYXJrdXBGb3JTdHlsZXMocHJvcFZhbHVlKTsKKyAgICAgICAg
fQorICAgICAgICB2YXIgbWFya3VwID0KKyAgICAgICAgICBET01Qcm9wZXJ0eU9wZXJhdGlvbnMu
Y3JlYXRlTWFya3VwRm9yUHJvcGVydHkocHJvcEtleSwgcHJvcFZhbHVlKTsKKyAgICAgICAgaWYg
KG1hcmt1cCkgeworICAgICAgICAgIHJldCArPSAnICcgKyBtYXJrdXA7CisgICAgICAgIH0KKyAg
ICAgIH0KKyAgICB9CisKKyAgICB2YXIgZXNjYXBlZElEID0gZXNjYXBlVGV4dEZvckJyb3dzZXIo
dGhpcy5fcm9vdE5vZGVJRCk7CisgICAgcmV0dXJuIHJldCArICcgJyArIFJlYWN0SUQuQVRUUl9O
QU1FICsgJz0iJyArIGVzY2FwZWRJRCArICciPic7CisgIH0sCisKKyAgLyoqCisgICAqIENyZWF0
ZXMgbWFya3VwIGZvciB0aGUgY29udGVudCBiZXR3ZWVuIHRoZSB0YWdzLgorICAgKgorICAgKiBA
cHJpdmF0ZQorICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0
aW9uCisgICAqIEByZXR1cm4ge3N0cmluZ30gQ29udGVudCBtYXJrdXAuCisgICAqLworICBfY3Jl
YXRlQ29udGVudE1hcmt1cDogZnVuY3Rpb24odHJhbnNhY3Rpb24pIHsKKyAgICAvLyBJbnRlbnRp
b25hbCB1c2Ugb2YgIT0gdG8gYXZvaWQgY2F0Y2hpbmcgemVyby9mYWxzZS4KKyAgICB2YXIgaW5u
ZXJIVE1MID0gdGhpcy5wcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTDsKKyAgICBpZiAoaW5u
ZXJIVE1MICE9IG51bGwpIHsKKyAgICAgIGlmIChpbm5lckhUTUwuX19odG1sICE9IG51bGwpIHsK
KyAgICAgICAgcmV0dXJuIGlubmVySFRNTC5fX2h0bWw7CisgICAgICB9CisgICAgfSBlbHNlIHsK
KyAgICAgIHZhciBjb250ZW50VG9Vc2UgPQorICAgICAgICBDT05URU5UX1RZUEVTW3R5cGVvZiB0
aGlzLnByb3BzLmNoaWxkcmVuXSA/IHRoaXMucHJvcHMuY2hpbGRyZW4gOiBudWxsOworICAgICAg
dmFyIGNoaWxkcmVuVG9Vc2UgPSBjb250ZW50VG9Vc2UgIT0gbnVsbCA/IG51bGwgOiB0aGlzLnBy
b3BzLmNoaWxkcmVuOworICAgICAgaWYgKGNvbnRlbnRUb1VzZSAhPSBudWxsKSB7CisgICAgICAg
IHJldHVybiBlc2NhcGVUZXh0Rm9yQnJvd3Nlcihjb250ZW50VG9Vc2UpOworICAgICAgfSBlbHNl
IGlmIChjaGlsZHJlblRvVXNlICE9IG51bGwpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMubW91bnRN
dWx0aUNoaWxkKAorICAgICAgICAgIGZsYXR0ZW5DaGlsZHJlbihjaGlsZHJlblRvVXNlKSwKKyAg
ICAgICAgICB0cmFuc2FjdGlvbgorICAgICAgICApOworICAgICAgfQorICAgIH0KKyAgICByZXR1
cm4gJyc7CisgIH0sCisKKyAgcmVjZWl2ZVByb3BzOiBmdW5jdGlvbihuZXh0UHJvcHMsIHRyYW5z
YWN0aW9uKSB7CisgICAgYXNzZXJ0VmFsaWRQcm9wcyhuZXh0UHJvcHMpOworICAgIFJlYWN0Q29t
cG9uZW50Lk1peGluLnJlY2VpdmVQcm9wcy5jYWxsKHRoaXMsIG5leHRQcm9wcywgdHJhbnNhY3Rp
b24pOworICB9LAorCisgIC8qKgorICAgKiBVcGRhdGVzIGEgbmF0aXZlIERPTSBjb21wb25lbnQg
YWZ0ZXIgaXQgaGFzIGFscmVhZHkgYmVlbiBhbGxvY2F0ZWQgYW5kCisgICAqIGF0dGFjaGVkIHRv
IHRoZSBET00uIFJlY29uY2lsZXMgdGhlIHJvb3QgRE9NIG5vZGUsIHRoZW4gcmVjdXJzZXMuCisg
ICAqCisgICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb24K
KyAgICogQHBhcmFtIHtvYmplY3R9IHByZXZQcm9wcworICAgKiBAaW50ZXJuYWwKKyAgICogQG92
ZXJyaWRhYmxlCisgICAqLworICB1cGRhdGVDb21wb25lbnQ6IGZ1bmN0aW9uKHRyYW5zYWN0aW9u
LCBwcmV2UHJvcHMpIHsKKyAgICBSZWFjdENvbXBvbmVudC5NaXhpbi51cGRhdGVDb21wb25lbnQu
Y2FsbCh0aGlzLCB0cmFuc2FjdGlvbiwgcHJldlByb3BzKTsKKyAgICB0aGlzLl91cGRhdGVET01Q
cm9wZXJ0aWVzKHByZXZQcm9wcyk7CisgICAgdGhpcy5fdXBkYXRlRE9NQ2hpbGRyZW4ocHJldlBy
b3BzLCB0cmFuc2FjdGlvbik7CisgIH0sCisKKyAgLyoqCisgICAqIFJlY29uY2lsZXMgdGhlIHBy
b3BlcnRpZXMgYnkgZGV0ZWN0aW5nIGRpZmZlcmVuY2VzIGluIHByb3BlcnR5IHZhbHVlcyBhbmQK
KyAgICogdXBkYXRpbmcgdGhlIERPTSBhcyBuZWNlc3NhcnkuIFRoaXMgZnVuY3Rpb24gaXMgcHJv
YmFibHkgdGhlIHNpbmdsZSBtb3N0CisgICAqIGNyaXRpY2FsIHBhdGggZm9yIHBlcmZvcm1hbmNl
IG9wdGltaXphdGlvbi4KKyAgICoKKyAgICogVE9ETzogQmVuY2htYXJrIHdoZXRoZXIgY2hlY2tp
bmcgZm9yIGNoYW5nZWQgdmFsdWVzIGluIG1lbW9yeSBhY3R1YWxseQorICAgKiAgICAgICBpbXBy
b3ZlcyBwZXJmb3JtYW5jZSAoZXNwZWNpYWxseSBzdGF0aWNhbGx5IHBvc2l0aW9uZWQgZWxlbWVu
dHMpLgorICAgKiBUT0RPOiBCZW5jaG1hcmsgdGhlIGVmZmVjdHMgb2YgcHV0dGluZyB0aGlzIGF0
IHRoZSB0b3Agc2luY2UgOTklIG9mIHByb3BzCisgICAqICAgICAgIGRvIG5vdCBjaGFuZ2UgZm9y
IGEgZ2l2ZW4gcmVjb25jaWxpYXRpb24uCisgICAqIFRPRE86IEJlbmNobWFyayBhcmVhcyB0aGF0
IGNhbiBiZSBpbXByb3ZlZCB3aXRoIGNhY2hpbmcuCisgICAqCisgICAqIEBwcml2YXRlCisgICAq
IEBwYXJhbSB7b2JqZWN0fSBsYXN0UHJvcHMKKyAgICovCisgIF91cGRhdGVET01Qcm9wZXJ0aWVz
OiBmdW5jdGlvbihsYXN0UHJvcHMpIHsKKyAgICB2YXIgbmV4dFByb3BzID0gdGhpcy5wcm9wczsK
KyAgICB2YXIgcHJvcEtleTsKKyAgICB2YXIgc3R5bGVOYW1lOworICAgIHZhciBzdHlsZVVwZGF0
ZXM7CisgICAgZm9yIChwcm9wS2V5IGluIGxhc3RQcm9wcykgeworICAgICAgaWYgKG5leHRQcm9w
cy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSB8fAorICAgICAgICAgIWxhc3RQcm9wcy5oYXNPd25Q
cm9wZXJ0eShwcm9wS2V5KSkgeworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICAgIGlm
IChwcm9wS2V5ID09PSBTVFlMRSkgeworICAgICAgICB2YXIgbGFzdFN0eWxlID0gbGFzdFByb3Bz
W3Byb3BLZXldOworICAgICAgICBmb3IgKHN0eWxlTmFtZSBpbiBsYXN0U3R5bGUpIHsKKyAgICAg
ICAgICBpZiAobGFzdFN0eWxlLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpIHsKKyAgICAgICAg
ICAgIHN0eWxlVXBkYXRlcyA9IHN0eWxlVXBkYXRlcyB8fCB7fTsKKyAgICAgICAgICAgIHN0eWxl
VXBkYXRlc1tzdHlsZU5hbWVdID0gJyc7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9
IGVsc2UgaWYgKHByb3BLZXkgPT09IERBTkdFUk9VU0xZX1NFVF9JTk5FUl9IVE1MKSB7CisgICAg
ICAgIC8vIGh0dHA6Ly9qc3BlcmYuY29tL2VtcHR5aW5nLXNwZWVkCisgICAgICAgIFJlYWN0Q29t
cG9uZW50LkRPTUlET3BlcmF0aW9ucy51cGRhdGVUZXh0Q29udGVudEJ5SUQoCisgICAgICAgICAg
dGhpcy5fcm9vdE5vZGVJRCwKKyAgICAgICAgICAnJworICAgICAgICApOworICAgICAgfSBlbHNl
IGlmIChyZWdpc3RyYXRpb25OYW1lc1twcm9wS2V5XSkgeworICAgICAgICBkZWxldGVMaXN0ZW5l
cih0aGlzLl9yb290Tm9kZUlELCBwcm9wS2V5KTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIFJl
YWN0Q29tcG9uZW50LkRPTUlET3BlcmF0aW9ucy5kZWxldGVQcm9wZXJ0eUJ5SUQoCisgICAgICAg
ICAgdGhpcy5fcm9vdE5vZGVJRCwKKyAgICAgICAgICBwcm9wS2V5CisgICAgICAgICk7CisgICAg
ICB9CisgICAgfQorICAgIGZvciAocHJvcEtleSBpbiBuZXh0UHJvcHMpIHsKKyAgICAgIHZhciBu
ZXh0UHJvcCA9IG5leHRQcm9wc1twcm9wS2V5XTsKKyAgICAgIHZhciBsYXN0UHJvcCA9IGxhc3RQ
cm9wc1twcm9wS2V5XTsKKyAgICAgIGlmICghbmV4dFByb3BzLmhhc093blByb3BlcnR5KHByb3BL
ZXkpIHx8IG5leHRQcm9wID09PSBsYXN0UHJvcCkgeworICAgICAgICBjb250aW51ZTsKKyAgICAg
IH0KKyAgICAgIGlmIChwcm9wS2V5ID09PSBTVFlMRSkgeworICAgICAgICBpZiAobmV4dFByb3Ap
IHsKKyAgICAgICAgICBuZXh0UHJvcCA9IG5leHRQcm9wcy5zdHlsZSA9IG1lcmdlKG5leHRQcm9w
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAobGFzdFByb3ApIHsKKyAgICAgICAgICAvLyBVbnNl
dCBzdHlsZXMgb24gYGxhc3RQcm9wYCBidXQgbm90IG9uIGBuZXh0UHJvcGAuCisgICAgICAgICAg
Zm9yIChzdHlsZU5hbWUgaW4gbGFzdFByb3ApIHsKKyAgICAgICAgICAgIGlmIChsYXN0UHJvcC5o
YXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpICYmCisgICAgICAgICAgICAgICAgIW5leHRQcm9wLmhh
c093blByb3BlcnR5KHN0eWxlTmFtZSkpIHsKKyAgICAgICAgICAgICAgc3R5bGVVcGRhdGVzID0g
c3R5bGVVcGRhdGVzIHx8IHt9OworICAgICAgICAgICAgICBzdHlsZVVwZGF0ZXNbc3R5bGVOYW1l
XSA9ICcnOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICAvLyBVcGRhdGUg
c3R5bGVzIHRoYXQgY2hhbmdlZCBzaW5jZSBgbGFzdFByb3BgLgorICAgICAgICAgIGZvciAoc3R5
bGVOYW1lIGluIG5leHRQcm9wKSB7CisgICAgICAgICAgICBpZiAobmV4dFByb3AuaGFzT3duUHJv
cGVydHkoc3R5bGVOYW1lKSAmJgorICAgICAgICAgICAgICAgIGxhc3RQcm9wW3N0eWxlTmFtZV0g
IT09IG5leHRQcm9wW3N0eWxlTmFtZV0pIHsKKyAgICAgICAgICAgICAgc3R5bGVVcGRhdGVzID0g
c3R5bGVVcGRhdGVzIHx8IHt9OworICAgICAgICAgICAgICBzdHlsZVVwZGF0ZXNbc3R5bGVOYW1l
XSA9IG5leHRQcm9wW3N0eWxlTmFtZV07CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgIC8vIFJlbGllcyBvbiBgdXBkYXRlU3R5bGVzQnlJRGAg
bm90IG11dGF0aW5nIGBzdHlsZVVwZGF0ZXNgLgorICAgICAgICAgIHN0eWxlVXBkYXRlcyA9IG5l
eHRQcm9wOworICAgICAgICB9CisgICAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IERBTkdFUk9V
U0xZX1NFVF9JTk5FUl9IVE1MKSB7CisgICAgICAgIHZhciBsYXN0SHRtbCA9IGxhc3RQcm9wICYm
IGxhc3RQcm9wLl9faHRtbDsKKyAgICAgICAgdmFyIG5leHRIdG1sID0gbmV4dFByb3AgJiYgbmV4
dFByb3AuX19odG1sOworICAgICAgICBpZiAobGFzdEh0bWwgIT09IG5leHRIdG1sKSB7CisgICAg
ICAgICAgUmVhY3RDb21wb25lbnQuRE9NSURPcGVyYXRpb25zLnVwZGF0ZUlubmVySFRNTEJ5SUQo
CisgICAgICAgICAgICB0aGlzLl9yb290Tm9kZUlELAorICAgICAgICAgICAgbmV4dFByb3AKKyAg
ICAgICAgICApOworICAgICAgICB9CisgICAgICB9IGVsc2UgaWYgKHJlZ2lzdHJhdGlvbk5hbWVz
W3Byb3BLZXldKSB7CisgICAgICAgIHB1dExpc3RlbmVyKHRoaXMuX3Jvb3ROb2RlSUQsIHByb3BL
ZXksIG5leHRQcm9wKTsKKyAgICAgIH0gZWxzZSBpZiAoCisgICAgICAgICAgRE9NUHJvcGVydHku
aXNTdGFuZGFyZE5hbWVbcHJvcEtleV0gfHwKKyAgICAgICAgICBET01Qcm9wZXJ0eS5pc0N1c3Rv
bUF0dHJpYnV0ZShwcm9wS2V5KSkgeworICAgICAgICBSZWFjdENvbXBvbmVudC5ET01JRE9wZXJh
dGlvbnMudXBkYXRlUHJvcGVydHlCeUlEKAorICAgICAgICAgIHRoaXMuX3Jvb3ROb2RlSUQsCisg
ICAgICAgICAgcHJvcEtleSwKKyAgICAgICAgICBuZXh0UHJvcAorICAgICAgICApOworICAgICAg
fQorICAgIH0KKyAgICBpZiAoc3R5bGVVcGRhdGVzKSB7CisgICAgICBSZWFjdENvbXBvbmVudC5E
T01JRE9wZXJhdGlvbnMudXBkYXRlU3R5bGVzQnlJRCgKKyAgICAgICAgdGhpcy5fcm9vdE5vZGVJ
RCwKKyAgICAgICAgc3R5bGVVcGRhdGVzCisgICAgICApOworICAgIH0KKyAgfSwKKworICAvKioK
KyAgICogUmVjb25jaWxlcyB0aGUgY2hpbGRyZW4gd2l0aCB0aGUgdmFyaW91cyBwcm9wZXJ0aWVz
IHRoYXQgYWZmZWN0IHRoZQorICAgKiBjaGlsZHJlbiBjb250ZW50LgorICAgKgorICAgKiBAcGFy
YW0ge29iamVjdH0gbGFzdFByb3BzCisgICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2Fj
dGlvbn0gdHJhbnNhY3Rpb24KKyAgICovCisgIF91cGRhdGVET01DaGlsZHJlbjogZnVuY3Rpb24o
bGFzdFByb3BzLCB0cmFuc2FjdGlvbikgeworICAgIHZhciBuZXh0UHJvcHMgPSB0aGlzLnByb3Bz
OworCisgICAgdmFyIGxhc3RVc2VkQ29udGVudCA9CisgICAgICBDT05URU5UX1RZUEVTW3R5cGVv
ZiBsYXN0UHJvcHMuY2hpbGRyZW5dID8gbGFzdFByb3BzLmNoaWxkcmVuIDogbnVsbDsKKyAgICB2
YXIgY29udGVudFRvVXNlID0KKyAgICAgIENPTlRFTlRfVFlQRVNbdHlwZW9mIG5leHRQcm9wcy5j
aGlsZHJlbl0gPyBuZXh0UHJvcHMuY2hpbGRyZW4gOiBudWxsOworCisgICAgLy8gTm90ZSB0aGUg
dXNlIG9mIGAhPWAgd2hpY2ggY2hlY2tzIGZvciBudWxsIG9yIHVuZGVmaW5lZC4KKworICAgIHZh
ciBsYXN0VXNlZENoaWxkcmVuID0KKyAgICAgIGxhc3RVc2VkQ29udGVudCAhPSBudWxsID8gbnVs
bCA6IGxhc3RQcm9wcy5jaGlsZHJlbjsKKyAgICB2YXIgY2hpbGRyZW5Ub1VzZSA9IGNvbnRlbnRU
b1VzZSAhPSBudWxsID8gbnVsbCA6IG5leHRQcm9wcy5jaGlsZHJlbjsKKworICAgIGlmIChjb250
ZW50VG9Vc2UgIT0gbnVsbCkgeworICAgICAgdmFyIGNoaWxkcmVuUmVtb3ZlZCA9IGxhc3RVc2Vk
Q2hpbGRyZW4gIT0gbnVsbCAmJiBjaGlsZHJlblRvVXNlID09IG51bGw7CisgICAgICBpZiAoY2hp
bGRyZW5SZW1vdmVkKSB7CisgICAgICAgIHRoaXMudXBkYXRlTXVsdGlDaGlsZChudWxsLCB0cmFu
c2FjdGlvbik7CisgICAgICB9CisgICAgICBpZiAobGFzdFVzZWRDb250ZW50ICE9PSBjb250ZW50
VG9Vc2UpIHsKKyAgICAgICAgUmVhY3RDb21wb25lbnQuRE9NSURPcGVyYXRpb25zLnVwZGF0ZVRl
eHRDb250ZW50QnlJRCgKKyAgICAgICAgICB0aGlzLl9yb290Tm9kZUlELAorICAgICAgICAgICcn
ICsgY29udGVudFRvVXNlCisgICAgICAgICk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
IHZhciBjb250ZW50UmVtb3ZlZCA9IGxhc3RVc2VkQ29udGVudCAhPSBudWxsICYmIGNvbnRlbnRU
b1VzZSA9PSBudWxsOworICAgICAgaWYgKGNvbnRlbnRSZW1vdmVkKSB7CisgICAgICAgIFJlYWN0
Q29tcG9uZW50LkRPTUlET3BlcmF0aW9ucy51cGRhdGVUZXh0Q29udGVudEJ5SUQoCisgICAgICAg
ICAgdGhpcy5fcm9vdE5vZGVJRCwKKyAgICAgICAgICAnJworICAgICAgICApOworICAgICAgfQor
ICAgICAgdGhpcy51cGRhdGVNdWx0aUNoaWxkKGZsYXR0ZW5DaGlsZHJlbihuZXh0UHJvcHMuY2hp
bGRyZW4pLCB0cmFuc2FjdGlvbik7CisgICAgfQorICB9LAorCisgIC8qKgorICAgKiBEZXN0cm95
cyBhbGwgZXZlbnQgcmVnaXN0cmF0aW9ucyBmb3IgdGhpcyBpbnN0YW5jZS4gRG9lcyBub3QgcmVt
b3ZlIGZyb20KKyAgICogdGhlIERPTS4gVGhhdCBtdXN0IGJlIGRvbmUgYnkgdGhlIHBhcmVudC4K
KyAgICoKKyAgICogQGludGVybmFsCisgICAqLworICB1bm1vdW50Q29tcG9uZW50OiBmdW5jdGlv
bigpIHsKKyAgICBSZWFjdEV2ZW50RW1pdHRlci5kZWxldGVBbGxMaXN0ZW5lcnModGhpcy5fcm9v
dE5vZGVJRCk7CisgICAgUmVhY3RDb21wb25lbnQuTWl4aW4udW5tb3VudENvbXBvbmVudC5jYWxs
KHRoaXMpOworICAgIHRoaXMudW5tb3VudE11bHRpQ2hpbGQoKTsKKyAgfQorCit9OworCittaXhJ
bnRvKFJlYWN0TmF0aXZlQ29tcG9uZW50LCBSZWFjdENvbXBvbmVudC5NaXhpbik7CittaXhJbnRv
KFJlYWN0TmF0aXZlQ29tcG9uZW50LCBSZWFjdE5hdGl2ZUNvbXBvbmVudC5NaXhpbik7CittaXhJ
bnRvKFJlYWN0TmF0aXZlQ29tcG9uZW50LCBSZWFjdE11bHRpQ2hpbGQuTWl4aW4pOworCittb2R1
bGUuZXhwb3J0cyA9IFJlYWN0TmF0aXZlQ29tcG9uZW50OworCit9LHsiLi9DU1NQcm9wZXJ0eU9w
ZXJhdGlvbnMiOjMsIi4vRE9NUHJvcGVydHkiOjcsIi4vRE9NUHJvcGVydHlPcGVyYXRpb25zIjo4
LCIuL1JlYWN0Q29tcG9uZW50IjoyMiwiLi9SZWFjdEV2ZW50RW1pdHRlciI6MzMsIi4vUmVhY3RJ
RCI6MzUsIi4vUmVhY3RNdWx0aUNoaWxkIjozOSwiLi9lc2NhcGVUZXh0Rm9yQnJvd3NlciI6NjUs
Ii4vZmxhdHRlbkNoaWxkcmVuIjo2NywiLi9pbnZhcmlhbnQiOjc1LCIuL2tleU9mIjo3OSwiLi9t
ZXJnZSI6ODEsIi4vbWl4SW50byI6ODR9XSw0MTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhw
b3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgorICogTGlj
ZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNl
Iik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdp
dGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2Ug
YXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAq
CisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdy
aXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0
cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENP
TkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUg
dGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lv
bnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBAcHJvdmlk
ZXNNb2R1bGUgUmVhY3RPbkRPTVJlYWR5CisgKi8KKworInVzZSBzdHJpY3QiOworCit2YXIgUG9v
bGVkQ2xhc3MgPSByZXF1aXJlKCIuL1Bvb2xlZENsYXNzIik7CisKK3ZhciBtaXhJbnRvID0gcmVx
dWlyZSgiLi9taXhJbnRvIik7CisKKy8qKgorICogQSBzcGVjaWFsaXplZCBwc2V1ZG8tZXZlbnQg
bW9kdWxlIHRvIGhlbHAga2VlcCB0cmFjayBvZiBjb21wb25lbnRzIHdhaXRpbmcgdG8KKyAqIGJl
IG5vdGlmaWVkIHdoZW4gdGhlaXIgRE9NIHJlcHJlc2VudGF0aW9ucyBhcmUgYXZhaWxhYmxlIGZv
ciB1c2UuCisgKgorICogVGhpcyBpbXBsZW1lbnRzIGBQb29sZWRDbGFzc2AsIHNvIHlvdSBzaG91
bGQgbmV2ZXIgbmVlZCB0byBpbnN0YW50aWF0ZSB0aGlzLgorICogSW5zdGVhZCwgdXNlIGBSZWFj
dE9uRE9NUmVhZHkuZ2V0UG9vbGVkKClgLgorICoKKyAqIEBwYXJhbSB7P2FycmF5PGZ1bmN0aW9u
Pn0gaW5pdGlhbENvbGxlY3Rpb24KKyAqIEBjbGFzcyBSZWFjdE9uRE9NUmVhZHkKKyAqIEBpbXBs
ZW1lbnRzIFBvb2xlZENsYXNzCisgKiBAaW50ZXJuYWwKKyAqLworZnVuY3Rpb24gUmVhY3RPbkRP
TVJlYWR5KGluaXRpYWxDb2xsZWN0aW9uKSB7CisgIHRoaXMuX3F1ZXVlID0gaW5pdGlhbENvbGxl
Y3Rpb24gfHwgbnVsbDsKK30KKworbWl4SW50byhSZWFjdE9uRE9NUmVhZHksIHsKKworICAvKioK
KyAgICogRW5xdWV1ZXMgYSBjYWxsYmFjayB0byBiZSBpbnZva2VkIHdoZW4gYG5vdGlmeUFsbGAg
aXMgaW52b2tlZC4gVGhpcyBpcyB1c2VkCisgICAqIHRvIGVucXVldWUgY2FsbHMgdG8gYGNvbXBv
bmVudERpZE1vdW50YCBhbmQgYGNvbXBvbmVudERpZFVwZGF0ZWAuCisgICAqCisgICAqIEBwYXJh
bSB7UmVhY3RDb21wb25lbnR9IGNvbXBvbmVudCBDb21wb25lbnQgYmVpbmcgcmVuZGVyZWQuCisg
ICAqIEBwYXJhbSB7ZnVuY3Rpb24oRE9NRWxlbWVudCl9IGNhbGxiYWNrIEludm9rZWQgd2hlbiBg
bm90aWZ5QWxsYCBpcyBpbnZva2VkLgorICAgKiBAaW50ZXJuYWwKKyAgICovCisgIGVucXVldWU6
IGZ1bmN0aW9uKGNvbXBvbmVudCwgY2FsbGJhY2spIHsKKyAgICB0aGlzLl9xdWV1ZSA9IHRoaXMu
X3F1ZXVlIHx8IFtdOworICAgIHRoaXMuX3F1ZXVlLnB1c2goe2NvbXBvbmVudDogY29tcG9uZW50
LCBjYWxsYmFjazogY2FsbGJhY2t9KTsKKyAgfSwKKworICAvKioKKyAgICogSW52b2tlcyBhbGwg
ZW5xdWV1ZWQgY2FsbGJhY2tzIGFuZCBjbGVhcnMgdGhlIHF1ZXVlLiBUaGlzIGlzIGludm9rZWQg
YWZ0ZXIKKyAgICogdGhlIERPTSByZXByZXNlbnRhdGlvbiBvZiBhIGNvbXBvbmVudCBoYXMgYmVl
biBjcmVhdGVkIG9yIHVwZGF0ZWQuCisgICAqCisgICAqIEBpbnRlcm5hbAorICAgKi8KKyAgbm90
aWZ5QWxsOiBmdW5jdGlvbigpIHsKKyAgICB2YXIgcXVldWUgPSB0aGlzLl9xdWV1ZTsKKyAgICBp
ZiAocXVldWUpIHsKKyAgICAgIHRoaXMuX3F1ZXVlID0gbnVsbDsKKyAgICAgIGZvciAodmFyIGkg
PSAwLCBsID0gcXVldWUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CisgICAgICAgIHZhciBjb21wb25l
bnQgPSBxdWV1ZVtpXS5jb21wb25lbnQ7CisgICAgICAgIHZhciBjYWxsYmFjayA9IHF1ZXVlW2ld
LmNhbGxiYWNrOworICAgICAgICBjYWxsYmFjay5jYWxsKGNvbXBvbmVudCwgY29tcG9uZW50Lmdl
dERPTU5vZGUoKSk7CisgICAgICB9CisgICAgICBxdWV1ZS5sZW5ndGggPSAwOworICAgIH0KKyAg
fSwKKworICAvKioKKyAgICogUmVzZXRzIHRoZSBpbnRlcm5hbCBxdWV1ZS4KKyAgICoKKyAgICog
QGludGVybmFsCisgICAqLworICByZXNldDogZnVuY3Rpb24oKSB7CisgICAgdGhpcy5fcXVldWUg
PSBudWxsOworICB9LAorCisgIC8qKgorICAgKiBgUG9vbGVkQ2xhc3NgIGxvb2tzIGZvciB0aGlz
LgorICAgKi8KKyAgZGVzdHJ1Y3RvcjogZnVuY3Rpb24oKSB7CisgICAgdGhpcy5yZXNldCgpOwor
ICB9CisKK30pOworCitQb29sZWRDbGFzcy5hZGRQb29saW5nVG8oUmVhY3RPbkRPTVJlYWR5KTsK
KworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdE9uRE9NUmVhZHk7CisKK30seyIuL1Bvb2xlZENsYXNz
IjoyMCwiLi9taXhJbnRvIjo4NH1dLDQyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRz
KXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNl
ZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsK
KyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0
aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAor
ICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAq
IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGlu
Zywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1
dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElU
SU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUg
TGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBh
bmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01v
ZHVsZSBSZWFjdE93bmVyCisgKi8KKworInVzZSBzdHJpY3QiOworCit2YXIgaW52YXJpYW50ID0g
cmVxdWlyZSgiLi9pbnZhcmlhbnQiKTsKKworLyoqCisgKiBSZWFjdE93bmVycyBhcmUgY2FwYWJs
ZSBvZiBzdG9yaW5nIHJlZmVyZW5jZXMgdG8gb3duZWQgY29tcG9uZW50cy4KKyAqCisgKiBBbGwg
Y29tcG9uZW50cyBhcmUgY2FwYWJsZSBvZiAvL2JlaW5nLy8gcmVmZXJlbmNlZCBieSBvd25lciBj
b21wb25lbnRzLCBidXQKKyAqIG9ubHkgUmVhY3RPd25lciBjb21wb25lbnRzIGFyZSBjYXBhYmxl
IG9mIC8vcmVmZXJlbmNpbmcvLyBvd25lZCBjb21wb25lbnRzLgorICogVGhlIG5hbWVkIHJlZmVy
ZW5jZSBpcyBrbm93biBhcyBhICJyZWYiLgorICoKKyAqIFJlZnMgYXJlIGF2YWlsYWJsZSB3aGVu
IG1vdW50ZWQgYW5kIHVwZGF0ZWQgZHVyaW5nIHJlY29uY2lsaWF0aW9uLgorICoKKyAqICAgdmFy
IE15Q29tcG9uZW50ID0gUmVhY3QuY3JlYXRlQ2xhc3MoeworICogICAgIHJlbmRlcjogZnVuY3Rp
b24oKSB7CisgKiAgICAgICByZXR1cm4gKAorICogICAgICAgICA8ZGl2IG9uQ2xpY2s9e3RoaXMu
aGFuZGxlQ2xpY2t9PgorICogICAgICAgICAgIDxDdXN0b21Db21wb25lbnQgcmVmPSJjdXN0b20i
IC8+CisgKiAgICAgICAgIDwvZGl2PgorICogICAgICAgKTsKKyAqICAgICB9LAorICogICAgIGhh
bmRsZUNsaWNrOiBmdW5jdGlvbigpIHsKKyAqICAgICAgIHRoaXMucmVmcy5jdXN0b20uaGFuZGxl
Q2xpY2soKTsKKyAqICAgICB9LAorICogICAgIGNvbXBvbmVudERpZE1vdW50OiBmdW5jdGlvbigp
IHsKKyAqICAgICAgIHRoaXMucmVmcy5jdXN0b20uaW5pdGlhbGl6ZSgpOworICogICAgIH0KKyAq
ICAgfSk7CisgKgorICogUmVmcyBzaG91bGQgcmFyZWx5IGJlIHVzZWQuIFdoZW4gcmVmcyBhcmUg
dXNlZCwgdGhleSBzaG91bGQgb25seSBiZSBkb25lIHRvCisgKiBjb250cm9sIGRhdGEgdGhhdCBp
cyBub3QgaGFuZGxlZCBieSBSZWFjdCdzIGRhdGEgZmxvdy4KKyAqCisgKiBAY2xhc3MgUmVhY3RP
d25lcgorICovCit2YXIgUmVhY3RPd25lciA9IHsKKworICAvKioKKyAgICogQHBhcmFtIHs/b2Jq
ZWN0fSBvYmplY3QKKyAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBgb2JqZWN0YCBpcyBh
IHZhbGlkIG93bmVyLgorICAgKiBAZmluYWwKKyAgICovCisgIGlzVmFsaWRPd25lcjogZnVuY3Rp
b24ob2JqZWN0KSB7CisgICAgcmV0dXJuICEhKAorICAgICAgb2JqZWN0ICYmCisgICAgICB0eXBl
b2Ygb2JqZWN0LmF0dGFjaFJlZiA9PT0gJ2Z1bmN0aW9uJyAmJgorICAgICAgdHlwZW9mIG9iamVj
dC5kZXRhY2hSZWYgPT09ICdmdW5jdGlvbicKKyAgICApOworICB9LAorCisgIC8qKgorICAgKiBB
ZGRzIGEgY29tcG9uZW50IGJ5IHJlZiB0byBhbiBvd25lciBjb21wb25lbnQuCisgICAqCisgICAq
IEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGNvbXBvbmVudCBDb21wb25lbnQgdG8gcmVmZXJlbmNl
LgorICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmIE5hbWUgYnkgd2hpY2ggdG8gcmVmZXIgdG8gdGhl
IGNvbXBvbmVudC4KKyAgICogQHBhcmFtIHtSZWFjdE93bmVyfSBvd25lciBDb21wb25lbnQgb24g
d2hpY2ggdG8gcmVjb3JkIHRoZSByZWYuCisgICAqIEBmaW5hbAorICAgKiBAaW50ZXJuYWwKKyAg
ICovCisgIGFkZENvbXBvbmVudEFzUmVmVG86IGZ1bmN0aW9uKGNvbXBvbmVudCwgcmVmLCBvd25l
cikgeworICAgIGludmFyaWFudCgKKyAgICAgIFJlYWN0T3duZXIuaXNWYWxpZE93bmVyKG93bmVy
KSwKKyAgICAgICdhZGRDb21wb25lbnRBc1JlZlRvKC4uLik6IE9ubHkgYSBSZWFjdE93bmVyIGNh
biBoYXZlIHJlZnMuJworICAgICk7CisgICAgb3duZXIuYXR0YWNoUmVmKHJlZiwgY29tcG9uZW50
KTsKKyAgfSwKKworICAvKioKKyAgICogUmVtb3ZlcyBhIGNvbXBvbmVudCBieSByZWYgZnJvbSBh
biBvd25lciBjb21wb25lbnQuCisgICAqCisgICAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGNv
bXBvbmVudCBDb21wb25lbnQgdG8gZGVyZWZlcmVuY2UuCisgICAqIEBwYXJhbSB7c3RyaW5nfSBy
ZWYgTmFtZSBvZiB0aGUgcmVmIHRvIHJlbW92ZS4KKyAgICogQHBhcmFtIHtSZWFjdE93bmVyfSBv
d25lciBDb21wb25lbnQgb24gd2hpY2ggdGhlIHJlZiBpcyByZWNvcmRlZC4KKyAgICogQGZpbmFs
CisgICAqIEBpbnRlcm5hbAorICAgKi8KKyAgcmVtb3ZlQ29tcG9uZW50QXNSZWZGcm9tOiBmdW5j
dGlvbihjb21wb25lbnQsIHJlZiwgb3duZXIpIHsKKyAgICBpbnZhcmlhbnQoCisgICAgICBSZWFj
dE93bmVyLmlzVmFsaWRPd25lcihvd25lciksCisgICAgICAncmVtb3ZlQ29tcG9uZW50QXNSZWZG
cm9tKC4uLik6IE9ubHkgYSBSZWFjdE93bmVyIGNhbiBoYXZlIHJlZnMuJworICAgICk7CisgICAg
Ly8gQ2hlY2sgdGhhdCBgY29tcG9uZW50YCBpcyBzdGlsbCB0aGUgY3VycmVudCByZWYgYmVjYXVz
ZSB3ZSBkbyBub3Qgd2FudCB0bworICAgIC8vIGRldGFjaCB0aGUgcmVmIGlmIGFub3RoZXIgY29t
cG9uZW50IHN0b2xlIGl0LgorICAgIGlmIChvd25lci5yZWZzW3JlZl0gPT09IGNvbXBvbmVudCkg
eworICAgICAgb3duZXIuZGV0YWNoUmVmKHJlZik7CisgICAgfQorICB9LAorCisgIC8qKgorICAg
KiBBIFJlYWN0Q29tcG9uZW50IG11c3QgbWl4IHRoaXMgaW4gdG8gaGF2ZSByZWZzLgorICAgKgor
ICAgKiBAbGVuZHMge1JlYWN0T3duZXIucHJvdG90eXBlfQorICAgKi8KKyAgTWl4aW46IHsKKwor
ICAgIC8qKgorICAgICAqIExhemlseSBhbGxvY2F0ZXMgdGhlIHJlZnMgb2JqZWN0IGFuZCBzdG9y
ZXMgYGNvbXBvbmVudGAgYXMgYHJlZmAuCisgICAgICoKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30g
cmVmIFJlZmVyZW5jZSBuYW1lLgorICAgICAqIEBwYXJhbSB7Y29tcG9uZW50fSBjb21wb25lbnQg
Q29tcG9uZW50IHRvIHN0b3JlIGFzIGByZWZgLgorICAgICAqIEBmaW5hbAorICAgICAqIEBwcml2
YXRlCisgICAgICovCisgICAgYXR0YWNoUmVmOiBmdW5jdGlvbihyZWYsIGNvbXBvbmVudCkgewor
ICAgICAgaW52YXJpYW50KAorICAgICAgICBjb21wb25lbnQuaXNPd25lZEJ5KHRoaXMpLAorICAg
ICAgICAnYXR0YWNoUmVmKCVzLCAuLi4pOiBPbmx5IGEgY29tcG9uZW50XCdzIG93bmVyIGNhbiBz
dG9yZSBhIHJlZiB0byBpdC4nLAorICAgICAgICByZWYKKyAgICAgICk7CisgICAgICB2YXIgcmVm
cyA9IHRoaXMucmVmcyB8fCAodGhpcy5yZWZzID0ge30pOworICAgICAgcmVmc1tyZWZdID0gY29t
cG9uZW50OworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBEZXRhY2hlcyBhIHJlZmVyZW5jZSBu
YW1lLgorICAgICAqCisgICAgICogQHBhcmFtIHtzdHJpbmd9IHJlZiBOYW1lIHRvIGRlcmVmZXJl
bmNlLgorICAgICAqIEBmaW5hbAorICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAgZGV0YWNo
UmVmOiBmdW5jdGlvbihyZWYpIHsKKyAgICAgIGRlbGV0ZSB0aGlzLnJlZnNbcmVmXTsKKyAgICB9
CisKKyAgfQorCit9OworCittb2R1bGUuZXhwb3J0cyA9IFJlYWN0T3duZXI7CisKK30seyIuL2lu
dmFyaWFudCI6NzV9XSw0MzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioK
KyAqIENvcHlyaWdodCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIg
dGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3Ug
bWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vu
c2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBo
dHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3Mg
cmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3
YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBh
biAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0Yg
QU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2Ug
Zm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBs
aW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBAcHJvdmlkZXNNb2R1bGUgUmVh
Y3RQcm9wVHJhbnNmZXJlcgorICovCisKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIGVtcHR5RnVuY3Rp
b24gPSByZXF1aXJlKCIuL2VtcHR5RnVuY3Rpb24iKTsKK3ZhciBqb2luQ2xhc3NlcyA9IHJlcXVp
cmUoIi4vam9pbkNsYXNzZXMiKTsKK3ZhciBtZXJnZSA9IHJlcXVpcmUoIi4vbWVyZ2UiKTsKKwor
LyoqCisgKiBDcmVhdGVzIGEgdHJhbnNmZXIgc3RyYXRlZ3kgdGhhdCB3aWxsIG1lcmdlIHByb3Ag
dmFsdWVzIHVzaW5nIHRoZSBzdXBwbGllZAorICogYG1lcmdlU3RyYXRlZ3lgLiBJZiBhIHByb3Ag
d2FzIHByZXZpb3VzbHkgdW5zZXQsIHRoaXMganVzdCBzZXRzIGl0LgorICoKKyAqIEBwYXJhbSB7
ZnVuY3Rpb259IG1lcmdlU3RyYXRlZ3kKKyAqIEByZXR1cm4ge2Z1bmN0aW9ufQorICovCitmdW5j
dGlvbiBjcmVhdGVUcmFuc2ZlclN0cmF0ZWd5KG1lcmdlU3RyYXRlZ3kpIHsKKyAgcmV0dXJuIGZ1
bmN0aW9uKHByb3BzLCBrZXksIHZhbHVlKSB7CisgICAgaWYgKCFwcm9wcy5oYXNPd25Qcm9wZXJ0
eShrZXkpKSB7CisgICAgICBwcm9wc1trZXldID0gdmFsdWU7CisgICAgfSBlbHNlIHsKKyAgICAg
IHByb3BzW2tleV0gPSBtZXJnZVN0cmF0ZWd5KHByb3BzW2tleV0sIHZhbHVlKTsKKyAgICB9Cisg
IH07Cit9CisKKy8qKgorICogVHJhbnNmZXIgc3RyYXRlZ2llcyBkaWN0YXRlIGhvdyBwcm9wcyBh
cmUgdHJhbnNmZXJyZWQgYnkgYHRyYW5zZmVyUHJvcHNUb2AuCisgKi8KK3ZhciBUcmFuc2ZlclN0
cmF0ZWdpZXMgPSB7CisgIC8qKgorICAgKiBOZXZlciB0cmFuc2ZlciBgY2hpbGRyZW5gLgorICAg
Ki8KKyAgY2hpbGRyZW46IGVtcHR5RnVuY3Rpb24sCisgIC8qKgorICAgKiBUcmFuc2ZlciB0aGUg
YGNsYXNzTmFtZWAgcHJvcCBieSBtZXJnaW5nIHRoZW0uCisgICAqLworICBjbGFzc05hbWU6IGNy
ZWF0ZVRyYW5zZmVyU3RyYXRlZ3koam9pbkNsYXNzZXMpLAorICAvKioKKyAgICogTmV2ZXIgdHJh
bnNmZXIgdGhlIGByZWZgIHByb3AuCisgICAqLworICByZWY6IGVtcHR5RnVuY3Rpb24sCisgIC8q
KgorICAgKiBUcmFuc2ZlciB0aGUgYHN0eWxlYCBwcm9wICh3aGljaCBpcyBhbiBvYmplY3QpIGJ5
IG1lcmdpbmcgdGhlbS4KKyAgICovCisgIHN0eWxlOiBjcmVhdGVUcmFuc2ZlclN0cmF0ZWd5KG1l
cmdlKQorfTsKKworLyoqCisgKiBSZWFjdFByb3BUcmFuc2ZlcmVyIGFyZSBjYXBhYmxlIG9mIHRy
YW5zZmVycmluZyBwcm9wcyB0byBhbm90aGVyIGNvbXBvbmVudAorICogdXNpbmcgYSBgdHJhbnNm
ZXJQcm9wc1RvYCBtZXRob2QuCisgKgorICogQGNsYXNzIFJlYWN0UHJvcFRyYW5zZmVyZXIKKyAq
LwordmFyIFJlYWN0UHJvcFRyYW5zZmVyZXIgPSB7CisKKyAgVHJhbnNmZXJTdHJhdGVnaWVzOiBU
cmFuc2ZlclN0cmF0ZWdpZXMsCisKKyAgLyoqCisgICAqIEBsZW5kcyB7UmVhY3RQcm9wVHJhbnNm
ZXJlci5wcm90b3R5cGV9CisgICAqLworICBNaXhpbjogeworCisgICAgLyoqCisgICAgICogVHJh
bnNmZXIgcHJvcHMgZnJvbSB0aGlzIGNvbXBvbmVudCB0byBhIHRhcmdldCBjb21wb25lbnQuCisg
ICAgICoKKyAgICAgKiBQcm9wcyB0aGF0IGRvIG5vdCBoYXZlIGFuIGV4cGxpY2l0IHRyYW5zZmVy
IHN0cmF0ZWd5IHdpbGwgYmUgdHJhbnNmZXJyZWQKKyAgICAgKiBvbmx5IGlmIHRoZSB0YXJnZXQg
Y29tcG9uZW50IGRvZXMgbm90IGFscmVhZHkgaGF2ZSB0aGUgcHJvcCBzZXQuCisgICAgICoKKyAg
ICAgKiBUaGlzIGlzIHVzdWFsbHkgdXNlZCB0byBwYXNzIGRvd24gcHJvcHMgdG8gYSByZXR1cm5l
ZCByb290IGNvbXBvbmVudC4KKyAgICAgKgorICAgICAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9
IGNvbXBvbmVudCBDb21wb25lbnQgcmVjZWl2aW5nIHRoZSBwcm9wZXJ0aWVzLgorICAgICAqIEBy
ZXR1cm4ge1JlYWN0Q29tcG9uZW50fSBUaGUgc3VwcGxpZWQgYGNvbXBvbmVudGAuCisgICAgICog
QGZpbmFsCisgICAgICogQHByb3RlY3RlZAorICAgICAqLworICAgIHRyYW5zZmVyUHJvcHNUbzog
ZnVuY3Rpb24oY29tcG9uZW50KSB7CisgICAgICB2YXIgcHJvcHMgPSB7fTsKKyAgICAgIGZvciAo
dmFyIHRoYXRLZXkgaW4gY29tcG9uZW50LnByb3BzKSB7CisgICAgICAgIGlmIChjb21wb25lbnQu
cHJvcHMuaGFzT3duUHJvcGVydHkodGhhdEtleSkpIHsKKyAgICAgICAgICBwcm9wc1t0aGF0S2V5
XSA9IGNvbXBvbmVudC5wcm9wc1t0aGF0S2V5XTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAg
Zm9yICh2YXIgdGhpc0tleSBpbiB0aGlzLnByb3BzKSB7CisgICAgICAgIGlmICghdGhpcy5wcm9w
cy5oYXNPd25Qcm9wZXJ0eSh0aGlzS2V5KSkgeworICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisgICAgICAgIHZhciB0cmFuc2ZlclN0cmF0ZWd5ID0gVHJhbnNmZXJTdHJhdGVnaWVzW3Ro
aXNLZXldOworICAgICAgICBpZiAodHJhbnNmZXJTdHJhdGVneSkgeworICAgICAgICAgIHRyYW5z
ZmVyU3RyYXRlZ3kocHJvcHMsIHRoaXNLZXksIHRoaXMucHJvcHNbdGhpc0tleV0pOworICAgICAg
ICB9IGVsc2UgaWYgKCFwcm9wcy5oYXNPd25Qcm9wZXJ0eSh0aGlzS2V5KSkgeworICAgICAgICAg
IHByb3BzW3RoaXNLZXldID0gdGhpcy5wcm9wc1t0aGlzS2V5XTsKKyAgICAgICAgfQorICAgICAg
fQorICAgICAgY29tcG9uZW50LnByb3BzID0gcHJvcHM7CisgICAgICByZXR1cm4gY29tcG9uZW50
OworICAgIH0KKworICB9CisKK307CisKK21vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHJhbnNm
ZXJlcjsKKworfSx7Ii4vZW1wdHlGdW5jdGlvbiI6NjQsIi4vam9pbkNsYXNzZXMiOjc3LCIuL21l
cmdlIjo4MX1dLDQ0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICog
Q29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUg
QXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkg
bm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4K
KyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6
Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1
aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUK
KyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJB
UyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkg
S0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3Ig
dGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0
YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBSZWFjdFBy
b3BUeXBlcworICovCisKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIGNyZWF0ZU9iamVjdEZyb20gPSBy
ZXF1aXJlKCIuL2NyZWF0ZU9iamVjdEZyb20iKTsKK3ZhciBpbnZhcmlhbnQgPSByZXF1aXJlKCIu
L2ludmFyaWFudCIpOworCisvKioKKyAqIENvbGxlY3Rpb24gb2YgbWV0aG9kcyB0aGF0IGFsbG93
IGRlY2xhcmF0aW9uIGFuZCB2YWxpZGF0aW9uIG9mIHByb3BzIHRoYXQgYXJlCisgKiBzdXBwbGll
ZCB0byBSZWFjdCBjb21wb25lbnRzLiBFeGFtcGxlIHVzYWdlOgorICoKKyAqICAgdmFyIFByb3Bz
ID0gcmVxdWlyZSgnUmVhY3RQcm9wVHlwZXMnKTsKKyAqICAgdmFyIE15QXJ0aWNsZSA9IFJlYWN0
LmNyZWF0ZUNsYXNzKHsKKyAqICAgICBwcm9wVHlwZXM6IHsKKyAqICAgICAgIC8vIEFuIG9wdGlv
bmFsIHN0cmluZyBwcm9wIG5hbWVkICJkZXNjcmlwdGlvbiIuCisgKiAgICAgICBkZXNjcmlwdGlv
bjogUHJvcHMuc3RyaW5nLAorICoKKyAqICAgICAgIC8vIEEgcmVxdWlyZWQgZW51bSBwcm9wIG5h
bWVkICJjYXRlZ29yeSIuCisgKiAgICAgICBjYXRlZ29yeTogUHJvcHMub25lT2YoWydOZXdzJywn
UGhvdG9zJ10pLmlzUmVxdWlyZWQsCisgKgorICogICAgICAgLy8gQSBwcm9wIG5hbWVkICJkaWFs
b2ciIHRoYXQgcmVxdWlyZXMgYW4gaW5zdGFuY2Ugb2YgRGlhbG9nLgorICogICAgICAgZGlhbG9n
OiBQcm9wcy5pbnN0YW5jZU9mKERpYWxvZykuaXNSZXF1aXJlZAorICogICAgIH0sCisgKiAgICAg
cmVuZGVyOiBmdW5jdGlvbigpIHsgLi4uIH0KKyAqICAgfSk7CisgKgorICogQSBtb3JlIGZvcm1h
bCBzcGVjaWZpY2F0aW9uIG9mIGhvdyB0aGVzZSBtZXRob2RzIGFyZSB1c2VkOgorICoKKyAqICAg
dHlwZSA6PSBhcnJheXxib29sfG9iamVjdHxudW1iZXJ8c3RyaW5nfG9uZU9mKFsuLi5dKXxpbnN0
YW5jZU9mKC4uLikKKyAqICAgZGVjbCA6PSBSZWFjdFByb3BUeXBlcy57dHlwZX0oLmlzUmVxdWly
ZWQpPworICoKKyAqIEVhY2ggYW5kIGV2ZXJ5IGRlY2xhcmF0aW9uIHByb2R1Y2VzIGEgZnVuY3Rp
b24gd2l0aCB0aGUgc2FtZSBzaWduYXR1cmUuIFRoaXMKKyAqIGFsbG93cyB0aGUgY3JlYXRpb24g
b2YgY3VzdG9tIHZhbGlkYXRpb24gZnVuY3Rpb25zLiBGb3IgZXhhbXBsZToKKyAqCisgKiAgIHZh
ciBQcm9wcyA9IHJlcXVpcmUoJ1JlYWN0UHJvcFR5cGVzJyk7CisgKiAgIHZhciBNeUxpbmsgPSBS
ZWFjdC5jcmVhdGVDbGFzcyh7CisgKiAgICAgcHJvcFR5cGVzOiB7CisgKiAgICAgICAvLyBBbiBv
cHRpb25hbCBzdHJpbmcgb3IgVVJJIHByb3AgbmFtZWQgImhyZWYiLgorICogICAgICAgaHJlZjog
ZnVuY3Rpb24ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7CisgKiAgICAgICAgIHZh
ciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07CisgKiAgICAgICAgIGludmFyaWFudCgKKyAq
ICAgICAgICAgICBwcm9wVmFsdWUgPT0gbnVsbCB8fAorICogICAgICAgICAgIHR5cGVvZiBwcm9w
VmFsdWUgPT09IHN0cmluZyB8fAorICogICAgICAgICAgIHByb3BWYWx1ZSBpbnN0YW5jZW9mIFVS
SSwKKyAqICAgICAgICAgICAnSW52YWxpZCBgJXNgIHN1cHBsaWVkIHRvIGAlc2AsIGV4cGVjdGVk
IHN0cmluZyBvciBVUkkuJywKKyAqICAgICAgICAgICBwcm9wTmFtZSwKKyAqICAgICAgICAgICBj
b21wb25lbnROYW1lCisgKiAgICAgICAgICk7CisgKiAgICAgICB9CisgKiAgICAgfSwKKyAqICAg
ICByZW5kZXI6IGZ1bmN0aW9uKCkgeyAuLi4gfQorICogICB9KTsKKyAqCisgKiBAaW50ZXJuYWwK
KyAqLwordmFyIFByb3BzID0geworCisgIGFycmF5OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tl
cignYXJyYXknKSwKKyAgYm9vbDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2Jvb2xlYW4n
KSwKKyAgZnVuYzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2Z1bmN0aW9uJyksCisgIG51
bWJlcjogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ251bWJlcicpLAorICBvYmplY3Q6IGNy
ZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdvYmplY3QnKSwKKyAgc3RyaW5nOiBjcmVhdGVQcmlt
aXRpdmVUeXBlQ2hlY2tlcignc3RyaW5nJyksCisKKyAgb25lT2Y6IGNyZWF0ZUVudW1UeXBlQ2hl
Y2tlciwKKworICBpbnN0YW5jZU9mOiBjcmVhdGVJbnN0YW5jZVR5cGVDaGVja2VyCisKK307CisK
K3ZhciBBTk9OWU1PVVMgPSAnPDxhbm9ueW1vdXM+Pic7CisKK2Z1bmN0aW9uIGNyZWF0ZVByaW1p
dGl2ZVR5cGVDaGVja2VyKGV4cGVjdGVkVHlwZSkgeworICBmdW5jdGlvbiB2YWxpZGF0ZVByaW1p
dGl2ZVR5cGUocHJvcFZhbHVlLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkgeworICAgIHZhciBw
cm9wVHlwZSA9IHR5cGVvZiBwcm9wVmFsdWU7CisgICAgaWYgKHByb3BUeXBlID09PSAnb2JqZWN0
JyAmJiBBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHsKKyAgICAgIHByb3BUeXBlID0gJ2FycmF5
JzsKKyAgICB9CisgICAgaW52YXJpYW50KAorICAgICAgcHJvcFR5cGUgPT09IGV4cGVjdGVkVHlw
ZSwKKyAgICAgICdJbnZhbGlkIHByb3AgYCVzYCBvZiB0eXBlIGAlc2Agc3VwcGxpZWQgdG8gYCVz
YCwgZXhwZWN0ZWQgYCVzYC4nLAorICAgICAgcHJvcE5hbWUsCisgICAgICBwcm9wVHlwZSwKKyAg
ICAgIGNvbXBvbmVudE5hbWUsCisgICAgICBleHBlY3RlZFR5cGUKKyAgICApOworICB9CisgIHJl
dHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZVByaW1pdGl2ZVR5cGUpOwor
fQorCitmdW5jdGlvbiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIoZXhwZWN0ZWRWYWx1ZXMpIHsKKyAg
dmFyIGV4cGVjdGVkRW51bSA9IGNyZWF0ZU9iamVjdEZyb20oZXhwZWN0ZWRWYWx1ZXMpOworICBm
dW5jdGlvbiB2YWxpZGF0ZUVudW1UeXBlKHByb3BWYWx1ZSwgcHJvcE5hbWUsIGNvbXBvbmVudE5h
bWUpIHsKKyAgICBpbnZhcmlhbnQoCisgICAgICBleHBlY3RlZEVudW1bcHJvcFZhbHVlXSwKKyAg
ICAgICdJbnZhbGlkIHByb3AgYCVzYCBzdXBwbGllZCB0byBgJXNgLCBleHBlY3RlZCBvbmUgb2Yg
JXMuJywKKyAgICAgIHByb3BOYW1lLAorICAgICAgY29tcG9uZW50TmFtZSwKKyAgICAgIEpTT04u
c3RyaW5naWZ5KE9iamVjdC5rZXlzKGV4cGVjdGVkRW51bSkpCisgICAgKTsKKyAgfQorICByZXR1
cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGVFbnVtVHlwZSk7Cit9CisKK2Z1
bmN0aW9uIGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIoZXhwZWN0ZWRDbGFzcykgeworICBmdW5j
dGlvbiB2YWxpZGF0ZUluc3RhbmNlVHlwZShwcm9wVmFsdWUsIHByb3BOYW1lLCBjb21wb25lbnRO
YW1lKSB7CisgICAgaW52YXJpYW50KAorICAgICAgcHJvcFZhbHVlIGluc3RhbmNlb2YgZXhwZWN0
ZWRDbGFzcywKKyAgICAgICdJbnZhbGlkIHByb3AgYCVzYCBzdXBwbGllZCB0byBgJXNgLCBleHBl
Y3RlZCBpbnN0YW5jZSBvZiBgJXNgLicsCisgICAgICBwcm9wTmFtZSwKKyAgICAgIGNvbXBvbmVu
dE5hbWUsCisgICAgICBleHBlY3RlZENsYXNzLm5hbWUgfHwgQU5PTllNT1VTCisgICAgKTsKKyAg
fQorICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGVJbnN0YW5jZVR5
cGUpOworfQorCitmdW5jdGlvbiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSkg
eworICBmdW5jdGlvbiBjcmVhdGVUeXBlQ2hlY2tlcihpc1JlcXVpcmVkKSB7CisgICAgZnVuY3Rp
b24gY2hlY2tUeXBlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkgeworICAgICAgdmFy
IHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTsKKyAgICAgIGlmIChwcm9wVmFsdWUgIT0gbnVs
bCkgeworICAgICAgICAvLyBPbmx5IHZhbGlkYXRlIGlmIHRoZXJlIGlzIGEgdmFsdWUgdG8gY2hl
Y2suCisgICAgICAgIHZhbGlkYXRlKHByb3BWYWx1ZSwgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUg
fHwgQU5PTllNT1VTKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGludmFyaWFudCgKKyAgICAg
ICAgICAhaXNSZXF1aXJlZCwKKyAgICAgICAgICAnUmVxdWlyZWQgcHJvcCBgJXNgIHdhcyBub3Qg
c3BlY2lmaWVkIGluIGAlc2AuJywKKyAgICAgICAgICBwcm9wTmFtZSwKKyAgICAgICAgICBjb21w
b25lbnROYW1lIHx8IEFOT05ZTU9VUworICAgICAgICApOworICAgICAgfQorICAgIH0KKyAgICBp
ZiAoIWlzUmVxdWlyZWQpIHsKKyAgICAgIGNoZWNrVHlwZS5pc1JlcXVpcmVkID0gY3JlYXRlVHlw
ZUNoZWNrZXIodHJ1ZSk7CisgICAgfQorICAgIHJldHVybiBjaGVja1R5cGU7CisgIH0KKyAgcmV0
dXJuIGNyZWF0ZVR5cGVDaGVja2VyKGZhbHNlKTsKK30KKworbW9kdWxlLmV4cG9ydHMgPSBQcm9w
czsKKworfSx7Ii4vY3JlYXRlT2JqZWN0RnJvbSI6NjIsIi4vaW52YXJpYW50Ijo3NX1dLDQ1Oltm
dW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMg
RmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2Us
IFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZp
bGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0
YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9y
Zy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNh
YmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVk
IHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisg
KiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4
cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxh
bmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRo
ZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBSZWFjdFJlY29uY2lsZVRyYW5zYWN0
aW9uCisgKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seQorICovCisKKyJ1c2Ugc3RyaWN0IjsKKwor
dmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZSgiLi9FeGVjdXRpb25FbnZpcm9ubWVu
dCIpOwordmFyIFBvb2xlZENsYXNzID0gcmVxdWlyZSgiLi9Qb29sZWRDbGFzcyIpOwordmFyIFJl
YWN0RXZlbnRFbWl0dGVyID0gcmVxdWlyZSgiLi9SZWFjdEV2ZW50RW1pdHRlciIpOwordmFyIFJl
YWN0SW5wdXRTZWxlY3Rpb24gPSByZXF1aXJlKCIuL1JlYWN0SW5wdXRTZWxlY3Rpb24iKTsKK3Zh
ciBSZWFjdE9uRE9NUmVhZHkgPSByZXF1aXJlKCIuL1JlYWN0T25ET01SZWFkeSIpOwordmFyIFRy
YW5zYWN0aW9uID0gcmVxdWlyZSgiLi9UcmFuc2FjdGlvbiIpOworCit2YXIgbWl4SW50byA9IHJl
cXVpcmUoIi4vbWl4SW50byIpOworCisvKioKKyAqIEVuc3VyZXMgdGhhdCwgd2hlbiBwb3NzaWJs
ZSwgdGhlIHNlbGVjdGlvbiByYW5nZSAoY3VycmVudGx5IHNlbGVjdGVkIHRleHQKKyAqIGlucHV0
KSBpcyBub3QgZGlzdHVyYmVkIGJ5IHBlcmZvcm1pbmcgdGhlIHRyYW5zYWN0aW9uLgorICovCit2
YXIgU0VMRUNUSU9OX1JFU1RPUkFUSU9OID0geworICAvKioKKyAgICogQHJldHVybiB7U2VsZWN0
aW9ufSBTZWxlY3Rpb24gaW5mb3JtYXRpb24uCisgICAqLworICBpbml0aWFsaXplOiBSZWFjdElu
cHV0U2VsZWN0aW9uLmdldFNlbGVjdGlvbkluZm9ybWF0aW9uLAorICAvKioKKyAgICogQHBhcmFt
IHtTZWxlY3Rpb259IHNlbCBTZWxlY3Rpb24gaW5mb3JtYXRpb24gcmV0dXJuZWQgZnJvbSBgaW5p
dGlhbGl6ZWAuCisgICAqLworICBjbG9zZTogUmVhY3RJbnB1dFNlbGVjdGlvbi5yZXN0b3JlU2Vs
ZWN0aW9uCit9OworCisvKioKKyAqIFN1cHByZXNzZXMgZXZlbnRzIChibHVyL2ZvY3VzKSB0aGF0
IGNvdWxkIGJlIGluYWR2ZXJ0ZW50bHkgZGlzcGF0Y2hlZCBkdWUgdG8KKyAqIGhpZ2ggbGV2ZWwg
RE9NIG1hbmlwdWxhdGlvbnMgKGxpa2UgdGVtcG9yYXJpbHkgcmVtb3ZpbmcgYSB0ZXh0IGlucHV0
IGZyb20gdGhlCisgKiBET00pLgorICovCit2YXIgRVZFTlRfU1VQUFJFU1NJT04gPSB7CisgIC8q
KgorICAgKiBAcmV0dXJuIHtib29sZWFufSBUaGUgZW5hYmxlZCBzdGF0dXMgb2YgYFJlYWN0RXZl
bnRFbWl0dGVyYCBiZWZvcmUgdGhlCisgICAqIHJlY29uY2lsaWF0aW9uLgorICAgKi8KKyAgaW5p
dGlhbGl6ZTogZnVuY3Rpb24oKSB7CisgICAgdmFyIGN1cnJlbnRseUVuYWJsZWQgPSBSZWFjdEV2
ZW50RW1pdHRlci5pc0VuYWJsZWQoKTsKKyAgICBSZWFjdEV2ZW50RW1pdHRlci5zZXRFbmFibGVk
KGZhbHNlKTsKKyAgICByZXR1cm4gY3VycmVudGx5RW5hYmxlZDsKKyAgfSwKKworICAvKioKKyAg
ICogQHBhcmFtIHtib29sZWFufSBwcmV2aW91c2x5RW5hYmxlZCBFbmFibGVkIHN0YXR1cyBvZiBg
UmVhY3RFdmVudEVtaXR0ZXJgCisgICAqICAgYmVmb3JlIHRoZSByZWNvbmNpbGlhdGlvbiBvY2N1
cmVkLiBgY2xvc2VgIHJlc3RvcmVzIHRoZSBwcmV2aW91cyB2YWx1ZS4KKyAgICovCisgIGNsb3Nl
OiBmdW5jdGlvbihwcmV2aW91c2x5RW5hYmxlZCkgeworICAgIFJlYWN0RXZlbnRFbWl0dGVyLnNl
dEVuYWJsZWQocHJldmlvdXNseUVuYWJsZWQpOworICB9Cit9OworCisvKioKKyAqIFByb3ZpZGVz
IGEgYFJlYWN0T25ET01SZWFkeWAgcXVldWUgZm9yIGNvbGxlY3RpbmcgYG9uRE9NUmVhZHlgIGNh
bGxiYWNrcworICogZHVyaW5nIHRoZSBwZXJmb3JtaW5nIG9mIHRoZSB0cmFuc2FjdGlvbi4KKyAq
LwordmFyIE9OX0RPTV9SRUFEWV9RVUVVRUlORyA9IHsKKyAgLyoqCisgICAqIEluaXRpYWxpemVz
IHRoZSBpbnRlcm5hbCBgb25ET01SZWFkeWAgcXVldWUuCisgICAqLworICBpbml0aWFsaXplOiBm
dW5jdGlvbigpIHsKKyAgICB0aGlzLnJlYWN0T25ET01SZWFkeS5yZXNldCgpOworICB9LAorCisg
IC8qKgorICAgKiBBZnRlciBET00gaXMgZmx1c2hlZCwgaW52b2tlIGFsbCByZWdpc3RlcmVkIGBv
bkRPTVJlYWR5YCBjYWxsYmFja3MuCisgICAqLworICBjbG9zZTogZnVuY3Rpb24oKSB7CisgICAg
dGhpcy5yZWFjdE9uRE9NUmVhZHkubm90aWZ5QWxsKCk7CisgIH0KK307CisKKy8qKgorICogRXhl
Y3V0ZWQgd2l0aGluIHRoZSBzY29wZSBvZiB0aGUgYFRyYW5zYWN0aW9uYCBpbnN0YW5jZS4gQ29u
c2lkZXIgdGhlc2UgYXMKKyAqIGJlaW5nIG1lbWJlciBtZXRob2RzLCBidXQgd2l0aCBhbiBpbXBs
aWVkIG9yZGVyaW5nIHdoaWxlIGJlaW5nIGlzb2xhdGVkIGZyb20KKyAqIGVhY2ggb3RoZXIuCisg
Ki8KK3ZhciBUUkFOU0FDVElPTl9XUkFQUEVSUyA9IFsKKyAgU0VMRUNUSU9OX1JFU1RPUkFUSU9O
LAorICBFVkVOVF9TVVBQUkVTU0lPTiwKKyAgT05fRE9NX1JFQURZX1FVRVVFSU5HCitdOworCisv
KioKKyAqIEN1cnJlbnRseToKKyAqIC0gVGhlIG9yZGVyIHRoYXQgdGhlc2UgYXJlIGxpc3RlZCBp
biB0aGUgdHJhbnNhY3Rpb24gaXMgY3JpdGljYWw6CisgKiAtIFN1cHByZXNzZXMgZXZlbnRzLgor
ICogLSBSZXN0b3JlcyBzZWxlY3Rpb24gcmFuZ2UuCisgKgorICogRnV0dXJlOgorICogLSBSZXN0
b3JlIGRvY3VtZW50L292ZXJmbG93IHNjcm9sbCBwb3NpdGlvbnMgdGhhdCB3ZXJlIHVuaW50ZW50
aW9uYWxseQorICogICBtb2RpZmllZCB2aWEgRE9NIGluc2VydGlvbnMgYWJvdmUgdGhlIHRvcCB2
aWV3cG9ydCBib3VuZGFyeS4KKyAqIC0gSW1wbGVtZW50L2ludGVncmF0ZSB3aXRoIGN1c3RvbWl6
ZWQgY29uc3RyYWludCBiYXNlZCBsYXlvdXQgc3lzdGVtIGFuZCBrZWVwCisgKiAgIHRyYWNrIG9m
IHdoaWNoIGRpbWVuc2lvbnMgbXVzdCBiZSByZW1lYXN1cmVkLgorICoKKyAqIEBjbGFzcyBSZWFj
dFJlY29uY2lsZVRyYW5zYWN0aW9uCisgKi8KK2Z1bmN0aW9uIFJlYWN0UmVjb25jaWxlVHJhbnNh
Y3Rpb24oKSB7CisgIHRoaXMucmVpbml0aWFsaXplVHJhbnNhY3Rpb24oKTsKKyAgdGhpcy5yZWFj
dE9uRE9NUmVhZHkgPSBSZWFjdE9uRE9NUmVhZHkuZ2V0UG9vbGVkKG51bGwpOworfQorCit2YXIg
TWl4aW4gPSB7CisgIC8qKgorICAgKiBAc2VlIFRyYW5zYWN0aW9uCisgICAqIEBhYnN0cmFjdAor
ICAgKiBAZmluYWwKKyAgICogQHJldHVybiB7YXJyYXk8b2JqZWN0Pn0gTGlzdCBvZiBvcGVyYXRp
b24gd3JhcCBwcm9jZWVkdXJlcy4KKyAgICogICBUT0RPOiBjb252ZXJ0IHRvIGFycmF5PFRyYW5z
YWN0aW9uV3JhcHBlcj4KKyAgICovCisgIGdldFRyYW5zYWN0aW9uV3JhcHBlcnM6IGZ1bmN0aW9u
KCkgeworICAgIGlmIChFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00pIHsKKyAgICAgIHJl
dHVybiBUUkFOU0FDVElPTl9XUkFQUEVSUzsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIFtd
OworICAgIH0KKyAgfSwKKworICAvKioKKyAgICogQHJldHVybiB7b2JqZWN0fSBUaGUgcXVldWUg
dG8gY29sbGVjdCBgb25ET01SZWFkeWAgY2FsbGJhY2tzIHdpdGguCisgICAqICAgVE9ETzogY29u
dmVydCB0byBSZWFjdE9uRE9NUmVhZHkKKyAgICovCisgIGdldFJlYWN0T25ET01SZWFkeTogZnVu
Y3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMucmVhY3RPbkRPTVJlYWR5OworICB9LAorCisgIC8q
KgorICAgKiBgUG9vbGVkQ2xhc3NgIGxvb2tzIGZvciB0aGlzLCBhbmQgd2lsbCBpbnZva2UgdGhp
cyBiZWZvcmUgYWxsb3dpbmcgdGhpcworICAgKiBpbnN0YW5jZSB0byBiZSByZXN1c2VkLgorICAg
Ki8KKyAgZGVzdHJ1Y3RvcjogZnVuY3Rpb24oKSB7CisgICAgUmVhY3RPbkRPTVJlYWR5LnJlbGVh
c2UodGhpcy5yZWFjdE9uRE9NUmVhZHkpOworICAgIHRoaXMucmVhY3RPbkRPTVJlYWR5ID0gbnVs
bDsKKyAgfQorfTsKKworCittaXhJbnRvKFJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24sIFRyYW5z
YWN0aW9uLk1peGluKTsKK21peEludG8oUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbiwgTWl4aW4p
OworCitQb29sZWRDbGFzcy5hZGRQb29saW5nVG8oUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbik7
CisKK21vZHVsZS5leHBvcnRzID0gUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbjsKKworfSx7Ii4v
RXhlY3V0aW9uRW52aXJvbm1lbnQiOjE5LCIuL1Bvb2xlZENsYXNzIjoyMCwiLi9SZWFjdEV2ZW50
RW1pdHRlciI6MzMsIi4vUmVhY3RJbnB1dFNlbGVjdGlvbiI6MzYsIi4vUmVhY3RPbkRPTVJlYWR5
Ijo0MSwiLi9UcmFuc2FjdGlvbiI6NTgsIi4vbWl4SW50byI6ODR9XSw0NjpbZnVuY3Rpb24ocmVx
dWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzIEZhY2Vib29rLCBJ
bmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIu
MCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBp
biBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkg
b2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMv
TElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3Ig
YWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUg
TGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBX
QVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGlt
cGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zl
cm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4K
KyAqCisgKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seQorICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0
U2VydmVyUmVuZGVyaW5nCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKwordmFyIFJlYWN0UmVjb25jaWxl
VHJhbnNhY3Rpb24gPSByZXF1aXJlKCIuL1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24iKTsKK3Zh
ciBSZWFjdEluc3RhbmNlSGFuZGxlcyA9IHJlcXVpcmUoIi4vUmVhY3RJbnN0YW5jZUhhbmRsZXMi
KTsKKworLyoqCisgKiBAcGFyYW0ge29iamVjdH0gY29tcG9uZW50CisgKiBAcGFyYW0ge2Z1bmN0
aW9ufSBjYWxsYmFjaworICovCitmdW5jdGlvbiByZW5kZXJDb21wb25lbnRUb1N0cmluZyhjb21w
b25lbnQsIGNhbGxiYWNrKSB7CisgIC8vIFdlIHVzZSBhIGNhbGxiYWNrIEFQSSB0byBrZWVwIHRo
ZSBBUEkgYXN5bmMgaW4gY2FzZSBpbiB0aGUgZnV0dXJlIHdlIGV2ZXIKKyAgLy8gbmVlZCBpdCwg
YnV0IGluIHJlYWxpdHkgdGhpcyBpcyBhIHN5bmNocm9ub3VzIG9wZXJhdGlvbi4KKyAgdmFyIGlk
ID0gUmVhY3RJbnN0YW5jZUhhbmRsZXMuY3JlYXRlUmVhY3RSb290SUQoKTsKKyAgdmFyIHRyYW5z
YWN0aW9uID0gUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbi5nZXRQb29sZWQoKTsKKyAgdHJhbnNh
Y3Rpb24ucmVpbml0aWFsaXplVHJhbnNhY3Rpb24oKTsKKyAgdHJ5IHsKKyAgICB0cmFuc2FjdGlv
bi5wZXJmb3JtKGZ1bmN0aW9uKCkgeworICAgICAgY2FsbGJhY2soY29tcG9uZW50Lm1vdW50Q29t
cG9uZW50KGlkLCB0cmFuc2FjdGlvbikpOworICAgIH0sIG51bGwpOworICB9IGZpbmFsbHkgewor
ICAgIFJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24ucmVsZWFzZSh0cmFuc2FjdGlvbik7CisgIH0K
K30KKworbW9kdWxlLmV4cG9ydHMgPSB7CisgIHJlbmRlckNvbXBvbmVudFRvU3RyaW5nOiByZW5k
ZXJDb21wb25lbnRUb1N0cmluZworfTsKKworfSx7Ii4vUmVhY3RJbnN0YW5jZUhhbmRsZXMiOjM3
LCIuL1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24iOjQ1fV0sNDc6W2Z1bmN0aW9uKHJlcXVpcmUs
bW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMyBGYWNlYm9vaywgSW5jLgor
ICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRo
ZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29t
cGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRo
ZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VO
U0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVl
ZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vu
c2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFO
VElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVk
LgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5n
IHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgor
ICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0VGV4dENvbXBvbmVudAorICogQHR5cGVjaGVja3Mgc3Rh
dGljLW9ubHkKKyAqLworCisidXNlIHN0cmljdCI7CisKK3ZhciBSZWFjdENvbXBvbmVudCA9IHJl
cXVpcmUoIi4vUmVhY3RDb21wb25lbnQiKTsKK3ZhciBSZWFjdElEID0gcmVxdWlyZSgiLi9SZWFj
dElEIik7CisKK3ZhciBlc2NhcGVUZXh0Rm9yQnJvd3NlciA9IHJlcXVpcmUoIi4vZXNjYXBlVGV4
dEZvckJyb3dzZXIiKTsKK3ZhciBtaXhJbnRvID0gcmVxdWlyZSgiLi9taXhJbnRvIik7CisKKy8q
KgorICogVGV4dCBub2RlcyB2aW9sYXRlIGEgY291cGxlIGFzc3VtcHRpb25zIHRoYXQgUmVhY3Qg
bWFrZXMgYWJvdXQgY29tcG9uZW50czoKKyAqCisgKiAgLSBXaGVuIG1vdW50aW5nIHRleHQgaW50
byB0aGUgRE9NLCBhZGphY2VudCB0ZXh0IG5vZGVzIGFyZSBtZXJnZWQuCisgKiAgLSBUZXh0IG5v
ZGVzIGNhbm5vdCBiZSBhc3NpZ25lZCBhIFJlYWN0IHJvb3QgSUQuCisgKgorICogVGhpcyBjb21w
b25lbnQgaXMgdXNlZCB0byB3cmFwIHN0cmluZ3MgaW4gZWxlbWVudHMgc28gdGhhdCB0aGV5IGNh
biB1bmRlcmdvCisgKiB0aGUgc2FtZSByZWNvbmNpbGlhdGlvbiB0aGF0IGlzIGFwcGxpZWQgdG8g
ZWxlbWVudHMuCisgKgorICogVE9ETzogSW52ZXN0aWdhdGUgcmVwcmVzZW50aW5nIFJlYWN0IGNv
bXBvbmVudHMgaW4gdGhlIERPTSB3aXRoIHRleHQgbm9kZXMuCisgKgorICogQGNsYXNzIFJlYWN0
VGV4dENvbXBvbmVudAorICogQGV4dGVuZHMgUmVhY3RDb21wb25lbnQKKyAqIEBpbnRlcm5hbAor
ICovCit2YXIgUmVhY3RUZXh0Q29tcG9uZW50ID0gZnVuY3Rpb24oaW5pdGlhbFRleHQpIHsKKyAg
dGhpcy5jb25zdHJ1Y3Qoe3RleHQ6IGluaXRpYWxUZXh0fSk7Cit9OworCittaXhJbnRvKFJlYWN0
VGV4dENvbXBvbmVudCwgUmVhY3RDb21wb25lbnQuTWl4aW4pOworbWl4SW50byhSZWFjdFRleHRD
b21wb25lbnQsIHsKKworICAvKioKKyAgICogQ3JlYXRlcyB0aGUgbWFya3VwIGZvciB0aGlzIHRl
eHQgbm9kZS4gVGhpcyBub2RlIGlzIG5vdCBpbnRlbmRlZCB0byBoYXZlCisgICAqIGFueSBmZWF0
dXJlcyBiZXNpZGVzIGNvbnRhaW5pbmcgdGV4dCBjb250ZW50LgorICAgKgorICAgKiBAcGFyYW0g
e3N0cmluZ30gcm9vdElEIERPTSBJRCBvZiB0aGUgcm9vdCBub2RlLgorICAgKiBAcmV0dXJuIHtz
dHJpbmd9IE1hcmt1cCBmb3IgdGhpcyB0ZXh0IG5vZGUuCisgICAqIEBpbnRlcm5hbAorICAgKi8K
KyAgbW91bnRDb21wb25lbnQ6IGZ1bmN0aW9uKHJvb3RJRCkgeworICAgIFJlYWN0Q29tcG9uZW50
Lk1peGluLm1vdW50Q29tcG9uZW50LmNhbGwodGhpcywgcm9vdElEKTsKKyAgICByZXR1cm4gKAor
ICAgICAgJzxzcGFuICcgKyBSZWFjdElELkFUVFJfTkFNRSArICc9IicgKyByb290SUQgKyAnIj4n
ICsKKyAgICAgICAgZXNjYXBlVGV4dEZvckJyb3dzZXIodGhpcy5wcm9wcy50ZXh0KSArCisgICAg
ICAnPC9zcGFuPicKKyAgICApOworICB9LAorCisgIC8qKgorICAgKiBVcGRhdGVzIHRoaXMgY29t
cG9uZW50IGJ5IHVwZGF0aW5nIHRoZSB0ZXh0IGNvbnRlbnQuCisgICAqCisgICAqIEBwYXJhbSB7
b2JqZWN0fSBuZXh0UHJvcHMgQ29udGFpbnMgdGhlIG5leHQgdGV4dCBjb250ZW50LgorICAgKiBA
cGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uCisgICAqIEBpbnRl
cm5hbAorICAgKi8KKyAgcmVjZWl2ZVByb3BzOiBmdW5jdGlvbihuZXh0UHJvcHMsIHRyYW5zYWN0
aW9uKSB7CisgICAgaWYgKG5leHRQcm9wcy50ZXh0ICE9PSB0aGlzLnByb3BzLnRleHQpIHsKKyAg
ICAgIHRoaXMucHJvcHMudGV4dCA9IG5leHRQcm9wcy50ZXh0OworICAgICAgUmVhY3RDb21wb25l
bnQuRE9NSURPcGVyYXRpb25zLnVwZGF0ZVRleHRDb250ZW50QnlJRCgKKyAgICAgICAgdGhpcy5f
cm9vdE5vZGVJRCwKKyAgICAgICAgbmV4dFByb3BzLnRleHQKKyAgICAgICk7CisgICAgfQorICB9
CisKK30pOworCittb2R1bGUuZXhwb3J0cyA9IFJlYWN0VGV4dENvbXBvbmVudDsKKworfSx7Ii4v
UmVhY3RDb21wb25lbnQiOjIyLCIuL1JlYWN0SUQiOjM1LCIuL2VzY2FwZVRleHRGb3JCcm93c2Vy
Ijo2NSwiLi9taXhJbnRvIjo4NH1dLDQ4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRz
KXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNl
ZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsK
KyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0
aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAor
ICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAq
IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGlu
Zywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1
dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElU
SU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUg
TGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBh
bmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01v
ZHVsZSBSZWFjdFVwZGF0ZXMKKyAqLworCisidXNlIHN0cmljdCI7CisKK3ZhciBpbnZhcmlhbnQg
PSByZXF1aXJlKCIuL2ludmFyaWFudCIpOworCit2YXIgaXNCYXRjaGluZ1VwZGF0ZXMgPSBmYWxz
ZTsKKwordmFyIGRpcnR5Q29tcG9uZW50cyA9IFtdOworCisvKioKKyAqIENhbGwgdGhlIHByb3Zp
ZGVkIGZ1bmN0aW9uIGluIGEgY29udGV4dCB3aXRoaW4gd2hpY2ggY2FsbHMgdG8gYHNldFN0YXRl
YCBhbmQKKyAqIGZyaWVuZHMgYXJlIGJhdGNoZWQgc3VjaCB0aGF0IGNvbXBvbmVudHMgYXJlbid0
IHVwZGF0ZWQgdW5uZWNlc3NhcmlseS4KKyAqLworZnVuY3Rpb24gYmF0Y2hlZFVwZGF0ZXMoY2Fs
bGJhY2spIHsKKyAgaWYgKGlzQmF0Y2hpbmdVcGRhdGVzKSB7CisgICAgLy8gV2UncmUgYWxyZWFk
eSBleGVjdXRpbmcgaW4gYW4gZW52aXJvbm1lbnQgd2hlcmUgdXBkYXRlcyB3aWxsIGJlIGJhdGNo
ZWQsCisgICAgLy8gc28gdGhpcyBpcyBhIG5vLW9wLgorICAgIGNhbGxiYWNrKCk7CisgICAgcmV0
dXJuOworICB9CisKKyAgaXNCYXRjaGluZ1VwZGF0ZXMgPSB0cnVlOworCisgIHRyeSB7CisgICAg
Y2FsbGJhY2soKTsKKyAgICAvLyBUT0RPOiBTb3J0IGNvbXBvbmVudHMgYnkgZGVwdGggc3VjaCB0
aGF0IHBhcmVudCBjb21wb25lbnRzIHVwZGF0ZSBmaXJzdAorICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgZGlydHlDb21wb25lbnRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAvLyBJZiBhIGNvbXBvbmVu
dCBpcyB1bm1vdW50ZWQgYmVmb3JlIHBlbmRpbmcgY2hhbmdlcyBhcHBseSwgaWdub3JlIHRoZW0K
KyAgICAgIC8vIFRPRE86IFF1ZXVlIHVubW91bnRzIGluIHRoZSBzYW1lIGxpc3QgdG8gYXZvaWQg
dGhpcyBoYXBwZW5pbmcgYXQgYWxsCisgICAgICB2YXIgY29tcG9uZW50ID0gZGlydHlDb21wb25l
bnRzW2ldOworICAgICAgaWYgKGNvbXBvbmVudC5pc01vdW50ZWQoKSkgeworICAgICAgICAvLyBJ
ZiBwZXJmb3JtVXBkYXRlSWZOZWNlc3NhcnkgaGFwcGVucyB0byBlbnF1ZXVlIGFueSBuZXcgdXBk
YXRlcywgd2UKKyAgICAgICAgLy8gc2hvdWxkbid0IGV4ZWN1dGUgdGhlIGNhbGxiYWNrcyB1bnRp
bCB0aGUgbmV4dCByZW5kZXIgaGFwcGVucywgc28KKyAgICAgICAgLy8gc3Rhc2ggdGhlIGNhbGxi
YWNrcyBmaXJzdAorICAgICAgICB2YXIgY2FsbGJhY2tzID0gY29tcG9uZW50Ll9wZW5kaW5nQ2Fs
bGJhY2tzOworICAgICAgICBjb21wb25lbnQuX3BlbmRpbmdDYWxsYmFja3MgPSBudWxsOworICAg
ICAgICBjb21wb25lbnQucGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5KCk7CisgICAgICAgIGlmIChj
YWxsYmFja3MpIHsKKyAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNhbGxiYWNrcy5sZW5n
dGg7IGorKykgeworICAgICAgICAgICAgY2FsbGJhY2tzW2pdKCk7CisgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICB9CisgICAgfQorICB9IGNhdGNoIChlcnJvcikgeworICAgIC8vIElFOCBy
ZXF1aXJlcyBgY2F0Y2hgIGluIG9yZGVyIHRvIHVzZSBgZmluYWxseWAuCisgICAgdGhyb3cgZXJy
b3I7CisgIH0gZmluYWxseSB7CisgICAgZGlydHlDb21wb25lbnRzLmxlbmd0aCA9IDA7CisgICAg
aXNCYXRjaGluZ1VwZGF0ZXMgPSBmYWxzZTsKKyAgfQorfQorCisvKioKKyAqIE1hcmsgYSBjb21w
b25lbnQgYXMgbmVlZGluZyBhIHJlcmVuZGVyLCBhZGRpbmcgYW4gb3B0aW9uYWwgY2FsbGJhY2sg
dG8gYQorICogbGlzdCBvZiBmdW5jdGlvbnMgd2hpY2ggd2lsbCBiZSBleGVjdXRlZCBvbmNlIHRo
ZSByZXJlbmRlciBvY2N1cnMuCisgKi8KK2Z1bmN0aW9uIGVucXVldWVVcGRhdGUoY29tcG9uZW50
LCBjYWxsYmFjaykgeworICBpbnZhcmlhbnQoCisgICAgIWNhbGxiYWNrIHx8IHR5cGVvZiBjYWxs
YmFjayA9PT0gImZ1bmN0aW9uIiwKKyAgICAnZW5xdWV1ZVVwZGF0ZSguLi4pOiBZb3UgY2FsbGVk
IGBzZXRQcm9wc2AsIGByZXBsYWNlUHJvcHNgLCAnICsKKyAgICAnYHNldFN0YXRlYCwgYHJlcGxh
Y2VTdGF0ZWAsIG9yIGBmb3JjZVVwZGF0ZWAgd2l0aCBhIGNhbGxiYWNrIHRoYXQgJyArCisgICAg
J2lzblwndCBjYWxsYWJsZS4nCisgICk7CisKKyAgaWYgKCFpc0JhdGNoaW5nVXBkYXRlcykgewor
ICAgIGNvbXBvbmVudC5wZXJmb3JtVXBkYXRlSWZOZWNlc3NhcnkoKTsKKyAgICBjYWxsYmFjayAm
JiBjYWxsYmFjaygpOworICAgIHJldHVybjsKKyAgfQorCisgIGRpcnR5Q29tcG9uZW50cy5wdXNo
KGNvbXBvbmVudCk7CisKKyAgaWYgKGNhbGxiYWNrKSB7CisgICAgaWYgKGNvbXBvbmVudC5fcGVu
ZGluZ0NhbGxiYWNrcykgeworICAgICAgY29tcG9uZW50Ll9wZW5kaW5nQ2FsbGJhY2tzLnB1c2go
Y2FsbGJhY2spOworICAgIH0gZWxzZSB7CisgICAgICBjb21wb25lbnQuX3BlbmRpbmdDYWxsYmFj
a3MgPSBbY2FsbGJhY2tdOworICAgIH0KKyAgfQorfQorCit2YXIgUmVhY3RVcGRhdGVzID0gewor
ICBiYXRjaGVkVXBkYXRlczogYmF0Y2hlZFVwZGF0ZXMsCisgIGVucXVldWVVcGRhdGU6IGVucXVl
dWVVcGRhdGUKK307CisKK21vZHVsZS5leHBvcnRzID0gUmVhY3RVcGRhdGVzOworCit9LHsiLi9p
bnZhcmlhbnQiOjc1fV0sNDk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoq
CisgKiBDb3B5cmlnaHQgMjAxMyBGYWNlYm9vaywgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVy
IHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91
IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNl
bnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICog
aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNz
IHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0
d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24g
YW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9G
IEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNl
IGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICog
bGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogQHByb3ZpZGVzTW9kdWxlIFNp
bXBsZUV2ZW50UGx1Z2luCisgKi8KKworInVzZSBzdHJpY3QiOworCit2YXIgRXZlbnRDb25zdGFu
dHMgPSByZXF1aXJlKCIuL0V2ZW50Q29uc3RhbnRzIik7Cit2YXIgRXZlbnRQcm9wYWdhdG9ycyA9
IHJlcXVpcmUoIi4vRXZlbnRQcm9wYWdhdG9ycyIpOwordmFyIFN5bnRoZXRpY0V2ZW50ID0gcmVx
dWlyZSgiLi9TeW50aGV0aWNFdmVudCIpOwordmFyIFN5bnRoZXRpY0ZvY3VzRXZlbnQgPSByZXF1
aXJlKCIuL1N5bnRoZXRpY0ZvY3VzRXZlbnQiKTsKK3ZhciBTeW50aGV0aWNLZXlib2FyZEV2ZW50
ID0gcmVxdWlyZSgiLi9TeW50aGV0aWNLZXlib2FyZEV2ZW50Iik7Cit2YXIgU3ludGhldGljTW91
c2VFdmVudCA9IHJlcXVpcmUoIi4vU3ludGhldGljTW91c2VFdmVudCIpOwordmFyIFN5bnRoZXRp
Y011dGF0aW9uRXZlbnQgPSByZXF1aXJlKCIuL1N5bnRoZXRpY011dGF0aW9uRXZlbnQiKTsKK3Zh
ciBTeW50aGV0aWNUb3VjaEV2ZW50ID0gcmVxdWlyZSgiLi9TeW50aGV0aWNUb3VjaEV2ZW50Iik7
Cit2YXIgU3ludGhldGljVUlFdmVudCA9IHJlcXVpcmUoIi4vU3ludGhldGljVUlFdmVudCIpOwor
dmFyIFN5bnRoZXRpY1doZWVsRXZlbnQgPSByZXF1aXJlKCIuL1N5bnRoZXRpY1doZWVsRXZlbnQi
KTsKKwordmFyIGludmFyaWFudCA9IHJlcXVpcmUoIi4vaW52YXJpYW50Iik7Cit2YXIga2V5T2Yg
PSByZXF1aXJlKCIuL2tleU9mIik7CisKK3ZhciB0b3BMZXZlbFR5cGVzID0gRXZlbnRDb25zdGFu
dHMudG9wTGV2ZWxUeXBlczsKKwordmFyIGV2ZW50VHlwZXMgPSB7CisgIGJsdXI6IHsKKyAgICBw
aGFzZWRSZWdpc3RyYXRpb25OYW1lczogeworICAgICAgYnViYmxlZDoga2V5T2Yoe29uQmx1cjog
dHJ1ZX0pLAorICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbkJsdXJDYXB0dXJlOiB0cnVlfSkKKyAg
ICB9CisgIH0sCisgIGNsaWNrOiB7CisgICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHsKKyAg
ICAgIGJ1YmJsZWQ6IGtleU9mKHtvbkNsaWNrOiB0cnVlfSksCisgICAgICBjYXB0dXJlZDoga2V5
T2Yoe29uQ2xpY2tDYXB0dXJlOiB0cnVlfSkKKyAgICB9CisgIH0sCisgIGRvdWJsZUNsaWNrOiB7
CisgICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHsKKyAgICAgIGJ1YmJsZWQ6IGtleU9mKHtv
bkRvdWJsZUNsaWNrOiB0cnVlfSksCisgICAgICBjYXB0dXJlZDoga2V5T2Yoe29uRG91YmxlQ2xp
Y2tDYXB0dXJlOiB0cnVlfSkKKyAgICB9CisgIH0sCisgIGRyYWc6IHsKKyAgICBwaGFzZWRSZWdp
c3RyYXRpb25OYW1lczogeworICAgICAgYnViYmxlZDoga2V5T2Yoe29uRHJhZzogdHJ1ZX0pLAor
ICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbkRyYWdDYXB0dXJlOiB0cnVlfSkKKyAgICB9CisgIH0s
CisgIGRyYWdFbmQ6IHsKKyAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczogeworICAgICAgYnVi
YmxlZDoga2V5T2Yoe29uRHJhZ0VuZDogdHJ1ZX0pLAorICAgICAgY2FwdHVyZWQ6IGtleU9mKHtv
bkRyYWdFbmRDYXB0dXJlOiB0cnVlfSkKKyAgICB9CisgIH0sCisgIGRyYWdFbnRlcjogeworICAg
IHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7CisgICAgICBidWJibGVkOiBrZXlPZih7b25EcmFn
RW50ZXI6IHRydWV9KSwKKyAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25EcmFnRW50ZXJDYXB0dXJl
OiB0cnVlfSkKKyAgICB9CisgIH0sCisgIGRyYWdFeGl0OiB7CisgICAgcGhhc2VkUmVnaXN0cmF0
aW9uTmFtZXM6IHsKKyAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbkRyYWdFeGl0OiB0cnVlfSksCisg
ICAgICBjYXB0dXJlZDoga2V5T2Yoe29uRHJhZ0V4aXRDYXB0dXJlOiB0cnVlfSkKKyAgICB9Cisg
IH0sCisgIGRyYWdMZWF2ZTogeworICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7CisgICAg
ICBidWJibGVkOiBrZXlPZih7b25EcmFnTGVhdmU6IHRydWV9KSwKKyAgICAgIGNhcHR1cmVkOiBr
ZXlPZih7b25EcmFnTGVhdmVDYXB0dXJlOiB0cnVlfSkKKyAgICB9CisgIH0sCisgIGRyYWdPdmVy
OiB7CisgICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHsKKyAgICAgIGJ1YmJsZWQ6IGtleU9m
KHtvbkRyYWdPdmVyOiB0cnVlfSksCisgICAgICBjYXB0dXJlZDoga2V5T2Yoe29uRHJhZ092ZXJD
YXB0dXJlOiB0cnVlfSkKKyAgICB9CisgIH0sCisgIGRyYWdTdGFydDogeworICAgIHBoYXNlZFJl
Z2lzdHJhdGlvbk5hbWVzOiB7CisgICAgICBidWJibGVkOiBrZXlPZih7b25EcmFnU3RhcnQ6IHRy
dWV9KSwKKyAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25EcmFnU3RhcnRDYXB0dXJlOiB0cnVlfSkK
KyAgICB9CisgIH0sCisgIGRyb3A6IHsKKyAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczogewor
ICAgICAgYnViYmxlZDoga2V5T2Yoe29uRHJvcDogdHJ1ZX0pLAorICAgICAgY2FwdHVyZWQ6IGtl
eU9mKHtvbkRyb3BDYXB0dXJlOiB0cnVlfSkKKyAgICB9CisgIH0sCisgIERPTUNoYXJhY3RlckRh
dGFNb2RpZmllZDogeworICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7CisgICAgICBidWJi
bGVkOiBrZXlPZih7b25ET01DaGFyYWN0ZXJEYXRhTW9kaWZpZWQ6IHRydWV9KSwKKyAgICAgIGNh
cHR1cmVkOiBrZXlPZih7b25ET01DaGFyYWN0ZXJEYXRhTW9kaWZpZWRDYXB0dXJlOiB0cnVlfSkK
KyAgICB9CisgIH0sCisgIGZvY3VzOiB7CisgICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHsK
KyAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbkZvY3VzOiB0cnVlfSksCisgICAgICBjYXB0dXJlZDog
a2V5T2Yoe29uRm9jdXNDYXB0dXJlOiB0cnVlfSkKKyAgICB9CisgIH0sCisgIGlucHV0OiB7Cisg
ICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHsKKyAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbklu
cHV0OiB0cnVlfSksCisgICAgICBjYXB0dXJlZDoga2V5T2Yoe29uSW5wdXRDYXB0dXJlOiB0cnVl
fSkKKyAgICB9CisgIH0sCisgIGtleURvd246IHsKKyAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1l
czogeworICAgICAgYnViYmxlZDoga2V5T2Yoe29uS2V5RG93bjogdHJ1ZX0pLAorICAgICAgY2Fw
dHVyZWQ6IGtleU9mKHtvbktleURvd25DYXB0dXJlOiB0cnVlfSkKKyAgICB9CisgIH0sCisgIGtl
eVByZXNzOiB7CisgICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHsKKyAgICAgIGJ1YmJsZWQ6
IGtleU9mKHtvbktleVByZXNzOiB0cnVlfSksCisgICAgICBjYXB0dXJlZDoga2V5T2Yoe29uS2V5
UHJlc3NDYXB0dXJlOiB0cnVlfSkKKyAgICB9CisgIH0sCisgIGtleVVwOiB7CisgICAgcGhhc2Vk
UmVnaXN0cmF0aW9uTmFtZXM6IHsKKyAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbktleVVwOiB0cnVl
fSksCisgICAgICBjYXB0dXJlZDoga2V5T2Yoe29uS2V5VXBDYXB0dXJlOiB0cnVlfSkKKyAgICB9
CisgIH0sCisgIC8vIE5vdGU6IFdlIGRvIG5vdCBhbGxvdyBsaXN0ZW5pbmcgdG8gbW91c2VPdmVy
IGV2ZW50cy4gSW5zdGVhZCwgdXNlIHRoZQorICAvLyBvbk1vdXNlRW50ZXIvb25Nb3VzZUxlYXZl
IGNyZWF0ZWQgYnkgYEVudGVyTGVhdmVFdmVudFBsdWdpbmAuCisgIG1vdXNlRG93bjogeworICAg
IHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7CisgICAgICBidWJibGVkOiBrZXlPZih7b25Nb3Vz
ZURvd246IHRydWV9KSwKKyAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25Nb3VzZURvd25DYXB0dXJl
OiB0cnVlfSkKKyAgICB9CisgIH0sCisgIG1vdXNlTW92ZTogeworICAgIHBoYXNlZFJlZ2lzdHJh
dGlvbk5hbWVzOiB7CisgICAgICBidWJibGVkOiBrZXlPZih7b25Nb3VzZU1vdmU6IHRydWV9KSwK
KyAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25Nb3VzZU1vdmVDYXB0dXJlOiB0cnVlfSkKKyAgICB9
CisgIH0sCisgIG1vdXNlVXA6IHsKKyAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczogeworICAg
ICAgYnViYmxlZDoga2V5T2Yoe29uTW91c2VVcDogdHJ1ZX0pLAorICAgICAgY2FwdHVyZWQ6IGtl
eU9mKHtvbk1vdXNlVXBDYXB0dXJlOiB0cnVlfSkKKyAgICB9CisgIH0sCisgIHNjcm9sbDogewor
ICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7CisgICAgICBidWJibGVkOiBrZXlPZih7b25T
Y3JvbGw6IHRydWV9KSwKKyAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25TY3JvbGxDYXB0dXJlOiB0
cnVlfSkKKyAgICB9CisgIH0sCisgIHN1Ym1pdDogeworICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5h
bWVzOiB7CisgICAgICBidWJibGVkOiBrZXlPZih7b25TdWJtaXQ6IHRydWV9KSwKKyAgICAgIGNh
cHR1cmVkOiBrZXlPZih7b25TdWJtaXRDYXB0dXJlOiB0cnVlfSkKKyAgICB9CisgIH0sCisgIHRv
dWNoQ2FuY2VsOiB7CisgICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHsKKyAgICAgIGJ1YmJs
ZWQ6IGtleU9mKHtvblRvdWNoQ2FuY2VsOiB0cnVlfSksCisgICAgICBjYXB0dXJlZDoga2V5T2Yo
e29uVG91Y2hDYW5jZWxDYXB0dXJlOiB0cnVlfSkKKyAgICB9CisgIH0sCisgIHRvdWNoRW5kOiB7
CisgICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHsKKyAgICAgIGJ1YmJsZWQ6IGtleU9mKHtv
blRvdWNoRW5kOiB0cnVlfSksCisgICAgICBjYXB0dXJlZDoga2V5T2Yoe29uVG91Y2hFbmRDYXB0
dXJlOiB0cnVlfSkKKyAgICB9CisgIH0sCisgIHRvdWNoTW92ZTogeworICAgIHBoYXNlZFJlZ2lz
dHJhdGlvbk5hbWVzOiB7CisgICAgICBidWJibGVkOiBrZXlPZih7b25Ub3VjaE1vdmU6IHRydWV9
KSwKKyAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25Ub3VjaE1vdmVDYXB0dXJlOiB0cnVlfSkKKyAg
ICB9CisgIH0sCisgIHRvdWNoU3RhcnQ6IHsKKyAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczog
eworICAgICAgYnViYmxlZDoga2V5T2Yoe29uVG91Y2hTdGFydDogdHJ1ZX0pLAorICAgICAgY2Fw
dHVyZWQ6IGtleU9mKHtvblRvdWNoU3RhcnRDYXB0dXJlOiB0cnVlfSkKKyAgICB9CisgIH0sCisg
IHdoZWVsOiB7CisgICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHsKKyAgICAgIGJ1YmJsZWQ6
IGtleU9mKHtvbldoZWVsOiB0cnVlfSksCisgICAgICBjYXB0dXJlZDoga2V5T2Yoe29uV2hlZWxD
YXB0dXJlOiB0cnVlfSkKKyAgICB9CisgIH0KK307CisKK3ZhciB0b3BMZXZlbEV2ZW50c1RvRGlz
cGF0Y2hDb25maWcgPSB7CisgIHRvcEJsdXI6ICAgICAgICBldmVudFR5cGVzLmJsdXIsCisgIHRv
cENsaWNrOiAgICAgICBldmVudFR5cGVzLmNsaWNrLAorICB0b3BEb3VibGVDbGljazogZXZlbnRU
eXBlcy5kb3VibGVDbGljaywKKyAgdG9wRE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVkOiBldmVudFR5
cGVzLkRPTUNoYXJhY3RlckRhdGFNb2RpZmllZCwKKyAgdG9wRHJhZzogICAgICAgIGV2ZW50VHlw
ZXMuZHJhZywKKyAgdG9wRHJhZ0VuZDogICAgIGV2ZW50VHlwZXMuZHJhZ0VuZCwKKyAgdG9wRHJh
Z0VudGVyOiAgIGV2ZW50VHlwZXMuZHJhZ0VudGVyLAorICB0b3BEcmFnRXhpdDogICAgZXZlbnRU
eXBlcy5kcmFnRXhpdCwKKyAgdG9wRHJhZ0xlYXZlOiAgIGV2ZW50VHlwZXMuZHJhZ0xlYXZlLAor
ICB0b3BEcmFnT3ZlcjogICAgZXZlbnRUeXBlcy5kcmFnT3ZlciwKKyAgdG9wRHJhZ1N0YXJ0OiAg
IGV2ZW50VHlwZXMuZHJhZ1N0YXJ0LAorICB0b3BEcm9wOiAgICAgICAgZXZlbnRUeXBlcy5kcm9w
LAorICB0b3BGb2N1czogICAgICAgZXZlbnRUeXBlcy5mb2N1cywKKyAgdG9wSW5wdXQ6ICAgICAg
IGV2ZW50VHlwZXMuaW5wdXQsCisgIHRvcEtleURvd246ICAgICBldmVudFR5cGVzLmtleURvd24s
CisgIHRvcEtleVByZXNzOiAgICBldmVudFR5cGVzLmtleVByZXNzLAorICB0b3BLZXlVcDogICAg
ICAgZXZlbnRUeXBlcy5rZXlVcCwKKyAgdG9wTW91c2VEb3duOiAgIGV2ZW50VHlwZXMubW91c2VE
b3duLAorICB0b3BNb3VzZU1vdmU6ICAgZXZlbnRUeXBlcy5tb3VzZU1vdmUsCisgIHRvcE1vdXNl
VXA6ICAgICBldmVudFR5cGVzLm1vdXNlVXAsCisgIHRvcFNjcm9sbDogICAgICBldmVudFR5cGVz
LnNjcm9sbCwKKyAgdG9wU3VibWl0OiAgICAgIGV2ZW50VHlwZXMuc3VibWl0LAorICB0b3BUb3Vj
aENhbmNlbDogZXZlbnRUeXBlcy50b3VjaENhbmNlbCwKKyAgdG9wVG91Y2hFbmQ6ICAgIGV2ZW50
VHlwZXMudG91Y2hFbmQsCisgIHRvcFRvdWNoTW92ZTogICBldmVudFR5cGVzLnRvdWNoTW92ZSwK
KyAgdG9wVG91Y2hTdGFydDogIGV2ZW50VHlwZXMudG91Y2hTdGFydCwKKyAgdG9wV2hlZWw6ICAg
ICAgIGV2ZW50VHlwZXMud2hlZWwKK307CisKK3ZhciBTaW1wbGVFdmVudFBsdWdpbiA9IHsKKwor
ICBldmVudFR5cGVzOiBldmVudFR5cGVzLAorCisgIC8qKgorICAgKiBTYW1lIGFzIHRoZSBkZWZh
dWx0IGltcGxlbWVudGF0aW9uLCBleGNlcHQgY2FuY2VscyB0aGUgZXZlbnQgd2hlbiByZXR1cm4K
KyAgICogdmFsdWUgaXMgZmFsc2UuCisgICAqCisgICAqIEBwYXJhbSB7b2JqZWN0fSBFdmVudCB0
byBiZSBkaXNwYXRjaGVkLgorICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBBcHBsaWNhdGlvbi1sZXZl
bCBjYWxsYmFjay4KKyAgICogQHBhcmFtIHtzdHJpbmd9IGRvbUlEIERPTSBJRCB0byBwYXNzIHRv
IHRoZSBjYWxsYmFjay4KKyAgICovCisgIGV4ZWN1dGVEaXNwYXRjaDogZnVuY3Rpb24oZXZlbnQs
IGxpc3RlbmVyLCBkb21JRCkgeworICAgIHZhciByZXR1cm5WYWx1ZSA9IGxpc3RlbmVyKGV2ZW50
LCBkb21JRCk7CisgICAgaWYgKHJldHVyblZhbHVlID09PSBmYWxzZSkgeworICAgICAgZXZlbnQu
c3RvcFByb3BhZ2F0aW9uKCk7CisgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgIH0K
KyAgfSwKKworICAvKioKKyAgICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVHlwZSBSZWNvcmQg
ZnJvbSBgRXZlbnRDb25zdGFudHNgLgorICAgKiBAcGFyYW0ge0RPTUV2ZW50VGFyZ2V0fSB0b3BM
ZXZlbFRhcmdldCBUaGUgbGlzdGVuaW5nIGNvbXBvbmVudCByb290IG5vZGUuCisgICAqIEBwYXJh
bSB7c3RyaW5nfSB0b3BMZXZlbFRhcmdldElEIElEIG9mIGB0b3BMZXZlbFRhcmdldGAuCisgICAq
IEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC4KKyAgICog
QHJldHVybiB7Kn0gQW4gYWNjdW11bGF0aW9uIG9mIHN5bnRoZXRpYyBldmVudHMuCisgICAqIEBz
ZWUge0V2ZW50UGx1Z2luSHViLmV4dHJhY3RFdmVudHN9CisgICAqLworICBleHRyYWN0RXZlbnRz
OiBmdW5jdGlvbigKKyAgICAgIHRvcExldmVsVHlwZSwKKyAgICAgIHRvcExldmVsVGFyZ2V0LAor
ICAgICAgdG9wTGV2ZWxUYXJnZXRJRCwKKyAgICAgIG5hdGl2ZUV2ZW50KSB7CisgICAgdmFyIGRp
c3BhdGNoQ29uZmlnID0gdG9wTGV2ZWxFdmVudHNUb0Rpc3BhdGNoQ29uZmlnW3RvcExldmVsVHlw
ZV07CisgICAgaWYgKCFkaXNwYXRjaENvbmZpZykgeworICAgICAgcmV0dXJuIG51bGw7CisgICAg
fQorICAgIHZhciBFdmVudENvbnN0cnVjdG9yOworICAgIHN3aXRjaCh0b3BMZXZlbFR5cGUpIHsK
KyAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BJbnB1dDoKKyAgICAgIGNhc2UgdG9wTGV2ZWxU
eXBlcy50b3BTdWJtaXQ6CisgICAgICAgIC8vIEhUTUwgRXZlbnRzCisgICAgICAgIC8vIEBzZWUg
aHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUvaW5kZXguaHRtbCNldmVudHMtMAorICAgICAgICBF
dmVudENvbnN0cnVjdG9yID0gU3ludGhldGljRXZlbnQ7CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSB0b3BMZXZlbFR5cGVzLnRvcEtleURvd246CisgICAgICBjYXNlIHRvcExldmVsVHlwZXMu
dG9wS2V5UHJlc3M6CisgICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wS2V5VXA6CisgICAgICAg
IEV2ZW50Q29uc3RydWN0b3IgPSBTeW50aGV0aWNLZXlib2FyZEV2ZW50OworICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BCbHVyOgorICAgICAgY2FzZSB0b3BMZXZl
bFR5cGVzLnRvcEZvY3VzOgorICAgICAgICBFdmVudENvbnN0cnVjdG9yID0gU3ludGhldGljRm9j
dXNFdmVudDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wQ2xp
Y2s6CisgICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wRG91YmxlQ2xpY2s6CisgICAgICBjYXNl
IHRvcExldmVsVHlwZXMudG9wRHJhZzoKKyAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BEcmFn
RW5kOgorICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcERyYWdFbnRlcjoKKyAgICAgIGNhc2Ug
dG9wTGV2ZWxUeXBlcy50b3BEcmFnRXhpdDoKKyAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BE
cmFnTGVhdmU6CisgICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wRHJhZ092ZXI6CisgICAgICBj
YXNlIHRvcExldmVsVHlwZXMudG9wRHJhZ1N0YXJ0OgorICAgICAgY2FzZSB0b3BMZXZlbFR5cGVz
LnRvcERyb3A6CisgICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wTW91c2VEb3duOgorICAgICAg
Y2FzZSB0b3BMZXZlbFR5cGVzLnRvcE1vdXNlTW92ZToKKyAgICAgIGNhc2UgdG9wTGV2ZWxUeXBl
cy50b3BNb3VzZVVwOgorICAgICAgICBFdmVudENvbnN0cnVjdG9yID0gU3ludGhldGljTW91c2VF
dmVudDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wRE9NQ2hh
cmFjdGVyRGF0YU1vZGlmaWVkOgorICAgICAgICBFdmVudENvbnN0cnVjdG9yID0gU3ludGhldGlj
TXV0YXRpb25FdmVudDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIHRvcExldmVsVHlwZXMu
dG9wVG91Y2hDYW5jZWw6CisgICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wVG91Y2hFbmQ6Cisg
ICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wVG91Y2hNb3ZlOgorICAgICAgY2FzZSB0b3BMZXZl
bFR5cGVzLnRvcFRvdWNoU3RhcnQ6CisgICAgICAgIEV2ZW50Q29uc3RydWN0b3IgPSBTeW50aGV0
aWNUb3VjaEV2ZW50OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50
b3BTY3JvbGw6CisgICAgICAgIEV2ZW50Q29uc3RydWN0b3IgPSBTeW50aGV0aWNVSUV2ZW50Owor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BXaGVlbDoKKyAgICAg
ICAgRXZlbnRDb25zdHJ1Y3RvciA9IFN5bnRoZXRpY1doZWVsRXZlbnQ7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBpbnZhcmlhbnQoCisgICAgICBFdmVudENvbnN0cnVjdG9yLAorICAgICAg
J1NpbXBsZUV2ZW50UGx1Z2luOiBVbmhhbmRsZWQgZXZlbnQgdHlwZSwgYCVzYC4nLAorICAgICAg
dG9wTGV2ZWxUeXBlCisgICAgKTsKKyAgICB2YXIgZXZlbnQgPSBFdmVudENvbnN0cnVjdG9yLmdl
dFBvb2xlZCgKKyAgICAgIGRpc3BhdGNoQ29uZmlnLAorICAgICAgdG9wTGV2ZWxUYXJnZXRJRCwK
KyAgICAgIG5hdGl2ZUV2ZW50CisgICAgKTsKKyAgICBFdmVudFByb3BhZ2F0b3JzLmFjY3VtdWxh
dGVUd29QaGFzZURpc3BhdGNoZXMoZXZlbnQpOworICAgIHJldHVybiBldmVudDsKKyAgfQorCit9
OworCittb2R1bGUuZXhwb3J0cyA9IFNpbXBsZUV2ZW50UGx1Z2luOworCit9LHsiLi9FdmVudENv
bnN0YW50cyI6MTMsIi4vRXZlbnRQcm9wYWdhdG9ycyI6MTgsIi4vU3ludGhldGljRXZlbnQiOjUw
LCIuL1N5bnRoZXRpY0ZvY3VzRXZlbnQiOjUxLCIuL1N5bnRoZXRpY0tleWJvYXJkRXZlbnQiOjUy
LCIuL1N5bnRoZXRpY01vdXNlRXZlbnQiOjUzLCIuL1N5bnRoZXRpY011dGF0aW9uRXZlbnQiOjU0
LCIuL1N5bnRoZXRpY1RvdWNoRXZlbnQiOjU1LCIuL1N5bnRoZXRpY1VJRXZlbnQiOjU2LCIuL1N5
bnRoZXRpY1doZWVsRXZlbnQiOjU3LCIuL2ludmFyaWFudCI6NzUsIi4va2V5T2YiOjc5fV0sNTA6
W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAx
MyBGYWNlYm9vaywgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5z
ZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMg
ZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBv
YnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUu
b3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxp
Y2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0
ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywK
KyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIg
ZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMg
bGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIg
dGhlIExpY2Vuc2UuCisgKgorICogQHByb3ZpZGVzTW9kdWxlIFN5bnRoZXRpY0V2ZW50CisgKiBA
dHlwZWNoZWNrcyBzdGF0aWMtb25seQorICovCisKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIFBvb2xl
ZENsYXNzID0gcmVxdWlyZSgiLi9Qb29sZWRDbGFzcyIpOworCit2YXIgZW1wdHlGdW5jdGlvbiA9
IHJlcXVpcmUoIi4vZW1wdHlGdW5jdGlvbiIpOwordmFyIGdldEV2ZW50VGFyZ2V0ID0gcmVxdWly
ZSgiLi9nZXRFdmVudFRhcmdldCIpOwordmFyIG1lcmdlID0gcmVxdWlyZSgiLi9tZXJnZSIpOwor
dmFyIG1lcmdlSW50byA9IHJlcXVpcmUoIi4vbWVyZ2VJbnRvIik7CisKKy8qKgorICogQGludGVy
ZmFjZSBFdmVudAorICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVu
dHMvCisgKi8KK3ZhciBFdmVudEludGVyZmFjZSA9IHsKKyAgdHlwZTogbnVsbCwKKyAgdGFyZ2V0
OiBnZXRFdmVudFRhcmdldCwKKyAgY3VycmVudFRhcmdldDogbnVsbCwKKyAgZXZlbnRQaGFzZTog
bnVsbCwKKyAgYnViYmxlczogbnVsbCwKKyAgY2FuY2VsYWJsZTogbnVsbCwKKyAgdGltZVN0YW1w
OiBmdW5jdGlvbihldmVudCkgeworICAgIHJldHVybiBldmVudC50aW1lU3RhbXAgfHwgRGF0ZS5u
b3coKTsKKyAgfSwKKyAgZGVmYXVsdFByZXZlbnRlZDogbnVsbCwKKyAgaXNUcnVzdGVkOiBudWxs
Cit9OworCisvKioKKyAqIFN5bnRoZXRpYyBldmVudHMgYXJlIGRpc3BhdGNoZWQgYnkgZXZlbnQg
cGx1Z2lucywgdHlwaWNhbGx5IGluIHJlc3BvbnNlIHRvIGEKKyAqIHRvcC1sZXZlbCBldmVudCBk
ZWxlZ2F0aW9uIGhhbmRsZXIuCisgKgorICogVGhlc2Ugc3lzdGVtcyBzaG91bGQgZ2VuZXJhbGx5
IHVzZSBwb29saW5nIHRvIHJlZHVjZSB0aGUgZnJlcXVlbmN5IG9mIGdhcmJhZ2UKKyAqIGNvbGxl
Y3Rpb24uIFRoZSBzeXN0ZW0gc2hvdWxkIGNoZWNrIGBpc1BlcnNpc3RlbnRgIHRvIGRldGVybWlu
ZSB3aGV0aGVyIHRoZQorICogZXZlbnQgc2hvdWxkIGJlIHJlbGVhc2VkIGludG8gdGhlIHBvb2wg
YWZ0ZXIgYmVpbmcgZGlzcGF0Y2hlZC4gVXNlcnMgdGhhdAorICogbmVlZCBhIHBlcnNpc3RlZCBl
dmVudCBzaG91bGQgaW52b2tlIGBwZXJzaXN0YC4KKyAqCisgKiBTeW50aGV0aWMgZXZlbnRzIChh
bmQgc3ViY2xhc3NlcykgaW1wbGVtZW50IHRoZSBET00gTGV2ZWwgMyBFdmVudHMgQVBJIGJ5Cisg
KiBub3JtYWxpemluZyBicm93c2VyIHF1aXJrcy4gU3ViY2xhc3NlcyBkbyBub3QgbmVjZXNzYXJp
bHkgaGF2ZSB0byBpbXBsZW1lbnQgYQorICogRE9NIGludGVyZmFjZTsgY3VzdG9tIGFwcGxpY2F0
aW9uLXNwZWNpZmljIGV2ZW50cyBjYW4gYWxzbyBzdWJjbGFzcyB0aGlzLgorICoKKyAqIEBwYXJh
bSB7b2JqZWN0fSBkaXNwYXRjaENvbmZpZyBDb25maWd1cmF0aW9uIHVzZWQgdG8gZGlzcGF0Y2gg
dGhpcyBldmVudC4KKyAqIEBwYXJhbSB7c3RyaW5nfSBkaXNwYXRjaE1hcmtlciBNYXJrZXIgaWRl
bnRpZnlpbmcgdGhlIGV2ZW50IHRhcmdldC4KKyAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVu
dCBOYXRpdmUgYnJvd3NlciBldmVudC4KKyAqLworZnVuY3Rpb24gU3ludGhldGljRXZlbnQoZGlz
cGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCkgeworICB0aGlzLmRpc3Bh
dGNoQ29uZmlnID0gZGlzcGF0Y2hDb25maWc7CisgIHRoaXMuZGlzcGF0Y2hNYXJrZXIgPSBkaXNw
YXRjaE1hcmtlcjsKKyAgdGhpcy5uYXRpdmVFdmVudCA9IG5hdGl2ZUV2ZW50OworCisgIHZhciBJ
bnRlcmZhY2UgPSB0aGlzLmNvbnN0cnVjdG9yLkludGVyZmFjZTsKKyAgZm9yICh2YXIgcHJvcE5h
bWUgaW4gSW50ZXJmYWNlKSB7CisgICAgdmFyIG5vcm1hbGl6ZSA9IEludGVyZmFjZVtwcm9wTmFt
ZV07CisgICAgaWYgKG5vcm1hbGl6ZSkgeworICAgICAgdGhpc1twcm9wTmFtZV0gPSBub3JtYWxp
emUobmF0aXZlRXZlbnQpOworICAgIH0gZWxzZSB7CisgICAgICB0aGlzW3Byb3BOYW1lXSA9IG5h
dGl2ZUV2ZW50W3Byb3BOYW1lXTsKKyAgICB9CisgIH0KKworICBpZiAobmF0aXZlRXZlbnQuZGVm
YXVsdFByZXZlbnRlZCB8fCBuYXRpdmVFdmVudC5yZXR1cm5WYWx1ZSA9PT0gZmFsc2UpIHsKKyAg
ICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNUcnVl
OworICB9IGVsc2UgeworICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gZW1wdHlGdW5jdGlv
bi50aGF0UmV0dXJuc0ZhbHNlOworICB9CisgIHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSBl
bXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zRmFsc2U7Cit9CisKK21lcmdlSW50byhTeW50aGV0aWNF
dmVudC5wcm90b3R5cGUsIHsKKworICBwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKSB7CisgICAg
dGhpcy5kZWZhdWx0UHJldmVudGVkID0gdHJ1ZTsKKyAgICB2YXIgZXZlbnQgPSB0aGlzLm5hdGl2
ZUV2ZW50OworICAgIGV2ZW50LnByZXZlbnREZWZhdWx0ID8gZXZlbnQucHJldmVudERlZmF1bHQo
KSA6IGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7CisgICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50
ZWQgPSBlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zVHJ1ZTsKKyAgfSwKKworICBzdG9wUHJvcGFn
YXRpb246IGZ1bmN0aW9uKCkgeworICAgIHZhciBldmVudCA9IHRoaXMubmF0aXZlRXZlbnQ7Cisg
ICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uID8gZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkgOiBldmVu
dC5jYW5jZWxCdWJibGUgPSB0cnVlOworICAgIHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSBl
bXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zVHJ1ZTsKKyAgfSwKKworICAvKioKKyAgICogV2UgcmVs
ZWFzZSBhbGwgZGlzcGF0Y2hlZCBgU3ludGhldGljRXZlbnRgcyBhZnRlciBlYWNoIGV2ZW50IGxv
b3AsIGFkZGluZworICAgKiB0aGVtIGJhY2sgaW50byB0aGUgcG9vbC4gVGhpcyBhbGxvd3MgYSB3
YXkgdG8gaG9sZCBvbnRvIGEgcmVmZXJlbmNlIHRoYXQKKyAgICogd29uJ3QgYmUgYWRkZWQgYmFj
ayBpbnRvIHRoZSBwb29sLgorICAgKi8KKyAgcGVyc2lzdDogZnVuY3Rpb24oKSB7CisgICAgdGhp
cy5pc1BlcnNpc3RlbnQgPSBlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zVHJ1ZTsKKyAgfSwKKwor
ICAvKioKKyAgICogQ2hlY2tzIGlmIHRoaXMgZXZlbnQgc2hvdWxkIGJlIHJlbGVhc2VkIGJhY2sg
aW50byB0aGUgcG9vbC4KKyAgICoKKyAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGlz
IHNob3VsZCBub3QgYmUgcmVsZWFzZWQsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIGlzUGVy
c2lzdGVudDogZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc0ZhbHNlLAorCisgIC8qKgorICAgKiBg
UG9vbGVkQ2xhc3NgIGxvb2tzIGZvciBgZGVzdHJ1Y3RvcmAgb24gZWFjaCBpbnN0YW5jZSBpdCBy
ZWxlYXNlcy4KKyAgICovCisgIGRlc3RydWN0b3I6IGZ1bmN0aW9uKCkgeworICAgIHZhciBJbnRl
cmZhY2UgPSB0aGlzLmNvbnN0cnVjdG9yLkludGVyZmFjZTsKKyAgICBmb3IgKHZhciBwcm9wTmFt
ZSBpbiBJbnRlcmZhY2UpIHsKKyAgICAgIHRoaXNbcHJvcE5hbWVdID0gbnVsbDsKKyAgICB9Cisg
ICAgdGhpcy5kaXNwYXRjaENvbmZpZyA9IG51bGw7CisgICAgdGhpcy5kaXNwYXRjaE1hcmtlciA9
IG51bGw7CisgICAgdGhpcy5uYXRpdmVFdmVudCA9IG51bGw7CisgIH0KKworfSk7CisKK1N5bnRo
ZXRpY0V2ZW50LkludGVyZmFjZSA9IEV2ZW50SW50ZXJmYWNlOworCisvKioKKyAqIEhlbHBlciB0
byByZWR1Y2UgYm9pbGVycGxhdGUgd2hlbiBjcmVhdGluZyBzdWJjbGFzc2VzLgorICoKKyAqIEBw
YXJhbSB7ZnVuY3Rpb259IENsYXNzCisgKiBAcGFyYW0gez9vYmplY3R9IEludGVyZmFjZQorICov
CitTeW50aGV0aWNFdmVudC5hdWdtZW50Q2xhc3MgPSBmdW5jdGlvbihDbGFzcywgSW50ZXJmYWNl
KSB7CisgIHZhciBTdXBlciA9IHRoaXM7CisKKyAgdmFyIHByb3RvdHlwZSA9IE9iamVjdC5jcmVh
dGUoU3VwZXIucHJvdG90eXBlKTsKKyAgbWVyZ2VJbnRvKHByb3RvdHlwZSwgQ2xhc3MucHJvdG90
eXBlKTsKKyAgQ2xhc3MucHJvdG90eXBlID0gcHJvdG90eXBlOworICBDbGFzcy5wcm90b3R5cGUu
Y29uc3RydWN0b3IgPSBDbGFzczsKKworICBDbGFzcy5JbnRlcmZhY2UgPSBtZXJnZShTdXBlci5J
bnRlcmZhY2UsIEludGVyZmFjZSk7CisgIENsYXNzLmF1Z21lbnRDbGFzcyA9IFN1cGVyLmF1Z21l
bnRDbGFzczsKKworICBQb29sZWRDbGFzcy5hZGRQb29saW5nVG8oQ2xhc3MsIFBvb2xlZENsYXNz
LnRocmVlQXJndW1lbnRQb29sZXIpOworfTsKKworUG9vbGVkQ2xhc3MuYWRkUG9vbGluZ1RvKFN5
bnRoZXRpY0V2ZW50LCBQb29sZWRDbGFzcy50aHJlZUFyZ3VtZW50UG9vbGVyKTsKKworbW9kdWxl
LmV4cG9ydHMgPSBTeW50aGV0aWNFdmVudDsKKworfSx7Ii4vUG9vbGVkQ2xhc3MiOjIwLCIuL2Vt
cHR5RnVuY3Rpb24iOjY0LCIuL2dldEV2ZW50VGFyZ2V0Ijo3MCwiLi9tZXJnZSI6ODEsIi4vbWVy
Z2VJbnRvIjo4M31dLDUxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgor
ICogQ29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0
aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBt
YXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5z
ZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0
dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyBy
ZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdh
cmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFu
ICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBB
TlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBm
b3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxp
bWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBTeW50
aGV0aWNGb2N1c0V2ZW50CisgKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seQorICovCisKKyJ1c2Ug
c3RyaWN0IjsKKwordmFyIFN5bnRoZXRpY1VJRXZlbnQgPSByZXF1aXJlKCIuL1N5bnRoZXRpY1VJ
RXZlbnQiKTsKKworLyoqCisgKiBAaW50ZXJmYWNlIEZvY3VzRXZlbnQKKyAqIEBzZWUgaHR0cDov
L3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLworICovCit2YXIgRm9jdXNFdmVudElu
dGVyZmFjZSA9IHsKKyAgcmVsYXRlZFRhcmdldDogbnVsbAorfTsKKworLyoqCisgKiBAcGFyYW0g
e29iamVjdH0gZGlzcGF0Y2hDb25maWcgQ29uZmlndXJhdGlvbiB1c2VkIHRvIGRpc3BhdGNoIHRo
aXMgZXZlbnQuCisgKiBAcGFyYW0ge3N0cmluZ30gZGlzcGF0Y2hNYXJrZXIgTWFya2VyIGlkZW50
aWZ5aW5nIHRoZSBldmVudCB0YXJnZXQuCisgKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQg
TmF0aXZlIGJyb3dzZXIgZXZlbnQuCisgKiBAZXh0ZW5kcyB7U3ludGhldGljVUlFdmVudH0KKyAq
LworZnVuY3Rpb24gU3ludGhldGljRm9jdXNFdmVudChkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hN
YXJrZXIsIG5hdGl2ZUV2ZW50KSB7CisgIFN5bnRoZXRpY1VJRXZlbnQuY2FsbCh0aGlzLCBkaXNw
YXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50KTsKK30KKworU3ludGhldGlj
VUlFdmVudC5hdWdtZW50Q2xhc3MoU3ludGhldGljRm9jdXNFdmVudCwgRm9jdXNFdmVudEludGVy
ZmFjZSk7CisKK21vZHVsZS5leHBvcnRzID0gU3ludGhldGljRm9jdXNFdmVudDsKKworfSx7Ii4v
U3ludGhldGljVUlFdmVudCI6NTZ9XSw1MjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0
cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgorICogTGljZW5z
ZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7
CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgg
dGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQK
KyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisg
KiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRp
bmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmli
dXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJ
VElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhl
IExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMg
YW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBAcHJvdmlkZXNN
b2R1bGUgU3ludGhldGljS2V5Ym9hcmRFdmVudAorICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHkK
KyAqLworCisidXNlIHN0cmljdCI7CisKK3ZhciBTeW50aGV0aWNVSUV2ZW50ID0gcmVxdWlyZSgi
Li9TeW50aGV0aWNVSUV2ZW50Iik7CisKKy8qKgorICogQGludGVyZmFjZSBLZXlib2FyZEV2ZW50
CisgKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8KKyAqLwor
dmFyIEtleWJvYXJkRXZlbnRJbnRlcmZhY2UgPSB7CisgICdjaGFyJzogbnVsbCwKKyAga2V5OiBu
dWxsLAorICBsb2NhdGlvbjogbnVsbCwKKyAgY3RybEtleTogbnVsbCwKKyAgc2hpZnRLZXk6IG51
bGwsCisgIGFsdEtleTogbnVsbCwKKyAgbWV0YUtleTogbnVsbCwKKyAgcmVwZWF0OiBudWxsLAor
ICBsb2NhbGU6IG51bGwsCisgIC8vIExlZ2FjeSBJbnRlcmZhY2UKKyAgY2hhckNvZGU6IG51bGws
CisgIGtleUNvZGU6IG51bGwsCisgIHdoaWNoOiBudWxsCit9OworCisvKioKKyAqIEBwYXJhbSB7
b2JqZWN0fSBkaXNwYXRjaENvbmZpZyBDb25maWd1cmF0aW9uIHVzZWQgdG8gZGlzcGF0Y2ggdGhp
cyBldmVudC4KKyAqIEBwYXJhbSB7c3RyaW5nfSBkaXNwYXRjaE1hcmtlciBNYXJrZXIgaWRlbnRp
ZnlpbmcgdGhlIGV2ZW50IHRhcmdldC4KKyAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBO
YXRpdmUgYnJvd3NlciBldmVudC4KKyAqIEBleHRlbmRzIHtTeW50aGV0aWNVSUV2ZW50fQorICov
CitmdW5jdGlvbiBTeW50aGV0aWNLZXlib2FyZEV2ZW50KGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRj
aE1hcmtlciwgbmF0aXZlRXZlbnQpIHsKKyAgU3ludGhldGljVUlFdmVudC5jYWxsKHRoaXMsIGRp
c3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQpOworfQorCitTeW50aGV0
aWNVSUV2ZW50LmF1Z21lbnRDbGFzcyhTeW50aGV0aWNLZXlib2FyZEV2ZW50LCBLZXlib2FyZEV2
ZW50SW50ZXJmYWNlKTsKKworbW9kdWxlLmV4cG9ydHMgPSBTeW50aGV0aWNLZXlib2FyZEV2ZW50
OworCit9LHsiLi9TeW50aGV0aWNVSUV2ZW50Ijo1Nn1dLDUzOltmdW5jdGlvbihyZXF1aXJlLG1v
ZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAq
CisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUg
IkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBs
aWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUg
TGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNF
LTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQg
dG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNl
IGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJ
RVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4K
KyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBw
ZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAq
IEBwcm92aWRlc01vZHVsZSBTeW50aGV0aWNNb3VzZUV2ZW50CisgKiBAdHlwZWNoZWNrcyBzdGF0
aWMtb25seQorICovCisKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIFN5bnRoZXRpY1VJRXZlbnQgPSBy
ZXF1aXJlKCIuL1N5bnRoZXRpY1VJRXZlbnQiKTsKK3ZhciBWaWV3cG9ydE1ldHJpY3MgPSByZXF1
aXJlKCIuL1ZpZXdwb3J0TWV0cmljcyIpOworCisvKioKKyAqIEBpbnRlcmZhY2UgTW91c2VFdmVu
dAorICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvCisgKi8K
K3ZhciBNb3VzZUV2ZW50SW50ZXJmYWNlID0geworICBzY3JlZW5YOiBudWxsLAorICBzY3JlZW5Z
OiBudWxsLAorICBjbGllbnRYOiBudWxsLAorICBjbGllbnRZOiBudWxsLAorICBjdHJsS2V5OiBu
dWxsLAorICBzaGlmdEtleTogbnVsbCwKKyAgYWx0S2V5OiBudWxsLAorICBtZXRhS2V5OiBudWxs
LAorICBidXR0b246IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgLy8gV2Via2l0LCBGaXJlZm94LCBJ
RTkrCisgICAgLy8gd2hpY2g6ICAxIDIgMworICAgIC8vIGJ1dHRvbjogMCAxIDIgKHN0YW5kYXJk
KQorICAgIHZhciBidXR0b24gPSBldmVudC5idXR0b247CisgICAgaWYgKCd3aGljaCcgaW4gZXZl
bnQpIHsKKyAgICAgIHJldHVybiBidXR0b247CisgICAgfQorICAgIC8vIElFPDkKKyAgICAvLyB3
aGljaDogIHVuZGVmaW5lZAorICAgIC8vIGJ1dHRvbjogMCAwIDAKKyAgICAvLyBidXR0b246IDEg
NCAyIChvbm1vdXNldXApCisgICAgcmV0dXJuIGJ1dHRvbiA9PT0gMiA/IDIgOiBidXR0b24gPT09
IDQgPyAxIDogMDsKKyAgfSwKKyAgYnV0dG9uczogbnVsbCwKKyAgcmVsYXRlZFRhcmdldDogZnVu
Y3Rpb24oZXZlbnQpIHsKKyAgICByZXR1cm4gZXZlbnQucmVsYXRlZFRhcmdldCB8fCAoCisgICAg
ICBldmVudC5mcm9tRWxlbWVudCA9PT0gZXZlbnQuc3JjRWxlbWVudCA/CisgICAgICAgIGV2ZW50
LnRvRWxlbWVudCA6CisgICAgICAgIGV2ZW50LmZyb21FbGVtZW50CisgICAgKTsKKyAgfSwKKyAg
Ly8gIlByb3ByaWV0YXJ5IiBJbnRlcmZhY2UuCisgIHBhZ2VYOiBmdW5jdGlvbihldmVudCkgewor
ICAgIHJldHVybiAncGFnZVgnIGluIGV2ZW50ID8KKyAgICAgIGV2ZW50LnBhZ2VYIDoKKyAgICAg
IGV2ZW50LmNsaWVudFggKyBWaWV3cG9ydE1ldHJpY3MuY3VycmVudFNjcm9sbExlZnQ7CisgIH0s
CisgIHBhZ2VZOiBmdW5jdGlvbihldmVudCkgeworICAgIHJldHVybiAncGFnZVknIGluIGV2ZW50
ID8KKyAgICAgIGV2ZW50LnBhZ2VZIDoKKyAgICAgIGV2ZW50LmNsaWVudFkgKyBWaWV3cG9ydE1l
dHJpY3MuY3VycmVudFNjcm9sbFRvcDsKKyAgfQorfTsKKworLyoqCisgKiBAcGFyYW0ge29iamVj
dH0gZGlzcGF0Y2hDb25maWcgQ29uZmlndXJhdGlvbiB1c2VkIHRvIGRpc3BhdGNoIHRoaXMgZXZl
bnQuCisgKiBAcGFyYW0ge3N0cmluZ30gZGlzcGF0Y2hNYXJrZXIgTWFya2VyIGlkZW50aWZ5aW5n
IHRoZSBldmVudCB0YXJnZXQuCisgKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZl
IGJyb3dzZXIgZXZlbnQuCisgKiBAZXh0ZW5kcyB7U3ludGhldGljVUlFdmVudH0KKyAqLworZnVu
Y3Rpb24gU3ludGhldGljTW91c2VFdmVudChkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIs
IG5hdGl2ZUV2ZW50KSB7CisgIFN5bnRoZXRpY1VJRXZlbnQuY2FsbCh0aGlzLCBkaXNwYXRjaENv
bmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50KTsKK30KKworU3ludGhldGljVUlFdmVu
dC5hdWdtZW50Q2xhc3MoU3ludGhldGljTW91c2VFdmVudCwgTW91c2VFdmVudEludGVyZmFjZSk7
CisKK21vZHVsZS5leHBvcnRzID0gU3ludGhldGljTW91c2VFdmVudDsKKworfSx7Ii4vU3ludGhl
dGljVUlFdmVudCI6NTYsIi4vVmlld3BvcnRNZXRyaWNzIjo1OX1dLDU0OltmdW5jdGlvbihyZXF1
aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIElu
Yy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4w
ICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGlu
IGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBv
ZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9M
SUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBh
Z3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBM
aWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdB
UlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1w
bGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVy
bmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgor
ICoKKyAqIEBwcm92aWRlc01vZHVsZSBTeW50aGV0aWNNdXRhdGlvbkV2ZW50CisgKiBAdHlwZWNo
ZWNrcyBzdGF0aWMtb25seQorICovCisKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIFN5bnRoZXRpY0V2
ZW50ID0gcmVxdWlyZSgiLi9TeW50aGV0aWNFdmVudCIpOworCisvKioKKyAqIEBpbnRlcmZhY2Ug
TXV0YXRpb25FdmVudAorICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1F
dmVudHMvCisgKi8KK3ZhciBNdXRhdGlvbkV2ZW50SW50ZXJmYWNlID0geworICByZWxhdGVkTm9k
ZTogbnVsbCwKKyAgcHJldlZhbHVlOiBudWxsLAorICBuZXdWYWx1ZTogbnVsbCwKKyAgYXR0ck5h
bWU6IG51bGwsCisgIGF0dHJDaGFuZ2U6IG51bGwKK307CisKKy8qKgorICogQHBhcmFtIHtvYmpl
Y3R9IGRpc3BhdGNoQ29uZmlnIENvbmZpZ3VyYXRpb24gdXNlZCB0byBkaXNwYXRjaCB0aGlzIGV2
ZW50LgorICogQHBhcmFtIHtzdHJpbmd9IGRpc3BhdGNoTWFya2VyIE1hcmtlciBpZGVudGlmeWlu
ZyB0aGUgZXZlbnQgdGFyZ2V0LgorICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2
ZSBicm93c2VyIGV2ZW50LgorICogQGV4dGVuZHMge1N5bnRoZXRpY0V2ZW50fQorICovCitmdW5j
dGlvbiBTeW50aGV0aWNNdXRhdGlvbkV2ZW50KGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtl
ciwgbmF0aXZlRXZlbnQpIHsKKyAgU3ludGhldGljRXZlbnQuY2FsbCh0aGlzLCBkaXNwYXRjaENv
bmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50KTsKK30KKworU3ludGhldGljRXZlbnQu
YXVnbWVudENsYXNzKFN5bnRoZXRpY011dGF0aW9uRXZlbnQsIE11dGF0aW9uRXZlbnRJbnRlcmZh
Y2UpOworCittb2R1bGUuZXhwb3J0cyA9IFN5bnRoZXRpY011dGF0aW9uRXZlbnQ7CisKK30seyIu
L1N5bnRoZXRpY0V2ZW50Ijo1MH1dLDU1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRz
KXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNl
ZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsK
KyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0
aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAor
ICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAq
IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGlu
Zywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1
dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElU
SU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUg
TGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBh
bmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01v
ZHVsZSBTeW50aGV0aWNUb3VjaEV2ZW50CisgKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seQorICov
CisKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIFN5bnRoZXRpY1VJRXZlbnQgPSByZXF1aXJlKCIuL1N5
bnRoZXRpY1VJRXZlbnQiKTsKKworLyoqCisgKiBAaW50ZXJmYWNlIFRvdWNoRXZlbnQKKyAqIEBz
ZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLworICovCit2YXIgVG91
Y2hFdmVudEludGVyZmFjZSA9IHsKKyAgdG91Y2hlczogbnVsbCwKKyAgdGFyZ2V0VG91Y2hlczog
bnVsbCwKKyAgY2hhbmdlZFRvdWNoZXM6IG51bGwsCisgIGFsdEtleTogbnVsbCwKKyAgbWV0YUtl
eTogbnVsbCwKKyAgY3RybEtleTogbnVsbCwKKyAgc2hpZnRLZXk6IG51bGwKK307CisKKy8qKgor
ICogQHBhcmFtIHtvYmplY3R9IGRpc3BhdGNoQ29uZmlnIENvbmZpZ3VyYXRpb24gdXNlZCB0byBk
aXNwYXRjaCB0aGlzIGV2ZW50LgorICogQHBhcmFtIHtzdHJpbmd9IGRpc3BhdGNoTWFya2VyIE1h
cmtlciBpZGVudGlmeWluZyB0aGUgZXZlbnQgdGFyZ2V0LgorICogQHBhcmFtIHtvYmplY3R9IG5h
dGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LgorICogQGV4dGVuZHMge1N5bnRoZXRpY1VJ
RXZlbnR9CisgKi8KK2Z1bmN0aW9uIFN5bnRoZXRpY1RvdWNoRXZlbnQoZGlzcGF0Y2hDb25maWcs
IGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCkgeworICBTeW50aGV0aWNVSUV2ZW50LmNhbGwo
dGhpcywgZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCk7Cit9CisK
K1N5bnRoZXRpY1VJRXZlbnQuYXVnbWVudENsYXNzKFN5bnRoZXRpY1RvdWNoRXZlbnQsIFRvdWNo
RXZlbnRJbnRlcmZhY2UpOworCittb2R1bGUuZXhwb3J0cyA9IFN5bnRoZXRpY1RvdWNoRXZlbnQ7
CisKK30seyIuL1N5bnRoZXRpY1VJRXZlbnQiOjU2fV0sNTY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9k
dWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMyBGYWNlYm9vaywgSW5jLgorICoK
KyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAi
TGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxp
YW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBM
aWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0Ut
Mi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0
byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2Ug
aXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElF
UyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgor
ICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBl
cm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICog
QHByb3ZpZGVzTW9kdWxlIFN5bnRoZXRpY1VJRXZlbnQKKyAqIEB0eXBlY2hlY2tzIHN0YXRpYy1v
bmx5CisgKi8KKworInVzZSBzdHJpY3QiOworCit2YXIgU3ludGhldGljRXZlbnQgPSByZXF1aXJl
KCIuL1N5bnRoZXRpY0V2ZW50Iik7CisKKy8qKgorICogQGludGVyZmFjZSBVSUV2ZW50CisgKiBA
c2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8KKyAqLwordmFyIFVJ
RXZlbnRJbnRlcmZhY2UgPSB7CisgIHZpZXc6IG51bGwsCisgIGRldGFpbDogbnVsbAorfTsKKwor
LyoqCisgKiBAcGFyYW0ge29iamVjdH0gZGlzcGF0Y2hDb25maWcgQ29uZmlndXJhdGlvbiB1c2Vk
IHRvIGRpc3BhdGNoIHRoaXMgZXZlbnQuCisgKiBAcGFyYW0ge3N0cmluZ30gZGlzcGF0Y2hNYXJr
ZXIgTWFya2VyIGlkZW50aWZ5aW5nIHRoZSBldmVudCB0YXJnZXQuCisgKiBAcGFyYW0ge29iamVj
dH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuCisgKiBAZXh0ZW5kcyB7U3ludGhl
dGljRXZlbnR9CisgKi8KK2Z1bmN0aW9uIFN5bnRoZXRpY1VJRXZlbnQoZGlzcGF0Y2hDb25maWcs
IGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCkgeworICBTeW50aGV0aWNFdmVudC5jYWxsKHRo
aXMsIGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQpOworfQorCitT
eW50aGV0aWNFdmVudC5hdWdtZW50Q2xhc3MoU3ludGhldGljVUlFdmVudCwgVUlFdmVudEludGVy
ZmFjZSk7CisKK21vZHVsZS5leHBvcnRzID0gU3ludGhldGljVUlFdmVudDsKKworfSx7Ii4vU3lu
dGhldGljRXZlbnQiOjUwfV0sNTc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewor
LyoqCisgKiBDb3B5cmlnaHQgMjAxMyBGYWNlYm9vaywgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVu
ZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICog
eW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBM
aWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgor
ICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5s
ZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBz
b2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQg
b24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05T
IE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNl
bnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAor
ICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogQHByb3ZpZGVzTW9kdWxl
IFN5bnRoZXRpY1doZWVsRXZlbnQKKyAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5CisgKi8KKwor
InVzZSBzdHJpY3QiOworCit2YXIgU3ludGhldGljTW91c2VFdmVudCA9IHJlcXVpcmUoIi4vU3lu
dGhldGljTW91c2VFdmVudCIpOworCisvKioKKyAqIEBpbnRlcmZhY2UgV2hlZWxFdmVudAorICog
QHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvCisgKi8KK3ZhciBX
aGVlbEV2ZW50SW50ZXJmYWNlID0geworICBkZWx0YVg6IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAg
Ly8gTk9URTogSUU8OSBkb2VzIG5vdCBzdXBwb3J0IHgtYXhpcyBkZWx0YS4KKyAgICByZXR1cm4g
KAorICAgICAgJ2RlbHRhWCcgaW4gZXZlbnQgPyBldmVudC5kZWx0YVggOgorICAgICAgLy8gRmFs
bGJhY2sgdG8gYHdoZWVsRGVsdGFYYCBmb3IgV2Via2l0IGFuZCBub3JtYWxpemUgKHJpZ2h0IGlz
IHBvc2l0aXZlKS4KKyAgICAgICd3aGVlbERlbHRhWCcgaW4gZXZlbnQgPyAtZXZlbnQud2hlZWxE
ZWx0YVggOiAwCisgICAgKTsKKyAgfSwKKyAgZGVsdGFZOiBmdW5jdGlvbihldmVudCkgeworICAg
IHJldHVybiAoCisgICAgICAvLyBOb3JtYWxpemUgKHVwIGlzIHBvc2l0aXZlKS4KKyAgICAgICdk
ZWx0YVknIGluIGV2ZW50ID8gLWV2ZW50LmRlbHRhWSA6CisgICAgICAvLyBGYWxsYmFjayB0byBg
d2hlZWxEZWx0YVlgIGZvciBXZWJraXQuCisgICAgICAnd2hlZWxEZWx0YVknIGluIGV2ZW50ID8g
ZXZlbnQud2hlZWxEZWx0YVkgOgorICAgICAgLy8gRmFsbGJhY2sgdG8gYHdoZWVsRGVsdGFgIGZv
ciBJRTw5LgorICAgICAgJ3doZWVsRGVsdGEnIGluIGV2ZW50ID8gZXZlbnQud2hlZWxEYXRhIDog
MAorICAgICk7CisgIH0sCisgIGRlbHRhWjogbnVsbCwKKyAgZGVsdGFNb2RlOiBudWxsCit9Owor
CisvKioKKyAqIEBwYXJhbSB7b2JqZWN0fSBkaXNwYXRjaENvbmZpZyBDb25maWd1cmF0aW9uIHVz
ZWQgdG8gZGlzcGF0Y2ggdGhpcyBldmVudC4KKyAqIEBwYXJhbSB7c3RyaW5nfSBkaXNwYXRjaE1h
cmtlciBNYXJrZXIgaWRlbnRpZnlpbmcgdGhlIGV2ZW50IHRhcmdldC4KKyAqIEBwYXJhbSB7b2Jq
ZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC4KKyAqIEBleHRlbmRzIHtTeW50
aGV0aWNNb3VzZUV2ZW50fQorICovCitmdW5jdGlvbiBTeW50aGV0aWNXaGVlbEV2ZW50KGRpc3Bh
dGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQpIHsKKyAgU3ludGhldGljTW91
c2VFdmVudC5jYWxsKHRoaXMsIGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZl
RXZlbnQpOworfQorCitTeW50aGV0aWNNb3VzZUV2ZW50LmF1Z21lbnRDbGFzcyhTeW50aGV0aWNX
aGVlbEV2ZW50LCBXaGVlbEV2ZW50SW50ZXJmYWNlKTsKKworbW9kdWxlLmV4cG9ydHMgPSBTeW50
aGV0aWNXaGVlbEV2ZW50OworCit9LHsiLi9TeW50aGV0aWNNb3VzZUV2ZW50Ijo1M31dLDU4Oltm
dW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKyhmdW5jdGlvbigpey8qKgorICogQ29w
eXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBh
Y2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90
IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAq
IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93
d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJl
ZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAq
IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJ
UyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lO
RCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhl
IHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRp
b25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBUcmFuc2FjdGlv
bgorICovCisKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIHRocm93SWYgPSByZXF1aXJlKCIuL3Rocm93
SWYiKTsKKwordmFyIERVQUxfVFJBTlNBQ1RJT04gPSAnRFVBTF9UUkFOU0FDVElPTic7Cit2YXIg
TUlTU0lOR19UUkFOU0FDVElPTiA9ICdNSVNTSU5HX1RSQU5TQUNUSU9OJzsKK2lmICh0cnVlKSB7
CisgIERVQUxfVFJBTlNBQ1RJT04gPQorICAgICdDYW5ub3QgaW5pdGlhbGl6ZSB0cmFuc2FjdGlv
biB3aGVuIHRoZXJlIGlzIGFscmVhZHkgYW4gb3V0c3RhbmRpbmcgJyArCisgICAgJ3RyYW5zYWN0
aW9uLiBDb21tb24gY2F1c2VzIG9mIHRoaXMgYXJlIHRyeWluZyB0byByZW5kZXIgYSBjb21wb25l
bnQgJyArCisgICAgJ3doZW4geW91IGFyZSBhbHJlYWR5IHJlbmRlcmluZyBhIGNvbXBvbmVudCBv
ciBhdHRlbXB0aW5nIGEgc3RhdGUgJyArCisgICAgJ3RyYW5zaXRpb24gd2hpbGUgaW4gYSByZW5k
ZXIgZnVuY3Rpb24uIEFub3RoZXIgcG9zc2liaWxpdHkgaXMgdGhhdCAnICsKKyAgICAneW91IGFy
ZSByZW5kZXJpbmcgbmV3IGNvbnRlbnQgKG9yIHN0YXRlIHRyYW5zaXRpb25pbmcpIGluIGEgJyAr
CisgICAgJ2NvbXBvbmVudERpZFJlbmRlciBjYWxsYmFjay4gSWYgdGhpcyBpcyBub3QgdGhlIGNh
c2UsIHBsZWFzZSByZXBvcnQgdGhlICcgKworICAgICdpc3N1ZSBpbW1lZGlhdGVseS4nOworCisg
IE1JU1NJTkdfVFJBTlNBQ1RJT04gPQorICAgICdDYW5ub3QgY2xvc2UgdHJhbnNhY3Rpb24gd2hl
biB0aGVyZSBpcyBub25lIG9wZW4uJzsKK30KKworLyoqCisgKiBgVHJhbnNhY3Rpb25gIGNyZWF0
ZXMgYSBibGFjayBib3ggdGhhdCBpcyBhYmxlIHRvIHdyYXAgYW55IG1ldGhvZCBzdWNoIHRoYXQK
KyAqIGNlcnRhaW4gaW52YXJpYW50cyBhcmUgbWFpbnRhaW5lZCBiZWZvcmUgYW5kIGFmdGVyIHRo
ZSBtZXRob2QgaXMgaW52b2tlZAorICogKEV2ZW4gaWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biB3
aGlsZSBpbnZva2luZyB0aGUgd3JhcHBlZCBtZXRob2QpLiBXaG9ldmVyCisgKiBpbnN0YW50aWF0
ZXMgYSB0cmFuc2FjdGlvbiBjYW4gcHJvdmlkZSBlbmZvcmNlcnMgb2YgdGhlIGludmFyaWFudHMg
YXQKKyAqIGNyZWF0aW9uIHRpbWUuIFRoZSBgVHJhbnNhY3Rpb25gIGNsYXNzIGl0c2VsZiB3aWxs
IHN1cHBseSBvbmUgYWRkaXRpb25hbAorICogYXV0b21hdGljIGludmFyaWFudCBmb3IgeW91IC0g
dGhlIGludmFyaWFudCB0aGF0IGFueSB0cmFuc2FjdGlvbiBpbnN0YW5jZQorICogc2hvdWxkIG5v
dCBiZSByYW4gd2hpbGUgaXQgaXMgYWxyZWFkeSBiZWluZyByYW4uIFlvdSB3b3VsZCB0eXBpY2Fs
bHkgY3JlYXRlIGEKKyAqIHNpbmdsZSBpbnN0YW5jZSBvZiBhIGBUcmFuc2FjdGlvbmAgZm9yIHJl
dXNlIG11bHRpcGxlIHRpbWVzLCB0aGF0IHBvdGVudGlhbGx5CisgKiBpcyB1c2VkIHRvIHdyYXAg
c2V2ZXJhbCBkaWZmZXJlbnQgbWV0aG9kcy4gV3JhcHBlcnMgYXJlIGV4dHJlbWVseSBzaW1wbGUg
LQorICogdGhleSBvbmx5IHJlcXVpcmUgaW1wbGVtZW50aW5nIHR3byBtZXRob2RzLgorICoKKyAq
IDxwcmU+CisgKiAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlcnMgKGluamVjdGVkIGF0IGNy
ZWF0aW9uIHRpbWUpCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAg
ICAgICAgKworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAg
IHwKKyAqICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS18LS0t
LS0tLS0tLS0tLS0rCisgKiAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgdiAg
ICAgICAgfCAgICAgICAgICAgICAgfAorICogICAgICAgICAgICAgICAgICAgIHwgICAgICArLS0t
LS0tLS0tLS0tLS0tKyAgIHwgICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICB8
ICAgKy0tfCAgICB3cmFwcGVyMSAgIHwtLS18LS0tLSsgICAgICAgICB8CisgKiAgICAgICAgICAg
ICAgICAgICAgfCAgIHwgICstLS0tLS0tLS0tLS0tLS0rICAgdiAgICB8ICAgICAgICAgfAorICog
ICAgICAgICAgICAgICAgICAgIHwgICB8ICAgICAgICAgICstLS0tLS0tLS0tLS0tKyAgfCAgICAg
ICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICB8ICAgfCAgICAgKy0tLS18ICAgd3JhcHBlcjIg
IHwtLS0tLS0tLSsgICB8CisgKiAgICAgICAgICAgICAgICAgICAgfCAgIHwgICAgIHwgICAgKy0t
LS0tLS0tLS0tLS0rICB8ICAgICB8ICAgfAorICogICAgICAgICAgICAgICAgICAgIHwgICB8ICAg
ICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCAgIHwKKyAqICAgICAgICAgICAgICAgICAg
ICB8ICAgdiAgICAgdiAgICAgICAgICAgICAgICAgICAgIHYgICAgIHYgICB8IHdyYXBwZXIKKyAq
ICAgICAgICAgICAgICAgICAgICB8ICstLS0rICstLS0rICAgKy0tLS0tLS0tLSsgICArLS0tKyAr
LS0tKyB8IGludmFyaWFudHMKKyAqIHBlcmZvcm0oYW55TWV0aG9kKSB8IHwgICB8IHwgICB8ICAg
fCAgICAgICAgIHwgICB8ICAgfCB8ICAgfCB8IG1haW50YWluZWQKKyAqICstLS0tLS0tLS0tLS0t
LS0tLT58LXwtLS18LXwtLS18LS0+fGFueU1ldGhvZHwtLS18LS0tfC18LS0tfC18LS0tLS0tLS0+
CisgKiAgICAgICAgICAgICAgICAgICAgfCB8ICAgfCB8ICAgfCAgIHwgICAgICAgICB8ICAgfCAg
IHwgfCAgIHwgfAorICogICAgICAgICAgICAgICAgICAgIHwgfCAgIHwgfCAgIHwgICB8ICAgICAg
ICAgfCAgIHwgICB8IHwgICB8IHwKKyAqICAgICAgICAgICAgICAgICAgICB8IHwgICB8IHwgICB8
ICAgfCAgICAgICAgIHwgICB8ICAgfCB8ICAgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgfCAr
LS0tKyArLS0tKyAgICstLS0tLS0tLS0rICAgKy0tLSsgKy0tLSsgfAorICogICAgICAgICAgICAg
ICAgICAgIHwgIGluaXRpYWxpemUgICAgICAgICAgICAgICAgICAgIGNsb3NlICAgIHwKKyAqICAg
ICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0rCisgKiA8L3ByZT4KKyAqCisgKiBCb251czoKKyAqIC0gUmVwb3J0cyB0aW1pbmcgbWV0cmlj
cyBieSBtZXRob2QgbmFtZSBhbmQgd3JhcHBlciBpbmRleC4KKyAqCisgKiBVc2UgY2FzZXM6Cisg
KiAtIFByZXNlcnZpbmcgdGhlIGlucHV0IHNlbGVjdGlvbiByYW5nZXMgYmVmb3JlL2FmdGVyIHJl
Y29uY2lsaWF0aW9uLgorICogICBSZXN0b3Jpbmcgc2VsZWN0aW9uIGV2ZW4gaW4gdGhlIGV2ZW50
IG9mIGFuIHVuZXhwZWN0ZWQgZXJyb3IuCisgKiAtIERlYWN0aXZhdGluZyBldmVudHMgd2hpbGUg
cmVhcnJhbmdpbmcgdGhlIERPTSwgcHJldmVudGluZyBibHVycy9mb2N1c2VzLAorICogICB3aGls
ZSBndWFyYW50ZWVpbmcgdGhhdCBhZnRlcndhcmRzLCB0aGUgZXZlbnQgc3lzdGVtIGlzIHJlYWN0
aXZhdGVkLgorICogLSBGbHVzaGluZyBhIHF1ZXVlIG9mIGNvbGxlY3RlZCBET00gbXV0YXRpb25z
IHRvIHRoZSBtYWluIFVJIHRocmVhZCBhZnRlciBhCisgKiAgIHJlY29uY2lsaWF0aW9uIHRha2Vz
IHBsYWNlIGluIGEgd29ya2VyIHRocmVhZC4KKyAqIC0gSW52b2tpbmcgYW55IGNvbGxlY3RlZCBg
Y29tcG9uZW50RGlkUmVuZGVyYCBjYWxsYmFja3MgYWZ0ZXIgcmVuZGVyaW5nIG5ldworICogICBj
b250ZW50LgorICogLSAoRnV0dXJlIHVzZSBjYXNlKTogV3JhcHBpbmcgcGFydGljdWxhciBmbHVz
aGVzIG9mIHRoZSBgUmVhY3RXb3JrZXJgIHF1ZXVlCisgKiAgIHRvIHByZXNlcnZlIHRoZSBgc2Ny
b2xsVG9wYCAoYW4gYXV0b21hdGljIHNjcm9sbCBhd2FyZSBET00pLgorICogLSAoRnV0dXJlIHVz
ZSBjYXNlKTogTGF5b3V0IGNhbGN1bGF0aW9ucyBiZWZvcmUgYW5kIGFmdGVyIERPTSB1cGF0ZXMu
CisgKgorICogVHJhbnNhY3Rpb25hbCBwbHVnaW4gQVBJOgorICogLSBBIG1vZHVsZSB0aGF0IGhh
cyBhbiBgaW5pdGlhbGl6ZWAgbWV0aG9kIHRoYXQgcmV0dXJucyBhbnkgcHJlY29tcHV0YXRpb24u
CisgKiAtIGFuZCBhIGBjbG9zZWAgbWV0aG9kIHRoYXQgYWNjZXB0cyB0aGUgcHJlY29tcHV0YXRp
b24uIGBjbG9zZWAgaXMgaW52b2tlZAorICogICB3aGVuIHRoZSB3cmFwcGVkIHByb2Nlc3MgaXMg
Y29tcGxldGVkLCBvciBoYXMgZmFpbGVkLgorICoKKyAqIEBwYXJhbSB7QXJyYXk8VHJhbnNhY3Rp
b25hbFdyYXBwZXI+fSB0cmFuc2FjdGlvbldyYXBwZXIgV3JhcHBlciBtb2R1bGVzCisgKiB0aGF0
IGltcGxlbWVudCBgaW5pdGlhbGl6ZWAgYW5kIGBjbG9zZWAuCisgKiBAcmV0dXJuIHtUcmFuc2Fj
dGlvbn0gU2luZ2xlIHRyYW5zYWN0aW9uIGZvciByZXVzZSBpbiB0aHJlYWQuCisgKgorICogQGNs
YXNzIFRyYW5zYWN0aW9uCisgKi8KK3ZhciBNaXhpbiA9IHsKKyAgLyoqCisgICAqIFNldHMgdXAg
dGhpcyBpbnN0YW5jZSBzbyB0aGF0IGl0IGlzIHByZXBhcmVkIGZvciBjb2xsZWN0aW5nIG1ldHJp
Y3MuIERvZXMKKyAgICogc28gc3VjaCB0aGF0IHRoaXMgc2V0dXAgbWV0aG9kIG1heSBiZSB1c2Vk
IG9uIGFuIGluc3RhbmNlIHRoYXQgaXMgYWxyZWFkeQorICAgKiBpbml0aWFsaXplZCwgaW4gYSB3
YXkgdGhhdCBkb2VzIG5vdCBjb25zdW1lIGFkZGl0aW9uYWwgbWVtb3J5IHVwb24gcmV1c2UuCisg
ICAqIFRoYXQgY2FuIGJlIHVzZWZ1bCBpZiB5b3UgZGVjaWRlIHRvIG1ha2UgeW91ciBzdWJjbGFz
cyBvZiB0aGlzIG1peGluIGEKKyAgICogIlBvb2xlZENsYXNzIi4KKyAgICovCisgIHJlaW5pdGlh
bGl6ZVRyYW5zYWN0aW9uOiBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnRyYW5zYWN0aW9uV3JhcHBl
cnMgPSB0aGlzLmdldFRyYW5zYWN0aW9uV3JhcHBlcnMoKTsKKyAgICBpZiAoIXRoaXMud3JhcHBl
ckluaXREYXRhKSB7CisgICAgICB0aGlzLndyYXBwZXJJbml0RGF0YSA9IFtdOworICAgIH0gZWxz
ZSB7CisgICAgICB0aGlzLndyYXBwZXJJbml0RGF0YS5sZW5ndGggPSAwOworICAgIH0KKyAgICBp
ZiAoIXRoaXMudGltaW5nTWV0cmljcykgeworICAgICAgdGhpcy50aW1pbmdNZXRyaWNzID0ge307
CisgICAgfQorICAgIHRoaXMudGltaW5nTWV0cmljcy5tZXRob2RJbnZvY2F0aW9uVGltZSA9IDA7
CisgICAgaWYgKCF0aGlzLnRpbWluZ01ldHJpY3Mud3JhcHBlckluaXRUaW1lcykgeworICAgICAg
dGhpcy50aW1pbmdNZXRyaWNzLndyYXBwZXJJbml0VGltZXMgPSBbXTsKKyAgICB9IGVsc2Ugewor
ICAgICAgdGhpcy50aW1pbmdNZXRyaWNzLndyYXBwZXJJbml0VGltZXMubGVuZ3RoID0gMDsKKyAg
ICB9CisgICAgaWYgKCF0aGlzLnRpbWluZ01ldHJpY3Mud3JhcHBlckNsb3NlVGltZXMpIHsKKyAg
ICAgIHRoaXMudGltaW5nTWV0cmljcy53cmFwcGVyQ2xvc2VUaW1lcyA9IFtdOworICAgIH0gZWxz
ZSB7CisgICAgICB0aGlzLnRpbWluZ01ldHJpY3Mud3JhcHBlckNsb3NlVGltZXMubGVuZ3RoID0g
MDsKKyAgICB9CisgICAgdGhpcy5faXNJblRyYW5zYWN0aW9uID0gZmFsc2U7CisgIH0sCisKKyAg
X2lzSW5UcmFuc2FjdGlvbjogZmFsc2UsCisKKyAgLyoqCisgICAqIEBhYnN0cmFjdAorICAgKiBA
cmV0dXJuIHtBcnJheTxUcmFuc2FjdGlvbldyYXBwZXI+fSBBcnJheSBvZiB0cmFuc2FjdGlvbiB3
cmFwcGVycy4KKyAgICovCisgIGdldFRyYW5zYWN0aW9uV3JhcHBlcnM6IG51bGwsCisKKyAgaXNJ
blRyYW5zYWN0aW9uOiBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gISF0aGlzLl9pc0luVHJhbnNh
Y3Rpb247CisgIH0sCisKKyAgLyoqCisgICAqIEV4ZWN1dGVzIHRoZSBmdW5jdGlvbiB3aXRoaW4g
YSBzYWZldHkgd2luZG93LiBVc2UgdGhpcyBmb3IgdGhlIHRvcCBsZXZlbAorICAgKiBtZXRob2Rz
IHRoYXQgcmVzdWx0IGluIGxhcmdlIGFtb3VudHMgb2YgY29tcHV0YXRpb24vbXV0YXRpb25zIHRo
YXQgd291bGQKKyAgICogbmVlZCB0byBiZSBzYWZldHkgY2hlY2tlZC4KKyAgICoKKyAgICogQHBh
cmFtIHtmdW5jdGlvbn0gbWV0aG9kIE1lbWJlciBvZiBzY29wZSB0byBjYWxsLgorICAgKiBAcGFy
YW0ge09iamVjdH0gc2NvcGUgU2NvcGUgdG8gaW52b2tlIGZyb20uCisgICAqIEBwYXJhbSB7T2Jq
ZWN0Pz19IGFyZ3MuLi4gQXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIG1ldGhvZCAob3B0aW9uYWwp
LgorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEhlbHBzIHByZXZlbnQgbmVlZCB0byBi
aW5kIGluIG1hbnkgY2FzZXMuCisgICAqIEByZXR1cm4gUmV0dXJuIHZhbHVlIGZyb20gYG1ldGhv
ZGAuCisgICAqLworICBwZXJmb3JtOiBmdW5jdGlvbihtZXRob2QsIHNjb3BlLCBhLCBiLCBjLCBk
LCBlLCBmKSB7CisgICAgdGhyb3dJZih0aGlzLmlzSW5UcmFuc2FjdGlvbigpLCBEVUFMX1RSQU5T
QUNUSU9OKTsKKyAgICB2YXIgbWVtYmVyU3RhcnQgPSBEYXRlLm5vdygpOworICAgIHZhciBlcnIg
PSBudWxsOworICAgIHZhciByZXQ7CisgICAgdHJ5IHsKKyAgICAgIHRoaXMuaW5pdGlhbGl6ZUFs
bCgpOworICAgICAgcmV0ID0gbWV0aG9kLmNhbGwoc2NvcGUsIGEsIGIsIGMsIGQsIGUsIGYpOwor
ICAgIH0gY2F0Y2ggKGllX3JlcXVpcmVzX2NhdGNoKSB7CisgICAgICBlcnIgPSBpZV9yZXF1aXJl
c19jYXRjaDsKKyAgICB9IGZpbmFsbHkgeworICAgICAgdmFyIG1lbWJlckVuZCA9IERhdGUubm93
KCk7CisgICAgICB0aGlzLm1ldGhvZEludm9jYXRpb25UaW1lICs9IChtZW1iZXJFbmQgLSBtZW1i
ZXJTdGFydCk7CisgICAgICB0cnkgeworICAgICAgICB0aGlzLmNsb3NlQWxsKCk7CisgICAgICB9
IGNhdGNoIChjbG9zZUFsbEVycikgeworICAgICAgICBlcnIgPSBlcnIgfHwgY2xvc2VBbGxFcnI7
CisgICAgICB9CisgICAgfQorICAgIGlmIChlcnIpIHsKKyAgICAgIHRocm93IGVycjsKKyAgICB9
CisgICAgcmV0dXJuIHJldDsKKyAgfSwKKworICBpbml0aWFsaXplQWxsOiBmdW5jdGlvbigpIHsK
KyAgICB0aGlzLl9pc0luVHJhbnNhY3Rpb24gPSB0cnVlOworICAgIHZhciB0cmFuc2FjdGlvbldy
YXBwZXJzID0gdGhpcy50cmFuc2FjdGlvbldyYXBwZXJzOworICAgIHZhciB3cmFwcGVySW5pdFRp
bWVzID0gdGhpcy50aW1pbmdNZXRyaWNzLndyYXBwZXJJbml0VGltZXM7CisgICAgdmFyIGVyciA9
IG51bGw7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmFuc2FjdGlvbldyYXBwZXJzLmxlbmd0
aDsgaSsrKSB7CisgICAgICB2YXIgaW5pdFN0YXJ0ID0gRGF0ZS5ub3coKTsKKyAgICAgIHZhciB3
cmFwcGVyID0gdHJhbnNhY3Rpb25XcmFwcGVyc1tpXTsKKyAgICAgIHRyeSB7CisgICAgICAgIHRo
aXMud3JhcHBlckluaXREYXRhW2ldID0KKyAgICAgICAgICB3cmFwcGVyLmluaXRpYWxpemUgPyB3
cmFwcGVyLmluaXRpYWxpemUuY2FsbCh0aGlzKSA6IG51bGw7CisgICAgICB9IGNhdGNoIChpbml0
RXJyKSB7CisgICAgICAgIGVyciA9IGVyciB8fCBpbml0RXJyOyAgLy8gUmVtZW1iZXIgdGhlIGZp
cnN0IGVycm9yLgorICAgICAgICB0aGlzLndyYXBwZXJJbml0RGF0YVtpXSA9IFRyYW5zYWN0aW9u
Lk9CU0VSVkVEX0VSUk9SOworICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgdmFyIGN1ckluaXRU
aW1lID0gd3JhcHBlckluaXRUaW1lc1tpXTsKKyAgICAgICAgdmFyIGluaXRFbmQgPSBEYXRlLm5v
dygpOworICAgICAgICB3cmFwcGVySW5pdFRpbWVzW2ldID0gKGN1ckluaXRUaW1lIHx8IDApICsg
KGluaXRFbmQgLSBpbml0U3RhcnQpOworICAgICAgfQorICAgIH0KKyAgICBpZiAoZXJyKSB7Cisg
ICAgICB0aHJvdyBlcnI7CisgICAgfQorICB9LAorCisgIC8qKgorICAgKiBJbnZva2VzIGVhY2gg
b2YgYHRoaXMudHJhbnNhY3Rpb25XcmFwcGVycy5jbG9zZVtpXWAgZnVuY3Rpb25zLCBwYXNzaW5n
IGludG8KKyAgICogdGhlbSB0aGUgcmVzcGVjdGl2ZSByZXR1cm4gdmFsdWVzIG9mIGB0aGlzLnRy
YW5zYWN0aW9uV3JhcHBlcnMuaW5pdFtpXWAKKyAgICogKGBjbG9zZWBycyB0aGF0IGNvcnJlc3Bv
bmQgdG8gaW5pdGlhbGl6ZXJzIHRoYXQgZmFpbGVkIHdpbGwgbm90IGJlCisgICAqIGludm9rZWQp
LgorICAgKi8KKyAgY2xvc2VBbGw6IGZ1bmN0aW9uKCkgeworICAgIHRocm93SWYoIXRoaXMuaXNJ
blRyYW5zYWN0aW9uKCksIE1JU1NJTkdfVFJBTlNBQ1RJT04pOworICAgIHZhciB0cmFuc2FjdGlv
bldyYXBwZXJzID0gdGhpcy50cmFuc2FjdGlvbldyYXBwZXJzOworICAgIHZhciB3cmFwcGVyQ2xv
c2VUaW1lcyA9IHRoaXMudGltaW5nTWV0cmljcy53cmFwcGVyQ2xvc2VUaW1lczsKKyAgICB2YXIg
ZXJyID0gbnVsbDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYW5zYWN0aW9uV3JhcHBlcnMu
bGVuZ3RoOyBpKyspIHsKKyAgICAgIHZhciB3cmFwcGVyID0gdHJhbnNhY3Rpb25XcmFwcGVyc1tp
XTsKKyAgICAgIHZhciBjbG9zZVN0YXJ0ID0gRGF0ZS5ub3coKTsKKyAgICAgIHZhciBpbml0RGF0
YSA9IHRoaXMud3JhcHBlckluaXREYXRhW2ldOworICAgICAgdHJ5IHsKKyAgICAgICAgaWYgKGlu
aXREYXRhICE9PSBUcmFuc2FjdGlvbi5PQlNFUlZFRF9FUlJPUikgeworICAgICAgICAgIHdyYXBw
ZXIuY2xvc2UgJiYgd3JhcHBlci5jbG9zZS5jYWxsKHRoaXMsIGluaXREYXRhKTsKKyAgICAgICAg
fQorICAgICAgfSBjYXRjaCAoY2xvc2VFcnIpIHsKKyAgICAgICAgZXJyID0gZXJyIHx8IGNsb3Nl
RXJyOyAgLy8gUmVtZW1iZXIgdGhlIGZpcnN0IGVycm9yLgorICAgICAgfSBmaW5hbGx5IHsKKyAg
ICAgICAgdmFyIGNsb3NlRW5kID0gRGF0ZS5ub3coKTsKKyAgICAgICAgdmFyIGN1ckNsb3NlVGlt
ZSA9IHdyYXBwZXJDbG9zZVRpbWVzW2ldOworICAgICAgICB3cmFwcGVyQ2xvc2VUaW1lc1tpXSA9
IChjdXJDbG9zZVRpbWUgfHwgMCkgKyAoY2xvc2VFbmQgLSBjbG9zZVN0YXJ0KTsKKyAgICAgIH0K
KyAgICB9CisgICAgdGhpcy53cmFwcGVySW5pdERhdGEubGVuZ3RoID0gMDsKKyAgICB0aGlzLl9p
c0luVHJhbnNhY3Rpb24gPSBmYWxzZTsKKyAgICBpZiAoZXJyKSB7CisgICAgICB0aHJvdyBlcnI7
CisgICAgfQorICB9Cit9OworCit2YXIgVHJhbnNhY3Rpb24gPSB7CisgIE1peGluOiBNaXhpbiwK
KyAgLyoqCisgICAqIFRva2VuIHRvIGxvb2sgZm9yIHRvIGRldGVybWluZSBpZiBhbiBlcnJvciBv
Y2N1cmVkLgorICAgKi8KKyAgT0JTRVJWRURfRVJST1I6IHt9CisKK307CisKK21vZHVsZS5leHBv
cnRzID0gVHJhbnNhY3Rpb247CisKK30pKCkKK30seyIuL3Rocm93SWYiOjg2fV0sNTk6W2Z1bmN0
aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMyBGYWNl
Ym9vaywgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVy
c2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBl
eGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4g
YSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xp
Y2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUg
bGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5k
ZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJ
VEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVz
cyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3Vh
Z2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExp
Y2Vuc2UuCisgKgorICogQHByb3ZpZGVzTW9kdWxlIFZpZXdwb3J0TWV0cmljcworICovCisKKyJ1
c2Ugc3RyaWN0IjsKKwordmFyIFZpZXdwb3J0TWV0cmljcyA9IHsKKworICBjdXJyZW50U2Nyb2xs
TGVmdDogMCwKKworICBjdXJyZW50U2Nyb2xsVG9wOiAwLAorCisgIHJlZnJlc2hTY3JvbGxWYWx1
ZXM6IGZ1bmN0aW9uKCkgeworICAgIFZpZXdwb3J0TWV0cmljcy5jdXJyZW50U2Nyb2xsTGVmdCA9
CisgICAgICBkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQgKyBkb2N1bWVudC5kb2N1bWVudEVsZW1l
bnQuc2Nyb2xsTGVmdDsKKyAgICBWaWV3cG9ydE1ldHJpY3MuY3VycmVudFNjcm9sbFRvcCA9Cisg
ICAgICBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCArIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5z
Y3JvbGxUb3A7CisgIH0KKworfTsKKworbW9kdWxlLmV4cG9ydHMgPSBWaWV3cG9ydE1ldHJpY3M7
CisKK30se31dLDYwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICog
Q29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUg
QXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkg
bm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4K
KyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6
Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1
aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUK
KyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJB
UyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkg
S0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3Ig
dGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0
YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBhY2N1bXVs
YXRlCisgKi8KKworInVzZSBzdHJpY3QiOworCit2YXIgdGhyb3dJZiA9IHJlcXVpcmUoIi4vdGhy
b3dJZiIpOworCit2YXIgSU5WQUxJRF9BUkdTID0gJ0lOVkFMSURfQUNDVU1fQVJHUyc7CisKK2lm
ICh0cnVlKSB7CisgIElOVkFMSURfQVJHUyA9CisgICAgJ2FjY3VtdWxhdGUgcmVxdWlyZXMgbm9u
IGVtcHR5IChub24tbnVsbCwgZGVmaW5lZCkgbmV4dCAnICsKKyAgICAndmFsdWVzLiBBbGwgYXJy
YXlzIGFjY3VtdWxhdGVkIG11c3Qgbm90IGNvbnRhaW4gYW55IGVtcHR5IGl0ZW1zLic7Cit9CisK
Ky8qKgorICogQWNjdW11bGF0ZXMgaXRlbXMgdGhhdCBtdXN0IG5ldmVyIGJlIGVtcHR5LCBpbnRv
IGEgcmVzdWx0IGluIGEgbWFubmVyIHRoYXQKKyAqIGNvbnNlcnZlcyBtZW1vcnkgLSBhdm9pZGlu
ZyBhbGxvY2F0aW9uIG9mIGFycmF5cyB1bnRpbCB0aGV5IGFyZSBuZWVkZWQuIFRoZQorICogYWNj
dW11bGF0aW9uIG1heSBzdGFydCBhbmQvb3IgZW5kIHVwIGJlaW5nIGEgc2luZ2xlIGVsZW1lbnQg
b3IgYW4gYXJyYXkKKyAqIGRlcGVuZGluZyBvbiB0aGUgdG90YWwgY291bnQgKGlmIGdyZWF0ZXIg
dGhhbiBvbmUsIGFuIGFycmF5IGlzIGFsbG9jYXRlZCkuCisgKiBIYW5kbGVzIG1vc3QgY29tbW9u
IGNhc2UgZmlyc3QgKHN0YXJ0aW5nIHdpdGggYW4gZW1wdHkgY3VycmVudCB2YWx1ZSBhbmQKKyAq
IGFjcXVpcmluZyBvbmUpLgorICogQHJldHVybiB7QWNjdW11bGF0aW9ufSBBbiBhY2N1bXVsYXRp
b24gd2hpY2ggaXMgZWl0aGVyIGEgc2luZ2xlIGl0ZW0gb3IgYW4KKyAqIEFycmF5IG9mIGl0ZW1z
LgorICovCitmdW5jdGlvbiBhY2N1bXVsYXRlKGN1ciwgbmV4dCkgeworICB2YXIgY3VyVmFsSXNF
bXB0eSA9IGN1ciA9PSBudWxsOyAgIC8vIFdpbGwgdGVzdCBmb3IgZW1wdGluZXNzIChudWxsL3Vu
ZGVmKQorICB2YXIgbmV4dFZhbElzRW1wdHkgPSBuZXh0ID09PSBudWxsOworICBpZiAodHJ1ZSkg
eworICAgIHRocm93SWYobmV4dFZhbElzRW1wdHksIElOVkFMSURfQVJHUyk7CisgIH0KKyAgaWYg
KG5leHRWYWxJc0VtcHR5KSB7CisgICAgcmV0dXJuIGN1cjsKKyAgfSBlbHNlIHsKKyAgICBpZiAo
Y3VyVmFsSXNFbXB0eSkgeworICAgICAgcmV0dXJuIG5leHQ7CisgICAgfSBlbHNlIHsKKyAgICAg
IC8vIEJvdGggYXJlIG5vdCBlbXB0eS4gV2FybmluZzogTmV2ZXIgY2FsbCB4LmNvbmNhdCh5KSB3
aGVuIHlvdSBhcmUgbm90CisgICAgICAvLyBjZXJ0YWluIHRoYXQgeCBpcyBhbiBBcnJheSAoeCBj
b3VsZCBiZSBhIHN0cmluZyB3aXRoIGNvbmNhdCBtZXRob2QpLgorICAgICAgdmFyIGN1cklzQXJy
YXkgPSBBcnJheS5pc0FycmF5KGN1cik7CisgICAgICB2YXIgbmV4dElzQXJyYXkgPSBBcnJheS5p
c0FycmF5KG5leHQpOworICAgICAgaWYgKGN1cklzQXJyYXkpIHsKKyAgICAgICAgcmV0dXJuIGN1
ci5jb25jYXQobmV4dCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAobmV4dElzQXJyYXkp
IHsKKyAgICAgICAgICByZXR1cm4gW2N1cl0uY29uY2F0KG5leHQpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgIHJldHVybiBbY3VyLCBuZXh0XTsKKyAgICAgICAgfQorICAgICAgfQorICAg
IH0KKyAgfQorfQorCittb2R1bGUuZXhwb3J0cyA9IGFjY3VtdWxhdGU7CisKK30seyIuL3Rocm93
SWYiOjg2fV0sNjE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBD
b3B5cmlnaHQgMjAxMyBGYWNlYm9vaywgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBB
cGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBu
b3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgor
ICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDov
L3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVp
cmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQor
ICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFT
IElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBL
SU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0
aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRh
dGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogQHByb3ZpZGVzTW9kdWxlIGNvcHlQcm9w
ZXJ0aWVzCisgKi8KKworLyoqCisgKiBDb3B5IHByb3BlcnRpZXMgZnJvbSBvbmUgb3IgbW9yZSBv
YmplY3RzICh1cCB0byA1KSBpbnRvIHRoZSBmaXJzdCBvYmplY3QuCisgKiBUaGlzIGlzIGEgc2hh
bGxvdyBjb3B5LiBJdCBtdXRhdGVzIHRoZSBmaXJzdCBvYmplY3QgYW5kIGFsc28gcmV0dXJucyBp
dC4KKyAqCisgKiBOT1RFOiBgYXJndW1lbnRzYCBoYXMgYSB2ZXJ5IHNpZ25pZmljYW50IHBlcmZv
cm1hbmNlIHBlbmFsdHksIHdoaWNoIGlzIHdoeQorICogd2UgZG9uJ3Qgc3VwcG9ydCB1bmxpbWl0
ZWQgYXJndW1lbnRzLgorICovCitmdW5jdGlvbiBjb3B5UHJvcGVydGllcyhvYmosIGEsIGIsIGMs
IGQsIGUsIGYpIHsKKyAgb2JqID0gb2JqIHx8IHt9OworCisgIGlmICh0cnVlKSB7CisgICAgaWYg
KGYpIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcignVG9vIG1hbnkgYXJndW1lbnRzIHBhc3NlZCB0
byBjb3B5UHJvcGVydGllcycpOworICAgIH0KKyAgfQorCisgIHZhciBhcmdzID0gW2EsIGIsIGMs
IGQsIGVdOworICB2YXIgaWkgPSAwLCB2OworICB3aGlsZSAoYXJnc1tpaV0pIHsKKyAgICB2ID0g
YXJnc1tpaSsrXTsKKyAgICBmb3IgKHZhciBrIGluIHYpIHsKKyAgICAgIG9ialtrXSA9IHZba107
CisgICAgfQorCisgICAgLy8gSUUgaWdub3JlcyB0b1N0cmluZyBpbiBvYmplY3QgaXRlcmF0aW9u
Li4gU2VlOgorICAgIC8vIHdlYnJlZmxlY3Rpb24uYmxvZ3Nwb3QuY29tLzIwMDcvMDcvcXVpY2st
Zml4LWludGVybmV0LWV4cGxvcmVyLWFuZC5odG1sCisgICAgaWYgKHYuaGFzT3duUHJvcGVydHkg
JiYgdi5oYXNPd25Qcm9wZXJ0eSgndG9TdHJpbmcnKSAmJgorICAgICAgICAodHlwZW9mIHYudG9T
dHJpbmcgIT0gJ3VuZGVmaW5lZCcpICYmIChvYmoudG9TdHJpbmcgIT09IHYudG9TdHJpbmcpKSB7
CisgICAgICBvYmoudG9TdHJpbmcgPSB2LnRvU3RyaW5nOworICAgIH0KKyAgfQorCisgIHJldHVy
biBvYmo7Cit9CisKK21vZHVsZS5leHBvcnRzID0gY29weVByb3BlcnRpZXM7CisKK30se31dLDYy
OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIw
MTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vu
c2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlz
IGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkg
b2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hl
Lm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBs
aWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1
dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMs
CisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVy
IGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmlj
IGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVy
IHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBjcmVhdGVPYmplY3RGcm9tCisg
Ki8KKwordmFyIGhhc0FycmF5TmF0dXJlID0gcmVxdWlyZSgiLi9oYXNBcnJheU5hdHVyZSIpOwor
CisvKioKKyAqIENvbnN0cnVjdCBhbiBvYmplY3QgZnJvbSBhbiBhcnJheSBvZiBrZXlzCisgKiBh
bmQgb3B0aW9uYWxseSBzcGVjaWZpZWQgdmFsdWUgb3IgbGlzdCBvZiB2YWx1ZXMuCisgKgorICog
ID4+PiBjcmVhdGVPYmplY3RGcm9tKFsnYScsJ2InLCdjJ10pOworICogIHthOiB0cnVlLCBiOiB0
cnVlLCBjOiB0cnVlfQorICoKKyAqICA+Pj4gY3JlYXRlT2JqZWN0RnJvbShbJ2EnLCdiJywnYydd
LCBmYWxzZSk7CisgKiAge2E6IGZhbHNlLCBiOiBmYWxzZSwgYzogZmFsc2V9CisgKgorICogID4+
PiBjcmVhdGVPYmplY3RGcm9tKFsnYScsJ2InLCdjJ10sICdtb25rZXknKTsKKyAqICB7YzonbW9u
a2V5JywgYjonbW9ua2V5JyBjOidtb25rZXknfQorICoKKyAqICA+Pj4gY3JlYXRlT2JqZWN0RnJv
bShbJ2EnLCdiJywnYyddLCBbMSwyLDNdKTsKKyAqICB7YTogMSwgYjogMiwgYzogM30KKyAqCisg
KiAgPj4+IGNyZWF0ZU9iamVjdEZyb20oWyd3b21lbicsICdtZW4nXSwgW3RydWUsIGZhbHNlXSk7
CisgKiAge3dvbWVuOiB0cnVlLCBtZW46IGZhbHNlfQorICoKKyAqIEBwYXJhbSAgIEFycmF5ICAg
bGlzdCBvZiBrZXlzCisgKiBAcGFyYW0gICBtaXhlZCAgIG9wdGlvbmFsIHZhbHVlIG9yIHZhbHVl
IGFycmF5LiAgZGVmYXVsdHMgdHJ1ZS4KKyAqIEByZXR1cm5zIG9iamVjdAorICovCitmdW5jdGlv
biBjcmVhdGVPYmplY3RGcm9tKGtleXMsIHZhbHVlcyAvKiA9IHRydWUgKi8pIHsKKyAgaWYgKHRy
dWUpIHsKKyAgICBpZiAoIWhhc0FycmF5TmF0dXJlKGtleXMpKSB7CisgICAgICB0aHJvdyBuZXcg
VHlwZUVycm9yKCdNdXN0IHBhc3MgYW4gYXJyYXkgb2Yga2V5cy4nKTsKKyAgICB9CisgIH0KKwor
ICB2YXIgb2JqZWN0ID0ge307CisgIHZhciBpc19hcnJheSA9IGhhc0FycmF5TmF0dXJlKHZhbHVl
cyk7CisgIGlmICh0eXBlb2YgdmFsdWVzID09ICd1bmRlZmluZWQnKSB7CisgICAgdmFsdWVzID0g
dHJ1ZTsKKyAgfQorCisgIGZvciAodmFyIGlpID0ga2V5cy5sZW5ndGg7IGlpLS07KSB7CisgICAg
b2JqZWN0W2tleXNbaWldXSA9IGlzX2FycmF5ID8gdmFsdWVzW2lpXSA6IHZhbHVlczsKKyAgfQor
ICByZXR1cm4gb2JqZWN0OworfQorCittb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZU9iamVjdEZyb207
CisKK30seyIuL2hhc0FycmF5TmF0dXJlIjo3Mn1dLDYzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVs
ZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisg
KiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxp
Y2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFu
Y2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGlj
ZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIu
MAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8g
aW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlz
IGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMg
T1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAq
IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJt
aXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBw
cm92aWRlc01vZHVsZSBkYW5nZXJvdXNTdHlsZVZhbHVlCisgKiBAdHlwZWNoZWNrcyBzdGF0aWMt
b25seQorICovCisKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIENTU1Byb3BlcnR5ID0gcmVxdWlyZSgi
Li9DU1NQcm9wZXJ0eSIpOworCisvKioKKyAqIENvbnZlcnQgYSB2YWx1ZSBpbnRvIHRoZSBwcm9w
ZXIgY3NzIHdyaXRhYmxlIHZhbHVlLiBUaGUgYHN0eWxlTmFtZWAgbmFtZQorICogbmFtZSBzaG91
bGQgYmUgbG9naWNhbCAobm8gaHlwaGVucyksIGFzIHNwZWNpZmllZAorICogaW4gYENTU1Byb3Bl
cnR5LmlzVW5pdGxlc3NOdW1iZXJgLgorICoKKyAqIEBwYXJhbSB7c3RyaW5nfSBzdHlsZU5hbWUg
Q1NTIHByb3BlcnR5IG5hbWUgc3VjaCBhcyBgdG9wTWFyZ2luYC4KKyAqIEBwYXJhbSB7Kn0gdmFs
dWUgQ1NTIHByb3BlcnR5IHZhbHVlIHN1Y2ggYXMgYDEwcHhgLgorICogQHJldHVybiB7c3RyaW5n
fSBOb3JtYWxpemVkIHN0eWxlIHZhbHVlIHdpdGggZGltZW5zaW9ucyBhcHBsaWVkLgorICovCitm
dW5jdGlvbiBkYW5nZXJvdXNTdHlsZVZhbHVlKHN0eWxlTmFtZSwgdmFsdWUpIHsKKyAgLy8gTm90
ZSB0aGF0IHdlJ3ZlIHJlbW92ZWQgZXNjYXBlVGV4dEZvckJyb3dzZXIoKSBjYWxscyBoZXJlIHNp
bmNlIHRoZQorICAvLyB3aG9sZSBzdHJpbmcgd2lsbCBiZSBlc2NhcGVkIHdoZW4gdGhlIGF0dHJp
YnV0ZSBpcyBpbmplY3RlZCBpbnRvCisgIC8vIHRoZSBtYXJrdXAuIElmIHlvdSBwcm92aWRlIHVu
c2FmZSB1c2VyIGRhdGEgaGVyZSB0aGV5IGNhbiBpbmplY3QKKyAgLy8gYXJiaXRyYXJ5IENTUyB3
aGljaCBtYXkgYmUgcHJvYmxlbWF0aWMgKEkgY291bGRuJ3QgcmVwcm8gdGhpcyk6CisgIC8vIGh0
dHBzOi8vd3d3Lm93YXNwLm9yZy9pbmRleC5waHAvWFNTX0ZpbHRlcl9FdmFzaW9uX0NoZWF0X1No
ZWV0CisgIC8vIGh0dHA6Ly93d3cudGhlc3Bhbm5lci5jby51ay8yMDA3LzExLzI2L3VsdGltYXRl
LXhzcy1jc3MtaW5qZWN0aW9uLworICAvLyBUaGlzIGlzIG5vdCBhbiBYU1MgaG9sZSBidXQgaW5z
dGVhZCBhIHBvdGVudGlhbCBDU1MgaW5qZWN0aW9uIGlzc3VlCisgIC8vIHdoaWNoIGhhcyBsZWFk
IHRvIGEgZ3JlYXRlciBkaXNjdXNzaW9uIGFib3V0IGhvdyB3ZSdyZSBnb2luZyB0bworICAvLyB0
cnVzdCBVUkxzIG1vdmluZyBmb3J3YXJkLiBTZWUgIzIxMTU5MDEKKworICB2YXIgaXNFbXB0eSA9
IHZhbHVlID09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgfHwgdmFsdWUgPT09
ICcnOworICBpZiAoaXNFbXB0eSkgeworICAgIHJldHVybiAnJzsKKyAgfQorCisgIHZhciBpc05v
bk51bWVyaWMgPSBpc05hTih2YWx1ZSk7CisgIGlmIChpc05vbk51bWVyaWMgfHwgdmFsdWUgPT09
IDAgfHwgQ1NTUHJvcGVydHkuaXNVbml0bGVzc051bWJlcltzdHlsZU5hbWVdKSB7CisgICAgcmV0
dXJuICcnICsgdmFsdWU7IC8vIGNhc3QgdG8gc3RyaW5nCisgIH0KKworICByZXR1cm4gdmFsdWUg
KyAncHgnOworfQorCittb2R1bGUuZXhwb3J0cyA9IGRhbmdlcm91c1N0eWxlVmFsdWU7CisKK30s
eyIuL0NTU1Byb3BlcnR5IjoyfV0sNjQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMp
eworLyoqCisgKiBDb3B5cmlnaHQgMjAxMyBGYWNlYm9vaywgSW5jLgorICoKKyAqIExpY2Vuc2Vk
IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwor
ICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRo
ZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Cisg
KgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICog
VW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5n
LCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0
ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJ
T05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBM
aWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFu
ZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogQHByb3ZpZGVzTW9k
dWxlIGVtcHR5RnVuY3Rpb24KKyAqLworCit2YXIgY29weVByb3BlcnRpZXMgPSByZXF1aXJlKCIu
L2NvcHlQcm9wZXJ0aWVzIik7CisKK2Z1bmN0aW9uIG1ha2VFbXB0eUZ1bmN0aW9uKGFyZykgewor
ICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIGFyZzsKKyAgfTsKK30KKworLyoqCisg
KiBUaGlzIGZ1bmN0aW9uIGFjY2VwdHMgYW5kIGRpc2NhcmRzIGlucHV0czsgaXQgaGFzIG5vIHNp
ZGUgZWZmZWN0cy4gVGhpcyBpcworICogcHJpbWFyaWx5IHVzZWZ1bCBpZGlvbWF0aWNhbGx5IGZv
ciBvdmVycmlkYWJsZSBmdW5jdGlvbiBlbmRwb2ludHMgd2hpY2gKKyAqIGFsd2F5cyBuZWVkIHRv
IGJlIGNhbGxhYmxlLCBzaW5jZSBKUyBsYWNrcyBhIG51bGwtY2FsbCBpZGlvbSBhbGEgQ29jb2Eu
CisgKi8KK2Z1bmN0aW9uIGVtcHR5RnVuY3Rpb24oKSB7fQorCitjb3B5UHJvcGVydGllcyhlbXB0
eUZ1bmN0aW9uLCB7CisgIHRoYXRSZXR1cm5zOiBtYWtlRW1wdHlGdW5jdGlvbiwKKyAgdGhhdFJl
dHVybnNGYWxzZTogbWFrZUVtcHR5RnVuY3Rpb24oZmFsc2UpLAorICB0aGF0UmV0dXJuc1RydWU6
IG1ha2VFbXB0eUZ1bmN0aW9uKHRydWUpLAorICB0aGF0UmV0dXJuc051bGw6IG1ha2VFbXB0eUZ1
bmN0aW9uKG51bGwpLAorICB0aGF0UmV0dXJuc1RoaXM6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhp
czsgfSwKKyAgdGhhdFJldHVybnNBcmd1bWVudDogZnVuY3Rpb24oYXJnKSB7IHJldHVybiBhcmc7
IH0KK30pOworCittb2R1bGUuZXhwb3J0cyA9IGVtcHR5RnVuY3Rpb247CisKK30seyIuL2NvcHlQ
cm9wZXJ0aWVzIjo2MX1dLDY1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8q
KgorICogQ29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRl
ciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlv
dSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGlj
ZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAq
IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVz
cyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29m
dHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9u
IGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBP
RiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5z
ZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAq
IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBl
c2NhcGVUZXh0Rm9yQnJvd3NlcgorICovCisKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIHRocm93SWYg
PSByZXF1aXJlKCIuL3Rocm93SWYiKTsKKwordmFyIEVTQ0FQRV9UWVBFX0VSUjsKKworaWYgKHRy
dWUpIHsKKyAgRVNDQVBFX1RZUEVfRVJSID0KKyAgICAnVGhlIFJlYWN0IGNvcmUgaGFzIGF0dGVt
cHRlZCB0byBlc2NhcGUgY29udGVudCB0aGF0IGlzIG9mIGEgJyArCisgICAgJ215c3RlcmlvdXMg
dHlwZSAob2JqZWN0IGV0YykgRXNjYXBpbmcgb25seSB3b3JrcyBvbiBudW1iZXJzIGFuZCBzdHJp
bmdzJzsKK30KKwordmFyIEVTQ0FQRV9MT09LVVAgPSB7CisgICImIjogIiZhbXA7IiwKKyAgIj4i
OiAiJmd0OyIsCisgICI8IjogIiZsdDsiLAorICAiXCIiOiAiJnF1b3Q7IiwKKyAgIiciOiAiJiN4
Mjc7IiwKKyAgIi8iOiAiJiN4MmY7IgorfTsKKworZnVuY3Rpb24gZXNjYXBlcihtYXRjaCkgewor
ICByZXR1cm4gRVNDQVBFX0xPT0tVUFttYXRjaF07Cit9CisKK3ZhciBlc2NhcGVUZXh0Rm9yQnJv
d3NlciA9IGZ1bmN0aW9uICh0ZXh0KSB7CisgIHZhciB0eXBlID0gdHlwZW9mIHRleHQ7CisgIHZh
ciBpbnZhbGlkID0gdHlwZSA9PT0gJ29iamVjdCc7CisgIGlmICh0cnVlKSB7CisgICAgdGhyb3dJ
ZihpbnZhbGlkLCBFU0NBUEVfVFlQRV9FUlIpOworICB9CisgIGlmICh0ZXh0ID09PSAnJyB8fCBp
bnZhbGlkKSB7CisgICAgcmV0dXJuICcnOworICB9IGVsc2UgeworICAgIGlmICh0eXBlID09PSAn
c3RyaW5nJykgeworICAgICAgcmV0dXJuIHRleHQucmVwbGFjZSgvWyY+PCInXC9dL2csIGVzY2Fw
ZXIpOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gKCcnK3RleHQpLnJlcGxhY2UoL1smPjwi
J1wvXS9nLCBlc2NhcGVyKTsKKyAgICB9CisgIH0KK307CisKK21vZHVsZS5leHBvcnRzID0gZXNj
YXBlVGV4dEZvckJyb3dzZXI7CisKK30seyIuL3Rocm93SWYiOjg2fV0sNjY6W2Z1bmN0aW9uKHJl
cXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMyBGYWNlYm9vaywg
SW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAy
LjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQg
aW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5
IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2Vz
L0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9y
IGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhl
IExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQg
V0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBp
bXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292
ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2Uu
CisgKgorICogQHByb3ZpZGVzTW9kdWxlIGV4CisgKiBAdHlwZWNoZWNrcworICogQG5vc3RhY2t0
cmFjZQorICovCisKKy8qKgorICogVGhpcyBmdW5jdGlvbiB0cmFuc2Zvcm1zIGVycm9yIG1lc3Nh
Z2Ugd2l0aCBhcmd1bWVudHMgaW50byBwbGFpbiB0ZXh0IGVycm9yCisgKiBtZXNzYWdlLCBzbyB0
aGF0IGl0IGNhbiBiZSBwYXNzZWQgdG8gd2luZG93Lm9uZXJyb3Igd2l0aG91dCBsb3NpbmcgYW55
dGhpbmcuCisgKiBJdCBjYW4gdGhlbiBiZSB0cmFuc2Zvcm1lZCBiYWNrIGJ5IGBlcngoKWAgZnVu
Y3Rpb24uCisgKgorICogVXNhZ2U6CisgKiAgIHRocm93IG5ldyBFcnJvcihleCgnRXJyb3IgJXMg
ZnJvbSAlcycsIGVycm9yQ29kZSwgdXNlcklEKSk7CisgKgorICogQHBhcmFtIHtzdHJpbmd9IGVy
cm9yTWVzc2FnZQorICovCisKK3ZhciBleCA9IGZ1bmN0aW9uKGVycm9yTWVzc2FnZS8qLCBhcmcx
LCBhcmcyLCAuLi4qLykgeworICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxs
KGFyZ3VtZW50cykubWFwKGZ1bmN0aW9uKGFyZykgeworICAgIHJldHVybiBTdHJpbmcoYXJnKTsK
KyAgfSk7CisgIHZhciBleHBlY3RlZExlbmd0aCA9IGVycm9yTWVzc2FnZS5zcGxpdCgnJXMnKS5s
ZW5ndGggLSAxOworCisgIGlmIChleHBlY3RlZExlbmd0aCAhPT0gYXJncy5sZW5ndGggLSAxKSB7
CisgICAgLy8gc29tZXRoaW5nIHdyb25nIHdpdGggdGhlIGZvcm1hdHRpbmcgc3RyaW5nCisgICAg
cmV0dXJuIGV4KCdleCBhcmdzIG51bWJlciBtaXNtYXRjaDogJXMnLCBKU09OLnN0cmluZ2lmeShh
cmdzKSk7CisgIH0KKworICByZXR1cm4gZXguX3ByZWZpeCArIEpTT04uc3RyaW5naWZ5KGFyZ3Mp
ICsgZXguX3N1ZmZpeDsKK307CisKK2V4Ll9wcmVmaXggPSAnPCFbRVhbJzsKK2V4Ll9zdWZmaXgg
PSAnXV0+JzsKKworbW9kdWxlLmV4cG9ydHMgPSBleDsKKworfSx7fV0sNjc6W2Z1bmN0aW9uKHJl
cXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMyBGYWNlYm9vaywg
SW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAy
LjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQg
aW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5
IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2Vz
L0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9y
IGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhl
IExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQg
V0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBp
bXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292
ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2Uu
CisgKgorICogQHByb3ZpZGVzTW9kdWxlIGZsYXR0ZW5DaGlsZHJlbgorICovCisKKyJ1c2Ugc3Ry
aWN0IjsKKwordmFyIHRocm93SWYgPSByZXF1aXJlKCIuL3Rocm93SWYiKTsKK3ZhciB0cmF2ZXJz
ZUFsbENoaWxkcmVuID0gcmVxdWlyZSgiLi90cmF2ZXJzZUFsbENoaWxkcmVuIik7CisKKy8qKgor
ICogQHBhcmFtIHtmdW5jdGlvbn0gdHJhdmVyc2VDb250ZXh0IENvbnRleHQgcGFzc2VkIHRocm91
Z2ggdHJhdmVyc2FsLgorICogQHBhcmFtIHs/UmVhY3RDb21wb25lbnR9IGNoaWxkIFJlYWN0IGNo
aWxkIGNvbXBvbmVudC4KKyAqIEBwYXJhbSB7IXN0cmluZ30gbmFtZSBTdHJpbmcgbmFtZSBvZiBr
ZXkgcGF0aCB0byBjaGlsZC4KKyAqLworZnVuY3Rpb24gZmxhdHRlblNpbmdsZUNoaWxkSW50b0Nv
bnRleHQodHJhdmVyc2VDb250ZXh0LCBjaGlsZCwgbmFtZSkgeworICAvLyBXZSBmb3VuZCBhIGNv
bXBvbmVudCBpbnN0YW5jZQorICB2YXIgcmVzdWx0ID0gdHJhdmVyc2VDb250ZXh0OworICBpZiAo
dHJ1ZSkgeworICAgIHRocm93SWYoCisgICAgICByZXN1bHQuaGFzT3duUHJvcGVydHkobmFtZSks
CisgICAgICB0cmF2ZXJzZUFsbENoaWxkcmVuLkRVUExJQ0FURV9LRVlfRVJST1IKKyAgICApOwor
ICB9CisgIHJlc3VsdFtuYW1lXSA9IGNoaWxkOworfQorCisvKioKKyAqIEZsYXR0ZW5zIGNoaWxk
cmVuIHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYC4KKyAq
IEByZXR1cm4geyFvYmplY3R9IGZsYXR0ZW5lZCBjaGlsZHJlbiBrZXllZCBieSBuYW1lLgorICov
CitmdW5jdGlvbiBmbGF0dGVuQ2hpbGRyZW4oY2hpbGRyZW4pIHsKKyAgaWYgKGNoaWxkcmVuID09
PSBudWxsIHx8IGNoaWxkcmVuID09PSB1bmRlZmluZWQpIHsKKyAgICByZXR1cm4gY2hpbGRyZW47
CisgIH0KKyAgdmFyIHJlc3VsdCA9IHt9OworICB0cmF2ZXJzZUFsbENoaWxkcmVuKGNoaWxkcmVu
LCBmbGF0dGVuU2luZ2xlQ2hpbGRJbnRvQ29udGV4dCwgcmVzdWx0KTsKKyAgcmV0dXJuIHJlc3Vs
dDsKK30KKworbW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuQ2hpbGRyZW47CisKK30seyIuL3Rocm93
SWYiOjg2LCIuL3RyYXZlcnNlQWxsQ2hpbGRyZW4iOjg3fV0sNjg6W2Z1bmN0aW9uKHJlcXVpcmUs
bW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMyBGYWNlYm9vaywgSW5jLgor
ICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRo
ZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29t
cGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRo
ZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VO
U0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVl
ZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vu
c2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFO
VElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVk
LgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5n
IHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgor
ICogQHByb3ZpZGVzTW9kdWxlIGZvckVhY2hBY2N1bXVsYXRlZAorICovCisKKyJ1c2Ugc3RyaWN0
IjsKKworLyoqCisgKiBAcGFyYW0ge2FycmF5fSBhbiAiYWNjdW11bGF0aW9uIiBvZiBpdGVtcyB3
aGljaCBpcyBlaXRoZXIgYW4gQXJyYXkgb3IKKyAqIGEgc2luZ2xlIGl0ZW0uIFVzZWZ1bCB3aGVu
IHBhaXJlZCB3aXRoIHRoZSBgYWNjdW11bGF0ZWAgbW9kdWxlLiBUaGlzIGlzIGEKKyAqIHNpbXBs
ZSB1dGlsaXR5IHRoYXQgYWxsb3dzIHVzIHRvIHJlYXNvbiBhYm91dCBhIGNvbGxlY3Rpb24gb2Yg
aXRlbXMsIGJ1dAorICogaGFuZGxpbmcgdGhlIGNhc2Ugd2hlbiB0aGVyZSBpcyBleGFjdGx5IG9u
ZSBpdGVtIChhbmQgd2UgZG8gbm90IG5lZWQgdG8KKyAqIGFsbG9jYXRlIGFuIGFycmF5KS4KKyAq
LwordmFyIGZvckVhY2hBY2N1bXVsYXRlZCA9IGZ1bmN0aW9uKGFyciwgY2IsIHNjb3BlKSB7Cisg
IGlmIChBcnJheS5pc0FycmF5KGFycikpIHsKKyAgICBhcnIuZm9yRWFjaChjYiwgc2NvcGUpOwor
ICB9IGVsc2UgaWYgKGFycikgeworICAgIGNiLmNhbGwoc2NvcGUsIGFycik7CisgIH0KK307CisK
K21vZHVsZS5leHBvcnRzID0gZm9yRWFjaEFjY3VtdWxhdGVkOworCit9LHt9XSw2OTpbZnVuY3Rp
b24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzIEZhY2Vi
b29rLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJz
aW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4
Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBh
IGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGlj
ZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBs
YXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRl
ciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lU
SE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNz
IG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFn
ZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGlj
ZW5zZS4KKyAqCisgKiBAcHJvdmlkZXNNb2R1bGUgZ2UKKyAqLworCisvKioKKyAqIEZpbmQgYSBu
b2RlIGJ5IElELiAgT3B0aW9uYWxseSBzZWFyY2ggYSBzdWItdHJlZSBvdXRzaWRlIG9mIHRoZSBk
b2N1bWVudAorICoKKyAqIFVzZSBnZSBpZiB5b3UncmUgbm90IHN1cmUgd2hldGhlciBvciBub3Qg
dGhlIGVsZW1lbnQgZXhpc3RzLiBZb3UgY2FuIHRlc3QKKyAqIGZvciBleGlzdGVuY2UgeW91cnNl
bGYgaW4geW91ciBhcHBsaWNhdGlvbiBjb2RlLgorICoKKyAqIElmIHlvdXIgYXBwbGljYXRpb24g
Y29kZSBkZXBlbmRzIG9uIHRoZSBleGlzdGVuY2Ugb2YgdGhlIGVsZW1lbnQsIHVzZSAkCisgKiBp
bnN0ZWFkLCB3aGljaCB3aWxsIHRocm93IGluIERFViBpZiB0aGUgZWxlbWVudCBkb2Vzbid0IGV4
aXN0LgorICovCitmdW5jdGlvbiBnZShhcmcsIHJvb3QsIHRhZykgeworICByZXR1cm4gdHlwZW9m
IGFyZyAhPSAnc3RyaW5nJyA/IGFyZyA6CisgICAgIXJvb3QgPyBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZChhcmcpIDoKKyAgICBfZ2VGcm9tU3VidHJlZShhcmcsIHJvb3QsIHRhZyk7Cit9CisKK2Z1
bmN0aW9uIF9nZUZyb21TdWJ0cmVlKGlkLCByb290LCB0YWcpIHsKKyAgdmFyIGVsZW0sIGNoaWxk
cmVuLCBpaTsKKworICBpZiAoX2dldE5vZGVJRChyb290KSA9PSBpZCkgeworICAgIHJldHVybiBy
b290OworICB9IGVsc2UgaWYgKHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUpIHsKKyAgICAvLyBB
bGwgRWxlbWVudHMgaW1wbGVtZW50IHRoaXMsIHdoaWNoIGRvZXMgYW4gaXRlcmF0aXZlIERGUywg
d2hpY2ggaXMKKyAgICAvLyBmYXN0ZXIgdGhhbiByZWN1cnNpb24gYW5kIGRvZXNuJ3QgcnVuIGlu
dG8gc3RhY2sgZGVwdGggaXNzdWVzLgorICAgIGNoaWxkcmVuID0gcm9vdC5nZXRFbGVtZW50c0J5
VGFnTmFtZSh0YWcgfHwgJyonKTsKKyAgICBmb3IgKGlpID0gMDsgaWkgPCBjaGlsZHJlbi5sZW5n
dGg7IGlpKyspIHsKKyAgICAgIGlmIChfZ2V0Tm9kZUlEKGNoaWxkcmVuW2lpXSkgPT0gaWQpIHsK
KyAgICAgICAgcmV0dXJuIGNoaWxkcmVuW2lpXTsKKyAgICAgIH0KKyAgICB9CisgIH0gZWxzZSB7
CisgICAgLy8gRG9jdW1lbnRGcmFnbWVudCBkb2VzIG5vdCBpbXBsZW1lbnQgZ2V0RWxlbWVudHNC
eVRhZ05hbWUsIHNvCisgICAgLy8gcmVjdXJzZSBvdmVyIGl0cyBjaGlsZHJlbi4gSXRzIGNoaWxk
cmVuIG11c3QgYmUgRWxlbWVudHMsIHNvCisgICAgLy8gZWFjaCBjaGlsZCB3aWxsIHVzZSB0aGUg
Z2V0RWxlbWVudHNCeVRhZ05hbWUgY2FzZSBpbnN0ZWFkLgorICAgIGNoaWxkcmVuID0gcm9vdC5j
aGlsZE5vZGVzOworICAgIGZvciAoaWkgPSAwOyBpaSA8IGNoaWxkcmVuLmxlbmd0aDsgaWkrKykg
eworICAgICAgZWxlbSA9IF9nZUZyb21TdWJ0cmVlKGlkLCBjaGlsZHJlbltpaV0pOworICAgICAg
aWYgKGVsZW0pIHsKKyAgICAgICAgcmV0dXJuIGVsZW07CisgICAgICB9CisgICAgfQorICB9CisK
KyAgcmV0dXJuIG51bGw7Cit9CisKKy8qKgorICogUmV0dXJuIHRoZSBJRCB2YWx1ZSBmb3IgYSBn
aXZlbiBub2RlLiBUaGlzIGFsbG93cyB1cyB0byBhdm9pZCBpc3N1ZXMKKyAqIHdpdGggZm9ybXMg
dGhhdCBjb250YWluIGlucHV0cyB3aXRoIG5hbWU9ImlkIi4KKyAqCisgKiBAcmV0dXJuIHN0cmlu
ZyAobnVsbCBpZiBhdHRyaWJ1dGUgbm90IHNldCkKKyAqLworZnVuY3Rpb24gX2dldE5vZGVJRChu
b2RlKSB7CisgIC8vICNkb2N1bWVudCBhbmQgI2RvY3VtZW50LWZyYWdtZW50IGRvIG5vdCBoYXZl
IGdldEF0dHJpYnV0ZU5vZGUuCisgIHZhciBpZCA9IG5vZGUuZ2V0QXR0cmlidXRlTm9kZSAmJiBu
b2RlLmdldEF0dHJpYnV0ZU5vZGUoJ2lkJyk7CisgIHJldHVybiBpZCA/IGlkLnZhbHVlIDogbnVs
bDsKK30KKworbW9kdWxlLmV4cG9ydHMgPSBnZTsKKworfSx7fV0sNzA6W2Z1bmN0aW9uKHJlcXVp
cmUsbW9kdWxlLGV4cG9ydHMpeworKGZ1bmN0aW9uKCl7LyoqCisgKiBDb3B5cmlnaHQgMjAxMyBG
YWNlYm9vaywgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwg
VmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmls
ZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRh
aW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3Jn
L2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2Fi
bGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQg
dW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAq
IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhw
cmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFu
Z3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhl
IExpY2Vuc2UuCisgKgorICogQHByb3ZpZGVzTW9kdWxlIGdldEV2ZW50VGFyZ2V0CisgKiBAdHlw
ZWNoZWNrcyBzdGF0aWMtb25seQorICovCisKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIEV4ZWN1dGlv
bkVudmlyb25tZW50ID0gcmVxdWlyZSgiLi9FeGVjdXRpb25FbnZpcm9ubWVudCIpOworCisvKioK
KyAqIEdldHMgdGhlIHRhcmdldCBub2RlIGZyb20gYSBuYXRpdmUgYnJvd3NlciBldmVudCBieSBh
Y2NvdW50aW5nIGZvcgorICogaW5jb25zaXN0ZW5jaWVzIGluIGJyb3dzZXIgRE9NIEFQSXMuCisg
KgorICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50Lgor
ICogQHJldHVybiB7RE9NRXZlbnRUYXJnZXR9IFRhcmdldCBub2RlLgorICovCitmdW5jdGlvbiBn
ZXRFdmVudFRhcmdldChuYXRpdmVFdmVudCkgeworICB2YXIgdGFyZ2V0ID0KKyAgICBuYXRpdmVF
dmVudC50YXJnZXQgfHwKKyAgICBuYXRpdmVFdmVudC5zcmNFbGVtZW50IHx8CisgICAgRXhlY3V0
aW9uRW52aXJvbm1lbnQuZ2xvYmFsOworICAvLyBTYWZhcmkgbWF5IGZpcmUgZXZlbnRzIG9uIHRl
eHQgbm9kZXMgKE5vZGUuVEVYVF9OT0RFIGlzIDMpLgorICAvLyBAc2VlIGh0dHA6Ly93d3cucXVp
cmtzbW9kZS5vcmcvanMvZXZlbnRzX3Byb3BlcnRpZXMuaHRtbAorICByZXR1cm4gdGFyZ2V0Lm5v
ZGVUeXBlID09PSAzID8gdGFyZ2V0LnBhcmVudE5vZGUgOiB0YXJnZXQ7Cit9CisKK21vZHVsZS5l
eHBvcnRzID0gZ2V0RXZlbnRUYXJnZXQ7CisKK30pKCkKK30seyIuL0V4ZWN1dGlvbkVudmlyb25t
ZW50IjoxOX1dLDcxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICog
Q29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUg
QXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkg
bm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4K
KyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6
Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1
aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUK
KyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJB
UyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkg
S0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3Ig
dGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0
YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBnZXRUZXh0
Q29udGVudEFjY2Vzc29yCisgKi8KKworInVzZSBzdHJpY3QiOworCit2YXIgRXhlY3V0aW9uRW52
aXJvbm1lbnQgPSByZXF1aXJlKCIuL0V4ZWN1dGlvbkVudmlyb25tZW50Iik7CisKK3ZhciBjb250
ZW50S2V5ID0gbnVsbDsKKworLyoqCisgKiBHZXRzIHRoZSBrZXkgdXNlZCB0byBhY2Nlc3MgdGV4
dCBjb250ZW50IG9uIGEgRE9NIG5vZGUuCisgKgorICogQHJldHVybiB7P3N0cmluZ30gS2V5IHVz
ZWQgdG8gYWNjZXNzIHRleHQgY29udGVudC4KKyAqIEBpbnRlcm5hbAorICovCitmdW5jdGlvbiBn
ZXRUZXh0Q29udGVudEFjY2Vzc29yKCkgeworICBpZiAoIWNvbnRlbnRLZXkgJiYgRXhlY3V0aW9u
RW52aXJvbm1lbnQuY2FuVXNlRE9NKSB7CisgICAgY29udGVudEtleSA9ICdpbm5lclRleHQnIGlu
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpID8KKyAgICAgICdpbm5lclRleHQnIDoKKyAg
ICAgICd0ZXh0Q29udGVudCc7CisgIH0KKyAgcmV0dXJuIGNvbnRlbnRLZXk7Cit9CisKK21vZHVs
ZS5leHBvcnRzID0gZ2V0VGV4dENvbnRlbnRBY2Nlc3NvcjsKKworfSx7Ii4vRXhlY3V0aW9uRW52
aXJvbm1lbnQiOjE5fV0sNzI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoq
CisgKiBDb3B5cmlnaHQgMjAxMyBGYWNlYm9vaywgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVy
IHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91
IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNl
bnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICog
aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNz
IHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0
d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24g
YW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9G
IEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNl
IGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICog
bGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogQHByb3ZpZGVzTW9kdWxlIGhh
c0FycmF5TmF0dXJlCisgKi8KKworLyoqCisgKiAgUGVyZm9ybSBhIGhldXJpc3RpYyB0ZXN0IHRv
IGRldGVybWluZSBpZiBhbiBvYmplY3QgaXMgImFycmF5LWxpa2UiLgorICoKKyAqICAgIEEgbW9u
ayBhc2tlZCBKb3NodSwgYSBaZW4gbWFzdGVyLCAiSGFzIGEgZG9nIEJ1ZGRoYSBuYXR1cmU/Igor
ICogICAgSm9zaHUgcmVwbGllZDogIk11LiIKKyAqCisgKiAgVGhpcyBmdW5jdGlvbiBkZXRlcm1p
bmVzIGlmIGl0cyBhcmd1bWVudCBoYXMgImFycmF5IG5hdHVyZSI6IGl0IHJldHVybnMKKyAqICB0
cnVlIGlmIHRoZSBhcmd1bWVudCBpcyBhbiBhY3R1YWwgYXJyYXksIGFuIGBhcmd1bWVudHMnIG9i
amVjdCwgb3IgYW4KKyAqICBIVE1MQ29sbGVjdGlvbiAoZS5nLiBub2RlLmNoaWxkTm9kZXMgb3Ig
bm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgpKS4KKyAqCisgKiAgQHBhcmFtICBvYmogICBBbiBv
YmplY3QgdG8gdGVzdC4KKyAqICBAcmV0dXJuIGJvb2wgIFRydWUgaWYgdGhlIG9iamVjdCBpcyBh
cnJheS1saWtlLgorICovCitmdW5jdGlvbiBoYXNBcnJheU5hdHVyZShvYmopIHsKKyAgcmV0dXJu
ICgKKyAgICAvLyBub3QgbnVsbC9mYWxzZQorICAgICEhb2JqICYmCisgICAgLy8gYXJyYXlzIGFy
ZSBvYmplY3RzLCBOb2RlTGlzdHMgYXJlIGZ1bmN0aW9ucyBpbiBTYWZhcmkKKyAgICAodHlwZW9m
IG9iaiA9PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqID09ICdmdW5jdGlvbicpICYmCisgICAgLy8g
cXVhY2tzIGxpa2UgYW4gYXJyYXkKKyAgICAoJ2xlbmd0aCcgaW4gb2JqKSAmJgorICAgIC8vIG5v
dCB3aW5kb3cKKyAgICAhKCdzZXRJbnRlcnZhbCcgaW4gb2JqKSAmJgorICAgIC8vIG5vIERPTSBu
b2RlIHNob3VsZCBiZSBjb25zaWRlcmVkIGFuIGFycmF5LWxpa2UKKyAgICAvLyBhICdzZWxlY3Qn
IGVsZW1lbnQgaGFzICdsZW5ndGgnIGFuZCAnaXRlbScgcHJvcGVydGllcworICAgICh0eXBlb2Yg
b2JqLm5vZGVUeXBlICE9ICdudW1iZXInKSAmJgorICAgICgKKyAgICAgIC8vIGEgcmVhbCBhcnJh
eQorICAgICAgKEFycmF5LmlzQXJyYXkob2JqKSB8fAorICAgICAgLy8gYXJndW1lbnRzCisgICAg
ICAoJ2NhbGxlZScgaW4gb2JqKSB8fCAvLyBIVE1MQ29sbGVjdGlvbi9Ob2RlTGlzdAorICAgICAg
J2l0ZW0nIGluIG9iaikKKyAgICApCisgICk7Cit9CisKK21vZHVsZS5leHBvcnRzID0gaGFzQXJy
YXlOYXR1cmU7CisKK30se31dLDczOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsK
Ky8qKgorICogQ29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1
bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAq
IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUg
TGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoK
KyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVu
bGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywg
c29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVk
IG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9O
UyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGlj
ZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQK
KyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVs
ZSBoeXBoZW5hdGUKKyAqIEB0eXBlY2hlY2tzCisgKi8KKwordmFyIF91cHBlcmNhc2VQYXR0ZXJu
ID0gLyhbQS1aXSkvZzsKKworLyoqCisgKiBIeXBoZW5hdGVzIGEgY2FtZWxjYXNlZCBzdHJpbmcs
IGZvciBleGFtcGxlOgorICoKKyAqICAgPiBoeXBoZW5hdGUoJ2JhY2tncm91bmRDb2xvcicpCisg
KiAgIDwgImJhY2tncm91bmQtY29sb3IiCisgKgorICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZwor
ICogQHJldHVybiB7c3RyaW5nfQorICovCitmdW5jdGlvbiBoeXBoZW5hdGUoc3RyaW5nKSB7Cisg
IHJldHVybiBzdHJpbmcucmVwbGFjZShfdXBwZXJjYXNlUGF0dGVybiwgJy0kMScpLnRvTG93ZXJD
YXNlKCk7Cit9CisKK21vZHVsZS5leHBvcnRzID0gaHlwaGVuYXRlOworCit9LHt9XSw3NDpbZnVu
Y3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzIEZh
Y2Vib29rLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBW
ZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxl
IGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFp
biBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcv
bGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJs
ZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1
bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICog
V0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHBy
ZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5n
dWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUg
TGljZW5zZS4KKyAqCisgKiBAcHJvdmlkZXNNb2R1bGUgaW5zZXJ0Tm9kZUF0CisgKi8KKworInVz
ZSBzdHJpY3QiOworCisvKioKKyAqIEluc2VydHMgYG5vZGVgIGF0IGEgcGFydGljdWxhciBjaGls
ZCBpbmRleC4gT3RoZXIgbm9kZXMgbW92ZSB0byBtYWtlIHJvb20uCisgKiBAcGFyYW0geyFFbGVt
ZW50fSByb290IFRoZSBwYXJlbnQgcm9vdCBub2RlIHRvIGluc2VydCBpbnRvLgorICogQHBhcmFt
IHshbm9kZX0gbm9kZSBUaGUgbm9kZSB0byBpbnNlcnQuCisgKiBAcGFyYW0geyFudW1iZXJ9IGF0
SW5kZXggVGhlIGluZGV4IGluIGByb290YCB0aGF0IGBub2RlYCBzaG91bGQgZXhpc3QgYXQuCisg
Ki8KK2Z1bmN0aW9uIGluc2VydE5vZGVBdChyb290LCBub2RlLCBhdEluZGV4KSB7CisgIHZhciBj
aGlsZE5vZGVzID0gcm9vdC5jaGlsZE5vZGVzOworICAvLyBSZW1vdmUgZnJvbSBwYXJlbnQgc28g
dGhhdCBpZiBub2RlIGlzIGFscmVhZHkgY2hpbGQgb2Ygcm9vdCwKKyAgLy8gYGNoaWxkTm9kZXNb
YXRJbmRleF1gIGFscmVhZHkgdGFrZXMgaW50byBhY2NvdW50IHRoZSByZW1vdmFsLgorICB2YXIg
Y3VyQXRJbmRleCA9IHJvb3QuY2hpbGROb2Rlc1thdEluZGV4XTsKKyAgaWYgKGN1ckF0SW5kZXgg
PT09IG5vZGUpIHsKKyAgICByZXR1cm4gbm9kZTsKKyAgfQorICBpZiAobm9kZS5wYXJlbnROb2Rl
KSB7CisgICAgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpOworICB9CisgIGlmIChh
dEluZGV4ID49IGNoaWxkTm9kZXMubGVuZ3RoKSB7CisgICAgcm9vdC5hcHBlbmRDaGlsZChub2Rl
KTsKKyAgfSBlbHNlIHsKKyAgICByb290Lmluc2VydEJlZm9yZShub2RlLCBjaGlsZE5vZGVzW2F0
SW5kZXhdKTsKKyAgfQorICByZXR1cm4gbm9kZTsKK30KKworbW9kdWxlLmV4cG9ydHMgPSBpbnNl
cnROb2RlQXQ7CisKK30se31dLDc1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsK
Ky8qKgorICogQ29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1
bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAq
IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUg
TGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoK
KyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVu
bGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywg
c29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVk
IG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9O
UyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGlj
ZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQK
KyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVs
ZSBpbnZhcmlhbnQKKyAqLworCisvKioKKyAqIFVzZSBpbnZhcmlhbnQoKSB0byBhc3NlcnQgc3Rh
dGUgd2hpY2ggeW91ciBwcm9ncmFtIGFzc3VtZXMgdG8gYmUgdHJ1ZS4KKyAqCisgKiBQcm92aWRl
IHNwcmludGYgc3R5bGUgZm9ybWF0IGFuZCBhcmd1bWVudHMgdG8gcHJvdmlkZSBpbmZvcm1hdGlv
biBhYm91dAorICogd2hhdCBicm9rZSBhbmQgd2hhdCB5b3Ugd2VyZSBleHBlY3RpbmcuCisgKgor
ICogVGhlIGludmFyaWFudCBtZXNzYWdlIHdpbGwgYmUgc3RyaXBwZWQgaW4gcHJvZHVjdGlvbiwg
YnV0IHRoZSBpbnZhcmlhbnQKKyAqIHdpbGwgcmVtYWluIHRvIGVuc3VyZSBsb2dpYyBkb2VzIG5v
dCBkaWZmZXIgaW4gcHJvZHVjdGlvbi4KKyAqLworCitmdW5jdGlvbiBpbnZhcmlhbnQoY29uZGl0
aW9uKSB7CisgIGlmICghY29uZGl0aW9uKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhcmlh
bnQgVmlvbGF0aW9uJyk7CisgIH0KK30KKworbW9kdWxlLmV4cG9ydHMgPSBpbnZhcmlhbnQ7CisK
K2lmICh0cnVlKSB7CisgIHZhciBpbnZhcmlhbnREZXYgPSBmdW5jdGlvbihjb25kaXRpb24sIGZv
cm1hdCwgYSwgYiwgYywgZCwgZSwgZikgeworICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkg
eworICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhcmlhbnQgcmVxdWlyZXMgYW4gZXJyb3IgbWVz
c2FnZSBhcmd1bWVudCcpOworICAgIH0KKworICAgIGlmICghY29uZGl0aW9uKSB7CisgICAgICB2
YXIgYXJncyA9IFthLCBiLCBjLCBkLCBlLCBmXTsKKyAgICAgIHZhciBhcmdJbmRleCA9IDA7Cisg
ICAgICB0aHJvdyBuZXcgRXJyb3IoCisgICAgICAgICdJbnZhcmlhbnQgVmlvbGF0aW9uOiAnICsK
KyAgICAgICAgZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJnc1th
cmdJbmRleCsrXTsgfSkKKyAgICAgICk7CisgICAgfQorICB9OworCisgIG1vZHVsZS5leHBvcnRz
ID0gaW52YXJpYW50RGV2OworfQorCit9LHt9XSw3NjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUs
ZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgorICog
TGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNl
bnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNl
IHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vu
c2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAK
KyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGlu
IHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBk
aXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9S
IENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBT
ZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlz
c2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBAcHJv
dmlkZXNNb2R1bGUgaXNFdmVudFN1cHBvcnRlZAorICovCisKKyJ1c2Ugc3RyaWN0IjsKKwordmFy
IEV4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZSgiLi9FeGVjdXRpb25FbnZpcm9ubWVudCIp
OworCit2YXIgdGVzdE5vZGUsIHVzZUhhc0ZlYXR1cmU7CitpZiAoRXhlY3V0aW9uRW52aXJvbm1l
bnQuY2FuVXNlRE9NKSB7CisgIHRlc3ROb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2
Jyk7CisgIHVzZUhhc0ZlYXR1cmUgPQorICAgIGRvY3VtZW50LmltcGxlbWVudGF0aW9uICYmCisg
ICAgZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZSAmJgorICAgIC8vIGBoYXNGZWF0
dXJlYCBhbHdheXMgcmV0dXJucyB0cnVlIGluIEZpcmVmb3ggMTkrLgorICAgIGRvY3VtZW50Lmlt
cGxlbWVudGF0aW9uLmhhc0ZlYXR1cmUoJycsICcnKSAhPT0gdHJ1ZTsKK30KKworLyoqCisgKiBD
aGVja3MgaWYgYW4gZXZlbnQgaXMgc3VwcG9ydGVkIGluIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBl
bnZpcm9ubWVudC4KKyAqCisgKiBOT1RFOiBUaGlzIHdpbGwgbm90IHdvcmsgY29ycmVjdGx5IGZv
ciBub24tZ2VuZXJpYyBldmVudHMgc3VjaCBhcyBgY2hhbmdlYCwKKyAqIGByZXNldGAsIGBsb2Fk
YCwgYGVycm9yYCwgYW5kIGBzZWxlY3RgLgorICoKKyAqIEJvcnJvd3MgZnJvbSBNb2Rlcm5penIu
CisgKgorICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVN1ZmZpeCBFdmVudCBuYW1lLCBlLmcu
ICJjbGljayIuCisgKiBAcGFyYW0gez9ib29sZWFufSBjYXB0dXJlIENoZWNrIGlmIHRoZSBjYXB0
dXJlIHBoYXNlIGlzIHN1cHBvcnRlZC4KKyAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhl
IGV2ZW50IGlzIHN1cHBvcnRlZC4KKyAqIEBpbnRlcm5hbAorICogQGxpY2Vuc2UgTW9kZXJuaXpy
IDMuMC4wcHJlIChDdXN0b20gQnVpbGQpIHwgTUlUCisgKi8KK2Z1bmN0aW9uIGlzRXZlbnRTdXBw
b3J0ZWQoZXZlbnROYW1lU3VmZml4LCBjYXB0dXJlKSB7CisgIGlmICghdGVzdE5vZGUgfHwgKGNh
cHR1cmUgJiYgIXRlc3ROb2RlLmFkZEV2ZW50TGlzdGVuZXIpKSB7CisgICAgcmV0dXJuIGZhbHNl
OworICB9CisgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisK
KyAgdmFyIGV2ZW50TmFtZSA9ICdvbicgKyBldmVudE5hbWVTdWZmaXg7CisgIHZhciBpc1N1cHBv
cnRlZCA9IGV2ZW50TmFtZSBpbiBlbGVtZW50OworCisgIGlmICghaXNTdXBwb3J0ZWQpIHsKKyAg
ICBlbGVtZW50LnNldEF0dHJpYnV0ZShldmVudE5hbWUsICcnKTsKKyAgICBpc1N1cHBvcnRlZCA9
IHR5cGVvZiBlbGVtZW50W2V2ZW50TmFtZV0gPT09ICdmdW5jdGlvbic7CisgICAgaWYgKHR5cGVv
ZiBlbGVtZW50W2V2ZW50TmFtZV0gIT09ICd1bmRlZmluZWQnKSB7CisgICAgICBlbGVtZW50W2V2
ZW50TmFtZV0gPSB1bmRlZmluZWQ7CisgICAgfQorICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRl
KGV2ZW50TmFtZSk7CisgIH0KKworICBpZiAoIWlzU3VwcG9ydGVkICYmIHVzZUhhc0ZlYXR1cmUg
JiYgZXZlbnROYW1lU3VmZml4ID09PSAnd2hlZWwnKSB7CisgICAgLy8gVGhpcyBpcyB0aGUgb25s
eSB3YXkgdG8gdGVzdCBzdXBwb3J0IGZvciB0aGUgYHdoZWVsYCBldmVudCBpbiBJRTkrLgorICAg
IGlzU3VwcG9ydGVkID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZSgnRXZlbnRz
LndoZWVsJywgJzMuMCcpOworICB9CisKKyAgZWxlbWVudCA9IG51bGw7CisgIHJldHVybiBpc1N1
cHBvcnRlZDsKK30KKworbW9kdWxlLmV4cG9ydHMgPSBpc0V2ZW50U3VwcG9ydGVkOworCit9LHsi
Li9FeGVjdXRpb25FbnZpcm9ubWVudCI6MTl9XSw3NzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUs
ZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgorICog
TGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNl
bnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNl
IHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vu
c2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAK
KyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGlu
IHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBk
aXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9S
IENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBT
ZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlz
c2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBAcHJv
dmlkZXNNb2R1bGUgam9pbkNsYXNzZXMKKyAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5CisgKi8K
KworInVzZSBzdHJpY3QiOworCisvKioKKyAqIENvbWJpbmVzIG11bHRpcGxlIGNsYXNzTmFtZSBz
dHJpbmdzIGludG8gb25lLgorICogaHR0cDovL2pzcGVyZi5jb20vam9pbmNsYXNzZXMtYXJncy12
cy1hcnJheQorICoKKyAqIEBwYXJhbSB7Li4uP3N0cmluZ30gY2xhc3NlcworICogQHJldHVybiB7
c3RyaW5nfQorICovCitmdW5jdGlvbiBqb2luQ2xhc3NlcyhjbGFzc05hbWUvKiwgLi4uICovKSB7
CisgIGlmICghY2xhc3NOYW1lKSB7CisgICAgY2xhc3NOYW1lID0gJyc7CisgIH0KKyAgdmFyIG5l
eHRDbGFzczsKKyAgdmFyIGFyZ0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7CisgIGlmIChhcmdM
ZW5ndGggPiAxKSB7CisgICAgZm9yICh2YXIgaWkgPSAxOyBpaSA8IGFyZ0xlbmd0aDsgaWkrKykg
eworICAgICAgbmV4dENsYXNzID0gYXJndW1lbnRzW2lpXTsKKyAgICAgIG5leHRDbGFzcyAmJiAo
Y2xhc3NOYW1lICs9ICcgJyArIG5leHRDbGFzcyk7CisgICAgfQorICB9CisgIHJldHVybiBjbGFz
c05hbWU7Cit9CisKK21vZHVsZS5leHBvcnRzID0gam9pbkNsYXNzZXM7CisKK30se31dLDc4Oltm
dW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMg
RmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2Us
IFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZp
bGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0
YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9y
Zy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNh
YmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVk
IHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisg
KiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4
cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxh
bmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRo
ZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBrZXlNaXJyb3IKKyAqLworCisidXNl
IHN0cmljdCI7CisKK3ZhciB0aHJvd0lmID0gcmVxdWlyZSgiLi90aHJvd0lmIik7CisKK3ZhciBO
T1RfT0JKRUNUX0VSUk9SID0gJ05PVF9PQkpFQ1RfRVJST1InOworaWYgKHRydWUpIHsKKyAgTk9U
X09CSkVDVF9FUlJPUiA9ICdrZXlNaXJyb3Igb25seSB3b3JrcyBvbiBvYmplY3RzJzsKK30KKwor
LyoqCisgKiBVdGlsaXR5IGZvciBjb25zdHJ1Y3RpbmcgZW51bXMgd2l0aCBrZXlzIGJlaW5nIGVx
dWFsIHRvIHRoZSBhc3NvY2lhdGVkCisgKiB2YWx1ZXMsIGV2ZW4gd2hlbiB1c2luZyBhZHZhbmNl
ZCBrZXkgY3J1c2hpbmcuIFRoaXMgaXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcsCisgKiBidXQgYWxz
byBmb3IgdXNpbmcgdGhlIHZhbHVlcyB0aGVtc2VsdmVzIGFzIGxvb2t1cHMgaW50byB0aGUgZW51
bS4KKyAqIEV4YW1wbGU6CisgKiB2YXIgQ09MT1JTID0ga2V5TWlycm9yKHtibHVlOiBudWxsLCBy
ZWQ6IG51bGx9KTsKKyAqIHZhciBteUNvbG9yID0gQ09MT1JTLmJsdWU7CisgKiB2YXIgaXNDb2xv
clZhbGlkID0gISFDT0xPUlNbbXlDb2xvcl0KKyAqIFRoZSBsYXN0IGxpbmUgY291bGQgbm90IGJl
IHBlcmZvcm1lZCBpZiB0aGUgdmFsdWVzIG9mIHRoZSBnZW5lcmF0ZWQgZW51bSB3ZXJlCisgKiBu
b3QgZXF1YWwgdG8gdGhlaXIga2V5cy4KKyAqIElucHV0OiAge2tleTE6IHZhbDEsIGtleTI6IHZh
bDJ9CisgKiBPdXRwdXQ6IHtrZXkxOiBrZXkxLCBrZXkyOiBrZXkyfQorICovCit2YXIga2V5TWly
cm9yID0gZnVuY3Rpb24ob2JqKSB7CisgIHZhciByZXQgPSB7fTsKKyAgdmFyIGtleTsKKworICB0
aHJvd0lmKCEob2JqIGluc3RhbmNlb2YgT2JqZWN0KSB8fCBBcnJheS5pc0FycmF5KG9iaiksIE5P
VF9PQkpFQ1RfRVJST1IpOworCisgIGZvciAoa2V5IGluIG9iaikgeworICAgIGlmICghb2JqLmhh
c093blByb3BlcnR5KGtleSkpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICByZXRba2V5
XSA9IGtleTsKKyAgfQorICByZXR1cm4gcmV0OworfTsKKworbW9kdWxlLmV4cG9ydHMgPSBrZXlN
aXJyb3I7CisKK30seyIuL3Rocm93SWYiOjg2fV0sNzk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxl
LGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMyBGYWNlYm9vaywgSW5jLgorICoKKyAq
IExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGlj
ZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5j
ZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNl
bnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4w
CisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBp
biB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMg
ZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBP
UiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICog
U2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1p
c3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogQHBy
b3ZpZGVzTW9kdWxlIGtleU9mCisgKi8KKworLyoqCisgKiBBbGxvd3MgZXh0cmFjdGlvbiBvZiBh
IG1pbmlmaWVkIGtleS4gTGV0J3MgdGhlIGJ1aWxkIHN5c3RlbSBtaW5pZnkga2V5cworICogd2l0
aG91dCBsb29zaW5nIHRoZSBhYmlsaXR5IHRvIGR5bmFtaWNhbGx5IHVzZSBrZXkgc3RyaW5ncyBh
cyB2YWx1ZXMKKyAqIHRoZW1zZWx2ZXMuIFBhc3MgaW4gYW4gb2JqZWN0IHdpdGggYSBzaW5nbGUg
a2V5L3ZhbCBwYWlyIGFuZCBpdCB3aWxsIHJldHVybgorICogeW91IHRoZSBzdHJpbmcga2V5IG9m
IHRoYXQgc2luZ2xlIHJlY29yZC4gU3VwcG9zZSB5b3Ugd2FudCB0byBncmFiIHRoZQorICogdmFs
dWUgZm9yIGEga2V5ICdjbGFzc05hbWUnIGluc2lkZSBvZiBhbiBvYmplY3QuIEtleS92YWwgbWlu
aWZpY2F0aW9uIG1heQorICogaGF2ZSBhbGlhc2VkIHRoYXQga2V5IHRvIGJlICd4YTEyJy4ga2V5
T2Yoe2NsYXNzTmFtZTogbnVsbH0pIHdpbGwgcmV0dXJuCisgKiAneGExMicgaW4gdGhhdCBjYXNl
LiBSZXNvbHZlIGtleXMgeW91IHdhbnQgdG8gdXNlIG9uY2UgYXQgc3RhcnR1cCB0aW1lLCB0aGVu
CisgKiByZXVzZSB0aG9zZSByZXNvbHV0aW9ucy4KKyAqLwordmFyIGtleU9mID0gZnVuY3Rpb24o
b25lS2V5T2JqKSB7CisgIHZhciBrZXk7CisgIGZvciAoa2V5IGluIG9uZUtleU9iaikgeworICAg
IGlmICghb25lS2V5T2JqLmhhc093blByb3BlcnR5KGtleSkpIHsKKyAgICAgIGNvbnRpbnVlOwor
ICAgIH0KKyAgICByZXR1cm4ga2V5OworICB9CisgIHJldHVybiBudWxsOworfTsKKworCittb2R1
bGUuZXhwb3J0cyA9IGtleU9mOworCit9LHt9XSw4MDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUs
ZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgorICog
TGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNl
bnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNl
IHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vu
c2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAK
KyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGlu
IHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBk
aXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9S
IENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBT
ZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlz
c2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBAcHJv
dmlkZXNNb2R1bGUgbWVtb2l6ZVN0cmluZ09ubHkKKyAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5
CisgKi8KKworInVzZSBzdHJpY3QiOworCisvKioKKyAqIE1lbW9pemVzIHRoZSByZXR1cm4gdmFs
dWUgb2YgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgb25lIHN0cmluZyBhcmd1bWVudC4KKyAqCisg
KiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjaworICogQHJldHVybiB7ZnVuY3Rpb259CisgKi8K
K2Z1bmN0aW9uIG1lbW9pemVTdHJpbmdPbmx5KGNhbGxiYWNrKSB7CisgIHZhciBjYWNoZSA9IHt9
OworICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7CisgICAgaWYgKGNhY2hlLmhhc093blByb3Bl
cnR5KHN0cmluZykpIHsKKyAgICAgIHJldHVybiBjYWNoZVtzdHJpbmddOworICAgIH0gZWxzZSB7
CisgICAgICByZXR1cm4gY2FjaGVbc3RyaW5nXSA9IGNhbGxiYWNrLmNhbGwodGhpcywgc3RyaW5n
KTsKKyAgICB9CisgIH07Cit9CisKK21vZHVsZS5leHBvcnRzID0gbWVtb2l6ZVN0cmluZ09ubHk7
CisKK30se31dLDgxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICog
Q29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUg
QXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkg
bm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4K
KyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6
Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1
aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUK
KyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJB
UyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkg
S0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3Ig
dGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0
YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBtZXJnZQor
ICovCisKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIG1lcmdlSW50byA9IHJlcXVpcmUoIi4vbWVyZ2VJ
bnRvIik7CisKKy8qKgorICogU2hhbGxvdyBtZXJnZXMgdHdvIHN0cnVjdHVyZXMgaW50byBhIHJl
dHVybiB2YWx1ZSwgd2l0aG91dCBtdXRhdGluZyBlaXRoZXIuCisgKgorICogQHBhcmFtIHs/b2Jq
ZWN0fSBvbmUgT3B0aW9uYWwgb2JqZWN0IHdpdGggcHJvcGVydGllcyB0byBtZXJnZSBmcm9tLgor
ICogQHBhcmFtIHs/b2JqZWN0fSB0d28gT3B0aW9uYWwgb2JqZWN0IHdpdGggcHJvcGVydGllcyB0
byBtZXJnZSBmcm9tLgorICogQHJldHVybiB7b2JqZWN0fSBUaGUgc2hhbGxvdyBleHRlbnNpb24g
b2Ygb25lIGJ5IHR3by4KKyAqLwordmFyIG1lcmdlID0gZnVuY3Rpb24ob25lLCB0d28pIHsKKyAg
dmFyIHJlc3VsdCA9IHt9OworICBtZXJnZUludG8ocmVzdWx0LCBvbmUpOworICBtZXJnZUludG8o
cmVzdWx0LCB0d28pOworICByZXR1cm4gcmVzdWx0OworfTsKKworbW9kdWxlLmV4cG9ydHMgPSBt
ZXJnZTsKKworfSx7Ii4vbWVyZ2VJbnRvIjo4M31dLDgyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVs
ZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisg
KiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxp
Y2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFu
Y2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGlj
ZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIu
MAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8g
aW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlz
IGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMg
T1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAq
IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJt
aXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBw
cm92aWRlc01vZHVsZSBtZXJnZUhlbHBlcnMKKyAqCisgKiByZXF1aXJlc1BvbHlmaWxsczogQXJy
YXkuaXNBcnJheQorICovCisKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIGtleU1pcnJvciA9IHJlcXVp
cmUoIi4va2V5TWlycm9yIik7Cit2YXIgdGhyb3dJZiA9IHJlcXVpcmUoIi4vdGhyb3dJZiIpOwor
CisvKioKKyAqIE1heGltdW0gbnVtYmVyIG9mIGxldmVscyB0byB0cmF2ZXJzZS4gV2lsbCBjYXRj
aCBjaXJjdWxhciBzdHJ1Y3R1cmVzLgorICogQGNvbnN0CisgKi8KK3ZhciBNQVhfTUVSR0VfREVQ
VEggPSAzNjsKKwordmFyIEVSUk9SUyA9IGtleU1pcnJvcih7CisgIE1FUkdFX0FSUkFZX0ZBSUw6
IG51bGwsCisgIE1FUkdFX0NPUkVfRkFJTFVSRTogbnVsbCwKKyAgTUVSR0VfVFlQRV9VU0FHRV9G
QUlMVVJFOiBudWxsLAorICBNRVJHRV9ERUVQX01BWF9MRVZFTFM6IG51bGwsCisgIE1FUkdFX0RF
RVBfTk9fQVJSX1NUUkFURUdZOiBudWxsCit9KTsKKworaWYgKHRydWUpIHsKKyAgRVJST1JTID0g
eworICAgIE1FUkdFX0FSUkFZX0ZBSUw6CisgICAgICAnVW5zdXBwb3J0ZWQgdHlwZSBwYXNzZWQg
dG8gYSBtZXJnZSBmdW5jdGlvbi4gWW91IG1heSBoYXZlIHBhc3NlZCBhICcgKworICAgICAgJ3N0
cnVjdHVyZSB0aGF0IGNvbnRhaW5zIGFuIGFycmF5IGFuZCB0aGUgbWVyZ2UgZnVuY3Rpb24gZG9l
cyBub3Qga25vdyAnICsKKyAgICAgICdob3cgdG8gbWVyZ2UgYXJyYXlzLiAnLAorCisgICAgTUVS
R0VfQ09SRV9GQUlMVVJFOgorICAgICAgJ0NyaXRpY2FsIGFzc3VtcHRpb25zIGFib3V0IHRoZSBt
ZXJnZSBmdW5jdGlvbnMgaGF2ZSBiZWVuIHZpb2xhdGVkLiAnICsKKyAgICAgICdUaGlzIGlzIHRo
ZSBmYXVsdCBvZiB0aGUgbWVyZ2UgZnVuY3Rpb25zIHRoZW1zZWx2ZXMsIG5vdCBuZWNlc3Nhcmls
eSAnICsKKyAgICAgICd0aGUgY2FsbGVycy4nLAorCisgICAgTUVSR0VfVFlQRV9VU0FHRV9GQUlM
VVJFOgorICAgICAgJ0NhbGxpbmcgbWVyZ2UgZnVuY3Rpb24gd2l0aCBpbnZhbGlkIHR5cGVzLiBZ
b3UgbWF5IGNhbGwgbWVyZ2UgJyArCisgICAgICAnZnVuY3Rpb25zIChub24tYXJyYXkgbm9uLXRl
cm1pbmFsKSBPUiAobnVsbC91bmRlZmluZWQpIGFyZ3VtZW50cy4gJyArCisgICAgICAnbWVyZ2VJ
bnRvIGZ1bmN0aW9ucyBoYXZlIHRoZSBzYW1lIHJlcXVpcmVtZW50cyBidXQgd2l0aCBhbiBhZGRl
ZCAnICsKKyAgICAgICdyZXN0cmljdGlvbiB0aGF0IHRoZSBmaXJzdCBwYXJhbWV0ZXIgbXVzdCBu
b3QgYmUgbnVsbC91bmRlZmluZWQuJywKKworICAgIE1FUkdFX0RFRVBfTUFYX0xFVkVMUzoKKyAg
ICAgICdNYXhpbXVtIGRlZXAgbWVyZ2UgZGVwdGggZXhjZWVkZWQuIFlvdSBtYXkgYXR0ZW1wdGlu
ZyB0byBtZXJnZSAnICsKKyAgICAgICdjaXJjdWxhciBzdHJ1Y3R1cmVzIGluIGFuIHVuc3VwcG9y
dGVkIHdheS4nLAorICAgIE1FUkdFX0RFRVBfTk9fQVJSX1NUUkFURUdZOgorICAgICAgJ1lvdSBt
dXN0IHByb3ZpZGUgYW4gYXJyYXkgc3RyYXRlZ3kgdG8gZGVlcCBtZXJnZSBmdW5jdGlvbnMgdG8g
JyArCisgICAgICAnaW5zdHJ1Y3QgdGhlIGRlZXAgbWVyZ2UgaG93IHRvIHJlc29sdmUgbWVyZ2lu
ZyB0d28gYXJyYXlzLicKKyAgfTsKK30KKworLyoqCisgKiBXZSB3b24ndCB3b3JyeSBhYm91dCBl
ZGdlIGNhc2VzIGxpa2UgbmV3IFN0cmluZygneCcpIG9yIG5ldyBCb29sZWFuKHRydWUpLgorICog
RnVuY3Rpb25zIGFyZSBjb25zaWRlcmVkIHRlcm1pbmFscywgYW5kIGFycmF5cyBhcmUgbm90Lgor
ICogQHBhcmFtIHsqfSBvIFRoZSBpdGVtL29iamVjdC92YWx1ZSB0byB0ZXN0LgorICogQHJldHVy
biB7Ym9vbGVhbn0gdHJ1ZSBpZmYgdGhlIGFyZ3VtZW50IGlzIGEgdGVybWluYWwuCisgKi8KK3Zh
ciBpc1Rlcm1pbmFsID0gZnVuY3Rpb24obykgeworICByZXR1cm4gdHlwZW9mIG8gIT09ICdvYmpl
Y3QnIHx8IG8gPT09IG51bGw7Cit9OworCit2YXIgbWVyZ2VIZWxwZXJzID0geworCisgIE1BWF9N
RVJHRV9ERVBUSDogTUFYX01FUkdFX0RFUFRILAorCisgIGlzVGVybWluYWw6IGlzVGVybWluYWws
CisKKyAgLyoqCisgICAqIENvbnZlcnRzIG51bGwvdW5kZWZpbmVkIHZhbHVlcyBpbnRvIGVtcHR5
IG9iamVjdC4KKyAgICoKKyAgICogQHBhcmFtIHs/T2JqZWN0PX0gYXJnIEFyZ3VtZW50IHRvIGJl
IG5vcm1hbGl6ZWQgKG51bGxhYmxlIG9wdGlvbmFsKQorICAgKiBAcmV0dXJuIHshT2JqZWN0fQor
ICAgKi8KKyAgbm9ybWFsaXplTWVyZ2VBcmc6IGZ1bmN0aW9uKGFyZykgeworICAgIHJldHVybiBh
cmcgPT09IHVuZGVmaW5lZCB8fCBhcmcgPT09IG51bGwgPyB7fSA6IGFyZzsKKyAgfSwKKworICAv
KioKKyAgICogSWYgbWVyZ2luZyBBcnJheXMsIGEgbWVyZ2Ugc3RyYXRlZ3kgKm11c3QqIGJlIHN1
cHBsaWVkLiBJZiBub3QsIGl0IGlzCisgICAqIGxpa2VseSB0aGUgY2FsbGVyJ3MgZmF1bHQuIElm
IHRoaXMgZnVuY3Rpb24gaXMgZXZlciBjYWxsZWQgd2l0aCBhbnl0aGluZworICAgKiBidXQgYG9u
ZWAgYW5kIGB0d29gIGJlaW5nIGBBcnJheWBzLCBpdCBpcyB0aGUgZmF1bHQgb2YgdGhlIG1lcmdl
IHV0aWxpdGllcy4KKyAgICoKKyAgICogQHBhcmFtIHsqfSBvbmUgQXJyYXkgdG8gbWVyZ2UgaW50
by4KKyAgICogQHBhcmFtIHsqfSB0d28gQXJyYXkgdG8gbWVyZ2UgZnJvbS4KKyAgICovCisgIGNo
ZWNrTWVyZ2VBcnJheUFyZ3M6IGZ1bmN0aW9uKG9uZSwgdHdvKSB7CisgICAgdGhyb3dJZigKKyAg
ICAgICFBcnJheS5pc0FycmF5KG9uZSkgfHwgIUFycmF5LmlzQXJyYXkodHdvKSwKKyAgICAgIEVS
Uk9SUy5NRVJHRV9DT1JFX0ZBSUxVUkUKKyAgICApOworICB9LAorCisgIC8qKgorICAgKiBAcGFy
YW0geyp9IG9uZSBPYmplY3QgdG8gbWVyZ2UgaW50by4KKyAgICogQHBhcmFtIHsqfSB0d28gT2Jq
ZWN0IHRvIG1lcmdlIGZyb20uCisgICAqLworICBjaGVja01lcmdlT2JqZWN0QXJnczogZnVuY3Rp
b24ob25lLCB0d28pIHsKKyAgICBtZXJnZUhlbHBlcnMuY2hlY2tNZXJnZU9iamVjdEFyZyhvbmUp
OworICAgIG1lcmdlSGVscGVycy5jaGVja01lcmdlT2JqZWN0QXJnKHR3byk7CisgIH0sCisKKyAg
LyoqCisgICAqIEBwYXJhbSB7Kn0gYXJnCisgICAqLworICBjaGVja01lcmdlT2JqZWN0QXJnOiBm
dW5jdGlvbihhcmcpIHsKKyAgICB0aHJvd0lmKGlzVGVybWluYWwoYXJnKSB8fCBBcnJheS5pc0Fy
cmF5KGFyZyksIEVSUk9SUy5NRVJHRV9DT1JFX0ZBSUxVUkUpOworICB9LAorCisgIC8qKgorICAg
KiBDaGVja3MgdGhhdCBhIG1lcmdlIHdhcyBub3QgZ2l2ZW4gYSBjaXJjdWxhciBvYmplY3Qgb3Ig
YW4gb2JqZWN0IHRoYXQgaGFkCisgICAqIHRvbyBncmVhdCBvZiBkZXB0aC4KKyAgICoKKyAgICog
QHBhcmFtIHtudW1iZXJ9IExldmVsIG9mIHJlY3Vyc2lvbiB0byB2YWxpZGF0ZSBhZ2FpbnN0IG1h
eGltdW0uCisgICAqLworICBjaGVja01lcmdlTGV2ZWw6IGZ1bmN0aW9uKGxldmVsKSB7CisgICAg
dGhyb3dJZihsZXZlbCA+PSBNQVhfTUVSR0VfREVQVEgsIEVSUk9SUy5NRVJHRV9ERUVQX01BWF9M
RVZFTFMpOworICB9LAorCisgIC8qKgorICAgKiBDaGVja3MgdGhhdCBhIG1lcmdlIHdhcyBub3Qg
Z2l2ZW4gYSBjaXJjdWxhciBvYmplY3Qgb3IgYW4gb2JqZWN0IHRoYXQgaGFkCisgICAqIHRvbyBn
cmVhdCBvZiBkZXB0aC4KKyAgICoKKyAgICogQHBhcmFtIHtudW1iZXJ9IExldmVsIG9mIHJlY3Vy
c2lvbiB0byB2YWxpZGF0ZSBhZ2FpbnN0IG1heGltdW0uCisgICAqLworICBjaGVja0FycmF5U3Ry
YXRlZ3k6IGZ1bmN0aW9uKHN0cmF0ZWd5KSB7CisgICAgdGhyb3dJZigKKyAgICAgIHN0cmF0ZWd5
ICE9PSB1bmRlZmluZWQgJiYgIShzdHJhdGVneSBpbiBtZXJnZUhlbHBlcnMuQXJyYXlTdHJhdGVn
aWVzKSwKKyAgICAgIEVSUk9SUy5NRVJHRV9ERUVQX05PX0FSUl9TVFJBVEVHWQorICAgICk7Cisg
IH0sCisKKyAgLyoqCisgICAqIFNldCBvZiBwb3NzaWJsZSBiZWhhdmlvcnMgb2YgbWVyZ2UgYWxn
b3JpdGhtcyB3aGVuIGVuY291bnRlcmluZyB0d28gQXJyYXlzCisgICAqIHRoYXQgbXVzdCBiZSBt
ZXJnZWQgdG9nZXRoZXIuCisgICAqIC0gYGNsb2JiZXJgOiBUaGUgbGVmdCBgQXJyYXlgIGlzIGln
bm9yZWQuCisgICAqIC0gYGluZGV4QnlJbmRleGA6IFRoZSByZXN1bHQgaXMgYWNoaWV2ZWQgYnkg
cmVjdXJzaXZlbHkgZGVlcCBtZXJnaW5nIGF0CisgICAqICAgZWFjaCBpbmRleC4gKG5vdCB5ZXQg
c3VwcG9ydGVkLikKKyAgICovCisgIEFycmF5U3RyYXRlZ2llczoga2V5TWlycm9yKHsKKyAgICBD
bG9iYmVyOiB0cnVlLAorICAgIEluZGV4QnlJbmRleDogdHJ1ZQorICB9KSwKKworICBFUlJPUlM6
IEVSUk9SUworfTsKKworbW9kdWxlLmV4cG9ydHMgPSBtZXJnZUhlbHBlcnM7CisKK30seyIuL2tl
eU1pcnJvciI6NzgsIi4vdGhyb3dJZiI6ODZ9XSw4MzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUs
ZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgorICog
TGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNl
bnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNl
IHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vu
c2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAK
KyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGlu
IHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBk
aXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9S
IENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBT
ZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlz
c2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBAcHJv
dmlkZXNNb2R1bGUgbWVyZ2VJbnRvCisgKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seQorICovCisK
KyJ1c2Ugc3RyaWN0IjsKKwordmFyIG1lcmdlSGVscGVycyA9IHJlcXVpcmUoIi4vbWVyZ2VIZWxw
ZXJzIik7CisKK3ZhciBjaGVja01lcmdlT2JqZWN0QXJnID0gbWVyZ2VIZWxwZXJzLmNoZWNrTWVy
Z2VPYmplY3RBcmc7CisKKy8qKgorICogU2hhbGxvdyBtZXJnZXMgdHdvIHN0cnVjdHVyZXMgYnkg
bXV0YXRpbmcgdGhlIGZpcnN0IHBhcmFtZXRlci4KKyAqCisgKiBAcGFyYW0ge29iamVjdH0gb25l
IE9iamVjdCB0byBiZSBtZXJnZWQgaW50by4KKyAqIEBwYXJhbSB7P29iamVjdH0gdHdvIE9wdGlv
bmFsIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgdG8gbWVyZ2UgZnJvbS4KKyAqLworZnVuY3Rpb24g
bWVyZ2VJbnRvKG9uZSwgdHdvKSB7CisgIGNoZWNrTWVyZ2VPYmplY3RBcmcob25lKTsKKyAgaWYg
KHR3byAhPSBudWxsKSB7CisgICAgY2hlY2tNZXJnZU9iamVjdEFyZyh0d28pOworICAgIGZvciAo
dmFyIGtleSBpbiB0d28pIHsKKyAgICAgIGlmICghdHdvLmhhc093blByb3BlcnR5KGtleSkpIHsK
KyAgICAgICAgY29udGludWU7CisgICAgICB9CisgICAgICBvbmVba2V5XSA9IHR3b1trZXldOwor
ICAgIH0KKyAgfQorfQorCittb2R1bGUuZXhwb3J0cyA9IG1lcmdlSW50bzsKKworfSx7Ii4vbWVy
Z2VIZWxwZXJzIjo4Mn1dLDg0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8q
KgorICogQ29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRl
ciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlv
dSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGlj
ZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAq
IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVz
cyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29m
dHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9u
IGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBP
RiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5z
ZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAq
IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBt
aXhJbnRvCisgKi8KKworInVzZSBzdHJpY3QiOworCisvKioKKyAqIFNpbXBseSBjb3BpZXMgcHJv
cGVydGllcyB0byB0aGUgcHJvdG90eXBlLgorICovCit2YXIgbWl4SW50byA9IGZ1bmN0aW9uKGNv
bnN0cnVjdG9yLCBtZXRob2RCYWcpIHsKKyAgdmFyIG1ldGhvZE5hbWU7CisgIGZvciAobWV0aG9k
TmFtZSBpbiBtZXRob2RCYWcpIHsKKyAgICBpZiAoIW1ldGhvZEJhZy5oYXNPd25Qcm9wZXJ0eSht
ZXRob2ROYW1lKSkgeworICAgICAgY29udGludWU7CisgICAgfQorICAgIGNvbnN0cnVjdG9yLnBy
b3RvdHlwZVttZXRob2ROYW1lXSA9IG1ldGhvZEJhZ1ttZXRob2ROYW1lXTsKKyAgfQorfTsKKwor
bW9kdWxlLmV4cG9ydHMgPSBtaXhJbnRvOworCit9LHt9XSw4NTpbZnVuY3Rpb24ocmVxdWlyZSxt
b2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzIEZhY2Vib29rLCBJbmMuCisg
KgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhl
ICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21w
bGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhl
IExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5T
RS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVk
IHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5z
ZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5U
SUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQu
CisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcg
cGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisg
KiBAcHJvdmlkZXNNb2R1bGUgb2JqTWFwS2V5VmFsCisgKi8KKworInVzZSBzdHJpY3QiOworCisv
KioKKyAqIEJlaGF2ZXMgdGhlIHNhbWUgYXMgYG9iak1hcGAgYnV0IGludm9rZXMgZnVuYyB3aXRo
IHRoZSBrZXkgZmlyc3QsIGFuZCB2YWx1ZQorICogc2Vjb25kLiBVc2UgYG9iak1hcGAgdW5sZXNz
IHlvdSBuZWVkIHRoaXMgc3BlY2lhbCBjYXNlLgorICogSW52b2tlcyBmdW5jIGFzOgorICoKKyAq
ICAgZnVuYyhrZXksIHZhbHVlLCBpdGVyYXRpb24pCisgKgorICogQHBhcmFtIHs/b2JqZWN0fSBv
YmogT2JqZWN0IHRvIG1hcCBrZXlzIG92ZXIKKyAqIEBwYXJhbSB7IWZ1bmN0aW9ufSBmdW5jIElu
dm9rZWQgZm9yIGVhY2gga2V5L3ZhbCBwYWlyLgorICogQHBhcmFtIHs/Kn0gY29udGV4dAorICog
QHJldHVybiB7P29iamVjdH0gUmVzdWx0IG9mIG1hcHBpbmcgb3IgbnVsbCBpZiBvYmogaXMgZmFs
c2V5CisgKi8KK2Z1bmN0aW9uIG9iak1hcEtleVZhbChvYmosIGZ1bmMsIGNvbnRleHQpIHsKKyAg
aWYgKCFvYmopIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorICB2YXIgaSA9IDA7CisgIHZhciBy
ZXQgPSB7fTsKKyAgZm9yICh2YXIga2V5IGluIG9iaikgeworICAgIGlmIChvYmouaGFzT3duUHJv
cGVydHkoa2V5KSkgeworICAgICAgcmV0W2tleV0gPSBmdW5jLmNhbGwoY29udGV4dCwga2V5LCBv
Ympba2V5XSwgaSsrKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHJldDsKK30KKworbW9kdWxlLmV4
cG9ydHMgPSBvYmpNYXBLZXlWYWw7CisKK30se31dLDg2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVs
ZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisg
KiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxp
Y2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFu
Y2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGlj
ZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIu
MAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8g
aW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlz
IGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMg
T1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAq
IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJt
aXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBw
cm92aWRlc01vZHVsZSB0aHJvd0lmCisgKi8KKworInVzZSBzdHJpY3QiOworCit2YXIgdGhyb3dJ
ZiA9IGZ1bmN0aW9uKGNvbmRpdGlvbiwgZXJyKSB7CisgIGlmIChjb25kaXRpb24pIHsKKyAgICB0
aHJvdyBuZXcgRXJyb3IoZXJyKTsKKyAgfQorfTsKKworbW9kdWxlLmV4cG9ydHMgPSB0aHJvd0lm
OworCit9LHt9XSw4NzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisoZnVuY3Rp
b24oKXsvKioKKyAqIENvcHlyaWdodCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgorICogTGljZW5z
ZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7
CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgg
dGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQK
KyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisg
KiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRp
bmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmli
dXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJ
VElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhl
IExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMg
YW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBAcHJvdmlkZXNN
b2R1bGUgdHJhdmVyc2VBbGxDaGlsZHJlbgorICovCisKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIFJl
YWN0Q29tcG9uZW50ID0gcmVxdWlyZSgiLi9SZWFjdENvbXBvbmVudCIpOwordmFyIFJlYWN0VGV4
dENvbXBvbmVudCA9IHJlcXVpcmUoIi4vUmVhY3RUZXh0Q29tcG9uZW50Iik7CisKK3ZhciB0aHJv
d0lmID0gcmVxdWlyZSgiLi90aHJvd0lmIik7CisKKy8qKgorICogQHBvbHlGaWxsIEFycmF5Lmlz
QXJyYXkKKyAqLwordmFyIERVUExJQ0FURV9LRVlfRVJST1IgPSAnRFVQTElDQVRFX0tFWV9FUlJP
Uic7Cit2YXIgSU5WQUxJRF9DSElMRCA9ICdJTlZBTElEX0NISUxEJzsKK2lmICh0cnVlKSB7Cisg
IElOVkFMSURfQ0hJTEQgPQorICAgICdZb3UgbWF5IG5vdCBwYXNzIGEgY2hpbGQgb2YgdGhhdCB0
eXBlIHRvIGEgUmVhY3QgY29tcG9uZW50LiBJdCAnICsKKyAgICAnaXMgYSBjb21tb24gbWlzdGFr
ZSB0byB0cnkgdG8gcGFzcyBhIHN0YW5kYXJkIGJyb3dzZXIgRE9NIGVsZW1lbnQgJyArCisgICAg
J2FzIGEgY2hpbGQgb2YgYSBSZWFjdCBjb21wb25lbnQuJzsKKyAgRFVQTElDQVRFX0tFWV9FUlJP
UiA9CisgICAgJ1lvdSBoYXZlIHR3byBjaGlsZHJlbiB3aXRoIGlkZW50aWNhbCBrZXlzLiBNYWtl
IHN1cmUgdGhhdCB5b3Ugc2V0IHRoZSAnICsKKyAgICAnImtleSIgcHJvcGVydHkgdG8gYSB1bmlx
dWUgdmFsdWUgc3VjaCBhcyBhIHJvdyBJRC4nOworfQorCisvKioKKyAqIFRPRE86IFRlc3QgdGhh
dDoKKyAqIDEuIGBtYXBDaGlsZHJlbmAgdHJhbnNmb3JtcyBzdHJpbmdzIGFuZCBudW1iZXJzIGlu
dG8gYFJlYWN0VGV4dENvbXBvbmVudGAuCisgKiAyLiBpdCgnc2hvdWxkIGZhaWwgd2hlbiBzdXBw
bGllZCBkdXBsaWNhdGUga2V5JywgZnVuY3Rpb24oKSB7CisgKiAzLiBUaGF0IGEgc2luZ2xlIGNo
aWxkIGFuZCBhbiBhcnJheSB3aXRoIG9uZSBpdGVtIGhhdmUgdGhlIHNhbWUga2V5IHBhdHRlcm4u
CisgKiB9KTsKKyAqLworCisvKioKKyAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRy
ZWUgY29udGFpbmVyLgorICogQHBhcmFtIHshc3RyaW5nfSBuYW1lU29GYXIgTmFtZSBvZiB0aGUg
a2V5IHBhdGggc28gZmFyLgorICogQHBhcmFtIHshbnVtYmVyfSBpbmRleFNvRmFyIE51bWJlciBv
ZiBjaGlsZHJlbiBlbmNvdW50ZXJlZCB1bnRpbCB0aGlzIHBvaW50LgorICogQHBhcmFtIHshZnVu
Y3Rpb259IGNhbGxiYWNrIENhbGxiYWNrIHRvIGludm9rZSB3aXRoIGVhY2ggY2hpbGQgZm91bmQu
CisgKiBAcGFyYW0gez8qfSB0cmF2ZXJzZUNvbnRleHQgVXNlZCB0byBwYXNzIGluZm9ybWF0aW9u
IHRocm91Z2hvdXQgdGhlIHRyYXZlcnNhbAorICogcHJvY2Vzcy4KKyAqIEByZXR1cm4geyFudW1i
ZXJ9IFRoZSBudW1iZXIgb2YgY2hpbGRyZW4gaW4gdGhpcyBzdWJ0cmVlLgorICovCit2YXIgdHJh
dmVyc2VBbGxDaGlsZHJlbkltcGwgPQorICBmdW5jdGlvbihjaGlsZHJlbiwgbmFtZVNvRmFyLCBp
bmRleFNvRmFyLCBjYWxsYmFjaywgdHJhdmVyc2VDb250ZXh0KSB7CisgICAgdmFyIHN1YnRyZWVD
b3VudCA9IDA7ICAvLyBDb3VudCBvZiBjaGlsZHJlbiBmb3VuZCBpbiB0aGUgY3VycmVudCBzdWJ0
cmVlLgorICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkgeworICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykgeworICAgICAgICB2YXIgY2hpbGQgPSBj
aGlsZHJlbltpXTsKKyAgICAgICAgdmFyIG5leHROYW1lID0gbmFtZVNvRmFyICsgJ1snICsgUmVh
Y3RDb21wb25lbnQuZ2V0S2V5KGNoaWxkLCBpKSArICddJzsKKyAgICAgICAgdmFyIG5leHRJbmRl
eCA9IGluZGV4U29GYXIgKyBzdWJ0cmVlQ291bnQ7CisgICAgICAgIHN1YnRyZWVDb3VudCArPSB0
cmF2ZXJzZUFsbENoaWxkcmVuSW1wbCgKKyAgICAgICAgICBjaGlsZCwKKyAgICAgICAgICBuZXh0
TmFtZSwKKyAgICAgICAgICBuZXh0SW5kZXgsCisgICAgICAgICAgY2FsbGJhY2ssCisgICAgICAg
ICAgdHJhdmVyc2VDb250ZXh0CisgICAgICAgICk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgIHZhciB0eXBlID0gdHlwZW9mIGNoaWxkcmVuOworICAgICAgdmFyIGlzT25seUNoaWxkID0g
bmFtZVNvRmFyID09PSAnJzsKKyAgICAgIC8vIElmIGl0J3MgdGhlIG9ubHkgY2hpbGQsIHRyZWF0
IHRoZSBuYW1lIGFzIGlmIGl0IHdhcyB3cmFwcGVkIGluIGFuIGFycmF5CisgICAgICAvLyBzbyB0
aGF0IGl0J3MgY29uc2lzdGVudCBpZiB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIGdyb3dzCisgICAg
ICB2YXIgc3RvcmFnZU5hbWUgPSBpc09ubHlDaGlsZCA/CisgICAgICAgICdbJyArIFJlYWN0Q29t
cG9uZW50LmdldEtleShjaGlsZHJlbiwgMCkgKyAnXScgOgorICAgICAgICBuYW1lU29GYXI7Cisg
ICAgICBpZiAoY2hpbGRyZW4gPT09IG51bGwgfHwgY2hpbGRyZW4gPT09IHVuZGVmaW5lZCB8fCB0
eXBlID09PSAnYm9vbGVhbicpIHsKKyAgICAgICAgLy8gQWxsIG9mIHRoZSBhYm92ZSBhcmUgcGVy
Y2VpdmVkIGFzIG51bGwuCisgICAgICAgIGNhbGxiYWNrKHRyYXZlcnNlQ29udGV4dCwgbnVsbCwg
c3RvcmFnZU5hbWUsIGluZGV4U29GYXIpOworICAgICAgICBzdWJ0cmVlQ291bnQgPSAxOworICAg
ICAgfSBlbHNlIGlmIChjaGlsZHJlbi5tb3VudENvbXBvbmVudEludG9Ob2RlKSB7CisgICAgICAg
IGNhbGxiYWNrKHRyYXZlcnNlQ29udGV4dCwgY2hpbGRyZW4sIHN0b3JhZ2VOYW1lLCBpbmRleFNv
RmFyKTsKKyAgICAgICAgc3VidHJlZUNvdW50ID0gMTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAg
IGlmICh0eXBlID09PSAnb2JqZWN0JykgeworICAgICAgICAgIHRocm93SWYoY2hpbGRyZW4gJiYg
Y2hpbGRyZW4ubm9kZVR5cGUgPT09IDEsIElOVkFMSURfQ0hJTEQpOworICAgICAgICAgIGZvciAo
dmFyIGtleSBpbiBjaGlsZHJlbikgeworICAgICAgICAgICAgaWYgKGNoaWxkcmVuLmhhc093blBy
b3BlcnR5KGtleSkpIHsKKyAgICAgICAgICAgICAgc3VidHJlZUNvdW50ICs9IHRyYXZlcnNlQWxs
Q2hpbGRyZW5JbXBsKAorICAgICAgICAgICAgICAgIGNoaWxkcmVuW2tleV0sCisgICAgICAgICAg
ICAgICAgbmFtZVNvRmFyICsgJ3snICsga2V5ICsgJ30nLAorICAgICAgICAgICAgICAgIGluZGV4
U29GYXIgKyBzdWJ0cmVlQ291bnQsCisgICAgICAgICAgICAgICAgY2FsbGJhY2ssCisgICAgICAg
ICAgICAgICAgdHJhdmVyc2VDb250ZXh0CisgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdzdHJpbmcnKSB7Cisg
ICAgICAgICAgdmFyIG5vcm1hbGl6ZWRUZXh0ID0gbmV3IFJlYWN0VGV4dENvbXBvbmVudChjaGls
ZHJlbik7CisgICAgICAgICAgY2FsbGJhY2sodHJhdmVyc2VDb250ZXh0LCBub3JtYWxpemVkVGV4
dCwgc3RvcmFnZU5hbWUsIGluZGV4U29GYXIpOworICAgICAgICAgIHN1YnRyZWVDb3VudCArPSAx
OworICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdudW1iZXInKSB7CisgICAgICAgICAgdmFy
IG5vcm1hbGl6ZWROdW1iZXIgPSBuZXcgUmVhY3RUZXh0Q29tcG9uZW50KCcnICsgY2hpbGRyZW4p
OworICAgICAgICAgIGNhbGxiYWNrKHRyYXZlcnNlQ29udGV4dCwgbm9ybWFsaXplZE51bWJlciwg
c3RvcmFnZU5hbWUsIGluZGV4U29GYXIpOworICAgICAgICAgIHN1YnRyZWVDb3VudCArPSAxOwor
ICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBzdWJ0cmVlQ291bnQ7CisgIH07
CisKKy8qKgorICogVHJhdmVyc2VzIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZp
ZWQgYXMgYHByb3BzLmNoaWxkcmVuYCwgYnV0CisgKiBtaWdodCBhbHNvIGJlIHNwZWNpZmllZCB0
aHJvdWdoIGF0dHJpYnV0ZXM6CisgKgorICogLSBgdHJhdmVyc2VBbGxDaGlsZHJlbih0aGlzLnBy
b3BzLmNoaWxkcmVuLCAuLi4pYAorICogLSBgdHJhdmVyc2VBbGxDaGlsZHJlbih0aGlzLnByb3Bz
LmxlZnRQYW5lbENoaWxkcmVuLCAuLi4pYAorICoKKyAqIFRoZSBgdHJhdmVyc2VDb250ZXh0YCBp
cyBhbiBvcHRpb25hbCBhcmd1bWVudCB0aGF0IGlzIHBhc3NlZCB0aHJvdWdoIHRoZQorICogZW50
aXJlIHRyYXZlcnNhbC4gSXQgY2FuIGJlIHVzZWQgdG8gc3RvcmUgYWNjdW11bGF0aW9ucyBvciBh
bnl0aGluZyBlbHNlIHRoYXQKKyAqIHRoZSBjYWxsYmFjayBtaWdodCBmaW5kIHJlbGV2YW50Lgor
ICoKKyAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgb2JqZWN0LgorICogQHBh
cmFtIHshZnVuY3Rpb259IGNhbGxiYWNrIFRvIGludm9rZSB1cG9uIHRyYXZlcnNpbmcgZWFjaCBj
aGlsZC4KKyAqIEBwYXJhbSB7Pyp9IHRyYXZlcnNlQ29udGV4dCBDb250ZXh0IGZvciB0cmF2ZXJz
YWwuCisgKi8KK2Z1bmN0aW9uIHRyYXZlcnNlQWxsQ2hpbGRyZW4oY2hpbGRyZW4sIGNhbGxiYWNr
LCB0cmF2ZXJzZUNvbnRleHQpIHsKKyAgaWYgKGNoaWxkcmVuICE9PSBudWxsICYmIGNoaWxkcmVu
ICE9PSB1bmRlZmluZWQpIHsKKyAgICB0cmF2ZXJzZUFsbENoaWxkcmVuSW1wbChjaGlsZHJlbiwg
JycsIDAsIGNhbGxiYWNrLCB0cmF2ZXJzZUNvbnRleHQpOworICB9Cit9CisKKy8qKgorICogRXhw
b3J0IHRoZSBlcnJvciBjb2RlIGZvciB1c2UgaW4gb3RoZXIgd2Fsa2luZy9tYXBwaW5nIGNvZGUu
CisgKi8KK3RyYXZlcnNlQWxsQ2hpbGRyZW4uRFVQTElDQVRFX0tFWV9FUlJPUiA9IERVUExJQ0FU
RV9LRVlfRVJST1I7CisKKworbW9kdWxlLmV4cG9ydHMgPSB0cmF2ZXJzZUFsbENoaWxkcmVuOwor
Cit9KSgpCit9LHsiLi9SZWFjdENvbXBvbmVudCI6MjIsIi4vUmVhY3RUZXh0Q29tcG9uZW50Ijo0
NywiLi90aHJvd0lmIjo4Nn1dfSx7fSxbMjFdKSgyMSkKK30pOworOwpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRv
bWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvbGFicy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVh
Y3QvYm93ZXJfY29tcG9uZW50cy9yZWFjdC9yZWFjdC5taW4uanMgYi9XZWJzaXRlcy9icm93c2Vy
YmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2xhYnMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL3JlYWN0L2Jvd2VyX2NvbXBvbmVudHMvcmVhY3QvcmVhY3QubWluLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmE2MzFjNWJkOTE0MzhjNjE1YjRkOGJlOGQzN2RlN2YyMTQ2MGM0NjcKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jl
c291cmNlcy90b2RvbXZjL2xhYnMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2Jvd2VyX2Nv
bXBvbmVudHMvcmVhY3QvcmVhY3QubWluLmpzCkBAIC0wLDAgKzEsMjAgQEAKKy8qKgorICogUmVh
Y3QgdjAuNC4wCisgKgorICogQ29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBM
aWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vu
c2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ug
d2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5z
ZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAor
ICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4g
d3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRp
c3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1Ig
Q09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNl
ZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNz
aW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCishZnVuY3Rp
b24oZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGJvb3RzdHJhcClib290c3RyYXAoInJlYWN0Iixl
KTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyltb2R1bGUuZXhwb3J0cz1lKCk7ZWxz
ZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShlKTtlbHNl
IGlmKCJ1bmRlZmluZWQiIT10eXBlb2Ygc2VzKXtpZighc2VzLm9rKCkpcmV0dXJuO3Nlcy5tYWtl
UmVhY3Q9ZX1lbHNlInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93LlJlYWN0PWUoKTpn
bG9iYWwuUmVhY3Q9ZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlLHQsbil7ZnVuY3Rp
b24gcihuLGkpe2lmKCF0W25dKXtpZighZVtuXSl7dmFyIGE9ImZ1bmN0aW9uIj09dHlwZW9mIHJl
cXVpcmUmJnJlcXVpcmU7aWYoIWkmJmEpcmV0dXJuIGEobiwhMCk7aWYobylyZXR1cm4gbyhuLCEw
KTt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIituKyInIil9dmFyIHM9dFtu
XT17ZXhwb3J0czp7fX07ZVtuXVswXS5jYWxsKHMuZXhwb3J0cyxmdW5jdGlvbih0KXt2YXIgbz1l
W25dWzFdW3RdO3JldHVybiByKG8/bzp0KX0scyxzLmV4cG9ydHMpfXJldHVybiB0W25dLmV4cG9y
dHN9Zm9yKHZhciBvPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPG4u
bGVuZ3RoO2krKylyKG5baV0pO3JldHVybiByfSh7MTpbZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBu
KGUpe3ZhciB0PXIoZSk7aWYoIXQpdGhyb3cgbmV3IEVycm9yKG8oJ1RyaWVkIHRvIGdldCBlbGVt
ZW50IHdpdGggaWQgb2YgIiVzIiBidXQgaXQgaXMgbm90IHByZXNlbnQgb24gdGhlIHBhZ2UuJyxl
KSk7cmV0dXJuIHR9dmFyIHI9ZSgiLi9nZSIpLG89ZSgiLi9leCIpO3QuZXhwb3J0cz1ufSx7Ii4v
ZXgiOjY2LCIuL2dlIjo2OX1dLDI6W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO3ZhciBuPXtm
aWxsT3BhY2l0eTohMCxmb250V2VpZ2h0OiEwLG9wYWNpdHk6ITAsb3JwaGFuczohMCx6SW5kZXg6
ITAsem9vbTohMH0scj17YmFja2dyb3VuZDp7YmFja2dyb3VuZEltYWdlOiEwLGJhY2tncm91bmRQ
b3NpdGlvbjohMCxiYWNrZ3JvdW5kUmVwZWF0OiEwLGJhY2tncm91bmRDb2xvcjohMH0sYm9yZGVy
Ontib3JkZXJXaWR0aDohMCxib3JkZXJTdHlsZTohMCxib3JkZXJDb2xvcjohMH0sYm9yZGVyQm90
dG9tOntib3JkZXJCb3R0b21XaWR0aDohMCxib3JkZXJCb3R0b21TdHlsZTohMCxib3JkZXJCb3R0
b21Db2xvcjohMH0sYm9yZGVyTGVmdDp7Ym9yZGVyTGVmdFdpZHRoOiEwLGJvcmRlckxlZnRTdHls
ZTohMCxib3JkZXJMZWZ0Q29sb3I6ITB9LGJvcmRlclJpZ2h0Ontib3JkZXJSaWdodFdpZHRoOiEw
LGJvcmRlclJpZ2h0U3R5bGU6ITAsYm9yZGVyUmlnaHRDb2xvcjohMH0sYm9yZGVyVG9wOntib3Jk
ZXJUb3BXaWR0aDohMCxib3JkZXJUb3BTdHlsZTohMCxib3JkZXJUb3BDb2xvcjohMH0sZm9udDp7
Zm9udFN0eWxlOiEwLGZvbnRWYXJpYW50OiEwLGZvbnRXZWlnaHQ6ITAsZm9udFNpemU6ITAsbGlu
ZUhlaWdodDohMCxmb250RmFtaWx5OiEwfX0sbz17aXNVbml0bGVzc051bWJlcjpuLHNob3J0aGFu
ZFByb3BlcnR5RXhwYW5zaW9uczpyfTt0LmV4cG9ydHM9b30se31dLDM6W2Z1bmN0aW9uKGUsdCl7
InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4vQ1NTUHJvcGVydHkiKSxyPWUoIi4vZGFuZ2Vyb3VzU3R5
bGVWYWx1ZSIpLG89ZSgiLi9lc2NhcGVUZXh0Rm9yQnJvd3NlciIpLGk9ZSgiLi9oeXBoZW5hdGUi
KSxhPWUoIi4vbWVtb2l6ZVN0cmluZ09ubHkiKSxzPWEoZnVuY3Rpb24oZSl7cmV0dXJuIG8oaShl
KSl9KSx1PXtjcmVhdGVNYXJrdXBGb3JTdHlsZXM6ZnVuY3Rpb24oZSl7dmFyIHQ9IiI7Zm9yKHZh
ciBuIGluIGUpaWYoZS5oYXNPd25Qcm9wZXJ0eShuKSl7dmFyIG89ZVtuXTtudWxsIT1vJiYodCs9
cyhuKSsiOiIsdCs9cihuLG8pKyI7Iil9cmV0dXJuIHR8fG51bGx9LHNldFZhbHVlRm9yU3R5bGVz
OmZ1bmN0aW9uKGUsdCl7dmFyIG89ZS5zdHlsZTtmb3IodmFyIGkgaW4gdClpZih0Lmhhc093blBy
b3BlcnR5KGkpKXt2YXIgYT1yKGksdFtpXSk7aWYoYSlvW2ldPWE7ZWxzZXt2YXIgcz1uLnNob3J0
aGFuZFByb3BlcnR5RXhwYW5zaW9uc1tpXTtpZihzKWZvcih2YXIgdSBpbiBzKW9bdV09IiI7ZWxz
ZSBvW2ldPSIifX19fTt0LmV4cG9ydHM9dX0seyIuL0NTU1Byb3BlcnR5IjoyLCIuL2Rhbmdlcm91
c1N0eWxlVmFsdWUiOjYzLCIuL2VzY2FwZVRleHRGb3JCcm93c2VyIjo2NSwiLi9oeXBoZW5hdGUi
OjczLCIuL21lbW9pemVTdHJpbmdPbmx5Ijo4MH1dLDQ6W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJp
Y3QiO3ZhciBuPXt9LHI9e3B1dExpc3RlbmVyOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbz1uW3RdfHwo
blt0XT17fSk7b1tlXT1yfSxnZXRMaXN0ZW5lcjpmdW5jdGlvbihlLHQpe3ZhciByPW5bdF07cmV0
dXJuIHImJnJbZV19LGRlbGV0ZUxpc3RlbmVyOmZ1bmN0aW9uKGUsdCl7dmFyIHI9blt0XTtyJiZk
ZWxldGUgcltlXX0sZGVsZXRlQWxsTGlzdGVuZXJzOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBu
KWRlbGV0ZSBuW3RdW2VdfSxfX3B1cmdlOmZ1bmN0aW9uKCl7bj17fX19O3QuZXhwb3J0cz1yfSx7
fV0sNTpbZnVuY3Rpb24oZSx0KXshZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihl
KXtyZXR1cm4iU0VMRUNUIj09PWUubm9kZU5hbWV8fCJJTlBVVCI9PT1lLm5vZGVOYW1lJiYiZmls
ZSI9PT1lLnR5cGV9ZnVuY3Rpb24gcihlKXt2YXIgdD1ELmdldFBvb2xlZChPLmNoYW5nZSxfLGUp
O0MuYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlcyh0KSx5LmVucXVldWVFdmVudHModCkseS5w
cm9jZXNzRXZlbnRRdWV1ZSgpfWZ1bmN0aW9uIG8oZSx0KXtJPWUsXz10LEkuYXR0YWNoRXZlbnQo
Im9uY2hhbmdlIixyKX1mdW5jdGlvbiBpKCl7SSYmKEkuZGV0YWNoRXZlbnQoIm9uY2hhbmdlIixy
KSxJPW51bGwsXz1udWxsKX1mdW5jdGlvbiBhKGUsdCxuKXtyZXR1cm4gZT09PWIudG9wQ2hhbmdl
P246dm9pZCAwfWZ1bmN0aW9uIHMoZSx0LG4pe2U9PT1iLnRvcEZvY3VzPyhpKCksbyh0LG4pKTpl
PT09Yi50b3BCbHVyJiZpKCl9ZnVuY3Rpb24gdShlKXtyZXR1cm4iSU5QVVQiPT09ZS5ub2RlTmFt
ZSYmeFtlLnR5cGVdfHwiVEVYVEFSRUEiPT09ZS5ub2RlTmFtZX1mdW5jdGlvbiBsKGUsdCl7ST1l
LF89dCxOPWUudmFsdWUsUD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUuY29uc3Ry
dWN0b3IucHJvdG90eXBlLCJ2YWx1ZSIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJLCJ2YWx1ZSIs
QSksSS5hdHRhY2hFdmVudCgib25wcm9wZXJ0eWNoYW5nZSIscCl9ZnVuY3Rpb24gYygpe0kmJihk
ZWxldGUgSS52YWx1ZSxJLmRldGFjaEV2ZW50KCJvbnByb3BlcnR5Y2hhbmdlIixwKSxJPW51bGws
Xz1udWxsLE49bnVsbCxQPW51bGwpfWZ1bmN0aW9uIHAoZSl7aWYoInZhbHVlIj09PWUucHJvcGVy
dHlOYW1lKXt2YXIgdD1lLnNyY0VsZW1lbnQudmFsdWU7dCE9PU4mJihOPXQscihlKSl9fWZ1bmN0
aW9uIGQoZSx0LG4pe3JldHVybiBlPT09Yi50b3BJbnB1dD9uOnZvaWQgMH1mdW5jdGlvbiBoKGUs
dCxuKXtlPT09Yi50b3BGb2N1cz8oYygpLGwodCxuKSk6ZT09PWIudG9wQmx1ciYmYygpfWZ1bmN0
aW9uIGYoZSl7cmV0dXJuIGUhPT1iLnRvcFNlbGVjdGlvbkNoYW5nZSYmZSE9PWIudG9wS2V5VXAm
JmUhPT1iLnRvcEtleURvd258fCFJfHxJLnZhbHVlPT09Tj92b2lkIDA6KE49SS52YWx1ZSxfKX1m
dW5jdGlvbiB2KGUpe3JldHVybiJJTlBVVCI9PT1lLm5vZGVOYW1lJiYoImNoZWNrYm94Ij09PWUu
dHlwZXx8InJhZGlvIj09PWUudHlwZSl9ZnVuY3Rpb24gbShlLHQsbil7cmV0dXJuIGU9PT1iLnRv
cENsaWNrP246dm9pZCAwfXZhciBnPWUoIi4vRXZlbnRDb25zdGFudHMiKSx5PWUoIi4vRXZlbnRQ
bHVnaW5IdWIiKSxDPWUoIi4vRXZlbnRQcm9wYWdhdG9ycyIpLEU9ZSgiLi9FeGVjdXRpb25FbnZp
cm9ubWVudCIpLEQ9ZSgiLi9TeW50aGV0aWNFdmVudCIpLE09ZSgiLi9pc0V2ZW50U3VwcG9ydGVk
IiksUj1lKCIuL2tleU9mIiksYj1nLnRvcExldmVsVHlwZXMsTz17Y2hhbmdlOntwaGFzZWRSZWdp
c3RyYXRpb25OYW1lczp7YnViYmxlZDpSKHtvbkNoYW5nZTpudWxsfSksY2FwdHVyZWQ6Uih7b25D
aGFuZ2VDYXB0dXJlOm51bGx9KX19fSxJPW51bGwsXz1udWxsLE49bnVsbCxQPW51bGwsVD0hMTtF
LmNhblVzZURPTSYmKFQ9TSgiY2hhbmdlIikmJighKCJkb2N1bWVudE1vZGUiaW4gZG9jdW1lbnQp
fHxkb2N1bWVudC5kb2N1bWVudE1vZGU+OCkpO3ZhciBTPSExO0UuY2FuVXNlRE9NJiYoUz1NKCJp
bnB1dCIpJiYoISgiZG9jdW1lbnRNb2RlImluIGRvY3VtZW50KXx8ZG9jdW1lbnQuZG9jdW1lbnRN
b2RlPjkpKTt2YXIgeD17Y29sb3I6ITAsZGF0ZTohMCxkYXRldGltZTohMCwiZGF0ZXRpbWUtbG9j
YWwiOiEwLGVtYWlsOiEwLG1vbnRoOiEwLG51bWJlcjohMCxwYXNzd29yZDohMCxyYW5nZTohMCxz
ZWFyY2g6ITAsdGVsOiEwLHRleHQ6ITAsdGltZTohMCx1cmw6ITAsd2VlazohMH0sQT17Z2V0OmZ1
bmN0aW9uKCl7cmV0dXJuIFAuZ2V0LmNhbGwodGhpcyl9LHNldDpmdW5jdGlvbihlKXtOPSIiK2Us
UC5zZXQuY2FsbCh0aGlzLGUpfX0sdz17ZXZlbnRUeXBlczpPLGV4dHJhY3RFdmVudHM6ZnVuY3Rp
b24oZSx0LHIsbyl7dmFyIGksbDtpZihuKHQpP1Q/aT1hOmw9czp1KHQpP1M/aT1kOihpPWYsbD1o
KTp2KHQpJiYoaT1tKSxpKXt2YXIgYz1pKGUsdCxyKTtpZihjKXt2YXIgcD1ELmdldFBvb2xlZChP
LmNoYW5nZSxjLG8pO3JldHVybiBDLmFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXMocCkscH19
bCYmbChlLHQscil9fTt0LmV4cG9ydHM9d30oKX0seyIuL0V2ZW50Q29uc3RhbnRzIjoxMywiLi9F
dmVudFBsdWdpbkh1YiI6MTUsIi4vRXZlbnRQcm9wYWdhdG9ycyI6MTgsIi4vRXhlY3V0aW9uRW52
aXJvbm1lbnQiOjE5LCIuL1N5bnRoZXRpY0V2ZW50Ijo1MCwiLi9pc0V2ZW50U3VwcG9ydGVkIjo3
NiwiLi9rZXlPZiI6Nzl9XSw2OltmdW5jdGlvbihlLHQpeyFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0
Ijt2YXIgbj1lKCIuL0RhbmdlciIpLHI9ZSgiLi9pbnNlcnROb2RlQXQiKSxvPWUoIi4va2V5T2Yi
KTtlKCIuL3Rocm93SWYiKTt2YXIgaT1vKHttb3ZlRnJvbTpudWxsfSksYT1vKHtpbnNlcnRNYXJr
dXA6bnVsbH0pLHM9byh7cmVtb3ZlQXQ6bnVsbH0pLHU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4s
cixvLGE9MDthPHQubGVuZ3RoO2ErKylyPXRbYV0saSBpbiByPyhuPW58fFtdLG89ci5tb3ZlRnJv
bSxuW29dPWUuY2hpbGROb2Rlc1tvXSk6cyBpbiByJiYobj1ufHxbXSxvPXIucmVtb3ZlQXQsbltv
XT1lLmNoaWxkTm9kZXNbb10pO3JldHVybiBufSxsPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7
bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ciYmZS5yZW1vdmVDaGlsZCh0W25dKX19LGM9ZnVu
Y3Rpb24oZSx0LG8pe2Zvcih2YXIgdSxsLGMscD0wO3A8dC5sZW5ndGg7cCsrKWlmKGM9dFtwXSxp
IGluIGMpdT1vW2MubW92ZUZyb21dLGw9Yy5maW5hbEluZGV4LHIoZSx1LGwpO2Vsc2UgaWYocyBp
biBjKTtlbHNlIGlmKGEgaW4gYyl7bD1jLmZpbmFsSW5kZXg7dmFyIGQ9Yy5pbnNlcnRNYXJrdXA7
bi5kYW5nZXJvdXNseUluc2VydE1hcmt1cEF0KGUsZCxsKX19LHA9ZnVuY3Rpb24oZSx0KXt2YXIg
bj11KGUsdCk7biYmbChlLG4pLGMoZSx0LG4pfSxkPXtkYW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0
aE1hcmt1cDpuLmRhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwLG1hbmFnZUNoaWxkcmVu
OnB9O3QuZXhwb3J0cz1kfSgpfSx7Ii4vRGFuZ2VyIjo5LCIuL2luc2VydE5vZGVBdCI6NzQsIi4v
a2V5T2YiOjc5LCIuL3Rocm93SWYiOjg2fV0sNzpbZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7
dmFyIG49ZSgiLi9pbnZhcmlhbnQiKSxyPXtNVVNUX1VTRV9BVFRSSUJVVEU6MSxNVVNUX1VTRV9Q
Uk9QRVJUWToyLEhBU19CT09MRUFOX1ZBTFVFOjQsSEFTX1NJREVfRUZGRUNUUzo4LGluamVjdERP
TVByb3BlcnR5Q29uZmlnOmZ1bmN0aW9uKGUpe3ZhciB0PWUuUHJvcGVydGllc3x8e30sbz1lLkRP
TUF0dHJpYnV0ZU5hbWVzfHx7fSxhPWUuRE9NUHJvcGVydHlOYW1lc3x8e30scz1lLkRPTU11dGF0
aW9uTWV0aG9kc3x8e307ZS5pc0N1c3RvbUF0dHJpYnV0ZSYmaS5faXNDdXN0b21BdHRyaWJ1dGVG
dW5jdGlvbnMucHVzaChlLmlzQ3VzdG9tQXR0cmlidXRlKTtmb3IodmFyIHUgaW4gdCl7bighaS5p
c1N0YW5kYXJkTmFtZVt1XSksaS5pc1N0YW5kYXJkTmFtZVt1XT0hMCxpLmdldEF0dHJpYnV0ZU5h
bWVbdV09b1t1XXx8dS50b0xvd2VyQ2FzZSgpLGkuZ2V0UHJvcGVydHlOYW1lW3VdPWFbdV18fHU7
dmFyIGw9c1t1XTtsJiYoaS5nZXRNdXRhdGlvbk1ldGhvZFt1XT1sKTt2YXIgYz10W3VdO2kubXVz
dFVzZUF0dHJpYnV0ZVt1XT1jJnIuTVVTVF9VU0VfQVRUUklCVVRFLGkubXVzdFVzZVByb3BlcnR5
W3VdPWMmci5NVVNUX1VTRV9QUk9QRVJUWSxpLmhhc0Jvb2xlYW5WYWx1ZVt1XT1jJnIuSEFTX0JP
T0xFQU5fVkFMVUUsaS5oYXNTaWRlRWZmZWN0c1t1XT1jJnIuSEFTX1NJREVfRUZGRUNUUyxuKCFp
Lm11c3RVc2VBdHRyaWJ1dGVbdV18fCFpLm11c3RVc2VQcm9wZXJ0eVt1XSksbihpLm11c3RVc2VQ
cm9wZXJ0eVt1XXx8IWkuaGFzU2lkZUVmZmVjdHNbdV0pfX19LG89e30saT17aXNTdGFuZGFyZE5h
bWU6e30sZ2V0QXR0cmlidXRlTmFtZTp7fSxnZXRQcm9wZXJ0eU5hbWU6e30sZ2V0TXV0YXRpb25N
ZXRob2Q6e30sbXVzdFVzZUF0dHJpYnV0ZTp7fSxtdXN0VXNlUHJvcGVydHk6e30saGFzQm9vbGVh
blZhbHVlOnt9LGhhc1NpZGVFZmZlY3RzOnt9LF9pc0N1c3RvbUF0dHJpYnV0ZUZ1bmN0aW9uczpb
XSxpc0N1c3RvbUF0dHJpYnV0ZTpmdW5jdGlvbihlKXtyZXR1cm4gaS5faXNDdXN0b21BdHRyaWJ1
dGVGdW5jdGlvbnMuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdC5jYWxsKG51bGwsZSl9KX0sZ2V0
RGVmYXVsdFZhbHVlRm9yUHJvcGVydHk6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPW9bZV07cmV0dXJu
IHJ8fChvW2VdPXI9e30pLHQgaW4gcnx8KG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlKSxyW3Rd
PW5bdF0pLHJbdF19LGluamVjdGlvbjpyfTt0LmV4cG9ydHM9aX0seyIuL2ludmFyaWFudCI6NzV9
XSw4OltmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuL0RPTVByb3BlcnR5Iiks
cj1lKCIuL2VzY2FwZVRleHRGb3JCcm93c2VyIiksbz1lKCIuL21lbW9pemVTdHJpbmdPbmx5Iiks
aT1vKGZ1bmN0aW9uKGUpe3JldHVybiByKGUpKyc9Iid9KSxhPXtjcmVhdGVNYXJrdXBGb3JQcm9w
ZXJ0eTpmdW5jdGlvbihlLHQpe2lmKG4uaXNTdGFuZGFyZE5hbWVbZV0pe2lmKG51bGw9PXR8fG4u
aGFzQm9vbGVhblZhbHVlW2VdJiYhdClyZXR1cm4iIjt2YXIgbz1uLmdldEF0dHJpYnV0ZU5hbWVb
ZV07cmV0dXJuIGkobykrcih0KSsnIid9cmV0dXJuIG4uaXNDdXN0b21BdHRyaWJ1dGUoZSk/bnVs
bD09dD8iIjppKGUpK3IodCkrJyInOm51bGx9LHNldFZhbHVlRm9yUHJvcGVydHk6ZnVuY3Rpb24o
ZSx0LHIpe2lmKG4uaXNTdGFuZGFyZE5hbWVbdF0pe3ZhciBvPW4uZ2V0TXV0YXRpb25NZXRob2Rb
dF07aWYobylvKGUscik7ZWxzZSBpZihuLm11c3RVc2VBdHRyaWJ1dGVbdF0pbi5oYXNCb29sZWFu
VmFsdWVbdF0mJiFyP2UucmVtb3ZlQXR0cmlidXRlKG4uZ2V0QXR0cmlidXRlTmFtZVt0XSk6ZS5z
ZXRBdHRyaWJ1dGUobi5nZXRBdHRyaWJ1dGVOYW1lW3RdLHIpO2Vsc2V7dmFyIGk9bi5nZXRQcm9w
ZXJ0eU5hbWVbdF07bi5oYXNTaWRlRWZmZWN0c1t0XSYmZVtpXT09PXJ8fChlW2ldPXIpfX1lbHNl
IG4uaXNDdXN0b21BdHRyaWJ1dGUodCkmJmUuc2V0QXR0cmlidXRlKHQscil9LGRlbGV0ZVZhbHVl
Rm9yUHJvcGVydHk6ZnVuY3Rpb24oZSx0KXtpZihuLmlzU3RhbmRhcmROYW1lW3RdKXt2YXIgcj1u
LmdldE11dGF0aW9uTWV0aG9kW3RdO2lmKHIpcihlLHZvaWQgMCk7ZWxzZSBpZihuLm11c3RVc2VB
dHRyaWJ1dGVbdF0pZS5yZW1vdmVBdHRyaWJ1dGUobi5nZXRBdHRyaWJ1dGVOYW1lW3RdKTtlbHNl
e3ZhciBvPW4uZ2V0UHJvcGVydHlOYW1lW3RdO2Vbb109bi5nZXREZWZhdWx0VmFsdWVGb3JQcm9w
ZXJ0eShlLm5vZGVOYW1lLHQpfX1lbHNlIG4uaXNDdXN0b21BdHRyaWJ1dGUodCkmJmUucmVtb3Zl
QXR0cmlidXRlKHQpfX07dC5leHBvcnRzPWF9LHsiLi9ET01Qcm9wZXJ0eSI6NywiLi9lc2NhcGVU
ZXh0Rm9yQnJvd3NlciI6NjUsIi4vbWVtb2l6ZVN0cmluZ09ubHkiOjgwfV0sOTpbZnVuY3Rpb24o
ZSx0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXt2YXIgdD11LG49ZS5zdWJzdHJpbmcoMSxl
LmluZGV4T2YoIiAiKSkscj1sW24udG9Mb3dlckNhc2UoKV18fGM7aWYocil7dC5pbm5lckhUTUw9
clsxXStlK3JbMl07Zm9yKHZhciBvPXJbMF07by0tOyl0PXQubGFzdENoaWxkfWVsc2UgdC5pbm5l
ckhUTUw9ZTtyZXR1cm4gdC5jaGlsZE5vZGVzfWZ1bmN0aW9uIHIoZSx0LG4pe3JldHVybiBuP24u
bmV4dFNpYmxpbmc/ZS5pbnNlcnRCZWZvcmUodCxuLm5leHRTaWJsaW5nKTplLmFwcGVuZENoaWxk
KHQpOmUuaW5zZXJ0QmVmb3JlKHQsZS5maXJzdENoaWxkKX1mdW5jdGlvbiBvKGUsdCxuKXtmb3Io
dmFyIG8saT10Lmxlbmd0aCxhPTA7aT5hO2ErKylvPXIoZSx0WzBdLG98fG4pfWZ1bmN0aW9uIGko
ZSx0LHIpe3ZhciBpPW4odCksYT1yP2UuY2hpbGROb2Rlc1tyLTFdOm51bGw7byhlLGksYSl9ZnVu
Y3Rpb24gYShlLHQpe3ZhciByPWUucGFyZW50Tm9kZSxvPW4odCk7ci5yZXBsYWNlQ2hpbGQob1sw
XSxlKX12YXIgcz1lKCIuL0V4ZWN1dGlvbkVudmlyb25tZW50Iik7ZSgiLi90aHJvd0lmIik7dmFy
IHU9cy5jYW5Vc2VET00/ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik6bnVsbCxsPXtvcHRp
b246WzEsJzxzZWxlY3QgbXVsdGlwbGU9InRydWUiPicsIjwvc2VsZWN0PiJdLGxlZ2VuZDpbMSwi
PGZpZWxkc2V0PiIsIjwvZmllbGRzZXQ+Il0sYXJlYTpbMSwiPG1hcD4iLCI8L21hcD4iXSxwYXJh
bTpbMSwiPG9iamVjdD4iLCI8L29iamVjdD4iXSx0aGVhZDpbMSwiPHRhYmxlPiIsIjwvdGFibGU+
Il0sdHI6WzIsIjx0YWJsZT48dGJvZHk+IiwiPC90Ym9keT48L3RhYmxlPiJdLGNvbDpbMiwiPHRh
YmxlPjx0Ym9keT48L3Rib2R5Pjxjb2xncm91cD4iLCI8L2NvbGdyb3VwPjwvdGFibGU+Il0sdGQ6
WzMsIjx0YWJsZT48dGJvZHk+PHRyPiIsIjwvdHI+PC90Ym9keT48L3RhYmxlPiJdfTtsLm9wdGdy
b3VwPWwub3B0aW9uLGwudGJvZHk9bC50aGVhZCxsLnRmb290PWwudGhlYWQsbC5jb2xncm91cD1s
LnRoZWFkLGwuY2FwdGlvbj1sLnRoZWFkLGwudGg9bC50ZDt2YXIgYz1bMSwiPzxkaXY+IiwiPC9k
aXY+Il07aWYodSl7Zm9yKHZhciBwIGluIGwpbC5oYXNPd25Qcm9wZXJ0eShwKSYmKHUuaW5uZXJI
VE1MPSI8IitwKyI+PC8iK3ArIj4iLHUuZmlyc3RDaGlsZCYmKGxbcF09bnVsbCkpO3UuaW5uZXJI
VE1MPSI8bGluayAvPiIsdS5maXJzdENoaWxkJiYoYz1udWxsKX12YXIgZD17ZGFuZ2Vyb3VzbHlJ
bnNlcnRNYXJrdXBBdDppLGRhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwOmF9O3QuZXhw
b3J0cz1kfSx7Ii4vRXhlY3V0aW9uRW52aXJvbm1lbnQiOjE5LCIuL3Rocm93SWYiOjg2fV0sMTA6
W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4vRE9NUHJvcGVydHkiKSxyPW4u
aW5qZWN0aW9uLk1VU1RfVVNFX0FUVFJJQlVURSxvPW4uaW5qZWN0aW9uLk1VU1RfVVNFX1BST1BF
UlRZLGk9bi5pbmplY3Rpb24uSEFTX0JPT0xFQU5fVkFMVUUsYT1uLmluamVjdGlvbi5IQVNfU0lE
RV9FRkZFQ1RTLHM9e2lzQ3VzdG9tQXR0cmlidXRlOlJlZ0V4cC5wcm90b3R5cGUudGVzdC5iaW5k
KC9eKGRhdGF8YXJpYSktW2Etel9dW2EtelxkXy5cLV0qJC8pLFByb3BlcnRpZXM6e2FjY2Vzc0tl
eTpudWxsLGFjY2VwdDpudWxsLGFjdGlvbjpudWxsLGFqYXhpZnk6cixhbGxvd0Z1bGxTY3JlZW46
cnxpLGFsdDpudWxsLGF1dG9Db21wbGV0ZTpudWxsLGF1dG9Gb2N1czppLGF1dG9QbGF5OmksY2Vs
bFBhZGRpbmc6bnVsbCxjZWxsU3BhY2luZzpudWxsLGNoZWNrZWQ6b3xpLGNsYXNzTmFtZTpvLGNv
bFNwYW46bnVsbCxjb250ZW50RWRpdGFibGU6bnVsbCxjb250ZXh0TWVudTpyLGNvbnRyb2xzOm98
aSxkYXRhOm51bGwsZGF0ZVRpbWU6cixkaXI6bnVsbCxkaXNhYmxlZDpvfGksZHJhZ2dhYmxlOm51
bGwsZW5jVHlwZTpudWxsLGhlaWdodDpyLGhpZGRlbjpyfGksaHJlZjpudWxsLGh0bWxGb3I6bnVs
bCxpY29uOm51bGwsaWQ6byxsYWJlbDpudWxsLGxhbmc6bnVsbCxsaXN0Om51bGwsbWF4Om51bGws
bWF4TGVuZ3RoOnIsbWV0aG9kOm51bGwsbWluOm51bGwsbXVsdGlwbGU6b3xpLG5hbWU6bnVsbCxw
YXR0ZXJuOm51bGwscG9zdGVyOm51bGwscHJlbG9hZDpudWxsLHBsYWNlaG9sZGVyOm51bGwscmFk
aW9Hcm91cDpudWxsLHJlbDpudWxsLHJlYWRPbmx5Om98aSxyZXF1aXJlZDppLHJvbGU6cixzY3Jv
bGxMZWZ0Om8sc2Nyb2xsVG9wOm8sc2VsZWN0ZWQ6b3xpLHNpemU6bnVsbCxzcGVsbENoZWNrOm51
bGwsc3JjOm51bGwsc3RlcDpudWxsLHN0eWxlOm51bGwsdGFiSW5kZXg6bnVsbCx0YXJnZXQ6bnVs
bCx0aXRsZTpudWxsLHR5cGU6bnVsbCx2YWx1ZTpvfGEsd2lkdGg6cix3bW9kZTpyLGN4Om8sY3k6
byxkOm8sZmlsbDpvLGZ4Om8sZnk6byxwb2ludHM6byxyOm8sc3Ryb2tlOm8sc3Ryb2tlTGluZWNh
cDpvLHN0cm9rZVdpZHRoOm8sdHJhbnNmb3JtOm8seDpvLHgxOm8seDI6byx2ZXJzaW9uOm8sdmll
d0JveDpvLHk6byx5MTpvLHkyOm8sc3ByZWFkTWV0aG9kOm8sb2Zmc2V0Om8sc3RvcENvbG9yOm8s
c3RvcE9wYWNpdHk6byxncmFkaWVudFVuaXRzOm8sZ3JhZGllbnRUcmFuc2Zvcm06b30sRE9NQXR0
cmlidXRlTmFtZXM6e2NsYXNzTmFtZToiY2xhc3MiLGh0bWxGb3I6ImZvciIsc3Ryb2tlTGluZWNh
cDoic3Ryb2tlLWxpbmVjYXAiLHN0cm9rZVdpZHRoOiJzdHJva2Utd2lkdGgiLHN0b3BDb2xvcjoi
c3RvcC1jb2xvciIsc3RvcE9wYWNpdHk6InN0b3Atb3BhY2l0eSJ9LERPTVByb3BlcnR5TmFtZXM6
e2F1dG9Db21wbGV0ZToiYXV0b2NvbXBsZXRlIixhdXRvRm9jdXM6ImF1dG9mb2N1cyIsYXV0b1Bs
YXk6ImF1dG9wbGF5IixlbmNUeXBlOiJlbmN0eXBlIixyYWRpb0dyb3VwOiJyYWRpb2dyb3VwIixz
cGVsbENoZWNrOiJzcGVsbGNoZWNrIn0sRE9NTXV0YXRpb25NZXRob2RzOntjbGFzc05hbWU6ZnVu
Y3Rpb24oZSx0KXtlLmNsYXNzTmFtZT10fHwiIn19fTt0LmV4cG9ydHM9c30seyIuL0RPTVByb3Bl
cnR5Ijo3fV0sMTE6W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4va2V5T2Yi
KSxyPVtuKHtSZXNwb25kZXJFdmVudFBsdWdpbjpudWxsfSksbih7U2ltcGxlRXZlbnRQbHVnaW46
bnVsbH0pLG4oe1RhcEV2ZW50UGx1Z2luOm51bGx9KSxuKHtFbnRlckxlYXZlRXZlbnRQbHVnaW46
bnVsbH0pLG4oe0NoYW5nZUV2ZW50UGx1Z2luOm51bGx9KSxuKHtBbmFseXRpY3NFdmVudFBsdWdp
bjpudWxsfSldO3QuZXhwb3J0cz1yfSx7Ii4va2V5T2YiOjc5fV0sMTI6W2Z1bmN0aW9uKGUsdCl7
IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4vRXZlbnRDb25zdGFudHMiKSxyPWUo
Ii4vRXZlbnRQcm9wYWdhdG9ycyIpLG89ZSgiLi9FeGVjdXRpb25FbnZpcm9ubWVudCIpLGk9ZSgi
Li9SZWFjdEluc3RhbmNlSGFuZGxlcyIpLGE9ZSgiLi9TeW50aGV0aWNNb3VzZUV2ZW50Iikscz1l
KCIuL1JlYWN0SUQiKSx1PWUoIi4va2V5T2YiKSxsPW4udG9wTGV2ZWxUeXBlcyxjPWkuZ2V0Rmly
c3RSZWFjdERPTSxwPXttb3VzZUVudGVyOntyZWdpc3RyYXRpb25OYW1lOnUoe29uTW91c2VFbnRl
cjpudWxsfSl9LG1vdXNlTGVhdmU6e3JlZ2lzdHJhdGlvbk5hbWU6dSh7b25Nb3VzZUxlYXZlOm51
bGx9KX19LGQ9e2V2ZW50VHlwZXM6cCxleHRyYWN0RXZlbnRzOmZ1bmN0aW9uKGUsdCxuLGkpe2lm
KGU9PT1sLnRvcE1vdXNlT3ZlciYmKGkucmVsYXRlZFRhcmdldHx8aS5mcm9tRWxlbWVudCkpcmV0
dXJuIG51bGw7aWYoZSE9PWwudG9wTW91c2VPdXQmJmUhPT1sLnRvcE1vdXNlT3ZlcilyZXR1cm4g
bnVsbDt2YXIgdSxkO2lmKGU9PT1sLnRvcE1vdXNlT3V0Pyh1PXQsZD1jKGkucmVsYXRlZFRhcmdl
dHx8aS50b0VsZW1lbnQpfHxvLmdsb2JhbCk6KHU9by5nbG9iYWwsZD10KSx1PT09ZClyZXR1cm4g
bnVsbDt2YXIgaD11P3MuZ2V0SUQodSk6IiIsZj1kP3MuZ2V0SUQoZCk6IiIsdj1hLmdldFBvb2xl
ZChwLm1vdXNlTGVhdmUsaCxpKSxtPWEuZ2V0UG9vbGVkKHAubW91c2VFbnRlcixmLGkpO3JldHVy
biByLmFjY3VtdWxhdGVFbnRlckxlYXZlRGlzcGF0Y2hlcyh2LG0saCxmKSxbdixtXX19O3QuZXhw
b3J0cz1kfSgpfSx7Ii4vRXZlbnRDb25zdGFudHMiOjEzLCIuL0V2ZW50UHJvcGFnYXRvcnMiOjE4
LCIuL0V4ZWN1dGlvbkVudmlyb25tZW50IjoxOSwiLi9SZWFjdElEIjozNSwiLi9SZWFjdEluc3Rh
bmNlSGFuZGxlcyI6MzcsIi4vU3ludGhldGljTW91c2VFdmVudCI6NTMsIi4va2V5T2YiOjc5fV0s
MTM6W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4va2V5TWlycm9yIikscj1u
KHtidWJibGVkOm51bGwsY2FwdHVyZWQ6bnVsbH0pLG89bih7dG9wQmx1cjpudWxsLHRvcENoYW5n
ZTpudWxsLHRvcENsaWNrOm51bGwsdG9wRE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVkOm51bGwsdG9w
RG91YmxlQ2xpY2s6bnVsbCx0b3BEcmFnOm51bGwsdG9wRHJhZ0VuZDpudWxsLHRvcERyYWdFbnRl
cjpudWxsLHRvcERyYWdFeGl0Om51bGwsdG9wRHJhZ0xlYXZlOm51bGwsdG9wRHJhZ092ZXI6bnVs
bCx0b3BEcmFnU3RhcnQ6bnVsbCx0b3BEcm9wOm51bGwsdG9wRm9jdXM6bnVsbCx0b3BJbnB1dDpu
dWxsLHRvcEtleURvd246bnVsbCx0b3BLZXlQcmVzczpudWxsLHRvcEtleVVwOm51bGwsdG9wTW91
c2VEb3duOm51bGwsdG9wTW91c2VNb3ZlOm51bGwsdG9wTW91c2VPdXQ6bnVsbCx0b3BNb3VzZU92
ZXI6bnVsbCx0b3BNb3VzZVVwOm51bGwsdG9wU2Nyb2xsOm51bGwsdG9wU2VsZWN0aW9uQ2hhbmdl
Om51bGwsdG9wU3VibWl0Om51bGwsdG9wVG91Y2hDYW5jZWw6bnVsbCx0b3BUb3VjaEVuZDpudWxs
LHRvcFRvdWNoTW92ZTpudWxsLHRvcFRvdWNoU3RhcnQ6bnVsbCx0b3BXaGVlbDpudWxsfSksaT17
dG9wTGV2ZWxUeXBlczpvLFByb3BhZ2F0aW9uUGhhc2VzOnJ9O3QuZXhwb3J0cz1pfSx7Ii4va2V5
TWlycm9yIjo3OH1dLDE0OltmdW5jdGlvbihlLHQpe3ZhciBuPXtsaXN0ZW46ZnVuY3Rpb24oZSx0
LG4pe2UuYWRkRXZlbnRMaXN0ZW5lcj9lLmFkZEV2ZW50TGlzdGVuZXIodCxuLCExKTplLmF0dGFj
aEV2ZW50JiZlLmF0dGFjaEV2ZW50KCJvbiIrdCxuKX0sY2FwdHVyZTpmdW5jdGlvbihlLHQsbil7
ZS5hZGRFdmVudExpc3RlbmVyJiZlLmFkZEV2ZW50TGlzdGVuZXIodCxuLCEwKX19O3QuZXhwb3J0
cz1ufSx7fV0sMTU6W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4vQ2FsbGJh
Y2tSZWdpc3RyeSIpLHI9ZSgiLi9FdmVudFBsdWdpblJlZ2lzdHJ5Iiksbz1lKCIuL0V2ZW50UGx1
Z2luVXRpbHMiKSxpPWUoIi4vRXZlbnRQcm9wYWdhdG9ycyIpLGE9ZSgiLi9FeGVjdXRpb25FbnZp
cm9ubWVudCIpLHM9ZSgiLi9hY2N1bXVsYXRlIiksdT1lKCIuL2ZvckVhY2hBY2N1bXVsYXRlZCIp
LGw9ZSgiLi9pbnZhcmlhbnQiKSxjPW51bGwscD1mdW5jdGlvbihlKXtpZihlKXt2YXIgdD1vLmV4
ZWN1dGVEaXNwYXRjaCxuPXIuZ2V0UGx1Z2luTW9kdWxlRm9yRXZlbnQoZSk7biYmbi5leGVjdXRl
RGlzcGF0Y2gmJih0PW4uZXhlY3V0ZURpc3BhdGNoKSxvLmV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRl
cihlLHQpLGUuaXNQZXJzaXN0ZW50KCl8fGUuY29uc3RydWN0b3IucmVsZWFzZShlKX19LGQ9e2lu
amVjdGlvbjp7aW5qZWN0SW5zdGFuY2VIYW5kbGU6aS5pbmplY3Rpb24uaW5qZWN0SW5zdGFuY2VI
YW5kbGUsaW5qZWN0RXZlbnRQbHVnaW5PcmRlcjpyLmluamVjdEV2ZW50UGx1Z2luT3JkZXIsaW5q
ZWN0RXZlbnRQbHVnaW5zQnlOYW1lOnIuaW5qZWN0RXZlbnRQbHVnaW5zQnlOYW1lfSxyZWdpc3Ry
YXRpb25OYW1lczpyLnJlZ2lzdHJhdGlvbk5hbWVzLHB1dExpc3RlbmVyOm4ucHV0TGlzdGVuZXIs
Z2V0TGlzdGVuZXI6bi5nZXRMaXN0ZW5lcixkZWxldGVMaXN0ZW5lcjpuLmRlbGV0ZUxpc3RlbmVy
LGRlbGV0ZUFsbExpc3RlbmVyczpuLmRlbGV0ZUFsbExpc3RlbmVycyxleHRyYWN0RXZlbnRzOmZ1
bmN0aW9uKGUsdCxuLG8pe2Zvcih2YXIgaSxhPXIucGx1Z2lucyx1PTAsbD1hLmxlbmd0aDtsPnU7
dSsrKXt2YXIgYz1hW3VdO2lmKGMpe3ZhciBwPWMuZXh0cmFjdEV2ZW50cyhlLHQsbixvKTtwJiYo
aT1zKGkscCkpfX1yZXR1cm4gaX0sZW5xdWV1ZUV2ZW50czpmdW5jdGlvbihlKXtlJiYoYz1zKGMs
ZSkpfSxwcm9jZXNzRXZlbnRRdWV1ZTpmdW5jdGlvbigpe3ZhciBlPWM7Yz1udWxsLHUoZSxwKSxs
KCFjKX19O2EuY2FuVXNlRE9NJiYod2luZG93LkV2ZW50UGx1Z2luSHViPWQpLHQuZXhwb3J0cz1k
fSx7Ii4vQ2FsbGJhY2tSZWdpc3RyeSI6NCwiLi9FdmVudFBsdWdpblJlZ2lzdHJ5IjoxNiwiLi9F
dmVudFBsdWdpblV0aWxzIjoxNywiLi9FdmVudFByb3BhZ2F0b3JzIjoxOCwiLi9FeGVjdXRpb25F
bnZpcm9ubWVudCI6MTksIi4vYWNjdW11bGF0ZSI6NjAsIi4vZm9yRWFjaEFjY3VtdWxhdGVkIjo2
OCwiLi9pbnZhcmlhbnQiOjc1fV0sMTY6W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO2Z1bmN0
aW9uIG4oKXtpZihhKWZvcih2YXIgZSBpbiBzKXt2YXIgdD1zW2VdLG49YS5pbmRleE9mKGUpO2lm
KGkobj4tMSksIXUucGx1Z2luc1tuXSl7aSh0LmV4dHJhY3RFdmVudHMpLHUucGx1Z2luc1tuXT10
O3ZhciBvPXQuZXZlbnRUeXBlcztmb3IodmFyIGwgaW4gbylpKHIob1tsXSx0KSl9fX1mdW5jdGlv
biByKGUsdCl7dmFyIG49ZS5waGFzZWRSZWdpc3RyYXRpb25OYW1lcztpZihuKXtmb3IodmFyIHIg
aW4gbilpZihuLmhhc093blByb3BlcnR5KHIpKXt2YXIgaT1uW3JdO28oaSx0KX1yZXR1cm4hMH1y
ZXR1cm4gZS5yZWdpc3RyYXRpb25OYW1lPyhvKGUucmVnaXN0cmF0aW9uTmFtZSx0KSwhMCk6ITF9
ZnVuY3Rpb24gbyhlLHQpe2koIXUucmVnaXN0cmF0aW9uTmFtZXNbZV0pLHUucmVnaXN0cmF0aW9u
TmFtZXNbZV09dCx1LnJlZ2lzdHJhdGlvbk5hbWVzS2V5cy5wdXNoKGUpfXZhciBpPWUoIi4vaW52
YXJpYW50IiksYT1udWxsLHM9e30sdT17cGx1Z2luczpbXSxyZWdpc3RyYXRpb25OYW1lczp7fSxy
ZWdpc3RyYXRpb25OYW1lc0tleXM6W10saW5qZWN0RXZlbnRQbHVnaW5PcmRlcjpmdW5jdGlvbihl
KXtpKCFhKSxhPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUpLG4oKX0saW5qZWN0RXZlbnRQ
bHVnaW5zQnlOYW1lOmZ1bmN0aW9uKGUpe3ZhciB0PSExO2Zvcih2YXIgciBpbiBlKWlmKGUuaGFz
T3duUHJvcGVydHkocikpe3ZhciBvPWVbcl07c1tyXSE9PW8mJihpKCFzW3JdKSxzW3JdPW8sdD0h
MCl9dCYmbigpfSxnZXRQbHVnaW5Nb2R1bGVGb3JFdmVudDpmdW5jdGlvbihlKXt2YXIgdD1lLmRp
c3BhdGNoQ29uZmlnO2lmKHQucmVnaXN0cmF0aW9uTmFtZSlyZXR1cm4gdS5yZWdpc3RyYXRpb25O
YW1lc1t0LnJlZ2lzdHJhdGlvbk5hbWVdfHxudWxsO2Zvcih2YXIgbiBpbiB0LnBoYXNlZFJlZ2lz
dHJhdGlvbk5hbWVzKWlmKHQucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMuaGFzT3duUHJvcGVydHko
bikpe3ZhciByPXUucmVnaXN0cmF0aW9uTmFtZXNbdC5waGFzZWRSZWdpc3RyYXRpb25OYW1lc1tu
XV07aWYocilyZXR1cm4gcn1yZXR1cm4gbnVsbH0sX3Jlc2V0RXZlbnRQbHVnaW5zOmZ1bmN0aW9u
KCl7YT1udWxsO2Zvcih2YXIgZSBpbiBzKXMuaGFzT3duUHJvcGVydHkoZSkmJmRlbGV0ZSBzW2Vd
O3UucGx1Z2lucy5sZW5ndGg9MDt2YXIgdD11LnJlZ2lzdHJhdGlvbk5hbWVzO2Zvcih2YXIgbiBp
biB0KXQuaGFzT3duUHJvcGVydHkobikmJmRlbGV0ZSB0W25dO3UucmVnaXN0cmF0aW9uTmFtZXNL
ZXlzLmxlbmd0aD0wfX07dC5leHBvcnRzPXV9LHsiLi9pbnZhcmlhbnQiOjc1fV0sMTc6W2Z1bmN0
aW9uKGUsdCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGU9PT1oLnRvcE1vdXNl
VXB8fGU9PT1oLnRvcFRvdWNoRW5kfHxlPT09aC50b3BUb3VjaENhbmNlbH1mdW5jdGlvbiByKGUp
e3JldHVybiBlPT09aC50b3BNb3VzZU1vdmV8fGU9PT1oLnRvcFRvdWNoTW92ZX1mdW5jdGlvbiBv
KGUpe3JldHVybiBlPT09aC50b3BNb3VzZURvd258fGU9PT1oLnRvcFRvdWNoU3RhcnR9ZnVuY3Rp
b24gaShlLHQpe3ZhciBuPWUuX2Rpc3BhdGNoTGlzdGVuZXJzLHI9ZS5fZGlzcGF0Y2hJRHM7aWYo
QXJyYXkuaXNBcnJheShuKSlmb3IodmFyIG89MDtvPG4ubGVuZ3RoJiYhZS5pc1Byb3BhZ2F0aW9u
U3RvcHBlZCgpO28rKyl0KGUsbltvXSxyW29dKTtlbHNlIG4mJnQoZSxuLHIpfWZ1bmN0aW9uIGEo
ZSx0LG4pe3QoZSxuKX1mdW5jdGlvbiBzKGUsdCl7aShlLHQpLGUuX2Rpc3BhdGNoTGlzdGVuZXJz
PW51bGwsZS5fZGlzcGF0Y2hJRHM9bnVsbH1mdW5jdGlvbiB1KGUpe3ZhciB0PWUuX2Rpc3BhdGNo
TGlzdGVuZXJzLG49ZS5fZGlzcGF0Y2hJRHM7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHZhciBy
PTA7cjx0Lmxlbmd0aCYmIWUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTtyKyspaWYodFtyXShlLG5b
cl0pKXJldHVybiBuW3JdfWVsc2UgaWYodCYmdChlLG4pKXJldHVybiBuO3JldHVybiBudWxsfWZ1
bmN0aW9uIGwoZSl7dmFyIHQ9ZS5fZGlzcGF0Y2hMaXN0ZW5lcnMsbj1lLl9kaXNwYXRjaElEcztk
KCFBcnJheS5pc0FycmF5KHQpKTt2YXIgcj10P3QoZSxuKTpudWxsO3JldHVybiBlLl9kaXNwYXRj
aExpc3RlbmVycz1udWxsLGUuX2Rpc3BhdGNoSURzPW51bGwscn1mdW5jdGlvbiBjKGUpe3JldHVy
biEhZS5fZGlzcGF0Y2hMaXN0ZW5lcnN9dmFyIHA9ZSgiLi9FdmVudENvbnN0YW50cyIpLGQ9ZSgi
Li9pbnZhcmlhbnQiKSxoPXAudG9wTGV2ZWxUeXBlcyxmPXtpc0VuZGlzaDpuLGlzTW92ZWlzaDpy
LGlzU3RhcnRpc2g6byxleGVjdXRlRGlzcGF0Y2hlc0luT3JkZXI6cyxleGVjdXRlRGlzcGF0Y2hl
c0luT3JkZXJTdG9wQXRUcnVlOnUsZXhlY3V0ZURpcmVjdERpc3BhdGNoOmwsaGFzRGlzcGF0Y2hl
czpjLGV4ZWN1dGVEaXNwYXRjaDphfTt0LmV4cG9ydHM9Zn0seyIuL0V2ZW50Q29uc3RhbnRzIjox
MywiLi9pbnZhcmlhbnQiOjc1fV0sMTg6W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO2Z1bmN0
aW9uIG4oZSx0LG4pe3ZhciByPXQuZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFt
ZXNbbl07cmV0dXJuIGYoZSxyKX1mdW5jdGlvbiByKGUsdCxyKXt2YXIgbz10P3YuYnViYmxlZDp2
LmNhcHR1cmVkLGk9bihlLHIsbyk7aSYmKHIuX2Rpc3BhdGNoTGlzdGVuZXJzPWQoci5fZGlzcGF0
Y2hMaXN0ZW5lcnMsaSksci5fZGlzcGF0Y2hJRHM9ZChyLl9kaXNwYXRjaElEcyxlKSl9ZnVuY3Rp
b24gbyhlKXtlJiZlLmRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzJiZtLklu
c3RhbmNlSGFuZGxlLnRyYXZlcnNlVHdvUGhhc2UoZS5kaXNwYXRjaE1hcmtlcixyLGUpfWZ1bmN0
aW9uIGkoZSx0LG4pe2lmKG4mJm4uZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZSl7dmFy
IHI9bi5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lLG89ZihlLHIpO28mJihuLl9kaXNw
YXRjaExpc3RlbmVycz1kKG4uX2Rpc3BhdGNoTGlzdGVuZXJzLG8pLG4uX2Rpc3BhdGNoSURzPWQo
bi5fZGlzcGF0Y2hJRHMsZSkpfX1mdW5jdGlvbiBhKGUpe2UmJmUuZGlzcGF0Y2hDb25maWcucmVn
aXN0cmF0aW9uTmFtZSYmaShlLmRpc3BhdGNoTWFya2VyLG51bGwsZSl9ZnVuY3Rpb24gcyhlKXto
KGUsbyl9ZnVuY3Rpb24gdShlLHQsbixyKXttLkluc3RhbmNlSGFuZGxlLnRyYXZlcnNlRW50ZXJM
ZWF2ZShuLHIsaSxlLHQpfWZ1bmN0aW9uIGwoZSl7aChlLGEpfXZhciBjPWUoIi4vQ2FsbGJhY2tS
ZWdpc3RyeSIpLHA9ZSgiLi9FdmVudENvbnN0YW50cyIpLGQ9ZSgiLi9hY2N1bXVsYXRlIiksaD1l
KCIuL2ZvckVhY2hBY2N1bXVsYXRlZCIpLGY9Yy5nZXRMaXN0ZW5lcix2PXAuUHJvcGFnYXRpb25Q
aGFzZXMsbT17SW5zdGFuY2VIYW5kbGU6bnVsbCxpbmplY3RJbnN0YW5jZUhhbmRsZTpmdW5jdGlv
bihlKXttLkluc3RhbmNlSGFuZGxlPWV9LHZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGU9IW0uSW5z
dGFuY2VIYW5kbGV8fCFtLkluc3RhbmNlSGFuZGxlLnRyYXZlcnNlVHdvUGhhc2V8fCFtLkluc3Rh
bmNlSGFuZGxlLnRyYXZlcnNlRW50ZXJMZWF2ZTtpZihlKXRocm93IG5ldyBFcnJvcigiSW5zdGFu
Y2VIYW5kbGUgbm90IGluamVjdGVkIGJlZm9yZSB1c2UhIil9fSxnPXthY2N1bXVsYXRlVHdvUGhh
c2VEaXNwYXRjaGVzOnMsYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXM6bCxhY2N1bXVsYXRlRW50
ZXJMZWF2ZURpc3BhdGNoZXM6dSxpbmplY3Rpb246bX07dC5leHBvcnRzPWd9LHsiLi9DYWxsYmFj
a1JlZ2lzdHJ5Ijo0LCIuL0V2ZW50Q29uc3RhbnRzIjoxMywiLi9hY2N1bXVsYXRlIjo2MCwiLi9m
b3JFYWNoQWNjdW11bGF0ZWQiOjY4fV0sMTk6W2Z1bmN0aW9uKGUsdCl7IWZ1bmN0aW9uKCl7InVz
ZSBzdHJpY3QiO3ZhciBlPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93LG49e2NhblVzZURPTTpl
LGNhblVzZVdvcmtlcnM6InVuZGVmaW5lZCIhPXR5cGVvZiBXb3JrZXIsaXNJbldvcmtlcjohZSxn
bG9iYWw6bmV3IEZ1bmN0aW9uKCJyZXR1cm4gdGhpczsiKSgpfTt0LmV4cG9ydHM9bn0oKX0se31d
LDIwOltmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1mdW5jdGlvbihlKXt2YXIgdD10
aGlzO2lmKHQuaW5zdGFuY2VQb29sLmxlbmd0aCl7dmFyIG49dC5pbnN0YW5jZVBvb2wucG9wKCk7
cmV0dXJuIHQuY2FsbChuLGUpLG59cmV0dXJuIG5ldyB0KGUpfSxyPWZ1bmN0aW9uKGUsdCl7dmFy
IG49dGhpcztpZihuLmluc3RhbmNlUG9vbC5sZW5ndGgpe3ZhciByPW4uaW5zdGFuY2VQb29sLnBv
cCgpO3JldHVybiBuLmNhbGwocixlLHQpLHJ9cmV0dXJuIG5ldyBuKGUsdCl9LG89ZnVuY3Rpb24o
ZSx0LG4pe3ZhciByPXRoaXM7aWYoci5pbnN0YW5jZVBvb2wubGVuZ3RoKXt2YXIgbz1yLmluc3Rh
bmNlUG9vbC5wb3AoKTtyZXR1cm4gci5jYWxsKG8sZSx0LG4pLG99cmV0dXJuIG5ldyByKGUsdCxu
KX0saT1mdW5jdGlvbihlLHQsbixyLG8pe3ZhciBpPXRoaXM7aWYoaS5pbnN0YW5jZVBvb2wubGVu
Z3RoKXt2YXIgYT1pLmluc3RhbmNlUG9vbC5wb3AoKTtyZXR1cm4gaS5jYWxsKGEsZSx0LG4scixv
KSxhfXJldHVybiBuZXcgaShlLHQsbixyLG8pfSxhPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7ZS5k
ZXN0cnVjdG9yJiZlLmRlc3RydWN0b3IoKSx0Lmluc3RhbmNlUG9vbC5sZW5ndGg8dC5wb29sU2l6
ZSYmdC5pbnN0YW5jZVBvb2wucHVzaChlKX0scz0xMCx1PW4sbD1mdW5jdGlvbihlLHQpe3ZhciBu
PWU7cmV0dXJuIG4uaW5zdGFuY2VQb29sPVtdLG4uZ2V0UG9vbGVkPXR8fHUsbi5wb29sU2l6ZXx8
KG4ucG9vbFNpemU9cyksbi5yZWxlYXNlPWEsbn0sYz17YWRkUG9vbGluZ1RvOmwsb25lQXJndW1l
bnRQb29sZXI6bix0d29Bcmd1bWVudFBvb2xlcjpyLHRocmVlQXJndW1lbnRQb29sZXI6byxmaXZl
QXJndW1lbnRQb29sZXI6aX07dC5leHBvcnRzPWN9LHt9XSwyMTpbZnVuY3Rpb24oZSx0KXsidXNl
IHN0cmljdCI7dmFyIG49ZSgiLi9SZWFjdENvbXBvc2l0ZUNvbXBvbmVudCIpLHI9ZSgiLi9SZWFj
dENvbXBvbmVudCIpLG89ZSgiLi9SZWFjdERPTSIpLGk9ZSgiLi9SZWFjdE1vdW50IiksYT1lKCIu
L1JlYWN0UHJvcFR5cGVzIikscz1lKCIuL1JlYWN0U2VydmVyUmVuZGVyaW5nIiksdT1lKCIuL1Jl
YWN0RGVmYXVsdEluamVjdGlvbiIpO3UuaW5qZWN0KCk7dmFyIGw9e0RPTTpvLFByb3BUeXBlczph
LGluaXRpYWxpemVUb3VjaEV2ZW50czpmdW5jdGlvbihlKXtpLnVzZVRvdWNoRXZlbnRzPWV9LGF1
dG9CaW5kOm4uYXV0b0JpbmQsY3JlYXRlQ2xhc3M6bi5jcmVhdGVDbGFzcyxjb25zdHJ1Y3RBbmRS
ZW5kZXJDb21wb25lbnQ6aS5jb25zdHJ1Y3RBbmRSZW5kZXJDb21wb25lbnQsY29uc3RydWN0QW5k
UmVuZGVyQ29tcG9uZW50QnlJRDppLmNvbnN0cnVjdEFuZFJlbmRlckNvbXBvbmVudEJ5SUQscmVu
ZGVyQ29tcG9uZW50OmkucmVuZGVyQ29tcG9uZW50LHJlbmRlckNvbXBvbmVudFRvU3RyaW5nOnMu
cmVuZGVyQ29tcG9uZW50VG9TdHJpbmcsdW5tb3VudEFuZFJlbGVhc2VSZWFjdFJvb3ROb2RlOmku
dW5tb3VudEFuZFJlbGVhc2VSZWFjdFJvb3ROb2RlLGlzVmFsaWRDb21wb25lbnQ6ci5pc1ZhbGlk
Q29tcG9uZW50fTt0LmV4cG9ydHM9bH0seyIuL1JlYWN0Q29tcG9uZW50IjoyMiwiLi9SZWFjdENv
bXBvc2l0ZUNvbXBvbmVudCI6MjMsIi4vUmVhY3RET00iOjI1LCIuL1JlYWN0RGVmYXVsdEluamVj
dGlvbiI6MzIsIi4vUmVhY3RNb3VudCI6MzgsIi4vUmVhY3RQcm9wVHlwZXMiOjQ0LCIuL1JlYWN0
U2VydmVyUmVuZGVyaW5nIjo0Nn1dLDIyOltmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIg
bj1lKCIuL1JlYWN0Q3VycmVudE93bmVyIikscj1lKCIuL1JlYWN0RE9NSURPcGVyYXRpb25zIiks
bz1lKCIuL1JlYWN0SUQiKSxpPWUoIi4vUmVhY3RNb3VudCIpLGE9ZSgiLi9SZWFjdE93bmVyIiks
cz1lKCIuL1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24iKSx1PWUoIi4vUmVhY3RVcGRhdGVzIiks
bD1lKCIuL2ludmFyaWFudCIpLGM9ZSgiLi9rZXlNaXJyb3IiKSxwPWUoIi4vbWVyZ2UiKSxkPSJ7
b3duZXJ9IixoPWMoe01PVU5URUQ6bnVsbCxVTk1PVU5URUQ6bnVsbH0pLGY9e2lzVmFsaWRDb21w
b25lbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuISghZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIGUubW91bnRD
b21wb25lbnRJbnRvTm9kZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIGUucmVjZWl2ZVByb3BzKX0sZ2V0
S2V5OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUucHJvcHMmJm51bGwhPWUucHJvcHMua2V5PyIi
K2UucHJvcHMua2V5OiIiK3R9LExpZmVDeWNsZTpoLERPTUlET3BlcmF0aW9uczpyLFJlYWN0UmVj
b25jaWxlVHJhbnNhY3Rpb246cyxzZXRET01PcGVyYXRpb25zOmZ1bmN0aW9uKGUpe2YuRE9NSURP
cGVyYXRpb25zPWV9LHNldFJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb246ZnVuY3Rpb24oZSl7Zi5S
ZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uPWV9LE1peGluOntpc01vdW50ZWQ6ZnVuY3Rpb24oKXty
ZXR1cm4gdGhpcy5fbGlmZUN5Y2xlU3RhdGU9PT1oLk1PVU5URUR9LGdldERPTU5vZGU6ZnVuY3Rp
b24oKXtyZXR1cm4gbCh0aGlzLmlzTW91bnRlZCgpKSxvLmdldE5vZGUodGhpcy5fcm9vdE5vZGVJ
RCl9LHNldFByb3BzOmZ1bmN0aW9uKGUsdCl7dGhpcy5yZXBsYWNlUHJvcHMocCh0aGlzLl9wZW5k
aW5nUHJvcHN8fHRoaXMucHJvcHMsZSksdCl9LHJlcGxhY2VQcm9wczpmdW5jdGlvbihlLHQpe2wo
IXRoaXMucHJvcHNbZF0pLHRoaXMuX3BlbmRpbmdQcm9wcz1lLHUuZW5xdWV1ZVVwZGF0ZSh0aGlz
LHQpfSxjb25zdHJ1Y3Q6ZnVuY3Rpb24oZSx0KXt0aGlzLnByb3BzPWV8fHt9LHRoaXMucHJvcHNb
ZF09bi5jdXJyZW50LHRoaXMuX2xpZmVDeWNsZVN0YXRlPWguVU5NT1VOVEVELHRoaXMuX3BlbmRp
bmdQcm9wcz1udWxsLHRoaXMuX3BlbmRpbmdDYWxsYmFja3M9bnVsbDt2YXIgcj1hcmd1bWVudHMu
bGVuZ3RoLTE7aWYoMT09PXIpdGhpcy5wcm9wcy5jaGlsZHJlbj10O2Vsc2UgaWYocj4xKXtmb3Io
dmFyIG89QXJyYXkociksaT0wO3I+aTtpKyspb1tpXT1hcmd1bWVudHNbaSsxXTt0aGlzLnByb3Bz
LmNoaWxkcmVuPW99fSxtb3VudENvbXBvbmVudDpmdW5jdGlvbihlKXtsKCF0aGlzLmlzTW91bnRl
ZCgpKTt2YXIgdD10aGlzLnByb3BzO251bGwhPXQucmVmJiZhLmFkZENvbXBvbmVudEFzUmVmVG8o
dGhpcyx0LnJlZix0W2RdKSx0aGlzLl9yb290Tm9kZUlEPWUsdGhpcy5fbGlmZUN5Y2xlU3RhdGU9
aC5NT1VOVEVEfSx1bm1vdW50Q29tcG9uZW50OmZ1bmN0aW9uKCl7bCh0aGlzLmlzTW91bnRlZCgp
KTt2YXIgZT10aGlzLnByb3BzO251bGwhPWUucmVmJiZhLnJlbW92ZUNvbXBvbmVudEFzUmVmRnJv
bSh0aGlzLGUucmVmLGVbZF0pLG8ucHVyZ2VJRCh0aGlzLl9yb290Tm9kZUlEKSx0aGlzLl9yb290
Tm9kZUlEPW51bGwsdGhpcy5fbGlmZUN5Y2xlU3RhdGU9aC5VTk1PVU5URUR9LHJlY2VpdmVQcm9w
czpmdW5jdGlvbihlLHQpe2wodGhpcy5pc01vdW50ZWQoKSksdGhpcy5fcGVuZGluZ1Byb3BzPWUs
dGhpcy5fcGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5KHQpfSxwZXJmb3JtVXBkYXRlSWZOZWNlc3Nh
cnk6ZnVuY3Rpb24oKXt2YXIgZT1mLlJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24uZ2V0UG9vbGVk
KCk7ZS5wZXJmb3JtKHRoaXMuX3BlcmZvcm1VcGRhdGVJZk5lY2Vzc2FyeSx0aGlzLGUpLGYuUmVh
Y3RSZWNvbmNpbGVUcmFuc2FjdGlvbi5yZWxlYXNlKGUpfSxfcGVyZm9ybVVwZGF0ZUlmTmVjZXNz
YXJ5OmZ1bmN0aW9uKGUpe2lmKG51bGwhPXRoaXMuX3BlbmRpbmdQcm9wcyl7dmFyIHQ9dGhpcy5w
cm9wczt0aGlzLnByb3BzPXRoaXMuX3BlbmRpbmdQcm9wcyx0aGlzLl9wZW5kaW5nUHJvcHM9bnVs
bCx0aGlzLnVwZGF0ZUNvbXBvbmVudChlLHQpfX0sdXBkYXRlQ29tcG9uZW50OmZ1bmN0aW9uKGUs
dCl7dmFyIG49dGhpcy5wcm9wczsobltkXSE9PXRbZF18fG4ucmVmIT09dC5yZWYpJiYobnVsbCE9
dC5yZWYmJmEucmVtb3ZlQ29tcG9uZW50QXNSZWZGcm9tKHRoaXMsdC5yZWYsdFtkXSksbnVsbCE9
bi5yZWYmJmEuYWRkQ29tcG9uZW50QXNSZWZUbyh0aGlzLG4ucmVmLG5bZF0pKX0sbW91bnRDb21w
b25lbnRJbnRvTm9kZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9Zi5SZWFjdFJlY29uY2lsZVRyYW5z
YWN0aW9uLmdldFBvb2xlZCgpO3IucGVyZm9ybSh0aGlzLl9tb3VudENvbXBvbmVudEludG9Ob2Rl
LHRoaXMsZSx0LHIsbiksZi5SZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uLnJlbGVhc2Uocil9LF9t
b3VudENvbXBvbmVudEludG9Ob2RlOmZ1bmN0aW9uKGUsdCxuLHIpe2wodCYmMT09PXQubm9kZVR5
cGUpO3ZhciBvPURhdGUubm93KCksYT10aGlzLm1vdW50Q29tcG9uZW50KGUsbik7aWYoaS50b3Rh
bEluc3RhbnRpYXRpb25UaW1lKz1EYXRlLm5vdygpLW8sIXIpe3ZhciBzPURhdGUubm93KCksdT10
LnBhcmVudE5vZGU7aWYodSl7dmFyIGM9dC5uZXh0U2libGluZzt1LnJlbW92ZUNoaWxkKHQpLHQu
aW5uZXJIVE1MPWEsYz91Lmluc2VydEJlZm9yZSh0LGMpOnUuYXBwZW5kQ2hpbGQodCl9ZWxzZSB0
LmlubmVySFRNTD1hO2kudG90YWxJbmplY3Rpb25UaW1lKz1EYXRlLm5vdygpLXN9fSx1bm1vdW50
Q29tcG9uZW50RnJvbU5vZGU6ZnVuY3Rpb24oZSl7Zm9yKHRoaXMudW5tb3VudENvbXBvbmVudCgp
O2UubGFzdENoaWxkOyllLnJlbW92ZUNoaWxkKGUubGFzdENoaWxkKX0saXNPd25lZEJ5OmZ1bmN0
aW9uKGUpe3JldHVybiB0aGlzLnByb3BzW2RdPT09ZX0sZ2V0U2libGluZ0J5UmVmOmZ1bmN0aW9u
KGUpe3ZhciB0PXRoaXMucHJvcHNbZF07cmV0dXJuIHQmJnQucmVmcz90LnJlZnNbZV06bnVsbH19
fTt0LmV4cG9ydHM9Zn0seyIuL1JlYWN0Q3VycmVudE93bmVyIjoyNCwiLi9SZWFjdERPTUlET3Bl
cmF0aW9ucyI6MjcsIi4vUmVhY3RJRCI6MzUsIi4vUmVhY3RNb3VudCI6MzgsIi4vUmVhY3RPd25l
ciI6NDIsIi4vUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbiI6NDUsIi4vUmVhY3RVcGRhdGVzIjo0
OCwiLi9pbnZhcmlhbnQiOjc1LCIuL2tleU1pcnJvciI6NzgsIi4vbWVyZ2UiOjgxfV0sMjM6W2Z1
bmN0aW9uKGUsdCl7IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSx0KXt2YXIg
bj1tW3RdO0MuaGFzT3duUHJvcGVydHkodCkmJnAobj09PXYuT1ZFUlJJREVfQkFTRSksZS5oYXNP
d25Qcm9wZXJ0eSh0KSYmcChuPT09di5ERUZJTkVfTUFOWSl9ZnVuY3Rpb24gcihlKXt2YXIgdD1l
Ll9jb21wb3NpdGVMaWZlQ3ljbGVTdGF0ZTtwKGUuaXNNb3VudGVkKCl8fHQ9PT15Lk1PVU5USU5H
KSxwKHQhPT15LlJFQ0VJVklOR19TVEFURSYmdCE9PXkuVU5NT1VOVElORyl9ZnVuY3Rpb24gbyhl
LHQpe3ZhciByPWUucHJvdG90eXBlO2Zvcih2YXIgbyBpbiB0KXt2YXIgYT10W29dO2lmKHQuaGFz
T3duUHJvcGVydHkobykmJmEpaWYobihyLG8pLGcuaGFzT3duUHJvcGVydHkobykpZ1tvXShlLGEp
O2Vsc2V7dmFyIHM9byBpbiBtLHU9byBpbiByLGw9YS5fX3JlYWN0RG9udEJpbmQsYz0iZnVuY3Rp
b24iPT10eXBlb2YgYSxwPWMmJiFzJiYhdSYmIWw7cD8oci5fX3JlYWN0QXV0b0JpbmRNYXB8fChy
Ll9fcmVhY3RBdXRvQmluZE1hcD17fSksci5fX3JlYWN0QXV0b0JpbmRNYXBbb109YSxyW29dPWEp
OnJbb109dT9pKHJbb10sYSk6YX19fWZ1bmN0aW9uIGkoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtl
LmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19dmFyIGE9ZSgi
Li9SZWFjdENvbXBvbmVudCIpLHM9ZSgiLi9SZWFjdEN1cnJlbnRPd25lciIpLHU9ZSgiLi9SZWFj
dE93bmVyIiksbD1lKCIuL1JlYWN0UHJvcFRyYW5zZmVyZXIiKSxjPWUoIi4vUmVhY3RVcGRhdGVz
IikscD1lKCIuL2ludmFyaWFudCIpLGQ9ZSgiLi9rZXlNaXJyb3IiKSxoPWUoIi4vbWVyZ2UiKSxm
PWUoIi4vbWl4SW50byIpLHY9ZCh7REVGSU5FX09OQ0U6bnVsbCxERUZJTkVfTUFOWTpudWxsLE9W
RVJSSURFX0JBU0U6bnVsbH0pLG09e21peGluczp2LkRFRklORV9NQU5ZLHByb3BUeXBlczp2LkRF
RklORV9PTkNFLGdldERlZmF1bHRQcm9wczp2LkRFRklORV9PTkNFLGdldEluaXRpYWxTdGF0ZTp2
LkRFRklORV9PTkNFLHJlbmRlcjp2LkRFRklORV9PTkNFLGNvbXBvbmVudFdpbGxNb3VudDp2LkRF
RklORV9NQU5ZLGNvbXBvbmVudERpZE1vdW50OnYuREVGSU5FX01BTlksY29tcG9uZW50V2lsbFJl
Y2VpdmVQcm9wczp2LkRFRklORV9NQU5ZLHNob3VsZENvbXBvbmVudFVwZGF0ZTp2LkRFRklORV9P
TkNFLGNvbXBvbmVudFdpbGxVcGRhdGU6di5ERUZJTkVfTUFOWSxjb21wb25lbnREaWRVcGRhdGU6
di5ERUZJTkVfTUFOWSxjb21wb25lbnRXaWxsVW5tb3VudDp2LkRFRklORV9NQU5ZLHVwZGF0ZUNv
bXBvbmVudDp2Lk9WRVJSSURFX0JBU0V9LGc9e2Rpc3BsYXlOYW1lOmZ1bmN0aW9uKGUsdCl7ZS5k
aXNwbGF5TmFtZT10fSxtaXhpbnM6ZnVuY3Rpb24oZSx0KXtpZih0KWZvcih2YXIgbj0wO248dC5s
ZW5ndGg7bisrKW8oZSx0W25dKX0scHJvcFR5cGVzOmZ1bmN0aW9uKGUsdCl7ZS5wcm9wVHlwZXM9
dH19LHk9ZCh7TU9VTlRJTkc6bnVsbCxVTk1PVU5USU5HOm51bGwsUkVDRUlWSU5HX1BST1BTOm51
bGwsUkVDRUlWSU5HX1NUQVRFOm51bGx9KSxDPXtjb25zdHJ1Y3Q6ZnVuY3Rpb24oKXthLk1peGlu
LmNvbnN0cnVjdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5zdGF0ZT1udWxsLHRoaXMuX3Bl
bmRpbmdTdGF0ZT1udWxsLHRoaXMuX2NvbXBvc2l0ZUxpZmVDeWNsZVN0YXRlPW51bGx9LGlzTW91
bnRlZDpmdW5jdGlvbigpe3JldHVybiBhLk1peGluLmlzTW91bnRlZC5jYWxsKHRoaXMpJiZ0aGlz
Ll9jb21wb3NpdGVMaWZlQ3ljbGVTdGF0ZSE9PXkuTU9VTlRJTkd9LG1vdW50Q29tcG9uZW50OmZ1
bmN0aW9uKGUsdCl7YS5NaXhpbi5tb3VudENvbXBvbmVudC5jYWxsKHRoaXMsZSx0KSx0aGlzLl9j
b21wb3NpdGVMaWZlQ3ljbGVTdGF0ZT15Lk1PVU5USU5HLHRoaXMuX2RlZmF1bHRQcm9wcz10aGlz
LmdldERlZmF1bHRQcm9wcz90aGlzLmdldERlZmF1bHRQcm9wcygpOm51bGwsdGhpcy5fcHJvY2Vz
c1Byb3BzKHRoaXMucHJvcHMpLHRoaXMuX19yZWFjdEF1dG9CaW5kTWFwJiZ0aGlzLl9iaW5kQXV0
b0JpbmRNZXRob2RzKCksdGhpcy5zdGF0ZT10aGlzLmdldEluaXRpYWxTdGF0ZT90aGlzLmdldElu
aXRpYWxTdGF0ZSgpOm51bGwsdGhpcy5fcGVuZGluZ1N0YXRlPW51bGwsdGhpcy5fcGVuZGluZ0Zv
cmNlVXBkYXRlPSExLHRoaXMuY29tcG9uZW50V2lsbE1vdW50JiYodGhpcy5jb21wb25lbnRXaWxs
TW91bnQoKSx0aGlzLl9wZW5kaW5nU3RhdGUmJih0aGlzLnN0YXRlPXRoaXMuX3BlbmRpbmdTdGF0
ZSx0aGlzLl9wZW5kaW5nU3RhdGU9bnVsbCkpLHRoaXMuX3JlbmRlcmVkQ29tcG9uZW50PXRoaXMu
X3JlbmRlclZhbGlkYXRlZENvbXBvbmVudCgpLHRoaXMuX2NvbXBvc2l0ZUxpZmVDeWNsZVN0YXRl
PW51bGw7dmFyIG49dGhpcy5fcmVuZGVyZWRDb21wb25lbnQubW91bnRDb21wb25lbnQoZSx0KTty
ZXR1cm4gdGhpcy5jb21wb25lbnREaWRNb3VudCYmdC5nZXRSZWFjdE9uRE9NUmVhZHkoKS5lbnF1
ZXVlKHRoaXMsdGhpcy5jb21wb25lbnREaWRNb3VudCksbn0sdW5tb3VudENvbXBvbmVudDpmdW5j
dGlvbigpe3RoaXMuX2NvbXBvc2l0ZUxpZmVDeWNsZVN0YXRlPXkuVU5NT1VOVElORyx0aGlzLmNv
bXBvbmVudFdpbGxVbm1vdW50JiZ0aGlzLmNvbXBvbmVudFdpbGxVbm1vdW50KCksdGhpcy5fY29t
cG9zaXRlTGlmZUN5Y2xlU3RhdGU9bnVsbCx0aGlzLl9kZWZhdWx0UHJvcHM9bnVsbCxhLk1peGlu
LnVubW91bnRDb21wb25lbnQuY2FsbCh0aGlzKSx0aGlzLl9yZW5kZXJlZENvbXBvbmVudC51bm1v
dW50Q29tcG9uZW50KCksdGhpcy5fcmVuZGVyZWRDb21wb25lbnQ9bnVsbCx0aGlzLnJlZnMmJih0
aGlzLnJlZnM9bnVsbCl9LHNldFN0YXRlOmZ1bmN0aW9uKGUsdCl7dGhpcy5yZXBsYWNlU3RhdGUo
aCh0aGlzLl9wZW5kaW5nU3RhdGV8fHRoaXMuc3RhdGUsZSksdCl9LHJlcGxhY2VTdGF0ZTpmdW5j
dGlvbihlLHQpe3IodGhpcyksdGhpcy5fcGVuZGluZ1N0YXRlPWUsYy5lbnF1ZXVlVXBkYXRlKHRo
aXMsdCl9LF9wcm9jZXNzUHJvcHM6ZnVuY3Rpb24oZSl7dmFyIHQsbj10aGlzLl9kZWZhdWx0UHJv
cHM7Zm9yKHQgaW4gbil0IGluIGV8fChlW3RdPW5bdF0pO3ZhciByPXRoaXMuY29uc3RydWN0b3Iu
cHJvcFR5cGVzO2lmKHIpe3ZhciBvPXRoaXMuY29uc3RydWN0b3IuZGlzcGxheU5hbWU7Zm9yKHQg
aW4gcil7dmFyIGk9clt0XTtpJiZpKGUsdCxvKX19fSxwZXJmb3JtVXBkYXRlSWZOZWNlc3Nhcnk6
ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9jb21wb3NpdGVMaWZlQ3ljbGVTdGF0ZTtlIT09eS5NT1VO
VElORyYmZSE9PXkuUkVDRUlWSU5HX1BST1BTJiZhLk1peGluLnBlcmZvcm1VcGRhdGVJZk5lY2Vz
c2FyeS5jYWxsKHRoaXMpfSxfcGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5OmZ1bmN0aW9uKGUpe2lm
KG51bGwhPXRoaXMuX3BlbmRpbmdQcm9wc3x8bnVsbCE9dGhpcy5fcGVuZGluZ1N0YXRlfHx0aGlz
Ll9wZW5kaW5nRm9yY2VVcGRhdGUpe3ZhciB0PXRoaXMucHJvcHM7bnVsbCE9dGhpcy5fcGVuZGlu
Z1Byb3BzJiYodD10aGlzLl9wZW5kaW5nUHJvcHMsdGhpcy5fcHJvY2Vzc1Byb3BzKHQpLHRoaXMu
X3BlbmRpbmdQcm9wcz1udWxsLHRoaXMuX2NvbXBvc2l0ZUxpZmVDeWNsZVN0YXRlPXkuUkVDRUlW
SU5HX1BST1BTLHRoaXMuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyYmdGhpcy5jb21wb25lbnRX
aWxsUmVjZWl2ZVByb3BzKHQsZSkpLHRoaXMuX2NvbXBvc2l0ZUxpZmVDeWNsZVN0YXRlPXkuUkVD
RUlWSU5HX1NUQVRFO3ZhciBuPXRoaXMuX3BlbmRpbmdTdGF0ZXx8dGhpcy5zdGF0ZTt0aGlzLl9w
ZW5kaW5nU3RhdGU9bnVsbCx0aGlzLl9wZW5kaW5nRm9yY2VVcGRhdGV8fCF0aGlzLnNob3VsZENv
bXBvbmVudFVwZGF0ZXx8dGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGUodCxuKT8odGhpcy5fcGVu
ZGluZ0ZvcmNlVXBkYXRlPSExLHRoaXMuX3BlcmZvcm1Db21wb25lbnRVcGRhdGUodCxuLGUpKToo
dGhpcy5wcm9wcz10LHRoaXMuc3RhdGU9biksdGhpcy5fY29tcG9zaXRlTGlmZUN5Y2xlU3RhdGU9
bnVsbH19LF9wZXJmb3JtQ29tcG9uZW50VXBkYXRlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlz
LnByb3BzLG89dGhpcy5zdGF0ZTt0aGlzLmNvbXBvbmVudFdpbGxVcGRhdGUmJnRoaXMuY29tcG9u
ZW50V2lsbFVwZGF0ZShlLHQsbiksdGhpcy5wcm9wcz1lLHRoaXMuc3RhdGU9dCx0aGlzLnVwZGF0
ZUNvbXBvbmVudChuLHIsbyksdGhpcy5jb21wb25lbnREaWRVcGRhdGUmJm4uZ2V0UmVhY3RPbkRP
TVJlYWR5KCkuZW5xdWV1ZSh0aGlzLHRoaXMuY29tcG9uZW50RGlkVXBkYXRlLmJpbmQodGhpcyxy
LG8pKX0sdXBkYXRlQ29tcG9uZW50OmZ1bmN0aW9uKGUsdCl7YS5NaXhpbi51cGRhdGVDb21wb25l
bnQuY2FsbCh0aGlzLGUsdCk7dmFyIG49dGhpcy5fcmVuZGVyZWRDb21wb25lbnQscj10aGlzLl9y
ZW5kZXJWYWxpZGF0ZWRDb21wb25lbnQoKTtpZihuLmNvbnN0cnVjdG9yPT09ci5jb25zdHJ1Y3Rv
ciluLnJlY2VpdmVQcm9wcyhyLnByb3BzLGUpO2Vsc2V7dmFyIG89dGhpcy5fcm9vdE5vZGVJRCxp
PW4uX3Jvb3ROb2RlSUQ7bi51bm1vdW50Q29tcG9uZW50KCk7dmFyIHM9ci5tb3VudENvbXBvbmVu
dChvLGUpO2EuRE9NSURPcGVyYXRpb25zLmRhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3Vw
QnlJRChpLHMpLHRoaXMuX3JlbmRlcmVkQ29tcG9uZW50PXJ9fSxmb3JjZVVwZGF0ZTpmdW5jdGlv
bihlKXt2YXIgdD10aGlzLl9jb21wb3NpdGVMaWZlQ3ljbGVTdGF0ZTtwKHRoaXMuaXNNb3VudGVk
KCl8fHQ9PT15Lk1PVU5USU5HKSxwKHQhPT15LlJFQ0VJVklOR19TVEFURSYmdCE9PXkuVU5NT1VO
VElORyksdGhpcy5fcGVuZGluZ0ZvcmNlVXBkYXRlPSEwLGMuZW5xdWV1ZVVwZGF0ZSh0aGlzLGUp
fSxfcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50OmZ1bmN0aW9uKCl7dmFyIGU7cy5jdXJyZW50PXRo
aXM7dHJ5e2U9dGhpcy5yZW5kZXIoKX1jYXRjaCh0KXt0aHJvdyB0fWZpbmFsbHl7cy5jdXJyZW50
PW51bGx9cmV0dXJuIHAoYS5pc1ZhbGlkQ29tcG9uZW50KGUpKSxlfSxfYmluZEF1dG9CaW5kTWV0
aG9kczpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzLl9fcmVhY3RBdXRvQmluZE1hcClpZih0
aGlzLl9fcmVhY3RBdXRvQmluZE1hcC5oYXNPd25Qcm9wZXJ0eShlKSl7dmFyIHQ9dGhpcy5fX3Jl
YWN0QXV0b0JpbmRNYXBbZV07dGhpc1tlXT10aGlzLl9iaW5kQXV0b0JpbmRNZXRob2QodCl9fSxf
YmluZEF1dG9CaW5kTWV0aG9kOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj1mdW5jdGlvbigpe3Jl
dHVybiBlLmFwcGx5KHQsYXJndW1lbnRzKX07cmV0dXJuIG59fSxFPWZ1bmN0aW9uKCl7fTtmKEUs
YS5NaXhpbiksZihFLHUuTWl4aW4pLGYoRSxsLk1peGluKSxmKEUsQyk7dmFyIEQ9e0xpZmVDeWNs
ZTp5LEJhc2U6RSxjcmVhdGVDbGFzczpmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbigpe307dC5w
cm90b3R5cGU9bmV3IEUsdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dCxvKHQsZSkscCh0LnByb3Rv
dHlwZS5yZW5kZXIpO2Zvcih2YXIgbiBpbiBtKXQucHJvdG90eXBlW25dfHwodC5wcm90b3R5cGVb
bl09bnVsbCk7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgdDtyZXR1cm4gZS5jb25zdHJ1Y3Qu
YXBwbHkoZSxhcmd1bWVudHMpLGV9O3JldHVybiByLmNvbXBvbmVudENvbnN0cnVjdG9yPXQsci5v
cmlnaW5hbFNwZWM9ZSxyfSxhdXRvQmluZDpmdW5jdGlvbihlKXtyZXR1cm4gZX19O3QuZXhwb3J0
cz1EfSgpfSx7Ii4vUmVhY3RDb21wb25lbnQiOjIyLCIuL1JlYWN0Q3VycmVudE93bmVyIjoyNCwi
Li9SZWFjdE93bmVyIjo0MiwiLi9SZWFjdFByb3BUcmFuc2ZlcmVyIjo0MywiLi9SZWFjdFVwZGF0
ZXMiOjQ4LCIuL2ludmFyaWFudCI6NzUsIi4va2V5TWlycm9yIjo3OCwiLi9tZXJnZSI6ODEsIi4v
bWl4SW50byI6ODR9XSwyNDpbZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7dmFyIG49e2N1cnJl
bnQ6bnVsbH07dC5leHBvcnRzPW59LHt9XSwyNTpbZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7
ZnVuY3Rpb24gbihlLHQpe3ZhciBuPWZ1bmN0aW9uKCl7fTtuLnByb3RvdHlwZT1uZXcgcihlLHQp
LG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yPW47dmFyIG89ZnVuY3Rpb24oKXt2YXIgZT1uZXcgbjty
ZXR1cm4gZS5jb25zdHJ1Y3QuYXBwbHkoZSxhcmd1bWVudHMpLGV9O3JldHVybiBvLmNvbXBvbmVu
dENvbnN0cnVjdG9yPW4sb312YXIgcj1lKCIuL1JlYWN0TmF0aXZlQ29tcG9uZW50Iiksbz1lKCIu
L21lcmdlSW50byIpLGk9ZSgiLi9vYmpNYXBLZXlWYWwiKSxhPWkoe2E6ITEsYWJicjohMSxhZGRy
ZXNzOiExLGFyZWE6ITEsYXJ0aWNsZTohMSxhc2lkZTohMSxhdWRpbzohMSxiOiExLGJhc2U6ITEs
YmRpOiExLGJkbzohMSxiaWc6ITEsYmxvY2txdW90ZTohMSxib2R5OiExLGJyOiEwLGJ1dHRvbjoh
MSxjYW52YXM6ITEsY2FwdGlvbjohMSxjaXRlOiExLGNvZGU6ITEsY29sOiEwLGNvbGdyb3VwOiEx
LGRhdGE6ITEsZGF0YWxpc3Q6ITEsZGQ6ITEsZGVsOiExLGRldGFpbHM6ITEsZGZuOiExLGRpdjoh
MSxkbDohMSxkdDohMSxlbTohMSxlbWJlZDohMCxmaWVsZHNldDohMSxmaWdjYXB0aW9uOiExLGZp
Z3VyZTohMSxmb290ZXI6ITEsZm9ybTohMSxoMTohMSxoMjohMSxoMzohMSxoNDohMSxoNTohMSxo
NjohMSxoZWFkOiExLGhlYWRlcjohMSxocjohMCxodG1sOiExLGk6ITEsaWZyYW1lOiExLGltZzoh
MCxpbnB1dDohMCxpbnM6ITEsa2JkOiExLGtleWdlbjohMCxsYWJlbDohMSxsZWdlbmQ6ITEsbGk6
ITEsbGluazohMSxtYWluOiExLG1hcDohMSxtYXJrOiExLG1lbnU6ITEsbWVudWl0ZW06ITEsbWV0
YTohMCxtZXRlcjohMSxuYXY6ITEsbm9zY3JpcHQ6ITEsb2JqZWN0OiExLG9sOiExLG9wdGdyb3Vw
OiExLG9wdGlvbjohMSxvdXRwdXQ6ITEscDohMSxwYXJhbTohMCxwcmU6ITEscHJvZ3Jlc3M6ITEs
cTohMSxycDohMSxydDohMSxydWJ5OiExLHM6ITEsc2FtcDohMSxzY3JpcHQ6ITEsc2VjdGlvbjoh
MSxzZWxlY3Q6ITEsc21hbGw6ITEsc291cmNlOiExLHNwYW46ITEsc3Ryb25nOiExLHN0eWxlOiEx
LHN1YjohMSxzdW1tYXJ5OiExLHN1cDohMSx0YWJsZTohMSx0Ym9keTohMSx0ZDohMSx0ZXh0YXJl
YTohMSx0Zm9vdDohMSx0aDohMSx0aGVhZDohMSx0aW1lOiExLHRpdGxlOiExLHRyOiExLHRyYWNr
OiEwLHU6ITEsdWw6ITEsInZhciI6ITEsdmlkZW86ITEsd2JyOiExLGNpcmNsZTohMSxnOiExLGxp
bmU6ITEscGF0aDohMSxwb2x5bGluZTohMSxyZWN0OiExLHN2ZzohMSx0ZXh0OiExfSxuKSxzPXtp
bmplY3RDb21wb25lbnRDbGFzc2VzOmZ1bmN0aW9uKGUpe28oYSxlKX19O2EuaW5qZWN0aW9uPXMs
dC5leHBvcnRzPWF9LHsiLi9SZWFjdE5hdGl2ZUNvbXBvbmVudCI6NDAsIi4vbWVyZ2VJbnRvIjo4
MywiLi9vYmpNYXBLZXlWYWwiOjg1fV0sMjY6W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO3Zh
ciBuPWUoIi4vUmVhY3RDb21wb3NpdGVDb21wb25lbnQiKSxyPWUoIi4vUmVhY3RET00iKSxvPWUo
Ii4vUmVhY3RFdmVudEVtaXR0ZXIiKSxpPWUoIi4vRXZlbnRDb25zdGFudHMiKSxhPXIuZm9ybSxz
PW4uY3JlYXRlQ2xhc3Moe3JlbmRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZmVyUHJv
cHNUbyhhKG51bGwsdGhpcy5wcm9wcy5jaGlsZHJlbikpfSxjb21wb25lbnREaWRNb3VudDpmdW5j
dGlvbihlKXtvLnRyYXBCdWJibGVkRXZlbnQoaS50b3BMZXZlbFR5cGVzLnRvcFN1Ym1pdCwic3Vi
bWl0IixlKX19KTt0LmV4cG9ydHM9c30seyIuL0V2ZW50Q29uc3RhbnRzIjoxMywiLi9SZWFjdENv
bXBvc2l0ZUNvbXBvbmVudCI6MjMsIi4vUmVhY3RET00iOjI1LCIuL1JlYWN0RXZlbnRFbWl0dGVy
IjozM31dLDI3OltmdW5jdGlvbihlLHQpeyFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1l
KCIuL0NTU1Byb3BlcnR5T3BlcmF0aW9ucyIpLHI9ZSgiLi9ET01DaGlsZHJlbk9wZXJhdGlvbnMi
KSxvPWUoIi4vRE9NUHJvcGVydHlPcGVyYXRpb25zIiksaT1lKCIuL1JlYWN0SUQiKSxhPWUoIi4v
Z2V0VGV4dENvbnRlbnRBY2Nlc3NvciIpLHM9ZSgiLi9pbnZhcmlhbnQiKSx1PXtkYW5nZXJvdXNs
eVNldElubmVySFRNTDoiYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYCBtdXN0IGJlIHNldCB1c2lu
ZyBgdXBkYXRlSW5uZXJIVE1MQnlJRCgpYC4iLHN0eWxlOiJgc3R5bGVgIG11c3QgYmUgc2V0IHVz
aW5nIGB1cGRhdGVTdHlsZXNCeUlEKClgLiJ9LGw9YSgpfHwiTkEiLGM9e3VwZGF0ZVByb3BlcnR5
QnlJRDpmdW5jdGlvbihlLHQsbil7dmFyIHI9aS5nZXROb2RlKGUpOworcyghdS5oYXNPd25Qcm9w
ZXJ0eSh0KSksby5zZXRWYWx1ZUZvclByb3BlcnR5KHIsdCxuKX0sZGVsZXRlUHJvcGVydHlCeUlE
OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1pLmdldE5vZGUoZSk7cyghdS5oYXNPd25Qcm9wZXJ0eSh0
KSksby5kZWxldGVWYWx1ZUZvclByb3BlcnR5KHIsdCxuKX0sdXBkYXRlUHJvcGVydGllc0J5SUQ6
ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiZjLnVwZGF0
ZVByb3BlcnRpZXNCeUlEKGUsbix0W25dKX0sdXBkYXRlU3R5bGVzQnlJRDpmdW5jdGlvbihlLHQp
e3ZhciByPWkuZ2V0Tm9kZShlKTtuLnNldFZhbHVlRm9yU3R5bGVzKHIsdCl9LHVwZGF0ZUlubmVy
SFRNTEJ5SUQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj1pLmdldE5vZGUoZSk7bi5pbm5lckhUTUw9KHQm
JnQuX19odG1sfHwiIikucmVwbGFjZSgvXiAvZywiJm5ic3A7Iil9LHVwZGF0ZVRleHRDb250ZW50
QnlJRDpmdW5jdGlvbihlLHQpe3ZhciBuPWkuZ2V0Tm9kZShlKTtuW2xdPXR9LGRhbmdlcm91c2x5
UmVwbGFjZU5vZGVXaXRoTWFya3VwQnlJRDpmdW5jdGlvbihlLHQpe3ZhciBuPWkuZ2V0Tm9kZShl
KTtyLmRhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwKG4sdCl9LG1hbmFnZUNoaWxkcmVu
QnlQYXJlbnRJRDpmdW5jdGlvbihlLHQpe3ZhciBuPWkuZ2V0Tm9kZShlKTtyLm1hbmFnZUNoaWxk
cmVuKG4sdCl9fTt0LmV4cG9ydHM9Y30oKX0seyIuL0NTU1Byb3BlcnR5T3BlcmF0aW9ucyI6Mywi
Li9ET01DaGlsZHJlbk9wZXJhdGlvbnMiOjYsIi4vRE9NUHJvcGVydHlPcGVyYXRpb25zIjo4LCIu
L1JlYWN0SUQiOjM1LCIuL2dldFRleHRDb250ZW50QWNjZXNzb3IiOjcxLCIuL2ludmFyaWFudCI6
NzV9XSwyODpbZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi9ET01Qcm9wZXJ0
eU9wZXJhdGlvbnMiKSxyPWUoIi4vUmVhY3RDb21wb3NpdGVDb21wb25lbnQiKSxvPWUoIi4vUmVh
Y3RET00iKSxpPWUoIi4vbWVyZ2UiKSxhPW8uaW5wdXQscz1yLmNyZWF0ZUNsYXNzKHtnZXRJbml0
aWFsU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm57Y2hlY2tlZDp0aGlzLnByb3BzLmRlZmF1bHRDaGVj
a2VkfHwhMSx2YWx1ZTp0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZXx8IiJ9fSxzaG91bGRDb21wb25l
bnRVcGRhdGU6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5faXNDaGFuZ2luZ30sZ2V0Q2hlY2tlZDpm
dW5jdGlvbigpe3JldHVybiBudWxsIT10aGlzLnByb3BzLmNoZWNrZWQ/dGhpcy5wcm9wcy5jaGVj
a2VkOnRoaXMuc3RhdGUuY2hlY2tlZH0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9
dGhpcy5wcm9wcy52YWx1ZT8iIit0aGlzLnByb3BzLnZhbHVlOnRoaXMuc3RhdGUudmFsdWV9LHJl
bmRlcjpmdW5jdGlvbigpe3ZhciBlPWkodGhpcy5wcm9wcyk7cmV0dXJuIGUuY2hlY2tlZD10aGlz
LmdldENoZWNrZWQoKSxlLnZhbHVlPXRoaXMuZ2V0VmFsdWUoKSxlLm9uQ2hhbmdlPXRoaXMuaGFu
ZGxlQ2hhbmdlLGEoZSx0aGlzLnByb3BzLmNoaWxkcmVuKX0sY29tcG9uZW50RGlkVXBkYXRlOmZ1
bmN0aW9uKGUsdCxyKXtudWxsIT10aGlzLnByb3BzLmNoZWNrZWQmJm4uc2V0VmFsdWVGb3JQcm9w
ZXJ0eShyLCJjaGVja2VkIix0aGlzLnByb3BzLmNoZWNrZWR8fCExKSxudWxsIT10aGlzLnByb3Bz
LnZhbHVlJiZuLnNldFZhbHVlRm9yUHJvcGVydHkociwidmFsdWUiLCIiK3RoaXMucHJvcHMudmFs
dWV8fCIiKX0saGFuZGxlQ2hhbmdlOmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiB0aGlzLnByb3Bz
Lm9uQ2hhbmdlJiYodGhpcy5faXNDaGFuZ2luZz0hMCx0PXRoaXMucHJvcHMub25DaGFuZ2UoZSks
dGhpcy5faXNDaGFuZ2luZz0hMSksdGhpcy5zZXRTdGF0ZSh7Y2hlY2tlZDplLnRhcmdldC5jaGVj
a2VkLHZhbHVlOmUudGFyZ2V0LnZhbHVlfSksdH19KTt0LmV4cG9ydHM9c30seyIuL0RPTVByb3Bl
cnR5T3BlcmF0aW9ucyI6OCwiLi9SZWFjdENvbXBvc2l0ZUNvbXBvbmVudCI6MjMsIi4vUmVhY3RE
T00iOjI1LCIuL21lcmdlIjo4MX1dLDI5OltmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIg
bj1lKCIuL1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50Iikscj1lKCIuL1JlYWN0RE9NIiksbz1yLm9w
dGlvbixpPW4uY3JlYXRlQ2xhc3Moe2NvbXBvbmVudFdpbGxNb3VudDpmdW5jdGlvbigpe251bGwh
PXRoaXMucHJvcHMuc2VsZWN0ZWR9LHJlbmRlcjpmdW5jdGlvbigpe3JldHVybiBvKHRoaXMucHJv
cHMsdGhpcy5wcm9wcy5jaGlsZHJlbil9fSk7dC5leHBvcnRzPWl9LHsiLi9SZWFjdENvbXBvc2l0
ZUNvbXBvbmVudCI6MjMsIi4vUmVhY3RET00iOjI1fV0sMzA6W2Z1bmN0aW9uKGUsdCl7InVzZSBz
dHJpY3QiO2Z1bmN0aW9uIG4oZSx0KXtudWxsIT1lW3RdJiYoZS5tdWx0aXBsZT9hKEFycmF5Lmlz
QXJyYXkoZVt0XSkpOmEoIUFycmF5LmlzQXJyYXkoZVt0XSkpKX1mdW5jdGlvbiByKCl7aWYobnVs
bCE9dGhpcy5wcm9wcy52YWx1ZSlmb3IodmFyIGU9dGhpcy5nZXRET01Ob2RlKCkub3B0aW9ucyx0
PSIiK3RoaXMucHJvcHMudmFsdWUsbj0wLHI9ZS5sZW5ndGg7cj5uO24rKyl7dmFyIG89dGhpcy5w
cm9wcy5tdWx0aXBsZT90LmluZGV4T2YoZVtuXS52YWx1ZSk+PTA6bz1lW25dLnZhbHVlPT09dDtv
IT09ZVtuXS5zZWxlY3RlZCYmKGVbbl0uc2VsZWN0ZWQ9byl9fXZhciBvPWUoIi4vUmVhY3RDb21w
b3NpdGVDb21wb25lbnQiKSxpPWUoIi4vUmVhY3RET00iKSxhPWUoIi4vaW52YXJpYW50Iikscz1l
KCIuL21lcmdlIiksdT1pLnNlbGVjdCxsPW8uY3JlYXRlQ2xhc3Moe3Byb3BUeXBlczp7ZGVmYXVs
dFZhbHVlOm4sdmFsdWU6bn0sZ2V0SW5pdGlhbFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJue3ZhbHVl
OnRoaXMucHJvcHMuZGVmYXVsdFZhbHVlfHwodGhpcy5wcm9wcy5tdWx0aXBsZT9bXToiIil9fSxj
b21wb25lbnRXaWxsUmVjZWl2ZVByb3BzOmZ1bmN0aW9uKGUpeyF0aGlzLnByb3BzLm11bHRpcGxl
JiZlLm11bHRpcGxlP3RoaXMuc2V0U3RhdGUoe3ZhbHVlOlt0aGlzLnN0YXRlLnZhbHVlXX0pOnRo
aXMucHJvcHMubXVsdGlwbGUmJiFlLm11bHRpcGxlJiZ0aGlzLnNldFN0YXRlKHt2YWx1ZTp0aGlz
LnN0YXRlLnZhbHVlWzBdfSl9LHNob3VsZENvbXBvbmVudFVwZGF0ZTpmdW5jdGlvbigpe3JldHVy
biF0aGlzLl9pc0NoYW5naW5nfSxyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT1zKHRoaXMucHJvcHMp
O3JldHVybiBlLm9uQ2hhbmdlPXRoaXMuaGFuZGxlQ2hhbmdlLGUudmFsdWU9bnVsbCx1KGUsdGhp
cy5wcm9wcy5jaGlsZHJlbil9LGNvbXBvbmVudERpZE1vdW50OnIsY29tcG9uZW50RGlkVXBkYXRl
OnIsaGFuZGxlQ2hhbmdlOmZ1bmN0aW9uKGUpe3ZhciB0O3RoaXMucHJvcHMub25DaGFuZ2UmJih0
aGlzLl9pc0NoYW5naW5nPSEwLHQ9dGhpcy5wcm9wcy5vbkNoYW5nZShlKSx0aGlzLl9pc0NoYW5n
aW5nPSExKTt2YXIgbjtpZih0aGlzLnByb3BzLm11bHRpcGxlKXtuPVtdO2Zvcih2YXIgcj1lLnRh
cmdldC5vcHRpb25zLG89MCxpPXIubGVuZ3RoO2k+bztvKyspcltvXS5zZWxlY3RlZCYmbi5wdXNo
KHJbb10udmFsdWUpfWVsc2Ugbj1lLnRhcmdldC52YWx1ZTtyZXR1cm4gdGhpcy5zZXRTdGF0ZSh7
dmFsdWU6bn0pLHR9fSk7dC5leHBvcnRzPWx9LHsiLi9SZWFjdENvbXBvc2l0ZUNvbXBvbmVudCI6
MjMsIi4vUmVhY3RET00iOjI1LCIuL2ludmFyaWFudCI6NzUsIi4vbWVyZ2UiOjgxfV0sMzE6W2Z1
bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4vRE9NUHJvcGVydHlPcGVyYXRpb25z
Iikscj1lKCIuL1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50Iiksbz1lKCIuL1JlYWN0RE9NIiksaT1l
KCIuL2ludmFyaWFudCIpLGE9ZSgiLi9tZXJnZSIpLHM9by50ZXh0YXJlYSx1PXtzdHJpbmc6ITAs
bnVtYmVyOiEwfSxsPXIuY3JlYXRlQ2xhc3Moe2dldEluaXRpYWxTdGF0ZTpmdW5jdGlvbigpe3Zh
ciBlPXRoaXMucHJvcHMuZGVmYXVsdFZhbHVlLHQ9dGhpcy5wcm9wcy5jaGlsZHJlbjtyZXR1cm4g
bnVsbCE9dCYmKGkobnVsbD09ZSksQXJyYXkuaXNBcnJheSh0KSYmKGkodC5sZW5ndGg8PTEpLHQ9
dFswXSksaSh1W3R5cGVvZiB0XSksZT0iIit0KSxlPWV8fCIiLHtpbml0aWFsVmFsdWU6bnVsbCE9
dGhpcy5wcm9wcy52YWx1ZT90aGlzLnByb3BzLnZhbHVlOmUsdmFsdWU6ZX19LHNob3VsZENvbXBv
bmVudFVwZGF0ZTpmdW5jdGlvbigpe3JldHVybiF0aGlzLl9pc0NoYW5naW5nfSxnZXRWYWx1ZTpm
dW5jdGlvbigpe3JldHVybiBudWxsIT10aGlzLnByb3BzLnZhbHVlP3RoaXMucHJvcHMudmFsdWU6
dGhpcy5zdGF0ZS52YWx1ZX0scmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGU9YSh0aGlzLnByb3BzKTty
ZXR1cm4gaShudWxsPT1lLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKSxlLnZhbHVlPXRoaXMuZ2V0
VmFsdWUoKSxlLm9uQ2hhbmdlPXRoaXMuaGFuZGxlQ2hhbmdlLHMoZSx0aGlzLnN0YXRlLmluaXRp
YWxWYWx1ZSl9LGNvbXBvbmVudERpZFVwZGF0ZTpmdW5jdGlvbihlLHQscil7bnVsbCE9dGhpcy5w
cm9wcy52YWx1ZSYmbi5zZXRWYWx1ZUZvclByb3BlcnR5KHIsInZhbHVlIix0aGlzLnByb3BzLnZh
bHVlfHwiIil9LGhhbmRsZUNoYW5nZTpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gdGhpcy5wcm9w
cy5vbkNoYW5nZSYmKHRoaXMuX2lzQ2hhbmdpbmc9ITAsdD10aGlzLnByb3BzLm9uQ2hhbmdlKGUp
LHRoaXMuX2lzQ2hhbmdpbmc9ITEpLHRoaXMuc2V0U3RhdGUoe3ZhbHVlOmUudGFyZ2V0LnZhbHVl
fSksdH19KTt0LmV4cG9ydHM9bH0seyIuL0RPTVByb3BlcnR5T3BlcmF0aW9ucyI6OCwiLi9SZWFj
dENvbXBvc2l0ZUNvbXBvbmVudCI6MjMsIi4vUmVhY3RET00iOjI1LCIuL2ludmFyaWFudCI6NzUs
Ii4vbWVyZ2UiOjgxfV0sMzI6W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4o
KXtmLmluamVjdGlvbi5pbmplY3RFdmVudFBsdWdpbk9yZGVyKHApLGYuaW5qZWN0aW9uLmluamVj
dEluc3RhbmNlSGFuZGxlKHYpLGYuaW5qZWN0aW9uLmluamVjdEV2ZW50UGx1Z2luc0J5TmFtZSh7
U2ltcGxlRXZlbnRQbHVnaW46bSxFbnRlckxlYXZlRXZlbnRQbHVnaW46ZCxDaGFuZ2VFdmVudFBs
dWdpbjpofSksci5pbmplY3Rpb24uaW5qZWN0Q29tcG9uZW50Q2xhc3Nlcyh7Zm9ybTpvLGlucHV0
Omksb3B0aW9uOmEsc2VsZWN0OnMsdGV4dGFyZWE6dX0pLGMuaW5qZWN0aW9uLmluamVjdERPTVBy
b3BlcnR5Q29uZmlnKGwpfXZhciByPWUoIi4vUmVhY3RET00iKSxvPWUoIi4vUmVhY3RET01Gb3Jt
IiksaT1lKCIuL1JlYWN0RE9NSW5wdXQiKSxhPWUoIi4vUmVhY3RET01PcHRpb24iKSxzPWUoIi4v
UmVhY3RET01TZWxlY3QiKSx1PWUoIi4vUmVhY3RET01UZXh0YXJlYSIpLGw9ZSgiLi9EZWZhdWx0
RE9NUHJvcGVydHlDb25maWciKSxjPWUoIi4vRE9NUHJvcGVydHkiKSxwPWUoIi4vRGVmYXVsdEV2
ZW50UGx1Z2luT3JkZXIiKSxkPWUoIi4vRW50ZXJMZWF2ZUV2ZW50UGx1Z2luIiksaD1lKCIuL0No
YW5nZUV2ZW50UGx1Z2luIiksZj1lKCIuL0V2ZW50UGx1Z2luSHViIiksdj1lKCIuL1JlYWN0SW5z
dGFuY2VIYW5kbGVzIiksbT1lKCIuL1NpbXBsZUV2ZW50UGx1Z2luIik7dC5leHBvcnRzPXtpbmpl
Y3Q6bn19LHsiLi9DaGFuZ2VFdmVudFBsdWdpbiI6NSwiLi9ET01Qcm9wZXJ0eSI6NywiLi9EZWZh
dWx0RE9NUHJvcGVydHlDb25maWciOjEwLCIuL0RlZmF1bHRFdmVudFBsdWdpbk9yZGVyIjoxMSwi
Li9FbnRlckxlYXZlRXZlbnRQbHVnaW4iOjEyLCIuL0V2ZW50UGx1Z2luSHViIjoxNSwiLi9SZWFj
dERPTSI6MjUsIi4vUmVhY3RET01Gb3JtIjoyNiwiLi9SZWFjdERPTUlucHV0IjoyOCwiLi9SZWFj
dERPTU9wdGlvbiI6MjksIi4vUmVhY3RET01TZWxlY3QiOjMwLCIuL1JlYWN0RE9NVGV4dGFyZWEi
OjMxLCIuL1JlYWN0SW5zdGFuY2VIYW5kbGVzIjozNywiLi9TaW1wbGVFdmVudFBsdWdpbiI6NDl9
XSwzMzpbZnVuY3Rpb24oZSx0KXshZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihl
LHQsbil7cy5saXN0ZW4obix0LHYuVG9wTGV2ZWxDYWxsYmFja0NyZWF0b3IuY3JlYXRlVG9wTGV2
ZWxDYWxsYmFjayhlKSl9ZnVuY3Rpb24gcihlLHQsbil7cy5jYXB0dXJlKG4sdCx2LlRvcExldmVs
Q2FsbGJhY2tDcmVhdG9yLmNyZWF0ZVRvcExldmVsQ2FsbGJhY2soZSkpfWZ1bmN0aW9uIG8oKXt2
YXIgZT1wLnJlZnJlc2hTY3JvbGxWYWx1ZXM7cy5saXN0ZW4od2luZG93LCJzY3JvbGwiLGUpLHMu
bGlzdGVuKHdpbmRvdywicmVzaXplIixlKX1mdW5jdGlvbiBpKGUpe2QoIWYpO3ZhciB0PWEudG9w
TGV2ZWxUeXBlcyxpPWRvY3VtZW50O28oKSxuKHQudG9wTW91c2VPdmVyLCJtb3VzZW92ZXIiLGkp
LG4odC50b3BNb3VzZURvd24sIm1vdXNlZG93biIsaSksbih0LnRvcE1vdXNlVXAsIm1vdXNldXAi
LGkpLG4odC50b3BNb3VzZU1vdmUsIm1vdXNlbW92ZSIsaSksbih0LnRvcE1vdXNlT3V0LCJtb3Vz
ZW91dCIsaSksbih0LnRvcENsaWNrLCJjbGljayIsaSksbih0LnRvcERvdWJsZUNsaWNrLCJkYmxj
bGljayIsaSksZSYmKG4odC50b3BUb3VjaFN0YXJ0LCJ0b3VjaHN0YXJ0IixpKSxuKHQudG9wVG91
Y2hFbmQsInRvdWNoZW5kIixpKSxuKHQudG9wVG91Y2hNb3ZlLCJ0b3VjaG1vdmUiLGkpLG4odC50
b3BUb3VjaENhbmNlbCwidG91Y2hjYW5jZWwiLGkpKSxuKHQudG9wS2V5VXAsImtleXVwIixpKSxu
KHQudG9wS2V5UHJlc3MsImtleXByZXNzIixpKSxuKHQudG9wS2V5RG93biwia2V5ZG93biIsaSks
bih0LnRvcElucHV0LCJpbnB1dCIsaSksbih0LnRvcENoYW5nZSwiY2hhbmdlIixpKSxuKHQudG9w
U2VsZWN0aW9uQ2hhbmdlLCJzZWxlY3Rpb25jaGFuZ2UiLGkpLG4odC50b3BET01DaGFyYWN0ZXJE
YXRhTW9kaWZpZWQsIkRPTUNoYXJhY3RlckRhdGFNb2RpZmllZCIsaSksaCgiZHJhZyIpJiYobih0
LnRvcERyYWcsImRyYWciLGkpLG4odC50b3BEcmFnRW5kLCJkcmFnZW5kIixpKSxuKHQudG9wRHJh
Z0VudGVyLCJkcmFnZW50ZXIiLGkpLG4odC50b3BEcmFnRXhpdCwiZHJhZ2V4aXQiLGkpLG4odC50
b3BEcmFnTGVhdmUsImRyYWdsZWF2ZSIsaSksbih0LnRvcERyYWdPdmVyLCJkcmFnb3ZlciIsaSks
bih0LnRvcERyYWdTdGFydCwiZHJhZ3N0YXJ0IixpKSxuKHQudG9wRHJvcCwiZHJvcCIsaSkpLGgo
IndoZWVsIik/bih0LnRvcFdoZWVsLCJ3aGVlbCIsaSk6aCgibW91c2V3aGVlbCIpP24odC50b3BX
aGVlbCwibW91c2V3aGVlbCIsaSk6bih0LnRvcFdoZWVsLCJET01Nb3VzZVNjcm9sbCIsaSksaCgi
c2Nyb2xsIiwhMCk/cih0LnRvcFNjcm9sbCwic2Nyb2xsIixpKTpuKHQudG9wU2Nyb2xsLCJzY3Jv
bGwiLHdpbmRvdyksaCgiZm9jdXMiLCEwKT8ocih0LnRvcEZvY3VzLCJmb2N1cyIsaSkscih0LnRv
cEJsdXIsImJsdXIiLGkpKTpoKCJmb2N1c2luIikmJihuKHQudG9wRm9jdXMsImZvY3VzaW4iLGkp
LG4odC50b3BCbHVyLCJmb2N1c291dCIsaSkpfXZhciBhPWUoIi4vRXZlbnRDb25zdGFudHMiKSxz
PWUoIi4vRXZlbnRMaXN0ZW5lciIpLHU9ZSgiLi9FdmVudFBsdWdpbkh1YiIpLGw9ZSgiLi9FeGVj
dXRpb25FbnZpcm9ubWVudCIpLGM9ZSgiLi9SZWFjdFVwZGF0ZXMiKSxwPWUoIi4vVmlld3BvcnRN
ZXRyaWNzIiksZD1lKCIuL2ludmFyaWFudCIpLGg9ZSgiLi9pc0V2ZW50U3VwcG9ydGVkIiksZj0h
MSx2PXtUb3BMZXZlbENhbGxiYWNrQ3JlYXRvcjpudWxsLGVuc3VyZUxpc3RlbmluZzpmdW5jdGlv
bihlLHQpe2QobC5jYW5Vc2VET00pLGZ8fCh2LlRvcExldmVsQ2FsbGJhY2tDcmVhdG9yPXQsaShl
KSxmPSEwKX0sc2V0RW5hYmxlZDpmdW5jdGlvbihlKXtkKGwuY2FuVXNlRE9NKSx2LlRvcExldmVs
Q2FsbGJhY2tDcmVhdG9yJiZ2LlRvcExldmVsQ2FsbGJhY2tDcmVhdG9yLnNldEVuYWJsZWQoZSl9
LGlzRW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiEoIXYuVG9wTGV2ZWxDYWxsYmFja0NyZWF0b3J8
fCF2LlRvcExldmVsQ2FsbGJhY2tDcmVhdG9yLmlzRW5hYmxlZCgpKX0saGFuZGxlVG9wTGV2ZWw6
ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89dS5leHRyYWN0RXZlbnRzKGUsdCxuLHIpO2MuYmF0Y2hl
ZFVwZGF0ZXMoZnVuY3Rpb24oKXt1LmVucXVldWVFdmVudHMobyksdS5wcm9jZXNzRXZlbnRRdWV1
ZSgpfSl9LHJlZ2lzdHJhdGlvbk5hbWVzOnUucmVnaXN0cmF0aW9uTmFtZXMscHV0TGlzdGVuZXI6
dS5wdXRMaXN0ZW5lcixnZXRMaXN0ZW5lcjp1LmdldExpc3RlbmVyLGRlbGV0ZUxpc3RlbmVyOnUu
ZGVsZXRlTGlzdGVuZXIsZGVsZXRlQWxsTGlzdGVuZXJzOnUuZGVsZXRlQWxsTGlzdGVuZXJzLHRy
YXBCdWJibGVkRXZlbnQ6bix0cmFwQ2FwdHVyZWRFdmVudDpyfTt0LmV4cG9ydHM9dn0oKX0seyIu
L0V2ZW50Q29uc3RhbnRzIjoxMywiLi9FdmVudExpc3RlbmVyIjoxNCwiLi9FdmVudFBsdWdpbkh1
YiI6MTUsIi4vRXhlY3V0aW9uRW52aXJvbm1lbnQiOjE5LCIuL1JlYWN0VXBkYXRlcyI6NDgsIi4v
Vmlld3BvcnRNZXRyaWNzIjo1OSwiLi9pbnZhcmlhbnQiOjc1LCIuL2lzRXZlbnRTdXBwb3J0ZWQi
Ojc2fV0sMzQ6W2Z1bmN0aW9uKGUsdCl7IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBuPWUo
Ii4vRXhlY3V0aW9uRW52aXJvbm1lbnQiKSxyPWUoIi4vUmVhY3RFdmVudEVtaXR0ZXIiKSxvPWUo
Ii4vUmVhY3RJRCIpLGk9ZSgiLi9SZWFjdEluc3RhbmNlSGFuZGxlcyIpLGE9ZSgiLi9nZXRFdmVu
dFRhcmdldCIpLHM9ITAsdT17c2V0RW5hYmxlZDpmdW5jdGlvbihlKXtzPSEhZX0saXNFbmFibGVk
OmZ1bmN0aW9uKCl7cmV0dXJuIHN9LGNyZWF0ZVRvcExldmVsQ2FsbGJhY2s6ZnVuY3Rpb24oZSl7
cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKHMpe3Quc3JjRWxlbWVudCYmdC5zcmNFbGVtZW50IT09dC50
YXJnZXQmJih0LnRhcmdldD10LnNyY0VsZW1lbnQpO3ZhciB1PWkuZ2V0Rmlyc3RSZWFjdERPTShh
KHQpKXx8bi5nbG9iYWwsbD1vLmdldElEKHUpfHwiIjtyLmhhbmRsZVRvcExldmVsKGUsdSxsLHQp
fX19fTt0LmV4cG9ydHM9dX0oKX0seyIuL0V4ZWN1dGlvbkVudmlyb25tZW50IjoxOSwiLi9SZWFj
dEV2ZW50RW1pdHRlciI6MzMsIi4vUmVhY3RJRCI6MzUsIi4vUmVhY3RJbnN0YW5jZUhhbmRsZXMi
OjM3LCIuL2dldEV2ZW50VGFyZ2V0Ijo3MH1dLDM1OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJp
Y3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9byhlKTtpZih0KWlmKGguaGFzT3duUHJvcGVydHkodCkp
e3ZhciBuPWhbdF07biE9PWUmJihjKCFzKG4sdCkpLGhbdF09ZSl9ZWxzZSBoW3RdPWU7cmV0dXJu
IHR9ZnVuY3Rpb24gbyhlKXtpZihlJiZlLmdldEF0dHJpYnV0ZU5vZGUpe3ZhciB0PWUuZ2V0QXR0
cmlidXRlTm9kZShkKTtpZih0KXJldHVybiB0LnZhbHVlfHwiIn1yZXR1cm4iIn1mdW5jdGlvbiBp
KGUsdCl7dmFyIG49byhlKTtuIT09dCYmZGVsZXRlIGhbbl0sZS5zZXRBdHRyaWJ1dGUoZCx0KSxo
W3RdPWV9ZnVuY3Rpb24gYShlKXtyZXR1cm4gaC5oYXNPd25Qcm9wZXJ0eShlKSYmcyhoW2VdLGUp
fHwoaFtlXT1wLmZpbmRSZWFjdE5vZGVCeUlEKGUpKSxoW2VdfWZ1bmN0aW9uIHMoZSx0KXtpZihl
KXtjKG8oZSk9PT10KTt2YXIgbj1wLmZpbmRSZWFjdENvbnRhaW5lckZvcklEKHQpO2lmKG4mJnUo
bixlKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiB1KGUsdCl7aWYoZS5jb250YWlucylyZXR1
cm4gZS5jb250YWlucyh0KTtpZih0PT09ZSlyZXR1cm4hMDtmb3IoMz09PXQubm9kZVR5cGUmJih0
PXQucGFyZW50Tm9kZSk7dCYmMT09PXQubm9kZVR5cGU7KXtpZih0PT09ZSlyZXR1cm4hMDt0PXQu
cGFyZW50Tm9kZX1yZXR1cm4hMX1mdW5jdGlvbiBsKGUpe2RlbGV0ZSBoW2VdfXZhciBjPWUoIi4v
aW52YXJpYW50IikscD1lKCIuL1JlYWN0TW91bnQiKSxkPSJkYXRhLXJlYWN0aWQiLGg9e307bi5B
VFRSX05BTUU9ZCxuLmdldElEPXIsbi5yYXdHZXRJRD1vLG4uc2V0SUQ9aSxuLmdldE5vZGU9YSxu
LnB1cmdlSUQ9bH0seyIuL1JlYWN0TW91bnQiOjM4LCIuL2ludmFyaWFudCI6NzV9XSwzNjpbZnVu
Y3Rpb24oZSx0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe3RyeXtyZXR1cm4gZG9jdW1lbnQu
YWN0aXZlRWxlbWVudH1jYXRjaChlKXt9fWZ1bmN0aW9uIHIoZSl7cmV0dXJuIGRvY3VtZW50LmRv
Y3VtZW50RWxlbWVudC5jb250YWlucyhlKX12YXIgbz17aGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVz
OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYoIklOUFVUIj09PWUubm9kZU5hbWUmJiJ0ZXh0Ij09PWUu
dHlwZXx8IlRFWFRBUkVBIj09PWUubm9kZU5hbWV8fCJ0cnVlIj09PWUuY29udGVudEVkaXRhYmxl
KX0sZ2V0U2VsZWN0aW9uSW5mb3JtYXRpb246ZnVuY3Rpb24oKXt2YXIgZT1uKCk7cmV0dXJue2Zv
Y3VzZWRFbGVtOmUsc2VsZWN0aW9uUmFuZ2U6by5oYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMoZSk/
by5nZXRTZWxlY3Rpb24oZSk6bnVsbH19LHJlc3RvcmVTZWxlY3Rpb246ZnVuY3Rpb24oZSl7dmFy
IHQ9bigpLGk9ZS5mb2N1c2VkRWxlbSxhPWUuc2VsZWN0aW9uUmFuZ2U7dCE9PWkmJnIoaSkmJihv
Lmhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhpKSYmby5zZXRTZWxlY3Rpb24oaSxhKSxpLmZvY3Vz
KCkpfSxnZXRTZWxlY3Rpb246ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoInRydWUiPT09ZS5jb250ZW50
RWRpdGFibGUmJndpbmRvdy5nZXRTZWxlY3Rpb24pe3Q9d2luZG93LmdldFNlbGVjdGlvbigpLmdl
dFJhbmdlQXQoMCk7dmFyIG49dC5jb21tb25BbmNlc3RvckNvbnRhaW5lcjtyZXR1cm4gbiYmMz09
PW4ubm9kZVR5cGUmJihuPW4ucGFyZW50Tm9kZSksbiE9PWU/e3N0YXJ0OjAsZW5kOjB9OntzdGFy
dDp0LnN0YXJ0T2Zmc2V0LGVuZDp0LmVuZE9mZnNldH19aWYoIWRvY3VtZW50LnNlbGVjdGlvbily
ZXR1cm57c3RhcnQ6ZS5zZWxlY3Rpb25TdGFydCxlbmQ6ZS5zZWxlY3Rpb25FbmR9O2lmKHQ9ZG9j
dW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCksdC5wYXJlbnRFbGVtZW50KCkhPT1lKXJldHVy
bntzdGFydDowLGVuZDowfTt2YXIgcj1lLnZhbHVlLmxlbmd0aDtpZigiSU5QVVQiPT09ZS5ub2Rl
TmFtZSlyZXR1cm57c3RhcnQ6LXQubW92ZVN0YXJ0KCJjaGFyYWN0ZXIiLC1yKSxlbmQ6LXQubW92
ZUVuZCgiY2hhcmFjdGVyIiwtcil9O3ZhciBvPXQuZHVwbGljYXRlKCk7by5tb3ZlVG9FbGVtZW50
VGV4dChlKSxvLnNldEVuZFBvaW50KCJTdGFydFRvRW5kIix0KTt2YXIgaT1yLW8udGV4dC5sZW5n
dGg7cmV0dXJuIG8uc2V0RW5kUG9pbnQoIlN0YXJ0VG9TdGFydCIsdCkse3N0YXJ0OnItby50ZXh0
Lmxlbmd0aCxlbmQ6aX19LHNldFNlbGVjdGlvbjpmdW5jdGlvbihlLHQpe3ZhciBuLHI9dC5zdGFy
dCxvPXQuZW5kO2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgbyYmKG89ciksZG9jdW1lbnQuc2VsZWN0
aW9uKXtpZigiVEVYVEFSRUEiPT09ZS50YWdOYW1lKXt2YXIgaT0oZS52YWx1ZS5zbGljZSgwLHIp
Lm1hdGNoKC9cci9nKXx8W10pLmxlbmd0aCxhPShlLnZhbHVlLnNsaWNlKHIsbykubWF0Y2goL1xy
L2cpfHxbXSkubGVuZ3RoO3ItPWksby09aSthfW49ZS5jcmVhdGVUZXh0UmFuZ2UoKSxuLmNvbGxh
cHNlKCEwKSxuLm1vdmVTdGFydCgiY2hhcmFjdGVyIixyKSxuLm1vdmVFbmQoImNoYXJhY3RlciIs
by1yKSxuLnNlbGVjdCgpfWVsc2UgaWYoInRydWUiPT09ZS5jb250ZW50RWRpdGFibGUpe2lmKDE9
PT1lLmNoaWxkTm9kZXMubGVuZ3RoKXtuPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCksbi5zZXRTdGFy
dChlLmNoaWxkTm9kZXNbMF0sciksbi5zZXRFbmQoZS5jaGlsZE5vZGVzWzBdLG8pO3ZhciBzPXdp
bmRvdy5nZXRTZWxlY3Rpb24oKTtzLnJlbW92ZUFsbFJhbmdlcygpLHMuYWRkUmFuZ2Uobil9fWVs
c2UgZS5zZWxlY3Rpb25TdGFydD1yLGUuc2VsZWN0aW9uRW5kPU1hdGgubWluKG8sZS52YWx1ZS5s
ZW5ndGgpLGUuZm9jdXMoKX19O3QuZXhwb3J0cz1vfSx7fV0sMzc6W2Z1bmN0aW9uKGUsdCl7InVz
ZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGQrInJbIitlLnRvU3RyaW5nKDM2KSsiXSJ9
ZnVuY3Rpb24gcihlLHQpe3JldHVybiBlLmNoYXJBdCh0KT09PWR8fHQ9PT1lLmxlbmd0aH1mdW5j
dGlvbiBvKGUpe3JldHVybiIiPT09ZXx8ZS5jaGFyQXQoMCk9PT1kJiZlLmNoYXJBdChlLmxlbmd0
aC0xKSE9PWR9ZnVuY3Rpb24gaShlLHQpe3JldHVybiAwPT09dC5pbmRleE9mKGUpJiZyKHQsZS5s
ZW5ndGgpfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIGU/ZS5zdWJzdHIoMCxlLmxhc3RJbmRleE9mKGQp
KToiIn1mdW5jdGlvbiBzKGUsdCl7aWYocChvKGUpJiZvKHQpKSxwKGkoZSx0KSksZT09PXQpcmV0
dXJuIGU7Zm9yKHZhciBuPWUubGVuZ3RoK2gsYT1uO2E8dC5sZW5ndGgmJiFyKHQsYSk7YSsrKTty
ZXR1cm4gdC5zdWJzdHIoMCxhKX1mdW5jdGlvbiB1KGUsdCl7dmFyIG49TWF0aC5taW4oZS5sZW5n
dGgsdC5sZW5ndGgpO2lmKDA9PT1uKXJldHVybiIiO2Zvcih2YXIgaT0wLGE9MDtuPj1hO2ErKylp
ZihyKGUsYSkmJnIodCxhKSlpPWE7ZWxzZSBpZihlLmNoYXJBdChhKSE9PXQuY2hhckF0KGEpKWJy
ZWFrO3ZhciBzPWUuc3Vic3RyKDAsaSk7cmV0dXJuIHAobyhzKSksc31mdW5jdGlvbiBsKGUsdCxu
LHIsbyx1KXtlPWV8fCIiLHQ9dHx8IiIscChlIT09dCk7dmFyIGw9aSh0LGUpO3AobHx8aShlLHQp
KTtmb3IodmFyIGM9MCxkPWw/YTpzLGg9ZTtvJiZoPT09ZXx8dSYmaD09PXR8fG4oaCxsLHIpLGgh
PT10O2g9ZChoLHQpKXAoYysrPGYpfXZhciBjPWUoIi4vUmVhY3RJRCIpLHA9ZSgiLi9pbnZhcmlh
bnQiKSxkPSIuIixoPWQubGVuZ3RoLGY9MTAwLHY9OTk5OTk5OSxtPXtzZXBhcmF0b3I6ZCxjcmVh
dGVSZWFjdFJvb3RJRDpmdW5jdGlvbigpe3JldHVybiBuKE1hdGguY2VpbChNYXRoLnJhbmRvbSgp
KnYpKX0saXNSZW5kZXJlZEJ5UmVhY3Q6ZnVuY3Rpb24oZSl7aWYoMSE9PWUubm9kZVR5cGUpcmV0
dXJuITE7dmFyIHQ9Yy5nZXRJRChlKTtyZXR1cm4gdD90LmNoYXJBdCgwKT09PWQ6ITF9LGdldEZp
cnN0UmVhY3RET006ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWU7dCYmdC5wYXJlbnROb2RlIT09dDsp
e2lmKG0uaXNSZW5kZXJlZEJ5UmVhY3QodCkpcmV0dXJuIHQ7dD10LnBhcmVudE5vZGV9cmV0dXJu
IG51bGx9LGZpbmRDb21wb25lbnRSb290OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVtlLmZpcnN0
Q2hpbGRdLHI9MDtyPG4ubGVuZ3RoOylmb3IodmFyIG89bltyKytdO287KXt2YXIgYT1jLmdldElE
KG8pO2lmKGEpe2lmKHQ9PT1hKXJldHVybiBvO2lmKGkoYSx0KSl7bi5sZW5ndGg9cj0wLG4ucHVz
aChvLmZpcnN0Q2hpbGQpO2JyZWFrfW4ucHVzaChvLmZpcnN0Q2hpbGQpfWVsc2Ugbi5wdXNoKG8u
Zmlyc3RDaGlsZCk7bz1vLm5leHRTaWJsaW5nfXAoITEpfSxnZXRSZWFjdFJvb3RJREZyb21Ob2Rl
SUQ6ZnVuY3Rpb24oZSl7dmFyIHQ9L1wuclxbW15cXV0rXF0vLmV4ZWMoZSk7cmV0dXJuIHQmJnRb
MF19LHRyYXZlcnNlRW50ZXJMZWF2ZTpmdW5jdGlvbihlLHQsbixyLG8pe3ZhciBpPXUoZSx0KTtp
IT09ZSYmbChlLGksbixyLCExLCEwKSxpIT09dCYmbChpLHQsbixvLCEwLCExKX0sdHJhdmVyc2VU
d29QaGFzZTpmdW5jdGlvbihlLHQsbil7ZSYmKGwoIiIsZSx0LG4sITAsITEpLGwoZSwiIix0LG4s
ITEsITApKX0sX2dldEZpcnN0Q29tbW9uQW5jZXN0b3JJRDp1LF9nZXROZXh0RGVzY2VuZGFudElE
OnN9O3QuZXhwb3J0cz1tfSx7Ii4vUmVhY3RJRCI6MzUsIi4vaW52YXJpYW50Ijo3NX1dLDM4Oltm
dW5jdGlvbihlLHQpeyFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVy
biBlJiZlLmZpcnN0Q2hpbGR9ZnVuY3Rpb24gcihlKXt2YXIgdD1uKGUpO3JldHVybiB0JiZzLmdl
dElEKHQpfWUoIi4vaW52YXJpYW50Iik7dmFyIG89ZSgiLi9SZWFjdEV2ZW50RW1pdHRlciIpLGk9
ZSgiLi9SZWFjdEluc3RhbmNlSGFuZGxlcyIpLGE9ZSgiLi9SZWFjdEV2ZW50VG9wTGV2ZWxDYWxs
YmFjayIpLHM9ZSgiLi9SZWFjdElEIiksdT1lKCIuLyQiKSxsPXt9LGM9e30scD17dG90YWxJbnN0
YW50aWF0aW9uVGltZTowLHRvdGFsSW5qZWN0aW9uVGltZTowLHVzZVRvdWNoRXZlbnRzOiExLHNj
cm9sbE1vbml0b3I6ZnVuY3Rpb24oZSx0KXt0KCl9LHByZXBhcmVUb3BMZXZlbEV2ZW50czpmdW5j
dGlvbihlKXtvLmVuc3VyZUxpc3RlbmluZyhwLnVzZVRvdWNoRXZlbnRzLGUpfSxfdXBkYXRlUm9v
dENvbXBvbmVudDpmdW5jdGlvbihlLHQsbixyKXt2YXIgbz10LnByb3BzO3JldHVybiBwLnNjcm9s
bE1vbml0b3IobixmdW5jdGlvbigpe2UucmVwbGFjZVByb3BzKG8scil9KSxlfSxfcmVnaXN0ZXJD
b21wb25lbnQ6ZnVuY3Rpb24oZSx0KXtwLnByZXBhcmVUb3BMZXZlbEV2ZW50cyhhKTt2YXIgbj1w
LnJlZ2lzdGVyQ29udGFpbmVyKHQpO3JldHVybiBsW25dPWUsbn0sX3JlbmRlck5ld1Jvb3RDb21w
b25lbnQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXAuX3JlZ2lzdGVyQ29tcG9uZW50KGUsdCk7cmV0
dXJuIGUubW91bnRDb21wb25lbnRJbnRvTm9kZShyLHQsbiksZX0scmVuZGVyQ29tcG9uZW50OmZ1
bmN0aW9uKGUsdCxvKXt2YXIgYT1sW3IodCldO2lmKGEpe2lmKGEuY29uc3RydWN0b3I9PT1lLmNv
bnN0cnVjdG9yKXJldHVybiBwLl91cGRhdGVSb290Q29tcG9uZW50KGEsZSx0LG8pO3AudW5tb3Vu
dEFuZFJlbGVhc2VSZWFjdFJvb3ROb2RlKHQpfXZhciBzPW4odCksdT1zJiZpLmlzUmVuZGVyZWRC
eVJlYWN0KHMpLGM9dSYmIWEsZD1wLl9yZW5kZXJOZXdSb290Q29tcG9uZW50KGUsdCxjKTtyZXR1
cm4gbyYmbygpLGR9LGNvbnN0cnVjdEFuZFJlbmRlckNvbXBvbmVudDpmdW5jdGlvbihlLHQsbil7
cmV0dXJuIHAucmVuZGVyQ29tcG9uZW50KGUodCksbil9LGNvbnN0cnVjdEFuZFJlbmRlckNvbXBv
bmVudEJ5SUQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBwLmNvbnN0cnVjdEFuZFJlbmRlckNvbXBv
bmVudChlLHQsdShuKSl9LHJlZ2lzdGVyQ29udGFpbmVyOmZ1bmN0aW9uKGUpe3ZhciB0PXIoZSk7
cmV0dXJuIHQmJih0PWkuZ2V0UmVhY3RSb290SURGcm9tTm9kZUlEKHQpKSx0fHwodD1pLmNyZWF0
ZVJlYWN0Um9vdElEKCkpLGNbdF09ZSx0fSx1bm1vdW50QW5kUmVsZWFzZVJlYWN0Um9vdE5vZGU6
ZnVuY3Rpb24oZSl7dmFyIHQ9cihlKSxuPWxbdF07cmV0dXJuIG4/KG4udW5tb3VudENvbXBvbmVu
dEZyb21Ob2RlKGUpLGRlbGV0ZSBsW3RdLGRlbGV0ZSBjW3RdLCEwKTohMX0sZmluZFJlYWN0Q29u
dGFpbmVyRm9ySUQ6ZnVuY3Rpb24oZSl7dmFyIHQ9aS5nZXRSZWFjdFJvb3RJREZyb21Ob2RlSUQo
ZSksbj1jW3RdO3JldHVybiBufSxmaW5kUmVhY3ROb2RlQnlJRDpmdW5jdGlvbihlKXt2YXIgdD1w
LmZpbmRSZWFjdENvbnRhaW5lckZvcklEKGUpO3JldHVybiBpLmZpbmRDb21wb25lbnRSb290KHQs
ZSl9fTt0LmV4cG9ydHM9cH0oKX0seyIuLyQiOjEsIi4vUmVhY3RFdmVudEVtaXR0ZXIiOjMzLCIu
L1JlYWN0RXZlbnRUb3BMZXZlbENhbGxiYWNrIjozNCwiLi9SZWFjdElEIjozNSwiLi9SZWFjdElu
c3RhbmNlSGFuZGxlcyI6MzcsIi4vaW52YXJpYW50Ijo3NX1dLDM5OltmdW5jdGlvbihlLHQpeyFm
dW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUsdCl7cmV0dXJuIGUmJnQmJmUuY29u
c3RydWN0b3I9PT10LmNvbnN0cnVjdG9yfXZhciByPWUoIi4vUmVhY3RDb21wb25lbnQiKSxvPXtl
bnF1ZXVlTWFya3VwQXQ6ZnVuY3Rpb24oZSx0KXt0aGlzLmRvbU9wZXJhdGlvbnM9dGhpcy5kb21P
cGVyYXRpb25zfHxbXSx0aGlzLmRvbU9wZXJhdGlvbnMucHVzaCh7aW5zZXJ0TWFya3VwOmUsZmlu
YWxJbmRleDp0fSl9LGVucXVldWVNb3ZlOmZ1bmN0aW9uKGUsdCl7dGhpcy5kb21PcGVyYXRpb25z
PXRoaXMuZG9tT3BlcmF0aW9uc3x8W10sdGhpcy5kb21PcGVyYXRpb25zLnB1c2goe21vdmVGcm9t
OmUsZmluYWxJbmRleDp0fSl9LGVucXVldWVVbm1vdW50Q2hpbGRCeU5hbWU6ZnVuY3Rpb24oZSx0
KXtyLmlzVmFsaWRDb21wb25lbnQodCkmJih0aGlzLmRvbU9wZXJhdGlvbnM9dGhpcy5kb21PcGVy
YXRpb25zfHxbXSx0aGlzLmRvbU9wZXJhdGlvbnMucHVzaCh7cmVtb3ZlQXQ6dC5fZG9tSW5kZXh9
KSx0LnVubW91bnRDb21wb25lbnQmJnQudW5tb3VudENvbXBvbmVudCgpLGRlbGV0ZSB0aGlzLl9y
ZW5kZXJlZENoaWxkcmVuW2VdKX0scHJvY2Vzc0NoaWxkRE9NT3BlcmF0aW9uc1F1ZXVlOmZ1bmN0
aW9uKCl7dGhpcy5kb21PcGVyYXRpb25zJiYoci5ET01JRE9wZXJhdGlvbnMubWFuYWdlQ2hpbGRy
ZW5CeVBhcmVudElEKHRoaXMuX3Jvb3ROb2RlSUQsdGhpcy5kb21PcGVyYXRpb25zKSx0aGlzLmRv
bU9wZXJhdGlvbnM9bnVsbCl9LHVubW91bnRNdWx0aUNoaWxkOmZ1bmN0aW9uKCl7dmFyIGU9dGhp
cy5fcmVuZGVyZWRDaGlsZHJlbjtmb3IodmFyIHQgaW4gZSlpZihlLmhhc093blByb3BlcnR5KHQp
JiZlW3RdKXt2YXIgbj1lW3RdO24udW5tb3VudENvbXBvbmVudCYmbi51bm1vdW50Q29tcG9uZW50
KCl9dGhpcy5fcmVuZGVyZWRDaGlsZHJlbj1udWxsfSxtb3VudE11bHRpQ2hpbGQ6ZnVuY3Rpb24o
ZSx0KXt2YXIgbj0iIixyPTA7Zm9yKHZhciBvIGluIGUpe3ZhciBpPWVbb107ZS5oYXNPd25Qcm9w
ZXJ0eShvKSYmaSYmKG4rPWkubW91bnRDb21wb25lbnQodGhpcy5fcm9vdE5vZGVJRCsiLiIrbyx0
KSxpLl9kb21JbmRleD1yLHIrKyl9cmV0dXJuIHRoaXMuX3JlbmRlcmVkQ2hpbGRyZW49ZSx0aGlz
LmRvbU9wZXJhdGlvbnM9bnVsbCxufSx1cGRhdGVNdWx0aUNoaWxkOmZ1bmN0aW9uKGUsdCl7aWYo
ZXx8dGhpcy5fcmVuZGVyZWRDaGlsZHJlbil7ZSYmIXRoaXMuX3JlbmRlcmVkQ2hpbGRyZW4/dGhp
cy5fcmVuZGVyZWRDaGlsZHJlbj17fTohZSYmdGhpcy5fcmVuZGVyZWRDaGlsZHJlbiYmKGU9e30p
O3ZhciByPXRoaXMuX3Jvb3ROb2RlSUQrIi4iLG89bnVsbCxpPTAsYT0wLHM9MDtmb3IodmFyIHUg
aW4gZSlpZihlLmhhc093blByb3BlcnR5KHUpKXt2YXIgbD10aGlzLl9yZW5kZXJlZENoaWxkcmVu
W3VdLGM9ZVt1XTtpZihuKGwsYykpbyYmKHRoaXMuZW5xdWV1ZU1hcmt1cEF0KG8sYS1pKSxvPW51
bGwpLGk9MCxsLl9kb21JbmRleDxzJiZ0aGlzLmVucXVldWVNb3ZlKGwuX2RvbUluZGV4LGEpLHM9
TWF0aC5tYXgobC5fZG9tSW5kZXgscyksbC5yZWNlaXZlUHJvcHMoYy5wcm9wcyx0KSxsLl9kb21J
bmRleD1hO2Vsc2UgaWYobCYmKHRoaXMuZW5xdWV1ZVVubW91bnRDaGlsZEJ5TmFtZSh1LGwpLHM9
TWF0aC5tYXgobC5fZG9tSW5kZXgscykpLGMpe3RoaXMuX3JlbmRlcmVkQ2hpbGRyZW5bdV09Yzt2
YXIgcD1jLm1vdW50Q29tcG9uZW50KHIrdSx0KTtvPW8/bytwOnAsaSsrLGMuX2RvbUluZGV4PWF9
YT1jP2ErMTphfW8mJnRoaXMuZW5xdWV1ZU1hcmt1cEF0KG8sYS1pKTtmb3IodmFyIGQgaW4gdGhp
cy5fcmVuZGVyZWRDaGlsZHJlbilpZih0aGlzLl9yZW5kZXJlZENoaWxkcmVuLmhhc093blByb3Bl
cnR5KGQpKXt2YXIgaD10aGlzLl9yZW5kZXJlZENoaWxkcmVuW2RdO2gmJiFlW2RdJiZ0aGlzLmVu
cXVldWVVbm1vdW50Q2hpbGRCeU5hbWUoZCxoKX10aGlzLnByb2Nlc3NDaGlsZERPTU9wZXJhdGlv
bnNRdWV1ZSgpfX19LGk9e01peGluOm99O3QuZXhwb3J0cz1pfSgpfSx7Ii4vUmVhY3RDb21wb25l
bnQiOjIyfV0sNDA6W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7ZSYm
KGgobnVsbD09ZS5jaGlsZHJlbnx8bnVsbD09ZS5kYW5nZXJvdXNseVNldElubmVySFRNTCksaChu
dWxsPT1lLnN0eWxlfHwib2JqZWN0Ij09dHlwZW9mIGUuc3R5bGUpKX1mdW5jdGlvbiByKGUsdCl7
dGhpcy5fdGFnT3Blbj0iPCIrZSx0aGlzLl90YWdDbG9zZT10PyIiOiI8LyIrZSsiPiIsdGhpcy50
YWdOYW1lPWUudG9VcHBlckNhc2UoKX12YXIgbz1lKCIuL0NTU1Byb3BlcnR5T3BlcmF0aW9ucyIp
LGk9ZSgiLi9ET01Qcm9wZXJ0eSIpLGE9ZSgiLi9ET01Qcm9wZXJ0eU9wZXJhdGlvbnMiKSxzPWUo
Ii4vUmVhY3RDb21wb25lbnQiKSx1PWUoIi4vUmVhY3RFdmVudEVtaXR0ZXIiKSxsPWUoIi4vUmVh
Y3RNdWx0aUNoaWxkIiksYz1lKCIuL1JlYWN0SUQiKSxwPWUoIi4vZXNjYXBlVGV4dEZvckJyb3dz
ZXIiKSxkPWUoIi4vZmxhdHRlbkNoaWxkcmVuIiksaD1lKCIuL2ludmFyaWFudCIpLGY9ZSgiLi9r
ZXlPZiIpLHY9ZSgiLi9tZXJnZSIpLG09ZSgiLi9taXhJbnRvIiksZz11LnB1dExpc3RlbmVyLHk9
dS5kZWxldGVMaXN0ZW5lcixDPXUucmVnaXN0cmF0aW9uTmFtZXMsRT17c3RyaW5nOiEwLG51bWJl
cjohMH0sRD1mKHtkYW5nZXJvdXNseVNldElubmVySFRNTDpudWxsfSksTT1mKHtzdHlsZTpudWxs
fSk7ci5NaXhpbj17bW91bnRDb21wb25lbnQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcy5NaXhpbi5t
b3VudENvbXBvbmVudC5jYWxsKHRoaXMsZSx0KSxuKHRoaXMucHJvcHMpLHRoaXMuX2NyZWF0ZU9w
ZW5UYWdNYXJrdXAoKSt0aGlzLl9jcmVhdGVDb250ZW50TWFya3VwKHQpK3RoaXMuX3RhZ0Nsb3Nl
fSxfY3JlYXRlT3BlblRhZ01hcmt1cDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD10aGlz
Ll90YWdPcGVuO2Zvcih2YXIgbiBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkobikpe3ZhciByPWVb
bl07aWYobnVsbCE9cilpZihDW25dKWcodGhpcy5fcm9vdE5vZGVJRCxuLHIpO2Vsc2V7bj09PU0m
JihyJiYocj1lLnN0eWxlPXYoZS5zdHlsZSkpLHI9by5jcmVhdGVNYXJrdXBGb3JTdHlsZXMocikp
O3ZhciBpPWEuY3JlYXRlTWFya3VwRm9yUHJvcGVydHkobixyKTtpJiYodCs9IiAiK2kpfX12YXIg
cz1wKHRoaXMuX3Jvb3ROb2RlSUQpO3JldHVybiB0KyIgIitjLkFUVFJfTkFNRSsnPSInK3MrJyI+
J30sX2NyZWF0ZUNvbnRlbnRNYXJrdXA6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9wcy5kYW5n
ZXJvdXNseVNldElubmVySFRNTDtpZihudWxsIT10KXtpZihudWxsIT10Ll9faHRtbClyZXR1cm4g
dC5fX2h0bWx9ZWxzZXt2YXIgbj1FW3R5cGVvZiB0aGlzLnByb3BzLmNoaWxkcmVuXT90aGlzLnBy
b3BzLmNoaWxkcmVuOm51bGwscj1udWxsIT1uP251bGw6dGhpcy5wcm9wcy5jaGlsZHJlbjtpZihu
dWxsIT1uKXJldHVybiBwKG4pO2lmKG51bGwhPXIpcmV0dXJuIHRoaXMubW91bnRNdWx0aUNoaWxk
KGQociksZSl9cmV0dXJuIiJ9LHJlY2VpdmVQcm9wczpmdW5jdGlvbihlLHQpe24oZSkscy5NaXhp
bi5yZWNlaXZlUHJvcHMuY2FsbCh0aGlzLGUsdCl9LHVwZGF0ZUNvbXBvbmVudDpmdW5jdGlvbihl
LHQpe3MuTWl4aW4udXBkYXRlQ29tcG9uZW50LmNhbGwodGhpcyxlLHQpLHRoaXMuX3VwZGF0ZURP
TVByb3BlcnRpZXModCksdGhpcy5fdXBkYXRlRE9NQ2hpbGRyZW4odCxlKX0sX3VwZGF0ZURPTVBy
b3BlcnRpZXM6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLG89dGhpcy5wcm9wcztmb3IodCBpbiBlKWlm
KCFvLmhhc093blByb3BlcnR5KHQpJiZlLmhhc093blByb3BlcnR5KHQpKWlmKHQ9PT1NKXt2YXIg
YT1lW3RdO2ZvcihuIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShuKSYmKHI9cnx8e30scltuXT0iIil9
ZWxzZSB0PT09RD9zLkRPTUlET3BlcmF0aW9ucy51cGRhdGVUZXh0Q29udGVudEJ5SUQodGhpcy5f
cm9vdE5vZGVJRCwiIik6Q1t0XT95KHRoaXMuX3Jvb3ROb2RlSUQsdCk6cy5ET01JRE9wZXJhdGlv
bnMuZGVsZXRlUHJvcGVydHlCeUlEKHRoaXMuX3Jvb3ROb2RlSUQsdCk7Zm9yKHQgaW4gbyl7dmFy
IHU9b1t0XSxsPWVbdF07aWYoby5oYXNPd25Qcm9wZXJ0eSh0KSYmdSE9PWwpaWYodD09PU0paWYo
dSYmKHU9by5zdHlsZT12KHUpKSxsKXtmb3IobiBpbiBsKWwuaGFzT3duUHJvcGVydHkobikmJiF1
Lmhhc093blByb3BlcnR5KG4pJiYocj1yfHx7fSxyW25dPSIiKTtmb3IobiBpbiB1KXUuaGFzT3du
UHJvcGVydHkobikmJmxbbl0hPT11W25dJiYocj1yfHx7fSxyW25dPXVbbl0pfWVsc2Ugcj11O2Vs
c2UgaWYodD09PUQpe3ZhciBjPWwmJmwuX19odG1sLHA9dSYmdS5fX2h0bWw7YyE9PXAmJnMuRE9N
SURPcGVyYXRpb25zLnVwZGF0ZUlubmVySFRNTEJ5SUQodGhpcy5fcm9vdE5vZGVJRCx1KX1lbHNl
IENbdF0/Zyh0aGlzLl9yb290Tm9kZUlELHQsdSk6KGkuaXNTdGFuZGFyZE5hbWVbdF18fGkuaXND
dXN0b21BdHRyaWJ1dGUodCkpJiZzLkRPTUlET3BlcmF0aW9ucy51cGRhdGVQcm9wZXJ0eUJ5SUQo
dGhpcy5fcm9vdE5vZGVJRCx0LHUpfXImJnMuRE9NSURPcGVyYXRpb25zLnVwZGF0ZVN0eWxlc0J5
SUQodGhpcy5fcm9vdE5vZGVJRCxyKX0sX3VwZGF0ZURPTUNoaWxkcmVuOmZ1bmN0aW9uKGUsdCl7
dmFyIG49dGhpcy5wcm9wcyxyPUVbdHlwZW9mIGUuY2hpbGRyZW5dP2UuY2hpbGRyZW46bnVsbCxv
PUVbdHlwZW9mIG4uY2hpbGRyZW5dP24uY2hpbGRyZW46bnVsbCxpPW51bGwhPXI/bnVsbDplLmNo
aWxkcmVuLGE9bnVsbCE9bz9udWxsOm4uY2hpbGRyZW47aWYobnVsbCE9byl7dmFyIHU9bnVsbCE9
aSYmbnVsbD09YTt1JiZ0aGlzLnVwZGF0ZU11bHRpQ2hpbGQobnVsbCx0KSxyIT09byYmcy5ET01J
RE9wZXJhdGlvbnMudXBkYXRlVGV4dENvbnRlbnRCeUlEKHRoaXMuX3Jvb3ROb2RlSUQsIiIrbyl9
ZWxzZXt2YXIgbD1udWxsIT1yJiZudWxsPT1vO2wmJnMuRE9NSURPcGVyYXRpb25zLnVwZGF0ZVRl
eHRDb250ZW50QnlJRCh0aGlzLl9yb290Tm9kZUlELCIiKSx0aGlzLnVwZGF0ZU11bHRpQ2hpbGQo
ZChuLmNoaWxkcmVuKSx0KX19LHVubW91bnRDb21wb25lbnQ6ZnVuY3Rpb24oKXt1LmRlbGV0ZUFs
bExpc3RlbmVycyh0aGlzLl9yb290Tm9kZUlEKSxzLk1peGluLnVubW91bnRDb21wb25lbnQuY2Fs
bCh0aGlzKSx0aGlzLnVubW91bnRNdWx0aUNoaWxkKCl9fSxtKHIscy5NaXhpbiksbShyLHIuTWl4
aW4pLG0ocixsLk1peGluKSx0LmV4cG9ydHM9cn0seyIuL0NTU1Byb3BlcnR5T3BlcmF0aW9ucyI6
MywiLi9ET01Qcm9wZXJ0eSI6NywiLi9ET01Qcm9wZXJ0eU9wZXJhdGlvbnMiOjgsIi4vUmVhY3RD
b21wb25lbnQiOjIyLCIuL1JlYWN0RXZlbnRFbWl0dGVyIjozMywiLi9SZWFjdElEIjozNSwiLi9S
ZWFjdE11bHRpQ2hpbGQiOjM5LCIuL2VzY2FwZVRleHRGb3JCcm93c2VyIjo2NSwiLi9mbGF0dGVu
Q2hpbGRyZW4iOjY3LCIuL2ludmFyaWFudCI6NzUsIi4va2V5T2YiOjc5LCIuL21lcmdlIjo4MSwi
Li9taXhJbnRvIjo4NH1dLDQxOltmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBu
KGUpe3RoaXMuX3F1ZXVlPWV8fG51bGx9dmFyIHI9ZSgiLi9Qb29sZWRDbGFzcyIpLG89ZSgiLi9t
aXhJbnRvIik7byhuLHtlbnF1ZXVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fcXVldWU9dGhpcy5fcXVl
dWV8fFtdLHRoaXMuX3F1ZXVlLnB1c2goe2NvbXBvbmVudDplLGNhbGxiYWNrOnR9KX0sbm90aWZ5
QWxsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcXVldWU7aWYoZSl7dGhpcy5fcXVldWU9bnVsbDtm
b3IodmFyIHQ9MCxuPWUubGVuZ3RoO24+dDt0Kyspe3ZhciByPWVbdF0uY29tcG9uZW50LG89ZVt0
XS5jYWxsYmFjaztvLmNhbGwocixyLmdldERPTU5vZGUoKSl9ZS5sZW5ndGg9MH19LHJlc2V0OmZ1
bmN0aW9uKCl7dGhpcy5fcXVldWU9bnVsbH0sZGVzdHJ1Y3RvcjpmdW5jdGlvbigpe3RoaXMucmVz
ZXQoKX19KSxyLmFkZFBvb2xpbmdUbyhuKSx0LmV4cG9ydHM9bn0seyIuL1Bvb2xlZENsYXNzIjoy
MCwiLi9taXhJbnRvIjo4NH1dLDQyOltmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1l
KCIuL2ludmFyaWFudCIpLHI9e2lzVmFsaWRPd25lcjpmdW5jdGlvbihlKXtyZXR1cm4hKCFlfHwi
ZnVuY3Rpb24iIT10eXBlb2YgZS5hdHRhY2hSZWZ8fCJmdW5jdGlvbiIhPXR5cGVvZiBlLmRldGFj
aFJlZil9LGFkZENvbXBvbmVudEFzUmVmVG86ZnVuY3Rpb24oZSx0LG8pe24oci5pc1ZhbGlkT3du
ZXIobykpLG8uYXR0YWNoUmVmKHQsZSl9LHJlbW92ZUNvbXBvbmVudEFzUmVmRnJvbTpmdW5jdGlv
bihlLHQsbyl7bihyLmlzVmFsaWRPd25lcihvKSksby5yZWZzW3RdPT09ZSYmby5kZXRhY2hSZWYo
dCl9LE1peGluOnthdHRhY2hSZWY6ZnVuY3Rpb24oZSx0KXtuKHQuaXNPd25lZEJ5KHRoaXMpKTt2
YXIgcj10aGlzLnJlZnN8fCh0aGlzLnJlZnM9e30pO3JbZV09dH0sZGV0YWNoUmVmOmZ1bmN0aW9u
KGUpe2RlbGV0ZSB0aGlzLnJlZnNbZV19fX07dC5leHBvcnRzPXJ9LHsiLi9pbnZhcmlhbnQiOjc1
fV0sNDM6W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGZ1
bmN0aW9uKHQsbixyKXt0W25dPXQuaGFzT3duUHJvcGVydHkobik/ZSh0W25dLHIpOnJ9fXZhciBy
PWUoIi4vZW1wdHlGdW5jdGlvbiIpLG89ZSgiLi9qb2luQ2xhc3NlcyIpLGk9ZSgiLi9tZXJnZSIp
LGE9e2NoaWxkcmVuOnIsY2xhc3NOYW1lOm4obykscmVmOnIsc3R5bGU6bihpKX0scz17VHJhbnNm
ZXJTdHJhdGVnaWVzOmEsTWl4aW46e3RyYW5zZmVyUHJvcHNUbzpmdW5jdGlvbihlKXt2YXIgdD17
fTtmb3IodmFyIG4gaW4gZS5wcm9wcyllLnByb3BzLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1l
LnByb3BzW25dKTtmb3IodmFyIHIgaW4gdGhpcy5wcm9wcylpZih0aGlzLnByb3BzLmhhc093blBy
b3BlcnR5KHIpKXt2YXIgbz1hW3JdO28/byh0LHIsdGhpcy5wcm9wc1tyXSk6dC5oYXNPd25Qcm9w
ZXJ0eShyKXx8KHRbcl09dGhpcy5wcm9wc1tyXSl9cmV0dXJuIGUucHJvcHM9dCxlfX19O3QuZXhw
b3J0cz1zfSx7Ii4vZW1wdHlGdW5jdGlvbiI6NjQsIi4vam9pbkNsYXNzZXMiOjc3LCIuL21lcmdl
Ijo4MX1dLDQ0OltmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe2Z1bmN0
aW9uIHQodCl7dmFyIG49dHlwZW9mIHQ7Im9iamVjdCI9PT1uJiZBcnJheS5pc0FycmF5KHQpJiYo
bj0iYXJyYXkiKSxzKG49PT1lKX1yZXR1cm4gaSh0KX1mdW5jdGlvbiByKGUpe2Z1bmN0aW9uIHQo
ZSl7cyhuW2VdKX12YXIgbj1hKGUpO3JldHVybiBpKHQpfWZ1bmN0aW9uIG8oZSl7ZnVuY3Rpb24g
dCh0KXtzKHQgaW5zdGFuY2VvZiBlKX1yZXR1cm4gaSh0KX1mdW5jdGlvbiBpKGUpe2Z1bmN0aW9u
IHQobil7ZnVuY3Rpb24gcih0LHIsbyl7dmFyIGk9dFtyXTtudWxsIT1pP2UoaSxyLG98fGwpOnMo
IW4pfXJldHVybiBufHwoci5pc1JlcXVpcmVkPXQoITApKSxyfXJldHVybiB0KCExKX12YXIgYT1l
KCIuL2NyZWF0ZU9iamVjdEZyb20iKSxzPWUoIi4vaW52YXJpYW50IiksdT17YXJyYXk6bigiYXJy
YXkiKSxib29sOm4oImJvb2xlYW4iKSxmdW5jOm4oImZ1bmN0aW9uIiksbnVtYmVyOm4oIm51bWJl
ciIpLG9iamVjdDpuKCJvYmplY3QiKSxzdHJpbmc6bigic3RyaW5nIiksb25lT2Y6cixpbnN0YW5j
ZU9mOm99LGw9Ijw8YW5vbnltb3VzPj4iO3QuZXhwb3J0cz11fSx7Ii4vY3JlYXRlT2JqZWN0RnJv
bSI6NjIsIi4vaW52YXJpYW50Ijo3NX1dLDQ1OltmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijtm
dW5jdGlvbiBuKCl7dGhpcy5yZWluaXRpYWxpemVUcmFuc2FjdGlvbigpLHRoaXMucmVhY3RPbkRP
TVJlYWR5PXMuZ2V0UG9vbGVkKG51bGwpfXZhciByPWUoIi4vRXhlY3V0aW9uRW52aXJvbm1lbnQi
KSxvPWUoIi4vUG9vbGVkQ2xhc3MiKSxpPWUoIi4vUmVhY3RFdmVudEVtaXR0ZXIiKSxhPWUoIi4v
UmVhY3RJbnB1dFNlbGVjdGlvbiIpLHM9ZSgiLi9SZWFjdE9uRE9NUmVhZHkiKSx1PWUoIi4vVHJh
bnNhY3Rpb24iKSxsPWUoIi4vbWl4SW50byIpLGM9e2luaXRpYWxpemU6YS5nZXRTZWxlY3Rpb25J
bmZvcm1hdGlvbixjbG9zZTphLnJlc3RvcmVTZWxlY3Rpb259LHA9e2luaXRpYWxpemU6ZnVuY3Rp
b24oKXt2YXIgZT1pLmlzRW5hYmxlZCgpO3JldHVybiBpLnNldEVuYWJsZWQoITEpLGV9LGNsb3Nl
OmZ1bmN0aW9uKGUpe2kuc2V0RW5hYmxlZChlKX19LGQ9e2luaXRpYWxpemU6ZnVuY3Rpb24oKXt0
aGlzLnJlYWN0T25ET01SZWFkeS5yZXNldCgpfSxjbG9zZTpmdW5jdGlvbigpe3RoaXMucmVhY3RP
bkRPTVJlYWR5Lm5vdGlmeUFsbCgpfX0saD1bYyxwLGRdLGY9e2dldFRyYW5zYWN0aW9uV3JhcHBl
cnM6ZnVuY3Rpb24oKXtyZXR1cm4gci5jYW5Vc2VET00/aDpbXX0sZ2V0UmVhY3RPbkRPTVJlYWR5
OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhY3RPbkRPTVJlYWR5fSxkZXN0cnVjdG9yOmZ1bmN0
aW9uKCl7cy5yZWxlYXNlKHRoaXMucmVhY3RPbkRPTVJlYWR5KSx0aGlzLnJlYWN0T25ET01SZWFk
eT1udWxsfX07bChuLHUuTWl4aW4pLGwobixmKSxvLmFkZFBvb2xpbmdUbyhuKSx0LmV4cG9ydHM9
bn0seyIuL0V4ZWN1dGlvbkVudmlyb25tZW50IjoxOSwiLi9Qb29sZWRDbGFzcyI6MjAsIi4vUmVh
Y3RFdmVudEVtaXR0ZXIiOjMzLCIuL1JlYWN0SW5wdXRTZWxlY3Rpb24iOjM2LCIuL1JlYWN0T25E
T01SZWFkeSI6NDEsIi4vVHJhbnNhY3Rpb24iOjU4LCIuL21peEludG8iOjg0fV0sNDY6W2Z1bmN0
aW9uKGUsdCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSx0KXt2YXIgbj1vLmNyZWF0ZVJlYWN0
Um9vdElEKCksaT1yLmdldFBvb2xlZCgpO2kucmVpbml0aWFsaXplVHJhbnNhY3Rpb24oKTt0cnl7
aS5wZXJmb3JtKGZ1bmN0aW9uKCl7dChlLm1vdW50Q29tcG9uZW50KG4saSkpfSxudWxsKX1maW5h
bGx5e3IucmVsZWFzZShpKX19dmFyIHI9ZSgiLi9SZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uIiks
bz1lKCIuL1JlYWN0SW5zdGFuY2VIYW5kbGVzIik7dC5leHBvcnRzPXtyZW5kZXJDb21wb25lbnRU
b1N0cmluZzpufX0seyIuL1JlYWN0SW5zdGFuY2VIYW5kbGVzIjozNywiLi9SZWFjdFJlY29uY2ls
ZVRyYW5zYWN0aW9uIjo0NX1dLDQ3OltmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1l
KCIuL1JlYWN0Q29tcG9uZW50Iikscj1lKCIuL1JlYWN0SUQiKSxvPWUoIi4vZXNjYXBlVGV4dEZv
ckJyb3dzZXIiKSxpPWUoIi4vbWl4SW50byIpLGE9ZnVuY3Rpb24oZSl7dGhpcy5jb25zdHJ1Y3Qo
e3RleHQ6ZX0pfTtpKGEsbi5NaXhpbiksaShhLHttb3VudENvbXBvbmVudDpmdW5jdGlvbihlKXty
ZXR1cm4gbi5NaXhpbi5tb3VudENvbXBvbmVudC5jYWxsKHRoaXMsZSksIjxzcGFuICIrci5BVFRS
X05BTUUrJz0iJytlKyciPicrbyh0aGlzLnByb3BzLnRleHQpKyI8L3NwYW4+In0scmVjZWl2ZVBy
b3BzOmZ1bmN0aW9uKGUpe2UudGV4dCE9PXRoaXMucHJvcHMudGV4dCYmKHRoaXMucHJvcHMudGV4
dD1lLnRleHQsbi5ET01JRE9wZXJhdGlvbnMudXBkYXRlVGV4dENvbnRlbnRCeUlEKHRoaXMuX3Jv
b3ROb2RlSUQsZS50ZXh0KSl9fSksdC5leHBvcnRzPWF9LHsiLi9SZWFjdENvbXBvbmVudCI6MjIs
Ii4vUmVhY3RJRCI6MzUsIi4vZXNjYXBlVGV4dEZvckJyb3dzZXIiOjY1LCIuL21peEludG8iOjg0
fV0sNDg6W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7aWYoaSlyZXR1
cm4gZSgpLHZvaWQgMDtpPSEwO3RyeXtlKCk7Zm9yKHZhciB0PTA7dDxhLmxlbmd0aDt0Kyspe3Zh
ciBuPWFbdF07aWYobi5pc01vdW50ZWQoKSl7dmFyIHI9bi5fcGVuZGluZ0NhbGxiYWNrcztpZihu
Ll9wZW5kaW5nQ2FsbGJhY2tzPW51bGwsbi5wZXJmb3JtVXBkYXRlSWZOZWNlc3NhcnkoKSxyKWZv
cih2YXIgbz0wO288ci5sZW5ndGg7bysrKXJbb10oKX19fWNhdGNoKHMpe3Rocm93IHN9ZmluYWxs
eXthLmxlbmd0aD0wLGk9ITF9fWZ1bmN0aW9uIHIoZSx0KXtyZXR1cm4gbyghdHx8ImZ1bmN0aW9u
Ij09dHlwZW9mIHQpLGk/KGEucHVzaChlKSx0JiYoZS5fcGVuZGluZ0NhbGxiYWNrcz9lLl9wZW5k
aW5nQ2FsbGJhY2tzLnB1c2godCk6ZS5fcGVuZGluZ0NhbGxiYWNrcz1bdF0pLHZvaWQgMCk6KGUu
cGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5KCksdCYmdCgpLHZvaWQgMCl9dmFyIG89ZSgiLi9pbnZh
cmlhbnQiKSxpPSExLGE9W10scz17YmF0Y2hlZFVwZGF0ZXM6bixlbnF1ZXVlVXBkYXRlOnJ9O3Qu
ZXhwb3J0cz1zfSx7Ii4vaW52YXJpYW50Ijo3NX1dLDQ5OltmdW5jdGlvbihlLHQpeyJ1c2Ugc3Ry
aWN0Ijt2YXIgbj1lKCIuL0V2ZW50Q29uc3RhbnRzIikscj1lKCIuL0V2ZW50UHJvcGFnYXRvcnMi
KSxvPWUoIi4vU3ludGhldGljRXZlbnQiKSxpPWUoIi4vU3ludGhldGljRm9jdXNFdmVudCIpLGE9
ZSgiLi9TeW50aGV0aWNLZXlib2FyZEV2ZW50Iikscz1lKCIuL1N5bnRoZXRpY01vdXNlRXZlbnQi
KSx1PWUoIi4vU3ludGhldGljTXV0YXRpb25FdmVudCIpLGw9ZSgiLi9TeW50aGV0aWNUb3VjaEV2
ZW50IiksYz1lKCIuL1N5bnRoZXRpY1VJRXZlbnQiKSxwPWUoIi4vU3ludGhldGljV2hlZWxFdmVu
dCIpLGQ9ZSgiLi9pbnZhcmlhbnQiKSxoPWUoIi4va2V5T2YiKSxmPW4udG9wTGV2ZWxUeXBlcyx2
PXtibHVyOntwaGFzZWRSZWdpc3RyYXRpb25OYW1lczp7YnViYmxlZDpoKHtvbkJsdXI6ITB9KSxj
YXB0dXJlZDpoKHtvbkJsdXJDYXB0dXJlOiEwfSl9fSxjbGljazp7cGhhc2VkUmVnaXN0cmF0aW9u
TmFtZXM6e2J1YmJsZWQ6aCh7b25DbGljazohMH0pLGNhcHR1cmVkOmgoe29uQ2xpY2tDYXB0dXJl
OiEwfSl9fSxkb3VibGVDbGljazp7cGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJsZWQ6aCh7
b25Eb3VibGVDbGljazohMH0pLGNhcHR1cmVkOmgoe29uRG91YmxlQ2xpY2tDYXB0dXJlOiEwfSl9
fSxkcmFnOntwaGFzZWRSZWdpc3RyYXRpb25OYW1lczp7YnViYmxlZDpoKHtvbkRyYWc6ITB9KSxj
YXB0dXJlZDpoKHtvbkRyYWdDYXB0dXJlOiEwfSl9fSxkcmFnRW5kOntwaGFzZWRSZWdpc3RyYXRp
b25OYW1lczp7YnViYmxlZDpoKHtvbkRyYWdFbmQ6ITB9KSxjYXB0dXJlZDpoKHtvbkRyYWdFbmRD
YXB0dXJlOiEwfSl9fSxkcmFnRW50ZXI6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVk
Omgoe29uRHJhZ0VudGVyOiEwfSksY2FwdHVyZWQ6aCh7b25EcmFnRW50ZXJDYXB0dXJlOiEwfSl9
fSxkcmFnRXhpdDp7cGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJsZWQ6aCh7b25EcmFnRXhp
dDohMH0pLGNhcHR1cmVkOmgoe29uRHJhZ0V4aXRDYXB0dXJlOiEwfSl9fSxkcmFnTGVhdmU6e3Bo
YXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVkOmgoe29uRHJhZ0xlYXZlOiEwfSksY2FwdHVy
ZWQ6aCh7b25EcmFnTGVhdmVDYXB0dXJlOiEwfSl9fSxkcmFnT3Zlcjp7cGhhc2VkUmVnaXN0cmF0
aW9uTmFtZXM6e2J1YmJsZWQ6aCh7b25EcmFnT3ZlcjohMH0pLGNhcHR1cmVkOmgoe29uRHJhZ092
ZXJDYXB0dXJlOiEwfSl9fSxkcmFnU3RhcnQ6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJi
bGVkOmgoe29uRHJhZ1N0YXJ0OiEwfSksY2FwdHVyZWQ6aCh7b25EcmFnU3RhcnRDYXB0dXJlOiEw
fSl9fSxkcm9wOntwaGFzZWRSZWdpc3RyYXRpb25OYW1lczp7YnViYmxlZDpoKHtvbkRyb3A6ITB9
KSxjYXB0dXJlZDpoKHtvbkRyb3BDYXB0dXJlOiEwfSl9fSxET01DaGFyYWN0ZXJEYXRhTW9kaWZp
ZWQ6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVkOmgoe29uRE9NQ2hhcmFjdGVyRGF0
YU1vZGlmaWVkOiEwfSksY2FwdHVyZWQ6aCh7b25ET01DaGFyYWN0ZXJEYXRhTW9kaWZpZWRDYXB0
dXJlOiEwfSl9fSxmb2N1czp7cGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJsZWQ6aCh7b25G
b2N1czohMH0pLGNhcHR1cmVkOmgoe29uRm9jdXNDYXB0dXJlOiEwfSl9fSxpbnB1dDp7cGhhc2Vk
UmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJsZWQ6aCh7b25JbnB1dDohMH0pLGNhcHR1cmVkOmgoe29u
SW5wdXRDYXB0dXJlOiEwfSl9fSxrZXlEb3duOntwaGFzZWRSZWdpc3RyYXRpb25OYW1lczp7YnVi
YmxlZDpoKHtvbktleURvd246ITB9KSxjYXB0dXJlZDpoKHtvbktleURvd25DYXB0dXJlOiEwfSl9
fSxrZXlQcmVzczp7cGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJsZWQ6aCh7b25LZXlQcmVz
czohMH0pLGNhcHR1cmVkOmgoe29uS2V5UHJlc3NDYXB0dXJlOiEwfSl9fSxrZXlVcDp7cGhhc2Vk
UmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJsZWQ6aCh7b25LZXlVcDohMH0pLGNhcHR1cmVkOmgoe29u
S2V5VXBDYXB0dXJlOiEwfSl9fSxtb3VzZURvd246e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOnti
dWJibGVkOmgoe29uTW91c2VEb3duOiEwfSksY2FwdHVyZWQ6aCh7b25Nb3VzZURvd25DYXB0dXJl
OiEwfSl9fSxtb3VzZU1vdmU6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVkOmgoe29u
TW91c2VNb3ZlOiEwfSksY2FwdHVyZWQ6aCh7b25Nb3VzZU1vdmVDYXB0dXJlOiEwfSl9fSxtb3Vz
ZVVwOntwaGFzZWRSZWdpc3RyYXRpb25OYW1lczp7YnViYmxlZDpoKHtvbk1vdXNlVXA6ITB9KSxj
YXB0dXJlZDpoKHtvbk1vdXNlVXBDYXB0dXJlOiEwfSl9fSxzY3JvbGw6e3BoYXNlZFJlZ2lzdHJh
dGlvbk5hbWVzOntidWJibGVkOmgoe29uU2Nyb2xsOiEwfSksY2FwdHVyZWQ6aCh7b25TY3JvbGxD
YXB0dXJlOiEwfSl9fSxzdWJtaXQ6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVkOmgo
e29uU3VibWl0OiEwfSksY2FwdHVyZWQ6aCh7b25TdWJtaXRDYXB0dXJlOiEwfSl9fSx0b3VjaENh
bmNlbDp7cGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJsZWQ6aCh7b25Ub3VjaENhbmNlbDoh
MH0pLGNhcHR1cmVkOmgoe29uVG91Y2hDYW5jZWxDYXB0dXJlOiEwfSl9fSx0b3VjaEVuZDp7cGhh
c2VkUmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJsZWQ6aCh7b25Ub3VjaEVuZDohMH0pLGNhcHR1cmVk
Omgoe29uVG91Y2hFbmRDYXB0dXJlOiEwfSl9fSx0b3VjaE1vdmU6e3BoYXNlZFJlZ2lzdHJhdGlv
bk5hbWVzOntidWJibGVkOmgoe29uVG91Y2hNb3ZlOiEwfSksY2FwdHVyZWQ6aCh7b25Ub3VjaE1v
dmVDYXB0dXJlOiEwfSl9fSx0b3VjaFN0YXJ0OntwaGFzZWRSZWdpc3RyYXRpb25OYW1lczp7YnVi
YmxlZDpoKHtvblRvdWNoU3RhcnQ6ITB9KSxjYXB0dXJlZDpoKHtvblRvdWNoU3RhcnRDYXB0dXJl
OiEwfSl9fSx3aGVlbDp7cGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJsZWQ6aCh7b25XaGVl
bDohMH0pLGNhcHR1cmVkOmgoe29uV2hlZWxDYXB0dXJlOiEwfSl9fX0sbT17dG9wQmx1cjp2LmJs
dXIsdG9wQ2xpY2s6di5jbGljayx0b3BEb3VibGVDbGljazp2LmRvdWJsZUNsaWNrLHRvcERPTUNo
YXJhY3RlckRhdGFNb2RpZmllZDp2LkRPTUNoYXJhY3RlckRhdGFNb2RpZmllZCx0b3BEcmFnOnYu
ZHJhZyx0b3BEcmFnRW5kOnYuZHJhZ0VuZCx0b3BEcmFnRW50ZXI6di5kcmFnRW50ZXIsdG9wRHJh
Z0V4aXQ6di5kcmFnRXhpdCx0b3BEcmFnTGVhdmU6di5kcmFnTGVhdmUsdG9wRHJhZ092ZXI6di5k
cmFnT3Zlcix0b3BEcmFnU3RhcnQ6di5kcmFnU3RhcnQsdG9wRHJvcDp2LmRyb3AsdG9wRm9jdXM6
di5mb2N1cyx0b3BJbnB1dDp2LmlucHV0LHRvcEtleURvd246di5rZXlEb3duLHRvcEtleVByZXNz
OnYua2V5UHJlc3MsdG9wS2V5VXA6di5rZXlVcCx0b3BNb3VzZURvd246di5tb3VzZURvd24sdG9w
TW91c2VNb3ZlOnYubW91c2VNb3ZlLHRvcE1vdXNlVXA6di5tb3VzZVVwLHRvcFNjcm9sbDp2LnNj
cm9sbCx0b3BTdWJtaXQ6di5zdWJtaXQsdG9wVG91Y2hDYW5jZWw6di50b3VjaENhbmNlbCx0b3BU
b3VjaEVuZDp2LnRvdWNoRW5kLHRvcFRvdWNoTW92ZTp2LnRvdWNoTW92ZSx0b3BUb3VjaFN0YXJ0
OnYudG91Y2hTdGFydCx0b3BXaGVlbDp2LndoZWVsfSxnPXtldmVudFR5cGVzOnYsZXhlY3V0ZURp
c3BhdGNoOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10KGUsbik7cj09PSExJiYoZS5zdG9wUHJvcGFn
YXRpb24oKSxlLnByZXZlbnREZWZhdWx0KCkpfSxleHRyYWN0RXZlbnRzOmZ1bmN0aW9uKGUsdCxu
LGgpe3ZhciB2PW1bZV07aWYoIXYpcmV0dXJuIG51bGw7dmFyIGc7c3dpdGNoKGUpe2Nhc2UgZi50
b3BJbnB1dDpjYXNlIGYudG9wU3VibWl0Omc9bzticmVhaztjYXNlIGYudG9wS2V5RG93bjpjYXNl
IGYudG9wS2V5UHJlc3M6Y2FzZSBmLnRvcEtleVVwOmc9YTticmVhaztjYXNlIGYudG9wQmx1cjpj
YXNlIGYudG9wRm9jdXM6Zz1pO2JyZWFrO2Nhc2UgZi50b3BDbGljazpjYXNlIGYudG9wRG91Ymxl
Q2xpY2s6Y2FzZSBmLnRvcERyYWc6Y2FzZSBmLnRvcERyYWdFbmQ6Y2FzZSBmLnRvcERyYWdFbnRl
cjpjYXNlIGYudG9wRHJhZ0V4aXQ6Y2FzZSBmLnRvcERyYWdMZWF2ZTpjYXNlIGYudG9wRHJhZ092
ZXI6Y2FzZSBmLnRvcERyYWdTdGFydDpjYXNlIGYudG9wRHJvcDpjYXNlIGYudG9wTW91c2VEb3du
OmNhc2UgZi50b3BNb3VzZU1vdmU6Y2FzZSBmLnRvcE1vdXNlVXA6Zz1zO2JyZWFrO2Nhc2UgZi50
b3BET01DaGFyYWN0ZXJEYXRhTW9kaWZpZWQ6Zz11O2JyZWFrO2Nhc2UgZi50b3BUb3VjaENhbmNl
bDpjYXNlIGYudG9wVG91Y2hFbmQ6Y2FzZSBmLnRvcFRvdWNoTW92ZTpjYXNlIGYudG9wVG91Y2hT
dGFydDpnPWw7YnJlYWs7Y2FzZSBmLnRvcFNjcm9sbDpnPWM7YnJlYWs7Y2FzZSBmLnRvcFdoZWVs
Omc9cH1kKGcpO3ZhciB5PWcuZ2V0UG9vbGVkKHYsbixoKTtyZXR1cm4gci5hY2N1bXVsYXRlVHdv
UGhhc2VEaXNwYXRjaGVzKHkpLHl9fTt0LmV4cG9ydHM9Z30seyIuL0V2ZW50Q29uc3RhbnRzIjox
MywiLi9FdmVudFByb3BhZ2F0b3JzIjoxOCwiLi9TeW50aGV0aWNFdmVudCI6NTAsIi4vU3ludGhl
dGljRm9jdXNFdmVudCI6NTEsIi4vU3ludGhldGljS2V5Ym9hcmRFdmVudCI6NTIsIi4vU3ludGhl
dGljTW91c2VFdmVudCI6NTMsIi4vU3ludGhldGljTXV0YXRpb25FdmVudCI6NTQsIi4vU3ludGhl
dGljVG91Y2hFdmVudCI6NTUsIi4vU3ludGhldGljVUlFdmVudCI6NTYsIi4vU3ludGhldGljV2hl
ZWxFdmVudCI6NTcsIi4vaW52YXJpYW50Ijo3NSwiLi9rZXlPZiI6Nzl9XSw1MDpbZnVuY3Rpb24o
ZSx0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlLHQsbil7dGhpcy5kaXNwYXRjaENvbmZpZz1l
LHRoaXMuZGlzcGF0Y2hNYXJrZXI9dCx0aGlzLm5hdGl2ZUV2ZW50PW47dmFyIHI9dGhpcy5jb25z
dHJ1Y3Rvci5JbnRlcmZhY2U7Zm9yKHZhciBpIGluIHIpe3ZhciBhPXJbaV07dGhpc1tpXT1hP2Eo
bik6bltpXX10aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1uLmRlZmF1bHRQcmV2ZW50ZWR8fG4ucmV0
dXJuVmFsdWU9PT0hMT9vLnRoYXRSZXR1cm5zVHJ1ZTpvLnRoYXRSZXR1cm5zRmFsc2UsdGhpcy5p
c1Byb3BhZ2F0aW9uU3RvcHBlZD1vLnRoYXRSZXR1cm5zRmFsc2V9dmFyIHI9ZSgiLi9Qb29sZWRD
bGFzcyIpLG89ZSgiLi9lbXB0eUZ1bmN0aW9uIiksaT1lKCIuL2dldEV2ZW50VGFyZ2V0IiksYT1l
KCIuL21lcmdlIikscz1lKCIuL21lcmdlSW50byIpLHU9e3R5cGU6bnVsbCx0YXJnZXQ6aSxjdXJy
ZW50VGFyZ2V0Om51bGwsZXZlbnRQaGFzZTpudWxsLGJ1YmJsZXM6bnVsbCxjYW5jZWxhYmxlOm51
bGwsdGltZVN0YW1wOmZ1bmN0aW9uKGUpe3JldHVybiBlLnRpbWVTdGFtcHx8RGF0ZS5ub3coKX0s
ZGVmYXVsdFByZXZlbnRlZDpudWxsLGlzVHJ1c3RlZDpudWxsfTtzKG4ucHJvdG90eXBlLHtwcmV2
ZW50RGVmYXVsdDpmdW5jdGlvbigpe3RoaXMuZGVmYXVsdFByZXZlbnRlZD0hMDt2YXIgZT10aGlz
Lm5hdGl2ZUV2ZW50O2UucHJldmVudERlZmF1bHQ/ZS5wcmV2ZW50RGVmYXVsdCgpOmUucmV0dXJu
VmFsdWU9ITEsdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9by50aGF0UmV0dXJuc1RydWV9LHN0b3BQ
cm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMubmF0aXZlRXZlbnQ7ZS5zdG9wUHJvcGFn
YXRpb24/ZS5zdG9wUHJvcGFnYXRpb24oKTplLmNhbmNlbEJ1YmJsZT0hMCx0aGlzLmlzUHJvcGFn
YXRpb25TdG9wcGVkPW8udGhhdFJldHVybnNUcnVlfSxwZXJzaXN0OmZ1bmN0aW9uKCl7dGhpcy5p
c1BlcnNpc3RlbnQ9by50aGF0UmV0dXJuc1RydWV9LGlzUGVyc2lzdGVudDpvLnRoYXRSZXR1cm5z
RmFsc2UsZGVzdHJ1Y3RvcjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY29uc3RydWN0b3IuSW50ZXJm
YWNlO2Zvcih2YXIgdCBpbiBlKXRoaXNbdF09bnVsbDt0aGlzLmRpc3BhdGNoQ29uZmlnPW51bGws
dGhpcy5kaXNwYXRjaE1hcmtlcj1udWxsLHRoaXMubmF0aXZlRXZlbnQ9bnVsbH19KSxuLkludGVy
ZmFjZT11LG4uYXVnbWVudENsYXNzPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxvPU9iamVjdC5j
cmVhdGUobi5wcm90b3R5cGUpO3MobyxlLnByb3RvdHlwZSksZS5wcm90b3R5cGU9byxlLnByb3Rv
dHlwZS5jb25zdHJ1Y3Rvcj1lLGUuSW50ZXJmYWNlPWEobi5JbnRlcmZhY2UsdCksZS5hdWdtZW50
Q2xhc3M9bi5hdWdtZW50Q2xhc3Msci5hZGRQb29saW5nVG8oZSxyLnRocmVlQXJndW1lbnRQb29s
ZXIpCit9LHIuYWRkUG9vbGluZ1RvKG4sci50aHJlZUFyZ3VtZW50UG9vbGVyKSx0LmV4cG9ydHM9
bn0seyIuL1Bvb2xlZENsYXNzIjoyMCwiLi9lbXB0eUZ1bmN0aW9uIjo2NCwiLi9nZXRFdmVudFRh
cmdldCI6NzAsIi4vbWVyZ2UiOjgxLCIuL21lcmdlSW50byI6ODN9XSw1MTpbZnVuY3Rpb24oZSx0
KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlLHQsbil7ci5jYWxsKHRoaXMsZSx0LG4pfXZhciBy
PWUoIi4vU3ludGhldGljVUlFdmVudCIpLG89e3JlbGF0ZWRUYXJnZXQ6bnVsbH07ci5hdWdtZW50
Q2xhc3MobixvKSx0LmV4cG9ydHM9bn0seyIuL1N5bnRoZXRpY1VJRXZlbnQiOjU2fV0sNTI6W2Z1
bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSx0LG4pe3IuY2FsbCh0aGlzLGUs
dCxuKX12YXIgcj1lKCIuL1N5bnRoZXRpY1VJRXZlbnQiKSxvPXsiY2hhciI6bnVsbCxrZXk6bnVs
bCxsb2NhdGlvbjpudWxsLGN0cmxLZXk6bnVsbCxzaGlmdEtleTpudWxsLGFsdEtleTpudWxsLG1l
dGFLZXk6bnVsbCxyZXBlYXQ6bnVsbCxsb2NhbGU6bnVsbCxjaGFyQ29kZTpudWxsLGtleUNvZGU6
bnVsbCx3aGljaDpudWxsfTtyLmF1Z21lbnRDbGFzcyhuLG8pLHQuZXhwb3J0cz1ufSx7Ii4vU3lu
dGhldGljVUlFdmVudCI6NTZ9XSw1MzpbZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7ZnVuY3Rp
b24gbihlLHQsbil7ci5jYWxsKHRoaXMsZSx0LG4pfXZhciByPWUoIi4vU3ludGhldGljVUlFdmVu
dCIpLG89ZSgiLi9WaWV3cG9ydE1ldHJpY3MiKSxpPXtzY3JlZW5YOm51bGwsc2NyZWVuWTpudWxs
LGNsaWVudFg6bnVsbCxjbGllbnRZOm51bGwsY3RybEtleTpudWxsLHNoaWZ0S2V5Om51bGwsYWx0
S2V5Om51bGwsbWV0YUtleTpudWxsLGJ1dHRvbjpmdW5jdGlvbihlKXt2YXIgdD1lLmJ1dHRvbjty
ZXR1cm4id2hpY2giaW4gZT90OjI9PT10PzI6ND09PXQ/MTowfSxidXR0b25zOm51bGwscmVsYXRl
ZFRhcmdldDpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZWxhdGVkVGFyZ2V0fHwoZS5mcm9tRWxlbWVu
dD09PWUuc3JjRWxlbWVudD9lLnRvRWxlbWVudDplLmZyb21FbGVtZW50KX0scGFnZVg6ZnVuY3Rp
b24oZSl7cmV0dXJuInBhZ2VYImluIGU/ZS5wYWdlWDplLmNsaWVudFgrby5jdXJyZW50U2Nyb2xs
TGVmdH0scGFnZVk6ZnVuY3Rpb24oZSl7cmV0dXJuInBhZ2VZImluIGU/ZS5wYWdlWTplLmNsaWVu
dFkrby5jdXJyZW50U2Nyb2xsVG9wfX07ci5hdWdtZW50Q2xhc3MobixpKSx0LmV4cG9ydHM9bn0s
eyIuL1N5bnRoZXRpY1VJRXZlbnQiOjU2LCIuL1ZpZXdwb3J0TWV0cmljcyI6NTl9XSw1NDpbZnVu
Y3Rpb24oZSx0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlLHQsbil7ci5jYWxsKHRoaXMsZSx0
LG4pfXZhciByPWUoIi4vU3ludGhldGljRXZlbnQiKSxvPXtyZWxhdGVkTm9kZTpudWxsLHByZXZW
YWx1ZTpudWxsLG5ld1ZhbHVlOm51bGwsYXR0ck5hbWU6bnVsbCxhdHRyQ2hhbmdlOm51bGx9O3Iu
YXVnbWVudENsYXNzKG4sbyksdC5leHBvcnRzPW59LHsiLi9TeW50aGV0aWNFdmVudCI6NTB9XSw1
NTpbZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlLHQsbil7ci5jYWxsKHRo
aXMsZSx0LG4pfXZhciByPWUoIi4vU3ludGhldGljVUlFdmVudCIpLG89e3RvdWNoZXM6bnVsbCx0
YXJnZXRUb3VjaGVzOm51bGwsY2hhbmdlZFRvdWNoZXM6bnVsbCxhbHRLZXk6bnVsbCxtZXRhS2V5
Om51bGwsY3RybEtleTpudWxsLHNoaWZ0S2V5Om51bGx9O3IuYXVnbWVudENsYXNzKG4sbyksdC5l
eHBvcnRzPW59LHsiLi9TeW50aGV0aWNVSUV2ZW50Ijo1Nn1dLDU2OltmdW5jdGlvbihlLHQpeyJ1
c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUsdCxuKXtyLmNhbGwodGhpcyxlLHQsbil9dmFyIHI9ZSgi
Li9TeW50aGV0aWNFdmVudCIpLG89e3ZpZXc6bnVsbCxkZXRhaWw6bnVsbH07ci5hdWdtZW50Q2xh
c3MobixvKSx0LmV4cG9ydHM9bn0seyIuL1N5bnRoZXRpY0V2ZW50Ijo1MH1dLDU3OltmdW5jdGlv
bihlLHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUsdCxuKXtyLmNhbGwodGhpcyxlLHQsbil9
dmFyIHI9ZSgiLi9TeW50aGV0aWNNb3VzZUV2ZW50Iiksbz17ZGVsdGFYOmZ1bmN0aW9uKGUpe3Jl
dHVybiJkZWx0YVgiaW4gZT9lLmRlbHRhWDoid2hlZWxEZWx0YVgiaW4gZT8tZS53aGVlbERlbHRh
WDowfSxkZWx0YVk6ZnVuY3Rpb24oZSl7cmV0dXJuImRlbHRhWSJpbiBlPy1lLmRlbHRhWToid2hl
ZWxEZWx0YVkiaW4gZT9lLndoZWVsRGVsdGFZOiJ3aGVlbERlbHRhImluIGU/ZS53aGVlbERhdGE6
MH0sZGVsdGFaOm51bGwsZGVsdGFNb2RlOm51bGx9O3IuYXVnbWVudENsYXNzKG4sbyksdC5leHBv
cnRzPW59LHsiLi9TeW50aGV0aWNNb3VzZUV2ZW50Ijo1M31dLDU4OltmdW5jdGlvbihlLHQpeyFm
dW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuL3Rocm93SWYiKSxyPSJEVUFMX1RSQU5T
QUNUSU9OIixvPSJNSVNTSU5HX1RSQU5TQUNUSU9OIixpPXtyZWluaXRpYWxpemVUcmFuc2FjdGlv
bjpmdW5jdGlvbigpe3RoaXMudHJhbnNhY3Rpb25XcmFwcGVycz10aGlzLmdldFRyYW5zYWN0aW9u
V3JhcHBlcnMoKSx0aGlzLndyYXBwZXJJbml0RGF0YT90aGlzLndyYXBwZXJJbml0RGF0YS5sZW5n
dGg9MDp0aGlzLndyYXBwZXJJbml0RGF0YT1bXSx0aGlzLnRpbWluZ01ldHJpY3N8fCh0aGlzLnRp
bWluZ01ldHJpY3M9e30pLHRoaXMudGltaW5nTWV0cmljcy5tZXRob2RJbnZvY2F0aW9uVGltZT0w
LHRoaXMudGltaW5nTWV0cmljcy53cmFwcGVySW5pdFRpbWVzP3RoaXMudGltaW5nTWV0cmljcy53
cmFwcGVySW5pdFRpbWVzLmxlbmd0aD0wOnRoaXMudGltaW5nTWV0cmljcy53cmFwcGVySW5pdFRp
bWVzPVtdLHRoaXMudGltaW5nTWV0cmljcy53cmFwcGVyQ2xvc2VUaW1lcz90aGlzLnRpbWluZ01l
dHJpY3Mud3JhcHBlckNsb3NlVGltZXMubGVuZ3RoPTA6dGhpcy50aW1pbmdNZXRyaWNzLndyYXBw
ZXJDbG9zZVRpbWVzPVtdLHRoaXMuX2lzSW5UcmFuc2FjdGlvbj0hMX0sX2lzSW5UcmFuc2FjdGlv
bjohMSxnZXRUcmFuc2FjdGlvbldyYXBwZXJzOm51bGwsaXNJblRyYW5zYWN0aW9uOmZ1bmN0aW9u
KCl7cmV0dXJuISF0aGlzLl9pc0luVHJhbnNhY3Rpb259LHBlcmZvcm06ZnVuY3Rpb24oZSx0LG8s
aSxhLHMsdSxsKXtuKHRoaXMuaXNJblRyYW5zYWN0aW9uKCkscik7dmFyIGMscD1EYXRlLm5vdygp
LGQ9bnVsbDt0cnl7dGhpcy5pbml0aWFsaXplQWxsKCksYz1lLmNhbGwodCxvLGksYSxzLHUsbCl9
Y2F0Y2goaCl7ZD1ofWZpbmFsbHl7dmFyIGY9RGF0ZS5ub3coKTt0aGlzLm1ldGhvZEludm9jYXRp
b25UaW1lKz1mLXA7dHJ5e3RoaXMuY2xvc2VBbGwoKX1jYXRjaCh2KXtkPWR8fHZ9fWlmKGQpdGhy
b3cgZDtyZXR1cm4gY30saW5pdGlhbGl6ZUFsbDpmdW5jdGlvbigpe3RoaXMuX2lzSW5UcmFuc2Fj
dGlvbj0hMDtmb3IodmFyIGU9dGhpcy50cmFuc2FjdGlvbldyYXBwZXJzLHQ9dGhpcy50aW1pbmdN
ZXRyaWNzLndyYXBwZXJJbml0VGltZXMsbj1udWxsLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG89
RGF0ZS5ub3coKSxpPWVbcl07dHJ5e3RoaXMud3JhcHBlckluaXREYXRhW3JdPWkuaW5pdGlhbGl6
ZT9pLmluaXRpYWxpemUuY2FsbCh0aGlzKTpudWxsfWNhdGNoKHMpe249bnx8cyx0aGlzLndyYXBw
ZXJJbml0RGF0YVtyXT1hLk9CU0VSVkVEX0VSUk9SfWZpbmFsbHl7dmFyIHU9dFtyXSxsPURhdGUu
bm93KCk7dFtyXT0odXx8MCkrKGwtbyl9fWlmKG4pdGhyb3cgbn0sY2xvc2VBbGw6ZnVuY3Rpb24o
KXtuKCF0aGlzLmlzSW5UcmFuc2FjdGlvbigpLG8pO2Zvcih2YXIgZT10aGlzLnRyYW5zYWN0aW9u
V3JhcHBlcnMsdD10aGlzLnRpbWluZ01ldHJpY3Mud3JhcHBlckNsb3NlVGltZXMscj1udWxsLGk9
MDtpPGUubGVuZ3RoO2krKyl7dmFyIHM9ZVtpXSx1PURhdGUubm93KCksbD10aGlzLndyYXBwZXJJ
bml0RGF0YVtpXTt0cnl7bCE9PWEuT0JTRVJWRURfRVJST1ImJnMuY2xvc2UmJnMuY2xvc2UuY2Fs
bCh0aGlzLGwpfWNhdGNoKGMpe3I9cnx8Y31maW5hbGx5e3ZhciBwPURhdGUubm93KCksZD10W2ld
O3RbaV09KGR8fDApKyhwLXUpfX1pZih0aGlzLndyYXBwZXJJbml0RGF0YS5sZW5ndGg9MCx0aGlz
Ll9pc0luVHJhbnNhY3Rpb249ITEscil0aHJvdyByfX0sYT17TWl4aW46aSxPQlNFUlZFRF9FUlJP
Ujp7fX07dC5leHBvcnRzPWF9KCl9LHsiLi90aHJvd0lmIjo4Nn1dLDU5OltmdW5jdGlvbihlLHQp
eyJ1c2Ugc3RyaWN0Ijt2YXIgbj17Y3VycmVudFNjcm9sbExlZnQ6MCxjdXJyZW50U2Nyb2xsVG9w
OjAscmVmcmVzaFNjcm9sbFZhbHVlczpmdW5jdGlvbigpe24uY3VycmVudFNjcm9sbExlZnQ9ZG9j
dW1lbnQuYm9keS5zY3JvbGxMZWZ0K2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0
LG4uY3VycmVudFNjcm9sbFRvcD1kb2N1bWVudC5ib2R5LnNjcm9sbFRvcCtkb2N1bWVudC5kb2N1
bWVudEVsZW1lbnQuc2Nyb2xsVG9wfX07dC5leHBvcnRzPW59LHt9XSw2MDpbZnVuY3Rpb24oZSx0
KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlLHQpe3ZhciBuPW51bGw9PWUscj1udWxsPT09dDtp
ZihyKXJldHVybiBlO2lmKG4pcmV0dXJuIHQ7dmFyIG89QXJyYXkuaXNBcnJheShlKSxpPUFycmF5
LmlzQXJyYXkodCk7cmV0dXJuIG8/ZS5jb25jYXQodCk6aT9bZV0uY29uY2F0KHQpOltlLHRdfWUo
Ii4vdGhyb3dJZiIpLHQuZXhwb3J0cz1ufSx7Ii4vdGhyb3dJZiI6ODZ9XSw2MTpbZnVuY3Rpb24o
ZSx0KXtmdW5jdGlvbiBuKGUsdCxuLHIsbyxpKXtlPWV8fHt9O2Zvcih2YXIgYSxzPVt0LG4scixv
LGldLHU9MDtzW3VdOyl7YT1zW3UrK107Zm9yKHZhciBsIGluIGEpZVtsXT1hW2xdO2EuaGFzT3du
UHJvcGVydHkmJmEuaGFzT3duUHJvcGVydHkoInRvU3RyaW5nIikmJiJ1bmRlZmluZWQiIT10eXBl
b2YgYS50b1N0cmluZyYmZS50b1N0cmluZyE9PWEudG9TdHJpbmcmJihlLnRvU3RyaW5nPWEudG9T
dHJpbmcpfXJldHVybiBlfXQuZXhwb3J0cz1ufSx7fV0sNjI6W2Z1bmN0aW9uKGUsdCl7ZnVuY3Rp
b24gbihlLHQpe3ZhciBuPXt9LG89cih0KTsidW5kZWZpbmVkIj09dHlwZW9mIHQmJih0PSEwKTtm
b3IodmFyIGk9ZS5sZW5ndGg7aS0tOyluW2VbaV1dPW8/dFtpXTp0O3JldHVybiBufXZhciByPWUo
Ii4vaGFzQXJyYXlOYXR1cmUiKTt0LmV4cG9ydHM9bn0seyIuL2hhc0FycmF5TmF0dXJlIjo3Mn1d
LDYzOltmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUsdCl7dmFyIG49bnVs
bD09dHx8ImJvb2xlYW4iPT10eXBlb2YgdHx8IiI9PT10O2lmKG4pcmV0dXJuIiI7dmFyIG89aXNO
YU4odCk7cmV0dXJuIG98fDA9PT10fHxyLmlzVW5pdGxlc3NOdW1iZXJbZV0/IiIrdDp0KyJweCJ9
dmFyIHI9ZSgiLi9DU1NQcm9wZXJ0eSIpO3QuZXhwb3J0cz1ufSx7Ii4vQ1NTUHJvcGVydHkiOjJ9
XSw2NDpbZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVy
biBlfX1mdW5jdGlvbiByKCl7fXZhciBvPWUoIi4vY29weVByb3BlcnRpZXMiKTtvKHIse3RoYXRS
ZXR1cm5zOm4sdGhhdFJldHVybnNGYWxzZTpuKCExKSx0aGF0UmV0dXJuc1RydWU6bighMCksdGhh
dFJldHVybnNOdWxsOm4obnVsbCksdGhhdFJldHVybnNUaGlzOmZ1bmN0aW9uKCl7cmV0dXJuIHRo
aXN9LHRoYXRSZXR1cm5zQXJndW1lbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9fSksdC5leHBvcnRz
PXJ9LHsiLi9jb3B5UHJvcGVydGllcyI6NjF9XSw2NTpbZnVuY3Rpb24oZSx0KXsidXNlIHN0cmlj
dCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gcltlXX1lKCIuL3Rocm93SWYiKTt2YXIgcj17IiYiOiIm
YW1wOyIsIj4iOiImZ3Q7IiwiPCI6IiZsdDsiLCciJzoiJnF1b3Q7IiwiJyI6IiYjeDI3OyIsIi8i
OiImI3gyZjsifSxvPWZ1bmN0aW9uKGUpe3ZhciB0PXR5cGVvZiBlLHI9Im9iamVjdCI9PT10O3Jl
dHVybiIiPT09ZXx8cj8iIjoic3RyaW5nIj09PXQ/ZS5yZXBsYWNlKC9bJj48IidcL10vZyxuKToo
IiIrZSkucmVwbGFjZSgvWyY+PCInXC9dL2csbil9O3QuZXhwb3J0cz1vfSx7Ii4vdGhyb3dJZiI6
ODZ9XSw2NjpbZnVuY3Rpb24oZSx0KXt2YXIgbj1mdW5jdGlvbihlKXt2YXIgdD1BcnJheS5wcm90
b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5n
KGUpfSkscj1lLnNwbGl0KCIlcyIpLmxlbmd0aC0xO3JldHVybiByIT09dC5sZW5ndGgtMT9uKCJl
eCBhcmdzIG51bWJlciBtaXNtYXRjaDogJXMiLEpTT04uc3RyaW5naWZ5KHQpKTpuLl9wcmVmaXgr
SlNPTi5zdHJpbmdpZnkodCkrbi5fc3VmZml4fTtuLl9wcmVmaXg9IjwhW0VYWyIsbi5fc3VmZml4
PSJdXT4iLHQuZXhwb3J0cz1ufSx7fV0sNjc6W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO2Z1
bmN0aW9uIG4oZSx0LG4pe3ZhciByPWU7cltuXT10fWZ1bmN0aW9uIHIoZSl7aWYobnVsbD09PWV8
fHZvaWQgMD09PWUpcmV0dXJuIGU7dmFyIHQ9e307cmV0dXJuIG8oZSxuLHQpLHR9ZSgiLi90aHJv
d0lmIik7dmFyIG89ZSgiLi90cmF2ZXJzZUFsbENoaWxkcmVuIik7dC5leHBvcnRzPXJ9LHsiLi90
aHJvd0lmIjo4NiwiLi90cmF2ZXJzZUFsbENoaWxkcmVuIjo4N31dLDY4OltmdW5jdGlvbihlLHQp
eyJ1c2Ugc3RyaWN0Ijt2YXIgbj1mdW5jdGlvbihlLHQsbil7QXJyYXkuaXNBcnJheShlKT9lLmZv
ckVhY2godCxuKTplJiZ0LmNhbGwobixlKX07dC5leHBvcnRzPW59LHt9XSw2OTpbZnVuY3Rpb24o
ZSx0KXtmdW5jdGlvbiBuKGUsdCxuKXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGU/ZTp0P3IoZSx0
LG4pOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpfWZ1bmN0aW9uIHIoZSx0LG4pe3ZhciBpLGEs
cztpZihvKHQpPT1lKXJldHVybiB0O2lmKHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUpe2ZvcihhPXQu
Z2V0RWxlbWVudHNCeVRhZ05hbWUobnx8IioiKSxzPTA7czxhLmxlbmd0aDtzKyspaWYobyhhW3Nd
KT09ZSlyZXR1cm4gYVtzXX1lbHNlIGZvcihhPXQuY2hpbGROb2RlcyxzPTA7czxhLmxlbmd0aDtz
KyspaWYoaT1yKGUsYVtzXSkpcmV0dXJuIGk7cmV0dXJuIG51bGx9ZnVuY3Rpb24gbyhlKXt2YXIg
dD1lLmdldEF0dHJpYnV0ZU5vZGUmJmUuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTtyZXR1cm4gdD90
LnZhbHVlOm51bGx9dC5leHBvcnRzPW59LHt9XSw3MDpbZnVuY3Rpb24oZSx0KXshZnVuY3Rpb24o
KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXt2YXIgdD1lLnRhcmdldHx8ZS5zcmNFbGVtZW50
fHxyLmdsb2JhbDtyZXR1cm4gMz09PXQubm9kZVR5cGU/dC5wYXJlbnROb2RlOnR9dmFyIHI9ZSgi
Li9FeGVjdXRpb25FbnZpcm9ubWVudCIpO3QuZXhwb3J0cz1ufSgpfSx7Ii4vRXhlY3V0aW9uRW52
aXJvbm1lbnQiOjE5fV0sNzE6W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4o
KXtyZXR1cm4hbyYmci5jYW5Vc2VET00mJihvPSJpbm5lclRleHQiaW4gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiZGl2Iik/ImlubmVyVGV4dCI6InRleHRDb250ZW50Iiksb312YXIgcj1lKCIuL0V4
ZWN1dGlvbkVudmlyb25tZW50Iiksbz1udWxsO3QuZXhwb3J0cz1ufSx7Ii4vRXhlY3V0aW9uRW52
aXJvbm1lbnQiOjE5fV0sNzI6W2Z1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlKXtyZXR1cm4hIWUm
Jigib2JqZWN0Ij09dHlwZW9mIGV8fCJmdW5jdGlvbiI9PXR5cGVvZiBlKSYmImxlbmd0aCJpbiBl
JiYhKCJzZXRJbnRlcnZhbCJpbiBlKSYmIm51bWJlciIhPXR5cGVvZiBlLm5vZGVUeXBlJiYoQXJy
YXkuaXNBcnJheShlKXx8ImNhbGxlZSJpbiBlfHwiaXRlbSJpbiBlKX10LmV4cG9ydHM9bn0se31d
LDczOltmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUucmVwbGFjZShyLCItJDEi
KS50b0xvd2VyQ2FzZSgpfXZhciByPS8oW0EtWl0pL2c7dC5leHBvcnRzPW59LHt9XSw3NDpbZnVu
Y3Rpb24oZSx0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlLHQsbil7dmFyIHI9ZS5jaGlsZE5v
ZGVzLG89ZS5jaGlsZE5vZGVzW25dO3JldHVybiBvPT09dD90Oih0LnBhcmVudE5vZGUmJnQucGFy
ZW50Tm9kZS5yZW1vdmVDaGlsZCh0KSxuPj1yLmxlbmd0aD9lLmFwcGVuZENoaWxkKHQpOmUuaW5z
ZXJ0QmVmb3JlKHQscltuXSksdCl9dC5leHBvcnRzPW59LHt9XSw3NTpbZnVuY3Rpb24oZSx0KXtm
dW5jdGlvbiBuKGUpe2lmKCFlKXRocm93IG5ldyBFcnJvcigiSW52YXJpYW50IFZpb2xhdGlvbiIp
fXQuZXhwb3J0cz1ufSx7fV0sNzY6W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9u
IG4oZSx0KXtpZighcnx8dCYmIXIuYWRkRXZlbnRMaXN0ZW5lcilyZXR1cm4hMTt2YXIgbj1kb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxpPSJvbiIrZSxhPWkgaW4gbjtyZXR1cm4gYXx8KG4u
c2V0QXR0cmlidXRlKGksIiIpLGE9ImZ1bmN0aW9uIj09dHlwZW9mIG5baV0sInVuZGVmaW5lZCIh
PXR5cGVvZiBuW2ldJiYobltpXT12b2lkIDApLG4ucmVtb3ZlQXR0cmlidXRlKGkpKSwhYSYmbyYm
IndoZWVsIj09PWUmJihhPWRvY3VtZW50LmltcGxlbWVudGF0aW9uLmhhc0ZlYXR1cmUoIkV2ZW50
cy53aGVlbCIsIjMuMCIpKSxuPW51bGwsYX12YXIgcixvLGk9ZSgiLi9FeGVjdXRpb25FbnZpcm9u
bWVudCIpO2kuY2FuVXNlRE9NJiYocj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxvPWRv
Y3VtZW50LmltcGxlbWVudGF0aW9uJiZkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5oYXNGZWF0dXJl
JiZkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5oYXNGZWF0dXJlKCIiLCIiKSE9PSEwKSx0LmV4cG9y
dHM9bn0seyIuL0V4ZWN1dGlvbkVudmlyb25tZW50IjoxOX1dLDc3OltmdW5jdGlvbihlLHQpeyJ1
c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe2V8fChlPSIiKTt2YXIgdCxuPWFyZ3VtZW50cy5sZW5n
dGg7aWYobj4xKWZvcih2YXIgcj0xO24+cjtyKyspdD1hcmd1bWVudHNbcl0sdCYmKGUrPSIgIit0
KTtyZXR1cm4gZX10LmV4cG9ydHM9bn0se31dLDc4OltmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0
Ijt2YXIgbj1lKCIuL3Rocm93SWYiKSxyPSJOT1RfT0JKRUNUX0VSUk9SIixvPWZ1bmN0aW9uKGUp
e3ZhciB0LG89e307bighKGUgaW5zdGFuY2VvZiBPYmplY3QpfHxBcnJheS5pc0FycmF5KGUpLHIp
O2Zvcih0IGluIGUpZS5oYXNPd25Qcm9wZXJ0eSh0KSYmKG9bdF09dCk7cmV0dXJuIG99O3QuZXhw
b3J0cz1vfSx7Ii4vdGhyb3dJZiI6ODZ9XSw3OTpbZnVuY3Rpb24oZSx0KXt2YXIgbj1mdW5jdGlv
bihlKXt2YXIgdDtmb3IodCBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIHQ7cmV0
dXJuIG51bGx9O3QuZXhwb3J0cz1ufSx7fV0sODA6W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3Qi
O2Z1bmN0aW9uIG4oZSl7dmFyIHQ9e307cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0Lmhhc093
blByb3BlcnR5KG4pP3Rbbl06dFtuXT1lLmNhbGwodGhpcyxuKX19dC5leHBvcnRzPW59LHt9XSw4
MTpbZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi9tZXJnZUludG8iKSxyPWZ1
bmN0aW9uKGUsdCl7dmFyIHI9e307cmV0dXJuIG4ocixlKSxuKHIsdCkscn07dC5leHBvcnRzPXJ9
LHsiLi9tZXJnZUludG8iOjgzfV0sODI6W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO3ZhciBu
PWUoIi4va2V5TWlycm9yIikscj1lKCIuL3Rocm93SWYiKSxvPTM2LGk9bih7TUVSR0VfQVJSQVlf
RkFJTDpudWxsLE1FUkdFX0NPUkVfRkFJTFVSRTpudWxsLE1FUkdFX1RZUEVfVVNBR0VfRkFJTFVS
RTpudWxsLE1FUkdFX0RFRVBfTUFYX0xFVkVMUzpudWxsLE1FUkdFX0RFRVBfTk9fQVJSX1NUUkFU
RUdZOm51bGx9KSxhPWZ1bmN0aW9uKGUpe3JldHVybiJvYmplY3QiIT10eXBlb2YgZXx8bnVsbD09
PWV9LHM9e01BWF9NRVJHRV9ERVBUSDpvLGlzVGVybWluYWw6YSxub3JtYWxpemVNZXJnZUFyZzpm
dW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZXx8bnVsbD09PWU/e306ZX0sY2hlY2tNZXJnZUFy
cmF5QXJnczpmdW5jdGlvbihlLHQpe3IoIUFycmF5LmlzQXJyYXkoZSl8fCFBcnJheS5pc0FycmF5
KHQpLGkuTUVSR0VfQ09SRV9GQUlMVVJFKX0sY2hlY2tNZXJnZU9iamVjdEFyZ3M6ZnVuY3Rpb24o
ZSx0KXtzLmNoZWNrTWVyZ2VPYmplY3RBcmcoZSkscy5jaGVja01lcmdlT2JqZWN0QXJnKHQpfSxj
aGVja01lcmdlT2JqZWN0QXJnOmZ1bmN0aW9uKGUpe3IoYShlKXx8QXJyYXkuaXNBcnJheShlKSxp
Lk1FUkdFX0NPUkVfRkFJTFVSRSl9LGNoZWNrTWVyZ2VMZXZlbDpmdW5jdGlvbihlKXtyKGU+PW8s
aS5NRVJHRV9ERUVQX01BWF9MRVZFTFMpfSxjaGVja0FycmF5U3RyYXRlZ3k6ZnVuY3Rpb24oZSl7
cih2b2lkIDAhPT1lJiYhKGUgaW4gcy5BcnJheVN0cmF0ZWdpZXMpLGkuTUVSR0VfREVFUF9OT19B
UlJfU1RSQVRFR1kpfSxBcnJheVN0cmF0ZWdpZXM6bih7Q2xvYmJlcjohMCxJbmRleEJ5SW5kZXg6
ITB9KSxFUlJPUlM6aX07dC5leHBvcnRzPXN9LHsiLi9rZXlNaXJyb3IiOjc4LCIuL3Rocm93SWYi
Ojg2fV0sODM6W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSx0KXtpZihv
KGUpLG51bGwhPXQpe28odCk7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKGVb
bl09dFtuXSl9fXZhciByPWUoIi4vbWVyZ2VIZWxwZXJzIiksbz1yLmNoZWNrTWVyZ2VPYmplY3RB
cmc7dC5leHBvcnRzPW59LHsiLi9tZXJnZUhlbHBlcnMiOjgyfV0sODQ6W2Z1bmN0aW9uKGUsdCl7
InVzZSBzdHJpY3QiO3ZhciBuPWZ1bmN0aW9uKGUsdCl7dmFyIG47Zm9yKG4gaW4gdCl0Lmhhc093
blByb3BlcnR5KG4pJiYoZS5wcm90b3R5cGVbbl09dFtuXSl9O3QuZXhwb3J0cz1ufSx7fV0sODU6
W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSx0LG4pe2lmKCFlKXJldHVy
biBudWxsO3ZhciByPTAsbz17fTtmb3IodmFyIGkgaW4gZSllLmhhc093blByb3BlcnR5KGkpJiYo
b1tpXT10LmNhbGwobixpLGVbaV0scisrKSk7cmV0dXJuIG99dC5leHBvcnRzPW59LHt9XSw4Njpb
ZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7dmFyIG49ZnVuY3Rpb24oZSx0KXtpZihlKXRocm93
IG5ldyBFcnJvcih0KX07dC5leHBvcnRzPW59LHt9XSw4NzpbZnVuY3Rpb24oZSx0KXshZnVuY3Rp
b24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlLHQsbil7bnVsbCE9PWUmJnZvaWQgMCE9PWUm
JnUoZSwiIiwwLHQsbil9dmFyIHI9ZSgiLi9SZWFjdENvbXBvbmVudCIpLG89ZSgiLi9SZWFjdFRl
eHRDb21wb25lbnQiKSxpPWUoIi4vdGhyb3dJZiIpLGE9IkRVUExJQ0FURV9LRVlfRVJST1IiLHM9
IklOVkFMSURfQ0hJTEQiLHU9ZnVuY3Rpb24oZSx0LG4sYSxsKXt2YXIgYz0wO2lmKEFycmF5Lmlz
QXJyYXkoZSkpZm9yKHZhciBwPTA7cDxlLmxlbmd0aDtwKyspe3ZhciBkPWVbcF0saD10KyJbIity
LmdldEtleShkLHApKyJdIixmPW4rYztjKz11KGQsaCxmLGEsbCl9ZWxzZXt2YXIgdj10eXBlb2Yg
ZSxtPSIiPT09dCxnPW0/IlsiK3IuZ2V0S2V5KGUsMCkrIl0iOnQ7aWYobnVsbD09PWV8fHZvaWQg
MD09PWV8fCJib29sZWFuIj09PXYpYShsLG51bGwsZyxuKSxjPTE7ZWxzZSBpZihlLm1vdW50Q29t
cG9uZW50SW50b05vZGUpYShsLGUsZyxuKSxjPTE7ZWxzZSBpZigib2JqZWN0Ij09PXYpe2koZSYm
MT09PWUubm9kZVR5cGUscyk7Zm9yKHZhciB5IGluIGUpZS5oYXNPd25Qcm9wZXJ0eSh5KSYmKGMr
PXUoZVt5XSx0KyJ7Iit5KyJ9IixuK2MsYSxsKSl9ZWxzZSBpZigic3RyaW5nIj09PXYpe3ZhciBD
PW5ldyBvKGUpO2EobCxDLGcsbiksYys9MX1lbHNlIGlmKCJudW1iZXIiPT09dil7dmFyIEU9bmV3
IG8oIiIrZSk7YShsLEUsZyxuKSxjKz0xfX1yZXR1cm4gY307bi5EVVBMSUNBVEVfS0VZX0VSUk9S
PWEsdC5leHBvcnRzPW59KCl9LHsiLi9SZWFjdENvbXBvbmVudCI6MjIsIi4vUmVhY3RUZXh0Q29t
cG9uZW50Ijo0NywiLi90aHJvd0lmIjo4Nn1dfSx7fSxbMjFdKSgyMSl9KTsKXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1Nw
ZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2xhYnMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L3JlYWN0L2Jvd2VyX2NvbXBvbmVudHMvdG9kb212Yy1jb21tb24vYmFzZS5jc3MgYi9XZWJzaXRl
cy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2xhYnMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2Jvd2VyX2NvbXBvbmVudHMvdG9kb212Yy1jb21t
b24vYmFzZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmEzNDU4ZmQwNjAyYjFmZjhhNmUyMTcxMWM0Y2Q4M2Zk
YWE4NGRlZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3Bl
ZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvbGFicy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
cmVhY3QvYm93ZXJfY29tcG9uZW50cy90b2RvbXZjLWNvbW1vbi9iYXNlLmNzcwpAQCAtMCwwICsx
LDU1NCBAQAoraHRtbCwKK2JvZHkgeworICAgIG1hcmdpbjogMDsKKyAgICBwYWRkaW5nOiAwOwor
fQorCitidXR0b24geworICAgIG1hcmdpbjogMDsKKyAgICBwYWRkaW5nOiAwOworICAgIGJvcmRl
cjogMDsKKyAgICBiYWNrZ3JvdW5kOiBub25lOworICAgIGZvbnQtc2l6ZTogMTAwJTsKKyAgICB2
ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CisgICAg
Y29sb3I6IGluaGVyaXQ7CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOworICAgIC8qLW1v
ei1hcHBlYXJhbmNlOiBub25lOyovCisgICAgLW1zLWFwcGVhcmFuY2U6IG5vbmU7CisgICAgLW8t
YXBwZWFyYW5jZTogbm9uZTsKKyAgICBhcHBlYXJhbmNlOiBub25lOworfQorCitib2R5IHsKKyAg
ICBmb250OiAxNHB4ICdIZWx2ZXRpY2EgTmV1ZScsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2Vy
aWY7CisgICAgbGluZS1oZWlnaHQ6IDEuNGVtOworICAgIGJhY2tncm91bmQ6ICNlYWVhZWEgdXJs
KCdiZy5wbmcnKTsKKyAgICBjb2xvcjogIzRkNGQ0ZDsKKyAgICB3aWR0aDogNTUwcHg7CisgICAg
bWFyZ2luOiAwIGF1dG87CisgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7
CisgICAgLW1vei1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CisgICAgLW1zLWZvbnQtc21v
b3RoaW5nOiBhbnRpYWxpYXNlZDsKKyAgICAtby1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7
CisgICAgZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOworfQorCisjdG9kb2FwcCB7CisgICAg
YmFja2dyb3VuZDogI2ZmZjsKKyAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAu
OSk7CisgICAgbWFyZ2luOiAxMzBweCAwIDQwcHggMDsKKyAgICBib3JkZXI6IDFweCBzb2xpZCAj
Y2NjOworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVz
OiAycHg7CisgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDJweDsKKyAgICBib3gtc2hhZG93
OiAwIDJweCA2cHggMCByZ2JhKDAsIDAsIDAsIDAuMiksCisgICAgICAgICAgICAgICAgMCAyNXB4
IDUwcHggMCByZ2JhKDAsIDAsIDAsIDAuMTUpOworfQorCisjdG9kb2FwcDpiZWZvcmUgeworICAg
IGNvbnRlbnQ6ICcnOworICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2Y1ZDZkNjsKKyAgICBi
b3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjZjVkNmQ2OworICAgIHdpZHRoOiAycHg7CisgICAgcG9z
aXRpb246IGFic29sdXRlOworICAgIHRvcDogMDsKKyAgICBsZWZ0OiA0MHB4OworICAgIGhlaWdo
dDogMTAwJTsKK30KKworI3RvZG9hcHAgaW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIg
eworICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworI3RvZG9hcHAgaW5wdXQ6Oi1tb3otcGxh
Y2Vob2xkZXIgeworICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKKyAgICBjb2xvcjogI2E5YTlhOTsK
K30KKworI3RvZG9hcHAgaDEgeworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IC0x
MjBweDsKKyAgICB3aWR0aDogMTAwJTsKKyAgICBmb250LXNpemU6IDcwcHg7CisgICAgZm9udC13
ZWlnaHQ6IGJvbGQ7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgIGNvbG9yOiAjYjNiM2Iz
OworICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyk7CisgICAgdGV4dC1zaGFkb3c6
IC0xcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMik7CisgICAgLXdlYmtpdC10ZXh0LXJlbmRlcmlu
Zzogb3B0aW1pemVMZWdpYmlsaXR5OworICAgIC1tb3otdGV4dC1yZW5kZXJpbmc6IG9wdGltaXpl
TGVnaWJpbGl0eTsKKyAgICAtbXMtdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsK
KyAgICAtby10ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OworICAgIHRleHQtcmVu
ZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7Cit9CisKKyNoZWFkZXIgeworICAgIHBhZGRpbmct
dG9wOiAxNXB4OworICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7Cit9CisKKyNoZWFkZXI6YmVm
b3JlIHsKKyAgICBjb250ZW50OiAnJzsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9w
OiAwOworICAgIHJpZ2h0OiAwOworICAgIGxlZnQ6IDA7CisgICAgaGVpZ2h0OiAxNXB4OworICAg
IHotaW5kZXg6IDI7CisgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM2YzYxNWM7CisgICAg
YmFja2dyb3VuZDogIzhkN2Q3NzsKKyAgICBiYWNrZ3JvdW5kOiAtd2Via2l0LWdyYWRpZW50KGxp
bmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBmcm9tKHJnYmEoMTMyLCAxMTAsIDEwMCwgMC44
KSksdG8ocmdiYSgxMDEsIDg0LCA3NiwgMC44KSkpOworICAgIGJhY2tncm91bmQ6IC13ZWJraXQt
bGluZWFyLWdyYWRpZW50KHRvcCwgcmdiYSgxMzIsIDExMCwgMTAwLCAwLjgpLCByZ2JhKDEwMSwg
ODQsIDc2LCAwLjgpKTsKKyAgICBiYWNrZ3JvdW5kOiAtbW96LWxpbmVhci1ncmFkaWVudCh0b3As
IHJnYmEoMTMyLCAxMTAsIDEwMCwgMC44KSwgcmdiYSgxMDEsIDg0LCA3NiwgMC44KSk7CisgICAg
YmFja2dyb3VuZDogLW8tbGluZWFyLWdyYWRpZW50KHRvcCwgcmdiYSgxMzIsIDExMCwgMTAwLCAw
LjgpLCByZ2JhKDEwMSwgODQsIDc2LCAwLjgpKTsKKyAgICBiYWNrZ3JvdW5kOiAtbXMtbGluZWFy
LWdyYWRpZW50KHRvcCwgcmdiYSgxMzIsIDExMCwgMTAwLCAwLjgpLCByZ2JhKDEwMSwgODQsIDc2
LCAwLjgpKTsKKyAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG9wLCByZ2JhKDEzMiwg
MTEwLCAxMDAsIDAuOCksIHJnYmEoMTAxLCA4NCwgNzYsIDAuOCkpOworICAgIGJvcmRlci10b3At
bGVmdC1yYWRpdXM6IDFweDsKKyAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMXB4OworfQor
CisjbmV3LXRvZG8sCisuZWRpdCB7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIG1hcmdp
bjogMDsKKyAgICB3aWR0aDogMTAwJTsKKyAgICBmb250LXNpemU6IDI0cHg7CisgICAgZm9udC1m
YW1pbHk6IGluaGVyaXQ7CisgICAgbGluZS1oZWlnaHQ6IDEuNGVtOworICAgIGJvcmRlcjogMDsK
KyAgICBvdXRsaW5lOiBub25lOworICAgIGNvbG9yOiBpbmhlcml0OworICAgIHBhZGRpbmc6IDZw
eDsKKyAgICBib3JkZXI6IDFweCBzb2xpZCAjOTk5OworICAgIGJveC1zaGFkb3c6IGluc2V0IDAg
LTFweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMik7CisgICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBi
b3JkZXItYm94OworICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsKKyAgICAtbXMtYm94
LXNpemluZzogYm9yZGVyLWJveDsKKyAgICAtby1ib3gtc2l6aW5nOiBib3JkZXItYm94OworICAg
IGJveC1zaXppbmc6IGJvcmRlci1ib3g7CisgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50
aWFsaWFzZWQ7CisgICAgLW1vei1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CisgICAgLW1z
LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKKyAgICAtby1mb250LXNtb290aGluZzogYW50
aWFsaWFzZWQ7CisgICAgZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOworfQorCisjbmV3LXRv
ZG8geworICAgIHBhZGRpbmc6IDE2cHggMTZweCAxNnB4IDYwcHg7CisgICAgYm9yZGVyOiBub25l
OworICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4wMik7CisgICAgei1pbmRleDogMjsK
KyAgICBib3gtc2hhZG93OiBub25lOworfQorCisjbWFpbiB7CisgICAgcG9zaXRpb246IHJlbGF0
aXZlOworICAgIHotaW5kZXg6IDI7CisgICAgYm9yZGVyLXRvcDogMXB4IGRvdHRlZCAjYWRhZGFk
OworfQorCitsYWJlbFtmb3I9J3RvZ2dsZS1hbGwnXSB7CisgICAgZGlzcGxheTogbm9uZTsKK30K
KworI3RvZ2dsZS1hbGwgeworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IC00MnB4
OworICAgIGxlZnQ6IC00cHg7CisgICAgd2lkdGg6IDQwcHg7CisgICAgdGV4dC1hbGlnbjogY2Vu
dGVyOworICAgIGJvcmRlcjogbm9uZTsgLyogTW9iaWxlIFNhZmFyaSAqLworfQorCisjdG9nZ2xl
LWFsbDpiZWZvcmUgeworICAgIGNvbnRlbnQ6ICfCuyc7CisgICAgZm9udC1zaXplOiAyOHB4Owor
ICAgIGNvbG9yOiAjZDlkOWQ5OworICAgIHBhZGRpbmc6IDAgMjVweCA3cHg7Cit9CisKKyN0b2dn
bGUtYWxsOmNoZWNrZWQ6YmVmb3JlIHsKKyAgICBjb2xvcjogIzczNzM3MzsKK30KKworI3RvZG8t
bGlzdCB7CisgICAgbWFyZ2luOiAwOworICAgIHBhZGRpbmc6IDA7CisgICAgbGlzdC1zdHlsZTog
bm9uZTsKK30KKworI3RvZG8tbGlzdCBsaSB7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAg
IGZvbnQtc2l6ZTogMjRweDsKKyAgICBib3JkZXItYm90dG9tOiAxcHggZG90dGVkICNjY2M7Cit9
CisKKyN0b2RvLWxpc3QgbGk6bGFzdC1jaGlsZCB7CisgICAgYm9yZGVyLWJvdHRvbTogbm9uZTsK
K30KKworI3RvZG8tbGlzdCBsaS5lZGl0aW5nIHsKKyAgICBib3JkZXItYm90dG9tOiBub25lOwor
ICAgIHBhZGRpbmc6IDA7Cit9CisKKyN0b2RvLWxpc3QgbGkuZWRpdGluZyAuZWRpdCB7CisgICAg
ZGlzcGxheTogYmxvY2s7CisgICAgd2lkdGg6IDUwNnB4OworICAgIHBhZGRpbmc6IDEzcHggMTdw
eCAxMnB4IDE3cHg7CisgICAgbWFyZ2luOiAwIDAgMCA0M3B4OworfQorCisjdG9kby1saXN0IGxp
LmVkaXRpbmcgLnZpZXcgeworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisKKyN0b2RvLWxpc3QgbGkg
LnRvZ2dsZSB7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgIHdpZHRoOiA0MHB4OworICAg
IC8qIGF1dG8sIHNpbmNlIG5vbi1XZWJLaXQgYnJvd3NlcnMgZG9lc24ndCBzdXBwb3J0IGlucHV0
IHN0eWxpbmcgKi8KKyAgICBoZWlnaHQ6IGF1dG87CisgICAgcG9zaXRpb246IGFic29sdXRlOwor
ICAgIHRvcDogMDsKKyAgICBib3R0b206IDA7CisgICAgbWFyZ2luOiBhdXRvIDA7CisgICAgYm9y
ZGVyOiBub25lOyAvKiBNb2JpbGUgU2FmYXJpICovCisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBu
b25lOworICAgIC8qLW1vei1hcHBlYXJhbmNlOiBub25lOyovCisgICAgLW1zLWFwcGVhcmFuY2U6
IG5vbmU7CisgICAgLW8tYXBwZWFyYW5jZTogbm9uZTsKKyAgICBhcHBlYXJhbmNlOiBub25lOwor
fQorCisjdG9kby1saXN0IGxpIC50b2dnbGU6YWZ0ZXIgeworICAgIGNvbnRlbnQ6ICfinJQnOwor
ICAgIGxpbmUtaGVpZ2h0OiA0M3B4OyAvKiA0MCArIGEgY291cGxlIG9mIHBpeGVscyB2aXN1YWwg
YWRqdXN0bWVudCAqLworICAgIGZvbnQtc2l6ZTogMjBweDsKKyAgICBjb2xvcjogI2Q5ZDlkOTsK
KyAgICB0ZXh0LXNoYWRvdzogMCAtMXB4IDAgI2JmYmZiZjsKK30KKworI3RvZG8tbGlzdCBsaSAu
dG9nZ2xlOmNoZWNrZWQ6YWZ0ZXIgeworICAgIGNvbG9yOiAjODVhZGE3OworICAgIHRleHQtc2hh
ZG93OiAwIDFweCAwICM2Njk5OTE7CisgICAgYm90dG9tOiAxcHg7CisgICAgcG9zaXRpb246IHJl
bGF0aXZlOworfQorCisjdG9kby1saXN0IGxpIGxhYmVsIHsKKyAgICB3b3JkLWJyZWFrOiBicmVh
ay13b3JkOworICAgIHBhZGRpbmc6IDE1cHg7CisgICAgbWFyZ2luLWxlZnQ6IDQ1cHg7CisgICAg
ZGlzcGxheTogYmxvY2s7CisgICAgbGluZS1oZWlnaHQ6IDEuMjsKKyAgICAtd2Via2l0LXRyYW5z
aXRpb246IGNvbG9yIDAuNHM7CisgICAgLW1vei10cmFuc2l0aW9uOiBjb2xvciAwLjRzOworICAg
IC1tcy10cmFuc2l0aW9uOiBjb2xvciAwLjRzOworICAgIC1vLXRyYW5zaXRpb246IGNvbG9yIDAu
NHM7CisgICAgdHJhbnNpdGlvbjogY29sb3IgMC40czsKK30KKworI3RvZG8tbGlzdCBsaS5jb21w
bGV0ZWQgbGFiZWwgeworICAgIGNvbG9yOiAjYTlhOWE5OworICAgIHRleHQtZGVjb3JhdGlvbjog
bGluZS10aHJvdWdoOworfQorCisjdG9kby1saXN0IGxpIC5kZXN0cm95IHsKKyAgICBkaXNwbGF5
OiBub25lOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDA7CisgICAgcmlnaHQ6
IDEwcHg7CisgICAgYm90dG9tOiAwOworICAgIHdpZHRoOiA0MHB4OworICAgIGhlaWdodDogNDBw
eDsKKyAgICBtYXJnaW46IGF1dG8gMDsKKyAgICBmb250LXNpemU6IDIycHg7CisgICAgY29sb3I6
ICNhODhhOGE7CisgICAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgMC4yczsKKyAgICAtbW96LXRy
YW5zaXRpb246IGFsbCAwLjJzOworICAgIC1tcy10cmFuc2l0aW9uOiBhbGwgMC4yczsKKyAgICAt
by10cmFuc2l0aW9uOiBhbGwgMC4yczsKKyAgICB0cmFuc2l0aW9uOiBhbGwgMC4yczsKK30KKwor
I3RvZG8tbGlzdCBsaSAuZGVzdHJveTpob3ZlciB7CisgICAgdGV4dC1zaGFkb3c6IDAgMCAxcHgg
IzAwMCwKKyAgICAgICAgICAgICAgICAgMCAwIDEwcHggcmdiYSgxOTksIDEwNywgMTA3LCAwLjgp
OworICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLjMpOworICAgIC1tb3otdHJhbnNmb3Jt
OiBzY2FsZSgxLjMpOworICAgIC1tcy10cmFuc2Zvcm06IHNjYWxlKDEuMyk7CisgICAgLW8tdHJh
bnNmb3JtOiBzY2FsZSgxLjMpOworICAgIHRyYW5zZm9ybTogc2NhbGUoMS4zKTsKK30KKworI3Rv
ZG8tbGlzdCBsaSAuZGVzdHJveTphZnRlciB7CisgICAgY29udGVudDogJ+Kclic7Cit9CisKKyN0
b2RvLWxpc3QgbGk6aG92ZXIgLmRlc3Ryb3kgeworICAgIGRpc3BsYXk6IGJsb2NrOworfQorCisj
dG9kby1saXN0IGxpIC5lZGl0IHsKKyAgICBkaXNwbGF5OiBub25lOworfQorCisjdG9kby1saXN0
IGxpLmVkaXRpbmc6bGFzdC1jaGlsZCB7CisgICAgbWFyZ2luLWJvdHRvbTogLTFweDsKK30KKwor
I2Zvb3RlciB7CisgICAgY29sb3I6ICM3Nzc7CisgICAgcGFkZGluZzogMCAxNXB4OworICAgIHBv
c2l0aW9uOiBhYnNvbHV0ZTsKKyAgICByaWdodDogMDsKKyAgICBib3R0b206IC0zMXB4OworICAg
IGxlZnQ6IDA7CisgICAgaGVpZ2h0OiAyMHB4OworICAgIHotaW5kZXg6IDE7CisgICAgdGV4dC1h
bGlnbjogY2VudGVyOworfQorCisjZm9vdGVyOmJlZm9yZSB7CisgICAgY29udGVudDogJyc7Cisg
ICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHJpZ2h0OiAwOworICAgIGJvdHRvbTogMzFweDsK
KyAgICBsZWZ0OiAwOworICAgIGhlaWdodDogNTBweDsKKyAgICB6LWluZGV4OiAtMTsKKyAgICBi
b3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjMpLAorICAgICAgICAgICAgICAg
IDAgNnB4IDAgLTNweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCksCisgICAgICAgICAgICAgICAg
MCA3cHggMXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjMpLAorICAgICAgICAgICAgICAgIDAgNDNw
eCAwIC02cHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpLAorICAgICAgICAgICAgICAgIDAgNDRw
eCAycHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMik7Cit9CisKKyN0b2RvLWNvdW50IHsKKyAgICBm
bG9hdDogbGVmdDsKKyAgICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCisjZmlsdGVycyB7CisgICAg
bWFyZ2luOiAwOworICAgIHBhZGRpbmc6IDA7CisgICAgbGlzdC1zdHlsZTogbm9uZTsKKyAgICBw
b3NpdGlvbjogYWJzb2x1dGU7CisgICAgcmlnaHQ6IDA7CisgICAgbGVmdDogMDsKK30KKworI2Zp
bHRlcnMgbGkgeworICAgIGRpc3BsYXk6IGlubGluZTsKK30KKworI2ZpbHRlcnMgbGkgYSB7Cisg
ICAgY29sb3I6ICM4Mzc1NmY7CisgICAgbWFyZ2luOiAycHg7CisgICAgdGV4dC1kZWNvcmF0aW9u
OiBub25lOworfQorCisjZmlsdGVycyBsaSBhLnNlbGVjdGVkIHsKKyAgICBmb250LXdlaWdodDog
Ym9sZDsKK30KKworI2NsZWFyLWNvbXBsZXRlZCB7CisgICAgZmxvYXQ6IHJpZ2h0OworICAgIHBv
c2l0aW9uOiByZWxhdGl2ZTsKKyAgICBsaW5lLWhlaWdodDogMjBweDsKKyAgICB0ZXh0LWRlY29y
YXRpb246IG5vbmU7CisgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjEpOworICAgIGZv
bnQtc2l6ZTogMTFweDsKKyAgICBwYWRkaW5nOiAwIDEwcHg7CisgICAgYm9yZGVyLXJhZGl1czog
M3B4OworICAgIGJveC1zaGFkb3c6IDAgLTFweCAwIDAgcmdiYSgwLCAwLCAwLCAwLjIpOworfQor
CisjY2xlYXItY29tcGxldGVkOmhvdmVyIHsKKyAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAs
IDAuMTUpOworICAgIGJveC1zaGFkb3c6IDAgLTFweCAwIDAgcmdiYSgwLCAwLCAwLCAwLjMpOwor
fQorCisjaW5mbyB7CisgICAgbWFyZ2luOiA2NXB4IGF1dG8gMDsKKyAgICBjb2xvcjogI2E2YTZh
NjsKKyAgICBmb250LXNpemU6IDEycHg7CisgICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgcmdiYSgy
NTUsIDI1NSwgMjU1LCAwLjcpOworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworI2luZm8g
YSB7CisgICAgY29sb3I6IGluaGVyaXQ7Cit9CisKKy8qCisgICAgSGFjayB0byByZW1vdmUgYmFj
a2dyb3VuZCBmcm9tIE1vYmlsZSBTYWZhcmkuCisgICAgQ2FuJ3QgdXNlIGl0IGdsb2JhbGx5IHNp
bmNlIGl0IGRlc3Ryb3lzIGNoZWNrYm94ZXMgaW4gRmlyZWZveCBhbmQgT3BlcmEKKyovCitAbWVk
aWEgc2NyZWVuIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOjApIHsKKyAgICAj
dG9nZ2xlLWFsbCwKKyAgICAjdG9kby1saXN0IGxpIC50b2dnbGUgeworICAgICAgICBiYWNrZ3Jv
dW5kOiBub25lOworICAgIH0KKworICAgICN0b2RvLWxpc3QgbGkgLnRvZ2dsZSB7CisgICAgICAg
IGhlaWdodDogNDBweDsKKyAgICB9CisKKyAgICAjdG9nZ2xlLWFsbCB7CisgICAgICAgIHRvcDog
LTU2cHg7CisgICAgICAgIGxlZnQ6IC0xNXB4OworICAgICAgICB3aWR0aDogNjVweDsKKyAgICAg
ICAgaGVpZ2h0OiA0MXB4OworICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDkwZGVn
KTsKKyAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOworICAgICAgICAtd2Via2l0LWFw
cGVhcmFuY2U6IG5vbmU7CisgICAgICAgIGFwcGVhcmFuY2U6IG5vbmU7CisgICAgfQorfQorCisu
aGlkZGVueworICAgIGRpc3BsYXk6bm9uZTsKK30KKworaHIgeworICAgIG1hcmdpbjogMjBweCAw
OworICAgIGJvcmRlcjogMDsKKyAgICBib3JkZXItdG9wOiAxcHggZGFzaGVkICNDNUM1QzU7Cisg
ICAgYm9yZGVyLWJvdHRvbTogMXB4IGRhc2hlZCAjRjdGN0Y3OworfQorCisubGVhcm4gYSB7Cisg
ICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgICAg
Y29sb3I6ICNiODNmNDU7Cit9CisKKy5sZWFybiBhOmhvdmVyIHsKKyAgICB0ZXh0LWRlY29yYXRp
b246IHVuZGVybGluZTsKKyAgICBjb2xvcjogIzc4N2U3ZTsKK30KKworLmxlYXJuIGgzLAorLmxl
YXJuIGg0LAorLmxlYXJuIGg1IHsKKyAgICBtYXJnaW46IDEwcHggMDsKKyAgICBmb250LXdlaWdo
dDogNTAwOworICAgIGxpbmUtaGVpZ2h0OiAxLjI7CisgICAgY29sb3I6ICMwMDA7Cit9CisKKy5s
ZWFybiBoMyB7CisgICAgZm9udC1zaXplOiAyNHB4OworfQorCisubGVhcm4gaDQgeworICAgIGZv
bnQtc2l6ZTogMThweDsKK30KKworLmxlYXJuIGg1IHsKKyAgICBtYXJnaW4tYm90dG9tOiAwOwor
ICAgIGZvbnQtc2l6ZTogMTRweDsKK30KKworLmxlYXJuIHVsIHsKKyAgICBwYWRkaW5nOiAwOwor
ICAgIG1hcmdpbjogMCAwIDMwcHggMjVweDsKK30KKworLmxlYXJuIGxpIHsKKyAgICBsaW5lLWhl
aWdodDogMjBweDsKK30KKworLmxlYXJuIHAgeworICAgIGZvbnQtc2l6ZTogMTVweDsKKyAgICBm
b250LXdlaWdodDogMzAwOworICAgIGxpbmUtaGVpZ2h0OiAxLjM7CisgICAgbWFyZ2luLXRvcDog
MDsKKyAgICBtYXJnaW4tYm90dG9tOiAwOworfQorCisucXVvdGUgeworICAgIGJvcmRlcjogbm9u
ZTsKKyAgICBtYXJnaW46IDIwcHggMCA2MHB4IDA7Cit9CisKKy5xdW90ZSBwIHsKKyAgICBmb250
LXN0eWxlOiBpdGFsaWM7Cit9CisKKy5xdW90ZSBwOmJlZm9yZSB7CisgICAgY29udGVudDogJ+KA
nCc7CisgICAgZm9udC1zaXplOiA1MHB4OworICAgIG9wYWNpdHk6IC4xNTsKKyAgICBwb3NpdGlv
bjogYWJzb2x1dGU7CisgICAgdG9wOiAtMjBweDsKKyAgICBsZWZ0OiAzcHg7Cit9CisKKy5xdW90
ZSBwOmFmdGVyIHsKKyAgICBjb250ZW50OiAn4oCdJzsKKyAgICBmb250LXNpemU6IDUwcHg7Cisg
ICAgb3BhY2l0eTogLjE1OworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICBib3R0b206IC00
MnB4OworICAgIHJpZ2h0OiAzcHg7Cit9CisKKy5xdW90ZSBmb290ZXIgeworICAgIHBvc2l0aW9u
OiBhYnNvbHV0ZTsKKyAgICBib3R0b206IC00MHB4OworICAgIHJpZ2h0OiAwOworfQorCisucXVv
dGUgZm9vdGVyIGltZyB7CisgICAgYm9yZGVyLXJhZGl1czogM3B4OworfQorCisucXVvdGUgZm9v
dGVyIGEgeworICAgIG1hcmdpbi1sZWZ0OiA1cHg7CisgICAgdmVydGljYWwtYWxpZ246IG1pZGRs
ZTsKK30KKworLnNwZWVjaC1idWJibGUgeworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBw
YWRkaW5nOiAxMHB4OworICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgLjA0KTsKKyAgICBi
b3JkZXItcmFkaXVzOiA1cHg7Cit9CisKKy5zcGVlY2gtYnViYmxlOmFmdGVyIHsKKyAgICBjb250
ZW50OiAnJzsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAxMDAlOworICAgIHJp
Z2h0OiAzMHB4OworICAgIGJvcmRlcjogMTNweCBzb2xpZCB0cmFuc3BhcmVudDsKKyAgICBib3Jk
ZXItdG9wLWNvbG9yOiByZ2JhKDAsIDAsIDAsIC4wNCk7Cit9CisKKy8qKmJvZHkqLy5sZWFybi1i
YXIgPiAubGVhcm4geworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB3aWR0aDogMjcycHg7
CisgICAgdG9wOiA4cHg7CisgICAgbGVmdDogLTMwMHB4OworICAgIHBhZGRpbmc6IDEwcHg7Cisg
ICAgYm9yZGVyLXJhZGl1czogNXB4OworICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAy
NTUsIDI1NSwgLjYpOworICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IGxlZnQ7CisgICAgdHJhbnNp
dGlvbi1kdXJhdGlvbjogNTAwbXM7Cit9CisKK0BtZWRpYSAobWluLXdpZHRoOiA4OTlweCkgewor
ICAgIC8qKmJvZHkqLy5sZWFybi1iYXIgeworICAgICAgICB3aWR0aDogYXV0bzsKKyAgICAgICAg
bWFyZ2luOiAwIDAgMCAzMDBweDsKKyAgICB9CisgICAgLyoqYm9keSovLmxlYXJuLWJhciA+IC5s
ZWFybiB7CisgICAgICAgIGxlZnQ6IDhweDsKKyAgICB9CisgICAgLyoqYm9keSovLmxlYXJuLWJh
ciAjdG9kb2FwcCB7CisgICAgICAgIHdpZHRoOiA1NTBweDsKKyAgICAgICAgbWFyZ2luOiAxMzBw
eCBhdXRvIDQwcHggYXV0bzsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2Vy
YmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2xhYnMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL3JlYWN0L2Jvd2VyX2NvbXBvbmVudHMvdG9kb212Yy1jb21tb24vYmFzZS5q
cyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3Rv
ZG9tdmMvbGFicy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvYm93ZXJfY29tcG9uZW50cy90
b2RvbXZjLWNvbW1vbi9iYXNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM2OGU1ZWEwM2E2MWFkMzY2NzljMTVl
YTBhZjY0ODkxMzcxZGI5ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVu
Y2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2xhYnMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL3JlYWN0L2Jvd2VyX2NvbXBvbmVudHMvdG9kb212Yy1jb21tb24vYmFzZS5qcwpA
QCAtMCwwICsxLDIwOSBAQAorKGZ1bmN0aW9uICgpIHsKKyAgICAndXNlIHN0cmljdCc7CisKKyAg
ICAvLyBVbmRlcnNjb3JlJ3MgVGVtcGxhdGUgTW9kdWxlCisgICAgLy8gQ291cnRlc3kgb2YgdW5k
ZXJzY29yZWpzLm9yZworICAgIHZhciBfID0gKGZ1bmN0aW9uIChfKSB7CisgICAgICAgIF8uZGVm
YXVsdHMgPSBmdW5jdGlvbiAob2JqZWN0KSB7CisgICAgICAgICAgICBpZiAoIW9iamVjdCkgewor
ICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBmb3IgKHZhciBhcmdzSW5kZXggPSAxLCBhcmdzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsg
YXJnc0luZGV4IDwgYXJnc0xlbmd0aDsgYXJnc0luZGV4KyspIHsKKyAgICAgICAgICAgICAgICB2
YXIgaXRlcmFibGUgPSBhcmd1bWVudHNbYXJnc0luZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAo
aXRlcmFibGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGl0ZXJhYmxl
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0W2tleV0gPT0gbnVsbCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFtrZXldID0gaXRlcmFibGVba2V5XTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBvYmplY3Q7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBCeSBkZWZhdWx0LCBVbmRlcnNjb3JlIHVzZXMgRVJCLXN0
eWxlIHRlbXBsYXRlIGRlbGltaXRlcnMsIGNoYW5nZSB0aGUKKyAgICAgICAgLy8gZm9sbG93aW5n
IHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLgorICAgICAg
ICBfLnRlbXBsYXRlU2V0dGluZ3MgPSB7CisgICAgICAgICAgICBldmFsdWF0ZSAgICA6IC88JShb
XHNcU10rPyklPi9nLAorICAgICAgICAgICAgaW50ZXJwb2xhdGUgOiAvPCU9KFtcc1xTXSs/KSU+
L2csCisgICAgICAgICAgICBlc2NhcGUgICAgICA6IC88JS0oW1xzXFNdKz8pJT4vZworICAgICAg
ICB9OworCisgICAgICAgIC8vIFdoZW4gY3VzdG9taXppbmcgYHRlbXBsYXRlU2V0dGluZ3NgLCBp
ZiB5b3UgZG9uJ3Qgd2FudCB0byBkZWZpbmUgYW4KKyAgICAgICAgLy8gaW50ZXJwb2xhdGlvbiwg
ZXZhbHVhdGlvbiBvciBlc2NhcGluZyByZWdleCwgd2UgbmVlZCBvbmUgdGhhdCBpcworICAgICAg
ICAvLyBndWFyYW50ZWVkIG5vdCB0byBtYXRjaC4KKyAgICAgICAgdmFyIG5vTWF0Y2ggPSAvKC4p
Xi87CisKKyAgICAgICAgLy8gQ2VydGFpbiBjaGFyYWN0ZXJzIG5lZWQgdG8gYmUgZXNjYXBlZCBz
byB0aGF0IHRoZXkgY2FuIGJlIHB1dCBpbnRvIGEKKyAgICAgICAgLy8gc3RyaW5nIGxpdGVyYWwu
CisgICAgICAgIHZhciBlc2NhcGVzID0geworICAgICAgICAgICAgIiciOiAgICAgICInIiwKKyAg
ICAgICAgICAgICdcXCc6ICAgICAnXFwnLAorICAgICAgICAgICAgJ1xyJzogICAgICdyJywKKyAg
ICAgICAgICAgICdcbic6ICAgICAnbicsCisgICAgICAgICAgICAnXHQnOiAgICAgJ3QnLAorICAg
ICAgICAgICAgJ1x1MjAyOCc6ICd1MjAyOCcsCisgICAgICAgICAgICAnXHUyMDI5JzogJ3UyMDI5
JworICAgICAgICB9OworCisgICAgICAgIHZhciBlc2NhcGVyID0gL1xcfCd8XHJ8XG58XHR8XHUy
MDI4fFx1MjAyOS9nOworCisgICAgICAgIC8vIEphdmFTY3JpcHQgbWljcm8tdGVtcGxhdGluZywg
c2ltaWxhciB0byBKb2huIFJlc2lnJ3MgaW1wbGVtZW50YXRpb24uCisgICAgICAgIC8vIFVuZGVy
c2NvcmUgdGVtcGxhdGluZyBoYW5kbGVzIGFyYml0cmFyeSBkZWxpbWl0ZXJzLCBwcmVzZXJ2ZXMg
d2hpdGVzcGFjZSwKKyAgICAgICAgLy8gYW5kIGNvcnJlY3RseSBlc2NhcGVzIHF1b3RlcyB3aXRo
aW4gaW50ZXJwb2xhdGVkIGNvZGUuCisgICAgICAgIF8udGVtcGxhdGUgPSBmdW5jdGlvbih0ZXh0
LCBkYXRhLCBzZXR0aW5ncykgeworICAgICAgICAgICAgdmFyIHJlbmRlcjsKKyAgICAgICAgICAg
IHNldHRpbmdzID0gXy5kZWZhdWx0cyh7fSwgc2V0dGluZ3MsIF8udGVtcGxhdGVTZXR0aW5ncyk7
CisKKyAgICAgICAgICAgIC8vIENvbWJpbmUgZGVsaW1pdGVycyBpbnRvIG9uZSByZWd1bGFyIGV4
cHJlc3Npb24gdmlhIGFsdGVybmF0aW9uLgorICAgICAgICAgICAgdmFyIG1hdGNoZXIgPSBuZXcg
UmVnRXhwKFsKKyAgICAgICAgICAgICAgICAoc2V0dGluZ3MuZXNjYXBlIHx8IG5vTWF0Y2gpLnNv
dXJjZSwKKyAgICAgICAgICAgICAgICAoc2V0dGluZ3MuaW50ZXJwb2xhdGUgfHwgbm9NYXRjaCku
c291cmNlLAorICAgICAgICAgICAgICAgIChzZXR0aW5ncy5ldmFsdWF0ZSB8fCBub01hdGNoKS5z
b3VyY2UKKyAgICAgICAgICAgIF0uam9pbignfCcpICsgJ3wkJywgJ2cnKTsKKworICAgICAgICAg
ICAgLy8gQ29tcGlsZSB0aGUgdGVtcGxhdGUgc291cmNlLCBlc2NhcGluZyBzdHJpbmcgbGl0ZXJh
bHMgYXBwcm9wcmlhdGVseS4KKyAgICAgICAgICAgIHZhciBpbmRleCA9IDA7CisgICAgICAgICAg
ICB2YXIgc291cmNlID0gIl9fcCs9JyI7CisgICAgICAgICAgICB0ZXh0LnJlcGxhY2UobWF0Y2hl
ciwgZnVuY3Rpb24obWF0Y2gsIGVzY2FwZSwgaW50ZXJwb2xhdGUsIGV2YWx1YXRlLCBvZmZzZXQp
IHsKKyAgICAgICAgICAgICAgICBzb3VyY2UgKz0gdGV4dC5zbGljZShpbmRleCwgb2Zmc2V0KQor
ICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShlc2NhcGVyLCBmdW5jdGlvbihtYXRjaCkgeyBy
ZXR1cm4gJ1xcJyArIGVzY2FwZXNbbWF0Y2hdOyB9KTsKKworICAgICAgICAgICAgICAgIGlmIChl
c2NhcGUpIHsKKyAgICAgICAgICAgICAgICAgICAgc291cmNlICs9ICInK1xuKChfX3Q9KCIgKyBl
c2NhcGUgKyAiKSk9PW51bGw/Jyc6Xy5lc2NhcGUoX190KSkrXG4nIjsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgaWYgKGludGVycG9sYXRlKSB7CisgICAgICAgICAgICAgICAg
ICAgIHNvdXJjZSArPSAiJytcbigoX190PSgiICsgaW50ZXJwb2xhdGUgKyAiKSk9PW51bGw/Jyc6
X190KStcbiciOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoZXZhbHVh
dGUpIHsKKyAgICAgICAgICAgICAgICAgICAgc291cmNlICs9ICInO1xuIiArIGV2YWx1YXRlICsg
IlxuX19wKz0nIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW5kZXggPSBv
ZmZzZXQgKyBtYXRjaC5sZW5ndGg7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOworICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICBzb3VyY2UgKz0gIic7XG4iOworCisgICAgICAgICAg
ICAvLyBJZiBhIHZhcmlhYmxlIGlzIG5vdCBzcGVjaWZpZWQsIHBsYWNlIGRhdGEgdmFsdWVzIGlu
IGxvY2FsIHNjb3BlLgorICAgICAgICAgICAgaWYgKCFzZXR0aW5ncy52YXJpYWJsZSkgc291cmNl
ID0gJ3dpdGgob2JqfHx7fSl7XG4nICsgc291cmNlICsgJ31cbic7CisKKyAgICAgICAgICAgIHNv
dXJjZSA9ICJ2YXIgX190LF9fcD0nJyxfX2o9QXJyYXkucHJvdG90eXBlLmpvaW4sIiArCisgICAg
ICAgICAgICAgICAgInByaW50PWZ1bmN0aW9uKCl7X19wKz1fX2ouY2FsbChhcmd1bWVudHMsJycp
O307XG4iICsKKyAgICAgICAgICAgICAgICBzb3VyY2UgKyAicmV0dXJuIF9fcDtcbiI7CisKKyAg
ICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgcmVuZGVyID0gbmV3IEZ1bmN0aW9uKHNl
dHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonLCAnXycsIHNvdXJjZSk7CisgICAgICAgICAgICB9IGNh
dGNoIChlKSB7CisgICAgICAgICAgICAgICAgZS5zb3VyY2UgPSBzb3VyY2U7CisgICAgICAgICAg
ICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGRhdGEpIHJl
dHVybiByZW5kZXIoZGF0YSwgXyk7CisgICAgICAgICAgICB2YXIgdGVtcGxhdGUgPSBmdW5jdGlv
bihkYXRhKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlci5jYWxsKHRoaXMsIGRhdGEs
IF8pOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgLy8gUHJvdmlkZSB0aGUgY29tcGls
ZWQgZnVuY3Rpb24gc291cmNlIGFzIGEgY29udmVuaWVuY2UgZm9yIHByZWNvbXBpbGF0aW9uLgor
ICAgICAgICAgICAgdGVtcGxhdGUuc291cmNlID0gJ2Z1bmN0aW9uKCcgKyAoc2V0dGluZ3MudmFy
aWFibGUgfHwgJ29iaicpICsgJyl7XG4nICsgc291cmNlICsgJ30nOworCisgICAgICAgICAgICBy
ZXR1cm4gdGVtcGxhdGU7CisgICAgICAgIH07CisKKyAgICAgICAgcmV0dXJuIF87CisgICAgfSko
e30pOworCisgICAgaWYgKGxvY2F0aW9uLmhvc3RuYW1lID09PSAndG9kb212Yy5jb20nKSB7Cisg
ICAgICAgIHdpbmRvdy5fZ2FxID0gW1snX3NldEFjY291bnQnLCdVQS0zMTA4MTA2Mi0xJ10sWydf
dHJhY2tQYWdldmlldyddXTsoZnVuY3Rpb24oZCx0KXt2YXIgZz1kLmNyZWF0ZUVsZW1lbnQodCks
cz1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKHQpWzBdO2cuc3JjPScvL3d3dy5nb29nbGUtYW5hbHl0
aWNzLmNvbS9nYS5qcyc7cy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShnLHMpfShkb2N1bWVudCwn
c2NyaXB0JykpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHJlZGlyZWN0KCkgeworICAgICAgICBp
ZiAobG9jYXRpb24uaG9zdG5hbWUgPT09ICd0YXN0ZWpzLmdpdGh1Yi5pbycpIHsKKyAgICAgICAg
ICAgIGxvY2F0aW9uLmhyZWYgPSBsb2NhdGlvbi5ocmVmLnJlcGxhY2UoJ3Rhc3RlanMuZ2l0aHVi
LmlvL3RvZG9tdmMnLCAndG9kb212Yy5jb20nKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1
bmN0aW9uIGZpbmRSb290KCkgeworICAgICAgICB2YXIgYmFzZTsKKworICAgICAgICBbL2xhYnMv
LCAvXHcqLWV4YW1wbGVzL10uZm9yRWFjaChmdW5jdGlvbiAoaHJlZikgeworICAgICAgICAgICAg
dmFyIG1hdGNoID0gbG9jYXRpb24uaHJlZi5tYXRjaChocmVmKTsKKworICAgICAgICAgICAgaWYg
KCFiYXNlICYmIG1hdGNoKSB7CisgICAgICAgICAgICAgICAgYmFzZSA9IGxvY2F0aW9uLmhyZWYu
aW5kZXhPZihtYXRjaCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIHJl
dHVybiBsb2NhdGlvbi5ocmVmLnN1YnN0cigwLCBiYXNlKTsKKyAgICB9CisKKyAgICBmdW5jdGlv
biBnZXRGaWxlKGZpbGUsIGNhbGxiYWNrKSB7CisgICAgICAgIGlmICghbG9jYXRpb24uaG9zdCkg
eworICAgICAgICAgICAgcmV0dXJuIGNvbnNvbGUuaW5mbygnTWlzcyB0aGUgaW5mbyBiYXI/IFJ1
biBUb2RvTVZDIGZyb20gYSBzZXJ2ZXIgdG8gYXZvaWQgYSBjcm9zcy1vcmlnaW4gZXJyb3IuJyk7
CisgICAgICAgIH0KKworICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisK
KyAgICAgICAgeGhyLm9wZW4oJ0dFVCcsIGZpbmRSb290KCkgKyBmaWxlLCB0cnVlKTsKKyAgICAg
ICAgeGhyLnNlbmQoKTsKKworICAgICAgICB4aHIub25sb2FkID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCAmJiBjYWxsYmFjaykgeworICAgICAgICAg
ICAgICAgIGNhbGxiYWNrKHhoci5yZXNwb25zZVRleHQpOworICAgICAgICAgICAgfQorICAgICAg
ICB9OworICAgIH0KKworICAgIGZ1bmN0aW9uIExlYXJuKGxlYXJuSlNPTiwgY29uZmlnKSB7Cisg
ICAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBMZWFybikpIHsKKyAgICAgICAgICAgIHJldHVy
biBuZXcgTGVhcm4obGVhcm5KU09OLCBjb25maWcpOworICAgICAgICB9CisKKyAgICAgICAgdmFy
IHRlbXBsYXRlLCBmcmFtZXdvcms7CisKKyAgICAgICAgaWYgKHR5cGVvZiBsZWFybkpTT04gIT09
ICdvYmplY3QnKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGxlYXJuSlNP
TiA9IEpTT04ucGFyc2UobGVhcm5KU09OKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoY29uZmlnKSB7CisgICAgICAgICAgICB0ZW1wbGF0ZSA9IGNvbmZpZy50ZW1wbGF0ZTsK
KyAgICAgICAgICAgIGZyYW1ld29yayA9IGNvbmZpZy5mcmFtZXdvcms7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoIXRlbXBsYXRlICYmIGxlYXJuSlNPTi50ZW1wbGF0ZXMpIHsKKyAgICAgICAg
ICAgIHRlbXBsYXRlID0gbGVhcm5KU09OLnRlbXBsYXRlcy50b2RvbXZjOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKCFmcmFtZXdvcmsgJiYgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEt
ZnJhbWV3b3JrXScpKSB7CisgICAgICAgICAgICBmcmFtZXdvcmsgPSBkb2N1bWVudC5xdWVyeVNl
bGVjdG9yKCdbZGF0YS1mcmFtZXdvcmtdJykuZ2V0QXR0cmlidXRlKCdkYXRhLWZyYW1ld29yaycp
OworICAgICAgICB9CisKKworICAgICAgICBpZiAodGVtcGxhdGUgJiYgbGVhcm5KU09OW2ZyYW1l
d29ya10pIHsKKyAgICAgICAgICAgIHRoaXMuZnJhbWV3b3JrSlNPTiA9IGxlYXJuSlNPTltmcmFt
ZXdvcmtdOworICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZSA9IHRlbXBsYXRlOworCisgICAgICAg
ICAgICB0aGlzLmFwcGVuZCgpOworICAgICAgICB9CisgICAgfQorCisgICAgTGVhcm4ucHJvdG90
eXBlLmFwcGVuZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGFzaWRlID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnYXNpZGUnKTsKKyAgICAgICAgYXNpZGUuaW5uZXJIVE1MID0gXy50ZW1w
bGF0ZSh0aGlzLnRlbXBsYXRlLCB0aGlzLmZyYW1ld29ya0pTT04pOworICAgICAgICBhc2lkZS5j
bGFzc05hbWUgPSAnbGVhcm4nOworCisgICAgICAgIC8vIExvY2FsaXplIGRlbW8gbGlua3MKKyAg
ICAgICAgdmFyIGRlbW9MaW5rcyA9IGFzaWRlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5kZW1vLWxpbmsn
KTsKKyAgICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChkZW1vTGlua3MsIGZ1bmN0
aW9uIChkZW1vTGluaykgeworICAgICAgICAgICAgZGVtb0xpbmsuc2V0QXR0cmlidXRlKCdocmVm
JywgZmluZFJvb3QoKSArIGRlbW9MaW5rLmdldEF0dHJpYnV0ZSgnaHJlZicpKTsKKyAgICAgICAg
fSk7CisKKyAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc05hbWUgPSAoZG9jdW1lbnQuYm9keS5j
bGFzc05hbWUgKyAnIGxlYXJuLWJhcicpLnRyaW0oKTsKKyAgICAgICAgZG9jdW1lbnQuYm9keS5p
bnNlcnRBZGphY2VudEhUTUwoJ2FmdGVyQmVnaW4nLCBhc2lkZS5vdXRlckhUTUwpOworICAgIH07
CisKKyAgICByZWRpcmVjdCgpOworICAgIGdldEZpbGUoJ2xlYXJuLmpzb24nLCBMZWFybik7Cit9
KSgpOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIu
MS9yZXNvdXJjZXMvdG9kb212Yy9sYWJzL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ib3dl
cl9jb21wb25lbnRzL3RvZG9tdmMtY29tbW9uL2JnLnBuZyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5j
aC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvbGFicy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvcmVhY3QvYm93ZXJfY29tcG9uZW50cy90b2RvbXZjLWNvbW1vbi9iZy5wbmcKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYjJhNzYwMDgyNWVlMTFmMjE4NDllZDQ3NTQ5OWM3ZDFlY2JjYzg3MApHSVQgYmlu
YXJ5IHBhdGNoCmxpdGVyYWwgMjEyNgp6Y21WLVUyKGtCeFApPGg7M0t8TGswMDBlMU5KTFRxMDAz
a0YwMDNrSDB7e1IzNFVCIXEwMDAwQ1ApdC1zPyhYakUKej4rOXlgPUhLN250PX4zdDAwME81Tmts
PFpjd1RqdShRNHZ+N0tXRVcjWW0/bEtfdjtUbXwhRmMpQE53RW5tdHNoCnp4IU9+ejgxSlQzcEZz
bT5tPTA0aFZhX2xYbF9ibT0rTTs9ZUk8JSRyTzJ0YWBzdWgqU3IjUE93Kj9hZHEhTyFDVgp6KjAm
Yilya0NDRVYpMW5JdWlMQm50VUgtTUpJOyZxWWd6fGRATmhubl9hYmkyZ2BwdTROQU1WaWQzaFMl
P3F1en4KempsSmYoeDhjajxQR2NqbipKK2F7Jkg1cCpuNSQ1ZTM/PEtDYz9vMDZtQXNOU2JnUFdP
P1B6I0N6bjwhPXs+e1ZTCnpVVkVQMW1zZzlgXk9GVWhTTzVydFhIaFJseVUyaT42JEJUPWdsR2B7
SmxjdEdIcndSSW0pNkJ1dTY1akxRbl5IOAp6dmw5bFpxVUJBKyVxdk01WEMreVlAbWZBKFlCflhQ
PWV8Njx7JSReZVU4bnJLP3YyY2NiQEpvbTVDRz5yS0FMN0oKenBsSEVJYXZWcHwwcDEmbSFHYFRp
Pzw3aVo7fUBHNyNaKX1LbSUyIUZIblEwKiY/UExSKUchSEFhSGdVI2N8JGR6CnpwaiMwSG1lYWRJ
ZT5gIyk9SmprYntCPUZLblUzcGMtJllAal9qNihoNFl+K1VxPFBVMzZDOzViPU1eRmA9cDFkSQp6
azxDUU9QTmE3PiFeSj1MSHVueDF4aTRRWEstWXsmTW9UOGt5NlZiOWN8V2huT3dGfmM9M3pPeThh
Z2t0bGlTNiMKemAjOEZgOUgpRD1ibWs5QjVNblcmX3IjKWYkYys7JExTci1AXkFuOGRoY35JcXV1
dj5qT0s3cHc3TEo7JlgwaTFDCnpHTXNIZFAxT3NAbnkkJGohPlhBaWklN2JwNWs+YHB5TkEhfmVw
YikoKXA5elI0WWw2ej1VfXtDSWRoMXooRnBBbwp6UUlXITswenBDeUM0KjdZTGtaQ09AY3VsMFJf
JnpnaHNBOEVrKXolPCFwLWJ2c3NwbFlZMn1QOyF2NENZajlrbUYKemIwYk5fbTRWKmZeWVpNb2Iy
KGozcEtqfjd2I1p0a3M9SW8re3N1JVdpdWtkSkgkYj9mWmtpQT1QWV8zT2hEQmtvCnooTFRRSFkm
Rl5eMmhHLVlgKlo5M3ZifmM/KihKY2hEalRmQ3M/elJtKmAqTipWLSQ9P1FxdGhuU3IqP09TM3Nq
Swp6bzxfVV5me35hZzYwdWw+ak5wS2E5MntATkgrU3N0WCVAfXhCKkprIWx9UFoxY0NsSW5zfn01
XiFSbmNVaypybUEKeiVTSVZndDU4RVF4TEorT2lGcTx5dTRlT0R8OUx0M2ROc2VmeE91cSlEJiRf
JWowRGdxQ3kxZ3pjfHRURDMqbWVlCnp7PSV8PGBgfV9IeXBoT3V7Oyl4a1JnK1FuSENDM1RmK2tz
cHFWNip8UUstUmNxRH00PktrQnV3cXV5WkxVcHxncgp6UFViVWJGYkJyUGQxeE9gXkMqci1pM3A5
KkYjKE9CaCE0V3lAYUMmKiF8T3xHWGNqREEmWWhGeztjRDcqbyhHU14KekBwUVNFNyl4XzgxPVF5
amU2KkxRI1RYdS03KG87Uzh1M3RwREE8U2djS2NLT3BtQTs9SEJaU0BPRlRAX1hPdnhxCnoqTnwz
S0x5dGd6SDZHVSYmVW9jNFp6azRsdW0zUHs5P2ZwSTQrUUdQSit2NmAxbGZScTNMY1MqKE0qV0sr
fGIlTwp6ZSR6PjBfZGRqJWhtQ3NwZVhkaFlSfS1pOUE9Q2BFb0NoVVl1SH5eeCE5K3wmKFBnYio+
Q2s8PTlqfCkqQHh5ZlQKenBQIytLdDx9MzlifDNXbDRmeFQoK0c/YUg+Z0deZEBNRWFVT0pSZnk1
NVR0Rkk3XlkpVnVNVT03UHAweTU1alN+CnorVEopaWdNeXJxa1g7d1U4ajY4aUlEdHFKWWhTX0Qz
X09lbS1AZzZtZV9SZmlRfXVUX0stQS05cUclfWdrM0U5Ywp6IThgS2dzTU5YbSliZWxvUGZNcWwq
fCYkTT4xcWBpIWNZKVJGWW5qTll1KmdTdkA4WGViVjclfXhZTD42KUdKUEoKekpwQTdLMzFsY0p1
SUZLU3cte3g0RlgwSzJBeil+WGc8YHNPdSQ0fF48TUM3QCt4Ynd4c0dnVHZKSUFMalB7NjhMCno4
QVl1U0dTMEdVZ2s2V2B2NFc7UnkqdW9FVG51bFBpfDU3MyVsdipaeHcjdjZ5VVFeTU9mY3BUI1Y4
UklEViMjTgp6RDFgK0FlbXNPaCl3YldERXhWY2ZwS3opanlWPTx+JlpYUGc2Y3xaREU3VTRiazxE
Xj4tKF5YSlg0WXpvaU5SdkwKenl1WTd+MjZ3LVBeWnclNkZ9c2hCd1YyJDAyYzhSc1NVeTZkTTky
ZGlDQXhpWDNJVXFzcTVpZzY+VV8hVnkqcTUkCnpqbX0xNnRKcitRWiZUP0hra3BlSXdWWC1yMUVJ
PUAlWmx0OzY8dHdIODZJRD5nKm1qJkUhQSkpJWdYSj14NnUjbAp6Y0tFUD5ieDRycVYqa2BCQnJa
JE1xanR7VHNIY3hVSD47KWlBS31CKEtpbGEmVkQlYj82bSZeMFdLNF4mRVpOQUkKejhBTVlzXyUk
RCV8TStAK2NRcUwtaGk0eUc+aCpqd2RpaSFXMXt9cD5aaHdGWXRfNFN1MWtqWTk8YkFaanp+OWVr
CnpfRGlhcitBZkpGUF85QHltVW8kS1c+PC01YCEkVk5PSTF5KEVEU0g0V3BDaWpFXz5hbCFOdD1e
ZVZFUiN1SjE9Ygp6O0JXRjJJZ3lGNUxleFYreWVjJEtpbjtBaUBteW87Rz56SiZqcmRXI2VjWGhJ
WnBoNU9ZcXdfUEVmY0Y1NjxPMTkKekwpOHIhS00oKWlmMGBAP1c0KEpkYyk3V29QR14mPSQ8elVz
TStIQ1dha0NeM3RaeGsrUGpRR31CPlo1PFo2Vnh3CnpCQEhyViQmbH5AVGFqNzBwY2V7aVN1Ukxz
VWN6RFlfNVRuRHE4UHlfUTN3aGBEOCE0aks7dkZkUlArUTA9ekp5Kgp6enVXZCUhYWlARHt8Kko8
STtPRCZpJWx7SnAtOCpQdTNWR0xXaXlrNnYjWG1RcXdgLSslZSR8Q0p3KkBgNXpiMzwKekV9eiM7
a1JoTCZxNVBERzZAbW0qJD5adV9aWkUjcTNNYytOJjFPXjdob2g5UVI3YCtMJGNCUDVwcUc9ZnFB
MHVoCnpVQnVrYXhURm1IKTx8WGJ2cDJjPUhTYk5rcFh3NzNhNWx2N1YkamI5MiN5WjE0MUAkWD9G
fUp0OGdJVTdXbTZtOQp6P2VfOzt6c25tNmBMWmVQPlQ9JClLcj5aP2tyKlVtRnFSN3p4MEM2XmJt
Y3NjQDFBR3R3X3JOSD4tWG0kZCp8UTwKem4mMUxuMHU3PWwmSUxzPiVDa0pwYERpRzlGMTh4NE5l
K2xnPCNpP2U3akwleDs0Wm5Sa05eTXgwNypxb002TjwkCkVmKD4wTiEya2ROCgpsaXRlcmFsIDAK
SGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVk
b21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2xhYnMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3Jl
YWN0L2luZGV4Lmh0bWwgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4x
L3Jlc291cmNlcy90b2RvbXZjL2xhYnMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2luZGV4
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMzQwYTJmZWMxZjkwOTU0MGQ2ZDM2ZTY3NjhhN2JlMDRlYmZkZjg4
MAotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0
ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvbGFicy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qv
aW5kZXguaHRtbApAQCAtMCwwICsxLDI0IEBACis8IWRvY3R5cGUgaHRtbD4KKzxodG1sIGxhbmc9
ImVuIiBkYXRhLWZyYW1ld29yaz0icmVhY3QiPgorICAgIDxoZWFkPgorICAgICAgICA8bWV0YSBj
aGFyc2V0PSJ1dGYtOCI+CisgICAgICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJs
ZSIgY29udGVudD0iSUU9ZWRnZSI+CisgICAgICAgIDx0aXRsZT5SZWFjdCDigKIgVG9kb01WQzwv
dGl0bGU+CisgICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iYm93ZXJfY29tcG9u
ZW50cy90b2RvbXZjLWNvbW1vbi9iYXNlLmNzcyI+CisgICAgPC9oZWFkPgorICAgIDxib2R5Pgor
ICAgICAgICA8c2VjdGlvbiBpZD0idG9kb2FwcCI+PC9zZWN0aW9uPgorICAgICAgICA8Zm9vdGVy
IGlkPSJpbmZvIj48L2Zvb3Rlcj4KKyAgICAgICAgPGRpdiBpZD0iYmVuY2htYXJrIj48L2Rpdj4K
KworICAgICAgICA8c2NyaXB0IHNyYz0iYm93ZXJfY29tcG9uZW50cy90b2RvbXZjLWNvbW1vbi9i
YXNlLmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9ImJvd2VyX2NvbXBvbmVudHMv
cmVhY3QvcmVhY3QuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0iYm93ZXJfY29t
cG9uZW50cy9yZWFjdC9KU1hUcmFuc2Zvcm1lci5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3Jp
cHQgc3JjPSJib3dlcl9jb21wb25lbnRzL2RpcmVjdG9yL2J1aWxkL2RpcmVjdG9yLm1pbi5qcyI+
PC9zY3JpcHQ+CisKKyAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzeCIgc3JjPSJqcy91dGls
cy5qc3giPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvanN4IiBzcmM9Impz
L3RvZG9JdGVtLmpzeCI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qc3gi
IHNyYz0ianMvZm9vdGVyLmpzeCI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgdHlwZT0idGV4
dC9qc3giIHNyYz0ianMvYXBwLmpzeCI+PC9zY3JpcHQ+CisgICAgPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNv
dXJjZXMvdG9kb212Yy9sYWJzL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9qcy9hcHAuanN4
IGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9k
b212Yy9sYWJzL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9qcy9hcHAuanN4Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjFlMWUyYTNlMTI3ZWRjYjRiNzFlMzYwMjA4NzYzNmRmM2VlMTk5OTkKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNl
cy90b2RvbXZjL2xhYnMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2pzL2FwcC5qc3gKQEAg
LTAsMCArMSwyMDcgQEAKKy8qKgorICogQGpzeCBSZWFjdC5ET00KKyAqLworLypqc2hpbnQgcXVv
dG1hcms6ZmFsc2UgKi8KKy8qanNoaW50IHdoaXRlOmZhbHNlICovCisvKmpzaGludCB0cmFpbGlu
ZzpmYWxzZSAqLworLypqc2hpbnQgbmV3Y2FwOmZhbHNlICovCisvKmdsb2JhbCBVdGlscywgQUxM
X1RPRE9TLCBBQ1RJVkVfVE9ET1MsIENPTVBMRVRFRF9UT0RPUywKKyAgICBUb2RvSXRlbSwgVG9k
b0Zvb3RlciwgUmVhY3QsIFJvdXRlciovCisKKyhmdW5jdGlvbiAod2luZG93LCBSZWFjdCkgewor
ICAgICd1c2Ugc3RyaWN0JzsKKworICAgIHdpbmRvdy5BTExfVE9ET1MgPSAnYWxsJzsKKyAgICB3
aW5kb3cuQUNUSVZFX1RPRE9TID0gJ2FjdGl2ZSc7CisgICAgd2luZG93LkNPTVBMRVRFRF9UT0RP
UyA9ICdjb21wbGV0ZWQnOworCisgICAgdmFyIEVOVEVSX0tFWSA9IDEzOworCisgICAgdmFyIFRv
ZG9BcHAgPSBSZWFjdC5jcmVhdGVDbGFzcyh7CisgICAgICAgIGdldEluaXRpYWxTdGF0ZTogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIHRvZG9zID0gVXRpbHMuc3RvcmUoJ3JlYWN0LXRv
ZG9zJyk7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHRvZG9zOiB0b2Rv
cywKKyAgICAgICAgICAgICAgICBub3dTaG93aW5nOiBBTExfVE9ET1MsCisgICAgICAgICAgICAg
ICAgZWRpdGluZzogbnVsbAorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBj
b21wb25lbnREaWRNb3VudDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIHJvdXRlciA9
IFJvdXRlcih7CisgICAgICAgICAgICAgICAgJy8nOiB0aGlzLnNldFN0YXRlLmJpbmQodGhpcywg
e25vd1Nob3dpbmc6IEFMTF9UT0RPU30pLAorICAgICAgICAgICAgICAgICcvYWN0aXZlJzogdGhp
cy5zZXRTdGF0ZS5iaW5kKHRoaXMsIHtub3dTaG93aW5nOiBBQ1RJVkVfVE9ET1N9KSwKKyAgICAg
ICAgICAgICAgICAnL2NvbXBsZXRlZCc6IHRoaXMuc2V0U3RhdGUuYmluZCh0aGlzLCB7bm93U2hv
d2luZzogQ09NUExFVEVEX1RPRE9TfSkKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcm91
dGVyLmluaXQoKTsKKyAgICAgICAgICAgIHRoaXMucmVmcy5uZXdGaWVsZC5nZXRET01Ob2RlKCku
Zm9jdXMoKTsKKyAgICAgICAgfSwKKworICAgICAgICBoYW5kbGVOZXdUb2RvS2V5RG93bjogZnVu
Y3Rpb24gKGV2ZW50KSB7CisgICAgICAgICAgICBpZiAoZXZlbnQud2hpY2ggIT09IEVOVEVSX0tF
WSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgdmFyIHZhbCA9IHRoaXMucmVmcy5uZXdGaWVsZC5nZXRET01Ob2RlKCkudmFsdWUudHJpbSgp
OworICAgICAgICAgICAgdmFyIHRvZG9zOworICAgICAgICAgICAgdmFyIG5ld1RvZG87CisKKyAg
ICAgICAgICAgIGlmICh2YWwpIHsKKyAgICAgICAgICAgICAgICB0b2RvcyA9IHRoaXMuc3RhdGUu
dG9kb3M7CisgICAgICAgICAgICAgICAgbmV3VG9kbyA9IHsKKyAgICAgICAgICAgICAgICAgICAg
aWQ6IFV0aWxzLnV1aWQoKSwKKyAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHZhbCwKKyAgICAg
ICAgICAgICAgICAgICAgY29tcGxldGVkOiBmYWxzZQorICAgICAgICAgICAgICAgIH07CisgICAg
ICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dG9kb3M6IHRvZG9zLmNvbmNhdChbbmV3VG9kb10p
fSk7CisgICAgICAgICAgICAgICAgdGhpcy5yZWZzLm5ld0ZpZWxkLmdldERPTU5vZGUoKS52YWx1
ZSA9ICcnOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0sCisKKyAgICAgICAgdG9nZ2xlQWxsOiBmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgICAg
ICAgIHZhciBjaGVja2VkID0gZXZlbnQudGFyZ2V0LmNoZWNrZWQ7CisKKyAgICAgICAgICAgIHRo
aXMuc3RhdGUudG9kb3MuZm9yRWFjaChmdW5jdGlvbiAodG9kbykgeworICAgICAgICAgICAgICAg
IHRvZG8uY29tcGxldGVkID0gY2hlY2tlZDsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAg
ICB0aGlzLnNldFN0YXRlKHt0b2RvczogdGhpcy5zdGF0ZS50b2Rvc30pOworICAgICAgICB9LAor
CisgICAgICAgIHRvZ2dsZTogZnVuY3Rpb24gKHRvZG8pIHsKKyAgICAgICAgICAgIHRvZG8uY29t
cGxldGVkID0gIXRvZG8uY29tcGxldGVkOworICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dG9k
b3M6IHRoaXMuc3RhdGUudG9kb3N9KTsKKyAgICAgICAgfSwKKworICAgICAgICBkZXN0cm95OiBm
dW5jdGlvbiAodG9kbykgeworICAgICAgICAgICAgdmFyIG5ld1RvZG9zID0gdGhpcy5zdGF0ZS50
b2Rvcy5maWx0ZXIoZnVuY3Rpb24gKGNhbmRpZGF0ZSkgeworICAgICAgICAgICAgICAgIHJldHVy
biBjYW5kaWRhdGUuaWQgIT09IHRvZG8uaWQ7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAg
ICAgdGhpcy5zZXRTdGF0ZSh7dG9kb3M6IG5ld1RvZG9zfSk7CisgICAgICAgIH0sCisKKyAgICAg
ICAgZWRpdDogZnVuY3Rpb24gKHRvZG8sIGNhbGxiYWNrKSB7CisgICAgICAgICAgICAvLyByZWZl
ciB0byB0b2RvSXRlbS5qcyBgaGFuZGxlRWRpdGAgZm9yIHRoZSByZWFzb25pbmcgYmVoaW5kIHRo
ZQorICAgICAgICAgICAgLy8gY2FsbGJhY2sKKyAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe2Vk
aXRpbmc6IHRvZG8uaWR9LCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2so
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9LAorCisgICAgICAgIHNhdmU6IGZ1bmN0aW9u
ICh0b2RvLCB0ZXh0KSB7CisgICAgICAgICAgICB0b2RvLnRpdGxlID0gdGV4dDsKKyAgICAgICAg
ICAgIHRoaXMuc2V0U3RhdGUoe3RvZG9zOiB0aGlzLnN0YXRlLnRvZG9zLCBlZGl0aW5nOiBudWxs
fSk7CisgICAgICAgIH0sCisKKyAgICAgICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICB0aGlzLnNldFN0YXRlKHtlZGl0aW5nOiBudWxsfSk7CisgICAgICAgIH0sCisKKyAgICAg
ICAgY2xlYXJDb21wbGV0ZWQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBuZXdUb2Rv
cyA9IHRoaXMuc3RhdGUudG9kb3MuZmlsdGVyKGZ1bmN0aW9uICh0b2RvKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuICF0b2RvLmNvbXBsZXRlZDsKKyAgICAgICAgICAgIH0pOworCisgICAgICAg
ICAgICB0aGlzLnNldFN0YXRlKHt0b2RvczogbmV3VG9kb3N9KTsKKyAgICAgICAgfSwKKworICAg
ICAgICBjb21wb25lbnREaWRVcGRhdGU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIFV0aWxz
LnN0b3JlKCdyZWFjdC10b2RvcycsIHRoaXMuc3RhdGUudG9kb3MpOworICAgICAgICB9LAorCisg
ICAgICAgIHJlbmRlcjogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIGZvb3RlciA9IG51
bGw7CisgICAgICAgICAgICB2YXIgbWFpbiA9IG51bGw7CisgICAgICAgICAgICB2YXIgdG9kb0l0
ZW1zID0ge307CisgICAgICAgICAgICB2YXIgYWN0aXZlVG9kb0NvdW50OworICAgICAgICAgICAg
dmFyIGNvbXBsZXRlZENvdW50OworCisgICAgICAgICAgICB2YXIgc2hvd25Ub2RvcyA9IHRoaXMu
c3RhdGUudG9kb3MuZmlsdGVyKGZ1bmN0aW9uICh0b2RvKSB7CisgICAgICAgICAgICAgICAgc3dp
dGNoICh0aGlzLnN0YXRlLm5vd1Nob3dpbmcpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFDVElW
RV9UT0RPUzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICF0b2RvLmNvbXBsZXRlZDsKKyAg
ICAgICAgICAgICAgICBjYXNlIENPTVBMRVRFRF9UT0RPUzoKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRvZG8uY29tcGxldGVkOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0uYmluZCh0aGlzKSk7CisKKyAgICAgICAgICAgIHNob3duVG9kb3MuZm9yRWFjaChmdW5jdGlv
biAodG9kbykgeworICAgICAgICAgICAgICAgIHRvZG9JdGVtc1t0b2RvLmlkXSA9ICgKKyAgICAg
ICAgICAgICAgICAgICAgPFRvZG9JdGVtCisgICAgICAgICAgICAgICAgICAgICAgICB0b2RvPXt0
b2RvfQorICAgICAgICAgICAgICAgICAgICAgICAgb25Ub2dnbGU9e3RoaXMudG9nZ2xlLmJpbmQo
dGhpcywgdG9kbyl9CisgICAgICAgICAgICAgICAgICAgICAgICBvbkRlc3Ryb3k9e3RoaXMuZGVz
dHJveS5iaW5kKHRoaXMsIHRvZG8pfQorICAgICAgICAgICAgICAgICAgICAgICAgb25FZGl0PXt0
aGlzLmVkaXQuYmluZCh0aGlzLCB0b2RvKX0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRp
bmc9e3RoaXMuc3RhdGUuZWRpdGluZyA9PT0gdG9kby5pZH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIG9uU2F2ZT17dGhpcy5zYXZlLmJpbmQodGhpcywgdG9kbyl9CisgICAgICAgICAgICAgICAg
ICAgICAgICBvbkNhbmNlbD17dGhpcy5jYW5jZWx9CisgICAgICAgICAgICAgICAgICAgIC8+Cisg
ICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7CisKKyAgICAgICAg
ICAgIGFjdGl2ZVRvZG9Db3VudCA9IHRoaXMuc3RhdGUudG9kb3MuZmlsdGVyKGZ1bmN0aW9uICh0
b2RvKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICF0b2RvLmNvbXBsZXRlZDsKKyAgICAgICAg
ICAgIH0pLmxlbmd0aDsKKworICAgICAgICAgICAgY29tcGxldGVkQ291bnQgPSB0aGlzLnN0YXRl
LnRvZG9zLmxlbmd0aCAtIGFjdGl2ZVRvZG9Db3VudDsKKworICAgICAgICAgICAgaWYgKGFjdGl2
ZVRvZG9Db3VudCB8fCBjb21wbGV0ZWRDb3VudCkgeworICAgICAgICAgICAgICAgIGZvb3RlciA9
CisgICAgICAgICAgICAgICAgICAgIDxUb2RvRm9vdGVyCisgICAgICAgICAgICAgICAgICAgICAg
ICBjb3VudD17YWN0aXZlVG9kb0NvdW50fQorICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxl
dGVkQ291bnQ9e2NvbXBsZXRlZENvdW50fQorICAgICAgICAgICAgICAgICAgICAgICAgbm93U2hv
d2luZz17dGhpcy5zdGF0ZS5ub3dTaG93aW5nfQorICAgICAgICAgICAgICAgICAgICAgICAgb25D
bGVhckNvbXBsZXRlZD17dGhpcy5jbGVhckNvbXBsZXRlZH0KKyAgICAgICAgICAgICAgICAgICAg
Lz47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlLnRvZG9zLmxl
bmd0aCkgeworICAgICAgICAgICAgICAgIG1haW4gPSAoCisgICAgICAgICAgICAgICAgICAgIDxz
ZWN0aW9uIGlkPSJtYWluIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlkPSJ0b2dnbGUtYWxsIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHR5cGU9ImNoZWNrYm94IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9u
Q2hhbmdlPXt0aGlzLnRvZ2dsZUFsbH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVj
a2VkPXthY3RpdmVUb2RvQ291bnQgPT09IDB9CisgICAgICAgICAgICAgICAgICAgICAgICAvPgor
ICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGlkPSJ0b2RvLWxpc3QiPgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHt0b2RvSXRlbXN9CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Vs
PgorICAgICAgICAgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgICAgICAgICAgKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuICgKKyAgICAgICAgICAgICAgICA8ZGl2
PgorICAgICAgICAgICAgICAgICAgICA8aGVhZGVyIGlkPSJoZWFkZXIiPgorICAgICAgICAgICAg
ICAgICAgICAgICAgPGgxPnRvZG9zPC9oMT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1
dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZj0ibmV3RmllbGQiCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWQ9Im5ldy10b2RvIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBsYWNlaG9sZGVyPSJXaGF0IG5lZWRzIHRvIGJlIGRvbmU/IgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9uS2V5RG93bj17dGhpcy5oYW5kbGVOZXdUb2RvS2V5RG93bn0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8+CisgICAgICAgICAgICAgICAgICAgIDwvaGVhZGVyPgorICAg
ICAgICAgICAgICAgICAgICB7bWFpbn0KKyAgICAgICAgICAgICAgICAgICAge2Zvb3Rlcn0KKyAg
ICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICB9KTsK
KworICAgIFJlYWN0LnJlbmRlckNvbXBvbmVudCg8VG9kb0FwcCAvPiwgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ3RvZG9hcHAnKSk7CisgICAgUmVhY3QucmVuZGVyQ29tcG9uZW50KAorICAgICAg
ICA8ZGl2PgorICAgICAgICAgICAgPHA+RG91YmxlLWNsaWNrIHRvIGVkaXQgYSB0b2RvPC9wPgor
ICAgICAgICAgICAgPHA+Q3JlYXRlZCBieXsnICd9CisgICAgICAgICAgICAgICAgPGEgaHJlZj0i
aHR0cDovL2dpdGh1Yi5jb20vcGV0ZWh1bnQvIj5wZXRlaHVudDwvYT4KKyAgICAgICAgICAgIDwv
cD4KKyAgICAgICAgICAgIDxwPlBhcnQgb2Z7JyAnfTxhIGhyZWY9Imh0dHA6Ly90b2RvbXZjLmNv
bSI+VG9kb01WQzwvYT48L3A+CisgICAgICAgIDwvZGl2PiwKKyAgICAgICAgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2luZm8nKSk7Cit9KSh3aW5kb3csIFJlYWN0KTsKZGlmZiAtLWdpdCBhL1dl
YnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMv
bGFicy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvanMvZm9vdGVyLmpzeCBiL1dlYnNpdGVz
L2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvbGFicy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvanMvZm9vdGVyLmpzeApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YTg5
NjU1M2RhMGI5YWI0MWM5ODIwNzc0MmI5ZjNjMzU4YzVhM2NkCi0tLSAvZGV2L251bGwKKysrIGIv
V2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212
Yy9sYWJzL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9qcy9mb290ZXIuanN4CkBAIC0wLDAg
KzEsNTggQEAKKy8qKgorICogQGpzeCBSZWFjdC5ET00KKyAqLworLypqc2hpbnQgcXVvdG1hcms6
ZmFsc2UgKi8KKy8qanNoaW50IHdoaXRlOmZhbHNlICovCisvKmpzaGludCB0cmFpbGluZzpmYWxz
ZSAqLworLypqc2hpbnQgbmV3Y2FwOmZhbHNlICovCisvKmdsb2JhbCBSZWFjdCwgQUxMX1RPRE9T
LCBBQ1RJVkVfVE9ET1MsIFV0aWxzLCBDT01QTEVURURfVE9ET1MgKi8KKyhmdW5jdGlvbiAod2lu
ZG93KSB7CisgICAgJ3VzZSBzdHJpY3QnOworCisgICAgd2luZG93LlRvZG9Gb290ZXIgPSBSZWFj
dC5jcmVhdGVDbGFzcyh7CisgICAgICAgIHJlbmRlcjogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgdmFyIGFjdGl2ZVRvZG9Xb3JkID0gVXRpbHMucGx1cmFsaXplKHRoaXMucHJvcHMuY291bnQs
ICdpdGVtJyk7CisgICAgICAgICAgICB2YXIgY2xlYXJCdXR0b24gPSBudWxsOworCisgICAgICAg
ICAgICBpZiAodGhpcy5wcm9wcy5jb21wbGV0ZWRDb3VudCA+IDApIHsKKyAgICAgICAgICAgICAg
ICBjbGVhckJ1dHRvbiA9ICgKKyAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbgorICAgICAgICAg
ICAgICAgICAgICAgICAgaWQ9ImNsZWFyLWNvbXBsZXRlZCIKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG9uQ2xpY2s9e3RoaXMucHJvcHMub25DbGVhckNvbXBsZXRlZH0+CisgICAgICAgICAgICAg
ICAgICAgICAgICB7Jyd9Q2xlYXIgY29tcGxldGVkICh7dGhpcy5wcm9wcy5jb21wbGV0ZWRDb3Vu
dH0peycnfQorICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICAp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgc2hvdyA9IHsKKyAgICAgICAgICAg
ICAgICBBTExfVE9ET1M6ICcnLAorICAgICAgICAgICAgICAgIEFDVElWRV9UT0RPUzogJycsCisg
ICAgICAgICAgICAgICAgQ09NUExFVEVEX1RPRE9TOiAnJworICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgIHNob3dbdGhpcy5wcm9wcy5ub3dTaG93aW5nXSA9ICdzZWxlY3RlZCc7CisKKyAgICAg
ICAgICAgIHJldHVybiAoCisgICAgICAgICAgICAgICAgPGZvb3RlciBpZD0iZm9vdGVyIj4KKyAg
ICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9InRvZG8tY291bnQiPgorICAgICAgICAgICAgICAg
ICAgICAgICAgPHN0cm9uZz57dGhpcy5wcm9wcy5jb3VudH08L3N0cm9uZz4KKyAgICAgICAgICAg
ICAgICAgICAgICAgIHsnICd9e2FjdGl2ZVRvZG9Xb3JkfXsnICd9bGVmdHsnJ30KKyAgICAgICAg
ICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgICAgICA8dWwgaWQ9ImZpbHRlcnMi
PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDxhIGhyZWY9IiMvIiBjbGFzcz17c2hvd1tBTExfVE9ET1NdfT5BbGw8L2E+CisgICAgICAg
ICAgICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgeycgJ30KKyAg
ICAgICAgICAgICAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8
YSBocmVmPSIjL2FjdGl2ZSIgY2xhc3M9e3Nob3dbQUNUSVZFX1RPRE9TXX0+QWN0aXZlPC9hPgor
ICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHsn
ICd9CisgICAgICAgICAgICAgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPGEgaHJlZj0iIy9jb21wbGV0ZWQiIGNsYXNzPXtzaG93W0NPTVBMRVRFRF9UT0RPU119
PkNvbXBsZXRlZDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAg
ICAgICAgICAgIDwvdWw+CisgICAgICAgICAgICAgICAgICAgIHtjbGVhckJ1dHRvbn0KKyAgICAg
ICAgICAgICAgICA8L2Zvb3Rlcj4KKyAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICB9KTsK
K30pKHdpbmRvdyk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVk
b21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2xhYnMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3Jl
YWN0L2pzL3RvZG9JdGVtLmpzeCBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0
ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvbGFicy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qv
anMvdG9kb0l0ZW0uanN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg3ZjZjMWM2YjNjZTc1Nzk1NTZmMjBhNGIyZjIy
NWE5OWM2M2MzMjcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3Jn
L1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL2xhYnMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL3JlYWN0L2pzL3RvZG9JdGVtLmpzeApAQCAtMCwwICsxLDkzIEBACisvKioKKyAqIEBqc3gg
UmVhY3QuRE9NCisgKi8KKy8qanNoaW50IHF1b3RtYXJrOiBmYWxzZSAqLworLypqc2hpbnQgd2hp
dGU6IGZhbHNlICovCisvKmpzaGludCB0cmFpbGluZzogZmFsc2UgKi8KKy8qanNoaW50IG5ld2Nh
cDogZmFsc2UgKi8KKy8qZ2xvYmFsIFJlYWN0LCBVdGlscyAqLworKGZ1bmN0aW9uICh3aW5kb3cp
IHsKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICB2YXIgRVNDQVBFX0tFWSA9IDI3OworICAgIHZh
ciBFTlRFUl9LRVkgPSAxMzsKKworICAgIHdpbmRvdy5Ub2RvSXRlbSA9IFJlYWN0LmNyZWF0ZUNs
YXNzKHsKKyAgICAgICAgaGFuZGxlU3VibWl0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2
YXIgdmFsID0gdGhpcy5zdGF0ZS5lZGl0VGV4dC50cmltKCk7CisgICAgICAgICAgICBpZiAodmFs
KSB7CisgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vblNhdmUodmFsKTsKKyAgICAgICAgICAg
ICAgICB0aGlzLnNldFN0YXRlKHtlZGl0VGV4dDogdmFsfSk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25EZXN0cm95KCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0sCisgICAgICAgIGhhbmRsZUVk
aXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIC8vIHJlYWN0IG9wdGltaXplcyByZW5kZXJz
IGJ5IGJhdGNoaW5nIHRoZW0uIFRoaXMgbWVhbnMgeW91IGNhbid0IGNhbGwKKyAgICAgICAgICAg
IC8vIHBhcmVudCdzIGBvbkVkaXRgICh3aGljaCBpbiB0aGlzIGNhc2UgdHJpZ2dlcmVzIGEgcmUt
cmVuZGVyKSwgYW5kCisgICAgICAgICAgICAvLyBpbW1lZGlhdGVseSBtYW5pcHVsYXRlIHRoZSBE
T00gYXMgaWYgdGhlIHJlbmRlcmluZydzIG92ZXIuIFB1dCBpdCBhcyBhCisgICAgICAgICAgICAv
LyBjYWxsYmFjay4gUmVmZXIgdG8gYXBwLmpzJyBgZWRpdGAgbWV0aG9kCisgICAgICAgICAgICB0
aGlzLnByb3BzLm9uRWRpdChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgdmFyIG5vZGUg
PSB0aGlzLnJlZnMuZWRpdEZpZWxkLmdldERPTU5vZGUoKTsKKyAgICAgICAgICAgICAgICBub2Rl
LmZvY3VzKCk7CisgICAgICAgICAgICAgICAgbm9kZS5zZXRTZWxlY3Rpb25SYW5nZShub2RlLnZh
bHVlLmxlbmd0aCwgbm9kZS52YWx1ZS5sZW5ndGgpOworICAgICAgICAgICAgfS5iaW5kKHRoaXMp
KTsKKyAgICAgICAgfSwKKworICAgICAgICBoYW5kbGVLZXlEb3duOiBmdW5jdGlvbiAoZXZlbnQp
IHsKKyAgICAgICAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSBFU0NBUEVfS0VZKSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7ZWRpdFRleHQ6IHRoaXMucHJvcHMudG9kby50aXRs
ZX0pOworICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25DYW5jZWwoKTsKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAoZXZlbnQua2V5Q29kZSA9PT0gRU5URVJfS0VZKSB7CisgICAgICAgICAgICAg
ICAgdGhpcy5oYW5kbGVTdWJtaXQoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgdGhpcy5zZXRTdGF0ZSh7ZWRpdFRleHQ6IGV2ZW50LnRhcmdldC52YWx1ZX0pOworICAg
ICAgICAgICAgfQorICAgICAgICB9LAorCisgICAgICAgIGhhbmRsZUNoYW5nZTogZnVuY3Rpb24g
KGV2ZW50KSB7CisgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtlZGl0VGV4dDogZXZlbnQudGFy
Z2V0LnZhbHVlfSk7CisgICAgICAgIH0sCisKKyAgICAgICAgZ2V0SW5pdGlhbFN0YXRlOiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4ge2VkaXRUZXh0OiB0aGlzLnByb3BzLnRvZG8u
dGl0bGV9OworICAgICAgICB9LAorCisgICAgICAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM6
IGZ1bmN0aW9uIChuZXh0UHJvcHMpIHsKKyAgICAgICAgICAgIGlmIChuZXh0UHJvcHMudG9kby50
aXRsZSAhPT0gdGhpcy5wcm9wcy50b2RvLnRpdGxlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5z
ZXRTdGF0ZSh0aGlzLmdldEluaXRpYWxTdGF0ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSwKKworICAgICAgICByZW5kZXI6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiAo
CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPXtVdGlscy5zdHJpbmdpZnlPYmpLZXlzKHsKKyAg
ICAgICAgICAgICAgICAgICAgY29tcGxldGVkOiB0aGlzLnByb3BzLnRvZG8uY29tcGxldGVkLAor
ICAgICAgICAgICAgICAgICAgICBlZGl0aW5nOiB0aGlzLnByb3BzLmVkaXRpbmcKKyAgICAgICAg
ICAgICAgICB9KX0+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZpZXciPgorICAg
ICAgICAgICAgICAgICAgICAgICAgPGlucHV0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2xhc3M9InRvZ2dsZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJjaGVja2Jv
eCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXt0aGlzLnByb3BzLnRvZG8u
Y29tcGxldGVkID8gJ2NoZWNrZWQnIDogbnVsbH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvbkNoYW5nZT17dGhpcy5wcm9wcy5vblRvZ2dsZX0KKyAgICAgICAgICAgICAgICAgICAgICAg
IC8+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgb25Eb3VibGVDbGljaz17dGhpcy5o
YW5kbGVFZGl0fT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy50b2Rv
LnRpdGxlfQorICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIDxidXR0b24gY2xhc3M9J2Rlc3Ryb3knIG9uQ2xpY2s9e3RoaXMucHJvcHMub25E
ZXN0cm95fSAvPgorICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAg
ICAgPGlucHV0CisgICAgICAgICAgICAgICAgICAgICAgICByZWY9ImVkaXRGaWVsZCIKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNsYXNzPSJlZGl0IgorICAgICAgICAgICAgICAgICAgICAgICAg
dmFsdWU9e3RoaXMuc3RhdGUuZWRpdFRleHR9CisgICAgICAgICAgICAgICAgICAgICAgICBvbkJs
dXI9e3RoaXMuaGFuZGxlU3VibWl0fQorICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9
e3RoaXMuaGFuZGxlQ2hhbmdlfQorICAgICAgICAgICAgICAgICAgICAgICAgb25LZXlEb3duPXt0
aGlzLmhhbmRsZUtleURvd259CisgICAgICAgICAgICAgICAgICAgIC8+CisgICAgICAgICAgICAg
ICAgPC9saT4KKyAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICB9KTsKK30pKHdpbmRvdyk7
CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jl
c291cmNlcy90b2RvbXZjL2xhYnMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2pzL3V0aWxz
LmpzeCBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2Vz
L3RvZG9tdmMvbGFicy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvanMvdXRpbHMuanN4Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjNjZTY5ODU2M2EyZjEwZmFmYjQxM2E5YTU1NzcyMDgzNzA4MWYyZDQKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jl
c291cmNlcy90b2RvbXZjL2xhYnMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2pzL3V0aWxz
LmpzeApAQCAtMCwwICsxLDQ5IEBACisoZnVuY3Rpb24gKHdpbmRvdykgeworICAgICd1c2Ugc3Ry
aWN0JzsKKworICAgIHdpbmRvdy5VdGlscyA9IHsKKyAgICAgICAgdXVpZDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgLypqc2hpbnQgYml0d2lzZTpmYWxzZSAqLworICAgICAgICAgICAgdmFy
IGksIHJhbmRvbTsKKyAgICAgICAgICAgIHZhciB1dWlkID0gJyc7CisKKyAgICAgICAgICAgIGZv
ciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisgICAgICAgICAgICAgICAgcmFuZG9tID0gTWF0aC5y
YW5kb20oKSAqIDE2IHwgMDsKKyAgICAgICAgICAgICAgICBpZiAoaSA9PT0gOCB8fCBpID09PSAx
MiB8fCBpID09PSAxNiB8fCBpID09PSAyMCkgeworICAgICAgICAgICAgICAgICAgICB1dWlkICs9
ICctJzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdXVpZCArPSAoaSA9PT0g
MTIgPyA0IDogKGkgPT09IDE2ID8gKHJhbmRvbSAmIDMgfCA4KSA6IHJhbmRvbSkpCisgICAgICAg
ICAgICAgICAgICAgIC50b1N0cmluZygxNik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHJldHVybiB1dWlkOworICAgICAgICB9LAorCisgICAgICAgIHBsdXJhbGl6ZTogZnVuY3Rpb24g
KGNvdW50LCB3b3JkKSB7CisgICAgICAgICAgICByZXR1cm4gY291bnQgPT09IDEgPyB3b3JkIDog
d29yZCArICdzJzsKKyAgICAgICAgfSwKKworICAgICAgICBzdG9yZTogZnVuY3Rpb24gKG5hbWVz
cGFjZSwgZGF0YSkgeworICAgICAgICAgICAgaWYgKGRhdGEpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbG9jYWxTdG9yYWdlLnNldEl0ZW0obmFtZXNwYWNlLCBKU09OLnN0cmluZ2lmeShkYXRh
KSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBzdG9yZSA9IGxvY2FsU3RvcmFn
ZS5nZXRJdGVtKG5hbWVzcGFjZSk7CisgICAgICAgICAgICByZXR1cm4gKHN0b3JlICYmIEpTT04u
cGFyc2Uoc3RvcmUpKSB8fCBbXTsKKyAgICAgICAgfSwKKworICAgICAgICBzdHJpbmdpZnlPYmpL
ZXlzOiBmdW5jdGlvbiAob2JqKSB7CisgICAgICAgICAgICB2YXIgcyA9ICcnOworICAgICAgICAg
ICAgdmFyIGtleTsKKworICAgICAgICAgICAgZm9yIChrZXkgaW4gb2JqKSB7CisgICAgICAgICAg
ICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIG9ialtrZXldKSB7CisgICAgICAg
ICAgICAgICAgICAgIHMgKz0ga2V5ICsgJyAnOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHMudHJpbSgpOworICAgICAgICB9CisgICAgfTsK
KworfSkod2luZG93KTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3Bl
ZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvbGFicy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
cmVhY3QvcmVhZG1lLm1kIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIu
MS9yZXNvdXJjZXMvdG9kb212Yy9sYWJzL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9yZWFk
bWUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZjIwYzRmMzk1YWY5MWU1MzE0ZDAyZDA0MjRiOGJiMzgxOGZjZDA2
MQotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0
ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvbGFicy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qv
cmVhZG1lLm1kCkBAIC0wLDAgKzEsMzggQEAKKyMgUmVhY3QgVG9kb01WQyBFeGFtcGxlCisKKz4g
UmVhY3QgaXMgYSBKYXZhU2NyaXB0IGxpYnJhcnkgZm9yIGNyZWF0aW5nIHVzZXIgaW50ZXJmYWNl
cy4gSXRzIGNvcmUgcHJpbmNpcGxlcyBhcmUgZGVjbGFyYXRpdmUgY29kZSwgZWZmaWNpZW5jeSwg
YW5kIGZsZXhpYmlsaXR5LiBTaW1wbHkgc3BlY2lmeSB3aGF0IHlvdXIgY29tcG9uZW50IGxvb2tz
IGxpa2UgYW5kIFJlYWN0IHdpbGwga2VlcCBpdCB1cC10by1kYXRlIHdoZW4gdGhlIHVuZGVybHlp
bmcgZGF0YSBjaGFuZ2VzLgorCis+IF9bUmVhY3QgLSBmYWNlYm9vay5naXRodWIuaW8vcmVhY3Rd
KGh0dHA6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QpXworCisKKyMjIExlYXJuaW5nIFJlYWN0
CisKK1RoZSBbUmVhY3QgZ2V0dGluZyBzdGFydGVkIGRvY3VtZW50YXRpb25dKGh0dHA6Ly9mYWNl
Ym9vay5naXRodWIuaW8vcmVhY3QvZG9jcy9nZXR0aW5nLXN0YXJ0ZWQuaHRtbCkgaXMgYSBncmVh
dCB3YXkgdG8gZ2V0IHN0YXJ0ZWQuCisKK0hlcmUgYXJlIHNvbWUgbGlua3MgeW91IG1heSBmaW5k
IGhlbHBmdWw6CisKKyogW0RvY3VtZW50YXRpb25dKGh0dHA6Ly9mYWNlYm9vay5naXRodWIuaW8v
cmVhY3QvZG9jcy9nZXR0aW5nLXN0YXJ0ZWQuaHRtbCkKKyogW0FQSSBSZWZlcmVuY2VdKGh0dHA6
Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy9yZWZlcmVuY2UuaHRtbCkKKyogW0Jsb2dd
KGh0dHA6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvYmxvZy8pCisqIFtSZWFjdCBvbiBHaXRI
dWJdKGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdCkKKyogW1N1cHBvcnRdKGh0dHA6
Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3Qvc3VwcG9ydC5odG1sKQorCitBcnRpY2xlcyBhbmQg
Z3VpZGVzIGZyb20gdGhlIGNvbW11bml0eToKKworKiBbUGhpbG9zb3BoeV0oaHR0cDovL3d3dy5x
dW9yYS5jb20vUGV0ZS1IdW50L1Bvc3RzL1JlYWN0LVVuZGVyLXRoZS1Ib29kKQorKiBbSG93IGlz
IEZhY2Vib29rJ3MgUmVhY3QgSmF2YVNjcmlwdCBsaWJyYXJ5XShodHRwOi8vd3d3LnF1b3JhLmNv
bS9SZWFjdC1KUy1MaWJyYXJ5L0hvdy1pcy1GYWNlYm9va3MtUmVhY3QtSmF2YVNjcmlwdC1saWJy
YXJ5KQorKiBbUmVhY3Q6IFVuZGVyIHRoZSBob29kXShodHRwOi8vd3d3LnF1b3JhLmNvbS9QZXRl
LUh1bnQvUG9zdHMvUmVhY3QtVW5kZXItdGhlLUhvb2QpCisKK0dldCBoZWxwIGZyb20gb3RoZXIg
UmVhY3QgdXNlcnM6CisKKyogW1JlYWN0IG9uIFN0YWNrT3ZlcmZsb3ddKGh0dHA6Ly9zdGFja292
ZXJmbG93LmNvbS9xdWVzdGlvbnMvdGFnZ2VkL3JlYWN0anMpCisqIFtNYWlsaW5nIGxpc3Qgb24g
R29vZ2xlIEdyb3Vwc10oaHR0cHM6Ly9ncm91cHMuZ29vZ2xlLmNvbS9mb3J1bS8jIWZvcnVtL3Jl
YWN0anMpCisqIAorX0lmIHlvdSBoYXZlIG90aGVyIGhlbHBmdWwgbGlua3MgdG8gc2hhcmUsIG9y
IGZpbmQgYW55IG9mIHRoZSBsaW5rcyBhYm92ZSBubyBsb25nZXIgd29yaywgcGxlYXNlIFtsZXQg
dXMga25vd10oaHR0cHM6Ly9naXRodWIuY29tL3Rhc3RlanMvdG9kb212Yy9pc3N1ZXMpLl8KKwor
CisjIyBSdW5uaW5nCisKK1RoZSBhcHAgaXMgYnVpbHQgd2l0aCBbSlNYXShodHRwOi8vZmFjZWJv
b2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvanN4LWluLWRlcHRoLmh0bWwpIGFuZCBjb21waWxlZCBh
dCBydW50aW1lIGZvciBhIGxpZ2h0ZXIgYW5kIG1vcmUgZnVuIGNvZGUgcmVhZGluZyBleHBlcmll
bmNlLiBBcyBzdGF0ZWQgaW4gdGhlIGxpbmssIEpTWCBpcyBub3QgbWFuZGF0b3J5LgorCitUbyBy
dW4gdGhlIGFwcCwgc3BpbiB1cCBhbiBIVFRQIHNlcnZlciAoZS5nLiBgcHl0aG9uIC1tIFNpbXBs
ZUhUVFBTZXJ2ZXJgKSBhbmQgdmlzaXQgaHR0cDovL2xvY2FsaG9zdC8uLi4vbXlleGFtcGxlLy4K
ZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVz
b3VyY2VzL3RvZG9tdmMvbGljZW5zZS5tZCBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3Bl
ZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvbGljZW5zZS5tZApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45Mjc1
ZDQzNzEwMjAyOTRiNmExMDdlNDU0YTBkMTgxOWY4YjcxYzMxCi0tLSAvZGV2L251bGwKKysrIGIv
V2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212
Yy9saWNlbnNlLm1kCkBAIC0wLDAgKzEsMjAgQEAKK0V2ZXJ5dGhpbmcgaW4gdGhpcyByZXBvIGlz
IE1JVCBMaWNlbnNlIHVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkLgorCitDb3B5cmlnaHQgKGMp
IEFkZHkgT3NtYW5pLCBTaW5kcmUgU29yaHVzLCBQYXNjYWwgSGFydGlnLCBTdGVwaGVuIFNhd2No
dWsuCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBh
bnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YKK3RoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0
ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluCit0aGUg
U29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlv
biB0aGUgcmlnaHRzIHRvCit1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3Ry
aWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZgordGhlIFNvZnR3YXJlLCBh
bmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRv
IGRvIHNvLAorc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92
ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGlu
Y2x1ZGVkIGluIGFsbAorY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0
d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFO
VFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJ
TUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTCitGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIEFVVEhPUlMgT1IKK0NPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENM
QUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUgorSU4gQU4gQUNUSU9OIE9G
IENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4K
K0NPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5H
UyBJTiBUSEUgU09GVFdBUkUuCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3Jn
L1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL3JlYWRtZS5tZCBiL1dlYnNpdGVzL2Jy
b3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvcmVhZG1lLm1k
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjI2NTAxNjUwOTRiZmIyYjg4MmU0NWM3Y2Y4ZmI4N2YzOGUxMjhkY2UKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4x
L3Jlc291cmNlcy90b2RvbXZjL3JlYWRtZS5tZApAQCAtMCwwICsxLDE0MiBAQAorIyAhW1RvZG9N
VkNdKGh0dHBzOi8vcmF3LmdpdGh1Yi5jb20vdGFzdGVqcy90b2RvbXZjL2doLXBhZ2VzL21lZGlh
L2xvZ28ucG5nKQorCisjIyBIZWxwaW5nIHlvdSBzZWxlY3QgYW4gTVZcKiBmcmFtZXdvcmsKKwor
CitEZXZlbG9wZXJzIHRoZXNlIGRheXMgYXJlIHNwb2lsZWQgd2l0aCBjaG9pY2Ugd2hlbiBpdCBj
b21lcyB0byBzZWxlY3RpbmcgYW4gTVZcKiBmcmFtZXdvcmsgZm9yIHN0cnVjdHVyaW5nIGFuZCBv
cmdhbml6aW5nIEphdmFTY3JpcHQgd2ViIGFwcHMuCisKK0JhY2tib25lLCBFbWJlciwgQW5ndWxh
ckpTLCBTcGluZS4uLiB0aGUgbGlzdCBvZiBuZXcgYW5kIHN0YWJsZSBzb2x1dGlvbnMgZ29lcyBv
biBhbmQgb24sIGJ1dCBqdXN0IGhvdyBkbyB5b3UgZGVjaWRlIG9uIHdoaWNoIHRvIHVzZSBpbiBh
IHNlYSBvZiBzbyBtYW55IG9wdGlvbnM/CisKK1RvIGhlbHAgc29sdmUgdGhpcyBwcm9ibGVtLCB3
ZSBjcmVhdGVkIFRvZG9NVkMgLSBhIHByb2plY3Qgd2hpY2ggb2ZmZXJzIHRoZSBzYW1lIFRvZG8g
YXBwbGljYXRpb24gaW1wbGVtZW50ZWQgdXNpbmcgTVYqIGNvbmNlcHRzIGluIG1vc3Qgb2YgdGhl
IHBvcHVsYXIgSmF2YVNjcmlwdCBNVlwqIGZyYW1ld29ya3Mgb2YgdG9kYXkuCisKKworIyMjIyBU
b2RvIGFwcHMgYXJlIGluY2x1ZGVkIGZvcjoKKworLSBbQmFja2JvbmUuanNdKGh0dHA6Ly9kb2N1
bWVudGNsb3VkLmdpdGh1Yi5jb20vYmFja2JvbmUpCistIFtFbWJlci5qc10oaHR0cDovL2VtYmVy
anMuY29tKQorLSBbQW5ndWxhckpTXShodHRwOi8vYW5ndWxhcmpzLm9yZykKKy0gW1NwaW5lXSho
dHRwOi8vc3BpbmVqcy5jb20pCistIFtLbm9ja291dEpTXShodHRwOi8va25vY2tvdXRqcy5jb20p
IChNVlZNKQorLSBbRG9qb10oaHR0cDovL2Rvam90b29sa2l0Lm9yZykKKy0gW1lVSV0oaHR0cDov
L3l1aWxpYnJhcnkuY29tKQorLSBbQmF0bWFuLmpzXShodHRwOi8vYmF0bWFuanMub3JnKQorLSBb
Q2xvc3VyZV0oaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9jbG9zdXJlL2xpYnJhcnkvKQorLSBbQWdp
bGl0eS5qc10oaHR0cDovL2FnaWxpdHlqcy5jb20pCistIFtLbm9ja2JhY2suanNdKGh0dHA6Ly9r
bWFsYWtvZmYuZ2l0aHViLmNvbS9rbm9ja2JhY2spCistIFtHb29nbGUgV2ViIFRvb2xraXRdKGh0
dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3dlYi10b29sa2l0LykKKworCisjIyMjIyMgTm9u
LWZyYW1ld29yayBJbXBsZW1lbnRhdGlvbnMKKworLSBbalF1ZXJ5XShodHRwOi8vanF1ZXJ5LmNv
bSkKKy0gW1ZhbmlsbGEgSlNdKGh0dHA6Ly90b2RvbXZjLmNvbS92YW5pbGxhLWV4YW1wbGVzL3Zh
bmlsbGFqcy8pCisKKyMjIyMjIyBSZXF1aXJlSlMKKworLSBbQmFja2JvbmUuanNdKGh0dHA6Ly9k
b2N1bWVudGNsb3VkLmdpdGh1Yi5jb20vYmFja2JvbmUpICsgW1JlcXVpcmVKU10oaHR0cDovL3Jl
cXVpcmVqcy5vcmcpCistIFtBbmd1bGFySlNdKGh0dHA6Ly9hbmd1bGFyanMub3JnKSArIFtSZXF1
aXJlSlNdKGh0dHA6Ly9yZXF1aXJlanMub3JnKQorLSBbS25vY2tvdXRKU10oaHR0cDovL2tub2Nr
b3V0anMuY29tKSArIFtSZXF1aXJlSlNdKGh0dHA6Ly9yZXF1aXJlanMub3JnKQorLSBbQ2FuSlNd
KGh0dHA6Ly9jYW5qcy51cykgKyBbUmVxdWlyZUpTXShodHRwOi8vcmVxdWlyZWpzLm9yZykKKwor
IyMjIyBMYWJzCisKK1dlIGFsc28gaGF2ZSBhIG51bWJlciBvZiBpbi1wcm9ncmVzcyBhcHBsaWNh
dGlvbnMgaW4gTGFiczoKKworLSBbUmVhY3RdKGh0dHA6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVh
Y3QpCistIFtNZXRlb3JdKGh0dHA6Ly9tZXRlb3IuY29tKQorLSBbRGVyYnldKGh0dHA6Ly9kZXJi
eWpzLmNvbSkKKy0gW0NhbkpTXShodHRwOi8vY2FuanMudXMpCistIFtLZW5kbyBVSV0oaHR0cDov
L2tlbmRvdWkuY29tKQorLSBbRmxpZ2h0IGJ5IFR3aXR0ZXJdKGh0dHBzOi8vZ2l0aHViLmNvbS90
d2l0dGVyL2ZsaWdodCkKKy0gW01hcmlhLmpzXShodHRwczovL2dpdGh1Yi5jb20vcGV0ZXJtaWNo
YXV4L21hcmlhKQorLSBbY3Vqb0pTXShodHRwOi8vY3Vqb2pzLmNvbSkKKy0gW01hcmlvbmV0dGVK
U10oaHR0cDovL21hcmlvbmV0dGVqcy5jb20vKQorLSBbU29ja2V0U3RyZWFtXShodHRwOi8vd3d3
LnNvY2tldHN0cmVhbS5vcmcpICsgW2pRdWVyeV0oaHR0cDovL2pxdWVyeS5jb20pCistIFtFeHQu
anNdKGh0dHA6Ly93d3cuc2VuY2hhLmNvbS9wcm9kdWN0cy9leHRqcykKKy0gW1NhbW15LmpzXSho
dHRwOi8vc2FtbXlqcy5vcmcpCistIFtkZXJtaXNdKGh0dHBzOi8vZ2l0aHViLmNvbS93ZWFyZWZy
YWN0YWwvZGVybWlzKQorLSBbU3RhcGVzLmpzXShodHRwOi8vaGF5LmdpdGh1Yi5jb20vc3RhcGVz
KQorLSBbRXBpdG9tZV0oaHR0cDovL2RpbWl0YXJjaHJpc3RvZmYuZ2l0aHViLmNvbS9FcGl0b21l
KQorLSBbVHJvb3BKU10oaHR0cHM6Ly9naXRodWIuY29tL3Ryb29wanMpCistIFtzb21hLmpzXSho
dHRwOi8vc29tYWpzLmdpdGh1Yi5jb20vc29tYWpzKQorLSBbRFVFTF0oaHR0cHM6Ly9iaXRidWNr
ZXQub3JnL21ja2FtZXkvZHVlbC93aWtpL0hvbWUpCistIFtPbGl2ZXNdKGh0dHBzOi8vZ2l0aHVi
LmNvbS9mbGFtcy9vbGl2ZXMpCistIFtQbGFzdHJvbkpTXShodHRwczovL2dpdGh1Yi5jb20vcmh5
c2JyZXR0Ym93ZW4vUGxhc3Ryb25KUykKKy0gW0Rpam9uXShodHRwczovL2dpdGh1Yi5jb20vY3Jl
eW5kZXJzL2Rpam9uLWZyYW1ld29yaykKKy0gW3JBcHBpZC5qc10oaHR0cDovL3d3dy5yYXBwaWRq
cy5jb20pCistIFtUaG9yYXhdKGh0dHA6Ly93YWxtYXJ0bGFicy5naXRodWIuY29tL3Rob3JheC8p
CistIFtLbm9ja291dEpTXShodHRwOi8va25vY2tvdXRqcy5jb20pICsgW0NsYXNzQmluZGluZ1By
b3ZpZGVyXShodHRwczovL2dpdGh1Yi5jb20vcm5pZW1leWVyL2tub2Nrb3V0LWNsYXNzQmluZGlu
Z1Byb3ZpZGVyKSAodXNpbmcgUnlhbiBOaWVtZXllcidzIENsYXNzIEJpbmRpbmcgUHJvdmlkZXIp
CistIFtLbm9ja291dEpTXShodHRwOi8va25vY2tvdXRqcy5jb20pICsgW1JlcXVpcmVKU10oaHR0
cDovL3JlcXVpcmVqcy5vcmcpICh1c2luZyBBTUQpCistIFtBbmd1bGFySlNdKGh0dHA6Ly9hbmd1
bGFyanMub3JnKSArIFtSZXF1aXJlSlNdKGh0dHA6Ly9yZXF1aXJlanMub3JnKSAodXNpbmcgQU1E
KQorLSBbQ2FuSlNdKGh0dHA6Ly9jYW5qcy51cykgKyBbUmVxdWlyZUpTXShodHRwOi8vcmVxdWly
ZWpzLm9yZykgKHVzaW5nIEFNRCkKKy0gW0FuZ3VsYXJKU10oaHR0cDovL2FuZ3VsYXJqcy5vcmcp
IChvcHRpbWl6ZWQpCistIFtCYWNrYm9uZS54bXBwXShodHRwczovL2dpdGh1Yi5jb20vZ2dvemFk
L0JhY2tib25lLnhtcHApCistIFtEYXJ0XShodHRwOi8vZGFydGxhbmcub3JnKQorLSBbQ2hhcGxp
bl0oaHR0cDovL2NoYXBsaW5qcy5vcmcpICsgW0JydW5jaF0oaHR0cDovL2JydW5jaC5pbykKKy0g
W1NlcmVuYWRlLmpzXShodHRwczovL2dpdGh1Yi5jb20vZWxhYnMvc2VyZW5hZGUuanMpCistIFtU
eXBlU2NyaXB0XShodHRwOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy8pCistIFtEZWZ0SlNdKGh0
dHA6Ly9kZWZ0anMub3JnLykKKy0gW0FyaWEgVGVtcGxhdGVzXShodHRwOi8vYXJpYXRlbXBsYXRl
cy5jb20vKQorLSBbRW55byArIEJhY2tib25lLmpzXShodHRwOi8vZW55b2pzLmNvbS8pCistIFtT
QVBVSTVdKGh0dHA6Ly9zY24uc2FwLmNvbS9jb21tdW5pdHkvZGV2ZWxvcGVyLWNlbnRlci9mcm9u
dC1lbmQpCisKKyMjIExpdmUgZGVtb3MKKworTGl2ZSBkZW1vcyBhcmUgYXZhaWxhYmxlIG9uIG91
ciBbd2Vic2l0ZV0oaHR0cDovL3RvZG9tdmMuY29tKQorCisKKyMjIFNjcmVlbnNob3QKKworIVtz
Y3JlZW5zaG90XShodHRwczovL3Jhdy5naXRodWIuY29tL3Rhc3RlanMvdG9kb212Yy9naC1wYWdl
cy9zaXRlLWFzc2V0cy9zY3JlZW5zaG90LnBuZykKKworCisjIyBUZWFtCisKK1RvZG9NVkMgd291
bGQgbm90IGJlIHBvc3NpYmxlIHdpdGhvdXQgYSBzdHJvbmcgdGVhbSBvZiBbY29udHJpYnV0b3Jz
XShodHRwczovL2dpdGh1Yi5jb20vdGFzdGVqcy90b2RvbXZjL2NvbnRyaWJ1dG9ycykgaGVscGlu
ZyBwdXNoIHRoZSBwcm9qZWN0IGZvcndhcmQgZWFjaCBkYXkuIEluIGFkZGl0aW9uLCB3ZSBoYXZl
IGEgY29yZSBwcm9qZWN0IHRlYW0gY29tcG9zZWQgb2Y6CisKKyMjIyMgW0FkZHkgT3NtYW5pXSho
dHRwOi8vZ2l0aHViLmNvbS9hZGR5b3NtYW5pKSAtIEZvdW5kZXIvTGVhZAorCis8aW1nIGFsaWdu
PSJsZWZ0IiB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHNyYz0iaHR0cDovL3d3dy5ncmF2YXRhci5j
b20vYXZhdGFyLzk2MjcwZTRjM2U1ZTk4MDZjZjcyNDU0NzVjMDBiMjc1LnBuZz9zPTQwIj4KK0Fk
ZHkgaXMgYSBEZXZlbG9wZXIgUGxhdGZvcm0gRW5naW5lZXIgYXQgR29vZ2xlIHdobyBvcmlnaW5h
bGx5IGNyZWF0ZWQgVG9kb01WQy4gSGUgb3ZlcnNlZXMgdGhlIHByb2plY3QgZGlyZWN0aW9uLCBk
cml2ZXMgZXhwYW5zaW9uIGFuZCBoZWxwcyBsZWFkIGNvcmUgZGV2ZWxvcG1lbnQgd2l0aCBTaW5k
cmUgU29yaHVzIChieSBmYXIgb3VyIG1vc3QgYWN0aXZlIGNvbnRyaWJ1dG9yISkuCisKKyMjIyMg
W1NpbmRyZSBTb3JodXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMpIC0gTGVhZCBE
ZXZlbG9wZXIKKworPGltZyBhbGlnbj0ibGVmdCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiBzcmM9
Imh0dHA6Ly93d3cuZ3JhdmF0YXIuY29tL2F2YXRhci9kMzZhOTIyMzdjNzVjNTMzN2MxN2I2MGQ5
MDY4NmJmOS5wbmc/cz00MCI+CitTaW5kcmUgaXMgYSBXZWIgRGV2ZWxvcGVyIHdobyBkcml2ZXMg
Y29yZSBkZXZlbG9wbWVudCwgcXVhbGl0eSBjb250cm9sIGFuZCBhcHBsaWNhdGlvbiBkZXNpZ24g
Zm9yIHRoZSBwcm9qZWN0LiBIaXMgY29udHJpYnV0aW9ucyBoYXZlIGhlbHBlZCB1cyBlbnN1cmUg
Y29uc2lzdGVuY3kgYW5kIGJlc3QgcHJhY3RpY2VzIGFyZSBlbmZvcmNlZCB3aGVyZXZlciBwb3Nz
aWJsZS4KKworIyMjIyBbUGFzY2FsIEhhcnRpZ10oaHR0cHM6Ly9naXRodWIuY29tL3Bhc3N5KSAt
IERldmVsb3BlcgorCis8aW1nIGFsaWduPSJsZWZ0IiB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHNy
Yz0iaHR0cDovL3d3dy5ncmF2YXRhci5jb20vYXZhdGFyL2JlNDUxZmNkYmYwZTVmZjA3ZjIzZWQx
NmNiNWM5MGEzLnBuZz9zPTQwIj4KK1Bhc2NhbCBpcyBhIFNvZnR3YXJlIEVuZ2luZWVyIGF0IHdl
bHVzZSBHbWJIIHdpdGggYSBkZWVwIHBhc3Npb24gZm9yIGNvbnNpc3RlbmN5LiBIZSB3YXRjaGVz
IHB1bGwgcmVxdWVzdHMgYW5kIGhlbHBzIGRldmVsb3BlcnMgZ2V0dGluZyB0aGVpciBjb250cmli
dXRpb25zIGludGVncmF0ZWQgd2l0aCBUb2RvTVZDLgorCisjIyMjIFtTdGVwaGVuIFNhd2NodWtd
KGh0dHBzOi8vZ2l0aHViLmNvbS9zdGVwaGVucGx1c3BsdXMpIC0gRGV2ZWxvcGVyCisKKzxpbWcg
YWxpZ249ImxlZnQiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgc3JjPSJodHRwczovL3NlY3VyZS5n
cmF2YXRhci5jb20vYXZhdGFyLzA5OGNmZTJkMzYwZTc3YzMyMjlmMmNkNTI5ODM1NGM0P3M9NDAi
PgorU3RlcGhlbiBpcyBhIEZyb250LWVuZCBFbmdpbmVlciBhdCBRdWlja2VuIExvYW5zIHRoYXQg
Y2FyZXMgYWJvdXQgaW1wcm92aW5nIHRoZSBtYWludGFpbmFiaWxpdHkgYW5kIGRldmVsb3BlciBl
eHBlcmllbmNlIG9mIG9wZW4tc291cmNlIHByb2plY3RzLiBIaXMgcmVjZW50IGNvbnRyaWJ1dGlv
bnMgaW5jbHVkZSBoZWxwaW5nIHVzIG1vdmUgYWxsIGFwcHMgb3ZlciB0byB1c2luZyBCb3dlciBh
bmQgaW1wbGVtZW50aW5nIHRoZSBuZXcgaW5mb3JtYXRpb24gYmFyLgorCisjIyMjIFtHaWFubmkg
Q2hpYXBwZXR0YV0oaHR0cHM6Ly9naXRodWIuY29tL2dmMykgLSBMb2dvIGRlc2lnbmVyCisKKzxp
bWcgYWxpZ249ImxlZnQiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgc3JjPSJodHRwOi8vd3d3Lmdy
YXZhdGFyLmNvbS9hdmF0YXIvNGIwMjA5YWUzNjUyY2M1YTdkNTM1NDVlNzU5ZmJlMzkucG5nP3M9
NDAiPgorR2lhbm5pIGlzIGEgcHJvZ3JhbW1lciBhbmQgZGVzaWduZXIgY3VycmVudGx5IHdvcmtp
bmcgYXMgdGhlIENoaWVmIFJpZ2dlciBhdCBNZXRhTGFiLgorCisjIyBEaXNjbGFpbWVyCisKKzxp
bWcgYWxpZ249InJpZ2h0IiB3aWR0aD0iMjMwIiBoZWlnaHQ9IjIzMCIgc3JjPSJodHRwczovL3Jh
dy5naXRodWIuY29tL3Rhc3RlanMvdG9kb212Yy9naC1wYWdlcy9tZWRpYS9pY29uLXNtYWxsLnBu
ZyI+CisKK1RvZG9NVkMgaGFzIGJlZW4gY2FsbGVkIG1hbnkgdGhpbmdzIGluY2x1ZGluZyB0aGUg
J1NwZWVkLWRhdGluZycgYW5kICdSb3NldHRhIFN0b25lJyBvZiBNViogZnJhbWV3b3Jrcy4gV2hp
bHN0IHdlIGhvcGUgdGhhdCB0aGlzIHByb2plY3QgaXMgYWJsZSB0byBvZmZlciBhc3Npc3RhbmNl
IGluIGRlY2lkaW5nIHdoYXQgZnJhbWV3b3JrcyBhcmUgd29ydGggc3BlbmRpbmcgbW9yZSB0aW1l
IGxvb2tpbmcgYXQsIHJlbWVtYmVyIHRoYXQgdGhlIFRvZG8gYXBwbGljYXRpb24gb2ZmZXJzIGEg
bGltaXRlZCB2aWV3IG9mIHdoYXQgYSBmcmFtZXdvcmsgbWF5IGJlIGNhcGFibGUgb2YuCisKK0l0
IGlzIG1lYW50IHRvIGJlIHVzZWQgYXMgYSBnYXRld2F5IHRvIHJldmlld2luZyBob3cgYSBiYXNp
YyBhcHBsaWNhdGlvbiB1c2luZyBhIGZyYW1ld29yayBtYXkgYmUgc3RydWN0dXJlZCBhbmQgd2Ug
aGVhdmlseSByZWNvbW1lbmQgaW52ZXN0aW5nIHRpbWUgcmVzZWFyY2hpbmcgYSBzb2x1dGlvbiBp
biBtb3JlIGRlcHRoIGJlZm9yZSBvcHRpbmcgdG8gdXNlIGl0LgorCisKKyMjIEdldHRpbmcgSW52
b2x2ZWQKKworV2hpbHN0IHdlIGVuam95IGltcGxlbWVudGluZyBhbmQgaW1wcm92aW5nIGV4aXN0
aW5nIFRvZG8gYXBwcywgd2UncmUgYWx3YXlzIGludGVyZXN0ZWQgaW4gc3BlYWtpbmcgdG8gZnJh
bWV3b3JrIGF1dGhvcnMgKGFuZCB1c2Vycykgd2lzaGluZyB0byBzaGFyZSBUb2RvIGFwcCBpbXBs
ZW1lbnRhdGlvbnMgaW4gdGhlaXIgZnJhbWV3b3JrL3NvbHV0aW9uIG9mIGNob2ljZS4KKworQ2hl
Y2sgb3V0IG91ciBbY29udHJpYnV0aW9uIGRvY3NdKGNvbnRyaWJ1dGluZy5tZCkgZm9yIG1vcmUg
aW5mby4KKworCisjIyBMaWNlbnNlCisKK0V2ZXJ5dGhpbmcgaW4gdGhpcyByZXBvIGlzIE1JVCBM
aWNlbnNlIHVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkLgorCitNSVQgwqkgQWRkeSBPc21hbmks
IFNpbmRyZSBTb3JodXMsIFBhc2NhbCBIYXJ0aWcsIFN0ZXBoZW4gU2F3Y2h1ay4KZGlmZiAtLWdp
dCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3Rv
ZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay8uYmFiZWxyYyBiL1dl
YnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMv
dmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay8uYmFiZWxyYwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li40MGEyMzAzZmI1OWNjYTRkYzUwZmEwMDgwYTM0ODdiMWI0ZTE2MWFhCi0tLSAvZGV2L251bGwK
KysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMv
dG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrLy5iYWJlbHJjCkBA
IC0wLDAgKzEsMTUgQEAKK3sKKyAgInByZXNldHMiOiBbCisgICAgWyJlczIwMTUiLCB7Im1vZHVs
ZXMiOiBmYWxzZX1dLAorICAgICJlczIwMTYiLAorICAgICJzdGFnZS0yIiwKKyAgICAicmVhY3Qi
CisgIF0sCisgICJlbnYiOiB7CisgICAgInRlc3QiOiB7CisgICAgICAicGx1Z2lucyI6IFsKKyAg
ICAgICAgWyJfX2NvdmVyYWdlX18iLCB7Imlnbm9yZSI6ICIqLisodGVzdHxzdHViKS4qIn1dCisg
ICAgICBdCisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gu
b3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMy
MDE1LWJhYmVsLXdlYnBhY2svLmVzbGludGlnbm9yZSBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5v
cmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIw
MTUtYmFiZWwtd2VicGFjay8uZXNsaW50aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFmOWJmZmE1MmUxNzBh
NTJiZDdiNzFlNWZjZGI4NmM0MzNlOTQ3ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9i
cm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEt
ZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svLmVzbGludGlnbm9yZQpAQCAtMCwwICsxLDMg
QEAKK2NvdmVyYWdlLworbm9kZV9tb2R1bGVzLworZGlzdApkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMv
YnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxh
LWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL1JFQURNRS5tZCBiL1dlYnNpdGVzL2Jyb3dz
ZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFt
cGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjRlMTM3Mzhl
MjJiYTFjZDUwYzliNzU3ZWY4ZGU5OWMwMjQ2MDkxOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNp
dGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvdmFu
aWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9SRUFETUUubWQKQEAgLTAsMCArMSwx
MCBAQAorIyBTcGVlZG9tZXRlciAyLjE6IEVTMjAxNSArIEJhYmVsICsgV2VicGFjayBUb2RvTVZD
IGV4YW1wbGUKKworIyMgVGVzdCBsb2NhbGx5CisKKzEuIGBucG0gaW5zdGFsbGAKKzIuIGBucG0g
cnVuIGJ1aWxkYCAocHJvZHVjdGlvbiBidWlsZCkKKworIyMgQnVpbGQKKworMS4gYG5wbSBydW4g
YnVpbGRgIChwcm9kdWN0aW9uIGJ1aWxkKQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJl
bmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVz
L2VzMjAxNS1iYWJlbC13ZWJwYWNrL2Rpc3QvYnVuZGxlLmFwcC45MzBhZDhiODMxMjY4NjJkNzQ0
NS5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2Vz
L3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9kaXN0L2J1bmRs
ZS5hcHAuOTMwYWQ4YjgzMTI2ODYyZDc0NDUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzkzZDI0OTYzYWZhOTc5
ZTNmZDU3NWU2MmU4MmEyM2NlYWMwMGUwNQotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jy
b3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1l
eGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9kaXN0L2J1bmRsZS5hcHAuOTMwYWQ4YjgzMTI2
ODYyZDc0NDUuanMKQEAgLTAsMCArMSwyIEBACit3ZWJwYWNrSnNvbnAoWzAsMl0sW2Z1bmN0aW9u
KHQsZSxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbyh0LGUpe3JldHVybihlfHxkb2N1bWVudCku
cXVlcnlTZWxlY3Rvcih0KX1mdW5jdGlvbiBuKHQsZSl7cmV0dXJuKGV8fGRvY3VtZW50KS5xdWVy
eVNlbGVjdG9yQWxsKHQpfWZ1bmN0aW9uIHIodCxlLGksbyl7dC5hZGRFdmVudExpc3RlbmVyKGUs
aSwhIW8pfWZ1bmN0aW9uIGModCxlLGksbyl7ZnVuY3Rpb24gYyhpKXt2YXIgcj1pLnRhcmdldCxj
PW4oZSx0KSxsPUFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoYyxyKT49MDtsJiZvLmNhbGwo
cixpKX12YXIgbD0iYmx1ciI9PT1pfHwiZm9jdXMiPT09aTtyKHQsaSxjLGwpfWZ1bmN0aW9uIGwo
dCxlKXtpZih0LnBhcmVudE5vZGUpcmV0dXJuIHQucGFyZW50Tm9kZS50YWdOYW1lLnRvTG93ZXJD
YXNlKCk9PT1lLnRvTG93ZXJDYXNlKCk/dC5wYXJlbnROb2RlOmwodC5wYXJlbnROb2RlLGUpfWZ1
bmN0aW9uIGEodCxlKXt2YXIgaT10LmluZGV4T2YoZSk7cmV0dXJuIGk9PT0tMT90OnZvaWQgdC5z
cGxpY2UoaSwxKX1pLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gb30pLGkuZChlLCJiIixmdW5j
dGlvbigpe3JldHVybiBufSksaS5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSxpLmQoZSwi
YyIsZnVuY3Rpb24oKXtyZXR1cm4gY30pLGkuZChlLCJlIixmdW5jdGlvbigpe3JldHVybiBsfSks
aS5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSxOb2RlTGlzdC5wcm90b3R5cGUuZm9yRWFj
aD1BcnJheS5wcm90b3R5cGUuZm9yRWFjaH0sLGZ1bmN0aW9uKHQsZSxpKXsidXNlIHN0cmljdCI7
ZnVuY3Rpb24gbygpe2kuaShjLmEpKCl9dmFyIG49aSgxKSxyPShpLm4obiksaSgxMCkpLGM9KGku
bihyKSxpKDApLGkoOCkpO2UuYT1vfSxmdW5jdGlvbih0LGUsaSl7InVzZSBzdHJpY3QiO2Z1bmN0
aW9uIG8odCxlKXt2YXIgaT10aGlzO2kubW9kZWw9dCxpLnZpZXc9ZSxpLnZpZXcuYmluZCgibmV3
VG9kbyIsZnVuY3Rpb24odCl7aS5hZGRJdGVtKHQpfSksaS52aWV3LmJpbmQoIml0ZW1FZGl0Iixm
dW5jdGlvbih0KXtpLmVkaXRJdGVtKHQuaWQpfSksaS52aWV3LmJpbmQoIml0ZW1FZGl0RG9uZSIs
ZnVuY3Rpb24odCl7aS5lZGl0SXRlbVNhdmUodC5pZCx0LnRpdGxlKX0pLGkudmlldy5iaW5kKCJp
dGVtRWRpdENhbmNlbCIsZnVuY3Rpb24odCl7aS5lZGl0SXRlbUNhbmNlbCh0LmlkKX0pLGkudmll
dy5iaW5kKCJpdGVtUmVtb3ZlIixmdW5jdGlvbih0KXtpLnJlbW92ZUl0ZW0odC5pZCl9KSxpLnZp
ZXcuYmluZCgiaXRlbVRvZ2dsZSIsZnVuY3Rpb24odCl7aS50b2dnbGVDb21wbGV0ZSh0LmlkLHQu
Y29tcGxldGVkKX0pLGkudmlldy5iaW5kKCJyZW1vdmVDb21wbGV0ZWQiLGZ1bmN0aW9uKCl7aS5y
ZW1vdmVDb21wbGV0ZWRJdGVtcygpfSksaS52aWV3LmJpbmQoInRvZ2dsZUFsbCIsZnVuY3Rpb24o
dCl7aS50b2dnbGVBbGwodC5jb21wbGV0ZWQpfSl9ZS5hPW8sby5wcm90b3R5cGUuc2V0Vmlldz1m
dW5jdGlvbih0KXt2YXIgZT10LnNwbGl0KCIvIilbMV0saT1lfHwiIjt0aGlzLl91cGRhdGVGaWx0
ZXJTdGF0ZShpKX0sby5wcm90b3R5cGUuc2hvd0FsbD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dC5t
b2RlbC5yZWFkKGZ1bmN0aW9uKGUpe3Qudmlldy5yZW5kZXIoInNob3dFbnRyaWVzIixlKX0pfSxv
LnByb3RvdHlwZS5zaG93QWN0aXZlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0Lm1vZGVsLnJlYWQo
e2NvbXBsZXRlZDohMX0sZnVuY3Rpb24oZSl7dC52aWV3LnJlbmRlcigic2hvd0VudHJpZXMiLGUp
fSl9LG8ucHJvdG90eXBlLnNob3dDb21wbGV0ZWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3QubW9k
ZWwucmVhZCh7Y29tcGxldGVkOiEwfSxmdW5jdGlvbihlKXt0LnZpZXcucmVuZGVyKCJzaG93RW50
cmllcyIsZSl9KX0sby5wcm90b3R5cGUuYWRkSXRlbT1mdW5jdGlvbih0KXt2YXIgZT10aGlzOyIi
IT09dC50cmltKCkmJmUubW9kZWwuY3JlYXRlKHQsZnVuY3Rpb24oKXtlLnZpZXcucmVuZGVyKCJj
bGVhck5ld1RvZG8iKSxlLl9maWx0ZXIoITApfSl9LG8ucHJvdG90eXBlLmVkaXRJdGVtPWZ1bmN0
aW9uKHQpe3ZhciBlPXRoaXM7ZS5tb2RlbC5yZWFkKHQsZnVuY3Rpb24oaSl7ZS52aWV3LnJlbmRl
cigiZWRpdEl0ZW0iLHtpZDp0LHRpdGxlOmlbMF0udGl0bGV9KX0pfSxvLnByb3RvdHlwZS5lZGl0
SXRlbVNhdmU9ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzO2UudHJpbSgpP2kubW9kZWwudXBkYXRl
KHQse3RpdGxlOmV9LGZ1bmN0aW9uKCl7aS52aWV3LnJlbmRlcigiZWRpdEl0ZW1Eb25lIix7aWQ6
dCx0aXRsZTplfSl9KTppLnJlbW92ZUl0ZW0odCl9LG8ucHJvdG90eXBlLmVkaXRJdGVtQ2FuY2Vs
PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7ZS5tb2RlbC5yZWFkKHQsZnVuY3Rpb24oaSl7ZS52aWV3
LnJlbmRlcigiZWRpdEl0ZW1Eb25lIix7aWQ6dCx0aXRsZTppWzBdLnRpdGxlfSl9KX0sby5wcm90
b3R5cGUucmVtb3ZlSXRlbT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2UubW9kZWwucmVtb3ZlKHQs
ZnVuY3Rpb24oKXtlLnZpZXcucmVuZGVyKCJyZW1vdmVJdGVtIix0KX0pLGUuX2ZpbHRlcigpfSxv
LnByb3RvdHlwZS5yZW1vdmVDb21wbGV0ZWRJdGVtcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dC5t
b2RlbC5yZWFkKHtjb21wbGV0ZWQ6ITB9LGZ1bmN0aW9uKGUpe2UuZm9yRWFjaChmdW5jdGlvbihl
KXt0LnJlbW92ZUl0ZW0oZS5pZCl9KX0pLHQuX2ZpbHRlcigpfSxvLnByb3RvdHlwZS50b2dnbGVD
b21wbGV0ZT1mdW5jdGlvbih0LGUsaSl7dmFyIG89dGhpcztvLm1vZGVsLnVwZGF0ZSh0LHtjb21w
bGV0ZWQ6ZX0sZnVuY3Rpb24oKXtvLnZpZXcucmVuZGVyKCJlbGVtZW50Q29tcGxldGUiLHtpZDp0
LGNvbXBsZXRlZDplfSl9KSxpfHxvLl9maWx0ZXIoKX0sby5wcm90b3R5cGUudG9nZ2xlQWxsPWZ1
bmN0aW9uKHQpe3ZhciBlPXRoaXM7ZS5tb2RlbC5yZWFkKHtjb21wbGV0ZWQ6IXR9LGZ1bmN0aW9u
KGkpe2kuZm9yRWFjaChmdW5jdGlvbihpKXtlLnRvZ2dsZUNvbXBsZXRlKGkuaWQsdCwhMCl9KX0p
LGUuX2ZpbHRlcigpfSxvLnByb3RvdHlwZS5fdXBkYXRlQ291bnQ9ZnVuY3Rpb24oKXt2YXIgdD10
aGlzO3QubW9kZWwuZ2V0Q291bnQoZnVuY3Rpb24oZSl7dC52aWV3LnJlbmRlcigidXBkYXRlRWxl
bWVudENvdW50IixlLmFjdGl2ZSksdC52aWV3LnJlbmRlcigiY2xlYXJDb21wbGV0ZWRCdXR0b24i
LHtjb21wbGV0ZWQ6ZS5jb21wbGV0ZWQsdmlzaWJsZTplLmNvbXBsZXRlZD4wfSksdC52aWV3LnJl
bmRlcigidG9nZ2xlQWxsIix7Y2hlY2tlZDplLmNvbXBsZXRlZD09PWUudG90YWx9KSx0LnZpZXcu
cmVuZGVyKCJjb250ZW50QmxvY2tWaXNpYmlsaXR5Iix7dmlzaWJsZTplLnRvdGFsPjB9KX0pfSxv
LnByb3RvdHlwZS5fZmlsdGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2FjdGl2ZVJvdXRlLmNo
YXJBdCgwKS50b1VwcGVyQ2FzZSgpK3RoaXMuX2FjdGl2ZVJvdXRlLnN1YnN0cigxKTt0aGlzLl91
cGRhdGVDb3VudCgpLCh0fHwiQWxsIiE9PXRoaXMuX2xhc3RBY3RpdmVSb3V0ZXx8dGhpcy5fbGFz
dEFjdGl2ZVJvdXRlIT09ZSkmJnRoaXNbInNob3ciK2VdKCksdGhpcy5fbGFzdEFjdGl2ZVJvdXRl
PWV9LG8ucHJvdG90eXBlLl91cGRhdGVGaWx0ZXJTdGF0ZT1mdW5jdGlvbih0KXt0PXQuc3BsaXQo
Ij8iKVswXSx0aGlzLl9hY3RpdmVSb3V0ZT10LCIiPT09dCYmKHRoaXMuX2FjdGl2ZVJvdXRlPSJB
bGwiKSx0aGlzLl9maWx0ZXIoKSx0aGlzLnZpZXcucmVuZGVyKCJzZXRGaWx0ZXIiLHQpfX0sZnVu
Y3Rpb24odCxlLGkpe3ZhciBvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10
eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rp
b24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9
PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fTshZnVuY3Rp
b24oaSl7dmFyIG49e30scj17fTtuLmxlbmd0aD0wLG4uZ2V0SXRlbT1mdW5jdGlvbih0KXtyZXR1
cm4gclt0XXx8bnVsbH0sbi5zZXRJdGVtPWZ1bmN0aW9uKHQsZSl7InVuZGVmaW5lZCI9PXR5cGVv
ZiBlP24ucmVtb3ZlSXRlbSh0KTooci5oYXNPd25Qcm9wZXJ0eSh0KXx8bi5sZW5ndGgrKyxyW3Rd
PSIiK2UpfSxuLnJlbW92ZUl0ZW09ZnVuY3Rpb24odCl7ci5oYXNPd25Qcm9wZXJ0eSh0KSYmKGRl
bGV0ZSByW3RdLG4ubGVuZ3RoLS0pfSxuLmtleT1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0Lmtl
eXMocilbdF18fG51bGx9LG4uY2xlYXI9ZnVuY3Rpb24oKXtyPXt9LG4ubGVuZ3RoPTB9LCJvYmpl
Y3QiPT09byhlKT90LmV4cG9ydHM9bjppLmxvY2FsU3RvcmFnZU1lbW9yeT1ufSh0aGlzKX0sZnVu
Y3Rpb24odCxlLGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBvKHQpe3RoaXMuc3RvcmFnZT10fXZh
ciBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0
ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQm
JiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1T
eW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fTtlLmE9byxvLnByb3RvdHlwZS5jcmVh
dGU9ZnVuY3Rpb24odCxlKXt0PXR8fCIiLGU9ZXx8ZnVuY3Rpb24oKXt9O3ZhciBpPXt0aXRsZTp0
LnRyaW0oKSxjb21wbGV0ZWQ6ITF9O3RoaXMuc3RvcmFnZS5zYXZlKGksZSl9LG8ucHJvdG90eXBl
LnJlYWQ9ZnVuY3Rpb24odCxlKXt2YXIgaT0idW5kZWZpbmVkIj09dHlwZW9mIHQ/InVuZGVmaW5l
ZCI6bih0KTtyZXR1cm4gZT1lfHxmdW5jdGlvbigpe30sImZ1bmN0aW9uIj09PWk/KGU9dCx0aGlz
LnN0b3JhZ2UuZmluZEFsbChlKSk6dm9pZCgic3RyaW5nIj09PWl8fCJudW1iZXIiPT09aT8odD1w
YXJzZUludCh0LDEwKSx0aGlzLnN0b3JhZ2UuZmluZCh7aWQ6dH0sZSkpOnRoaXMuc3RvcmFnZS5m
aW5kKHQsZSkpfSxvLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlLGkpe3RoaXMuc3RvcmFn
ZS5zYXZlKGUsaSx0KX0sby5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQsZSl7dGhpcy5zdG9y
YWdlLnJlbW92ZSh0LGUpfSxvLnByb3RvdHlwZS5yZW1vdmVBbGw9ZnVuY3Rpb24odCl7dGhpcy5z
dG9yYWdlLmRyb3AodCl9LG8ucHJvdG90eXBlLmdldENvdW50PWZ1bmN0aW9uKHQpe3ZhciBlPXth
Y3RpdmU6MCxjb21wbGV0ZWQ6MCx0b3RhbDowfTt0aGlzLnN0b3JhZ2UuZmluZEFsbChmdW5jdGlv
bihpKXtpLmZvckVhY2goZnVuY3Rpb24odCl7dC5jb21wbGV0ZWQ/ZS5jb21wbGV0ZWQrKzplLmFj
dGl2ZSsrLGUudG90YWwrK30pLHQoZSl9KX19LGZ1bmN0aW9uKHQsZSxpKXsidXNlIHN0cmljdCI7
ZnVuY3Rpb24gbyh0LGUpe2lmKGU9ZXx8ZnVuY3Rpb24oKXt9LHRoaXMuX2RiTmFtZT10LCFyW3Rd
KXt2YXIgaT17dG9kb3M6W119O3JbdF09SlNPTi5zdHJpbmdpZnkoaSl9ZS5jYWxsKHRoaXMsSlNP
Ti5wYXJzZShyW3RdKSksdGhpcy5zdWJzY3JpYmVycz1bXX12YXIgbj1pKDApLHI9aSg0KTtpLm4o
cik7ZS5hPW87dmFyIGM9MTtvLnByb3RvdHlwZS5zdWJzY3JpYmU9ZnVuY3Rpb24odCl7dmFyIGU9
dGhpcztyZXR1cm4gdGhpcy5zdWJzY3JpYmVycy5wdXNoKHQpLGZ1bmN0aW9uKCl7cmV0dXJuIGku
aShuLmYpKGUuc3Vic2NyaWJlcnMsdCl9fSxvLnByb3RvdHlwZS5fbm90aWZ5PWZ1bmN0aW9uKCl7
dGhpcy5zdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KX0sby5wcm90
b3R5cGUuZmluZD1mdW5jdGlvbih0LGUpe2lmKGUpe3ZhciBpPUpTT04ucGFyc2Uoclt0aGlzLl9k
Yk5hbWVdKS50b2RvcztlLmNhbGwodGhpcyxpLmZpbHRlcihmdW5jdGlvbihlKXtmb3IodmFyIGkg
aW4gdClpZih0W2ldIT09ZVtpXSlyZXR1cm4hMTtyZXR1cm4hMH0pKX19LG8ucHJvdG90eXBlLmZp
bmRBbGw9ZnVuY3Rpb24odCl7dD10fHxmdW5jdGlvbigpe30sdC5jYWxsKHRoaXMsSlNPTi5wYXJz
ZShyW3RoaXMuX2RiTmFtZV0pLnRvZG9zKX0sby5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbih0LGUs
aSl7dmFyIG89SlNPTi5wYXJzZShyW3RoaXMuX2RiTmFtZV0pLG49by50b2RvcztpZihlPWV8fGZ1
bmN0aW9uKCl7fSxpKXtmb3IodmFyIGw9MDtsPG4ubGVuZ3RoO2wrKylpZihuW2xdLmlkPT09aSl7
Zm9yKHZhciBhIGluIHQpbltsXVthXT10W2FdO2JyZWFrfXJbdGhpcy5fZGJOYW1lXT1KU09OLnN0
cmluZ2lmeShvKSxlLmNhbGwodGhpcyxKU09OLnBhcnNlKHJbdGhpcy5fZGJOYW1lXSkudG9kb3Mp
fWVsc2UgdC5pZD1jKyssbi5wdXNoKHQpLHJbdGhpcy5fZGJOYW1lXT1KU09OLnN0cmluZ2lmeShv
KSxlLmNhbGwodGhpcyxbdF0pO3RoaXMuX25vdGlmeSgpfSxvLnByb3RvdHlwZS5yZW1vdmU9ZnVu
Y3Rpb24odCxlKXtmb3IodmFyIGk9SlNPTi5wYXJzZShyW3RoaXMuX2RiTmFtZV0pLG89aS50b2Rv
cyxuPTA7bjxvLmxlbmd0aDtuKyspaWYob1tuXS5pZD09PXQpe28uc3BsaWNlKG4sMSk7YnJlYWt9
clt0aGlzLl9kYk5hbWVdPUpTT04uc3RyaW5naWZ5KGkpLGUuY2FsbCh0aGlzLEpTT04ucGFyc2Uo
clt0aGlzLl9kYk5hbWVdKS50b2RvcyksdGhpcy5fbm90aWZ5KCl9LG8ucHJvdG90eXBlLmRyb3A9
ZnVuY3Rpb24odCl7clt0aGlzLl9kYk5hbWVdPUpTT04uc3RyaW5naWZ5KHt0b2RvczpbXX0pLHQu
Y2FsbCh0aGlzLEpTT04ucGFyc2Uoclt0aGlzLl9kYk5hbWVdKS50b2RvcyksdGhpcy5fbm90aWZ5
KCl9fSxmdW5jdGlvbih0LGUsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG8oKXt0aGlzLmRlZmF1
bHRUZW1wbGF0ZT0nXG4gICAgPGxpIGRhdGEtaWQ9Int7aWR9fSIgY2xhc3M9Int7Y29tcGxldGVk
fX0iPlxuICAgICAgPGRpdiBjbGFzcz0idmlldyI+XG4gICAgICAgIDxpbnB1dCBjbGFzcz0idG9n
Z2xlIiB0eXBlPSJjaGVja2JveCIge3tjaGVja2VkfX0gLz5cbiAgICAgICAgPGxhYmVsPnt7dGl0
bGV9fTwvbGFiZWw+XG4gICAgICAgIDxidXR0b24gY2xhc3M9ImRlc3Ryb3kiPjwvYnV0dG9uPlxu
ICAgICAgPC9kaXY+XG4gICAgPC9saT5cbiAgJ31lLmE9bzt2YXIgbj17IiYiOiImYW1wOyIsIjwi
OiImbHQ7IiwiPiI6IiZndDsiLCciJzoiJnF1b3Q7IiwiJyI6IiYjeDI3OyIsImAiOiImI3g2MDsi
fSxyPWZ1bmN0aW9uKHQpe3JldHVybiBuW3RdfSxjPS9bJjw+IidgXS9nLGw9bmV3IFJlZ0V4cChj
LnNvdXJjZSksYT1mdW5jdGlvbih0KXtyZXR1cm4gdCYmbC50ZXN0KHQpP3QucmVwbGFjZShjLHIp
OnR9O28ucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24odCl7dmFyIGUsaSxvPSIiO2ZvcihlPTAsaT10
Lmxlbmd0aDtlPGk7ZSsrKXt2YXIgbj10aGlzLmRlZmF1bHRUZW1wbGF0ZSxyPSIiLGM9IiI7dFtl
XS5jb21wbGV0ZWQmJihyPSJjb21wbGV0ZWQiLGM9ImNoZWNrZWQiKSxuPW4ucmVwbGFjZSgie3tp
ZH19Iix0W2VdLmlkKSxuPW4ucmVwbGFjZSgie3t0aXRsZX19IixhKHRbZV0udGl0bGUpKSxuPW4u
cmVwbGFjZSgie3tjb21wbGV0ZWR9fSIsciksbj1uLnJlcGxhY2UoInt7Y2hlY2tlZH19IixjKSxv
Kz1ufXJldHVybiBvfSxvLnByb3RvdHlwZS5pdGVtQ291bnRlcj1mdW5jdGlvbih0KXt2YXIgZT0x
PT09dD8iIjoicyI7cmV0dXJuIjxzdHJvbmc+Iit0KyI8L3N0cm9uZz4gaXRlbSIrZSsiIGxlZnQi
fSxvLnByb3RvdHlwZS5jbGVhckNvbXBsZXRlZEJ1dHRvbj1mdW5jdGlvbih0KXtyZXR1cm4gdD4w
PyJDbGVhciBjb21wbGV0ZWQiOiIifX0sZnVuY3Rpb24odCxlLGkpeyJ1c2Ugc3RyaWN0IjtmdW5j
dGlvbiBvKHQpe3RoaXMuc3RvcmFnZT1uZXcgYS5hKHQpLHRoaXMubW9kZWw9bmV3IGwuYSh0aGlz
LnN0b3JhZ2UpLHRoaXMudGVtcGxhdGU9bmV3IGQuYSx0aGlzLnZpZXc9bmV3IHIuYSh0aGlzLnRl
bXBsYXRlKSx0aGlzLmNvbnRyb2xsZXI9bmV3IGMuYSh0aGlzLm1vZGVsLHRoaXMudmlldyl9ZnVu
Y3Rpb24gbigpe3M9bmV3IG8oInRvZG9zLXZhbmlsbGFqcyIpLHMuY29udHJvbGxlci5zZXRWaWV3
KGRvY3VtZW50LmxvY2F0aW9uLmhhc2gpLHUuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgp
fSl9dmFyIHI9aSg5KSxjPWkoMyksbD1pKDUpLGE9aSg2KSxkPWkoNyk7aSgwKTtpLmQoZSwiYSIs
ZnVuY3Rpb24oKXtyZXR1cm4gbn0pO3ZhciBzPXZvaWQgMCx1PVtdfSxmdW5jdGlvbih0LGUsaSl7
InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG8odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBu
ZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlv
biBuKHQpe2kuaShhLmEpKCIuZmlsdGVycyAuc2VsZWN0ZWQiKS5jbGFzc05hbWU9IiIsaS5pKGEu
YSkoJy5maWx0ZXJzIFtocmVmPSIjLycrdCsnIl0nKS5jbGFzc05hbWU9InNlbGVjdGVkIn1mdW5j
dGlvbiByKHQsZSl7dmFyIG89aS5pKGEuYSkoJ1tkYXRhLWlkPSInK3QrJyJdJyk7byYmKG8uY2xh
c3NOYW1lPWU/ImNvbXBsZXRlZCI6IiIsaS5pKGEuYSkoImlucHV0IixvKS5jaGVja2VkPWUpfWZ1
bmN0aW9uIGModCxlKXt2YXIgbz1pLmkoYS5hKSgnW2RhdGEtaWQ9IicrdCsnIl0nKTtpZihvKXtv
LmNsYXNzTmFtZT1vLmNsYXNzTmFtZSsiIGVkaXRpbmciO3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoImlucHV0Iik7bi5jbGFzc05hbWU9ImVkaXQiLG8uYXBwZW5kQ2hpbGQobiksbi5mb2N1
cygpLG4udmFsdWU9ZX19ZnVuY3Rpb24gbCh0KXt2YXIgZT1pLmkoYS5lKSh0LCJsaSIpO3JldHVy
biBwYXJzZUludChlLmRhdGFzZXQuaWQsMTApfXZhciBhPWkoMCksZD1mdW5jdGlvbigpe2Z1bmN0
aW9uIHQodCxlKXtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG89ZVtpXTtvLmVudW1l
cmFibGU9by5lbnVtZXJhYmxlfHwhMSxvLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbyYmKG8u
d3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG8ua2V5LG8pfX1yZXR1cm4gZnVu
Y3Rpb24oZSxpLG8pe3JldHVybiBpJiZ0KGUucHJvdG90eXBlLGkpLG8mJnQoZSxvKSxlfX0oKSxz
PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXtvKHRoaXMsdCksdGhpcy50ZW1wbGF0ZT1lLHRoaXMu
RU5URVJfS0VZPTEzLHRoaXMuRVNDQVBFX0tFWT0yNyx0aGlzLiR0b2RvTGlzdD1pLmkoYS5hKSgi
LnRvZG8tbGlzdCIpLHRoaXMuJHRvZG9JdGVtQ291bnRlcj1pLmkoYS5hKSgiLnRvZG8tY291bnQi
KSx0aGlzLiRjbGVhckNvbXBsZXRlZD1pLmkoYS5hKSgiLmNsZWFyLWNvbXBsZXRlZCIpLHRoaXMu
JG1haW49aS5pKGEuYSkoIi5tYWluIiksdGhpcy4kZm9vdGVyPWkuaShhLmEpKCIuZm9vdGVyIiks
dGhpcy4kdG9nZ2xlQWxsPWkuaShhLmEpKCIudG9nZ2xlLWFsbCIpLHRoaXMuJG5ld1RvZG89aS5p
KGEuYSkoIi5uZXctdG9kbyIpfXJldHVybiBkKHQsW3trZXk6Il9yZW1vdmVJdGVtIix2YWx1ZTpm
dW5jdGlvbih0KXt2YXIgZT1pLmkoYS5hKSgnW2RhdGEtaWQ9IicrdCsnIl0nKTtlJiZ0aGlzLiR0
b2RvTGlzdC5yZW1vdmVDaGlsZChlKX19LHtrZXk6Il9jbGVhckNvbXBsZXRlZEJ1dHRvbiIsdmFs
dWU6ZnVuY3Rpb24odCxlKXt0aGlzLiRjbGVhckNvbXBsZXRlZC5pbm5lckhUTUw9dGhpcy50ZW1w
bGF0ZS5jbGVhckNvbXBsZXRlZEJ1dHRvbih0KSx0aGlzLiRjbGVhckNvbXBsZXRlZC5zdHlsZS5k
aXNwbGF5PWU/ImJsb2NrIjoibm9uZSJ9fSx7a2V5OiJfZWRpdEl0ZW1Eb25lIix2YWx1ZTpmdW5j
dGlvbih0LGUpe3ZhciBvPWkuaShhLmEpKCdbZGF0YS1pZD0iJyt0KyciXScpO2lmKG8pe3ZhciBu
PWkuaShhLmEpKCJpbnB1dC5lZGl0IixvKTtvLnJlbW92ZUNoaWxkKG4pLG8uY2xhc3NOYW1lPW8u
Y2xhc3NOYW1lLnJlcGxhY2UoImVkaXRpbmciLCIiKSxpLmkoYS5iKSgibGFiZWwiLG8pLmZvckVh
Y2goZnVuY3Rpb24odCl7dC50ZXh0Q29udGVudD1lfSl9fX0se2tleToicmVuZGVyIix2YWx1ZTpm
dW5jdGlvbih0LGUpe3ZhciBpPXRoaXMsbz17c2hvd0VudHJpZXM6ZnVuY3Rpb24oKXtpLiR0b2Rv
TGlzdC5pbm5lckhUTUw9aS50ZW1wbGF0ZS5zaG93KGUpfSxyZW1vdmVJdGVtOmZ1bmN0aW9uKCl7
aS5fcmVtb3ZlSXRlbShlKX0sdXBkYXRlRWxlbWVudENvdW50OmZ1bmN0aW9uKCl7aS4kdG9kb0l0
ZW1Db3VudGVyLmlubmVySFRNTD1pLnRlbXBsYXRlLml0ZW1Db3VudGVyKGUpfSxjbGVhckNvbXBs
ZXRlZEJ1dHRvbjpmdW5jdGlvbigpe2kuX2NsZWFyQ29tcGxldGVkQnV0dG9uKGUuY29tcGxldGVk
LGUudmlzaWJsZSl9LGNvbnRlbnRCbG9ja1Zpc2liaWxpdHk6ZnVuY3Rpb24oKXtpLiRtYWluLnN0
eWxlLmRpc3BsYXk9aS4kZm9vdGVyLnN0eWxlLmRpc3BsYXk9ZS52aXNpYmxlPyJibG9jayI6Im5v
bmUifSx0b2dnbGVBbGw6ZnVuY3Rpb24oKXtpLiR0b2dnbGVBbGwuY2hlY2tlZD1lLmNoZWNrZWR9
LHNldEZpbHRlcjpmdW5jdGlvbigpe24oZSl9LGNsZWFyTmV3VG9kbzpmdW5jdGlvbigpe2kuJG5l
d1RvZG8udmFsdWU9IiJ9LGVsZW1lbnRDb21wbGV0ZTpmdW5jdGlvbigpe3IoZS5pZCxlLmNvbXBs
ZXRlZCl9LGVkaXRJdGVtOmZ1bmN0aW9uKCl7YyhlLmlkLGUudGl0bGUpfSxlZGl0SXRlbURvbmU6
ZnVuY3Rpb24oKXtpLl9lZGl0SXRlbURvbmUoZS5pZCxlLnRpdGxlKX19O29bdF0oKX19LHtrZXk6
Il9iaW5kSXRlbUVkaXREb25lIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2kuaShhLmMp
KGUuJHRvZG9MaXN0LCJsaSAuZWRpdCIsImJsdXIiLGZ1bmN0aW9uKCl7dGhpcy5kYXRhc2V0Lmlz
Y2FuY2VsZWR8fHQoe2lkOmwodGhpcyksdGl0bGU6dGhpcy52YWx1ZX0pfSksaS5pKGEuYykoZS4k
dG9kb0xpc3QsImxpIC5lZGl0Iiwia2V5cHJlc3MiLGZ1bmN0aW9uKHQpe3Qua2V5Q29kZT09PWUu
RU5URVJfS0VZJiZ0aGlzLmJsdXIoKX0pfX0se2tleToiX2JpbmRJdGVtRWRpdENhbmNlbCIsdmFs
dWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpLmkoYS5jKShlLiR0b2RvTGlzdCwibGkgLmVkaXQi
LCJrZXl1cCIsZnVuY3Rpb24oaSl7aS5rZXlDb2RlPT09ZS5FU0NBUEVfS0VZJiYodGhpcy5kYXRh
c2V0LmlzY2FuY2VsZWQ9ITAsdGhpcy5ibHVyKCksdCh7aWQ6bCh0aGlzKX0pKX0pfX0se2tleToi
YmluZCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgbz10aGlzOyJuZXdUb2RvIj09PXQ/aS5pKGEu
ZCkoby4kbmV3VG9kbywiY2hhbmdlIixmdW5jdGlvbigpe2Uoby4kbmV3VG9kby52YWx1ZSl9KToi
cmVtb3ZlQ29tcGxldGVkIj09PXQ/aS5pKGEuZCkoby4kY2xlYXJDb21wbGV0ZWQsImNsaWNrIixm
dW5jdGlvbigpe2UoKX0pOiJ0b2dnbGVBbGwiPT09dD9pLmkoYS5kKShvLiR0b2dnbGVBbGwsImNs
aWNrIixmdW5jdGlvbigpe2Uoe2NvbXBsZXRlZDp0aGlzLmNoZWNrZWR9KX0pOiJpdGVtRWRpdCI9
PT10P2kuaShhLmMpKG8uJHRvZG9MaXN0LCJsaSBsYWJlbCIsImRibGNsaWNrIixmdW5jdGlvbigp
e2Uoe2lkOmwodGhpcyl9KX0pOiJpdGVtUmVtb3ZlIj09PXQ/aS5pKGEuYykoby4kdG9kb0xpc3Qs
Ii5kZXN0cm95IiwiY2xpY2siLGZ1bmN0aW9uKCl7ZSh7aWQ6bCh0aGlzKX0pfSk6Iml0ZW1Ub2dn
bGUiPT09dD9pLmkoYS5jKShvLiR0b2RvTGlzdCwiLnRvZ2dsZSIsImNsaWNrIixmdW5jdGlvbigp
e2Uoe2lkOmwodGhpcyksY29tcGxldGVkOnRoaXMuY2hlY2tlZH0pfSk6Iml0ZW1FZGl0RG9uZSI9
PT10P28uX2JpbmRJdGVtRWRpdERvbmUoZSk6Iml0ZW1FZGl0Q2FuY2VsIj09PXQmJm8uX2JpbmRJ
dGVtRWRpdENhbmNlbChlKX19XSksdH0oKTtlLmE9c30sZnVuY3Rpb24odCxlKXt9LGZ1bmN0aW9u
KHQsZSxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbygpe2kuaShyLmQpKHdpbmRvdywibG9hZCIs
bi5hKSxpLmkoci5kKSh3aW5kb3csImhhc2hjaGFuZ2UiLG4uYSl9dmFyIG49aSgyKSxyPWkoMCk7
ImNvbXBsZXRlIj09PWRvY3VtZW50LnJlYWR5U3RhdGU7bygpfV0sWzExXSk7CisvLyMgc291cmNl
TWFwcGluZ1VSTD1idW5kbGUuYXBwLjkzMGFkOGI4MzEyNjg2MmQ3NDQ1LmpzLm1hcApcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5v
cmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIw
MTUtYmFiZWwtd2VicGFjay9kaXN0L2J1bmRsZS5hcHAuOTMwYWQ4YjgzMTI2ODYyZDc0NDUuanMu
bWFwIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMv
dG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL2Rpc3QvYnVuZGxl
LmFwcC45MzBhZDhiODMxMjY4NjJkNzQ0NS5qcy5tYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzIxYTQ3MDE0Mzg3
ODViMjlkMTNjNTVjMWU0MmNlYmM0NDIxMzgxMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVz
L2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxs
YS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9kaXN0L2J1bmRsZS5hcHAuOTMwYWQ4Yjgz
MTI2ODYyZDc0NDUuanMubWFwCkBAIC0wLDAgKzEgQEAKK3sidmVyc2lvbiI6Mywic291cmNlcyI6
WyJ3ZWJwYWNrOi8vL2J1bmRsZS5hcHAuOTMwYWQ4YjgzMTI2ODYyZDc0NDUuanMiLCJ3ZWJwYWNr
Oi8vLy4vaGVscGVycy5qcyIsIndlYnBhY2s6Ly8vLi9hcHAuanMiLCJ3ZWJwYWNrOi8vLy4vY29u
dHJvbGxlci5qcyIsIndlYnBhY2s6Ly8vLi9tZW1vcnkuanMiLCJ3ZWJwYWNrOi8vLy4vbW9kZWwu
anMiLCJ3ZWJwYWNrOi8vLy4vc3RvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vdGVtcGxhdGUuanMiLCJ3
ZWJwYWNrOi8vLy4vdG9kby5qcyIsIndlYnBhY2s6Ly8vLi92aWV3LmpzIiwid2VicGFjazovLy8u
L2Jvb3RzdHJhcC5qcyJdLCJuYW1lcyI6WyJ3ZWJwYWNrSnNvbnAiLCJtb2R1bGUiLCJleHBvcnRz
IiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsInFzIiwic2VsZWN0b3IiLCJzY29wZSIsImRvY3VtZW50
IiwicXVlcnlTZWxlY3RvciIsInFzYSIsInF1ZXJ5U2VsZWN0b3JBbGwiLCIkb24iLCJ0YXJnZXQi
LCJ0eXBlIiwiY2FsbGJhY2siLCJ1c2VDYXB0dXJlIiwiYWRkRXZlbnRMaXN0ZW5lciIsIiRkZWxl
Z2F0ZSIsImhhbmRsZXIiLCJkaXNwYXRjaEV2ZW50IiwiZXZlbnQiLCJ0YXJnZXRFbGVtZW50Iiwi
cG90ZW50aWFsRWxlbWVudHMiLCJoYXNNYXRjaCIsIkFycmF5IiwicHJvdG90eXBlIiwiaW5kZXhP
ZiIsImNhbGwiLCIkcGFyZW50IiwiZWxlbWVudCIsInRhZ05hbWUiLCJwYXJlbnROb2RlIiwidG9M
b3dlckNhc2UiLCJyZW1vdmUiLCJhcnJheSIsInRoaW5nIiwiaW5kZXgiLCJzcGxpY2UiLCJkIiwi
Tm9kZUxpc3QiLCJmb3JFYWNoIiwib25Mb2FkIiwiaSIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fdG9kb19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3RvZG9tdmNfYXBwX2Nz
c19pbmRleF9jc3NfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYXBwX2Nzc19fIiwi
biIsIkNvbnRyb2xsZXIiLCJtb2RlbCIsInZpZXciLCJ0aGF0IiwidGhpcyIsImJpbmQiLCJ0aXRs
ZSIsImFkZEl0ZW0iLCJpdGVtIiwiZWRpdEl0ZW0iLCJpZCIsImVkaXRJdGVtU2F2ZSIsImVkaXRJ
dGVtQ2FuY2VsIiwicmVtb3ZlSXRlbSIsInRvZ2dsZUNvbXBsZXRlIiwiY29tcGxldGVkIiwicmVt
b3ZlQ29tcGxldGVkSXRlbXMiLCJzdGF0dXMiLCJ0b2dnbGVBbGwiLCJzZXRWaWV3IiwibG9jYXRp
b25IYXNoIiwicm91dGUiLCJzcGxpdCIsInBhZ2UiLCJfdXBkYXRlRmlsdGVyU3RhdGUiLCJzaG93
QWxsIiwicmVhZCIsImRhdGEiLCJyZW5kZXIiLCJzaG93QWN0aXZlIiwic2hvd0NvbXBsZXRlZCIs
InRyaW0iLCJjcmVhdGUiLCJfZmlsdGVyIiwidXBkYXRlIiwic2lsZW50IiwiX3VwZGF0ZUNvdW50
IiwiZ2V0Q291bnQiLCJ0b2RvcyIsImFjdGl2ZSIsInZpc2libGUiLCJjaGVja2VkIiwidG90YWwi
LCJmb3JjZSIsImFjdGl2ZVJvdXRlIiwiX2FjdGl2ZVJvdXRlIiwiY2hhckF0IiwidG9VcHBlckNh
c2UiLCJzdWJzdHIiLCJfbGFzdEFjdGl2ZVJvdXRlIiwiY3VycmVudFBhZ2UiLCJfdHlwZW9mIiwi
U3ltYm9sIiwiaXRlcmF0b3IiLCJvYmoiLCJjb25zdHJ1Y3RvciIsInJvb3QiLCJsb2NhbFN0b3Jh
Z2VNZW1vcnkiLCJjYWNoZSIsImxlbmd0aCIsImdldEl0ZW0iLCJrZXkiLCJzZXRJdGVtIiwidmFs
dWUiLCJoYXNPd25Qcm9wZXJ0eSIsIk9iamVjdCIsImtleXMiLCJjbGVhciIsIk1vZGVsIiwic3Rv
cmFnZSIsIm5ld0l0ZW0iLCJzYXZlIiwicXVlcnkiLCJxdWVyeVR5cGUiLCJmaW5kQWxsIiwicGFy
c2VJbnQiLCJmaW5kIiwicmVtb3ZlQWxsIiwiZHJvcCIsInRvZG8iLCJTdG9yZSIsIm5hbWUiLCJf
ZGJOYW1lIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19tZW1vcnlfXyIsIkpTT04iLCJz
dHJpbmdpZnkiLCJwYXJzZSIsInN1YnNjcmliZXJzIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19oZWxwZXJzX18iLCJ1bmlxdWVJRCIsInN1YnNjcmliZSIsInN1YnNjcmliZXIiLCJfdGhp
cyIsInB1c2giLCJfbm90aWZ5IiwicyIsImZpbHRlciIsInEiLCJ1cGRhdGVEYXRhIiwiVGVtcGxh
dGUiLCJkZWZhdWx0VGVtcGxhdGUiLCJodG1sRXNjYXBlcyIsIiYiLCI8IiwiPiIsIlwiIiwiJyIs
ImAiLCJlc2NhcGVIdG1sQ2hhciIsImNociIsInJlVW5lc2NhcGVkSHRtbCIsInJlSGFzVW5lc2Nh
cGVkSHRtbCIsIlJlZ0V4cCIsInNvdXJjZSIsImVzY2FwZSIsInN0cmluZyIsInRlc3QiLCJyZXBs
YWNlIiwic2hvdyIsImwiLCJ0ZW1wbGF0ZSIsIml0ZW1Db3VudGVyIiwiYWN0aXZlVG9kb3MiLCJw
bHVyYWwiLCJjbGVhckNvbXBsZXRlZEJ1dHRvbiIsImNvbXBsZXRlZFRvZG9zIiwiVG9kbyIsIl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fc3RvcmVfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fbW9kZWxfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdGVtcGxhdGVf
XyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fdmlld19fIiwiY29udHJvbGxlciIsIl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fY29udHJvbGxlcl9fIiwidXBkYXRlVG9kbyIsImxv
Y2F0aW9uIiwiaGFzaCIsIl9jbGFzc0NhbGxDaGVjayIsImluc3RhbmNlIiwiQ29uc3RydWN0b3Ii
LCJUeXBlRXJyb3IiLCJfc2V0RmlsdGVyIiwiY2xhc3NOYW1lIiwiX2VsZW1lbnRDb21wbGV0ZSIs
Imxpc3RJdGVtIiwiX2VkaXRJdGVtIiwiaW5wdXQiLCJjcmVhdGVFbGVtZW50IiwiYXBwZW5kQ2hp
bGQiLCJmb2N1cyIsIl9pdGVtSWQiLCJsaSIsImRhdGFzZXQiLCJfY3JlYXRlQ2xhc3MiLCJkZWZp
bmVQcm9wZXJ0aWVzIiwicHJvcHMiLCJkZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsImNvbmZpZ3Vy
YWJsZSIsIndyaXRhYmxlIiwiZGVmaW5lUHJvcGVydHkiLCJwcm90b1Byb3BzIiwic3RhdGljUHJv
cHMiLCJWaWV3IiwiRU5URVJfS0VZIiwiRVNDQVBFX0tFWSIsIiR0b2RvTGlzdCIsIiR0b2RvSXRl
bUNvdW50ZXIiLCIkY2xlYXJDb21wbGV0ZWQiLCIkbWFpbiIsIiRmb290ZXIiLCIkdG9nZ2xlQWxs
IiwiJG5ld1RvZG8iLCJlbGVtIiwicmVtb3ZlQ2hpbGQiLCJjb21wbGV0ZWRDb3VudCIsImlubmVy
SFRNTCIsInN0eWxlIiwiZGlzcGxheSIsImxhYmVsIiwidGV4dENvbnRlbnQiLCJ2aWV3Q21kIiwi
cGFyYW1ldGVyIiwidmlld0NvbW1hbmRzIiwic2hvd0VudHJpZXMiLCJfcmVtb3ZlSXRlbSIsInVw
ZGF0ZUVsZW1lbnRDb3VudCIsIl9jbGVhckNvbXBsZXRlZEJ1dHRvbiIsImNvbnRlbnRCbG9ja1Zp
c2liaWxpdHkiLCJzZXRGaWx0ZXIiLCJjbGVhck5ld1RvZG8iLCJlbGVtZW50Q29tcGxldGUiLCJl
ZGl0SXRlbURvbmUiLCJfZWRpdEl0ZW1Eb25lIiwiaXNjYW5jZWxlZCIsImtleUNvZGUiLCJibHVy
IiwiX2JpbmRJdGVtRWRpdERvbmUiLCJfYmluZEl0ZW1FZGl0Q2FuY2VsIiwiYm9vdHN0cmFwIiwi
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19oZWxwZXJzX18iLCJ3aW5kb3ciLCJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX2FwcF9fIiwicmVhZHlTdGF0ZSJdLCJtYXBwaW5ncyI6IkFB
QUFBLGNBQWMsRUFBRSxJQUVWLFNBQVNDLEVBQVFDLEVBQVNDLEdBRWhDLFlDREEsU0FBU0MsR0FB
R0MsRUFBVUMsR0FDcEIsT0FBUUEsR0FBU0MsVUFBVUMsY0FBY0gsR0FHM0MsUUFBU0ksR0FBSUos
RUFBVUMsR0FDckIsT0FBUUEsR0FBU0MsVUFBVUcsaUJBQWlCTCxHQUk5QyxRQUFTTSxHQUFJQyxF
QUFRQyxFQUFNQyxFQUFVQyxHQUNuQ0gsRUFBT0ksaUJBQWlCSCxFQUFNQyxJQUFZQyxHQUs1QyxR
QUFTRSxHQUFVTCxFQUFRUCxFQUFVUSxFQUFNSyxHQUt6QyxRQUFTQyxHQUFjQyxHQUNyQixHQUFJ
QyxHQUFnQkQsRUFBTVIsT0FDdEJVLEVBQW9CYixFQUFJSixFQUFVTyxHQUNsQ1csRUFBV0MsTUFB
TUMsVUFBVUMsUUFBUUMsS0FBS0wsRUFBbUJELElBQWtCLENBRTdFRSxJQUNGTCxFQUFRUyxLQUFL
TixFQUFlRCxHQVRoQyxHQUFJTCxHQUFzQixTQUFURixHQUE0QixVQUFUQSxDQUNwQ0YsR0FBSUMs
RUFBUUMsRUFBTU0sRUFBZUosR0FlbkMsUUFBU2EsR0FBUUMsRUFBU0MsR0FDeEIsR0FBS0QsRUFB
UUUsV0FHYixNQUFJRixHQUFRRSxXQUFXRCxRQUFRRSxnQkFBa0JGLEVBQVFFLGNBQ2hESCxFQUFR
RSxXQUVWSCxFQUFRQyxFQUFRRSxXQUFZRCxHQU9yQyxRQUFTRyxHQUFPQyxFQUFPQyxHQUNyQixH
QUFNQyxHQUFRRixFQUFNUixRQUFRUyxFQUM1QixPQUFJQyxRQUNLRixNQUVUQSxHQUFNRyxPQUFP
RCxFQUFPLEdEakREakMsRUFBb0JtQyxFQUFFcEMsRUFBUyxJQUFLLFdBQWEsTUFBT0UsS0FDeERE
LEVBQW9CbUMsRUFBRXBDLEVBQVMsSUFBSyxXQUFhLE1BQU9PLEtBQ3hETixFQUFvQm1DLEVBQUVw
QyxFQUFTLElBQUssV0FBYSxNQUFPUyxLQUN4RFIsRUFBb0JtQyxFQUFFcEMsRUFBUyxJQUFLLFdB
QWEsTUFBT2UsS0FDeERkLEVBQW9CbUMsRUFBRXBDLEVBQVMsSUFBSyxXQUFhLE1BQU8wQixLQUN4
RHpCLEVBQW9CbUMsRUFBRXBDLEVBQVMsSUFBSyxXQUFhLE1BQU8rQixLQ2lEN0VNLFNBQVNkLFVB
QVVlLFFBQVVoQixNQUFNQyxVQUFVZSxTRGN0QyxDQUVELFNBQVN2QyxFQUFRQyxFQUFTQyxHQUVo
QyxZRXhFTyxTQUFTc0MsS0FDZHRDLEVBQUF1QyxFQUFBQyxFQUFBLEtGd0VtQixHQUFJQyxHQUEw
RHpDLEVBQW9CLEdBRTlFMEMsR0FEa0UxQyxFQUFvQjJDLEVBQUVGLEdBQy9DekMsRUFBb0IsS0FH
N0R3QyxHQUZpRHhDLEVBQW9CMkMsRUFBRUQsR0FDOUIxQyxFQUFvQixHQUN2QkEsRUFBb0IsR0FD
OURELEdBQVcsRUFBSXVDLEdBYTlCLFNBQVN4QyxFQUFRQyxFQUFTQyxHQUVoQyxZRzNGQSxTQUFT
NEMsR0FBV0MsRUFBT0MsR0FDekIsR0FBSUMsR0FBT0MsSUFDWEQsR0FBS0YsTUFBUUEsRUFDYkUs
RUFBS0QsS0FBT0EsRUFFWkMsRUFBS0QsS0FBS0csS0FBSyxVQUFXLFNBQVNDLEdBQ2pDSCxFQUFL
SSxRQUFRRCxLQUdmSCxFQUFLRCxLQUFLRyxLQUFLLFdBQVksU0FBU0csR0FDbENMLEVBQUtNLFNB
QVNELEVBQUtFLE1BR3JCUCxFQUFLRCxLQUFLRyxLQUFLLGVBQWdCLFNBQVNHLEdBQ3RDTCxFQUFL
USxhQUFhSCxFQUFLRSxHQUFJRixFQUFLRixTQUdsQ0gsRUFBS0QsS0FBS0csS0FBSyxpQkFBa0Is
U0FBU0csR0FDeENMLEVBQUtTLGVBQWVKLEVBQUtFLE1BRzNCUCxFQUFLRCxLQUFLRyxLQUFLLGFB
QWMsU0FBU0csR0FDcENMLEVBQUtVLFdBQVdMLEVBQUtFLE1BR3ZCUCxFQUFLRCxLQUFLRyxLQUFL
LGFBQWMsU0FBU0csR0FDcENMLEVBQUtXLGVBQWVOLEVBQUtFLEdBQUlGLEVBQUtPLGFBR3BDWixF
QUFLRCxLQUFLRyxLQUFLLGtCQUFtQixXQUNoQ0YsRUFBS2EseUJBR1BiLEVBQUtELEtBQUtHLEtB
QUssWUFBYSxTQUFTWSxHQUNuQ2QsRUFBS2UsVUFBVUQsRUFBT0YsYUEzQzFCNUQsRUFBQSxFQUFl
NkMsRUFvRGZBLEVBQVd0QixVQUFVeUMsUUFBVSxTQUFTQyxHQUN0QyxHQUFJQyxHQUFRRCxFQUFh
RSxNQUFNLEtBQUssR0FDaENDLEVBQU9GLEdBQVMsRUFDcEJqQixNQUFLb0IsbUJBQW1CRCxJQU8x
QnZCLEVBQVd0QixVQUFVK0MsUUFBVSxXQUM3QixHQUFJdEIsR0FBT0MsSUFDWEQsR0FBS0YsTUFB
TXlCLEtBQUssU0FBU0MsR0FDdkJ4QixFQUFLRCxLQUFLMEIsT0FBTyxjQUFlRCxNQU9wQzNCLEVB
QVd0QixVQUFVbUQsV0FBYSxXQUNoQyxHQUFJMUIsR0FBT0MsSUFDWEQsR0FBS0YsTUFBTXlCLE1B
QU1YLFdBQVcsR0FBUSxTQUFTWSxHQUMzQ3hCLEVBQUtELEtBQUswQixPQUFPLGNBQWVELE1BT3BD
M0IsRUFBV3RCLFVBQVVvRCxjQUFnQixXQUNuQyxHQUFJM0IsR0FBT0MsSUFDWEQsR0FBS0YsTUFB
TXlCLE1BQU1YLFdBQVcsR0FBTyxTQUFTWSxHQUMxQ3hCLEVBQUtELEtBQUswQixPQUFPLGNBQWVE
LE1BUXBDM0IsRUFBV3RCLFVBQVU2QixRQUFVLFNBQVNELEdBQ3RDLEdBQUlILEdBQU9DLElBRVUs
TUFBakJFLEVBQU15QixRQUlWNUIsRUFBS0YsTUFBTStCLE9BQU8xQixFQUFPLFdBQ3ZCSCxFQUFL
RCxLQUFLMEIsT0FBTyxnQkFDakJ6QixFQUFLOEIsU0FBUSxNQU9qQmpDLEVBQVd0QixVQUFVK0Is
U0FBVyxTQUFTQyxHQUN2QyxHQUFJUCxHQUFPQyxJQUNYRCxHQUFLRixNQUFNeUIsS0FBS2hCLEVB
QUksU0FBU2lCLEdBQzNCeEIsRUFBS0QsS0FBSzBCLE9BQU8sWUFBYWxCLEtBQUlKLE1BQU9xQixF
QUFLLEdBQUdyQixXQU9yRE4sRUFBV3RCLFVBQVVpQyxhQUFlLFNBQVNELEVBQUlKLEdBQy9DLEdB
QUlILEdBQU9DLElBQ1BFLEdBQU15QixPQUNSNUIsRUFBS0YsTUFBTWlDLE9BQU94QixHQUFLSixT
QUFRLFdBQzdCSCxFQUFLRCxLQUFLMEIsT0FBTyxnQkFBaUJsQixLQUFJSixZQUd4Q0gsRUFBS1Us
V0FBV0gsSUFPcEJWLEVBQVd0QixVQUFVa0MsZUFBaUIsU0FBU0YsR0FDN0MsR0FBSVAsR0FBT0Ms
SUFDWEQsR0FBS0YsTUFBTXlCLEtBQUtoQixFQUFJLFNBQVNpQixHQUMzQnhCLEVBQUtELEtBQUsw
QixPQUFPLGdCQUFpQmxCLEtBQUlKLE1BQU9xQixFQUFLLEdBQUdyQixXQVd6RE4sRUFBV3RCLFVB
QVVtQyxXQUFhLFNBQVNILEdBQ3pDLEdBQUlQLEdBQU9DLElBQ1hELEdBQUtGLE1BQU1mLE9BQU93
QixFQUFJLFdBQ3BCUCxFQUFLRCxLQUFLMEIsT0FBTyxhQUFjbEIsS0FHakNQLEVBQUs4QixXQU1Q
akMsRUFBV3RCLFVBQVVzQyxxQkFBdUIsV0FDMUMsR0FBSWIsR0FBT0MsSUFDWEQsR0FBS0YsTUFB
TXlCLE1BQU1YLFdBQVcsR0FBTyxTQUFTWSxHQUMxQ0EsRUFBS2xDLFFBQVEsU0FBU2UsR0FDcEJM
LEVBQUtVLFdBQVdMLEVBQUtFLFFBSXpCUCxFQUFLOEIsV0FZUGpDLEVBQVd0QixVQUFVb0MsZUFB
aUIsU0FBU0osRUFBSUssRUFBV29CLEdBQzVELEdBQUloQyxHQUFPQyxJQUNYRCxHQUFLRixNQUFN
aUMsT0FBT3hCLEdBQUtLLGFBQVksV0FDakNaLEVBQUtELEtBQUswQixPQUFPLG1CQUNmbEIsS0FD
QUssZ0JBSUNvQixHQUNIaEMsRUFBSzhCLFdBUVRqQyxFQUFXdEIsVUFBVXdDLFVBQVksU0FBU0gs
R0FDeEMsR0FBSVosR0FBT0MsSUFDWEQsR0FBS0YsTUFBTXlCLE1BQU1YLFdBQVlBLEdBQVksU0FB
U1ksR0FDaERBLEVBQUtsQyxRQUFRLFNBQVNlLEdBQ3BCTCxFQUFLVyxlQUFlTixFQUFLRSxHQUFJ
SyxHQUFXLE9BSTVDWixFQUFLOEIsV0FPUGpDLEVBQVd0QixVQUFVMEQsYUFBZSxXQUNsQyxHQUFJ
akMsR0FBT0MsSUFDWEQsR0FBS0YsTUFBTW9DLFNBQVMsU0FBU0MsR0FDM0JuQyxFQUFLRCxLQUFL
MEIsT0FBTyxxQkFBc0JVLEVBQU1DLFFBQzdDcEMsRUFBS0QsS0FBSzBCLE9BQU8sd0JBQ2ZiLFVB
QVd1QixFQUFNdkIsVUFDakJ5QixRQUFTRixFQUFNdkIsVUFBWSxJQUc3QlosRUFBS0QsS0FBSzBC
LE9BQU8sYUFBY2EsUUFBU0gsRUFBTXZCLFlBQWN1QixFQUFNSSxRQUNsRXZDLEVBQUtELEtBQUsw
QixPQUFPLDBCQUEyQlksUUFBU0YsRUFBTUksTUFBUSxPQVF2RTFDLEVBQVd0QixVQUFVdUQsUUFB
VSxTQUFTVSxHQUN0QyxHQUFJQyxHQUFjeEMsS0FBS3lDLGFBQWFDLE9BQU8sR0FBR0MsY0FBZ0Iz
QyxLQUFLeUMsYUFBYUcsT0FBTyxFQUd2RjVDLE1BQUtnQyxnQkFLRE8sR0FBbUMsUUFBMUJ2QyxL
QUFLNkMsa0JBQThCN0MsS0FBSzZDLG1CQUFxQkwsSUFDeEV4QyxLQUFLLE9BQVN3QyxLQUdoQnhD
LEtBQUs2QyxpQkFBbUJMLEdBTTFCNUMsRUFBV3RCLFVBQVU4QyxtQkFBcUIsU0FBUzBCLEdBR2pE
QSxFQUFjQSxFQUFZNUIsTUFBTSxLQUFLLEdBQ3JDbEIsS0FBS3lDLGFBQWVLLEVBRUEsS0FBaEJB
LElBQ0Y5QyxLQUFLeUMsYUFBZSxPQUd0QnpDLEtBQUs2QixVQUVMN0IsS0FBS0YsS0FBSzBCLE9B
QU8sWUFBYXNCLEtIMEcxQixTQUFTaEcsRUFBUUMsRUFBU0MsR0FFaEMsR0FBSStGLEdBQTRCLGtC
QUFYQyxTQUFvRCxnQkFBcEJBLFFBQU9DLFNBQXdCLFNBQVVDLEdBQU8sYUFBY0EsSUFBUyxTQUFV
QSxHQUFPLE1BQU9BLElBQXlCLGtCQUFYRixTQUF5QkUsRUFBSUMsY0FBZ0JILFFBQVVFLElBQVFG
LE9BQU8xRSxVQUFZLGVBQWtCNEUsS0lqWHRRLFNBQVVFLEdBQ1IsR0FBSUMsTUFDQUMsSUFLSkQs
R0FBbUJFLE9BQVMsRUFTNUJGLEVBQW1CRyxRQUFVLFNBQVNDLEdBQ3BDLE1BQU9ILEdBQU1HLElB
QVEsTUFZdkJKLEVBQW1CSyxRQUFVLFNBQVNELEVBQUtFLEdBQ3BCLG1CQUFWQSxHQUNUTixFQUFt
QjVDLFdBQVdnRCxJQUV4QkgsRUFBTU0sZUFBZUgsSUFDekJKLEVBQW1CRSxTQUdyQkQsRUFBTUcs
R0FBTyxHQUFLRSxJQVd0Qk4sRUFBbUI1QyxXQUFhLFNBQVNnRCxHQUNuQ0gsRUFBTU0sZUFBZUgs
V0FDaEJILEdBQU1HLEdBQ2JKLEVBQW1CRSxXQVd2QkYsRUFBbUJJLElBQU0sU0FBU3hFLEdBQ2hD
LE1BQU80RSxRQUFPQyxLQUFLUixHQUFPckUsSUFBVSxNQVF0Q29FLEVBQW1CVSxNQUFRLFdBQ3pC
VCxLQUNBRCxFQUFtQkUsT0FBUyxHQUdQLFdBQW5CUixFQUFPaEcsR0FDVEQsRUFBT0MsUUFBVXNH
LEVBRWpCRCxFQUFLQyxtQkFBcUJBLEdBRTNCckQsT0p1WEcsU0FBU2xELEVBQVFDLEVBQVNDLEdB
RWhDLFlLbGNBLFNBQVNnSCxHQUFNQyxHQUNiakUsS0FBS2lFLFFBQVVBLEVMa2NqQixHQUFJbEIs
R0FBNEIsa0JBQVhDLFNBQW9ELGdCQUFwQkEsUUFBT0MsU0FBd0IsU0FBVUMsR0FBTyxhQUFjQSxJ
QUFTLFNBQVVBLEdBQU8sTUFBT0EsSUFBeUIsa0JBQVhGLFNBQXlCRSxFQUFJQyxjQUFnQkgsUUFB
VUUsSUFBUUYsT0FBTzFFLFVBQVksZUFBa0I0RSxHSzNjdFFuRyxHQUFBLEVBQWVpSCxFQWtCZkEs
RUFBTTFGLFVBQVVzRCxPQUFTLFNBQVMxQixFQUFPdkMsR0FDdkN1QyxFQUFRQSxHQUFTLEdBQ2pC
dkMsRUFBV0EsR0FBWSxZQUd2QixJQUFJdUcsSUFDRmhFLE1BQU9BLEVBQU15QixPQUNiaEIsV0FB
VyxFQUdiWCxNQUFLaUUsUUFBUUUsS0FBS0QsRUFBU3ZHLElBaUI3QnFHLEVBQU0xRixVQUFVZ0Qs
S0FBTyxTQUFTOEMsRUFBT3pHLEdBQ3JDLEdBQUkwRyxHQUFBLG1CQUFtQkQsR0FBbkIsWUFBQXJC
LEVBQW1CcUIsRUFJdkIsT0FIQXpHLEdBQVdBLEdBQVksYUFHTCxhQUFkMEcsR0FDRjFHLEVBQVd5
RyxFQUNKcEUsS0FBS2lFLFFBQVFLLFFBQVEzRyxTQUNMLFdBQWQwRyxHQUF3QyxXQUFkQSxHQUNu
Q0QsRUFBUUcsU0FBU0gsRUFBTyxJQUN4QnBFLEtBQUtpRSxRQUFRTyxNQUFNbEUsR0FBSThELEdB
QVF6RyxJQUUvQnFDLEtBQUtpRSxRQUFRTyxLQUFLSixFQUFPekcsS0FhN0JxRyxFQUFNMUYsVUFB
VXdELE9BQVMsU0FBU3hCLEVBQUlpQixFQUFNNUQsR0FDMUNxQyxLQUFLaUUsUUFBUUUsS0FBSzVD
LEVBQU01RCxFQUFVMkMsSUFTcEMwRCxFQUFNMUYsVUFBVVEsT0FBUyxTQUFTd0IsRUFBSTNDLEdB
Q3BDcUMsS0FBS2lFLFFBQVFuRixPQUFPd0IsRUFBSTNDLElBUTFCcUcsRUFBTTFGLFVBQVVtRyxV
QUFZLFNBQVM5RyxHQUNuQ3FDLEtBQUtpRSxRQUFRUyxLQUFLL0csSUFNcEJxRyxFQUFNMUYsVUFB
VTJELFNBQVcsU0FBU3RFLEdBQ2xDLEdBQUl1RSxJQUNGQyxPQUFRLEVBQ1J4QixVQUFXLEVBQ1gy
QixNQUFPLEVBR1R0QyxNQUFLaUUsUUFBUUssUUFBUSxTQUFTL0MsR0FDNUJBLEVBQUtsQyxRQUFR
LFNBQVNzRixHQUNoQkEsRUFBS2hFLFVBQ1B1QixFQUFNdkIsWUFFTnVCLEVBQU1DLFNBR1JELEVB
QU1JLFVBRVIzRSxFQUFTdUUsT0xpZFAsU0FBU3BGLEVBQVFDLEVBQVNDLEdBRWhDLFlNdGpCQSxT
QUFTNEgsR0FBTUMsRUFBTWxILEdBTW5CLEdBTEFBLEVBQVdBLEdBQVksYUFHdkJxQyxLQUFLOEUs
UUFBVUQsR0FFVkUsRUFBbUJGLEdBQU8sQ0FDN0IsR0FBSXRELElBQ0ZXLFNBR0Y2QyxHQUFtQkYs
R0FBUUcsS0FBS0MsVUFBVTFELEdBRzVDNUQsRUFBU2EsS0FBS3dCLEtBQU1nRixLQUFLRSxNQUFN
SCxFQUFtQkYsS0FDbEQ3RSxLQUFLbUYsZU53aUJjLEdBQUlDLEdBQXlDcEksRUFBb0IsR0FDN0Qr
SCxFQUF3Qy9ILEVBQW9CLEVBQ1pBLEdBQW9CMkMsRUFBRW9GLEVNcmtCL0ZoSSxHQUFBLEVBQWU2
SCxDQUVmLElBQUlTLEdBQVcsQ0E0QmZULEdBQU10RyxVQUFVZ0gsVUFBWSxTQUFTQyxHQUFZLEdB
QUFDLEdBQUF4RixJQUUvQyxPQURBQSxNQUFLbUYsWUFBWU0sS0FBS0YsR0FDZixpQkFBTXZJLEdB
QUF1QyxFQUFBNkYsRUFBQSxHQUFPSSxFQUFLTCxZQUFhSSxLQUd4Q1gsRUFBTXRHLFVBQVVvSCxR
QUFVLFdBQ3hCMUYsS0FBS21GLFlBQVk5RixRQUFRLFNBQUFzRyxHQUFBLE1BQUtBLFFBZ0JoQ2Ys
RUFBTXRHLFVBQVVrRyxLQUFPLFNBQVNKLEVBQU96RyxHQUNyQyxHQUFLQSxFQUFMLENBSUEsR0FB
SXVFLEdBQVE4QyxLQUFLRSxNQUFNSCxFQUFtQi9FLEtBQUs4RSxVQUFVNUMsS0FFekR2RSxHQUFT
YSxLQUFLd0IsS0FBTWtDLEVBQU0wRCxPQUFPLFNBQVNqQixHQUN4QyxJQUFLLEdBQUlrQixLQUFL
ekIsR0FDWixHQUFJQSxFQUFNeUIsS0FBT2xCLEVBQUtrQixHQUNwQixPQUFPLENBR1gsUUFBTyxP
QVNYakIsRUFBTXRHLFVBQVVnRyxRQUFVLFNBQVMzRyxHQUNqQ0EsRUFBV0EsR0FBWSxhQUV2QkEs
RUFBU2EsS0FBS3dCLEtBQU1nRixLQUFLRSxNQUFNSCxFQUFtQi9FLEtBQUs4RSxVQUFVNUMsUUFX
bkUwQyxFQUFNdEcsVUFBVTZGLEtBQU8sU0FBUzJCLEVBQVluSSxFQUFVMkMsR0FDcEQsR0FBSWlC
LEdBQU95RCxLQUFLRSxNQUFNSCxFQUFtQi9FLEtBQUs4RSxVQUMxQzVDLEVBQVFYLEVBQUtXLEtB
TWpCLElBSkF2RSxFQUFXQSxHQUFZLGFBSW5CMkMsRUFBSSxDQUNOLElBQUssR0FBSWYsR0FBSSxF
QUFHQSxFQUFJMkMsRUFBTXFCLE9BQVFoRSxJQUNoQyxHQUFJMkMsRUFBTTNDLEdBQUdlLEtBQU9B
LEVBQUksQ0FDdEIsSUFBSyxHQUFJbUQsS0FBT3FDLEdBQ2Q1RCxFQUFNM0MsR0FBR2tFLEdBQU9x
QyxFQUFXckMsRUFFN0IsT0FJSnNCLEVBQW1CL0UsS0FBSzhFLFNBQVdFLEtBQUtDLFVBQVUxRCxH
QUNsRDVELEVBQVNhLEtBQUt3QixLQUFNZ0YsS0FBS0UsTUFBTUgsRUFBbUIvRSxLQUFLOEUsVUFB
VTVDLFdBR2pFNEQsR0FBV3hGLEdBQUsrRSxJQUVoQm5ELEVBQU11RCxLQUFLSyxHQUNYZixFQUFt
Qi9FLEtBQUs4RSxTQUFXRSxLQUFLQyxVQUFVMUQsR0FDbEQ1RCxFQUFTYSxLQUFLd0IsTUFBTzhG
LEdBRXZCOUYsTUFBSzBGLFdBU1BkLEVBQU10RyxVQUFVUSxPQUFTLFNBQVN3QixFQUFJM0MsR0FJ
cEMsSUFBSyxHQUhENEQsR0FBT3lELEtBQUtFLE1BQU1ILEVBQW1CL0UsS0FBSzhFLFVBQzFDNUMs
RUFBUVgsRUFBS1csTUFFUjNDLEVBQUksRUFBR0EsRUFBSTJDLEVBQU1xQixPQUFRaEUsSUFDaEMs
R0FBSTJDLEVBQU0zQyxHQUFHZSxLQUFPQSxFQUFJLENBQ3RCNEIsRUFBTWhELE9BQU9LLEVBQUcs
RUFDaEIsT0FJSndGLEVBQW1CL0UsS0FBSzhFLFNBQVdFLEtBQUtDLFVBQVUxRCxHQUNsRDVELEVB
QVNhLEtBQUt3QixLQUFNZ0YsS0FBS0UsTUFBTUgsRUFBbUIvRSxLQUFLOEUsVUFBVTVDLE9BQ2pF
bEMsS0FBSzBGLFdBUVBkLEVBQU10RyxVQUFVb0csS0FBTyxTQUFTL0csR0FDOUJvSCxFQUFtQi9F
LEtBQUs4RSxTQUFXRSxLQUFLQyxXQUFXL0MsV0FDbkR2RSxFQUFTYSxLQUFLd0IsS0FBTWdGLEtB
QUtFLE1BQU1ILEVBQW1CL0UsS0FBSzhFLFVBQVU1QyxPQUNqRWxDLEtBQUswRixZTmlsQkQsU0FB
UzVJLEVBQVFDLEVBQVNDLEdBRWhDLFlPM3NCQSxTQUFTK0ksS0FDUC9GLEtBQUtnRyxnQkFBTCxz
UEFoQ0ZqSixFQUFBLEVBQWVnSixDQUVmLElBQUlFLElBQ0ZDLElBQUssUUFDTEMsSUFBSyxPQUNM
QyxJQUFLLE9BQ0xDLElBQUssU0FDTEMsSUFBTSxTQUNOQyxJQUFLLFVBR0hDLEVBQWlCLFNBQVND
LEdBQzVCLE1BQU9SLEdBQVlRLElBR2pCQyxFQUFrQixZQUNsQkMsRUFBcUIsR0FBSUMsUUFBT0Ys
RUFBZ0JHLFFBRWhEQyxFQUFTLFNBQVNDLEdBQ3BCLE1BQUlBLElBQVVKLEVBQW1CSyxLQUFLRCxH
QUM3QkEsRUFBT0UsUUFBUVAsRUFBaUJGLEdBRWhDTyxFQXNDWGhCLEdBQVN6SCxVQUFVNEksS0FB
TyxTQUFTM0YsR0FDakMsR0FBSWhDLEdBQUc0SCxFQUNIckgsRUFBTyxFQUVYLEtBQUtQLEVBQUks
RUFBRzRILEVBQUk1RixFQUFLZ0MsT0FBUWhFLEVBQUk0SCxFQUFHNUgsSUFBSyxDQUN2QyxHQUFJ
NkgsR0FBV3BILEtBQUtnRyxnQkFDaEJyRixFQUFZLEdBQ1owQixFQUFVLEVBRVZkLEdBQUtoQyxH
QUFHb0IsWUFDVkEsRUFBWSxZQUNaMEIsRUFBVSxXQUdaK0UsRUFBV0EsRUFBU0gsUUFBUSxTQUFV
MUYsRUFBS2hDLEdBQUdlLElBQzlDOEcsRUFBV0EsRUFBU0gsUUFBUSxZQUFhSCxFQUFPdkYsRUFB
S2hDLEdBQUdXLFFBQ3hEa0gsRUFBV0EsRUFBU0gsUUFBUSxnQkFBaUJ0RyxHQUM3Q3lHLEVBQVdB
LEVBQVNILFFBQVEsY0FBZTVFLEdBRTNDdkMsR0FBY3NILEVBR2hCLE1BQU90SCxJQVNUaUcsRUFB
U3pILFVBQVUrSSxZQUFjLFNBQVNDLEdBQ3hDLEdBQUlDLEdBQXlCLElBQWhCRCxFQUFvQixHQUFL
LEdBRXRDLE9BQU8sV0FBYUEsRUFBYyxpQkFBbUJDLEVBQVMsU0FTaEV4QixFQUFTekgsVUFBVWtK
LHFCQUF1QixTQUFTQyxHQUNqRCxNQUFJQSxHQUFpQixFQUNaLGtCQUVBLEtQeXVCTCxTQUFTM0ss
RUFBUUMsRUFBU0MsR0FFaEMsWVFyMEJBLFNBQVMwSyxHQUFLN0MsR0FDWjdFLEtBQUtpRSxRQUFV
LEdBQUkwRCxHQUFBLEVBQU05QyxHQUN6QjdFLEtBQUtILE1BQVEsR0FBSStILEdBQUEsRUFBTTVI
LEtBQUtpRSxTQUM1QmpFLEtBQUtvSCxTQUFXLEdBQUlTLEdBQUEsRUFDcEI3SCxLQUFLRixLQUFP
LEdBQUlnSSxHQUFBLEVBQUs5SCxLQUFLb0gsVUFDMUJwSCxLQUFLK0gsV0FBYSxHQUFJQyxHQUFB
LEVBQVdoSSxLQUFLSCxNQUFPRyxLQUFLRixNQUdwRCxRQUFTbUksS0FDUHRELEVBQU8sR0FBSStD
LEdBQUssbUJBQ2hCL0MsRUFBS29ELFdBQVdoSCxRQUFRM0QsU0FBUzhLLFNBQVNDLE1BQzFDaEQs
RUFBWTlGLFFBQVEsU0FBQXNHLEdBQUEsTUFBS0EsT1IyekJOLEdBQUltQyxHQUFzQzlLLEVBQW9C
LEdBQzFEZ0wsRUFBNENoTCxFQUFvQixHQUNoRTRLLEVBQXVDNUssRUFBb0IsR0FDM0QySyxFQUF1
QzNLLEVBQW9CLEdBQzNENkssRUFBMEM3SyxFQUFvQixFQUNyQkEsR0FBb0IsRUFFakVBLEdBQW9C
bUMsRUFBRXBDLEVBQVMsSUFBSyxXQUFhLE1BQU9rTCxJUXIxQjdFLElBQUl0RCxVQUNFUSxNUms0
QkEsU0FBU3JJLEVBQVFDLEVBQVNDLEdBRWhDLFlBSUEsU0FBU29MLEdBQWdCQyxFQUFVQyxHQUFl
LEtBQU1ELFlBQW9CQyxJQUFnQixLQUFNLElBQUlDLFdBQVUscUNTbnVCaEgsUUFBU0MsR0FBVzFG
LEdBQ2xCOUYsRUFBQXVDLEVBQUE2RixFQUFBLEdBQUcsc0JBQXNCcUQsVUFBWSxHQUNyQ3pMLEVB
QUF1QyxFQUFBNkYsRUFBQSxHQUFHLHFCQUF1QnRDLEVBQWMsTUFBTTJGLFVBQVksV0FHNUQsUUFB
U0MsR0FBaUJwSSxFQUFJSyxHQUM1QixHQUFJZ0ksR0FBVzNMLEVBQUF1QyxFQUFBNkYsRUFBQSxH
QUFHLGFBQWU5RSxFQUFLLEtBRWpDcUksS0FJTEEsRUFBU0YsVUFBWTlILEVBQVksWUFBYyxHQUcv
QzNELEVBQUF1QyxFQUFBNkYsRUFBQSxHQUFHLFFBQVN1RCxHQUFVdEcsUUFBVTFCLEdBR2xDLFFB
QVNpSSxHQUFVdEksRUFBSUosR0FDckIsR0FBSXlJLEdBQVczTCxFQUFBdUMsRUFBQTZGLEVBQUEs
R0FBRyxhQUFlOUUsRUFBSyxLQUV0QyxJQUFLcUksRUFBTCxDQUlBQSxFQUFTRixVQUFZRSxFQUFT
RixVQUFZLFVBRTFDLElBQUlJLEdBQVF6TCxTQUFTMEwsY0FBYyxRQUNuQ0QsR0FBTUosVUFBWSxP
QUVsQkUsRUFBU0ksWUFBWUYsR0FDckJBLEVBQU1HLFFBQ05ILEVBQU1sRixNQUFRekQsR0FHaEIs
UUFBUytJLEdBQVF2SyxHQUNmLEdBQUl3SyxHQUFLbE0sRUFBQXVDLEVBQUE2RixFQUFBLEdBQVEx
RyxFQUFTLEtBQzFCLE9BQU82RixVQUFTMkUsRUFBR0MsUUFBUTdJLEdBQUksSVQyckJaLEdBQUk4
RSxHQUF5Q3BJLEVBQW9CLEdBQ2xGb00sRUFBZSxXQUFjLFFBQVNDLEdBQWlCNUwsRUFBUTZMLEdB
QVMsSUFBSyxHQUFJL0osR0FBSSxFQUFHQSxFQUFJK0osRUFBTS9GLE9BQVFoRSxJQUFLLENBQUUs
R0FBSWdLLEdBQWFELEVBQU0vSixFQUFJZ0ssR0FBV0MsV0FBYUQsRUFBV0MsYUFBYyxFQUFPRCxF
QUFXRSxjQUFlLEVBQVUsU0FBV0YsS0FBWUEsRUFBV0csVUFBVyxHQUFNN0YsT0FBTzhGLGVBQWVs
TSxFQUFROEwsRUFBVzlGLElBQUs4RixJQUFpQixNQUFPLFVBQVVqQixFQUFhc0IsRUFBWUMsR0FB
aUosTUFBOUhELElBQVlQLEVBQWlCZixFQUFZaEssVUFBV3NMLEdBQWlCQyxHQUFhUixFQUFpQmYs
RUFBYXVCLEdBQXFCdkIsTVNwNEIzZ0J3QixFVHE1QlYsV1NwNUJULFFBQUFBLEdBQVkxQyxHQUFV
Z0IsRUFBQXBJLEtBQUE4SixHQUNwQjlKLEtBQUtvSCxTQUFXQSxFQUVoQnBILEtBQUsrSixVQUFZ
LEdBQ2pCL0osS0FBS2dLLFdBQWEsR0FFbEJoSyxLQUFLaUssVUFBWWpOLEVBQUF1QyxFQUFBNkYs
RUFBQSxHQUFHLGNBQ3BCcEYsS0FBS2tLLGlCQUFtQmxOLEVBQUF1QyxFQUFBNkYsRUFBQSxHQUFH
LGVBQzNCcEYsS0FBS21LLGdCQUFrQm5OLEVBQUF1QyxFQUFBNkYsRUFBQSxHQUFHLG9CQUMxQnBG
LEtBQUtvSyxNQUFRcE4sRUFBQXVDLEVBQUE2RixFQUFBLEdBQUcsU0FDaEJwRixLQUFLcUssUUFB
VXJOLEVBQUF1QyxFQUFBNkYsRUFBQSxHQUFHLFdBQ2xCcEYsS0FBS3NLLFdBQWF0TixFQUFBdUMs
RUFBQTZGLEVBQUEsR0FBRyxlQUNyQnBGLEtBQUt1SyxTQUFXdk4sRUFBQXVDLEVBQUE2RixFQUFB
LEdBQUcsYVQ4aUNyQixNQXBKQWdFLEdBQWFVLElBQ1hyRyxJQUFLLGNBQ0xFLE1BQU8sU1N6NUJH
ckQsR0FDVixHQUFJa0ssR0FBT3hOLEVBQUF1QyxFQUFBNkYsRUFBQSxHQUFHLGFBQWU5RSxFQUFL
LEtBRTlCa0ssSUFDRnhLLEtBQUtpSyxVQUFVUSxZQUFZRCxNVDY1QjdCL0csSUFBSyx3QkFDTEUs
TUFBTyxTUzE1QmErRyxFQUFnQnRJLEdBQ3BDcEMsS0FBS21LLGdCQUFnQlEsVUFBWTNLLEtBQUtv
SCxTQUFTSSxxQkFBcUJrRCxHQUNwRTFLLEtBQUttSyxnQkFBZ0JTLE1BQU1DLFFBQVV6SSxFQUFV
LFFBQVUsVVQ2NUJ6RHFCLElBQUssZ0JBQ0xFLE1BQU8sU1MzNUJLckQsRUFBSUosR0FDaEIsR0FB
SXlJLEdBQVczTCxFQUFBdUMsRUFBQTZGLEVBQUEsR0FBRyxhQUFlOUUsRUFBSyxLQUV0QyxJQUFL
cUksRUFBTCxDQUlBLEdBQUlFLEdBQVE3TCxFQUFBdUMsRUFBQTZGLEVBQUEsR0FBRyxhQUFjdUQs
RUFDN0JBLEdBQVM4QixZQUFZNUIsR0FFckJGLEVBQVNGLFVBQVlFLEVBQVNGLFVBQVV4QixRQUFR
LFVBQVcsSUFFM0RqSyxFQUFBdUMsRUFBQTZGLEVBQUEsR0FBSSxRQUFTdUQsR0FBVXRKLFFBQVEs
U0FBU3lMLEdBQ3RDQSxFQUFNQyxZQUFjN0ssUVQrNUJ0QnVELElBQUssU0FDTEUsTUFBTyxTUzU1
QkZxSCxFQUFTQyxHQUNkLEdBQUlsTCxHQUFPQyxLQUNQa0wsR0FDRkMsWUFBYSxXQUNYcEwsRUFB
S2tLLFVBQVVVLFVBQVk1SyxFQUFLcUgsU0FBU0YsS0FBSytELElBRWhEeEssV0FBWSxXQUNWVixF
QUFLcUwsWUFBWUgsSUFFbkJJLG1CQUFvQixXQUNsQnRMLEVBQUttSyxpQkFBaUJTLFVBQVk1SyxF
QUFLcUgsU0FBU0MsWUFBWTRELElBRTlEekQscUJBQXNCLFdBQ3BCekgsRUFBS3VMLHNCQUFzQkws
RUFBVXRLLFVBQVdzSyxFQUFVN0ksVUFFNURtSix1QkFBd0IsV0FDdEJ4TCxFQUFLcUssTUFBTVEs
TUFBTUMsUUFBVTlLLEVBQUtzSyxRQUFRTyxNQUFNQyxRQUFVSSxFQUFVN0ksUUFBVSxRQUFVLFFB
RXhGdEIsVUFBVyxXQUNUZixFQUFLdUssV0FBV2pJLFFBQVU0SSxFQUFVNUksU0FFdENtSixVQUFX
LFdBQ1RoRCxFQUFXeUMsSUFFYlEsYUFBYyxXQUNaMUwsRUFBS3dLLFNBQVM1RyxNQUFRLElBRXhC
K0gsZ0JBQWlCLFdBQ2ZoRCxFQUFpQnVDLEVBQVUzSyxHQUFJMkssRUFBVXRLLFlBRTNDTixTQUFV
LFdBQ1J1SSxFQUFVcUMsRUFBVTNLLEdBQUkySyxFQUFVL0ssUUFFcEN5TCxhQUFjLFdBQ1o1TCxF
QUFLNkwsY0FBY1gsRUFBVTNLLEdBQUkySyxFQUFVL0ssUUFJL0NnTCxHQUFhRixRVCs1QmJ2SCxJ
QUFLLG9CQUNMRSxNQUFPLFNTNzVCUzVGLEdBQ2hCLEdBQUlnQyxHQUFPQyxJQUNYaEQsR0FBQXVD
LEVBQUE2RixFQUFBLEdBQVVyRixFQUFLa0ssVUFBVyxXQUFZLE9BQVEsV0FDdkNqSyxLQUFLbUos
UUFBUTBDLFlBQ2hCOU4sR0FDRXVDLEdBQUkySSxFQUFRakosTUFDWkUsTUFBT0YsS0FBSzJELFVB
S2xCM0csRUFBQXVDLEVBQUE2RixFQUFBLEdBQVVyRixFQUFLa0ssVUFBVyxXQUFZLFdBQVksU0FB
U2hNLEdBQ3JEQSxFQUFNNk4sVUFBWS9MLEVBQUtnSyxXQUd6Qi9KLEtBQUsrTCxZVGs2QlR0SSxJ
QUFLLHNCQUNMRSxNQUFPLFNTOTVCVzVGLEdBQ2xCLEdBQUlnQyxHQUFPQyxJQUNYaEQsR0FBQXVD
LEVBQUE2RixFQUFBLEdBQVVyRixFQUFLa0ssVUFBVyxXQUFZLFFBQVMsU0FBU2hNLEdBQ2xEQSxF
QUFNNk4sVUFBWS9MLEVBQUtpSyxhQUN6QmhLLEtBQUttSixRQUFRMEMsWUFBYSxFQUMxQjdMLEtB
QUsrTCxPQUVMaE8sR0FBU3VDLEdBQUkySSxFQUFRakosY1RtNkJ6QnlELElBQUssT0FDTEUsTUFB
TyxTUy81QkoxRixFQUFPRixHQUNWLEdBQUlnQyxHQUFPQyxJQUNHLGFBQVYvQixFQUNGakIsRUFB
QXVDLEVBQUE2RixFQUFBLEdBQUlyRixFQUFLd0ssU0FBVSxTQUFVLFdBQzNCeE0sRUFBUWdDLEVB
QUt3SyxTQUFTNUcsU0FHTCxvQkFBVjFGLEVBQ1RqQixFQUFBdUMsRUFBQTZGLEVBQUEsR0FBSXJG
LEVBQUtvSyxnQkFBaUIsUUFBUyxXQUNqQ3BNLE1BR2lCLGNBQVZFLEVBQ1RqQixFQUFBdUMsRUFB
QTZGLEVBQUEsR0FBSXJGLEVBQUt1SyxXQUFZLFFBQVMsV0FDNUJ2TSxHQUFTNEMsVUFBV1gsS0FB
S3FDLFlBR1IsYUFBVnBFLEVBQ1RqQixFQUFBdUMsRUFBQTZGLEVBQUEsR0FBVXJGLEVBQUtrSyxV
QUFXLFdBQVksV0FBWSxXQUNoRGxNLEdBQVN1QyxHQUFJMkksRUFBUWpKLFVBR0osZUFBVi9CLEVB
Q1RqQixFQUFBdUMsRUFBQTZGLEVBQUEsR0FBVXJGLEVBQUtrSyxVQUFXLFdBQVksUUFBUyxXQUM3
Q2xNLEdBQVN1QyxHQUFJMkksRUFBUWpKLFVBR0osZUFBVi9CLEVBQ1RqQixFQUFBdUMsRUFBQTZG
LEVBQUEsR0FBVXJGLEVBQUtrSyxVQUFXLFVBQVcsUUFBUyxXQUM1Q2xNLEdBQ0V1QyxHQUFJMkks
RUFBUWpKLE1BQ1pXLFVBQVdYLEtBQUtxQyxZQUlELGlCQUFWcEUsRUFDVDhCLEVBQUtpTSxrQkFB
a0JqTyxHQUVKLG1CQUFWRSxHQUNUOEIsRUFBS2tNLG9CQUFvQmxPLE9UNjVCdEIrTCxJQUdvQi9N
LEdBQVcsRVM5akNuQitNLEdUMm1DZixTQUFTaE4sRUFBUUMsS0FNakIsU0FBU0QsRUFBUUMsRUFB
U0MsR0FFaEMsWVU1bUNBLFNBQVNrUCxLQUNQbFAsRUFBQXVDLEVBQUE0TSxFQUFBLEdBQUlDLE9B
QVEsT0FBUUMsRUFBQSxHQUNwQnJQLEVBQUF1QyxFQUFBNE0sRUFBQSxHQUFJQyxPQUFRLGFBQWND
LEVBQUEsR1YybUNQLEdBQUlBLEdBQXFDclAsRUFBb0IsR1Vob0NsRm1QLEVBQUFuUCxFQUFBLEVB
TTBDLGNBQXhCSSxTQUFTa1AsVUFVekJKLFFWMG9DQyIsImZpbGUiOiJidW5kbGUuYXBwLjkzMGFk
OGI4MzEyNjg2MmQ3NDQ1LmpzIiwic291cmNlc0NvbnRlbnQiOlsid2VicGFja0pzb25wKFswLDJd
LFtcbi8qIDAgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3Jl
cXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLyogaGFybW9ueSBleHBvcnQgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKGV4cG9ydHMsIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHFz
OyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0ICovIF9fd2VicGFja19yZXF1aXJlX18uZChleHBvcnRz
LCBcImJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBxc2E7IH0pO1xuLyogaGFybW9ueSBleHBvcnQg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKGV4cG9ydHMsIFwiZFwiLCBmdW5jdGlvbigpIHsgcmV0
dXJuICRvbjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
ZXhwb3J0cywgXCJjXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gJGRlbGVnYXRlOyB9KTtcbi8qIGhh
cm1vbnkgZXhwb3J0ICovIF9fd2VicGFja19yZXF1aXJlX18uZChleHBvcnRzLCBcImVcIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiAkcGFyZW50OyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0ICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChleHBvcnRzLCBcImZcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW1v
dmU7IH0pO1xuXG4vLyBHZXQgZWxlbWVudChzKSBieSBDU1Mgc2VsZWN0b3I6XG5mdW5jdGlvbiBx
cyhzZWxlY3Rvciwgc2NvcGUpIHtcbiAgcmV0dXJuIChzY29wZSB8fCBkb2N1bWVudCkucXVlcnlT
ZWxlY3RvcihzZWxlY3Rvcik7XG59XG5cbmZ1bmN0aW9uIHFzYShzZWxlY3Rvciwgc2NvcGUpIHtc
biAgcmV0dXJuIChzY29wZSB8fCBkb2N1bWVudCkucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7
XG59XG5cbi8vIGFkZEV2ZW50TGlzdGVuZXIgd3JhcHBlcjpcbmZ1bmN0aW9uICRvbih0YXJnZXQs
IHR5cGUsIGNhbGxiYWNrLCB1c2VDYXB0dXJlKSB7XG4gIHRhcmdldC5hZGRFdmVudExpc3RlbmVy
KHR5cGUsIGNhbGxiYWNrLCAhIXVzZUNhcHR1cmUpO1xufVxuXG4vLyBBdHRhY2ggYSBoYW5kbGVy
IHRvIGV2ZW50IGZvciBhbGwgZWxlbWVudHMgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IsXG4vLyBu
b3cgb3IgaW4gdGhlIGZ1dHVyZSwgYmFzZWQgb24gYSByb290IGVsZW1lbnRcbmZ1bmN0aW9uICRk
ZWxlZ2F0ZSh0YXJnZXQsIHNlbGVjdG9yLCB0eXBlLCBoYW5kbGVyKSB7XG4gIC8vIGh0dHBzOi8v
ZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0V2ZW50cy9ibHVyXG4gIHZhciB1
c2VDYXB0dXJlID0gdHlwZSA9PT0gJ2JsdXInIHx8IHR5cGUgPT09ICdmb2N1cyc7XG4gICRvbih0
YXJnZXQsIHR5cGUsIGRpc3BhdGNoRXZlbnQsIHVzZUNhcHR1cmUpO1xuXG4gIGZ1bmN0aW9uIGRp
c3BhdGNoRXZlbnQoZXZlbnQpIHtcbiAgICB2YXIgdGFyZ2V0RWxlbWVudCA9IGV2ZW50LnRhcmdl
dDtcbiAgICB2YXIgcG90ZW50aWFsRWxlbWVudHMgPSBxc2Eoc2VsZWN0b3IsIHRhcmdldCk7XG4g
ICAgdmFyIGhhc01hdGNoID0gQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChwb3RlbnRpYWxF
bGVtZW50cywgdGFyZ2V0RWxlbWVudCkgPj0gMDtcblxuICAgIGlmIChoYXNNYXRjaCkge1xuICAg
ICAgaGFuZGxlci5jYWxsKHRhcmdldEVsZW1lbnQsIGV2ZW50KTtcbiAgICB9XG4gIH1cbn1cblxu
Ly8gRmluZCB0aGUgZWxlbWVudCdzIHBhcmVudCB3aXRoIHRoZSBnaXZlbiB0YWcgbmFtZTpcbi8v
ICRwYXJlbnQocXMoJ2EnKSwgJ2RpdicpO1xuZnVuY3Rpb24gJHBhcmVudChlbGVtZW50LCB0YWdO
YW1lKSB7XG4gIGlmICghZWxlbWVudC5wYXJlbnROb2RlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5l
ZDtcbiAgfVxuICBpZiAoZWxlbWVudC5wYXJlbnROb2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9
PT0gdGFnTmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQucGFyZW50Tm9k
ZTtcbiAgfVxuICByZXR1cm4gJHBhcmVudChlbGVtZW50LnBhcmVudE5vZGUsIHRhZ05hbWUpO1xu
fVxuXG4vLyByZW1vdmVzIGFuIGVsZW1lbnQgZnJvbSBhbiBhcnJheVxuLy8gY29uc3QgeCA9IFsx
LDIsM11cbi8vIHJlbW92ZSh4LCAyKVxuLy8geCB+PT0gWzEsM11cbmZ1bmN0aW9uIHJlbW92ZShh
cnJheSwgdGhpbmcpIHtcbiAgdmFyIGluZGV4ID0gYXJyYXkuaW5kZXhPZih0aGluZyk7XG4gIGlm
IChpbmRleCA9PT0gLTEpIHtcbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cbiAgYXJyYXkuc3BsaWNl
KGluZGV4LCAxKTtcbn1cblxuLy8gQWxsb3cgZm9yIGxvb3Bpbmcgb24gbm9kZXMgYnkgY2hhaW5p
bmc6XG4vLyBxc2EoJy5mb28nKS5mb3JFYWNoKGZ1bmN0aW9uICgpIHt9KVxuTm9kZUxpc3QucHJv
dG90eXBlLmZvckVhY2ggPSBBcnJheS5wcm90b3R5cGUuZm9yRWFjaDtcblxuLyoqKi8gfSxcbi8q
IDEgKi8sXG4vKiAyICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFj
a19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3RvZG9tdmNfYXBwX2Nzc19pbmRleF9jc3Nf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3RvZG9tdmNfYXBwX2Nzc19pbmRleF9jc3NfX19kZWZh
dWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF90
b2RvbXZjX2FwcF9jc3NfaW5kZXhfY3NzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYXBwX2Nzc19fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygxMCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19hcHBfY3NzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX2FwcF9jc3NfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19oZWxwZXJzX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKDApO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fdG9kb19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcbi8qIGhhcm1vbnkgZXhwb3J0
ICovIGV4cG9ydHNbXCJhXCJdID0gb25Mb2FkO1xuXG5cblxuXG5cbmZ1bmN0aW9uIG9uTG9hZCgp
IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbXBvcnQvcHJlZmVyLWRlZmF1bHQtZXhwb3J0
XG4gIF9fd2VicGFja19yZXF1aXJlX18uaShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3Rv
ZG9fX1tcImFcIiAvKiB1cGRhdGVUb2RvICovXSkoKTtcbn1cblxuLyoqKi8gfSxcbi8qIDMgKi9c
bi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xu
XG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gZXhwb3J0c1tc
ImFcIl0gPSBDb250cm9sbGVyO1xuXG4vKipcbiogVGFrZXMgYSBtb2RlbCBhbmQgdmlldyBhbmQg
YWN0cyBhcyB0aGUgY29udHJvbGxlciBiZXR3ZWVuIHRoZW1cbipcbiogQGNvbnN0cnVjdG9yXG4q
IEBwYXJhbSB7b2JqZWN0fSBtb2RlbCBUaGUgbW9kZWwgaW5zdGFuY2VcbiogQHBhcmFtIHtvYmpl
Y3R9IHZpZXcgVGhlIHZpZXcgaW5zdGFuY2VcbiovXG5mdW5jdGlvbiBDb250cm9sbGVyKG1vZGVs
LCB2aWV3KSB7XG4gIHZhciB0aGF0ID0gdGhpcztcbiAgdGhhdC5tb2RlbCA9IG1vZGVsO1xuICB0
aGF0LnZpZXcgPSB2aWV3O1xuXG4gIHRoYXQudmlldy5iaW5kKCduZXdUb2RvJywgZnVuY3Rpb24g
KHRpdGxlKSB7XG4gICAgdGhhdC5hZGRJdGVtKHRpdGxlKTtcbiAgfSk7XG5cbiAgdGhhdC52aWV3
LmJpbmQoJ2l0ZW1FZGl0JywgZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICB0aGF0LmVkaXRJdGVtKGl0
ZW0uaWQpO1xuICB9KTtcblxuICB0aGF0LnZpZXcuYmluZCgnaXRlbUVkaXREb25lJywgZnVuY3Rp
b24gKGl0ZW0pIHtcbiAgICB0aGF0LmVkaXRJdGVtU2F2ZShpdGVtLmlkLCBpdGVtLnRpdGxlKTtc
biAgfSk7XG5cbiAgdGhhdC52aWV3LmJpbmQoJ2l0ZW1FZGl0Q2FuY2VsJywgZnVuY3Rpb24gKGl0
ZW0pIHtcbiAgICB0aGF0LmVkaXRJdGVtQ2FuY2VsKGl0ZW0uaWQpO1xuICB9KTtcblxuICB0aGF0
LnZpZXcuYmluZCgnaXRlbVJlbW92ZScsIGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgdGhhdC5yZW1v
dmVJdGVtKGl0ZW0uaWQpO1xuICB9KTtcblxuICB0aGF0LnZpZXcuYmluZCgnaXRlbVRvZ2dsZScs
IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgdGhhdC50b2dnbGVDb21wbGV0ZShpdGVtLmlkLCBpdGVt
LmNvbXBsZXRlZCk7XG4gIH0pO1xuXG4gIHRoYXQudmlldy5iaW5kKCdyZW1vdmVDb21wbGV0ZWQn
LCBmdW5jdGlvbiAoKSB7XG4gICAgdGhhdC5yZW1vdmVDb21wbGV0ZWRJdGVtcygpO1xuICB9KTtc
blxuICB0aGF0LnZpZXcuYmluZCgndG9nZ2xlQWxsJywgZnVuY3Rpb24gKHN0YXR1cykge1xuICAg
IHRoYXQudG9nZ2xlQWxsKHN0YXR1cy5jb21wbGV0ZWQpO1xuICB9KTtcbn1cblxuLyoqXG4qIExv
YWRzIGFuZCBpbml0aWFsaXNlcyB0aGUgdmlld1xuKlxuKiBAcGFyYW0ge3N0cmluZ30gJycgfCAn
YWN0aXZlJyB8ICdjb21wbGV0ZWQnXG4qL1xuQ29udHJvbGxlci5wcm90b3R5cGUuc2V0VmlldyA9
IGZ1bmN0aW9uIChsb2NhdGlvbkhhc2gpIHtcbiAgdmFyIHJvdXRlID0gbG9jYXRpb25IYXNoLnNw
bGl0KCcvJylbMV07XG4gIHZhciBwYWdlID0gcm91dGUgfHwgJyc7XG4gIHRoaXMuX3VwZGF0ZUZp
bHRlclN0YXRlKHBhZ2UpO1xufTtcblxuLyoqXG4qIEFuIGV2ZW50IHRvIGZpcmUgb24gbG9hZC4g
V2lsbCBnZXQgYWxsIGl0ZW1zIGFuZCBkaXNwbGF5IHRoZW0gaW4gdGhlXG4qIHRvZG8tbGlzdFxu
Ki9cbkNvbnRyb2xsZXIucHJvdG90eXBlLnNob3dBbGwgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB0
aGF0ID0gdGhpcztcbiAgdGhhdC5tb2RlbC5yZWFkKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgdGhh
dC52aWV3LnJlbmRlcignc2hvd0VudHJpZXMnLCBkYXRhKTtcbiAgfSk7XG59O1xuXG4vKipcbiog
UmVuZGVycyBhbGwgYWN0aXZlIHRhc2tzXG4qL1xuQ29udHJvbGxlci5wcm90b3R5cGUuc2hvd0Fj
dGl2ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSB0aGlzO1xuICB0aGF0Lm1vZGVsLnJl
YWQoeyBjb21wbGV0ZWQ6IGZhbHNlIH0sIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgdGhhdC52aWV3
LnJlbmRlcignc2hvd0VudHJpZXMnLCBkYXRhKTtcbiAgfSk7XG59O1xuXG4vKipcbiogUmVuZGVy
cyBhbGwgY29tcGxldGVkIHRhc2tzXG4qL1xuQ29udHJvbGxlci5wcm90b3R5cGUuc2hvd0NvbXBs
ZXRlZCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSB0aGlzO1xuICB0aGF0Lm1vZGVsLnJl
YWQoeyBjb21wbGV0ZWQ6IHRydWUgfSwgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICB0aGF0LnZpZXcu
cmVuZGVyKCdzaG93RW50cmllcycsIGRhdGEpO1xuICB9KTtcbn07XG5cbi8qKlxuKiBBbiBldmVu
dCB0byBmaXJlIHdoZW5ldmVyIHlvdSB3YW50IHRvIGFkZCBhbiBpdGVtLiBTaW1wbHkgcGFzcyBp
biB0aGUgZXZlbnRcbiogb2JqZWN0IGFuZCBpdCdsbCBoYW5kbGUgdGhlIERPTSBpbnNlcnRpb24g
YW5kIHNhdmluZyBvZiB0aGUgbmV3IGl0ZW0uXG4qL1xuQ29udHJvbGxlci5wcm90b3R5cGUuYWRk
SXRlbSA9IGZ1bmN0aW9uICh0aXRsZSkge1xuICB2YXIgdGhhdCA9IHRoaXM7XG5cbiAgaWYgKHRp
dGxlLnRyaW0oKSA9PT0gJycpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGF0Lm1vZGVsLmNy
ZWF0ZSh0aXRsZSwgZnVuY3Rpb24gKCkge1xuICAgIHRoYXQudmlldy5yZW5kZXIoJ2NsZWFyTmV3
VG9kbycpO1xuICAgIHRoYXQuX2ZpbHRlcih0cnVlKTtcbiAgfSk7XG59O1xuXG4vKlxuKiBUcmln
Z2VycyB0aGUgaXRlbSBlZGl0aW5nIG1vZGUuXG4qL1xuQ29udHJvbGxlci5wcm90b3R5cGUuZWRp
dEl0ZW0gPSBmdW5jdGlvbiAoaWQpIHtcbiAgdmFyIHRoYXQgPSB0aGlzO1xuICB0aGF0Lm1vZGVs
LnJlYWQoaWQsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgdGhhdC52aWV3LnJlbmRlcignZWRpdEl0
ZW0nLCB7IGlkOiBpZCwgdGl0bGU6IGRhdGFbMF0udGl0bGUgfSk7XG4gIH0pO1xufTtcblxuLypc
biogRmluaXNoZXMgdGhlIGl0ZW0gZWRpdGluZyBtb2RlIHN1Y2Nlc3NmdWxseS5cbiovXG5Db250
cm9sbGVyLnByb3RvdHlwZS5lZGl0SXRlbVNhdmUgPSBmdW5jdGlvbiAoaWQsIHRpdGxlKSB7XG4g
IHZhciB0aGF0ID0gdGhpcztcbiAgaWYgKHRpdGxlLnRyaW0oKSkge1xuICAgIHRoYXQubW9kZWwu
dXBkYXRlKGlkLCB7IHRpdGxlOiB0aXRsZSB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGF0LnZp
ZXcucmVuZGVyKCdlZGl0SXRlbURvbmUnLCB7IGlkOiBpZCwgdGl0bGU6IHRpdGxlIH0pO1xuICAg
IH0pO1xuICB9IGVsc2Uge1xuICAgIHRoYXQucmVtb3ZlSXRlbShpZCk7XG4gIH1cbn07XG5cbi8q
XG4qIENhbmNlbHMgdGhlIGl0ZW0gZWRpdGluZyBtb2RlLlxuKi9cbkNvbnRyb2xsZXIucHJvdG90
eXBlLmVkaXRJdGVtQ2FuY2VsID0gZnVuY3Rpb24gKGlkKSB7XG4gIHZhciB0aGF0ID0gdGhpcztc
biAgdGhhdC5tb2RlbC5yZWFkKGlkLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgIHRoYXQudmlldy5y
ZW5kZXIoJ2VkaXRJdGVtRG9uZScsIHsgaWQ6IGlkLCB0aXRsZTogZGF0YVswXS50aXRsZSB9KTtc
biAgfSk7XG59O1xuXG4vKipcbiogQnkgZ2l2aW5nIGl0IGFuIElEIGl0J2xsIGZpbmQgdGhlIERP
TSBlbGVtZW50IG1hdGNoaW5nIHRoYXQgSUQsXG4qIHJlbW92ZSBpdCBmcm9tIHRoZSBET00gYW5k
IGFsc28gcmVtb3ZlIGl0IGZyb20gc3RvcmFnZS5cbipcbiogQHBhcmFtIHtudW1iZXJ9IGlkIFRo
ZSBJRCBvZiB0aGUgaXRlbSB0byByZW1vdmUgZnJvbSB0aGUgRE9NIGFuZFxuKiBzdG9yYWdlXG4q
L1xuQ29udHJvbGxlci5wcm90b3R5cGUucmVtb3ZlSXRlbSA9IGZ1bmN0aW9uIChpZCkge1xuICB2
YXIgdGhhdCA9IHRoaXM7XG4gIHRoYXQubW9kZWwucmVtb3ZlKGlkLCBmdW5jdGlvbiAoKSB7XG4g
ICAgdGhhdC52aWV3LnJlbmRlcigncmVtb3ZlSXRlbScsIGlkKTtcbiAgfSk7XG5cbiAgdGhhdC5f
ZmlsdGVyKCk7XG59O1xuXG4vKipcbiogV2lsbCByZW1vdmUgYWxsIGNvbXBsZXRlZCBpdGVtcyBm
cm9tIHRoZSBET00gYW5kIHN0b3JhZ2UuXG4qL1xuQ29udHJvbGxlci5wcm90b3R5cGUucmVtb3Zl
Q29tcGxldGVkSXRlbXMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gdGhpcztcbiAgdGhh
dC5tb2RlbC5yZWFkKHsgY29tcGxldGVkOiB0cnVlIH0sIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAg
ZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB0aGF0LnJlbW92ZUl0ZW0oaXRl
bS5pZCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHRoYXQuX2ZpbHRlcigpO1xufTtcblxuLyoqXG4q
IEdpdmUgaXQgYW4gSUQgb2YgYSBtb2RlbCBhbmQgYSBjaGVja2JveCBhbmQgaXQgd2lsbCB1cGRh
dGUgdGhlIGl0ZW1cbiogaW4gc3RvcmFnZSBiYXNlZCBvbiB0aGUgY2hlY2tib3gncyBzdGF0ZS5c
bipcbiogQHBhcmFtIHtudW1iZXJ9IGlkIFRoZSBJRCBvZiB0aGUgZWxlbWVudCB0byBjb21wbGV0
ZSBvciB1bmNvbXBsZXRlXG4qIEBwYXJhbSB7b2JqZWN0fSBjaGVja2JveCBUaGUgY2hlY2tib3gg
dG8gY2hlY2sgdGhlIHN0YXRlIG9mIGNvbXBsZXRlXG4qICAgICAgICAgICAgICAgICAgICAgICAg
ICBvciBub3RcbiogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gc2lsZW50IFByZXZlbnQgcmUt
ZmlsdGVyaW5nIHRoZSB0b2RvIGl0ZW1zXG4qL1xuQ29udHJvbGxlci5wcm90b3R5cGUudG9nZ2xl
Q29tcGxldGUgPSBmdW5jdGlvbiAoaWQsIGNvbXBsZXRlZCwgc2lsZW50KSB7XG4gIHZhciB0aGF0
ID0gdGhpcztcbiAgdGhhdC5tb2RlbC51cGRhdGUoaWQsIHsgY29tcGxldGVkOiBjb21wbGV0ZWQg
fSwgZnVuY3Rpb24gKCkge1xuICAgIHRoYXQudmlldy5yZW5kZXIoJ2VsZW1lbnRDb21wbGV0ZScs
IHtcbiAgICAgIGlkOiBpZCxcbiAgICAgIGNvbXBsZXRlZDogY29tcGxldGVkXG4gICAgfSk7XG4g
IH0pO1xuXG4gIGlmICghc2lsZW50KSB7XG4gICAgdGhhdC5fZmlsdGVyKCk7XG4gIH1cbn07XG5c
bi8qKlxuKiBXaWxsIHRvZ2dsZSBBTEwgY2hlY2tib3hlcycgb24vb2ZmIHN0YXRlIGFuZCBjb21w
bGV0ZW5lc3Mgb2YgbW9kZWxzLlxuKiBKdXN0IHBhc3MgaW4gdGhlIGV2ZW50IG9iamVjdC5cbiov
XG5Db250cm9sbGVyLnByb3RvdHlwZS50b2dnbGVBbGwgPSBmdW5jdGlvbiAoY29tcGxldGVkKSB7
XG4gIHZhciB0aGF0ID0gdGhpcztcbiAgdGhhdC5tb2RlbC5yZWFkKHsgY29tcGxldGVkOiAhY29t
cGxldGVkIH0sIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChp
dGVtKSB7XG4gICAgICB0aGF0LnRvZ2dsZUNvbXBsZXRlKGl0ZW0uaWQsIGNvbXBsZXRlZCwgdHJ1
ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHRoYXQuX2ZpbHRlcigpO1xufTtcblxuLyoqXG4qIFVw
ZGF0ZXMgdGhlIHBpZWNlcyBvZiB0aGUgcGFnZSB3aGljaCBjaGFuZ2UgZGVwZW5kaW5nIG9uIHRo
ZSByZW1haW5pbmdcbiogbnVtYmVyIG9mIHRvZG9zLlxuKi9cbkNvbnRyb2xsZXIucHJvdG90eXBl
Ll91cGRhdGVDb3VudCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSB0aGlzO1xuICB0aGF0
Lm1vZGVsLmdldENvdW50KGZ1bmN0aW9uICh0b2Rvcykge1xuICAgIHRoYXQudmlldy5yZW5kZXIo
J3VwZGF0ZUVsZW1lbnRDb3VudCcsIHRvZG9zLmFjdGl2ZSk7XG4gICAgdGhhdC52aWV3LnJlbmRl
cignY2xlYXJDb21wbGV0ZWRCdXR0b24nLCB7XG4gICAgICBjb21wbGV0ZWQ6IHRvZG9zLmNvbXBs
ZXRlZCxcbiAgICAgIHZpc2libGU6IHRvZG9zLmNvbXBsZXRlZCA+IDBcbiAgICB9KTtcblxuICAg
IHRoYXQudmlldy5yZW5kZXIoJ3RvZ2dsZUFsbCcsIHsgY2hlY2tlZDogdG9kb3MuY29tcGxldGVk
ID09PSB0b2Rvcy50b3RhbCB9KTtcbiAgICB0aGF0LnZpZXcucmVuZGVyKCdjb250ZW50QmxvY2tW
aXNpYmlsaXR5JywgeyB2aXNpYmxlOiB0b2Rvcy50b3RhbCA+IDAgfSk7XG4gIH0pO1xufTtcblxu
LyoqXG4qIFJlLWZpbHRlcnMgdGhlIHRvZG8gaXRlbXMsIGJhc2VkIG9uIHRoZSBhY3RpdmUgcm91
dGUuXG4qIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGZvcmNlICBmb3JjZXMgYSByZS1wYWlu
dGluZyBvZiB0b2RvIGl0ZW1zLlxuKi9cbkNvbnRyb2xsZXIucHJvdG90eXBlLl9maWx0ZXIgPSBm
dW5jdGlvbiAoZm9yY2UpIHtcbiAgdmFyIGFjdGl2ZVJvdXRlID0gdGhpcy5fYWN0aXZlUm91dGUu
Y2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0aGlzLl9hY3RpdmVSb3V0ZS5zdWJzdHIoMSk7XG5c
biAgLy8gVXBkYXRlIHRoZSBlbGVtZW50cyBvbiB0aGUgcGFnZSwgd2hpY2ggY2hhbmdlIHdpdGgg
ZWFjaCBjb21wbGV0ZWQgdG9kb1xuICB0aGlzLl91cGRhdGVDb3VudCgpO1xuXG4gIC8vIElmIHRo
ZSBsYXN0IGFjdGl2ZSByb3V0ZSBpc24ndCBcIkFsbFwiLCBvciB3ZSdyZSBzd2l0Y2hpbmcgcm91
dGVzLCB3ZVxuICAvLyByZS1jcmVhdGUgdGhlIHRvZG8gaXRlbSBlbGVtZW50cywgY2FsbGluZzpc
biAgLy8gICB0aGlzLnNob3dbQWxsfEFjdGl2ZXxDb21wbGV0ZWRdKCk7XG4gIGlmIChmb3JjZSB8
fCB0aGlzLl9sYXN0QWN0aXZlUm91dGUgIT09ICdBbGwnIHx8IHRoaXMuX2xhc3RBY3RpdmVSb3V0
ZSAhPT0gYWN0aXZlUm91dGUpIHtcbiAgICB0aGlzWydzaG93JyArIGFjdGl2ZVJvdXRlXSgpO1xu
ICB9XG5cbiAgdGhpcy5fbGFzdEFjdGl2ZVJvdXRlID0gYWN0aXZlUm91dGU7XG59O1xuXG4vKipc
biogU2ltcGx5IHVwZGF0ZXMgdGhlIGZpbHRlciBuYXYncyBzZWxlY3RlZCBzdGF0ZXNcbiovXG5D
b250cm9sbGVyLnByb3RvdHlwZS5fdXBkYXRlRmlsdGVyU3RhdGUgPSBmdW5jdGlvbiAoY3VycmVu
dFBhZ2UpIHtcbiAgLy8gU3RvcmUgYSByZWZlcmVuY2UgdG8gdGhlIGFjdGl2ZSByb3V0ZSwgYWxs
b3dpbmcgdXMgdG8gcmUtZmlsdGVyIHRvZG9cbiAgLy8gaXRlbXMgYXMgdGhleSBhcmUgbWFya2Vk
IGNvbXBsZXRlIG9yIGluY29tcGxldGUuXG4gIGN1cnJlbnRQYWdlID0gY3VycmVudFBhZ2Uuc3Bs
aXQoJz8nKVswXTtcbiAgdGhpcy5fYWN0aXZlUm91dGUgPSBjdXJyZW50UGFnZTtcblxuICBpZiAo
Y3VycmVudFBhZ2UgPT09ICcnKSB7XG4gICAgdGhpcy5fYWN0aXZlUm91dGUgPSAnQWxsJztcbiAg
fVxuXG4gIHRoaXMuX2ZpbHRlcigpO1xuXG4gIHRoaXMudmlldy5yZW5kZXIoJ3NldEZpbHRlcics
IGN1cnJlbnRQYWdlKTtcbn07XG5cbi8qKiovIH0sXG4vKiA0ICovXG4vKioqLyBmdW5jdGlvbiht
b2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIF90eXBlb2YgPSB0
eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9
PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBm
dW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlv
blwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3Rv
dHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG4oZnVuY3Rpb24gKHJvb3QpIHtc
biAgdmFyIGxvY2FsU3RvcmFnZU1lbW9yeSA9IHt9O1xuICB2YXIgY2FjaGUgPSB7fTtcblxuICAv
KipcbiAgICogbnVtYmVyIG9mIHN0b3JlZCBpdGVtcy5cbiAgICovXG4gIGxvY2FsU3RvcmFnZU1l
bW9yeS5sZW5ndGggPSAwO1xuXG4gIC8qKlxuICAgKiByZXR1cm5zIGl0ZW0gZm9yIHBhc3NlZCBr
ZXksIG9yIG51bGxcbiAgICpcbiAgICogQHBhcmEge1N0cmluZ30ga2V5XG4gICAqICAgICAgIG5h
bWUgb2YgaXRlbSB0byBiZSByZXR1cm5lZFxuICAgKiBAcmV0dXJucyB7U3RyaW5nfG51bGx9XG4g
ICAqL1xuICBsb2NhbFN0b3JhZ2VNZW1vcnkuZ2V0SXRlbSA9IGZ1bmN0aW9uIChrZXkpIHtcbiAg
ICByZXR1cm4gY2FjaGVba2V5XSB8fCBudWxsO1xuICB9O1xuXG4gIC8qKlxuICAgKiBzZXRzIGl0
ZW0gZm9yIGtleSB0byBwYXNzZWQgdmFsdWUsIGFzIFN0cmluZ1xuICAgKlxuICAgKiBAcGFyYSB7
U3RyaW5nfSBrZXlcbiAgICogICAgICAgbmFtZSBvZiBpdGVtIHRvIGJlIHNldFxuICAgKiBAcGFy
YSB7U3RyaW5nfSB2YWx1ZVxuICAgKiAgICAgICB2YWx1ZSwgd2lsbCBhbHdheXMgYmUgdHVybmVk
IGludG8gYSBTdHJpbmdcbiAgICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAgICovXG4gIGxvY2Fs
U3RvcmFnZU1lbW9yeS5zZXRJdGVtID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICBpZiAo
dHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgbG9jYWxTdG9yYWdlTWVtb3J5
LnJlbW92ZUl0ZW0oa2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFjYWNoZS5oYXNPd25Q
cm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIGxvY2FsU3RvcmFnZU1lbW9yeS5sZW5ndGgrKztcbiAg
ICAgIH1cblxuICAgICAgY2FjaGVba2V5XSA9ICcnICsgdmFsdWU7XG4gICAgfVxuICB9O1xuXG4g
IC8qKlxuICAgKiByZW1vdmVzIGl0ZW0gZm9yIHBhc3NlZCBrZXlcbiAgICpcbiAgICogQHBhcmEg
e1N0cmluZ30ga2V5XG4gICAqICAgICAgIG5hbWUgb2YgaXRlbSB0byBiZSByZW1vdmVkXG4gICAq
IEByZXR1cm5zIHt1bmRlZmluZWR9XG4gICAqL1xuICBsb2NhbFN0b3JhZ2VNZW1vcnkucmVtb3Zl
SXRlbSA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoY2FjaGUuaGFzT3duUHJvcGVydHkoa2V5
KSkge1xuICAgICAgZGVsZXRlIGNhY2hlW2tleV07XG4gICAgICBsb2NhbFN0b3JhZ2VNZW1vcnku
bGVuZ3RoLS07XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiByZXR1cm5zIG5hbWUgb2Yga2V5
IGF0IHBhc3NlZCBpbmRleFxuICAgKlxuICAgKiBAcGFyYSB7TnVtYmVyfSBpbmRleFxuICAgKiAg
ICAgICBQb3NpdGlvbiBmb3Iga2V5IHRvIGJlIHJldHVybmVkIChzdGFydHMgYXQgMClcbiAgICog
QHJldHVybnMge1N0cmluZ3xudWxsfVxuICAgKi9cbiAgbG9jYWxTdG9yYWdlTWVtb3J5LmtleSA9
IGZ1bmN0aW9uIChpbmRleCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhjYWNoZSlbaW5kZXhd
IHx8IG51bGw7XG4gIH07XG5cbiAgLyoqXG4gICAqIHJlbW92ZXMgYWxsIHN0b3JlZCBpdGVtcyBh
bmQgc2V0cyBsZW5ndGggdG8gMFxuICAgKlxuICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICAg
Ki9cbiAgbG9jYWxTdG9yYWdlTWVtb3J5LmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICAgIGNhY2hl
ID0ge307XG4gICAgbG9jYWxTdG9yYWdlTWVtb3J5Lmxlbmd0aCA9IDA7XG4gIH07XG5cbiAgaWYg
KCggZmFsc2UgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YoZXhwb3J0cykpID09PSAnb2JqZWN0Jykg
e1xuICAgIG1vZHVsZS5leHBvcnRzID0gbG9jYWxTdG9yYWdlTWVtb3J5O1xuICB9IGVsc2Uge1xu
ICAgIHJvb3QubG9jYWxTdG9yYWdlTWVtb3J5ID0gbG9jYWxTdG9yYWdlTWVtb3J5O1xuICB9XG59
KSh0aGlzKTtcblxuLyoqKi8gfSxcbi8qIDUgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhw
b3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbnZhciBfdHlw
ZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRl
cmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2Jq
OyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwi
ZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJv
bC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxuLyogaGFybW9ueSBk
ZWZhdWx0IGV4cG9ydCAqLyBleHBvcnRzW1wiYVwiXSA9IE1vZGVsO1xuXG4vKipcbiogQ3JlYXRl
cyBhIG5ldyBNb2RlbCBpbnN0YW5jZSBhbmQgaG9va3MgdXAgdGhlIHN0b3JhZ2UuXG4qXG4qIEBj
b25zdHJ1Y3RvclxuKiBAcGFyYW0ge29iamVjdH0gc3RvcmFnZSBBIHJlZmVyZW5jZSB0byB0aGUg
Y2xpZW50IHNpZGUgc3RvcmFnZSBjbGFzc1xuKi9cbmZ1bmN0aW9uIE1vZGVsKHN0b3JhZ2UpIHtc
biAgdGhpcy5zdG9yYWdlID0gc3RvcmFnZTtcbn1cblxuLyoqXG4qIENyZWF0ZXMgYSBuZXcgdG9k
byBtb2RlbFxuKlxuKiBAcGFyYW0ge3N0cmluZ30gW3RpdGxlXSBUaGUgdGl0bGUgb2YgdGhlIHRh
c2tcbiogQHBhcmFtIHtmdW5jdGlvbn0gW2NhbGxiYWNrXSBUaGUgY2FsbGJhY2sgdG8gZmlyZSBh
ZnRlciB0aGUgbW9kZWwgaXMgY3JlYXRlZFxuKi9cbk1vZGVsLnByb3RvdHlwZS5jcmVhdGUgPSBm
dW5jdGlvbiAodGl0bGUsIGNhbGxiYWNrKSB7XG4gIHRpdGxlID0gdGl0bGUgfHwgJyc7XG4gIGNh
bGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG5cbiAgdmFyIG5ld0l0ZW0gPSB7
XG4gICAgdGl0bGU6IHRpdGxlLnRyaW0oKSxcbiAgICBjb21wbGV0ZWQ6IGZhbHNlXG4gIH07XG5c
biAgdGhpcy5zdG9yYWdlLnNhdmUobmV3SXRlbSwgY2FsbGJhY2spO1xufTtcblxuLyoqXG4gKiBG
aW5kcyBhbmQgcmV0dXJucyBhIG1vZGVsIGluIHN0b3JhZ2UuIElmIG5vIHF1ZXJ5IGlzIGdpdmVu
IGl0J2xsIHNpbXBseVxuICogcmV0dXJuIGV2ZXJ5dGhpbmcuIElmIHlvdSBwYXNzIGluIGEgc3Ry
aW5nIG9yIG51bWJlciBpdCdsbCBsb29rIHRoYXQgdXAgYXNcbiAqIHRoZSBJRCBvZiB0aGUgbW9k
ZWwgdG8gZmluZC4gTGFzdGx5LCB5b3UgY2FuIHBhc3MgaXQgYW4gb2JqZWN0IHRvIG1hdGNoIGFn
YWluc3QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfG9iamVjdH0gW3F1ZXJ5XSBBIHF1
ZXJ5IHRvIG1hdGNoIG1vZGVscyBhZ2FpbnN0XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbY2FsbGJh
Y2tdIFRoZSBjYWxsYmFjayB0byBmaXJlIGFmdGVyIHRoZSBtb2RlbCBpcyBmb3VuZFxuICpcbiAq
IEBleGFtcGxlXG4gKiBtb2RlbC5yZWFkKDEsIGZ1bmMpOyAvLyBXaWxsIGZpbmQgdGhlIG1vZGVs
IHdpdGggYW4gSUQgb2YgMVxuICogbW9kZWwucmVhZCgnMScpOyAvLyBTYW1lIGFzIGFib3ZlXG4g
KiAvL0JlbG93IHdpbGwgZmluZCBhIG1vZGVsIHdpdGggZm9vIGVxdWFsbGluZyBiYXIgYW5kIGhl
bGxvIGVxdWFsbGluZyB3b3JsZC5cbiAqIG1vZGVsLnJlYWQoeyBmb286ICdiYXInLCBoZWxsbzog
J3dvcmxkJyB9KTtcbiAqL1xuTW9kZWwucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbiAocXVlcnks
IGNhbGxiYWNrKSB7XG4gIHZhciBxdWVyeVR5cGUgPSB0eXBlb2YgcXVlcnkgPT09ICd1bmRlZmlu
ZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKHF1ZXJ5KTtcbiAgY2FsbGJhY2sgPSBjYWxsYmFj
ayB8fCBmdW5jdGlvbiAoKSB7fTtcblxuICBpZiAocXVlcnlUeXBlID09PSAnZnVuY3Rpb24nKSB7
XG4gICAgY2FsbGJhY2sgPSBxdWVyeTtcbiAgICByZXR1cm4gdGhpcy5zdG9yYWdlLmZpbmRBbGwo
Y2FsbGJhY2spO1xuICB9IGVsc2UgaWYgKHF1ZXJ5VHlwZSA9PT0gJ3N0cmluZycgfHwgcXVlcnlU
eXBlID09PSAnbnVtYmVyJykge1xuICAgIHF1ZXJ5ID0gcGFyc2VJbnQocXVlcnksIDEwKTtcbiAg
ICB0aGlzLnN0b3JhZ2UuZmluZCh7IGlkOiBxdWVyeSB9LCBjYWxsYmFjayk7XG4gIH0gZWxzZSB7
XG4gICAgdGhpcy5zdG9yYWdlLmZpbmQocXVlcnksIGNhbGxiYWNrKTtcbiAgfVxuICByZXR1cm4g
dW5kZWZpbmVkO1xufTtcblxuLyoqXG4qIFVwZGF0ZXMgYSBtb2RlbCBieSBnaXZpbmcgaXQgYW4g
SUQsIGRhdGEgdG8gdXBkYXRlLCBhbmQgYSBjYWxsYmFjayB0byBmaXJlIHdoZW5cbiogdGhlIHVw
ZGF0ZSBpcyBjb21wbGV0ZS5cbipcbiogQHBhcmFtIHtudW1iZXJ9IGlkIFRoZSBpZCBvZiB0aGUg
bW9kZWwgdG8gdXBkYXRlXG4qIEBwYXJhbSB7b2JqZWN0fSBkYXRhIFRoZSBwcm9wZXJ0aWVzIHRv
IHVwZGF0ZSBhbmQgdGhlaXIgbmV3IHZhbHVlXG4qIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNr
IFRoZSBjYWxsYmFjayB0byBmaXJlIHdoZW4gdGhlIHVwZGF0ZSBpcyBjb21wbGV0ZS5cbiovXG5N
b2RlbC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGlkLCBkYXRhLCBjYWxsYmFjaykge1xu
ICB0aGlzLnN0b3JhZ2Uuc2F2ZShkYXRhLCBjYWxsYmFjaywgaWQpO1xufTtcblxuLyoqXG4qIFJl
bW92ZXMgYSBtb2RlbCBmcm9tIHN0b3JhZ2VcbipcbiogQHBhcmFtIHtudW1iZXJ9IGlkIFRoZSBJ
RCBvZiB0aGUgbW9kZWwgdG8gcmVtb3ZlXG4qIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIFRo
ZSBjYWxsYmFjayB0byBmaXJlIHdoZW4gdGhlIHJlbW92YWwgaXMgY29tcGxldGUuXG4qL1xuTW9k
ZWwucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIChpZCwgY2FsbGJhY2spIHtcbiAgdGhpcy5z
dG9yYWdlLnJlbW92ZShpZCwgY2FsbGJhY2spO1xufTtcblxuLyoqXG4qIFdBUk5JTkc6IFdpbGwg
cmVtb3ZlIEFMTCBkYXRhIGZyb20gc3RvcmFnZS5cbipcbiogQHBhcmFtIHtmdW5jdGlvbn0gY2Fs
bGJhY2sgVGhlIGNhbGxiYWNrIHRvIGZpcmUgd2hlbiB0aGUgc3RvcmFnZSBpcyB3aXBlZC5cbiov
XG5Nb2RlbC5wcm90b3R5cGUucmVtb3ZlQWxsID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gIHRo
aXMuc3RvcmFnZS5kcm9wKGNhbGxiYWNrKTtcbn07XG5cbi8qKlxuKiBSZXR1cm5zIGEgY291bnQg
b2YgYWxsIHRvZG9zXG4qL1xuTW9kZWwucHJvdG90eXBlLmdldENvdW50ID0gZnVuY3Rpb24gKGNh
bGxiYWNrKSB7XG4gIHZhciB0b2RvcyA9IHtcbiAgICBhY3RpdmU6IDAsXG4gICAgY29tcGxldGVk
OiAwLFxuICAgIHRvdGFsOiAwXG4gIH07XG5cbiAgdGhpcy5zdG9yYWdlLmZpbmRBbGwoZnVuY3Rp
b24gKGRhdGEpIHtcbiAgICBkYXRhLmZvckVhY2goZnVuY3Rpb24gKHRvZG8pIHtcbiAgICAgIGlm
ICh0b2RvLmNvbXBsZXRlZCkge1xuICAgICAgICB0b2Rvcy5jb21wbGV0ZWQrKztcbiAgICAgIH0g
ZWxzZSB7XG4gICAgICAgIHRvZG9zLmFjdGl2ZSsrO1xuICAgICAgfVxuXG4gICAgICB0b2Rvcy50
b3RhbCsrO1xuICAgIH0pO1xuICAgIGNhbGxiYWNrKHRvZG9zKTtcbiAgfSk7XG59O1xuXG4vKioq
LyB9LFxuLyogNiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tf
cmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faGVscGVyc19fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygwKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX21lbW9yeV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcbi8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX21lbW9yeV9fX2RlZmF1bHQg
PSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19tZW1v
cnlfXyk7XG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBleHBvcnRzW1wiYVwiXSA9
IFN0b3JlO1xuXG52YXIgdW5pcXVlSUQgPSAxO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgY2xp
ZW50IHNpZGUgc3RvcmFnZSBvYmplY3QgYW5kIHdpbGwgY3JlYXRlIGFuIGVtcHR5XG4gKiBjb2xs
ZWN0aW9uIGlmIG5vIGNvbGxlY3Rpb24gYWxyZWFkeSBleGlzdHMuXG4gKlxuICogQHBhcmFtIHtz
dHJpbmd9IG5hbWUgVGhlIG5hbWUgb2Ygb3VyIERCIHdlIHdhbnQgdG8gdXNlXG4gKiBAcGFyYW0g
e2Z1bmN0aW9ufSBjYWxsYmFjayBPdXIgZmFrZSBEQiB1c2VzIGNhbGxiYWNrcyBiZWNhdXNlIGlu
XG4gKiByZWFsIGxpZmUgeW91IHByb2JhYmx5IHdvdWxkIGJlIG1ha2luZyBBSkFYIGNhbGxzXG4g
Ki9cbmZ1bmN0aW9uIFN0b3JlKG5hbWUsIGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrID0gY2FsbGJh
Y2sgfHwgZnVuY3Rpb24gKCkge307XG5cbiAgdGhpcy5fZGJOYW1lID0gbmFtZTtcblxuICBpZiAo
IV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fbWVtb3J5X19bbmFtZV0pIHtcbiAgICB2YXIg
ZGF0YSA9IHtcbiAgICAgIHRvZG9zOiBbXVxuICAgIH07XG5cbiAgICBfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX21lbW9yeV9fW25hbWVdID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gIH1c
blxuICBjYWxsYmFjay5jYWxsKHRoaXMsIEpTT04ucGFyc2UoX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19tZW1vcnlfX1tuYW1lXSkpO1xuICB0aGlzLnN1YnNjcmliZXJzID0gW107XG59XG5c
blN0b3JlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICB2
YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHRoaXMuc3Vic2NyaWJlcnMucHVzaChzdWJzY3JpYmVyKTtc
biAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXy5p
KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faGVscGVyc19fW1wiZlwiIC8qIHJlbW92ZSAq
L10pKF90aGlzLnN1YnNjcmliZXJzLCBzdWJzY3JpYmVyKTtcbiAgfTtcbn07XG5cblN0b3JlLnBy
b3RvdHlwZS5fbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLnN1YnNjcmliZXJzLmZvckVh
Y2goZnVuY3Rpb24gKHMpIHtcbiAgICByZXR1cm4gcygpO1xuICB9KTtcbn07XG5cbi8qKlxuKiBG
aW5kcyBpdGVtcyBiYXNlZCBvbiBhIHF1ZXJ5IGdpdmVuIGFzIGEgSlMgb2JqZWN0XG4qXG4qIEBw
YXJhbSB7b2JqZWN0fSBxdWVyeSBUaGUgcXVlcnkgdG8gbWF0Y2ggYWdhaW5zdCAoaS5lLiB7Zm9v
OiAnYmFyJ30pXG4qIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIHRv
IGZpcmUgd2hlbiB0aGUgcXVlcnkgaGFzXG4qIGNvbXBsZXRlZCBydW5uaW5nXG4qXG4qIEBleGFt
cGxlXG4qIGRiLmZpbmQoe2ZvbzogJ2JhcicsIGhlbGxvOiAnd29ybGQnfSwgZnVuY3Rpb24gKGRh
dGEpIHtcbiogICAvLyBkYXRhIHdpbGwgcmV0dXJuIGFueSBpdGVtcyB0aGF0IGhhdmUgZm9vOiBi
YXIgYW5kXG4qICAgLy8gaGVsbG86IHdvcmxkIGluIHRoZWlyIHByb3BlcnRpZXNcbiogfSk7XG4q
L1xuU3RvcmUucHJvdG90eXBlLmZpbmQgPSBmdW5jdGlvbiAocXVlcnksIGNhbGxiYWNrKSB7XG4g
IGlmICghY2FsbGJhY2spIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgdG9kb3MgPSBKU09O
LnBhcnNlKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fbWVtb3J5X19bdGhpcy5fZGJOYW1l
XSkudG9kb3M7XG5cbiAgY2FsbGJhY2suY2FsbCh0aGlzLCB0b2Rvcy5maWx0ZXIoZnVuY3Rpb24g
KHRvZG8pIHtcbiAgICBmb3IgKHZhciBxIGluIHF1ZXJ5KSB7XG4gICAgICBpZiAocXVlcnlbcV0g
IT09IHRvZG9bcV0pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAg
ICByZXR1cm4gdHJ1ZTtcbiAgfSkpO1xufTtcblxuLyoqXG4qIFdpbGwgcmV0cmlldmUgYWxsIGRh
dGEgZnJvbSB0aGUgY29sbGVjdGlvblxuKlxuKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBU
aGUgY2FsbGJhY2sgdG8gZmlyZSB1cG9uIHJldHJpZXZpbmcgZGF0YVxuKi9cblN0b3JlLnByb3Rv
dHlwZS5maW5kQWxsID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrID0gY2FsbGJh
Y2sgfHwgZnVuY3Rpb24gKCkge307XG4gIGNhbGxiYWNrLmNhbGwodGhpcywgSlNPTi5wYXJzZShf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX21lbW9yeV9fW3RoaXMuX2RiTmFtZV0pLnRvZG9z
KTtcbn07XG5cbi8qKlxuKiBXaWxsIHNhdmUgdGhlIGdpdmVuIGRhdGEgdG8gdGhlIERCLiBJZiBu
byBpdGVtIGV4aXN0cyBpdCB3aWxsIGNyZWF0ZSBhIG5ld1xuKiBpdGVtLCBvdGhlcndpc2UgaXQn
bGwgc2ltcGx5IHVwZGF0ZSBhbiBleGlzdGluZyBpdGVtJ3MgcHJvcGVydGllc1xuKlxuKiBAcGFy
YW0ge29iamVjdH0gdXBkYXRlRGF0YSBUaGUgZGF0YSB0byBzYXZlIGJhY2sgaW50byB0aGUgREJc
biogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGZpcmUgYWZ0ZXIg
c2F2aW5nXG4qIEBwYXJhbSB7bnVtYmVyfSBpZCBBbiBvcHRpb25hbCBwYXJhbSB0byBlbnRlciBh
biBJRCBvZiBhbiBpdGVtIHRvIHVwZGF0ZVxuKi9cblN0b3JlLnByb3RvdHlwZS5zYXZlID0gZnVu
Y3Rpb24gKHVwZGF0ZURhdGEsIGNhbGxiYWNrLCBpZCkge1xuICB2YXIgZGF0YSA9IEpTT04ucGFy
c2UoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19tZW1vcnlfX1t0aGlzLl9kYk5hbWVdKTtc
biAgdmFyIHRvZG9zID0gZGF0YS50b2RvcztcblxuICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1
bmN0aW9uICgpIHt9O1xuXG4gIC8vIElmIGFuIElEIHdhcyBhY3R1YWxseSBnaXZlbiwgZmluZCB0
aGUgaXRlbSBhbmQgdXBkYXRlIGVhY2ggcHJvcGVydHlcbiAgaWYgKGlkKSB7XG4gICAgZm9yICh2
YXIgaSA9IDA7IGkgPCB0b2Rvcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRvZG9zW2ldLmlk
ID09PSBpZCkge1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gdXBkYXRlRGF0YSkge1xuICAgICAg
ICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ3VhcmQtZm9yLWluXG4gICAgICAgICAgdG9kb3Nb
aV1ba2V5XSA9IHVwZGF0ZURhdGFba2V5XTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAg
ICAgIH1cbiAgICB9XG5cbiAgICBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX21lbW9yeV9f
W3RoaXMuX2RiTmFtZV0gPSBKU09OLnN0cmluZ2lmeShkYXRhKTtcbiAgICBjYWxsYmFjay5jYWxs
KHRoaXMsIEpTT04ucGFyc2UoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19tZW1vcnlfX1t0
aGlzLl9kYk5hbWVdKS50b2Rvcyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gR2VuZXJhdGUgYW4gSURc
biAgICB1cGRhdGVEYXRhLmlkID0gdW5pcXVlSUQrKztcblxuICAgIHRvZG9zLnB1c2godXBkYXRl
RGF0YSk7XG4gICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19tZW1vcnlfX1t0aGlzLl9k
Yk5hbWVdID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgY2FsbGJhY2suY2FsbCh0aGlzLCBb
dXBkYXRlRGF0YV0pO1xuICB9XG4gIHRoaXMuX25vdGlmeSgpO1xufTtcblxuLyoqXG4qIFdpbGwg
cmVtb3ZlIGFuIGl0ZW0gZnJvbSB0aGUgU3RvcmUgYmFzZWQgb24gaXRzIElEXG4qXG4qIEBwYXJh
bSB7bnVtYmVyfSBpZCBUaGUgSUQgb2YgdGhlIGl0ZW0geW91IHdhbnQgdG8gcmVtb3ZlXG4qIEBw
YXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBmaXJlIGFmdGVyIHNhdmlu
Z1xuKi9cblN0b3JlLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoaWQsIGNhbGxiYWNrKSB7
XG4gIHZhciBkYXRhID0gSlNPTi5wYXJzZShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX21l
bW9yeV9fW3RoaXMuX2RiTmFtZV0pO1xuICB2YXIgdG9kb3MgPSBkYXRhLnRvZG9zO1xuXG4gIGZv
ciAodmFyIGkgPSAwOyBpIDwgdG9kb3MubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAodG9kb3NbaV0u
aWQgPT09IGlkKSB7XG4gICAgICB0b2Rvcy5zcGxpY2UoaSwgMSk7XG4gICAgICBicmVhaztcbiAg
ICB9XG4gIH1cblxuICBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX21lbW9yeV9fW3RoaXMu
X2RiTmFtZV0gPSBKU09OLnN0cmluZ2lmeShkYXRhKTtcbiAgY2FsbGJhY2suY2FsbCh0aGlzLCBK
U09OLnBhcnNlKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fbWVtb3J5X19bdGhpcy5fZGJO
YW1lXSkudG9kb3MpO1xuICB0aGlzLl9ub3RpZnkoKTtcbn07XG5cbi8qKlxuKiBXaWxsIGRyb3Ag
YWxsIHN0b3JhZ2UgYW5kIHN0YXJ0IGZyZXNoXG4qXG4qIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxi
YWNrIFRoZSBjYWxsYmFjayB0byBmaXJlIGFmdGVyIGRyb3BwaW5nIHRoZSBkYXRhXG4qL1xuU3Rv
cmUucHJvdG90eXBlLmRyb3AgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19tZW1vcnlfX1t0aGlzLl9kYk5hbWVdID0gSlNPTi5zdHJpbmdpZnko
eyB0b2RvczogW10gfSk7XG4gIGNhbGxiYWNrLmNhbGwodGhpcywgSlNPTi5wYXJzZShfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX21lbW9yeV9fW3RoaXMuX2RiTmFtZV0pLnRvZG9zKTtcbiAg
dGhpcy5fbm90aWZ5KCk7XG59O1xuXG4vKioqLyB9LFxuLyogNyAqL1xuLyoqKi8gZnVuY3Rpb24o
bW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwi
O1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBleHBvcnRzW1wiYVwiXSA9IFRlbXBsYXRl
O1xuXG52YXIgaHRtbEVzY2FwZXMgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0Oycs
XG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgJ1xcJyc6ICcmI3gyNzsnLFxu
ICAnYCc6ICcmI3g2MDsnXG59O1xuXG52YXIgZXNjYXBlSHRtbENoYXIgPSBmdW5jdGlvbiBlc2Nh
cGVIdG1sQ2hhcihjaHIpIHtcbiAgcmV0dXJuIGh0bWxFc2NhcGVzW2Nocl07XG59O1xuXG52YXIg
cmVVbmVzY2FwZWRIdG1sID0gL1smPD5cIidgXS9nO1xudmFyIHJlSGFzVW5lc2NhcGVkSHRtbCA9
IG5ldyBSZWdFeHAocmVVbmVzY2FwZWRIdG1sLnNvdXJjZSk7XG5cbnZhciBlc2NhcGUgPSBmdW5j
dGlvbiBlc2NhcGUoc3RyaW5nKSB7XG4gIGlmIChzdHJpbmcgJiYgcmVIYXNVbmVzY2FwZWRIdG1s
LnRlc3Qoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmcucmVwbGFjZShyZVVuZXNjYXBlZEh0
bWwsIGVzY2FwZUh0bWxDaGFyKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc3RyaW5nO1xuICB9
XG59O1xuXG4vKipcbiogU2V0cyB1cCBkZWZhdWx0cyBmb3IgYWxsIHRoZSBUZW1wbGF0ZSBtZXRo
b2RzIHN1Y2ggYXMgYSBkZWZhdWx0IHRlbXBsYXRlXG4qXG4qIEBjb25zdHJ1Y3RvclxuKi9cbmZ1
bmN0aW9uIFRlbXBsYXRlKCkge1xuICB0aGlzLmRlZmF1bHRUZW1wbGF0ZSA9ICdcXG4gICAgPGxp
IGRhdGEtaWQ9XCJ7e2lkfX1cIiBjbGFzcz1cInt7Y29tcGxldGVkfX1cIj5cXG4gICAgICA8ZGl2
IGNsYXNzPVwidmlld1wiPlxcbiAgICAgICAgPGlucHV0IGNsYXNzPVwidG9nZ2xlXCIgdHlwZT1c
ImNoZWNrYm94XCIge3tjaGVja2VkfX0gLz5cXG4gICAgICAgIDxsYWJlbD57e3RpdGxlfX08L2xh
YmVsPlxcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRlc3Ryb3lcIj48L2J1dHRvbj5cXG4gICAg
ICA8L2Rpdj5cXG4gICAgPC9saT5cXG4gICc7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiA8bGk+
IEhUTUwgc3RyaW5nIGFuZCByZXR1cm5zIGl0IGZvciBwbGFjZW1lbnQgaW4geW91ciBhcHAuXG4g
KlxuICogTk9URTogSW4gcmVhbCBsaWZlIHlvdSBzaG91bGQgYmUgdXNpbmcgYSB0ZW1wbGF0aW5n
IGVuZ2luZSBzdWNoIGFzIE11c3RhY2hlXG4gKiBvciBIYW5kbGViYXJzLCBob3dldmVyLCB0aGlz
IGlzIGEgdmFuaWxsYSBKUyBleGFtcGxlLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBkYXRhIFRo
ZSBvYmplY3QgY29udGFpbmluZyBrZXlzIHlvdSB3YW50IHRvIGZpbmQgaW4gdGhlXG4gKiAgICAg
ICAgICAgICAgICAgICAgICB0ZW1wbGF0ZSB0byByZXBsYWNlLlxuICogQHJldHVybnMge3N0cmlu
Z30gSFRNTCBTdHJpbmcgb2YgYW4gPGxpPiBlbGVtZW50XG4gKlxuICogQGV4YW1wbGVcbiAqIHZp
ZXcuc2hvdyh7XG4gKiAgaWQ6IDEsXG4gKiAgdGl0bGU6IFwiSGVsbG8gV29ybGRcIixcbiAqICBj
b21wbGV0ZWQ6IDAsXG4gKiB9KTtcbiAqL1xuVGVtcGxhdGUucHJvdG90eXBlLnNob3cgPSBmdW5j
dGlvbiAoZGF0YSkge1xuICB2YXIgaSwgbDtcbiAgdmFyIHZpZXcgPSAnJztcblxuICBmb3IgKGkg
PSAwLCBsID0gZGF0YS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICB2YXIgdGVtcGxhdGUgPSB0
aGlzLmRlZmF1bHRUZW1wbGF0ZTtcbiAgICB2YXIgY29tcGxldGVkID0gJyc7XG4gICAgdmFyIGNo
ZWNrZWQgPSAnJztcblxuICAgIGlmIChkYXRhW2ldLmNvbXBsZXRlZCkge1xuICAgICAgY29tcGxl
dGVkID0gJ2NvbXBsZXRlZCc7XG4gICAgICBjaGVja2VkID0gJ2NoZWNrZWQnO1xuICAgIH1cblxu
ICAgIHRlbXBsYXRlID0gdGVtcGxhdGUucmVwbGFjZSgne3tpZH19JywgZGF0YVtpXS5pZCk7XG4g
ICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZS5yZXBsYWNlKCd7e3RpdGxlfX0nLCBlc2NhcGUoZGF0YVtp
XS50aXRsZSkpO1xuICAgIHRlbXBsYXRlID0gdGVtcGxhdGUucmVwbGFjZSgne3tjb21wbGV0ZWR9
fScsIGNvbXBsZXRlZCk7XG4gICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZS5yZXBsYWNlKCd7e2NoZWNr
ZWR9fScsIGNoZWNrZWQpO1xuXG4gICAgdmlldyA9IHZpZXcgKyB0ZW1wbGF0ZTtcbiAgfVxuXG4g
IHJldHVybiB2aWV3O1xufTtcblxuLyoqXG4gKiBEaXNwbGF5cyBhIGNvdW50ZXIgb2YgaG93IG1h
bnkgdG8gZG9zIGFyZSBsZWZ0IHRvIGNvbXBsZXRlXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFj
dGl2ZVRvZG9zIFRoZSBudW1iZXIgb2YgYWN0aXZlIHRvZG9zLlxuICogQHJldHVybnMge3N0cmlu
Z30gU3RyaW5nIGNvbnRhaW5pbmcgdGhlIGNvdW50XG4gKi9cblRlbXBsYXRlLnByb3RvdHlwZS5p
dGVtQ291bnRlciA9IGZ1bmN0aW9uIChhY3RpdmVUb2Rvcykge1xuICB2YXIgcGx1cmFsID0gYWN0
aXZlVG9kb3MgPT09IDEgPyAnJyA6ICdzJztcblxuICByZXR1cm4gJzxzdHJvbmc+JyArIGFjdGl2
ZVRvZG9zICsgJzwvc3Ryb25nPiBpdGVtJyArIHBsdXJhbCArICcgbGVmdCc7XG59O1xuXG4vKipc
biAqIFVwZGF0ZXMgdGhlIHRleHQgd2l0aGluIHRoZSBcIkNsZWFyIGNvbXBsZXRlZFwiIGJ1dHRv
blxuICpcbiAqIEBwYXJhbSAge1t0eXBlXX0gY29tcGxldGVkVG9kb3MgVGhlIG51bWJlciBvZiBj
b21wbGV0ZWQgdG9kb3MuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBTdHJpbmcgY29udGFpbmluZyB0
aGUgY291bnRcbiAqL1xuVGVtcGxhdGUucHJvdG90eXBlLmNsZWFyQ29tcGxldGVkQnV0dG9uID0g
ZnVuY3Rpb24gKGNvbXBsZXRlZFRvZG9zKSB7XG4gIGlmIChjb21wbGV0ZWRUb2RvcyA+IDApIHtc
biAgICByZXR1cm4gJ0NsZWFyIGNvbXBsZXRlZCc7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICcn
O1xuICB9XG59O1xuXG4vKioqLyB9LFxuLyogOCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBl
eHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fdmlld19fID0g
X193ZWJwYWNrX3JlcXVpcmVfXyg5KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX2NvbnRyb2xsZXJfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
Myk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19tb2RlbF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3N0b3JlX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKDYpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNF9fdGVtcGxhdGVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XG4vKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19oZWxwZXJzX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG4vKiBoYXJtb255IGV4cG9ydCAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoZXhwb3J0cywgXCJhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdXBkYXRlVG9k
bzsgfSk7LyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IGdldFRvZG8gKi8vKiB1bnVzZWQgaGFybW9u
eSBleHBvcnQgc3Vic2NyaWJlICovXG5cblxuXG5cblxuXG5cblxudmFyIHRvZG8gPSB2b2lkIDA7
XG52YXIgc3Vic2NyaWJlcnMgPSBbXTtcblxuLyoqXG4gKiBTZXRzIHVwIGEgYnJhbmQgbmV3IFRv
ZG8gbGlzdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB5b3VyIG5l
dyB0byBkbyBsaXN0LlxuICovXG5mdW5jdGlvbiBUb2RvKG5hbWUpIHtcbiAgdGhpcy5zdG9yYWdl
ID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fc3RvcmVfX1tcImFcIiAvKiBkZWZh
dWx0ICovXShuYW1lKTtcbiAgdGhpcy5tb2RlbCA9IG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX21vZGVsX19bXCJhXCIgLyogZGVmYXVsdCAqL10odGhpcy5zdG9yYWdlKTtcbiAgdGhp
cy50ZW1wbGF0ZSA9IG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3RlbXBsYXRlX19b
XCJhXCIgLyogZGVmYXVsdCAqL10oKTtcbiAgdGhpcy52aWV3ID0gbmV3IF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fdmlld19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKHRoaXMudGVtcGxhdGUp
O1xuICB0aGlzLmNvbnRyb2xsZXIgPSBuZXcgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19j
b250cm9sbGVyX19bXCJhXCIgLyogZGVmYXVsdCAqL10odGhpcy5tb2RlbCwgdGhpcy52aWV3KTtc
bn1cblxuZnVuY3Rpb24gdXBkYXRlVG9kbygpIHtcbiAgdG9kbyA9IG5ldyBUb2RvKCd0b2Rvcy12
YW5pbGxhanMnKTtcbiAgdG9kby5jb250cm9sbGVyLnNldFZpZXcoZG9jdW1lbnQubG9jYXRpb24u
aGFzaCk7XG4gIHN1YnNjcmliZXJzLmZvckVhY2goZnVuY3Rpb24gKHMpIHtcbiAgICByZXR1cm4g
cygpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0VG9kbygpIHtcbiAgcmV0dXJuIHRvZG87XG59
XG5cbmZ1bmN0aW9uIHN1YnNjcmliZShjYikge1xuICBzdWJzY3JpYmVycy5wdXNoKGNiKTtcbiAg
cmV0dXJuIGZ1bmN0aW9uIHVuc3Vic2NyaWJlKCkge1xuICAgIF9fd2VicGFja19yZXF1aXJlX18u
aShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2hlbHBlcnNfX1tcImZcIiAvKiByZW1vdmUg
Ki9dKShzdWJzY3JpYmVycywgY2IpO1xuICB9O1xufVxuXG4vKioqLyB9LFxuLyogOSAqL1xuLyoq
Ki8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwi
dXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9faGVscGVyc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciBfY3Jl
YXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0
LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBk
ZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3Iu
ZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAo
XCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0g
fSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykg
eyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUs
IHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0
b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XG5cbmZ1bmN0aW9u
IF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2Ug
aW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBj
YWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbi8qIGVzbGludCBuby1pbnZhbGlk
LXRoaXM6IDAsIGNvbXBsZXhpdHk6WzIsIDldICovXG5cblxuLyoqXG4gKiBWaWV3IHRoYXQgYWJz
dHJhY3RzIGF3YXkgdGhlIGJyb3dzZXIncyBET00gY29tcGxldGVseS5cbiAqIEl0IGhhcyB0d28g
c2ltcGxlIGVudHJ5IHBvaW50czpcbiAqXG4gKiAgIC0gYmluZChldmVudE5hbWUsIGhhbmRsZXIp
XG4gKiAgICAgVGFrZXMgYSB0b2RvIGFwcGxpY2F0aW9uIGV2ZW50IGFuZCByZWdpc3RlcnMgdGhl
IGhhbmRsZXJcbiAqICAgLSByZW5kZXIoY29tbWFuZCwgcGFyYW1ldGVyT2JqZWN0KVxuICogICAg
IFJlbmRlcnMgdGhlIGdpdmVuIGNvbW1hbmQgd2l0aCB0aGUgb3B0aW9uc1xuICovXG5cbnZhciBW
aWV3ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBWaWV3KHRlbXBsYXRlKSB7XG4gICAgX2Ns
YXNzQ2FsbENoZWNrKHRoaXMsIFZpZXcpO1xuXG4gICAgdGhpcy50ZW1wbGF0ZSA9IHRlbXBsYXRl
O1xuXG4gICAgdGhpcy5FTlRFUl9LRVkgPSAxMztcbiAgICB0aGlzLkVTQ0FQRV9LRVkgPSAyNztc
blxuICAgIHRoaXMuJHRvZG9MaXN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5pKF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9faGVscGVyc19fW1wiYVwiIC8qIHFzICovXSkoJy50b2RvLWxpc3Qn
KTtcbiAgICB0aGlzLiR0b2RvSXRlbUNvdW50ZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmkoX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19oZWxwZXJzX19bXCJhXCIgLyogcXMgKi9dKSgnLnRv
ZG8tY291bnQnKTtcbiAgICB0aGlzLiRjbGVhckNvbXBsZXRlZCA9IF9fd2VicGFja19yZXF1aXJl
X18uaShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2hlbHBlcnNfX1tcImFcIiAvKiBxcyAq
L10pKCcuY2xlYXItY29tcGxldGVkJyk7XG4gICAgdGhpcy4kbWFpbiA9IF9fd2VicGFja19yZXF1
aXJlX18uaShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2hlbHBlcnNfX1tcImFcIiAvKiBx
cyAqL10pKCcubWFpbicpO1xuICAgIHRoaXMuJGZvb3RlciA9IF9fd2VicGFja19yZXF1aXJlX18u
aShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2hlbHBlcnNfX1tcImFcIiAvKiBxcyAqL10p
KCcuZm9vdGVyJyk7XG4gICAgdGhpcy4kdG9nZ2xlQWxsID0gX193ZWJwYWNrX3JlcXVpcmVfXy5p
KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faGVscGVyc19fW1wiYVwiIC8qIHFzICovXSko
Jy50b2dnbGUtYWxsJyk7XG4gICAgdGhpcy4kbmV3VG9kbyA9IF9fd2VicGFja19yZXF1aXJlX18u
aShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2hlbHBlcnNfX1tcImFcIiAvKiBxcyAqL10p
KCcubmV3LXRvZG8nKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhWaWV3LCBbe1xuICAgIGtleTog
J19yZW1vdmVJdGVtJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3JlbW92ZUl0ZW0oaWQpIHtcbiAg
ICAgIHZhciBlbGVtID0gX193ZWJwYWNrX3JlcXVpcmVfXy5pKF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9faGVscGVyc19fW1wiYVwiIC8qIHFzICovXSkoJ1tkYXRhLWlkPVwiJyArIGlkICsg
J1wiXScpO1xuXG4gICAgICBpZiAoZWxlbSkge1xuICAgICAgICB0aGlzLiR0b2RvTGlzdC5yZW1v
dmVDaGlsZChlbGVtKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfY2xlYXJD
b21wbGV0ZWRCdXR0b24nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfY2xlYXJDb21wbGV0ZWRCdXR0
b24oY29tcGxldGVkQ291bnQsIHZpc2libGUpIHtcbiAgICAgIHRoaXMuJGNsZWFyQ29tcGxldGVk
LmlubmVySFRNTCA9IHRoaXMudGVtcGxhdGUuY2xlYXJDb21wbGV0ZWRCdXR0b24oY29tcGxldGVk
Q291bnQpO1xuICAgICAgdGhpcy4kY2xlYXJDb21wbGV0ZWQuc3R5bGUuZGlzcGxheSA9IHZpc2li
bGUgPyAnYmxvY2snIDogJ25vbmUnO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ19lZGl0SXRl
bURvbmUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZWRpdEl0ZW1Eb25lKGlkLCB0aXRsZSkge1xu
ICAgICAgdmFyIGxpc3RJdGVtID0gX193ZWJwYWNrX3JlcXVpcmVfXy5pKF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9faGVscGVyc19fW1wiYVwiIC8qIHFzICovXSkoJ1tkYXRhLWlkPVwiJyAr
IGlkICsgJ1wiXScpO1xuXG4gICAgICBpZiAoIWxpc3RJdGVtKSB7XG4gICAgICAgIHJldHVybjtc
biAgICAgIH1cblxuICAgICAgdmFyIGlucHV0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5pKF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faGVscGVyc19fW1wiYVwiIC8qIHFzICovXSkoJ2lucHV0
LmVkaXQnLCBsaXN0SXRlbSk7XG4gICAgICBsaXN0SXRlbS5yZW1vdmVDaGlsZChpbnB1dCk7XG5c
biAgICAgIGxpc3RJdGVtLmNsYXNzTmFtZSA9IGxpc3RJdGVtLmNsYXNzTmFtZS5yZXBsYWNlKCdl
ZGl0aW5nJywgJycpO1xuXG4gICAgICBfX3dlYnBhY2tfcmVxdWlyZV9fLmkoX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19oZWxwZXJzX19bXCJiXCIgLyogcXNhICovXSkoJ2xhYmVsJywgbGlz
dEl0ZW0pLmZvckVhY2goZnVuY3Rpb24gKGxhYmVsKSB7XG4gICAgICAgIGxhYmVsLnRleHRDb250
ZW50ID0gdGl0bGU7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdyZW5kZXIn
LFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIodmlld0NtZCwgcGFyYW1ldGVyKSB7XG4gICAg
ICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICB2YXIgdmlld0NvbW1hbmRzID0ge1xuICAgICAgICBz
aG93RW50cmllczogZnVuY3Rpb24gc2hvd0VudHJpZXMoKSB7XG4gICAgICAgICAgdGhhdC4kdG9k
b0xpc3QuaW5uZXJIVE1MID0gdGhhdC50ZW1wbGF0ZS5zaG93KHBhcmFtZXRlcik7XG4gICAgICAg
IH0sXG4gICAgICAgIHJlbW92ZUl0ZW06IGZ1bmN0aW9uIHJlbW92ZUl0ZW0oKSB7XG4gICAgICAg
ICAgdGhhdC5fcmVtb3ZlSXRlbShwYXJhbWV0ZXIpO1xuICAgICAgICB9LFxuICAgICAgICB1cGRh
dGVFbGVtZW50Q291bnQ6IGZ1bmN0aW9uIHVwZGF0ZUVsZW1lbnRDb3VudCgpIHtcbiAgICAgICAg
ICB0aGF0LiR0b2RvSXRlbUNvdW50ZXIuaW5uZXJIVE1MID0gdGhhdC50ZW1wbGF0ZS5pdGVtQ291
bnRlcihwYXJhbWV0ZXIpO1xuICAgICAgICB9LFxuICAgICAgICBjbGVhckNvbXBsZXRlZEJ1dHRv
bjogZnVuY3Rpb24gY2xlYXJDb21wbGV0ZWRCdXR0b24oKSB7XG4gICAgICAgICAgdGhhdC5fY2xl
YXJDb21wbGV0ZWRCdXR0b24ocGFyYW1ldGVyLmNvbXBsZXRlZCwgcGFyYW1ldGVyLnZpc2libGUp
O1xuICAgICAgICB9LFxuICAgICAgICBjb250ZW50QmxvY2tWaXNpYmlsaXR5OiBmdW5jdGlvbiBj
b250ZW50QmxvY2tWaXNpYmlsaXR5KCkge1xuICAgICAgICAgIHRoYXQuJG1haW4uc3R5bGUuZGlz
cGxheSA9IHRoYXQuJGZvb3Rlci5zdHlsZS5kaXNwbGF5ID0gcGFyYW1ldGVyLnZpc2libGUgPyAn
YmxvY2snIDogJ25vbmUnO1xuICAgICAgICB9LFxuICAgICAgICB0b2dnbGVBbGw6IGZ1bmN0aW9u
IHRvZ2dsZUFsbCgpIHtcbiAgICAgICAgICB0aGF0LiR0b2dnbGVBbGwuY2hlY2tlZCA9IHBhcmFt
ZXRlci5jaGVja2VkO1xuICAgICAgICB9LFxuICAgICAgICBzZXRGaWx0ZXI6IGZ1bmN0aW9uIHNl
dEZpbHRlcigpIHtcbiAgICAgICAgICBfc2V0RmlsdGVyKHBhcmFtZXRlcik7XG4gICAgICAgIH0s
XG4gICAgICAgIGNsZWFyTmV3VG9kbzogZnVuY3Rpb24gY2xlYXJOZXdUb2RvKCkge1xuICAgICAg
ICAgIHRoYXQuJG5ld1RvZG8udmFsdWUgPSAnJztcbiAgICAgICAgfSxcbiAgICAgICAgZWxlbWVu
dENvbXBsZXRlOiBmdW5jdGlvbiBlbGVtZW50Q29tcGxldGUoKSB7XG4gICAgICAgICAgX2VsZW1l
bnRDb21wbGV0ZShwYXJhbWV0ZXIuaWQsIHBhcmFtZXRlci5jb21wbGV0ZWQpO1xuICAgICAgICB9
LFxuICAgICAgICBlZGl0SXRlbTogZnVuY3Rpb24gZWRpdEl0ZW0oKSB7XG4gICAgICAgICAgX2Vk
aXRJdGVtKHBhcmFtZXRlci5pZCwgcGFyYW1ldGVyLnRpdGxlKTtcbiAgICAgICAgfSxcbiAgICAg
ICAgZWRpdEl0ZW1Eb25lOiBmdW5jdGlvbiBlZGl0SXRlbURvbmUoKSB7XG4gICAgICAgICAgdGhh
dC5fZWRpdEl0ZW1Eb25lKHBhcmFtZXRlci5pZCwgcGFyYW1ldGVyLnRpdGxlKTtcbiAgICAgICAg
fVxuICAgICAgfTtcblxuICAgICAgdmlld0NvbW1hbmRzW3ZpZXdDbWRdKCk7XG4gICAgfVxuICB9
LCB7XG4gICAga2V5OiAnX2JpbmRJdGVtRWRpdERvbmUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBf
YmluZEl0ZW1FZGl0RG9uZShoYW5kbGVyKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAg
ICBfX3dlYnBhY2tfcmVxdWlyZV9fLmkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19oZWxw
ZXJzX19bXCJjXCIgLyogJGRlbGVnYXRlICovXSkodGhhdC4kdG9kb0xpc3QsICdsaSAuZWRpdCcs
ICdibHVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuZGF0YXNldC5pc2NhbmNl
bGVkKSB7XG4gICAgICAgICAgaGFuZGxlcih7XG4gICAgICAgICAgICBpZDogX2l0ZW1JZCh0aGlz
KSxcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLnZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAg
IH1cbiAgICAgIH0pO1xuXG4gICAgICBfX3dlYnBhY2tfcmVxdWlyZV9fLmkoX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19oZWxwZXJzX19bXCJjXCIgLyogJGRlbGVnYXRlICovXSkodGhhdC4k
dG9kb0xpc3QsICdsaSAuZWRpdCcsICdrZXlwcmVzcycsIGZ1bmN0aW9uIChldmVudCkge1xuICAg
ICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gdGhhdC5FTlRFUl9LRVkpIHtcbiAgICAgICAgICAv
LyBSZW1vdmUgdGhlIGN1cnNvciBmcm9tIHRoZSBpbnB1dCB3aGVuIHlvdSBoaXQgZW50ZXIganVz
dCBsaWtlIGlmIGl0XG4gICAgICAgICAgLy8gd2VyZSBhIHJlYWwgZm9ybVxuICAgICAgICAgIHRo
aXMuYmx1cigpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6
ICdfYmluZEl0ZW1FZGl0Q2FuY2VsJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2JpbmRJdGVtRWRp
dENhbmNlbChoYW5kbGVyKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19oZWxwZXJzX19bXCJj
XCIgLyogJGRlbGVnYXRlICovXSkodGhhdC4kdG9kb0xpc3QsICdsaSAuZWRpdCcsICdrZXl1cCcs
IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gdGhhdC5F
U0NBUEVfS0VZKSB7XG4gICAgICAgICAgdGhpcy5kYXRhc2V0LmlzY2FuY2VsZWQgPSB0cnVlO1xu
ICAgICAgICAgIHRoaXMuYmx1cigpO1xuXG4gICAgICAgICAgaGFuZGxlcih7IGlkOiBfaXRlbUlk
KHRoaXMpIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6
ICdiaW5kJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gYmluZChldmVudCwgaGFuZGxlcikge1xuICAg
ICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgaWYgKGV2ZW50ID09PSAnbmV3VG9kbycpIHtcbiAg
ICAgICAgX193ZWJwYWNrX3JlcXVpcmVfXy5pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
aGVscGVyc19fW1wiZFwiIC8qICRvbiAqL10pKHRoYXQuJG5ld1RvZG8sICdjaGFuZ2UnLCBmdW5j
dGlvbiAoKSB7XG4gICAgICAgICAgaGFuZGxlcih0aGF0LiRuZXdUb2RvLnZhbHVlKTtcbiAgICAg
ICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50ID09PSAncmVtb3ZlQ29tcGxldGVkJykge1xu
ICAgICAgICBfX3dlYnBhY2tfcmVxdWlyZV9fLmkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19oZWxwZXJzX19bXCJkXCIgLyogJG9uICovXSkodGhhdC4kY2xlYXJDb21wbGV0ZWQsICdjbGlj
aycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBoYW5kbGVyKCk7XG4gICAgICAgIH0pO1xuICAg
ICAgfSBlbHNlIGlmIChldmVudCA9PT0gJ3RvZ2dsZUFsbCcpIHtcbiAgICAgICAgX193ZWJwYWNr
X3JlcXVpcmVfXy5pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faGVscGVyc19fW1wiZFwi
IC8qICRvbiAqL10pKHRoYXQuJHRvZ2dsZUFsbCwgJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xuICAg
ICAgICAgIGhhbmRsZXIoeyBjb21wbGV0ZWQ6IHRoaXMuY2hlY2tlZCB9KTtcbiAgICAgICAgfSk7
XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50ID09PSAnaXRlbUVkaXQnKSB7XG4gICAgICAgIF9fd2Vi
cGFja19yZXF1aXJlX18uaShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2hlbHBlcnNfX1tc
ImNcIiAvKiAkZGVsZWdhdGUgKi9dKSh0aGF0LiR0b2RvTGlzdCwgJ2xpIGxhYmVsJywgJ2RibGNs
aWNrJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGhhbmRsZXIoeyBpZDogX2l0ZW1JZCh0aGlz
KSB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50ID09PSAnaXRlbVJlbW92
ZScpIHtcbiAgICAgICAgX193ZWJwYWNrX3JlcXVpcmVfXy5pKF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9faGVscGVyc19fW1wiY1wiIC8qICRkZWxlZ2F0ZSAqL10pKHRoYXQuJHRvZG9MaXN0
LCAnLmRlc3Ryb3knLCAnY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaGFuZGxlcih7
IGlkOiBfaXRlbUlkKHRoaXMpIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoZXZl
bnQgPT09ICdpdGVtVG9nZ2xlJykge1xuICAgICAgICBfX3dlYnBhY2tfcmVxdWlyZV9fLmkoX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19oZWxwZXJzX19bXCJjXCIgLyogJGRlbGVnYXRlICov
XSkodGhhdC4kdG9kb0xpc3QsICcudG9nZ2xlJywgJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xuICAg
ICAgICAgIGhhbmRsZXIoe1xuICAgICAgICAgICAgaWQ6IF9pdGVtSWQodGhpcyksXG4gICAgICAg
ICAgICBjb21wbGV0ZWQ6IHRoaXMuY2hlY2tlZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtc
biAgICAgIH0gZWxzZSBpZiAoZXZlbnQgPT09ICdpdGVtRWRpdERvbmUnKSB7XG4gICAgICAgIHRo
YXQuX2JpbmRJdGVtRWRpdERvbmUoaGFuZGxlcik7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50ID09
PSAnaXRlbUVkaXRDYW5jZWwnKSB7XG4gICAgICAgIHRoYXQuX2JpbmRJdGVtRWRpdENhbmNlbCho
YW5kbGVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gVmlldztcbn0oKTtc
blxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBleHBvcnRzW1wiYVwiXSA9IFZpZXc7XG5c
blxuZnVuY3Rpb24gX3NldEZpbHRlcihjdXJyZW50UGFnZSkge1xuICBfX3dlYnBhY2tfcmVxdWly
ZV9fLmkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19oZWxwZXJzX19bXCJhXCIgLyogcXMg
Ki9dKSgnLmZpbHRlcnMgLnNlbGVjdGVkJykuY2xhc3NOYW1lID0gJyc7XG4gIF9fd2VicGFja19y
ZXF1aXJlX18uaShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2hlbHBlcnNfX1tcImFcIiAv
KiBxcyAqL10pKCcuZmlsdGVycyBbaHJlZj1cIiMvJyArIGN1cnJlbnRQYWdlICsgJ1wiXScpLmNs
YXNzTmFtZSA9ICdzZWxlY3RlZCc7XG59XG5cbmZ1bmN0aW9uIF9lbGVtZW50Q29tcGxldGUoaWQs
IGNvbXBsZXRlZCkge1xuICB2YXIgbGlzdEl0ZW0gPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmkoX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19oZWxwZXJzX19bXCJhXCIgLyogcXMgKi9dKSgnW2Rh
dGEtaWQ9XCInICsgaWQgKyAnXCJdJyk7XG5cbiAgaWYgKCFsaXN0SXRlbSkge1xuICAgIHJldHVy
bjtcbiAgfVxuXG4gIGxpc3RJdGVtLmNsYXNzTmFtZSA9IGNvbXBsZXRlZCA/ICdjb21wbGV0ZWQn
IDogJyc7XG5cbiAgLy8gSW4gY2FzZSBpdCB3YXMgdG9nZ2xlZCBmcm9tIGFuIGV2ZW50IGFuZCBu
b3QgYnkgY2xpY2tpbmcgdGhlIGNoZWNrYm94XG4gIF9fd2VicGFja19yZXF1aXJlX18uaShfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2hlbHBlcnNfX1tcImFcIiAvKiBxcyAqL10pKCdpbnB1
dCcsIGxpc3RJdGVtKS5jaGVja2VkID0gY29tcGxldGVkO1xufVxuXG5mdW5jdGlvbiBfZWRpdEl0
ZW0oaWQsIHRpdGxlKSB7XG4gIHZhciBsaXN0SXRlbSA9IF9fd2VicGFja19yZXF1aXJlX18uaShf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2hlbHBlcnNfX1tcImFcIiAvKiBxcyAqL10pKCdb
ZGF0YS1pZD1cIicgKyBpZCArICdcIl0nKTtcblxuICBpZiAoIWxpc3RJdGVtKSB7XG4gICAgcmV0
dXJuO1xuICB9XG5cbiAgbGlzdEl0ZW0uY2xhc3NOYW1lID0gbGlzdEl0ZW0uY2xhc3NOYW1lICsg
JyBlZGl0aW5nJztcblxuICB2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1
dCcpO1xuICBpbnB1dC5jbGFzc05hbWUgPSAnZWRpdCc7XG5cbiAgbGlzdEl0ZW0uYXBwZW5kQ2hp
bGQoaW5wdXQpO1xuICBpbnB1dC5mb2N1cygpO1xuICBpbnB1dC52YWx1ZSA9IHRpdGxlO1xufVxu
XG5mdW5jdGlvbiBfaXRlbUlkKGVsZW1lbnQpIHtcbiAgdmFyIGxpID0gX193ZWJwYWNrX3JlcXVp
cmVfXy5pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faGVscGVyc19fW1wiZVwiIC8qICRw
YXJlbnQgKi9dKShlbGVtZW50LCAnbGknKTtcbiAgcmV0dXJuIHBhcnNlSW50KGxpLmRhdGFzZXQu
aWQsIDEwKTtcbn1cblxuLyoqKi8gfSxcbi8qIDEwICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUs
IGV4cG9ydHMpIHtcblxuLy8gcmVtb3ZlZCBieSBleHRyYWN0LXRleHQtd2VicGFjay1wbHVnaW5c
blxuLyoqKi8gfSxcbi8qIDExICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9f
d2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hcHBfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oMik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19oZWxwZXJzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyogZXNsaW50
IG5vLWNvbnNvbGU6MCAqL1xuXG5cblxuLy8gdGhpcyBpcyBvbmx5IHJlbGV2YW50IHdoZW4gdXNp
bmcgYGhvdGAgbW9kZSB3aXRoIHdlYnBhY2tcbi8vIHNwZWNpYWwgdGhhbmtzIHRvIEVyaWMgQ2xl
bW1vbnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9lcmljY2xlbW1vbnMvd2VicGFjay1ob3Qtc2VydmVy
LWV4YW1wbGVcbnZhciByZWxvYWRpbmcgPSBkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnY29tcGxl
dGUnO1xuaWYgKGZhbHNlKSB7XG4gIG1vZHVsZS5ob3QuYWNjZXB0KGZ1bmN0aW9uIChlcnIpIHt9
KTtcbiAgaWYgKHJlbG9hZGluZykge1xuICAgIG9uTG9hZCgpO1xuICB9IGVsc2Uge1xuICAgIGJv
b3RzdHJhcCgpO1xuICB9XG59IGVsc2Uge1xuICBib290c3RyYXAoKTtcbn1cblxuZnVuY3Rpb24g
Ym9vdHN0cmFwKCkge1xuICBfX3dlYnBhY2tfcmVxdWlyZV9fLmkoX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19oZWxwZXJzX19bXCJkXCIgLyogJG9uICovXSkod2luZG93LCAnbG9hZCcsIF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXBwX19bXCJhXCIgLyogb25Mb2FkICovXSk7XG4g
IF9fd2VicGFja19yZXF1aXJlX18uaShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2hlbHBl
cnNfX1tcImRcIiAvKiAkb24gKi9dKSh3aW5kb3csICdoYXNoY2hhbmdlJywgX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19hcHBfX1tcImFcIiAvKiBvbkxvYWQgKi9dKTtcbn1cblxuLyoqKi8g
fVxuXSxbMTFdKTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gYnVuZGxlLmFwcC45MzBh
ZDhiODMxMjY4NjJkNzQ0NS5qcyIsImV4cG9ydCB7cXMsIHFzYSwgJG9uLCAkZGVsZWdhdGUsICRw
YXJlbnQsIHJlbW92ZX1cblxuLy8gR2V0IGVsZW1lbnQocykgYnkgQ1NTIHNlbGVjdG9yOlxuZnVu
Y3Rpb24gcXMoc2VsZWN0b3IsIHNjb3BlKSB7XG4gIHJldHVybiAoc2NvcGUgfHwgZG9jdW1lbnQp
LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpXG59XG5cbmZ1bmN0aW9uIHFzYShzZWxlY3Rvciwgc2Nv
cGUpIHtcbiAgcmV0dXJuIChzY29wZSB8fCBkb2N1bWVudCkucXVlcnlTZWxlY3RvckFsbChzZWxl
Y3Rvcilcbn1cblxuLy8gYWRkRXZlbnRMaXN0ZW5lciB3cmFwcGVyOlxuZnVuY3Rpb24gJG9uKHRh
cmdldCwgdHlwZSwgY2FsbGJhY2ssIHVzZUNhcHR1cmUpIHtcbiAgdGFyZ2V0LmFkZEV2ZW50TGlz
dGVuZXIodHlwZSwgY2FsbGJhY2ssICEhdXNlQ2FwdHVyZSlcbn1cblxuLy8gQXR0YWNoIGEgaGFu
ZGxlciB0byBldmVudCBmb3IgYWxsIGVsZW1lbnRzIHRoYXQgbWF0Y2ggdGhlIHNlbGVjdG9yLFxu
Ly8gbm93IG9yIGluIHRoZSBmdXR1cmUsIGJhc2VkIG9uIGEgcm9vdCBlbGVtZW50XG5mdW5jdGlv
biAkZGVsZWdhdGUodGFyZ2V0LCBzZWxlY3RvciwgdHlwZSwgaGFuZGxlcikge1xuICAvLyBodHRw
czovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9FdmVudHMvYmx1clxuICB2
YXIgdXNlQ2FwdHVyZSA9IHR5cGUgPT09ICdibHVyJyB8fCB0eXBlID09PSAnZm9jdXMnXG4gICRv
bih0YXJnZXQsIHR5cGUsIGRpc3BhdGNoRXZlbnQsIHVzZUNhcHR1cmUpXG5cbiAgZnVuY3Rpb24g
ZGlzcGF0Y2hFdmVudChldmVudCkge1xuICAgIHZhciB0YXJnZXRFbGVtZW50ID0gZXZlbnQudGFy
Z2V0XG4gICAgdmFyIHBvdGVudGlhbEVsZW1lbnRzID0gcXNhKHNlbGVjdG9yLCB0YXJnZXQpXG4g
ICAgdmFyIGhhc01hdGNoID0gQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChwb3RlbnRpYWxF
bGVtZW50cywgdGFyZ2V0RWxlbWVudCkgPj0gMFxuXG4gICAgaWYgKGhhc01hdGNoKSB7XG4gICAg
ICBoYW5kbGVyLmNhbGwodGFyZ2V0RWxlbWVudCwgZXZlbnQpXG4gICAgfVxuICB9XG59XG5cbi8v
IEZpbmQgdGhlIGVsZW1lbnQncyBwYXJlbnQgd2l0aCB0aGUgZ2l2ZW4gdGFnIG5hbWU6XG4vLyAk
cGFyZW50KHFzKCdhJyksICdkaXYnKTtcbmZ1bmN0aW9uICRwYXJlbnQoZWxlbWVudCwgdGFnTmFt
ZSkge1xuICBpZiAoIWVsZW1lbnQucGFyZW50Tm9kZSkge1xuICAgIHJldHVybiB1bmRlZmluZWRc
biAgfVxuICBpZiAoZWxlbWVudC5wYXJlbnROb2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0g
dGFnTmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQucGFyZW50Tm9kZVxu
ICB9XG4gIHJldHVybiAkcGFyZW50KGVsZW1lbnQucGFyZW50Tm9kZSwgdGFnTmFtZSlcbn1cblxu
Ly8gcmVtb3ZlcyBhbiBlbGVtZW50IGZyb20gYW4gYXJyYXlcbi8vIGNvbnN0IHggPSBbMSwyLDNd
XG4vLyByZW1vdmUoeCwgMilcbi8vIHggfj09IFsxLDNdXG5mdW5jdGlvbiByZW1vdmUoYXJyYXks
IHRoaW5nKSB7XG4gIGNvbnN0IGluZGV4ID0gYXJyYXkuaW5kZXhPZih0aGluZylcbiAgaWYgKGlu
ZGV4ID09PSAtMSkge1xuICAgIHJldHVybiBhcnJheVxuICB9XG4gIGFycmF5LnNwbGljZShpbmRl
eCwgMSlcbn1cblxuLy8gQWxsb3cgZm9yIGxvb3Bpbmcgb24gbm9kZXMgYnkgY2hhaW5pbmc6XG4v
LyBxc2EoJy5mb28nKS5mb3JFYWNoKGZ1bmN0aW9uICgpIHt9KVxuTm9kZUxpc3QucHJvdG90eXBl
LmZvckVhY2ggPSBBcnJheS5wcm90b3R5cGUuZm9yRWFjaFxuXG5cblxuLy8gV0VCUEFDSyBGT09U
RVIgLy9cbi8vIC4vaGVscGVycy5qcyIsImltcG9ydCAndG9kb212Yy1hcHAtY3NzL2luZGV4LmNz
cydcbmltcG9ydCAnLi9hcHAuY3NzJ1xuXG5pbXBvcnQgeyRvbn0gZnJvbSAnLi9oZWxwZXJzJ1xu
aW1wb3J0IHt1cGRhdGVUb2RvfSBmcm9tICcuL3RvZG8nXG5cbmV4cG9ydCBmdW5jdGlvbiBvbkxv
YWQoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW1wb3J0L3ByZWZlci1kZWZhdWx0LWV4cG9y
dFxuICB1cGRhdGVUb2RvKClcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2Fw
cC5qcyIsImV4cG9ydCBkZWZhdWx0IENvbnRyb2xsZXJcblxuLyoqXG4qIFRha2VzIGEgbW9kZWwg
YW5kIHZpZXcgYW5kIGFjdHMgYXMgdGhlIGNvbnRyb2xsZXIgYmV0d2VlbiB0aGVtXG4qXG4qIEBj
b25zdHJ1Y3RvclxuKiBAcGFyYW0ge29iamVjdH0gbW9kZWwgVGhlIG1vZGVsIGluc3RhbmNlXG4q
IEBwYXJhbSB7b2JqZWN0fSB2aWV3IFRoZSB2aWV3IGluc3RhbmNlXG4qL1xuZnVuY3Rpb24gQ29u
dHJvbGxlcihtb2RlbCwgdmlldykge1xuICB2YXIgdGhhdCA9IHRoaXNcbiAgdGhhdC5tb2RlbCA9
IG1vZGVsXG4gIHRoYXQudmlldyA9IHZpZXdcblxuICB0aGF0LnZpZXcuYmluZCgnbmV3VG9kbycs
IGZ1bmN0aW9uKHRpdGxlKSB7XG4gICAgdGhhdC5hZGRJdGVtKHRpdGxlKVxuICB9KVxuXG4gIHRo
YXQudmlldy5iaW5kKCdpdGVtRWRpdCcsIGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICB0aGF0LmVkaXRJ
dGVtKGl0ZW0uaWQpXG4gIH0pXG5cbiAgdGhhdC52aWV3LmJpbmQoJ2l0ZW1FZGl0RG9uZScsIGZ1
bmN0aW9uKGl0ZW0pIHtcbiAgICB0aGF0LmVkaXRJdGVtU2F2ZShpdGVtLmlkLCBpdGVtLnRpdGxl
KVxuICB9KVxuXG4gIHRoYXQudmlldy5iaW5kKCdpdGVtRWRpdENhbmNlbCcsIGZ1bmN0aW9uKGl0
ZW0pIHtcbiAgICB0aGF0LmVkaXRJdGVtQ2FuY2VsKGl0ZW0uaWQpXG4gIH0pXG5cbiAgdGhhdC52
aWV3LmJpbmQoJ2l0ZW1SZW1vdmUnLCBmdW5jdGlvbihpdGVtKSB7XG4gICAgdGhhdC5yZW1vdmVJ
dGVtKGl0ZW0uaWQpXG4gIH0pXG5cbiAgdGhhdC52aWV3LmJpbmQoJ2l0ZW1Ub2dnbGUnLCBmdW5j
dGlvbihpdGVtKSB7XG4gICAgdGhhdC50b2dnbGVDb21wbGV0ZShpdGVtLmlkLCBpdGVtLmNvbXBs
ZXRlZClcbiAgfSlcblxuICB0aGF0LnZpZXcuYmluZCgncmVtb3ZlQ29tcGxldGVkJywgZnVuY3Rp
b24oKSB7XG4gICAgdGhhdC5yZW1vdmVDb21wbGV0ZWRJdGVtcygpXG4gIH0pXG5cbiAgdGhhdC52
aWV3LmJpbmQoJ3RvZ2dsZUFsbCcsIGZ1bmN0aW9uKHN0YXR1cykge1xuICAgIHRoYXQudG9nZ2xl
QWxsKHN0YXR1cy5jb21wbGV0ZWQpXG4gIH0pXG59XG5cbi8qKlxuKiBMb2FkcyBhbmQgaW5pdGlh
bGlzZXMgdGhlIHZpZXdcbipcbiogQHBhcmFtIHtzdHJpbmd9ICcnIHwgJ2FjdGl2ZScgfCAnY29t
cGxldGVkJ1xuKi9cbkNvbnRyb2xsZXIucHJvdG90eXBlLnNldFZpZXcgPSBmdW5jdGlvbihsb2Nh
dGlvbkhhc2gpIHtcbiAgdmFyIHJvdXRlID0gbG9jYXRpb25IYXNoLnNwbGl0KCcvJylbMV1cbiAg
dmFyIHBhZ2UgPSByb3V0ZSB8fCAnJ1xuICB0aGlzLl91cGRhdGVGaWx0ZXJTdGF0ZShwYWdlKVxu
fVxuXG4vKipcbiogQW4gZXZlbnQgdG8gZmlyZSBvbiBsb2FkLiBXaWxsIGdldCBhbGwgaXRlbXMg
YW5kIGRpc3BsYXkgdGhlbSBpbiB0aGVcbiogdG9kby1saXN0XG4qL1xuQ29udHJvbGxlci5wcm90
b3R5cGUuc2hvd0FsbCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgdGhhdCA9IHRoaXNcbiAgdGhhdC5t
b2RlbC5yZWFkKGZ1bmN0aW9uKGRhdGEpIHtcbiAgICB0aGF0LnZpZXcucmVuZGVyKCdzaG93RW50
cmllcycsIGRhdGEpXG4gIH0pXG59XG5cbi8qKlxuKiBSZW5kZXJzIGFsbCBhY3RpdmUgdGFza3Nc
biovXG5Db250cm9sbGVyLnByb3RvdHlwZS5zaG93QWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gIHZh
ciB0aGF0ID0gdGhpc1xuICB0aGF0Lm1vZGVsLnJlYWQoe2NvbXBsZXRlZDogZmFsc2V9LCBmdW5j
dGlvbihkYXRhKSB7XG4gICAgdGhhdC52aWV3LnJlbmRlcignc2hvd0VudHJpZXMnLCBkYXRhKVxu
ICB9KVxufVxuXG4vKipcbiogUmVuZGVycyBhbGwgY29tcGxldGVkIHRhc2tzXG4qL1xuQ29udHJv
bGxlci5wcm90b3R5cGUuc2hvd0NvbXBsZXRlZCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgdGhhdCA9
IHRoaXNcbiAgdGhhdC5tb2RlbC5yZWFkKHtjb21wbGV0ZWQ6IHRydWV9LCBmdW5jdGlvbihkYXRh
KSB7XG4gICAgdGhhdC52aWV3LnJlbmRlcignc2hvd0VudHJpZXMnLCBkYXRhKVxuICB9KVxufVxu
XG4vKipcbiogQW4gZXZlbnQgdG8gZmlyZSB3aGVuZXZlciB5b3Ugd2FudCB0byBhZGQgYW4gaXRl
bS4gU2ltcGx5IHBhc3MgaW4gdGhlIGV2ZW50XG4qIG9iamVjdCBhbmQgaXQnbGwgaGFuZGxlIHRo
ZSBET00gaW5zZXJ0aW9uIGFuZCBzYXZpbmcgb2YgdGhlIG5ldyBpdGVtLlxuKi9cbkNvbnRyb2xs
ZXIucHJvdG90eXBlLmFkZEl0ZW0gPSBmdW5jdGlvbih0aXRsZSkge1xuICB2YXIgdGhhdCA9IHRo
aXNcblxuICBpZiAodGl0bGUudHJpbSgpID09PSAnJykge1xuICAgIHJldHVyblxuICB9XG5cbiAg
dGhhdC5tb2RlbC5jcmVhdGUodGl0bGUsIGZ1bmN0aW9uKCkge1xuICAgIHRoYXQudmlldy5yZW5k
ZXIoJ2NsZWFyTmV3VG9kbycpXG4gICAgdGhhdC5fZmlsdGVyKHRydWUpXG4gIH0pXG59XG5cbi8q
XG4qIFRyaWdnZXJzIHRoZSBpdGVtIGVkaXRpbmcgbW9kZS5cbiovXG5Db250cm9sbGVyLnByb3Rv
dHlwZS5lZGl0SXRlbSA9IGZ1bmN0aW9uKGlkKSB7XG4gIHZhciB0aGF0ID0gdGhpc1xuICB0aGF0
Lm1vZGVsLnJlYWQoaWQsIGZ1bmN0aW9uKGRhdGEpIHtcbiAgICB0aGF0LnZpZXcucmVuZGVyKCdl
ZGl0SXRlbScsIHtpZCwgdGl0bGU6IGRhdGFbMF0udGl0bGV9KVxuICB9KVxufVxuXG4vKlxuKiBG
aW5pc2hlcyB0aGUgaXRlbSBlZGl0aW5nIG1vZGUgc3VjY2Vzc2Z1bGx5LlxuKi9cbkNvbnRyb2xs
ZXIucHJvdG90eXBlLmVkaXRJdGVtU2F2ZSA9IGZ1bmN0aW9uKGlkLCB0aXRsZSkge1xuICB2YXIg
dGhhdCA9IHRoaXNcbiAgaWYgKHRpdGxlLnRyaW0oKSkge1xuICAgIHRoYXQubW9kZWwudXBkYXRl
KGlkLCB7dGl0bGV9LCBmdW5jdGlvbigpIHtcbiAgICAgIHRoYXQudmlldy5yZW5kZXIoJ2VkaXRJ
dGVtRG9uZScsIHtpZCwgdGl0bGV9KVxuICAgIH0pXG4gIH0gZWxzZSB7XG4gICAgdGhhdC5yZW1v
dmVJdGVtKGlkKVxuICB9XG59XG5cbi8qXG4qIENhbmNlbHMgdGhlIGl0ZW0gZWRpdGluZyBtb2Rl
LlxuKi9cbkNvbnRyb2xsZXIucHJvdG90eXBlLmVkaXRJdGVtQ2FuY2VsID0gZnVuY3Rpb24oaWQp
IHtcbiAgdmFyIHRoYXQgPSB0aGlzXG4gIHRoYXQubW9kZWwucmVhZChpZCwgZnVuY3Rpb24oZGF0
YSkge1xuICAgIHRoYXQudmlldy5yZW5kZXIoJ2VkaXRJdGVtRG9uZScsIHtpZCwgdGl0bGU6IGRh
dGFbMF0udGl0bGV9KVxuICB9KVxufVxuXG4vKipcbiogQnkgZ2l2aW5nIGl0IGFuIElEIGl0J2xs
IGZpbmQgdGhlIERPTSBlbGVtZW50IG1hdGNoaW5nIHRoYXQgSUQsXG4qIHJlbW92ZSBpdCBmcm9t
IHRoZSBET00gYW5kIGFsc28gcmVtb3ZlIGl0IGZyb20gc3RvcmFnZS5cbipcbiogQHBhcmFtIHtu
dW1iZXJ9IGlkIFRoZSBJRCBvZiB0aGUgaXRlbSB0byByZW1vdmUgZnJvbSB0aGUgRE9NIGFuZFxu
KiBzdG9yYWdlXG4qL1xuQ29udHJvbGxlci5wcm90b3R5cGUucmVtb3ZlSXRlbSA9IGZ1bmN0aW9u
KGlkKSB7XG4gIHZhciB0aGF0ID0gdGhpc1xuICB0aGF0Lm1vZGVsLnJlbW92ZShpZCwgZnVuY3Rp
b24oKSB7XG4gICAgdGhhdC52aWV3LnJlbmRlcigncmVtb3ZlSXRlbScsIGlkKVxuICB9KVxuXG4g
IHRoYXQuX2ZpbHRlcigpXG59XG5cbi8qKlxuKiBXaWxsIHJlbW92ZSBhbGwgY29tcGxldGVkIGl0
ZW1zIGZyb20gdGhlIERPTSBhbmQgc3RvcmFnZS5cbiovXG5Db250cm9sbGVyLnByb3RvdHlwZS5y
ZW1vdmVDb21wbGV0ZWRJdGVtcyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgdGhhdCA9IHRoaXNcbiAg
dGhhdC5tb2RlbC5yZWFkKHtjb21wbGV0ZWQ6IHRydWV9LCBmdW5jdGlvbihkYXRhKSB7XG4gICAg
ZGF0YS5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgIHRoYXQucmVtb3ZlSXRlbShpdGVt
LmlkKVxuICAgIH0pXG4gIH0pXG5cbiAgdGhhdC5fZmlsdGVyKClcbn1cblxuLyoqXG4qIEdpdmUg
aXQgYW4gSUQgb2YgYSBtb2RlbCBhbmQgYSBjaGVja2JveCBhbmQgaXQgd2lsbCB1cGRhdGUgdGhl
IGl0ZW1cbiogaW4gc3RvcmFnZSBiYXNlZCBvbiB0aGUgY2hlY2tib3gncyBzdGF0ZS5cbipcbiog
QHBhcmFtIHtudW1iZXJ9IGlkIFRoZSBJRCBvZiB0aGUgZWxlbWVudCB0byBjb21wbGV0ZSBvciB1
bmNvbXBsZXRlXG4qIEBwYXJhbSB7b2JqZWN0fSBjaGVja2JveCBUaGUgY2hlY2tib3ggdG8gY2hl
Y2sgdGhlIHN0YXRlIG9mIGNvbXBsZXRlXG4qICAgICAgICAgICAgICAgICAgICAgICAgICBvciBu
b3RcbiogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gc2lsZW50IFByZXZlbnQgcmUtZmlsdGVy
aW5nIHRoZSB0b2RvIGl0ZW1zXG4qL1xuQ29udHJvbGxlci5wcm90b3R5cGUudG9nZ2xlQ29tcGxl
dGUgPSBmdW5jdGlvbihpZCwgY29tcGxldGVkLCBzaWxlbnQpIHtcbiAgdmFyIHRoYXQgPSB0aGlz
XG4gIHRoYXQubW9kZWwudXBkYXRlKGlkLCB7Y29tcGxldGVkfSwgZnVuY3Rpb24oKSB7XG4gICAg
dGhhdC52aWV3LnJlbmRlcignZWxlbWVudENvbXBsZXRlJywge1xuICAgICAgaWQsXG4gICAgICBj
b21wbGV0ZWQsXG4gICAgfSlcbiAgfSlcblxuICBpZiAoIXNpbGVudCkge1xuICAgIHRoYXQuX2Zp
bHRlcigpXG4gIH1cbn1cblxuLyoqXG4qIFdpbGwgdG9nZ2xlIEFMTCBjaGVja2JveGVzJyBvbi9v
ZmYgc3RhdGUgYW5kIGNvbXBsZXRlbmVzcyBvZiBtb2RlbHMuXG4qIEp1c3QgcGFzcyBpbiB0aGUg
ZXZlbnQgb2JqZWN0LlxuKi9cbkNvbnRyb2xsZXIucHJvdG90eXBlLnRvZ2dsZUFsbCA9IGZ1bmN0
aW9uKGNvbXBsZXRlZCkge1xuICB2YXIgdGhhdCA9IHRoaXNcbiAgdGhhdC5tb2RlbC5yZWFkKHtj
b21wbGV0ZWQ6ICFjb21wbGV0ZWR9LCBmdW5jdGlvbihkYXRhKSB7XG4gICAgZGF0YS5mb3JFYWNo
KGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgIHRoYXQudG9nZ2xlQ29tcGxldGUoaXRlbS5pZCwgY29t
cGxldGVkLCB0cnVlKVxuICAgIH0pXG4gIH0pXG5cbiAgdGhhdC5fZmlsdGVyKClcbn1cblxuLyoq
XG4qIFVwZGF0ZXMgdGhlIHBpZWNlcyBvZiB0aGUgcGFnZSB3aGljaCBjaGFuZ2UgZGVwZW5kaW5n
IG9uIHRoZSByZW1haW5pbmdcbiogbnVtYmVyIG9mIHRvZG9zLlxuKi9cbkNvbnRyb2xsZXIucHJv
dG90eXBlLl91cGRhdGVDb3VudCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgdGhhdCA9IHRoaXNcbiAg
dGhhdC5tb2RlbC5nZXRDb3VudChmdW5jdGlvbih0b2Rvcykge1xuICAgIHRoYXQudmlldy5yZW5k
ZXIoJ3VwZGF0ZUVsZW1lbnRDb3VudCcsIHRvZG9zLmFjdGl2ZSlcbiAgICB0aGF0LnZpZXcucmVu
ZGVyKCdjbGVhckNvbXBsZXRlZEJ1dHRvbicsIHtcbiAgICAgIGNvbXBsZXRlZDogdG9kb3MuY29t
cGxldGVkLFxuICAgICAgdmlzaWJsZTogdG9kb3MuY29tcGxldGVkID4gMFxuICAgIH0pXG5cbiAg
ICB0aGF0LnZpZXcucmVuZGVyKCd0b2dnbGVBbGwnLCB7Y2hlY2tlZDogdG9kb3MuY29tcGxldGVk
ID09PSB0b2Rvcy50b3RhbH0pXG4gICAgdGhhdC52aWV3LnJlbmRlcignY29udGVudEJsb2NrVmlz
aWJpbGl0eScsIHt2aXNpYmxlOiB0b2Rvcy50b3RhbCA+IDB9KVxuICB9KVxufVxuXG4vKipcbiog
UmUtZmlsdGVycyB0aGUgdG9kbyBpdGVtcywgYmFzZWQgb24gdGhlIGFjdGl2ZSByb3V0ZS5cbiog
QHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gZm9yY2UgIGZvcmNlcyBhIHJlLXBhaW50aW5nIG9m
IHRvZG8gaXRlbXMuXG4qL1xuQ29udHJvbGxlci5wcm90b3R5cGUuX2ZpbHRlciA9IGZ1bmN0aW9u
KGZvcmNlKSB7XG4gIHZhciBhY3RpdmVSb3V0ZSA9IHRoaXMuX2FjdGl2ZVJvdXRlLmNoYXJBdCgw
KS50b1VwcGVyQ2FzZSgpICsgdGhpcy5fYWN0aXZlUm91dGUuc3Vic3RyKDEpXG5cbiAgLy8gVXBk
YXRlIHRoZSBlbGVtZW50cyBvbiB0aGUgcGFnZSwgd2hpY2ggY2hhbmdlIHdpdGggZWFjaCBjb21w
bGV0ZWQgdG9kb1xuICB0aGlzLl91cGRhdGVDb3VudCgpXG5cbiAgLy8gSWYgdGhlIGxhc3QgYWN0
aXZlIHJvdXRlIGlzbid0IFwiQWxsXCIsIG9yIHdlJ3JlIHN3aXRjaGluZyByb3V0ZXMsIHdlXG4g
IC8vIHJlLWNyZWF0ZSB0aGUgdG9kbyBpdGVtIGVsZW1lbnRzLCBjYWxsaW5nOlxuICAvLyAgIHRo
aXMuc2hvd1tBbGx8QWN0aXZlfENvbXBsZXRlZF0oKTtcbiAgaWYgKGZvcmNlIHx8IHRoaXMuX2xh
c3RBY3RpdmVSb3V0ZSAhPT0gJ0FsbCcgfHwgdGhpcy5fbGFzdEFjdGl2ZVJvdXRlICE9PSBhY3Rp
dmVSb3V0ZSkge1xuICAgIHRoaXNbJ3Nob3cnICsgYWN0aXZlUm91dGVdKClcbiAgfVxuXG4gIHRo
aXMuX2xhc3RBY3RpdmVSb3V0ZSA9IGFjdGl2ZVJvdXRlXG59XG5cbi8qKlxuKiBTaW1wbHkgdXBk
YXRlcyB0aGUgZmlsdGVyIG5hdidzIHNlbGVjdGVkIHN0YXRlc1xuKi9cbkNvbnRyb2xsZXIucHJv
dG90eXBlLl91cGRhdGVGaWx0ZXJTdGF0ZSA9IGZ1bmN0aW9uKGN1cnJlbnRQYWdlKSB7XG4gIC8v
IFN0b3JlIGEgcmVmZXJlbmNlIHRvIHRoZSBhY3RpdmUgcm91dGUsIGFsbG93aW5nIHVzIHRvIHJl
LWZpbHRlciB0b2RvXG4gIC8vIGl0ZW1zIGFzIHRoZXkgYXJlIG1hcmtlZCBjb21wbGV0ZSBvciBp
bmNvbXBsZXRlLlxuICBjdXJyZW50UGFnZSA9IGN1cnJlbnRQYWdlLnNwbGl0KCc/JylbMF1cbiAg
dGhpcy5fYWN0aXZlUm91dGUgPSBjdXJyZW50UGFnZVxuXG4gIGlmIChjdXJyZW50UGFnZSA9PT0g
JycpIHtcbiAgICB0aGlzLl9hY3RpdmVSb3V0ZSA9ICdBbGwnXG4gIH1cblxuICB0aGlzLl9maWx0
ZXIoKVxuXG4gIHRoaXMudmlldy5yZW5kZXIoJ3NldEZpbHRlcicsIGN1cnJlbnRQYWdlKVxufVxu
XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY29udHJvbGxlci5qcyIsIihmdW5jdGlv
bihyb290KSB7XG4gIHZhciBsb2NhbFN0b3JhZ2VNZW1vcnkgPSB7fTtcbiAgdmFyIGNhY2hlID0g
e307XG5cbiAgLyoqXG4gICAqIG51bWJlciBvZiBzdG9yZWQgaXRlbXMuXG4gICAqL1xuICBsb2Nh
bFN0b3JhZ2VNZW1vcnkubGVuZ3RoID0gMDtcblxuICAvKipcbiAgICogcmV0dXJucyBpdGVtIGZv
ciBwYXNzZWQga2V5LCBvciBudWxsXG4gICAqXG4gICAqIEBwYXJhIHtTdHJpbmd9IGtleVxuICAg
KiAgICAgICBuYW1lIG9mIGl0ZW0gdG8gYmUgcmV0dXJuZWRcbiAgICogQHJldHVybnMge1N0cmlu
Z3xudWxsfVxuICAgKi9cbiAgbG9jYWxTdG9yYWdlTWVtb3J5LmdldEl0ZW0gPSBmdW5jdGlvbihr
ZXkpIHtcbiAgICByZXR1cm4gY2FjaGVba2V5XSB8fCBudWxsO1xuICB9O1xuXG4gIC8qKlxuICAg
KiBzZXRzIGl0ZW0gZm9yIGtleSB0byBwYXNzZWQgdmFsdWUsIGFzIFN0cmluZ1xuICAgKlxuICAg
KiBAcGFyYSB7U3RyaW5nfSBrZXlcbiAgICogICAgICAgbmFtZSBvZiBpdGVtIHRvIGJlIHNldFxu
ICAgKiBAcGFyYSB7U3RyaW5nfSB2YWx1ZVxuICAgKiAgICAgICB2YWx1ZSwgd2lsbCBhbHdheXMg
YmUgdHVybmVkIGludG8gYSBTdHJpbmdcbiAgICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAgICov
XG4gIGxvY2FsU3RvcmFnZU1lbW9yeS5zZXRJdGVtID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xu
ICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBsb2NhbFN0b3Jh
Z2VNZW1vcnkucmVtb3ZlSXRlbShrZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIShjYWNo
ZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSkge1xuICAgICAgICBsb2NhbFN0b3JhZ2VNZW1vcnkubGVu
Z3RoKys7XG4gICAgICB9XG5cbiAgICAgIGNhY2hlW2tleV0gPSAnJyArIHZhbHVlO1xuICAgIH1c
biAgfTtcblxuICAvKipcbiAgICogcmVtb3ZlcyBpdGVtIGZvciBwYXNzZWQga2V5XG4gICAqXG4g
ICAqIEBwYXJhIHtTdHJpbmd9IGtleVxuICAgKiAgICAgICBuYW1lIG9mIGl0ZW0gdG8gYmUgcmVt
b3ZlZFxuICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICAgKi9cbiAgbG9jYWxTdG9yYWdlTWVt
b3J5LnJlbW92ZUl0ZW0gPSBmdW5jdGlvbihrZXkpIHtcbiAgICBpZiAoY2FjaGUuaGFzT3duUHJv
cGVydHkoa2V5KSkge1xuICAgICAgZGVsZXRlIGNhY2hlW2tleV07XG4gICAgICBsb2NhbFN0b3Jh
Z2VNZW1vcnkubGVuZ3RoLS07XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiByZXR1cm5zIG5h
bWUgb2Yga2V5IGF0IHBhc3NlZCBpbmRleFxuICAgKlxuICAgKiBAcGFyYSB7TnVtYmVyfSBpbmRl
eFxuICAgKiAgICAgICBQb3NpdGlvbiBmb3Iga2V5IHRvIGJlIHJldHVybmVkIChzdGFydHMgYXQg
MClcbiAgICogQHJldHVybnMge1N0cmluZ3xudWxsfVxuICAgKi9cbiAgbG9jYWxTdG9yYWdlTWVt
b3J5LmtleSA9IGZ1bmN0aW9uKGluZGV4KSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGNhY2hl
KVtpbmRleF0gfHwgbnVsbDtcbiAgfTtcblxuICAvKipcbiAgICogcmVtb3ZlcyBhbGwgc3RvcmVk
IGl0ZW1zIGFuZCBzZXRzIGxlbmd0aCB0byAwXG4gICAqXG4gICAqIEByZXR1cm5zIHt1bmRlZmlu
ZWR9XG4gICAqL1xuICBsb2NhbFN0b3JhZ2VNZW1vcnkuY2xlYXIgPSBmdW5jdGlvbigpIHtcbiAg
ICBjYWNoZSA9IHt9O1xuICAgIGxvY2FsU3RvcmFnZU1lbW9yeS5sZW5ndGggPSAwO1xuICB9O1xu
XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICBtb2R1bGUuZXhwb3J0
cyA9IGxvY2FsU3RvcmFnZU1lbW9yeTtcbiAgfSBlbHNlIHtcbiAgICByb290LmxvY2FsU3RvcmFn
ZU1lbW9yeSA9IGxvY2FsU3RvcmFnZU1lbW9yeTtcbiAgfVxufSkodGhpcyk7XG5cblxuLy8gV0VC
UEFDSyBGT09URVIgLy9cbi8vIC4vbWVtb3J5LmpzIiwiZXhwb3J0IGRlZmF1bHQgTW9kZWxcblxu
LyoqXG4qIENyZWF0ZXMgYSBuZXcgTW9kZWwgaW5zdGFuY2UgYW5kIGhvb2tzIHVwIHRoZSBzdG9y
YWdlLlxuKlxuKiBAY29uc3RydWN0b3JcbiogQHBhcmFtIHtvYmplY3R9IHN0b3JhZ2UgQSByZWZl
cmVuY2UgdG8gdGhlIGNsaWVudCBzaWRlIHN0b3JhZ2UgY2xhc3NcbiovXG5mdW5jdGlvbiBNb2Rl
bChzdG9yYWdlKSB7XG4gIHRoaXMuc3RvcmFnZSA9IHN0b3JhZ2Vcbn1cblxuLyoqXG4qIENyZWF0
ZXMgYSBuZXcgdG9kbyBtb2RlbFxuKlxuKiBAcGFyYW0ge3N0cmluZ30gW3RpdGxlXSBUaGUgdGl0
bGUgb2YgdGhlIHRhc2tcbiogQHBhcmFtIHtmdW5jdGlvbn0gW2NhbGxiYWNrXSBUaGUgY2FsbGJh
Y2sgdG8gZmlyZSBhZnRlciB0aGUgbW9kZWwgaXMgY3JlYXRlZFxuKi9cbk1vZGVsLnByb3RvdHlw
ZS5jcmVhdGUgPSBmdW5jdGlvbih0aXRsZSwgY2FsbGJhY2spIHtcbiAgdGl0bGUgPSB0aXRsZSB8
fCAnJ1xuICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge1xuICB9XG5cbiAgdmFy
IG5ld0l0ZW0gPSB7XG4gICAgdGl0bGU6IHRpdGxlLnRyaW0oKSxcbiAgICBjb21wbGV0ZWQ6IGZh
bHNlXG4gIH1cblxuICB0aGlzLnN0b3JhZ2Uuc2F2ZShuZXdJdGVtLCBjYWxsYmFjaylcbn1cblxu
LyoqXG4gKiBGaW5kcyBhbmQgcmV0dXJucyBhIG1vZGVsIGluIHN0b3JhZ2UuIElmIG5vIHF1ZXJ5
IGlzIGdpdmVuIGl0J2xsIHNpbXBseVxuICogcmV0dXJuIGV2ZXJ5dGhpbmcuIElmIHlvdSBwYXNz
IGluIGEgc3RyaW5nIG9yIG51bWJlciBpdCdsbCBsb29rIHRoYXQgdXAgYXNcbiAqIHRoZSBJRCBv
ZiB0aGUgbW9kZWwgdG8gZmluZC4gTGFzdGx5LCB5b3UgY2FuIHBhc3MgaXQgYW4gb2JqZWN0IHRv
IG1hdGNoIGFnYWluc3QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfG9iamVjdH0gW3F1
ZXJ5XSBBIHF1ZXJ5IHRvIG1hdGNoIG1vZGVscyBhZ2FpbnN0XG4gKiBAcGFyYW0ge2Z1bmN0aW9u
fSBbY2FsbGJhY2tdIFRoZSBjYWxsYmFjayB0byBmaXJlIGFmdGVyIHRoZSBtb2RlbCBpcyBmb3Vu
ZFxuICpcbiAqIEBleGFtcGxlXG4gKiBtb2RlbC5yZWFkKDEsIGZ1bmMpOyAvLyBXaWxsIGZpbmQg
dGhlIG1vZGVsIHdpdGggYW4gSUQgb2YgMVxuICogbW9kZWwucmVhZCgnMScpOyAvLyBTYW1lIGFz
IGFib3ZlXG4gKiAvL0JlbG93IHdpbGwgZmluZCBhIG1vZGVsIHdpdGggZm9vIGVxdWFsbGluZyBi
YXIgYW5kIGhlbGxvIGVxdWFsbGluZyB3b3JsZC5cbiAqIG1vZGVsLnJlYWQoeyBmb286ICdiYXIn
LCBoZWxsbzogJ3dvcmxkJyB9KTtcbiAqL1xuTW9kZWwucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlv
bihxdWVyeSwgY2FsbGJhY2spIHtcbiAgdmFyIHF1ZXJ5VHlwZSA9IHR5cGVvZiBxdWVyeVxuICBj
YWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge1xuICB9XG5cbiAgaWYgKHF1ZXJ5VHlw
ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gcXVlcnlcbiAgICByZXR1cm4gdGhp
cy5zdG9yYWdlLmZpbmRBbGwoY2FsbGJhY2spXG4gIH0gZWxzZSBpZiAocXVlcnlUeXBlID09PSAn
c3RyaW5nJyB8fCBxdWVyeVR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgcXVlcnkgPSBwYXJzZUlu
dChxdWVyeSwgMTApXG4gICAgdGhpcy5zdG9yYWdlLmZpbmQoe2lkOiBxdWVyeX0sIGNhbGxiYWNr
KVxuICB9IGVsc2Uge1xuICAgIHRoaXMuc3RvcmFnZS5maW5kKHF1ZXJ5LCBjYWxsYmFjaylcbiAg
fVxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbi8qKlxuKiBVcGRhdGVzIGEgbW9kZWwgYnkgZ2l2
aW5nIGl0IGFuIElELCBkYXRhIHRvIHVwZGF0ZSwgYW5kIGEgY2FsbGJhY2sgdG8gZmlyZSB3aGVu
XG4qIHRoZSB1cGRhdGUgaXMgY29tcGxldGUuXG4qXG4qIEBwYXJhbSB7bnVtYmVyfSBpZCBUaGUg
aWQgb2YgdGhlIG1vZGVsIHRvIHVwZGF0ZVxuKiBAcGFyYW0ge29iamVjdH0gZGF0YSBUaGUgcHJv
cGVydGllcyB0byB1cGRhdGUgYW5kIHRoZWlyIG5ldyB2YWx1ZVxuKiBAcGFyYW0ge2Z1bmN0aW9u
fSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gZmlyZSB3aGVuIHRoZSB1cGRhdGUgaXMgY29tcGxl
dGUuXG4qL1xuTW9kZWwucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uKGlkLCBkYXRhLCBjYWxs
YmFjaykge1xuICB0aGlzLnN0b3JhZ2Uuc2F2ZShkYXRhLCBjYWxsYmFjaywgaWQpXG59XG5cbi8q
KlxuKiBSZW1vdmVzIGEgbW9kZWwgZnJvbSBzdG9yYWdlXG4qXG4qIEBwYXJhbSB7bnVtYmVyfSBp
ZCBUaGUgSUQgb2YgdGhlIG1vZGVsIHRvIHJlbW92ZVxuKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxs
YmFjayBUaGUgY2FsbGJhY2sgdG8gZmlyZSB3aGVuIHRoZSByZW1vdmFsIGlzIGNvbXBsZXRlLlxu
Ki9cbk1vZGVsLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbihpZCwgY2FsbGJhY2spIHtcbiAg
dGhpcy5zdG9yYWdlLnJlbW92ZShpZCwgY2FsbGJhY2spXG59XG5cbi8qKlxuKiBXQVJOSU5HOiBX
aWxsIHJlbW92ZSBBTEwgZGF0YSBmcm9tIHN0b3JhZ2UuXG4qXG4qIEBwYXJhbSB7ZnVuY3Rpb259
IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBmaXJlIHdoZW4gdGhlIHN0b3JhZ2UgaXMgd2lwZWQu
XG4qL1xuTW9kZWwucHJvdG90eXBlLnJlbW92ZUFsbCA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4g
IHRoaXMuc3RvcmFnZS5kcm9wKGNhbGxiYWNrKVxufVxuXG4vKipcbiogUmV0dXJucyBhIGNvdW50
IG9mIGFsbCB0b2Rvc1xuKi9cbk1vZGVsLnByb3RvdHlwZS5nZXRDb3VudCA9IGZ1bmN0aW9uKGNh
bGxiYWNrKSB7XG4gIHZhciB0b2RvcyA9IHtcbiAgICBhY3RpdmU6IDAsXG4gICAgY29tcGxldGVk
OiAwLFxuICAgIHRvdGFsOiAwXG4gIH1cblxuICB0aGlzLnN0b3JhZ2UuZmluZEFsbChmdW5jdGlv
bihkYXRhKSB7XG4gICAgZGF0YS5mb3JFYWNoKGZ1bmN0aW9uKHRvZG8pIHtcbiAgICAgIGlmICh0
b2RvLmNvbXBsZXRlZCkge1xuICAgICAgICB0b2Rvcy5jb21wbGV0ZWQrK1xuICAgICAgfSBlbHNl
IHtcbiAgICAgICAgdG9kb3MuYWN0aXZlKytcbiAgICAgIH1cblxuICAgICAgdG9kb3MudG90YWwr
K1xuICAgIH0pXG4gICAgY2FsbGJhY2sodG9kb3MpXG4gIH0pXG59XG5cblxuXG4vLyBXRUJQQUNL
IEZPT1RFUiAvL1xuLy8gLi9tb2RlbC5qcyIsImltcG9ydCB7cmVtb3ZlfSBmcm9tICcuL2hlbHBl
cnMnXG5pbXBvcnQgKiBhcyBsb2NhbFN0b3JhZ2VNZW1vcnkgZnJvbSAnLi9tZW1vcnknXG5leHBv
cnQgZGVmYXVsdCBTdG9yZVxuXG52YXIgdW5pcXVlSUQgPSAxO1xuXG4vKipcbiAqIENyZWF0ZXMg
YSBuZXcgY2xpZW50IHNpZGUgc3RvcmFnZSBvYmplY3QgYW5kIHdpbGwgY3JlYXRlIGFuIGVtcHR5
XG4gKiBjb2xsZWN0aW9uIGlmIG5vIGNvbGxlY3Rpb24gYWxyZWFkeSBleGlzdHMuXG4gKlxuICog
QHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2Ygb3VyIERCIHdlIHdhbnQgdG8gdXNlXG4g
KiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBPdXIgZmFrZSBEQiB1c2VzIGNhbGxiYWNrcyBi
ZWNhdXNlIGluXG4gKiByZWFsIGxpZmUgeW91IHByb2JhYmx5IHdvdWxkIGJlIG1ha2luZyBBSkFY
IGNhbGxzXG4gKi9cbmZ1bmN0aW9uIFN0b3JlKG5hbWUsIGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNr
ID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7XG4gIH1cblxuICB0aGlzLl9kYk5hbWUgPSBuYW1l
XG5cbiAgaWYgKCFsb2NhbFN0b3JhZ2VNZW1vcnlbbmFtZV0pIHtcbiAgICB2YXIgZGF0YSA9IHtc
biAgICAgIHRvZG9zOiBbXVxuICAgIH1cblxuICAgIGxvY2FsU3RvcmFnZU1lbW9yeVtuYW1lXSA9
IEpTT04uc3RyaW5naWZ5KGRhdGEpXG4gIH1cblxuICBjYWxsYmFjay5jYWxsKHRoaXMsIEpTT04u
cGFyc2UobG9jYWxTdG9yYWdlTWVtb3J5W25hbWVdKSlcbiAgdGhpcy5zdWJzY3JpYmVycyA9IFtd
XG59XG5cblN0b3JlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbihzdWJzY3JpYmVyKSB7
XG4gIHRoaXMuc3Vic2NyaWJlcnMucHVzaChzdWJzY3JpYmVyKVxuICByZXR1cm4gKCkgPT4gcmVt
b3ZlKHRoaXMuc3Vic2NyaWJlcnMsIHN1YnNjcmliZXIpXG59XG5cblN0b3JlLnByb3RvdHlwZS5f
bm90aWZ5ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuc3Vic2NyaWJlcnMuZm9yRWFjaChzID0+IHMo
KSlcbn1cblxuLyoqXG4qIEZpbmRzIGl0ZW1zIGJhc2VkIG9uIGEgcXVlcnkgZ2l2ZW4gYXMgYSBK
UyBvYmplY3RcbipcbiogQHBhcmFtIHtvYmplY3R9IHF1ZXJ5IFRoZSBxdWVyeSB0byBtYXRjaCBh
Z2FpbnN0IChpLmUuIHtmb286ICdiYXInfSlcbiogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sg
ICBUaGUgY2FsbGJhY2sgdG8gZmlyZSB3aGVuIHRoZSBxdWVyeSBoYXNcbiogY29tcGxldGVkIHJ1
bm5pbmdcbipcbiogQGV4YW1wbGVcbiogZGIuZmluZCh7Zm9vOiAnYmFyJywgaGVsbG86ICd3b3Js
ZCd9LCBmdW5jdGlvbiAoZGF0YSkge1xuKiAgIC8vIGRhdGEgd2lsbCByZXR1cm4gYW55IGl0ZW1z
IHRoYXQgaGF2ZSBmb286IGJhciBhbmRcbiogICAvLyBoZWxsbzogd29ybGQgaW4gdGhlaXIgcHJv
cGVydGllc1xuKiB9KTtcbiovXG5TdG9yZS5wcm90b3R5cGUuZmluZCA9IGZ1bmN0aW9uKHF1ZXJ5
LCBjYWxsYmFjaykge1xuICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2
YXIgdG9kb3MgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZU1lbW9yeVt0aGlzLl9kYk5hbWVdKS50
b2Rvc1xuXG4gIGNhbGxiYWNrLmNhbGwodGhpcywgdG9kb3MuZmlsdGVyKGZ1bmN0aW9uKHRvZG8p
IHtcbiAgICBmb3IgKHZhciBxIGluIHF1ZXJ5KSB7XG4gICAgICBpZiAocXVlcnlbcV0gIT09IHRv
ZG9bcV0pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVy
biB0cnVlXG4gIH0pKVxufVxuXG4vKipcbiogV2lsbCByZXRyaWV2ZSBhbGwgZGF0YSBmcm9tIHRo
ZSBjb2xsZWN0aW9uXG4qXG4qIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFj
ayB0byBmaXJlIHVwb24gcmV0cmlldmluZyBkYXRhXG4qL1xuU3RvcmUucHJvdG90eXBlLmZpbmRB
bGwgPSBmdW5jdGlvbihjYWxsYmFjaykge1xuICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0
aW9uKCkge1xuICB9XG4gIGNhbGxiYWNrLmNhbGwodGhpcywgSlNPTi5wYXJzZShsb2NhbFN0b3Jh
Z2VNZW1vcnlbdGhpcy5fZGJOYW1lXSkudG9kb3MpXG59XG5cbi8qKlxuKiBXaWxsIHNhdmUgdGhl
IGdpdmVuIGRhdGEgdG8gdGhlIERCLiBJZiBubyBpdGVtIGV4aXN0cyBpdCB3aWxsIGNyZWF0ZSBh
IG5ld1xuKiBpdGVtLCBvdGhlcndpc2UgaXQnbGwgc2ltcGx5IHVwZGF0ZSBhbiBleGlzdGluZyBp
dGVtJ3MgcHJvcGVydGllc1xuKlxuKiBAcGFyYW0ge29iamVjdH0gdXBkYXRlRGF0YSBUaGUgZGF0
YSB0byBzYXZlIGJhY2sgaW50byB0aGUgREJcbiogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sg
VGhlIGNhbGxiYWNrIHRvIGZpcmUgYWZ0ZXIgc2F2aW5nXG4qIEBwYXJhbSB7bnVtYmVyfSBpZCBB
biBvcHRpb25hbCBwYXJhbSB0byBlbnRlciBhbiBJRCBvZiBhbiBpdGVtIHRvIHVwZGF0ZVxuKi9c
blN0b3JlLnByb3RvdHlwZS5zYXZlID0gZnVuY3Rpb24odXBkYXRlRGF0YSwgY2FsbGJhY2ssIGlk
KSB7XG4gIHZhciBkYXRhID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2VNZW1vcnlbdGhpcy5fZGJO
YW1lXSlcbiAgdmFyIHRvZG9zID0gZGF0YS50b2Rvc1xuXG4gIGNhbGxiYWNrID0gY2FsbGJhY2sg
fHwgZnVuY3Rpb24oKSB7XG4gIH1cblxuICAvLyBJZiBhbiBJRCB3YXMgYWN0dWFsbHkgZ2l2ZW4s
IGZpbmQgdGhlIGl0ZW0gYW5kIHVwZGF0ZSBlYWNoIHByb3BlcnR5XG4gIGlmIChpZCkge1xuICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgdG9kb3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0b2Rv
c1tpXS5pZCA9PT0gaWQpIHtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHVwZGF0ZURhdGEpIHsg
Ly8gZXNsaW50LWRpc2FibGUtbGluZSBndWFyZC1mb3ItaW5cbiAgICAgICAgICB0b2Rvc1tpXVtr
ZXldID0gdXBkYXRlRGF0YVtrZXldXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIH1c
biAgICB9XG5cbiAgICBsb2NhbFN0b3JhZ2VNZW1vcnlbdGhpcy5fZGJOYW1lXSA9IEpTT04uc3Ry
aW5naWZ5KGRhdGEpXG4gICAgY2FsbGJhY2suY2FsbCh0aGlzLCBKU09OLnBhcnNlKGxvY2FsU3Rv
cmFnZU1lbW9yeVt0aGlzLl9kYk5hbWVdKS50b2RvcylcbiAgfSBlbHNlIHtcbiAgICAvLyBHZW5l
cmF0ZSBhbiBJRFxuICAgIHVwZGF0ZURhdGEuaWQgPSB1bmlxdWVJRCsrO1xuXG4gICAgdG9kb3Mu
cHVzaCh1cGRhdGVEYXRhKVxuICAgIGxvY2FsU3RvcmFnZU1lbW9yeVt0aGlzLl9kYk5hbWVdID0g
SlNPTi5zdHJpbmdpZnkoZGF0YSlcbiAgICBjYWxsYmFjay5jYWxsKHRoaXMsIFt1cGRhdGVEYXRh
XSlcbiAgfVxuICB0aGlzLl9ub3RpZnkoKVxufVxuXG4vKipcbiogV2lsbCByZW1vdmUgYW4gaXRl
bSBmcm9tIHRoZSBTdG9yZSBiYXNlZCBvbiBpdHMgSURcbipcbiogQHBhcmFtIHtudW1iZXJ9IGlk
IFRoZSBJRCBvZiB0aGUgaXRlbSB5b3Ugd2FudCB0byByZW1vdmVcbiogQHBhcmFtIHtmdW5jdGlv
bn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGZpcmUgYWZ0ZXIgc2F2aW5nXG4qL1xuU3RvcmUu
cHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKGlkLCBjYWxsYmFjaykge1xuICB2YXIgZGF0YSA9
IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlTWVtb3J5W3RoaXMuX2RiTmFtZV0pXG4gIHZhciB0b2Rv
cyA9IGRhdGEudG9kb3NcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRvZG9zLmxlbmd0aDsgaSsr
KSB7XG4gICAgaWYgKHRvZG9zW2ldLmlkID09PSBpZCkge1xuICAgICAgdG9kb3Muc3BsaWNlKGks
IDEpXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGxvY2FsU3RvcmFnZU1lbW9yeVt0aGlz
Ll9kYk5hbWVdID0gSlNPTi5zdHJpbmdpZnkoZGF0YSlcbiAgY2FsbGJhY2suY2FsbCh0aGlzLCBK
U09OLnBhcnNlKGxvY2FsU3RvcmFnZU1lbW9yeVt0aGlzLl9kYk5hbWVdKS50b2RvcylcbiAgdGhp
cy5fbm90aWZ5KClcbn1cblxuLyoqXG4qIFdpbGwgZHJvcCBhbGwgc3RvcmFnZSBhbmQgc3RhcnQg
ZnJlc2hcbipcbiogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGZp
cmUgYWZ0ZXIgZHJvcHBpbmcgdGhlIGRhdGFcbiovXG5TdG9yZS5wcm90b3R5cGUuZHJvcCA9IGZ1
bmN0aW9uKGNhbGxiYWNrKSB7XG4gIGxvY2FsU3RvcmFnZU1lbW9yeVt0aGlzLl9kYk5hbWVdID0g
SlNPTi5zdHJpbmdpZnkoe3RvZG9zOiBbXX0pXG4gIGNhbGxiYWNrLmNhbGwodGhpcywgSlNPTi5w
YXJzZShsb2NhbFN0b3JhZ2VNZW1vcnlbdGhpcy5fZGJOYW1lXSkudG9kb3MpXG4gIHRoaXMuX25v
dGlmeSgpXG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zdG9yZS5qcyIsImV4
cG9ydCBkZWZhdWx0IFRlbXBsYXRlXG5cbnZhciBodG1sRXNjYXBlcyA9IHtcbiAgJyYnOiAnJmFt
cDsnLFxuICAnPCc6ICcmbHQ7JyxcbiAgJz4nOiAnJmd0OycsXG4gICdcIic6ICcmcXVvdDsnLFxu
ICAnXFwnJzogJyYjeDI3OycsXG4gICdgJzogJyYjeDYwOydcbn1cblxudmFyIGVzY2FwZUh0bWxD
aGFyID0gZnVuY3Rpb24oY2hyKSB7XG4gIHJldHVybiBodG1sRXNjYXBlc1tjaHJdXG59XG5cbnZh
ciByZVVuZXNjYXBlZEh0bWwgPSAvWyY8PlwiJ2BdL2dcbnZhciByZUhhc1VuZXNjYXBlZEh0bWwg
PSBuZXcgUmVnRXhwKHJlVW5lc2NhcGVkSHRtbC5zb3VyY2UpXG5cbnZhciBlc2NhcGUgPSBmdW5j
dGlvbihzdHJpbmcpIHtcbiAgaWYgKHN0cmluZyAmJiByZUhhc1VuZXNjYXBlZEh0bWwudGVzdChz
dHJpbmcpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKHJlVW5lc2NhcGVkSHRtbCwgZXNj
YXBlSHRtbENoYXIpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0cmluZ1xuICB9XG59XG5cbi8q
KlxuKiBTZXRzIHVwIGRlZmF1bHRzIGZvciBhbGwgdGhlIFRlbXBsYXRlIG1ldGhvZHMgc3VjaCBh
cyBhIGRlZmF1bHQgdGVtcGxhdGVcbipcbiogQGNvbnN0cnVjdG9yXG4qL1xuZnVuY3Rpb24gVGVt
cGxhdGUoKSB7XG4gIHRoaXMuZGVmYXVsdFRlbXBsYXRlID0gYFxuICAgIDxsaSBkYXRhLWlkPVwi
e3tpZH19XCIgY2xhc3M9XCJ7e2NvbXBsZXRlZH19XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidmll
d1wiPlxuICAgICAgICA8aW5wdXQgY2xhc3M9XCJ0b2dnbGVcIiB0eXBlPVwiY2hlY2tib3hcIiB7
e2NoZWNrZWR9fSAvPlxuICAgICAgICA8bGFiZWw+e3t0aXRsZX19PC9sYWJlbD5cbiAgICAgICAg
PGJ1dHRvbiBjbGFzcz1cImRlc3Ryb3lcIj48L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwv
bGk+XG4gIGBcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIDxsaT4gSFRNTCBzdHJpbmcgYW5kIHJl
dHVybnMgaXQgZm9yIHBsYWNlbWVudCBpbiB5b3VyIGFwcC5cbiAqXG4gKiBOT1RFOiBJbiByZWFs
IGxpZmUgeW91IHNob3VsZCBiZSB1c2luZyBhIHRlbXBsYXRpbmcgZW5naW5lIHN1Y2ggYXMgTXVz
dGFjaGVcbiAqIG9yIEhhbmRsZWJhcnMsIGhvd2V2ZXIsIHRoaXMgaXMgYSB2YW5pbGxhIEpTIGV4
YW1wbGUuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGRhdGEgVGhlIG9iamVjdCBjb250YWluaW5n
IGtleXMgeW91IHdhbnQgdG8gZmluZCBpbiB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgIHRl
bXBsYXRlIHRvIHJlcGxhY2UuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBIVE1MIFN0cmluZyBvZiBh
biA8bGk+IGVsZW1lbnRcbiAqXG4gKiBAZXhhbXBsZVxuICogdmlldy5zaG93KHtcbiAqICBpZDog
MSxcbiAqICB0aXRsZTogXCJIZWxsbyBXb3JsZFwiLFxuICogIGNvbXBsZXRlZDogMCxcbiAqIH0p
O1xuICovXG5UZW1wbGF0ZS5wcm90b3R5cGUuc2hvdyA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgdmFy
IGksIGxcbiAgdmFyIHZpZXcgPSAnJ1xuXG4gIGZvciAoaSA9IDAsIGwgPSBkYXRhLmxlbmd0aDsg
aSA8IGw7IGkrKykge1xuICAgIHZhciB0ZW1wbGF0ZSA9IHRoaXMuZGVmYXVsdFRlbXBsYXRlXG4g
ICAgdmFyIGNvbXBsZXRlZCA9ICcnXG4gICAgdmFyIGNoZWNrZWQgPSAnJ1xuXG4gICAgaWYgKGRh
dGFbaV0uY29tcGxldGVkKSB7XG4gICAgICBjb21wbGV0ZWQgPSAnY29tcGxldGVkJ1xuICAgICAg
Y2hlY2tlZCA9ICdjaGVja2VkJ1xuICAgIH1cblxuICAgIHRlbXBsYXRlID0gdGVtcGxhdGUucmVw
bGFjZSgne3tpZH19JywgZGF0YVtpXS5pZClcbiAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnJlcGxh
Y2UoJ3t7dGl0bGV9fScsIGVzY2FwZShkYXRhW2ldLnRpdGxlKSlcbiAgICB0ZW1wbGF0ZSA9IHRl
bXBsYXRlLnJlcGxhY2UoJ3t7Y29tcGxldGVkfX0nLCBjb21wbGV0ZWQpXG4gICAgdGVtcGxhdGUg
PSB0ZW1wbGF0ZS5yZXBsYWNlKCd7e2NoZWNrZWR9fScsIGNoZWNrZWQpXG5cbiAgICB2aWV3ID0g
dmlldyArIHRlbXBsYXRlXG4gIH1cblxuICByZXR1cm4gdmlld1xufVxuXG4vKipcbiAqIERpc3Bs
YXlzIGEgY291bnRlciBvZiBob3cgbWFueSB0byBkb3MgYXJlIGxlZnQgdG8gY29tcGxldGVcbiAq
XG4gKiBAcGFyYW0ge251bWJlcn0gYWN0aXZlVG9kb3MgVGhlIG51bWJlciBvZiBhY3RpdmUgdG9k
b3MuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBTdHJpbmcgY29udGFpbmluZyB0aGUgY291bnRcbiAq
L1xuVGVtcGxhdGUucHJvdG90eXBlLml0ZW1Db3VudGVyID0gZnVuY3Rpb24oYWN0aXZlVG9kb3Mp
IHtcbiAgdmFyIHBsdXJhbCA9IGFjdGl2ZVRvZG9zID09PSAxID8gJycgOiAncydcblxuICByZXR1
cm4gJzxzdHJvbmc+JyArIGFjdGl2ZVRvZG9zICsgJzwvc3Ryb25nPiBpdGVtJyArIHBsdXJhbCAr
ICcgbGVmdCdcbn1cblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB0ZXh0IHdpdGhpbiB0aGUgXCJDbGVh
ciBjb21wbGV0ZWRcIiBidXR0b25cbiAqXG4gKiBAcGFyYW0gIHtbdHlwZV19IGNvbXBsZXRlZFRv
ZG9zIFRoZSBudW1iZXIgb2YgY29tcGxldGVkIHRvZG9zLlxuICogQHJldHVybnMge3N0cmluZ30g
U3RyaW5nIGNvbnRhaW5pbmcgdGhlIGNvdW50XG4gKi9cblRlbXBsYXRlLnByb3RvdHlwZS5jbGVh
ckNvbXBsZXRlZEJ1dHRvbiA9IGZ1bmN0aW9uKGNvbXBsZXRlZFRvZG9zKSB7XG4gIGlmIChjb21w
bGV0ZWRUb2RvcyA+IDApIHtcbiAgICByZXR1cm4gJ0NsZWFyIGNvbXBsZXRlZCdcbiAgfSBlbHNl
IHtcbiAgICByZXR1cm4gJydcbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8v
IC4vdGVtcGxhdGUuanMiLCJpbXBvcnQgVmlldyBmcm9tICcuL3ZpZXcnXG5pbXBvcnQgQ29udHJv
bGxlciBmcm9tICcuL2NvbnRyb2xsZXInXG5pbXBvcnQgTW9kZWwgZnJvbSAnLi9tb2RlbCdcbmlt
cG9ydCBTdG9yZSBmcm9tICcuL3N0b3JlJ1xuaW1wb3J0IFRlbXBsYXRlIGZyb20gJy4vdGVtcGxh
dGUnXG5pbXBvcnQge3JlbW92ZX0gZnJvbSAnLi9oZWxwZXJzJ1xuXG5leHBvcnQge3VwZGF0ZVRv
ZG8sIGdldFRvZG8sIHN1YnNjcmliZX1cblxubGV0IHRvZG9cbmNvbnN0IHN1YnNjcmliZXJzID0g
W11cblxuLyoqXG4gKiBTZXRzIHVwIGEgYnJhbmQgbmV3IFRvZG8gbGlzdC5cbiAqXG4gKiBAcGFy
YW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB5b3VyIG5ldyB0byBkbyBsaXN0LlxuICovXG5m
dW5jdGlvbiBUb2RvKG5hbWUpIHtcbiAgdGhpcy5zdG9yYWdlID0gbmV3IFN0b3JlKG5hbWUpXG4g
IHRoaXMubW9kZWwgPSBuZXcgTW9kZWwodGhpcy5zdG9yYWdlKVxuICB0aGlzLnRlbXBsYXRlID0g
bmV3IFRlbXBsYXRlKClcbiAgdGhpcy52aWV3ID0gbmV3IFZpZXcodGhpcy50ZW1wbGF0ZSlcbiAg
dGhpcy5jb250cm9sbGVyID0gbmV3IENvbnRyb2xsZXIodGhpcy5tb2RlbCwgdGhpcy52aWV3KVxu
fVxuXG5mdW5jdGlvbiB1cGRhdGVUb2RvKCkge1xuICB0b2RvID0gbmV3IFRvZG8oJ3RvZG9zLXZh
bmlsbGFqcycpXG4gIHRvZG8uY29udHJvbGxlci5zZXRWaWV3KGRvY3VtZW50LmxvY2F0aW9uLmhh
c2gpXG4gIHN1YnNjcmliZXJzLmZvckVhY2gocyA9PiBzKCkpXG59XG5cbmZ1bmN0aW9uIGdldFRv
ZG8oKSB7XG4gIHJldHVybiB0b2RvXG59XG5cbmZ1bmN0aW9uIHN1YnNjcmliZShjYikge1xuICBz
dWJzY3JpYmVycy5wdXNoKGNiKVxuICByZXR1cm4gZnVuY3Rpb24gdW5zdWJzY3JpYmUoKSB7XG4g
ICAgcmVtb3ZlKHN1YnNjcmliZXJzLCBjYilcbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09U
RVIgLy9cbi8vIC4vdG9kby5qcyIsIi8qIGVzbGludCBuby1pbnZhbGlkLXRoaXM6IDAsIGNvbXBs
ZXhpdHk6WzIsIDldICovXG5pbXBvcnQge3FzLCBxc2EsICRvbiwgJHBhcmVudCwgJGRlbGVnYXRl
fSBmcm9tICcuL2hlbHBlcnMnXG5cbi8qKlxuICogVmlldyB0aGF0IGFic3RyYWN0cyBhd2F5IHRo
ZSBicm93c2VyJ3MgRE9NIGNvbXBsZXRlbHkuXG4gKiBJdCBoYXMgdHdvIHNpbXBsZSBlbnRyeSBw
b2ludHM6XG4gKlxuICogICAtIGJpbmQoZXZlbnROYW1lLCBoYW5kbGVyKVxuICogICAgIFRha2Vz
IGEgdG9kbyBhcHBsaWNhdGlvbiBldmVudCBhbmQgcmVnaXN0ZXJzIHRoZSBoYW5kbGVyXG4gKiAg
IC0gcmVuZGVyKGNvbW1hbmQsIHBhcmFtZXRlck9iamVjdClcbiAqICAgICBSZW5kZXJzIHRoZSBn
aXZlbiBjb21tYW5kIHdpdGggdGhlIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3Mg
VmlldyB7XG4gIGNvbnN0cnVjdG9yKHRlbXBsYXRlKSB7XG4gICAgdGhpcy50ZW1wbGF0ZSA9IHRl
bXBsYXRlXG5cbiAgICB0aGlzLkVOVEVSX0tFWSA9IDEzXG4gICAgdGhpcy5FU0NBUEVfS0VZID0g
MjdcblxuICAgIHRoaXMuJHRvZG9MaXN0ID0gcXMoJy50b2RvLWxpc3QnKVxuICAgIHRoaXMuJHRv
ZG9JdGVtQ291bnRlciA9IHFzKCcudG9kby1jb3VudCcpXG4gICAgdGhpcy4kY2xlYXJDb21wbGV0
ZWQgPSBxcygnLmNsZWFyLWNvbXBsZXRlZCcpXG4gICAgdGhpcy4kbWFpbiA9IHFzKCcubWFpbicp
XG4gICAgdGhpcy4kZm9vdGVyID0gcXMoJy5mb290ZXInKVxuICAgIHRoaXMuJHRvZ2dsZUFsbCA9
IHFzKCcudG9nZ2xlLWFsbCcpXG4gICAgdGhpcy4kbmV3VG9kbyA9IHFzKCcubmV3LXRvZG8nKVxu
ICB9XG5cbiAgX3JlbW92ZUl0ZW0oaWQpIHtcbiAgICB2YXIgZWxlbSA9IHFzKCdbZGF0YS1pZD1c
IicgKyBpZCArICdcIl0nKVxuXG4gICAgaWYgKGVsZW0pIHtcbiAgICAgIHRoaXMuJHRvZG9MaXN0
LnJlbW92ZUNoaWxkKGVsZW0pXG4gICAgfVxuICB9XG5cbiAgX2NsZWFyQ29tcGxldGVkQnV0dG9u
KGNvbXBsZXRlZENvdW50LCB2aXNpYmxlKSB7XG4gICAgdGhpcy4kY2xlYXJDb21wbGV0ZWQuaW5u
ZXJIVE1MID0gdGhpcy50ZW1wbGF0ZS5jbGVhckNvbXBsZXRlZEJ1dHRvbihjb21wbGV0ZWRDb3Vu
dClcbiAgICB0aGlzLiRjbGVhckNvbXBsZXRlZC5zdHlsZS5kaXNwbGF5ID0gdmlzaWJsZSA/ICdi
bG9jaycgOiAnbm9uZSdcbiAgfVxuXG4gIF9lZGl0SXRlbURvbmUoaWQsIHRpdGxlKSB7XG4gICAg
dmFyIGxpc3RJdGVtID0gcXMoJ1tkYXRhLWlkPVwiJyArIGlkICsgJ1wiXScpXG5cbiAgICBpZiAo
IWxpc3RJdGVtKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB2YXIgaW5wdXQgPSBxcygn
aW5wdXQuZWRpdCcsIGxpc3RJdGVtKVxuICAgIGxpc3RJdGVtLnJlbW92ZUNoaWxkKGlucHV0KVxu
XG4gICAgbGlzdEl0ZW0uY2xhc3NOYW1lID0gbGlzdEl0ZW0uY2xhc3NOYW1lLnJlcGxhY2UoJ2Vk
aXRpbmcnLCAnJylcblxuICAgIHFzYSgnbGFiZWwnLCBsaXN0SXRlbSkuZm9yRWFjaChmdW5jdGlv
bihsYWJlbCkge1xuICAgICAgbGFiZWwudGV4dENvbnRlbnQgPSB0aXRsZVxuICAgIH0pXG4gIH1c
blxuICByZW5kZXIodmlld0NtZCwgcGFyYW1ldGVyKSB7XG4gICAgdmFyIHRoYXQgPSB0aGlzXG4g
ICAgdmFyIHZpZXdDb21tYW5kcyA9IHtcbiAgICAgIHNob3dFbnRyaWVzOiBmdW5jdGlvbigpIHtc
biAgICAgICAgdGhhdC4kdG9kb0xpc3QuaW5uZXJIVE1MID0gdGhhdC50ZW1wbGF0ZS5zaG93KHBh
cmFtZXRlcilcbiAgICAgIH0sXG4gICAgICByZW1vdmVJdGVtOiBmdW5jdGlvbigpIHtcbiAgICAg
ICAgdGhhdC5fcmVtb3ZlSXRlbShwYXJhbWV0ZXIpXG4gICAgICB9LFxuICAgICAgdXBkYXRlRWxl
bWVudENvdW50OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhhdC4kdG9kb0l0ZW1Db3VudGVyLmlu
bmVySFRNTCA9IHRoYXQudGVtcGxhdGUuaXRlbUNvdW50ZXIocGFyYW1ldGVyKVxuICAgICAgfSxc
biAgICAgIGNsZWFyQ29tcGxldGVkQnV0dG9uOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhhdC5f
Y2xlYXJDb21wbGV0ZWRCdXR0b24ocGFyYW1ldGVyLmNvbXBsZXRlZCwgcGFyYW1ldGVyLnZpc2li
bGUpXG4gICAgICB9LFxuICAgICAgY29udGVudEJsb2NrVmlzaWJpbGl0eTogZnVuY3Rpb24oKSB7
XG4gICAgICAgIHRoYXQuJG1haW4uc3R5bGUuZGlzcGxheSA9IHRoYXQuJGZvb3Rlci5zdHlsZS5k
aXNwbGF5ID0gcGFyYW1ldGVyLnZpc2libGUgPyAnYmxvY2snIDogJ25vbmUnXG4gICAgICB9LFxu
ICAgICAgdG9nZ2xlQWxsOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhhdC4kdG9nZ2xlQWxsLmNo
ZWNrZWQgPSBwYXJhbWV0ZXIuY2hlY2tlZFxuICAgICAgfSxcbiAgICAgIHNldEZpbHRlcjogZnVu
Y3Rpb24oKSB7XG4gICAgICAgIF9zZXRGaWx0ZXIocGFyYW1ldGVyKVxuICAgICAgfSxcbiAgICAg
IGNsZWFyTmV3VG9kbzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoYXQuJG5ld1RvZG8udmFsdWUg
PSAnJ1xuICAgICAgfSxcbiAgICAgIGVsZW1lbnRDb21wbGV0ZTogZnVuY3Rpb24oKSB7XG4gICAg
ICAgIF9lbGVtZW50Q29tcGxldGUocGFyYW1ldGVyLmlkLCBwYXJhbWV0ZXIuY29tcGxldGVkKVxu
ICAgICAgfSxcbiAgICAgIGVkaXRJdGVtOiBmdW5jdGlvbigpIHtcbiAgICAgICAgX2VkaXRJdGVt
KHBhcmFtZXRlci5pZCwgcGFyYW1ldGVyLnRpdGxlKVxuICAgICAgfSxcbiAgICAgIGVkaXRJdGVt
RG9uZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoYXQuX2VkaXRJdGVtRG9uZShwYXJhbWV0ZXIu
aWQsIHBhcmFtZXRlci50aXRsZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2aWV3Q29tbWFuZHNb
dmlld0NtZF0oKVxuICB9XG5cbiAgX2JpbmRJdGVtRWRpdERvbmUoaGFuZGxlcikge1xuICAgIHZh
ciB0aGF0ID0gdGhpc1xuICAgICRkZWxlZ2F0ZSh0aGF0LiR0b2RvTGlzdCwgJ2xpIC5lZGl0Jywg
J2JsdXInLCBmdW5jdGlvbigpIHtcbiAgICAgIGlmICghdGhpcy5kYXRhc2V0LmlzY2FuY2VsZWQp
IHtcbiAgICAgICAgaGFuZGxlcih7XG4gICAgICAgICAgaWQ6IF9pdGVtSWQodGhpcyksXG4gICAg
ICAgICAgdGl0bGU6IHRoaXMudmFsdWVcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuXG4g
ICAgJGRlbGVnYXRlKHRoYXQuJHRvZG9MaXN0LCAnbGkgLmVkaXQnLCAna2V5cHJlc3MnLCBmdW5j
dGlvbihldmVudCkge1xuICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IHRoYXQuRU5URVJfS0VZ
KSB7XG4gICAgICAgIC8vIFJlbW92ZSB0aGUgY3Vyc29yIGZyb20gdGhlIGlucHV0IHdoZW4geW91
IGhpdCBlbnRlciBqdXN0IGxpa2UgaWYgaXRcbiAgICAgICAgLy8gd2VyZSBhIHJlYWwgZm9ybVxu
ICAgICAgICB0aGlzLmJsdXIoKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBfYmluZEl0ZW1F
ZGl0Q2FuY2VsKGhhbmRsZXIpIHtcbiAgICB2YXIgdGhhdCA9IHRoaXNcbiAgICAkZGVsZWdhdGUo
dGhhdC4kdG9kb0xpc3QsICdsaSAuZWRpdCcsICdrZXl1cCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4g
ICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gdGhhdC5FU0NBUEVfS0VZKSB7XG4gICAgICAgIHRo
aXMuZGF0YXNldC5pc2NhbmNlbGVkID0gdHJ1ZVxuICAgICAgICB0aGlzLmJsdXIoKVxuXG4gICAg
ICAgIGhhbmRsZXIoe2lkOiBfaXRlbUlkKHRoaXMpfSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5c
biAgYmluZChldmVudCwgaGFuZGxlcikge1xuICAgIHZhciB0aGF0ID0gdGhpc1xuICAgIGlmIChl
dmVudCA9PT0gJ25ld1RvZG8nKSB7XG4gICAgICAkb24odGhhdC4kbmV3VG9kbywgJ2NoYW5nZScs
IGZ1bmN0aW9uKCkge1xuICAgICAgICBoYW5kbGVyKHRoYXQuJG5ld1RvZG8udmFsdWUpXG4gICAg
ICB9KVxuXG4gICAgfSBlbHNlIGlmIChldmVudCA9PT0gJ3JlbW92ZUNvbXBsZXRlZCcpIHtcbiAg
ICAgICRvbih0aGF0LiRjbGVhckNvbXBsZXRlZCwgJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG4gICAg
ICAgIGhhbmRsZXIoKVxuICAgICAgfSlcblxuICAgIH0gZWxzZSBpZiAoZXZlbnQgPT09ICd0b2dn
bGVBbGwnKSB7XG4gICAgICAkb24odGhhdC4kdG9nZ2xlQWxsLCAnY2xpY2snLCBmdW5jdGlvbigp
IHtcbiAgICAgICAgaGFuZGxlcih7Y29tcGxldGVkOiB0aGlzLmNoZWNrZWR9KVxuICAgICAgfSlc
blxuICAgIH0gZWxzZSBpZiAoZXZlbnQgPT09ICdpdGVtRWRpdCcpIHtcbiAgICAgICRkZWxlZ2F0
ZSh0aGF0LiR0b2RvTGlzdCwgJ2xpIGxhYmVsJywgJ2RibGNsaWNrJywgZnVuY3Rpb24oKSB7XG4g
ICAgICAgIGhhbmRsZXIoe2lkOiBfaXRlbUlkKHRoaXMpfSlcbiAgICAgIH0pXG5cbiAgICB9IGVs
c2UgaWYgKGV2ZW50ID09PSAnaXRlbVJlbW92ZScpIHtcbiAgICAgICRkZWxlZ2F0ZSh0aGF0LiR0
b2RvTGlzdCwgJy5kZXN0cm95JywgJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG4gICAgICAgIGhhbmRs
ZXIoe2lkOiBfaXRlbUlkKHRoaXMpfSlcbiAgICAgIH0pXG5cbiAgICB9IGVsc2UgaWYgKGV2ZW50
ID09PSAnaXRlbVRvZ2dsZScpIHtcbiAgICAgICRkZWxlZ2F0ZSh0aGF0LiR0b2RvTGlzdCwgJy50
b2dnbGUnLCAnY2xpY2snLCBmdW5jdGlvbigpIHtcbiAgICAgICAgaGFuZGxlcih7XG4gICAgICAg
ICAgaWQ6IF9pdGVtSWQodGhpcyksXG4gICAgICAgICAgY29tcGxldGVkOiB0aGlzLmNoZWNrZWRc
biAgICAgICAgfSlcbiAgICAgIH0pXG5cbiAgICB9IGVsc2UgaWYgKGV2ZW50ID09PSAnaXRlbUVk
aXREb25lJykge1xuICAgICAgdGhhdC5fYmluZEl0ZW1FZGl0RG9uZShoYW5kbGVyKVxuXG4gICAg
fSBlbHNlIGlmIChldmVudCA9PT0gJ2l0ZW1FZGl0Q2FuY2VsJykge1xuICAgICAgdGhhdC5fYmlu
ZEl0ZW1FZGl0Q2FuY2VsKGhhbmRsZXIpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIF9zZXRG
aWx0ZXIoY3VycmVudFBhZ2UpIHtcbiAgcXMoJy5maWx0ZXJzIC5zZWxlY3RlZCcpLmNsYXNzTmFt
ZSA9ICcnXG4gIHFzKCcuZmlsdGVycyBbaHJlZj1cIiMvJyArIGN1cnJlbnRQYWdlICsgJ1wiXScp
LmNsYXNzTmFtZSA9ICdzZWxlY3RlZCdcbn1cblxuZnVuY3Rpb24gX2VsZW1lbnRDb21wbGV0ZShp
ZCwgY29tcGxldGVkKSB7XG4gIHZhciBsaXN0SXRlbSA9IHFzKCdbZGF0YS1pZD1cIicgKyBpZCAr
ICdcIl0nKVxuXG4gIGlmICghbGlzdEl0ZW0pIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGxpc3RJ
dGVtLmNsYXNzTmFtZSA9IGNvbXBsZXRlZCA/ICdjb21wbGV0ZWQnIDogJydcblxuICAvLyBJbiBj
YXNlIGl0IHdhcyB0b2dnbGVkIGZyb20gYW4gZXZlbnQgYW5kIG5vdCBieSBjbGlja2luZyB0aGUg
Y2hlY2tib3hcbiAgcXMoJ2lucHV0JywgbGlzdEl0ZW0pLmNoZWNrZWQgPSBjb21wbGV0ZWRcbn1c
blxuZnVuY3Rpb24gX2VkaXRJdGVtKGlkLCB0aXRsZSkge1xuICB2YXIgbGlzdEl0ZW0gPSBxcygn
W2RhdGEtaWQ9XCInICsgaWQgKyAnXCJdJylcblxuICBpZiAoIWxpc3RJdGVtKSB7XG4gICAgcmV0
dXJuXG4gIH1cblxuICBsaXN0SXRlbS5jbGFzc05hbWUgPSBsaXN0SXRlbS5jbGFzc05hbWUgKyAn
IGVkaXRpbmcnXG5cbiAgdmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQn
KVxuICBpbnB1dC5jbGFzc05hbWUgPSAnZWRpdCdcblxuICBsaXN0SXRlbS5hcHBlbmRDaGlsZChp
bnB1dClcbiAgaW5wdXQuZm9jdXMoKVxuICBpbnB1dC52YWx1ZSA9IHRpdGxlXG59XG5cbmZ1bmN0
aW9uIF9pdGVtSWQoZWxlbWVudCkge1xuICB2YXIgbGkgPSAkcGFyZW50KGVsZW1lbnQsICdsaScp
XG4gIHJldHVybiBwYXJzZUludChsaS5kYXRhc2V0LmlkLCAxMClcbn1cblxuXG5cbi8vIFdFQlBB
Q0sgRk9PVEVSIC8vXG4vLyAuL3ZpZXcuanMiLCIvKiBlc2xpbnQgbm8tY29uc29sZTowICovXG5p
bXBvcnQge29uTG9hZH0gZnJvbSAnLi9hcHAnXG5pbXBvcnQgeyRvbn0gZnJvbSAnLi9oZWxwZXJz
J1xuXG4vLyB0aGlzIGlzIG9ubHkgcmVsZXZhbnQgd2hlbiB1c2luZyBgaG90YCBtb2RlIHdpdGgg
d2VicGFja1xuLy8gc3BlY2lhbCB0aGFua3MgdG8gRXJpYyBDbGVtbW9uczogaHR0cHM6Ly9naXRo
dWIuY29tL2VyaWNjbGVtbW9ucy93ZWJwYWNrLWhvdC1zZXJ2ZXItZXhhbXBsZVxuY29uc3QgcmVs
b2FkaW5nID0gZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJ1xuaWYgKG1vZHVsZS5o
b3QpIHtcbiAgbW9kdWxlLmhvdC5hY2NlcHQoZnVuY3Rpb24oZXJyKSB7XG4gIH0pXG4gIGlmIChy
ZWxvYWRpbmcpIHtcbiAgICBvbkxvYWQoKVxuICB9IGVsc2Uge1xuICAgIGJvb3RzdHJhcCgpXG4g
IH1cbn0gZWxzZSB7XG4gIGJvb3RzdHJhcCgpXG59XG5cbmZ1bmN0aW9uIGJvb3RzdHJhcCgpIHtc
biAgJG9uKHdpbmRvdywgJ2xvYWQnLCBvbkxvYWQpXG4gICRvbih3aW5kb3csICdoYXNoY2hhbmdl
Jywgb25Mb2FkKVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vYm9vdHN0cmFw
LmpzIl0sInNvdXJjZVJvb3QiOiIifQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAt
LWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2Vz
L3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9kaXN0L2J1bmRs
ZS5tYW5pZmVzdC5lODExOTliMDBkYTI5MjFkOWM5NC5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5j
aC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9l
czIwMTUtYmFiZWwtd2VicGFjay9kaXN0L2J1bmRsZS5tYW5pZmVzdC5lODExOTliMDBkYTI5MjFk
OWM5NC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5iNDU2Yjk3MzlmOTZmNzVkNmMyMzUwMTg1ODEyMDJlYzgyNzU3
Y2NkCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9t
ZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13
ZWJwYWNrL2Rpc3QvYnVuZGxlLm1hbmlmZXN0LmU4MTE5OWIwMGRhMjkyMWQ5Yzk0LmpzCkBAIC0w
LDAgKzEsMiBAQAorIWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIobil7aWYodFtuXSlyZXR1cm4gdFtu
XS5leHBvcnRzO3ZhciBvPXRbbl09e2k6bixsOiExLGV4cG9ydHM6e319O3JldHVybiBlW25dLmNh
bGwoby5leHBvcnRzLG8sby5leHBvcnRzLHIpLG8ubD0hMCxvLmV4cG9ydHN9dmFyIG49d2luZG93
LndlYnBhY2tKc29ucDt3aW5kb3cud2VicGFja0pzb25wPWZ1bmN0aW9uKHQsdSxjKXtmb3IodmFy
IGksYSxmLGw9MCxzPVtdO2w8dC5sZW5ndGg7bCsrKWE9dFtsXSxvW2FdJiZzLnB1c2gob1thXVsw
XSksb1thXT0wO2ZvcihpIGluIHUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxs
KHUsaSkmJihlW2ldPXVbaV0pO2ZvcihuJiZuKHQsdSxjKTtzLmxlbmd0aDspcy5zaGlmdCgpKCk7
aWYoYylmb3IobD0wO2w8Yy5sZW5ndGg7bCsrKWY9cihyLnM9Y1tsXSk7cmV0dXJuIGZ9O3ZhciB0
PXt9LG89ezI6MH07ci5lPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXt1Lm9uZXJyb3I9dS5vbmxv
YWQ9bnVsbCxjbGVhclRpbWVvdXQoYyk7dmFyIHI9b1tlXTswIT09ciYmKHImJnJbMV0obmV3IEVy
cm9yKCJMb2FkaW5nIGNodW5rICIrZSsiIGZhaWxlZC4iKSksb1tlXT12b2lkIDApfWlmKDA9PT1v
W2VdKXJldHVybiBQcm9taXNlLnJlc29sdmUoKTtpZihvW2VdKXJldHVybiBvW2VdWzJdO3ZhciB0
PWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0sdT1kb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJzY3JpcHQiKTt1LnR5cGU9InRleHQvamF2YXNjcmlwdCIsdS5jaGFyc2V0PSJ1
dGYtOCIsdS5hc3luYz0hMCx1LnRpbWVvdXQ9MTJlNCx1LnNyYz1yLnArImJ1bmRsZS4iK2UrIi4i
K3swOiI5MzBhZDhiODMxMjY4NjJkNzQ0NSIsMToiNTc3YzZiYzA5MzE5YjI3ZmVkMzQifVtlXSsi
LmpzIjt2YXIgYz1zZXRUaW1lb3V0KG4sMTJlNCk7dS5vbmVycm9yPXUub25sb2FkPW4sdC5hcHBl
bmRDaGlsZCh1KTt2YXIgaT1uZXcgUHJvbWlzZShmdW5jdGlvbihyLG4pe29bZV09W3Isbl19KTty
ZXR1cm4gb1tlXVsyXT1pfSxyLm09ZSxyLmM9dCxyLmk9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHIu
ZD1mdW5jdGlvbihlLHIsbil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUscix7Y29uZmlndXJhYmxl
OiExLGVudW1lcmFibGU6ITAsZ2V0Om59KX0sci5uPWZ1bmN0aW9uKGUpe3ZhciBuPWUmJmUuX19l
c01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBlWyJkZWZhdWx0Il19OmZ1bmN0aW9uKCl7cmV0dXJu
IGV9O3JldHVybiByLmQobiwiYSIsbiksbn0sci5vPWZ1bmN0aW9uKGUscil7cmV0dXJuIE9iamVj
dC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpfSxyLnA9IiIsci5vZT1mdW5jdGlv
bihlKXt0aHJvdyBjb25zb2xlLmVycm9yKGUpLGV9fShbXSk7CisvLyMgc291cmNlTWFwcGluZ1VS
TD1idW5kbGUubWFuaWZlc3QuZTgxMTk5YjAwZGEyOTIxZDljOTQuanMubWFwClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9T
cGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1i
YWJlbC13ZWJwYWNrL2Rpc3QvYnVuZGxlLm1hbmlmZXN0LmU4MTE5OWIwMGRhMjkyMWQ5Yzk0Lmpz
Lm1hcCBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2Vz
L3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9kaXN0L2J1bmRs
ZS5tYW5pZmVzdC5lODExOTliMDBkYTI5MjFkOWM5NC5qcy5tYXAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWI0YzM1
ZTQ5NTg5ZDlmNzYzNjU4NTU4ZThkODFiOGIyMTJiNWRjNwotLS0gL2Rldi9udWxsCisrKyBiL1dl
YnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMv
dmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9kaXN0L2J1bmRsZS5tYW5pZmVz
dC5lODExOTliMDBkYTI5MjFkOWM5NC5qcy5tYXAKQEAgLTAsMCArMSBAQAoreyJ2ZXJzaW9uIjoz
LCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vYnVuZGxlLm1hbmlmZXN0LmU4MTE5OWIwMGRhMjkyMWQ5
Yzk0LmpzIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCA0Y2JkM2U4MDY4NGJkNzcwODJi
MCJdLCJuYW1lcyI6WyJtb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwi
aW5zdGFsbGVkTW9kdWxlcyIsImV4cG9ydHMiLCJtb2R1bGUiLCJpIiwibCIsImNhbGwiLCJwYXJl
bnRKc29ucEZ1bmN0aW9uIiwid2luZG93IiwiY2h1bmtJZHMiLCJtb3JlTW9kdWxlcyIsImV4ZWN1
dGVNb2R1bGVzIiwiY2h1bmtJZCIsInJlc3VsdCIsInJlc29sdmVzIiwibGVuZ3RoIiwiaW5zdGFs
bGVkQ2h1bmtzIiwicHVzaCIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5Iiwi
c2hpZnQiLCJzIiwiMiIsImUiLCJvblNjcmlwdENvbXBsZXRlIiwic2NyaXB0Iiwib25lcnJvciIs
Im9ubG9hZCIsImNsZWFyVGltZW91dCIsInRpbWVvdXQiLCJjaHVuayIsIkVycm9yIiwidW5kZWZp
bmVkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJoZWFkIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50c0J5
VGFnTmFtZSIsImNyZWF0ZUVsZW1lbnQiLCJ0eXBlIiwiY2hhcnNldCIsImFzeW5jIiwic3JjIiwi
cCIsIjAiLCIxIiwic2V0VGltZW91dCIsImFwcGVuZENoaWxkIiwicHJvbWlzZSIsInJlamVjdCIs
Im0iLCJjIiwidmFsdWUiLCJkIiwibmFtZSIsImdldHRlciIsImRlZmluZVByb3BlcnR5IiwiY29u
ZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsImdldCIsIm4iLCJfX2VzTW9kdWxlIiwibyIsIm9iamVj
dCIsInByb3BlcnR5Iiwib2UiLCJlcnIiLCJjb25zb2xlIiwiZXJyb3IiXSwibWFwcGluZ3MiOiJD
QUFTLFNBQVVBLEdDcUNuQixRQUFBQyxHQUFBQyxHQUdBLEdBQUFDLEVBQUFELEdBQ0EsTUFBQUMs
R0FBQUQsR0FBQUUsT0FHQSxJQUFBQyxHQUFBRixFQUFBRCxJQUNBSSxFQUFBSixFQUNBSyxHQUFB
LEVBQ0FILFdBVUEsT0FOQUosR0FBQUUsR0FBQU0sS0FBQUgsRUFBQUQsUUFBQUMsSUFBQUQsUUFB
QUgsR0FHQUksRUFBQUUsR0FBQSxFQUdBRixFQUFBRCxRQXhEQSxHQUFBSyxHQUFBQyxPQUFBLFlB
Q0FBLFFBQUEsc0JBQUFDLEVBQUFDLEVBQUFDLEdBSUEsSUFEQSxHQUFBWCxHQUFBWSxFQUFBQyxF
QUFBVCxFQUFBLEVBQUFVLEtBQ1FWLEVBQUFLLEVBQUFNLE9BQW9CWCxJQUM1QlEsRUFBQUgsRUFB
QUwsR0FDQVksRUFBQUosSUFDQUUsRUFBQUcsS0FBQUQsRUFBQUosR0FBQSxJQUNBSSxFQUFBSixH
QUFBLENBRUEsS0FBQVosSUFBQVUsR0FDQVEsT0FBQUMsVUFBQUMsZUFBQWQsS0FBQUksRUFBQVYs
S0FDQUYsRUFBQUUsR0FBQVUsRUFBQVYsR0FJQSxLQURBTyxLQUFBRSxFQUFBQyxFQUFBQyxHQUNB
RyxFQUFBQyxRQUNBRCxFQUFBTyxTQUNBLElBQUFWLEVBQ0EsSUFBQVAsRUFBQSxFQUFZQSxFQUFB
TyxFQUFBSSxPQUEyQlgsSUFDdkNTLEVBQUFkLElBQUF1QixFQUFBWCxFQUFBUCxHQUdBLE9BQUFT
LEdBSUEsSUFBQVosTUFHQWUsR0FDQU8sRUFBQSxFQTZCQXhCLEdBQUF5QixFQUFBLFNBQUFaLEdB
bUJBLFFBQUFhLEtBRUFDLEVBQUFDLFFBQUFELEVBQUFFLE9BQUEsS0FDQUMsYUFBQUMsRUFDQSxJ
QUFBQyxHQUFBZixFQUFBSixFQUNBLEtBQUFtQixJQUNBQSxLQUFBLE1BQUFDLE9BQUEsaUJBQUFw
QixFQUFBLGFBQ0FJLEVBQUFKLEdBQUFxQixRQXpCQSxPQUFBakIsRUFBQUosR0FDQSxNQUFBc0Is
U0FBQUMsU0FHQSxJQUFBbkIsRUFBQUosR0FDQSxNQUFBSSxHQUFBSixHQUFBLEVBR0EsSUFBQXdC
LEdBQUFDLFNBQUFDLHFCQUFBLFdBQ0FaLEVBQUFXLFNBQUFFLGNBQUEsU0FDQWIsR0FBQWMsS0FB
QSxrQkFDQWQsRUFBQWUsUUFBQSxRQUNBZixFQUFBZ0IsT0FBQSxFQUNBaEIsRUFBQUksUUFBQSxL
QUVBSixFQUFBaUIsSUFBQTVDLEVBQUE2QyxFQUFBLFVBQUFoQyxFQUFBLEtBQXFFaUMsRUFBQSx1
QkFBQUMsRUFBQSx3QkFBc0RsQyxHQUFBLEtBQzNILElBQUFrQixHQUFBaUIsV0FBQXRCLEVBQUEs
S0FDQUMsR0FBQUMsUUFBQUQsRUFBQUUsT0FBQUgsRUFXQVcsRUFBQVksWUFBQXRCLEVBRUEsSUFB
QXVCLEdBQUEsR0FBQWYsU0FBQSxTQUFBQyxFQUFBZSxHQUNBbEMsRUFBQUosSUFBQXVCLEVBQUFl
LElBRUEsT0FBQWxDLEdBQUFKLEdBQUEsR0FBQXFDLEdBSUFsRCxFQUFBb0QsRUFBQXJELEVBR0FD
LEVBQUFxRCxFQUFBbkQsRUFHQUYsRUFBQUssRUFBQSxTQUFBaUQsR0FBMkMsTUFBQUEsSUFHM0N0
RCxFQUFBdUQsRUFBQSxTQUFBcEQsRUFBQXFELEVBQUFDLEdBQ0F0QyxPQUFBdUMsZUFBQXZELEVB
QUFxRCxHQUNBRyxjQUFBLEVBQ0FDLFlBQUEsRUFDQUMsSUFBQUosS0FLQXpELEVBQUE4RCxFQUFB
LFNBQUExRCxHQUNBLEdBQUFxRCxHQUFBckQsS0FBQTJELFdBQ0EsV0FBMkIsTUFBQTNELEdBQUEs
WUFDM0IsV0FBaUMsTUFBQUEsR0FFakMsT0FEQUosR0FBQXVELEVBQUFFLEVBQUEsSUFBQUEsR0FD
QUEsR0FJQXpELEVBQUFnRSxFQUFBLFNBQUFDLEVBQUFDLEdBQXNELE1BQUEvQyxRQUFBQyxVQUFB
QyxlQUFBZCxLQUFBMEQsRUFBQUMsSUFHdERsRSxFQUFBNkMsRUFBQSxHQUdBN0MsRUFBQW1FLEdB
QUEsU0FBQUMsR0FBOEQsS0FBcEJDLFNBQUFDLE1BQUFGLEdBQW9CQSIsImZpbGUiOiJidW5kbGUu
bWFuaWZlc3QuZTgxMTk5YjAwZGEyOTIxZDljOTQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKioq
KioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBc
dC8vIGluc3RhbGwgYSBKU09OUCBjYWxsYmFjayBmb3IgY2h1bmsgbG9hZGluZ1xuLyoqKioqKi8g
XHR2YXIgcGFyZW50SnNvbnBGdW5jdGlvbiA9IHdpbmRvd1tcIndlYnBhY2tKc29ucFwiXTtcbi8q
KioqKiovIFx0d2luZG93W1wid2VicGFja0pzb25wXCJdID0gZnVuY3Rpb24gd2VicGFja0pzb25w
Q2FsbGJhY2soY2h1bmtJZHMsIG1vcmVNb2R1bGVzLCBleGVjdXRlTW9kdWxlcykge1xuLyoqKioq
Ki8gXHRcdC8vIGFkZCBcIm1vcmVNb2R1bGVzXCIgdG8gdGhlIG1vZHVsZXMgb2JqZWN0LFxuLyoq
KioqKi8gXHRcdC8vIHRoZW4gZmxhZyBhbGwgXCJjaHVua0lkc1wiIGFzIGxvYWRlZCBhbmQgZmly
ZSBjYWxsYmFja1xuLyoqKioqKi8gXHRcdHZhciBtb2R1bGVJZCwgY2h1bmtJZCwgaSA9IDAsIHJl
c29sdmVzID0gW10sIHJlc3VsdDtcbi8qKioqKiovIFx0XHRmb3IoO2kgPCBjaHVua0lkcy5sZW5n
dGg7IGkrKykge1xuLyoqKioqKi8gXHRcdFx0Y2h1bmtJZCA9IGNodW5rSWRzW2ldO1xuLyoqKioq
Ki8gXHRcdFx0aWYoaW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdKVxuLyoqKioqKi8gXHRcdFx0XHRy
ZXNvbHZlcy5wdXNoKGluc3RhbGxlZENodW5rc1tjaHVua0lkXVswXSk7XG4vKioqKioqLyBcdFx0
XHRpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF0gPSAwO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiov
IFx0XHRmb3IobW9kdWxlSWQgaW4gbW9yZU1vZHVsZXMpIHtcbi8qKioqKiovIFx0XHRcdGlmKE9i
amVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb3JlTW9kdWxlcywgbW9kdWxlSWQp
KSB7XG4vKioqKioqLyBcdFx0XHRcdG1vZHVsZXNbbW9kdWxlSWRdID0gbW9yZU1vZHVsZXNbbW9k
dWxlSWRdO1xuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHRp
ZihwYXJlbnRKc29ucEZ1bmN0aW9uKSBwYXJlbnRKc29ucEZ1bmN0aW9uKGNodW5rSWRzLCBtb3Jl
TW9kdWxlcywgZXhlY3V0ZU1vZHVsZXMpO1xuLyoqKioqKi8gXHRcdHdoaWxlKHJlc29sdmVzLmxl
bmd0aClcbi8qKioqKiovIFx0XHRcdHJlc29sdmVzLnNoaWZ0KCkoKTtcbi8qKioqKiovIFx0XHRp
ZihleGVjdXRlTW9kdWxlcykge1xuLyoqKioqKi8gXHRcdFx0Zm9yKGk9MDsgaSA8IGV4ZWN1dGVN
b2R1bGVzLmxlbmd0aDsgaSsrKSB7XG4vKioqKioqLyBcdFx0XHRcdHJlc3VsdCA9IF9fd2VicGFj
a19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gZXhlY3V0ZU1vZHVsZXNbaV0pO1xu
LyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHRyZXR1cm4gcmVz
dWx0O1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBj
YWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8q
KioqKiovIFx0Ly8gb2JqZWN0cyB0byBzdG9yZSBsb2FkZWQgYW5kIGxvYWRpbmcgY2h1bmtzXG4v
KioqKioqLyBcdHZhciBpbnN0YWxsZWRDaHVua3MgPSB7XG4vKioqKioqLyBcdFx0MjogMFxuLyoq
KioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25c
bi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoq
KioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioq
KiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSlcbi8qKioqKiovIFx0XHRcdHJl
dHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi9cbi8qKioq
KiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hl
KVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9
IHtcbi8qKioqKiovIFx0XHRcdGk6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bDogZmFsc2Us
XG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqL1xu
LyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRc
dG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4
cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBG
bGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmwgPSB0cnVlO1xu
LyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVs
ZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoq
KioqKi9cbi8qKioqKiovIFx0Ly8gVGhpcyBmaWxlIGNvbnRhaW5zIG9ubHkgdGhlIGVudHJ5IGNo
dW5rLlxuLyoqKioqKi8gXHQvLyBUaGUgY2h1bmsgbG9hZGluZyBmdW5jdGlvbiBmb3IgYWRkaXRp
b25hbCBjaHVua3Ncbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5lID0gZnVuY3Rpb24g
cmVxdWlyZUVuc3VyZShjaHVua0lkKSB7XG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkQ2h1bmtz
W2NodW5rSWRdID09PSAwKVxuLyoqKioqKi8gXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgp
O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBhbiBQcm9taXNlIG1lYW5zIFwiY3VycmVudGx5
IGxvYWRpbmdcIi5cbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF0pIHtc
bi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF1bMl07XG4vKioq
KioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIHN0YXJ0IGNodW5rIGxvYWRpbmdcbi8qKioqKiov
IFx0XHR2YXIgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07
XG4vKioqKioqLyBcdFx0dmFyIHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3Njcmlw
dCcpO1xuLyoqKioqKi8gXHRcdHNjcmlwdC50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7XG4vKioq
KioqLyBcdFx0c2NyaXB0LmNoYXJzZXQgPSAndXRmLTgnO1xuLyoqKioqKi8gXHRcdHNjcmlwdC5h
c3luYyA9IHRydWU7XG4vKioqKioqLyBcdFx0c2NyaXB0LnRpbWVvdXQgPSAxMjAwMDA7XG4vKioq
KioqL1xuLyoqKioqKi8gXHRcdHNjcmlwdC5zcmMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLnAgKyBc
ImJ1bmRsZS5cIiArIGNodW5rSWQgKyBcIi5cIiArIHtcIjBcIjpcIjkzMGFkOGI4MzEyNjg2MmQ3
NDQ1XCIsXCIxXCI6XCI1NzdjNmJjMDkzMTliMjdmZWQzNFwifVtjaHVua0lkXSArIFwiLmpzXCI7
XG4vKioqKioqLyBcdFx0dmFyIHRpbWVvdXQgPSBzZXRUaW1lb3V0KG9uU2NyaXB0Q29tcGxldGUs
IDEyMDAwMCk7XG4vKioqKioqLyBcdFx0c2NyaXB0Lm9uZXJyb3IgPSBzY3JpcHQub25sb2FkID0g
b25TY3JpcHRDb21wbGV0ZTtcbi8qKioqKiovIFx0XHRmdW5jdGlvbiBvblNjcmlwdENvbXBsZXRl
KCkge1xuLyoqKioqKi8gXHRcdFx0Ly8gYXZvaWQgbWVtIGxlYWtzIGluIElFLlxuLyoqKioqKi8g
XHRcdFx0c2NyaXB0Lm9uZXJyb3IgPSBzY3JpcHQub25sb2FkID0gbnVsbDtcbi8qKioqKiovIFx0
XHRcdGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbi8qKioqKiovIFx0XHRcdHZhciBjaHVuayA9IGlu
c3RhbGxlZENodW5rc1tjaHVua0lkXTtcbi8qKioqKiovIFx0XHRcdGlmKGNodW5rICE9PSAwKSB7
XG4vKioqKioqLyBcdFx0XHRcdGlmKGNodW5rKSBjaHVua1sxXShuZXcgRXJyb3IoJ0xvYWRpbmcg
Y2h1bmsgJyArIGNodW5rSWQgKyAnIGZhaWxlZC4nKSk7XG4vKioqKioqLyBcdFx0XHRcdGluc3Rh
bGxlZENodW5rc1tjaHVua0lkXSA9IHVuZGVmaW5lZDtcbi8qKioqKiovIFx0XHRcdH1cbi8qKioq
KiovIFx0XHR9O1xuLyoqKioqKi8gXHRcdGhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbi8qKioq
KiovXG4vKioqKioqLyBcdFx0dmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNv
bHZlLCByZWplY3QpIHtcbi8qKioqKiovIFx0XHRcdGluc3RhbGxlZENodW5rc1tjaHVua0lkXSA9
IFtyZXNvbHZlLCByZWplY3RdO1xuLyoqKioqKi8gXHRcdH0pO1xuLyoqKioqKi8gXHRcdHJldHVy
biBpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF1bMl0gPSBwcm9taXNlO1xuLyoqKioqKi8gXHR9O1xu
LyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJw
YWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxl
cztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioq
KioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioq
L1xuLyoqKioqKi8gXHQvLyBpZGVudGl0eSBmdW5jdGlvbiBmb3IgY2FsbGluZyBoYXJtb3J5IGlt
cG9ydHMgd2l0aCB0aGUgY29ycmVjdCBjb250ZXh0XG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1
aXJlX18uaSA9IGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcbi8qKioqKiovXG4v
KioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vcnkgZXhwb3J0c1xu
LyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1l
LCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywg
bmFtZSwge1xuLyoqKioqKi8gXHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbi8qKioqKiovIFx0
XHRcdGVudW1lcmFibGU6IHRydWUsXG4vKioqKioqLyBcdFx0XHRnZXQ6IGdldHRlclxuLyoqKioq
Ki8gXHRcdH0pO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVm
YXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1v
ZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxl
KSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVs
ZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxl
WydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0
cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8q
KioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFz
T3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5j
dGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blBy
b3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQv
LyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9f
LnAgPSBcIlwiO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gb24gZXJyb3IgZnVuY3Rpb24gZm9y
IGFzeW5jIGxvYWRpbmdcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vZSA9IGZ1bmN0
aW9uKGVycikgeyBjb25zb2xlLmVycm9yKGVycik7IHRocm93IGVycjsgfTtcbi8qKioqKiovIH0p
XG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKFtdKTtcblxuXG4vLyBXRUJQQUNLIEZPT1RF
UiAvL1xuLy8gYnVuZGxlLm1hbmlmZXN0LmU4MTE5OWIwMGRhMjkyMWQ5Yzk0LmpzIiwiIFx0Ly8g
aW5zdGFsbCBhIEpTT05QIGNhbGxiYWNrIGZvciBjaHVuayBsb2FkaW5nXG4gXHR2YXIgcGFyZW50
SnNvbnBGdW5jdGlvbiA9IHdpbmRvd1tcIndlYnBhY2tKc29ucFwiXTtcbiBcdHdpbmRvd1tcIndl
YnBhY2tKc29ucFwiXSA9IGZ1bmN0aW9uIHdlYnBhY2tKc29ucENhbGxiYWNrKGNodW5rSWRzLCBt
b3JlTW9kdWxlcywgZXhlY3V0ZU1vZHVsZXMpIHtcbiBcdFx0Ly8gYWRkIFwibW9yZU1vZHVsZXNc
IiB0byB0aGUgbW9kdWxlcyBvYmplY3QsXG4gXHRcdC8vIHRoZW4gZmxhZyBhbGwgXCJjaHVua0lk
c1wiIGFzIGxvYWRlZCBhbmQgZmlyZSBjYWxsYmFja1xuIFx0XHR2YXIgbW9kdWxlSWQsIGNodW5r
SWQsIGkgPSAwLCByZXNvbHZlcyA9IFtdLCByZXN1bHQ7XG4gXHRcdGZvcig7aSA8IGNodW5rSWRz
Lmxlbmd0aDsgaSsrKSB7XG4gXHRcdFx0Y2h1bmtJZCA9IGNodW5rSWRzW2ldO1xuIFx0XHRcdGlm
KGluc3RhbGxlZENodW5rc1tjaHVua0lkXSlcbiBcdFx0XHRcdHJlc29sdmVzLnB1c2goaW5zdGFs
bGVkQ2h1bmtzW2NodW5rSWRdWzBdKTtcbiBcdFx0XHRpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF0g
PSAwO1xuIFx0XHR9XG4gXHRcdGZvcihtb2R1bGVJZCBpbiBtb3JlTW9kdWxlcykge1xuIFx0XHRc
dGlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb3JlTW9kdWxlcywgbW9k
dWxlSWQpKSB7XG4gXHRcdFx0XHRtb2R1bGVzW21vZHVsZUlkXSA9IG1vcmVNb2R1bGVzW21vZHVs
ZUlkXTtcbiBcdFx0XHR9XG4gXHRcdH1cbiBcdFx0aWYocGFyZW50SnNvbnBGdW5jdGlvbikgcGFy
ZW50SnNvbnBGdW5jdGlvbihjaHVua0lkcywgbW9yZU1vZHVsZXMsIGV4ZWN1dGVNb2R1bGVzKTtc
biBcdFx0d2hpbGUocmVzb2x2ZXMubGVuZ3RoKVxuIFx0XHRcdHJlc29sdmVzLnNoaWZ0KCkoKTtc
biBcdFx0aWYoZXhlY3V0ZU1vZHVsZXMpIHtcbiBcdFx0XHRmb3IoaT0wOyBpIDwgZXhlY3V0ZU1v
ZHVsZXMubGVuZ3RoOyBpKyspIHtcbiBcdFx0XHRcdHJlc3VsdCA9IF9fd2VicGFja19yZXF1aXJl
X18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gZXhlY3V0ZU1vZHVsZXNbaV0pO1xuIFx0XHRcdH1c
biBcdFx0fVxuIFx0XHRyZXR1cm4gcmVzdWx0O1xuIFx0fTtcblxuIFx0Ly8gVGhlIG1vZHVsZSBj
YWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gb2JqZWN0cyB0byBz
dG9yZSBsb2FkZWQgYW5kIGxvYWRpbmcgY2h1bmtzXG4gXHR2YXIgaW5zdGFsbGVkQ2h1bmtzID0g
e1xuIFx0XHQyOiAwXG4gXHR9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVu
Y3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlm
IG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSlc
biBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcblxuIFx0
XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0
XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTog
bW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtc
blxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1
bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJw
YWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0
XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBt
b2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG4gXHQvLyBUaGlzIGZp
bGUgY29udGFpbnMgb25seSB0aGUgZW50cnkgY2h1bmsuXG4gXHQvLyBUaGUgY2h1bmsgbG9hZGlu
ZyBmdW5jdGlvbiBmb3IgYWRkaXRpb25hbCBjaHVua3NcbiBcdF9fd2VicGFja19yZXF1aXJlX18u
ZSA9IGZ1bmN0aW9uIHJlcXVpcmVFbnN1cmUoY2h1bmtJZCkge1xuIFx0XHRpZihpbnN0YWxsZWRD
aHVua3NbY2h1bmtJZF0gPT09IDApXG4gXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xu
XG4gXHRcdC8vIGFuIFByb21pc2UgbWVhbnMgXCJjdXJyZW50bHkgbG9hZGluZ1wiLlxuIFx0XHRp
ZihpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkQ2h1
bmtzW2NodW5rSWRdWzJdO1xuIFx0XHR9XG4gXHRcdC8vIHN0YXJ0IGNodW5rIGxvYWRpbmdcbiBc
dFx0dmFyIGhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xu
IFx0XHR2YXIgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gXHRc
dHNjcmlwdC50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7XG4gXHRcdHNjcmlwdC5jaGFyc2V0ID0g
J3V0Zi04JztcbiBcdFx0c2NyaXB0LmFzeW5jID0gdHJ1ZTtcbiBcdFx0c2NyaXB0LnRpbWVvdXQg
PSAxMjAwMDA7XG5cbiBcdFx0c2NyaXB0LnNyYyA9IF9fd2VicGFja19yZXF1aXJlX18ucCArIFwi
YnVuZGxlLlwiICsgY2h1bmtJZCArIFwiLlwiICsge1wiMFwiOlwiOTMwYWQ4YjgzMTI2ODYyZDc0
NDVcIixcIjFcIjpcIjU3N2M2YmMwOTMxOWIyN2ZlZDM0XCJ9W2NodW5rSWRdICsgXCIuanNcIjtc
biBcdFx0dmFyIHRpbWVvdXQgPSBzZXRUaW1lb3V0KG9uU2NyaXB0Q29tcGxldGUsIDEyMDAwMCk7
XG4gXHRcdHNjcmlwdC5vbmVycm9yID0gc2NyaXB0Lm9ubG9hZCA9IG9uU2NyaXB0Q29tcGxldGU7
XG4gXHRcdGZ1bmN0aW9uIG9uU2NyaXB0Q29tcGxldGUoKSB7XG4gXHRcdFx0Ly8gYXZvaWQgbWVt
IGxlYWtzIGluIElFLlxuIFx0XHRcdHNjcmlwdC5vbmVycm9yID0gc2NyaXB0Lm9ubG9hZCA9IG51
bGw7XG4gXHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuIFx0XHRcdHZhciBjaHVuayA9IGlu
c3RhbGxlZENodW5rc1tjaHVua0lkXTtcbiBcdFx0XHRpZihjaHVuayAhPT0gMCkge1xuIFx0XHRc
dFx0aWYoY2h1bmspIGNodW5rWzFdKG5ldyBFcnJvcignTG9hZGluZyBjaHVuayAnICsgY2h1bmtJ
ZCArICcgZmFpbGVkLicpKTtcbiBcdFx0XHRcdGluc3RhbGxlZENodW5rc1tjaHVua0lkXSA9IHVu
ZGVmaW5lZDtcbiBcdFx0XHR9XG4gXHRcdH07XG4gXHRcdGhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0
KTtcblxuIFx0XHR2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJl
amVjdCkge1xuIFx0XHRcdGluc3RhbGxlZENodW5rc1tjaHVua0lkXSA9IFtyZXNvbHZlLCByZWpl
Y3RdO1xuIFx0XHR9KTtcbiBcdFx0cmV0dXJuIGluc3RhbGxlZENodW5rc1tjaHVua0lkXVsyXSA9
IHByb21pc2U7XG4gXHR9O1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dl
YnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxu
IFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9
IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGlkZW50aXR5IGZ1bmN0aW9uIGZvciBjYWxsaW5n
IGhhcm1vcnkgaW1wb3J0cyB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHRcbiBcdF9fd2VicGFja19y
ZXF1aXJlX18uaSA9IGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcblxuIFx0Ly8g
ZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9yeSBleHBvcnRzXG4gXHRfX3dlYnBhY2tf
cmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0T2Jq
ZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiBcdFx0XHRjb25maWd1cmFibGU6
IGZhbHNlLFxuIFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4gXHRcdFx0Z2V0OiBnZXR0ZXJcbiBc
dFx0fSk7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21w
YXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVf
Xy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9k
dWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBt
b2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygp
IHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwg
J2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0
LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8g
PSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhh
c093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFj
a19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQv
LyBvbiBlcnJvciBmdW5jdGlvbiBmb3IgYXN5bmMgbG9hZGluZ1xuIFx0X193ZWJwYWNrX3JlcXVp
cmVfXy5vZSA9IGZ1bmN0aW9uKGVycikgeyBjb25zb2xlLmVycm9yKGVycik7IHRocm93IGVycjsg
fTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL2Jvb3RzdHJhcCA0Y2Jk
M2U4MDY4NGJkNzcwODJiMCJdLCJzb3VyY2VSb290IjoiIn0KXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBmaWxlCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVy
Mi4xL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBh
Y2svZGlzdC9idW5kbGUudmVuZG9yLjU3N2M2YmMwOTMxOWIyN2ZlZDM0LmpzIGIvV2Vic2l0ZXMv
YnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxh
LWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL2Rpc3QvYnVuZGxlLnZlbmRvci41NzdjNmJj
MDkzMTliMjdmZWQzNC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MGNjNjk4NGJhN2Y4YWFmYTUzODQ1Y2NjMjFh
ZmQwNWVkY2ZmY2UzCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9y
Zy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAx
NS1iYWJlbC13ZWJwYWNrL2Rpc3QvYnVuZGxlLnZlbmRvci41NzdjNmJjMDkzMTliMjdmZWQzNC5q
cwpAQCAtMCwwICsxLDIgQEAKK3dlYnBhY2tKc29ucChbMSwyXSx7MTpmdW5jdGlvbihuLHQpe30s
MTI6ZnVuY3Rpb24obix0LHIpe24uZXhwb3J0cz1yKDEpfSwxMzpmdW5jdGlvbihuLHQpe24uZXhw
b3J0cz1mdW5jdGlvbigpe3ZhciBuPVtdO3JldHVybiBuLnRvU3RyaW5nPWZ1bmN0aW9uKCl7Zm9y
KHZhciBuPVtdLHQ9MDt0PHRoaXMubGVuZ3RoO3QrKyl7dmFyIHI9dGhpc1t0XTtyWzJdP24ucHVz
aCgiQG1lZGlhICIrclsyXSsieyIrclsxXSsifSIpOm4ucHVzaChyWzFdKX1yZXR1cm4gbi5qb2lu
KCIiKX0sbi5pPWZ1bmN0aW9uKHQscil7InN0cmluZyI9PXR5cGVvZiB0JiYodD1bW251bGwsdCwi
Il1dKTtmb3IodmFyIG89e30saT0wO2k8dGhpcy5sZW5ndGg7aSsrKXt2YXIgZT10aGlzW2ldWzBd
OyJudW1iZXIiPT10eXBlb2YgZSYmKG9bZV09ITApfWZvcihpPTA7aTx0Lmxlbmd0aDtpKyspe3Zh
ciB1PXRbaV07Im51bWJlciI9PXR5cGVvZiB1WzBdJiZvW3VbMF1dfHwociYmIXVbMl0/dVsyXT1y
OnImJih1WzJdPSIoIit1WzJdKyIpIGFuZCAoIityKyIpIiksbi5wdXNoKHUpKX19LG59fX0sWzEy
XSk7CisvLyMgc291cmNlTWFwcGluZ1VSTD1idW5kbGUudmVuZG9yLjU3N2M2YmMwOTMxOWIyN2Zl
ZDM0LmpzLm1hcApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1dlYnNp
dGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvdmFu
aWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9kaXN0L2J1bmRsZS52ZW5kb3IuNTc3
YzZiYzA5MzE5YjI3ZmVkMzQuanMubWFwIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVl
ZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJl
bC13ZWJwYWNrL2Rpc3QvYnVuZGxlLnZlbmRvci41NzdjNmJjMDkzMTliMjdmZWQzNC5qcy5tYXAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNjk5YzZlZDc2NGIzMTIxODA2YzE1MGE2NzdjM2FkYTAzMTg1MjQ4ZgotLS0g
L2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEv
cmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9k
aXN0L2J1bmRsZS52ZW5kb3IuNTc3YzZiYzA5MzE5YjI3ZmVkMzQuanMubWFwCkBAIC0wLDAgKzEg
QEAKK3sidmVyc2lvbiI6Mywic291cmNlcyI6WyJ3ZWJwYWNrOi8vL2J1bmRsZS52ZW5kb3IuNTc3
YzZiYzA5MzE5YjI3ZmVkMzQuanMiLCJ3ZWJwYWNrOi8vLy4uL34vY3NzLWxvYWRlci9saWIvY3Nz
LWJhc2UuanMiXSwibmFtZXMiOlsid2VicGFja0pzb25wIiwiMSIsIm1vZHVsZSIsImV4cG9ydHMi
LCIxMiIsIl9fd2VicGFja19yZXF1aXJlX18iLCIxMyIsImxpc3QiLCJ0b1N0cmluZyIsInJlc3Vs
dCIsImkiLCJ0aGlzIiwibGVuZ3RoIiwiaXRlbSIsInB1c2giLCJqb2luIiwibW9kdWxlcyIsIm1l
ZGlhUXVlcnkiLCJhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzIiwiaWQiXSwibWFwcGluZ3MiOiJBQUFB
QSxjQUFjLEVBQUUsSUFFVkMsRUFDQSxTQUFTQyxFQUFRQyxLQU1qQkMsR0FDQSxTQUFTRixFQUFR
QyxFQUFTRSxHQUVoQ0gsRUFBT0MsUUFBVUUsRUFBb0IsSUFLL0JDLEdBQ0EsU0FBU0osRUFBUUMs
R0NidkJELEVBQUFDLFFBQUEsV0FDQSxHQUFBSSxLQTBDQSxPQXZDQUEsR0FBQUMsU0FBQSxXQUVB
LE9BREFDLE1BQ0FDLEVBQUEsRUFBZ0JBLEVBQUFDLEtBQUFDLE9BQWlCRixJQUFBLENBQ2pDLEdB
QUFHLEdBQUFGLEtBQUFELEVBQ0FHLEdBQUEsR0FDQUosRUFBQUssS0FBQSxVQUFBRCxFQUFBLE9B
QXdDQSxFQUFBLFFBRXhDSixFQUFBSyxLQUFBRCxFQUFBLElBR0EsTUFBQUosR0FBQU0sS0FBQSxL
QUlBUixFQUFBRyxFQUFBLFNBQUFNLEVBQUFDLEdBQ0EsZ0JBQUFELEtBQ0FBLElBQUEsS0FBQUEs
RUFBQSxLQUVBLFFBREFFLE1BQ0FSLEVBQUEsRUFBZ0JBLEVBQUFDLEtBQUFDLE9BQWlCRixJQUFB
LENBQ2pDLEdBQUFTLEdBQUFSLEtBQUFELEdBQUEsRUFDQSxpQkFBQVMsS0FDQUQsRUFBQUMsSUFB
QSxHQUVBLElBQUFULEVBQUEsRUFBWUEsRUFBQU0sRUFBQUosT0FBb0JGLElBQUEsQ0FDaEMsR0FB
QUcsR0FBQUcsRUFBQU4sRUFLQSxpQkFBQUcsR0FBQSxJQUFBSyxFQUFBTCxFQUFBLE1BQ0FJLElB
QUFKLEVBQUEsR0FDQUEsRUFBQSxHQUFBSSxFQUNLQSxJQUNMSixFQUFBLE9BQUFBLEVBQUEsYUFB
QUksRUFBQSxLQUVBVixFQUFBTyxLQUFBRCxNQUlBTixNRDBCRyIsImZpbGUiOiJidW5kbGUudmVu
ZG9yLjU3N2M2YmMwOTMxOWIyN2ZlZDM0LmpzIiwic291cmNlc0NvbnRlbnQiOlsid2VicGFja0pz
b25wKFsxLDJdLHtcblxuLyoqKi8gMTpcbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykg
e1xuXG4vLyByZW1vdmVkIGJ5IGV4dHJhY3QtdGV4dC13ZWJwYWNrLXBsdWdpblxuXG4vKioqLyB9
LFxuXG4vKioqLyAxMjpcbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNr
X3JlcXVpcmVfXykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7
XG5cblxuLyoqKi8gfSxcblxuLyoqKi8gMTM6XG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9y
dHMpIHtcblxuLypcclxuXHRNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xp
Y2Vuc2VzL21pdC1saWNlbnNlLnBocFxyXG5cdEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFc
clxuKi9cclxuLy8gY3NzIGJhc2UgY29kZSwgaW5qZWN0ZWQgYnkgdGhlIGNzcy1sb2FkZXJcclxu
bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcclxuXHR2YXIgbGlzdCA9IFtdO1xyXG5cclxu
XHQvLyByZXR1cm4gdGhlIGxpc3Qgb2YgbW9kdWxlcyBhcyBjc3Mgc3RyaW5nXHJcblx0bGlzdC50
b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xyXG5cdFx0dmFyIHJlc3VsdCA9IFtdO1xy
XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0dmFy
IGl0ZW0gPSB0aGlzW2ldO1xyXG5cdFx0XHRpZihpdGVtWzJdKSB7XHJcblx0XHRcdFx0cmVzdWx0
LnB1c2goXCJAbWVkaWEgXCIgKyBpdGVtWzJdICsgXCJ7XCIgKyBpdGVtWzFdICsgXCJ9XCIpO1xy
XG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1bMV0pO1xyXG5cdFx0
XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcmVzdWx0LmpvaW4oXCJcIik7XHJcblx0fTtcclxu
XHJcblx0Ly8gaW1wb3J0IGEgbGlzdCBvZiBtb2R1bGVzIGludG8gdGhlIGxpc3RcclxuXHRsaXN0
LmkgPSBmdW5jdGlvbihtb2R1bGVzLCBtZWRpYVF1ZXJ5KSB7XHJcblx0XHRpZih0eXBlb2YgbW9k
dWxlcyA9PT0gXCJzdHJpbmdcIilcclxuXHRcdFx0bW9kdWxlcyA9IFtbbnVsbCwgbW9kdWxlcywg
XCJcIl1dO1xyXG5cdFx0dmFyIGFscmVhZHlJbXBvcnRlZE1vZHVsZXMgPSB7fTtcclxuXHRcdGZv
cih2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdHZhciBpZCA9IHRo
aXNbaV1bMF07XHJcblx0XHRcdGlmKHR5cGVvZiBpZCA9PT0gXCJudW1iZXJcIilcclxuXHRcdFx0
XHRhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2lkXSA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRmb3Io
aSA9IDA7IGkgPCBtb2R1bGVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdHZhciBpdGVtID0gbW9k
dWxlc1tpXTtcclxuXHRcdFx0Ly8gc2tpcCBhbHJlYWR5IGltcG9ydGVkIG1vZHVsZVxyXG5cdFx0
XHQvLyB0aGlzIGltcGxlbWVudGF0aW9uIGlzIG5vdCAxMDAlIHBlcmZlY3QgZm9yIHdlaXJkIG1l
ZGlhIHF1ZXJ5IGNvbWJpbmF0aW9uc1xyXG5cdFx0XHQvLyAgd2hlbiBhIG1vZHVsZSBpcyBpbXBv
cnRlZCBtdWx0aXBsZSB0aW1lcyB3aXRoIGRpZmZlcmVudCBtZWRpYSBxdWVyaWVzLlxyXG5cdFx0
XHQvLyAgSSBob3BlIHRoaXMgd2lsbCBuZXZlciBvY2N1ciAoSGV5IHRoaXMgd2F5IHdlIGhhdmUg
c21hbGxlciBidW5kbGVzKVxyXG5cdFx0XHRpZih0eXBlb2YgaXRlbVswXSAhPT0gXCJudW1iZXJc
IiB8fCAhYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpdGVtWzBdXSkge1xyXG5cdFx0XHRcdGlmKG1l
ZGlhUXVlcnkgJiYgIWl0ZW1bMl0pIHtcclxuXHRcdFx0XHRcdGl0ZW1bMl0gPSBtZWRpYVF1ZXJ5
O1xyXG5cdFx0XHRcdH0gZWxzZSBpZihtZWRpYVF1ZXJ5KSB7XHJcblx0XHRcdFx0XHRpdGVtWzJd
ID0gXCIoXCIgKyBpdGVtWzJdICsgXCIpIGFuZCAoXCIgKyBtZWRpYVF1ZXJ5ICsgXCIpXCI7XHJc
blx0XHRcdFx0fVxyXG5cdFx0XHRcdGxpc3QucHVzaChpdGVtKTtcclxuXHRcdFx0fVxyXG5cdFx0
fVxyXG5cdH07XHJcblx0cmV0dXJuIGxpc3Q7XHJcbn07XHJcblxuXG4vKioqLyB9XG5cbn0sWzEy
XSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIGJ1bmRsZS52ZW5kb3IuNTc3YzZiYzA5
MzE5YjI3ZmVkMzQuanMiLCIvKlxyXG5cdE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJj
ZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXHJcblx0QXV0aG9yIFRvYmlhcyBLb3BwZXJz
IEBzb2tyYVxyXG4qL1xyXG4vLyBjc3MgYmFzZSBjb2RlLCBpbmplY3RlZCBieSB0aGUgY3NzLWxv
YWRlclxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xyXG5cdHZhciBsaXN0ID0gW107
XHJcblxyXG5cdC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcclxu
XHRsaXN0LnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XHJcblx0XHR2YXIgcmVzdWx0
ID0gW107XHJcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xyXG5c
dFx0XHR2YXIgaXRlbSA9IHRoaXNbaV07XHJcblx0XHRcdGlmKGl0ZW1bMl0pIHtcclxuXHRcdFx0
XHRyZXN1bHQucHVzaChcIkBtZWRpYSBcIiArIGl0ZW1bMl0gKyBcIntcIiArIGl0ZW1bMV0gKyBc
In1cIik7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbVsxXSk7
XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiByZXN1bHQuam9pbihcIlwiKTtcclxu
XHR9O1xyXG5cclxuXHQvLyBpbXBvcnQgYSBsaXN0IG9mIG1vZHVsZXMgaW50byB0aGUgbGlzdFxy
XG5cdGxpc3QuaSA9IGZ1bmN0aW9uKG1vZHVsZXMsIG1lZGlhUXVlcnkpIHtcclxuXHRcdGlmKHR5
cGVvZiBtb2R1bGVzID09PSBcInN0cmluZ1wiKVxyXG5cdFx0XHRtb2R1bGVzID0gW1tudWxsLCBt
b2R1bGVzLCBcIlwiXV07XHJcblx0XHR2YXIgYWxyZWFkeUltcG9ydGVkTW9kdWxlcyA9IHt9O1xy
XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0dmFy
IGlkID0gdGhpc1tpXVswXTtcclxuXHRcdFx0aWYodHlwZW9mIGlkID09PSBcIm51bWJlclwiKVxy
XG5cdFx0XHRcdGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaWRdID0gdHJ1ZTtcclxuXHRcdH1cclxu
XHRcdGZvcihpID0gMDsgaSA8IG1vZHVsZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0dmFyIGl0
ZW0gPSBtb2R1bGVzW2ldO1xyXG5cdFx0XHQvLyBza2lwIGFscmVhZHkgaW1wb3J0ZWQgbW9kdWxl
XHJcblx0XHRcdC8vIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgbm90IDEwMCUgcGVyZmVjdCBmb3Ig
d2VpcmQgbWVkaWEgcXVlcnkgY29tYmluYXRpb25zXHJcblx0XHRcdC8vICB3aGVuIGEgbW9kdWxl
IGlzIGltcG9ydGVkIG11bHRpcGxlIHRpbWVzIHdpdGggZGlmZmVyZW50IG1lZGlhIHF1ZXJpZXMu
XHJcblx0XHRcdC8vICBJIGhvcGUgdGhpcyB3aWxsIG5ldmVyIG9jY3VyIChIZXkgdGhpcyB3YXkg
d2UgaGF2ZSBzbWFsbGVyIGJ1bmRsZXMpXHJcblx0XHRcdGlmKHR5cGVvZiBpdGVtWzBdICE9PSBc
Im51bWJlclwiIHx8ICFhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XHJcblx0XHRc
dFx0aWYobWVkaWFRdWVyeSAmJiAhaXRlbVsyXSkge1xyXG5cdFx0XHRcdFx0aXRlbVsyXSA9IG1l
ZGlhUXVlcnk7XHJcblx0XHRcdFx0fSBlbHNlIGlmKG1lZGlhUXVlcnkpIHtcclxuXHRcdFx0XHRc
dGl0ZW1bMl0gPSBcIihcIiArIGl0ZW1bMl0gKyBcIikgYW5kIChcIiArIG1lZGlhUXVlcnkgKyBc
IilcIjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0bGlzdC5wdXNoKGl0ZW0pO1xyXG5cdFx0XHR9
XHJcblx0XHR9XHJcblx0fTtcclxuXHRyZXR1cm4gbGlzdDtcclxufTtcclxuXG5cblxuLy8vLy8v
Ly8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vfi9jc3MtbG9hZGVyL2xpYi9j
c3MtYmFzZS5qc1xuLy8gbW9kdWxlIGlkID0gMTNcbi8vIG1vZHVsZSBjaHVua3MgPSAxIl0sInNv
dXJjZVJvb3QiOiIifQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1dl
YnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMv
dmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9kaXN0L2luZGV4Lmh0bWwgYi9X
ZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZj
L3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svZGlzdC9pbmRleC5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjIwM2Y2MDRlZGQwNGUxOTdlZGI4NTNhNDk5MDQ5ZmY4ZGE1ZDY2Y2IKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jl
c291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svZGlz
dC9pbmRleC5odG1sCkBAIC0wLDAgKzEsNDUgQEAKKzwhZG9jdHlwZSBodG1sPgorPGh0bWwgbGFu
Zz0iZW4iIGRhdGEtZnJhbWV3b3JrPSJqYXZhc2NyaXB0Ij4KKyAgPGhlYWQ+CisgICAgPG1ldGEg
Y2hhcnNldD0idXRmLTgiPgorICAgIDx0aXRsZT5FUzIwMTUgKyBCYWJlbCArIFdlYnBhY2sgVG9k
b01WQyBleGFtcGxlPC90aXRsZT4KKyAgICA8c2NyaXB0PiFmdW5jdGlvbihlKXtmdW5jdGlvbiBy
KG4pe2lmKHRbbl0pcmV0dXJuIHRbbl0uZXhwb3J0czt2YXIgbz10W25dPXtpOm4sbDohMSxleHBv
cnRzOnt9fTtyZXR1cm4gZVtuXS5jYWxsKG8uZXhwb3J0cyxvLG8uZXhwb3J0cyxyKSxvLmw9ITAs
by5leHBvcnRzfXZhciBuPXdpbmRvdy53ZWJwYWNrSnNvbnA7d2luZG93LndlYnBhY2tKc29ucD1m
dW5jdGlvbih0LHUsYyl7Zm9yKHZhciBpLGEsZixsPTAscz1bXTtsPHQubGVuZ3RoO2wrKylhPXRb
bF0sb1thXSYmcy5wdXNoKG9bYV1bMF0pLG9bYV09MDtmb3IoaSBpbiB1KU9iamVjdC5wcm90b3R5
cGUuaGFzT3duUHJvcGVydHkuY2FsbCh1LGkpJiYoZVtpXT11W2ldKTtmb3IobiYmbih0LHUsYyk7
cy5sZW5ndGg7KXMuc2hpZnQoKSgpO2lmKGMpZm9yKGw9MDtsPGMubGVuZ3RoO2wrKylmPXIoci5z
PWNbbF0pO3JldHVybiBmfTt2YXIgdD17fSxvPXsyOjB9O3IuZT1mdW5jdGlvbihlKXtmdW5jdGlv
biBuKCl7dS5vbmVycm9yPXUub25sb2FkPW51bGwsY2xlYXJUaW1lb3V0KGMpO3ZhciByPW9bZV07
MCE9PXImJihyJiZyWzFdKG5ldyBFcnJvcigiTG9hZGluZyBjaHVuayAiK2UrIiBmYWlsZWQuIikp
LG9bZV09dm9pZCAwKX1pZigwPT09b1tlXSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7aWYob1tl
XSlyZXR1cm4gb1tlXVsyXTt2YXIgdD1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVh
ZCIpWzBdLHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7dS50eXBlPSJ0ZXh0L2ph
dmFzY3JpcHQiLHUuY2hhcnNldD0idXRmLTgiLHUuYXN5bmM9ITAsdS50aW1lb3V0PTEyZTQsdS5z
cmM9ci5wKyJidW5kbGUuIitlKyIuIit7MDoiOTMwYWQ4YjgzMTI2ODYyZDc0NDUiLDE6IjU3N2M2
YmMwOTMxOWIyN2ZlZDM0In1bZV0rIi5qcyI7dmFyIGM9c2V0VGltZW91dChuLDEyZTQpO3Uub25l
cnJvcj11Lm9ubG9hZD1uLHQuYXBwZW5kQ2hpbGQodSk7dmFyIGk9bmV3IFByb21pc2UoZnVuY3Rp
b24ocixuKXtvW2VdPVtyLG5dfSk7cmV0dXJuIG9bZV1bMl09aX0sci5tPWUsci5jPXQsci5pPWZ1
bmN0aW9uKGUpe3JldHVybiBlfSxyLmQ9ZnVuY3Rpb24oZSxyLG4pe09iamVjdC5kZWZpbmVQcm9w
ZXJ0eShlLHIse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDpufSl9LHIubj1mdW5j
dGlvbihlKXt2YXIgbj1lJiZlLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gZVsiZGVmYXVs
dCJdfTpmdW5jdGlvbigpe3JldHVybiBlfTtyZXR1cm4gci5kKG4sImEiLG4pLG59LHIubz1mdW5j
dGlvbihlLHIpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxy
KX0sci5wPSIiLHIub2U9ZnVuY3Rpb24oZSl7dGhyb3cgY29uc29sZS5lcnJvcihlKSxlfX0oW10p
OworPC9zY3JpcHQ+CisgIDxsaW5rIGhyZWY9InN0eWxlcy52ZW5kb3IuNTc3YzZiYzA5MzE5YjI3
ZmVkMzQuY3NzIiByZWw9InN0eWxlc2hlZXQiPjxsaW5rIGhyZWY9InN0eWxlcy5hcHAuOTMwYWQ4
YjgzMTI2ODYyZDc0NDUuY3NzIiByZWw9InN0eWxlc2hlZXQiPjxzY3JpcHQgdHlwZT0idGV4dC9q
YXZhc2NyaXB0IiBzcmM9ImJ1bmRsZS52ZW5kb3IuNTc3YzZiYzA5MzE5YjI3ZmVkMzQuanMiPjwv
c2NyaXB0PjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImJ1bmRsZS5hcHAuOTMw
YWQ4YjgzMTI2ODYyZDc0NDUuanMiPjwvc2NyaXB0PjwvaGVhZD4KKyAgPGJvZHk+CisgICAgPHNl
Y3Rpb24gY2xhc3M9InRvZG9hcHAiPgorICAgICAgPGhlYWRlciBjbGFzcz0iaGVhZGVyIj4KKyAg
ICAgICAgPGgxPnRvZG9zPC9oMT4KKyAgICAgICAgPGlucHV0IGNsYXNzPSJuZXctdG9kbyIgcGxh
Y2Vob2xkZXI9IldoYXQgbmVlZHMgdG8gYmUgZG9uZT8iIGF1dG9mb2N1cz4KKyAgICAgIDwvaGVh
ZGVyPgorICAgICAgPHNlY3Rpb24gY2xhc3M9Im1haW4iPgorICAgICAgICA8aW5wdXQgY2xhc3M9
InRvZ2dsZS1hbGwiIHR5cGU9ImNoZWNrYm94Ij4KKyAgICAgICAgPGxhYmVsIGZvcj0idG9nZ2xl
LWFsbCI+TWFyayBhbGwgYXMgY29tcGxldGU8L2xhYmVsPgorICAgICAgICA8dWwgY2xhc3M9InRv
ZG8tbGlzdCI+PC91bD4KKyAgICAgIDwvc2VjdGlvbj4KKyAgICAgIDxmb290ZXIgY2xhc3M9ImZv
b3RlciI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJ0b2RvLWNvdW50Ij48L3NwYW4+CisgICAgICAg
IDx1bCBjbGFzcz0iZmlsdGVycyI+CisgICAgICAgICAgPGxpPgorICAgICAgICAgICAgPGEgaHJl
Zj0iIy8iIGNsYXNzPSJzZWxlY3RlZCI+QWxsPC9hPgorICAgICAgICAgIDwvbGk+CisgICAgICAg
ICAgPGxpPgorICAgICAgICAgICAgPGEgaHJlZj0iIy9hY3RpdmUiPkFjdGl2ZTwvYT4KKyAgICAg
ICAgICA8L2xpPgorICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgIDxhIGhyZWY9IiMvY29tcGxl
dGVkIj5Db21wbGV0ZWQ8L2E+CisgICAgICAgICAgPC9saT4KKyAgICAgICAgPC91bD4KKyAgICAg
ICAgPGJ1dHRvbiBjbGFzcz0iY2xlYXItY29tcGxldGVkIj5DbGVhciBjb21wbGV0ZWQ8L2J1dHRv
bj4KKyAgICAgIDwvZm9vdGVyPgorICAgIDwvc2VjdGlvbj4KKyAgICA8Zm9vdGVyIGNsYXNzPSJp
bmZvIj4KKyAgICAgIDxwPkRvdWJsZS1jbGljayB0byBlZGl0IGEgdG9kbzwvcD4KKyAgICAgIDxw
PlNwZWVkb21ldGVyIHZlcnNpb24gYnkgPGEgaHJlZj0iaHR0cDovL3R3aXR0ZXIuY29tL2FkZHlv
c21hbmkiPkFkZHkgT3NtYW5pPC9hPjwvcD4KKyAgICAgIDxwPkNyZWF0ZWQgYnkgPGEgaHJlZj0i
aHR0cDovL3R3aXR0ZXIuY29tL29zY2FyZ29kc29uIj5Pc2NhciBHb2Rzb248L2E+PC9wPgorICAg
ICAgPHA+UmVmYWN0b3JlZCBieSA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2J1cmdtZXIi
PkNocmlzdG9waCBCdXJnbWVyPC9hPjwvcD4KKyAgICAgIDxwPlBvcnRlZCB0byBFUzYgYnkgPGEg
aHJlZj0iaHR0cHM6Ly90d2l0dGVyLmNvbS9rZW50Y2RvZGRzIj5LZW50IEMuIERvZGRzPC9hPjwv
cD4KKyAgICAgIDxwPlBhcnQgb2YgPGEgaHJlZj0iaHR0cDovL3RvZG9tdmMuY29tIj5Ub2RvTVZD
PC9hPjwvcD4KKyAgICA8L2Zvb3Rlcj4KKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
V2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212
Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL2Rpc3Qvc3R5bGVzLmFwcC45
MzBhZDhiODMxMjY4NjJkNzQ0NS5jc3MgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVk
b21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVs
LXdlYnBhY2svZGlzdC9zdHlsZXMuYXBwLjkzMGFkOGI4MzEyNjg2MmQ3NDQ1LmNzcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5jZThiZDlmZmRlMjM1YzYzY2ZhYjBlZDIzMjgwNDc3MTY4Nzc0ZjkxCi0tLSAvZGV2L251
bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJj
ZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL2Rpc3Qvc3R5
bGVzLmFwcC45MzBhZDhiODMxMjY4NjJkNzQ0NS5jc3MKQEAgLTAsMCArMSwyIEBACisudG9nZ2xl
LWdyYXBoe2Zsb2F0OmxlZnQ7bWFyZ2luLWxlZnQ6MTZweDtjdXJzb3I6cG9pbnRlcjtwb3NpdGlv
bjpyZWxhdGl2ZTt6LWluZGV4OjF9LnRvZ2dsZS1ncmFwaCBzdmd7aGVpZ2h0OjIwcHg7d2lkdGg6
MjBweH0udG9nZ2xlLWdyYXBoIHN2ZyBwYXRoe2ZpbGw6Izc3N30udG9nZ2xlLWdyYXBoLmFjdGl2
ZSBzdmcgcGF0aCwudG9nZ2xlLWdyYXBoOmZvY3VzIHN2ZyBwYXRoLC50b2dnbGUtZ3JhcGg6aG92
ZXIgc3ZnIHBhdGh7ZmlsbDojMDAwfQorLyojIHNvdXJjZU1hcHBpbmdVUkw9c3R5bGVzLmFwcC45
MzBhZDhiODMxMjY4NjJkNzQ0NS5jc3MubWFwKi8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl
CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jl
c291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svZGlz
dC9zdHlsZXMuYXBwLjkzMGFkOGI4MzEyNjg2MmQ3NDQ1LmNzcy5tYXAgYi9XZWJzaXRlcy9icm93
c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhh
bXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svZGlzdC9zdHlsZXMuYXBwLjkzMGFkOGI4MzEyNjg2
MmQ3NDQ1LmNzcy5tYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGIwOWM4ZjczMTg2MjM5MzIzZWI2NzUwYjEzZDBj
MjJlZTlkNGFlZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcv
U3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUt
YmFiZWwtd2VicGFjay9kaXN0L3N0eWxlcy5hcHAuOTMwYWQ4YjgzMTI2ODYyZDc0NDUuY3NzLm1h
cApAQCAtMCwwICsxIEBACit7InZlcnNpb24iOjMsInNvdXJjZXMiOltdLCJuYW1lcyI6W10sIm1h
cHBpbmdzIjoiIiwiZmlsZSI6InN0eWxlcy5hcHAuOTMwYWQ4YjgzMTI2ODYyZDc0NDUuY3NzIiwi
c291cmNlUm9vdCI6IiJ9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEv
V2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212
Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL2Rpc3Qvc3R5bGVzLnZlbmRv
ci41NzdjNmJjMDkzMTliMjdmZWQzNC5jc3MgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1Nw
ZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJh
YmVsLXdlYnBhY2svZGlzdC9zdHlsZXMudmVuZG9yLjU3N2M2YmMwOTMxOWIyN2ZlZDM0LmNzcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5kMzUzYjE4ZDFjNGI0YzE3OWViY2QwNjE1MmU2OWE2YjkyM2M3NWU2Ci0tLSAv
ZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9y
ZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL2Rp
c3Qvc3R5bGVzLnZlbmRvci41NzdjNmJjMDkzMTliMjdmZWQzNC5jc3MKQEAgLTAsMCArMSwyIEBA
Citib2R5LGJ1dHRvbixodG1se21hcmdpbjowO3BhZGRpbmc6MH1idXR0b257Ym9yZGVyOjA7YmFj
a2dyb3VuZDpub25lO2ZvbnQtc2l6ZToxMDAlO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2ZvbnQt
ZmFtaWx5OmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdDtjb2xvcjppbmhlcml0Oy13ZWJraXQt
YXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZTstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFu
dGlhbGlhc2VkfWJvZHksYnV0dG9uey1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZX1i
b2R5e2ZvbnQ6MTRweCBIZWx2ZXRpY2EgTmV1ZSxIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZjts
aW5lLWhlaWdodDoxLjRlbTtiYWNrZ3JvdW5kOiNmNWY1ZjU7Y29sb3I6IzRkNGQ0ZDttaW4td2lk
dGg6MjMwcHg7bWF4LXdpZHRoOjU1MHB4O21hcmdpbjowIGF1dG87LXdlYmtpdC1mb250LXNtb290
aGluZzphbnRpYWxpYXNlZDtmb250LXdlaWdodDozMDB9OmZvY3Vze291dGxpbmU6MH0uaGlkZGVu
e2Rpc3BsYXk6bm9uZX0udG9kb2FwcHtiYWNrZ3JvdW5kOiNmZmY7bWFyZ2luOjEzMHB4IDAgNDBw
eDtwb3NpdGlvbjpyZWxhdGl2ZTtib3gtc2hhZG93OjAgMnB4IDRweCAwIHJnYmEoMCwwLDAsLjIp
LDAgMjVweCA1MHB4IDAgcmdiYSgwLDAsMCwuMSl9LnRvZG9hcHAgaW5wdXQ6Oi13ZWJraXQtaW5w
dXQtcGxhY2Vob2xkZXJ7Zm9udC1zdHlsZTppdGFsaWM7Zm9udC13ZWlnaHQ6MzAwO2NvbG9yOiNl
NmU2ZTZ9LnRvZG9hcHAgaW5wdXQ6Oi1tb3otcGxhY2Vob2xkZXJ7Zm9udC1zdHlsZTppdGFsaWM7
Zm9udC13ZWlnaHQ6MzAwO2NvbG9yOiNlNmU2ZTZ9LnRvZG9hcHAgaW5wdXQ6OmlucHV0LXBsYWNl
aG9sZGVye2ZvbnQtc3R5bGU6aXRhbGljO2ZvbnQtd2VpZ2h0OjMwMDtjb2xvcjojZTZlNmU2fS50
b2RvYXBwIGgxe3Bvc2l0aW9uOmFic29sdXRlO3RvcDotMTU1cHg7d2lkdGg6MTAwJTtmb250LXNp
emU6MTAwcHg7Zm9udC13ZWlnaHQ6MTAwO3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOnJnYmEoMTc1
LDQ3LDQ3LC4xNSk7LXdlYmtpdC10ZXh0LXJlbmRlcmluZzpvcHRpbWl6ZUxlZ2liaWxpdHk7LW1v
ei10ZXh0LXJlbmRlcmluZzpvcHRpbWl6ZUxlZ2liaWxpdHk7dGV4dC1yZW5kZXJpbmc6b3B0aW1p
emVMZWdpYmlsaXR5fS5lZGl0LC5uZXctdG9kb3twb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW46MDt3
aWR0aDoxMDAlO2ZvbnQtc2l6ZToyNHB4O2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC13ZWlnaHQ6
aW5oZXJpdDtsaW5lLWhlaWdodDoxLjRlbTtib3JkZXI6MDtjb2xvcjppbmhlcml0O3BhZGRpbmc6
NnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3gtc2hhZG93Omluc2V0IDAgLTFweCA1cHggMCBy
Z2JhKDAsMCwwLC4yKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7LXdlYmtpdC1mb250LXNtb290aGlu
ZzphbnRpYWxpYXNlZDstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGV9Lm5ldy10b2Rv
e3BhZGRpbmc6MTZweCAxNnB4IDE2cHggNjBweDtib3JkZXI6bm9uZTtiYWNrZ3JvdW5kOnJnYmEo
MCwwLDAsLjAwMyk7Ym94LXNoYWRvdzppbnNldCAwIC0ycHggMXB4IHJnYmEoMCwwLDAsLjAzKX0u
bWFpbntwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjI7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U2
ZTZlNn0udG9nZ2xlLWFsbHt0ZXh0LWFsaWduOmNlbnRlcjtib3JkZXI6bm9uZTtvcGFjaXR5OjA7
cG9zaXRpb246YWJzb2x1dGV9LnRvZ2dsZS1hbGwrbGFiZWx7d2lkdGg6NjBweDtoZWlnaHQ6MzRw
eDtmb250LXNpemU6MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTUycHg7bGVmdDotMTNweDstd2Vi
a2l0LXRyYW5zZm9ybTpyb3RhdGUoOTBkZWcpO3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfS50b2dn
bGUtYWxsK2xhYmVsOmJlZm9yZXtjb250ZW50OiJcMjc2RiI7Zm9udC1zaXplOjIycHg7Y29sb3I6
I2U2ZTZlNjtwYWRkaW5nOjEwcHggMjdweH0udG9nZ2xlLWFsbDpjaGVja2VkK2xhYmVsOmJlZm9y
ZXtjb2xvcjojNzM3MzczfS50b2RvLWxpc3R7bWFyZ2luOjA7cGFkZGluZzowO2xpc3Qtc3R5bGU6
bm9uZX0udG9kby1saXN0IGxpe3Bvc2l0aW9uOnJlbGF0aXZlO2ZvbnQtc2l6ZToyNHB4O2JvcmRl
ci1ib3R0b206MXB4IHNvbGlkICNlZGVkZWR9LnRvZG8tbGlzdCBsaTpsYXN0LWNoaWxke2JvcmRl
ci1ib3R0b206bm9uZX0udG9kby1saXN0IGxpLmVkaXRpbmd7Ym9yZGVyLWJvdHRvbTpub25lO3Bh
ZGRpbmc6MH0udG9kby1saXN0IGxpLmVkaXRpbmcgLmVkaXR7ZGlzcGxheTpibG9jazt3aWR0aDo1
MDZweDtwYWRkaW5nOjEycHggMTZweDttYXJnaW46MCAwIDAgNDNweH0udG9kby1saXN0IGxpLmVk
aXRpbmcgLnZpZXd7ZGlzcGxheTpub25lfS50b2RvLWxpc3QgbGkgLnRvZ2dsZXt0ZXh0LWFsaWdu
OmNlbnRlcjt3aWR0aDo0MHB4O2hlaWdodDphdXRvO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2Jv
dHRvbTowO21hcmdpbjphdXRvIDA7Ym9yZGVyOm5vbmU7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7
YXBwZWFyYW5jZTpub25lO29wYWNpdHk6MH0udG9kby1saXN0IGxpIC50b2dnbGUrbGFiZWx7YmFj
a2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LCUzQ3N2ZyUyMHhtbG5z
JTNEJTIyaHR0cCUzQS8vd3d3LnczLm9yZy8yMDAwL3N2ZyUyMiUyMHdpZHRoJTNEJTIyNDAlMjIl
MjBoZWlnaHQlM0QlMjI0MCUyMiUyMHZpZXdCb3glM0QlMjItMTAlMjAtMTglMjAxMDAlMjAxMzUl
MjIlM0UlM0NjaXJjbGUlMjBjeCUzRCUyMjUwJTIyJTIwY3klM0QlMjI1MCUyMiUyMHIlM0QlMjI1
MCUyMiUyMGZpbGwlM0QlMjJub25lJTIyJTIwc3Ryb2tlJTNEJTIyJTIzZWRlZGVkJTIyJTIwc3Ry
b2tlLXdpZHRoJTNEJTIyMyUyMi8lM0UlM0Mvc3ZnJTNFIik7YmFja2dyb3VuZC1yZXBlYXQ6bm8t
cmVwZWF0O2JhY2tncm91bmQtcG9zaXRpb246MH0udG9kby1saXN0IGxpIC50b2dnbGU6Y2hlY2tl
ZCtsYWJlbHtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsJTND
c3ZnJTIweG1sbnMlM0QlMjJodHRwJTNBLy93d3cudzMub3JnLzIwMDAvc3ZnJTIyJTIwd2lkdGgl
M0QlMjI0MCUyMiUyMGhlaWdodCUzRCUyMjQwJTIyJTIwdmlld0JveCUzRCUyMi0xMCUyMC0xOCUy
MDEwMCUyMDEzNSUyMiUzRSUzQ2NpcmNsZSUyMGN4JTNEJTIyNTAlMjIlMjBjeSUzRCUyMjUwJTIy
JTIwciUzRCUyMjUwJTIyJTIwZmlsbCUzRCUyMm5vbmUlMjIlMjBzdHJva2UlM0QlMjIlMjNiZGRh
ZDUlMjIlMjBzdHJva2Utd2lkdGglM0QlMjIzJTIyLyUzRSUzQ3BhdGglMjBmaWxsJTNEJTIyJTIz
NWRjMmFmJTIyJTIwZCUzRCUyMk03MiUyMDI1TDQyJTIwNzElMjAyNyUyMDU2bC00JTIwNCUyMDIw
JTIwMjAlMjAzNC01MnolMjIvJTNFJTNDL3N2ZyUzRSIpfS50b2RvLWxpc3QgbGkgbGFiZWx7d29y
ZC1icmVhazpicmVhay1hbGw7cGFkZGluZzoxNXB4IDE1cHggMTVweCA2MHB4O2Rpc3BsYXk6Ymxv
Y2s7bGluZS1oZWlnaHQ6MS4yO3RyYW5zaXRpb246Y29sb3IgLjRzfS50b2RvLWxpc3QgbGkuY29t
cGxldGVkIGxhYmVse2NvbG9yOiNkOWQ5ZDk7dGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3VnaH0u
dG9kby1saXN0IGxpIC5kZXN0cm95e2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6
MDtyaWdodDoxMHB4O2JvdHRvbTowO3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7bWFyZ2luOmF1dG8g
MDtmb250LXNpemU6MzBweDtjb2xvcjojY2M5YTlhO21hcmdpbi1ib3R0b206MTFweDt0cmFuc2l0
aW9uOmNvbG9yIC4ycyBlYXNlLW91dH0udG9kby1saXN0IGxpIC5kZXN0cm95OmhvdmVye2NvbG9y
OiNhZjViNWV9LnRvZG8tbGlzdCBsaSAuZGVzdHJveTphZnRlcntjb250ZW50OiJcRDcifS50b2Rv
LWxpc3QgbGk6aG92ZXIgLmRlc3Ryb3l7ZGlzcGxheTpibG9ja30udG9kby1saXN0IGxpIC5lZGl0
e2Rpc3BsYXk6bm9uZX0udG9kby1saXN0IGxpLmVkaXRpbmc6bGFzdC1jaGlsZHttYXJnaW4tYm90
dG9tOi0xcHh9LmZvb3Rlcntjb2xvcjojNzc3O3BhZGRpbmc6MTBweCAxNXB4O2hlaWdodDoyMHB4
O3RleHQtYWxpZ246Y2VudGVyO2JvcmRlci10b3A6MXB4IHNvbGlkICNlNmU2ZTZ9LmZvb3Rlcjpi
ZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO2JvdHRvbTowO2xlZnQ6
MDtoZWlnaHQ6NTBweDtvdmVyZmxvdzpoaWRkZW47Ym94LXNoYWRvdzowIDFweCAxcHggcmdiYSgw
LDAsMCwuMiksMCA4cHggMCAtM3B4ICNmNmY2ZjYsMCA5cHggMXB4IC0zcHggcmdiYSgwLDAsMCwu
MiksMCAxNnB4IDAgLTZweCAjZjZmNmY2LDAgMTdweCAycHggLTZweCByZ2JhKDAsMCwwLC4yKX0u
dG9kby1jb3VudHtmbG9hdDpsZWZ0O3RleHQtYWxpZ246bGVmdH0udG9kby1jb3VudCBzdHJvbmd7
Zm9udC13ZWlnaHQ6MzAwfS5maWx0ZXJze21hcmdpbjowO3BhZGRpbmc6MDtsaXN0LXN0eWxlOm5v
bmU7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDtsZWZ0OjB9LmZpbHRlcnMgbGl7ZGlzcGxheTpp
bmxpbmV9LmZpbHRlcnMgbGkgYXtjb2xvcjppbmhlcml0O21hcmdpbjozcHg7cGFkZGluZzozcHgg
N3B4O3RleHQtZGVjb3JhdGlvbjpub25lO2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnQ7Ym9y
ZGVyLXJhZGl1czozcHh9LmZpbHRlcnMgbGkgYTpob3Zlcntib3JkZXItY29sb3I6cmdiYSgxNzUs
NDcsNDcsLjEpfS5maWx0ZXJzIGxpIGEuc2VsZWN0ZWR7Ym9yZGVyLWNvbG9yOnJnYmEoMTc1LDQ3
LDQ3LC4yKX0uY2xlYXItY29tcGxldGVkLGh0bWwgLmNsZWFyLWNvbXBsZXRlZDphY3RpdmV7Zmxv
YXQ6cmlnaHQ7cG9zaXRpb246cmVsYXRpdmU7bGluZS1oZWlnaHQ6MjBweDt0ZXh0LWRlY29yYXRp
b246bm9uZTtjdXJzb3I6cG9pbnRlcn0uY2xlYXItY29tcGxldGVkOmhvdmVye3RleHQtZGVjb3Jh
dGlvbjp1bmRlcmxpbmV9LmluZm97bWFyZ2luOjY1cHggYXV0byAwO2NvbG9yOiNiZmJmYmY7Zm9u
dC1zaXplOjEwcHg7dGV4dC1zaGFkb3c6MCAxcHggMCBoc2xhKDAsMCUsMTAwJSwuNSk7dGV4dC1h
bGlnbjpjZW50ZXJ9LmluZm8gcHtsaW5lLWhlaWdodDoxfS5pbmZvIGF7Y29sb3I6aW5oZXJpdDt0
ZXh0LWRlY29yYXRpb246bm9uZTtmb250LXdlaWdodDo0MDB9LmluZm8gYTpob3Zlcnt0ZXh0LWRl
Y29yYXRpb246dW5kZXJsaW5lfUBtZWRpYSBzY3JlZW4gYW5kICgtd2Via2l0LW1pbi1kZXZpY2Ut
cGl4ZWwtcmF0aW86MCl7LnRvZG8tbGlzdCBsaSAudG9nZ2xlLC50b2dnbGUtYWxse2JhY2tncm91
bmQ6bm9uZX0udG9kby1saXN0IGxpIC50b2dnbGV7aGVpZ2h0OjQwcHh9fUBtZWRpYSAobWF4LXdp
ZHRoOjQzMHB4KXsuZm9vdGVye2hlaWdodDo1MHB4fS5maWx0ZXJze2JvdHRvbToxMHB4fX0KKy8q
IyBzb3VyY2VNYXBwaW5nVVJMPXN0eWxlcy52ZW5kb3IuNTc3YzZiYzA5MzE5YjI3ZmVkMzQuY3Nz
Lm1hcCovClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMv
YnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxh
LWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL2Rpc3Qvc3R5bGVzLnZlbmRvci41NzdjNmJj
MDkzMTliMjdmZWQzNC5jc3MubWFwIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9t
ZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13
ZWJwYWNrL2Rpc3Qvc3R5bGVzLnZlbmRvci41NzdjNmJjMDkzMTliMjdmZWQzNC5jc3MubWFwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjU0OGRkNjJmYmI4OWYzOWZlODhjMzBhZWExOGM1YTU3ODE3ZTJmODQKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jl
c291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svZGlz
dC9zdHlsZXMudmVuZG9yLjU3N2M2YmMwOTMxOWIyN2ZlZDM0LmNzcy5tYXAKQEAgLTAsMCArMSBA
QAoreyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZp
bGUiOiJzdHlsZXMudmVuZG9yLjU3N2M2YmMwOTMxOWIyN2ZlZDM0LmNzcyIsInNvdXJjZVJvb3Qi
OiIifQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jy
b3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1l
eGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9zcmMvYXBwLmNzcyBiL1dlYnNpdGVzL2Jyb3dz
ZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFt
cGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9zcmMvYXBwLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MjdhNThm
NzFmMzlmZjAxZjBhNTI2OTcyOTIzZjFkMWUwZmNkMTFiCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
c2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy92
YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9hcHAuY3NzCkBAIC0wLDAg
KzEsMjAgQEAKKy50b2dnbGUtZ3JhcGggeworICBmbG9hdDogbGVmdDsKKyAgbWFyZ2luLWxlZnQ6
IDE2cHg7CisgIGN1cnNvcjogcG9pbnRlcjsKKyAgcG9zaXRpb246IHJlbGF0aXZlOworICB6LWlu
ZGV4OiAxOworfQorLnRvZ2dsZS1ncmFwaCBzdmcgeworICBoZWlnaHQ6IDIwcHg7CisgIHdpZHRo
OiAyMHB4OworfQorLnRvZ2dsZS1ncmFwaCBzdmcgcGF0aCB7CisgIGZpbGw6ICM3Nzc7Cit9CisK
Ky50b2dnbGUtZ3JhcGguYWN0aXZlIHN2ZyBwYXRoLAorLnRvZ2dsZS1ncmFwaDpob3ZlciBzdmcg
cGF0aCwKKy50b2dnbGUtZ3JhcGg6Zm9jdXMgc3ZnIHBhdGggeworICBmaWxsOiBibGFjazsKK30K
ZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVz
b3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9zcmMv
YXBwLmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJj
ZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9hcHAu
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYjdlMDJmZGU5MDIzNTU2YzA1M2E5Yjk2MDgyMGM5ZTNjZmRlNjBmNwot
LS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIy
LjEvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFj
ay9zcmMvYXBwLmpzCkBAIC0wLDAgKzEsOSBAQAoraW1wb3J0ICd0b2RvbXZjLWFwcC1jc3MvaW5k
ZXguY3NzJworaW1wb3J0ICcuL2FwcC5jc3MnCisKK2ltcG9ydCB7JG9ufSBmcm9tICcuL2hlbHBl
cnMnCitpbXBvcnQge3VwZGF0ZVRvZG99IGZyb20gJy4vdG9kbycKKworZXhwb3J0IGZ1bmN0aW9u
IG9uTG9hZCgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbXBvcnQvcHJlZmVyLWRlZmF1bHQt
ZXhwb3J0CisgIHVwZGF0ZVRvZG8oKQorfQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJl
bmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVz
L2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9ib290c3RyYXAuanMgYi9XZWJzaXRlcy9icm93c2Vy
YmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBs
ZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svc3JjL2Jvb3RzdHJhcC5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNmQ1
ZTgyMWJhN2VhNmU5ODY1Zjk4YzRjYzVhNTBiNWZkNmUzMDkxCi0tLSAvZGV2L251bGwKKysrIGIv
V2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212
Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9ib290c3RyYXAuanMK
QEAgLTAsMCArMSwyMyBAQAorLyogZXNsaW50IG5vLWNvbnNvbGU6MCAqLworaW1wb3J0IHtvbkxv
YWR9IGZyb20gJy4vYXBwJworaW1wb3J0IHskb259IGZyb20gJy4vaGVscGVycycKKworLy8gdGhp
cyBpcyBvbmx5IHJlbGV2YW50IHdoZW4gdXNpbmcgYGhvdGAgbW9kZSB3aXRoIHdlYnBhY2sKKy8v
IHNwZWNpYWwgdGhhbmtzIHRvIEVyaWMgQ2xlbW1vbnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9lcmlj
Y2xlbW1vbnMvd2VicGFjay1ob3Qtc2VydmVyLWV4YW1wbGUKK2NvbnN0IHJlbG9hZGluZyA9IGRv
Y3VtZW50LnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScKK2lmIChtb2R1bGUuaG90KSB7CisgIG1v
ZHVsZS5ob3QuYWNjZXB0KGZ1bmN0aW9uKGVycikgeworICB9KQorICBpZiAocmVsb2FkaW5nKSB7
CisgICAgb25Mb2FkKCkKKyAgfSBlbHNlIHsKKyAgICBib290c3RyYXAoKQorICB9Cit9IGVsc2Ug
eworICBib290c3RyYXAoKQorfQorCitmdW5jdGlvbiBib290c3RyYXAoKSB7CisgICRvbih3aW5k
b3csICdsb2FkJywgb25Mb2FkKQorICAkb24od2luZG93LCAnaGFzaGNoYW5nZScsIG9uTG9hZCkK
K30KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEv
cmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9z
cmMvY29udHJvbGxlci5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIy
LjEvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFj
ay9zcmMvY29udHJvbGxlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YTQ4YzkwNmJjMzZjZTRiYzhiNzIzZjNm
MmZmMDMzOTQ0MGM1ZjQzCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNo
Lm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2Vz
MjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9jb250cm9sbGVyLmpzCkBAIC0wLDAgKzEsMjYzIEBACitl
eHBvcnQgZGVmYXVsdCBDb250cm9sbGVyCisKKy8qKgorKiBUYWtlcyBhIG1vZGVsIGFuZCB2aWV3
IGFuZCBhY3RzIGFzIHRoZSBjb250cm9sbGVyIGJldHdlZW4gdGhlbQorKgorKiBAY29uc3RydWN0
b3IKKyogQHBhcmFtIHtvYmplY3R9IG1vZGVsIFRoZSBtb2RlbCBpbnN0YW5jZQorKiBAcGFyYW0g
e29iamVjdH0gdmlldyBUaGUgdmlldyBpbnN0YW5jZQorKi8KK2Z1bmN0aW9uIENvbnRyb2xsZXIo
bW9kZWwsIHZpZXcpIHsKKyAgdmFyIHRoYXQgPSB0aGlzCisgIHRoYXQubW9kZWwgPSBtb2RlbAor
ICB0aGF0LnZpZXcgPSB2aWV3CisKKyAgdGhhdC52aWV3LmJpbmQoJ25ld1RvZG8nLCBmdW5jdGlv
bih0aXRsZSkgeworICAgIHRoYXQuYWRkSXRlbSh0aXRsZSkKKyAgfSkKKworICB0aGF0LnZpZXcu
YmluZCgnaXRlbUVkaXQnLCBmdW5jdGlvbihpdGVtKSB7CisgICAgdGhhdC5lZGl0SXRlbShpdGVt
LmlkKQorICB9KQorCisgIHRoYXQudmlldy5iaW5kKCdpdGVtRWRpdERvbmUnLCBmdW5jdGlvbihp
dGVtKSB7CisgICAgdGhhdC5lZGl0SXRlbVNhdmUoaXRlbS5pZCwgaXRlbS50aXRsZSkKKyAgfSkK
KworICB0aGF0LnZpZXcuYmluZCgnaXRlbUVkaXRDYW5jZWwnLCBmdW5jdGlvbihpdGVtKSB7Cisg
ICAgdGhhdC5lZGl0SXRlbUNhbmNlbChpdGVtLmlkKQorICB9KQorCisgIHRoYXQudmlldy5iaW5k
KCdpdGVtUmVtb3ZlJywgZnVuY3Rpb24oaXRlbSkgeworICAgIHRoYXQucmVtb3ZlSXRlbShpdGVt
LmlkKQorICB9KQorCisgIHRoYXQudmlldy5iaW5kKCdpdGVtVG9nZ2xlJywgZnVuY3Rpb24oaXRl
bSkgeworICAgIHRoYXQudG9nZ2xlQ29tcGxldGUoaXRlbS5pZCwgaXRlbS5jb21wbGV0ZWQpCisg
IH0pCisKKyAgdGhhdC52aWV3LmJpbmQoJ3JlbW92ZUNvbXBsZXRlZCcsIGZ1bmN0aW9uKCkgewor
ICAgIHRoYXQucmVtb3ZlQ29tcGxldGVkSXRlbXMoKQorICB9KQorCisgIHRoYXQudmlldy5iaW5k
KCd0b2dnbGVBbGwnLCBmdW5jdGlvbihzdGF0dXMpIHsKKyAgICB0aGF0LnRvZ2dsZUFsbChzdGF0
dXMuY29tcGxldGVkKQorICB9KQorfQorCisvKioKKyogTG9hZHMgYW5kIGluaXRpYWxpc2VzIHRo
ZSB2aWV3CisqCisqIEBwYXJhbSB7c3RyaW5nfSAnJyB8ICdhY3RpdmUnIHwgJ2NvbXBsZXRlZCcK
KyovCitDb250cm9sbGVyLnByb3RvdHlwZS5zZXRWaWV3ID0gZnVuY3Rpb24obG9jYXRpb25IYXNo
KSB7CisgIHZhciByb3V0ZSA9IGxvY2F0aW9uSGFzaC5zcGxpdCgnLycpWzFdCisgIHZhciBwYWdl
ID0gcm91dGUgfHwgJycKKyAgdGhpcy5fdXBkYXRlRmlsdGVyU3RhdGUocGFnZSkKK30KKworLyoq
CisqIEFuIGV2ZW50IHRvIGZpcmUgb24gbG9hZC4gV2lsbCBnZXQgYWxsIGl0ZW1zIGFuZCBkaXNw
bGF5IHRoZW0gaW4gdGhlCisqIHRvZG8tbGlzdAorKi8KK0NvbnRyb2xsZXIucHJvdG90eXBlLnNo
b3dBbGwgPSBmdW5jdGlvbigpIHsKKyAgdmFyIHRoYXQgPSB0aGlzCisgIHRoYXQubW9kZWwucmVh
ZChmdW5jdGlvbihkYXRhKSB7CisgICAgdGhhdC52aWV3LnJlbmRlcignc2hvd0VudHJpZXMnLCBk
YXRhKQorICB9KQorfQorCisvKioKKyogUmVuZGVycyBhbGwgYWN0aXZlIHRhc2tzCisqLworQ29u
dHJvbGxlci5wcm90b3R5cGUuc2hvd0FjdGl2ZSA9IGZ1bmN0aW9uKCkgeworICB2YXIgdGhhdCA9
IHRoaXMKKyAgdGhhdC5tb2RlbC5yZWFkKHtjb21wbGV0ZWQ6IGZhbHNlfSwgZnVuY3Rpb24oZGF0
YSkgeworICAgIHRoYXQudmlldy5yZW5kZXIoJ3Nob3dFbnRyaWVzJywgZGF0YSkKKyAgfSkKK30K
KworLyoqCisqIFJlbmRlcnMgYWxsIGNvbXBsZXRlZCB0YXNrcworKi8KK0NvbnRyb2xsZXIucHJv
dG90eXBlLnNob3dDb21wbGV0ZWQgPSBmdW5jdGlvbigpIHsKKyAgdmFyIHRoYXQgPSB0aGlzCisg
IHRoYXQubW9kZWwucmVhZCh7Y29tcGxldGVkOiB0cnVlfSwgZnVuY3Rpb24oZGF0YSkgeworICAg
IHRoYXQudmlldy5yZW5kZXIoJ3Nob3dFbnRyaWVzJywgZGF0YSkKKyAgfSkKK30KKworLyoqCisq
IEFuIGV2ZW50IHRvIGZpcmUgd2hlbmV2ZXIgeW91IHdhbnQgdG8gYWRkIGFuIGl0ZW0uIFNpbXBs
eSBwYXNzIGluIHRoZSBldmVudAorKiBvYmplY3QgYW5kIGl0J2xsIGhhbmRsZSB0aGUgRE9NIGlu
c2VydGlvbiBhbmQgc2F2aW5nIG9mIHRoZSBuZXcgaXRlbS4KKyovCitDb250cm9sbGVyLnByb3Rv
dHlwZS5hZGRJdGVtID0gZnVuY3Rpb24odGl0bGUpIHsKKyAgdmFyIHRoYXQgPSB0aGlzCisKKyAg
aWYgKHRpdGxlLnRyaW0oKSA9PT0gJycpIHsKKyAgICByZXR1cm4KKyAgfQorCisgIHRoYXQubW9k
ZWwuY3JlYXRlKHRpdGxlLCBmdW5jdGlvbigpIHsKKyAgICB0aGF0LnZpZXcucmVuZGVyKCdjbGVh
ck5ld1RvZG8nKQorICAgIHRoYXQuX2ZpbHRlcih0cnVlKQorICB9KQorfQorCisvKgorKiBUcmln
Z2VycyB0aGUgaXRlbSBlZGl0aW5nIG1vZGUuCisqLworQ29udHJvbGxlci5wcm90b3R5cGUuZWRp
dEl0ZW0gPSBmdW5jdGlvbihpZCkgeworICB2YXIgdGhhdCA9IHRoaXMKKyAgdGhhdC5tb2RlbC5y
ZWFkKGlkLCBmdW5jdGlvbihkYXRhKSB7CisgICAgdGhhdC52aWV3LnJlbmRlcignZWRpdEl0ZW0n
LCB7aWQsIHRpdGxlOiBkYXRhWzBdLnRpdGxlfSkKKyAgfSkKK30KKworLyoKKyogRmluaXNoZXMg
dGhlIGl0ZW0gZWRpdGluZyBtb2RlIHN1Y2Nlc3NmdWxseS4KKyovCitDb250cm9sbGVyLnByb3Rv
dHlwZS5lZGl0SXRlbVNhdmUgPSBmdW5jdGlvbihpZCwgdGl0bGUpIHsKKyAgdmFyIHRoYXQgPSB0
aGlzCisgIGlmICh0aXRsZS50cmltKCkpIHsKKyAgICB0aGF0Lm1vZGVsLnVwZGF0ZShpZCwge3Rp
dGxlfSwgZnVuY3Rpb24oKSB7CisgICAgICB0aGF0LnZpZXcucmVuZGVyKCdlZGl0SXRlbURvbmUn
LCB7aWQsIHRpdGxlfSkKKyAgICB9KQorICB9IGVsc2UgeworICAgIHRoYXQucmVtb3ZlSXRlbShp
ZCkKKyAgfQorfQorCisvKgorKiBDYW5jZWxzIHRoZSBpdGVtIGVkaXRpbmcgbW9kZS4KKyovCitD
b250cm9sbGVyLnByb3RvdHlwZS5lZGl0SXRlbUNhbmNlbCA9IGZ1bmN0aW9uKGlkKSB7CisgIHZh
ciB0aGF0ID0gdGhpcworICB0aGF0Lm1vZGVsLnJlYWQoaWQsIGZ1bmN0aW9uKGRhdGEpIHsKKyAg
ICB0aGF0LnZpZXcucmVuZGVyKCdlZGl0SXRlbURvbmUnLCB7aWQsIHRpdGxlOiBkYXRhWzBdLnRp
dGxlfSkKKyAgfSkKK30KKworLyoqCisqIEJ5IGdpdmluZyBpdCBhbiBJRCBpdCdsbCBmaW5kIHRo
ZSBET00gZWxlbWVudCBtYXRjaGluZyB0aGF0IElELAorKiByZW1vdmUgaXQgZnJvbSB0aGUgRE9N
IGFuZCBhbHNvIHJlbW92ZSBpdCBmcm9tIHN0b3JhZ2UuCisqCisqIEBwYXJhbSB7bnVtYmVyfSBp
ZCBUaGUgSUQgb2YgdGhlIGl0ZW0gdG8gcmVtb3ZlIGZyb20gdGhlIERPTSBhbmQKKyogc3RvcmFn
ZQorKi8KK0NvbnRyb2xsZXIucHJvdG90eXBlLnJlbW92ZUl0ZW0gPSBmdW5jdGlvbihpZCkgewor
ICB2YXIgdGhhdCA9IHRoaXMKKyAgdGhhdC5tb2RlbC5yZW1vdmUoaWQsIGZ1bmN0aW9uKCkgewor
ICAgIHRoYXQudmlldy5yZW5kZXIoJ3JlbW92ZUl0ZW0nLCBpZCkKKyAgfSkKKworICB0aGF0Ll9m
aWx0ZXIoKQorfQorCisvKioKKyogV2lsbCByZW1vdmUgYWxsIGNvbXBsZXRlZCBpdGVtcyBmcm9t
IHRoZSBET00gYW5kIHN0b3JhZ2UuCisqLworQ29udHJvbGxlci5wcm90b3R5cGUucmVtb3ZlQ29t
cGxldGVkSXRlbXMgPSBmdW5jdGlvbigpIHsKKyAgdmFyIHRoYXQgPSB0aGlzCisgIHRoYXQubW9k
ZWwucmVhZCh7Y29tcGxldGVkOiB0cnVlfSwgZnVuY3Rpb24oZGF0YSkgeworICAgIGRhdGEuZm9y
RWFjaChmdW5jdGlvbihpdGVtKSB7CisgICAgICB0aGF0LnJlbW92ZUl0ZW0oaXRlbS5pZCkKKyAg
ICB9KQorICB9KQorCisgIHRoYXQuX2ZpbHRlcigpCit9CisKKy8qKgorKiBHaXZlIGl0IGFuIElE
IG9mIGEgbW9kZWwgYW5kIGEgY2hlY2tib3ggYW5kIGl0IHdpbGwgdXBkYXRlIHRoZSBpdGVtCisq
IGluIHN0b3JhZ2UgYmFzZWQgb24gdGhlIGNoZWNrYm94J3Mgc3RhdGUuCisqCisqIEBwYXJhbSB7
bnVtYmVyfSBpZCBUaGUgSUQgb2YgdGhlIGVsZW1lbnQgdG8gY29tcGxldGUgb3IgdW5jb21wbGV0
ZQorKiBAcGFyYW0ge29iamVjdH0gY2hlY2tib3ggVGhlIGNoZWNrYm94IHRvIGNoZWNrIHRoZSBz
dGF0ZSBvZiBjb21wbGV0ZQorKiAgICAgICAgICAgICAgICAgICAgICAgICAgb3Igbm90CisqIEBw
YXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IHNpbGVudCBQcmV2ZW50IHJlLWZpbHRlcmluZyB0aGUg
dG9kbyBpdGVtcworKi8KK0NvbnRyb2xsZXIucHJvdG90eXBlLnRvZ2dsZUNvbXBsZXRlID0gZnVu
Y3Rpb24oaWQsIGNvbXBsZXRlZCwgc2lsZW50KSB7CisgIHZhciB0aGF0ID0gdGhpcworICB0aGF0
Lm1vZGVsLnVwZGF0ZShpZCwge2NvbXBsZXRlZH0sIGZ1bmN0aW9uKCkgeworICAgIHRoYXQudmll
dy5yZW5kZXIoJ2VsZW1lbnRDb21wbGV0ZScsIHsKKyAgICAgIGlkLAorICAgICAgY29tcGxldGVk
LAorICAgIH0pCisgIH0pCisKKyAgaWYgKCFzaWxlbnQpIHsKKyAgICB0aGF0Ll9maWx0ZXIoKQor
ICB9Cit9CisKKy8qKgorKiBXaWxsIHRvZ2dsZSBBTEwgY2hlY2tib3hlcycgb24vb2ZmIHN0YXRl
IGFuZCBjb21wbGV0ZW5lc3Mgb2YgbW9kZWxzLgorKiBKdXN0IHBhc3MgaW4gdGhlIGV2ZW50IG9i
amVjdC4KKyovCitDb250cm9sbGVyLnByb3RvdHlwZS50b2dnbGVBbGwgPSBmdW5jdGlvbihjb21w
bGV0ZWQpIHsKKyAgdmFyIHRoYXQgPSB0aGlzCisgIHRoYXQubW9kZWwucmVhZCh7Y29tcGxldGVk
OiAhY29tcGxldGVkfSwgZnVuY3Rpb24oZGF0YSkgeworICAgIGRhdGEuZm9yRWFjaChmdW5jdGlv
bihpdGVtKSB7CisgICAgICB0aGF0LnRvZ2dsZUNvbXBsZXRlKGl0ZW0uaWQsIGNvbXBsZXRlZCwg
dHJ1ZSkKKyAgICB9KQorICB9KQorCisgIHRoYXQuX2ZpbHRlcigpCit9CisKKy8qKgorKiBVcGRh
dGVzIHRoZSBwaWVjZXMgb2YgdGhlIHBhZ2Ugd2hpY2ggY2hhbmdlIGRlcGVuZGluZyBvbiB0aGUg
cmVtYWluaW5nCisqIG51bWJlciBvZiB0b2Rvcy4KKyovCitDb250cm9sbGVyLnByb3RvdHlwZS5f
dXBkYXRlQ291bnQgPSBmdW5jdGlvbigpIHsKKyAgdmFyIHRoYXQgPSB0aGlzCisgIHRoYXQubW9k
ZWwuZ2V0Q291bnQoZnVuY3Rpb24odG9kb3MpIHsKKyAgICB0aGF0LnZpZXcucmVuZGVyKCd1cGRh
dGVFbGVtZW50Q291bnQnLCB0b2Rvcy5hY3RpdmUpCisgICAgdGhhdC52aWV3LnJlbmRlcignY2xl
YXJDb21wbGV0ZWRCdXR0b24nLCB7CisgICAgICBjb21wbGV0ZWQ6IHRvZG9zLmNvbXBsZXRlZCwK
KyAgICAgIHZpc2libGU6IHRvZG9zLmNvbXBsZXRlZCA+IDAKKyAgICB9KQorCisgICAgdGhhdC52
aWV3LnJlbmRlcigndG9nZ2xlQWxsJywge2NoZWNrZWQ6IHRvZG9zLmNvbXBsZXRlZCA9PT0gdG9k
b3MudG90YWx9KQorICAgIHRoYXQudmlldy5yZW5kZXIoJ2NvbnRlbnRCbG9ja1Zpc2liaWxpdHkn
LCB7dmlzaWJsZTogdG9kb3MudG90YWwgPiAwfSkKKyAgfSkKK30KKworLyoqCisqIFJlLWZpbHRl
cnMgdGhlIHRvZG8gaXRlbXMsIGJhc2VkIG9uIHRoZSBhY3RpdmUgcm91dGUuCisqIEBwYXJhbSB7
Ym9vbGVhbnx1bmRlZmluZWR9IGZvcmNlICBmb3JjZXMgYSByZS1wYWludGluZyBvZiB0b2RvIGl0
ZW1zLgorKi8KK0NvbnRyb2xsZXIucHJvdG90eXBlLl9maWx0ZXIgPSBmdW5jdGlvbihmb3JjZSkg
eworICB2YXIgYWN0aXZlUm91dGUgPSB0aGlzLl9hY3RpdmVSb3V0ZS5jaGFyQXQoMCkudG9VcHBl
ckNhc2UoKSArIHRoaXMuX2FjdGl2ZVJvdXRlLnN1YnN0cigxKQorCisgIC8vIFVwZGF0ZSB0aGUg
ZWxlbWVudHMgb24gdGhlIHBhZ2UsIHdoaWNoIGNoYW5nZSB3aXRoIGVhY2ggY29tcGxldGVkIHRv
ZG8KKyAgdGhpcy5fdXBkYXRlQ291bnQoKQorCisgIC8vIElmIHRoZSBsYXN0IGFjdGl2ZSByb3V0
ZSBpc24ndCAiQWxsIiwgb3Igd2UncmUgc3dpdGNoaW5nIHJvdXRlcywgd2UKKyAgLy8gcmUtY3Jl
YXRlIHRoZSB0b2RvIGl0ZW0gZWxlbWVudHMsIGNhbGxpbmc6CisgIC8vICAgdGhpcy5zaG93W0Fs
bHxBY3RpdmV8Q29tcGxldGVkXSgpOworICBpZiAoZm9yY2UgfHwgdGhpcy5fbGFzdEFjdGl2ZVJv
dXRlICE9PSAnQWxsJyB8fCB0aGlzLl9sYXN0QWN0aXZlUm91dGUgIT09IGFjdGl2ZVJvdXRlKSB7
CisgICAgdGhpc1snc2hvdycgKyBhY3RpdmVSb3V0ZV0oKQorICB9CisKKyAgdGhpcy5fbGFzdEFj
dGl2ZVJvdXRlID0gYWN0aXZlUm91dGUKK30KKworLyoqCisqIFNpbXBseSB1cGRhdGVzIHRoZSBm
aWx0ZXIgbmF2J3Mgc2VsZWN0ZWQgc3RhdGVzCisqLworQ29udHJvbGxlci5wcm90b3R5cGUuX3Vw
ZGF0ZUZpbHRlclN0YXRlID0gZnVuY3Rpb24oY3VycmVudFBhZ2UpIHsKKyAgLy8gU3RvcmUgYSBy
ZWZlcmVuY2UgdG8gdGhlIGFjdGl2ZSByb3V0ZSwgYWxsb3dpbmcgdXMgdG8gcmUtZmlsdGVyIHRv
ZG8KKyAgLy8gaXRlbXMgYXMgdGhleSBhcmUgbWFya2VkIGNvbXBsZXRlIG9yIGluY29tcGxldGUu
CisgIGN1cnJlbnRQYWdlID0gY3VycmVudFBhZ2Uuc3BsaXQoJz8nKVswXQorICB0aGlzLl9hY3Rp
dmVSb3V0ZSA9IGN1cnJlbnRQYWdlCisKKyAgaWYgKGN1cnJlbnRQYWdlID09PSAnJykgeworICAg
IHRoaXMuX2FjdGl2ZVJvdXRlID0gJ0FsbCcKKyAgfQorCisgIHRoaXMuX2ZpbHRlcigpCisKKyAg
dGhpcy52aWV3LnJlbmRlcignc2V0RmlsdGVyJywgY3VycmVudFBhZ2UpCit9CmRpZmYgLS1naXQg
YS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2Rv
bXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svc3JjL2NvbnRyb2xsZXIu
dGVzdC5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3Vy
Y2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9zcmMvY29u
dHJvbGxlci50ZXN0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIzNDk1NTliOWM4MzdhN2Q1OGVhMWEzMDVjYjc3
Nzg3YWJjZDBmMjIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3Jn
L1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1
LWJhYmVsLXdlYnBhY2svc3JjL2NvbnRyb2xsZXIudGVzdC5qcwpAQCAtMCwwICsxLDcgQEAKK2lt
cG9ydCBDb250cm9sbGVyIGZyb20gJy4vY29udHJvbGxlcicKKworZGVzY3JpYmUoJ2NvbnRyb2xs
ZXInLCAoKSA9PiB7CisgIGl0KCdleGlzdHMnLCAoKSA9PiB7CisgICAgZXhwZWN0KENvbnRyb2xs
ZXIpLnRvLmV4aXN0CisgIH0pCit9KQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNo
Lm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2Vz
MjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9oZWxwZXJzLmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNo
Lm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2Vz
MjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9oZWxwZXJzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU4OGVjYjhkOTQ0
NmU1MTQwN2I2NmJjMGJhMWE3OWQ0MTRiYzhjNjUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRl
cy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL3Zhbmls
bGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svc3JjL2hlbHBlcnMuanMKQEAgLTAsMCAr
MSw2MSBAQAorZXhwb3J0IHtxcywgcXNhLCAkb24sICRkZWxlZ2F0ZSwgJHBhcmVudCwgcmVtb3Zl
fQorCisvLyBHZXQgZWxlbWVudChzKSBieSBDU1Mgc2VsZWN0b3I6CitmdW5jdGlvbiBxcyhzZWxl
Y3Rvciwgc2NvcGUpIHsKKyAgcmV0dXJuIChzY29wZSB8fCBkb2N1bWVudCkucXVlcnlTZWxlY3Rv
cihzZWxlY3RvcikKK30KKworZnVuY3Rpb24gcXNhKHNlbGVjdG9yLCBzY29wZSkgeworICByZXR1
cm4gKHNjb3BlIHx8IGRvY3VtZW50KS5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKQorfQorCisv
LyBhZGRFdmVudExpc3RlbmVyIHdyYXBwZXI6CitmdW5jdGlvbiAkb24odGFyZ2V0LCB0eXBlLCBj
YWxsYmFjaywgdXNlQ2FwdHVyZSkgeworICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBj
YWxsYmFjaywgISF1c2VDYXB0dXJlKQorfQorCisvLyBBdHRhY2ggYSBoYW5kbGVyIHRvIGV2ZW50
IGZvciBhbGwgZWxlbWVudHMgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IsCisvLyBub3cgb3IgaW4g
dGhlIGZ1dHVyZSwgYmFzZWQgb24gYSByb290IGVsZW1lbnQKK2Z1bmN0aW9uICRkZWxlZ2F0ZSh0
YXJnZXQsIHNlbGVjdG9yLCB0eXBlLCBoYW5kbGVyKSB7CisgIC8vIGh0dHBzOi8vZGV2ZWxvcGVy
Lm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0V2ZW50cy9ibHVyCisgIHZhciB1c2VDYXB0dXJl
ID0gdHlwZSA9PT0gJ2JsdXInIHx8IHR5cGUgPT09ICdmb2N1cycKKyAgJG9uKHRhcmdldCwgdHlw
ZSwgZGlzcGF0Y2hFdmVudCwgdXNlQ2FwdHVyZSkKKworICBmdW5jdGlvbiBkaXNwYXRjaEV2ZW50
KGV2ZW50KSB7CisgICAgdmFyIHRhcmdldEVsZW1lbnQgPSBldmVudC50YXJnZXQKKyAgICB2YXIg
cG90ZW50aWFsRWxlbWVudHMgPSBxc2Eoc2VsZWN0b3IsIHRhcmdldCkKKyAgICB2YXIgaGFzTWF0
Y2ggPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHBvdGVudGlhbEVsZW1lbnRzLCB0YXJn
ZXRFbGVtZW50KSA+PSAwCisKKyAgICBpZiAoaGFzTWF0Y2gpIHsKKyAgICAgIGhhbmRsZXIuY2Fs
bCh0YXJnZXRFbGVtZW50LCBldmVudCkKKyAgICB9CisgIH0KK30KKworLy8gRmluZCB0aGUgZWxl
bWVudCdzIHBhcmVudCB3aXRoIHRoZSBnaXZlbiB0YWcgbmFtZToKKy8vICRwYXJlbnQocXMoJ2En
KSwgJ2RpdicpOworZnVuY3Rpb24gJHBhcmVudChlbGVtZW50LCB0YWdOYW1lKSB7CisgIGlmICgh
ZWxlbWVudC5wYXJlbnROb2RlKSB7CisgICAgcmV0dXJuIHVuZGVmaW5lZAorICB9CisgIGlmIChl
bGVtZW50LnBhcmVudE5vZGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSB0YWdOYW1lLnRvTG93
ZXJDYXNlKCkpIHsKKyAgICByZXR1cm4gZWxlbWVudC5wYXJlbnROb2RlCisgIH0KKyAgcmV0dXJu
ICRwYXJlbnQoZWxlbWVudC5wYXJlbnROb2RlLCB0YWdOYW1lKQorfQorCisvLyByZW1vdmVzIGFu
IGVsZW1lbnQgZnJvbSBhbiBhcnJheQorLy8gY29uc3QgeCA9IFsxLDIsM10KKy8vIHJlbW92ZSh4
LCAyKQorLy8geCB+PT0gWzEsM10KK2Z1bmN0aW9uIHJlbW92ZShhcnJheSwgdGhpbmcpIHsKKyAg
Y29uc3QgaW5kZXggPSBhcnJheS5pbmRleE9mKHRoaW5nKQorICBpZiAoaW5kZXggPT09IC0xKSB7
CisgICAgcmV0dXJuIGFycmF5CisgIH0KKyAgYXJyYXkuc3BsaWNlKGluZGV4LCAxKQorfQorCisv
LyBBbGxvdyBmb3IgbG9vcGluZyBvbiBub2RlcyBieSBjaGFpbmluZzoKKy8vIHFzYSgnLmZvbycp
LmZvckVhY2goZnVuY3Rpb24gKCkge30pCitOb2RlTGlzdC5wcm90b3R5cGUuZm9yRWFjaCA9IEFy
cmF5LnByb3RvdHlwZS5mb3JFYWNoCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gu
b3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMy
MDE1LWJhYmVsLXdlYnBhY2svc3JjL2luZGV4Lmh0bWwgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gu
b3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMy
MDE1LWJhYmVsLXdlYnBhY2svc3JjL2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjFiYzAxY2FiYmM4
MDI5ODY4MzVlMGViYzQ5Mjc1ZTMyZTgxYjVmOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVz
L2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxs
YS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9zcmMvaW5kZXguaHRtbApAQCAtMCwwICsx
LDQ0IEBACis8IWRvY3R5cGUgaHRtbD4KKzxodG1sIGxhbmc9ImVuIiBkYXRhLWZyYW1ld29yaz0i
amF2YXNjcmlwdCI+CisgIDxoZWFkPgorICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICA8
dGl0bGU+RVMyMDE1ICsgQmFiZWwgKyBXZWJwYWNrIFRvZG9NVkMgZXhhbXBsZTwvdGl0bGU+Cisg
ICAgPCU9aHRtbFdlYnBhY2tQbHVnaW4uZmlsZXMud2VicGFja01hbmlmZXN0JT4KKyAgPC9oZWFk
PgorICA8Ym9keT4KKyAgICA8c2VjdGlvbiBjbGFzcz0idG9kb2FwcCI+CisgICAgICA8aGVhZGVy
IGNsYXNzPSJoZWFkZXIiPgorICAgICAgICA8aDE+dG9kb3M8L2gxPgorICAgICAgICA8aW5wdXQg
Y2xhc3M9Im5ldy10b2RvIiBwbGFjZWhvbGRlcj0iV2hhdCBuZWVkcyB0byBiZSBkb25lPyIgYXV0
b2ZvY3VzPgorICAgICAgPC9oZWFkZXI+CisgICAgICA8c2VjdGlvbiBjbGFzcz0ibWFpbiI+Cisg
ICAgICAgIDxpbnB1dCBjbGFzcz0idG9nZ2xlLWFsbCIgdHlwZT0iY2hlY2tib3giPgorICAgICAg
ICA8bGFiZWwgZm9yPSJ0b2dnbGUtYWxsIj5NYXJrIGFsbCBhcyBjb21wbGV0ZTwvbGFiZWw+Cisg
ICAgICAgIDx1bCBjbGFzcz0idG9kby1saXN0Ij48L3VsPgorICAgICAgPC9zZWN0aW9uPgorICAg
ICAgPGZvb3RlciBjbGFzcz0iZm9vdGVyIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9InRvZG8tY291
bnQiPjwvc3Bhbj4KKyAgICAgICAgPHVsIGNsYXNzPSJmaWx0ZXJzIj4KKyAgICAgICAgICA8bGk+
CisgICAgICAgICAgICA8YSBocmVmPSIjLyIgY2xhc3M9InNlbGVjdGVkIj5BbGw8L2E+CisgICAg
ICAgICAgPC9saT4KKyAgICAgICAgICA8bGk+CisgICAgICAgICAgICA8YSBocmVmPSIjL2FjdGl2
ZSI+QWN0aXZlPC9hPgorICAgICAgICAgIDwvbGk+CisgICAgICAgICAgPGxpPgorICAgICAgICAg
ICAgPGEgaHJlZj0iIy9jb21wbGV0ZWQiPkNvbXBsZXRlZDwvYT4KKyAgICAgICAgICA8L2xpPgor
ICAgICAgICA8L3VsPgorICAgICAgICA8YnV0dG9uIGNsYXNzPSJjbGVhci1jb21wbGV0ZWQiPkNs
ZWFyIGNvbXBsZXRlZDwvYnV0dG9uPgorICAgICAgPC9mb290ZXI+CisgICAgPC9zZWN0aW9uPgor
ICAgIDxmb290ZXIgY2xhc3M9ImluZm8iPgorICAgICAgPHA+RG91YmxlLWNsaWNrIHRvIGVkaXQg
YSB0b2RvPC9wPgorICAgICAgPHA+U3BlZWRvbWV0ZXIgdmVyc2lvbiBieSA8YSBocmVmPSJodHRw
Oi8vdHdpdHRlci5jb20vYWRkeW9zbWFuaSI+QWRkeSBPc21hbmk8L2E+PC9wPgorICAgICAgPHA+
Q3JlYXRlZCBieSA8YSBocmVmPSJodHRwOi8vdHdpdHRlci5jb20vb3NjYXJnb2Rzb24iPk9zY2Fy
IEdvZHNvbjwvYT48L3A+CisgICAgICA8cD5SZWZhY3RvcmVkIGJ5IDxhIGhyZWY9Imh0dHBzOi8v
Z2l0aHViLmNvbS9jYnVyZ21lciI+Q2hyaXN0b3BoIEJ1cmdtZXI8L2E+PC9wPgorICAgICAgPHA+
UG9ydGVkIHRvIEVTNiBieSA8YSBocmVmPSJodHRwczovL3R3aXR0ZXIuY29tL2tlbnRjZG9kZHMi
PktlbnQgQy4gRG9kZHM8L2E+PC9wPgorICAgICAgPHA+UGFydCBvZiA8YSBocmVmPSJodHRwOi8v
dG9kb212Yy5jb20iPlRvZG9NVkM8L2E+PC9wPgorICAgIDwvZm9vdGVyPgorICA8L2JvZHk+Cis8
L2h0bWw+CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVy
Mi4xL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBh
Y2svc3JjL21lbW9yeS5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIy
LjEvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFj
ay9zcmMvbWVtb3J5LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM4MWMwZTUxMWY5YmZiMjNjMGU1ZDA0MzlhMzA4
YjgyZmI4NGNkM2MKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3Jn
L1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1
LWJhYmVsLXdlYnBhY2svc3JjL21lbW9yeS5qcwpAQCAtMCwwICsxLDgyIEBACisoZnVuY3Rpb24o
cm9vdCkgeworICB2YXIgbG9jYWxTdG9yYWdlTWVtb3J5ID0ge307CisgIHZhciBjYWNoZSA9IHt9
OworCisgIC8qKgorICAgKiBudW1iZXIgb2Ygc3RvcmVkIGl0ZW1zLgorICAgKi8KKyAgbG9jYWxT
dG9yYWdlTWVtb3J5Lmxlbmd0aCA9IDA7CisKKyAgLyoqCisgICAqIHJldHVybnMgaXRlbSBmb3Ig
cGFzc2VkIGtleSwgb3IgbnVsbAorICAgKgorICAgKiBAcGFyYSB7U3RyaW5nfSBrZXkKKyAgICog
ICAgICAgbmFtZSBvZiBpdGVtIHRvIGJlIHJldHVybmVkCisgICAqIEByZXR1cm5zIHtTdHJpbmd8
bnVsbH0KKyAgICovCisgIGxvY2FsU3RvcmFnZU1lbW9yeS5nZXRJdGVtID0gZnVuY3Rpb24oa2V5
KSB7CisgICAgcmV0dXJuIGNhY2hlW2tleV0gfHwgbnVsbDsKKyAgfTsKKworICAvKioKKyAgICog
c2V0cyBpdGVtIGZvciBrZXkgdG8gcGFzc2VkIHZhbHVlLCBhcyBTdHJpbmcKKyAgICoKKyAgICog
QHBhcmEge1N0cmluZ30ga2V5CisgICAqICAgICAgIG5hbWUgb2YgaXRlbSB0byBiZSBzZXQKKyAg
ICogQHBhcmEge1N0cmluZ30gdmFsdWUKKyAgICogICAgICAgdmFsdWUsIHdpbGwgYWx3YXlzIGJl
IHR1cm5lZCBpbnRvIGEgU3RyaW5nCisgICAqIEByZXR1cm5zIHt1bmRlZmluZWR9CisgICAqLwor
ICBsb2NhbFN0b3JhZ2VNZW1vcnkuc2V0SXRlbSA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAg
ICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykgeworICAgICAgbG9jYWxTdG9yYWdl
TWVtb3J5LnJlbW92ZUl0ZW0oa2V5KTsKKyAgICB9IGVsc2UgeworICAgICAgaWYgKCEoY2FjaGUu
aGFzT3duUHJvcGVydHkoa2V5KSkpIHsKKyAgICAgICAgbG9jYWxTdG9yYWdlTWVtb3J5Lmxlbmd0
aCsrOworICAgICAgfQorCisgICAgICBjYWNoZVtrZXldID0gJycgKyB2YWx1ZTsKKyAgICB9Cisg
IH07CisKKyAgLyoqCisgICAqIHJlbW92ZXMgaXRlbSBmb3IgcGFzc2VkIGtleQorICAgKgorICAg
KiBAcGFyYSB7U3RyaW5nfSBrZXkKKyAgICogICAgICAgbmFtZSBvZiBpdGVtIHRvIGJlIHJlbW92
ZWQKKyAgICogQHJldHVybnMge3VuZGVmaW5lZH0KKyAgICovCisgIGxvY2FsU3RvcmFnZU1lbW9y
eS5yZW1vdmVJdGVtID0gZnVuY3Rpb24oa2V5KSB7CisgICAgaWYgKGNhY2hlLmhhc093blByb3Bl
cnR5KGtleSkpIHsKKyAgICAgIGRlbGV0ZSBjYWNoZVtrZXldOworICAgICAgbG9jYWxTdG9yYWdl
TWVtb3J5Lmxlbmd0aC0tOworICAgIH0KKyAgfTsKKworICAvKioKKyAgICogcmV0dXJucyBuYW1l
IG9mIGtleSBhdCBwYXNzZWQgaW5kZXgKKyAgICoKKyAgICogQHBhcmEge051bWJlcn0gaW5kZXgK
KyAgICogICAgICAgUG9zaXRpb24gZm9yIGtleSB0byBiZSByZXR1cm5lZCAoc3RhcnRzIGF0IDAp
CisgICAqIEByZXR1cm5zIHtTdHJpbmd8bnVsbH0KKyAgICovCisgIGxvY2FsU3RvcmFnZU1lbW9y
eS5rZXkgPSBmdW5jdGlvbihpbmRleCkgeworICAgIHJldHVybiBPYmplY3Qua2V5cyhjYWNoZSlb
aW5kZXhdIHx8IG51bGw7CisgIH07CisKKyAgLyoqCisgICAqIHJlbW92ZXMgYWxsIHN0b3JlZCBp
dGVtcyBhbmQgc2V0cyBsZW5ndGggdG8gMAorICAgKgorICAgKiBAcmV0dXJucyB7dW5kZWZpbmVk
fQorICAgKi8KKyAgbG9jYWxTdG9yYWdlTWVtb3J5LmNsZWFyID0gZnVuY3Rpb24oKSB7CisgICAg
Y2FjaGUgPSB7fTsKKyAgICBsb2NhbFN0b3JhZ2VNZW1vcnkubGVuZ3RoID0gMDsKKyAgfTsKKwor
ICBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7CisgICAgbW9kdWxlLmV4cG9ydHMg
PSBsb2NhbFN0b3JhZ2VNZW1vcnk7CisgIH0gZWxzZSB7CisgICAgcm9vdC5sb2NhbFN0b3JhZ2VN
ZW1vcnkgPSBsb2NhbFN0b3JhZ2VNZW1vcnk7CisgIH0KK30pKHRoaXMpOwpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3Bl
ZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFi
ZWwtd2VicGFjay9zcmMvbW9kZWwuanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVk
b21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVs
LXdlYnBhY2svc3JjL21vZGVsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA2ZmE1OGE2YmVkNzMyM2Y2MmNmMzU3
MjUxYjk3NTQzODI3MDVmN2MKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVu
Y2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMv
ZXMyMDE1LWJhYmVsLXdlYnBhY2svc3JjL21vZGVsLmpzCkBAIC0wLDAgKzEsMTE2IEBACitleHBv
cnQgZGVmYXVsdCBNb2RlbAorCisvKioKKyogQ3JlYXRlcyBhIG5ldyBNb2RlbCBpbnN0YW5jZSBh
bmQgaG9va3MgdXAgdGhlIHN0b3JhZ2UuCisqCisqIEBjb25zdHJ1Y3RvcgorKiBAcGFyYW0ge29i
amVjdH0gc3RvcmFnZSBBIHJlZmVyZW5jZSB0byB0aGUgY2xpZW50IHNpZGUgc3RvcmFnZSBjbGFz
cworKi8KK2Z1bmN0aW9uIE1vZGVsKHN0b3JhZ2UpIHsKKyAgdGhpcy5zdG9yYWdlID0gc3RvcmFn
ZQorfQorCisvKioKKyogQ3JlYXRlcyBhIG5ldyB0b2RvIG1vZGVsCisqCisqIEBwYXJhbSB7c3Ry
aW5nfSBbdGl0bGVdIFRoZSB0aXRsZSBvZiB0aGUgdGFzaworKiBAcGFyYW0ge2Z1bmN0aW9ufSBb
Y2FsbGJhY2tdIFRoZSBjYWxsYmFjayB0byBmaXJlIGFmdGVyIHRoZSBtb2RlbCBpcyBjcmVhdGVk
CisqLworTW9kZWwucHJvdG90eXBlLmNyZWF0ZSA9IGZ1bmN0aW9uKHRpdGxlLCBjYWxsYmFjaykg
eworICB0aXRsZSA9IHRpdGxlIHx8ICcnCisgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rp
b24oKSB7CisgIH0KKworICB2YXIgbmV3SXRlbSA9IHsKKyAgICB0aXRsZTogdGl0bGUudHJpbSgp
LAorICAgIGNvbXBsZXRlZDogZmFsc2UKKyAgfQorCisgIHRoaXMuc3RvcmFnZS5zYXZlKG5ld0l0
ZW0sIGNhbGxiYWNrKQorfQorCisvKioKKyAqIEZpbmRzIGFuZCByZXR1cm5zIGEgbW9kZWwgaW4g
c3RvcmFnZS4gSWYgbm8gcXVlcnkgaXMgZ2l2ZW4gaXQnbGwgc2ltcGx5CisgKiByZXR1cm4gZXZl
cnl0aGluZy4gSWYgeW91IHBhc3MgaW4gYSBzdHJpbmcgb3IgbnVtYmVyIGl0J2xsIGxvb2sgdGhh
dCB1cCBhcworICogdGhlIElEIG9mIHRoZSBtb2RlbCB0byBmaW5kLiBMYXN0bHksIHlvdSBjYW4g
cGFzcyBpdCBhbiBvYmplY3QgdG8gbWF0Y2ggYWdhaW5zdC4KKyAqCisgKiBAcGFyYW0ge3N0cmlu
Z3xudW1iZXJ8b2JqZWN0fSBbcXVlcnldIEEgcXVlcnkgdG8gbWF0Y2ggbW9kZWxzIGFnYWluc3QK
KyAqIEBwYXJhbSB7ZnVuY3Rpb259IFtjYWxsYmFja10gVGhlIGNhbGxiYWNrIHRvIGZpcmUgYWZ0
ZXIgdGhlIG1vZGVsIGlzIGZvdW5kCisgKgorICogQGV4YW1wbGUKKyAqIG1vZGVsLnJlYWQoMSwg
ZnVuYyk7IC8vIFdpbGwgZmluZCB0aGUgbW9kZWwgd2l0aCBhbiBJRCBvZiAxCisgKiBtb2RlbC5y
ZWFkKCcxJyk7IC8vIFNhbWUgYXMgYWJvdmUKKyAqIC8vQmVsb3cgd2lsbCBmaW5kIGEgbW9kZWwg
d2l0aCBmb28gZXF1YWxsaW5nIGJhciBhbmQgaGVsbG8gZXF1YWxsaW5nIHdvcmxkLgorICogbW9k
ZWwucmVhZCh7IGZvbzogJ2JhcicsIGhlbGxvOiAnd29ybGQnIH0pOworICovCitNb2RlbC5wcm90
b3R5cGUucmVhZCA9IGZ1bmN0aW9uKHF1ZXJ5LCBjYWxsYmFjaykgeworICB2YXIgcXVlcnlUeXBl
ID0gdHlwZW9mIHF1ZXJ5CisgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7Cisg
IH0KKworICBpZiAocXVlcnlUeXBlID09PSAnZnVuY3Rpb24nKSB7CisgICAgY2FsbGJhY2sgPSBx
dWVyeQorICAgIHJldHVybiB0aGlzLnN0b3JhZ2UuZmluZEFsbChjYWxsYmFjaykKKyAgfSBlbHNl
IGlmIChxdWVyeVR5cGUgPT09ICdzdHJpbmcnIHx8IHF1ZXJ5VHlwZSA9PT0gJ251bWJlcicpIHsK
KyAgICBxdWVyeSA9IHBhcnNlSW50KHF1ZXJ5LCAxMCkKKyAgICB0aGlzLnN0b3JhZ2UuZmluZCh7
aWQ6IHF1ZXJ5fSwgY2FsbGJhY2spCisgIH0gZWxzZSB7CisgICAgdGhpcy5zdG9yYWdlLmZpbmQo
cXVlcnksIGNhbGxiYWNrKQorICB9CisgIHJldHVybiB1bmRlZmluZWQKK30KKworLyoqCisqIFVw
ZGF0ZXMgYSBtb2RlbCBieSBnaXZpbmcgaXQgYW4gSUQsIGRhdGEgdG8gdXBkYXRlLCBhbmQgYSBj
YWxsYmFjayB0byBmaXJlIHdoZW4KKyogdGhlIHVwZGF0ZSBpcyBjb21wbGV0ZS4KKyoKKyogQHBh
cmFtIHtudW1iZXJ9IGlkIFRoZSBpZCBvZiB0aGUgbW9kZWwgdG8gdXBkYXRlCisqIEBwYXJhbSB7
b2JqZWN0fSBkYXRhIFRoZSBwcm9wZXJ0aWVzIHRvIHVwZGF0ZSBhbmQgdGhlaXIgbmV3IHZhbHVl
CisqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBmaXJlIHdoZW4g
dGhlIHVwZGF0ZSBpcyBjb21wbGV0ZS4KKyovCitNb2RlbC5wcm90b3R5cGUudXBkYXRlID0gZnVu
Y3Rpb24oaWQsIGRhdGEsIGNhbGxiYWNrKSB7CisgIHRoaXMuc3RvcmFnZS5zYXZlKGRhdGEsIGNh
bGxiYWNrLCBpZCkKK30KKworLyoqCisqIFJlbW92ZXMgYSBtb2RlbCBmcm9tIHN0b3JhZ2UKKyoK
KyogQHBhcmFtIHtudW1iZXJ9IGlkIFRoZSBJRCBvZiB0aGUgbW9kZWwgdG8gcmVtb3ZlCisqIEBw
YXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBmaXJlIHdoZW4gdGhlIHJl
bW92YWwgaXMgY29tcGxldGUuCisqLworTW9kZWwucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9u
KGlkLCBjYWxsYmFjaykgeworICB0aGlzLnN0b3JhZ2UucmVtb3ZlKGlkLCBjYWxsYmFjaykKK30K
KworLyoqCisqIFdBUk5JTkc6IFdpbGwgcmVtb3ZlIEFMTCBkYXRhIGZyb20gc3RvcmFnZS4KKyoK
KyogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGZpcmUgd2hlbiB0
aGUgc3RvcmFnZSBpcyB3aXBlZC4KKyovCitNb2RlbC5wcm90b3R5cGUucmVtb3ZlQWxsID0gZnVu
Y3Rpb24oY2FsbGJhY2spIHsKKyAgdGhpcy5zdG9yYWdlLmRyb3AoY2FsbGJhY2spCit9CisKKy8q
KgorKiBSZXR1cm5zIGEgY291bnQgb2YgYWxsIHRvZG9zCisqLworTW9kZWwucHJvdG90eXBlLmdl
dENvdW50ID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKKyAgdmFyIHRvZG9zID0geworICAgIGFjdGl2
ZTogMCwKKyAgICBjb21wbGV0ZWQ6IDAsCisgICAgdG90YWw6IDAKKyAgfQorCisgIHRoaXMuc3Rv
cmFnZS5maW5kQWxsKGZ1bmN0aW9uKGRhdGEpIHsKKyAgICBkYXRhLmZvckVhY2goZnVuY3Rpb24o
dG9kbykgeworICAgICAgaWYgKHRvZG8uY29tcGxldGVkKSB7CisgICAgICAgIHRvZG9zLmNvbXBs
ZXRlZCsrCisgICAgICB9IGVsc2UgeworICAgICAgICB0b2Rvcy5hY3RpdmUrKworICAgICAgfQor
CisgICAgICB0b2Rvcy50b3RhbCsrCisgICAgfSkKKyAgICBjYWxsYmFjayh0b2RvcykKKyAgfSkK
K30KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEv
cmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9z
cmMvc3RvcmUuanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jl
c291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svc3Jj
L3N0b3JlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUzYjY0MzYzNjA3YTVkOTg0MjNhYzMxOGYwZjM0YjQ4M2M0
OTNmMmQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVk
b21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVs
LXdlYnBhY2svc3JjL3N0b3JlLmpzCkBAIC0wLDAgKzEsMTUzIEBACitpbXBvcnQge3JlbW92ZX0g
ZnJvbSAnLi9oZWxwZXJzJworaW1wb3J0ICogYXMgbG9jYWxTdG9yYWdlTWVtb3J5IGZyb20gJy4v
bWVtb3J5JworZXhwb3J0IGRlZmF1bHQgU3RvcmUKKwordmFyIHVuaXF1ZUlEID0gMTsKKworLyoq
CisgKiBDcmVhdGVzIGEgbmV3IGNsaWVudCBzaWRlIHN0b3JhZ2Ugb2JqZWN0IGFuZCB3aWxsIGNy
ZWF0ZSBhbiBlbXB0eQorICogY29sbGVjdGlvbiBpZiBubyBjb2xsZWN0aW9uIGFscmVhZHkgZXhp
c3RzLgorICoKKyAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIG91ciBEQiB3ZSB3
YW50IHRvIHVzZQorICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgT3VyIGZha2UgREIgdXNl
cyBjYWxsYmFja3MgYmVjYXVzZSBpbgorICogcmVhbCBsaWZlIHlvdSBwcm9iYWJseSB3b3VsZCBi
ZSBtYWtpbmcgQUpBWCBjYWxscworICovCitmdW5jdGlvbiBTdG9yZShuYW1lLCBjYWxsYmFjaykg
eworICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkgeworICB9CisKKyAgdGhpcy5f
ZGJOYW1lID0gbmFtZQorCisgIGlmICghbG9jYWxTdG9yYWdlTWVtb3J5W25hbWVdKSB7CisgICAg
dmFyIGRhdGEgPSB7CisgICAgICB0b2RvczogW10KKyAgICB9CisKKyAgICBsb2NhbFN0b3JhZ2VN
ZW1vcnlbbmFtZV0gPSBKU09OLnN0cmluZ2lmeShkYXRhKQorICB9CisKKyAgY2FsbGJhY2suY2Fs
bCh0aGlzLCBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZU1lbW9yeVtuYW1lXSkpCisgIHRoaXMuc3Vi
c2NyaWJlcnMgPSBbXQorfQorCitTdG9yZS5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24o
c3Vic2NyaWJlcikgeworICB0aGlzLnN1YnNjcmliZXJzLnB1c2goc3Vic2NyaWJlcikKKyAgcmV0
dXJuICgpID0+IHJlbW92ZSh0aGlzLnN1YnNjcmliZXJzLCBzdWJzY3JpYmVyKQorfQorCitTdG9y
ZS5wcm90b3R5cGUuX25vdGlmeSA9IGZ1bmN0aW9uKCkgeworICB0aGlzLnN1YnNjcmliZXJzLmZv
ckVhY2gocyA9PiBzKCkpCit9CisKKy8qKgorKiBGaW5kcyBpdGVtcyBiYXNlZCBvbiBhIHF1ZXJ5
IGdpdmVuIGFzIGEgSlMgb2JqZWN0CisqCisqIEBwYXJhbSB7b2JqZWN0fSBxdWVyeSBUaGUgcXVl
cnkgdG8gbWF0Y2ggYWdhaW5zdCAoaS5lLiB7Zm9vOiAnYmFyJ30pCisqIEBwYXJhbSB7ZnVuY3Rp
b259IGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIHRvIGZpcmUgd2hlbiB0aGUgcXVlcnkgaGFzCisq
IGNvbXBsZXRlZCBydW5uaW5nCisqCisqIEBleGFtcGxlCisqIGRiLmZpbmQoe2ZvbzogJ2Jhcics
IGhlbGxvOiAnd29ybGQnfSwgZnVuY3Rpb24gKGRhdGEpIHsKKyogICAvLyBkYXRhIHdpbGwgcmV0
dXJuIGFueSBpdGVtcyB0aGF0IGhhdmUgZm9vOiBiYXIgYW5kCisqICAgLy8gaGVsbG86IHdvcmxk
IGluIHRoZWlyIHByb3BlcnRpZXMKKyogfSk7CisqLworU3RvcmUucHJvdG90eXBlLmZpbmQgPSBm
dW5jdGlvbihxdWVyeSwgY2FsbGJhY2spIHsKKyAgaWYgKCFjYWxsYmFjaykgeworICAgIHJldHVy
bgorICB9CisKKyAgdmFyIHRvZG9zID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2VNZW1vcnlbdGhp
cy5fZGJOYW1lXSkudG9kb3MKKworICBjYWxsYmFjay5jYWxsKHRoaXMsIHRvZG9zLmZpbHRlcihm
dW5jdGlvbih0b2RvKSB7CisgICAgZm9yICh2YXIgcSBpbiBxdWVyeSkgeworICAgICAgaWYgKHF1
ZXJ5W3FdICE9PSB0b2RvW3FdKSB7CisgICAgICAgIHJldHVybiBmYWxzZQorICAgICAgfQorICAg
IH0KKyAgICByZXR1cm4gdHJ1ZQorICB9KSkKK30KKworLyoqCisqIFdpbGwgcmV0cmlldmUgYWxs
IGRhdGEgZnJvbSB0aGUgY29sbGVjdGlvbgorKgorKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFj
ayBUaGUgY2FsbGJhY2sgdG8gZmlyZSB1cG9uIHJldHJpZXZpbmcgZGF0YQorKi8KK1N0b3JlLnBy
b3RvdHlwZS5maW5kQWxsID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKKyAgY2FsbGJhY2sgPSBjYWxs
YmFjayB8fCBmdW5jdGlvbigpIHsKKyAgfQorICBjYWxsYmFjay5jYWxsKHRoaXMsIEpTT04ucGFy
c2UobG9jYWxTdG9yYWdlTWVtb3J5W3RoaXMuX2RiTmFtZV0pLnRvZG9zKQorfQorCisvKioKKyog
V2lsbCBzYXZlIHRoZSBnaXZlbiBkYXRhIHRvIHRoZSBEQi4gSWYgbm8gaXRlbSBleGlzdHMgaXQg
d2lsbCBjcmVhdGUgYSBuZXcKKyogaXRlbSwgb3RoZXJ3aXNlIGl0J2xsIHNpbXBseSB1cGRhdGUg
YW4gZXhpc3RpbmcgaXRlbSdzIHByb3BlcnRpZXMKKyoKKyogQHBhcmFtIHtvYmplY3R9IHVwZGF0
ZURhdGEgVGhlIGRhdGEgdG8gc2F2ZSBiYWNrIGludG8gdGhlIERCCisqIEBwYXJhbSB7ZnVuY3Rp
b259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBmaXJlIGFmdGVyIHNhdmluZworKiBAcGFyYW0g
e251bWJlcn0gaWQgQW4gb3B0aW9uYWwgcGFyYW0gdG8gZW50ZXIgYW4gSUQgb2YgYW4gaXRlbSB0
byB1cGRhdGUKKyovCitTdG9yZS5wcm90b3R5cGUuc2F2ZSA9IGZ1bmN0aW9uKHVwZGF0ZURhdGEs
IGNhbGxiYWNrLCBpZCkgeworICB2YXIgZGF0YSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlTWVt
b3J5W3RoaXMuX2RiTmFtZV0pCisgIHZhciB0b2RvcyA9IGRhdGEudG9kb3MKKworICBjYWxsYmFj
ayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkgeworICB9CisKKyAgLy8gSWYgYW4gSUQgd2FzIGFj
dHVhbGx5IGdpdmVuLCBmaW5kIHRoZSBpdGVtIGFuZCB1cGRhdGUgZWFjaCBwcm9wZXJ0eQorICBp
ZiAoaWQpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvZG9zLmxlbmd0aDsgaSsrKSB7Cisg
ICAgICBpZiAodG9kb3NbaV0uaWQgPT09IGlkKSB7CisgICAgICAgIGZvciAodmFyIGtleSBpbiB1
cGRhdGVEYXRhKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ3VhcmQtZm9yLWluCisgICAgICAg
ICAgdG9kb3NbaV1ba2V5XSA9IHVwZGF0ZURhdGFba2V5XQorICAgICAgICB9CisgICAgICAgIGJy
ZWFrCisgICAgICB9CisgICAgfQorCisgICAgbG9jYWxTdG9yYWdlTWVtb3J5W3RoaXMuX2RiTmFt
ZV0gPSBKU09OLnN0cmluZ2lmeShkYXRhKQorICAgIGNhbGxiYWNrLmNhbGwodGhpcywgSlNPTi5w
YXJzZShsb2NhbFN0b3JhZ2VNZW1vcnlbdGhpcy5fZGJOYW1lXSkudG9kb3MpCisgIH0gZWxzZSB7
CisgICAgLy8gR2VuZXJhdGUgYW4gSUQKKyAgICB1cGRhdGVEYXRhLmlkID0gdW5pcXVlSUQrKzsK
KworICAgIHRvZG9zLnB1c2godXBkYXRlRGF0YSkKKyAgICBsb2NhbFN0b3JhZ2VNZW1vcnlbdGhp
cy5fZGJOYW1lXSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpCisgICAgY2FsbGJhY2suY2FsbCh0aGlz
LCBbdXBkYXRlRGF0YV0pCisgIH0KKyAgdGhpcy5fbm90aWZ5KCkKK30KKworLyoqCisqIFdpbGwg
cmVtb3ZlIGFuIGl0ZW0gZnJvbSB0aGUgU3RvcmUgYmFzZWQgb24gaXRzIElECisqCisqIEBwYXJh
bSB7bnVtYmVyfSBpZCBUaGUgSUQgb2YgdGhlIGl0ZW0geW91IHdhbnQgdG8gcmVtb3ZlCisqIEBw
YXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBmaXJlIGFmdGVyIHNhdmlu
ZworKi8KK1N0b3JlLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbihpZCwgY2FsbGJhY2spIHsK
KyAgdmFyIGRhdGEgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZU1lbW9yeVt0aGlzLl9kYk5hbWVd
KQorICB2YXIgdG9kb3MgPSBkYXRhLnRvZG9zCisKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2Rv
cy5sZW5ndGg7IGkrKykgeworICAgIGlmICh0b2Rvc1tpXS5pZCA9PT0gaWQpIHsKKyAgICAgIHRv
ZG9zLnNwbGljZShpLCAxKQorICAgICAgYnJlYWsKKyAgICB9CisgIH0KKworICBsb2NhbFN0b3Jh
Z2VNZW1vcnlbdGhpcy5fZGJOYW1lXSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpCisgIGNhbGxiYWNr
LmNhbGwodGhpcywgSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2VNZW1vcnlbdGhpcy5fZGJOYW1lXSku
dG9kb3MpCisgIHRoaXMuX25vdGlmeSgpCit9CisKKy8qKgorKiBXaWxsIGRyb3AgYWxsIHN0b3Jh
Z2UgYW5kIHN0YXJ0IGZyZXNoCisqCisqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIFRoZSBj
YWxsYmFjayB0byBmaXJlIGFmdGVyIGRyb3BwaW5nIHRoZSBkYXRhCisqLworU3RvcmUucHJvdG90
eXBlLmRyb3AgPSBmdW5jdGlvbihjYWxsYmFjaykgeworICBsb2NhbFN0b3JhZ2VNZW1vcnlbdGhp
cy5fZGJOYW1lXSA9IEpTT04uc3RyaW5naWZ5KHt0b2RvczogW119KQorICBjYWxsYmFjay5jYWxs
KHRoaXMsIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlTWVtb3J5W3RoaXMuX2RiTmFtZV0pLnRvZG9z
KQorICB0aGlzLl9ub3RpZnkoKQorfQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNo
Lm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2Vz
MjAxNS1iYWJlbC13ZWJwYWNrL3NyYy90ZW1wbGF0ZS5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5j
aC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9l
czIwMTUtYmFiZWwtd2VicGFjay9zcmMvdGVtcGxhdGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjBjNGY2ZmM4
NDcwOGY3Y2MzOGM2Y2NhNGRmYmZiM2RlZTlkNGFlZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNp
dGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvdmFu
aWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9zcmMvdGVtcGxhdGUuanMKQEAgLTAs
MCArMSwxMTAgQEAKK2V4cG9ydCBkZWZhdWx0IFRlbXBsYXRlCisKK3ZhciBodG1sRXNjYXBlcyA9
IHsKKyAgJyYnOiAnJmFtcDsnLAorICAnPCc6ICcmbHQ7JywKKyAgJz4nOiAnJmd0OycsCisgICci
JzogJyZxdW90OycsCisgICdcJyc6ICcmI3gyNzsnLAorICAnYCc6ICcmI3g2MDsnCit9CisKK3Zh
ciBlc2NhcGVIdG1sQ2hhciA9IGZ1bmN0aW9uKGNocikgeworICByZXR1cm4gaHRtbEVzY2FwZXNb
Y2hyXQorfQorCit2YXIgcmVVbmVzY2FwZWRIdG1sID0gL1smPD4iJ2BdL2cKK3ZhciByZUhhc1Vu
ZXNjYXBlZEh0bWwgPSBuZXcgUmVnRXhwKHJlVW5lc2NhcGVkSHRtbC5zb3VyY2UpCisKK3ZhciBl
c2NhcGUgPSBmdW5jdGlvbihzdHJpbmcpIHsKKyAgaWYgKHN0cmluZyAmJiByZUhhc1VuZXNjYXBl
ZEh0bWwudGVzdChzdHJpbmcpKSB7CisgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKHJlVW5lc2Nh
cGVkSHRtbCwgZXNjYXBlSHRtbENoYXIpCisgIH0gZWxzZSB7CisgICAgcmV0dXJuIHN0cmluZwor
ICB9Cit9CisKKy8qKgorKiBTZXRzIHVwIGRlZmF1bHRzIGZvciBhbGwgdGhlIFRlbXBsYXRlIG1l
dGhvZHMgc3VjaCBhcyBhIGRlZmF1bHQgdGVtcGxhdGUKKyoKKyogQGNvbnN0cnVjdG9yCisqLwor
ZnVuY3Rpb24gVGVtcGxhdGUoKSB7CisgIHRoaXMuZGVmYXVsdFRlbXBsYXRlID0gYAorICAgIDxs
aSBkYXRhLWlkPSJ7e2lkfX0iIGNsYXNzPSJ7e2NvbXBsZXRlZH19Ij4KKyAgICAgIDxkaXYgY2xh
c3M9InZpZXciPgorICAgICAgICA8aW5wdXQgY2xhc3M9InRvZ2dsZSIgdHlwZT0iY2hlY2tib3gi
IHt7Y2hlY2tlZH19IC8+CisgICAgICAgIDxsYWJlbD57e3RpdGxlfX08L2xhYmVsPgorICAgICAg
ICA8YnV0dG9uIGNsYXNzPSJkZXN0cm95Ij48L2J1dHRvbj4KKyAgICAgIDwvZGl2PgorICAgIDwv
bGk+CisgIGAKK30KKworLyoqCisgKiBDcmVhdGVzIGFuIDxsaT4gSFRNTCBzdHJpbmcgYW5kIHJl
dHVybnMgaXQgZm9yIHBsYWNlbWVudCBpbiB5b3VyIGFwcC4KKyAqCisgKiBOT1RFOiBJbiByZWFs
IGxpZmUgeW91IHNob3VsZCBiZSB1c2luZyBhIHRlbXBsYXRpbmcgZW5naW5lIHN1Y2ggYXMgTXVz
dGFjaGUKKyAqIG9yIEhhbmRsZWJhcnMsIGhvd2V2ZXIsIHRoaXMgaXMgYSB2YW5pbGxhIEpTIGV4
YW1wbGUuCisgKgorICogQHBhcmFtIHtvYmplY3R9IGRhdGEgVGhlIG9iamVjdCBjb250YWluaW5n
IGtleXMgeW91IHdhbnQgdG8gZmluZCBpbiB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgIHRl
bXBsYXRlIHRvIHJlcGxhY2UuCisgKiBAcmV0dXJucyB7c3RyaW5nfSBIVE1MIFN0cmluZyBvZiBh
biA8bGk+IGVsZW1lbnQKKyAqCisgKiBAZXhhbXBsZQorICogdmlldy5zaG93KHsKKyAqICBpZDog
MSwKKyAqICB0aXRsZTogIkhlbGxvIFdvcmxkIiwKKyAqICBjb21wbGV0ZWQ6IDAsCisgKiB9KTsK
KyAqLworVGVtcGxhdGUucHJvdG90eXBlLnNob3cgPSBmdW5jdGlvbihkYXRhKSB7CisgIHZhciBp
LCBsCisgIHZhciB2aWV3ID0gJycKKworICBmb3IgKGkgPSAwLCBsID0gZGF0YS5sZW5ndGg7IGkg
PCBsOyBpKyspIHsKKyAgICB2YXIgdGVtcGxhdGUgPSB0aGlzLmRlZmF1bHRUZW1wbGF0ZQorICAg
IHZhciBjb21wbGV0ZWQgPSAnJworICAgIHZhciBjaGVja2VkID0gJycKKworICAgIGlmIChkYXRh
W2ldLmNvbXBsZXRlZCkgeworICAgICAgY29tcGxldGVkID0gJ2NvbXBsZXRlZCcKKyAgICAgIGNo
ZWNrZWQgPSAnY2hlY2tlZCcKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnJlcGxh
Y2UoJ3t7aWR9fScsIGRhdGFbaV0uaWQpCisgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZS5yZXBsYWNl
KCd7e3RpdGxlfX0nLCBlc2NhcGUoZGF0YVtpXS50aXRsZSkpCisgICAgdGVtcGxhdGUgPSB0ZW1w
bGF0ZS5yZXBsYWNlKCd7e2NvbXBsZXRlZH19JywgY29tcGxldGVkKQorICAgIHRlbXBsYXRlID0g
dGVtcGxhdGUucmVwbGFjZSgne3tjaGVja2VkfX0nLCBjaGVja2VkKQorCisgICAgdmlldyA9IHZp
ZXcgKyB0ZW1wbGF0ZQorICB9CisKKyAgcmV0dXJuIHZpZXcKK30KKworLyoqCisgKiBEaXNwbGF5
cyBhIGNvdW50ZXIgb2YgaG93IG1hbnkgdG8gZG9zIGFyZSBsZWZ0IHRvIGNvbXBsZXRlCisgKgor
ICogQHBhcmFtIHtudW1iZXJ9IGFjdGl2ZVRvZG9zIFRoZSBudW1iZXIgb2YgYWN0aXZlIHRvZG9z
LgorICogQHJldHVybnMge3N0cmluZ30gU3RyaW5nIGNvbnRhaW5pbmcgdGhlIGNvdW50CisgKi8K
K1RlbXBsYXRlLnByb3RvdHlwZS5pdGVtQ291bnRlciA9IGZ1bmN0aW9uKGFjdGl2ZVRvZG9zKSB7
CisgIHZhciBwbHVyYWwgPSBhY3RpdmVUb2RvcyA9PT0gMSA/ICcnIDogJ3MnCisKKyAgcmV0dXJu
ICc8c3Ryb25nPicgKyBhY3RpdmVUb2RvcyArICc8L3N0cm9uZz4gaXRlbScgKyBwbHVyYWwgKyAn
IGxlZnQnCit9CisKKy8qKgorICogVXBkYXRlcyB0aGUgdGV4dCB3aXRoaW4gdGhlICJDbGVhciBj
b21wbGV0ZWQiIGJ1dHRvbgorICoKKyAqIEBwYXJhbSAge1t0eXBlXX0gY29tcGxldGVkVG9kb3Mg
VGhlIG51bWJlciBvZiBjb21wbGV0ZWQgdG9kb3MuCisgKiBAcmV0dXJucyB7c3RyaW5nfSBTdHJp
bmcgY29udGFpbmluZyB0aGUgY291bnQKKyAqLworVGVtcGxhdGUucHJvdG90eXBlLmNsZWFyQ29t
cGxldGVkQnV0dG9uID0gZnVuY3Rpb24oY29tcGxldGVkVG9kb3MpIHsKKyAgaWYgKGNvbXBsZXRl
ZFRvZG9zID4gMCkgeworICAgIHJldHVybiAnQ2xlYXIgY29tcGxldGVkJworICB9IGVsc2Ugewor
ICAgIHJldHVybiAnJworICB9Cit9CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gu
b3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMy
MDE1LWJhYmVsLXdlYnBhY2svc3JjL3RvZG8uanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3Jn
L1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1
LWJhYmVsLXdlYnBhY2svc3JjL3RvZG8uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTUxY2YzNjFhYTM1ZTIzNGQy
YjI2N2U4NjY3ZWIwYTg3ODY0YmY2NgotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dz
ZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFt
cGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9zcmMvdG9kby5qcwpAQCAtMCwwICsxLDQxIEBACitp
bXBvcnQgVmlldyBmcm9tICcuL3ZpZXcnCitpbXBvcnQgQ29udHJvbGxlciBmcm9tICcuL2NvbnRy
b2xsZXInCitpbXBvcnQgTW9kZWwgZnJvbSAnLi9tb2RlbCcKK2ltcG9ydCBTdG9yZSBmcm9tICcu
L3N0b3JlJworaW1wb3J0IFRlbXBsYXRlIGZyb20gJy4vdGVtcGxhdGUnCitpbXBvcnQge3JlbW92
ZX0gZnJvbSAnLi9oZWxwZXJzJworCitleHBvcnQge3VwZGF0ZVRvZG8sIGdldFRvZG8sIHN1YnNj
cmliZX0KKworbGV0IHRvZG8KK2NvbnN0IHN1YnNjcmliZXJzID0gW10KKworLyoqCisgKiBTZXRz
IHVwIGEgYnJhbmQgbmV3IFRvZG8gbGlzdC4KKyAqCisgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBU
aGUgbmFtZSBvZiB5b3VyIG5ldyB0byBkbyBsaXN0LgorICovCitmdW5jdGlvbiBUb2RvKG5hbWUp
IHsKKyAgdGhpcy5zdG9yYWdlID0gbmV3IFN0b3JlKG5hbWUpCisgIHRoaXMubW9kZWwgPSBuZXcg
TW9kZWwodGhpcy5zdG9yYWdlKQorICB0aGlzLnRlbXBsYXRlID0gbmV3IFRlbXBsYXRlKCkKKyAg
dGhpcy52aWV3ID0gbmV3IFZpZXcodGhpcy50ZW1wbGF0ZSkKKyAgdGhpcy5jb250cm9sbGVyID0g
bmV3IENvbnRyb2xsZXIodGhpcy5tb2RlbCwgdGhpcy52aWV3KQorfQorCitmdW5jdGlvbiB1cGRh
dGVUb2RvKCkgeworICB0b2RvID0gbmV3IFRvZG8oJ3RvZG9zLXZhbmlsbGFqcycpCisgIHRvZG8u
Y29udHJvbGxlci5zZXRWaWV3KGRvY3VtZW50LmxvY2F0aW9uLmhhc2gpCisgIHN1YnNjcmliZXJz
LmZvckVhY2gocyA9PiBzKCkpCit9CisKK2Z1bmN0aW9uIGdldFRvZG8oKSB7CisgIHJldHVybiB0
b2RvCit9CisKK2Z1bmN0aW9uIHN1YnNjcmliZShjYikgeworICBzdWJzY3JpYmVycy5wdXNoKGNi
KQorICByZXR1cm4gZnVuY3Rpb24gdW5zdWJzY3JpYmUoKSB7CisgICAgcmVtb3ZlKHN1YnNjcmli
ZXJzLCBjYikKKyAgfQorfQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9T
cGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1i
YWJlbC13ZWJwYWNrL3NyYy92aWV3LmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVl
ZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJl
bC13ZWJwYWNrL3NyYy92aWV3LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMxNWVkNWM1ZDI1ZTZiMGFhMDZmNzI3
ZjFhNzhhN2QwYmExMGZlMjEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVu
Y2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMv
ZXMyMDE1LWJhYmVsLXdlYnBhY2svc3JjL3ZpZXcuanMKQEAgLTAsMCArMSwyMTQgQEAKKy8qIGVz
bGludCBuby1pbnZhbGlkLXRoaXM6IDAsIGNvbXBsZXhpdHk6WzIsIDldICovCitpbXBvcnQge3Fz
LCBxc2EsICRvbiwgJHBhcmVudCwgJGRlbGVnYXRlfSBmcm9tICcuL2hlbHBlcnMnCisKKy8qKgor
ICogVmlldyB0aGF0IGFic3RyYWN0cyBhd2F5IHRoZSBicm93c2VyJ3MgRE9NIGNvbXBsZXRlbHku
CisgKiBJdCBoYXMgdHdvIHNpbXBsZSBlbnRyeSBwb2ludHM6CisgKgorICogICAtIGJpbmQoZXZl
bnROYW1lLCBoYW5kbGVyKQorICogICAgIFRha2VzIGEgdG9kbyBhcHBsaWNhdGlvbiBldmVudCBh
bmQgcmVnaXN0ZXJzIHRoZSBoYW5kbGVyCisgKiAgIC0gcmVuZGVyKGNvbW1hbmQsIHBhcmFtZXRl
ck9iamVjdCkKKyAqICAgICBSZW5kZXJzIHRoZSBnaXZlbiBjb21tYW5kIHdpdGggdGhlIG9wdGlv
bnMKKyAqLworZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmlldyB7CisgIGNvbnN0cnVjdG9yKHRlbXBs
YXRlKSB7CisgICAgdGhpcy50ZW1wbGF0ZSA9IHRlbXBsYXRlCisKKyAgICB0aGlzLkVOVEVSX0tF
WSA9IDEzCisgICAgdGhpcy5FU0NBUEVfS0VZID0gMjcKKworICAgIHRoaXMuJHRvZG9MaXN0ID0g
cXMoJy50b2RvLWxpc3QnKQorICAgIHRoaXMuJHRvZG9JdGVtQ291bnRlciA9IHFzKCcudG9kby1j
b3VudCcpCisgICAgdGhpcy4kY2xlYXJDb21wbGV0ZWQgPSBxcygnLmNsZWFyLWNvbXBsZXRlZCcp
CisgICAgdGhpcy4kbWFpbiA9IHFzKCcubWFpbicpCisgICAgdGhpcy4kZm9vdGVyID0gcXMoJy5m
b290ZXInKQorICAgIHRoaXMuJHRvZ2dsZUFsbCA9IHFzKCcudG9nZ2xlLWFsbCcpCisgICAgdGhp
cy4kbmV3VG9kbyA9IHFzKCcubmV3LXRvZG8nKQorICB9CisKKyAgX3JlbW92ZUl0ZW0oaWQpIHsK
KyAgICB2YXIgZWxlbSA9IHFzKCdbZGF0YS1pZD0iJyArIGlkICsgJyJdJykKKworICAgIGlmIChl
bGVtKSB7CisgICAgICB0aGlzLiR0b2RvTGlzdC5yZW1vdmVDaGlsZChlbGVtKQorICAgIH0KKyAg
fQorCisgIF9jbGVhckNvbXBsZXRlZEJ1dHRvbihjb21wbGV0ZWRDb3VudCwgdmlzaWJsZSkgewor
ICAgIHRoaXMuJGNsZWFyQ29tcGxldGVkLmlubmVySFRNTCA9IHRoaXMudGVtcGxhdGUuY2xlYXJD
b21wbGV0ZWRCdXR0b24oY29tcGxldGVkQ291bnQpCisgICAgdGhpcy4kY2xlYXJDb21wbGV0ZWQu
c3R5bGUuZGlzcGxheSA9IHZpc2libGUgPyAnYmxvY2snIDogJ25vbmUnCisgIH0KKworICBfZWRp
dEl0ZW1Eb25lKGlkLCB0aXRsZSkgeworICAgIHZhciBsaXN0SXRlbSA9IHFzKCdbZGF0YS1pZD0i
JyArIGlkICsgJyJdJykKKworICAgIGlmICghbGlzdEl0ZW0pIHsKKyAgICAgIHJldHVybgorICAg
IH0KKworICAgIHZhciBpbnB1dCA9IHFzKCdpbnB1dC5lZGl0JywgbGlzdEl0ZW0pCisgICAgbGlz
dEl0ZW0ucmVtb3ZlQ2hpbGQoaW5wdXQpCisKKyAgICBsaXN0SXRlbS5jbGFzc05hbWUgPSBsaXN0
SXRlbS5jbGFzc05hbWUucmVwbGFjZSgnZWRpdGluZycsICcnKQorCisgICAgcXNhKCdsYWJlbCcs
IGxpc3RJdGVtKS5mb3JFYWNoKGZ1bmN0aW9uKGxhYmVsKSB7CisgICAgICBsYWJlbC50ZXh0Q29u
dGVudCA9IHRpdGxlCisgICAgfSkKKyAgfQorCisgIHJlbmRlcih2aWV3Q21kLCBwYXJhbWV0ZXIp
IHsKKyAgICB2YXIgdGhhdCA9IHRoaXMKKyAgICB2YXIgdmlld0NvbW1hbmRzID0geworICAgICAg
c2hvd0VudHJpZXM6IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGF0LiR0b2RvTGlzdC5pbm5lckhU
TUwgPSB0aGF0LnRlbXBsYXRlLnNob3cocGFyYW1ldGVyKQorICAgICAgfSwKKyAgICAgIHJlbW92
ZUl0ZW06IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGF0Ll9yZW1vdmVJdGVtKHBhcmFtZXRlcikK
KyAgICAgIH0sCisgICAgICB1cGRhdGVFbGVtZW50Q291bnQ6IGZ1bmN0aW9uKCkgeworICAgICAg
ICB0aGF0LiR0b2RvSXRlbUNvdW50ZXIuaW5uZXJIVE1MID0gdGhhdC50ZW1wbGF0ZS5pdGVtQ291
bnRlcihwYXJhbWV0ZXIpCisgICAgICB9LAorICAgICAgY2xlYXJDb21wbGV0ZWRCdXR0b246IGZ1
bmN0aW9uKCkgeworICAgICAgICB0aGF0Ll9jbGVhckNvbXBsZXRlZEJ1dHRvbihwYXJhbWV0ZXIu
Y29tcGxldGVkLCBwYXJhbWV0ZXIudmlzaWJsZSkKKyAgICAgIH0sCisgICAgICBjb250ZW50Qmxv
Y2tWaXNpYmlsaXR5OiBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhhdC4kbWFpbi5zdHlsZS5kaXNw
bGF5ID0gdGhhdC4kZm9vdGVyLnN0eWxlLmRpc3BsYXkgPSBwYXJhbWV0ZXIudmlzaWJsZSA/ICdi
bG9jaycgOiAnbm9uZScKKyAgICAgIH0sCisgICAgICB0b2dnbGVBbGw6IGZ1bmN0aW9uKCkgewor
ICAgICAgICB0aGF0LiR0b2dnbGVBbGwuY2hlY2tlZCA9IHBhcmFtZXRlci5jaGVja2VkCisgICAg
ICB9LAorICAgICAgc2V0RmlsdGVyOiBmdW5jdGlvbigpIHsKKyAgICAgICAgX3NldEZpbHRlcihw
YXJhbWV0ZXIpCisgICAgICB9LAorICAgICAgY2xlYXJOZXdUb2RvOiBmdW5jdGlvbigpIHsKKyAg
ICAgICAgdGhhdC4kbmV3VG9kby52YWx1ZSA9ICcnCisgICAgICB9LAorICAgICAgZWxlbWVudENv
bXBsZXRlOiBmdW5jdGlvbigpIHsKKyAgICAgICAgX2VsZW1lbnRDb21wbGV0ZShwYXJhbWV0ZXIu
aWQsIHBhcmFtZXRlci5jb21wbGV0ZWQpCisgICAgICB9LAorICAgICAgZWRpdEl0ZW06IGZ1bmN0
aW9uKCkgeworICAgICAgICBfZWRpdEl0ZW0ocGFyYW1ldGVyLmlkLCBwYXJhbWV0ZXIudGl0bGUp
CisgICAgICB9LAorICAgICAgZWRpdEl0ZW1Eb25lOiBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhh
dC5fZWRpdEl0ZW1Eb25lKHBhcmFtZXRlci5pZCwgcGFyYW1ldGVyLnRpdGxlKQorICAgICAgfQor
ICAgIH0KKworICAgIHZpZXdDb21tYW5kc1t2aWV3Q21kXSgpCisgIH0KKworICBfYmluZEl0ZW1F
ZGl0RG9uZShoYW5kbGVyKSB7CisgICAgdmFyIHRoYXQgPSB0aGlzCisgICAgJGRlbGVnYXRlKHRo
YXQuJHRvZG9MaXN0LCAnbGkgLmVkaXQnLCAnYmx1cicsIGZ1bmN0aW9uKCkgeworICAgICAgaWYg
KCF0aGlzLmRhdGFzZXQuaXNjYW5jZWxlZCkgeworICAgICAgICBoYW5kbGVyKHsKKyAgICAgICAg
ICBpZDogX2l0ZW1JZCh0aGlzKSwKKyAgICAgICAgICB0aXRsZTogdGhpcy52YWx1ZQorICAgICAg
ICB9KQorICAgICAgfQorICAgIH0pCisKKyAgICAkZGVsZWdhdGUodGhhdC4kdG9kb0xpc3QsICds
aSAuZWRpdCcsICdrZXlwcmVzcycsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICBpZiAoZXZlbnQu
a2V5Q29kZSA9PT0gdGhhdC5FTlRFUl9LRVkpIHsKKyAgICAgICAgLy8gUmVtb3ZlIHRoZSBjdXJz
b3IgZnJvbSB0aGUgaW5wdXQgd2hlbiB5b3UgaGl0IGVudGVyIGp1c3QgbGlrZSBpZiBpdAorICAg
ICAgICAvLyB3ZXJlIGEgcmVhbCBmb3JtCisgICAgICAgIHRoaXMuYmx1cigpCisgICAgICB9Cisg
ICAgfSkKKyAgfQorCisgIF9iaW5kSXRlbUVkaXRDYW5jZWwoaGFuZGxlcikgeworICAgIHZhciB0
aGF0ID0gdGhpcworICAgICRkZWxlZ2F0ZSh0aGF0LiR0b2RvTGlzdCwgJ2xpIC5lZGl0JywgJ2tl
eXVwJywgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSB0aGF0
LkVTQ0FQRV9LRVkpIHsKKyAgICAgICAgdGhpcy5kYXRhc2V0LmlzY2FuY2VsZWQgPSB0cnVlCisg
ICAgICAgIHRoaXMuYmx1cigpCisKKyAgICAgICAgaGFuZGxlcih7aWQ6IF9pdGVtSWQodGhpcyl9
KQorICAgICAgfQorICAgIH0pCisgIH0KKworICBiaW5kKGV2ZW50LCBoYW5kbGVyKSB7CisgICAg
dmFyIHRoYXQgPSB0aGlzCisgICAgaWYgKGV2ZW50ID09PSAnbmV3VG9kbycpIHsKKyAgICAgICRv
bih0aGF0LiRuZXdUb2RvLCAnY2hhbmdlJywgZnVuY3Rpb24oKSB7CisgICAgICAgIGhhbmRsZXIo
dGhhdC4kbmV3VG9kby52YWx1ZSkKKyAgICAgIH0pCisKKyAgICB9IGVsc2UgaWYgKGV2ZW50ID09
PSAncmVtb3ZlQ29tcGxldGVkJykgeworICAgICAgJG9uKHRoYXQuJGNsZWFyQ29tcGxldGVkLCAn
Y2xpY2snLCBmdW5jdGlvbigpIHsKKyAgICAgICAgaGFuZGxlcigpCisgICAgICB9KQorCisgICAg
fSBlbHNlIGlmIChldmVudCA9PT0gJ3RvZ2dsZUFsbCcpIHsKKyAgICAgICRvbih0aGF0LiR0b2dn
bGVBbGwsICdjbGljaycsIGZ1bmN0aW9uKCkgeworICAgICAgICBoYW5kbGVyKHtjb21wbGV0ZWQ6
IHRoaXMuY2hlY2tlZH0pCisgICAgICB9KQorCisgICAgfSBlbHNlIGlmIChldmVudCA9PT0gJ2l0
ZW1FZGl0JykgeworICAgICAgJGRlbGVnYXRlKHRoYXQuJHRvZG9MaXN0LCAnbGkgbGFiZWwnLCAn
ZGJsY2xpY2snLCBmdW5jdGlvbigpIHsKKyAgICAgICAgaGFuZGxlcih7aWQ6IF9pdGVtSWQodGhp
cyl9KQorICAgICAgfSkKKworICAgIH0gZWxzZSBpZiAoZXZlbnQgPT09ICdpdGVtUmVtb3ZlJykg
eworICAgICAgJGRlbGVnYXRlKHRoYXQuJHRvZG9MaXN0LCAnLmRlc3Ryb3knLCAnY2xpY2snLCBm
dW5jdGlvbigpIHsKKyAgICAgICAgaGFuZGxlcih7aWQ6IF9pdGVtSWQodGhpcyl9KQorICAgICAg
fSkKKworICAgIH0gZWxzZSBpZiAoZXZlbnQgPT09ICdpdGVtVG9nZ2xlJykgeworICAgICAgJGRl
bGVnYXRlKHRoYXQuJHRvZG9MaXN0LCAnLnRvZ2dsZScsICdjbGljaycsIGZ1bmN0aW9uKCkgewor
ICAgICAgICBoYW5kbGVyKHsKKyAgICAgICAgICBpZDogX2l0ZW1JZCh0aGlzKSwKKyAgICAgICAg
ICBjb21wbGV0ZWQ6IHRoaXMuY2hlY2tlZAorICAgICAgICB9KQorICAgICAgfSkKKworICAgIH0g
ZWxzZSBpZiAoZXZlbnQgPT09ICdpdGVtRWRpdERvbmUnKSB7CisgICAgICB0aGF0Ll9iaW5kSXRl
bUVkaXREb25lKGhhbmRsZXIpCisKKyAgICB9IGVsc2UgaWYgKGV2ZW50ID09PSAnaXRlbUVkaXRD
YW5jZWwnKSB7CisgICAgICB0aGF0Ll9iaW5kSXRlbUVkaXRDYW5jZWwoaGFuZGxlcikKKyAgICB9
CisgIH0KK30KKworZnVuY3Rpb24gX3NldEZpbHRlcihjdXJyZW50UGFnZSkgeworICBxcygnLmZp
bHRlcnMgLnNlbGVjdGVkJykuY2xhc3NOYW1lID0gJycKKyAgcXMoJy5maWx0ZXJzIFtocmVmPSIj
LycgKyBjdXJyZW50UGFnZSArICciXScpLmNsYXNzTmFtZSA9ICdzZWxlY3RlZCcKK30KKworZnVu
Y3Rpb24gX2VsZW1lbnRDb21wbGV0ZShpZCwgY29tcGxldGVkKSB7CisgIHZhciBsaXN0SXRlbSA9
IHFzKCdbZGF0YS1pZD0iJyArIGlkICsgJyJdJykKKworICBpZiAoIWxpc3RJdGVtKSB7CisgICAg
cmV0dXJuCisgIH0KKworICBsaXN0SXRlbS5jbGFzc05hbWUgPSBjb21wbGV0ZWQgPyAnY29tcGxl
dGVkJyA6ICcnCisKKyAgLy8gSW4gY2FzZSBpdCB3YXMgdG9nZ2xlZCBmcm9tIGFuIGV2ZW50IGFu
ZCBub3QgYnkgY2xpY2tpbmcgdGhlIGNoZWNrYm94CisgIHFzKCdpbnB1dCcsIGxpc3RJdGVtKS5j
aGVja2VkID0gY29tcGxldGVkCit9CisKK2Z1bmN0aW9uIF9lZGl0SXRlbShpZCwgdGl0bGUpIHsK
KyAgdmFyIGxpc3RJdGVtID0gcXMoJ1tkYXRhLWlkPSInICsgaWQgKyAnIl0nKQorCisgIGlmICgh
bGlzdEl0ZW0pIHsKKyAgICByZXR1cm4KKyAgfQorCisgIGxpc3RJdGVtLmNsYXNzTmFtZSA9IGxp
c3RJdGVtLmNsYXNzTmFtZSArICcgZWRpdGluZycKKworICB2YXIgaW5wdXQgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdpbnB1dCcpCisgIGlucHV0LmNsYXNzTmFtZSA9ICdlZGl0JworCisgIGxp
c3RJdGVtLmFwcGVuZENoaWxkKGlucHV0KQorICBpbnB1dC5mb2N1cygpCisgIGlucHV0LnZhbHVl
ID0gdGl0bGUKK30KKworZnVuY3Rpb24gX2l0ZW1JZChlbGVtZW50KSB7CisgIHZhciBsaSA9ICRw
YXJlbnQoZWxlbWVudCwgJ2xpJykKKyAgcmV0dXJuIHBhcnNlSW50KGxpLmRhdGFzZXQuaWQsIDEw
KQorfQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIu
MS9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNr
L3dlYnBhY2suY29uZmlnLmJhYmVsLmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVl
ZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJl
bC13ZWJwYWNrL3dlYnBhY2suY29uZmlnLmJhYmVsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRlYzM3MWJlNGU1
NWI0NDg3ZGM2ZTRmOTdjYjk5OWNmYTBhNjM0MDMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRl
cy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL3Zhbmls
bGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svd2VicGFjay5jb25maWcuYmFiZWwuanMK
QEAgLTAsMCArMSw2MCBAQAorLyogZXNsaW50IG5vLWNvbnNvbGU6Im9mZiIgKi8KK2NvbnN0IHty
ZXNvbHZlfSA9IHJlcXVpcmUoJ3BhdGgnKQorY29uc3Qgd2VicGFjayA9IHJlcXVpcmUoJ3dlYnBh
Y2snKQorY29uc3QgUHJvZ3Jlc3NCYXJQbHVnaW4gPSByZXF1aXJlKCdwcm9ncmVzcy1iYXItd2Vi
cGFjay1wbHVnaW4nKQorY29uc3QgSHRtbFdlYnBhY2tQbHVnaW4gPSByZXF1aXJlKCdodG1sLXdl
YnBhY2stcGx1Z2luJykKK2NvbnN0IElubGluZU1hbmlmZXN0V2VicGFja1BsdWdpbiA9IHJlcXVp
cmUoJ2lubGluZS1tYW5pZmVzdC13ZWJwYWNrLXBsdWdpbicpCitjb25zdCBFeHRyYWN0VGV4dFBs
dWdpbiA9IHJlcXVpcmUoJ2V4dHJhY3QtdGV4dC13ZWJwYWNrLXBsdWdpbicpCitjb25zdCB3ZWJw
YWNrVmFsaWRhdG9yID0gcmVxdWlyZSgnd2VicGFjay12YWxpZGF0b3InKQorY29uc3Qge2dldElm
VXRpbHMsIHJlbW92ZUVtcHR5fSA9IHJlcXVpcmUoJ3dlYnBhY2stY29uZmlnLXV0aWxzJykKKwor
bW9kdWxlLmV4cG9ydHMgPSBlbnYgPT4geworICBjb25zdCB7aWZQcm9kLCBpZk5vdFByb2R9ID0g
Z2V0SWZVdGlscyhlbnYpCisgIGNvbnN0IGNvbmZpZyA9IHdlYnBhY2tWYWxpZGF0b3IoeworICAg
IGNvbnRleHQ6IHJlc29sdmUoJ3NyYycpLAorICAgIGVudHJ5OiB7CisgICAgICBhcHA6ICcuL2Jv
b3RzdHJhcC5qcycsCisgICAgICB2ZW5kb3I6IFsndG9kb212Yy1hcHAtY3NzL2luZGV4LmNzcydd
LAorICAgIH0sCisgICAgb3V0cHV0OiB7CisgICAgICBmaWxlbmFtZTogaWZQcm9kKCdidW5kbGUu
W25hbWVdLltjaHVua2hhc2hdLmpzJywgJ2J1bmRsZS5bbmFtZV0uanMnKSwKKyAgICAgIHBhdGg6
IHJlc29sdmUoJ2Rpc3QnKSwKKyAgICAgIHBhdGhpbmZvOiBpZk5vdFByb2QoKSwKKyAgICB9LAor
ICAgIGRldnRvb2w6IGlmUHJvZCgnc291cmNlLW1hcCcsICdldmFsJyksCisgICAgbW9kdWxlOiB7
CisgICAgICBsb2FkZXJzOiBbCisgICAgICAgIHt0ZXN0OiAvXC5qcyQvLCBsb2FkZXJzOiBbJ2Jh
YmVsJ10sIGV4Y2x1ZGU6IC9ub2RlX21vZHVsZXMvfSwKKyAgICAgICAgeworICAgICAgICAgIHRl
c3Q6IC9cLmNzcyQvLAorICAgICAgICAgIGxvYWRlcjogRXh0cmFjdFRleHRQbHVnaW4uZXh0cmFj
dCh7CisgICAgICAgICAgICBmYWxsYmFja0xvYWRlcjogJ3N0eWxlJywKKyAgICAgICAgICAgIGxv
YWRlcjogJ2NzcycsCisgICAgICAgICAgfSkKKyAgICAgICAgfSwKKyAgICAgIF0sCisgICAgfSwK
KyAgICBwbHVnaW5zOiByZW1vdmVFbXB0eShbCisgICAgICBuZXcgUHJvZ3Jlc3NCYXJQbHVnaW4o
KSwKKyAgICAgIG5ldyBFeHRyYWN0VGV4dFBsdWdpbihpZlByb2QoJ3N0eWxlcy5bbmFtZV0uW2No
dW5raGFzaF0uY3NzJywgJ3N0eWxlcy5bbmFtZV0uY3NzJykpLAorICAgICAgaWZQcm9kKG5ldyBJ
bmxpbmVNYW5pZmVzdFdlYnBhY2tQbHVnaW4oKSksCisgICAgICBpZlByb2QobmV3IHdlYnBhY2su
b3B0aW1pemUuQ29tbW9uc0NodW5rUGx1Z2luKHsKKyAgICAgICAgbmFtZXM6IFsndmVuZG9yJywg
J21hbmlmZXN0J10sCisgICAgICB9KSksCisgICAgICBuZXcgSHRtbFdlYnBhY2tQbHVnaW4oewor
ICAgICAgICB0ZW1wbGF0ZTogJy4vaW5kZXguaHRtbCcsCisgICAgICAgIGluamVjdDogJ2hlYWQn
LAorICAgICAgfSksCisgICAgICBuZXcgd2VicGFjay5EZWZpbmVQbHVnaW4oeworICAgICAgICAn
cHJvY2Vzcy5lbnYnOiB7CisgICAgICAgICAgTk9ERV9FTlY6IGlmUHJvZCgnInByb2R1Y3Rpb24i
JywgJyJkZXZlbG9wbWVudCInKQorICAgICAgICB9CisgICAgICB9KSwKKyAgICBdKSwKKyAgfSkK
KyAgaWYgKGVudi5kZWJ1ZykgeworICAgIGNvbnNvbGUubG9nKGNvbmZpZykKKyAgICBkZWJ1Z2dl
ciAvLyBlc2xpbnQtZGlzYWJsZS1saW5lCisgIH0KKyAgcmV0dXJuIGNvbmZpZworfQpkaWZmIC0t
Z2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMv
dG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9SRUFETUUubWQgYi9XZWJzaXRlcy9icm93
c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhh
bXBsZXMvZXMyMDE1L1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMTM0YjQ2MjRmZThjYjNkODI0OTI3
NzgwMmM2ZDU3ZGEwMGY5MmEzCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJl
bmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVz
L2VzMjAxNS9SRUFETUUubWQKQEAgLTAsMCArMSwxMCBAQAorIyBTcGVlZG9tZXRlciAyLjE6IEVT
MjAxNSBUb2RvTVZDIGV4YW1wbGUKKworIyMgVGVzdCBsb2NhbGx5CisKKzEuIFJ1biBhIGxvY2Fs
IHNlcnZlciBmcm9tIHRoaXMgZGlyZWN0b3J5LiAoWW91IGNvdWxkIHVzZSBbYG5wbSBpIC1nIGh0
dHAtc2VydmVyYF0oaHR0cHM6Ly9naXRodWIuY29tL2luZGV4emVyby9odHRwLXNlcnZlcikuKQor
Mi4gT3BlbiB0aGUgVVJMIHBvaW50aW5nIHRvIHRoZSBsb2NhbCBzZXJ2ZXIgaW4geW91ciB3ZWIg
YnJvd3NlciBvZiBjaG9pY2UuCisKKyMjIEJ1aWxkCisKK1RoZXJlIGlzIG5vIGJ1aWxkIHN0ZXAg
Zm9yIHRoaXMgZXhhbXBsZS4KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcv
U3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUv
aW5kZXguaHRtbCBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVz
b3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvaW5kZXguaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi41OGNhM2E5ZjQ0ZTczYTcyMWI0ZmRmMzBlZDRmOTQ2OTU2YWY3OTAzCi0tLSAvZGV2L251
bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJj
ZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9pbmRleC5odG1sCkBAIC0wLDAgKzEs
NDYgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+CisgIDxoZWFkPgorICAgIDxtZXRhIGNoYXJz
ZXQ9InV0Zi04Ij4KKyAgICA8dGl0bGU+RVMyMDE1IFRvZG9NVkMgZXhhbXBsZTwvdGl0bGU+Cisg
ICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJub2RlX21vZHVsZXMvdG9kb212Yy1jb21t
b24vYmFzZS5jc3MiPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ibm9kZV9tb2R1
bGVzL3RvZG9tdmMtYXBwLWNzcy9pbmRleC5jc3MiPgorICA8L2hlYWQ+CisgIDxib2R5PgorICAg
IDxzZWN0aW9uIGNsYXNzPSJ0b2RvYXBwIj4KKyAgICAgICAgPGhlYWRlciBjbGFzcz0iaGVhZGVy
Ij4KKyAgICAgICAgICAgIDxoMT50b2RvczwvaDE+CisgICAgICAgICAgICA8aW5wdXQgY2xhc3M9
Im5ldy10b2RvIiBwbGFjZWhvbGRlcj0iV2hhdCBuZWVkcyB0byBiZSBkb25lPyIgYXV0b2ZvY3Vz
PgorICAgICAgICA8L2hlYWRlcj4KKworICAgICAgICA8c2VjdGlvbiBjbGFzcz0ibWFpbiI+Cisg
ICAgICAgICAgICA8aW5wdXQgY2xhc3M9InRvZ2dsZS1hbGwiIHR5cGU9ImNoZWNrYm94Ij4KKyAg
ICAgICAgICAgIDxsYWJlbCBmb3I9InRvZ2dsZS1hbGwiPk1hcmsgYWxsIGFzIGNvbXBsZXRlPC9s
YWJlbD4KKyAgICAgICAgICAgIDx1bCBjbGFzcz0idG9kby1saXN0Ij48L3VsPgorICAgICAgICA8
L3NlY3Rpb24+CisKKyAgICAgICAgPGZvb3RlciBjbGFzcz0iZm9vdGVyIj4KKyAgICAgICAgICAg
IDxzcGFuIGNsYXNzPSJ0b2RvLWNvdW50Ij48L3NwYW4+CisgICAgICAgICAgICA8dWwgY2xhc3M9
ImZpbHRlcnMiPgorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjLyIgY2xhc3M9InNlbGVj
dGVkIj5BbGw8L2E+PC9saT4KKyAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iIy9hY3RpdmUi
PkFjdGl2ZTwvYT48L2xpPgorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjL2NvbXBsZXRl
ZCI+Q29tcGxldGVkPC9hPjwvbGk+CisgICAgICAgICAgICA8L3VsPgorICAgICAgICAgICAgPGJ1
dHRvbiBjbGFzcz0iY2xlYXItY29tcGxldGVkIj5DbGVhciBjb21wbGV0ZWQ8L2J1dHRvbj4KKyAg
ICAgICAgPC9mb290ZXI+CisgICAgPC9zZWN0aW9uPgorCisgICAgPGZvb3RlciBjbGFzcz0iaW5m
byI+CisgICAgICAgIDxwPkRvdWJsZS1jbGljayB0byBlZGl0IGEgdG9kbzwvcD4KKyAgICAgICAg
PGJyPgorICAgICAgICA8cD5QYXJ0IG9mIDxhIGhyZWY9Imh0dHA6Ly90b2RvbXZjLmNvbSI+VG9k
b01WQzwvYT48L3A+CisgICAgPC9mb290ZXI+CisgICAgPHNjcmlwdCBzcmM9InNyYy9jb250cm9s
bGVyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0ic3JjL2hlbHBlcnMuanMiPjwvc2Ny
aXB0PgorICAgIDxzY3JpcHQgc3JjPSJzcmMvdGVtcGxhdGUuanMiPjwvc2NyaXB0PgorICAgIDxz
Y3JpcHQgc3JjPSJzcmMvc3RvcmUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJzcmMv
bW9kZWwuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJzcmMvdmlldy5qcyI+PC9zY3Jp
cHQ+CisgICAgPHNjcmlwdCBzcmM9InNyYy9hcHAuanMiPjwvc2NyaXB0PgorICA8L2JvZHk+Cis8
L2h0bWw+CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVy
Mi4xL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L3NyYy8uanNoaW50
cmMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90
b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L3NyYy8uanNoaW50cmMKbmV3IGZpbGUgbW9k
ZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZmZkNDhlYjI5MWEzZmM0ZGQ1YzI5YTcyZWVkZjhjNzVlMzk4N2Q5NgotLS0gL2Rldi9udWxsCisr
KyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3Rv
ZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvc3JjLy5qc2hpbnRyYwpAQCAtMCwwICsxLDMg
QEAKK3sKKwkiZXNuZXh0IjogdHJ1ZQorfQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJl
bmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVz
L2VzMjAxNS9zcmMvYXBwLmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRl
cjIuMS9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9zcmMvYXBwLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmU2NWQ5YzU2ZDFiMzhhOTliN2VmMTdiODAyNGNiYTIwNzk4M2U4ODkKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4x
L3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L3NyYy9hcHAuanMKQEAg
LTAsMCArMSwyNyBAQAorJ3VzZSBzdHJpY3QnOworCitsZXQgdG9kbzsKK2NvbnN0IHNldFZpZXcg
PSAoKSA9PiB0b2RvLmNvbnRyb2xsZXIuc2V0Vmlldyhkb2N1bWVudC5sb2NhdGlvbi5oYXNoKTsK
KworY2xhc3MgVG9kbyB7CisgICAgLyoqCisgICAgICogSW5pdCBuZXcgVG9kbyBMaXN0CisgICAg
ICogQHBhcmFtICB7c3RyaW5nfSBUaGUgbmFtZSBvZiB5b3VyIGxpc3QKKyAgICAgKi8KKyAgICBj
b25zdHJ1Y3RvcihuYW1lKSB7CisgICAgICAgIHRoaXMuc3RvcmFnZSA9IG5ldyBTdG9yZShuYW1l
KTsKKyAgICAgICAgdGhpcy5tb2RlbCA9IG5ldyBNb2RlbCh0aGlzLnN0b3JhZ2UpOworCisgICAg
ICAgIHRoaXMudGVtcGxhdGUgPSBuZXcgVGVtcGxhdGUoKTsKKyAgICAgICAgdGhpcy52aWV3ID0g
bmV3IFZpZXcodGhpcy50ZW1wbGF0ZSk7CisKKyAgICAgICAgdGhpcy5jb250cm9sbGVyID0gbmV3
IENvbnRyb2xsZXIodGhpcy5tb2RlbCwgdGhpcy52aWV3KTsKKyAgICB9Cit9CisKKyRvbih3aW5k
b3csICdsb2FkJywgKCkgPT4geworICAgIHRvZG8gPSBuZXcgVG9kbygndG9kb3MtdmFuaWxsYWpz
Jyk7CisgICAgc2V0VmlldygpOworfSk7CisKKyRvbih3aW5kb3csICdoYXNoY2hhbmdlJywgc2V0
Vmlldyk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVy
Mi4xL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L3NyYy9jb250cm9s
bGVyLmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJj
ZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9zcmMvY29udHJvbGxlci5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5kMjY5M2VjMjBlZTEyNWJmODFlZmZlN2E3MmI4Mzc0ZTE2MjhkOWEzCi0tLSAvZGV2
L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNv
dXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9zcmMvY29udHJvbGxlci5qcwpA
QCAtMCwwICsxLDIxNCBAQAorJ3VzZSBzdHJpY3QnOworCitjbGFzcyBDb250cm9sbGVyIHsKKyAg
ICAvKioKKyAgICAgKiBUYWtlIGEgbW9kZWwgJiB2aWV3LCB0aGVuIGFjdCBhcyBjb250cm9sbGVy
IGJldHdlZW4gdGhlbQorICAgICAqIEBwYXJhbSAge29iamVjdH0gbW9kZWwgVGhlIG1vZGVsIGlu
c3RhbmNlCisgICAgICogQHBhcmFtICB7b2JqZWN0fSB2aWV3ICBUaGUgdmlldyBpbnN0YW5jZQor
ICAgICAqLworICAgIGNvbnN0cnVjdG9yKG1vZGVsLCB2aWV3KSB7CisgICAgICAgIHRoaXMubW9k
ZWwgPSBtb2RlbDsKKyAgICAgICAgdGhpcy52aWV3ID0gdmlldzsKKworICAgICAgICB0aGlzLnZp
ZXcuYmluZCgnbmV3VG9kbycsIHRpdGxlID0+IHRoaXMuYWRkSXRlbSh0aXRsZSkpOworICAgICAg
ICB0aGlzLnZpZXcuYmluZCgnaXRlbUVkaXQnLCBpdGVtID0+IHRoaXMuZWRpdEl0ZW0oaXRlbS5p
ZCkpOworICAgICAgICB0aGlzLnZpZXcuYmluZCgnaXRlbUVkaXREb25lJywgaXRlbSA9PiB0aGlz
LmVkaXRJdGVtU2F2ZShpdGVtLmlkLCBpdGVtLnRpdGxlKSk7CisgICAgICAgIHRoaXMudmlldy5i
aW5kKCdpdGVtRWRpdENhbmNlbCcsIGl0ZW0gPT4gdGhpcy5lZGl0SXRlbUNhbmNlbChpdGVtLmlk
KSk7CisgICAgICAgIHRoaXMudmlldy5iaW5kKCdpdGVtUmVtb3ZlJywgaXRlbSA9PiB0aGlzLnJl
bW92ZUl0ZW0oaXRlbS5pZCkpOworICAgICAgICB0aGlzLnZpZXcuYmluZCgnaXRlbVRvZ2dsZScs
IGl0ZW0gPT4gdGhpcy50b2dnbGVDb21wbGV0ZShpdGVtLmlkLCBpdGVtLmNvbXBsZXRlZCkpOwor
ICAgICAgICB0aGlzLnZpZXcuYmluZCgncmVtb3ZlQ29tcGxldGVkJywgKCkgPT4gdGhpcy5yZW1v
dmVDb21wbGV0ZWRJdGVtcygpKTsKKyAgICAgICAgdGhpcy52aWV3LmJpbmQoJ3RvZ2dsZUFsbCcs
IHN0YXR1cyA9PiB0aGlzLnRvZ2dsZUFsbChzdGF0dXMuY29tcGxldGVkKSk7CisgICAgfQorCisg
ICAgLyoqCisgICAgICogTG9hZCAmIEluaXRpYWxpemUgdGhlIHZpZXcKKyAgICAgKiBAcGFyYW0g
e3N0cmluZ30gICcnIHwgJ2FjdGl2ZScgfCAnY29tcGxldGVkJworICAgICAqLworICAgIHNldFZp
ZXcoaGFzaCl7CisgICAgICAgIGxldCByb3V0ZSA9IGhhc2guc3BsaXQoJy8nKVsxXTsKKyAgICAg
ICAgbGV0IHBhZ2UgPSByb3V0ZSB8fCAnJzsKKyAgICAgICAgdGhpcy5fdXBkYXRlRmlsdGVyKHBh
Z2UpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEV2ZW50IGZpcmVzIG9uIGxvYWQuIEdldHMg
YWxsIGl0ZW1zICYgZGlzcGxheXMgdGhlbQorICAgICAqLworICAgIHNob3dBbGwoKXsKKyAgICAg
ICAgdGhpcy5tb2RlbC5yZWFkKGRhdGEgPT4gdGhpcy52aWV3LnJlbmRlcignc2hvd0VudHJpZXMn
LCBkYXRhKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVuZGVycyBhbGwgYWN0aXZlIHRh
c2tzCisgICAgICovCisgICAgc2hvd0FjdGl2ZSgpeworICAgICAgICB0aGlzLm1vZGVsLnJlYWQo
e2NvbXBsZXRlZDogZmFsc2V9LCBkYXRhID0+IHRoaXMudmlldy5yZW5kZXIoJ3Nob3dFbnRyaWVz
JywgZGF0YSkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlbmRlcnMgYWxsIGNvbXBsZXRl
ZCB0YXNrcworICAgICAqLworICAgIHNob3dDb21wbGV0ZWQoKXsKKyAgICAgICAgdGhpcy5tb2Rl
bC5yZWFkKHtjb21wbGV0ZWQ6IHRydWV9LCBkYXRhID0+IHRoaXMudmlldy5yZW5kZXIoJ3Nob3dF
bnRyaWVzJywgZGF0YSkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFuIGV2ZW50IHRvIGZp
cmUgd2hlbmV2ZXIgeW91IHdhbnQgdG8gYWRkIGFuIGl0ZW0uIFNpbXBseSBwYXNzIGluIHRoZSBl
dmVudAorICAgICAqIG9iamVjdCBhbmQgaXQnbGwgaGFuZGxlIHRoZSBET00gaW5zZXJ0aW9uIGFu
ZCBzYXZpbmcgb2YgdGhlIG5ldyBpdGVtLgorICAgICAqLworICAgIGFkZEl0ZW0odGl0bGUpewor
ICAgICAgICBpZiAodGl0bGUudHJpbSgpID09PSAnJykgeworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgdGhpcy5tb2RlbC5jcmVhdGUodGl0bGUsICgpID0+IHsKKyAg
ICAgICAgICAgIHRoaXMudmlldy5yZW5kZXIoJ2NsZWFyTmV3VG9kbycpOworICAgICAgICAgICAg
dGhpcy5fZmlsdGVyKHRydWUpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICAvKgorICAgICAq
IFRyaWdnZXJzIHRoZSBpdGVtIGVkaXRpbmcgbW9kZS4KKyAgICAgKi8KKyAgICBlZGl0SXRlbShp
ZCl7CisgICAgICAgIHRoaXMubW9kZWwucmVhZChpZCwgZGF0YSA9PiB7CisgICAgICAgICAgICBs
ZXQgdGl0bGUgPSBkYXRhWzBdLnRpdGxlOworICAgICAgICAgICAgdGhpcy52aWV3LnJlbmRlcign
ZWRpdEl0ZW0nLCB7aWQsIHRpdGxlfSk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIC8qCisg
ICAgICogRmluaXNoZXMgdGhlIGl0ZW0gZWRpdGluZyBtb2RlIHN1Y2Nlc3NmdWxseS4KKyAgICAg
Ki8KKyAgICBlZGl0SXRlbVNhdmUoaWQsIHRpdGxlKXsKKyAgICAgICAgdGl0bGUgPSB0aXRsZS50
cmltKCk7CisKKyAgICAgICAgaWYgKHRpdGxlLmxlbmd0aCAhPT0gMCkgeworICAgICAgICAgICAg
dGhpcy5tb2RlbC51cGRhdGUoaWQsIHt0aXRsZX0sICgpID0+IHsKKyAgICAgICAgICAgICAgICB0
aGlzLnZpZXcucmVuZGVyKCdlZGl0SXRlbURvbmUnLCB7aWQsIHRpdGxlfSk7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMucmVtb3ZlSXRlbShpZCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKgorICAgICAqIENhbmNlbHMgdGhlIGl0ZW0gZWRp
dGluZyBtb2RlLgorICAgICAqLworICAgIGVkaXRJdGVtQ2FuY2VsKGlkKXsKKyAgICAgICAgdGhp
cy5tb2RlbC5yZWFkKGlkLCBkYXRhID0+IHsKKyAgICAgICAgICAgIGxldCB0aXRsZSA9IGRhdGFb
MF0udGl0bGU7CisgICAgICAgICAgICB0aGlzLnZpZXcucmVuZGVyKCdlZGl0SXRlbURvbmUnLCB7
aWQsIHRpdGxlfSk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIC8qKgorICAgICAqIEZpbmQg
dGhlIERPTSBlbGVtZW50IHdpdGggZ2l2ZW4gSUQsCisgICAgICogVGhlbiByZW1vdmUgaXQgZnJv
bSBET00gJiBTdG9yYWdlCisgICAgICovCisgICAgcmVtb3ZlSXRlbShpZCl7CisgICAgICAgIHRo
aXMubW9kZWwucmVtb3ZlKGlkLCAoKSA9PiB0aGlzLnZpZXcucmVuZGVyKCdyZW1vdmVJdGVtJywg
aWQpKTsKKyAgICAgICAgdGhpcy5fZmlsdGVyKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICog
V2lsbCByZW1vdmUgYWxsIGNvbXBsZXRlZCBpdGVtcyBmcm9tIHRoZSBET00gYW5kIHN0b3JhZ2Uu
CisgICAgICovCisgICAgcmVtb3ZlQ29tcGxldGVkSXRlbXMoKXsKKyAgICAgICAgdGhpcy5tb2Rl
bC5yZWFkKHtjb21wbGV0ZWQ6IHRydWV9LCBkYXRhID0+IHsKKyAgICAgICAgICAgIGZvciAobGV0
IGl0ZW0gb2YgZGF0YSkgeworICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSXRlbShpdGVtLmlk
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgdGhpcy5fZmlsdGVyKCk7
CisgICAgfQorCisgICAgLyoqCisgICAgICogR2l2ZSBpdCBhbiBJRCBvZiBhIG1vZGVsIGFuZCBh
IGNoZWNrYm94IGFuZCBpdCB3aWxsIHVwZGF0ZSB0aGUgaXRlbQorICAgICAqIGluIHN0b3JhZ2Ug
YmFzZWQgb24gdGhlIGNoZWNrYm94J3Mgc3RhdGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0ge251
bWJlcn0gaWQgVGhlIElEIG9mIHRoZSBlbGVtZW50IHRvIGNvbXBsZXRlIG9yIHVuY29tcGxldGUK
KyAgICAgKiBAcGFyYW0ge29iamVjdH0gY2hlY2tib3ggVGhlIGNoZWNrYm94IHRvIGNoZWNrIHRo
ZSBzdGF0ZSBvZiBjb21wbGV0ZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBvciBu
b3QKKyAgICAgKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBzaWxlbnQgUHJldmVudCByZS1m
aWx0ZXJpbmcgdGhlIHRvZG8gaXRlbXMKKyAgICAgKi8KKyAgICB0b2dnbGVDb21wbGV0ZShpZCwg
Y29tcGxldGVkLCBzaWxlbnQpeworICAgICAgICB0aGlzLm1vZGVsLnVwZGF0ZShpZCwge2NvbXBs
ZXRlZH0sICgpID0+IHsKKyAgICAgICAgICAgIHRoaXMudmlldy5yZW5kZXIoJ2VsZW1lbnRDb21w
bGV0ZScsIHtpZCwgY29tcGxldGVkfSk7CisgICAgICAgIH0pOworCisgICAgICAgIGlmICghc2ls
ZW50KSB7CisgICAgICAgICAgICB0aGlzLl9maWx0ZXIoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8qKgorICAgICAqIFdpbGwgdG9nZ2xlIEFMTCBjaGVja2JveGVzJyBvbi9vZmYgc3RhdGUg
YW5kIGNvbXBsZXRlbmVzcyBvZiBtb2RlbHMuCisgICAgICogSnVzdCBwYXNzIGluIHRoZSBldmVu
dCBvYmplY3QuCisgICAgICovCisgICAgdG9nZ2xlQWxsKGNvbXBsZXRlZCl7CisgICAgICAgIHRo
aXMubW9kZWwucmVhZCh7Y29tcGxldGVkOiAhY29tcGxldGVkfSwgZGF0YSA9PiB7CisgICAgICAg
ICAgICBmb3IgKGxldCBpdGVtIG9mIGRhdGEpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnRvZ2ds
ZUNvbXBsZXRlKGl0ZW0uaWQsIGNvbXBsZXRlZCwgdHJ1ZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0pOworCisgICAgICAgIHRoaXMuX2ZpbHRlcigpOworICAgIH0KKworICAgIC8qKgorICAg
ICAqIFVwZGF0ZXMgdGhlIHBpZWNlcyBvZiB0aGUgcGFnZSB3aGljaCBjaGFuZ2UgZGVwZW5kaW5n
IG9uIHRoZSByZW1haW5pbmcKKyAgICAgKiBudW1iZXIgb2YgdG9kb3MuCisgICAgICovCisgICAg
X3VwZGF0ZUNvdW50KCl7CisgICAgICAgIHRoaXMubW9kZWwuZ2V0Q291bnQodG9kb3MgPT4gewor
ICAgICAgICAgICAgY29uc3QgY29tcGxldGVkID0gdG9kb3MuY29tcGxldGVkOworICAgICAgICAg
ICAgY29uc3QgdmlzaWJsZSA9IGNvbXBsZXRlZCA+IDA7CisgICAgICAgICAgICBjb25zdCBjaGVj
a2VkID0gY29tcGxldGVkID09PSB0b2Rvcy50b3RhbDsKKworICAgICAgICAgICAgdGhpcy52aWV3
LnJlbmRlcigndXBkYXRlRWxlbWVudENvdW50JywgdG9kb3MuYWN0aXZlKTsKKyAgICAgICAgICAg
IHRoaXMudmlldy5yZW5kZXIoJ2NsZWFyQ29tcGxldGVkQnV0dG9uJywge2NvbXBsZXRlZCwgdmlz
aWJsZX0pOworCisgICAgICAgICAgICB0aGlzLnZpZXcucmVuZGVyKCd0b2dnbGVBbGwnLCB7Y2hl
Y2tlZH0pOworICAgICAgICAgICAgdGhpcy52aWV3LnJlbmRlcignY29udGVudEJsb2NrVmlzaWJp
bGl0eScsIHt2aXNpYmxlOiB0b2Rvcy50b3RhbCA+IDB9KTsKKyAgICAgICAgfSk7CisgICAgfQor
CisgICAgLyoqCisgICAgICogUmUtZmlsdGVycyB0aGUgdG9kbyBpdGVtcywgYmFzZWQgb24gdGhl
IGFjdGl2ZSByb3V0ZS4KKyAgICAgKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBmb3JjZSAg
Zm9yY2VzIGEgcmUtcGFpbnRpbmcgb2YgdG9kbyBpdGVtcy4KKyAgICAgKi8KKyAgICBfZmlsdGVy
KGZvcmNlKXsKKyAgICAgICAgbGV0IGFjdGl2ZSA9IHRoaXMuX2FjdGl2ZVJvdXRlOworICAgICAg
ICBjb25zdCBhY3RpdmVSb3V0ZSA9IGFjdGl2ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGFj
dGl2ZS5zdWJzdHIoMSk7CisKKyAgICAgICAgLy8gVXBkYXRlIHRoZSBlbGVtZW50cyBvbiB0aGUg
cGFnZSwgd2hpY2ggY2hhbmdlIHdpdGggZWFjaCBjb21wbGV0ZWQgdG9kbworICAgICAgICB0aGlz
Ll91cGRhdGVDb3VudCgpOworCisgICAgICAgIC8vIElmIHRoZSBsYXN0IGFjdGl2ZSByb3V0ZSBp
c24ndCAiQWxsIiwgb3Igd2UncmUgc3dpdGNoaW5nIHJvdXRlcywgd2UKKyAgICAgICAgLy8gcmUt
Y3JlYXRlIHRoZSB0b2RvIGl0ZW0gZWxlbWVudHMsIGNhbGxpbmc6CisgICAgICAgIC8vICAgdGhp
cy5zaG93W0FsbHxBY3RpdmV8Q29tcGxldGVkXSgpCisgICAgICAgIGlmIChmb3JjZSB8fCB0aGlz
Ll9sYXN0QWN0aXZlUm91dGUgIT09ICdBbGwnIHx8IHRoaXMuX2xhc3RBY3RpdmVSb3V0ZSAhPT0g
YWN0aXZlUm91dGUpIHsKKyAgICAgICAgICAgIHRoaXNbJ3Nob3cnICsgYWN0aXZlUm91dGVdKCk7
CisgICAgICAgIH0KKworICAgICAgICB0aGlzLl9sYXN0QWN0aXZlUm91dGUgPSBhY3RpdmVSb3V0
ZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTaW1wbHkgdXBkYXRlcyB0aGUgZmlsdGVyIG5h
didzIHNlbGVjdGVkIHN0YXRlcworICAgICAqLworICAgIF91cGRhdGVGaWx0ZXIoY3VycmVudFBh
Z2UpeworICAgICAgICAvLyBTdG9yZSBhIHJlZmVyZW5jZSB0byB0aGUgYWN0aXZlIHJvdXRlLCBh
bGxvd2luZyB1cyB0byByZS1maWx0ZXIgdG9kbworICAgICAgICAvLyBpdGVtcyBhcyB0aGV5IGFy
ZSBtYXJrZWQgY29tcGxldGUgb3IgaW5jb21wbGV0ZS4KKyAgICAgICAgdGhpcy5fYWN0aXZlUm91
dGUgPSBjdXJyZW50UGFnZTsKKworICAgICAgICBpZiAoY3VycmVudFBhZ2UgPT09ICcnKSB7Cisg
ICAgICAgICAgICB0aGlzLl9hY3RpdmVSb3V0ZSA9ICdBbGwnOworICAgICAgICB9CisKKyAgICAg
ICAgdGhpcy5fZmlsdGVyKCk7CisKKyAgICAgICAgdGhpcy52aWV3LnJlbmRlcignc2V0RmlsdGVy
JywgY3VycmVudFBhZ2UpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJi
ZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxl
cy9lczIwMTUvc3JjL2hlbHBlcnMuanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVk
b21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L3NyYy9o
ZWxwZXJzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE1NGZjNDgzNTE1ZjgxOWM1NDQzMzk4YjQyOWZlNGMyNWRi
NTdlYzgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVk
b21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L3NyYy9o
ZWxwZXJzLmpzCkBAIC0wLDAgKzEsNTMgQEAKKyd1c2Ugc3RyaWN0JzsKKworCisvLyBBbGxvdyBm
b3IgbG9vcGluZyBvbiBub2RlcyBieSBjaGFpbmluZzoKKy8vIHFzYSgnLmZvbycpLmZvckVhY2go
ZnVuY3Rpb24gKCkge30pCitOb2RlTGlzdC5wcm90b3R5cGUuZm9yRWFjaCA9IEFycmF5LnByb3Rv
dHlwZS5mb3JFYWNoOworCisvLyBHZXQgZWxlbWVudChzKSBieSBDU1Mgc2VsZWN0b3I6CitmdW5j
dGlvbiBxcyhzZWxlY3Rvciwgc2NvcGUpIHsKKyAgICByZXR1cm4gKHNjb3BlIHx8IGRvY3VtZW50
KS5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsKK30KKworZnVuY3Rpb24gcXNhKHNlbGVjdG9yLCBz
Y29wZSkgeworICAgIHJldHVybiAoc2NvcGUgfHwgZG9jdW1lbnQpLnF1ZXJ5U2VsZWN0b3JBbGwo
c2VsZWN0b3IpOworfQorCisvLyBhZGRFdmVudExpc3RlbmVyIHdyYXBwZXI6CitmdW5jdGlvbiAk
b24odGFyZ2V0LCB0eXBlLCBjYWxsYmFjaywgdXNlQ2FwdHVyZSkgeworICAgIHRhcmdldC5hZGRF
dmVudExpc3RlbmVyKHR5cGUsIGNhbGxiYWNrLCAhIXVzZUNhcHR1cmUpOworfQorCisvLyBBdHRh
Y2ggYSBoYW5kbGVyIHRvIGV2ZW50IGZvciBhbGwgZWxlbWVudHMgdGhhdCBtYXRjaCB0aGUgc2Vs
ZWN0b3IsCisvLyBub3cgb3IgaW4gdGhlIGZ1dHVyZSwgYmFzZWQgb24gYSByb290IGVsZW1lbnQK
K2Z1bmN0aW9uICRkZWxlZ2F0ZSh0YXJnZXQsIHNlbGVjdG9yLCB0eXBlLCBoYW5kbGVyKSB7Cisg
ICAgbGV0IGRpc3BhdGNoRXZlbnQgPSBldmVudCA9PiB7CisgICAgICAgIGNvbnN0IHRhcmdldEVs
ZW1lbnQgPSBldmVudC50YXJnZXQ7CisgICAgICAgIGNvbnN0IHBvdGVudGlhbEVsZW1lbnRzID0g
cXNhKHNlbGVjdG9yLCB0YXJnZXQpOworICAgICAgICBjb25zdCBoYXNNYXRjaCA9IEFycmF5LnBy
b3RvdHlwZS5pbmRleE9mLmNhbGwocG90ZW50aWFsRWxlbWVudHMsIHRhcmdldEVsZW1lbnQpID49
IDA7CisKKyAgICAgICAgaWYgKGhhc01hdGNoKSB7CisgICAgICAgICAgICBoYW5kbGVyLmNhbGwo
dGFyZ2V0RWxlbWVudCwgZXZlbnQpOworICAgICAgICB9CisgICAgfTsKKworICAgIC8vIGh0dHBz
Oi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0V2ZW50cy9ibHVyCisgICAg
Y29uc3QgdXNlQ2FwdHVyZSA9IHR5cGUgPT09ICdibHVyJyB8fCB0eXBlID09PSAnZm9jdXMnOwor
CisgICAgJG9uKHRhcmdldCwgdHlwZSwgZGlzcGF0Y2hFdmVudCwgdXNlQ2FwdHVyZSk7Cit9CisK
Ky8vIEZpbmQgdGhlIGVsZW1lbnQncyBwYXJlbnQgd2l0aCB0aGUgZ2l2ZW4gdGFnIG5hbWU6Cisv
LyAkcGFyZW50KHFzKCdhJyksICdkaXYnKQorZnVuY3Rpb24gJHBhcmVudChlbGVtZW50LCB0YWdO
YW1lKSB7CisgICAgaWYgKCFlbGVtZW50LnBhcmVudE5vZGUpIHsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChlbGVtZW50LnBhcmVudE5vZGUudGFnTmFtZS50b0xvd2VyQ2FzZSgp
ID09PSB0YWdOYW1lLnRvTG93ZXJDYXNlKCkpIHsKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQucGFy
ZW50Tm9kZTsKKyAgICB9CisKKyAgICByZXR1cm4gJHBhcmVudChlbGVtZW50LnBhcmVudE5vZGUs
IHRhZ05hbWUpOworfQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVl
ZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9zcmMv
bW9kZWwuanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291
cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L3NyYy9tb2RlbC5qcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5jZjhkNTgxODFiYjUyMTMzZjBjZjY3Y2RiZTYzNzZjZjZhN2VhNzg3Ci0tLSAvZGV2L251
bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJj
ZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9zcmMvbW9kZWwuanMKQEAgLTAsMCAr
MSwxMTcgQEAKKyd1c2Ugc3RyaWN0JzsKKworCisvKioKKyAqIENyZWF0ZXMgYSBuZXcgTW9kZWwg
aW5zdGFuY2UgYW5kIGhvb2tzIHVwIHRoZSBzdG9yYWdlLgorICogQGNvbnN0cnVjdG9yCisgKiBA
cGFyYW0ge29iamVjdH0gc3RvcmFnZSBBIHJlZmVyZW5jZSB0byB0aGUgY2xpZW50IHNpZGUgc3Rv
cmFnZSBjbGFzcworICovCitjbGFzcyBNb2RlbCB7CisgICAgY29uc3RydWN0b3Ioc3RvcmFnZSkg
eworICAgICAgICB0aGlzLnN0b3JhZ2UgPSBzdG9yYWdlOworICAgIH0KKworICAgIC8qKgorICAg
ICAqIENyZWF0ZXMgYSBuZXcgdG9kbyBtb2RlbAorICAgICAqCisgICAgICogQHBhcmFtIHtzdHJp
bmd9IFt0aXRsZV0gVGhlIHRpdGxlIG9mIHRoZSB0YXNrCisgICAgICogQHBhcmFtIHtmdW5jdGlv
bn0gW2NhbGxiYWNrXSBUaGUgY2FsbGJhY2sgdG8gZmlyZSBhZnRlciB0aGUgbW9kZWwgaXMgY3Jl
YXRlZAorICAgICAqLworICAgIGNyZWF0ZSh0aXRsZSwgY2FsbGJhY2speworICAgICAgICB0aXRs
ZSA9IHRpdGxlIHx8ICcnOworCisgICAgICAgIGxldCBuZXdJdGVtID0geworICAgICAgICAgICAg
dGl0bGU6IHRpdGxlLnRyaW0oKSwKKyAgICAgICAgICAgIGNvbXBsZXRlZDogZmFsc2UKKyAgICAg
ICAgfTsKKworICAgICAgICB0aGlzLnN0b3JhZ2Uuc2F2ZShuZXdJdGVtLCBjYWxsYmFjayk7Cisg
ICAgfQorCisgICAgLyoqCisgICAgICogRmluZHMgYW5kIHJldHVybnMgYSBtb2RlbCBpbiBzdG9y
YWdlLiBJZiBubyBxdWVyeSBpcyBnaXZlbiBpdCdsbCBzaW1wbHkKKyAgICAgKiByZXR1cm4gZXZl
cnl0aGluZy4gSWYgeW91IHBhc3MgaW4gYSBzdHJpbmcgb3IgbnVtYmVyIGl0J2xsIGxvb2sgdGhh
dCB1cCBhcworICAgICAqIHRoZSBJRCBvZiB0aGUgbW9kZWwgdG8gZmluZC4gTGFzdGx5LCB5b3Ug
Y2FuIHBhc3MgaXQgYW4gb2JqZWN0IHRvIG1hdGNoCisgICAgICogYWdhaW5zdC4KKyAgICAgKgor
ICAgICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcnxvYmplY3R9IFtxdWVyeV0gQSBxdWVyeSB0byBt
YXRjaCBtb2RlbHMgYWdhaW5zdAorICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IFtjYWxsYmFja10g
VGhlIGNhbGxiYWNrIHRvIGZpcmUgYWZ0ZXIgdGhlIG1vZGVsIGlzIGZvdW5kCisgICAgICoKKyAg
ICAgKiBAZXhhbXBsZQorICAgICAqIG1vZGVsLnJlYWQoMSwgZnVuYykgLy8gV2lsbCBmaW5kIHRo
ZSBtb2RlbCB3aXRoIGFuIElEIG9mIDEKKyAgICAgKiBtb2RlbC5yZWFkKCcxJykgLy8gU2FtZSBh
cyBhYm92ZQorICAgICAqIC8vQmVsb3cgd2lsbCBmaW5kIGEgbW9kZWwgd2l0aCBmb28gZXF1YWxs
aW5nIGJhciBhbmQgaGVsbG8gZXF1YWxsaW5nIHdvcmxkLgorICAgICAqIG1vZGVsLnJlYWQoeyBm
b286ICdiYXInLCBoZWxsbzogJ3dvcmxkJyB9KQorICAgICAqLworICAgIHJlYWQocXVlcnksIGNh
bGxiYWNrKXsKKyAgICAgICAgY29uc3QgcXVlcnlUeXBlID0gdHlwZW9mIHF1ZXJ5OworCisgICAg
ICAgIGlmIChxdWVyeVR5cGUgPT09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgICAgIGNhbGxiYWNr
ID0gcXVlcnk7CisgICAgICAgICAgICB0aGlzLnN0b3JhZ2UuZmluZEFsbChjYWxsYmFjayk7Cisg
ICAgICAgIH0gZWxzZSBpZiAocXVlcnlUeXBlID09PSAnc3RyaW5nJyB8fCBxdWVyeVR5cGUgPT09
ICdudW1iZXInKSB7CisgICAgICAgICAgICBxdWVyeSA9IHBhcnNlSW50KHF1ZXJ5LCAxMCk7Cisg
ICAgICAgICAgICB0aGlzLnN0b3JhZ2UuZmluZCh7aWQ6IHF1ZXJ5fSwgY2FsbGJhY2spOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5zdG9yYWdlLmZpbmQocXVlcnksIGNhbGxi
YWNrKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFVwZGF0ZXMgYSBtb2Rl
bCBieSBnaXZpbmcgaXQgYW4gSUQsIGRhdGEgdG8gdXBkYXRlLCBhbmQgYSBjYWxsYmFjayB0byBm
aXJlIHdoZW4KKyAgICAgKiB0aGUgdXBkYXRlIGlzIGNvbXBsZXRlLgorICAgICAqCisgICAgICog
QHBhcmFtIHtudW1iZXJ9IGlkIFRoZSBpZCBvZiB0aGUgbW9kZWwgdG8gdXBkYXRlCisgICAgICog
QHBhcmFtIHtvYmplY3R9IGRhdGEgVGhlIHByb3BlcnRpZXMgdG8gdXBkYXRlIGFuZCB0aGVpciBu
ZXcgdmFsdWUKKyAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sg
dG8gZmlyZSB3aGVuIHRoZSB1cGRhdGUgaXMgY29tcGxldGUuCisgICAgICovCisgICAgdXBkYXRl
KGlkLCBkYXRhLCBjYWxsYmFjayl7CisgICAgICAgIHRoaXMuc3RvcmFnZS5zYXZlKGRhdGEsIGNh
bGxiYWNrLCBpZCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVtb3ZlcyBhIG1vZGVsIGZy
b20gc3RvcmFnZQorICAgICAqCisgICAgICogQHBhcmFtIHtudW1iZXJ9IGlkIFRoZSBJRCBvZiB0
aGUgbW9kZWwgdG8gcmVtb3ZlCisgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgVGhl
IGNhbGxiYWNrIHRvIGZpcmUgd2hlbiB0aGUgcmVtb3ZhbCBpcyBjb21wbGV0ZS4KKyAgICAgKi8K
KyAgICByZW1vdmUoaWQsIGNhbGxiYWNrKXsKKyAgICAgICAgdGhpcy5zdG9yYWdlLnJlbW92ZShp
ZCwgY2FsbGJhY2spOworICAgIH0KKworICAgIC8qKgorICAgICAqIFdBUk5JTkc6IFdpbGwgcmVt
b3ZlIEFMTCBkYXRhIGZyb20gc3RvcmFnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSB7ZnVuY3Rp
b259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBmaXJlIHdoZW4gdGhlIHN0b3JhZ2UgaXMgd2lw
ZWQuCisgICAgICovCisgICAgcmVtb3ZlQWxsKGNhbGxiYWNrKXsKKyAgICAgICAgdGhpcy5zdG9y
YWdlLmRyb3AoY2FsbGJhY2spOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBj
b3VudCBvZiBhbGwgdG9kb3MKKyAgICAgKi8KKyAgICBnZXRDb3VudChjYWxsYmFjayl7CisgICAg
ICAgIGxldCB0b2RvcyA9IHsKKyAgICAgICAgICAgIGFjdGl2ZTogMCwKKyAgICAgICAgICAgIGNv
bXBsZXRlZDogMCwKKyAgICAgICAgICAgIHRvdGFsOiAwCisgICAgICAgIH07CisKKyAgICAgICAg
dGhpcy5zdG9yYWdlLmZpbmRBbGwoZGF0YSA9PiB7CisgICAgICAgICAgICBmb3IgKGxldCB0b2Rv
IG9mIGRhdGEpIHsKKyAgICAgICAgICAgICAgICBpZiAodG9kby5jb21wbGV0ZWQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgdG9kb3MuY29tcGxldGVkKys7CisgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgdG9kb3MuYWN0aXZlKys7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgdG9kb3MudG90YWwrKzsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKGNhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2sodG9kb3Mp
OworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9XZWJz
aXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL3Zh
bmlsbGEtZXhhbXBsZXMvZXMyMDE1L3NyYy9zdG9yZS5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5j
aC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9l
czIwMTUvc3JjL3N0b3JlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRjMjJmMjUxMDczZDAyOGRjMmVmOTA0OGUw
OGExMzdkY2FiZGYwZWQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gu
b3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMy
MDE1L3NyYy9zdG9yZS5qcwpAQCAtMCwwICsxLDE1MiBAQAorLypqc2hpbnQgZXFlcWVxOmZhbHNl
ICovCisndXNlIHN0cmljdCc7CisKK2xldCB1bmlxdWVJRCA9IDE7CisKKy8qKgorICogQ3JlYXRl
cyBhIG5ldyBjbGllbnQgc2lkZSBzdG9yYWdlIG9iamVjdCBhbmQgd2lsbCBjcmVhdGUgYW4gZW1w
dHkKKyAqIGNvbGxlY3Rpb24gaWYgbm8gY29sbGVjdGlvbiBhbHJlYWR5IGV4aXN0cy4KKyAqCisg
KiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiBvdXIgREIgd2Ugd2FudCB0byB1c2UK
KyAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIE91ciBmYWtlIERCIHVzZXMgY2FsbGJhY2tz
IGJlY2F1c2UgaW4KKyAqIHJlYWwgbGlmZSB5b3UgcHJvYmFibHkgd291bGQgYmUgbWFraW5nIEFK
QVggY2FsbHMKKyAqLworY2xhc3MgU3RvcmUgeworICAgIGNvbnN0cnVjdG9yKG5hbWUsIGNhbGxi
YWNrKSB7CisgICAgICAgIHRoaXMuX2RiTmFtZSA9IG5hbWU7CisgICAgICAgIHRoaXMubWVtb3J5
U3RvcmFnZSA9IHRoaXMubWVtb3J5U3RvcmFnZSB8fCB7fTsKKworICAgICAgICBpZiAoIXRoaXMu
bWVtb3J5U3RvcmFnZVtuYW1lXSkgeworICAgICAgICAgICAgbGV0IGRhdGEgPSB7CisgICAgICAg
ICAgICAgICAgdG9kb3M6IFtdCisgICAgICAgICAgICB9OworCisgICAgICAgICAgICB0aGlzLm1l
bW9yeVN0b3JhZ2VbbmFtZV0gPSBKU09OLnN0cmluZ2lmeShkYXRhKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChjYWxsYmFjaykgeworICAgICAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzLCBK
U09OLnBhcnNlKHRoaXMubWVtb3J5U3RvcmFnZVtuYW1lXSkpOworICAgICAgICB9CisgICAgfQor
CisgICAgLyoqCisgICAgICogRmluZHMgaXRlbXMgYmFzZWQgb24gYSBxdWVyeSBnaXZlbiBhcyBh
IEpTIG9iamVjdAorICAgICAqCisgICAgICogQHBhcmFtIHtvYmplY3R9IHF1ZXJ5IFRoZSBxdWVy
eSB0byBtYXRjaCBhZ2FpbnN0IChpLmUuIHtmb286ICdiYXInfSkKKyAgICAgKiBAcGFyYW0ge2Z1
bmN0aW9ufSBjYWxsYmFjayAgIFRoZSBjYWxsYmFjayB0byBmaXJlIHdoZW4gdGhlIHF1ZXJ5IGhh
cworICAgICAqIGNvbXBsZXRlZCBydW5uaW5nCisgICAgICoKKyAgICAgKiBAZXhhbXBsZQorICAg
ICAqIGRiLmZpbmQoe2ZvbzogJ2JhcicsIGhlbGxvOiAnd29ybGQnfSwgZnVuY3Rpb24gKGRhdGEp
IHsKKyAgICAgICAgICogICAvLyBkYXRhIHdpbGwgcmV0dXJuIGFueSBpdGVtcyB0aGF0IGhhdmUg
Zm9vOiBiYXIgYW5kCisgICAgICAgICAqICAgLy8gaGVsbG86IHdvcmxkIGluIHRoZWlyIHByb3Bl
cnRpZXMKKyAgICAgICAgICogfSkKKyAgICAgKi8KKyAgICBmaW5kKHF1ZXJ5LCBjYWxsYmFjayl7
CisgICAgICAgIGlmICghY2FsbGJhY2spIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGxldCB0b2RvcyA9IEpTT04ucGFyc2UodGhpcy5tZW1vcnlTdG9yYWdlW3Ro
aXMuX2RiTmFtZV0pLnRvZG9zOworCisgICAgICAgIGNhbGxiYWNrLmNhbGwodGhpcywgdG9kb3Mu
ZmlsdGVyKHRvZG8gPT4geworICAgICAgICAgICAgZm9yIChsZXQgcSBpbiBxdWVyeSkgeworICAg
ICAgICAgICAgICAgIGlmIChxdWVyeVtxXSAhPT0gdG9kb1txXSkgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0pKTsKKyAgICB9CisKKyAgICAvKioKKyAg
ICAgKiBXaWxsIHJldHJpZXZlIGFsbCBkYXRhIGZyb20gdGhlIGNvbGxlY3Rpb24KKyAgICAgKgor
ICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBmaXJlIHVw
b24gcmV0cmlldmluZyBkYXRhCisgICAgICovCisgICAgZmluZEFsbChjYWxsYmFjayl7CisgICAg
ICAgIGlmIChjYWxsYmFjaykgeworICAgICAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzLCBKU09O
LnBhcnNlKHRoaXMubWVtb3J5U3RvcmFnZVt0aGlzLl9kYk5hbWVdKS50b2Rvcyk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBXaWxsIHNhdmUgdGhlIGdpdmVuIGRhdGEgdG8g
dGhlIERCLiBJZiBubyBpdGVtIGV4aXN0cyBpdCB3aWxsIGNyZWF0ZSBhIG5ldworICAgICAqIGl0
ZW0sIG90aGVyd2lzZSBpdCdsbCBzaW1wbHkgdXBkYXRlIGFuIGV4aXN0aW5nIGl0ZW0ncyBwcm9w
ZXJ0aWVzCisgICAgICoKKyAgICAgKiBAcGFyYW0ge29iamVjdH0gdXBkYXRlRGF0YSBUaGUgZGF0
YSB0byBzYXZlIGJhY2sgaW50byB0aGUgREIKKyAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxs
YmFjayBUaGUgY2FsbGJhY2sgdG8gZmlyZSBhZnRlciBzYXZpbmcKKyAgICAgKiBAcGFyYW0ge251
bWJlcn0gaWQgQW4gb3B0aW9uYWwgcGFyYW0gdG8gZW50ZXIgYW4gSUQgb2YgYW4gaXRlbSB0byB1
cGRhdGUKKyAgICAgKi8KKyAgICBzYXZlKHVwZGF0ZURhdGEsIGNhbGxiYWNrLCBpZCl7CisgICAg
ICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKHRoaXMubWVtb3J5U3RvcmFnZVt0aGlzLl9kYk5h
bWVdKTsKKyAgICAgICAgbGV0IHRvZG9zID0gZGF0YS50b2RvczsKKyAgICAgICAgY29uc3QgbGVu
ID0gdG9kb3MubGVuZ3RoOworCisgICAgICAgIC8vIElmIGFuIElEIHdhcyBhY3R1YWxseSBnaXZl
biwgZmluZCB0aGUgaXRlbSBhbmQgdXBkYXRlIGVhY2ggcHJvcGVydHkKKyAgICAgICAgaWYgKGlk
KSB7CisgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAg
ICAgICAgICAgaWYgKHRvZG9zW2ldLmlkID09PSBpZCkgeworICAgICAgICAgICAgICAgICAgICBm
b3IgKGxldCBrZXkgaW4gdXBkYXRlRGF0YSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdG9k
b3NbaV1ba2V5XSA9IHVwZGF0ZURhdGFba2V5XTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHRoaXMubWVtb3J5U3RvcmFnZVt0aGlzLl9kYk5hbWVdID0gSlNPTi5z
dHJpbmdpZnkoZGF0YSk7CisKKyAgICAgICAgICAgIGlmIChjYWxsYmFjaykgeworICAgICAgICAg
ICAgICAgIGNhbGxiYWNrLmNhbGwodGhpcywgSlNPTi5wYXJzZSh0aGlzLm1lbW9yeVN0b3JhZ2Vb
dGhpcy5fZGJOYW1lXSkudG9kb3MpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLy8gR2VuZXJhdGUgYW4gSUQKKyAgICAgICAgICAgIHVwZGF0ZURhdGEuaWQg
PSB1bmlxdWVJRCsrOworCisgICAgICAgICAgICB0b2Rvcy5wdXNoKHVwZGF0ZURhdGEpOworICAg
ICAgICAgICAgdGhpcy5tZW1vcnlTdG9yYWdlW3RoaXMuX2RiTmFtZV0gPSBKU09OLnN0cmluZ2lm
eShkYXRhKTsKKworICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAg
Y2FsbGJhY2suY2FsbCh0aGlzLCBbdXBkYXRlRGF0YV0pOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogV2lsbCByZW1vdmUgYW4gaXRlbSBmcm9tIHRo
ZSBTdG9yZSBiYXNlZCBvbiBpdHMgSUQKKyAgICAgKgorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBp
ZCBUaGUgSUQgb2YgdGhlIGl0ZW0geW91IHdhbnQgdG8gcmVtb3ZlCisgICAgICogQHBhcmFtIHtm
dW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGZpcmUgYWZ0ZXIgc2F2aW5nCisgICAg
ICovCisgICAgcmVtb3ZlKGlkLCBjYWxsYmFjayl7CisgICAgICAgIGNvbnN0IGRhdGEgPSBKU09O
LnBhcnNlKHRoaXMubWVtb3J5U3RvcmFnZVt0aGlzLl9kYk5hbWVdKTsKKyAgICAgICAgbGV0IHRv
ZG9zID0gZGF0YS50b2RvczsKKyAgICAgICAgY29uc3QgbGVuID0gdG9kb3MubGVuZ3RoOworCisg
ICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9kb3MubGVuZ3RoOyBpKyspIHsKKyAgICAgICAg
ICAgIGlmICh0b2Rvc1tpXS5pZCA9PSBpZCkgeworICAgICAgICAgICAgICAgIHRvZG9zLnNwbGlj
ZShpLCAxKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIHRoaXMubWVtb3J5U3RvcmFnZVt0aGlzLl9kYk5hbWVdID0gSlNPTi5zdHJp
bmdpZnkoZGF0YSk7CisKKyAgICAgICAgaWYgKGNhbGxiYWNrKSB7CisgICAgICAgICAgICBjYWxs
YmFjay5jYWxsKHRoaXMsIEpTT04ucGFyc2UodGhpcy5tZW1vcnlTdG9yYWdlW3RoaXMuX2RiTmFt
ZV0pLnRvZG9zKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFdpbGwgZHJv
cCBhbGwgc3RvcmFnZSBhbmQgc3RhcnQgZnJlc2gKKyAgICAgKgorICAgICAqIEBwYXJhbSB7ZnVu
Y3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBmaXJlIGFmdGVyIGRyb3BwaW5nIHRoZSBk
YXRhCisgICAgICovCisgICAgZHJvcChjYWxsYmFjayl7CisgICAgICAgIHRoaXMubWVtb3J5U3Rv
cmFnZVt0aGlzLl9kYk5hbWVdID0gSlNPTi5zdHJpbmdpZnkoe3RvZG9zOiBbXX0pOworCisgICAg
ICAgIGlmIChjYWxsYmFjaykgeworICAgICAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzLCBKU09O
LnBhcnNlKHRoaXMubWVtb3J5U3RvcmFnZVt0aGlzLl9kYk5hbWVdKS50b2Rvcyk7CisgICAgICAg
IH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVk
b21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L3NyYy90
ZW1wbGF0ZS5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVz
b3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvc3JjL3RlbXBsYXRlLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjc3ZDRkZDRjNjBiZTI2NTM4ODFhMjgwZThkYTdkZjhkM2Q2MzEzMDYKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jl
c291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L3NyYy90ZW1wbGF0ZS5qcwpA
QCAtMCwwICsxLDk1IEBACisndXNlIHN0cmljdCc7CisKKworY29uc3QgaHRtbEVzY2FwZXMgPSB7
CisgICAgJyYnOiAnJmFtcCcsCisgICAgJzwnOiAnJmx0JywKKyAgICAnPic6ICcmZ3QnLAorICAg
ICciJzogJyZxdW90JywKKyAgICAnXCcnOiAnJiN4MjcnLAorICAgICdgJzogJyYjeDYwJworfTsK
KworY29uc3QgcmVVbmVzY2FwZWRIdG1sID0gL1smPD4iJ2BdL2c7Citjb25zdCByZUhhc1VuZXNj
YXBlZEh0bWwgPSBuZXcgUmVnRXhwKHJlVW5lc2NhcGVkSHRtbC5zb3VyY2UpOworCitsZXQgZXNj
YXBlID0gc3RyID0+IChzdHIgJiYgcmVIYXNVbmVzY2FwZWRIdG1sLnRlc3Qoc3RyKSkgPyBzdHIu
cmVwbGFjZShyZVVuZXNjYXBlZEh0bWwsIGVzY2FwZUh0bWxDaGFyKSA6IHN0cjsKK2xldCBlc2Nh
cGVIdG1sQ2hhciA9IGNociA9PiBodG1sRXNjYXBlc1tjaHJdOworCitjbGFzcyBUZW1wbGF0ZSB7
CisgICAgY29uc3RydWN0b3IoKSB7CisgICAgICAgIHRoaXMuZGVmYXVsdFRlbXBsYXRlID0gYAor
ICAgICAgICAgICAgPGxpIGRhdGEtaWQ9Int7aWR9fSIgY2xhc3M9Int7Y29tcGxldGVkfX0iPgor
ICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZpZXciPgorICAgICAgICAgICAgICAgICAgICA8
aW5wdXQgY2xhc3M9InRvZ2dsZSIgdHlwZT0iY2hlY2tib3giIHt7Y2hlY2tlZH19PgorICAgICAg
ICAgICAgICAgICAgICA8bGFiZWw+e3t0aXRsZX19PC9sYWJlbD4KKyAgICAgICAgICAgICAgICAg
ICAgPGJ1dHRvbiBjbGFzcz0iZGVzdHJveSI+PC9idXR0b24+CisgICAgICAgICAgICAgICAgPC9k
aXY+CisgICAgICAgICAgICA8L2xpPgorICAgICAgICBgOworICAgIH0KKworICAgIC8qKgorICAg
ICAqIENyZWF0ZXMgYW4gPGxpPiBIVE1MIHN0cmluZyBhbmQgcmV0dXJucyBpdCBmb3IgcGxhY2Vt
ZW50IGluIHlvdXIgYXBwLgorICAgICAqCisgICAgICogTk9URTogSW4gcmVhbCBsaWZlIHlvdSBz
aG91bGQgYmUgdXNpbmcgYSB0ZW1wbGF0aW5nIGVuZ2luZSBzdWNoIGFzIE11c3RhY2hlCisgICAg
ICogb3IgSGFuZGxlYmFycywgaG93ZXZlciwgdGhpcyBpcyBhIHZhbmlsbGEgSlMgZXhhbXBsZS4K
KyAgICAgKgorICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkYXRhIFRoZSBvYmplY3QgY29udGFpbmlu
ZyBrZXlzIHlvdSB3YW50IHRvIGZpbmQgaW4gdGhlCisgICAgICogICAgICAgICAgICAgICAgICAg
ICAgdGVtcGxhdGUgdG8gcmVwbGFjZS4KKyAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBIVE1MIFN0
cmluZyBvZiBhbiA8bGk+IGVsZW1lbnQKKyAgICAgKgorICAgICAqIEBleGFtcGxlCisgICAgICog
dmlldy5zaG93KHsKKyAgICAgICAgICogIGlkOiAxLAorICAgICAgICAgKiAgdGl0bGU6ICJIZWxs
byBXb3JsZCIsCisgICAgICAgICAqICBjb21wbGV0ZWQ6IDAsCisgICAgICAgICAqIH0pCisgICAg
ICovCisgICAgc2hvdyhkYXRhKXsKKyAgICAgICAgbGV0IGkgPSAwOworICAgICAgICBsZXQgdmll
dyA9ICcnOworICAgICAgICBjb25zdCBsZW4gPSBkYXRhLmxlbmd0aDsKKworICAgICAgICBmb3Ig
KGk7IGkgPCBsZW47IGkrKykgeworICAgICAgICAgICAgbGV0IGNvbXBsZXRlZCA9ICcnOworICAg
ICAgICAgICAgbGV0IGNoZWNrZWQgPSAnJzsKKyAgICAgICAgICAgIGxldCB0ZW1wbGF0ZSA9IHRo
aXMuZGVmYXVsdFRlbXBsYXRlOworCisgICAgICAgICAgICBpZiAoZGF0YVtpXS5jb21wbGV0ZWQp
IHsKKyAgICAgICAgICAgICAgICBjb21wbGV0ZWQgPSAnY29tcGxldGVkJzsKKyAgICAgICAgICAg
ICAgICBjaGVja2VkID0gJ2NoZWNrZWQnOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0
ZW1wbGF0ZSA9IHRlbXBsYXRlLnJlcGxhY2UoJ3t7aWR9fScsIGRhdGFbaV0uaWQpOworICAgICAg
ICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZS5yZXBsYWNlKCd7e3RpdGxlfX0nLCBlc2NhcGUoZGF0
YVtpXS50aXRsZSkpOworICAgICAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZS5yZXBsYWNlKCd7
e2NvbXBsZXRlZH19JywgY29tcGxldGVkKTsKKyAgICAgICAgICAgIHRlbXBsYXRlID0gdGVtcGxh
dGUucmVwbGFjZSgne3tjaGVja2VkfX0nLCBjaGVja2VkKTsKKworICAgICAgICAgICAgdmlldyAr
PSB0ZW1wbGF0ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB2aWV3OworICAgIH0KKwor
ICAgIC8qKgorICAgICAqIERpc3BsYXlzIGEgY291bnRlciBvZiBob3cgbWFueSB0byBkb3MgYXJl
IGxlZnQgdG8gY29tcGxldGUKKyAgICAgKgorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBhY3RpdmVU
b2RvcyBUaGUgbnVtYmVyIG9mIGFjdGl2ZSB0b2Rvcy4KKyAgICAgKiBAcmV0dXJucyB7c3RyaW5n
fSBTdHJpbmcgY29udGFpbmluZyB0aGUgY291bnQKKyAgICAgKi8KKyAgICBpdGVtQ291bnRlcihh
Y3RpdmVUb2Rvcyl7CisgICAgICAgIGxldCBwbHVyYWwgPSBhY3RpdmVUb2RvcyA9PT0gMSA/ICcn
IDogJ3MnOworICAgICAgICByZXR1cm4gYDxzdHJvbmc+JHthY3RpdmVUb2Rvc308L3N0cm9uZz4g
aXRlbSR7cGx1cmFsfSBsZWZ0YDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRo
ZSB0ZXh0IHdpdGhpbiB0aGUgIkNsZWFyIGNvbXBsZXRlZCIgYnV0dG9uCisgICAgICoKKyAgICAg
KiBAcGFyYW0gIHtbdHlwZV19IGNvbXBsZXRlZFRvZG9zIFRoZSBudW1iZXIgb2YgY29tcGxldGVk
IHRvZG9zLgorICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFN0cmluZyBjb250YWluaW5nIHRoZSBj
b3VudAorICAgICAqLworICAgIGNsZWFyQ29tcGxldGVkQnV0dG9uKGNvbXBsZXRlZFRvZG9zKXsK
KyAgICAgICAgcmV0dXJuIChjb21wbGV0ZWRUb2RvcyA+IDApID8gJ0NsZWFyIGNvbXBsZXRlZCcg
OiAnJzsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1Nw
ZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L3Ny
Yy92aWV3LmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNv
dXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9zcmMvdmlldy5qcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40YmEzNWQyMTljMmE1MjBiYjE2ZWVkOTgyMDliMTg3NWI3ZmY3OWU2Ci0tLSAvZGV2L251
bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJj
ZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9zcmMvdmlldy5qcwpAQCAtMCwwICsx
LDE3OCBAQAorJ3VzZSBzdHJpY3QnOworCisKKy8vIGltcG9ydCB7cXMsIHFzYSwgJG9uLCAkcGFy
ZW50LCAkZGVsZWdhdGV9IGZyb20gJy4vaGVscGVycyc7CisKK2xldCBfaXRlbUlkID0gZWxlbWVu
dCA9PiBwYXJzZUludCgkcGFyZW50KGVsZW1lbnQsICdsaScpLmRhdGFzZXQuaWQsIDEwKTsKKwor
bGV0IF9zZXRGaWx0ZXIgPSBjdXJyZW50UGFnZSA9PiB7CisgICAgcXMoJy5maWx0ZXJzIC5zZWxl
Y3RlZCcpLmNsYXNzTmFtZSA9ICcnOworICAgIHFzKGAuZmlsdGVycyBbaHJlZj0iIy8ke2N1cnJl
bnRQYWdlfSJdYCkuY2xhc3NOYW1lID0gJ3NlbGVjdGVkJzsKK307CisKK2xldCBfZWxlbWVudENv
bXBsZXRlID0gKGlkLCBjb21wbGV0ZWQpID0+IHsKKyAgICBsZXQgbGlzdEl0ZW0gPSBxcyhgW2Rh
dGEtaWQ9IiR7aWR9Il1gKTsKKworICAgIGlmICghbGlzdEl0ZW0pIHsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGxpc3RJdGVtLmNsYXNzTmFtZSA9IGNvbXBsZXRlZCA/ICdjb21wbGV0
ZWQnIDogJyc7CisKKyAgICAvLyBJbiBjYXNlIGl0IHdhcyB0b2dnbGVkIGZyb20gYW4gZXZlbnQg
YW5kIG5vdCBieSBjbGlja2luZyB0aGUgY2hlY2tib3gKKyAgICBxcygnaW5wdXQnLCBsaXN0SXRl
bSkuY2hlY2tlZCA9IGNvbXBsZXRlZDsKK307CisKK2xldCBfZWRpdEl0ZW0gPSAoaWQsIHRpdGxl
KSA9PiB7CisgICAgbGV0IGxpc3RJdGVtID0gcXMoYFtkYXRhLWlkPSIke2lkfSJdYCk7CisKKyAg
ICBpZiAoIWxpc3RJdGVtKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBsaXN0SXRl
bS5jbGFzc05hbWUgKz0gJyBlZGl0aW5nJzsKKworICAgIGxldCBpbnB1dCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CisgICAgaW5wdXQuY2xhc3NOYW1lID0gJ2VkaXQnOworCisg
ICAgbGlzdEl0ZW0uYXBwZW5kQ2hpbGQoaW5wdXQpOworICAgIGlucHV0LmZvY3VzKCk7CisgICAg
aW5wdXQudmFsdWUgPSB0aXRsZTsKK307CisKKy8qKgorICogVmlldyB0aGF0IGFic3RyYWN0cyBh
d2F5IHRoZSBicm93c2VyJ3MgRE9NIGNvbXBsZXRlbHkuCisgKiBJdCBoYXMgdHdvIHNpbXBsZSBl
bnRyeSBwb2ludHM6CisgKgorICogICAtIGJpbmQoZXZlbnROYW1lLCBoYW5kbGVyKQorICogICAg
IFRha2VzIGEgdG9kbyBhcHBsaWNhdGlvbiBldmVudCBhbmQgcmVnaXN0ZXJzIHRoZSBoYW5kbGVy
CisgKiAgIC0gcmVuZGVyKGNvbW1hbmQsIHBhcmFtZXRlck9iamVjdCkKKyAqICAgICBSZW5kZXJz
IHRoZSBnaXZlbiBjb21tYW5kIHdpdGggdGhlIG9wdGlvbnMKKyAqLworY2xhc3MgVmlldyB7Cisg
ICAgY29uc3RydWN0b3IodGVtcGxhdGUpIHsKKyAgICAgICAgdGhpcy50ZW1wbGF0ZSA9IHRlbXBs
YXRlOworCisgICAgICAgIHRoaXMuRU5URVJfS0VZID0gMTM7CisgICAgICAgIHRoaXMuRVNDQVBF
X0tFWSA9IDI3OworCisgICAgICAgIHRoaXMuJHRvZG9MaXN0ID0gcXMoJy50b2RvLWxpc3QnKTsK
KyAgICAgICAgdGhpcy4kdG9kb0l0ZW1Db3VudGVyID0gcXMoJy50b2RvLWNvdW50Jyk7CisgICAg
ICAgIHRoaXMuJGNsZWFyQ29tcGxldGVkID0gcXMoJy5jbGVhci1jb21wbGV0ZWQnKTsKKyAgICAg
ICAgdGhpcy4kbWFpbiA9IHFzKCcubWFpbicpOworICAgICAgICB0aGlzLiRmb290ZXIgPSBxcygn
LmZvb3RlcicpOworICAgICAgICB0aGlzLiR0b2dnbGVBbGwgPSBxcygnLnRvZ2dsZS1hbGwnKTsK
KyAgICAgICAgdGhpcy4kbmV3VG9kbyA9IHFzKCcubmV3LXRvZG8nKTsKKworICAgICAgICB0aGlz
LnZpZXdDb21tYW5kcyA9IHsKKyAgICAgICAgICAgIHNob3dFbnRyaWVzOiBwYXJhbWV0ZXIgPT4g
dGhpcy4kdG9kb0xpc3QuaW5uZXJIVE1MID0gdGhpcy50ZW1wbGF0ZS5zaG93KHBhcmFtZXRlciks
CisgICAgICAgICAgICByZW1vdmVJdGVtOiBwYXJhbWV0ZXIgPT4gdGhpcy5fcmVtb3ZlSXRlbShw
YXJhbWV0ZXIpLAorICAgICAgICAgICAgdXBkYXRlRWxlbWVudENvdW50OiBwYXJhbWV0ZXIgPT4g
dGhpcy4kdG9kb0l0ZW1Db3VudGVyLmlubmVySFRNTCA9IHRoaXMudGVtcGxhdGUuaXRlbUNvdW50
ZXIocGFyYW1ldGVyKSwKKyAgICAgICAgICAgIGNsZWFyQ29tcGxldGVkQnV0dG9uOiBwYXJhbWV0
ZXIgPT4gdGhpcy5fY2xlYXJDb21wbGV0ZWRCdXR0b24ocGFyYW1ldGVyLmNvbXBsZXRlZCwgcGFy
YW1ldGVyLnZpc2libGUpLAorICAgICAgICAgICAgY29udGVudEJsb2NrVmlzaWJpbGl0eTogcGFy
YW1ldGVyID0+IHRoaXMuJG1haW4uc3R5bGUuZGlzcGxheSA9IHRoaXMuJGZvb3Rlci5zdHlsZS5k
aXNwbGF5ID0gcGFyYW1ldGVyLnZpc2libGUgPyAnYmxvY2snIDogJ25vbmUnLAorICAgICAgICAg
ICAgdG9nZ2xlQWxsOiBwYXJhbWV0ZXIgPT4gdGhpcy4kdG9nZ2xlQWxsLmNoZWNrZWQgPSBwYXJh
bWV0ZXIuY2hlY2tlZCwKKyAgICAgICAgICAgIHNldEZpbHRlcjogcGFyYW1ldGVyID0+IF9zZXRG
aWx0ZXIocGFyYW1ldGVyKSwKKyAgICAgICAgICAgIGNsZWFyTmV3VG9kbzogcGFyYW1ldGVyID0+
IHRoaXMuJG5ld1RvZG8udmFsdWUgPSAnJywKKyAgICAgICAgICAgIGVsZW1lbnRDb21wbGV0ZTog
cGFyYW1ldGVyID0+IF9lbGVtZW50Q29tcGxldGUocGFyYW1ldGVyLmlkLCBwYXJhbWV0ZXIuY29t
cGxldGVkKSwKKyAgICAgICAgICAgIGVkaXRJdGVtOiBwYXJhbWV0ZXIgPT4gX2VkaXRJdGVtKHBh
cmFtZXRlci5pZCwgcGFyYW1ldGVyLnRpdGxlKSwKKyAgICAgICAgICAgIGVkaXRJdGVtRG9uZTog
cGFyYW1ldGVyID0+IHRoaXMuX2VkaXRJdGVtRG9uZShwYXJhbWV0ZXIuaWQsIHBhcmFtZXRlci50
aXRsZSksCisgICAgICAgIH07CisgICAgfQorCisgICAgX3JlbW92ZUl0ZW0oaWQpIHsKKyAgICAg
ICAgbGV0IGVsZW0gPSBxcyhgW2RhdGEtaWQ9IiR7aWR9Il1gKTsKKworICAgICAgICBpZiAoZWxl
bSkgeworICAgICAgICAgICAgdGhpcy4kdG9kb0xpc3QucmVtb3ZlQ2hpbGQoZWxlbSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBfY2xlYXJDb21wbGV0ZWRCdXR0b24oY29tcGxldGVkQ291bnQs
IHZpc2libGUpIHsKKyAgICAgICAgdGhpcy4kY2xlYXJDb21wbGV0ZWQuaW5uZXJIVE1MID0gdGhp
cy50ZW1wbGF0ZS5jbGVhckNvbXBsZXRlZEJ1dHRvbihjb21wbGV0ZWRDb3VudCk7CisgICAgICAg
IHRoaXMuJGNsZWFyQ29tcGxldGVkLnN0eWxlLmRpc3BsYXkgPSB2aXNpYmxlID8gJ2Jsb2NrJyA6
ICdub25lJzsKKyAgICB9CisKKyAgICBfZWRpdEl0ZW1Eb25lKGlkLCB0aXRsZSkgeworICAgICAg
ICBsZXQgbGlzdEl0ZW0gPSBxcyhgW2RhdGEtaWQ9IiR7aWR9Il1gKTsKKworICAgICAgICBpZiAo
IWxpc3RJdGVtKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBs
ZXQgaW5wdXQgPSBxcygnaW5wdXQuZWRpdCcsIGxpc3RJdGVtKTsKKyAgICAgICAgbGlzdEl0ZW0u
cmVtb3ZlQ2hpbGQoaW5wdXQpOworCisgICAgICAgIGxpc3RJdGVtLmNsYXNzTmFtZSA9IGxpc3RJ
dGVtLmNsYXNzTmFtZS5yZXBsYWNlKCcgZWRpdGluZycsICcnKTsKKworICAgICAgICBxc2EoJ2xh
YmVsJywgbGlzdEl0ZW0pLmZvckVhY2gobGFiZWwgPT4gbGFiZWwudGV4dENvbnRlbnQgPSB0aXRs
ZSk7CisgICAgfQorCisgICAgcmVuZGVyKHZpZXdDbWQsIHBhcmFtZXRlcikgeworICAgICAgICB0
aGlzLnZpZXdDb21tYW5kc1t2aWV3Q21kXShwYXJhbWV0ZXIpOworICAgIH0KKworICAgIF9iaW5k
SXRlbUVkaXREb25lKGhhbmRsZXIpIHsKKyAgICAgICAgbGV0IHNlbGYgPSB0aGlzOworCisgICAg
ICAgICRkZWxlZ2F0ZShzZWxmLiR0b2RvTGlzdCwgJ2xpIC5lZGl0JywgJ2JsdXInLCBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMuZGF0YXNldC5pc2NhbmNlbGVkKSB7CisgICAg
ICAgICAgICAgICAgaGFuZGxlcih7CisgICAgICAgICAgICAgICAgICAgIGlkOiBfaXRlbUlkKHRo
aXMpLAorICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGhpcy52YWx1ZQorICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICAvLyBSZW1vdmUg
dGhlIGN1cnNvciBmcm9tIHRoZSBpbnB1dCB3aGVuIHlvdSBoaXQgZW50ZXIganVzdCBsaWtlIGlm
IGl0IHdlcmUgYSByZWFsIGZvcm0KKyAgICAgICAgJGRlbGVnYXRlKHNlbGYuJHRvZG9MaXN0LCAn
bGkgLmVkaXQnLCAna2V5cHJlc3MnLCBmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgICAgICAgIGlm
IChldmVudC5rZXlDb2RlID09PSBzZWxmLkVOVEVSX0tFWSkgeworICAgICAgICAgICAgICAgIHRo
aXMuYmx1cigpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisKKyAgICBfYmlu
ZEl0ZW1FZGl0Q2FuY2VsKGhhbmRsZXIpIHsKKyAgICAgICAgbGV0IHNlbGYgPSB0aGlzOworCisg
ICAgICAgICRkZWxlZ2F0ZShzZWxmLiR0b2RvTGlzdCwgJ2xpIC5lZGl0JywgJ2tleXVwJywgZnVu
Y3Rpb24gKGV2ZW50KSB7CisgICAgICAgICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gc2VsZi5F
U0NBUEVfS0VZKSB7CisgICAgICAgICAgICAgICAgbGV0IGlkID0gX2l0ZW1JZCh0aGlzKTsKKyAg
ICAgICAgICAgICAgICB0aGlzLmRhdGFzZXQuaXNjYW5jZWxlZCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgdGhpcy5ibHVyKCk7CisKKyAgICAgICAgICAgICAgICBoYW5kbGVyKHsgaWQgfSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KKworICAgIGJpbmQoZXZlbnQsIGhhbmRs
ZXIpIHsKKyAgICAgICAgaWYgKGV2ZW50ID09PSAnbmV3VG9kbycpIHsKKyAgICAgICAgICAgICRv
bih0aGlzLiRuZXdUb2RvLCAnY2hhbmdlJywgKCkgPT4gaGFuZGxlcih0aGlzLiRuZXdUb2RvLnZh
bHVlKSk7CisgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQgPT09ICdyZW1vdmVDb21wbGV0ZWQnKSB7
CisgICAgICAgICAgICAkb24odGhpcy4kY2xlYXJDb21wbGV0ZWQsICdjbGljaycsIGhhbmRsZXIp
OworICAgICAgICB9IGVsc2UgaWYgKGV2ZW50ID09PSAndG9nZ2xlQWxsJykgeworICAgICAgICAg
ICAgJG9uKHRoaXMuJHRvZ2dsZUFsbCwgJ2NsaWNrJywgZnVuY3Rpb24oKXsKKyAgICAgICAgICAg
ICAgICBoYW5kbGVyKHtjb21wbGV0ZWQ6IHRoaXMuY2hlY2tlZH0pOworICAgICAgICAgICAgfSk7
CisgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQgPT09ICdpdGVtRWRpdCcpIHsKKyAgICAgICAgICAg
ICRkZWxlZ2F0ZSh0aGlzLiR0b2RvTGlzdCwgJ2xpIGxhYmVsJywgJ2RibGNsaWNrJywgZnVuY3Rp
b24oKXsKKyAgICAgICAgICAgICAgICBoYW5kbGVyKHtpZDogX2l0ZW1JZCh0aGlzKX0pOworICAg
ICAgICAgICAgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQgPT09ICdpdGVtUmVtb3ZlJykg
eworICAgICAgICAgICAgJGRlbGVnYXRlKHRoaXMuJHRvZG9MaXN0LCAnLmRlc3Ryb3knLCAnY2xp
Y2snLCBmdW5jdGlvbigpeworICAgICAgICAgICAgICAgIGhhbmRsZXIoe2lkOiBfaXRlbUlkKHRo
aXMpfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChldmVudCA9PT0gJ2l0
ZW1Ub2dnbGUnKSB7CisgICAgICAgICAgICAkZGVsZWdhdGUodGhpcy4kdG9kb0xpc3QsICcudG9n
Z2xlJywgJ2NsaWNrJywgZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICBoYW5kbGVyKHsKKyAg
ICAgICAgICAgICAgICAgICAgaWQ6IF9pdGVtSWQodGhpcyksCisgICAgICAgICAgICAgICAgICAg
IGNvbXBsZXRlZDogdGhpcy5jaGVja2VkCisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChldmVudCA9PT0gJ2l0ZW1FZGl0RG9uZScpIHsKKyAg
ICAgICAgICAgIHRoaXMuX2JpbmRJdGVtRWRpdERvbmUoaGFuZGxlcik7CisgICAgICAgIH0gZWxz
ZSBpZiAoZXZlbnQgPT09ICdpdGVtRWRpdENhbmNlbCcpIHsKKyAgICAgICAgICAgIHRoaXMuX2Jp
bmRJdGVtRWRpdENhbmNlbChoYW5kbGVyKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdp
dCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3Rv
ZG9tdmMvdmFuaWxsYS1leGFtcGxlcy92YW5pbGxhanMvaW5kZXguaHRtbCBiL1dlYnNpdGVzL2Jy
b3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1l
eGFtcGxlcy92YW5pbGxhanMvaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mOWU1MThkZWQ3MDc4Y2Mw
NTc2MTk1NDdmYjhmYTFiYWIwNWQxOWJhCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJv
d3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4
YW1wbGVzL3ZhbmlsbGFqcy9pbmRleC5odG1sCkBAIC0wLDAgKzEsNTEgQEAKKzwhZG9jdHlwZSBo
dG1sPgorPGh0bWwgbGFuZz0iZW4iIGRhdGEtZnJhbWV3b3JrPSJqYXZhc2NyaXB0Ij4KKyAgICA8
aGVhZD4KKyAgICAgICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICAgICAgICA8dGl0bGU+VmFu
aWxsYSBKYXZhU2NyaXB0IFRvZG9NVkMgZXhhbXBsZTwvdGl0bGU+CisgICAgICAgIDxsaW5rIHJl
bD0ic3R5bGVzaGVldCIgaHJlZj0ibm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuY3Nz
Ij4KKyAgICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJub2RlX21vZHVsZXMvdG9k
b212Yy1hcHAtY3NzL2luZGV4LmNzcyI+CisgICAgPC9oZWFkPgorICAgIDxib2R5PgorICAgICAg
ICA8c2VjdGlvbiBjbGFzcz0idG9kb2FwcCI+CisgICAgICAgICAgICA8aGVhZGVyIGNsYXNzPSJo
ZWFkZXIiPgorICAgICAgICAgICAgICAgIDxoMT50b2RvczwvaDE+CisgICAgICAgICAgICAgICAg
PGlucHV0IGNsYXNzPSJuZXctdG9kbyIgcGxhY2Vob2xkZXI9IldoYXQgbmVlZHMgdG8gYmUgZG9u
ZT8iIGF1dG9mb2N1cz4KKyAgICAgICAgICAgIDwvaGVhZGVyPgorICAgICAgICAgICAgPHNlY3Rp
b24gY2xhc3M9Im1haW4iPgorICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0idG9nZ2xlLWFs
bCIgdHlwZT0iY2hlY2tib3giPgorICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9InRvZ2dsZS1h
bGwiPk1hcmsgYWxsIGFzIGNvbXBsZXRlPC9sYWJlbD4KKyAgICAgICAgICAgICAgICA8dWwgY2xh
c3M9InRvZG8tbGlzdCI+PC91bD4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgICAg
IDxmb290ZXIgY2xhc3M9ImZvb3RlciI+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRv
ZG8tY291bnQiPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8dWwgY2xhc3M9ImZpbHRlcnMiPgor
ICAgICAgICAgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVm
PSIjLyIgY2xhc3M9InNlbGVjdGVkIj5BbGw8L2E+CisgICAgICAgICAgICAgICAgICAgIDwvbGk+
CisgICAgICAgICAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhy
ZWY9IiMvYWN0aXZlIj5BY3RpdmU8L2E+CisgICAgICAgICAgICAgICAgICAgIDwvbGk+CisgICAg
ICAgICAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMv
Y29tcGxldGVkIj5Db21wbGV0ZWQ8L2E+CisgICAgICAgICAgICAgICAgICAgIDwvbGk+CisgICAg
ICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjbGVhci1j
b21wbGV0ZWQiPkNsZWFyIGNvbXBsZXRlZDwvYnV0dG9uPgorICAgICAgICAgICAgPC9mb290ZXI+
CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgPGZvb3RlciBjbGFzcz0iaW5mbyI+CisgICAg
ICAgICAgICA8cD5Eb3VibGUtY2xpY2sgdG8gZWRpdCBhIHRvZG88L3A+CisgICAgICAgICAgICA8
cD5TcGVlZG9tZXRlciB2ZXJzaW9uIGJ5IDxhIGhyZWY9Imh0dHA6Ly90d2l0dGVyLmNvbS9hZGR5
b3NtYW5pIj5BZGR5IE9zbWFuaTwvcD4KKyAgICAgICAgICAgIDxwPlBhcnRzIGJ5IDxhIGhyZWY9
Imh0dHA6Ly90d2l0dGVyLmNvbS9vc2NhcmdvZHNvbiI+T3NjYXIgR29kc29uPC9hPjwvcD4KKyAg
ICAgICAgICAgIDxwPlJlZmFjdG9yZWQgYnkgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2Ni
dXJnbWVyIj5DaHJpc3RvcGggQnVyZ21lcjwvYT48L3A+CisgICAgICAgICAgICA8cD5QYXJ0IG9m
IDxhIGhyZWY9Imh0dHA6Ly90b2RvbXZjLmNvbSI+VG9kb01WQzwvYT48L3A+CisgICAgICAgIDwv
Zm9vdGVyPgorICAgICAgICA8c2NyaXB0IHNyYz0ianMvaGVscGVycy5qcyI+PC9zY3JpcHQ+Cisg
ICAgICAgIDxzY3JpcHQgc3JjPSJqcy9zdG9yZS5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3Jp
cHQgc3JjPSJqcy9tb2RlbC5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJqcy90
ZW1wbGF0ZS5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJqcy92aWV3LmpzIj48
L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9ImpzL2NvbnRyb2xsZXIuanMiPjwvc2NyaXB0
PgorICAgICAgICA8c2NyaXB0IHNyYz0ianMvYXBwLmpzIj48L3NjcmlwdD4KKyAgICA8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21l
dGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvdmFuaWxsYWpzL2pzL2Fw
cC5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2Vz
L3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy92YW5pbGxhanMvanMvYXBwLmpzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjMwMWNmOWZlYWU0ODU1MmU2N2Q4MDc4YWU5ZmEzNzE3NGQ0YzM4ZDQKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90
b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvdmFuaWxsYWpzL2pzL2FwcC5qcwpAQCAtMCwwICsxLDI1
IEBACisvKmdsb2JhbCBhcHAsICRvbiAqLworKGZ1bmN0aW9uICgpIHsKKyAgICAndXNlIHN0cmlj
dCc7CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHVwIGEgYnJhbmQgbmV3IFRvZG8gbGlzdC4KKyAg
ICAgKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHlvdXIgbmV3IHRv
IGRvIGxpc3QuCisgICAgICovCisgICAgZnVuY3Rpb24gVG9kbyhuYW1lKSB7CisgICAgICAgIHRo
aXMuc3RvcmFnZSA9IG5ldyBhcHAuU3RvcmUobmFtZSk7CisgICAgICAgIHRoaXMubW9kZWwgPSBu
ZXcgYXBwLk1vZGVsKHRoaXMuc3RvcmFnZSk7CisgICAgICAgIHRoaXMudGVtcGxhdGUgPSBuZXcg
YXBwLlRlbXBsYXRlKCk7CisgICAgICAgIHRoaXMudmlldyA9IG5ldyBhcHAuVmlldyh0aGlzLnRl
bXBsYXRlKTsKKyAgICAgICAgdGhpcy5jb250cm9sbGVyID0gbmV3IGFwcC5Db250cm9sbGVyKHRo
aXMubW9kZWwsIHRoaXMudmlldyk7CisgICAgfQorCisgICAgdmFyIHRvZG8gPSBuZXcgVG9kbygn
dG9kb3MtdmFuaWxsYWpzJyk7CisKKyAgICBmdW5jdGlvbiBzZXRWaWV3KCkgeworICAgICAgICB0
b2RvLmNvbnRyb2xsZXIuc2V0Vmlldyhkb2N1bWVudC5sb2NhdGlvbi5oYXNoKTsKKyAgICB9Cisg
ICAgJG9uKHdpbmRvdywgJ2xvYWQnLCBzZXRWaWV3KTsKKyAgICAkb24od2luZG93LCAnaGFzaGNo
YW5nZScsIHNldFZpZXcpOworfSkoKTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5j
aC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy92
YW5pbGxhanMvanMvY29udHJvbGxlci5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3Bl
ZWRvbWV0ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy92YW5pbGxhanMv
anMvY29udHJvbGxlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZmJjNjJhODllNjVlYjdiODE0MDdiY2JkMTdj
ZmIwMjdiNGNlNjg3Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9y
Zy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL3Zhbmls
bGFqcy9qcy9jb250cm9sbGVyLmpzCkBAIC0wLDAgKzEsMjcwIEBACisoZnVuY3Rpb24gKHdpbmRv
dykgeworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIC8qKgorICAgICAqIFRha2VzIGEgbW9kZWwg
YW5kIHZpZXcgYW5kIGFjdHMgYXMgdGhlIGNvbnRyb2xsZXIgYmV0d2VlbiB0aGVtCisgICAgICoK
KyAgICAgKiBAY29uc3RydWN0b3IKKyAgICAgKiBAcGFyYW0ge29iamVjdH0gbW9kZWwgVGhlIG1v
ZGVsIGluc3RhbmNlCisgICAgICogQHBhcmFtIHtvYmplY3R9IHZpZXcgVGhlIHZpZXcgaW5zdGFu
Y2UKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBDb250cm9sbGVyKG1vZGVsLCB2aWV3KSB7CisgICAg
ICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAgICAgc2VsZi5tb2RlbCA9IG1vZGVsOworICAgICAg
ICBzZWxmLnZpZXcgPSB2aWV3OworCisgICAgICAgIHNlbGYudmlldy5iaW5kKCduZXdUb2RvJywg
ZnVuY3Rpb24gKHRpdGxlKSB7CisgICAgICAgICAgICBzZWxmLmFkZEl0ZW0odGl0bGUpOworICAg
ICAgICB9KTsKKworICAgICAgICBzZWxmLnZpZXcuYmluZCgnaXRlbUVkaXQnLCBmdW5jdGlvbiAo
aXRlbSkgeworICAgICAgICAgICAgc2VsZi5lZGl0SXRlbShpdGVtLmlkKTsKKyAgICAgICAgfSk7
CisKKyAgICAgICAgc2VsZi52aWV3LmJpbmQoJ2l0ZW1FZGl0RG9uZScsIGZ1bmN0aW9uIChpdGVt
KSB7CisgICAgICAgICAgICBzZWxmLmVkaXRJdGVtU2F2ZShpdGVtLmlkLCBpdGVtLnRpdGxlKTsK
KyAgICAgICAgfSk7CisKKyAgICAgICAgc2VsZi52aWV3LmJpbmQoJ2l0ZW1FZGl0Q2FuY2VsJywg
ZnVuY3Rpb24gKGl0ZW0pIHsKKyAgICAgICAgICAgIHNlbGYuZWRpdEl0ZW1DYW5jZWwoaXRlbS5p
ZCk7CisgICAgICAgIH0pOworCisgICAgICAgIHNlbGYudmlldy5iaW5kKCdpdGVtUmVtb3ZlJywg
ZnVuY3Rpb24gKGl0ZW0pIHsKKyAgICAgICAgICAgIHNlbGYucmVtb3ZlSXRlbShpdGVtLmlkKTsK
KyAgICAgICAgfSk7CisKKyAgICAgICAgc2VsZi52aWV3LmJpbmQoJ2l0ZW1Ub2dnbGUnLCBmdW5j
dGlvbiAoaXRlbSkgeworICAgICAgICAgICAgc2VsZi50b2dnbGVDb21wbGV0ZShpdGVtLmlkLCBp
dGVtLmNvbXBsZXRlZCk7CisgICAgICAgIH0pOworCisgICAgICAgIHNlbGYudmlldy5iaW5kKCdy
ZW1vdmVDb21wbGV0ZWQnLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBzZWxmLnJlbW92ZUNv
bXBsZXRlZEl0ZW1zKCk7CisgICAgICAgIH0pOworCisgICAgICAgIHNlbGYudmlldy5iaW5kKCd0
b2dnbGVBbGwnLCBmdW5jdGlvbiAoc3RhdHVzKSB7CisgICAgICAgICAgICBzZWxmLnRvZ2dsZUFs
bChzdGF0dXMuY29tcGxldGVkKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgLyoqCisgICAg
ICogTG9hZHMgYW5kIGluaXRpYWxpc2VzIHRoZSB2aWV3CisgICAgICoKKyAgICAgKiBAcGFyYW0g
e3N0cmluZ30gJycgfCAnYWN0aXZlJyB8ICdjb21wbGV0ZWQnCisgICAgICovCisgICAgQ29udHJv
bGxlci5wcm90b3R5cGUuc2V0VmlldyA9IGZ1bmN0aW9uIChsb2NhdGlvbkhhc2gpIHsKKyAgICAg
ICAgdmFyIHJvdXRlID0gbG9jYXRpb25IYXNoLnNwbGl0KCcvJylbMV07CisgICAgICAgIHZhciBw
YWdlID0gcm91dGUgfHwgJyc7CisgICAgICAgIHRoaXMuX3VwZGF0ZUZpbHRlclN0YXRlKHBhZ2Up
OworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBBbiBldmVudCB0byBmaXJlIG9uIGxvYWQuIFdp
bGwgZ2V0IGFsbCBpdGVtcyBhbmQgZGlzcGxheSB0aGVtIGluIHRoZQorICAgICAqIHRvZG8tbGlz
dAorICAgICAqLworICAgIENvbnRyb2xsZXIucHJvdG90eXBlLnNob3dBbGwgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAgICAgc2VsZi5tb2RlbC5yZWFkKGZ1
bmN0aW9uIChkYXRhKSB7CisgICAgICAgICAgICBzZWxmLnZpZXcucmVuZGVyKCdzaG93RW50cmll
cycsIGRhdGEpOworICAgICAgICB9KTsKKyAgICB9OworCisgICAgLyoqCisgICAgICogUmVuZGVy
cyBhbGwgYWN0aXZlIHRhc2tzCisgICAgICovCisgICAgQ29udHJvbGxlci5wcm90b3R5cGUuc2hv
d0FjdGl2ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAg
ICBzZWxmLm1vZGVsLnJlYWQoeyBjb21wbGV0ZWQ6IGZhbHNlIH0sIGZ1bmN0aW9uIChkYXRhKSB7
CisgICAgICAgICAgICBzZWxmLnZpZXcucmVuZGVyKCdzaG93RW50cmllcycsIGRhdGEpOworICAg
ICAgICB9KTsKKyAgICB9OworCisgICAgLyoqCisgICAgICogUmVuZGVycyBhbGwgY29tcGxldGVk
IHRhc2tzCisgICAgICovCisgICAgQ29udHJvbGxlci5wcm90b3R5cGUuc2hvd0NvbXBsZXRlZCA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgICBzZWxmLm1v
ZGVsLnJlYWQoeyBjb21wbGV0ZWQ6IHRydWUgfSwgZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAg
ICAgIHNlbGYudmlldy5yZW5kZXIoJ3Nob3dFbnRyaWVzJywgZGF0YSk7CisgICAgICAgIH0pOwor
ICAgIH07CisKKyAgICAvKioKKyAgICAgKiBBbiBldmVudCB0byBmaXJlIHdoZW5ldmVyIHlvdSB3
YW50IHRvIGFkZCBhbiBpdGVtLiBTaW1wbHkgcGFzcyBpbiB0aGUgZXZlbnQKKyAgICAgKiBvYmpl
Y3QgYW5kIGl0J2xsIGhhbmRsZSB0aGUgRE9NIGluc2VydGlvbiBhbmQgc2F2aW5nIG9mIHRoZSBu
ZXcgaXRlbS4KKyAgICAgKi8KKyAgICBDb250cm9sbGVyLnByb3RvdHlwZS5hZGRJdGVtID0gZnVu
Y3Rpb24gKHRpdGxlKSB7CisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKworICAgICAgICBpZiAo
dGl0bGUudHJpbSgpID09PSAnJykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgc2VsZi5tb2RlbC5jcmVhdGUodGl0bGUsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHNlbGYudmlldy5yZW5kZXIoJ2NsZWFyTmV3VG9kbycpOworICAgICAgICAgICAgc2VsZi5f
ZmlsdGVyKHRydWUpOworICAgICAgICB9KTsKKyAgICB9OworCisgICAgLyoKKyAgICAgKiBUcmln
Z2VycyB0aGUgaXRlbSBlZGl0aW5nIG1vZGUuCisgICAgICovCisgICAgQ29udHJvbGxlci5wcm90
b3R5cGUuZWRpdEl0ZW0gPSBmdW5jdGlvbiAoaWQpIHsKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlz
OworICAgICAgICBzZWxmLm1vZGVsLnJlYWQoaWQsIGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAg
ICAgICBzZWxmLnZpZXcucmVuZGVyKCdlZGl0SXRlbScsIHtpZDogaWQsIHRpdGxlOiBkYXRhWzBd
LnRpdGxlfSk7CisgICAgICAgIH0pOworICAgIH07CisKKyAgICAvKgorICAgICAqIEZpbmlzaGVz
IHRoZSBpdGVtIGVkaXRpbmcgbW9kZSBzdWNjZXNzZnVsbHkuCisgICAgICovCisgICAgQ29udHJv
bGxlci5wcm90b3R5cGUuZWRpdEl0ZW1TYXZlID0gZnVuY3Rpb24gKGlkLCB0aXRsZSkgeworICAg
ICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIHRpdGxlID0gdGl0bGUudHJpbSgpOworCisg
ICAgICAgIGlmICh0aXRsZS5sZW5ndGggIT09IDApIHsKKyAgICAgICAgICAgIHNlbGYubW9kZWwu
dXBkYXRlKGlkLCB7dGl0bGU6IHRpdGxlfSwgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAg
IHNlbGYudmlldy5yZW5kZXIoJ2VkaXRJdGVtRG9uZScsIHtpZDogaWQsIHRpdGxlOiB0aXRsZX0p
OworICAgICAgICAgICAgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzZWxmLnJl
bW92ZUl0ZW0oaWQpOworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogQ2FuY2Vs
cyB0aGUgaXRlbSBlZGl0aW5nIG1vZGUuCisgICAgICovCisgICAgQ29udHJvbGxlci5wcm90b3R5
cGUuZWRpdEl0ZW1DYW5jZWwgPSBmdW5jdGlvbiAoaWQpIHsKKyAgICAgICAgdmFyIHNlbGYgPSB0
aGlzOworICAgICAgICBzZWxmLm1vZGVsLnJlYWQoaWQsIGZ1bmN0aW9uIChkYXRhKSB7CisgICAg
ICAgICAgICBzZWxmLnZpZXcucmVuZGVyKCdlZGl0SXRlbURvbmUnLCB7aWQ6IGlkLCB0aXRsZTog
ZGF0YVswXS50aXRsZX0pOworICAgICAgICB9KTsKKyAgICB9OworCisgICAgLyoqCisgICAgICog
QnkgZ2l2aW5nIGl0IGFuIElEIGl0J2xsIGZpbmQgdGhlIERPTSBlbGVtZW50IG1hdGNoaW5nIHRo
YXQgSUQsCisgICAgICogcmVtb3ZlIGl0IGZyb20gdGhlIERPTSBhbmQgYWxzbyByZW1vdmUgaXQg
ZnJvbSBzdG9yYWdlLgorICAgICAqCisgICAgICogQHBhcmFtIHtudW1iZXJ9IGlkIFRoZSBJRCBv
ZiB0aGUgaXRlbSB0byByZW1vdmUgZnJvbSB0aGUgRE9NIGFuZAorICAgICAqIHN0b3JhZ2UKKyAg
ICAgKi8KKyAgICBDb250cm9sbGVyLnByb3RvdHlwZS5yZW1vdmVJdGVtID0gZnVuY3Rpb24gKGlk
KSB7CisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAgICAgc2VsZi5tb2RlbC5yZW1vdmUo
aWQsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHNlbGYudmlldy5yZW5kZXIoJ3JlbW92ZUl0
ZW0nLCBpZCk7CisgICAgICAgIH0pOworCisgICAgICAgIHNlbGYuX2ZpbHRlcigpOworICAgIH07
CisKKyAgICAvKioKKyAgICAgKiBXaWxsIHJlbW92ZSBhbGwgY29tcGxldGVkIGl0ZW1zIGZyb20g
dGhlIERPTSBhbmQgc3RvcmFnZS4KKyAgICAgKi8KKyAgICBDb250cm9sbGVyLnByb3RvdHlwZS5y
ZW1vdmVDb21wbGV0ZWRJdGVtcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHNlbGYgPSB0
aGlzOworICAgICAgICBzZWxmLm1vZGVsLnJlYWQoeyBjb21wbGV0ZWQ6IHRydWUgfSwgZnVuY3Rp
b24gKGRhdGEpIHsKKyAgICAgICAgICAgIGRhdGEuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgewor
ICAgICAgICAgICAgICAgIHNlbGYucmVtb3ZlSXRlbShpdGVtLmlkKTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICB9KTsKKworICAgICAgICBzZWxmLl9maWx0ZXIoKTsKKyAgICB9OworCisgICAg
LyoqCisgICAgICogR2l2ZSBpdCBhbiBJRCBvZiBhIG1vZGVsIGFuZCBhIGNoZWNrYm94IGFuZCBp
dCB3aWxsIHVwZGF0ZSB0aGUgaXRlbQorICAgICAqIGluIHN0b3JhZ2UgYmFzZWQgb24gdGhlIGNo
ZWNrYm94J3Mgc3RhdGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0ge251bWJlcn0gaWQgVGhlIElE
IG9mIHRoZSBlbGVtZW50IHRvIGNvbXBsZXRlIG9yIHVuY29tcGxldGUKKyAgICAgKiBAcGFyYW0g
e29iamVjdH0gY2hlY2tib3ggVGhlIGNoZWNrYm94IHRvIGNoZWNrIHRoZSBzdGF0ZSBvZiBjb21w
bGV0ZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBvciBub3QKKyAgICAgKiBAcGFy
YW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBzaWxlbnQgUHJldmVudCByZS1maWx0ZXJpbmcgdGhlIHRv
ZG8gaXRlbXMKKyAgICAgKi8KKyAgICBDb250cm9sbGVyLnByb3RvdHlwZS50b2dnbGVDb21wbGV0
ZSA9IGZ1bmN0aW9uIChpZCwgY29tcGxldGVkLCBzaWxlbnQpIHsKKyAgICAgICAgdmFyIHNlbGYg
PSB0aGlzOworICAgICAgICBzZWxmLm1vZGVsLnVwZGF0ZShpZCwgeyBjb21wbGV0ZWQ6IGNvbXBs
ZXRlZCB9LCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBzZWxmLnZpZXcucmVuZGVyKCdlbGVt
ZW50Q29tcGxldGUnLCB7CisgICAgICAgICAgICAgICAgaWQ6IGlkLAorICAgICAgICAgICAgICAg
IGNvbXBsZXRlZDogY29tcGxldGVkCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisKKyAg
ICAgICAgaWYgKCFzaWxlbnQpIHsKKyAgICAgICAgICAgIHNlbGYuX2ZpbHRlcigpOworICAgICAg
ICB9CisgICAgfTsKKworICAgIC8qKgorICAgICAqIFdpbGwgdG9nZ2xlIEFMTCBjaGVja2JveGVz
JyBvbi9vZmYgc3RhdGUgYW5kIGNvbXBsZXRlbmVzcyBvZiBtb2RlbHMuCisgICAgICogSnVzdCBw
YXNzIGluIHRoZSBldmVudCBvYmplY3QuCisgICAgICovCisgICAgQ29udHJvbGxlci5wcm90b3R5
cGUudG9nZ2xlQWxsID0gZnVuY3Rpb24gKGNvbXBsZXRlZCkgeworICAgICAgICB2YXIgc2VsZiA9
IHRoaXM7CisgICAgICAgIHNlbGYubW9kZWwucmVhZCh7IGNvbXBsZXRlZDogIWNvbXBsZXRlZCB9
LCBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICAgICAgZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChp
dGVtKSB7CisgICAgICAgICAgICAgICAgc2VsZi50b2dnbGVDb21wbGV0ZShpdGVtLmlkLCBjb21w
bGV0ZWQsIHRydWUpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworCisgICAgICAgIHNl
bGYuX2ZpbHRlcigpOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBwaWVj
ZXMgb2YgdGhlIHBhZ2Ugd2hpY2ggY2hhbmdlIGRlcGVuZGluZyBvbiB0aGUgcmVtYWluaW5nCisg
ICAgICogbnVtYmVyIG9mIHRvZG9zLgorICAgICAqLworICAgIENvbnRyb2xsZXIucHJvdG90eXBl
Ll91cGRhdGVDb3VudCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwor
ICAgICAgICBzZWxmLm1vZGVsLmdldENvdW50KGZ1bmN0aW9uICh0b2RvcykgeworICAgICAgICAg
ICAgc2VsZi52aWV3LnJlbmRlcigndXBkYXRlRWxlbWVudENvdW50JywgdG9kb3MuYWN0aXZlKTsK
KyAgICAgICAgICAgIHNlbGYudmlldy5yZW5kZXIoJ2NsZWFyQ29tcGxldGVkQnV0dG9uJywgewor
ICAgICAgICAgICAgICAgIGNvbXBsZXRlZDogdG9kb3MuY29tcGxldGVkLAorICAgICAgICAgICAg
ICAgIHZpc2libGU6IHRvZG9zLmNvbXBsZXRlZCA+IDAKKyAgICAgICAgICAgIH0pOworCisgICAg
ICAgICAgICBzZWxmLnZpZXcucmVuZGVyKCd0b2dnbGVBbGwnLCB7Y2hlY2tlZDogdG9kb3MuY29t
cGxldGVkID09PSB0b2Rvcy50b3RhbH0pOworICAgICAgICAgICAgc2VsZi52aWV3LnJlbmRlcign
Y29udGVudEJsb2NrVmlzaWJpbGl0eScsIHt2aXNpYmxlOiB0b2Rvcy50b3RhbCA+IDB9KTsKKyAg
ICAgICAgfSk7CisgICAgfTsKKworICAgIC8qKgorICAgICAqIFJlLWZpbHRlcnMgdGhlIHRvZG8g
aXRlbXMsIGJhc2VkIG9uIHRoZSBhY3RpdmUgcm91dGUuCisgICAgICogQHBhcmFtIHtib29sZWFu
fHVuZGVmaW5lZH0gZm9yY2UgIGZvcmNlcyBhIHJlLXBhaW50aW5nIG9mIHRvZG8gaXRlbXMuCisg
ICAgICovCisgICAgQ29udHJvbGxlci5wcm90b3R5cGUuX2ZpbHRlciA9IGZ1bmN0aW9uIChmb3Jj
ZSkgeworICAgICAgICB2YXIgYWN0aXZlUm91dGUgPSB0aGlzLl9hY3RpdmVSb3V0ZS5jaGFyQXQo
MCkudG9VcHBlckNhc2UoKSArIHRoaXMuX2FjdGl2ZVJvdXRlLnN1YnN0cigxKTsKKworICAgICAg
ICAvLyBVcGRhdGUgdGhlIGVsZW1lbnRzIG9uIHRoZSBwYWdlLCB3aGljaCBjaGFuZ2Ugd2l0aCBl
YWNoIGNvbXBsZXRlZCB0b2RvCisgICAgICAgIHRoaXMuX3VwZGF0ZUNvdW50KCk7CisKKyAgICAg
ICAgLy8gSWYgdGhlIGxhc3QgYWN0aXZlIHJvdXRlIGlzbid0ICJBbGwiLCBvciB3ZSdyZSBzd2l0
Y2hpbmcgcm91dGVzLCB3ZQorICAgICAgICAvLyByZS1jcmVhdGUgdGhlIHRvZG8gaXRlbSBlbGVt
ZW50cywgY2FsbGluZzoKKyAgICAgICAgLy8gICB0aGlzLnNob3dbQWxsfEFjdGl2ZXxDb21wbGV0
ZWRdKCk7CisgICAgICAgIGlmIChmb3JjZSB8fCB0aGlzLl9sYXN0QWN0aXZlUm91dGUgIT09ICdB
bGwnIHx8IHRoaXMuX2xhc3RBY3RpdmVSb3V0ZSAhPT0gYWN0aXZlUm91dGUpIHsKKyAgICAgICAg
ICAgIHRoaXNbJ3Nob3cnICsgYWN0aXZlUm91dGVdKCk7CisgICAgICAgIH0KKworICAgICAgICB0
aGlzLl9sYXN0QWN0aXZlUm91dGUgPSBhY3RpdmVSb3V0ZTsKKyAgICB9OworCisgICAgLyoqCisg
ICAgICogU2ltcGx5IHVwZGF0ZXMgdGhlIGZpbHRlciBuYXYncyBzZWxlY3RlZCBzdGF0ZXMKKyAg
ICAgKi8KKyAgICBDb250cm9sbGVyLnByb3RvdHlwZS5fdXBkYXRlRmlsdGVyU3RhdGUgPSBmdW5j
dGlvbiAoY3VycmVudFBhZ2UpIHsKKyAgICAgICAgLy8gU3RvcmUgYSByZWZlcmVuY2UgdG8gdGhl
IGFjdGl2ZSByb3V0ZSwgYWxsb3dpbmcgdXMgdG8gcmUtZmlsdGVyIHRvZG8KKyAgICAgICAgLy8g
aXRlbXMgYXMgdGhleSBhcmUgbWFya2VkIGNvbXBsZXRlIG9yIGluY29tcGxldGUuCisgICAgICAg
IHRoaXMuX2FjdGl2ZVJvdXRlID0gY3VycmVudFBhZ2U7CisKKyAgICAgICAgaWYgKGN1cnJlbnRQ
YWdlID09PSAnJykgeworICAgICAgICAgICAgdGhpcy5fYWN0aXZlUm91dGUgPSAnQWxsJzsKKyAg
ICAgICAgfQorCisgICAgICAgIHRoaXMuX2ZpbHRlcigpOworCisgICAgICAgIHRoaXMudmlldy5y
ZW5kZXIoJ3NldEZpbHRlcicsIGN1cnJlbnRQYWdlKTsKKyAgICB9OworCisgICAgLy8gRXhwb3J0
IHRvIHdpbmRvdworICAgIHdpbmRvdy5hcHAgPSB3aW5kb3cuYXBwIHx8IHt9OworICAgIHdpbmRv
dy5hcHAuQ29udHJvbGxlciA9IENvbnRyb2xsZXI7Cit9KSh3aW5kb3cpOwpkaWZmIC0tZ2l0IGEv
V2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212
Yy92YW5pbGxhLWV4YW1wbGVzL3ZhbmlsbGFqcy9qcy9oZWxwZXJzLmpzIGIvV2Vic2l0ZXMvYnJv
d3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4
YW1wbGVzL3ZhbmlsbGFqcy9qcy9oZWxwZXJzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJhZjk1NmYwNjRkODgx
OGRmYzVmMTU5MWRjNjY3YzFiYTg2ZmQxMGMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9i
cm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEt
ZXhhbXBsZXMvdmFuaWxsYWpzL2pzL2hlbHBlcnMuanMKQEAgLTAsMCArMSw1MiBAQAorLypnbG9i
YWwgTm9kZUxpc3QgKi8KKyhmdW5jdGlvbiAod2luZG93KSB7CisgICAgJ3VzZSBzdHJpY3QnOwor
CisgICAgLy8gR2V0IGVsZW1lbnQocykgYnkgQ1NTIHNlbGVjdG9yOgorICAgIHdpbmRvdy5xcyA9
IGZ1bmN0aW9uIChzZWxlY3Rvciwgc2NvcGUpIHsKKyAgICAgICAgcmV0dXJuIChzY29wZSB8fCBk
b2N1bWVudCkucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7CisgICAgfTsKKyAgICB3aW5kb3cucXNh
ID0gZnVuY3Rpb24gKHNlbGVjdG9yLCBzY29wZSkgeworICAgICAgICByZXR1cm4gKHNjb3BlIHx8
IGRvY3VtZW50KS5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTsKKyAgICB9OworCisgICAgLy8g
YWRkRXZlbnRMaXN0ZW5lciB3cmFwcGVyOgorICAgIHdpbmRvdy4kb24gPSBmdW5jdGlvbiAodGFy
Z2V0LCB0eXBlLCBjYWxsYmFjaywgdXNlQ2FwdHVyZSkgeworICAgICAgICB0YXJnZXQuYWRkRXZl
bnRMaXN0ZW5lcih0eXBlLCBjYWxsYmFjaywgISF1c2VDYXB0dXJlKTsKKyAgICB9OworCisgICAg
Ly8gQXR0YWNoIGEgaGFuZGxlciB0byBldmVudCBmb3IgYWxsIGVsZW1lbnRzIHRoYXQgbWF0Y2gg
dGhlIHNlbGVjdG9yLAorICAgIC8vIG5vdyBvciBpbiB0aGUgZnV0dXJlLCBiYXNlZCBvbiBhIHJv
b3QgZWxlbWVudAorICAgIHdpbmRvdy4kZGVsZWdhdGUgPSBmdW5jdGlvbiAodGFyZ2V0LCBzZWxl
Y3RvciwgdHlwZSwgaGFuZGxlcikgeworICAgICAgICBmdW5jdGlvbiBkaXNwYXRjaEV2ZW50KGV2
ZW50KSB7CisgICAgICAgICAgICB2YXIgdGFyZ2V0RWxlbWVudCA9IGV2ZW50LnRhcmdldDsKKyAg
ICAgICAgICAgIHZhciBwb3RlbnRpYWxFbGVtZW50cyA9IHdpbmRvdy5xc2Eoc2VsZWN0b3IsIHRh
cmdldCk7CisgICAgICAgICAgICB2YXIgaGFzTWF0Y2ggPSBBcnJheS5wcm90b3R5cGUuaW5kZXhP
Zi5jYWxsKHBvdGVudGlhbEVsZW1lbnRzLCB0YXJnZXRFbGVtZW50KSA+PSAwOworCisgICAgICAg
ICAgICBpZiAoaGFzTWF0Y2gpIHsKKyAgICAgICAgICAgICAgICBoYW5kbGVyLmNhbGwodGFyZ2V0
RWxlbWVudCwgZXZlbnQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8g
aHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvRXZlbnRzL2JsdXIK
KyAgICAgICAgdmFyIHVzZUNhcHR1cmUgPSB0eXBlID09PSAnYmx1cicgfHwgdHlwZSA9PT0gJ2Zv
Y3VzJzsKKworICAgICAgICB3aW5kb3cuJG9uKHRhcmdldCwgdHlwZSwgZGlzcGF0Y2hFdmVudCwg
dXNlQ2FwdHVyZSk7CisgICAgfTsKKworICAgIC8vIEZpbmQgdGhlIGVsZW1lbnQncyBwYXJlbnQg
d2l0aCB0aGUgZ2l2ZW4gdGFnIG5hbWU6CisgICAgLy8gJHBhcmVudChxcygnYScpLCAnZGl2Jyk7
CisgICAgd2luZG93LiRwYXJlbnQgPSBmdW5jdGlvbiAoZWxlbWVudCwgdGFnTmFtZSkgeworICAg
ICAgICBpZiAoIWVsZW1lbnQucGFyZW50Tm9kZSkgeworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIGlmIChlbGVtZW50LnBhcmVudE5vZGUudGFnTmFtZS50b0xvd2VyQ2Fz
ZSgpID09PSB0YWdOYW1lLnRvTG93ZXJDYXNlKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBlbGVt
ZW50LnBhcmVudE5vZGU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHdpbmRvdy4kcGFyZW50
KGVsZW1lbnQucGFyZW50Tm9kZSwgdGFnTmFtZSk7CisgICAgfTsKKworICAgIC8vIEFsbG93IGZv
ciBsb29waW5nIG9uIG5vZGVzIGJ5IGNoYWluaW5nOgorICAgIC8vIHFzYSgnLmZvbycpLmZvckVh
Y2goZnVuY3Rpb24gKCkge30pCisgICAgTm9kZUxpc3QucHJvdG90eXBlLmZvckVhY2ggPSBBcnJh
eS5wcm90b3R5cGUuZm9yRWFjaDsKK30pKHdpbmRvdyk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9i
cm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEt
ZXhhbXBsZXMvdmFuaWxsYWpzL2pzL21vZGVsLmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9y
Zy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL3Zhbmls
bGFqcy9qcy9tb2RlbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kOGE3MzE5MWQyYzJkZjViMjM3MjNhYWE0MTMz
OWRiOGRiYTc5YjRmCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9y
Zy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL3Zhbmls
bGFqcy9qcy9tb2RlbC5qcwpAQCAtMCwwICsxLDEyMCBAQAorKGZ1bmN0aW9uICh3aW5kb3cpIHsK
KyAgICAndXNlIHN0cmljdCc7CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IE1vZGVs
IGluc3RhbmNlIGFuZCBob29rcyB1cCB0aGUgc3RvcmFnZS4KKyAgICAgKgorICAgICAqIEBjb25z
dHJ1Y3RvcgorICAgICAqIEBwYXJhbSB7b2JqZWN0fSBzdG9yYWdlIEEgcmVmZXJlbmNlIHRvIHRo
ZSBjbGllbnQgc2lkZSBzdG9yYWdlIGNsYXNzCisgICAgICovCisgICAgZnVuY3Rpb24gTW9kZWwo
c3RvcmFnZSkgeworICAgICAgICB0aGlzLnN0b3JhZ2UgPSBzdG9yYWdlOworICAgIH0KKworICAg
IC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgdG9kbyBtb2RlbAorICAgICAqCisgICAgICogQHBh
cmFtIHtzdHJpbmd9IFt0aXRsZV0gVGhlIHRpdGxlIG9mIHRoZSB0YXNrCisgICAgICogQHBhcmFt
IHtmdW5jdGlvbn0gW2NhbGxiYWNrXSBUaGUgY2FsbGJhY2sgdG8gZmlyZSBhZnRlciB0aGUgbW9k
ZWwgaXMgY3JlYXRlZAorICAgICAqLworICAgIE1vZGVsLnByb3RvdHlwZS5jcmVhdGUgPSBmdW5j
dGlvbiAodGl0bGUsIGNhbGxiYWNrKSB7CisgICAgICAgIHRpdGxlID0gdGl0bGUgfHwgJyc7Cisg
ICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307CisKKyAgICAgICAg
dmFyIG5ld0l0ZW0gPSB7CisgICAgICAgICAgICB0aXRsZTogdGl0bGUudHJpbSgpLAorICAgICAg
ICAgICAgY29tcGxldGVkOiBmYWxzZQorICAgICAgICB9OworCisgICAgICAgIHRoaXMuc3RvcmFn
ZS5zYXZlKG5ld0l0ZW0sIGNhbGxiYWNrKTsKKyAgICB9OworCisgICAgLyoqCisgICAgICogRmlu
ZHMgYW5kIHJldHVybnMgYSBtb2RlbCBpbiBzdG9yYWdlLiBJZiBubyBxdWVyeSBpcyBnaXZlbiBp
dCdsbCBzaW1wbHkKKyAgICAgKiByZXR1cm4gZXZlcnl0aGluZy4gSWYgeW91IHBhc3MgaW4gYSBz
dHJpbmcgb3IgbnVtYmVyIGl0J2xsIGxvb2sgdGhhdCB1cCBhcworICAgICAqIHRoZSBJRCBvZsKg
dGhlIG1vZGVsIHRvIGZpbmQuIExhc3RseSwgeW91IGNhbiBwYXNzIGl0IGFuIG9iamVjdCB0byBt
YXRjaAorICAgICAqIGFnYWluc3QuCisgICAgICoKKyAgICAgKiBAcGFyYW0ge3N0cmluZ3xudW1i
ZXJ8b2JqZWN0fSBbcXVlcnldIEEgcXVlcnkgdG8gbWF0Y2ggbW9kZWxzIGFnYWluc3QKKyAgICAg
KiBAcGFyYW0ge2Z1bmN0aW9ufSBbY2FsbGJhY2tdIFRoZSBjYWxsYmFjayB0byBmaXJlIGFmdGVy
IHRoZSBtb2RlbCBpcyBmb3VuZAorICAgICAqCisgICAgICogQGV4YW1wbGUKKyAgICAgKiBtb2Rl
bC5yZWFkKDEsIGZ1bmMpOyAvLyBXaWxsIGZpbmQgdGhlIG1vZGVsIHdpdGggYW4gSUQgb2YgMQor
ICAgICAqIG1vZGVsLnJlYWQoJzEnKTsgLy8gU2FtZSBhcyBhYm92ZQorICAgICAqIC8vQmVsb3cg
d2lsbCBmaW5kIGEgbW9kZWwgd2l0aCBmb28gZXF1YWxsaW5nIGJhciBhbmQgaGVsbG8gZXF1YWxs
aW5nIHdvcmxkLgorICAgICAqIG1vZGVsLnJlYWQoeyBmb286ICdiYXInLCBoZWxsbzogJ3dvcmxk
JyB9KTsKKyAgICAgKi8KKyAgICBNb2RlbC5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uIChxdWVy
eSwgY2FsbGJhY2spIHsKKyAgICAgICAgdmFyIHF1ZXJ5VHlwZSA9IHR5cGVvZiBxdWVyeTsKKyAg
ICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTsKKworICAgICAgICBp
ZiAocXVlcnlUeXBlID09PSAnZnVuY3Rpb24nKSB7CisgICAgICAgICAgICBjYWxsYmFjayA9IHF1
ZXJ5OworICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5maW5kQWxsKGNhbGxiYWNrKTsK
KyAgICAgICAgfSBlbHNlIGlmIChxdWVyeVR5cGUgPT09ICdzdHJpbmcnIHx8IHF1ZXJ5VHlwZSA9
PT0gJ251bWJlcicpIHsKKyAgICAgICAgICAgIHF1ZXJ5ID0gcGFyc2VJbnQocXVlcnksIDEwKTsK
KyAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5maW5kKHsgaWQ6IHF1ZXJ5IH0sIGNhbGxiYWNrKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5maW5kKHF1ZXJ5LCBj
YWxsYmFjayk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoqCisgICAgICogVXBkYXRlcyBh
IG1vZGVsIGJ5IGdpdmluZyBpdCBhbiBJRCwgZGF0YSB0byB1cGRhdGUsIGFuZCBhIGNhbGxiYWNr
IHRvIGZpcmUgd2hlbgorICAgICAqIHRoZSB1cGRhdGUgaXMgY29tcGxldGUuCisgICAgICoKKyAg
ICAgKiBAcGFyYW0ge251bWJlcn0gaWQgVGhlIGlkIG9mIHRoZSBtb2RlbCB0byB1cGRhdGUKKyAg
ICAgKiBAcGFyYW0ge29iamVjdH0gZGF0YSBUaGUgcHJvcGVydGllcyB0byB1cGRhdGUgYW5kIHRo
ZWlyIG5ldyB2YWx1ZQorICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxs
YmFjayB0byBmaXJlIHdoZW4gdGhlIHVwZGF0ZSBpcyBjb21wbGV0ZS4KKyAgICAgKi8KKyAgICBN
b2RlbC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGlkLCBkYXRhLCBjYWxsYmFjaykgewor
ICAgICAgICB0aGlzLnN0b3JhZ2Uuc2F2ZShkYXRhLCBjYWxsYmFjaywgaWQpOworICAgIH07CisK
KyAgICAvKioKKyAgICAgKiBSZW1vdmVzIGEgbW9kZWwgZnJvbSBzdG9yYWdlCisgICAgICoKKyAg
ICAgKiBAcGFyYW0ge251bWJlcn0gaWQgVGhlIElEIG9mIHRoZSBtb2RlbCB0byByZW1vdmUKKyAg
ICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gZmlyZSB3aGVu
IHRoZSByZW1vdmFsIGlzIGNvbXBsZXRlLgorICAgICAqLworICAgIE1vZGVsLnByb3RvdHlwZS5y
ZW1vdmUgPSBmdW5jdGlvbiAoaWQsIGNhbGxiYWNrKSB7CisgICAgICAgIHRoaXMuc3RvcmFnZS5y
ZW1vdmUoaWQsIGNhbGxiYWNrKTsKKyAgICB9OworCisgICAgLyoqCisgICAgICogV0FSTklORzog
V2lsbCByZW1vdmUgQUxMIGRhdGEgZnJvbSBzdG9yYWdlLgorICAgICAqCisgICAgICogQHBhcmFt
IHtmdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGZpcmUgd2hlbiB0aGUgc3RvcmFn
ZSBpcyB3aXBlZC4KKyAgICAgKi8KKyAgICBNb2RlbC5wcm90b3R5cGUucmVtb3ZlQWxsID0gZnVu
Y3Rpb24gKGNhbGxiYWNrKSB7CisgICAgICAgIHRoaXMuc3RvcmFnZS5kcm9wKGNhbGxiYWNrKTsK
KyAgICB9OworCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIGNvdW50IG9mIGFsbCB0b2Rvcwor
ICAgICAqLworICAgIE1vZGVsLnByb3RvdHlwZS5nZXRDb3VudCA9IGZ1bmN0aW9uIChjYWxsYmFj
aykgeworICAgICAgICB2YXIgdG9kb3MgPSB7CisgICAgICAgICAgICBhY3RpdmU6IDAsCisgICAg
ICAgICAgICBjb21wbGV0ZWQ6IDAsCisgICAgICAgICAgICB0b3RhbDogMAorICAgICAgICB9Owor
CisgICAgICAgIHRoaXMuc3RvcmFnZS5maW5kQWxsKGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAg
ICAgICBkYXRhLmZvckVhY2goZnVuY3Rpb24gKHRvZG8pIHsKKyAgICAgICAgICAgICAgICBpZiAo
dG9kby5jb21wbGV0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgdG9kb3MuY29tcGxldGVkKys7
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdG9kb3MuYWN0
aXZlKys7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdG9kb3MudG90YWwr
KzsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgY2FsbGJhY2sodG9kb3MpOworICAgICAg
ICB9KTsKKyAgICB9OworCisgICAgLy8gRXhwb3J0IHRvIHdpbmRvdworICAgIHdpbmRvdy5hcHAg
PSB3aW5kb3cuYXBwIHx8IHt9OworICAgIHdpbmRvdy5hcHAuTW9kZWwgPSBNb2RlbDsKK30pKHdp
bmRvdyk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVy
Mi4xL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvdmFuaWxsYWpzL2pzL3N0b3Jl
LmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMv
dG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL3ZhbmlsbGFqcy9qcy9zdG9yZS5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li43YjI4Y2NkZmE3MmE4YWVlZWMyYTViMzNiYTBhMWFmMWYwYTlmOTNiCi0tLSAvZGV2L251bGwK
KysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMv
dG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL3ZhbmlsbGFqcy9qcy9zdG9yZS5qcwpAQCAtMCwwICsx
LDE0NCBAQAorLypqc2hpbnQgZXFlcWVxOmZhbHNlICovCisoZnVuY3Rpb24gKHdpbmRvdykgewor
ICAgICd1c2Ugc3RyaWN0JzsKKworICAgIHZhciBNZW1vcnlTdG9yYWdlID0ge307CisgICAgdmFy
IElEID0gMTsKKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgY2xpZW50IHNpZGUgc3Rv
cmFnZSBvYmplY3QgYW5kIHdpbGwgY3JlYXRlIGFuIGVtcHR5CisgICAgICogY29sbGVjdGlvbiBp
ZiBubyBjb2xsZWN0aW9uIGFscmVhZHkgZXhpc3RzLgorICAgICAqCisgICAgICogQHBhcmFtIHtz
dHJpbmd9IG5hbWUgVGhlIG5hbWUgb2Ygb3VyIERCIHdlIHdhbnQgdG8gdXNlCisgICAgICogQHBh
cmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgT3VyIGZha2UgREIgdXNlcyBjYWxsYmFja3MgYmVjYXVz
ZSBpbgorICAgICAqIHJlYWwgbGlmZSB5b3UgcHJvYmFibHkgd291bGQgYmUgbWFraW5nIEFKQVgg
Y2FsbHMKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBTdG9yZShuYW1lLCBjYWxsYmFjaykgeworICAg
ICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9OworCisgICAgICAgIHRo
aXMuX2RiTmFtZSA9IG5hbWU7CisKKyAgICAgICAgaWYgKCFNZW1vcnlTdG9yYWdlW25hbWVdKSB7
CisgICAgICAgICAgICB2YXIgZGF0YSA9IHsKKyAgICAgICAgICAgICAgICB0b2RvczogW10KKyAg
ICAgICAgICAgIH07CisKKyAgICAgICAgICAgIE1lbW9yeVN0b3JhZ2VbbmFtZV0gPSBKU09OLnN0
cmluZ2lmeShkYXRhKTsKKyAgICAgICAgfQorCisgICAgICAgIGNhbGxiYWNrLmNhbGwodGhpcywg
SlNPTi5wYXJzZShNZW1vcnlTdG9yYWdlW25hbWVdKSk7CisgICAgfQorCisgICAgLyoqCisgICAg
ICogRmluZHMgaXRlbXMgYmFzZWQgb24gYSBxdWVyeSBnaXZlbiBhcyBhIEpTIG9iamVjdAorICAg
ICAqCisgICAgICogQHBhcmFtIHtvYmplY3R9IHF1ZXJ5IFRoZSBxdWVyeSB0byBtYXRjaCBhZ2Fp
bnN0IChpLmUuIHtmb286ICdiYXInfSkKKyAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFj
ayAgICAgVGhlIGNhbGxiYWNrIHRvIGZpcmUgd2hlbiB0aGUgcXVlcnkgaGFzCisgICAgICogY29t
cGxldGVkIHJ1bm5pbmcKKyAgICAgKgorICAgICAqIEBleGFtcGxlCisgICAgICogZGIuZmluZCh7
Zm9vOiAnYmFyJywgaGVsbG86ICd3b3JsZCd9LCBmdW5jdGlvbiAoZGF0YSkgeworICAgICAqICAg
ICAvLyBkYXRhIHdpbGwgcmV0dXJuIGFueSBpdGVtcyB0aGF0IGhhdmUgZm9vOiBiYXIgYW5kCisg
ICAgICogICAgIC8vIGhlbGxvOiB3b3JsZCBpbiB0aGVpciBwcm9wZXJ0aWVzCisgICAgICogfSk7
CisgICAgICovCisgICAgU3RvcmUucHJvdG90eXBlLmZpbmQgPSBmdW5jdGlvbiAocXVlcnksIGNh
bGxiYWNrKSB7CisgICAgICAgIGlmICghY2FsbGJhY2spIHsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIHZhciB0b2RvcyA9IEpTT04ucGFyc2UoTWVtb3J5U3RvcmFn
ZVt0aGlzLl9kYk5hbWVdKS50b2RvczsKKworICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXMsIHRv
ZG9zLmZpbHRlcihmdW5jdGlvbiAodG9kbykgeworICAgICAgICAgICAgZm9yICh2YXIgcSBpbiBx
dWVyeSkgeworICAgICAgICAgICAgICAgIGlmIChxdWVyeVtxXSAhPT0gdG9kb1txXSkgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0pKTsKKyAgICB9Owor
CisgICAgLyoqCisgICAgICogV2lsbCByZXRyaWV2ZSBhbGwgZGF0YSBmcm9tIHRoZSBjb2xsZWN0
aW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJh
Y2sgdG8gZmlyZSB1cG9uIHJldHJpZXZpbmcgZGF0YQorICAgICAqLworICAgIFN0b3JlLnByb3Rv
dHlwZS5maW5kQWxsID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CisgICAgICAgIGNhbGxiYWNrID0g
Y2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307CisgICAgICAgIGNhbGxiYWNrLmNhbGwodGhpcywg
SlNPTi5wYXJzZShNZW1vcnlTdG9yYWdlW3RoaXMuX2RiTmFtZV0pLnRvZG9zKTsKKyAgICB9Owor
CisgICAgLyoqCisgICAgICogV2lsbCBzYXZlIHRoZSBnaXZlbiBkYXRhIHRvIHRoZSBEQi4gSWYg
bm8gaXRlbSBleGlzdHMgaXQgd2lsbCBjcmVhdGUgYSBuZXcKKyAgICAgKiBpdGVtLCBvdGhlcndp
c2UgaXQnbGwgc2ltcGx5IHVwZGF0ZSBhbiBleGlzdGluZyBpdGVtJ3MgcHJvcGVydGllcworICAg
ICAqCisgICAgICogQHBhcmFtIHtvYmplY3R9IHVwZGF0ZURhdGEgVGhlIGRhdGEgdG8gc2F2ZSBi
YWNrIGludG8gdGhlIERCCisgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNh
bGxiYWNrIHRvIGZpcmUgYWZ0ZXIgc2F2aW5nCisgICAgICogQHBhcmFtIHtudW1iZXJ9IGlkIEFu
IG9wdGlvbmFsIHBhcmFtIHRvIGVudGVyIGFuIElEIG9mIGFuIGl0ZW0gdG8gdXBkYXRlCisgICAg
ICovCisgICAgU3RvcmUucHJvdG90eXBlLnNhdmUgPSBmdW5jdGlvbiAodXBkYXRlRGF0YSwgY2Fs
bGJhY2ssIGlkKSB7CisgICAgICAgIHZhciBkYXRhID0gSlNPTi5wYXJzZShNZW1vcnlTdG9yYWdl
W3RoaXMuX2RiTmFtZV0pOworICAgICAgICB2YXIgdG9kb3MgPSBkYXRhLnRvZG9zOworCisgICAg
ICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307CisKKyAgICAgICAgLy8g
SWYgYW4gSUQgd2FzIGFjdHVhbGx5IGdpdmVuLCBmaW5kIHRoZSBpdGVtIGFuZCB1cGRhdGUgZWFj
aCBwcm9wZXJ0eQorICAgICAgICBpZiAoaWQpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgdG9kb3MubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAodG9kb3NbaV0u
aWQgPT09IGlkKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiB1cGRhdGVE
YXRhKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0b2Rvc1tpXVtrZXldID0gdXBkYXRlRGF0
YVtrZXldOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgTWVtb3J5
U3RvcmFnZVt0aGlzLl9kYk5hbWVdID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7CisgICAgICAgICAg
ICBjYWxsYmFjay5jYWxsKHRoaXMsIHRvZG9zKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIC8vIEdlbmVyYXRlIGFuIElECisgICAgICAgICAgICB1cGRhdGVEYXRhLmlkID0gSUQrKzsK
KworICAgICAgICAgICAgdG9kb3MucHVzaCh1cGRhdGVEYXRhKTsKKyAgICAgICAgICAgIE1lbW9y
eVN0b3JhZ2VbdGhpcy5fZGJOYW1lXSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpOworICAgICAgICAg
ICAgY2FsbGJhY2suY2FsbCh0aGlzLCBbdXBkYXRlRGF0YV0pOworICAgICAgICB9CisgICAgfTsK
KworICAgIC8qKgorICAgICAqIFdpbGwgcmVtb3ZlIGFuIGl0ZW0gZnJvbSB0aGUgU3RvcmUgYmFz
ZWQgb24gaXRzIElECisgICAgICoKKyAgICAgKiBAcGFyYW0ge251bWJlcn0gaWQgVGhlIElEIG9m
IHRoZSBpdGVtIHlvdSB3YW50IHRvIHJlbW92ZQorICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNh
bGxiYWNrIFRoZSBjYWxsYmFjayB0byBmaXJlIGFmdGVyIHNhdmluZworICAgICAqLworICAgIFN0
b3JlLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoaWQsIGNhbGxiYWNrKSB7CisgICAgICAg
IHZhciBkYXRhID0gSlNPTi5wYXJzZShNZW1vcnlTdG9yYWdlW3RoaXMuX2RiTmFtZV0pOworICAg
ICAgICB2YXIgdG9kb3MgPSBkYXRhLnRvZG9zOworCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgdG9kb3MubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmICh0b2Rvc1tpXS5pZCA9PSBp
ZCkgeworICAgICAgICAgICAgICAgIHRvZG9zLnNwbGljZShpLCAxKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIE1lbW9yeVN0b3Jh
Z2VbdGhpcy5fZGJOYW1lXSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpOworICAgICAgICBjYWxsYmFj
ay5jYWxsKHRoaXMsIHRvZG9zKTsKKyAgICB9OworCisgICAgLyoqCisgICAgICogV2lsbCBkcm9w
IGFsbCBzdG9yYWdlIGFuZCBzdGFydCBmcmVzaAorICAgICAqCisgICAgICogQHBhcmFtIHtmdW5j
dGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGZpcmUgYWZ0ZXIgZHJvcHBpbmcgdGhlIGRh
dGEKKyAgICAgKi8KKyAgICBTdG9yZS5wcm90b3R5cGUuZHJvcCA9IGZ1bmN0aW9uIChjYWxsYmFj
aykgeworICAgICAgICB2YXIgZGF0YSA9IHt0b2RvczogW119OworICAgICAgICBNZW1vcnlTdG9y
YWdlW3RoaXMuX2RiTmFtZV0gPSBKU09OLnN0cmluZ2lmeShkYXRhKTsKKyAgICAgICAgY2FsbGJh
Y2suY2FsbCh0aGlzLCBkYXRhLnRvZG9zKTsKKyAgICB9OworCisgICAgLy8gRXhwb3J0IHRvIHdp
bmRvdworICAgIHdpbmRvdy5hcHAgPSB3aW5kb3cuYXBwIHx8IHt9OworICAgIHdpbmRvdy5hcHAu
U3RvcmUgPSBTdG9yZTsKK30pKHdpbmRvdyk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2Vy
YmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBs
ZXMvdmFuaWxsYWpzL2pzL3RlbXBsYXRlLmpzIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9T
cGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL3ZhbmlsbGFq
cy9qcy90ZW1wbGF0ZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MzcyNGM2NTI5NTJiNTU3YmI2MjFjYTBiYTBk
YmEwNWZkNWY5ODAwCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9y
Zy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL3Zhbmls
bGFqcy9qcy90ZW1wbGF0ZS5qcwpAQCAtMCwwICsxLDExNCBAQAorLypqc2hpbnQgbGF4YnJlYWs6
dHJ1ZSAqLworKGZ1bmN0aW9uICh3aW5kb3cpIHsKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICB2
YXIgaHRtbEVzY2FwZXMgPSB7CisgICAgICAgICcmJzogJyZhbXA7JywKKyAgICAgICAgJzwnOiAn
Jmx0OycsCisgICAgICAgICc+JzogJyZndDsnLAorICAgICAgICAnIic6ICcmcXVvdDsnLAorICAg
ICAgICAnXCcnOiAnJiN4Mjc7JywKKyAgICAgICAgJ2AnOiAnJiN4NjA7JworICAgIH07CisKKyAg
ICB2YXIgZXNjYXBlSHRtbENoYXIgPSBmdW5jdGlvbiAoY2hyKSB7CisgICAgICAgIHJldHVybiBo
dG1sRXNjYXBlc1tjaHJdOworICAgIH07CisKKyAgICB2YXIgcmVVbmVzY2FwZWRIdG1sID0gL1sm
PD4iJ2BdL2c7CisgICAgdmFyIHJlSGFzVW5lc2NhcGVkSHRtbCA9IG5ldyBSZWdFeHAocmVVbmVz
Y2FwZWRIdG1sLnNvdXJjZSk7CisKKyAgICB2YXIgZXNjYXBlID0gZnVuY3Rpb24gKHN0cmluZykg
eworICAgICAgICByZXR1cm4gKHN0cmluZyAmJiByZUhhc1VuZXNjYXBlZEh0bWwudGVzdChzdHJp
bmcpKQorICAgICAgICAgICAgPyBzdHJpbmcucmVwbGFjZShyZVVuZXNjYXBlZEh0bWwsIGVzY2Fw
ZUh0bWxDaGFyKQorICAgICAgICAgICAgOiBzdHJpbmc7CisgICAgfTsKKworICAgIC8qKgorICAg
ICAqIFNldHMgdXAgZGVmYXVsdHMgZm9yIGFsbCB0aGUgVGVtcGxhdGUgbWV0aG9kcyBzdWNoIGFz
IGEgZGVmYXVsdCB0ZW1wbGF0ZQorICAgICAqCisgICAgICogQGNvbnN0cnVjdG9yCisgICAgICov
CisgICAgZnVuY3Rpb24gVGVtcGxhdGUoKSB7CisgICAgICAgIHRoaXMuZGVmYXVsdFRlbXBsYXRl
CisgICAgICAgID0gICAgJzxsaSBkYXRhLWlkPSJ7e2lkfX0iIGNsYXNzPSJ7e2NvbXBsZXRlZH19
Ij4nCisgICAgICAgICsgICAgICAgICc8ZGl2IGNsYXNzPSJ2aWV3Ij4nCisgICAgICAgICsgICAg
ICAgICAgICAnPGlucHV0IGNsYXNzPSJ0b2dnbGUiIHR5cGU9ImNoZWNrYm94IiB7e2NoZWNrZWR9
fT4nCisgICAgICAgICsgICAgICAgICAgICAnPGxhYmVsPnt7dGl0bGV9fTwvbGFiZWw+JworICAg
ICAgICArICAgICAgICAgICAgJzxidXR0b24gY2xhc3M9ImRlc3Ryb3kiPjwvYnV0dG9uPicKKyAg
ICAgICAgKyAgICAgICAgJzwvZGl2PicKKyAgICAgICAgKyAgICAnPC9saT4nOworICAgIH0KKwor
ICAgIC8qKgorICAgICAqIENyZWF0ZXMgYW4gPGxpPiBIVE1MIHN0cmluZyBhbmQgcmV0dXJucyBp
dCBmb3IgcGxhY2VtZW50IGluIHlvdXIgYXBwLgorICAgICAqCisgICAgICogTk9URTogSW4gcmVh
bCBsaWZlIHlvdSBzaG91bGQgYmUgdXNpbmcgYSB0ZW1wbGF0aW5nIGVuZ2luZSBzdWNoIGFzIE11
c3RhY2hlCisgICAgICogb3IgSGFuZGxlYmFycywgaG93ZXZlciwgdGhpcyBpcyBhIHZhbmlsbGEg
SlMgZXhhbXBsZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkYXRhIFRoZSBvYmpl
Y3QgY29udGFpbmluZyBrZXlzIHlvdSB3YW50IHRvIGZpbmQgaW4gdGhlCisgICAgICogICAgICAg
ICAgICAgICAgICAgICAgdGVtcGxhdGUgdG8gcmVwbGFjZS4KKyAgICAgKiBAcmV0dXJucyB7c3Ry
aW5nfSBIVE1MIFN0cmluZyBvZiBhbiA8bGk+IGVsZW1lbnQKKyAgICAgKgorICAgICAqIEBleGFt
cGxlCisgICAgICogdmlldy5zaG93KHsKKyAgICAgKiAgICBpZDogMSwKKyAgICAgKiAgICB0aXRs
ZTogIkhlbGxvIFdvcmxkIiwKKyAgICAgKiAgICBjb21wbGV0ZWQ6IDAsCisgICAgICogfSk7Cisg
ICAgICovCisgICAgVGVtcGxhdGUucHJvdG90eXBlLnNob3cgPSBmdW5jdGlvbiAoZGF0YSkgewor
ICAgICAgICB2YXIgaSwgbDsKKyAgICAgICAgdmFyIHZpZXcgPSAnJzsKKworICAgICAgICBmb3Ig
KGkgPSAwLCBsID0gZGF0YS5sZW5ndGg7IGkgPCBsOyBpKyspIHsKKyAgICAgICAgICAgIHZhciB0
ZW1wbGF0ZSA9IHRoaXMuZGVmYXVsdFRlbXBsYXRlOworICAgICAgICAgICAgdmFyIGNvbXBsZXRl
ZCA9ICcnOworICAgICAgICAgICAgdmFyIGNoZWNrZWQgPSAnJzsKKworICAgICAgICAgICAgaWYg
KGRhdGFbaV0uY29tcGxldGVkKSB7CisgICAgICAgICAgICAgICAgY29tcGxldGVkID0gJ2NvbXBs
ZXRlZCc7CisgICAgICAgICAgICAgICAgY2hlY2tlZCA9ICdjaGVja2VkJzsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZS5yZXBsYWNlKCd7e2lkfX0nLCBk
YXRhW2ldLmlkKTsKKyAgICAgICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGUucmVwbGFjZSgne3t0
aXRsZX19JywgZXNjYXBlKGRhdGFbaV0udGl0bGUpKTsKKyAgICAgICAgICAgIHRlbXBsYXRlID0g
dGVtcGxhdGUucmVwbGFjZSgne3tjb21wbGV0ZWR9fScsIGNvbXBsZXRlZCk7CisgICAgICAgICAg
ICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnJlcGxhY2UoJ3t7Y2hlY2tlZH19JywgY2hlY2tlZCk7CisK
KyAgICAgICAgICAgIHZpZXcgPSB2aWV3ICsgdGVtcGxhdGU7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gdmlldzsKKyAgICB9OworCisgICAgLyoqCisgICAgICogRGlzcGxheXMgYSBjb3Vu
dGVyIG9mIGhvdyBtYW55IHRvIGRvcyBhcmUgbGVmdCB0byBjb21wbGV0ZQorICAgICAqCisgICAg
ICogQHBhcmFtIHtudW1iZXJ9IGFjdGl2ZVRvZG9zIFRoZSBudW1iZXIgb2YgYWN0aXZlIHRvZG9z
LgorICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFN0cmluZyBjb250YWluaW5nIHRoZSBjb3VudAor
ICAgICAqLworICAgIFRlbXBsYXRlLnByb3RvdHlwZS5pdGVtQ291bnRlciA9IGZ1bmN0aW9uIChh
Y3RpdmVUb2RvcykgeworICAgICAgICB2YXIgcGx1cmFsID0gYWN0aXZlVG9kb3MgPT09IDEgPyAn
JyA6ICdzJzsKKworICAgICAgICByZXR1cm4gJzxzdHJvbmc+JyArIGFjdGl2ZVRvZG9zICsgJzwv
c3Ryb25nPiBpdGVtJyArIHBsdXJhbCArICcgbGVmdCc7CisgICAgfTsKKworICAgIC8qKgorICAg
ICAqIFVwZGF0ZXMgdGhlIHRleHQgd2l0aGluIHRoZSAiQ2xlYXIgY29tcGxldGVkIiBidXR0b24K
KyAgICAgKgorICAgICAqIEBwYXJhbSAge1t0eXBlXX0gY29tcGxldGVkVG9kb3MgVGhlIG51bWJl
ciBvZiBjb21wbGV0ZWQgdG9kb3MuCisgICAgICogQHJldHVybnMge3N0cmluZ30gU3RyaW5nIGNv
bnRhaW5pbmcgdGhlIGNvdW50CisgICAgICovCisgICAgVGVtcGxhdGUucHJvdG90eXBlLmNsZWFy
Q29tcGxldGVkQnV0dG9uID0gZnVuY3Rpb24gKGNvbXBsZXRlZFRvZG9zKSB7CisgICAgICAgIGlm
IChjb21wbGV0ZWRUb2RvcyA+IDApIHsKKyAgICAgICAgICAgIHJldHVybiAnQ2xlYXIgY29tcGxl
dGVkJzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiAnJzsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICAvLyBFeHBvcnQgdG8gd2luZG93CisgICAgd2luZG93LmFwcCA9IHdp
bmRvdy5hcHAgfHwge307CisgICAgd2luZG93LmFwcC5UZW1wbGF0ZSA9IFRlbXBsYXRlOworfSko
d2luZG93KTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0
ZXIyLjEvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy92YW5pbGxhanMvanMvdmll
dy5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvU3BlZWRvbWV0ZXIyLjEvcmVzb3VyY2Vz
L3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy92YW5pbGxhanMvanMvdmlldy5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42OGRlODMwNTEzNmQxOGM5MGJkNjBhNjdkYmI1ZjU0MzVhNzExMmRiCi0tLSAvZGV2L251bGwK
KysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJjZXMv
dG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL3ZhbmlsbGFqcy9qcy92aWV3LmpzCkBAIC0wLDAgKzEs
MjE5IEBACisvKmdsb2JhbCBxcywgcXNhLCAkb24sICRwYXJlbnQsICRkZWxlZ2F0ZSAqLworCiso
ZnVuY3Rpb24gKHdpbmRvdykgeworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIC8qKgorICAgICAg
ICAgKiBWaWV3IHRoYXQgYWJzdHJhY3RzIGF3YXkgdGhlIGJyb3dzZXIncyBET00gY29tcGxldGVs
eS4KKyAgICAgICAgICogSXQgaGFzIHR3byBzaW1wbGUgZW50cnkgcG9pbnRzOgorICAgICAgICAg
KgorICAgICAgICAgKiAgIC0gYmluZChldmVudE5hbWUsIGhhbmRsZXIpCisgICAgICAgICAqICAg
ICBUYWtlcyBhIHRvZG8gYXBwbGljYXRpb24gZXZlbnQgYW5kIHJlZ2lzdGVycyB0aGUgaGFuZGxl
cgorICAgICAgICAgKiAgIC0gcmVuZGVyKGNvbW1hbmQsIHBhcmFtZXRlck9iamVjdCkKKyAgICAg
ICAgICogICAgIFJlbmRlcnMgdGhlIGdpdmVuIGNvbW1hbmQgd2l0aCB0aGUgb3B0aW9ucworICAg
ICAgICAgKi8KKyAgICBmdW5jdGlvbiBWaWV3KHRlbXBsYXRlKSB7CisgICAgICAgIHRoaXMudGVt
cGxhdGUgPSB0ZW1wbGF0ZTsKKworICAgICAgICB0aGlzLkVOVEVSX0tFWSA9IDEzOworICAgICAg
ICB0aGlzLkVTQ0FQRV9LRVkgPSAyNzsKKworICAgICAgICB0aGlzLiR0b2RvTGlzdCA9IHFzKCcu
dG9kby1saXN0Jyk7CisgICAgICAgIHRoaXMuJHRvZG9JdGVtQ291bnRlciA9IHFzKCcudG9kby1j
b3VudCcpOworICAgICAgICB0aGlzLiRjbGVhckNvbXBsZXRlZCA9IHFzKCcuY2xlYXItY29tcGxl
dGVkJyk7CisgICAgICAgIHRoaXMuJG1haW4gPSBxcygnLm1haW4nKTsKKyAgICAgICAgdGhpcy4k
Zm9vdGVyID0gcXMoJy5mb290ZXInKTsKKyAgICAgICAgdGhpcy4kdG9nZ2xlQWxsID0gcXMoJy50
b2dnbGUtYWxsJyk7CisgICAgICAgIHRoaXMuJG5ld1RvZG8gPSBxcygnLm5ldy10b2RvJyk7Cisg
ICAgfQorCisgICAgVmlldy5wcm90b3R5cGUuX3JlbW92ZUl0ZW0gPSBmdW5jdGlvbiAoaWQpIHsK
KyAgICAgICAgdmFyIGVsZW0gPSBxcygnW2RhdGEtaWQ9IicgKyBpZCArICciXScpOworCisgICAg
ICAgIGlmIChlbGVtKSB7CisgICAgICAgICAgICB0aGlzLiR0b2RvTGlzdC5yZW1vdmVDaGlsZChl
bGVtKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBWaWV3LnByb3RvdHlwZS5fY2xlYXJDb21w
bGV0ZWRCdXR0b24gPSBmdW5jdGlvbiAoY29tcGxldGVkQ291bnQsIHZpc2libGUpIHsKKyAgICAg
ICAgdGhpcy4kY2xlYXJDb21wbGV0ZWQuaW5uZXJIVE1MID0gdGhpcy50ZW1wbGF0ZS5jbGVhckNv
bXBsZXRlZEJ1dHRvbihjb21wbGV0ZWRDb3VudCk7CisgICAgICAgIHRoaXMuJGNsZWFyQ29tcGxl
dGVkLnN0eWxlLmRpc3BsYXkgPSB2aXNpYmxlID8gJ2Jsb2NrJyA6ICdub25lJzsKKyAgICB9Owor
CisgICAgVmlldy5wcm90b3R5cGUuX3NldEZpbHRlciA9IGZ1bmN0aW9uIChjdXJyZW50UGFnZSkg
eworICAgICAgICBxcygnLmZpbHRlcnMgLnNlbGVjdGVkJykuY2xhc3NOYW1lID0gJyc7CisgICAg
ICAgIHFzKCcuZmlsdGVycyBbaHJlZj0iIy8nICsgY3VycmVudFBhZ2UgKyAnIl0nKS5jbGFzc05h
bWUgPSAnc2VsZWN0ZWQnOworICAgIH07CisKKyAgICBWaWV3LnByb3RvdHlwZS5fZWxlbWVudENv
bXBsZXRlID0gZnVuY3Rpb24gKGlkLCBjb21wbGV0ZWQpIHsKKyAgICAgICAgdmFyIGxpc3RJdGVt
ID0gcXMoJ1tkYXRhLWlkPSInICsgaWQgKyAnIl0nKTsKKworICAgICAgICBpZiAoIWxpc3RJdGVt
KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBsaXN0SXRlbS5j
bGFzc05hbWUgPSBjb21wbGV0ZWQgPyAnY29tcGxldGVkJyA6ICcnOworCisgICAgICAgIC8vIElu
IGNhc2UgaXQgd2FzIHRvZ2dsZWQgZnJvbSBhbiBldmVudCBhbmQgbm90IGJ5IGNsaWNraW5nIHRo
ZSBjaGVja2JveAorICAgICAgICBxcygnaW5wdXQnLCBsaXN0SXRlbSkuY2hlY2tlZCA9IGNvbXBs
ZXRlZDsKKyAgICB9OworCisgICAgVmlldy5wcm90b3R5cGUuX2VkaXRJdGVtID0gZnVuY3Rpb24g
KGlkLCB0aXRsZSkgeworICAgICAgICB2YXIgbGlzdEl0ZW0gPSBxcygnW2RhdGEtaWQ9IicgKyBp
ZCArICciXScpOworCisgICAgICAgIGlmICghbGlzdEl0ZW0pIHsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGxpc3RJdGVtLmNsYXNzTmFtZSA9IGxpc3RJdGVtLmNs
YXNzTmFtZSArICcgZWRpdGluZyc7CisKKyAgICAgICAgdmFyIGlucHV0ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnaW5wdXQnKTsKKyAgICAgICAgaW5wdXQuY2xhc3NOYW1lID0gJ2VkaXQnOwor
CisgICAgICAgIGxpc3RJdGVtLmFwcGVuZENoaWxkKGlucHV0KTsKKyAgICAgICAgaW5wdXQuZm9j
dXMoKTsKKyAgICAgICAgaW5wdXQudmFsdWUgPSB0aXRsZTsKKyAgICB9OworCisgICAgVmlldy5w
cm90b3R5cGUuX2VkaXRJdGVtRG9uZSA9IGZ1bmN0aW9uIChpZCwgdGl0bGUpIHsKKyAgICAgICAg
dmFyIGxpc3RJdGVtID0gcXMoJ1tkYXRhLWlkPSInICsgaWQgKyAnIl0nKTsKKworICAgICAgICBp
ZiAoIWxpc3RJdGVtKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICB2YXIgaW5wdXQgPSBxcygnaW5wdXQuZWRpdCcsIGxpc3RJdGVtKTsKKyAgICAgICAgbGlzdEl0
ZW0ucmVtb3ZlQ2hpbGQoaW5wdXQpOworCisgICAgICAgIGxpc3RJdGVtLmNsYXNzTmFtZSA9IGxp
c3RJdGVtLmNsYXNzTmFtZS5yZXBsYWNlKCdlZGl0aW5nJywgJycpOworCisgICAgICAgIHFzYSgn
bGFiZWwnLCBsaXN0SXRlbSkuZm9yRWFjaChmdW5jdGlvbiAobGFiZWwpIHsKKyAgICAgICAgICAg
IGxhYmVsLnRleHRDb250ZW50ID0gdGl0bGU7CisgICAgICAgIH0pOworICAgIH07CisKKyAgICBW
aWV3LnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAodmlld0NtZCwgcGFyYW1ldGVyKSB7Cisg
ICAgICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAgICAgdmFyIHZpZXdDb21tYW5kcyA9IHsKKyAg
ICAgICAgICAgIHNob3dFbnRyaWVzOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgc2Vs
Zi4kdG9kb0xpc3QuaW5uZXJIVE1MID0gc2VsZi50ZW1wbGF0ZS5zaG93KHBhcmFtZXRlcik7Cisg
ICAgICAgICAgICB9LAorICAgICAgICAgICAgcmVtb3ZlSXRlbTogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgICAgIHNlbGYuX3JlbW92ZUl0ZW0ocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0s
CisgICAgICAgICAgICB1cGRhdGVFbGVtZW50Q291bnQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgICAgICBzZWxmLiR0b2RvSXRlbUNvdW50ZXIuaW5uZXJIVE1MID0gc2VsZi50ZW1wbGF0ZS5p
dGVtQ291bnRlcihwYXJhbWV0ZXIpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGNsZWFy
Q29tcGxldGVkQnV0dG9uOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgc2VsZi5fY2xl
YXJDb21wbGV0ZWRCdXR0b24ocGFyYW1ldGVyLmNvbXBsZXRlZCwgcGFyYW1ldGVyLnZpc2libGUp
OworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGNvbnRlbnRCbG9ja1Zpc2liaWxpdHk6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBzZWxmLiRtYWluLnN0eWxlLmRpc3BsYXkgPSBz
ZWxmLiRmb290ZXIuc3R5bGUuZGlzcGxheSA9IHBhcmFtZXRlci52aXNpYmxlID8gJ2Jsb2NrJyA6
ICdub25lJzsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB0b2dnbGVBbGw6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgICAgICBzZWxmLiR0b2dnbGVBbGwuY2hlY2tlZCA9IHBhcmFtZXRl
ci5jaGVja2VkOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHNldEZpbHRlcjogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgICAgIHNlbGYuX3NldEZpbHRlcihwYXJhbWV0ZXIpOworICAg
ICAgICAgICAgfSwKKyAgICAgICAgICAgIGNsZWFyTmV3VG9kbzogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgICAgIHNlbGYuJG5ld1RvZG8udmFsdWUgPSAnJzsKKyAgICAgICAgICAgIH0sCisg
ICAgICAgICAgICBlbGVtZW50Q29tcGxldGU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAg
ICBzZWxmLl9lbGVtZW50Q29tcGxldGUocGFyYW1ldGVyLmlkLCBwYXJhbWV0ZXIuY29tcGxldGVk
KTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBlZGl0SXRlbTogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgICAgIHNlbGYuX2VkaXRJdGVtKHBhcmFtZXRlci5pZCwgcGFyYW1ldGVyLnRp
dGxlKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBlZGl0SXRlbURvbmU6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgICAgICBzZWxmLl9lZGl0SXRlbURvbmUocGFyYW1ldGVyLmlkLCBw
YXJhbWV0ZXIudGl0bGUpOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHZp
ZXdDb21tYW5kc1t2aWV3Q21kXSgpOworICAgIH07CisKKyAgICBWaWV3LnByb3RvdHlwZS5faXRl
bUlkID0gZnVuY3Rpb24gKGVsZW1lbnQpIHsKKyAgICAgICAgdmFyIGxpID0gJHBhcmVudChlbGVt
ZW50LCAnbGknKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlSW50KGxpLmRhdGFzZXQuaWQsIDEwKTsK
KyAgICB9OworCisgICAgVmlldy5wcm90b3R5cGUuX2JpbmRJdGVtRWRpdERvbmUgPSBmdW5jdGlv
biAoaGFuZGxlcikgeworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgICRkZWxlZ2F0
ZShzZWxmLiR0b2RvTGlzdCwgJ2xpIC5lZGl0JywgJ2JsdXInLCBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICBpZiAoIXRoaXMuZGF0YXNldC5pc2NhbmNlbGVkKSB7CisgICAgICAgICAgICAgICAg
aGFuZGxlcih7CisgICAgICAgICAgICAgICAgICAgIGlkOiBzZWxmLl9pdGVtSWQodGhpcyksCisg
ICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aGlzLnZhbHVlCisgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgICRkZWxlZ2F0ZShzZWxmLiR0
b2RvTGlzdCwgJ2xpIC5lZGl0JywgJ2tleXByZXNzJywgZnVuY3Rpb24gKGV2ZW50KSB7CisgICAg
ICAgICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gc2VsZi5FTlRFUl9LRVkpIHsKKyAgICAgICAg
ICAgICAgICAvLyBSZW1vdmUgdGhlIGN1cnNvciBmcm9tIHRoZSBpbnB1dCB3aGVuIHlvdSBoaXQg
ZW50ZXIganVzdCBsaWtlIGlmIGl0CisgICAgICAgICAgICAgICAgLy8gd2VyZSBhIHJlYWwgZm9y
bQorICAgICAgICAgICAgICAgIHRoaXMuYmx1cigpOworICAgICAgICAgICAgfQorICAgICAgICB9
KTsKKyAgICB9OworCisgICAgVmlldy5wcm90b3R5cGUuX2JpbmRJdGVtRWRpdENhbmNlbCA9IGZ1
bmN0aW9uIChoYW5kbGVyKSB7CisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAgICAgJGRl
bGVnYXRlKHNlbGYuJHRvZG9MaXN0LCAnbGkgLmVkaXQnLCAna2V5dXAnLCBmdW5jdGlvbiAoZXZl
bnQpIHsKKyAgICAgICAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSBzZWxmLkVTQ0FQRV9LRVkp
IHsKKyAgICAgICAgICAgICAgICB0aGlzLmRhdGFzZXQuaXNjYW5jZWxlZCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgdGhpcy5ibHVyKCk7CisKKyAgICAgICAgICAgICAgICBoYW5kbGVyKHtpZDog
c2VsZi5faXRlbUlkKHRoaXMpfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH07
CisKKyAgICBWaWV3LnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGV2ZW50LCBoYW5kbGVyKSB7
CisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAgICAgaWYgKGV2ZW50ID09PSAnbmV3VG9k
bycpIHsKKyAgICAgICAgICAgICRvbihzZWxmLiRuZXdUb2RvLCAnY2hhbmdlJywgZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgICAgIGhhbmRsZXIoc2VsZi4kbmV3VG9kby52YWx1ZSk7CisgICAg
ICAgICAgICB9KTsKKworICAgICAgICB9IGVsc2UgaWYgKGV2ZW50ID09PSAncmVtb3ZlQ29tcGxl
dGVkJykgeworICAgICAgICAgICAgJG9uKHNlbGYuJGNsZWFyQ29tcGxldGVkLCAnY2xpY2snLCBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgaGFuZGxlcigpOworICAgICAgICAgICAgfSk7
CisKKyAgICAgICAgfSBlbHNlIGlmIChldmVudCA9PT0gJ3RvZ2dsZUFsbCcpIHsKKyAgICAgICAg
ICAgICRvbihzZWxmLiR0b2dnbGVBbGwsICdjbGljaycsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgICAgICBoYW5kbGVyKHtjb21wbGV0ZWQ6IHRoaXMuY2hlY2tlZH0pOworICAgICAgICAgICAg
fSk7CisKKyAgICAgICAgfSBlbHNlIGlmIChldmVudCA9PT0gJ2l0ZW1FZGl0JykgeworICAgICAg
ICAgICAgJGRlbGVnYXRlKHNlbGYuJHRvZG9MaXN0LCAnbGkgbGFiZWwnLCAnZGJsY2xpY2snLCBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgaGFuZGxlcih7aWQ6IHNlbGYuX2l0ZW1JZCh0
aGlzKX0pOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgfSBlbHNlIGlmIChldmVudCA9PT0g
J2l0ZW1SZW1vdmUnKSB7CisgICAgICAgICAgICAkZGVsZWdhdGUoc2VsZi4kdG9kb0xpc3QsICcu
ZGVzdHJveScsICdjbGljaycsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBoYW5kbGVy
KHtpZDogc2VsZi5faXRlbUlkKHRoaXMpfSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICB9
IGVsc2UgaWYgKGV2ZW50ID09PSAnaXRlbVRvZ2dsZScpIHsKKyAgICAgICAgICAgICRkZWxlZ2F0
ZShzZWxmLiR0b2RvTGlzdCwgJy50b2dnbGUnLCAnY2xpY2snLCBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICAgICAgaGFuZGxlcih7CisgICAgICAgICAgICAgICAgICAgIGlkOiBzZWxmLl9pdGVt
SWQodGhpcyksCisgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZDogdGhpcy5jaGVja2VkCisg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICB9IGVsc2UgaWYg
KGV2ZW50ID09PSAnaXRlbUVkaXREb25lJykgeworICAgICAgICAgICAgc2VsZi5fYmluZEl0ZW1F
ZGl0RG9uZShoYW5kbGVyKTsKKworICAgICAgICB9IGVsc2UgaWYgKGV2ZW50ID09PSAnaXRlbUVk
aXRDYW5jZWwnKSB7CisgICAgICAgICAgICBzZWxmLl9iaW5kSXRlbUVkaXRDYW5jZWwoaGFuZGxl
cik7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLy8gRXhwb3J0IHRvIHdpbmRvdworICAgIHdp
bmRvdy5hcHAgPSB3aW5kb3cuYXBwIHx8IHt9OworICAgIHdpbmRvdy5hcHAuVmlldyA9IFZpZXc7
Cit9KHdpbmRvdykpOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVl
ZG9tZXRlcjIuMS9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL3ZhbmlsbGFqcy9y
ZWFkbWUubWQgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL1NwZWVkb21ldGVyMi4xL3Jlc291
cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvdmFuaWxsYWpzL3JlYWRtZS5tZApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi41ZDg5ZjYxN2VlYmUyMTRkY2NlMDAzZjE4YWUxMjg3Nzc2M2I0NjQwCi0tLSAvZGV2L251
bGwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9TcGVlZG9tZXRlcjIuMS9yZXNvdXJj
ZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL3ZhbmlsbGFqcy9yZWFkbWUubWQKQEAgLTAsMCAr
MSwxMCBAQAorIyBTcGVlZG9tZXRlciAyLjE6IFZhbmlsbGEgSmF2YVNjcmlwdCBUb2RvTVZDIGV4
YW1wbGUKKworIyMgVGVzdCBsb2NhbGx5CisKKzEuIFJ1biBhIGxvY2FsIHNlcnZlciBmcm9tIHRo
aXMgZGlyZWN0b3J5LiAoWW91IGNvdWxkIHVzZSBbYG5wbSBpIC1nIGh0dHAtc2VydmVyYF0oaHR0
cHM6Ly9naXRodWIuY29tL2luZGV4emVyby9odHRwLXNlcnZlcikuKQorMi4gT3BlbiB0aGUgVVJM
IHBvaW50aW5nIHRvIHRoZSBsb2NhbCBzZXJ2ZXIgaW4geW91ciB3ZWIgYnJvd3NlciBvZiBjaG9p
Y2UuCisKKyMjIEJ1aWxkCisKK1RoZXJlIGlzIG5vIGJ1aWxkIHN0ZXAgZm9yIHRoaXMgZXhhbXBs
ZS4KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvaW5kZXguaHRtbCBiL1dl
YnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvaW5kZXguaHRtbAppbmRleCBhNDI1NTMyODJmNzVmZTQ3
YjFlNjQzM2Q3YTZhZDNiNGQ5NzQ5NDJmLi45ZGUyMTBlYmZiNjA5NTQ2Yjg1MzhiMjQwMDE2ZDMy
NTQ5MGFiZjY5IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL2luZGV4Lmh0
bWwKKysrIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9pbmRleC5odG1sCkBAIC01Miw3ICs1
Miw3IEBACiA8cD5Nb3Rpb25NYXJrIGlzIGEgYmVuY2htYXJrIGRlc2lnbmVkIHRvIHB1dCBicm93
c2VyIGdyYXBoaWNzIHN5c3RlbXMgdG8gdGhlIHRlc3QuPC9wPgogPC9hPgogCi08YSBjbGFzcz0i
YmVuY2htYXJrIiBocmVmPSJTcGVlZG9tZXRlcjIuMCIgdGFiaW5kZXg9IjAiPgorPGEgY2xhc3M9
ImJlbmNobWFyayIgaHJlZj0iU3BlZWRvbWV0ZXIyLjEiIHRhYmluZGV4PSIwIj4KIDxpbWcgaWQ9
InNwZWVkb21ldGVyLWxvZ28iCiAgICAgc3Jjc2V0PSJyZXNvdXJjZXMvU3BlZWRvbWV0ZXItTG9n
by5wbmcgMXgsIHJlc291cmNlcy9TcGVlZG9tZXRlci1Mb2dvQDJ4LnBuZyAyeCIgYWx0PSJTcGVl
ZG9tZXRlciI+CiA8cD5TcGVlZG9tZXRlciBpcyBhIGJyb3dzZXIgYmVuY2htYXJrIHRoYXQgbWVh
c3VyZXMgdGhlIHJlc3BvbnNpdmVuZXNzIG9mIHdlYiBhcHBsaWNhdGlvbnMuPC9wPgo=
</data>
<flag name="review"
          id="480930"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>